'From Pharo2.0a of ''18 April 2012'' [Latest update: #20582] on 4 March 2013 at 3:12:41 pm'! ----STARTUP----an Array(4 March 2013 2:53:55 pm) as /Users/denker/Desktop/Condense/Pharo-20582.image! Smalltalk condenseSources! ----QUIT----an Array(4 March 2013 3:13:01 pm) Pharo-20582.image priorSource: 0! ----STARTUP----an Array(4 March 2013 3:13:13 pm) as /Users/denker/Desktop/Condense/Pharo-20582.image! ImageCleaner cleanUpForRelease! ----QUIT----an Array(4 March 2013 3:13:34 pm) Pharo-20582.image priorSource: 225! ----STARTUP----an Array(4 March 2013 3:52:55 pm) as /builds/workspace/Pharo-2.0/Pharo.image! ----QUIT----an Array(4 March 2013 3:52:55 pm) Pharo.image priorSource: 443! ----STARTUP----an Array(4 March 2013 3:52:56 pm) as /builds/workspace/Pharo-2.0/Pharo.image! ----SNAPSHOT----an Array(4 March 2013 3:52:56 pm) Pharo-20582.image priorSource: 621! ----STARTUP----an Array(4 March 2013 4:37:56 pm) as /builds/workspace/Pharo-2.0/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/4/2013 16:36' prior: 32781641! commentForCurrentUpdate ^ 'Issue 7637: SourceFileArrayTest hardcodes some offsets http://code.google.com/p/pharo/issues/detail?id=7637 Issue 7636: fix file name of sources file in #downloadSources http://code.google.com/p/pharo/issues/detail?id=7636 Issue 7634: Slow Package Menu on Mouse Button Right Click + Fix http://code.google.com/p/pharo/issues/detail?id=7634'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/4/2013 16:36'! script557 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1326.mcz KernelTests-EstebanLorenzano.472.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-MarcusDenker.63.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1365.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.7.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.75.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.520.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1055.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/4/2013 16:36'! update20583 "self new update20583" self withUpdateLog: 'Issue 7637: SourceFileArrayTest hardcodes some offsets http://code.google.com/p/pharo/issues/detail?id=7637 Issue 7636: fix file name of sources file in #downloadSources http://code.google.com/p/pharo/issues/detail?id=7636 Issue 7634: Slow Package Menu on Mouse Button Right Click + Fix http://code.google.com/p/pharo/issues/detail?id=7634'. self loadTogether: self script557 merge: false. self flushCaches. ! ! "ScriptLoader20"! !CriticBrowser class methodsFor: 'instance creation' stamp: 'MikeMueller 3/4/2013 15:01' prior: 20249958! packagesGroup: aBuilder (aBuilder item: #'Critics Browser') action: [ | packages target env rules group | target := aBuilder model. group := target selectedGroups. packages := OrderedCollection new. group do: [ :each | each classes do: [ :cl | MCWorkingCopy managersForClass: cl do: [ :package | packages add: package ] ] ]. rules := RBCompositeLintRule allGoodRules. env := RBPackageEnvironment new packages: packages. self openOnRule: rules onEnvironment: env ]; help: 'Running critics rules on this group'! ! !CriticBrowser class methodsFor: 'instance creation' stamp: 'MikeMueller 3/4/2013 15:01' prior: 20250613! packagesMenu: aBuilder (aBuilder item: #'Critics Browser') action: [ | packages target env rules | target := aBuilder model. packages := OrderedCollection new. target selectedPackages do: [ :p | MCWorkingCopy managersForCategory: p packageName do: [ :package | packages add: package ] ]. rules := RBCompositeLintRule allGoodRules. env := RBPackageEnvironment new packages: packages. self openOnRule: rules onEnvironment: env ]; help: 'Running critics rules on this package'! ! !SourceFileArrayTest methodsFor: 'testing' stamp: 'MarcusDenker 3/4/2013 16:23' prior: 50644852! testProtocol "Test that we can access protocol correctly" "self debug: #testProtocol" | okCm notOkCm | okCm := Point>>#dist: . self assert: (SourceFiles sourcedDataAt: okCm sourcePointer) = 'Point methodsFor: ''point functions'' stamp: ''lr 7/4/2009 10:42'''. self assert: (SourceFiles protocolAt: okCm sourcePointer) = 'point functions'. notOkCm := Behavior >> #supermostPrecodeCommentFor:. self assert: (SourceFiles protocolAt: notOkCm sourcePointer) = 'accessing method dictionary'. ! ! !SourceFileArrayTest methodsFor: 'testing' stamp: 'MarcusDenker 3/4/2013 16:24' prior: 50649193! testTimeStamp "Test that we can access timeStamp correctly" "self debug: #testTimeStamp" | okCm notOkCm | okCm := Point>>#dist: . self assert: (SourceFiles sourcedDataAt: okCm sourcePointer) = 'Point methodsFor: ''point functions'' stamp: ''lr 7/4/2009 10:42'''. self assert: (SourceFiles timeStampAt: okCm sourcePointer) = 'lr 7/4/2009 10:42'. notOkCm := Behavior >> #supermostPrecodeCommentFor:. self assert: (SourceFiles timeStampAt: notOkCm sourcePointer) = ''. ! ! !SmalltalkImage methodsFor: '*Zinc-System-Support' stamp: 'MarcusDenker 3/4/2013 16:26' prior: 33492625! downloadSources "Try downloading the sources file from 2 different locations to the shared directory. Be silent when this does not work: a missing sources will be triggered later on. For now, use the VM directory." | sharedDirectory | self shouldDownloadSourcesFile ifFalse: [ ^ self ]. sharedDirectory := self vmDirectory. self sourcesDownloadClient url: 'http://pharo.gforge.inria.fr/ci/image/PharoV20.sources'; downloadTo: sharedDirectory; close. (sharedDirectory / self sourcesFile basename) exists ifTrue: [ ^ self ]. self sourcesDownloadClient url: 'http://stfx.eu/PharoV20.sources'; downloadTo: sharedDirectory; close. ! ! "Manifest-CriticBrowser"! "Tests"! "Zinc-System-Support"! ----End fileIn----! ----QUIT----an Array(4 March 2013 4:38:01 pm) Pharo.image priorSource: 793! ----STARTUP----an Array(4 March 2013 4:38:02 pm) as /builds/workspace/Pharo-2.0/Pharo.image! ----SNAPSHOT----an Array(4 March 2013 4:38:02 pm) Pharo-20583.image priorSource: 14553! ----STARTUP----an Array(4 March 2013 8:03:08 pm) as /builds/workspace/Pharo-2.0/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/4/2013 19:59' prior: 33555497! commentForCurrentUpdate ^ 'Issue 7638: Make sendersOf: 2 times faster http://code.google.com/p/pharo/issues/detail?id=7638 Issue 7403: CMD-click no longer works to activate source-links http://code.google.com/p/pharo/issues/detail?id=7403'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/4/2013 19:59'! script558 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1328.mcz KernelTests-EstebanLorenzano.472.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-MarcusDenker.63.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1367.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.7.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.75.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.520.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1055.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/4/2013 19:59'! update20584 "self new update20584" self withUpdateLog: 'Issue 7638: Make sendersOf: 2 times faster http://code.google.com/p/pharo/issues/detail?id=7638 Issue 7403: CMD-click no longer works to activate source-links http://code.google.com/p/pharo/issues/detail?id=7403'. self loadTogether: self script558 merge: false. self flushCaches. ! ! "ScriptLoader20"! !ScrollPane methodsFor: 'event handling' stamp: 'CamilloBruni 3/4/2013 17:39' prior: 32838052! mouseDown: evt self flag: #todo. "This is a quick fix for ensure cmd+click works. see: http://code.google.com/p/pharo/issues/detail?id=7403 probably a better fix is just remove it, but I want to prevent any possible side effects and there is no time for study the issue as it would be required" (evt yellowButtonPressed and: [ evt commandKeyPressed not ]) "First check for option (menu) click" ifTrue: [ (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ super mouseDown: evt. ]]. "If pane is not empty, pass the event to the last submorph, assuming it is the most appropriate recipient (!!)" scroller hasSubmorphs ifTrue: [ scroller submorphs last mouseDown: (evt transformedBy: (scroller transformFrom: self)) ]. self eventHandler ifNotNil: [ self eventHandler mouseDown: evt fromMorph: self ]! ! !CompiledMethodTrailer methodsFor: 'initialize-release' stamp: 'CamilloBruni 3/4/2013 17:29' prior: 19894076! method: aMethod | flagByte | data := size := nil. method := aMethod. flagByte := method at: (method size). "trailer kind encoded in 6 high bits of last byte" kind := self class trailerKinds at: 1+(flagByte>>2). "decode the trailer bytes, inline some common types to speed up decoding" kind = 'SourcePointer' ifTrue: [ self decodeSourcePointer ] ifFalse: [ kind = 'VarLengthSourcePointer' ifTrue: [ self decodeVarLengthSourcePointer ] ifFalse: [ kind = 'NoTrailer' ifTrue: [ self decodeNoTrailer ] ifFalse: [ "slow but general decoding using perform" self perform: ('decode' , kind) asSymbol ]]]. "after decoding the trailer, size must be set" [size notNil] assert. ! ! "Kernel"! "Morphic"! ----End fileIn----! ----QUIT----an Array(4 March 2013 8:03:18 pm) Pharo.image priorSource: 14725! ----STARTUP----an Array(4 March 2013 8:03:19 pm) as /builds/workspace/Pharo-2.0/Pharo.image! ----SNAPSHOT----an Array(4 March 2013 8:03:19 pm) Pharo-20584.image priorSource: 26618! ----STARTUP----an Array(5 March 2013 10:21:14 am) as /builds/workspace/Pharo-2.0/Pharo.image! ----QUIT----an Array(5 March 2013 10:21:14 am) Pharo.image priorSource: 26792! ----STARTUP----an Array(5 March 2013 10:21:15 am) as /builds/workspace/Pharo-2.0/Pharo.image! ----SNAPSHOT----an Array(5 March 2013 10:21:15 am) Pharo-20584.image priorSource: 26977! ----STARTUP----an Array(6 March 2013 1:06:02 pm) as /builds/workspace/Pharo-2.0/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/6/2013 13:03' prior: 33569431! commentForCurrentUpdate ^ 'Issue 7648: Setting Browser > Export Settings writes invalid startup files http://code.google.com/p/pharo/issues/detail?id=7648 Issue 7645: testValueWithinTimingRepeat sometimes fails http://code.google.com/p/pharo/issues/detail?id=7645 Issue 7642: Time and DateAndTime Parsing fix, cleanup and enhancement http://code.google.com/p/pharo/issues/detail?id=7642'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/6/2013 13:03'! script559 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1330.mcz KernelTests-MarcusDenker.474.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-MarcusDenker.63.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1367.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1055.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/6/2013 13:03'! update20585 "self new update20585" self withUpdateLog: 'Issue 7648: Setting Browser > Export Settings writes invalid startup files http://code.google.com/p/pharo/issues/detail?id=7648 Issue 7645: testValueWithinTimingRepeat sometimes fails http://code.google.com/p/pharo/issues/detail?id=7645 Issue 7642: Time and DateAndTime Parsing fix, cleanup and enhancement http://code.google.com/p/pharo/issues/detail?id=7642'. self loadTogether: self script559 merge: false. self flushCaches. ! ! "ScriptLoader20"! !Time class methodsFor: 'smalltalk-80' stamp: 'SvenVanCaekenberghe 3/4/2013 23:43' prior: 53151807! readFrom: aStream "Read a Time from the stream in the form: ::. , or may be omitted. e.g. 1:59:30 pm; 8AM; 15:30" | hour minute second ampm nanos power | hour := Integer readFrom: aStream. minute := second := nanos := 0. (aStream peekFor: $:) ifTrue: [ minute := Integer readFrom: aStream. (aStream peekFor: $:) ifTrue: [ second := Integer readFrom: aStream. (aStream peekFor: $.) ifTrue: [ power := 1. [ aStream atEnd not and: [ aStream peek isDigit ] ] whileTrue: [ nanos := nanos * 10 + aStream next digitValue. power := power * 10 ]. nanos := nanos / power * 1000000000 ] ] ]. aStream skipSeparators. (aStream atEnd not and: [ 'APap' includes: aStream peek ]) ifTrue: [ ampm := aStream next asLowercase. (ampm = $p and: [ hour < 12 ]) ifTrue: [ hour := hour + 12 ]. (ampm = $a and: [ hour = 12 ]) ifTrue: [ hour := 0 ]. (aStream peekFor: $m) ifFalse: [ aStream peekFor: $M ] ]. ^ self hour: hour minute: minute second: second nanoSecond: nanos! ! !DateAndTimeTest methodsFor: 'tests - under design' stamp: 'SvenVanCaekenberghe 3/5/2013 09:27' prior: 20431340! testAsDateAndTime "self debug: #testAsDateAndTime" #('-1199-01-05T20:33:14.321-05:00' ' 2002-05-16T17:20:45.1+01:01' ' 2002-05-16T17:20:45.02+01:01' ' 2002-05-16T17:20:45.003+01:01' ' 2002-05-16T17:20:45.0004+01:01' ' 2002-05-16T17:20:45.00005' ' 2002-05-16T17:20:45.000006+01:01' ' 2002-05-16T17:20:45.0000007+01:01' ' 2002-05-16T17:20:45.00000008-01:01' ' 2002-05-16T17:20:45.000000009+01:01' ' 2002-05-16T17:20:45.0000000001+01:01' ' 2002-05-16T17:20' ' 2002-05-16T17:20:45' ' 2002-05-16T17:20:45+01:57' ' 2002-05-16T17:20:45-02:34' ' 2002-05-16T17:20:45+00:00' ' 1997-04-26T01:02:03+01:02:3' ) do: [:each | each asDateAndTime printString = each]! ! !DateAndTimeTest methodsFor: 'tests - under design' stamp: 'SvenVanCaekenberghe 3/5/2013 09:25'! testReadFromUTCOffset "self debug: #testReadFromNoOffset" self assert: (DateAndTime readFrom: '2010-01-05T20:33:14.321Z' readStream) offset isZero ! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/4/2013 23:48' prior: 20362497! readFrom: aStream "Parse and return a new DateAndTime instance from stream, as a Date, a Time and a TimeZone offset." "self readFrom: ' 2013-03-04T23:47:52.876+01:00' readStream" | offset date time ch | date := Date readFrom: aStream. [ aStream peek isDigit ] whileFalse: [ aStream next ]. time := Time readFrom: aStream. offset := self readTimezoneOffsetFrom: aStream. ^ self year: date year month: date monthIndex day: date dayOfMonth hour: time hour minute: time minute second: time second nanoSecond: time nanoSecond offset: offset " '-1199-01-05T20:33:14.321-05:00' asDateAndTime ' 2002-05-16T17:20:45.1+01:01' asDateAndTime ' 2002-05-16T17:20:45.02+01:01' asDateAndTime ' 2002-05-16T17:20:45.003+01:01' asDateAndTime ' 2002-05-16T17:20:45.0004+01:01' asDateAndTime ' 2002-05-16T17:20:45.00005' asDateAndTime ' 2002-05-16T17:20:45.000006+01:01' asDateAndTime ' 2002-05-16T17:20:45.0000007+01:01' asDateAndTime ' 2002-05-16T17:20:45.00000008-01:01' asDateAndTime ' 2002-05-16T17:20:45.000000009+01:01' asDateAndTime ' 2002-05-16T17:20:45.0000000001+01:01' asDateAndTime ' 2002-05-16T17:20' asDateAndTime ' 2002-05-16T17:20:45' asDateAndTime ' 2002-05-16T17:20:45+01:57' asDateAndTime ' 2002-05-16T17:20:45-02:34' asDateAndTime ' 2002-05-16T17:20:45+00:00' asDateAndTime ' 1997-04-26T01:02:03+01:02:3' asDateAndTime "! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/4/2013 20:29'! readTimezoneOffsetFrom: stream "Read and return an optional timezone offset in the form of [+|-]hh[separator]mm[separator]ss or Z from stream as a duration. Separator can be a colon or a space. If there is no offset, return the local offset." | sign hour minute second | (stream peekFor: $Z) ifTrue: [ ^ Duration zero ]. ^ ('+-' includes: stream peek) ifTrue: [ sign := stream next = $- ifTrue: [ -1 ] ifFalse: [ 1 ]. hour := Integer readFrom: stream. (': ' includes: stream peek) ifFalse: [ minute := 0 ] ifTrue: [ stream next. minute := Integer readFrom: stream. (': ' includes: stream peek) ifFalse: [ second := 0 ] ifTrue: [ stream next. second := Integer readFrom: stream ] ]. Duration seconds: sign * ((hour * 3600) + (minute * 60) + second) ] ifFalse: [ self localOffset ]! ! !SettingDeclaration methodsFor: '*StartupPreferences' stamp: 'MikeMueller 3/5/2013 12:58' prior: 33156570! startupAction "I assume here that the receiver is always a class" | targetSymbol currentValue | targetSymbol := self target isSymbol ifTrue: [ self target ] ifFalse: [ self target name asSymbol ]. currentValue := self targetSelector ifNil: [ (Smalltalk at: targetSymbol) perform: self getSelector ] ifNotNil: [:s | ((Smalltalk at: targetSymbol) perform: s) perform: self getSelector]. ^ StartupAction name: self label code: (String streamContents: [:s | self targetSelector ifNotNil: [ s << '(' ]. s << '(Smalltalk at: '. targetSymbol asSymbol printOn: s. self targetSelector ifNotNil: [:ts | s << ') perform: '. ts printOn: s ]. s << ') perform: '. self setSelector asSymbol printOn: s. s << ' with: ('. currentValue settingStoreOn: s. s <<')' ]) runOnce: true! ! !TestValueWithinFix methodsFor: 'tests' stamp: 'MarcusDenker 3/5/2013 10:45' prior: 52477946! testValueWithinTimingRepeat "Test timing of valueWithin:onTimeout:" | time | time := [ 3 timesRepeat: [ [500 milliSeconds asDelay wait] valueWithin: 100 milliSeconds onTimeout: []] ] durationToRun. self assert: time < 450 milliSeconds. ! ! !FreeTypeSystemSettings class methodsFor: 'settings' stamp: 'MikeMueller 3/5/2013 12:58'! noFt2Library: aBoolean "ignore it for now" ! ! "Kernel"! "KernelTests"! "Settings-FreeType"! "StartupPreferences"! "Tests"! ----End fileIn----! ----QUIT----an Array(6 March 2013 1:06:12 pm) Pharo.image priorSource: 27153! ----STARTUP----an Array(6 March 2013 1:06:13 pm) as /builds/workspace/Pharo-2.0/Pharo.image! ----SNAPSHOT----an Array(6 March 2013 1:06:13 pm) Pharo-20585.image priorSource: 43900! ----STARTUP----an Array(7 March 2013 2:06:49 pm) as /builds/workspace/Pharo-2.0/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/6/2013 14:04' prior: 33581860! commentForCurrentUpdate ^ 'Issue 7458: Changing method in debugger (in a block activation) changes CompiledMethod but not source code http://code.google.com/p/pharo/issues/detail?id=7458'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/6/2013 14:04'! script560 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1330.mcz KernelTests-MarcusDenker.474.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-MarcusDenker.63.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1367.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/6/2013 14:04'! update20586 "self new update20586" self withUpdateLog: 'Issue 7458: Changing method in debugger (in a block activation) changes CompiledMethod but not source code http://code.google.com/p/pharo/issues/detail?id=7458'. self loadTogether: self script560 merge: false. self flushCaches. ! ! "ScriptLoader20"! !Debugger methodsFor: 'accessing' stamp: 'ClementBera 2/19/2013 16:34' prior: 20493289! recompileCurrentMethodTo: aText notifying: aController |classOfMethod category selector newMethod| classOfMethod := self selectedClass. category := self selectedMessageCategoryName. selector := self selectedClass parserClass new parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName beginsWith: 'DoIt') and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [self inform: 'can''t change selector'. ^nil]. aController setText: aText. selector := classOfMethod compile: aText classified: category notifying: aController. selector ifNil: [^nil]. "compile cancelled" contents := aText. newMethod := classOfMethod compiledMethodAt: selector. newMethod isQuick ifTrue: [self down. self selectedContext jump: (self selectedContext previousPc - self selectedContext pc)]. ^ newMethod ! ! "Tools"! ----End fileIn----! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/6/2013 17:57' prior: 33598780! commentForCurrentUpdate ^ 'Issue 7655: new default preferences https://code.google.com/p/pharo/issues/detail?id=7655 Issue 7652: Nautilus and Message browser windows don''t get updated when in a window group https://code.google.com/p/pharo/issues/detail?id=7652 Issue 7654: keybindings redirects command to alt in linux/win https://code.google.com/p/pharo/issues/detail?id=7654 Issue 7650: ''2012-07-26 16:38:48 +0200'' asDateAndTime fails https://code.google.com/p/pharo/issues/detail?id=7650 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/6/2013 17:57'! script561 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1332.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/6/2013 17:58'! update20587 "self new update20587" self withUpdateLog: 'Issue 7655: new default preferences https://code.google.com/p/pharo/issues/detail?id=7655 Issue 7652: Nautilus and Message browser windows do not get updated when in a window group https:Argument expected -> //code.google.com/p/pharo/issues/detail?id=7652 Issue 7654: keybindings redirects command to alt in linux/win https://code.google.com/p/pharo/issues/detail?id=7654 Issue 7650: ''2012-07-26 16:38:48 +0200'' asDateAndTime fails https://code.google.com/p/pharo/issues/detail?id=7650 '. self loadTogether: self script561 merge: false. NECPreferences popupAutomaticDelay: 500. TextEditorDialogWindow autoAccept: true. Parser warningAllowed: true. self flushCaches. ! ! "ScriptLoader20"! !SystemWindow methodsFor: '*Morphic-Worlds' stamp: 'CamilleTeruel 3/6/2013 14:57' prior: 51685523! isDisplayed " Answer true if I am currently displayed in the World" ^ self world notNil! ! !KMComposedModifier methodsFor: 'arithmetic' stamp: 'GuillermoPolito 4/10/2011 02:32' prior: 24127217! + modified ^ modified asShortcut modifiedBy: self! ! !KMComposedModifier methodsFor: 'accessing' stamp: 'GuillermoPolito 5/31/2011 18:26' prior: 24127368! command modifiers add: KMModifier command! ! !KMComposedModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/19/2011 21:17' prior: 24127508! initialize super initialize. modifiers := Set new.! ! !KMComposedModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 21:18' prior: 24127658! matchesEvent: aKeyboardEvent ^ modifiers allSatisfy: [:modifier| modifier matchesEvent: aKeyboardEvent]! ! !KMComposedModifier methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:57' prior: 24127862! modifiedBy: modifier modifiers add: modifier. self updateIdentifier.! ! !KMCtrlModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 4/9/2011 23:52' prior: 24129374! initialize super initialize. identifier := #c. name := 'Ctrl'.! ! !KMCtrlModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 24129214! matchesEvent: aKeyboardEvent ^ aKeyboardEvent controlKeyPressed! ! !KMCommandModifier methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 18:53' prior: 24125499! eventCode ^ 64.! ! !KMCommandModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 5/31/2011 19:54' prior: 24125777! initialize super initialize. identifier := #m. name := 'Cmd'.! ! !KMCommandModifier methodsFor: 'matching' stamp: 'EstebanLorenzano 3/6/2013 16:41' prior: 24125613! matchesEvent: aKeyboardEvent self flag: #todo. "Command in windows and linux platforms is 'meta' key and do not have any sense (for the environment, right now). In the future we need to create a KMMetaModifier to handle properly this, and keep command as a mac-specific key" (OSPlatform isUnix or: [ OSPlatform isWin32 ]) ifTrue: [ ^ aKeyboardEvent controlKeyPressed ]. ^ aKeyboardEvent commandKeyPressed! ! !DateAndTimeTest methodsFor: 'tests - under design' stamp: 'SvenVanCaekenberghe 3/6/2013 16:41'! testReadFromSpaceBeforeOffset self assert: '2012-07-26 16:38:48 +0200' asDateAndTime offset equals: 2 hour. self assert: '2012-07-26 16:38:48 +02' asDateAndTime offset equals: 2 hour. ! ! !DateAndTimeTest methodsFor: 'tests - under design' stamp: 'SvenVanCaekenberghe 3/6/2013 16:48' prior: 33594172! testReadFromUTCOffset self assert: (DateAndTime readFrom: '2010-01-05T20:33:14.321Z' readStream) offset isZero. self assert: (DateAndTime readFrom: '2010-01-05T20:33:14.321+00' readStream) offset isZero. self assert: (DateAndTime readFrom: '2010-01-05T20:33:14.321+0000' readStream) offset isZero. self assert: (DateAndTime readFrom: '2010-01-05T20:33:14.321+00:00' readStream) offset isZero. ! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/6/2013 16:38' prior: 33594427! readFrom: aStream "Parse and return a new DateAndTime instance from stream, as a Date, a Time and a TimeZone offset." "self readFrom: ' 2013-03-04T23:47:52.876+01:00' readStream" | offset date time ch | date := Date readFrom: aStream. [ aStream peek isDigit ] whileFalse: [ aStream next ]. time := Time readFrom: aStream. aStream skipSeparators. offset := self readTimezoneOffsetFrom: aStream. ^ self year: date year month: date monthIndex day: date dayOfMonth hour: time hour minute: time minute second: time second nanoSecond: time nanoSecond offset: offset " '-1199-01-05T20:33:14.321-05:00' asDateAndTime ' 2002-05-16T17:20:45.1+01:01' asDateAndTime ' 2002-05-16T17:20:45.02+01:01' asDateAndTime ' 2002-05-16T17:20:45.003+01:01' asDateAndTime ' 2002-05-16T17:20:45.0004+01:01' asDateAndTime ' 2002-05-16T17:20:45.00005' asDateAndTime ' 2002-05-16T17:20:45.000006+01:01' asDateAndTime ' 2002-05-16T17:20:45.0000007+01:01' asDateAndTime ' 2002-05-16T17:20:45.00000008-01:01' asDateAndTime ' 2002-05-16T17:20:45.000000009+01:01' asDateAndTime ' 2002-05-16T17:20:45.0000000001+01:01' asDateAndTime ' 2002-05-16T17:20' asDateAndTime ' 2002-05-16T17:20:45' asDateAndTime ' 2002-05-16T17:20:45+01:57' asDateAndTime ' 2002-05-16T17:20:45-02:34' asDateAndTime ' 2002-05-16T17:20:45+00:00' asDateAndTime ' 1997-04-26T01:02:03+01:02:3' asDateAndTime "! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/6/2013 16:22'! readOptionalSeparatorFrom: stream "Read an optional separator (non decimal digit) from stream and return it. Return nil if nothing was read" ^ (stream atEnd or: [ '0123456789' includes: stream peek]) ifTrue: [ nil ] ifFalse: [ stream next ]! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/6/2013 16:33' prior: 33595916! readTimezoneOffsetFrom: stream "Read and return an optional timezone offset in the form of [+|-]hh[[separator]mm[[separator]ss]] or Z from stream as a duration. If there is no offset, return the local offset." | sign hour minute second | (stream peekFor: $Z) ifTrue: [ ^ Duration zero ]. hour := minute := second := 0. ^ ('+-' includes: stream peek) ifTrue: [ sign := stream next = $- ifTrue: [ -1 ] ifFalse: [ 1 ]. hour := self readTwoDigitIntegerFrom: stream. (self readOptionalSeparatorFrom: stream) ifNotNil: [ minute := self readTwoDigitIntegerFrom: stream. (self readOptionalSeparatorFrom: stream) ifNotNil: [ second := Integer readFrom: stream ] ]. Duration seconds: sign * ((hour * 3600) + (minute * 60) + second) ] ifFalse: [ self localOffset ]! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 3/6/2013 16:34'! readTwoDigitIntegerFrom: stream "Parse and return a decimal number of 2 digits from stream. Fail if that is not possible" | integer | integer := 0. 2 timesRepeat: [ | char | char := stream next. ('0123456789' includes: char) ifFalse: [ self error: 'Decimal digit expected' ]. integer := (integer * 10) + char digitValue ]. ^ integer! ! !KMModifier methodsFor: 'arithmetic' stamp: 'CamilloBruni 3/19/2011 21:25' prior: 24160635! + modifier ^ modifier asShortcut modifiedBy: self! ! !KMModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 24160775! identifier ^ identifier! ! !KMModifier methodsFor: 'comparing' stamp: 'CamilloBruni 3/19/2011 20:49' prior: 24160889! matches: aKeyboardEvent self shouldNotImplement! ! !KMModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 24161027! matchesEvent: aKeyboardEvent self subclassResponsibility! ! !KMModifier methodsFor: 'printing' stamp: 'CamilloBruni 3/19/2011 21:16' prior: 24161174! modifiedBy: modifier ^ KMComposedModifier new modifiedBy: modifier; modifiedBy: self; yourself! ! !KMModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 24161365! name ^ name! ! !KMAltModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 24103435! initialize super initialize. identifier := #a. name := 'Alt'.! ! !KMAltModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 24103592! matchesEvent: aKeyboardEvent ^ aKeyboardEvent altKeyPressed! ! !KMShiftModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/20/2011 23:55' prior: 24176078! initialize super initialize. identifier := #s. name := 'Shift'.! ! !KMShiftModifier methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 15:50' prior: 24175924! matchesEvent: aKeyboardEvent ^ aKeyboardEvent shiftPressed! ! "Kernel"! "KernelTests"! "Keymapping-Shortcuts"! "Morphic"! ----End fileIn----! ----QUIT----an Array(7 March 2013 2:07:08 pm) Pharo.image priorSource: 44074! ----STARTUP----an Array(7 March 2013 3:51 pm) as /Users/MAC/Desktop/Dev/Pharo/w30/w30.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/7/2013 15:46' prior: 33609587! commentForCurrentUpdate ^ 'Release 2.0'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/7/2013 15:46'! script562 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1332.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/7/2013 15:46'! update20588 "self new update20588" self withUpdateLog: 'Release 2.0'. self loadTogether: self script562 merge: false. ImageCleaner new cleanUpForRelease. (self confirm: 'Do you wish to advance to Pharo 3.0 Unstable? [Yes] Your system will be marked as Pharo3.0 (Unstable), and you will subsequently receive development updates for 3.0 (unstable stream). [No] Your system will remain at Pharo 2.0.') ifTrue: [SystemVersion newVersion: 'Pharo3.0a'. SystemVersion current date: '7 March 2013'. self inform: 'You may now save this image and retrieve updates again for Pharo2.0a and beyond.'] ifFalse: [SystemVersion newVersion: 'Pharo2.0'.]. . self flushCaches. ! ! MetacelloScriptLoader removeSelector: #writeCS:forUpdate:withName:! MetacelloScriptLoader removeSelector: #writeCS:forUpdate:! MetacelloScriptLoader removeSelector: #workingCopyFromPackageName:! MetacelloScriptLoader removeSelector: #withUpdateLog:! MetacelloScriptLoader removeSelector: #waitingFolderMCZFiles! MetacelloScriptLoader removeSelector: #verifyNewUpdate! MetacelloScriptLoader removeSelector: #updatesListFileName! MetacelloScriptLoader removeSelector: #updatesListFile! MetacelloScriptLoader removeSelector: #updateUpdatesList:! MetacelloScriptLoader removeSelector: #update20075! MetacelloScriptLoader removeSelector: #update20074! MetacelloScriptLoader removeSelector: #update20067! MetacelloScriptLoader removeSelector: #unloadPackageNamed:! MetacelloScriptLoader removeSelector: #unloadPackage:! MetacelloScriptLoader removeSelector: #theScriptLoaderPackageName! MetacelloScriptLoader removeSelector: #taskForcesRepositoryUrlString! MetacelloScriptLoader removeSelector: #shortImageName! MetacelloScriptLoader removeSelector: #setUpdateAndScriptVersionNumbers! MetacelloScriptLoader removeSelector: #setToRepositoriesPassword:to:! MetacelloScriptLoader removeSelector: #savePackage:in:with:! MetacelloScriptLoader removeSelector: #saveLatestScriptLoaderToWaitingFolder! MetacelloScriptLoader removeSelector: #saveLatestScriptLoaderToHome! MetacelloScriptLoader removeSelector: #saveInToReloadCachePackage:with:! MetacelloScriptLoader removeSelector: #saveImageForRunningTests! MetacelloScriptLoader removeSelector: #saveChangedPackagesIntoWaitingFolder! MetacelloScriptLoader removeSelector: #saveAsNewImageWithCurrentReleaseNameToPublish! MetacelloScriptLoader removeSelector: #saveAsNewImageWithCurrentReleaseName! MetacelloScriptLoader removeSelector: #saveAsImageAsTestImage! MetacelloScriptLoader removeSelector: #rootURLString! MetacelloScriptLoader removeSelector: #repositoryTreated! MetacelloScriptLoader removeSelector: #repositoryTaskForces! MetacelloScriptLoader removeSelector: #repositorySqueakTrunk! MetacelloScriptLoader removeSelector: #repositoryMC! MetacelloScriptLoader removeSelector: #repository:! MetacelloScriptLoader removeSelector: #repository39! MetacelloScriptLoader removeSelector: #repository310! MetacelloScriptLoader removeSelector: #repository! MetacelloScriptLoader removeSelector: #removeUpdateMethods! MetacelloScriptLoader removeSelector: #removeScriptMethods! MetacelloScriptLoader removeSelector: #removeAllRepositories! MetacelloScriptLoader removeSelector: #removeAllHTTPRepositories:! MetacelloScriptLoader removeSelector: #publishChanges! MetacelloScriptLoader removeSelector: #prepareNewUpdateSilently! MetacelloScriptLoader removeSelector: #prepareNewUpdate! MetacelloScriptLoader removeSelector: #postUpdate! MetacelloScriptLoader removeSelector: #packagesNotToSavePatternNames! MetacelloScriptLoader removeSelector: #openWindow:label:! MetacelloScriptLoader removeSelector: #newerVersionsIn:! MetacelloScriptLoader removeSelector: #newGenerateScriptTemplateWithCurrentPackages:! MetacelloScriptLoader removeSelector: #newGenerateNewUpdateMethodSilentlyPreLoad:postLoad:! MetacelloScriptLoader removeSelector: #newGenerateNewUpdateMethod! MetacelloScriptLoader removeSelector: #mergePackageFromWaitingFolder! MetacelloScriptLoader removeSelector: #logStream! MetacelloScriptLoader removeSelector: #logContents! MetacelloScriptLoader removeSelector: #log:! MetacelloScriptLoader removeSelector: #loadVersionFromFileNamed:! MetacelloScriptLoader removeSelector: #loadTogether:merge:! MetacelloScriptLoader removeSelector: #loadPackageFromWaitingFolder! MetacelloScriptLoader removeSelector: #loadOneAfterTheOther:merge:! MetacelloScriptLoader removeSelector: #loadLatestUpdateListSilently! MetacelloScriptLoader removeSelector: #loadLatestUpdateList! MetacelloScriptLoader removeSelector: #loadLatestScriptloader! MetacelloScriptLoader removeSelector: #launchUpdateSilently! MetacelloScriptLoader removeSelector: #launchUpdate! MetacelloScriptLoader removeSelector: #latestScriptLoaderPackageIdentificationString! MetacelloScriptLoader removeSelector: #installVersionInfo! MetacelloScriptLoader removeSelector: #installRepository:for:! MetacelloScriptLoader removeSelector: #inboxRepositoryUrlString! MetacelloScriptLoader removeSelector: #inboxRepositoryDefault! MetacelloScriptLoader removeSelector: #inboxRepository! MetacelloScriptLoader removeSelector: #homeRepositoryUrlString! MetacelloScriptLoader removeSelector: #gofer! MetacelloScriptLoader removeSelector: #getLatestUpdateNumber! MetacelloScriptLoader removeSelector: #getLatestScriptNumber! MetacelloScriptLoader removeSelector: #generateScriptTemplateWithCurrentPackages:! MetacelloScriptLoader removeSelector: #generateScriptTemplateWithAllCurrentPackages! MetacelloScriptLoader removeSelector: #generateScriptAndUpdateMethodForNewVersionSilentlyPreLoad:postLoad:! MetacelloScriptLoader removeSelector: #generateScriptAndUpdateMethodForNewVersion! MetacelloScriptLoader removeSelector: #generateNewUpdateMethod! MetacelloScriptLoader removeSelector: #generateCompleteFixList! MetacelloScriptLoader removeSelector: #generateCS:fromUpdate:on:! MetacelloScriptLoader removeSelector: #flushCaches! MetacelloScriptLoader removeSelector: #doneApplyingChangesSilentlyIssues:preLoad:postLoad:! MetacelloScriptLoader removeSelector: #doneApplyingChangesSilentlyComment:preLoad:postLoad:! MetacelloScriptLoader removeSelector: #doneApplyingChanges! MetacelloScriptLoader removeSelector: #deletePackage:! MetacelloScriptLoader removeSelector: #currentVersions! MetacelloScriptLoader removeSelector: #currentUpdateVersionNumber! MetacelloScriptLoader removeSelector: #currentScriptVersionNumber! MetacelloScriptLoader removeSelector: #currentPackages! MetacelloScriptLoader removeSelector: #copyPackagesFromWaitingFolderToHomeRepository! MetacelloScriptLoader removeSelector: #compileScriptMethodWithCurrentPackages:! MetacelloScriptLoader removeSelector: #compileNewUpdateMethodSilentlyPreLoad:postLoad:! MetacelloScriptLoader removeSelector: #compileNewUpdateMethod! MetacelloScriptLoader removeSelector: #commentForCurrentUpdate! MetacelloScriptLoader removeSelector: #checkImageIsUptodateSilently! MetacelloScriptLoader removeSelector: #checkImageIsUptodate! MetacelloScriptLoader removeSelector: #buildConfigurationMapFor:! MetacelloScriptLoader removeSelector: #announceOnMailingList! MetacelloScriptLoader removeSelector: #allManagers! MetacelloScriptLoader removeSelector: #allCurrentPackages! MetacelloScriptLoader removeSelector: #allCurrentDirtyPackages! MetacelloScriptLoader removeSelector: #addRepositoryTreatedToAllPackages! MetacelloScriptLoader removeSelector: #addRepositoryToPackageNamed:! MetacelloScriptLoader removeSelector: #addRepositoryTaskForcesToAllPackages! MetacelloScriptLoader removeSelector: #addRepositorySqueakTrunkToAllPackages! MetacelloScriptLoader removeSelector: #addRepositoryMCToAllPackages! MetacelloScriptLoader removeSelector: #addRepository39ToAllPackages! MetacelloScriptLoader removeSelector: #addRepository310ToAllPackages! MetacelloScriptLoader removeSelector: #addPackage:! MetacelloScriptLoader removeSelector: #addHomeRepositoryToPackageNamed:! MetacelloScriptLoader removeSelector: #addHomeRepositoryToAllPackages! MetacelloScriptLoader removeSelector: #addExtraRepositories! MetacelloScriptLoader removeSelector: #CSForLastUpdateAndPatchUpdatesList:! MetacelloScriptLoader removeSelector: #CSForLastUpdate:! MetacelloScriptLoader class removeSelector: #theme! MetacelloScriptLoader class removeSelector: #showIntegrationMenu! MetacelloScriptLoader class removeSelector: #rootURLString! MetacelloScriptLoader class removeSelector: #resetLogStream! MetacelloScriptLoader class removeSelector: #releaseMenu! MetacelloScriptLoader class removeSelector: #menuCommandOn:! MetacelloScriptLoader class removeSelector: #loadLatestPackage:fromSqueaksource:! MetacelloScriptLoader class removeSelector: #loadLatestPackage:fromRepository:! MetacelloScriptLoader class removeSelector: #loadLatestPackage:from:! MetacelloScriptLoader class removeSelector: #latestVersionOf:location:! MetacelloScriptLoader class removeSelector: #latestSource:location:! MetacelloScriptLoader class removeSelector: #initialize! MetacelloScriptLoader class removeSelector: #hideIntegrationMenu! MetacelloScriptLoader class removeSelector: #gofer! MetacelloScriptLoader class removeSelector: #defaultMCWaitingFolder! MetacelloScriptLoader class removeSelector: #currentlyIntegratingChanges! MetacelloScriptLoader class removeSelector: #currentMajorVersionNumber:! MetacelloScriptLoader class removeSelector: #currentMajorVersionNumber! MetacelloScriptLoader class removeSelector: #checkImageInSyncWithUpdate:! MetacelloScriptLoader class removeSelector: #checkImageInSyncWithUpdate! Smalltalk globals removeClassNamed: #MetacelloScriptLoader! MetacelloLoader removeSelector: #resetPackagesBeforeLastLoad! MetacelloLoader removeSelector: #packagesNotToSavePatternNames! MetacelloLoader removeSelector: #markPackagesBeforeNewCodeIsLoaded! MetacelloLoader removeSelector: #initialize! MetacelloLoader removeSelector: #diffPackages! MetacelloLoader removeSelector: #currentVersionsToBeSaved! MetacelloLoader removeSelector: #currentMajorVersionNumberWithoutDot! MetacelloLoader removeSelector: #currentMajorVersionNumber! MetacelloLoader removeSelector: #currentChangedPackages! MetacelloLoader removeSelector: #allCurrentVersions! MetacelloLoader class removeSelector: #waitingCacheFolder! MetacelloLoader class removeSelector: #packageToBeTestedFolderName! Smalltalk globals removeClassNamed: #MetacelloLoader! HazelKernelAnalyzer removeSelector: #list:! HazelKernelAnalyzer removeSelector: #list! HazelKernelAnalyzer removeSelector: #initialize! HazelKernelAnalyzer removeSelector: #dependentPackages! HazelKernelAnalyzer removeSelector: #dependentClasses! HazelKernelAnalyzer removeSelector: #analyzeMethods:! HazelKernelAnalyzer removeSelector: #analyzeMethod:! HazelKernelAnalyzer removeSelector: #analyzeClassVar:! HazelKernelAnalyzer removeSelector: #analyze! HazelKernelAnalyzer class removeSelector: #using:! HazelKernelAnalyzer class removeSelector: #forPackageNamed:! Smalltalk globals removeClassNamed: #HazelKernelAnalyzer! ConfigurationOfPharo20 removeSelector: #versionForMethodName:! ConfigurationOfPharo20 removeSelector: #version20075PreLoad! ConfigurationOfPharo20 removeSelector: #version20075Kernel:! ConfigurationOfPharo20 removeSelector: #version20075Environment:! ConfigurationOfPharo20 removeSelector: #version20075Core:! ConfigurationOfPharo20 removeSelector: #version20075:! ConfigurationOfPharo20 removeSelector: #testPatterns! ConfigurationOfPharo20 removeSelector: #templateVersionSplit! ConfigurationOfPharo20 removeSelector: #templateVersion! ConfigurationOfPharo20 removeSelector: #templateBaseline! ConfigurationOfPharo20 removeSelector: #requirementsFor:! ConfigurationOfPharo20 removeSelector: #project! ConfigurationOfPharo20 removeSelector: #packages:selectMatch:rejectMatch:! ConfigurationOfPharo20 removeSelector: #packages:selectMatch:! ConfigurationOfPharo20 removeSelector: #newVersion:description:preLoad:postLoad:fromBaseline:! ConfigurationOfPharo20 removeSelector: #newVersion:description:preLoad:postLoad:! ConfigurationOfPharo20 removeSelector: #newVersion:! ConfigurationOfPharo20 removeSelector: #newBaseline:! ConfigurationOfPharo20 removeSelector: #groupsTest! ConfigurationOfPharo20 removeSelector: #groupsKernel! ConfigurationOfPharo20 removeSelector: #groupsEnvironment! ConfigurationOfPharo20 removeSelector: #groupsCore! ConfigurationOfPharo20 removeSelector: #groupsAndPackages! ConfigurationOfPharo20 removeSelector: #generateVersion:fromBaseline:version:groups:! ConfigurationOfPharo20 removeSelector: #generateDoIt:version:with:! ConfigurationOfPharo20 removeSelector: #generateBaseline:version:imports:groups:defineGroups:! ConfigurationOfPharo20 removeSelector: #generateBaseline:version:imports:groups:! ConfigurationOfPharo20 removeSelector: #createPackage:withRequirements:! ConfigurationOfPharo20 removeSelector: #createPackage:with:! ConfigurationOfPharo20 removeSelector: #createPackage:! ConfigurationOfPharo20 removeSelector: #createIncluded:with:! ConfigurationOfPharo20 removeSelector: #createImports:with:! ConfigurationOfPharo20 removeSelector: #createGroup:with:! ConfigurationOfPharo20 removeSelector: #collectionToString:! ConfigurationOfPharo20 removeSelector: #calculateBaselineForVersion:! ConfigurationOfPharo20 removeSelector: #baseline20Kernel:! ConfigurationOfPharo20 removeSelector: #baseline20Core:! ConfigurationOfPharo20 removeSelector: #baseline20:! ConfigurationOfPharo20 removeSelector: #allPackages! ConfigurationOfPharo20 class removeSelector: #validate! ConfigurationOfPharo20 class removeSelector: #project! ConfigurationOfPharo20 class removeSelector: #loadDevelopment! ConfigurationOfPharo20 class removeSelector: #loadBleedingEdge! ConfigurationOfPharo20 class removeSelector: #load! ConfigurationOfPharo20 class removeSelector: #isMetacelloConfig! ConfigurationOfPharo20 class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfPharo20 class removeSelector: #ensureMetacello! ConfigurationOfPharo20 class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfPharo20 class removeSelector: #DevelopmentSupport! Smalltalk globals removeClassNamed: #ConfigurationOfPharo20! ScriptLoader removeSelector: #update20586! ScriptLoader removeSelector: #update20585! ScriptLoader removeSelector: #update20584! ScriptLoader removeSelector: #update20583! ScriptLoader removeSelector: #update20582! ScriptLoader removeSelector: #update20581! ScriptLoader removeSelector: #script561! ScriptLoader removeSelector: #script560! ScriptLoader removeSelector: #script559! ScriptLoader removeSelector: #script558! ScriptLoader removeSelector: #script557! ScriptLoader removeSelector: #script556! "ScriptLoader20"! ----End fileIn----! ----QUIT----an Array(7 March 2013 3:51:29 pm) w30.image priorSource: 73478! ----STARTUP----an Array(7 March 2013 4:00:05 pm) as /Users/MAC/Desktop/Dev/Pharo/w30/Pharo-30000.image! ----QUIT/NOSAVE----an Array(7 March 2013 4:00:58 pm) Pharo-30000.image priorSource: 97962! ----STARTUP----an Array(7 March 2013 4:01:30 pm) as /Users/MAC/Desktop/Dev/Pharo/w30/Pharo-20588.image! | processes | processes := Process allInstances select: [ :p | | ctx | ctx := p suspendedContext. ctx notNil and: [ ctx method == (Delay>>#wait) and: [ ctx sender sender sender method selector == #secondsWhenClockTicks ] ]]. processes do: #terminate! ----QUIT----an Array(7 March 2013 4:01:46 pm) Pharo-20588.image priorSource: 97962! ----STARTUP----an Array(18 March 2013 1:43:23 pm) as /Users/denker/Projects/Pharo/work30/Pharo-20588.image! ----End fileIn----! ----QUIT/NOSAVE----an Array(18 March 2013 1:43:36 pm) Pharo-20588.image priorSource: 98607! ----STARTUP----an Array(18 March 2013 1:44:14 pm) as /Users/denker/Projects/Pharo/work30/Pharo-20588.image! self updateListFileURLString! ----QUIT/NOSAVE----an Array(18 March 2013 1:46:03 pm) Pharo-20588.image priorSource: 98607! ----STARTUP----an Array(18 March 2013 1:48:39 pm) as /Users/denker/Projects/Pharo/work30/Pharo-20588.image! ----QUIT/NOSAVE----an Array(18 March 2013 1:48:52 pm) Pharo-20588.image priorSource: 98607! ----STARTUP----an Array(18 March 2013 1:57:55 pm) as /Users/denker/Projects/Pharo/work30/Pharo-20588.image! ----QUIT/NOSAVE----an Array(18 March 2013 2:00:04 pm) Pharo-20588.image priorSource: 98607! SystemVersion newVersion: 'Pharo3.0'. ScriptLoader currentMajorVersionNumber: 3.0.! ----STARTUP----an Array(18 March 2013 2:01:48 pm) as /Users/denker/Projects/Pharo/work30/Pharo-20588.image! SystemVersion newVersion: 'Pharo3.0'. ScriptLoader currentMajorVersionNumber: 3.0. ! ----End fileIn----! !MCHttpRepository class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 3/18/2013 14:04' prior: 24809994! inboxRepository ^ self location: 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main'.! ! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'MarcusDenker 3/18/2013 14:05' prior: 32747362! homeRepositoryUrlString ^ 'http://smalltalkhub.com/mc/Pharo/Pharo30/main'! ! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'MarcusDenker 4/19/2012 16:58' prior: 33654604! homeRepositoryUrlString ^ self rootURLString, 'Pharo20'! ! !MCHttpRepository class methodsFor: 'instance creation' stamp: 'SeanDeNigris 8/26/2012 15:50' prior: 33654405! inboxRepository ^ self location: 'http://ss3.gemstone.com/ss/PharoInbox/'.! ! ScriptLoader new addHomeRepositoryToAllPackages! "Monticello"! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'MarcusDenker 3/18/2013 14:11' prior: 33654792! homeRepositoryUrlString ^ self rootURLString, 'Pharo30'! ! ScriptLoader new addHomeRepositoryToAllPackages! ScriptLoader new removeAllRepositories; addHomeRepositoryToAllPackages! "ScriptLoader30"! ScriptLoader removeSelector: #script562! self new removeScriptMethods! ScriptLoader removeSelector: #update20587! self new removeUpdateMethods! LogStream := nil! "ScriptLoader30"! ----SNAPSHOT----an Array(18 March 2013 2:14:54 pm) Pharo-20588.image priorSource: 98607! ImageCleaner cleanUpForRelease! ----QUIT----an Array(18 March 2013 2:15:28 pm) Pharo-20588.image priorSource: 101175! !ScriptLoader commentStamp: 'StephaneDucasse 5/26/2010 20:49' prior: 32722961! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: 'StephaneDucasse 5/26/2010 20:49' prior: 33655897! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----an Array(18 March 2013 4:55:32 pm) as /Users/MAC/Downloads/30000.zip Folder/Pharo-30000.image! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:08' prior: 32752791! addHomeRepositoryToAllPackages "self new addHomeRepositoryToAllPackages" self allManagers do: [:each | each repositoryGroup addRepository: self repository; addRepository: self repository20; addRepository: self inboxRepository ]. MCRepositoryGroup default addRepository: self repository; addRepository: self repository20; addRepository: self inboxRepository. ! ! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/18/2013 16:42' prior: 33628178! commentForCurrentUpdate ^ '10021 Duration should have wait https://pharo.fogbugz.com/f/cases/10021 '! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:18'! csForLastUpdate: aString "Create the changeSet for latest update (preamble, update, postload)" | str updateNumber filename| updateNumber := self getLatestUpdateNumber. filename := updateNumber asString, '-Pha-', aString, '.cs'. filename asFileReference delete; writeStreamDo: [ :stream| self generateCS: self latestScriptLoaderPackageIdentificationString fromUpdate: updateNumber on: stream]. ^ filename! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:19'! csForLastUpdateAndPatchUpdatesList: aString "Creates update changeSet and pending list for continuous integration" | filename | filename := self csForLastUpdate: aString. self updatePendingList: aString. ^ filename ! ! !ScriptLoader methodsFor: 'accessing' stamp: 'EstebanLorenzano 3/18/2013 15:05' prior: 32729825! diffServerRootString ^ 'http://ss3.gemstone.com/ss/Pharo30/'! ! !ScriptLoader methodsFor: 'accessing' stamp: 'StephaneDucasse 8/21/2011 15:23' prior: 32729983! inboxRepositoryDefault ^ MCHttpRepository new location: self inboxRepositoryUrlString; user: ''; password: ''! ! !ScriptLoader methodsFor: 'private' stamp: 'Jb 10/23/2010 12:14' prior: 32759753! launchUpdate UpdateStreamer new updateFromServer! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 15:05' prior: 32738752! loadLatestScriptloader "self new loadLatestScriptloader" self class loadLatestPackage: 'ScriptLoader', self currentMajorVersionNumberWithoutDot fromSqueaksource: 'Pharo30' ! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 15:57'! pendingListFile ^ self pendingListFileName asFileReference! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 15:58'! pendingListFileName ^ 'updates', (SystemVersion current majorMinor:''), '.pending'! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:06'! pharo20Repository ^ pharo20Repository ifNil: [ ]! ! !ScriptLoader methodsFor: 'private' stamp: 'StephaneDucasse 10/16/2012 12:45' prior: 32730197! produceDiffLinksForPackages "self defaultMCWaitingFolder allFileNames" "self new produceDiffLinksForPackages" | filenames | filenames := self waitingFolderMCZFiles. filenames := filenames reject: [:each | 'ScriptLoader*' match: each ]. ^ filenames collect: [:name | |diff | diff := name copyUpToLast: $. . diff := self diffServerRootString, diff, '.diff' ] ! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'EstebanLorenzano 3/18/2013 16:16' prior: 32760750! publishChanges | username password changescriptname changesetFilename str strings| (FileStream isAFileNamed: 'PharoPass.txt') ifTrue: [ str := FileStream fileNamed: 'PharoPass.txt'. strings := str contents substrings. username := strings first. password := strings second] ifFalse: [ username := UIManager default request: 'Pharo repository login'. password := UIManager default requestPassword: 'Pharo repository password'.]. self setToRepositoriesPassword: password to: username. changescriptname := UIManager default request: 'Changeset name (no space)' initialAnswer: 'WhatAsChanged'. changesetFilename := self csForLastUpdateAndPatchUpdatesList: changescriptname. self copyPackagesFromWaitingFolderToHomeRepository. self announceOnMailingList. self inform: 'All packages have been uploaded to the Pharo repository. Remaining manual steps: 1) ./upFilesXX ',changesetFilename,' 2) ./upFilesXX updatesXX.list 3) Announce new update on mailing list'! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:07'! repository20 ^ repository20 ifNil: [ repository20 := MCHttpRepository new location: self rootURLString, 'Pharo20'; user: ''; password: ''] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/18/2013 15:15'! script100 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1339.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/18/2013 16:42'! script101 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 15:08'! update30000! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 15:15'! update30001 "self new update30001" ScriptLoader new addHomeRepositoryToAllPackages. self withUpdateLog: '7618 use more efficient setSourcePointer: in CompiledMethod https://pharo.fogbugz.com/f/cases/7618 7619 comments in isAbstractClass are wrong https://pharo.fogbugz.com/f/cases/7619 (testing 3.0 release process and integrating some of the latest fixes to 2.0 in one shot) '. self loadTogether: self script100 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 16:42'! update30002 "self new update30002" self withUpdateLog: '10021 Duration should have wait https://pharo.fogbugz.com/f/cases/10021 '. self loadTogether: self script101 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:15'! updatePendingList: aString "ScriptLoader new pendingUpdatesList: 'cleanUpMethods'. Writes the pending updates into a 'staging' list, so the continuous integration can process and move it to updates when validated (and not before)." self pendingListFile writeStreamDo: [ :str| str setToEnd; cr; nextPutAll: self currentUpdateVersionNumber asString; nextPutAll: '-Pha-', aString, '.cs' ]! ! ScriptLoader removeSelector: #CSForLastUpdateAndPatchUpdatesList:! ScriptLoader removeSelector: #CSForLastUpdate:! "ScriptLoader30"! ScriptLoader removeSelector: #script100! ScriptLoader removeSelector: #script101! ScriptLoader removeSelector: #update30002! ScriptLoader removeSelector: #update30001! ScriptLoader removeSelector: #update20588! ----QUIT/NOSAVE----an Array(18 March 2013 4:56:58 pm) Pharo-30000.image priorSource: 101298! ----STARTUP----an Array(18 March 2013 4:57:02 pm) as /Users/MAC/Downloads/30000.zip Folder/Pharo-30000.image! !ScriptLoader methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 3/18/2013 16:57' prior: 32729825! diffServerRootString ^ 'http://ss3.gemstone.com/ss/Pharo30/'! ! !ScriptLoader methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 3/18/2013 16:57' prior: 32738752! loadLatestScriptloader "self new loadLatestScriptloader" self class loadLatestPackage: 'ScriptLoader', self currentMajorVersionNumberWithoutDot fromSqueaksource: 'Pharo30' ! ! "ScriptLoader30"! ----QUIT----an Array(18 March 2013 4:58:18 pm) Pharo-30000.image priorSource: 101298! !ScriptLoader commentStamp: 'StephaneDucasse 5/26/2010 20:49' prior: 32722961! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: 'StephaneDucasse 5/26/2010 20:49' prior: 33690602! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----an Array(18 March 2013 6:05:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:08' prior: 32752791! addHomeRepositoryToAllPackages "self new addHomeRepositoryToAllPackages" self allManagers do: [:each | each repositoryGroup addRepository: self repository; addRepository: self repository20; addRepository: self inboxRepository ]. MCRepositoryGroup default addRepository: self repository; addRepository: self repository20; addRepository: self inboxRepository. ! ! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/18/2013 15:15' prior: 33628178! commentForCurrentUpdate ^ '7618 use more efficient setSourcePointer: in CompiledMethod https://pharo.fogbugz.com/f/cases/7618 7619 comments in isAbstractClass are wrong https://pharo.fogbugz.com/f/cases/7619 (testing 3.0 release process and integrating some of the latest fixes to 2.0 in one shot) '! ! !ScriptLoader methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 3/18/2013 15:05' prior: 33690053! diffServerRootString ^ 'http://ss3.gemstone.com/ss/Pharo30/'! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 15:05' prior: 33690227! loadLatestScriptloader "self new loadLatestScriptloader" self class loadLatestPackage: 'ScriptLoader', self currentMajorVersionNumberWithoutDot fromSqueaksource: 'Pharo30' ! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:06'! pharo20Repository ^ pharo20Repository ifNil: [ ]! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/18/2013 15:07'! repository20 ^ repository20 ifNil: [ repository20 := MCHttpRepository new location: self rootURLString, 'Pharo20'; user: ''; password: ''] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/18/2013 15:15'! script100 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1339.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 15:08'! update30000! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 15:15'! update30001 "self new update30001" ScriptLoader new addHomeRepositoryToAllPackages. self withUpdateLog: '7618 use more efficient setSourcePointer: in CompiledMethod https://pharo.fogbugz.com/f/cases/7618 7619 comments in isAbstractClass are wrong https://pharo.fogbugz.com/f/cases/7619 (testing 3.0 release process and integrating some of the latest fixes to 2.0 in one shot) '. self loadTogether: self script100 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Class methodsFor: 'testing' stamp: 'EstebanLorenzano 3/8/2013 14:33' prior: 19087215! isAbstractClass self deprecated: 'Use hasAbstractMethods' on: '16 December 2012' in: #Pharo2.0. ^ (self allMethods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ]) or: [ self class allMethods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ] ]! ! !ClassDescription methodsFor: 'testing' stamp: 'EstebanLorenzano 3/8/2013 14:33' prior: 19257430! isAbstractClass self deprecated: 'Use hasAbstractMethods' on: '16 December 2012' in: #Pharo2.0. self subclassResponsibility! ! !Metaclass methodsFor: 'testing' stamp: 'EstebanLorenzano 3/8/2013 14:33' prior: 26327229! isAbstractClass self deprecated: 'Use hasAbstractMethods' on: '16 December 2012' in: #Pharo2.0. ^ self theNonMetaClass isAbstractClass! ! !CompiledMethod methodsFor: 'source code management' stamp: 'EstebanLorenzano 3/8/2013 15:04' prior: 19837973! setSourcePointer: srcPointer "We can't change the trailer of existing method, since it could have completely different format. Therefore we need to generate a copy with new trailer, containing scrPointer, and then become it." | trailer copy | trailer := CompiledMethodTrailer new sourcePointer: srcPointer. copy := self copyWithTrailerBytes: trailer. "If possible do a replace in place as an optimization" (self trailer class == trailer class and: [ self size = copy size ]) ifTrue: [ | start | start := self endPC + 1. self replaceFrom: start to: self size with: copy startingAt: start ] ifFalse: [ self becomeForward: copy ]. ^ self ! ! "Kernel"! ----End fileIn----! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/18/2013 16:42' prior: 33700308! commentForCurrentUpdate ^ '10021 Duration should have wait https://pharo.fogbugz.com/f/cases/10021 '! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:18'! csForLastUpdate: aString "Create the changeSet for latest update (preamble, update, postload)" | str updateNumber filename| updateNumber := self getLatestUpdateNumber. filename := updateNumber asString, '-Pha-', aString, '.cs'. filename asFileReference delete; writeStreamDo: [ :stream| self generateCS: self latestScriptLoaderPackageIdentificationString fromUpdate: updateNumber on: stream]. ^ filename! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:19'! csForLastUpdateAndPatchUpdatesList: aString "Creates update changeSet and pending list for continuous integration" | filename | filename := self csForLastUpdate: aString. self updatePendingList: aString. ^ filename ! ! !ScriptLoader methodsFor: 'accessing' stamp: 'EstebanLorenzano 3/18/2013 15:05' prior: 33700725! diffServerRootString ^ 'http://ss3.gemstone.com/ss/Pharo30/'! ! !ScriptLoader methodsFor: 'accessing' stamp: 'StephaneDucasse 8/21/2011 15:23' prior: 32729983! inboxRepositoryDefault ^ MCHttpRepository new location: self inboxRepositoryUrlString; user: ''; password: ''! ! !ScriptLoader methodsFor: 'private' stamp: 'Jb 10/23/2010 12:14' prior: 32759753! launchUpdate UpdateStreamer new updateFromServer! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 15:57'! pendingListFile ^ self pendingListFileName asFileReference! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 15:58'! pendingListFileName ^ 'updates', (SystemVersion current majorMinor:''), '.pending'! ! !ScriptLoader methodsFor: 'private' stamp: 'StephaneDucasse 10/16/2012 12:45' prior: 32730197! produceDiffLinksForPackages "self defaultMCWaitingFolder allFileNames" "self new produceDiffLinksForPackages" | filenames | filenames := self waitingFolderMCZFiles. filenames := filenames reject: [:each | 'ScriptLoader*' match: each ]. ^ filenames collect: [:name | |diff | diff := name copyUpToLast: $. . diff := self diffServerRootString, diff, '.diff' ] ! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'EstebanLorenzano 3/18/2013 16:16' prior: 32760750! publishChanges | username password changescriptname changesetFilename str strings| (FileStream isAFileNamed: 'PharoPass.txt') ifTrue: [ str := FileStream fileNamed: 'PharoPass.txt'. strings := str contents substrings. username := strings first. password := strings second] ifFalse: [ username := UIManager default request: 'Pharo repository login'. password := UIManager default requestPassword: 'Pharo repository password'.]. self setToRepositoriesPassword: password to: username. changescriptname := UIManager default request: 'Changeset name (no space)' initialAnswer: 'WhatAsChanged'. changesetFilename := self csForLastUpdateAndPatchUpdatesList: changescriptname. self copyPackagesFromWaitingFolderToHomeRepository. self announceOnMailingList. self inform: 'All packages have been uploaded to the Pharo repository. Remaining manual steps: 1) ./upFilesXX ',changesetFilename,' 2) ./upFilesXX updatesXX.list 3) Announce new update on mailing list'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/18/2013 16:42'! script101 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.88.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.27.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/18/2013 16:42'! update30002 "self new update30002" self withUpdateLog: '10021 Duration should have wait https://pharo.fogbugz.com/f/cases/10021 '. self loadTogether: self script101 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/18/2013 16:15'! updatePendingList: aString "ScriptLoader new pendingUpdatesList: 'cleanUpMethods'. Writes the pending updates into a 'staging' list, so the continuous integration can process and move it to updates when validated (and not before)." self pendingListFile writeStreamDo: [ :str| str setToEnd; cr; nextPutAll: self currentUpdateVersionNumber asString; nextPutAll: '-Pha-', aString, '.cs' ]! ! ScriptLoader removeSelector: #CSForLastUpdateAndPatchUpdatesList:! ScriptLoader removeSelector: #CSForLastUpdate:! "ScriptLoader30"! !Duration methodsFor: 'operations' stamp: 'BenjaminVanRyseghem 3/14/2013 15:04'! wait self asDelay wait! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(18 March 2013 6:05:51 pm) Pharo.image priorSource: 136003! ----STARTUP----an Array(18 March 2013 6:42:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Build/Pharo.image! ----SNAPSHOT----an Array(18 March 2013 6:42:23 pm) Pharo-30002.image priorSource: 172174! ----STARTUP----an Array(19 March 2013 12:42:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader class methodsFor: 'private' stamp: 'EstebanLorenzano 3/19/2013 11:21'! loadLatestPackage: aString fromHub: aDirectoryName "Loads a package from smalltalkhub repository" self loadLatestPackage: aString from: self rootURLString, aDirectoryName, '/main' ! ! !ScriptLoader class methodsFor: 'private' stamp: 'EstebanLorenzano 3/19/2013 11:28' prior: 32794382! rootURLString ^ 'http://smalltalkhub.com/mc/Pharo/'! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/19/2013 11:26' prior: 33699813! addHomeRepositoryToAllPackages "self new addHomeRepositoryToAllPackages" self allManagers do: [:each | each repositoryGroup addRepository: self repository20; addRepository: self repository; addRepository: self inboxRepository ]. MCRepositoryGroup default addRepository: self repository20; addRepository: self repository; addRepository: self inboxRepository.! ! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/19/2013 12:34' prior: 33713028! commentForCurrentUpdate ^ '10046 Spec new version https://pharo.fogbugz.com/f/cases/10046 '! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/19/2013 11:32' prior: 33713744! csForLastUpdateAndPatchUpdatesList: aString "Creates update changeSet and pending list for continuous integration" | filename | filename := self csForLastUpdate: aString. self updateStageList: aString. ^ filename ! ! !ScriptLoader methodsFor: 'accessing' stamp: 'EstebanLorenzano 3/19/2013 11:19' prior: 33714065! diffServerRootString ^ 'http://smalltalkhub.com/#!!/~Pharo/Pharo30/diff/'! ! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'EstebanLorenzano 3/19/2013 11:19' prior: 33655217! homeRepositoryUrlString ^ self rootURLString, 'Pharo30/main'! ! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'EstebanLorenzano 3/19/2013 11:26' prior: 32747520! inboxRepositoryUrlString ^ self rootURLString, 'Pharo30Inbox/main'! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/19/2013 11:21' prior: 33700896! loadLatestScriptloader "self new loadLatestScriptloader" self class loadLatestPackage: 'ScriptLoader', self currentMajorVersionNumberWithoutDot fromHub: 'Pharo30' ! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 3/19/2013 11:24' prior: 33701320! repository20 ^ repository20 ifNil: [ repository20 := MCHttpRepository new location: 'http://ss3.gemstone.com/ss/Pharo20'; user: ''; password: ''] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/19/2013 12:35'! script102 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1369.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.88.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-EstebanLorenzano.90.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-EstebanLorenzano.29.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 17:06'! stagedListFile ^ self stagedListFileName asFileReference! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/18/2013 17:06'! stagedListFileName ^ 'updates', (SystemVersion current majorMinor:''), '.staged'! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/19/2013 12:35'! update30003 "self new update30003" ScriptLoader new removeAllRepositories; addHomeRepositoryToAllPackages. self withUpdateLog: '10046 Spec new version https://pharo.fogbugz.com/f/cases/10046 '. self loadTogether: self script102 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 3/19/2013 11:32'! updateStageList: aString | stagedFile fileExists | "Writes the pending updates into a 'staging' list, so the continuous integration can process and move it to updates when validated (and not before)." stagedFile := self stagedListFile. fileExists := stagedFile exists. stagedFile writeStreamDo: [ :stream | fileExists ifTrue: [ stream setToEnd ] ifFalse: [ stream nextPut: $#; nextPutAll: SystemVersion current version asString ]. stream cr; nextPutAll: self currentUpdateVersionNumber asString; nextPutAll: '-Pha-', aString, '.cs' ]! ! ScriptLoader removeSelector: #updatePendingList:! ScriptLoader removeSelector: #pendingListFileName! ScriptLoader removeSelector: #pendingListFile! ScriptLoader class removeSelector: #loadLatestPackage:fromSqueaksource:! "ScriptLoader30"! !SpecLayoutAddWithSpec commentStamp: '' prior: 50726286! A SpecLayoutAddWithSpec is an action representing an add in the spec layout with a spec selector precised! !SpecLayoutAddWithSpec commentStamp: '' prior: 33740345! A SpecLayoutAddWithSpec is an action representing an add in the spec layout with a spec selector precised! !ComposableModel methodsFor: 'error handling' stamp: 'BenjaminVanRyseghem 3/18/2013 15:20'! doesNotUnderstand: aMessage ^ (self class respondsTo: aMessage selector) ifTrue: [ self class perform: aMessage selector withArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! SpecLayoutAddWithSpec removeSelector: #generateArguments! "Spec-Core"! "Spec-Layout"! ----End fileIn----! ----QUIT----an Array(19 March 2013 12:42:17 pm) Pharo.image priorSource: 172371! ----STARTUP----an Array(19 March 2013 6:15:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 March 2013 6:15:48 pm) Pharo-30003.image priorSource: 186611! ----STARTUP----an Array(20 March 2013 5:56:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/20/2013 17:46' prior: 33728031! commentForCurrentUpdate ^ '10017 ProtocolCLient do not propagate the erros from the server https://pharo.fogbugz.com/f/cases/10017 7610 remove #nameForUndoWording from Morph https://pharo.fogbugz.com/f/cases/7610'! ! !ScriptLoader methodsFor: 'private' stamp: 'EstebanLorenzano 3/19/2013 12:39' prior: 33714891! produceDiffLinksForPackages "self defaultMCWaitingFolder allFileNames" "self new produceDiffLinksForPackages" | filenames | filenames := self waitingFolderMCZFiles. filenames := filenames reject: [:each | 'ScriptLoader*' match: each ]. ^ filenames collect: [:name | |diff | diff := name copyUpToLast: $. . diff := self diffServerRootString, diff ] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/20/2013 17:46'! script103 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.240.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1370.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-EstebanLorenzano.90.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-EstebanLorenzano.29.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/20/2013 17:46'! update30004 "self new update30004" self withUpdateLog: '10017 ProtocolCLient do not propagate the erros from the server https://pharo.fogbugz.com/f/cases/10017 7610 remove #nameForUndoWording from Morph https://pharo.fogbugz.com/f/cases/7610'. self loadTogether: self script103 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ProtocolClient methodsFor: 'private protocol' stamp: 'BenjaminVanRyseghem 3/14/2013 14:29' prior: 30081951! checkResponse self checkResponseOnError: [:response | (TelnetProtocolError protocolInstance: self) signal: response] onWarning: [:response | (TelnetProtocolError protocolInstance: self) signal: response]! ! Morph removeSelector: #nameForUndoWording! "Morphic"! "Network-Protocols"! ----End fileIn----! ----QUIT----an Array(20 March 2013 5:56:37 pm) Pharo.image priorSource: 186811! ----STARTUP----an Array(20 March 2013 6:04:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 March 2013 6:04:59 pm) Pharo-30004.image priorSource: 197803! ----STARTUP----an Array(22 March 2013 10:09:21 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/22/2013 10:03' prior: 33741543! commentForCurrentUpdate ^ '10055 Spec better add:withSpec: handling https://pharo.fogbugz.com/f/cases/10055/Spec-better-add-withSpec-handling 7262 remove #stringRepresentation https://pharo.fogbugz.com/f/cases/7262/remove-stringRepresentation'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/22/2013 10:03'! script104 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.775.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1370.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1058.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/22/2013 10:03'! update30005 "self new update30005" self withUpdateLog: '10055 Spec better add:withSpec: handling https://pharo.fogbugz.com/f/cases/10055/Spec-better-add-withSpec-handling 7262 remove #stringRepresentation https://pharo.fogbugz.com/f/cases/7262/remove-stringRepresentation'. self loadTogether: self script104 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecInterpreter commentStamp: '' prior: 50700152! A SpecInterpreter is a interpreter for spec presenters! !SpecLayoutAddWithSpec methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 3/19/2013 13:42' prior: 50726678! subwidget: sub spec: aSpecSelector layoutFrame: aFrameLayout self subwidget: (sub isArray ifTrue: [ #(model), sub , {#retrieveSpec:. aSpecSelector} ] ifFalse: [ {#model. sub . #retrieveSpec: . aSpecSelector } ]). self layoutFrame: aFrameLayout. self generateArguments! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/19/2013 13:40'! retrieveSpec: aSelector ^ self class perform: aSelector! ! !SpecInterpreter commentStamp: '' prior: 33762653! A SpecInterpreter is a interpreter for spec presenters! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 3/19/2013 12:52'! checkIfRebuildNeeded: anArray ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. spec removeSubWidgets. self model needRebuild: true ] ifFalse: [ spec := self retreiveSpecFrom: anArray first ]! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 3/19/2013 13:09'! extractArrayToInterpretFrom: aFragment arrayToInterpret := aFragment. aFragment isSpecLayout ifTrue: [ arrayToInterpret := aFragment asArray ]. (arrayToInterpret isCollection and: [ arrayToInterpret isSequenceable ]) ifFalse: [ ^ arrayToInterpret ]. (aFragment isString or: [ aFragment isText ]) ifTrue: [ ^ aFragment == #model ifTrue: [ model ] ifFalse: [ self convertSymbolOfClassToInstance: aFragment ] ]. ^ nil! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 3/19/2013 13:16' prior: 50701429! interpretASpec: aPresenter aPresenter ifNil: [ ^ nil ]. (self extractArrayToInterpretFrom: aPresenter) ifNotNil: [ :result | ^ result ]. self checkIfRebuildNeeded: arrayToInterpret. specForChildren := self retrieveSpecToProvideToChildren. index := 2. [ index <= arrayToInterpret size ] whileTrue: [ | newInstance | newInstance := self performNextSelectorAndIncrementIndex. index > arrayToInterpret size ifTrue: [ ^ self returnInterpretationOf: newInstance ]. spec instance: newInstance ]. "If you get here, there is a problem. Must probably it comes from the Spec which is wrongly defined" self assert: arrayToInterpret size < 2. (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. ^ spec instance! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 3/19/2013 13:14'! performNextSelectorAndIncrementIndex | args numArgs selector | selector := spec bindings retrieveSelectorSymbolFor: (arrayToInterpret at: index). selector isArray not ifTrue: [ selector := selector asSymbol. numArgs := selector numArgs. args := arrayToInterpret copyFrom: index + 1 to: index + numArgs ] ifFalse: [ "Here I assume that if it's not a symbol, it's a collection" | array | array := selector. selector := array first. numArgs := 0. args := array allButFirst ]. args := args collect: [ :each | self class private_interpretASpec: each model: model superSpec: specForChildren ]. index := index + numArgs + 1. ^ self actionToPerformWithSelector: selector arguments: args! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 3/19/2013 12:56'! retrieveSpecToProvideToChildren | specForChildren | "First element is a symbol describing the spec type" (spec isKindOf: RawSpec) ifTrue: [ specForChildren := superSpec ] ifFalse: [ specForChildren := spec ]. ^ specForChildren! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 3/19/2013 13:15'! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := self class private_interpretASpec: newInstance model: spec instance superSpec: specForChildren. ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. result spec addAsSubSpecTo: superSpec. ^ return ] ifFalse: [ ^ result ]! ! String removeSelector: #stringRepresentation! ComposableModel removeSelector: #doesNotUnderstand:! "Collections-Strings"! "Spec-Core"! "Spec-Layout"! ----End fileIn----! ----QUIT----an Array(22 March 2013 10:09:24 am) Pharo.image priorSource: 198002! ----STARTUP----an Array(22 March 2013 10:15:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 March 2013 10:15:20 am) Pharo-30005.image priorSource: 212601! ----STARTUP----an Array(22 March 2013 1:13:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/22/2013 13:01' prior: 33752735! commentForCurrentUpdate ^ '10067 When creating Slices, only the SS3 inbox is offered https://pharo.fogbugz.com/f/cases/10067/When-creating-Slices-only-the-SS3-inbox-is-offered 10004 SmalltalkImage current reportCPUandRAM > DNU https://pharo.fogbugz.com/f/cases/10004/SmalltalkImage-current-reportCPUandRAM-DNU 7282 DNU with Glamour: PaginatedMorphTreeMorph>>setSelectedMorph: https://pharo.fogbugz.com/f/cases/7282/DNU-with-Glamour-PaginatedMorphTreeMorph-setSelectedMorph 10068 Undeclared in ScriptLoader>>#pharo20Repository https://pharo.fogbugz.com/f/cases/10068/Undeclared-in-ScriptLoader-pharo20Repository'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/22/2013 13:01'! script105 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-EstebanLorenzano.1340.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.213.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1372.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.775.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-StephaneDucasse.45.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.77.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1060.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/22/2013 13:02'! update30006 "self new update30006" self withUpdateLog: '10067 When creating Slices, only the SS3 inbox is offered https://pharo.fogbugz.com/f/cases/10067/When-creating-Slices-only-the-SS3-inbox-is-offered 10004 SmalltalkImage current reportCPUandRAM > DNU https://pharo.fogbugz.com/f/cases/10004/SmalltalkImage-current-reportCPUandRAM-DNU 7282 DNU with Glamour: PaginatedMorphTreeMorph>>setSelectedMorph: https://pharo.fogbugz.com/f/cases/7282/DNU-with-Glamour-PaginatedMorphTreeMorph-setSelectedMorph 10068 Undeclared in ScriptLoader>>#pharo20Repository https://pharo.fogbugz.com/f/cases/10068/Undeclared-in-ScriptLoader-pharo20Repository'. self loadTogether: self script105 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #pharo20Repository! "ScriptLoader30"! !MCHttpRepository class methodsFor: 'instance creation' stamp: 'MarcusDenker 3/22/2013 12:42' prior: 33654965! inboxRepository ^ self location: 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main'.! ! !MessageTally methodsFor: 'initialize-release' stamp: 'MarcusDenker 3/22/2013 12:57' prior: 25712939! spyAllEvery: millisecs on: aBlock "Create a spy and spy on the given block at the specified rate." "Spy all the system processes" | myDelay time0 | aBlock isBlock ifFalse: [ self error: 'spy needs a block here' ]. self class: aBlock receiver class method: aBlock method. "set up the probe" myDelay := Delay forMilliseconds: millisecs. time0 := Time millisecondClockValue. gcStats := Smalltalk vm getParameters. Timer ifNotNil: [ self error: 'it seems a tally is already running' ]. Timer := [ [true] whileTrue: [ | startTime observedProcess | startTime := Time millisecondClockValue. myDelay wait. observedProcess := Processor preemptedProcess. self tally: observedProcess suspendedContext in: observedProcess "tally can be > 1 if ran a long primitive" by: (Time millisecondClockValue - startTime) // millisecs]. nil] newProcess. Timer priority: Processor timingPriority-1. "activate the probe and evaluate the block" Timer resume. ^ aBlock ensure: [ "cancel the probe and return the value" "Could have already been terminated. See #terminateTimerProcess" Timer ifNotNil: [ Timer terminate. Timer := nil ]. "Collect gc statistics" Smalltalk vm getParameters keysAndValuesDo: [ :idx :gcVal | gcVal isNumber ifTrue: [ gcStats at: idx put: (gcVal - (gcStats at: idx))]]. time := Time millisecondClockValue - time0]! ! !MessageTally methodsFor: 'initialize-release' stamp: 'MarcusDenker 3/22/2013 12:57' prior: 25715995! spyEvery: millisecs onProcess: aProcess forMilliseconds: msecDuration "Create a spy and spy on the given process at the specified rate." | myDelay time0 endTime observedProcess sem | (aProcess isKindOf: Process) ifFalse: [self error: 'spy needs a Process here']. self class: aProcess suspendedContext receiver class method: aProcess suspendedContext method. "set up the probe" observedProcess := aProcess. myDelay := Delay forMilliseconds: millisecs. time0 := Time millisecondClockValue. endTime := time0 + msecDuration. sem := Semaphore new. gcStats := Smalltalk vm getParameters. Timer ifNotNil: [ self error: 'it seems a tally is already running' ]. Timer := [ [ | startTime | startTime := Time millisecondClockValue. myDelay wait. self tally: Processor preemptedProcess suspendedContext in: (observedProcess == Processor preemptedProcess ifTrue: [ observedProcess ] ifFalse: [nil]) "tally can be > 1 if ran a long primitive" by: (Time millisecondClockValue - startTime) // millisecs. startTime < endTime ] whileTrue. sem signal. ] newProcess. Timer priority: Processor timingPriority-1. "activate the probe and evaluate the block" Timer resume. "activate the probe and wait for it to finish" sem wait. "Collect gc statistics" Smalltalk vm getParameters keysAndValuesDo: [ :idx :gcVal | gcVal isNumber ifTrue: [ gcStats at: idx put: (gcVal - (gcStats at: idx)) ] ]. time := Time millisecondClockValue - time0! ! !PaginatedMorphTreeMorph methodsFor: 'updating' stamp: 'ThierryGoubier 3/8/2013 14:50' prior: 29045493! update: aSymbol aSymbol == #pageSize ifTrue: [ ^ self pageSize: model pageSize ]. aSymbol == #chunkSize ifTrue: [ ^ self chunkSize: model chunkSize ]. self pager isNil ifTrue: [ ^ super update: aSymbol ]. ((aSymbol isKindOf: Array) and: [ aSymbol size > 1 and: [ aSymbol first == self nodeListSelector and: [ aSymbol second == #openItemPath ] ] ]) ifTrue: [ | rest | rest := aSymbol allButFirst: 2. [ rest notEmpty ] whileTrue: [ | i res | res := (1 to: self nodeList size) select: [ :li | (self nodeList at: li) item = rest first ]. res isEmpty ifTrue: [ ^ self ]. self pager nextPage: res first. (self allNodeMorphs at: 1 ifAbsent: [ ^ self ]) openItemPath: {(rest first)}. rest := rest copyWithoutFirst ]. ^ self ]. "allow directed path opening where multiple trees exist" ^ super update: aSymbol! ! "Monticello"! "Morphic"! "Tools"! ----End fileIn----! ----QUIT----an Array(22 March 2013 1:13:52 pm) Pharo.image priorSource: 212802! ----STARTUP----an Array(22 March 2013 1:19:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 March 2013 1:19:43 pm) Pharo-30006.image priorSource: 228080! ----STARTUP----an Array(22 March 2013 2:54:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/22/2013 14:52' prior: 33767535! commentForCurrentUpdate ^ '10091 Update the Grab button https://pharo.fogbugz.com/f/cases/10091 7499 remove setting and code: #useHistoricalShortcuts https://pharo.fogbugz.com/f/cases/7499 7557 Adding an entry to the World menu to clear all breakpoints https://pharo.fogbugz.com/f/cases/7557 7620 Kill Object>>at:modify: https://pharo.fogbugz.com/f/cases/7620'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/22/2013 14:52'! script106 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1341.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.215.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1374.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.99.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.777.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.4.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1061.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/22/2013 14:53'! update30007 "self new update30007" self withUpdateLog: '10091 Update the Grab button https://pharo.fogbugz.com/f/cases/10091 7499 remove setting and code: #useHistoricalShortcuts https://pharo.fogbugz.com/f/cases/7499 7557 Adding an entry to the World menu to clear all breakpoints https://pharo.fogbugz.com/f/cases/7557 7620 Kill Object>>at:modify: https://pharo.fogbugz.com/f/cases/7620'. self loadTogether: self script106 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TaskListSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 3/22/2013 14:00' prior: 52276481! taskListSettingOn: aBuilder (aBuilder setting: #keepTaskListOpen) label: 'Keep task list open' translated; description: 'Whether the tasklist is closed (and the selected window activated) when the command key is released' translated; parent: #morphic; selector: #keepOpen; target: TasklistMorph.! ! !UITheme methodsFor: 'services' stamp: 'MarcusDenker 3/22/2013 14:00' prior: 54086794! openTasklist: event "Open a tasklist to choose a window. Answer true if handled, false otherwise." event keyString = '' ifTrue: [ TasklistMorph new openAsIs selectNextTask. ^ true ]. event keyString = '' ifTrue: [ TasklistMorph new openAsIs selectPreviousTask. ^ true ]. ^ false ! ! !MCSliceMaker methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 3/22/2013 14:33' prior: 24984958! downloadIssueSummary | title | title := ZnClient new url: 'http://bugs.pharo.org/issues/name/', self issueIdString; get. self info issueSummary: title! ! !StartupLoader class methodsFor: 'example' stamp: 'MarcusDenker 3/22/2013 13:58' prior: 50897097! example2 " it's my personal script provided as example" "self example2" | items | items := OrderedCollection new. items add: (StartupAction name: 'Set the Author' code: [ Author fullName: Author fullName printString ]). "replace it by your name" StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'author.st'. items removeAll. items add: (StartupAction name: 'Debugger option' code: [ Debugger alwaysOpenFullDebugger: true ]). items add: (StartupAction name: 'Dragging Option' code: [ UITheme defaultSettings fastDragging: true ]). items add: (StartupAction name: 'Dialog Auto Accept' code: [ TextEditorDialogWindow autoAccept: true ]). StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'settings.st'. items removeAll. items add: (StartupAction name: 'Fonts option' code: [ FreeTypeSystemSettings loadFt2Library: true. FreeTypeFontProvider current updateFromSystem. StandardFonts defaultFont: (LogicalFont familyName: 'Lucida Grande' pointSize: 10) forceNotBold. GraphicFontSettings resetAllFontToDefault. StandardFonts codeFont: (LogicalFont familyName: 'Consolas' pointSize: 10).] runOnce: true). StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'fonts.st'. items removeAll. StartupLoader default addAtStartupInImageDirectory: items. StartupLoader default loadStartupScript.! ! !TasklistMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 3/22/2013 13:59' prior: 52295151! keyStroke: event "Process keys to switch task." event keyCharacter = Character escape ifTrue: [^self delete]. event anyModifierKeyPressed ifFalse: [^self done]. event keyString = '' ifTrue: [^self selectPreviousTask]. event keyString = '' ifTrue: [^self selectNextTask]! ! !PasteUpMorph methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 3/22/2013 13:59' prior: 29180323! navigationKey: event "Check for active window navigation." (self theme openTasklist: event) ifTrue: [^true]. event keyString = '' ifTrue: [ self navigateWindowForward. ^ true ]. event keyString = '' ifTrue: [ self navigateWindowBackward. ^ true ]. ^false! ! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 3/22/2013 14:51' prior: 26416974! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabelForInspector fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" compilerClass decompilerClass evaluatorClass format methodDict parserClass sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 3/22/2013 14:52' prior: 26427743! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf fromPacked: "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: crc16 endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asPacked asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" colorNames indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !WorldState class methodsFor: 'world menu items' stamp: 'MarcusDenker 3/22/2013 14:34' prior: 54993789! systemOn: aBuilder (aBuilder item: #System) order: 3.0; icon: self theme smallConfigurationIcon; with: [ (aBuilder item: #'About...') order: 0; icon:self theme smallLanguageIcon; action: [Smalltalk aboutThisSystem]. (aBuilder item: #'Software update') order: 2; icon:self theme smallUpdateIcon; precondition: [self showUpdateOptionInWorldMenu]; action: [UpdateStreamer new updateFromServer ]; help: 'Load latest code updates via the internet'; withSeparatorAfter. (aBuilder item: #'Start profiling all Processes') action: [self startMessageTally]. (aBuilder item: #'Start profiling UI ') action: [self startThenBrowseMessageTally]. (aBuilder item: #'Space left') action: [Smalltalk informSpaceLeftAfterGarbageCollection]; withSeparatorAfter. (aBuilder item: #'Start drawing again') action: [World resumeAfterDrawError]. (aBuilder item: #'Start stepping again') action: [World resumeAfterStepError]; withSeparatorAfter. (aBuilder item: #'Restore display (r)') action: [World restoreMorphicDisplay]. (aBuilder item: #'Clear all breakpoints') action: [BreakpointManager clear]. Halt isHaltOnceEnabled ifTrue: [(aBuilder item: 'Disable halt/inspect once') action: [self clearHaltOnce]] ifFalse: [(aBuilder item: 'Enable halt/inspect once') action: [self setHaltOnce]]].! ! Object removeSelector: #at:modify:! TasklistMorph class removeSelector: #useHistoricalShortcuts:! TasklistMorph class removeSelector: #useHistoricalShortcuts! "Kernel"! "MonticelloGUI"! "Morphic"! "Polymorph-Widgets"! "Settings-Polymorph"! "StartupPreferences"! "Tools"! ----End fileIn----! ----QUIT----an Array(22 March 2013 2:55:11 pm) Pharo.image priorSource: 228279! ----STARTUP----an Array(22 March 2013 3:01:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 March 2013 3:01:41 pm) Pharo-30007.image priorSource: 266962! ----STARTUP----an Array(22 March 2013 4:29:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(22 March 2013 4:29:24 pm) Pharo.image priorSource: 267161! ----STARTUP----an Array(22 March 2013 4:35:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 March 2013 4:35:27 pm) Pharo-30007.image priorSource: 267370! ----STARTUP----an Array(22 March 2013 5:26:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/22/2013 17:24' prior: 33783011! commentForCurrentUpdate ^ '10066 SimulateKeystrokesSpecification test failing https://pharo.fogbugz.com/f/cases/10066/ 10094 Slice copy just copy the slice https://pharo.fogbugz.com/f/cases/10094/ 7605 ProtoObjects instances does not understand class https://pharo.fogbugz.com/f/cases/7605 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/22/2013 17:24'! script107 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1343.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1374.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.101.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.777.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.6.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.79.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1061.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/22/2013 17:24'! update30008 "self new update30008" self withUpdateLog: '10066 SimulateKeystrokesSpecification test failing https://pharo.fogbugz.com/f/cases/10066/ 10094 Slice copy just copy the slice https://pharo.fogbugz.com/f/cases/10094/ 7605 ProtoObjects instances does not understand class https://pharo.fogbugz.com/f/cases/7605 '. self loadTogether: self script107 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ProtoObject methodsFor: 'class membership' stamp: 'MarcusDenker 3/22/2013 17:23'! class "Primitive. Answer the object which is the receiver's class. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !SimulateKeystrokesSpecification methodsFor: 'tests' stamp: 'MartinDias 3/22/2013 16:11' prior: 33340515! testSimulateKeystroke | textMorph | textMorph := TextMorph new contents: ''; openInWorld. self assert: textMorph canChangeText. textMorph takeKeyboardFocus. self simulateKeyStroke: $s. self assert: textMorph contents = 's'. textMorph delete.! ! !SimulateKeystrokesSpecification methodsFor: 'tests' stamp: 'MartinDias 3/22/2013 16:16' prior: 33340825! testSimulateKeystrokes | textMorph | textMorph := TextMorph new contents: ''; openInWorld. self assert: textMorph canChangeText. textMorph takeKeyboardFocus. self simulateKeyStrokes: 'hello'. self assert: textMorph contents = 'hello'. textMorph delete.! ! !TextMorph methodsFor: '*necompletion-extensions' stamp: 'MartinDias 3/22/2013 16:15' prior: 52762639! enabled ^super enabled and: [ self isLocked not ]! ! !MCVersionInspector methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 3/22/2013 15:54' prior: 25114591! save self pickRepository ifNotNil: [ :ea | self version dependencies do: [ :each | ea storeVersion: each resolve ]. ea storeVersion: self version ]! ! "Kernel"! "MonticelloGUI"! "NECompletion"! "SUnit-UITesting"! ----End fileIn----! ----QUIT----an Array(22 March 2013 5:26:27 pm) Pharo.image priorSource: 267569! ----STARTUP----an Array(22 March 2013 5:32:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 March 2013 5:32:19 pm) Pharo-30008.image priorSource: 279316! ----STARTUP----an Array(23 March 2013 1:04:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/23/2013 13:02' prior: 33822301! commentForCurrentUpdate ^ '10005 floatPrecision: setter is missing from UpdatingStringMorph https://pharo.fogbugz.com/f/cases/10005/ 10100 TaskListMorph: remove unused classVar UseHistoricalShortcuts https://pharo.fogbugz.com/f/cases/10100 10099 Improve CommandLineArgument API optionAt:ifPresent: https://pharo.fogbugz.com/f/cases/10099/ 10095 HandMorph>>userPicture[:aPicture] unused. Can be removed. https://pharo.fogbugz.com/f/cases/10095 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/23/2013 13:02'! script108 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1343.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.111.mcz Manifest-CriticBrowser-MarcusDenker.62.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.26.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1380.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.101.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.780.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.6.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.81.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1061.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/23/2013 13:02'! update30009 "self new update30009" self withUpdateLog: '10005 floatPrecision: setter is missing from UpdatingStringMorph https://pharo.fogbugz.com/f/cases/10005/ 10100 TaskListMorph: remove unused classVar UseHistoricalShortcuts https://pharo.fogbugz.com/f/cases/10100 10099 Improve CommandLineArgument API optionAt:ifPresent: https://pharo.fogbugz.com/f/cases/10099/ 10095 HandMorph>>userPicture[:aPicture] unused. Can be removed. https://pharo.fogbugz.com/f/cases/10095 '. self loadTogether: self script108 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TasklistMorph commentStamp: 'gvc 5/18/2007 11:19' prior: 52291534! Themed task list/switcher to select the topmost window. Use cmd + left or right arrows (not ideal but the os typically handles cmd + tab/shift-tab). On Linux, release of the command key is not detected (vm issue), so press and release cmd again or move the mouse!!! !CommandLineArguments methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/22/2013 18:56'! optionAt: aString ifPresent: presentBlock | option | option := self optionAt: aString ifAbsent: [ ^ self ]. ^ presentBlock value: option! ! !TasklistMorph commentStamp: 'gvc 5/18/2007 11:19' prior: 33844578! Themed task list/switcher to select the topmost window. Use cmd + left or right arrows (not ideal but the os typically handles cmd + tab/shift-tab). On Linux, release of the command key is not detected (vm issue), so press and release cmd again or move the mouse!!! !UpdatingStringMorph methodsFor: 'accessing' stamp: 'MarcusDenker 3/22/2013 20:40'! floatPrecision: aNumber floatPrecision := aNumber! ! !CommandLineHandler methodsFor: 'utility' stamp: 'BenjaminVanRyseghem 3/22/2013 18:18' prior: 19737012! exitFailure: aMessage Smalltalk isInteractive ifTrue: [ Error signal: aMessage ] ifFalse: [ self stderr red: aMessage; lf. Smalltalk exitFailure ].! ! !CommandLineHandler methodsFor: 'accessing arguments' stamp: 'BenjaminVanRyseghem 3/22/2013 18:55'! optionAt: aString ifPresent: absentBlock ^ self commandLine optionAt: aString ifPresent: absentBlock! ! HandMorph removeSelector: #userPicture:! HandMorph removeSelector: #userPicture! "Morphic"! "Polymorph-Widgets"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(23 March 2013 1:04:31 pm) Pharo.image priorSource: 279515! ----STARTUP----an Array(23 March 2013 1:10:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 March 2013 1:10:31 pm) Pharo-30009.image priorSource: 291758! ----STARTUP----an Array(23 March 2013 1:33:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/23/2013 13:30' prior: 33834247! commentForCurrentUpdate ^ '10076 Cleaning code formatting of criticbrowser https://pharo.fogbugz.com/f/cases/10076/ 10101 Object: remove #class https://pharo.fogbugz.com/f/cases/10101 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/23/2013 13:31'! script109 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.241.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1345.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1380.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.101.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.434.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.79.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.780.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.6.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.81.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1061.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/23/2013 13:31'! update30010 "self new update30010" self withUpdateLog: '10076 Cleaning code formatting of criticbrowser https://pharo.fogbugz.com/f/cases/10076/ 10101 Object: remove #class https://pharo.fogbugz.com/f/cases/10101 '. self loadTogether: self script109 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ManifestManifestCriticBrowser commentStamp: '' prior: 0! ManifestManifestCriticBrowser is the manifest for the Manifest-CriticBrowser package itself.! !ResetWindow commentStamp: '' prior: 0! A ResetWindow is simple UI to reset the currently analysed model.! !SmalllintManifestChecker commentStamp: '' prior: 0! SmalllintManifestChecker is responsible for running a set of rules on a given subsystem. | rules checker | rules := RBCompositeLintRule allGoodRules resetResult. "the resetResult is necessary because it will build a knid of cache of the result and this cannot be done automatically (for example you may want to run several rules without invalidating the results). " checker := SmalllintManifestChecker new runRules: rules onPackage: (RPackageOrganizer default packageNamed: #'Manifest-Core').! !ManifestManifestCriticBrowser commentStamp: '' prior: 33856492! ManifestManifestCriticBrowser is the manifest for the Manifest-CriticBrowser package itself.! !ResetWindow commentStamp: '' prior: 33856638! A ResetWindow is simple UI to reset the currently analysed model.! !ResetWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:25' prior: 32271841! initializeWidgets self instantiateModels: #( resetModel ButtonModel currentConfigurationModel ButtonModel ). self setFocusOrder. self setResetModel. self setCurrentConfigurationModel. ! ! !ResetWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:26' prior: 32272128! setCurrentConfigurationModel currentConfigurationModel state: false; label: 'Uses Current Configuration'; action: [ CriticBrowser openOnWorkspace: CriticWorkingConfiguration current. self delete ]! ! !ResetWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:26' prior: 32272584! setResetModel resetModel state: false; label: 'Reset Current Configurartion'; action: [ SelectPackageBrowser open. self delete ]! ! !Metaclass methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:56'! criticTheNonMetaclassClass ^thisClass ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 12:59' prior: 20266962! addAllCriticToFalsePositive: aCollectionOfCritic forRule: aRule on: aManifestBuilder | ruleId versionId criticss | criticss := aCollectionOfCritic reject: [ :c | falsePositiveClasses includes: c criticTheNonMetaclassClass ]. ruleId := aRule class uniqueIdentifierName. versionId := aRule class identifierMinorVersionNumber. (aManifestBuilder hasFalsePositiveOf: ruleId version: versionId) ifFalse: [ aManifestBuilder installFalsePositiveOf: ruleId version: versionId ]. aManifestBuilder addAllFalsePositive: criticss of: ruleId version: versionId. ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:37' prior: 20267663! addAllCriticToToDo: aCollectionOfCritic forRule: aRule on: aManifestBuilder | ruleId versionId | ruleId := aRule class uniqueIdentifierName. versionId := aRule class identifierMinorVersionNumber. (aManifestBuilder hasToDoOf: ruleId version: versionId) ifFalse: [ aManifestBuilder installToDoOf: ruleId version: versionId ]. aManifestBuilder addAllToDo: aCollectionOfCritic of: ruleId version: versionId. ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:38' prior: 20259953! addCritic: aCritic forRule: aRule (critics includesKey: aRule) ifFalse: [ critics at:aRule put: IdentitySet new ]. (critics at:aRule) add: aCritic. self updateBrowser! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:38' prior: 20260210! addFalsePositive: aCritic forRule: aRule (falsePositives includesKey: aRule) ifFalse: [ falsePositives at: aRule put: IdentitySet new ]. (falsePositives at:aRule) add: aCritic. self updateBrowser ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/21/2013 12:59' prior: 20260499! addFalsePositiveClass: aClass | fp | falsePositiveClasses add: aClass theNonMetaClass. critics keysAndValuesDo: [ :rule :criticss | fp := criticss select: [ :critic | aClass = critic criticTheNonMetaclassClass ]. fp do: [ :each | self addFalsePositive: each forRule: rule] ]. self updateBrowser ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:39' prior: 20260964! addFalsePositiveRule: aRule forPackage: aPackage | fp | (falsePositiveRules includesKey: aPackage) ifFalse: [ falsePositiveRules at: aPackage put: Set new ]. (falsePositiveRules at: aPackage) add: (aRule class uniqueIdentifierName). fp := (critics at: aRule ifAbsent: [^ self]) select: [ :c | (self packageOf: c) package name = aPackage packageName ]. fp do: [ :c | self addFalsePositive: c forRule: aRule ]. browser updateTree ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:40' prior: 20261498! addToDo: aCritic forRule: aRule (toDos includesKey: aRule) ifFalse: [ toDos at:aRule put: IdentitySet new ]. (toDos at:aRule) add: aCritic. self updateBrowser! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:13'! builderManifestClass ^ BuilderManifest! ! !CriticsCache methodsFor: 'protocol' stamp: 'StephaneDucasse 3/20/2013 22:40' prior: 20264971! criticsOf: aRule (aRule isNil "or: [aRule isEmpty]" ) ifTrue: [ ^ {} ]. ^ aRule isComposite ifTrue: [ aRule leaves gather: [ :rule | self criticsOf: rule ]] ifFalse: [ critics at: aRule ifAbsent: [{}]]! ! !CriticsCache methodsFor: 'protocol' stamp: 'StephaneDucasse 3/20/2013 22:40' prior: 20265260! falsePositiveOf: aRule aRule ifNil: [ ^ {}]. ^ aRule isComposite ifTrue: [ aRule leaves gather: [ :rule | self falsePositiveOf: rule ]] ifFalse: [falsePositives at: aRule ifAbsent: [{}]] ! ! !CriticsCache methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/20/2013 22:41' prior: 20264137! initCache checker rule leaves do: [ :rule | falsePositives at: rule put: (IdentitySet newFrom: (checker falsePositiveOf: rule)). toDos at: rule put: (IdentitySet newFrom: (checker toDoOf: rule)). critics at: rule put: (IdentitySet newFrom: rule critics) ]. packages do: [ :package | falsePositiveRules at: package put: (checker rejectRulesOf: package) asSet. falsePositiveClasses addAll: (checker rejectClassesOf: package) asIdentitySet. ]! ! !CriticsCache methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/20/2013 22:41' prior: 20264686! initialize super initialize. falsePositives := Dictionary new. toDos := Dictionary new. critics := Dictionary new. falsePositiveRules := Dictionary new. falsePositiveClasses := IdentitySet new. change := false ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:41' prior: 20261749! itemRemoved: aItem critics values do: [ :each | each remove: aItem ifAbsent: []]. toDos values do: [ :each | each remove: aItem ifAbsent: []]. falsePositives values do: [ :each | each remove: aItem ifAbsent: []]. self updateBrowser ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:13' prior: 20268381! logFalsePositiveClassInManifest | manifestBuilder | packages do: [ :package | manifestBuilder := self builderManifestClass ofPackageNamed: package packageName. manifestBuilder rejectClasses \ falsePositiveClasses do: [ :cl | manifestBuilder removeRejectClass: cl ]. falsePositiveClasses \ manifestBuilder rejectClasses do: [ :cl | manifestBuilder addRejectClass: cl ] ]! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:13' prior: 20268850! logFalsePositiveInManifest | removeFp addFp | falsePositives keysAndValuesDo: [ :rule :criticss | | rld rV | rld := rule class uniqueIdentifierName. rV := rule class identifierMinorVersionNumber. removeFp := (checker falsePositiveOf: rule) \ criticss. addFp := criticss \ (checker falsePositiveOf: rule). (removeFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | self removeAllCriticToFalsePositive: value forRule: rule on: manifestBuilder ]. (addFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | (manifestBuilder rejectRules includes: rule class uniqueIdentifierName) ifFalse: [ self addAllCriticToFalsePositive: value forRule: rule on: manifestBuilder ] ] ]! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:13' prior: 20269768! logFalsePositiveRulesInManifest | manifestBuilder | falsePositiveRules keysAndValuesDo: [ :package :rules | manifestBuilder := self builderManifestClass ofPackageNamed: package packageName. manifestBuilder rejectRules \ rules do: [ :rule | manifestBuilder removeRejectRule: rule ]. rules \ manifestBuilder rejectRules do: [ :rule | manifestBuilder addRejectRule: rule ] ]! ! !CriticsCache methodsFor: 'protocol' stamp: 'StephaneDucasse 3/20/2013 22:44' prior: 20265535! logInManifest self cacheChange ifFalse: [^ self]. self logFalsePositiveRulesInManifest. self logFalsePositiveClassInManifest. self logFalsePositiveInManifest. self logToDosInManifest. self cacheNotChanged. self initCache ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:14' prior: 20270249! logToDosInManifest | removeFp addFp | toDos keysAndValuesDo: [ :rule :criticss | | rId rV | rId := rule class uniqueIdentifierName. rV := rule class identifierMinorVersionNumber. removeFp := (checker toDoOf: rule) \ criticss. addFp := criticss \ (checker toDoOf: rule). (removeFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | self removeAllCriticToToDo: value forRule: rule on: manifestBuilder ]. (addFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | (manifestBuilder rejectRules includes: rule class uniqueIdentifierName) ifFalse: [ self addAllCriticToToDo: value forRule: rule on: manifestBuilder ] ] ]! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:45' prior: 20271112! packageOf: aCritc aCritc isCompiledMethod ifTrue: [MCWorkingCopy managersForClass: aCritc methodClass selector: aCritc selector do: [ :package | ^ package ]] ifFalse: [MCWorkingCopy managersForClass: aCritc do: [: package | ^ package ]] ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:46' prior: 20271442! removeAllCriticToFalsePositive: aCollectionOfCritic forRule: aRule on: aManifestBuilder | ruleId versionId | ruleId := aRule class uniqueIdentifierName. versionId := aRule class identifierMinorVersionNumber. (aManifestBuilder hasFalsePositiveOf: ruleId version: versionId) ifTrue: [ aManifestBuilder removeAllFalsePositive: aCollectionOfCritic of: ruleId version: versionId ]. ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:46' prior: 20271919! removeAllCriticToToDo: aCollectionOfCritic forRule: aRule on: aManifestBuilder | ruleId versionId | ruleId := aRule class uniqueIdentifierName. versionId := aRule class identifierMinorVersionNumber. (aManifestBuilder hasToDoOf: ruleId version: versionId) ifTrue: [ aManifestBuilder removeAllToDo: aCollectionOfCritic of: ruleId version: versionId]. ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/20/2013 22:46' prior: 20262066! removeCritic: aCritic forRule: aRule (critics includesKey: aRule) ifFalse: [^ self]. (critics at: aRule) remove: aCritic ifAbsent: [^ self]. self updateBrowser ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/21/2013 13:01' prior: 20262318! removeFalsePositive: aCritic forRule: aRule (falsePositives includesKey: aRule) ifFalse: [^ self]. (falsePositiveClasses includes: aCritic criticTheNonMetaclassClass) ifTrue: [^ self]. (falsePositives at: aRule) remove: aCritic ifAbsent: [^ self]. self updateBrowser ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/21/2013 13:02' prior: 20262748! removeFalsePositiveClass: aClass | fp | falsePositiveClasses remove: aClass ifAbsent: [^ self]. critics keysAndValuesDo: [ :rule :criticss | fp := criticss select: [ :critic | aClass = critic criticTheNonMetaclassClass]. fp do: [ :each | self removeFalsePositive: each forRule: rule ]]. browser updateTree. ! ! !CriticsCache methodsFor: 'add/remove' stamp: 'StephaneDucasse 3/21/2013 13:03' prior: 20263225! removeFalsePositiveRule: aRule forPackage: aPackage | fp | (falsePositiveRules includesKey: aPackage) ifFalse: [^ self]. (falsePositiveRules at:aPackage) remove: (aRule class uniqueIdentifierName) ifAbsent: [^ self]. fp := (critics at: aRule ifAbsent: [^ self]) select: [:c | ((self packageOf: c) package name) = (aPackage packageName) and: [ (falsePositiveClasses includes: c criticTheNonMetaclassClass) not]]. fp do: [:c | self removeFalsePositive: c forRule: aRule]. self updateBrowser ! ! !CriticsCache methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:19' prior: 20266393! toDosOf: aRule aRule ifNil: [ ^ {}]. ^ aRule isComposite ifTrue: [ aRule leaves gather: [:rule | self toDosOf: rule]] ifFalse: [toDos at: aRule ifAbsent: [{}]]! ! !SmalllintManifestCheckerTest methodsFor: 'running' stamp: 'StephaneDucasse 3/21/2013 13:51'! cleaningResources Smalltalk globals at: #ManifestManifestResourcesTests ifPresent: [ :cl | cl removeFromChanges; removeFromSystemUnlogged ]! ! !SmalllintManifestCheckerTest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 13:43' prior: 33442835! package MCWorkingCopy managersForClass: MFClassA do: [:p | ^ p packageSet packages first]. " should be equivalent to RPackageOrganizer default packageNamed: #'Manifest-Resources-Tests' "! ! !SmalllintManifestCheckerTest methodsFor: 'running' stamp: 'StephaneDucasse 3/21/2013 13:51' prior: 33439212! setUp | bm | self cleaningResources. bm := BuilderManifest of: MFClassA. bm installFalsePositiveOf: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm addFalsePositive: MFClassB >> #method3 of: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm installToDoOf: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. bm addAllToDo: {(MFClassB >> #method3). (MFClassA >> #method)} of: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. smc := SmalllintManifestChecker new! ! !SmalllintManifestCheckerTest methodsFor: 'running' stamp: 'StephaneDucasse 3/21/2013 13:51' prior: 33439950! tearDown self cleaningResources! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'StephaneDucasse 3/21/2013 13:48' prior: 33440223! testCriticsOf | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (smc criticsOf: RBOnlyReadOrWrittenTemporaryRule new) size = 3. self assert: (( smc criticsOf: RBOnlyReadOrWrittenTemporaryRule new ) anySatisfy: [:each| each = (MFClassB>>#method3)]). self assert: (( smc criticsOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassA>>#method)]).! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'StephaneDucasse 3/21/2013 13:49' prior: 33440802! testFalsePositiveOf | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (( smc falsePositiveOf: RBCodeCruftLeftInMethodsRule new) anySatisfy: [ :each | each = (MFClassB>>#method3)]). self deny: (( smc falsePositiveOf: RBCodeCruftLeftInMethodsRule new) anySatisfy: [ :each | each = (MFClassA>>#method)]).! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'StephaneDucasse 3/21/2013 13:50' prior: 33441302! testIsFalsePositive | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (smc isFalsePositive: (MFClassB>>#method3) forRuleId: (RBCodeCruftLeftInMethodsRule uniqueIdentifierName) versionId: 1). self deny: (smc isFalsePositive: (MFClassA>>#method) forRuleId: (RBCodeCruftLeftInMethodsRule uniqueIdentifierName) versionId: 1). ! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'StephaneDucasse 3/21/2013 13:50' prior: 33441838! testIsToDo | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (smc isToDo: (MFClassB>>#method3) forRuleId: (RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName) versionId: 1). self deny: (smc isToDo: (MFClassB>>#method2) forRuleId: (RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName) versionId: 1). ! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'StephaneDucasse 3/21/2013 13:50' prior: 33442350! testToDoOf | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (( smc toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method3)]). self deny: (( smc toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method2)]).! ! !CommentFalsePositiveWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 13:15' prior: 19761364! initializeForFalsePositive self initializeTextForFalsePositive. okCancelToolBarModel okAction: [ | manifestBuilder rId rV | rId := rule class uniqueIdentifierName. rV := rule class identifierMinorVersionNumber. manifestBuilder := self builderManifestClass of: critic. (manifestBuilder hasFalsePositiveOf: rId version: rV) ifFalse: [ manifestBuilder installFalsePositiveOf: rId version: rV ]. manifestBuilder addFalsePositive: critic withComment: commentInputFieldModel getText of: rId version: rV ]! ! !CommentFalsePositiveWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 13:16' prior: 19761982! initializeTextForFalsePositive | ruleId versionId manifestBuilder | manifestBuilder := self builderManifestClass of: critic. ruleId := rule class uniqueIdentifierName. versionId := rule class identifierMinorVersionNumber. (manifestBuilder hasFalsePositiveOf: ruleId version: versionId) ifFalse: [ ^ self ]. commentInputFieldModel text: ((self builderManifestClass of: critic) commentOfFalsePositive: critic onRule: ruleId version: versionId)! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:30' prior: 32902353! addAllItems toSelectModel getRoots do: [ :item | selectRule addAll: item leaves]. self updateTree. ! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:30' prior: 32902543! addItems toSelectModel selectedItem ifNotNil: [ :item | selectRule addAll: item leaves ]. self updateTree ! ! !SelectRuleBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:31' prior: 32903992! defaultRulesRootName ^ 'Selected Rules'! ! !SelectRuleBrowser methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/21/2013 09:31' prior: 32901487! initialize | wrappingBlock childrenBlockS childrenBlockTS | super initialize. toSelectModel := self instantiate: TreeModel. selectedModel := self instantiate: TreeModel. selectRule := Set new. childrenBlockS := [:rule | rule isComposite ifTrue: [rule rules select: [ :r | (selectRule anySatisfy: [ :sr | sr = r ]) or: [ r isComposite ] ]] ifFalse: [{}]]. childrenBlockTS := [ :rule | rule isComposite ifTrue: [rule rules select: [ :r | (selectRule anySatisfy: [ :sr | sr = r ]) not or: [ r isComposite ]]] ifFalse: [{}] ]. toSelectModel childrenBlock: childrenBlockTS. selectedModel childrenBlock: childrenBlockS. wrappingBlock := [ :rule | rule name ]. toSelectModel displayBlock: wrappingBlock. selectedModel displayBlock: wrappingBlock.! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:32' prior: 32902752! nextAction | rules rbRule | self delete. rules := selectedModel getRoots. rules do: [ :each | each leaves do: [ :leave | (selectRule anySatisfy: [ :r | r = leave ]) ifFalse: [ each removeRule: leave ] ] ]. rules := rules reject: [ :each | each rules isEmpty ]. rbRule := RBCompositeLintRule new name: self defaultRulesRootName; rules: rules. CriticWorkingConfiguration current rule: rbRule; environment: environment; removeTestCase: removeTestCase. CriticBrowser openOnWorkspace: CriticWorkingConfiguration current! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:32' prior: 32903388! removeAllItems selectedModel getRoots do: [ :item | selectRule removeAllFoundIn: item leaves]. self updateTree ! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:32' prior: 32903602! removeItems selectedModel selectedItem ifNotNil: [ :item | selectRule removeAllFoundIn: item leaves ]. self updateTree ! ! !Class methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:57'! criticTheNonMetaclassClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self ! ! !CommentWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 13:16'! builderManifestClass ^ BuilderManifest! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:33' prior: 33350875! addAllCriticsToFalsePositive criticsModel listItems do: [ :item | cache addFalsePositive: item forRule: rule ].! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 12:42' prior: 33351272! addClassToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :critic | cache addFalsePositiveClass: critic criticClass] ] ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34' prior: 33351612! addCriticToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache addFalsePositive: item forRule: rule ]]. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34' prior: 33352095! addCriticToToDo criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache addToDo: item forRule: rule ]]. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34' prior: 33352857! addCriticWithCommentToFalsePositive self flag: ' que faire?' ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34' prior: 33353237! addCriticWithCommentToToDo self flag: ' que faire ?' ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:35' prior: 33353559! addRuleToFalsePositive self flag: #todo."todo" "| manifestBuilder | criticsModel selectedItems ifNotNil: [ :criticss | criticss do: [ :critic | manifestBuilder := checker manifestBuilderOf: critic. manifestBuilder addRejectRule: rule class uniqueIdentifierName]]. self updateList" ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:35' prior: 33353916! browseCritic criticsModel selectedItem ifNotNil: [ :elem | elem isBehavior ifTrue: [ elem theNonMetaClass browse ] ifFalse: [ elem browse ] ] ! ! !SingleRuleCriticBrowser methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35' prior: 33345308! criticsModel ^ criticsModel! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45' prior: 33359678! criticsModelContains: aCritic ^ criticsModel listItems anySatisfy: [ :each | aCritic isCompiledMethod ifTrue: [ each isCompiledMethod ifTrue: [ each methodClass = aCritic methodClass and: [ each selector = aCritic selector ]] ifFalse: [ false ] ] ifFalse: [ each = aCritic ] ]! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45' prior: 33360072! criticsOf: aRule cache ifNil: [^ {}]. criticsModel items: ((cache criticsOf: aRule) sorted: [ :a :b | a methodClass = b methodClass ifTrue: [ a selector <= b selector ] ifFalse: [ a methodClass name <= b methodClass name ]]).! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45' prior: 33360410! defaultColor ^ Color red! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45' prior: 33360489! falsePositiveColor ^ Color darkGray! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 12:46' prior: 33360615! formatCritic: aCritic ^ String streamContents: [:s | aCritic criticNameOn: s ] ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:36' prior: 33345742! initializeActionToPerformOnTextModel | selectedItem | sourceCodeModel acceptBlock: [ :text | selectedItem := criticsModel selectedItem. (selectedItem isCompiledMethod and: [ rule isTransformationRule not ]) ifTrue: [ selectedItem methodClass compile: text ] ifFalse: [ Compiler evaluate: text ]] ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'SimonAllier 1/23/2013 11:26' prior: 33346155! initializeDisplayCritic: aCritic forRule: aRule | criticRepresentation | criticRepresentation := (self formatCritic: aCritic) asMorph. ^ (cache isFalsePositive: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self falsePositiveColor ] ifFalse: [ (cache isToDo: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self toDoColor ] ifFalse: [ criticRepresentation color: self defaultColor ]]! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'SimonAllier 9/28/2012 13:53' prior: 33346690! initializePresenter self whenSelectedItemChangesOnListModel. ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33346852! initializeTextInputFieldModel |critics| textInputFieldModel autoAccept: true; ghostText: 'Search field'; text: ' '; removeEntryCompletion. textInputFieldModel acceptBlock: [ :text | |matchText| critics :=cache criticsOf: rule. matchText := '*', text, '*'. criticsModel items: (text isEmpty ifTrue: [ critics ] ifFalse: [ critics select: [ :critic | matchText match: (self formatCritic: critic)]]). criticsModel updateList ] ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'SimonAllier 1/25/2013 16:25' prior: 33347406! initializeToolBar self toolbarModel whenFalsePositiveClickedDo: [ self addCriticToFalsePositive ]. ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33347605! initializeWidgets self instantiateModels: #( criticsModel IconListModel sourceCodeModel TextModel toolbarModel CriticToolbar textInputFieldModel TextInputFieldModel ). criticsModel beMultipleSelection. self initializeTextInputFieldModel. self initializeToolBar. self initializeActionToPerformOnTextModel. criticsModel displayBlock: [:selec | self initializeDisplayCritic: selec forRule: rule]. criticsModel menu: [ :a :b | self menu: a shifted: b ]. criticsModel icons: [ :item | self iconFor: item ]. self focusOrder add: criticsModel; add: toolbarModel; add: sourceCodeModel. ! ! !SingleRuleCriticBrowser methodsFor: 'message handling' stamp: 'StephaneDucasse 3/21/2013 09:44' prior: 33359007! perform: selector orSendTo: otherTarget "If I wish to intercept and handle selector myself, do it; else send it to otherTarget" ^ (self respondsTo: selector) ifTrue: [ self perform: selector ] ifFalse: [ otherTarget perform: selector ]! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:43' prior: 33356266! removeAllCriticsToFalsePositive criticsModel listItems do: [ :item | cache removeFalsePositive: item forRule: rule ]. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 12:46' prior: 33356694! removeClassToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :critic | cache removeFalsePositiveClass: critic criticClass ]] ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:43' prior: 33357041! removeCriticToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache removeFalsePositive: item forRule: rule ]]. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:44' prior: 33357542! removeCriticToToDo criticsModel selectedItems ifNotNil: [:items | items do: [ :item | cache removeToDo: item forRule: rule ]]. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:44' prior: 33358262! removeRuleToFalsePositive self flag: #todo! ! !SingleRuleCriticBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:46' prior: 33359295! resetSelection self criticsModel resetSelection! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33348319! rule: aRule rule := aRule. (rule isNil or: [ rule isComposite ]) ifTrue: [ ^ self ]. self criticsOf: aRule. toolbarModel rule: rule.! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:44' prior: 33358641! sendersOfCritic | abstractTool | abstractTool := AbstractTool new. criticsModel selectedItem ifNotNil: [ :elem | elem isBehavior ifTrue: [ abstractTool browseClassRefsOf: elem ] ifFalse: [ abstractTool browseSendersOfMessagesFrom: elem selector ] ] ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:38' prior: 33348553! setTextModelForClass: cl | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: cl definition. sourceCodeModel behavior: nil . interval := self selectionIntervalFor: cl definition. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:38' prior: 33348920! setTextModelForMethod: selection | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: selection sourceCode. sourceCodeModel behavior: selection methodClass. interval := self selectionIntervalFor: selection sourceCode. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:38' prior: 33349322! setTextModelForNil | text | text := rule longDescription isEmpty ifTrue: [ rule name ] ifFalse: [ rule longDescription ]. sourceCodeModel aboutToStyle: false. sourceCodeModel text: text. sourceCodeModel behavior: nil. toolbarModel critic: nil ! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:39' prior: 33349679! setTextModelForTransformationRule: selection | textDiff change | rule result. change := rule changes detect: [ :ch | (ch changeClassName = selection methodClass theNonMetaClass name) & (ch selector = selection selector)]. textDiff := (TextDiffBuilder from: selection sourceCode to: change source inClass: selection methodClass) buildDisplayPatch. sourceCodeModel behavior: nil. sourceCodeModel text: textDiff. sourceCodeModel aboutToStyle: false. ! ! !SingleRuleCriticBrowser methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35' prior: 33345526! textModel ^ sourceCodeModel! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45' prior: 33361604! toDoColor ^ Color orange! ! !SingleRuleCriticBrowser methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35' prior: 33345610! toolbarModel ^ toolbarModel! ! !SingleRuleCriticBrowser methodsFor: 'thread' stamp: 'StephaneDucasse 3/21/2013 09:46' prior: 33359434! updateList self criticsOf: rule. thread ifNotNil: [ thread terminate ]. thread := [ WorldState addDeferredUIMessage: [ criticsModel updateList ]] fork.! ! !SingleRuleCriticBrowser methodsFor: 'initialize' stamp: 'StephaneDucasse 3/21/2013 09:42' prior: 33350256! whenSelectedItemChangesOnListModel criticsModel whenSelectedItemChanged: [ :selection | rule isNil ifFalse: [ (selection ifNil: [ self setTextModelForNil ] ifNotNil: [ toolbarModel critic: selection. rule isTransformationRule ifTrue: [ self setTextModelForTransformationRule: selection ] ifFalse: [ (rule result isSelectorEnvironment or: [ rule result isMultiEnvironment ]) ifTrue: [ self setTextModelForMethod: selection ] ifFalse: [ self setTextModelForClass: selection ]]] ) ] ]! ! !CriticToolbar methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:20' prior: 20255371! browseCritic criticHolder contents ifNotNil: [ :elem | elem isBehavior ifTrue: [ elem theNonMetaClass browse ] ifFalse: [ elem browse ] ] ! ! !CriticToolbar methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:20' prior: 20253393! initialize super initialize. criticHolder := nil asValueHolder. ruleHolder := nil asValueHolder. browseModel := self instantiate: ButtonModel. transformModel := self instantiate: ButtonModel. falsepositiveModel := self instantiate: ButtonModel. self setFocusOrder. self setBrowseModel. self setTransformModel. self setFalsepositiveModel. self registerForChanges.! ! !CriticToolbar methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:21' prior: 20253963! registerForChanges criticHolder whenChangedDo: [ :contents | | boolean | boolean := contents notNil. browseModel state: (boolean and: [ browseModel enabled ]). transformModel state: (boolean and: [ transformModel enabled ]). falsepositiveModel state: (boolean and: [ falsepositiveModel enabled ]) ] ! ! !CriticToolbar methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:22' prior: 20255168! rule: aRule ruleHolder contents: aRule. aRule isTransformationRule ifTrue: [ transformModel enabled: true ] ifFalse: [ transformModel enabled: false ] ! ! !CriticToolbar methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:24' prior: 20255566! transformCritic | changeCode rule selection | rule := ruleHolder contents ifNotNil: [:r | r ]. rule isTransformationRule ifFalse: [^ self]. selection := criticHolder contents ifNotNil: [:critic | critic]. selection ifNotNil: [ changeCode := (rule changes detect: [ :ch | (ch changeClassName = selection methodClass name) & (ch selector = selection selector)]) source. selection methodClass compile: changeCode]! ! !CriticWorkingConfiguration methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:24' prior: 20257178! logInManifest ^ logInManifest! ! !CriticWorkingConfiguration methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:24' prior: 20257305! logInManifest: anObject logInManifest := anObject! ! !CriticWorkingConfiguration methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:24' prior: 20257452! removeTestCase ^ removeTestCase! ! !CriticWorkingConfiguration methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:24' prior: 20257579! removeTestCase: aBoolean removeTestCase := aBoolean! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:38'! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self methodClass! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:44'! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self methodClass name << '>>#' << self selector << ' (' << self methodClass theNonMetaClass category << ')'! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:55'! criticTheNonMetaclassClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self methodClass theNonMetaClass! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 13:25'! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfMethod: self! ! !CriticBrowser methodsFor: 'user interface' stamp: 'StephaneDucasse 3/20/2013 22:37' prior: 20244850! addModelItemsToWindowMenu: aMenu "Add model-related items to the window menu" aMenu addLine; add: 'Clean all manifest' translated target: checker action: #cleanAllManifest; add: 'Reapply all rules' translated target: self action: #reapplyAllRules! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:33' prior: 20245400! addRuleToFalsePositive rulesModel selectedItem ifNotNil: [ :rule | rule leaves do: [ :r | rbEnvironment packages do: [ :package | cache addFalsePositiveRule: r forPackage: package ]]]. ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:33' prior: 20245673! applyRules | packageCount nbPackage process rules | rules := rulesModel getRoots first. rules resetResult. nbPackage := rbEnvironment packages size. packageCount := 0. self updateTree. process := [ rbEnvironment packages do: [ :package | | windowTitle | packageCount := packageCount + 1. windowTitle := String streamContents: [ :s | s << 'run rules on ' << package packageName << ' (' << packageCount asString << '/' << nbPackage asString << ')' ]. self setTitle: windowTitle. package packageSet packages do: [ :RPa | checker runRules: rules onPackage: RPa withoutTestCase: removeTestCase] ]. checker rule: rules. self setTitle: 'Critics Browser'. cache packages: rbEnvironment. cache initCache. self updateTree. self registerToAnnouncements ] newProcess. process name: 'SmallLint'. process resume. ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:33' prior: 20246657! browseRule rulesModel selectedItem ifNotNil: [ :rule | rule browse ]! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:35' prior: 20242174! classModified: anAnnouncement "checks if a modification of a class fixes a warning. if true, the true/false positives in the browser are update" | class | class := anAnnouncement class. class isManifest ifTrue: [ ^ self ]. (criticModel criticsModelContains: anAnnouncement classAffected) ifFalse: [^ self]. self reapplyThisRule ! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:35' prior: 20242614! classRemoved: anAnnouncement ((rbEnvironment packages gather: [ :package | package packageSet packages ]) classes anySatisfy: [ :cl | anAnnouncement classRemoved = cl ]) ifFalse: [ ^ self ]. cache itemRemoved: anAnnouncement classRemoved! ! !CriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:30' prior: 20237686! initializeDisplayBlockForRules rulesModel displayBlock: [:rule || falsePositives toDos total text unknown | falsePositives := (cache falsePositiveOf: rule) size. toDos := (cache toDosOf: rule) size. total := (cache criticsOf: rule) size. unknown := total - falsePositives - toDos. text := String streamContents: [:s | s << rule name << ' (FP: ' << falsePositives asString << ', ToDo: ' << toDos asString << ', Unclassfied: ' << unknown asString << ')' ]. total isZero ifTrue: [ text ] ifFalse: [ falsePositives >= total ifTrue: [ text asText makeAllColor: criticModel falsePositiveColor ] ifFalse: [ text asText makeAllColor: criticModel defaultColor ]]]! ! !CriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:30' prior: 20238507! initializePresenter rulesModel whenSelectedItemChanged: [ :rule | (rule isNil or: [ rule isComposite ]) ifFalse: [ criticModel resetSelection. criticModel rule: rule. criticModel setTextModelForNil]]. ! ! !CriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:31' prior: 20238811! initializeWidgets title := 'Critic Browser'. rulesModel := self instantiate: TreeModel. self instantiateModels: #( rulesModel TreeModel resetButton ButtonModel logButton ButtonModel ). self setLogButton. self setResetButton. criticModel := SingleRuleCriticBrowser new. rulesModel childrenBlock: [ :rule | rule isComposite ifTrue: [ rule rules ] ifFalse: [ #() ]]. rulesModel menu: [:a :b | self menu: a shifted: b ]. self initializeDisplayBlockForRules. self focusOrder add: rulesModel; add: criticModel! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:33'! inspectResult rulesModel selectedItem ifNotNil: [ :rule | Inspector openOn: rule result ]! ! !CriticBrowser methodsFor: 'menu' stamp: 'StephaneDucasse 3/20/2013 22:32' prior: 20240484! menu: aMenu shifted: aBoolean aMenu add: 'Browse rule' translated target: self selector: #browseRule; add: 'Inspect result of this rule' translated target: self selector: #inspectResult; "add: 'Do not understand this rule' translated target: self selector: #doNotUnderstandThisRule; add: 'This rule contains a bug' translated target: self selector: #bugRule;" add: 'Reapply this rule' target: self selector: #reapplyThisRule; addLine; add: 'Ban this rule for all packages' translated target: self selector: #addRuleToFalsePositive; add: 'Unban this rule for all packages' translated target: self selector: #removeRuleToFalsePositive; addLine. "add: 'Reset working package sets' translated target: self selector: #resetWorkingConfiguration." ^ aMenu! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:35' prior: 20242951! methodAdded: anAnnouncement anAnnouncement methodClass isManifest ifFalse: [ ^ self ]. self updateCountOf: rulesModel selectedItem. self updateTree! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:36' prior: 20243195! methodModified: anAnnouncement "checks if a modification of a method fixes a warning. if true, the true positives in the browser are update" "checks if a method of a manifest class is modified and update false positive in the browser" (criticModel criticsModelContains: anAnnouncement oldMethod) ifFalse: [ ^ self ]. cache replaceAll: anAnnouncement oldMethod by: anAnnouncement newMethod. self reapplyThisRule ! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:36' prior: 20243712! methodRemoved: anAnnouncement | classes | classes := (rbEnvironment packages gather: [ :package | package packageSet packages]) gather: [ :p | p classes]. (classes anySatisfy: [ :cl | anAnnouncement methodClass = cl ]) ifFalse: [ ^ self ]. cache itemRemoved: anAnnouncement methodRemoved! ! !CriticBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/20/2013 22:35' prior: 20241502! onWindowClosed cache cacheChange ifTrue: [ (MorphicUIManager new confirm: 'Do you want log all false positive in the Manifests before closing the Critics Browser ?') ifTrue: [ cache logInManifest ]]. ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:34' prior: 20246920! reapplyAllRules | ruleCount total rule | ruleCount := 0. rule := rulesModel getRoots first. total := rule leaves size. rule leaves do: [ :r | ruleCount := ruleCount + 1. self setTitle: (String streamContents: [:s | s << 'run rules: ' << r name << ' (' << ruleCount asString << '/' << total asString <<')']). self reapplyRule: r ]. self setTitle: 'Critics Browser'. "criticModel updateList." rulesModel updateTree! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:34' prior: 20247438! reapplyRule: aRule | oldCritics | oldCritics := aRule critics. aRule resetResult. rbEnvironment packages do: [ :package | package packageSet packages do: [ :RPa | checker runRules: aRule onPackage: RPa withoutTestCase: removeTestCase]]. (oldCritics \ (aRule critics)) do: [ :each | cache removeCritic: each forRule: aRule. cache removeFalsePositive: each forRule: aRule. cache removeToDo: each forRule: aRule ]. checker rule: aRule. ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:34' prior: 20247973! reapplyThisRule | rule | rulesModel selectedItem isNil ifTrue: [ ^ self ]. rule := rulesModel selectedItem. rule leaves do: [ :each | self reapplyRule: each ]. ! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 3/20/2013 22:36' prior: 20244105! registerToAnnouncements SystemAnnouncer uniqueInstance weak " on: ClassRemoved send: #classRemoved: to: self;" on: ClassModifiedClassDefinition send: #classModified: to: self; " on: MethodAdded send: #methodAdded: to: self;" on: MethodModified send: #methodModified: to: self; on: MethodRemoved send: #methodRemoved: to: self. self window window announcer on: WindowClosed do: [self onWindowClosed] ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/20/2013 22:34' prior: 20248218! removeRuleToFalsePositive rulesModel selectedItem ifNotNil: [ :rule | rule leaves do: [ :r | rbEnvironment packages do: [ :package | cache removeFalsePositiveRule: r forPackage: package ]]]. ! ! !CriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:32' prior: 20239445! setActionLogButtom ^ [(MorphicUIManager new confirm: 'Do you want to save all false positive and toDo in the Manifests ? (this action may generate new manifest classes and make dirty your package)') ifTrue: [ cache logInManifest] ]! ! !CriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:31' prior: 20239791! setActionResetButtom ^ [(MorphicUIManager new confirm: 'Do you want to delete the current configuration and create a new configuration ?') ifTrue: [ self delete. SelectPackageBrowser open.] ]! ! !SelectBrowser methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:26' prior: 32892501! initialExtent ^ 450@360! ! !SelectBrowser methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:27' prior: 32892573! items: aCollection "Set the elements to be analysed" toSelectModel items: (self sort: aCollection) ! ! !SelectPackageBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:27' prior: 32897848! addAllItems | tmp | tmp := self sort: (selectedModel listItems asOrderedCollection addAll: (toSelectModel listItems); yourself ). selectedModel items: tmp. toSelectModel items: {}. toSelectModel updateList. selectedModel updateList. ! ! !SelectPackageBrowser methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:28' prior: 32898185! addItems toSelectModel selectedItems ifNotNil: [ :items | selectedModel items: (self sort: (selectedModel listItems asOrderedCollection addAll: items; yourself) ). toSelectModel items: (self sort: (toSelectModel listItems asOrderedCollection removeAll: items; yourself) ) ]. toSelectModel updateList. selectedModel updateList. ! ! !SelectPackageBrowser methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/21/2013 09:28' prior: 32895738! initialize | wrappingBlock | super initialize. toSelectModel := self instantiate: ListComposableModel. selectedModel := self instantiate: ListComposableModel. selectedModel beMultipleSelection. toSelectModel beMultipleSelection. testPackage := OrderedCollection new. wrappingBlock := [ :package | package packageName ]. toSelectModel displayBlock: wrappingBlock. selectedModel displayBlock: wrappingBlock.! ! !SelectPackageBrowser methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/21/2013 09:29' prior: 32896259! initializeWidgets super initializeWidgets. self instantiateModels: #( addTestCaseClassesModel CheckBoxModel removeTestPackageModel ButtonModel). self setRemoveTestPackageModel. addTestCaseClassesModel label: 'remove all TestCase Classes'. addTestCaseClassesModel state: true.! ! !SelectPackageBrowser methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/21/2013 09:30' prior: 32896649! removeTestPackage | matchText | testPackage isEmpty ifTrue: [ removeTestPackageModel label: 'Remove All Packages Tests'. matchText := '*Test*'. testPackage :=MCWorkingCopy allManagers select: [ :package | matchText match: package packageName ]. selectedModel items: (self sort:(selectedModel listItems \ testPackage)). toSelectModel items: (self sort:(toSelectModel listItems \ testPackage)) ] ifFalse: [ removeTestPackageModel label: 'Add All Packages Tests'. toSelectModel items: (self sort: (toSelectModel listItems asOrderedCollection addAll: testPackage; yourself)). testPackage := OrderedCollection new ]. toSelectModel updateList. selectedModel updateList. ! ! !RBCompositeLintRule methodsFor: '*Manifest-CriticBrowser' stamp: 'StephaneDucasse 3/21/2013 09:46' prior: 30439229! sort: aBlock rules first isComposite ifTrue: [ rules do: [ :rule | rule sort: aBlock ]] ifFalse: [ self rules: (rules sort: aBlock) ]! ! !MCPackageManager methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 13:25'! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfPackage: self! ! !BuilderManifest methodsFor: 'comparing' stamp: 'StephaneDucasse 3/21/2013 10:24' prior: 18524035! = aObject ^ aObject class = self class and: [ manifestClass = aObject manifest ]! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 09:47' prior: 18517319! addAllFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addAllItem: fp selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [ self removeToDo: fp of: ruleId version: versionId ]. ! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:37' prior: 18531799! addAllItem: aSet selector: selector | set newSet arrayString | set := (manifestClass perform: selector) asOrderedCollection. newSet := aSet \ (self unwrap: set). newSet isEmpty ifTrue: [ ^ self ]. set addAll: (newSet collect: [ :fp | {(fp asRingDefinition arrayStringForManifest). (DateAndTime current asString)} ]). arrayString := self buildArrayString: set. self compileSelector: selector returnValue: arrayString! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 09:47' prior: 18517716! addAllToDo: aSet of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self addAllItem: aSet selector: selector. ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 09:59' prior: 18517973! addFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [self removeToDo: fp of: ruleId version: versionId]. ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:00' prior: 18518364! addFalsePositive: fp withComment: aString of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addItem: fp wihtComment: aString selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [ self removeToDo: fp of: ruleId version: versionId ]. ! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:37' prior: 18532538! addItem: fp wihtComment: aString selector: selector | set unwrapSet arrayString critic | set := (manifestClass perform: selector) asOrderedCollection. unwrapSet := self unwrap: set. (unwrapSet anySatisfy: [ :each | each = fp ]) ifTrue: [ critic := set at: (unwrapSet indexOf: fp). set removeIndex: (unwrapSet indexOf: fp). set add: {(critic at: 1). (critic at: 2). aString} ] ifFalse: [ set add: {(fp asRingDefinition storeString). (DateAndTime current asString). aString} ]. arrayString := self buildArrayString: set. self compileSelector: selector returnValue: arrayString! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:00' prior: 18518798! addRejectClass: aClass | falsePositives | falsePositives := manifestClass rejectClasses asOrderedCollection . ((self unwrap: falsePositives) anySatisfy: [:each | each = aClass]) ifTrue: [ ^ self ]. falsePositives add: {aClass asRingDefinition arrayStringForManifest. DateAndTime current asString}. manifestClass class compile: (self class rejectClassesTag, Character cr asString, '^ ', (self buildArrayString: falsePositives)) classified: 'meta data' ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:00' prior: 18519326! addRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asSet. nfp add: ruleId. nfp := nfp asArray. manifestClass class compile: (self class rejectRulesTag, Character cr asString, '^ ', nfp asString) classified: 'meta data' ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:01' prior: 18519661! addToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsFalsePositive: fp onRule: ruleId version: versionId) ifTrue: [ self removeFalsePositive: fp of: ruleId version: versionId ]! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:01' prior: 18520050! addToDo: fp withComment: aString of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self addItem: fp wihtComment: aString selector: selector. (self containsFalsePositive: fp onRule: ruleId version: versionId) ifTrue: [ self removeFalsePositive: fp of: ruleId version: versionId ]! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02' prior: 18520483! addTruePositive: fp of: ruleId version: versionId | selector | selector := self selectorTruePositiveOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [ self removeToDo: fp of: ruleId version: versionId ]. (self containsFalsePositive: fp onRule: ruleId version: versionId) ifTrue: [ self removeFalsePositive: fp of: ruleId version: versionId ] ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02' prior: 18521020! cleanUp | tagfp | tagfp := self class falsePositiveBeginningTag. manifestClass class methodDict do: [ :method | ((method selector asString beginsWith: tagfp) or: [method selector asString beginsWith: tagfp]) ifTrue: [self removeObsoleteFalsePositiveOf: method] ] ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 12:52' prior: 18524338! commentOfFalsePositive: aItem onRule: ruleId version: versionId (self hasFalsePositiveOf: ruleId version: versionId ) ifFalse: [ ^ self ]. ^ self version: versionId critic: aItem onRule: ruleId criticSelector: (self selectorFalsePositiveOf: ruleId version: versionId)! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 12:52' prior: 18524951! commentOfToDo: aItem onRule: ruleId version: versionId (self hasToDoOf: ruleId version: versionId) ifFalse: [ ^ self ]. ^ self version: versionId critic: aItem onRule: ruleId criticSelector: (self selectorToDoOf: ruleId version: versionId)! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:37'! compileSelector: selector returnValue: arrayString manifestClass class compile: selector asString , Character cr asString , '^ ' , arrayString classified: 'meta data'! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:28' prior: 18525499! containsFalsePositive: aItem onRule: ruleId version: versionId ^ (self hasFalsePositiveOf: ruleId version: versionId) and: [ (self falsePositiveOf: ruleId version: versionId) anySatisfy: [ :fp | fp = aItem ]] ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29' prior: 18525760! containsRejectedClass: aClass ^ self rejectClasses anySatisfy: [ :cl | cl = aClass ]! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29' prior: 18525890! containsRejectedRule: aRuleId ^ self rejectRules anySatisfy: [ :fp | fp = aRuleId ]! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29' prior: 18526020! containsToDo: aItem onRule: ruleId version: versionId ^ (self hasToDoOf: ruleId version: versionId) and: [(self toDoOf: ruleId version: versionId) anySatisfy: [ :fp| fp = aItem ]] ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29' prior: 18526291! containsTruePositive: aItem onRule: ruleId version: versionId ^ (self hasTruePositiveOf: ruleId version: versionId) and: [(self truePositiveOf: ruleId version: versionId) anySatisfy: [ :fp| fp = aItem ]] ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:30' prior: 18526586! createManifestNamed: packageName manifestClass := Object subclass: (self class manifestTag, packageName onlyLetters) asSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: packageName. manifestClass class compile: (self class rejectClassesTag, Character cr asString, '^ #()') classified: 'meta data'. manifestClass class compile: (self class rejectRulesTag, Character cr asString, '^ #()') classified: 'meta data'. ^ manifestClass! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:31' prior: 18527333! dateOfFalsePositive: aItem onRule: ruleId version: versionId | ringobject dateAndTime critics | (self hasFalsePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ringobject := aItem asRingDefinition. critics := manifestClass perform: (self selectorFalsePositiveOf: ruleId version: versionId). dateAndTime := (critics detect: [:each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = ringobject ]) at: 2. ^ dateAndTime asDateAndTime ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:31' prior: 18527903! dateOfToDo: aItem onRule: ruleId version: versionId | ringobject dateAndTime critics| (self hasFalsePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ringobject := aItem asRingDefinition. critics := manifestClass perform: (self selectorToDoOf: ruleId version: versionId). dateAndTime := (critics detect: [:each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = ringobject ]) at: 2. ^ dateAndTime asDateAndTime ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:32' prior: 18528456! dateOfTruePositive: aItem onRule: ruleId version: versionId | ringobject dateAndTime critics | (self hasFalsePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ringobject := aItem asRingDefinition. critics := manifestClass perform: (self selectorTruePositiveOf: ruleId version: versionId). dateAndTime := (critics detect: [:each | (Object readFrom: (each first)) = ringobject ]) at: 2. ^ dateAndTime asDateAndTime ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:32' prior: 18528984! falsePositiveOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorFalsePositiveOf: ruleId version: versionId))! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:32' prior: 18529702! installFalsePositiveOf: ruleId version: versionId manifestClass class compile: ((self selectorFalsePositiveOf: ruleId version: versionId) asString, '^ #()') classified: 'meta data'! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:32' prior: 18530192! installTruePositiveOf: ruleId version: versionId manifestClass class compile: ((self selectorTruePositiveOf: ruleId version: versionId) asString, '^ #()') classified: 'meta data'! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 12:41' prior: 18530501! isFalsePositive: aItem onRule: ruleId version: versionId ^ ((self containsFalsePositive: aItem onRule: ruleId version: versionId) or: [(self containsRejectedRule: ruleId) or: [self containsRejectedClass: aItem criticClass]])! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:38' prior: 18533780! isObsoleteManifest | methodDico | methodDico := manifestClass class methodDictionary. ^ methodDico isEmpty or: [methodDico anySatisfy: [:method | |selector| selector := method selector. (#(#rejectClass. #rejectRules) includes: selector) ifTrue: [ false ] ifFalse: [ (manifestClass perform: selector) anySatisfy: [ :each | each first first = (Character value: 40)]]] ]! ! !BuilderManifest methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:47' prior: 18516872! manifestClass: aClass manifestClass := aClass ! ! !BuilderManifest methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:47' prior: 18517010! manifestOf: elem | packageName | packageName := self packageNameOf: elem. manifestClass := self class allManifestClasses detect: [ :each | each category = packageName ] ifNone: [ nil ]. ^ manifestClass ! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:38' prior: 18534263! packageNameOf: elem elem isCompiledMethod ifTrue: [MCWorkingCopy managersForClass: (elem methodClass) selector: (elem selector) do: [: package | ^ package packageName ]] "(RPackageOrganizer default packageOf: elem ) name" ifFalse: [MCWorkingCopy managersForClass: elem do: [: package | ^ package packageName ]] "(RPackageOrganizer default packageDefiningOrExtendingMethod: elem ) name"! ! !BuilderManifest methodsFor: 'printing' stamp: 'StephaneDucasse 3/21/2013 10:34' prior: 18531623! printOn: aStream aStream nextPutAll: 'ManifestBuilder of '; nextPutAll: manifestClass name! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33' prior: 18530978! rejectRules ^ (manifestClass respondsTo: #rejectRules) ifTrue: [manifestClass rejectRules ] ifFalse: [ #() ] ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02' prior: 18521391! removeAllFalsePositive: aSet of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf:ruleId version: versionId. self removeAllItem: aSet selector: selector. ! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:39' prior: 18534748! removeAllItem: aSet selector: selector | set arrayString | set := (manifestClass perform: selector) asOrderedCollection. set := set reject: [ :each | | tmp | tmp := (Smalltalk globals at: each first first) manifestReadOn: (each first at: 2). aSet anySatisfy: [ :fp | tmp = fp asRingDefinition ] ]. arrayString := self buildArrayString: set. self compileSelector: selector returnValue: arrayString! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02' prior: 18521836! removeAllToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self removeAllItem: fp selector: selector. ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:03' prior: 18522095! removeFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self removeItem: fp selector: selector. ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:22' prior: 18522372! removeManifestOf: aItem (self manifestOf: aItem) ifNotNil: [ :manifest | self removeClass: manifest ]! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40' prior: 18535460! removeObsoleteFalsePositiveOf: aMethod | set arrayString | set := (manifestClass perform: aMethod selector) asOrderedCollection. set := set select: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) isDefined ]. arrayString := self buildArrayString: set. self compileSelector: aMethod selector returnValue: arrayString ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:23' prior: 18522572! removeRejectClass: aClass | classes | classes := manifestClass rejectClasses asOrderedCollection. classes := classes reject: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = aClass asRingDefinition ]. manifestClass class compile: (self class rejectClassesTag, Character cr asString, '^ ', (self buildArrayString: classes)) classified: 'meta data' ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:23' prior: 18523032! removeRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asOrderedCollection. nfp remove: ruleId ifAbsent: [^ self]. nfp := nfp asArray. manifestClass class compile: (self class rejectRulesTag, Character cr asString, '^ ', nfp asString) classified: 'meta data' ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:24' prior: 18523408! removeToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf:ruleId version: versionId. self removeItem: fp selector: selector. ! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40' prior: 18535961! selectorFalsePositiveOf: ruleId version: versionId ^ (self class falsePositiveBeginningTag, ruleId, self class falsePositiveMiddleTag, versionId asString, self class falsePositiveEndTag) asSymbol.! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40' prior: 18536246! selectorToDoOf: ruleId version: versionId ^ (self class toDoBeginningTag, ruleId , self class toDoMiddleTag, versionId asString, self class toDoEndTag) asSymbol.! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:41' prior: 18536495! selectorTruePositiveOf: ruleId version: versionId ^ (self class falsePositiveBeginningTag, ruleId , self class falsePositiveMiddleTag, versionId asString, self class truePositiveEndTag) asSymbol.! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33' prior: 18531178! toDoOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorToDoOf: ruleId version: versionId))! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33' prior: 18531389! truePositiveOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorTruePositiveOf: ruleId version: versionId))! ! !BuilderManifest methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:41' prior: 18536778! unwrap: aCollection | unwrapCollection rgobject | unwrapCollection := OrderedCollection new. aCollection do: [ :each | " (each first first) = (Character value: 40) ifFalse: [" rgobject := (Smalltalk globals at: each first first) manifestReadOn: (each first at: 2). (rgobject isClass and: [ rgobject realClass notNil ]) ifTrue: [ unwrapCollection add: rgobject realClass ]. (rgobject isMethod and: [ rgobject method notNil ]) ifTrue: [ unwrapCollection add: rgobject method ] ]. ^ unwrapCollection! ! !BuilderManifest methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 12:51'! version: versionId critic: aItem onRule: ruleId criticSelector: aSelector | critic ringobject critics | ringobject := aItem asRingDefinition. critics := manifestClass perform: aSelector. critic := critics detect: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = ringobject ] ifNone: [ ^ '' ]. ^ critic size = 3 ifTrue: [ (critic at: 3) asString ] ifFalse: [ '' ]! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:57'! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 12:57'! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 3/21/2013 13:26'! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! !CommentToDoWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 13:17' prior: 19763489! initializeForToDo self initializeTextForToDo. okCancelToolBarModel okAction: [ | manifestBuilder rId rV | rId := rule class uniqueIdentifierName. rV := rule class identifierMinorVersionNumber. manifestBuilder := self builderManifestClass of: critic. (manifestBuilder hasToDoOf: rId version: rV) ifFalse: [ manifestBuilder installToDoOf: rId version: rV ]. manifestBuilder addToDo: critic withComment: commentInputFieldModel getText of: rId version: rV ]! ! !CommentToDoWindow methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 13:17' prior: 19764053! initializeTextForToDo | ruleId versionId manifestBuilder | manifestBuilder := self builderManifestClass of: critic. ruleId := rule class uniqueIdentifierName. versionId := rule class identifierMinorVersionNumber. (manifestBuilder hasToDoOf: ruleId version: versionId) ifFalse: [ ^ self ]. commentInputFieldModel text: ((self builderManifestClass of: critic) commentOfToDo: critic onRule: ruleId version: versionId)! ! !SmalllintManifestChecker commentStamp: '' prior: 33856770! SmalllintManifestChecker is responsible for running a set of rules on a given subsystem. | rules checker | rules := RBCompositeLintRule allGoodRules resetResult. "the resetResult is necessary because it will build a knid of cache of the result and this cannot be done automatically (for example you may want to run several rules without invalidating the results). " checker := SmalllintManifestChecker new runRules: rules onPackage: (RPackageOrganizer default packageNamed: #'Manifest-Core').! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 13:06'! builderManifestClass ^ BuilderManifest! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 13:11' prior: 33435724! cleanAllManifest | manifests | manifests := environment packages collect: [ :cl | self builderManifestClass of: cl ] as: Set. manifests do: [ :each | each cleanUp ]! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 10:42' prior: 33433859! criticsOf: aRule | rules | rules := rule leaves detect: [:r | r class = aRule class] ifNone: [^{}]. ^ rules critics! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:43' prior: 33435974! falsePositiveOf: aRule |critics rId rV mb | critics := self criticsOf: aRule. rId := aRule class uniqueIdentifierName. rV := aRule class identifierMinorVersionNumber. ^ critics select: [ :critic | mb := self manifestBuilderOf: critic. mb isNil ifTrue: [ false ] ifFalse: [ mb isFalsePositive: critic onRule: rId version: rV ]] ! ! !SmalllintManifestChecker methodsFor: 'initialize-release' stamp: 'StephaneDucasse 3/21/2013 10:43' prior: 33435563! initialize super initialize. manifestClassCache := Dictionary new. ! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:43' prior: 33436415! isFalsePositive: aCritic forRuleId: ruleId versionId: versionId | mb | mb := self manifestBuilderOf: aCritic. ^ mb isNil ifTrue: [ false ] ifFalse: [ mb isFalsePositive: aCritic onRule: ruleId version: versionId ] ! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:43' prior: 33436732! isToDo: aCritic forRuleId: ruleId versionId: versionId | mb | mb := self manifestBuilderOf: aCritic. ^ mb isNil ifTrue: [ false ] ifFalse: [ mb containsToDo: aCritic onRule: ruleId version: versionId ] ! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:44' prior: 33437039! isTruePositive: aCritic forRuleId: ruleId versionId: versionId ^ (self manifestBuilderOf: aCritic) containsTruePositive: aCritic onRule: ruleId version: versionId ! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 13:27' prior: 33434076! manifestBuilderOf: aCritic ^ aCritic manifestBuilderForRuleChecker: self ! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 13:09' prior: 33434412! manifestBuilderOfClass: aClass | key | key := aClass theNonMetaClass category. ^ manifestClassCache at: key ifAbsentPut: [ (self builderManifestClass hasManifestFor: aClass) ifTrue: [ self builderManifestClass of: aClass ] ifFalse: [ nil ] ]! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 13:10' prior: 33434744! manifestBuilderOfMethod: aMethod | key cl | cl := aMethod methodClass. key := cl name , aMethod category asString. ^ manifestClassCache at: key ifAbsentPut: [ (self builderManifestClass hasManifestFor: aMethod) ifTrue: [ self builderManifestClass of: aMethod ] ifFalse: [ nil ] ]! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 13:10' prior: 33435115! manifestBuilderOfPackage: aPackage | key | key := aPackage packageName. ^ manifestClassCache at: key ifAbsentPut: [ (self builderManifestClass hasPackageNamed: key) ifTrue: [ self builderManifestClass ofPackageNamed: key ] ifFalse: [ nil ] ]! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:50' prior: 33437302! rejectClassesOf: aPackage | mb | mb := self manifestBuilderOf: aPackage. ^ mb isNil ifTrue: [{}] ifFalse: [ mb rejectClasses ] ! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:50' prior: 33437535! rejectRulesOf: aPackage | mb | mb := self manifestBuilderOf: aPackage. ^ mb isNil ifTrue: [{}] ifFalse: [ mb rejectRules] ! ! !SmalllintManifestChecker methodsFor: 'run' stamp: 'StephaneDucasse 3/21/2013 10:51' prior: 33438197! runRules: aCompositeRule onPackage: aPackage rule := aCompositeRule. environment := (RBPackageEnvironment new packages: {aPackage}). environment classesDo: [ :class | (class isTrait or: [class isManifest]) ifFalse: [ self checkClass: class. self checkMethodsForClass: class ] ]! ! !SmalllintManifestChecker methodsFor: 'run' stamp: 'StephaneDucasse 3/21/2013 10:50' prior: 33438575! runRules: aCompositeRule onPackage: aPackage withoutTestCase: aBoolean rule := aCompositeRule. environment := (RBPackageEnvironment new packages: {aPackage}). environment classesDo: [ :class | (class isTrait or: [class isManifest or: [aBoolean and: [class allSuperclasses includes: TestCase ]]]) ifFalse: [ self checkClass: class. self checkMethodsForClass: class ] ]! ! !SmalllintManifestChecker methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:51' prior: 33437767! toDoOf: aRule |critics rId rV mb | critics := self criticsOf: aRule. rId := aRule class uniqueIdentifierName. rV := aRule class identifierMinorVersionNumber. ^ critics select: [:critic | mb := (self manifestBuilderOf: critic). mb isNil ifTrue: [ false ] ifFalse: [ mb containsToDo: critic onRule: rId version: rV ]] ! ! Object removeSelector: #class! CriticBrowser removeSelector: #InspectResult! "Kernel"! "Manifest-Core"! "Manifest-CriticBrowser"! "Manifest-Tests"! ----End fileIn----! ----QUIT----an Array(23 March 2013 1:33:35 pm) Pharo.image priorSource: 291957! ----STARTUP----an Array(23 March 2013 1:39:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 March 2013 1:39:42 pm) Pharo-30010.image priorSource: 379232! ----STARTUP----an Array(25 March 2013 8:21:25 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/25/2013 08:19' prior: 33846689! commentForCurrentUpdate ^ '7578 Remove String asPacked/fromPacked: protocol https://pharo.fogbugz.com/f/cases/7578 7598 Nautilus>>class #cleanUpForProduction --> just cleanUp https://pharo.fogbugz.com/f/cases/7598/ 10117 remove class TestURI https://pharo.fogbugz.com/f/cases/10117 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/25/2013 08:19'! script110 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.66.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.243.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1345.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.142.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-MarcusDenker.65.mcz Keymapping-Shortcuts-EstebanLorenzano.65.mcz Keymapping-Tests-MarcusDenker.69.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1380.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.101.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.436.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-MarcusDenker.78.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.780.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-MarcusDenker.6.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.106.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.81.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.52.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1065.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/25/2013 08:19'! update30011 "self new update30011" self withUpdateLog: '7578 Remove String asPacked/fromPacked: protocol https://pharo.fogbugz.com/f/cases/7578 7598 Nautilus>>class #cleanUpForProduction --> just cleanUp https://pharo.fogbugz.com/f/cases/7598/ 10117 remove class TestURI https://pharo.fogbugz.com/f/cases/10117 '. self loadTogether: self script110 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 3/24/2013 10:32' prior: 33807459! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: crc16 endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" colorNames indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !Nautilus class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 3/24/2013 11:15'! cleanUp AbstractNautilusUI resetIconCaches. Nautilus resetCachedLastClasses. ! ! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 3/24/2013 11:15' prior: 23531373! cleanUpForRelease "self new cleanUpForRelease" Author fullName: 'Mr.Cleaner'. self cleanUpMethods. ExternalDropHandler resetRegisteredHandlers. FreeTypeFontProvider current initialize. SystemNavigation new allObjectsDo: [ :each | (each respondsTo: #releaseCachedState) ifTrue: [ each releaseCachedState ] ]. "Remove empty categories, which are not in MC packages, because MC does not do this (this script does not make packages dirty)" Smalltalk organization removeEmptyCategories. Smalltalk allClassesAndTraitsDo: [ :class | [ :each | each removeEmptyCategories; sortCategories ] value: class organization; value: class class organization ]. Smalltalk organization sortCategories. Smalltalk garbageCollect. Smalltalk cleanOutUndeclared. Smalltalk fixObsoleteReferences. Smalltalk cleanUp: true except: #() confirming: false. Author reset! ! TestURI removeSelector: #testUserInfoWithIllegalCharacters! TestURI removeSelector: #testUserInfoOnlyHost! TestURI removeSelector: #testUserInfoNoQuestionMark! TestURI removeSelector: #testUserInfo! TestURI removeSelector: #testSlashSlashSlashPath! TestURI removeSelector: #testSimpleAbsoluteQuery! TestURI removeSelector: #testSchemeShouldNotContainAt! TestURI removeSelector: #testSchemeCannotStartWithDigit! TestURI removeSelector: #testSchemeCanContainPlusMinus! TestURI removeSelector: #testSchemeAbsolutePass5! TestURI removeSelector: #testSchemeAbsolutePass4! TestURI removeSelector: #testSchemeAbsolutePass3! TestURI removeSelector: #testSchemeAbsolutePass2! TestURI removeSelector: #testResolveNormal9! TestURI removeSelector: #testResolveNormal8! TestURI removeSelector: #testResolveNormal7! TestURI removeSelector: #testResolveNormal6! TestURI removeSelector: #testResolveNormal5! TestURI removeSelector: #testResolveNormal4! TestURI removeSelector: #testResolveNormal3! TestURI removeSelector: #testResolveNormal21! TestURI removeSelector: #testResolveNormal20! TestURI removeSelector: #testResolveNormal2! TestURI removeSelector: #testResolveNormal19! TestURI removeSelector: #testResolveNormal18! TestURI removeSelector: #testResolveNormal17! TestURI removeSelector: #testResolveNormal16! TestURI removeSelector: #testResolveNormal15! TestURI removeSelector: #testResolveNormal14! TestURI removeSelector: #testResolveNormal13! TestURI removeSelector: #testResolveNormal12! TestURI removeSelector: #testResolveNormal11! TestURI removeSelector: #testResolveNormal10! TestURI removeSelector: #testResolveNormal1! TestURI removeSelector: #testResolveAbnormal9! TestURI removeSelector: #testResolveAbnormal8! TestURI removeSelector: #testResolveAbnormal7! TestURI removeSelector: #testResolveAbnormal6! TestURI removeSelector: #testResolveAbnormal5! TestURI removeSelector: #testResolveAbnormal4! TestURI removeSelector: #testResolveAbnormal3! TestURI removeSelector: #testResolveAbnormal2! TestURI removeSelector: #testResolveAbnormal18! TestURI removeSelector: #testResolveAbnormal17! TestURI removeSelector: #testResolveAbnormal16! TestURI removeSelector: #testResolveAbnormal15! TestURI removeSelector: #testResolveAbnormal14! TestURI removeSelector: #testResolveAbnormal13! TestURI removeSelector: #testResolveAbnormal12! TestURI removeSelector: #testResolveAbnormal11! TestURI removeSelector: #testResolveAbnormal10! TestURI removeSelector: #testResolveAbnormal1! TestURI removeSelector: #testRelativeQuery! TestURI removeSelector: #testRelativePathWithTrailingSlash! TestURI removeSelector: #testRelativeEmptyAuthority! TestURI removeSelector: #testRelativeAuthority! TestURI removeSelector: #testQueryWithOnlyQueryPart! TestURI removeSelector: #testQueryWithALotCharacters! TestURI removeSelector: #testQueryShouldNotContainPipes! TestURI removeSelector: #testQueryShouldNotContainEscape! TestURI removeSelector: #testPortNumbersShouldNotHaveEscapingCharacters! TestURI removeSelector: #testPathWithThreeParts! TestURI removeSelector: #testPathWithSimpleDotDot! TestURI removeSelector: #testPathWithSimpleDot! TestURI removeSelector: #testPathWithFunkyCharacters! TestURI removeSelector: #testPathWithDotDot! TestURI removeSelector: #testPathWithBogusEscapedCharacters! TestURI removeSelector: #testPathForSlash! TestURI removeSelector: #testPathForEmptyURI! TestURI removeSelector: #testParseFragment8! TestURI removeSelector: #testParseFragment7! TestURI removeSelector: #testParseFragment6! TestURI removeSelector: #testParseFragment5! TestURI removeSelector: #testParseFragment4! TestURI removeSelector: #testParseFragment3! TestURI removeSelector: #testParseFragment2! TestURI removeSelector: #testParseFragment10! TestURI removeSelector: #testParseFragment1! TestURI removeSelector: #testParseBadCharacterInUserInfo! TestURI removeSelector: #testOpaqueQuery! TestURI removeSelector: #testOpaque! TestURI removeSelector: #testNonNumericPorts! TestURI removeSelector: #testNoPlusAtTheBeginningOfScheme! TestURI removeSelector: #testNoPathOnlyAuthority! TestURI removeSelector: #testNoEscapedCharactersInScheme! TestURI removeSelector: #testHostWithPort! TestURI removeSelector: #testEmptyButDefinedQuery! TestURI removeSelector: #testDotDotInPath! TestURI removeSelector: #testDirectoryRoot! TestURI removeSelector: #testDirWithHash! TestURI removeSelector: #testDefaultDirRoundtrip! TestURI removeSelector: #testColonOnly! TestURI removeSelector: #testAbsolutionButEmptyURIAuthority! TestURI removeSelector: #testAbsoluteURIWithSimpleAuthority! TestURI removeSelector: #testAbsoluteURIOnlyHavingSchemeFail! TestURI removeSelector: #testAbsoluteURIHavingEmptyAuthority! TestURI removeSelector: #testAbsoluteMailToScheme! TestURI removeSelector: #testAbsoluteAuthority! TestURI removeSelector: #test2396ParseTelnet! TestURI removeSelector: #test2396ParseNew! TestURI removeSelector: #test2396ParseMailto! TestURI removeSelector: #test2396ParseHTTP2! TestURI removeSelector: #test2396ParseHTTP1! TestURI removeSelector: #test2396ParseGopher! TestURI removeSelector: #test2396ParseFTP! TestURI class removeSelector: #generateNormalResolverTests! TestURI class removeSelector: #generateAbnormalResolverTests! Smalltalk globals removeClassNamed: #TestURI! String removeSelector: #asPacked! String class removeSelector: #fromPacked:! WideString removeSelector: #asPacked! WideString class removeSelector: #fromPacked:! Nautilus class removeSelector: #cleanUpForProduction! "Collections-Strings"! "Nautilus"! "NetworkTests"! "Tools"! ----End fileIn----! ----QUIT----an Array(25 March 2013 8:21:31 am) Pharo.image priorSource: 379431! ----STARTUP----an Array(25 March 2013 8:27:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 March 2013 8:27:22 am) Pharo-30011.image priorSource: 408695! ----STARTUP----an Array(25 March 2013 2:38:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 3/25/2013 14:33' prior: 33934163! commentForCurrentUpdate ^ '10009 KeyMapping classes should be commented https://pharo.fogbugz.com/f/cases/10009 10012 SaveCommandLineHandler has wrong handler name in the class comment https://pharo.fogbugz.com/f/cases/10012 10128 Drag and Drop support in Spec https://pharo.fogbugz.com/f/cases/10128/ 10126 PluggableTreeMorph was defining its own behaviour for drag and drop https://pharo.fogbugz.com/f/cases/10126/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 3/25/2013 14:34'! script111 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.243.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.8.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-EstebanLorenzano.25.mcz Kernel-MarcusDenker.1345.mcz KernelTests-EstebanLorenzano.476.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-EstebanLorenzano.5.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1384.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.436.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-EstebanLorenzano.783.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.83.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1065.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.462.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 3/25/2013 14:34'! update30012 "self new update30012" self withUpdateLog: '10009 KeyMapping classes should be commented https://pharo.fogbugz.com/f/cases/10009 10012 SaveCommandLineHandler has wrong handler name in the class comment https://pharo.fogbugz.com/f/cases/10012 10128 Drag and Drop support in Spec https://pharo.fogbugz.com/f/cases/10128/ 10126 PluggableTreeMorph was defining its own behaviour for drag and drop https://pharo.fogbugz.com/f/cases/10126/ '. self loadTogether: self script111 merge: false. KMRepository reset. NECPreferences popupShowWithShortcut: nil. self flushCaches. ! ! "ScriptLoader30"! !AbstractBasicWidget commentStamp: '' prior: 17170879! AbstractBasicWidget is an abstract class for basic widgets! !SaveCommandLineHandler commentStamp: '' prior: 32671286! Usage: save [--delete-old] a base name for the image --delete-old remove the old image and changes file Documentation: Saves the image and changes file under a new name. Examples: # create a 'bar.image' and 'foo.changes' $PHAROVM Foo.image save bar # create the same file as in the previous example but delete Foo.image and Foo.changes $PHAROVM Foo.image save bar --delete-old! !KMNoShortcut commentStamp: 'CamilloBruni 3/21/2011 00:05' prior: 24162943! I do not respond to any keyboard event. Mostly used in the settings to deactivate a certain command.! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24141089! testBuffering | morph flag category event1 event2 event3| category := KMCategory named: #TestBlah. morph := BorderedMorph new. morph kmDispatcher reset. KMRepository default attach: category to: BorderedMorph. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag := true]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination, $p asKeyCombination action: []). morph attachKeymapCategory: #TestBlah. event1 := self eventKey: $a. morph kmDispatcher dispatchKeystroke: event1. self assert: morph kmDispatcher buffer size = 1. self assert: morph kmDispatcher buffer first = event1. event2 := self eventKey: $b. morph kmDispatcher dispatchKeystroke: event2. self assert: morph kmDispatcher buffer size = 2. self assert: morph kmDispatcher buffer first = event1. self assert: morph kmDispatcher buffer second = event2. event3 := self eventKey: $c. morph kmDispatcher dispatchKeystroke: event3. self assert: morph kmDispatcher buffer isEmpty. self assert: flag.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24143097! testNoMultiTrigger | bm1 bm2 km flag1 flag2 category otherCategory | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. KMRepository default attach: category to: BorderedMorph. bm1 := BorderedMorph new. flag1 := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := KMMockMorph new. KMRepository default attach: otherCategory to: KMMockMorph. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. self deny: flag1. self assert: flag2.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24144084! testNoStaggeredTrigger "Once a key sequence is recognized by a keymapper, all other keymappers should clear their buffers" | bm1 bm2 km flag1 flag2 category otherCategory bufferBefore | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. bm1 := BorderedMorph new. KMRepository default attach: category to: EllipseMorph. flag1 := false. category addKeymapEntry: ( KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := Morph new. KMRepository default attach: otherCategory to: Morph. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. bufferBefore := bm2 kmDispatcher buffer copy. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. flag1 ifTrue: [ bufferBefore inspect ]. self deny: flag1. self assert: flag2.! ! !ByteString methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 20:28'! asKeyCombination self size > 1 ifTrue: [ self error: 'Shortcuts only take a single letter']. ^ KMSingleKeyCombination from: self first! ! !AbstractBasicWidget commentStamp: '' prior: 33974067! AbstractBasicWidget is an abstract class for basic widgets! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 12:59'! acceptDropBlock ^ acceptDropBlock contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 12:59'! acceptDropBlock: aBlock acceptDropBlock contents: aBlock! ! !AbstractBasicWidget methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 3/25/2013 12:39'! acceptDroppingMorph: draggedMorph event: event inMorph: source ^ self acceptDropBlock cull: draggedMorph cull: event cull: source! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 10:33'! dragEnabled ^ dragEnabled contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 10:35'! dragEnabled: anObject dragEnabled contents: anObject! ! !AbstractBasicWidget methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 3/25/2013 11:29'! dragPassengerFor: item inMorph: dragSource ^ self dragTransformationBlock cull: item cull: dragSource! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:29'! dragTransformationBlock ^ dragTransformationBlock contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:30'! dragTransformationBlock: aBlock dragTransformationBlock contents: aBlock! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:14'! dropEnabled ^ dropEnabled contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:09'! dropEnabled: aBoolean dropEnabled contents: aBoolean! ! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/25/2013 13:00' prior: 17172052! initialize "Initialization code for AbstractBasicWidget" super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:31'! wantDropBlock ^ wantDropBlock contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:31'! wantDropBlock: aBlock wantDropBlock contents: aBlock! ! !AbstractBasicWidget methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 3/25/2013 11:30'! wantsDroppedMorph: draggedMorph event: anEvent inMorph: source ^ self wantDropBlock cull: draggedMorph cull: anEvent cull:source! ! !IssueCreator methodsFor: 'initialization' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24013632! initializeWidgets self instantiateModels: #( title TextInputFieldModel description TextModel type DropListModel ). title ghostText: 'Title'; autoAccept: true; keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination; entryCompletion: nil; isCodeCompletionAllowed: false. type items: self createTypes; keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination. description isCodeCompletionAllowed: false; text: 'ENTER DESCRIPTION HERE'; readSelectionBlock: [ (0 to: 22) ]; acceptBlock: [ description readSelectionBlock: [ (1 to: 0) ]]! ! !Morph class methodsFor: 'settings' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 26850115! morphNavigationShortcutsOn: aBuilder "Basic, general navigation shortcut among morphs. #MorphNoCtrl will not work for TextMorphs." (aBuilder shortcut: #navigateFocusForwardCtrl) category: #MorphFocusCtrlNavigation default: Character tab ctrl asKeyCombination do: [ :target :morph :event | morph navigateFocusForward ]. (aBuilder shortcut: #navigateFocusBackwardCtrl) category: #MorphFocusCtrlNavigation default: Character tab shift ctrl asKeyCombination do: [ :target :morph :event | morph navigateFocusBackward ]. (aBuilder shortcut: #navigateFocusForward) category: #MorphFocusNavigation default: Character tab asKeyCombination do: [ :target :morph :event | morph navigateFocusForward ]. (aBuilder shortcut: #navigateFocusBackward) category: #MorphFocusNavigation default: Character tab shift asKeyCombination do: [ :target :morph :event | morph navigateFocusBackward ]! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 3/15/2013 16:17' prior: 26677274! keyStroke: anEvent "Handle a keystroke event. The default response is to let my eventHandler, if any, handle it." ^false! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 26585998! on: aShortcut do: anAction self kmDispatcher on: aShortcut asKeyCombination do: anAction! ! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:57' prior: 33387248! defaultSpec ^ SpecLayout slider send: #model: withArguments: #( model ); send: #getValueSelector: withArguments: #(value); send: #setValueSelector: withArguments: #( value: ); send: #value: withArguments: #(#(model absoluteValue)); send: #getLabelSelector: withArguments: #( label ); send: #max: withArguments: #(#(model max)); send: #min: withArguments: #(#(model min)); send: #quantum: withArguments: #(#(model quantum)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send: #setBalloonText: withArguments: #(#(model help)); send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !KMRepository methodsFor: 'accessing' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24172972! initializeKeymap: shortcutName executingOn: shortcut doing: action inCategory: categoryName platform: aPlatform description: aDescription | category entry | category := self ensureCategoryByName: categoryName. (category hasKeymapNamed: shortcutName at: aPlatform) not ifTrue: [ entry := shortcut asKeyCombination named: shortcutName do: action withDescription: aDescription. category addKeymapEntry: entry at: aPlatform. ] ifFalse:[ entry := category keymapNamed: shortcutName at: aPlatform. entry shortcutHasChangedBy: shortcut asKeyCombination. entry action: action. entry description: aDescription ]! ! !MultiColumnListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:56' prior: 27281386! defaultSpec ^ {#MultiColumnListSpec. #wrapSelector:. #wrapItem:index:. #model:. #model. #getListSizeSelector:. #listSize. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getListElementSelector:. #listElementAt:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setMultipleSelection:. {#model. #multiSelection}. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !KMCatcherMorph methodsFor: 'api' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24107691! shortcut | theKeystrokes | theKeystrokes := self keystrokes. theKeystrokes ifEmpty: [ ^ KMNoShortcut new ]. ^ theKeystrokes allButFirst inject: theKeystrokes first asKeyCombination into: [ :acum :each | acum , each asKeyCombination ]! ! !CheckBoxModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:54' prior: 18994651! defaultSpec ^ {#CheckboxSpec. #on:selected:changeSelected:. #model. #state. #state:. #label:. { #model. #label }. #beCheckbox. #hResizing:. #shrinkWrap. #vResizing:. #shrinkWrap. #setBalloonText:. { #model . #help}. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #labelClickable:. { #model. #labelClickable}.}! ! !CheckBoxModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18989224! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !CheckBoxModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18989443! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 13:32' prior: 53522499! defaultSpec ^ {#TreeSpec. #model:. #model. #getLabelSelector:. #wrapItem:. #getRootsSelector:. #getRoots. #getChildrenSelector:. #getChildrenFor:. #setSelectedSelector:. #setSelectedItem:. #color:. Color white. #getMenuSelector:. #getMenu:. #hResizing:. #spaceFill. #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #borderColor:. #(model borderColor). #borderWidth:. #(model borderWidth). #vResizing:. #spaceFill.}! ! !TreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 3/25/2013 13:32'! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w itemFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 53516527! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !TreeModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 53516742! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !PluggableButtonMorph class methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 29394420! buildPluggableButtonShortcutsOn: aBuilder (aBuilder shortcut: #action1) category: #PluggableButtonMorph default: Character space asKeyCombination | Character cr asKeyCombination do: [ :target :morph :event | morph performAction ].! ! !KMCategoryTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24117972! testAddKeymapToCategory | categoryToAdd entry | categoryToAdd := KMCategory named: #TestCategory. entry := KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [ "nothing" ]. self assert: (categoryToAdd allEntries) size = 0. categoryToAdd addKeymapEntry: entry. self assert: (categoryToAdd allEntries) size = 1.! ! !ButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:54' prior: 18559269! defaultSpec ^ {#ButtonSpec. #on:getState:action:label:menu:. #model. #state. #action. #label. #nil. #getEnabledSelector:. #enabled. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #askBeforeChanging:. #(model askBeforeChanging). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !ButtonModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18555032! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !ButtonModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18555249! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !ButtonModel methodsFor: 'initialization' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18555481! initialize "Initialization code for ButtonComposableModel" super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self widget ifNotNil: [:widget | widget askBeforeChanging: newValue ]]. self on: Character space asKeyCombination do: [ self action ].! ! !NECPreferences class methodsFor: 'accessing' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 27846353! availablePopupShortcuts ^ { Character space shift. Character tab asKeyCombination}! ! !ChangesBrowser class methodsFor: 'shortcuts' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 18912307! buildShortcutsOn: aBuilder (aBuilder shortcut: #close) category: #ChangesBrowserGlobalShortcuts default: Character escape asKeyCombination do: [ :target | target cancel ] description: 'Close this dialog'. (aBuilder shortcut: #accept) category: #ChangesBrowserGlobalShortcuts default: $s command do: [ :target | target accept ] description: 'Accept the proposed changes'.! ! !TextModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:57' prior: 52755412! defaultSpec ^ SpecLayout text send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #on:text:accept:readSelection:menu: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted:); send: #enabled: withArguments: {#(model enabled)}; send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !TextModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 52743587! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight command ctrl asKeyCombination! ! !TextModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 52743815! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft command ctrl asKeyCombination! ! !TextEditor class methodsFor: 'shortcuts' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 52680586! buildTextEditorTabKeymapOn: aBuilder "This is to mask the tab or shift tab character at the system window level." (aBuilder shortcut: #doTab) category: #TextEditorTab default: Character tab asKeyCombination do: [ :target | target handleEdit: [ target handleEdit: [ target replaceSelectionWith: ' '. target selectInvisiblyFrom: target selectionInterval last + 1 to: target selectionInterval last ] ] ]! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 9/12/2011 17:14' prior: 24210823! altKeyPressed ^self commandKeyPressed! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^ KMKeyCombination fromKeyboardEvent: self! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'DeboraFortini 11/1/2011 16:37' prior: 24211093! modifiedCharacter self flag: #hack. "Hack me. When Ctrl is pressed, the key ascii value is not right and we have to do something ugly" ^(self controlKeyPressed and: [ (#(MacOSX Windows) includes: Smalltalk os current platformFamily) and: [ keyValue <= 26 ]]) ifTrue: [ (self keyValue + $a asciiValue - 1) asCharacter ] ifFalse: [ self keyCharacter ]! ! !SaveCommandLineHandler commentStamp: '' prior: 33974197! Usage: save [--delete-old] a base name for the image --delete-old remove the old image and changes file Documentation: Saves the image and changes file under a new name. Examples: # create a 'bar.image' and 'foo.changes' $PHAROVM Foo.image save bar # create the same file as in the previous example but delete Foo.image and Foo.changes $PHAROVM Foo.image save bar --delete-old! !TextInputFieldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:57' prior: 52720997! defaultSpec ^ {#TextField. #convertTo:. String. #on:text:accept:readSelection:menu:. #model. #getText. #accept:. nil. nil. #entryCompletion:. { #model. #entryCompletion }. #autoAccept:. { #model. #autoAccept }. #ghostText:. { #model. #ghostText }. #enabled:. { #model. #enabled }. #encrypted:. { #model. #encrypted }. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #acceptOnCR:. { #model. #acceptOnCR }. #hideScrollBarsIndefinitely.}! ! !HandMorph methodsFor: '*SUnit-UITesting' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 23218298! simulateKeyStroke: aCharacterOrShortcut | shortcut | shortcut := aCharacterOrShortcut asKeyCombination. self handleEvent: (KeyboardEvent new setType: #keystroke buttons: shortcut modifier eventCode position: self position keyValue: shortcut key asciiValue charCode: shortcut key asciiValue hand: self activeHand stamp: DateAndTime now).! ! !KeymapBuilderTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24237400! testAddKeymapCreatesCategory self assert: KMRepository default categories isEmpty. KMRepository default initializeKeymap: #test executingOn: $r ctrl, $r asKeyCombination, $r asKeyCombination doing: [ :receiver | "nothing" ] inCategory: #Testing platform: #all. self assert: (KMRepository default includesCategoryNamed: #Testing). self assert: KMRepository default categories size = 1.! ! !KeymapBuilderTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24237889! testAddKeymapCreatesShortcut KMRepository default initializeKeymap: #test executingOn: $r ctrl, $r asKeyCombination, $r asKeyCombination doing: [ :receiver | "nothing" ] inCategory: #Testing platform: #all. self assert: (KMRepository default categoryForName: #Testing ) allEntries size = 1.! ! !KeymapBuilderTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24238280! testAttachKeymapAndExecuteExecutes | executed morphToTest | executed := false. KMFactory keymapContainer initializeKeymap: #test executingOn: $a asKeyCombination, $a asKeyCombination, $a asKeyCombination doing: [ :receiver | executed := true ] inCategory: #Testing platform: #all. " KMFactory keymapContainer attachCategoryName: #Testing to: KMMockMorph." morphToTest := KMMockMorph new. morphToTest attachKeymapCategory: #Testing. {self eventKey: $a. self eventKey: $a. self eventKey: $a} do: [:e | morphToTest dispatchKeystrokeForEvent: e]. self assert: executed.! ! !KeymapBuilderTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24238955! testAttachKeymapAttaches KMFactory keymapContainer initializeKeymap: #test executingOn: $r ctrl, $r asKeyCombination, $r asKeyCombination doing: [ :receiver | "nothing" ] inCategory: #Testing platform: #all.. KMFactory keymapContainer attachCategoryName: #Testing to: KMMockMorph. self assert: ((KMFactory keymapContainer categoriesForClass: KMMockMorph ) anySatisfy: [ :c | c name = #Testing ]).! ! !Collection methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination | shortcut | self size = 1 ifTrue: [ ^self first asKeyCombination ]. shortcut := KMKeyCombinationSequence new. self do: [ :each | shortcut addShortcut: each asKeyCombination ]. ^shortcut.! ! !KMKeymap methodsFor: 'matching' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24149286! matchesCompletely: aShortcut ^ self shortcut = aShortcut asKeyCombination! ! !KMShortcutTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 20:28' prior: 24185008! testCreation self assert: ($e asKeyCombination isKindOf: KMSingleKeyCombination). self assert: ($e ctrl isKindOf: KMModifiedKeyCombination). self assert: ($e ctrl alt shift command isKindOf: KMModifiedKeyCombination).! ! !KMShortcutTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24187015! testSingleShortcutsMatch |a one home | a := self eventKey: $a. one := self eventKey: 1 asCharacter. home := self eventKey: Character home. self assert: ($a asKeyCombination matches: {a}). self assert: (1 asKeyCombination matches: {one}). self assert: (Character home asKeyCombination matches: {home}). self deny: ($b asKeyCombination matches: {a}). self assert: ($a asKeyCombination matchesCompletely: {a}). self assert: (1 asKeyCombination matchesCompletely: {one}).! ! !IconListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:55' prior: 23479971! defaultSpec ^ {#IconListSpec. #model:. #model. #getListSizeSelector:. #listSize. #getListElementSelector:. #listElementAt:. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getIconSelector:. #getIconFor:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #setMultipleSelection:. {#model. #multiSelection}. #wrapSelector:. #wrapItem:index:. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}. #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 23:14' prior: 23736093! alt ^ KMModifier alt + self! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 20:28'! asKeyCombination ^ KMSingleKeyCombination from: self asCharacter! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 5/31/2011 18:26' prior: 23736213! command ^ KMModifier command + self! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 20:26'! control ^ KMModifier ctrl + self! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 23:14' prior: 23736338! ctrl ^ KMModifier ctrl + self! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 23:14' prior: 23736457! shift ^ KMModifier shift + self! ! !TabSelectorMorph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 3/15/2013 16:31' prior: 52224385! initializeShortcuts: aKMDispatcher super initializeShortcuts: aKMDispatcher. aKMDispatcher attachCategory: #MorphFocusNavigation. aKMDispatcher attachCategory: #TabMorphsNavigation.! ! !KMKeymapTest methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24153979! assertExecutionOnClass: aClassToExecuteOn attachingTo: aClassToAttach | bm km flag category | category := (KMCategory named: #TestFoo). KMRepository default addCategory: category. bm := aClassToExecuteOn new. bm attachKeymapCategory: #TestFoo. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag := true]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination, $p asKeyCombination action: []). {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm dispatchKeystrokeForEvent: e]. self assert: flag.! ! !KMKeymapTest methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24155138! testMatching | category blockAction a b c p| a := self eventKey: $a. b := self eventKey: $b. c := self eventKey: $c. p := self eventKey: $p. blockAction := [self error: 'error']. category := KMCategory named: #testCategory. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: blockAction). category addKeymapEntry: (KMKeymap named: #Fum shortcut: $p asKeyCombination, $p asKeyCombination action: blockAction). self assert: (category matches: {a}). self deny: (category matches: {b}). self assert: (category matches: {a. b}). self assert: (category matchesCompletely: {a. b. c}). self assert: (category matches: {p}). self assert: (category matchesCompletely: {p. p.}). self deny: (category matches: {a. p. p}). self deny: (category matches: {self eventKey: $l. self eventKey: $m. self eventKey: $n. self eventKey: $o}).! ! !PluggableTreeMorph methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 3/25/2013 13:16' prior: 29613972! acceptDroppingMorph: aMorph event: evt | item dropTarget | dropItemSelector ifNil:[ model acceptDroppingMorph: aMorph event: evt inMorph: self ] ifNotNil: [ item := aMorph passenger. dropTarget := (self itemFromPoint: evt position) withoutListWrapper. model perform: dropItemSelector with: item with: dropTarget ]. evt hand releaseMouseFocus: self. Cursor normal show. ! ! !PluggableTreeMorph methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 3/25/2013 13:18' prior: 29614369! startDrag: anEvent | aTransferMorph itemMorph passenger | self dragEnabled ifTrue: [itemMorph := scroller submorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [anEvent hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. itemMorph ~= self selectedMorph ifTrue: [self setSelectedMorph: itemMorph]. passenger := dragItemSelector ifNil: [ self model dragPassengerFor: itemMorph withoutListWrapper inMorph: self ] ifNotNil: [ self model perform: dragItemSelector withEnoughArguments: { itemMorph withoutListWrapper. self } ]. passenger ifNotNil: [aTransferMorph := TransferMorph withPassenger: passenger from: self. aTransferMorph dragTransferType: #dragTransfer. aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. anEvent hand grabMorph: aTransferMorph]. anEvent hand releaseMouseFocus: self! ! !PluggableTreeMorph methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 3/25/2013 13:33' prior: 29615239! wantsDroppedMorph: aMorph event: anEvent aMorph dragTransferType == #dragTransfer ifFalse: [ ^ false ]. ^ wantsDropSelector ifNil: [ model wantsDroppedMorph: aMorph event: anEvent inMorph: self ] ifNotNil: [ model perform: wantsDropSelector with: aMorph passenger ]! ! !PluggableTreeMorph methodsFor: 'node access' stamp: 'BenjaminVanRyseghem 3/25/2013 13:33' prior: 29616925! wantsDroppedNode: srcNode on: dstNode dropItemSelector ifNil:[^false]. wantsDropSelector ifNil:[^true]. ^(model perform: wantsDropSelector with: srcNode with: dstNode) == true! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 23:13' prior: 18919697! alt ^ KMModifier alt + self! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 20:28'! asKeyCombination ^ KMSingleKeyCombination from: self! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 5/31/2011 18:25' prior: 18919954! command ^ KMModifier command + self! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 3/19/2013 20:26'! control ^ KMModifier control + self! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 22:57' prior: 18920081! ctrl ^ KMModifier ctrl + self! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 3/18/2011 22:57' prior: 18920202! shift ^ KMModifier shift + self! ! !RadioButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:56' prior: 32108313! defaultSpec ^ {#CheckboxSpec. #on:selected:changeSelected:. #model. #state. #state:. #label:. { #model. #label }. #labelClickable:. { #model. #labelClickable}. #beRadioButton. #hResizing:. #shrinkWrap. #vResizing:. #shrinkWrap. #setBalloonText:. #(model help). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor)}! ! !RadioButtonModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 32102628! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !RadioButtonModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 32102850! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !Authentifier methodsFor: 'initialization' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 17776566! initializeDialogWindow: aWindow aWindow okAction: [ | user password | user := userField getText. password := passwordField getText. (user isEmpty or: [ password isEmpty ]) ifFalse: [ result contents: (user -> password) ]]. aWindow toolbar okButton keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination. aWindow toolbar cancelButton keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination. self focusOrder add: userField; add: passwordField; add: aWindow toolbar.! ! !Authentifier methodsFor: 'initialization' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 17777281! initializeWidgets self instantiateModels: #( userLabel LabelModel userField TextInputFieldModel gmail LabelModel passwordLabel LabelModel passwordField TextInputFieldModel ). userLabel text: 'Username:'. userField entryCompletion: nil; autoAccept: true; keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination; ghostText: 'username'. gmail text: '@gmail.com'. passwordLabel text: 'Password:'. passwordField autoAccept: true; acceptOnCR: true; ghostText: 'password'; entryCompletion: nil; keyStrokeForNextFocus: Character tab asKeyCombination; keyStrokeForPreviousFocus: Character tab shift asKeyCombination; beEncrypted.! ! !SimpleHierarchicalListMorph class methodsFor: 'shortcuts' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 33311870! buildSimpleHierarchicalListShortcuts: aBuilder (aBuilder shortcut: #cursorUp) category: #SimpleHierarchicalList default: Character arrowUp asKeyCombination do: [ :target | target setSelectionIndex: (target getSelectionIndex - 1 max: 1) ]. (aBuilder shortcut: #cursorDown) category: #SimpleHierarchicalList default: Character arrowDown asKeyCombination do: [ :target | target setSelectionIndex: target getSelectionIndex + 1 ]. (aBuilder shortcut: #cursorHome) category: #SimpleHierarchicalList default: Character home asKeyCombination do: [ :target | target setSelectionIndex: 1 ]. (aBuilder shortcut: #cursorEnd) category: #SimpleHierarchicalList default: Character end asKeyCombination do: [ :target | target setSelectionIndex: target scroller submorphs size ]. (aBuilder shortcut: #cursorPageUp) category: #SimpleHierarchicalList default: Character pageUp asKeyCombination do: [ :target | target setSelectionIndex: (target getSelectionIndex - target numSelectionsInView max: 1) ]. (aBuilder shortcut: #cursorPageDown) category: #SimpleHierarchicalList default: Character pageDown asKeyCombination do: [ :target | target setSelectionIndex: target getSelectionIndex + target numSelectionsInView ]. (aBuilder shortcut: #cursorRight) category: #SimpleHierarchicalList default: Character arrowRight asKeyCombination do: [ :target | target selectedMorph ifNotNil: [ target selectedMorph canExpand ifTrue: [ target selectedMorph isExpanded not ifTrue: [ target toggleExpandedState: target selectedMorph ] ifFalse: [ target setSelectionIndex: target getSelectionIndex + 1 ] ] ] ]. (aBuilder shortcut: #cursorLeft) category: #SimpleHierarchicalList default: Character arrowLeft asKeyCombination do: [ :target | | selectedMorph | (selectedMorph := target selectedMorph) ifNotNil: [ selectedMorph isExpanded ifTrue: [ target toggleExpandedState: selectedMorph ] ifFalse: [ | i | "Search parent." selectedMorph indentLevel > 0 ifTrue: [ i := target getSelectionIndex max: 1. [ i > 1 and: [ (target scroller submorphs at: i) indentLevel >= selectedMorph indentLevel ] ] whileTrue: [ i := i - 1 max: 1 ]. target setSelectionIndex: i ] ] ] ]! ! !DropListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:54' prior: 20981080! defaultSpec ^ {#DropListSpec. #on:list:selected:changeSelected:. #model. #getList. #getIndex. #setIndex:. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !DropListModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 20976064! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !DropListModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 20976283! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !ListComposableModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:55' prior: 24516421! defaultSpec ^ {#ListSpec. #model:. #model. #getListSizeSelector:. #listSize. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getListElementSelector:. #listElementAt:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #setMultipleSelection:. {#model. #multiSelection}. #wrapSelector:. #wrapItem:index:. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !ListComposableModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 3/25/2013 13:09'! acceptDroppingMorph: draggedMorph event: event inMorph: source | item index | index := self widget ifNil: [ 0 ] ifNotNil: [:w | w rowAtLocation: event position ]. item := listHolder contents at: index ifAbsent: [ nil ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item. index }! ! !ListComposableModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24499398! eventKeyStrokeForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ Character arrowRight asKeyCombination! ! !ListComposableModel methodsFor: 'focus' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24499624! eventKeyStrokeForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ Character arrowLeft asKeyCombination! ! !ListComposableModel methodsFor: 'initialize' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 24500112! initialize super initialize. selectionHolder := SelectionValueHolder new. listHolder := Array new asValueHolder. sortingBlockHolder := self defaultSortingBlock asValueHolder. filteringBlockHolder := self defaultFilteringBlock asValueHolder. wrapBlockHolder := [ :object | object asStringOrText ] asValueHolder. menuHolder := [ :menu :shifted | nil ] asValueHolder. multiSelectionHolder := IdentityDictionary new asValueHolder. multiSelection := false asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. self registerEvents. self on: Character space asKeyCombination do: [ self clickOnSelectedItem ]! ! !KMKeyCombination class methodsFor: 'instance creation' stamp: 'GuillermoPolito 3/19/2013 20:28'! fromKeyboardEvent: evt | modifier control command shift hasModifier keyString | control := evt controlKeyPressed. command := evt commandKeyPressed. shift := evt shiftPressed. (shift | command | control) ifFalse: [^ KMSingleKeyCombination from: evt keyCharacter ]. modifier := KMNoShortcut new. control ifTrue: [ modifier := modifier + KMModifier ctrl ]. command ifTrue: [ modifier := modifier + KMModifier command ]. shift ifTrue: [ modifier := modifier + KMModifier shift ]. ^ modifier + evt modifiedCharacter! ! !KMKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 19:12'! , aShortcut ^ KMKeyCombinationSequence first: self next: aShortcut asKeyCombination! ! !KMKeyCombination methodsFor: 'comparing' stamp: 'CamilloBruni 3/18/2011 23:11'! = aShortcut ^ aShortcut isKindOf: self species! ! !KMKeyCombination methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^self! ! !KMKeyCombination methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 20:44'! asShortcut ^self! ! !KMKeyCombination methodsFor: 'iterating' stamp: 'GuillermoPolito 9/24/2012 11:40'! combinationsDo: aBlock aBlock value: self! ! !KMKeyCombination methodsFor: 'comparing' stamp: 'CamilloBruni 3/18/2011 23:11'! hash ^ self species hash! ! !KMKeyCombination methodsFor: 'matching' stamp: 'GuillermoPolito 9/24/2012 11:04'! includes: aShortcut ^self = aShortcut! ! !KMKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:07'! mac ^KMPlatformSpecificKeyCombination with: self onPlatform: #MacOSX! ! !KMKeyCombination methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 16:42'! matches: anEventBuffer ^ self matchesCompletely: anEventBuffer first! ! !KMKeyCombination methodsFor: 'matching' stamp: 'GuillermoPolito 3/19/2013 19:12'! matchesCompletely: aKeyboardEvent ^self = aKeyboardEvent asKeyCombination! ! !KMKeyCombination methodsFor: 'keymap building' stamp: 'GuillermoPolito 4/6/2012 13:26'! named: keymapName do: anActionBlock ^ KMKeymap named: keymapName shortcut: self action: anActionBlock! ! !KMKeyCombination methodsFor: 'keymap building' stamp: 'GuillermoPolito 4/6/2012 13:49'! named: keymapName do: anActionBlock withDescription: aDescription ^ KMKeymap named: keymapName shortcut: self action: anActionBlock description: aDescription! ! !KMKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:10'! platform ^#all! ! !KMKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 10:59'! shortcut ^self! ! !KMKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:07'! unix ^KMPlatformSpecificKeyCombination with: self onPlatform: #Unix! ! !KMKeyCombination methodsFor: 'keymap building' stamp: 'CamilloBruni 3/18/2011 23:11'! value: aBuilder ^ self! ! !KMKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:07'! win ^KMPlatformSpecificKeyCombination with: self onPlatform: #Windows! ! !KMKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:06'! | aShortcut ^KMKeyCombinationChoice withShortcuts: { self . aShortcut }! ! !KMKeyCombinationSequence class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:11'! first: aShortcut next: anotherShortcut ^ (self new) first: aShortcut; next: anotherShortcut; yourself! ! !KMKeyCombinationSequence methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 19:46'! + aCharacter | last | last := self sequence last. self sequence removeLast. self addShortcut: last + aCharacter.! ! !KMKeyCombinationSequence methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 19:12'! , aShortcut self addShortcut: aShortcut asKeyCombination.! ! !KMKeyCombinationSequence methodsFor: 'comparing' stamp: 'GuillermoPolito 3/19/2013 19:46'! = aShortcut ^ super = aShortcut and: [ shortcuts = aShortcut sequence ]! ! !KMKeyCombinationSequence methodsFor: 'accessing' stamp: 'GuillermoPolito 3/19/2013 19:46'! addShortcut: aShortcut self sequence add: aShortcut! ! !KMKeyCombinationSequence methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^self! ! !KMKeyCombinationSequence methodsFor: 'matching' stamp: 'GuillermoPolito 3/19/2013 19:46'! beginsWith: aShortcut ^ self sequence first = aShortcut ! ! !KMKeyCombinationSequence methodsFor: 'accessing' stamp: 'GuillermoPolito 12/24/2010 22:39'! first: aShortcut self addShortcut: aShortcut! ! !KMKeyCombinationSequence methodsFor: 'comparing' stamp: 'CamilloBruni 3/18/2011 23:11'! hash ^ shortcuts hash! ! !KMKeyCombinationSequence methodsFor: 'matching' stamp: 'GuillermoPolito 3/19/2013 19:12'! matches: anEventBuffer |maxIndex| maxIndex := anEventBuffer size min: shortcuts size. 1 to: maxIndex do: [:index| ((shortcuts at: index) = (anEventBuffer at: index) asKeyCombination) ifFalse: [ ^ false]]. ^ true.! ! !KMKeyCombinationSequence methodsFor: 'accessing' stamp: 'GuillermoPolito 3/15/2011 00:42'! next: aShortcut self addShortcut: aShortcut! ! !KMKeyCombinationSequence methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:44'! printOn: aStream shortcuts do: [ :shortcut| shortcut printOn: aStream] separatedBy: [ aStream nextPutAll: ' , '].! ! !KMKeyCombinationSequence methodsFor: 'accessing' stamp: 'GuillermoPolito 3/19/2013 19:46'! sequence ^ shortcuts ifNil: [ shortcuts := OrderedCollection new ]! ! !KMModifiedKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:11'! modifier: aModifier character: aCharacter ^ (self new) modifier: aModifier; character: aCharacter; yourself! ! !KMModifiedKeyCombination methodsFor: 'comparing' stamp: 'GuillermoPolito 10/20/2011 16:30'! = aShortcut super = aShortcut ifFalse: [ ^ false ]. aShortcut modifier = modifier ifFalse: [ ^ false ]. aShortcut character = character ifFalse: [ ^ false ]. ^ true! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'CamilloBruni 3/19/2011 21:19'! alt ^ self modifiedBy: KMModifier alt! ! !KMModifiedKeyCombination methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^ self! ! !KMModifiedKeyCombination methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 7/3/2012 15:59'! beginsWith: aKMShortcut ^ self = aKMShortcut ! ! !KMModifiedKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 3/18/2011 23:11'! character ^ character! ! !KMModifiedKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 12/25/2010 14:22'! character: aCharacter character := aCharacter.! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 5/31/2011 18:26'! command ^ self modifiedBy: KMModifier command! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 20:12'! control ^ self modifiedBy: KMModifier ctrl! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 20:12'! ctrl ^ self control! ! !KMModifiedKeyCombination methodsFor: 'comparing' stamp: 'CamilloBruni 3/18/2011 23:11'! hash ^ character hash + modifier hash! ! !KMModifiedKeyCombination methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 18:39'! key ^ self character key.! ! !KMModifiedKeyCombination methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 15:51'! matchesEvent: aKeyboardEvent ^ (self modifier matchesEvent: aKeyboardEvent) and: [self character matchesEvent: aKeyboardEvent]! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 4/9/2011 23:57'! modifiedBy: aModifier modifier := modifier + aModifier.! ! !KMModifiedKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 3/18/2011 23:11'! modifier ^ modifier! ! !KMModifiedKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 12/24/2010 22:31'! modifier: aModifier modifier := aModifier! ! !KMModifiedKeyCombination methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:45'! printOn: aStream modifier printOn: aStream. aStream << ' + '. character printOn: aStream.! ! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'CamilloBruni 3/18/2011 23:11'! shift ^ self modifiedBy: KMModifier shift! ! !KMAltModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 33627268! initialize super initialize. identifier := #a. name := 'Alt'.! ! !KMAltModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 33627429! matchesEvent: aKeyboardEvent ^ aKeyboardEvent altKeyPressed! ! !KMCommandModifier methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 18:53' prior: 33621576! eventCode ^ 64.! ! !KMCommandModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 5/31/2011 19:54' prior: 33621703! initialize super initialize. identifier := #m. name := 'Cmd'.! ! !KMCommandModifier methodsFor: 'matching' stamp: 'EstebanLorenzano 3/6/2013 16:41' prior: 33621871! matchesEvent: aKeyboardEvent self flag: #todo. "Command in windows and linux platforms is 'meta' key and do not have any sense (for the environment, right now). In the future we need to create a KMMetaModifier to handle properly this, and keep command as a mac-specific key" (OSPlatform isUnix or: [ OSPlatform isWin32 ]) ifTrue: [ ^ aKeyboardEvent controlKeyPressed ]. ^ aKeyboardEvent commandKeyPressed! ! !KMComposedModifier methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 33620402! + modified ^ modified asKeyCombination modifiedBy: self! ! !KMComposedModifier methodsFor: 'comparing' stamp: 'CamilloBruni 3/19/2011 21:22' prior: 24128021! = aShortcut (aShortcut isKindOf: self class) ifFalse: [^ false]. ^ aShortcut modifiers = modifiers! ! !KMComposedModifier methodsFor: 'combining' stamp: 'CamilloBruni 3/19/2011 21:20' prior: 24128211! alt modifiers add: KMModifier alt! ! !KMComposedModifier methodsFor: 'combining' stamp: 'GuillermoPolito 5/31/2011 18:26' prior: 33620558! command modifiers add: KMModifier command! ! !KMComposedModifier methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 20:16'! control modifiers add: KMModifier ctrl! ! !KMComposedModifier methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 20:16' prior: 24128333! ctrl self control! ! !KMComposedModifier methodsFor: 'comparing' stamp: 'GuillermoPolito 5/1/2012 12:26' prior: 24128459! hash ^ modifiers hash! ! !KMComposedModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/19/2011 21:17' prior: 33620708! initialize super initialize. modifiers := Set new.! ! !KMComposedModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 21:18' prior: 33620862! matchesEvent: aKeyboardEvent ^ modifiers allSatisfy: [:modifier| modifier matchesEvent: aKeyboardEvent]! ! !KMComposedModifier methodsFor: 'combining' stamp: 'CamilloBruni 3/20/2011 23:57' prior: 33621070! modifiedBy: modifier modifiers add: modifier. self updateIdentifier.! ! !KMComposedModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/19/2011 21:23' prior: 24128569! modifiers ^ modifiers! ! !KMComposedModifier methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:47' prior: 24127004! printOn: aStream modifiers do: [ :modifier| modifier printOn: aStream ] separatedBy: [ aStream << ' + ' ].! ! !KMComposedModifier methodsFor: 'combining' stamp: 'CamilloBruni 3/19/2011 21:21' prior: 24128679! shift modifiers add: KMModifier shift! ! !KMComposedModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/20/2011 23:59' prior: 24128805! updateIdentifier identifier := String streamContents: [ :aStream| modifiers do: [ :modifier| aStream << modifier identifier]]. identifier := identifier asSymbol! ! !KMCtrlModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 4/9/2011 23:52' prior: 33621246! initialize super initialize. identifier := #c. name := 'Ctrl'.! ! !KMCtrlModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 33621409! matchesEvent: aKeyboardEvent ^ aKeyboardEvent controlKeyPressed! ! !KMModifier class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:11' prior: 24161990! alt ^ KMAltModifier new! ! !KMModifier class methodsFor: 'instance creation' stamp: 'GuillermoPolito 5/31/2011 18:25' prior: 24162102! command ^ KMCommandModifier new! ! !KMModifier class methodsFor: 'instance creation' stamp: 'GuillermoPolito 3/19/2013 20:19'! control ^ KMCtrlModifier new! ! !KMModifier class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:11' prior: 24162219! ctrl ^ KMCtrlModifier new! ! !KMModifier class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:11' prior: 24162330! shift ^ KMShiftModifier new! ! !KMModifier methodsFor: 'combining' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 33626400! + modifier ^ modifier asKeyCombination modifiedBy: self! ! !KMModifier methodsFor: 'comparing' stamp: 'CamilloBruni 3/20/2011 23:58' prior: 24161556! = aShortcut super = aShortcut ifFalse: [ ^ false ]. aShortcut identifier = identifier ifFalse: [ ^ false ]. ^ true! ! !KMModifier methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 19:00' prior: 24160296! eventCode "No modifiers" ^ 0.! ! !KMModifier methodsFor: 'comparing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 24161759! hash ^ identifier hash bitXor: name hash! ! !KMModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 33626545! identifier ^ identifier! ! !KMModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:49' prior: 33626664! matches: aKeyboardEvent self shouldNotImplement! ! !KMModifier methodsFor: 'matching' stamp: 'CamilloBruni 3/19/2011 20:50' prior: 33626806! matchesEvent: aKeyboardEvent self subclassResponsibility! ! !KMModifier methodsFor: 'combining' stamp: 'CamilloBruni 3/19/2011 21:16' prior: 33626957! modifiedBy: modifier ^ KMComposedModifier new modifiedBy: modifier; modifiedBy: self; yourself! ! !KMModifier methodsFor: 'accessing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 33627153! name ^ name! ! !KMModifier methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:54' prior: 24160511! printOn: aStream aStream << name! ! !KMShiftModifier methodsFor: 'initialization' stamp: 'CamilloBruni 3/20/2011 23:55' prior: 33627594! initialize super initialize. identifier := #s. name := 'Shift'.! ! !KMShiftModifier methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 15:50' prior: 33627763! matchesEvent: aKeyboardEvent ^ aKeyboardEvent shiftPressed! ! !KMNoShortcut commentStamp: 'CamilloBruni 3/21/2011 00:05' prior: 33974696! I do not respond to any keyboard event. Mostly used in the settings to deactivate a certain command.! !KMNoShortcut methodsFor: 'combining' stamp: 'CamilloBruni 3/18/2011 23:11' prior: 24163222! + aKMModifier ^ aKMModifier! ! !KMNoShortcut methodsFor: 'combining' stamp: 'CamilloBruni 3/18/2011 23:11' prior: 24163331! , aShortcut ^ aShortcut! ! !KMNoShortcut methodsFor: 'matching' stamp: 'CamilloBruni 3/20/2011 23:50' prior: 24163437! matches: anEventBuffer ^ false! ! !KMNoShortcut methodsFor: 'matching' stamp: 'CamilloBruni 3/20/2011 23:50' prior: 24163549! matchesCompletely: anEventBuffer ^ false! ! !KMNoShortcut methodsFor: 'printing' stamp: 'CamilloBruni 3/20/2011 23:41' prior: 24163124! printOn: aStream! ! !KMSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/18/2011 23:25'! from: aString ^ (self new) key: aString asCharacter; yourself! ! !KMSingleKeyCombination class methodsFor: 'accessing' stamp: 'GuillermoPolito 10/21/2011 09:33'! specialKeys ^specialKeys ifNil: [ specialKeys := {1->'home'. 3->'enter'. 4->'end'. 8->'backspace'. 9-> 'tab'. 11->'page up'. 12->'page down'. 27->'escape'. 28->'left arrow'. 29->'right arrow'. 30->'up arrow'. 31->'down arrow'. 127->'delete' } asDictionary.]! ! !KMSingleKeyCombination methodsFor: 'comparing' stamp: 'GuillermoPolito 10/20/2011 16:30'! = aShortcut ^ super = aShortcut and: [ aShortcut key sameAs: key ]! ! !KMSingleKeyCombination methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^ self! ! !KMSingleKeyCombination methodsFor: 'comparing' stamp: 'CamilloBruni 3/18/2011 23:11'! hash ^ key hash! ! !KMSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 3/18/2011 23:11'! key ^ key! ! !KMSingleKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 12/25/2010 14:21'! key: aKeyString key := aKeyString.! ! !KMSingleKeyCombination methodsFor: 'matching' stamp: 'DeboraFortini 10/18/2011 19:40'! matchesEvent: aKeyboardEvent ^ self key asLowercase = aKeyboardEvent modifiedCharacter asLowercase! ! !KMSingleKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 02:52'! modifiedBy: aModifier ^ KMModifiedKeyCombination modifier: aModifier character: self! ! !KMSingleKeyCombination methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 18:59'! modifier ^ KMModifier new.! ! !KMSingleKeyCombination methodsFor: 'printing' stamp: 'GuillermoPolito 4/10/2011 02:37'! printOn: aStream aStream nextPutAll: (self printStringFor: key) asString asUppercase.! ! !KMSingleKeyCombination methodsFor: 'printing' stamp: 'GuillermoPolito 4/10/2011 02:17'! printStringFor: aCharacter | specialKeys | specialKeys := self specialKeys. ^specialKeys at: aCharacter asciiValue ifAbsent: [ aCharacter ].! ! !KMSingleKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 4/10/2011 02:18'! specialKeys ^self class specialKeys! ! !KMKeyCombinationChoice class methodsFor: 'instance creation' stamp: 'GuillermoPolito 9/24/2012 11:38'! withShortcuts: someShortcuts ^self new shortcuts: someShortcuts; yourself! ! !KMKeyCombinationChoice methodsFor: 'converting' stamp: 'GuillermoPolito 3/19/2013 19:12'! asKeyCombination ^self! ! !KMKeyCombinationChoice methodsFor: 'iterating' stamp: 'GuillermoPolito 9/24/2012 11:42'! collect: aBlock ^shortcuts collect: aBlock! ! !KMKeyCombinationChoice methodsFor: 'iterating' stamp: 'GuillermoPolito 9/24/2012 11:41'! combinationsDo: aBlock ^shortcuts do: aBlock! ! !KMKeyCombinationChoice methodsFor: 'matching' stamp: 'GuillermoPolito 9/24/2012 11:40'! includes: aShortcut ^shortcuts includes: aShortcut! ! !KMKeyCombinationChoice methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:37'! shortcuts: someShortcuts shortcuts := someShortcuts! ! !KMKeyCombinationChoice methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:06'! | aShortcut ^KMKeyCombinationChoice withShortcuts: (shortcuts copyWith: aShortcut)! ! !KMPlatformSpecificKeyCombination class methodsFor: 'instance creation' stamp: 'GuillermoPolito 9/24/2012 11:14'! with: aShortcut onPlatform: aPlatform ^self new shortcut: aShortcut; platform: aPlatform; yourself! ! !KMPlatformSpecificKeyCombination methodsFor: 'iterating' stamp: 'GuillermoPolito 9/24/2012 11:40'! combinationsDo: aBlock aBlock value: self! ! !KMPlatformSpecificKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:15'! platform ^platform! ! !KMPlatformSpecificKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:14'! platform: aPlatform platform := aPlatform! ! !KMPlatformSpecificKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:14'! shortcut ^shortcut! ! !KMPlatformSpecificKeyCombination methodsFor: 'accessing' stamp: 'GuillermoPolito 9/24/2012 11:13'! shortcut: aShortcut shortcut := aShortcut! ! !KMPlatformSpecificKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 3/15/2013 03:06'! | aShortcut ^KMKeyCombinationChoice withShortcuts: { self . aShortcut }! ! !LabelModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/25/2013 12:54' prior: 24253674! defaultSpec ^ {#LabelSpec. #model:. #model. #getEnabledSelector:. #enabled. #getTextSelector:. #getText. #vResizing:. #shrinkWrap. #hResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! Integer removeSelector: #asShortcut! Collection removeSelector: #asShortcut! KMSingleKeyShortcut removeSelector: #specialKeys! KMSingleKeyShortcut removeSelector: #printStringFor:! KMSingleKeyShortcut removeSelector: #printOn:! KMSingleKeyShortcut removeSelector: #modifier! KMSingleKeyShortcut removeSelector: #modifiedBy:! KMSingleKeyShortcut removeSelector: #matchesEvent:! KMSingleKeyShortcut removeSelector: #key:! KMSingleKeyShortcut removeSelector: #key! KMSingleKeyShortcut removeSelector: #hash! KMSingleKeyShortcut removeSelector: #asShortcut! KMSingleKeyShortcut removeSelector: #=! KMSingleKeyShortcut class removeSelector: #specialKeys! KMSingleKeyShortcut class removeSelector: #from:! Smalltalk globals removeClassNamed: #KMSingleKeyShortcut! KMShortcut removeSelector: #|! KMShortcut removeSelector: #win! KMShortcut removeSelector: #value:! KMShortcut removeSelector: #unix! KMShortcut removeSelector: #shortcut! KMShortcut removeSelector: #platform! KMShortcut removeSelector: #named:do:withDescription:! KMShortcut removeSelector: #named:do:! KMShortcut removeSelector: #matchesCompletely:! KMShortcut removeSelector: #matches:! KMShortcut removeSelector: #mac! KMShortcut removeSelector: #includes:! KMShortcut removeSelector: #hash! KMShortcut removeSelector: #combinationsDo:! KMShortcut removeSelector: #asShortcut! KMShortcut removeSelector: #=! KMShortcut removeSelector: #,! KMShortcut class removeSelector: #fromKeyboardEvent:! KMModifiedShortcut removeSelector: #shift! KMModifiedShortcut removeSelector: #printOn:! KMModifiedShortcut removeSelector: #modifier:! KMModifiedShortcut removeSelector: #modifier! KMModifiedShortcut removeSelector: #modifiedBy:! KMModifiedShortcut removeSelector: #matchesEvent:! KMModifiedShortcut removeSelector: #key! KMModifiedShortcut removeSelector: #hash! KMModifiedShortcut removeSelector: #ctrl! KMModifiedShortcut removeSelector: #command! KMModifiedShortcut removeSelector: #character:! KMModifiedShortcut removeSelector: #character! KMModifiedShortcut removeSelector: #beginsWith:! KMModifiedShortcut removeSelector: #asShortcut! KMModifiedShortcut removeSelector: #alt! KMModifiedShortcut removeSelector: #=! KMModifiedShortcut class removeSelector: #modifier:character:! Smalltalk globals removeClassNamed: #KMModifiedShortcut! KMChainedShortcut removeSelector: #shortcuts! KMChainedShortcut removeSelector: #printOn:! KMChainedShortcut removeSelector: #next:! KMChainedShortcut removeSelector: #matches:! KMChainedShortcut removeSelector: #hash! KMChainedShortcut removeSelector: #first:! KMChainedShortcut removeSelector: #beginsWith:! KMChainedShortcut removeSelector: #asShortcut! KMChainedShortcut removeSelector: #addShortcut:! KMChainedShortcut removeSelector: #=! KMChainedShortcut removeSelector: #,! KMChainedShortcut removeSelector: #+! KMChainedShortcut class removeSelector: #first:next:! Smalltalk globals removeClassNamed: #KMChainedShortcut! Smalltalk globals removeClassNamed: #KMShortcut! KMPlatformSpecificShortcut removeSelector: #|! KMPlatformSpecificShortcut removeSelector: #shortcut:! KMPlatformSpecificShortcut removeSelector: #shortcut! KMPlatformSpecificShortcut removeSelector: #platform:! KMPlatformSpecificShortcut removeSelector: #platform! KMPlatformSpecificShortcut removeSelector: #combinationsDo:! KMPlatformSpecificShortcut class removeSelector: #with:onPlatform:! Smalltalk globals removeClassNamed: #KMPlatformSpecificShortcut! KMCombinationShortcut removeSelector: #|! KMCombinationShortcut removeSelector: #shortcuts:! KMCombinationShortcut removeSelector: #includes:! KMCombinationShortcut removeSelector: #combinationsDo:! KMCombinationShortcut removeSelector: #collect:! KMCombinationShortcut class removeSelector: #withShortcuts:! Smalltalk globals removeClassNamed: #KMCombinationShortcut! KeyboardEvent removeSelector: #asShortcut! AbstractBasicWidget removeSelector: #buildWithSpecLayout:! AbstractBasicWidget removeSelector: #buildWithSpec:! KMModifier removeSelector: #kmString! KMModifier removeSelector: #asShortcut! Character removeSelector: #asShortcut! ByteString removeSelector: #asShortcut! "CI-Core"! "Keymapping-Core"! "Keymapping-KeyCombinations"! "Keymapping-Settings"! "Keymapping-Shortcuts"! "Keymapping-Tests"! "Morphic"! "NECompletion"! "NautilusRefactoring"! "Polymorph-Widgets"! "SUnit-UITesting"! "Spec-Widgets"! "System-CommandLine"! "Text"! ----End fileIn----! ----QUIT----an Array(25 March 2013 2:38:46 pm) Pharo.image priorSource: 408894! ----STARTUP----an Array(25 March 2013 2:44:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 March 2013 2:44:43 pm) Pharo-30012.image priorSource: 487659! ----STARTUP----an Array(26 March 2013 8:04:25 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/26/2013 08:01' prior: 33963630! commentForCurrentUpdate ^ '7113 isComposedBy: is not an Object method https://pharo.fogbugz.com/f/cases/7113 10081 unload Deprecated20 in 3.0 https://pharo.fogbugz.com/f/cases/10081 6373 Spotlight gives an error message when asked for World https://pharo.fogbugz.com/f/cases/6373 10002 Zeroconf: config command issue https://pharo.fogbugz.com/f/cases/10002'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/26/2013 08:01'! script112 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.243.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.147.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.583.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Deprecated20-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1347.mcz KernelTests-MarcusDenker.478.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1384.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.436.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-EstebanLorenzano.783.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.84.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1067.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/26/2013 08:02'! update30013 "self new update30013" self withUpdateLog: '7113 isComposedBy: is not an Object method https://pharo.fogbugz.com/f/cases/7113 10081 unload Deprecated20 in 3.0 https://pharo.fogbugz.com/f/cases/10081 6373 Spotlight gives an error message when asked for World https://pharo.fogbugz.com/f/cases/6373 10002 Zeroconf: config command issue https://pharo.fogbugz.com/f/cases/10002'. self loadTogether: self script112 merge: false. ScriptLoader new unloadPackage: 'Deprecated20'. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:40' prior: 20080652! activate self activateHelpWithoutArguments ifTrue: [ ^ self ]. (self hasOption: 'install') ifFalse: [ ^ self list ]. self installConfiguration. ! ! !BasicCodeLoader methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:44' prior: 17991309! activate self activateHelp ifTrue: [ ^ self ]. self loadSourceFiles: (self commandLine allFilesWithExtension: 'st'). self installSourceFiles. (self commandLine hasOption: 'quit') ifTrue: [ self exitSuccess ].! ! !BehaviorTest methodsFor: 'tests' stamp: 'MarcusDenker 3/25/2013 22:07' prior: 18094608! testComposedBy "tests the #isComposedBy: aTrait method" self deny: (Object isComposedBy: TSortable). self assert: (SequenceableCollection isComposedBy: TSortable). self assert: (Trait3 isComposedBy: Trait2). self deny: (Trait2 isComposedBy: Trait3). self deny: (Trait3 isComposedBy: Object). ! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:43' prior: 21247976! activate self activateHelpWithoutArguments ifTrue: [ ^ self ]. self arguments ifEmpty: [ ^ self evaluateStdIn ]. self evaluateArguments. self quit.! ! !TestRunnerCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:44' prior: 52427920! activate self activateHelp ifTrue: [ ^ self ]. self runPackages.! ! !Spotlight methodsFor: 'private' stamp: 'MarcusDenker 3/25/2013 17:00' prior: 50760176! symbolIsClass: symbol Smalltalk globals at: symbol ifPresent: [ :val | ^val isBehavior or: [ val isTrait ] ] ifAbsent: [ ^false ]! ! !CommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:42'! activateHelpWithoutArguments "Default help implementation, running #help if the there is no argument or a single one which is --help " ((self hasOption: 'help') or: [ self arguments isEmpty ]) ifTrue: [ self help. ^ true ]. ^ false! ! !CommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 3/22/2013 21:46' prior: 19735093! help "This is a crude default help implementation." self printHelp. Smalltalk isInteractive ifFalse: [ self exitSuccess ]! ! !Behavior methodsFor: 'accessing' stamp: 'MarcusDenker 3/25/2013 22:04' prior: 18014089! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! !KMSingleKeyCombination class methodsFor: 'accessing' stamp: 'MarcusDenker 3/26/2013 07:56' prior: 34032958! specialKeys ^specialKeys ifNil: [ specialKeys := {1->'home'. 3->'enter'. 4->'end'. 8->'backspace'. 9-> 'tab'. 11->'page up'. 12->'page down'. 27->'escape'. 28->'left arrow'. 29->'right arrow'. 30->'up arrow'. 31->'down arrow'. 127->'delete' } asDictionary.]! ! !PrintVersionCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:44' prior: 29953463! activate self activateHelp ifTrue: [ ^ self ]. self printVersion. self quit. ! ! !SaveCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:44' prior: 32672418! activate self activateHelp ifTrue: [ ^ self ]. ((self hasOption: 'delete-old') ifTrue: [ self arguments size = 2 ] ifFalse: [ self arguments size = 1]) ifFalse: [ ^ self exitFailure: 'Invalid Arguments' ]. self saveImage. ! ! !TraitBehavior methodsFor: 'testing' stamp: 'MarcusDenker 3/25/2013 22:04'! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! Object removeSelector: #isComposedBy:! "ConfigurationCommandLineHandler-Core"! "HudsonBuildTools20"! "Kernel"! "KernelTests"! "Keymapping-KeyCombinations"! "System-CommandLine"! "Tools"! "Traits"! Job removeSelector: #loggingProgress! Object removeSelector: #flash! LoggingSystemProgressItemMorph removeSelector: #start:! LoggingSystemProgressItemMorph removeSelector: #onStart:! LoggingSystemProgressItemMorph removeSelector: #onEnd:! LoggingSystemProgressItemMorph removeSelector: #onChange:! LoggingSystemProgressItemMorph removeSelector: #log:! LoggingSystemProgressItemMorph removeSelector: #end:! LoggingSystemProgressItemMorph removeSelector: #current:! Smalltalk globals removeClassNamed: #LoggingSystemProgressItemMorph! SystemProgressMorph removeSelector: #updateColor:color:intensity:! SystemProgressMorph removeSelector: #setLabel:at:! SystemProgressMorph removeSelector: #labelAt:put:! SystemProgressMorph class removeSelector: #label:min:max:! SystemProgressMorph class removeSelector: #close:! SmalltalkImage removeSelector: #windowSystemName! SmalltalkImage removeSelector: #vmPath! SmalltalkImage removeSelector: #vmParameterAt:put:! SmalltalkImage removeSelector: #vmParameterAt:! SmalltalkImage removeSelector: #vmFullPath! SmalltalkImage removeSelector: #primVmPath! SmalltalkImage removeSelector: #platformSubtype! SmalltalkImage removeSelector: #platformName! SmalltalkImage removeSelector: #osVersion! SmalltalkImage removeSelector: #isTrunk! SmalltalkImage removeSelector: #hasDisplay! SmalltalkImage removeSelector: #documentPath! ThumbnailImageMorph removeSelector: #yesNoStringFor:! BlockClosure removeSelector: #silentlyValue! JobProgressMorph removeSelector: #value:! JobProgressMorph removeSelector: #endAt:! JobProgressMorph removeSelector: #end:! CompiledMethod removeSelector: #getSourceFor:in:! ProgressBarMorph removeSelector: #barSize:! ProgressInitiationException removeSelector: #workBlock! ProgressInitiationException removeSelector: #sendNotificationsTo:! ProgressInitiationException removeSelector: #progressTitle! ProgressInitiationException removeSelector: #point! ProgressInitiationException removeSelector: #minVal! ProgressInitiationException removeSelector: #maxVal! ProgressInitiationException removeSelector: #display:at:from:to:during:! ProgressInitiationException removeSelector: #defaultAction! ProgressInitiationException class removeSelector: #display:at:from:to:during:! Smalltalk globals removeClassNamed: #ProgressInitiationException! VirtualMachine class removeSelector: #vmPath! VirtualMachine class removeSelector: #vmFullPath! ----End fileIn----! ----QUIT----an Array(26 March 2013 8:04:33 am) Pharo.image priorSource: 487858! ----STARTUP----an Array(26 March 2013 8:10:19 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 March 2013 8:10:19 am) Pharo-30013.image priorSource: 504875! ----STARTUP----an Array(27 March 2013 8:25:26 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/27/2013 08:22' prior: 34042590! commentForCurrentUpdate ^ '10138 Config browser does not work in Pharo 3.0, requires new repo https://pharo.fogbugz.com/f/cases/10138/ 10111 DictionaryTest does not properly test subclass functionality https://pharo.fogbugz.com/f/cases/10111 7465 version printing command line needs modifiers https://pharo.fogbugz.com/f/cases/7465'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/27/2013 08:23'! script113 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.243.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.10.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.63.mcz FileSystem-Disk-MarcusDenker.48.mcz FileSystem-Memory-MarcusDenker.20.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-EstebanLorenzano.6.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.191.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.13.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1347.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.494.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.135.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1384.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.436.mcz NautilusCommon-MarcusDenker.120.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-EstebanLorenzano.783.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.169.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.47.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.87.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.796.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1069.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.5.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.3.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/27/2013 08:23'! update30014 "self new update30014" self withUpdateLog: '10138 Config browser does not work in Pharo 3.0, requires new repo https://pharo.fogbugz.com/f/cases/10138/ 10111 DictionaryTest does not properly test subclass functionality https://pharo.fogbugz.com/f/cases/10111 7465 version printing command line needs modifiers https://pharo.fogbugz.com/f/cases/7465'. self loadTogether: self script113 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PrintVersionCommandLineHandler commentStamp: '' prior: 29952657! Usage: printVersion Documentation: Prints the version number in an easy to parse format. This can be used in Jenkins with the "Description Setter" Plugin. Configure it like this: Regular expression: \[version\] (.*) Description: \1 Examples: $PHAROVM Foo.image printVersion #result will be something like: [version] 3.0 #30100 $PHAROVM Foo.image printVersion --numeric # will print a simpler version 30100 $PHAROVM Foo.image printVersion --release # prints the Pharo release version 3.0! !MetacelloConfigurationBrowser methodsFor: 'defaults' stamp: 'tbn 3/27/2013 00:47' prior: 25810969! pharoDistribution "Returns the correct pharo distribution url" ^'http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo', SystemVersion current major asString, SystemVersion current minor asString, '/main'! ! !DictionaryTest methodsFor: 'requirements' stamp: 'CamilloBruni 3/23/2013 12:05' prior: 20747618! collectionClass " return the class to be used to create instances of the class tested" ^ self classToBeTested! ! !DictionaryTest methodsFor: 'requirement' stamp: 'CamilloBruni 3/23/2013 12:06' prior: 20746723! result ^ self collectionClass newFromPairs: { #a . SmallInteger . #b . SmallInteger . #c . SmallInteger . #d . SmallInteger }! ! !DictionaryTest methodsFor: 'requirements' stamp: 'CamilloBruni 3/23/2013 12:16'! supportsNilKey ^ true! ! !DictionaryTest methodsFor: 'test - integrity' stamp: 'CamilloBruni 3/23/2013 12:08' prior: 20758981! testAllDictionariesAreHealthy "only makes sense on Dictionary" self classToBeTested = Dictionary ifFalse: [ ^ self ]. self assert: (Dictionary allSubInstances select: [:dict | dict isHealthy not ]) isEmpty.! ! !DictionaryTest methodsFor: 'tests' stamp: 'CamilloBruni 3/23/2013 12:10' prior: 20765030! testAtIfPresentIfAbsent "Test at:ifPresent:ifAbsent:" "to move to the corresponding trait" | dict present absent | dict := self collectionClass new. present := absent := false. dict at: #foo ifPresent: [:v| present := true] ifAbsent: [absent := true]. self deny: present. self assert: absent. dict at: #foo put: #bar. present := absent := false. dict at: #foo ifPresent: [:v| present := true] ifAbsent: [absent := true]. self assert: present. self deny: absent. present := absent := false. dict at: #foo ifPresent: [:v| present := true. nil] ifAbsent: [absent := true]. self assert: present. self deny: absent. ! ! !DictionaryTest methodsFor: 'test - testing' stamp: 'CamilloBruni 3/23/2013 12:11' prior: 20761756! testHasBindingThatBeginsWith | newDict | newDict := self collectionClass new at: #abc put: 10; at: #abcd put: 100; at: #def put: 20; yourself. self assert: (newDict hasBindingThatBeginsWith: 'ab'). self assert: (newDict hasBindingThatBeginsWith: 'def'). self deny: (newDict hasBindingThatBeginsWith: 'defg').! ! !DictionaryTest methodsFor: 'test - integrity' stamp: 'CamilloBruni 3/23/2013 12:15' prior: 20759413! testHealthyWorks "we use associations as keys on purpose, because they changing hash depending on the key" | a1 a2 dict | self classToBeTested = Dictionary ifFalse: [ ^ self "only works on Dictionary" ]. dict := Dictionary new. [a1 := 1 -> 2. a2 := 2 -> 2. dict at: a1 put: 2; at: a2 put: 3. self assert: dict isHealthy. a1 key: 0. a2 key: 0. self assert: dict isHealthy not] ensure: [dict removeAll]! ! !DictionaryTest methodsFor: 'test - testing' stamp: 'CamilloBruni 3/23/2013 12:11' prior: 20762422! testIncludes | o1 o2 newDict | self assert: (nonEmptyDict includes: self element). o1 := 2 @ 3. o2 := 2 @ 3. self deny: (o1 == o2). self assert: (o1 = o2). newDict := self collectionClass new. newDict at: #a put: o1. self assert: (newDict includes: o2). ! ! !DictionaryTest methodsFor: 'test - testing' stamp: 'CamilloBruni 3/23/2013 12:12' prior: 20762773! testIncludesAssociationNoValue | association dictionary | association := Association key: #key. self assert: association value isNil. dictionary := self collectionClass new. dictionary add: association. self assert: (dictionary at: #key) isNil ! ! !DictionaryTest methodsFor: 'test - testing' stamp: 'CamilloBruni 3/23/2013 12:12' prior: 20763124! testIncludesAssociationWithValue | association dictionary | association := Association key: #key value: 1. dictionary := self collectionClass new. dictionary add: association. self assert: (dictionary at: #key) = 1 ! ! !DictionaryTest methodsFor: 'tests' stamp: 'CamilloBruni 3/23/2013 12:18' prior: 20765723! testNilHashCollision "Ensures that fixCollisionsFrom: does the right thing in the presence of a nil key" | dict key | self supportsNilKey ifFalse: [ ^ self ]. dict := self collectionClass new. key := nil hash. "any key with same hash as nil" dict at: key hash put: 1. dict at: nil put: 2. self assert: (dict includesKey: nil). dict removeKey: key. self assert: (dict includesKey: nil). ! ! !DictionaryTest methodsFor: 'test - testing' stamp: 'CamilloBruni 3/23/2013 12:17' prior: 20763967! testOccurrencesOf "self run:#testOccurrencesOf" | dict | dict := self collectionClass new. dict at: #a put: 1. dict at: #b put: 2. dict at: #c put: 1. dict at: #d put: 3. dict at: nil put: nil. dict at: #z put: nil. self assert: (dict occurrencesOf: 1 ) equals: 2. self supportsNilKey ifTrue: [ self assert: (dict occurrencesOf: nil ) equals: 2 ] ifFalse: [ self assert: (dict occurrencesOf: nil ) equals: 1 ]. ! ! !DictionaryTest methodsFor: 'tests' stamp: 'CamilloBruni 3/23/2013 12:13' prior: 20766139! testRemoveAll "Allows one to remove all elements of a collection" | dict1 dict2 s2 | dict1 := self collectionClass new. dict1 at: #a put:1 ; at: #b put: 2. dict2 := dict1 copy. s2 := dict2 size. dict1 removeAll. self assert: dict1 size = 0. self assert: dict2 size = s2 description: 'the copy has not been modified'.! ! !DictionaryTest methodsFor: 'tests' stamp: 'CamilloBruni 3/23/2013 12:13' prior: 20766546! testSelectIsNotShallowCopy "self debug: #testSelectIsNotShallowCopy" | original even | original := self collectionClass new. original at: #one put: 1. original at: #two put: 2. even := original select: [:value |value even]. even at: #two put: 'deux'. self assert: (original at: #two) = 2 description: 'modifying a selection should not modify the original'! ! !PrintVersionCommandLineHandler commentStamp: '' prior: 34069956! Usage: printVersion Documentation: Prints the version number in an easy to parse format. This can be used in Jenkins with the "Description Setter" Plugin. Configure it like this: Regular expression: \[version\] (.*) Description: \1 Examples: $PHAROVM Foo.image printVersion #result will be something like: [version] 3.0 #30100 $PHAROVM Foo.image printVersion --numeric # will print a simpler version 30100 $PHAROVM Foo.image printVersion --release # prints the Pharo release version 3.0! !PrintVersionCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/26/2013 21:13' prior: 34055893! activate self activateHelp ifTrue: [ ^ self ]. (self hasOption: 'numeric') ifTrue: [ self printNumericVersion. ^ self exitSuccess]. (self hasOption: 'release') ifTrue: [ self printRelease. ^ self exitSuccess ]. self hasArguments ifFalse: [ self printVersion. ^ self exitSuccess ]. self printHelp. ^ self exitFailure! ! !PrintVersionCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 3/26/2013 21:09'! printNumericVersion self stdout print: SystemVersion current highestUpdate; lf! ! !PrintVersionCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 3/26/2013 21:09'! printRelease self stdout print: SystemVersion current major; nextPutAll: '.'; print: SystemVersion current minor; lf.! ! !PrintVersionCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 3/26/2013 21:09' prior: 29953090! printVersion self stdout nextPutAll: '[version] '; print: SystemVersion current major; nextPutAll: '.'; print: SystemVersion current minor; nextPutAll: ' #' ; print: SystemVersion current highestUpdate; lf.! ! !TSetArithmetic methodsFor: 'tests - set arithmetic' stamp: 'CamilloBruni 3/23/2013 12:23' prior: 52182861! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !TDictionaryAddingTest methodsFor: 'test - adding' stamp: 'CamilloBruni 3/23/2013 12:07' prior: 51923048! testAddAll | collectionToAdd collection result oldSize | collection := self nonEmptyDict . oldSize := collection size. collectionToAdd := self collectionClass new add: self associationWithKeyAlreadyInToAdd ; add: self associationWithKeyNotInToAdd ; yourself. result := collection addAll: collectionToAdd . self assert: result = collectionToAdd . " the association with the key already in should have replaced the oldest :" self assert: collection size = (oldSize + 1). result associationsDo: [:assoc | self assert: (collection at: (assoc key) ) = assoc value].! ! !TDictionaryAddingTest methodsFor: 'test - adding' stamp: 'CamilloBruni 3/23/2013 12:10' prior: 51924629! testDeclareFrom | newDict v dictionary keyIn associationKeyNotIn | dictionary := self nonEmptyDict. keyIn := dictionary keys anyOne. associationKeyNotIn := self associationWithKeyNotInToAdd . newDict := self collectionClass new add: associationKeyNotIn; yourself. "if the key already exist, nothing changes" v := dictionary at: keyIn. dictionary declare: keyIn from: newDict. self assert: (dictionary at: keyIn ) = v. "if the key does not exist, then it gets removed from newDict and is added to the receiver" self nonEmptyDict declare: associationKeyNotIn key from: newDict. self assert: (dictionary at: associationKeyNotIn key) = associationKeyNotIn value. self assert: (newDict size = 0)! ! !MethodDictionaryTest methodsFor: 'tests - integrity' stamp: 'CamilloBruni 3/23/2013 12:09'! testAllMethodDictionariesAreHealthy self assert: (MethodDictionary allInstances select: [:dict | dict isHealthy not ]) isEmpty.! ! !SmallDictionary methodsFor: 'accessing - values' stamp: 'CamilloBruni 3/23/2013 12:21'! at: key ifPresent: oneArgBlock ifAbsent: absentBlock "Lookup the given key in the receiver. If it is present, answer the value of evaluating the oneArgBlock with the value associated with the key, otherwise answer the value of absentBlock." self at: key ifPresent: [ :v | ^oneArgBlock value: v ]. ^absentBlock value! ! !SmallDictionary methodsFor: 'enumerating - keys and values' stamp: 'CamilloBruni 3/23/2013 12:25'! difference: aCollection "Answer the set theoretic difference of two collections. This is a specialized version for Dictionaries keeping the keys of the objects. At a slightly higher price of an additional Set to track duplicates." | other result duplicates | other := aCollection asSet. duplicates := Set new. result := self class new: self size. self keysAndValuesDo: [ :key :value| ((other includes: value) not and: [ (duplicates includes: value) not ]) ifTrue: [ duplicates add: value. result at: key put: value]]. ^ result! ! !SmallDictionary methodsFor: 'removing - keys and values' stamp: 'CamilloBruni 3/23/2013 12:22'! removeAll self initialize.! ! !WeakIdentityKeyDictionaryTest methodsFor: 'requirements' stamp: 'CamilloBruni 3/23/2013 12:17'! supportsNilKey ^ false! ! DictionaryTest removeSelector: #testAllMethodDictionariesAreHealthy! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAddAll | collectionToAdd collection result oldSize | collection := self nonEmptyDict . oldSize := collection size. collectionToAdd := self collectionClass new add: self associationWithKeyAlreadyInToAdd ; add: self associationWithKeyNotInToAdd ; yourself. result := collection addAll: collectionToAdd . self assert: result = collectionToAdd . " the association with the key already in should have replaced the oldest :" self assert: collection size = (oldSize + 1). result associationsDo: [:assoc | self assert: (collection at: (assoc key) ) = assoc value].! ! !Trait method! testDeclareFrom | newDict v dictionary keyIn associationKeyNotIn | dictionary := self nonEmptyDict. keyIn := dictionary keys anyOne. associationKeyNotIn := self associationWithKeyNotInToAdd . newDict := self collectionClass new add: associationKeyNotIn; yourself. "if the key already exist, nothing changes" v := dictionary at: keyIn. dictionary declare: keyIn from: newDict. self assert: (dictionary at: keyIn ) = v. "if the key does not exist, then it gets removed from newDict and is added to the receiver" self nonEmptyDict declare: associationKeyNotIn key from: newDict. self assert: (dictionary at: associationKeyNotIn key) = associationKeyNotIn value. self assert: (newDict size = 0)! ! "Collections-Unordered"! "CollectionsTests"! "KernelTests"! "System-CommandLine"! "Tools"! ----End fileIn----! ----QUIT----an Array(27 March 2013 8:25:32 am) Pharo.image priorSource: 505074! ----STARTUP----an Array(27 March 2013 8:31:26 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 March 2013 8:31:26 am) Pharo-30014.image priorSource: 536977! ----STARTUP----an Array(28 March 2013 10:14:25 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'mc related utils' stamp: 'MarcusDenker 3/28/2013 10:10' prior: 33727550! addHomeRepositoryToAllPackages "self new addHomeRepositoryToAllPackages" self allManagers do: [:each | each repositoryGroup addRepository: self repository; addRepository: self inboxRepository ]. MCRepositoryGroup default addRepository: self repository; addRepository: self inboxRepository.! ! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/28/2013 10:11' prior: 34059806! commentForCurrentUpdate ^ '6371 make Growl position configurable by preferences https://pharo.fogbugz.com/f/cases/6371 6881 FileSystemStore permissions: should not return false https://pharo.fogbugz.com/f/cases/6881 10061 add String>>#urldecoded and String>>#urlencoded https://pharo.fogbugz.com/f/cases/10061 10131 Remove unsent deprecated method https://pharo.fogbugz.com/f/cases/10131 10135 Remove old HierarchyBrowser https://pharo.fogbugz.com/f/cases/10135/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/28/2013 10:11'! script114 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.247.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1349.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1386.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.438.mcz NautilusCommon-MarcusDenker.122.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.785.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.31.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.87.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/28/2013 10:12'! update30015 "self new update30015" self withUpdateLog: '6371 make Growl position configurable by preferences https://pharo.fogbugz.com/f/cases/6371 6881 FileSystemStore permissions: should not return false https://pharo.fogbugz.com/f/cases/6881 10061 add String>>#urldecoded and String>>#urlencoded https://pharo.fogbugz.com/f/cases/10061 10131 Remove unsent deprecated method https://pharo.fogbugz.com/f/cases/10131 10135 Remove old HierarchyBrowser https://pharo.fogbugz.com/f/cases/10135/'. self loadTogether: self script114 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus class methodsFor: 'cleanup' stamp: 'MarcusDenker 3/24/2013 11:15' prior: 33956367! cleanUp AbstractNautilusUI resetIconCaches. Nautilus resetCachedLastClasses. ! ! !Nautilus methodsFor: 'browser compatibility' stamp: 'MarcusDenker 3/26/2013 08:19' prior: 27961096! spawnHierarchy self showHierarchy: true; open. self ui showPackages: false! ! !PolymorphSystemSettings class methodsFor: 'settings' stamp: 'tbn 3/27/2013 01:22' prior: 29822468! appearanceSettingsOn: aBuilder (aBuilder group: #appearance) label: 'Appearance' translated; description: 'All settings concerned with the look''n feel of your system' translated; with: [ (aBuilder pickOne: #uiThemeClass) label: 'User interface theme' translated; target: self; default: UITheme standardThemeClass; order: 1; domainValues: self uiThemeClassChoices. self morphicSettingsOn: aBuilder. self desktopSettingsOn: aBuilder. self soundSettingsOn: aBuilder. self growlSettingsOn: aBuilder]! ! !PolymorphSystemSettings class methodsFor: 'growl' stamp: 'tbn 3/27/2013 01:30'! growlPosition ^GrowlMorph position! ! !PolymorphSystemSettings class methodsFor: 'growl' stamp: 'tbn 3/27/2013 01:30'! growlPosition: aPosition GrowlMorph position: aPosition! ! !PolymorphSystemSettings class methodsFor: 'growl' stamp: 'tbn 3/27/2013 01:29'! growlPositionChoices ^#(topRight 'top right' bottomLeft 'bottom left' bottomRight 'bottom right' topLeft 'topLeft') pairsCollect: [:a :b | b -> a]! ! !PolymorphSystemSettings class methodsFor: 'growl' stamp: 'tbn 3/27/2013 01:31'! growlSettingsOn: aBuilder (aBuilder group: #growl) label: 'Growl' translated; description: 'All settings concerned with the look''n feel of your system' translated; with: [ (aBuilder pickOne: #growlPosition) label: 'Growl position' translated; target: self; default: #topRight; order: 1; domainValues: self growlPositionChoices.]! ! !FileSystemPermission class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/23/2013 00:14'! default ^ self posixPermissions: 8r777! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 3/23/2013 00:13' prior: 22068538! permissions: aPath self nodeAt: aPath ifPresent: [ :entry | ^ FileSystemPermission posixPermissions: (self basicPosixPermissions: entry) ] ifAbsent: [ ^ FileSystemPermission default ]. ! ! !CodeHolder methodsFor: 'traits' stamp: 'MarcusDenker 3/26/2013 08:28' prior: 19467590! spawnHierarchy "Create and schedule a new hierarchy browser on the currently selected class or meta." | aSymbol selectedClassOrMetaClass browser | (selectedClassOrMetaClass := self selectedClassOrMetaClass) ifNil: [^ self]. selectedClassOrMetaClass isTrait ifTrue: [^ self]. ((aSymbol := self selectedMessageName) notNil and: [(Smalltalk tools messageList isPseudoSelector: aSymbol) not]) ifTrue: [browser := Smalltalk tools browser newOnClass: selectedClassOrMetaClass selector: aSymbol ] ifFalse: [ browser := Smalltalk tools browser newOnClass: selectedClassOrMetaClass ]. browser spawnHierarchy ! ! !GrowlMorph class methodsFor: 'position' stamp: 'tbn 3/27/2013 01:33' prior: 23105169! position ^ Position ifNil: [ Position := #topRight ]! ! !ZnPercentEncoderTests methodsFor: 'testing' stamp: 'CamilloBruni 3/26/2013 23:18'! testStringUrlDecoded self assert: ('foo%20bar' urlDecoded) equals: 'foo bar' ! ! !ZnPercentEncoderTests methodsFor: 'testing' stamp: 'CamilloBruni 3/26/2013 23:18'! testStringUrlEncoded self assert: ('foo bar' urlEncoded) equals: 'foo%20bar'! ! !String methodsFor: '*Zinc-Character-Encoding-Core' stamp: 'CamilloBruni 3/26/2013 23:18'! urlDecoded ^ ZnPercentEncoder new decode: self! ! !String methodsFor: '*Zinc-Character-Encoding-Core' stamp: 'CamilloBruni 3/26/2013 23:18'! urlEncoded ^ ZnPercentEncoder new encode: self ! ! SystemVersion removeSelector: #majorMinor! String removeSelector: #subStrings! ClassDescription removeSelector: #nonMetaclass! ClassDescription removeSelector: #metaclass! FileSystem class removeSelector: #onDisk! FileSystem class removeSelector: #inZip:! FileSystem class removeSelector: #inMemory! MorphTreeMorph removeSelector: #nodeSortBlock:! MorphTreeMorph removeSelector: #itemSortBlock:! Boolean removeSelector: #or:or:or:or:! Boolean removeSelector: #or:or:or:! Boolean removeSelector: #or:or:! Boolean removeSelector: #and:and:and:and:! Boolean removeSelector: #and:and:and:! Boolean removeSelector: #and:and:! MetacelloToolBox class removeSelector: #createBaseline:for:repository:requiredProjects:packages:dependencies:groups:! FileSystemStore removeSelector: #rename:ifAbsent:to:ifPresent:filesystem:! FileSystemStore removeSelector: #copy:ifAbsent:to:ifPresent:filesystem:! RGMethodDefinition removeSelector: #isOverriden! CompiledMethod removeSelector: #isOverriden! RBAbstractClass removeSelector: #nonMetaclass! RBAbstractClass removeSelector: #metaclass! DateAndTime removeSelector: #utcOffset:! DateAndTime class removeSelector: #fromDosTime:! MCVersionLoader removeSelector: #goferVersions! MCVersionLoader removeSelector: #goferHasVersions! MetacelloMethodSection removeSelector: #attribute:! MetacelloMethodSection removeSelector: #attribute! HierarchyBrowser removeSelector: #updateAfterClassChange! HierarchyBrowser removeSelector: #systemCategorySingleton! HierarchyBrowser removeSelector: #systemCatSingletonMenu:! HierarchyBrowser removeSelector: #systemCatSingletonKey:from:! HierarchyBrowser removeSelector: #selectedClassName! HierarchyBrowser removeSelector: #selectClass:! HierarchyBrowser removeSelector: #removeSystemCategory! HierarchyBrowser removeSelector: #openEditString:! HierarchyBrowser removeSelector: #initHierarchyForClass:! HierarchyBrowser removeSelector: #defaultBrowserTitle! HierarchyBrowser removeSelector: #classListIndex:! HierarchyBrowser removeSelector: #classList! HierarchyBrowser removeSelector: #changed:! HierarchyBrowser removeSelector: #buildClassBrowserEditString:! HierarchyBrowser removeSelector: #assureSelectionsShow! HierarchyBrowser class removeSelector: #newFor:! Smalltalk globals removeClassNamed: #HierarchyBrowser! BlockClosure removeSelector: #fixTemps! MetacelloPlatform removeSelector: #primeStackCacheFor:doing:defaultDictionary:! AbstractFileReference removeSelector: #filesystem! MetacelloVersionConstructor class removeSelector: #spawnPackageMethodIn:named:sourceVersion:targetVersion:blessing:! MetacelloVersionConstructor class removeSelector: #spawnPackageMethodIn:named:sourceVersion:targetVersion:! FileSystemHandle removeSelector: #filesystem! DiskStore class removeSelector: #currentFilesystem! ThemeIcons class removeSelector: #haloPoohIcon! "Collections-Strings"! "Compatibility"! "FileSystem-Core"! "FileSystem-Disk"! "FileSystem-Memory"! "FileSystem-Zip"! "Gofer-Core"! "Growl"! "Kernel"! "Metacello-Core"! "Metacello-ToolBox"! "Morphic"! "Nautilus"! "NautilusCommon"! "Polymorph-Widgets"! "Refactoring-Core"! "Settings-Polymorph"! "System-Support"! "Tools"! "Zinc-Character-Encoding-Core"! "Zinc-Character-Encoding-Tests"! ----End fileIn----! ----QUIT----an Array(28 March 2013 10:14:42 am) Pharo.image priorSource: 537176! ----STARTUP----an Array(28 March 2013 1:33:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 March 2013 1:33:33 pm) Pharo-30015.image priorSource: 555411! ----STARTUP----an Array(29 March 2013 2:53:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 3/29/2013 14:43' prior: 34092323! commentForCurrentUpdate ^ '10168 Spec new layout management https://pharo.fogbugz.com/f/cases/10168 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 3/29/2013 14:43'! script115 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.247.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1349.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.117.mcz Manifest-CriticBrowser-MarcusDenker.67.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.28.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1386.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.438.mcz NautilusCommon-MarcusDenker.122.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.785.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.30.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-StephaneDucasse.33.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.87.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 3/29/2013 14:43'! update30016 "self new update30016" self withUpdateLog: '10168 Spec new layout management https://pharo.fogbugz.com/f/cases/10168 '. self loadTogether: self script115 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 17:55'! addHSplitter self commands add: (SpecSplitterHorizontal commands: self commands)! ! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 17:49'! addVSplitter self commands add: (SpecSplitterVertical commands: self commands)! ! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 18:09' prior: 50715716! asArray | result | result := OrderedCollection new. result add: self type. result addAll: self privateAsArray. ^ result asArray! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/28/2013 18:30'! newColumn: aBlock left: aNumber aNumber isInteger ifTrue: [ self newColumn: aBlock origin: 0@0 corner: 1@1 offsetOrigin: aNumber@0 offsetCorner: 0@0 ] ifFalse: [ self newColumn: aBlock origin: aNumber@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@0 ]! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/28/2013 18:23'! newColumn: aBlock right: aNumber aNumber isInteger ifTrue: [ self newColumn: aBlock origin: 0@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: (aNumber negated)@0 ] ifFalse: [ self newColumn: aBlock origin: 0@0 corner: (1-aNumber)@1 offsetOrigin: 0@0 offsetCorner: 0@0 ]! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/28/2013 17:37'! newRow: aBlock bottom: aNumber aNumber isInteger ifTrue: [ "offset in pixels" self newRow: aBlock origin: 0@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@(aNumber negated) ] ifFalse: [ "proportional specification" self newRow: aBlock origin: 0@0 corner: 1@(1-aNumber) offsetOrigin: 0@0 offsetCorner: 0@0 ]! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/28/2013 17:26' prior: 50714524! newRow: aBlock height: aNumber self newRow: aBlock origin: 0@0 corner: 1@0 offsetOrigin: 0@0 offsetCorner: 0@aNumber ! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/28/2013 17:33'! newRow: aBlock top: aNumber aNumber isInteger ifTrue: [ "offset in pixels" self newRow: aBlock origin: 0@0 corner: 1@1 offsetOrigin: 0@aNumber offsetCorner: 0@0 ] ifFalse: [ "proportional specification" self newRow: aBlock origin: 0@aNumber corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@0 ]! ! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 18:09'! privateAsArray | result shouldCheckSplitters | result := OrderedCollection new. shouldCheckSplitters := false. (self commands reject: [:e | e isSplitter ]) do: [:e | | left right bottom top windowBorderWidth | windowBorderWidth := self class windowBorderWidth. left := e leftOffset. right := e rightOffset. bottom := e bottomOffset. top := e topOffset. e rightFraction = 1 ifTrue: [ right isZero ifTrue: [ e rightOffset: windowBorderWidth negated ] ifFalse: [ e rightOffset: right - ProportionalSplitterMorph splitterWidth ]]. e leftFraction = 0 ifTrue: [ left isZero ifTrue: [ e leftOffset: windowBorderWidth ] ifFalse: [ e leftOffset: left + ProportionalSplitterMorph splitterWidth ]] ifFalse: [ e leftFraction = 1 ifFalse: [ e leftOffset: left + ProportionalSplitterMorph splitterWidth]]. e bottomFraction = 1 ifTrue: [ bottom isZero ifTrue: [ e bottomOffset: windowBorderWidth negated ] ifFalse: [ e bottomOffset: bottom - ProportionalSplitterMorph splitterWidth ]]. e topFraction = 0 ifTrue: [ top isZero ifTrue: [ e topOffset: windowBorderWidth ] ifFalse: [ e topOffset: top + ProportionalSplitterMorph splitterWidth ]] ifFalse: [ e topFraction = 1 ifFalse: [ e topOffset: top + ProportionalSplitterMorph splitterWidth]]. e generateArguments. e asSpecElements do: [:el | result add: el ]]. (self commands select: [:e | e isSplitter ]) do: [:e | shouldCheckSplitters := true. e generateArguments. e asSpecElements do: [:el | result add: el ]]. shouldCheckSplitters ifTrue: [ result add: #checkSplitters ]. ^ result asArray! ! !SpecColumnLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 18:10'! privateAsArray | size result currentOffset numberOfProportionals currentProportional delta lastFractionIndex height | self flag: #toFix. "This method is a giant: strange name, huge logic" currentOffset := 0. currentProportional := 0. result := OrderedCollection new. size := self commands size. numberOfProportionals := 0. lastFractionIndex := 0. self commands do: [:e | e layoutFrame hasNoOffsets ifTrue: [ numberOfProportionals := numberOfProportionals +1 ]]. numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1/numberOfProportionals ]. self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ "fractions" e layoutFrame: ((0@currentProportional corner: 1@(currentProportional +delta)) asLayoutFrame topOffset: currentOffset ). currentOffset := 0. currentProportional := currentProportional + delta. lastFractionIndex := idx ] ifFalse: [ "offsets" height := e bottomOffset - e topOffset. idx = size ifTrue: [ e layoutFrame: ((0@1 corner: 1@1) asLayoutFrame topLeftOffset: e leftOffset @ height negated; bottomRightOffset: e rightOffset@0)] ifFalse: [ e layoutFrame: ((0@currentProportional corner: 1@currentProportional) asLayoutFrame topLeftOffset: e leftOffset@currentOffset ; bottomRightOffset: e rightOffset@ (currentOffset + height)). currentOffset := (currentOffset + height) ]]]. (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifTrue: [ | index ante | index := size - 1. [ index > lastFractionIndex ] whileTrue: [ | myHeight | ante := self commands at: index. index := index -1. myHeight := ante bottomOffset - ante topOffset. ante topOffset: (height+myHeight) negated; bottomOffset: height negated. height := height+myHeight ]. self assert: (index = lastFractionIndex). ante := self commands at: index. ante bottomOffset: height negated ]. result addAll: super privateAsArray. ^ result asArray! ! !SpecRowLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 3/28/2013 18:10'! privateAsArray | result currentOffset numberOfProportionals currentProportional delta size lastFractionIndex width | currentOffset := 0. currentProportional := 0. result := OrderedCollection new. numberOfProportionals := 0. lastFractionIndex := 0. size := self commands size. self commands do: [:e | e layoutFrame hasNoOffsets ifTrue: [ numberOfProportionals := numberOfProportionals +1 ]]. numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1/numberOfProportionals ]. self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ e layoutFrame: ((currentProportional@0 corner: (currentProportional +delta)@1) asLayoutFrame leftOffset: currentOffset). currentOffset := 0. currentProportional := currentProportional +delta. lastFractionIndex := idx ] ifFalse: [| y0 y1 | width := e offsets width. y0 := e offsets top. y1 := e offsets bottom. idx = size ifTrue: [ e layoutFrame: ((1@0 corner: 1@1) asLayoutFrame topLeftOffset: width negated @y0; bottomRightOffset: 0@y1)] ifFalse: [ e layoutFrame: ((currentProportional@0 corner: currentProportional@1) asLayoutFrame topLeftOffset: currentOffset@y0 ; bottomRightOffset: (currentOffset + width)@y1). currentOffset := (currentOffset + width) ]]]. (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifTrue: [ | index ante | index := size-1. [ index > lastFractionIndex ] whileTrue: [ | myWidth | ante := self commands at: index. index := index -1. myWidth := ante rightOffset - ante leftOffset. ante leftOffset: (width+myWidth) negated; rightOffset: width negated. width := width+myWidth ]. self assert: (index = lastFractionIndex). ante := self commands at: index. ante layoutFrame rightOffset: width negated ]. result addAll: super privateAsArray. ^ result asArray! ! SpecRowLayout removeSelector: #asArray! SpecColumnLayout removeSelector: #asArray! "Spec-Layout"! ----End fileIn----! ----QUIT----an Array(29 March 2013 2:53:27 pm) Pharo.image priorSource: 555611! ----STARTUP----an Array(29 March 2013 2:59:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 March 2013 2:59:27 pm) Pharo-30016.image priorSource: 574078! ----STARTUP----an Array(29 March 2013 3:35:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 3/29/2013 15:31' prior: 34110346! commentForCurrentUpdate ^ '10127 New cleans for CriticsBrowser https://pharo.fogbugz.com/f/cases/10127 10175 New transformation rule + some corrections https://pharo.fogbugz.com/f/cases/10175'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 3/29/2013 15:32'! script116 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.247.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1349.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.777.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.218.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1386.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.438.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.785.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-StephaneDucasse.34.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.6.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-StephaneDucasse.33.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.87.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.93.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.522.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 3/29/2013 15:32'! update30017 "self new update30017" self withUpdateLog: '10127 New cleans for CriticsBrowser https://pharo.fogbugz.com/f/cases/10127 10175 New transformation rule + some corrections https://pharo.fogbugz.com/f/cases/10175'. self loadTogether: self script116 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ManifestManifestCore commentStamp: '' prior: 0! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! !RBRemoveAssignmentWithoutEffectRule commentStamp: '' prior: 0! See my #longDescription .! !RBSelectorEnvironment methodsFor: '*manifest-core' stamp: 'SimonAllier 3/27/2013 10:11'! smallLintCritics | array | array := OrderedCollection new: self numberSelectors. self classes do: [:cl | self selectorsForClass: cl do: [:sel | array add: (cl>>sel)]]. ^ array! ! !RBExtraBlockRule methodsFor: 'initialization' stamp: 'CAMILLETERUEL 3/29/2013 12:50' prior: 30560671! initialize super initialize. self matcher matches: '`{:node | node isMessage and: [node receiver isBlock and: [node parent isCascade not and: [#(#value #value: #value:value: #value:value:value: #valueWithArguments:) includes: node selector]]]}' do: [ :node :answer | node ]! ! !CriticsCache methodsFor: 'private' stamp: 'SimonAllier 3/21/2013 15:18' prior: 33866677! packageOf: aCritc ^ aCritc mcWorkingCopy "aCritc isCompiledMethod ifTrue: [MCWorkingCopy managersForClass: aCritc methodClass selector: aCritc selector do: [ :package | ^ package ]] ifFalse: [MCWorkingCopy managersForClass: aCritc do: [: package | ^ package ]] "! ! !RBClassEnvironment methodsFor: '*manifest-core' stamp: 'SimonAllier 3/27/2013 10:11'! smallLintCritics ^ self allClasses! ! !RBTrueFalseDuplicationRule methodsFor: 'accessing' stamp: 'lr 2/23/2009 23:17'! group ^ 'Unnecessary code'! ! !RBTrueFalseDuplicationRule methodsFor: 'initialization' stamp: 'lr 2/24/2009 20:27'! initialize super initialize. self matcher matchesAnyOf: #( '`@object ifTrue: [| `@temps1 | `@.Statements1. `.Statement] ifFalse: [| `@temps2 | `@.Statements2. `.Statement]' '`@object ifTrue: [| `@temps1 | `.Statement. `@.Statements1] ifFalse: [| `@temps2 | `.Statement. `@.Statements2]' '`@object ifFalse: [| `@temps1 | `@.Statements1. `.Statement] ifTrue: [| `@temps2 | `@.Statements2. `.Statement]' '`@object ifFalse: [| `@temps1 | `.Statement. `@.Statements1] ifTrue: [| `@temps2 | `.Statement. `@.Statement2]') do: [ :node :answer | answer isNil ifTrue: [ | statement | statement := node arguments first body statements last. (statement isVariable and: [ statement = node arguments last body statements last ]) ifFalse: [ node ] ifTrue: [ nil ] ] ifFalse: [ answer ] ]! ! !RBTrueFalseDuplicationRule methodsFor: 'accessing' stamp: 'CAMILLETERUEL 3/29/2013 13:09'! name ^ 'Check for same statements in ifTrue:ifFalse: blocks'! ! !RBTrueFalseDuplicationRule methodsFor: 'accessing' stamp: 'lr 2/23/2009 23:17'! rationale ^ 'Checks for ifTrue:ifFalse: blocks that have the same code at the beginning or end. While you might not originally write such code, as it is modified, it is easier to create such code. Instead of having the same code in two places, you should move it outside the blocks.'! ! !RBTrueFalseDuplicationRule methodsFor: 'accessing' stamp: 'lr 5/15/2010 15:09'! severity ^ #information! ! !SelectRuleBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:31' prior: 33875599! initialize | wrappingBlock childrenBlockS childrenBlockTS | super initialize. toSelectModel := self instantiate: TreeModel. selectedModel := self instantiate: TreeModel. selectRule := Set new. childrenBlockS := [:rule | rule isComposite ifTrue: [rule rules select: [ :r | (selectRule anySatisfy: [ :sr | sr = r ]) or: [ r isComposite ] ]] ifFalse: [{}]]. childrenBlockTS := [ :rule | rule isComposite ifTrue: [rule rules select: [ :r | (selectRule anySatisfy: [ :sr | sr = r ]) not or: [ r isComposite ]]] ifFalse: [{}] ]. toSelectModel childrenBlock: childrenBlockTS. selectedModel childrenBlock: childrenBlockS. wrappingBlock := [ :rule | rule name ]. toSelectModel displayBlock: wrappingBlock. selectedModel displayBlock: wrappingBlock.! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'SimonAllier 3/22/2013 13:58'! testDateOfToDo | manifestBuilder date1 date2 | manifestBuilder := BuilderManifest of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. date1 := DateAndTime current. manifestBuilder addToDo: MFClassA of: 'test' version: 0. date2 := DateAndTime current. self assert: (manifestBuilder dateOfToDo: MFClassA onRule: 'test' version: 0) >= date1 . self assert: (manifestBuilder dateOfToDo: MFClassA onRule: 'test' version: 0) <= date2 . ! ! !ResetWindow methodsFor: 'protocol' stamp: 'SimonAllier 1/28/2013 11:35' prior: 32271730! initialExtent ^ 450@30! ! !RBSendsDeprecatedMethodToGlobalRule methodsFor: 'initialization' stamp: 'CamilleTeruel 3/22/2013 11:30' prior: 31348045! initialize | patterns pattern wellKnownGlobals | super initialize. patterns := OrderedCollection new. wellKnownGlobals := IdentityDictionary new. Smalltalk globals keysAndValuesDo: [ :name :object | object isBehavior ifFalse: [ (wellKnownGlobals at: object class ifAbsentPut: [ IdentitySet new ]) add: name ] ]. self selectors do: [ :symbol | (RBBrowserEnvironment new referencesTo: symbol) classesAndSelectorsDo: [ :class :selector | class isMeta ifTrue: [ class withAllSubclassesDo: [ :subclass | patterns add: (String streamContents: [ :stream | stream nextPutAll: subclass theNonMetaClass name; nextPutAll: (self genericPatternForSelector: selector) ]) ] ] ifFalse: [ wellKnownGlobals keysAndValuesDo: [ :global :names | (global includesBehavior: class) ifTrue: [ names do: [ :each | patterns add: (String streamContents: [ :stream | stream nextPutAll: each; nextPutAll: (self genericPatternForSelector: selector) ]) ] ] ] ] ] ]. self matcher matchesAnyOf: patterns do: [ :node :answer | node ]! ! !RBLintRule methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/27/2013 10:15' prior: 30711743! critics ^ self result smallLintCritics ! ! !SingleRuleCriticBrowser class methodsFor: 'class initialization' stamp: 'StephaneDucasse 11/21/2012 18:11' prior: 33364475! initialize icons := IdentityDictionary new! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'SimonAllier 3/22/2013 15:12' prior: 33879330! addRuleToFalsePositive criticsModel selectedItems ifNotNil: [ :criticss | criticss do: [ :critic | cache addFalsePositiveRule: rule forPackage: critic mcWorkingCopy]].! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'SimonAllier 3/21/2013 15:24' prior: 33880138! criticsModelContains: aCritic ^ criticsModel listItems anySatisfy: [ :each | each name = aCritic name]! ! !SingleRuleCriticBrowser methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 10:51' prior: 33880549! criticsOf: aRule cache ifNil: [^ {}]. criticsModel items: ((cache criticsOf: aRule) sorted: [ :a :b | a name < b name ]).! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'SimonAllier 3/27/2013 11:17' prior: 33354170! implementorsOfCritic criticsModel selectedItem ifNotNil: [ :item | item browse] ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:36' prior: 33881381! initializeActionToPerformOnTextModel | selectedItem | sourceCodeModel acceptBlock: [ :text | selectedItem := criticsModel selectedItem. (selectedItem isCompiledMethod and: [ rule isTransformationRule not ]) ifTrue: [ selectedItem methodClass compile: text ] ifFalse: [ Compiler evaluate: text ]] ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 1/23/2013 11:26' prior: 33881806! initializeDisplayCritic: aCritic forRule: aRule | criticRepresentation | criticRepresentation := (self formatCritic: aCritic) asMorph. ^ (cache isFalsePositive: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self falsePositiveColor ] ifFalse: [ (cache isToDo: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self toDoColor ] ifFalse: [ criticRepresentation color: self defaultColor ]]! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 9/28/2012 13:53' prior: 33882352! initializePresenter self whenSelectedItemChangesOnListModel. ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33882530! initializeTextInputFieldModel |critics| textInputFieldModel autoAccept: true; ghostText: 'Search field'; text: ' '; removeEntryCompletion. textInputFieldModel acceptBlock: [ :text | |matchText| critics :=cache criticsOf: rule. matchText := '*', text, '*'. criticsModel items: (text isEmpty ifTrue: [ critics ] ifFalse: [ critics select: [ :critic | matchText match: (self formatCritic: critic)]]). criticsModel updateList ] ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 1/25/2013 16:25' prior: 33883095! initializeToolBar self toolbarModel whenFalsePositiveClickedDo: [ self addCriticToFalsePositive ]. ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33883310! initializeWidgets self instantiateModels: #( criticsModel IconListModel sourceCodeModel TextModel toolbarModel CriticToolbar textInputFieldModel TextInputFieldModel ). criticsModel beMultipleSelection. self initializeTextInputFieldModel. self initializeToolBar. self initializeActionToPerformOnTextModel. criticsModel displayBlock: [:selec | self initializeDisplayCritic: selec forRule: rule]. criticsModel menu: [ :a :b | self menu: a shifted: b ]. criticsModel icons: [ :item | self iconFor: item ]. self focusOrder add: criticsModel; add: toolbarModel; add: sourceCodeModel. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'SimonAllier 3/29/2013 11:06' prior: 33354462! menu: aMenu shifted: aBoolean aMenu add: 'Browse' translated target: self selector: #browseCritic; add: 'Senders' translated target: self selector: #sendersOfCritic; add: 'Implementors' translated target: self selector: #implementorsOfCritic; addLine; add: 'Mark selected critic as false Positive' translated target: self selector: #addCriticToFalsePositive; add: 'Unmark selected critic as false Positive' translated target: self selector: #removeCriticToFalsePositive; add: 'Mark all critics as false Positive' translated target: self selector: #addAllCriticsToFalsePositive; add: 'Unmark all critics as false Positive' translated target: self selector: #removeAllCriticsToFalsePositive; addLine; add: 'Mark selected critic as TODO' translated target: self selector: #addCriticToToDo; add: 'Unmark selected critic as TODO' translated target: self selector: #removeCriticToToDo; addLine; add: 'Mark selected class as false Positive' translated target: self selector: #addClassToFalsePositive; add: 'Unmark selected class as false Positive' translated target: self selector: #removeClassToFalsePositive; addLine; add: 'Ban this rule for the selected package' translated target: self selector: #addRuleToFalsePositive; add: 'Unban this rule for the selected package' translated target: self selector: #removeRuleToFalsePositive. (rule isNil not and: [ rule isTransformationRule]) ifTrue: [ aMenu addLine; add: 'Transform selected critic' translated target: self selector: #transformCritic ]. ^ aMenu! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'SimonAllier 3/22/2013 15:11' prior: 33885380! removeRuleToFalsePositive criticsModel selectedItems ifNotNil: [ :criticss | criticss do: [ :critic | cache removeFalsePositiveRule: rule forPackage: critic mcWorkingCopy]].! ! !SingleRuleCriticBrowser methodsFor: 'accessing' stamp: 'SimonAllier 3/27/2013 11:28'! rule ^ rule! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:37' prior: 33885694! rule: aRule rule := aRule. (rule isNil or: [ rule isComposite ]) ifTrue: [ ^ self ]. self criticsOf: aRule. toolbarModel rule: rule.! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 3/27/2013 11:04'! setTextModelForClassOrMethod: aCritic | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: aCritic definition. sourceCodeModel behavior: aCritic textBehavior. interval := self selectionIntervalFor: aCritic definition. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:38' prior: 33887139! setTextModelForNil | text | text := rule longDescription isEmpty ifTrue: [ rule name ] ifFalse: [ rule longDescription ]. sourceCodeModel aboutToStyle: false. sourceCodeModel text: text. sourceCodeModel behavior: nil. toolbarModel critic: nil ! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 3/27/2013 10:52' prior: 33887517! setTextModelForTransformationRule: selection | textDiff change | rule result. change := rule changes detect: [ :ch | (ch changeClassName = selection criticTheNonMetaclassClass name) & (ch selector = selection selector)]. textDiff := (TextDiffBuilder from: selection sourceCode to: change source inClass: selection methodClass) buildDisplayPatch. sourceCodeModel behavior: nil. sourceCodeModel text: textDiff. sourceCodeModel aboutToStyle: false. ! ! !SingleRuleCriticBrowser methodsFor: 'menu' stamp: 'SimonAllier 3/29/2013 11:09'! transformCritic criticsModel selectedItems ifNotNil: [ :items | items do: [:critic | rule transform: critic ] displayingProgress: [:critic|]]! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 3/29/2013 10:42' prior: 33888794! whenSelectedItemChangesOnListModel criticsModel whenSelectedItemChanged: [ :selection | sourceCodeModel setSelection: (0 to:0). rule isNil ifFalse: [ (selection ifNil: [ self setTextModelForNil ] ifNotNil: [ toolbarModel critic: selection. rule isTransformationRule ifTrue: [ self setTextModelForTransformationRule: selection ] ifFalse: [ self setTextModelForClassOrMethod: selection ]] ) ] ]! ! !CriticToolbar methodsFor: 'private' stamp: 'SimonAllier 3/27/2013 11:18' prior: 33889450! browseCritic criticHolder contents ifNotNil: [ :elem | elem browse ] ! ! !CriticToolbar methodsFor: 'protocol' stamp: 'SimonAllier 3/27/2013 10:26' prior: 33890606! rule: aRule ruleHolder contents: aRule. transformModel enabled: aRule isTransformationRule ! ! !CriticToolbar methodsFor: 'private' stamp: 'SimonAllier 3/29/2013 10:49' prior: 33890866! transformCritic criticHolder contents ifNotNil: [:critic | ruleHolder contents transform: critic ] ! ! !CompiledMethod methodsFor: '*NautilusCommon' stamp: 'CAMILLETERUEL 3/29/2013 11:52' prior: 19774176! containsHalt ^ self literals includesAnyOf: #( halt halt: halt:onCount: haltIf: haltIfNil haltIfShiftPressed haltOnCount: haltOnce).! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/21/2013 15:18'! mcWorkingCopy MCWorkingCopy managersForClass: self methodClass selector: self selector do: [ :package | ^ package ]! ! !CompiledMethod methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/27/2013 11:04'! textBehavior ^ self methodClass! ! !RBMultiEnvironment methodsFor: '*Manifest-CriticBrowser' stamp: 'SimonAllier 3/27/2013 10:14'! smallLintCritics ^ self asSelectorEnvironment smallLintCritics! ! !RGMethodDefinition methodsFor: '*NautilusCommon' stamp: 'CAMILLETERUEL 3/29/2013 11:52' prior: 31689625! containsHalt ^ self literals includesAnyOf: #(halt halt: halt:onCount: haltIf: haltIfNil haltIfShiftPressed haltOnCount: haltOnce)! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'SimonAllier 3/22/2013 15:16' prior: 33873332! testToDoOf | rule | rule := RBCompositeLintRule allGoodRules. smc runRules: rule onPackage: self package. self assert: (( smc toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method3)]). self deny: (( smc toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method2)]).! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'SimonAllier 3/22/2013 15:13' prior: 25352164! rejectRules ^ #('LawOfDemeterRule' 'MethodHasNoTimeStampRule')! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'SimonAllier 3/21/2013 14:07' prior: 25352571! ruleCodeCruftLeftInMethodsRuleV1TODO ^ #(#(#(#RGMethodDefinition #(#SingleRuleCriticBrowser #addCriticWithCommentToFalsePositive #false)) #'2013-02-06T15:08:32.572+01:00') #(#(#RGMethodDefinition #(#SingleRuleCriticBrowser #addCriticWithCommentToToDo #false)) #'2013-02-06T15:08:32.572000001+01:00') #(#(#RGMethodDefinition #(#SingleRuleCriticBrowser #removeRuleToFalsePositive #false)) #'2013-03-21T14:07:34.827+01:00') #(#(#RGMethodDefinition #(#SingleRuleCriticBrowser #addRuleToFalsePositive #false)) #'2013-03-21T14:07:34.827000001+01:00') )! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'SimomAllier 3/25/2013 16:31'! ruleMissingSubclassResponsibilityRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#SelectPackageBrowser #addItems #false)) #'2013-03-25T16:31:39.782000002+01:00') #(#(#RGMethodDefinition #(#SelectRuleBrowser #addAllItems #false)) #'2013-03-25T16:31:39.782000003+01:00') #(#(#RGMethodDefinition #(#SelectPackageBrowser #removeAllItems #false)) #'2013-03-25T16:31:39.782000005+01:00') #(#(#RGMethodDefinition #(#SelectPackageBrowser #removeItems #false)) #'2013-03-25T16:31:39.782000006+01:00') #(#(#RGMethodDefinition #(#SelectRuleBrowser #removeAllItems #false)) #'2013-03-25T16:31:39.782000004+01:00') #(#(#RGMethodDefinition #(#SelectRuleBrowser #addItems #false)) #'2013-03-25T16:31:39.782+01:00') #(#(#RGMethodDefinition #(#SelectRuleBrowser #removeItems #false)) #'2013-03-25T16:31:39.782000001+01:00') #(#(#RGMethodDefinition #(#SelectPackageBrowser #addAllItems #false)) #'2013-03-25T16:31:39.782000007+01:00') )! ! !CriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 3/25/2013 13:23' prior: 33895854! initializeDisplayBlockForRules rulesModel displayBlock: [:rule || falsePositives toDos total text unknown | falsePositives := (cache falsePositiveOf: rule) size. toDos := (cache toDosOf: rule) size. total := (cache criticsOf: rule) size. unknown := total - falsePositives - toDos. text := String streamContents: [:s | s << rule name << ' (FP: ' << falsePositives asString << ', ToDo: ' << toDos asString << ', Unclassfied: ' << unknown asString << ')' ]. total isZero ifTrue: [ text ] ifFalse: [ falsePositives >= total ifTrue: [ text asText makeAllColor: criticModel falsePositiveColor] ifFalse: [ text asText makeAllColor: criticModel defaultColor ]]]! ! !CriticBrowser methodsFor: 'initialization' stamp: 'SimomAllier 3/25/2013 13:44' prior: 33896695! initializePresenter rulesModel whenSelectedItemChanged: [ :rule | (rule isNil or: [ rule isComposite ]) ifFalse: [ criticModel resetSelection. criticModel rule: rule. criticModel setTextModelForNil]. self updateTree. self setTitle: rule name] ! ! !CriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 3/27/2013 11:10' prior: 33897024! initializeWidgets title := 'Critic Browser'. self instantiateModels: #( rulesModel TreeModel resetButton ButtonModel logButton ButtonModel ). self setLogButton. self setResetButton. criticModel := SingleRuleCriticBrowser new. rulesModel childrenBlock: [ :rule | rule isComposite ifTrue: [ rule rules ] ifFalse: [ #() ]]. rulesModel menu: [:a :b | self menu: a shifted: b ]. self initializeDisplayBlockForRules. self focusOrder add: rulesModel; add: criticModel! ! !CriticBrowser methodsFor: 'private' stamp: 'SimonAllier 3/27/2013 11:11' prior: 33900285! reapplyAllRules | ruleCount total rule | ruleCount := 0. rule := rulesModel getRoots first. total := rule leaves size. rule leaves do: [ :r | ruleCount := ruleCount + 1. self setTitle: (String streamContents: [:s | s << 'run rules: ' << r name << ' (' << ruleCount asString << '/' << total asString <<')']). self reapplyRule: r ]. self setTitle: 'Critics Browser'. rulesModel updateTree! ! !CriticBrowser methodsFor: 'thread' stamp: 'SimonAllier 3/27/2013 13:26' prior: 20244601! updateTree thread ifNotNil: [ thread terminate ]. thread := [ WorldState addDeferredUIMessage: [ criticModel updateList. rulesModel updateTree ]] fork.! ! !SelectBrowser methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:26' prior: 33903125! initialExtent ^ 450@360! ! !SelectBrowser methodsFor: 'protocol' stamp: '' prior: 32894627! nextAction self subclassResponsibility ! ! !SelectBrowser methodsFor: 'accessing' stamp: 'SimonAllier 3/22/2013 15:16' prior: 32892686! nextButtonModel ^ nextButtonModel! ! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:28' prior: 33904278! initialize | wrappingBlock | super initialize. toSelectModel := self instantiate: ListComposableModel. selectedModel := self instantiate: ListComposableModel. selectedModel beMultipleSelection. toSelectModel beMultipleSelection. testPackage := OrderedCollection new. wrappingBlock := [ :package | package packageName ]. toSelectModel displayBlock: wrappingBlock. selectedModel displayBlock: wrappingBlock.! ! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:29' prior: 33904812! initializeWidgets super initializeWidgets. self instantiateModels: #( addTestCaseClassesModel CheckBoxModel removeTestPackageModel ButtonModel). self setRemoveTestPackageModel. addTestCaseClassesModel label: 'remove all TestCase Classes'. addTestCaseClassesModel state: true.! ! !SelectPackageBrowser methodsFor: 'protocol' stamp: 'SimonAllier 1/31/2013 13:20' prior: 32898618! nextAction | env package| package := selectedModel listItems. env := RBPackageEnvironment new packages: package. SelectRuleBrowser openWithEnvironment: env removeTestCase: self addTestCaseClasses state. self delete ! ! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'SimomAllier 3/25/2013 13:47' prior: 33905217! removeTestPackage | matchText | testPackage isEmpty ifTrue: [ removeTestPackageModel label: 'Add All Packages Tests'. matchText := '*Test*'. testPackage :=MCWorkingCopy allManagers select: [ :package | matchText match: package packageName ]. selectedModel items: (self sort:(selectedModel listItems \ testPackage)). toSelectModel items: (self sort:(toSelectModel listItems \ testPackage)) ] ifFalse: [ removeTestPackageModel label: 'Remove All Packages Tests'. toSelectModel items: (self sort: (toSelectModel listItems asOrderedCollection addAll: testPackage; yourself)). testPackage := OrderedCollection new ]. toSelectModel updateList. selectedModel updateList. ! ! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'SimonAllier 1/28/2013 11:11' prior: 32897459! removeTestPackageModel ^ removeTestPackageModel ! ! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'SimonAllier 1/28/2013 10:52' prior: 32897610! setRemoveTestPackageModel removeTestPackageModel state: false; label: 'Remove All Packages Tests'; action: [ self removeTestPackage ]. ! ! !RBCompositeLintRule class methodsFor: '*Manifest-Core' stamp: 'SimomAllier 3/25/2013 15:52' prior: 30441863! removedRules ^ {(RBCompositeLintRule new name: 'Spelling'). RBMissingTranslationsInMenusRule new. RBGuardingClauseRule new. RBMethodModifierOverrideRule new. RBMethodModifierSuperRule new. RBMethodModifierFinalRule new. RBAssignmentWithoutEffectRule new. RBUtilityMethodsRule new. RBMethodHasNoTimeStampRule new. } ! ! !BuilderManifest class methodsFor: 'utils' stamp: 'SimonAllier 3/22/2013 13:37'! manifestClassComment ^ 'I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser'! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'SimonAllier 3/21/2013 14:41' prior: 33906741! addAllFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addAllItem: fp selector: selector. fp do: [:each | (self containsToDo: each onRule: ruleId version: versionId) ifTrue: [ self removeToDo: each of: ruleId version: versionId ]] ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:25' prior: 33909537! addRejectClass: aClass | falsePositives | falsePositives := manifestClass rejectClasses asOrderedCollection . ((self unwrap: falsePositives) anySatisfy: [:each | each = aClass]) ifTrue: [ ^ self ]. falsePositives add: {aClass asRingDefinition arrayStringForManifest. DateAndTime current asString}. self compileSelector: (self class rejectClassesTag) returnValue: (self buildArrayString: falsePositives) ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:11' prior: 33910113! addRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asSet. nfp add: ruleId. nfp := nfp asArray. self compileSelector: (self class rejectRulesTag) returnValue: nfp asString ! ! !BuilderManifest methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 11:22' prior: 18533264! buildArrayString: aCollection ^ String streamContents: [:stream | stream << '#('. aCollection do: [:each | stream nextPutAll: '#('. stream nextPutAll: each first printString. stream nextPutAll: ' '. stream nextPutAll: (each at: 2) asSymbol printString. stream nextPutAll: ') '.]. stream << ')']! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:39' prior: 33914543! createManifestNamed: packageName manifestClass := Object subclass: (self class manifestTag, packageName onlyLetters) asSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: packageName. manifestClass comment: self class manifestClassComment. manifestClass class compile: (self class rejectClassesTag, Character cr asString, '^ #()') classified: 'meta data'. manifestClass class compile: (self class rejectRulesTag, Character cr asString, '^ #()') classified: 'meta data'. ^ manifestClass! ! !BuilderManifest methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 13:21'! dateOf: ringobject forSelector: aSelector | critics | critics := manifestClass perform: aSelector. ^ ((critics detect: [:each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = ringobject ]) at: 2) asDateAndTime ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:22' prior: 33915140! dateOfFalsePositive: aItem onRule: ruleId version: versionId (self hasFalsePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorFalsePositiveOf: ruleId version: versionId) ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:23' prior: 33915726! dateOfToDo: aItem onRule: ruleId version: versionId (self hasToDoOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorToDoOf: ruleId version: versionId) ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:23' prior: 33916294! dateOfTruePositive: aItem onRule: ruleId version: versionId (self hasTruePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorTruePositiveOf: ruleId version: versionId) ! ! !BuilderManifest methodsFor: 'comparing' stamp: 'SimonAllier 3/21/2013 14:07' prior: 18524200! hash ^ manifestClass hash bitXor: self class hash! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:12' prior: 33917078! installFalsePositiveOf: ruleId version: versionId self compileSelector: (self selectorFalsePositiveOf: ruleId version: versionId) returnValue: '#()' ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:13' prior: 18529976! installToDoOf: ruleId version: versionId self compileSelector: (self selectorToDoOf: ruleId version: versionId) returnValue: '#()' ! ! !BuilderManifest methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:13' prior: 33917368! installTruePositiveOf: ruleId version: versionId self compileSelector: (self selectorTruePositiveOf: ruleId version: versionId) returnValue: '#()' ! ! !BuilderManifest methodsFor: 'private' stamp: 'SimonAllier 3/21/2013 15:20' prior: 33918967! packageNameOf: elem ^ elem mcWorkingCopy packageName "elem isCompiledMethod ifTrue: [MCWorkingCopy managersForClass: (elem methodClass) selector: (elem selector) do: [: package | ^ package packageName ]] ifFalse: [MCWorkingCopy managersForClass: elem do: [: package | ^ package packageName ]] "! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:14' prior: 33921968! removeRejectClass: aClass | classes | classes := manifestClass rejectClasses asOrderedCollection. classes := classes reject: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = aClass asRingDefinition ]. self compileSelector: (self class rejectClassesTag) returnValue: (self buildArrayString: classes) ! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:14' prior: 33922486! removeRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asOrderedCollection. nfp remove: ruleId ifAbsent: [^ self]. nfp := nfp asArray. self compileSelector: (self class rejectRulesTag) returnValue: nfp asString ! ! !BuilderManifest methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 13:43' prior: 33924495! unwrap: aCollection | unwrapCollection rgobject | unwrapCollection := OrderedCollection new. aCollection do: [ :each | rgobject := (Smalltalk globals at: each first first) manifestReadOn: (each first at: 2). (rgobject isClass and: [ rgobject realClass notNil ]) ifTrue: [ unwrapCollection add: rgobject realClass ]. (rgobject isMethod and: [ rgobject method notNil ]) ifTrue: [ unwrapCollection add: rgobject method ] ]. ^ unwrapCollection! ! !ManifestManifestCore commentStamp: '' prior: 34138857! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'SimonAllier 3/22/2013 15:13' prior: 25332439! rejectRules ^ #('LawOfDemeterRule' 'MethodHasNoTimeStampRule')! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'SimonAllier 3/22/2013 15:13'! ruleClassNotReferencedRuleV1FalsePositive ^ #(#(#(#RGClassDefinition #(#RBRemoveAssignmentWithoutEffectRule)) #'2013-03-22T15:13:33.961+01:00') )! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'SimonAllier 3/22/2013 11:32'! ruleSentNotImplementedRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#ClassDescription #criticNameOn: #false)) #'2013-03-22T11:32:46.828+01:00') )! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/25/2013 13:02'! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/27/2013 11:03'! textBehavior ^ nil! ! !RBAsOrderedCollectionNotNeededRule methodsFor: 'initialization' stamp: 'CAMILLETERUEL 3/29/2013 12:42' prior: 30239938! initialize super initialize. #('addAll:' 'withAll:' 'removeAll:' 'includesAll:' 'copyWithoutAll:') do: [ :collectionMessage | #('asArray' 'asOrderedCollection' 'asSortedCollection') do: [ :conversionMessage | | baseString | baseString := '``@receiver ' , collectionMessage , ' ``@arg '. self rewriteRule replace: baseString , conversionMessage with: baseString ] ]! ! !RBCodeCruftLeftInMethodsRule methodsFor: 'initialization' stamp: 'CAMILLETERUEL 3/29/2013 12:00' prior: 30425650! initialize super initialize. #('`@object clearHaltOnce' '`@object doOnlyOnce: `@object1' '`@object halt' '`@object halt: `@object1 onCount: `@object2' '`@object haltOnCount: `@object1' '`@object haltOnce' '`@object hatIf: `@object1' '`@object inspectOnCount: `@object1' '`@object inspectOnce' '`@object inspectUntilCount: `@object1' '`@object rearmOneShot' '`@object setHaltOnce' '`@object flag: `@object1' '`@object isThisEverCalled' '`@object isThisEverCalled: `@object1' '`@object logEntry' '`@object logExecution' '`@object logExit' '`@object needsWork' 'Transcript `@message: `@object1') do: [ :matchingString | self rewriteRule replace: matchingString with: '' ]! ! !RBRemoveAssignmentWithoutEffectRule commentStamp: '' prior: 34139069! See my #longDescription .! !RBTransformationRule methodsFor: '*Manifest-Core' stamp: 'SimonAllier 3/29/2013 10:59'! transform: aCritic | changeCode | changeCode := (self changes detect: [ :ch | (ch isMeta = aCritic methodClass isMeta) & (ch changeClassName = aCritic criticTheNonMetaclassClass name) & (ch selector = aCritic selector)]) source. aCritic methodClass compile: changeCode! ! !RBVariableEnvironment methodsFor: '*manifest-core' stamp: 'SimonAllier 3/27/2013 10:12'! smallLintCritics ^ self allClasses! ! CommentWindow removeSelector: #rule:! CommentWindow removeSelector: #okCancelToolBar! CommentWindow removeSelector: #okAction:! CommentWindow removeSelector: #initializeWidgets! CommentWindow removeSelector: #initialize! CommentWindow removeSelector: #initialExtent! CommentWindow removeSelector: #critic:! CommentWindow removeSelector: #commentInputField! CommentWindow removeSelector: #builderManifestClass! CommentWindow class removeSelector: #title! CommentWindow class removeSelector: #defaultSpec! CommentToDoWindow removeSelector: #initializeTextForToDo! CommentToDoWindow removeSelector: #initializeForToDo! CommentToDoWindow class removeSelector: #openOnCritic:onRule:! Smalltalk globals removeClassNamed: #CommentToDoWindow! CommentFalsePositiveWindow removeSelector: #initializeWidgets! CommentFalsePositiveWindow removeSelector: #initializeTextForFalsePositive! CommentFalsePositiveWindow removeSelector: #initializeForFalsePositive! CommentFalsePositiveWindow class removeSelector: #openOnCritic:onRule:! Smalltalk globals removeClassNamed: #CommentFalsePositiveWindow! Smalltalk globals removeClassNamed: #CommentWindow! RBEndTrueFalseRule removeSelector: #severity! RBEndTrueFalseRule removeSelector: #rationale! RBEndTrueFalseRule removeSelector: #name! RBEndTrueFalseRule removeSelector: #longDescription! RBEndTrueFalseRule removeSelector: #initialize! RBEndTrueFalseRule removeSelector: #group! RBEndTrueFalseRule removeSelector: #category! RBEndTrueFalseRule class removeSelector: #uniqueIdentifierName! RBEndTrueFalseRule class removeSelector: #identifierMinorVersionNumber! Smalltalk globals removeClassNamed: #RBEndTrueFalseRule! BuilderManifest removeSelector: #version:critic:onRule:criticSelector:! BuilderManifest removeSelector: #commentOfToDo:onRule:version:! BuilderManifest removeSelector: #commentOfFalsePositive:onRule:version:! BuilderManifest removeSelector: #addToDo:withComment:of:version:! BuilderManifest removeSelector: #addItem:wihtComment:selector:! BuilderManifest removeSelector: #addFalsePositive:withComment:of:version:! SingleRuleCriticBrowser removeSelector: #setTextModelForMethod:! SingleRuleCriticBrowser removeSelector: #setTextModelForClass:! SingleRuleCriticBrowser removeSelector: #addCriticWithCommentToToDo! SingleRuleCriticBrowser removeSelector: #addCriticWithCommentToFalsePositive! CriticBrowser removeSelector: #resetWorkingConfiguration! BuilderManifestTest removeSelector: #testCommentOfFalsePositive! "Manifest-Core"! "Manifest-CriticBrowser"! "Manifest-Tests"! "NautilusCommon"! "Refactoring-Critics"! ----End fileIn----! ----QUIT----an Array(29 March 2013 3:35:31 pm) Pharo.image priorSource: 574277! ----STARTUP----an Array(29 March 2013 3:45:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 March 2013 3:45:54 pm) Pharo-30017.image priorSource: 620903! ----STARTUP----an Array(30 March 2013 8:20:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/30/2013 20:16' prior: 34129012! commentForCurrentUpdate ^ '10178 Changing some rule parameter and kill law of Demeter rule https://pharo.fogbugz.com/f/cases/10178/ 10176 Spec layout enhancement 2 https://pharo.fogbugz.com/f/cases/10176 10038 Wrong deprecated message https://pharo.fogbugz.com/f/cases/10038 10125 Clean up #showAnnotationPane in Monticello Tools https://pharo.fogbugz.com/f/cases/10125/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/30/2013 20:16'! script117 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.247.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1350.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1386.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.438.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.785.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.35.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.87.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.95.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.525.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/30/2013 20:17'! update30018 "self new update30018" self withUpdateLog: '10178 Changing some rule parameter and kill law of Demeter rule https://pharo.fogbugz.com/f/cases/10178/ 10176 Spec layout enhancement 2 https://pharo.fogbugz.com/f/cases/10176 10038 Wrong deprecated message https://pharo.fogbugz.com/f/cases/10038 10125 Clean up #showAnnotationPane in Monticello Tools https://pharo.fogbugz.com/f/cases/10125/'. self loadTogether: self script117 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCCodeTool commentStamp: 'nk 11/10/2003 22:00' prior: 24659037! MCCodeTool is an abstract superclass for those Monticello browsers that display code. It contains copies of the various CodeHolder methods that perform the various menu operations in the method list. ! !MCMergeBrowser methodsFor: 'morphic ui' stamp: 'MarcusDenker 3/25/2013 13:05' prior: 24832823! widgetSpecs "ToolBuilder doesn't know about innerButtonRow. Made explicit here." ^#( ((buttonRow) (0 0 1 0) (0 0 0 30)) ((listMorph:selection:menu: list selection methodListMenu:) (0 0 1 0.4) (0 30 0 0)) ((buttonRow: #((Keep chooseRemote 'keep the selected change' selectionIsConflicted) (Reject chooseLocal 'reject the selected change' selectionIsConflicted))) (0 0.4 1 0.4) (0 0 0 32)) ((textMorph: text) (0 0.4 1 1) (0 32 0 0)) ) ! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/29/2013 15:18'! newColumn: aBlock left: left right: right left isInteger ifTrue: [ right isInteger ifTrue: [ self newColumn: aBlock origin: 0@0 corner: 1@1 offsetOrigin: left@0 offsetCorner: (right negated)@0 ] ifFalse: [ self newColumn: aBlock origin: 0@0 corner: (1-right)@1 offsetOrigin: left@0 offsetCorner: 0@0 ] ] ifFalse: [ right isInteger ifTrue: [ self newColumn: aBlock origin: left@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: (right negated)@0 ] ifFalse: [ self newColumn: aBlock origin: left@0 corner: (1-right)@1 offsetOrigin: 0@0 offsetCorner: 0@0 ] ]! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/29/2013 15:37' prior: 50713771! newColumn: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isSymbol ifTrue: [ block := [:c | c add: aBlock ] ]. commands add: (SpecLayoutAddColumn block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/29/2013 15:27' prior: 50714967! newRow: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isSymbol ifTrue: [ block := [:r | r add: block ] ]. commands add: (SpecLayoutAddRow block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 3/29/2013 15:26'! newRow: aBlock top: top bottom: bottom top isInteger ifTrue: [ "offset in pixels" bottom isInteger ifTrue: [ self newRow: aBlock origin: 0@0 corner: 1@1 offsetOrigin: 0@top offsetCorner: 0@(bottom negated) ] ifFalse: [ self newRow: aBlock origin: 0@0 corner: 1@(1-bottom) offsetOrigin: 0@top offsetCorner: 0@0 ] ] ifFalse: [ "proportional specification" bottom isInteger ifTrue: [ self newRow: aBlock origin: 0@top corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@(bottom negated)] ifFalse: [ self newRow: aBlock origin: 0@top corner: 1@(1-bottom) offsetOrigin: 0@0 offsetCorner: 0@0 ] ]! ! !MCPatchBrowser methodsFor: 'selecting' stamp: 'MarcusDenker 3/25/2013 13:09' prior: 24921958! selection: aNumber selection := aNumber = 0 ifFalse: [self items at: aNumber]. self changed: #selection; changed: #text.! ! !MCPatchBrowser methodsFor: 'morphic ui' stamp: 'MarcusDenker 3/25/2013 13:06' prior: 24920996! widgetSpecs ^#( ((listMorph:selection:menu:keystroke: list selection methodListMenu: methodListKey:from:) (0 0 1 0.4) (0 0 0 0)) ((textMorph: text) (0 0.4 1 1)) ) ! ! !MCSnapshotBrowser methodsFor: 'selecting' stamp: 'MarcusDenker 3/25/2013 13:08' prior: 25007917! categorySelection: aNumber categorySelection := aNumber = 0 ifFalse: [self visibleCategories at: aNumber]. self classSelection: 0. self changed: #categorySelection; changed: #classList. ! ! !MCSnapshotBrowser methodsFor: 'selecting' stamp: 'MarcusDenker 3/25/2013 13:08' prior: 25008399! classSelection: aNumber classSelection := aNumber = 0 ifFalse: [self visibleClasses at: aNumber]. self protocolSelection: 0. self changed: #classSelection; changed: #protocolList; changed: #methodList. ! ! !MCSnapshotBrowser methodsFor: 'selecting' stamp: 'MarcusDenker 3/25/2013 13:08' prior: 25008910! methodSelection: aNumber methodSelection := aNumber = 0 ifFalse: [self visibleMethods at: aNumber]. self changed: #methodSelection; changed: #text.! ! !MCSnapshotBrowser methodsFor: 'selecting' stamp: 'MarcusDenker 3/25/2013 13:09' prior: 25009363! protocolSelection: anInteger protocolSelection := (anInteger = 0 ifFalse: [self visibleProtocols at: anInteger]). self methodSelection: 0. self changed: #protocolSelection; changed: #methodList.! ! !MCSnapshotBrowser methodsFor: 'morphic ui' stamp: 'MarcusDenker 3/25/2013 13:05' prior: 25006815! widgetSpecs ^#( ((listMorph: category) (0 0 0.25 0.4)) ((listMorph: class) (0.25 0 0.50 0.4) (0 0 0 -30)) ((listMorph: protocol) (0.50 0 0.75 0.4)) ((listMorph:selection:menu:keystroke: methodList methodSelection methodListMenu: methodListKey:from:) (0.75 0 1 0.4)) ((buttonRow) (0.25 0.4 0.5 0.4) (0 -30 0 0)) ((textMorph: text) (0 0.4 1 1)) ) ! ! !RBExcessiveMethodsRule methodsFor: 'private' stamp: 'CamilleTeruel 3/29/2013 17:43' prior: 30548570! methodsCount ^ 60! ! !MCSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 3/25/2013 13:04' prior: 25059917! monticelloSettingsOn: aBuilder (aBuilder group: #monticello) label: 'Monticello' translated; description: 'All Monticello settings' translated; with: [ (aBuilder setting: #defaultDirectoryName) type: #FileDirectory; target: MCDirectoryRepository; description: 'The path of a directory where you want to start out when choosing local repository locations' translated; label: 'Default local repository directory'. (aBuilder setting: #cacheDirectory) type: #FileDirectory; target: MCCacheRepository; description: 'The path of the local repository cache' translated; label: 'Local cache directory'. ].! ! !MCCodeTool commentStamp: 'nk 11/10/2003 22:00' prior: 34186038! MCCodeTool is an abstract superclass for those Monticello browsers that display code. It contains copies of the various CodeHolder methods that perform the various menu operations in the method list. ! !RBLongMethodsRule methodsFor: 'private' stamp: 'CamilleTeruel 3/29/2013 17:44' prior: 30744265! longMethodSize ^ 20! ! !MCChangeSelector methodsFor: 'as yet unclassified ' stamp: 'MarcusDenker 3/25/2013 13:06' prior: 24623307! widgetSpecs ^#( ((buttonRow) (0 0 1 0) (0 0 0 30)) ((multiListMorph:selection:listSelection:menu: list selection listSelectionAt: methodListMenu:) (0 0 1 0.4) (0 30 0 0)) ((buttonRow: #(('Select All' selectAll 'select all changes') ('Select None' selectNone 'select no changes'))) (0 0.4 1 0.4) (0 0 0 30)) ((textMorph: text) (0 0.4 1 1) (0 30 0 0)) ) ! ! !Object methodsFor: 'error handling' stamp: 'MarcusDenker 3/26/2013 13:17' prior: 28605797! deprecated: anExplanationString "this is not itself deprecated, but a compatibility method for old-style deprecation" (Deprecation method: thisContext sender method explanation: anExplanationString on: 'unknown' in: 'unknown') signal! ! MCCodeTool removeSelector: #annotations! MCCodeTool class removeSelector: #showAnnotationPane:! MCCodeTool class removeSelector: #showAnnotationPane! RBLawOfDemeterRule removeSelector: #rationale! RBLawOfDemeterRule removeSelector: #name! RBLawOfDemeterRule removeSelector: #initialize! RBLawOfDemeterRule removeSelector: #group! Smalltalk globals removeClassNamed: #RBLawOfDemeterRule! MCSnapshotBrowser removeSelector: #annotations:! MCSnapshotBrowser removeSelector: #annotations! Annotation class removeSelector: #defaultAnnotationInfo! Annotation class removeSelector: #annotationRequests:! Annotation class removeSelector: #annotationRequests! Smalltalk globals removeClassNamed: #Annotation! MCDefinition removeSelector: #annotations:! MCDefinition removeSelector: #annotations! MCSnapshotBrowserTest removeSelector: #testAnnotationPane! MCPatchOperation removeSelector: #annotations:! MCPatchOperation removeSelector: #annotations! MCPatchBrowser removeSelector: #annotations! "Kernel"! "Monticello"! "MonticelloGUI"! "Refactoring-Critics"! "Settings-Monticello"! "Spec-Layout"! "System-Tools"! "Tests"! ----End fileIn----! ----QUIT----an Array(30 March 2013 8:20:31 pm) Pharo.image priorSource: 621102! ----STARTUP----an Array(30 March 2013 8:30:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 March 2013 8:30:35 pm) Pharo-30018.image priorSource: 640425! ----STARTUP----an Array(31 March 2013 7:49:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/31/2013 19:46' prior: 34175834! commentForCurrentUpdate ^ '10162 multiple selection of methods in method pane if CompiledMethods are equal https://pharo.fogbugz.com/f/cases/10162 10071 Useless Morphic classes https://pharo.fogbugz.com/f/cases/10071 7485 .st command line handler should support shebang https://pharo.fogbugz.com/f/cases/7485 10161 asLegalSelector should return a... selector https://pharo.fogbugz.com/f/cases/10161'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/31/2013 19:47'! script118 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.149.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.586.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.104.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1350.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1387.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.785.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.35.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.95.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.525.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/31/2013 19:47'! update30019 "self new update30019" self withUpdateLog: '10162 multiple selection of methods in method pane if CompiledMethods are equal https://pharo.fogbugz.com/f/cases/10162 10071 Useless Morphic classes https://pharo.fogbugz.com/f/cases/10071 7485 .st command line handler should support shebang https://pharo.fogbugz.com/f/cases/7485 10161 asLegalSelector should return a... selector https://pharo.fogbugz.com/f/cases/10161'. self loadTogether: self script118 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BasicCodeLoader methodsFor: 'installing' stamp: 'CamilloBruni 3/23/2013 11:48' prior: 17991828! installSourceFile: aReference "Install the the source file given by aFileReference" | codeImporter | " parse the code given in the source file" aReference readStreamDo: [ :stream | self handleErrorsDuring: [ codeImporter := CodeImporter fileStream: stream. codeImporter skipShebang parseDeclarations ] reference: aReference]. "evaluate the declarations in a second step to allow for properly closing the source file stream" self handleErrorsDuring: [ codeImporter evaluate ] reference: aReference.! ! !MethodWidget methodsFor: 'private' stamp: 'NorbertHartl 3/28/2013 12:46' prior: 26518558! initialize super initialize. methodsSelection := IdentityDictionary new.! ! !String methodsFor: 'converting' stamp: 'SeanDeNigris 3/28/2013 08:06' prior: 51084499! asLegalSelector "'234znak 43 ) 2' asLegalSelector2" | toUse | toUse := self select: [:char | char isAlphaNumeric]. (toUse size = 0 or: [ toUse first isLetter not ]) ifTrue: [ toUse := 'v', toUse ]. ^ toUse withFirstCharacterDownshifted asSymbol. ! ! !CodeImporter methodsFor: '*System-CommandLine' stamp: 'CamilloBruni 3/23/2013 11:54'! shebang readStream position: 0. (readStream next: 2) = '#!!' ifFalse: [ readStream position: 0. ^ self ]. "here we found the shebang, so skip the first line" ^ readStream nextLine. ! ! !CodeImporter methodsFor: '*System-CommandLine' stamp: 'CamilloBruni 3/23/2013 11:54'! skipShebang "Skip the shebang sequnce #!! at the beginning of a bash file" readStream position = 0 ifFalse: [ ^ self "#!! can only be skipped at the beginning" ]. self shebang. ! ! Smalltalk globals removeClassNamed: #ForwardingSystemProgressItem! ProgressIndicatorMorph removeSelector: #drawOn:! Smalltalk globals removeClassNamed: #ProgressIndicatorMorph! "Collections-Strings"! "Morphic"! "Nautilus"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(31 March 2013 7:49:30 pm) Pharo.image priorSource: 640624! ----STARTUP----an Array(31 March 2013 7:55:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 March 2013 7:55:26 pm) Pharo-30019.image priorSource: 653100! ----STARTUP----an Array(2 April 2013 11:03:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/1/2013 20:50' prior: 34195356! commentForCurrentUpdate ^ '7235 We should move KeyedTree from Polymorph-Widgets to Collections-Unordered https://pharo.fogbugz.com/f/cases/7235 7540 Etoys related cleanup in CursorWIthAlpha https://pharo.fogbugz.com/f/cases/7540'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/1/2013 20:51'! script119 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.588.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1350.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1388.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.35.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.95.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.12.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/1/2013 20:51'! update30020 "self new update30020" self withUpdateLog: '7235 We should move KeyedTree from Polymorph-Widgets to Collections-Unordered https://pharo.fogbugz.com/f/cases/7235 7540 Etoys related cleanup in CursorWIthAlpha https://pharo.fogbugz.com/f/cases/7540'. self loadTogether: self script119 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KeyedTree commentStamp: '' prior: 24223634! Provides path based access to elements contained in the receiver and any subtrees. Example: (KeyedTree new at: 1 put: 'One'; at: 2 put: 'Two'; at: 'Tree' put: (KeyedTree new at: $a put: 'Tree-A'; at: $b put: 'Tree-B'; yourself); yourself) atPath: #('Tree' $b)! !CursorWithAlpha commentStamp: '' prior: 20300503! A 32-bit ARGB Cursor of arbitrary extent (some platforms may limit the size). Compositing assumes alpha is pre-multiplied.! !KeyedTree commentStamp: '' prior: 34217928! Provides path based access to elements contained in the receiver and any subtrees. Example: (KeyedTree new at: 1 put: 'One'; at: 2 put: 'Two'; at: 'Tree' put: (KeyedTree new at: $a put: 'Tree-A'; at: $b put: 'Tree-B'; yourself); yourself) atPath: #('Tree' $b)! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 12/15/2005 13:57' prior: 24223984! allKeys "Answer an ordered collection of the keys of the receiver and any subtrees. Please no circular references!!" |answer| answer := OrderedCollection new. answer addAll: self keys. self subtrees do: [:t | answer addAll: t allKeys]. ^answer! ! !KeyedTree methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2011 13:30' prior: 24224317! atPath: anArray "Answer the element referenced by the give key path. Signal an error if not found." ^self atPath: anArray ifAbsent: [self errorKeyNotFound: anArray]! ! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 2/1/2006 11:01' prior: 24224554! atPath: anArray ifAbsent: aBlock "Answer the element referenced by the given key path. Answer the value of aBlock if not found." |element| element := self. anArray do: [:key | element := element at: key ifAbsent: [^aBlock value]]. ^element! ! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 2/1/2006 11:01' prior: 24224871! atPath: anArray ifAbsentPut: aBlock "Answer the element referenced by the given key path. Answer the value of aBlock if not found after creating its path." |element| anArray isEmpty ifTrue: [^self]. element := self. anArray allButLastDo: [:key | element := element at: key ifAbsentPut: [self species new]]. ^element at: anArray last ifAbsentPut: aBlock! ! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 2/1/2006 11:00' prior: 24225304! atPath: anArray put: aBlock "Answer the value of aBlock after creating its path." |element| anArray isEmpty ifTrue: [^self]. element := self. anArray allButLastDo: [:key | element := element at: key ifAbsentPut: [self species new]]. ^element at: anArray last put: aBlock! ! !KeyedTree methodsFor: 'printing' stamp: 'gvc 1/17/2008 16:06' prior: 24226910! formattedText "Answer a string or text representing the receiver with indentation and, possibly, markup." |str| str := String new writeStream. self putFormattedTextOn: str level: 0 indentString: ' '. ^str contents! ! !KeyedTree methodsFor: 'printing' stamp: 'gvc 1/17/2008 16:23' prior: 24227199! formattedTextWithDescriptions: aKeyedTree "Answer a string or text representing the receiver with indentation and, possibly, markup. Descriptions of each item are taken from the given tree with the same key structure as the receiver." |str| str := String new writeStream. self putFormattedTextOn: str withDescriptions: aKeyedTree level: 0 indentString: ' '. ^str contents! ! !KeyedTree methodsFor: 'adding' stamp: 'nice 1/5/2010 15:59' prior: 24226016! merge: aKeyedTree "Merge the given tree into the receiver, overwriting or extending elements as needed." aKeyedTree keysAndValuesDo: [:k :v | | subtree | (v isKindOf: KeyedTree) ifTrue: [subtree := self at: k ifAbsentPut: [v species new]. (subtree isKindOf: KeyedTree) not ifTrue: [subtree := self at: k put: v species new]. subtree merge: v] ifFalse: [self at: k put: v]]! ! !KeyedTree methodsFor: 'copying' stamp: 'nice 1/13/2010 21:46' prior: 24226488! postCopy "Must copy the associations, or later store will affect both the original and the copy. Copy any subtrees too!!" array := array collect: [:assoc | assoc ifNil: [nil] ifNotNil: [Association key: assoc key value: ((assoc value isKindOf: KeyedTree) ifTrue: [assoc value copy] ifFalse: [assoc value])]]! ! !KeyedTree methodsFor: 'printing' stamp: 'nice 1/5/2010 15:59' prior: 24227649! putFormattedTextOn: aStream level: indentLevel indentString: aString "Place a description of the receiver on the given stream with the given indentation level." (self keys asSortedCollection: self sortBlock) do: [:k | | v | indentLevel timesRepeat: [aStream nextPutAll: aString]. aStream nextPutAll: k printString. v := self at: k. (v isKindOf: self class) ifTrue: [aStream cr. v putFormattedTextOn: aStream level: indentLevel + 1 indentString: aString] ifFalse: [aStream nextPutAll: ' : '; nextPutAll: v printString. aStream cr]]! ! !KeyedTree methodsFor: 'printing' stamp: 'nice 1/5/2010 15:59' prior: 24228289! putFormattedTextOn: aStream withDescriptions: aKeyedTree level: indentLevel indentString: aString "Place a print of the receiver and associated description on the given stream with the given indentation level." (self keys asSortedCollection: self sortBlock) do: [:k | | v | indentLevel timesRepeat: [aStream nextPutAll: aString]. aStream nextPutAll: k printString. v := self at: k. (v isKindOf: self class) ifTrue: [aStream cr. v putFormattedTextOn: aStream withDescriptions: (aKeyedTree at: k ifAbsent: [self class new]) level: indentLevel + 1 indentString: aString] ifFalse: [aStream nextPutAll: ' : '; nextPutAll: v printString; tab; tab; nextPutAll: (aKeyedTree at: k ifAbsent: ['nondescript']) printString. aStream cr]]! ! !KeyedTree methodsFor: 'removing' stamp: 'CamilloBruni 4/11/2011 13:31' prior: 24229169! removePath: anArray "Remove and answer the element referenced by the given path. Signal an error if not found." ^self removePath: anArray ifAbsent: [self errorKeyNotFound: anArray]! ! !KeyedTree methodsFor: 'removing' stamp: 'gvc 10/20/2005 18:53' prior: 24229423! removePath: anArray ifAbsent: aBlock "Remove and answer the element referenced by the given path. Answer the value of aBlock if not found." |element| anArray isEmpty ifTrue: [^self]. element := self. anArray allButLastDo: [:key | element := element at: key ifAbsent: [^aBlock value]]. ^element removeKey: anArray last ifAbsent: aBlock ! ! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 1/17/2008 15:37' prior: 24225655! sortBlock "Answer the block to sort tree keys with." ^[:a :b | [a <= b] on: Error do: [a class name <= b class name]]! ! !KeyedTree methodsFor: 'accessing' stamp: 'gvc 12/15/2005 13:54' prior: 24225846! subtrees "Answer the subtrees of the receiver." ^(self select: [:v | v isKindOf: KeyedTree]) values! ! !CursorWithAlpha commentStamp: '' prior: 34218273! A 32-bit ARGB Cursor of arbitrary extent (some platforms may limit the size). Compositing assumes alpha is pre-multiplied.! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/9/2012 22:58' prior: 24230010! testAtPath "Test the at path method for success and failure modes." |tree t2| tree := KeyedTree new at: 1 put: (t2 := KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [(tree atPath: #(1)) = t2]. self should: [(tree atPath: #(1 two)) = 'One-Two']. self should: [(tree atPath: #(1 three)) = 'One-Three']. self should: [(tree atPath: #(2)) = 'Two']. self should: [tree atPath: #(2 4)] raise: self defaultTestError. self should: [tree atPath: #(1 two three)] raise: self defaultTestError. self should: [tree atPath: #(3)] raise: self defaultTestError.! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/9/2012 22:58' prior: 24230755! testAtPathIfAbsent "Test the at path if absent method for success and failure modes." |tree t2| tree := KeyedTree new at: 1 put: (t2 := KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [(tree atPath: #(1) ifAbsent: []) = t2]. self should: [(tree atPath: #(1 two) ifAbsent: []) = 'One-Two']. self should: [(tree atPath: #(1 three) ifAbsent: []) = 'One-Three']. self should: [(tree atPath: #(2) ifAbsent: []) = 'Two']. self should: [(tree atPath: #(2 4) ifAbsent: [#missing]) = #missing]. self should: [(tree atPath: #(1 two three) ifAbsent: [#missing]) = #missing] raise: self defaultTestError. self should: [(tree atPath: #(3) ifAbsent: [#missing]) = #missing].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/9/2012 22:57' prior: 24231614! testAtPathIfAbsentPut "Test the at path if absent put method for success and failure modes." |tree t2| tree := KeyedTree new at: 1 put: (t2 := KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [(tree atPath: #(1) ifAbsentPut: [#new]) = t2]. self should: [(tree atPath: #(1 two) ifAbsentPut: [#new]) = 'One-Two']. self should: [(tree atPath: #(1 three) ifAbsentPut: [#new]) = 'One-Three']. self should: [(tree atPath: #(2) ifAbsentPut: [#new]) = 'Two']. self should: [tree atPath: #(2 4) ifAbsentPut: [#new]] raise: self defaultTestError. self should: [tree atPath: #(1 two three) ifAbsentPut: [#new]] raise: self defaultTestError. self should: [(tree atPath: #(1 four one) ifAbsentPut: [#anotherNew]) = #anotherNew]. self should: [(tree atPath: #(1 four one)) = #anotherNew]. self should: [(tree atPath: #(3) ifAbsentPut: [#yetAnotherNew]) = #yetAnotherNew]. self should: [(tree atPath: #(3)) = #yetAnotherNew].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/9/2012 22:57' prior: 24232725! testAtPathPut "Test the at path put method for success and failure modes." |tree t2| tree := KeyedTree new at: 1 put: (KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [(tree atPath: #(1 two) put: #new) = #new]. self should: [(tree atPath: #(1 two)) = #new]. self should: [(tree atPath: #(1 three) put: (t2 := KeyedTree new)) = t2]. self should: [(tree atPath: #(1 three $1) put: #anotherNew) = #anotherNew]. self should: [(tree atPath: #(1 three $1)) = #anotherNew]. self should: [tree atPath: #(2 4) put: [#new]] raise: self defaultTestError. self should: [(tree atPath: #(1 four one) put: #anotherNew) = #anotherNew]. self should: [(tree atPath: #(1 four one)) = #anotherNew].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'gvc 1/22/2010 13:52' prior: 24233592! testCopy "Test the copy method for success and failure modes." |c tree t2 t3| tree := KeyedTree new at: 1 put: (t2 := KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; at: #four put: (t3 := KeyedTree new); yourself); at: 2 put: 'Two'; yourself. c := tree copy. self should: [c = tree]. self shouldnt: [c == tree]. self should: [(c at: 1) = t2]. self shouldnt: [(c at: 1) == t2]. self should: [(c atPath: #(1 four)) = t3]. self shouldnt: [(c atPath: #(1 four)) == t3].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'gvc 7/30/2009 18:37' prior: 24234198! testMerge "Test the merge method for success and failure modes." |t1 t2 m| t1 := KeyedTree new at: 1 put: (KeyedTree new at: #1 put: '1-1'; at: #2 put: '1-2'; at: #3 put: (KeyedTree new at: 1 put: '1-3-1'; at: 2 put: '1-3-2'; yourself); yourself); at: 2 put: '2'; yourself. t2 := KeyedTree new at: 1 put: (KeyedTree new at: #1 put: (KeyedTree new at: 1 put: '1-1-1'; at: 2 put: '1-1-2'; yourself); at: #2 put: '1-2*'; yourself); at: 3 put: '3'; yourself. m := t1 merge: t2. self should: [(m at: 2) = '2']. self should: [(m at: 3) = '3']. self should: [(m atPath: #(1 2)) = '1-2*']. self should: [(m atPath: #(1 1 1)) = '1-1-1']. self should: [(m atPath: #(1 1 2)) = '1-1-2']. self should: [(m atPath: #(1 3 1)) = '1-3-1']. self should: [(m atPath: #(1 3 2)) = '1-3-2'].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/9/2012 22:57' prior: 24235170! testRemovePath "Test the remove path method for success and failure modes." |tree| tree := KeyedTree new at: 1 put: (KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [tree removePath: #(4)] raise: self defaultTestError. self should: [tree removePath: #(1 one)] raise: self defaultTestError. self should: [(tree removePath: #(1 two)) = 'One-Two']. self should: [(tree atPath: #(1 two) ifAbsent: []) = nil]. self should: [(tree removePath: #(2)) = 'Two']. self should: [(tree atPath: #(2) ifAbsent: []) = nil].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'gvc 4/18/2006 14:35' prior: 24235864! testRemovePathIfAbsent "Test the remove path if absent method for success and failure modes." |tree| tree := KeyedTree new at: 1 put: (KeyedTree new at: #two put: 'One-Two'; at: #three put: 'One-Three'; yourself); at: 2 put: 'Two'; yourself. self should: [(tree removePath: #(4) ifAbsent: [#none]) = #none]. self should: [(tree removePath: #(1 2 3 4) ifAbsent: [#none]) = #none]. self should: [(tree removePath: #(1 two) ifAbsent: [#none]) = 'One-Two']. self should: [(tree atPath: #(1 two) ifAbsent: []) = nil]. self should: [(tree removePath: #(2) ifAbsent: [#none]) = 'Two']. self should: [(tree atPath: #(2) ifAbsent: []) = nil].! ! !KeyedTreeTest methodsFor: 'as yet unclassified' stamp: 'gvc 1/22/2010 13:52' prior: 24236612! testSubtrees "Test the subtrees method for success and failure modes." |t1 t2 t3 t4| t1 := KeyedTree new at: 1 put: (t2 := KeyedTree new at: #1 put: '1-1'; at: #2 put: '1-2'; at: #3 put: (t3 := KeyedTree new at: 1 put: '1-3-1'; at: 2 put: '1-3-2'; yourself); yourself); at: 2 put: '2'; at: 3 put: (t4 := KeyedTree new at: 1 put: '1-3-1'; at: 2 put: '1-3-2'; yourself); yourself. self should: [t1 subtrees = {t2. t4}]. self should: [(t1 at: 1) subtrees = {t3}].! ! CursorWithAlpha class removeSelector: #resetConstants! CursorWithAlpha class removeSelector: #constants! CursorWithAlpha class removeSelector: #biggerNormal! "Collections-Unordered"! "CollectionsTests"! "Graphics-Display Objects"! "Morphic"! "Polymorph-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(2 April 2013 11:03:20 pm) Pharo.image priorSource: 653299! ----STARTUP----an Array(2 April 2013 11:09:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 April 2013 11:09:26 pm) Pharo-30020.image priorSource: 678235! ----STARTUP----an Array(3 April 2013 4:42:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/3/2013 16:40' prior: 34208030! commentForCurrentUpdate ^ '10193 newRow: #methods bottom: 0.5 https://pharo.fogbugz.com/f/cases/10193 10121 do #cleanUpForRelease on every update https://pharo.fogbugz.com/f/cases/10121'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/3/2013 16:40'! script120 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.588.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1350.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1388.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.38.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.95.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.14.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/3/2013 16:40'! update30021 "self new update30021" self withUpdateLog: '10193 newRow: #methods bottom: 0.5 https://pharo.fogbugz.com/f/cases/10193 10121 do #cleanUpForRelease on every update https://pharo.fogbugz.com/f/cases/10121'. self loadTogether: self script120 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 4/2/2013 09:42' prior: 34187721! newColumn: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isBlock ifFalse: [ block := [:c | c add: aBlock ] ]. commands add: (SpecLayoutAddColumn block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 4/2/2013 09:42' prior: 34188220! newRow: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isBlock ifFalse: [ block := [:r | r add: aBlock ] ]. commands add: (SpecLayoutAddRow block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'MarcusDenker 3/25/2013 10:07' prior: 24544599! loadUpdates UpdateStreamer new updateFromServer. ImageCleaner cleanUpForRelease.! ! "Spec-Layout"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(3 April 2013 4:42:27 pm) Pharo.image priorSource: 678434! ----STARTUP----an Array(3 April 2013 4:48:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 April 2013 4:48:19 pm) Pharo-30021.image priorSource: 689722! ----STARTUP----an Array(5 April 2013 3:38:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 4/5/2013 13:46' prior: 34233164! commentForCurrentUpdate ^ '10032 Integrate new debugger https://pharo.fogbugz.com/f/cases/10032 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 4/5/2013 13:46'! script121 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.588.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1350.mcz KernelTests-MarcusDenker.479.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1388.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.41.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.84.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-EstebanLorenzano.180.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.38.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.95.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1070.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.14.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 4/5/2013 13:46'! update30022 "self new update30022" Gofer it smalltalkhubUser: 'Pharo' project: 'Debugger'; configurationOf: 'NewDebugger'; load. (Smalltalk at: #ConfigurationOfNewDebugger) perform: #loadDefault. ScriptLoader new unloadPackageNamed: 'ConfigurationOfNewDebugger'. self withUpdateLog: '10032 Integrate new debugger https://pharo.fogbugz.com/f/cases/10032 '. self loadTogether: self script121 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfNewDebugger commentStamp: '' prior: 0! ConfigurationOfNewDebugger loadDefault ! !ConfigurationOfNewDebugger commentStamp: '' prior: 34254608! ConfigurationOfNewDebugger loadDefault ! !ConfigurationOfNewDebugger class methodsFor: 'private' stamp: 'AndreiChis 3/29/2013 22:19'! ensureMetacello "Bootstrap Gofer (if necessary), load latest mcz file for ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ | error | "list of repositories to try, in case primary repository is not accessible" (Array with: 'http://www.squeaksource.com/MetacelloRepository' with: 'http://seaside.gemstone.com/ss/metacello') do: [:repositoryUrl | ([ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: repositoryUrl ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: repositoryUrl; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]] on: Error do: [ :ex | error := ex. Transcript cr; show: 'failed ensureMetacello: '; show: ex description printString; show: '...retrying'. "try again" ex return: nil ]) ~~ nil ifTrue: [ "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load. ^self ]]. "shouldn't get here unless the load failed ... throw an error" self error: 'retry with alternate repository failed: ', error description printString ]! ! !ConfigurationOfNewDebugger class methodsFor: 'metacello tool support' stamp: 'AndreiChis 3/29/2013 22:19'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfNewDebugger class methodsFor: 'loading' stamp: 'AndreiChis 3/29/2013 22:18'! loadDefault (self project version: 'default') load! ! !ConfigurationOfNewDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 3/29/2013 22:17'! project ^self new project! ! !ConfigurationOfNewDebugger methodsFor: 'baselines' stamp: 'AndreiChis 3/31/2013 14:35'! default: spec spec for: #common do: [ spec blessing: #default. spec repository: 'http://www.smalltalkhub.com/mc/Pharo/Debugger/main'. spec package: 'DebuggerModel'; package: 'Spec-Debugger' with: [spec requires: #('Core')]. spec group: 'default' with: #( 'Core' 'UI' ). spec group: 'Core' with: #( 'DebuggerModel' ). spec group: 'UI' with: #( 'Spec-Debugger' ). ]! ! !ConfigurationOfNewDebugger methodsFor: 'accessing' stamp: 'AndreiChis 3/29/2013 22:16'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project]! ! "ConfigurationOfNewDebugger"! !SpecDebugger commentStamp: '' prior: 0! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecDebuggerToolbar commentStamp: '' prior: 0! SpecDebuggerToolbar maintains a list of buttons for the most important debugging actions. The execution of all actions is delegated to the session. Instance Variables createMethodButton: restartButton: resumeButton: runToSelectionButton: selectedContext: session: stepIntoButton: stepOverButton: stepThroughButton: whereIsButton: createMethodButton - xxxxx restartButton - xxxxx resumeButton - xxxxx runToSelectionButton - xxxxx selectedContext - xxxxx session - xxxxx stepIntoButton - xxxxx stepOverButton - xxxxx stepThroughButton - xxxxx whereIsButton - xxxxx ! !SpecProxyDebugger commentStamp: '' prior: 0! SpecProxyDebugger is a simple extension of the existing debugger that adds a button for opening the SpecDebugger in the pre-debugger window. Instance Variables ! !DebugContext commentStamp: '' prior: 0! A DebugContext is a helper that complements DebugSession. It is meant to be created dynamically on a context when the session wants to access the provided services. To create instances first call forContext: to set the current context, and then if the interrupted is different use topContext: Not sure if it is still a good idea to have this class. Instance Variables context: method: methodNode: ranges: topContext: context - xxxxx method - xxxxx methodNode - xxxxx ranges - xxxxx topContext - xxxxx ! !DebugSession commentStamp: '' prior: 0! A DebugSession models a debuggeing session. It contains the interrupted context and process. Its main goal is to handle debugger actions such as restart or stepInto, as well as recomplilation of methods. It is the model used as an input to a ui. As it is just a model it does now contain any information related to the ui. For example, it does not know what a selection in the ui is. It is the job on the ui to maintain the selection and call this session with the propper context. To create sessions use the mehod 'process: aProcess context: aContext'. aContext must be a context belonging to aProcess, and aProcess must be an interrupted process. Instance Variables context: errorWasInUIProcess: process: context - xxxxx errorWasInUIProcess - xxxxx process - xxxxx ! !SpecDebugger commentStamp: '' prior: 34258999! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 4/2/2013 14:46'! debugBasedOnSession: aSession ^ self debugSession: ((self spanNewSessionForContext: aSession context fromProcess: aSession process) errorWasInUIProcess: aSession errorWasInUIProcess)! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 1/28/2013 16:22'! debugContext: aContext fromProcess: aProcess ^ self debugSession: (self spanNewSessionForContext: aContext fromProcess: aProcess) ! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 1/28/2013 16:22'! debugProcess: aProcess ^ self debugContext: aProcess suspendedContext fromProcess: aProcess! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 1/28/2013 16:35'! debugSession: aSession "simulation guard" "WorldState addDeferredUIMessage: [" ^ self openOn: aSession " ]" ! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 4/1/2013 12:28'! defaultTitle ^ 'Spec Debugger'! ! !SpecDebugger class methodsFor: 'as yet unclassified' stamp: 'AndreiChis 4/1/2013 12:26'! handlesContext: aMethodContext ^ true! ! !SpecDebugger class methodsFor: 'class initialization' stamp: 'AndreiChis 4/2/2013 21:49'! initialize super initialize. "Ungly check to make sure the debugger will work until everything is in the image" (Smalltalk tools respondsTo: #registerDebugger:withRank:) ifFalse: [ ^ self ]. "Add ourselves to registry. See [Smalltalk tools]" Smalltalk tools registerDebugger: self withRank: 2.! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 2/7/2013 18:38'! menuStackAction: aBuilder (aBuilder item: #'Proceed') keyText: 'p'; selector: #resumeAction. (aBuilder item: #'Restart') keyText: 'r'; selector: #restartAction. (aBuilder item: #'Step Into') keyText: 'e'; selector: #stepIntoAction. (aBuilder item: #'Step Over') keyText: 't'; selector: #stepOverAction. (aBuilder item: #'Step Through') keyText: 'T'; selector: #stepThroughAction. (aBuilder item: #'Where') keyText: 'w'; selector: #whereIsAction; withSeparatorAfter! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 4/2/2013 16:08'! menuStackChangeDebuggerAction: aBuilder | debuggers | "Ungly check to make sure the debugger will work until everything is in the image" (Smalltalk tools respondsTo: #debuggersForContext:excluding:) ifFalse: [ ^ self ]. debuggers := Smalltalk tools debuggersForContext: aBuilder model currentContext excluding: aBuilder model debuggerClass. (debuggers size > 0) ifTrue: [ (aBuilder item: #'Available Debuggers') with: [ debuggers do: [ :each | (aBuilder item: each defaultTitle asSymbol) selector: #spanNewDebugger:forContext:; arguments: { each. aBuilder model currentContext} ] ] ]! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 1/28/2013 16:27'! openOn: aSession ^ self new openOn: aSession ! ! !SpecDebugger class methodsFor: 'private' stamp: 'AndreiChis 1/7/2013 10:38'! sessionClass ^ DebugSession ! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:29'! spanNewSessionForContext: aContext fromProcess: aProcess ^ self sessionClass process: aProcess context: aContext ! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 14:36'! spanNewSessionForProcess: aProcess ^ self spanNewSessionForContext: aProcess suspendedContext fromProcess: aProcess! ! !SpecDebugger class methodsFor: 'specs' stamp: 'AndreiChis 12/6/2012 16:34'! spec ^ SpecLayout composed newColumn: [ :column | column add: #stack; add: #toolbar height: 25; addSplitter; add: #code ]! ! !SpecDebugger methodsFor: 'private' stamp: 'AndreiChis 1/29/2013 17:16'! buildClassNameFor: aString "shrink the name shown in the debugger " aString first = $[ ifTrue: [ ^ '[...] in ', (aString splitOn: ' in ') last ]. ^ aString ! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 14:22'! close self removeActionsForSession: self session. self session ifNotNil: [ :aSession | aSession terminate] ! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/7/2012 17:31'! code ^ code! ! !SpecDebugger methodsFor: 'private' stamp: 'AndreiChis 1/29/2013 17:17'! columnsFor: anEntry "Answer the array of contexts." | first second index stringRepresentation | stringRepresentation := anEntry printString. index := stringRepresentation findString: '>>'. first := stringRepresentation copyFrom: 1 to: index-1. second := stringRepresentation copyFrom: index+2 to: stringRepresentation size. ^ {(self buildClassNameFor: first). second}! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:00'! context ^ self session context! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 14:21'! detachSession self session: nil! ! !SpecDebugger methodsFor: 'protocol' stamp: 'AndreiChis 1/31/2013 14:44'! initialExtent ^ 810@510! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 1/28/2013 11:02'! initialize session := nil asValueHolder. super initialize. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ].! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 14:37'! initializePresenter super initializePresenter. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ] ]. self stack whenSelectedItemChanged: [:aContext | self updateToolbarFromContext: aContext. self updateCodeFromContext: aContext ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 2/7/2013 18:31'! initializeWidgets self instantiateModels: { #stack -> #MultiColumnListModel. #code -> #TextModel. #toolbar -> #SpecDebuggerToolbar }. self stack displayBlock: [:aContext | self columnsFor: aContext ]. self code acceptBlock: [:text | self recompileMethodTo: text string inContext: self stack selectedItem ]. self setStackMenu.! ! !SpecDebugger methodsFor: 'protocol' stamp: 'AndreiChis 4/2/2013 10:31'! openOn: aSession self session: aSession; openWithSpec! ! !SpecDebugger methodsFor: 'protocol' stamp: 'AndreiChis 12/6/2012 17:56'! openWithSpec | w | w := super openWithSpec. w whenClosedDo: [ self close ]. ^ w! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 2/6/2013 14:43'! recompileMethodTo: aString inContext: aContext aContext ifNotNil: [ self session recompileMethodTo: aString inContext: aContext ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 1/31/2013 14:41'! registerActionsForSession: aSession aSession ifNotNil: [ aSession when: #restart send: #updateRestart to: self; when: #resume send: #updateResume to: self; when: #stepInto send: #updateStepInto to: self; when: #stepOver send: #updateStepOver to: self; when: #stepThrough send: #updateStepThrough to: self; when: #contextChanged send: #updateContextChanged to: self ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 1/31/2013 14:41'! removeActionsForSession: aSession aSession ifNotNil: [ aSession removeActionsForEvent: #restart; removeActionsForEvent: #resume; removeActionsForEvent: #stepInto; removeActionsForEvent: #stepOver; removeActionsForEvent: #stepThrough; removeActionsForEvent:#contextChanged ]. ! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:00'! session ^ session contents! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:00'! session: aSession session contents: aSession ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 12:15'! setStackMenu self stack menu: [ :menu | menu addAllFromPragma:'specDebuggerStackActionMenu' target: self toolbar. menu addAllFromPragma:'specDebuggerStackExtensionMenu' target: self toolbar]! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 14:38'! spanNewDebugger: aDebuggerClass forContext: aContext | currentSession | currentSession := self session. self detachSession. self window delete. currentSession updateContextTo: aContext. aDebuggerClass debugBasedOnSession: currentSession! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 21:05'! stack ^ stack! ! !SpecDebugger methodsFor: 'protocol' stamp: 'AndreiChis 12/6/2012 18:07'! title ^ 'Spec Debugger'! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 21:05'! toolbar ^ toolbar! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 4/2/2013 11:49'! updateCodeFromContext: aContext aContext ifNil: [ self code aboutToStyle: false; text: ''; behavior: nil; setSelection: (1 to: 0) ] ifNotNil: [ |selectionInterval| selectionInterval := self session selectedCodeRangeForContext: aContext. self code aboutToStyle: true; text: aContext sourceCode; behavior: aContext receiver class; setSelection: selectionInterval ]! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 1/31/2013 14:46'! updateContextChanged self updateStep ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 12/7/2012 17:27'! updateRestart self updateStep ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 12/7/2012 17:26'! updateResume ! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 4/2/2013 14:31'! updateStackFromSession: aSession self stack items: (aSession ifNil: [ OrderedCollection new ] ifNotNil: [ aSession stack ] ) "self stack setSelectedItem: aStack first"! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 1/28/2013 11:03'! updateStep self updateStackFromSession: self session. ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 12/6/2012 17:05'! updateStepInto self updateStep ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 12/6/2012 17:04'! updateStepOver self updateStep ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 12/7/2012 17:26'! updateStepThrough self updateStep ! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 2/4/2013 14:56'! updateToolbarFromContext: aContext self toolbar selectedContext: aContext.! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 1/28/2013 11:04'! updateToolbarFromSession: aSession self toolbar session: aSession.! ! !SpecDebuggerToolbar commentStamp: '' prior: 34259456! SpecDebuggerToolbar maintains a list of buttons for the most important debugging actions. The execution of all actions is delegated to the session. Instance Variables createMethodButton: restartButton: resumeButton: runToSelectionButton: selectedContext: session: stepIntoButton: stepOverButton: stepThroughButton: whereIsButton: createMethodButton - xxxxx restartButton - xxxxx resumeButton - xxxxx runToSelectionButton - xxxxx selectedContext - xxxxx session - xxxxx stepIntoButton - xxxxx stepOverButton - xxxxx stepThroughButton - xxxxx whereIsButton - xxxxx ! !SpecDebuggerToolbar class methodsFor: 'specs' stamp: 'AndreiChis 1/31/2013 13:50'! spec ^ SpecLayout composed newRow: [ :r | r add: #resumeButton; add: #restartButton; add: #stepIntoButton; add: #stepOverButton; add: #stepThroughButton; add: #runToSelectionButton; add: #whereIsButton; add: #createMethodButton ]! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:57'! createMethodAction self okToChange ifTrue: [ self session createMethodInContext: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 1/31/2013 13:41'! createMethodButton ^ createMethodButton! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 1/31/2013 13:57'! currentContext "I answer the context on which an action should be executed. This is either the selected context or if nothing is selected the interrupted context." ^ self selectedContext isNil ifTrue: [ self session context ] ifFalse: [ self selectedContext ]! ! !SpecDebuggerToolbar methodsFor: 'private' stamp: 'AndreiChis 1/31/2013 15:31'! debugger "Return the instance of the debugger containing this toolbar" ^ owner! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 4/2/2013 12:27'! debuggerClass ^ self debugger class! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 1/28/2013 11:07'! initialize selectedContext := nil asValueHolder. session := nil asValueHolder. super initialize! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:38'! initializeCreateMethodButton self createMethodButton label: 'Create'; state: false; enabled: self shouldEnableCreateMethodButton; askBeforeChanging: true; action: [ self createMethodAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 2/4/2013 14:58'! initializePresenter super initializePresenter. selectedContext whenChangedDo: [ self updateCreateMethodButton ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:38'! initializeRestartButton self restartButton label: 'Restart'; state: false; askBeforeChanging: true; action: [ self restartAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:38'! initializeResumeButton self resumeButton label: 'Proceed'; state: false; askBeforeChanging: true; action: [ self resumeAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:39'! initializeRunToSelectionButton self runToSelectionButton label: 'Run to Here'; state: false; askBeforeChanging: true; action: [ self runToSelectionAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:39'! initializeStepIntoButton self stepIntoButton label: 'Into'; state: false; askBeforeChanging: true; action: [ self stepIntoAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:39'! initializeStepOverButton self stepOverButton label: 'Over'; state: false; askBeforeChanging: true; action: [ self stepOverAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 4/2/2013 09:39'! initializeStepThroughButton self stepThroughButton label: 'Through'; state: false; askBeforeChanging: true; action: [ self stepThroughAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 2/4/2013 14:51'! initializeWhereIsButton self whereIsButton label: 'Where'; state: false; action: [ self whereIsAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 2/4/2013 14:52'! initializeWidgets self instantiateModels: { #resumeButton -> #ButtonModel. #restartButton -> #ButtonModel. #stepIntoButton -> #ButtonModel. #stepOverButton -> #ButtonModel. #stepThroughButton -> #ButtonModel. #runToSelectionButton -> #ButtonModel. #whereIsButton -> #ButtonModel. #createMethodButton -> #ButtonModel}. self initializeResumeButton. self initializeRestartButton. self initializeStepIntoButton. self initializeStepOverButton. self initializeStepThroughButton. self initializeRunToSelectionButton . self initializeWhereIsButton . self initializeCreateMethodButton ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:55'! restartAction self okToChange ifTrue: [ self session restart: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 20:55'! restartButton ^ restartButton! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:58'! resumeAction self okToChange ifTrue: [ self session resume; clear. self window delete ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 20:55'! resumeButton ^ resumeButton! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:58'! runToSelectionAction self okToChange ifTrue: [ self session runToSelection: self debugger code getSelection inContext: self currentContext ] ! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 1/28/2013 11:57'! runToSelectionButton ^ runToSelectionButton! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 12/6/2012 16:39'! selectedContext ^ selectedContext contents ! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 12/6/2012 16:40'! selectedContext: aContext selectedContext contents: aContext! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:06'! session ^ session contents ! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 1/28/2013 11:07'! session: aSession session contents: aSession! ! !SpecDebuggerToolbar methodsFor: 'private' stamp: 'AndreiChis 1/31/2013 15:34'! shouldEnableCreateMethodButton ^ self session ifNil: [false] ifNotNil: [:aSession | aSession isInterruptedContextDoesNotUnderstand and: [aSession context = self currentContext] ] ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 14:19'! spanNewDebugger: aDebuggerClass forContext: aContext self debugger spanNewDebugger: aDebuggerClass forContext: aContext! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:58'! stepIntoAction self okToChange ifTrue: [ self session stepInto: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 20:55'! stepIntoButton ^ stepIntoButton! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:58'! stepOverAction self okToChange ifTrue: [ self session stepOver: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 20:56'! stepOverButton ^ stepOverButton ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 09:58'! stepThroughAction self okToChange ifTrue: [ self session stepThrough: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 12/9/2012 20:56'! stepThroughButton ^ stepThroughButton ! ! !SpecDebuggerToolbar methodsFor: 'private' stamp: 'AndreiChis 1/31/2013 13:58'! updateCreateMethodButton self createMethodButton enabled: self shouldEnableCreateMethodButton ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 4/2/2013 11:44'! whereIsAction self debugger code setSelection: (self session pcRangeForContext: self currentContext) ! ! !SpecDebuggerToolbar methodsFor: 'accessing widgets' stamp: 'AndreiChis 1/28/2013 11:57'! whereIsButton ^ whereIsButton! ! !SpecProxyDebugger commentStamp: '' prior: 34260210! SpecProxyDebugger is a simple extension of the existing debugger that adds a button for opening the SpecDebugger in the pre-debugger window. Instance Variables ! !SpecProxyDebugger class methodsFor: 'class initialization' stamp: 'AndreiChis 12/13/2012 11:46'! initialize super initialize. "Add ourselves to registry. See [Smalltalk tools]" Smalltalk tools register: self as: #debugger! ! !SpecProxyDebugger methodsFor: 'accessing' stamp: 'AndreiChis 12/13/2012 11:46'! debuggerClass ^ SpecDebugger ! ! !SpecProxyDebugger methodsFor: 'initialize' stamp: 'AndreiChis 12/13/2012 12:26'! preDebugButtonQuads | buttons | self isPostMortem ifTrue: [ ^ self postMortemPreDebugButtonQuads ]. ^ { {'Proceed' translated. #proceed. #blue. 'Continue execution' translated}. {'Abandon' translated. #abandon. #black. 'Abandon this execution by closing this window' translated}. {'Debug' translated. #debug. #red. 'Bring up a debugger' translated}. {'Spec Debug' translated. #spawnSpecDebugger. #red. 'Bring up the Spec Debugger' translated} }! ! !SpecProxyDebugger methodsFor: 'notifier menu' stamp: 'AndreiChis 1/28/2013 11:36'! spawnSpecDebugger | topView | topView := self topView. topView model: nil. "so close won't release me." self breakDependents. topView delete. self debuggerClass debugSession: ((self debuggerClass spanNewSessionForContext: self interruptedContext fromProcess: self interruptedProcess) errorWasInUIProcess: errorWasInUIProcess) ! ! !PreDebugWindow methodsFor: '*spec-debugger' stamp: 'AndreiChis 12/13/2012 12:25'! spawnSpecDebugger model spawnSpecDebugger! ! !DebugContext commentStamp: '' prior: 34260426! A DebugContext is a helper that complements DebugSession. It is meant to be created dynamically on a context when the session wants to access the provided services. To create instances first call forContext: to set the current context, and then if the interrupted is different use topContext: Not sure if it is still a good idea to have this class. Instance Variables context: method: methodNode: ranges: topContext: context - xxxxx method - xxxxx methodNode - xxxxx ranges - xxxxx topContext - xxxxx ! !DebugContext class methodsFor: 'instance creation' stamp: 'AndreiChis 1/7/2013 10:29'! forContext: aContext ^ self new forContext: aContext ! ! !DebugContext methodsFor: 'private' stamp: 'AndreiChis 1/14/2013 16:23'! blockNotFoundDialog: aMethod with: aText | browser message result | message := 'Method for block not found on stack, can''t edit and continue'. "shouldn't edit doits" aMethod selector isDoIt ifTrue: [ ^ self inform: message ]. result := UIManager default confirm: message trueChoice: 'Browse' translated falseChoice: 'Cancel' translated. "possible return values are true | false | nil" result == true ifFalse: [ ^ self ]. "let's browse the given method with the edited contents" browser := aMethod browse. browser contents: aText; changed: #contents. browser codeTextMorph setSelection: self codeTextMorph selectionInterval; hasUnacceptedEdits: true! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/11/2013 17:51'! context ^ context! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'AndreiChis 1/7/2013 10:29'! evaluate: expression ^ Compiler new evaluate: expression in: context to: context receiver! ! !DebugContext methodsFor: 'initialization' stamp: 'AndreiChis 2/6/2013 14:41'! forContext: aContext context := aContext. topContext := aContext.! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! gtDebuggerRetrieveVariableValuePairs |fieldList| fieldList := OrderedCollection new. fieldList add: ('_self' -> context receiver); addAll: (context receiver class allInstVarNames collect: [:each | each -> (context receiver instVarNamed: each) ]). fieldList add: ('_thisContext' -> context). context == nil ifTrue: [^fieldList]. fieldList add: ('_stack top' -> ( context stackPtr > 0 ifTrue: [ context top])). (context tempNames size > 0) ifTrue: [ fieldList addAll: ((1 to: context tempNames size) collect: [ :index || key value | key := context tempNames at: index. value := [context debuggerMap namedTempAt: index in: context] on: Error do: [value := (Text string: 'error obtaining field value' attribute: TextColor red) asString ]. key -> value ] ) ]. ^ fieldList! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/14/2013 16:26'! locateClosureHome "In case the current context is a BlockContext locate the closureHome and ask the user to validate the new context. If closureHome is not found or the user does not validate the new context, return nil. If the current context is not a BlockContext return it." | closureHome result aText | context isExecutingBlock ifTrue: [ closureHome := context activeHome. closureHome ifNil: [ self blockNotFoundDialog: context method with: aText. ^ nil ]. (self confirm: 'I will have to revert to the method from\which this block originated. Is that OK?' withCRs) ifFalse: [ ^ nil ]. ^ closureHome]. ^ context! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! receiver ^ context receiver! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! receiverClass "Answer the class of the receiver. It may differ from 'self selectedClass' " ^ context receiver class! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'AndreiChis 1/7/2013 10:29'! recompileCurrentMethodTo: aText | classOfMethod selector | classOfMethod := self selectedClass. selector := classOfMethod parserClass new parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName beginsWith: 'DoIt') and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [ self inform: 'can''t change selector'. ^ nil]. selector := classOfMethod compile: aText classified: self selectedMessageCategoryName notifying: nil. selector isNil ifFalse: [ ^ classOfMethod compiledMethodAt: selector. ] ifTrue: [ ^ nil ] ! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! selectedClass "Answer the class in which the current context's method was found." ^ context methodClass! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! selectedMessageCategoryName "Answer the name of the message category of the message of the current context." ^ self selectedClass organization categoryOfElement: self selectedMessageName! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! selectedMessageName "Answer the message selector of the current context. If the method is unbound we can still usefully answer its old selector." | selector | selector := context methodSelector. ^(selector ~~ context method selector and: [selector beginsWith: 'DoIt']) ifTrue: [context method selector] ifFalse: [selector]! ! !DebugContext methodsFor: 'private' stamp: 'AndreiChis 2/6/2013 14:42'! source "Answer the source code of the currently selected context." ^ context sourceCode! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 12:03'! sourceText ^ self source asText makeSelectorBold! ! !DebugContext methodsFor: 'initialization' stamp: 'AndreiChis 1/7/2013 10:29'! topContext: aContext topContext := aContext ! ! !DebugSession commentStamp: '' prior: 34261051! A DebugSession models a debuggeing session. It contains the interrupted context and process. Its main goal is to handle debugger actions such as restart or stepInto, as well as recomplilation of methods. It is the model used as an input to a ui. As it is just a model it does now contain any information related to the ui. For example, it does not know what a selection in the ui is. It is the job on the ui to maintain the selection and call this session with the propper context. To create sessions use the mehod 'process: aProcess context: aContext'. aContext must be a context belonging to aProcess, and aProcess must be an interrupted process. Instance Variables context: errorWasInUIProcess: process: context - xxxxx errorWasInUIProcess - xxxxx process - xxxxx ! !DebugSession class methodsFor: 'instance creation' stamp: 'AndreiChis 1/7/2013 10:29'! process: aProcess context: aContext ^ self new process: aProcess context: aContext! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/7/2013 10:29'! activePC: aContext ^ (self isLatestContext: aContext) ifTrue: [ context pc ] ifFalse: [ self previousPC: aContext ].! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 1/14/2013 15:25'! askForCategoryIn: aClass default: aString | categories category | categories := OrderedCollection withAll: (aClass allMethodCategoriesIntegratedThrough: Object). category := UIManager default chooseOrRequestFrom: categories title: 'Please provide a good category for the new method!!' translated. category ifNil: [^aString]. ^ category isEmptyOrNil ifTrue: [^ aString] ifFalse: [ category ]! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 1/14/2013 15:20'! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 2/6/2013 14:50'! clear "If after resuming the process the user does plan to reuse this session with the same process, it should call this method." process := nil. self updateContextTo: nil! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! context ^ context! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/31/2013 14:41'! contextChanged self triggerEvent: #contextChanged! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/14/2013 13:36'! createMethodInContext: selectedContext "Should only be called when the debugger was created in response to a MessageNotUnderstood exception. Create a stub for the method that was missing and proceed into it." | msg chosenClass | "Added due to error 3011 - Hernan" selectedContext = self context ifFalse: [ ^ UIManager default inform: 'Please select the #doesNotUnderstand: context']. msg := self context tempAt: 1. chosenClass := self askForSuperclassOf: self context receiver class toImplement: msg selector ifCancel: [^self]. self implement: msg inClass: chosenClass.! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:40'! createModelForContext: aContext ^ (DebugContext forContext: aContext) topContext: context! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 2/6/2013 14:15'! downInContext: aContext "move down the context stack to the previous (enclosing) context" self flag: 'This does not take into account (bypasses) filtering'. ^ aContext sender. ! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 4/2/2013 14:46'! errorWasInUIProcess ^ errorWasInUIProcess! ! !DebugSession methodsFor: 'initialization' stamp: 'AndreiChis 1/15/2013 15:45'! errorWasInUIProcess: aBoolean errorWasInUIProcess := aBoolean! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/7/2013 10:29'! filterTopContext: aContext |ctx| ctx := aContext. (self shouldDisplayOnTopContext: ctx) ifTrue: [^ ctx]. [(ctx := ctx sender) ~~ nil] whileTrue: [(self shouldDisplayOnTopContext: ctx) ifTrue: [^ ctx]]. ^ nil! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 1/31/2013 14:15'! implement: aMessage inClass: aClass aClass compile: (DynamicMessageImplementor for: aMessage in: aClass) value classified: (self askForCategoryIn: aClass default: 'as yet unclassified'). self context privRefreshWith: (aClass lookupSelector: aMessage selector). self context method numArgs > 0 ifTrue: [(self context tempAt: 1) arguments withIndexDo: [:arg :index| self context tempAt: index put: arg]]. self contextChanged ! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 1/14/2013 18:01'! isContextPostMortem: selectedContext "return whether we're inspecting a frozen exception without a process attached" | suspendedContext | suspendedContext := process suspendedContext. suspendedContext ifNil: [ ^ false ]. (suspendedContext == selectedContext) ifTrue: [ ^ false ]. ^ (suspendedContext findContextSuchThat: [:c | c sender == selectedContext]) isNil! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 1/7/2013 11:21'! isInterruptedContextATest ^ (self isTestObject: self context receiver) and: [ self isTestMethod: self context method of: self context receiver ]! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 1/14/2013 13:23'! isInterruptedContextDoesNotUnderstand ^ self context selector == #doesNotUnderstand:! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/7/2013 10:29'! isLatestContext: aContext ^ process suspendedContext == aContext! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 1/7/2013 11:17'! isTestMethod: aCompiledMethod of: aTestCase ^ aCompiledMethod selector = aTestCase selector! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 1/7/2013 11:17'! isTestObject: anObject "I'm not sure this is the best way to doit because it creates a coupling with TestCase, but due that SUnit is part of the core I think it is not bad after all - Hernan'" ^ anObject isKindOf: TestCase! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/13/2013 19:19'! pcRangeForContext: aContext "Answer the indices in the source code for the method corresponding to aContext's program counter value." aContext isDead ifTrue: [^1 to: 0]. ^aContext debuggerMap rangeForPC: aContext pc contextIsActiveContext: (self isLatestContext: aContext)! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 1/7/2013 11:21'! prepareTestToRunAgain self context receiver prepareToRunAgain! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/7/2013 10:29'! previousPC: aContext ^ (aContext method pcPreviousTo: aContext pc) ifNil: [ aContext pc ]! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! process ^ process! ! !DebugSession methodsFor: 'initialization' stamp: 'AndreiChis 1/7/2013 10:29'! process: aProcess context: aContext aProcess stepToSendOrReturn. process := aProcess. context := self filterTopContext: aContext. context isNil ifTrue: [context := aContext]. ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 2/6/2013 14:22'! recompileMethodTo: text inContext: selectedContext "The retrieved information has changed and its source must now be updated. In this case, the retrieved information is the method of the given context." | newMethod recompilationContext | (recompilationContext := (self createModelForContext: selectedContext) locateClosureHome) ifNil: [ ^ nil ]. newMethod := (self createModelForContext: recompilationContext) recompileCurrentMethodTo: text. newMethod ifNil: [ ^ nil ]. newMethod isQuick ifTrue: [ recompilationContext := self downInContext: recompilationContext. recompilationContext jump: (recompilationContext previousPc - recompilationContext pc) ]. self rewindContextToMethod: newMethod fromContext: recompilationContext. self contextChanged. ^ newMethod! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/31/2013 15:06'! restart: selectedContext "Proceed from the initial state of selectedContext." "Closing now depends on a setting (RestartAlsoProceeds class variable) --> not supported in this version" (self isContextPostMortem: selectedContext) ifTrue: [^ self]. self unwindAndRestartToContext: selectedContext. "Issue 3015 - Hernan" self isInterruptedContextATest ifTrue: [ self prepareTestToRunAgain ]. self triggerEvent: #restart ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/15/2013 15:33'! resume "Proceed execution of the receiver's model, starting after the expression at which an interruption occurred." "If the user of this session does not plan to reuse it, it should call 'self clean' " Smalltalk okayToProceedEvenIfSpaceIsLow ifTrue: [ (self isContextPostMortem: self context) ifTrue: [^ self]. self resumeProcess. self triggerEvent: #resume]. ! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 1/15/2013 15:41'! resumeProcess "Make sure the interrupted process is restored properly and restart the low space handler" process isTerminated ifFalse: [errorWasInUIProcess ifTrue: [UIManager default resumeUIProcess: process] ifFalse: [process resume]]. Smalltalk installLowSpaceWatcher. "restart low space handler". ! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 1/31/2013 15:19'! rewindContextToMethod: aMethod fromContext: aContext "this method is typically to be used after a hot compilation of a method from the stack. in order to return to the context containg the compiled method." | ctxt | ctxt := process popTo: aContext. ctxt == aContext ifFalse: [ self inform: 'Method saved, but current context unchanged\because of unwind error. Click OK to see error' withCRs ] ifTrue: [ aMethod isQuick ifFalse: [ process restartTopWith: aMethod; stepToSendOrReturn ] ]. self updateContextTo: ctxt. "Issue 3015 - Hernan" self isInterruptedContextATest ifTrue: [ self prepareTestToRunAgain ].! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/31/2013 15:13'! runToSelection: selectionInterval inContext: selectedContext "Attempt to step over instructions in selectedContext until the execution reaches the selected instruction. This happens when the program counter passes the begining of selectionInterval. A not nill and valid interval is expected." (self pcRangeForContext: selectedContext) first >= selectionInterval first ifTrue: [ ^self ]. self stepOver: selectedContext. [ selectedContext == self context and: [ (self pcRangeForContext: selectedContext) first < selectionInterval first ] ] whileTrue: [ self stepOver: selectedContext ]! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 2/6/2013 14:33'! selectedCodeRangeForContext: selectedContext ^ self pcRangeForContext: selectedContext! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/7/2013 10:29'! shouldDisplayOnTopContext: aContext ^ aContext method selector ~= #halt! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! stack ^ context stack! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:29'! stackOfSize: size ^ context stackOfSize: size! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/7/2013 10:29'! stepInto self stepInto: context! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/15/2013 11:17'! stepInto: selectedContext "Send the selected message in selectedContext, and take control in the method invoked to allow further step or send." (self isContextPostMortem: self context) ifTrue: [^ self]. process step: selectedContext. self updateContextTo: process stepToSendOrReturn. self triggerEvent: #stepInto! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/7/2013 10:29'! stepOver self stepOver: context! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/15/2013 11:18'! stepOver: selectedContext "Send the selected message in selectedContext, and regain control after the invoked method returns." | newContext | (self isContextPostMortem: self context) ifTrue: [^ self]. newContext := process completeStep: selectedContext. self updateContextTo: (newContext == selectedContext ifTrue: [ process stepToSendOrReturn ] ifFalse: [ newContext ]). self triggerEvent: #stepOver ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/7/2013 10:29'! stepThrough self stepThrough: context! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/15/2013 11:18'! stepThrough: selectedContext "Send messages until you return to selectedContext. Used to step into a block in the method." (self isContextPostMortem: self context) ifTrue: [^ self]. process stepToHome: selectedContext. self updateContextTo: process stepToSendOrReturn. self triggerEvent: #stepThrough ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 1/15/2013 15:36'! terminate "Action that needs to be executed after the window containing this debug session is closed, in order to terminate the right process." self process isNil ifFalse: [ "Assume the user closed the debugger. Simply kill the interrupted process." self process terminate. self clear. Smalltalk installLowSpaceWatcher. "restart low space handler" ] ifTrue: [ "Assume the interrupted process was resumed." "Kill the active process if the error was in the UI as there should be only one UI process." errorWasInUIProcess == false ifFalse: [Processor terminateActive] ] ! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 1/31/2013 15:21'! unwindAndRestartToContext: aContext |ctx| ctx := process popTo: aContext. ctx == aContext ifTrue: [ "Only restart the process if the stack was unwind" process restartTop; stepToSendOrReturn ]. self flag: 'Should a warning be displayed if the the unwind failed?'. self updateContextTo: aContext! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 1/15/2013 11:15'! updateContextTo: aContext context := aContext! ! !DebugSession methodsFor: 'updating' stamp: 'AndreiChis 2/6/2013 14:42'! updateWithContext: newContext fromProcess: aProcess self process: aProcess context: newContext! ! "DebuggerModel"! "Spec-Debugger"! ConfigurationOfNewDebugger removeSelector: #project! ConfigurationOfNewDebugger removeSelector: #default:! ConfigurationOfNewDebugger class removeSelector: #project! ConfigurationOfNewDebugger class removeSelector: #loadDefault! ConfigurationOfNewDebugger class removeSelector: #isMetacelloConfig! ConfigurationOfNewDebugger class removeSelector: #ensureMetacello! Smalltalk globals removeClassNamed: #ConfigurationOfNewDebugger! ----End fileIn----! ----QUIT----an Array(5 April 2013 3:38:54 pm) Pharo.image priorSource: 689919! ----STARTUP----an Array(5 April 2013 3:45:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 April 2013 3:45:13 pm) Pharo-30022.image priorSource: 749821! ----STARTUP----an Array(8 April 2013 9:42:02 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/7/2013 09:37' prior: 34244652! commentForCurrentUpdate ^ ' 10199 Continuation in Pharo https://pharo.fogbugz.com/f/cases/10199 10210 Small Cleanup for ToolRegistry https://pharo.fogbugz.com/f/cases/10210 10229 Fix sender of #copyWithTempsFromMethodNode: https://pharo.fogbugz.com/f/cases/10229 10232 Make Network-URI unloadable https://pharo.fogbugz.com/f/cases/10232/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/7/2013 09:38'! script122 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.588.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1352.mcz KernelTests-MarcusDenker.480.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-StephaneDucasse.128.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.43.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.35.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.8.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.93.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-EstebanLorenzano.18.mcz Spec-Layout-MarcusDenker.38.mcz Spec-Tests-EstebanLorenzano.21.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-EstebanLorenzano.110.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.14.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/7/2013 09:38'! update30023 "self new update30023" self withUpdateLog: ' 10199 Continuation in Pharo https://pharo.fogbugz.com/f/cases/10199 10210 Small Cleanup for ToolRegistry https://pharo.fogbugz.com/f/cases/10210 10229 Fix sender of #copyWithTempsFromMethodNode: https://pharo.fogbugz.com/f/cases/10229 10232 Make Network-URI unloadable https://pharo.fogbugz.com/f/cases/10232/'. self loadTogether: self script122 merge: false. Smalltalk tools initialize. World initializeDesktopCommandKeySelectors. self flushCaches. ! ! "ScriptLoader30"! !Continuation commentStamp: '' prior: 0! I permit to save the execution flow and to restart it later. I was originally used in seaside. Example : You have an object with the instance variable executionFlow. You save the current execution flow with : Continuation currentDo: [ :cc | executionFlow := cc] You restart the execution flow with : executionFlow value: true ! !ContinuationTest commentStamp: '' prior: 0! I represent intentend to provide complete coverage for the Continuation class.! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/5/2013 10:12' prior: 19836725! putSource: sourceStr fromParseNode: methodNode inFile: fileIndex withPreamble: preambleBlock "Store the source code for the receiver on an external file. If no sources are available, i.e., SourceFile is nil, then store temp names for decompilation at the end of the method. If the fileIndex is 1, print on *.sources; if it is 2, print on *.changes, in each case, storing a 4-byte source code pointer at the method end." | file remoteString | (SourceFiles == nil or: [(file := SourceFiles at: fileIndex) == nil]) ifTrue: [^self becomeForward: (self copyWithSource: methodNode)]. Smalltalk assureStartupStampLogged. file setToEnd. preambleBlock value: file. "Write the preamble" remoteString := RemoteString newString: sourceStr onFileNumber: fileIndex toFile: file. file nextChunkPut: ' '. InMidstOfFileinNotification signal ifFalse: [file flush]. self setSourcePosition: remoteString position inFile: fileIndex! ! !FileStream methodsFor: '*Network-Url' stamp: 'fbs 2/2/2005 13:23' prior: 21988465! url "Convert my path into a file:// type url String." ^self asUrl asString! ! !RecentMessageList class methodsFor: 'instance creation' stamp: 'MarcusDenker 4/2/2013 15:39' prior: 32152885! open self uniqueInstance open.! ! !RecentMessageList class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/2/2013 15:45'! registerToolsOn: registry registry register: self as: #recentMessageList! ! !Continuation commentStamp: '' prior: 34315049! I permit to save the execution flow and to restart it later. I was originally used in seaside. Example : You have an object with the instance variable executionFlow. You save the current execution flow with : Continuation currentDo: [ :cc | executionFlow := cc] You restart the execution flow with : executionFlow value: true ! !Continuation class methodsFor: 'instance creation' stamp: 'ab 6/15/2003 19:13'! current ^ self fromContext: thisContext sender! ! !Continuation class methodsFor: 'instance creation' stamp: 'ab 6/15/2003 19:13'! currentDo: aBlock ^ aBlock value: (self fromContext: thisContext sender)! ! !Continuation class methodsFor: 'instance creation' stamp: 'ab 6/15/2003 19:13'! fromContext: aStack ^self new initializeFromContext: aStack! ! !Continuation methodsFor: 'private' stamp: 'CamilleTeruel 4/4/2013 11:58'! initializeFromContext: aContext | valueStream context | valueStream := WriteStream on: (Array new: 20). context := aContext. [context notNil] whileTrue: [valueStream nextPut: context. 1 to: context class instSize do: [:i | valueStream nextPut: (context instVarAt: i)]. 1 to: context size do: [:i | valueStream nextPut: (context at: i)]. context := context sender]. values := valueStream contents! ! !Continuation methodsFor: 'accessing' stamp: 'ab 6/15/2003 19:18'! numArgs ^ 1! ! !Continuation methodsFor: 'private' stamp: 'CamilleTeruel 4/4/2013 11:59'! restoreValues | valueStream context | valueStream := values readStream. [valueStream atEnd] whileFalse: [context := valueStream next. 1 to: context class instSize do: [:i | context instVarAt: i put: valueStream next]. 1 to: context size do: [:i | context at: i put: valueStream next]]! ! !Continuation methodsFor: 'private' stamp: 'ClementBera 4/3/2013 10:16'! terminate: aContext | context | context := aContext. [context notNil] whileTrue: [context := context swapSender: nil]! ! !Continuation methodsFor: 'evaluating' stamp: 'ab 6/15/2003 19:13'! value self value: nil! ! !Continuation methodsFor: 'evaluating' stamp: 'lr 10/28/2007 14:42'! value: anObject "Invoke the continuation and answer anObject as return value." self terminate: thisContext. self restoreValues. thisContext swapSender: values first. ^ anObject! ! !Continuation methodsFor: 'evaluating' stamp: 'lr 10/28/2007 14:42'! valueWithArguments: anArray anArray size = 1 ifFalse: [ ^ self error: 'continuations can only be resumed with one argument' ]. self value: anArray first! ! !PasteUpMorph methodsFor: '*Tools' stamp: 'MarcusDenker 4/2/2013 15:47' prior: 29183226! defaultDesktopCommandKeyTriplets "Answer a list of triplets of the form [+ optional fourth element, a for use in desktop-command-key-help] that will provide the default desktop command key handlers. If the selector takes an argument, that argument will be the command-key event" ^ { { $r. ActiveWorld. #restoreMorphicDisplay. 'Redraw the screen'}. { $b. Smalltalk tools browser. #open. 'Open a new System Browser'}. { $k. Smalltalk tools workspace. #open. 'Open a new, blank Workspace'}. { $t. Smalltalk tools transcript. #open. 'Make a System Transcript visible'}. { $C. self. #findAChangeSorter:. 'Make a Change Sorter visible'}. { $R. Smalltalk tools recentMessageList.#open. 'Open a Recent Submissions browser'}. { $W. Smalltalk tools finder. #open. 'Open a new Finder'}. { $Z. Smalltalk tools changeList. #browseRecentLog. 'Browse recently-logged changes'}. { $\. SystemWindow. #sendTopWindowToBack. 'Send the top window to the back'}. }. ! ! !ToolRegistry methodsFor: 'menu' stamp: 'MarcusDenker 4/2/2013 15:49' prior: 53263999! menuItems "Answer the menu items available for this tool set" ^#( ('System Browser' #openClassBrowser) - ('Workspace' #openWorkspace) ('Transcript' #openTranscript) ('File Browser' #openFileList) - ('Test Runner' #openTestRunner) ('Process Browser' #openProcessBrowser) - ('Monticello Browser' #openMonticelloBrowser) ('Recover lost changes...' #openRecentChangesLog) ('Change Sorter' #openDualChangeSorter) ) ! ! !ToolRegistry methodsFor: 'menu' stamp: 'MarcusDenker 4/2/2013 15:50' prior: 53264936! openFileList self fileList open! ! !ToolRegistry methodsFor: 'menu' stamp: 'MarcusDenker 4/2/2013 15:49' prior: 53265239! openMonticelloBrowser self monticelloBrowser open ! ! !ToolRegistry methodsFor: 'menu' stamp: 'MarcusDenker 4/2/2013 15:48' prior: 53265977! openTranscript ^ self transcript open! ! !ContinuationTest commentStamp: '' prior: 34315440! I represent intentend to provide complete coverage for the Continuation class.! !ContinuationTest methodsFor: 'utilities' stamp: 'ab 6/15/2003 19:23'! callcc: aBlock ^ Continuation currentDo: aBlock! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 1/5/2007 17:26'! testBlockEscape | x | tmp := 0. x := [ tmp := tmp + 1. tmp2 value ]. self callcc: [ :cc | tmp2 := cc. x value ]. tmp2 := [ ]. x value. self assert: tmp = 2! ! !ContinuationTest methodsFor: 'tests' stamp: 'dkh 7/5/2007 12:27'! testBlockTemps | y | #(1 2 3) do: [ :i | | x | x := i. tmp ifNil: [ tmp2 := (self callcc: [ :cc | tmp := cc. [ :q | ] ]) ]. tmp2 value: x. x := 17 ]. y := (self callcc: [ :cc | tmp value: cc. 42 ]). self assert: y = 1! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 10/28/2007 14:42'! testBlockVars | continuation | tmp := 0. tmp := (self callcc: [ :cc | continuation := cc. 0 ]) + tmp. tmp2 ifNotNil: [ tmp2 value ] ifNil: [ #(1 2 3) do: [ :i | self callcc: [ :cc | tmp2 := cc. continuation value: i ] ] ]. self assert: tmp = 6! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 1/5/2007 17:27'! testMethodTemps | i continuation | i := 0. i := i + (self callcc: [:cc | continuation := cc. 1]). self assert: i ~= 3. i = 2 ifFalse: [ continuation value: 2 ]! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 1/5/2007 18:22'! testReentrant | assoc | assoc := self callcc: [ :cc | cc -> 0 ]. assoc value: assoc value + 1. self assert: assoc value ~= 5. assoc value = 4 ifFalse: [ assoc key value: assoc ]! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 1/5/2007 17:28'! testSimpleCallCC | x continuation | x := self callcc: [ :cc | continuation := cc. false ]. x ifFalse: [ continuation value: true ]. self assert: x! ! !ContinuationTest methodsFor: 'tests' stamp: 'lr 1/5/2007 17:28'! testSimplestCallCC | x | x := self callcc: [ :cc | cc value: true ]. self assert: x! ! WorldState class removeSelector: #otherToolsOn:! ToolRegistry removeSelector: #openSelectorBrowser! ToolRegistry removeSelector: #openMessageNames! PasteUpMorph removeSelector: #openRecentSubmissionsBrowser:! StandardFileStream class removeSelector: #readOnlyFileFullyNamed:! StandardFileStream class removeSelector: #oldFileFullyNamed:! FileStream class removeSelector: #readOnlyFileFullyNamed:! FileStream class removeSelector: #oldFileFullyNamed:! "Kernel"! "KernelTests"! "Morphic"! "Network-URI"! "Network-Url"! "RecentSubmissions"! "System-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(8 April 2013 9:42:11 am) Pharo.image priorSource: 750018! ----STARTUP----an Array(8 April 2013 9:48:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 April 2013 9:48:11 am) Pharo-30023.image priorSource: 769919! ----STARTUP----an Array(8 April 2013 10:08:54 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/8/2013 10:06' prior: 34304747! commentForCurrentUpdate ^ '10216 Fix two RB Related failing test https://pharo.fogbugz.com/f/cases/10216 10214 Spec example update https://pharo.fogbugz.com/f/cases/10214/ 10212 New Spec version https://pharo.fogbugz.com/f/cases/10212'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/8/2013 10:06'! script123 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.91.mcz BalloonTests-MarcusDenker.1.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.199.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.130.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.588.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1352.mcz KernelTests-MarcusDenker.480.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.43.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.14.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/8/2013 10:07'! update30024 "self new update30024" self withUpdateLog: '10216 Fix two RB Related failing test https://pharo.fogbugz.com/f/cases/10216 10214 Spec example update https://pharo.fogbugz.com/f/cases/10214/ 10212 New Spec version https://pharo.fogbugz.com/f/cases/10212'. self loadTogether: self script123 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassMethodBrowser class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/3/2013 17:32' prior: 19293370! defaultSpec2 ^ SpecLayout composed newRow: [:r | r newColumn: #listModel right: 0.5; addVSplitter; newColumn: #(methodModel listModel) left: 0.5 ] bottom: 0.5; addHSplitter; newRow: #(methodModel textModel) top: 0.5; yourself! ! !FrameLayoutSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 19:36'! isBasic ^ false! ! !RBSmalllintTestObject methodsFor: 'methods' stamp: 'CamilleTeruel 4/3/2013 18:12' prior: 31406516! longMethods self printString. self printString. self printString. self printString. self printString. self printString. self printString. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]. self isVariable ifTrue: [self printString]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:49' prior: 19984281! openDialogWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpec: aSpec ] ifFalse: [ window := DialogWindowModel new model: self. window openWithSpec: aSpec. self initializeDialogWindow: window. window updateTitle. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:49' prior: 19984803! openDialogWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpec: aSpec ] ifFalse: [ window := DialogWindowModel new model: self. window openWithSpecLayout: aSpec. self initializeDialogWindow: window. window updateTitle. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:49' prior: 19985564! openWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifTrue:[ window rebuildWithSpec: aSpec ] ifFalse: [ window := WindowModel new model: self. window openWithSpec: aSpec. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:27' prior: 19986015! openWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifFalse: [ window := WindowModel new model: self. window openWithSpecLayout: aSpec. self takeKeyboardFocus ] ifTrue: [ window rebuildWithSpecLayout: aSpec ]. ^ window! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 4/2/2013 15:43' prior: 34243508! newRow: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isSymbol ifTrue: [ block := [:r | r add: aBlock ] ]. commands add: (SpecLayoutAddRow block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !TextInputFieldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/2/2013 19:42' prior: 33996616! defaultSpec ^ {#TextFieldSpec. #convertTo:. String. #on:text:accept:readSelection:menu:. #model. #getText. #accept:. nil. nil. #entryCompletion:. { #model. #entryCompletion }. #autoAccept:. { #model. #autoAccept }. #ghostText:. { #model. #ghostText }. #enabled:. { #model. #enabled }. #encrypted:. { #model. #encrypted }. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #acceptOnCR:. { #model. #acceptOnCR }. #hideScrollBarsIndefinitely.}! ! !NullObjectSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 19:36'! isBasic ^ false! ! !SpecInterpreterTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 4/2/2013 16:37' prior: 50710180! testDynamicBuild | model widget1 widget2 widget3 | model := TestingComposableModel new. model openWithSpec close. widget1 := model list widget. model openWithSpec close. widget2 := model list widget. self deny: widget1 == widget2. model list needRebuild: false. model needRebuild: false. model openWithSpec close. widget3 := model list widget. self assert: widget2 == widget3. self assert: model needRebuild! ! !ComposableSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 19:36'! isBasic ^ false! ! !ComposableSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 17:19'! isRedrawable ^ true! ! !AbstractSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 19:35'! isBasic ^ self class ~= AbstractSpec! ! !AbstractSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 17:19'! isRedrawable ^ false! ! !RBEndTrueFalseRule class methodsFor: '*Manifest-Core'! identifierMinorVersionNumber "This number identifies the version of the rule definition. Each time the rule is updated and its changes invalidates previous false positives identification (and as such should be reassessed by developers) the number should be increased." ^ 1! ! !RBEndTrueFalseRule class methodsFor: '*Manifest-Core' stamp: 'SimonAllier 4/13/2012 16:58'! uniqueIdentifierName "This number should be unique and should change only when the rule completely change semantics" ^'EndTrueFalseRule'! ! !RBEndTrueFalseRule methodsFor: '*Manifest-Core' stamp: 'SimonAllier 9/6/2012 16:25'! category ^'Optimization'! ! !RBEndTrueFalseRule methodsFor: 'accessing' stamp: 'lr 2/23/2009 23:17'! group ^ 'Unnecessary code'! ! !RBEndTrueFalseRule methodsFor: 'initialization' stamp: 'lr 2/24/2009 20:27'! initialize super initialize. self matcher matchesAnyOf: #( '`@object ifTrue: [| `@temps1 | `@.Statements1. `.Statement] ifFalse: [| `@temps2 | `@.Statements2. `.Statement]' '`@object ifTrue: [| `@temps1 | `.Statement. `@.Statements1] ifFalse: [| `@temps2 | `.Statement. `@.Statements2]' '`@object ifFalse: [| `@temps1 | `@.Statements1. `.Statement] ifTrue: [| `@temps2 | `@.Statements2. `.Statement]' '`@object ifFalse: [| `@temps1 | `.Statement. `@.Statements1] ifTrue: [| `@temps2 | `.Statement. `@.Statement2]') do: [ :node :answer | answer isNil ifTrue: [ | statement | statement := node arguments first body statements last. (statement isVariable and: [ statement = node arguments last body statements last ]) ifFalse: [ node ] ifTrue: [ nil ] ] ifFalse: [ answer ] ]! ! !RBEndTrueFalseRule methodsFor: '*Manifest-Core' stamp: 'SimonAllier 9/12/2012 13:10'! longDescription ^ 'Checks for ifTrue:ifFalse: blocks that have the same code at the beginning or end. While you might not originally write such code, as it is modified, it is easier to create such code. Instead of having the same code in two places, you should move it outside the blocks. For example, test ifTrue:[self foo. self bar] ifFalse: [self foo. self baz] is equivalent to: self foo. test ifTrue:[self bar] ifFalse: [self baz]'! ! !RBEndTrueFalseRule methodsFor: 'accessing' stamp: 'lr 2/23/2009 23:17'! name ^ 'Check for same statements at end of ifTrue:ifFalse: blocks'! ! !RBEndTrueFalseRule methodsFor: 'accessing' stamp: 'lr 2/23/2009 23:17'! rationale ^ 'Checks for ifTrue:ifFalse: blocks that have the same code at the beginning or end. While you might not originally write such code, as it is modified, it is easier to create such code. Instead of having the same code in two places, you should move it outside the blocks.'! ! !RBEndTrueFalseRule methodsFor: 'accessing' stamp: 'lr 5/15/2010 15:09'! severity ^ #information! ! !RawSpec methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/2/2013 19:36'! isBasic ^ false! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 4/2/2013 19:31'! computeSpecFrom: aSymbol | instance | instance := (SpecBinder specFor: aSymbol ifAbsent: [ ^ RawSpec new defaultReceiver: aSymbol model: model ]) new. ^ instance model: model; yourself! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 4/2/2013 19:43' prior: 33764440! interpretASpec: aPresenter aPresenter ifNil: [ ^ nil ]. (self extractArrayToInterpretFrom: aPresenter) ifNotNil: [ :result | ^ result ]. (self retrieveSpecFrom: arrayToInterpret) ifNotNil: [ :instance | ^ instance ]. specForChildren := self retrieveSpecToProvideToChildren. index := 2. [ index <= arrayToInterpret size ] whileTrue: [ | newInstance | newInstance := self performNextSelectorAndIncrementIndex. index > arrayToInterpret size ifTrue: [ ^ self returnInterpretationOf: newInstance ]. spec instance: newInstance ]. "If you get here, there is a problem. Must probably it comes from the Spec which is wrongly defined" self assert: arrayToInterpret size < 2. (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. ^ spec instance! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 4/2/2013 19:42'! retrieveSpecFrom: anArray ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. self model needRebuild: true. spec isRedrawable ifTrue: [ spec removeSubWidgets ]. spec isBasic ifTrue: [ ^ spec instance ] ] ifFalse: [ spec := self computeSpecFrom: anArray first ]. ^ nil! ! SpecInterpreter removeSelector: #retreiveSpecFrom:! SpecInterpreter removeSelector: #checkIfRebuildNeeded:! "Manifest-Core"! "Refactoring-Critics"! "Refactoring-Tests-Critics"! "Spec-Core"! "Spec-Examples"! "Spec-Layout"! "Spec-Tests"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(8 April 2013 10:08:58 am) Pharo.image priorSource: 770116! ----STARTUP----an Array(8 April 2013 10:15:14 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 April 2013 10:15:14 am) Pharo-30024.image priorSource: 790962! ----STARTUP----an Array(8 April 2013 1:41:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/8/2013 13:39' prior: 34324846! commentForCurrentUpdate ^ '7518 ShortPointArray and ShortRunArray not used https://pharo.fogbugz.com/f/cases/7518 6938 Create Collection>>#reject:thenCollect: https://pharo.fogbugz.com/f/cases/6938 10245 Run #cleanUpForRelease on every update https://pharo.fogbugz.com/f/cases/10245'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/8/2013 13:39'! script124 ^ 'AST-Core-MarcusDenker.113.mcz AST-Semantic-StephaneDucasse.21.mcz AST-Tests-Core-MarcusDenker.21.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.589.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1352.mcz KernelTests-MarcusDenker.480.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.43.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.799.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/8/2013 13:39'! update30025 "self new update30025" self withUpdateLog: '7518 ShortPointArray and ShortRunArray not used https://pharo.fogbugz.com/f/cases/7518 6938 Create Collection>>#reject:thenCollect: https://pharo.fogbugz.com/f/cases/6938 10245 Run #cleanUpForRelease on every update https://pharo.fogbugz.com/f/cases/10245'. self loadTogether: self script124 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OrderedCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 23:52' prior: 28710258! collect: collectBlock thenSelect: selectBlock "Optimized version Collection>>#collect:thenSelect:" | newCollection newElement | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | newElement := collectBlock value: (array at: index). (selectBlock value: newElement) ifTrue: [ newCollection addLast: newElement ]]. ^ newCollection! ! !OrderedCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 23:52'! reject: rejectBlock "Optimized version of Collection>>#reject:" | newCollection element | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | (rejectBlock value: (element := array at: index)) ifFalse: [ newCollection addLast: element ]]. ^ newCollection! ! !OrderedCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 23:51'! reject: rejectBlock thenCollect: collectBlock " Optimized version of Collection>>#reject:thenCollect: " | newCollection | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | | element | element := array at: index. (rejectBlock value: element) ifFalse: [ newCollection addLast: (collectBlock value: element) ]]. ^ newCollection! ! !OrderedCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 23:51' prior: 28711268! select: selectBlock "Optimized version of Collection>>#select: " | newCollection element | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | (selectBlock value: (element := array at: index)) ifTrue: [ newCollection addLast: element ]]. ^ newCollection! ! !OrderedCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 23:52' prior: 28711745! select: selectBlock thenCollect: collectBlock " Optimized version Collection>>#select:thenCollect: " | newCollection element | newCollection := self copyEmpty. firstIndex to: lastIndex do: [ :index | element := array at: index. (selectBlock value: element) ifTrue: [ newCollection addLast: (collectBlock value: element) ]]. ^ newCollection! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:33' prior: 52056226! testBasicCollect | res index | index := 0. res := self collectionWithoutNilElements collect: [ :each | index := index + 1. each ]. res do: [ :each | self assert: (self collectionWithoutNilElements occurrencesOf: each) = (res occurrencesOf: each)]. self assert: index equals: self collectionWithoutNilElements size. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:53'! testBasicCollectThenDo | result index | index := 0. result := self collectionWithoutNilElements collect: [ :each | nil ] thenDo: [ :each | self assert: each isNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: index equals: self collectionWithoutNilElements size. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:34'! testCollectThenDoOnEmpty self assert: (self empty collect: [:e | self fail] thenDo: [ self fail ]) isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:34' prior: 52057001! testCollectThenSelectOnEmpty self assert: (self empty collect: [:e | self fail] thenSelect: [:e | self fail ]) isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:36' prior: 52061028! testReject | res element | res := self collectionWithoutNilElements reject: [:each | each notNil not]. self assert: res size = self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. res := self collectionWithoutNilElements reject: [:each | each = element]. self assert: res size = (self collectionWithoutNilElements size - 1). ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:49'! testRejectAllThenCollect | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:47'! testRejectAllThenDo | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenDo: [ :each | self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 11:14'! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:35'! testRejectThenCollectEmpty self assert: (self empty reject: [:e | self fail ] thenCollect: [ :each| self fail ]) isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:58'! testRejectThenDo | result index rejectIndex | index := 0. rejectIndex := 0. result := self collectionWithoutNilElements reject: [ :each | rejectIndex := rejectIndex + 1. "reject the first element" rejectIndex = 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: rejectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:34'! testRejectThenDoOnEmpty self assert: (self empty reject: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:59' prior: 52061955! testSelect | result element | result := self collectionWithoutNilElements select: [ :each | each notNil]. self assert: result size equals: self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | (each = element) not]. self assert: result size equals: (self collectionWithoutNilElements size - 1). ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:38'! testSelectNoneThenCollect | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:47'! testSelectNoneThenDo | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenDo: [ self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 11:14'! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:38'! testSelectThenCollectOnEmpty self assert: (self empty select: [:e | self fail ] thenCollect: [ self fail ]) isEmpty! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:57'! testSelectThenDo | result index selectIndex | index := 0. selectIndex := 0. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 3/23/2013 10:38'! testSelectThenDoOnEmpty self assert: (self empty select: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'MarcusDenker 4/8/2013 13:19' prior: 24544936! loadUpdatesFromFile: updatesFile updatesFile exists ifFalse: [ ^ self exitFailure: (updatesFile fullName, ' does not exist!!') ]. UpdateStreamer new updateFromFile: updatesFile. ImageCleaner cleanUpForRelease.! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:18' prior: 19522393! collect: collectBlock thenDo: doBlock "Utility method to improve readability." ^ self do: [ :each| doBlock value: (collectBlock value: each)]! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:30'! collect: collectBlock thenReject: selectBlock "Utility method to improve readability." ^ (self collect: collectBlock) reject: selectBlock! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:20' prior: 19532443! piecesCutWhere: binaryBlock "Answer substrings of the receiver derived from cutting the receiver at points where binaryBlock answers true for adjacent elements." | pieces | pieces := OrderedCollection new. self piecesCutWhere: binaryBlock do: [ :piece | pieces add: piece ]. ^pieces "'Now is the time for all good people to come to the aid of the cause of world peace. It is just fine, even desirable, to love your country, if that means wanting it to play a beneficial role in the course of world events and be the best possible example of a good society. But if it means wanting dominion over the rest of the world, it is not love but defensiveness or self-glorification, and will lead only to oblivion.' piecesCutWhere: [:a :b| a = $. and: [b isSeparator]]"! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:32' prior: 19534531! reject: aBlock "Evaluate aBlock with each of the receiver's elements as the argument. Collect into a new collection like the receiver only those elements for which aBlock evaluates to false. Answer the new collection." ^self select: [ :element | (aBlock value: element) == false ]! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:09'! reject: rejectBlock thenCollect: collectBlock "Utility method to improve readability." ^ (self reject: rejectBlock) collect: collectBlock! ! !Collection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/23/2013 10:46' prior: 19534890! reject: rejectBlock thenDo: doBlock "Utility method to improve readability." (self reject: rejectBlock) do: doBlock! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:29'! collect: collectBlock thenReject: rejectBlock "Optimized version of Collection>>#thenReject:" | each | ^ self class new: self size streamContents: [ :stream | 1 to: self size do: [:index | each := collectBlock value: (self at: index). (rejectBlock value: each) ifFalse: [ stream nextPut: each ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:30'! collect: collectBlock thenSelect: selectBlock "Optimized version of Collection>>#collect:thenSelect:" | each | ^ self class new: self size streamContents: [ :stream | 1 to: self size do: [:index | each := collectBlock value: (self at: index). (selectBlock value: each) ifTrue: [ stream nextPut: each ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:36'! reject: rejectBlock "Optimized version of Collection>>#reject:" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ stream nextPut: each ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:30'! reject: rejectBlock thenCollect: collectBlock "Optimized version of Collection>>#reject:thenCollect:" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ stream nextPut: (collectBlock value: each) ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:36'! reject: rejectBlock thenDo: aBlock "Refer to the comment in Collection>>#reject:thenDo:" | each | 1 to: self size do: [ :index | (rejectBlock value: (each := self at: index)) ifFalse: [ aBlock value: each ]].! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:37' prior: 33023335! reverseWith: aSequenceableCollection do: aBlock "Evaluate aBlock with each of the receiver's elements, in reverse order, along with the corresponding element, also in reverse order, from aSequencableCollection. " self size ~= aSequenceableCollection size ifTrue: [^ self errorNoMatch]. self size to: 1 by: -1 do: [:index | aBlock value: (self at: index) value: (aSequenceableCollection at: index)]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:32' prior: 33023849! select: aBlock "Optimized version of Collection>>#select:" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (aBlock value: (each := self at: index)) ifTrue: [ stream nextPut: each ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:31'! select: selectBlock thenCollect: collectBlock "Optimized version of Collection>>#select:thenCollect:" | each | ^ self class new: self size streamContents: [ :stream| 1 to: self size do: [ :index | (selectBlock value: (each := self at: index)) ifTrue: [ stream nextPut: (collectBlock value: each) ]]]! ! !SequenceableCollection methodsFor: 'enumerating' stamp: 'CamilloBruni 3/22/2013 22:36'! select: selectBock thenDo: aBlock "Refer to the comment in Collection>>#select:thenDo:" | each | 1 to: self size do: [ :index | (selectBock value: (each := self at: index)) ifTrue: [ aBlock value: each ]].! ! ShortPointArray removeSelector: #size! ShortPointArray class removeSelector: #new:! Smalltalk globals removeClassNamed: #ShortPointArray! ShortRunArray removeSelector: #valuesDo:! ShortRunArray removeSelector: #valuesCollect:! ShortRunArray removeSelector: #valueAtRun:! ShortRunArray removeSelector: #swapRuns! ShortRunArray removeSelector: #species! ShortRunArray removeSelector: #size! ShortRunArray removeSelector: #setRuns:values:! ShortRunArray removeSelector: #setRunAt:toLength:value:! ShortRunArray removeSelector: #runsAndValuesDo:! ShortRunArray removeSelector: #runSize! ShortRunArray removeSelector: #restoreEndianness! ShortRunArray removeSelector: #pvtAt:put:! ShortRunArray removeSelector: #pvtAt:! ShortRunArray removeSelector: #printOn:! ShortRunArray removeSelector: #lengthsAndValuesDo:! ShortRunArray removeSelector: #lengthAtRun:! ShortRunArray removeSelector: #do:! ShortRunArray removeSelector: #compressionRatio! ShortRunArray removeSelector: #at:put:! ShortRunArray removeSelector: #at:! ShortRunArray class removeSelector: #swapRuns! ShortRunArray class removeSelector: #startUp! ShortRunArray class removeSelector: #runs:values:! ShortRunArray class removeSelector: #newFrom:! ShortRunArray class removeSelector: #new:! ShortRunArray class removeSelector: #initialize! Smalltalk globals removeClassNamed: #ShortRunArray! ShortRunArrayTest removeSelector: #testValuesDo! ShortRunArrayTest removeSelector: #testValuesCollect! ShortRunArrayTest removeSelector: #testValueAtRun! ShortRunArrayTest removeSelector: #testSwapRun! ShortRunArrayTest removeSelector: #testSize! ShortRunArrayTest removeSelector: #testLengthAtRun! ShortRunArrayTest removeSelector: #testLengthAndValuesDo! ShortRunArrayTest removeSelector: #testDo! ShortRunArrayTest removeSelector: #testCompressionRatio! ShortRunArrayTest removeSelector: #testAt! ShortRunArrayTest removeSelector: #setUp! Smalltalk globals removeClassNamed: #ShortRunArrayTest! ShortPointArrayTest removeSelector: #testSize! ShortPointArrayTest removeSelector: #testDefaultElement! ShortPointArrayTest removeSelector: #testBounds! ShortPointArrayTest removeSelector: #testAtPutLargeInteger! ShortPointArrayTest removeSelector: #testAtPutInt4! ShortPointArrayTest removeSelector: #testAtPutFraction! ShortPointArrayTest removeSelector: #testAtPutFloat! ShortPointArrayTest removeSelector: #testAtPut! ShortPointArrayTest removeSelector: #testAt! ShortPointArrayTest removeSelector: #setUp! Smalltalk globals removeClassNamed: #ShortPointArrayTest! !Trait method! testBasicCollect | res index | index := 0. res := self collectionWithoutNilElements collect: [ :each | index := index + 1. each ]. res do: [ :each | self assert: (self collectionWithoutNilElements occurrencesOf: each) = (res occurrencesOf: each)]. self assert: index equals: self collectionWithoutNilElements size. ! ! !Trait method! testBasicCollect | res index | index := 0. res := self collectionWithoutNilElements collect: [ :each | index := index + 1. each ]. res do: [ :each | self assert: (self collectionWithoutNilElements occurrencesOf: each) = (res occurrencesOf: each)]. self assert: index equals: self collectionWithoutNilElements size. ! ! !Trait method! testBasicCollectThenDo | result index | index := 0. result := self collectionWithoutNilElements collect: [ :each | nil ] thenDo: [ :each | self assert: each isNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: index equals: self collectionWithoutNilElements size. ! ! !Trait method! testBasicCollectThenDo | result index | index := 0. result := self collectionWithoutNilElements collect: [ :each | nil ] thenDo: [ :each | self assert: each isNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: index equals: self collectionWithoutNilElements size. ! ! !Trait method! testCollectThenDoOnEmpty self assert: (self empty collect: [:e | self fail] thenDo: [ self fail ]) isEmpty! ! !Trait method! testCollectThenDoOnEmpty self assert: (self empty collect: [:e | self fail] thenDo: [ self fail ]) isEmpty! ! !Trait method! testCollectThenSelectOnEmpty self assert: (self empty collect: [:e | self fail] thenSelect: [:e | self fail ]) isEmpty! ! !Trait method! testCollectThenSelectOnEmpty self assert: (self empty collect: [:e | self fail] thenSelect: [:e | self fail ]) isEmpty! ! !Trait method! testReject | res element | res := self collectionWithoutNilElements reject: [:each | each notNil not]. self assert: res size = self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. res := self collectionWithoutNilElements reject: [:each | each = element]. self assert: res size = (self collectionWithoutNilElements size - 1). ! ! !Trait method! testReject | res element | res := self collectionWithoutNilElements reject: [:each | each notNil not]. self assert: res size = self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. res := self collectionWithoutNilElements reject: [:each | each = element]. self assert: res size = (self collectionWithoutNilElements size - 1). ! ! !Trait method! testRejectAllThenCollect | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !Trait method! testRejectAllThenCollect | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !Trait method! testRejectAllThenDo | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenDo: [ :each | self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !Trait method! testRejectAllThenDo | result | result := self collectionWithoutNilElements reject: [ :each | each notNil ] thenDo: [ :each | self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !Trait method! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !Trait method! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !Trait method! testRejectThenCollectEmpty self assert: (self empty reject: [:e | self fail ] thenCollect: [ :each| self fail ]) isEmpty! ! !Trait method! testRejectThenCollectEmpty self assert: (self empty reject: [:e | self fail ] thenCollect: [ :each| self fail ]) isEmpty! ! !Trait method! testRejectThenDo | result index rejectIndex | index := 0. rejectIndex := 0. result := self collectionWithoutNilElements reject: [ :each | rejectIndex := rejectIndex + 1. "reject the first element" rejectIndex = 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: rejectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !Trait method! testRejectThenDo | result index rejectIndex | index := 0. rejectIndex := 0. result := self collectionWithoutNilElements reject: [ :each | rejectIndex := rejectIndex + 1. "reject the first element" rejectIndex = 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: rejectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !Trait method! testRejectThenDoOnEmpty self assert: (self empty reject: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! !Trait method! testRejectThenDoOnEmpty self assert: (self empty reject: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! !Trait method! testSelect | result element | result := self collectionWithoutNilElements select: [ :each | each notNil]. self assert: result size equals: self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | (each = element) not]. self assert: result size equals: (self collectionWithoutNilElements size - 1). ! ! !Trait method! testSelect | result element | result := self collectionWithoutNilElements select: [ :each | each notNil]. self assert: result size equals: self collectionWithoutNilElements size. element := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | (each = element) not]. self assert: result size equals: (self collectionWithoutNilElements size - 1). ! ! !Trait method! testSelectNoneThenCollect | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !Trait method! testSelectNoneThenCollect | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenCollect: [ :each| self fail ]. self assert: result isEmpty! ! !Trait method! testSelectNoneThenDo | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenDo: [ self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !Trait method! testSelectNoneThenDo | result | result := self collectionWithoutNilElements select: [ :each | each isNil ] thenDo: [ self fail ]. self assert: result equals: self collectionWithoutNilElements! ! !Trait method! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !Trait method! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. self assert: (result occurrencesOf: pivot) > 1. ! ! !Trait method! testSelectThenCollectOnEmpty self assert: (self empty select: [:e | self fail ] thenCollect: [ self fail ]) isEmpty! ! !Trait method! testSelectThenCollectOnEmpty self assert: (self empty select: [:e | self fail ] thenCollect: [ self fail ]) isEmpty! ! !Trait method! testSelectThenDo | result index selectIndex | index := 0. selectIndex := 0. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !Trait method! testSelectThenDo | result index selectIndex | index := 0. selectIndex := 0. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenDo: [ :each | self assert: each notNil. index := index + 1] . self assert: result equals: self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. ! ! !Trait method! testSelectThenDoOnEmpty self assert: (self empty select: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! !Trait method! testSelectThenDoOnEmpty self assert: (self empty select: [:e | self fail ] thenDo: [ self fail ]) isEmpty! ! "Balloon"! "BalloonTests"! "Collections-Abstract"! "Collections-Sequenceable"! "CollectionsTests"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(8 April 2013 1:41:09 pm) Pharo.image priorSource: 791161! ----STARTUP----an Array(8 April 2013 1:47:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 April 2013 1:47:09 pm) Pharo-30025.image priorSource: 831131! ----STARTUP----an Array(8 April 2013 9:30:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/8/2013 21:29' prior: 34345891! commentForCurrentUpdate ^ '7612 RBParser does not handle primitive error codes properly https://pharo.fogbugz.com/f/cases/7612 10134 SpecialObjectsArray should not change without voidCogVMState https://pharo.fogbugz.com/f/cases/10134'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/8/2013 21:29'! script125 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.131.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.589.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1352.mcz KernelTests-MarcusDenker.480.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.43.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/8/2013 21:29'! update30026 "self new update30026" self withUpdateLog: '7612 RBParser does not handle primitive error codes properly https://pharo.fogbugz.com/f/cases/7612 10134 SpecialObjectsArray should not change without voidCogVMState https://pharo.fogbugz.com/f/cases/10134'. self loadTogether: self script125 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBVariableBinding methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 14:53'! isPrimitiveError ^ self isPrimitiveErrorBinding! ! !RBVariableBinding methodsFor: 'testing-type' stamp: 'CamilloBruni 3/6/2013 14:53'! isPrimitiveErrorBinding ^ false! ! !RBParserTest methodsFor: 'tests' stamp: 'CamilloBruni 3/6/2013 15:03'! testPragmaPrimitiveError | tree pragma | tree := RBParser parseMethod: 'veryBasicAt: index ^ code'. self assert: tree pragmas size equals: 1. pragma := tree pragmas first. self assert: pragma selector equals: #primitive:module:error:.! ! !RBMethodScope methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 3/6/2013 15:28'! addPrimitiveErrorBinding "Special check for pragma error code node". (self node hasPragmaNamed: #primitive:module:error:) ifTrue: [ |pragma| pragma := self node pragmaNamed: #primitive:module:error:. self add: (RBPrimitiveErrorBinding named: pragma arguments last value)]! ! !RBMethodScope methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 3/6/2013 15:19'! setNode: aMethodNode super setNode: aMethodNode. self addPrimitiveErrorBinding.! ! !RBPrimitiveErrorBinding class methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 3/6/2013 15:26'! named: primitveErrorVariableName ^ self node: (RBVariableNode named: primitveErrorVariableName) ! ! !RBPrimitiveErrorBinding methodsFor: 'testing-type' stamp: 'CamilloBruni 3/6/2013 14:53'! isPrimitiveErrorBinding ^ true! ! !RBMethodNode methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 15:15' prior: 30785081! hasPragmaNamed: aSymbol self pragmaNamed: aSymbol ifAbsent: [ ^ false ]. ^ true! ! !RBMethodNode methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 15:14'! pragmaNamed: aSymbol ^ self pragmaNamed: aSymbol ifAbsent: [ KeyNotFound signalFor: aSymbol ]! ! !RBMethodNode methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 15:15'! pragmaNamed: aSymbol ifAbsent: absentBlock ^ self pragmas detect: [ :pragma| pragma selector = aSymbol ] ifNone: absentBlock! ! !SmalltalkImage methodsFor: 'special objects' stamp: 'GuillermoPolito 3/29/2013 16:53' prior: 50346789! newSpecialObjectsArray "Smalltalk recreateSpecialObjectsArray" "To external package developers: **** DO NOT OVERRIDE THIS METHOD. ***** If you are writing a plugin and need additional special object(s) for your own use, use addGCRoot() function and use own, separate special objects registry " "The Special Objects Array is an array of objects used by the Pharo virtual machine. Its contents are critical and accesses to it by the VM are unchecked, so don't even think of playing here unless you know what you are doing." | newArray | newArray := Array new: 56. "Nil false and true get used throughout the interpreter" newArray at: 1 put: nil. newArray at: 2 put: false. newArray at: 3 put: true. "This association holds the active process (a ProcessScheduler)" newArray at: 4 put: (self globals associationAt: #Processor). "Numerous classes below used for type checking and instantiation" newArray at: 5 put: Bitmap. newArray at: 6 put: SmallInteger. newArray at: 7 put: ByteString. newArray at: 8 put: Array. newArray at: 9 put: Smalltalk. newArray at: 10 put: Float. newArray at: 11 put: MethodContext. newArray at: 12 put: nil. "Was BlockContext" newArray at: 13 put: Point. newArray at: 14 put: LargePositiveInteger. newArray at: 15 put: Display. newArray at: 16 put: Message. newArray at: 17 put: CompiledMethod. newArray at: 18 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 18 ]). "(low space Semaphore)" newArray at: 19 put: Semaphore. newArray at: 20 put: Character. newArray at: 21 put: #doesNotUnderstand:. newArray at: 22 put: #cannotReturn:. newArray at: 23 put: nil. "This is the process signalling low space." "An array of the 32 selectors that are compiled as special bytecodes, paired alternately with the number of arguments each takes." newArray at: 24 put: #( #+ 1 #- 1 #< 1 #> 1 #<= 1 #>= 1 #= 1 #~= 1 #* 1 #/ 1 #\\ 1 #@ 1 #bitShift: 1 #// 1 #bitAnd: 1 #bitOr: 1 #at: 1 #at:put: 2 #size 0 #next 0 #nextPut: 1 #atEnd 0 #== 1 nil 0 nil 1 #value 0 #value: 1 #do: 1 #new 0 #new: 1 #x 0 #y 0 ). "An array of the 255 Characters in ascii order. Cog inlines table into machine code at: prim so do not regenerate it." newArray at: 25 put: (self primitiveGetSpecialObjectsArray at: 25). newArray at: 26 put: #mustBeBoolean. newArray at: 27 put: ByteArray. newArray at: 28 put: Process. "A 32-element array with up to 32 classes that have compact instances. Cog inlines table into machine code class lookup so do not regenerate it." newArray at: 29 put: self compactClassesArray. newArray at: 30 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 30 ]). "(delay Semaphore)" newArray at: 31 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 31 ]). "(user interrupt Semaphore)" "Prototype instances that can be copied for fast initialization" newArray at: 32 put: (Float new: 2). newArray at: 33 put: (LargePositiveInteger new: 4). newArray at: 34 put: 0@0. newArray at: 35 put: #cannotInterpret:. "Note: This must be fixed once we start using context prototypes (yeah, right)" "(MethodContext new: CompiledMethod fullFrameSize)." newArray at: 36 put: (self primitiveGetSpecialObjectsArray at: 36). "Is the prototype MethodContext (unused by the VM)" newArray at: 37 put: BlockClosure. "(BlockContext new: CompiledMethod fullFrameSize)." newArray at: 38 put: (self primitiveGetSpecialObjectsArray at: 38). "Is the prototype BlockContext (unused by the VM)" "array of objects referred to by external code" newArray at: 39 put: (self primitiveGetSpecialObjectsArray at: 39). "preserve external semaphores" newArray at: 40 put: nil. "Reserved for Mutex in Cog VMs" newArray at: 41 put: nil. "Reserved for a LinkedList instance for overlapped calls in CogMT" "finalization Semaphore" newArray at: 42 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ (self specialObjectsArray at: 42) ifNil: [ Semaphore new ] ]). newArray at: 43 put: LargeNegativeInteger. "External objects for callout. Note: Written so that one can actually completely remove the FFI." newArray at: 44 put: (self at: #ExternalAddress ifAbsent: []). newArray at: 45 put: (self at: #ExternalStructure ifAbsent: []). newArray at: 46 put: (self at: #ExternalData ifAbsent: []). newArray at: 47 put: (self at: #ExternalFunction ifAbsent: []). newArray at: 48 put: (self at: #ExternalLibrary ifAbsent: []). newArray at: 49 put: #aboutToReturn:through:. newArray at: 50 put: #run:with:in:. "51 reserved for immutability message" "newArray at: 51 put: #attemptToAssign:withIndex:." newArray at: 52 put: #(nil "nil => generic error" #'bad receiver' #'bad argument' #'bad index' #'bad number of arguments' #'inappropriate operation' #'unsupported operation' #'no modification' #'insufficient object memory' #'insufficient C memory' #'not found' #'bad method' #'internal error in named primitive machinery' #'object may move'). "53 to 55 are for Alien" newArray at: 53 put: (self at: #Alien ifAbsent: []). newArray at: 54 put: #invokeCallback:stack:registers:jmpbuf:. newArray at: 55 put: (self at: #UnsafeAlien ifAbsent: []). "Weak reference finalization" newArray at: 56 put: (self at: #WeakFinalizationList ifAbsent: []). ^newArray! ! SmalltalkImage removeSelector: #newCompactClassesArray! "AST-Core"! "AST-Semantic"! "AST-Tests-Core"! "System-Support"! ----End fileIn----! ----QUIT----an Array(8 April 2013 9:30:50 pm) Pharo.image priorSource: 831328! ----STARTUP----an Array(8 April 2013 9:37:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 April 2013 9:37:14 pm) Pharo-30026.image priorSource: 849302! ----STARTUP----an Array(9 April 2013 9:10:41 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/9/2013 09:08' prior: 34386057! commentForCurrentUpdate ^ '7603 PositionalStream>>#last is a candidate for removal https://pharo.fogbugz.com/f/cases/7603 10096 remove Network-URI https://pharo.fogbugz.com/f/cases/10096'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/9/2013 09:09'! script126 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.589.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1352.mcz KernelTests-MarcusDenker.480.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.440.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-URI-MarcusDenker.43.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/9/2013 09:09'! update30027 "self new update30027" self withUpdateLog: '7603 PositionalStream>>#last is a candidate for removal https://pharo.fogbugz.com/f/cases/7603 10096 remove Network-URI https://pharo.fogbugz.com/f/cases/10096'. self loadTogether: self script126 merge: false. ScriptLoader new unloadPackage: 'Network-URI'. . self flushCaches. ! ! "ScriptLoader30"! PositionableStream removeSelector: #last! "Collections-Streams"! URIAuthority removeSelector: #userInfo! URIAuthority removeSelector: #printOn:! URIAuthority removeSelector: #port! URIAuthority removeSelector: #host! URIAuthority removeSelector: #fromString:! URIAuthority class removeSelector: #fromString:! Smalltalk globals removeClassNamed: #URIAuthority! URI removeSelector: #writeStream! URI removeSelector: #schemeSpecificPart! URI removeSelector: #schemeIsHttp! URI removeSelector: #schemeIsFile! URI removeSelector: #scheme! URI removeSelector: #retrieveContentsEncoding:! URI removeSelector: #resolveRelativeURI:! URI removeSelector: #readWriteStream! URI removeSelector: #readStream! URI removeSelector: #printSchemeSpecificPartOn:! URI removeSelector: #printOn:! URI removeSelector: #openStream:forceNew:encoding:! URI removeSelector: #openStream:forceNew:! URI removeSelector: #openStream:! URI removeSelector: #mimeType! URI removeSelector: #isURI! URI removeSelector: #isRelative! URI removeSelector: #isOpaque! URI removeSelector: #isAbsolute! URI removeSelector: #hash! URI removeSelector: #fragment! URI removeSelector: #extractSchemeSpecificPartAndFragment:! URI removeSelector: #asUrl! URI removeSelector: #asURI! URI removeSelector: #asText! URI removeSelector: #absoluteFromString:scheme:! URI removeSelector: #=! URI class removeSelector: #fromString:! URI class removeSelector: #extractSchemeFrom:! URI class removeSelector: #absoluteFromString:scheme:! OpaqueURI removeSelector: #pathComponents! OpaqueURI removeSelector: #path! OpaqueURI removeSelector: #isOpaque! OpaqueURI removeSelector: #extension! Smalltalk globals removeClassNamed: #OpaqueURI! HierarchicalURI removeSelector: #userInfo! HierarchicalURI removeSelector: #resolveRelativeURI:! HierarchicalURI removeSelector: #removeComponentDotDotPairs:! HierarchicalURI removeSelector: #relativeFromString:! HierarchicalURI removeSelector: #query! HierarchicalURI removeSelector: #printSchemeSpecificPartOn:! HierarchicalURI removeSelector: #port! HierarchicalURI removeSelector: #pathComponentsUnescaped! HierarchicalURI removeSelector: #pathComponents! HierarchicalURI removeSelector: #pathAndQuery! HierarchicalURI removeSelector: #path! HierarchicalURI removeSelector: #name! HierarchicalURI removeSelector: #host! HierarchicalURI removeSelector: #extractSchemeSpecificPartAndFragment:! HierarchicalURI removeSelector: #extractQuery:! HierarchicalURI removeSelector: #extractAuthority:! HierarchicalURI removeSelector: #extension! HierarchicalURI removeSelector: #buildAbsolutePath:! HierarchicalURI removeSelector: #baseNameWithExtensionUnescaped! HierarchicalURI removeSelector: #baseNameWithExtension! HierarchicalURI removeSelector: #baseNameUnescaped! HierarchicalURI removeSelector: #baseName! HierarchicalURI removeSelector: #authority! HierarchicalURI removeSelector: #assureExistance! HierarchicalURI removeSelector: #asFileReference! HierarchicalURI removeSelector: #absolutePath! HierarchicalURI removeSelector: #absoluteFromString:scheme:! Smalltalk globals removeClassNamed: #HierarchicalURI! Smalltalk globals removeClassNamed: #URI! String removeSelector: #asURI! IllegalURIException removeSelector: #uriString:! IllegalURIException removeSelector: #uriString! Smalltalk globals removeClassNamed: #IllegalURIException! FileStream removeSelector: #uri! ----End fileIn----! ----QUIT----an Array(9 April 2013 9:10:48 am) Pharo.image priorSource: 849499! ----STARTUP----an Array(9 April 2013 9:17:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 April 2013 9:17:11 am) Pharo-30027.image priorSource: 863142! ----STARTUP----an Array(9 April 2013 2:12:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/9/2013 13:59' prior: 34404228! commentForCurrentUpdate ^ '10247 testRejectThenCollect / testSelectThenCollect failing for Sets https://pharo.fogbugz.com/f/cases/10247 6648 Red Light when all test are green https://pharo.fogbugz.com/f/cases/6648 10242 Port to 3.0: Issue 10200 Date instance https://pharo.fogbugz.com/f/cases/10242 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/9/2013 13:59'! script127 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1354.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/9/2013 14:00'! update30028 "self new update30028" self withUpdateLog: '10247 testRejectThenCollect / testSelectThenCollect failing for Sets https://pharo.fogbugz.com/f/cases/10247 6648 Red Light when all test are green https://pharo.fogbugz.com/f/cases/6648 10242 Port to 3.0: Issue 10200 Date instance https://pharo.fogbugz.com/f/cases/10242 '. self loadTogether: self script127 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 4/9/2013 10:39' prior: 34360569! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! !TIterateTest methodsFor: 'tests - iterating' stamp: 'CamilloBruni 4/9/2013 10:39' prior: 34363496! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'AndyKellens 4/4/2013 09:33'! testDayOfWeekWithUTC | date | "Calculating the day of week should take into account the UTC offset" date := DateAndTime julianDayNumber: 2456385 offset:(Duration hours:2). "Internally, this date gets represented as the julian day 2456384 with seconds 79200 and offset 2 hours" "When asking for the day of week, the offset should be taken into account to return the correct day of week" self assert: (date dayOfWeek = 3). ! ! !DateAndTime methodsFor: 'accessing' stamp: 'AndyKellens 4/3/2013 18:09' prior: 20340074! dayOfWeek "Sunday=1, ... , Saturday=7" ^ (self julianDayNumber + 1 rem: 7) + 1! ! !BagTest methodsFor: 'tests - iterating' stamp: 'damienpollet 1/13/2009 15:57' prior: 17817490! testAnySastify self assert: ( self collection anySatisfy: [:each | each = self element]). self deny: (self collection anySatisfy: [:each | each isString]).! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'CamilleTeruel 4/5/2013 16:34' prior: 17368093! runTestsOfClass: aClass notifying: aBoolean | methods blockToEvaluate | methods := aClass methodDict values select: [ :method | method isTestMethod ] thenCollect: [:e | e selector ]. blockToEvaluate := [ |result | aClass resetHistory. result := (aClass addToSuite: TestSuite new fromMethods: methods) run. result updateResultsInHistory. ClassesIconsCache removeKey: aClass ifAbsent: []. testSemaphore signal. ]. aBoolean ifTrue: [ blockToEvaluate forkAt: Processor userBackgroundPriority ] ifFalse: [ blockToEvaluate value ]. testSemaphore wait. aBoolean ifTrue: [ | color | aClass hasPassedTest ifTrue: [ color := Color green ]. aClass hasFailedTest ifTrue: [ color := Color yellow ]. aClass hasErrorTest ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: 'Class: ', aClass name color: color ]! ! !Trait method! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! !Trait method! testRejectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements reject: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex = 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! !Trait method! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! !Trait method! testSelectThenCollect | result index selectIndex pivot | index := 0. selectIndex := 0. pivot := self collectionWithoutNilElements anyOne. result := self collectionWithoutNilElements select: [ :each | selectIndex := selectIndex + 1. "reject the first element" selectIndex > 1 ] thenCollect: [ :each | self assert: each notNil. index := index + 1. pivot ]. self assert: result ~= self collectionWithoutNilElements. self assert: selectIndex equals: self collectionWithoutNilElements size. self assert: index equals: self collectionWithoutNilElements size - 1. self assert: (self collectionWithoutNilElements occurrencesOf: pivot) equals: 1. "should be > 1 for standard collection and = 1 for those that do not allow exact duplicates" self assert: (result occurrencesOf: pivot) >= 1. ! ! "CollectionsTests"! "Kernel"! "KernelTests"! "Nautilus"! ----End fileIn----! ----QUIT----an Array(9 April 2013 2:12:18 pm) Pharo.image priorSource: 863339! ----STARTUP----an Array(9 April 2013 2:18:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 April 2013 2:18:26 pm) Pharo-30028.image priorSource: 880946! ----STARTUP----an Array(9 April 2013 3:17:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/9/2013 15:15' prior: 34418068! commentForCurrentUpdate ^ '10173 ClassBuilder cannot safely modify a class why using it https://pharo.fogbugz.com/f/cases/10173/ 10130 isNil and ... notNil https://pharo.fogbugz.com/f/cases/10130 10248 Remove old Pharo20 repository in Pharo30 https://pharo.fogbugz.com/f/cases/10248'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/9/2013 15:15'! script128 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.14.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.67.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1356.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.88.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/9/2013 15:15'! update30029 "self new update30029" self withUpdateLog: '10173 ClassBuilder cannot safely modify a class why using it https://pharo.fogbugz.com/f/cases/10173/ 10130 isNil and ... notNil https://pharo.fogbugz.com/f/cases/10130 10248 Remove old Pharo20 repository in Pharo30 https://pharo.fogbugz.com/f/cases/10248'. self loadTogether: self script128 merge: false. ScriptLoader new removeAllRepositories; addHomeRepositoryToAllPackages. . self flushCaches. ! ! ScriptLoader removeSelector: #repository20! "ScriptLoader30"! !ClassBuilder methodsFor: 'class mutation' stamp: 'nicolascellier 3/28/2013 21:13' prior: 19118722! update: oldClass to: newClass "Convert oldClass, all its instances and possibly its meta class into newClass, instances of newClass and possibly its meta class. The process is surprisingly simple in its implementation and surprisingly complex in its nuances and potentially bad side effects. We can rely on two assumptions (which are critical): #1: The method #updateInstancesFrom: will not create any lasting pointers to 'old' instances ('old' is quote on quote since #updateInstancesFrom: will do a become of the old vs. the new instances and therefore it will not create pointers to *new* instances before the #become: which are *old* afterwards) #2: The non-preemptive execution of the critical piece of code guarantees that nobody can get a hold by 'other means' (such as process interruption and reflection) on the old instances. Given the above two, we know that after #updateInstancesFrom: there are no pointer to any old instances. After the forwarding become there will be no pointers to the old class or meta class either. Meaning that if we throw in a nice fat GC at the end of the critical block, everything will be gone (but see the comment right there). There's no need to worry. " | meta | meta := oldClass isMeta. "Note: Everything from here on will run without the ability to get interrupted to prevent any other process to create new instances of the old class." [ "Note: The following removal may look somewhat obscure and needs an explanation. When we mutate the class hierarchy we create new classes for any existing subclass. So it may look as if we don't have to remove the old class from its superclass. However, at the top of the hierarchy (the first class we reshape) that superclass itself is not newly created so therefore it will hold both the oldClass and newClass in its (obsolete or not) subclasses. Since the #become: below will transparently replace the pointers to oldClass with newClass the superclass would have newClass in its subclasses TWICE. With rather unclear effects if we consider that we may convert the meta-class hierarchy itself (which is derived from the non-meta class hierarchy). Due to this problem ALL classes are removed from their superclass just prior to converting them. Here, breaking the superclass/subclass invariant really doesn't matter since we will effectively remove the oldClass (become+GC) just a few lines below." oldClass superclass removeSubclass: oldClass. oldClass superclass removeObsoleteSubclass: oldClass. "make sure that the VM cache is clean" oldClass methodDict keysDo: [:aSelector | aSelector flushCache]. "Convert the instances of oldClass into instances of newClass" newClass updateInstancesFrom: oldClass. meta ifTrue:[oldClass becomeForward: newClass] ifFalse:[(Array with: oldClass with: oldClass class) elementsForwardIdentityTo: (Array with: newClass with: newClass class)]. Smalltalk garbageCollect. "Warning: Read this before you even think about removing the GC. Yes, it slows us down. Quite heavily if you have a large image. However, there's no good and simple alternative here, since unfortunately, #become: does change class pointers. What happens is that after the above become all of the instances of the old class will have a class pointer identifying them as instances of newClass. If we get our hands on any of these instances we will break immediately since their expected instance layout (that of its class, e.g., newClass) will not match their actual instance layout (that of oldClass). And getting your hands on any of those instances is really simple - just reshaping one class two times in rapid succession will do it. Reflection techniques, interrupts, etc. will only add to this problem. In the case of Metaclass things get even worse since when we recompile the entire class hierarchy we will recompile both, Metaclass and its instances (and some of its instances will have the old and some the new layout). The only easy solution to this problem would be to 'fix up' the class pointers of the old instances to point to the old class (using primitiveChangeClassTo:). But this won't work either - as we do a one-way become we would have to search the entire object memory for the oldClass and couldn't even clearly identify it unless we give it some 'special token' which sounds quite error-prone. If you really need to get rid of the GC here are some alternatives: On the image level, one could create a copy of the oldClass before becoming it into the new class and, after becoming it, 'fix up' the old instances. That would certainly work but it sounds quite complex, as we need to make sure we're not breaking any of the superclass/subclass meta/non-meta class variants. Alternatively, fix up #becomeForward on the VM-level to 'dump the source objects' of #become. This would be quite doable (just 'convert' them into a well known special class such as bitmap) yet it has problems if (accidentally or not) one of the objects in #become: appears on 'both sides of the fence' (right now, this will work ... in a way ... even though the consequences are unclear). Another alternative is to provide a dedicated primitive for this (instead of using it implicitly in become) which would allow us to dump all the existing instances right here. This is equivalent to a more general primitiveChangeClassTo: and might be worthwhile but it would likely have to keep in mind the differences between bits and pointer thingies etc. Since all of the alternatives seem rather complex and magical compared to a straight-forward GC it seems best to stick with the GC solution for now. If someone has a real need to fix this problem, that person will likely be motivated enough to check out the alternatives. Personally I'd probably go for #1 (copy the old class and remap the instances to it) since it's a solution that could be easily reverted from within the image if there's any problem with it." ] valueUnpreemptively. ! ! !UndefinedObject methodsFor: 'testing' stamp: 'MarcusDenker 4/9/2013 14:26'! isNotNil "Refer to the comment in Object|isNotNil." ^false! ! !Object methodsFor: 'testing' stamp: 'MarcusDenker 4/9/2013 14:25'! isNotNil "Coerces nil to false and everything else to true." ^true! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(9 April 2013 3:17:31 pm) Pharo.image priorSource: 881143! ----STARTUP----an Array(9 April 2013 3:24:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 April 2013 3:24:37 pm) Pharo-30029.image priorSource: 897982! ----STARTUP----an Array(10 April 2013 8:29:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/10/2013 08:26' prior: 34435872! commentForCurrentUpdate ^ '7238 StrikeFont strikeLength instance variable is only set once in a method and not even used in that method https://pharo.fogbugz.com/f/cases/7238 7342 CommandLineHandler should use ExitException https://pharo.fogbugz.com/f/cases/7342 10250 remove Utilities, TheWorldMenu and Preferences https://pharo.fogbugz.com/f/cases/10250'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/10/2013 08:26'! script129 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.220.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.90.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/10/2013 08:26'! update30030 "self new update30030" self withUpdateLog: '7238 StrikeFont strikeLength instance variable is only set once in a method and not even used in that method https://pharo.fogbugz.com/f/cases/7238 7342 CommandLineHandler should use ExitException https://pharo.fogbugz.com/f/cases/7342 10250 remove Utilities, TheWorldMenu and Preferences https://pharo.fogbugz.com/f/cases/10250'. self loadTogether: self script129 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Exit commentStamp: '' prior: 0! An Exit is an exception that quit the image without saving with a given success status. Exit signalFaillure: 'something went wrong'! !CommandLineHandler methodsFor: 'utility' stamp: 'ErwanDouaille 4/8/2013 11:18' prior: 19736871! exitFailure ^ self exitFailure: 'Commandline failed'! ! !CommandLineHandler methodsFor: 'utility' stamp: 'ErwanDouaille 4/8/2013 11:18' prior: 33845657! exitFailure: aMessage Exit signalFaillure: aMessage ! ! !CommandLineHandler methodsFor: 'utility' stamp: 'ErwanDouaille 4/8/2013 11:18' prior: 19737222! exitSuccess Exit signalSuccess ! ! !InMidstOfFileinNotification methodsFor: 'exceptiondescription' stamp: 'RAA 5/28/2001 17:07' prior: 23559076! defaultAction self resume: false! ! !Exit commentStamp: '' prior: 34463110! An Exit is an exception that quit the image without saving with a given success status. Exit signalFaillure: 'something went wrong'! !Exit class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/8/2013 16:24'! failure ^ self status: 1! ! !Exit class methodsFor: 'signalling' stamp: 'ErwanDouaille 4/8/2013 10:52'! signalFaillure ^ self failure signal! ! !Exit class methodsFor: 'signalling' stamp: 'ErwanDouaille 4/8/2013 10:53'! signalFaillure: aMessage ^ self failure signal: aMessage! ! !Exit class methodsFor: 'signalling' stamp: 'ErwanDouaille 4/8/2013 10:52'! signalSuccess ^self success signal! ! !Exit class methodsFor: 'signalling' stamp: 'ErwanDouaille 4/8/2013 10:53'! signalSuccess: aMessage ^self success signal: aMessage! ! !Exit class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/8/2013 16:25'! status: aPositiveInteger ^ self new status: aPositiveInteger; yourself! ! !Exit class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/8/2013 16:24'! success ^ self status: 0! ! !Exit methodsFor: 'accessing' stamp: 'ErwanDouaille 4/8/2013 11:00'! defaultAction self messageText ifNotNil: [ self printMessage ]. Smalltalk exit: self status! ! !Exit methodsFor: 'testing' stamp: 'ErwanDouaille 4/8/2013 10:47'! isSuccess ^self status = 0! ! !Exit methodsFor: 'accessing' stamp: 'ErwanDouaille 4/8/2013 11:07'! printMessage |stderr| stderr := VTermOutputDriver stderr. self isSuccess ifFalse: [ stderr red ]. stderr nextPutAll: self messageText; lf; clear.! ! !Exit methodsFor: 'accessing' stamp: 'ErwanDouaille 4/8/2013 10:46'! status ^ status! ! !Exit methodsFor: 'accessing' stamp: 'ErwanDouaille 4/8/2013 10:46'! status: anInteger status := anInteger .! ! !Abort methodsFor: 'accessing' stamp: 'ajh 3/24/2003 00:55' prior: 17163480! defaultAction "No one has handled this error, but now give them a chance to decide how to debug it. If none handle this either then open debugger (see UnhandedError-defaultAction)" UnhandledError signalForException: self! ! !StrikeFont methodsFor: 'file in/out' stamp: 'MarcusDenker 3/25/2013 16:09' prior: 50956364! newFromStrike: fileName "Build an instance from the strike font file name. The '.strike' extension is optional." | strike startName raster16 | name := fileName copyUpTo: $.. "assumes extension (if any) is '.strike'" strike := FileStream readOnlyFileNamed: name , '.strike.'. strike binary. "strip off direcory name if any" startName := name size. [ startName > 0 and: [ (name at: startName) ~= $> & ((name at: startName) ~= $]) ] ] whileTrue: [ startName := startName - 1 ]. name := name copyFrom: startName + 1 to: name size. type := strike nextWord. "type is ignored now -- simplest assumed. Kept here to make writing and consistency more straightforward." minAscii := strike nextWord. maxAscii := strike nextWord. maxWidth := strike nextWord. strike nextWord. "strikeLength" ascent := strike nextWord. descent := strike nextWord. strike nextWord. "xOffset" raster16 := strike nextWord. superscript := (ascent - descent) // 3. subscript := (descent - ascent) // 3. emphasis := 0. glyphs := Form extent: (raster16 * 16) @ self height offset: 0 @ 0. glyphs bits fromByteStream: strike. xTable := (Array new: maxAscii + 3) atAllPut: 0. (minAscii + 1 to: maxAscii + 3) do: [ :index | xTable at: index put: strike nextWord ]. "Set up space character" ((xTable at: Space asciiValue + 2) = 0 or: [ (xTable at: Space asciiValue + 2) = (xTable at: Space asciiValue + 1) ]) ifTrue: [ Space asciiValue + 2 to: xTable size do: [ :index | xTable at: index put: (xTable at: index) + DefaultSpace ] ]. strike close. characterToGlyphMap := nil! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'ErwanDouaille 4/8/2013 11:27'! activateSubCommand: aCommandLinehandler [ aCommandLinehandler activateWith: commandLine ] on: Exit do: [ :exit | Smalltalk isInteractive ifTrue: [ exit isSuccess ifFalse: [ Error signal: exit messageText ]] ifFalse: [ exit pass ]]! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'ErwanDouaille 4/8/2013 11:21' prior: 20613371! handleSubcommand "check if there is an active subcommand" | handlers | handlers := self selectHandlers. "ignore the default command line handler" handlers first = DefaultCommandLineHandler ifTrue: [ ^ self ]. ^self activateSubCommand: handlers first . ! ! !UnhandledError class methodsFor: 'signalling' stamp: 'ajh 9/4/2002 19:17' prior: 54493644! signalForException: anError ^ self new exception: anError; signal! ! !UnhandledError methodsFor: 'accessing' stamp: 'ajh 9/4/2002 19:15' prior: 54493196! exception ^ exception! ! !UnhandledError methodsFor: 'accessing' stamp: 'ajh 9/4/2002 19:15' prior: 54493303! exception: anError exception := anError! ! Smalltalk globals removeClassNamed: #Utilities! Smalltalk globals removeClassNamed: #Preferences! Smalltalk globals removeClassNamed: #TheWorldMenu! "Compatibility"! "Graphics-Fonts"! "Kernel"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(10 April 2013 8:29:23 am) Pharo.image priorSource: 898179! ----STARTUP----an Array(10 April 2013 8:35:23 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 April 2013 8:35:23 am) Pharo-30030.image priorSource: 914600! ----STARTUP----an Array(10 April 2013 1:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/10/2013 13:39' prior: 34452910! commentForCurrentUpdate ^ '10256 Got startup errors https://pharo.fogbugz.com/f/cases/10256 10257 Prevent potential UI deadlock for MCWorkingCopyBrowser when saving https://pharo.fogbugz.com/f/cases/10257 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/10/2013 13:39'! script130 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.68.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.39.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.779.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.223.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/10/2013 13:39'! update30031 "self new update30031" self withUpdateLog: '10256 Got startup errors https://pharo.fogbugz.com/f/cases/10256 10257 Prevent potential UI deadlock for MCWorkingCopyBrowser when saving https://pharo.fogbugz.com/f/cases/10257 '. self loadTogether: self script130 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/10/2013 11:12' prior: 25163813! basicSaveVersionIn: aRepository | newVersion waitForVersion | waitForVersion := Semaphore new. WorldState addDeferredUIMessage: [ newVersion := workingCopy newVersion. waitForVersion signal ]. Processor activeProcess == UIManager default uiProcess ifFalse: [ waitForVersion wait ]. newVersion ifNil: [ ^ self ]. Cursor wait showWhile: [ [ aRepository storeVersion: newVersion. aRepository storeDependencies: newVersion ] ensure: [ (MCVersionInspector new version: newVersion) show ]]! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/10/2013 11:14' prior: 25169671! saveVersion self canSave ifFalse: [ ^ self ]. "fork the whole version creation " [ self basicSaveVersionIn: self repository ] fork! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 4/10/2013 10:54' prior: 34467755! activateSubCommand: aCommandLinehandler [ aCommandLinehandler activateWith: commandLine ] on: Exit do: [ :exit | Smalltalk isInteractive ifTrue: [ exit isSuccess ifTrue: [ self inform: aCommandLinehandler name, ' successfully finished' ] ifFalse: [ Error signal: exit messageText ]] ifFalse: [ exit pass ]. "for failing subcommands return self which is used to check if the subcommand failed" exit isSuccess ifFalse: [ ^ self ]]. "the return value of this method is used to check if the subcommand was successfull" ^ aCommandLinehandler! ! !SaveCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 4/10/2013 10:42' prior: 34056086! activate self activateHelp ifTrue: [ ^ self ]. ((self hasOption: 'delete-old') ifTrue: [ self arguments size = 2 ] ifFalse: [ self arguments size = 1]) ifFalse: [ self printHelp. ^ self exitFailure: 'Missing Arguments' ]. self saveImage. ! ! !SaveCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 4/10/2013 10:48' prior: 32671801! saveImage | imageName oldImageFile oldChangesFile | imageName := self arguments detect: [ :arg| arg ~= '--delete-old' ]. oldImageFile := Smalltalk imageFile resolve. oldChangesFile := Smalltalk changesFile resolve. (Smalltalk saveAs: imageName) ifTrue: [ "rebooting, when executing this, we are already in the renamed image" ^ self ]. "...otherwise continuing" (self hasOption: 'delete-old') ifFalse: [ ^ self exitSuccess ]. oldImageFile delete. oldChangesFile delete. self exitSuccess.! ! "MonticelloGUI"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(10 April 2013 1:41:06 pm) Pharo.image priorSource: 914799! ----STARTUP----an Array(10 April 2013 1:48:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 April 2013 1:48:05 pm) Pharo-30031.image priorSource: 927540! ----STARTUP----an Array(10 April 2013 1:50:59 pm) as /Users/denker/Desktop/30031/Pharo-30031.image! ----QUIT----an Array(10 April 2013 1:51:08 pm) Pharo-30031.image priorSource: 927739! ----STARTUP----an Array(11 April 2013 12:59:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/11/2013 12:38' prior: 34469528! commentForCurrentUpdate ^ '10237 MCHttpRepository>>#location: should instantiate specialized repositories if possible https://pharo.fogbugz.com/f/cases/10237/ 7627 FileReference>>deleteAll follows symlinks https://pharo.fogbugz.com/f/cases/7627/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/11/2013 12:38'! script131 ^ 'AST-Core-MarcusDenker.115.mcz AST-Semantic-MarcusDenker.23.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.73.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.38.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.11.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/11/2013 12:38'! update30032 "self new update30032" self withUpdateLog: '10237 MCHttpRepository>>#location: should instantiate specialized repositories if possible https://pharo.fogbugz.com/f/cases/10237/ 7627 FileReference>>deleteAll follows symlinks https://pharo.fogbugz.com/f/cases/7627/ '. self loadTogether: self script131 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCCacheRepository commentStamp: '' prior: 0! I am a special monticello directory-based repository that is used for the global monticello cache. Most other repositories will first query the default cache repository for existing files before handling the request by themselves. For instance an http repository will first check if the file is in the caceh before doing a "slow" download.! !MCFtpRepository commentStamp: '' prior: 0! I am an monticello repository implementation for the FTP protocol.! !MCHttpRepository commentStamp: '' prior: 0! I am general http repository for monticello. I support the general protocol for listing files in a remote repository.! !MCSmalltalkhubRepository commentStamp: '' prior: 0! I am specialized version of an MCHttpRepository for http://smalltalkhub.com. I support a faster mcz listing that does not rely on parsing an html size.! !MCSqueaksourceRepository commentStamp: '' prior: 0! I am a specialized MCHttpRepository for http://squeaksource.com. I optimize checks for existing files by doing a head request instead of reloading the whole file list first.! !FileSystemGuide commentStamp: 'cwp 11/18/2009 12:09' prior: 22043142! I am an abstract superclass for objects that fulfill the Guide role in the Guide/Visitor pattern. My subclasses know how to traverse a filesystem in a specific order, "showing" the files and directories they encounter to a visitor. visitor An object that fulfills the Visitor role and implements the visitor protocol. work An OrderedCollection, used to keep track of filesystem nodes that have not yet been visited! !BreadthFirstGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:41' prior: 18412753! visitNextEntry: entry entry isFile ifTrue: [ ^ visitor visitFile: entry ]. visitor visitDirectory: entry. (self shouldVisitChildrenOf: entry) ifTrue: [ self pushAll: entry reference entries ].! ! !DeleteVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 4/10/2013 12:19' prior: 20649358! visit: aReference PostorderGuide show: aReference to: self selecting: [ :entry | entry isSymlink not ]! ! !PreorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:14' prior: 29949707! pushAll: aCollection aCollection reverseDo: [ :each | work add: each ]! ! !PreorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:39' prior: 29949848! show: aReference self push: aReference entry. self whileNotDoneDo: [ self visitNextEntry: self pop ]! ! !PreorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:42'! visitNextEntry: entry entry isFile ifTrue: [ visitor visitFile: entry ] ifFalse: [ visitor visitDirectory: entry. (self shouldVisitChildrenOf: entry) ifTrue: [ self pushAll: entry reference entries ]]! ! !PostorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 11:55' prior: 29883795! show: aReference self pushTraverse: aReference entry. self whileNotDoneDo: [ self pop sendTo: self ]! ! !PostorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:30' prior: 29883971! traverse: anEntry self pushVisit: anEntry. anEntry isDirectory ifTrue: [ (self shouldVisitChildrenOf: anEntry) ifFalse: [ ^ self ]. anEntry reference entries reverseDo: [ :each | self pushTraverse: each ]]! ! !PostorderGuide methodsFor: 'showing' stamp: 'CamilloBruni 4/10/2013 12:25' prior: 29884194! visit: anEntry anEntry isDirectory ifTrue: [ visitor visitDirectory: anEntry ] ifFalse: [ visitor visitFile: anEntry ]! ! !MCGemstoneRepository class methodsFor: 'testing' stamp: 'CamilloBruni 4/6/2013 23:05'! isResponsibleFor: aUrl ^ aUrl includesSubstring: 'ss3.gemstone.com/'! ! !AbstractEnumerationVisitorTest methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 4/10/2013 12:38' prior: 17184257! assertEntries: references are: expected | strings | self assert: references isArray. references do: [ :ea | self assert: ea class = FileSystemDirectoryEntry ]. strings := references collect: [ :ea | ea reference pathString ]. self assert: strings equals: expected! ! !MCCacheRepository commentStamp: '' prior: 34492652! I am a special monticello directory-based repository that is used for the global monticello cache. Most other repositories will first query the default cache repository for existing files before handling the request by themselves. For instance an http repository will first check if the file is in the caceh before doing a "slow" download.! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/6/2013 23:43' prior: 25165790! editRepository | newRepo | newRepo := self repository openAndEditTemplateCopy. newRepo ifNotNil: [ (newRepo isKindOf: MCRepository) ifFalse: [ self inform: 'Got a ', newRepo class name, ' instead of a Monticello Repository']. self flag: 'Is this ugly? yes!!'. self repository becomeForward: newRepo ]. self repositoryListChanged! ! !MCFtpRepository commentStamp: '' prior: 34493050! I am an monticello repository implementation for the FTP protocol.! !MCHttpRepository commentStamp: '' prior: 34493175! I am general http repository for monticello. I support the general protocol for listing files in a remote repository.! !MCHttpRepository class methodsFor: 'testing' stamp: 'CamilloBruni 4/6/2013 23:04'! isResponsibleFor: aURLString "Override in subclasses to enable custom instances for certain URLs" ^ true! ! !MCHttpRepository class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/6/2013 23:02' prior: 24810169! location: location ^ MCServerRegistry uniqueInstance repositoryAt: location credentialsDo: [ :username :password | (self repositoryClassFor: location) new location: location; user: username; password: password; yourself ]! ! !MCHttpRepository class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/6/2013 23:33'! repositoryClassFor: location MCHttpRepository subclassesDo: [ :subclass | (subclass isResponsibleFor: location) ifTrue: [ ^ subclass ]]. ^ MCHttpRepository! ! !MCSmalltalkhubRepository commentStamp: '' prior: 34493359! I am specialized version of an MCHttpRepository for http://smalltalkhub.com. I support a faster mcz listing that does not rely on parsing an html size.! !MCSmalltalkhubRepository class methodsFor: 'testing' stamp: 'CamilloBruni 4/6/2013 23:09'! isResponsibleFor: aUrl ^ aUrl includesSubstring: self smalltalkhubUrl! ! !MCSmalltalkhubRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:09'! smalltalkhubUrl ^ 'http://smalltalkhub.com/'! ! !MCSmalltalkhubRepository methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:12'! location: aUrlString | pathSegments | (self class isResponsibleFor: aUrlString) ifFalse: [ Error signal: 'Please provide a smalltalkhub url' ]. "extract the smalltalkhub properties from the path part in the given URL" pathSegments := aUrlString asZnUrl pathSegments reject: [ :each | each = 'mc' ]. self owner: pathSegments first. self project: pathSegments second.! ! !MCSqueaksourceRepository commentStamp: '' prior: 34493577! I am a specialized MCHttpRepository for http://squeaksource.com. I optimize checks for existing files by doing a head request instead of reloading the whole file list first.! !MCSqueaksourceRepository class methodsFor: 'testing' stamp: 'CamilloBruni 4/6/2013 23:07'! isResponsibleFor: aUrl ^ aUrl includesSubstring: 'squeaksource.com/'! ! !FileSystemGuide commentStamp: 'cwp 11/18/2009 12:09' prior: 34493823! I am an abstract superclass for objects that fulfill the Guide role in the Guide/Visitor pattern. My subclasses know how to traverse a filesystem in a specific order, "showing" the files and directories they encounter to a visitor. visitor An object that fulfills the Visitor role and implements the visitor protocol. work An OrderedCollection, used to keep track of filesystem nodes that have not yet been visited! !FileSystemGuide class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/10/2013 12:29'! show: aReference to: aVisitor selecting: aBlock ^ (self for: aVisitor) selectChildren: aBlock; show: aReference! ! !FileSystemGuide methodsFor: 'removing' stamp: 'CamilloBruni 8/12/2011 18:18' prior: 22043655! pop ^ work removeLast! ! !FileSystemGuide methodsFor: 'adding' stamp: 'CamilloBruni 8/12/2011 18:18' prior: 22043772! push: anObject work add: anObject! ! !FileSystemGuide methodsFor: 'showing' stamp: 'CamilloBruni 8/12/2011 18:20' prior: 22043901! pushAll: aCollection aCollection do: [ :ea | self push: ea ]! ! !FileSystemGuide methodsFor: 'accessing' stamp: 'CamilloBruni 4/10/2013 12:29'! selectChildren ^ selectChildren! ! !FileSystemGuide methodsFor: 'accessing' stamp: 'CamilloBruni 4/10/2013 12:34'! selectChildren: aBlock "With this block you can control how the guide spreads over directories. Example: self selectChildren: [ :parentEntry | parentEntry isSymlink not ]. This will prevent the outer visitor to see any children of symlinked directories. Since the guides essentially rearrange the files visited controlling which children you see is the main concern of the guide. All the other visiting aspects can be controlled in the visitor." selectChildren := aBlock! ! !FileSystemGuide methodsFor: 'testing' stamp: 'CamilloBruni 4/10/2013 12:29'! shouldVisitChildrenOf: anEntry ^ selectChildren ifNil: [ true ] ifNotNil: [ selectChildren cull: anEntry ]! ! !FileSystemGuide methodsFor: 'accessing' stamp: 'CamilloBruni 8/12/2011 18:22' prior: 22044058! top ^ work removeFirst! ! "FileSystem-Core"! "FileSystem-Tests-Core"! "Monticello"! "MonticelloGUI"! ----End fileIn----! ----QUIT----an Array(11 April 2013 12:59:47 pm) Pharo.image priorSource: 927932! ----STARTUP----an Array(11 April 2013 1:06:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 April 2013 1:06:04 pm) Pharo-30032.image priorSource: 947903! ----STARTUP----an Array(11 April 2013 3:19:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/11/2013 15:16' prior: 34482661! commentForCurrentUpdate ^ '10177 Deprecate accept* in visitor https://pharo.fogbugz.com/f/cases/1017'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/11/2013 15:16'! script132 ^ 'AST-Core-MarcusDenker.122.mcz AST-Semantic-MarcusDenker.24.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-MarcusDenker.37.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.73.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/11/2013 15:16'! update30033 "self new update30033" self withUpdateLog: '10177 Deprecate accept* in visitor https://pharo.fogbugz.com/f/cases/1017'. self loadTogether: self script132 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TRBProgramNodeVisitor commentStamp: '' prior: 0! A TRBProgramNodeVisitor is a simple that define visitor methods. ! !ManifestASTCore commentStamp: '' prior: 0! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! !TRBProgramNodeVisitor commentStamp: '' prior: 34512530! A TRBProgramNodeVisitor is a simple that define visitor methods. ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:12' prior: 52139522! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:12' prior: 52139699! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 15:17' prior: 52139885! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:13' prior: 52140108! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:03' prior: 52140313! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:03' prior: 52140503! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:11' prior: 52140712! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 52140843! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 52141152! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 52141422! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 52141555! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 52141794! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 52142118! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:13' prior: 52142307! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 52142474! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 52142637! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 52142883! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 52143049! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 52143229! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 18:06' prior: 52143413! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:15' prior: 52143546! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:15'! visitArgumentNode: anArgumentNode ^ self visitVariableNode: anArgumentNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:19'! visitArgumentNodes: aNodeCollection ^aNodeCollection do: [ :each | self visitArgumentNode: each ]! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'StephaneDucasse 3/29/2013 16:20' prior: 52143754! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:16'! visitArrayNode: anArrayNode anArrayNode children do: [:each | self visitNode: each]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:18'! visitAssignmentNode: anAssignmentNode self visitNode: anAssignmentNode variable. self visitNode: anAssignmentNode value! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:20'! visitBlockNode: aBlockNode self visitArgumentNodes: aBlockNode arguments. self visitNode: aBlockNode body! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:18'! visitCascadeNode: aCascadeNode aCascadeNode messages do: [:each | self visitNode: each]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:18'! visitLiteralArrayNode: aRBLiteralArrayNode aRBLiteralArrayNode contents do: [:each | self visitNode: each]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:19'! visitLiteralNode: aLiteralNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:19'! visitMessageNode: aMessageNode (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:20'! visitMethodNode: aMethodNode self visitArgumentNodes: aMethodNode arguments. aMethodNode pragmas do: [ :each | self visitNode: each ]. self visitNode: aMethodNode body! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 10/31/2012 19:14' prior: 52143943! visitNode: aNode ^aNode acceptVisitor: self! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:19'! visitParseErrorNode: anErrorNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:20'! visitPatternBlockNode: aRBPatternBlockNode self visitArgumentNodes: aRBPatternBlockNode arguments. self visitNode: aRBPatternBlockNode body! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:20'! visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode self visitNode: aRBPatternWrapperBlockNode wrappedNode. self visitArgumentNodes: aRBPatternWrapperBlockNode arguments. self visitNode: aRBPatternWrapperBlockNode body! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:19'! visitPragmaNode: aPragmaNode aPragmaNode arguments do: [ :each | self visitNode: each ]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:25'! visitReturnNode: aReturnNode ^ self visitNode: aReturnNode value! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:25'! visitSelfNode: aSelfNode ^ self visitVariableNode: aSelfNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:21'! visitSequenceNode: aSequenceNode self visitTemporaryNodes: aSequenceNode temporaries. aSequenceNode statements do: [:each | self visitNode: each]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:20'! visitSuperNode: aSuperNode ^ self visitVariableNode: aSuperNode! ! !TRBProgramNodeVisitor methodsFor: 'deprecated' stamp: 'CamilleTeruel 4/3/2013 15:15' prior: 52144088! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:19'! visitTemporaryNode: aNode ^ self visitArgumentNode: aNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:20'! visitTemporaryNodes: aNodeCollection ^ self visitArgumentNodes: aNodeCollection! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:20'! visitThisContextNode: aThisContextNode ^ self visitVariableNode: aThisContextNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:15'! visitVariableNode: aVariableNode! ! !RBSuperNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:39' prior: 31440312! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitSuperNode: self! ! !RBPatternParser methodsFor: 'private-parsing' stamp: 'StephaneDucasse 3/29/2013 17:16'! parseError: aString self error: aString! ! !RBParseTreeRewriter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:29'! visitArgumentNodes: aNodeCollection ^aNodeCollection collect: [:each | self visitArgumentNode: each]! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:30'! visitArrayNode: anArrayNode anArrayNode statements: (anArrayNode statements collect: [:each | self visitNode: each])! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:28'! visitAssignmentNode: anAssignmentNode anAssignmentNode variable: (self visitNode: anAssignmentNode variable). anAssignmentNode value: (self visitNode: anAssignmentNode value)! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:28'! visitBlockNode: aBlockNode aBlockNode arguments: (self visitArgumentNodes: aBlockNode arguments). aBlockNode body: (self visitNode: aBlockNode body)! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:28'! visitCascadeNode: aCascadeNode | newMessages notFound | newMessages := OrderedCollection new: aCascadeNode messages size. notFound := OrderedCollection new: aCascadeNode messages size. aCascadeNode messages do: [:each | | newNode | newNode := self performSearches: searches on: each. newNode isNil ifTrue: [newNode := each. notFound add: newNode]. newNode isMessage ifTrue: [newMessages add: newNode] ifFalse: [newNode isCascade ifTrue: [newMessages addAll: newNode messages] ifFalse: [Transcript show: 'Cannot replace message node inside of cascaded node with non-message node.'; cr. newMessages add: each]]]. notFound size = aCascadeNode messages size ifTrue: [| receiver | receiver := self visitNode: aCascadeNode messages first receiver. newMessages do: [:each | each receiver: receiver]]. notFound do: [:each | each arguments: (each arguments collect: [:arg | self visitNode: arg])]. aCascadeNode messages: newMessages! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:32'! visitLiteralArrayNode: aRBArrayLiteralNode aRBArrayLiteralNode contents: (aRBArrayLiteralNode contents collect: [ :each | self visitNode: each ])! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:32'! visitMessageNode: aMessageNode aMessageNode receiver: (self visitNode: aMessageNode receiver). aMessageNode arguments: (aMessageNode arguments collect: [ :each | self visitNode: each ])! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:32'! visitMethodNode: aMethodNode aMethodNode arguments: (self visitArgumentNodes: aMethodNode arguments). aMethodNode pragmas: (aMethodNode pragmas collect: [ :each | self visitNode: each ]). aMethodNode body: (self visitNode: aMethodNode body)! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:32'! visitPragmaNode: aPragmaNode aPragmaNode arguments: (aPragmaNode arguments collect: [ :each | self visitNode: each ])! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:29'! visitReturnNode: aReturnNode aReturnNode value: (self visitNode: aReturnNode value)! ! !RBParseTreeRewriter methodsFor: 'visitor-double dispatching' stamp: 'StephaneDucasse 3/29/2013 16:31'! visitSequenceNode: aSequenceNode aSequenceNode temporaries: (self visitTemporaryNodes: aSequenceNode temporaries). aSequenceNode statements: (aSequenceNode statements collect: [ :each | self visitNode: each ])! ! !RBPragmaNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:38' prior: 31012884! acceptVisitor: aProgramNodeVisitor ^ aProgramNodeVisitor visitPragmaNode: self! ! !RBAssignmentNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:36' prior: 30251764! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitAssignmentNode: self! ! !RBAssignmentNode methodsFor: 'accessing' stamp: 'StephaneDucasse 3/29/2013 17:33' prior: 30245957! assignmentOperator ^ ':=' ! ! !RBBlockNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:36' prior: 30320418! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitBlockNode: self! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:00'! searchFor: searchString replaceWith: replaceString self subclassResponsibility! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:01'! searchFor: searchString replaceWith: replaceString when: aBlock self subclassResponsibility! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:01'! searchForMethod: searchString replaceWith: replaceString self subclassResponsibility! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:01'! searchForMethod: searchString replaceWith: replaceString when: aBlock self subclassResponsibility! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:01'! searchForTree: aBRProgramNode replaceWith: replaceNode self subclassResponsibility! ! !RBReplaceRule methodsFor: 'matching' stamp: 'StephaneDucasse 3/29/2013 18:01'! searchForTree: aBRProgramNode replaceWith: replaceString when: aBlock self subclassResponsibility! ! !RBCascadeNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:36' prior: 30369511! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitCascadeNode: self! ! !RBConfigurableFormatter methodsFor: 'private-formatting' stamp: 'StephaneDucasse 3/29/2013 17:25' prior: 30482482! formatSelectorAndArguments: aMessageNode firstSeparator: firstBlock restSeparator: restBlock | separatorBlock | separatorBlock := firstBlock. aMessageNode isUnary ifTrue: [ self handleLineForSelector: aMessageNode selector withSeparatorBlock: separatorBlock. codeStream nextPutAll: aMessageNode selector ] ifFalse: [ aMessageNode selectorParts with: aMessageNode arguments do: [ :selector :argument | self handleLineForSelector: selector value withSeparatorBlock: separatorBlock. separatorBlock := restBlock. self indentAround: [ codeStream nextPutAll: selector value. (KeepBlockInMessage and: [ argument isBlock ]) ifTrue: [ self space; visitNode: argument ] ifFalse: [ ((self willBeMultiline: argument) or: [ self isLineTooLong: (self formattedSourceFor: argument) ]) ifTrue: [ self newLine ] ifFalse: [ self space ]. self visitNode: argument ] ] ] ]! ! !RBConfigurableFormatter methodsFor: 'private-formatting' stamp: 'StephaneDucasse 3/29/2013 17:23'! handleLineForSelector: selector withSeparatorBlock: aBlock ^ (self isLineTooLong: selector) ifTrue: [ self newLine ] ifFalse: [ aBlock value ]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:55'! visitArrayNode: anArrayNode self bracketWith: '{}' around: [ self formatArray: anArrayNode ]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:55'! visitAssignmentNode: anAssignmentNode self visitNode: anAssignmentNode variable. codeStream space; nextPutAll: anAssignmentNode assignmentOperator; space. self visitNode: anAssignmentNode value! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitBlockNode: aBlockNode self bracketWith: '[]' around: [self formatBlock: aBlockNode]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitCascadeNode: aCascadeNode self visitNode: aCascadeNode receiver. self indentAround: [NewLineBeforeFirstCascade ifTrue: [self newLine] ifFalse: [self space]. aCascadeNode messages do: [:each | self indentAround: [self formatSelectorAndArguments: each firstSeparator: [] restSeparator: ((self isMultiLineMessage: each) ifTrue: [[self newLine]] ifFalse: [[self space]])]] separatedBy: [codeStream nextPut: $;. NewLineAfterCascade ifTrue: [self newLine] ifFalse: [self space]]]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitLiteralArrayNode: aRBArrayLiteralNode | brackets | codeStream nextPut: $#. brackets := aRBArrayLiteralNode isForByteArray ifTrue: ['[]'] ifFalse: ['()']. self bracketWith: brackets around: [aRBArrayLiteralNode contents do: [:each | self visitNode: each] separatedBy: [self space]]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitLiteralNode: aLiteralNode self writeString: aLiteralNode token storeString! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitMessageNode: aMessageNode self visitNode: aMessageNode receiver. self formatSelectorAndArguments: aMessageNode! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitMethodNode: aMethodNode self formatMethodPatternFor: aMethodNode. self formatMethodBodyFor: aMethodNode! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitPatternBlockNode: aRBPatternBlockNode codeStream nextPut: $`. self bracketWith: '{}' around: [self formatBlock: aRBPatternBlockNode]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:56'! visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode self visitNode: aRBPatternWrapperBlockNode wrappedNode. codeStream nextPut: $`. self bracketWith: '{}' around: [self formatBlock: aRBPatternWrapperBlockNode]! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:57'! visitPragmaNode: aPragmaNode codeStream nextPut: $<. self formatSelectorAndArguments: aPragmaNode firstSeparator: [ aPragmaNode selector isInfix ifTrue: [ self space ] ] restSeparator: [ self space ]. codeStream nextPut: $>! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:57'! visitReturnNode: aReturnNode codeStream nextPut: $^; nextPutAll: StringFollowingReturn. self visitNode: aReturnNode value! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:57'! visitSequenceNode: aSequenceNode self formatTemporariesFor: aSequenceNode. self formatSequenceCommentsFor: aSequenceNode. self formatSequenceNodeStatementsFor: aSequenceNode! ! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:57'! visitVariableNode: aVariableNode codeStream nextPutAll: aVariableNode name! ! !RBProgramNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 17:15' prior: 31036304! accept: aProgramNodeVisitor self deprecated: 'Use acceptVisitor: instead' on: '29/03/2013' in: #Pharo30. self acceptVisitor: aProgramNodeVisitor ! ! !RBProgramNode methodsFor: 'visiting' stamp: '' prior: 31036553! acceptVisitor: aProgramNodeVisitor self subclassResponsibility! ! !RBFormatter methodsFor: 'private-formatting' stamp: 'StephaneDucasse 3/29/2013 17:31' prior: 30610472! formatMessage: aMessageNode cascade: cascadeBoolean | selectorParts arguments multiLine formattedArgs indentFirst firstArgLength length | selectorParts := aMessageNode selectorParts. arguments := aMessageNode arguments. formattedArgs := OrderedCollection new. multiLine := aMessageNode selector numArgs > self maximumArgumentsPerLine. length := aMessageNode selector size + arguments size + 1. firstArgLength := 0. self indentWhile: [1 to: arguments size do: [:i | | formatter string | formatter := self copy lineStart: (selectorParts at: i) length negated; yourself. string := formatter format: (arguments at: i). formattedArgs add: string. i == 1 ifTrue: [firstArgLength := formatter firstLineLength]. length := length + string size. multiLine := multiLine or: [formatter isMultiLine]]]. multiLine := multiLine or: [length + self lineLength > self maxLineSize]. indentFirst := cascadeBoolean not and: [multiLine and: [(self startMessageSendOnNewLine: aMessageNode) or: [self lineLength + selectorParts first length + 2 + firstArgLength > self maxLineSize]]]. indentFirst ifTrue: [self indent]. self formatMessageSelector: selectorParts withArguments: formattedArgs multiline: multiLine! ! !RBFormatter methodsFor: 'private-formatting' stamp: 'StephaneDucasse 3/29/2013 16:11' prior: 30612792! formatMethodPatternFor: aMethodNode | selectorParts arguments | selectorParts := aMethodNode selectorParts. arguments := aMethodNode arguments. arguments isEmpty ifTrue: [codeStream nextPutAll: selectorParts first value] ifFalse: [selectorParts with: arguments do: [:selector :arg | codeStream nextPutAll: selector value; nextPut: $ . self visitArgumentNode: arg. codeStream nextPut: $ ]]! ! !RBFormatter methodsFor: 'private-formatting' stamp: 'StephaneDucasse 3/29/2013 16:11' prior: 30614337! formatTemporariesFor: aSequenceNode | temps | temps := aSequenceNode temporaries. temps isEmpty ifTrue: [^self]. codeStream nextPutAll: '| '. temps do: [:each | self visitArgumentNode: each. codeStream nextPut: $ ]. codeStream nextPut: $|. self indent! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:00'! visitArrayNode: anArrayNode codeStream nextPut: ${. anArrayNode statements isEmpty ifFalse: [ anArrayNode statements size > 1 ifTrue: [ self indent: 1 while: [ self indent. self formatStatementsFor: anArrayNode ]. self indent ] ifFalse: [ self formatStatementsFor: anArrayNode ] ]. codeStream nextPut: $}! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:00'! visitAssignmentNode: anAssignmentNode self indent: 2 while: [self visitNode: anAssignmentNode variable. codeStream space; nextPutAll: anAssignmentNode assignmentOperator; space. self visitNode: anAssignmentNode value]! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:01'! visitBlockNode: aBlockNode self visitBlockNode: aBlockNode startBlockString: '[' endBlockString: ']'! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:01'! visitBlockNode: aBlockNode startBlockString: startBlockString endBlockString: endBlockString | seqNode multiline formattedBody formatter | seqNode := aBlockNode body. formatter := (self copy) lineStart: 0; yourself. formattedBody := formatter format: seqNode. multiline := self lineLength + formattedBody size > self maxLineSize or: [formatter isMultiLine]. multiline ifTrue: [self indent]. codeStream nextPutAll: startBlockString. aBlockNode arguments do: [:each | codeStream nextPut: $:. self visitNode: each. codeStream nextPut: $ ]. aBlockNode arguments notEmpty ifTrue: [codeStream nextPutAll: '| '. multiline ifTrue: [self indent]]. codeStream nextPutAll: formattedBody; nextPutAll: endBlockString! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:02'! visitCascadeNode: aCascadeNode | messages | messages := aCascadeNode messages. self visitNode: messages first receiver. self indentWhile: [self for: messages do: [:each | self indent; indentWhile: [self formatMessage: each cascade: true]] separatedBy: [codeStream nextPut: $;]]! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:44'! visitLiteralArrayNode: aRBArrayLiteralNode codeStream nextPutAll: (aRBArrayLiteralNode isForByteArray ifTrue: ['#['] ifFalse: ['#(']). self for: aRBArrayLiteralNode contents do: [:each | self visitNode: each] separatedBy: [codeStream nextPut: $ ]. codeStream nextPut: (aRBArrayLiteralNode isForByteArray ifTrue: [$]] ifFalse: [$)])! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:02'! visitLiteralNode: aLiteralNode aLiteralNode token storeOn: codeStream! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:02'! visitMessageNode: aMessageNode | newFormatter code | newFormatter := self copy. code := newFormatter format: aMessageNode receiver. codeStream nextPutAll: code. codeStream nextPut: $ . newFormatter isMultiLine ifTrue: [lineStart := codeStream position - newFormatter lastLineLength]. self indent: (newFormatter isMultiLine ifTrue: [2] ifFalse: [1]) while: [self formatMessage: aMessageNode cascade: false]! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:02'! visitMethodNode: aMethodNode self formatMethodPatternFor: aMethodNode. self indentWhile: [ self formatMethodCommentFor: aMethodNode indentBefore: true. self indent. self formatPragmasFor: aMethodNode. aMethodNode body statements notEmpty ifTrue: [ self visitNode: aMethodNode body ] ]! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 17:16'! visitPatternBlockNode: aRBPatternBlockNode self visitBlockNode: aRBPatternBlockNode startBlockString: '`{' endBlockString: '}'! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 17:16'! visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode self visitNode: aRBPatternWrapperBlockNode wrappedNode. self visitBlockNode: aRBPatternWrapperBlockNode startBlockString: '`{' endBlockString: '}'! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:03'! visitPragmaNode: aPragmaNode codeStream nextPut: $<. aPragmaNode selector isInfix ifTrue: [ codeStream nextPut: $ ]. self formatMessage: aPragmaNode cascade: false. codeStream nextPut: $>! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:03'! visitReturnNode: aReturnNode codeStream nextPut: $^. self visitNode: aReturnNode value! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:03'! visitSequenceNode: aSequenceNode self formatMethodCommentFor: aSequenceNode indentBefore: false. self formatTemporariesFor: aSequenceNode. self formatStatementsFor: aSequenceNode! ! !RBFormatter methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:03'! visitVariableNode: aVariableNode codeStream nextPutAll: aVariableNode name! ! !RBArgumentNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:35' prior: 30231018! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitArgumentNode: self! ! !RBSemanticAnnotator methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:39'! visitArgumentNode: aNode scope add: (RBArgumentBinding node: aNode)! ! !RBSemanticAnnotator methodsFor: 'visitor-dispatching' stamp: 'StephaneDucasse 3/29/2013 15:42'! visitBlockNode: aNode self scope: aNode with: RBBlockScope during: [ super visitBlockNode: aNode ]! ! !RBSemanticAnnotator methodsFor: 'visitor-dispatching' stamp: 'StephaneDucasse 3/29/2013 15:41'! visitMethodNode: aNode self scope: aNode with: RBMethodScope during: [ super visitMethodNode: aNode ]! ! !RBSemanticAnnotator methodsFor: 'visitor-dispatching' stamp: 'StephaneDucasse 3/29/2013 15:55'! visitSequenceNode: aNode aNode temporaries do: [ :each | scope add: (RBTemporaryBinding node: each) ]. aNode statements do: [ :each | self visitNode: each ]! ! !RBSemanticAnnotator methodsFor: 'visitor-dispatching' stamp: 'StephaneDucasse 3/29/2013 15:55'! visitVariableNode: aNode | binding | binding := scope lookup: aNode name ifAbsent: [ self undeclaredVariable: aNode ]. aNode propertyAt: #variableBinding put: binding. binding addAccessor: aNode. aNode isUsed ifTrue: [ binding addReader: aNode ]. aNode isWrite ifTrue: [ binding addWriter: aNode ]! ! !RBParseErrorNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:37' prior: 30892811! acceptVisitor: aProgramNodeVisitor ^ aProgramNodeVisitor visitParseErrorNode: self.! ! !RBParseErrorNode methodsFor: 'accessing' stamp: 'CamilloBruni 11/1/2012 13:51' prior: 30892591! start ^ token start! ! !RBParseErrorNode methodsFor: 'accessing' stamp: 'CamilloBruni 11/1/2012 13:51' prior: 30892707! stop ^ token stop! ! !RBMethodNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:37' prior: 30786079! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitMethodNode: self! ! !RBTemporaryNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:39' prior: 31449650! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitTemporaryNode: self! ! !RBMessageNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:37' prior: 30754111! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitMessageNode: self! ! !RBArrayNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:36' prior: 30238434! acceptVisitor: aProgramNodeVisitor ^ aProgramNodeVisitor visitArrayNode: self! ! !RBReadBeforeWrittenTester methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:04'! visitAssignmentNode: anAssignmentNode self visitNode: anAssignmentNode value. self variableWritten: anAssignmentNode! ! !RBReadBeforeWrittenTester methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:04'! visitBlockNode: aBlockNode self processBlock: aBlockNode! ! !RBReadBeforeWrittenTester methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:04'! visitMessageNode: aMessageNode ((#(#whileTrue: #whileFalse: #whileTrue #whileFalse) includes: aMessageNode selector) and: [aMessageNode receiver isBlock]) ifTrue: [self executeTree: aMessageNode receiver body] ifFalse: [(aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]]. ((#(#ifTrue:ifFalse: #ifFalse:ifTrue:) includes: aMessageNode selector) and: [aMessageNode arguments allSatisfy: [:each | each isBlock]]) ifTrue: [^self processIfTrueIfFalse: aMessageNode]. aMessageNode arguments do: [:each | self visitNode: each]! ! !RBReadBeforeWrittenTester methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:04'! visitSequenceNode: aSequenceNode self processStatementNode: aSequenceNode! ! !RBReadBeforeWrittenTester methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 16:05'! visitVariableNode: aVariableNode self variableRead: aVariableNode! ! !RBPatternBlockNode methodsFor: 'visitor' stamp: 'StephaneDucasse 3/29/2013 15:37' prior: 30978023! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitPatternBlockNode: self! ! !RBParseTreeSearcher methodsFor: 'visiting' stamp: 'CamilleTeruel 4/3/2013 16:22'! visitArgumentNode: aNode | value | value := self performSearches: argumentSearches on: aNode. ^ value ifNil: [ super visitArgumentNode: aNode. aNode ] ifNotNil: [ value ]! ! !RBParseTreeSearcher methodsFor: 'visiting' stamp: 'CamilleTeruel 4/3/2013 16:23' prior: 30914665! visitNode: aNode | value | value := self performSearches: searches on: aNode. ^ value ifNil: [ super visitNode: aNode. aNode ] ifNotNil: [ value ]! ! !RBSequenceNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:38' prior: 31368991! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitSequenceNode: self! ! !RBThisContextNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:39' prior: 31460441! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitThisContextNode: self! ! !RBPatternWrapperBlockNode methodsFor: 'visitor' stamp: 'StephaneDucasse 3/29/2013 15:38' prior: 31000217! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitPatternWrapperBlockNode: self! ! !RBContainsRule methodsFor: 'initialization' stamp: 'CamilleTeruel 4/3/2013 17:22' prior: 30503076! initialize super initialize. self matcher matchesAnyOf: #( '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) isNil' '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) notNil' '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) = nil' '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) == nil' '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) ~= nil' '(`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [nil]) ~~ nil' '`@object detect: [:`each | | `@temps| `@.Statements] ifNone: [| `@temps1 | `@.Statements2. ^`@anything]' ) do: [ :node :answer | node ]! ! !RBSelfNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:38' prior: 31323010! acceptVisitor: aProgramNodeVisitor ^ aProgramNodeVisitor visitSelfNode: self! ! !RBVariableNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:39' prior: 31549297! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitVariableNode: self! ! !RBReturnNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:38' prior: 31280600! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitReturnNode: self! ! !RBLiteralArrayNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:36' prior: 30729676! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitLiteralArrayNode: self! ! !RBLiteralValueNode class methodsFor: 'instance creation' stamp: 'StephaneDucasse 3/29/2013 17:52' prior: 30738272! literalToken: aLiteralToken ^ self new literalToken: aLiteralToken; yourself! ! !RBLiteralValueNode methodsFor: 'visiting' stamp: 'StephaneDucasse 3/29/2013 15:37' prior: 30738014! acceptVisitor: aProgramNodeVisitor ^aProgramNodeVisitor visitLiteralNode: self! ! !ManifestASTCore commentStamp: '' prior: 34512654! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! rejectClasses ^ #()! ! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! rejectRules ^ #('LawOfDemeterRule')! ! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! ruleEquivalentSuperclassMethodsRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#RBProgramNode #isBlock #false)) #'2013-03-29T18:06:26.929+01:00') )! ! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! ruleLongMethodsRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#RBParser #parseBlockArgsInto: #false)) #'2013-03-29T18:06:27.028000001+01:00') #(#(#RGMethodDefinition #(#RBParser #patchLiteralArrayToken #false)) #'2013-03-29T18:06:27.030000002+01:00') #(#(#RGMethodDefinition #(#RBConfigurableFormatter #needsParenthesisFor: #false)) #'2013-03-29T18:06:27.030000009+01:00') #(#(#RGMethodDefinition #(#RBParser #parsePrimitiveObject #false)) #'2013-03-29T18:06:27.028000002+01:00') #(#(#RGMethodDefinition #(#RBFormatter #needsParenthesisFor: #false)) #'2013-03-29T18:06:27.028+01:00') #(#(#RGMethodDefinition #(#RBFormatter #formatMessage:cascade: #false)) #'2013-03-29T18:06:27.03+01:00') #(#(#RGMethodDefinition #(#'RBConfigurableFormatter class' #initialize #true)) #'2013-03-29T18:06:27.030000001+01:00') #(#(#RGMethodDefinition #(#RBParseTreeRewriter #visitCascadeNode: #false)) #'2013-03-29T18:06:27.030000004+01:00') #(#(#RGMethodDefinition #(#RBParser #parseStatementList:into: #false)) #'2013-03-29T18:06:27.030000005+01:00') #(#(#RGMethodDefinition #(#'RBConfigurableFormatter class' #settingsOn: #true)) #'2013-03-29T18:06:27.030000006+01:00') #(#(#RGMethodDefinition #(#RBProgramNode #matchList:index:against:index:inContext: #false)) #'2013-03-29T18:06:27.030000008+01:00') #(#(#RGMethodDefinition #(#RBMessageNode #replaceSourceWithMessageNode: #false)) #'2013-03-29T18:06:27.030000003+01:00') #(#(#RGMethodDefinition #(#RBParser #parseCascadeMessage #false)) #'2013-03-29T18:06:27.030000007+01:00') )! ! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! ruleRefersToClassRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#'RBLiteralNode class' #literalToken: #true)) #'2013-03-29T18:06:27.069+01:00') )! ! !ManifestASTCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 3/29/2013 18:06'! ruleSendsDifferentSuperRuleV1TODO ^ #(#(#(#RGMethodDefinition #(#RBMessageNode #replaceSourceWithMessageNode: #false)) #'2013-03-29T18:06:27.369+01:00') )! ! !RBTransformationRule methodsFor: 'accessing' stamp: 'CamilleTeruel 4/3/2013 17:24'! builder ^ builder ifNil: [ self resetResult. builder ]! ! !RBTransformationRule methodsFor: 'accessing' stamp: 'CamilleTeruel 4/3/2013 17:24' prior: 31471178! changes ^ self builder changes! ! RBLiteralValueNode removeSelector: #accept:! RBLiteralArrayNode removeSelector: #accept:! RBReturnNode removeSelector: #accept:! RBVariableNode removeSelector: #accept:! RBSelfNode removeSelector: #accept:! RBExplicitVariableParser removeSelector: #thisContextNodeClass! RBExplicitVariableParser removeSelector: #superNodeClass! RBExplicitVariableParser removeSelector: #selfNodeClass! RBParseTreeSearcher removeSelector: #visitArgument:! RBMessageNode removeSelector: #accept:! RBArrayNode removeSelector: #accept:! RBSequenceNode removeSelector: #accept:! RBReadBeforeWrittenTester removeSelector: #acceptVariableNode:! RBReadBeforeWrittenTester removeSelector: #acceptSequenceNode:! RBReadBeforeWrittenTester removeSelector: #acceptMessageNode:! RBReadBeforeWrittenTester removeSelector: #acceptBlockNode:! RBReadBeforeWrittenTester removeSelector: #acceptAssignmentNode:! RBTemporaryNode removeSelector: #accept:! RBMethodNode removeSelector: #accept:! RBSemanticAnnotator removeSelector: #visitArgument:! RBSemanticAnnotator removeSelector: #acceptVariableNode:! RBSemanticAnnotator removeSelector: #acceptSequenceNode:! RBSemanticAnnotator removeSelector: #acceptMethodNode:! RBSemanticAnnotator removeSelector: #acceptBlockNode:! RBArgumentNode removeSelector: #accept:! RBFormatter removeSelector: #acceptVariableNode:! RBFormatter removeSelector: #acceptSequenceNode:! RBFormatter removeSelector: #acceptReturnNode:! RBFormatter removeSelector: #acceptPragmaNode:! RBFormatter removeSelector: #acceptPatternWrapperBlockNode:! RBFormatter removeSelector: #acceptPatternBlockNode:! RBFormatter removeSelector: #acceptMethodNode:! RBFormatter removeSelector: #acceptMessageNode:! RBFormatter removeSelector: #acceptLiteralNode:! RBFormatter removeSelector: #acceptLiteralArrayNode:! RBFormatter removeSelector: #acceptCascadeNode:! RBFormatter removeSelector: #acceptBlockNode:startBlockString:endBlockString:! RBFormatter removeSelector: #acceptBlockNode:! RBFormatter removeSelector: #acceptAssignmentNode:! RBFormatter removeSelector: #acceptArrayNode:! RBProgramNode removeSelector: #isArray! RBProgramNode removeSelector: #acceptIgnoreResult:! RBConfigurableFormatter removeSelector: #acceptVariableNode:! RBConfigurableFormatter removeSelector: #acceptSequenceNode:! RBConfigurableFormatter removeSelector: #acceptReturnNode:! RBConfigurableFormatter removeSelector: #acceptPragmaNode:! RBConfigurableFormatter removeSelector: #acceptPatternWrapperBlockNode:! RBConfigurableFormatter removeSelector: #acceptPatternBlockNode:! RBConfigurableFormatter removeSelector: #acceptMethodNode:! RBConfigurableFormatter removeSelector: #acceptMessageNode:! RBConfigurableFormatter removeSelector: #acceptLiteralNode:! RBConfigurableFormatter removeSelector: #acceptLiteralArrayNode:! RBConfigurableFormatter removeSelector: #acceptCascadeNode:! RBConfigurableFormatter removeSelector: #acceptBlockNode:! RBConfigurableFormatter removeSelector: #acceptAssignmentNode:! RBConfigurableFormatter removeSelector: #acceptArrayNode:! RBCascadeNode removeSelector: #accept:! RBBlockNode removeSelector: #accept:! RBAssignmentNode removeSelector: #acceptIgnoreResult:! RBAssignmentNode removeSelector: #accept:! RBPragmaNode removeSelector: #accept:! RBParseTreeRewriter removeSelector: #visitArguments:! RBParseTreeRewriter removeSelector: #acceptSequenceNode:! RBParseTreeRewriter removeSelector: #acceptReturnNode:! RBParseTreeRewriter removeSelector: #acceptPragmaNode:! RBParseTreeRewriter removeSelector: #acceptMethodNode:! RBParseTreeRewriter removeSelector: #acceptMessageNode:! RBParseTreeRewriter removeSelector: #acceptLiteralArrayNode:! RBParseTreeRewriter removeSelector: #acceptCascadeNode:! RBParseTreeRewriter removeSelector: #acceptBlockNode:! RBParseTreeRewriter removeSelector: #acceptAssignmentNode:! RBParseTreeRewriter removeSelector: #acceptArrayNode:! RBSuperNode removeSelector: #accept:! !Trait method! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !Trait method! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !Trait method! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !Trait method! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !Trait method! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !Trait method! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !Trait method! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !Trait method! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !Trait method! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !Trait method! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !Trait method! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !Trait method! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !Trait method! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !Trait method! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !Trait method! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !Trait method! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !Trait method! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !Trait method! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !Trait method! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !Trait method! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !Trait method! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !Trait method! visitArgumentNode: anArgumentNode ^ self visitVariableNode: anArgumentNode! ! !Trait method! visitArgumentNodes: aNodeCollection ^aNodeCollection do: [ :each | self visitArgumentNode: each ]! ! !Trait method! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !Trait method! visitArrayNode: anArrayNode anArrayNode children do: [:each | self visitNode: each]! ! !Trait method! visitAssignmentNode: anAssignmentNode self visitNode: anAssignmentNode variable. self visitNode: anAssignmentNode value! ! !Trait method! visitBlockNode: aBlockNode self visitArgumentNodes: aBlockNode arguments. self visitNode: aBlockNode body! ! !Trait method! visitCascadeNode: aCascadeNode aCascadeNode messages do: [:each | self visitNode: each]! ! !Trait method! visitLiteralArrayNode: aRBLiteralArrayNode aRBLiteralArrayNode contents do: [:each | self visitNode: each]! ! !Trait method! visitLiteralNode: aLiteralNode! ! !Trait method! visitMessageNode: aMessageNode (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]! ! !Trait method! visitMethodNode: aMethodNode self visitArgumentNodes: aMethodNode arguments. aMethodNode pragmas do: [ :each | self visitNode: each ]. self visitNode: aMethodNode body! ! !Trait method! visitNode: aNode ^aNode acceptVisitor: self! ! !Trait method! visitParseErrorNode: anErrorNode! ! !Trait method! visitPatternBlockNode: aRBPatternBlockNode self visitArgumentNodes: aRBPatternBlockNode arguments. self visitNode: aRBPatternBlockNode body! ! !Trait method! visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode self visitNode: aRBPatternWrapperBlockNode wrappedNode. self visitArgumentNodes: aRBPatternWrapperBlockNode arguments. self visitNode: aRBPatternWrapperBlockNode body! ! !Trait method! visitPragmaNode: aPragmaNode aPragmaNode arguments do: [ :each | self visitNode: each ]! ! !Trait method! visitReturnNode: aReturnNode ^ self visitNode: aReturnNode value! ! !Trait method! visitSelfNode: aSelfNode ^ self visitVariableNode: aSelfNode! ! !Trait method! visitSequenceNode: aSequenceNode self visitTemporaryNodes: aSequenceNode temporaries. aSequenceNode statements do: [:each | self visitNode: each]! ! !Trait method! visitSuperNode: aSuperNode ^ self visitVariableNode: aSuperNode! ! !Trait method! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! !Trait method! visitTemporaryNode: aNode ^ self visitArgumentNode: aNode! ! !Trait method! visitTemporaryNodes: aNodeCollection ^ self visitArgumentNodes: aNodeCollection! ! !Trait method! visitThisContextNode: aThisContextNode ^ self visitVariableNode: aThisContextNode! ! !Trait method! visitVariableNode: aVariableNode! ! "AST-Core"! "AST-Semantic"! "Refactoring-Critics"! ----End fileIn----! ----QUIT----an Array(11 April 2013 3:19:23 pm) Pharo.image priorSource: 948103! ----STARTUP----an Array(11 April 2013 3:25:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 April 2013 3:25:20 pm) Pharo-30033.image priorSource: 1008961! ----STARTUP----an Array(11 April 2013 5:49:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(11 April 2013 5:49:05 pm) Pharo.image priorSource: 1009160! ----STARTUP----an Array(11 April 2013 5:55:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 April 2013 5:55:07 pm) Pharo-30033.image priorSource: 1009370! ----STARTUP----an Array(11 April 2013 6:32:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 4/11/2013 18:28' prior: 34502835! commentForCurrentUpdate ^ 'Issue 5602: LinkedList at: index putLink: aLink https://pharo.fogbugz.com/default.asp?5602 Issue 5188-Stage 2: Announcement>> handlesAnnouncement: Now we use the new protocol that was introduced in previous stage. https://pharo.fogbugz.com/default.asp?5188'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 4/11/2013 17:40'! script133 ^ 'AST-Core-MarcusDenker.122.mcz AST-Semantic-MarcusDenker.24.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.38.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.133.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.591.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.74.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 4/11/2013 18:28'! script134 ^ 'AST-Core-MarcusDenker.122.mcz AST-Semantic-MarcusDenker.24.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.39.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.11.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.249.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.152.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.74.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1072.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 4/11/2013 17:40'! update30034 "self new update30034" self withUpdateLog: 'Issue 5188 - Stage 1: Announcement>> handlesAnnouncement: Supporting symbol as announcement. This part add a new protocol. https://pharo.fogbugz.com/default.asp?5188 Issue 5819: Implement a way to get the user directories based on the current OS https://pharo.fogbugz.com/default.asp?5919'. self loadTogether: self script133 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 4/11/2013 18:28'! update30035 "self new update30035" self withUpdateLog: 'Issue 5602: LinkedList at: index putLink: aLink https://pharo.fogbugz.com/default.asp?5602 Issue 5188-Stage 2: Announcement>> handlesAnnouncement: Now we use the new protocol that was introduced in previous stage. https://pharo.fogbugz.com/default.asp?5188'. self loadTogether: self script134 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SubscriptionRegistry methodsFor: 'accessing' stamp: 'StephaneDucasse 2/22/2013 18:08' prior: 51334714! subscriptionsHandling: anAnnouncement ^ Array streamContents: [ :s| subscriptions do: [:each| (each handlesAnnouncement: anAnnouncement) ifTrue: [ s nextPut: each ]]]! ! !LinkedListTest methodsFor: 'tests - sequenceable' stamp: 'HenrikSperreJohansen 3/21/2013 13:04'! testAtPut | ll | ll := LinkedList new. ll add: 1. self shouldnt: [ll at: 1 put: 2] raise: SubscriptOutOfBounds. self shouldnt: [self assert: (ll at: 1) equals: 2] raise: SubscriptOutOfBounds! ! !LinkedListTest methodsFor: 'tests - sequenceable' stamp: 'HenrikSperreJohansen 3/21/2013 13:01'! testAtPutOutsideBounds | ll | ll := LinkedList new. self shouldnt: [self should: [ll at: 1 put: 1] raise: SubscriptOutOfBounds] raise: Error. ! ! !Announcement class methodsFor: 'testing' stamp: 'StephaneDucasse 2/22/2013 17:35'! handlesAnnouncement: anAnnouncement "The receiver acts as a filter to determine whether subscribers who used the receiver as signaling tag (event identifier class or symbol) should receive incoming announcement. In particular, registering to a superclass will receive the announcements from all subclasses." ^ anAnnouncement class == self or: [ anAnnouncement class inheritsFrom: self ]! ! !AnnouncementSubscription methodsFor: 'announcing' stamp: 'IgorStasenko 1/3/2012 12:22' prior: 17565365! deliver: anAnnouncement " deliver an announcement to receiver. In case of failure, it will be handled in separate process" ^ (self handlesAnnouncement: anAnnouncement ) ifTrue: [ [action cull: anAnnouncement cull: announcer] on: UnhandledError fork: [:ex | ex pass ]]! ! !AnnouncementSubscription methodsFor: 'testing' stamp: 'IgorStasenko 1/3/2012 12:19'! handlesAnnouncement: anAnnouncement ^ announcementClass handlesAnnouncement: anAnnouncement! ! !AnnouncementSet methodsFor: 'testing' stamp: 'StephaneDucasse 2/22/2013 17:36'! handlesAnnouncement: anAnnouncement "If any of the set handles the announcements, subscribers should receive it." ^ self anySatisfy: [ :each | each handlesAnnouncement: anAnnouncement ]! ! !LinkedList methodsFor: 'accessing' stamp: 'HenrikSperreJohansen 3/21/2013 13:02' prior: 24375088! at: index putLink: aLink | previousLink nextLink | "Please don't put a link which is already in the list, or you will create an infinite loop" (self validIndex: index) ifFalse: [^ self errorOutOfBounds]. index = 1 ifTrue: [aLink nextLink: self firstLink nextLink. firstLink := aLink. aLink nextLink ifNil: [lastLink := aLink]. ^ aLink]. previousLink := self linkAt: index - 1. nextLink := previousLink nextLink nextLink. nextLink ifNil: [ aLink nextLink: self lastLink ] ifNotNil: [ aLink nextLink: nextLink. ]. previousLink nextLink: aLink. nextLink ifNil: [ lastLink := aLink. aLink nextLink: nil. ]. ^ aLink! ! !WeakAnnouncementSubscription methodsFor: 'announcing' stamp: 'IgorStasenko 1/3/2012 12:22' prior: 54758686! deliver: anAnnouncement " deliver an announcement to receiver. In case of failure, it will be handled in separate process" ^ (self handlesAnnouncement: anAnnouncement ) ifTrue: [ [action cull: anAnnouncement cull: announcer] on: UnhandledError fork: [:ex | ex pass ]]! ! !WeakAnnouncementSubscription methodsFor: 'error handling' stamp: 'IgorStasenko 1/3/2012 12:20'! handlesAnnouncement: anAnnouncement ^ announcementClass handlesAnnouncement: anAnnouncement! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 3/25/2013 17:45' prior: 54514745! desktop ^ (self xdgUserDir: 'DESKTOP') ifNil: [ self home / 'Desktop' ]! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 3/25/2013 17:45' prior: 54514849! documents ^ (self xdgUserDir: 'DOCUMENTS') ifNil: [ self home / 'Documents' ]! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 4/11/2013 15:31' prior: 54514965! home "Value of the $HOME environment variable. When NativeBoost is not available, do your best to answer something not too stupid." ^ [ self resolveString: (self nbGetEnv: 'HOME') ] on: Error do: [ (self resolveString: self class primitiveGetUntrustedUserDirectory) parent parent parent "don't know any better default" ]! ! !UnixResolver methodsFor: 'helpers' stamp: 'DamienCassou 3/25/2013 17:55'! nbGetEnv: str "This method calls a Standard C library getenv() function" ^ self nbCall: #(#String #getenv #(#String #str)) module: NativeBoost CLibrary! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 4/11/2013 15:31' prior: 54515192! preferences "Value of $XDG_CONFIG_HOME or, if unset, $HOME/.config" "http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" ^ (self nbGetEnv: 'XDG_CONFIG_HOME') ifNotNil: [ :home | self resolveString: home ] ifNil: [ self home / '.config' ] ! ! !UnixResolver methodsFor: 'helpers' stamp: 'DamienCassou 3/25/2013 17:39'! xdgParseUserDirLine: aStream "Format is XDG_xxx_DIR=""$HOME/yyy"", where yyy is a shell-escaped homedir-relative path, or XDG_xxx_DIR=""/yyy"", where /yyy is an absolute path. No other format is supported." | path firstChar | (aStream next = $") ifFalse: [ ^ nil ]. firstChar := aStream next. (#($$ $/) includes: firstChar) ifFalse: [ ^ nil ]. path := firstChar = $$ ifTrue: [ (aStream next: 5) = 'HOME/' ifFalse: [ ^ nil ]. self home / (aStream upTo: $") ] ifFalse: [ self resolveString: '/', (aStream upTo: $") ]. ^ path isDirectory ifTrue: [ path ] ifFalse: [ nil ]! ! !UnixResolver methodsFor: 'helpers' stamp: 'DamienCassou 3/25/2013 17:57'! xdgUserDir: userDirName "Read ~/.config/user-dirs.dirs to find the directory of userDirName (e.g., 'DESKTOP')" "http://freedesktop.org/wiki/Software/xdg-user-dirs" "This file is written by xdg-user-dirs-update If you want to change or add directories, just edit the line you're interested in. All local changes will be retained on the next run Format is XDG_xxx_DIR=""$HOME/yyy"", where yyy is a shell-escaped homedir-relative path, or XDG_xxx_DIR=""/yyy"", where /yyy is an absolute path. No other format is supported." | configFile | configFile := self preferences / 'user-dirs.dirs'. (configFile isFile and: [ configFile isReadable ]) ifFalse: [ ^ nil ]. configFile readStreamDo: [ :stream | [ stream atEnd ] whileFalse: [ ((stream peek ~= $#) and: [ (stream upTo: $=) = ('XDG_', userDirName, '_DIR') ]) ifTrue: [ ^ self xdgParseUserDirLine: stream ] ifFalse: [ stream nextLine ] ] ]. ^ nil! ! "Announcements-Core"! "Collections-Sequenceable"! "CollectionsTests"! "FileSystem-Core"! ----End fileIn----! ----QUIT----an Array(11 April 2013 6:32:23 pm) Pharo.image priorSource: 1009570! ----STARTUP----an Array(11 April 2013 6:38:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 April 2013 6:38:15 pm) Pharo-30035.image priorSource: 1036365! ----STARTUP----an Array(11 April 2013 7:11:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 4/11/2013 19:08' prior: 34564306! commentForCurrentUpdate ^ 'Issue 5188 Stage 3: Announcement>> handlesAnnouncement: Cleaning after the changes. https://pharo.fogbugz.com/default.asp?5188 Move ui code of SmallDictionary to Tools package. '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 4/11/2013 19:08'! script135 ^ 'AST-Core-MarcusDenker.122.mcz AST-Semantic-MarcusDenker.24.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-StephaneDucasse.250.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.10.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.74.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1357.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1390.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.786.mcz RPackage-Core-EstebanLorenzano.214.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.801.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 4/11/2013 19:08'! update30036 "self new update30036" self withUpdateLog: 'Issue 5188 Stage 3: Announcement>> handlesAnnouncement: Cleaning after the changes. https://pharo.fogbugz.com/default.asp?5188 Move ui code of SmallDictionary to Tools package. '. self loadTogether: self script135 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AnnouncerTest methodsFor: 'testing' stamp: 'StephaneDucasse 2/22/2013 18:26'! testSymbolIdentifier | passed | passed := false. [announcer on: #FOO send: #bar to: nil; announce: #FOO ] on: MessageNotUnderstood do: [ :ex | passed := (ex message selector = #bar). ]. self assert: passed ! ! !Symbol methodsFor: 'converting' stamp: 'StephaneDucasse 2/22/2013 18:18'! asAnnouncement ^ self! ! !Symbol methodsFor: 'announcements' stamp: 'StephaneDucasse 2/22/2013 18:21'! handlesAnnouncement: anAnnouncement "Anything else than the announcement identifier (in the case of symbol i.e. #foo for ... on: #foo send: #bar to: nil) will not be handled." "Announcer new on: #FOO send: #bar to: nil; announce: #FOO should raise DNU bar" ^ anAnnouncement == self! ! !SmallDictionary methodsFor: '*Tools-Explorer' stamp: 'cyrille.delaunay 7/20/2009 13:25' prior: 33403884! customizeExplorerContents ^ true. ! ! !SmallDictionary methodsFor: '*Tools-Explorer' stamp: 'cyrille.delaunay 7/20/2009 13:26' prior: 33404014! explorerContentsWithIndexCollect: twoArgBlock | sortedKeys | sortedKeys := self keys asSortedCollection: [:x :y | ((x isString and: [y isString]) or: [x isNumber and: [y isNumber]]) ifTrue: [x < y] ifFalse: [x class == y class ifTrue: [x printString < y printString] ifFalse: [x class name < y class name]]]. ^ sortedKeys collect: [:k | twoArgBlock value: (self at: k) value: k]. ! ! WeakAnnouncementSubscription removeSelector: #handles:! Announcement class removeSelector: #handles:! AnnouncementSubscription removeSelector: #handles:! AnnouncementSet removeSelector: #handles:! "Announcements-Core"! "Announcements-Tests-Core"! "Collections-Strings"! "Collections-Unordered"! "Tools"! ----End fileIn----! ----QUIT----an Array(11 April 2013 7:11:37 pm) Pharo.image priorSource: 1036565! ----STARTUP----an Array(11 April 2013 7:19:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 April 2013 7:19:19 pm) Pharo-30036.image priorSource: 1048524! ----STARTUP----an Array(12 April 2013 3:53:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/12/2013 15:43' prior: 34591301! commentForCurrentUpdate ^ '10236 Make ConfigurationCommandLineHandler more robust https://pharo.fogbugz.com/f/cases/10236 10270 Cleaned System-support with code crtics https://pharo.fogbugz.com/f/cases/10270 10276 Small cleanups to ASTNodes https://pharo.fogbugz.com/f/cases/10276 10277 Remove more deprecated methods https://pharo.fogbugz.com/f/cases/10277'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/12/2013 15:44'! script136 ^ 'AST-Core-MarcusDenker.124.mcz AST-Semantic-MarcusDenker.24.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1359.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.105.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.803.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/12/2013 15:45'! update30037 "self new update30037" self withUpdateLog: '10236 Make ConfigurationCommandLineHandler more robust https://pharo.fogbugz.com/f/cases/10236 10270 Cleaned System-support with code crtics https://pharo.fogbugz.com/f/cases/10270 10276 Small cleanups to ASTNodes https://pharo.fogbugz.com/f/cases/10276 10277 Remove more deprecated methods https://pharo.fogbugz.com/f/cases/10277'. self loadTogether: self script136 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation commentStamp: 'LucFabresse 10/10/2010 19:54' prior: 51513717! I support the navigation of the system. I act as a facade but as I could require some state or different way of navigating the system all my behavior are on the instance side. I should (it is not complety done yet) be parametrized by an environment (aSystemDictionary) that scopes my queries.! !ConfigurationCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 4/6/2013 23:13' prior: 34052915! activate self activateHelpWithoutArguments ifTrue: [ ^ self ]. (self hasOption: 'install') ifFalse: [ ^ self list ]. self installConfiguration. ! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 22:56' prior: 20076764! configuration | gofer | gofer := self gofer. self hasConfiguration ifTrue: [ gofer package: self configurationName ] ifFalse: [ gofer configuration ]. gofer load. ^ Smalltalk globals at: self configurationName asSymbol! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:19' prior: 20076991! configurationName ^ configurationName ifNil: [ self hasConfiguration ifFalse: [ "Demeters favourite line :(" ^ self gofer configuration references last name ]. configurationName := self argumentAt: 2 ]! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 22:48'! configurationVersion ^ (self hasOption: 'install') ifFalse: [ #stable ] ifTrue: [ self optionAt: 'install' ]! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:27'! defaultRepositoryUrl ^ MetacelloConfigurationBrowser new pharoDistribution! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:25' prior: 20077188! gofer | username password | username := (self hasOption: 'username') ifTrue: [ self optionAt: 'username' ] ifFalse: [ String new ]. password := (self hasOption: 'password') ifTrue: [ self optionAt: 'password' ] ifFalse: [ String new ]. ^ Gofer new url: self repositoryUrl username: username password: password; yourself! ! !ConfigurationCommandLineHandler methodsFor: 'testing' stamp: 'CamilloBruni 4/6/2013 22:54'! hasRepositoryUrl ^ self arguments size > 0 and: [ "check if the first argument is some sort of a URL" self arguments first includesSubstring: '://' ]! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 4/6/2013 22:47' prior: 20078288! installConfiguration self installVersion: self configurationVersion! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 4/6/2013 22:52' prior: 20078934! list (self hasConfiguration or: [ self hasRepositoryUrl ]) ifTrue: [ self listConfigurationDetails ] ifFalse: [ self listConfigurations ]! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 4/6/2013 23:25' prior: 20079399! listConfigurations "List possible configurations of the given repository" | configurations | self inform: 'All Configurations found in ', self repositoryUrl. configurations := self loadConfigurationNames. configurations ifEmpty: [ ^ self errorNoConfigurationsFound ]. self printConfigurations: configurations. ^ self exitSuccess! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:25'! loadRepositoryUrl ^ self argumentAt: 1.! ! !ConfigurationCommandLineHandler methodsFor: 'printing' stamp: 'CamilloBruni 4/6/2013 23:22' prior: 20081313! printMetacelloProjectDetails: metacelloProject | versions | self inform: 'Available versions for ', self configurationName. versions := metacelloProject symbolicVersionMap keys asSet. versions addAll: metacelloProject map keys. versions add: #last. "print the found version sorted alphabetically" versions asArray sorted do:[ :key| self stdout nextPutAll: key; lf ]! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2013 23:25'! repositoryUrl ^ repositoryURL ifNil: [ self hasRepositoryUrl ifFalse: [ ^ self defaultRepositoryUrl ]. repositoryURL := self loadRepositoryUrl ]! ! !VirtualMachine class methodsFor: 'vm statistics' stamp: 'ClementBera 4/11/2013 14:03' prior: 54691015! statisticsReport "Workspace openContents: (Smalltalk vm statisticsReport) label: 'VM Statistics'" | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount mcHits icHits upTime sendCount upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str | oldSpaceEnd := self oldSpaceEnd. youngSpaceEnd := self youngSpaceEnd. tenureCount := self tenureCount. memoryEnd := self memoryEnd. fullGCs := self fullGCCount. fullGCTime := self totalFullGCTime. incrGCs := self incrementalGCCount. incrGCTime := self totalIncrementalGCTime. upTime := Time millisecondClockValue. str := (String new: 1000) writeStream. str << 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. str << 'memory '. memoryEnd printWithCommasOn: str. str << ' bytes'; cr. str << ' old '. oldSpaceEnd printWithCommasOn: str. str << ' bytes ('; print: ((oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' young '. (youngSpaceEnd - oldSpaceEnd) printWithCommasOn: str. str << ' bytes ('; print: ((youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' used '. youngSpaceEnd printWithCommasOn: str. str << ' bytes ('; print: ((youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' free '. (memoryEnd - youngSpaceEnd) printWithCommasOn: str. str << ' bytes ('; print: ((memoryEnd - youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << 'GCs '. (fullGCs + incrGCs) printWithCommasOn: str. fullGCs + incrGCs > 0 ifTrue: [ str << ' ('; print: ((upTime / (fullGCs + incrGCs)) roundTo: 1); << 'ms between GCs)' ]. str cr. str << ' full '; print: fullGCs; << ' totalling '. fullGCTime printWithCommasOn: str. str << 'ms ('; print: ((fullGCTime / upTime * 100) roundTo: 0.1); << '% uptime)'. fullGCs = 0 ifFalse: [str << ', avg '; print: ((fullGCTime / fullGCs) roundTo: 0.1); << 'ms']. str cr. str << ' incr '; print: incrGCs; << ' totalling '. incrGCTime printWithCommasOn: str. str << 'ms ('; print: ((incrGCTime / upTime * 100) roundTo: 0.1); << '% uptime), avg '; print: ((incrGCTime / incrGCs) roundTo: 0.1); << 'ms'; cr. str << ' tenures '. tenureCount printWithCommasOn: str. tenureCount = 0 ifFalse: [str << ' (avg '; print: (incrGCs / tenureCount) asInteger; << ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ upTime2 := upTime - (LastStats at: 1). fullGCs2 := fullGCs - (LastStats at: 2). fullGCTime2 := fullGCTime - (LastStats at: 3). incrGCs2 := incrGCs - (LastStats at: 4). incrGCTime2 := incrGCTime - (LastStats at: 5). tenureCount2 := tenureCount - (LastStats at: 6). str << 'Since last view '. (fullGCs2 + incrGCs2) printWithCommasOn: str. fullGCs2 + incrGCs2 > 0 ifTrue: [ str << ' ('; print: ((upTime2 / (fullGCs2 + incrGCs2)) roundTo: 1); << 'ms between GCs)'. ]. str cr. str << ' uptime '; print: ((upTime2 / 1000.0) roundTo: 0.1); << 's'; cr. str << ' full '; print: fullGCs2; << ' totalling '. fullGCTime2 printWithCommasOn: str. str << 'ms ('; print: ((fullGCTime2 / upTime2 * 100) roundTo: 0.1); << '% uptime)'. fullGCs2 = 0 ifFalse: [str << ', avg '; print: ((fullGCTime2 / fullGCs2) roundTo: 0.1); << 'ms']. str cr. str << ' incr '; print: incrGCs2; << ' totalling '. incrGCTime2 printWithCommasOn: str. str << 'ms ('; print: ((incrGCTime2 / upTime2 * 100) roundTo: 0.1); << '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: ((incrGCTime2 / incrGCs2) roundTo: 0.1); << 'ms' ]. str cr. str << ' tenures '. tenureCount2 printWithCommasOn: str. tenureCount2 = 0 ifFalse: [str << ' (avg '; print: (incrGCs2 / tenureCount2) asInteger; << ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! ! !ChangesLog methodsFor: 'private' stamp: 'ClementBera 4/11/2013 14:05' prior: 18915975! assureStartupStampLogged "If there is a startup stamp not yet actually logged to disk, do it now." | changesFile | startupStamp ifNil: [ ^ self ]. (SourceFiles isNil or: [ (changesFile := SourceFiles at: 2) isNil ]) ifTrue: [ ^ self ]. changesFile isReadOnly ifTrue: [ ^ self ]. changesFile setToEnd; cr; cr. changesFile nextChunkPut: startupStamp asString; cr. startupStamp := nil. self forceChangesToDisk! ! !ChangesLog methodsFor: 'logging' stamp: 'ClementBera 4/11/2013 14:06' prior: 18915281! logChange: aStringOrText "Write the argument, aString, onto the changes file." | aString changesFile | (SourceFiles isNil or: [ (SourceFiles at: 2) isNil ]) ifTrue: [ ^ self ]. self assureStartupStampLogged. aString := aStringOrText asString. (aString findFirst: [ :char | char isSeparator not ]) = 0 ifTrue: [ ^ self ]. "null doits confuse replay" changesFile := SourceFiles at: 2. changesFile isReadOnly ifTrue: [ ^ self ]. changesFile setToEnd; cr; cr. changesFile nextChunkPut: aString. "If want style changes in DoIt, use nextChunkPutWithStyle:, and allow Texts to get here" self forceChangesToDisk! ! !RBMessageNode methodsFor: 'private' stamp: 'MarcusDenker 4/12/2013 10:23' prior: 30754264! buildSelector ^(String streamContents: [ :selectorStream | selectorParts do: [ :each | selectorStream nextPutAll: each value ]]) asSymbol! ! !RBPragmaNode methodsFor: 'private' stamp: 'MarcusDenker 4/12/2013 10:23' prior: 31013036! buildSelector ^(String streamContents: [ :selectorStream | selectorParts do: [ :each | selectorStream nextPutAll: each value ]]) asSymbol! ! !ExternalSemaphoreTable class methodsFor: 'accessing' stamp: 'ClementBera 4/11/2013 14:01' prior: 21401309! safelyRegisterExternalObject: anObject "Register the given object in the external objects array and return its index. If it is already there, just return its index." | objects firstEmptyIndex | objects := self unprotectedExternalObjects. "find the first empty slot" firstEmptyIndex := (self slotFor: anObject in: objects) ifNil: ["if object has no empty slots, we need to get a collection which does" objects := self collectionBasedOn: objects withRoomFor: anObject. self slotFor: anObject in: objects.]. objects at: firstEmptyIndex put: anObject. ^ firstEmptyIndex ! ! !ExternalSemaphoreTable class methodsFor: 'private' stamp: 'ClementBera 4/11/2013 14:06' prior: 21405240! slotFor: anObject in: aCollection "find the first empty slot, or nil if there is none" "The following was written in an atomic fashion using special methods with no suspension points, not sure if on purpose, but keeping it that way for now. Uses should be protected by the ProtectTable semaphore anyhow, but... it's too much work to reason 100% about it" | firstEmptyIndex | 1 to: aCollection size do: [ :i | | obj | obj := aCollection at: i. obj == anObject ifTrue: [ ^ i ]. "object already there, just return its index" (firstEmptyIndex isNil and: [ obj isNil ]) ifTrue: [ firstEmptyIndex := i ] ]. ^ firstEmptyIndex! ! !SystemDictionary methodsFor: 'dictionary access' stamp: 'ClementBera 4/11/2013 14:02' prior: 51504961! at: aKey put: anObject "Override from Dictionary to check Undeclared and fix up references to undeclared variables." (self includesKey: aKey) ifFalse: [self declare: aKey from: Undeclared. self flushClassNameCache]. super at: aKey put: anObject. ^ anObject! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'ClementBera 4/11/2013 14:06' prior: 51504085! removeClassNamed: aName "Invoked from fileouts: if there is currently a class in the system named aName, then remove it. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: aName asSymbol ifAbsent: [ nil ]) isNil ifTrue: [ self crTrace: 'Removal of class named ' , aName , ' ignored because ' , aName , ' does not exist.'. ^ self ]. oldClass removeFromSystem! ! !SystemDictionary methodsFor: 'renaming' stamp: 'ClementBera 4/11/2013 14:06' prior: 51506877! renameClassNamed: oldName as: newName "Invoked from fileouts: if there is currently a class in the system named oldName, then rename it to newName. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: oldName asSymbol ifAbsent: [ nil ]) isNil ifTrue: [ self crTrace: 'Class-rename for ' , oldName , ' ignored because ' , oldName , ' does not exist.'. ^ self ]. oldClass rename: newName! ! !RBMethodNode methodsFor: 'private' stamp: 'MarcusDenker 4/12/2013 10:23' prior: 30786202! buildSelector ^(String streamContents: [ :selectorStream | selectorParts do: [ :each | selectorStream nextPutAll: each value ]]) asSymbol! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 4/12/2013 10:28'! methodClass: aClass classBinding := aClass binding.! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 4/12/2013 10:27'! sourceCode "compatibility to MethodNode" ^source! ! !Author methodsFor: 'compatibility' stamp: 'ClementBera 4/11/2013 14:01' prior: 17780726! ifUnknownAuthorUse: aString during: aBlock "If no author is set use the name aString while executing aBlock." "for compatibility with 1.0" fullName isEmptyOrNil ifFalse: [ ^ aBlock value ]. fullName := aString. ^ aBlock ensure: [ self reset ]! ! !SmalltalkImage methodsFor: 'system attribute' stamp: 'ClementBera 4/11/2013 14:06' prior: 50357922! arguments "Answer an array with all the command line arguments. This does not include imagePath, documentPath nor any option." "Smalltalk commandLine arguments" ^ Array streamContents: [ :str | | arg i | i := 1. [ i > 998 or: [ (arg := self argumentAt: i) isNil ] ] whileFalse: [ str nextPut: arg. i := i + 1 ] ]! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'ClementBera 4/11/2013 14:06' prior: 50335308! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups." "Note: SourcesName and imageName are full paths; changesName is a local name." | sources changes msg wmsg | msg := 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'. wmsg := 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'. (sources := self openSources: self sourcesName forImage: LastImagePath) ifNil: [ [ self downloadSources ] on: MessageNotUnderstood do: [ :exception | "ignore" ]. sources := self openSources: self sourcesName forImage: LastImagePath ]. changes := self openChanges: self changesName forImage: LastImagePath. ((sources isNil or: [ sources atEnd ]) and: [ self checkSourcesFileAvailability ]) ifTrue: [ OSPlatform isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , self sourcesName) ]. (changes isNil and: [ self checkChangesFileAvailability ]) ifTrue: [ self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. (self checkChangesFileAvailability and: [ changes notNil ]) ifTrue: [ changes isReadOnly ifTrue: [ self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self inform: 'The changes file named ' , self changesName , ' has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.' ] ]. SourceFiles := Array with: sources with: changes! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'ClementBera 4/11/2013 14:01' prior: 33513305! condenseSources "Move all the changes onto a compacted sources file." "Smalltalk condenseSources" | f newVersionString | VirtualMachine isRunningCogit ifTrue: [ self error: 'Sources cannot be condensed in a Cog (JIT enabled) Virtual Machine. Try a Stack VM.' ]. self fixUpProblemsWithAllCategory. "The above removes any concrete, spurious '-- all --' categories, which mess up the process." dir := FileSystem workingDirectory. newVersionString := UIManager default request: 'Please designate the version for the new source code file...' initialAnswer: Smalltalk sourceFileVersionString. newVersionString ifNil: [^ self]. newVersionString = self sourceFileVersionString ifTrue: [^ self error: 'The new source file must not be the same as the old.']. Smalltalk sourceFileVersionString: newVersionString. "Write all sources with fileIndex 1" f := FileStream newFileNamed: Smalltalk sourcesName. f header; timeStamp. 'Condensing Sources File...' displayProgressFrom: 0 to: self classNames size + self traitNames size during: [:bar | | count | count := 0. Smalltalk allClassesAndTraitsDo: [:classOrTrait | bar current: (count := count + 1). classOrTrait fileOutOn: f moveSource: true toFile: 1]]. f trailer; close. "Make a new empty changes file" self closeSourceFiles. Smalltalk changesFile renameTo: Smalltalk changesFile basename, '.old'. (FileStream newFileNamed: Smalltalk changesName) header; timeStamp; close. self lastQuitLogPosition: 0. self setMacFileInfoOn: Smalltalk image changesName. self setMacFileInfoOn: Smalltalk image sourcesName. self openSourceFiles. self inform: 'Source files have been rewritten!! Check that all is well, and then save/quit.'! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'ClementBera 4/11/2013 14:01' prior: 33515112! fixObsoleteReferences "SmalltalkImage current fixObsoleteReferences. SystemNavigation new obsoleteBehaviors size > 0 ifTrue: [ SystemNavigation new obsoleteBehaviors inspect. self error:'Still have obsolete behaviors. See inspector']" | obsoleteBindings obsName realName realClass | Smalltalk garbageCollect; garbageCollect. CompiledMethod allInstances do: [ :method | obsoleteBindings := method literals select: [ :literal | literal isVariableBinding and: [ literal value isBehavior and: [ literal value isObsolete ]]]. obsoleteBindings do: [ :binding | obsName := binding value name. self trace: 'Binding: '; traceCr: obsName. realName := obsName copyReplaceAll: 'AnObsolete' with: ''. realClass := Smalltalk globals at: realName asSymbol ifAbsent: [ UndefinedObject ]. binding key: binding key value: realClass ] ]. Behavior flushObsoleteSubclasses. Smalltalk garbageCollect; garbageCollect! ! !SmalltalkImage methodsFor: 'memory space' stamp: 'ClementBera 4/11/2013 14:06' prior: 33529139! installLowSpaceWatcher "Start a process to watch for low-space conditions." "Smalltalk installLowSpaceWatcher" self primSignalAtBytesLeft: 0. "disable low-space interrupts" LowSpaceProcess isNil ifFalse: [ LowSpaceProcess terminate ]. LowSpaceProcess := [ self lowSpaceWatcher ] newProcess. LowSpaceProcess priority: Processor lowIOPriority. LowSpaceProcess resume! ! !SmalltalkImage methodsFor: 'memory space' stamp: 'ClementBera 4/11/2013 13:58' prior: 33530399! lowSpaceWatcher "Wait until the low space semaphore is signalled, then take appropriate actions. " | free preemptedProcess | self garbageCollectMost <= self lowSpaceThreshold ifTrue: [self garbageCollect <= self lowSpaceThreshold ifTrue: ["free space must be above threshold before starting low space watcher" ^ Beeper beep]]. self specialObjectsArray at: 23 put: nil. "process causing low space will be saved here" LowSpaceSemaphore := Semaphore new. self primLowSpaceSemaphore: LowSpaceSemaphore. self primSignalAtBytesLeft: self lowSpaceThreshold. "enable low space interrupts" LowSpaceSemaphore wait. "wait for a low space condition..." self primSignalAtBytesLeft: 0. "disable low space interrupts" self primLowSpaceSemaphore: nil. LowSpaceProcess := nil. "The process that was active at the time of the low space interrupt." preemptedProcess := Smalltalk specialObjectsArray at: 23. Smalltalk specialObjectsArray at: 23 put: nil. "Note: user now unprotected until the low space watcher is re-installed" self memoryHogs isEmpty ifFalse: [free := self bytesLeft. self bytesLeft > free ifTrue: [^ self installLowSpaceWatcher]]. UIManager default lowSpaceWatcherDefaultAction: preemptedProcess! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'ClementBera 4/11/2013 14:01' prior: 50340991! openChanges: changesPath forImage: imageName "find the changes file by looking in a) the directory derived from the image name b) the DefaultDirectory (which will normally be the directory derived from the image name or the SecurityManager's choice) If an old file is not found in either place, check for a read-only file in the same places. If that fails, return nil" | changesFile changesName | changesFile := changesPath asFileReference. changesName := changesFile basename. "look for the changes file or an alias to it in the image directory" changesFile exists ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the changes in the default directory" (changesFile := FileSystem workingDirectory / changesName) exists ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the image directory" (changesFile := changesPath asFileReference) exists ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the default directory" (changesFile := FileSystem workingDirectory / changesName) exists ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "failed to open a changes file" ^ nil ! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'ClementBera 4/11/2013 14:02' prior: 50342693! openSources: fullSourcesName forImage: imagePath "We first do a check to see if a compressed version ofthe sources file is present. Open the .sources file read-only after searching in: a) the directory where the VM lives b) the directory where the image came from c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it). " | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" (sourcesFile := self vmDirectory / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. ^ nil ! ! !SmalltalkImage methodsFor: 'system attribute' stamp: 'ClementBera 4/11/2013 14:06' prior: 50360623! options "Answer an array with all the command line options." "Smalltalk commandLine options" ^ Array streamContents: [ :str | | arg i | i := 1. [ i > 1000 or: [ (arg := self optionAt: i) isNil ] ] whileFalse: [ str nextPut: arg. i := i + 1 ] ]! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'ClementBera 4/11/2013 13:59' prior: 33496532! privCleanProcesses UIManager default terminateUIProcess. (Process allInstances reject: [ :p | {(InputEventFetcher default instVarNamed: #fetcherProcess). (Processor activeProcess). (WeakArray runningFinalizationProcess). (Processor backgroundProcess)} includes: p ]) do: [ :p | p suspend. p terminate ]. Delay startTimerEventLoop! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'ClementBera 4/11/2013 14:02' prior: 33501119! privShrinkingProcessWith: additionalPackageNames [ 10 timesRepeat: [ (Delay forMilliseconds: 100) wait. Processor yield ]. Author fullName: 'Mr.Shrinker'. self privCleanMonticello. UIManager default: DummyUIManager new. UIManager default progressBarEnabled: false. self privCleanProcesses. self privCleanGlobals. 5 timesRepeat: [Smalltalk garbageCollect]. (Smalltalk classNamed: #MCDataStream) initialize. Beeper instVarNamed: #default put: nil. Smalltalk cleanOutUndeclared. 5 timesRepeat: [Smalltalk garbageCollect]. Author reset. (Smalltalk classNamed: #KMPragmaKeymapBuilder) release. self privShrinkUnicodeTables. Display newDepth: 1. self privCleanStartUpList. self privCleanShutDownList. " CommandLine removeRegistrationNamed: #BasicCodeLoader. SimpleCodeLoader register. " "move class Model to different category" Object subclass: #Model instanceVariableNames: 'dependents' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Objects'. self privCleanTextConstants. (Smalltalk classNamed: #SoundService) default: nil. (Smalltalk classNamed: #SoundService) unregister: (Smalltalk classNamed: #DummySoundSystem). ThreadSafeTranscript install. self privCleanUnloadMethods. (Smalltalk classNamed: #RPackageOrganizer) unregisterInterestToSystemAnnouncement. SystemNavigation new removeAllButPackages: self kernelPackageNames, additionalPackageNames. Smalltalk flushClassNameCache. 3 timesRepeat: [ Smalltalk garbageCollect. Symbol compactSymbolTable.]. Undeclared removeUnreferencedKeys. self privRecompileAll. self privCleanChangeSets. FileServices removeObsolete. Object flushEvents. (Smalltalk classNamed: #MCDataStream) initialize. Locale classPool at: #LocaleChangeListeners put: nil. SmalltalkImage classPool at: #Tools put: nil. Behavior flushObsoleteSubclasses. Smalltalk flushClassNameCache. Smalltalk organization removeEmptyCategories. WeakArray restartFinalizationProcess. ContextPart initializePrimitiveSimulators. SmalltalkImage current fixObsoleteReferences. "UIManager default progressBarEnabled: true." "Smalltalk condenseChanges." Smalltalk saveImageInNewContext. ] ifError: [:e | | rep | rep := FileStream forceNewFileNamed: 'PharoDebug.log'. rep nextPutAll: 'PharoKernel shrinking report'; cr. rep nextPutAll: 'Error:'; cr. rep nextPutAll: e asString; cr. rep nextPutAll: thisContext stack size asString. thisContext stack copy withIndexDo: [:stck :i | [ rep nextPutAll: i asString; space; nextPutAll: stck asString; cr] ifError: []]. rep close. Smalltalk exitFailure ] ! ! !SmalltalkImage methodsFor: 'class and trait names' stamp: 'ClementBera 4/11/2013 14:06' prior: 33506987! renameClassNamed: oldName as: newName "Invoked from fileouts: if there is currently a class in the system named oldName, then rename it to newName. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: oldName asSymbol ifAbsent: [ nil ]) isNil ifTrue: [ self crTrace: 'Class-rename for ' , oldName , ' ignored because ' , oldName , ' does not exist.'. ^ self ]. oldClass rename: newName! ! !SmalltalkImage methodsFor: 'saving' stamp: 'ClementBera 4/11/2013 14:02' prior: 33545780! saveImageInFileNamed: aFile "Save the image in the given file. Unlike #backupImageInFileNamed: this method continues evaluation in the new image after saving. Note: This method does not save the .changes file, use #saveAs:" | imageFile | imageFile := aFile asFileReference. imageFile parent ensureDirectory. ^self changeImagePathTo: imageFile fullName; closeSourceFiles; openSourceFiles; "so SNAPSHOT appears in new changes file" snapshot: true andQuit: false! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'ClementBera 4/11/2013 14:02' prior: 50332773! snapshot: save andQuit: quit "Mark the changes file and close all files as part of #processShutdownList. If save is true, save the current state of this Smalltalk in the image file. If quit is true, then exit to the outer OS shell. The latter part of this method runs when resuming a previously saved image. This resume logic checks for a document file to process when starting up." | snapshotResult isNewImage | self addSnapshotRecord: save andQuit: quit. self shutDownImage: quit. save ifTrue: [ snapshotResult := self snapshotPrimitive. "<-- PC frozen here on image file" isNewImage := snapshotResult == true ] ifFalse: [ isNewImage := false ]. (quit and: [ isNewImage not ]) ifTrue: [ self quitPrimitive ]. "create a new session object if we're booting" isNewImage ifTrue: [ session := self newSessionObject ]. self startupImage: isNewImage snapshotWorked: snapshotResult. "We return the resuming state, which may be useful for users to know the state of the image" ^ isNewImage! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'ClementBera 4/11/2013 14:06' prior: 50334317! startupImage: isNewImage snapshotWorked: snapshotResult | startupErrors | self vm setGCParameters. deferredStartupActions := nil. isNewImage ifTrue: [ Smalltalk clearExternalObjects ]. startupErrors := OrderedCollection new. UIManager default boot: isNewImage during: [ startupErrors addAll: (self processStartUpList: isNewImage). isNewImage ifTrue: [ self recordStartupStamp ] ]. startupErrors addAll: (self executeDeferredStartupActions: isNewImage). startupErrors isEmpty ifFalse: [ self handleStartupErrors: startupErrors ]. snapshotResult isNil ifTrue: [ self error: 'Failed to write image file (disk full?)' ]! ! !SystemNavigation commentStamp: 'LucFabresse 10/10/2010 19:54' prior: 34613713! I support the navigation of the system. I act as a facade but as I could require some state or different way of navigating the system all my behavior are on the instance side. I should (it is not complety done yet) be parametrized by an environment (aSystemDictionary) that scopes my queries.! !SystemNavigation methodsFor: 'query' stamp: 'ClementBera 4/11/2013 14:03' prior: 51585475! allReferencesToPool: aPool "Answer all the references to variable aPool" | list | list := OrderedCollection new. self allClassesDo: [:cls| cls selectorsAndMethodsDo: [:sel :meth| | ref | ref := meth literals detect: [:lit| (lit isVariableBinding and: [lit key notNil]) and: [(aPool bindingOf: lit key) notNil ]] ifNone: [nil]. ref ifNotNil: [ list add: (self createMethodNamed: sel realParent: cls) ]]]. ^list! ! !SystemNavigation methodsFor: 'query' stamp: 'ClementBera 4/11/2013 14:06' prior: 51593274! instanceSideMethodsWithNilKeyInLastLiteral "This answers all the instance side methods that has NIL as the key in their last literal. There should be none (only class side methods have this)" ^ self allSelect: [ :each | (((each literalAt: each numLiterals) key isNil and: [ (each literalAt: each numLiterals) value isMeta not ]) and: [ each methodClass ~= UndefinedObject ]) and: [ each isInstalled ] ]! ! !SystemNavigation methodsFor: 'query' stamp: 'ClementBera 4/11/2013 14:06' prior: 51596016! obsoleteClasses "SystemNavigation new obsoleteClasses inspect" "NOTE: Also try inspecting comments below" | obs | obs := OrderedCollection new. Smalltalk garbageCollect. Metaclass allInstancesDo: [ :m | | c | c := m soleInstance. (c notNil and: [ 'AnOb*' match: c name asString ]) ifTrue: [ obs add: c ] ]. ^ obs asArray "Likely in a ClassDict or Pool... (Association allInstances select: [:a | (a value isKindOf: Class) and: ['AnOb*' match: a value name]]) asArray " "Obsolete class refs or super pointer in last lit of a method... | n l found | Smalltalk browseAllSelect: [:m | found := false. 1 to: m numLiterals do: [:i | (((l := m literalAt: i) isMemberOf: Association) and: [(l value isKindOf: Behavior) and: ['AnOb*' match: l value name]]) ifTrue: [found := true]]. found] "! ! !SystemNavigation methodsFor: 'packages' stamp: 'ClementBera 4/11/2013 14:03' prior: 51568556! removeAllButPackages: packagesList "Remove all classes and methods that do not belong to some of listed packages. Skip #unload. Do not use this method if you can use Monticello!! This method is used by some low-level shrinking process. Do not use it. This is quite hackish" | keep remove oldRemove extensionCategories | keep := Set new. packagesList do: [:pkg | keep addAll: (self allClassesInPackageNamed: pkg)]. oldRemove := Set new. [ remove := Smalltalk globals allClassesAndTraits reject: [:c | keep includes: c]. remove := remove collect: [:c | c name]. (remove asSortedCollection: [:a :b | a <= b ]) do: [:className | | class | class := (Smalltalk globals classOrTraitNamed: className). class allSubclasses ifEmpty: [ SystemAnnouncer uniqueInstance unsubscribe: class. class isTrait ifFalse: [ (class class includesSelector: #unload) ifTrue: [ class removeSelector: #unload ] ]. class removeFromSystem. ] ]. oldRemove ifNotEmpty: [ oldRemove = remove ifTrue: [ self error: 'Some classes still have subclasses: ', (remove collect: [:c | c -> (Smalltalk classOrTraitNamed: c) allSubclasses]) asString ] ]. oldRemove := remove. remove notEmpty] whileTrue. keep do: [: class | extensionCategories := (class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | class removeCategory: category ]. class isTrait ifFalse: [ extensionCategories := (class class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | class class removeCategory: category ]]]. ! ! DateAndTime removeSelector: #asDosTime! ByteSymbol removeSelector: #pvtAt:put:! WideSymbol removeSelector: #pvtAt:put:! SmalltalkImage removeSelector: #event:! FileReference removeSelector: #pathName! UITheme removeSelector: #getsIcon! UITheme removeSelector: #downArrowIcon! UITheme removeSelector: #crudeUndoIcon! UITheme removeSelector: #crudeUndoDisabledIcon! UITheme removeSelector: #crudeRedoIcon! UITheme removeSelector: #crudeRedoDisabledIcon! UITheme removeSelector: #backspaceArrowIcon! Timespan removeSelector: #asDosTime! RPackageOrganizer removeSelector: #includesClassNamed:! RPackageOrganizer removeSelector: #includesClass:! FileSystemDirectoryEntry removeSelector: #asReference! Metaclass removeSelector: #isAbstractClass! MorphTreeMorph removeSelector: #sortingSelector:! SystemProgressItemMorph removeSelector: #endAt:! SystemProgressItemMorph removeSelector: #end:! String removeSelector: #includesSubString:! String removeSelector: #asReference! ThemeIcons class removeSelector: #squeakyMouseIcon! ThemeIcons class removeSelector: #haloPoohIconContents! ThemeIcons class removeSelector: #getsIconContents! ThemeIcons class removeSelector: #getsIcon! ThemeIcons class removeSelector: #downArrowIcon! ThemeIcons class removeSelector: #crudeUndoIcon! ThemeIcons class removeSelector: #crudeUndoDisabledIcon! ThemeIcons class removeSelector: #crudeRedoIcon! ThemeIcons class removeSelector: #crudeRedoDisabledIcon! ThemeIcons class removeSelector: #backspaceArrowIconContents! ThemeIcons class removeSelector: #backspaceArrowIcon! Path removeSelector: #asReference! ConfigurationCommandLineHandler removeSelector: #repositoryURL! ConfigurationCommandLineHandler removeSelector: #loadRepositoryURL! Class removeSelector: #isAbstractClass! ClassDescription removeSelector: #isAbstractClass! "AST-Core"! "Collections-Strings"! "ConfigurationCommandLineHandler-Core"! "FileSystem-Core"! "Kernel"! "Morphic"! "Polymorph-Widgets"! "RPackage-Core"! "System-Support"! ----End fileIn----! ----QUIT----an Array(12 April 2013 3:53:58 pm) Pharo.image priorSource: 1048724! ----STARTUP----an Array(12 April 2013 4:00:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 April 2013 4:00:09 pm) Pharo-30037.image priorSource: 1096527! ----STARTUP----an Array(12 April 2013 4:55:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/12/2013 16:54' prior: 34603457! commentForCurrentUpdate ^ '10278 Bug in semantic annotator https://pharo.fogbugz.com/f/cases/10278 10279 fix an undeclared in #condenseSources https://pharo.fogbugz.com/f/cases/10279 10258 DivideByZero in SystemProgressMorph https://pharo.fogbugz.com/f/cases/10258 10275 DNU on code completion https://pharo.fogbugz.com/f/cases/10275'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/12/2013 16:54'! script137 ^ 'AST-Core-MarcusDenker.125.mcz AST-Semantic-MarcusDenker.25.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1359.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.781.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/12/2013 16:54'! update30038 "self new update30038" self withUpdateLog: '10278 Bug in semantic annotator https://pharo.fogbugz.com/f/cases/10278 10279 fix an undeclared in #condenseSources https://pharo.fogbugz.com/f/cases/10279 10258 DivideByZero in SystemProgressMorph https://pharo.fogbugz.com/f/cases/10258 10275 DNU on code completion https://pharo.fogbugz.com/f/cases/10275'. self loadTogether: self script137 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBSemanticAnnotator methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 15:53'! visitArgumentNodes: aNodeCollection aNodeCollection do: [ :e | scope add: (RBArgumentBinding node: e) ]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 16:00' prior: 34518611! visitArgumentNode: anArgumentNode "Sent *each time* an argument node is found" ^ self visitVariableNode: anArgumentNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 15:59' prior: 34518779! visitArgumentNodes: aNodeCollection "Sent *once* when visiting method and block nodes" ^aNodeCollection do: [ :each | self visitArgumentNode: each ]! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 14:03' prior: 34522887! visitTemporaryNode: aNode ^ self visitVariableNode: aNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 16:30' prior: 34523038! visitTemporaryNodes: aNodeCollection ^self visitArgumentNodes: aNodeCollection! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 16:27' prior: 34523385! visitVariableNode: aVariableNode ^ aVariableNode! ! !NECController methodsFor: 'keyboard' stamp: 'CamilloBruni 4/12/2013 16:29' prior: 27786544! handleKeystrokeAfter: aKeyboardEvent editor: aParagraphEditor (aParagraphEditor isNil or: [ self isMenuOpen not ]) ifTrue: [ ^ self ]. aParagraphEditor atCompletionPosition ifFalse: [ ^ self closeMenu ]. self setModel: aParagraphEditor model. context narrowWith: aParagraphEditor wordAtCaret. menuMorph narrowCompletion. (context isNil or: [ context model isEmpty]) ifTrue: [ ^self closeMenu ]! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'MarcusDenker 4/12/2013 16:21' prior: 34630206! condenseSources "Move all the changes onto a compacted sources file." "Smalltalk condenseSources" | f newVersionString | VirtualMachine isRunningCogit ifTrue: [ self error: 'Sources cannot be condensed in a Cog (JIT enabled) Virtual Machine. Try a Stack VM.' ]. self fixUpProblemsWithAllCategory. "The above removes any concrete, spurious '-- all --' categories, which mess up the process." newVersionString := UIManager default request: 'Please designate the version for the new source code file...' initialAnswer: Smalltalk sourceFileVersionString. newVersionString ifNil: [^ self]. newVersionString = self sourceFileVersionString ifTrue: [^ self error: 'The new source file must not be the same as the old.']. Smalltalk sourceFileVersionString: newVersionString. "Write all sources with fileIndex 1" f := FileStream newFileNamed: Smalltalk sourcesName. f header; timeStamp. 'Condensing Sources File...' displayProgressFrom: 0 to: self classNames size + self traitNames size during: [:bar | | count | count := 0. Smalltalk allClassesAndTraitsDo: [:classOrTrait | bar current: (count := count + 1). classOrTrait fileOutOn: f moveSource: true toFile: 1]]. f trailer; close. "Make a new empty changes file" self closeSourceFiles. Smalltalk changesFile renameTo: Smalltalk changesFile basename, '.old'. (FileStream newFileNamed: Smalltalk changesName) header; timeStamp; close. self lastQuitLogPosition: 0. self setMacFileInfoOn: Smalltalk image changesName. self setMacFileInfoOn: Smalltalk image sourcesName. self openSourceFiles. self inform: 'Source files have been rewritten!! Check that all is well, and then save/quit.'! ! !Trait method! visitArgumentNode: anArgumentNode "Sent *each time* an argument node is found" ^ self visitVariableNode: anArgumentNode! ! !Trait method! visitArgumentNodes: aNodeCollection "Sent *once* when visiting method and block nodes" ^aNodeCollection do: [ :each | self visitArgumentNode: each ]! ! !Trait method! visitTemporaryNode: aNode ^ self visitVariableNode: aNode! ! !Trait method! visitTemporaryNodes: aNodeCollection ^self visitArgumentNodes: aNodeCollection! ! !Trait method! visitVariableNode: aVariableNode ^ aVariableNode! ! "AST-Core"! "AST-Semantic"! "NECompletion"! "System-Support"! ----End fileIn----! ----QUIT----an Array(12 April 2013 4:55:56 pm) Pharo.image priorSource: 1096727! ----STARTUP----an Array(12 April 2013 5:02:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 April 2013 5:02:14 pm) Pharo-30038.image priorSource: 1111254! ----STARTUP----an Array(13 April 2013 10:00:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/12/2013 21:58' prior: 34651460! commentForCurrentUpdate ^ '10281 Another fix for AST: remove #visitArgumentNode: in OBSemanticAnnotator https://pharo.fogbugz.com/f/cases/10281 10280 Remove strange MCRepositories https://pharo.fogbugz.com/f/cases/10280/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/12/2013 21:58'! script138 ^ 'AST-Core-MarcusDenker.125.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1359.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.785.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.224.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/12/2013 21:58'! update30039 "self new update30039" self withUpdateLog: '10281 Another fix for AST: remove #visitArgumentNode: in OBSemanticAnnotator https://pharo.fogbugz.com/f/cases/10281 10280 Remove strange MCRepositories https://pharo.fogbugz.com/f/cases/10280/ '. self loadTogether: self script138 merge: false. self flushCaches. ! ! "ScriptLoader30"! MCWriteOnlyRepository removeSelector: #versionWithInfo:ifAbsent:! MCWriteOnlyRepository removeSelector: #includesVersionNamed:! MCSmtpRepository removeSelector: #subjectForVersion:! MCSmtpRepository removeSelector: #messageForVersion:! MCSmtpRepository removeSelector: #emailAddress:! MCSmtpRepository removeSelector: #description! MCSmtpRepository removeSelector: #bodyForVersion:! MCSmtpRepository removeSelector: #basicStoreVersion:! MCSmtpRepository class removeSelector: #morphicConfigure! MCSmtpRepository class removeSelector: #description! Smalltalk globals removeClassNamed: #MCSmtpRepository! Smalltalk globals removeClassNamed: #MCWriteOnlyRepository! MCGOODSRepository removeSelector: #versionsAvailableForPackage:! MCGOODSRepository removeSelector: #versionWithInfo:ifAbsent:! MCGOODSRepository removeSelector: #root! MCGOODSRepository removeSelector: #port:! MCGOODSRepository removeSelector: #packages! MCGOODSRepository removeSelector: #host:! MCGOODSRepository removeSelector: #description! MCGOODSRepository removeSelector: #db! MCGOODSRepository removeSelector: #basicStoreVersion:! MCGOODSRepository class removeSelector: #host:port:! MCGOODSRepository class removeSelector: #description! MCGOODSRepository class removeSelector: #creationTemplate! Smalltalk globals removeClassNamed: #MCGOODSRepository! RBSemanticAnnotator removeSelector: #visitArgumentNode:! "AST-Semantic"! "Monticello"! ----End fileIn----! ----QUIT----an Array(13 April 2013 10:00:40 pm) Pharo.image priorSource: 1111454! ----STARTUP----an Array(13 April 2013 10:06:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 April 2013 10:06:57 pm) Pharo-30039.image priorSource: 1123107! ----STARTUP----an Array(16 April 2013 10:14:58 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/16/2013 10:12' prior: 34666188! commentForCurrentUpdate ^ '10290 Typo in selector Exit class>>#signalFaillure: http://pharo.fogbugz.com/f/cases/10290 10258 DivideByZero in SystemProgressMorph https://pharo.fogbugz.com/f/cases/10258 10272 Monticello should provide a proper UI dialog to ask for username and password https://pharo.fogbugz.com/f/cases/10272/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/16/2013 10:12'! script139 ^ 'AST-Core-MarcusDenker.125.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/16/2013 10:12'! update30040 "self new update30040" self withUpdateLog: '10290 Typo in selector Exit class>>#signalFaillure: http://pharo.fogbugz.com/f/cases/10290 10258 DivideByZero in SystemProgressMorph https://pharo.fogbugz.com/f/cases/10258 10272 Monticello should provide a proper UI dialog to ask for username and password https://pharo.fogbugz.com/f/cases/10272/ '. self loadTogether: self script139 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCCredentialsRequest commentStamp: '' prior: 0! I am used to prompt in a UI indepentent way for a username and a password. If the user successfully entered the two strings I return an MCServerCredential if not I return nil.! !MCPermissionDenied commentStamp: '' prior: 0! I am signalled when a repositroy cannot save or access a version.! !MCServerCredentials commentStamp: '' prior: 0! I store a username and password. ! !MCCredentialsRequest commentStamp: '' prior: 34688207! I am used to prompt in a UI indepentent way for a username and a password. If the user successfully entered the two strings I return an MCServerCredential if not I return nil.! !MCCredentialsRequest class methodsFor: 'signalling' stamp: 'CamilloBruni 4/11/2013 17:35'! signalUrl: aUrl ^ self new url: aUrl; signal! ! !MCCredentialsRequest class methodsFor: 'signalling' stamp: 'CamilloBruni 4/11/2013 17:49'! signalUrl: aUrl username: username password: password ^ self new url: aUrl; username: username; password: password; signal! ! !MCCredentialsRequest methodsFor: 'exceptiondescription' stamp: 'CamilloBruni 4/11/2013 17:49'! defaultAction username := UIManager default request: self userMessagePrompt initialAnswer: self username title: 'User' translated. (username isNil or: [ username isEmpty ]) ifTrue: [ ^ nil ]. password := UIManager default requestPassword: self passwordMessagePrompt. ^ MCServerCredentials user: username password: password! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:48'! password ^ password! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:48'! password: anObject password := anObject! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:36'! passwordMessagePrompt ^ 'Please enter a password for ', self url asString! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:35'! url ^ url! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:35'! url: anObject url := anObject! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:36'! userMessagePrompt ^ 'Please enter a username for ', self url asString! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:48'! username ^ username! ! !MCCredentialsRequest methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:48'! username: anObject username := anObject! ! !Exit class methodsFor: 'signalling' stamp: 'CamilloBruni 4/14/2013 22:27'! signalFailure ^ self failure signal! ! !Exit class methodsFor: 'signalling' stamp: 'CamilloBruni 4/14/2013 22:27'! signalFailure: aMessage ^ self failure signal: aMessage! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/11/2013 17:28' prior: 34479484! basicSaveVersionIn: aRepository | newVersion waitForVersion | waitForVersion := Semaphore new. WorldState addDeferredUIMessage: [ newVersion := workingCopy newVersion. waitForVersion signal ]. Processor activeProcess == UIManager default uiProcess ifFalse: [ waitForVersion wait ]. newVersion ifNil: [ ^ self ]. Cursor wait showWhile: [[ self storeVersion: newVersion in: aRepository; storeDependencies: newVersion in: aRepository.] ensure: [ (MCVersionInspector new version: newVersion) show ]]! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/11/2013 17:50'! retryOnCredentialRequest: aBlock aBlock on: MCPermissionDenied do: [ :error | |credentials| credentials := MCCredentialsRequest signalUrl: repository location username: repository user password: repository password. credentials ifNotNil: [ self repository credentials: credentials. ^ self retryOnCredentialRequest: aBlock ]]! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/11/2013 17:26'! storeDependencies: newVersion in: aRepository self retryOnCredentialRequest: [ aRepository storeDependencies: newVersion ]! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'CamilloBruni 4/11/2013 17:28'! storeVersion: newVersion in: aRepository self retryOnCredentialRequest: [ aRepository storeVersion: newVersion ]! ! !MCPermissionDenied commentStamp: '' prior: 34688443! I am signalled when a repositroy cannot save or access a version.! !MCPermissionDenied class methodsFor: 'signalling' stamp: 'CamilloBruni 4/11/2013 17:17'! signalFor: aRepository ^ self new repository: aRepository; signal! ! !MCPermissionDenied methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:17'! repository ^ repository! ! !MCPermissionDenied methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:17'! repository: anObject repository := anObject! ! !MCServerCredentials commentStamp: '' prior: 34688570! I store a username and password. ! !MCServerCredentials class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/11/2013 17:34' prior: 24978859! user: nameString hasPassword: passwordString self deprecated: 'use user:password:' on: '4/11/2013' in: 'Pharo 3.0'. ^ self new username: nameString; password: passwordString; yourself.! ! !MCServerCredentials class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/11/2013 17:33'! user: nameString password: passwordString ^ self new username: nameString; password: passwordString; yourself.! ! !MCServerRegistry methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 4/11/2013 17:33' prior: 24979389! on: repositoryUrl beUser: nameString withPassword: passwordString | credentials | credentials := MCServerCredentials user: nameString password: passwordString. registry at: repositoryUrl put: credentials.! ! !Job methodsFor: 'progress' stamp: 'ChristopheDemarey 4/12/2013 13:53' prior: 24070782! progress "Avoid negative progress and divideByZero." ^ min >= max ifTrue: [ 1 ] ifFalse: [ (currentValue - min) / (max - min) ]! ! !MCHttpRepository methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:42'! credentials ^ MCServerCredentials user: self user password: self password! ! !MCHttpRepository methodsFor: 'accessing' stamp: 'CamilloBruni 4/11/2013 17:45'! credentials: mcServerCredentials self user: mcServerCredentials username. self password: mcServerCredentials password.! ! !MCHttpRepository methodsFor: 'i/o' stamp: 'CamilloBruni 4/11/2013 17:22'! handleUnsuccessfulResponse: aZnResponse (#(403 401) includes: aZnResponse code) ifTrue: [ MCPermissionDenied signalFor: self ]. Error signal: 'Could not save version.'! ! !MCHttpRepository methodsFor: 'i/o' stamp: 'CamilloBruni 4/11/2013 17:19' prior: 24806964! writeStreamForFileNamed: aString replace: ignoreBoolean do: aBlock | entity | entity := self entityStreamContents: aBlock. self displayProgress: 'Uploading ', aString during: [ self httpClient entity: entity; ifFail: [ :exception | (exception isKindOf: ZnHttpUnsuccessful) ifTrue: [ ^ self handleUnsuccessfulResponse: exception response ]. self error: 'Could not save ', aString, ': ', exception printString ]; url: (self urlForFileNamed: aString); put ]! ! Exit class removeSelector: #signalFaillure:! Exit class removeSelector: #signalFaillure! "Kernel"! "Monticello"! "MonticelloGUI"! ----End fileIn----! ----QUIT----an Array(16 April 2013 10:15:06 am) Pharo.image priorSource: 1123309! ----STARTUP----an Array(16 April 2013 10:21:27 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 April 2013 10:21:27 am) Pharo-30040.image priorSource: 1141063! ----STARTUP----an Array(16 April 2013 2:00:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 4/16/2013 13:53' prior: 34678044! commentForCurrentUpdate ^ '10028 Integrate Opal https://pharo.fogbugz.com/f/cases/10028 WARNING: ======== 1) Opal is still not default compiler, it is there to allow us to improve it and put it on shape 2) Please, help on it by providing bug reports, etc. :) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 4/16/2013 13:53'! script140 ^ 'AST-Core-MarcusDenker.125.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 4/16/2013 13:55'! update30041 "self new update30041" Gofer it smalltalkhubUser: 'Pharo' project: 'Opal'; configurationOf: 'OpalCompiler'; load. ((Smalltalk at: #ConfigurationOfOpalCompiler) project version: 'baseline1') load. ScriptLoader new unloadPackageNamed: 'ConfigurationOfOpalCompiler'. . self withUpdateLog: '10028 Integrate Opal https://pharo.fogbugz.com/f/cases/10028 WARNING: ======== 1) Opal is still not default compiler, it is there to allow us to improve it and put it on shape 2) Please, help on it by providing bug reports, etc. :) '. self loadTogether: self script140 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfOpalCompiler commentStamp: '' prior: 0! To load the latest from the Repo (3.0) ConfigurationOfOpalCompiler project bleedingEdge load To load the latest stable packages (2.0) ConfigurationOfOpalCompiler load! !ConfigurationOfOpalCompiler commentStamp: '' prior: 34706291! To load the latest from the Repo (3.0) ConfigurationOfOpalCompiler project bleedingEdge load To load the latest stable packages (2.0) ConfigurationOfOpalCompiler load! !ConfigurationOfOpalCompiler class methodsFor: 'private' stamp: 'jb 8/20/2010 10:33'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfOpalCompiler class methodsFor: 'private' stamp: 'jb 8/20/2010 10:33'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.15" self bootstrapPackage: 'Gofer-lr.83' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load latest version of Metacello, load a specific version if desired" (Smalltalk at: #ConfigurationOfMetacello) perform: #loadLatestVersion ]! ! !ConfigurationOfOpalCompiler class methodsFor: 'metacello tool support' stamp: 'jb 8/20/2010 10:33'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfOpalCompiler class methodsFor: 'metacello tool support' stamp: 'jb 8/20/2010 10:33'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfOpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 4/5/2013 14:31'! load "self load" ^(self project version: #stable) load! ! !ConfigurationOfOpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 11/15/2012 15:11'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfOpalCompiler class methodsFor: 'metacello tool support' stamp: 'jb 8/20/2010 10:33'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfOpalCompiler class methodsFor: 'accessing' stamp: 'jb 8/20/2010 10:34'! project ^self new project! ! !ConfigurationOfOpalCompiler class methodsFor: 'private' stamp: 'MarcusDenker 11/15/2012 15:12'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfOpalCompiler methodsFor: 'baselines' stamp: 'CamilloBruni 1/30/2013 17:27'! baseline1: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/Pharo/Opal/main'. spec package: 'OpalCompiler-Core'; package: 'OpalCompiler-Tests' with: [ spec requires: 'OpalCompiler-Core' ]; package: 'OpalCompiler-RegressionTests' with: [ spec requires: 'OpalCompiler-Core' ]; package: 'OpalCompiler-DestructiveRegressionTests' with: [ spec requires: #('OpalCompiler-Core' 'OpalCompiler-RegressionTests') ]. spec group: 'default' with: #('Core' 'Tests'). spec group: 'Core' with: #('OpalCompiler-Core'). spec group: 'Tests' with: #('OpalCompiler-Tests' 'OpalCompiler-RegressionTests' 'OpalCompiler-DestructiveRegressionTests'). ].! ! !ConfigurationOfOpalCompiler methodsFor: 'symbolic versions' stamp: 'MarcusDenker 4/5/2013 14:58'! development: spec spec for: #'common' version: 'dev'! ! !ConfigurationOfOpalCompiler methodsFor: 'accessing' stamp: 'jb 8/20/2010 10:29'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. project ]! ! !ConfigurationOfOpalCompiler methodsFor: 'symbolic versions' stamp: 'MarcusDenker 4/5/2013 14:55'! stable: spec spec for: #common version: 'pharo2'.! ! !ConfigurationOfOpalCompiler methodsFor: 'versions' stamp: 'MarcusDenker 4/5/2013 14:38'! versionDev: spec spec for: #common do: [ spec blessing: #development. spec package: 'OpalCompiler-Core' with: 'OpalCompiler-Core-MarcusDenker.165'; package: 'OpalCompiler-Tests' with: 'OpalCompiler-Tests-MarcusDenker.82'; package: 'OpalCompiler-DestructiveRegressionTests' with: 'OpalCompiler-DestructiveRegressionTests-MarcusDenker.7'; package: 'OpalCompiler-RegressionTests' with: 'OpalCompiler-RegressionTests-MarcusDenier.22'. ]. ! ! !ConfigurationOfOpalCompiler methodsFor: 'versions' stamp: 'MarcusDenker 4/5/2013 14:59'! versionPharo2: spec spec for: #common do: [ spec blessing: #stable. spec package: 'OpalCompiler-Core' with: 'OpalCompiler-Core-MarcusDenker.164'; package: 'OpalCompiler-Tests' with: 'OpalCompiler-Tests-MarcusDenker.82'; package: 'OpalCompiler-DestructiveRegressionTests' with: 'OpalCompiler-DestructiveRegressionTests-MarcusDenker.7'; package: 'OpalCompiler-RegressionTests' with: 'OpalCompiler-RegressionTests-MarcusDenier.22'. ]. ! ! "ConfigurationOfOpalCompiler"! !IRBytecodeDecompiler commentStamp: 'ajh 3/25/2003 00:26' prior: 0! I interpret bytecode instructions, sending the appropriate instruction messages to my IRBuilder, resulting in an IRMethod.! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 0! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 0! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCASTTranslatorForEffect commentStamp: 'ajh 3/24/2003 22:20' prior: 0! I override some methods in my super to generate instructions for effect only.! !OCASTTranslatorForValue commentStamp: 'ajh 3/24/2003 22:20' prior: 0! I override some methods in my super to generate instructions for effect and value only.! !OCLiteralList commentStamp: 'ajh 3/25/2003 00:31' prior: 0! Holds a unique ordered collection of literals! !IRBuilder commentStamp: '' prior: 0! I provide a simple interface for constructing an IRMethod. For example, to create an ir method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in BytecodeGenerator), do: IRBuilder new numArgs: 1; addTemps: #(a z); pushReceiver; pushInstVar: 1; pushTemp: #a; send: #>; jumpAheadTo: #else if: false; pushLiteral: 'yes'; returnTop; jumpAheadTarget: #else; pushLiteral: 'no'; returnTop; ir Sending #compiledMethod to an ir method will generate its compiledMethod. Sending #methodNode to it will decompile to its parse tree. ! !IRBytecodeGenerator commentStamp: 'ajh 5/23/2003 10:59' prior: 0! I generate bytecodes in response to 'instructions' messages being sent to me. I rewrite jumps at the end so their jump offsets are correct (see #bytecodes). For example, to create a compiled method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in IRBuilder), do: BytecodeGenerator new numArgs: 1; pushInstVar: 1; pushTemp: 1; send: #>; if: false goto: #else; pushLiteral: 'yes'; returnTop; label: #else; pushLiteral: 'no'; returnTop; compiledMethod You can send #ir to the compiledMethod to decompile to its IRMethod, and you can send #methodNode to either to decompile to its parse tree. ! !IRInstruction commentStamp: '' prior: 0! I am an instruction in the IR (intermediate representation) language. The IR serves as the intermediary between the Smalltalk language and the bytecode language. It is easier to optimize and translate to/from this language than it is to optimize/translate directly from Smalltalk to bytecodes. The IR is generic and simple consisting of just twelve instructions. They are: goto: labelNum if: boolean goto: labelNum1 otherwise: labelNum2 label: labelNum popTop pushDup pushLiteral: object pushTemp: name blockReturn returnTop send: selector send: selector toSuperOf: behavior storeTemp: name Each instruction is reified as an instance of one of my subclasses and grouped by basic block (IRSequence) into an IRMethod. IRInterpreter visits each instruction in a IRMethod responding to the above instruction messages sent to it. ! !IRAccess commentStamp: '' prior: 0! IRAccess models all bytecodes that read or write variables or self/super/thisContext! !IRInstVarAccess commentStamp: '' prior: 0! I am a bytecode accessing an instance variable. As such, I have an index.! !IRLiteralVariableAccess commentStamp: '' prior: 0! LiteralVariables are -> Globals -> Pool access -> Class Var access! !IRReceiverAccess commentStamp: '' prior: 0! I am modelling the push self bytecode! !IRJump commentStamp: 'ajh 3/24/2003 23:56' prior: 0! Instruction "goto: labelNum"! !IRJumpIf commentStamp: 'ajh 3/24/2003 23:56' prior: 0! Instruction "if: boolean goto: labelNum1 otherwise: labelNum2"! !IRPop commentStamp: 'ajh 3/24/2003 23:57' prior: 0! Instruction "popTop"! !IRPushDup commentStamp: 'ajh 3/24/2003 23:56' prior: 0! Instruction "pushDup"! !IRPushLiteral commentStamp: 'ajh 3/24/2003 23:56' prior: 0! Instruction "pushLiteral: object"! !IRReturn commentStamp: '' prior: 0! Instruction "returnTop"! !IRSend commentStamp: 'ajh 3/24/2003 23:57' prior: 0! Instruction "send: selector" or "send: selector toSuperOf: behavior"! !IRInterpreter commentStamp: 'ajh 3/24/2003 23:55' prior: 0! I visit each IRInstruction in an IRMethod in order. Each instruction sends its instruction message to me upon being visited. See my 'instructions' method category for complete list of instructions. Subclasses should override them.! !IRPrinter commentStamp: 'ajh 3/25/2003 00:22' prior: 0! I interpret IRMethod instructions and write them out to a print stream.! !IRTranslator commentStamp: 'ajh 3/25/2003 00:26' prior: 0! I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen). I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 0! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! !IRStackCount commentStamp: 'ajh 3/25/2003 00:34' prior: 0! This keeps track of the stack count for the BytecodeGenerator.! !OCAbstractScope commentStamp: 'ajh 3/24/2003 21:53' prior: 0! I am a symbol table where variable names are associated with SemVars. Each context (method/closure) get a fresh scope that inherits from its outer scope.! !OCClassScope commentStamp: 'ajh 3/24/2003 21:44' prior: 0! I include all variable enries for class, pool and global vars.! !OCGlobalScope commentStamp: 'ajh 3/24/2003 21:52' prior: 0! When the class is not known, use me to at least find global vars.! !OCAbstractVariable commentStamp: '' prior: 0! I am an entry in a Scope that gets associated with variable nodes of the same name. ! !OCAbstractLocalVariable commentStamp: '' prior: 0! I am an argument or temporary variable of a method or block. index is not the index in the bytecode but just used for sorting (see tempVars). to be fixed...! !OCLiteralVariable commentStamp: 'ajh 3/24/2003 21:53' prior: 0! I am a global, pool, or class variable.! !OCParser commentStamp: '' prior: 0! This mirrors the old Parser protocol but delegates to the real parser which is RBParser.! !OCPrimitiveNode commentStamp: 'ajh 3/24/2003 21:35' prior: 0! I represent a primitive. I am more than just a number if I am a named primitive. Structure: num Primitive number. spec Stored in first literal when num is 117 or 120. ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 0! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCShadowVariableWarning commentStamp: 'ajh 3/24/2003 22:21' prior: 0! I get signalled when a variable in a block or method scope shadows a variable of the same name in an outer scope. The default action is to allow it.! !OCUndeclaredVariableWarning commentStamp: '' prior: 0! I get signalled when a temporary variable is used that is not defined. My default action is to create an Undeclared binding and add it to the Undeclared dictionary.! !OCUninitializedVariableWarning commentStamp: 'ajh 3/24/2003 22:34' prior: 0! I get signalled when a temporary variable is used before it is assigned to. My default action is to allow it since all temps get initialized to nil.! !OCUnknownSelectorWarning commentStamp: 'ajh 3/24/2003 22:23' prior: 0! I get signalled when no selector is defined for a message send, indicating a possible mispelling. My default action is to create a new selector.! !OCUnusedVariableWarning commentStamp: 'ajh 3/24/2003 22:35' prior: 0! I get signalled when a temporary variable is declared but never used. My default action is to allow it since it is benign.! !OCKeyedSet commentStamp: '' prior: 0! Like Set except a key of every element is used for hashing and searching instead of the element itself. keyBlock gets the key of an element.! !OCLiteralSet commentStamp: 'ajh 3/25/2003 00:33' prior: 0! Holds a unique set of literals. Literal objects are equal if they are #= plus they are the same class. This set uses this rule for finding elements. Example: Set new add: 'anthony'; add: #anthony; size "= 1" LiteralSet new add: 'anthony'; add: #anthony; size "= 2" ! !OCBackendError commentStamp: '' prior: 0! I am raised by the backend for errors related to VM contraints like too many ivars, too many arguments...! !InstructionStream class methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/4/2011 17:09'! needsLongForm ^true! ! !IRBytecodeDecompiler commentStamp: 'ajh 3/25/2003 00:26' prior: 34713173! I interpret bytecode instructions, sending the appropriate instruction messages to my IRBuilder, resulting in an IRMethod.! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/8/2012 13:50'! blockReturnTop self popScope. irBuilder blockReturnTop.! ! !IRBytecodeDecompiler methodsFor: 'private' stamp: 'ToonVerwaest 3/24/2011 23:22'! checkIfJumpTarget irBuilder testJumpAheadTarget: instructionStream pc! ! !IRBytecodeDecompiler methodsFor: 'public access' stamp: 'MarcusDenker 6/6/2012 16:41'! decompile: aCompiledMethod instructionStream := InstructionStream on: aCompiledMethod. irBuilder := IRReconstructor new. scopeStack := Stack new. self pushScope: #() numArgs: aCompiledMethod numArgs. irBuilder primitiveNode: aCompiledMethod primitiveNode. irBuilder properties: aCompiledMethod properties copy. irBuilder numArgs: aCompiledMethod numArgs. irBuilder addTemps: self scope args. aCompiledMethod isQuick ifTrue: [self quickMethod] ifFalse: [self interpret]. self popScope. "just add all literals of the compiledMethod as additional literals. duplicates will be filtered out, but we keep the optimized ones" irBuilder additionalLiterals: (aCompiledMethod literals allButLast: 2). "when compiling methods of context classes, force long form for iVar access" aCompiledMethod methodClass ifNotNil: [:class | class needsLongForm ifTrue: [irBuilder forceLongForm]]. ^ irBuilder ir.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 15:40'! doDup irBuilder pushDup! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:08'! doPop irBuilder popTop! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/13/2012 17:07'! interpret | endPC | endPC := instructionStream method endPC. [instructionStream pc > endPC ] whileFalse: [ self checkIfJumpTarget. irBuilder mapToByteIndex: instructionStream pc. instructionStream interpretNextInstructionFor: self.]! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/19/2012 11:41'! jump: dist | index seq instr newSeq seqs | index := instructionStream pc + dist . dist >= 0 ifTrue: [ "jump forward" ^ irBuilder jumpAheadTo: index ]. "jump to the jump instuction itself" dist >= -2 ifTrue: [ irBuilder jumpBackTarget: index. irBuilder jumpBackTo: index. ^self]. "jump backward" seqs := irBuilder ir allSequences. seq := seqs findLast: [:s | s notEmpty and: [s first bytecodeIndex <= index]]. seq := seqs at: seq. seq first bytecodeIndex = index ifTrue: [ newSeq := seq ] ifFalse: [ instr := seq detect: [:i | (seq after: i) bytecodeIndex = index]. newSeq := seq splitAfter: instr ]. irBuilder addJumpBackTarget: index to: newSeq. "if we have split the currentSequence of the irBuilder, make sure to set it to the newSeq". irBuilder currentSequence = seq ifTrue: [irBuilder currentSequence: newSeq]. irBuilder jumpBackTo: index. ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:08'! jump: dist if: bool | index | index := instructionStream pc + dist . dist >= 0 ifTrue: [ "conditional jump forward" ^ irBuilder jumpAheadTo: index if: bool ]. self error: 'Should not do this'! ! !IRBytecodeDecompiler methodsFor: 'private' stamp: 'ToonVerwaest 3/24/2011 17:59'! methodClass ^ instructionStream method methodClass! ! !IRBytecodeDecompiler methodsFor: 'quick methods' stamp: 'ToonVerwaest 3/24/2011 23:08'! methodReturnConstant: value self pushConstant: value. self methodReturnTop.! ! !IRBytecodeDecompiler methodsFor: 'quick methods' stamp: 'MarcusDenker 6/19/2012 11:48'! methodReturnReceiver self pushReceiver. self methodReturnTop.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/13/2012 13:33'! methodReturnTop irBuilder isLastClosureInstruction ifTrue: [ self popScope. irBuilder fixPushNilsForTemps. irBuilder returnTop. irBuilder popScope. ] ifFalse: [ irBuilder returnTop ]! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! popIntoLiteralVariable: offset self storeIntoLiteralVariable: offset. self doPop.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! popIntoReceiverVariable: offset self storeIntoReceiverVariable: offset. self doPop.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex self storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex. self doPop. ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/27/2011 15:25'! popIntoTemporaryVariable: offset newTempVector ifNil: [ self storeIntoTemporaryVariable: offset. self doPop. ] ifNotNil: [ self scope newTempVector: newTempVector at: offset. " Keep offset for remapping in popScope " newTempVector index: offset. irBuilder createTempVectorNamed: newTempVector withVars: newTempVector. newTempVector := nil ]! ! !IRBytecodeDecompiler methodsFor: 'scope' stamp: 'ToonVerwaest 3/31/2011 14:54'! popScope | scope tempIndex | scope := self scope. irBuilder addTemps: scope temps. " Remap your own temp vectors " scope ownTempVectors do: [ :tempVector | irBuilder remapTemp: (scope -> tempVector index) toRemote: tempVector ]. " Remap the copied values " tempIndex := scope numArgs. scope copiedValues do: [ :copiedValue | irBuilder remapTemp: (scope -> tempIndex) toRemote: copiedValue. tempIndex := tempIndex + 1. ]. ^ scopeStack pop! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! pushActiveContext irBuilder pushThisContext! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/13/2012 13:23'! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize | closureEnd copiedValues | copiedValues := irBuilder removeLast: numCopied. self pushScope: copiedValues numArgs: numArgs. closureEnd := instructionStream pc + blockSize. irBuilder pushClosureCopyCopiedValues: copiedValues args: self scope args jumpTo: closureEnd.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! pushConsArrayWithElements: numElements irBuilder pushConsArray: numElements ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/28/2011 18:21'! pushConstant: value irBuilder pushLiteral: value! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/28/2011 18:19'! pushLiteralVariable: assoc irBuilder pushLiteralVariable: assoc.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 7/16/2012 16:06'! pushNewArrayOfSize: size newTempVector := IRRemoteArray new size: size! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:09'! pushReceiver irBuilder pushReceiver! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:10'! pushReceiverVariable: offset irBuilder pushInstVar: offset + 1. ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/25/2011 17:13'! pushRemoteTemp: remoteIndex inVectorAt: tempIndex | remoteArray remoteTempName | remoteArray := self scope tempAt: tempIndex. remoteTempName := self scope tempAt: remoteIndex inRemote: remoteArray. irBuilder pushRemoteTemp: remoteTempName inVector: remoteArray.! ! !IRBytecodeDecompiler methodsFor: 'scope' stamp: 'MarcusDenker 7/16/2012 16:05'! pushScope: copiedValues numArgs: numArgs |scope | scope := IRBytecodeScope new numArgs: numArgs. scopeStack push: scope. scope copiedValues: copiedValues.! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/27/2011 01:29'! pushTemporaryVariable: offset irBuilder pushTemp: (self scope tempAt: offset)! ! !IRBytecodeDecompiler methodsFor: 'quick methods' stamp: 'MarcusDenker 7/16/2012 16:05'! quickMethod instructionStream method primitive = 256 ifTrue: [ ^ self methodReturnReceiver ]. instructionStream method isReturnSpecial ifTrue: [ ^ self methodReturnConstant: (IRBytecodeGenerator specialConstants at: instructionStream method primitive - 256) ]. instructionStream method isReturnField ifTrue: [ self pushReceiverVariable: instructionStream method returnField. ^ self methodReturnTop ]. self error: 'quick method inconsistency'! ! !IRBytecodeDecompiler methodsFor: 'scope' stamp: 'ToonVerwaest 3/24/2011 21:17'! scope ^ scopeStack top! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'MarcusDenker 11/11/2011 15:51'! send: selector super: superFlag numArgs: numArgs superFlag ifTrue: [irBuilder send: selector toSuperOf: self methodClass] ifFalse: [irBuilder send: selector]! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:10'! storeIntoLiteralVariable: value irBuilder storeIntoLiteralVariable: value! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:10'! storeIntoReceiverVariable: offset irBuilder storeInstVar: offset + 1. ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/25/2011 17:13'! storeIntoRemoteTemp: remoteIndex inVectorAt: tempIndex | remoteArray remoteTempName | remoteArray := self scope tempAt: tempIndex. remoteTempName := self scope tempAt: remoteIndex inRemote: remoteArray. irBuilder storeRemoteTemp: remoteTempName inVector: remoteArray. ! ! !IRBytecodeDecompiler methodsFor: 'instruction decoding' stamp: 'ToonVerwaest 3/24/2011 23:10'! storeIntoTemporaryVariable: offset irBuilder storeTemp: (self scope tempAt: offset)! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenler 12/10/2012 15:48'! isPrimitiveError ^ #( primitive:error: primitive:module:error:) includes: self selector! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/14/2010 21:37'! pragma ^Pragma keyword: selector arguments: arguments! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 13:05'! primitive | args module name spec| args := (self arguments collect: [ :each | each value ]) asArray. self isPrimitive ifFalse: [OCPrimitiveNode null]. ( args first isString ) ifTrue: [name := args first. module := args at: 2 ifAbsent: [ nil ]. spec := (Array with: (module ifNotNil: [ module asSymbol ]) with: name asSymbol with: 0 with: 0). ^OCPrimitiveNode new num: 117; spec: spec; yourself] ifFalse: [^OCPrimitiveNode new num: (args first); spec: nil; yourself]. ! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'JorgeRessia 9/23/2010 13:12'! isInlined (parent isMessage and: [parent isInlineAndOr]) ifTrue: [^ true]. (parent isMessage and: [parent isInlineIf]) ifTrue: [^ true]. (parent isMessage and: [parent isInlineIfNil]) ifTrue: [^ true]. ^ self isInlinedLoop! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'JorgeRessia 9/23/2010 13:11'! isInlinedLoop (parent isMessage and: [parent isInlineToDo]) ifTrue: [^ true]. (parent isMessage and: [parent isInlineWhile]) ifTrue: [^ true]. (parent isMessage and: [parent parent isArray and: [parent parent parent isMessage and: [parent parent parent isInlineCase]]]) ifTrue: [^ true]. (parent isMessage and: [parent isInlineCase]) ifTrue: [^ true]. "otherwise branch" ^ false! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'jorgeRessia 11/20/2009 16:40'! owningScope ^ self scope ifNil: ["inlined" ^ parent owningScope]! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 2/3/2013 15:42'! printAsIfCompiledOn: aStream aStream nextPutAll: self formattedCode! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 12/17/2012 15:53'! debugHighlightRange ^ self debugHighlightStart to: self debugHighlightStop .! ! !RBProgramNode methodsFor: '*opalcompiler-core'! debugHighlightStart ^ self start ! ! !RBProgramNode methodsFor: '*opalcompiler-core'! debugHighlightStop ^ self stop ! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 12/18/2012 14:08'! irInstruction "search for the first ir instruction that I generate" self methodNode ir sourceNode == self ifTrue: [^self methodNode ir]. ^self methodNode ir firstInstructionMatching: [:instr | instr sourceNode == self ] ! ! !RBProgramNode methodsFor: '*opalcompiler-core'! owningScope ^ parent owningScope ! ! !Behavior methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/4/2011 17:46'! needsLongForm ^false! ! !Behavior methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 18:41'! parseScope ^ OCClassScope for: self! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'ajh 6/28/2004 13:52'! compiledMethod ^ self ir compiledMethod! ! !RBMethodNode methodsFor: '*opalcompiler-core-semantics' stamp: 'MarcusDenker 11/20/2012 15:44'! doSemanticAnalysis self doSemanticAnalysisIn: self methodClass.! ! !RBMethodNode methodsFor: '*opalcompiler-core-semantics' stamp: 'MarcusDenker 1/25/2013 15:09'! doSemanticAnalysisIn: classOrScope self doSemanticAnalysisIn: classOrScope interactive: false.! ! !RBMethodNode methodsFor: '*opalcompiler-core-semantics' stamp: 'MarcusDenker 4/8/2013 15:48'! doSemanticAnalysisIn: classOrScope interactive: aBoolean self doSemanticAnalysisIn: classOrScope interactive: aBoolean notifying: nil.! ! !RBMethodNode methodsFor: '*opalcompiler-core-semantics' stamp: 'MarcusDenker 4/8/2013 15:21'! doSemanticAnalysisIn: classOrScope interactive: aBoolean notifying: aRequestor "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." classOrScope isBehavior ifTrue: [self methodClass: classOrScope]. OCASTSemanticAnalyzer new scope: classOrScope parseScope; errorNotification: aBoolean; requestor: aRequestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/10/2010 16:42'! generate "The receiver is the root of a parse tree. Answer a CompiledMethod. The argument, trailer, is the references to the source code that is stored with every CompiledMethod." ^self generate: CompiledMethodTrailer empty! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/20/2012 16:30'! generate: trailer ^ self generateIR compiledMethodWith: trailer.! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/8/2013 16:04'! generateIR | ir | scope ifNil: [self doSemanticAnalysis]. ir := (OCASTTranslator new visitNode: self) ir. self ir: ir. ^ir! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 1/30/2013 13:13'! generateWithSource "Answer a CompiledMethod with source encoded in trailer." "for doits, we need to store the source pretty printed from the AST to get the return and methodName correct" self selector isDoIt ifTrue: [source := self formattedCode]. ^self generate: (CompiledMethodTrailer new sourceCode: source).! ! !RBMethodNode methodsFor: '*opalcompiler-core-accessing' stamp: 'jorgeRessia 11/22/2009 10:30'! ir ^ self propertyAt: #ir ifAbsent: [self generateIR].! ! !RBMethodNode methodsFor: '*opalcompiler-core-accessing' stamp: 'JorgeRessia 11/24/2009 19:05'! ir: aIRMethodNode ^ self propertyAt: #ir put: aIRMethodNode.! ! !RBMethodNode methodsFor: '*opalcompiler-core-semantics' stamp: 'MarcusDenker 6/29/2012 16:04'! owningScope ^ self scope! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 13:05'! primitiveFromPragma | aPragmaPrimitive | pragmas isNil ifTrue: [^OCPrimitiveNode null]. aPragmaPrimitive := pragmas detect: [:each | each isPrimitive ] ifNone:[]. aPragmaPrimitive isNil ifTrue: [^OCPrimitiveNode null] ifFalse: [^aPragmaPrimitive primitive ]! ! !RBMethodNode methodsFor: '*opalcompiler-core-accessing' stamp: 'MarcusDenker 8/10/2010 16:40'! properties ^self propertyAt: #methodProperties ifAbsentPut: [AdditionalMethodState new]! ! !RBMethodNode methodsFor: '*opalcompiler-core-accessing' stamp: 'JorgeRessia 11/24/2009 18:56'! properties: aMethodeProperties ^self propertyAt: #methodProperties put: aMethodeProperties! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'jorgeRessia 11/20/2009 16:40'! debugHighlightStart ^ self selectorParts first start! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'jorgeRessia 11/20/2009 16:40'! debugHighlightStop ^ self stopWithoutParentheses! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 6/19/2012 20:41'! isInlineAndOr self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(and: or:) includes: self selector) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each isBlock ]) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each arguments isEmpty ]) ifFalse: [ self notify: 'and: (or:) takes zero-arg block'. ^ false ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'jorgeRessia 11/20/2009 16:40'! isInlineCase self isCascaded ifTrue: [^ false]. (#(caseOf: caseOf:otherwise:) includes: self selector) ifFalse: [^ false]. self arguments size = 2 ifTrue: [ "otherwise block" self arguments last isBlock ifFalse: [^ false]]. self arguments first isArray ifFalse: [^ false]. self arguments first statements do: [:assoc | (assoc isMessage and: [assoc selector == #->]) ifFalse: [^ false]. assoc receiver isBlock ifFalse: [^ false]. assoc receiver arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks'. ^ false]. assoc arguments first isBlock ifFalse: [^ false]. assoc arguments first arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks']. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'jorgeRessia 11/20/2009 16:40'! isInlineIf self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ self notify: 'ifTrue:ifFalse: takes zero-arg blocks'. ^ false ] ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/1/2012 21:00'! isInlineIfNil | assertNone assertOneOrNone | self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifNil: ifNotNil: ifNil:ifNotNil: ifNotNil:ifNil:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. assertNone := [:block | block arguments isEmpty ifFalse: [self notify: 'ifNil: takes zero-arg block'. ^ false] ]. assertOneOrNone := [:block | block arguments size > 1 ifTrue: [self notify: 'ifNotNil: takes zero- or one-arg block'. ^ false] ]. self selector == #ifNil: ifTrue: [assertNone value: self arguments first]. self selector == #ifNil:ifNotNil: ifTrue: [assertNone value: self arguments first. assertOneOrNone value: self arguments last]. self selector == #ifNotNil: ifTrue: [assertOneOrNone value: self arguments first]. self selector ==#ifNotNilDo: ifTrue: [assertOneOrNone value: self arguments first]. self selector == #ifNotNil:ifNil: ifTrue: [assertOneOrNone value: self arguments first. assertNone value: self arguments last]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 12/5/2012 15:47'! isInlineToDo | block step | self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(to:do: to:by:do:) includes: self selector) ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size = 1 ifFalse: [ self notify: 'to:do: block must take one arg'. ^ false]. self arguments first isVariable ifTrue: [ (RBParseTreeSearcher new matches: self arguments first name , ' := `@object' do: [:n :a | true]; executeTree: block initialAnswer: false) ifTrue: [^ false]. ]. self arguments size = 3 "to:by:do:" ifTrue: [ step := self arguments second. step isLiteral ifFalse: [^ false]. step value = 0 ifTrue: [^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'jorgeRessia 11/20/2009 16:40'! isInlineWhile self isCascaded ifTrue: [^ false]. (#(whileFalse: whileTrue: whileFalse whileTrue) includes: self selector) ifFalse: [^ false]. self receiver isBlock ifFalse: [^ false]. self receiver arguments isEmpty ifFalse: [self notify: 'while receiver block must have no arguments'. ^ false]. self arguments isEmpty ifFalse: [ self arguments first isBlock ifFalse: [^ false]. self arguments first arguments isEmpty ifFalse: [self notify: 'while takes a zero-arg block as its argument'. ^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 6/21/2012 11:02'! isInlined self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineCase ifTrue: [^true]. ^false.! ! !RBSequenceNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 1/29/2013 14:19'! asSequenceNode ^self! ! !RBSequenceNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 1/29/2013 14:24'! transformLastToReturn | last | last := statements last. last isReturn ifFalse: [self replaceNode: last withNode: (RBReturnNode value: last )]! ! !UndefinedObject methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 14:35'! parseScope ^ OCGlobalScope new! ! !TraitBehavior methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 6/6/2012 16:32'! needsLongForm ^false! ! !TraitBehavior methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 18:41'! parseScope ^OCClassScope for: self! ! !RBValueNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 1/29/2013 14:25'! asSequenceNode ^RBSequenceNode statements: {self} ! ! !OCASTClosureAnalyzer methodsFor: 'visitor-double dispatching' stamp: 'JorgeRessia 9/23/2010 15:59'! doCopying | copying | copying := scope tempVars select: [ :each | each isEscapingRead]. copying do: [ :each | scope addCopyingTemp: each]! ! !OCASTClosureAnalyzer methodsFor: 'visitor-double dispatching' stamp: 'JorgeRessia 9/22/2010 16:16'! doRemotes | remotes | remotes := scope tempVars select: [ :each | each isEscapingWrite]. remotes do: [ :each | scope moveToVectorTemp: each]. ! ! !OCASTClosureAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitBlockNode: aBlockNode "here look at the temps and make copying vars / tempVector out of them" scope := aBlockNode scope. self doRemotes; doCopying. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTClosureAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitMethodNode: aMethodNode "here look at the temps and make copying vars / tempVector out of them" scope := aMethodNode scope. self doRemotes; doCopying. self visitNode: aMethodNode body. scope := scope popScope.! ! !OCASTClosureAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitVariableNode: aVariableNode "re-lookup the temorary variables..." | var | aVariableNode isTemp ifFalse: [^self]. var := scope lookupVar: aVariableNode name. aVariableNode ocBinding: var. var isTempVectorTemp ifTrue: [scope addCopyingTempToAllScopesUpToDefVector: var vectorName]. var isCopying ifTrue: [scope addCopyingTempToAllScopesUpToDefTemp: var].! ! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 34713366! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTSemanticAnalyzer methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 11/15/2012 16:30'! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVar: name. var ifNotNil: [ (var scope ~= scope and: [ scope isOptimizedBlockScope not ]) ifTrue: [ "Create new var that shadows outer one" self variable: aVariableNode shadows: var. var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode ocBinding: var. ^ var! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 1/25/2013 15:09'! errorNotification: aBoolean errorNotification := aBoolean.! ! !OCASTSemanticAnalyzer methodsFor: 'initialize-release' stamp: 'MarcusDenker 1/25/2013 15:04'! initialize blockcounter := 0. scope := OCGlobalScope new. "in case never initialized" errorNotification := false.! ! !OCASTSemanticAnalyzer methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 5/18/2011 15:32'! lookupVariableForRead: aName | var | var := scope lookupVar: aName. var ifNil: [^var]. (var isTemp and: [var scope outerNotOptimizedScope ~= scope outerNotOptimizedScope] ) "only escaping when they will end up in different closures" ifTrue: [var markEscapingRead]. ^var! ! !OCASTSemanticAnalyzer methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 5/12/2011 11:15'! lookupVariableForWrite: aName | var | var := scope lookupVar: aName. var ifNil: [^var]. var isTemp ifTrue: [ (var scope outerNotOptimizedScope ~= scope outerNotOptimizedScope) "only escaping when they will end up in different closures" ifTrue: [ var markEscapingWrite]]. ^var! ! !OCASTSemanticAnalyzer methodsFor: 'accessing' stamp: 'MarcusDenker 4/8/2013 15:22'! requestor ^ requestor! ! !OCASTSemanticAnalyzer methodsFor: 'accessing' stamp: 'MarcusDenker 4/12/2013 13:54'! requestor: anObject requestor := anObject. anObject ifNotNil: [scope := scope outerScope: (OCToolScope new requestor: requestor)].! ! !OCASTSemanticAnalyzer methodsFor: 'initialize-release' stamp: 'MarcusDenker 9/4/2010 09:53'! scope: aSemScope scope := aSemScope! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 4/8/2013 15:23'! undeclaredVariable: variableNode ^ OCUndeclaredVariableWarning new variableNode: variableNode; errorNotification: errorNotification; requestor: requestor; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 4/10/2013 16:00'! uninitializedVariable: variableNode variableNode ocBinding markRead. ^ OCUninitializedVariableWarning new variableNode: variableNode; requestor: requestor; errorNotification: errorNotification; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 4/9/2013 09:56'! unknownSelector: messageNode ^ OCUnknownSelectorWarning new messageNode: messageNode; errorNotification: errorNotification; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 1/25/2013 15:16'! unusedVariable: variableNode ^ OCUnusedVariableWarning new variableNode: variableNode; errorNotification: errorNotification; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 4/8/2013 17:12'! variable: variableNode shadows: semVar ^ OCShadowVariableWarning new variableNode: variableNode; shadowedVar: semVar; requestor: requestor; errorNotification: errorNotification; signal! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitAssignmentNode: anAssignmentNode | var | self visitNode: anAssignmentNode value. var := (self lookupVariableForWrite: anAssignmentNode variable name) ifNil: [self undeclaredVariable: anAssignmentNode variable]. var markWrite. anAssignmentNode variable ocBinding: var. ! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitBlockNode: aBlockNode aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. blockcounter := blockcounter + 1. scope := scope newBlockScope: blockcounter. aBlockNode scope: scope. scope node: aBlockNode. aBlockNode arguments do: [:node | (self declareVariableNode: node) markArg]. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitInlinedBlockNode: aBlockNode blockcounter := blockcounter + 1. scope := scope newOptimizedBlockScope: blockcounter. aBlockNode isInlinedLoop ifTrue: [scope markInlinedLoop]. aBlockNode scope: scope. aBlockNode arguments do: [:node | (self declareVariableNode: node ) markArg.]. self visitNode: aBlockNode body. scope := scope popScope..! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitMessageNode: aMessageNode | selectorString | (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]. "this should be moved to the parser" selectorString := (String streamContents: [ :str | aMessageNode selectorParts do: [ :each | str nextPutAll: each value ]]). (Symbol findInterned: selectorString) ifNil: [self unknownSelector: aMessageNode]! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitMethodNode: aMethodNode scope := scope newMethodScope. aMethodNode scope: scope. scope node: aMethodNode. aMethodNode arguments do: [:node | (self declareVariableNode: node) markArg]. aMethodNode pragmas do: [:each | self visitNode: each]. self visitNode: aMethodNode body. scope outerScope outerScope ifNotNil: [:classScope | classScope classEncoding needsLongForm ifTrue: [ aMethodNode propertyAt: #needsLongForm put: true]]. scope := scope outerScope. ! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:11'! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [:node | self declareVariableNode: node]. aSequenceNode parent isMethod ifTrue: [ (aSequenceNode parent pragmas detect: [:pragma | pragma isPrimitiveError] ifNone: [nil]) ifNotNil: [:pragma | self declareVariableNode: (RBVariableNode named: pragma arguments last value asString)]]. aSequenceNode statements do: [:each | self visitNode: each]. aSequenceNode temporaries do: [:node | node ocBinding isUnused ifTrue: [self unusedVariable: node]]. ! ! !OCASTSemanticAnalyzer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitVariableNode: aVariableNode | var | var := (self lookupVariableForRead: aVariableNode name) ifNil: [(self undeclaredVariable: aVariableNode)]. "written variables in loops need special care... needs to be checked" (var isTemp and: [var isEscaping and: [scope outerScope isInsideOptimizedLoop]]) ifTrue: [ var isWrite ifTrue: [var markEscapingWrite]. var isRead ifTrue: [var markEscapingRead]]. aVariableNode ocBinding: var. var isUninitialized ifTrue: [self uninitializedVariable: aVariableNode].! ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 34713773! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCASTTranslator methodsFor: 'errors' stamp: 'MarcusDenker 2/6/2013 16:18'! backendError: aMessage forNode: aNode OCBackendError inClass: Object category: nil withCode: aNode methodNode source doitFlag: false errorMessage: aMessage location: aNode startWithoutParentheses! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitAnd: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end; jumpAheadTarget: #else; pushLiteral: false; jumpAheadTarget: #end. ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitCaseOf: aMessageNode | cases assocMessageNode | cases := aMessageNode arguments first statements. valueTranslator visitNode: aMessageNode receiver. 1 to: cases size - 1 do: [:i | methodBuilder pushDup. assocMessageNode := cases at: i. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. ]. "last case without otherwise" methodBuilder pushDup. assocMessageNode := cases last. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. methodBuilder send: #caseError. aMessageNode lastIsReturn ifTrue: [ (aMessageNode owningScope) isBlockScope ifTrue: [methodBuilder blockReturnTop] ifFalse: [methodBuilder returnTop]] ifFalse: [self isEffectTranslator ifTrue: [methodBuilder popTop]]. cases size timesRepeat: [methodBuilder jumpAheadTarget: #end].! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitCaseOfOtherwise: aMessageNode | cases assocMessageNode | cases := aMessageNode arguments first statements. valueTranslator visitNode: aMessageNode receiver. 1 to: cases size - 1 do: [:i | methodBuilder pushDup. assocMessageNode := cases at: i. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. ]. "last case with otherwise" assocMessageNode := cases last. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. self visitInlinedBlockNode: aMessageNode arguments last. cases size timesRepeat: [methodBuilder jumpAheadTarget: #end].! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfFalseIfTrue: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: true. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. valueTranslator visitInlinedBlockNode: aMessageNode arguments last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfNil: aMessageNode valueTranslator visitNode: aMessageNode receiver. self isValueTranslator ifTrue: [ methodBuilder pushDup ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #else if: false. self isValueTranslator ifTrue: [ methodBuilder popTop ]. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #else. ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfNilIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args last arguments ifNotEmpty: [ args last arguments first ocBinding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #notNilCase if: false. valueTranslator visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #notNilCase. valueTranslator visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first ocBinding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #notNil if: false. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #notNil. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfNotNilIfNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first ocBinding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #else if: true. valueTranslator visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. valueTranslator visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfTrueIfFalse: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. valueTranslator visitInlinedBlockNode: aMessageNode arguments last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching'! emitMessageNode: aMessageNode aMessageNode isCascaded ifFalse: [ valueTranslator visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | valueTranslator visitNode: each]. aMessageNode isSuperSend ifTrue: [methodBuilder send: aMessageNode selector toSuperOf: aMessageNode owningScope classEncoding] ifFalse: [methodBuilder send: aMessageNode selector]. ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitOr: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false; pushLiteral: true; jumpAheadTo: #end; jumpAheadTarget: #else. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #end. ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitToByDo: aMessageNode | limit step block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first ocBinding. step := aMessageNode arguments second. step isLiteral ifFalse: [self error: 'should not have been inlined']. step := step value. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. "loop" methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: (step > 0 ifTrue: [#<=] ifFalse: [#>=]). methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: step. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitToDo: aMessageNode | limit block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first ocBinding. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: #<=. methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: 1. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitWhileFalse: aMessageNode methodBuilder jumpBackTarget: #begin. valueTranslator visitInlinedBlockNode: aMessageNode receiver. methodBuilder jumpAheadTo: #end if: true. aMessageNode arguments ifNotEmpty: [ effectTranslator visitInlinedBlockNode: aMessageNode arguments first]. methodBuilder jumpBackTo: #begin. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitWhileTrue: aMessageNode methodBuilder jumpBackTarget: #begin. valueTranslator visitInlinedBlockNode: aMessageNode receiver. methodBuilder jumpAheadTo: #end if: false. aMessageNode arguments ifNotEmpty: [ effectTranslator visitInlinedBlockNode: aMessageNode arguments first]. methodBuilder jumpBackTo: #begin. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'initialize' stamp: 'ClementBera 12/11/2012 11:35'! initialize methodBuilder := IRBuilder new. effectTranslator := self as: OCASTTranslatorForEffect. valueTranslator := self as: OCASTTranslatorForValue. effectTranslator instVarNamed: #effectTranslator put: effectTranslator. effectTranslator instVarNamed: #valueTranslator put: valueTranslator. valueTranslator instVarNamed: #valueTranslator put: valueTranslator. ! ! !OCASTTranslator methodsFor: 'accessing' stamp: 'ajh 3/10/2003 17:59'! ir ^ methodBuilder ir! ! !OCASTTranslator methodsFor: 'testing' stamp: 'pmm 7/19/2006 11:54'! isEffectTranslator ^self == effectTranslator! ! !OCASTTranslator methodsFor: 'testing' stamp: 'pmm 7/19/2006 11:52'! isValueTranslator ^self == valueTranslator! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitArrayNode: anArrayNode | elementNodes | elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitAssignmentNode: anAssignmentNode valueTranslator visitNode: anAssignmentNode value. anAssignmentNode variable ocBinding emitStore: methodBuilder ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitBlockNode: aBlockNode | tempNames argumentNames copiedNames | aBlockNode arguments size >15 ifTrue: [self backendError: 'Too many arguments' forNode: aBlockNode ]. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. argumentNames := aBlockNode argumentNames asArray. tempNames := (aBlockNode scope tempVars asArray collect: [ :each | each name]) copyWithoutAll: argumentNames. copiedNames := (aBlockNode scope inComingCopiedVars asArray collect: [:each | each name]). methodBuilder pushClosureCopyCopiedValues: copiedNames args: argumentNames jumpTo: #block. aBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aBlockNode scope tempVectorName withVars: (aBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. effectTranslator visitNode: aBlockNode body. methodBuilder addBlockReturnTopIfRequired. self flag: 'why dont we just add a blockReturnTop here... it could be removed or ignored in IRTranslator'. methodBuilder jumpAheadTarget: #block. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitCascadeNode: aCascadeNode valueTranslator visitNode: aCascadeNode receiver. aCascadeNode messages allButLastDo: [:node | methodBuilder pushDup. effectTranslator visitNode: node. ]. valueTranslator visitNode: aCascadeNode messages last. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitInlinedBlockNode: anOptimizedBlockNode "We are visiting a scope that is not a block, but inlined in the outer context. This means: - we do not create a Block - we call IRBuilder to add temps " | argumentNames tempNames copiedNames | argumentNames := anOptimizedBlockNode argumentNames asArray. tempNames := (anOptimizedBlockNode scope tempVars collect: [ :each | each name asSymbol]) copyWithoutAll: argumentNames. copiedNames := (anOptimizedBlockNode scope inComingCopiedVars collect: [:each | each name]) asArray. anOptimizedBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: anOptimizedBlockNode scope tempVectorName withVars: (anOptimizedBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. methodBuilder addTemps: copiedNames. methodBuilder addTemps: argumentNames. anOptimizedBlockNode isInlinedLoop ifTrue: [ tempNames do: [ :tempName | methodBuilder pushLiteral: nil. methodBuilder storeTemp: tempName. methodBuilder popTop. ]]. self visitNode: anOptimizedBlockNode body.! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitLiteralArrayNode: aRBLiteralArrayNode methodBuilder pushLiteral: aRBLiteralArrayNode value. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitLiteralNode: aLiteralNode methodBuilder pushLiteral: aLiteralNode value. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitMessageNode: aMessageNode aMessageNode isInlined ifTrue: [ methodBuilder addLiteral: aMessageNode selector. "so searching for senders will work" ^self perform: ('emit', aMessageNode selector asOneArgSelector capitalized) asSymbol with: aMessageNode]. ^ self emitMessageNode: aMessageNode! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitMethodNode: aMethodNode methodBuilder addTemps: aMethodNode scope tempVarNames. methodBuilder properties: aMethodNode properties. methodBuilder primitiveNode: aMethodNode primitiveFromPragma. aMethodNode pragmas do: [:each | self visitPragmaNode: each]. methodBuilder numArgs: aMethodNode arguments size. aMethodNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aMethodNode scope tempVectorName withVars: (aMethodNode scope tempVector collect: [:each| each name]) asArray. ]. (aMethodNode hasProperty: #needsLongForm) ifTrue: [ methodBuilder forceLongForm]. effectTranslator visitNode: aMethodNode body. aMethodNode body lastIsReturn ifFalse: [methodBuilder pushReceiver; returnTop]! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'JorgeRessia 5/6/2010 10:00'! visitNode: aNode methodBuilder mapToNode: aNode. super visitNode: aNode. methodBuilder popMap. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitPragmaNode: aPragmaNode methodBuilder addPragma: (Pragma keyword: aPragmaNode selector arguments: (aPragmaNode arguments collect: [:each | each value]) asArray). aPragmaNode isPrimitiveError ifTrue: [ methodBuilder storeTemp: aPragmaNode arguments last value]. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitReturnNode: aReturnNode valueTranslator visitNode: aReturnNode value. methodBuilder returnTop. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitSequenceNode: aSequenceNode | statements | statements := aSequenceNode statements. statements ifEmpty: [ aSequenceNode parent isBlock ifTrue:[ methodBuilder pushLiteral: nil]. ^self]. statements allButLastDo: [:each | effectTranslator visitNode: each]. (aSequenceNode parent isBlock ifTrue: [valueTranslator] ifFalse: [effectTranslator]) visitNode: statements last. ! ! !OCASTTranslator methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitVariableNode: aVariableNode aVariableNode ocBinding emitValue: methodBuilder ! ! !OCASTTranslatorForEffect commentStamp: 'ajh 3/24/2003 22:20' prior: 34714146! I override some methods in my super to generate instructions for effect only.! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 12/12/2012 16:12'! emitAnd: aMessageNode super emitAnd: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfFalse: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: true. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #else. ! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenler 12/11/2012 14:52'! emitIfFalseIfTrue: aMessageNode super emitIfFalseIfTrue: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenler 12/11/2012 14:56'! emitIfNilIfNotNil: aMessageNode super emitIfNilIfNotNil: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first ocBinding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #end if: true. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTarget: #end. ! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenler 12/11/2012 14:56'! emitIfNotNilIfNil: aMessageNode super emitIfNotNilIfNil: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfTrue: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #else.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenler 12/11/2012 14:51'! emitIfTrueIfFalse: aMessageNode super emitIfTrueIfFalse: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 10/14/2010 15:50'! emitMessageNode: aMessageNode super emitMessageNode: aMessageNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 12/12/2012 16:12'! emitOr: aMessageNode super emitOr: aMessageNode. methodBuilder popTop.! ! !OCASTTranslatorForEffect methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitArrayNode: anArrayNode super visitArrayNode: anArrayNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitAssignmentNode: anAssignmentNode super visitAssignmentNode: anAssignmentNode . methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitBlockNode: aBlockNode super visitBlockNode: aBlockNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitCascadeNode: aCascadeNode super visitCascadeNode: aCascadeNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitInlinedBlockNode: anOptimizedBlockNode super visitInlinedBlockNode: anOptimizedBlockNode. methodBuilder popTop.! ! !OCASTTranslatorForValue commentStamp: 'ajh 3/24/2003 22:20' prior: 34714296! I override some methods in my super to generate instructions for effect and value only.! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfFalse: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #false if: false. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #false. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'MarcusDenker 4/11/2013 15:12'! emitIfTrue: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. valueTranslator visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'MarcusDenker 6/23/2012 12:09'! emitWhileFalse: aMessageNode super emitWhileFalse: aMessageNode. methodBuilder pushLiteral: nil. ! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'MarcusDenker 6/23/2012 12:09'! emitWhileTrue: aMessageNode super emitWhileTrue: aMessageNode. methodBuilder pushLiteral: nil. ! ! !OCLiteralList commentStamp: 'ajh 3/25/2003 00:31' prior: 34714446! Holds a unique ordered collection of literals! !OCLiteralList methodsFor: 'adding' stamp: 'ajh 3/6/2003 18:00'! addLast: object "Only add if not already in list" (equalitySet includes: object) ifTrue: [^ object]. equalitySet add: object. super addLast: object. ^ object ! ! !OCLiteralList methodsFor: 'accessing' stamp: 'ajh 1/21/2003 12:21'! indexOf: anElement startingAt: start ifAbsent: exceptionBlock start to: self size do: [:index | ((self at: index) literalEqual: anElement) ifTrue: [^ index]]. ^ exceptionBlock value! ! !OCLiteralList methodsFor: 'private' stamp: 'MarcusDenker 8/21/2010 13:05'! setCollection: anArray super setCollection: anArray. equalitySet := OCLiteralSet new: anArray size. ! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 12/14/2012 10:52'! classBinding: aBinding "set the class binding in the last literal to aClass" self numLiterals > 0 ifTrue: [ self literalAt: self numLiterals put: aBinding] ! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/16/2012 16:05'! ir ^ IRBytecodeDecompiler new decompile: self! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 13:05'! primitiveNode | primNode n | primNode := OCPrimitiveNode new num: (n := self primitive). (n = 117 or: [n = 120]) ifTrue: [ primNode spec: (self literalAt: 1)]. ^ primNode! ! !Symbol methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 6/21/2012 11:18'! asOneArgSelector ^ String streamContents: [:str| | parts | parts := (self findTokens: ':)'). str nextPutAll: parts first. parts allButFirst do: [:each | str nextPutAll: each capitalized] . str nextPutAll: ':']! ! !SequenceableCollection methodsFor: '*opalcompiler-core' stamp: 'kwl 6/25/2006 19:07'! literalIndexOf: anElement ifAbsent: exceptionBlock "Answer the index of anElement within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." 1 to: self size do: [:i | ((self at: i) literalEqual: anElement) ifTrue: [^ i]]. ^ exceptionBlock value! ! !RBReturnNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 1/29/2013 14:22'! asSequenceNode ^RBSequenceNode statements: {self} ! ! !TPureBehavior methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/21/2010 18:41'! parseScope ^OCClassScope for: self! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/15/2012 16:32'! isArg ^self ocBinding isArg! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'jorgeRessia 11/20/2009 16:40'! isGlobal ^self binding isGlobal! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/15/2012 16:32'! isInstance ^self ocBinding isInstance! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/15/2012 16:32'! isTemp ^self ocBinding isTemp! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/15/2012 16:29'! ocBinding ^self propertyAt: #binding ifAbsent: [nil].! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 11/15/2012 16:29'! ocBinding: aSemVar aSemVar ifNil: [^self removeProperty: #binding ifAbsent: []]. self propertyAt: #binding put: aSemVar.! ! !DebuggerMethodMapOpal class methodsFor: 'instance creation' stamp: 'MarcusDenker 11/16/2012 12:11'! forMethod: aMethod "" "Answer a DebuggerMethodMap suitable for debugging activations of aMethod" ^self new forMethod: aMethod ! ! !DebuggerMethodMapOpal methodsFor: 'initialize-release' stamp: 'MarcusDenker 12/17/2012 13:33'! forMethod: aCompiledMethod methodNode := aCompiledMethod parseTree.! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 12/17/2012 17:20'! namedTempAt: index in: aContext "Answer the value of the temp at index in aContext where index is relative to the array of temp names answered by tempNamesForContext:" | name | name := (self tempNamesForContext: aContext) at: index. ^self tempNamed: name in: aContext.! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 12/17/2012 17:21'! namedTempAt: index put: aValue in: aContext "Assign the value of the temp at index in aContext where index is relative to the array of temp names answered by tempNamesForContext:. If the value is a copied value we also need to set it along the lexical chain." | name | name := (self tempNamesForContext: aContext) at: index. ^self tempNamed: name in: aContext put: aValue.! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 1/24/2013 14:00'! pcFor: aPC when: contextIsActive "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" ^contextIsActive ifTrue: [aPC] ifFalse: [aPC - 1]! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 1/24/2013 14:12'! rangeForPC: aPC "return the debug highlight for aPC" ^self rangeForPC: aPC contextIsActiveContext: false ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 1/24/2013 13:28'! rangeForPC: aPC contextIsActiveContext: contextIsActive "return the debug highlight for aPC" | pc | pc := self pcFor: aPC when: contextIsActive. ^(methodNode ir instructionForPC: pc) sourceNode debugHighlightRange ! ! !DebuggerMethodMapOpal methodsFor: 'private' stamp: 'MarcusDenker 4/10/2013 15:15'! scopeForContext: aContext "return the variable scope of the context" | blockSequenceStart ir irInstr | (ir := methodNode ir) generate. irInstr := aContext isExecutingBlock ifTrue: [ blockSequenceStart := aContext startpc + aContext numTemps - aContext closure numCopiedValues - aContext closure numArgs. ir blockInstructionForPC: blockSequenceStart. ] ifFalse: [ ir]. ^irInstr sourceNode scope! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 12/18/2012 15:22'! tempNamed: name in: aContext "Answer the value of the temp with name in aContext" | scope var | scope := self scopeForContext: aContext. var := scope lookupVar: name. ^var readFromContext: aContext scope: scope. ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 12/18/2012 15:23'! tempNamed: name in: aContext put: aValue "Assign the value of the temp with name in aContext If the value is a copied value we also need to set it along the lexical chain." | scope var | scope := self scopeForContext: aContext. var := scope lookupVar: name. ^var writeFromContext: aContext scope: scope value: aValue. ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 12/18/2012 15:22'! tempNamesForContext: aContext "Answer an Array of all the temp names in scope in aContext starting with the home's first local (the first argument or first temporary if no arguments)." ^(self scopeForContext: aContext) allTempNames.! ! !IRBuilder commentStamp: '' prior: 34714543! I provide a simple interface for constructing an IRMethod. For example, to create an ir method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in BytecodeGenerator), do: IRBuilder new numArgs: 1; addTemps: #(a z); pushReceiver; pushInstVar: 1; pushTemp: #a; send: #>; jumpAheadTo: #else if: false; pushLiteral: 'yes'; returnTop; jumpAheadTarget: #else; pushLiteral: 'no'; returnTop; ir Sending #compiledMethod to an ir method will generate its compiledMethod. Sending #methodNode to it will decompile to its parse tree. ! !IRBuilder methodsFor: 'private' stamp: 'ToonVerwaest 3/31/2011 13:17'! add: instr "Associate instr with current parse node or byte range" instr sourceNode: self sourceNode. instr bytecodeIndex: self sourceByteIndex. ^ currentSequence add: instr! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 10/12/2010 12:19'! addBlockReturnTopIfRequired "If the current sequence is empty this means that there was a returntop before then since there is no more stmts we do not need a blockreturntop" "cant we optimize this away later? Then the frontend can always just add a return...." | predecessors | self flag: 'cant we do this automatically.... frontend always adds return, we ignore it if there is a ret method before?'. predecessors := ir predecessorsOf: currentSequence. (currentSequence isEmpty and: [(predecessors isEmpty) or: [((ir predecessorsOf: currentSequence) anySatisfy: [:each | (each last isBlockReturnTop not) and: [(each last isReturn) or: [(each size > 1) and: [(each at: each size -1) isReturn] ]]])] ]) ifTrue: [self popScope] ifFalse: [self blockReturnTop ]! ! !IRBuilder methodsFor: 'decompiling' stamp: 'ajh 6/22/2003 14:44'! addJumpBackTarget: label to: sequence (jumpBackTargetStacks at: label ifAbsentPut: [OrderedCollection new]) addLast: sequence! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 5/13/2011 13:40'! addLiteral: aLiteral "Add this literal at the end of the literal array if there is space left" ir addAdditionalLiteral: aLiteral.! ! !IRBuilder methodsFor: 'initialize' stamp: 'JorgeRessia 5/6/2010 11:04'! addPragma: aPragma ^ir addPragma: aPragma! ! !IRBuilder methodsFor: 'initialize' stamp: 'jb 4/2/2010 11:32'! addTemp: tempKey self addTemps: {tempKey}! ! !IRBuilder methodsFor: 'initialize' stamp: 'JorgeRessia 9/23/2010 18:06'! addTemps: newKeys | i offset | offset := self currentScope tempMap size. i := 1. newKeys do: [:key | self currentScope tempMap at: key ifAbsentPut: [offset + i]. i := i + 1. ]. ! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 6/6/2012 13:38'! additionalLiterals: literals "Add this literal at the end of the literal array if there is space left" ir addAdditionalLiterals: literals.! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 12/14/2012 10:43'! blockReturnTop | retInst | retInst := IRInstruction blockReturnTop. self add: retInst. self startNewSequence. retInst successor: currentSequence. self popScope.! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 5/19/2011 13:49'! createTempVectorNamed: name withVars: anArray "self addVectorTemps: anArray." self addTemp: name. self add: (IRInstruction createTempVectorNamed: name withVars: anArray). ! ! !IRBuilder methodsFor: 'scopes' stamp: 'MarcusDenker 4/13/2010 14:20'! currentScope ^currentScope top! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 7/4/2011 16:47'! forceLongForm ir forceLongForm: true! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 6/13/2012 14:12'! initialize ir := IRMethod new. jumpAheadStacks := IdentityDictionary new. jumpBackTargetStacks := IdentityDictionary new. sourceMapNodes := OrderedCollection new. "stack" currentScope := Stack new. self pushScope: ir. "Leave an empty sequence up front (guaranteed not to be in loop)" ir startSequence: ((IRSequence orderNumber: 0) method:ir). currentSequence := (IRSequence orderNumber: 1) method:ir. ir startSequence add: (IRJump new destination: currentSequence; bytecodeIndex: sourceMapByteIndex; yourself). ! ! !IRBuilder methodsFor: 'results' stamp: 'ajh 3/10/2003 15:51'! ir ^ ir! ! !IRBuilder methodsFor: 'instructions' stamp: 'ToonVerwaest 3/27/2011 17:17'! jumpAheadTarget: labelSymbol "Pop latest jumpAheadTo: with this labelSymbol and have it point to this new instruction sequence" | jumpInstr | self startNewSequence. jumpInstr := (jumpAheadStacks at: labelSymbol ifAbsent: [ self error: 'Missing jumpAheadTo: ', labelSymbol printString]) removeLast. jumpInstr destination: currentSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'JB 8/1/2010 14:56'! jumpAheadTo: labelSymbol "Jump to the sequence that will be created when jumpAheadTarget: labelSymbol is sent to self. This is and its corresponding target is only good for one use. Other jumpAheadTo: with the same label will be put on a stack and superceed existing ones until its jumpAheadTarget: is called." "jumpAheadTarget: label will pop this and replace destination with its basic block" (jumpAheadStacks at: labelSymbol ifAbsentPut: [OrderedCollection new]) addLast: (self add: IRJump new). self startNewSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'ajh 6/22/2003 14:44'! jumpAheadTo: labelSymbol if: boolean "Conditional jump to the sequence that will be created when jumpAheadTarget: labelSymbol is sent to self. This and its corresponding target is only good for one use. Other jumpAheadTo:... with the same label will be put on a stack and superceed existing ones until its jumpAheadTarget: is called." | instr | "jumpAheadTarget: label will pop this and replace destination with its basic block" (jumpAheadStacks at: labelSymbol ifAbsentPut: [OrderedCollection new]) addLast: (instr := self add: (IRJumpIf new boolean: boolean)). self startNewSequence. instr otherwise: currentSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'ajh 6/22/2003 14:44'! jumpBackTarget: labelSymbol "Remember this basic block for a future jumpBackTo: labelSymbol. Stack up remembered targets with same name and remove them from stack for each jumpBackTo: called with same name." self startNewSequence. (jumpBackTargetStacks at: labelSymbol ifAbsentPut: [OrderedCollection new]) addLast: currentSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/19/2012 13:19'! jumpBackTo: labelSymbol "Pop last remembered position with this label and write an unconditional jump to it" | sequence jump | sequence := (jumpBackTargetStacks at: labelSymbol ifAbsent: [self error: 'Missing jumpBackTarget: ', labelSymbol printString]) removeLast. jump := IRJump new destination: sequence. self add: jump. self startNewSequence. jump successor: currentSequence. ! ! !IRBuilder methodsFor: 'mapping' stamp: 'ajh 3/13/2003 13:17'! mapToByteIndex: index "decompiling" sourceMapByteIndex := index! ! !IRBuilder methodsFor: 'mapping' stamp: 'ajh 6/22/2003 14:45'! mapToNode: object "new instructions will be associated with object" sourceMapNodes addLast: object! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 11/19/2012 17:16'! numArgs: anInteger ir numArgs: anInteger. ir sourceNode: self sourceNode.! ! !IRBuilder methodsFor: 'mapping' stamp: 'ajh 6/22/2003 14:25'! popMap sourceMapNodes removeLast! ! !IRBuilder methodsFor: 'scopes' stamp: 'JorgeRessia 5/20/2010 09:58'! popScope currentScope pop.! ! !IRBuilder methodsFor: 'instructions' stamp: 'ajh 3/10/2003 01:09'! popTop self add: IRInstruction popTop! ! !IRBuilder methodsFor: 'accessing' stamp: 'ajh 3/10/2003 14:10'! primitiveNode: primNode ir primitiveNode: primNode! ! !IRBuilder methodsFor: 'accessing' stamp: 'md 7/10/2005 22:37'! properties: aDict ir properties: aDict! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/15/2012 10:37'! pushClosureCopyCopiedValues: copiedValuesNames args: args jumpTo: aJumpLabel | irInstruction | irInstruction := IRInstruction pushClosureCopyCopiedValues: copiedValuesNames args: args. self add: irInstruction. (jumpAheadStacks at: aJumpLabel ifAbsentPut: [OrderedCollection new]) addLast: irInstruction. self startNewSequence. irInstruction blockSequence: currentSequence. self pushScope: irInstruction. self addTemps: args. self addTemps: copiedValuesNames. ^irInstruction! ! !IRBuilder methodsFor: 'instructions' stamp: 'jre 9/29/2009 15:39'! pushConsArray: size self add: (IRInstruction pushConsArray: size)! ! !IRBuilder methodsFor: 'instructions' stamp: 'ajh 3/10/2003 01:09'! pushDup self add: IRInstruction pushDup! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 16:12'! pushInstVar: index self add: (IRInstruction pushInstVar: index).! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 8/18/2010 19:55'! pushLiteral: object self add: (IRInstruction pushLiteral: object)! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 8/18/2010 19:55'! pushLiteralVariable: object self add: (IRInstruction pushLiteralVariable: object)! ! !IRBuilder methodsFor: 'instructions' stamp: 'jre 9/29/2009 15:39'! pushNewArray: size self add: (IRInstruction pushNewArray: size)! ! !IRBuilder methodsFor: 'instructions' stamp: 'md 4/21/2005 11:38'! pushReceiver self add: (IRInstruction pushReceiver)! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:17'! pushRemoteTemp: name inVector: nameOfVector ^self add: (IRInstruction pushRemoteTemp: name inVectorAt: nameOfVector)! ! !IRBuilder methodsFor: 'scopes' stamp: 'MarcusDenker 8/18/2010 19:55'! pushScope: anIRBlockOrMethod currentScope push: anIRBlockOrMethod! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 12/14/2012 11:51'! pushTemp: aSelector ^ self add: (IRInstruction pushTemp: aSelector)! ! !IRBuilder methodsFor: 'instructions' stamp: 'md 4/21/2005 12:06'! pushThisContext self add: (IRInstruction pushThisContext)! ! !IRBuilder methodsFor: 'instructions' stamp: 'JorgeRessia 5/20/2010 07:25'! returnTop self add: IRInstruction returnTop. self startNewSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:19'! send: selector ^self add: (IRInstruction send: selector)! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:19'! send: selector toSuperOf: behavior ^self add: (IRInstruction send: selector toSuperOf: behavior)! ! !IRBuilder methodsFor: 'mapping' stamp: 'MarcusDenker 8/20/2010 08:07'! sourceByteIndex ^ sourceMapByteIndex! ! !IRBuilder methodsFor: 'mapping' stamp: 'MarcusDenker 11/19/2012 17:14'! sourceNode ^ sourceMapNodes ifEmpty: [nil] ifNotEmpty: [sourceMapNodes last]! ! !IRBuilder methodsFor: 'private' stamp: 'MarcusDenker 6/13/2012 14:13'! startNewSequence "End current instruction sequence and start a new sequence to add instructions to. If ending block just falls through to new block then add an explicit jump to it so they stay linked" | newSequence | currentSequence ifEmpty: [^ self]. "block is still empty, continue using it" newSequence := IRSequence orderNumber: currentSequence orderNumber + 1. newSequence method: ir. currentSequence last isJumpOrReturn ifFalse: [ self add: (IRJump new destination: newSequence)]. self currentScope isPushClosureCopy ifTrue: [self currentScope lastBlockSequence: currentSequence]. currentSequence := newSequence. ! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:18'! storeInstVar: name ^self add: (IRInstruction storeInstVar: name).! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:18'! storeIntoLiteralVariable: name ^self add: (IRInstruction storeIntoLiteralVariable: name)! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:19'! storeRemoteTemp: name inVector: nameOfVector ^self add: (IRInstruction storeRemoteTemp: name inVectorAt: nameOfVector)! ! !IRBuilder methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 14:19'! storeTemp: aSymbol ^self add: (IRInstruction storeTemp: aSymbol)! ! !IRBuilder methodsFor: 'decompiling' stamp: 'ajh 3/21/2003 01:48'! testJumpAheadTarget: label jumpAheadStacks at: label ifPresent: [:stack | [stack isEmpty] whileFalse: [self jumpAheadTarget: label] ]! ! !IRReconstructor methodsFor: 'instructions' stamp: 'MarcusDenker 6/8/2012 13:53'! blockReturnTop self fixPushNilsForTemps. ^ super blockReturnTop! ! !IRReconstructor methodsFor: 'initialize' stamp: 'MarcusDenker 5/19/2011 13:50'! createTempVectorNamed: name withVars: anArray " Don't add the temp yet, we only know it's index at the end of the block or method " "self addVectorTemps: anArray". " Update the byte index to point before the pushing of the new vector " sourceMapByteIndex := sourceMapByteIndex - 2. self add: (IRInstruction createTempVectorNamed: name withVars: anArray)! ! !IRReconstructor methodsFor: 'accessors' stamp: 'MarcusDenker 6/8/2012 15:24'! currentSequence ^currentSequence ! ! !IRReconstructor methodsFor: 'accessors' stamp: 'MarcusDenker 6/8/2012 15:25'! currentSequence: aSeq currentSequence := aSeq! ! !IRReconstructor methodsFor: 'removing' stamp: 'MarcusDenker 6/8/2012 13:53'! fixPushNilsForTemps " There are pushConstant: nil in the beginning of the blocksequence for all of the defined temps. We got these pushConstant: nil in. Now our closure will generate them again, meaning we will double the number of pushConstant: nil in the final block. To avoid this, we strip the ones we got in from the IR. " | blocksequence | blocksequence := self currentScope blockSequence sequence. self currentScope definedTemps do: [ :temp | blocksequence removeFirst ]. ! ! !IRReconstructor methodsFor: 'initialize' stamp: 'ToonVerwaest 3/28/2011 00:05'! initialize temps := Dictionary new. remoteTemps := Dictionary new. closureCopiedValues := Dictionary new. sourceMapByteIndex := 0. super initialize.! ! !IRReconstructor methodsFor: 'testing' stamp: 'MarcusDenker 5/12/2011 13:40'! isLastClosureInstruction | nextJumps | nextJumps := jumpAheadStacks at: sourceMapByteIndex + 1 ifAbsent: [ ^ false ]. ^ nextJumps anySatisfy: [ :anOrigin | anOrigin = self currentScope ]! ! !IRReconstructor methodsFor: 'instructions' stamp: 'MarcusDenker 6/8/2012 13:46'! pushClosureCopyCopiedValues: copiedValuesNames args: args jumpTo: aJumpLabel | anInstruction | anInstruction := super pushClosureCopyCopiedValues: copiedValuesNames args: args jumpTo: aJumpLabel. "remove pushed nils of local temps" anInstruction copiedValues withIndexDo: [ :aValue :index | self rememberReference: anInstruction -> index to: aValue in: closureCopiedValues ]! ! !IRReconstructor methodsFor: 'instructions' stamp: 'ToonVerwaest 3/27/2011 15:18'! pushRemoteTemp: name inVector: nameOfVector | anInstruction | anInstruction := super pushRemoteTemp: name inVector: nameOfVector. self rememberReference: anInstruction to: nameOfVector in: remoteTemps.! ! !IRReconstructor methodsFor: 'instructions' stamp: 'ToonVerwaest 3/27/2011 15:20'! pushTemp: aSelector | anInstruction | anInstruction := super pushTemp: aSelector. self rememberReference: anInstruction to: aSelector in: temps.! ! !IRReconstructor methodsFor: 'remapping' stamp: 'ToonVerwaest 3/27/2011 15:22'! remapTemp: aTemp toRemote: aRemote (temps removeKey: aTemp ifAbsent: [ #() ]) do: [ :tempAccess | tempAccess name: aRemote. self rememberReference: tempAccess to: aRemote in: temps ]. (remoteTemps removeKey: aTemp ifAbsent: [ #() ]) do: [ :tempAccess | tempAccess tempVectorName: aRemote. self rememberReference: tempAccess to: aRemote in: remoteTemps. ]. (closureCopiedValues removeKey: aTemp ifAbsent: [ #() ]) do: [ :aClosureAndIndex | |closure index| closure := aClosureAndIndex key. index := aClosureAndIndex value. closure copiedValues at: index put: aRemote. closure tempMap at: aRemote put: (closure tempMap removeKey: aTemp). self rememberReference: aClosureAndIndex to: aRemote in: closureCopiedValues. ].! ! !IRReconstructor methodsFor: 'remapping' stamp: 'ToonVerwaest 3/27/2011 15:19'! rememberReference: anInstruction to: name in: dictionary (dictionary at: name ifAbsentPut: [ OrderedCollection new ]) add: anInstruction! ! !IRReconstructor methodsFor: 'removing' stamp: 'ToonVerwaest 3/27/2011 18:09'! removeLast: n " Make the address of the instruction be the address of the first removed instruction. " sourceMapByteIndex := sourceMapByteIndex - n. ^ (currentSequence removeLast: n) collect: [ :node | node isTemp ifFalse: [ self error: 'Should only remove temp accesses!!' ]. node name ]! ! !IRReconstructor methodsFor: 'instructions' stamp: 'MarcusDenker 5/19/2011 14:21'! storeRemoteTemp: name inVector: nameOfVector | anInstruction | anInstruction := super storeRemoteTemp: name inVector: nameOfVector. self rememberReference: anInstruction to: nameOfVector in: remoteTemps.! ! !IRReconstructor methodsFor: 'instructions' stamp: 'ToonVerwaest 3/27/2011 15:20'! storeTemp: aSelector | anInstruction | anInstruction := super storeTemp: aSelector. self rememberReference: anInstruction to: aSelector in: temps.! ! !IRBytecodeGenerator commentStamp: 'ajh 5/23/2003 10:59' prior: 34715199! I generate bytecodes in response to 'instructions' messages being sent to me. I rewrite jumps at the end so their jump offsets are correct (see #bytecodes). For example, to create a compiled method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in IRBuilder), do: BytecodeGenerator new numArgs: 1; pushInstVar: 1; pushTemp: 1; send: #>; if: false goto: #else; pushLiteral: 'yes'; returnTop; label: #else; pushLiteral: 'no'; returnTop; compiledMethod You can send #ir to the compiledMethod to decompile to its IRMethod, and you can send #methodNode to either to decompile to its parse tree. ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'MarcusDenker 8/12/2010 13:15'! bytecodeTableFrom: specArray "SpecArray is an array of either (index selector) or (index1 index2 selector)." | contiguous | Bytecodes := IdentityDictionary new: 256. BytecodeTable := Array new: 256. contiguous := 0. specArray do: [ :spec | (spec first) = contiguous ifFalse: [self error: 'Non-contiguous table entry']. spec size = 2 ifTrue: [ Bytecodes at: (spec second) put: (spec first). BytecodeTable at: (spec first) + 1 put: (spec second). contiguous := contiguous + 1. ] ifFalse: [ spec size = 3 ifFalse: [self error: 'bad spec size']. Bytecodes at: spec third put: (spec first to: spec second). spec first to: spec second do: [ :i | BytecodeTable at: i + 1 put: spec third. ]. contiguous := contiguous + spec second - spec first + 1. ]. ]. ^ BytecodeTable! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'ajh 3/6/2003 22:40'! initialize self initializeBytecodeTable. self initializeSpecialSelectors. self initializeSpecialConstants. ! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'MarcusDenker 11/11/2011 15:52'! initializeBytecodeTable "OCBytecodeGenerator initialize" "Defines all the bytecode instructions for the Compiler and the Interpreter. The following bytecode tuple format is: #(bytecode bytecodeSelector) bytecodeSelector is the method in the Interpreter that gets executed for the given bytecode. Common Send selector position within the specialSelectorsArray is hard code in the Interpreter, see senders of Interpreter specialSelector:." ^ self bytecodeTableFrom: #( ( 0 15 pushReceiverVariableBytecode) ( 16 31 pushTemporaryVariableBytecode) ( 32 63 pushLiteralConstantBytecode) ( 64 95 pushLiteralVariableBytecode) ( 96 103 storeAndPopReceiverVariableBytecode) (104 111 storeAndPopTemporaryVariableBytecode) (112 pushReceiverBytecode) (113 pushConstantTrueBytecode) (114 pushConstantFalseBytecode) (115 pushConstantNilBytecode) (116 pushConstantMinusOneBytecode) (117 pushConstantZeroBytecode) (118 pushConstantOneBytecode) (119 pushConstantTwoBytecode) (120 returnReceiver) (121 returnTrue) (122 returnFalse) (123 returnNil) (124 returnTopFromMethod) (125 returnTopFromBlock) (126 unknownBytecode) (127 unknownBytecode) (128 extendedPushBytecode) (129 extendedStoreBytecode) (130 extendedStoreAndPopBytecode) (131 singleExtendedSendBytecode) (132 doubleExtendedDoAnythingBytecode) (133 singleExtendedSuperBytecode) (134 secondExtendedSendBytecode) (135 popStackBytecode) (136 duplicateTopBytecode) (137 pushActiveContextBytecode) "(138 143 experimentalBytecode)" (138 pushConsArray) (139 experimentalBytecode) (140 pushRemoteTempInVectorAt) (141 storeRemoteTempInVectorAt) (142 storePopRemoteTempInVectorAt) (143 PushClosureCopyNumCopiedValuesNuumArgsJumpSize) (144 151 shortUnconditionalJump) (152 159 shortConditionalJump) (160 167 longUnconditionalJump) (168 171 longJumpIfTrue) (172 175 longJumpIfFalse) "176-191 were sendArithmeticSelectorBytecode" (176 bytecodePrimAdd) (177 bytecodePrimSubtract) (178 bytecodePrimLessThan) (179 bytecodePrimGreaterThan) (180 bytecodePrimLessOrEqual) (181 bytecodePrimGreaterOrEqual) (182 bytecodePrimEqual) (183 bytecodePrimNotEqual) (184 bytecodePrimMultiply) (185 bytecodePrimDivide) (186 bytecodePrimMod) (187 bytecodePrimMakePoint) (188 bytecodePrimBitShift) (189 bytecodePrimDiv) (190 bytecodePrimBitAnd) (191 bytecodePrimBitOr) "192-207 were sendCommonSelectorBytecode" (192 bytecodePrimAt) (193 bytecodePrimAtPut) (194 bytecodePrimSize) (195 bytecodePrimNext) (196 bytecodePrimNextPut) (197 bytecodePrimAtEnd) (198 bytecodePrimEquivalent) (199 bytecodePrimClass) (200 bytecodePrimBlockCopy) (201 bytecodePrimValue) (202 bytecodePrimValueWithArg) (203 bytecodePrimDo) (204 bytecodePrimNew) (205 bytecodePrimNewWithArg) (206 bytecodePrimPointX) (207 bytecodePrimPointY) (208 255 sendLiteralSelectorBytecode) ) ! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'ajh 3/6/2003 22:45'! initializeSpecialConstants SpecialConstants := {true. false. nil. -1. 0. 1. 2}! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'ajh 3/6/2003 22:40'! initializeSpecialSelectors "Create a map from specialSelector -> bytecode offset from sendAdd (the first one)" | array | SpecialSelectors := IdentityDictionary new. array := self specialSelectorsArray. "Smalltalk specialObjectsArray at: 24" 1 to: array size by: 2 "skip numArgs" do: [:i | SpecialSelectors at: (array at: i) put: i - 1 / 2]. ! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'ajh 3/15/2003 15:43'! specialConstants ^ SpecialConstants! ! !IRBytecodeGenerator class methodsFor: 'initialize' stamp: 'MarcusDenker 11/11/2011 15:52'! specialSelectorsArray ^ #(#+ 1 #- 1 #< 1 #> 1 #<= 1 #>= 1 #= 1 #~= 1 #* 1 #/ 1 #\\ 1 #@ 1 #bitShift: 1 #// 1 #bitAnd: 1 #bitOr: 1 #at: 1 #at:put: 2 #size 0 #next 0 #nextPut: 1 #atEnd 0 #== 1 nil 0 #blockCopy: 1 #value 0 #value: 1 #do: 1 #new 0 #new: 1 #x 0 #y 0)! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 11/25/2011 11:28'! addLastLiteral: object lastLiteral ifNil: [^ lastLiteral := object]. ((lastLiteral literalEqual: object) or: [ "case of metaclass, they have no unique association" (lastLiteral isKindOf: Association) and: [lastLiteral key=nil]]) ifFalse: [self error: 'there can only be one last literal'].! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'JorgeRessia 5/7/2010 12:20'! addLiteral: object literals add: object. ^ literals identityIndexOf: object! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 4/5/2013 14:10'! addPragma: aPragma properties := properties copyWith: aPragma. ! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2011 13:45'! additionalLiterals: aSet additionalLiterals := aSet. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/19/2012 13:21'! blockReturnTop self nextPut: (Bytecodes at: #returnTopFromBlock). ! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 12/20/2012 17:21'! bytecodes | stream | self updateJumpOffsets. stream := (ByteArray new: 100) writeStream. orderSeq do: [ :seqId | (instrMaps at: seqId) do: [ :assoc | assoc key bytecodeIndex: stream position + assoc value "instr" ]. stream nextPutAll: (seqBytes at: seqId) ]. ^ stream contents! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 4/10/2010 13:56'! closureFrom: fromSeqId to: toSeqId copyNumCopiedValues: numCopied numArgs: numArgs2 | distance from to | from := seqOrder at: fromSeqId. to := seqOrder at: toSeqId ifAbsent: [^ self]. "not done yet" distance := (from + 1 to: to -1 ) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]. distance > 1023 ifTrue: [self error: 'forward jump too big']. self nextPut: (Bytecodes at: #PushClosureCopyNumCopiedValuesNuumArgsJumpSize); nextPut: numArgs2 + (numCopied bitShift: 4); nextPut: (distance bitShift: -8); nextPut: (distance bitAnd: 16rFF). ! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 8/10/2010 12:42'! compiledMethod ^ self compiledMethodWith: CompiledMethodTrailer empty! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 9/3/2012 15:05'! compiledMethodWith: trailer | cm | cm := (CompiledMethod primitive: (self primNum > 0 ifTrue: [self primNum] ifFalse: [self quickMethodPrim]) numArgs: self numArgs numTemps: self numTemps stackSize: self stackFrameSize literals: self literals bytecodes: self bytecodes trailer: trailer). "set the properties of cm according to properties saved" properties ifNotNil: [ cm penultimateLiteral: properties. properties method: cm. properties pragmas do: [:each | each instVarAt: 1 put: cm]. ]. ^cm.! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'MarcusDenker 7/4/2011 16:41'! forceLongForm: aBoolean forceLongForm := aBoolean! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/15/2012 13:36'! from: fromSeqId goto: toSeqId | distance from to | from := seqOrder at: fromSeqId. to := seqOrder at: toSeqId ifAbsent: [^ self]. from + 1 = to ifTrue: [^ self]. "fall through, no jump needed" from < to ifTrue: [ "jump forward" distance := (from + 1 to: to - 1) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]. self jumpForward: distance. ] ifFalse: [ "jump backward" distance := ((to to: from - 1) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]) + bytes size. self jumpBackward: distance. ]. ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/13/2012 13:13'! from: fromSeqId if: bool goto: toSeqId otherwise: otherwiseSeqId | distance from to otherwise | from := seqOrder at: fromSeqId. to := seqOrder at: toSeqId ifAbsent: [^ self jump: 0 if: bool]. "not done yet" otherwise := seqOrder at: otherwiseSeqId ifAbsent: [^ self jump: 0 if: bool]. "not done yet" from < to ifFalse: [self error]. from + 1 = otherwise ifFalse: [self error]. distance := (from + 1 to: to - 1) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]. self jump: distance if: bool. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 13:11'! goto: seqId stacks at: seqId put: (stack linkTo: (stacks at: seqId ifAbsentPut: [nil])). self saveLastJump: (Message selector: #from:goto: arguments: {currentSeqId. seqId}). self from: currentSeqId goto: seqId. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'ajh 5/22/2003 13:26'! if: bool goto: seqId | otherwiseSeqId | otherwiseSeqId := self newDummySeqId. self if: bool goto: seqId otherwise: otherwiseSeqId. self label: otherwiseSeqId. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 13:04'! if: bool goto: seqId1 otherwise: seqId2 stack pop. stacks at: seqId1 put: (stack linkTo: (stacks at: seqId1 ifAbsentPut: [nil])). stacks at: seqId2 put: (stack linkTo: (stacks at: seqId2 ifAbsentPut: [nil])). self saveLastJump: (Message selector: #from:if:goto:otherwise: arguments: {currentSeqId. bool. seqId1. seqId2}). self from: currentSeqId if: bool goto: seqId1 otherwise: seqId2.! ! !IRBytecodeGenerator methodsFor: 'initialize' stamp: 'MarcusDenker 6/13/2012 12:55'! initialize literals := OCLiteralList new. "The following dicts are keyed by sequence id given by client in label: (and gotos)." seqOrder := IdentityDictionary new. "seqId -> seq order num" seqBytes := IdentityDictionary new. "seqId -> seq bytecodes" jumps := IdentityDictionary new. "seqId -> last jump instr" instrMaps := IdentityDictionary new. "seqId -> (clientInstr -> bytecode pos)" stacks := IdentityDictionary new. "seqId -> stackCount" primNum := 0. numArgs := 0. currentSeqNum := 0. orderSeq := OrderedCollection new. "reverse map of seqOrder" additionalLiterals := OCLiteralSet new. forceLongForm := false. "starting label in case one is not provided by client" self label: self newDummySeqId. ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'awe 6/22/2008 12:35'! jump: distance if: condition | hi | distance = 0 ifTrue: [ "jumps to fall through, no-op" ^ self nextPut: (Bytecodes at: #popStackBytecode)]. condition ifTrue: [ hi := distance // 256. hi < 4 ifFalse: [self error: 'true jump too big']. self nextPut: (Bytecodes at: #longJumpIfTrue) first + hi. self nextPut: distance \\ 256. ] ifFalse: [ distance <= 8 ifTrue: [ self nextPut: (Bytecodes at: #shortConditionalJump) first + distance - 1. ] ifFalse: [ hi := distance // 256. hi < 4 ifFalse: [self error: 'false jump too big']. self nextPut: (Bytecodes at: #longJumpIfFalse) first + hi. self nextPut: distance \\ 256. ]. ] ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/12/2012 16:23'! jumpBackward: distance | dist | dist := 1024 - distance - 2. dist < 0 ifTrue: [self error: 'back jump too big']. self nextPut: (Bytecodes at: #longUnconditionalJump) first + (dist // 256). self nextPut: dist \\ 256. ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'ajh 3/24/2003 17:46'! jumpForward: distance distance = 0 ifTrue: [^ self]. "no-op" distance <= 8 ifTrue: [ self nextPut: (Bytecodes at: #shortUnconditionalJump) first + distance - 1. ] ifFalse: [ distance > 1023 ifTrue: [self error: 'forward jump too big']. self nextPut: (Bytecodes at: #longUnconditionalJump) first + (distance // 256) + 4. self nextPut: distance \\ 256. ]. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 7/16/2012 16:06'! label: seqId lastSpecialReturn := nil. currentSeqId := seqId. currentSeqNum := currentSeqNum + 1. seqOrder at: seqId put: currentSeqNum. orderSeq at: currentSeqNum ifAbsentPut: [seqId]. bytes := seqBytes at: seqId ifAbsentPut: [OrderedCollection new]. jumps at: seqId ifAbsentPut: [nil]. instrMap := instrMaps at: seqId ifAbsentPut: [OrderedCollection new]. stack := stacks at: currentSeqId ifAbsentPut: [IRStackCount new] ! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 5/19/2011 14:56'! literals literals := literals asArray. "Put the optimized selectors in literals so as to browse senders more easily" additionalLiterals := additionalLiterals asArray reject: [ :e | literals hasLiteral: e ]. additionalLiterals isEmpty ifFalse: [ "Use one entry per literal if enough room, else make anArray" literals := literals size + additionalLiterals size + 2 > 255 ifTrue: [ literals copyWith: additionalLiterals ] ifFalse: [ literals , additionalLiterals ] ]. (literals anySatisfy: [ :each | each isMethodProperties ]) ifFalse: [ literals := literals copyWith: nil ]. ^ lastLiteral ifNil: [ literals copyWith: nil ] ifNotNil: [ literals copyWith: lastLiteral ]! ! !IRBytecodeGenerator methodsFor: 'mapping' stamp: 'MarcusDenker 12/20/2012 17:23'! mapBytesTo: instr "Associate the current byte offset with instr. We fix this later to have the correct offset, see #bytecodes" instrMap add: instr -> bytes size! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'ajh 5/22/2003 13:28'! newDummySeqId ^ Object new! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'ajh 3/13/2003 13:00'! nextPut: byte bytes add: byte! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'ajh 3/13/2003 18:27'! numArgs ^ numArgs! ! !IRBytecodeGenerator methodsFor: 'initialize' stamp: 'ajh 3/13/2003 18:21'! numArgs: n numArgs := n! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'JorgeRessia 4/14/2010 11:42'! numTemps ^ numberOfTemps! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'MarcusDenker 4/14/2010 15:33'! numTemps: anInteger numberOfTemps := anInteger! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'JorgeRessia 5/19/2010 15:19'! popTop stack pop. self nextPut: (Bytecodes at: #popStackBytecode). ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'JorgeRessia 5/6/2010 14:16'! pragmas: aCollection aCollection do: [:each | self addPragma: each]! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'ajh 3/13/2003 18:27'! primNum ^ primNum! ! !IRBytecodeGenerator methodsFor: 'initialize' stamp: 'JorgeRessia 6/12/2010 09:05'! primitiveNode: aPrimitiveNode literals isEmpty ifFalse: [self error: 'init prim before adding instructions']. aPrimitiveNode spec ifNotNil: [literals add: aPrimitiveNode spec]. primNum := aPrimitiveNode num. ! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'MarcusDenker 8/12/2010 13:12'! properties ^ properties ifNil: [ properties := AdditionalMethodState new].! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'md 7/10/2005 22:21'! properties: propDict properties := propDict.! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/19/2012 15:25'! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs2 to: toSeqId | blockSeqId | blockSeqId := self newDummySeqId. stack pop: numCopied. stacks at: blockSeqId put: (stack linkTo: (stacks at: blockSeqId ifAbsentPut: [nil])). stack push. stacks at: toSeqId put: (stack linkTo: (stacks at: toSeqId ifAbsentPut: [nil])). self saveLastJump: (Message selector: #closureFrom:to:copyNumCopiedValues:numArgs: arguments: {currentSeqId.toSeqId. numCopied. numArgs2.}). self closureFrom: currentSeqId to: toSeqId copyNumCopiedValues: numCopied numArgs: numArgs2. self label: blockSeqId. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/19/2012 10:04'! pushConsArray: size stack push. stack pop: size. (size < 0 or: [size > 127]) ifTrue: [self error: 'The array size is out of range. Should be 0 - 127']. "138 10001010 1kkkkkkk Pop kkkkkkk into: (Array new: kkkkkkk)" self nextPut: (Bytecodes at: #pushConsArray); nextPut: size + 128. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 4/15/2010 11:28'! pushDup stack push. self nextPut: (Bytecodes at: #duplicateTopBytecode). ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 7/4/2011 17:45'! pushInstVar: instVarIndex | interval | stack push. interval := Bytecodes at: #pushReceiverVariableBytecode. (instVarIndex <= interval size and: [forceLongForm not]) ifTrue: [ ^ self nextPut: (interval at: instVarIndex). ]. (instVarIndex <= 64 and: [forceLongForm not]) ifTrue: [ self nextPut: (Bytecodes at: #extendedPushBytecode). ^ self nextPut: (0 "instVar" << 6) + instVarIndex - 1. ]. instVarIndex <= 256 ifFalse: [self error: 'can''t reference more than 256 inst vars']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 2 "pushInstVar" << 5. self nextPut: instVarIndex - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'JorgeRessia 6/12/2010 09:05'! pushLiteral: object | index interval | stack push. (index := SpecialConstants identityIndexOf: object ifAbsent: 0) > 0 ifTrue: [ ^ self nextPut: (Bytecodes at: #pushConstantTrueBytecode) + index - 1]. (index := literals literalIndexOf: object ifAbsent: 0) > 0 ifFalse: [ index := self addLiteral: object]. interval := Bytecodes at: #pushLiteralConstantBytecode. (index <= interval size) ifTrue: [ ^ self nextPut: (interval at: index) ]. index <= 64 ifTrue: [ self nextPut: (Bytecodes at: #extendedPushBytecode). ^ self nextPut: 2 "lit constant" << 6 + index - 1 ]. index > 256 ifTrue: [self error: 'too many literals (>256)']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 3 "lit constant" << 5. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'kwl 6/25/2006 19:58'! pushLiteralVariable: object | index interval | stack push. object isVariableBinding ifFalse: [self error: 'not a literal variable']. (index := literals literalIndexOf: object ifAbsent: 0) > 0 ifFalse: [ index := self addLiteral: object]. interval := Bytecodes at: #pushLiteralVariableBytecode. (index <= interval size) ifTrue: [ ^ self nextPut: (interval at: index) ]. index <= 64 ifTrue: [ self nextPut: (Bytecodes at: #extendedPushBytecode). ^ self nextPut: 3 "literal variable" << 6 + index - 1 ]. index > 256 ifTrue: [self error: 'too many literals (>256)']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 1 "lit variable" << 7. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'jorgeRessia 11/3/2009 16:33'! pushNewArray: size stack push. (size < 0 or: [size > 127]) ifTrue: [self error: 'The array size is out of range. Should be 0 - 127']. "138 10001010 0kkkkkkk Push kkkkkkk into: (Array new: kkkkkkk)" self nextPut: (Bytecodes at: #pushConsArray); nextPut: size. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'JorgeRessia 5/19/2010 13:59'! pushReceiver stack push. self nextPut: (Bytecodes at: #pushReceiverBytecode)! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 11:58'! pushRemoteTemp: tempIndex inVectorAt: tempVectorIndex stack push. (tempIndex >= 0 and: [tempIndex < 256 and: [tempVectorIndex >= 0 and: [tempVectorIndex < 256]]]) ifTrue: ["140 10001100 kkkkkkkk jjjjjjjj Push Temp At kkkkkkkk In Temp Vector At: jjjjjjjj" self nextPut: ( Bytecodes at: #pushRemoteTempInVectorAt); nextPut: tempIndex - 1; nextPut: tempVectorIndex - 1. ^self]. tempIndex >= 256 ifTrue: [^self error: 'remoteTempIndex is out of range 0 to 255']. tempVectorIndex >= 256 ifTrue: [^self error: 'tempVectorIndex is out of range 0 to 255']! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 11:50'! pushTemp: index | interval | stack push. interval := Bytecodes at: #pushTemporaryVariableBytecode. index <= interval size ifTrue: [ ^ self nextPut: (interval at: index). ]. index <= 64 ifFalse: [self error: 'too many temp vars (>64)']. self nextPut: (Bytecodes at: #extendedPushBytecode). self nextPut: (1 "temp" << 6) + index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'jb 3/31/2010 17:05'! pushThisContext stack push. self nextPut: (Bytecodes at: #pushActiveContextBytecode). ! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 7/1/2012 20:55'! quickMethodPrim | index | self numArgs = 0 ifFalse: [^ 0]. lastSpecialReturn ifNil: [^ 0]. (seqBytes size <= 2) ifFalse: [^ 0]. "this is for ruling out the case in which the structure is the same as a quick return but with and invalid special literal." ((literals size = 1) and: [ (SpecialConstants identityIncludes: literals first) not and: [ lastSpecialReturn selector = #returnConstant: ] ] ) ifTrue: [^ 0]. lastSpecialReturn selector == #returnReceiver ifTrue: [^256]. lastSpecialReturn selector == #returnConstant: ifTrue: [^(index := SpecialConstants indexOf: lastSpecialReturn argument) > 0 ifTrue: [256 + index] ifFalse: [0]]. lastSpecialReturn selector == #returnInstVar: ifTrue: [^forceLongForm ifTrue: [0] "when compiling long bytecodes for Contexts, do not do quick return either" ifFalse: [263 + lastSpecialReturn argument]] ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/29/2012 15:28'! returnConstant: constant bytes ifEmpty: [lastSpecialReturn := Message selector: #returnConstant: argument: constant]. constant == true ifTrue: [^self nextPut: (Bytecodes at: #returnTrue)]. constant == false ifTrue: [^self nextPut: (Bytecodes at: #returnFalse)]. constant == nil ifTrue: [^self nextPut: (Bytecodes at: #returnNil)]. self pushLiteral: constant. self returnTop. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/19/2012 13:21'! returnInstVar: index bytes ifEmpty: [ lastSpecialReturn := Message selector: #returnInstVar: argument: index]. self pushInstVar: index. self returnTop. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/15/2012 14:14'! returnReceiver bytes ifEmpty: [ lastSpecialReturn := Message selector: #returnReceiver]. self nextPut: (Bytecodes at: #returnReceiver). ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 6/15/2012 14:14'! returnTop stack pop. self nextPut: (Bytecodes at: #returnTopFromMethod). ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/15/2012 13:42'! saveLastJump: message jumps at: currentSeqId put: {bytes size. message}. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'JorgeRessia 5/19/2010 14:58'! send: selector | index nArgs | nArgs := selector numArgs. stack pop: nArgs. SpecialSelectors at: selector ifPresent: [:i | ^ self nextPut: (Bytecodes at: #bytecodePrimAdd) + i]. index := self addLiteral: selector. (index <= 16 and: [nArgs <= 2]) ifTrue: [ "short send" ^ self nextPut: (Bytecodes at: #sendLiteralSelectorBytecode) first + (nArgs * 16) + index - 1 ]. (index <= 32 and: [nArgs <= 7]) ifTrue: [ "extended (2-byte) send" self nextPut: (Bytecodes at: #singleExtendedSendBytecode). ^ self nextPut: nArgs * 32 + index - 1 ]. (index <= 64 and: [nArgs <= 3]) ifTrue: [ "new extended (2-byte)" self nextPut: (Bytecodes at: #secondExtendedSendBytecode). ^ self nextPut: nArgs * 64 + index - 1 ]. "long (3-byte) send" self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: nArgs. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'md 2/27/2006 17:03'! send: selector toSuperOf: behavior | index nArgs | nArgs := selector numArgs. stack pop: nArgs. self addLastLiteral: behavior binding. index := self addLiteral: selector. (index <= 32 and: [nArgs <= 7]) ifTrue: [ "extended (2-byte) send" self nextPut: (Bytecodes at: #singleExtendedSuperBytecode). ^ self nextPut: nArgs * 32 + index - 1 ]. "long (3-byte) send" self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 1 << 5 "super" + nArgs. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 6/13/2012 11:33'! stackFrameSize ^ (stacks collect: [:s | s length]) max! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 7/4/2011 16:52'! storeInstVar: index (index <= 64 and: [forceLongForm not]) ifTrue: [ self nextPut: (Bytecodes at: #extendedStoreBytecode). ^ self nextPut: (0 "instVar" << 6) + index - 1. ]. index <= 256 ifFalse: [self error: 'can''t reference more than 256 inst vars']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 5 "storeInstVar" << 5. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'md 10/4/2005 17:42'! storeIntoLiteralVariable: object | index | index := self addLiteral: object. index <= 64 ifTrue: [ self nextPut: (Bytecodes at: #extendedStoreBytecode). ^ self nextPut: (3 "instVar" << 6) + index - 1. ]. index <= 256 ifFalse: [self error: 'can''t reference more than 256 inst vars']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 7 "storeLiteralVar" << 5. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 11/11/2011 16:47'! storePopInstVar: index | interval | stack pop. interval := Bytecodes at: #storeAndPopReceiverVariableBytecode. (index <= interval size and: [forceLongForm not]) ifTrue: [ ^ self nextPut: (interval at: index) ]. (index <= 64 and: [forceLongForm not]) ifTrue: [ self nextPut: (Bytecodes at: #extendedStoreAndPopBytecode). ^ self nextPut: (0 "instVar" << 6) + index - 1. ]. index <= 256 ifFalse: [ self error: 'can''t reference more than 256 inst vars']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 6 "storePopInstVar" << 5. self nextPut: index - 1. ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'ms 12/3/2006 20:17'! storePopIntoLiteralVariable: assoc | index | index := self addLiteral: assoc. index <= 64 ifTrue: [ stack pop. self nextPut: (Bytecodes at: #extendedStoreAndPopBytecode). ^ self nextPut: (3 "temp" << 6) + index - 1. ]. index <= 256 ifFalse: [self error: 'can''t reference more than 256 inst vars']. self nextPut: (Bytecodes at: #doubleExtendedDoAnythingBytecode). self nextPut: 7 "storeLiteralVar" << 5. self nextPut: index - 1. self popTop ! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 11:58'! storePopRemoteTemp: tempIndex inVectorAt: tempVectorIndex stack pop. "142 10001110 kkkkkkkk jjjjjjjj Pop and Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj" (tempIndex >= 0 and: [tempIndex < 256 and: [tempVectorIndex >= 0 and: [tempVectorIndex < 256]]]) ifTrue: [self nextPut: ( Bytecodes at: #storePopRemoteTempInVectorAt); nextPut: tempIndex -1; nextPut: tempVectorIndex - 1. ^self]. tempIndex >= 256 ifTrue: [^self error: 'remoteTempIndex out of range 0 to 255']. tempVectorIndex >= 256 ifTrue: [^self error: 'tempVectorIndex out of range range 0 to 255']! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 4/14/2010 14:20'! storePopTemp: index | interval | stack pop. interval := Bytecodes at: #storeAndPopTemporaryVariableBytecode. index <= interval size ifTrue: [ ^ self nextPut: (interval at: index ) ]. index <= 64 ifTrue: [ self nextPut: (Bytecodes at: #extendedStoreAndPopBytecode). ^ self nextPut: (1 "temp" << 6) + index - 1. ]. self error: 'too many temps (>64)'! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 11:58'! storeRemoteTemp: tempIndex inVectorAt: tempVectorIndex "141 10001101 kkkkkkkk jjjjjjjj Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj" (tempIndex >= 0 and: [tempIndex < 256 and: [tempVectorIndex >= 0 and: [tempVectorIndex < 256]]]) ifTrue: [self nextPut: (Bytecodes at: #storeRemoteTempInVectorAt); nextPut: tempIndex - 1; nextPut: tempVectorIndex - 1. ^self]. tempIndex >= 256 ifTrue: [^self error: 'remoteTempIndex out of range 0 to 255']. tempVectorIndex >= 256 ifTrue: [^self error: 'tempVectorIndex out of range 0 to 255']! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 4/14/2010 14:20'! storeTemp: index index <= 64 ifFalse: [self error: 'too many temps (>64)']. self nextPut: (Bytecodes at: #extendedStoreBytecode). self nextPut: (1 "temp" << 6) + index - 1. ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/19/2012 13:20'! updateJump: seqId "Recalculate final jump bytecodes. Return true if jump bytecodes SIZE has changed, otherwise return false" | pair s1 | pair := jumps at: seqId. pair ifNil: [^ false]. "no jump, a return" bytes := seqBytes at: seqId. s1 := bytes size. bytes removeLast: (bytes size - pair first). pair last sendTo: self. ^ s1 ~= bytes size.! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 6/21/2012 16:55'! updateJumpOffsets [ orderSeq inject: false into: [ :changed :seqId | (self updateJump: seqId) | changed ] ] whileTrue! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 13:43'! args | args | args := Array new: numArgs. 1 to: numArgs do: [ :idx | args at: idx put: self -> (idx - 1)]. ^ args! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 14:52'! copiedValues ^ copiedValues! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 14:48'! copiedValues: someCopiedValues copiedValues := someCopiedValues! ! !IRBytecodeScope methodsFor: 'initialize-release' stamp: 'ToonVerwaest 3/27/2011 14:49'! initialize temps := 0. ownTempVectors := OrderedCollection new! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 14:51'! newTempVector: aTempVector at: offset ownTempVectors add: aTempVector. self tempAt: offset! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 13:08'! numArgs ^ numArgs! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 13:45'! numArgs: anInteger numArgs := anInteger. temps := temps max: numArgs! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 14:55'! ownTempVectors ^ ownTempVectors! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 16:21'! tempAt: zeroBasedIndex temps := temps max: zeroBasedIndex + 1. ^ self -> zeroBasedIndex! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 12:37'! tempAt: remoteIndex inRemote: remoteArray ^ remoteIndex! ! !IRBytecodeScope methodsFor: 'accessing' stamp: 'ToonVerwaest 3/31/2011 14:59'! temps | result tempOffset numTemps | tempOffset := copiedValues size + numArgs. numTemps := temps - tempOffset. result := Array new: numTemps. tempOffset := tempOffset - 1. 1 to: numTemps do: [ :idx | result at: idx put: self -> (tempOffset + idx) ]. ownTempVectors do: [ :tempVector | result at: tempVector index - tempOffset put: tempVector ]. ^ result! ! !IRInstruction commentStamp: '' prior: 34715909! I am an instruction in the IR (intermediate representation) language. The IR serves as the intermediary between the Smalltalk language and the bytecode language. It is easier to optimize and translate to/from this language than it is to optimize/translate directly from Smalltalk to bytecodes. The IR is generic and simple consisting of just twelve instructions. They are: goto: labelNum if: boolean goto: labelNum1 otherwise: labelNum2 label: labelNum popTop pushDup pushLiteral: object pushTemp: name blockReturn returnTop send: selector send: selector toSuperOf: behavior storeTemp: name Each instruction is reified as an instance of one of my subclasses and grouped by basic block (IRSequence) into an IRMethod. IRInterpreter visits each instruction in a IRMethod responding to the above instruction messages sent to it. ! !IRAccess commentStamp: '' prior: 34716804! IRAccess models all bytecodes that read or write variables or self/super/thisContext! !IRAccess methodsFor: 'initialization' stamp: 'MarcusDenker 8/13/2010 13:59'! initialize store := false! ! !IRAccess methodsFor: 'testing' stamp: 'md 6/13/2005 12:01'! isRead ^self isStore not! ! !IRAccess methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 13:59'! isStore ^store! ! !IRAccess methodsFor: 'accessing' stamp: 'JorgeRessia 4/29/2010 16:35'! name ^name! ! !IRAccess methodsFor: 'accessing' stamp: 'JorgeRessia 5/1/2010 08:30'! name: aString name := aString! ! !IRAccess methodsFor: 'accessing' stamp: 'MarcusDenker 8/13/2010 14:03'! store: aBool store := aBool! ! !IRInstVarAccess commentStamp: '' prior: 34716946! I am a bytecode accessing an instance variable. As such, I have an index.! !IRInstVarAccess methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:25'! accept: aVisitor ^ aVisitor visitInstVarAccess: self! ! !IRInstVarAccess methodsFor: 'interpret' stamp: 'MarcusDenker 11/21/2012 16:00'! executeOn: interpreter store ifFalse: [interpreter pushInstVar: index ] ifTrue: [interpreter storeInstVar: index ] ! ! !IRInstVarAccess methodsFor: 'accessing' stamp: 'MarcusDenker 11/21/2012 16:00'! index ^index! ! !IRInstVarAccess methodsFor: 'accessing' stamp: 'MarcusDenker 11/21/2012 16:00'! index: anInteger index := anInteger.! ! !IRInstVarAccess methodsFor: 'testing' stamp: 'md 6/13/2005 11:10'! isInstVarAccess ^true.! ! !IRLiteralVariableAccess commentStamp: '' prior: 34717085! LiteralVariables are -> Globals -> Pool access -> Class Var access! !IRLiteralVariableAccess methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:25'! accept: aVisitor ^ aVisitor visitLiteralVariableAccess: self! ! !IRLiteralVariableAccess methodsFor: 'accessing' stamp: 'MarcusDenker 6/6/2012 12:33'! association ^association! ! !IRLiteralVariableAccess methodsFor: 'accessing' stamp: 'md 7/9/2005 21:14'! association: anAssociation association := anAssociation! ! !IRLiteralVariableAccess methodsFor: 'interpret' stamp: 'MarcusDenker 8/13/2010 14:06'! executeOn: interpreter store ifFalse: [interpreter pushLiteralVariable: association] ifTrue: [interpreter storeIntoLiteralVariable: association] ! ! !IRLiteralVariableAccess methodsFor: 'testing' stamp: 'md 10/4/2005 16:45'! isLiteralVariable ^true! ! !IRLiteralVariableAccess methodsFor: 'accessing' stamp: 'MarcusDenker 8/4/2011 14:05'! name ^association key! ! !IRReceiverAccess commentStamp: '' prior: 34717212! I am modelling the push self bytecode! !IRReceiverAccess methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitReceiverAccess: self! ! !IRReceiverAccess methodsFor: 'interpret' stamp: 'JorgeRessia 4/29/2010 17:08'! executeOn: interpreter interpreter pushReceiver.! ! !IRReceiverAccess methodsFor: 'testing' stamp: 'JorgeRessia 4/29/2010 17:06'! isSelf ^true! ! !IRRemoteTempAccess methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitRemoteTempAccess: self! ! !IRRemoteTempAccess methodsFor: 'interpret' stamp: 'MarcusDenker 8/18/2010 15:51'! executeOn: interpreter ^store ifFalse: [interpreter pushRemoteTemp: name inVector: tempVectorName] ifTrue: [interpreter storeRemoteTemp: name inVector: tempVectorName]! ! !IRRemoteTempAccess methodsFor: 'testing' stamp: 'ToonVerwaest 3/26/2011 18:50'! isRemoteTemp ^ true! ! !IRRemoteTempAccess methodsFor: 'accessing' stamp: 'ToonVerwaest 3/26/2011 18:48'! tempVectorName ^ tempVectorName! ! !IRRemoteTempAccess methodsFor: 'accessing' stamp: 'MarcusDenker 8/18/2010 15:31'! tempVectorName: anObject tempVectorName := anObject! ! !IRTempAccess methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitTempAccess: self! ! !IRTempAccess methodsFor: 'interpret' stamp: 'MarcusDenker 8/19/2010 20:12'! executeOn: interpreter store ifFalse: [interpreter pushTemp: name] ifTrue: [interpreter storeTemp: name] ! ! !IRTempAccess methodsFor: 'testing' stamp: 'ToonVerwaest 3/26/2011 18:52'! isRemoteTemp ^ false! ! !IRTempAccess methodsFor: 'testing' stamp: 'md 2/22/2005 11:28'! isTemp ^true.! ! !IRThisContextAccess methodsFor: 'visiting' stamp: 'MarcusDenker 12/14/2012 11:48'! accept: aVisitor ^ aVisitor visitThisContextAccess: self! ! !IRThisContextAccess methodsFor: 'interpret' stamp: 'JorgeRessia 4/29/2010 17:13'! executeOn: interpreter interpreter pushThisContext! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'JorgeRessia 5/6/2010 16:33'! blockReturnTop ^ IRBlockReturnTop new ! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 08:21'! createTempVectorNamed: aTempVectorName withVars: anArray ^ IRTempVector new name: aTempVectorName; vars: anArray; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'jorgeRessia 10/11/2009 19:44'! popTop ^ IRPop new! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/27/2010 13:28'! pushClosureCopyCopiedValues: copiedValues args: arguments ^IRPushClosureCopy new copiedValues: copiedValues; arguments: arguments; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:03'! pushConsArray: aSize ^IRPushArray new size: aSize; cons: true; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/13/2010 13:43'! pushDup ^ IRPushDup new! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 11/21/2012 16:01'! pushInstVar: index ^ IRInstVarAccess new index: index; store: false; yourself! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/13/2010 13:23'! pushLiteral: object ^ IRPushLiteral new literal: object! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:33'! pushLiteralVariable: object ^ IRLiteralVariableAccess new association: object; store: false; yourself ! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:03'! pushNewArray: aSize ^IRPushArray new size: aSize; cons: false; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'JorgeRessia 4/29/2010 17:07'! pushReceiver ^IRReceiverAccess new! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/18/2010 15:32'! pushRemoteTemp: aName inVectorAt: nameOfVector ^ IRRemoteTempAccess new name: aName; tempVectorName: nameOfVector; store: false; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:33'! pushTemp: aName aName = 'self' ifTrue: [self error: 'use pushReceiver']. ^ IRTempAccess new name: aName; store: false; yourself! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'JorgeRessia 4/29/2010 17:16'! pushThisContext ^IRThisContextAccess new! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 4/15/2010 15:22'! returnTop ^ IRReturn new! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'ajh 3/10/2003 01:08'! send: selector ^ IRSend new selector: selector! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/12/2010 14:31'! send: selector toSuperOf: behavior behavior ifNil: [self error: 'super of nil does not exist']. ^ IRSend new selector: selector; superOf: behavior; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 11/21/2012 16:01'! storeInstVar: index ^ IRInstVarAccess new index: index; store: true; yourself. ! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:33'! storeIntoLiteralVariable: object ^ IRLiteralVariableAccess new association: object; store: true; yourself! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/18/2010 15:31'! storeRemoteTemp: aName inVectorAt: nameOfVector ^ IRRemoteTempAccess new name: aName; tempVectorName: nameOfVector; store: true; yourself.! ! !IRInstruction class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/19/2010 15:33'! storeTemp: aName ^ IRTempAccess new name: aName; store: true; yourself ! ! !IRInstruction methodsFor: 'visiting' stamp: 'MarcusDenker 12/14/2012 11:52'! accept: aVisitor aVisitor visit: self ! ! !IRInstruction methodsFor: 'adding' stamp: 'md 7/9/2005 22:41'! addInstructionsAfter: aCollection sequence addInstructions: aCollection after: self.! ! !IRInstruction methodsFor: 'adding' stamp: 'md 7/9/2005 22:41'! addInstructionsBefore: aCollection sequence addInstructions: aCollection before: self.! ! !IRInstruction methodsFor: 'mapping' stamp: 'ajh 3/13/2003 13:07'! bytecodeIndex ^ bytecodeIndex! ! !IRInstruction methodsFor: 'mapping' stamp: 'ajh 3/13/2003 13:14'! bytecodeIndex: index bytecodeIndex := index! ! !IRInstruction methodsFor: 'mapping' stamp: 'md 9/1/2005 21:18'! bytecodeOffset | startpc | startpc := self method compiledMethod initialPC. self bytecodeIndex ifNil: [^startpc]. ^self bytecodeIndex + startpc - 1.! ! !IRInstruction methodsFor: 'replacing' stamp: 'MarcusDenker 8/18/2010 20:10'! delete sequence isNil ifTrue: [self error: 'This node doesn''t have a sequence']. sequence remove: self.! ! !IRInstruction methodsFor: 'interpret'! executeOn: interpreter "Send approriate message to interpreter" self subclassResponsibility! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:07'! isBlockReturnTop ^false ! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:05'! isGoto "is unconditional jump" ^ false ! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/14/2012 11:52'! isIf ^ false ! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 20:11'! isInstVarAccess ^false.! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:07'! isJump "goto or if" ^false ! ! !IRInstruction methodsFor: 'testing' stamp: 'ajh 3/10/2003 16:13'! isJumpOrReturn ^ self isJump or: [self isReturn]! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:05'! isLiteral: valueTest ^ false! ! !IRInstruction methodsFor: 'testing' stamp: 'md 10/4/2005 16:52'! isLiteralVariable ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/14/2012 11:52'! isPop ^ false! ! !IRInstruction methodsFor: 'testing'! isPushClosureCopy ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 14:25'! isRead ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:07'! isReturn ^ false ! ! !IRInstruction methodsFor: 'testing' stamp: 'md 2/26/2005 16:22'! isSelf ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/19/2012 08:05'! isSend ^false.! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 14:26'! isStore ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'md 2/22/2005 11:28'! isTemp ^false! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 12/14/2012 11:51'! isTempVector ^false! ! !IRInstruction methodsFor: 'accessing' stamp: 'md 7/9/2005 22:42'! method ^sequence method.! ! !IRInstruction methodsFor: 'accessing' stamp: 'MarcusDenker 8/8/2011 13:29'! nonBodySuccessorSequences ^self successorSequences! ! !IRInstruction methodsFor: 'replacing' stamp: 'md 10/11/2004 15:56'! replaceNode: aNode withNode: anotherNode self error: 'I don''t store other nodes'! ! !IRInstruction methodsFor: 'replacing' stamp: 'md 7/9/2005 22:41'! replaceWith: aNode sequence isNil ifTrue: [self error: 'This node doesn''t have a sequence']. sequence replaceNode: self withNode: aNode! ! !IRInstruction methodsFor: 'replacing' stamp: 'md 7/9/2005 22:41'! replaceWithInstructions: aCollection sequence isNil ifTrue: [self error: 'This node doesn''t have a sequence']. sequence replaceNode: self withNodes: aCollection! ! !IRInstruction methodsFor: 'accessing' stamp: 'md 7/9/2005 22:38'! sequence ^sequence! ! !IRInstruction methodsFor: 'accessing' stamp: 'md 7/9/2005 22:39'! sequence: aSeq sequence := aSeq! ! !IRInstruction methodsFor: 'mapping' stamp: 'ajh 3/6/2003 14:32'! sourceNode ^ sourceNode ! ! !IRInstruction methodsFor: 'mapping' stamp: 'ajh 3/6/2003 14:32'! sourceNode: parseNode sourceNode := parseNode ! ! !IRInstruction methodsFor: 'accessing' stamp: 'MarcusDenker 12/14/2012 11:51'! successorSequences "sent to last instruction in sequence which is expected to be a jump and return instruction" ^ #()! ! !IRJump commentStamp: 'ajh 3/24/2003 23:56' prior: 34717305! Instruction "goto: labelNum"! !IRJump methodsFor: 'visiting' stamp: 'MarcusDenker 12/14/2012 11:51'! accept: aVisitor ^ aVisitor visitJump: self! ! !IRJump methodsFor: 'accessing' stamp: 'ajh 3/10/2003 23:08'! destination ^ destination! ! !IRJump methodsFor: 'accessing' stamp: 'JorgeRessia 5/19/2010 11:17'! destination: aSequence destination := aSequence! ! !IRJump methodsFor: 'interpret' stamp: 'MarcusDenker 12/14/2012 11:51'! executeOn: interpreter ^ interpreter goto: destination orderNumber! ! !IRJump methodsFor: 'testing' stamp: 'MarcusDenker 12/14/2012 11:51'! isGoto "is unconditional jump" ^ true! ! !IRJump methodsFor: 'testing' stamp: 'ajh 3/11/2003 00:22'! isJump "goto or if" ^ true! ! !IRJump methodsFor: 'accessing' stamp: 'MarcusDenker 6/19/2012 13:18'! successor: succ successor := succ! ! !IRJump methodsFor: 'accessing' stamp: 'MarcusDenker 6/19/2012 13:57'! successorSequences ^ {destination. successor} ! ! !IRJumpIf commentStamp: 'ajh 3/24/2003 23:56' prior: 34717391! Instruction "if: boolean goto: labelNum1 otherwise: labelNum2"! !IRJumpIf methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitJumpIf: self! ! !IRJumpIf methodsFor: 'acessing' stamp: 'ajh 3/10/2003 00:43'! boolean ^ boolean! ! !IRJumpIf methodsFor: 'acessing' stamp: 'ajh 3/10/2003 00:43'! boolean: bool boolean := bool! ! !IRJumpIf methodsFor: 'interpret' stamp: 'ajh 3/10/2003 00:47'! executeOn: interpreter ^ interpreter if: boolean goto: destination orderNumber otherwise: otherwise orderNumber! ! !IRJumpIf methodsFor: 'testing' stamp: 'ajh 3/11/2003 00:19'! isGoto "is unconditional jump" ^ false! ! !IRJumpIf methodsFor: 'testing' stamp: 'ajh 3/11/2003 00:21'! isIf ^ true! ! !IRJumpIf methodsFor: 'acessing' stamp: 'MarcusDenker 8/8/2011 13:30'! nonBodySuccessorSequences ^ {destination}! ! !IRJumpIf methodsFor: 'acessing' stamp: 'ajh 3/10/2003 00:43'! otherwise ^ otherwise! ! !IRJumpIf methodsFor: 'acessing' stamp: 'pmm 2/2/2007 18:05'! otherwise: aSequence otherwise := aSequence! ! !IRJumpIf methodsFor: 'acessing' stamp: 'ajh 3/11/2003 00:02'! successorSequences ^ {destination. otherwise}! ! !IRPushClosureCopy methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitPushClosureCopy: self! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 13:28'! arguments ^arguments! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 13:28'! arguments: anArray arguments := anArray! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'jb 3/29/2010 13:38'! blockSequence ^blockSequence! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'jb 4/2/2010 16:27'! blockSequence: anIRSequence blockSequence := anIRSequence! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'ToonVerwaest 3/26/2011 19:26'! copiedValues ^ copiedValues! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 15:00'! copiedValues: anArray copiedValues := anArray.! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 10/14/2010 15:27'! definedTemps ^self tempMap keys copyWithoutAll: (arguments, copiedValues).! ! !IRPushClosureCopy methodsFor: 'interpret' stamp: 'MarcusDenker 8/27/2010 13:32'! executeOn: interpreter ^interpreter pushClosureCopyCopiedValues: copiedValues args: arguments jumpTo: destination! ! !IRPushClosureCopy methodsFor: 'testing' stamp: 'ToonVerwaest 3/27/2011 18:25'! hasTempVector: aSymbol blockSequence withAllSuccessorsDo: [ :seq | (seq hasTempVector: aSymbol) ifTrue: [ ^ true ]. seq == lastBlockSequence ifTrue: [ ^ false ]]. ^false! ! !IRPushClosureCopy methodsFor: 'scoping' stamp: 'MarcusDenker 8/18/2010 14:55'! indexForVarNamed: aName ^tempMap at: aName! ! !IRPushClosureCopy methodsFor: 'initializing' stamp: 'MarcusDenker 5/19/2011 14:55'! initialize super initialize. tempMap := Dictionary new. ! ! !IRPushClosureCopy methodsFor: 'testing' stamp: 'JorgeRessia 12/25/2009 20:44'! isPushClosureCopy ^true! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'JorgeRessia 5/19/2010 11:23'! lastBlockSequence ^lastBlockSequence! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'JorgeRessia 5/19/2010 11:23'! lastBlockSequence: aSequence lastBlockSequence := aSequence! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 8/8/2011 13:30'! nonBodySuccessorSequences ^ {destination}! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'jorgeRessia 10/1/2009 16:31'! numArgs ^numArgs! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 15:00'! numArgs: aSmallInteger numArgs := aSmallInteger! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'jb 3/31/2010 11:32'! successorSequences ^ {destination. blockSequence} ! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 4/13/2010 14:52'! tempKeys ^tempMap keys ! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'jb 8/26/2010 17:01'! tempMap ^tempMap! ! !IRPushClosureCopy methodsFor: 'testing' stamp: 'MarcusDenker 8/19/2010 10:34'! tempVectorName self blockSequence do:[:irNode | irNode isTempVector ifTrue:[^irNode name]]. ^nil.! ! !IRPushClosureCopy methodsFor: 'accessing' stamp: 'MarcusDenker 12/20/2012 14:22'! tempVectorNamed: aName (self hasTempVector: aName) ifFalse: [^nil]. ^blockSequence tempVectorNamed: aName.! ! !IRPop commentStamp: 'ajh 3/24/2003 23:57' prior: 34717508! Instruction "popTop"! !IRPop methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitPop: self! ! !IRPop methodsFor: 'interpret' stamp: 'jb 3/31/2010 15:42'! executeOn: interpreter ^ interpreter popTop! ! !IRPop methodsFor: 'testing' stamp: 'ms 7/10/2007 14:12'! isPop ^true! ! !IRPushArray methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:24'! accept: aVisitor ^ aVisitor visitPushArray: self! ! !IRPushArray methodsFor: 'initializing' stamp: 'MarcusDenker 8/13/2010 13:33'! cons: aBool cons := aBool.! ! !IRPushArray methodsFor: 'initializing' stamp: 'MarcusDenker 8/13/2010 13:40'! executeOn: interpreter ^cons ifFalse: [interpreter pushNewArray: size] ifTrue: [interpreter pushConsArray: size]! ! !IRPushArray methodsFor: 'initializing' stamp: 'MarcusDenker 8/13/2010 13:31'! initialize size := 0. cons := false. ! ! !IRPushArray methodsFor: 'initializing' stamp: 'MarcusDenker 8/13/2010 13:32'! size: aSmallInteger size := aSmallInteger! ! !IRPushDup commentStamp: 'ajh 3/24/2003 23:56' prior: 34717587! Instruction "pushDup"! !IRPushDup methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitPushDup: self! ! !IRPushDup methodsFor: 'interpret' stamp: 'ajh 3/10/2003 00:46'! executeOn: interpreter ^ interpreter pushDup! ! !IRPushLiteral commentStamp: 'ajh 3/24/2003 23:56' prior: 34717671! Instruction "pushLiteral: object"! !IRPushLiteral methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitPushLiteral: self! ! !IRPushLiteral methodsFor: 'interpret' stamp: 'ToonVerwaest 3/26/2011 17:52'! executeOn: interpreter interpreter pushLiteral: literal! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 13:24'! isLiteral ^ true! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 13:26'! isLiteral: valueTest ^ valueTest value: literal! ! !IRPushLiteral methodsFor: 'accessing' stamp: 'MarcusDenker 8/13/2010 13:23'! literal ^ literal! ! !IRPushLiteral methodsFor: 'accessing' stamp: 'MarcusDenker 8/13/2010 13:23'! literal: object literal := object! ! !IRReturn commentStamp: '' prior: 34717755! Instruction "returnTop"! !IRBlockReturnTop methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitBlockReturnTop: self! ! !IRBlockReturnTop methodsFor: 'interpret' stamp: 'md 10/8/2004 16:04'! executeOn: interpreter interpreter blockReturnTop.! ! !IRBlockReturnTop methodsFor: 'testing' stamp: 'md 10/8/2004 16:04'! isBlockReturnTop ^true.! ! !IRBlockReturnTop methodsFor: 'accessing' stamp: 'MarcusDenker 6/19/2012 13:50'! successor: anObject successor := anObject. ! ! !IRBlockReturnTop methodsFor: 'accessing' stamp: 'MarcusDenker 6/19/2012 13:50'! successorSequences "sent to last instruction in sequence which is expected to be a jump and return instruction" ^ { successor }! ! !IRReturn methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitReturn: self! ! !IRReturn methodsFor: 'interpret' stamp: 'MarcusDenker 4/15/2010 15:21'! executeOn: interpreter interpreter returnTop! ! !IRReturn methodsFor: 'testing' stamp: 'ajh 3/10/2003 16:10'! isReturn ^ true! ! !IRReturn methodsFor: 'accessing' stamp: 'MarcusDenker 8/8/2011 13:47'! nonBodySuccessorSequences ^#()! ! !IRSend commentStamp: 'ajh 3/24/2003 23:57' prior: 34717834! Instruction "send: selector" or "send: selector toSuperOf: behavior"! !IRSend methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitSend: self! ! !IRSend methodsFor: 'interpret' stamp: 'TestRunner 1/6/2010 10:26'! executeOn: interpreter ^ superOf ifNil: [interpreter send: selector] ifNotNil: [interpreter send: selector toSuperOf: superOf]! ! !IRSend methodsFor: 'testing' stamp: 'md 11/12/2004 15:57'! isSend ^true.! ! !IRSend methodsFor: 'testing' stamp: 'md 10/10/2005 17:37'! isSuperSend ^superOf notNil! ! !IRSend methodsFor: 'accessing' stamp: 'md 6/23/2005 13:45'! selector ^selector! ! !IRSend methodsFor: 'accessing' stamp: 'ajh 3/10/2003 00:44'! selector: symbol selector := symbol! ! !IRSend methodsFor: 'accessing' stamp: 'ajh 3/10/2003 00:45'! superOf: behavior superOf := behavior! ! !IRTempVector methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitTempVector: self! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 08:27'! executeOn: interpreter interpreter createTempVectorNamed: name withVars: vars! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 5/19/2011 13:26'! indexForVarNamed: aName ^vars indexOf: aName ! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 01:09'! initialize vars := Dictionary new! ! !IRTempVector methodsFor: 'testing' stamp: 'MarcusDenker 8/19/2010 08:36'! isTempVector ^true! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 01:06'! name ^ name! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 01:05'! name: anObject name := anObject! ! !IRTempVector methodsFor: 'accessing' stamp: 'MarcusDenker 8/19/2010 08:13'! vars: anObject vars := anObject.! ! !IRInterpreter commentStamp: 'ajh 3/24/2003 23:55' prior: 34717965! I visit each IRInstruction in an IRMethod in order. Each instruction sends its instruction message to me upon being visited. See my 'instructions' method category for complete list of instructions. Subclasses should override them.! !IRInterpreter methodsFor: 'instructions' stamp: 'MarcusDenker 12/14/2012 11:52'! blockReturnTop! ! !IRInterpreter methodsFor: 'instructions'! createTempVectorNamed: name withVars: vars! ! !IRInterpreter methodsFor: 'instructions'! goto: seqNum ! ! !IRInterpreter methodsFor: 'instructions'! if: bool goto: seqNum1 otherwise: seqNum2! ! !IRInterpreter methodsFor: 'interpret'! interpret: anIr self interpretAll: anIr allSequences! ! !IRInterpreter methodsFor: 'interpret'! interpretAll: irSequences irSequences do: [:seq | self interpretSequence: seq] ! ! !IRInterpreter methodsFor: 'interpret'! interpretInstruction: irInstruction irInstruction executeOn: self ! ! !IRInterpreter methodsFor: 'interpret' stamp: 'jorgeRessia 11/3/2009 16:40'! interpretSequence: instructionSequence self label: instructionSequence orderNumber. instructionSequence do: [:instr | self interpretInstruction: instr]. ! ! !IRInterpreter methodsFor: 'instructions'! label: seqNum! ! !IRInterpreter methodsFor: 'instructions'! popTop! ! !IRInterpreter methodsFor: 'instructions'! pushClosureCopyCopiedValues: copiedValues args: args jumpTo: labelSymbol ! ! !IRInterpreter methodsFor: 'instructions'! pushConsArray: aSize! ! !IRInterpreter methodsFor: 'instructions'! pushDup ! ! !IRInterpreter methodsFor: 'instructions'! pushInstVar: aSmallInteger ! ! !IRInterpreter methodsFor: 'instructions'! pushLiteral: object ! ! !IRInterpreter methodsFor: 'instructions'! pushLiteralVariable: object ! ! !IRInterpreter methodsFor: 'instructions'! pushNewArray: size! ! !IRInterpreter methodsFor: 'instructions'! pushReceiver ! ! !IRInterpreter methodsFor: 'instructions'! pushRemoteTemp: name inVector: tempVectorName! ! !IRInterpreter methodsFor: 'instructions'! pushTemp: index ! ! !IRInterpreter methodsFor: 'instructions'! pushThisContext! ! !IRInterpreter methodsFor: 'instructions'! returnTop! ! !IRInterpreter methodsFor: 'instructions'! send: selector ! ! !IRInterpreter methodsFor: 'instructions'! send: selector toSuperOf: behavior ! ! !IRInterpreter methodsFor: 'instructions'! storeIntoLiteralVariable: index ! ! !IRInterpreter methodsFor: 'instructions'! storeRemoteTemp: name inVector: tempVectorName! ! !IRInterpreter methodsFor: 'instructions'! storeTemp: index ! ! !IRPrinter commentStamp: 'ajh 3/25/2003 00:22' prior: 34718257! I interpret IRMethod instructions and write them out to a print stream.! !IRPrinter methodsFor: 'instructions' stamp: 'md 8/9/2005 17:08'! blockReturnTop stream nextPutAll: 'blockReturnTop'. ! ! !IRPrinter methodsFor: 'instructions'! createTempVectorNamed: name withVars: vars stream nextPutAll: 'createTempVectorNamed: '. name printOn: stream. stream nextPutAll: ' withVars: '. stream nextPutAll: vars printString.! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:41'! goto: seqNum stream nextPutAll: 'goto: '. seqNum printOn: stream. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:42'! if: bool goto: seqNum1 otherwise: seqNum2 stream nextPutAll: 'if: '. bool printOn: stream. stream nextPutAll: ' goto: '. seqNum1 printOn: stream. stream nextPutAll: ' else: '. seqNum2 printOn: stream. ! ! !IRPrinter methodsFor: 'initialize' stamp: 'ajh 3/9/2003 15:49'! indent: tabs indent := tabs! ! !IRPrinter methodsFor: 'interpret' stamp: 'ajh 3/9/2003 15:48'! interpretInstruction: irInstruction indent timesRepeat: [stream tab]. super interpretInstruction: irInstruction. stream cr. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/11/2003 00:36'! label: seqNum "add tab and cr since this does not get called within interpretInstruction:" stream cr. "extra cr just to space out sequences" indent timesRepeat: [stream tab]. stream nextPutAll: 'label: '. seqNum printOn: stream. stream cr. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:42'! popTop stream nextPutAll: 'popTop'! ! !IRPrinter methodsFor: 'instructions'! pushClosureCopyCopiedValues: copiedValues args: args jumpTo: labelSymbol stream nextPutAll: 'pushClosureCopyCopiedValues: '. stream nextPutAll: copiedValues printString . stream nextPutAll: ' args: '. stream nextPutAll: args printString .! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:31'! pushConsArray: size stream nextPutAll: 'pushConsArray: '. size printOn: stream.! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:42'! pushDup stream nextPutAll: 'pushDup'! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:30'! pushInstVar: index stream nextPutAll: 'pushInstVar: '. index printOn: stream.! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:29'! pushLiteral: object stream nextPutAll: 'pushLiteral: '. object isVariableBinding ifTrue: [^ stream nextPutAll: object key]. object printOn: stream. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'md 8/10/2005 11:28'! pushLiteralVariable: object stream nextPutAll: 'pushLiteralVariable: '. object isVariableBinding ifTrue: [^ stream nextPutAll: object key]. object printOn: stream.! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:31'! pushNewArray: size stream nextPutAll: 'pushNewArray: '. size printOn: stream.! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:26'! pushReceiver stream nextPutAll: 'pushReceiver'! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 12/19/2012 08:07'! pushRemoteTemp: name inVector: tempVectorName stream nextPutAll: 'pushRemoteTemp: '. name printOn: stream.. stream nextPutAll: ' inVector: '. tempVectorName printOn: stream.! ! !IRPrinter methodsFor: 'instructions'! pushTemp: index stream nextPutAll: 'pushTemp: '. index printOn: stream.! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:27'! pushThisContext stream nextPutAll: 'pushThisContext'! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:43'! returnTop stream nextPutAll: 'returnTop'. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:44'! send: selector stream nextPutAll: 'send: '. selector printOn: stream. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ajh 3/9/2003 15:44'! send: selector toSuperOf: behavior stream nextPutAll: 'send: '. selector printOn: stream. stream nextPutAll: ' toSuperOf: '. behavior printOn: stream. ! ! !IRPrinter methodsFor: 'instructions' stamp: 'MarcusDenker 8/22/2010 09:46'! storeIntoLiteralVariable: object stream nextPutAll: 'storeLiteralVariable: '. object isVariableBinding ifTrue: [^ stream nextPutAll: object key]. object printOn: stream.! ! !IRPrinter methodsFor: 'instructions'! storeRemoteTemp: name inVector: tempVectorName stream nextPutAll: 'storeRemoteTemp: '. name printOn: stream.. stream nextPutAll: ' inVector: '. tempVectorName printOn: stream.! ! !IRPrinter methodsFor: 'instructions'! storeTemp: index stream nextPutAll: 'storeTemp: '. index printOn: stream. ! ! !IRPrinter methodsFor: 'initialize' stamp: 'ajh 3/9/2003 15:50'! stream: stringWriteStream stream := stringWriteStream! ! !IRTranslator commentStamp: 'ajh 3/25/2003 00:26' prior: 34718390! I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen). I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.! !IRTranslator methodsFor: 'priv pending' stamp: 'ajh 6/22/2003 14:54'! addPending: message pending addLast: currentInstr -> message! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:25'! blockReturnTop self doPending. self popScope. gen blockReturnTop. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'results' stamp: 'MarcusDenker 6/6/2012 17:55'! compiledMethod ^ gen compiledMethodWith: trailer! ! !IRTranslator methodsFor: 'results' stamp: 'MarcusDenker 8/12/2010 15:08'! compiledMethodWith: aTrailer ^ gen compiledMethodWith: aTrailer! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:26'! createTempVectorNamed: name withVars: vars self doPending. tempVectorStack push: currentInstr. self pushNewArray: vars size. self storeTemp: name. self popTop. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'private' stamp: 'JorgeRessia 4/29/2010 16:57'! currentScope ^currentScope top! ! !IRTranslator methodsFor: 'priv pending' stamp: 'MarcusDenker 12/20/2012 17:29'! doPending "execute pending instructions. we hand the IR instruction over so the backend can fill the bytecode offset. (mapBytesTo:)" | assoc | [pending isEmpty] whileFalse: [ assoc := pending removeFirst. assoc value "message" sendTo: gen. gen mapBytesTo: assoc key ].! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 21:34'! goto: seqNum self doPending. gen goto: seqNum. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'ajh 3/9/2003 22:09'! if: bool goto: seqNum1 otherwise: seqNum2 self doPending. gen if: bool goto: seqNum1 otherwise: seqNum2. ! ! !IRTranslator methodsFor: 'initialize' stamp: 'MarcusDenker 7/16/2012 16:05'! initialize gen := IRBytecodeGenerator new. trailer := CompiledMethodTrailer empty. currentScope := Stack new. tempVectorStack := Stack new. ! ! !IRTranslator methodsFor: 'interpret' stamp: 'MarcusDenker 6/12/2012 21:57'! interpret: anIr self pushScope: anIr. anIr optimize. gen primitiveNode: anIr primitiveNode. gen numArgs: anIr numArgs. gen properties: anIr properties. gen numTemps: (anIr tempMap size). gen additionalLiterals: anIr additionalLiterals. gen forceLongForm: anIr forceLongForm. super interpret: anIr. ! ! !IRTranslator methodsFor: 'interpret' stamp: 'JorgeRessia 6/12/2010 09:31'! interpretAll: irSequences irSequences withIndexDo: [:seq :i | seq orderNumber: i]. super interpretAll: irSequences. ! ! !IRTranslator methodsFor: 'interpret' stamp: 'TestRunner 12/21/2009 10:24'! interpretInstruction: irInstruction currentInstr := irInstruction. super interpretInstruction: irInstruction. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 6/12/2012 21:57'! label: seqNum pending := OrderedCollection new. gen label: seqNum. ! ! !IRTranslator methodsFor: 'priv pending' stamp: 'ajh 6/22/2003 21:06'! pendingSelector pending isEmpty ifTrue: [^ nil]. ^ pending last value "message" selector! ! !IRTranslator methodsFor: 'priv pending' stamp: 'ajh 6/22/2003 21:06'! pendingSelector: selector pending last value "message" setSelector: selector! ! !IRTranslator methodsFor: 'instructions' stamp: 'JorgeRessia 5/20/2010 09:58'! popScope currentScope size = 1 ifFalse: [currentScope pop] ! ! !IRTranslator methodsFor: 'instructions' stamp: 'JorgeRessia 5/20/2010 11:20'! popScopeIfRequired self currentScope isPushClosureCopy ifFalse: [^nil]. (((currentInstr = currentInstr sequence last) or: [currentInstr = (currentInstr sequence at: currentInstr sequence size - 1)]) and: [ currentInstr sequence = self currentScope lastBlockSequence ] ) ifTrue: [self popScope]. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:26'! popTop "if last was storeTemp, storeInstVar storeIntoLiteralVariable then convert to storePopTemp, storePopInstVar storePopIntoLiteralVariable" #storeTemp: == self pendingSelector ifTrue: [ self pendingSelector: #storePopTemp:. ^ self doPending. ]. #storeInstVar: == self pendingSelector ifTrue: [ self pendingSelector: #storePopInstVar:. ^ self doPending.]. #storeIntoLiteralVariable: == self pendingSelector ifTrue:[ self pendingSelector: #storePopIntoLiteralVariable:. ^ self doPending.]. #storeRemoteTemp:inVectorAt: == self pendingSelector ifTrue:[ self pendingSelector: #storePopRemoteTemp:inVectorAt:. ^ self doPending.]. "otherwise do normal pop" self doPending. gen popTop. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'JorgeRessia 6/12/2010 09:05'! pragmas: aCollection gen pragmas: aCollection! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:26'! pushClosureCopyCopiedValues: copiedValues args: args jumpTo: labelSymbol self doPending. copiedValues do: [:name | self pushTemp: name]. gen pushClosureCopyNumCopiedValues: copiedValues size numArgs: args size to: currentInstr destination orderNumber. self pushScope: currentInstr. currentInstr definedTemps do: [ :each | gen pushLiteral: nil ]. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:26'! pushConsArray: aSize self doPending. gen pushConsArray: aSize. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:26'! pushDup self doPending. gen pushDup. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 18:15'! pushInstVar: index self addPending: (Message selector: #pushInstVar: argument: index) ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 18:35'! pushLiteral: object self addPending: (Message selector: #pushLiteral: argument: object)! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 18:15'! pushLiteralVariable: object self addPending: (Message selector: #pushLiteralVariable: argument: object)! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:31'! pushNewArray: aSize self doPending. gen pushNewArray: aSize. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'JorgeRessia 4/29/2010 17:09'! pushReceiver ^ self addPending: (Message selector: #pushReceiver) ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:27'! pushRemoteTemp: name inVector: tempVectorName | tempIndex tempVectorIndex tempVector | tempVector := tempVectorStack detect: [:each | each name = tempVectorName]. tempVectorIndex := tempVector indexForVarNamed: name. tempIndex := self currentScope indexForVarNamed: tempVectorName. self doPending. gen pushRemoteTemp: tempVectorIndex inVectorAt: tempIndex. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 8/21/2010 16:42'! pushScope: anIRBlockOrMethod currentScope push: anIRBlockOrMethod! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:27'! pushTemp: aSymbol self doPending. gen pushTemp: (self currentScope indexForVarNamed: aSymbol). gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 8/12/2010 14:29'! pushThisContext self addPending: (Message selector: #pushThisContext) ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:27'! returnTop #pushReceiver == self pendingSelector ifTrue: [ self pendingSelector: #returnReceiver. self doPending. ^self popScopeIfRequired. ]. #pushLiteral: == self pendingSelector ifTrue: [ self pendingSelector: #returnConstant:. self doPending. ^self popScopeIfRequired. ]. #pushInstVar: == self pendingSelector ifTrue: [ self pendingSelector: #returnInstVar:. self doPending. ^self popScopeIfRequired. ]. self doPending. self popScopeIfRequired. gen returnTop. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:27'! send: selector self doPending. gen send: selector. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 12/20/2012 17:27'! send: selector toSuperOf: behavior self doPending. gen send: selector toSuperOf: behavior. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 18:17'! storeInstVar: index self addPending: (Message selector: #storeInstVar: argument: index)! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/13/2010 18:17'! storeIntoLiteralVariable: assoc self addPending: (Message selector: #storeIntoLiteralVariable: argument: assoc)! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 6/13/2012 13:59'! storeRemoteTemp: name inVector: tempVectorName | tempIndex tempVectorIndex tempVector | tempVector := tempVectorStack detect: [:each | each name = tempVectorName]. tempVectorIndex := tempVector indexForVarNamed: name. tempIndex := self currentScope indexForVarNamed: tempVectorName. self addPending: (Message selector: #storeRemoteTemp:inVectorAt: arguments: (Array with: tempVectorIndex with: tempIndex))! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 8/19/2010 20:23'! storeTemp: aString self addPending: (Message selector: #storeTemp: argument: (self currentScope indexForVarNamed: aString) )! ! !IRTranslator methodsFor: 'initialize' stamp: 'MarcusDenker 8/12/2010 14:39'! trailer: aTrailer trailer := aTrailer! ! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 34718792! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! !IRMethod methodsFor: 'optimizing' stamp: 'ajh 3/10/2003 15:45'! absorbConstantConditionalJumps startSequence absorbConstantConditionalJumps: IdentitySet new! ! !IRMethod methodsFor: 'optimizing' stamp: 'ajh 3/10/2003 15:45'! absorbJumpsToSingleInstrs startSequence absorbJumpToSingleInstr: IdentitySet new! ! !IRMethod methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:23'! accept: aVisitor ^ aVisitor visitMethod: self! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2011 13:42'! addAdditionalLiteral: aLiteral additionalLiterals add: aLiteral! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 6/6/2012 13:38'! addAdditionalLiterals: literals additionalLiterals := literals! ! !IRMethod methodsFor: 'inlining' stamp: 'md 9/11/2005 18:52'! addInstructionsAfter: aCollection | returningSeqs lastInstr | aCollection ifEmpty: [^self]. returningSeqs := self allSequences select: [:each | each last isReturn]. lastInstr := returningSeqs last last. lastInstr addInstructionsBefore: aCollection. ! ! !IRMethod methodsFor: 'inlining' stamp: 'md 7/14/2005 12:31'! addInstructionsBefore: aCollection (self startSequence nextSequence first) addInstructionsBefore: aCollection. ! ! !IRMethod methodsFor: 'accessing' stamp: 'JorgeRessia 5/6/2010 11:07'! addPragma: aPragma pragmas add: aPragma.! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2011 13:56'! additionalLiterals ^additionalLiterals! ! !IRMethod methodsFor: 'enumerating' stamp: 'md 6/10/2005 16:07'! allInstructions " return irNodes as a flat collection " | irInstructions | irInstructions := OrderedCollection new. startSequence withAllSuccessorsDo: [:seq | seq do: [:bc | irInstructions add: bc]]. ^irInstructions! ! !IRMethod methodsFor: 'enumerating' stamp: 'md 6/13/2005 10:41'! allInstructionsMatching: aBlock " return irNodes as a flat collection " | irInstructions | irInstructions := OrderedCollection new. startSequence withAllSuccessorsDo: [:seq | seq do: [:bc | (aBlock value: bc) ifTrue: [irInstructions add: bc]]]. ^irInstructions! ! !IRMethod methodsFor: 'enumerating' stamp: 'jb 3/29/2010 18:04'! allSequences ^ startSequence withAllSuccessors! ! !IRMethod methodsFor: 'enumerating' stamp: 'MarcusDenker 8/13/2010 14:11'! allTempAccessInstructions ^self allInstructionsMatching: [:bc | bc isTemp].! ! !IRMethod methodsFor: 'debugging' stamp: 'MarcusDenker 4/10/2013 15:15'! blockInstructionForPC: aPC "return the IRPushClosureCopy instruction whose body starts at aPC Note: caller needs to take care about the pushNils for temps " | pc | pc := aPC. 4 timesRepeat: [ | result | result := self firstInstructionMatching: [:ir | ir isPushClosureCopy and: [ir blockSequence first bytecodeOffset = pc ]]. result ifNotNil: [^result]. pc := pc + 1. ].! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 8/11/2010 17:06'! compiledMethod ^ self compiledMethodWith: CompiledMethodTrailer empty! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 12/17/2012 14:25'! compiledMethodWith: trailer ^compiledMethod ifNil: [self generate: trailer ] ifNotNil: [compiledMethod]! ! !IRMethod methodsFor: 'decompiling' stamp: 'MarcusDenker 12/14/2012 10:52'! decompile self halt. self flag: 'TBD' "^ IRDecompiler decompile: self"! ! !IRMethod methodsFor: 'enumerating' stamp: 'MarcusDenker 12/13/2012 17:39'! firstInstructionMatching: aBlock " return irNodes as a flat collection " startSequence withAllSuccessorsDo: [:seq | seq do: [:bc | (aBlock value: bc) ifTrue: [^bc]]]. ^nil! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 7/4/2011 16:47'! forceLongForm ^forceLongForm! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 7/4/2011 16:46'! forceLongForm: aBoolean forceLongForm := aBoolean! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 12/17/2012 14:24'! generate ^self generate: CompiledMethodTrailer empty! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 12/17/2012 14:28'! generate: trailer | irTranslator | irTranslator := IRTranslator new trailer: trailer; interpret: self; pragmas: pragmas; yourself. compiledMethod := irTranslator compiledMethod. self sourceNode ifNotNil: [ compiledMethod classBinding: self sourceNode classBinding. compiledMethod selector: self sourceNode selector.]. ^compiledMethod.! ! !IRMethod methodsFor: 'testing' stamp: 'ToonVerwaest 3/27/2011 17:45'! hasTempVector: aSymbol startSequence withAllSuccessorsDo: [ :seq | (seq hasTempVector: aSymbol) ifTrue: [ ^ true ]]. ^ false! ! !IRMethod methodsFor: 'scoping' stamp: 'MarcusDenker 8/18/2010 14:54'! indexForVarNamed: aName ^tempMap at: aName! ! !IRMethod methodsFor: 'initialize' stamp: 'MarcusDenker 6/6/2012 14:21'! initialize primitiveNode := OCPrimitiveNode null. tempMap := Dictionary new. pragmas := OrderedCollection new. additionalLiterals := OCLiteralSet new. numArgs := 0. forceLongForm := false. optimize := false.! ! !IRMethod methodsFor: 'debugging' stamp: 'md 1/17/2013 16:49'! instructionForPC: aPC ^self firstInstructionMatching: [:ir | ir bytecodeOffset = aPC ]! ! !IRMethod methodsFor: 'decompiling' stamp: 'MarcusDenker 8/8/2011 13:42'! instructionsForDecompiling "return all instructions, but skip the block bodies, as the decompiler recurses over blocks" ^startSequence instructionsForDecompiling allButFirst.! ! !IRMethod methodsFor: 'accessing' stamp: 'md 11/15/2004 17:08'! ir ^self.! ! !IRMethod methodsFor: 'testing' stamp: 'JorgeRessia 5/13/2010 11:18'! isPushClosureCopy ^false.! ! !IRMethod methodsFor: 'testing' stamp: 'md 6/21/2005 13:56'! isSend ^false.! ! !IRMethod methodsFor: 'printing' stamp: 'ajh 3/9/2003 15:53'! longPrintOn: stream IRPrinter new indent: 0; stream: stream; interpret: self! ! !IRMethod methodsFor: 'optimizing' stamp: 'md 8/10/2005 11:45'! maxOrderNumber maxOrderNumber ifNil: [ maxOrderNumber := self startSequence orderNumber. self startSequence withAllSuccessorsDo: [:seq | maxOrderNumber := maxOrderNumber max: seq orderNumber]. ]. ^ maxOrderNumber.! ! !IRMethod methodsFor: 'accessing' stamp: 'md 6/16/2005 15:02'! method ^self.! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 8/18/2010 19:03'! numArgs ^ numArgs! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 8/18/2010 19:03'! numArgs: anInteger numArgs := anInteger! ! !IRMethod methodsFor: 'optimizing' stamp: 'MarcusDenker 6/19/2012 13:46'! optimize self removeEmptyStart. optimize ifFalse: [^self]. self absorbJumpsToSingleInstrs. self absorbConstantConditionalJumps. self absorbJumpsToSingleInstrs! ! !IRMethod methodsFor: 'accessing' stamp: 'JorgeRessia 5/20/2010 10:15'! predecessorsOf: aSequence | predecessors | predecessors := OrderedCollection new. self allSequences do: [:each | (each successorSequences includes: aSequence) ifTrue: [predecessors add: each]]. ^predecessors! ! !IRMethod methodsFor: 'accessing' stamp: 'ajh 3/10/2003 18:10'! primitiveNode ^ primitiveNode! ! !IRMethod methodsFor: 'initialize' stamp: 'ajh 3/10/2003 23:08'! primitiveNode: aPrimitiveNode primitiveNode := aPrimitiveNode! ! !IRMethod methodsFor: 'accessing' stamp: 'md 7/10/2005 22:06'! properties ^properties! ! !IRMethod methodsFor: 'accessing' stamp: 'md 7/10/2005 22:06'! properties: propDict properties := propDict.! ! !IRMethod methodsFor: 'optimizing' stamp: 'ajh 3/18/2003 19:25'! removeEmptyStart startSequence size = 1 ifTrue: [ "startSeq is just unconditional jump, forget it" startSequence := startSequence last destination]. ! ! !IRMethod methodsFor: 'inlining' stamp: 'md 9/12/2005 12:00'! removeReturn self allSequences last removeLast.! ! !IRMethod methodsFor: 'inlining' stamp: 'md 7/1/2005 17:34'! removeReturnSelf self removeReturn. self allSequences last removeLast.! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 11/19/2012 17:11'! sourceNode ^sourceNode! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 11/19/2012 17:12'! sourceNode: aNode sourceNode := aNode! ! !IRMethod methodsFor: 'accessing' stamp: 'ajh 3/10/2003 17:53'! startSequence ^ startSequence! ! !IRMethod methodsFor: 'initialize' stamp: 'md 7/9/2005 22:36'! startSequence: irSequence startSequence := irSequence. irSequence method: self.! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 4/13/2010 14:47'! tempKeys ^ tempMap keys! ! !IRMethod methodsFor: 'accessing' stamp: 'JorgeRessia 4/16/2010 11:34'! tempMap ^ tempMap! ! !IRMethod methodsFor: 'accessing' stamp: 'ajh 6/25/2004 10:52'! tempNames "All temp names in context order" | varNames | varNames := OrderedCollection new. self tempKeys do: [:var | | name | name := var asString. "vars are unique but inlined to:do: loop vars may have the same name, so munge the names to make them different" [varNames includes: name] whileTrue: [name := name, 'X']. varNames add: name. ]. ^ varNames asArray! ! !IRMethod methodsFor: 'enumerating' stamp: 'MarcusDenker 12/18/2012 14:28'! tempVectorNamed: aName ^self firstInstructionMatching: [:ir | ir isTempVector and: [ir name = aName ] ]! ! !IRRemoteArray methodsFor: 'enumerating' stamp: 'ToonVerwaest 3/27/2011 12:46'! do: aBlock 1 to: size do: [ :idx | aBlock value: (idx - 1) ]! ! !IRRemoteArray methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 14:59'! index ^ index! ! !IRRemoteArray methodsFor: 'accessing' stamp: 'ToonVerwaest 3/27/2011 12:39'! index: anIndex index := anIndex! ! !IRRemoteArray methodsFor: 'enumerating' stamp: 'MarcusDenker 5/19/2011 14:27'! indexOf: anInteger ^anInteger + 1.! ! !IRRemoteArray methodsFor: 'accessing' stamp: 'ToonVerwaest 3/26/2011 19:15'! size ^ size! ! !IRRemoteArray methodsFor: 'accessing' stamp: 'ToonVerwaest 3/26/2011 19:13'! size: aSize size := aSize! ! !IRSequence class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/13/2012 14:11'! orderNumber: aNumber ^self new orderNumber: aNumber! ! !IRSequence methodsFor: 'copying' stamp: 'dr 9/10/2005 20:59'! , otherCollection ^sequence, otherCollection! ! !IRSequence methodsFor: 'optimizing' stamp: 'MarcusDenker 8/13/2010 13:26'! absorbConstantConditionalJumps: alreadySeen "Collapse sequences that look like: [if] goto s1 ... s1: pushConst: true/false goto s2 s2: if true/false goto s3 else s4 into: [if] goto s3/s4 These sequences are produced by and:/or: messages" | seq bool if | (alreadySeen includes: self) ifTrue: [^ self]. alreadySeen add: self. [(seq := self successorSequences) notEmpty "not return" and: [(seq := seq first "destination") size = 2 and: [(seq first isLiteral: [:obj | (bool := obj) isKindOf: Boolean]) and: [seq last isGoto and: [(if := seq last destination first) isIf]]]] ] whileTrue: [ "absorb" self last destination: (bool == if boolean ifTrue: [if destination] ifFalse: [if otherwise]). ]. self successorSequences do: [:instrs | instrs absorbConstantConditionalJumps: alreadySeen]. ! ! !IRSequence methodsFor: 'optimizing' stamp: 'jb 8/31/2010 16:36'! absorbJumpToSingleInstr: alreadySeen "Collapse jumps to single return instructions into caller" | seqs seq | (alreadySeen includes: self) ifTrue: [^ self]. alreadySeen add: self. [ (seqs := self successorSequences) size = 1 "unconditional jump..." and: [((seq := seqs first) size = 1) "...to single instruction..." and: [seq successorSequences size < 2 and: [self last isBlockReturnTop not and: [((seq sequence size = 1) and: [(seq sequence first isBlockReturnTop) or: [seq sequence first isReturn]]) not]]]]"...but don't collapse conditional jumps so their otherwiseSequences can stay right after them" ] whileTrue: [ "replace goto with single instruction" self removeLast. seq do: [:instr | self add: instr copy]. ]. seqs do: [:instrs | instrs absorbJumpToSingleInstr: alreadySeen]. ! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 11:57'! add: anInstruction sequence add: anInstruction. anInstruction sequence: self. ^anInstruction.! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 11:57'! add: instr after: another sequence add: instr after: another. instr sequence: self. ^instr.! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 11:58'! add: instr before: another sequence add: instr before: another. instr sequence: self. ^instr.! ! !IRSequence methodsFor: 'adding' stamp: 'dr 9/11/2005 15:35'! addAll: aCollection ^sequence addAll: aCollection! ! !IRSequence methodsFor: 'adding' stamp: 'md 9/28/2005 17:55'! addAllFirst: aCollection ^sequence addAllFirst: aCollection.! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 11:58'! addInstructions: aCollection ^aCollection do: [:instr | self add: instr].! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 11:57'! addInstructions: aCollection after: anInstruction ^aCollection reverseDo: [:instr | self add: instr after: anInstruction].! ! !IRSequence methodsFor: 'adding' stamp: 'md 7/14/2005 12:29'! addInstructions: aCollection before: anInstruction aCollection do: [:instr | self add: instr before: anInstruction].! ! !IRSequence methodsFor: 'adding' stamp: 'dr 9/10/2005 20:57'! addLast: anInstruction ^self add: anInstruction.! ! !IRSequence methodsFor: 'accessing' stamp: 'md 9/29/2005 11:25'! after: o ^sequence after: o! ! !IRSequence methodsFor: 'accessing' stamp: 'dr 9/10/2005 21:01'! at: index ^sequence at: index! ! !IRSequence methodsFor: 'enumerating' stamp: 'MarcusDenker 8/19/2010 08:39'! contains: aBlock ^sequence contains: aBlock.! ! !IRSequence methodsFor: 'enumerating' stamp: 'dr 9/10/2005 21:02'! detect: aBlock ^sequence detect: aBlock! ! !IRSequence methodsFor: 'enumerating' stamp: 'md 7/14/2005 12:24'! do: aBlock ^sequence do: aBlock.! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:31'! first ^sequence first! ! !IRSequence methodsFor: 'testing' stamp: 'MarcusDenker 8/19/2010 15:30'! hasTempVector: aSymbol ^sequence anySatisfy: [:irNode | irNode isTempVector and: [irNode name = aSymbol]].! ! !IRSequence methodsFor: 'testing' stamp: 'md 7/14/2005 12:30'! ifEmpty: aBlock ^sequence ifEmpty: aBlock! ! !IRSequence methodsFor: 'testing' stamp: 'md 7/14/2005 12:30'! ifNotEmpty: aBlock ^sequence ifNotEmpty: aBlock! ! !IRSequence methodsFor: 'initialize-release' stamp: 'jb 4/1/2010 13:48'! initialize sequence := OrderedCollection new.! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:58'! instructionsDo: aBlock ^self withAllSuccessorsDo: [:seq | seq do: aBlock].! ! !IRSequence methodsFor: 'successor sequences' stamp: 'MarcusDenker 8/8/2011 13:42'! instructionsForDecompiling | irInstructions | irInstructions := OrderedCollection new. self withNonBodySuccessorsDo: [:seq | seq do: [:bc | irInstructions add: bc]]. ^irInstructions ! ! !IRSequence methodsFor: 'testing' stamp: 'md 7/14/2005 12:23'! isEmpty ^sequence isEmpty! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:23'! last ^sequence last! ! !IRSequence methodsFor: 'printing' stamp: 'md 7/14/2005 11:59'! longPrintOn: stream [IRPrinter new indent: 0; stream: stream; interpretSequence: self ] onDNU: #orderNumber do: [:ex | ex resume: ex receiver]! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:00'! method ^method! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:00'! method: aIRMethod method := aIRMethod! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:58'! nextSequence | sequences i | sequences := self withAllSuccessors. i := sequences findFirst: [:seq | seq orderNumber = self orderNumber]. (i = 0 or: [i = sequences size]) ifTrue: [^ nil]. ^ sequences at: i + 1! ! !IRSequence methodsFor: 'successor sequences' stamp: 'MarcusDenker 8/8/2011 13:31'! nonBodySuccessorSequences sequence isEmpty ifTrue: [^ #()]. ^ sequence last nonBodySuccessorSequences! ! !IRSequence methodsFor: 'testing' stamp: 'dr 9/10/2005 20:55'! notEmpty ^sequence notEmpty! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:00'! orderNumber "Sequences are sorted by this number" ^ orderNumber! ! !IRSequence methodsFor: 'accessing' stamp: 'JorgeRessia 6/19/2010 08:20'! orderNumber: num "Sequences are sorted by this number" orderNumber := num.! ! !IRSequence methodsFor: 'printing' stamp: 'md 7/14/2005 12:00'! printOn: stream stream nextPutAll: 'an '. self class printOn: stream. stream space. stream nextPut: $(. self orderNumber printOn: stream. stream nextPut: $). ! ! !IRSequence methodsFor: 'replacing' stamp: 'md 7/14/2005 12:00'! remove: aNode aNode sequence: nil. sequence remove: aNode ifAbsent: [self error].! ! !IRSequence methodsFor: 'removing' stamp: 'dr 9/10/2005 21:03'! removeFirst ^sequence removeFirst.! ! !IRSequence methodsFor: 'removing' stamp: 'md 7/14/2005 12:25'! removeLast ^sequence removeLast.! ! !IRSequence methodsFor: 'removing' stamp: 'ToonVerwaest 3/26/2011 14:40'! removeLast: n ^sequence removeLast: n.! ! !IRSequence methodsFor: 'replacing' stamp: 'md 7/14/2005 12:01'! replaceNode: aNode withNode: anotherNode self add: anotherNode before: aNode. sequence remove: aNode ifAbsent: [self error].! ! !IRSequence methodsFor: 'replacing' stamp: 'md 7/14/2005 12:01'! replaceNode: aNode withNodes: aCollection self addInstructions: aCollection before: aNode. sequence remove: aNode ifAbsent: [self error].! ! !IRSequence methodsFor: 'enumerating' stamp: 'md 7/14/2005 12:28'! reverseDo: aBlock ^sequence reverseDo: aBlock.! ! !IRSequence methodsFor: 'enumerating' stamp: 'md 7/14/2005 12:28'! select: aBlock ^sequence select: aBlock.! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:32'! sequence ^sequence! ! !IRSequence methodsFor: 'accessing' stamp: 'md 7/14/2005 12:25'! size ^sequence size.! ! !IRSequence methodsFor: 'manipulating' stamp: 'ToonVerwaest 3/27/2011 17:20'! splitAfter: instruction | newSeq index next | next := self nextSequence. next := next ifNil: [self orderNumber + 1] ifNotNil: [(next orderNumber + self orderNumber) / 2]. newSeq := self class new orderNumber: next. newSeq method: self method. "Split after instruction" index := sequence indexOf: instruction. (sequence last: sequence size - index) do: [:instr | newSeq add: instr]. sequence := sequence first: index. self flag: 'The jump inherits the bytecode index from the instruction where it was split. Check if this value is correct.'. self add: (IRJump new destination: newSeq; bytecodeIndex: (instruction bytecodeIndex + 1)). ^ newSeq! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:59'! successorSequences sequence isEmpty ifTrue: [^ #()]. ^ sequence last successorSequences! ! !IRSequence methodsFor: 'accessing' stamp: 'MarcusDenker 12/20/2012 14:21'! tempVectorNamed: aSymbol ^sequence detect: [:irNode | irNode isTempVector and: [irNode name = aSymbol]].! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:59'! withAllSuccessors "Return me and all my successors sorted by sequence orderNumber" | list | list := OrderedCollection new: 20. self withAllSuccessorsDo: [:seq | list add: seq]. ^ list asSortedCollection: [:x :y | x orderNumber <= y orderNumber]! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:59'! withAllSuccessorsDo: block "Iterate over me and all my successors only once" self withAllSuccessorsDo: block alreadySeen: IdentitySet new! ! !IRSequence methodsFor: 'successor sequences' stamp: 'md 7/14/2005 11:59'! withAllSuccessorsDo: block alreadySeen: set "Iterate over me and all my successors only once" (set includes: self) ifTrue: [^ self]. set add: self. block value: self. self successorSequences do: [:seq | seq ifNotNil: [seq withAllSuccessorsDo: block alreadySeen: set]]. ! ! !IRSequence methodsFor: 'successor sequences' stamp: 'MarcusDenker 8/8/2011 13:27'! withNonBodySuccessorsDo: block "Iterate over me and all my successors only once" self withNonBodySuccessorsDo: block alreadySeen: IdentitySet new! ! !IRSequence methodsFor: 'successor sequences' stamp: 'MarcusDenker 8/8/2011 13:28'! withNonBodySuccessorsDo: block alreadySeen: set "Iterate over me and all my successors only once" (set includes: self) ifTrue: [^ self]. set add: self. block value: self. self nonBodySuccessorSequences do: [:seq | seq ifNotNil: [seq withNonBodySuccessorsDo: block alreadySeen: set]]. ! ! !IRStackCount commentStamp: 'ajh 3/25/2003 00:34' prior: 34719186! This keeps track of the stack count for the BytecodeGenerator.! !IRStackCount class methodsFor: 'instance creation' stamp: 'ajh 3/13/2003 01:49'! new ^ super new startAt: 0! ! !IRStackCount class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/13/2010 15:26'! startAt: pos ^ self new startAt: pos! ! !IRStackCount methodsFor: 'comparing' stamp: 'ajh 3/13/2003 01:39'! = other ^ self class == other class and: [start = other start and: [position = other position and: [length = other size]]]! ! !IRStackCount methodsFor: 'comparing' stamp: 'ajh 3/13/2003 01:51'! hash ^ position hash bitXor: (length hash bitXor: start hash)! ! !IRStackCount methodsFor: 'results' stamp: 'ajh 3/13/2003 01:32'! length ^length! ! !IRStackCount methodsFor: 'results' stamp: 'MarcusDenker 6/19/2012 15:13'! linkTo: stackOrNil stackOrNil ifNil: [^ self class startAt: self position]. ^ self position = stackOrNil start ifTrue: [stackOrNil] ifFalse: [self error: 'stack out of sync in bytecode generator']! ! !IRStackCount methodsFor: 'affecting' stamp: 'jorgeRessia 11/3/2009 16:56'! pop ^ self pop: 1! ! !IRStackCount methodsFor: 'affecting' stamp: 'MarcusDenker 6/19/2012 10:07'! pop: n (position := position - n) < 0 ifTrue: [self error: 'stack underflow in bytecode generator']! ! !IRStackCount methodsFor: 'results' stamp: 'ajh 3/13/2003 01:32'! position ^position! ! !IRStackCount methodsFor: 'printing' stamp: 'ajh 3/13/2003 01:38'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' start '; print: start; nextPutAll: ' stop '; print: position; nextPutAll: ' max '; print: length. ! ! !IRStackCount methodsFor: 'affecting' stamp: 'jorgeRessia 11/3/2009 16:54'! push ^ self push: 1! ! !IRStackCount methodsFor: 'affecting' stamp: 'jorgeRessia 11/3/2009 16:59'! push: n (position := position + n) > length ifTrue: [length := position]! ! !IRStackCount methodsFor: 'results' stamp: 'ajh 3/13/2003 01:32'! size ^length! ! !IRStackCount methodsFor: 'results' stamp: 'ajh 3/13/2003 01:36'! start ^ start! ! !IRStackCount methodsFor: 'initialize' stamp: 'ajh 3/13/2003 01:48'! startAt: pos start := position := length := pos! ! !IRVisitor class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/6/2012 13:41'! on: anIRMethod ^self new visitMethod: anIRMethod; yourself.! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:27'! visitBlockReturnTop: aBlockReturnTop! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:27'! visitInstVarAccess: anInstVarAccess! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:27'! visitJump: aJump! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitJumpIf: aJumpIf! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitLiteralVariableAccess: aLiteralVariableAccess! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:31'! visitMethod: aMethod aMethod startSequence withAllSuccessorsDo: [ :seq | seq do: [ :instruction | instruction accept: self ]]. ^ aMethod! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitPop: aPop! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitPushArray: aPushArray! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitPushClosureCopy: aPushClosureCopy! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitPushDup: aPushDup! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitPushLiteral: aPushLiteral! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitReceiverAccess: aReceiverAccess! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitRemoteTempAccess: aRemoteTempAccess! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitReturn: aReturn! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:28'! visitSend: aSend! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:29'! visitTempAccess: aTempAccess! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:29'! visitTempVector: aTempVector! ! !IRVisitor methodsFor: 'visiting' stamp: 'ToonVerwaest 3/27/2011 19:29'! visitThisContextAccess: aThisContextAccess! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/18/2012 17:41'! rejectClasses ^ #()! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/19/2012 08:11'! rejectRules ^ #('UsesAddRule')! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/18/2012 17:43'! ruleAssignmentInIfTrueRuleV1TruePositive ^ #(#(#(#RGMethodDefinition #(#OpalCompiler #from:class:context:notifying: #false)) #'2012-12-18T17:43:24.703000001+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/19/2012 08:07'! ruleCodeCruftLeftInMethodsRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#'OpalCompiler class' #recompileAllFrom: #true)) #'2012-12-19T08:07:08.865000001+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/18/2012 17:44'! ruleEqualsTrueRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#IRBytecodeGenerator #returnConstant: #false)) #'2012-12-18T17:44:03.941+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/18/2012 17:42'! ruleImplementedNotSentRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#OCASTTranslatorForEffect #emitIfFalse: #false)) #'2012-12-18T17:41:36.969+01:00') #(#(#RGMethodDefinition #(#OCASTTranslatorForEffect #emitIfTrue: #false)) #'2012-12-18T17:41:39.446+01:00') #(#(#RGMethodDefinition #(#OCASTTranslatorForEffect #emitIfNotNil: #false)) #'2012-12-18T17:41:41.777+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitCaseOf: #false)) #'2012-12-18T17:42:01.724+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitToByDo: #false)) #'2012-12-18T17:42:03.557+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitToDo: #false)) #'2012-12-18T17:42:05.34+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitIfNotNil: #false)) #'2012-12-18T17:42:07.349+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitIfNil: #false)) #'2012-12-18T17:42:09.472+01:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitCaseOfOtherwise: #false)) #'2012-12-18T17:42:11.795+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 4/9/2013 10:39'! ruleMethodHasNoTimeStampRuleV1TruePositive ^ #(#(#(#RGMethodDefinition #(#OCSemanticWarning #correctIn: #false)) #'2012-12-18T17:43:05.023+01:00') #(#(#RGMethodDefinition #(#OCAbstractLocalVariable #isUninitialized #false)) #'2012-12-18T17:43:10.236+01:00') #(#(#RGMethodDefinition #(#IRInstruction #isLiteral: #false)) #'2012-12-19T08:05:35.61+01:00') #(#(#RGMethodDefinition #(#IRPrinter #pushRemoteTemp:inVector: #false)) #'2012-12-19T08:07:38.013+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/19/2012 08:10'! ruleTempsReadBeforeWrittenRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#IRSequence #absorbJumpToSingleInstr: #false)) #'2012-12-19T08:10:39.177+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/19/2012 08:17'! ruleToDoCollectRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#IRBytecodeScope #args #false)) #'2012-12-19T08:16:58.474000001+01:00') #(#(#RGMethodDefinition #(#IRBytecodeScope #temps #false)) #'2012-12-19T08:17:19.677+01:00') )! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 12/19/2012 08:13'! ruleVariableAssignedLiteralRuleV1FalsePositive ^ #(#(#(#RGClassDefinition #(#IRMethod)) #'2012-12-19T08:13:54.508+01:00') )! ! !OCAbstractScope commentStamp: 'ajh 3/24/2003 21:53' prior: 34719313! I am a symbol table where variable names are associated with SemVars. Each context (method/closure) get a fresh scope that inherits from its outer scope.! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 7/2/2012 10:16'! addCopyingTemp: aTempVar ^ copiedVars add: (OCCopyingTempVariable new name: aTempVar name; index: tempVars size; escaping: aTempVar escaping; usage: aTempVar usage; scope: self; yourself)! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 7/2/2012 10:16'! addCopyingTempNamed: name ^ copiedVars add: (OCCopyingTempVariable new name: name; index: tempVars size; scope: self; yourself)! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 9/22/2010 11:10'! addCopyingTempToAllScopesUpToDefTemp: aVar (self hasCopyingTempNamed: aVar name) ifFalse: [self addCopyingTemp: aVar]. tempVars at: aVar name ifPresent: [:v | ^ self]. ^ self outerScope addCopyingTempToAllScopesUpToDefTemp: aVar. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 9/22/2010 10:51'! addCopyingTempToAllScopesUpToDefVector: aName (self hasCopyingTempNamed: aName) ifFalse: [self addCopyingTempNamed: aName]. self tempVectorName = aName ifTrue: [^ self]. ^ self outerScope addCopyingTempToAllScopesUpToDefVector: aName.! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 7/2/2012 10:16'! addTemp: name ^ tempVars add: (OCTempVariable new name: name; index: tempVars size; scope: self; yourself)! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 12/18/2012 16:43'! addVectorTemp: aTemp ^ tempVector add: (OCVectorTempVariable new name: aTemp name; vectorName: self tempVectorName; index: tempVector size; scope: self; usage: aTemp usage; escaping: aTemp escaping; yourself)! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 12/17/2012 15:18'! allTempNames ^self allTemps collect: #name.! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 4/10/2013 15:15'! allTemps "return all temps defined, even the ones in the outer scope that are not used in the current. This includes the arguments We do not need to care about shadowed temps as temp shadowing is not allowed." | temps | temps := OrderedCollection new. self outerScope allTemps do: [ :var | (self localTempNames includes: var name) ifFalse: [ temps add: var.] ]. temps addAll: self localTemps. ^temps asArray. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'JorgeRessia 9/7/2010 20:24'! copiedVars ^ copiedVars! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 9/10/2010 08:46'! hasCopyingTempNamed: name ^self copiedVars anySatisfy: [:each | each name = name]! ! !OCAbstractMethodScope methodsFor: 'initializing' stamp: 'MarcusDenker 9/9/2010 17:25'! id: int id := int! ! !OCAbstractMethodScope methodsFor: 'initializing' stamp: 'MarcusDenker 7/2/2012 10:16'! initialize tempVars := OCKeyedSet keyBlock: [:var | var name]. copiedVars := OCKeyedSet keyBlock: [:var | var name]. tempVector := OCKeyedSet keyBlock: [:var | var name]. id := 0. thisContextVar := OCSpecialVariable new name: 'thisContext'; scope: self; yourself. ! ! !OCAbstractMethodScope methodsFor: 'testing' stamp: 'MarcusDenker 10/7/2010 10:07'! isBlockScope ^false! ! !OCAbstractMethodScope methodsFor: 'testing'! isMethodScope ^false! ! !OCAbstractMethodScope methodsFor: 'testing' stamp: 'MarcusDenker 6/22/2012 09:47'! isOptimizedBlockScope ^ false! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 12/17/2012 15:14'! localTempNames ^self localTemps collect: [:each | each name]! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 12/17/2012 16:21'! localTemps "all temps accessed in the context... for tempVectors, it takes all the vars even those not used here" | localVars | localVars := OrderedCollection new. self copiedVars do: [:var | var isStoringTempVector ifTrue: [var tempVectorForTempStoringIt do: [:tempVectorVars | localVars add: tempVectorVars]] ifFalse: [localVars add: var ] ]. self tempVars do: [:var | localVars add: var]. ^localVars asArray! ! !OCAbstractMethodScope methodsFor: 'api-sunit' stamp: 'MarcusDenker 9/5/2010 17:17'! lookupScopeForVar: name tempVars at: name ifPresent: [:v | ^ self]. tempVector at: name ifPresent: [:v | ^ self]. ^ self outerScope lookupScopeForVar: name.! ! !OCAbstractMethodScope methodsFor: 'lookup' stamp: 'MarcusDenker 9/22/2010 10:39'! lookupVar: name copiedVars at: name ifPresent: [:v | ^ v]. tempVector at: name ifPresent: [:v | ^ v]. tempVars at: name ifPresent: [:v | ^ v]. name = 'thisContext' ifTrue: [^ thisContextVar]. ^self outerScope lookupVar: name ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 9/22/2010 11:07'! moveToVectorTemp: aTempVar self addVectorTemp: aTempVar. self removeTemp: aTempVar. ! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'MarcusDenker 10/7/2010 10:06'! newBlockScope: int ^ OCBlockScope new outerScope: self; id: int; yourself.! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'MarcusDenker 10/7/2010 10:05'! newOptimizedBlockScope: int ^ OCOptimizedBlockScope new outerScope: self; id: int; yourself.! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'MarcusDenker 12/20/2012 14:38'! outerOffsetTo: aScope "return how many scopes up from me aScope is. We ignore optimized scopes so the resulting offset maps to contexts" | offset scope | offset := 0. scope := self. [scope == aScope] whileFalse: [ scope isOptimizedBlockScope ifTrue: [scope := scope outerNotOptimizedScope]. offset := offset + 1. scope isInstanceScope ifTrue: [^0]. scope := scope outerScope.]. ^offset. ! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'ajh 7/8/2004 14:19'! popScope "Propogate free var usages to their outer vars, then return outer scope" ^ self outerScope! ! !OCAbstractMethodScope methodsFor: 'printing' stamp: 'ajh 3/20/2003 11:29'! printOn: stream super printOn: stream. stream space. self scopeLevel printOn: stream. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ajh 6/25/2004 22:05'! removeTemp: tempVar tempVars remove: tempVar. tempVars do: [:var | var index > tempVar index ifTrue: [ var index: var index - 1]]. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 10/14/2010 13:46'! tempVarNames ^ self tempVars collect: [:each| each name]! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ajh 6/25/2004 22:23'! tempVars ^ tempVars asSortedCollection: [:x :y | x index <= y index]! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'JorgeRessia 9/7/2010 20:25'! tempVector ^ tempVector ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 11/15/2012 16:08'! tempVectorName "the name of the tempVector is not a valid name of a temp variable This way we avoid name clashes " ^'0vector', id asString! ! !OCBlockScope methodsFor: 'accessing' stamp: 'MarcusDenker 10/14/2010 10:13'! inComingCopiedVars ^ copiedVars select: [:each | outerScope copiedVars includes: each].! ! !OCBlockScope methodsFor: 'testing' stamp: 'JorgeRessia 9/7/2010 18:39'! isBlockScope ^ true! ! !OCBlockScope methodsFor: 'testing' stamp: 'MarcusDenker 12/14/2012 11:51'! isInsideOptimizedLoop ^ self outerScope isInsideOptimizedLoop! ! !OCBlockScope methodsFor: 'accessing' stamp: 'MarcusDenker 12/14/2012 11:51'! outerNotOptimizedScope ^ self! ! !OCOptimizedBlockScope methodsFor: 'initializing' stamp: 'JorgeRessia 9/23/2010 13:16'! initialize super initialize. isInlinedLoop := false! ! !OCOptimizedBlockScope methodsFor: 'testing' stamp: 'JorgeRessia 9/23/2010 13:21'! isInsideOptimizedLoop ^ isInlinedLoop ifTrue: [true] ifFalse: [self outerScope isInsideOptimizedLoop]! ! !OCOptimizedBlockScope methodsFor: 'testing' stamp: 'JorgeRessia 9/11/2010 08:08'! isOptimizedBlockScope ^ true! ! !OCOptimizedBlockScope methodsFor: 'private' stamp: 'MarcusDenker 12/14/2012 11:25'! markInlinedLoop isInlinedLoop := true! ! !OCOptimizedBlockScope methodsFor: 'accessing' stamp: 'JorgeRessia 9/23/2010 14:00'! outerNotOptimizedScope ^self outerScope outerNotOptimizedScope! ! !OCMethodScope methodsFor: 'testing' stamp: 'MarcusDenker 8/27/2010 11:31'! isMethodScope ^true! ! !OCMethodScope methodsFor: 'accessing' stamp: 'JorgeRessia 9/23/2010 14:02'! outerNotOptimizedScope ^self! ! !OCAbstractScope methodsFor: 'lookup' stamp: 'ajh 2/27/2003 00:40'! classEncoding ^ self outerScope classEncoding! ! !OCAbstractScope methodsFor: 'decompiling' stamp: 'ms 7/11/2007 11:16'! instanceScope ^self outerScope instanceScope! ! !OCAbstractScope methodsFor: 'testing' stamp: 'JorgeRessia 9/23/2010 19:15'! isInsideOptimizedLoop ^ false! ! !OCAbstractScope methodsFor: 'testing' stamp: 'JorgeRessia 9/23/2010 19:15'! isInstanceScope ^ false! ! !OCAbstractScope methodsFor: 'testing' stamp: 'MarcusDenker 12/20/2012 14:38'! isOptimizedBlockScope ^false! ! !OCAbstractScope methodsFor: 'lookup' stamp: 'ajh 2/25/2003 22:41'! lookupSelector: name Symbol hasInterned: name ifTrue: [ :sym | ^ sym]. ^ nil! ! !OCAbstractScope methodsFor: 'lookup' stamp: 'ajh 3/11/2003 20:19'! lookupVar: name "subclass responsibility" ^ self outerScope lookupVar: name! ! !OCAbstractScope methodsFor: 'accessing' stamp: 'MarcusDenker 12/18/2012 13:39'! node ^node! ! !OCAbstractScope methodsFor: 'accessing' stamp: 'MarcusDenker 12/18/2012 13:32'! node: aNode node := aNode! ! !OCAbstractScope methodsFor: 'levels' stamp: 'ajh 2/26/2003 13:44'! outerScope ^ outerScope! ! !OCAbstractScope methodsFor: 'initializing' stamp: 'ajh 2/26/2003 13:43'! outerScope: aSemScope outerScope := aSemScope! ! !OCAbstractScope methodsFor: 'initializing' stamp: 'MarcusDenker 8/21/2010 18:42'! parseScope ^ self! ! !OCAbstractScope methodsFor: 'lookup' stamp: 'ajh 2/25/2003 22:40'! possibleSelectorsFor: string ^ Symbol possibleSelectorsFor: string! ! !OCAbstractScope methodsFor: 'levels' stamp: 'ajh 3/20/2003 11:27'! scopeLevel outerScope ifNil: [^ 0]. ^ outerScope scopeLevel + 1! ! !OCClassScope commentStamp: 'ajh 3/24/2003 21:44' prior: 34719529! I include all variable enries for class, pool and global vars.! !OCClassScope class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/21/2010 18:39'! for: aClass ^self new class: aClass; yourself! ! !OCClassScope methodsFor: 'initializing' stamp: 'ajh 2/25/2003 20:10'! class: aBehavior class := aBehavior! ! !OCClassScope methodsFor: 'lookup' stamp: 'ajh 2/25/2003 20:10'! classEncoding ^ class! ! !OCClassScope methodsFor: 'levels' stamp: 'MarcusDenker 8/22/2010 10:52'! instanceScope ^ OCInstanceScope new vars: class allInstVarNames; outerScope: self; yourself! ! !OCClassScope methodsFor: 'lookup' stamp: 'MarcusDenker 12/18/2012 13:54'! lookupVar: name "Return a SemVar for my pool var with this name. Return nil if none found" ^(class bindingOf: name asSymbol) ifNotNilDo: [:assoc | OCLiteralVariable new assoc: assoc; scope: self; yourself] ! ! !OCClassScope methodsFor: 'levels' stamp: 'MarcusDenker 8/27/2010 12:35'! newMethodScope ^ self instanceScope newMethodScope! ! !OCClassScope methodsFor: 'printing' stamp: 'ajh 2/25/2003 20:10'! printOn: stream class printOn: stream. stream nextPutAll: ' parseScope'. ! ! !OCGlobalScope commentStamp: 'ajh 3/24/2003 21:52' prior: 34719654! When the class is not known, use me to at least find global vars.! !OCGlobalScope methodsFor: 'lookup' stamp: 'ajh 2/26/2003 13:42'! classEncoding "subclass responsibility, default is nil" ^ nil! ! !OCGlobalScope methodsFor: 'lookup' stamp: 'MarcusDenker 6/29/2012 15:38'! lookupVar: name "subclass responsibility, default is to look up global vars" (ProtoObject bindingOf: name asSymbol) ifNotNilDo: [:assoc | ^ OCLiteralVariable new assoc: assoc; scope: self; yourself]. ^ nil ! ! !OCGlobalScope methodsFor: 'lookup' stamp: 'MarcusDenker 9/9/2010 17:22'! newMethodScope ^ OCMethodScope new outerScope: self! ! !OCInstanceScope methodsFor: 'acessing' stamp: 'MarcusDenker 12/17/2012 15:18'! allTemps ^#()! ! !OCInstanceScope methodsFor: 'initializing' stamp: 'MarcusDenker 7/2/2012 10:16'! initialize vars := OCKeyedSet keyBlock: [:var | var name]. selfVar := OCSpecialVariable new name: 'self'; scope: self; yourself. superVar := OCSpecialVariable new name: 'super'; scope: self; yourself.! ! !OCInstanceScope methodsFor: 'acessing' stamp: 'ms 7/10/2007 17:58'! instanceScope ^self! ! !OCInstanceScope methodsFor: 'testing' stamp: 'ajh 7/8/2004 20:26'! isInstanceScope ^ true! ! !OCInstanceScope methodsFor: 'lookup' stamp: 'MarcusDenker 9/1/2010 15:32'! lookupVar: name "Return a ScopeVar for my inst var with this name. Return nil if none found" name = 'self' ifTrue: [^ selfVar]. name = 'super' ifTrue: [^ superVar]. ^ vars at: name ifAbsent: [self outerScope lookupVar: name]! ! !OCInstanceScope methodsFor: 'scope' stamp: 'MarcusDenker 9/9/2010 17:22'! newMethodScope ^ OCMethodScope new outerScope: self! ! !OCInstanceScope methodsFor: 'initializing' stamp: 'MarcusDenker 6/29/2012 15:38'! vars: names vars := Dictionary new. names withIndexDo: [:name :index | vars at: name put: (OCInstanceVariable new name: name; index: index; scope: self; yourself)]. ! ! !OCToolScope methodsFor: 'lookup' stamp: 'MarcusDenker 4/11/2013 14:36'! classEncoding "subclass responsibility, default is nil" ^ nil! ! !OCToolScope methodsFor: 'initialize-release' stamp: 'MarcusDenker 4/11/2013 14:57'! initialize outerScope := self instanceScope outerScope: (UndefinedObject parseScope outerScope: (OCGlobalScope new)).! ! !OCToolScope methodsFor: 'lookup' stamp: 'MarcusDenker 4/11/2013 14:55'! instanceScope ^ OCInstanceScope new vars: #(); outerScope: self; yourself! ! !OCToolScope methodsFor: 'lookup' stamp: 'MarcusDenker 4/11/2013 14:44'! lookupVar: name "subclass responsibility, default is to look up global vars" name first isUppercase ifTrue: [ outerScope lookupVar: name ]. (requestor bindingOf: name asSymbol) ifNotNilDo: [:assoc | ^ OCLiteralVariable new assoc: assoc; scope: self; yourself]. ^ nil ! ! !OCToolScope methodsFor: 'lookup' stamp: 'MarcusDenker 4/11/2013 14:36'! newMethodScope ^ OCMethodScope new outerScope: self! ! !OCToolScope methodsFor: 'accessing' stamp: 'MarcusDenker 4/11/2013 14:37'! requestor ^ requestor! ! !OCToolScope methodsFor: 'accessing' stamp: 'MarcusDenker 4/11/2013 14:37'! requestor: anObject requestor := anObject! ! !OCAbstractVariable commentStamp: '' prior: 34719780! I am an entry in a Scope that gets associated with variable nodes of the same name. ! !OCAbstractLocalVariable commentStamp: '' prior: 34719930! I am an argument or temporary variable of a method or block. index is not the index in the bytecode but just used for sorting (see tempVars). to be fixed...! !OCAbstractLocalVariable methodsFor: 'accessing' stamp: 'MarcusDenker 11/16/2012 11:30'! index ^ index! ! !OCAbstractLocalVariable methodsFor: 'initializing' stamp: 'MarcusDenker 11/16/2012 11:30'! index: n index := n! ! !OCAbstractLocalVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/5/2010 20:13'! isArg ^usage = #arg! ! !OCAbstractLocalVariable methodsFor: 'testing' stamp: 'ms 7/31/2007 00:42'! isLocal ^true! ! !OCAbstractLocalVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 4/10/2013 14:27'! isUninitialized usage ifNil: [ ^true ]. self isArg ifTrue: [ ^false ]. ^self isRead! ! !OCAbstractLocalVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/5/2010 20:13'! markArg usage := #arg! ! !OCAbstractLocalVariable methodsFor: 'accessing' stamp: 'ajh 6/23/2004 22:51'! name ^ name! ! !OCAbstractLocalVariable methodsFor: 'initializing' stamp: 'jorgeRessia 11/14/2009 10:56'! name: string name := string! ! !OCSpecialVariable methodsFor: 'emitting' stamp: 'MarcusDenker 9/3/2010 15:46'! emitStore: methodBuilder self shouldNotImplement! ! !OCSpecialVariable methodsFor: 'emitting' stamp: 'MarcusDenker 9/3/2010 16:15'! emitValue: methodBuilder self isContext ifTrue: [methodBuilder pushThisContext] ifFalse:[methodBuilder pushReceiver] ! ! !OCSpecialVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/3/2010 16:09'! isContext ^name = 'thisContext'! ! !OCSpecialVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/3/2010 15:51'! isSelf ^name = 'self'! ! !OCSpecialVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/3/2010 16:09'! isSuper ^name = 'super'! ! !OCSpecialVariable methodsFor: 'testing' stamp: 'MarcusDenker 4/9/2013 10:39'! isUninitialized ^ false! ! !OCCopyingTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/18/2012 15:09'! indexInTempVectorFromIR: aName ^(scope node irInstruction tempVectorNamed: name) indexForVarNamed: aName.! ! !OCCopyingTempVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/9/2010 16:06'! isCopying ^true! ! !OCCopyingTempVariable methodsFor: 'temp vector' stamp: 'MarcusDenker 11/15/2012 17:09'! tempVectorForTempStoringIt "If I am stroring a temp Vector, this method returns this victor. useful for analysis e.g. which variables are active in a context" | searchScope | self isStoringTempVector ifFalse: [^nil]. searchScope := scope. [searchScope isInstanceScope or: [searchScope tempVectorName = name]] whileFalse: [searchScope := searchScope outerScope]. searchScope isInstanceScope ifTrue: [ ^nil] "not found" ifFalse: [^ searchScope tempVector] ! ! !OCCopyingTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/18/2012 15:08'! writeFromContext: aContext scope: contextScope value: aValue | myContext myScope | "take care to set the copy correctly up to the definition" myContext := aContext. myScope := contextScope. [myScope hasCopyingTempNamed: name] whileTrue: [ super writeFromContext: myContext scope: myScope value: aValue. myContext := myContext outerContext. myScope := myScope outerScope. myScope isInstanceScope ifTrue: [^aValue] ]. ^aValue. ! ! !OCTempVariable methodsFor: 'comparing' stamp: 'MarcusDenker 11/16/2012 11:24'! = aTempVar ^aTempVar class = self class and: [aTempVar scope = self scope and: [aTempVar name = self name and: [aTempVar usage = self usage]]]. ! ! !OCTempVariable methodsFor: 'emitting'! emitStore: methodBuilder methodBuilder storeTemp: name. ! ! !OCTempVariable methodsFor: 'emitting'! emitValue: methodBuilder methodBuilder pushTemp: name.! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/22/2010 11:04'! escaping ^escaping! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/22/2010 11:04'! escaping: anObject escaping := anObject! ! !OCTempVariable methodsFor: 'comparing' stamp: 'MarcusDenker 11/16/2012 11:26'! hash ^ name hash bitXor: (usage hash bitXor: scope hash).! ! !OCTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/20/2012 14:08'! indexFromIR ^scope node irInstruction indexForVarNamed: name! ! !OCTempVariable methodsFor: 'initializing' stamp: 'MarcusDenker 9/5/2010 20:18'! initialize super initialize. escaping := false.! ! !OCTempVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/9/2010 16:07'! isCopying ^false! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/21/2010 16:06'! isEscaping ^escaping = #escapingRead or: [escaping = #escapingWrite]! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/21/2010 16:22'! isEscapingRead ^escaping = #escapingRead ! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/21/2010 16:22'! isEscapingWrite ^escaping = #escapingWrite ! ! !OCTempVariable methodsFor: 'testing' stamp: 'MarcusDenker 11/15/2012 16:37'! isStoringTempVector "I am a temp that stores a temp vector. Those generated temps have a invalid name starting with 0" ^name first = $0.! ! !OCTempVariable methodsFor: 'testing' stamp: 'ajh 6/23/2004 23:18'! isTemp ^ true! ! !OCTempVariable methodsFor: 'testing'! isTempVectorTemp ^false! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 9/21/2010 18:06'! markEscapingRead escaping = #escapingWrite ifFalse: [escaping := #escapingRead]! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 5/18/2011 15:57'! markEscapingWrite escaping := #escapingWrite. usage := #write.! ! !OCTempVariable methodsFor: 'escaping' stamp: 'MarcusDenker 5/18/2011 16:00'! markWrite "if an escaping var is wrote to later, it needs to be remote" self isEscaping ifTrue: [self markEscapingWrite]. super markWrite.! ! !OCTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/18/2012 13:56'! readFromContext: aContext scope: contextScope | offset contextForRead | offset := contextScope outerOffsetTo: scope. contextForRead := aContext. offset timesRepeat: [contextForRead := contextForRead outerContext]. ^contextForRead tempAt: self indexFromIR.! ! !OCTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/18/2012 14:41'! writeFromContext: aContext scope: contextScope value: aValue | offset contextForRead | offset := contextScope outerOffsetTo: scope. contextForRead := aContext. offset timesRepeat: [contextForRead := contextForRead outerContext]. ^contextForRead tempAt: self indexFromIR put: aValue! ! !OCVectorTempVariable methodsFor: 'emitting' stamp: 'MarcusDenker 12/18/2012 16:42'! emitStore: methodBuilder methodBuilder storeRemoteTemp: name inVector: vectorName.! ! !OCVectorTempVariable methodsFor: 'emitting' stamp: 'MarcusDenker 12/18/2012 16:42'! emitValue: methodBuilder methodBuilder pushRemoteTemp: name inVector: vectorName.! ! !OCVectorTempVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2010 17:13'! isRemote ^true! ! !OCVectorTempVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/9/2010 16:11'! isTempVectorTemp ^true! ! !OCVectorTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/20/2012 14:39'! readFromContext: aContext scope: contextScope | tempVectorVar theVector offset | tempVectorVar := scope lookupVar: vectorName. theVector := tempVectorVar readFromContext: aContext scope: contextScope. offset := tempVectorVar indexInTempVectorFromIR: name. ^theVector at: offset.! ! !OCVectorTempVariable methodsFor: 'accessing' stamp: 'MarcusDenker 12/18/2012 16:44'! vectorName ^ vectorName! ! !OCVectorTempVariable methodsFor: 'accessing' stamp: 'MarcusDenker 12/18/2012 16:43'! vectorName: anObject vectorName := anObject! ! !OCVectorTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 12/18/2012 16:42'! writeFromContext: aContext scope: contextScope value: aValue | tempVectorVar theVector offset | tempVectorVar := scope lookupVar: vectorName. theVector := tempVectorVar readFromContext: aContext scope: tempVectorVar scope. offset := tempVectorVar indexInTempVectorFromIR: name. ^theVector at: offset put: aValue.! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ajh 3/16/2003 20:08'! asString ^ self name! ! !OCAbstractVariable methodsFor: 'emitting' stamp: 'JorgeRessia 4/19/2010 09:35'! emitStore: methodBuilder self subclassResponsibility! ! !OCAbstractVariable methodsFor: 'emitting' stamp: 'JorgeRessia 4/19/2010 09:35'! emitValue: methodBuilder self subclassResponsibility! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'ajh 7/8/2004 16:25'! isGlobal ^ false! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 8/27/2010 11:16'! isInstance ^false ! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'ms 7/31/2007 00:42'! isLocal ^false! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/5/2010 20:12'! isRead ^usage = #read ! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/21/2010 16:02'! isRemote ^false! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/1/2010 14:44'! isSelf ^false! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/1/2010 15:30'! isSuper ^false! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'ajh 3/18/2003 11:13'! isTemp ^ false! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 4/9/2013 10:39'! isUninitialized ^ false! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/5/2010 20:10'! isUnused ^ usage isNil! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 5/18/2011 15:54'! isWrite ^usage = #write ! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/5/2010 20:12'! markRead (usage isNil or: [usage = #arg]) ifTrue: [usage := #read]! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 9/21/2010 16:01'! markWrite usage := #write.! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ajh 6/23/2004 22:47'! name ^ self subclassResponsibility! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ajh 2/27/2003 00:38'! printOn: stream stream nextPutAll: self name! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ajh 6/23/2004 22:52'! scope ^ scope! ! !OCAbstractVariable methodsFor: 'initializing' stamp: 'ajh 7/8/2004 16:17'! scope: aLexicalScope scope := aLexicalScope! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'MarcusDenker 9/5/2010 20:13'! usage ^ usage! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'MarcusDenker 9/22/2010 11:05'! usage: anObject usage := anObject! ! !OCInstanceVariable methodsFor: 'emitting' stamp: 'MarcusDenker 8/27/2010 11:17'! emitStore: methodBuilder methodBuilder storeInstVar: index! ! !OCInstanceVariable methodsFor: 'emitting' stamp: 'MarcusDenker 8/27/2010 11:17'! emitValue: methodBuilder methodBuilder pushInstVar: index. ! ! !OCInstanceVariable methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 11:09'! index ^ index! ! !OCInstanceVariable methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 11:09'! index: anObject index := anObject! ! !OCInstanceVariable methodsFor: 'testing' stamp: 'MarcusDenker 8/27/2010 11:16'! isInstance ^true ! ! !OCInstanceVariable methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 11:05'! name ^ name! ! !OCInstanceVariable methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2010 11:05'! name: anObject name := anObject! ! !OCLiteralVariable commentStamp: 'ajh 3/24/2003 21:53' prior: 34720154! I am a global, pool, or class variable.! !OCLiteralVariable methodsFor: 'initializing' stamp: 'ajh 2/26/2003 17:31'! assoc: anAssociation assoc := anAssociation! ! !OCLiteralVariable methodsFor: 'emitting' stamp: 'JorgeRessia 4/19/2010 09:37'! emitStore: methodBuilder methodBuilder storeIntoLiteralVariable: assoc. ! ! !OCLiteralVariable methodsFor: 'emitting' stamp: 'JorgeRessia 4/19/2010 09:37'! emitValue: methodBuilder methodBuilder pushLiteralVariable: assoc.! ! !OCLiteralVariable methodsFor: 'accessing' stamp: 'ajh 7/8/2004 16:25'! isGlobal ^ true! ! !OCLiteralVariable methodsFor: 'accessing' stamp: 'ajh 7/2/2004 14:15'! name ^ assoc name! ! !OCLiteralVariable methodsFor: 'accessing' stamp: 'ms 8/5/2006 14:35'! value ^assoc value! ! !OCFakeDecompiler methodsFor: 'compiling' stamp: 'marcus.denker 6/9/2009 18:26'! decompile: aMethod "Answer a MethodNode that is the root of the parse tree for the argument, aMethod. Selector will be 'unknown' and inst vars will be 'instVarN'. selector and class can be placed in resulting MethodNode later" ^self decompile: aMethod selector in: aMethod methodClass method: aMethod ! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'marcus.denker 6/9/2009 18:27'! decompile: aSelector in: aClass "See Decompiler|decompile:in:method:. The method is found by looking up the message, aSelector, in the method dictionary of the class, aClass." ^self decompile: aSelector in: aClass method: (aClass compiledMethodAt: aSelector)! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'marcus.denker 6/9/2009 18:27'! decompile: selector in: aClass method: aMethod "Answer a MethodNode that is the root of the parse tree for the argument, aMethod, which is the CompiledMethod associated with the message, aSelector. Variables are determined with respect to the argument, aClass." | source | ^ (source := aMethod getSourceFromFile) ifNil: [Decompiler new decompile: selector in: aClass method: aMethod ] ifNotNil: [aMethod parserClass new parse: source class: aMethod methodClass]! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'ClementBera 4/16/2013 10:09'! decompileBlock: aBlock "Sometimes the method does not work (probably because of the bug in the IR->bc offset mapping). So it is commented because the Opal regression build fails with this method" "| methodAST blockSequenceStart ir | methodAST := aBlock method ast. ir := methodAST ir. ir generate. blockSequenceStart := aBlock startpc + aBlock numTemps - aBlock numCopiedValues - aBlock numArgs. ir := ir blockInstructionForPC: blockSequenceStart. self flag: #FIXME. ^(ir sourceNode isKindOf: RBBlockNode) ifTrue: [ir sourceNode ] ifFalse: [RBBlockNode body: (RBSequenceNode statements: #()) ] " ^ RBBlockNode body: (RBSequenceNode statements: #()) ! ! !OCFakeDecompiler methodsFor: 'initialize-release' stamp: 'marcus.denker 6/9/2009 18:26'! withTempNames: tempNameArray "ignored... fake decompiler has corrent temp names by default"! ! !OCParser commentStamp: '' prior: 34720244! This mirrors the old Parser protocol but delegates to the real parser which is RBParser.! !OCParser methodsFor: 'accessing' stamp: 'ajh 3/11/2003 12:16'! classEncoding ^ scope classEncoding! ! !OCParser methodsFor: 'accessing' stamp: 'ajh 3/25/2003 23:45'! encoder ^ self! ! !OCParser methodsFor: 'old protocol' stamp: 'ajh 3/11/2003 20:01'! endOfLastToken ^ endOfMethodPattern! ! !OCParser methodsFor: 'error handling' stamp: 'ajh 3/6/2003 01:03'! fail ^ failBlock value! ! !OCParser methodsFor: 'error handling' stamp: 'MarcusDenker 1/25/2013 15:48'! interactive requestor ifNil: [^ false]. (requestor isKindOf: SyntaxError) ifTrue: [^ false]. (requestor respondsTo: #interactive) ifTrue: [^ requestor interactive]. ^ true! ! !OCParser methodsFor: 'error handling' stamp: 'MarcusDenker 6/19/2012 17:03'! notify: string at: location | class | class := self classEncoding. requestor isNil ifTrue: [ SyntaxErrorNotification inClass: class category: class category withCode: (source contents copyReplaceFrom: location to: location - 1 with: string , ' ->') doitFlag: doitFlag] ifFalse: [requestor notify: string , ' ->' at: location in: source]. ^self fail! ! !OCParser methodsFor: 'public access' stamp: 'ajh 3/11/2003 14:35'! parse: sourceStreamOrString class: behavior ^ self parse: sourceStreamOrString readStream class: behavior noPattern: false notifying: nil ifFail: [nil]! ! !OCParser methodsFor: 'public access' stamp: 'md 11/22/2005 18:08'! parse: sourceStream class: class category: aCategory noPattern: noPattern context: ctxt notifying: req ifFail: aBlock "Answer a MethodNode for the argument, sourceStream, that is the root of a parse tree. Parsing is done with respect to the argument, class, to find instance, class, and pool variables; and with respect to the argument, ctxt, to find temporary variables. Errors in parsing are reported to the argument, req, if not nil; otherwise aBlock is evaluated. The argument noPattern is a Boolean that is true if the the sourceStream does not contain a method header (i.e., for DoIts)." ^ self parse: sourceStream class: class noPattern: noPattern context: ctxt notifying: req ifFail: aBlock ! ! !OCParser methodsFor: 'public access' stamp: 'ajh 9/14/2002 09:28'! parse: sourceStream class: behavior noPattern: noPattern context: context notifying: req ifFail: aBlock "Backwards compatibilty" context ifNotNil: [self error: 'Use Compiler-evaluate... instead']. ^ self parse: sourceStream class: behavior noPattern: noPattern notifying: req ifFail: aBlock! ! !OCParser methodsFor: 'public access' stamp: 'MarcusDenker 6/29/2012 16:16'! parse: sourceStream class: parseScope noPattern: doitBool notifying: req ifFail: aBlock "Parse sourceStream into a embedded BlockNode if doitFlag is true (no method header) or a MethodNode if doitFlag is false. Parsing is done with respect to parseScope to find non-local variables. Errors in parsing are reported to req if not nil followed by executing the fail block." | parser tree | source := sourceStream. requestor := req. doitFlag := doitBool. scope := parseScope parseScope. failBlock := [^ aBlock value]. parser := self realParserClass. tree := doitFlag ifTrue: [parser parseDoIt: source contents] ifFalse: [parser parseMethod: source contents]. ^tree doSemanticAnalysisIn: scope! ! !OCParser methodsFor: 'public access' stamp: 'MarcusDenker 8/12/2010 15:54'! parseArgsAndTemps: aString notifying: req "No initialization required. Parse the argument, aString, notifying req if an error occurs. Otherwise, answer a two-element Array containing Arrays of strings (the argument names and temporary variable names)." aString ifNil: [^ #()]. ^ (self parse: aString readStream class: nil noPattern: false notifying: req ifFail: [^ nil]) tempNames! ! !OCParser methodsFor: 'public access' stamp: 'MarcusDenker 8/10/2010 12:11'! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." | methodNode | [methodNode := self realParserClass parseMethodPattern: aString. endOfMethodPattern := methodNode methodPatternStop. ^ methodNode selector] on: Error do: [^nil].! ! !OCParser methodsFor: 'accessing' stamp: 'MarcusDenker 10/11/2010 16:31'! parser ^self! ! !OCParser methodsFor: 'error correction' stamp: 'MarcusDenker 6/19/2012 17:01'! queryUninitializedTemp: variableNode | varStart varName | self interactive ifFalse: [^ self]. varName := variableNode name. varStart := variableNode start. requestor selectFrom: varStart to: varStart + varName size - 1; select. self halt. "((PopUpMenu labels: 'yes no') startUpWithCaption: ((varName , ' appears to be undefined at this point. Proceed anyway?') asText makeBoldFrom: 1 to: varName size)) = 1 ifFalse: [^ self fail]"! ! !OCParser methodsFor: 'accessing' stamp: 'MarcusDenker 3/29/2010 13:25'! realParserClass ^ RBParser! ! !OCParser methodsFor: 'accessing' stamp: 'ajh 3/10/2003 22:17'! requestor "Return the source code editor" ^ requestor! ! !OCParser methodsFor: 'accessing' stamp: 'ajh 6/9/2002 19:47'! requestor: editor "set the source code editor" requestor := editor! ! !OCPrimitiveNode commentStamp: 'ajh 3/24/2003 21:35' prior: 34720397! I represent a primitive. I am more than just a number if I am a named primitive. Structure: num Primitive number. spec Stored in first literal when num is 117 or 120. ! !OCPrimitiveNode class methodsFor: 'initialization' stamp: 'JorgeRessia 1/10/2010 11:28'! from: aPragmaNode ^ self new initializeFrom: aPragmaNode! ! !OCPrimitiveNode class methodsFor: 'instance creation' stamp: 'ajh 7/14/2001 12:47'! null ^ self new num: 0! ! !OCPrimitiveNode methodsFor: 'accessing' stamp: 'MarcusDenker 8/12/2010 15:54'! initializeFrom: aPragmaNode primitiveNum := 0. spec := Array with: (aPragmaNode arguments second) name with: (aPragmaNode arguments first) name with: 0 with: 0. ! ! !OCPrimitiveNode methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:37'! num ^ primitiveNum! ! !OCPrimitiveNode methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:23'! num: n primitiveNum := n! ! !OCPrimitiveNode methodsFor: 'printing' stamp: 'ajh 3/12/2003 12:26'! printOn: aStream aStream nextPutAll: 'primitive '; print: primitiveNum! ! !OCPrimitiveNode methodsFor: 'printing' stamp: 'MarcusDenker 8/13/2010 11:39'! printPrimitiveOn: aStream "Print the primitive on aStream" | primIndex primDecl | primIndex := primitiveNum. primIndex = 0 ifTrue: [ ^ self ]. primIndex = 120 ifTrue: [ "External call spec" ^ aStream print: spec ]. aStream nextPutAll: '. (primIndex ~= 117 and: [ primIndex ~= 120 ]) ifTrue: [ Smalltalk at: #Interpreter ifPresent: [ :cls | aStream nextPutAll: ' "'; nextPutAll: ((cls classPool at: #PrimitiveTable) at: primIndex + 1); nextPutAll: '" ' ] ]! ! !OCPrimitiveNode methodsFor: 'printing' stamp: 'ajh 3/19/2003 22:02'! sourceText ^ String streamContents: [:stream | self printPrimitiveOn: stream]! ! !OCPrimitiveNode methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:37'! spec ^ spec! ! !OCPrimitiveNode methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:30'! spec: literal spec := literal! ! !OpalCompiler class methodsFor: 'settings' stamp: 'MarcusDenker 2/7/2013 13:57'! compilerSettingsOn: aBuilder (aBuilder group: #opal) label: 'Opal Compiler'; with: [ (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}]! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:30'! couldEvaluate: anObject "Answer true if anObject can be passed to my various #evaluate: methods." ^anObject isString or: [ anObject isText or: [ anObject isStream ]]! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 11/16/2012 15:35'! debuggerMethodMapForMethod: aMethod ^ DebuggerMethodMapOpal forMethod: aMethod! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 2/5/2013 10:59'! decompilerClass ^OCFakeDecompiler! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:31'! evaluate: textOrString "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: textOrString for: nil logged: false! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:31'! evaluate: textOrString for: anObject logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor." ^self evaluate: textOrString for: anObject notifying: nil logged: logFlag! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:31'! evaluate: textOrString for: anObject notifying: aController logged: logFlag "Compile and execute the argument, textOrString with respect to the class of anObject. If a compilation error occurs, notify aController. If both compilation and execution are successful then, if logFlag is true, log (write) the text onto a system changes file so that it can be replayed if necessary." ^ self new evaluate: textOrString in: nil to: anObject notifying: aController ifFail: [^nil] logged: logFlag.! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 12/17/2012 13:20'! evaluate: textOrString logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil logged: logFlag! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:31'! evaluate: textOrString notifying: aController logged: logFlag "See Compiler|evaluate:for:notifying:logged:. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil notifying: aController logged: logFlag! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:32'! format: textOrStream in: aClass notifying: aRequestor ^self new format: textOrStream in: aClass notifying: aRequestor! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 12/17/2012 13:28'! parserClass "Answer a parser class to use for parsing methods compiled by instances of the receiver." self flag: 'This needs to be changed later'. ^Parser! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'ClementBera 12/13/2012 11:32'! recompileAll "Recompile all classes and traits in the system." Smalltalk allClassesAndTraits do: [:classOrTrait | classOrTrait compileAll] displayingProgress: 'Recompiling all classes and traits'. ! ! !OpalCompiler methodsFor: 'public access' stamp: 'JorgeRessia 4/13/2010 21:42'! compile: textOrStream in: aClass classified: aCategory notifying: aRequestor ifFail: failBlock "Answer a MethodNode for the argument, textOrStream. If the MethodNode can not be created, notify the argument, aRequestor; if aRequestor is nil, evaluate failBlock instead. The MethodNode is the root of a parse tree. It can be told to generate a CompiledMethod to be installed in the method dictionary of the argument, aClass." | methodNode | self from: textOrStream class: aClass classified: aCategory context: nil notifying: aRequestor. methodNode := self translate: sourceStream noPattern: false ifFail: failBlock. methodNode methodClass: aClass. ^methodNode. ! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:20'! compile: textOrStream in: aClass notifying: aRequestor ifFail: failBlock ^self compile: textOrStream in: aClass classified: nil notifying: aRequestor ifFail: failBlock ! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:20'! compileNoPattern: textOrStream in: aClass context: aContext notifying: aRequestor ifFail: failBlock "Similar to #compile:in:notifying:ifFail:, but the compiled code is expected to be a do-it expression, with no message pattern." self from: textOrStream class: aClass context: aContext notifying: aRequestor. ^self translate: sourceStream noPattern: true ifFail: failBlock! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:20'! evaluate: aString in: aContext to: aReceiver "evaluate aString in the given context, and return the result." | result | result := self evaluate: aString in: aContext to: aReceiver notifying: nil ifFail: [^ #failedDoit]. ^ result! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 12/17/2012 13:17'! evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock ^ self evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: false.! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/10/2013 16:16'! evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: logFlag "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | class := aContext == nil ifTrue: [receiver class ] ifFalse: [aContext method methodClass]. self from: textOrStream class: class context: aContext notifying: aRequestor. selectedSource := ((requestor respondsTo: #selection) and:[(itsSelection := requestor selection) notNil and:[(itsSelectionString := itsSelection asString) isEmptyOrNil not]]) ifTrue:[itsSelectionString readStream] ifFalse:[sourceStream]. methodNode := self translate: selectedSource noPattern: true ifFail: [^failBlock value]. method := self interactive ifTrue: [methodNode generateWithSource] ifFalse: [methodNode generate]. value := receiver withArgs: (context ifNil: [#()] ifNotNil: [{context}]) executeMethod: method. logFlag ifTrue:[SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: aContext]. ^ value! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/17/2012 10:11'! format: textOrStream in: aClass notifying: aRequestor "Compile a parse tree from the argument, textOrStream. Answer a string containing the original code, formatted nicely. If aBoolean is true, then decorate the resulting text with color and hypertext actions" | aNode | self from: textOrStream class: aClass context: nil notifying: aRequestor. aNode := self format: sourceStream noPattern: false ifFail: [^ nil]. ^ aNode decompileString! ! !OpalCompiler methodsFor: 'private' stamp: 'ClementBera 12/13/2012 11:18'! format: aStream noPattern: noPattern ifFail: failBlock ^(self parser parse: aStream class: class noPattern: noPattern context: context notifying: requestor ifFail: [^failBlock value]) preen! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:21'! from: textOrStream class: aClass classified: aCategory context: aContext notifying: req self from: textOrStream class: aClass context: aContext notifying: req. category := aCategory ! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 12/18/2012 17:43'! from: textOrStream class: aClass context: aContext notifying: req sourceStream := (textOrStream isKindOf: PositionableStream) ifTrue: [ textOrStream ] ifFalse: [ textOrStream asString readStream ]. class := aClass. context := aContext. requestor := req! ! !OpalCompiler methodsFor: 'error handling' stamp: 'MarcusDenker 4/12/2013 16:05'! interactive (requestor respondsTo: #interactive) ifTrue: [^ requestor interactive]. ^ UIManager default interactiveParserFor: requestor! ! !OpalCompiler methodsFor: 'error handling' stamp: 'ClementBera 12/13/2012 11:19'! notify: aString "Refer to the comment in Object|notify:." ^self notify: aString at: sourceStream position + 1! ! !OpalCompiler methodsFor: 'error handling' stamp: 'ClementBera 12/13/2012 11:19'! notify: aString at: location "Refer to the comment in Object|notify:." ^requestor == nil ifTrue: [SyntaxErrorNotification inClass: class category: category withCode: sourceStream contents doitFlag: false errorMessage: aString location: location] ifFalse: [requestor notify: aString at: location in: sourceStream]! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:21'! parse: textOrStream in: aClass notifying: req "Compile the argument, textOrStream, with respect to the class, aClass, and answer the MethodNode that is the root of the resulting parse tree. Notify the argument, req, if an error occurs. The failBlock is defaulted to an empty block." self from: textOrStream class: aClass context: nil notifying: req. ^self parser parse: sourceStream class: class noPattern: false context: context notifying: requestor ifFail: []! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 1/30/2013 13:15'! parse: aStream noPattern: noPattern | expression selector arguments method | noPattern ifFalse: [^RBParser parseMethod: aStream contents]. expression := (RBParser parseExpression: aStream contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=self rewriteTempNamedWrite: tempName forMethod: method. method :=self rewriteTempNamedRead: tempName forMethod: method. ]]. ^method ! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:21'! parser parser ifNil: [parser := self parserClass new]. ^parser! ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 12/13/2012 11:22'! parser: aParser parser := aParser! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 12/17/2012 13:28'! parserClass self flag: 'Compiler>>parserClass "Answer the class of parser. In future, should be replaced with this: " ^ parser ifNil: [(class ifNil: [self class]) parserClass] ifNotNil: [parser class] '. ^parser ifNil: [OCParser]. ! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 1/30/2013 12:42'! rewriteTempNamedRead: aTempName forMethod: aMethodNode | rewriter offset | offset := context tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName with: 'ThisContext namedTempAt:', offset asString. (rewriter executeTree: aMethodNode) ifTrue: [^rewriter tree] ifFalse: [^aMethodNode].! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 1/30/2013 12:42'! rewriteTempNamedWrite: aTempName forMethod: aMethodNode | rewriter offset | offset := context tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName, ' := ``@object' with: 'ThisContext namedTempAt:', offset asString, 'put: ``@object'. (rewriter executeTree: aMethodNode) ifTrue: [^rewriter tree] ifFalse: [^aMethodNode].! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/9/2013 11:02'! translate: aStream noPattern: noPattern ifFail: failBlock | aMethodNode | [ aMethodNode := self parse: aStream noPattern: noPattern] on: SyntaxErrorNotification, OCBackendError do: [:ex | self interactive ifTrue: [ requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ]. ^failBlock value]. ^aMethodNode doSemanticAnalysisIn: class interactive: self interactive notifying: requestor ! ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 34720655! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/9/2013 10:50'! defaultAction errorNotification ifFalse: [ ^nil ]. ^self openMenuIn: [:labels :lines :caption | UIManager default chooseFrom: labels lines: lines title: caption]! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'jb 6/30/2011 13:33'! errorNotification ^ errorNotification! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'jb 6/30/2011 13:33'! errorNotification: anObject errorNotification := anObject! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'jb 6/30/2011 13:29'! initialize errorNotification := false.! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/12/2013 14:23'! interactive (requestor respondsTo: #interactive) ifTrue: [^ requestor interactive]. ^ UIManager default interactiveParserFor: requestor! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 17:18'! methodClass ^variableNode methodNode methodClass! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 17:18'! methodNode ^variableNode methodNode! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 17:15'! notify: aString at: location "Refer to the comment in Object|notify:." ^requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [requestor notify: aString at: location in: requestor text]! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/8/2013 17:12'! requestor ^ requestor! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/8/2013 17:12'! requestor: anObject requestor := anObject! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/8/2013 17:18'! variableNode ^ variableNode! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:56'! variableNode: aVariableNode variableNode := aVariableNode.! ! !OCShadowVariableWarning commentStamp: 'ajh 3/24/2003 22:21' prior: 34720980! I get signalled when a variable in a block or method scope shadows a variable of the same name in an outer scope. The default action is to allow it.! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/9/2013 10:51'! defaultAction ^ self resume: (self variable: self variableNode shadows: self shadowedVar) ! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'ajh 3/19/2003 13:32'! shadowedVar ^ shadowedVar! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 10/11/2010 16:08'! shadowedVar: aVar shadowedVar := aVar! ! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 17:13'! variable: varNode shadows: semVar self interactive ifFalse: [ ^ Transcript show: '('; show: varNode name; show: ' is shadowed)'; yourself]. self notify: 'Name already defined --> ' at: varNode start! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:56'! variableNode: aVariableNode super variableNode: aVariableNode. messageText := 'Temp shadows: ', aVariableNode name. ! ! !OCUndeclaredVariableWarning commentStamp: '' prior: 34721199! I get signalled when a temporary variable is used that is not defined. My default action is to create an Undeclared binding and add it to the Undeclared dictionary.! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 16:32'! declareClassVar self methodClass theNonMetaClass addClassVarNamed: variableNode name asSymbol. ^ (variableNode owningScope lookupVar: variableNode name) ifNil: [self error: 'should be found']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 14:32'! declareGlobal Smalltalk at: variableNode name asSymbol put: nil. ^ (variableNode owningScope lookupVar: variableNode name) ifNil: [self error: 'should be not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 16:29'! declareInstVar: name "Declare an instance variable." self methodClass addInstVarNamed: name. "We are changing a class after the scope hierarchy was created, so we need to update the Instance Scope" self methodNode scope outerScope vars: self methodClass allInstVarNames. ^ (variableNode owningScope lookupVar: variableNode name) ifNil: [self error: 'should not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 16:32'! declareTempAndPaste: name | insertion delta theTextString characterBeforeMark tempsMark | theTextString := self methodNode source. tempsMark := self methodNode body leftBar ifNil: [ self methodNode body start ]. characterBeforeMark := theTextString at: tempsMark-1 ifAbsent: [$ ]. (theTextString at: tempsMark) = $| ifTrue: [ "Paste it before the second vertical bar" insertion := name, ' '. characterBeforeMark isSeparator ifFalse: [ insertion := ' ', insertion]. delta := 0. ] ifFalse: [ "No bars - insert some with CR, tab" insertion := '| ' , name , ' |',String cr. delta := 2. "the bar and CR" characterBeforeMark = Character tab ifTrue: [ insertion := insertion , String tab. delta := delta + 1. "the tab" ] ]. tempsMark := tempsMark + (self substituteWord: insertion wordInterval: (tempsMark to: tempsMark-1) offset: 0) - delta. self methodNode scope addTemp: name. ^ (variableNode owningScope lookupVar: variableNode name) ifNil: [self error: 'should not happen'] ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 14:44'! defineClass: className "Prompts the user to define a new class." | classSymbol systemCategory classDefinition | classSymbol := className asSymbol. systemCategory := self methodClass category ifNil: [ 'Unknown' ]. classDefinition := 'Object subclass: #' , classSymbol , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategory , ''''. classDefinition := UIManager default multiLineRequest: 'Edit class definition:' initialAnswer: classDefinition answerHeight: 150. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self fail ]. self class evaluatorClass evaluate: classDefinition. ^ (variableNode owningScope lookupVar: className) ifNil: [self error: 'should be not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 15:38'! openMenuIn: aBlock | alternatives labels actions lines caption choice name interval | interval := variableNode sourceInterval. name := variableNode name. alternatives := self possibleVariablesFor: name. labels := OrderedCollection new. actions := OrderedCollection new. lines := OrderedCollection new. name first isLowercase ifTrue: [labels add: 'Declare new temporary variable'. actions add: [self declareTempAndPaste: name]. labels add: 'Declare new instance variable'. actions add: [self declareInstVar: name]] ifFalse: [labels add: 'Define new class'. actions add: [self defineClass: name]. labels add: 'Declare new global'. actions add: [self declareGlobal]. labels add: 'Declare new class variable'. actions add: [self declareClassVar]]. lines add: labels size. alternatives do: [:each | labels add: each. actions add: [self substituteVariable: each atInterval: interval]]. lines add: labels size. labels add: 'Cancel'. caption := 'Unknown variable: ' , name , ' please correct, or cancel:'. choice := aBlock value: labels value: lines value: caption. choice ifNotNil: [self resume: (actions at: choice ifAbsent: [nil]) value]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 14:27'! possibleVariablesFor: proposedVariable | results class | class := variableNode methodNode methodClass . results := proposedVariable correctAgainst: variableNode temporaryVariables continuedFrom: nil. proposedVariable first canBeGlobalVarInitial ifTrue: [ results := class possibleVariablesFor: proposedVariable continuedFrom: results ]. ^ proposedVariable correctAgainst: nil continuedFrom: results. ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 17:01'! substituteVariable: varName atInterval: anInterval self substituteWord: varName wordInterval: anInterval offset: 0. self methodNode source: requestor text. variableNode replaceWith:((RBVariableNode named: varName) ocBinding: (variableNode owningScope lookupVar: varName)). ^ (variableNode owningScope lookupVar: varName) ifNil: [self error: 'should be found']. ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/8/2013 15:25'! substituteWord: correctWord wordInterval: spot offset: o "Substitute the correctSelector into the (presuamed interactive) receiver." requestor correctFrom: (spot first + o) to: (spot last + o) with: correctWord. ^ o + correctWord size - spot size! ! !OCUndeclaredVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:57'! variableNode: aVariableNode super variableNode: aVariableNode. messageText := 'Undeclared temp: ', aVariableNode name. ! ! !OCUninitializedVariableWarning commentStamp: 'ajh 3/24/2003 22:34' prior: 34721444! I get signalled when a temporary variable is used before it is assigned to. My default action is to allow it since all temps get initialized to nil.! !OCUninitializedVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/10/2013 16:00'! openMenuIn: aBlock | caption index | caption := variableNode name, ' appears to be uninitialized at this point. Proceed anyway?'. index := aBlock value: #('yes' 'no') value: #() value: caption. ^ self resume: index = 1! ! !OCUninitializedVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:57'! variableNode: aVariableNode super variableNode: aVariableNode. messageText := 'Uninitialized temp: ', aVariableNode name. ! ! !OCUnknownSelectorWarning commentStamp: 'ajh 3/24/2003 22:23' prior: 34721667! I get signalled when no selector is defined for a message send, indicating a possible mispelling. My default action is to create a new selector.! !OCUnknownSelectorWarning methodsFor: 'accessing' stamp: 'ajh 3/11/2003 22:43'! messageNode ^ messageNode! ! !OCUnknownSelectorWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:55'! messageNode: aMessageNode messageNode := aMessageNode. messageText := 'Unknown selector: ', aMessageNode selector. ! ! !OCUnknownSelectorWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/9/2013 09:58'! openMenuIn: aBlock | alternatives labels lines caption choice name | name := messageNode selector. alternatives := Symbol possibleSelectorsFor: name. labels := Array streamContents: [:s | s nextPut: name; nextPutAll: alternatives; nextPut: 'cancel']. lines := {1. alternatives size + 1}. caption := 'Unknown selector, please\confirm, correct, or cancel' withCRs. choice := aBlock value: labels value: lines value: caption. choice = 0 ifTrue: [self resume: nil]. choice = 1 ifTrue: [self resume: name asSymbol]. choice = labels size ifTrue: [self resume: nil]. self resume: (alternatives at: choice - 1)! ! !OCUnusedVariableWarning commentStamp: 'ajh 3/24/2003 22:35' prior: 34721885! I get signalled when a temporary variable is declared but never used. My default action is to allow it since it is benign.! !OCUnusedVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/9/2013 10:36'! openMenuIn: aBlock | index | index := aBlock value: #('yes' 'no') value: #() value: (variableNode name) asWideString, ' appears to be unused in this method. OK to remove it?' withCRs . self resume: index = 1! ! !OCUnusedVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 4/9/2013 19:57'! variableNode: aVariableNode super variableNode: aVariableNode. messageText := 'Unused temp: ', aVariableNode name. ! ! !OCKeyedSet commentStamp: '' prior: 34722061! Like Set except a key of every element is used for hashing and searching instead of the element itself. keyBlock gets the key of an element.! !OCKeyedSet class methodsFor: 'instance creation' stamp: 'ajh 10/23/2000 23:16'! keyBlock: oneArgBlock "Create a new KeySet whose way to access an element's key is by executing oneArgBlock on the element" ^ self new keyBlock: oneArgBlock! ! !OCKeyedSet methodsFor: 'adding' stamp: 'md 3/14/2006 12:37'! add: newObject "Include newObject as one of the receiver's elements, but only if not already present. Answer newObject." | index | newObject ifNil: [self error: 'Sets cannot meaningfully contain nil as an element']. index := self findElementOrNil: (keyBlock value: newObject). (array at: index) ifNil: [self atNewIndex: index put: newObject]. ^ newObject! ! !OCKeyedSet methodsFor: 'adding' stamp: 'ajh 12/4/2001 05:27'! addAll: aCollection "Include all the elements of aCollection as the receiver's elements" (aCollection respondsTo: #associationsDo:) ifTrue: [aCollection associationsDo: [:ass | self add: ass]] ifFalse: [aCollection do: [:each | self add: each]]. ^ aCollection! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'ajh 9/5/2000 03:57'! at: key "Answer the value associated with the key." ^ self at: key ifAbsent: [self errorKeyNotFound]! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'MarcusDenker 8/18/2010 19:13'! at: key ifAbsent: aBlock "Answer the value associated with the key or, if key isn't found, answer the result of evaluating aBlock." ^(array at: (self findElementOrNil: key)) ifNil: [aBlock value] ifNotNil: [:o | o]. ! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'ajh 12/10/2000 15:42'! at: key ifAbsentPut: aBlock "Answer the value associated with the key or, if key isn't found, add the result of evaluating aBlock to self" ^ self at: key ifAbsent: [self add: aBlock value]! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'ajh 9/5/2000 03:58'! at: key ifPresent: aBlock "Lookup the given key in the receiver. If it is present, answer the value of evaluating the given block with the value associated with the key. Otherwise, answer nil." | v | v := self at: key ifAbsent: [^ nil]. ^ aBlock value: v ! ! !OCKeyedSet methodsFor: 'copying' stamp: 'nice 6/16/2009 20:56'! copyEmpty ^super copyEmpty keyBlock: keyBlock copy! ! !OCKeyedSet methodsFor: 'private' stamp: 'ajh 3/29/2001 19:04'! errorKeyNotFound self error: 'key not found'! ! !OCKeyedSet methodsFor: 'private' stamp: 'MarcusDenker 8/12/2010 15:55'! fixCollisionsFrom: start "The element at start has been removed and replaced by nil. This method moves forward from there, relocating any entries that had been placed below due to collisions with this one" | element index | index := start. [ (element := array at: (index := index \\ array size + 1)) isNil ] whileFalse: [ | newIndex | (newIndex := self findElementOrNil: (keyBlock value: element)) = index ifFalse: [ array swap: index with: newIndex ] ]! ! !OCKeyedSet methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 11:38'! includes: anObject ^ (array at: (self findElementOrNil: (keyBlock value: anObject))) notNil! ! !OCKeyedSet methodsFor: 'testing' stamp: 'MarcusDenker 8/13/2010 11:38'! includesKey: key ^ (array at: (self findElementOrNil: key)) notNil! ! !OCKeyedSet methodsFor: 'private' stamp: 'MarcusDenker 8/20/2010 11:22'! initialize: n super initialize: n. keyBlock := [:element | element key]. ! ! !OCKeyedSet methodsFor: 'initialize' stamp: 'ajh 9/5/2000 03:36'! keyBlock: oneArgBlock "When evaluated return the key of the argument which will be an element of the set" keyBlock := oneArgBlock! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'ajh 7/3/2004 17:55'! keys | keys | keys := Set new. self keysDo: [:key | keys add: key]. ^ keys! ! !OCKeyedSet methodsFor: 'accessing' stamp: 'ajh 7/3/2004 17:54'! keysDo: block self do: [:item | block value: (keyBlock value: item)]! ! !OCKeyedSet methodsFor: 'adding' stamp: 'MarcusDenker 5/12/2011 13:43'! like: anObject "Answer an object in the receiver that is equal to anObject, nil if no such object is found. Relies heavily on hash properties" | index | ^(index := self scanFor: (keyBlock value: anObject)) = 0 ifFalse: [array at: index] ifTrue: [nil]! ! !OCKeyedSet methodsFor: 'adding' stamp: 'ajh 6/3/2002 10:11'! member: newObject "Include newObject as one of the receiver's elements, if already exists just return it" | index | newObject ifNil: [self error: 'Sets cannot meaningfully contain nil as an element']. index := self findElementOrNil: (keyBlock value: newObject). (array at: index) ifNotNil: [^ array at: index]. self atNewIndex: index put: newObject. ^ newObject! ! !OCKeyedSet methodsFor: 'private' stamp: 'ajh 9/5/2000 03:46'! noCheckAdd: anObject array at: (self findElementOrNil: (keyBlock value: anObject)) put: anObject. tally := tally + 1! ! !OCKeyedSet methodsFor: 'private' stamp: 'ajh 12/13/2001 00:17'! rehash | newSelf | newSelf := self species new: self size. newSelf keyBlock: keyBlock. self do: [:each | newSelf noCheckAdd: each]. array := newSelf array! ! !OCKeyedSet methodsFor: 'removing' stamp: 'MarcusDenker 8/12/2010 15:55'! remove: oldObject ifAbsent: aBlock | index | index := self findElementOrNil: (keyBlock value: oldObject). (array at: index) ifNil: [ ^ aBlock value ]. array at: index put: nil. tally := tally - 1. self fixCollisionsFrom: index. ^ oldObject! ! !OCKeyedSet methodsFor: 'removing' stamp: 'nice 12/30/2008 19:01'! removeAll "See super." | tmp | tmp := keyBlock. super removeAll. keyBlock := tmp! ! !OCKeyedSet methodsFor: 'removing' stamp: 'ajh 3/29/2001 19:03'! removeKey: key ^ self removeKey: key ifAbsent: [self errorKeyNotFound]! ! !OCKeyedSet methodsFor: 'removing' stamp: 'MarcusDenker 8/12/2010 15:55'! removeKey: key ifAbsent: aBlock | index obj | index := self findElementOrNil: key. (obj := array at: index) ifNil: [ ^ aBlock value ]. array at: index put: nil. tally := tally - 1. self fixCollisionsFrom: index. ^ obj! ! !OCKeyedSet methodsFor: 'private' stamp: 'MarcusDenker 8/12/2010 15:55'! scanFor: anObject "Scan the key array for the first slot containing either a nil (indicating an empty slot) or an element that matches anObject. Answer the index of that slot or zero if no slot is found. This method will be overridden in various subclasses that have different interpretations for matching elements." | element start finish | finish := array size. start := (anObject hash \\ finish) + 1. "Search from (hash mod size) to the end." start to: finish do: [:index | ((element := array at: index) isNil or: [(keyBlock value: element) = anObject]) ifTrue: [^ index ]]. "Search from 1 to where we started." 1 to: start-1 do: [:index | ((element := array at: index) isNil or: [(keyBlock value: element) = anObject]) ifTrue: [^ index ]]. ^ 0 "No match AND no empty slot"! ! !OCLiteralSet commentStamp: 'ajh 3/25/2003 00:33' prior: 34722264! Holds a unique set of literals. Literal objects are equal if they are #= plus they are the same class. This set uses this rule for finding elements. Example: Set new add: 'anthony'; add: #anthony; size "= 1" LiteralSet new add: 'anthony'; add: #anthony; size "= 2" ! !OCLiteralSet methodsFor: 'adding' stamp: 'ajh 12/9/2001 16:03'! add: newObject "Include newObject as one of the receiver's elements. If equivalent is already present don't add and return equivalent object" | index | newObject ifNil: [self error: 'Sets cannot meaningfully contain nil as an element']. index := self findElementOrNil: newObject. ^ (array at: index) ifNil: [self atNewIndex: index put: newObject. newObject] ifNotNil: [array at: index]! ! !OCLiteralSet methodsFor: 'private' stamp: 'MarcusDenker 8/12/2010 15:54'! scanFor: anObject "Scan the key array for the first slot containing either a nil (indicating an empty slot) or an element that matches anObject. Answer the index of that slot or zero if no slot is found. This method will be overridden in various subclasses that have different interpretations for matching elements." | element start finish | start := (anObject hash \\ array size) + 1. finish := array size. "Search from (hash mod size) to the end." start to: finish do: [:index | ((element := array at: index) isNil or: [element literalEqual: anObject]) ifTrue: [^ index ]]. "Search from 1 to where we started." 1 to: start-1 do: [:index | ((element := array at: index) isNil or: [element literalEqual: anObject]) ifTrue: [^ index ]]. ^ 0 "No match AND no empty slot"! ! !OCAbstractNotification class methodsFor: 'exceptioninstantiator' stamp: 'MarcusDenker 2/6/2013 16:02'! inClass: aClass category: aCategory withCode: codeString doitFlag: doitFlag ^ (self new setClass: aClass category: aCategory code: codeString doitFlag: doitFlag) signal! ! !OCAbstractNotification class methodsFor: 'exceptionInstantiator' stamp: 'MarcusDenker 2/6/2013 16:02'! inClass: aClass category: aCategory withCode: codeString doitFlag: doitFlag errorMessage: errorString location: location ^ (self new setClass: aClass category: aCategory code: codeString doitFlag: doitFlag errorMessage: errorString location: location) signal! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! category ^category! ! !OCAbstractNotification methodsFor: 'exceptiondescription' stamp: 'MarcusDenker 2/6/2013 16:02'! defaultAction ^ UIManager default syntaxErrorNotificationDefaultAction: self! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! doitFlag ^doitFlag! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! errorClass ^inClass! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! errorCode ^code! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! errorMessage ^errorMessage! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! location ^location! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! messageText ^ super messageText ifNil: [messageText := code]! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! setClass: aClass category: aCategory code: codeString doitFlag: aBoolean inClass := aClass. category := aCategory. code := codeString. doitFlag := aBoolean ! ! !OCAbstractNotification methodsFor: 'accessing' stamp: 'MarcusDenker 2/6/2013 16:02'! setClass: aClass category: aCategory code: codeString doitFlag: aBoolean errorMessage: errorString location: anInteger inClass := aClass. category := aCategory. code := codeString. doitFlag := aBoolean. errorMessage := errorString. location := anInteger! ! !OCBackendError commentStamp: '' prior: 34722593! I am raised by the backend for errors related to VM contraints like too many ivars, too many arguments...! "OpalCompiler-Core"! !OCScopesCollector commentStamp: '' prior: 0! I am a helper class to simplify tests related to scopes. I collect all scopes of the AST. This way one can easily check for scopes and variables even when the scopes are deeply nested. Simple example (with just a method scope): |ast scopes ivar| ast := (OCOpalExamples>>#exampleiVar) parseTree doSemanticAnalysisIn: OCOpalExamples. scopes := (OCScopesCollector new visitNode: ast) scopes. ivar := scopes first lookupVar: #iVar! !OCOpalExamples commentStamp: '' prior: 0! I am the central place for example code used in tests! !OCPerformTest commentStamp: 'HenrikSperreJohansen 5/19/2010 02:33' prior: 0! I test a primitive failure with perform:withArguments: which was raised when selectors with many arguments was called from methods with small stack sizes.! !OCSourceCode2BytecodeTest commentStamp: 'kwl 10/14/2006 10:43' prior: 0! I provide at least one test which corresponds to a message sent by InstructionStream>>#interpretNextInstructionFor: to its client.! !OCScopesCollector commentStamp: '' prior: 34979871! I am a helper class to simplify tests related to scopes. I collect all scopes of the AST. This way one can easily check for scopes and variables even when the scopes are deeply nested. Simple example (with just a method scope): |ast scopes ivar| ast := (OCOpalExamples>>#exampleiVar) parseTree doSemanticAnalysisIn: OCOpalExamples. scopes := (OCScopesCollector new visitNode: ast) scopes. ivar := scopes first lookupVar: #iVar! !OCScopesCollector methodsFor: 'intializing' stamp: 'JorgeRessia 9/7/2010 16:20'! initialize scopes := OrderedCollection new. super initialize! ! !OCScopesCollector methodsFor: 'accessing' stamp: 'JorgeRessia 9/7/2010 16:21'! scopes ^scopes! ! !OCScopesCollector methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitBlockNode: aBlockNode scopes add: aBlockNode owningScope. super visitBlockNode: aBlockNode! ! !OCScopesCollector methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/11/2013 15:12'! visitMethodNode: aMethodNode scopes add: aMethodNode owningScope. super visitMethodNode: aMethodNode! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:13'! exampleSimpleTemp | b | b := 1. ^(DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:00'! exampleTempNamedCopying | b | b := 1. ^[ | a | a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 16:57'! exampleTempNamedCopying2 | b | b := 1. ^[ | a | a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:02'! exampleTempNamedPutCopying | b | b := 1. ^[ | a | a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext put: 2. thisContext tempNamed: 'b' ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:03'! exampleTempNamedPutCopying2 | b | b := 1. ^[ | a | a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext put: 2. thisContext outerContext tempNamed: 'b' ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:04'! exampleTempNamedPutTempVector | b | b := 1. ^[ | a | b := 2 . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext put: 3. thisContext tempNamed: 'b' ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:05'! exampleTempNamedPutTempVector2 | b | b := 1. ^[ | a | b := 2 . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext put: 3. thisContext outerContext tempNamed: 'b' ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:19'! exampleTempNamedTempCopyingNestedBlock ^[| b | b := 1. [ | a | a := 2. a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:38'! exampleTempNamedTempCopyingNestedBlockPROBLEM | a | a := 2. ^[| b | b := 1. [ a := b . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 16:54'! exampleTempNamedTempVector | b | b := 1. ^[ | a | b := 2 . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 16:56'! exampleTempNamedTempVector2 | b | b := 1. ^[ | a | b := 2 . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext outerContext ] value! ! !MethodMapExamples methodsFor: 'examples' stamp: 'MarcusDenker 12/19/2012 17:07'! exampleTempNamedTempVectorNestedBlock | a | a := 1. ^[| b | b := a. [ b := 2 . (DebuggerMethodMapOpal forMethod: thisContext method) tempNamed: 'b' in: thisContext ] value] value! ! !OCOpalExamples commentStamp: '' prior: 34980358! I am the central place for example code used in tests! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! doubleRemoteAnidatedBlocks | val last | val := 0. 1 to: 10 do: [ :i | [ :continue | i = 4 ifTrue: [continue value]. val := val + 1. last := i ] valueWithExit. ]. self assert: val = 9. self assert: last = 10. ! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/25/2010 13:32'! exampleBlockArgument | block block1 block2 | block := [ :arg | | temp | temp := arg. [ temp ] ]. block1 := block value: 1. block2 := block value: 2. self assert: block1 value = 1. self assert: block2 value = 2. ^block1 value + block2 value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 15:04'! exampleBlockExternal | t | t := 1. ^[t] value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleBlockExternal2 | t1 t2 | t1 := t2 := 1. ^[t1 + t2] value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleBlockExternalArg | t | t := 1. ^[:a | t + a] value: 1.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleBlockExternalNested | t s | t := s := 1. ^[[s] value + t ] value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleBlockInternal ^[ | t | t := 1. t] value! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 2/3/2011 10:26'! exampleBlockMethodArgument: arg | block | block := [ :blockarg | blockarg + arg]. self assert: ((block value: 2) = (arg + 2)). ^block value: 2! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/21/2010 16:26'! exampleBlockNested ^[ [1] value] value! ! !OCOpalExamples methodsFor: 'examples-pragmas' stamp: 'MarcusDenker 5/13/2011 14:41'! exampleDoublePrimitive ! ! !OCOpalExamples methodsFor: 'examples-simple' stamp: 'MarcusDenker 8/21/2010 15:59'! exampleEmptyMethod! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 16:29'! exampleIfFalse true ifFalse: [^1]. ^2! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 16:29'! exampleIfFalseIfTrue true ifFalse: [^1] ifTrue: [^2].! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/21/2010 13:30'! exampleIfNotNilArg ^1 even ifNotNil: [ :arg | arg not ]! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleIfNotNilDo ^1 even ifNotNilDo: [ :arg | arg not ]! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/20/2010 16:10'! exampleIfNotNilDoReturnNil ^nil ifNotNilDo: [ :arg | arg not ]! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/21/2010 13:29'! exampleIfNotNilReturnNil ^nil ifNotNil: [ :arg | arg not ]! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 6/5/2012 17:11'! exampleIfTrue 1 < 2 ifTrue: [^'result']. ! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 2/3/2011 12:19'! exampleIfTrueAssign | a | a := 1 <2 ifTrue: [1] ifFalse: [2]. ^a ! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 6/5/2012 17:15'! exampleIfTrueIfFalse 1 <2 ifTrue: [^'result'] ifFalse: [2]. ! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 2/3/2011 15:04'! exampleInlineBlockCollectionLR3 | col | col := OrderedCollection new. 1 to: 11 do: [ :each | | i | i := each. col add: [ i ]. i := i + 1 ]. ^ (col collect: [ :each | each value ]) asArray "= (2 to: 12) asArray" ! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/25/2010 13:31'! exampleMethodTempInNestedBlock | temp block | temp := 0. block := [ [ temp ] ]. temp := 1. block := block value. temp := 2. "self assert: block value = 2." ^block value.! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 16:20'! exampleMethodWithOptimizedBlocksA | s c | s := self isNil ifTrue: [| a | a := 'isNil'. a] ifFalse: [| a | a := 'notNil'. a]. c := String new: s size. 1 to: s size do: [:i| c at: i put: (s at: i)]. ^c. "notNil"! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/25/2010 13:42'! exampleNestedBlockScoping | b c z | b := [:a | z := 2. z + a]. c := [:a | z + a]. ^ (b value: 2) + (c value: 1)! ! !OCOpalExamples methodsFor: 'examples-simple' stamp: 'MarcusDenker 8/20/2010 21:00'! exampleNewArray | temp | temp := Array new: 3. ^temp! ! !OCOpalExamples methodsFor: 'examples-pragmas' stamp: 'MarcusDenler 12/10/2012 15:53'! examplePrimitiveErrorCode ^ code ! ! !OCOpalExamples methodsFor: 'examples-pragmas' stamp: 'MarcusDenler 12/10/2012 15:27'! examplePrimitiveErrorCodeModule "Primitive. Attempt to load a module of the given name. Fail if module cannot be found, or cannot be loaded, or failed to initialize" ^ self primitiveFailed! ! !OCOpalExamples methodsFor: 'examples-misc' stamp: 'MarcusDenker 10/12/2010 12:27'! examplePushArray | t | {1 .t:=1}. ^t! ! !OCOpalExamples methodsFor: 'examples-simple' stamp: 'MarcusDenker 8/20/2010 15:07'! exampleReturn1 ^1! ! !OCOpalExamples methodsFor: 'examples-simple' stamp: 'MarcusDenker 8/20/2010 20:25'! exampleReturn1plus2 ^1+2! ! !OCOpalExamples methodsFor: 'examples-variables' stamp: 'MarcusDenker 9/1/2010 14:42'! exampleSelf | t | t := self. ^self.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlock ^[1].! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockArgument1 ^[:a | a ] value: 1.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockArgument2 ^[:a :b | a + b ] value: 1 value: 1.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockArgument3 ^[:a :b :c | a + b + c ] value: 1 value: 1 value: 1.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockArgument4 ^[:a :b :c :d | a + b + c + d] value: 1 value: 1 value: 1 value: 1. ! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockArgument5 ^[:a :b :c :d :e| a + b + c + d + e] valueWithArguments: #(1 1 1 1 1). ! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/21/2010 15:57'! exampleSimpleBlockEmpty ^[] value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockLocal ^[ :each | | t | t:= each. t ] value: 5.! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockLocalIf ^true ifTrue: [ | hallo | hallo := 1 . hallo].! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockLocalIfNested ^true ifTrue: [| hallo | [ hallo := 1 . hallo] value] .! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockLocalWhile |a| a := true. ^[: b | [a] whileTrue: [ | hallo | a := false. hallo := 1 . hallo]]value: 1.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockNested | a match dict | a := #(a b c d). dict := Dictionary new. a doWithIndex: [:each :index | (match := a indexOf: each) > 0 ifTrue: [dict at: index put: (a at: match)]]. ^ dict.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/21/2010 15:05'! exampleSimpleBlockReturn [^1] value.! ! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 8/20/2010 16:09'! exampleSimpleBlockiVar ^[iVar] value.! ! !OCOpalExamples methodsFor: 'examples-variables' stamp: 'MarcusDenker 9/1/2010 15:25'! exampleSuper | t | t := super. ^super.! ! !OCOpalExamples methodsFor: 'examples-variables' stamp: 'MarcusDenker 9/1/2010 15:25'! exampleThisContext | t | t := thisContext. ^thisContext.! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 9/22/2010 11:14'! exampleToDoArgument collection := OrderedCollection new. 1 to: 5 do: [ :index | collection add: [index] ]. ^collection collect: #value. "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 12/7/2012 15:11'! exampleToDoArgumentLimitIsExpression | count sum | count := 10. sum := 0. 1 to: count - 1 do: [ :each | sum := sum + each]. ^sum! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:52'! exampleToDoArgumentNotInlined | block | block := [ :index | collection add: [ index ] ]. 1 to: 5 do: block. ^collection "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:55'! exampleToDoInsideTemp 1 to: 5 do: [ :index | | temp | temp := index. collection add: [ temp ] ]. ^collection "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:54'! exampleToDoInsideTempNotInlined | block | block := [ :index | | temp | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. ^collection "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:53'! exampleToDoOutsideTemp | temp | 1 to: 5 do: [ :index | temp := index. collection add: [ temp ] ]. ^collection "#(5 5 5 5 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:53'! exampleToDoOutsideTempNotInlined | block temp | block := [ :index | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. ^collection "#(5 5 5 5 5)"! ! !OCOpalExamples methodsFor: 'examples-misc' stamp: 'MarcusDenker 12/5/2012 15:52'! exampleToDoValue ^ 1 to: 2 do: [:each | each] ! ! !OCOpalExamples methodsFor: 'examples-misc' stamp: 'MarcusDenker 12/5/2012 16:16'! exampleToDoValueLimitExpression ^ 2 to: 3+4 do: [:each | each] ! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:51'! exampleWhileModificationAfterNotInlined | index block | index := 0. block := [ collection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. ^collection "#(5 5 5 5 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 9/22/2010 11:14'! exampleWhileModificationBefore | index | collection := OrderedCollection new. index := 0. [ index < 5 ] whileTrue: [ index := index + 1. collection add: [ index ] ]. ^collection collect: #value. "#(5 5 5 5 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:49'! exampleWhileModificationBeforeNotInlined | index block | index := 0. block := [ index := index + 1. collection add: [ index ] ]. [ index < 5 ] whileTrue: block. ^collection. "#(5 5 5 5 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:49'! exampleWhileWithTemp | index | index := 0. [ index < 5 ] whileTrue: [ | temp | temp := index := index + 1. collection add: [ temp ] ]. ^collection "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'MarcusDenker 8/25/2010 13:47'! exampleWhileWithTempNotInlined | index block | index := 0. block := [ | temp | temp := index := index + 1. collection add: [ temp ] ]. [ index < 5 ] whileTrue: block. ^collection "#(1 2 3 4 5)"! ! !OCOpalExamples methodsFor: 'examples-variables' stamp: 'MarcusDenker 8/20/2010 15:22'! exampleiVar iVar := 1. ^iVar.! ! !OCOpalExamples methodsFor: 'intialize' stamp: 'MarcusDenker 8/25/2010 15:49'! initialize collection := OrderedCollection new! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! nestedBlocksRemoteInBlockCase1 | block | block := [ | a b | [ a := b ]. [ b := a ] ]! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! nestedBlocksRemoteInBlockCase2 | block | block := [ [ |a| [ a := 1] ]. [ |b| [ b := 2] ] ]! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 15:47'! nestedBlocksRemoteInBlockCase3 | block | block := [ [ |a| block := [ a := 1] ]. [ |b| block := [ b := 2] ] ].! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! noRemoteBlockArgument | block block1 block2 | block := [ :arg | | temp | temp := arg. [ temp ] ]. block1 := block value: 1. block2 := block value: 2. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! noRemoteBlockReturn (self announcements at: self index ifAbsent: [ ^ self ]) open. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! noRemoteBlockTemp | block block1 block2 | block := [ :arg | [ arg ] ]. block1 := block value: 1. block2 := block value: 2. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! noRemoteMethodTemp | block1 block2 | block1 := self methodArgument: 1. block2 := self methodArgument: 2. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:42'! noRemoteReadInBlock | a | a := 1. [ a ] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! noRemoteReadNestedBlocks [ |a| a := 1. [ a ]] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockReadInBlock | t1 | [ t1 < 5 ] whileTrue: [ [ t1 ] ]. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteInBlock | t1 | [ t1 < 5 ] whileTrue: [ t1 := 1 ]. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteInNestedBlock | t1 | ^[ [ t1 < 5 ] whileTrue: [ t1 := 1 ] ] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteInNestedBlockCase2 | t1 | (true) ifTrue: [ [ t1 < 5 ] whileTrue: [ t1 := 1 ] ] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteInNestedBlockCase3 | t1 | [(true) ifTrue: [ [ t1 < 5 ] whileTrue: [ t1 := 1 ] ] ] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteInNestedBlockCase4 | t1 | [(true) whileTrue: [ [ t1 < 5 ] whileTrue: [ t1 := 1 ] ] ] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWriteReadInBlock | t1 | [ t1 < 5 ] whileTrue: [ t1 := 1. [ t1 ] ]. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenler 12/11/2012 15:02'! optimizedBlockWrittenAfterClosedOverCase1 | index | index := 0. [ index < 5 ] whileTrue: [ | temp | [ temp ]. temp := index := index + 1]. ^index ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlockWrittenAfterClosedOverCase2 | index | index := 0. [ index < 5 ] whileTrue: [ | temp | temp := index := index + 1. [ temp ] ]. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! optimizedBlocksAndSameNameTemps | s c | s := self isNil ifTrue: [| a | a := 1. a] ifFalse: [| a | a := 2. a]. c := String new: s size. 1 to: s size do: [:i| c at: i put: (s at: i)]. ^c! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! singleRemoteDifferentBlocksSameArgumentName | b c z | b := [:a | z := 2. z + a]. c := [:a | z + a]. ^ (b value: 2) + (c value: 1) ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! singleRemoteMethodArgument | temp block | temp := 0. block := [ [ temp ] ]. temp := 1. block := block value. temp := 2. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! singleRemoteReadNestedBlocks |a| [ a := 1. [ a ]] ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! singleRemoteTempVar | index block collection | index := 0. block := [ collection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! singleRemoteTempVarWrittenAfterClosedOver | index block collection | index := 0. block := [ index ]. index := index + 1. ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/2/2012 10:43'! writtenAfterClosedOver | a | [ a ]. a := 1! ! !IRBuilderTest class methodsFor: 'accessing' stamp: 'ms 7/12/2006 18:43'! testToPush ^TestToPush! ! !IRBuilderTest class methodsFor: 'accessing' stamp: 'ms 7/12/2006 18:43'! testToPush: anObject TestToPush := anObject! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:50'! testDup | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 3; pushDup; send: #=; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: (aCompiledMethod valueWithReceiver: nil arguments: #() ). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:48'! testInstVar | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushInstVar: 1; pushInstVar: 2; send: #+; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: (3@4) arguments: #() ) = 7). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/20/2010 22:46'! testJumpAheadTo | iRMethod aCompiledMethod iRBuilder | iRBuilder := IRBuilder new. iRMethod := iRBuilder pushLiteral: 2; pushLiteral: 1; send: #+; jumpAheadTo: #end; pushLiteral: 3; jumpAheadTarget: #end; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: (aCompiledMethod valueWithReceiver: nil arguments: #()) = 3. ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 6/19/2012 14:57'! testJumpAheadToIf | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushLiteral: true; jumpAheadTo: #end if: true; returnTop; jumpAheadTarget: #end; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) isNil). ^iRMethod. ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 19:49'! testJumpBackTo | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushLiteral: false; jumpBackTarget: #begin; jumpAheadTo: #end if: true; pushLiteral: true; jumpBackTo: #begin; jumpAheadTarget: #end; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) isNil). ^iRMethod. ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:58'! testLiteralArray | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: #(test 4 you); returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = #(test 4 you)). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:52'! testLiteralBoolean | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: true; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() )). ^iRMethod. ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:59'! testLiteralCharacter | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: $e; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = $e). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:58'! testLiteralFloat | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 2.0; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) closeTo: 2.0). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:59'! testLiteralInteger | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:45'! testLiteralNil | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: nil; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: 4 arguments: #() ) isNil). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:45'! testLiteralString | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 'hello'; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 'hello'). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:45'! testLiteralSymbol | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: #you; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = #you). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:45'! testLiteralVariableClass | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteralVariable: Object binding; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = Object). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:45'! testLiteralVariableClassVariable | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteralVariable: (DateAndTime bindingOf: #LocalTimeZone); returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = DateAndTime localTimeZone). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 11/11/2011 15:40'! testLiteralVariableGlobale | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteralVariable: (Smalltalk globals associationAt: #Smalltalk); returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = Smalltalk). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 19:01'! testPopTop | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushLiteral: false; popTop; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) isNil). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:22'! testPushClosureCopyNoCopied | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushClosureCopyCopiedValues: #() args: #() jumpTo: #block; pushLiteral: 1; pushLiteral: 2; send: #+; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 3). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:22'! testPushClosureCopyNoCopiedArg | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushClosureCopyCopiedValues: #() args: #(d) jumpTo: #block; pushLiteral: 1; pushTemp: #d; send: #+; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 10:38'! testPushClosureCopyNoCopiedArgNamed | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; pushClosureCopyCopiedValues: #() args: #(d) jumpTo: #block; pushLiteral: 1; pushTemp: #d; send: #+; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:22'! testPushClosureCopyOneCopied | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(c a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #() jumpTo: #block; pushTemp: #a; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 1). ^iRMethod! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:22'! testPushClosureCopyOneCopiedArg | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(c a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #(d) jumpTo: #block; pushTemp: #a; pushTemp: #d; send: #+; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:21'! testPushClosureCopyOneCopiedTemp | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(c a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #() jumpTo: #block; addTemps: #(d); "the temp" pushTemp: #a; pushLiteral: 1; send: #+; storeTemp: #d; popTop; pushTemp: #d; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:25'! testPushClosureCopyOneCopiedTempArg | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(c a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #(e) jumpTo: #block; addTemps: #(d); "the temp" pushTemp: #a; pushTemp: #e; send: #+; storeTemp: #d; popTop; pushTemp: #d; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:49'! testPushConsArray | iRMethod aCompiledMethod receiver | iRMethod := IRBuilder new pushReceiver; pushConsArray: 1; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. receiver := (5@8). self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: receiver arguments: #()) first == receiver). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:49'! testPushConsArray2 | iRMethod aCompiledMethod receiver | iRMethod := IRBuilder new pushLiteral: 'hi!!'; pushConsArray: 1; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. receiver := (5@8). self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: (((aCompiledMethod valueWithReceiver: receiver arguments: #()))= #('hi!!')). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:49'! testPushNewArray | iRMethod aCompiledMethod receiver | iRMethod := IRBuilder new pushNewArray: 1; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. receiver := (5@8). self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: receiver arguments: #()) first isNil). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:46'! testPushSelf | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; send: #class; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) == UndefinedObject). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:46'! testPushTempArgument | iRMethod aCompiledMethod | iRMethod := IRBuilder new numArgs: 2; addTemps: #(a b); pushTemp: #a; pushTemp: #b; send: #+; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #(2 8) ) = 10). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:47'! testPushTempTemp | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(a); pushTemp: #a; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: 5 arguments: #() ) isNil). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/20/2010 22:42'! testPushThisContext | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushThisContext; send: #receiver; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: 5 arguments: #() ) = 5). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:20'! testRemoteTemp | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(a c); "we have one real temp" createTempVectorNamed:#methodVector withVars: #(b); "b we know will be written to, so make a tempvector entry" pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(#a #c #methodVector) args: #() jumpTo: #block; pushTemp: #a; "a is just read, so we copy it to the block" pushLiteral: 1; send: #+; storeRemoteTemp: #b inVector: #methodVector; "b comes from tempvetor, as we do write to it" popTop; blockReturnTop; jumpAheadTarget: #block; send: #value; pushRemoteTemp: #b inVector: #methodVector; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 8/27/2010 13:21'! testRemoteTempNested | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(a); "we have one real temp" createTempVectorNamed:#methodVector withVars: #(b); "b we know will be written to, so make a tempvector entry" pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(methodVector a) args: #() jumpTo: #block; createTempVectorNamed:#blockVector withVars: #(f); pushTemp: #a; "a is just read, so we copy it to the block" pushClosureCopyCopiedValues: #(methodVector) args: #() jumpTo: #block2; pushLiteral: 1; storeRemoteTemp: #b inVector: #methodVector; "f comes from tempvetor, as we do write to it" blockReturnTop; jumpAheadTarget: #block2; send: #value; send: #+; storeRemoteTemp: #b inVector: #methodVector; "b comes from tempvetor, as we do write to it" blockReturnTop; jumpAheadTarget: #block; send: #value; pushRemoteTemp: #b inVector: #methodVector; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #()) = 2). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 9/3/2010 14:12'! testRemoteTempShadowed | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(a); "we have one real temp" pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #() args: #() jumpTo: #block; addTemps: #(a); pushTemp: #a; "a shadows the outer one" send: #isNil; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = true). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 7/4/2011 16:59'! testReturnInstVar | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushInstVar: 1; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: (3@4) arguments: #() ) = 3). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - longForm' stamp: 'MarcusDenker 7/4/2011 17:00'! testReturnInstVarLong | iRMethod aCompiledMethod | iRMethod := IRBuilder new forceLongForm; pushInstVar: 1; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: (3@4) arguments: #() ) = 3). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 19:00'! testReturnTop | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: false; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self deny: (aCompiledMethod valueWithReceiver: nil arguments: #()). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/21/2010 21:45'! testSendSuper | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; send: #isThisEverCalled toSuperOf: self class; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self should: [(aCompiledMethod valueWithReceiver: (self class new) arguments: #())] raise: Halt. ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'JB 8/19/2010 16:54'! testStoreIntoVariable | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 4; storeIntoLiteralVariable: (self class bindingOf: #TestToPush); returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). aCompiledMethod valueWithReceiver: nil arguments: #(). self assert: (self class testToPush = 4). self class testToPush: nil. ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/25/2010 14:25'! testStoreIvar | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 34; storeInstVar: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: self arguments: #() ) = 34). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing - longForm' stamp: 'MarcusDenker 7/4/2011 16:53'! testStoreIvarLong | iRMethod aCompiledMethod | iRMethod := IRBuilder new forceLongForm; pushLiteral: 34; storeInstVar: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: self arguments: #() ) = 34). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/25/2010 14:22'! testStorePopIntoVariable | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 4; storeIntoLiteralVariable: (self class bindingOf: #TestToPush); popTop; pushLiteralVariable: (self class bindingOf: #TestToPush); returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). aCompiledMethod valueWithReceiver: nil arguments: #(). self assert: (self class testToPush = 4). self class testToPush: nil. ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/25/2010 14:25'! testStorePopIvar | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 34; storeInstVar: 2; popTop; pushInstVar: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: self arguments: #() ) = 34). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 19:00'! testStoreTemp | iRMethod aCompiledMethod | iRMethod := IRBuilder new addTemps: #(a); pushLiteral: 34; storeTemp: #a; popTop; pushTemp: #a; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 34). ^iRMethod ! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testDup | ir | ir := IRBuilderTest new testDup. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testInstVar | ir | ir := IRBuilderTest new testInstVar. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadTo | ir | ir := IRBuilderTest new testJumpAheadTo. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadToIf | ir | ir := IRBuilderTest new testJumpAheadToIf. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpBackTo | ir | ir := IRBuilderTest new testJumpBackTo. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralArray | ir | ir := IRBuilderTest new testLiteralArray. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralVariableClass | ir | ir := IRBuilderTest new testLiteralVariableClass. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPopTop | ir | ir := IRBuilderTest new testPopTop. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushClosureCopyNoCopied | ir | ir := IRBuilderTest new testPushClosureCopyNoCopied. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushConsArray | ir | ir := IRBuilderTest new testPushConsArray. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushNewArray | ir | ir := IRBuilderTest new testPushNewArray. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushSelf | ir | ir := IRBuilderTest new testPushSelf. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempArgument | ir | ir := IRBuilderTest new testPushTempArgument. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempTemp | ir | ir := IRBuilderTest new testPushTempTemp. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushThisContext | ir | ir := IRBuilderTest new testPushThisContext. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testRemoteTemp | ir | ir := IRBuilderTest new testRemoteTemp. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testRemoteTempNested | ir | ir := IRBuilderTest new testRemoteTempNested. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testReturnTop | ir | ir := IRBuilderTest new testReturnTop. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testSendSuper | ir | ir := IRBuilderTest new testSendSuper. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreIntoVariable | ir | ir := IRBuilderTest new testStoreIntoVariable. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreTemp | ir | ir := IRBuilderTest new testStoreTemp. self shouldnt: [IRInterpreter new interpret: ir ] raise: Error! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testDup | ir | ir := IRBuilderTest new testDup. self assert: ir longPrintString = ' label: 1 pushLiteral: 3 pushDup send: #= returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testInstVar | ir | ir := IRBuilderTest new testInstVar. self assert: ir longPrintString = ' label: 1 pushInstVar: 1 pushInstVar: 2 send: #+ returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadTo | ir | ir := IRBuilderTest new testJumpAheadTo. self assert: ir longPrintString = ' label: 1 pushLiteral: 2 pushLiteral: 1 send: #+ goto: 2 label: 2 returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadToIf | ir | ir := IRBuilderTest new testJumpAheadToIf. self assert: ir longPrintString = ' label: 1 pushReceiver pushLiteral: true if: true goto: 3 else: 2 label: 2 returnTop label: 3 returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpBackTo | ir | ir := IRBuilderTest new testJumpBackTo. self assert: ir longPrintString = ' label: 1 pushReceiver pushLiteral: false goto: 2 label: 2 if: true goto: 4 else: 3 label: 3 pushLiteral: true goto: 2 label: 4 returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralArray | ir | ir := IRBuilderTest new testLiteralArray. self assert: ir longPrintString = ' label: 1 pushLiteral: #(#test 4 #you) returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralVariableClass | ir | ir := IRBuilderTest new testLiteralVariableClass. self assert: ir longPrintString = ' label: 1 pushLiteralVariable: Object returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPopTop | ir | ir := IRBuilderTest new testPopTop. self assert: ir longPrintString = ' label: 1 pushReceiver pushLiteral: false popTop returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushClosureCopyNoCopied | ir | ir := IRBuilderTest new testPushClosureCopyNoCopied. self assert: ir longPrintString = ' label: 1 pushReceiver pushClosureCopyCopiedValues: #() args: #() label: 2 pushLiteral: 1 pushLiteral: 2 send: #+ blockReturnTop label: 3 send: #value returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushConsArray | ir | ir := IRBuilderTest new testPushConsArray. self assert: ir longPrintString = ' label: 1 pushReceiver pushConsArray: 1 returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushNewArray | ir | ir := IRBuilderTest new testPushNewArray. self assert: ir longPrintString = ' label: 1 pushNewArray: 1 returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushSelf | ir | ir := IRBuilderTest new testPushSelf. self assert: ir longPrintString = ' label: 1 pushReceiver send: #class returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempArgument | ir | ir := IRBuilderTest new testPushTempArgument. self assert: ir longPrintString = ' label: 1 pushTemp: #a pushTemp: #b send: #+ returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempTemp | ir | ir := IRBuilderTest new testPushTempTemp. self assert: ir longPrintString = ' label: 1 pushTemp: #a returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushThisContext | ir | ir := IRBuilderTest new testPushThisContext. self assert: ir longPrintString = ' label: 1 pushThisContext send: #receiver returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testRemoteTemp | ir | ir := IRBuilderTest new testRemoteTemp. self assert: ir longPrintString = ' label: 1 createTempVectorNamed: #methodVector withVars: #(#b) pushLiteral: 1 storeTemp: #a popTop pushClosureCopyCopiedValues: #(#a #c #methodVector) args: #() label: 2 pushTemp: #a pushLiteral: 1 send: #+ storeRemoteTemp: #b inVector: #methodVector popTop blockReturnTop label: 3 send: #value pushRemoteTemp: #b inVector: #methodVector returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testRemoteTempNested | ir | ir := IRBuilderTest new testRemoteTempNested. self assert: ir longPrintString = ' label: 1 createTempVectorNamed: #methodVector withVars: #(#b) pushLiteral: 1 storeTemp: #a popTop pushClosureCopyCopiedValues: #(#methodVector #a) args: #() label: 2 createTempVectorNamed: #blockVector withVars: #(#f) pushTemp: #a pushClosureCopyCopiedValues: #(#methodVector) args: #() label: 3 pushLiteral: 1 storeRemoteTemp: #b inVector: #methodVector blockReturnTop label: 4 send: #value send: #+ storeRemoteTemp: #b inVector: #methodVector blockReturnTop label: 5 send: #value pushRemoteTemp: #b inVector: #methodVector returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testReturnTop | ir | ir := IRBuilderTest new testReturnTop. self assert: ir longPrintString = ' label: 1 pushLiteral: false returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:12'! testSendSuper | ir | ir := IRBuilderTest new testSendSuper. self assert: ir longPrintString = ' label: 1 pushReceiver send: #isThisEverCalled toSuperOf: IRBuilderTest returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreIntoVariable | ir | ir := IRBuilderTest new testStoreIntoVariable. self assert: ir longPrintString = ' label: 1 pushLiteral: 4 storeLiteralVariable: TestToPush returnTop '! ! !IRPrinterTest methodsFor: 'testing' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreTemp | ir | ir := IRBuilderTest new testStoreTemp. self assert: ir longPrintString = ' label: 1 pushLiteral: 34 storeTemp: #a popTop pushTemp: #a returnTop '! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:54'! testAdd | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. (iRMethod allSequences last) last delete. (iRMethod allSequences last) last delete. (iRMethod allSequences last) add: (IRInstruction pushLiteral: 2). (iRMethod allSequences last) add: (IRInstruction returnTop). aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:59'! testAddBefore | iRMethod aCompiledMethod ret | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. (iRMethod allSequences last) last delete. (iRMethod allSequences last) last delete. ret := (IRInstruction returnTop). (iRMethod allSequences last) add: ret. (iRMethod allSequences last) add: (IRInstruction pushLiteral: 2) before: ret. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:59'! testAddIntructions | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. (iRMethod allSequences last) last delete. (iRMethod allSequences last) last delete. (iRMethod allSequences last) addInstructions: {(IRInstruction pushLiteral: 2). (IRInstruction returnTop)}. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:54'! testAddIntructionsBefore | iRMethod aCompiledMethod push | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. push := (iRMethod allSequences last) at: (iRMethod allSequences size - 1) . (iRMethod allSequences last) addInstructions: {(IRInstruction pushLiteral: 2). (IRInstruction returnTop)} before: push. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:59'! testAddIntructionsBeforeFromLList | iRMethod aCompiledMethod push llist col | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. push := (iRMethod allSequences last) at: (iRMethod allSequences size - 1) . llist := LinkedList new. llist add: (IRInstruction pushLiteral: 2). llist add: (IRInstruction returnTop). col := llist asOrderedCollection. (iRMethod allSequences last) addInstructions: col before: push. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - enumeration' stamp: 'MarcusDenker 7/16/2012 16:07'! testAllInstructions | ir | ir := IRBuilderTest new testPushTempTemp. self assert: ir allInstructions last isReturn.! ! !IRTransformTest methodsFor: 'testing - enumeration' stamp: 'MarcusDenker 7/16/2012 16:07'! testAllTempAccessInstructions | ir | ir := IRBuilderTest new testPushTempTemp. self assert: ir allTempAccessInstructions size = 1.! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:52'! testDelete | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; pushLiteral: 2; returnTop; ir. ((iRMethod allSequences last) detect: [:each | each isLiteral: [:c | c == 2]]) delete. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 1]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:52'! testReplace | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. (iRMethod allSequences last first) replaceWith: (IRInstruction pushLiteral: 2). aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 8/18/2010 18:52'! testReplaceInstr | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; returnTop; ir. (iRMethod allSequences last first) replaceWithInstructions: {(IRInstruction pushLiteral: 2)}. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2]. ! ! !MethodMapTests methodsFor: 'util' stamp: 'MarcusDenker 12/20/2012 15:14'! compileAndRunExample: aSelector | cm | cm := self compileMethod: MethodMapExamples>>aSelector. ^cm valueWithReceiver: MethodMapExamples new arguments: #().! ! !MethodMapTests methodsFor: 'util' stamp: 'MarcusDenker 12/20/2012 15:13'! compileMethod: aMethod ^aMethod parseTree generate: aMethod trailer. ! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 17:32'! testExampleSimpleTemp self assert: (self compileAndRunExample: #exampleSimpleTemp) equals: 1! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:02'! testExampleTempNamedCopying self assert: (self compileAndRunExample: #exampleTempNamedCopying) equals: 1! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:02'! testExampleTempNamedCopying2 self assert: (self compileAndRunExample: #exampleTempNamedCopying2) equals: 1! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:02'! testExampleTempNamedPutCopying self assert: (self compileAndRunExample: #exampleTempNamedPutCopying) equals: 2.! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:01'! testExampleTempNamedPutCopying2 self assert: (self compileAndRunExample: #exampleTempNamedPutCopying2) equals: 2! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:01'! testExampleTempNamedPutTempVector self assert: (self compileAndRunExample: #exampleTempNamedPutTempVector) equals: 3.! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:02'! testExampleTempNamedPutTempVector2 self assert: (self compileAndRunExample: #exampleTempNamedPutTempVector2) equals: 3! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:03'! testExampleTempNamedTempVector self assert: (self compileAndRunExample: #exampleTempNamedTempVector) equals: 2! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:03'! testExampleTempNamedTempVector2 self assert: (self compileAndRunExample: #exampleTempNamedTempVector2) equals: 2! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 17:38'! testExampleTempNamedTempVectorNestedBlock self assert: (self compileAndRunExample: #exampleTempNamedTempVectorNestedBlock ) equals: 2.! ! !MethodMapTests methodsFor: 'testing - source mapping' stamp: 'md 1/17/2013 16:47'! testSimpleSourceMapping | method range highlight | method := Object>>('ha', 'lt') asSymbol. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 23. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'now'. ! ! !MethodMapTests methodsFor: 'testing - source mapping' stamp: 'md 1/17/2013 16:47'! testSourceMappingBlock | method range highlight | method := MethodMapExamples>>#exampleTempNamedCopying. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 42. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'b'. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 43. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'a := b'. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 44. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals:'DebuggerMethodMapOpal'. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 45. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals:'thisContext'. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 46. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'method'.! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 18:04'! testTempNamedTempCopyingNestedBlock self assert: (self compileAndRunExample: #exampleTempNamedTempCopyingNestedBlock) equals: 1.! ! !MethodMapTests methodsFor: 'testing - temp access' stamp: 'MarcusDenker 12/19/2012 17:39'! testTempNamedTempCopyingNestedBlockPROBLEM self assert: (self compileAndRunExample: #exampleTempNamedTempCopyingNestedBlockPROBLEM) equals: 1.! ! !OCASTCheckerTest methodsFor: 'tools' stamp: 'MarcusDenker 6/29/2012 15:55'! nameAnalysisNoClosureIn: classOrScope for: ast "Look up vars in classOrScope. My tree will be annotated with bindings to Scopes and Variables." OCASTSemanticAnalyzer new scope: classOrScope parseScope; visitNode: ast.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:43'! testDoubleRemoteAnidatedBlocks | ast assignment vars scopes | ast := (OCOpalExamples>>#doubleRemoteAnidatedBlocks) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: (ast scope lookupVar: 'last') isEscaping. self assert: (ast scope lookupVar: 'val') isEscaping. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes size = 4. self assert: (scopes second lookupVar: 'i') isEscaping. "This is due to the inlined block." self assert: scopes third tempVars size = 1. self deny: (scopes third lookupVar: 'continue') isEscaping. "It is not escaping since is being accessed in an optimized block." ! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 7/2/2012 10:43'! testExampleIfNotNilDo | ast | ast := (OCOpalExamples>>#exampleIfNotNilDo) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars isEmpty. "ifnilDo is not inlined"! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 7/2/2012 10:43'! testExampleIfNotNilDoReturnNil | ast | ast := (OCOpalExamples>>#exampleIfNotNilDoReturnNil) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars isEmpty. "ifnilDoL is *not* inlined, so the arg is a temp of the enclosing scope"! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 7/2/2012 10:44'! testExampleIfNotNilReturnNil | ast | ast := (OCOpalExamples>>#exampleIfNotNilReturnNil) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0.! ! !OCASTCheckerTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 7/2/2012 10:44'! testExampleInlineBlockCollectionLR3 | ast | ast := (OCOpalExamples>>#exampleInlineBlockCollectionLR3) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. "index is a temp of the outer method due to optimized block"! ! !OCASTCheckerTest methodsFor: 'testing - primitives' stamp: 'MarcusDenler 12/10/2012 16:17'! testExamplePrimitiveErrorCode | method ast ir newMethod | ast := (OCOpalExamples>>#examplePrimitiveErrorCode) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: (ast scope lookupVar: 'code') isTemp. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 11/15/2012 16:30'! testExampleSelf | ast assignment vars | ast := (OCOpalExamples>>#exampleSelf) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'self') isSelf. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value ocBinding isSelf.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 11/15/2012 16:31'! testExampleSuper | ast assignment vars | ast := (OCOpalExamples>>#exampleSuper) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'super') isSuper. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value ocBinding isSuper.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 11/15/2012 16:31'! testExampleThisContext | ast assignment vars | ast := (OCOpalExamples>>#exampleThisContext) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'thisContext') isContext. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value ocBinding isContext.! ! !OCASTCheckerTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 7/2/2012 10:44'! testExampleToDoArgument | ast | ast := (OCOpalExamples>>#exampleToDoArgument) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 6/29/2012 16:03'! testInstanceVar | ast assignment vars | ast := (OCOpalExamples>>#exampleiVar) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars isEmpty. self assert: ast scope outerScope isInstanceScope. self assert: (ast scope outerScope lookupVar: 'iVar') isInstance. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment variable isInstance.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testNoRemoteBlockArgument | ast assignment vars | ast := (OCOpalExamples>>#noRemoteBlockArgument) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self deny: (ast scope lookupVar: 'block') isEscaping . self deny: (ast scope lookupVar: 'block1') isEscaping. self deny: (ast scope lookupVar: 'block2') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testNoRemoteBlockReturn | ast assignment vars | ast := (OCOpalExamples>>#noRemoteBlockReturn) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testNoRemoteBlockTemp | ast assignment vars | ast := (OCOpalExamples>>#noRemoteBlockTemp) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self deny: (ast scope lookupVar: 'block') isEscaping. self deny: (ast scope lookupVar: 'block1') isEscaping. self deny: (ast scope lookupVar: 'block2') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testNoRemoteMethodTemp | ast assignment vars | ast := (OCOpalExamples>>#noRemoteMethodTemp) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self deny: (ast scope lookupVar: 'block1') isEscaping. self deny: (ast scope lookupVar: 'block2') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testOptimizedBlockWrittenAfterClosedOverCase1 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase1) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self deny: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: (scopes third lookupVar: 'temp') isWrite. self assert: (scopes third lookupVar: 'temp') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:44'! testOptimizedBlockWrittenAfterClosedOverCase2 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase2) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self deny: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: ( scopes third lookupVar: 'temp') isEscapingWrite. self assert: ( scopes third lookupVar: 'temp') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testOptimizedBlocksAndSameNameTemps | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlocksAndSameNameTemps) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self deny: (ast scope lookupVar: 's') isRemote. self deny: (ast scope lookupVar: 'c') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self deny: (scopes second lookupVar: 'a') isRemote. self deny: (scopes fourth lookupVar: 'i') isRemote. ! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 7/2/2012 10:44'! testReturn1 | ast | ast := (OCOpalExamples>>#exampleReturn1) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars isEmpty.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testSingleRemoteDifferentBlocksSameArgumentName | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteDifferentBlocksSameArgumentName) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self deny: (ast scope lookupVar: 'b') isEscaping. self deny: (ast scope lookupVar: 'c') isEscaping. self assert: (ast scope lookupVar: 'z') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testSingleRemoteMethodArgument | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteMethodArgument) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'temp') isEscaping. self assert: (ast scope lookupVar: 'temp') isWrite. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:44'! testSingleRemoteTempVar | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteTempVar) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'collection') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. self assert: (ast scope lookupVar: 'collection') isTemp. self deny: (ast scope lookupVar: 'collection') isInstance. self deny: (ast scope lookupVar: 'index') isInstance. self deny: (ast scope lookupVar: 'block') isInstance. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testsingleRemoteTempVarWhileWithTempNotInlined | ast assignment vars | ast := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 7/2/2012 10:45'! testsingleRemoteTempVarWrittenAfterClosedOver | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: (ast scope lookupVar: 'index') isWrite. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self deny: (ast scope lookupVar: 'collection') isWrite. self assert: (ast scope lookupVar: 'block') isTemp. self assert: (ast scope lookupVar: 'collection') isTemp. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 12/18/2012 16:44'! testDoubleRemoteAnidatedBlocks | ast assignment vars scopes | ast := (OCOpalExamples>>#doubleRemoteAnidatedBlocks) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 2. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: (ast scope lookupVar: 'last') isRemote. self assert: (ast scope lookupVar: 'val') isRemote. self assert: (ast scope lookupVar: 'val') vectorName = '0vector0'. self deny: (scopes second lookupVar: 'i') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 11/20/2012 15:44'! testExampleBlockArgument | ast assignment vars blockScope blockScope2 | ast := (OCOpalExamples>>#exampleBlockArgument) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: ast scope tempVector size = 0. self assert: ast scope copiedVars size = 0. self deny: (ast scope lookupVar: 'block') isRemote. self deny: (ast scope lookupVar: 'block1') isRemote. self deny: (ast scope lookupVar: 'block2') isRemote. blockScope := (OCScopesCollector new visitNode: ast) scopes second. self assert: blockScope tempVars size = 2. self assert: blockScope tempVector size = 0. self assert: blockScope copiedVars size = 1. self deny: (blockScope lookupVar: 'temp') isRemote. self assert: (blockScope lookupVar: 'temp') isEscapingRead. self assert: (blockScope lookupVar: 'temp') isWrite. self deny: (blockScope lookupVar: 'temp') isEscapingWrite. self deny: (blockScope lookupVar: 'arg') isRemote. blockScope2 := (OCScopesCollector new visitNode: ast) scopes third. self assert: blockScope2 tempVars size = 0. self assert: blockScope2 tempVector size = 0. self assert: blockScope2 copiedVars size = 1. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - optimized blocks' stamp: 'MarcusDenker 11/20/2012 15:45'! testExampleSimpleBlockLocalIf | ast assignment var | ast := (OCOpalExamples>>#exampleSimpleBlockLocalIf) parseTree. ast doSemanticAnalysis. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. var := assignment variable ocBinding. self assert: var isWrite. self deny: var isEscaping.! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testExampleSimpleBlockLocalWhile | ast assignment vars scopes | ast := (OCOpalExamples>>#exampleSimpleBlockLocalWhile) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'a') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 1. self assert: scopes second tempVector size = 0. self deny: (scopes second lookupVar: 'b') isRemote. self assert: (scopes second lookupVar: 'b') isArg. self deny: (scopes fourth lookupVar: 'hallo') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testExampleSimpleBlockNested | ast assignment vars scopes | ast := (OCOpalExamples>>#exampleSimpleBlockNested) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self deny: (ast scope lookupVar: 'a') isRemote. self deny: (ast scope lookupVar: 'dict') isRemote. self assert: (ast scope lookupVar: 'match') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 2. self assert: scopes second tempVector size = 0. self deny: (scopes second lookupVar: 'each') isRemote. self deny: (scopes second lookupVar: 'index') isRemote. self assert: scopes second copiedVars size = 3 ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 11/20/2012 15:45'! testExampleWhileModificationBefore | ast assignment vars blockScope blockScope2 | ast := (OCOpalExamples>>#exampleWhileModificationBefore) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: ast scope copiedVars size = 1. self assert: (ast scope lookupVar: 'index') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNestedBlocksRemoteInBlockCase1 | ast assignment vars scopes | ast := (OCOpalExamples>>#nestedBlocksRemoteInBlockCase1) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 'block') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 2. self assert: (scopes second tempVector at: 'a') isRemote. self assert: (scopes second tempVector at: 'b') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNestedBlocksRemoteInBlockCase2 | ast assignment vars scopes | ast := (OCOpalExamples>>#nestedBlocksRemoteInBlockCase2) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 'block') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 0. self assert: scopes third tempVars size = 0. self assert: scopes third tempVector size = 1. self assert: (scopes third tempVector at: 'a') isRemote. self assert: scopes fourth tempVars size = 0. self assert: scopes fourth tempVector size = 0. self assert: scopes fifth tempVars size = 0. self assert: scopes fifth tempVector size = 1. self assert: (scopes fifth tempVector at: 'b') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNestedBlocksRemoteInBlockCase3 | ast assignment vars scopes | ast := (OCOpalExamples>>#nestedBlocksRemoteInBlockCase3) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'block') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 0. self assert: scopes third tempVars size = 0. self assert: scopes third tempVector size = 1. self assert: (scopes third tempVector at: 'a') isRemote. self assert: scopes fourth tempVars size = 0. self assert: scopes fourth tempVector size = 0. self assert: scopes fifth tempVars size = 0. self assert: scopes fifth tempVector size = 1. self assert: (scopes fifth tempVector at: 'b') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNoRemoteBlockArgument | ast assignment vars | ast := (OCOpalExamples>>#noRemoteBlockArgument) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self deny: (ast scope lookupVar: 'block') isRemote . self deny: (ast scope lookupVar: 'block1') isRemote. self deny: (ast scope lookupVar: 'block2') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNoRemoteReadInBlock | ast assignment vars scopes | ast := (OCOpalExamples>>#noRemoteReadInBlock) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 'a') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testNoRemoteReadNestedBlocks | ast assignment vars scopes | ast := (OCOpalExamples>>#noRemoteReadNestedBlocks) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 0. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 1. self assert: scopes second tempVector size = 0. self deny: (scopes second lookupVar: 'a') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testOptimizedBlockReadInBlock | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockReadInBlock) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 't1') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:45'! testOptimizedBlockWriteInBlock | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWriteInBlock) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 't1') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:47'! testOptimizedBlockWriteInNestedBlock | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWriteInNestedBlock) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 't1') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testOptimizedBlockWriteInNestedBlockCase2 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWriteInNestedBlockCase2) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 't1') isRemote. self assert: ast scope copiedVars size = 0. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testOptimizedBlockWriteInNestedBlockCase3 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWriteInNestedBlockCase3) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 't1') isRemote. self assert: ast scope copiedVars size = 1. "Is this correct, I think that the copied vars should be empty." scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 0. self assert: scopes second copiedVars size = 1. scopes second copiedVars at: '0vector0' ifAbsent: [self fail]. self assert: ((scopes second copiedVars at: '0vector0') isStoringTempVector). ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testOptimizedBlockWriteInNestedBlockCase4 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWriteInNestedBlockCase4) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 't1') isRemote. self assert: ast scope copiedVars size = 1. "Is this correct, I think that the copied vars should be empty." scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 0. self assert: scopes second copiedVars size = 1. scopes second copiedVars at: '0vector0' ifAbsent: [self fail] ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testOptimizedBlockWrittenAfterClosedOverCase1 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase1) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes third tempVars size = 0. self assert: scopes third tempVector size = 1. self deny: (scopes third lookupVar: 'index') isRemote. "problem: as block is optimized, this var does not need to be remote" self assert: (scopes third tempVector at: 'temp') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testOptimizedBlockWrittenAfterClosedOverCase2 | ast assignment vars scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase2) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size =0. self deny: (ast scope lookupVar: 'index') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: (scopes third tempVector at: 'temp') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testSingleRemoteDifferentBlocksSameArgumentName | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteDifferentBlocksSameArgumentName) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self deny: (ast scope lookupVar: 'b') isRemote. self deny: (ast scope lookupVar: 'c') isRemote. self assert: (ast scope lookupVar: 'z') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testSingleRemoteMethodArgument | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteMethodArgument) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 1. self deny: (ast scope lookupVar: 'block') isRemote. self assert: (ast scope lookupVar: 'temp') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testSingleRemoteReadNestedBlocks | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteReadNestedBlocks) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'a') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testSingleRemoteTempVar | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteTempVar) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. self deny: (ast scope lookupVar: 'collection') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testWrittenAfterClosedOver | ast assignment vars scopes | ast := (OCOpalExamples>>#writtenAfterClosedOver) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'a') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testsingleRemoteTempVarWhileWithTempNotInlined | ast assignment vars | ast := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 11/20/2012 15:46'! testsingleRemoteTempVarWrittenAfterClosedOver | ast assignment vars | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupScopeForVar: 'index') = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. self deny: (ast scope lookupVar: 'collection') isRemote. ! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testEmptyMethod | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#exampleEmptyMethod) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleEmptyMethod. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 11/20/2012 15:47'! testExampleBlockArgument | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockArgument) parseTree. ir := ast doSemanticAnalysis ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockArgument. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockExternal | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockExternal) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternal. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockExternal2 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockExternal2) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternal2. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockExternalArg | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockExternalArg) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternalArg. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockExternalNested | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockExternalNested) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternalNested. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockInternal | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockInternal) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockInternal. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockMethodArgument | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockMethodArgument:) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #(2)) = 4. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleBlockNested | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockNested) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockNested. ! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfFalse | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfFalse) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfFalse. ! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfFalseIfTrue | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfFalseIfTrue) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfFalseIfTrue. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfNotNilArg | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfNotNilArg) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilArg. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfNotNilDo | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfNotNilDo) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilDo. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfNotNilDoReturnNil | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfNotNilDoReturnNil) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilDoReturnNil. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfNotNilReturnNil | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfNotNilReturnNil) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilReturnNil. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfTrue | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfTrue) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = 'result'. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfTrueAssign | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfTrueAssign) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = 1. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleIfTrueIfFalse | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleIfTrueIfFalse) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = 'result'. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleInlineBlockCollectionLR3 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleInlineBlockCollectionLR3) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = (2 to: 12) asArray. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleMethodTempInNestedBlock | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleMethodTempInNestedBlock) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: ((aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleMethodTempInNestedBlock) ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleMethodWithOptimizedBlocksA | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleMethodWithOptimizedBlocksA) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleMethodWithOptimizedBlocksA. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleNestedBlockScoping | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleNestedBlockScoping) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleNestedBlockScoping. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenler 12/11/2012 15:03'! testExampleOptimizedBlockWrittenAfterClosedOverCase1 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase1) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance optimizedBlockWrittenAfterClosedOverCase1. ! ! !OCASTTranslatorTest methodsFor: 'testing - primitives' stamp: 'MarcusDenler 12/10/2012 16:20'! testExamplePrimitiveErrorCode | method ast ir newMethod | method := (OCOpalExamples>>#examplePrimitiveErrorCode). ast := method parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. newMethod := ir compiledMethod. self assert: method primitive = newMethod primitive. ! ! !OCASTTranslatorTest methodsFor: 'testing - primitives' stamp: 'MarcusDenler 12/10/2012 15:27'! testExamplePrimitiveErrorCodeModule | method ast ir newMethod | method := (OCOpalExamples>>#examplePrimitiveErrorCodeModule). ast := method parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. newMethod := ir compiledMethod. self assert: method primitive = newMethod primitive. self assert: method pragmas printString = newMethod pragmas printString ! ! !OCASTTranslatorTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSelf | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSelf) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSelf. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlock | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlock) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) value = instance exampleSimpleBlock value. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockArgument1 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockArgument1) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument1. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockArgument2 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockArgument2) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument2. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockArgument3 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockArgument3) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument3. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockArgument4 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockArgument4) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument4 . ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockArgument5 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockArgument5) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument5 . ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockEmpty | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockEmpty) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockEmpty . ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockLocal | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockLocal) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocal . ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockLocalIf | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockLocalIf) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocalIf. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockLocalIfNested | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockLocalIfNested) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocalIfNested. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockLocalWhile | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockLocalWhile) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocalWhile. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockNested | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockNested) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockNested. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockReturn | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockReturn) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockReturn. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSimpleBlockiVar | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSimpleBlockiVar) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: ((aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockiVar) ! ! !OCASTTranslatorTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleSuper | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleSuper) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleSuper. ! ! !OCASTTranslatorTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleThisContext | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleThisContext) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: OCOpalExamples new exampleThisContext isContext. self assert: ((OCOpalExamples>>#exampleThisContext) valueWithReceiver: instance arguments: #()) isContext. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) isContext. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoArgument | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoArgument) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoArgument. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 12/7/2012 15:32'! testExampleToDoArgumentLimitIsExpression | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoArgumentLimitIsExpression) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoArgumentLimitIsExpression. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoArgumentNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoArgumentNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoArgumentNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoInsideTemp | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoInsideTemp) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoInsideTemp. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoInsideTempNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoInsideTempNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoInsideTempNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoOutsideTemp | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoOutsideTemp) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoOutsideTemp. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleToDoOutsideTempNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoOutsideTempNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoOutsideTempNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleWhileModificationAfterNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleWhileModificationAfterNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileModificationAfterNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleWhileModificationBefore | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleWhileModificationBefore) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: OCOpalExamples new arguments: #()) = instance exampleWhileModificationBefore. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleWhileModificationBeforeNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleWhileModificationBeforeNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileModificationBeforeNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleWhileWithTemp | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleWhileWithTemp) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileWithTemp. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'MarcusDenker 6/29/2012 16:16'! testExampleWhileWithTempNotInlined | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileWithTempNotInlined. ! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testNewArray | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleNewArray) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleNewArray. ! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testOnePlusTwo | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#exampleReturn1plus2) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleReturn1plus2. ! ! !OCASTTranslatorTest methodsFor: 'testing - misc' stamp: 'MarcusDenker 6/29/2012 16:16'! testPushArray | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#examplePushArray) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance examplePushArray.! ! !OCASTTranslatorTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/29/2012 16:16'! testReturn1 | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleReturn1) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleReturn1. ! ! !OCASTTranslatorTest methodsFor: 'testing - misc' stamp: 'MarcusDenker 11/20/2012 16:29'! testTodoValue | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoValue) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoValue.! ! !OCASTTranslatorTest methodsFor: 'testing - misc' stamp: 'MarcusDenker 12/7/2012 15:51'! testTodoValueLimitExpression | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#exampleToDoValueLimitExpression) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoValueLimitExpression.! ! !OCASTTranslatorTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 6/29/2012 16:16'! testiVar | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleiVar) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleiVar. ! ! !OCArrayLiteralTest methodsFor: 'running' stamp: 'EstebanLorenzano 8/3/2012 13:59'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ] ! ! !OCArrayLiteralTest methodsFor: 'initialization' stamp: 'avi 2/16/2004 21:09'! tearDown self class removeSelector: #array! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'lr 1/29/2009 20:34'! testByteArrayBase self class compile: 'array ^ #[2r1010 8r333 16rFF]'. self assert: (self array isKindOf: ByteArray). self assert: (self array size = 3). self assert: (self array first = 10). self assert: (self array second = 219). self assert: (self array last = 255) ! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'lr 1/29/2009 20:35'! testByteArrayEmpty self class compile: 'array ^ #[]'. self assert: (self array isKindOf: ByteArray). self assert: (self array isEmpty)! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'lr 1/29/2009 20:36'! testByteArrayLiteral self class compile: 'array ^ #[ 1 2 3 4 ]'. self assert: (self array = self array). self assert: (self array == self array)! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'lr 1/29/2009 20:45'! testByteArrayLong self class compile: 'array ^ #[ ' , ((0 to: 255) inject: ' ' into: [ :r :e | r , ' ' , e asString ]) , ' ]'. self assert: (self array isKindOf: ByteArray). self assert: (self array size = 256). 0 to: 255 do: [ :index | self assert: (self array at: index + 1) = index ]! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'lr 1/29/2009 20:32'! testByteArrayRange self class compile: 'array ^ #[ 0 255 ]'. self assert: (self array isKindOf: ByteArray). self assert: (self array size = 2). self assert: (self array first = 0). self assert: (self array last = 255)! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'Henrik Sperre Johansen 3/23/2009 13:55'! testByteArrayWithinArray self class compile: 'array ^ #( #[1] #[2] )'. self assert: (self array isKindOf: Array). self assert: (self array size = 2). self assert: (self array first isKindOf: ByteArray). self assert: (self array first first = 1). self assert: (self array last isKindOf: ByteArray). self assert: (self array last first = 2) ! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'avi 2/16/2004 21:08'! testReservedIdentifiers self class compile: 'array ^ #(nil true false)'. self assert: self array = {nil. true. false}.! ! !OCArrayLiteralTest methodsFor: 'tests' stamp: 'avi 2/16/2004 21:09'! testSymbols self class compile: 'array ^ #(#nil #true #false #''nil'' #''true'' #''false'')'. self assert: self array = {#nil. #true. #false. #nil. #true. #false}.! ! !OCBC2IR2BCSymbolic methodsFor: 'tests' stamp: 'MarcusDenker 6/6/2012 12:18'! testExampleInlineBlockCollectionLR3 | aMethod newMethod | aMethod := OCOpalExamples>>#exampleInlineBlockCollectionLR3. newMethod := (aMethod ir) compiledMethodWith: aMethod trailer. self assert: aMethod abstractSymbolic = newMethod abstractSymbolic.! ! !OCBC2IR2BCSymbolic methodsFor: 'tests' stamp: 'MarcusDenker 6/6/2012 17:46'! testExamplePrimitiveErrorCode | aMethod newMethod | aMethod := OCOpalExamples>>#examplePrimitiveErrorCode. newMethod := (aMethod ir) compiledMethodWith: aMethod trailer. self assert: aMethod abstractSymbolic = newMethod abstractSymbolic.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:42'! testExampleBlockArgument | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockArgument) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockArgument. ! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:42'! testExampleBlockExternal | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockExternal) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternal. ! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:43'! testExampleBlockExternal2 | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockExternal2) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternal2. ! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:43'! testExampleBlockExternalArg | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockExternalArg) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternalArg. ! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:43'! testExampleBlockExternalNested | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockExternalNested) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternalNested. ! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:43'! testExampleBlockInternal | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockInternal) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockInternal.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:43'! testExampleBlockNested | ir method newMethod instance | method := (OCOpalExamples>>#exampleBlockNested) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockNested.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-simple' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleEmptyMethod | ir method newMethod instance | method := (OCOpalExamples>>#exampleEmptyMethod) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleEmptyMethod.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleIfFalse | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfFalse) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfFalse.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleIfFalseIfTrue | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfFalseIfTrue) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfFalseIfTrue.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleIfIfNotNilReturnNil | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfNotNilReturnNil) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilReturnNil! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleIfNotNilArg | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfNotNilArg) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilArg.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:45'! testExampleIfNotNillDo | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfNotNilDo) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilDo.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:46'! testExampleIfNotNillDoReturnNil | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfNotNilDoReturnNil) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfNotNilDoReturnNil.! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:46'! testExampleIfTrue | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfTrue) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfTrue! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:46'! testExampleIfTrueIfFalse | ir method newMethod instance | method := (OCOpalExamples>>#exampleIfTrueIfFalse) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleIfTrueIfFalse! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:47'! testExampleMethodTempInNestedBlock | ir method newMethod instance | method := (OCOpalExamples>>#exampleMethodTempInNestedBlock) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleMethodTempInNestedBlock! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:47'! testExampleMethodWithOptimizedBlocksA | ir method newMethod instance | method := (OCOpalExamples>>#exampleMethodWithOptimizedBlocksA) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleMethodWithOptimizedBlocksA! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:47'! testExampleNestedBlockScoping | ir method newMethod instance | method := (OCOpalExamples>>#exampleNestedBlockScoping) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleNestedBlockScoping! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-simple' stamp: 'MarcusDenker 11/20/2012 16:47'! testExampleNewArray | ir method newMethod instance | method := (OCOpalExamples>>#exampleNewArray) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleNewArray! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-misc' stamp: 'MarcusDenker 11/20/2012 16:47'! testExamplePushArray | ir method newMethod instance | method := (OCOpalExamples>>#examplePushArray) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance examplePushArray! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-simple' stamp: 'MarcusDenker 11/20/2012 16:47'! testExampleReturn1 | ir method newMethod instance | method := (OCOpalExamples>>#exampleReturn1) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleReturn1! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-simple' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleReturn1plus2 | ir method newMethod instance | method := (OCOpalExamples>>#exampleReturn1plus2) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleReturn1plus2! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-variables' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSelf | ir method newMethod instance | method := (OCOpalExamples>>#exampleSelf) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSelf! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlock | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlock) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) value = instance exampleSimpleBlock value! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlockArgument1 | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockArgument1) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument1! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlockArgument2 | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockArgument2) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument2! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlockArgument3 | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockArgument3) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument3! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlockArgument4 | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockArgument4) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument4! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:48'! testExampleSimpleBlockArgument5 | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockArgument5) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockArgument5! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockEmpty | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockEmpty) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockEmpty! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockLocal | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockLocal) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocal! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockLocalIf | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockLocalIf) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocalIf! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockLocalNested | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockNested) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockNested! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockLocalWhile | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockLocalWhile) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockLocalWhile! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockNested | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockNested) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockNested! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockReturn | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockReturn) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockReturn! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks' stamp: 'MarcusDenker 11/20/2012 16:49'! testExampleSimpleBlockiVar | ir method newMethod instance | method := (OCOpalExamples>>#exampleSimpleBlockiVar) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSimpleBlockiVar! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-variables' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleSuper | ir method newMethod instance | method := (OCOpalExamples>>#exampleSuper) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleSuper! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-variables' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleThisContext | ir method newMethod instance | method := (OCOpalExamples>>#exampleThisContext) parseTree generate. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) isContext! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleToDoArgument | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoArgument) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoArgument! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleToDoArgumentNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoArgumentNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoArgumentNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleToDoInsideTemp | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoInsideTemp) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoInsideTemp! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleToDoInsideTempNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoInsideTempNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoInsideTempNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:50'! testExampleToDoOutsideTemp | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoOutsideTemp) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoOutsideTemp! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:51'! testExampleToDoOutsideTempNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoOutsideTempNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoOutsideTempNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-misc' stamp: 'MarcusDenker 11/20/2012 16:42'! testExampleToDoValue | ir method newMethod instance | method := (OCOpalExamples>>#exampleToDoValue) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleToDoValue! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:51'! testExampleWhileModificationAfterNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleWhileModificationAfterNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileModificationAfterNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:44'! testExampleWhileModificationBefore | ir method newMethod instance | method := (OCOpalExamples>>#exampleWhileModificationBefore) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileModificationBefore! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:44'! testExampleWhileModificationBeforeNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleWhileModificationBeforeNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileModificationBeforeNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:44'! testExampleWhileWithTemp | ir method newMethod instance | method := (OCOpalExamples>>#exampleWhileWithTemp) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileWithTemp! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-blocks-optimized' stamp: 'MarcusDenker 11/20/2012 16:44'! testExampleWhileWithTempNotInlined | ir method newMethod instance | method := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleWhileWithTempNotInlined! ! !OCBytecodeDecompilerExamplesTest methodsFor: 'tests-variables' stamp: 'MarcusDenker 11/20/2012 16:44'! testExampleiVar | ir method newMethod instance | method := (OCOpalExamples>>#exampleiVar) parseTree generate. instance := OCOpalExamples new. ir := IRBytecodeDecompiler new decompile: method. newMethod := ir compiledMethod. self assert: (newMethod valueWithReceiver: instance arguments: #()) = instance exampleiVar! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:23'! pushClosureCopyNoCopied | iRMethod aCompiledMethod | ^ IRBuilder new pushReceiver; pushClosureCopyCopiedValues: #() args: #() jumpTo: #block; pushLiteral: 1; pushLiteral: 2; send: #+; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. ! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:23'! pushClosureCopyNoCopiedArg ^IRBuilder new pushReceiver; pushClosureCopyCopiedValues: #() args: #(d) jumpTo: #block; pushLiteral: 1; pushTemp: #d; send: #+; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. ! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:24'! pushClosureCopyOneCopiedArg ^IRBuilder new addTemps: #(a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #(d) jumpTo: #block; pushTemp: #a; pushTemp: #d; send: #+; blockReturnTop; jumpAheadTarget: #block; pushLiteral: 1; send: #value:; returnTop; ir. ! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:23'! pushClosureCopyOneCopiedTemp ^IRBuilder new addTemps: #(a); pushReceiver; pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(a) args: #() jumpTo: #block; addTemps: #(d); "the temp" pushTemp: #a; pushLiteral: 1; send: #+; storeTemp: #d; popTop; pushTemp: #d; blockReturnTop; jumpAheadTarget: #block; send: #value; returnTop; ir. ! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:22'! remoteTemp | iRMethod aCompiledMethod | iRMethod := IRBuilder new createTempVectorNamed:#methodVector withVars: #(b); "b we know will be written to, so make a tempvector entry" addTemps: #(a); "we have one real temp" pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(#a #methodVector) args: #() jumpTo: #block; pushTemp: #a; "a is just read, so we copy it to the block" pushLiteral: 1; send: #+; storeRemoteTemp: #b inVector: #methodVector; "b comes from tempvetor, as we do write to it" popTop; blockReturnTop; jumpAheadTarget: #block; send: #value; pushRemoteTemp: #b inVector: #methodVector; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !OCBytecodeDecompilerTest methodsFor: 'examples' stamp: 'MarcusDenker 8/27/2010 13:23'! remoteTempNested | iRMethod aCompiledMethod | iRMethod := IRBuilder new createTempVectorNamed:#methodVector withVars: #(b); "b we know will be written to, so make a tempvector entry" addTemps: #(a); "we have one real temp" pushLiteral: 1; storeTemp: #a; popTop; pushClosureCopyCopiedValues: #(methodVector a) args: #() jumpTo: #block; createTempVectorNamed:#blockVector withVars: #(f); pushTemp: #a; "a is just read, so we copy it to the block" pushClosureCopyCopiedValues: #(methodVector) args: #() jumpTo: #block2; pushLiteral: 1; storeRemoteTemp: #b inVector: #methodVector; "f comes from tempvetor, as we do write to it" blockReturnTop; jumpAheadTarget: #block2; send: #value; send: #+; storeRemoteTemp: #b inVector: #methodVector; "b comes from tempvetor, as we do write to it" blockReturnTop; jumpAheadTarget: #block; send: #value; pushRemoteTemp: #b inVector: #methodVector; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #()) = 2). ^iRMethod ! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 6/8/2012 13:44'! testBlockWithTemp | method ir | method := ClassTestCase>>#targetClass. ir := method ir. "the block sequence of the block with the temp should not have a pushNil, as this is inserted later again" self assert: (ir allSequences at: 5) first isLiteral not.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'ToonVerwaest 3/31/2011 14:30'! testBugOffset | iRMethod aCompiledMethod ir method | iRMethod := IRBuilder new addTemps: #(#a #b); pushTemp: #b; pushTemp: #a; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. ir := aCompiledMethod ir. method := ir compiledMethod. self assert: (aCompiledMethod symbolic = method symbolic). ! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'MarcusDenker 7/16/2012 16:05'! testDecompileBytecodeDecompilerTestClass | decompiledIR aCompiledMethod | (self class) methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. self shouldnt: [aCompiledMethod := decompiledIR compiledMethod] raise: Error]. ! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'MarcusDenker 7/16/2012 16:05'! testDecompileBytecodeGeneratorTest | decompiledIR aCompiledMethod | OCBytecodeGeneratorTest methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. self shouldnt: [aCompiledMethod := decompiledIR compiledMethod] raise: Error]. ! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'MarcusDenker 7/16/2012 16:07'! testDecompileIRBuilderTestClass | decompiledIR aCompiledMethod | IRBuilderTest methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. self shouldnt: [aCompiledMethod := decompiledIR compiledMethod] raise: Error]. ! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'MarcusDenker 7/16/2012 16:05'! testDecompilerOrderedCollectionDo | cm decompiledIR | cm := OrderedCollection>>#do:. decompiledIR := IRBytecodeDecompiler new decompile: cm. self shouldnt: [decompiledIR compiledMethod] raise: Error.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testDup | ir1 ir2 method | ir1 := IRBuilderTest new testDup. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testInstVar | ir1 ir2 method method2 | ir1 := IRBuilderTest new testInstVar. method := ir1 compiledMethod. ir2 := method ir. method2 := ir2 compiledMethod. self deny: method2 == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: method2 = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadTo | ir1 ir2 method | ir1 := IRBuilderTest new testJumpAheadTo. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpAheadToIf | ir1 ir2 method | ir1 := IRBuilderTest new testJumpAheadToIf. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testJumpBackTo | ir1 ir2 method | ir1 := IRBuilderTest new testJumpBackTo. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralArray | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralArray. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralBoolean | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralBoolean. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralCharacter | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralCharacter. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralFloat | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralFloat. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method .! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralInteger | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralInteger. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralNil | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralNil. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralString | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralString. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralSymbol | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralSymbol. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralVariableClass | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralVariableClass. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralVariableClassVariable | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralVariableClassVariable. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testLiteralVariableGlobale | ir1 ir2 method | ir1 := IRBuilderTest new testLiteralVariableGlobale. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPopTop | ir1 ir2 method | ir1 := IRBuilderTest new testPopTop. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushClosureCopyNoCopied | ir1 ir2 method | ir1 := self pushClosureCopyNoCopied. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushClosureCopyNoCopiedArg | ir1 ir2 method | ir1 := self pushClosureCopyNoCopiedArg. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: ir2 compiledMethod symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushClosureCopyOneCopiedArg | ir1 ir2 method | ir1 := self pushClosureCopyOneCopiedArg. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushClosureCopyOneCopiedTemp | ir1 ir2 method | ir1 := self pushClosureCopyOneCopiedTemp. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushConsArray | ir1 ir2 method | ir1 := IRBuilderTest new testPushConsArray. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushConsArray2 | ir1 ir2 method | ir1 := IRBuilderTest new testPushConsArray2. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushSelf | ir1 ir2 method | ir1 := IRBuilderTest new testPushSelf. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempArgument | ir1 ir2 method | ir1 := IRBuilderTest new testPushTempArgument. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushTempTemp | ir1 ir2 method | ir1 := IRBuilderTest new testPushTempTemp. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testPushThisContext | ir1 ir2 method | ir1 := IRBuilderTest new testPushThisContext. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic. self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:05'! testRemoteTemp | ir1 ir2 method | ir1 := self remoteTemp. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:05'! testRemoteTempNested | ir1 ir2 method | ir1 := self remoteTempNested. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testReturnTop | ir1 ir2 method | ir1 := IRBuilderTest new testReturnTop. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testSendSuper | ir1 ir2 method | ir1 := IRBuilderTest new testSendSuper. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreIntoVariable | ir1 ir2 method | ir1 := IRBuilderTest new testStoreIntoVariable. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 7/16/2012 16:07'! testStoreTemp | ir1 ir2 method | ir1 := IRBuilderTest new testStoreTemp. method := ir1 compiledMethod. ir2 := IRBytecodeDecompiler new decompile: method. self deny: ir2 compiledMethod == method. self assert: (ir2 compiledMethod) symbolic = method symbolic . self assert: ir2 compiledMethod = method.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'MarcusDenker 7/16/2012 16:05'! testWhileTrue | cm decompiledIR aCompiledMethod | cm := (self class)>>#testWhileTrue. decompiledIR := IRBytecodeDecompiler new decompile: cm. self shouldnt: [aCompiledMethod := decompiledIR compiledMethod] raise: Error.! ! !OCBytecodeGeneratorTest class methodsFor: 'accessing' stamp: 'lr 8/21/2010 10:06'! packageNamesUnderTest ^ #('OpalCompiler')! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testBlockReturnTop | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; blockReturnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <7D> blockReturn '. ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - execution' stamp: 'MarcusDenker 7/16/2012 16:05'! testClosureExample | cm | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushClosureCopyNumCopiedValues: 0 numArgs: 0 to: #end; pushReceiver; blockReturnTop; label: #end; returnTop; compiledMethod. cm methodClass: self class. cm selector: #test. self assert: (cm isKindOf: CompiledMethod). self assert: ((cm valueWithReceiver: 2@2 arguments: #()) isKindOf: BlockClosure). self assert: ((cm valueWithReceiver: 2@2 arguments: #()) value = (2@2)). ^cm ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - execution' stamp: 'MarcusDenker 7/16/2012 16:05'! testExample | cm | cm := IRBytecodeGenerator new numArgs: 1; numTemps: 1; pushTemp: 1; pushInstVar: 2; send: #>; if: false goto: #else; pushLiteral: 'yes'; returnTop ; label: #else; pushLiteral: 'no'; returnTop; compiledMethod. cm methodClass: self class. cm selector: #test. self assert: (cm isKindOf: CompiledMethod). self assert: (cm valueWithReceiver: 2@2 arguments: #(1)) = 'no' . self assert: (cm valueWithReceiver: 2@2 arguments: #(3)) = 'yes' . ^cm ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - execution' stamp: 'MarcusDenker 7/16/2012 16:05'! testExample2 | cm | cm := IRBytecodeGenerator new numArgs: 1; numTemps: 1; pushInstVar: 2; pushTemp: 1; send: #<; if: false goto: #else; pushLiteral: 'yes'; returnTop ; label: #else; pushLiteral: 'no'; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). self assert: (cm valueWithReceiver: 2@2 arguments: #(1)) = 'no' . self assert: (cm valueWithReceiver: 2@2 arguments: #(3)) = 'yes' . ^cm ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testGoTo | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; label: #back; pushLiteral: 1; returnTop; goto: #back; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <7C> returnTop 16 jumpTo: 14 '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testGoToIf | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 1; pushTemp: 1; pushLiteral: 1; if: true goto: #return; returnTop; label: #return; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <10> pushTemp: 0 14 <76> pushConstant: 1 15 jumpTrue: 18 17 <7C> returnTop 18 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testIfGoTo | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 1; pushTemp: 1; pushLiteral: 1; if: true goto: #return; returnTop; label: #return; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <10> pushTemp: 0 14 <76> pushConstant: 1 15 jumpTrue: 18 17 <7C> returnTop 18 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testIfGoToOtherWise | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 1; pushTemp: 1; pushLiteral: 1; if: true goto: #return otherwise: #other; label: #other; returnTop; label: #return; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <10> pushTemp: 0 14 <76> pushConstant: 1 15 jumpTrue: 18 17 <7C> returnTop 18 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testLabel | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; label: #back; pushLiteral: 1; returnTop; goto: #back; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <7C> returnTop 16 jumpTo: 14 '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPopTop | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushLiteral: 1; popTop; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <87> pop 16 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushClosureCopyNumCopiedValuesNumArgsTo | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushClosureCopyNumCopiedValues: 0 numArgs: 0 to: #end; pushReceiver; blockReturnTop; label: #end; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <8F 00 00 02> closureNumCopied: 0 numArgs: 0 bytes 17 to 18 17 <70> self 18 <7D> blockReturn 19 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushConsArray | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushConsArray: 1; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <8A 81> pop 1 into (Array new: 1) 16 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushDup | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushDup; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <88> dup 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushInstVar | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushInstVar: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <00> pushRcvr: 0 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushLiteral | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushLiteralVariable | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteralVariable: (LookupKey key: '1'); returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <40> pushLit: 1 18 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushNewArray | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushNewArray: 1; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <8A 01> push: (Array new: 1) 15 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushReceiver | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushReceiver; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <70> self 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushRemoteTempInVectorAt | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushRemoteTemp: 1 inVectorAt: 1; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <8C 00 00> pushTemp: 0 inVectorAt: 0 16 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - errors' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushRemoteTempInVectorAtOutOfRange self should: [ IRBytecodeGenerator new numArgs: 0; pushRemoteTemp: 1 inVectorAt: 257 ] raise: Error withExceptionDo: [:exception | self assert: (exception messageText = 'tempVectorIndex is out of range 0 to 255')] ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - errors' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushRemoteTempOutOfRangeInVectorAt self should: [ IRBytecodeGenerator new numArgs: 0; pushRemoteTemp: 257 inVectorAt: 1 ] raise: Error withExceptionDo: [:exception | self assert: (exception messageText = 'remoteTempIndex is out of range 0 to 255')] ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushTemp | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 1; pushTemp: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <10> pushTemp: 0 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testPushThisContext | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushThisContext ; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <89> pushThisContext: 14 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testReturnConstant | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; returnConstant: 1; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = 'Quick return 1' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testReturnInstVar | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; returnInstVar: 1; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = 'Quick return field 0 (0-based)' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testReturnReceiver | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; returnReceiver; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = 'Quick return self' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testReturnTop | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testSend | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; send: #a; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <76> pushConstant: 1 18 send: a 19 <7C> returnTop ' ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testSendToSuperOf | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; send: #a toSuperOf: Object; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <76> pushConstant: 1 18 <85 00> superSend: a 20 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreInstVar | gen cm symbolic | gen := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; storeInstVar: 1; returnTop. cm := gen compiledMethod. symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: gen stackFrameSize = 1. self assert: cm isCompiledMethod. self assert: symbolic = '13 <76> pushConstant: 1 14 <81 00> storeIntoRcvr: 0 16 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreIntoLiteralVariable | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; storeIntoLiteralVariable: (LookupKey key: '1'); returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <76> pushConstant: 1 18 <81 C0> storeIntoLit: 1 20 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreLiteralVariable | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; storeIntoLiteralVariable: OCBytecodeGeneratorTest binding; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <76> pushConstant: 1 18 <81 C0> storeIntoLit: OCBytecodeGeneratorTest 20 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStorePopInstVar | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushLiteral: 1; storePopInstVar: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <60> popIntoRcvr: 0 16 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStorePopIntoLiteralVariable | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushLiteral: 1; storePopIntoLiteralVariable: (#test->1); returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '17 <76> pushConstant: 1 18 <76> pushConstant: 1 19 <82 C0> popIntoLit: test 21 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStorePopRemoteTempInVectorAt | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushLiteral: 1; storePopRemoteTemp: 1 inVectorAt: 1; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <8E 00 00> popIntoTemp: 0 inVectorAt: 0 18 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStorePopTemp | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; pushLiteral: 1; storePopTemp: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <76> pushConstant: 1 15 <68> popIntoTemp: 0 16 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreRemoteTempInVectorAt | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 0; pushLiteral: 1; storeRemoteTemp: 1 inVectorAt: 1; returnTop; compiledMethod. self assert: (cm isKindOf: CompiledMethod). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <8D 00 00> storeIntoTemp: 0 inVectorAt: 0 17 <7C> returnTop '! ! !OCBytecodeGeneratorTest methodsFor: 'tests - errors' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreRemoteTempInVectorAtOutOfRange self should: [ IRBytecodeGenerator new numArgs: 0; storeRemoteTemp: 1 inVectorAt: 257 ] raise: Error withExceptionDo: [:exception | self assert: (exception messageText = 'tempVectorIndex out of range 0 to 255')] ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - errors' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreRemoteTempOutOfRangeInVectorAt self should: [ IRBytecodeGenerator new numArgs: 0; storeRemoteTemp: 257 inVectorAt: 1 ] raise: Error withExceptionDo: [:exception | self assert: (exception messageText = 'remoteTempIndex out of range 0 to 255')] ! ! !OCBytecodeGeneratorTest methodsFor: 'tests - instructions' stamp: 'MarcusDenker 7/16/2012 16:05'! testStoreTemp | cm symbolic | cm := IRBytecodeGenerator new numArgs: 0; numTemps: 1; pushLiteral: 1; storeTemp: 1; returnTop; compiledMethod. self assert: (cm isCompiledMethod ). symbolic := String streamContents: [:str | cm longPrintOn: str ]. self assert: symbolic = '13 <76> pushConstant: 1 14 <81 40> storeIntoTemp: 0 16 <7C> returnTop '! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testBlockTemps | newCompiledMethod originalCompiledMethod | newCompiledMethod := (OpalCompiler new compile: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testComplexMethodClassBuilder | newCompiledMethod originalCompiledMethod | newCompiledMethod := (OpalCompiler new compile:'superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | oldClassOrNil actualType | (aClass instSize > 0) ifTrue: [^self error: ''cannot make a byte subclass of a class with named fields'']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: ''cannot make a byte subclass of a class with word fields'']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: ''cannot make a byte subclass of a class with pointer fields'']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat' in: ClassBuilder classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile:'superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | oldClassOrNil actualType | (aClass instSize > 0) ifTrue: [^self error: ''cannot make a byte subclass of a class with named fields'']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: ''cannot make a byte subclass of a class with word fields'']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: ''cannot make a byte subclass of a class with pointer fields'']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat' in: ClassBuilder classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testNotUsedArgument | newCompiledMethod originalCompiledMethod | newCompiledMethod := (OpalCompiler new compile: 'ascentOf: aCharacter ^ self ascent.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile: 'ascentOf: aCharacter ^ self ascent.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testPragmas | newCompiledMethod originalCompiledMethod | newCompiledMethod := (OpalCompiler new compile:'methodDoublePragma ' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile:'methodDoublePragma ' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. "AdditionalState assertions" self assert: newCompiledMethod literals first selector = originalCompiledMethod literals first selector. self assert: (newCompiledMethod literals first analogousCodeTo: originalCompiledMethod literals first). self assert: (newCompiledMethod literals first instVarNamed: 'method') = newCompiledMethod. self assert: newCompiledMethod literals second = originalCompiledMethod literals second. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testPrimitive | newCompiledMethod originalCompiledMethod | newCompiledMethod := (OpalCompiler new compile: 'size ^ self basicSize.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile: 'size ^ self basicSize.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 12/13/2012 08:45'! testRemoteTempInVector | newCompiledMethod originalCompiledMethod | "Here the problem was that the Scope kept both the remote temp answer and the new remote this caused that the number of temps were more than the correnct" newCompiledMethod := (OpalCompiler new compile: 'value | answer | self do: [:each | answer := each value]. ^answer' in: Object classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := (Compiler new compile: 'value | answer | self do: [:each | answer := each value]. ^answer' in: Object classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:43'! testIfNilIfNotNil0Arg self assert: (5 ifNil: [#foo] ifNotNil: [#bar]) = #bar. self assert: (nil ifNil: [#foo] ifNotNil: [#bar]) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:43'! testIfNilIfNotNil0ArgAsVar | block1 block2 | block1 := [#foo]. block2 := [#bar]. self assert: (5 ifNil: block1 ifNotNil: block2) = #bar. self assert: (nil ifNil: block1 ifNotNil: block2) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/15/2007 12:25'! testIfNilIfNotNil1Arg self assert: (5 ifNil: [#foo] ifNotNil: [:a | a printString]) = '5'. self assert: (nil ifNil: [#foo] ifNotNil: [:a | a printString]) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:33'! testIfNilIfNotNil1ArgAsVar | block1 block2 | block1 := [#foo]. block2 := [:a | a printString]. self assert: (5 ifNil: block1 ifNotNil: block2) = '5'. self assert: (nil ifNil: block1 ifNotNil: block2) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'GabrielOmarCotelli 5/25/2010 21:22'! testIfNotNil0Arg self assert: (5 ifNotNil: [ #foo ]) = #foo. self assert: (nil ifNotNil: [ #foo ]) isNil! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'GabrielOmarCotelli 5/25/2010 21:22'! testIfNotNil0ArgAsVar | block | block := [ #foo ]. self assert: (5 ifNotNil: block) = #foo. self assert: (nil ifNotNil: block) isNil! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'GabrielOmarCotelli 5/25/2010 21:22'! testIfNotNil1Arg self assert: (5 ifNotNil: [ :a | a printString ]) = '5'. self assert: (nil ifNotNil: [ :a | a printString ]) isNil! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'GabrielOmarCotelli 5/25/2010 21:22'! testIfNotNil1ArgAsVar | block | block := [ :a | a printString ]. self assert: (5 ifNotNil: block) = '5'. self assert: (nil ifNotNil: block) isNil! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:35'! testIfNotNilIfNil0Arg self assert: (5 ifNotNil: [#foo] ifNil: [#bar]) = #foo. self assert: (nil ifNotNil: [#foo] ifNil: [#bar]) = #bar! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:36'! testIfNotNilIfNil0ArgAsVar | block1 block2 | block1 := [#foo]. block2 := [#bar]. self assert: (5 ifNotNil: block2 ifNil: block1) = #bar. self assert: (nil ifNotNil: block2 ifNil: block1) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:35'! testIfNotNilIfNil1Arg self assert: (5 ifNotNil: [:a | a printString] ifNil: [#foo]) = '5'. self assert: (nil ifNotNil: [:a | a printString] ifNil: [#foo]) = #foo! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'vb 4/16/2007 11:36'! testIfNotNilIfNil1ArgAsVar | block1 block2 | block1 := [#foo]. block2 := [:a | a printString]. self assert: (5 ifNotNil: block2 ifNil: block1) = '5'. self assert: (nil ifNotNil: block2 ifNil: block1) = #foo! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - block returning' stamp: 'MarcusDenker 12/13/2012 08:45'! testBlockReturning | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'open (self announcements at: self index ifAbsent: [ ^ self ]) open' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '29 <70> self'. self assert: (bytecode at: (index := index + 1)) = '30 send: announcements'. self assert: (bytecode at: (index := index + 1)) = '31 <70> self'. self assert: (bytecode at: (index := index + 1)) = '32 send: index'. self assert: (bytecode at: (index := index + 1)) = '33 <8F 00 00 01> closureNumCopied: 0 numArgs: 0 bytes 37 to 37'. self assert: (bytecode at: (index := index + 1)) = '37 <78> returnSelf'. self assert: (bytecode at: (index := index + 1)) = '38 send: at:ifAbsent:'. self assert: (bytecode at: (index := index + 1)) = '39 send: open'. self assert: (bytecode at: (index := index + 1)) = '40 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '41 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testBlockTemp | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testBlockTemp | block block1 block2 | block := [ :arg | [ arg ] ]. block1 := block value: 1. block2 := block value: 2. self assert: block1 value = 1. self assert: block2 value = 2' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <8F 01 00 08> closureNumCopied: 0 numArgs: 1 bytes 21 to 28'. self assert: (bytecode at: (index := index + 1)) = '21 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '22 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 26 to 27'. self assert: (bytecode at: (index := index + 1)) = '26 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '27 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '28 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '29 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '30 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '31 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '32 send: value:'. self assert: (bytecode at: (index := index + 1)) = '33 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '34 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '35 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '36 send: value:'. self assert: (bytecode at: (index := index + 1)) = '37 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '38 <70> self'. self assert: (bytecode at: (index := index + 1)) = '39 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '40 send: value'. self assert: (bytecode at: (index := index + 1)) = '41 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '42 send: ='. self assert: (bytecode at: (index := index + 1)) = '43 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '44 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '45 <70> self'. self assert: (bytecode at: (index := index + 1)) = '46 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '47 send: value'. self assert: (bytecode at: (index := index + 1)) = '48 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '49 send: ='. self assert: (bytecode at: (index := index + 1)) = '50 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '51 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '52 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'other-tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testDifferentBlocksWithSameArgumentName | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'exampleNestedBlock | b c z | b := [:a | z := 2. z + a]. c := [:a | z + a]. ^ (b value: 2) + (c value: 1)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '15 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '16 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '17 <8F 11 00 0A> closureNumCopied: 1 numArgs: 1 bytes 21 to 30'. self assert: (bytecode at: (index := index + 1)) = '21 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '22 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '25 <8C 00 01> pushTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '28 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '29 send: +'. self assert: (bytecode at: (index := index + 1)) = '30 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '31 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '32 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '33 <8F 11 00 06> closureNumCopied: 1 numArgs: 1 bytes 37 to 42'. self assert: (bytecode at: (index := index + 1)) = '37 <8C 00 01> pushTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '41 send: +'. self assert: (bytecode at: (index := index + 1)) = '42 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '43 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '44 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '45 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '46 send: value:'. self assert: (bytecode at: (index := index + 1)) = '47 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 send: value:'. self assert: (bytecode at: (index := index + 1)) = '50 send: +'. self assert: (bytecode at: (index := index + 1)) = '51 <7C> returnTop'.! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testMethodArgument | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testMethodArgument | temp block | temp := 0. block := [ [ temp ] ]. temp := 1. block := block value. temp := 2. self assert: block value = 2' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '19 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '20 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '21 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '24 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '25 <8F 10 00 0A> closureNumCopied: 1 numArgs: 0 bytes 29 to 38'. self assert: (bytecode at: (index := index + 1)) = '29 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '30 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 34 to 37'. self assert: (bytecode at: (index := index + 1)) = '34 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '38 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '39 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '40 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '44 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '45 send: value'. self assert: (bytecode at: (index := index + 1)) = '46 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '48 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '51 <70> self'. self assert: (bytecode at: (index := index + 1)) = '52 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '53 send: value'. self assert: (bytecode at: (index := index + 1)) = '54 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '55 send: ='. self assert: (bytecode at: (index := index + 1)) = '56 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '57 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '58 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testMethodTemp | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testMethodTemp | block1 block2 | block1 := self methodArgument: 1. block2 := self methodArgument: 2. self assert: block1 value = 1. self assert: block2 value = 2' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '23 send: methodArgument:'. self assert: (bytecode at: (index := index + 1)) = '24 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '25 <70> self'. self assert: (bytecode at: (index := index + 1)) = '26 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '27 send: methodArgument:'. self assert: (bytecode at: (index := index + 1)) = '28 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '29 <70> self'. self assert: (bytecode at: (index := index + 1)) = '30 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '31 send: value'. self assert: (bytecode at: (index := index + 1)) = '32 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '33 send: ='. self assert: (bytecode at: (index := index + 1)) = '34 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '35 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '36 <70> self'. self assert: (bytecode at: (index := index + 1)) = '37 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '38 send: value'. self assert: (bytecode at: (index := index + 1)) = '39 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '40 send: ='. self assert: (bytecode at: (index := index + 1)) = '41 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '42 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '43 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'other-tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testModulePrimitive | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'copyBitsAgain "Primitive. See BitBlt|copyBits, also a Primitive. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed' in: BitBlt classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = ''. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 send: primitiveFailed'. self assert: (bytecode at: (index := index + 1)) = '23 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '24 <78> returnSelf'.! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - array compilation' stamp: 'MarcusDenker 12/13/2012 08:45'! testMultiElementArray | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'method ^{1. 2. 3. 4. 5. 6 }' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '29 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '30 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '31 <20> pushConstant: 3'. self assert: (bytecode at: (index := index + 1)) = '32 <21> pushConstant: 4'. self assert: (bytecode at: (index := index + 1)) = '33 <22> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '34 <23> pushConstant: 6'. self assert: (bytecode at: (index := index + 1)) = '35 <8A 86> pop 6 into (Array new: 6)'. self assert: (bytecode at: (index := index + 1)) = '37 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testOneFloat | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'one ^1.0' in: Float class classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <20> pushConstant: 1.0'. self assert: (bytecode at: (index := index + 1)) = '18 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testPragma | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile:'methodDoublePragma ' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = 'Quick return self'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testReturnBlockInMethod | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'methodArgument: anObject ^ [ anObject ]' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '14 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 18 to 19'. self assert: (bytecode at: (index := index + 1)) = '18 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '19 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '20 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testSetUp | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'setUp super setUp. collection := OrderedCollection new' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 <85 00> superSend: setUp'. self assert: (bytecode at: (index := index + 1)) = '24 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '25 <41> pushLit: OrderedCollection'. self assert: (bytecode at: (index := index + 1)) = '26 send: new'. self assert: (bytecode at: (index := index + 1)) = '27 <60> popIntoRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '28 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - array compilation' stamp: 'MarcusDenker 12/13/2012 08:45'! testSimpleArray | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'method ^{1}' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '14 <8A 81> pop 1 into (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '16 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testSteamContentsLimitedToSequenceableCollectionClass | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'streamContents: blockWithArg limitedTo: sizeLimit | stream | stream := LimitedWriteStream on: (self new: (100 min: sizeLimit)). stream setLimit: sizeLimit limitBlock: [^ stream contents]. blockWithArg value: stream. ^ stream contents' in: SequenceableCollection class classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '37 <40> pushLit: LimitedWriteStream'. self assert: (bytecode at: (index := index + 1)) = '38 <70> self'. self assert: (bytecode at: (index := index + 1)) = '39 <21> pushConstant: 100'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 send: min:'. self assert: (bytecode at: (index := index + 1)) = '42 send: new:'. self assert: (bytecode at: (index := index + 1)) = '43 send: on:'. self assert: (bytecode at: (index := index + 1)) = '44 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '45 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '46 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '47 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '48 <8F 10 00 03> closureNumCopied: 1 numArgs: 0 bytes 52 to 54'. self assert: (bytecode at: (index := index + 1)) = '52 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '53 send: contents'. self assert: (bytecode at: (index := index + 1)) = '54 <7C> returnTop'. self assert: (bytecode at: (index := index + 1)) = '55 send: setLimit:limitBlock:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '58 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '59 send: value:'. self assert: (bytecode at: (index := index + 1)) = '60 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '61 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '62 send: contents'. self assert: (bytecode at: (index := index + 1)) = '63 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testToDoArgumentNotInlined | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testToDoArgumentNotInlined | block | block := [ :index | collection add: [ index ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8F 01 00 0A> closureNumCopied: 0 numArgs: 1 bytes 37 to 46'. self assert: (bytecode at: (index := index + 1)) = '37 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '38 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '39 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 43 to 44'. self assert: (bytecode at: (index := index + 1)) = '43 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '44 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '45 send: add:'. self assert: (bytecode at: (index := index + 1)) = '46 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '47 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '50 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '51 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '52 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '53 <70> self'. self assert: (bytecode at: (index := index + 1)) = '54 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '55 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testToDoInsideTempNotInlined "Some instructions are the same but we have a different number at he begining, and the storeTemp and popIntoTemp issue" | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testToDoInsideTempNotInlined | block | block := [ :index | | temp | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8F 01 00 0D> closureNumCopied: 0 numArgs: 1 bytes 37 to 49'. self assert: (bytecode at: (index := index + 1)) = '37 <73> pushConstant: nil'. self assert: (bytecode at: (index := index + 1)) = '38 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '39 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '41 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '42 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 46 to 47'. self assert: (bytecode at: (index := index + 1)) = '46 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '48 send: add:'. self assert: (bytecode at: (index := index + 1)) = '49 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '50 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '51 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '52 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '53 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '54 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '55 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '56 <70> self'. self assert: (bytecode at: (index := index + 1)) = '57 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '58 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '59 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '60 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testToDoOutsideTempNotInlined "there seems to be a better indexzation of the temps we have one more" | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testToDoOutsideTempNotInlined | block temp | block := [ :index | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(5 5 5 5 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '37 <8F 11 00 10> closureNumCopied: 1 numArgs: 1 bytes 41 to 56'. self assert: (bytecode at: (index := index + 1)) = '41 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '42 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '45 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '46 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '47 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 51 to 54'. self assert: (bytecode at: (index := index + 1)) = '51 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '55 send: add:'. self assert: (bytecode at: (index := index + 1)) = '56 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '57 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '58 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '59 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '60 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '61 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '62 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '63 <70> self'. self assert: (bytecode at: (index := index + 1)) = '64 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '65 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '66 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '67 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testWhileModificationAfterNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testWhileModificationAfterNotInlined | index block | index := 0. block := [ collection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 15> closureNumCopied: 1 numArgs: 0 bytes 45 to 65'. self assert: (bytecode at: (index := index + 1)) = '45 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '46 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 51 to 54'. self assert: (bytecode at: (index := index + 1)) = '51 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '55 send: add:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '60 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '61 send: +'. self assert: (bytecode at: (index := index + 1)) = '62 <8D 00 00> storeIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '65 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '66 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '67 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '68 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 72 to 77'. self assert: (bytecode at: (index := index + 1)) = '72 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '75 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '76 send: <'. self assert: (bytecode at: (index := index + 1)) = '77 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '78 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '79 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '80 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '81 <70> self'. self assert: (bytecode at: (index := index + 1)) = '82 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '83 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '84 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '85 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testWhileModificationBeforeNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testWhileModificationBeforeNotInlined | index block | index := 0. block := [ index := index + 1. collection add: [ index ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 14> closureNumCopied: 1 numArgs: 0 bytes 45 to 64'. self assert: (bytecode at: (index := index + 1)) = '45 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 send: +'. self assert: (bytecode at: (index := index + 1)) = '50 <8E 00 00> popIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '53 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '55 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 59 to 62'. self assert: (bytecode at: (index := index + 1)) = '59 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '62 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '63 send: add:'. self assert: (bytecode at: (index := index + 1)) = '64 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '65 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '66 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '67 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 71 to 76'. self assert: (bytecode at: (index := index + 1)) = '71 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '74 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '75 send: <'. self assert: (bytecode at: (index := index + 1)) = '76 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '77 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '78 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '79 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '80 <70> self'. self assert: (bytecode at: (index := index + 1)) = '81 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '82 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '83 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '84 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 12/13/2012 08:45'! testWhileWithTempNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := (OpalCompiler new compile: 'testWhileWithTempNotInlined | index block | index := 0. block := [ | temp | temp := index := index + 1. collection add: [ temp ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(1 2 3 4 5)' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 14> closureNumCopied: 1 numArgs: 0 bytes 45 to 64'. self assert: (bytecode at: (index := index + 1)) = '45 <73> pushConstant: nil'. self assert: (bytecode at: (index := index + 1)) = '46 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '49 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '50 send: +'. self assert: (bytecode at: (index := index + 1)) = '51 <8D 00 00> storeIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '55 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '56 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '57 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 61 to 62'. self assert: (bytecode at: (index := index + 1)) = '61 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '62 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '63 send: add:'. self assert: (bytecode at: (index := index + 1)) = '64 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '65 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '66 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '67 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 71 to 76'. self assert: (bytecode at: (index := index + 1)) = '71 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '74 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '75 send: <'. self assert: (bytecode at: (index := index + 1)) = '76 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '77 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '78 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '79 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '80 <70> self'. self assert: (bytecode at: (index := index + 1)) = '81 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '82 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '83 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '84 <78> returnSelf'. ! ! !OCPerformTest commentStamp: 'HenrikSperreJohansen 5/19/2010 02:33' prior: 34980491! I test a primitive failure with perform:withArguments: which was raised when selectors with many arguments was called from methods with small stack sizes.! !OCPerformTest methodsFor: 'helper methods' stamp: 'Igor.Stasenko 5/19/2010 00:21'! a1: a1 a2: a2 a3: a3 a4: a4 a5: a5 a6: a6 a7: a7 a8:a8 a9: a9 a10: a10 a11: a11 a12: a12 a13: a13 a14: a14 a15: a15 ^ true! ! !OCPerformTest methodsFor: 'helper methods' stamp: 'MarcusDenker 6/17/2012 15:06'! doPerformOldLargeFrame | t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 | "The perform primitive reuses the current stack frame. When this was big,the following perform would succeed, since the stack frame was large enough to fit all the arguments" t1 := t2 := t3 := t4 := t5 := t6 := t7 := t8 := t9 := t10 := t11 := t12 := t13 := 1. self perform: #a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15: withArguments: (Array new: 15). ^ t1! ! !OCPerformTest methodsFor: 'helper methods' stamp: 'HenrikSperreJohansen 5/19/2010 02:28'! doPerformOldSmallFrame "The perform primitive reuses the current stack frame. When this was small, it would cause the perform primitive to fail, when the amount of arguments were too high" ^self perform: #a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15: withArguments: (Array new: 15). ! ! !OCPerformTest methodsFor: 'testing' stamp: 'HenrikSperreJohansen 5/19/2010 02:39'! testPerformWithArgsLargeFrame self shouldnt: [self doPerformOldLargeFrame] raise: Error. ! ! !OCPerformTest methodsFor: 'testing' stamp: 'HenrikSperreJohansen 5/19/2010 02:39'! testPerformWithArgsSmallFrame self shouldnt: [self doPerformOldSmallFrame] raise: Error. ! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/19/2006 00:12'! methodApicall ^'methodApicall: aHWND ^self externalCallFailed'! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/19/2006 00:15'! methodCdecl ^'XCloseDisplay: aDisplay ^self externalCallFailed'! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/25/2006 08:36'! methodCdeclNoModule ^'ffiTestShort: c1 with: c2 with: c3 with: c4 "FFITester ffiTestShort: $A with: 65 with: 65.0 with: $A" ^self externalCallFailed'! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/16/2006 21:03'! methodDoublePragma ^'methodDoublePragma '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/26/2006 22:53'! methodNoPragma ^'methodNoPragma: aNum ^aNum'! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/16/2006 21:04'! methodPragmaAfterBeforTemps ^'methodPragmaAfterBeforTemps | aTemp | '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/20/2006 20:49'! methodPragmaTwoParam ^'methodDoublePragma '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/25/2006 07:56'! methodPragmaUnarayMessage ^'methodPragmaUnarayMessage '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/16/2006 21:05'! methodPrimitive ^'methodPrimitive '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/16/2006 21:05'! methodPrimitivePragma ^'methodPrimitivePragma '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/22/2006 13:31'! methodPrimitiveString ^'methodPrimitiveString '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/22/2006 13:33'! methodPrimitiveStringModule ^'methodPrimitiveStringModule '! ! !OCPragmaTest methodsFor: 'method-tested' stamp: 'ms 7/16/2006 21:06'! methodSinglePragma ^'methodSinglePragma '! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testApicall | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodApicall in: self class notifying: [nil]. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction)). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testCdecl | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodCdecl in: self class notifying: [nil]. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction )). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testCdeclNoModule | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodCdeclNoModule in: self class notifying: [nil]. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction)). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testDoublePragma | aRBMethode | "self debug: #testDoublePragma" aRBMethode := OpalCompiler new parse: self methodDoublePragma in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:). self assert: (aRBMethode compiledMethod pragmas second keyword = #hello:)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testIsPrimitve | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitive in: self class notifying: [nil]. self assert: aRBMethode isPrimitive! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testNoPragma "self debug: #testDoublePrimitive" self shouldnt: [OpalCompiler new parse: self methodNoPragma in: self class notifying: nil] raise: Error! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPragmaAfterBeforTemp "self debug: #testPragmaAfterBeforTemp" | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaAfterBeforTemps in: self class notifying: nil. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:). self assert: (aRBMethode compiledMethod pragmas second keyword = #world:) ! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPragmaTwoParam "self debug: #testPragmaAfterBeforTemp" | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaTwoParam in: self class notifying: nil. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:by:) ! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPragmaUnarayMessage | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaUnarayMessage in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPrimitiveNumber | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitive in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod primitive = 4)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPrimitivePragmaNumber | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitivePragma in: self class notifying: [^nil]. self assert: (aRBMethode compiledMethod primitive = 4)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPrimitiveString | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitiveString in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod primitive = 117)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testPrimitiveStringModule | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitiveStringModule in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod primitive = 117)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 12/13/2012 08:45'! testSinglePragma | aRBMethode | aRBMethode := OpalCompiler new parse: self methodSinglePragma in: self class notifying: [nil]. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:) ! ! !OCSourceCode2BytecodeTest commentStamp: 'kwl 10/14/2006 10:43' prior: 34980721! I provide at least one test which corresponds to a message sent by InstructionStream>>#interpretNextInstructionFor: to its client.! !OCSourceCode2BytecodeTest methodsFor: 'compiling' stamp: 'MarcusDenker 12/13/2012 08:45'! compile2methodNode: sourceStream "Compile code without logging the source in the changes file" | methodNode | methodNode := OpalCompiler new from: sourceStream class: self class classified: nil context: nil notifying: nil; translate: sourceStream noPattern: false ifFail: [^ nil]. ^ CompiledMethodWithNode generateMethodFromNode: methodNode trailer:CompiledMethodTrailer empty! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:53'! testDoDup | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'duplicateTopBytecode 3 + 4; yourself') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #doDup description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:01'! testDoPop | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'popStackBytecode 3 + 4') selector. scanner := InstructionStream on: methodNode method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #doPop description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:11'! testPrimAdd | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimAdd 3 + 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#+. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:32'! testPrimAt | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimAt self at: 3') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#at:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:38'! testPrimAtEnd | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimSize self atEnd') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#atEnd. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:30'! testPrimAtPut | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimAtPut self at: 3 put: 4') selector. scanner := InstructionStream on: methodNode method. 3 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#at:put:. false. 2}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:27'! testPrimBitAnd | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimBitAnd 3 bitAnd: 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitAnd:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:28'! testPrimBitOr | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimBitOr 3 bitOr: 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitOr:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:24'! testPrimBitShift | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimBitShift 3 bitShift: 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitShift:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:17'! testPrimDivide | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimDivide 3 / 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#/. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:57'! testPrimDoWith | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodeDoWith self do: #something') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#do:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:16'! testPrimEqual | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimEqual 3 = 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'='. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:15'! testPrimGreaterOrEqual | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimGreaterOrEqual 3 >= 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'>='. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:14'! testPrimGreaterThan | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimGreaterThan 3 > 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#>. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:39'! testPrimIdentity | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimIdentity 3 == 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#==. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:14'! testPrimLessOrEqual | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimLessOrEqual 3 <= 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#<=. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:13'! testPrimLessThan | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimLessThan 3 < 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#<. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:21'! testPrimMakePoint | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimMakePoint 3 @ 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'@'. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:19'! testPrimMod | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimMod 3 \\ 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#\\. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:17'! testPrimMultiply | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimMultiply 3 * 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'*'. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:59'! testPrimNew | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimNew super new') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new. true. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:00'! testPrimNewWith | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodeNewWith self new: 3') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:36'! testPrimNext | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimSize self next') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#next. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:38'! testPrimNextPut | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimNextPut self nextPut: 3') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#nextPut:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:16'! testPrimNotEqual | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimNotEqual 3 ~= 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#~=. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:01'! testPrimPointX | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimPointX self x') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#x. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:01'! testPrimPointY | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimPointY self y') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#y. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:26'! testPrimQuo | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimQuo 3 // 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#//. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:32'! testPrimSize | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimSize self size') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#size. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:12'! testPrimSubtract | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimSubtract 3 - 4') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#-. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:55'! testPrimValue | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodePrimValue self value') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#value. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 12:57'! testPrimValueWith | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodeValueWith self value: 3') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#value:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/21/2010 17:07'! testPushActiveContextBytecode | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'pushActiveContextBytecode thisContext yourself') selector. scanner := InstructionStream on: methodNode method. self assert: scanner peekInstruction selector == #pushActiveContext description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 15:31'! testPushConstantFalseBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantFalseBytecode false yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first not]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:37'! testPushConstantMinusOneBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantMinusOneBytecode -1 yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == -1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 14:45'! testPushConstantNilBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantNilBytecode nil yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first isNil]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:39'! testPushConstantOneBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantOneBytecode 1 yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 15:31'! testPushConstantTrueBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantTrueBytecode true yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:39'! testPushConstantTwoBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantTwoBytecode 2 yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:38'! testPushConstantZeroBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushConstantZeroBytecode 0 yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 0]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:33'! testPushLiteralConstantBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushLiteralConstantBytecode #() yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first = #()]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 10:42'! testPushLiteralVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushLiteralVariableBytecode ClassVar yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:27'! testPushReceiverBytecode | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'pushReceiverBytecode ^ self yourself') selector. scanner := InstructionStream on: methodNode method. self assert: scanner peekInstruction selector == #pushReceiver description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/15/2011 16:27'! testPushReceiverVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushReceiverVariableBytecode instVar yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 20:11'! testPushTemporaryVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'pushTemporaryVariableBytecode: t0 t0 yourself') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner peekInstruction) selector == #pushTemporaryVariable: and: [did arguments first == 0]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 15:31'! testReturnFalseBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'returnFalseBytecode 3 + 4. ^ false') selector. scanner := InstructionStream on: methodNode method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first not]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 14:45'! testReturnNilBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'returnNilBytecode 3 + 4. ^ nil') selector. scanner := InstructionStream on: methodNode method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first isNil]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:47'! testReturnReceiver | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'returnReceiver 3 + 4. ^ self') selector. scanner := InstructionStream on: methodNode method. 4 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #methodReturnReceiver description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 4/8/2013 17:05'! testReturnTopFromBlock | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'returnTopFromBlock |ia| ^[ia]') selector. scanner := InstructionStream on: methodNode method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #blockReturnTop description: ('Failed ' , selector)! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 19:53'! testReturnTopFromMethod | selector methodNode scanner | selector := (methodNode := self compile2methodNode: 'returnTopFromMethod ^ 3 + 4') selector. scanner := InstructionStream on: methodNode method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #methodReturnTop description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/12/2010 15:31'! testReturnTrueBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'returnTrueBytecode 3 + 4. ^ true') selector. scanner := InstructionStream on: methodNode method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 10:56'! testStoreAndPopLiteralVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeAndPopLiteralVariableBytecode ClassVar := nil') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/15/2011 16:27'! testStoreAndPopReceiverVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeAndPopReceiverVariableBytecode instVar := self') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/12/2006 20:16'! testStoreAndPopTemporaryVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeAndPopTemporaryVariableBytecode | t0 t1 | t1 := t0') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoTemporaryVariable: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 10:53'! testStoreIntoLiteralVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeIntoLiteralVariableBytecode ^ (ClassVar := nil)') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 8/15/2011 16:27'! testStoreIntoReceiverVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeIntoReceiverVariableBytecode ^ (instVar := self)') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 10:51'! testStoreIntoTemporaryVariableBytecode | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'storeIntoTemporaryVariableBytecode | t0 t1 | ^ (t1 := t0)') selector. scanner := InstructionStream on: methodNode method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoTemporaryVariable: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:04'! testSuperSend | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodeSuperSend super yourself') selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#yourself. true. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'kwl 10/14/2006 13:04'! testSuperSendWith | selector methodNode scanner did | selector := (methodNode := self compile2methodNode: 'bytecodeSuperSendWith super new: 0') selector. scanner := InstructionStream on: methodNode method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new:. true. 1}]) description: 'Failed ' , selector! ! "OpalCompiler-Tests"! !NondestructiveRecompileTests commentStamp: '' prior: 0! Non-Destructive Recompile related tests! !IRComparer commentStamp: '' prior: 0! I am a simple tool to compare methods: Orignal vs. generated from IR. It uses #abstractSymbolic to abstract away from offsets used for temps and sizes of bytecodes between jumps. Use: IRComparer new compare: Object. IRComparer new compareImage.! !OCRecompiler commentStamp: '' prior: 0! [OCRecompiler new inspect; recompileImage] forkAt: 30 [OCRecompiler new inspect; decompileAndRecompileImage] forkAt: 30 ! !NondestructiveRecompileTests commentStamp: '' prior: 35258929! Non-Destructive Recompile related tests! !NondestructiveRecompileTests methodsFor: 'tests' stamp: 'MarcusDenker 1/31/2013 10:39'! testRecompile "recompiler has the install code commented out..." | recompiler | recompiler := OCRecompiler new recompileImage. self assert: recompiler problemMethods isEmpty.! ! !CompilerComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2012 16:35'! compare: aClass | rejected | rejected := aClass methods reject: [:method | method abstractSymbolic = (self compileNew: method) abstractSymbolic ]. rejected do: [:method | |assoc| assoc := method abstractSymbolic -> (self compileNew: method) abstractSymbolic. problemMethods at: method selector put: assoc . ].! ! !CompilerComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 12/13/2012 08:45'! compileNew: aMethod ^(OpalCompiler new compile: aMethod sourceCode in: aMethod methodClass classified: nil notifying: nil ifFail: []) generate.! ! !CompilerComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2012 16:24'! initialize problemMethods := Dictionary new.! ! !IRComparer commentStamp: '' prior: 35259021! I am a simple tool to compare methods: Orignal vs. generated from IR. It uses #abstractSymbolic to abstract away from offsets used for temps and sizes of bytecodes between jumps. Use: IRComparer new compare: Object. IRComparer new compareImage.! !IRComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/6/2012 14:33'! compare: aClass | rejected | rejected := aClass methods reject: [:method | method abstractSymbolic = (self decompileAndRecompile: method) abstractSymbolic ]. "filter out all cases of a return nil at the end" rejected := rejected reject: [:method | method abstractSymbolic endsWith: 'pushConstant: nil returnTop '. ]. rejected do: [:method | |assoc| assoc := method abstractSymbolic -> (self decompileAndRecompile: method) abstractSymbolic. problemMethods at: method selector put: assoc . ] ! ! !IRComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/6/2012 14:51'! compareImage | rejected | rejected := OrderedCollection new. Smalltalk allClassesAndTraits do: [:class | rejected addAll: (class methods reject: [:method | method abstractSymbolic = (self decompileAndRecompile: method) abstractSymbolic ]) ]. "filter out all cases of a return nil at the end" rejected := rejected reject: [:method | method abstractSymbolic endsWith: 'pushConstant: nil returnTop '. ]. rejected do: [:method | |assoc| assoc := method abstractSymbolic -> (self decompileAndRecompile: method) abstractSymbolic. problemMethods at: method selector put: assoc . ] ! ! !IRComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/19/2012 14:52'! compareImageFrameSize | rejected | rejected := OrderedCollection new. Smalltalk allClassesAndTraits do: [:class | rejected addAll: (class methods reject: [:method | method frameSize = (self decompileAndRecompile: method) frameSize. ]) ]. rejected do: [:method | |assoc| problemMethods at: method asRingDefinition put: method frameSize -> (self decompileAndRecompile: method) frameSize . ] ! ! !IRComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2012 15:50'! decompileAndRecompile: aMethod ^ (aMethod ir) compiledMethodWith: aMethod trailer. ! ! !IRComparer methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2012 15:52'! initialize problemMethods := Dictionary new.! ! !OCRecompiler commentStamp: '' prior: 35259325! [OCRecompiler new inspect; recompileImage] forkAt: 30 [OCRecompiler new inspect; decompileAndRecompileImage] forkAt: 30 ! !OCRecompiler methodsFor: 'recompile-ir' stamp: 'MarcusDenker 3/6/2012 15:56'! decompileBC2IR "decompile all the byteocde of all methods of all classes to IR" Smalltalk allClassesAndTraits do: [:class | class localMethods do: [:method | method ir]] displayingProgress: 'decompiling' ! ! !OCRecompiler methodsFor: 'recompile-ir' stamp: 'MarcusDenker 3/7/2012 15:09'! decompileBC2IRAndInstall "recompile the image BC->IR->BC and install" | new | Smalltalk allClassesAndTraits do: [:class| class localMethods do: [:method | new := (method ir) compiledMethodWith: method trailer. class addSelectorSilently: method selector withMethod: new.]]! ! !OCRecompiler methodsFor: 'recompile-ir' stamp: 'MarcusDenker 3/7/2012 15:09'! decompileBC2IRAndRegenerate "decompile all the byteocde of all methods of all classes to IR. Then it gnerates a new method using IRBuilder" Smalltalk allClassesAndTraits do: [:class | class localMethods do: [:method | (method ir) compiledMethodWith: method trailer]] displayingProgress: 'recompiling'! ! !OCRecompiler methodsFor: 'accessing' stamp: 'MarcusDenker 3/6/2012 15:55'! doInstallMethods install := true! ! !OCRecompiler methodsFor: 'problem methods' stamp: 'MarcusDenker 6/21/2012 16:23'! initialize problemMethods := OrderedCollection new. install := false. transcript := NonInteractiveTranscript new. verbose := false.! ! !OCRecompiler methodsFor: 'requestor interface' stamp: 'ajh 5/19/2004 17:32'! interactive "Batch compiling, not interactive" ^ false! ! !OCRecompiler methodsFor: 'requestor interface' stamp: 'ajh 5/19/2004 17:32'! notify: aString at: anInteger in: aStream "Called from Parser2 on syntax error. Do nothing and let fail block handle it" ! ! !OCRecompiler methodsFor: 'problem methods' stamp: 'ajh 5/19/2004 18:16'! problem: reason sel: selector in: class problemMethods add: {class. selector. reason}! ! !OCRecompiler methodsFor: 'accessing' stamp: 'MarcusDenker 1/15/2013 15:48'! problemMethods ^problemMethods! ! !OCRecompiler methodsFor: 'recompile' stamp: 'MarcusDenker 12/13/2012 08:45'! recompile: selector in: class "Recompile method in class. If method can't be recompiled (because of compile error) add it to problemMethods with general reason" | source oldMethod methodNode newMethod | oldMethod := class compiledMethodAt: selector. source := oldMethod getSource. source ifNil: [^ self problem: 'no source' sel: selector in: class]. methodNode := OpalCompiler new compile: source in: class notifying: self ifFail: [^ self problem: 'syntax error' sel: selector in: class]. selector == methodNode selector ifFalse: [ ^ self problem: 'selector changed' sel: selector in: class]. newMethod := methodNode generate: oldMethod trailer. install ifTrue: [class addSelectorSilently: selector withMethod: newMethod] ! ! !OCRecompiler methodsFor: 'recompile' stamp: 'MarcusDenker 6/21/2012 16:24'! recompileClass: class {class. class class} do: [:behavior | behavior localSelectors do: [:selector | verbose ifTrue: [transcript show: behavior name asString, '>>', selector asString;cr.]. [self recompile: selector in: behavior] on: Error do: [:ex |self problem: ex description sel: selector in: behavior]]] ! ! !OCRecompiler methodsFor: 'recompile' stamp: 'MarcusDenker 3/6/2012 15:53'! recompileImage "Recomiles all class/instance methods in image. Methods that can't be recompiled (because of compile error) are added to problemMethods and are not recompiled" Smalltalk allClassesAndTraits do: [:classOrTrait | self recompileClass: classOrTrait] displayingProgress: 'Recompiling all classes and traits'. ! ! !OCRecompiler methodsFor: 'recompile' stamp: 'MarcusDenker 3/6/2012 15:48'! recompilePackage: aString (PackageInfo named: aString) classes do:[:each | self recompileClass: each] displayingProgress: 'Recompiling all classes and traits in package ', aString.! ! "OpalCompiler-RegressionTests"! !DestructiveRecompileTests methodsFor: 'tests' stamp: 'MarcusDenker 2/7/2013 14:28'! testRecompileAndInstall | recompiler | SmalltalkImage compilerClass: OpalCompiler. Compiler recompileAll. ! ! "OpalCompiler-DestructiveRegressionTests"! ConfigurationOfOpalCompiler removeSelector: #versionPharo2:! ConfigurationOfOpalCompiler removeSelector: #versionDev:! ConfigurationOfOpalCompiler removeSelector: #stable:! ConfigurationOfOpalCompiler removeSelector: #project! ConfigurationOfOpalCompiler removeSelector: #development:! ConfigurationOfOpalCompiler removeSelector: #baseline1:! ConfigurationOfOpalCompiler class removeSelector: #validate! ConfigurationOfOpalCompiler class removeSelector: #project! ConfigurationOfOpalCompiler class removeSelector: #metacelloVersion:loads:! ConfigurationOfOpalCompiler class removeSelector: #loadBleedingEdge! ConfigurationOfOpalCompiler class removeSelector: #load! ConfigurationOfOpalCompiler class removeSelector: #lastMetacelloVersionLoad! ConfigurationOfOpalCompiler class removeSelector: #isMetacelloConfig! ConfigurationOfOpalCompiler class removeSelector: #ensureMetacello! ConfigurationOfOpalCompiler class removeSelector: #bootstrapPackage:from:! Smalltalk globals removeClassNamed: #ConfigurationOfOpalCompiler! ----End fileIn----! ----QUIT----an Array(16 April 2013 2:01:35 pm) Pharo.image priorSource: 1141265! ----STARTUP----an Array(16 April 2013 2:10:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 April 2013 2:10:53 pm) Pharo-30041.image priorSource: 1714151! ----STARTUP----an Array(16 April 2013 3:32:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 4/16/2013 15:31' prior: 34696003! commentForCurrentUpdate ^ '10028 Integrate Opal https://pharo.fogbugz.com/f/cases/10028 (remove destructive tests) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 4/16/2013 15:31'! script141 ^ 'AST-Core-MarcusDenker.125.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-DestructiveRegressionTests-MarcusDenker.7.mcz OpalCompiler-RegressionTests-MarcusDenier.22.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 4/16/2013 15:31'! update30042 "self new update30042" self withUpdateLog: '10028 Integrate Opal https://pharo.fogbugz.com/f/cases/10028 (remove destructive tests) '. self loadTogether: self script141 merge: false. ScriptLoader new unloadPackage: 'OpalCompiler-RegressionTests'; unloadPackage: 'OpalCompiler-DestructiveRegressionTests'. . self flushCaches. ! ! "ScriptLoader30"! OCRecompiler removeSelector: #recompilePackage:! OCRecompiler removeSelector: #recompileImage! OCRecompiler removeSelector: #recompileClass:! OCRecompiler removeSelector: #recompile:in:! OCRecompiler removeSelector: #problemMethods! OCRecompiler removeSelector: #problem:sel:in:! OCRecompiler removeSelector: #notify:at:in:! OCRecompiler removeSelector: #interactive! OCRecompiler removeSelector: #initialize! OCRecompiler removeSelector: #doInstallMethods! OCRecompiler removeSelector: #decompileBC2IRAndRegenerate! OCRecompiler removeSelector: #decompileBC2IRAndInstall! OCRecompiler removeSelector: #decompileBC2IR! Smalltalk globals removeClassNamed: #OCRecompiler! IRComparer removeSelector: #initialize! IRComparer removeSelector: #decompileAndRecompile:! IRComparer removeSelector: #compareImageFrameSize! IRComparer removeSelector: #compareImage! IRComparer removeSelector: #compare:! Smalltalk globals removeClassNamed: #IRComparer! CompilerComparer removeSelector: #initialize! CompilerComparer removeSelector: #compileNew:! CompilerComparer removeSelector: #compare:! Smalltalk globals removeClassNamed: #CompilerComparer! NondestructiveRecompileTests removeSelector: #testRecompile! Smalltalk globals removeClassNamed: #NondestructiveRecompileTests! DestructiveRecompileTests removeSelector: #testRecompileAndInstall! Smalltalk globals removeClassNamed: #DestructiveRecompileTests! ----End fileIn----! ----QUIT----an Array(16 April 2013 3:32:47 pm) Pharo.image priorSource: 1714351! ----STARTUP----an Array(16 April 2013 3:38:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 April 2013 3:38:45 pm) Pharo-30042.image priorSource: 1726093! ----STARTUP----an Array(16 April 2013 4:30:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/16/2013 16:28' prior: 35269088! commentForCurrentUpdate ^ '10302 RBparser: improve error message https://pharo.fogbugz.com/f/cases/10302 10286 Remove NaturalLanguageTranslator from image startup list https://pharo.fogbugz.com/f/cases/10286/ 10109 MNU : SmalltalkEditor>>browseItHere: https://pharo.fogbugz.com/f/cases/10109 and remove Opal repos'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/16/2013 16:28'! script142 ^ 'AST-Core-MarcusDenker.127.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.482.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.16.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.8.mcz Zinc-Character-Encoding-Tests-MarcusDenker.6.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-EstebanLorenzano.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-EstebanLorenzano.11.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-EstebanLorenzano.8.mcz Zinc-System-Support-MarcusDenker.4.mcz Zinc-Tests-SvenVanCaekenberghe.176.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/16/2013 16:28'! update30043 "self new update30043" self withUpdateLog: '10302 RBparser: improve error message https://pharo.fogbugz.com/f/cases/10302 10286 Remove NaturalLanguageTranslator from image startup list https://pharo.fogbugz.com/f/cases/10286/ 10109 MNU : SmalltalkEditor>>browseItHere: https://pharo.fogbugz.com/f/cases/10109 and remove Opal repos'. self loadTogether: self script142 merge: false. Smalltalk removeFromStartUpList: NaturalLanguageTranslator. TextEditor initialize. SmalltalkEditor initialize. ScriptLoader new removeAllRepositories;addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !RBParser methodsFor: 'private-parsing' stamp: 'MarcusDenker 4/16/2013 15:21' prior: 30938759! parsePrimitiveObject currentToken isIdentifier ifTrue: [^self parsePrimitiveIdentifier]. (currentToken isLiteralToken and: [currentToken isMultiKeyword not]) ifTrue: [^self parsePrimitiveLiteral]. currentToken isLiteralArrayToken ifTrue: [^currentToken isForByteArray ifTrue: [self parseLiteralByteArray] ifFalse: [self parseLiteralArray]]. currentToken isSpecial ifTrue: [currentToken value = $[ ifTrue: [^self parseBlock]. currentToken value = $( ifTrue: [^self parseParenthesizedExpression]. currentToken value = ${ ifTrue: [^self parseArray]]. (currentToken isBinary and: [ currentToken value = #- ]) ifTrue: [ ^self parseNegatedNumber ]. ^ self parserError: 'Variable or expression expected'! ! "AST-Core"! ----End fileIn----! ----QUIT----an Array(16 April 2013 4:30:48 pm) Pharo.image priorSource: 1726293! ----STARTUP----an Array(16 April 2013 4:37:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 April 2013 4:37:04 pm) Pharo-30043.image priorSource: 1737805! ----STARTUP----an Array(17 April 2013 10:35:09 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ZnCharacterWriteStream class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/3/2012 15:50' prior: 55325655! defaultEncoder ^ ZnUTF8Encoder new! ! !ZnCharacterWriteStream class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/3/2012 15:51' prior: 55325804! on: writeStream ^ self new on: writeStream; yourself! ! !ZnCharacterWriteStream class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/3/2012 15:51' prior: 55325975! on: writeStream encoding: encoding ^ self new on: writeStream; encoding: encoding; yourself! ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 3/1/2013 21:25' prior: 55612320! encode: readStream to: writeStream | bytes buffer byte | buffer := (bytes := ByteArray new: 4) writeStream. self safeSet; characterEncoder. [ readStream atEnd ] whileFalse: [ buffer reset. characterEncoder nextPut: readStream next toStream: buffer. 1 to: buffer position do: [ :index | (safeSet includes: (byte := bytes at: index)) ifTrue: [ writeStream nextPut: byte asCharacter ] ifFalse: [ writeStream nextPut: $%. byte printOn: writeStream base: 16 length: 2 padded: true ] ] ]! ! "Zinc-Character-Encoding-Core"! !ZnPercentEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 3/1/2013 21:29'! testLeadingZero | encoder | encoder := ZnPercentEncoder new. self assert: (encoder encode: 'foo', Character tab asString, 'bar') equals: 'foo%09bar'. self assert: (encoder decode: 'foo%09bar') equals: 'foo', Character tab asString, 'bar'. self assert: (encoder encode: 'foo', Character lf asString, 'bar') equals: 'foo%0Abar'. self assert: (encoder decode: 'foo%0Abar') equals: 'foo', Character lf asString, 'bar'! ! "Zinc-Character-Encoding-Tests"! !ZnUrl methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 3/16/2013 20:22' prior: 55749658! / object ^ object addedToZnUrl: self! ! !ZnUrl methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 3/16/2013 20:39'! addedToZnUrl: url ^ url withPathSegments: self pathSegments ! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 19:32' prior: 55745160! clearPath self hasPath ifTrue: [ segments removeAll ]! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 19:55' prior: 55745457! directory ^ self isDirectoryPath ifTrue: [ self path ] ifFalse: [ String streamContents: [ :stream | segments allButLast do: [ :each | stream nextPutAll: each ] separatedBy: [ stream nextPut: $/ ] ] ]! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 19:39' prior: 55745655! file ^ self isDirectoryPath ifTrue: [ String new ] ifFalse: [ segments last ]! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 19:43' prior: 55746145! path self hasPath ifFalse: [ ^ String new ]. ^ String streamContents: [ :stream | segments do: [ :each | each == #/ ifFalse: [ stream nextPutAll: each ] ] separatedBy: [ stream nextPut: $/ ] ]! ! !ZnUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 3/16/2013 19:30' prior: 55756131! printPathOn: stream self hasPath ifFalse: [ ^ stream nextPut: $/ ]. segments do: [ :each | stream nextPut: $/. each == #/ ifFalse: [ self encode: each on: stream ] ] ! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 18:43' prior: 55746376! removeFirstPathSegment self hasPath ifTrue: [ segments removeFirst ]! ! !ZnUrl methodsFor: 'accessing-path' stamp: 'SvenVanCaekenberghe 3/16/2013 18:42' prior: 55746539! removeLastPathSegment self hasPath ifTrue: [ segments removeLast ]! ! !String methodsFor: '*zinc-resource-meta-core' stamp: 'SvenVanCaekenberghe 3/16/2013 20:23'! addedToZnUrl: url | segments | segments := self findTokens: '/'. ^ url withPathSegments: segments! ! !Collection methodsFor: '*zinc-resource-meta-core' stamp: 'SvenVanCaekenberghe 3/16/2013 20:24'! addedToZnUrl: url ^ url withPathSegments: self! ! ZnUrl removeSelector: #joinSegments:! "Zinc-Resource-Meta-Core"! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 3/16/2013 18:41'! testBogusBackups self assert: '/../../../' asZnUrl isSlash! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 3/16/2013 20:41' prior: 55762829! testConvenienceMethods | baseUrl | baseUrl := 'http://api.host.com' asZnUrl. self assert: baseUrl equals: 'http://api.host.com' asZnUrl. self assert: baseUrl / 'doc' / 'file.html' equals: 'http://api.host.com/doc/file.html' asZnUrl. self assert: baseUrl / 'doc/file.html' equals: 'http://api.host.com/doc/file.html' asZnUrl. self assert: baseUrl / #( 'doc' 'file.html' ) equals: 'http://api.host.com/doc/file.html' asZnUrl. self assert: baseUrl / 'doc/file.html' asZnUrl equals: 'http://api.host.com/doc/file.html' asZnUrl. self assert: (baseUrl / 'search' ? (#q -> 'Smalltalk') & (#lang -> #en)) equals: 'http://api.host.com/search?q=Smalltalk&lang=en' asZnUrl. self assert: baseUrl equals: 'http://api.host.com' asZnUrl! ! "Zinc-Resource-Meta-Tests"! !ZnApplicationFormUrlEncodedEntity methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 2/24/2013 10:52' prior: 55246961! addAll: keyedCollection "Note that we use #addAllMulti:" self invalidateRepresentation. self fields addAllMulti: keyedCollection. ^ keyedCollection ! ! "Zinc-HTTP"! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/24/2013 11:02'! testPrepareRequest | client | self withServerDo: [ :server | (client := ZnClient new) url: server localUrl; addPath: 'echo'; prepareRequest: [ :request | request setAuthorization: 'my-signature' ]; get. self assert: client isSuccess. self assert: (client contents includesSubstring: 'my-signature'). client url: server localUrl; addPath: 'echo'; get. self assert: client isSuccess. self assert: (client contents includesSubstring: 'my-signature'). client close ]! ! !ZnEntityTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/24/2013 10:53'! testApplicationUrlEncodingAddAll | entity string data | data := Dictionary new. data at: 'foo' put: 1 asString. data at: 'bar' put: 2 asString. entity := ZnApplicationFormUrlEncodedEntity new. "Asking for the content length will force an internal computation of the representation" self assert: entity contentLength = 0. entity addAll: data. string := String streamContents: [ :stream | entity writeOn: stream ]. self assert: entity contentLength > 0. entity := ZnEntity readFrom: string readStream usingType: ZnApplicationFormUrlEncodedEntity designatedMimeType andLength: string size. self assert: (entity at: 'foo') equals: '1'. self assert: (entity at: 'bar') equals: '2'! ! "Zinc-Tests"! ----End fileIn----! ----QUIT----an Array(17 April 2013 10:35:16 am) Pharo.image priorSource: 1738005! ----STARTUP----an Array(17 April 2013 10:44:04 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 April 2013 10:44:04 am) Pharo-30044.image priorSource: 1745029! !ScriptLoader commentStamp: '' prior: 33695136! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@files.pharo.org/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: '' prior: 35299817! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@files.pharo.org/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----an Array(19 April 2013 3:36:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/19/2013 15:21' prior: 35281026! commentForCurrentUpdate ^ '10317 files.pharo.org: change image to use new update server https://pharo.fogbugz.com/f/cases/10317'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/19/2013 15:21'! script143 ^ 'AST-Core-MarcusDenker.127.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.24.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/19/2013 15:19'! update30044 "skipped" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/19/2013 15:21'! update30045 "self new update30045" self withUpdateLog: '10317 files.pharo.org: change image to use new update server https://pharo.fogbugz.com/f/cases/10317'. self loadTogether: self script143 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UpdateStreamer methodsFor: 'accessing' stamp: 'MarcusDenker 4/19/2013 15:06' prior: 54521003! path "Part ... in the following http:// server / path /updates.list" ^ path ifNil: [ path := 'pharo'].! ! !UpdateStreamer methodsFor: 'accessing' stamp: 'MarcusDenker 4/19/2013 15:10' prior: 54521506! server pharoServer ifNil: [pharoServer := 'updates.pharo.org/']. ^ pharoServer! ! !FloatTest methodsFor: 'printing' stamp: 'MarcusDenker 4/19/2013 15:01' prior: 22380943! testPrintPaddedWithTo "The problem was caused by treating the format specifier as a number rather than as a string, such the the number may be a Float subject to floating point rounding errors. The solution to treat the format specifier as a string, and extract the integer fields before and after the decimal point in the string." self assert: (1.0 printPaddedWith: $0 to: 2.2) = '01.00'. self assert: (1.0 printPaddedWith: $X to: 2.2) = 'X1.0X'. self assert: (1.0 printPaddedWith: $0 to: 2) = '01.0'. self assert: (12345.6789 printPaddedWith: $0 to: 2) = '12345.6789'. self assert: (12345.6789 printPaddedWith: $0 to: 2.2) = '12345.6789'. self assert: (12.34 printPaddedWith: $0 to: 2.2) = '12.34'. self assert: (12345.6789 printPaddedWith: $0 to: 2.2) = '12345.6789'. self assert: (123.456 printPaddedWith: $X to: 4.4) = 'X123.456X'. self assert: (1.0 printPaddedWith: $0 to: 2.1) = '01.0'. self assert: (1.0 printPaddedWith: $0 to: 2.2) = '01.00'. self assert: (1.0 printPaddedWith: $0 to: 2.3) = '01.000'. "previously failed due to float usage" self assert: (1.0 printPaddedWith: $0 to: 2.4) = '01.0000'. "previously failed due to float usage" self assert: (1.0 printPaddedWith: $0 to: 2.5) = '01.00000' ! ! !SmalltalkImage methodsFor: '*Zinc-System-Support' stamp: 'MarcusDenker 4/19/2013 15:04' prior: 33568242! downloadSources "Try downloading the sources file from 2 different locations to the shared directory. Be silent when this does not work: a missing sources will be triggered later on. For now, use the VM directory." | sharedDirectory | self shouldDownloadSourcesFile ifFalse: [ ^ self ]. sharedDirectory := self vmDirectory. self sourcesDownloadClient url: 'http://files.pharo.org/image/PharoV20.sources'; downloadTo: sharedDirectory; close. (sharedDirectory / self sourcesFile basename) exists ifTrue: [ ^ self ]. self sourcesDownloadClient url: 'http://stfx.eu/PharoV20.sources'; downloadTo: sharedDirectory; close. ! ! "KernelTests"! "UpdateStreamer-Core"! "Zinc-System-Support"! ----End fileIn----! ----QUIT----an Array(19 April 2013 3:36:54 pm) Pharo.image priorSource: 1745231! ----STARTUP----an Array(19 April 2013 5:15:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 April 2013 5:15:08 pm) Pharo-30045.image priorSource: 1766957! ----STARTUP----an Array(19 April 2013 5:47:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/19/2013 17:41' prior: 35308935! commentForCurrentUpdate ^ '10313 initialize SpecProxyDebugger to be able to choose it in pre-debug window https://pharo.fogbugz.com/f/cases/10313 10303 Duplicated instance #model in NewList (already defined in MorphicModel) https://pharo.fogbugz.com/f/cases/10303/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/19/2013 17:41'! script144 ^ 'AST-Core-MarcusDenker.127.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.15.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.612.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-StephaneDucasse.16.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.27.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1392.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.788.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.95.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.116.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/19/2013 17:41'! update30046 "self new update30046" self withUpdateLog: '10313 initialize SpecProxyDebugger to be able to choose it in pre-debug window https://pharo.fogbugz.com/f/cases/10313 10303 Duplicated instance #model in NewList (already defined in MorphicModel) https://pharo.fogbugz.com/f/cases/10303/ '. self loadTogether: self script144 merge: false. SpecProxyDebugger initialize. . self flushCaches. ! ! "ScriptLoader30"! !NewList commentStamp: '' prior: 28370504! NewList is a new morph as replacement for PluggableListMorph. The API used is hardcoded, but NewListAdapter has been introduced to hold this "pluggable" behavior! !NewList commentStamp: '' prior: 35332054! NewList is a new morph as replacement for PluggableListMorph. The API used is hardcoded, but NewListAdapter has been introduced to hold this "pluggable" behavior! "NewList"! ----End fileIn----! ----QUIT----an Array(19 April 2013 5:47:35 pm) Pharo.image priorSource: 1767157! ----STARTUP----an Array(19 April 2013 5:57:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 April 2013 5:57:22 pm) Pharo-30046.image priorSource: 1778037! ----STARTUP----an Array(20 April 2013 1:47:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/20/2013 13:40' prior: 35321890! commentForCurrentUpdate ^ '4858 TimeProfiler is used by FreeTypeFont class for testing https://pharo.fogbugz.com/f/cases/4858/ 5044 Cleaning Icons https://pharo.fogbugz.com/f/cases/5044 10309 Introduce MorphTreeMorph in Spec https://pharo.fogbugz.com/f/cases/10309 10319 accesor to HDLintReport https://pharo.fogbugz.com/f/cases/10319'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/20/2013 13:40'! script145 ^ 'AST-Core-MarcusDenker.127.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1394.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.108.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.790.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.97.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.118.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/20/2013 13:40'! update30047 "self new update30047" self withUpdateLog: '4858 TimeProfiler is used by FreeTypeFont class for testing https://pharo.fogbugz.com/f/cases/4858/ 5044 Cleaning Icons https://pharo.fogbugz.com/f/cases/5044 10309 Introduce MorphTreeMorph in Spec https://pharo.fogbugz.com/f/cases/10309 10319 accesor to HDLintReport https://pharo.fogbugz.com/f/cases/10319'. self loadTogether: self script145 merge: false. ThemeIcons initialize. . self flushCaches. ! ! "ScriptLoader30"! !DefaultSpecTreeNode commentStamp: '' prior: 0! I am a TreeNode used to render TreeModel node using the old API for convenience! !SpecTreeModel commentStamp: '' prior: 0! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !HDLintReport methodsFor: 'accessing' stamp: 'MarcusDenker 4/20/2013 13:36'! rules ^rules! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 4/17/2013 18:37' prior: 33766452! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := newInstance. " result := self class private_interpretASpec: newInstance model: spec instance superSpec: specForChildren." ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. result spec addAsSubSpecTo: superSpec. ^ return ] ifFalse: [ ^ result ]! ! !AlainTreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/17/2013 20:48'! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #columns:. #(model columns). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !AlainTreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 4/17/2013 19:47'! exampleOfOldAPI | m | m := self new. m openWithSpec. m roots: #(a b c d). m childrenBlock: [:it | it = #c ifTrue: [ {1. 2. 3} ] ifFalse: [ {} ]]. m displayBlock: [:item | item isSymbol ifTrue: [ item asUppercase , ' symbol' ] ifFalse: [ item printString ]].! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:55'! autoMultiSelection ^ autoMultiSelection contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:03'! autoMultiSelection: aBoolean autoMultiSelection contents: aBoolean! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 20:52'! buildWithSpec: aSpec | widget | widget := super buildWithSpec: aSpec. self selectedItems: selectionHolder contents. ^ widget! ! !AlainTreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43'! childrenBlock < api: #inspect> "Return the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" ^ childrenBlockHolder contents! ! !AlainTreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43'! childrenBlock: aBlock < api: #block getter: #childrenBlock registration: #whenChildrenBlockChanged:> "Set the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" childrenBlockHolder contents: aBlock! ! !AlainTreeModel methodsFor: 'private-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34'! childrenFor: anItem ^ childrenBlockHolder contents cull: anItem cull: self! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:56'! columnInset ^ columnInset contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! columnInset: anInteger columnInset contents: anInteger! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 21:07'! columns ^ columns contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 21:11'! columns: aCollection columns contents: aCollection! ! !AlainTreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20'! displayBlock < api: #inspect> "Return the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" ^ displayBlock contents! ! !AlainTreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20'! displayBlock: aBlock < api: #block getter: #displayBlock registration: #whenDisplayBlockChanged:> "Set the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" displayBlock contents: aBlock! ! !AlainTreeModel methodsFor: 'error handling' stamp: 'BenjaminVanRyseghem 4/17/2013 20:24'! doesNotUnderstand: aMessage (self treeModel respondsTo: aMessage selector) ifFalse: [ ^ super doesNotUnderstand: aMessage ]. ^ self treeModel perform: aMessage selector withArguments: aMessage arguments! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! doubleClick doubleClick contents value! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! doubleClick: aBlock doubleClick contents: aBlock! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! evenRowColor ^ evenRowColor contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! evenRowColor: aColor evenRowColor contents: aColor! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/17/2013 21:07'! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item printString ] asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 0 asValueHolder. doubleClick := [] asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 0 asValueHolder. rowInset := 2 asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. self registerEvents! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! isCheckList ^ isCheckList contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! isCheckList: aBoolean isCheckList contents: aBoolean! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:59'! keyStroke: aKeyStroke keyStroke contents cull: aKeyStroke! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06'! keyStrokeAction: aBlock keyStroke contents: aBlock! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43'! menu "Return the block used to generate the tree menu" ^ menuBlockHolder contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43'! menu: aBlock < api: #block getter: #menu registration: #whenMenuChanged:> "Set the block used to generate the tree menu" menuBlockHolder contents: aBlock! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:02'! menu: aMenu shifted: aBoolean menuBlockHolder cull: aMenu cull: aBoolean. ^ aMenu! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! multiSelection ^ multiSelection contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06'! multiSelection: aBoolean multiSelection contents: aBoolean! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! oddRowColor ^ oddRowColor contents! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! oddRowColor: aColor oddRowColor contents: aColor! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! preferedPaneColor ^ preferedPaneColor contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! preferedPaneColor: aColor preferedPaneColor contents: aColor! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/17/2013 22:12'! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col; columnsChanged ] ]! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01'! resizerWidth ^ resizerWidth contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! resizerWidth: anInteger resizerWidth contents: anInteger! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:28'! rootNodeFromItem: item ^ rootNodeHolder contents cull:item! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:29'! rootNodeHolder ^ rootNodeHolder contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:29'! rootNodeHolder: aBlock rootNodeHolder contents: aBlock! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:44'! roots < api: #inspect> "Return the tree roots" ^ rootsHolder contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:47'! roots: aCollection < api: #st getter: #roots registration: #whenRootsChanged:> "Set the tree roots" rootsHolder contents: aCollection. treeModel rootItems: aCollection! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01'! rowInset ^ rowInset contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! rowInset: anInteger rowInset contents: anInteger! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 20:43'! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ treeModel selectItems ifEmpty: [ nil ] ifNotEmpty: [ :collection | collection last ]! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 20:42'! selectedItem: anItem < api: #st getter: #selectedItem registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" selectionHolder contents: { anItem }. treeModel selectedItems: { anItem }! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 20:43'! selectedItems < api: #inspect> "Return the selected items" ^ treeModel selectedItems! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 20:43'! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" selectionHolder contents: aCollection. treeModel selectItems: aCollection! ! !AlainTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 17:55'! treeModel ^ treeModel! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:46'! updateTree < api: #do> "Force the tree to refresh" self treeModel changed: #rootNodes.! ! !AlainTreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23'! whenChildrenBlockChanged: aBlock "Set a block to perform when a new childrenBlock is set" childrenBlockHolder whenChangedDo: aBlock! ! !AlainTreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24'! whenDisplayBlockChanged: aBlock "Set a block to perform when a new displayBlock is set" displayBlock whenChangedDo: aBlock! ! !AlainTreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23'! whenMenuChanged: aBlock "Set a block to perform when a new menuBlock is set" menuBlockHolder whenChangedDo: aBlock! ! !AlainTreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24'! whenSelectedItemsChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: aBlock! ! !AlainTreeModel methodsFor: 'private-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20'! wrapItem: anItem ^ displayBlock contents cull: anItem cull: self! ! !TreeNodeModel class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06'! item: item ^ self new item: item; yourself! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06'! initialize "Initialization code for TreeNodeModel" super initialize. item := nil asValueHolder.! ! !TreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06'! item ^ item contents! ! !TreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06'! item: anObject item contents: anObject! ! !ThemeIcons class methodsFor: 'private - icons' stamp: 'AlainPlantec 10/19/2009 17:31' prior: 53015023! checkBoxPressedIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/checkBoxPressed.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAiSURBVHheY/j/gaFBnqFBgmH+DIYJMxFo/kyGBkmQ+P8fAPGKDWJR SBPAAAAAAElFTkSuQmCC'! ! !DefaultSpecTreeNode commentStamp: '' prior: 35343271! I am a TreeNode used to render TreeModel node using the old API for convenience! !DefaultSpecTreeNode methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34'! childrenItems ^ self model model childrenFor: self item! ! !PasteUpMorph methodsFor: 'thumbnail' stamp: 'MarcusDenker 4/18/2013 22:34' prior: 29218856! icon ^self theme homeIcon! ! !SpecTreeModel commentStamp: '' prior: 35343406! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !SpecTreeModel class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/17/2013 18:49'! model: model ^ self new model: model; yourself! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 18:48'! model ^ model! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 18:48'! model: anObject model := anObject! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 20:48'! rootItems ^ self model roots! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 19:32'! rootNodeFromItem: item ^ self model rootNodeFromItem: item! ! ThemeIcons class removeSelector: #squeakyMouseIconContents! ThemeIcons class removeSelector: #squeakIconContents! ThemeIcons class removeSelector: #smallSqueakIconContents! ThemeIcons class removeSelector: #smallSqueakIcon! ThemeIcons class removeSelector: #smallProjectIconContents! ThemeIcons class removeSelector: #smallProjectIcon! ThemeIcons class removeSelector: #smallObjectCatalogIconContents! ThemeIcons class removeSelector: #smallObjectCatalogIcon! ThemeIcons class removeSelector: #smallFontIconContents! ThemeIcons class removeSelector: #projectIconContents! ThemeIcons class removeSelector: #projectIcon! ThemeIcons class removeSelector: #objectCatalogIconContents! ThemeIcons class removeSelector: #downArrowIconContents! ThemeIcons class removeSelector: #crudeUndoIconContents! ThemeIcons class removeSelector: #crudeUndoDisabledIconContents! ThemeIcons class removeSelector: #crudeRedoIconContents! ThemeIcons class removeSelector: #crudeRedoDisabledIconContents! UITheme removeSelector: #smallProjectIcon! UITheme removeSelector: #smallObjectCatalogIcon! UITheme removeSelector: #projectIcon! FreeTypeFont class removeSelector: #profileUnhintedWidthOfStringMulti! FreeTypeFont class removeSelector: #profileUnhintedWidthOfStringCachedMulti! FreeTypeFont class removeSelector: #profileUnhintedWidthOfStringCached! FreeTypeFont class removeSelector: #profileUnhintedWidthOfString! FreeTypeFont class removeSelector: #profileUnhintedDisplayMulti! FreeTypeFont class removeSelector: #profileUnhintedDisplayCachedMulti! FreeTypeFont class removeSelector: #profileUnhintedDisplayCached! FreeTypeFont class removeSelector: #profileUnhintedDisplay! FreeTypeFont class removeSelector: #profileUnhintedCompositionMulti! FreeTypeFont class removeSelector: #profileUnhintedComposition! FreeTypeFont class removeSelector: #profileUnhinted! FreeTypeFont class removeSelector: #profileHintedWidthOfStringMulti! FreeTypeFont class removeSelector: #profileHintedWidthOfStringCachedMulti! FreeTypeFont class removeSelector: #profileHintedWidthOfStringCached! FreeTypeFont class removeSelector: #profileHintedWidthOfString! FreeTypeFont class removeSelector: #profileHintedDisplayCachedUsingMode34! FreeTypeFont class removeSelector: #profileHintedDisplayCached! FreeTypeFont class removeSelector: #profileHintedComposition! "FamFam-Icons"! "FreeType"! "Graphics-Resources"! "HudsonBuildTools20"! "Morphic"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(20 April 2013 1:47:26 pm) Pharo.image priorSource: 1778237! ----STARTUP----an Array(20 April 2013 3:32:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 April 2013 3:32:59 pm) Pharo-30047.image priorSource: 1806702! ----STARTUP----an Array(20 April 2013 7:28:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/20/2013 19:25' prior: 35332970! commentForCurrentUpdate ^ '10228 Fix tab key for autocompletion https://pharo.fogbugz.com/f/cases/10228 10335 Spec: Document difference between TextModel and TextInputFieldModel https://pharo.fogbugz.com/f/cases/10335 10334 SearchableTree https://pharo.fogbugz.com/f/cases/10334 10340 Minor fixes in Spec https://pharo.fogbugz.com/f/cases/10340'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/20/2013 19:25'! script146 ^ 'AST-Core-MarcusDenker.127.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.23.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1361.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1394.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.790.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.99.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.122.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.805.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/20/2013 19:25'! update30048 "self new update30048" self withUpdateLog: '10228 Fix tab key for autocompletion https://pharo.fogbugz.com/f/cases/10228 10335 Spec: Document difference between TextModel and TextInputFieldModel https://pharo.fogbugz.com/f/cases/10335 10334 SearchableTree https://pharo.fogbugz.com/f/cases/10334 10340 Minor fixes in Spec https://pharo.fogbugz.com/f/cases/10340'. self loadTogether: self script146 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractTreeFilter commentStamp: '' prior: 0! I am an abstract class for tree filters. My children should propose a filter for tree nodes! !TokenTreeFilter commentStamp: '' prior: 0! I am a filter for a token. If a node item contains my token I accept it! !SearchableTree commentStamp: '' prior: 0! I am a tree plus an input field to be able to filter the tree elements! !SpecTreeModel commentStamp: '' prior: 35357833! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !FilteringTreeNode commentStamp: '' prior: 0! I am tree node supporting filtering! !TextModel commentStamp: '' prior: 52742743! I handle basic multi-line text. Try: "self example"! !TextInputFieldModel commentStamp: '' prior: 52714878! I handle one line of text.! !AbstractTreeFilter commentStamp: '' prior: 35371933! I am an abstract class for tree filters. My children should propose a filter for tree nodes! !AbstractTreeFilter methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:12'! keepTreeNode: aNode ^ false! ! !TokenTreeFilter commentStamp: '' prior: 35372082! I am a filter for a token. If a node item contains my token I accept it! !TokenTreeFilter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00'! token: token ^ self new token: token; yourself! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/18/2013 17:01'! initialize "Initialization code for TokenTreeFilter" super initialize. token := ''.! ! !TokenTreeFilter methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:33'! keepTreeNode: aNode ^ aNode matchTokenFilter: self! ! !TokenTreeFilter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00'! token ^ token! ! !TokenTreeFilter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00'! token: anObject token := anObject! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 13:04'! cancelled ^ self window ifNil: [ false ] ifNotNil: [:w | w cancelled ]! ! !SearchableTree commentStamp: '' prior: 35372211! I am a tree plus an input field to be able to filter the tree elements! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/20/2013 12:25'! defaultSpec ^ SpecLayout composed newRow: [:r | r add: #label width: 50; add: #inputField ] height: 25; newRow: #tree top: 25; yourself! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37'! autoMultiSelection: aBoolean tree autoMultiSelection: aBoolean! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! childrenBlock ^ tree childrenBlock! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! childrenBlock: aBlock tree childrenBlock: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37'! columnInset: anInteger tree columnInset: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37'! columns: aCollection tree columns: aCollection! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! displayBlock ^ tree displayBlock! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! displayBlock: aBlock tree displayBlock: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37'! doubleClick: aBlock tree doubleClick: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37'! evenRowColor: aColor tree evenRowColor: aColor! ! !SearchableTree methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/18/2013 17:39'! initialize "Initialization code for FilteringTree" super initialize. roots := OrderedCollection new asValueHolder! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/20/2013 03:59'! initializePresenter inputField whenTextChanged: [ :text | self updateRootFor: text ]. tree whenTreeUpdated: [ inputField text: '' ].! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/20/2013 12:25'! initializeWidgets self instantiateModels: #( tree AlainTreeModel inputField TextInputFieldModel label LabelModel ). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. label text: 'Search:'; color:Color black. inputField ghostText: 'search'; entryCompletion: nil; acceptOnCR: true! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 14:43'! inputField ^ inputField! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! isCheckList: aBoolean tree isCheckList: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! keyStrokeAction: aBlock tree keyStrokeAction: aBlock! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/20/2013 12:24'! label ^ label! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! menu ^ tree menu! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! menu: aBlock tree menu: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! multiSelection: aBoolean tree multiSelection: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! preferedPaneColor: aColor tree preferedPaneColor: aColor! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! resizerWidth: anInteger tree resizerWidth: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! rootNodeHolder ^ tree rootNodeHolder! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! rootNodeHolder: aBlock tree rootNodeHolder: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38'! roots ^ tree roots! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 17:38'! roots: aCollection roots contents: aCollection. tree roots: aCollection! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! rowInset: anInteger tree rowInset: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! selectedItem ^ tree selectedItem! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! selectedItem: anItem tree selectedItem: anItem! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! selectedItems ^ tree selectedItems! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! selectedItems: aCollection tree selectedItems: aCollection! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 14:43'! tree ^ tree! ! !SearchableTree methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 4/20/2013 02:43'! updateRootFor: aText | aFilter | aFilter := TokenTreeFilter token: aText. tree selection: nil. tree updateTree. tree rootNodes do: [:r | r updateAccordingTo: aFilter]. tree rootNodes removeAllSuchThat: [:n | (aFilter keepTreeNode: n) not and: [n isEmpty]]. tree expandAll. tree changed: #rootNodes.! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39'! updateTree tree updateTree! ! !SearchableTree methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! whenChildrenBlockChanged: aBlock tree whenChildrenBlockChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! whenDisplayBlockChanged: aBlock tree whenDisplayBlockChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! whenMenuChanged: aBlock tree whenMenuChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 17:41'! whenRootsChanged: aBlock roots whenChangedDo: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40'! whenSelectedItemsChanged: aBlock tree whenSelectedItemsChanged: aBlock! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/20/2013 16:57'! keyStroke: anEvent fromMorph: aMorph! ! !SpecTreeModel commentStamp: '' prior: 35372344! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !SpecTreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/20/2013 16:04'! doubleClick self model doubleClick! ! !SpecTreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01'! resetRootNodes rootNodes := nil! ! !SpecTreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01'! rootNodes ^ rootNodes ifNil: [ rootNodes := super rootNodes ]! ! !NECMenuMorph methodsFor: 'actions' stamp: 'JohanBrichau 4/5/2013 22:30'! insertCommonPrefixOrSelected "Return value: true if the user input has been handled, regardless of whether a prefix was inserted" | prefix | context model isEmpty ifTrue: [^ false]. context model entries size = 1 ifTrue: [ ^ self insertSelected ]. prefix := context model commonPrefix. prefix = context model narrowString ifTrue:[^ self insertSelected]. self flag: 'Pending issue 7308, "controller editor wordAtCaret" below should be changed to "context completionToken"'. prefix size > controller editor wordAtCaret size ifTrue: [ self insertCompletion: prefix. context narrowWith: controller editor wordAtCaret ]. ^ true! ! !NECController methodsFor: 'keyboard' stamp: 'JohanBrichau 4/5/2013 22:30' prior: 27787019! handleKeystrokeBefore: aKeyboardEvent editor: anEditor "I return a boolean. true when I have handled the event and no futher processing is needed by the caller." | keyCharacter controlKeyPressed isSpaceKey | self flag: #fixme. "this method should be split up". self setEditor: anEditor. self setModel: editor model. keyCharacter := aKeyboardEvent keyCharacter. controlKeyPressed := aKeyboardEvent controlKeyPressed. isSpaceKey := keyCharacter = Character null or: [ keyCharacter = Character space ]. self isMenuOpen ifFalse: [ ^ self handleKeystrokeWithoutMenu: aKeyboardEvent ]. (keyCharacter = Character home and: [ self captureNavigationKeys ]) ifTrue: [ menuMorph home. ^ true]. (keyCharacter = Character end and: [controlKeyPressed not and: [ self captureNavigationKeys ]]) ifTrue: [ menuMorph end. ^ true]. (keyCharacter = Character arrowRight and: [ self captureNavigationKeys ]) ifTrue: [ menuMorph showDetail. ^ true]. (keyCharacter = Character arrowLeft and: [ self captureNavigationKeys ]) ifTrue: [ ^ self leftArrow ]. keyCharacter = Character arrowUp ifTrue: [ menuMorph moveUp. ^ true]. keyCharacter = Character arrowDown ifTrue: [ menuMorph moveDown. ^ true]. keyCharacter = Character pageUp ifTrue: [ menuMorph pageUp. ^ true]. keyCharacter = Character pageDown ifTrue: [ menuMorph pageDown. ^ true]. (keyCharacter = Character cr and: [ NECPreferences useEnterToAccept]) ifTrue: [ menuMorph insertSelected ifTrue: [^ true]]. keyCharacter = Character tab ifTrue: [ NECPreferences expandPrefixes ifFalse: [ menuMorph insertSelected ifTrue: [^ true]] ifTrue: [ menuMorph insertCommonPrefixOrSelected ifTrue: [^ true]]]. self flag: #todo. "Removing for now... most of the shortcuts are broken and no time or need now to fix them" "(keyCharacter = $h and: [ controlKeyPressed ]) ifTrue: [ menuMorph help. ^ true ]. (keyCharacter = $t and: [ controlKeyPressed ]) ifTrue: [ menuMorph expand. ^ true ]. (keyCharacter = $u and: [ controlKeyPressed ]) ifTrue: [ menuMorph switchToUntyped. ^ true ]. " "All keys but the alphanumeric chars (without command and control ) and the backspace key do close the menu" keyCharacter = Character backspace ifTrue: [ editor isCaretBehindChar not ifTrue: [ self closeMenu]. ^ false]. (controlKeyPressed not & aKeyboardEvent commandKeyPressed not and: [aKeyboardEvent keyCharacter isCompletionCharacter ]) ifFalse: [ self closeMenu. ^ keyCharacter = Character escape]. ^ false.! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 13:04'! cancelled ^ false! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 16:44' prior: 54918381! openModal: aWindow self widget ifNotNil: [:w | ^ w openModal: aWindow ]. ^ nil! ! !AbstractSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/20/2013 12:29' prior: 17438850! initializeInstance ^ SpecInterpreter private_interpretASpec: { self classSymbol. #color:. #(Color class black)} model: DummyComposableModel new! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:05' prior: 50692079! model: aModel super model: aModel. aModel model focusOrder addLast: toolbar.! ! !DefaultSpecTreeNode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34' prior: 35357588! childrenItems ^ self model model childrenFor: self item! ! !DefaultSpecTreeNode methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:11'! matchTokenFilter: aFilter ^ false! ! !FilteringTreeNode commentStamp: '' prior: 35372531! I am tree node supporting filtering! !FilteringTreeNode methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:34'! isEmpty ^ self contents isEmpty! ! !FilteringTreeNode methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/20/2013 02:47'! matchTokenFilter: aFilter aFilter token ifEmpty: [ ^ true ]. ^ self asString asLowercase includesSubstring: aFilter token asLowercase! ! !FilteringTreeNode methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 4/18/2013 17:20'! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self contents do: [ :n | n updateAccordingTo: aFilter]. self contents removeAllSuchThat: [ :n | (aFilter keepSettingTreeNode: n) not and: [n isEmpty]]] ! ! !AlainTreeModel methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 4/20/2013 02:43'! changed: aSymbol treeModel changed: aSymbol! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/20/2013 03:54' prior: 35348782! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item printString ] asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 02:59' prior: 35355151! updateTree < api: #do> "Force the tree to refresh" self treeModel resetRootNodes. self treeModel changed: #rootNodes. treeUpdated contents: nil.! ! !AlainTreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 17:42'! whenRootsChanged: aBlock rootsHolder whenChangedDo: aBlock! ! !AlainTreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/20/2013 02:58'! whenTreeUpdated: aBlock treeUpdated whenChangedDo: aBlock! ! !TextModel commentStamp: '' prior: 35372625! I handle basic multi-line text. Try: "self example"! !TextInputFieldModel commentStamp: '' prior: 35372746! I handle one line of text.! !TextInputFieldModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/20/2013 12:41' prior: 52716335! accept: aText textHolder contents: aText. actionToPerformHolder contents cull: aText. "Dummy changed to raise an announcement" actionPerformedHolder contents: nil. self changed: #clearUserEdits.! ! !TextModel class methodsFor: 'example' stamp: 'SeanDeNigris 4/19/2013 22:50' prior: 52755220! example | instance | instance := self new. instance openWithSpec. instance text: 'This is a test. If this had been an actual emergency...'.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 13:27' prior: 52747336! accept "Accep the current pendingtext" self widget ifNotNil: [:w | w accept ]. "Dummy changed to raise an announcement" actionPerformedHolder contents: nil.! ! !TextModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/20/2013 13:27' prior: 52745338! accept: aText notifying: aNotifyier textHolder contents: aText. actionToPerformHolder contents cull: aText cull: aNotifyier. "Dummy changed to raise an announcement" actionPerformedHolder contents: nil. self changed: #clearUserEdits.! ! !NECModel methodsFor: 'accessing' stamp: 'JohanBrichau 4/5/2013 22:08'! narrowString ^ narrowString! ! "NECompletion"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(20 April 2013 7:28:40 pm) Pharo.image priorSource: 1806902! ----STARTUP----an Array(20 April 2013 7:34:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 April 2013 7:34:33 pm) Pharo-30048.image priorSource: 1835457! ----STARTUP----an Array(20 April 2013 8:49:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/20/2013 20:45' prior: 35361635! commentForCurrentUpdate ^ '10337 Remove old RBFormatter https://pharo.fogbugz.com/f/cases/10337 10339 MorphTreeMorph never removeSplitters https://pharo.fogbugz.com/f/cases/10339 10341 Cannot debug Halt in deferred startup actions when in interactive mode https://pharo.fogbugz.com/f/cases/10341 10342 Exit notification always prints string on stderr https://pharo.fogbugz.com/f/cases/10342'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/20/2013 20:45'! script147 ^ 'AST-Core-MarcusDenker.129.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1363.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1395.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.790.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.99.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.122.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.98.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/20/2013 20:46'! update30049 "self new update30049" self withUpdateLog: '10337 Remove old RBFormatter https://pharo.fogbugz.com/f/cases/10337 10339 MorphTreeMorph never removeSplitters https://pharo.fogbugz.com/f/cases/10339 10341 Cannot debug Halt in deferred startup actions when in interactive mode https://pharo.fogbugz.com/f/cases/10341 10342 Exit notification always prints string on stderr https://pharo.fogbugz.com/f/cases/10342'. self loadTogether: self script147 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphTreeMorph methodsFor: 'column handling' stamp: 'BenjaminVanRyseghem 4/20/2013 13:12' prior: 26957000! columns: aListOfTreeColumn "set the columns - as a consequence, the topHeader is update (if present) and column resizers are added" self removeColumnResizers. columns := aListOfTreeColumn asOrderedCollection. aListOfTreeColumn do: [:col | col container: self]. self buildTopHeader . self addColumnResizers. ! ! !Exit methodsFor: 'accessing' stamp: 'CamilloBruni 4/20/2013 19:16' prior: 34464982! defaultAction self messageText isEmpty ifFalse: [ self printMessage ]. Smalltalk exit: self status! ! !RBFormatterTests methodsFor: 'private' stamp: 'MarcusDenker 4/20/2013 03:19' prior: 30615925! formatClass: aClass selector: aSymbol | source tree1 tree2 | source := aClass sourceCodeAt: aSymbol. tree1 := RBParser parseMethod: source. tree2 := RBParser parseMethod: (RBConfigurableFormatter new format: tree1) onError: [ :err :pos | self assert: false ]. self assert: tree1 = tree2! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'CamilloBruni 4/20/2013 18:53' prior: 33552611! logStartupError: anError into: aCollection tryDebugger: tryDebugger "try to debug the given error or add a freezed version to aCollection" tryDebugger ifTrue: [[ ^ (anError isKindOf: Halt) ifTrue: [ anError pass ] ifFalse: [ anError debug ] ] on: Error do: [ "an error occured during error handling... treat the error as a normal startup error " ]]. self logError: '==== Startup Error: ', anError description inContext: anError signalerContext. "freeze the error" aCollection add: anError freeze.! ! RBFormatter removeSelector: #visitVariableNode:! RBFormatter removeSelector: #visitSequenceNode:! RBFormatter removeSelector: #visitReturnNode:! RBFormatter removeSelector: #visitPragmaNode:! RBFormatter removeSelector: #visitPatternWrapperBlockNode:! RBFormatter removeSelector: #visitPatternBlockNode:! RBFormatter removeSelector: #visitNode:! RBFormatter removeSelector: #visitMethodNode:! RBFormatter removeSelector: #visitMessageNode:! RBFormatter removeSelector: #visitLiteralNode:! RBFormatter removeSelector: #visitLiteralArrayNode:! RBFormatter removeSelector: #visitCascadeNode:! RBFormatter removeSelector: #visitBlockNode:startBlockString:endBlockString:! RBFormatter removeSelector: #visitBlockNode:! RBFormatter removeSelector: #visitAssignmentNode:! RBFormatter removeSelector: #visitArrayNode:! RBFormatter removeSelector: #startMessageSendOnNewLine:! RBFormatter removeSelector: #selectorsToStartOnNewLine! RBFormatter removeSelector: #selectorsToLeaveOnLine! RBFormatter removeSelector: #precedenceOf:greaterThan:! RBFormatter removeSelector: #postCopy! RBFormatter removeSelector: #newLinesFor:startingAt:! RBFormatter removeSelector: #needsParenthesisFor:! RBFormatter removeSelector: #maximumArgumentsPerLine! RBFormatter removeSelector: #maxLineSize! RBFormatter removeSelector: #lineStart:! RBFormatter removeSelector: #lineLength! RBFormatter removeSelector: #lastLineLength! RBFormatter removeSelector: #isMultiLine! RBFormatter removeSelector: #initialize! RBFormatter removeSelector: #indentWhile:! RBFormatter removeSelector: #indent:while:! RBFormatter removeSelector: #indent! RBFormatter removeSelector: #formatTemporariesFor:! RBFormatter removeSelector: #formatStatementsFor:! RBFormatter removeSelector: #formatStatementCommentFor:! RBFormatter removeSelector: #formatPragmasFor:! RBFormatter removeSelector: #formatMethodPatternFor:! RBFormatter removeSelector: #formatMethodCommentFor:indentBefore:! RBFormatter removeSelector: #formatMessageSelector:withArguments:multiline:! RBFormatter removeSelector: #formatMessage:cascade:! RBFormatter removeSelector: #format:! RBFormatter removeSelector: #for:do:separatedBy:! RBFormatter removeSelector: #firstLineLength! Smalltalk globals removeClassNamed: #RBFormatter! RBFormatterTests removeSelector: #formatters! RBFormatterTests removeSelector: #formatClass:selector:formatter:! RBProgramNodeTest removeSelector: #tearDown! RBProgramNodeTest removeSelector: #setUp! RBProgramNode class removeSelector: #formatterClass:! "AST-Core"! "AST-Tests-Core"! "Kernel"! "Morphic"! "System-Support"! ----End fileIn----! ----QUIT----an Array(20 April 2013 8:50:07 pm) Pharo.image priorSource: 1835657! ----STARTUP----an Array(20 April 2013 8:56:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 April 2013 8:56:23 pm) Pharo-30049.image priorSource: 1850587! ----STARTUP----an Array(22 April 2013 10:23:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/22/2013 10:20' prior: 35390390! commentForCurrentUpdate ^ '10033 Integrate AST interpreter https://pharo.fogbugz.com/f/cases/10033'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/22/2013 10:20'! script148 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.131.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1367.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1395.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-ClementBera.178.mcz OpalCompiler-Tests-ClementBera.108.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.790.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.99.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.122.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/22/2013 10:20'! update30050 "self new update30050" self withUpdateLog: '10033 Integrate AST interpreter https://pharo.fogbugz.com/f/cases/10033'. self loadTogether: self script148 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !PharoVMInterpreterTest commentStamp: '' prior: 0! I allow to test basic and tricky cases for the Pharo interpreter, such as non local returns, exception handling, ensure blocks. Test me when you refactor / change Pharo interpreter. Instance Variables ! !ASTBlockClosure commentStamp: '' prior: 0! I am a specific class to the ASTInterpreter. I represent a BlockClosure in Pharo. Instance Variables homeContext: homeContext - is the homeContext of the BlockClosure ! !AIContextInspector commentStamp: '' prior: 0! Permits to inspect the stack of contexts while inspecting a context in the Pharo inspector. Was used before the ASTDebugger was implemented.! !InterpretationError commentStamp: '' prior: 0! I signal when there is an Error in the interpretation of the code in the ASTInterpreter. In my cause instance variable you can the see the original class of the Error. ! !VariableNotDefined commentStamp: '' prior: 0! I am an error that is triggered when a variable not defined in a context is called. It is catched in case of a DoIt because there you don't need to declare temporaries.! !AIContext commentStamp: '' prior: 0! I am an abstract specific context for the ASTInterpreter that represents ContextPart in Pharo. Instance Variables arguments: closure: isExecuted: outerContext: temporaries: arguments - is the collection of the arguments of the method closure - is either a CompiledMethod or an ASTBlockClosure, depending if I am an AIBlockClosure or an AIMethodContext isExecuted - permits to know if my method has already been executed. In Pharo, when I am terminated my pc is set to nil. Then, you can know if I am terminated by checking if my pc is nil. In the ASTInterpreter we don't have pc so we use isExecuted boolean to know if the context is terminated. (isExecuted make the test ASTInterpreterTest>>testNonLocalReturnPart2 pass with the returningBlock) outerContext - is my sender temporaries - is the collection of the arguments + the temporaries of the method ! !AIBlockContext commentStamp: '' prior: 0! I am a specific context for the ASTInterpreter that represents BlockContext in Pharo. I have one aditional role with is to manage myself the exception handling and I do not delegate it to the context of the BlockClosure>>on:do: method Instance Variables exceptionHandler: homeContext: exceptionHandler - is nil if there are no exception handler is an ExceptionHandler which represents an ExceptionClass, a handlerBlock and the isActive boolean. It represents in Pharo the temporaries of the BlockClosure>>on:do: method homeContext - is the homeContext of the BlockClosure ! !AIRootContext commentStamp: '' prior: 0! I am a specific context for the ASTInterpreter that represents the first context that is interpreted. This way, when I am fully interpreted it means that the interpreting task is finished. holds the code from a DoIt ! !AIMethodContext commentStamp: '' prior: 0! I am a specific context for the ASTInterpreter that represents MethodContext in Pharo. Instance Variables receiver: receiver - is the receiver of my method ! !ASTInterpreter commentStamp: '' prior: 0! I interpret AST. I run methods in my method-evalluation protocol, called through acceptMessageNode:receiver: Instance Variables context: currentNode: gotoContext: primitiveFailed: context - is the current context being interpreted currentNode - is the current node being interpreted gotoContext - In the case of non local return or exception it is used to return to the right context after executing the unwinded blocks. primitiveFailed - primitiveFail token ! !ExceptionHandler commentStamp: '' prior: 0! I represent the BlockClosure>>on:do: temporaries in Pharo. Instance Variables block: enabled: exception: block - is the handler block enabled - is false if not active (to avoid running twice an handler block)) exception - is the exceptionClass ! !FakeCompiledMethod commentStamp: '' prior: 0! I hold the source code for DoIt. It is needed if you want to debug with ASTDebugger (Smalltalkhub user:'dh83' project:'ast-interpreter') a DoIt method or if you want to look at the stack in the AIContextInspector! !RBLiteralBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'ClementBera 2/26/2013 10:16'! accept: aVisitor assign: aValue ^self binding value: aValue! ! !RBLiteralBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'ClementBera 4/21/2013 14:22'! readWith: anInterpreter "maybe introduce indirections over the interpreter" ^ self value! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 2/26/2013 10:55'! accept: visitor on: receiver message: aMessage self isReflective ifTrue: [ ^ visitor invokeReflectiveMethod: self on: receiver message: aMessage]. self isPrimitive ifTrue: [ ^ visitor invokePrimitiveMethod: self on: receiver message: aMessage ]. ^ visitor invokeMethod: self on: receiver message: aMessage! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/19/2012 17:28'! bestNodeForPC: anInteger ^ self ast bestNodeFor: (self sourceIntervalForPC: anInteger)! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/18/2012 10:42'! code ^ self ast! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'CamilloBruni 2/3/2012 15:44'! isReflective ^ (self hasPragmaNamed: #reflective:)! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/19/2012 17:31'! sourceCodeForPC: anInteger | interval | interval := self sourceIntervalForPC: anInteger. ^ self sourceCode copyFrom: interval first to: interval last! ! !CompiledMethod methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/19/2012 17:29'! sourceIntervalForPC: anInteger ^ self debuggerMap abstractSourceMap at: anInteger! ! !RBArgumentBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'CamilloBruni 12/9/2011 20:00'! readWith: anInterpreter | index | index := self scope node argumentNames indexOf: node name. ^ anInterpreter readArgumentAt: index node: node! ! !ASTCacheTest methodsFor: 'running' stamp: 'CamilloBruni 2/17/2012 14:29'! setUp ASTCache reset. compiledMethod := ASTCacheTest >> #setUp.! ! !ASTCacheTest methodsFor: 'tests' stamp: 'CamilloBruni 2/17/2012 14:26'! testInCache self deny: (ASTCache default includesKey: compiledMethod). compiledMethod ast. self assert: (ASTCache default includesKey: compiledMethod).! ! !ASTCacheTest methodsFor: 'tests' stamp: 'CamilloBruni 2/27/2012 23:16'! testRecompile compiledMethod ast. self assert: (ASTCache default includesKey: compiledMethod). "recompile the test method and avoid referring to the old method" compiledMethod := compiledMethod recompile. "trigger garbage collection to free the ASTCache" Smalltalk garbageCollect. self deny: (ASTCache default includesKey: compiledMethod).! ! !ASTCacheTest methodsFor: 'tests' stamp: 'CamilloBruni 2/17/2012 14:27'! testReset compiledMethod ast. self assert: (ASTCache default includesKey: compiledMethod). ASTCache reset. self deny: (ASTCache default includesKey: compiledMethod).! ! !ASTStackMappingTest methodsFor: 'accessing' stamp: 'ClementBera 10/18/2012 10:20'! blockContext ^ blockContext! ! !ASTStackMappingTest methodsFor: 'methods' stamp: 'ClementBera 10/18/2012 15:20'! foo: anArg |a| a := anArg. ^thisContext copy asASTInterpreterContext.! ! !ASTStackMappingTest methodsFor: 'methods' stamp: 'ClementBera 10/21/2012 16:38'! fooAdd2: foo ^foo + 2! ! !ASTStackMappingTest methodsFor: 'accessing' stamp: 'ClementBera 10/18/2012 10:20'! methodContext ^ methodContext! ! !ASTStackMappingTest methodsFor: 'as yet unclassified' stamp: 'ClementBera 10/18/2012 10:47'! setUp blockContext := [] asContext. methodContext := thisContext copy.! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 15:23'! testBlockTemporaries |blockCtx| [ :x :y | x+y. blockCtx := thisContext copy asASTInterpreterContext ] value: 5 value: 7. self assert: (blockCtx temporaries at: 'x') = 5. self assert: (blockCtx temporaries at: 'y') = 7. ! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/23/2012 10:27'! testConvertBlockContext | aSTBlockContext | aSTBlockContext := self blockContext asASTInterpreterContext. self assert: self blockContext home asASTInterpreterContext = aSTBlockContext homeContext. self assert: self blockContext outerContext asASTInterpreterContext equals: aSTBlockContext outerContext. self assert: self blockContext closure asASTBlockClosure equals: aSTBlockContext closure. self assert: self blockContext tempNames equals: aSTBlockContext temporaries keys. self assert: self blockContext arguments equals: aSTBlockContext arguments. ! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 14:38'! testConvertMethodContext | aSTMethodContext | aSTMethodContext := self methodContext asASTInterpreterContext. self assert: self methodContext outerContext asASTInterpreterContext equals: aSTMethodContext outerContext. self assert: self methodContext method = aSTMethodContext closure. self assert: self methodContext tempNames = aSTMethodContext temporaries keys. self assert: self methodContext arguments = aSTMethodContext arguments. self assert: self methodContext receiver = aSTMethodContext receiver.! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 18:19'! testException |exceptionBlock blockCtx astBlockCtx| exceptionBlock := [ Transcript show: 'banana' ]. [ blockCtx := thisContext copy. astBlockCtx := blockCtx asASTInterpreterContext. Error signal] on: Error do: exceptionBlock. self assert: astBlockCtx exceptionHandler exception equals: Error. self assert: astBlockCtx exceptionHandler block equals: exceptionBlock.! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 3/7/2013 09:59'! testInterpret |foo bar| "will fail : goal" foo := 1. foo := foo + 1. self assert: foo = 2. self assert: (thisContext copy isKindOf: ContextPart). Smalltalk switchInterpreterTo: thisContext copy asASTInterpreterContext. foo := foo + 2. self assert: foo = 4. self assert: (thisContext copy isKindOf: AIContext).! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 3/7/2013 09:59'! testInterpretBasic |ctx result block | block := [ctx := thisContext copy.self fooAdd2: 4 ]. block value. result := ASTInterpreter interpretVMContext: ctx. "self assert: (result isKindOf: ASTBlockClosure). self assert: (result homeContext tempNamed: #tmp) equals: block value." self assert: result equals: 6.! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 15:22'! testMethodArgs |methodCtx| "foo: anArg |a| a := anArg. ^thisContext copy asASTInterpreterContext." methodCtx := self foo: 'bar'. self assert: (methodCtx arguments includes: 'bar'). self assert: (methodCtx temporaries at: 'a') = 'bar'. self assert: (methodCtx temporaries at: 'anArg') = 'bar'.! ! !ASTStackMappingTest methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 15:13'! testTemporaries | a b c ctx blockCtx| a := 1. b := True . c := 'guineaPig'. ctx := thisContext copy asASTInterpreterContext. self assert: (ctx temporaries at: 'a') = 1. self assert: (ctx temporaries at: 'b') = True. self assert: (ctx temporaries at: 'c') = 'guineaPig'. ! ! !ASTInterpreterTest class methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 12/9/2011 19:56'! testMethodArguments: anObject ^ [ anObject ] value! ! !ASTInterpreterTest methodsFor: 'helper' stamp: 'ClementBera 12/6/2012 13:07'! compile: aString ^interpreter compile: aString! ! !ASTInterpreterTest methodsFor: 'helper' stamp: 'ClementBera 1/14/2013 13:20'! interpret: aString | result | "context homeContext: thisContext". interpreter resetContext: context. result := interpreter interpretDoIt: (self compile: aString). self assert: interpreter context = context. ^ result! ! !ASTInterpreterTest methodsFor: 'helper' stamp: 'ClementBera 12/11/2012 11:41'! interpretTest: aTest | result | "context homeContext: thisContext". interpreter resetContext: context. result := interpreter interpret: (aTest ast body). self assert: interpreter context = context. ^ result! ! !ASTInterpreterTest methodsFor: 'helper' stamp: 'CamilloBruni 12/9/2011 22:21'! setUp "for now we use an ast cache to speed up the ast lookup" ASTCache initialize. interpreter := ASTInterpreter new. context := AIRootContext new.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/5/2012 10:16'! testArrayBasic self assert: (self interpret: '#(12 #de 1.2)') equals: #(12 #de 1.2). self assert: (self interpret: '{12 . #de . 1.2}') equals: {12 . #de . 1.2}. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/11/2012 09:49'! testArrayNonLiteral |x y| x := 5 + 2. y := #aSymbol. self assert: (self interpret: '|x y| x := 5 + 2. y := #aSymbol. {x . y}') equals: {x . y}.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/7/2012 10:45'! testAsInteger self assert: (self interpret: '#123 asInteger') equals: 123. self assert: (self interpret: '(String withAll: #($1 $2 $3)) asInteger') equals: 123. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/11/2012 11:13'! testAssert self should: [self interpret: 'ASTInterpreterTest new assert: false '] raise: InterpretationError. self shouldnt: [self interpret: 'ASTInterpreterTest new assert: true '] raise: InterpretationError. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 10:45'! testAssignTemp self assert: (self interpret: '[ |x| x:=4. x] value') equals: 4. self should: [self interpret: '[ |x| x:=4. y] value'] raise: Error. self assert: (self interpret: 'ASTInterpreterTest new methodWithTemp') equals: 7. self assert: (self interpret: '|x| x:=4. x') equals: 4. self assert: (self interpret: '|x y| x:=4. y') equals: nil. self assert: (self interpret: '|x y| y:=x:=4. y') equals: 4. self assert: (self interpret: '|x y| y:=1. y:=x:=4. y') equals: 4.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/3/2012 15:12'! testBasicCode self assert: (self interpret: '[ true ifTrue: [ nil ] ifFalse: [ 1 ]] value') equals: nil. self assert: (self interpret: '[ false ifTrue: [ nil ] ifFalse: [ 1 ]] value') = 1. self assert: (self interpret: '[ |a| a :=1. [ a < 10 ] whileTrue: [ a := a + 1]. a] value') = 10.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 10/5/2011 17:39'! testBinarySend self assert: (self interpret: '1 + 2') = 3. self assert: (self interpret: '1 < 2') = true.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 10/17/2012 14:02'! testBlock self assert: ((self interpret: '[ 1 ]') isKindOf: ASTBlockClosure). self assert: (self interpret: '[ 1 ] value') = 1. self assert: (self interpret: '[^1] value') = 1. self assert: (self interpret: '[ 1 + 2 ] value') = 3. self assert: (self interpret: 'true ifTrue: [ 1 ] ifFalse: [ 0 ]') = 1. self assert: (self interpret: 'false ifTrue: [ 1 ] ifFalse: [ 0 ]') = 0. ! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 3/6/2013 10:57'! testBlockArgument self assert: (self interpret: '[ :a| a ] value: 1') = 1. self assert: (self interpret: '[ :a| a + 3 ] value: 3 ') = 6. self assert: (self interpret: '[ :a :b | a + b ] value: 3 value: 5 ') = 8. self assert: (self interpret: '[ :a| a ] valueWithArguments: #(1)') equals: 1. self should: [self interpret: '[ :a| a ] valueWithArguments: #(1 3)'] raise: InterpretationError. self assert: (self interpret: '[ :a| a + 3 ] valueWithArguments: #(3) ') equals: 6.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 3/7/2013 09:52'! testBlockCannotReturn self should: [ self interpret: 'ASTInterpreterTest new returningBlock value' ] raise: InterpretationError. self should: [ self interpret: 'ASTInterpreterTest new returningBlockArg value: 1' ] raise: InterpretationError. self shouldnt: [ self interpret: 'ASTInterpreterTest new returningBlockNonRootContext2 ' ] raise: InterpretationError. self shouldnt: [ self interpret: 'ASTInterpreterTest new returningBlockNonRootContext ' ] raise: InterpretationError.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 3/7/2013 09:38'! testBlockOutOfHomeContext self should: [ self interpret: 'ASTInterpreterTest new errorBlock value' ] raise: InterpretationError. self assert: (self interpret: 'ASTInterpreterTest new block value') equals: 2. self assert: (self interpret: 'ASTInterpreterTest new blockTemp value') equals: 5. self assert: (self interpret: 'ASTInterpreterTest new blockTempWrite value') equals: 5.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 1/14/2013 11:01'! testBlockVar self assert: (self interpret: '[ |a| a := 1. a ] value') = 1. self assert: (self interpret: '[ |a| a := 1 + 2. a + 3 ] value') = 6. self assert: (self interpret: '[ |a| [ a := 1 ] value ] value') = 1. self assert: (self interpret: '[ |a| a := 1. [ a := 2 ] value ] value') = 2. self assert: (self interpret: '[ |a| a := 1. [ a := a + 1 ] value ] value') = 2. self assert: (self interpret: '[ :b ||a| a := 1. [ :c| a := a + 1 + c ] value: b ] value: 3') = 5. self assert: (self interpret: '|b| b := 2. [ |a| a := 1. a ] value') = 1. self assert: (self interpret: '|b| b := 2. [ |a| a := 1. a ] value. b') = 2.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 12/5/2011 09:56'! testConstant self assert: (self interpret: '1') = 1. self assert: (self interpret: 'nil') = nil. self assert: (self interpret: 'false') = false. self assert: (self interpret: '''asdf''') = 'asdf'. self assert: (self interpret: '#symbol') = #symbol.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 3/7/2013 09:40'! testCull self should: [self interpret: '[ :x :y | x + y ] cull: 1'] raise: InterpretationError. self assert: (self interpret: '[:x | x] cull: 1') = 1. self assert: (self interpret: '[2] cull: 1') = 2. self should: [self interpret: '[ :x :y :z | x + y + z ] cull: 1 cull: 2'] raise: InterpretationError. self assert: (self interpret: '[:x :y | x + y] cull: 1 cull: 2') = 3. self assert: (self interpret: '[:x | x] cull: 1 cull: 2') = 1. self assert: (self interpret: '[5] cull: 1 cull: 2') = 5. ! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 3/6/2013 12:59'! testDNU | interpretationError dnu | [ self interpret: '1 aMessageNotUnderstoodBySmallInteger' ] on: InterpretationError do: [ :err| interpretationError := err ]. dnu := interpretationError cause. self assert: dnu message selector equals: #aMessageNotUnderstoodBySmallInteger. self assert: dnu receiver equals: 1. [ self interpret: '1 aMessageNotUnderstoodBySmallInteger: #someArgument' ] on: InterpretationError do: [ :err| interpretationError := err ]. dnu := interpretationError cause. self assert: dnu message selector equals: #aMessageNotUnderstoodBySmallInteger:. self assert: dnu message arguments equals: {#someArgument}. self assert: dnu receiver equals: 1.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'ClementBera 12/11/2012 09:51'! testDNUCatched |message| message := self interpret: 'DoesNotUnderstandCatcher new someUnknownMessage'. self assert: message selector equals: #someUnknownMessage. self assert: message arguments equals: #(). message := self interpret: 'DoesNotUnderstandCatcher new someUnknownMessage: #someUnknownArg'. self assert: message selector equals: #someUnknownMessage:. self assert: message arguments equals: {#someUnknownArg}.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 3/6/2013 13:01'! testDNUInNestedBlock | interpretationError dnu | [ self interpret: '[[ #someReceiver aMessageNotUnderstoodBySmallInteger: #someArgument ] value ] value' ] on: InterpretationError do: [ :err| interpretationError := err ]. dnu := interpretationError cause. self assert: dnu message selector equals: #aMessageNotUnderstoodBySmallInteger:. self assert: dnu message arguments equals: {#someArgument}. self assert: dnu receiver equals: #someReceiver.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 12/3/2012 15:43'! testEnsureBasic self assert: (self interpret: '[ ] ensure: [ 2 ].') = nil. self assert: (self interpret: '[ 1 ] ensure: [ 2 ].') = 1. self assert: (self interpret: '[ 1 ] ensure: [ 2 ]. 3') = 3. self assert: (self interpret: '[ 1 ] ensure: [ ^ 2 ]. 3') = 2. self assert: (self interpret: '[ ^ 1 ] ensure: [ ^ 2 ]. 3') = 2. self should: [self interpret: '[ Error signal ] ensure: [ ^ 2 ]. 3'] raise: InterpretationError. self should: [self interpret: '[ [Error signal] value ] ensure: [ ^ 2 ]. 3' ] raise: InterpretationError. ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 12/11/2012 09:51'! testEnsureNonLocalReturn "does not work" "self assert: false." self assert: (self interpret: ' |x aCol| aCol := OrderedCollection new. x := ASTInterpreterTest new setUp ensureNonLocalReturn: aCol. x + aCol first ') equals: 7 ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 12/11/2012 09:31'! testEnsureTricky self assert: (self interpret: '(String streamContents: [:s | [ [s nextPutAll: 1 printString. 1/0] ensure: [s nextPutAll: 2 printString] ] on: Error do: [s nextPutAll: 3 printString] ]) asInteger') equals: 132. "not fixed yet" self assert: (self interpret: '[[Error signal] ensure: [1].3]on: Error do: [2]') equals: 2. ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 2/28/2013 18:05'! testException1 [ (self interpret: 'Error signal: #anErrorHappened') ] on: InterpretationError do: [ :err | | originalError | originalError := err cause. self assert: (originalError isKindOf: Error). self assert: originalError messageText equals: #anErrorHappened. ^ #success ]. self fail.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 3/6/2013 16:10'! testExceptionCull self shouldnt: (self interpret: 'ASTInterpreterTest new should: [ [:x :y | ] cull: 1] raise: Error') raise: Error. ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 12/7/2012 11:21'! testExceptionHandling self assert: (self interpret: '[ ] on: Error do: [ :err| false ].') = nil. self assert: (self interpret: '[ ] on: Error do: [ :err| false ]. true') = true. self assert: (self interpret: '[ ] on: Error do: [ :err| ^ false ]. true') = true. self assert: (self interpret: '[ Error signal ] on: Error do: [ :err| false ]') = false. self assert: (self interpret: '[ Error signal ] on: Error do: [ :err| false ]. true') equals: true. self assert: (self interpret: '[ Error signal ] on: Error do: [ :err| ^ false ]. true') = false. self assert: (self interpret: '[[ Error signal ] value ] on: Error do: [ :err| false ]') = false. self assert: (self interpret: '[[ Error signal ] value ] on: Error do: [ :err| false ]. true') = true. self assert: (self interpret: '[[ Error signal ] value ] on: Error do: [ :err| ^ false ]. true') = false. self assert: (self interpret: '[self errorBlock value] on: Error do: [:err | false]') equals: false. self assert: (self interpret: '[self errorBlock value ] on: Error do: [ :err| false ]. true') = true. self assert: (self interpret: '[self errorBlock value ] on: Error do: [ :err| ^ false ]. true') = false.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 10/19/2012 12:39'! testExceptionResume self assert: (self interpret: '[ 1 + Exception signal ] on: Exception do: [ :err| err resume: 5 ].') = 6. self assert: (self interpret: '[ 1 + Exception signal ] on: Exception do: [ :err| err resume: 5 ]. true') = true.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 10/19/2012 12:35'! testExceptionReturn self assert: (self interpret: '[ Error signal ] on: Error do: [ :err| err return: 5 + 1 ].') = 6. self assert: (self interpret: '[ Error signal ] on: Error do: [ :err| err return: 5 + 1 ]. true') = true.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 2/26/2013 10:05'! testExternalBlock self assert: (self interpret: 'ASTInterpreterTest new returningTempBlock') equals: ASTInterpreterTest new returningTempBlock. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 12/5/2011 14:56'! testGlobals self assert: (self interpret: 'Array') = Array! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 12/11/2012 09:26'! testInstanceCreation self assert: ((self interpret: 'Array new') isKindOf: Array). self assert: ((self interpret: 'Array new: 10') isKindOf: Array). self assert: ((self interpret: 'OrderedCollection new') isKindOf: OrderedCollection). self assert: ((self interpret: 'Error new') isKindOf: Error). self assert: ((self interpret: 'MessageNotUnderstood new') isKindOf: MessageNotUnderstood)! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 3/5/2013 13:43'! testLazyInitialization self assert: (self interpret: ' ASTInterpreterTest new lazyInitialization ') equals: 5. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 13:12'! testLookUp self assert: (self interpret: '(ASTInterpreterTest selector: #foo) superSendInNestedBlock') equals: #foo. ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 2/26/2013 10:32'! testLoop self assert: (self interpret: ' |index| index := 1. [index := index + 1. index = 10 ] whileFalse. index ') equals: 10. self assert: (self interpret: ' ASTInterpreterTest new returningBlockInsideLoop ') equals: ASTInterpreterTest new returningBlockInsideLoop. self assert: (self interpret: ' ASTInterpreterTest new returningLoop ') equals: ASTInterpreterTest new returningLoop. ! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 12/9/2011 19:55'! testMethodArguments self assert: (self interpret: 'ASTInterpreterTest testMethodArguments: 1') = 1. ! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'CamilloBruni 12/8/2011 18:21'! testNonLocalReturn self assert: (self interpret: 'false ifTrue: [ ^ 1 ]. ^ 1 + 1') = 2. self assert: (self interpret: 'true ifTrue: [ ^ 1 ]. ^ 1 + 1') = 1. self assert: (self interpret: 'false ifTrue: [ ^ 1 ] ifFalse: [^ 2]. 1 + 1 + 1') = 2.! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'ClementBera 1/14/2013 13:14'! testNonLocalReturnExternal self assert: (self interpret: 'ASTInterpreterTest new returningBlockValue') equals: ASTInterpreterTest new returningBlockValue ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 3/4/2013 15:55'! testNotification self shouldnt: [self interpret: 'Notification signal'] raise: Error.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 4/21/2013 15:09'! testPerform self should: [self interpret: '#de perform: #negated'] raise: InterpretationError. self assert: (self interpret: '1 perform: #negated') equals: 1 negated. self assert: (self interpret: '1 perform: #+ with: 2') equals: 3. self assert: (self interpret: '1 perform: #+ withArguments: #(2)') equals: 3.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 12/8/2011 00:21'! testPrimitive self assert: (self interpret: '1 + 1') = 2. "simple" self assert: (self interpret: '1 + 1.5') = 2.5. "with fallback"! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 3/5/2013 13:36'! testProtoObjectMethod "This test works in you move Object>>#class to ProtoObject>>#class I proposed the fix in the bug issue tracker " self shouldnt: [self interpret: 'ProtoObject new flag: #hallo'] raise: InterpretationError ! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 2/26/2013 10:29'! testRepeat self assert: (self interpret: '[^5] repeat') equals: 5.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 12/12/2011 16:39'! testSend self assert: (self interpret: '#(1 2) at: 1') = 1. self assert: (self interpret: '1 + 2') = 3. "this is for future use :)" self assert: (self interpret: '123 asString') = '123'.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 3/4/2013 15:06'! testSignalException [ self interpret: 'Exception signal' ] on: InterpretationError do: [ :error | self assert: (error cause isKindOf: SubclassResponsibility). ^ self ]. self fail.! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'ClementBera 3/18/2013 16:25'! testSignalHalt [ self interpret: '1 halt' ] on: InterpretationError do: [ :error | self assert: (error cause class = Halt). ^ self ]. self fail.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 11:11'! testString self assert: (self interpret: 'String withAll: #($h $e $l $l $o)') equals: 'hello'. self assert: (self interpret: '$a asSymbol') equals: #a. self assert: (self interpret: '''a''') equals: 'a'. self assert: (self interpret: '''a'' asSymbol') equals: #a. self assert: (self interpret: '(String withAll: #($h $e $l $l $o)) asSymbol') equals: #hello.! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 3/6/2013 13:05'! testSuperDNU | interpretationError dnu | [ self interpret: 'InterpreterTest new unknownSuperSend' ] on: InterpretationError do: [ :err| interpretationError := err ]. dnu := interpretationError cause. self assert: dnu message selector equals: #aSelectorThatDoesNotExist. self assert: dnu message arguments isEmpty. self assert: (dnu receiver isKindOf: InterpreterTest). [ self interpret: 'InterpreterTest new unknownSuperSendInNestedBlock' ] on: InterpretationError do: [ :err| interpretationError := err ]. dnu := interpretationError cause. self assert: dnu message selector equals: #aSelectorThatDoesNotExist. self assert: dnu message arguments isEmpty. self assert: (dnu receiver isKindOf: InterpreterTest).! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 3/6/2013 12:54'! testThisContext self assert: ((self interpret: 'thisContext') isKindOf: AIRootContext). "The home context of a AIRootContext is nil" self assert: (self interpret: 'thisContext home') equals: nil. self assert: (self interpret: 'thisContext homeContext') equals: nil. self assert: ((self interpret: 'ASTInterpreterTest new thisContextMethod') isKindOf: AIContext). self assert: ((self interpret: 'ASTInterpreterTest new thisContextCopyMethod') isKindOf: AIContext). ! ! !ASTInterpreterTest methodsFor: 'testing - message sent' stamp: 'CamilloBruni 12/5/2011 11:24'! testUnarySend self assert: (self interpret: '1 asInteger') = 1. self assert: (self interpret: '1 class') = SmallInteger.! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 11:11'! testWeakSet self assert: (self interpret: ' | index start | index := start := 4 hash \\ 7 + 1. index ') equals: 4 hash \\ 7 + 1. self assert: (self interpret: ' | index start | index := start := 4 hash \\ 7 + 1. start ') equals: 4 hash \\ 7 + 1. self assert: (self interpret: 'WeakSet new add: 1') equals: (WeakSet new add: 1). self assert: (self interpret: 'WeakSet new add: 1; scanFor: 1') equals: (WeakSet new add: 1; scanFor: 1) ! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 11/2/2012 09:57'! block ^ [2]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/4/2013 10:44'! blockTemp |stuff| stuff := 5. ^[stuff]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/4/2013 10:50'! blockTempWrite |stuff| ^[stuff := 5. stuff]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 12/11/2012 09:28'! ensureNonLocalReturn: anOrderedCollection [^2] ensure: [anOrderedCollection add: 5]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 11/2/2012 09:56'! errorBlock ^ [Error signal]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/5/2013 13:42'! lazyInitialization |foo| ^foo ifNil: [ foo := 5 ]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 12/11/2012 09:30'! methodWithTemp |temp| temp := 5 + 2. ^temp! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 11/2/2012 09:56'! returningBlock ^ [^ 2]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/6/2013 09:50'! returningBlockArg ^ [:arg| ^arg]! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 1/14/2013 13:05'! returningBlockInsideLoop [ ^5] whileFalse! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/7/2013 09:44'! returningBlockNonRootContext self should: [self returningBlock value] raise: BlockCannotReturn! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/7/2013 09:50'! returningBlockNonRootContext2 [self returningBlock value] on: BlockCannotReturn do: [ 1 ]! ! !InterpreterTest methodsFor: 'helper' stamp: 'CamilloBruni 3/6/2013 13:02'! returningBlockValue [ ^5 ] value! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 1/14/2013 11:09'! returningLoop |index| index := 1. [index := index + 1. index = 5 ifTrue: [^index ]. index = 10] whileFalse. ^self error! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 2/26/2013 10:05'! returningTempBlock |stuff| stuff := 5. [ ^stuff] value! ! !InterpreterTest methodsFor: 'helper' stamp: 'CamilloBruni 3/6/2013 13:12'! superSendInNestedBlock [[ ^ super selector ] value ] value! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/4/2013 15:15'! thisContextCopyMethod |var| var := thisContext copy. ^var! ! !InterpreterTest methodsFor: 'helper' stamp: 'ClementBera 3/4/2013 15:15'! thisContextMethod ^thisContext! ! !InterpreterTest methodsFor: 'helper' stamp: 'CamilloBruni 3/6/2013 13:03'! unknownSuperSend ^ super aSelectorThatDoesNotExist! ! !InterpreterTest methodsFor: 'helper' stamp: 'CamilloBruni 3/6/2013 13:03'! unknownSuperSendInNestedBlock [[ ^ super aSelectorThatDoesNotExist ] value ] value! ! !PharoVMInterpreterTest commentStamp: '' prior: 35415543! I allow to test basic and tricky cases for the Pharo interpreter, such as non local returns, exception handling, ensure blocks. Test me when you refactor / change Pharo interpreter. Instance Variables ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 09:59'! testBasicCode self assert: [ true ifTrue: [ nil ] ifFalse: [ 1 ]] value equals: nil. self assert: [ false ifTrue: [ nil ] ifFalse: [ 1 ]] value equals: 1. self assert: [ |a| a :=1. [ a < 10 ] whileTrue: [ a := a + 1]. a] value equals: 10.! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 10:01'! testBinarySend self assert: 1 + 2 equals: 3. self assert: 1 < 2 equals: true.! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:07'! testBlock self assert: ([ 1 ] isKindOf: BlockClosure). self assert: [ 1 ] value = 1. self assert: [^1] value = 1. self assert: [ 1 + 2 ] value = 3. self assert: (true ifTrue: [ 1 ] ifFalse: [ 0 ]) = 1. self assert: (false ifTrue: [ 1 ] ifFalse: [ 0 ]) = 0. ! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:07'! testBlockArgument self assert: ([ :a| a ] value: 1) = 1. self assert: ([ :a| a + 3 ] value: 3) = 6. ! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:08'! testBlockVar self assert: [ |a| a := 1. a ] value = 1. self assert: [ |a| a := 1 + 2. a + 3 ] value = 6. self assert: [ |a| [ a := 1 ] value ] value = 1. self assert: [ |a| a := 1. [ a := 2 ] value ] value = 2. self assert: [ |a| a := 1. [ a := a + 1 ] value ] value = 2. self assert: ([ :b ||a| a := 1. [ :c| a := a + 1 + c ] value: b ] value: 3) = 5! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:10'! testDNU | error | [ 1 aMessageNotUnderstoodBySmallInteger ] on: Error do: [ :err| error := err ]. self assert: error message selector = #aMessageNotUnderstoodBySmallInteger.! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:17'! testEnsure self assert: ([ ] ensure: [ 2 ]) = nil. self assert: ([ 1 ] ensure: [ 2 ]) = 1. self assert: [[ 1 ] ensure: [ 2 ]. 3] value = 3. self assert: [[ 1 ] ensure: [ ^ 2 ]. 3] value = 2. self assert: [[ ^ 1 ] ensure: [ ^ 2 ]. 3] value = 2. self should: [ [ Error signal ] ensure: [ ^ 2 ]. 3 ] raise: InterpretationError. self should: [ [ [Error signal] value ] ensure: [ ^ 2 ]. 3 ] raise: InterpretationError! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:18'! testException [ Error signal: #anErrorHappened ] on: Error do: [ :err | self assert: (err isKindOf: Error). self assert: err messageText equals: #anErrorHappened. ^ #success ]. self fail.! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:21'! testExceptionHandling self assert: ([ ] on: Error do: [ :err| false ]) = nil. self assert: [[ ] on: Error do: [ :err| false ]. true] value = true. self assert: [[ ] on: Error do: [ :err| ^ false ]. true] value = true. self assert: ([ Error signal ] on: Error do: [ :err| false ]) = false. self assert: [[ Error signal ] on: Error do: [ :err| false ]. true] value = true. self assert: [[ Error signal ] on: Error do: [ :err| ^ false ]. true] value = false. self assert: ([[ Error signal ] value ] on: Error do: [ :err| false ]) = false. self assert: [[[ Error signal ] value ] on: Error do: [ :err| false ]. true] value = true. self assert: [[[ Error signal ] value ] on: Error do: [ :err| ^ false ]. true] value = false. self assert: ([self errorBlock value] on: Error do: [:err | false]) equals: false. self assert: [[self errorBlock value ] on: Error do: [ :err| false ]. true] value = true. self assert: [[self errorBlock value ] on: Error do: [ :err| ^ false ]. true] value = false.! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:22'! testExceptionResume self assert: ([ 1 + Exception signal ] on: Exception do: [ :err| err resume: 5 ]) = 6. self assert: [[ 1 + Exception signal ] on: Exception do: [ :err| err resume: 5 ]. true] value = true.! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:22'! testExceptionReturn self assert: ([ Error signal ] on: Error do: [ :err| err return: 5 + 1 ]) = 6. self assert: [[ Error signal ] on: Error do: [ :err| err return: 5 + 1 ]. true] value = true.! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:23'! testInstanceCreation self assert: ((Array new) isKindOf: Array). self assert: ((Error new) isKindOf: Error). self assert: ((MessageNotUnderstood new) isKindOf: MessageNotUnderstood)! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:25'! testNonLocalReturn self assert: [false ifTrue: [ ^ 1 ]. ^ 1 + 1] value = 2. self assert: [true ifTrue: [ ^ 1 ]. ^ 1 + 1] value = 1. self assert: [false ifTrue: [ ^ 1 ] ifFalse: [^ 2]. 1 + 1 + 1] value = 2.! ! !PharoVMInterpreterTest methodsFor: 'tricky asserting' stamp: 'ClementBera 11/2/2012 13:27'! testNonLocalReturnPart2 self should: [ ASTInterpreterTest new returningBlock value ] raise: BlockCannotReturn. self should: [ ASTInterpreterTest new errorBlock value ] raise: Error. self assert: (ASTInterpreterTest new block value) equals: 2.! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:27'! testPrimitive self assert: 1 + 1 = 2. "simple" self assert: 1 + 1.5 = 2.5. "with fallback"! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:28'! testSend self assert: (#(1 2) at: 1) = 1. self assert: 1 + 2 = 3. "this is for future use :)" self assert: 123 asString = '123'.! ! !PharoVMInterpreterTest methodsFor: 'basic asserting' stamp: 'ClementBera 11/2/2012 13:29'! testUnarySend self assert: 1 asInteger = 1. self assert: 1 class = SmallInteger.! ! !RBTemporaryBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'ClementBera 4/21/2013 14:22'! accept: anInterpeter assign: value ^ anInterpeter write: value temporaryAt: -1 named: node name! ! !RBTemporaryBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'ClementBera 4/21/2013 14:22'! readWith: anInterpreter ^ anInterpreter readTemporaryAt: -1 named: node name! ! !ASTBlockClosure commentStamp: '' prior: 35415804! I am a specific class to the ASTInterpreter. I represent a BlockClosure in Pharo. Instance Variables homeContext: homeContext - is the homeContext of the BlockClosure ! !ASTBlockClosure methodsFor: 'testing' stamp: 'ClementBera 12/3/2012 13:48'! = anASTBlockClosure (anASTBlockClosure class == self class)ifFalse: [^false]. (self homeContext = anASTBlockClosure homeContext)ifFalse: [^false]. ^true! ! !ASTBlockClosure methodsFor: 'visiting' stamp: 'CamilloBruni 10/5/2011 17:47'! accept: visitor ^ visitor visitBlockClosure: self! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'ClementBera 12/3/2012 13:48'! code ^ code! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'ClementBera 12/3/2012 13:48'! code: anObject code := anObject! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/12/2011 14:12'! cull: anArg ^ self numArgs = 0 ifTrue: [self value] ifFalse: [self value: anArg] ! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/12/2011 14:12'! cull: firstArg cull: secondArg ^ self numArgs < 2 ifTrue: [self cull: firstArg] ifFalse: [self value: firstArg value: secondArg] ! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/12/2011 14:12'! cull: firstArg cull: secondArg cull: thirdArg ^ self numArgs < 3 ifTrue: [self cull: firstArg cull: secondArg] ifFalse: [self value: firstArg value: secondArg value: thirdArg] ! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/12/2011 14:12'! cull: firstArg cull: secondArg cull: thirdArg cull: fourthArg "Execute the receiver with four or less arguments. Check cull:cull: for examples" ^ self numArgs < 4 ifTrue: [self cull: firstArg cull: secondArg cull: thirdArg] ifFalse: [self value: firstArg value: secondArg value: thirdArg value: fourthArg] ! ! !ASTBlockClosure methodsFor: 'exception' stamp: 'CamilloBruni 12/13/2011 15:31'! ensure: aBlock "Evaluate a termination block after evaluating the receiver, regardless of whether the receiver's evaluation completes." PrimitiveFailed signal! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:53'! homeContext ^ homeContext! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:53'! homeContext: aContext homeContext := aContext! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'ClementBera 12/3/2012 13:48'! numArgs ^ self code arguments size! ! !ASTBlockClosure methodsFor: 'exception' stamp: 'CamilloBruni 12/12/2011 16:13'! on: exception do: aBlock PrimitiveFailed signal! ! !ASTBlockClosure methodsFor: 'exception' stamp: 'CamilloBruni 12/13/2011 15:20'! onDNU: selector do: handleBlock "Catch MessageNotUnderstood exceptions but only those of the given selector (DNU stands for doesNotUnderstand:)" ^ self on: MessageNotUnderstood do: [:exception | exception message selector = selector ifTrue: [handleBlock cull: exception] ifFalse: [exception pass] ]! ! !ASTBlockClosure methodsFor: 'printing' stamp: 'ClementBera 12/7/2012 10:59'! printOn: aStream aStream nextPutAll: 'ASTBlockClosure: '. aStream nextPutAll: self code formattedCode! ! !ASTBlockClosure methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:53'! returnContext ^ homeContext returnContext! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/5/2011 16:16'! value ^ self valueWithArguments: (Array new: 0)! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/5/2011 16:13'! value: anArg ^ self valueWithArguments: (Array with: anArg)! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/5/2011 16:13'! value: anArg value: otherArg ^ self valueWithArguments: (Array with: anArg with: otherArg)! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/5/2011 16:13'! value: anArg value: otherArg value: anotherArg ^ self valueWithArguments: (Array with: anArg with: otherArg with: anotherArg)! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'CamilloBruni 12/5/2011 16:13'! value: anArg value: otherArg value: anotherArg value: yetAnotherArg ^ self valueWithArguments: (Array with: anArg with: otherArg with: anotherArg with: yetAnotherArg)! ! !ASTBlockClosure methodsFor: 'exception' stamp: 'ClementBEra 3/6/2013 16:55'! valueNoContextSwitch ^ self value! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'ClementBEra 3/6/2013 17:44'! valueWithArguments: anArray | newContext ncv | self numArgs ~= anArray size ifTrue: [self numArgsError: anArray size]. ^PrimitiveFailed signal! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 12/3/2012 13:48'! valueWithPossibleArgs: anArray | numArgs | numArgs := self numArgs. numArgs = 0 ifTrue: [ ^ self value ]. numArgs = anArray size ifTrue: [ ^ self valueWithArguments: anArray ]. numArgs > anArray size ifTrue: [ ^ self valueWithArguments: anArray , (Array new: numArgs - anArray size) ]. ^ self valueWithArguments: (anArray copyFrom: 1 to: numArgs)! ! !ASTBlockClosure methodsFor: 'controlling' stamp: 'CamilloBruni 10/5/2011 17:50'! whileFalse self value ifFalse: [ self whileFalse ]! ! !ASTBlockClosure methodsFor: 'controlling' stamp: 'ClementBera 1/21/2013 10:07'! whileFalse: aBlock self value ifFalse: [ aBlock value. self whileFalse: aBlock ]! ! !ASTBlockClosure methodsFor: 'controlling' stamp: 'CamilloBruni 10/5/2011 17:50'! whileTrue self value ifTrue: [ self whileTrue ]! ! !ASTBlockClosure methodsFor: 'controlling' stamp: 'ClementBera 1/21/2013 10:08'! whileTrue: aBlock self value ifTrue: [ aBlock value. self whileTrue: aBlock ]! ! !BlockClosure methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/23/2012 10:25'! asASTBlockClosure ^ASTBlockClosure new homeContext: self home asASTInterpreterContext; code: self decompile ! ! !MethodContext methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/18/2012 10:24'! asASTInterpreterContext ^ (self isBlockContext ifTrue: [ AIBlockContext ] ifFalse: [ AIMethodContext ]) fromVMContext: self ! ! !MethodContext methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/18/2012 10:25'! isBlockContext ^ closureOrNil isNil not! ! !AIContextInspector commentStamp: '' prior: 35416102! Permits to inspect the stack of contexts while inspecting a context in the Pharo inspector. Was used before the ASTDebugger was implemented.! !AIContextInspector methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 10:02'! contextStack ^object stack! ! !AIContextInspector methodsFor: 'accessing' stamp: 'CamilloBruni 3/6/2013 12:41'! fieldList "Answer the base field list plus an abbreviated list of indices." ^ self baseFieldList , (self contextStack collectWithIndex: [:ctx : index| '[', (index printString padLeftTo: 2 with: $0) , '-', ((ctx class name copyAfter: $I) copyReplaceAll: 'Context' with: 'Ctx') , ']'])! ! !AIContextInspector methodsFor: 'selecting' stamp: 'ClementBera 3/5/2013 13:51'! printSelection selectionIndex <= (self numberOfFixedFields) ifTrue: [^ self selection printStringLimitedTo: 5000]. ^self selection ifNil: [ nil ] ifNotNil: [ :itself | itself debugPrintString]! ! !AIContextInspector methodsFor: 'selecting' stamp: 'ClementBera 3/4/2013 15:27'! selection selectionIndex <= (self numberOfFixedFields) ifTrue: [^ super selection]. ^ self contextStack at: (selectionIndex - self numberOfFixedFields) ifAbsent:[nil]! ! !AIContextInspector methodsFor: 'selecting' stamp: 'ClementBera 3/4/2013 15:29'! selectionPrintString | text | selectionUpdateTime := [ text := [self printSelection] on: Error do: [ text := self printStringErrorText. text]] timeToRun. ^ text! ! !UndefinedObject methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 4/21/2013 15:14'! asASTInterpreterContext ^ nil! ! !UnhandledError methodsFor: 'priv handling' stamp: 'MarcusDenker 4/22/2013 10:17' prior: 54493031! defaultAction ^ Smalltalk globals at: #UIManager ifPresent: [:class | class default unhandledErrorDefaultAction: self exception] ifAbsent: [ Transcript show: 'unhandled error' ].! ! !RBInstanceBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'CamilloBruni 12/5/2011 15:18'! accept: aVisitor assign: aValue ^ aVisitor write: aValue at: index named: name! ! !RBInstanceBinding methodsFor: '*AST-Interpreter-Semantic-Binding' stamp: 'CamilloBruni 12/5/2011 15:22'! readWith: aVisitor ^ aVisitor readInstVarAt: index named: name! ! !InterpretationError commentStamp: '' prior: 35416304! I signal when there is an Error in the interpretation of the code in the ASTInterpreter. In my cause instance variable you can the see the original class of the Error. ! !InterpretationError class methodsFor: 'signalling' stamp: 'CamilloBruni 12/9/2011 14:08'! signalFor: aCauseError ^ self new cause: aCauseError; signal! ! !InterpretationError methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:08'! cause ^ cause! ! !InterpretationError methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:08'! cause: anObject cause := anObject! ! !InterpretationError methodsFor: 'private' stamp: 'CamilloBruni 12/12/2011 14:29'! isResumable ^ true! ! !VariableNotDefined commentStamp: '' prior: 35416534! I am an error that is triggered when a variable not defined in a context is called. It is catched in case of a DoIt because there you don't need to declare temporaries.! !VariableNotDefined class methodsFor: 'as yet unclassified' stamp: 'ClementBera 1/14/2013 10:25'! signalForVariable: aName context: aContext ^self new variableName: aName; context: aContext; signal! ! !VariableNotDefined methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 10:25'! context ^ context! ! !VariableNotDefined methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 10:25'! context: anObject context := anObject! ! !VariableNotDefined methodsFor: 'handling' stamp: 'ClementBera 1/14/2013 10:44'! createTemp context createTemp: variableName! ! !VariableNotDefined methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 10:35'! isResumable ^true! ! !VariableNotDefined methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 10:15'! variableName ^ variableName! ! !VariableNotDefined methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 10:15'! variableName: anObject variableName := anObject! ! !AIContext commentStamp: '' prior: 35416755! I am an abstract specific context for the ASTInterpreter that represents ContextPart in Pharo. Instance Variables arguments: closure: isExecuted: outerContext: temporaries: arguments - is the collection of the arguments of the method closure - is either a CompiledMethod or an ASTBlockClosure, depending if I am an AIBlockClosure or an AIMethodContext isExecuted - permits to know if my method has already been executed. In Pharo, when I am terminated my pc is set to nil. Then, you can know if I am terminated by checking if my pc is nil. In the ASTInterpreter we don't have pc so we use isExecuted boolean to know if the context is terminated. (isExecuted make the test ASTInterpreterTest>>testNonLocalReturnPart2 pass with the returningBlock) outerContext - is my sender temporaries - is the collection of the arguments + the temporaries of the method ! !AIBlockContext commentStamp: '' prior: 35417771! I am a specific context for the ASTInterpreter that represents BlockContext in Pharo. I have one aditional role with is to manage myself the exception handling and I do not delegate it to the context of the BlockClosure>>on:do: method Instance Variables exceptionHandler: homeContext: exceptionHandler - is nil if there are no exception handler is an ExceptionHandler which represents an ExceptionClass, a handlerBlock and the isActive boolean. It represents in Pharo the temporaries of the BlockClosure>>on:do: method homeContext - is the homeContext of the BlockClosure ! !AIBlockContext class methodsFor: 'instance creation' stamp: 'ClementBera 10/23/2012 09:45'! fromVMContext: aBlockContext |sender| sender := aBlockContext sender. ^ self new initializeContext: aBlockContext; homeContext: aBlockContext home asASTInterpreterContext ; closure: aBlockContext closure asASTBlockClosure; exceptionHandler: (sender isNil not ifTrue: [ sender isHandlerContext ifTrue: [ (ExceptionHandler on: (sender tempAt: 1) do: (sender tempAt: 2)) enabled: (sender tempAt: 1)] ]) ; yourself! ! !AIBlockContext methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 16:44'! = anAIBlockContext (super = anAIBlockContext) ifFalse: [^false]. (self homeContext = anAIBlockContext homeContext) ifFalse: [^false]. (self exceptionHandler = anAIBlockContext exceptionHandler) ifFalse: [^false]. ^true! ! !AIBlockContext methodsFor: 'debugging' stamp: 'ClementBera 3/6/2013 16:07'! debugPrintString ^'Block in : ', self methodClass name, '>>#', (self method ifNotNil: [:mth | mth selector] ifNil: [#unknownSelector]), String lf, self code formattedCode printString! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 20:52'! exceptionHandler ^ exceptionHandler! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 20:52'! exceptionHandler: anExceptionHandler exceptionHandler := anExceptionHandler! ! !AIBlockContext methodsFor: 'testing' stamp: 'CamilloBruni 12/12/2011 14:19'! hasExceptionHandler ^ exceptionHandler isNil not! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:57'! homeContext ^ homeContext! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 14:57'! homeContext: aContext homeContext := aContext! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 3/6/2013 11:32'! method ^ self homeContext method! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 3/6/2013 12:39'! methodClass ^ self homeContext methodClass! ! !AIBlockContext methodsFor: 'printing' stamp: 'ClementBera 12/7/2012 10:58'! printOn: aStream aStream nextPutAll: 'AIBlockCtxt: '. aStream nextPutAll: self code formattedCode! ! !AIBlockContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 15:05'! receiver ^ self homeContext receiver! ! !AIBlockContext methodsFor: 'accessing' stamp: 'ClementBera 12/7/2012 10:40'! returnContext ^ self homeContext returnContext! ! !AIRootContext commentStamp: '' prior: 35418496! I am a specific context for the ASTInterpreter that represents the first context that is interpreted. This way, when I am fully interpreted it means that the interpreting task is finished. holds the code from a DoIt ! !AIRootContext methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 16:44'! = anObject ^ self == anObject! ! !AIRootContext methodsFor: 'debugging' stamp: 'ClementBera 3/6/2013 16:08'! debugPrintString ^self methodClass! ! !AIRootContext methodsFor: 'exception-handling' stamp: 'ClementBera 3/4/2013 14:58'! handleSignal: exception ^ exception resumeUnchecked: exception defaultAction! ! !AIRootContext methodsFor: 'testing' stamp: 'CamilloBruni 12/12/2011 14:19'! hasExceptionHandler ^ true! ! !AIRootContext methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 16:40'! isRootContext ^true! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 16:29'! method ^ method! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 11:23'! method: aString method := FakeCompiledMethod new sourceCode: aString! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 15:53'! methodClass ^self class! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 16:43'! outerContext ^ nil! ! !AIRootContext methodsFor: 'printing' stamp: 'ClementBera 3/18/2013 15:57'! printOn: aStream aStream nextPutAll: 'AIRootContext: '; nextPutAll: 'AIRootContext>>DoIt'.! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 15:47'! receiver ^ self! ! !AIRootContext methodsFor: 'continuation' stamp: 'CamilloBruni 12/12/2011 15:56'! resume: aValue "" ^ super resume: aValue! ! !AIRootContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/12/2011 15:32'! returnContext ^ self outerContext! ! !AIRootContext methodsFor: 'accessing' stamp: 'ClementBera 12/11/2012 09:49'! tempNamed: aName put: aValue "This code permits temp to work in root context " ^self temporaries at: aName put: aValue ! ! !AIContext methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 16:39'! = anAIContext (anAIContext class == self class)ifFalse: [^false]. (self closure = anAIContext closure)ifFalse: [^false]. (self temporaries = anAIContext temporaries)ifFalse: [^false]. (self arguments = anAIContext arguments)ifFalse: [^false]. (self outerContext = anAIContext outerContext)ifFalse:[^false]. ^true ! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:35'! arguments ^ arguments! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:35'! arguments: aCollection arguments := aCollection! ! !AIContext methodsFor: 'exception-handling' stamp: 'ClementBEra 3/6/2013 17:54'! cannotReturn: result closure notNil ifTrue: [^self cannotReturn: result to: self home sender]. Smalltalk tools debugger openContext: thisContext label: 'computation has been terminated' contents: nil! ! !AIContext methodsFor: 'exception-handling' stamp: 'CamilloBruni 12/12/2011 14:42'! cannotReturn: result to: homeContext "The receiver tried to return result to homeContext that no longer exists." ^ BlockCannotReturn new result: result; deadHome: homeContext; signal! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! closure ^ closure! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! closure: anObject closure := anObject! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 20:01'! code ^ self closure code! ! !AIContext methodsFor: 'compatibility layer' stamp: 'CamilloBruni 12/8/2011 14:45'! contextTag ^ self! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 1/14/2013 16:43'! createTemp: aName self temporaries at: aName put: nil.! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 14:16'! currentExecutedNode ^ currentExecutedNode! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 14:16'! currentExecutedNode: anObject currentExecutedNode := anObject! ! !AIContext methodsFor: 'debugging' stamp: 'ClementBera 3/5/2013 13:47'! debugPrintString self subclassResponsibility ! ! !AIContext methodsFor: 'continuation' stamp: 'ClementBera 3/18/2013 16:37'! die currentExecutedNode := nil! ! !AIContext methodsFor: 'exception-handling' stamp: 'CamilloBruni 12/9/2011 16:31'! findContextSuchThat: testBlock "Search self and my sender chain for first one that satisfies testBlock. Return nil if none satisfy" | ctxt | ctxt := self. [ctxt isNil] whileFalse: [ (testBlock value: ctxt) ifTrue: [^ ctxt]. ctxt := ctxt outerContext ]. ^ nil! ! !AIContext methodsFor: 'exception-handling' stamp: 'CamilloBruni 12/13/2011 15:07'! findNextHandlerContextStarting "Return the next handler marked context, returning nil if there is none. Search starts with self and proceeds up to nil." ^ self findContextSuchThat: [ :ctxt| ctxt hasExceptionHandler ]! ! !AIContext methodsFor: 'exception-handling' stamp: 'CamilloBruni 12/13/2011 15:10'! handleSignal: exception "Sent to handler (on:do:) contexts only. If my exception class (first arg) handles exception then execute my handle block (second arg), otherwise forward this message to the next handler context. If none left, execute exception's defaultAction (see nil>>handleSignal:)." | result | (self exceptionHandler handles: exception) ifFalse: [ ^ self nextHandlerContext handleSignal: exception]. exception privHandlerContext: self contextTag. "self tempAt: 3 put: false. " "disable self while executing handle block" result := self exceptionHandler handle: exception. self return: result. "return from self if not otherwise directed in handle block" ! ! !AIContext methodsFor: 'testing' stamp: 'CamilloBruni 12/12/2011 14:20'! hasExceptionHandler ^ false! ! !AIContext methodsFor: 'compatibility layer' stamp: 'CamilloBruni 3/6/2013 12:46'! home ^ self homeContext! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/4/2013 10:59'! homeContext self subclassResponsibility! ! !AIContext methodsFor: 'initialize-release' stamp: 'ClementBera 10/22/2012 20:39'! initialize self flag: 'for now the easies solution'.! ! !AIContext methodsFor: 'initialize-release' stamp: 'ClementBera 10/18/2012 13:37'! initializeContext: aContext self outerContext: aContext outerContext asASTInterpreterContext. self arguments: aContext arguments. aContext tempNames do: [:tempName | self temporaries at: tempName put: (aContext tempNamed: tempName)]! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/4/2013 15:22'! inspectorClass ^AIContextInspector! ! !AIContext methodsFor: 'testing' stamp: 'ClementBera 3/18/2013 16:38'! isDead ^currentExecutedNode isNil! ! !AIContext methodsFor: 'testing' stamp: 'ClementBera 1/14/2013 16:40'! isRootContext ^false! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 19:36'! methodClass ^ closure methodClass! ! !AIContext methodsFor: 'exception-handling' stamp: 'CamilloBruni 12/9/2011 16:27'! nextHandlerContext ^ self outerContext findNextHandlerContextStarting! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! outerContext ^ outerContext! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! outerContext: anObject outerContext := anObject! ! !AIContext methodsFor: 'printing' stamp: 'ClementBera 12/7/2012 10:57'! printOn: aStream aStream nextPutAll: 'AIContext: should be instantiated'! ! !AIContext methodsFor: 'continuation' stamp: 'CamilloBruni 12/12/2011 16:07'! resume: value "Unwind thisContext to self and resume with value as result of last send. Execute unwind blocks when unwinding. ASSUMES self is a sender of thisContext" | ctxt unwindBlock | self isDead ifTrue: [self cannotReturn: value to: self]. " ctxt := thisContext. [ ctxt := ctxt findNextUnwindContextUpTo: self. ctxt isNil ] whileFalse: [ (ctxt tempAt: 2) ifNil:[ ctxt tempAt: 2 put: true. unwindBlock := ctxt tempAt: 1. thisContext terminateTo: ctxt. unwindBlock value]. ]." thisContext terminateTo: self value: value. ! ! !AIContext methodsFor: 'continuation' stamp: 'ClementBera 12/7/2012 11:39'! return: value "Unwind thisContext to self and return value to self's sender. Execute any unwind blocks while unwinding. ASSUMES self is a sender of thisContext" "can't be nil will be root but anyway ... there is 2 root the main root and a new root so can't test if root" self outerContext ifNil: [self cannotReturn: value to: self returnContext]. self outerContext resume: value! ! !AIContext methodsFor: 'compatibility layer' stamp: 'ClementBera 3/4/2013 15:53'! selector "Answer the selector of the method that created the receiver." ^self code selector ifNil: [self code defaultSelector].! ! !AIContext methodsFor: 'compatibility layer' stamp: 'ClementBera 3/4/2013 15:51'! sender "to make it compatible with exceptions in Pharo code" ^self homeContext! ! !AIContext methodsFor: 'debugging' stamp: 'ClementBera 3/18/2013 10:28'! stack |context stack limit| stack := OrderedCollection new. context := self. limit := 1. [limit := limit + 1. context isNil or: [limit > 40]] whileFalse: [ stack add: context. context := context homeContext. ]. ^ stack! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/4/2013 10:59'! tempNamed: aName self temporaries at: aName ifPresent: [ :value| ^ value]. self homeContext ifNil: [ (VariableNotDefined signalForVariable: aName context: self) == true ifTrue: [ ^ self tempNamed: aName]]. ^ self homeContext tempNamed: aName.! ! !AIContext methodsFor: 'accessing' stamp: 'ClementBera 3/4/2013 10:59'! tempNamed: aName put: aValue self flag: 'the error signal doesnt work inside the interpreter '. (self temporaries includesKey: aName) ifTrue: [ ^ self temporaries at: aName put: aValue ]. self homeContext ifNil: [ (VariableNotDefined signalForVariable: aName context: self) == true ifTrue: [ ^ self tempNamed: aName put: aValue]]. ^ self homeContext tempNamed: aName put: aValue ! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 18:12'! temporaries ^ temporaries ifNil: [ temporaries := SmallDictionary new]! ! !AIContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/8/2011 15:23'! temporaries: aNameCollection aNameCollection do: [ :aVarName| self temporaries at: aVarName put: nil ].! ! !AIContext methodsFor: 'continuation' stamp: 'CamilloBruni 12/12/2011 16:14'! terminateTo: previousContext value: aReturnValue "Terminate all the Contexts between me and previousContext, if previousContext is on my Context stack. Make previousContext my sender." PrimitiveFailed signal. ! ! !AIMethodContext commentStamp: '' prior: 35418781! I am a specific context for the ASTInterpreter that represents MethodContext in Pharo. Instance Variables receiver: receiver - is the receiver of my method ! !AIMethodContext class methodsFor: 'instance creation' stamp: 'ClementBera 10/18/2012 14:39'! fromVMContext: aMethodContext ^self new initializeContext: aMethodContext; closure: aMethodContext method; receiver: aMethodContext receiver; yourself! ! !AIMethodContext methodsFor: 'testing' stamp: 'ClementBera 10/18/2012 11:31'! = anAIMethodContext (super = anAIMethodContext) ifFalse: [^false]. (self receiver = anAIMethodContext receiver) ifFalse: [^false]. ^true! ! !AIMethodContext methodsFor: 'debugging' stamp: 'ClementBera 3/5/2013 13:48'! debugPrintString ^self code methodClass name, '>>#', self code printString! ! !AIMethodContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/9/2011 20:04'! homeContext ^ self returnContext! ! !AIMethodContext methodsFor: 'accessing' stamp: 'ClementBera 10/19/2012 11:00'! method ^ self closure method! ! !AIMethodContext methodsFor: 'printing' stamp: 'ClementBera 12/7/2012 10:58'! printOn: aStream aStream nextPutAll: 'AIMethodCtxt: '. aStream print: self method ! ! !AIMethodContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! receiver ^ receiver! ! !AIMethodContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 17:33'! receiver: anObject receiver := anObject! ! !AIMethodContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 20:05'! returnContext ^ self outerContext! ! !AIMethodContext methodsFor: 'accessing' stamp: 'CamilloBruni 12/12/2011 15:51'! returnContext: aContext ^ self outerContext: aContext! ! !ASTInterpreter commentStamp: '' prior: 35419008! I interpret AST. I run methods in my method-evalluation protocol, called through acceptMessageNode:receiver: Instance Variables context: currentNode: gotoContext: primitiveFailed: context - is the current context being interpreted currentNode - is the current node being interpreted gotoContext - In the case of non local return or exception it is used to return to the right context after executing the unwinded blocks. primitiveFailed - primitiveFail token ! !ASTInterpreter class methodsFor: 'interpreting' stamp: 'ClementBera 10/19/2012 13:45'! interpretMethod: anASTNode ^ self new resetContext: AIRootContext new; interpretMethod: anASTNode! ! !ASTInterpreter class methodsFor: 'interpreting' stamp: 'ClementBera 4/21/2013 14:30'! interpretVMContext: aContext | interpreter | self flag: #TODO. "not implemented yet" interpreter := self new. interpreter resetContext: aContext asASTInterpreterContext. ^interpreter interpret: aContext currentASTNode. ! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 12/4/2012 17:42'! acceptArgumentNode: aRBArgumentNode ^ self acceptVariableNode: aRBArgumentNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 12/5/2012 10:31'! acceptArrayNode: anArrayNode | array | array := Array new: anArrayNode statements size. anArrayNode statements doWithIndex: [ :statement :i| array at: i put: (self interpret: statement)]. self updateGotoContext. ^ array! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 11/5/2012 11:32'! acceptAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable variableBinding accept: self assign: value. ^ value! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'CamilloBruni 12/9/2011 14:52'! acceptBlockNode: aBlockNode ^ ASTBlockClosure new homeContext: self context; code: aBlockNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 10/19/2012 13:49'! acceptCascadeNode: aCascadeNode | receiver lastResult | receiver := self interpret: aCascadeNode receiver. aCascadeNode messages do: [ :aMessageNode| lastResult := self acceptMessageNode: aMessageNode receiver: receiver. self ifSkip: [ ^ lastResult ]]. ^ lastResult! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'CamilloBruni 10/5/2011 17:38'! acceptLiteralArrayNode: aNode ^ aNode value! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/2/2013 16:52'! acceptLiteralNode: aLiteralNode ^ aLiteralNode value ! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 2/26/2013 09:59'! acceptMessageNode: aMessageNode | receiver | receiver := self interpret: aMessageNode receiver. self ifSkip: [^receiver ]. ^ self acceptMessageNode: aMessageNode receiver: receiver.! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 3/18/2013 14:18'! acceptMessageNode: aMessageNode receiver: receiver | arguments message lookUpClass| context currentExecutedNode: aMessageNode. arguments := (aMessageNode arguments collect: [ :argument| |arg| arg := (self interpret: argument). self ifSkip: [ ^ arg ]. arg ]) asArray. message := Message selector: aMessageNode selector arguments: arguments. lookUpClass := aMessageNode isSuperSend ifFalse: [ self classOf: receiver ] ifTrue: [ self currentMethodClass superclass ]. ^ self send: message to: receiver class: lookUpClass! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 10/19/2012 10:36'! acceptReturnNode: aReturnNode | returnValue | returnValue := self interpret: aReturnNode value. self ifSkip: [ ^ returnValue ]. self assert: gotoContext == false. gotoContext := context returnContext. ^ returnValue! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'CamilloBruni 10/6/2011 15:51'! acceptSelfNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/6/2013 10:31'! acceptSequenceNode: aSequenceNode | lastResult | aSequenceNode statements do: [ :statement| lastResult := self interpret: statement. self ifSkip: [ ^ lastResult ]]. self updateGotoContext. ^ lastResult! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'CamilloBruni 12/5/2011 19:31'! acceptSuperNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 12/4/2012 17:40'! acceptTemporaryNode: aRBTemporaryNode ^ self acceptVariableNode: aRBTemporaryNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'CamilloBruni 12/5/2011 15:14'! acceptThisContextNode: thisContextNode ^ self context! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 12/4/2012 17:41'! acceptVariableNode: aVariableNode "there is still this hack with variable binding to make it work with Opal that I'd like to remove. cf deprecated RBVariableNode>>binding ^variableBinding" ^ aVariableNode variableBinding readWith: self ! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 12/3/2012 09:43'! blockClosureEnsure: aBlockClosure message: aMessage | result ensureBlockReturnValue firstGotoContext | "evaluate the block without arguments" result := self blockClosureValue: aBlockClosure. firstGotoContext := gotoContext. gotoContext := false. "evluate the passed in ensure block" ensureBlockReturnValue := self blockClosureValue: aMessage arguments first. self isExplicitelyReturning ifTrue: [ ^ ensureBlockReturnValue ] ifFalse: [ gotoContext := firstGotoContext ]. ^ result! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 11/21/2012 10:46'! blockClosureOnDo: aBlockClosure message: aMessage | block result | block := aBlockClosure code. self assert: aMessage numArgs = 2. self blockContextFor: aBlockClosure message: aMessage. context exceptionHandler: (ExceptionHandler forMessage: aMessage). result := self interpretBlock: block. self popContext. ^ result! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'CamilloBruni 12/13/2011 15:42'! blockClosureValue: aBlockClosure ^ self blockClosureValue: aBlockClosure message: (Message selector: #value)! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 3/6/2013 16:24'! blockClosureValue: aBlockClosure message: aMessage |newMessage| newMessage := Message selector: #valueWithArguments: arguments: (Array with: aMessage arguments). ^self blockClosureValueWithArguments: aBlockClosure message: newMessage! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 3/18/2013 16:21'! blockClosureValueWithArguments: aBlockClosure message: aMessage | block result arguments| block := aBlockClosure code. arguments := aMessage arguments at: 1. (aBlockClosure numArgs = arguments size) ifFalse: [ ^self reflectiveFailedToken ]. block size = 0 ifTrue: [ ^ nil ]. self blockContextFor: aBlockClosure message: (Message selector: nil arguments: arguments). result := self interpretBlock: block. self isExplicitelyReturning ifTrue: [ self context homeContext isDead ifTrue: [ ^self sendCannotReturn: result from: context]]. self popContext. ^ result! ! !ASTInterpreter methodsFor: 'context' stamp: 'ClementBera 4/2/2013 11:15'! blockContextFor: aBlockClosure message: aMessage | block | block := aBlockClosure code. context := AIBlockContext new homeContext: aBlockClosure homeContext; outerContext: context; closure: aBlockClosure; arguments: aMessage arguments; temporaries: block temporaryNames.! ! !ASTInterpreter methodsFor: 'slots' stamp: 'ClementBera 4/12/2013 13:52'! classOf: anObject ^ anObject class! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'ClementBera 2/28/2013 18:15'! compile: aString | ast | ast := RBExplicitVariableParser parseExpression: aString. ast annotateInClass: ProtoObject. ^ ast! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'CamilloBruni 10/6/2011 15:53'! context ^ context! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 20:14'! context: aContext context := aContext! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 11/21/2012 10:46'! contextTerminateTo: aContext message: aMessage gotoContext := aMessage arguments first. ^ aMessage arguments second ! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'CamilloBruni 12/8/2011 00:23'! currentMethodClass ^ context methodClass! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'ClementBera 10/23/2012 14:10'! currentNode ^currentNode! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'CamilloBruni 12/8/2011 16:02'! currentSelf ^ self context receiver! ! !ASTInterpreter methodsFor: 'method evaluation' stamp: 'ClementBera 3/5/2013 17:32'! hasPrimitiveFailed: result "A primitive that fails doesn't always return ContextPart primitiveFailToken but returns ContextPart primitiveFailTokenFor: errorCode. A possible errorCode is nil, which corresponds to ContextPart primitiveFailToken. Here we loop over the errorCodes to know if the primitive has failed." |errorCodes| (self classOf: result) = ContextPart primitiveFailToken class ifFalse: [ ^ false ]. errorCodes := SmalltalkImage current specialObjectsArray at: 52. errorCodes do: [ :errorCode | result = (ContextPart primitiveFailTokenFor: errorCode) ifTrue: [ ^true ] ]. ^false! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'ClementBera 10/22/2012 19:57'! ifSkip: aReturnBlock gotoContext == false ifTrue: [ ^ self ]. aReturnBlock value.! ! !ASTInterpreter methodsFor: 'initialize-release' stamp: 'ClementBera 10/22/2012 10:57'! initialize super initialize. gotoContext := false.! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'CamilloBruni 12/13/2011 16:16'! interpret: anASTNode currentNode := anASTNode. ^ anASTNode acceptVisitor: self.! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'CamilloBruni 12/13/2011 16:14'! interpretBlock: block ^ self interpret: block body! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'ClementBera 3/18/2013 11:16'! interpretDoIt: ast | result | "set the source of the root context to the doIt code" self context method: ast source. [result := self interpret: ast] on: VariableNotDefined do: [ :e| e context isRootContext ifFalse: [ e pass ] ifTrue: [ e createTemp; resume: true]]. ^ result! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'CamilloBruni 12/13/2011 16:14'! interpretMethod: method ^ self interpret: method body! ! !ASTInterpreter methodsFor: 'method evaluation' stamp: 'ClementBEra 3/6/2013 17:33'! invokeMethod: aClosure on: receiver message: aMessage | result | self assert: aClosure numArgs = aMessage numArgs. self methodContextFor: aClosure receiver: receiver message: aMessage. result := self interpretMethod: aClosure ast. self isExplicitelyReturning ifFalse: [ result := self currentSelf ]. self popContext. ^ result! ! !ASTInterpreter methodsFor: 'method evaluation' stamp: 'ClementBera 4/6/2013 17:23'! invokePrimitiveMethod: aCompiledMethod on: receiver message: aMessage | result | result := receiver tryPrimitive: aCompiledMethod primitive withArgs: aMessage arguments. (self hasPrimitiveFailed: result) ifFalse: [ ^ result]. "primitive failed" ^ self invokeMethod: aCompiledMethod on: receiver message: aMessage! ! !ASTInterpreter methodsFor: 'method evaluation' stamp: 'ClementBEra 3/6/2013 17:26'! invokeReflectiveMethod: aClosure on: receiver message: aMessage | annotation selector result | annotation := aClosure pragmaAt: #reflective:. selector := annotation arguments first. result := self perform: selector withArguments: (Array with: receiver with: aMessage). (self classOf: result) = ByteSymbol ifFalse: [ ^result ]. result = self reflectiveFailedToken ifFalse: [ ^ result ]. "primitive failed" ^self invokeMethod: aClosure on: receiver message: aMessage! ! !ASTInterpreter methodsFor: 'testing' stamp: 'CamilloBruni 12/8/2011 18:27'! isExplicitelyReturning ^ gotoContext ~= false! ! !ASTInterpreter methodsFor: 'message - sending' stamp: 'ClementBera 4/2/2013 16:53'! lookupSelector: selector in: class | currentClass | currentClass := class. [ currentClass isNil ] whileFalse: [ currentClass methodDict at: selector ifPresent: [ :method | ^ method ]. currentClass := currentClass superclass ]. ^ nil! ! !ASTInterpreter methodsFor: 'context' stamp: 'CamilloBruni 12/13/2011 15:03'! methodContextFor: aCompiledMethod receiver: receiver message: aMessage context := AIMethodContext new receiver: receiver; outerContext: context; closure: aCompiledMethod; arguments: aMessage arguments; temporaries: aCompiledMethod code temporaryNames; yourself.! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 4/21/2013 15:08'! object: receiver performMessageInSuperclass: aMessage "Check if the message to perform is valid and if so, execute it" | selector arguments lookupClass message| selector := aMessage arguments first. arguments := aMessage arguments second. lookupClass := aMessage arguments third. selector isSymbol ifFalse: [^self reflectiveFailedToken]. selector numArgs = arguments size ifFalse: [^self reflectiveFailedToken]. (receiver isKindOf: lookupClass) ifFalse: [^self reflectiveFailedToken]. message := Message selector: selector arguments: arguments. ^self send: message to: receiver class: lookupClass ! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 4/21/2013 15:04'! object: receiver performMessageWith: aMessage "transform the perform:[with:with:with:] methods in perform:withArguments: understood by ast-interpreter" | arguments oldArgs newMessage| oldArgs := aMessage arguments. arguments := Array with: oldArgs first with: (Array withAll: (oldArgs copyFrom: 2 to: oldArgs size)). newMessage := Message selector: aMessage selector arguments: arguments. ^ self object: receiver performMessageWithArgs: newMessage ! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 4/21/2013 15:08'! object: receiver performMessageWithArgs: aMessage "transform the perform:withArguments: method in perform:withArguments:inSuperclass: understood by ast-interpreter" | arguments newMessage| arguments := Array new: 3. arguments at: 1 put: aMessage arguments first. "selector" arguments at: 2 put: aMessage arguments second. "arguments" arguments at: 3 put: (self classOf: receiver). "lookup class" newMessage := Message selector: aMessage selector arguments: arguments. ^ self object: receiver performMessageInSuperclass: newMessage ! ! !ASTInterpreter methodsFor: 'context' stamp: 'ClementBera 3/18/2013 16:21'! popContext context die. context := context outerContext. self updateGotoContext.! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 18:23'! readArgumentAt: index named: aName ^ self context arguments at: index! ! !ASTInterpreter methodsFor: 'slots' stamp: 'ClementBera 11/5/2012 11:32'! readArgumentAt: index node: aVariableNode | variableContext | variableContext := self context. [ variableContext code = aVariableNode variableBinding scope node ] whileFalse: [ variableContext := variableContext homeContext. self assert: variableContext isNil not ]. ^ variableContext arguments at: index! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 15:29'! readArgumentNamed: aName ^ self context tempNamed: aName! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 15:22'! readInstVarAt: index named: name ^ self currentSelf instVarAt: index! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 18:46'! readTemporaryAt: index named: name ^ context tempNamed: name! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'ClementBEra 3/6/2013 17:19'! reflectiveFailedToken ^#primitiveFailedASTInterpreterToken! ! !ASTInterpreter methodsFor: 'accessing' stamp: 'CamilloBruni 12/5/2011 20:44'! resetContext: aContext context := aContext. gotoContext := false.! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 3/4/2013 15:04'! rootContextHandleSignal: aRootContext message: aMessage | exception | exception := aMessage arguments first. exception class = Halt ifTrue: [ ^ InterpretationError signalFor: exception ]. "run the normal excpetion handling procedures if there is no Halt" self invokeMethod: (AIRootContext >> #handleSignal:) on: aRootContext message: aMessage! ! !ASTInterpreter methodsFor: 'message - sending' stamp: 'CamilloBruni 10/5/2011 17:24'! send: aMessage to: receiver ^ self send: aMessage to: receiver class: (self classOf: receiver)! ! !ASTInterpreter methodsFor: 'message - sending' stamp: 'CamilloBruni 12/5/2011 19:54'! send: aMessage to: receiver class: class | method | method := self lookupSelector: aMessage selector in: class. method ifNil: [ ^ self sendDoesNotUnderstandFor: aMessage to: receiver ]. ^ method accept: self on: receiver message: aMessage! ! !ASTInterpreter methodsFor: 'message - sending' stamp: 'ClementBera 3/7/2013 09:52'! sendCannotReturn: result from: returnContext | cannotReturn | gotoContext := false. self popContext. cannotReturn := Message selector: #cannotReturn: argument: result. ^ self send: cannotReturn to: returnContext! ! !ASTInterpreter methodsFor: 'message - sending' stamp: 'ClementBEra 3/6/2013 17:45'! sendDoesNotUnderstandFor: aMessage to: receiver | dnu | dnu := Message selector: #doesNotUnderstand: argument: aMessage. ^ self send: dnu to: receiver! ! !ASTInterpreter methodsFor: 'reflective' stamp: 'ClementBera 3/4/2013 15:53'! unhandledErrorDefaultAction: anUnhandledError message: aMessage ^ InterpretationError signalFor: anUnhandledError exception.! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 10/23/2012 13:53'! updateGotoContext gotoContext == context ifTrue: [ gotoContext := false ].! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitArgumentNode: aRBArgumentNode ^ self visitVariableNode: aRBArgumentNode! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitArrayNode: anArrayNode | array | array := Array new: anArrayNode statements size. anArrayNode statements doWithIndex: [ :statement :i| array at: i put: (self interpret: statement)]. self updateGotoContext. ^ array! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 14:00'! visitAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable variableBinding accept: self assign: value. ^ value! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitBlockNode: aBlockNode ^ ASTBlockClosure new homeContext: self context; code: aBlockNode! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitCascadeNode: aCascadeNode | receiver lastResult | receiver := self interpret: aCascadeNode receiver. aCascadeNode messages do: [ :aMessageNode| lastResult := self visitMessageNode: aMessageNode receiver: receiver. self ifSkip: [ ^ lastResult ]]. ^ lastResult! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitLiteralArrayNode: aNode ^ aNode value! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitLiteralNode: aLiteralNode ^ aLiteralNode value ! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitMessageNode: aMessageNode | receiver | receiver := self interpret: aMessageNode receiver. self ifSkip: [^receiver ]. ^ self visitMessageNode: aMessageNode receiver: receiver.! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitMessageNode: aMessageNode receiver: receiver | arguments message lookUpClass| context currentExecutedNode: aMessageNode. arguments := (aMessageNode arguments collect: [ :argument| |arg| arg := (self interpret: argument). self ifSkip: [ ^ arg ]. arg ]) asArray. message := Message selector: aMessageNode selector arguments: arguments. lookUpClass := aMessageNode isSuperSend ifFalse: [ self classOf: receiver ] ifTrue: [ self currentMethodClass superclass ]. ^ self send: message to: receiver class: lookUpClass! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitReturnNode: aReturnNode | returnValue | returnValue := self interpret: aReturnNode value. self ifSkip: [ ^ returnValue ]. self assert: gotoContext == false. gotoContext := context returnContext. ^ returnValue! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitSelfNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitSequenceNode: aSequenceNode | lastResult | aSequenceNode statements do: [ :statement| lastResult := self interpret: statement. self ifSkip: [ ^ lastResult ]]. self updateGotoContext. ^ lastResult! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitSuperNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitTemporaryNode: aRBTemporaryNode ^ self visitVariableNode: aRBTemporaryNode! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitThisContextNode: thisContextNode ^ self context! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/12/2013 13:57'! visitVariableNode: aVariableNode "there is still this hack with variable binding to make it work with Opal that I'd like to remove. cf deprecated RBVariableNode>>binding ^variableBinding" ^ aVariableNode variableBinding readWith: self ! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 15:23'! write: aValue at: index named: name ^ self currentSelf instVarAt: index put: aValue! ! !ASTInterpreter methodsFor: 'slots' stamp: 'CamilloBruni 12/5/2011 18:45'! write: aValue temporaryAt: index named: name ^ context tempNamed: name put: aValue! ! !DoesNotUnderstandCatcher methodsFor: 'as yet unclassified' stamp: 'ClementBera 12/3/2012 14:16'! doesNotUnderstand: aMessage "returns the message caught" ^aMessage! ! !ExceptionHandler commentStamp: '' prior: 35419602! I represent the BlockClosure>>on:do: temporaries in Pharo. Instance Variables block: enabled: exception: block - is the handler block enabled - is false if not active (to avoid running twice an handler block)) exception - is the exceptionClass ! !ExceptionHandler class methodsFor: 'instance-creation' stamp: 'CamilloBruni 12/11/2011 18:46'! forMessage: aMessage ^ self on: aMessage arguments first do: aMessage arguments second! ! !ExceptionHandler class methodsFor: 'instance-creation' stamp: 'CamilloBruni 12/12/2011 14:07'! on: anException do: aBlock ^ self new exception: anException; block: aBlock; yourself! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'CamilloBruni 12/8/2011 15:47'! block ^ block! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'CamilloBruni 12/8/2011 15:48'! block: aBlock block := aBlock! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'CamilloBruni 12/13/2011 15:08'! enabled ^ enabled! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'ClementBera 10/18/2012 14:51'! enabled: aBool enabled := aBool! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'CamilloBruni 12/12/2011 14:10'! exception ^ exception! ! !ExceptionHandler methodsFor: 'accessing' stamp: 'CamilloBruni 12/12/2011 14:09'! exception: anException exception := anException! ! !ExceptionHandler methodsFor: 'exception-handling' stamp: 'ClementBera 12/3/2012 14:02'! handle: anError | value | self flag: 'TODO:do the ensure magic here.. instead of ^ there is resume: that trigger all the unwind block in Pharo I think there should be some gotoContext changes here'. enabled := false. value := self block cull: anError. enabled := true. ^ value! ! !ExceptionHandler methodsFor: 'testing' stamp: 'CamilloBruni 12/13/2011 15:07'! handles: anError ^ self enabled and: [ self exception handles: anError ]! ! !ExceptionHandler methodsFor: 'initialization' stamp: 'CamilloBruni 12/13/2011 15:07'! initialize super initialize. enabled := true.! ! !FakeCompiledMethod commentStamp: '' prior: 35419960! I hold the source code for DoIt. It is needed if you want to debug with ASTDebugger (Smalltalkhub user:'dh83' project:'ast-interpreter') a DoIt method or if you want to look at the stack in the AIContextInspector! !FakeCompiledMethod methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 15:48'! methodClass ^AIRootContext! ! !FakeCompiledMethod methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 15:45'! selector ^#DoIt! ! !FakeCompiledMethod methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 11:23'! sourceCode ^ sourceCode! ! !FakeCompiledMethod methodsFor: 'accessing' stamp: 'ClementBera 3/18/2013 15:43'! sourceCode: aString sourceCode := (self selector, String lf, String tab, aString) asText! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:53' prior: 28625099! perform: aSymbol "Send the unary selector, aSymbol, to the receiver. Fail if the number of arguments expected by the selector is not zero. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array new: 0)! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:53' prior: 28627625! perform: aSymbol with: anObject "Send the selector, aSymbol, to the receiver with anObject as its argument. Fail if the number of arguments expected by the selector is not one. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: anObject)! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:53' prior: 28628024! perform: aSymbol with: firstObject with: secondObject "Send the selector, aSymbol, to the receiver with the given arguments. Fail if the number of arguments expected by the selector is not two. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: firstObject with: secondObject)! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:53' prior: 28628462! perform: aSymbol with: firstObject with: secondObject with: thirdObject "Send the selector, aSymbol, to the receiver with the given arguments. Fail if the number of arguments expected by the selector is not three. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: firstObject with: secondObject with: thirdObject)! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:49' prior: 28625758! perform: selector withArguments: argArray "Send the selector, aSymbol, to the receiver with arguments in argArray. Fail if the number of arguments expected by the selector does not match the size of argArray. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: selector withArguments: argArray inSuperclass: self class! ! !Object methodsFor: 'message handling' stamp: 'ClementBera 4/21/2013 14:41' prior: 28626203! perform: selector withArguments: argArray inSuperclass: lookupClass "NOTE: This is just like perform:withArguments:, except that the message lookup process begins, not with the receivers's class, but with the supplied superclass instead. It will fail if lookupClass cannot be found among the receiver's superclasses. Primitive. Essential. See Object documentation whatIsAPrimitive." (selector isSymbol) ifFalse: [^ self error: 'selector argument must be a Symbol']. (selector numArgs = argArray size) ifFalse: [^ self error: 'incorrect number of arguments']. (self class == lookupClass or: [self class inheritsFrom: lookupClass]) ifFalse: [^ self error: 'lookupClass is not in my inheritance chain']. self primitiveFailed! ! !ContextPart methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/22/2012 16:50'! concretePC ^ self method abstractPCForConcretePC: (self method pcPreviousTo: self pc)! ! !ContextPart methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/22/2012 16:47'! currentASTNode ^ self method bestNodeForPC: self concretePC! ! !ContextPart methodsFor: '*AST-Interpreter-Extension' stamp: 'ClementBera 10/22/2012 09:15'! currentText ^ self method sourceCodeForPC: self pc! ! !ContextPart methodsFor: '*AST-Interpreter-Extension' stamp: 'CamilloBruni 12/12/2011 14:33'! returnContext ^ self methodReturnContext! ! "AST-Interpreter-Core"! "AST-Interpreter-Extension"! "AST-Interpreter-Semantic-Binding"! "AST-Interpreter-Test"! "Kernel"! "UIManager"! ----End fileIn----! ----QUIT----an Array(22 April 2013 10:24:14 am) Pharo.image priorSource: 1850787! ----STARTUP----an Array(22 April 2013 10:30:43 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 April 2013 10:30:43 am) Pharo-30050.image priorSource: 1960070! ----STARTUP----an Array(22 April 2013 11:10:56 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/22/2013 11:08' prior: 35405521! commentForCurrentUpdate ^ '10333 Update Opal in Image to latest version https://pharo.fogbugz.com/f/cases/10333/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/22/2013 11:08'! script149 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.132.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1367.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1395.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.196.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.790.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.99.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.39.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.122.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-EstebanLorenzano.56.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/22/2013 11:09'! update30051 "self new update30051" self withUpdateLog: '10333 Update Opal in Image to latest version https://pharo.fogbugz.com/f/cases/10333/'. self loadTogether: self script149 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCCompilerNotifyingTest commentStamp: '' prior: 0! A CompilerNotifyingTest is a TestCase for checking that Compiler/Parser notifications are inserted at the right place in a TextEditor. Instance Variables expectedErrorPositions: expectedErrors: failure: morph: text: errorPositions - the position where error text should be inserted for each chunk of text evaluated errors - the error text that should be inserted on evaluation of each chunk of text evaluated failure - an object returned in case of evaluation error and whose identity can be uniquely recognized as a failure morph - the Morph holding the text text - the string containing all the chunks to be evaluated (separated by %) and the expected error messages (`enclosed in back quotes`) this text will be stripped of the error messages before being evaluated. ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/17/2013 15:15'! defaultAction | varName | ^super defaultAction ifNil: [ varName := variableNode name asSymbol. Undeclared at: varName put: nil. OCLiteralVariable new assoc: (Undeclared associationAt: varName); scope: 'scope'; yourself]! ! !OCCompilerNotifyingTest commentStamp: '' prior: 35525010! A CompilerNotifyingTest is a TestCase for checking that Compiler/Parser notifications are inserted at the right place in a TextEditor. Instance Variables expectedErrorPositions: expectedErrors: failure: morph: text: errorPositions - the position where error text should be inserted for each chunk of text evaluated errors - the error text that should be inserted on evaluation of each chunk of text evaluated failure - an object returned in case of evaluation error and whose identity can be uniquely recognized as a failure morph - the Morph holding the text text - the string containing all the chunks to be evaluated (separated by %) and the expected error messages (`enclosed in back quotes`) this text will be stripped of the error messages before being evaluated. ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 4/16/2013 15:09'! enumerateAllSelections 1 to: self numberOfSelections do: [:n | self assert: (self evaluateSelectionNumber: n) equals: failure. self assert: morph editor selection asString equals: (expectedErrors at: n). self assert: (expectedErrorPositions at: n) equals: morph editor startIndex. morph editor cut].! ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'ClementBera 4/16/2013 14:53'! evaluateSelection | foo | foo := OpalCompiler new evaluate: morph editor selectionAsStream in: nil to: nil notifying: morph editor ifFail: [^failure] logged: false. "1halt." ^ foo ! ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'ClementBera 4/16/2013 13:21'! evaluateSelectionNumber: n | i start stop | i := start := 1. [stop := morph text indexOf: $% startingAt: start + 1 ifAbsent: morph text size + 1. i = n] whileFalse: [i := i + 1. start := stop + 1]. morph editor selectFrom: start to: stop - 1. ^self evaluateSelection ! ! !OCCompilerNotifyingTest methodsFor: 'accessing' stamp: 'ClementBera 4/16/2013 10:39'! expectedFailures "For these tests, the Compiler does not insert the notification where it would be most informative." ^#( "Notifying before the literal (which can be a message send) would be more informative" testTooManyLiterals "Notifying right before the 16th argument would be informative" testTooManyArguments "Notifying before the extraneous argument in the right block woul be useful" testifTrueBlockWithArgument testCaseOtherwiseBlockWithArgument "Pharo still accept the non standard unichar symbol syntax #) while every other Smalltalk would require quotes #')'" testInvalidLiteralCharacter )! ! !OCCompilerNotifyingTest methodsFor: 'initialize-release' stamp: 'ClementBera 4/16/2013 10:38'! initializeTextWithoutError "Remove the errors from the text to be compiled and answer the text without errors. Meanwhile, collect the expected error messages and their expected position." | input output errorStream positionStream | input := text readStream. output := (String new: text size) writeStream. errorStream := (Array new: self numberOfSelections) writeStream. positionStream := (Array new: self numberOfSelections) writeStream. [output nextPutAll: (input upTo: $`). input atEnd] whileFalse: [positionStream nextPut: output position + 1. errorStream nextPut: (input upTo: $`)]. expectedErrors := errorStream contents. expectedErrorPositions := positionStream contents. ^output contents! ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'ClementBera 4/16/2013 10:38'! numberOfSelections ^(text occurrencesOf: $%) + 1! ! !OCCompilerNotifyingTest methodsFor: 'initialize-release' stamp: 'ClementBera 4/16/2013 10:37'! setUp failure := Object new.! ! !OCCompilerNotifyingTest methodsFor: 'initialize-release' stamp: 'ClementBera 4/16/2013 10:38'! setUpForErrorsIn: aTextWithErrorsEnclosedInBackQuote "Extract the expectedErrors, the expectedErrorPositions and set up a TextMorph containing the text without errors. each section separated by % in aTextWithErrorsEnclosedInBackQuote will be evaluated separately. The expected error message should lie in aTextWithErrorsEnclosedInBackQuote at the expected position, and enclosed in back quotes." text := aTextWithErrorsEnclosedInBackQuote. morph := MockSourceEditor new contents: self initializeTextWithoutError asText.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:36'! testATempShadowingAnotherTemp self flag: 'I dont understand why it does not work. It seems to returns the correct thing only after the second evaluation. I put a halt in evaluateSelection to debug. You may need to change the last x by x := x + 2 not to raise the unitialized error in Opal which was not raised in the old compiler'. "self setUpForErrorsIn: '| x | x := 1. ^[ | ` Name is already defined ->`x | x ]'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 16:07'! testAssignmentOfSelf self setUpForErrorsIn: '` Cannot store into ->`self := 1. ^self'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 13:49'! testCascadeInASuperSend self flag: 'Opal answers nil instead of raising / catching an error'. "self setUpForErrorsIn: 'super yourself` Cascading not expected ->`; yourself'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing-block arguments' stamp: 'ClementBera 4/16/2013 13:39'! testCaseOtherwiseBlockWithArgument self setUpForErrorsIn: 'nil caseOf: { [nil] -> [1] } otherwise: [:x` <- otherwise arg of caseOf:otherwise: has too many arguments ->` | 2 ]. ^nil '. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 13:41'! testDigitTooLargeForARadix self flag: 'Opal has the correct behavior but the error is not caught' "self setUpForErrorsIn: '2r` a digit between 0 and 1 expected ->`3'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 13:41'! testEmptyCaseStatement self flag: 'Opal has the correct behavior but the error is not caught' "self setUpForErrorsIn: '^ nil caseOf: { ` At least one case required ->`} '. self enumerateAllSelections."! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:22'! testExpectedExpressionInBraceArray self setUpForErrorsIn: '{ 1. 2 ` End of statement list encounted ->`3 }'. self enumerateAllSelections. self setUpForErrorsIn: '{ 1. 2. ` Variable or expression expected ->`| x | x}'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:15'! testExtraneousStatementAfterAReturnInABlock self setUpForErrorsIn: '[ ^1 ` End of statement list encounted ->`2]'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:26'! testInvalidExternalFunctionDeclaration "Not implemented yet. #externalFunctionDeclaration skipped, cannot be evaluated"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 11:16'! testInvalidLiteralCharacter self setUpForErrorsIn: '^ #yourself , #` Invalid literal character ->`) , #end'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:26'! testInvalidPattern "Not implemented yet. #pattern:inContext: skipped, cannot be evaluated"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:26'! testInvalidPragma "Not implemented yet. #pragmaLiteral: #pragmaSequence #pragmaStatement #pragmaPrimitives skipped, cannot be evaluated"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:26'! testInvalidPrimitive "Not implemented yet. ##primitive:error: #primitive:module:error: skipped, cannot be evaluated"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 13:47'! testInvalidRadix self flag: 'Opal has the correct behavior but the error is not caught' "self setUpForErrorsIn: '1` an integer greater than 1 as valid radix expected ->`r0'. self enumerateAllSelections."! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 13:50'! testLiteralCharacterMissing self flag: 'Opal answers nil instead of raising / catching an error'. "self setUpForErrorsIn: '$` A Character was expected ->`'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:21'! testMissingArgumentAfterABinaryMessage self setUpForErrorsIn: '1 +` Variable or expression expected ->`'. self enumerateAllSelections. self setUpForErrorsIn: '1 + ` Variable or expression expected ->`* 2 + 3'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:22'! testMissingArgumentAfterAMessageKey self setUpForErrorsIn: '1 to: ` Variable or expression expected ->`:='. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:17'! testMissingBlockArgumentName self setUpForErrorsIn: '[ :x : ` Variable name expected ->`1]'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:22'! testMissingExpression self setUpForErrorsIn: '| x | x := ` Variable or expression expected ->'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:23'! testMissingExpressionAfterAReturn self setUpForErrorsIn: '^ ` Variable or expression expected ->`. 1 + 2'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:24'! testMissingMessageAfterACascade self setUpForErrorsIn: 'nil yourself; ` Message expected ->`^ 2'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:25'! testMissingPeriodSeparatorBetweenStatements self setUpForErrorsIn: '1 + 2 ` End of statement list encounted ->`^nil'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:25'! testMissingSeparatorBetweenBlockArgumentAndStatements self setUpForErrorsIn: '[ :x ` ''|'' expected ->`x + 1 ]'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:07'! testTempDoubledDefined self flag: 'Opal answers 1 and does not raise / catch an error. to fix'. "self setUpForErrorsIn: '| x ` Name is already defined ->`x | x := 1. ^x'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:27'! testTooLargeAnIntegerInALiteralByteArray self setUpForErrorsIn: '#[ 1 2 ` Expecting 8-bit integer ->`256 4 5]'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'ClementBera 4/16/2013 11:18'! testTooManyArguments self setUpForErrorsIn: '^[:x1 :x2 :x3 :x4 :x5 :x6 :x7 :x8 :x9 :x10 :x11 :x12 :x13 :x14 :x15 ` Too many arguments ->`:x16 :x17 | ]'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'ClementBera 4/16/2013 11:18'! testTooManyLiterals self setUpForErrorsIn: '{#(1). #(2). #(3). #(4). #(5). #(6). #(7). #(8). #(9). #(10). #(11). #(12). #(13). #(14). #(15). #(16). #(17). #(18). #(19). #(20). #(21). #(22). #(23). #(24). #(25). #(26). #(27). #(28). #(29). #(30). #(31). #(32). #(33). #(34). #(35). #(36). #(37). #(38). #(39). #(40). #(41). #(42). #(43). #(44). #(45). #(46). #(47). #(48). #(49). #(50). #(51). #(52). #(53). #(54). #(55). #(56). #(57). #(58). #(59). #(60). #(61). #(62). #(63). #(64). #(65). #(66). #(67). #(68). #(69). #(70). #(71). #(72). #(73). #(74). #(75). #(76). #(77). #(78). #(79). #(80). #(81). #(82). #(83). #(84). #(85). #(86). #(87). #(88). #(89). #(90). #(91). #(92). #(93). #(94). #(95). #(96). #(97). #(98). #(99). #(100). #(101). #(102). #(103). #(104). #(105). #(106). #(107). #(108). #(109). #(110). #(111). #(112). #(113). #(114). #(115). #(116). #(117). #(118). #(119). #(120). #(121). #(122). #(123). #(124). #(125). #(126). #(127). #(128). #(129). #(130). #(131). #(132). #(133). #(134). #(135). #(136). #(137). #(138). #(139). #(140). #(141). #(142). #(143). #(144). #(145). #(146). #(147). #(148). #(149). #(150). #(151). #(152). #(153). #(154). #(155). #(156). #(157). #(158). #(159). #(160). #(161). #(162). #(163). #(164). #(165). #(166). #(167). #(168). #(169). #(170). #(171). #(172). #(173). #(174). #(175). #(176). #(177). #(178). #(179). #(180). #(181). #(182). #(183). #(184). #(185). #(186). #(187). #(188). #(189). #(190). #(191). #(192). #(193). #(194). #(195). #(196). #(197). #(198). #(199). #(200). #(201). #(202). #(203). #(204). #(205). #(206). #(207). #(208). #(209). #(210). #(211). #(212). #(213). #(214). #(215). #(216). #(217). #(218). #(219). #(220). #(221). #(222). #(223). #(224). #(225). #(226). #(227). #(228). #(229). #(230). #(231). #(232). #(233). #(234). #(235). #(236). #(237). #(238). #(239). #(240). #(241). #(242). #(243). #(244). #(245). #(246). #(247). #(248). #(249). #(250). #(251). #(252). #(253). #(254). #(255). #(256). `More than 256 literals referenced. You must split or otherwise simplify this method. The 257th literal is: ->`#(257)}'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'ClementBera 4/16/2013 11:31'! testTooManyTemporaries self setUpForErrorsIn: '| a1 a2 a3 a4 a5 a6 a7 a8 a9 b1 b2 b3 b4 b5 b6 b7 b8 b9 c1 c2 c3 c4 c5 c6 c7 c8 c9 d1 d2 d3 d4 d5 d6 d7 d8 d9 e1 e2 e3 e4 e5 e6 e7 e8 e9 f1 f2 f3 f4 f5 f6 f7 f8 f9 g1 g2 g3 g4 g5 g6 g7 g8 g9 | a1 := a2 := a3 := a4 := a5 := a6 := a7 := a8 := a9 := b1 := b2 := b3 := b4 := b5 := b6 := b7 := b8 := b9 := c1 := c2 := c3 := c4 := c5 := c6 := c7 := c8 := c9 := d1 := d2 := d3 := d4 := d5 := d6 := d7 := d8 := d9 := e1 := e2 := e3 := e4 := e5 := e6 := e7 := e8 := e9 := f1 := f2 := f3 := f4 := f5 := f6 := f7 := f8 := f9 := g1 := g2 := g3 := g4 := g5 := g6 := g7 := g8 := g9 := 1'. self should: [ self enumerateAllSelections ] raise: Error. [ self enumerateAllSelections ] on: Error do: [ :ex | self assert: ex messageText equals: 'Cannot compile -- stack including temps is too deep' ]! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:28'! testUnmatchedBlockBracket self setUpForErrorsIn: 'nil yourself. [` '']'' expected ->`'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:28'! testUnmatchedBraceArray self setUpForErrorsIn: '{ 1. 2` expected } ->`'. self enumerateAllSelections. self setUpForErrorsIn: '{ 1. 2 ` expected } ->`'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:28'! testUnmatchedByteArrayBracket self setUpForErrorsIn: '#[ 1 2 ` '']'' expected ->`'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:21'! testUnmatchedCommentQuote self flag: 'Opal has the correct behavior but the error is not caught'. "I put that in a block because was not able to comment it" [ self setUpForErrorsIn: '1+2 ` Unmatched comment quote ->`"unfinished comment'. self enumerateAllSelections ]! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:29'! testUnmatchedExpressionParenthesis self setUpForErrorsIn: '1+(2 ` '')'' expected ->`. '. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:29'! testUnmatchedLiteralParenthesis self setUpForErrorsIn: '#( 1 2` '')'' expected ->`'. self enumerateAllSelections. self setUpForErrorsIn: '#( 1 2 ` '')'' expected ->`'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:29'! testUnmatchedLocalTempDeclaration self setUpForErrorsIn: '| x y ` ''|'' expected ->`'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:29'! testUnmatchedLocalTempDeclarationInABlock self setUpForErrorsIn: '[:z | | x y ` ''|'' expected ->`]'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'ClementBera 4/16/2013 14:25'! testUnmatchedStringQuote self flag: 'Opal has the correct behavior but the error is not caught'. "self setUpForErrorsIn: '^nil printString , ` Unmatched string quote ->`''unfinished string'. self enumerateAllSelections"! ! !OCCompilerNotifyingTest methodsFor: 'testing-block arguments' stamp: 'ClementBera 4/16/2013 11:33'! testifTrueBlockWithArgument self setUpForErrorsIn: 'true ifTrue: [:x` <- argument of ifTrue: has too many arguments ->` | 1 + 1 ]'. self enumerateAllSelections. self setUpForErrorsIn: 'true ifTrue: [:x` <- argument of ifTrue: has too many arguments ->` :y | 1 + 1 ]'. self enumerateAllSelections.! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 4/19/2013 13:00'! testThisContextSourceNode self assert: (thisContext sourceNode isKindOf: RBMethodNode). self assert: ([thisContext sourceNode] value isKindOf: RBBlockNode). self assert: ([true ifTrue: [thisContext sourceNode]]value isKindOf: RBBlockNode). ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/20/2013 10:05' prior: 34950564! format: textOrStream in: aClass notifying: aRequestor "Compile a parse tree from the argument, textOrStream. Answer a string containing the original code, formatted nicely. If aBoolean is true, then decorate the resulting text with color and hypertext actions" | aNode | class := aClass. requestor := aRequestor. aNode := self translate: textOrStream noPattern: false ifFail: nil. ^ aNode formattedCode.! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/20/2013 09:57' prior: 34951645! from: textOrStream class: aClass context: aContext notifying: req sourceStream := textOrStream readStream. class := aClass. context := aContext. requestor := req! ! !OpalCompiler methodsFor: 'error handling' stamp: 'MarcusDenker 4/22/2013 10:47' prior: 34951991! interactive ^ UIManager default interactiveParserFor: requestor! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/22/2013 10:55' prior: 34955664! translate: aStream noPattern: noPattern ifFail: failBlock | aMethodNode | self flag: #FIXME. "Needs to be cleaned up" [ aMethodNode := self parse: aStream noPattern: noPattern] on: SyntaxErrorNotification, OCBackendError do: [:ex | requestor ifNotNil: [ requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ]. ^failBlock value]. ^[aMethodNode doSemanticAnalysisIn: class interactive: self interactive notifying: requestor] on: OCSemanticError do: [ :ex | ex defaultAction. ^failBlock value ] ! ! !BlockClosure methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/19/2013 12:45'! sourceNode ^ self asContext sourceNode! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/17/2013 16:56'! methodOrBlockNode ^self.! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/17/2013 14:59'! visitLiteralNode: aLiteralNode "when visiting a literal for effect, we could push it and then pop it, but we do nothing"! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/17/2013 14:56'! visitVariableNode: aVariableNode "when visiting a variable for effect, we could push it and then pop it, but we do nothing"! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/17/2013 16:55'! methodOrBlockNode ^parent isNil ifTrue: [nil] ifFalse: [parent methodOrBlockNode]! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/19/2013 12:54'! printAsIfCompiledOn: aStream aStream nextPutAll: self formattedCode! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/17/2013 16:56'! scope ^self methodOrBlockNode scope! ! !IRMethod methodsFor: 'debugging' stamp: 'MarcusDenker 4/18/2013 10:24' prior: 34882444! instructionForPC: aPC 0 to: -3 by: -1 do: [ :off | (self firstInstructionMatching: [:ir | ir bytecodeOffset = (aPC - off) ]) ifNotNil: [:it |^it]] ! ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 11/15/2012 16:30' prior: 34747368! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVar: name. var ifNotNil: [ (var scope ~= scope and: [ scope isOptimizedBlockScope not ]) ifTrue: [ "Create new var that shadows outer one" self variable: aVariableNode shadows: var. var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode ocBinding: var. ^ var! ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 4/16/2013 15:57' prior: 34748278! lookupVariableForRead: aVariableNode | var | var := scope lookupVar: aVariableNode name. var ifNil: [^var]. (var isTemp and: [var scope outerNotOptimizedScope ~= scope outerNotOptimizedScope] ) "only escaping when they will end up in different closures" ifTrue: [var markEscapingRead]. ^var! ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 4/16/2013 15:58' prior: 34748663! lookupVariableForWrite: aVariableNode | var | var := scope lookupVar: aVariableNode name. var ifNil: [^var]. var isSpecialVariable ifTrue: [ self storeIntoSpecialVariable: aVariableNode ]. var isTemp ifTrue: [ (var scope outerNotOptimizedScope ~= scope outerNotOptimizedScope) "only escaping when they will end up in different closures" ifTrue: [ var markEscapingWrite]]. ^var! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 4/16/2013 16:06'! storeIntoSpecialVariable: variableNode ^ OCSemanticError new variableNode: variableNode; requestor: requestor; messageText: 'Cannot store into ->'; signal! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/16/2013 15:57' prior: 34750842! visitAssignmentNode: anAssignmentNode | var | self visitNode: anAssignmentNode value. var := (self lookupVariableForWrite: anAssignmentNode variable) ifNil: [self undeclaredVariable: anAssignmentNode variable]. var markWrite. anAssignmentNode variable ocBinding: var. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34751222! visitBlockNode: aBlockNode aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. blockcounter := blockcounter + 1. scope := scope newBlockScope: blockcounter. aBlockNode scope: scope. scope node: aBlockNode. aBlockNode arguments do: [:node | (self declareVariableNode: node) markArg]. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/18/2013 15:32' prior: 34751694! visitInlinedBlockNode: aBlockNode blockcounter := blockcounter + 1. scope := scope newOptimizedBlockScope: blockcounter. aBlockNode isInlinedLoop ifTrue: [scope markInlinedLoop]. aBlockNode scope: scope. scope node: aBlockNode. aBlockNode arguments do: [:node | (self declareVariableNode: node ) markArg.]. self visitNode: aBlockNode body. scope := scope popScope..! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34752143! visitMessageNode: aMessageNode | selectorString | (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]. "this should be moved to the parser" selectorString := (String streamContents: [ :str | aMessageNode selectorParts do: [ :each | str nextPutAll: each value ]]). (Symbol findInterned: selectorString) ifNil: [self unknownSelector: aMessageNode]! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:11' prior: 34752719! visitMethodNode: aMethodNode scope := scope newMethodScope. aMethodNode scope: scope. scope node: aMethodNode. aMethodNode arguments do: [:node | (self declareVariableNode: node) markArg]. aMethodNode pragmas do: [:each | self visitNode: each]. self visitNode: aMethodNode body. scope outerScope outerScope ifNotNil: [:classScope | classScope classEncoding needsLongForm ifTrue: [ aMethodNode propertyAt: #needsLongForm put: true]]. scope := scope outerScope. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:11' prior: 34753295! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [:node | self declareVariableNode: node]. aSequenceNode parent isMethod ifTrue: [ (aSequenceNode parent pragmas detect: [:pragma | pragma isPrimitiveError] ifNone: [nil]) ifNotNil: [:pragma | self declareVariableNode: (RBVariableNode named: pragma arguments last value asString)]]. aSequenceNode statements do: [:each | self visitNode: each]. aSequenceNode temporaries do: [:node | node ocBinding isUnused ifTrue: [self unusedVariable: node]]. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 4/16/2013 15:57' prior: 34753915! visitVariableNode: aVariableNode | var | var := (self lookupVariableForRead: aVariableNode) ifNil: [(self undeclaredVariable: aVariableNode)]. "written variables in loops need special care... needs to be checked" (var isTemp and: [var isEscaping and: [scope outerScope isInsideOptimizedLoop]]) ifTrue: [ var isWrite ifTrue: [var markEscapingWrite]. var isRead ifTrue: [var markEscapingRead]]. aVariableNode ocBinding: var. var isUninitialized ifTrue: [self uninitializedVariable: aVariableNode].! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/17/2013 17:04' prior: 34868897! goto: seqNum self doPending. gen goto: seqNum. gen mapBytesTo: currentInstr. ! ! !IRTranslator methodsFor: 'instructions' stamp: 'MarcusDenker 4/17/2013 17:03' prior: 34869021! if: bool goto: seqNum1 otherwise: seqNum2 self doPending. gen if: bool goto: seqNum1 otherwise: seqNum2. gen mapBytesTo: currentInstr. ! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/19/2013 12:52'! decompileString ^self formattedCode ! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/17/2013 16:56'! methodOrBlockNode ^self.! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/19/2013 08:32'! sourceNodeForPC: anInteger ^(self ir instructionForPC: anInteger) sourceNode! ! !OCSpecialVariable methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:55'! isSpecialVariable ^true! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 4/22/2013 10:46' prior: 34957147! interactive ^ UIManager default interactiveParserFor: requestor! ! !CompilerNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 4/22/2013 11:08' prior: 19940216! evaluateSelection ^Compiler new evaluate: morph editor selectionAsStream in: nil to: nil notifying: morph editor ifFail: [^failure] logged: false ! ! !OCTempVariable methodsFor: 'debugging' stamp: 'MarcusDenker 4/18/2013 15:53' prior: 34924848! indexFromIR ^scope outerNotOptimizedScope node irInstruction indexForVarNamed: name! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/19/2013 14:14' prior: 34933755! decompile: selector in: aClass method: aMethod "needs to be simpler" | source | self flag: #FIXME. ^ (source := aMethod getSourceFromFile) ifNil: [Decompiler new decompile: selector in: aClass method: aMethod ] ifNotNil: [aMethod parserClass new parse: source class: aMethod methodClass]! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/19/2013 12:46' prior: 34934318! decompileBlock: aBlock ^ aBlock sourceNode ! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'MarcusDenker 4/17/2013 15:02'! testIfNotNil1ArgWithStatement self assert: (5 ifNotNil: [ :a | 3. a ]) = 5. self assert: (5 ifNotNil: [ :a | a. 3 ]) = 3.! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/19/2013 08:33'! sourceNode ^self ast! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/19/2013 08:34'! sourceNodeForPC: aPC ^self sourceNode sourceNodeForPC: aPC! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/19/2013 08:35'! sourceNode | activePC | activePC := pc - 1. activePC <= self startpc ifTrue: [ activePC := pc ]. ^(method sourceNodeForPC: activePC) methodOrBlockNode ! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 4/16/2013 15:55'! isSpecialVariable ^false! ! !OCParser methodsFor: 'error handling' stamp: 'MarcusDenker 4/22/2013 10:47' prior: 34935804! interactive ^ UIManager default interactiveParserFor: requestor! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 4/19/2013 08:32' prior: 34783211! 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 sourceNodeForPC: pc) debugHighlightRange ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 4/18/2013 15:53' prior: 34784021! tempNamed: name in: aContext "Answer the value of the temp with name in aContext" | scope var | scope := aContext sourceNode scope. var := scope lookupVar: name. ^var readFromContext: aContext scope: scope. ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 4/17/2013 22:48' prior: 34784330! tempNamed: name in: aContext put: aValue "Assign the value of the temp with name in aContext If the value is a copied value we also need to set it along the lexical chain." | scope var | scope := aContext sourceNode scope. var := scope lookupVar: name. ^var writeFromContext: aContext scope: scope value: aValue. ! ! !DebuggerMethodMapOpal methodsFor: 'public' stamp: 'MarcusDenker 4/17/2013 22:49' prior: 34784749! tempNamesForContext: aContext "Answer an Array of all the temp names in scope in aContext starting with the home's first local (the first argument or first temporary if no arguments)." ^ aContext sourceNode scope allTempNames.! ! !OCSemanticError methodsFor: 'exceptiondescription' stamp: 'MarcusDenker 4/22/2013 10:52'! defaultAction ^self notify: messageText at: variableNode start.! ! !OCSemanticError methodsFor: 'error handling' stamp: 'MarcusDenker 4/16/2013 15:48'! notify: aString at: location "Refer to the comment in Object|notify:." ^requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [requestor notify: aString at: location in: requestor text]! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 4/16/2013 15:53'! requestor ^ requestor! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 4/16/2013 15:53'! requestor: anObject requestor := anObject! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 4/16/2013 15:53'! variableNode ^ variableNode! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 4/16/2013 15:53'! variableNode: anObject variableNode := anObject! ! IRMethod removeSelector: #blockInstructionForPC:! RBBlockNode removeSelector: #printAsIfCompiledOn:! OpalCompiler removeSelector: #format:noPattern:ifFail:! DebuggerMethodMapOpal removeSelector: #scopeForContext:! DebuggerMethodMapOpal removeSelector: #pcFor:when:! "CompilerTests"! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(22 April 2013 11:11:05 am) Pharo.image priorSource: 1960272! ----STARTUP----an Array(22 April 2013 11:17:04 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 April 2013 11:17:04 am) Pharo-30051.image priorSource: 2004047! ----STARTUP----an Array(22 April 2013 11:32:56 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/22/2013 11:29' prior: 35515007! commentForCurrentUpdate ^ '6745 Remove EncryptedMultiDisplayScanner and users https://pharo.fogbugz.com/f/cases/6745 10351 remove broken textual inst var renaming code https://pharo.fogbugz.com/f/cases/10351 10344 Fix SpecInterpreter https://pharo.fogbugz.com/f/cases/10344 10355 AlainTreeModel whenSelectedItemsChanged: fixed https://pharo.fogbugz.com/f/cases/10355'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/22/2013 11:29'! script150 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.379.mcz CompilerTests-MarcusDenker.132.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1368.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1399.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.196.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-StephaneDucasse.86.mcz Polymorph-Widgets-MarcusDenker.793.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.101.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.89.mcz Spec-Widgets-MarcusDenker.125.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.72.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-StephaneDucasse.1073.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.464.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/22/2013 11:29'! update30052 "self new update30052" self withUpdateLog: '6745 Remove EncryptedMultiDisplayScanner and users https://pharo.fogbugz.com/f/cases/6745 10351 remove broken textual inst var renaming code https://pharo.fogbugz.com/f/cases/10351 10344 Fix SpecInterpreter https://pharo.fogbugz.com/f/cases/10344 10355 AlainTreeModel whenSelectedItemsChanged: fixed https://pharo.fogbugz.com/f/cases/10355'. self loadTogether: self script150 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 4/21/2013 00:13' prior: 35343735! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := self class private_interpretASpec: newInstance model: spec instance superSpec: specForChildren. ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. result spec addAsSubSpecTo: superSpec. ^ return ] ifFalse: [ ^ result ]! ! !SpecLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 4/21/2013 00:02' prior: 34338045! newRow: aBlock origin: originPoint corner: cornerPoint offsetOrigin: ooPoint offsetCorner: ocPoint | block | block := aBlock. block isBlock ifFalse: [ block := [:r | r add: aBlock ] ]. commands add: (SpecLayoutAddRow block: block layoutFrame: ((originPoint corner: cornerPoint) asLayoutFrame topLeftOffset: ooPoint; bottomRightOffset: ocPoint)).! ! !SpecTreeModel methodsFor: 'overrided' stamp: 'BenjaminVanRyseghem 4/20/2013 16:04' prior: 35380879! doubleClick self model doubleClick! ! !SpecTreeModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01' prior: 35381014! resetRootNodes rootNodes := nil! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01' prior: 35381146! rootNodes ^ rootNodes ifNil: [ rootNodes := super rootNodes ]! ! !MorphTreeMorph methodsFor: '*Spec-Widgets' stamp: 'BenjaminVanRyseghem 4/21/2013 00:14'! initializeColumsFrom: aModel self columns: aModel columns! ! !AlainTreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/21/2013 00:14' prior: 35344258! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/21/2013 15:01' prior: 35351880! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection selectedItems ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col; updateColumnMorphs. ] ]! ! GrafPort removeSelector: #encryptedDisplayScannerFor:foreground:background:ignoreColorChanges:! EncryptedTextMorphForFieldView removeSelector: #drawOn:! Smalltalk globals removeClassNamed: #EncryptedTextMorphForFieldView! EncryptedMultiDisplayScanner removeSelector: #displayLine:offset:leftInRun:! Smalltalk globals removeClassNamed: #EncryptedMultiDisplayScanner! FormCanvas removeSelector: #encryptedParagraph:bounds:color:! ColorMappingCanvas removeSelector: #encryptedParagraph:bounds:color:! ClassDescription removeSelector: #replaceSilently:to:! ClassDescription removeSelector: #renameSilentlyInstVar:to:! ClassDescription removeSelector: #renameInstVar:to:! "Kernel"! "Morphic"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Layout"! "Spec-Widgets"! "Text"! ----End fileIn----! ----QUIT----an Array(22 April 2013 11:33:08 am) Pharo.image priorSource: 2004249! ----STARTUP----an Array(22 April 2013 11:39:12 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 April 2013 11:39:12 am) Pharo-30052.image priorSource: 2018793! ----STARTUP----an Array(22 April 2013 1:23:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(22 April 2013 1:23:59 pm) Pharo.image priorSource: 2018995! ----STARTUP----an Array(22 April 2013 1:29:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 April 2013 1:29:48 pm) Pharo-30052.image priorSource: 2019206! ----STARTUP----an Array(22 April 2013 1:36:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/22/2013 13:19' prior: 35558984! commentForCurrentUpdate ^ '10191 Obsolete behaviors related to Keymapping https://pharo.fogbugz.com/f/cases/10191 10347 Clean up #prettyPrinterClass https://pharo.fogbugz.com/f/cases/10347 10346 Remove W2K Theme https://pharo.fogbugz.com/f/cases/10346'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/22/2013 13:19'! script151 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.382.mcz CompilerTests-MarcusDenker.132.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1369.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.32.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1399.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.196.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.794.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-StephaneDucasse.3.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.101.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.125.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1076.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/22/2013 13:19'! update30053 "self new update30053" self withUpdateLog: '10191 Obsolete behaviors related to Keymapping https://pharo.fogbugz.com/f/cases/10191 10347 Clean up #prettyPrinterClass https://pharo.fogbugz.com/f/cases/10347 10346 Remove W2K Theme https://pharo.fogbugz.com/f/cases/10346'. self loadTogether: self script151 merge: false. NOCController reset. 1 to: 10 do: [ :i | Smalltalk garbageCollect ]. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 19216160! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString fromParseNode: nil class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 51836286! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString fromParseNode: nil class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 21794099! selectedMessage "Answer a copy of the source code for the selected message selector." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. self browseWithPrettyPrint ifTrue: [contents := class compilerClass format: contents in: class notifying: nil]. self showingAnyKindOfDiffs ifTrue: [contents := self methodDiffFor: contents class: self selectedClass selector: self selectedMessageName meta: self metaClassIndicated]. ^contents asText makeSelectorBoldIn: class! ! !DiffMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 20846714! setText "Set the src and dst text in the morphs applying prettyPrint if required." |src dst ctx| src := self srcText. dst := self dstText. ctx := self contextClass. (self prettyPrint and: [ctx notNil]) ifTrue: [src isEmpty ifFalse: [ src := ctx compilerClass format: src in: ctx notifying: nil]. dst isEmpty ifFalse: [ dst := ctx compilerClass format: dst in: ctx notifying: nil]]. self srcMorph setText: src; font: self theme textFont. self dstMorph setText: dst; font: self theme textFont! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 19451981! sourceStringPrettifiedAndDiffed "Answer a copy of the source code for the selected message, transformed by diffing and pretty-printing exigencies" | class selector sourceString | class := self selectedClassOrMetaClass. selector := self selectedMessageName. (class isNil or: [selector isNil]) ifTrue: [^'missing']. sourceString := class ultimateSourceCodeAt: selector ifAbsent: [^'error']. self validateMessageSource: sourceString forSelector: selector. (#(#prettyPrint #prettyDiffs) includes: contentsSymbol) ifTrue: [sourceString := class compilerClass format: sourceString in: class notifying: nil]. self showingAnyKindOfDiffs ifTrue: [sourceString := self diffFromPriorSourceFor: sourceString]. ^sourceString! ! !PrettyTextDiffBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 29951181! split: aString | formatted trimmed | trimmed := aString asString trimBoth. trimmed isEmpty ifTrue: [ ^super split: '' ]. formatted := [ sourceClass compilerClass format: trimmed in: sourceClass notifying: nil] on: Error do: [ :ex | trimmed ]. ^ super split: formatted! ! !ChangeSorterModel methodsFor: 'text' stamp: 'MarcusDenker 4/21/2013 16:49' prior: 18906138! buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff | changeType code | changeType := changeSet atSelector: selector class: class name. changeType == #remove ifTrue: [^ 'Method has been removed (see versions)']. changeType == #addedThenRemoved ifTrue: [^ 'Added then removed (see versions)']. class ifNil: [^ 'Method was added, but cannot be found!!']. (class includesSelector: selector) ifFalse: [^ 'Method was added, but cannot be found!!']. code := class sourceCodeAt: selector. prettyPrint ifTrue: [ code := class compilerClass format: code in: class notifying: nil ]. showDiff ifTrue: [ code := self diffFromPriorSourceFor: code ]. ^ code asText makeSelectorBoldIn: class! ! W2KGroupBorder removeSelector: #width! W2KGroupBorder removeSelector: #frameRectangle:on:! W2KGroupBorder removeSelector: #framePolyline:on:! W2KGroupBorder removeSelector: #framePolygon:on:! W2KGroupBorder removeSelector: #frameOval:on:! W2KGroupBorder removeSelector: #drawLineFrom:to:on:! Smalltalk globals removeClassNamed: #W2KGroupBorder! W2KComplexTabBorder removeSelector: #initialize! W2KComplexTabBorder removeSelector: #frameRectangle:on:! W2KComplexTabBorder removeSelector: #framePolygon:on:! W2KComplexTabBorder removeSelector: #framePolygon2:on:! W2KComplexTabBorder removeSelector: #drawPolyPatchFrom:to:on:usingEnds:! W2KComplexTabBorder removeSelector: #drawLineFrom:to:on:! Smalltalk globals removeClassNamed: #W2KComplexTabBorder! W2KGroupboxMorph removeSelector: #drawOn:! Smalltalk globals removeClassNamed: #W2KGroupboxMorph! TPureBehavior removeSelector: #prettyPrinterClass! PseudoClass removeSelector: #prettyPrinterClass! UIThemeW2K removeSelector: #windowShadowColor! UIThemeW2K removeSelector: #windowPreferredCornerStyleFor:! UIThemeW2K removeSelector: #windowMinimizeDownForm! UIThemeW2K removeSelector: #windowMaximizeDownForm! UIThemeW2K removeSelector: #windowInactiveTitleFillStyleFor:! UIThemeW2K removeSelector: #windowInactiveLabelFillStyleFor:! UIThemeW2K removeSelector: #windowInactiveFillStyleFor:! UIThemeW2K removeSelector: #windowExtentChangedFor:! UIThemeW2K removeSelector: #windowColorFor:! UIThemeW2K removeSelector: #windowColor! UIThemeW2K removeSelector: #windowCloseDownForm! UIThemeW2K removeSelector: #windowActiveTitleFillStyleFor:! UIThemeW2K removeSelector: #windowActiveLabelFillStyleFor:! UIThemeW2K removeSelector: #windowActiveFillStyleFor:! UIThemeW2K removeSelector: #useScrollbarThumbShadow! UIThemeW2K removeSelector: #textFocusBoundsFor:! UIThemeW2K removeSelector: #textEntryCornerStyleIn:! UIThemeW2K removeSelector: #textEditorNormalBorderStyleFor:! UIThemeW2K removeSelector: #tasklistFillStyleFor:! UIThemeW2K removeSelector: #tabSelectorMorphMinExtentFor:! UIThemeW2K removeSelector: #tabSelectorCellInsetFor:! UIThemeW2K removeSelector: #tabPanelBorderStyleFor:! UIThemeW2K removeSelector: #tabLabelSelectedFillStyleFor:! UIThemeW2K removeSelector: #tabLabelSelectedBorderStyleFor:! UIThemeW2K removeSelector: #tabLabelNormalFillStyleFor:! UIThemeW2K removeSelector: #tabLabelNormalBorderStyleFor:! UIThemeW2K removeSelector: #tabGroupCornerStyleIn:! UIThemeW2K removeSelector: #subgroupColorFrom:! UIThemeW2K removeSelector: #setSystemProgressMorphDefaultParameters:! UIThemeW2K removeSelector: #selectionColor! UIThemeW2K removeSelector: #scrollbarThickness! UIThemeW2K removeSelector: #scrollbarPressedButtonBorderStyleFor:! UIThemeW2K removeSelector: #scrollbarNormalThumbBorderStyleFor:! UIThemeW2K removeSelector: #scrollbarNormalFillStyleFor:! UIThemeW2K removeSelector: #scrollbarMinimumThumbThickness! UIThemeW2K removeSelector: #scrollbarColorFor:! UIThemeW2K removeSelector: #scrollBarButtonArrowVertices:! UIThemeW2K removeSelector: #resizerGripNormalFillStyleFor:! UIThemeW2K removeSelector: #radioButtonNormalBorderStyleFor:! UIThemeW2K removeSelector: #radioButtonDisabledBorderStyleFor:! UIThemeW2K removeSelector: #progressBarProgressColorFor:! UIThemeW2K removeSelector: #progressBarFillStyleFor:! UIThemeW2K removeSelector: #progressBarColorFor:! UIThemeW2K removeSelector: #progressBarBorderStyleFor:! UIThemeW2K removeSelector: #plainGroupPanelBorderStyleFor:! UIThemeW2K removeSelector: #paneColorFor:! UIThemeW2K removeSelector: #paneColor! UIThemeW2K removeSelector: #newWindowMinimizeForm! UIThemeW2K removeSelector: #newWindowMinimizeDownForm! UIThemeW2K removeSelector: #newWindowMaximizeForm! UIThemeW2K removeSelector: #newWindowMaximizeDownForm! UIThemeW2K removeSelector: #newWindowCloseForm! UIThemeW2K removeSelector: #newWindowCloseDownForm! UIThemeW2K removeSelector: #newTreeIn:for:list:selected:changeSelected:! UIThemeW2K removeSelector: #newTextEditorIn:for:getText:setText:getEnabled:! UIThemeW2K removeSelector: #newPluggableDialogWindowIn:title:for:! UIThemeW2K removeSelector: #newPanelIn:! UIThemeW2K removeSelector: #newMorphListIn:for:list:getSelected:setSelected:getEnabled:help:! UIThemeW2K removeSelector: #newMorphDropListIn:for:list:getSelected:setSelected:getEnabled:useIndex:help:! UIThemeW2K removeSelector: #newListIn:for:list:selected:changeSelected:getEnabled:help:! UIThemeW2K removeSelector: #newLabelIn:for:label:getEnabled:! UIThemeW2K removeSelector: #newGroupboxIn:label:! UIThemeW2K removeSelector: #newGroupboxIn:! UIThemeW2K removeSelector: #newDropListIn:for:list:getSelected:setSelected:getEnabled:useIndex:help:! UIThemeW2K removeSelector: #newDropListDownArrowForm! UIThemeW2K removeSelector: #newCloseControlIn:for:action:help:! UIThemeW2K removeSelector: #menuTitleColorFor:! UIThemeW2K removeSelector: #menuTitleColor! UIThemeW2K removeSelector: #menuItemSelectedFillStyleFor:! UIThemeW2K removeSelector: #menuColorFor:! UIThemeW2K removeSelector: #menuColor! UIThemeW2K removeSelector: #listNormalBorderStyleFor:! UIThemeW2K removeSelector: #listFocusBoundsFor:! UIThemeW2K removeSelector: #initializeLabelAreaFor:! UIThemeW2K removeSelector: #initializeForms! UIThemeW2K removeSelector: #expanderTitleControlButtonWidth! UIThemeW2K removeSelector: #dropListNormalListBorderStyleFor:! UIThemeW2K removeSelector: #dropListNormalBorderStyleFor:! UIThemeW2K removeSelector: #dropListDownArrowForm! UIThemeW2K removeSelector: #dropListControlButtonWidth! UIThemeW2K removeSelector: #dropListButtonLabelFor:! UIThemeW2K removeSelector: #drawTabGroupFinishingFor:on:! UIThemeW2K removeSelector: #disabledItemStyle! UIThemeW2K removeSelector: #dialogWindowPreferredCornerStyleFor:! UIThemeW2K removeSelector: #dialogWindowInactiveFillStyleFor:! UIThemeW2K removeSelector: #dialogWindowActiveFillStyleFor:! UIThemeW2K removeSelector: #createExpandBoxFor:! UIThemeW2K removeSelector: #createCollapseBoxFor:! UIThemeW2K removeSelector: #createCloseBoxFor:! UIThemeW2K removeSelector: #configureWindowLabelAreaFrameFor:! UIThemeW2K removeSelector: #configureWindowLabelAreaFor:! UIThemeW2K removeSelector: #configureWindowBorderFor:! UIThemeW2K removeSelector: #configureDialogWindowLabelAreaFrameFor:! UIThemeW2K removeSelector: #checkboxButtonNormalBorderStyleFor:! UIThemeW2K removeSelector: #checkboxButtonDisabledBorderStyleFor:! UIThemeW2K removeSelector: #buttonSelectedFillStyleFor:! UIThemeW2K removeSelector: #buttonSelectedDefaultBorderStyle! UIThemeW2K removeSelector: #buttonSelectedBorderStyleFor:! UIThemeW2K removeSelector: #buttonPressedBorderStyleFor:! UIThemeW2K removeSelector: #buttonNormalDefaultBorderStyle! UIThemeW2K removeSelector: #buttonNormalBorderStyleFor:! UIThemeW2K removeSelector: #buttonLabelInsetFor:! UIThemeW2K removeSelector: #buttonCornerStyleIn:! UIThemeW2K removeSelector: #backgroundColor! UIThemeW2K class removeSelector: #world! UIThemeW2K class removeSelector: #windowColor:! UIThemeW2K class removeSelector: #windowColor! UIThemeW2K class removeSelector: #themeName! UIThemeW2K class removeSelector: #setup! UIThemeW2K class removeSelector: #newDefaultSettings! UIThemeW2K class removeSelector: #isAbstract! Smalltalk globals removeClassNamed: #UIThemeW2K! !Trait method! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString fromParseNode: nil class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! "Compiler"! "Kernel"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Spec-Tools"! "System-FilePackage"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(22 April 2013 1:37:11 pm) Pharo.image priorSource: 2019406! ----STARTUP----an Array(22 April 2013 1:43:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 April 2013 1:43:02 pm) Pharo-30053.image priorSource: 2042392! ----STARTUP----an Array(23 April 2013 10:16:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/23/2013 10:13' prior: 35574139! commentForCurrentUpdate ^ '10107 SimpleButtonMorph inconsistency for label: and label:font: https://pharo.fogbugz.com/f/cases/10107 10190 Failing test: Code critics / Manifest (failing test is in the tracker) https://pharo.fogbugz.com/f/cases/10190 10372 remove CustomParserTest https://pharo.fogbugz.com/f/cases/10372 10364 remove allowBlockArgumentAssignment setting https://pharo.fogbugz.com/f/cases/10364'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/23/2013 10:13'! script152 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.384.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1369.mcz KernelTests-MarcusDenker.484.mcz KeyChain-StephaneDucasse.29.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1400.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.442.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.198.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.794.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.5.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.101.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.125.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.526.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1076.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/23/2013 10:13'! update30054 "self new update30054" self withUpdateLog: '10107 SimpleButtonMorph inconsistency for label: and label:font: https://pharo.fogbugz.com/f/cases/10107 10190 Failing test: Code critics / Manifest (failing test is in the tracker) https://pharo.fogbugz.com/f/cases/10190 10372 remove CustomParserTest https://pharo.fogbugz.com/f/cases/10372 10364 remove allowBlockArgumentAssignment setting https://pharo.fogbugz.com/f/cases/10364'. self loadTogether: self script152 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Parser class methodsFor: 'setting' stamp: 'MarcusDenker 4/23/2013 10:02' prior: 29161928! allowBlockArgumentAssignment ^ false! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 4/23/2013 10:03' prior: 19943805! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder setting: #warningAllowed) label: 'More warnings' translated; target: Parser; description: 'Ask the user for certain situation such as use of undefined variables' translated. (aBuilder setting: #allowUnderscoreAsAssignment) label: 'Allow underscore as assignment' translated; target: Scanner; description: 'If enabled, the compiler will accept _ (underscore) for assignment. If disabled, the compiler will accept identifiers with underscore characters. This provides backward compatibility with the pre-ANSI compiler.' translated]. ! ! !Object class methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/23/2013 10:01' prior: 28650864! readFrom: textStringOrStream "Create an object based on the contents of textStringOrStream." | object | object := self class evaluatorClass evaluate: textStringOrStream. (object isKindOf: self) ifFalse: [self error: self name, ' expected']. ^object! ! !TempVariableNode methodsFor: 'testing' stamp: 'MarcusDenker 4/23/2013 10:03' prior: 52314000! assignmentCheck: encoder at: location ^(self isBlockArg or: [self isMethodArg]) ifTrue: [location] ifFalse: [-1]! ! !SimpleButtonMorph methodsFor: 'accessing' stamp: 'MarcusDenker 4/21/2013 08:31' prior: 33245109! label: aString self label: aString font: StandardFonts buttonFont! ! CustomParserTest removeSelector: #testCustomParser! CustomParserTest class removeSelector: #parserClass! Smalltalk globals removeClassNamed: #CustomParserTest! Compiler class removeSelector: #couldEvaluate:! SmalllintManifestCheckerTest removeSelector: #testFalsePositiveOf! OpalCompiler class removeSelector: #couldEvaluate:! Parser class removeSelector: #allowBlockArgumentAssignment:! Smalltalk globals removeClassNamed: #MockCustomParser! "Compiler"! "CompilerTests"! "Manifest-Tests"! "Morphic"! "OpalCompiler-Core"! "Settings-Compiler"! ----End fileIn----! ----QUIT----an Array(23 April 2013 10:16:24 am) Pharo.image priorSource: 2042592! ----STARTUP----an Array(23 April 2013 10:22:10 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 April 2013 10:22:10 am) Pharo-30054.image priorSource: 2055672! ----STARTUP----an Array(23 April 2013 3:09:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/23/2013 15:07' prior: 35597326! commentForCurrentUpdate ^ '10353 Add release test to check uniqueness of SystemAnnouncer https://pharo.fogbugz.com/f/cases/10353 10357 Simplify #selectedMethodSource in Nautilus https://pharo.fogbugz.com/f/cases/10357 10369 KeyChain deadlock https://pharo.fogbugz.com/f/cases/10369 10370 Spec mino fix https://pharo.fogbugz.com/f/cases/10370 10371 add #compiler to Behavior https://pharo.fogbugz.com/f/cases/10371 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/23/2013 15:07'! script153 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.386.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1371.mcz KernelTests-MarcusDenker.484.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.116.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.444.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.198.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.5.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1076.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/23/2013 15:07'! update30055 "self new update30055" self withUpdateLog: '10353 Add release test to check uniqueness of SystemAnnouncer https://pharo.fogbugz.com/f/cases/10353 10357 Simplify #selectedMethodSource in Nautilus https://pharo.fogbugz.com/f/cases/10357 10369 KeyChain deadlock https://pharo.fogbugz.com/f/cases/10369 10370 Spec mino fix https://pharo.fogbugz.com/f/cases/10370 10371 add #compiler to Behavior https://pharo.fogbugz.com/f/cases/10371 '. self loadTogether: self script153 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PluggableTextMorph methodsFor: 'editor access' stamp: 'BenjaminVanRyseghem 4/23/2013 13:09' prior: 29557327! handleEdit: editBlock | result | textMorph editor selectFrom: selectionInterval first to: selectionInterval last; model: model. "For, eg, evaluateSelection" textMorph handleEdit: [result := editBlock value]. "Update selection after edit" self scrollSelectionIntoView. ^ result! ! !ReleaseTest methodsFor: 'testing' stamp: 'GuillermoPolito 4/21/2013 21:31'! testSystemAnnouncerIsUnique "there should be only one instance of SystemAnnouncer" self assert: SystemAnnouncer allInstances size equals: 1.! ! !KeyChain methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/23/2013 00:28' prior: 24202142! askPasswordForKeyChain: attempt | string | password ifNil: [ ^ lastUnlock contents: true ]. string := (UITheme current passwordEntryIn: StandardWindow new text: 'Password for the keychain for ', username asString ,' (', (self maxAttemptsNumber - attempt) asString ,' tries left)' title: 'Password request' entryText: ''). string ifNil: [ ^ self ]. (encryptor encrypt: string) = password ifFalse: [ self logCr: (encryptor encrypt: string). self logCr: password. ^ self ]. lastUnlock contents: true! ! !MorphTreeMorph methodsFor: 'column handling' stamp: 'BenjaminVanRyseghem 4/21/2013 14:55' prior: 35400829! columns: aListOfTreeColumn "set the columns - as a consequence, the topHeader is update (if present) and column resizers are added" self removeColumnResizers. topHeader ifNotNil: [ self removeMorph: topHeader ]. columns := aListOfTreeColumn asOrderedCollection. aListOfTreeColumn do: [:col | col container: self]. self buildTopHeader . self addColumnResizers. ! ! !Behavior methodsFor: 'testing' stamp: 'MarcusDenker 4/23/2013 10:32' prior: 18064030! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method methodNode | method := self compiledMethodAt: selector. methodNode := self compiler compile: (self sourceCodeAt: selector) in: self notifying: nil ifFail: [^ false]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!!!']. ^ (methodNode generate: method trailer) = method! ! !AbstractSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/23/2013 00:01'! defaultColor ^ #(Color class black)! ! !AbstractSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/23/2013 00:02' prior: 35385049! initializeInstance ^ SpecInterpreter private_interpretASpec: { self classSymbol. #color:. self defaultColor} model: DummyComposableModel new! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'MarcusDenker 4/21/2013 19:51' prior: 17341902! selectedMethodSource self selectedMethod ifNil: [ ^ '' ]. self showSource ifTrue: [ ^ self selectedMethod sourceCode ]. self showByteCode ifTrue: [ ^ self selectedMethod symbolic ]. self showDecompile ifTrue: [ ^ self selectedMethod decompileWithTemps decompileString ]. ^ 'error'. ! ! !PluggableTextFieldMorph methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/23/2013 00:34'! accept self acceptBasic. acceptAction ifNotNil: [acceptAction value: textMorph contents asText].! ! !PluggableTextFieldMorph methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/23/2013 00:43'! hasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " aBoolean == hasUnacceptedEdits ifFalse: [hasUnacceptedEdits := aBoolean. self changed]. aBoolean ifFalse: [hasEditingConflicts := false]. self okToStyle ifTrue: [ self styler styleInBackgroundProcess: textMorph contents]! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/22/2013 21:16'! columns ^ tree columns! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 3/19/2013 13:15' prior: 35569552! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := self class private_interpretASpec: newInstance model: spec instance superSpec: specForChildren. ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. result spec addAsSubSpecTo: superSpec. ^ return ] ifFalse: [ ^ result ]! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/23/2013 10:27'! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new! ! !CheckboxSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/23/2013 00:02'! defaultColor ^ #(Color class white)! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new! ! "Compiler"! "Kernel"! "KeyChain"! "Morphic"! "Nautilus"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(23 April 2013 3:10:11 pm) Pharo.image priorSource: 2055874! ----STARTUP----an Array(23 April 2013 3:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 April 2013 3:16 pm) Pharo-30055.image priorSource: 2072129! ----STARTUP----an Array(23 April 2013 5:59:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 4/23/2013 17:52' prior: 35610608! commentForCurrentUpdate ^ '10363 Boolean clean up https://pharo.fogbugz.com/f/cases/10363 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 4/23/2013 17:52'! script154 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.386.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1371.mcz KernelTests-MarcusDenker.484.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.444.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.198.mcz OpalCompiler-Tests-MarcusDenker.116.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.172.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.5.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1076.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 4/23/2013 17:52'! update30056 "self new update30056" self withUpdateLog: '10363 Boolean clean up https://pharo.fogbugz.com/f/cases/10363 '. self loadTogether: self script154 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Boolean methodsFor: '*NativeBoost-Core' stamp: 'cb 4/22/2013 14:15' prior: 18359246! asNBExternalType: gen "boolean value in argument description array defines a simple 0 or 1 constant #( true false ) - turned into a 1 and 0 " ^ NBFFIConst value: self asBit! ! "NativeBoost-Core"! ----End fileIn----! ----QUIT----an Array(23 April 2013 6:00:02 pm) Pharo.image priorSource: 2072326! ----STARTUP----an Array(23 April 2013 6:06:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 April 2013 6:06:38 pm) Pharo-30056.image priorSource: 2082819! ----STARTUP----an Array(24 April 2013 11:08:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/24/2013 10:51' prior: 35627060! commentForCurrentUpdate ^ '10365 #mustBeBooleanIn: should not raise error https://pharo.fogbugz.com/f/cases/10365 (not yet complete and turned off, we will slowly complete it) 10345 Build menus in SyntaxError the same way like in Workspace https://pharo.fogbugz.com/f/cases/10345 10380 DNU in RBCondition>>canUnderstand:in: https://pharo.fogbugz.com/f/cases/10380 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/24/2013 10:52'! script155 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.386.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1373.mcz KernelTests-MarcusDenker.484.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.444.mcz NautilusCommon-StephaneDucasse.124.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.85.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.216.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.7.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1077.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/24/2013 10:52'! update30057 "self new update30057" self withUpdateLog: '10365 #mustBeBooleanIn: should not raise error https://pharo.fogbugz.com/f/cases/10365 (not yet complete and turned off, we will slowly complete it) 10345 Build menus in SyntaxError the same way like in Workspace https://pharo.fogbugz.com/f/cases/10345 10380 DNU in RBCondition>>canUnderstand:in: https://pharo.fogbugz.com/f/cases/10380 '. self loadTogether: self script155 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SyntaxError methodsFor: 'accessing' stamp: 'MarcusDenker 4/21/2013 08:45' prior: 51466470! shiftedYellowButtonMenu "Answer the menu to be presented when the yellow button is pressed while the shift key is down" ^ (PragmaMenuBuilder pragmaKeyword: SmalltalkEditor smalltalkEditorShiftedMenuKeyword model: self) menu.! ! !SyntaxError methodsFor: 'accessing' stamp: 'MarcusDenker 4/21/2013 08:53' prior: 51467839! yellowButtonMenu ^ (PragmaMenuBuilder pragmaKeyword: SmalltalkEditor smalltalkEditorMenuKeyword model: self) menu ! ! !RBCondition class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 17:39' prior: 30455391! canUnderstand: aSelector in: aClass ^self new type: (Array with: #understandsSelector with: aClass with: aSelector) block: [aClass canUnderstand: aSelector] errorString: aClass printString , ' <1?:does not >understand<1?s:> ' , aSelector printString! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 4/22/2013 16:26' prior: 34744150! isInlined (self methodNode selector = #ExecuteUnOptimzedIn:) ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineCase ifTrue: [^true]. ^false.! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/23/2013 17:16'! setUp OpalCompiler allowNonBooleanReceivers: true.! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/23/2013 17:16'! tearDown OpalCompiler allowNonBooleanReceivers: false.! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/23/2013 16:55'! testIfTrueEffect | temp fakeBool | fakeBool := MyBooleanObject new. temp := 1. fakeBool ifTrue: [ temp := 5 + 3 + 1 ]. self assert: temp equals: 9. fakeBool ifTrue: [ [ ] ]. "fakeBool ifTrue: [ 1+ 2. [ :a | a ] value: 5. 7 ]."! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/23/2013 17:15'! testIfTrueValue | myBooleanObject | self assert: (MyBooleanObject new ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'. myBooleanObject := MyBooleanObject new. self assert: (myBooleanObject ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'.! ! !IRJump methodsFor: 'accessing' stamp: 'MarcusDenker 4/23/2013 15:48'! successor ^successor! ! !IRJumpIf methodsFor: 'acessing' stamp: 'MarcusDenker 4/23/2013 16:53'! nextBytecodeOffsetAfterJump "check if we are in ifTrue:ifFalse: / ifFalse:ifTrue: or in ifTrue: / ifFalse: and answers the next byte code offset" ^destination last isJump ifTrue: [ destination last destination first bytecodeOffset ] ifFalse: [ self flag: #FIXME. "it does not work in case of multiple byte code instruction in the optimized block" (destination sequence at: (destination size - 1)) bytecodeOffset ]! ! !UndefinedObject methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/22/2013 16:56'! allTempNames ^#()! ! !RBAbstractClass methodsFor: 'testing' stamp: 'MarcusDenker 4/24/2013 10:51'! canUnderstand: aSelector ^self definesMethod: aSelector! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 4/23/2013 17:07' prior: 35608096! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder setting: #warningAllowed) label: 'More warnings' translated; target: Parser; description: 'Ask the user for certain situation such as use of undefined variables' translated. (aBuilder setting: #allowUnderscoreAsAssignment) label: 'Allow underscore as assignment' translated; target: Scanner; description: 'If enabled, the compiler will accept _ (underscore) for assignment. If disabled, the compiler will accept identifiers with underscore characters. This provides backward compatibility with the pre-ANSI compiler.' translated. (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}. (aBuilder setting: #allowNonBooleanReceivers) target: OpalCompiler; label: 'Allow non-boolean optimized sends' ; description: 'If checked we do magic'.] ! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/23/2013 16:45'! rewriteTempNamedRead: aTempName forContext: aContext | rewriter offset | offset := aContext tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName with: 'ThisContext namedTempAt:', offset asString. (rewriter executeTree: self) ifTrue: [^rewriter tree] ifFalse: [^self].! ! !RBMethodNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/23/2013 16:44'! rewriteTempNamedWrite: aTempName forContext: aContext | rewriter offset | offset := aContext tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName, ' := ``@object' with: 'ThisContext namedTempAt:', offset asString, 'put: ``@object'. (rewriter executeTree: self) ifTrue: [^rewriter tree] ifFalse: [^self].! ! !Workspace methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2012 15:53' prior: 54946591! containingWindow "Answer the window that holds the receiver. The dependents technique is odious and may not be airtight, if multiple windows have the same model. " ^ self dependents detect: [:d | (d isSystemWindow) and: [d model == self]] ifNone: []! ! !MyBooleanObject methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/23/2013 16:03'! ifTrue: aBlock ^ aBlock value printString , ' sent from my boolean object'! ! !Object methodsFor: 'converting' stamp: 'MarcusDenker 4/23/2013 17:12' prior: 28594491! mustBeBooleanIn: context "context is the where the non-boolean error occurred. Rewind context to before jump then raise error." | proceedValue | Smalltalk globals at: #OpalCompiler ifPresent: [ :opal | opal allowNonBooleanReceivers ifTrue: [ ^ self mustBeBooleanInMagic: context ] ]. context skipBackBeforeJump. proceedValue := NonBooleanReceiver new object: self; signal: 'proceed for truth.'. ^ proceedValue ~~ false! ! !Object methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/23/2013 17:14'! mustBeBooleanInMagic: context "Permits to redefine methods inlined by compiler. Take the ast node corresponding to the mustBeBoolean error, compile it on the fly with Opal and executes it as a DoIt. Then resume the execution of the context." | proceedValue sendNode selector expression arguments methodNode method offset position | context skipBackBeforeJump. sendNode := context sourceNode sourceNodeForPC: context pc. position := sendNode irInstruction bytecodeOffset. offset := sendNode irInstruction nextBytecodeOffsetAfterJump - position. expression := sendNode copy asSequenceNode transformLastToReturn. selector := #ExecuteUnOptimzedIn:. arguments := {(RBVariableNode named:'ThisContext')}. methodNode := RBMethodNode selector: selector arguments: arguments body: expression. context tempNames do: [:tempName | methodNode :=methodNode rewriteTempNamedWrite: tempName forContext: context. methodNode :=methodNode rewriteTempNamedRead: tempName forContext: context. ]. methodNode methodClass: UndefinedObject. method := methodNode generateWithSource. context jump: offset. proceedValue := self withArgs: {context} executeMethod: method. ^proceedValue! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 4/23/2013 17:03'! allowNonBooleanReceivers ^AllowNonBooleanReceivers ifNil: [ AllowNonBooleanReceivers := false]! ! !OpalCompiler class methodsFor: 'accessing' stamp: 'MarcusDenker 4/23/2013 17:01'! allowNonBooleanReceivers: aBoolean AllowNonBooleanReceivers := aBoolean! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/23/2013 16:46' prior: 34953423! parse: aStream noPattern: noPattern | expression selector arguments method | noPattern ifFalse: [^RBParser parseMethod: aStream contents]. expression := (RBParser parseExpression: aStream contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! OpalCompiler removeSelector: #rewriteTempNamedWrite:forMethod:! OpalCompiler removeSelector: #rewriteTempNamedRead:forMethod:! OpalCompiler class removeSelector: #compilerSettingsOn:! "Kernel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Refactoring-Core"! "Settings-Compiler"! "Tools"! ----End fileIn----! ----QUIT----an Array(24 April 2013 11:09:07 am) Pharo.image priorSource: 2083019! ----STARTUP----an Array(24 April 2013 11:14:58 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 April 2013 11:14:58 am) Pharo-30057.image priorSource: 2102733! ----STARTUP----an Array(24 April 2013 3:14:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/24/2013 15:10' prior: 35637753! commentForCurrentUpdate ^ '10102 SocketStream>>next: should not signal ConncetionClosed https://pharo.fogbugz.com/f/cases/10102 10358 Trait users item added to Nautilus https://pharo.fogbugz.com/f/cases/10358 10384 KeyChain prevent debugger to open https://pharo.fogbugz.com/f/cases/10384/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/24/2013 15:11'! script156 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-EstebanLorenzano.5.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.386.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1373.mcz KernelTests-MarcusDenker.484.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.110.mcz NOCompletion-MarcusDenker.34.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-EstebanLorenzano.83.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-StephaneDucasse.12.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.7.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1078.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.467.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/24/2013 15:11'! update30058 "self new update30058" self withUpdateLog: '10102 SocketStream>>next: should not signal ConncetionClosed https://pharo.fogbugz.com/f/cases/10102 10358 Trait users item added to Nautilus https://pharo.fogbugz.com/f/cases/10358 10384 KeyChain prevent debugger to open https://pharo.fogbugz.com/f/cases/10384/'. self loadTogether: self script156 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus methodsFor: 'accessing' stamp: 'SebastianTleye 4/23/2013 13:12'! packagesWithoutExtensions ^ self browsedEnvironment packagesWithoutExtensions asArray! ! !ClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 4/23/2013 10:26'! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! !RBBrowserEnvironmentWrapper methodsFor: '*NautilusCommon' stamp: 'SebastianTleye 4/23/2013 18:05'! packagesWithoutExtensions ^ (self classes gather: [:each | each packagesWithoutExtensions]) asSet! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'SebastianTleye 4/24/2013 10:05'! packagesWithoutExtensions ^self packages.! ! !TraitDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 4/23/2013 18:10'! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! !Debugger class methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 4/23/2013 19:00' prior: 20546210! openOn: process context: context label: title contents: contentsStringOrNil fullView: bool "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | fullView | fullView := (bool or: [self alwaysOpenFullDebugger]). UsersManager default currentUser canDebug ifFalse: [ UIManager default spawnNewProcessIfThisIsUI: process. process suspend. ^ self ]. ^ UIManager default openDebuggerOn: process context: context label: title contents: contentsStringOrNil fullView: fullView! ! !SocketStream methodsFor: 'stream in' stamp: 'SvenVanCaekenberghe 4/17/2013 09:21' prior: 50455827! next: anInteger "Read count elements and return them in a collection. If the receiver is #atEnd before count elements were read, return a smaller collection and don't signal ConnectionClosed." ^ self nextInto: (self streamBuffer: anInteger)! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'DamienCassou 4/24/2013 14:00' prior: 17380963! classesMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. (aBuilder item: #'Rename...') keyText: 'r,c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClass ]; enabledBlock: [ target selectedClasses size <= 1 ]; order: -99; withSeparatorAfter. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; keyText: 'B' if: Nautilus useOldStyleKeys; action: [target restrictedBrowseClass]; order: 1000; help: 'Open a browser on a restricted view'. (target selectedClass isTrait) ifTrue: [ (aBuilder item: #'Browse users') action: [ target restrictedBrowseTraitUsers ]; order: 1050]. (aBuilder item: #'Add in Group...') keyText: 'n, e, c' if: Nautilus useOldStyleKeys not; keyText: 'e' if: Nautilus useOldStyleKeys; action: [ target addClassesInGroup ]; order: 1100; withSeparatorAfter. (target selectedClasses allSatisfy: [:each | each inheritsFrom: TestCase ]) ifTrue:[ (aBuilder item:#'Run tests') keyText: 'j, c' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runClassTests ]; order: 1200]. (aBuilder item: #Analyze) enabledBlock: [ target selectedClasses size <= 1 ]; order: 0; withSeparatorAfter. (aBuilder item: #'Jump to test class') keyText: 'g, j' if: Nautilus useOldStyleKeys not; keyText: 'j' if: Nautilus useOldStyleKeys; action: [ target createTestForSelectedClass ]; enabledBlock: [ target selectedClasses size <= 1 ]; order: 300; withSeparatorAfter. (aBuilder item: #'Move to package...') keyText: 'm, c' if: Nautilus useOldStyleKeys not; action: [ target moveInNewPackage ]; order: 1400. (aBuilder item: #'Copy...') keyText: 'c, c' if: Nautilus useOldStyleKeys not; keyText: 'c' if: Nautilus useOldStyleKeys; action: [ target copyClasses ]; order: 1600. (aBuilder item: #'Remove...') keyText: 'x, c' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeClasses ]; icon: (target iconClass iconNamed: #removeIcon); order: 1700; withSeparatorAfter. (aBuilder item: #'File Out') action: [ target fileOutClass ]; withSeparatorAfter; order: 1800. target showGroups ifTrue: [ target selectedGroup isReadOnly ifFalse: [ (aBuilder item: #'Remove from Group') keyText: 'X' if: Nautilus useOldStyleKeys not; action: [ target removeClassFromGroup ]; order: 1900] ].! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'SebastianTleye 4/23/2013 13:09'! getPackagesWithoutExtensionsList ^ self model packagesWithoutExtensions sort: [:a :b | a name <= b name ]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'SebastianTleye 4/23/2013 13:11' prior: 17362197! loadList ^ self ifGroups: [ self getGroupsKeyList ] ifNot:[ self getPackagesWithoutExtensionsList ]! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'SebastianTleye 4/19/2013 15:57'! restrictedBrowseTraitUsers self selectedClass ifNil: [ ^ self ] ifNotNil: [ :class | self restrictedBrowseTraitUsers: class users ]! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'DamienCassou 4/24/2013 14:11'! restrictedBrowseTraitUsers: users | newEnvironment | users ifEmpty: [ ^ self ]. newEnvironment := self browsedEnvironment forClasses: users. self model class openOnClass: users anyOne inEnvironment: newEnvironment ! ! !RBBrowserEnvironment methodsFor: '*NautilusCommon' stamp: 'SebastianTleye 4/23/2013 13:14'! packagesWithoutExtensions ^ self packageOrganizer packagesWithoutExtensions! ! "Nautilus"! "NautilusCommon"! "Network-Kernel"! "RPackage-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(24 April 2013 3:15:05 pm) Pharo.image priorSource: 2102935! ----STARTUP----an Array(24 April 2013 3:21:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 April 2013 3:21:07 pm) Pharo-30058.image priorSource: 2119368! ----STARTUP----an Array(25 April 2013 10:01:59 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/25/2013 09:58' prior: 35657669! commentForCurrentUpdate ^ '10389 Bug when searching for traits (find class option) https://pharo.fogbugz.com/f/cases/10389 10356 Simplify CompiledMethod>>#argumentNames https://pharo.fogbugz.com/f/cases/10356 10367 NOCController / NECController need #cleanUp method https://pharo.fogbugz.com/f/cases/10367 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/25/2013 09:58'! script157 ^ 'AST-Core-MarcusDenker.129.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.388.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1374.mcz KernelTests-MarcusDenker.486.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.7.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1078.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.468.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/25/2013 09:58'! update30059 "self new update30059" self withUpdateLog: '10389 Bug when searching for traits (find class option) https://pharo.fogbugz.com/f/cases/10389 10356 Simplify CompiledMethod>>#argumentNames https://pharo.fogbugz.com/f/cases/10356 10367 NOCController / NECController need #cleanUp method https://pharo.fogbugz.com/f/cases/10367 '. self loadTogether: self script157 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/21/2013 17:48' prior: 19832541! argumentNames ^self ast argumentNames! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/21/2013 18:04' prior: 19839552! tempNames ^self methodNode tempNames.! ! !NECController class methodsFor: 'cleanup' stamp: 'MarcusDenker 4/24/2013 13:43'! cleanUp self reset! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'MarcusDenker 4/21/2013 18:39' prior: 28249400! privateInlineParameterFor: aMethod | arguments parameter | arguments := aMethod argumentNames ifEmpty: [ ^ nil ]. parameter := (UIManager default chooseFrom: arguments) ifNil: [ ^ nil ]. ^ RBInlineParameterRefactoring model: environment inlineParameter: (arguments at: parameter ifAbsent: [ ^ nil ]) in: aMethod methodClass selector: aMethod selector! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'MarcusDenker 4/21/2013 18:41' prior: 28251576! privateRemoveParameterMethodFor: aMethod | arguments parameter | arguments := aMethod argumentNames ifEmpty: [ ^ nil ]. parameter := (UIManager default chooseFrom: arguments) ifNil: [ ^ nil ]. ^ RBRemoveParameterRefactoring model: environment removeParameter: (arguments at: parameter ifAbsent: [ ^ nil ]) in: aMethod methodClass selector: aMethod selector! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'MarcusDenker 4/21/2013 18:43' prior: 28252182! privateRenameMethodFor: aMethod | class selector oldMethodName newMethodName oldArguments argumentPermutation | class := aMethod methodClass. selector := aMethod selector. oldArguments := aMethod argumentNames. oldMethodName := RBMethodName selector: selector arguments: oldArguments. (newMethodName := self requestMethodNameFor: oldMethodName) ifNil: [ ^ nil ]. argumentPermutation := newMethodName arguments collect: [ :each | oldArguments indexOf: each ]. ^ RBRenameMethodRefactoring model: environment renameMethod: selector in: class to: newMethodName selector permutation: argumentPermutation! ! !QSystemTally methodsFor: 'report' stamp: 'MarcusDenker 4/21/2013 18:02' prior: 30116694! printOn: aStream aStream print: class; nextPutAll: '>>'; print: (method ifNotNil:[method selector]). aStream nextPutAll: ' -- '; print: tally.! ! !NOCController class methodsFor: 'cleanup' stamp: 'MarcusDenker 4/24/2013 13:42'! cleanUp self reset! ! !RBBrowserEnvironment methodsFor: 'accessing-classes' stamp: 'SebastianTleye 4/24/2013 10:55' prior: 30333162! allClassesAndTraits " compatibility method with SystemDictionary " | classesAndTraits | classesAndTraits := IdentitySet new: 4096. self classesAndTraitsDo: [ :each | classesAndTraits add: each theNonMetaClass ]. ^ classesAndTraits asArray! ! !RBBrowserEnvironment methodsFor: 'private' stamp: 'SebastianTleye 4/22/2013 14:00'! allClassesAndTraitsDo: aBlock self systemDictionary allClassesAndTraitsDo: [ :each | aBlock value: each; value: each class ]! ! !RBBrowserEnvironment methodsFor: 'accessing-classes' stamp: 'SebastianTleye 4/22/2013 13:59'! classesAndTraitsDo: aBlock self allClassesAndTraitsDo: [ :each | (self includesClass: each) ifTrue: [ aBlock value: each ] ]! ! Parser removeSelector: #parseParameterNames:! TPureBehavior removeSelector: #formalParametersAt:! BehaviorTest removeSelector: #testFormalParameterNames! "AndreasProfiler"! "Compiler"! "Kernel"! "KernelTests"! "NECompletion"! "NOCompletion"! "NautilusRefactoring"! "Refactoring-Environment"! "Traits"! ----End fileIn----! ----QUIT----an Array(25 April 2013 10:02:08 am) Pharo.image priorSource: 2119568! ----STARTUP----an Array(25 April 2013 10:08:04 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 April 2013 10:08:04 am) Pharo-30059.image priorSource: 2133754! ----STARTUP----an Array(25 April 2013 10:56:56 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/25/2013 10:54' prior: 35674302! commentForCurrentUpdate ^ '10376 Clean up underscore assignment https://pharo.fogbugz.com/f/cases/10376 10392 Suggestions context-dependent https://pharo.fogbugz.com/f/cases/10392 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/25/2013 10:54'! script158 ^ 'AST-Core-MarcusDenker.131.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.12.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.389.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-EstebanLorenzano.23.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MaxLeske.311.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1374.mcz KernelTests-MarcusDenker.486.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.496.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.787.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-StephaneDucasse.63.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-StephaneDucasse.5.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.9.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.91.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.92.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.807.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1078.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.468.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/25/2013 10:54'! update30060 "self new update30060" self withUpdateLog: '10376 Clean up underscore assignment https://pharo.fogbugz.com/f/cases/10376 10392 Suggestions context-dependent https://pharo.fogbugz.com/f/cases/10392 '. self loadTogether: self script158 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Parser commentStamp: '' prior: 29120992! I parse Smalltalk syntax and create a MethodNode that is the root of the parse tree. I look one token ahead.! !SugsAbstractContext commentStamp: '' prior: 0! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SugsSuggestion commentStamp: '' prior: 0! A SSCommand represent a command that can be excuted on a context to obtain a result. For example for raneme an instance variable name. Instance Variables blockCommand: context: blockCommand - xxxxx context - xxxxx ! !RBSequenceNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 10:08'! specialCommands ^ SugsSuggestionFactory commandsForSource.! ! !NautilusRefactoring methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/22/2013 15:37'! accessorsClassVarNamed: aVariableName from: aClass | refactoring | aClass ifNil: [ ^ self ]. refactoring := self privateAccessorsClassVarNamed: aVariableName from: aClass. refactoring ifNil: [ ^ self ]. refactoring model environment: self model browsedEnvironment. self performRefactoring: refactoring.! ! !NautilusRefactoring methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 13:14'! accessorsInstVarNamed: aVariableName from: aClass | refactoring | aClass ifNil: [ ^ self ]. refactoring := self privateAccessorsInstVarNamed: aVariableName from: aClass. refactoring ifNil: [ ^ self ]. refactoring model environment: self model browsedEnvironment. self performRefactoring: refactoring.! ! !NautilusRefactoring methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/22/2013 15:36'! privateAccessorsClassVarNamed: aVariableName from: aClass. ^RBCreateAccessorsForVariableRefactoring model: environment variable: aVariableName class: aClass classVariable: true! ! !NautilusRefactoring methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 13:12'! privateAccessorsInstVarNamed: aVariableName from: aClass. ^RBCreateAccessorsForVariableRefactoring model: environment variable: aVariableName class: aClass classVariable: false! ! !RBProgramNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/5/2013 17:12'! specialCommands ^#().! ! !Parser commentStamp: '' prior: 35698829! I parse Smalltalk syntax and create a MethodNode that is the root of the parse tree. I look one token ahead.! !Scanner class methodsFor: 'setting' stamp: 'MarcusDenker 4/24/2013 15:51' prior: 32712310! allowUnderscoreAsAssignment ^false! ! !Scanner methodsFor: 'setting' stamp: 'MarcusDenker 4/24/2013 15:52' prior: 32711626! allowUnderscoreAsAssignment ^false! ! !Scanner methodsFor: 'multi-character scans' stamp: 'MarcusDenker 4/24/2013 15:50' prior: 32706687! xUnderscore ^ self xIllegal! ! !RBCondition class methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/23/2013 15:43'! hasInstanceVariable: aClass ^self new type: (Array with: aClass) block: [aClass allInstVarNames isEmpty not] errorString: aClass printString , ' <1?:does not >define any instance variable ' , aClass asString ! ! !RBMessageNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 10:08'! specialCommands ^ SugsSuggestionFactory commandsForMessage! ! !SmalltalkEditor methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/24/2013 11:38'! smartSuggestions "Open suggested actions based on the selection" SugsMenuBuilder showMenuFor: self model. ! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 4/19/2013 16:22'! testANautilusObjectIsAValidContext | nautilus | nautilus := NautilusUI new. self assert: (SugsAbstractContext isAValidContext: nautilus).! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 4/19/2013 16:27'! testWorkspaceIsNotAValidContext | st | st := Workspace new. self deny: (SugsAbstractContext isAValidContext: st).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:22'! testFindBestNodeForClassItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classContext. self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isLiteral and: [Smalltalk globals includesAssociation: node binding binding ]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:27'! testFindBestNodeForClassVarItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classVariableContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es una var de clase?" self assert:( node binding isLiteral and: [(Smalltalk globals includesAssociation: node binding binding ) not]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:24'! testFindBestNodeForInstanceVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext instVarContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isInstance).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 14:27'! testFindBestNodeForLiteralItsRBLiteral | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext literalContext. self assert: node class equals: RBLiteralValueNode .! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:29'! testFindBestNodeForMessageNodeItsRBMessageSend | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext mesageContext . self assert: node class equals: RBMessageNode .! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:28'! testFindBestNodeForMethodNodeItsRBMehod | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext methodContext . self assert: node class equals: RBMethodNode.! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:25'! testFindBestNodeForMultilineItsRBSequence | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext sourceContext . self assert: node class equals: RBSequenceNode . ! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 14:29'! testFindBestNodeForSelfNodeItsRBSelf | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext selfContext. self assert: node class equals: RBSelfNode.! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:18'! testFindBestNodeForSelfNodeItsRBSuper | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext superContext. self assert: node class equals: RBSuperNode ! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:25'! testFindBestNodeForTemporaryVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext tempVarContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isTemp).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/19/2013 16:46'! testNoSuggestionForLiteralNode | suggestions | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext literalContext. self assert: suggestions isEmpty.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/19/2013 17:36'! testNoSuggestionForSelfNode | suggestions | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext selfContext. self assert: suggestions isEmpty.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/19/2013 18:00'! testNoSuggestionForSuperNode | suggestions | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext superContext. self assert: suggestions isEmpty.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:46'! testSuggestionForAClassNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext classContext. expected := SugsSuggestionFactory commandsForClass. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:57'! testSuggestionForAClassVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext classVariableContext. expected := SugsSuggestionFactory commandsForClassVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/24/2013 14:32'! testSuggestionForAMehodNodeIncludesAllDeclared | suggestions expected context | context := SugsMockContext methodContext. suggestions := SugsMenuBuilder findSuggestionsFor: context. expected := (SugsSuggestionFactory commandsForMethod do: [:aSugg | aSugg context: context] )select: #isValidForContext. self assert: (expected allSatisfy: [ :expect | suggestions includes: expect ])! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 14:07'! testSuggestionForAMessageNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext mesageContext. expected := SugsSuggestionFactory commandsForMessage . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:58'! testSuggestionForATemporaryVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext tempVarContext. expected := SugsSuggestionFactory commandsForTemporaryVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:59'! testSuggestionForAnInstanceVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext instVarContext. expected := SugsSuggestionFactory commandsForInstanceVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 14:16'! testSuggestionForSourceNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext sourceContext. expected := SugsSuggestionFactory commandsForSource . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 13:57'! createSuggestionAccesorsClassVar: context | suggestion | suggestion := SugsSuggestionFactory createAccessors. suggestion context: context. ^suggestion.! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 11:19'! createSuggestionAccesorsInstVar: context | suggestion | suggestion := SugsSuggestionFactory createAccesorsFor. suggestion context: context. ^suggestion.! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 13:56'! targetFor: varName in: aClass ^ varName first isUppercase ifTrue: [ aClass class ] ifFalse: [aClass]. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:19'! testCreateAccessorsIsNotValidIfAccessorsAreAlreadyCreated | suggestion context | self addVariable: 'test' to: self emptyClass. self createAccessorsFor: 'test' in: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self deny: suggestion isValidForContext! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:25'! testCreateAccessorsIsValidIfAccessIsMissed | suggestion context | self addVariable: 'test' to: self emptyClass. self createSetter: 'test' in: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:23'! testCreateAccessorsIsValidIfAccessorsAreMissed | suggestion context | self addVariable: 'test' to: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:25'! testCreateAccessorsIsValidIfMuttatorMissed | suggestion context | self addVariable: 'test' to: self emptyClass . self createGetter: 'test' in: self emptyClass . context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 11:28'! testCreateClassAccessorsIsNotValidIfAccessorsAreAlreadyCreated | suggestion context | self addVariable: 'Test' to: self emptyClass. self createAccessorsFor: 'Test' in: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsClassVar: context. self deny: suggestion isValidForContext! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:10'! testCreateClassAccessorsIsValidIfAccessIsMissed | suggestion context | self addVariable: 'Test' to: self emptyClass. self createSetter: 'Test' in: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:10'! testCreateClassAccessorsIsValidIfAccessorsAreMissed | suggestion context | self addVariable: 'Test' to: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:11'! testCreateClassAccessorsIsValidIfMuttatorMissed | suggestion context | self addVariable: 'Test' to: self emptyClass . self createGetter: 'Test' in: self emptyClass . context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionDelegateTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 15:47'! createContexForDelegate ^ SugsMockContext for: self emptyClass! ! !SugsSuggestionDelegateTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:50'! createSuggestionDelegate: context | suggestion | suggestion := SugsSuggestionFactory createMoveMethod . suggestion context: context. ^suggestion. ! ! !SugsSuggestionDelegateTest methodsFor: 'source' stamp: 'GiselaDecuzzi 4/23/2013 15:11'! testDelegateSelectionWithInstaceVariablesItsValid | suggestion | self addVariable: 'test' to: self emptyClass. self addMethodToDelegate. suggestion := self createSuggestionDelegate: self createContexForDelegate . self assert: suggestion isValidForContext! ! !SugsSuggestionDelegateTest methodsFor: 'source' stamp: 'GiselaDecuzzi 4/23/2013 15:12'! testDelegateSelectionWithoutInstaceVariablesItsNotValid | suggestion | self addMethodToDelegate. suggestion := self createSuggestionDelegate: self createContexForDelegate. self deny: suggestion isValidForContext! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:23'! createContext: subclass ^SugsMockContext for: subclass .! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:19'! createSubclassFrom: superClass named: symbol | newClass | newClass := superClass subclass: symbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmartSuggestions-Test'. ^newClass.! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:24'! createSuggestionPushDown: context ^ SugsSuggestionFactory createPushDown context:context; yourself.! ! !SugsSuggestionPushDownTest methodsFor: 'method' stamp: 'GiselaDecuzzi 4/24/2013 00:47'! testPushDownWithSubclassIsValid | suggestion subclass | subclass := self createSubclassFrom: self emptyClass named: #TestSuggestionsSubclass. self addMethodToDelegate. suggestion := self createSuggestionPushDown: (self createContext: self emptyClass ). self assert: suggestion isValidForContext. self removeClass: subclass.! ! !SugsSuggestionPushDownTest methodsFor: 'method' stamp: 'GiselaDecuzzi 4/23/2013 16:28'! testPushDownWithoutSubclassIsNotValid | suggestion | self addMethodToDelegate. suggestion := self createSuggestionPushDown: (self createContext: self emptyClass ). self deny: suggestion isValidForContext! ! !SugsSuggestionRemoveArgTest methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 17:58'! testRemoveArgsWithArgsItsValid | suggestion | suggestion := SugsSuggestionFactory createRemoveParameter context: (SugsMockContext withMessageName: 'methodNoParamas:' ); yourself. self assert: suggestion isValidForContext ! ! !SugsSuggestionRemoveArgTest methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 17:57'! testRemoveArgsWithoutArgsItsNotValid | suggestion | suggestion := SugsSuggestionFactory createRemoveParameter context: (SugsMockContext withMessageName: 'methodNoParamas' ); yourself. self deny: suggestion isValidForContext! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:37'! testLabelForSwapClassMethodRefersToInstance | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext methodClassContext. self assert: sugg label equals: 'Move to instance side' translated.! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:36'! testLabelForSwapInstanceMethodRefersToClass | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext methodContext. self assert: sugg label equals: 'Move to class side' translated.! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:35'! testLabelForSwapWithoutSelectedMethodIsGeneric | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext new. self assert: sugg label equals: 'Swap method' translated.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:22'! addMethodToDelegate self emptyClass compile: 'methodToDelegate2+5. OrderedCollection new.' expandMacros classified: #testing! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! addVariable: name to: aClass name first isUppercase ifTrue: [ aClass addClassVarNamed: name] ifFalse: [aClass addInstVarNamed: name].! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! createAccessorsFor: varName in: aClass self createGetter: varName in: aClass. self createSetter: varName in: aClass . ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! createClass: symbol | newClass | newClass := Object subclass: symbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmartSuggestions-Test'. ^newClass.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! createContext: selectedVariableName ^ SugsMockContext for: self emptyClass selectedVariable: selectedVariableName ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! createGetter: varName in: aClass | target name | target := self targetFor: varName in: aClass. name := self nameFor: varName. target compile: ('<1s>^ <2s>' expandMacrosWith: name with: varName) classified: #accessing. ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! createSetter: varName in: aClass | target name | target := self targetFor: varName in: aClass. name := self nameFor: varName. target compile: ('<1s> anObject<2s> := anObject' expandMacrosWith: (name,':') with: varName) classified: #accessing. ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:39'! emptyClass ^ emptyClass! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! nameFor: varName | name | name:= varName copy. name at: 1 put: name first asLowercase. ^name.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31'! removeClass: aClass aClass removeFromSystem.! ! !SugsSuggestionTest methodsFor: 'initialize-release' stamp: 'GiselaDecuzzi 4/23/2013 14:39'! setUp super setUp. emptyClass := self createClass: #TestWithAccessors.! ! !SugsSuggestionTest methodsFor: 'initialize-release' stamp: 'GiselaDecuzzi 4/23/2013 14:39'! tearDown super tearDown. self removeClass: emptyClass .! ! !RBScanner class methodsFor: 'class initialization' stamp: 'MarcusDenker 4/24/2013 15:51' prior: 31299928! initializeUnderscore self classificationTable at: $_ asInteger put: #alphabetic! ! !RBSelfNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/16/2013 17:14'! specialCommands ^#().! ! !AbstractTool methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/17/2013 09:58'! browseAllAccessesTo: variableName from: aClass ^self systemNavigation browseAllAccessesTo: variableName from: aClass ! ! !AbstractTool methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/17/2013 10:01'! browseAllStoresInto: aVariableName from: aClass ^self systemNavigation browseAllStoresInto: aVariableName from: aClass ! ! !AbstractTool methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/18/2013 15:19'! browseImplementorsOf: target name: windowName autoSelect: isAutoSelect ^self systemNavigation browseImplementorsOf: target name: windowName autoSelect: isAutoSelect ! ! !AbstractTool methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/18/2013 15:19'! browseSendersOf: target name: windowName autoSelect: isAutoSelect ^self systemNavigation browseSendersOf: target name: windowName autoSelect: isAutoSelect ! ! !RBMethodNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 10:08'! specialCommands ^SugsSuggestionFactory commandsForMethod.! ! !RBVariableNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 4/19/2013 10:08'! specialCommands self binding isInstance ifTrue: [ ^ SugsSuggestionFactory commandsForInstanceVariable]. self binding isTemp ifTrue: [ ^SugsSuggestionFactory commandsForTemporaryVariable]. (self binding isLiteral and: [Smalltalk globals includesAssociation: self binding binding ]) ifTrue:[ ^SugsSuggestionFactory commandsForClass]. (self binding isUndeclared ) ifTrue:[^SugsSuggestionFactory commandsForUndeclaredVariable]. (self binding isLiteral and: [(Smalltalk globals includesAssociation: self binding binding ) not]) ifTrue:[^SugsSuggestionFactory commandsForClassVariable]. ^{}.! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 4/24/2013 15:49' prior: 35651497! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder setting: #warningAllowed) label: 'More warnings' translated; target: Parser; description: 'Ask the user for certain situation such as use of undefined variables' translated. (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}. (aBuilder setting: #allowNonBooleanReceivers) target: OpalCompiler; label: 'Allow non-boolean optimized sends' ; description: 'If checked we do magic'.]! ! !SugsAbstractContext commentStamp: '' prior: 35698999! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SugsAbstractContext class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/19/2013 15:27'! isAValidContext: aContext "right now we only have one valid context and its nautilus ui. When we grow up we have to change this nasty implementation for a real one and be really extensible and maybe to offer suggestions based in the actual context also" ^ aContext class = NautilusUI! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/18/2013 13:44'! bindedSelectedClass ^selectedNode binding value.! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/18/2013 13:34'! browsedEnvironment self subclassResponsibility .! ! !SugsAbstractContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/19/2013 17:45'! code ^self sourceTextArea text! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 14:12'! hasClassUnImplementedAccessors | hasGetter hasSetter name | name := self selectedVariableName asString copy. name at: 1 put: name first asLowercase . hasGetter := RBCondition canUnderstand: name asSymbol in: self selectedClass class. hasSetter := RBCondition canUnderstand: (name,':' ) asSymbol in: self selectedClass class. ^ (hasGetter not | hasSetter not) check! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 15:19'! hasInstanceVariable ^(RBCondition hasInstanceVariable: self selectedClass) check. ! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 17:55'! hasParameters ^self selectedMessageName numArgs > 0. ! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 16:25'! hasSubclasses ^(RBCondition hasSubclasses: self selectedClass) check. ! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 10:57'! hasUnImplementedAccessors | hasGetter hasSetter | hasGetter := RBCondition canUnderstand: self selectedVariableName asSymbol in: self selectedClass. hasSetter := RBCondition canUnderstand: (self selectedVariableName,':' ) asSymbol in: self selectedClass. ^ (hasGetter not | hasSetter not) check! ! !SugsAbstractContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/18/2013 13:30'! nodeStart ^selectedNode start.! ! !SugsAbstractContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/18/2013 13:30'! nodeStop ^selectedNode stop.! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/18/2013 13:19'! selectedClass self subclassResponsibility .! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/19/2013 17:03'! selectedInterval ^ self sourceTextArea selectionInterval! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/18/2013 13:44'! selectedMessageName ^selectedNode selector! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/18/2013 13:11'! selectedMethod self subclassResponsibility .! ! !SugsAbstractContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/18/2013 13:29'! selectedNode: theSelectedNode selectedNode := theSelectedNode .! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 4/18/2013 18:17'! selectedVariableName ^selectedNode name! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/18/2013 13:36'! sourceTextArea self subclassResponsibility .! ! !SugsAbstractContext methodsFor: 'tools' stamp: 'GiselaDecuzzi 4/18/2013 13:41'! tools self subclassResponsibility .! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/18/2013 13:37'! window self subclassResponsibility .! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 10:59'! classContext ^ self new selectorToUse: #withClass; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 13:59'! classVariableContext ^ self new selectorToUse: #withClassVariable; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 15:47'! for: aClass ^self new selectedClass: aClass! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 10:47'! for: aClass selectedVariable: aVariableName ^self new selectedClass: aClass; selectedVariable: aVariableName.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:09'! instVarContext ^ self new selectorToUse: #withInstanceVar; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 17:39'! literalContext ^ self new selectorToUse: #withLiteral; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:07'! mesageContext ^ self new selectorToUse: #withMesage; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/24/2013 14:38'! methodClassContext ^self new selectedClass: self; selectorToUse: #methodClassContext ! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:04'! methodContext ^ self new selectorToUse: #withMethod; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 17:39'! selfContext ^ self new selectorToUse: #withSelf; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:17'! sourceContext ^ self new selectorToUse: #withSourceContext; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 18:01'! superContext ^ self new selectorToUse: #withSuper; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:07'! tempVarContext ^ self new selectorToUse: #withTemporaryVar; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 18:00'! withMessageName: theName ^ self new message: theName; yourself.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/19/2013 17:45'! code ^ self selectedMethod sourceCode! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/23/2013 15:45'! interval: selector selector = #withLiteral ifTrue:[^ 18 to: 17]. selector = #withSelf ifTrue:[^ 13 to: 13]. selector = #withSuper ifTrue:[^ 13 to: 13]. selector = #withClass ifTrue:[^ 15 to: 16]. selector = #withClassVariable ifTrue:[^ (27 to: 26)]. selector = #withMethod ifTrue:[^ 6 to: 5]. selector = #withMesage ifTrue:[^ 21 to: 23]. selector = #withClassVariable ifTrue:[^ 15 to: 16]. selector = #withTemporaryVar ifTrue:[^ 63 to: 62]. selector = #withInstanceVar ifTrue:[^ 18 to: 30]. selector = #withSourceContext ifTrue:[^ 39 to: 68]. ^selectedInterval ! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 18:00'! message: theName ^ message:= theName.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:42'! selectedClass ^selectedClass ifNil: [self class] ifNotNil:[selectedClass].! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:41'! selectedClass: aClass selectedClass := aClass.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/19/2013 17:56'! selectedInterval ^self interval: self selectorToUse ! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 15:45'! selectedInterval: interval selectedInterval := interval.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 18:01'! selectedMessageName ^message ifNil:[super selectedMessageName] ifNotNil: [ message ]! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/24/2013 14:40'! selectedMethod ^selectorToUse ifNotNil: [self selectedClass methodDict at: selectorToUse ifAbsent: [self selectedClass class methodDict at: selectorToUse]] ifNil:[nil].! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:43'! selectedVariable: aVariableName. selectedVariable := aVariableName.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:44'! selectedVariableName ^selectedVariable ifNil: [ super selectedVariableName ] ifNotNil: [selectedVariable]! ! !SugsMockContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/19/2013 17:38'! selectorToUse ^ selectorToUse! ! !SugsMockContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/19/2013 17:38'! selectorToUse: anObject selectorToUse := anObject! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 10:59'! withClass SugsMockContext .! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:00'! withClassVariable ClassVariable! ! !SugsMockContext methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:09'! withInstanceVar anInstanceVar.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 16:49'! withLiteral 'hola' with: 19.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:06'! withMesage self withClassVariable ! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:05'! withMethod ! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 17:39'! withSelf self with: 19.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:17'! withSourceContext SugsMockContext . 20+10. OrderedCollection new.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 18:00'! withSuper super! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:08'! withTemporaryVar |aLocalVar| aLocalVar := 'bonjour'. aLocalVar asString.! ! !SugsNautilusContext class methodsFor: 'build' stamp: 'GiselaDecuzzi 4/18/2013 11:37'! model: theModel ^ self new model: theModel; yourself.! ! !SugsNautilusContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/16/2013 17:47'! browsedEnvironment ^model browsedEnvironment .! ! !SugsNautilusContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/16/2013 17:35'! model: aNautilusUI model := aNautilusUI! ! !SugsNautilusContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/18/2013 11:38'! selectedClass ^ model selectedClass! ! !SugsNautilusContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/24/2013 13:16'! selectedMethod ^ model selectedMethod .! ! !SugsNautilusContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/17/2013 14:15'! sourceTextArea ^ model sourceTextArea .! ! !SugsNautilusContext methodsFor: 'tools' stamp: 'GiselaDecuzzi 4/17/2013 09:55'! tools ^model! ! !SugsNautilusContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 4/17/2013 10:52'! window ^ model window ! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 4/24/2013 11:45'! addFindSuggestionsToSourceCodeMenu: aBuilder | model | model := aBuilder model. aBuilder item: 'Suggestions'; selector: #showMenuFor:; arguments: {model}; target: self; keyText: 't'; order: 0. aBuilder items last withSeparatorAfter . ! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 4/23/2013 18:04'! addSuggestionToSourceCodeMenu: aBuilder "" | context model order | model := aBuilder model. context := SugsNautilusContext model: model. order := 0. (self findSuggestionsFor: context) do:[:aSugg | aBuilder item: aSugg label; selector: #execute; target: aSugg; icon: aSugg icon; keyText: aSugg keyText; order: order. order := order +1 ]. aBuilder items last withSeparatorAfter . ! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 4/16/2013 16:37'! buildSmartActionsShortcuts: aBuilder (aBuilder shortcut: #smartSuggestions) category: #SmalltalkEditor default: $t command mac| $t ctrl unix | $t ctrl do: [ :morph | morph smartSuggestions ] description: 'Browse methods matching the selected ast'. ! ! !SugsMenuBuilder class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/22/2013 14:19'! findBestNodeFor: context | root node| root := context selectedMethod ifNil:[ RBParser parseExpression: context code] ifNotNil: [ RBParser parseMethod: context code]. root annotateInClass: context selectedClass. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! !SugsMenuBuilder class methodsFor: 'suggestions' stamp: 'GiselaDecuzzi 4/22/2013 17:33'! findSuggestionsFor: context "Finds the best suggestions for the context passed as a parameter" | node suggestions | node := self findBestNodeFor: context . suggestions := node ifNotNil: [ node specialCommands ] ifNil: [ #() ] . suggestions do:[:sugg| sugg context: context]. ^suggestions select: [:sugg | sugg isValidForContext ] ! ! !SugsMenuBuilder class methodsFor: 'show' stamp: 'GiselaDecuzzi 4/24/2013 11:58'! showMenuFor: model | suggs menu | (SugsAbstractContext isAValidContext: model) ifFalse:[ "If we aren't in the right context we will fail in populate the suggestions so... better not" ^self]. suggs := SugsMenuBuilder findSuggestionsFor: (SugsNautilusContext model: model). menu := UIManager default newMenuIn: model sourceCodePanel for: model. menu addTitle: 'Suggestions' translated. suggs do: [ :aSugg| (menu add: aSugg label target: aSugg action: #execute)icon: aSugg icon ]. menu setInvokingView: self. menu invokeModal.! ! !SugsSuggestion commentStamp: '' prior: 35699200! A SSCommand represent a command that can be excuted on a context to obtain a result. For example for raneme an instance variable name. Instance Variables blockCommand: context: blockCommand - xxxxx context - xxxxx ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 16:23'! for: blockCommand named: label icon: icon ^ self new blockCommand: blockCommand; label: label; icon: icon; yourself.! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! for: blockCommand named: label icon: icon position: position ^ (self for: blockCommand named: label icon: icon) position: position; yourself.! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 16:24'! for: blockCommand named: label icon: icon position: position isValidBlock: validBlock ^ (self for: blockCommand named: label icon: icon position: position) isValidBlock: validBlock; yourself.! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 15:52'! for: blockCommand named: label icon: icon position: position keyText: key ^ (self for: blockCommand named: label icon: icon position: position) keyText: key; yourself.! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 16:25'! for: blockCommand named: label icon: icon position: position keyText: key isValidBlock: validBlock ^ (self for: blockCommand named: label icon: icon position: position) keyText: key; isValidBlock: validBlock; yourself.! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/24/2013 14:35'! = otherSuggestion otherSuggestion class = self class ifFalse: [ ^false ]. ^ self label = otherSuggestion label.! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/5/2013 13:53'! blockCommand: aBlock blockCommand := aBlock.! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/5/2013 14:05'! context: theContext context := theContext . ! ! !SugsSuggestion methodsFor: 'execution' stamp: 'GiselaDecuzzi 4/5/2013 13:50'! execute blockCommand value: context.! ! !SugsSuggestion methodsFor: 'display' stamp: 'GiselaDecuzzi 4/11/2013 14:43'! icon ^icon.! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/11/2013 17:44'! icon: anIcon icon := anIcon ! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/22/2013 16:22'! isValidBlock: aBlock isValidBlock := aBlock.! ! !SugsSuggestion methodsFor: 'execution' stamp: 'GiselaDecuzzi 4/22/2013 16:04'! isValidForContext ^ isValidBlock ifNil:[true] ifNotNil:[isValidBlock value: context].! ! !SugsSuggestion methodsFor: 'display' stamp: 'GiselaDecuzzi 4/19/2013 10:09'! keyText ^ keyText! ! !SugsSuggestion methodsFor: 'display' stamp: 'GiselaDecuzzi 4/19/2013 10:10'! keyText: key keyText := key.! ! !SugsSuggestion methodsFor: 'display' stamp: 'GiselaDecuzzi 4/5/2013 13:56'! label ^label! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/5/2013 14:17'! label: aLabel label := aLabel.! ! !SugsSuggestion methodsFor: 'display' stamp: 'GiselaDecuzzi 4/18/2013 15:50'! position ^ position ifNil:[10000] ifNotNil: [ position ].! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 15:47'! position: aPosition position := aPosition .! ! !SugsSuggestion methodsFor: 'private' stamp: 'GiselaDecuzzi 4/24/2013 14:34'! printOn: aStream aStream nextPutAll: 'aSugsSuggestion ('; nextPutAll: self label; nextPutAll: ')'.! ! !SugsSwapMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:24'! execute ^(NautilusRefactoring model: context) swapMethodFor: (OrderedCollection with: context selectedMethod).! ! !SugsSwapMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:29'! label ^ context selectedMethod ifNil: ['Swap method' translated] ifNotNil: [context selectedMethod methodClass isMeta ifTrue: ['Move to instance side' translated] ifFalse:['Move to class side' translated]] ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 15:50'! collectCommandsFrom: aPragmaCollector | commands | commands := SortedCollection sortBlock: [ :st :nd | st position <= nd position ]. aPragmaCollector do: [:prg | commands add: ( prg methodClass theNonMetaClass perform: prg selector)]. ^commands. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 11:11'! collectorForClass ^ collectorForClass ifNil: [collectorForClass := self createCollector: #classCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 18:03'! collectorForClassVariable ^ collectorForClassVariable ifNil: [collectorForClassVariable := self createCollector: #classVarCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 10:46'! collectorForInstancesVariable ^ collectorForInstancesVariable ifNil: [collectorForInstancesVariable := self createCollector: #instVarCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 11:10'! collectorForMessage ^ collectorForMessage ifNil: [collectorForMessage := self createCollector: #messageCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 11:03'! collectorForMethod ^ collectorForMethod ifNil: [collectorForMethod := self createCollector: #methodCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 10:55'! collectorForSourceCode ^ collectorForSourceCode ifNil: [collectorForSourceCode := self createCollector: #sourceCodeCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 10:49'! collectorForTemporaryVariable ^ collectorForTemporaryVariable ifNil: [collectorForTemporaryVariable := self createCollector: #tempVarCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 10:51'! collectorForUndeclaredVariable ^ collectorForUndeclaredVariable ifNil: [collectorForUndeclaredVariable := self createCollector: #undeclaredVarCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 4/18/2013 11:11'! commandsForClass ^self collectCommandsFrom: self collectorForClass.! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/18/2013 17:58'! commandsForClassVariable ^self collectCommandsFrom: self collectorForClassVariable.! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/18/2013 10:23'! commandsForInstanceVariable ^self collectCommandsFrom: self collectorForInstancesVariable . ! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/18/2013 11:09'! commandsForMessage ^self collectCommandsFrom: self collectorForMessage. ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/18/2013 11:07'! commandsForMethod ^self collectCommandsFrom: self collectorForMethod.! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/18/2013 10:55'! commandsForSource ^self collectCommandsFrom: self collectorForSourceCode . ! ! !SugsSuggestionFactory class methodsFor: 'temp-var' stamp: 'GiselaDecuzzi 4/18/2013 10:50'! commandsForTemporaryVariable ^self collectCommandsFrom: self collectorForTemporaryVariable .! ! !SugsSuggestionFactory class methodsFor: 'unknown-var' stamp: 'GiselaDecuzzi 4/18/2013 10:51'! commandsForUndeclaredVariable ^self collectCommandsFrom: self collectorForUndeclaredVariable .! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/22/2013 16:38'! createAccesorsFor ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) accessorsInstVarNamed: context selectedVariableName from: context selectedClass ] named: 'Create Accesors' translated icon: UITheme current smallLanguageIcon position: 100 isValidBlock: [:context | context hasUnImplementedAccessors ].! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 14:03'! createAccessesToVariable ^ SugsSuggestion for: [ :context | context tools browseAllAccessesTo: context selectedVariableName from: context selectedClass ] named: 'Accesses to...' translated icon: UITheme current smallInspectItIcon position: 50 isValidBlock: [:context | context hasClassUnImplementedAccessors ].! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:07'! createAccessors ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) accessorsClassVarNamed: context selectedVariableName from: context selectedClass ] named: 'Create accessors' translated icon: UITheme current smallLanguageIcon position: 30 isValidBlock: [:context | context hasClassUnImplementedAccessors ].! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createAddParameter ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) addAParameterFor: context selectedMethod ] named: 'Add a parameter' translated icon: UITheme current smallPushpinIcon position: 200! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createBrowseReferences ^ SugsSuggestion for: [ :context | context tools browseClassRefsOf: context bindedSelectedClass ] named: 'Browse references' translated icon: UITheme current smallInspectItIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/18/2013 10:38'! createCollector: key | collector | collector := PragmaCollector filter: [:pragma | pragma keyword=key]. collector reset. collector whenChangedSend: #reset to: collector. ^collector. ! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createExtractMethod ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) extractToMethodTextSelection ] named: 'Extract method' translated icon: UITheme current smallRedoIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createExtractToLocalVariable ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) extractToTempTextSelection ] named: 'Extract local' translated icon: UITheme current smallJumpIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/19/2013 16:01'! createFindImplementorsCommand ^ SugsSuggestion for: [ :context | context tools browseImplementorsOf: context selectedMessageName name: 'Implementors of ' , context selectedMessageName autoSelect: nil ] named: 'Implementors' translated icon: UITheme current smallFindIcon position: 20 keyText: 'm'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/19/2013 16:01'! createFindSendersCommand ^ SugsSuggestion for: [ :context | context tools browseSendersOf: context selectedMessageName name: 'Senders of ' translated , context selectedMessageName autoSelect: nil ] named: 'Senders' translated icon: UITheme current smallFindIcon position: 10 keyText: 'n'! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/19/2013 16:01'! createFormatSourceCode ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) formatSourceCode ] named: 'Format' translated icon: UITheme current smallJustifiedIcon position: 0 keyText: 'u'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createInline ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) inlineMethodBetween: context selectedInterval from: context selectedMethod ] named: 'Inline method' translated icon: UITheme current smallRightFlushIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 15:14'! createMoveMethod ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) moveMethodFor: context selectedMethod ] named: 'Delegate selected method' translated icon: UITheme current smallRedoIcon position: 210 isValidBlock: [:context | context hasInstanceVariable ].! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createPullUp ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) pullUpMethodsFor: (OrderedCollection with: context selectedMethod) ] named: 'Pull Up' translated icon: UITheme current smallRedoIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 16:25'! createPushDown ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) pushDownMethodsFor: (OrderedCollection with: context selectedMethod) ] named: 'Push Down' translated icon: UITheme current smallUndoIcon position: 101 isValidBlock: [:context | context hasSubclasses ].! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createRemoveMethod ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) removeMethodsFor: (OrderedCollection with: context selectedMethod) ] named: 'Remove method' translated icon: UITheme current smallCancelIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 17:56'! createRemoveParameter ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) removeParameterFor: context selectedMethod ] named: 'Remove parameter' translated icon: UITheme current smallCancelIcon position: 210 isValidBlock: [:context | context hasParameters ].! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 4/19/2013 15:58'! createRenameClass ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) renameClass: context bindedSelectedClass ] named: 'Rename class' translated icon: UITheme current smallLanguageIcon position: 20 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/19/2013 15:58'! createRenameClassVariable ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) renameClassVarNamed: context selectedVariableName from: context selectedClass ] named: 'Rename' translated icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/19/2013 15:58'! createRenameMethod ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) renameMethodFor: context selectedMethod ] named: 'Rename' translated icon: UITheme current smallLanguageIcon position: 10 keyText: 'r,m'! ! !SugsSuggestionFactory class methodsFor: 'temp-var' stamp: 'GiselaDecuzzi 4/19/2013 15:57'! createRenameTemporaryVariable ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) renameTemporaryNamed: context selectedVariableName Between: (context nodeStart to: context nodeStop) from: context selectedMethod ] named: 'Rename' translated icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/19/2013 15:51'! createRenameVariable ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) renameInstVarNamed: context selectedVariableName from: context selectedClass ] named: 'Rename' translated icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/24/2013 13:23'! createSwapMethod ^ SugsSwapMethod new icon: UITheme current smallRedoIcon; position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/19/2013 10:46'! createUseAccessorToVar ^ SugsSuggestion for: [ :context | (NautilusRefactoring model: context) abstractClassVarFrom: context selectedClass ] named: 'Use accessor' translated icon: UITheme current smallLanguageIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'unknown-var' stamp: 'GiselaDecuzzi 4/19/2013 17:21'! createVariableCorrection " " "Unable because it's not fully implemented" | variables index | ^ SugsSuggestion for: [:context | variables := context selectedClass allInstVarNames asArray sort. index := UIManager default chooseFrom: variables. UIManager default inform:(variables at: index) ] named: 'Correct variable to...' translated icon: ThemeIcons smallFindIcon. ! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/19/2013 10:57'! createVariableStoresInto ^ SugsSuggestion for: [ :context | context tools browseAllStoresInto: context selectedVariableName from: context selectedClass ] named: 'Stores Into...' translated icon: UITheme current smallInspectItIcon position: 60! ! !PluggableTextMorph methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 3/28/2013 12:36'! smartSuggestions self handleEdit: [textMorph editor smartSuggestions]! ! Scanner class removeSelector: #allowUnderscoreAsAssignment:! Parser class removeSelector: #allowBlockArgumentAssignment! "AST-Core"! "Compiler"! "Settings-Compiler"! "SmartSuggestions"! ----End fileIn----! ----QUIT----an Array(25 April 2013 10:57:08 am) Pharo.image priorSource: 2133956! ----STARTUP----an Array(25 April 2013 11:03:08 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 April 2013 11:03:08 am) Pharo-30060.image priorSource: 2200396! ----STARTUP----an Array(26 April 2013 11:17:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/25/2013 15:36' prior: 35688691! commentForCurrentUpdate ^ '10400 add #evaluate to TPureBehavior and SmalltakImage https://pharo.fogbugz.com/f/cases/10400/ 10397 Underscore cleanUp, Part 2 https://pharo.fogbugz.com/f/filters/35 10395 DNU SmallInteger>>#add: when loading metacello configuration https://pharo.fogbugz.com/f/cases/10395 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/25/2013 15:36'! script159 ^ 'AST-Core-MarcusDenker.131.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.14.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-StephaneDucasse.6.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-StephaneDucasse.592.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.392.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.25.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1374.mcz KernelTests-MarcusDenker.488.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.789.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1402.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.9.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.93.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.58.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1078.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.468.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/25/2013 15:36'! update30061 "self new update30061" self withUpdateLog: '10400 add #evaluate to TPureBehavior and SmalltakImage https://pharo.fogbugz.com/f/cases/10400/ 10397 Underscore cleanUp, Part 2 https://pharo.fogbugz.com/f/filters/35 10395 DNU SmallInteger>>#add: when loading metacello configuration https://pharo.fogbugz.com/f/cases/10395 '. self loadTogether: self script159 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Scanner commentStamp: '' prior: 32694791! I scan a string or text, picking out Smalltalk syntactic tokens. I look one character ahead. I put each token found into the instance variable, token, and its type (a Symbol) into the variable, tokenType. At the end of the input stream, I pretend to see an endless sequence of special characters called doits.! !RBInlineMethodTest methodsFor: 'tests' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30680296! testInlineMethodForSuperSend | refactoring | model := Smalltalk evaluate: self inlineMethodTestData. (model classNamed: #RBRenameVariableChange) removeMethod: #executeNotifying:. refactoring := RBInlineMethodRefactoring model: model inline: (self convertInterval: (102 to: 131) for: ((model classNamed: #RBRenameInstanceVariableChange) sourceCodeFor: #executeNotifying:)) inMethod: #executeNotifying: forClass: (model classNamed: #RBRenameInstanceVariableChange). self executeRefactoring: refactoring. self assert: ((model classNamed: #RBRenameInstanceVariableChange) parseTreeFor: #executeNotifying:) = (RBParser parseMethod: 'executeNotifying: aBlock | undo undos undo1 | self addNewVariable. self copyOldValuesToNewVariable. undos := changes collect: [:each | each executeNotifying: aBlock]. undo1 := self copy. undo1 changes: undos reverse. undo := undo1. self removeOldVariable. ^undo')! ! !RBInlineMethodTest methodsFor: 'failure tests' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30672815! testInlineMethodForSuperSendThatAlsoSendsSuper | refactoring | model := Smalltalk evaluate: self inlineMethodTestData. refactoring := RBInlineMethodRefactoring inline: (102 to: 131) inMethod: #executeNotifying: forClass: (model classNamed: #RBRenameInstanceVariableChange). self shouldFail: refactoring! ! !RBAbstractClassVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 30157807! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !DoItDeclaration methodsFor: 'importing' stamp: 'MarcusDenker 4/25/2013 15:08' prior: 20937024! import self flag: #fixme. "Ugly hack to parse preamble and postcript as a do it." ((contents beginsWith: '"Change Set:') and: [ChangeSet current preambleString == nil]) ifTrue: [ChangeSet current preambleString: contents]. ((contents beginsWith: '"Postscript:') and: [ChangeSet current postscriptString == nil]) ifTrue: [ChangeSet current postscriptString: contents]. ^Smalltalk evaluate: contents logged: false.! ! !RBAddParameterTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30216897! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !BlocEditor methodsFor: 'initialization' stamp: 'MarcusDenker 4/25/2013 15:08' prior: 18205620! okAction text accept. block contents: (Smalltalk evaluate: (String streamContents: [:s | s << '[' << text getText <<']'])).! ! !RBBrowserEnvironmentTest methodsFor: 'private' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30360300! storeStringFor: aBrowserEnvironment | newEnvironment | newEnvironment := Smalltalk evaluate: aBrowserEnvironment storeString. self assert: newEnvironment numberSelectors = aBrowserEnvironment numberSelectors. self assert: (newEnvironment not & aBrowserEnvironment) numberSelectors = 0 ! ! !MCHttpRepository methodsFor: 'i/o' stamp: 'EstebanLorenzano 4/25/2013 10:50' prior: 24806372! readStreamForFileNamed: aString do: aBlock | client | self displayProgress: 'Downloading ', aString during: [ client := self httpClient. client ifFail: [ :exception | self error: 'Could not load ', aString, ': ', exception printString ]; get: (self urlForFileNamed: aString). self assertBinaryResponse: client response. "immediately cache the version and avoid an unnecessary serialization" self cacheRawVersionNamed: aString stream: client contents ]. ^ aBlock value: client contents readStream! ! !RBAddClassVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 30192144! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !RBCreateAccessorsForVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30512045! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !RBAddInstanceVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 30196730! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !FLMethodContextSerializationTest methodsFor: 'tests' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 21597230! testDoIt "Serialization of DoIt methods should be possible by default." | context | [ Smalltalk evaluate: 'self error' ] on: Error do: [:error | context:= error signalerContext copyStack ]. self serialize: context! ! !DateTest methodsFor: 'Tests' stamp: 'MarcusDenker 4/25/2013 15:08' prior: 20471032! testStoring | expected actual | expected := '''2 June 1973'' asDate'. actual := june2nd1973 storeString. self assert: actual equals: expected; assert: (Smalltalk evaluate: expected) equals: june2nd1973. "Evaluating expected to avoid surprises when evaluating" ! ! !RBAbstractInstanceVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 30165197! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !SmalltalkImage methodsFor: 'compiler' stamp: 'MarcusDenker 4/25/2013 15:05'! evaluate: aString ^self compilerClass evaluate: aString! ! !EvaluateCommandLineHandler methodsFor: 'commands' stamp: 'MarcusDenker 4/25/2013 15:08' prior: 21248882! evaluate: aStream [ self stdout print: (Smalltalk evaluate: aStream); lf ] on: Error, ParserNotification do: [ :e| self handleError: e ].! ! !RBChildrenToSiblingsTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30387516! setUp super setUp. model := Smalltalk evaluate: self childrenToSiblingTestData! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/25/2013 15:05'! evaluate: aString ^self compilerClass evaluate: aString! ! !RBAddMethodTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:10' prior: 30208562! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'EstebanLorenzano 4/24/2013 18:29' prior: 25767186! setFor: attributeList do: aBlock "conditional version support" attributeList asMetacelloAttributeList do: [ :attribute | | blockList | blockList := self attributeMap at: attribute ifAbsentPut: [ OrderedCollection new ]. blockList add: aBlock . self addAttribute: attribute ]! ! !Scanner commentStamp: '' prior: 35765718! I scan a string or text, picking out Smalltalk syntactic tokens. I look one character ahead. I put each token found into the instance variable, token, and its type (a Symbol) into the variable, tokenType. At the end of the input stream, I pretend to see an endless sequence of special characters called doits.! !RBAddClassTest methodsFor: 'set up' stamp: 'MarcusDenker 4/25/2013 15:09' prior: 30186030! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! Scanner removeSelector: #allowUnderscoreAsAssignment! Scanner class removeSelector: #allowUnderscoreAsAssignment! String class removeSelector: #denyUnderscore! String class removeSelector: #allowUnderscore:! String class removeSelector: #allowUnderscore! !Trait method! evaluate: aString ^self compilerClass evaluate: aString! ! !Trait method! evaluate: aString ^self compilerClass evaluate: aString! ! "CodeImport"! "Compiler"! "FuelTests"! "KernelTests"! "Metacello-Core"! "Monticello"! "Refactoring-Tests-Core"! "Refactoring-Tests-Environment"! "Spec-Tools"! "System-CommandLine"! "System-Support"! !DoItDeclaration methodsFor: 'importing' stamp: 'BenjaminVanRyseghem 4/25/2013 19:28' prior: 35767866! import self flag: #fixme. "Ugly hack to parse preamble and postcript as a do it." ((contents beginsWith: '"Change Set:') and: [ChangeSet current preambleString == nil]) ifTrue: [ChangeSet current preambleString: contents]. ((contents beginsWith: '"Postscript:') and: [ChangeSet current postscriptString == nil]) ifTrue: [ChangeSet current postscriptString: contents]. ^Smalltalk compiler class evaluate: contents logged: false.! ! "CodeImport"! ----End fileIn----! ----QUIT----an Array(26 April 2013 11:18:07 am) Pharo.image priorSource: 2200598! ----STARTUP----an Array(26 April 2013 11:24:13 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 11:24:13 am) Pharo-30061.image priorSource: 2219897! ----STARTUP----an Array(26 April 2013 11:52:56 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/26/2013 11:49' prior: 35755333! commentForCurrentUpdate ^ '10403 Class comments in Kernel and Collections https://pharo.fogbugz.com/f/cases/10403 10404 Improve RBScanner error handling https://pharo.fogbugz.com/f/cases/10404 10352 Fix for MorphTreeMorph>>updateList https://pharo.fogbugz.com/f/cases/10352 10410 remove #makeSelectorBold and #makeSelectorBoldIn: https://pharo.fogbugz.com/f/cases/10410/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/26/2013 11:49'! script160 ^ 'AST-Core-MarcusDenker.134.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.392.mcz CompilerTests-MarcusDenker.134.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1376.mcz KernelTests-MarcusDenker.490.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.789.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.9.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1080.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.468.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 11:49'! update30062 "self new update30062" self withUpdateLog: '10403 Class comments in Kernel and Collections https://pharo.fogbugz.com/f/cases/10403 10404 Improve RBScanner error handling https://pharo.fogbugz.com/f/cases/10404 10352 Fix for MorphTreeMorph>>updateList https://pharo.fogbugz.com/f/cases/10352 10410 remove #makeSelectorBold and #makeSelectorBoldIn: https://pharo.fogbugz.com/f/cases/10410/ '. self loadTogether: self script160 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TDateTimeTest commentStamp: '' prior: 0! I am a helper Trait for date tests. By providing methods to locally change the time zones I simplify date and time tests.! !CollectionsArithmeticReadme commentStamp: '' prior: 0! This package only makes extensions to existing collection classes by adding the arithmetic protocols. Such protocols allow one to perform in particular vector-operations on collection! !DatePrintFormatTester commentStamp: '' prior: 0! I am a helper object used for validating formatted Date strings. ! !MockFinalizerAction commentStamp: '' prior: 0! I am test object used for the WeakRegisty tests. Upon finalization I trigger a custom finalizationAction (usually a Block)! !VileFinalizer commentStamp: '' prior: 0! I am test object used for a WeakRegistry test. I add myself to a given WeakRegistry and on finalization I modify the very same registry by removing myself from it.! !MockExceptionWithPassAction commentStamp: '' prior: 0! I am Exception used in the Weak collection tests which has a custom pass action. Instead of using the Exception's default pass mechanism I will call a customized block.! !UnhandledError commentStamp: '' prior: 0! I am the ultimate error. By default if an Error or Exception is not handled by the code the default action is to raise an UnhandledError which in interactive mode triggers the UIManager to open a debugger. Error signal ... UnhandledError signalForException: error ... UIManager opens a debugger ! !DuplicatedVariableError commentStamp: '' prior: 0! I am an error signalled when a variable is redeclared. For instance when a method is created wich has a temporary or argument with the same name as an instance variable.! !TDateTimeTest commentStamp: '' prior: 35785355! I am a helper Trait for date tests. By providing methods to locally change the time zones I simplify date and time tests.! !CollectionsArithmeticReadme commentStamp: '' prior: 35785546! This package only makes extensions to existing collection classes by adding the arithmetic protocols. Such protocols allow one to perform in particular vector-operations on collection! !DatePrintFormatTester commentStamp: '' prior: 35785794! I am a helper object used for validating formatted Date strings. ! !MockFinalizerAction commentStamp: '' prior: 35785922! I am test object used for the WeakRegisty tests. Upon finalization I trigger a custom finalizationAction (usually a Block)! !MockFinalizerAction methodsFor: 'accessing' stamp: 'CamilloBruni 4/25/2013 16:20'! finalizationAction: aValuable finalizationAction := aValuable! ! !MockFinalizerAction methodsFor: 'accessing' stamp: 'CamilloBruni 4/25/2013 16:20' prior: 26536570! finalize finalizationAction value! ! !MockFinalizerAction methodsFor: 'accessing' stamp: 'CamilloBruni 4/25/2013 16:20' prior: 26536684! finalizeValues finalizationAction value! ! !VileFinalizer commentStamp: '' prior: 35786100! I am test object used for a WeakRegistry test. I add myself to a given WeakRegistry and on finalization I modify the very same registry by removing myself from it.! !VileFinalizer methodsFor: 'finalization' stamp: 'Igor.Stasenko 10/11/2010 13:29' prior: 54663105! finalize weakRegistry remove: self ifAbsent: [].! ! !VileFinalizer methodsFor: 'initialize-release' stamp: 'CamilloBruni 4/25/2013 16:18' prior: 54663249! initialize: registry weakRegistry := registry. weakRegistry add: self.! ! !WeakRegistryTest methodsFor: 'tests' stamp: 'CamilloBruni 4/25/2013 16:20' prior: 54821726! testFinalizationWithBadFinalizer " Test that if error occurs during finalization, the finalization process continues to run normally. This test tests that if we adding a faulty finalizer to WeakArray's finalization dependants, its not causing troubles to the finalization process. " | mock1 mock2 sema timedOut | mock1 := MockFinalizerAction new finalizationAction: [ self signalMockException ]. mock2 := MockFinalizerAction new finalizationAction: [ sema signal ]. sema := Semaphore new. WeakArray addWeakDependent: mock1; addWeakDependent: mock2. errorWasHere := false. Smalltalk garbageCollect. timedOut := sema waitTimeoutSeconds: 1. self assert: (errorWasHere == true). self assert: (timedOut == false) ! ! !WeakRegistryTest methodsFor: 'tests' stamp: 'CamilloBruni 4/25/2013 16:20' prior: 54823048! testFinalizationWithOnFork " Test that if error occurs during finalization, the finalization process continues to run normally. We addting two executors into weak registry: the faulty one, which causing an error and good one, which signals semaphore test shows that both finalizers are evaluated and error doesn't prevents a good finalizer from execution " | reg obj1 obj2 sema timedOut | reg := WeakRegistry new. sema := Semaphore new. WeakArray removeWeakDependent: reg. obj1 := Array new: 1. obj2 := Array new: 2. reg add: obj1 executor: ( MockFinalizerAction new finalizationAction: [ self signalMockException ] ). reg add: obj2 executor: ( MockFinalizerAction new finalizationAction: [ sema signal ] ). errorWasHere := false. obj1 := obj2 := nil. Smalltalk garbageCollect. reg finalizeValues. timedOut := sema waitTimeoutSeconds: 1. self assert: (errorWasHere == true). self assert: (timedOut == false) ! ! !WeakRegistryTest methodsFor: 'tests' stamp: 'CamilloBruni 4/25/2013 16:16' prior: 54826518! testVileFinalizer " this test checks that manipulation (or accessing) a weak registry does not lead to deadlocks when performed from within a #finalize implementation" | reg villian proc locked | reg := WeakRegistry new. WeakArray removeWeakDependent: reg. "to prevent test interference with finalization process" villian := VileFinalizer new initialize: reg. "add object with vile finalization to registry" locked := true. proc := [ reg finalizeValues. locked := false ] newProcess. villian := nil. Smalltalk garbageCollect. proc resume. 100 milliSeconds wait. "give chance for created process to run " proc isTerminated ifFalse: [ proc terminate ]. self assert: locked == false. ! ! !MockExceptionWithPassAction commentStamp: '' prior: 35786333! I am Exception used in the Weak collection tests which has a custom pass action. Instead of using the Exception's default pass mechanism I will call a customized block.! !MockExceptionWithPassAction methodsFor: 'handling' stamp: 'IgorStasenko 5/23/2011 13:07' prior: 26536010! pass ^ passAction cull: self! ! !MockExceptionWithPassAction methodsFor: 'accessing' stamp: 'IgorStasenko 5/23/2011 13:07' prior: 26536146! passAction: aValuable passAction := aValuable! ! !UnhandledError commentStamp: '' prior: 35786558! I am the ultimate error. By default if an Error or Exception is not handled by the code the default action is to raise an UnhandledError which in interactive mode triggers the UIManager to open a debugger. Error signal ... UnhandledError signalForException: error ... UIManager opens a debugger ! !RBScanner methodsFor: 'private-scanning' stamp: 'MarcusDenker 4/25/2013 16:30' prior: 31295817! scanNumber | start number stop string | start := stream position. stream position: start - 1. number := [SqNumberParser parse: stream] on: Error do: [:err | self scannerError: err messageText]. stop := stream position. stream position: start - 1. string := stream next: stop - start + 1. stream position: stop. self step. ^RBNumberLiteralToken value: number start: start stop: stop source: string! ! !RBScanner methodsFor: 'error handling' stamp: 'MarcusDenker 4/25/2013 16:36' prior: 31290727! scannerError: aString "Evaluate the block. If it returns raise an error" self errorBlock cull: aString cull: self errorPosition cull: self. ^ SyntaxErrorNotification inClass: Object category: nil withCode: stream contents doitFlag: false errorMessage: aString location: stream position + 1! ! !DecompileMethodConverter methodsFor: 'private' stamp: 'MarcusDenker 4/26/2013 10:09' prior: 20561109! internalGetText ^ method method decompileWithTemps decompileString! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 4/26/2013 10:09' prior: 35585488! selectedMessage "Answer a copy of the source code for the selected message selector." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. self browseWithPrettyPrint ifTrue: [contents := class compilerClass format: contents in: class notifying: nil]. self showingAnyKindOfDiffs ifTrue: [contents := self methodDiffFor: contents class: self selectedClass selector: self selectedMessageName meta: self metaClassIndicated]. ^contents! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'HilaireFernandes 4/21/2013 16:52' prior: 26998776! updateList |value| value := scrollBar value. self updateContentsWithPreviouslyExpanded: self currentlyExpanded. self vScrollValue: value! ! !SmalltalkEditor methodsFor: 'menu messages' stamp: 'MarcusDenker 4/26/2013 10:06' prior: 33465349! prettyPrint "Reformat the contents of the receiver's view (a Browser)." | selectedClass newText | model selectedMessageName ifNil: [^ morph flash]. selectedClass := self modelCurrentSelectedClass. newText := selectedClass compilerClass new format: self text in: selectedClass notifying: self. newText ifNotNil: [ self selectInvisiblyFrom: 1 to: self paragraph text size. self replaceSelectionWith: newText. self selectAt: 1]! ! !CodeHolder methodsFor: 'contents' stamp: 'MarcusDenker 4/26/2013 10:10' prior: 19435248! commentContents "documentation for the selected method" | poss aClass aSelector | ^ (poss := (aClass := self selectedClassOrMetaClass) ifNil: ['----'] ifNotNil: [(aSelector := self selectedMessageName) ifNil: ['---'] ifNotNil: [(aClass precodeCommentOrInheritedCommentFor: aSelector)", String cr, String cr, self timeStamp" "which however misses comments that are between the temps declaration and the body of the method; those are picked up by ·aClass commentOrInheritedCommentFor: aSelector· but that method will get false positives from comments *anywhere* in the method source"]]) isEmptyOrNil ifTrue: [aSelector ifNotNil: [((aClass methodHeaderFor: aSelector), ' Has no comment') asText] ifNil: ['Hamna']] ifFalse: [aSelector ifNotNil: [((aClass methodHeaderFor: aSelector), ' ', poss) asText] ifNil: [poss]]! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/26/2013 10:09' prior: 19449934! decompiledSourceIntoContents "Obtain a source string by decompiling the method's code, and place that source string into my contents. Also return the string. Get temps from source file if shift key is pressed." | class | class := self selectedClassOrMetaClass. "Was method deleted while in another project?" currentCompiledMethod := (class compiledMethodAt: self selectedMessageName ifAbsent: [^ '']). contents := (World activeHand shiftPressed not) ifTrue: [[currentCompiledMethod decompileWithTemps] ifError: [currentCompiledMethod decompile]] ifFalse: [currentCompiledMethod decompile]. contents := contents decompileString. ^ contents copy! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/26/2013 10:09' prior: 19450982! selectedMessage "Answer a copy of the source code for the selected message. This generic version is probably actually never reached, since every subclass probably reimplements and does not send to super. In time, ideally, most, or all, reimplementors would vanish and all would defer instead to a universal version right here. Everything in good time." | class selector method | contents ifNotNil: [^ contents copy]. self showingDecompile ifTrue:[^ self decompiledSourceIntoContents]. class := self selectedClassOrMetaClass. (class isNil or: [(selector := self selectedMessageName) isNil]) ifTrue: [^ '']. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := (self showComment ifFalse: [self sourceStringPrettifiedAndDiffed] ifTrue: [ self commentContents]) copy! ! !TimeProfiler methodsFor: 'accessing-computed' stamp: 'MarcusDenker 4/26/2013 10:08' prior: 53168681! selectedMethodCode ^ self selectedNode ifNil: [ self helpMessage ] ifNotNil: [ :currNode | | class selector | class := currNode methodClass. selector := currNode selector. (class ultimateSourceCodeAt: selector ifAbsent: [ 'error' ])]! ! !Browser methodsFor: 'message list' stamp: 'MarcusDenker 4/26/2013 10:09' prior: 18491116! selectedMessage "Answer a copy of the source code for the selected message." | class selector method | contents == nil ifFalse: [^ contents copy]. self showingDecompile ifTrue: [^ self decompiledSourceIntoContents]. class := self selectedClassOrMetaClass. selector := self selectedMessageName. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := (self showingDocumentation ifFalse: [ self sourceStringPrettifiedAndDiffed ] ifTrue: [ self commentContents ]) copy ! ! !ChangeSorterModel methodsFor: 'text' stamp: 'MarcusDenker 4/26/2013 10:10' prior: 35588110! buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff | changeType code | changeType := changeSet atSelector: selector class: class name. changeType == #remove ifTrue: [^ 'Method has been removed (see versions)']. changeType == #addedThenRemoved ifTrue: [^ 'Added then removed (see versions)']. class ifNil: [^ 'Method was added, but cannot be found!!']. (class includesSelector: selector) ifFalse: [^ 'Method was added, but cannot be found!!']. code := class sourceCodeAt: selector. prettyPrint ifTrue: [ code := class compilerClass format: code in: class notifying: nil ]. showDiff ifTrue: [ code := self diffFromPriorSourceFor: code ]. ^ code asText! ! !DuplicatedVariableError commentStamp: '' prior: 35786927! I am an error signalled when a variable is redeclared. For instance when a method is created wich has a temporary or argument with the same name as an instance variable.! !Debugger methodsFor: 'context stack (message list)' stamp: 'MarcusDenker 4/26/2013 10:05' prior: 20507772! selectedMessage "Answer the source code of the currently selected context." ^contents := self selectedContext sourceCode! ! Text removeSelector: #makeSelectorBoldIn:! Text removeSelector: #makeSelectorBold! CollectionsArithmeticReadme removeSelector: #readme! DebugContext removeSelector: #sourceText! MockFinalizerAction removeSelector: #finAction:! "AST-Core"! "Collections-Arithmetic"! "CollectionsTests"! "DebuggerModel"! "Kernel"! "KernelTests"! "Morphic"! "Spec-Tools"! "Text"! "Tools"! ----End fileIn----! ----QUIT----an Array(26 April 2013 11:53:12 am) Pharo.image priorSource: 2220099! ----STARTUP----an Array(26 April 2013 11:59:19 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 11:59:19 am) Pharo-30062.image priorSource: 2246165! ----STARTUP----an Array(26 April 2013 3:09:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/26/2013 15:06' prior: 35774834! commentForCurrentUpdate ^ ' 10413 clean up unused code in Scanner and Parser https://pharo.fogbugz.com/f/cases/1041 10414 Clean up preference Compiler warning (will come back later) https://pharo.fogbugz.com/f/cases/10414 10417 Some more Compiler related cleanUps https://pharo.fogbugz.com/f/cases/10417'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/26/2013 15:06'! script161 ^ 'AST-Core-MarcusDenker.134.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.396.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1378.mcz KernelTests-MarcusDenker.490.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.789.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.118.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1080.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.470.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 15:06'! update30063 "self new update30063" self withUpdateLog: ' 10413 clean up unused code in Scanner and Parser https://pharo.fogbugz.com/f/cases/1041 10414 Clean up preference Compiler warning (will come back later) https://pharo.fogbugz.com/f/cases/10414 10417 Some more Compiler related cleanUps https://pharo.fogbugz.com/f/cases/10417'. self loadTogether: self script161 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Parser commentStamp: '' prior: 35701151! I parse Smalltalk syntax and create a MethodNode that is the root of the parse tree. I look one token ahead.! !BlockLocalTempCounter commentStamp: '' prior: 18280208! I am a support class for the decompiler that is used to find the number of local temps in a block by finding out what the stack offset is at the end of a block.! !Parser commentStamp: '' prior: 35811481! I parse Smalltalk syntax and create a MethodNode that is the root of the parse tree. I look one token ahead.! !Parser class methodsFor: 'setting' stamp: 'MarcusDenker 4/26/2013 13:11' prior: 29162839! warningAllowed ^true! ! !CompilerExceptionsTest methodsFor: 'setUp' stamp: 'MarcusDenker 4/26/2013 13:11' prior: 19921866! setUp self removeGeneratedMethods.! ! !BlockLocalTempCounter commentStamp: '' prior: 35811660! I am a support class for the decompiler that is used to find the number of local temps in a block by finding out what the stack offset is at the end of a block.! !BlockLocalTempCounter class methodsFor: 'instance creation' stamp: 'eem 9/23/2008 16:07' prior: 18288649! tempCountForBlockAt: pc in: method ^self new tempCountForBlockAt: pc in: method! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 11:36' prior: 18282819! blockReturnTop "Return Top Of Stack bytecode." stackPointer := stackPointer - 1. scanner pc < blockEnd ifTrue: [self doJoin]! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:13' prior: 18283041! doDup "Duplicate Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'private' stamp: 'eem 9/26/2008 13:40' prior: 18288353! doJoin scanner pc < blockEnd ifTrue: [stackPointer := joinOffsets at: scanner pc]! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:17' prior: 18283209! doPop "Remove Top Of Stack bytecode." stackPointer := stackPointer - 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 13:40' prior: 18283374! jump: offset "Unconditional Jump bytecode." offset > 0 ifTrue: [joinOffsets at: scanner pc + offset put: stackPointer. self doJoin]! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 13:40' prior: 18283605! jump: offset if: condition "Conditional Jump bytecode." stackPointer := stackPointer - 1. offset > 0 ifTrue: [joinOffsets at: scanner pc + offset put: stackPointer]! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 11:36' prior: 18283868! methodReturnConstant: value "Return Constant bytecode." self doJoin! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 11:36' prior: 18284031! methodReturnReceiver "Return Self bytecode." self doJoin! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/26/2008 11:36' prior: 18284182! methodReturnTop "Return Top Of Stack bytecode." stackPointer := stackPointer - 1. self doJoin! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:19' prior: 18284371! popIntoLiteralVariable: anAssociation "Remove Top Of Stack And Store Into Literal Variable bytecode." stackPointer := stackPointer - 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:19' prior: 18284601! popIntoReceiverVariable: offset "Remove Top Of Stack And Store Into Instance Variable bytecode." stackPointer := stackPointer - 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:19' prior: 18284826! popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex "Remove Top Of Stack And Store Into Offset of Temp Vector bytecode." stackPointer := stackPointer - 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:20' prior: 18285085! popIntoTemporaryVariable: offset "Remove Top Of Stack And Store Into Temporary Variable bytecode." stackPointer := stackPointer - 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:20' prior: 18285312! pushActiveContext "Push Active Context On Top Of Its Own Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:16' prior: 18285513! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize "Push Closure bytecode. Either compute the end of the block if this is the block we're analysing, or skip it, adjusting the stack as appropriate." blockEnd ifNil: [blockEnd := scanner pc + blockSize] ifNotNil: [stackPointer := stackPointer - numCopied + 1. scanner pc: scanner pc + blockSize]! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:21' prior: 18285994! pushConsArrayWithElements: numElements "Push Cons Array of size numElements popping numElements items from the stack into the array bytecode." stackPointer := stackPointer - numElements + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:21' prior: 18286278! pushConstant: value "Push Constant, value, on Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:22' prior: 18286475! pushLiteralVariable: anAssociation "Push Contents Of anAssociation On Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:22' prior: 18286696! pushNewArrayOfSize: numElements "Push New Array of size numElements bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:22' prior: 18286903! pushReceiver "Push Active Context's Receiver on Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:23' prior: 18287102! pushReceiverVariable: offset "Push Contents Of the Receiver's Instance Variable Whose Index is the argument, offset, On Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:23' prior: 18287375! pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex "Push Contents at Offset in Temp Vector bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:23' prior: 18287613! pushTemporaryVariable: offset "Push Contents Of Temporary Variable Whose Index Is the argument, offset, On Top Of Stack bytecode." stackPointer := stackPointer + 1! ! !BlockLocalTempCounter methodsFor: 'instruction decoding' stamp: 'eem 9/23/2008 16:24' prior: 18287873! send: selector super: supered numArgs: numberArguments "Send Message With Selector, selector, bytecode. The argument, supered, indicates whether the receiver of the message is specified with 'super' in the source method. The arguments of the message are found in the top numArguments locations on the stack and the receiver just below them." stackPointer := stackPointer - numberArguments! ! !BlockLocalTempCounter methodsFor: 'initialize-release' stamp: 'eem 9/26/2008 13:40' prior: 18280458! tempCountForBlockAt: pc in: method "Compute the number of local temporaries in a block. If the block begins with a sequence of push: nil bytecodes then some of These could be initializing local temps. We can only reliably disambuguate them from other uses of nil by parsing the stack and seeing what the offset of the stack pointer is at the end of the block. There are short-cuts. The ones we take here are - if there is no sequence of push nils there can be no local temps - we follow forward jumps to shorten the amount of scanning" stackPointer := 0. scanner := InstructionStream new method: method pc: pc. scanner interpretNextInstructionFor: self. blockEnd isNil ifTrue: [self error: 'pc is not that of a block']. scanner nextByte = Encoder pushNilCode ifTrue: [joinOffsets := Dictionary new. [scanner pc < blockEnd] whileTrue: [scanner interpretNextInstructionFor: self]]. ^stackPointer! ! !BlockLocalTempCounter methodsFor: 'initialize-release' stamp: 'eem 9/26/2008 13:41' prior: 18281476! testTempCountForBlockAt: startPc in: method "Compute the number of local temporaries in a block. If the block begins with a sequence of push: nil bytecodes then some of These could be initializing local temps. We can only reliably disambuguate them from other uses of nil by parsing the stack and seeing what the offset of the stack pointer is at the end of the block.There are short-cuts. The only one we take here is - if there is no sequence of push nils there can be no local temps" | symbolicLines line prior thePc | symbolicLines := Dictionary new. method symbolicLinesDo: [:pc :lineForPC| symbolicLines at: pc put: lineForPC]. stackPointer := 0. scanner := InstructionStream new method: method pc: startPc. scanner interpretNextInstructionFor: self. blockEnd isNil ifTrue: [self error: 'pc is not that of a block']. scanner nextByte = Encoder pushNilCode ifTrue: [joinOffsets := Dictionary new. [scanner pc < blockEnd] whileTrue: [line := symbolicLines at: scanner pc. prior := stackPointer. thePc := scanner pc. scanner interpretNextInstructionFor: self. Transcript cr; print: prior; nextPutAll: '->'; print: stackPointer; tab; print: thePc; tab; nextPutAll: line; flush]]. ^stackPointer! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 4/26/2013 13:12' prior: 35722516! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}. (aBuilder setting: #allowNonBooleanReceivers) target: OpalCompiler; label: 'Allow non-boolean optimized sends' ; description: 'If checked we do magic'.]! ! CompilerExceptionsTest removeSelector: #tearDown! MirrorPrimitiveTests removeSelector: #testMirrorSize! MirrorPrimitiveTests removeSelector: #testMirrorPerform! MirrorPrimitiveTests removeSelector: #testMirrorInstVarAt! MirrorPrimitiveTests removeSelector: #testMirrorEqEq! MirrorPrimitiveTests removeSelector: #testMirrorClass! MirrorPrimitiveTests removeSelector: #testMirrorAt! Smalltalk globals removeClassNamed: #MirrorPrimitiveTests! Scanner removeSelector: #typedScanTokens:! Scanner removeSelector: #scanTokenPositionsIn:into:! Scanner removeSelector: #scanStringStruct:! Scanner removeSelector: #scanMessageParts:! Scanner removeSelector: #scanFieldNames:! Scanner removeSelector: #nextLiteral! Scanner removeSelector: #errorMultibyteCharacter! Scanner removeSelector: #checkpoint! Scanner class removeSelector: #wellFormedInstanceVariableNameFrom:! Scanner class removeSelector: #inviolateInstanceVariableNames! TPureBehavior removeSelector: #formalHeaderPartsFor:! Parser removeSelector: #pragmaLiteral! Parser removeSelector: #parseMethodComment:setPattern:! Parser class removeSelector: #warningAllowed:! Parser class removeSelector: #warnUser! Parser class removeSelector: #silent! Parser class removeSelector: #doNotWarnUser! Smalltalk globals removeClassNamed: #UndeclaredVariableReference! "Compiler"! "CompilerTests"! "Kernel"! "Settings-Compiler"! "Traits"! ----End fileIn----! ----QUIT----an Array(26 April 2013 3:10:06 pm) Pharo.image priorSource: 2246367! ----STARTUP----an Array(26 April 2013 3:16:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 3:16:11 pm) Pharo-30063.image priorSource: 2268660! ----STARTUP----an Array(26 April 2013 4:30:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !TraitDescription methodsFor: 'private' stamp: 'MarcusDenker 4/24/2013 16:24'! logMethodSource2: aText forMethodWithNode: aCompiledMethod inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !ClassDescription methodsFor: 'private' stamp: 'MarcusDenker 4/24/2013 16:23'! logMethodSource2: aText forMethodWithNode: aCompiledMethod inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: []) ! ! !OCSourceCode2BytecodeTest methodsFor: 'compiling' stamp: 'MarcusDenker 4/24/2013 16:07' prior: 35230052! compile2methodNode: sourceStream "Compile code without logging the source in the changes file" | methodNode | methodNode := OpalCompiler new from: sourceStream class: self class classified: nil context: nil notifying: nil; translate: sourceStream noPattern: false ifFail: [^ nil]. ^ methodNode generate: CompiledMethodTrailer empty! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/24/2013 16:22'! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compilerClass new compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !Trait method! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compilerClass new compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !Trait method! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compilerClass new compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'ClementBera 4/24/2013 16:39' prior: 51833039! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text asString classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: text asString forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/24/2013 16:15' prior: 35585009! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! !Trait method! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'ClementBera 4/24/2013 16:40' prior: 52094546! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile2: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile2: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile2: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TPureBehavior methodsFor: 'traits' stamp: 'ClementBera 4/24/2013 16:39' prior: 52123777! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile2: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !TraitBehavior methodsFor: 'traits' stamp: 'ClementBera 4/24/2013 16:40' prior: 53329903! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile2: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method "self addAndClassifySelector: aSymbol withMethod: methodAndNode method inProtocol: aCompiledMethod category notifying: nil"! ! !Behavior methodsFor: 'traits' stamp: 'MarcusDenker 4/24/2013 16:22' prior: 18072297! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile2: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 4/24/2013 16:06' prior: 35230552! testDoDup | selector methodNode scanner | methodNode := self compile2methodNode: 'duplicateTopBytecode 3 + 4; yourself'. selector := methodNode selector. scanner := InstructionStream on: methodNode method. 1 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #doDup description: 'Failed ' , selector! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/24/2013 16:15'! putSource: sourceStr class: class category: catName inFile: fileIndex priorMethod: priorMethod ^ self putSource: sourceStr inFile: fileIndex withPreamble: [:file | class printCategoryChunk: catName on: file priorMethod: priorMethod. file cr]! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/24/2013 16:15'! putSource: sourceStr class: class category: catName withStamp: changeStamp inFile: fileIndex priorMethod: priorMethod ^ self putSource: sourceStr inFile: fileIndex withPreamble: [:file | class printCategoryChunk: catName on: file withStamp: changeStamp priorMethod: priorMethod. file cr]! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 4/24/2013 16:12'! putSource: sourceStr inFile: fileIndex withPreamble: preambleBlock "Store the source code for the receiver on an external file. If no sources are available, i.e., SourceFile is nil, then store temp names for decompilation at the end of the method. If the fileIndex is 1, print on *.sources; if it is 2, print on *.changes, in each case, storing a 4-byte source code pointer at the method end." | file remoteString | (SourceFiles == nil or: [(file := SourceFiles at: fileIndex) == nil]) ifTrue: [^self becomeForward: (self copyWithSource: sourceStr)]. Smalltalk assureStartupStampLogged. file setToEnd. preambleBlock value: file. "Write the preamble" remoteString := RemoteString newString: sourceStr onFileNumber: fileIndex toFile: file. file nextChunkPut: ' '. InMidstOfFileinNotification signal ifFalse: [file flush]. self setSourcePosition: remoteString position inFile: fileIndex! ! !MethodAddition methodsFor: 'operations' stamp: 'ClementBera 4/24/2013 16:38' prior: 26333330! createCompiledMethod compiledMethod := myClass compile2: text asString classified: category notifying: requestor trailer: myClass defaultMethodTrailer ifFail: [^nil]. selector := compiledMethod selector. self writeSourceToLog. priorMethodOrNil := myClass compiledMethodAt: selector ifAbsent: [nil]. priorCategoryOrNil := myClass organization categoryOfElement: selector.! ! !MethodAddition methodsFor: 'operations' stamp: 'ClementBera 4/24/2013 16:38' prior: 26333984! writeSourceToLog logSource ifTrue: [ myClass logMethodSource2: text forMethodWithNode: compiledMethod inCategory: category withStamp: changeStamp notifying: requestor. ]. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'ClementBera 4/24/2013 16:34' prior: 19867287! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compile2: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [^ nil]. method2 := TestCase class compile2: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [^ nil]. self deny: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'ClementBera 4/24/2013 16:34' prior: 19867891! testEqualityInstanceSideMethod | method1 method2 | method1 := TestCase compile2: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [^ nil]. method2 := TestCase compile2: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [^ nil]. self assert: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !TraitDescription methodsFor: 'compiling' stamp: 'ClementBera 4/24/2013 16:40' prior: 53370976! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text asString classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: text asString forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TraitDescription methodsFor: 'private' stamp: 'MarcusDenker 4/24/2013 16:15' prior: 53401268! logMethodSource: aText forMethodWithNode: aCompiledMethodWithNode inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethodWithNode method putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethodWithNode selector ifAbsent: [])! ! !ClassDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/24/2013 16:25' prior: 19212378! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text asString classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: text asString forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !ClassDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/24/2013 16:15' prior: 35584524! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! !ClassDescription methodsFor: 'private' stamp: 'MarcusDenker 4/24/2013 16:15' prior: 19258492! logMethodSource: aText forMethodWithNode: aCompiledMethodWithNode inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethodWithNode method putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethodWithNode selector ifAbsent: []) ! ! !ContextPart class methodsFor: 'simulation' stamp: 'MarcusDenker 4/24/2013 16:10' prior: 20212775! initializeTryNamedPrimitiveTemplateMethod | methodNode | methodNode := Compiler new compile: 'tryNamedPrimitive "This method is a template that the Smalltalk simulator uses to execute primitives. See Object documentation whatIsAPrimitive." ^ ContextPart primitiveFailTokenFor: errorCode' in: UndefinedObject classified: nil notifying: #() ifFail: [ self error: 'method source is incorrect'. ]. TryNamedPrimitiveTemplateMethod := methodNode generate: CompiledMethodTrailer empty. ! ! CompiledMethod removeSelector: #putSource:fromParseNode:class:category:inFile:priorMethod:! CompiledMethod removeSelector: #putSource:fromParseNode:class:category:withStamp:inFile:priorMethod:! CompiledMethod removeSelector: #putSource:fromParseNode:inFile:withPreamble:! ----End fileIn----! ----QUIT----an Array(26 April 2013 4:31:03 pm) Pharo.image priorSource: 2268860! ----STARTUP----an Array(26 April 2013 4:37:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 4:37:05 pm) Pharo-30064.image priorSource: 2286177! ----STARTUP----an Array(26 April 2013 4:49:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Compiler"! "Kernel"! "KernelTests"! "Monticello"! "OpalCompiler-Tests"! "Traits"! ----End fileIn----! ----QUIT----an Array(26 April 2013 4:50:05 pm) Pharo.image priorSource: 2286377! ----STARTUP----an Array(26 April 2013 4:56:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 4:56:27 pm) Pharo-30065.image priorSource: 2286697! ----STARTUP----an Array(26 April 2013 5:37:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/26/2013 17:35' prior: 35801101! commentForCurrentUpdate ^ '10401 Add Amber BlockClosure asynchronous methods into Pharo https://pharo.fogbugz.com/f/cases/10401 10418 cleanUp #methodHeaderFor: https://pharo.fogbugz.com/f/cases/10418 10419 Remove CompiledMethodWithNode (part 2) https://pharo.fogbugz.com/f/cases/10419 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/26/2013 17:16'! script162 ^ 'AST-Core-MarcusDenker.134.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.399.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1381.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1082.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.474.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/26/2013 17:35'! script163 ^ 'AST-Core-MarcusDenker.134.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.400.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1382.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.127.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1083.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.475.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 17:08'! update30064! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 17:09'! update30065! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 17:35'! update30066 "self new update30066" self withUpdateLog: '10401 Add Amber BlockClosure asynchronous methods into Pharo https://pharo.fogbugz.com/f/cases/10401 10418 cleanUp #methodHeaderFor: https://pharo.fogbugz.com/f/cases/10418 10419 Remove CompiledMethodWithNode (part 2) https://pharo.fogbugz.com/f/cases/10419 '. self loadTogether: self script163 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 4/26/2013 10:22'! valueAfterWaiting: aDelay "Waits for a delay, then executes the block" [ aDelay wait. self value ] forkAt: Processor userBackgroundPriority! ! !BlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 4/26/2013 10:16'! valueWithInterval: aDelay "Executes the block every x milliseconds specified in arguments. Answers the continue boolean holder, so that you can set its contents to false to stop the valueWithInterval loop" | continue | continue := true asValueHolder. [ [ continue contents ] whileTrue: [ self value. aDelay wait. ] ] forkAt: Processor userBackgroundPriority. ^ continue! ! !Browser methodsFor: 'message list' stamp: 'MarcusDenker 4/26/2013 15:27' prior: 35798268! selectedMessage "Answer a copy of the source code for the selected message." | class selector method | contents == nil ifFalse: [^ contents copy]. self showingDecompile ifTrue: [^ self decompiledSourceIntoContents]. class := self selectedClassOrMetaClass. selector := self selectedMessageName. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := self sourceStringPrettifiedAndDiffed ! ! !CodeHolder methodsFor: 'contents' stamp: 'MarcusDenker 4/26/2013 15:26' prior: 19436295! contents "Answer the source code or documentation for the selected method" self showingByteCodes ifTrue: [^ self selectedBytecodes]. ^ self selectedMessage! ! !CodeHolder methodsFor: 'contents' stamp: 'MarcusDenker 4/26/2013 15:26' prior: 19437348! contentsSymbolChanged "Inform any dependents of a change in the contents symbol." self changed: #showingAnyKindOfDiffs; changed: #showingBytecodes; changed: #showingDecompile; changed: #showingDiffs; changed: #showingPlainSource; changed: #showingPrettyDiffs; changed: #showingPrettyPrint; changed: #showingRegularDiffs! ! !CodeHolder methodsFor: 'controls' stamp: 'MarcusDenker 4/26/2013 15:25' prior: 19439051! contentsSymbolQuints "Answer a list of quintuplets representing information on the alternative views available in the code pane first element: the contentsSymbol used second element: the selector to call when this item is chosen. third element: the selector to call to obtain the wording of the menu item. fourth element: the wording to represent this view fifth element: balloon help A hypen indicates a need for a seperator line in a menu of such choices" ^ #( (source togglePlainSource showingPlainSourceString 'Source' 'The textual source code as writen') - (prettyPrint togglePrettyPrint prettyPrintString 'PrettyPrint' 'The method source presented in a standard text format') - (showDiffs toggleRegularDiffing showingRegularDiffsString 'ShowDiffs' 'The textual source diffed from its prior version') (prettyDiffs togglePrettyDiffing showingPrettyDiffsString 'PrettyDiffs' 'Formatted textual source diffed from formatted form of prior version') - (decompile toggleDecompile showingDecompileString 'Decompile' 'Source code decompiled from byteCodes') (byteCodes toggleShowingByteCodes showingByteCodesString 'ByteCodes' 'The bytecodes that comprise the compiled method'))! ! !CodeHolder methodsFor: 'misc' stamp: 'MarcusDenker 4/26/2013 15:26' prior: 19458519! okayToAccept "Answer whether it is okay to accept the receiver's input" self showingAnyKindOfDiffs ifFalse: [^ true]. ^ self confirm: 'Caution!! You are "showing diffs" here, so there is a danger that some of the text in the code pane is contaminated by the "diff" display' translated ! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/26/2013 15:28' prior: 35796936! selectedMessage "Answer a copy of the source code for the selected message. This generic version is probably actually never reached, since every subclass probably reimplements and does not send to super. In time, ideally, most, or all, reimplementors would vanish and all would defer instead to a universal version right here. Everything in good time." | class selector method | contents ifNotNil: [^ contents copy]. self showingDecompile ifTrue:[^ self decompiledSourceIntoContents]. class := self selectedClassOrMetaClass. (class isNil or: [(selector := self selectedMessageName) isNil]) ifTrue: [^ '']. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := (self sourceStringPrettifiedAndDiffed) copy! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/26/2013 17:35' prior: 35826345! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! CodeHolder removeSelector: #toggleShowDocumentation! CodeHolder removeSelector: #showingDocumentationString! CodeHolder removeSelector: #showingDocumentation! CodeHolder removeSelector: #showComment! CodeHolder removeSelector: #commentContents! TPureBehavior removeSelector: #methodHeaderFor:! TPureBehavior removeSelector: #compile:classified:notifying:trailer:ifFail:! CompiledMethodWithNode removeSelector: #selector! CompiledMethodWithNode removeSelector: #node:! CompiledMethodWithNode removeSelector: #node! CompiledMethodWithNode removeSelector: #method:! CompiledMethodWithNode removeSelector: #method! CompiledMethodWithNode class removeSelector: #method:node:! CompiledMethodWithNode class removeSelector: #generateMethodFromNode:trailer:! Smalltalk globals removeClassNamed: #CompiledMethodWithNode! TraitDescription removeSelector: #logMethodSource:forMethodWithNode:inCategory:withStamp:notifying:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text asString classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: text asString forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! TraitDescription removeSelector: #compile:classified:withStamp:notifying:logSource:! ClassDescription removeSelector: #logMethodSource:forMethodWithNode:inCategory:withStamp:notifying:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text asString classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: text asString forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! ClassDescription removeSelector: #compile:classified:withStamp:notifying:logSource:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile2: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^ nil ]. logSource ifTrue: [ self logMethodSource2: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethodWithNode: method inCategory: category withStamp: changeStamp notifying: requestor ]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! "Compiler"! "Kernel"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(26 April 2013 5:38:07 pm) Pharo.image priorSource: 2286897! ----STARTUP----an Array(26 April 2013 5:44:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 April 2013 5:44:06 pm) Pharo-30066.image priorSource: 2316944! ----STARTUP----an Array(27 April 2013 10:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/26/2013 22:29' prior: 35841630! commentForCurrentUpdate ^ '10420 Simplify #reformatMethodAt: https://pharo.fogbugz.com/f/cases/10420 10416 New Spec polywidget https://pharo.fogbugz.com/f/cases/10416 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/26/2013 22:29'! script164 ^ 'AST-Core-MarcusDenker.136.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.402.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1384.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.66.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1083.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.477.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/26/2013 22:29'! update30067 "self new update30067" self withUpdateLog: '10420 Simplify #reformatMethodAt: https://pharo.fogbugz.com/f/cases/10420 10416 New Spec polywidget https://pharo.fogbugz.com/f/cases/10416 '. self loadTogether: self script164 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InputWidget commentStamp: '' prior: 0! I am a generic widget far a user to enter a string Example self example (printMe)! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09' prior: 28690905! initializePresenter okButton action: self okActionBlock! ! !OkToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! okActionBlock ^ [ okAction contents value == false ifFalse: [ owner ifNil: [ self delete ] ifNotNil: [ owner delete ] ] ]! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! triggerOkAction self okActionBlock value! ! !InputWidget commentStamp: '' prior: 35881973! I am a generic widget far a user to enter a string Example self example (printMe)! !InputWidget class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56'! defaultSpec ^ SpecLayout composed newRow: #label bottom: 0.5; newRow: #input top: 0.5; yourself! ! !InputWidget class methodsFor: 'example' stamp: 'BenjaminVanRyseghem 4/26/2013 14:17'! example | widget | widget := self new. widget title: 'Name'; label: 'What''s your name?'; ghostText: 'John Doe'. World openModal: widget openDialogWithSpec window. widget value! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:51'! ghostText: aString input ghostText: aString! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:57'! initialExtent ^ 250@125! ! !InputWidget methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/26/2013 13:58'! initialize "Initialization code for InputWidget" okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 13:49'! initializeDialogWindow: aWindow aWindow okAction: [ self ok ]! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:03'! initializePresenter input whenTextIsAccepted: [:text | self ok == false ifFalse: [ value contents: text ] ]. title whenChangedDo: [ self updateTitle ]! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:15'! initializeWidgets self instantiateModels: #( input TextInputFieldModel label LabelModel ). input ghostText: 'input'; acceptBlock: [ self triggerOkAction ]; entryCompletion: nil; acceptOnCR: true. label text: 'label'! ! !InputWidget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56'! input ^ input! ! !InputWidget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56'! label ^ label! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:51'! label: aString label text: aString.! ! !InputWidget methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 4/26/2013 14:16'! ok ^ okAction contents value! ! !InputWidget methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/26/2013 13:58'! title ^ title contents! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:59'! title: aString title contents: aString! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:16'! triggerOkAction self window ifNotNil: [ :w | w triggerOkAction ]! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:00'! value ^ value contents! ! !InputWidget methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/26/2013 13:54'! whenValueChanged: aBlock value whenChangedDo: aBlock! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'CamilloBruni 2/17/2012 14:33' prior: 19768733! recompile ^ self methodClass recompile: self selector! ! !TextInputFieldModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 35388650! accept: aText textHolder contents: aText. actionToPerformHolder contents cull: aText. "Dummy changed to raise an announcement" actionPerformedHolder contents: aText. self changed: #clearUserEdits.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 35389195! accept "Accep the current pendingtext" self widget ifNotNil: [:w | w accept ]. "Dummy changed to raise an announcement" actionPerformedHolder contents: self text.! ! !TextModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 35389470! accept: aText notifying: aNotifyier textHolder contents: aText. actionToPerformHolder contents cull: aText cull: aNotifyier. "Dummy changed to raise an announcement" actionPerformedHolder contents: aText. self changed: #clearUserEdits.! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 52744062! initialize "Initialization code for TextComposableModel" super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. self registerEvents. self registerEventsForShout! ! !ClassBuilder methodsFor: 'private' stamp: 'MarcusDenker 4/26/2013 21:25' prior: 19140250! showProgressFor: aClass "Announce that we're processing aClass" progress == nil ifTrue:[^self]. aClass isObsolete ifTrue:[^self]. currentClassIndex := currentClassIndex + 1. (aClass hasMethods) ifTrue: [progress label: ('Recompiling ', aClass name, ' (', currentClassIndex printString, '/', maxClassIndex printString, ')')]! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:10'! triggerOkAction "do nothing (ensure polymorphism with DialogWindow"! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! triggerOkAction self toolbar ifNotNil: [:toolbar | toolbar triggerOkAction ]! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/26/2013 21:22' prior: 35827122! reformatMethodAt: selector | newCodeString method | method := self compiledMethodAt: selector. newCodeString := method ast formattedCode. self compile: newCodeString classified: method category.! ! !Object methodsFor: '*Kernel-Exceptions-debugging' stamp: 'MarcusDenker 4/26/2013 21:23' prior: 28561931! halt "This is the typical message to use for inserting breakpoints during debugging." Halt now! ! CompiledMethod removeSelector: #putSource:class:category:inFile:priorMethod:! !Trait method! reformatMethodAt: selector | newCodeString method | newCodeString := self compilerClass format: (self sourceCodeAt: selector) in: self notifying: nil. method := self compiledMethodAt: selector. method putSource: newCodeString class: self category: (self organization categoryOfElement: selector) inFile: 2 priorMethod: method ! ! ClassDescription removeSelector: #reformatMethodAt:! !Trait method! reformatMethodAt: selector | newCodeString method | method := self compiledMethodAt: selector. newCodeString := method ast formattedCode. self compile: newCodeString classified: method category.! ! !Trait method! reformatMethodAt: selector | newCodeString method | method := self compiledMethodAt: selector. newCodeString := method ast formattedCode. self compile: newCodeString classified: method category.! ! "AST-Core"! "Compiler"! "Kernel"! "Spec-Widgets"! "Traits"! ----End fileIn----! ----QUIT----an Array(27 April 2013 10:32:09 pm) Pharo.image priorSource: 2317144! ----STARTUP----an Array(27 April 2013 10:38:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 April 2013 10:38:07 pm) Pharo-30067.image priorSource: 2335148! ----STARTUP----an Array(27 April 2013 2:20:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/27/2013 14:18' prior: 35871875! commentForCurrentUpdate ^ '10402 Cannot print TestCase when testSelector is not set https://pharo.fogbugz.com/f/cases/10402 10421 Move reformatMethodAt: --> #reformat on CompiledMethod https://pharo.fogbugz.com/f/cases/10421 10422 cleanup unused code Compiler more https://pharo.fogbugz.com/f/cases/10422 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/27/2013 14:18'! script165 ^ 'AST-Core-MarcusDenker.136.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.405.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1386.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.85.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-EstebanLorenzano.198.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.74.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1083.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.479.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/27/2013 14:18'! update30068 "self new update30068" self withUpdateLog: '10402 Cannot print TestCase when testSelector is not set https://pharo.fogbugz.com/f/cases/10402 10421 Move reformatMethodAt: --> #reformat on CompiledMethod https://pharo.fogbugz.com/f/cases/10421 10422 cleanup unused code Compiler more https://pharo.fogbugz.com/f/cases/10422 '. self loadTogether: self script165 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/27/2013 00:11'! reformat self methodClass compile: self ast formattedCode classified: self category.! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/26/2013 22:55'! logMethodSource2: aText forMethodWithNode: aCompiledMethod inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/27/2013 00:12' prior: 51836037! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Class methodsFor: 'compiling' stamp: 'al 9/3/2004 14:05' prior: 19067058! reformatAll "Reformat all methods in this class. Leaves old code accessible to version browsing" super reformatAll. "me..." self class reformatAll "...and my metaclass"! ! !Parser methodsFor: 'private' stamp: 'MarcusDenker 4/27/2013 08:45' prior: 29161363! warns "return whether the parser will ask the user for correction" ^ true! ! !Compiler methodsFor: 'private' stamp: 'marcus.denker 8/17/2008 21:14' prior: 19912011! from: textOrStream class: aClass classified: aCategory context: aContext notifying: req self from: textOrStream class: aClass context: aContext notifying: req. category := aCategory ! ! !Compiler methodsFor: 'private' stamp: 'MarcusDenker 4/27/2013 08:48' prior: 19914061! from: textOrStream class: aClass context: aContext notifying: req sourceStream := textOrStream readStream. class := aClass. context := aContext. requestor := req! ! !TestCase methodsFor: 'printing' stamp: 'MarcusDenker 4/26/2013 22:45' prior: 52332988! printOn: aStream aStream nextPutAll: self class printString. testSelector ifNotNil: [ aStream nextPutAll: '>>#'; nextPutAll: testSelector]! ! Compiler removeSelector: #translate:noPattern:ifFail:parser:! Compiler removeSelector: #parserClass:! Compiler removeSelector: #parser:! Parser removeSelector: #parse:class:noPattern:notifying:ifFail:! Parser class removeSelector: #warningAllowed! TraitDescription removeSelector: #logMethodSource2:forMethodWithNode:inCategory:withStamp:notifying:! TClassAndTraitDescription removeSelector: #reformatMethodAt:! ClassDescription removeSelector: #logMethodSource2:forMethodWithNode:inCategory:withStamp:notifying:! !Trait method! logMethodSource2: aText forMethodWithNode: aCompiledMethod inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource2: aText forMethodWithNode: aCompiledMethod inCategory: category withStamp: changeStamp notifying: requestor aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! "Compiler"! "Kernel"! "SUnit-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(27 April 2013 2:21:04 pm) Pharo.image priorSource: 2335350! ----STARTUP----an Array(27 April 2013 2:27:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 April 2013 2:27:17 pm) Pharo-30068.image priorSource: 2349516! ----STARTUP----an Array(28 April 2013 7:27:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/28/2013 19:22' prior: 35890084! commentForCurrentUpdate ^ '10423 simplify #firstPrecodeCommentFor: https://pharo.fogbugz.com/f/cases/10423 10426 move #parseSelector to Compiler https://pharo.fogbugz.com/f/cases/10426 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/28/2013 19:23'! script166 ^ 'AST-Core-MarcusDenker.138.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.407.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1389.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.76.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1085.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/28/2013 19:23'! update30069 "self new update30069" self withUpdateLog: '10423 simplify #firstPrecodeCommentFor: https://pharo.fogbugz.com/f/cases/10423 10426 move #parseSelector to Compiler https://pharo.fogbugz.com/f/cases/10426 '. self loadTogether: self script166 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SyntaxError methodsFor: 'initialization' stamp: 'MarcusDenker 4/28/2013 11:16' prior: 51470902! setClass: aClass code: aString error: errorMessage location: anErrorPosition debugger: aDebugger doitFlag: flag class := aClass. error := errorMessage. location := anErrorPosition. debugger := aDebugger. selector := aClass compiler parseSelector: aString. contents := self checkForUnprintableCharacters: aString. self highlightError. category ifNil: [category := aClass organization categoryOfElement: selector]. category ifNil: [category := ClassOrganizer default]. doitFlag := flag! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 4/28/2013 11:13' prior: 18753126! removeExistingMethodVersions "Remove all up to date version of entries from the receiver" | newChangeList newList | newChangeList := OrderedCollection new. newList := OrderedCollection new. changeList with: list do: [ :chRec :strNstamp | | str keep sel cls | keep := true. (cls := chRec methodClass) ifNotNil: [ str := chRec string. sel := cls compiler parseSelector: str. keep := (cls sourceCodeAt: sel ifAbsent: ['']) asString ~= str]. keep ifTrue: [ newChangeList add: chRec. newList add: strNstamp]]. self refreshNewList: newChangeList andList: newList! ! !ChangeList methodsFor: 'scanning' stamp: 'MarcusDenker 4/28/2013 11:14' prior: 18765091! scanCategory: category class: class meta: meta stamp: stamp | itemPosition method selector | [itemPosition := file position. method := file nextChunk. file skipStyleChunk. method size > 0] "done when double terminators" whileTrue: [self addItem: (ChangeRecord new file: file position: itemPosition type: #method class: class category: category meta: meta stamp: stamp) text: 'method: ' , class , (meta ifTrue: [' class '] ifFalse: [' ']) , ((selector := (Smalltalk globals at: class ifAbsent: [Object]) compiler parseSelector: method) isNil ifTrue: ['unparsableSelector'] ifFalse: [selector]) , (stamp isEmpty ifTrue: [''] ifFalse: ['; ' , stamp])]! ! !PseudoClass methodsFor: 'methods' stamp: 'MarcusDenker 4/28/2013 11:15' prior: 30104685! addMethodChange: aChangeRecord | selector | selector := self compiler parseSelector: aChangeRecord string. self organization classify: selector under: aChangeRecord category. self sourceCodeAt: selector put: aChangeRecord! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 11:04'! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^self parser parseSelector: aString! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/28/2013 19:22'! compiler ^self compilerClass new ! ! !CompiledMethod methodsFor: 'private' stamp: 'MarcusDenker 4/28/2013 11:14' prior: 19845347! getSourceReplacingSelectorWith: newSelector | oldKeywords newKeywords args newSelectorWithArgs source oldSelector s | source := self sourceCode. oldSelector := self compiler parseSelector: source. oldSelector = newSelector ifTrue: [ ^ source ]. oldKeywords := oldSelector keywords. newKeywords := (newSelector ifNil: [self defaultSelector]) keywords. [oldKeywords size = newKeywords size] assert. args := (self methodClass parserClass new parseArgsAndTemps: source string notifying: nil) copyFrom: 1 to: self numArgs. newSelectorWithArgs := String streamContents: [:stream | newKeywords withIndexDo: [:keyword :index | stream nextPutAll: keyword. stream space. args size >= index ifTrue: [ stream nextPutAll: (args at: index); space]]]. s := source string readStream. oldKeywords do: [ :each | s match: each ]. args isEmpty ifFalse: [ s match: args last ]. ^newSelectorWithArgs trimBoth, s upToEnd! ! !ChangeRecord methodsFor: 'access' stamp: 'MarcusDenker 4/28/2013 11:04' prior: 18794094! methodSelector ^ type == #method ifTrue: [ (Smalltalk globals at: class ifAbsent: [ Object ]) compiler parseSelector: self string ]! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'MarcusDenker 4/28/2013 11:15' prior: 34287264! recompileCurrentMethodTo: aText | classOfMethod selector | classOfMethod := self selectedClass. selector := classOfMethod compiler parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName beginsWith: 'DoIt') and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [ self inform: 'can''t change selector'. ^ nil]. selector := classOfMethod compile: aText classified: self selectedMessageCategoryName notifying: nil. selector isNil ifFalse: [ ^ classOfMethod compiledMethodAt: selector. ] ifTrue: [ ^ nil ] ! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/28/2013 11:13' prior: 19452827! validateMessageSource: sourceString forSelector: aSelector "Check whether there is evidence that method source is invalid" | sourcesName | (self selectedClass compiler parseSelector: sourceString asString) = aSelector ifFalse: [ sourcesName := Smalltalk sourcesName asFileReference basename. self inform: 'There may be a problem with your sources file!! The source code for every method should (usually) start with the method selector but this is not the case with this method!! You may proceed with caution but it is recommended that you get a new source file. This can happen if you download the "' , sourcesName , '" file, or the ".changes" file you use, as TEXT. It must be transfered in BINARY mode, even if it looks like a text file, to preserve the CR line ends. Mac users: This may have been caused by Stuffit Expander. To prevent the files above to be converted to Mac line ends when they are expanded, do this: Start the program, then from Preferences... in the File menu, choose the Cross Platform panel, then select "Never" and press OK. Then expand the compressed archive again. (Occasionally, the source code for a method may legitimately start with a non-alphabetic character -- for example, Behavior method #formalHeaderPartsFor:. In such rare cases, you can happily disregard this warning.)'].! ! !RBSourceRegexRefactoring methodsFor: 'transforming' stamp: 'MarcusDenker 4/28/2013 11:17' prior: 31411252! transform | original replacement protocols | self model allClassesDo: [ :class | class selectors do: [ :selector | original := class sourceCodeFor: selector. replacement := self execute: original. replacement = original ifFalse: [ (self parseMethod: replacement) isNil ifFalse: [ protocols := class protocolsFor: selector. (class compiler parseSelector: replacement) = selector ifFalse: [ class removeMethod: selector ]. class compile: replacement classified: protocols ] ] ] ]! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 18:12'! firstPrecodeComment | sourceInterval | sourceInterval := self comments first. ^self source copyFrom: sourceInterval first to: sourceInterval last.! ! !TPureBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 4/27/2013 18:14' prior: 52104083! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Debugger methodsFor: 'accessing' stamp: 'MarcusDenker 4/28/2013 11:14' prior: 33608591! recompileCurrentMethodTo: aText notifying: aController |classOfMethod category selector newMethod| classOfMethod := self selectedClass. category := self selectedMessageCategoryName. selector := self selectedClass compiler parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName beginsWith: 'DoIt') and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [self inform: 'can''t change selector'. ^nil]. aController setText: aText. selector := classOfMethod compile: aText classified: category notifying: aController. selector ifNil: [^nil]. "compile cancelled" contents := aText. newMethod := classOfMethod compiledMethodAt: selector. newMethod isQuick ifTrue: [self down. self selectedContext jump: (self selectedContext previousPc - self selectedContext pc)]. ^ newMethod ! ! RBSourceRegexRefactoring removeSelector: #parseSelector:! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | parser source tree | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: ["Not really a selector" ^ nil]. source := self sourceCodeAt: selector asSymbol ifAbsent: [^ nil]. parser := self parserClass new. tree := parser parse: source readStream class: self noPattern: false context: nil notifying: nil ifFail: [^ nil]. ^ (tree comment ifNil: [^ nil]) first! ! Behavior removeSelector: #firstPrecodeCommentFor:! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! "AST-Core"! "Compiler"! "DebuggerModel"! "Kernel"! "NautilusRefactoring"! "System-Changes"! "System-FilePackage"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(28 April 2013 7:27:15 pm) Pharo.image priorSource: 2349716! ----STARTUP----an Array(28 April 2013 7:33:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 April 2013 7:33:46 pm) Pharo-30069.image priorSource: 2370463! ----STARTUP----an Array(29 April 2013 8:43:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/29/2013 08:39' prior: 35904449! commentForCurrentUpdate ^ '10428 Fast-up significandAsInteger https://pharo.fogbugz.com/f/cases/10428 10429 Fast up LargeInteger modulo https://pharo.fogbugz.com/f/cases/10429 10430 add #compiler to PseudoClass (and fix #comment in CompiledMethod) https://pharo.fogbugz.com/f/cases/10430 10434 add old parser API to Compiler https://pharo.fogbugz.com/f/cases/1043'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/29/2013 08:40'! script167 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.409.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1391.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-EstebanLorenzano.33.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.78.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1085.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/29/2013 08:40'! update30070 "self new update30070" self withUpdateLog: '10428 Fast-up significandAsInteger https://pharo.fogbugz.com/f/cases/10428 10429 Fast up LargeInteger modulo https://pharo.fogbugz.com/f/cases/10429 10430 add #compiler to PseudoClass (and fix #comment in CompiledMethod) https://pharo.fogbugz.com/f/cases/10430 10434 add old parser API to Compiler https://pharo.fogbugz.com/f/cases/1043'. self loadTogether: self script167 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PseudoClass methodsFor: 'accessing' stamp: 'MarcusDenker 4/28/2013 20:05'! compiler ^ self compilerClass new! ! !LargePositiveInteger methodsFor: 'arithmetic' stamp: 'nice 1/9/2013 01:44' prior: 24274859! \\ aNumber "Primitive. Take the receiver modulo the argument. The result is the remainder rounded towards negative infinity, of the receiver divided by the argument. Fail if the argument is 0. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." aNumber isInteger ifTrue: [| neg qr q r | neg := self negative == aNumber negative == false. qr := self digitDiv: aNumber neg: neg. q := qr first normalize. r := qr last normalize. ^(q negative ifTrue: [r isZero not] ifFalse: [q isZero and: [neg]]) ifTrue: [r + aNumber] ifFalse: [r]]. ^super \\ aNumber ! ! !LargePositiveInteger methodsFor: 'arithmetic' stamp: 'nice 1/9/2013 01:36'! rem: aNumber "Remainder defined in terms of quo:. See super rem:. This is defined only to speed up case of large integers." aNumber isInteger ifTrue: [| ng rem | ng := self negative == aNumber negative == false. rem := (self digitDiv: aNumber neg: ng) at: 2. ^ rem normalize]. ^super rem: aNumber! ! !Float methodsFor: 'truncation and round off' stamp: 'nice 6/7/2012 00:17' prior: 22229426! significandAsInteger "Answer the mantissa of a Float shifted so as to have the ulp equal to 1. For exceptional values, infinity and nan, just answer the bit pattern." self isFinite ifTrue: [^(self timesTwoPower: self class precision - 1 - (self exponent max: self class emin)) truncated abs]. ^(((self basicAt: 1) bitAnd: 16r000FFFFF) bitShift: 32) bitOr: (self basicAt: 2)! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 21:50'! parse: aString class: aClass ^self parser parse: aString class: aClass! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 21:50'! parse: aString class: aClass noPattern: noPattern context: ctxt notifying: req ifFail: aBlock ^self parser parse: aString class: aClass noPattern: noPattern context: ctxt notifying: req ifFail: aBlock ! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 21:51'! parseArgsAndTemps: aString notifying: req ^self parser parseArgsAndTemps: aString notifying: req ! ! !Integer methodsFor: 'arithmetic' stamp: 'nice 1/9/2013 01:35' prior: 23740234! / aNumber "Refer to the comment in Number / " | quoRem | aNumber isInteger ifTrue: [quoRem := self digitDiv: aNumber neg: self negative ~~ aNumber negative. (quoRem at: 2) = 0 ifTrue: [^ (quoRem at: 1) normalize] ifFalse: [^ (Fraction numerator: self denominator: aNumber) reduced]]. ^ aNumber adaptToInteger: self andSend: #/! ! !Integer methodsFor: 'arithmetic' stamp: 'nice 1/9/2013 01:35' prior: 23741958! quo: aNumber "Refer to the comment in Number quo: " | ng quo | aNumber isInteger ifTrue: [ng := self negative == aNumber negative == false. quo := (self digitDiv: aNumber neg: ng) at: 1. ^ quo normalize]. ^ aNumber adaptToInteger: self andSend: #quo:! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 4/28/2013 20:10' prior: 35921438! firstPrecodeComment | sourceInterval | self comments ifEmpty: [ ^nil ]. sourceInterval := self comments first. ^self source copyFrom: sourceInterval first to: sourceInterval last.! ! "AST-Core"! "Compiler"! "Kernel"! "System-FilePackage"! ----End fileIn----! ----QUIT----an Array(29 April 2013 8:43:11 am) Pharo.image priorSource: 2370663! ----STARTUP----an Array(29 April 2013 8:49:39 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 April 2013 8:49:39 am) Pharo-30070.image priorSource: 2385014! ----STARTUP----an Array(29 April 2013 2:28:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/29/2013 14:24' prior: 35925396! commentForCurrentUpdate ^ '10373 instead of #parserClass, everyone should use the Compiler Frontend https://pharo.fogbugz.com/f/cases/10373 10435 Fast-up asFloat https://pharo.fogbugz.com/f/cases/10435 10440 Integrate latest Opal in 3.0 https://pharo.fogbugz.com/f/cases/10440'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/29/2013 13:13'! script168 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.409.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1391.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.200.mcz OpalCompiler-Tests-MarcusDenker.119.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.78.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.528.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1087.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/29/2013 14:24'! script169 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.411.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1393.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.218.mcz OpalCompiler-Tests-MarcusDenker.125.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-MarcusDenker.796.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.80.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1089.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.99.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/29/2013 13:13'! update30071 "self new update30071" self withUpdateLog: '10433 Remove showing decompied code from Old Browser https://pharo.fogbugz.com/f/cases/10433/ 10437 Add spec inspectors to Andreis spec debugger https://pharo.fogbugz.com/f/cases/10437'. self loadTogether: self script168 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/29/2013 14:25'! update30072 "self new update30072" self withUpdateLog: '10373 instead of #parserClass, everyone should use the Compiler Frontend https://pharo.fogbugz.com/f/cases/10373 10435 Fast-up asFloat https://pharo.fogbugz.com/f/cases/10435 10440 Integrate latest Opal in 3.0 https://pharo.fogbugz.com/f/cases/10440'. self loadTogether: self script169 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeElement commentStamp: '' prior: 0! I am an element of the eye inspector. My field name wil be displayed on the inspection menu. On the right, the printAction block will be printed when you click on the corresponding inspection menu. The selectObject is the object to which you do action (as Dive, Inspect) through the inpection menu. The saveAction is triggerred when you modify the right panel of the inspector and press cmd + s. ! !OCParser commentStamp: '' prior: 34935243! This mirrors the old Parser protocol but delegates to the real parser which is RBParser.! !EyeInspector commentStamp: '' prior: 0! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !SpecDebugger commentStamp: '' prior: 34261922! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !LargePositiveInteger methodsFor: 'converting' stamp: 'nice 1/27/2012 22:41' prior: 24280217! asFloat "Answer a Float that best approximates the value of the receiver. This algorithm is optimized to process only the significant digits of a LargeInteger. And it does honour IEEE 754 round to nearest even mode in case of excess precision (see details below)." "How numbers are rounded in IEEE 754 default rounding mode: A shift is applied so that the highest 53 bits are placed before the floating point to form a mantissa. The trailing bits form the fraction part placed after the floating point. This fractional number must be rounded to the nearest integer. If fraction part is 2r0.1, exactly between two consecutive integers, there is a tie. The nearest even integer is chosen in this case. Examples (First 52bits of mantissa are omitted for brevity): 2r0.00001 is rounded downward to 2r0 2r1.00001 is rounded downward to 2r1 2r0.1 is a tie and rounded to 2r0 (nearest even) 2r1.1 is a tie and rounded to 2r10 (nearest even) 2r0.10001 is rounded upward to 2r1 2r1.10001 is rounded upward to 2r10 Thus, if the next bit after floating point is 0, the mantissa is left unchanged. If next bit after floating point is 1, an odd mantissa is always rounded upper. An even mantissa is rounded upper only if the fraction part is not a tie." "Algorihm details: The floating point hardware can perform the rounding correctly with several excess bits as long as there is a single inexact operation. This can be obtained by splitting the mantissa plus excess bits in two part with less bits than Float precision. Note 1: the inexact flag in floating point hardware must not be trusted because in some cases the operations would be exact but would not take into account some bits that were truncated before the Floating point operations. Note 2: the floating point hardware is presumed configured in default rounding mode." | mantissa shift excess result n | "Check how many bits excess the maximum precision of a Float mantissa." excess := self highBitOfMagnitude - Float precision. excess > 7 ifTrue: ["Remove the excess bits but seven." mantissa := self bitShiftMagnitude: 7 - excess. shift := excess - 7. "An even mantissa with a single excess bit immediately following would be truncated. But this would not be correct if above shift has truncated some extra bits. Check this case, and round excess bits upper manually." ((mantissa digitAt: 1) = 2r01000000 and: [self anyBitOfMagnitudeFrom: 1 to: shift]) ifTrue: [mantissa := mantissa + 1]] ifFalse: [mantissa := self. shift := 0]. "There will be a single inexact round off at last iteration" result := (mantissa digitAt: (n := mantissa digitLength)) asFloat. [(n := n - 1) > 0] whileTrue: [ result := 256.0 * result + (mantissa digitAt: n) asFloat]. ^result timesTwoPower: shift.! ! !LargeNegativeInteger methodsFor: 'converting' stamp: 'nice 1/1/2013 15:42' prior: 24268715! asFloat ^super asFloat negated! ! !MCStWriterTest methodsFor: 'asserting' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 25046765! assertChunkIsWellFormed: chunk self class compiler parse: chunk readStream class: UndefinedObject noPattern: true context: nil notifying: nil ifFail: [self assert: false]! ! !MCStWriterTest methodsFor: 'asserting' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 25047281! assertMethodChunkIsWellFormed: chunk self class compiler parse: chunk readStream class: UndefinedObject noPattern: false context: nil notifying: nil ifFail: [self assert: false]! ! !Browser methodsFor: 'message list' stamp: 'MarcusDenker 4/28/2013 21:32' prior: 35862386! selectedMessage "Answer a copy of the source code for the selected message." | class selector method | contents == nil ifFalse: [^ contents copy]. class := self selectedClassOrMetaClass. selector := self selectedMessageName. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := self sourceStringPrettifiedAndDiffed ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 4/25/2013 16:39' prior: 34755576! emitCaseOf: aMessageNode | cases assocMessageNode | cases := aMessageNode arguments first statements. valueTranslator visitNode: aMessageNode receiver. 1 to: cases size - 1 do: [:i | methodBuilder pushDup. assocMessageNode := cases at: i. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. ]. "last case without otherwise" methodBuilder pushDup. cases ifEmpty: [ self backendError: 'At least one case required' forNode: aMessageNode ]. assocMessageNode := cases last. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. methodBuilder send: #caseError. aMessageNode lastIsReturn ifTrue: [ (aMessageNode owningScope) isBlockScope ifTrue: [methodBuilder blockReturnTop] ifFalse: [methodBuilder returnTop]] ifFalse: [self isEffectTranslator ifTrue: [methodBuilder popTop]]. cases size timesRepeat: [methodBuilder jumpAheadTarget: #end].! ! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 33796690! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabelForInspector fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" compilerClass decompilerClass evaluatorClass format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 4/25/2013 16:54' prior: 35546832! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVar: name. var ifNotNil: [ self variable: aVariableNode shadows: var. (var scope ~= scope and: [ scope isOptimizedBlockScope not ]) ifTrue: [ "Create new var that shadows outer one" var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode ocBinding: var. ^ var! ! !MethodNode methodsFor: 'debugger support' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 26477554! blockExtentsToTempsMap "Answer a Dictionary of blockExtent to temp locations for the current method. This is used by the debugger to locate temp vars in contexts. A temp map entry is a pair of the temp's name and its index, where an index is either an integer for a normal temp or a pair of the index of the indirect temp vector containing the temp and the index of the temp in its indirect temp vector." ^encoder blockExtentsToTempsMap ifNil: [| methNode | methNode := Parser new encoderClass: encoder class; parse: (sourceText ifNil: [self decompileString]) class: self methodClass. "As a side effect generate: creates data needed for the map." methNode generate. methNode encoder blockExtentsToTempsMap]! ! !MethodNode methodsFor: 'source mapping' stamp: 'MarcusDenker 4/29/2013 13:29' prior: 26485475! rawSourceRangesAndMethodDo: aBinaryBlock "Evaluate aBinaryBlock with the rawSourceRanges and method generated from the receiver." | methNode method | methNode := Parser new encoderClass: encoder class; parse: (sourceText "If no source, use decompile string as source to map from" ifNil: [self decompileString] ifNotNil: [sourceText]) class: self methodClass. method := methNode generate. "set bytecodes to map to" ^aBinaryBlock value: methNode encoder rawSourceRanges value: method! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 4/29/2013 14:17' prior: 35045794! testExampleIfNotNilDo | ast | ast := (OCOpalExamples>>#exampleIfNotNilDo) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars isEmpty. "ifnilDo is not inlined"! ! !CodeHolder methodsFor: 'contents' stamp: 'MarcusDenker 4/28/2013 21:32' prior: 35863233! contentsSymbolChanged "Inform any dependents of a change in the contents symbol." self changed: #showingAnyKindOfDiffs; changed: #showingBytecodes; changed: #showingDiffs; changed: #showingPlainSource; changed: #showingPrettyDiffs; changed: #showingPrettyPrint; changed: #showingRegularDiffs! ! !CodeHolder methodsFor: 'controls' stamp: 'MarcusDenker 4/28/2013 21:31' prior: 35863665! contentsSymbolQuints "Answer a list of quintuplets representing information on the alternative views available in the code pane first element: the contentsSymbol used second element: the selector to call when this item is chosen. third element: the selector to call to obtain the wording of the menu item. fourth element: the wording to represent this view fifth element: balloon help A hypen indicates a need for a seperator line in a menu of such choices" ^ #( (source togglePlainSource showingPlainSourceString 'Source' 'The textual source code as writen') - (prettyPrint togglePrettyPrint prettyPrintString 'PrettyPrint' 'The method source presented in a standard text format') - (showDiffs toggleRegularDiffing showingRegularDiffsString 'ShowDiffs' 'The textual source diffed from its prior version') (prettyDiffs togglePrettyDiffing showingPrettyDiffsString 'PrettyDiffs' 'Formatted textual source diffed from formatted form of prior version') - (byteCodes toggleShowingByteCodes showingByteCodesString 'ByteCodes' 'The bytecodes that comprise the compiled method'))! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/28/2013 21:32' prior: 35865371! selectedMessage "Answer a copy of the source code for the selected message. This generic version is probably actually never reached, since every subclass probably reimplements and does not send to super. In time, ideally, most, or all, reimplementors would vanish and all would defer instead to a universal version right here. Everything in good time." | class selector method | contents ifNotNil: [^ contents copy]. class := self selectedClassOrMetaClass. (class isNil or: [(selector := self selectedMessageName) isNil]) ifTrue: [^ '']. method := class compiledMethodAt: selector ifAbsent: [^ '']. "method deleted while in another project" currentCompiledMethod := method. ^ contents := (self sourceStringPrettifiedAndDiffed) copy! ! !PseudoClass methodsFor: 'private' stamp: 'MarcusDenker 4/29/2013 13:26' prior: 30110309! parserClass ^ self class compilerClass parserClass! ! !OCSourceCode2BytecodeTest methodsFor: 'compiling' stamp: 'MarcusDenker 4/27/2013 12:44' prior: 35824467! compile2methodNode: sourceStream "Compile code without logging the source in the changes file" | methodNode | methodNode := OpalCompiler new compile: sourceStream in: self class classified: nil notifying: nil ifFail: [^ nil]. ^ methodNode generate: CompiledMethodTrailer empty! ! !CompiledMethod methodsFor: 'private' stamp: 'MarcusDenker 4/29/2013 13:27' prior: 35917448! getSourceReplacingSelectorWith: newSelector | oldKeywords newKeywords args newSelectorWithArgs source oldSelector s | source := self sourceCode. oldSelector := self compiler parseSelector: source. oldSelector = newSelector ifTrue: [ ^ source ]. oldKeywords := oldSelector keywords. newKeywords := (newSelector ifNil: [self defaultSelector]) keywords. [oldKeywords size = newKeywords size] assert. args := (self compiler parseArgsAndTemps: source string notifying: nil) copyFrom: 1 to: self numArgs. newSelectorWithArgs := String streamContents: [:stream | newKeywords withIndexDo: [:keyword :index | stream nextPutAll: keyword. stream space. args size >= index ifTrue: [ stream nextPutAll: (args at: index); space]]]. s := source string readStream. oldKeywords do: [ :each | s match: each ]. args isEmpty ifFalse: [ s match: args last ]. ^newSelectorWithArgs trimBoth, s upToEnd! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 13:27' prior: 19770342! methodNode "Return the parse tree that represents self" | aClass source | aClass := self methodClass. source := self sourceCode. ^(aClass compiler parse: source class: aClass) sourceText: source; yourself! ! !Fraction methodsFor: 'converting' stamp: 'nice 11/21/2011 22:34' prior: 22587345! asFloat "Answer a Float that closely approximates the value of the receiver. This implementation will answer the closest floating point number to the receiver. In case of a tie, it will use the IEEE 754 round to nearest even mode. In case of overflow, it will answer +/- Float infinity." | a b mantissa exponent hasTruncatedBits lostBit n ha hb hm | a := numerator abs. b := denominator. "denominator is always positive" ha := a highBitOfMagnitude. hb := b highBitOfMagnitude. "Number of bits to keep in mantissa plus one to handle rounding." n := 1 + Float precision. "If both numerator and denominator are represented exactly in floating point number, then fastest thing to do is to use hardwired float division." (ha < n and: [hb < n]) ifTrue: [^numerator asFloat / denominator asFloat]. "Shift the fraction by a power of two exponent so as to obtain a mantissa with n bits. First guess is rough, the mantissa might have n+1 bits." exponent := ha - hb - n. exponent >= 0 ifTrue: [b := b bitShift: exponent] ifFalse: [a := a bitShift: exponent negated]. mantissa := a quo: b. hasTruncatedBits := a > (mantissa * b). hm := mantissa highBit. "Check for gradual underflow, in which case the mantissa will loose bits. Keep at least one bit to let underflow preserve the sign of zero." lostBit := Float emin - (exponent + hm - 1). lostBit > 0 ifTrue: [n := n - lostBit max: 1]. "Remove excess bits in the mantissa." hm > n ifTrue: [exponent := exponent + hm - n. hasTruncatedBits := hasTruncatedBits or: [mantissa anyBitOfMagnitudeFrom: 1 to: hm - n]. mantissa := mantissa bitShift: n - hm]. "Check if mantissa must be rounded upward. The case of tie (mantissa odd & hasTruncatedBits not) will be handled by Integer>>asFloat." (hasTruncatedBits and: [mantissa odd]) ifTrue: [mantissa := mantissa + 1]. ^ (self positive ifTrue: [mantissa asFloat] ifFalse: [mantissa asFloat negated]) timesTwoPower: exponent! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/25/2013 16:33' prior: 35532085! testDigitTooLargeForARadix self setUpForErrorsIn: '2r` Reading a number failed: a digit between 0 and 1 expected ->`3'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/25/2013 16:45' prior: 35534297! testInvalidRadix self setUpForErrorsIn: '1` Reading a number failed: an integer greater than 1 as valid radix expected ->`r0'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/25/2013 17:03' prior: 35541453! testUnmatchedCommentQuote self setUpForErrorsIn: '1+2 "unfinished comment` Unmatched " in comment. ->`'. self enumerateAllSelections! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'MarcusDenker 4/25/2013 17:04' prior: 35542750! testUnmatchedStringQuote self setUpForErrorsIn: '^nil printString , ''unfinished string` Unmatched '' in string literal. ->`'. self enumerateAllSelections! ! !EyeElement commentStamp: '' prior: 35960146! I am an element of the eye inspector. My field name wil be displayed on the inspection menu. On the right, the printAction block will be printed when you click on the corresponding inspection menu. The selectObject is the object to which you do action (as Dive, Inspect) through the inpection menu. The saveAction is triggerred when you modify the right panel of the inspector and press cmd + s. ! !EyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 3/29/2013 13:18'! fieldName: aString object: anObject ^self new fieldName: aString; object: anObject! ! !EyeElement class methodsFor: 'as yet unclassified' stamp: 'ClementBera 3/29/2013 13:18'! fieldName: aString object: anObject printedValue: anotherString ^ (self fieldName: aString object: anObject) printedValue: anotherString ! ! !EyeElement class methodsFor: 'as yet unclassified' stamp: 'ClementBera 3/29/2013 13:18'! fieldName: aString object: anObject printedValue: anotherString saveAction: aBlock ^ (self fieldName: aString object: anObject) printedValue: anotherString; saveAction: aBlock! ! !EyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 3/29/2013 13:19'! fieldName: aString object: anObject saveAction: aBlock ^ (self fieldName: aString object: anObject) saveAction: aBlock ! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/12/2013 16:49'! browseClass "Open an class browser on the selectObject (class side)" ^ Smalltalk tools browser newOnClass: self selectClass! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 14:05'! browseClassRefs: class class isTrait ifTrue: [self systemNavigation browseAllUsersOfTrait: class] ifFalse: [self systemNavigation browseAllCallsOnClass: class]! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/12/2013 16:49'! browseFull "Open an class browser on the selectObject (inst side)" ^ self selectClass browse! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 14:04'! browseInstClassVariable: class ^ self systemNavigation browseClassVariables: class! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 14:04'! browseInstVarDefs: class ^ self systemNavigation browseInstVarDefs: class! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 14:03'! browseInstVarRefs: class ^ self systemNavigation browseInstVarRefs: class! ! !EyeElement methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 13:17'! browseSubMenu: aMenu aMenu add: 'Browse full (b)' translated target: self selector: #browseFull; add: 'Browse class' translated target: self selector: #browseClass; add: 'Browse hierarchy (h)' translated target: self selector: #classHierarchy. aMenu addLine. ! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/12/2013 16:51'! classHierarchy "Create and schedule a class list browser on the receiver's hierarchy." ^ self systemNavigation browseHierarchy: self selectClass! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 14:06'! classVarRefs: class ^ self systemNavigation browseClassVarRefs: class! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 4/2/2013 23:08'! copyName "Copy the name of the current variable, so the user can paste it into the window below and work with is." | selection | selection := self fieldName asInteger ifNotNil: [ :index | '(self basicAt: ' , index , ')' ] ifNil: [ self fieldName ]. Clipboard clipboardText: selection asText! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:50'! defsOfSelection: class ^ self systemNavigation browseAllStoresInto: self fieldName from: class! ! !EyeElement methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 13:59'! endMenu: aMenu aMenu add: 'Copy name (c)' translated target: self selector: #copyName; add: 'Basic inspect' translated target: self selector: #inspectBasic! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:45'! exploreSelection ^ self object explore! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:45'! exploreStrongPointers ^ Smalltalk tools strongPointerExplorer openOn: self object! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 15:28'! fieldName ^ fieldName ifNil: [ self error: 'shouldnt have Instance variable named nil' ]! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 13:53'! fieldName: anObject fieldName := anObject! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:57'! inspectBasic "Bring up a non-special inspector" ^self object basicInspect! ! !EyeElement methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 14:11'! inspectionMenu: aMenu inspector: inspector "specific menu for the current element" self referenceSubMenu: aMenu inspector: inspector. self browseSubMenu: aMenu. self instRefMenu: aMenu inspector: inspector. self endMenu: aMenu.! ! !EyeElement methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 14:13'! instRefMenu: aMenu inspector: inspector |class| class := inspector objectClass. aMenu add: 'Inst var refs...' target: self selector: #browseInstVarRefs: argumentList: {class}; add: 'Inst var defs...' target: self selector: #browseInstVarDefs: argumentList: {class}; add: 'Class var refs...' target: self selector: #classVarRefs: argumentList: {class}; add: 'Class variables' target: self selector: #browseClassVariables: argumentList: {class}; add: 'Class refs (N)' target: self selector: #browseClassRefs: argumentList: {class}. aMenu addLine. ! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/29/2013 13:13'! object ^ object! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/29/2013 13:13'! object: anObject object := anObject! ! !EyeElement methodsFor: 'printing' stamp: 'ClementBera 3/29/2013 13:11'! printOn: aStream aStream << fieldName printString << '->' << (object printStringLimitedTo: 50)! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/25/2013 14:50'! printedValue ^ printedValue ifNil: [ printedValue := object printStringLimitedTo: 2000 ]! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/13/2013 11:02'! printedValue: aString printedValue := aString! ! !EyeElement methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 13:49'! referenceSubMenu: aMenu inspector: inspector |class| class := inspector objectClass. class isVariable ifFalse: [ aMenu add: 'Method refs to this inst var' target: self selector: #referencesToSelection: argumentList: {class}; add: 'Methods storing into this inst var' target: self selector: #defsOfSelection: argumentList: {class}. ]. aMenu add: 'Explore pointers' target: self selector: #exploreSelection; add: 'Explore strong pointers' target: self selector: #sxploreStrongPointers. aMenu addLine. ! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:49'! referencesToSelection: class "Open a browser on all references to the selected instance variable, if that's what currently selected." ^ self systemNavigation browseAllAccessesTo: self fieldName from: class! ! !EyeElement methodsFor: 'action' stamp: 'ClementBera 3/29/2013 13:50'! save: aValue ^ self saveAction value: aValue! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 13:54'! saveAction ^ saveAction ifNil: [ saveAction := [ ] ]! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 13:53'! saveAction: anObject saveAction := anObject! ! !EyeElement methodsFor: 'accessing' stamp: 'ClementBera 3/29/2013 13:13'! selectClass ^self object class! ! !OCParser commentStamp: '' prior: 35960603! This mirrors the old Parser protocol but delegates to the real parser which is RBParser.! !OCParser methodsFor: 'old protocol' stamp: 'MarcusDenker 4/29/2013 10:38' prior: 34936556! parse: sourceStreamOrString class: behavior ^ OpalCompiler new source: sourceStreamOrString; class: behavior; parse! ! !OCParser methodsFor: 'old protocol' stamp: 'MarcusDenker 4/29/2013 10:39' prior: 34937630! parse: sourceStream class: behavior noPattern: noPattern context: context notifying: req ifFail: aBlock "Backwards compatibilty" ^OpalCompiler new source: sourceStream; class: behavior; noPattern: noPattern; context: context; requestor: req; failBlock: aBlock; translate.! ! !OCParser methodsFor: 'old protocol' stamp: 'MarcusDenker 4/29/2013 10:39' prior: 34938797! parseArgsAndTemps: aString notifying: req "No initialization required. Parse the argument, aString, notifying req if an error occurs. Otherwise, answer a two-element Array containing Arrays of strings (the argument names and temporary variable names)." OpalCompiler new parseArgsAndTemps: aString notifying: req.! ! !OCParser methodsFor: 'old protocol' stamp: 'MarcusDenker 4/28/2013 11:11' prior: 34939265! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^OpalCompiler new parseSelector: aString ! ! !OCParser methodsFor: 'accessing' stamp: 'MarcusDenker 4/29/2013 14:17' prior: 34940415! requestor "Return the source code editor" ^ requestor! ! !Object methodsFor: '*Spec-Debugger' stamp: 'ClementBera 4/29/2013 10:25'! eyeClass ^EyeInspector! ! !Object methodsFor: '*Spec-Debugger' stamp: 'ClementBera 4/29/2013 10:26'! ogle "Eyeinspector should be put one day in Smalltalk tools" ^EyeInspector inspect: self! ! !OpalCompiler class methodsFor: 'setting' stamp: 'MarcusDenker 4/23/2013 17:03' prior: 35655805! allowNonBooleanReceivers ^AllowNonBooleanReceivers ifNil: [ AllowNonBooleanReceivers := false]! ! !OpalCompiler class methodsFor: 'setting' stamp: 'MarcusDenker 4/23/2013 17:01' prior: 35655988! allowNonBooleanReceivers: aBoolean AllowNonBooleanReceivers := aBoolean! ! !OpalCompiler class methodsFor: 'public' stamp: 'MarcusDenker 11/16/2012 15:35' prior: 34943719! debuggerMethodMapForMethod: aMethod ^ DebuggerMethodMapOpal forMethod: aMethod! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 2/5/2013 10:59' prior: 34943884! decompilerClass ^OCFakeDecompiler! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 21:28' prior: 34944005! evaluate: textOrString ^self new source: textOrString; evaluate! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 21:29' prior: 34944421! evaluate: textOrString for: anObject logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor." ^self new source: textOrString; logged: logFlag; receiver: anObject; evaluate! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 22:23' prior: 34944786! evaluate: textOrString for: anObject notifying: aController logged: logFlag "Compile and execute the argument, textOrString with respect to the class of anObject. If a compilation error occurs, notify aController. If both compilation and execution are successful then, if logFlag is true, log (write) the text onto a system changes file so that it can be replayed if necessary." ^ self new source: textOrString; logged: logFlag; receiver: anObject; requestor: aController; evaluate ! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 22:23' prior: 34945397! evaluate: textOrString logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object." ^ self new source: textOrString; logged: logFlag; evaluate ! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 22:23' prior: 34945795! evaluate: textOrString notifying: aController logged: logFlag "See Compiler|evaluate:for:notifying:logged:. Compilation is carried out with respect to nil, i.e., no object." ^ self new source: textOrString; logged: logFlag; requestor: aController; evaluate ! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 21:27' prior: 34946138! format: textOrStream in: aClass notifying: aRequestor ^self new source: textOrStream; class: aClass; requestor: aRequestor; format ! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 12/17/2012 13:28' prior: 34946344! parserClass "Answer a parser class to use for parsing methods compiled by instances of the receiver." self flag: 'This needs to be changed later'. ^Parser! ! !OpalCompiler class methodsFor: 'public' stamp: 'ClementBera 12/13/2012 11:32' prior: 34946588! recompileAll "Recompile all classes and traits in the system." Smalltalk allClassesAndTraits do: [:classOrTrait | classOrTrait compileAll] displayingProgress: 'Recompiling all classes and traits'. ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 12:31'! category: aCategory category := aCategory! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 12:51'! class: aClass class := aClass! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/27/2013 22:26'! compile ^self translate generate ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 34946881! compile: textOrStream in: aClass classified: aCategory notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; category: aCategory; failBlock: aFailBlock; translate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 34947651! compile: textOrStream in: aClass notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; failBlock: aFailBlock; translate ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 34947906! compileNoPattern: textOrStream in: aClass context: aContext notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; context: aContext; requestor: aRequestor; noPattern: true; failBlock: aFailBlock; translate! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 12:50'! context: aContxt context := aContxt ! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/27/2013 19:22'! doSemanticAnalysis ^[ast doSemanticAnalysisIn: class interactive: self interactive notifying: requestor] on: OCSemanticError do: [ :ex | ex defaultAction. ^failBlock value ]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/27/2013 21:01'! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | class := context == nil ifTrue: [receiver class ] ifFalse: [context method methodClass]. self noPattern: true. selectedSource := ((requestor respondsTo: #selection) and:[(itsSelection := requestor selection) notNil and:[(itsSelectionString := itsSelection asString) isEmptyOrNil not]]) ifTrue:[itsSelectionString] ifFalse:[source]. self source: selectedSource. methodNode := self translate. method := (UIManager default interactiveParserFor: requestor) ifTrue: [methodNode generateWithSource] ifFalse: [methodNode generate]. value := receiver withArgs: (context ifNil: [#()] ifNotNil: [{context}]) executeMethod: method. self logged ifTrue:[SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context]. ^ value! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 21:02' prior: 34948379! evaluate: aString in: aContext to: aReceiver ^self source: aString; context: aContext; receiver: aReceiver; failBlock: [^ #failedDoit]; evaluate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 20:55' prior: 34948717! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; context: aContext; receiver: receiver; requestor: aRequestor; failBlock: aFailBlock; evaluate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 20:55' prior: 34949002! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock logged: logFlag ^self source: textOrStream; context: aContext; receiver: receiver; requestor: aRequestor; failBlock: aFailBlock; logged: logFlag; evaluate! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 14:41'! failBlock: aBlock failBlock := aBlock ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/27/2013 19:40'! format ^self parse formattedCode.! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 20:55' prior: 35543820! format: textOrStream in: aClass notifying: aRequestor ^self source: textOrStream; class: aClass; requestor: aRequestor; format ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 20:52'! logged ^logged ifNil: [ false ].! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 20:43'! logged: aBoolean logged := aBoolean! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 14:42'! noPattern ^noPattern ifNil: [ false ]. ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 14:41'! noPattern: aBoolean noPattern := aBoolean ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/27/2013 15:42'! parse | expression selector arguments method | self noPattern ifFalse: [^RBParser parseMethod: source contents]. expression := (RBParser parseExpression: source contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/29/2013 10:37'! parse: aString class: aClass ^self source: aString; class: aClass; parse! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/29/2013 10:36'! parse: aString class: aClass noPattern: aBoolean context: aContext notifying: req ifFail: aBlock "Backwards compatibilty" ^self source: aString; class: aClass; noPattern: aBoolean; context: aContext; requestor: req; failBlock: aBlock; translate.! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 21:24' prior: 34952862! parse: textOrStream in: aClass notifying: req ^self source: textOrStream; class: aClass; requestor: req; translate.! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/29/2013 10:39'! parseArgsAndTemps: aString notifying: req aString ifNil: [^ #()]. self source: aString; requestor: req; parse. ^ ast tempNames! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 11:10'! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^[RBParser parseMethodPattern: aString] on: Error do: [nil].! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/27/2013 12:53' prior: 34954461! parserClass ^OCParser. ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 20:42'! receiver: anObject receiver := anObject! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 12:26'! requestor: aRequestor requestor := aRequestor! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 4/27/2013 12:45'! source: aString source := aString readStream.! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/27/2013 19:57'! translate [ ast := self parse] on: SyntaxErrorNotification, OCBackendError "OCBackendError should not be raised when parsing" do: [:ex | requestor ifNotNil: [ requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ]. ^failBlock value]. self doSemanticAnalysis. ^ast. ! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 19912825! parser parser ifNil: [parser := Parser new]. ^parser! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/29/2013 13:31' prior: 19913080! parserClass ^ Parser! ! !DebuggerMethodMapOpal methodsFor: 'initialize-release' stamp: 'MarcusDenker 4/27/2013 09:59' prior: 34781504! forMethod: aCompiledMethod methodNode := aCompiledMethod ast.! ! !EyeInspector commentStamp: '' prior: 35960746! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 3/20/2013 17:45'! debuggerSpec ^ SpecLayout composed newRow: [:row | row add: #list width: 135; add: #description ]; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 4/29/2013 10:02'! debuggerSpec2 ^ SpecLayout composed add: #list origin: 0@0 corner: 0.33@1; add: #description origin: 0.33@0 corner: 1@1; yourself! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 4/25/2013 15:55'! inspect: anObject ^ anObject eyeClass new inspect: anObject; openWithSpec: #inspectorSpec2; prepareObject; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 3/18/2013 13:46'! inspectorSpec ^ SpecLayout composed newColumn: [:c | c newRow: [:row | row add: #list width: 135; add: #description ]; newRow: [:row2 | row2 add: #text ] height: 75 ]; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 4/25/2013 15:52'! inspectorSpec2 ^ SpecLayout composed add: #list origin: 0@0 corner: 0.4@0.70; add: #description origin: 0.4@0 corner: 1@0.70; add: #text origin: 0@0.70 corner: 1@1; yourself! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/25/2013 14:51'! addAllInstVars: elements "Add AllInstVars to the list of elements you can access in the inspector" elements add: (self elemClass fieldName: 'all inst vars' object: self object printedValue: (self object longPrintStringLimitedTo: 2000)).! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/25/2013 14:52'! addInstancesVariable: elements "Add all the instance variables to the list of elements you can access in the inspector, set them so that you can modify and save them" self object class allInstVarNames doWithIndex: [:name :i | |elem| elem := self elemClass fieldName: name object: (self object instVarAt: i) saveAction: [:value | self object instVarAt: i put: value]. elements add: elem ]! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/25/2013 14:51'! addSelf: elements "Add self to the list of elements you can access in the inspector" elements add: (self elemClass fieldName: 'self' object: self object).! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 3/29/2013 13:21'! addSpecialFields: elements "Override in subclass to add fields to the inspector" "ex : elements add: (self elemClass fieldName: #mySpecialFieldName object: self object someMethod) elements add: (self elemClass fieldName: #mySpecialFieldName2 object: self object someOtherMethod printedValue: (self object at: #mySpecialFieldName2) printString saveAction: [:value | object at: #mySpecialFieldName2 put: value] )"! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/25/2013 14:52'! addVariableFields: elements "add the variable fields to the inspector. Shorten the list for very long collection (cf limit1 and limit2), set them so that you can modify and save them" self variableFieldsToShow do: [ :index | |elem| elem := self elemClass fieldName: index printString object: (self object basicAt: index) saveAction: [:value | self object basicAt: index put: value]. elements add: elem ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/29/2013 10:48'! close "Kill the process that refreshes the inspector" refreshLoop contents: false! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! description ^ description! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! description: anObject description := anObject! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 4/25/2013 15:55'! dive: anObject "This is called to update the inspector model with a new object, to remember the prevous object and to update the UI" self save: mementoPrev. mementoNext removeAll. self inspect: anObject. self prepareObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 16:19'! elemClass ^EyeElement! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/20/2013 09:50'! explore: anObject "This is called to open a new ObjectExplorer on the object" Smalltalk tools objectExplorer openOn: anObject! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 3/20/2013 15:38'! generateElements "generate the collection of elements to show in the inspector for the object inspected" |elements| elements := OrderedCollection new. self addSelf: elements. self addAllInstVars: elements. self addInstancesVariable: elements. self addVariableFields: elements. self addSpecialFields: elements. ^elements! ! !EyeInspector methodsFor: 'protocol' stamp: 'ClementBera 3/20/2013 11:08'! initialExtent "Answer the desired extent for the receiver when it is first opened on the screen. " ^ 350 @ 300! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 3/20/2013 14:00'! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged: The mementos instances variables are used for diving" mementoPrev := Dictionary new. mementoNext := Dictionary new. object := nil asValueHolder. super initialize.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 4/29/2013 10:28'! initializeInspectorLoop refreshLoop := [ self refresh ] valueWithInterval: self updateTime.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 4/25/2013 14:56'! initializePresenter "initialize the event handlings" object whenChangedDo: [ self objectChanged ]. list whenSelectedItemChanged: [ self printDescription ]. description whenTextIsAccepted: [ self saveElement ]. self initializeShortCuts. self initializeInspectorLoop.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 3/20/2013 14:02'! initializeShortCuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | list on: key do: value ] ! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 3/20/2013 11:06'! initializeWidgets self instantiateModels: #( list ListComposableModel text TextModel description TextModel ). text aboutToStyle: true. ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 4/25/2013 15:38'! inspect: anObject "This is called to update the inspector model with a new object, updates the UI" self object: anObject. ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/20/2013 09:48'! inspectInNewWindow: anObject "This is called to open a new inspector on the object" self class inspect: anObject! ! !EyeInspector methodsFor: 'menu' stamp: 'ClementBera 4/25/2013 15:41'! inspectionMenu: aMenu "self refreshSubMenu: aMenu." self inspectionSubMenu: aMenu. self selectedElement inspectionMenu: aMenu inspector: self. ^aMenu! ! !EyeInspector methodsFor: 'menu' stamp: 'ClementBera 3/29/2013 13:13'! inspectionSubMenu: aMenu |selectedObject| selectedObject := self selectedElement object. aMenu add: 'Inspect (i)' translated target: self selector: #inspectInNewWindow: argumentList: {selectedObject}; add: 'Dive (d)' translated target: self selector: #dive: argumentList: {selectedObject}. mementoPrev size = 0 ifFalse: [ aMenu add: 'previous object (p)' translated target: self selector: #prev]. mementoNext size = 0 ifFalse: [ aMenu add: 'next object (n)' translated target: self selector: #next]. aMenu add: 'Explore (I)' translated target: self selector: #explore: argumentList: {selectedObject}. aMenu addLine.! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 3/20/2013 10:25'! limit1 "This is the max index shown before skipping to the last limit2 elements of very long arrays" ^ 100! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 3/12/2013 17:10'! limit2 "This is the number of elements to show at the end of very long arrays" ^ 10! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! list ^ list! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! list: anObject list := anObject! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/13/2013 10:22'! next "This is called to put back the next inpected object into the inspector. It updates the UI" self save: mementoPrev. self remember: mementoNext. mementoNext := (mementoNext at: 'mementoPrev') ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:45'! object ^ object contents! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:45'! object: anObject object contents: anObject! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 15:54'! objectChanged "triggered when the inspected object is changed" self updateList. text doItReceiver: self object. description doItReceiver: self. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/29/2013 13:48'! objectClass ^ self object class! ! !EyeInspector methodsFor: 'private' stamp: 'ClementBera 4/25/2013 14:47'! okToChange "This method permits to move from element to element in the left panel list without having to accept the code in the bottom text panel" description canDiscardEdits ifTrue: [^ true]. description changed: #wantToChange. ^ description canDiscardEdits! ! !EyeInspector methodsFor: 'protocol' stamp: 'ClementBera 4/29/2013 10:47'! openWithSpec: aSpec | w | w := super openWithSpec: aSpec. w whenClosedDo: [ self close ]. ^ w! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 15:58'! prepareObject "A fresh new object arrived in the inspector, display it properly" list setSelectedIndex: 1. description text: self object printString ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/13/2013 10:21'! prev "This is called to put back the previous inpected object into the inspector. It updates the UI" self save: mementoNext. self remember: mementoPrev. mementoPrev := (mementoPrev at: 'mementoPrev') ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 3/29/2013 14:19'! printDescription "When you select an element in the list of the inspector, prnt on the description textModel the element selected" self selectedElement ifNotNil: [:element | description text: element printedValue ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 15:58'! refresh "refresh the object in the inspector, updating his modified instance variables" |selectedIndex| selectedIndex := list selectedIndex. self inspect: self object. list setSelectedIndex: selectedIndex.! ! !EyeInspector methodsFor: 'menu' stamp: 'ClementBera 4/25/2013 15:42'! refreshSubMenu: aMenu "Add a refresh button in the inspector. Not used anymore since there is this loop in initializeInspectorLoop." aMenu add: 'Refresh' translated target: self selector: #refresh. aMenu addLine. ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/13/2013 10:19'! remember: memento "This is called to put back a previously inpected object into the inspector" self inspect: (memento at: 'object'). list setSelectedIndex: (memento at: 'selectedIndex'). ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/13/2013 10:32'! save: memento "This save the state of the inspector to be able to remember it later" |tempMemento| tempMemento := memento copy. memento removeAll. memento at: 'object' put: self object. memento at: 'mementoPrev' put: tempMemento. memento at: 'selectedIndex' put: list selectedIndex. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 16:03'! saveElement "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class evaluatorClass new evaluate: description text readStream in: nil "should be object in case of methodContext" to: description doItReceiver. newValue == #failedDoit ifFalse: [ self selectedElement save: newValue. self objectChanged]! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 15:58'! selectedElement ^list selectedItem! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 3/29/2013 14:15'! shortCuts "Answers a dictionary of the shortcuts usable in EyeInspector" |shortCuts| shortCuts := Dictionary new. shortCuts at: $i command put: [ self inspectInNewWindow: list selectedItem object ]. shortCuts at: $i command shift put: [ self explore: list selectedItem object ]. shortCuts at: $d command put: [ self dive: list selectedItem object ]. shortCuts at: $b command put: [ list selectedItem browseFull ]. shortCuts at: $h command put: [ list selectedItem browseHierarchy ]. shortCuts at: $p command put: [ mementoPrev size = 0 ifFalse: [ self prev ]]. shortCuts at: $n command put: [ mementoNext size = 0 ifFalse: [ self next ]]. shortCuts at: $c command put: [ list selectedItem copyName ]. shortCuts at: $n command shift put: [ list selectedItem browseClassRefs: self objectClass ]. ^shortCuts! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! text ^ text! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16'! text: anObject text := anObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 17:34'! title ^ self object class printString! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 15:53'! updateList "update the list of elements displayed according to the new object" |elements| elements := self generateElements. list items: elements. list displayBlock: [:e :index | (elements at: index ifAbsent: [self elemClass fieldName: '' object: nil ]) fieldName ]. list menu: [ :aMenu | self inspectionMenu: aMenu ]. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 4/29/2013 10:29'! updateTime "time in which the inspector updates the object" ^ 1 second! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 3/29/2013 13:21'! variableFieldsToShow "Answers the indexes of the variable fields of the object to show. Shorten the list for very long collection (cf limit1 and limit2)" |bSize| bSize := self object basicSize. ^ bSize <= (self limit1 + self limit2) ifTrue: [1 to: bSize] ifFalse: [(1 to: self limit1) , (bSize - self limit2 + 1 to: bSize)].! ! !SpecDebugger commentStamp: '' prior: 35961054! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecDebugger class methodsFor: 'helper' stamp: 'AndreiChis 4/1/2013 12:26' prior: 34263439! handlesContext: aMethodContext ^ true! ! !SpecDebugger class methodsFor: 'specs' stamp: 'ClementBera 4/29/2013 09:55' prior: 34265994! spec ^ SpecLayout composed newColumn: [ :column | column add: #stack; add: #toolbar height: 25; addSplitter; add: #code; addSplitter; newRow: [ :row | row add: #receiverInspector; add: #contextInspector ] ]! ! !SpecDebugger class methodsFor: 'specs' stamp: 'ClementBera 4/29/2013 10:05'! specOptimized ^ SpecLayout composed add: #stack origin: 0@0 corner: 1@0.25; add: #toolbar origin: 0@0.25 corner: 1@0.25 offsetOrigin: 0@0 offsetCorner: 0@25; add: #code origin: 0@0.25 corner: 1@0.80 offsetOrigin: 0@25 offsetCorner: 0@0; add: #receiverInspector origin: 0@0.80 corner: 0.5@1; add: #contextInspector origin: 0.5@0.80 corner: 1@1; yourself! ! !SpecDebugger methodsFor: 'actions' stamp: 'ClementBera 4/29/2013 10:48' prior: 34266479! close self removeActionsForSession: self session. self session ifNotNil: [ :aSession | aSession terminate]. contextInspector close. receiverInspector close.! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'ClementBera 4/29/2013 09:51'! contextInspector ^ contextInspector! ! !SpecDebugger methodsFor: 'protocol' stamp: 'ClementBera 4/29/2013 10:13' prior: 34267441! initialExtent "This code was taken from the old debugger to get the same behavior. Fell free to refactor" RealEstateAgent standardWindowExtent y < 400 "a tiny screen" ifTrue: [^ 700@500]. ^ [ | w h | w := Display width. h := Display height. (w - (w // 3)) @ (h - (h // 5)) ] on: Error do: [ 850@600 ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 4/29/2013 09:46' prior: 34267929! initializePresenter super initializePresenter. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ] ]. self stack whenSelectedItemChanged: [:aContext | self updateToolbarFromContext: aContext. self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 4/29/2013 09:45' prior: 34268308! initializeWidgets self instantiateModels: { #stack -> #MultiColumnListModel. #code -> #TextModel. #toolbar -> #SpecDebuggerToolbar. #contextInspector -> #EyeInspector. #receiverInspector -> #EyeInspector }. self stack displayBlock: [:aContext | self columnsFor: aContext ]. self code acceptBlock: [:text | self recompileMethodTo: text string inContext: self stack selectedItem ]. self setStackMenu.! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'ClementBera 4/29/2013 09:51'! receiverInspector ^ receiverInspector! ! !SpecDebugger methodsFor: 'updating' stamp: 'ClementBera 4/29/2013 09:48'! updateInspectorsFromContext: aContext contextInspector inspect: aContext. receiverInspector inspect: ( aContext ifNil: [ nil ] ifNotNil: [ aContext receiver ] )! ! OCParser removeSelector: #queryUninitializedTemp:! OCParser removeSelector: #parse:class:noPattern:notifying:ifFail:! OCParser removeSelector: #parse:class:category:noPattern:context:notifying:ifFail:! OCParser removeSelector: #notify:at:! OCParser removeSelector: #interactive! OCParser removeSelector: #fail! OCParser removeSelector: #endOfLastToken! OCParser removeSelector: #encoder! OpalCompiler removeSelector: #translate:noPattern:ifFail:! OpalCompiler removeSelector: #parser:! OpalCompiler removeSelector: #parser! OpalCompiler removeSelector: #parse:noPattern:! OpalCompiler removeSelector: #notify:at:! OpalCompiler removeSelector: #notify:! OpalCompiler removeSelector: #from:class:context:notifying:! OpalCompiler removeSelector: #from:class:classified:context:notifying:! CodeHolder removeSelector: #toggleDecompile! CodeHolder removeSelector: #showingDecompileString! CodeHolder removeSelector: #showingDecompile! CodeHolder removeSelector: #showDecompile:! CodeHolder removeSelector: #decompiledSourceIntoContents! OCCompilerNotifyingTest removeSelector: #testTempDoubledDefined! OCCompilerNotifyingTest removeSelector: #testLiteralCharacterMissing! OCCompilerNotifyingTest removeSelector: #testCascadeInASuperSend! OCCompilerNotifyingTest removeSelector: #testATempShadowingAnotherTemp! "Compiler"! "Kernel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Spec-Debugger"! "System-FilePackage"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(29 April 2013 2:28:19 pm) Pharo.image priorSource: 2385214! ----STARTUP----an Array(29 April 2013 2:34:55 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 April 2013 2:34:55 pm) Pharo-30072.image priorSource: 2474771! ----STARTUP----an Array(29 April 2013 4:45:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'md 4/29/2013 16:41' prior: 35939947! commentForCurrentUpdate ^ '10445 Running NonDestructive Regression Tests Headless: wrong error handling https://pharo.fogbugz.com/f/cases/10445'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'md 4/29/2013 16:42'! script170 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.411.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1393.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.218.mcz OpalCompiler-Tests-MarcusDenker.125.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-StephaneDucasse.3.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.80.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1089.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-md.101.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'md 4/29/2013 16:42'! update30073 "self new update30073" self withUpdateLog: '10445 Running NonDestructive Regression Tests Headless: wrong error handling https://pharo.fogbugz.com/f/cases/10445'. self loadTogether: self script170 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphicUIManager methodsFor: 'settings' stamp: 'MarcusDenker 4/29/2013 15:51' prior: 27164688! interactiveParserFor: requestor "during Morphic loading the interactive parser must be disabled" (interactiveParser = false) ifTrue: [ ^ false ]. "can be nil" ^super interactiveParserFor: requestor! ! NonInteractiveUIManager removeSelector: #interactiveParserFor:! "Polymorph-Widgets"! "UIManager"! ----End fileIn----! ----QUIT----an Array(29 April 2013 4:45:34 pm) Pharo.image priorSource: 2474971! ----STARTUP----an Array(29 April 2013 4:52:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 April 2013 4:52:12 pm) Pharo-30073.image priorSource: 2485630! ----STARTUP----an Array(29 April 2013 5:51:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/29/2013 17:47' prior: 36029694! commentForCurrentUpdate ^ '10447 Sync Opal again with 3.0 https://pharo.fogbugz.com/f/cases/10447 10446 deprecate #parserClass https://pharo.fogbugz.com/f/cases/10446'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/29/2013 17:47'! script171 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.413.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.313.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1393.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.446.mcz NautilusCommon-MarcusDenker.126.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.95.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1089.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.481.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-md.101.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/29/2013 17:47'! update30074 "self new update30074" self withUpdateLog: '10447 Sync Opal again with 3.0 https://pharo.fogbugz.com/f/cases/10447 10446 deprecate #parserClass https://pharo.fogbugz.com/f/cases/10446'. self loadTogether: self script171 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 4/29/2013 15:04'! testBlockAndContextSourceNode |block blockNodeViaContext blockNodeViaClosure | block := [blockNodeViaContext := thisContext sourceNode]. block value. blockNodeViaClosure := block sourceNode. self assert: blockNodeViaContext == blockNodeViaClosure ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 4/29/2013 15:03'! testBlockSourceNode self assert: (([ 1 + 2 ] sourceNode) isKindOf: RBBlockNode). ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 4/29/2013 15:03'! testMethodSourceNodeAtPC self assert: (((Object>>#halt) sourceNodeForPC: 22) isKindOf: RBMessageNode). ! ! !RxMatcherTest methodsFor: 'utilties' stamp: 'MarcusDenker 4/29/2013 17:13' prior: 32408208! compileRegex: aString "Compile the regex and answer the matcher, or answer nil if compilation fails." | syntaxTree | syntaxTree := RxParser safelyParse: aString. ^ syntaxTree isNil ifFalse: [ self matcherClass for: syntaxTree ]! ! !IRBytecodeDecompiler methodsFor: 'private' stamp: 'MarcusDenker 4/29/2013 17:39' prior: 34726295! methodClass ^ instructionStream method methodClass! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 17:11' prior: 19770656! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 4/29/2013 14:41' prior: 36002313! doSemanticAnalysis ^[ast doSemanticAnalysisIn: class interactive: (UIManager default interactiveParserFor: requestor) notifying: requestor] on: OCSemanticError do: [ :ex | ex defaultAction. ^failBlock value ]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/29/2013 17:20' prior: 36005894! parse | expression selector arguments method | self noPattern ifFalse: [^RBParser parseMethod: source contents]. expression := (RBParser parseExpression: source contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/29/2013 16:25' prior: 36007379! parseArgsAndTemps: aString notifying: req aString ifNil: [^ #()]. ast := self source: aString; requestor: req; parse. ^ ast tempNames! ! !OCFakeDecompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/29/2013 17:23' prior: 35553816! decompile: selector in: aClass method: aMethod "to be fixed" | source | source := aMethod getSourceFromFile. source ifNil: [Decompiler new decompile: selector in: aClass method: aMethod ] ifNotNil: [OpalCompiler new parse: source class: aClass]! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/29/2013 16:09' prior: 35554826! sourceNode | activePC | activePC := pc ifNil: [ self startpc + 1] ifNotNil: [pc - 1]. activePC <= self startpc ifTrue: [ activePC := pc ]. ^(method sourceNodeForPC: activePC) methodOrBlockNode ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ajh 6/28/2004 13:52' prior: 34735926! compiledMethod ^ self ir compiledMethod! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/19/2013 12:52' prior: 35552667! decompileString ^self formattedCode ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 11/20/2012 15:44' prior: 34736068! doSemanticAnalysis self doSemanticAnalysisIn: self methodClass.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 1/25/2013 15:09' prior: 34736232! doSemanticAnalysisIn: classOrScope self doSemanticAnalysisIn: classOrScope interactive: false.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/8/2013 15:48' prior: 34736426! doSemanticAnalysisIn: classOrScope interactive: aBoolean self doSemanticAnalysisIn: classOrScope interactive: aBoolean notifying: nil.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/8/2013 15:21' prior: 34736660! doSemanticAnalysisIn: classOrScope interactive: aBoolean notifying: aRequestor "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." classOrScope isBehavior ifTrue: [self methodClass: classOrScope]. OCASTSemanticAnalyzer new scope: classOrScope parseScope; errorNotification: aBoolean; requestor: aRequestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 8/10/2010 16:42' prior: 34737186! generate "The receiver is the root of a parse tree. Answer a CompiledMethod. The argument, trailer, is the references to the source code that is stored with every CompiledMethod." ^self generate: CompiledMethodTrailer empty! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 11/20/2012 16:30' prior: 34737506! generate: trailer ^ self generateIR compiledMethodWith: trailer.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/8/2013 16:04' prior: 34737660! generateIR | ir | scope ifNil: [self doSemanticAnalysis]. ir := (OCASTTranslator new visitNode: self) ir. self ir: ir. ^ir! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 1/30/2013 13:13' prior: 34737884! generateWithSource "Answer a CompiledMethod with source encoded in trailer." "for doits, we need to store the source pretty printed from the AST to get the return and methodName correct" self selector isDoIt ifTrue: [source := self formattedCode]. ^self generate: (CompiledMethodTrailer new sourceCode: source).! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'jorgeRessia 11/22/2009 10:30' prior: 34738306! ir ^ self propertyAt: #ir ifAbsent: [self generateIR].! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'JorgeRessia 11/24/2009 19:05' prior: 34738462! ir: aIRMethodNode ^ self propertyAt: #ir put: aIRMethodNode.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/17/2013 16:56' prior: 35552797! methodOrBlockNode ^self.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 6/29/2012 16:04' prior: 34738624! owningScope ^ self scope! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 8/21/2010 13:05' prior: 34738739! primitiveFromPragma | aPragmaPrimitive | pragmas isNil ifTrue: [^OCPrimitiveNode null]. aPragmaPrimitive := pragmas detect: [:each | each isPrimitive ] ifNone:[]. aPragmaPrimitive isNil ifTrue: [^OCPrimitiveNode null] ifFalse: [^aPragmaPrimitive primitive ]! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 8/10/2010 16:40' prior: 34739109! properties ^self propertyAt: #methodProperties ifAbsentPut: [AdditionalMethodState new]! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'JorgeRessia 11/24/2009 18:56' prior: 34739298! properties: aMethodeProperties ^self propertyAt: #methodProperties put: aMethodeProperties! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/23/2013 16:45' prior: 35652590! rewriteTempNamedRead: aTempName forContext: aContext | rewriter offset | offset := aContext tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName with: 'ThisContext namedTempAt:', offset asString. (rewriter executeTree: self) ifTrue: [^rewriter tree] ifFalse: [^self].! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/23/2013 16:44' prior: 35653010! rewriteTempNamedWrite: aTempName forContext: aContext | rewriter offset | offset := aContext tempNames indexOf: aTempName. rewriter := RBParseTreeRewriter new. rewriter replace: aTempName, ' := ``@object' with: 'ThisContext namedTempAt:', offset asString, 'put: ``@object'. (rewriter executeTree: self) ifTrue: [^rewriter tree] ifFalse: [^self].! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/19/2013 08:32' prior: 35552912! sourceNodeForPC: anInteger ^(self ir instructionForPC: anInteger) sourceNode! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/29/2013 15:06'! sourceText: aString self source: aString! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/29/2013 15:25'! tempNames "compatibility method to old MethodNode" self flag: #Clean. ^ self argumentNames, self temporaryNames! ! !UndefinedObject methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 17:12' prior: 54475947! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^ self class compilerClass! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 4/29/2013 17:39' prior: 35057510! testDoubleRemoteAnidatedBlocks | ast assignment vars scopes | ast := (OCOpalExamples>>#doubleRemoteAnidatedBlocks) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0. self assert: ast scope tempVector size = 2. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: (ast scope lookupVar: 'last') isRemote. self assert: (ast scope lookupVar: 'val') isRemote. self assert: (ast scope lookupVar: 'val') vectorName = '0vector0'. self deny: (scopes second lookupVar: 'i') isRemote. ! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 17:12' prior: 52097173! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! MethodNode removeSelector: #parserClass! Compiler removeSelector: #parserClass! Compiler class removeSelector: #parserClass! OCParser removeSelector: #requestor:! OCParser removeSelector: #requestor! OCParser removeSelector: #realParserClass! OCParser removeSelector: #parser! OCParser removeSelector: #parseSelector:! OCParser removeSelector: #parseArgsAndTemps:notifying:! OCParser removeSelector: #parse:class:noPattern:context:notifying:ifFail:! OCParser removeSelector: #parse:class:! OCParser removeSelector: #classEncoding! Smalltalk globals removeClassNamed: #OCParser! PseudoClass removeSelector: #parserClass! OpalCompiler removeSelector: #parserClass! OpalCompiler removeSelector: #interactive! OpalCompiler class removeSelector: #parserClass! RxMatcherTest removeSelector: #parserClass! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! "Compiler"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Regex-Tests-Core"! "System-FilePackage"! ----End fileIn----! ----QUIT----an Array(29 April 2013 5:51:14 pm) Pharo.image priorSource: 2485830! ----STARTUP----an Array(29 April 2013 5:57:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 April 2013 5:57:51 pm) Pharo-30074.image priorSource: 2507299! ----STARTUP----an Array(30 April 2013 8:47:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/30/2013 08:38' prior: 36040563! commentForCurrentUpdate ^ '10431 remove everything from UI related to showing decompiled code https://pharo.fogbugz.com/f/cases/10431 10436 Fast-up mixed Integer Fraction sum and difference https://pharo.fogbugz.com/f/cases/10436 10450 Fix interactiveParserFor: https://pharo.fogbugz.com/f/cases/10450 10449 Running all Fuel tests corrupts Smalltalk globals with an FLPerson instance https://pharo.fogbugz.com/f/cases/10449'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/30/2013 08:39'! script172 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.415.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1394.mcz KernelTests-MarcusDenker.491.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.790.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1091.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.483.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/30/2013 08:39'! update30075 "self new update30075" self withUpdateLog: '10431 remove everything from UI related to showing decompiled code https://pharo.fogbugz.com/f/cases/10431 10436 Fast-up mixed Integer Fraction sum and difference https://pharo.fogbugz.com/f/cases/10436 10450 Fix interactiveParserFor: https://pharo.fogbugz.com/f/cases/10450 10449 Running all Fuel tests corrupts Smalltalk globals with an FLPerson instance https://pharo.fogbugz.com/f/cases/10449'. self loadTogether: self script172 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Fraction methodsFor: 'arithmetic' stamp: 'nice 3/11/2013 08:09' prior: 22584068! + aNumber "Answer the sum of the receiver and aNumber." | n d d1 d2 | aNumber isInteger ifTrue: [^Fraction numerator: numerator + (denominator * aNumber) denominator: denominator]. aNumber isFraction ifTrue: [d := denominator gcd: aNumber denominator. n := numerator * (d1 := aNumber denominator // d) + (aNumber numerator * (d2 := denominator // d)). d1 := d1 * d2. n := n // (d2 := n gcd: d). (d := d1 * (d // d2)) = 1 ifTrue: [^ n]. ^ Fraction numerator: n denominator: d]. ^ aNumber adaptToFraction: self andSend: #+! ! !Fraction methodsFor: 'arithmetic' stamp: 'nice 3/11/2013 08:09' prior: 22584564! - aNumber "Answer the difference between the receiver and aNumber." aNumber isInteger ifTrue: [^Fraction numerator: numerator - (denominator * aNumber) denominator: denominator]. aNumber isFraction ifTrue: [^ self + aNumber negated]. ^ aNumber adaptToFraction: self andSend: #-! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/29/2013 20:27'! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !MessageBrowser methodsFor: 'initialization' stamp: 'MarcusDenker 4/29/2013 21:21' prior: 25573707! initializeDropList | item1 item2 item3 item4 | item1 := DropListItem named: 'Source' do: [ self textConverter: SourceMethodConverter new ]. item2 := DropListItem named: 'Byte Code' do: [ self textConverter: ByteCodeMethodConverter new ]. item3 := DropListItem named: 'Time stamp' do: [ self textConverter: TimeStampMethodConverter new ]. toolbarModel setDropListItems: {item1. item2. item3}! ! !UIManager methodsFor: 'settings' stamp: 'MarcusDenker 4/29/2013 20:22' prior: 53897645! interactiveParserFor: requestor requestor ifNil: [^ false ]. (requestor respondsTo: #interactive) ifTrue: [ ^requestor interactive ]. ^true! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 20:16' prior: 35824953! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 20:29'! compile: code classified: category notifying: requestor trailer: bytes "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: [^nil]. ^ methodNode generate: bytes! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/29/2013 20:18' prior: 52097710! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !Integer methodsFor: 'arithmetic' stamp: 'nice 3/11/2013 08:12' prior: 23739585! + aNumber "Refer to the comment in Number + " aNumber isInteger ifTrue: [self negative == aNumber negative ifTrue: [^ (self digitAdd: aNumber) normalize] ifFalse: [^ self digitSubtract: aNumber]]. aNumber isFraction ifTrue: [^Fraction numerator: self * aNumber denominator + aNumber numerator denominator: aNumber denominator]. ^ aNumber adaptToInteger: self andSend: #+! ! !Integer methodsFor: 'arithmetic' stamp: 'nice 3/11/2013 08:12' prior: 23739903! - aNumber "Refer to the comment in Number - " aNumber isInteger ifTrue: [self negative == aNumber negative ifTrue: [^ self digitSubtract: aNumber] ifFalse: [^ (self digitAdd: aNumber) normalize]]. aNumber isFraction ifTrue: [^Fraction numerator: self * aNumber denominator - aNumber numerator denominator: aNumber denominator]. ^ aNumber adaptToInteger: self andSend: #-! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 4/29/2013 21:18' prior: 17276065! buildTextAreaButtonsColumn: aWindow | column | column := PanelMorph new. column changeTableLayout; listDirection: #topToBottom. { self buildSwitchToSourceCodeButton. self buildSwitchToByteCodeButton. self buildSeparator. self buildBrowseInstVarsButton. self buildBrowseClassVarsButton} reverse do: [:each | column addMorph: each ]. column vResizing: #spaceFill; width: 24; hResizing: #rigid. ^ column! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'MarcusDenker 4/29/2013 21:19' prior: 17253328! currentDisplayChoice: aSymbol currentDisplayChoice := aSymbol. self changed: #showSource. self changed: #showByteCode. self changed: #sourceCodeFrom:. self announce: (NautilusTextDisplayerChanged displayerSymbol: aSymbol)! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'MarcusDenker 4/29/2013 21:19' prior: 35624303! selectedMethodSource self selectedMethod ifNil: [ ^ '' ]. self showSource ifTrue: [ ^ self selectedMethod sourceCode ]. self showByteCode ifTrue: [ ^ self selectedMethod symbolic ]. ^ 'error'. ! ! !FLBasicSerializationTest methodsFor: 'tests-globals' stamp: 'CamilloBruni 4/29/2013 19:11' prior: 21444433! testConsiderCustomGlobal "A custom global variable is treated as global by Fuel, when we explicitly specify this." | aPerson globalKey | globalKey := #FLGlobalVariableForTesting. self analyzer considerGlobal: globalKey. aPerson := FLPerson new. [ Smalltalk globals at: globalKey put: aPerson. self assertSerializationIdentityOf: aPerson. ] ensure: [ Smalltalk globals removeKey: globalKey ] ! ! !FLBasicSerializationTest methodsFor: 'tests-globals' stamp: 'CamilloBruni 4/29/2013 19:10' prior: 21444860! testConsiderCustomWideSymbolGlobal "The same than #testConsiderCustomGlobal but with a WideSymbol." | aWideSymbol aPerson | aWideSymbol := (WideString streamContents: [ :stream | 256 to: 260 do: [ :code | stream nextPut: code asCharacter ] ]) asSymbol. self analyzer considerGlobal: aWideSymbol. aPerson := FLPerson new. [ Smalltalk globals at: aWideSymbol put: aPerson. self assertSerializationIdentityOf: aPerson ] ensure: [ Smalltalk globals removeKey: aWideSymbol ]. ! ! !FLBasicSerializationTest methodsFor: 'tests-globals' stamp: 'CamilloBruni 4/29/2013 19:10' prior: 21445389! testDontConsiderCustomGlobal "A custom global variable is not treated as global by Fuel, unless we explicitly specify this." | aPerson globalName | aPerson := FLPerson new. globalName := #FLGlobalVariableForTesting. [ Smalltalk globals at: globalName put: aPerson. self deny: (self resultOfSerializeAndMaterialize: aPerson) == aPerson ] ensure: [ Smalltalk globals removeKey: globalName ]. ! ! DecompileMethodConverter removeSelector: #shouldShout! DecompileMethodConverter removeSelector: #internalGetText! Smalltalk globals removeClassNamed: #DecompileMethodConverter! NautilusIcons removeSelector: #decompileUnselectedIcon! NautilusIcons removeSelector: #decompileSelectedIcon! NautilusIcons removeSelector: #decompilePressedIcon! AbstractNautilusUI removeSelector: #switchToDecompileButton! AbstractNautilusUI removeSelector: #showDecompile! AbstractNautilusUI removeSelector: #decompileSymbol! AbstractNautilusUI removeSelector: #buildSwitchToDecompileButton! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." "ar 7/10/1999: Use oldClass compiledMethodAt: not self compiledMethodAt:" | method trailer methodNode | method := oldClass compiledMethodAt: selector. trailer := method trailer. methodNode := self compilerClass new compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: trailer). ! ! TraitBehavior removeSelector: #recompile:from:! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !Trait method! compile2: code classified: category notifying: requestor trailer: bytes ifFail: failBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: failBlock. ^ methodNode generate: bytes! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: [^nil]. ^ methodNode generate: bytes! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: [^nil]. ^ methodNode generate: bytes! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! "Compiler"! "FuelTests"! "Kernel"! "Nautilus"! "NautilusCommon"! "Spec-Tools"! "Tools"! "Traits"! "UIManager"! ----End fileIn----! ----QUIT----an Array(30 April 2013 8:47:26 am) Pharo.image priorSource: 2507499! ----STARTUP----an Array(30 April 2013 8:54:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 April 2013 8:54:01 am) Pharo-30075.image priorSource: 2530238! ----STARTUP----an Array(30 April 2013 10:50:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/30/2013 10:47' prior: 36062232! commentForCurrentUpdate ^ '10453 cleanup logMethodSource2:... and compile2: https://pharo.fogbugz.com/f/cases/10453 10451 Compiler API: compatibility API class side --> instance side https://pharo.fogbugz.com/f/cases/10451 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/30/2013 10:47'! script173 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.418.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1396.mcz KernelTests-MarcusDenker.493.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.792.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1091.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.485.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/30/2013 10:47'! update30076 "self new update30076" self withUpdateLog: '10453 cleanup logMethodSource2:... and compile2: https://pharo.fogbugz.com/f/cases/10453 10451 Compiler API: compatibility API class side --> instance side https://pharo.fogbugz.com/f/cases/10451 '. self loadTogether: self script173 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/30/2013 10:19' prior: 35866295! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Behavior methodsFor: 'traits' stamp: 'MarcusDenker 4/30/2013 10:18' prior: 35831937! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 4/30/2013 10:18' prior: 35835696! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. method2 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. self deny: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 4/30/2013 10:19' prior: 35836290! testEqualityInstanceSideMethod | method1 method2 | method1 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. method2 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. self assert: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:36'! evaluate: textOrString "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: textOrString for: nil logged: false! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:36'! evaluate: textOrString for: anObject logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor." ^self evaluate: textOrString for: anObject notifying: nil logged: logFlag! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:35'! evaluate: textOrString for: anObject notifying: aController logged: logFlag "Compile and execute the argument, textOrString with respect to the class of anObject. If a compilation error occurs, notify aController. If both compilation and execution are successful then, if logFlag is true, log (write) the text onto a system changes file so that it can be replayed if necessary." ^ self evaluate: textOrString in: nil to: anObject notifying: aController ifFail: [^nil] logged: logFlag.! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:36'! evaluate: textOrString logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil logged: logFlag! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:37'! evaluate: textOrString notifying: aController logged: logFlag "See Compiler|evaluate:for:notifying:logged:. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil notifying: aController logged: logFlag! ! !MethodAddition methodsFor: 'operations' stamp: 'MarcusDenker 4/30/2013 10:19' prior: 35834926! createCompiledMethod compiledMethod := myClass compile: text asString classified: category notifying: requestor trailer: myClass defaultMethodTrailer. selector := compiledMethod selector. self writeSourceToLog. priorMethodOrNil := myClass compiledMethodAt: selector ifAbsent: [nil]. priorCategoryOrNil := myClass organization categoryOfElement: selector.! ! !MethodAddition methodsFor: 'operations' stamp: 'MarcusDenker 4/30/2013 10:17' prior: 35835408! writeSourceToLog logSource ifTrue: [ myClass logMethodSource: text forMethod: compiledMethod inCategory: category withStamp: changeStamp ]. ! ! !TPureBehavior methodsFor: 'traits' stamp: 'MarcusDenker 4/30/2013 10:19' prior: 35830350! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/30/2013 10:19' prior: 35827953! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile2: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [^nil]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! TraitBehavior removeSelector: #addTraitSelector:withMethod:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! "Compiler"! "Kernel"! "KernelTests"! "Monticello"! "Traits"! ----End fileIn----! ----QUIT----an Array(30 April 2013 10:50:12 am) Pharo.image priorSource: 2530438! ----STARTUP----an Array(30 April 2013 10:56:54 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 April 2013 10:56:54 am) Pharo-30076.image priorSource: 2552453! ----STARTUP----an Array(30 April 2013 3:59:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/30/2013 15:56' prior: 36085172! commentForCurrentUpdate ^ '10457 Cleaning valueWithInterval API https://pharo.fogbugz.com/f/cases/10457 10454 finally remove logMethodSource2:... and compile2: https://pharo.fogbugz.com/f/cases/10454/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/30/2013 15:56'! script174 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.422.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1399.mcz KernelTests-MarcusDenker.493.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.792.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1091.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.489.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/30/2013 15:56'! update30077 "self new update30077" self withUpdateLog: '10457 Cleaning valueWithInterval API https://pharo.fogbugz.com/f/cases/10457 10454 finally remove logMethodSource2:... and compile2: https://pharo.fogbugz.com/f/cases/10454/ '. self loadTogether: self script174 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 4/30/2013 13:46' prior: 35861681! valueAfterWaiting: aDelay "Waits for a delay, then executes the block. Answers the process so you can terminate it" ^ [ aDelay wait. self value ] forkAt: Processor userBackgroundPriority named: (String streamContents: [ :s | s << 'After '; print: aDelay; <<' do: '; print: self ] )! ! !BlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 4/30/2013 13:45' prior: 35861905! valueWithInterval: aDelay "Executes the block every x milliseconds specified in arguments. Answers the process, so you can terminate it" ^ [ [ self value. aDelay wait. ] repeat ] forkAt: Processor userBackgroundPriority named: (String streamContents: [ :s | s << 'every '; print: aDelay; <<' do: '; print: self ] )! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/30/2013 11:41'! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! TPureBehavior removeSelector: #compile2:classified:notifying:trailer:ifFail:! TClassAndTraitDescription removeSelector: #logMethodSource2:forMethodWithNode:inCategory:withStamp:notifying:! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! "Compiler"! "Kernel"! "Traits"! ----End fileIn----! ----QUIT----an Array(30 April 2013 3:59:11 pm) Pharo.image priorSource: 2552655! ----STARTUP----an Array(30 April 2013 4:08:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 April 2013 4:08:09 pm) Pharo-30077.image priorSource: 2565227! ----STARTUP----an Array(30 April 2013 4:21:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 4/30/2013 16:18' prior: 36107389! commentForCurrentUpdate ^ '10456 undo a dumb bug introduced in 10453 https://pharo.fogbugz.com/f/cases/10456 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 4/30/2013 16:18'! script175 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.423.mcz CompilerTests-MarcusDenker.137.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-EstebanLorenzano.ducasse.294.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-EstebanLorenzano.14.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1400.mcz KernelTests-MarcusDenker.495.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1091.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.490.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 4/30/2013 16:18'! update30078 "self new update30078" self withUpdateLog: '10456 undo a dumb bug introduced in 10453 https://pharo.fogbugz.com/f/cases/10456 '. self loadTogether: self script175 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 4/30/2013 11:43' prior: 36095422! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Behavior methodsFor: 'traits' stamp: 'MarcusDenker 4/30/2013 11:41' prior: 36096255! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 4/30/2013 11:41' prior: 36097042! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. method2 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. self deny: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 4/30/2013 11:42' prior: 36097597! testEqualityInstanceSideMethod | method1 method2 | method1 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. method2 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty. self assert: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !MethodAddition methodsFor: 'operations' stamp: 'MarcusDenker 4/30/2013 11:43' prior: 36100230! createCompiledMethod compiledMethod := myClass compile: text asString classified: category notifying: requestor trailer: myClass defaultMethodTrailer ifFail: [ ^nil ]. selector := compiledMethod selector. self writeSourceToLog. priorMethodOrNil := myClass compiledMethodAt: selector ifAbsent: [ nil ]. priorCategoryOrNil := myClass organization categoryOfElement: selector! ! !TPureBehavior methodsFor: 'traits' stamp: 'MarcusDenker 4/30/2013 11:43' prior: 36100939! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/30/2013 11:43' prior: 36101662! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! "Compiler"! "Kernel"! "KernelTests"! "Monticello"! "Traits"! ----End fileIn----! ----QUIT----an Array(30 April 2013 4:21:12 pm) Pharo.image priorSource: 2565427! ----STARTUP----an Array(30 April 2013 4:28:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 April 2013 4:28:07 pm) Pharo-30078.image priorSource: 2584380! ----STARTUP----an Array(1 May 2013 11:53:05 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/1/2013 11:49' prior: 36120160! commentForCurrentUpdate ^ '10458 New Spec examples https://pharo.fogbugz.com/f/cases/10458 10463 Decompiler related cleanup https://pharo.fogbugz.com/f/cases/10463'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/1/2013 11:49'! script176 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.425.mcz CompilerTests-MarcusDenker.140.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1402.mcz KernelTests-MarcusDenker.497.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-StephaneDucasse.158.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1094.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.492.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/1/2013 11:49'! update30079 "self new update30079" self withUpdateLog: '10458 New Spec examples https://pharo.fogbugz.com/f/cases/10458 10463 Decompiler related cleanup https://pharo.fogbugz.com/f/cases/10463'. self loadTogether: self script176 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DynamicSpecExample commentStamp: '' prior: 0! I am an example of how to fully dynamically create a UI, and also how to dynamically redrawn a widget. ========================== (DynamicSpecExample object: nil) open. (DynamicSpecExample object: 4) open. (DynamicSpecExample object: 'Hello World') open.! !DynamicWidgetChange commentStamp: '' prior: 0! I am a dummy proto to see how easy it is to replace a subwidget with another one dynamically. DynamicWidgetChange new openWithSpec! !ScannerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/1/2013 10:01'! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" self shouldnt: [Scanner new scanTokens: '1@-1'] raise: Error. self assert: ((Scanner new scanTokens: '1@-1') at: 2) asString = '@-'! ! !Decompiler methodsFor: 'private' stamp: 'GuillermoPolito 4/26/2012 11:20' prior: 20586695! decompile: aSelector in: aClass method: aMethod using: aConstructor | block node | constructor := aConstructor. method := aMethod. self initSymbols: aClass. "create symbol tables" method isQuick ifTrue: [block := self quickMethod] ifFalse: [stack := OrderedCollection new: method frameSize. lastJumpIfPcStack := OrderedCollection new. caseExits := OrderedCollection new. statements := OrderedCollection new: 20. numLocalTemps := 0. super method: method pc: method initialPC. "skip primitive error code store if necessary" (method isPrimitive and: [self willStore]) ifTrue: [pc := pc + 2. tempVars := tempVars asOrderedCollection]. block := self blockTo: method endPC + 1. stack isEmpty ifFalse: [self error: 'stack not empty']]. node := constructor codeMethod: aSelector block: block tempVars: tempVars primitive: method primitive class: aClass. method isPrimitive ifTrue: [node removeAndRenameLastTempIfErrorCode]. ^node preen! ! !DynamicSpecExample commentStamp: '' prior: 36149377! I am an example of how to fully dynamically create a UI, and also how to dynamically redrawn a widget. ========================== (DynamicSpecExample object: nil) open. (DynamicSpecExample object: 4) open. (DynamicSpecExample object: 'Hello World') open.! !DynamicSpecExample class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/2/2013 15:36'! object: object ^ self new object: object; yourself! ! !DynamicSpecExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/2/2013 16:03'! initialize "Initialization code for NameOfSubclass" super initialize. object := nil asValueHolder.! ! !DynamicSpecExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/2/2013 16:03'! object ^ object contents! ! !DynamicSpecExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/2/2013 16:03'! object: anObject object contents: anObject! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:04'! open object contents ifNil: [ ^ self openOnNil ]. object contents isInteger ifTrue: [ ^ self openOnInteger ]. object contents isString ifTrue: [ ^ self openOnString ]! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/30/2013 16:16'! openOnInteger | ui layout | ui := DynamicComposableModel new. ui instantiateModels: #( text LabelModel plus ButtonModel minus ButtonModel ). ui text text: object contents asString. ui minus label: '-'; state: false; action: [ object contents: object contents -1. ui text text: object contents asString ]. ui plus label: '+'; state: false; action: [ object contents: object contents +1. ui text text: object contents asString ]. layout := SpecLayout composed newColumn: [ :c | c add: #text height: 25; newRow: [ :r | r add: #minus ; addSplitter; add: #plus ] height: 25 ]; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 15:43'! openOnNil | ui layout | ui := DynamicComposableModel new. ui instantiateModels: #( text TextInputFieldModel ). ui text text: 'Object is nil'; enabled: false. layout := SpecLayout composed newRow: #text height: 25; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/2/2013 16:35'! openOnString | ui layout bottomLayout temp | ui := DynamicComposableModel new. ui instantiateModels: #( label LabelModel check CheckBoxModel text TextInputFieldModel button ButtonModel ). ui label text: object contents. ui check label: 'Label on top'; state: true; whenActivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: layout ]; whenDesactivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: bottomLayout ]. object whenChangedDo: [ :o | ui label text: o asString ]. ui text text: object contents; enabled: true; acceptBlock: [ :string | self object: string ]. temp := object contents. ui button label: 'reset'; state: false; action: [ ui text text: temp. self object: temp ]. layout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25; newRow: [ :r | r add: #text; add: #button ] height: 25 ]; yourself. bottomLayout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #text; add: #button ] height: 25; newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25 ]; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 4/30/2013 16:17'! title ^ 'Dynamic Examples'! ! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 5/1/2013 09:51' prior: 35967146! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabelForInspector fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" compilerClass format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !DynamicWidgetChange commentStamp: '' prior: 36149695! I am a dummy proto to see how easy it is to replace a subwidget with another one dynamically. DynamicWidgetChange new openWithSpec! !DynamicWidgetChange class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/30/2013 16:05'! defaultSpec ^ SpecLayout composed newRow: #button height: 25; newRow: #bottom top: 25; yourself! ! !DynamicWidgetChange methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/30/2013 16:05'! bottom ^ bottom! ! !DynamicWidgetChange methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/30/2013 16:04'! button ^ button! ! !DynamicWidgetChange methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/30/2013 16:09'! change boolean := boolean not. boolean ifTrue: [ self changeToList ] ifFalse: [ self changeToButton ]. self needRebuild: false. button needRebuild: false. self openWithSpec! ! !DynamicWidgetChange methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/30/2013 16:08'! changeToButton self instantiateModels: #( bottom ButtonModel ). bottom label: 'I am useless'.! ! !DynamicWidgetChange methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/30/2013 16:08'! changeToList self instantiateModels: #( bottom ListComposableModel ). bottom items: (1 to: 100) asOrderedCollection.! ! !DynamicWidgetChange methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/30/2013 16:03'! initialize "Initialization code for DynamicWidgetChange" super initialize. boolean := true! ! !DynamicWidgetChange methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/30/2013 16:05'! initializeWidgets self instantiateModels: #( button ButtonModel bottom ListComposableModel ). button label: 'Change'; action: [ self change ]; state: false. bottom items: (1 to: 10) asOrderedCollection.! ! !CompilerExceptionsTest methodsFor: 'tests' stamp: 'MarcusDenker 5/1/2013 10:03' prior: 19923404! testUnusedVariable self compiling: 'griffle | goo | ^nil' shouldRaise: UnusedVariable.! ! ClassDescription removeSelector: #printMethodChunkHistorically:on:moveSource:toFile:! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! ClassDescription removeSelector: #printCategoryChunk:on:withStamp:priorMethod:! ClassDescription removeSelector: #moveChangesWithVersionsTo:! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: internalStream moveSource: false toFile: 0. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! ClassDescription removeSelector: #fileOutMethod:! ClassDescription removeSelector: #fileOutChangedMessagesHistorically:on:moveSource:toFile:! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! ClassDescription removeSelector: #fileOutChangedMessages:on:moveSource:toFile:! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! ClassDescription removeSelector: #fileOutCategory:! TPureBehavior removeSelector: #decompile:! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! TraitDescription removeSelector: #fileOutChangedMessages:on:moveSource:toFile:! RGMethodDefinition removeSelector: #elementsToAddInAGroup! Decompiler removeSelector: #methodRefersOnlyOnceToTemp:! Decompiler class removeSelector: #recompileAllTest! RemoteString removeSelector: #checkSum:! ScannerTests removeSelector: #testAmbiguousSelector! Smalltalk globals removeClassNamed: #ScannerTests! Encoder removeSelector: #tempsAndBlockArgs! Encoder removeSelector: #sourceRangeFor:! Encoder removeSelector: #sourceMap! Encoder removeSelector: #possibleNamesFor:! Encoder removeSelector: #nTemps:literals:class:! Encoder removeSelector: #globalSourceRanges! Encoder removeSelector: #encodeVariable:ifUnknown:! RGClassDescriptionDefinition removeSelector: #elementsToAddInAGroup! ClassHierarchyTest removeSelector: #testMethodDuplication! CompiledMethod removeSelector: #storeLiteralsOn:forClass:! CompiledMethod removeSelector: #elementsToAddInAGroup! ClosureCompilerTest removeSelector: #testInjectIntoDecompiledDebugs! ClosureCompilerTest removeSelector: #testInjectIntoDecompilations! Class removeSelector: #elementsToAddInAGroup! "Compiler"! "CompilerTests"! "Files"! "GroupManagerUI"! "Kernel"! "KernelTests"! "Spec-Examples"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(1 May 2013 11:53:18 am) Pharo.image priorSource: 2584580! ----STARTUP----an Array(1 May 2013 12:00:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 May 2013 12:00:44 pm) Pharo-30079.image priorSource: 2618826! ----STARTUP----an Array(1 May 2013 6:16:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/1/2013 18:13' prior: 36139310! commentForCurrentUpdate ^ '10458 New Spec examples https://pharo.fogbugz.com/f/cases/10458 10463 Decompiler related cleanup https://pharo.fogbugz.com/f/cases/10463 10465 Better syntax hilighting of start of existing identifier https://pharo.fogbugz.com/f/cases/10465'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/1/2013 18:13'! script177 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.28.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.427.mcz CompilerTests-MarcusDenker.140.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1402.mcz KernelTests-MarcusDenker.497.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.97.mcz Spec-Widgets-MarcusDenker.130.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1094.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.492.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/1/2013 18:13'! update30080 "self new update30080" self withUpdateLog: '10458 New Spec examples https://pharo.fogbugz.com/f/cases/10458 10463 Decompiler related cleanup https://pharo.fogbugz.com/f/cases/10463 10465 Better syntax hilighting of start of existing identifier https://pharo.fogbugz.com/f/cases/10465'. self loadTogether: self script177 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SHTextStylerST80 commentStamp: '' prior: 32590155! I style Smalltalk methods and expressions. My 'styleTable' class instance var holds an array ofArrays which control how each token is styled/coloured. See my defaultStyleTable class method for its structure. My styleTable can be changed by either modifying the defaultStyleTable class method and then executing SHTextStylerST80 initialize ; or by giving me a new styleTable through my #styleTable: class method. My 'textAttributesByPixelSize' class instance var contains a dictionary of dictionaries. The key is a pixelSize and the value a Dictionary from token type Symbol to TextAttribute array. It is created/maintained automatically. I reimplement #unstyledTextFrom: so that TextActions are preserved in the unstyled text ! !NewList commentStamp: '' prior: 35332273! NewList is a new morph as replacement for PluggableListMorph. The API used is hardcoded, but NewListAdapter has been introduced to hold this "pluggable" behavior! !NewListAdapter commentStamp: '' prior: 28399037! NewListAdapter is used to link the model and the list. It holds the "pluggable" part of the widget, aka the definition of the API! !NewListExample commentStamp: '' prior: 0! I am an example of how to use the NewList. I also provide so comparision with the old List implementation. NewListExample new withNewList; openInWindow. NewListExample new withOldList; openInWindow.! !SHTextStylerST80 commentStamp: '' prior: 36184030! I style Smalltalk methods and expressions. My 'styleTable' class instance var holds an array ofArrays which control how each token is styled/coloured. See my defaultStyleTable class method for its structure. My styleTable can be changed by either modifying the defaultStyleTable class method and then executing SHTextStylerST80 initialize ; or by giving me a new styleTable through my #styleTable: class method. My 'textAttributesByPixelSize' class instance var contains a dictionary of dictionaries. The key is a pixelSize and the value a Dictionary from token type Symbol to TextAttribute array. It is created/maintained automatically. I reimplement #unstyledTextFrom: so that TextActions are preserved in the unstyled text ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'StephaneDucasse 5/1/2013 13:42' prior: 32596420! attributeArrayForColor: aColorOrNil emphasis: anEmphasisSymbolOrArrayorNil font: aTextStyleOrFontOrNil | emphArray answer | answer := Array new. aColorOrNil ifNotNil: [ answer := answer , {TextColor color: aColorOrNil}]. anEmphasisSymbolOrArrayorNil ifNotNil: [ emphArray := anEmphasisSymbolOrArrayorNil isSymbol ifTrue: [{anEmphasisSymbolOrArrayorNil}] ifFalse: [anEmphasisSymbolOrArrayorNil]. emphArray do: [:each | each ~= #normal ifTrue: [answer := answer , {TextEmphasis perform: each}]]]. aTextStyleOrFontOrNil ifNotNil: [ answer := answer , {TextFontReference toFont: aTextStyleOrFontOrNil}]. ^ answer! ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'StephaneDucasse 5/1/2013 13:52' prior: 32597423! blueStyleTable "color can be a valid argument to Color class>>colorFrom: , or nil to use the editor text color. Multiple emphases can be specified using an array e.g. #(bold italic). If emphasis is not specified, #normal will be used. if pixel height is not specified , then the editor font size will be used. " ^ #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment (gray darker)) (unfinishedComment (red muchDarker)) (#'$' (red muchDarker)) (character (red muchDarker)) (integer (red muchDarker)) (number (red muchDarker)) (#- (red muchDarker)) (symbol (magenta muchDarker)) (stringSymbol (magenta muchDarker)) (literalArray (magenta muchDarker)) (string (magenta muchDarker) normal) (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal nil italic) (keyword (black)) (binary (black)) (unary (black)) (#self (cyan muchDarker )) (#super (cyan muchDarker )) (#true (red muchDarker)) (#false (red muchDarker)) (#nil (red muchDarker)) (#thisContext (cyan muchDarker )) (#return (cyan muchDarker ) bold) (patternArg (blue muchDarker)) (methodArg (blue muchDarker)) (blockPatternArg (blue muchDarker)) (blockArg (blue muchDarker)) (argument (blue muchDarker)) (blockTempVar (blue muchDarker)) (blockPatternTempVar (blue muchDarker)) (instVar (blue muchDarker)) (workspaceVar (blue muchDarker)) (tempVar (blue muchDarker)) (patternTempVar (blue muchDarker)) (poolConstant (blue muchDarker)) (classVar (blue muchDarker)) (globalVar (blue muchDarker)) (incompleteIdentifier blue italic) (incompleteKeyword nil italic) (incompleteBinary nil italic) (incompleteUnary nil italic) (undefinedIdentifier red) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (methodTempBar (black)) (blockTempBar (black)) (blockArgsBar (black)) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold))! ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'StephaneDucasse 5/1/2013 13:49' prior: 32603494! solarizedStyleTable "color can be a valid argument to Color class>>colorFrom: , or nil to use the editor text color. Multiple emphases can be specified using an array e.g. #(bold italic). If emphasis is not specified, #normal will be used. if pixel height is not specified , then the editor font size will be used. This style is based on old theme and other old environments. " ^ #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default ('657A81' muchDarker)) (invalid red) (excessCode red) (comment '586E75') (unfinishedComment (red muchDarker)) (#'$' ('268BD2' lighter)) (character ('268BD2' lighter)) (integer ('2AA198')) (number ('2AA198')) (#- ('2AA198')) (symbol ('268BD2')) (stringSymbol ('268BD2')) (literalArray black) (string ('268BD2')) (unfinishedString red normal) (assignment nil bold) (ansiAssignment nil bold) (literal nil italic) (keyword nil) (binary nil) (unary nil) (#true ('CB4B16' darker)) (#false ('CB4B16' darker)) (#nil ('CB4B16' darker)) (#self 'B58900') (#super 'B58900') (#thisContext 'B58900') (#return 'B58900' bold) (patternArg ('D33682')) (methodArg ('D33682')) (blockPatternArg ('D33682')) (blockArg ('D33682')) (argument ('D33682')) (blockTempVar ('D33682')) (blockPatternTempVar ('D33682')) (instVar ('D33682')) (workspaceVar ('D33682') bold) (tempVar ('D33682')) (patternTempVar ('D33682')) (poolConstant ('D33682') bold) (classVar ('D33682') bold) (globalVar ('268BD2' muchDarker) bold) (undefinedIdentifier red) (incompleteIdentifier 'D33682' italic) (incompleteKeyword nil italic) (incompleteBinary nil italic) (incompleteUnary nil italic) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword '657A81' bold) (patternBinary '657A81' bold) (patternUnary '657A81' bold) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black bold) (statementSeparator black bold) (methodTempBar black) (blockTempBar black) (blockArgsBar black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (primitive (cyan muchDarker)) (pragmaKeyword (cyan muchDarker)) (pragmaUnary (cyan muchDarker)) (pragmaBinary (cyan muchDarker)) (externalFunctionCallingConvention (cyan muchDarker) bold) (module (cyan muchDarker) bold))! ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'StephaneDucasse 5/1/2013 13:55' prior: 32608450! tangoStyleTable "color can be a valid argument to Color class>>colorFrom: , or nil to use the editor text color. Multiple emphases can be specified using an array e.g. #(bold italic). If emphasis is not specified, #normal will be used. if pixel height is not specified , then the editor font size will be used. This is a syntax coloring scheme based on the tango desktop icon scheme: http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines " ^ #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment '888a85') (unfinishedComment (red muchDarker)) (#'$' 'ce5c00') (character 'ce5c00') (integer '8f5902') (number '8f5902') (#- '8f5902') (symbol 'c4a000') (stringSymbol 'c4a000') (literalArray black) (string 'ce5c00') (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal '8F5902') (keyword (black)) (binary (black)) (unary (black)) (#true '8F5902') (#false '8F5902') (#nil '8F5902') (#self '4d9a06') (#super '4d9a06') (#thisContext '4d9a06') (#return black bold) (patternArg '2e3426' italic) (methodArg '555753' italic) (blockPatternArg '888a85' bold) (blockArg '555753' italic) (argument '555753' italic) (blockTempVar '555753' italic) (blockPatternTempVar '888a85' italic) (instVar '204a87') (workspaceVar '204a87') (tempVar '555753' italic) (patternTempVar '888a85' italic) (poolConstant 'ef2929' bold) (classVar 'ad7fa8' bold) (globalVar '5c3566' bold) (incompleteIdentifier blue italic) (incompleteKeyword blue italic) (incompleteBinary blue italic) (incompleteUnary blue italic) (undefinedIdentifier red) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (methodTempBar black) (blockTempBar black) (blockArgsBar black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold))! ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'StephaneDucasse 5/1/2013 13:54' prior: 32613294! vintageStyleTable "color can be a valid argument to Color class>>colorFrom: , or nil to use the editor text color. Multiple emphases can be specified using an array e.g. #(bold italic). If emphasis is not specified, #normal will be used. if pixel height is not specified , then the editor font size will be used. This style is based on old theme and other old environments. " ^ #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment '006400') (unfinishedComment (red muchDarker)) (#'$' ('801f91' lighter)) (character ('801f91' lighter)) (integer ('801f91')) (number ('801f91')) (#- ('801f91')) (symbol ('801f91')) (stringSymbol ('801f91')) (literalArray black) (string ('801f91')) (unfinishedString red normal) (assignment nil bold) (ansiAssignment nil bold) (literal nil italic) (keyword black) (binary black) (unary black) (#true ('A31515' darker)) (#false ('A31515' darker)) (#nil ('A31515' darker)) (#self 'A31515') (#super 'A31515') (#thisContext 'A31515') (#return 'A31515' bold) (patternArg (blue muchDarker)) (methodArg (blue muchDarker)) (blockPatternArg (blue muchDarker)) (blockArg (blue muchDarker)) (argument (blue muchDarker)) (blockTempVar (blue muchDarker)) (blockPatternTempVar (blue muchDarker)) (instVar (blue muchDarker)) (workspaceVar (blue muchDarker) bold) (tempVar (blue muchDarker)) (patternTempVar (blue muchDarker)) (poolConstant (blue muchDarker) bold) (classVar (blue muchDarker) bold) (globalVar black bold) (incompleteIdentifier blue italic) (incompleteKeyword blue italic) (incompleteBinary blue italic) (incompleteUnary blue italic) (undefinedIdentifier red) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black bold) (statementSeparator black bold) (methodTempBar black) (blockTempBar black) (blockArgsBar black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (primitive (cyan muchDarker)) (pragmaKeyword (cyan muchDarker)) (pragmaUnary (cyan muchDarker)) (pragmaBinary (cyan muchDarker)) (externalFunctionCallingConvention (cyan muchDarker) bold) (module (cyan muchDarker) bold))! ! !Decompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/1/2013 12:04'! decompileMethod: aMethod ^self decompile: aMethod selector in: aMethod methodClass method: aMethod! ! !NewListRenderer methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/1/2013 08:00' prior: 28425690! acceptDroppingMorph: aMorph event: evt "This message is sent when a morph is dropped onto a morph that has agreed to accept the dropped morph by responding 'true' to the wantsDroppedMorph:Event: message. The default implementation just adds the given morph to the receiver." "Here we let the model do its work." [ self listSource acceptDroppingMorph: aMorph atIndex: self potentialDropIndex event: evt inMorph: self ] ensure: [ self resetPotentialDropIndex. evt hand releaseMouseFocus: self. Cursor normal show ]! ! !NewListRenderer methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 5/1/2013 09:56'! allowToSelect ^ self listSource allowToSelect! ! !NewListRenderer methodsFor: 'drawing - private' stamp: 'BenjaminVanRyseghem 5/1/2013 08:08' prior: 28433610! backgroundColorForIndex: anIndex ^ (self isSelectedIndex: anIndex) ifTrue: [ self selectedBackgroundColor ] ifFalse: [ Color transparent ]! ! !NewListRenderer methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/1/2013 08:42'! doubleClick: event self listSource doubleClick: event! ! !NewListRenderer methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/1/2013 07:47' prior: 28428077! drawHeaderOn: aCanvas | drawBounds top item itemColor backgroundColor height width deltaY deltaX | drawBounds := self owner bounds. top := self topDifference. drawBounds := -3 @ top corner: drawBounds right @ top + self headerHeight. aCanvas fillRectangle: drawBounds fillStyle: ((GradientFillStyle ramp: {(0 -> (Color r: 0.854 g: 0.836 b: 0.806)). (1 -> Color gray muchLighter lighter)}) origin: drawBounds left @ drawBounds bottom; direction: 0 @ self headerHeight negated asFloat; normal: 0 @ 1; radial: false; yourself). item := self headerTitle. itemColor := Color black. backgroundColor := self backgroundColorForIndex: 0. height := item heightToDisplayInList: self. width := item widthToDisplayInList: self. deltaY := ((drawBounds height - height) / 2) asInteger. deltaX := ((self owner width - width) / 2) asInteger. drawBounds := drawBounds translateBy: deltaX @ deltaY. item listRenderOn: aCanvas atRow: 0 bounds: drawBounds color: itemColor backgroundColor: backgroundColor from: self! ! !NewListRenderer methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 5/1/2013 08:42'! handlesDoubleClick ^ self listSource handlesDoubleClick! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:25' prior: 28419392! hasHeader: aBoolean hasHeader contents: aBoolean! ! !NewListRenderer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 10:42' prior: 28442777! initialize "Initialization code for NewListRenderer" super initialize. wantsSteps := false. listSource := nil asValueHolder. itemHeight := nil asValueHolder. maxWidth := 0 asValueHolder. hasHeader := false asValueHolder. potentialDropIndex := 0 asValueHolder. steppingTime := 100. mouseDownIndex := 0 asValueHolder. listSource whenChangedDo: [:e | itemHeight contents: e itemHeight. e whenItemsChangedDo: [ maxWidth contents: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !NewListRenderer methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/1/2013 08:41' prior: 28439590! mouseDown: event | selectors | (self enabled and: [ event yellowButtonPressed ]) "First check for option (menu) click" ifTrue: [ self isMultipleSelection ifTrue: [ event commandKeyPressed ifFalse: [ "right click" (self yellowButtonActivity: event shiftPressed) ifTrue: [ ^ self ]]] ifFalse: [ (self yellowButtonActivity: event shiftPressed) ifTrue: [ ^ self ]]]. self mouseDownIndex: (self indexAtLocation: event position). selectors := Array with: #click: with: (self handlesDoubleClick ifTrue: [ #doubleClick: ]) with: nil with: (self dragEnabled ifTrue: [ #startDrag: ] ifFalse:[ nil ]). event hand waitForClicksOrDrag: self event: event selectors: selectors threshold: 10.! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:58' prior: 28420212! mouseDownIndex: anInteger self allowToSelect ifFalse: [ ^ self ]. mouseDownIndex contents: anInteger! ! !NewListRenderer methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/1/2013 08:53' prior: 28440780! mouseMove: evt | index | "Check if the mouse is currently dragging an object" evt isDraggingEvent ifFalse: [ ^ super mouseMove: evt ]. "Check if we are interested in this object" self dropEnabled ifFalse: [ ^ super mouseMove: evt ]. (self wantsDroppedMorph: (evt hand submorphs at: 1 ifAbsent: [ ^ super mouseMove: evt ]) event: evt inMorph: self) ifFalse: [ ^ super mouseMove: evt ]. self isScrolling ifTrue: [ ^ self ]. index := self indexAtLocation: evt position. self potentialDropIndex: index. (evt position y > (self topDifference + self headerHeight - 10) and: [ evt position y < (self topDifference + self headerHeight + 10) ]) ifTrue: [ wantsSteps := true ]. evt position y > (self topDifference - self headerHeight + self listSource height - 5) ifTrue: [ wantsSteps := true ]! ! !NewListRenderer methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:55' prior: 28441665! mouseUp: event | previousIndex index | self listSource wantsKeyboardFocus ifTrue: [ self listSource takeKeyboardFocus ]. (event position y < (self topDifference + self headerHeight)) ifTrue: [ ^ self mouseDownOnHeader: event ]. self allowToSelect ifFalse: [ ^ self ]. index := self indexAtLocation: event position. previousIndex := self selectedIndex. ((event shiftPressed not and: [ event commandKeyPressed not ]) and: [ self selectionWithKeys ]) ifTrue: [ self resetSelectionIndexes ]. self mouseDownIndex: 0. ( self deSelectOnReclick and: [ previousIndex == index ]) ifTrue: [ self listSource private_selectedIndexes at: index put: false. index := 0 ]. self listSource setIndex: index. self listSource mouseUpOnItemAt: index event: event. event commandKeyPressed ifTrue: [ previousIndex = index ifTrue: [ previousIndex := 0 ]]. event shiftPressed ifTrue: [ | start end | start := previousIndex min: index. end := previousIndex max: index. start to: end do: [:e | self listSource addAtIndexes: e ]]! ! !NewListRenderer methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/1/2013 08:53'! wantsDroppedMorph: aMorph event: anEvent inMorph: source ^ self listSource wantsDroppedMorph: aMorph event: anEvent inMorph: source! ! !NewList commentStamp: '' prior: 36184832! NewList is a new morph as replacement for PluggableListMorph. The API used is hardcoded, but NewListAdapter has been introduced to hold this "pluggable" behavior! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 5/1/2013 07:59'! acceptDroppingMorph: aMorph atIndex: index event: evt inMorph: source ^ self model acceptDroppingMorph: aMorph atIndex: index event: evt inMorph: source! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 10:02'! allowToSelect ^ allowToSelect contents! ! !NewList methodsFor: 'looks & colors' stamp: 'BenjaminVanRyseghem 5/1/2013 08:22'! color: aColor self drawColor: aColor! ! !NewList methodsFor: 'events - mouse' stamp: 'BenjaminVanRyseghem 5/1/2013 08:42'! doubleClick: event self model doubleClick: event! ! !NewList methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 10:01' prior: 28384304! endOfInitialization isInitialized contents: true. self updateItems. self updateDisplayListCache. self updateListSize. self updateHeaderTitle. self updateHeaderHeight. self updateAllowToSelect. self updateRenderer. selectedItem contents: self retrieveSelectedItem. selectedItems contents: self retrieveSelectedItems. listCache whenChangedDo: [:e | listSize contents: e size. self updateDisplayListCache. self unselectOnChange ifTrue: [ self deselectAll ]. self updateScrollbars ]. listSize whenChangedDo: [:e | self updateRenderer ]. headerTitle whenChangedDo:[:e | self updateHeaderHeight ]. secondSelection whenChangedDo: [:idx | self setViewToIndex: idx. self renderer updateRectFor: idx ]. selectedIndex whenChangedDo: [:newIndex :oldIndex | selectedItem contents: self retrieveSelectedItem. self renderer updateRectFor: oldIndex. ]. selectedIndexes whenChangedDo: [:newIndex :oldIndex | selectedItems contents: self retrieveSelectedItems ]. headerTitle whenChangedDo: [:t | self renderer invalidHeader ].! ! !NewList methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/1/2013 09:21' prior: 28395526! hasHeader: aBoolean self renderer hasHeader: aBoolean! ! !NewList methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 10:01' prior: 28385423! initialize "Initialization code for NewList" renderer := nil asValueHolder. super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. drawColor := Color white asValueHolder. model := nil asValueHolder. isInitialized := false asValueHolder. isMultipleSelection := false asValueHolder. listCache := OrderedCollection new asValueHolder. selectedIndex := 0 asValueHolder. selectedIndexes := Dictionary new asValueHolder. listSize := nil asValueHolder. headerHeight := 0 asValueHolder. headerTitle := '' asValueHolder. clickOnHeader := nil asValueHolder. secondSelection := nil asValueHolder. displayListCache := OrderedCollection new asValueHolder. runningProcesses := Array new asValueHolder. deSelectOnReclick := false asValueHolder. selectionWithKeys := true asValueHolder. selectedItem := nil asValueHolder. selectedItems := OrderedCollection new asValueHolder. unselectOnChange := false asValueHolder. iconCache := Dictionary new asValueHolder. iconMaxSize := nil asValueHolder. enabled := true asValueHolder. allowToSelect := true asValueHolder.! ! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 5/1/2013 10:02'! retrieveAllowToSelect ^ self model allowToSelect! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:54' prior: 28389662! setIndex: index | oldIndex newIndex | oldIndex := selectedIndex contents. newIndex := index. self secondSelection: 0. self setViewToIndex: index. selectedIndex contents: newIndex. (self deSelectOnReclick and: [ oldIndex == newIndex ]) ifTrue: [ self toggleAtIndexes: newIndex ] ifFalse: [ self addAtIndexes: newIndex ]! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/1/2013 10:00' prior: 28392135! update: aSymbol aSymbol == #getItems ifTrue: [ ^ self updateItems ]. aSymbol == #getListSize ifTrue: [ ^ self updateListSize ]. aSymbol == #getHeaderTitle ifTrue: [ ^ self updateHeaderTitle ]. aSymbol == #iconMaxSize ifTrue: [ ^ self updateIconMaxSize ]. aSymbol == #iconForItem:at: ifTrue: [ ^ self updateIconCache ]. aSymbol == #resetSelectedIndexes ifTrue: [ ^ self deselectAll ]. aSymbol == #allowToSelect ifTrue: [ ^ self updateAllowToSelect ]. aSymbol == #invalidateIcons ifTrue: [ ^ self invalidateIconCache ]! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/1/2013 10:03'! updateAllowToSelect allowToSelect contents: self retrieveAllowToSelect! ! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 5/1/2013 08:53'! wantsDroppedMorph: aMorph event: anEvent inMorph: source self dropEnabled ifFalse: [ ^ false ]. ^ self model wantsDroppedMorph: aMorph event: anEvent inMorph: source! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/1/2013 12:06'! decompile: aSelector in: aClass ^Decompiler new decompile: aSelector in: aClass ! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/1/2013 12:06'! decompile: aSelector in: aClass method: aMethod ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/1/2013 12:06'! decompileBlock: aBlock ^Decompiler new decompileBlock: aBlock! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/1/2013 12:06'! decompileMethod: aCompiledMethod ^Decompiler new decompileMethod: aCompiledMethod ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/1/2013 12:05'! decompile: aSelector in: aClass ^Decompiler new decompile: aSelector in: aClass ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/1/2013 12:05'! decompile: aSelector in: aClass method: aMethod ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/1/2013 12:05'! decompileBlock: aBlock ^Decompiler new decompileBlock: aBlock ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/1/2013 12:06'! decompileMethod: aCompiledMethod ^Decompiler new decompileMethod: aCompiledMethod ! ! !NewListAdapter commentStamp: '' prior: 36185058! NewListAdapter is used to link the model and the list. It holds the "pluggable" part of the widget, aka the definition of the API! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:00'! acceptDroppingMorph: aMorph atIndex: index event: evt inMorph: source self dropItemSelector ifNotNil: [| item | item := aMorph passenger first. self model perform: self dropItemSelector with: item with: index ] ifNil: [ self model acceptDroppingMorph: aMorph event: evt inMorph: source ]! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:52'! allowToSelect ^ self allowToSelectSelector ifNil: [ true ] ifNotNil: [ :s | self model perform: s ]! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:52'! allowToSelectSelector ^ allowToSelectSelector! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:52'! allowToSelectSelector: aSelector allowToSelectSelector := aSelector! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:45' prior: 28407441! color: aColor self list color: aColor! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:43'! doubleClick: event self model perform: self doubleClickSelector withEnoughArguments: { event }! ! !NewListAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2012 18:49' prior: 28400147! endOfInitialization getItemsSelector whenChangedDo: [:e | self list updateItems ]. setIndexSelector contents ifNotNil: [:s | self list whenSelectedIndexChangedDo: [:a :b :c :d | self model perform: s withEnoughArguments: {a. b. c. d } ]]. getHeaderTitleSelector whenChangedDo: [:s | self list hasHeader: (s notNil) ]. self list endOfInitialization! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:53'! wantsDroppedMorph: aMorph event: anEvent inMorph: source ^ aMorph dragTransferType == #dragTransfer ifTrue: [ self dropItemSelector ifNil: [ ^ false ]. self wantsDropSelector ifNil: [ ^ true ]. (self model perform: self wantsDropSelector with: aMorph passenger) ] ifFalse: [ self model wantsDroppedMorph: aMorph event: anEvent inMorph: source ]! ! !NewListExample commentStamp: '' prior: 36185245! I am an example of how to use the NewList. I also provide so comparision with the old List implementation. NewListExample new withNewList; openInWindow. NewListExample new withOldList; openInWindow.! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/1/2013 09:53'! allowToSelect ^ false.! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:53'! buildMorph | list | list := NewList on: self getItemsSelector: #getItems setIndexSelector: #setIndex: getDisplaySelector: #displayItem:. list adapter getHeaderTitleSelector: #title; getMenuSelector: #menu:shifted:; dragEnabled: true; dropEnabled: true; allowToSelectSelector: #allowToSelect; isMultipleSelection: true; deSelectOnReclick: true; getHeaderTitleSelector: #headerTitle; doubleClickSelector: #halt; dropItemSelector: #drop:at:; getIconSelector: #iconFor:at:; getIconMaxSizeSelector: #iconMaxSize; endOfInitialization. list whenHeaderIsClickedDo: [ self toggleTitle ]. list whenSelectedItemsChangedDo: [:items | textMorph ifNotNil: [ textMorph setText: (String streamContents: [:s | items do: [:e | s << e printString ; cr ]] )]] . ^ list! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2012 17:16'! buildMorphWithOld | list | pluggable := true. ^ list := PluggableListMorph on: self list: #getItems selected: #getIndex changeSelected: #setIndex: menu: #menu:shifted:! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/29/2012 19:36'! buildTextMorph ^ PluggableTextMorph new! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 12/13/2012 08:25'! displayItem: anItem ^ anItem asStringMorph color: Color red; yourself" ^ TextInputFieldModel new ghostText: anItem asString."! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/25/2012 22:22'! drop: anItem at: anIndex rawList remove: anItem. rawList add: anItem beforeIndex: anIndex. self changed: #getItems! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/23/2012 17:47'! getIndex ^ index! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/25/2012 22:21'! getItems ^ toggleTitle ifTrue: [ rawList ] ifFalse: [ rawList reversed ]! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/1/2013 09:27'! headerTitle ^ 'My Title'! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 12/13/2012 09:50'! iconFor: item at: anIndex | icon | icon := NautilusIcons iconNamed: #testGreen. "^ icon" ^ IconicButton new target: self; actionSelector: #halt; labelGraphic: icon ; color: Color transparent; extent: 12 @ 12; helpText: 'Run the tests'; borderWidth: 0.! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 12/13/2012 09:19'! iconMaxSize ^ 16@16! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/13/2012 14:56'! initialize "Initialization code for NewListModel" super initialize. pluggable := false. index := 0. toggleTitle := true. rawList := (1 to: 10) asOrderedCollection. textMorph := self buildTextMorph! ! !NewListExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2012 15:47'! listMorph ^ listMorph! ! !NewListExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2012 15:47'! listMorph: anObject listMorph := anObject! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/25/2012 03:04'! menu: aMenu shifted: aBoolean aMenu add: 'Foo' target: self selector: #halt. ^ aMenu! ! !NewListExample methodsFor: 'initialize' stamp: 'IgorStasenko 12/20/2012 14:59'! openInWindow | panel | panel := PanelMorph new. panel changeProportionalLayout; addMorph: listMorph fullFrame: ((0@0 corner: 1@0.5) asLayoutFrame); addMorph: textMorph fullFrame: ((0@0.5 corner: 1@1) asLayoutFrame); yourself. panel openInWindow! ! !NewListExample methodsFor: 'initialize' stamp: 'IgorStasenko 12/20/2012 15:00'! openInWorld | panel | panel := PanelMorph new. panel changeProportionalLayout; addMorph: listMorph fullFrame: ((0@0 corner: 1@0.5) asLayoutFrame); addMorph: textMorph fullFrame: ((0@0.5 corner: 1@1) asLayoutFrame); yourself. panel openInWorld! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/26/2012 17:16'! setIndex: idx pluggable ifTrue: [ idx = index ifTrue: [ index := 0 ] ifFalse: [ index := idx ]. self changed: #getIndex ].! ! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/25/2012 22:21'! title ^ toggleTitle ifTrue: [ 'Title' ] ifFalse: [ 'Title (reversed)' ]! ! !NewListExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2012 19:36'! toggleTitle toggleTitle := toggleTitle not. self changed: #title. self changed: #getItems.! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2012 17:14'! withNewList listMorph := self buildMorph.! ! !NewListExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2012 17:15'! withOldList listMorph := self buildMorphWithOld.! ! NewList removeSelector: #wantsDroppedMorph:event:! NewList removeSelector: #backgroundColor:! NewList removeSelector: #acceptDroppingMorph:atIndex:event:! NewListAdapter removeSelector: #wantsDroppedMorph:event:! NewListAdapter removeSelector: #acceptDroppingMorph:atIndex:event:! NewListRenderer removeSelector: #wantsDroppedMorph:event:! NewListRenderer removeSelector: #doubleClickSelector! NewListModel removeSelector: #withOldList! NewListModel removeSelector: #withNewList! NewListModel removeSelector: #toggleTitle! NewListModel removeSelector: #title! NewListModel removeSelector: #setIndex:! NewListModel removeSelector: #openInWorld! NewListModel removeSelector: #openInWindow! NewListModel removeSelector: #menu:shifted:! NewListModel removeSelector: #listMorph:! NewListModel removeSelector: #listMorph! NewListModel removeSelector: #initialize! NewListModel removeSelector: #iconMaxSize! NewListModel removeSelector: #iconFor:at:! NewListModel removeSelector: #getItems! NewListModel removeSelector: #getIndex! NewListModel removeSelector: #drop:at:! NewListModel removeSelector: #displayItem:! NewListModel removeSelector: #buildTextMorph! NewListModel removeSelector: #buildMorphWithOld! NewListModel removeSelector: #buildMorph! Smalltalk globals removeClassNamed: #NewListModel! "Compiler"! "NewList"! "Shout"! ----End fileIn----! ----QUIT----an Array(1 May 2013 6:16:16 pm) Pharo.image priorSource: 2619022! ----STARTUP----an Array(1 May 2013 6:23:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 May 2013 6:23:03 pm) Pharo-30080.image priorSource: 2674102! ----STARTUP----an Array(2 May 2013 8:03:05 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/2/2013 08:00' prior: 36173749! commentForCurrentUpdate ^ '10462 Add SpecModel for NewList https://pharo.fogbugz.com/f/cases/10462 10468 More Decompiler related cleanups https://pharo.fogbugz.com/f/cases/10468'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/2/2013 08:00'! script178 ^ 'AST-Core-MarcusDenker.140.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.595.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.427.mcz CompilerTests-MarcusDenker.142.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1402.mcz KernelTests-MarcusDenker.499.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.112.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.87.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.88.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.35.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.21.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.99.mcz Spec-Widgets-MarcusDenker.132.mcz StartupPreferences-MarcusDenker.79.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.82.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.809.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.60.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1096.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.492.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/2/2013 08:00'! update30081 "self new update30081" self withUpdateLog: '10462 Add SpecModel for NewList https://pharo.fogbugz.com/f/cases/10462 10468 More Decompiler related cleanups https://pharo.fogbugz.com/f/cases/10468'. self loadTogether: self script178 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewListModel commentStamp: '' prior: 0! | m | m := NewListModel new. m openWithSpec. m items: (1 to: 10) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5.! !AbstractBasicWidget methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 5/1/2013 08:24'! dragPassengersFor: item inMorph: dragSource ^ { self dragTransformationBlock cull: item cull: dragSource }! ! !NewListModel commentStamp: '' prior: 36239108! | m | m := NewListModel new. m openWithSpec. m items: (1 to: 10) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5.! !NewListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/1/2013 10:37'! defaultSpec ^ { #NewList. #model:. #model. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #deSelectOnReclick:. #(model deSelectOnReclick). #isMultipleSelection:. #(model isMultipleSelection). #unselectOnChange:. #(model unselectOnChange). #endOfInitialization. #setIndex:. #(model selectedIndex). #hasHeader:. #(model hasHeader). #whenSelectedIndexChangedDo:. #(model indexHasBeenSelected). #whenSelectedIndexesChangedDo:. #(model indexesHasBeenSelected). #whenSelectedItemChangedDo:. #(model itemHasBeenSelected). #whenSelectedItemsChangedDo:. #(model itemsHasBeenSelected). #whenHeaderIsClickedDo:. #(model headerClickedBlock).}! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:04'! acceptDroppingMorph: aMorph atIndex: index event: event inMorph: source | item | item := self getRawItemAt: index. ^ self acceptDropBlock valueWithEnoughArguments: { aMorph. event. source. item. index }! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:52'! allowToSelect ^ allowToSelect contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! allowToSelect: aBoolean "Set if the list items can be selected or not" allowToSelect contents: aBoolean. aBoolean ifFalse: [ self resetSelection ].! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! beMultipleSelection "Make list selection multiple" self isMultipleSelection: true! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! beSingleSelection "Make list selection single" self isMultipleSelection: false! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:35'! deSelectOnReclick ^ deSelectOnReclick contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:10'! deSelectOnReclick: aBoolean deSelectOnReclick contents: aBoolean! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:12'! defaultFilteringBlock ^ [:col | col]! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:12'! defaultSortingBlock ^ [:a :b | true]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03'! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03'! displayBlock: aBlock "Set the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" displayBlock contents: aBlock! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:47'! doubleClick: event doubleClick contents cull: event! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:25'! draggedItemAtIndex: anIndex ^ draggedItemAtIndex contents cull: anIndex.! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03'! filteringBlock "Return the filtering of the items" ^ filteringBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! filteringBlock: aBlock "To set the filtering of the items" filteringBlockHolder contents: aBlock! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:27'! getDisplayForItem: item at: index ^ displayBlock contents cull: item cull: index! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:28'! getHeaderHeight ^ headerHeight contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:28'! getHeaderTitle ^ headerTitle contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 07:53'! getItems ^ items contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:29'! getListSize ^ self getItems size! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:36'! getMenu: shiftKeyState | menu | menuHolder contents ifNil: [ ^ nil ]. menu := UIManager default newMenuIn: self for: self model. menuHolder contents cull: menu cull: shiftKeyState. menuTitle contents ifNotNil: [ :title | menu addTitle: title ]. ^ menu ! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:57'! getRawItemAt: index ^ items contents at: index ifAbsent: [ nil ]! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:37'! handlesDoubleClick ^ handlesDoubleClick contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:40'! hasHeader ^ headerTitle contents notNil! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:31'! headerClicked headerClicked contents value! ! !NewListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:31'! headerClicked: aBlock headerClicked contents: aBlock! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:31'! headerClickedBlock ^ [ self headerClicked ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:22'! headerTitle: aTitle headerTitle contents: aTitle! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:48'! iconForItem: anItem at: anIndex ^ iconHolder contents cull: anItem cull: anIndex! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:49'! iconMaxSize ^ iconMaxSize contents! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:14'! indexHasBeenSelected ^ [:index | selectedIndex contents: index ]! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:14'! indexesHasBeenSelected ^ [ :indexes | selectedIndexes contents: indexes ]! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 10:42'! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:36'! isMultipleSelection ^ isMultipleSelection contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:49'! isMultipleSelection: aBoolean isMultipleSelection contents: aBoolean! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:14'! itemHasBeenSelected ^ [ :item | selectedItem contents: item ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:10'! items: aList "Set the items of the list. aList is a collection of your domain specific items. Use a two stages notification (issue 7420)." | oldContents | oldContents := items contents. items contents: (aList sorted: sortingBlock contents). listAnnouncer announce: (ValueChanged oldContents: oldContents newContents: items contents)! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:14'! itemsHasBeenSelected ^ [ :selection | selectedItems contents: selection ]! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:50'! keyStrokeAction: anEvent ^ keyStrokeAction contents cull: anEvent! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13'! listItems "Return the items of the list. They are your domain specific items" ^ listItemsCache ifNil: [ listItemsCache := filteringBlock contents value: items contents ] ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! listSize "Return the size of the list" ^ self listItems size! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! menu "Return the block used to defined the menu" ^ menuHolder contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! menu: aBlock "Set the block used to defined the menu" menuHolder contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13'! multiSelection "Return true if the list has a multiple selection. False if the list has a single selection" ^ isMultipleSelection contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13'! multiSelection: aBoolean "Make the list seelction become multiple if aBoolean is true. Otherwise set the selection as single" isMultipleSelection contents: aBoolean. ! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:27'! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self widget ifNotNil: [ :w | w hasHeader: title notNil ] ]. deSelectOnReclick whenChangedDo: [ :bool | self widget ifNotNil: [ :w | w deSelectOnReclick: bool ] ]. isMultipleSelection whenChangedDo: [ :bool | self widget ifNotNil: [ :w | w isMultipleSelection: bool ] ]. unselectOnChange whenChangedDo: [ :bool | self widget ifNotNil: [ :w | w unselectOnChange: bool ] ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13'! resetFilteringBlock "Reset the filtering block with the default value which consists in showing everything" filteringBlock contents: self defaultFilteringBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:34'! resetSelection "Unselect every items" self changed: #resetSelectedIndexes! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13'! resetSortingBlock "Reset the sortering block with the default value which consists in not sorting" sortingBlock contents: self defaultSortingBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24'! selectedIndex "Return the index of the selected item In the case of a multiple selection list, it returns the last selected item" ^ selectedIndex contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24'! selectedIndexes "Return the indexes of selected items on the case of a multiple selection list" ^ selectedIndexes contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24'! selectedItem "Return the selected item. In the case of a multiple selection list, it returns the last selected item" ^ selectedItem contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24'! selectedItems "Return all the selected items in the case of a multiple selection list" ^ selectedItems contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:26'! setSelectedIndex: anIndex "Set the index of the item you want to be selected" self widget ifNil: [ selectedIndex contents: anIndex ] ifNotNil: [ :widget | widget setIndex: anIndex ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:26'! setSelectedItem: anItem "Set the item you want to be selected" | index | index := self listItems identityIndexOf: anItem ifAbsent: [ ^ self ]. self setSelectedIndex: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:28'! sortingBlock "Return the ordering of the items" ^ sortingBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:28'! sortingBlock: aBlock "To set the ordering of the items" sortingBlock contents: aBlock! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:37'! unselectOnChange ^ unselectOnChange contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:51'! unselectOnChange: aBoolean unselectOnChange contents: aBoolean.! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30'! updateList "Refresh the list" self changed: #getItems.! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! whenAllowToSelectChanged: aBlock "Set a block to value when the value of allowToSelect has changed" allowToSelect whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30'! whenDisplayBlockChanged: aBlock "Set a block to value when the filtering block block has changed" displayBlock whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30'! whenFilteringBlockChanged: aBlock "Set a block to value when the filtering block block has changed" filteringBlock whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer weak on: ValueChanged do: block! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02'! whenMenuChanged: aBlock "Set a block to value when the menu block has changed" menuHolder whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30'! whenMultiSelectionChanged: aBlock "Set a block to value when the multiSelection value has changed" isMultipleSelection whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31'! whenSelectedIndexChanged: aBlock "Set a block to value when the selection index has changed" selectedIndex whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:34'! whenSelectedItemChanged: aBlock "Set a block to value when the select item is changed" selectedItem whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31'! whenSelectionChanged: aBlock "Set a block to value when the selection of the list has changed" self whenSelectionIndexChanged: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:33'! whenSelectionIndexChanged: aBlock self deprecated: 'Use #whenSelectedIndexChanged: instead' on: '1 May 2013' in: '30078'! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31'! whenSortingBlockChanged: aBlock "Set a block to value when the sorting block has changed" sortingBlock whenChangedDo: aBlock! ! !MethodPragmaTest methodsFor: 'utilities' stamp: 'MarcusDenker 5/1/2013 16:55' prior: 26501800! assertPragma: aString givesKeyword: aSymbol arguments: anArray | pragma | pragma := self pragma: aString selector: #zork. self assert: pragma keyword = aSymbol. self assert: pragma arguments = anArray. ! ! !TimeProfiler methodsFor: 'actions' stamp: 'MarcusDenker 5/1/2013 16:41' prior: 53169441! blockCode ^ block ifNil: [''] ifNotNil: [ blockSource ifNil: [blockSource := String streamContents: [:s | block sourceNode statements do: [:stmt | stmt printOn: s indent: 0] separatedBy: [s nextPutAll: '.', String cr]]]]! ! !BlockClosure methodsFor: '*AST-Interpreter-Extension' stamp: 'MarcusDenker 5/1/2013 16:36' prior: 35463188! asASTBlockClosure ^ASTBlockClosure new homeContext: self home asASTInterpreterContext; code: self sourceNode. ! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/1/2013 10:33' prior: 18877096! initializeWidgets self instantiateModels: #( methodsListModel NewListModel classesListModel NewListModel changesListModel NewListModel prettyButton CheckBoxModel diffButton CheckBoxModel textModel TextModel ). self setFocus. methodsListModel menu: [:menu :shifted | self messageMenu: menu shifted: shifted ]. changesListModel menu: [:aMenu :shifted | self changeSetMenu: aMenu shifted: shifted ]. classesListModel menu: [:aMenu :shifted | self classMenu: aMenu shifted: shifted ]. changesListModel items: self model allChanges. changesListModel displayBlock: [:item | item name ]. textModel aboutToStyle: true. ! ! CompiledMethodTest removeSelector: #testDecompile! ClosureCompilerTest removeSelector: #testBlockDoitDecompilation! CodeSimulationTests removeSelector: #testGettingSourceFromFile! CodeSimulationTests removeSelector: #methodWithSourceGetting! BlockClosureTest removeSelector: #testDecompile! "AST-Interpreter-Extension"! "CompilerTests"! "KernelTests"! "Spec-Tools"! "Spec-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(2 May 2013 8:03:15 am) Pharo.image priorSource: 2674296! ----STARTUP----an Array(2 May 2013 8:28:31 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 May 2013 8:28:31 am) Pharo-30081.image priorSource: 2704386! ----STARTUP----an Array(2 May 2013 10:14:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/2/2013 10:10' prior: 36229022! commentForCurrentUpdate ^ '10379 #compilerClass new --> compiler https://pharo.fogbugz.com/f/cases/10379'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/2/2013 10:11'! script179 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.597.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.428.mcz CompilerTests-MarcusDenker.143.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1403.mcz KernelTests-MarcusDenker.499.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.69.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.132.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.84.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.812.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.62.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1097.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.493.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/2/2013 10:11'! update30082 "self new update30082" self withUpdateLog: '10379 #compilerClass new --> compiler https://pharo.fogbugz.com/f/cases/10379'. self loadTogether: self script179 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecAdder methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 50676984! addInstVar: name spec: specName fraction: fraction offset: offset | aSpec f o | f := self class compiler evaluate: fraction. o := self class compiler evaluate: offset. aSpec := descriptionHolder contents specDescription. aSpec addInstVar: name spec: specName fraction: f offset: o! ! !SpecAdder methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:20' prior: 50677358! modifyAdd: anAdd | fractions name aSpec offsets | name := instVars selectedItem asString. aSpec := selectors selectedItem asString. fractions := self class compiler evaluate: fractionField getText. offsets := self class compiler evaluate: offsetField getText. anAdd second first at: 2 put: name. anAdd second first at: 3 put: aSpec. anAdd second third at: 3 put: fractions. anAdd second third at: 4 put: offsets.! ! !RBConfigurableFormatter class methodsFor: 'accessing' stamp: 'MarcusDenker 4/30/2013 11:21' prior: 30488789! multiLineMessages: aString MultiLineMessages := self compiler evaluate: aString! ! !RBConfigurableFormatter class methodsFor: 'accessing' stamp: 'MarcusDenker 4/30/2013 11:20' prior: 30491107! oneLineMessages: aString OneLineMessages := self compiler evaluate: aString! ! !RBConfigurableFormatter class methodsFor: 'accessing' stamp: 'MarcusDenker 4/30/2013 11:22' prior: 30493530! traditionalBinaryPrecedence: aString TraditionalBinaryPrecedence := self compiler evaluate: aString! ! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 5/2/2013 10:10' prior: 36155212! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabelForInspector fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !ChangeSorterModel methodsFor: 'text' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 35798944! buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff | changeType code | changeType := changeSet atSelector: selector class: class name. changeType == #remove ifTrue: [^ 'Method has been removed (see versions)']. changeType == #addedThenRemoved ifTrue: [^ 'Added then removed (see versions)']. class ifNil: [^ 'Method was added, but cannot be found!!']. (class includesSelector: selector) ifFalse: [^ 'Method was added, but cannot be found!!']. code := class sourceCodeAt: selector. prettyPrint ifTrue: [ code := class compiler format: code in: class notifying: nil ]. showDiff ifTrue: [ code := self diffFromPriorSourceFor: code ]. ^ code asText! ! !RBAddMethodChange methodsFor: '*NautilusRefactoring' stamp: 'MarcusDenker 4/30/2013 11:23' prior: 30199358! accept: aText notifying: aController "Just to make sure that it compiles, try with the standard compiler." | compiler | compiler := self changeClass ifNil: [ Object compiler ] ifNotNil: [:changeClass | changeClass compiler ]. compiler compile: aText asString in: self changeClass classified: nil notifying: aController ifFail: [ ^ false ]. self class: self changeClass protocol: self protocol source: aText asString. ^ true! ! !PrettyTextDiffBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 35587728! split: aString | formatted trimmed | trimmed := aString asString trimBoth. trimmed isEmpty ifTrue: [ ^super split: '' ]. formatted := [ sourceClass format: trimmed in: sourceClass notifying: nil] on: Error do: [ :ex | trimmed ]. ^ super split: formatted! ! !RBRefactoryDefinitionChange methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 31178767! primitiveExecute definedClass := self definitionClass compiler evaluate: self definition notifying: self controller logged: true! ! !BreakpointManager class methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:17' prior: 18416089! breakpointMethodSourceFor: aSymbol in: aClass "Compose new source containing a break statement (currently it will be the first, later we want to insert it in any place)" | oldSource methodNode breakOnlyMethodNode sendBreakMessageNode | oldSource := aClass sourceCodeAt: aSymbol. methodNode := aClass compiler compile: oldSource in: aClass notifying: nil ifFail: [self error: '[breakpoint] unable to install breakpoint']. breakOnlyMethodNode := aClass compiler compile: 'temporaryMethodSelectorForBreakpoint self break. ^self' in: aClass notifying: nil ifFail: [self error: '[breakpoint] unable to install breakpoint']. sendBreakMessageNode := breakOnlyMethodNode block statements first. methodNode block statements addFirst: sendBreakMessageNode. ^methodNode printString ! ! !BreakpointManager class methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:16' prior: 18416991! compilePrototype: aSymbol in: aClass "Compile and return a new method containing a break statement" | source node method | source := self breakpointMethodSourceFor: aSymbol in: aClass. node := aClass compiler compile: source in: aClass notifying: nil ifFail: [self error: '[breakpoint] unable to install breakpoint']. node isNil ifTrue: [^nil]. method := node generate: (aClass>>aSymbol) trailer. ^method! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 4/30/2013 11:13' prior: 33449213! compileSelectionFor: anObject in: evalContext | methodNode failed | failed := false. methodNode := [ self class compiler compileNoPattern: self selectionAsStream in: anObject class context: evalContext notifying: self morph ifFail: [ failed := true ] ] on: OutOfScopeNotification do: [:ex | ex resume: true]. failed ifTrue: [ ^ nil ]. ^methodNode generateWithSource. ! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 4/30/2013 11:14' prior: 33451394! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ '']. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [ rcvr := ctxt := nil]. result := [ rcvr class compiler evaluate: self selectionForDoitAsStream in: ctxt to: rcvr notifying: self morph "don't set it to self.. The receiver can be destroyed as a result of evaluateSelection" ifFail: [self morph flash. ^nil] logged: true. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. ^ aBlock value: result! ! !SmalltalkEditor methodsFor: 'menu messages' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 35794616! prettyPrint "Reformat the contents of the receiver's view (a Browser)." | selectedClass newText | model selectedMessageName ifNil: [^ morph flash]. selectedClass := self modelCurrentSelectedClass. newText := selectedClass compiler format: self text in: selectedClass notifying: self. newText ifNotNil: [ self selectInvisiblyFrom: 1 to: self paragraph text size. self replaceSelectionWith: newText. self selectAt: 1]! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 19387735! testDecompiledDoitMethodTempNames "self new testDecompiledDoitMethodTempNames" "Test that a decompiled doit that has been copied with temps decompiles to the input" | removeComments | removeComments := [:n| n comment: nil]. self closureCases do: [:source| | mns m mps mnps | "Need to compare an ungenerated tree with the generated method's methodNode because generating code alters the tree when it introduces remote temp vectors." mns := #(first last) collect: [:ignored| source first isLetter ifTrue: [self class compiler compile: source in: self class notifying: nil ifFail: [self error: 'compilation error']] ifFalse: [self class compiler compileNoPattern: source in: self class context: nil notifying: nil ifFail: [self error: 'compilation error']]]. m := (mns last generateWithSource). removeComments value: mns first. mns first nodesDo: removeComments. self assert: (mnps := mns first printString) = (mps := (m methodNode nodesDo: removeComments) printString)]! ! !StartupAction methodsFor: 'execution' stamp: 'MarcusDenker 4/30/2013 11:15' prior: 50886886! execute | block correctlyExecuted | (self hasBeenExecuted and: [ self runOnce ]) ifTrue: [ ^ self ]. block := self code isBlock ifTrue: [ self code ] ifFalse: [[ self class compiler evaluate: self code ]]. correctlyExecuted := true. block on: Halt, Error do: [ :ex | StartupLoader default errors add: {ex. self}. ex pass ]. self hasBeenExecuted: correctlyExecuted.! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 35586862! sourceStringPrettifiedAndDiffed "Answer a copy of the source code for the selected message, transformed by diffing and pretty-printing exigencies" | class selector sourceString | class := self selectedClassOrMetaClass. selector := self selectedMessageName. (class isNil or: [selector isNil]) ifTrue: [^'missing']. sourceString := class ultimateSourceCodeAt: selector ifAbsent: [^'error']. self validateMessageSource: sourceString forSelector: selector. (#(#prettyPrint #prettyDiffs) includes: contentsSymbol) ifTrue: [sourceString := class compiler format: sourceString in: class notifying: nil]. self showingAnyKindOfDiffs ifTrue: [sourceString := self diffFromPriorSourceFor: sourceString]. ^sourceString! ! !SmalltalkImage methodsFor: 'compiler' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 35771240! evaluate: aString ^self compiler evaluate: aString! ! !NECVarTypeGuesser methodsFor: 'bytecode decoding' stamp: 'MarcusDenker 4/30/2013 11:19' prior: 27883563! computeVarType | info tempNames name | types ifEmpty: [ ^ nil ]. info := types first. (hasSend and: [ info isDefinedByMessageSend not ]) ifTrue: [ info type: nil. ^ info ]. info isDefinedByTemporary not ifTrue: [ ^ info ]. tempNames := (receiverClass compiler parse: currentMethod sourceCode in: receiverClass notifying: nil) tempNames. name := tempNames at: info temporaryOffset + 1. info type: (self class getClassFromTypeSuggestingName: name). ^ info! ! !Trait methodsFor: 'copying' stamp: 'MarcusDenker 4/30/2013 11:14' prior: 53283204! duplicateClassWithNewName: aSymbol " I am duplicated from Class, and used to duplicate a trait " | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 35793686! selectedMessage "Answer a copy of the source code for the selected message selector." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. self browseWithPrettyPrint ifTrue: [contents := class compiler format: contents in: class notifying: nil]. self showingAnyKindOfDiffs ifTrue: [contents := self methodDiffFor: contents class: self selectedClass selector: self selectedMessageName meta: self metaClassIndicated]. ^contents! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 4/30/2013 11:15' prior: 35771828! evaluate: aString ^self compiler evaluate: aString! ! !SpecImporter methodsFor: 'importing' stamp: 'MarcusDenker 4/30/2013 11:15' prior: 50693371! import: aSpec | copy first | copy := aSpec asOrderedCollection copy. first := copy removeFirst. first = #model ifTrue: [ ^ self import: copy ]. first = #subclass:category: ifTrue: [ | category name | name := copy removeFirst. category := copy removeFirst. desc addClassDescription: (AddClassDescription category: category name: name). ^ self import: copy ]. first = #addInstVarNamed:type: ifTrue: [ desc addInstVarDescriptions add: (AddInstVarDescription name: copy removeFirst type: copy removeFirst). ^ self import: copy ]. first = #compileWithoutReturn:classified: ifTrue: [ | category source | source := copy removeFirst. category := copy removeFirst. desc addMethodDescriptions add: (AddMethodDescription category: category source: source). ^ self import: copy ]. first = #addSourceCode:into: ifTrue: [ desc addIntoMethodDescriptions add: (AddIntoMethodDescription code: copy removeFirst order: order selector: copy removeFirst). order := order +1. ^ self import: copy ]. first = #theMetaClass ifTrue: [ | source index newSpec | "for now I only compile method on class side" copy removeFirst. source := copy removeFirst. index := source indexOf: ${. source := source copyFrom: index to: source size. newSpec := self class compiler evaluate: source. desc specDescription: (SpecDescriptionImporter import: newSpec). ^ self import: copy ]. ^ desc.! ! !DiffMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 35586209! setText "Set the src and dst text in the morphs applying prettyPrint if required." |src dst ctx| src := self srcText. dst := self dstText. ctx := self contextClass. (self prettyPrint and: [ctx notNil]) ifTrue: [src isEmpty ifFalse: [ src := ctx compiler format: src in: ctx notifying: nil]. dst isEmpty ifFalse: [ dst := ctx compiler format: dst in: ctx notifying: nil]]. self srcMorph setText: src; font: self theme textFont. self dstMorph setText: dst; font: self theme textFont! ! !CharacterTest methodsFor: 'tests' stamp: 'MarcusDenker 4/30/2013 11:21' prior: 18981569! testPrintStringAll Character allCharacters do: [ :each | self assert: (self class compiler evaluate: each printString) = each ].! ! !CharacterTest methodsFor: 'tests' stamp: 'MarcusDenker 4/30/2013 11:18' prior: 18982529! testStoreStringAll Character allCharacters do: [ :each | self assert: (self class compiler evaluate: each storeString) = each ].! ! !TraitMethodDescription methodsFor: 'private' stamp: 'MarcusDenker 4/30/2013 11:22' prior: 53415975! generateMethod: aSelector withMarker: aSymbol forArgs: aNumber binary: aBoolean | source node | source := String streamContents: [:stream | aNumber < 1 ifTrue: [stream nextPutAll: 'selector'] ifFalse: [aBoolean ifTrue: [ stream nextPutAll: '* anObject'] ifFalse: [ 1 to: aNumber do: [:argumentNumber | stream nextPutAll: 'with:'; space; nextPutAll: 'arg'; nextPutAll: argumentNumber asString; space]]]. stream cr; tab; nextPutAll: 'self '; nextPutAll: aSymbol]. node := self class compiler compile: source in: self class notifying: nil ifFail: []. ^(node generateWithSource) selector: aSelector; yourself! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! "AST-Core"! "CollectionsTests"! "Compiler"! "CompilerTests"! "NECompletion"! "NautilusRefactoring"! "Polymorph-Tools-Diff"! "Refactoring-Changes"! "Spec-Builder"! "Spec-Tools"! "StartupPreferences"! "System-FilePackage"! "System-Support"! "Text"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(2 May 2013 10:14:18 am) Pharo.image priorSource: 2704580! ----STARTUP----an Array(2 May 2013 10:20:46 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 May 2013 10:20:46 am) Pharo-30082.image priorSource: 2740903! ----STARTUP----an Array(2 May 2013 12:48:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/2/2013 12:46' prior: 36259307! commentForCurrentUpdate ^ '10474 Undeclared filteringBlockHolder on NewList https://pharo.fogbugz.com/f/cases/10474 10469 ClassDescriptionTest uncategorized method and make ClassTest >> #testUnCategorizedMethods more verbose https://pharo.fogbugz.com/f/cases/10469 10473 #equivalentTo: on CompiledMethod should call #methodNode, not decompile https://pharo.fogbugz.com/f/cases/10473 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/2/2013 12:46'! script180 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.597.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.428.mcz CompilerTests-MarcusDenker.143.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.28.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-StephaneDucasse.30.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1406.mcz KernelTests-MarcusDenker.499.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.794.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1404.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.226.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.35.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.200.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.84.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.20.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.812.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.62.mcz TextTests-MarcusDenker.3.mcz Tools-MarcusDenker.1097.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/2/2013 12:46'! update30083 "self new update30083" self withUpdateLog: '10474 Undeclared filteringBlockHolder on NewList https://pharo.fogbugz.com/f/cases/10474 10469 ClassDescriptionTest uncategorized method and make ClassTest >> #testUnCategorizedMethods more verbose https://pharo.fogbugz.com/f/cases/10469 10473 #equivalentTo: on CompiledMethod should call #methodNode, not decompile https://pharo.fogbugz.com/f/cases/10473 '. self loadTogether: self script180 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'CamilloBruni 5/1/2013 21:30' prior: 36073870! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !ClassTestCase methodsFor: 'tests' stamp: 'CamilloBruni 5/1/2013 18:27' prior: 19346883! testClassComment self assert: self targetClass organization hasComment.! ! !ClassTestCase methodsFor: 'tests' stamp: 'CamilloBruni 5/1/2013 18:29' prior: 19347435! testUnCategorizedMethods | uncategorizedMethods | uncategorizedMethods := self targetClass methodsInCategory: Categorizer default. self assert: uncategorizedMethods isEmpty description: uncategorizedMethods asString ! ! !CompiledMethod methodsFor: 'comparing' stamp: 'MarcusDenker 5/2/2013 10:33' prior: 19801365! equivalentTo: aCompiledMethod ^self = aCompiledMethod or: [self class == aCompiledMethod class and: [self numArgs = aCompiledMethod numArgs and: [self numLiterals = aCompiledMethod numLiterals and: [self methodNode = aCompiledMethod methodNode ]]]]! ! !NewListModel methodsFor: 'protocol' stamp: 'MarcusDenker 5/2/2013 10:51' prior: 36243328! filteringBlock: aBlock "To set the filtering of the items" filteringBlock contents: aBlock! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! "Kernel"! "SUnit-Core"! "Spec-Widgets"! "Traits"! ----End fileIn----! ----QUIT----an Array(2 May 2013 12:48:12 pm) Pharo.image priorSource: 2741099! ----STARTUP----an Array(2 May 2013 12:54:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 May 2013 12:54:44 pm) Pharo-30083.image priorSource: 2754045! ----STARTUP----an Array(2 May 2013 4:04:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/2/2013 15:50' prior: 36295827! commentForCurrentUpdate ^ '10377 #evaluatorClass --> just use #compiler instead https://pharo.fogbugz.com/f/cases/10377 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/2/2013 15:50'! script181 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.430.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1407.mcz KernelTests-MarcusDenker.502.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.796.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1406.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.37.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.812.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.64.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1099.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/2/2013 15:50'! update30084 "self new update30084" self withUpdateLog: '10377 #evaluatorClass --> just use #compiler instead https://pharo.fogbugz.com/f/cases/10377 '. self loadTogether: self script181 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PasteUpMorph methodsFor: 'gridding' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 29205013! setGridSpec "Gridding rectangle provides origin and modulus" | response result | response := UIManager default request: 'New grid origin (usually 0@0):' translated initialAnswer: self gridOrigin printString. response isEmpty ifTrue: [^ self]. result := [self class compiler evaluate: response] ifError: [^ self]. (result isPoint and: [(result >= (0@0))]) ifTrue: [self gridOrigin: result] ifFalse: [self inform: ('Must be a Point with coordinates (for example 10@10)' translated )]. response := UIManager default request: 'New grid spacing:' translated initialAnswer: self gridModulus printString. response isEmptyOrNil ifTrue: [^ self]. result := [self class compiler evaluate: response] ifError: [^ self]. (result isPoint and: [(result > (0@0)) ]) ifTrue: [self gridModulus: result] ifFalse: [self inform: ('Must be a Point with coordinates (for example 10@10)' translated )]. ! ! !UpdatingStringMorph methodsFor: 'accessing' stamp: 'MarcusDenker 5/2/2013 11:38' prior: 54550108! valueFromContents "Return a new value from the current contents string." format = #symbol ifTrue: [^ lastValue]. format = #string ifTrue: [^ contents]. ^ self class compiler evaluate: contents ! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 18759651! selectSuchThat "query the user for a selection criterium. NB: the UI for invoking this from a changelist browser is currently commented out; to reenfranchise it, you'll need to mild editing to ChangeList method #changeListMenu:" | code block | code := UIManager default request: 'selection criteria for a change named aChangeRecord?\For instance, ''aChangeRecord category = ''System-Network''''' withCRs. code isEmptyOrNil ifTrue: [^ self ]. block := self class compiler evaluate: '[:aChangeRecord | ', code, ']'. self selectSuchThat: block! ! !Parser methodsFor: 'error correction' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 29127273! defineClass: className "Prompts the user to define a new class." | classSymbol systemCategory classDefinition | classSymbol := className asSymbol. systemCategory := self encoder classEncoding theNonMetaClass category ifNil: [ 'Unknown' ]. classDefinition := 'Object subclass: #' , classSymbol , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategory , ''''. classDefinition := UIManager default multiLineRequest: 'Edit class definition:' initialAnswer: classDefinition answerHeight: 150. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self fail ]. self class compiler evaluate: classDefinition. ^ encoder global: (Smalltalk globals associationAt: classSymbol) name: classSymbol! ! !Parser methodsFor: 'pragmas' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 29147066! pragmaLiteral: selectorSoFar "Read a pragma literal. As a nicety we allow a variable name (rather than a literal string) as the second argument to primitive:error:" (hereType == #string or: [ hereType == #literal or: [ hereType == #number ] ]) ifTrue: [ ^ self advance ]. (here == $# and: [ tokenType == #word ]) ifTrue: [ ^ self advance ]. (here == #- and: [ tokenType == #number ]) ifTrue: [ ^ (self advance; advance) negated ]. (here = 'true' or: [ here = 'false' or: [ here = 'nil' ] ]) ifTrue: [ ^ self class compiler evaluate: self advance ]. "This nicety allows one to supply a primitive error temp as a variable name, rather than a string." ((selectorSoFar beginsWith: 'primitive:') and: [(selectorSoFar endsWith: 'error:') and: [hereType == #word]]) ifTrue: [^self advance]. ^self expected: 'Literal constant'! ! !CompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 19942731! evaluateSelection ^(nil class compiler) evaluate: morph editor selection readStream "Note subtle difference versus (morph editor selectionAsStream). The later does not answer the same contents and would raise a SyntaxErrorNotification with wrong sub-selection" in: nil to: nil notifying: nil ifFail: [^failure] logged: false! ! !MCClassDefinition methodsFor: 'installing' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 24632839! createClass | superClass class composition | superClass := superclassName == #nil ifFalse: [ Smalltalk globals at: superclassName ]. [ class := ClassBuilder new name: name inEnvironment: superClass environment subclassOf: superClass type: type instanceVariableNames: self instanceVariablesString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: category.] on: Warning, DuplicatedVariableError do: [:ex| ex resume]. self traitComposition ifNotNil: [ composition := self class compiler evaluate: self traitComposition. ((((composition isCollection and: [ ( composition includes: nil ) not]) or: [composition isKindOf: TraitComposition ]) or: [composition isKindOf: Trait ]) or: [composition isKindOf: TraitTransformation ]) ifTrue: [ class setTraitComposition: composition asTraitComposition ] ]. self classTraitComposition ifNotNil: [ composition := self class compiler evaluate: self classTraitComposition. ((((composition isCollection and: [ ( composition includes: nil ) not]) or: [composition isKindOf: TraitComposition ]) or: [composition isKindOf: Trait ]) or: [composition isKindOf: TraitTransformation ]) ifTrue: [ class class setTraitComposition: composition asTraitComposition ] ]. ^ class! ! !AssociationTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 17761424! testIsSelfEvaluating | anotherAssociation | self assert: (a isSelfEvaluating). self assert: (a printString = '1->''one'''). anotherAssociation := Object new -> Object new. anotherAssociation isSelfEvaluating ifTrue: [self assert: (self class compiler evaluate: anotherAssociation printString) = anotherAssociation description: 'a self evaluating should evaluate as self']. ! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 19378414! doTestDebuggerTempAccessWith: one with: two "Test debugger access for temps" | outerContext local1 remote1 | outerContext := thisContext. local1 := 3. remote1 := 1/2. self assert: (self class compiler evaluate: 'one' in: thisContext to: self) == one. self assert: (self class compiler evaluate: 'two' in: thisContext to: self) == two. self assert: (self class compiler evaluate: 'local1' in: thisContext to: self) == local1. self assert: (self class compiler evaluate: 'remote1' in: thisContext to: self) == remote1. self class compiler evaluate: 'local1 := -3.0' in: thisContext to: self. self assert: local1 = -3.0. (1 to: 2) do: [:i| | local2 r1 r2 r3 r4 | local2 := i * 3. remote1 := local2 / 7. self assert: thisContext ~~ outerContext. self assert: (r1 := self class compiler evaluate: 'one' in: thisContext to: self) == one. self assert: (r2 := self new evaluate: 'two' in: thisContext to: self) == two. self assert: (r3 := self class compiler evaluate: 'i' in: thisContext to: self) == i. self assert: (r4 := self class compiler evaluate: 'local2' in: thisContext to: self) == local2. self assert: (r4 := self class compiler evaluate: 'remote1' in: thisContext to: self) == remote1. self assert: (r4 := self class compiler evaluate: 'remote1' in: outerContext to: self) == remote1. self class compiler evaluate: 'local2 := 15' in: thisContext to: self. self assert: local2 = 15. self class compiler evaluate: 'local1 := 25' in: thisContext to: self. self assert: local1 = 25. { r1. r2. r3. r4 } "placate the compiler"]. self assert: local1 = 25. self assert: remote1 = (6/7)! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 5/2/2013 11:33' prior: 22127050! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [^#()]. data := aString. "delete trailing period. This should be fixed in the Parser!!" data := data trimRight: [ :char| char isSeparator or: [ char = $. ]]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [dataObjects := self class compiler evaluate: '{', data, '}'] on: SyntaxErrorNotification do: [:e | self inform: 'Syntax Error: ', e errorMessage. self contents: (e errorCode allButFirst allButLast). ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data in: Object notifying: nil) body statements select: [:each | (each isKindOf: ReturnNode) not]. dataStrings := statements collect:[:node | String streamContents: [:strm | (node isMessage) ifTrue: [strm nextPut: $(]. node shortPrintOn: strm. (node isMessage) ifTrue: [strm nextPut: $)]]]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #()]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [resultArray := resultArray collect: [:expression | | newExp | newExp := expression. dataObjects first withIndexDo: [:lit :i | newExp := newExp copyReplaceAll: 'data', i printString with: (dataStrings at: i)]. newExp, ' --> ', dataStrings last ]]. ^ resultArray! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 34962187! defineClass: className "Prompts the user to define a new class." | classSymbol systemCategory classDefinition | classSymbol := className asSymbol. systemCategory := self methodClass category ifNil: [ 'Unknown' ]. classDefinition := 'Object subclass: #' , classSymbol , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategory , ''''. classDefinition := UIManager default multiLineRequest: 'Edit class definition:' initialAnswer: classDefinition answerHeight: 150. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self fail ]. self class compiler evaluate: classDefinition. ^ (variableNode owningScope lookupVar: className) ifNil: [self error: 'should be not happen']! ! !UndefinedObjectTest methodsFor: 'tests - printing' stamp: 'MarcusDenker 5/2/2013 11:38' prior: 54486758! testStoreOn | string | string := String streamContents: [ :stream | nil storeOn: stream ]. self assert: (self class compile evaluate: string) isNil! ! !RectangleTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:36' prior: 32201884! testStoreOn | assoc assoc2 | assoc := (0@0 extent: 1@1) -> 0. self shouldnt: [assoc2 := self class compiler evaluate: assoc storeString] raise: Error. self assert: assoc key = assoc2 key. self assert: assoc value = assoc2 value.! ! !Inspector methodsFor: 'selecting' stamp: 'MarcusDenker 5/2/2013 11:33' prior: 23665373! accept: aString | result | result := self doItReceiver class compiler evaluate: aString readStream in: self doItContext to: self doItReceiver notifying: nil ifFail: [ "fix this" self changed: #flash. ^ false ]. result == #failedDoit ifTrue: [ ^ false ]. self replaceSelectionValue: result. self changed: #contents. ^ true! ! !ScannerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/2/2013 11:36' prior: 32713689! testLiteralSymbols ((32 to: 126) collect: [:ascii | Character value: ascii]) , #(':x:yourself' '::' 'x:yourself' '123' 'x0:1:2:' 'x.y.z' '1abc' 'a1b0c2' ' x' 'x ' '+x-y' '||' '--' '++' '+-' '+/-' '-/+' '<|>' '#x' '()' '[]' '{}' '') do: [:str | self assert: (self class compiler evaluate: str asSymbol printString) = str asSymbol description: 'in all case, a Symbol must be printed in an interpretable fashion']! ! !DigitalSignatureAlgorithm class methodsFor: 'examples' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 20869996! testExamplesFromDisk "verify messages from file on disk" "Note: Secure random numbers are needed for key generation and message signing, but not for signature verification. There is no need to call initRandomFromUser if you are merely checking a signature." "DigitalSignatureAlgorithm testExamplesFromDisk" FileStream readOnlyFileNamed: 'dsa.test.out' do: [ :file | | msg sig publicKey | [file atEnd] whileFalse: [ sig := file nextChunk. msg := file nextChunk. publicKey := self class compiler evaluate: file nextChunk. (self verify: sig isSignatureOf: msg publicKey: publicKey) ifTrue: [Transcript show: 'SUCCESS: ',msg; cr.] ifFalse: [self error: 'ERROR!! Signature verification failed']]]! ! !MCTraitDefinition methodsFor: 'visiting' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 25085649! createClass ^Trait named: name uses: (self class compiler evaluate: self traitCompositionString) category: category ! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 5/2/2013 11:22' prior: 17443628! addClassIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | classSymbol systemCategory classDefinition | classSymbol := #NameOfSubclass. systemCategory := aPackage ifNil: [ 'Unknown' ]. classDefinition := 'Object subclass: #' , classSymbol , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategory name , ''''. classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 5/2/2013 11:23' prior: 17444434! addTraitIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | systemCategory classDefinition | systemCategory := aPackage ifNil: [ 'Unknown' ]. classDefinition := 'Trait named: #TSortable uses: {} category: ''' , systemCategory name , ''''. classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 5/2/2013 11:23' prior: 17451350! defineTrait: defString notifying: aController | defTokens keywdIx envt oldTrait newTraitName trait | self selectedClassOrMetaClass isTrait ifTrue:[oldTrait := self selectedClassOrMetaClass]. defTokens := defString findTokens: Character separators. keywdIx := defTokens findFirst: [:x | x = 'category']. envt := self class environment. keywdIx := defTokens findFirst: [:x | x = 'named:']. newTraitName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldTrait isNil or: [oldTrait baseTrait name asString ~= newTraitName]) and: [envt includesKey: newTraitName asSymbol]) ifTrue: ["Attempting to define new class/trait over existing one when not looking at the original one in this browser..." (self confirm: ((newTraitName , ' is an existing class/trait in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newTraitName size)) ifFalse: [^ nil ]]. trait := self class compiler evaluate: defString notifying: aController logged: true. ^ trait! ! !TextEditor methodsFor: 'do-its' stamp: 'MarcusDenker 5/2/2013 11:37' prior: 52604231! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ nil]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ rcvr class compiler evaluate: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [morph flash. ^ nil] logged: true. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. ^aBlock value: result! ! !ScaledDecimalTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:36' prior: 32693373! testStoreOn "this is http://bugs.squeak.org/view.php?id=4378" "Both results should be 1. ScaledDecimal representations are exact (though only scale digits or fractional part are printed)" self assert: (self class compiler evaluate: (0.5s1 squared storeString)) * 4 = (0.5s1 squared * 4). "However, exact literals should store literaly If not, they would break Decompiler." "BUG: i cannot write the test like this: self assert: 0.5s2 squared storeString = '0.25s2' BECAUSE compiler would consider 0.5s2 as = 0.5s1 and would reuse same slot..." self assert: 0.25s2 storeString = '0.25s2'! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 21793582! selectedBytecodes "Compile the source code for the selected message selector and extract and return the bytecode listing." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. contents := self class compiler parse: contents in: class notifying: nil. contents := contents generate. ^ contents symbolic asText! ! !PolygonMorph methodsFor: 'menu' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 29713237! specifyDashedLine | executableSpec newSpec | executableSpec := UIManager default request: 'Enter a dash specification as { major dash length. minor dash length. minor dash color } The major dash will have the normal border color. A blank response will remove the dash specification. [Note: You may give 5 items as, eg, {10. 5. Color white. 0. 3} where the 4th ityem is zero, and the 5th is the number of pixels by which the dashes will move in each step of animation]' translated initialAnswer: '{ 10. 5. Color red }'. executableSpec isEmptyOrNil ifTrue: [^ self stopStepping; dashedBorder: nil]. newSpec := [self class compiler evaluate: executableSpec] ifError: [^ self stopStepping; dashedBorder: nil]. newSpec first isNumber & newSpec second isNumber & newSpec third isColor ifFalse: [^ self stopStepping; dashedBorder: nil]. newSpec size = 3 ifTrue: [^ self stopStepping; dashedBorder: newSpec]. (newSpec size = 5 and: [newSpec fourth isNumber & newSpec fifth isNumber]) ifTrue: [^ self dashedBorder: newSpec; startStepping]. ! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 11:38' prior: 52096956! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !ArrayTest methodsFor: 'testing' stamp: 'MarcusDenker 5/2/2013 11:23' prior: 17637825! testComplexIsSelfEvaluating "self run: #testComplexIsSelfEvaluating" | complexArray restoredArray | complexArray := {1. true. false. nil. #a. 'a'. $a. Float pi. Float halfPi. 4/5. Float infinity negated. Color red. 1@2. (0@0 extent: 1@1). 'hola'-> 0. Object. Object class}. complexArray := complexArray copyWith: complexArray. self assert: complexArray isSelfEvaluating. self shouldnt: [restoredArray := self class evaluate: complexArray printString] raise: Error. self assert: restoredArray = complexArray! ! !ArrayTest methodsFor: 'testing' stamp: 'MarcusDenker 5/2/2013 11:26' prior: 17639570! testPrinting "self debug: #testPrinting" self assert: literalArray printString = '#(1 true 3 #four)'. self assert: (literalArray = (self class compiler evaluate: literalArray printString)). self assert: (selfEvaluatingArray = (self class compiler evaluate: selfEvaluatingArray printString)). self assert: nonSEArray1 printString = 'an Array(1 a Set(1))'. self assert: nonSEarray2 printString = '{#Array->Array}' ! ! !Transcripter methodsFor: 'command line' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 53469225! readEvalPrint | line okToRevert | okToRevert := true. Sensor flushKeyboard. [#('quit' 'exit' 'done' ) includes: (line := self request: '> ')] whileFalse: [line = 'revert' ifTrue: [okToRevert ifTrue: [(self confirm: 'Revert: ' , RecentMessageList uniqueInstance lastEntry asString , ' ?') ifTrue: [RecentMessageList uniqueInstance revertLastMethodSubmission. self cr; show: 'reverted: ' , RecentMessageList uniqueInstance lastEntry asString. okToRevert := false]] ifFalse: [self cr; show: 'Only one level of revert currently supported']] ifFalse: [self cr; show: ([self class compiler evaluate: line] ifError: [:err | err])]]. self cr; show: 'Done'. ! ! !UndefinedObject methodsFor: 'class hierarchy' stamp: 'MarcusDenker 5/2/2013 11:38' prior: 54479447! subclassDefinerClass "For disjunct class hierarchies -- how should subclasses of nil be evaluated" ^self class compilerClass! ! !MCScriptDefinition methodsFor: 'installing' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 24971284! evaluate self class compiler evaluate: script! ! !PositionableStream methodsFor: '*System-Changes' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 29849688! fileInFor: client announcing: announcement "This is special for reading expressions from text that has been formatted with exclamation delimitors. The expressions are read and passed to the Compiler. Answer the result of compilation. Put up a progress report with the given announcement as the title. Does NOT handle preambles or postscripts specially." | val | announcement displayProgressFrom: 0 to: self size during: [:bar | [self atEnd] whileFalse: [bar current: self position. self skipSeparators. [ | chunk | val := (self peekFor: $!!) ifTrue: [ (self class compiler evaluate: self nextChunk for: client logged: false) scanFrom: self ] ifFalse: [ chunk := self nextChunk. self checkForPreamble: chunk. self class compiler evaluate: chunk for: client logged: true ]. ] on: InMidstOfFileinNotification do: [ :ex | ex resume: true]. self atEnd ifFalse: [ self skipStyleChunk ]]. self close]. "Note: The main purpose of this banner is to flush the changes file." Smalltalk logChange: '----End fileIn of ' , self name , '----'. ^ val! ! !SimpleButtonMorph methodsFor: 'menu' stamp: 'MarcusDenker 5/2/2013 11:37' prior: 33252443! setArguments | s newArgs newArgsArray | s := WriteStream on: ''. arguments do: [:arg | arg printOn: s. s nextPutAll: '. ']. newArgs := UIManager default request: 'Please type the arguments to be sent to the target when this button is pressed separated by periods' translated initialAnswer: s contents. newArgs isEmptyOrNil ifFalse: [ newArgsArray := self class compiler evaluate: '{', newArgs, '}' for: self logged: false. self arguments: newArgsArray]. ! ! !Debugger methodsFor: 'context stack menu' stamp: 'MarcusDenker 5/2/2013 11:26' prior: 20517326! returnValue "Force a return of a given value to the previous context!!" | previous selectedContext expression value | contextStackIndex = 0 ifTrue: [^Beeper beep]. self isPostMortem ifTrue: [^ self]. selectedContext := self selectedContext. expression := UIManager default request: 'Enter expression for return value:'. value := self class compiler evaluate: expression in: selectedContext to: selectedContext receiver. previous := selectedContext sender. self resetContext: previous. interruptedProcess popTo: previous value: value! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'MarcusDenker 5/2/2013 11:36' prior: 32333970! testIsSelfEvaluating | array array2 | array := RunArray new: 5 withAll: 2. self assert: array isSelfEvaluating. array2 := RunArray new: 5 withAll: Object new. array2 isSelfEvaluating ifTrue: [self assert: (self class compiler evaluate: array2 printString) = array2 description: 'a self evaluating should evaluate as self'].! ! !Browser methodsFor: 'traits' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 18504270! defineTrait: defString notifying: aController | defTokens keywdIx envt oldTrait newTraitName trait | oldTrait := self selectedClassOrMetaClass. defTokens := defString findTokens: Character separators. keywdIx := defTokens findFirst: [:x | x = 'category']. envt := self selectedEnvironment. keywdIx := defTokens findFirst: [:x | x = 'named:']. newTraitName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldTrait isNil or: [oldTrait baseTrait name asString ~= newTraitName]) and: [envt includesKey: newTraitName asSymbol]) ifTrue: ["Attempting to define new class/trait over existing one when not looking at the original one in this browser..." (self confirm: ((newTraitName , ' is an existing class/trait in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newTraitName size)) ifFalse: [^ false]]. trait := self class compiler evaluate: defString notifying: aController logged: true. ^(trait isKindOf: TraitBehavior) ifTrue: [ self changed: #classList. self classListIndex: (self classList indexOf: trait baseTrait name). self clearUserEditFlag; editClass. true] ifFalse: [ false ] ! ! !MCClassTraitDefinition methodsFor: 'installing' stamp: 'MarcusDenker 5/2/2013 11:34' prior: 24656149! load self class compiler evaluate: self definitionString! ! !FloatTest methodsFor: 'testing' stamp: 'MarcusDenker 5/2/2013 11:27' prior: 22389533! testStoreOn "If storeOn: prints exactly and the parser avoid cumulating round off Errors, then Float should be read back exactly. Note: there is no guarantee to restore the bit pattern of NaN though" self assert: (self class compiler evaluate: Float halfPi storeString) = Float halfPi. self assert: (self class compiler evaluate: Float halfPi negated storeString) = Float halfPi negated. self assert: (self class compiler evaluate: Float infinity storeString) = Float infinity. self assert: (self class compiler evaluate: Float infinity negated storeString) = Float infinity negated. self assert: (self class compiler evaluate: Float nan storeString) isNaN.! ! !SyntaxError methodsFor: 'other' stamp: 'MarcusDenker 5/2/2013 11:37' prior: 51473830! contents: aString notifying: aController "Compile the code in aString and proceed. Do not notify anybody of errors, because nobody would have been notified of errors if this syntax error had not arisen" doitFlag ifTrue: [self class compiler evaluate: aString] ifFalse: [class compile: aString classified: category]. aController hasUnacceptedEdits: false. self proceed! ! !Class methodsFor: 'copying' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 19062882! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class class instanceVariableNames: self class instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! !DictionaryInspector methodsFor: 'menu' stamp: 'MarcusDenker 5/2/2013 11:33' prior: 20737783! addEntry | newKey aKey | newKey := UIManager default request: 'Enter new key, then type RETURN. (Expression will be evaluated for value.) Examples: #Fred ''a string'' 3+4'. aKey := self class compiler evaluate: newKey. object at: aKey put: nil. self calculateKeyArray. selectionIndex := self numberOfFixedFields + (keyArray indexOf: aKey). self changed: #inspectObject. self changed: #selectionIndex. self changed: #fieldList. self update! ! !DictionaryInspector methodsFor: 'menu' stamp: 'MarcusDenker 5/2/2013 11:33' prior: 20739478! renameEntry | newKey aKey value | value := object at: (keyArray at: selectionIndex - self numberOfFixedFields). newKey := UIManager default request: 'Enter new key, then type RETURN. (Expression will be evaluated for value.) Examples: #Fred ''a string'' 3+4' initialAnswer: (keyArray at: selectionIndex - self numberOfFixedFields) printString. newKey isNil ifFalse: [ aKey := self class compiler evaluate: newKey. object removeKey: (keyArray at: selectionIndex - self numberOfFixedFields). object at: aKey put: value. self calculateKeyArray. selectionIndex := self numberOfFixedFields + (keyArray indexOf: aKey). self changed: #selectionIndex. self changed: #inspectObject. self changed: #fieldList. self update ]! ! !IntervalTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:33' prior: 23939226! testIntervalStoreOn "this is a test for http://bugs.squeak.org/view.php?id=4378" | interval1 interval2 | interval1 := 0 to: 1 by: 0.5s1 squared. interval2 := self class compiler evaluate: interval1 storeString. self assert: interval1 size = interval2 size! ! !PseudoClass methodsFor: 'private' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 30109548! evaluate: aString ^self class compiler evaluate: aString for: nil logged: true! ! !EyeInspector methodsFor: 'event-handling' stamp: 'MarcusDenker 5/2/2013 11:26' prior: 36021405! saveElement "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class compiler evaluate: description text readStream in: nil "should be object in case of methodContext" to: description doItReceiver. newValue == #failedDoit ifFalse: [ self selectedElement save: newValue. self objectChanged]! ! !SelfEvaluatingObjectTest methodsFor: 'utilities' stamp: 'MarcusDenker 5/2/2013 11:37' prior: 32942865! assertCode: code print: aString self assert: (self class evaluate: code) printString = aString! ! !ClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 19401362! testEmptyBlockOneArgument self assert: (self class compiler evaluate: '[ :a ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a | ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a | | t | ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'! ! !ClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 19401879! testEmptyBlockTwoArguments self assert: (self class compiler evaluate: '[ :a :b ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a :b | ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a :b | | t | ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'! ! !ClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25' prior: 19402433! testEmptyBlockZeroArguments self assert: (self class compiler evaluate: '[ ] value') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ | t | ] value') isNil description: 'Empty blocks in ST-80 should return nil'! ! !ChangeRecord methodsFor: 'initialization' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 18796990! fileIn "File the receiver in. If I represent a method or a class-comment, file the method in and make a note of it in the recent-submissions list; if I represent a do-it, then, well, do it." Cursor read showWhile: [ | methodClass aSelector s | (methodClass := self methodClass) notNil ifTrue: [ methodClass compile: self text classified: category withStamp: stamp notifying: nil. ]. type == #doIt ifTrue: [ ((s := self string) beginsWith: '----') ifFalse: [ self class compiler evaluate: s ] ]. "This expression break the recentMessageSet because it hijacks compiled methods to represent classComment. In the future we should redo a complete changeset metamodel based on classDefinition, classComment and other. type == #classComment ifTrue: [ | cls | (cls := Smalltalk globals at: class asSymbol) comment: self text stamp: stamp. RecentMessageSet noteMethodSubmission: #Comment forClass: cls ]" ]! ! !Object class methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 35608883! readFrom: textStringOrStream "Create an object based on the contents of textStringOrStream." | object | object := self class compiler evaluate: textStringOrStream. (object isKindOf: self) ifFalse: [self error: self name, ' expected']. ^object! ! Integer removeSelector: #asByteArrayOfSize:! Integer removeSelector: #asByteArray! Integer removeSelector: #asArray! SelfEvaluatingObjectTest removeSelector: #compile:! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! "CollectionsTests"! "Compiler"! "CompilerTests"! "EmergencyEvaluator"! "Graphics-Tests"! "Kernel"! "KernelTests"! "Monticello"! "Morphic"! "OpalCompiler-Core"! "Spec-Debugger"! "System-Changes"! "System-FilePackage"! "System-Hashing"! "Text"! "TextTests"! "Tools"! ----End fileIn----! ----QUIT----an Array(2 May 2013 4:04:39 pm) Pharo.image priorSource: 2754241! ----STARTUP----an Array(2 May 2013 4:43:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 May 2013 4:43:39 pm) Pharo-30084.image priorSource: 2799159! ----STARTUP----an Array(3 May 2013 12:05 am) as /Users/cami/Downloads/latest/Pharo-30084.image! processes := Process allInstances select: [ :p | | ctx | ctx := p suspendedContext. ctx notNil and: [ ctx method == (Delay>>#wait) and: [ ctx sender sender sender method selector == #secondsWhenClockTicks ] ]]. processes do: #terminate! ----QUIT----an Array(3 May 2013 12:05:17 am) Pharo-30084.image priorSource: 2799353! ----STARTUP----an Array(3 May 2013 9:25:04 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 09:22' prior: 36308968! commentForCurrentUpdate ^ '10476 fix CompiledMethodTest>>testCopyWithTrailerBytes https://pharo.fogbugz.com/f/cases/10476 10480 deprecated #decompilerClass https://pharo.fogbugz.com/f/cases/10480 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 09:22'! script182 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.762.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1409.mcz KernelTests-MarcusDenker.503.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.796.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1406.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.37.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.812.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.64.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1099.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 09:22'! update30085 "self new update30085" self withUpdateLog: '10476 fix CompiledMethodTest>>testCopyWithTrailerBytes https://pharo.fogbugz.com/f/cases/10476 10480 deprecated #decompilerClass https://pharo.fogbugz.com/f/cases/10480 '. self loadTogether: self script182 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 17:12' prior: 19769072! decompile "Return the decompiled parse tree that represents self" | class selector | class := self methodClass ifNil: [Object]. selector := self selector ifNil: [self defaultSelector]. ^class compiler decompile: selector in: class method: self.! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 17:11' prior: 19769545! decompileWithTemps "Return the decompiled parse tree that represents self, but get the temp names by compiling the sourcecode..." | class selector | class := self methodClass ifNil: [Object]. selector := self selector ifNil: [self defaultSelector]. (self fileIndex > 0 and: [(SourceFiles at: self fileIndex) isNil]) ifTrue: [ "Emergency or no source file -- decompile without temp names " ^self decompile. ]. ^((self compiler withTempNames: self methodNode schematicTempNamesString) decompile: selector in: class method: self)! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 17:14' prior: 19770199! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/2/2013 17:12' prior: 19794318! sourceCode "Retrieve or reconstruct the source code for this method." | trailer source class | trailer := self trailer. class := self methodClass. trailer sourceCode ifNotNil: [:code | ^ code ]. trailer hasSourcePointer ifFalse: [ "No source pointer -- decompile without temp names" ^ (class compiler decompile: self selector in: class method: self) decompileString]. "Situation normal; read the sourceCode from the file" source := [self getSourceFromFile] on: Error "An error can happen here if, for example, the changes file has been truncated by an aborted download. The present solution is to ignore the error and fall back on the decompiler. A more thorough solution should probably trigger a systematic invalidation of all source pointers past the end of the changes file. Consider that, as time goes on, the changes file will eventually grow large enough to cover the lost code, and then instead of falling into this error case, random source code will get returned." do: [ :ex | ex return: nil]. source isEmptyOrNil ifTrue: [ "Something really wrong -- decompile blind (no temps)" ^ (class compiler decompile: self selector in: class method: self) decompileString]. ^source! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 5/2/2013 12:59' prior: 19866481! testCopyWithTrailerBytes | method copy | method := thisContext method. self assert: method pragmas notEmpty. copy := method copyWithTrailerBytes: method trailer. self assert: (method equivalentTo: copy). self deny: method == copy. self assert: method symbolic = copy symbolic. "but their bytecode should be the same" self assert: method ~~ copy. self assert: copy penultimateLiteral method == copy. self assert: method penultimateLiteral method == method. method pragmas do: [:p| self assert: p method == method]. copy pragmas do: [:p| self assert: p method == copy] ! ! !BlockClosure methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 17:12' prior: 18210263! decompile ^self method compiler decompileBlock: self! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/2/2013 17:13' prior: 52096591! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Compiler class methodsFor: 'accessing' stamp: 'MarcusDenker 5/2/2013 17:14' prior: 19915196! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! "Compiler"! "Kernel"! "KernelTests"! ----End fileIn----! ----QUIT----an Array(3 May 2013 9:25:12 am) Pharo.image priorSource: 2799790! ----STARTUP----an Array(3 May 2013 9:31:38 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 9:31:38 am) Pharo-30085.image priorSource: 2814323! ----STARTUP----an Array(3 May 2013 9:44:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 09:41' prior: 36354513! commentForCurrentUpdate ^ '10425 DateAndTime refactoring https://pharo.fogbugz.com/f/cases/10425 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 09:41'! script183 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1410.mcz KernelTests-MarcusDenker.504.mcz KeyChain-MarcusDenker.31.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.796.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1406.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.37.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.94.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.812.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.64.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1099.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 09:41'! update30086 "self new update30086" self withUpdateLog: '10425 DateAndTime refactoring https://pharo.fogbugz.com/f/cases/10425 '. self loadTogether: self script183 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateAndTime commentStamp: '' prior: 20337884! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. ALways positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! !TimeTest methodsFor: 'coverage' stamp: 'nice 4/28/2013 01:29' prior: 53195090! selectorsToBeIgnored | deprecated private special primitives timing benchmarks | deprecated := #(). private := #( #print24:on: #print24:showSeconds:on: ). special := #( #< #= #new #printOn: #storeOn: ). primitives := #( #primMillisecondClock #primSecondsClock #primUTCMicrosecondsClock ). timing := #( #millisecondClockValue #milliseconds:since: #millisecondsSince: ). benchmarks := #( #benchmarkMillisecondClock #benchmarkPrimitiveResponseDelay ). ^ super selectorsToBeIgnored, deprecated, private, special, primitives, timing, benchmarks.! ! !Time class methodsFor: 'smalltalk-80' stamp: 'nice 4/28/2013 00:44' prior: 53150200! dateAndTimeFromSeconds: secondCountSinceEpoch | dateAndTime | dateAndTime := DateAndTime fromSeconds: secondCountSinceEpoch. ^ Array with: dateAndTime asDate with: dateAndTime asTime! ! !Time class methodsFor: 'general inquiries' stamp: 'nice 4/28/2013 01:19'! microsecondClockValue "Answer the number of microseconds since Squeak Epoch" ^self primUTCMicrosecondsClock ! ! !Time class methodsFor: 'squeak protocol' stamp: 'nice 4/27/2013 23:13'! microsecondsSince: lastTimeInMicroSeconds "Answer the elapsed time since last recorded in microseconds" ^self microsecondClockValue - lastTimeInMicroSeconds! ! !Time class methodsFor: 'general inquiries' stamp: 'nice 4/27/2013 22:57'! microsecondsToRun: timedBlock "Answer the number of milliseconds timedBlock takes to return its value." | initialMicroseconds | initialMicroseconds := self microsecondClockValue. timedBlock value. ^self microsecondClockValue - initialMicroseconds! ! !Time class methodsFor: 'general inquiries' stamp: 'nice 4/27/2013 22:59' prior: 53148586! millisecondsToRun: timedBlock "Answer the number of milliseconds timedBlock takes to return its value." ^(self microsecondsToRun: timedBlock) // 1e3! ! !Time class methodsFor: 'ansi protocol' stamp: 'nice 4/28/2013 22:38' prior: 53140956! now "Answer a Time representing the time right now - this is a 24 hour clock." ^ DateAndTime now asTime! ! !Time class methodsFor: 'smalltalk-80' stamp: 'nice 4/28/2013 01:12' prior: 53151500! primSecondsClock "Answer the number of whole seconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC" ^self primUTCMicrosecondsClock // 1e6! ! !Time class methodsFor: 'smalltalk-80' stamp: 'nice 4/28/2013 01:22'! primUTCMicrosecondsClock "Answer the number of micro-seconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC. At least a 60-bit unsigned integer is used internally which is enough for dates up to year 38435. Essential. See Object documentation whatIsAPrimitive. " self primitiveFailed! ! !Time class methodsFor: 'smalltalk-80' stamp: 'nice 4/28/2013 01:21' prior: 53152959! totalSeconds "Answer the total seconds ellapsed since the Squeak epoch: 1 January 1901 00:00 UTC" ^ self primSecondsClock! ! !DateAndTime commentStamp: '' prior: 36379163! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. ALways positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! !DateAndTime class methodsFor: 'instance creation' stamp: 'nice 4/28/2013 01:20' prior: 20366745! now " Answer the current date and time expressed in local time. [ 10000 timesRepeat: [ self now. ] ] timeToRun / 10000.0 . " | nanoTicks | nanoTicks := Time microsecondClockValue * 1e3. ^ self basicNew setJdn: SqueakEpoch seconds: 0 nano: nanoTicks offset: self localOffset! ! !DateAndTime class methodsFor: 'system queries' stamp: 'nice 4/28/2013 00:48' prior: 20375400! totalSeconds "Answer the total seconds ellapsed since the Squeak epoch: 1 January 1901" ^ Time totalSeconds! ! !DateAndTime methodsFor: 'arithmetic' stamp: 'nice 4/27/2013 22:06' prior: 20346699! < comparand "comparand conforms to protocol DateAndTime, or can be converted into something that conforms." | other utcSeconds otherUTCSeconds | other := comparand asDateAndTime. self julianDayNumberUTC < other julianDayNumberUTC ifTrue: [ ^ true ]. utcSeconds := self asSeconds. otherUTCSeconds := other asSeconds. ^ utcSeconds = otherUTCSeconds ifFalse: [ utcSeconds < otherUTCSeconds ] ifTrue: [ nanos < other nanoSecond ]! ! !DateAndTime methodsFor: 'arithmetic' stamp: 'nice 4/27/2013 22:06' prior: 20347216! = other self == other ifTrue: [ ^ true ]. (self species = other species) ifFalse: [ ^ false ]. ^ self hasEqualTicks: other! ! !DateAndTime methodsFor: 'converting' stamp: 'nice 4/27/2013 23:41' prior: 20348008! asDuration "Answer the duration since midnight." ^ Duration seconds: self secondsSinceMidnightLocalTime nanoSeconds: nanos ! ! !DateAndTime methodsFor: 'converting' stamp: 'nice 4/27/2013 23:41' prior: 20348866! asTime ^ Time seconds: self secondsSinceMidnightLocalTime nanoSeconds: nanos! ! !DateAndTime methodsFor: '*Fuel' stamp: 'nice 4/27/2013 22:18' prior: 20338524! fuelSet: julianDay nanoSecond: nanoSeconds seconds: numberOfSeconds offset: anOffset self setJdn: julianDay seconds: numberOfSeconds nano: nanoSeconds offset: anOffset! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 22:09' prior: 20356886! hasEqualTicks: aDateAndTime ^ (self julianDayNumberUTC = aDateAndTime julianDayNumberUTC) and: [ (seconds = aDateAndTime secondsSinceMidnightUTC) and: [ nanos = aDateAndTime nanoSecond ] ] ! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 22:08' prior: 20357149! hash ^ (julianDayNumber hashMultiply bitXor: seconds) bitXor: nanos! ! !DateAndTime methodsFor: 'accessing' stamp: 'nice 4/27/2013 23:43' prior: 20342079! hour24 "Answer a number that represents the number of complete hours in the receiver's time part, after the number of complete days has been removed." ^ self localSeconds // SecondsInHour \\ 24! ! !DateAndTime methodsFor: 'accessing' stamp: 'nice 4/27/2013 23:44' prior: 20343399! minute "Answer a number that represents the number of complete minutes in the receiver' time part, after the number of complete hours has been removed." ^ self localSeconds // SecondsInMinute \\ 60! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/28/2013 01:17'! normalizeSecondsAndNanos (NanosInSecond <= nanos or: [ nanos < 0 ]) ifTrue: [ seconds := seconds + (nanos // NanosInSecond). nanos := nanos \\ NanosInSecond]. (SecondsInDay <= seconds or: [ seconds < 0 ]) ifTrue: [ julianDayNumber := julianDayNumber + (seconds // SecondsInDay). seconds := seconds \\ SecondsInDay]. ! ! !DateAndTime methodsFor: 'truncation' stamp: 'nice 4/27/2013 22:16' prior: 20356266! rounded "Answer a date and time to the nearest whole second" ^ self species basicNew ticks: { julianDayNumber. nanos *2 >= NanosInSecond ifTrue: [seconds + 1] ifFalse: [seconds]. 0 } offset: offset! ! !DateAndTime methodsFor: 'accessing' stamp: 'nice 4/27/2013 23:43' prior: 20344985! second "Answer a number that represents the number of complete seconds in the receiver's time part, after the number of complete minutes has been removed." ^ self localSeconds \\ 60! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 22:21' prior: 20357795! secondsSinceMidnight self deprecated: 'Use secondsSinceMidnightUTC' on: ' 2013-04-27T20:20:00Z' in: 'Pharo 3.0'. ^ self secondsSinceMidnightUTC! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 23:24'! secondsSinceMidnightLocalTime ^ self localSeconds \\ SecondsInDay! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 22:09'! secondsSinceMidnightUTC ^ seconds! ! !DateAndTime methodsFor: '*Fuel' stamp: 'nice 4/27/2013 22:10' prior: 20338785! serializeOn: anEncoder anEncoder encodeUint32: self julianDayNumberUTC; encodeUint32: self nanoSecond; encodeInt24: self secondsSinceMidnightUTC; encodeInt24: self offset asSeconds; encodeInt32: self offset nanoSeconds.! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/28/2013 01:17' prior: 20357907! setJdn: julDays seconds: secs nano: nanoSecs offset: anOffset julianDayNumber := julDays. seconds := secs. nanos := nanoSecs. offset := anOffset. self normalizeSecondsAndNanos! ! !DateAndTime methodsFor: 'private' stamp: 'nice 4/27/2013 22:19' prior: 20358355! ticks: ticks offset: utcOffset "ticks is {julianDayNumber. secondCount. nanoSeconds}" self setJdn: (ticks at: 1) seconds: (ticks at: 2) nano: (ticks at: 3) offset: utcOffset! ! !DateAndTime methodsFor: 'truncation' stamp: 'nice 4/27/2013 22:13' prior: 20356569! truncated "Answer a date and time to the nearest preceding whole second" ^ self species basicNew ticks: { julianDayNumber. seconds. 0 } offset: offset! ! "Fuel"! "Kernel"! "KernelTests"! ----End fileIn----! ----QUIT----an Array(3 May 2013 9:44:12 am) Pharo.image priorSource: 2814517! ----STARTUP----an Array(3 May 2013 9:50:34 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 9:50:34 am) Pharo-30086.image priorSource: 2834791! ----STARTUP----an Array(3 May 2013 10:23:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 10:19' prior: 36369243! commentForCurrentUpdate ^ '10483 Fix Failing Tests in UTF16TextConverterTest https://pharo.fogbugz.com/f/cases/10483 10482 Fix failing test UndefinedObjectTest https://pharo.fogbugz.com/f/cases/10482 10471 UserPermission for CommandLineHandler https://pharo.fogbugz.com/f/cases/10471/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 10:20'! script184 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1413.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1407.mcz MorphicTests-MarcusDenker.67.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.37.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.813.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1100.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 10:20'! update30087 "self new update30087" self withUpdateLog: '10483 Fix Failing Tests in UTF16TextConverterTest https://pharo.fogbugz.com/f/cases/10483 10482 Fix failing test UndefinedObjectTest https://pharo.fogbugz.com/f/cases/10482 10471 UserPermission for CommandLineHandler https://pharo.fogbugz.com/f/cases/10471/ '. self loadTogether: self script184 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UserManager commentStamp: '' prior: 0! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !Debugger class methodsFor: 'opening' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 35668863! openOn: process context: context label: title contents: contentsStringOrNil fullView: bool "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | fullView | fullView := (bool or: [self alwaysOpenFullDebugger]). UserManager default currentUser canDebug ifFalse: [ UIManager default spawnNewProcessIfThisIsUI: process. process suspend. ^ self ]. ^ UIManager default openDebuggerOn: process context: context label: title contents: contentsStringOrNil fullView: fullView! ! !PluggableTextMorph methodsFor: 'actions' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 29549677! accept UserManager default currentUser canEditCode ifFalse: [ ^ self hasUnacceptedEdits: false ]. self acceptBasic. acceptAction ifNotNil: [acceptAction value: textMorph contents asText].! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 29570638! doIt UserManager default currentUser canEvaluateCode ifFalse: [ ^ false ]. self handleEdit: [textMorph editor evaluateSelection]! ! !PluggableTextMorph methodsFor: 'styling' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 29581229! hasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " UserManager default currentUser canEditCode ifFalse: [ aBoolean ifTrue: [ ^ self ]]. aBoolean == hasUnacceptedEdits ifFalse: [hasUnacceptedEdits := aBoolean. self changed]. aBoolean ifFalse: [hasEditingConflicts := false]. self okToStyle ifTrue: [ self styler styleInBackgroundProcess: textMorph contents]! ! !DefaultCommandLineHandler class methodsFor: 'class initialization' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 20616109! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. UserManager default currentUser canRunStartupScript ifFalse: [ ^ self ]. Smalltalk addDeferredStartupAction: [ self new activate ]! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 29197976! dropFiles: anEvent "Handle a number of dropped files from the OS. TODO: - use a more general mechanism for figuring out what to do with the file (perhaps even offering a choice from a menu) - remember the resource location or (when in browser) even the actual file handle " | numFiles stream handler | UserManager default currentUser canDropOSFile ifFalse: [ ^ self ]. numFiles := anEvent contents. 1 to: numFiles do: [:i | (stream := FileStream requestDropStream: i) ifNotNil: [ handler := ExternalDropHandler lookupExternalDropHandler: stream. [handler ifNotNil: [handler handle: stream in: self dropEvent: anEvent]] ensure: [stream close]]].! ! !Morph methodsFor: 'halos and balloon help' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 26714735! addHalo: evt | halo prospectiveHaloClass | UserManager default currentUser canShowMorphHalo ifFalse: [ ^ self ]. prospectiveHaloClass := Smalltalk globals at: self haloClass ifAbsent: [ HaloMorph ]. halo := prospectiveHaloClass new. halo bounds: (halo worldBoundsForMorph: self). halo popUpFor: self event: evt. ^ halo! ! !Morph methodsFor: 'meta-actions' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 26791266! invokeMetaMenu: evt | menu | UserManager default currentUser canShowMorphHalo ifFalse: [ ^ self ]. menu := self buildMetaMenu: evt. menu addTitle: self externalName. self world ifNotNil: [ menu popUpEvent: evt in: self world ]! ! !SmalltalkEditor class methodsFor: 'menu declaration' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33476470! smalltalkEditorMenuOn: aBuilder "Specify the menu used when writing code. Try it with: (PragmaMenuBuilder pragmaKeyword: 'smalltalkEditorMenu' model: nil) menu popUpInWorld " | uitheme| uitheme := UITheme current. UserManager default currentUser canEvaluateCode ifTrue: [ (aBuilder item: #'Do it' translated) keyText: 'd'; selector: #doIt; help: nil; icon: uitheme smallDoItIcon. (aBuilder item: #'Print it' translated) keyText: 'p'; selector: #printIt; help: nil; icon: uitheme smallPrintItIcon. ]. UserManager default currentUser canInspect ifTrue: [ (aBuilder item: #'Inspect it' translated) keyText: 'i'; selector: #inspectIt; help: nil; icon: uitheme smallInspectItIcon. (aBuilder item: #'Explore it' translated) keyText: 'I'; selector: #exploreIt; help: nil; icon: uitheme smallInspectItIcon ]. UserManager default currentUser canDebug ifTrue: [ (aBuilder item: #'Debug it' translated) keyText: 'D'; selector: #debugIt; help: nil; icon: uitheme smallDebugIcon. (aBuilder item: #'Profile it' translated) selector: #tallyIt; icon: uitheme smallDebugIcon; withSeparatorAfter. ]. (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; help: nil; icon: uitheme smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; help: nil; icon: uitheme smallFindIcon. UserManager default currentUser canBrowse ifTrue: [ (aBuilder item: #'Extended search...' translated) selector: #shiftedTextPaneMenuRequest; withSeparatorAfter ]. (aBuilder item: #'Do again' translated) keyText: 'j'; selector: #again; help: nil; icon: uitheme smallRedoIcon. (aBuilder item: #'Undo' translated) keyText: 'z'; selector: #undo; help: nil; icon: uitheme smallUndoIcon; withSeparatorAfter. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; help: nil; icon: uitheme smallCopyIcon. (aBuilder item: #'Cut' translated) keyText: 'x'; selector: #cut; help: nil; icon: uitheme smallCutIcon. (aBuilder item: #'Paste' translated) keyText: 'v'; selector: #paste; help: nil; icon: uitheme smallPasteIcon. (aBuilder item: #'Paste...' translated) selector: #pasteRecent; help: nil; icon: uitheme smallCopyIcon; withSeparatorAfter. UserManager default currentUser canEvaluateCode ifTrue: [ (aBuilder item: #'Accept' translated) keyText: 's'; selector: #accept; help: nil; icon: uitheme smallOkIcon. (aBuilder item: #'Cancel' translated) keyText: 'l'; selector: #cancel; help: nil; icon: uitheme smallCancelIcon ].! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33454506! browseIt: t1 UserManager default currentUser canBrowse ifFalse: [^ false]. self browseIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33454705! debugIt: aKeyboardEvent "Evaluate the current selection in the Debugger." UserManager default currentUser canDebug ifFalse: [ ^ false ]. self debugIt. ^ true! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33450922! doIt "Set the context to include pool vars of the model. Then evaluate." UserManager default currentUser canEvaluateCode ifFalse: [ ^ false ]. ^ self evaluateSelection! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33454964! doIt: aKeyboardEvent "Called when user hits cmd-d. Select the current line, if relevant, then evaluate and execute. 2/1/96 sw. 2/29/96 sw: don't call selectLine; it's done by doIt now" UserManager default currentUser canEvaluateCode ifFalse: [ ^ false ]. self doIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33455342! exploreIt: aKeyboardEvent "Explore the selection -- invoked via cmd-shift-I. If there is no current selection, use the current line." UserManager default currentUser canInspect ifFalse: [ ^ false ]. self exploreIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33455667! fileItIn: aKeyboardEvent "File in the selection; invoked via a keyboard shortcut, -- for now, cmd-shift-G." UserManager default currentUser canDropOSFile ifFalse: [ ^ false ]. self fileItIn. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33455966! implementorsOfIt: aKeyboardEvent "Triggered by Cmd-m; browse implementors of the selector represented by the current selection, if plausible. 2/1/96 sw" UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self implementorsOfIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33456314! inspectIt: aKeyboardEvent "Inspect the selection -- invoked via cmd-i. If there is no current selection, use the current line. 1/17/96 sw 2/29/96 sw: don't call selectLine; it's done by inspectIt now" UserManager default currentUser canInspect ifFalse: [ ^ false ]. self inspectIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33456708! methodNamesContainingIt: aKeyboardEvent "Browse methods whose selectors containing the selection in their names" UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self methodNamesContainingIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33457023! methodStringsContainingIt: aKeyboardEvent "Invoked from cmd-E -- open a browser on all methods holding string constants containing it." UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self methodStringsContainingit. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33457363! pasteInitials: aKeyboardEvent "Replace the current text selection by an authorship name/date stamp; invoked by cmd-shift-v, easy way to put an authorship stamp in the comments of an editor." UserManager default currentUser canEditCode ifFalse: [ ^ false ]. self closeTypeIn. self replace: self selectionInterval with: (Text fromString: Author changeStamp) and: [self selectAt: self stopIndex]. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33458215! referencesToIt: aKeyboardEvent "Triggered by Cmd-N; browse references to the current selection" UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self referencesToIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33458504! save: aKeyboardEvent "Submit the current text. Equivalent to 'accept' 1/18/96 sw" UserManager default currentUser canEvaluateCode ifFalse: [ ^ false ]. self closeTypeIn. self accept. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33458797! sendersOfIt: aKeyboardEvent "Triggered by Cmd-n; browse implementors of the selector represented by the current selection, if plausible. 2/1/96 sw" UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self sendersOfIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 33459135! spawnIt: aKeyboardEvent "Triggered by Cmd-o; spawn a new code window, if it makes sense." UserManager default currentUser canBrowse ifFalse: [ ^ false ]. self spawn. ^ true! ! !Inspector class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 23671357! openAsMorphOn: anObject withEvalPane: withEval withLabel: label valueViewClass: valueViewClass "Note: for now, this always adds an eval pane, and ignores the valueViewClass" UserManager default currentUser canInspect ifFalse: [ ^ self ]. ^ (self openAsMorphOn: anObject withLabel: label) openInWorld! ! !PharoUser class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 29340540! username: username ^ UserManager default users detect: [:e | e username = username ] ifNone: [ self new username: username; yourself ]! ! !MCHttpRepository methodsFor: 'actions' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 24801595! password self userAndPasswordFromSettingsDo: [:usr :pwd | ^pwd]. self user isEmpty ifTrue: [^password ifNil: ['']]. password isEmptyOrNil ifTrue: [ password := (UserManager default currentUser userNamePasswordFor: self keyChainGroupSelector) ifNil: [ '' ] ifNotNil: [:usr | usr password ]]. password isEmptyOrNil ifTrue: [ | answer | user isEmptyOrNil ifTrue: [ "Give the user a chance to change the login" answer := UIManager default request: 'User name for ', String cr, location initialAnswer: ''. answer isEmptyOrNil ifTrue: [^password] ifFalse: [self user: answer] ]. password := UIManager default requestPassword: 'Password for "', self user, '" at ', String cr, self location. "The user doesn't care about logging into this repo. Clear the username so they will not be prompted every time" password isEmptyOrNil ifTrue: [ user := '' ]. ]. ^ password! ! !MCHttpRepository methodsFor: 'accessing' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 24800301! user self userAndPasswordFromSettingsDo: [:usr :pwd | ^usr]. "not in settings" user isEmptyOrNil ifFalse: [ ^user ]. ^ Smalltalk globals at: #UserManager ifPresent: [:usersManager | (usersManager default currentUser userNamePasswordFor: self keyChainGroupSelector) ifNotNil: [ :usr | usr username ] ifNil: [ '' ]] ifAbsent: [ '' ]! ! !UndefinedObjectTest methodsFor: 'tests - printing' stamp: 'MarcusDenker 5/3/2013 09:51' prior: 36330045! testStoreOn | string | string := String streamContents: [ :stream | nil storeOn: stream ]. self assert: (self class compiler evaluate: string) isNil! ! !Integer methodsFor: 'converting-arrays' stamp: 'PeterHugossonMiller 9/3/2009 10:00'! asArray | stream | stream := Array new writeStream. self digitLength to: 1 by: -1 do: [:digitIndex | stream nextPut: (self digitAt: digitIndex)]. ^ stream contents ! ! !Integer methodsFor: 'converting-arrays' stamp: 'PeterHugossonMiller 9/3/2009 10:01'! asByteArray | stream | stream := ByteArray new writeStream. self digitLength to: 1 by: -1 do: [:digitIndex | stream nextPut: (self digitAt: digitIndex)]. ^ stream contents ! ! !Integer methodsFor: 'converting-arrays' stamp: 'StephaneDucasse 10/17/2009 17:15'! asByteArrayOfSize: aSize "Answer a ByteArray of aSize with my value, most-significant byte first." | answer digitPos | aSize < self digitLength ifTrue: [ self error: 'number to large for byte array' ]. answer := ByteArray new: aSize. digitPos := 1. aSize to: aSize - self digitLength + 1 by: -1 do: [ :pos | answer at: pos put: (self digitAt: digitPos). digitPos := digitPos + 1 ]. ^ answer! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 17780174! fullName: aString fullName := aString. Smalltalk globals at: #UserManager ifPresent: [:usersManager | usersManager default currentUser setUserName: aString forGroup: #author].! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 17780434! fullNamePerSe "Answer the currently-prevailing author full name, such as it is, empty or not" ^ Smalltalk globals at: #UserManager ifPresent: [:usersManager | usersManager default currentUser userNameFor: #author] ifAbsent: [ fullName ] ! ! !UserEditor methodsFor: 'private' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 54590453! userNames ^UserManager default userNames! ! !UserManager commentStamp: '' prior: 36400017! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !UserManager class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/9/2012 13:00'! default ^ DefaultUserManager ifNil: [ DefaultUserManager := self new ]! ! !UserManager class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/9/2012 13:06'! resetDefault DefaultUserManager := nil! ! !UserManager class methodsFor: 'menu' stamp: 'EstebanLorenzano 12/6/2012 13:47'! switchUsers2: aBuilder "I build a menu" "" (aBuilder item: #'Switch User tests'). (aBuilder item: #'Test Halt') parent: #'Switch User tests'; action: [ self halt ]. (aBuilder item: #'Test DNU') parent: #'Switch User tests'; action: [ self DNU ]. (aBuilder item: #'Test inspect') parent: #'Switch User tests'; action: [ self inspect ]! ! !UserManager class methodsFor: 'menu' stamp: 'EstebanLorenzano 12/6/2012 18:39'! switchUsers: aBuilder "I build a menu" (aBuilder item: #'Switch User') parent: #System; order: 1.5; icon: (UITheme current iconNamed: #userIcon); action: [ self default openSwitchUsers ]! ! !UserManager methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2012 11:41'! addDefaultUser | user | user := PharoUser new username: 'root'; yourself. user isRoot: true. self addUser: user. ^ user! ! !UserManager methodsFor: 'protocol' stamp: 'EstebanLorenzano 12/6/2012 18:58'! addUser: aPharoUser users add: aPharoUser. users size = 1 ifTrue: [ self setCurrentUser: aPharoUser ]. aPharoUser keychain username: aPharoUser username. ^ aPharoUser! ! !UserManager methodsFor: 'protocol' stamp: 'EstebanLorenzano 12/6/2012 18:57'! addUser: aName password: aPassword | user | user := (PharoUser username: aName). user keychain setPassword: aPassword. ^ self addUser: user! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2012 15:40'! addUser: aName password: aPassword gravatarMail: email | user | user := self addUser: aName password: aPassword. user avatar: email. user setUserName: email forGroup: #gravatar! ! !UserManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/16/2012 15:19'! currentUser ^ currentUser! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/9/2012 16:14'! groupsFor: anUser ^ self currentUser keychain groups! ! !UserManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/16/2012 15:19'! initialize "Initialization code for UsersManager" super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !UserManager methodsFor: '*KeyChain-UI' stamp: 'BenjaminVanRyseghem 8/2/2012 15:37'! openSwitchUsers SwitchUsers new usersManager: self; openDialogWithSpec! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/16/2012 15:11'! removeUser: aName users remove: aName! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/9/2012 11:45'! setCurrentUser: aName currentUser := aName! ! !UserManager methodsFor: 'protocol-forward' stamp: 'BenjaminVanRyseghem 5/9/2012 16:14'! setPassword: aString ^ self currentUser setPassword: aString ! ! !UserManager methodsFor: 'protocol-forward' stamp: 'BenjaminVanRyseghem 5/9/2012 16:14'! setUserName: user password: pass forGroup: group ^ self currentUser setUserName: user password: pass forGroup: group! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2012 15:34'! userNameFor: aGroup ^ self currentUser userNameFor: aGroup ! ! !UserManager methodsFor: 'protocol-forward' stamp: 'BenjaminVanRyseghem 5/9/2012 16:14'! userNamePasswordFor: aGroup ^ self currentUser userNamePasswordFor: aGroup ! ! !UserManager methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/6/2012 19:05'! userNames ^ self users collect: #username! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/16/2012 15:11'! users ^ users! ! !SwitchUsers methodsFor: 'private' stamp: 'CamilloBruni 5/1/2013 22:51' prior: 51350131! userNames ^UserManager default userNames! ! UsersManager removeSelector: #users! UsersManager removeSelector: #userNames! UsersManager removeSelector: #userNamePasswordFor:! UsersManager removeSelector: #userNameFor:! UsersManager removeSelector: #setUserName:password:forGroup:! UsersManager removeSelector: #setPassword:! UsersManager removeSelector: #setCurrentUser:! UsersManager removeSelector: #removeUser:! UsersManager removeSelector: #openSwitchUsers! UsersManager removeSelector: #initialize! UsersManager removeSelector: #groupsFor:! UsersManager removeSelector: #currentUser! UsersManager removeSelector: #addUser:password:gravatarMail:! UsersManager removeSelector: #addUser:password:! UsersManager removeSelector: #addUser:! UsersManager removeSelector: #addDefaultUser! UsersManager class removeSelector: #switchUsers:! UsersManager class removeSelector: #switchUsers2:! UsersManager class removeSelector: #resetDefault! UsersManager class removeSelector: #default! Smalltalk globals removeClassNamed: #UsersManager! "Kernel"! "KernelTests"! "KeyChain"! "Monticello"! "Morphic"! "System-CommandLine"! "System-Support"! "Text"! "Tools"! ----End fileIn----! ----QUIT----an Array(3 May 2013 10:23:18 am) Pharo.image priorSource: 2834985! ----STARTUP----an Array(3 May 2013 10:29:43 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 10:29:43 am) Pharo-30087.image priorSource: 2866631! ----STARTUP----an Array(3 May 2013 11:46:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 11:43' prior: 36389712! commentForCurrentUpdate ^ '10063 listLoadedModules should be on the VirtualMachine class https://pharo.fogbugz.com/f/cases/10063 10234 Deadly Morphic Loop when CMD clicking on TestRunner https://pharo.fogbugz.com/f/cases/10234 10485 testScrolling dependent on display size https://pharo.fogbugz.com/f/cases/10485/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 11:43'! script185 ^ 'AST-Core-MarcusDenker.142.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.27.mcz AST-Tests-Core-MarcusDenker.25.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-StephaneDucasse.153.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1413.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.6.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1408.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.34.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.38.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.103.mcz Spec-Debugger-MarcusDenker.37.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.100.mcz Spec-Widgets-MarcusDenker.134.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 11:43'! update30088 "self new update30088" self withUpdateLog: '10063 listLoadedModules should be on the VirtualMachine class https://pharo.fogbugz.com/f/cases/10063 10234 Deadly Morphic Loop when CMD clicking on TestRunner https://pharo.fogbugz.com/f/cases/10234 10485 testScrolling dependent on display size https://pharo.fogbugz.com/f/cases/10485/ '. self loadTogether: self script185 merge: false. self flushCaches. ! ! "ScriptLoader30"! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:06'! disableModuleLoading "Primitive. Disable a new module loading mechanism for the rest of current session. This operation is not reversable. Any subsequent attempts to load either external or internal module(s) will fail" ! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:06'! forgetModule: aString "Primitive. If the module named aString is loaded, unloaded. If not, and it is marked an unloadable, unmark it so the VM will try to load it again next time. See comment for #unloadModule:." ^self primitiveFailed! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:07'! listBuiltinModule: index "Return the name of the n-th builtin module. This list is not sorted!!" ^self primitiveFailed! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:05'! listBuiltinModules "SmalltalkImage current listBuiltinModules" "Return a list of all builtin modules (e.g., plugins). Builtin plugins are those that are compiled with the VM directly, as opposed to plugins residing in an external shared library. The list will include all builtin plugins regardless of whether they are currently loaded or not. Note that the list returned is not sorted!!" | modules index tname | modules := Array new writeStream. index := 1. [true] whileTrue:[ tname := self listBuiltinModule: index. tname ifNil:[^modules contents]. modules nextPut: tname. index := index + 1. ].! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 10:46'! listLoadedModule: index "Return the name of the n-th loaded module. This list is not sorted!!" ^self primitiveFailed! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 10:45'! listLoadedModules "SmalltalkImage current listLoadedModules" "Return a list of all currently loaded modules (e.g., plugins). Loaded modules are those that currently in use (e.g., active). The list returned will contain all currently active modules regardless of whether they're builtin (that is compiled with the VM) or external (e.g., residing in some external shared library). Note that the returned list is not sorted!!" | modules index tname | modules := Array new writeStream. index := 1. [true] whileTrue:[ tname := self listLoadedModule: index. tname ifNil:[^modules contents]. modules nextPut: tname. index := index + 1. ].! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:04'! loadModule: aModuleName "Primitive. Attempt to load a module of the given name. Fail if module cannot be found, or cannot be loaded, or failed to initialize" ^ self primitiveFailed! ! !VirtualMachine class methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:05'! unloadModule: aString "Primitive. Unload the given module. This primitive is intended for development only since some platform do not implement unloading of DLL's accordingly. Also, the mechanism for unloading may not be supported on all platforms." ^self primitiveFailed! ! !PluggableListMorph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/3/2013 10:53' prior: 29438494! mouseDown: evt "Changed to only take focus if wanted." | selectors row | row := self rowAtLocation: evt position. evt yellowButtonPressed ifTrue: [ self isMultipleSelection ifTrue: [ evt commandKeyPressed ifFalse: [ "right click" (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ super mouseDown: evt ] ] ] ifFalse: [ (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ super mouseDown: evt ] ] ]. "First check for option (menu) click" self enabled ifFalse: [ ^ super mouseDown: evt ]. self wantsKeyboardFocus ifTrue: [ self takeKeyboardFocus ]. row := self rowAtLocation: evt position. row = 0 ifTrue: [ ^ super mouseDown: evt ]. self mouseDownRow: row. self isMultipleSelection ifTrue: [ self mouseDownOnMultiple: evt forRow: row ]. selectors := Array with: #click: with: (doubleClickSelector ifNotNil: [ #doubleClick: ]) with: nil with: (self dragEnabled ifTrue: [ #startDrag: ] ifFalse: [ nil ]). evt hand waitForClicksOrDrag: self event: evt selectors: selectors threshold: 10. "pixels" super mouseDown: evt! ! !SystemReporter methodsFor: 'reporting' stamp: 'MarcusDenker 5/3/2013 11:40' prior: 51658934! reportModules: aStream self header: 'Loaded VM Modules' on: aStream. Smalltalk vm listLoadedModules asSortedCollection do: [:each | aStream nextPutAll: each; cr]. aStream cr. self header: 'VM Built-in Modules' on: aStream. Smalltalk vm listBuiltinModules asSortedCollection do: [:each | aStream nextPutAll: each; cr]. ! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:10' prior: 33538511! disableModuleLoading self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine disableModuleLoading. "" ! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:08' prior: 33538837! forgetModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine forgetModule: aString. " ^self primitiveFailed"! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:10' prior: 33539135! listBuiltinModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine listBuiltinModule: index. " ^self primitiveFailed"! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:11' prior: 33539318! listBuiltinModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine listBuiltinModules. "| modules index name | modules := Array new writeStream. index := 1. [true] whileTrue:[ name := self listBuiltinModule: index. name ifNil:[^modules contents]. modules nextPut: name. index := index + 1. ]."! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 10:57' prior: 33539975! listLoadedModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine listLoadedModule: index. " ^self primitiveFailed" ! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 10:54' prior: 33540156! listLoadedModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine listLoadedModules. "| modules index name | modules := Array new writeStream. index := 1. [true] whileTrue:[ name := self listLoadedModule: index. name ifNil:[^modules contents]. modules nextPut: name. index := index + 1. ]."! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:12' prior: 33540880! loadModule: aModuleName self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine loadModule: aModuleName. " ^ self primitiveFailed"! ! !SmalltalkImage methodsFor: 'modules' stamp: 'SebastianTleye 5/3/2013 11:13' prior: 33541170! unloadModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^VirtualMachine unloadModule: aString. " ^self primitiveFailed"! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/3/2013 10:58' prior: 26677625! mouseDown: evt "Handle a mouse down event. The default response is to let my eventHandler, if any, handle it." self eventHandler ifNotNil: [self eventHandler mouseDown: evt fromMorph: self] ! ! !WindowAnnouncementTest methodsFor: 'window change' stamp: 'GuillermoPolito 5/3/2013 11:20' prior: 54909313! testScrolling "This test tests the scrolling values of a scrollpane. We create a reeeeeally big (enormous) morph, to be sure its size is bigger than the screen and therefore its enclosing window has scrollbars. When screen sizes become bigger, you should increase the value, or fix morphic, what happens first :). " | myMorph pane t | window := SystemWindow labelled: 'foo'. myMorph := Morph new. myMorph extent: 10000000000@1000000000. pane := ScrollPane new. pane scroller addMorph: myMorph. window addMorph: pane fullFrame: LayoutFrame identity. t := 0 @ 0. window openInWorld. window announcer on: WindowScrolling do: [:ann | t := t + ann step ]. pane hScrollBarValue: 10. pane vScrollBarValue: 5. window delete. self assert: (t = (10 @ 5)). window := nil! ! "Morphic"! "MorphicTests"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(3 May 2013 11:46:13 am) Pharo.image priorSource: 2866827! ----STARTUP----an Array(3 May 2013 11:52:50 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 11:52:50 am) Pharo-30088.image priorSource: 2886506! ----STARTUP----an Array(3 May 2013 12:09:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 12:05' prior: 36421555! commentForCurrentUpdate ^ '10133 Remove RBSmallDictionary https://pharo.fogbugz.com/f/cases/10133 7325 KMShortcut>>#fromKeyboardEvent: is ignoring alt https://pharo.fogbugz.com/f/cases/7325 10455 EyeInspector improvements https://pharo.fogbugz.com/f/cases/10455 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 12:05'! script186 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1413.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.8.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.37.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.228.mcz OpalCompiler-Tests-MarcusDenker.127.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.106.mcz Spec-Debugger-MarcusDenker.44.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.6.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.102.mcz Spec-Widgets-MarcusDenker.137.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 12:05'! update30089 "self new update30089" self withUpdateLog: '10133 Remove RBSmallDictionary https://pharo.fogbugz.com/f/cases/10133 7325 KMShortcut>>#fromKeyboardEvent: is ignoring alt https://pharo.fogbugz.com/f/cases/7325 10455 EyeInspector improvements https://pharo.fogbugz.com/f/cases/10455 '. self loadTogether: self script186 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewListModel commentStamp: '' prior: 36239521! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !AbstractEyeElement commentStamp: '' prior: 0! I represent an abstract inspection element. In an EyeInspector, a eye element corresponds to a wrapper around a field element. Public API : label: display on left list panel of the eye inspector description: printed on the right panel of the eye inspector host: object inspected in the eye inspector value: object represented by this eye element ! !BasicIndexedEyeElement commentStamp: '' prior: 0! I am an eye element for indexable fields. (basicAt:)! !IndexedEyeElement commentStamp: '' prior: 0! I am an eye element for indexable fields. (at:)! !SetEyeElement commentStamp: '' prior: 0! I am an eye element for sets, showing appropriate thing with indexes ! !ContextTempEyeElement commentStamp: '' prior: 0! I am an eye element for temporaries in context! !DynamicEyeElement commentStamp: '' prior: 0! I am a dynamic eye element, if you are too lazy to create your own subclass of AbstractEyeElement, use it...! !InstanceVariableEyeElement commentStamp: '' prior: 0! I am an eye element for instance variables.! !SelfEyeElement commentStamp: '' prior: 0! I am an eye element for self! !AllInstVarsEyeElement commentStamp: '' prior: 0! I am an eye element for all inst vars, printing a description of all the instance vriables (usually second field in the inspector)! !EyeInspector commentStamp: '' prior: 36009274! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeCollectionInspector commentStamp: '' prior: 0! Specialized version of inspector showing the size of the inspected collection in title.! !EyeByteArrayInspector commentStamp: '' prior: 0! Specialized version of inspector showing the hex and string representation of the byte array ! !EyeDictionaryInspector commentStamp: '' prior: 0! Specialized version of inspector showing keys on left panel and values on description panel! !EyeSetInspector commentStamp: '' prior: 0! Specialized version of inspector showing values only! !EyeCompiledMethodInspector commentStamp: '' prior: 0! Specialized version of inspector showing bytecodes symbolic representation, ast, ir, literals.! !EyeContextInspector commentStamp: '' prior: 0! I am an eye inspector specified for MethodContext! !EyeIntegerInspector commentStamp: '' prior: 0! Specialized version of inspector showing hex, octal and binary representations! !InspectorWrapper commentStamp: '' prior: 0! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !SpecDebugger commentStamp: '' prior: 36024231! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:28'! altKeyPressed "Answer true if the alt/option key on the keyboard was being held down when this event occurred." "00100000 is the bit that marks that option/alt has been pressed" ^self optionKeyPressed! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:31' prior: 54594391! anyModifierKeyPressed "ignore, however, the shift keys 'cause that's not REALLY a command key " ^ self buttons anyMask: 2r01110000 "cmd | opt | ctrl"! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:32' prior: 54594617! commandKeyPressed "Answer true if the command key on the keyboard was being held down when this event occurred." "The mask for command bit pressed" ^ buttons anyMask: 2r01000000! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:32' prior: 54594833! controlKeyPressed "Answer true if the control key on the keyboard was being held down when this event occurred." "The mask for control bit pressed" ^ buttons anyMask: 2r00010000! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:28'! optionKeyPressed "Answer true if the alt/option key on the keyboard was being held down when this event occurred." "00100000 is the bit that marks that option/alt has been pressed" ^ buttons anyMask: 2r00100000! ! !RBParseTreeRewriter methodsFor: 'accessing' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 30896517! executeTree: aParseTree | oldContext | oldContext := context. context := SmallDictionary new. answer := false. tree := self visitNode: aParseTree. context := oldContext. ^answer! ! !NewListModel commentStamp: '' prior: 36451732! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !NewListModel class methodsFor: 'specs' stamp: 'ClementBera 5/3/2013 11:33' prior: 36239741! defaultSpec ^ { #NewList. #model:. #model. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #deSelectOnReclick:. #(model deSelectOnReclick). #isMultipleSelection:. #(model isMultipleSelection). #unselectOnChange:. #(model unselectOnChange). #whenSelectedIndexChangedDo:. #(model indexHasBeenSelected). #whenSelectedIndexesChangedDo:. #(model indexesHasBeenSelected). #whenSelectedItemChangedDo:. #(model itemHasBeenSelected). #whenSelectedItemsChangedDo:. #(model itemsHasBeenSelected). #whenHeaderIsClickedDo:. #(model headerClickedBlock). #endOfInitialization. #setIndex:. #(model selectedIndex). #hasHeader:. #(model hasHeader).}! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:04'! doubleClickAction "Return the block evaluated on double click" ^ doubleClick contents! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:04'! doubleClickAction: aBlock "Set the block evaluated on double click." doubleClick contents: aBlock! ! !NewListModel methodsFor: 'list protocol' stamp: 'ClementBera 5/3/2013 10:48' prior: 36244279! getMenu: shiftKeyState | menu | menuHolder contents ifNil: [ ^ nil ]. menu := UIManager default newMenuIn: self for: self. menuHolder contents cull: menu cull: shiftKeyState. menuTitle contents ifNotNil: [ :title | menu addTitle: title ]. ^ menu ! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:03'! handlesDoubleClick: aBoolean "Enable or disable double click on the list." handlesDoubleClick contents: aBoolean! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'ClementBera 5/3/2013 11:33' prior: 36247756! itemHasBeenSelected ^ [ :item | selectedItem contents: item ]! ! !NewListModel methodsFor: 'protocol-events' stamp: 'CamilloBruni 5/2/2013 21:56'! whenDoubleClickActionChanged: aBlock "Set a block to value when the doubleClick value has changed" doubleClick whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'CamilloBruni 5/2/2013 22:03'! whenHandlesDoubleClickChanged: aBlock "Set a block to value when the handlesDoubleClick value has changed" handlesDoubleClick whenChangedDo: aBlock! ! !RBProgramNode methodsFor: 'properties' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 31028362! propertyAt: aKey put: anObject "Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject." ^ (properties ifNil: [ properties := SmallDictionary new: 1 ]) at: aKey put: anObject! ! !ByteArray class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 5/2/2013 10:57'! eyeClass ^ EyeByteArrayInspector! ! !NewList methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 11:34' prior: 36214136! endOfInitialization isInitialized contents: true. self updateItems. self updateDisplayListCache. self updateListSize. self updateHeaderTitle. self updateHeaderHeight. self updateAllowToSelect. self updateRenderer. selectedItem contents: self retrieveSelectedItem. selectedItems contents: self retrieveSelectedItems. listCache whenChangedDo: [:e | listSize contents: e size. self updateDisplayListCache. self unselectOnChange ifTrue: [ self deselectAll ]. self updateScrollbars ]. listSize whenChangedDo: [:e | self updateRenderer ]. headerTitle whenChangedDo:[:e | self updateHeaderHeight ]. secondSelection whenChangedDo: [:idx | self setViewToIndex: idx. self renderer updateRectFor: idx ]. selectedIndex whenChangedDo: [:newIndex :oldIndex | selectedItem contents: self retrieveSelectedItem. self renderer updateRectFor: oldIndex. ]. selectedIndexes whenChangedDo: [:newIndex :oldIndex | selectedItems contents: self retrieveSelectedItems ]. headerTitle whenChangedDo: [:t | self renderer invalidHeader ].! ! !NewList methodsFor: 'communication with model' stamp: 'ClementBera 5/3/2013 10:54' prior: 28375926! keyStrokeAction: anEvent ^ self keyStrokeAction: anEvent! ! !RBRefactoryDefinitionChange class methodsFor: 'instance creation' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 31179286! definition: aString for: aController | parseTree context | parseTree := RBParser parseExpression: aString onError: [ :err :pos | ^ self error: 'Invalid definition string' ]. context := SmallDictionary new. RBRefactoryDefinitionChange allSubclassesDo: [ :class | class definitionPatterns do: [ :pattern | ((RBParser parseRewriteExpression: pattern) match: parseTree inContext: context empty) ifTrue: [ ^ class definition: aString for: aController context: context ] ] ]. ^ self error: 'Invalid definition string'! ! !RBRefactoryDefinitionChange class methodsFor: 'private' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 31179910! definition: aString for: aController context: aDictionary | dictionary | dictionary := SmallDictionary new. aDictionary keysAndValuesDo: [ :key :node | dictionary at: key formattedCode put: (node isVariable ifTrue: [ node name ] ifFalse: [ node isLiteral ifTrue: [ node value ] ifFalse: [ node ] ]) ]. ^ self new definition: aString controller: aController; fillOutDefinition: dictionary; yourself! ! !SmallDictionary methodsFor: 'accessing' stamp: 'CamilleTeruel 4/3/2013 19:06' prior: 33389267! empty 1 to: size do: [ :index | keys at: index put: nil. values at: index put: nil ]. size := 0 ! ! !LabelSpec methodsFor: 'private' stamp: 'CamilloBruni 5/2/2013 00:02'! defaultColor ^ #(Color class black)! ! !RBParseTreeSearcher methodsFor: 'accessing' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 30911355! executeTree: aParseTree "Save our current context, in case someone is performing another search inside a match." | oldContext | oldContext := context. context := SmallDictionary new. self visitNode: aParseTree. context := oldContext. ^answer! ! !RBParseTreeSearcher methodsFor: 'initialize-release' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 30912392! initialize super initialize. context := SmallDictionary new. searches := OrderedCollection new. argumentSearches := OrderedCollection new: 0. answer := nil! ! !RBParseTreeSearcher methodsFor: 'private' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 30915474! recusivelySearchInContext "We need to save the matched context since the other searches might overwrite it." | oldContext | oldContext := context. context := SmallDictionary new. self lookForMoreMatchesInContext: oldContext. context := oldContext! ! !AbstractSpec methodsFor: 'private' stamp: 'CamilloBruni 5/2/2013 00:02' prior: 35623899! defaultColor ^ #(Color class white)! ! !RBLexicalScope methodsFor: 'initialization' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 30709560! initialize bindings := SmallDictionary new! ! !MethodContext class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 14:39'! eyeClass ^ EyeContextInspector! ! !CompiledMethod class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 16:42'! eyeClass ^ EyeCompiledMethodInspector! ! !Integer class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 5/2/2013 10:50'! eyeClass ^ EyeIntegerInspector! ! !AbstractEyeElement commentStamp: '' prior: 36451929! I represent an abstract inspection element. In an EyeInspector, a eye element corresponds to a wrapper around a field element. Public API : label: display on left list panel of the eye inspector description: printed on the right panel of the eye inspector host: object inspected in the eye inspector value: object represented by this eye element ! !AbstractEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 4/30/2013 11:20'! host: anObject ^ self new host: anObject; yourself! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:21'! accessorCode "Answers a code string to access the value from the inspector" self subclassResponsibility! ! !AbstractEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 14:51'! basicInspectValue "Bring up a non-special inspector" ^ EyeInspector basicInspect: self value! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'ClementBera 4/30/2013 13:08'! browseSubMenu: aMenu aMenu add: 'Browse full (b)' translated target: self selector: #browseValue; add: 'Browse class' translated target: self selector: #browseValueClass; add: 'Browse hierarchy (h)' translated target: self selector: #browseValueClassHierarchy. aMenu addLine. ! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 4/30/2013 10:43'! browseValue ^ self value browse! ! !AbstractEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 13:07'! browseValueClass "Open an class browser on the selectObject (class side)" ^ Smalltalk tools browser newOnClass: self valueClass! ! !AbstractEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 13:08'! browseValueClassHierarchy "Create and schedule a class list browser on the receiver's hierarchy." ^ self systemNavigation browseHierarchy: self valueClass! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 4/30/2013 10:20'! copyAccessorCode "Copy the name of the current variable, so the user can paste it into the window below and work with is." Clipboard clipboardText: self accessorCode asText! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 4/30/2013 10:58'! customSubMenu: aMenu "Subclasse may add more menu items here"! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:48'! description ^ self value printStringLimitedTo: 2000! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'ClementBera 4/30/2013 13:06'! endSubMenu: aMenu aMenu add: 'Copy name (c)' translated target: self selector: #copyAccessorCode; add: 'Basic inspect' translated target: self selector: #basicInspectValue! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 4/30/2013 10:35'! explorePointers ^ Smalltalk tools strongPointerExplorer openOn: self value! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 4/30/2013 11:05'! exploreSubMenu: aMenu aMenu add: 'Explore pointers' target: self selector: #explorePointers; addLine! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 4/30/2013 10:16'! exploreValue ^ self value explore! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:52'! host "Answers the object currently inspected by the outer inspector. See #value for the object represented by this EyeElement." ^ host! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:51'! host: anObject host := anObject! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:58'! hostClass ^ host class! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 4/30/2013 11:05'! inspectionMenu: aMenu "specific menu for the current element" self exploreSubMenu: aMenu; browseSubMenu: aMenu; customSubMenu: aMenu; endSubMenu: aMenu.! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:45'! label "Answers the label associated with this EyeElement" self subclassResponsibility! ! !AbstractEyeElement methodsFor: 'printing' stamp: 'CamilloBruni 4/30/2013 10:46'! printOn: aStream aStream print: self label; << '->'; << (self value printStringLimitedTo: 50)! ! !AbstractEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:37'! save: aValue "Subclasse may override this"! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:44'! value "Answers the object associated with this EyeElement." self subclassResponsibility! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:32'! valueClass ^ self value class! ! !BasicIndexedEyeElement commentStamp: '' prior: 36452342! I am an eye element for indexable fields. (basicAt:)! !BasicIndexedEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 4/30/2013 12:55'! host: anObject index: index ^ (self host: anObject) index: index! ! !BasicIndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 13:04'! accessorCode ^ '(self basicAt: ', self index asString, ')'! ! !BasicIndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 12:56'! index ^ index! ! !BasicIndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 12:56'! index: anObject index := anObject! ! !BasicIndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:09'! label ^ self index printString! ! !BasicIndexedEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 15:33'! save: aValue self host basicAt: self index put: aValue! ! !BasicIndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 12:59'! value ^ self host basicAt: self index! ! !IndexedEyeElement commentStamp: '' prior: 36452454! I am an eye element for indexable fields. (at:)! !IndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 15:53'! accessorCode ^ '(self at: ', self index asString, ')'! ! !IndexedEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 15:53'! save: aValue self host at: self index put: aValue! ! !IndexedEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 15:54'! value ^ self host at: self index! ! !SetEyeElement commentStamp: '' prior: 36452557! I am an eye element for sets, showing appropriate thing with indexes ! !SetEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 4/30/2013 16:37'! host: anObject index: index externalIndex: externalIndex ^ (self host: anObject) index: index; externalIndex: externalIndex; yourself! ! !SetEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:21'! accessorCode ^ '(self array at: ', self index asString, ')'! ! !SetEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:38'! externalIndex ^ externalIndex! ! !SetEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:38'! externalIndex: anObject externalIndex := anObject! ! !SetEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:38'! label ^ self externalIndex printString! ! !SetEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 16:35'! save: aValue | oldElement | oldElement := self host array at: self index. self host remove: oldElement; add: aValue.! ! !SetEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:20'! value ^ self host array at: self index! ! !ContextTempEyeElement commentStamp: '' prior: 36452690! I am an eye element for temporaries in context! !ContextTempEyeElement class methodsFor: 'as yet unclassified' stamp: 'ClementBera 4/30/2013 14:35'! host: anObject tempName: aString ^ (self host: anObject) tempName: aString! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 15:02'! accessorCode ^ '(self tempNamed: ', self tempName printString, ')'! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:36'! label ^ self tempName! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:38'! save: aValue self host tempNamed: self tempName put: aValue! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:36'! tempName ^ tempName! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:36'! tempName: anObject tempName := anObject! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:38'! value ^ self host tempNamed: self tempName! ! !DynamicEyeElement commentStamp: '' prior: 36452796! I am a dynamic eye element, if you are too lazy to create your own subclass of AbstractEyeElement, use it...! !DynamicEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 5/2/2013 10:32'! host: anObject label: aLabel description: aBlock value: aValue ^ (self host: anObject label: aLabel value: aValue) description: aBlock; yourself! ! !DynamicEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 4/30/2013 16:55'! host: anObject label: aLabel value: aValue ^ (self host: anObject) label: aLabel; value: aValue; yourself! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:38'! accessorCode ^ self description! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:51'! description "For big value to print, overwrite description block" descriptionBlock ifNil: [ ^ self value asString ]. ^ descriptionBlock cull: self value! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:28'! description: aBlock descriptionBlock := aBlock! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:27'! label ^ labelBlock value! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:27'! label: anObject labelBlock := anObject! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:26'! save ^ saveBlock! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:27'! value ^ valueBlock value! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 10:27'! value: anObject valueBlock := anObject! ! !InstanceVariableEyeElement commentStamp: '' prior: 36452973! I am an eye element for instance variables.! !InstanceVariableEyeElement class methodsFor: 'instance creation' stamp: 'ClementBera 4/30/2013 11:40'! host: anObject instVarName: aString ^ (self host: anObject) instVarName: aString! ! !InstanceVariableEyeElement methodsFor: 'menu' stamp: 'ClementBera 4/30/2013 13:05'! accessorCode ^ self instVarName! ! !InstanceVariableEyeElement methodsFor: 'menu' stamp: 'ClementBera 4/30/2013 11:46'! customSubMenu: aMenu aMenu add: 'Method refs to this inst var' target: self selector: #referencesToInstanceVariable; add: 'Methods storing into this inst var' target: self selector: #storingsIntoInstanceVariable. aMenu addLine. ! ! !InstanceVariableEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:41'! instVarName ^ instVarName! ! !InstanceVariableEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:41'! instVarName: aString instVarName := aString! ! !InstanceVariableEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:41'! label ^ self instVarName! ! !InstanceVariableEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:45'! referencesToInstanceVariable "Open a browser on all references to the selected instance variable, if that's what currently selected." ^ self systemNavigation browseAllAccessesTo: self instVarName from: self hostClass! ! !InstanceVariableEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:43'! save: aValue self host instVarNamed: self instVarName put: aValue! ! !InstanceVariableEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:46'! storingsIntoInstanceVariable ^ self systemNavigation browseAllStoresInto: self instVarName from: self hostClass! ! !InstanceVariableEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:43'! value ^ self host instVarNamed: self instVarName! ! !SelfEyeElement commentStamp: '' prior: 36453073! I am an eye element for self! !AllInstVarsEyeElement commentStamp: '' prior: 36453165! I am an eye element for all inst vars, printing a description of all the instance vriables (usually second field in the inspector)! !AllInstVarsEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:25'! accessorCode ^ super label! ! !AllInstVarsEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:36'! description ^ self host longPrintStringLimitedTo: 2000! ! !AllInstVarsEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:36'! label ^ 'all inst vars'! ! !SelfEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:55'! accessorCode ^ self label! ! !SelfEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:30'! browseClassRefs self hostClass isTrait ifTrue: [self systemNavigation browseAllUsersOfTrait: self hostClass] ifFalse: [self systemNavigation browseAllCallsOnClass: self hostClass]! ! !SelfEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:30'! browseInstClassVariable ^ self systemNavigation browseClassVariables: self hostClass! ! !SelfEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:29'! browseInstVarDefs ^ self systemNavigation browseInstVarDefs: self hostClass! ! !SelfEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:28'! browseInstVarRefs ^ self systemNavigation browseInstVarRefs: self hostClass! ! !SelfEyeElement methodsFor: 'action' stamp: 'ClementBera 4/30/2013 11:29'! classVarRefs ^ self systemNavigation browseClassVarRefs: self hostClass! ! !SelfEyeElement methodsFor: 'menu' stamp: 'ClementBera 4/30/2013 13:16'! customSubMenu: aMenu "Subclasse may add more menu items here" aMenu add: 'Inst var refs...' target: self selector: #browseInstVarRefs; add: 'Inst var defs...' target: self selector: #browseInstVarDefs; add: 'Class var refs...' target: self selector: #classVarRefs; add: 'Class variables' target: self selector: #browseInstClassVariables; add: 'Class refs' target: self selector: #browseClassRefs. aMenu addLine. ! ! !SelfEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 4/30/2013 10:52'! label ^ 'self'! ! !SelfEyeElement methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 11:21'! value ^ host! ! !Object class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 14:42'! eyeClass ^EyeInspector! ! !Object methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 14:43' prior: 35997082! eyeClass ^ self class eyeClass! ! !Object methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 5/2/2013 21:39'! eyeInspector ^ EyeInspector inspector: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 5/2/2013 21:30' prior: 35997184! ogle "Eyeinspector should be put one day in Smalltalk tools" ^ EyeInspector inspect: self! ! !Set class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 16:22'! eyeClass ^ EyeSetInspector! ! !Collection class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 4/30/2013 14:59'! eyeClass ^ EyeCollectionInspector! ! !ComposableModel class methodsFor: 'protocol' stamp: 'CamilloBruni 5/1/2013 23:34' prior: 19994253! specSelectors ^ self class withAllSuperclasses gather: [ :class | (((SpecPragmaCollector behavior: class) filter: [ :pragma | pragma keyword = #spec]) reset; collected) collect: [ :pragmas | pragmas method selector ]]! ! !ComposableModel methodsFor: 'private' stamp: 'CamilloBruni 5/1/2013 23:30' prior: 19989377! defaultSpecSelector self class class withAllSuperclassesDo: [ :class | (((SpecPragmaCollector behavior: class) filter: [ :pragma | pragma keyword = 'spec:' and: [ pragma arguments includes: #default ]]) reset; collected) ifNotEmpty: [ :pragmas | ^ pragmas first method selector ]]. self specSelectors ifNotEmpty: [:col | col size = 1 ifTrue: [ ^ col first ]]. "should use pragmas" ^ #defaultSpec ! ! !ComposableModel methodsFor: 'private' stamp: 'CamilloBruni 5/2/2013 00:44' prior: 19990547! private_buildWithSpec: aSpec "Build the widget using the spec name provided as argument" | widget | widget := SpecInterpreter private_buildWidgetFor: self withSpec: aSpec. self ensureExtentFor: widget. self ensureKeyBindingsFor: widget. self announce: (WidgetBuilt model: self widget: widget). ^ widget! ! !EyeInspector commentStamp: '' prior: 36453357! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeCollectionInspector commentStamp: '' prior: 36453668! Specialized version of inspector showing the size of the inspected collection in title.! !EyeByteArrayInspector commentStamp: '' prior: 36453819! Specialized version of inspector showing the hex and string representation of the byte array ! !EyeByteArrayInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 11:02'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex' value: [ String streamContents: [ :s | s nextPutAll: '['. self object do: [ :each | s << (each printPaddedWith: $0 to: 2 base: 16) ] separatedBy: [ s nextPut: $ ]. s nextPut: $] ] ] ). elements add: (DynamicEyeElement host: self object label: 'string' value: [ self object ] ). ! ! !EyeCollectionInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 16:03'! addVariableFields: elements "add the variable fields to the inspector. Shorten the list for very long collection (cf limit1 and limit2), set them so that you can modify and save them" self variableFieldsToShow do: [ :index | elements add: (IndexedEyeElement host: self object index: index) ]! ! !EyeCollectionInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:14'! objectVariableSize ^ self object size! ! !EyeCollectionInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:58'! title ^ super title, ' [', self object size asString, ']'! ! !EyeDictionaryInspector commentStamp: '' prior: 36453977! Specialized version of inspector showing keys on left panel and values on description panel! !EyeDictionaryInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 11:17'! addInstancesVariable: elements "Do nothing"! ! !EyeDictionaryInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 16:07'! addVariableFields: elements self object keys sorted do: [ :key | elements add: (IndexedEyeElement host: self object index: key)]! ! !EyeSetInspector commentStamp: '' prior: 36454126! Specialized version of inspector showing values only! !EyeSetInspector methodsFor: 'list' stamp: 'Anonymous 5/2/2013 10:21'! addInstancesVariable: elements "Do nothing"! ! !EyeSetInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 16:37'! addVariableFields: elements "add the variable fields to the inspector. Shorten the list for very long collection (cf limit1 and limit2), set them so that you can modify and save them" | externalIndex | externalIndex := 1. self object array withIndexDo: [ :value :index | value ifNotNil: [ elements add: (SetEyeElement host: self object index: index externalIndex: externalIndex). externalIndex := externalIndex + 1 ]]! ! !EyeCompiledMethodInspector commentStamp: '' prior: 36454247! Specialized version of inspector showing bytecodes symbolic representation, ast, ir, literals.! !EyeCompiledMethodInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:22'! addAllInstVars: elements "Useless for compiledMethod"! ! !EyeCompiledMethodInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:23'! addInstancesVariable: elements "Do nothing"! ! !EyeCompiledMethodInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:51'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'ast' value: [ self object ast ]). elements add: (DynamicEyeElement host: self object label: 'ir' description: [ :value | | string | string := value longPrintString. string copyFrom: 2 to: string size ] value: [ self object ir ]). elements add: (DynamicEyeElement host: self object label: 'all bytecodes' value: [ self object symbolic ]). elements add: (DynamicEyeElement host: self object label: 'header' value: [ self object headerDescription ]). self object literals withIndexDo: [ :literal :index| elements add: (DynamicEyeElement host: self object label: 'literal ', index asString value: literal) ]. ! ! !EyeCompiledMethodInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:52'! addVariableFields: elements self flag: 'this needs some cleaning'. self object initialPC to: self object size do: [ :index | elements add: (DynamicEyeElement host: self object label: 'bc ', index asString value: (self object at: index) asString)].! ! !EyeContextInspector commentStamp: '' prior: 36454403! I am an eye inspector specified for MethodContext! !EyeContextInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 14:44'! addVariableFields: elements self object tempNames do: [ :name | elements add: (ContextTempEyeElement host: self object tempName: name) ]! ! !EyeContextInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:25'! doItContext ^ self object! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 4/30/2013 14:51'! basicInspect: anObject ^ self new inspect: anObject; openWithSpec: #inspectorSpecOptimized; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 3/20/2013 17:45' prior: 36009599! debuggerSpec ^ SpecLayout composed newRow: [:row | row add: #list width: 135; add: #description ]; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 4/30/2013 13:17'! debuggerSpecOptimized ^ SpecLayout composed add: #list origin: 0@0 corner: 0.33@1; add: #description origin: 0.33@0 corner: 1@1; yourself! ! !EyeInspector class methodsFor: 'settings' stamp: 'ClementBera 4/30/2013 13:34'! defaultBrowserSettingOn: aBuilder (aBuilder group: #debugging) with: [ (aBuilder setting: #useAutoRefresh) target: self; label: 'Auto Refresh Inspectors' translated; description: 'If true, refreshes inspectors in regular intervals' translated ]! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 5/2/2013 11:42' prior: 36010057! inspect: anObject ^ InspectorWrapper openInspector: (self inspector: anObject)! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 4/30/2013 14:47'! inspector: anObject ^ anObject eyeClass new inspect: anObject; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 3/18/2013 13:46' prior: 36010263! inspectorSpec ^ SpecLayout composed newColumn: [:c | c newRow: [:row | row add: #list width: 135; add: #description ]; newRow: [:row2 | row2 add: #text ] height: 75 ]; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 4/30/2013 13:17'! inspectorSpecOptimized ^ SpecLayout composed add: #list origin: 0@0 corner: 0.4@0.70; add: #description origin: 0.4@0 corner: 1@0.70; add: #text origin: 0@0.70 corner: 1@1; yourself! ! !EyeInspector class methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 13:33'! useAutoRefresh ^ useAutoRefresh ifNil: [ true ]! ! !EyeInspector class methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 13:33'! useAutoRefresh: anObject useAutoRefresh := anObject! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 11:35' prior: 36010829! addAllInstVars: elements "Add AllInstVars to the list of elements you can access in the inspector" elements add: (AllInstVarsEyeElement host: self object).! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 11:42' prior: 36011157! addInstancesVariable: elements "Add all the instance variables to the list of elements you can access in the inspector, set them so that you can modify and save them" self object class allInstVarNames do: [:name | elements add: (InstanceVariableEyeElement host: self object instVarName: name) ]! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 11:21' prior: 36011638! addSelf: elements "Add self to the list of elements you can access in the inspector" elements add: (SelfEyeElement host: self object).! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 14:23' prior: 36011870! addSpecialFields: elements "Override in subclass to add fields to the inspector. You need to choose the appropriate sublcass of AbstractEyeElement" "ex : elements add: (AbstractEyeElement host: self object)"! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 16:02' prior: 36012384! addVariableFields: elements "add the variable fields to the inspector. Shorten the list for very long collection (cf limit1 and limit2), set them so that you can modify and save them" self variableFieldsToShow do: [ :index | elements add: (BasicIndexedEyeElement host: self object index: index) ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 5/3/2013 11:45' prior: 36012891! close "Kill the process that refreshes the inspector" refreshLoop ifNotNil: [ refreshLoop terminate ]. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 10:50'! customMenuActions ^ customMenuActions ifNil: [ customMenuActions := [ ] ]! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 10:49'! customMenuActions: anObject customMenuActions := anObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36013056! description ^ description! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36013162! description: anObject description := anObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:25'! doItContext "Define a context where the DoIt method of the inspector should be done. To be overrriden in subclasses" ^ nil! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/20/2013 09:50' prior: 36013702! explore: anObject "This is called to open a new ObjectExplorer on the object" Smalltalk tools objectExplorer openOn: anObject! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:22' prior: 36013906! generateElements "generate the collection of elements to show in the inspector for the object inspected" |elements| elements := OrderedCollection new. self addSelf: elements. self addAllInstVars: elements. self addSpecialFields: elements. self addInstancesVariable: elements. self addVariableFields: elements. ^elements! ! !EyeInspector methodsFor: 'protocol' stamp: 'ClementBera 5/2/2013 10:46' prior: 36014318! initialExtent "Answer the desired extent for the receiver when it is first opened on the screen. " ^ 525 @ 450! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/2/2013 21:18' prior: 36014521! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged: The mementos instances variables are used for diving" object := nil asValueHolder. super initialize.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 5/3/2013 11:50'! initializeAutoRefresh refreshLoop := self useAutoRefresh ifTrue: [ [ self refresh ] valueWithInterval: self updateTime ]! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 5/3/2013 11:48' prior: 36015074! initializePresenter "initialize the event handlings" object whenChangedDo: [ self objectChanged ]. list whenSelectedItemChanged: [ :item | self printDescription: item ]. description whenTextIsAccepted: [ :newText | self saveElement: newText. self printDescription ]. self initializeShortcuts. self initializeAutoRefresh.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/2/2013 21:25'! initializeShortcuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | list on: key do: value ] ! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 5/3/2013 11:06' prior: 36015715! initializeWidgets self instantiateModels: #( list NewListModel text TextModel description TextModel ). text aboutToStyle: true. ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 5/3/2013 11:34' prior: 36015950! inspect: anObject "This is called to update the inspector model with a new object, updates the UI" self object: anObject. list setSelectedIndex: 1. self refresh ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'ClementBera 3/20/2013 09:48' prior: 36016158! inspectInNewWindow: anObject "This is called to open a new inspector on the object" self class inspect: anObject! ! !EyeInspector methodsFor: 'menu' stamp: 'CamilloBruni 5/2/2013 21:32' prior: 36016349! inspectionMenu: aMenu self selectedElement ifNil: [ ^ aMenu ]. self useAutoRefresh ifFalse: [ self refreshSubMenu: aMenu ]. self inspectionSubMenu: aMenu. self selectedElement inspectionMenu: aMenu. ^aMenu! ! !EyeInspector methodsFor: 'menu' stamp: 'ClementBera 5/3/2013 10:50' prior: 36016587! inspectionSubMenu: aMenu |selectedObject| selectedObject := self selectedElement value. aMenu add: 'Inspect (i)' translated target: self selector: #inspectInNewWindow: argumentList: {selectedObject}. self customMenuActions cull: aMenu. aMenu add: 'Explore (I)' translated target: self selector: #explore: argumentList: {selectedObject}. aMenu addLine.! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 15:17' prior: 36017374! limit1 "This is the max index shown before skipping to the last limit2 elements of very long arrays" ^ 100000! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 15:12' prior: 36017559! limit2 "This is the number of elements to show at the end of very long arrays" ^ 1000! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36017725! list ^ list! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36017817! list: anObject list := anObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:45' prior: 36018212! object ^ object contents! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:45' prior: 36018318! object: anObject object contents: anObject! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/25/2013 15:54' prior: 36018447! objectChanged "triggered when the inspected object is changed" self updateList. text doItReceiver: self object. description doItReceiver: self. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/29/2013 13:48' prior: 36018682! objectClass ^ self object class! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 16:14'! objectVariableSize ^ self object basicSize! ! !EyeInspector methodsFor: 'private' stamp: 'ClementBera 4/25/2013 14:47' prior: 36018793! okToChange "This method permits to move from element to element in the left panel list without having to accept the code in the bottom text panel" description canDiscardEdits ifTrue: [^ true]. description changed: #wantToChange. ^ description canDiscardEdits! ! !EyeInspector methodsFor: 'protocol' stamp: 'ClementBera 4/29/2013 10:47' prior: 36019136! openWithSpec: aSpec | w | w := super openWithSpec: aSpec. w whenClosedDo: [ self close ]. ^ w! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 5/2/2013 21:32' prior: 36019846! printDescription self printDescription: self selectedElement! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 4/30/2013 15:37'! printDescription: item "When you select an element in the list of the inspector, prnt on the description textModel the element selected" item ifNotNil: [:element | description text: element description ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 5/3/2013 11:10' prior: 36020152! refresh "refresh the object in the inspector, updating his modified instance variables" description hasUnacceptedEdits ifFalse: [ self printDescription ]! ! !EyeInspector methodsFor: 'menu' stamp: 'ClementBera 4/25/2013 15:42' prior: 36020440! refreshSubMenu: aMenu "Add a refresh button in the inspector. Not used anymore since there is this loop in initializeInspectorLoop." aMenu add: 'Refresh' translated target: self selector: #refresh. aMenu addLine. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 5/2/2013 21:32' prior: 36349134! saveElement "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class compiler evaluate: description text readStream in: nil "should be object in case of methodContext" to: description doItReceiver. newValue == #failedDoit ifFalse: [ self selectedElement save: newValue. self objectChanged]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 5/2/2013 21:32'! saveElement: newText "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class evaluatorClass new evaluate: newText in: self doItContext to: description doItReceiver. newValue == #failedDoit ifFalse: [ self selectedElement save: newValue. self objectChanged]! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:32' prior: 36021908! selectedElement ^list selectedItem! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:29'! selectedIndex ^ list selectedIndex! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:42'! selectedIndex: integer ^ list setSelectedIndex: integer! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:33'! selectedObject ^self selectedElement value! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/2/2013 21:28' prior: 36022032! shortCuts "Answers a dictionary of the shortcuts usable in EyeInspector" |shortCuts| shortCuts := Dictionary new. shortCuts at: $i command put: [ self inspectInNewWindow: list selectedItem value ]. shortCuts at: $i command shift put: [ self explore: list selectedItem value ]. shortCuts at: $b command put: [ list selectedItem browseValue ]. shortCuts at: $h command put: [ list selectedItem browseValueClassHierarchy ]. shortCuts at: $c command put: [ list selectedItem copyAccessorCode ]. ^shortCuts! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36022935! text ^ text! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 14:16' prior: 36023027! text: anObject text := anObject! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 3/12/2013 17:34' prior: 36023139! title ^ self object class printString! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 5/1/2013 23:18' prior: 36023262! updateList "update the list of elements displayed according to the new object" |elements| elements := self generateElements. "first reset the items to make sure we don't interfere with the display block" list items: #(). list displayBlock: [:e :index | (elements at: index ifAbsent: [InstanceVariableEyeElement host: nil ]) label ]. list items: elements. list menu: [ :aMenu | self inspectionMenu: aMenu ]. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 4/29/2013 10:29' prior: 36023679! updateTime "time in which the inspector updates the object" ^ 1 second! ! !EyeInspector methodsFor: 'testing' stamp: 'ClementBera 4/30/2013 13:28'! useAutoRefresh ^ self class useAutoRefresh! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 4/30/2013 16:13' prior: 36023827! variableFieldsToShow "Answers the indexes of the variable fields of the object to show. Shorten the list for very long collection (cf limit1 and limit2)" |bSize| bSize := self objectVariableSize. ^ bSize <= (self limit1 + self limit2) ifTrue: [1 to: bSize] ifFalse: [(1 to: self limit1) , (bSize - self limit2 + 1 to: bSize)].! ! !EyeIntegerInspector commentStamp: '' prior: 36454514! Specialized version of inspector showing hex, octal and binary representations! !EyeIntegerInspector methodsFor: 'list' stamp: 'ClementBera 5/2/2013 10:49'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex' value: [ self object hex ]). elements add: (DynamicEyeElement host: self object label: 'octal' value: [ self object printStringBase: 8 ]). elements add: (DynamicEyeElement host: self object label: 'binary' value: [ self object printStringBase: 2 ]).! ! !InspectorWrapper commentStamp: '' prior: 36454651! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !InspectorWrapper class methodsFor: 'specs' stamp: 'ClementBera 5/2/2013 11:41'! debuggerSpec ^ SpecLayout composed add: #inspector withSpec: #debuggerSpecOptimized; yourself! ! !InspectorWrapper class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/2/2013 21:13'! inspect: anObject ^ self openInspector: anObject eyeInspector! ! !InspectorWrapper class methodsFor: 'specs' stamp: 'ClementBera 5/2/2013 11:40'! inspectorSpec ^ SpecLayout composed add: #inspector withSpec: #inspectorSpecOptimized; yourself! ! !InspectorWrapper class methodsFor: 'instance creation' stamp: 'ClementBera 5/2/2013 11:43'! openInspector: inspector ^ self new inspector: inspector; openWithSpec: #inspectorSpec; yourself! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:37'! canBeRefreshed ^ canBeRefreshed! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:37'! canBeRefreshed: anObject canBeRefreshed := anObject! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 11:01'! customMenuActions ^ [:aMenu | aMenu add: 'Dive (d)' translated target: self selector: #dive. history hasPrevious ifTrue: [ aMenu add: 'previous object (p)' translated target: self selector: #inspectPrevious]. history hasNext ifTrue: [ aMenu add: 'next object (n)' translated target: self selector: #inspectNext]. ]! ! !InspectorWrapper methodsFor: 'actions' stamp: 'CamilloBruni 5/2/2013 21:40'! dive self selectedIndex ifNil: [ ^ self ]. self diveInto: self selectedObject! ! !InspectorWrapper methodsFor: 'actions' stamp: 'ClementBera 5/3/2013 10:59'! diveInto: anObject self inspect: anObject.! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 11:56'! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ self updateInspector ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false.! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'CamilloBruni 5/2/2013 21:28'! initializeShortcuts self on: $[ command do: [ self inspectPrevious ]. self on: $] command do: [ self inspectNext ]. self on: $d command do: [ self dive ].! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'CamilloBruni 5/2/2013 00:25'! initializeWidgets ! ! !InspectorWrapper methodsFor: 'actions' stamp: 'ClementBera 5/3/2013 11:03'! inspect: anObject self inspector: anObject eyeInspector. ! ! !InspectorWrapper methodsFor: 'actions' stamp: 'CamilloBruni 5/2/2013 21:52'! inspectHistoryItem: historyItem self inspect: historyItem key . self selectedIndex: historyItem value.! ! !InspectorWrapper methodsFor: 'actions' stamp: 'CamilloBruni 5/2/2013 21:43'! inspectNext history hasNext ifFalse: [ ^ self ]. self inspectHistoryItem: history next key! ! !InspectorWrapper methodsFor: 'actions' stamp: 'ClementBera 5/3/2013 11:01'! inspectPrevious history hasPrevious ifFalse: [ ^ self ]. self inspectHistoryItem: history previous key! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:26'! inspector ^ inspector contents! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 11:53'! inspector: anEyeInspector inspector contents ifNotNil: [ :inspect | inspect owner: nil ]. inspector contents: anEyeInspector. anEyeInspector owner: self. anEyeInspector customMenuActions: self customMenuActions. self pushHistory.! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:15'! object ^ self inspector object! ! !InspectorWrapper methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 11:08'! openWithSpec: aSpec | w | w := super openWithSpec: aSpec. w whenClosedDo: [ self inspector close ]. ^ w! ! !InspectorWrapper methodsFor: 'history' stamp: 'CamilloBruni 5/2/2013 21:21'! pushHistory history add: (self object -> self selectedIndex)! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:15'! selectedIndex ^ self inspector selectedIndex! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:17'! selectedIndex: anInteger self inspector selectedIndex: anInteger! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:27'! selectedObject ^ self inspector selectedObject! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 11:43'! title ^ self inspector title! ! !InspectorWrapper methodsFor: 'updating' stamp: 'CamilloBruni 5/2/2013 22:05'! updateInspector self updateTitle. self inspector ifNil: [ ^ self ]. self inspector list handlesDoubleClick: true; doubleClickAction: [ self dive ]. self canBeRefreshed ifFalse: [ ^ self ]. self needRebuild: false. self buildWithSpec: #inspectorSpec! ! !SpecDebugger commentStamp: '' prior: 36454924! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecDebugger methodsFor: 'protocol' stamp: 'CamilloBruni 5/1/2013 23:59'! buildWithSpec: aSpec | result | result := super buildWithSpec: aSpec. needRefresh:= true. ^ result! ! !SpecDebugger methodsFor: 'actions' stamp: 'CamilloBruni 5/2/2013 00:36' prior: 36025686! close self removeActionsForSession: self session. self session ifNotNil: [ :aSession | aSession terminate]. contextInspector close. receiverInspector inspector close.! ! !SpecDebugger methodsFor: 'accessing widgets' stamp: 'ClementBera 4/30/2013 14:10' prior: 36025935! contextInspector ^ contextInspector! ! !SpecDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 5/1/2013 23:59' prior: 34267552! initialize session := nil asValueHolder. super initialize. needRefresh := false. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ].! ! !SpecDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 5/2/2013 00:34' prior: 36026931! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorWrapper). (#contextInspector -> #EyeInspector)}. receiverInspector inspector: EyeInspector new. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text | self recompileMethodTo: text string inContext: self stack selectedItem ]. self setStackMenu. self setFocusOrder! ! !SpecDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 5/2/2013 00:15'! setFocusOrder self focusOrder removeAll; add: stack; add: toolbar; add: code; add: receiverInspector; add: contextInspector! ! !SpecDebugger methodsFor: 'updating' stamp: 'CamilloBruni 5/1/2013 23:53' prior: 34271238! updateCodeFromContext: aContext aContext ifNil: [ self code aboutToStyle: false; text: ''; behavior: nil; setSelection: (1 to: 0) ] ifNotNil: [ |selectionInterval| selectionInterval := self session selectedCodeRangeForContext: aContext. self logCr: aContext receiver class. self code aboutToStyle: true; text: aContext sourceCode; behavior: aContext home receiver class; setSelection: selectionInterval ]! ! !SpecDebugger methodsFor: 'updating' stamp: 'CamilloBruni 5/2/2013 21:29' prior: 36027555! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver eyeInspector. receiverInspector owner: self. " needRefresh ifTrue: [ self updateReceiverInspector ]"! ! !SpecDebugger methodsFor: 'updating' stamp: 'CamilloBruni 5/2/2013 00:13'! updateReceiverInspector "only refresh the receiverInspector" self needRebuild: false. code needRebuild: false. contextInspector needRebuild: false. stack needRebuild: false. toolbar needRebuild: false. self buildWithSpec. self setFocusOrder! ! RBSmallDictionaryTest removeSelector: #testValuesDo! RBSmallDictionaryTest removeSelector: #testValues! RBSmallDictionaryTest removeSelector: #testRemoveKeyIfAbsent! RBSmallDictionaryTest removeSelector: #testRemoveKey! RBSmallDictionaryTest removeSelector: #testKeysDo! RBSmallDictionaryTest removeSelector: #testKeysAndValuesDo! RBSmallDictionaryTest removeSelector: #testKeys! RBSmallDictionaryTest removeSelector: #testIncludesKey! RBSmallDictionaryTest removeSelector: #testEmpty! RBSmallDictionaryTest removeSelector: #testCopy! RBSmallDictionaryTest removeSelector: #testAtPut! RBSmallDictionaryTest removeSelector: #testAtIfAbsent! RBSmallDictionaryTest removeSelector: #testAtError! RBSmallDictionaryTest removeSelector: #setUp! Smalltalk globals removeClassNamed: #RBSmallDictionaryTest! SpecInspector removeSelector: #windowWidth! SpecInspector removeSelector: #title! SpecInspector removeSelector: #text! SpecInspector removeSelector: #specWithExtra! SpecInspector removeSelector: #setWindowWidth! SpecInspector removeSelector: #okToChange! SpecInspector removeSelector: #object:! SpecInspector removeSelector: #object! SpecInspector removeSelector: #list! SpecInspector removeSelector: #initializeWidgets! SpecInspector removeSelector: #initializePresenter! SpecInspector removeSelector: #initialize! SpecInspector removeSelector: #extra! SpecInspector removeSelector: #description! SpecInspector removeSelector: #columnWidth! SpecInspector class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #SpecInspector! EyeInspector removeSelector: #save:! EyeInspector removeSelector: #remember:! EyeInspector removeSelector: #prev! EyeInspector removeSelector: #prepareObject! EyeInspector removeSelector: #next! EyeInspector removeSelector: #initializeShortCuts! EyeInspector removeSelector: #initializeInspectorLoop! EyeInspector removeSelector: #elemClass! EyeInspector removeSelector: #dive:! EyeInspector class removeSelector: #inspectorSpec2! EyeInspector class removeSelector: #debuggerSpec2! CheckboxSpec removeSelector: #defaultColor! RBSmallDictionary removeSelector: #valuesDo:! RBSmallDictionary removeSelector: #values! RBSmallDictionary removeSelector: #size! RBSmallDictionary removeSelector: #removeKey:ifAbsent:! RBSmallDictionary removeSelector: #removeKey:! RBSmallDictionary removeSelector: #privateAt:put:! RBSmallDictionary removeSelector: #postCopy! RBSmallDictionary removeSelector: #keysDo:! RBSmallDictionary removeSelector: #keysAndValuesDo:! RBSmallDictionary removeSelector: #keys! RBSmallDictionary removeSelector: #isEmpty! RBSmallDictionary removeSelector: #initialize:! RBSmallDictionary removeSelector: #includesKey:! RBSmallDictionary removeSelector: #grow! RBSmallDictionary removeSelector: #findIndexFor:! RBSmallDictionary removeSelector: #errorKeyNotFound! RBSmallDictionary removeSelector: #empty! RBSmallDictionary removeSelector: #at:put:! RBSmallDictionary removeSelector: #at:ifAbsentPut:! RBSmallDictionary removeSelector: #at:ifAbsent:! RBSmallDictionary removeSelector: #at:! RBSmallDictionary class removeSelector: #new:! RBSmallDictionary class removeSelector: #new! Smalltalk globals removeClassNamed: #RBSmallDictionary! EyeElement removeSelector: #selectClass! EyeElement removeSelector: #saveAction:! EyeElement removeSelector: #saveAction! EyeElement removeSelector: #save:! EyeElement removeSelector: #referencesToSelection:! EyeElement removeSelector: #referenceSubMenu:inspector:! EyeElement removeSelector: #printedValue:! EyeElement removeSelector: #printedValue! EyeElement removeSelector: #printOn:! EyeElement removeSelector: #object:! EyeElement removeSelector: #object! EyeElement removeSelector: #instRefMenu:inspector:! EyeElement removeSelector: #inspectionMenu:inspector:! EyeElement removeSelector: #inspectBasic! EyeElement removeSelector: #fieldName:! EyeElement removeSelector: #fieldName! EyeElement removeSelector: #exploreStrongPointers! EyeElement removeSelector: #exploreSelection! EyeElement removeSelector: #endMenu:! EyeElement removeSelector: #defsOfSelection:! EyeElement removeSelector: #copyName! EyeElement removeSelector: #classVarRefs:! EyeElement removeSelector: #classHierarchy! EyeElement removeSelector: #browseSubMenu:! EyeElement removeSelector: #browseInstVarRefs:! EyeElement removeSelector: #browseInstVarDefs:! EyeElement removeSelector: #browseInstClassVariable:! EyeElement removeSelector: #browseFull! EyeElement removeSelector: #browseClassRefs:! EyeElement removeSelector: #browseClass! EyeElement class removeSelector: #fieldName:object:saveAction:! EyeElement class removeSelector: #fieldName:object:printedValue:saveAction:! EyeElement class removeSelector: #fieldName:object:printedValue:! EyeElement class removeSelector: #fieldName:object:! Smalltalk globals removeClassNamed: #EyeElement! KeyboardEvent removeSelector: #altKeyPressed! "AST-Core"! "AST-Semantic"! "AST-Tests-Core"! "Collections-Unordered"! "Keymapping-KeyCombinations"! "Morphic"! "NewList"! "Refactoring-Changes"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Tools"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(3 May 2013 12:09:28 pm) Pharo.image priorSource: 2886702! ----STARTUP----an Array(3 May 2013 12:16:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 12:16:04 pm) Pharo-30089.image priorSource: 2961836! ----STARTUP----an Array(3 May 2013 1:41:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 13:39' prior: 36441430! commentForCurrentUpdate ^ '10489 Update Opal to latest version https://pharo.fogbugz.com/f/cases/10489 10466 Better interruption https://pharo.fogbugz.com/f/cases/10466 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 13:39'! script187 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1414.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.8.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.37.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.106.mcz Spec-Debugger-MarcusDenker.44.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.6.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.102.mcz Spec-Widgets-MarcusDenker.137.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 13:39'! update30090 "self new update30090" self withUpdateLog: '10489 Update Opal to latest version https://pharo.fogbugz.com/f/cases/10489 10466 Better interruption https://pharo.fogbugz.com/f/cases/10466 '. self loadTogether: self script187 merge: false. self flushCaches. ! ! "ScriptLoader30"! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 34877069! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! !UserInterruptHandler methodsFor: 'private' stamp: 'HenrikSperreJohansen 5/3/2013 10:08' prior: 54598812! processToInterrupt "Look for best candidate to interrupt: - any scheduled non-finalization process of lower priority - the weak-finalization process, if scheduled - the UI process Never interrupt the idle process, since killing it is fatal" | fallback | fallback := UIManager default uiProcess. Processor scanSchedule: [:p | "suspendedContext sender == nil usually means that process is only scheduled but had no chance to run" (p ~~ Processor backgroundProcess and: [p suspendedContext sender notNil]) ifTrue: [ p ~~ WeakArray runningFinalizationProcess ifTrue: [^p] ifFalse: [fallback := p]]] startingAt: Processor activePriority. ^fallback! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:33'! decompile: aSelector in: aClass ^self new decompile: aSelector in: aClass ! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:34'! decompile: aSelector in: aClass method: aMethod ^self new decompile: aSelector in: aClass method: aMethod! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:34'! decompileBlock: aBlock ^self new decompileBlock: aBlock! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:34'! decompileMethod: aCompiledMethod ^self new decompileMethod: aCompiledMethod! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 5/1/2013 12:37' prior: 35997929! decompilerClass ^self! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:28' prior: 35998069! evaluate: textOrString ^self new source: textOrString; evaluate! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:35'! withTempNames: tempNameArray ^self new withTempNames: tempNameArray! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/3/2013 13:11' prior: 36000991! class: aClass class := aClass! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:30'! decompile: aSelector in: aClass ^self decompile: aSelector in: aClass method: (aClass compiledMethodAt: aSelector)! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:31'! decompile: aSelector in: aClass method: aMethod "to be fixed" | sourceCode | sourceCode := aMethod getSourceFromFile. sourceCode ifNil: [Decompiler new decompile: aSelector in: aClass method: aMethod ] ifNotNil: [OpalCompiler new parse: sourceCode class: aClass]! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:31'! decompileBlock: aBlock ^ aBlock sourceNode ! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:32'! decompileMethod: aCompiledMethod ^self decompile: aCompiledMethod selector in: aCompiledMethod methodClass method: aCompiledMethod! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 4/30/2013 10:27'! evaluate: textOrString ^self source: textOrString; evaluate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:28'! evaluate: textOrString for: anObject logged: logFlag ^self source: textOrString; logged: logFlag; receiver: anObject; evaluate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:28'! evaluate: textOrString for: anObject notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; receiver: anObject; requestor: aController; evaluate ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:29'! evaluate: textOrString logged: logFlag ^ self source: textOrString; logged: logFlag; evaluate ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:29'! evaluate: textOrString notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; requestor: aController; evaluate ! ! !OpalCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 4/30/2013 10:30' prior: 36005190! format: textOrStream in: aClass notifying: aRequestor ^self source: textOrStream; class: aClass; requestor: aRequestor; format ! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/1/2013 12:32'! withTempNames: tempNameArray "ignored... fake decompiler has corrent temp names by default"! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 5/3/2013 13:11' prior: 35062092! testNestedBlocksRemoteInBlockCase1 | ast scopes | ast := (OCOpalExamples>>#nestedBlocksRemoteInBlockCase1) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 0. self deny: (ast scope lookupVar: 'block') isRemote. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: scopes second tempVars size = 0. self assert: scopes second tempVector size = 2. self assert: (scopes second tempVector at: 'a') isRemote. self assert: (scopes second tempVector at: 'b') isRemote. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34775501! visitArrayNode: anArrayNode super visitArrayNode: anArrayNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34775693! visitAssignmentNode: anAssignmentNode super visitAssignmentNode: anAssignmentNode . methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34775906! visitBlockNode: aBlockNode super visitBlockNode: aBlockNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34776096! visitCascadeNode: aCascadeNode super visitCascadeNode: aCascadeNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34776294! visitInlinedBlockNode: anOptimizedBlockNode super visitInlinedBlockNode: anOptimizedBlockNode. methodBuilder popTop.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34766521! visitArrayNode: anArrayNode | elementNodes | elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34766811! visitAssignmentNode: anAssignmentNode valueTranslator visitNode: anAssignmentNode value. anAssignmentNode variable ocBinding emitStore: methodBuilder ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34767059! visitBlockNode: aBlockNode | tempNames argumentNames copiedNames | aBlockNode arguments size >15 ifTrue: [self backendError: 'Too many arguments' forNode: aBlockNode ]. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. argumentNames := aBlockNode argumentNames asArray. tempNames := (aBlockNode scope tempVars asArray collect: [ :each | each name]) copyWithoutAll: argumentNames. copiedNames := (aBlockNode scope inComingCopiedVars asArray collect: [:each | each name]). methodBuilder pushClosureCopyCopiedValues: copiedNames args: argumentNames jumpTo: #block. aBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aBlockNode scope tempVectorName withVars: (aBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. effectTranslator visitNode: aBlockNode body. methodBuilder addBlockReturnTopIfRequired. self flag: 'why dont we just add a blockReturnTop here... it could be removed or ignored in IRTranslator'. methodBuilder jumpAheadTarget: #block. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34768244! visitCascadeNode: aCascadeNode valueTranslator visitNode: aCascadeNode receiver. aCascadeNode messages allButLastDo: [:node | methodBuilder pushDup. effectTranslator visitNode: node. ]. valueTranslator visitNode: aCascadeNode messages last. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34768589! visitInlinedBlockNode: anOptimizedBlockNode "We are visiting a scope that is not a block, but inlined in the outer context. This means: - we do not create a Block - we call IRBuilder to add temps " | argumentNames tempNames copiedNames | argumentNames := anOptimizedBlockNode argumentNames asArray. tempNames := (anOptimizedBlockNode scope tempVars collect: [ :each | each name asSymbol]) copyWithoutAll: argumentNames. copiedNames := (anOptimizedBlockNode scope inComingCopiedVars collect: [:each | each name]) asArray. anOptimizedBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: anOptimizedBlockNode scope tempVectorName withVars: (anOptimizedBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. methodBuilder addTemps: copiedNames. methodBuilder addTemps: argumentNames. anOptimizedBlockNode isInlinedLoop ifTrue: [ tempNames do: [ :tempName | methodBuilder pushLiteral: nil. methodBuilder storeTemp: tempName. methodBuilder popTop. ]]. self visitNode: anOptimizedBlockNode body.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34769802! visitLiteralArrayNode: aRBLiteralArrayNode methodBuilder pushLiteral: aRBLiteralArrayNode value. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34769998! visitLiteralNode: aLiteralNode methodBuilder pushLiteral: aLiteralNode value. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34770172! visitMessageNode: aMessageNode aMessageNode isInlined ifTrue: [ methodBuilder addLiteral: aMessageNode selector. "so searching for senders will work" ^self perform: ('emit', aMessageNode selector asOneArgSelector capitalized) asSymbol with: aMessageNode]. ^ self emitMessageNode: aMessageNode! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34770573! visitMethodNode: aMethodNode methodBuilder addTemps: aMethodNode scope tempVarNames. methodBuilder properties: aMethodNode properties. methodBuilder primitiveNode: aMethodNode primitiveFromPragma. aMethodNode pragmas do: [:each | self visitPragmaNode: each]. methodBuilder numArgs: aMethodNode arguments size. aMethodNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aMethodNode scope tempVectorName withVars: (aMethodNode scope tempVector collect: [:each| each name]) asArray. ]. (aMethodNode hasProperty: #needsLongForm) ifTrue: [ methodBuilder forceLongForm]. effectTranslator visitNode: aMethodNode body. aMethodNode body lastIsReturn ifFalse: [methodBuilder pushReceiver; returnTop]! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34771603! visitPragmaNode: aPragmaNode methodBuilder addPragma: (Pragma keyword: aPragmaNode selector arguments: (aPragmaNode arguments collect: [:each | each value]) asArray). aPragmaNode isPrimitiveError ifTrue: [ methodBuilder storeTemp: aPragmaNode arguments last value]. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34771997! visitReturnNode: aReturnNode valueTranslator visitNode: aReturnNode value. methodBuilder returnTop. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34772198! visitSequenceNode: aSequenceNode | statements | statements := aSequenceNode statements. statements ifEmpty: [ aSequenceNode parent isBlock ifTrue:[ methodBuilder pushLiteral: nil]. ^self]. statements allButLastDo: [:each | effectTranslator visitNode: each]. (aSequenceNode parent isBlock ifTrue: [valueTranslator] ifFalse: [effectTranslator]) visitNode: statements last. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 34772677! visitVariableNode: aVariableNode aVariableNode ocBinding emitValue: methodBuilder ! ! !OCASTClosureAnalyzer methodsFor: 'variables' stamp: 'JorgeRessia 9/23/2010 15:59' prior: 34745347! doCopying | copying | copying := scope tempVars select: [ :each | each isEscapingRead]. copying do: [ :each | scope addCopyingTemp: each]! ! !OCASTClosureAnalyzer methodsFor: 'variables' stamp: 'JorgeRessia 9/22/2010 16:16' prior: 34745593! doRemotes | remotes | remotes := scope tempVars select: [ :each | each isEscapingWrite]. remotes do: [ :each | scope moveToVectorTemp: each]. ! ! !OCASTClosureAnalyzer methodsFor: 'visiting' stamp: 'MarcusDenker 4/11/2013 15:11' prior: 34745839! visitBlockNode: aBlockNode "here look at the temps and make copying vars / tempVector out of them" scope := aBlockNode scope. self doRemotes; doCopying. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTClosureAnalyzer methodsFor: 'visiting' stamp: 'MarcusDenker 4/11/2013 15:11' prior: 34746154! visitMethodNode: aMethodNode "here look at the temps and make copying vars / tempVector out of them" scope := aMethodNode scope. self doRemotes; doCopying. self visitNode: aMethodNode body. scope := scope popScope.! ! !OCASTClosureAnalyzer methodsFor: 'visiting' stamp: 'MarcusDenker 4/11/2013 15:11' prior: 34746474! visitVariableNode: aVariableNode "re-lookup the temorary variables..." | var | aVariableNode isTemp ifFalse: [^self]. var := scope lookupVar: aVariableNode name. aVariableNode ocBinding: var. var isTempVectorTemp ifTrue: [scope addCopyingTempToAllScopesUpToDefVector: var vectorName]. var isCopying ifTrue: [scope addCopyingTempToAllScopesUpToDefTemp: var].! ! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 36526880! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! OCFakeDecompiler removeSelector: #withTempNames:! OCFakeDecompiler removeSelector: #decompileBlock:! OCFakeDecompiler removeSelector: #decompile:in:method:! OCFakeDecompiler removeSelector: #decompile:in:! OCFakeDecompiler removeSelector: #decompile:! Smalltalk globals removeClassNamed: #OCFakeDecompiler! OCAbstractMethodScope removeSelector: #isOptimizedBlockScope! IRMethod removeSelector: #removeReturnSelf! IRMethod removeSelector: #maxOrderNumber! IRMethod removeSelector: #decompile! "Kernel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(3 May 2013 1:41:12 pm) Pharo.image priorSource: 2962032! ----STARTUP----an Array(3 May 2013 1:47:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 1:47:41 pm) Pharo-30090.image priorSource: 2988177! ----STARTUP----an Array(3 May 2013 1:54:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 13:51' prior: 36516759! commentForCurrentUpdate ^ '10490 Eye inspector bug https://pharo.fogbugz.com/f/cases/10490 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 13:51'! script188 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1414.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.8.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.448.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.37.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.46.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.8.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.102.mcz Spec-Widgets-MarcusDenker.137.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 13:51'! update30091 "self new update30091" ScriptLoader new addHomeRepositoryToAllPackages. self withUpdateLog: '10490 Eye inspector bug https://pharo.fogbugz.com/f/cases/10490 '. self loadTogether: self script188 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractSpec commentStamp: '' prior: 17437018! An AbstractSpec is a basic wrapper which describe a spec. For now it can seems useless, but structural info will be stored thanks to those wrappers! !EyeDebuggerContextInspector commentStamp: '' prior: 0! Specific context inspector for the bottom right of the debugger! !SpecInterpreter class methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:33' prior: 50705596! buildWidgetFor: aComposableModel withSpec: aSymbol ^ self interpretASpec: (aComposableModel class perform: aSymbol) model: aComposableModel selector: aSymbol! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:43' prior: 50706187! interpretASpec: aSpec model: aModel ^ self interpretASpec: aSpec model: aModel superSpec: NullObjectSpec new selector: nil! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:34'! interpretASpec: aSpec model: aModel selector: aSelector ^ self interpretASpec: aSpec model: aModel superSpec: NullObjectSpec new selector: aSelector! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:34'! interpretASpec: aPresenter model: aModel superSpec: aSpec selector: aSelector | result | [ result := self private_interpretASpec: aPresenter model: aModel superSpec: aSpec selector: aSelector ] ensure: [ self resetBindings ]. ^ result! ! !SpecInterpreter class methodsFor: 'private' stamp: 'ClementBera 5/3/2013 12:48' prior: 50706852! private_buildWidgetFor: aComposableModel withSpec: aSymbol ^ self private_interpretASpec: (aComposableModel class perform: aSymbol) model: aComposableModel selector: aSymbol! ! !SpecInterpreter class methodsFor: 'private' stamp: 'ClementBera 5/3/2013 12:45' prior: 50707107! private_interpretASpec: aPresenter model: aModel ^ self new interpretASpec: aPresenter model: aModel selector: nil! ! !SpecInterpreter class methodsFor: 'private' stamp: 'ClementBera 5/3/2013 12:35'! private_interpretASpec: aPresenter model: aModel selector: aSelector ^ self new interpretASpec: aPresenter model: aModel selector: aSelector! ! !SpecInterpreter class methodsFor: 'private' stamp: 'ClementBera 5/3/2013 12:44'! private_interpretASpec: aPresenter model: aModel superSpec: aSpec selector: aSelector ^ self new interpretASpec: aPresenter model: aModel superSpec: aSpec selector: aSelector! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'ClementBera 5/3/2013 12:53'! computeSpecFrom: aSymbol selector: aSelector | instance | instance := (SpecBinder specFor: aSymbol ifAbsent: [ ^ RawSpec new defaultReceiver: aSymbol model: model selector: aSelector]) new. ^ instance model: model; yourself! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'ClementBera 5/3/2013 12:35'! interpretASpec: aPresenter model: aModel selector: aSelector ^ self interpretASpec: aPresenter model: aModel superSpec: NullObjectSpec new selector: aSelector! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'ClementBera 5/3/2013 12:36'! interpretASpec: aPresenter model: aModel superSpec: aSpec selector: aSelector self model: aModel. superSpec := aSpec. ^ self interpretASpec: aPresenter selector: aSelector! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'ClementBera 5/3/2013 12:52'! interpretASpec: aPresenter selector: aSelector aPresenter ifNil: [ ^ nil ]. (self extractArrayToInterpretFrom: aPresenter) ifNotNil: [ :result | ^ result ]. (self retrieveSpecFrom: arrayToInterpret selector: aSelector) ifNotNil: [ :instance | ^ instance ]. specForChildren := self retrieveSpecToProvideToChildren. index := 2. [ index <= arrayToInterpret size ] whileTrue: [ | newInstance | newInstance := self performNextSelectorAndIncrementIndex. index > arrayToInterpret size ifTrue: [ ^ self returnInterpretationOf: newInstance ]. spec instance: newInstance ]. "If you get here, there is a problem. Must probably it comes from the Spec which is wrongly defined" self assert: arrayToInterpret size < 2. (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. ^ spec instance! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'ClementBera 5/3/2013 12:43' prior: 33765299! performNextSelectorAndIncrementIndex | args numArgs selector | selector := spec bindings retrieveSelectorSymbolFor: (arrayToInterpret at: index). selector isArray not ifTrue: [ selector := selector asSymbol. numArgs := selector numArgs. args := arrayToInterpret copyFrom: index + 1 to: index + numArgs ] ifFalse: [ "Here I assume that if it's not a symbol, it's a collection" | array | array := selector. selector := array first. numArgs := 0. args := array allButFirst ]. args := args collect: [ :each | self class private_interpretASpec: each model: model superSpec: specForChildren selector: spec selector ]. index := index + numArgs + 1. ^ self actionToPerformWithSelector: selector arguments: args! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'ClementBera 5/3/2013 12:52'! retrieveSpecFrom: anArray selector: aSelector ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. self model needRebuild: true. spec isRedrawable ifTrue: [ spec removeSubWidgets ]. spec isBasic ifTrue: [ ^ spec instance ] ] ifFalse: [ spec := self computeSpecFrom: anArray first selector: aSelector ]. spec selector: aSelector. ^ nil! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'ClementBera 5/3/2013 12:44' prior: 35625457! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := self class private_interpretASpec: newInstance model: spec instance superSpec: specForChildren selector: spec selector. ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. result spec addAsSubSpecTo: superSpec. ^ return ] ifFalse: [ ^ result ]! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 12:28' prior: 36504338! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false.! ! !InspectorWrapper methodsFor: 'updating' stamp: 'ClementBera 5/3/2013 12:54'! updateInspectorFrom: oldInspector self updateTitle. self inspector ifNil: [ ^ self ]. self inspector list handlesDoubleClick: true; doubleClickAction: [ self dive ]. self canBeRefreshed ifFalse: [ ^ self ]. self needRebuild: false. self buildWithSpec: oldInspector spec selector! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 5/3/2013 13:32' prior: 36509017! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorWrapper). (#contextInspector -> #EyeDebuggerContextInspector)}. receiverInspector inspector: EyeInspector new. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text | self recompileMethodTo: text string inContext: self stack selectedItem ]. self setStackMenu. self setFocusOrder! ! !SpecDebugger methodsFor: 'updating' stamp: 'ClementBera 5/3/2013 13:17' prior: 36510406! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver eyeInspector. receiverInspector owner: self.! ! !AbstractSpec commentStamp: '' prior: 36553087! An AbstractSpec is a basic wrapper which describe a spec. For now it can seems useless, but structural info will be stored thanks to those wrappers! !AbstractSpec methodsFor: 'private' stamp: 'ClementBera 5/3/2013 12:35' prior: 35624038! initializeInstance ^ SpecInterpreter private_interpretASpec: { self classSymbol. #color:. self defaultColor} model: DummyComposableModel new selector: self selector! ! !AbstractSpec methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:37' prior: 17438248! removeSubWidgets ^ SpecInterpreter interpretASpec: #(model removeSubWidgets) model: self instance selector: self selector! ! !AbstractSpec methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 12:30'! selector ^ selector! ! !AbstractSpec methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 12:53'! selector: anObject selector := anObject! ! !Object methodsFor: '*Spec-Inspector' stamp: 'ClementBera 5/3/2013 12:08' prior: 36479461! eyeClass ^ self class eyeClass! ! !EyeDebuggerContextInspector commentStamp: '' prior: 36553305! Specific context inspector for the bottom right of the debugger! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 13:32'! addAllInstVars: elements "Do nothing"! ! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 13:31'! addInstancesVariable: elements "Do nothing"! ! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 13:32'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'all temp vars' value: [ String streamContents: [ :s | self object tempNames do: [ :name | s nextPutAll: name ; nextPut: Character space ; nextPut: $: ; nextPut: Character space ; nextPutAll: (self object tempNamed: name) asString ; nextPut: Character lf ] ] ]).! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 5/3/2013 12:07' prior: 36487807! inspector: anObject ^ anObject class eyeClass new inspect: anObject; yourself! ! !ComposableModel methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 12:43' prior: 19982538! buildWithSpecLayout: aSpecLayout "Build the widget using the spec name provided as argument" | widget | widget := SpecInterpreter interpretASpec: aSpecLayout model: self. self ensureExtentFor: widget. self ensureKeyBindingsFor: widget. self announce: (WidgetBuilt model: self widget: widget). ^ widget! ! !RawSpec methodsFor: 'accessing' stamp: 'ClementBera 5/3/2013 12:51'! defaultReceiver: aSymbol model: aModel selector: aSelector defaultReceiver := SpecInterpreter private_interpretASpec: aSymbol model: aModel selector: aSelector.! ! RawSpec removeSelector: #defaultReceiver:model:! SpecInterpreter removeSelector: #retrieveSpecFrom:! SpecInterpreter removeSelector: #interpretASpec:model:superSpec:! SpecInterpreter removeSelector: #interpretASpec:model:! SpecInterpreter removeSelector: #interpretASpec:! SpecInterpreter removeSelector: #computeSpecFrom:! SpecInterpreter class removeSelector: #private_interpretASpec:model:superSpec:! SpecInterpreter class removeSelector: #interpretASpec:model:superSpec:! InspectorWrapper removeSelector: #updateInspector! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(3 May 2013 1:54:09 pm) Pharo.image priorSource: 2988371! ----STARTUP----an Array(3 May 2013 2:00:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 2:00:40 pm) Pharo-30091.image priorSource: 3009927! ----STARTUP----an Array(3 May 2013 2:20:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 14:17' prior: 36543097! commentForCurrentUpdate ^ '10253 Unrecoverable error when deleting methods https://pharo.fogbugz.com/f/cases/10253 10139 Nautilus does not properly indent hierarchies https://pharo.fogbugz.com/f/cases/10139'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 14:17'! script189 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1414.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.8.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.228.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.37.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.46.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.8.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.137.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 14:17'! update30092 "self new update30092" self withUpdateLog: '10253 Unrecoverable error when deleting methods https://pharo.fogbugz.com/f/cases/10253 10139 Nautilus does not properly indent hierarchies https://pharo.fogbugz.com/f/cases/10139'. self loadTogether: self script189 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MultipleMethodsEditorAllButtonModel commentStamp: '' prior: 0! I am model for multiple methods editor (the -All- button)! !SortHierarchically commentStamp: '' prior: 0! A SortHierarchically is an algorithm used to display a list of classes where subclasses are indented and follow their superclass. Instance Variables hierarchy: an array of SortHierarchicallyNodes correctly sorted ! !SortHierarchicallyNode commentStamp: '' prior: 0! A SortHierarchicallyNode is a wrapper around any object that is used by the sorting algorithm of SortHierarchically to store the ancestry chain of this object. Instance Variables ancestor: a SortHierarchicallyNode that is an ancestor of the receiver if any, nil otherwise. element: any model object that is part of a collection we are sorting hierarchically. ! !NautilusHelp commentStamp: '' prior: 0! I am the help for the Help book about Nautilus! !MessageBrowser methodsFor: 'initialization' stamp: 'CamilleTeruel 5/3/2013 13:43' prior: 25574922! initializeWidgets self instantiateModels: #( listModel MultiColumnListModel textModel TextModel toolbarModel MethodToolbar ). listModel displayBlock: [ :item | self wrapItem: item ]. textModel aboutToStyle: true. refreshingBlockHolder := [ :item | true ] asValueHolder. self setListMenu; initializeDropList; setFocus. ! ! !MessageBrowser methodsFor: 'announcements' stamp: 'CamilleTeruel 5/3/2013 13:41' prior: 25571964! methodRemoved: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement methodRemoved. "Item is a compiled methed, where the list is populated with RGMethod" "(refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]." self okToChange ifFalse: [ ^ self ]. WorldState addDeferredUIMessage: [ | sel itm | sel := listModel selectedIndex. itm := listModel selectedItem. (itm notNil and: [ itm methodClass = item methodClass and: [ itm selector = item selector ] ]) ifTrue: [ textModel hasUnacceptedEdits: false ]. self messages: (listModel listItems remove: item asRingDefinition ifAbsent: [ nil ]; yourself). listModel setSelectedIndex: sel ]! ! !MultipleMethodsEditorAllButtonModel commentStamp: '' prior: 36575039! I am model for multiple methods editor (the -All- button)! !SortHierarchically commentStamp: '' prior: 36575157! A SortHierarchically is an algorithm used to display a list of classes where subclasses are indented and follow their superclass. Instance Variables hierarchy: an array of SortHierarchicallyNodes correctly sorted ! !SortHierarchically class methodsFor: 'instance creation' stamp: 'DamienCassou 3/26/2013 16:29'! buildHierarchyFor: aClass ^ self buildHierarchyForClasses: aClass withAllSuperclasses, aClass allSubclasses! ! !SortHierarchically class methodsFor: 'instance creation' stamp: 'DamienCassou 3/26/2013 16:32'! buildHierarchyForClasses: aCollection | nodes | nodes := aCollection collect: [ :cl | SortHierarchicallyNode on: cl theNonMetaClass]. ^ self new setHierarchy: (self sortNodes: nodes); yourself! ! !SortHierarchically class methodsFor: 'instance creation' stamp: 'DamienCassou 3/26/2013 16:30'! buildHierarchyForClasses: aCollection fromPackage: aPackage ^ self new setHierarchy: (self sortNodes: (aCollection collect: [:cl | SortHierarchicallyNode on: cl ])); yourself! ! !SortHierarchically class methodsFor: 'actions' stamp: 'DamienCassou 3/26/2013 16:31'! sortElements: elements ^ self sortNodes: (elements collect: [ :el | SortHierarchicallyNode on: el ])! ! !SortHierarchically class methodsFor: 'actions' stamp: 'DamienCassou 3/26/2013 16:30'! sortNodes: nodes "Roel Wuyts: Reimplements sortHierarchically in a crude and ugly way that is however much more efficient" | classNodes sortedResults supersChain superior result chain1 chain2 i max | classNodes := (nodes collect: [:classNode | classNode element]) asOrderedCollection. sortedResults := SortedCollection sortBlock: [:assoc1 :assoc2 | result := nil. chain1 := assoc1 key. chain2 := assoc2 key. max := chain1 size min: chain2 size. i := 1. [result isNil and: [i <= max]] whileTrue: [ (chain1 at: i) = (chain2 at: i) ifTrue: [i := i + 1] ifFalse: [result := (chain1 at: i) name < (chain2 at: i) name]]. result isNil ifTrue: [ chain1 size < chain2 size] ifFalse: [result] ]. nodes do: [:classNode | supersChain := classNode element withAllSuperclasses reversed. supersChain removeAllSuchThat: [:cl | (classNodes includes: cl) not]. superior := supersChain size > 1 ifTrue: [superior := supersChain atLast: 2. nodes detect: [:e | e element = superior]] ifFalse: [nil]. sortedResults add: supersChain contents -> (classNode ancestor: superior). ]. ^(sortedResults collect: [:assoc | assoc value]) asArray! ! !SortHierarchically methodsFor: 'combining' stamp: 'BenjaminVanRyseghem 5/3/2013 13:26'! , another ^ self class new setHierarchy: (self hierarchy, another hierarchy); yourself! ! !SortHierarchically methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/3/2013 13:26'! hierarchy ^ hierarchy! ! !SortHierarchically methodsFor: 'computation' stamp: 'DamienCassou 3/26/2013 16:27'! indentationFor: anElement "Return the number of spaces needed before anElement to indent it properly." "Speed could be enhanced by using a hash-based collection instead of this #detect:." ^ (hierarchy detect: [ :node | node element = anElement ]) indent! ! !SortHierarchically methodsFor: 'initialize-release' stamp: 'DamienCassou 3/26/2013 15:14'! setHierarchy: nodes hierarchy := nodes! ! !SortHierarchically methodsFor: 'computation' stamp: 'DamienCassou 3/26/2013 16:29'! sortedElements "Return the list of elements sorted appropriately." "Nodes are already sorted, we just return each's element." ^ hierarchy collect: #element! ! !SortHierarchicallyNode commentStamp: '' prior: 36575437! A SortHierarchicallyNode is a wrapper around any object that is used by the sorting algorithm of SortHierarchically to store the ancestry chain of this object. Instance Variables ancestor: a SortHierarchicallyNode that is an ancestor of the receiver if any, nil otherwise. element: any model object that is part of a collection we are sorting hierarchically. ! !SortHierarchicallyNode class methodsFor: 'instance creation' stamp: 'DamienCassou 3/26/2013 14:45'! on: anObject ^ self new setElement: anObject; yourself! ! !SortHierarchicallyNode methodsFor: 'accessing' stamp: 'DamienCassou 3/26/2013 16:13'! ancestor "Return a SortHierarchicallyNode that is an ancestor of the receiver if any. Return nil otherwise." ^ ancestor! ! !SortHierarchicallyNode methodsFor: 'accessing' stamp: 'DamienCassou 3/26/2013 16:14'! ancestor: aSortHierarchicallyNode ancestor := aSortHierarchicallyNode! ! !SortHierarchicallyNode methodsFor: 'accessing' stamp: 'DamienCassou 3/26/2013 16:14'! element "Any model object that is part of a collection we are sorting hierarchically." ^ element! ! !SortHierarchicallyNode methodsFor: 'computation' stamp: 'DamienCassou 3/26/2013 16:15'! indent "Get the indentation value for the current node. The indentation equals the number of ancestors." | indent cursor | indent := 0. cursor := ancestor. [ cursor isNil ] whileFalse: [ indent := indent + 1. cursor := cursor ancestor ]. ^ indent! ! !SortHierarchicallyNode methodsFor: 'printing' stamp: 'DamienCassou 3/26/2013 16:15'! printOn: aStream "Print me->ancestor" aStream print: element; nextPutAll: ' -> '; print: (ancestor ifNil: [ '/' ] ifNotNil: [ ancestor element ])! ! !SortHierarchicallyNode methodsFor: 'initialize-release' stamp: 'DamienCassou 3/26/2013 14:45'! setElement: anObject element := anObject! ! !NautilusHelp commentStamp: '' prior: 36575854! I am the help for the Help book about Nautilus! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 15:52' prior: 17353679! buildGroupHierarchyFor: aGroup | coll1 | aGroup ifNil: [ ^ SortHierarchically new ]. self browsedEnvironment isSystem ifTrue: [ coll1 := aGroup classes ] ifFalse:[ coll1 := aGroup classes intersection: self model classes ]. ^ SortHierarchically buildHierarchyForClasses: coll1! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/3/2013 13:21' prior: 17355598! buildPackageHierarchyFor: aPackage | classes defined extensions | classes := aPackage definedClasses collect: #theNonMetaClass. self browsedEnvironment isSystem ifFalse: [ classes := classes intersection: self browsedEnvironment classes ]. defined := SortHierarchically buildHierarchyForClasses: classes fromPackage: aPackage. classes := aPackage extensionClasses collect: #theNonMetaClass. self browsedEnvironment isSystem ifFalse: [ classes := classes intersection: self browsedEnvironment classes ]. extensions := SortHierarchically buildHierarchyForClasses: classes fromPackage: aPackage. ^ defined, extensions! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 12:59' prior: 17356085! buildTabbedNameOf: anElement | tab result size | tab := ' '. size := cachedHierarchy indentationFor: anElement. result := String new: (size * (tab size)) streamContents: [ :s| 1 to: size do: [:i | s nextPutAll: tab ]]. ^ self selectedPackage ifNil: [result, anElement name] ifNotNil: [:package | ( anElement package = package) ifTrue: [ (result, anElement name) asStringMorph ] ifFalse: [ (result , anElement name",' (', anElement package name,')'")asStringMorph color: self extensionColor;yourself]]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 16:28' prior: 17358491! getClassHierarchy self hierarchyClass ifNil: [^self getClassesList]. ^ cachedHierarchy sortedElements! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 16:28' prior: 17358695! getClassHierarchy2 ^ self selectedPackage ifNil: [{}] ifNotNil:[:package | cachedHierarchy := self buildPackageHierarchyFor: package. cachedHierarchy sortedElements]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 16:28' prior: 17359200! getGroupHierarchy ^ self selectedGroup ifNil: [ {} ] ifNotNil: [:group | cachedHierarchy := self buildGroupHierarchyFor: group. cachedHierarchy sortedElements]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 15:49' prior: 17360725! initialize super initialize. cachedHierarchy := SortHierarchically new. groupsSelection := Dictionary new. packagesSelection := Dictionary new. classesSelection := Dictionary new. shouldUpdateTitle := true. testSemaphore := Semaphore new. sourceTextAreas := OrderedCollection new. contentSelection := nil.! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 16:28' prior: 17362380! loadList2 ^ self ifGroups: [ self showHierarchy ifTrue: [ self getGroupHierarchy ] ifFalse: [ self getGroupsValuesList ]] ifNot: [ self showPackages ifTrue: [ self showHierarchy ifTrue: [ self getClassHierarchy2 ] ifFalse: [ self getPackagesList2 ]] ifFalse: [ cachedHierarchy ifNil: [ self getClassHierarchy ] ifNotNil: [:col | col sortedElements ]]]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 15:50' prior: 17370027! setCachedHierarchyClass: aClass cachedHierarchy := SortHierarchically buildHierarchyFor: aClass.! ! !SortHierarchicallyTests methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 14:44'! asNodes: classCollection ^classCollection collect: [:cl | SortHierarchicallyNode on: cl]! ! !SortHierarchicallyTests methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 16:30'! nodes: nodes shouldBe: correctNodes "sort the collection of nodes. The result should be the correctNodes" | sorted | sorted := SortHierarchically sortNodes: nodes asArray. self assert: sorted size equals: correctNodes size. correctNodes with: sorted do: [:node :sortedNode | self assert: node equals: sortedNode]! ! !SortHierarchicallyTests methodsFor: 'setup' stamp: 'rw 7/20/2006 13:25'! setUp completeTree := self asNodes: {String . ByteString . Symbol . ByteSymbol . WideSymbol . WideString} . partialTree := self asNodes: {String . ByteString . ByteSymbol . WideString}. unrelatedClasses := self asNodes: {ArrayedCollection . BlockClosure . Class . Compiler . Morph . Point}. archivesClasses := self asNodes: {Archive . TarArchive . ZipArchive . ArchiveMember . TarArchiveMember . ZipArchiveMember . ZipFileMember . ZipDirectoryMember . ZipNewFileMember . ZipStringMember . ZipFileConstants}! ! !SortHierarchicallyTests methodsFor: 'private' stamp: 'DamienCassou 3/26/2013 14:46'! sortByNameSize: collection ^collection asSortedCollection: [:x :y | x element name size < y element name size]! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/20/2006 13:24'! testArchivesClassesReversed self nodes: archivesClasses reversed shouldBe: archivesClasses! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/20/2006 13:24'! testArchivesClassesUnchanged self nodes: archivesClasses shouldBe: archivesClasses! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/20/2006 13:24'! testArchivesClassesUnordered self nodes: (self sortByNameSize: archivesClasses) shouldBe: archivesClasses ! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:26'! testCompleteTreeReversed self nodes: completeTree reversed shouldBe: completeTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:26'! testCompleteTreeUnchanged self nodes: completeTree shouldBe: completeTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:33'! testCompleteTreeUnordered self nodes: (self sortByNameSize: completeTree) shouldBe: completeTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'DamienCassou 3/26/2013 16:30'! testOneClass | pointNode sorted | pointNode := SortHierarchicallyNode on: Point. sorted := SortHierarchically sortNodes: (Array with: pointNode). self assert: sorted size = 1. self assert: (sorted includes: pointNode)! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:29'! testPartialTreeReversed self nodes: partialTree reversed shouldBe: partialTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:27'! testPartialTreeUnchanged self nodes: partialTree shouldBe: partialTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:34'! testPartialTreeUnsorted self nodes: (self sortByNameSize: partialTree) shouldBe: partialTree! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:31'! testUnrelatedClassesReversed self nodes: unrelatedClasses reversed shouldBe: unrelatedClasses! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:31'! testUnrelatedClassesUnchanged self nodes: unrelatedClasses shouldBe: unrelatedClasses! ! !SortHierarchicallyTests methodsFor: 'tests' stamp: 'rw 7/7/2006 17:34'! testUnrelatedClassesUnsorted self nodes: (self sortByNameSize: unrelatedClasses) shouldBe: unrelatedClasses! ! AbstractNautilusUI removeSelector: #sortClassesInCachedHierarchy:b:! AbstractNautilusUI removeSelector: #buildHierarchyForClasses:fromPackage:! AbstractNautilusUI removeSelector: #buildHierarchyForClasses:! AbstractNautilusUI removeSelector: #buildHierarchyFor:! "Nautilus"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(3 May 2013 2:20:10 pm) Pharo.image priorSource: 3010121! ----STARTUP----an Array(3 May 2013 2:26:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 2:26:54 pm) Pharo-30092.image priorSource: 3036247! ----STARTUP----an Array(3 May 2013 2:47:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 14:44' prior: 36564847! commentForCurrentUpdate ^ '10494 EyeInspector cannot inspect dictionaries https://pharo.fogbugz.com/f/cases/10494 10486 Cannot edit package cache in monticello browser https://pharo.fogbugz.com/f/cases/10486 10492 Sharing mc repositories between all packages https://pharo.fogbugz.com/f/cases/10492'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 14:44'! script190 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1414.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-EstebanLorenzano.145.mcz Keymapping-KeyCombinations-MarcusDenker.8.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.37.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.46.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.10.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.137.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 14:44'! update30093 "self new update30093" self withUpdateLog: '10494 EyeInspector cannot inspect dictionaries https://pharo.fogbugz.com/f/cases/10494 10486 Cannot edit package cache in monticello browser https://pharo.fogbugz.com/f/cases/10486 10492 Sharing mc repositories between all packages https://pharo.fogbugz.com/f/cases/10492'. self loadTogether: self script190 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeCollectionInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 14:00'! addAllInstVars: elements "Do nothing"! ! !EyeCollectionInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 14:00'! addInstancesVariable: elements "Do nothing"! ! !EyeCompiledMethodInspector methodsFor: 'list' stamp: 'ClementBera 5/3/2013 14:17' prior: 36485778! addVariableFields: elements self object initialPC to: self object size do: [ :index | elements add: (DynamicEyeElement host: self object label: 'bc ', index asString value: (self object at: index) asString)].! ! !MCDirectoryRepository methodsFor: '*MonticelloGUI' stamp: 'GuillermoPolito 5/3/2013 12:06'! openAndEditTemplateCopy ^self class morphicConfigure! ! !Dictionary class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 5/3/2013 13:58'! eyeClass ^ EyeDictionaryInspector! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'GuillermoPolito 5/3/2013 13:32' prior: 25162392! addSlice (MCSliceMaker openFor: self window) ifNotNil: [:sliceInfo | workingCopy := sliceInfo makeSlice. workingCopy ifNotNil: [ workingCopyWrapper := MCDependentsWrapper with: workingCopy model: self. self repositorySelection: 0.]]. self workingCopyListChanged; changed: #workingCopySelection; repositoryListChanged. self changedButtons. ! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'GuillermoPolito 5/3/2013 13:31' prior: 25168635! repository ^ repository! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'GuillermoPolito 5/3/2013 13:25' prior: 25187581! repositoryGroup ^MCRepositoryGroup default! ! EyeSetInspector removeSelector: #addInstancesVariable:! EyeDictionaryInspector removeSelector: #addInstancesVariable:! "MonticelloGUI"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(3 May 2013 2:47:10 pm) Pharo.image priorSource: 3036441! ----STARTUP----an Array(3 May 2013 2:54:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 2:54:18 pm) Pharo-30093.image priorSource: 3048818! ----STARTUP----an Array(3 May 2013 3:21:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 15:19' prior: 36591167! commentForCurrentUpdate ^ '10498 KeyStroke events broken on new list model https://pharo.fogbugz.com/f/cases/10498 10495 EyeInspector has no resizable panels https://pharo.fogbugz.com/f/cases/10495 6398 Keymapping: Put announcements in own subcategory https://pharo.fogbugz.com/f/cases/6398/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 15:19'! script191 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1414.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.48.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.12.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 15:19'! update30094 "self new update30094" self withUpdateLog: '10498 KeyStroke events broken on new list model https://pharo.fogbugz.com/f/cases/10498 10495 EyeInspector has no resizable panels https://pharo.fogbugz.com/f/cases/10495 6398 Keymapping: Put announcements in own subcategory https://pharo.fogbugz.com/f/cases/6398/'. self loadTogether: self script191 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMCompleteMatch commentStamp: '' prior: 0! I am an announcement raised when there is a full match between the key buffer and a shortcut.! !KMPartialMatch commentStamp: '' prior: 24163803! A KMPartialMatch is an announcement raised when a partial match is completed! !KMBuffer commentStamp: '' prior: 0! I am a buffer of keyboard events. I am checked against key combinations to see if there is a match. I am cleared when the current morph loses focus or when a full match announcement is given.! !KMCategoryTarget commentStamp: '' prior: 0! I am the reification of the relation morph<->category, created when a morph gets attached a category of shortcuts.! !KMKeyCombination commentStamp: '' prior: 0! I'm an abstract class representing a key combination. I'm can represent several cases of key presses: - simple key presses: pressing a single key, as a letter or number, or others like tab or space - modified key presses: a simple key + a modifier like shift or alt - option key presses: a list of key presses where only one of them should be valid - chained shortcuts: a sequence of shortcuts My more important protocols are: - matching: contains methods to control if a key combination is equals to other or matches a sequence of keyboard events - combining: defines simple ways to combine shorcut objects, like chaining them or modifying them For more information, look at my subclasses.! !KMKeyCombinationSequence commentStamp: '' prior: 0! I represent a sequence of key combinations. In order to have a match between me and a user's key presses, all user events must match all of my inner shortcuts in the same exact order. To create a sequence of key combinations use the #, message. Like for example: $a command , $b shift! !KMModifiedKeyCombination commentStamp: '' prior: 0! I represent key combinations combining a single key + a modifier. The modifier could be a single modifier key (look at my subclasses) or a combination of them. For example, valid modified key combinations could be: - shift + a - ctrl + shift + c To create a modified key combinations use the #command, #alt, #control or #shift messages. Like for example: $a command $b shift $1 control $z alt! !KMModifier commentStamp: '' prior: 0! I'm an abstract class representing a key modifier. A modifier is a key that is pressed to modify the value of a following key. For example, valid modifiers are Alt, Ctrl, Cmd (only for macosx), Shift. Additionally, I could be a composed modifier, combining several of the named above. For example, I could have a value of Alt + Ctrl.! !KMAltModifier commentStamp: '' prior: 0! I represent the Alt key modifier. Look at my superclass for a more detailed explanaition.! !KMCommandModifier commentStamp: '' prior: 0! I represent the Command key modifier. Look at my superclass for a more detailed explanaition.! !KMComposedModifier commentStamp: '' prior: 0! I represent a composed key modifier. I contain a collection of modifiers that should match with a keyboard event. Look at my superclass for a more detailed explanaition.! !KMCtrlModifier commentStamp: '' prior: 0! I represent the Ctrl key modifier. Look at my superclass for a more detailed explanaition.! !KMShiftModifier commentStamp: '' prior: 0! I represent the Shift key modifier. Look at my superclass for a more detailed explanaition.! !KMNoShortcut commentStamp: '' prior: 34031966! I do not match with any keyboard event. I respond to the Null object pattern, since I represent the inexistance of a key combination.! !KMSingleKeyCombination commentStamp: '' prior: 0! I represent a single key press, the simplest key combination. I match with a keyboard event when that event key is the same as me and the key event is not modified. To create a single key combination use the #asShortcut message. Like for example: $a asShortcut! !KMKeyCombinationChoice commentStamp: '' prior: 0! I representing a choice between key combinations. A keyboard event will match with me when any of my key combinations matches with it.! !KMLog commentStamp: '' prior: 0! I am a simple log utility that can be enabled by sending the #setDebug and disabled by using #removeDebug. I trace the keymapping events.! !KMPlatformSpecificKeyCombination commentStamp: '' prior: 0! I represent a platform specific key combination, one that should only be launched for a particular platform such as windows, unix or mac. I'm a sort of decorator of a key combination.! !KMStorage commentStamp: '' prior: 0! I am a storage of shortcuts. I store and provide facilities to access named and annonimous shortcuts.! !InspectorWrapper commentStamp: '' prior: 36502299! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !KMCompleteMatch commentStamp: '' prior: 36614084! I am an announcement raised when there is a full match between the key buffer and a shortcut.! !KMPartialMatch commentStamp: '' prior: 36614241! A KMPartialMatch is an announcement raised when a partial match is completed! !SpecDebugger class methodsFor: 'specs' stamp: 'ClementBera 5/3/2013 14:46' prior: 36025207! specOptimized ^ SpecLayout composed add: #stack origin: 0@0 corner: 1@0.25; add: #toolbar origin: 0@0.25 corner: 1@0.25 offsetOrigin: 0@0 offsetCorner: 0@25; addHSplitter; add: #code origin: 0@0.25 corner: 1@0.80 offsetOrigin: 0@25 offsetCorner: 0@0; addHSplitter; newRow: [ :r | r add: #receiverInspector origin: 0@0.80 corner: 0.5@1; addSplitter; add: #contextInspector origin: 0.5@0.80 corner: 1@1] top: 0.8; yourself ! ! !KMBuffer commentStamp: '' prior: 36614368! I am a buffer of keyboard events. I am checked against key combinations to see if there is a match. I am cleared when the current morph loses focus or when a full match announcement is given.! !KMCategoryTarget commentStamp: '' prior: 36614619! I am the reification of the relation morph<->category, created when a morph gets attached a category of shortcuts.! !KMKeyCombination commentStamp: '' prior: 36614792! I'm an abstract class representing a key combination. I'm can represent several cases of key presses: - simple key presses: pressing a single key, as a letter or number, or others like tab or space - modified key presses: a simple key + a modifier like shift or alt - option key presses: a list of key presses where only one of them should be valid - chained shortcuts: a sequence of shortcuts My more important protocols are: - matching: contains methods to control if a key combination is equals to other or matches a sequence of keyboard events - combining: defines simple ways to combine shorcut objects, like chaining them or modifying them For more information, look at my subclasses.! !KMKeyCombinationSequence commentStamp: '' prior: 36615553! I represent a sequence of key combinations. In order to have a match between me and a user's key presses, all user events must match all of my inner shortcuts in the same exact order. To create a sequence of key combinations use the #, message. Like for example: $a command , $b shift! !KMModifiedKeyCombination commentStamp: '' prior: 36615907! I represent key combinations combining a single key + a modifier. The modifier could be a single modifier key (look at my subclasses) or a combination of them. For example, valid modified key combinations could be: - shift + a - ctrl + shift + c To create a modified key combinations use the #command, #alt, #control or #shift messages. Like for example: $a command $b shift $1 control $z alt! !KMModifiedKeyCombination methodsFor: 'combining' stamp: 'GuillermoPolito 5/3/2013 14:51' prior: 34024974! modifiedBy: aModifier ^self character asKeyCombination modifiedBy: modifier + aModifier.! ! !KMModifier commentStamp: '' prior: 36616356! I'm an abstract class representing a key modifier. A modifier is a key that is pressed to modify the value of a following key. For example, valid modifiers are Alt, Ctrl, Cmd (only for macosx), Shift. Additionally, I could be a composed modifier, combining several of the named above. For example, I could have a value of Alt + Ctrl.! !KMAltModifier commentStamp: '' prior: 36616745! I represent the Alt key modifier. Look at my superclass for a more detailed explanaition.! !KMCommandModifier commentStamp: '' prior: 36616894! I represent the Command key modifier. Look at my superclass for a more detailed explanaition.! !KMComposedModifier commentStamp: '' prior: 36617048! I represent a composed key modifier. I contain a collection of modifiers that should match with a keyboard event. Look at my superclass for a more detailed explanaition.! !KMCtrlModifier commentStamp: '' prior: 36617275! I represent the Ctrl key modifier. Look at my superclass for a more detailed explanaition.! !KMShiftModifier commentStamp: '' prior: 36617423! I represent the Shift key modifier. Look at my superclass for a more detailed explanaition.! !KMNoShortcut commentStamp: '' prior: 36617576! I do not match with any keyboard event. I respond to the Null object pattern, since I represent the inexistance of a key combination.! !KMSingleKeyCombination commentStamp: '' prior: 36617775! I represent a single key press, the simplest key combination. I match with a keyboard event when that event key is the same as me and the key event is not modified. To create a single key combination use the #asShortcut message. Like for example: $a asShortcut! !KMKeyCombinationChoice commentStamp: '' prior: 36618103! I representing a choice between key combinations. A keyboard event will match with me when any of my key combinations matches with it.! !KMLog commentStamp: '' prior: 36618286! I am a simple log utility that can be enabled by sending the #setDebug and disabled by using #removeDebug. I trace the keymapping events.! !KMPlatformSpecificKeyCombination commentStamp: '' prior: 36618498! I represent a platform specific key combination, one that should only be launched for a particular platform such as windows, unix or mac. I'm a sort of decorator of a key combination.! !KMStorage commentStamp: '' prior: 36618734! I am a storage of shortcuts. I store and provide facilities to access named and annonimous shortcuts.! !NewListModel methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 15:11' prior: 36246260! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 5/3/2013 14:30' prior: 36487008! debuggerSpecOptimized ^ SpecLayout composed add: #list origin: 0@0 corner: 0.33@1; addVSplitter; add: #description origin: 0.33@0 corner: 1@1; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'ClementBera 5/3/2013 14:30' prior: 36488282! inspectorSpecOptimized ^ SpecLayout composed newRow: [ :r | r newColumn: #list right: 0.6; addSplitter; newColumn: #description left: 0.4 ] bottom: 0.3; addHSplitter; newRow: #text top: 0.7; yourself! ! !InspectorWrapper commentStamp: '' prior: 36618901! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !InspectorWrapper methodsFor: 'actions' stamp: 'ClementBera 5/3/2013 14:59' prior: 36504211! diveInto: anObject self inspect: anObject.! ! !NewList methodsFor: 'communication with model' stamp: 'ClementBera 5/3/2013 15:08' prior: 36461489! keyStrokeAction: anEvent ^ self model keyStrokeAction: anEvent! ! "Keymapping-Core"! "Keymapping-KeyCombinations"! "NewList"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(3 May 2013 3:21:11 pm) Pharo.image priorSource: 3049012! ----STARTUP----an Array(3 May 2013 3:27:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 3:27:47 pm) Pharo-30094.image priorSource: 3072911! ----STARTUP----an Array(3 May 2013 4:14:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 16:11' prior: 36603738! commentForCurrentUpdate ^ '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 16:11'! script192 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1415.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.48.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.12.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 16:11'! update30095 "self new update30095" self withUpdateLog: '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '. self loadTogether: self script192 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Time class methodsFor: 'ansi protocol' stamp: 'SvenVanCaekenberghe 5/3/2013 14:44' prior: 36381858! now "Answer a Time representing the time right now - this is a 24 hour clock." ^ self nowLocal! ! !Time class methodsFor: 'current time' stamp: 'SvenVanCaekenberghe 5/3/2013 14:43'! nowLocal "Answer the time since midnight in local timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock \\ 86400000000 . ^ self seconds: microSecondsToday // 1000000 + (DateAndTime localTimeZone offset asSeconds) nanoSeconds: microSecondsToday \\ 1000000 * 1000 ! ! !Time class methodsFor: 'current time' stamp: 'SvenVanCaekenberghe 5/3/2013 14:44'! nowUTC "Answer the time since midnight in UTC timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock \\ 86400000000. ^ self seconds: microSecondsToday // 1000000 nanoSeconds: microSecondsToday \\ 1000000 * 1000 ! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(3 May 2013 4:14:09 pm) Pharo.image priorSource: 3073105! ----STARTUP----an Array(3 May 2013 4:27:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 4:27:29 pm) Pharo-30095.image priorSource: 3084310! ----STARTUP----an Array(3 May 2013 4:38:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 16:34' prior: 36627831! commentForCurrentUpdate ^ '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 16:34'! script193 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1416.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.48.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.12.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 16:34'! update30096 "self new update30096" self withUpdateLog: '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '. self loadTogether: self script193 merge: false. Smalltalk removeFromStartUpList: DateAndTime. ( Process allInstances select: [ :p | | ctx | ctx := p suspendedContext. ctx notNil and: [ ctx method == (Delay>>#wait) and: [ ctx sender sender sender method selector == #secondsWhenClockTicks ] ]]) do: #terminate. . self flushCaches. ! ! "ScriptLoader30"! !DateAndTime commentStamp: '' prior: 36382935! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. ALways positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! !DateAndTime commentStamp: '' prior: 36649486! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. ALways positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! !DateAndTime class methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/3/2013 15:24' prior: 20359360! initialize ClockProvider := Time! ! DateAndTime class removeSelector: #waitForOffsets! DateAndTime class removeSelector: #todayAtNanoSeconds:! DateAndTime class removeSelector: #todayAtMilliSeconds:! DateAndTime class removeSelector: #startUp:! DateAndTime class removeSelector: #milliSecondsSinceMidnight! DateAndTime class removeSelector: #initializeOffsets! "Kernel"! ----End fileIn----! ----QUIT----an Array(3 May 2013 4:38:11 pm) Pharo.image priorSource: 3084504! ----STARTUP----an Array(3 May 2013 4:44:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 4:44:38 pm) Pharo-30096.image priorSource: 3096983! ----STARTUP----an Array(3 May 2013 4:51:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 16:48' prior: 36639230! commentForCurrentUpdate ^ '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 16:48'! script194 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1417.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.23.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.45.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.48.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.12.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.815.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 16:48'! update30097 "self new update30097" self withUpdateLog: '10488 DateAndTime now to use microseconds https://pharo.fogbugz.com/f/cases/10488 '. self loadTogether: self script194 merge: false. ChronologyConstants initialize. . self flushCaches. ! ! "ScriptLoader30"! !ChronologyConstants commentStamp: 'brp 3/12/2004 14:34' prior: 19024512! ChronologyConstants is a SharedPool for the constants used by the Kernel-Chronology classes.! !ChronologyConstants commentStamp: 'brp 3/12/2004 14:34' prior: 36661932! ChronologyConstants is a SharedPool for the constants used by the Kernel-Chronology classes.! !ChronologyConstants class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 5/3/2013 15:49' prior: 19024826! initialize "ChronologyConstants initialize" SqueakEpoch := 2415386. "Julian day number of 1 Jan 1901" SecondsInDay := 86400. MicrosecondsInDay := SecondsInDay * 1e6. SecondsInHour := 3600. SecondsInMinute := 60. NanosInSecond := 10 raisedTo: 9. NanosInMillisecond := 10 raisedTo: 6. DayNames := #(Sunday Monday Tuesday Wednesday Thursday Friday Saturday). MonthNames := #(January February March April May June July August September October November December). DaysInMonth := #(31 28 31 30 31 30 31 31 30 31 30 31). ! ! !DateAndTime class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/3/2013 15:38' prior: 36383712! now "Answer the current date and time expressed in local time. [ 10000 timesRepeat: [ self now. ] ] timeToRun / 10000.0 . " | nanoTicks | nanoTicks := self clock microsecondClockValue * 1e3. ^ self basicNew setJdn: SqueakEpoch seconds: 0 nano: nanoTicks offset: self localOffset! ! !DateAndTime class methodsFor: 'system queries' stamp: 'SvenVanCaekenberghe 5/3/2013 15:39' prior: 36384102! totalSeconds "Answer the total seconds ellapsed since the Squeak epoch: 1 January 1901" ^ self clock totalSeconds! ! !Time class methodsFor: 'current time' stamp: 'SvenVanCaekenberghe 5/3/2013 15:36' prior: 36638038! nowLocal "Answer the time since midnight in local timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock \\ MicrosecondsInDay. ^ self seconds: microSecondsToday // 1000000 + DateAndTime localTimeZone offset asSeconds nanoSeconds: microSecondsToday \\ 1000000 * 1000! ! !Time class methodsFor: 'current time' stamp: 'SvenVanCaekenberghe 5/3/2013 15:36' prior: 36638443! nowUTC "Answer the time since midnight in UTC timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock \\ MicrosecondsInDay. ^ self seconds: microSecondsToday // 1000000 nanoSeconds: microSecondsToday \\ 1000000 * 1000! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(3 May 2013 4:51:11 pm) Pharo.image priorSource: 3097177! ----STARTUP----an Array(3 May 2013 4:57:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 4:57:42 pm) Pharo-30097.image priorSource: 3109860! ----STARTUP----an Array(3 May 2013 5:41:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/3/2013 17:30' prior: 36651903! commentForCurrentUpdate ^ '10497 Suggestions in debugger and message browser https://pharo.fogbugz.com/f/cases/10497 10464 Always warn when sources or changes are not available https://pharo.fogbugz.com/f/cases/10464 10499 Eyeinspector and spec debugger create excessive number of processes https://pharo.fogbugz.com/f/cases/10499'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/3/2013 17:31'! script195 ^ '10497-Suggestions-in-debugger-and-message-browser-MarcusDenker.2.mcz AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.154.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1417.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.797.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1409.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.14.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.530.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/3/2013 17:31'! update30098 "self new update30098" self withUpdateLog: '10497 Suggestions in debugger and message browser https://pharo.fogbugz.com/f/cases/10497 10464 Always warn when sources or changes are not available https://pharo.fogbugz.com/f/cases/10464 10499 Eyeinspector and spec debugger create excessive number of processes https://pharo.fogbugz.com/f/cases/10499'. self loadTogether: self script195 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MockContainer commentStamp: '' prior: 0! I'm only a fake container, since in some cases to build a context we use the wraped model, and build a full container isn't so simple... ! !SmalltalkImage commentStamp: 'StephaneDucasse 6/7/2011 15:48' prior: 33483664! My singleton is a central entry point to the system. It has many roles and responsibilities (to be documented) - startup/shutdown image - source management - namespace access - tool access - platform access - VM information and parameters Startup ----------- At startup and shutdown the image execute the methods startUp: and shutdown: of registered classes (registered using addToStartUpList:, addToShutDownList:, ... methods and friends). Startup phases During the first stage of start up the UI manager, the default uimanager is switched to a specific non interactive ui manager (StartupUIManager). Note that this specific non interactive UIManager kills the system on any attempt to open windows and interaction. So be warned, don't use interaction in the first phase. Then all registered classes execute their start up procedures (which should not imply interactive behavior). After startup list is finished, any deferred startup actions are executed, which you can add using the method addDeferredStartupAction: method. ! !SugsAbstractContext commentStamp: '' prior: 35723221! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SugsDebuggerContext commentStamp: '' prior: 0! I know how to talk with a debugger and extract the information needed for the suggestions :)! !SugsMockContext commentStamp: '' prior: 0! I'm a mock context with lot of stuff hardcoded. I'm used in the tests to make easier the configuration for detecting diferents context.! !SugsNautilusContext commentStamp: '' prior: 0! The implementation who asumes that my model it's a nautilus object.! !SugsRubricContext commentStamp: '' prior: 0! The implementation for a Rubric model.! !SugsSmalltalkEditorTextModelContext commentStamp: '' prior: 0! I know how to use a Text model that came from a SmalltalkEditor and extract the information needed for the suggestions :)! !SugsMenuBuilder commentStamp: '' prior: 0! I'm the one who finds the best suggestion for your selection. I also add the options to the displayed menus.! !SugsSuggestion commentStamp: '' prior: 35736869! I'm the representation from a suggestion that can be executed. I have some information related to the suggestion.! !SugsAccessesToInstVar commentStamp: '' prior: 0! I know how to find accesses to an instance var! !SugsAddParameter commentStamp: '' prior: 0! I know how to add a parameter to a method! !SugsBrowseClassReferences commentStamp: '' prior: 0! I know how to browse references from a class! !SugsCreateClassVarAccessors commentStamp: '' prior: 0! I know how to create accessors for a class var! !SugsCreateInstanceVarAccessors commentStamp: '' prior: 0! I know how to create accessors for an instance var! !SugsDelegateMethod commentStamp: '' prior: 0! I know how to delegate the selected method in an instance variable and move the code to a class! !SugsExtractMethod commentStamp: '' prior: 0! If you want to extract code in a new method I'm your guy! !SugsExtractToLocalVariable commentStamp: '' prior: 0! The classic option to extract a line of code in a local variable! !SugsFindImplementors commentStamp: '' prior: 0! I know how to find implementors for a message! !SugsFindSenders commentStamp: '' prior: 0! I know how to find senders from a message! !SugsFormatCode commentStamp: '' prior: 0! I know how to format the code! !SugsInline commentStamp: '' prior: 0! I know how to inline the method from a message! !SugsPullUpMethod commentStamp: '' prior: 0! I know how to pull up the method to my superclass! !SugsPushDownMethod commentStamp: '' prior: 0! I know how to push down the method to my subclass! !SugsRemoveMethod commentStamp: '' prior: 0! I know how to remove a mehod! !SugsRemoveParameter commentStamp: '' prior: 0! I know how to remove a parameter from a method! !SugsRenameClass commentStamp: '' prior: 0! I know how to rename a class! !SugsRenameClassVar commentStamp: '' prior: 0! I know how to rename a class variable! !SugsRenameInstanceVar commentStamp: '' prior: 0! I know how to rename an instance variable! !SugsRenameMethod commentStamp: '' prior: 0! I know how to rename methods! !SugsRenameTemporaryVar commentStamp: '' prior: 0! I know how to rename a local variable.! !SugsStoresIntoInstVar commentStamp: '' prior: 0! I know how to find stores into for an instance var! !SugsSwapMethod commentStamp: '' prior: 0! I know how to move a method from instance side to class side and the oposit, depending the method.! !SugsUseAccessorsForClassVar commentStamp: '' prior: 0! I know how to replace the call of a class variable for the use of an accessor and create accessors if it's necessary.! !SugsSuggestionFactory commentStamp: '' prior: 0! I'm the guy who knows how to create the suggestions. I also categorize them.! !SystemSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 5/1/2013 12:57' prior: 51672364! systemSettingOn: aBuilder (aBuilder group: #pharoSystem) label: 'System' translated; description: 'General system settings' translated; with: [ (aBuilder setting: #serverMode) label: 'Server mode' translated; target: WorldState; description: 'If enabled, then each main rendering loop will always wait a complete delay of 50ms' translated. (aBuilder setting: #shouldDownloadSourcesFile) label: 'Download sources file' translated; target: SmalltalkImage; description: 'If true, when no sources file can be found, the file will be downloaded.' translated. (aBuilder setting: #useLocale) label: 'Use locale' translated; target: Locale; selector: #activated; description: 'Use the system locale to set the system language at startup.' translated] ! ! !MockContainer commentStamp: '' prior: 36675271! I'm only a fake container, since in some cases to build a context we use the wraped model, and build a full container isn't so simple... ! !MockContainer class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/29/2013 15:23'! for: model ^ self new model: model; yourself.! ! !MockContainer methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/29/2013 15:21'! model ^ model.! ! !MockContainer methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/29/2013 15:21'! model: anObject model := anObject! ! !SmalltalkImage commentStamp: 'StephaneDucasse 6/7/2011 15:48' prior: 36675490! My singleton is a central entry point to the system. It has many roles and responsibilities (to be documented) - startup/shutdown image - source management - namespace access - tool access - platform access - VM information and parameters Startup ----------- At startup and shutdown the image execute the methods startUp: and shutdown: of registered classes (registered using addToStartUpList:, addToShutDownList:, ... methods and friends). Startup phases During the first stage of start up the UI manager, the default uimanager is switched to a specific non interactive ui manager (StartupUIManager). Note that this specific non interactive UIManager kills the system on any attempt to open windows and interaction. So be warned, don't use interaction in the first phase. Then all registered classes execute their start up procedures (which should not imply interactive behavior). After startup list is finished, any deferred startup actions are executed, which you can add using the method addDeferredStartupAction: method. ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'MarcusDenker 5/1/2013 12:58' prior: 34628059! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups." "Note: SourcesName and imageName are full paths; changesName is a local name." | sources changes msg wmsg | msg := 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'. wmsg := 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'. (sources := self openSources: self sourcesName forImage: LastImagePath) ifNil: [ [ self downloadSources ] on: MessageNotUnderstood do: [ :exception | "ignore" ]. sources := self openSources: self sourcesName forImage: LastImagePath ]. changes := self openChanges: self changesName forImage: LastImagePath. ((sources isNil or: [ sources atEnd ])) ifTrue: [ OSPlatform isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , self sourcesName) ]. changes isNil ifTrue: [ self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. changes notNil ifTrue: [ changes isReadOnly ifTrue: [ self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self inform: 'The changes file named ' , self changesName , ' has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.' ] ]. SourceFiles := Array with: sources with: changes! ! !SugsAbstractContext commentStamp: '' prior: 36676606! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SugsAbstractContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 5/3/2013 14:51'! contextFor: aModel (aModel respondsTo: #sugsContext) ifTrue: [ ^ aModel sugsContext ]. (aModel model respondsTo: #sugsContext) ifTrue: [ ^ aModel model sugsContext ]. self error: 'Not defined context for ' , aModel asString! ! !SugsAbstractContext class methodsFor: 'build' stamp: 'GiselaDecuzzi 5/2/2013 15:23'! model: theModel ^ self new model: theModel; yourself.! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 15:36' prior: 35723985! browsedEnvironment ^RBBrowserEnvironment new! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 13:29'! formatSourceCode | formatted | formatted := selectedNode formattedCode. formatted = self code ifTrue: [ ^ self ]. self sourceTextArea editString: formatted; hasUnacceptedEdits: true! ! !SugsAbstractContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 5/2/2013 15:15'! model: aModel model := aModel! ! !SugsAbstractContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/2/2013 17:35'! selectedNodeText selectedNode ifNil: [ ^ '' ]. (selectedNode respondsTo: #selector)ifTrue: [ ^self selectedMessageName ]. ^selectedNode name copyFrom: 1 to: (35 min: selectedNode name size). ! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 5/2/2013 17:12' prior: 35726503! selectedVariableName ^selectedNode name! ! !SugsAbstractContext methodsFor: 'tools' stamp: 'GiselaDecuzzi 5/2/2013 16:13' prior: 35726764! tools ^Smalltalk tools systemNavigation! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 16:45' prior: 35726891! window ^ self sourceTextArea ownerThatIsA: SystemWindow! ! !SugsDebuggerContext commentStamp: '' prior: 36676812! I know how to talk with a debugger and extract the information needed for the suggestions :)! !SugsDebuggerContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 15:38'! selectedClass ^model selectedClass .! ! !SugsDebuggerContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 16:11'! selectedMethod ^model selectedContext method ! ! !SugsDebuggerContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 15:40'! sourceTextArea ^ (model dependents at: 3).! ! !SugsMockContext commentStamp: '' prior: 36676962! I'm a mock context with lot of stuff hardcoded. I'm used in the tests to make easier the configuration for detecting diferents context.! !SugsMockContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 15:36'! browsedEnvironment self subclassResponsibility .! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/26/2013 16:28'! sourceTextArea ^ PluggableTextMorph new.! ! !SugsNautilusContext commentStamp: '' prior: 36677159! The implementation who asumes that my model it's a nautilus object.! !SugsRubricContext commentStamp: '' prior: 36677286! The implementation for a Rubric model.! !SugsRubricContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/25/2013 11:41'! code ^ model morph model code.! ! !SugsRubricContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/25/2013 11:44'! selectedClass ^ Smalltalk globals at: model morph model className! ! !SugsRubricContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/25/2013 11:48'! selectedInterval ^ model selectionInterval! ! !SugsRubricContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/26/2013 13:22'! selectedMethod ^ self selectedClass methodDict at: model morph model selector ifAbsent:[self selectedClass class methodDict at: model morph model selector ifAbsent:[nil]].! ! !SugsRubricContext methodsFor: 'initialize' stamp: 'GiselaDecuzzi 4/26/2013 16:22'! sourceTextArea ^ model morph.! ! !SugsSmalltalkEditorTextModelContext commentStamp: '' prior: 36677402! I know how to use a Text model that came from a SmalltalkEditor and extract the information needed for the suggestions :)! !SugsSmalltalkEditorTextModelContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! selectedClass ^model selectedBehavior.! ! !SugsSmalltalkEditorTextModelContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! selectedMethod ^model owner selectedMessage.! ! !SugsSmalltalkEditorTextModelContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! sourceTextArea ^ (model dependents at: 1).! ! !SugsSmalltalkEditorTextModelContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:57'! tools ^ model systemNavigation! ! !SugsMenuBuilder commentStamp: '' prior: 36677581! I'm the one who finds the best suggestion for your selection. I also add the options to the displayed menus.! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/3/2013 14:51' prior: 35734126! addFindSuggestionsToSourceCodeMenu: aBuilder | model | model := aBuilder model. aBuilder item: 'Suggestions'; selector: #showMenuFor:; arguments: {model}; target: self; keyText: 't'; order: 0. aBuilder items last withSeparatorAfter . ! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/3/2013 14:41' prior: 35735076! buildSmartActionsShortcuts: aBuilder (aBuilder shortcut: #smartSuggestions) category: #SmalltalkEditor default: $t command mac| $t ctrl unix | $t ctrl do: [ :morph | morph smartSuggestions ] description: 'Browse suggestions based on selections'. ! ! !SugsMenuBuilder class methodsFor: 'private' stamp: 'GiselaDecuzzi 4/29/2013 13:14' prior: 35735435! findBestNodeFor: context | root node| root := context selectedMethod ifNil:[ RBParser parseFaultyExpression: context code] ifNotNil: [ RBParser parseFaultyMethod: context code]. root annotateInClass: context selectedClass. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! !SugsMenuBuilder class methodsFor: 'suggestions' stamp: 'GiselaDecuzzi 5/2/2013 16:54' prior: 35735837! findSuggestionsFor: context "Finds the best suggestions for the context passed as a parameter" | node suggestions | node := self findBestNodeFor: context . node ifNil: [ ^OrderedCollection new ]. suggestions := node ifNotNil: [ node specialCommands ] ifNil: [ #() ] . suggestions do:[:sugg| sugg context: context]. ^suggestions select: [:sugg | sugg isValidForContext ] ! ! !SugsMenuBuilder class methodsFor: 'show' stamp: 'GiselaDecuzzi 5/3/2013 14:52' prior: 35736264! showMenuFor: model | suggs menu context | context := [ SugsAbstractContext contextFor: model ] ifError: [ "If we aren't in the right context we will fail in populate the suggestions so... better not" ^ self ]. suggs := SugsMenuBuilder findSuggestionsFor: context. menu := UIManager default newMenuIn: model model for: model. menu addTitle: 'Suggestions > ' translated , context selectedNodeText. suggs do: [ :aSugg | (menu add: aSugg label target: aSugg action: #execute) icon: aSugg icon ]. context sourceTextArea selectFrom: context nodeStart to: context nodeStop. menu setInvokingView: self. menu invokeModal! ! !SugsSuggestion commentStamp: '' prior: 36677753! I'm the representation from a suggestion that can be executed. I have some information related to the suggestion.! !SugsAccessesToInstVar commentStamp: '' prior: 36677930! I know how to find accesses to an instance var! !SugsAccessesToInstVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:04'! execute ^context tools browseAllAccessesTo: context selectedVariableName from: context selectedClass! ! !SugsAccessesToInstVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:05'! isValidForContext ^ context hasClassUnImplementedAccessors! ! !SugsAccessesToInstVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:05'! label ^'Accesses to...' translated! ! !SugsAddParameter commentStamp: '' prior: 36678035! I know how to add a parameter to a method! !SugsAddParameter methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:26'! execute (NautilusRefactoring model: context) addAParameterFor: context selectedMethod! ! !SugsAddParameter methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:26'! label ^'Add a parameter' translated! ! !SugsBrowseClassReferences commentStamp: '' prior: 36678144! I know how to browse references from a class! !SugsBrowseClassReferences methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:21'! execute context tools browseClassRefsOf: context bindedSelectedClass. ! ! !SugsBrowseClassReferences methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:21'! label ^ 'Browse references' translated ! ! !SugsCreateClassVarAccessors commentStamp: '' prior: 36678258! I know how to create accessors for a class var! !SugsCreateClassVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:29'! execute (NautilusRefactoring model: context) accessorsClassVarNamed: context selectedVariableName from: context selectedClass! ! !SugsCreateClassVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:30'! isValidForContext ^context hasClassUnImplementedAccessors ! ! !SugsCreateClassVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:29'! label ^'Create accessors' translated! ! !SugsCreateInstanceVarAccessors commentStamp: '' prior: 36678377! I know how to create accessors for an instance var! !SugsCreateInstanceVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:57'! execute (NautilusRefactoring model: context) accessorsInstVarNamed: context selectedVariableName from: context selectedClass! ! !SugsCreateInstanceVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:57'! isValidForContext ^ context hasUnImplementedAccessors! ! !SugsCreateInstanceVarAccessors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:57'! label ^ 'Create Accesors' translated! ! !SugsDelegateMethod commentStamp: '' prior: 36678488! I know how to delegate the selected method in an instance variable and move the code to a class! !SugsDelegateMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:28'! execute (NautilusRefactoring model: context) moveMethodFor: context selectedMethod! ! !SugsDelegateMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:28'! isValidForContext ^ context hasInstanceVariable! ! !SugsDelegateMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:27'! label ^'Delegate selected method' translated! ! !SugsExtractMethod commentStamp: '' prior: 36678643! If you want to extract code in a new method I'm your guy! !SugsExtractMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 16:52'! execute (NautilusRefactoring model: context) extractToMethodTextSelection! ! !SugsExtractMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:12'! label ^'Extract method' translated! ! !SugsExtractToLocalVariable commentStamp: '' prior: 36678768! The classic option to extract a line of code in a local variable! !SugsExtractToLocalVariable methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 16:59'! execute (NautilusRefactoring model: context) extractToTempTextSelection! ! !SugsExtractToLocalVariable methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 16:59'! label ^ 'Extract local' translated! ! !SugsFindImplementors commentStamp: '' prior: 36678895! I know how to find implementors for a message! !SugsFindImplementors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:20'! execute context tools browseImplementorsOf: context selectedMessageName name: 'Implementors of ' , context selectedMessageName autoSelect: nil ! ! !SugsFindImplementors methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:20'! label ^ 'Implementors' translated! ! !SugsFindSenders commentStamp: '' prior: 36678998! I know how to find senders from a message! !SugsFindSenders methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:22'! execute context tools browseSendersOf: context selectedMessageName name: 'Senders of ' translated , context selectedMessageName autoSelect: nil! ! !SugsFindSenders methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:22'! label ^ 'Senders' translated! ! !SugsFormatCode commentStamp: '' prior: 36679096! I know how to format the code! !SugsFormatCode methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:40'! execute context formatSourceCode! ! !SugsFormatCode methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:52'! label ^'Format method' translated! ! !SugsInline commentStamp: '' prior: 36679178! I know how to inline the method from a message! !SugsInline methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:23'! execute (NautilusRefactoring model: context) inlineMethodBetween: context selectedInterval from: context selectedMethod! ! !SugsInline methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:23'! label ^'Inline method' translated! ! !SugsPullUpMethod commentStamp: '' prior: 36679283! I know how to pull up the method to my superclass! !SugsPullUpMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:29'! execute (NautilusRefactoring model: context) pullUpMethodsFor: (OrderedCollection with: context selectedMethod)! ! !SugsPullUpMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:30'! label ^ 'Pull Up' translated! ! !SugsPushDownMethod commentStamp: '' prior: 36679393! I know how to push down the method to my subclass! !SugsPushDownMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:31'! execute (NautilusRefactoring model: context) pushDownMethodsFor: (OrderedCollection with: context selectedMethod)! ! !SugsPushDownMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:32'! isValidForContext ^ context hasSubclasses! ! !SugsPushDownMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:31'! label ^'Push Down' translated! ! !SugsRemoveMethod commentStamp: '' prior: 36679501! I know how to remove a mehod! !SugsRemoveMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:51'! execute (NautilusRefactoring model: context) removeMethodsFor: (OrderedCollection with: context selectedMethod)! ! !SugsRemoveMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:51'! label ^'Remove method' translated! ! !SugsRemoveParameter commentStamp: '' prior: 36679591! I know how to remove a parameter from a method! !SugsRemoveParameter methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:51'! execute (NautilusRefactoring model: context) removeParameterFor: context selectedMethod ! ! !SugsRemoveParameter methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:52'! isValidForContext ^ context hasParameters! ! !SugsRemoveParameter methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:52'! label ^'Remove parameter' translated! ! !SugsRenameClass commentStamp: '' prior: 36679695! I know how to rename a class! !SugsRenameClass methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:20'! execute (NautilusRefactoring model: context) renameClass: context bindedSelectedClass.! ! !SugsRenameClass methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:26'! label ^'Rename class' translated! ! !SugsRenameClassVar commentStamp: '' prior: 36679784! I know how to rename a class variable! !SugsRenameClassVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:31'! execute (NautilusRefactoring model: context) renameClassVarNamed: context selectedVariableName from: context selectedClass! ! !SugsRenameClassVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:31'! label ^ 'Rename' translated! ! !SugsRenameInstanceVar commentStamp: '' prior: 36679885! I know how to rename an instance variable! !SugsRenameInstanceVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:16'! execute (NautilusRefactoring model: context) renameInstVarNamed: context selectedVariableName from: context selectedClass! ! !SugsRenameInstanceVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:17'! label ^'Rename' translated! ! !SugsRenameMethod commentStamp: '' prior: 36679985! I know how to rename methods! !SugsRenameMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 16:48'! execute (NautilusRefactoring model: context) renameMethodFor: context selectedMethod ! ! !SugsRenameMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 16:48'! label ^ 'Rename' translated! ! !SugsRenameTemporaryVar commentStamp: '' prior: 36680078! I know how to rename a local variable.! !SugsRenameTemporaryVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:18'! execute (NautilusRefactoring model: context) renameTemporaryNamed: context selectedVariableName Between: (context nodeStart to: context nodeStop) from: context selectedMethod! ! !SugsRenameTemporaryVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 17:18'! label ^ 'Rename' translated! ! !SugsStoresIntoInstVar commentStamp: '' prior: 36680180! I know how to find stores into for an instance var! !SugsStoresIntoInstVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:18'! execute context tools browseAllStoresInto: context selectedVariableName from: context selectedClass! ! !SugsStoresIntoInstVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 15:18'! label ^'Stores Into...' translated! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/30/2013 14:24'! icon: icon position: position ^ self new icon: icon; position: position; yourself.! ! !SugsSuggestion class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/30/2013 14:27'! icon: icon position: position keyText: key ^ self new icon: icon; position: position; keyText: key; yourself.! ! !SugsSwapMethod commentStamp: '' prior: 36680287! I know how to move a method from instance side to class side and the oposit, depending the method.! !SugsUseAccessorsForClassVar commentStamp: '' prior: 36680455! I know how to replace the call of a class variable for the use of an accessor and create accessors if it's necessary.! !SugsUseAccessorsForClassVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:54'! execute (NautilusRefactoring model: context) abstractClassVarFrom: context selectedClass! ! !SugsUseAccessorsForClassVar methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/30/2013 14:54'! label ^'Use accessor' translated! ! !SugsSuggestionFactory commentStamp: '' prior: 36680636! I'm the guy who knows how to create the suggestions. I also categorize them.! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/30/2013 14:58' prior: 35744612! createAccesorsFor ^ SugsCreateInstanceVarAccessors icon: UITheme current smallLanguageIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/30/2013 15:07' prior: 35745061! createAccessesToVariable ^ SugsAccessesToInstVar icon: UITheme current smallInspectItIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/30/2013 14:59' prior: 35745497! createAccessors ^ SugsCreateClassVarAccessors icon: UITheme current smallLanguageIcon position: 30 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:26' prior: 35745950! createAddParameter ^ SugsAddParameter icon: UITheme current smallPushpinIcon position: 200! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 4/30/2013 14:59' prior: 35746291! createBrowseReferences ^ SugsBrowseClassReferences icon: UITheme current smallInspectItIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/30/2013 16:52' prior: 35746906! createExtractMethod ^ SugsExtractMethod icon: UITheme current smallRedoIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/30/2013 16:59' prior: 35747254! createExtractToLocalVariable ^ SugsExtractToLocalVariable icon: UITheme current smallJumpIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/30/2013 15:21'! createFindImplementors ^ SugsFindImplementors icon: UITheme current smallFindIcon position: 20 keyText: 'm'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/30/2013 15:23'! createFindSenders ^ SugsFindSenders icon: UITheme current smallFindIcon position: 10 keyText: 'n'! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 4/30/2013 17:00' prior: 35748490! createFormatSourceCode ^ SugsFormatCode icon: UITheme current smallJustifiedIcon position: 0 keyText: 'u'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 4/30/2013 15:24' prior: 35748841! createInline ^ SugsInline icon: UITheme current smallRightFlushIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:28' prior: 35749214! createMoveMethod ^ SugsDelegateMethod icon: UITheme current smallRedoIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:30' prior: 35749617! createPullUp ^ SugsPullUpMethod icon: UITheme current smallRedoIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:32' prior: 35749969! createPushDown ^ SugsPushDownMethod icon: UITheme current smallUndoIcon position: 101 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:52' prior: 35750380! createRemoveMethod ^ SugsRemoveMethod icon: UITheme current smallCancelIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 15:52' prior: 35750745! createRemoveParameter ^ SugsRemoveParameter icon: UITheme current smallCancelIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 4/30/2013 14:59' prior: 35751144! createRenameClass ^ SugsRenameClass icon: UITheme current smallLanguageIcon position: 20 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/30/2013 14:58' prior: 35751499! createRenameClassVariable ^ SugsRenameClassVar icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/30/2013 16:51' prior: 35751894! createRenameMethod ^ SugsRenameMethod icon: UITheme current smallLanguageIcon position: 10 keyText: 'r,m'! ! !SugsSuggestionFactory class methodsFor: 'temp-var' stamp: 'GiselaDecuzzi 4/30/2013 17:18' prior: 35752245! createRenameTemporaryVariable ^ SugsRenameTemporaryVar icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/30/2013 15:17' prior: 35752712! createRenameVariable ^ SugsRenameInstanceVar icon: UITheme current smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/30/2013 14:58' prior: 35753306! createUseAccessorToVar ^ SugsUseAccessorsForClassVar icon: UITheme current smallLanguageIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/30/2013 15:19' prior: 35754177! createVariableStoresInto ^ SugsStoresIntoInstVar icon: UITheme current smallInspectItIcon position: 60! ! !SugsContextTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/29/2013 11:38'! rubricInstance ^ (Smalltalk at: #RubSmalltalkEditor ifAbsent: [ ^ nil ]) new! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:21'! testContextForNautilusItsANautilusContext | nautilus | nautilus := NautilusUI new. self assert: (SugsAbstractContext contextFor: nautilus) class equals: SugsNautilusContext.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 4/29/2013 11:38'! testContextForRubricItsARubricContext | rubric | rubric := self rubricInstance. rubric ifNotNil: [ self assert: (SugsAbstractContext contextFor: rubric) class equals: SugsRubricContext ]! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 16:49'! testDebuggerIsAValidContext | debugger | debugger := Debugger new. self assert: (SugsAbstractContext contextFor: debugger) class equals: SugsDebuggerContext .! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:58'! testSmalltalkEditorIsANotValidContext | stEditor | stEditor := SmalltalkEditor new. self should: [SugsAbstractContext contextFor: stEditor] raise: Error description: 'Not defined context for ', stEditor asString.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:18'! testTetModelIsAValidContext | textModel | textModel := TextModel new. self assert: (SugsAbstractContext contextFor: textModel) class equals: SugsSmalltalkEditorTextModelContext.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:21' prior: 35702636! testWorkspaceIsNotAValidContext | st | st := Workspace new. self should: [SugsAbstractContext contextFor: st] raise: Error description: 'Not defined context for ', st asString! ! !PluggableTextMorph methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/3/2013 14:42' prior: 35754542! smartSuggestions self handleEdit: [textMorph editor smartSuggestions]! ! !InspectorWrapper methodsFor: 'updating' stamp: 'ClementBera 5/3/2013 15:18' prior: 36559697! updateInspectorFrom: oldInspector self updateTitle. self inspector ifNil: [ ^ self ]. self inspector list handlesDoubleClick: true; doubleClickAction: [ self dive ]. self canBeRefreshed ifFalse: [ ^ self ]. self needRebuild: false. self buildWithSpec: oldInspector spec selector. oldInspector close. "kill the update process"! ! !SmalltalkEditor methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/3/2013 14:42' prior: 35702206! smartSuggestions "Open suggested actions based on the selection" SugsMenuBuilder showMenuFor: self. ! ! !TextModel methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/2/2013 14:07'! owner ^owner! ! !TextModel methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/2/2013 13:56'! sugsContext ^ SugsSmalltalkEditorTextModelContext model: self.! ! !NautilusUI methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/2/2013 09:52'! sugsContext ^ SugsNautilusContext model: self.! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 5/3/2013 15:27' prior: 36560092! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorWrapper). (#contextInspector -> #EyeDebuggerContextInspector)}. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text | self recompileMethodTo: text string inContext: self stack selectedItem ]. self setStackMenu. self setFocusOrder! ! !Debugger methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/2/2013 15:24'! sugsContext ^SugsDebuggerContext model: self! ! SugsSuggestionFactory class removeSelector: #createFindSendersCommand! SugsSuggestionFactory class removeSelector: #createFindImplementorsCommand! SugsContextTest removeSelector: #testANautilusObjectIsAValidContext! SugsAbstractContext class removeSelector: #isAValidContext:! SmalltalkImage removeSelector: #checkSourcesFileAvailability! SmalltalkImage removeSelector: #checkChangesFileAvailability! SmalltalkImage class removeSelector: #checkSourcesFileAvailability:! SmalltalkImage class removeSelector: #checkSourcesFileAvailability! SmalltalkImage class removeSelector: #checkChangesFileAvailability:! SmalltalkImage class removeSelector: #checkChangesFileAvailability! SugsNautilusContext removeSelector: #model:! SugsNautilusContext class removeSelector: #model:! "SmartSuggestions"! "Settings-System"! "Spec-Debugger"! "Spec-Inspector"! "System-Support"! ----End fileIn----! ----QUIT----an Array(3 May 2013 5:41:20 pm) Pharo.image priorSource: 3110054! ----STARTUP----an Array(3 May 2013 5:48:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 May 2013 5:48:22 pm) Pharo-30098.image priorSource: 3160792! ----STARTUP----an Array(4 May 2013 2:56:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/4/2013 14:53' prior: 36664780! commentForCurrentUpdate ^ '10513 Traits tests should not use decompiler... https://pharo.fogbugz.com/f/cases/10513 10512 Clean up #fullPrintOn: https://pharo.fogbugz.com/f/cases/10512 10500 EyeInspector cannot inspect SmallDictionary https://pharo.fogbugz.com/f/cases/10500 10119 Saving a package with no network connectivity blocks the user https://pharo.fogbugz.com/f/cases/10119'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/4/2013 14:53'! script196 ^ '10497-Suggestions-in-debugger-and-message-browser-MarcusDenker.2.mcz AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1420.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1411.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-md.798.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.16.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.532.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1101.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/4/2013 14:53'! update30099 "self new update30099" self withUpdateLog: '10513 Traits tests should not use decompiler... https://pharo.fogbugz.com/f/cases/10513 10512 Clean up #fullPrintOn: https://pharo.fogbugz.com/f/cases/10512 10500 EyeInspector cannot inspect SmallDictionary https://pharo.fogbugz.com/f/cases/10500 10119 Saving a package with no network connectivity blocks the user https://pharo.fogbugz.com/f/cases/10119'. self loadTogether: self script196 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TraitPureBehaviorTest methodsFor: 'testing-applying trait composition' stamp: 'MarcusDenker 5/4/2013 12:52' prior: 53431370! testOwnMethodsTakePrecedenceOverTraitsMethods "First create a trait with no subtraits and then add subtrait t1 which implements m11 as well." | trait | trait := self createTraitNamed: #T uses: { }. trait compile: 'm11 ^999'. self assert: trait methodDict size = 1. self assert: (trait methodDict at: #m11) sourceCode = 'm11 ^999'. Trait named: #T uses: self t1 category: self class category. self assert: trait methodDict size = 3. self assert: (trait selectors asSet includesAllOf: #(#m11 #m12 #m13 )). self assert: (trait methodDict at: #m11) sourceCode = 'm11 ^999'. self assert: (trait methodDict at: #m12) sourceCode = 'm12 ^12'! ! !TraitCompositionTest methodsFor: 'testing-enquiries' stamp: 'MarcusDenker 5/4/2013 12:53' prior: 53356305! testClassMethodsTakePrecedenceOverTraitsMethods | keys | keys := Set new. self t4 methodDict bindingsDo: [:each | keys add: each key]. self assert: keys size = 6. self assert: (keys includesAllOf: #( #m12 #m13 #m13 #m21 #m22 #m11 #m42 )). self assert: (self t4 methodDict at: #m11) sourceCode = 'm11 ^41'! ! !MCRepositoryGroup methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/3/2013 14:22' prior: 24952172! includesVersionNamed: aString " check for existing version name in parallel over all repositories " | results | results := Array new: self repositories size. self repositories doWithIndex: [:repository :index | " fork of test for each repository " results at: index put: (repository includesVersionNamed: aString) ]. " check if any repository included the given versionName already" ^ results anySatisfy: [:result| result = true ] ! ! !SmallDictionary methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 5/4/2013 14:51'! eyeClass ^ EyeDictionaryInspector! ! Morph removeSelector: #fullPrintOn:! BlockClosure removeSelector: #fullPrintOn:! "Kernel"! "Monticello"! "Morphic"! "Spec-Inspector"! "Tests"! ----End fileIn----! ----QUIT----an Array(4 May 2013 2:56:16 pm) Pharo.image priorSource: 3160986! ----STARTUP----an Array(4 May 2013 3:02:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 May 2013 3:02:48 pm) Pharo-30099.image priorSource: 3173949! ----STARTUP----an Array(4 May 2013 3:13:42 pm) as /Users/denker/Desktop/latest/Pharo-30099.image! ImageCleaner cleanUpForRelease! ----QUIT----an Array(4 May 2013 3:14:10 pm) Pharo-30099.image priorSource: 3174143! ----STARTUP----an Array(4 May 2013 4:22:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/4/2013 16:19' prior: 36715712! commentForCurrentUpdate ^ '10501 EyeInspector grammar issue https://pharo.fogbugz.com/f/cases/10501 10504 minor cleaning of normalize:ticks:base: https://pharo.fogbugz.com/f/cases/10504 10516 clean up #refusesToAcceptCode https://pharo.fogbugz.com/f/cases/10516 10505 Time newLocal is not normalized west of Greenwich https://pharo.fogbugz.com/f/cases/10505'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/4/2013 16:19'! script197 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.432.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1423.mcz KernelTests-MarcusDenker.506.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.130.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1411.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.450.mcz NautilusCommon-MarcusDenker.128.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.800.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.22.mcz Spec-Inspector-MarcusDenker.17.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.27.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.532.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1103.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/4/2013 16:19'! update30100 "self new update30100" self withUpdateLog: '10501 EyeInspector grammar issue https://pharo.fogbugz.com/f/cases/10501 10504 minor cleaning of normalize:ticks:base: https://pharo.fogbugz.com/f/cases/10504 10516 clean up #refusesToAcceptCode https://pharo.fogbugz.com/f/cases/10516 10505 Time newLocal is not normalized west of Greenwich https://pharo.fogbugz.com/f/cases/10505'. self loadTogether: self script197 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UITheme methodsFor: 'border-styles' stamp: 'MarcusDenker 5/4/2013 15:26' prior: 53928319! drawTextAdornmentsFor: aPluggableTextMorph on: aCanvas "Indicate edit status for the given morph." (aPluggableTextMorph hasEditingConflicts or: [aPluggableTextMorph hasValidText not]) ifTrue: [^self drawTextAdornmentFor: aPluggableTextMorph color: Color red on: aCanvas]. aPluggableTextMorph hasUnacceptedEdits ifTrue: [aPluggableTextMorph model wantsDiffFeedback ifTrue: [^self drawTextAdornmentFor: aPluggableTextMorph color: Color yellow darker on: aCanvas] ifFalse: [^self drawTextAdornmentFor: aPluggableTextMorph color: Color orange on: aCanvas]]. aPluggableTextMorph model wantsDiffFeedback ifTrue: [self drawTextAdornmentFor: aPluggableTextMorph color: Color green on: aCanvas]! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'MarcusDenker 5/4/2013 16:15' prior: 36503602! customMenuActions ^ [:aMenu | aMenu add: 'Dive (d)' translated target: self selector: #dive. history hasPrevious ifTrue: [ aMenu add: 'Previous object (p)' translated target: self selector: #inspectPrevious]. history hasNext ifTrue: [ aMenu add: 'Next object (n)' translated target: self selector: #inspectNext]. ]! ! !Time class methodsFor: 'current time' stamp: 'nice 5/4/2013 00:42' prior: 36663596! nowLocal "Answer the time since midnight in local timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock. ^ self seconds: microSecondsToday // 1000000 + DateAndTime localTimeZone offset asSeconds \\ SecondsInDay nanoSeconds: microSecondsToday \\ 1000000 * 1000! ! Object removeSelector: #refusesToAcceptCode! CodeHolder removeSelector: #refusesToAcceptCode! DateAndTime removeSelector: #normalize:ticks:base:! "Kernel"! "Polymorph-Widgets"! "Spec-Inspector"! "Tools"! ----End fileIn----! ----QUIT----an Array(4 May 2013 4:22:13 pm) Pharo.image priorSource: 3174365! ----STARTUP----an Array(4 May 2013 4:28:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 May 2013 4:28:47 pm) Pharo-30100.image priorSource: 3186979! ----STARTUP----an Array(4 May 2013 5:34:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/4/2013 17:30' prior: 36729087! commentForCurrentUpdate ^ '10443 Create Env object using NativeBoost https://pharo.fogbugz.com/f/cases/10443 10510 Random compiling related cleanups https://pharo.fogbugz.com/f/cases/10510 10515 case insensitive method categories sort https://pharo.fogbugz.com/f/cases/10515'! ! !ScriptLoader methodsFor: 'accessing' stamp: 'StephaneDucasse 5/3/2013 11:08' prior: 33728551! diffServerRootString ^ 'http://smalltalkhub.com/mc/Pharo/Pharo30/main/'! ! !ScriptLoader methodsFor: 'private' stamp: 'StephaneDucasse 5/3/2013 11:11' prior: 33741858! produceDiffLinksForPackages "self defaultMCWaitingFolder allFileNames" "self new produceDiffLinksForPackages" | filenames | filenames := self waitingFolderMCZFiles. filenames := filenames reject: [:each | 'ScriptLoader*' match: each ]. ^ filenames collect: [:name | self diffServerRootString, (name copyUpToLast: $.) , '.diff' ] ! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'StephaneDucasse 5/3/2013 11:07' prior: 33715385! publishChanges | username password changescriptname changesetFilename str strings| (FileStream isAFileNamed: 'PharoPass.txt') ifTrue: [ str := FileStream fileNamed: 'PharoPass.txt'. strings := str contents substrings. username := strings first. password := strings second] ifFalse: [ username := UIManager default request: 'Pharo repository login'. password := UIManager default requestPassword: 'Pharo repository password'.]. self setToRepositoriesPassword: password to: username. changescriptname := UIManager default request: 'Changeset name (no space)' initialAnswer: 'WhatAsChanged'. changesetFilename := self csForLastUpdateAndPatchUpdatesList: changescriptname. self copyPackagesFromWaitingFolderToHomeRepository. self announceOnMailingList. self inform: 'All packages have been uploaded to the Pharo repository. Remaining manual steps: 1) ./pushUpdate 2) Announce new update on mailing list'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/4/2013 17:31'! script198 ^ '10497-Suggestions-in-debugger-and-message-browser-MarcusDenker.2.mcz AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.435.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1424.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1411.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.453.mcz NautilusCommon-MarcusDenker.130.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.800.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.36.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.533.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1103.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/4/2013 17:31'! update30101 "self new update30101" self withUpdateLog: '10443 Create Env object using NativeBoost https://pharo.fogbugz.com/f/cases/10443 10510 Random compiling related cleanups https://pharo.fogbugz.com/f/cases/10510 10515 case insensitive method categories sort https://pharo.fogbugz.com/f/cases/10515'. self loadTogether: self script198 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OSEnvironmentTest commentStamp: '' prior: 0! This tests the OSEnvironment. The tests assume that there is at least 1 environment variable given.! !OSEnvironment commentStamp: '' prior: 0! I represent the user environment variables. See `man environ` for more details.! !NixEnvironment commentStamp: '' prior: 0! I am a specialized OSEnvironment version for *nix systems (Linux, OSX).! !Win32Environment commentStamp: '' prior: 0! I am a specialized OSEnvironment for Windows! !OSPlatform commentStamp: 'michael.rueger 2/25/2009 18:29' prior: 28548684! An OSPlatform is an abstract representation of a 'OS platform'. Platforms can be hierarchical, e.g., a "general" platform as superclass and more specific platforms as subclasses as long as the subclasses provide sufficient means to identify themselves. The original implementation was for Tweak. Current holds the current OSPlatform subclass Architectural considerations: most platform specific methods that need to be added to the platform class should be in the form of extensions rather then adding them directly to this package. Otherwise the platform class will degenerate very quickly into a dependence hub for all kinds of sub systems.! !Class methodsFor: 'pool variables' stamp: 'StephaneDucasse 12/13/2011 17:22' prior: 19053874! sharedPoolOfVarNamed: aString "Returns the SharedPool or nil from which the pool variable named aString is coming from." ^ self sharedPools detect: [:each | each usesClassVarNamed: aString ] ifNone: [ superclass == nil ifTrue: [nil] ifFalse: [superclass sharedPoolOfVarNamed: aString] ] ! ! !ClassMethodBrowser methodsFor: 'initialization' stamp: 'MarcusDenker 5/4/2013 10:15' prior: 19292015! initializePresenter listModel whenSelectedItemChanged: [:selection | selection ifNotNil: [:class | methodModel methods: (class methods sort: [:a :b | a selector < b selector]). methodModel listModel resetSelection ]].! ! !CompiledMethod methodsFor: '*NautilusCommon' stamp: 'MarcusDenker 5/4/2013 10:15' prior: 19775780! correspondingTestMethod self isTestMethod ifTrue: [ ^ self ] ifFalse: [| sel testClass | (self selector endsWith: ':') ifTrue: [ sel := (self selector copyReplaceAll: ':' with:'') asLowercase ] ifFalse:[ sel := self selector asLowercase ]. (sel beginsWith: 'test') ifFalse: [ sel := 'test', sel]. ^ ((testClass := self methodClass correspondingForTest) = self methodClass) ifTrue: [ nil ] ifFalse:[ testClass methods detect: [:each | each selector asLowercase = sel ] ifNone: [ nil ]]]! ! !CompiledMethod methodsFor: 'printing' stamp: 'MarcusDenker 5/4/2013 08:29' prior: 19825390! who "Answer an Array of the class in which the receiver is defined and the selector to which it corresponds." self deprecated: 'use #methodClass and #selector ' on: '04 May 2013' in: 'Pharo 3.0'. ^{self methodClass. self selector}. ! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:23' prior: 18734446! loadGroupsCategoriesInARestrictedEnvironment: env for: class | group | group := self model selectedGroup. ^ self sortCategories: ((group protocolsFor: class ) intersection: ( env protocolsFor: class )) forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:23' prior: 18734725! loadGroupsCategoriesInSytemEnvironmentFor: class | group | group := self model selectedGroup. ^ self sortCategories: (group protocolsFor: class ) forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:23' prior: 18735244! loadPackagesCategoriesInARestrictedEnvironment: env for: class | group | group := self model selectedGroup. ^ self sortCategories: (model browsedEnvironment protocolsFor: class) forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:23' prior: 18735499! loadPackagesCategoriesInSystemEnvironmentFor: class | group | group := self model selectedGroup. ^ self sortCategories: class protocols forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:25'! sortCategories: protocols forClass: class ^ self sortCategories: protocols forClass: class firstInPackage: self model selectedPackage! ! !CategoryWidget methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 14:55'! sortCategories: allProtocols forClass: class firstInPackage: currentPackage "List the protocols in this order: 1. the -- all -- category 2. the extension protocols of the given package 3. the extension protocols 4. the normal protocols" | packageExtensionName packageExtensionStart sortBlock currentPackageProtocols otherProtocols | packageExtensionName := '*', currentPackage name asLowercase. packageExtensionStart := packageExtensionName, '-'. currentPackageProtocols := allProtocols select: [ :protocolName | | lowerCaseName | lowerCaseName := protocolName asLowercase. lowerCaseName = packageExtensionName or: [ lowerCaseName beginsWith: packageExtensionStart ]]. "Filter out the existing protocols so that we can sort them later separately" otherProtocols := allProtocols difference: currentPackageProtocols. sortBlock := [ :a :b | (a compare: b caseSensitive: false) = 1 ]. ^ (OrderedCollection with: self model allLabel) addAll: (currentPackageProtocols sort: sortBlock); addAll: (otherProtocols sort: sortBlock); yourself! ! !OSEnvironmentTest commentStamp: '' prior: 36753957! This tests the OSEnvironment. The tests assume that there is at least 1 environment variable given.! !OSEnvironmentTest methodsFor: 'helper' stamp: 'CamilloBruni 5/4/2013 15:18'! instance ^ Smalltalk os env! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'CamilloBruni 5/4/2013 15:19'! testAsDictionary self assert: self instance asDictionary isDictionary! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'CamilloBruni 5/4/2013 15:24'! testAssociations | associations | associations := self instance associations. self deny: associations isEmpty. self assert: associations anyOne key isString. self assert: associations anyOne value isString.! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'CamilloBruni 5/4/2013 15:25'! testAtPut | key value env | env := self instance. value := 1000 atRandom asString. key := 'OSEnvironmentTest >> #testAtPut >> ', value. env at: key put: value. self assert: (env at: key) equals: value. env removeKey: key. self deny: (env includesKey: key)! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'CamilloBruni 5/4/2013 15:28'! testKeys | env keys | env := self instance. keys := env keys. self deny: keys isEmpty. self assert: keys anyOne isString. self assert: (env includesKey: keys anyOne)! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'CamilloBruni 5/4/2013 15:30'! testValues | env values | env := self instance. values := env values. self deny: values isEmpty. self assert: values anyOne isString. self assert: (env includes: values anyOne)! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 5/4/2013 10:13' prior: 28302335! removeMethods self selectedClass ifNotNil: [:class | self selectedMethods ifNotEmpty: [:items || scroll needToUpdate selectedMethodStillExists | scroll := methodWidget vScrollValue. needToUpdate := self removeMethods: items inClass: class. needToUpdate ifTrue: [ self resetMethodsListSelection. methodWidget updateList ]. (class methods includes: self selectedMethod) ifFalse: [ self selectedMethod: nil ]. self resetMethodsListSelection. methodWidget updateList; vScrollValue: scroll. ]]! ! !Behavior methodsFor: 'queries' stamp: 'MarcusDenker 5/4/2013 10:14' prior: 18058085! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! !Behavior methodsFor: 'queries' stamp: 'MarcusDenker 5/4/2013 10:14' prior: 18058762! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! !Win32Platform methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:19'! env ^ env ifNil: [ env := Win32Environment new ]! ! !Win32Platform methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:08'! environ ^ self nbCall: #( void * GetEnvironmentStrings () ) module: #Kernel32! ! !AbstractNautilusUI methodsFor: 'icons behavior' stamp: 'MarcusDenker 5/4/2013 10:12' prior: 17295011! arrowDown: aMethod | methods methodsNames index | methods := aMethod methodClass allSubclasses gather: [:each | each methods ]. methods := methods select: [:each | each selector = aMethod selector ]. methods size = 1 ifTrue: [ ^ self model class openOnMethod: methods first ]. methodsNames := methods collect: [:each | each methodClass name, '>>#', each selector ]. index := UIManager default chooseFrom: methodsNames. index = 0 ifTrue: [ ^ self ]. ^ self model class openOnMethod: (methods at: index) ! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 5/4/2013 10:12' prior: 34431015! runTestsOfClass: aClass notifying: aBoolean | methods blockToEvaluate | methods := aClass methods select: [ :method | method isTestMethod ] thenCollect: [:e | e selector ]. blockToEvaluate := [ |result | aClass resetHistory. result := (aClass addToSuite: TestSuite new fromMethods: methods) run. result updateResultsInHistory. ClassesIconsCache removeKey: aClass ifAbsent: []. testSemaphore signal. ]. aBoolean ifTrue: [ blockToEvaluate forkAt: Processor userBackgroundPriority ] ifFalse: [ blockToEvaluate value ]. testSemaphore wait. aBoolean ifTrue: [ | color | aClass hasPassedTest ifTrue: [ color := Color green ]. aClass hasFailedTest ifTrue: [ color := Color yellow ]. aClass hasErrorTest ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: 'Class: ', aClass name color: color ]! ! !BuilderManifest methodsFor: 'adding/removing' stamp: 'MarcusDenker 5/4/2013 10:13' prior: 33911884! cleanUp | tagfp | tagfp := self class falsePositiveBeginningTag. manifestClass class methodsDo: [ :method | ((method selector asString beginsWith: tagfp) or: [method selector asString beginsWith: tagfp]) ifTrue: [self removeObsoleteFalsePositiveOf: method] ] ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'MarcusDenker 5/4/2013 10:02' prior: 36498485! saveElement: newText "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class compiler evaluate: newText in: self doItContext to: description doItReceiver. newValue == #failedDoit ifFalse: [ self selectedElement save: newValue. self objectChanged]! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 5/4/2013 07:54' prior: 36131832! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. method2 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. self deny: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 5/4/2013 07:54' prior: 36132407! testEqualityInstanceSideMethod | method1 method2 | method1 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. method2 := TestCase compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. self assert: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/4/2013 07:54' prior: 52093344! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! !OSEnvironment commentStamp: '' prior: 36754112! I represent the user environment variables. See `man environ` for more details.! !NixEnvironment commentStamp: '' prior: 36754249! I am a specialized OSEnvironment version for *nix systems (Linux, OSX).! !NixEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:18'! at: aKey put: aValue ^ self setEnv: aKey value: aValue! ! !NixEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:41'! environ "Return the address of the array holding the environment variables" ^ NBExternalAddress value: ((NativeBoost loadSymbol: 'environ' fromModule: NativeBoost CLibrary) nbUInt32AtOffset: 0)! ! !NixEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 17:41'! environAt: index | address | address := NBExternalAddress value: (self environ nbUInt32AtOffset: index-1 * 4). address isNull ifTrue: [ ^ nil ]. ^ address readString! ! !NixEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 17:46'! keysAndValuesDo: aBlock | index associationString | index := 1 . [ associationString := self environAt: index. associationString ifNil: [ ^ self ]. self keysAndValuesDo: aBlock withAssociationString: associationString. index := index + 1 ] repeat.! ! !NixEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 17:18'! setEnv: nameString value: valueString "This method calls the Standard C Library getenv() function" ^ self nbCall: #( int setenv (String nameString, String valueString, 1) ) module: NativeBoost CLibrary! ! !OSEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/29/2013 15:47'! default ^ self new! ! !OSEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/29/2013 16:50'! platform: anOSPlatform ^ self basicNew initializeWith: anOSPlatform ! ! !OSEnvironment methodsFor: 'converting' stamp: 'CamilloBruni 4/29/2013 16:24'! asDictionary | dictionary | dictionary := Dictionary new. self keysAndValuesDo: [ :key :value | dictionary at: key put: value ]. ^ dictionary! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:17'! associations "Answer a Collection containing the receiver's associations." ^Array streamContents: [ :stream | self associationsDo: [ :each | stream nextPut: each ]]! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 16:21'! associationsDo: aBlock ^ self keysAndValuesDo: [ :key :value | aBlock value: key -> value ]! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:14'! at: aKey ^ self at: aKey ifAbsent: [ KeyNotFound signalFor: aKey ]! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:14'! at: aKey ifAbsent: aBlock ^ (self getEnv: aKey) ifNil: aBlock! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:16'! at: key ifAbsentPut: aBlock "Return the value at the given key. If key is not included in the receiver store the result of evaluating aBlock as new value." ^ self at: key ifAbsent: [ self at: key put: aBlock value ]! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 5/4/2013 15:29'! at: aKey ifPresent: aBlock ^ aBlock value: (self at: aKey ifAbsent: [ ^ nil ])! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:16'! at: key ifPresent: oneArgBlock ifAbsent: absentBlock "Lookup the given key in the receiver. If it is present, answer the value of evaluating the oneArgBlock with the value associated with the key, otherwise answer the value of absentBlock." self at: key ifPresent: [ :v | ^oneArgBlock value: v ]. ^absentBlock value! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:18'! at: aKey put: aValue ^ self subclassResponsibility! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 5/4/2013 15:31'! do: aBlock ^self valuesDo: aBlock! ! !OSEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 15:43'! getEnv: string "This method calls the Standard C Library getenv() function" ^ self nbCall: #( String getenv (String string) ) module: NativeBoost CLibrary! ! !OSEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 5/4/2013 15:27'! includes: anObject self do: [:each | anObject = each ifTrue: [^true]]. ^false! ! !OSEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 5/4/2013 15:30'! includesKey: aKey ^ self at: aKey ifPresent: [ :value | true ] ifAbsent: [ false ].! ! !OSEnvironment methodsFor: 'initialize-release' stamp: 'CamilloBruni 4/29/2013 16:50'! initializeWith: anOSPlatform super initialize. platform := anOSPlatform! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:18'! keys "Answer an Array containing the receiver's keys." ^Array streamContents: [ :s | self keysDo: [ :key | s nextPut: key]]! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 17:43'! keysAndValuesDo: aBlock self subclassResponsibility! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 17:42'! keysAndValuesDo: aBlock withAssociationString: associationString | equalsIndex | equalsIndex := associationString indexOf: $=. aBlock value: (associationString first: equalsIndex-1) value: (associationString allButFirst: equalsIndex). ! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 16:21'! keysDo: aBlock ^ self keysAndValuesDo: [ :key :value | aBlock value: key ]! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:50'! platform ^ platform! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 5/4/2013 15:25'! removeKey: key ^ self unsetEnv: key! ! !OSEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 15:52'! unsetEnv: string "This method calls the Standard C Library getenv() function" ^ self nbCall: #( int unsetenv (String string) ) module: NativeBoost CLibrary! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:19'! values "Answer a Collection containing the receiver's values." ^ Array streamContents: [ :stream| self valuesDo: [ :value | stream nextPut: value ]]! ! !OSEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 16:22'! valuesDo: aBlock ^ self keysAndValuesDo: [ :key :value | aBlock value: value ]! ! !Win32Environment commentStamp: '' prior: 36754379! I am a specialized OSEnvironment for Windows! !Win32Environment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:40'! environmentStrings ^ self nbCall: #( void * GetEnvironmentStrings () ) module: #Kernel32! ! !Win32Environment methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 4/29/2013 17:55'! keysAndValuesDo: aBlock "Under windows the environemtn variables are a single big String." | environmentStrings nexString | environmentStrings := self environmentStrings. [ nexString := environmentStrings readString. nexString ifEmpty: [ ^ self ]. self keysAndValuesDo: aBlock withAssociationString: nexString. environmentStrings := NBExternalAddress value: (environmentStrings value + nexString size + 1) ] repeat.! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 17:34'! setEnv: nameString value: valueString "This method calls the Standard C Library getenv() function" ^ self nbCall: #( int SetEnvironmentVariable (String nameString, String valueString, 1) ) module: NativeBoost CLibrary! ! !OSPlatform commentStamp: 'michael.rueger 2/25/2009 18:29' prior: 36754501! An OSPlatform is an abstract representation of a 'OS platform'. Platforms can be hierarchical, e.g., a "general" platform as superclass and more specific platforms as subclasses as long as the subclasses provide sufficient means to identify themselves. The original implementation was for Tweak. Current holds the current OSPlatform subclass Architectural considerations: most platform specific methods that need to be added to the platform class should be in the form of extensions rather then adding them directly to this package. Otherwise the platform class will degenerate very quickly into a dependence hub for all kinds of sub systems.! !OSPlatform class methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 16:57'! env ^ self current env! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:19'! env ^ env ifNil: [ env := NixEnvironment new ]! ! Class removeSelector: #canFindWithoutEnvironment:! CompiledMethod removeSelector: #dateMethodLastSubmitted! TPureBehavior removeSelector: #compile:classified:notifying:trailer:! CategoryWidget removeSelector: #loadCategoriesWithProtocols:forClass:! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! "Compiler"! "Kernel"! "KernelTests"! "Manifest-Core"! "Nautilus"! "NautilusCommon"! "Spec-Examples"! "Spec-Inspector"! "System-Platforms"! "Tests"! ----End fileIn----! ----QUIT----an Array(4 May 2013 5:34:17 pm) Pharo.image priorSource: 3187173! ----STARTUP----an Array(4 May 2013 5:40:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 May 2013 5:40:47 pm) Pharo-30101.image priorSource: 3221513! ----STARTUP----an Array(4 May 2013 8:08:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/4/2013 20:04' prior: 36741899! commentForCurrentUpdate ^ '10514 temprarily remove BlockContext/BlockCloure code printing https://pharo.fogbugz.com/f/cases/10514/ 7376 Morph>>#fitInWorld https://pharo.fogbugz.com/f/cases/7376 10390 Failing on Build server: #testSystemAnnouncerIsUnique https://pharo.fogbugz.com/f/cases/10390'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/4/2013 20:04'! script199 ^ '10497-Suggestions-in-debugger-and-message-browser-MarcusDenker.2.mcz AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.436.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1425.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.148.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.39.mcz Keymapping-Settings-EstebanLorenzano.70.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-EstebanLorenzano.73.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.47.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1413.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.453.mcz NautilusCommon-MarcusDenker.130.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.800.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.36.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1103.mcz ToolsTest-MarcusDenker.denker.30.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/4/2013 20:05'! update30102 "self new update30102" self withUpdateLog: '10514 temprarily remove BlockContext/BlockCloure code printing https://pharo.fogbugz.com/f/cases/10514/ 7376 Morph>>#fitInWorld https://pharo.fogbugz.com/f/cases/7376 10390 Failing on Build server: #testSystemAnnouncerIsUnique https://pharo.fogbugz.com/f/cases/10390'. self loadTogether: self script199 merge: false. RBTransformationRule initialize. ScriptLoader new deletePackage: '10497-Suggestions-in-debugger-and-message-browser'. . self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'printing' stamp: 'MarcusDenker 5/4/2013 15:58' prior: 18239821! printOn: aStream aStream nextPutAll: '[...]'.! ! !Morph methodsFor: 'geometry' stamp: 'SeanDeNigris 5/4/2013 11:17'! fitInWorld self bounds: (self bounds translatedAndSquishedToBeWithin: self world bounds).! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/4/2013 16:01' prior: 36365914! sourceCode "Retrieve or reconstruct the source code for this method." | trailer source | trailer := self trailer. trailer sourceCode ifNotNil: [:code | ^ code ]. trailer hasSourcePointer ifFalse: [ "No source pointer -- decompile without temp names" ^ self decompileString]. "Situation normal; read the sourceCode from the file" source := [self getSourceFromFile] on: Error "An error can happen here if, for example, the changes file has been truncated by an aborted download. The present solution is to ignore the error and fall back on the decompiler. A more thorough solution should probably trigger a systematic invalidation of all source pointers past the end of the changes file. Consider that, as time goes on, the changes file will eventually grow large enough to cover the lost code, and then instead of falling into this error case, random source code will get returned." do: [ :ex | ex return: nil]. source isEmptyOrNil ifTrue: [ "Something really wrong -- decompile blind (no temps)" ^ self decompileString]. ^source! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 5/4/2013 16:02' prior: 19911479! format: textOrStream in: aClass notifying: aRequestor "Compile a parse tree from the argument, textOrStream. Answer a string containing the original code, formatted nicely. If aBoolean is true, then decorate the resulting text with color and hypertext actions" | aNode | self from: textOrStream class: aClass context: nil notifying: aRequestor. aNode := self format: sourceStream noPattern: false ifFail: [^ nil]. ^ aNode fullPrintString! ! ReleaseTest removeSelector: #testSystemAnnouncerIsUnique! Compiler removeSelector: #decompileBlock:! Compiler class removeSelector: #decompileBlock:! BlockClosure removeSelector: #decompile! Decompiler removeSelector: #decompileBlock:! CompiledMethod removeSelector: #decompileWithTemps! "Compiler"! "Kernel"! "Morphic"! "Tests"! ----End fileIn----! ----QUIT----an Array(4 May 2013 8:08:14 pm) Pharo.image priorSource: 3221707! ----STARTUP----an Array(4 May 2013 8:14:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 May 2013 8:14:41 pm) Pharo-30102.image priorSource: 3234879! ----STARTUP----an Array(4 May 2013 10:16:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/4/2013 22:11' prior: 36776433! commentForCurrentUpdate ^ '10424 simplify #getSourceReplacingSelectorWith: https://pharo.fogbugz.com/f/cases/10424 10517 Keymapping cleansings and improvements https://pharo.fogbugz.com/f/cases/10517 10522 fix DebuggerTest #testBasic https://pharo.fogbugz.com/f/cases/10522 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/4/2013 22:12'! script200 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.436.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.76.mcz FileSystem-Disk-MarcusDenker.51.mcz FileSystem-Memory-MarcusDenker.23.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1426.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1414.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.453.mcz NautilusCommon-MarcusDenker.131.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.800.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.139.mcz StartupPreferences-MarcusDenker.81.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.96.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.36.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1104.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/4/2013 22:12'! update30103 "self new update30103" self withUpdateLog: '10424 simplify #getSourceReplacingSelectorWith: https://pharo.fogbugz.com/f/cases/10424 10517 Keymapping cleansings and improvements https://pharo.fogbugz.com/f/cases/10517 10522 fix DebuggerTest #testBasic https://pharo.fogbugz.com/f/cases/10522 '. self loadTogether: self script200 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMBuilder commentStamp: '' prior: 0! I am a keymap builder that is used when configuring keymappings by pragmas. Send me the #shortcut: message with a keymap name, so I give you a specific builder to build a keymap. You can also tell me to install a category as global.! !KMDispatchChain commentStamp: '' prior: 0! I am an object that controls the dispatch order of keymaps given a hierarchy of morphs. ! !KMKeymapBuilder commentStamp: '' prior: 0! I am a specific builder to configure one shortcut.! !KMPragmaKeymapBuilder commentStamp: '' prior: 0! I am a singleton object, subscribed to system events, to listen to the creation of methods marked with the and keymap:> pragmas. When I listen one of those events, I reinitialize the KMRepository default instance and reload it with all declared keymaps.! !KMRepository commentStamp: 'GuillermoPolito 12/14/2010 21:37' prior: 24171163! I have a singleton instance which can be accessed by executing the following: "self default" I am currently a god object to be refactored =D.! !KMShortcutSetting commentStamp: '' prior: 0! I represent a shortcut setting. I relate a keymap with its default shortcut and its current shortcut, so it can be mutated.! !KmGlobalDispatcher commentStamp: '' prior: 0! I am a dispatcher that dispatches the global keymappings.! !MouseClickState commentStamp: '' prior: 27191179! MouseClickState is a simple class managing the distinction between clicks, double clicks, and drag operations. It has been factored out of HandMorph due to the many instVars. Instance variables: clickClient The client wishing to receive #click:, #dblClick:, or #drag messages clickState The internal state of handling the last event (#firstClickDown, #firstClickUp, #firstClickTimedOut) firstClickDown The #mouseDown event after which the client wished to receive #click: or similar messages firstClickUp The first mouse up event which came in before the double click time out was exceeded (it is sent if there is a timout after the first mouse up event occured) firstClickTime The millisecond clock value of the first event clickSelector The selector to use for sending #click: messages dblClickSelector The selector to use for sending #doubleClick: messages dblClickTime Timout in milliseconds for a double click operation dragSelector The selector to use for sending #drag: messages dragThreshold Threshold used for determining if a #drag: message is sent (pixels!!) ! !KMMockMorph commentStamp: '' prior: 0! I am a morph used for mock reasons.! !KMCatcherMorph commentStamp: '' prior: 0! I am a morph that captures keymappings, so they can be used for configuration/customization, or debugging.! !KMShortcutDeclaration commentStamp: '' prior: 0! I represent a shortcut declaration for the settings pharo framework.! !HandMorph methodsFor: 'private events' stamp: 'GuillermoPolito 5/3/2013 18:23' prior: 23253626! generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp charCode keyValue keyEvent | evtBuf logCr. stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [ type := #keyDown. lastKeyScanCode := evtBuf third]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [ type := #keystroke]. modifiers := evtBuf fifth. buttons := modifiers bitShift: 3. keyValue := evtBuf third. charCode := evtBuf sixth. "Adjustments to provide consistent key value data for different VM's: - charCode always contains unicode code point. - keyValue contains 0 if input is outside legacy range" "If there is no unicode data in the event, assume keyValue contains a correct (<256) Unicode codepoint, and use that" (charCode isNil or: [charCode = 0]) ifTrue: [charCode := keyValue]. "If charCode is not single-byte, we definately have Unicode input. Nil keyValue to avoid garbage values from som VMs." charCode > 255 ifTrue: [keyValue := 0]. type = #keystroke ifTrue: [combinedChar ifNil: [ | peekedEvent | peekedEvent := Sensor peekEvent. (peekedEvent notNil and: [peekedEvent fourth = EventKeyDown]) ifTrue: [ (CombinedChar isCompositionCharacter: charCode) ifTrue: [ combinedChar := CombinedChar new. combinedChar simpleAdd: charCode asCharacter. (combinedChar combinesWith: peekedEvent third asCharacter) ifTrue: [^nil]. ]]] ifNotNil: [ (combinedChar simpleAdd: charCode asCharacter) ifTrue: [charCode := combinedChar combined charCode]. combinedChar := nil]]. (type = #keystroke and: [(buttons anyMask: 16) and: [charCode = 30 or: [charCode = 31]]]) ifTrue: [^MouseWheelEvent new setType: #mouseWheel position: lastMouseEvent cursorPoint direction: (charCode = 30 ifTrue: [#up] ifFalse: [#down]) buttons: buttons hand: self stamp: stamp]. keyEvent := KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue charCode: charCode hand: self stamp: stamp. keyEvent scanCode: lastKeyScanCode. ^keyEvent ! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19' prior: 24115445! category ^ category! ! !KMCategoryTarget methodsFor: 'matching' stamp: 'GuillermoPolito 5/4/2013 15:40' prior: 24116201! completeMatch: aKeymap buffer: aBuffer KMLog log: 'Complete match: ', aKeymap printString. KMBuffer uniqueInstance completeMatch. aKeymap action cull: target value cull: morph cull: aBuffer first. ! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19' prior: 24115586! morph ^ morph! ! !KMCategoryTarget methodsFor: 'iterating' stamp: 'GuillermoPolito 5/3/2013 17:49'! nextForKmChain: aKMDispatchChain ^self target! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19' prior: 24115721! target ^ target! ! !KMBuilder commentStamp: '' prior: 36800110! I am a keymap builder that is used when configuring keymappings by pragmas. Send me the #shortcut: message with a keymap name, so I give you a specific builder to build a keymap. You can also tell me to install a category as global.! !KMBuilder methodsFor: 'keymap-building' stamp: 'GuillermoPolito 5/4/2013 16:29' prior: 24105630! attachShortcutCategory: aByteSymbol to: aClass self deprecated: 'Static shortcuts should not be used. Configure them locally in your morph, or use #setAsGlobalCategory: to configure a globally system category'. KMRepository default attachCategoryName: aByteSymbol to: aClass.! ! !KMBuilder methodsFor: 'keymap-building' stamp: 'GuillermoPolito 5/3/2013 15:49'! setAsGlobalCategory: aGlobalCategory KMRepository default setAsGlobalCategory: aGlobalCategory! ! !KMDispatchChain commentStamp: '' prior: 36800402! I am an object that controls the dispatch order of keymaps given a hierarchy of morphs. ! !KMDispatchChain class methodsFor: 'instance creation' stamp: 'GuillermoPolito 5/3/2013 17:52'! from: anInitialTarget andDispatcher: aDispatcher ^self new dispatcher: aDispatcher; startOn: anInitialTarget; yourself! ! !KMDispatchChain methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/4/2013 15:48'! dispatch: aKeyboardEvent self do: [ :targetToDispatch | targetToDispatch dispatch: KMBuffer uniqueInstance buffer copy. aKeyboardEvent wasHandled ifTrue: [ ^self ]. ]. "This should be a noMatch event" aKeyboardEvent wasHandled ifFalse: [ KMBuffer uniqueInstance clearBuffer ]! ! !KMDispatchChain methodsFor: 'initialize-release' stamp: 'GuillermoPolito 5/3/2013 17:45'! dispatcher: aDispatcher dispatcher := aDispatcher. self target: dispatcher target.! ! !KMDispatchChain methodsFor: 'iterating' stamp: 'GuillermoPolito 5/4/2013 16:12'! do: aBlock | currentTarget | currentTarget := initialTarget. [ currentTarget isNil ] whileFalse: [ aBlock value: currentTarget. currentTarget := currentTarget nextForKmChain: self. ]! ! !KMDispatchChain methodsFor: 'initialize-release' stamp: 'GuillermoPolito 5/4/2013 16:13'! startOn: anInitialTarget initialTarget := anInitialTarget.! ! !KMDispatchChain methodsFor: 'iterating' stamp: 'GuillermoPolito 5/3/2013 16:57'! target ^target! ! !KMDispatchChain methodsFor: 'initialize-release' stamp: 'GuillermoPolito 5/3/2013 16:14'! target: aTarget target := aTarget! ! !KMKeymapBuilder commentStamp: '' prior: 36800548! I am a specific builder to configure one shortcut.! !KMKeymapBuilder methodsFor: 'accessing' stamp: 'GuillermoPolito 5/31/2011 11:57' prior: 24151635! shortcutName: aShortcutName shortcutName := aShortcutName! ! !KMPragmaKeymapBuilder commentStamp: '' prior: 36800662! I am a singleton object, subscribed to system events, to listen to the creation of methods marked with the and keymap:> pragmas. When I listen one of those events, I reinitialize the KMRepository default instance and reload it with all declared keymaps.! !KMRepository commentStamp: 'GuillermoPolito 12/14/2010 21:37' prior: 36801007! I have a singleton instance which can be accessed by executing the following: "self default" I am currently a god object to be refactored =D.! !KMRepository methodsFor: 'accessing' stamp: 'GuillermoPolito 5/4/2013 16:06' prior: 24171535! categoriesForClass: aClass | classCategories superclassCategories | self deprecated: 'Static shortcuts are not used any more'. aClass == Object ifTrue: [ ^ Set new ]. classCategories := self categoryHolders at: aClass ifAbsent: [ Set new ]. superclassCategories := self categoriesForClass: aClass superclass. ^ classCategories union: superclassCategories! ! !KMRepository methodsFor: 'global' stamp: 'GuillermoPolito 5/3/2013 15:55'! globalCategories ^globalCategories ifNil: [ globalCategories := OrderedCollection new ]! ! !KMRepository methodsFor: 'global' stamp: 'GuillermoPolito 5/3/2013 15:58'! setAsGlobalCategory: aGlobalCategory | category | category := aGlobalCategory asKmCategoryIn: self. (self globalCategories includes: category) ifFalse: [ self globalCategories add: category ]! ! !KMShortcutSetting commentStamp: '' prior: 36801209! I represent a shortcut setting. I relate a keymap with its default shortcut and its current shortcut, so it can be mutated.! !KmGlobalDispatcher commentStamp: '' prior: 36801393! I am a dispatcher that dispatches the global keymappings.! !KmGlobalDispatcher methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/3/2013 17:46'! dispatch: anEventBuffer dispatcher dispatch: anEventBuffer inCategories: KMRepository default globalCategories ! ! !KmGlobalDispatcher methodsFor: 'initialize-release' stamp: 'GuillermoPolito 5/3/2013 17:22'! dispatcher: aDispatcher dispatcher := aDispatcher! ! !KmGlobalDispatcher methodsFor: 'testing' stamp: 'GuillermoPolito 5/3/2013 16:59'! isGlobalDispatcher ^true! ! !KmGlobalDispatcher methodsFor: 'iterating' stamp: 'GuillermoPolito 5/3/2013 16:57'! nextForKmChain: aKMDispatchChain ^aKMDispatchChain target! ! !MouseClickState commentStamp: '' prior: 36801515! MouseClickState is a simple class managing the distinction between clicks, double clicks, and drag operations. It has been factored out of HandMorph due to the many instVars. Instance variables: clickClient The client wishing to receive #click:, #dblClick:, or #drag messages clickState The internal state of handling the last event (#firstClickDown, #firstClickUp, #firstClickTimedOut) firstClickDown The #mouseDown event after which the client wished to receive #click: or similar messages firstClickUp The first mouse up event which came in before the double click time out was exceeded (it is sent if there is a timout after the first mouse up event occured) firstClickTime The millisecond clock value of the first event clickSelector The selector to use for sending #click: messages dblClickSelector The selector to use for sending #doubleClick: messages dblClickTime Timout in milliseconds for a double click operation dragSelector The selector to use for sending #drag: messages dragThreshold Threshold used for determining if a #drag: message is sent (pixels!!) ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 5/4/2013 15:57' prior: 33974898! testBuffering | morph flag category event1 event2 event3| category := KMCategory named: #TestBlah. KMRepository default addCategory: category. morph := BorderedMorph new. morph kmDispatcher reset. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag := true]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination, $p asKeyCombination action: []). morph attachKeymapCategory: #TestBlah. event1 := self eventKey: $a. morph kmDispatcher dispatchKeystroke: event1. self assert: morph kmDispatcher buffer size equals: 1. self assert: morph kmDispatcher buffer first equals: event1. event2 := self eventKey: $b. morph kmDispatcher dispatchKeystroke: event2. self assert: morph kmDispatcher buffer size = 2. self assert: morph kmDispatcher buffer first = event1. self assert: morph kmDispatcher buffer second = event2. event3 := self eventKey: $c. morph kmDispatcher dispatchKeystroke: event3. self assert: morph kmDispatcher buffer isEmpty. self assert: flag.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 5/4/2013 15:59' prior: 33976118! testNoMultiTrigger | bm1 bm2 flag1 flag2 category otherCategory | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. bm1 := BorderedMorph new. bm1 attachKeymapCategory: #TestBlah. flag1 := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := KMMockMorph new. bm2 attachKeymapCategory: #TestFoo. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. self deny: flag1. self assert: flag2.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'GuillermoPolito 5/4/2013 16:03' prior: 33977158! testNoStaggeredTrigger "Once a key sequence is recognized by a keymapper, all other keymappers should clear their buffers" | bm1 bm2 flag1 flag2 category otherCategory bufferBefore | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. bm1 := BorderedMorph new. bm1 attachKeymapCategory: category. flag1 := false. category addKeymapEntry: ( KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := Morph new. bm2 attachKeymapCategory: otherCategory. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. bufferBefore := bm2 kmDispatcher buffer copy. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. flag1 ifTrue: [ bufferBefore inspect ]. self deny: flag1. self assert: flag2.! ! !KMDispatchChainTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/3/2013 17:51'! testGlobalIsFirst | chain first | first := nil. chain := KMDispatchChain from: (KmGlobalDispatcher new) andDispatcher: (KMDispatcher new). chain do: [ :target | first ifNil: [ first := target ] ]. self assert: first isGlobalDispatcher.! ! !KMDispatchChainTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/3/2013 17:53'! testPassesOnTheTarget | chain dispatcher passed | dispatcher := KMDispatcher target: Morph new. passed := false. chain := KMDispatchChain from: (KmGlobalDispatcher new) andDispatcher: dispatcher. chain do: [ :t | t == dispatcher target ifTrue: [ passed := true ] ]. self assert: passed! ! !KMDispatchChainTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/3/2013 17:54'! testTargetDoesNotIterateTheNil | chain | chain := KMDispatchChain from: (KmGlobalDispatcher new) andDispatcher: (KMDispatcher new). chain do: [ :target | self assert: target notNil ].! ! !KMTarget methodsFor: 'accessing' stamp: 'GuillermoPolito 5/4/2013 16:21' prior: 24191934! dispatch: buffer morph kmDispatcher dispatch: buffer! ! !KMTarget methodsFor: 'iterating' stamp: 'GuillermoPolito 5/3/2013 17:10'! nextForKmChain: aKMDispatchChain ^self ownerTarget! ! !CompiledMethod methodsFor: 'private' stamp: 'MarcusDenker 5/2/2013 19:14' prior: 35983286! getSourceReplacingSelectorWith: newSelector | oldKeywords newKeywords args newSelectorWithArgs source oldSelector s | source := self sourceCode. oldSelector := self ast selector. oldSelector = newSelector ifTrue: [ ^ source ]. oldKeywords := oldSelector keywords. newKeywords := (newSelector ifNil: [self defaultSelector]) keywords. [oldKeywords size = newKeywords size] assert. args := self ast argumentNames. newSelectorWithArgs := String streamContents: [:stream | newKeywords withIndexDo: [:keyword :index | stream nextPutAll: keyword. stream space. args size >= index ifTrue: [ stream nextPutAll: (args at: index); space]]]. s := source string readStream. oldKeywords do: [ :each | s match: each ]. args isEmpty ifFalse: [ s match: args last ]. ^newSelectorWithArgs trimBoth, s upToEnd! ! !KMMockMorph commentStamp: '' prior: 36802765! I am a morph used for mock reasons.! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 5/4/2013 16:02' prior: 26583925! attachKeymapCategory: aCategory self kmDispatcher attachCategory: aCategory.! ! !TextMorph class methodsFor: 'shortcuts' stamp: 'GuillermoPolito 5/3/2013 15:45' prior: 52819232! buildTextEditorKeymapsOn: aBuilder (aBuilder shortcut: #accept) category: #TextMorph default: $s ctrl win | $s ctrl unix | $s command mac do: [ :morph | morph acceptContents ].! ! !TextMorph methodsFor: 'initialization' stamp: 'GuillermoPolito 5/3/2013 15:45' prior: 52796949! initialize super initialize. borderWidth := 0. textStyle := TextStyle default copy. wrapFlag := true. margins := (0@0 corner: 0@0). self attachKeymapCategory: #TextMorph.! ! !KMCatcherMorph commentStamp: '' prior: 36802857! I am a morph that captures keymappings, so they can be used for configuration/customization, or debugging.! !Spotlight class methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/3/2013 18:01' prior: 50760810! buildKeymapsOn: aBuilder (aBuilder shortcut: #openSpotlight) category: #Spotlight default: Character cr shift do: [ :morph | Current ifNotNil: [ Current close. Current := nil ] ifNil: [ (Current := self new) open ]]. aBuilder setAsGlobalCategory: #Spotlight! ! !KMCategory methodsFor: 'converting' stamp: 'GuillermoPolito 5/3/2013 15:58'! asKmCategoryIn: aKmRepository "just self by now. Maybe if in the future there are many repositories we have to change it" ^self! ! !KMDispatcher methodsFor: 'building' stamp: 'GuillermoPolito 5/4/2013 16:00' prior: 24134068! attachCategory: aCategory self attachCategory: aCategory targetting: morph! ! !KMDispatcher methodsFor: 'building' stamp: 'GuillermoPolito 5/4/2013 16:05' prior: 24134542! attachCategory: aCategory targetting: anObject | isAlreadyAttached category | category := aCategory asKmCategoryIn: KMRepository default. isAlreadyAttached := self targets anySatisfy: [ :e | self flag: 'Maybe the following line should be reified as KMCategoryTarget>>=... Guille? - SeanDeNigris'. e category = category and: [ e target = anObject and: [ e morph = morph ] ] ]. isAlreadyAttached ifFalse: [ | categoryTarget | categoryTarget := KMCategoryTarget target: anObject morph: morph category: category. self targets add: categoryTarget ].! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/3/2013 17:20'! dispatch: anEventBuffer inCategories: categories (self keymapObserversForCategories: categories) do: [ :aTarget | "nice hack to stop in the first listener" aTarget verifyMatchWith: anEventBuffer notifying: self thenDoing: [ ^self ] ]. self noMatch! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/4/2013 15:40' prior: 24136634! dispatchKeystroke: aKeyEvent | chain | KMLog log: aKeyEvent printString, String cr. KMBuffer uniqueInstance addEvent: aKeyEvent. chain := KMDispatchChain from: (KmGlobalDispatcher new dispatcher: self; yourself) andDispatcher: self. chain dispatch: aKeyEvent.! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/4/2013 16:37' prior: 24137165! keymapObservers | o | o := OrderedCollection with: self perInstanceTarget. o addAll: self targets. ^ o! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'GuillermoPolito 5/3/2013 17:21'! keymapObserversForCategories: categories ^categories collect: [ :cat | KMCategoryTarget target: target realTarget morph: target morph category: cat ].! ! !PragmaMenuAndShortcutRegistration methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/3/2013 15:49'! setAsGlobalCategory: aGlobalCategory KMRepository default setAsGlobalCategory: aGlobalCategory! ! !KMShortcutDeclaration commentStamp: '' prior: 36803027! I represent a shortcut declaration for the settings pharo framework.! !ByteSymbol methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 5/3/2013 15:58'! asKmCategoryIn: aKmRepository ^aKmRepository categoryForName: self! ! !KMKeymapTest methodsFor: 'tests' stamp: 'GuillermoPolito 5/4/2013 16:43' prior: 24154805! testExecute | bm km flag category | category := KMCategory named: #TestFoo. KMRepository default addCategory: category. bm := KMMockMorph new. bm attachKeymapCategory: #TestFoo. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination , $b asKeyCombination , $c asKeyCombination action: [ flag := true ]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination , $p asKeyCombination action: [ ]). {(self eventKey: $a). (self eventKey: $b). (self eventKey: $c)} do: [ :e | bm dispatchKeystrokeForEvent: e ]. self assert: flag! ! !DebuggerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/4/2013 20:18' prior: 20559640! testBasic | context process debugger | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := Smalltalk tools debugger new process: process controller: nil context: context. debugger expandStack. debugger toggleContextStackIndex: 1. "The index of the message list is 1 " self assert: debugger messageListIndex = 1. " debugger openFullNoSuspendLabel: 'hello'." " debugger down." " debugger up." self assert: debugger messageListIndex = 1. " debugger toggleContextStackIndex: 1." self assert: debugger selectedContext printString = '[...] in DebuggerTest>>testBasic'. " self assert: debugger selectedMessage = self." " debugger openFullNoSuspendLabel: 'Text'." debugger send. debugger send. self assert: debugger contents = (Integer>>#factorial) sourceCode. self assert: debugger selectedContext printString = 'SmallInteger(Integer)>>factorial'.! ! KMDispatcher removeSelector: #staticTargets! KMTarget removeSelector: #dispatchOwnerKeystroke:! KMKeymapTest removeSelector: #testExecuteForSubclass! KMKeymapTest removeSelector: #assertExecutionOnClass:attachingTo:! KeymapBuilderTest removeSelector: #testAttachKeymapAttaches! Smalltalk globals removeClassNamed: #KMMockMorphSubclass! "Kernel"! "Keymapping-Core"! "Keymapping-Pragmas"! "Keymapping-Settings"! "Keymapping-Tests"! "MenuRegistration"! "Morphic"! "NautilusCommon"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(4 May 2013 10:16:18 pm) Pharo.image priorSource: 3235073! ----STARTUP----an Array(4 May 2013 10:22:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 May 2013 10:22:54 pm) Pharo-30103.image priorSource: 3270311! ----STARTUP----an Array(5 May 2013 2:34:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/5/2013 11:47' prior: 36789800! commentForCurrentUpdate ^ '6161 DiskStore>>directoryAt:ifAbsent:nodesDo: https://pharo.fogbugz.com/f/cases/6161 10460 Spec - InputWidget >> ok https://pharo.fogbugz.com/f/cases/10460 10523 clean up #parseArgsAndTemps:notifying: https://pharo.fogbugz.com/f/cases/10523 10524 StartupPreferences interferes with zeroconf pharo binary https://pharo.fogbugz.com/f/cases/10524 10526 Typo in CommandLineHandler >> #exitFailure: https://pharo.fogbugz.com/f/cases/10526'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/5/2013 11:48'! script201 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.438.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1426.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1414.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.453.mcz NautilusCommon-MarcusDenker.131.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.800.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.90.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.107.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.141.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.36.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1104.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/5/2013 11:48'! update30104 "self new update30104" self withUpdateLog: '6161 DiskStore>>directoryAt:ifAbsent:nodesDo: https://pharo.fogbugz.com/f/cases/6161 10460 Spec - InputWidget >> ok https://pharo.fogbugz.com/f/cases/10460 10523 clean up #parseArgsAndTemps:notifying: https://pharo.fogbugz.com/f/cases/10523 10524 StartupPreferences interferes with zeroconf pharo binary https://pharo.fogbugz.com/f/cases/10524 10526 Typo in CommandLineHandler >> #exitFailure: https://pharo.fogbugz.com/f/cases/10526'. self loadTogether: self script201 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InputWidget methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/4/2013 21:57' prior: 35884829! ok input accept. ^ okAction contents value! ! !CommandLineHandler methodsFor: 'utility' stamp: 'CamilloBruni 5/5/2013 00:36' prior: 34463496! exitFailure: aMessage Exit signalFailure: aMessage ! ! !FilePluginPrims methodsFor: 'path primitives' stamp: 'CamilloBruni 5/5/2013 01:07' prior: 21942016! lookupEntryIn: fullPath index: index "Look up the index-th entry of the directory with the given fully-qualified path (i.e., starting from the root of the file hierarchy) and return an array containing: The empty string enumerates the top-level files or drives. (For example, on Unix, the empty path enumerates the contents of '/'. On Macs and PCs, it enumerates the mounted volumes/drives.) The creation and modification times are in seconds since the start of the Smalltalk time epoch. DirFlag is true if the entry is a directory. FileSize the file size in bytes or zero for directories. The primitive returns nil when index is past the end of the directory. It fails if the given path is bad." self halt. ^ #badDirectoryPath ! ! !DiskStore methodsFor: 'private' stamp: 'CamilloBruni 5/5/2013 01:18'! basicEntry: directoryEntry path: aPath nodesDo: aBlock | encodedPathString index entry pathString | index := 1. pathString := self stringFromPath: aPath. encodedPathString := Primitives encode: pathString. entry := Primitives lookupEntryIn: encodedPathString index: index. entry = #badDirectoryPath ifTrue: [ ^ FileSystemError signalWith: aPath ]. [ entry isNil ] whileFalse: [ entry at: 1 put: (Primitives decode: entry first). aBlock value: entry. index := index + 1. entry := Primitives lookupEntryIn: encodedPathString index: index ].! ! !DiskStore methodsFor: 'public' stamp: 'EstebanLorenzano 8/2/2012 15:43' prior: 20883271! isSymlink: aPath | entry | aPath isRoot ifTrue: [ ^false ]. entry := self basicEntryAt: aPath. ^ entry == #badDirectoryPath ifTrue: [ false ] ifFalse: [ self basicIsSymlink: entry ]. ! ! !FileSystemStore methodsFor: 'abstract' stamp: 'CamilloBruni 5/5/2013 01:17'! basicEntry: directoryEntry path: aPath nodesDo: aBlock self subclassResponsibility ! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 1/19/2012 00:15' prior: 22062758! directoryAt: aPath ifAbsent: absentBlock directoryNodesDo: aBlock ^ self directoryAt: aPath ifAbsent: absentBlock nodesDo: [ :entry| (self basicIsDirectory: entry) ifTrue: [ aBlock value: entry ]].! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 7/10/2012 21:05' prior: 22063057! directoryAt: aPath ifAbsent: absentBlock fileNodesDo: aBlock ^ self directoryAt: aPath ifAbsent: absentBlock nodesDo: [ :entry| (self basicIsDirectory: entry) ifFalse: [ aBlock value: entry ]].! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 5/5/2013 01:22' prior: 22063343! directoryAt: aPath ifAbsent: absentBlock nodesDo: aBlock ^ self nodeAt: aPath ifPresent: [ :entry | (self basicIsDirectory: entry) ifTrue: [ self basicEntry: entry path: aPath nodesDo: aBlock ] ifFalse: [ DirectoryDoesNotExist signalWith: aPath ] ] ifAbsent: absentBlock! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 5/5/2013 01:06' prior: 22067151! exists: aPath self nodeAt: aPath ifPresent: [ :entry | ^ true ] ifAbsent: [ ^ false ]. ! ! !FileSystemStore methodsFor: 'public' stamp: 'EstebanLorenzano 8/2/2012 15:42' prior: 22064327! isSymlink: aPath aPath isRoot ifTrue: [ ^ true ]. self nodeAt: aPath ifPresent: [ :entry | ^ self basicIsSymlink: entry ] ifAbsent: [ ^ false ]. ! ! !PreferencesHandler methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 23:14' prior: 29948302! lookInFolder: folder | result | self flag: 'I should be #lookInFolder:forFilesMatching:, so that #lookInImageFolder can delegate to me, like the other two lookup methods'. result := OrderedCollection new. folder isDirectory ifFalse: [ ^ nil ]. "To filter resources files such as .DS_Store" folder fileNames do: [:name | name first = $. ifFalse: [ result add: (folder / name)]]. ^ result isEmpty ifTrue: [ nil ] ifFalse: [ result ]! ! !PreferencesHandler methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 23:14' prior: 29948833! lookInFolder: folder forFilesMatching: pattern | result files | result := OrderedCollection new. folder isDirectory ifFalse: [ ^ nil ]. files := folder filesMatching: pattern. files do: [ :e | result add: e ]. ^ result isEmpty ifTrue: [ nil ] ifFalse: [ result ]! ! !MemoryStore methodsFor: 'private' stamp: 'CamilloBruni 5/5/2013 01:13'! basicEntry: entry nodesDo: aBlock entry fileEntriesDo: aBlock! ! !MemoryStore methodsFor: 'private' stamp: 'CamilloBruni 5/5/2013 01:17'! basicEntry: directoryEntry path: aPath nodesDo: aBlock directoryEntry fileEntriesDo: aBlock! ! Parser removeSelector: #parseArgsAndTemps:notifying:! MemoryStore removeSelector: #directoryAt:ifAbsent:nodesDo:! DiskStore removeSelector: #directoryAt:ifAbsent:nodesDo:! Compiler removeSelector: #parseArgsAndTemps:notifying:! "Compiler"! "FileSystem-Core"! "FileSystem-Disk"! "FileSystem-Memory"! "Spec-Widgets"! "StartupPreferences"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(5 May 2013 2:34:13 pm) Pharo.image priorSource: 3270507! ----STARTUP----an Array(5 May 2013 2:40:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 May 2013 2:40:48 pm) Pharo-30104.image priorSource: 3286915! ----STARTUP----an Array(6 May 2013 11:05:04 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/6/2013 11:02' prior: 36825234! commentForCurrentUpdate ^ '10253 Unrecoverable error when deleting methods https://pharo.fogbugz.com/f/cases/10253 10525 Spec key navigation improved https://pharo.fogbugz.com/f/cases/10525 10531 DropListMorph can not be searched through using keyboard https://pharo.fogbugz.com/f/cases/10531 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/6/2013 11:02'! script202 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.438.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.296.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1426.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1416.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.453.mcz NautilusCommon-MarcusDenker.131.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.802.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.92.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-StephaneDucasse.39.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.142.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.36.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1104.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.494.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/6/2013 11:02'! update30105 "self new update30105" self withUpdateLog: '10253 Unrecoverable error when deleting methods https://pharo.fogbugz.com/f/cases/10253 10525 Spec key navigation improved https://pharo.fogbugz.com/f/cases/10525 10531 DropListMorph can not be searched through using keyboard https://pharo.fogbugz.com/f/cases/10531 '. self loadTogether: self script202 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ComposableModel commentStamp: '' prior: 19974177! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !RGMethodDefinition methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/3/2013 11:22' prior: 31698764! protocol self isActive ifTrue: [ ^ self compiledMethod ifNil:[ protocol ] ifNotNil: [ self compiledMethod category ]]. self isHistorical ifTrue: [ ^ self protocolAtPointer ifNil:[ self compiledMethod ifNil:[ protocol ] ifNotNil:[ :cm| cm category ] ] ]. ^ protocol ! ! !RGMethodDefinition methodsFor: 'accessing' stamp: 'MarcusDenker 5/6/2013 11:00' prior: 31699524! sourceCode self isActive ifTrue: [ ^ self compiledMethod ifNil:[ sourceCode ] ifNotNil: [ self compiledMethod sourceCode ]]. self isHistorical ifTrue: [ ^ self sourceCodeAtPointer ifNil:[ self compiledMethod ifNil:[ sourceCode ] ifNotNil:[ :cm| cm sourceCode ] ] ]. ^ sourceCode! ! !AbstractBasicWidget methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowRight asKeyCombination. Character tab asKeyCombination}! ! !AbstractBasicWidget methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowLeft asKeyCombination. Character tab shift asKeyCombination}! ! !PluggableListMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/5/2013 13:08' prior: 29435228! basicKeyPressed: aChar "Return the index of the element matching the keystrokes. Returns 0 if nothing found" | nextSelection milliSeconds slowKeyStroke oldSelection | nextSelection := oldSelection := self getCurrentSelectionIndex. milliSeconds := Time millisecondClockValue. slowKeyStroke := milliSeconds - lastKeystrokeTime > 500. lastKeystrokeTime := milliSeconds. self searchedElement: nil. slowKeyStroke ifTrue: ["forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString.] ifFalse: ["append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString.]. "Get rid of blanks and style used in some lists" nextSelection := self listForSearching findFirst: [:a | a beginsWith: lastKeystrokes fromList: self ]. nextSelection isZero ifTrue: [ ^ 0 ]. "No change if model is locked" model okToChange ifFalse: [ ^ 0 ]. "No change if model is locked" "The following line is a workaround around the behaviour of OBColumn>>selection:, which deselects when called twice with the same argument." oldSelection = nextSelection ifTrue: [ ^ 0 ]. "change scrollbarvalue" self searchedElement: nextSelection. ^ nextSelection! ! !PluggableIconListMorph methodsFor: 'event' stamp: 'BenjaminVanRyseghem 5/5/2013 13:03' prior: 29414041! basicKeyPressed: aChar ^ aChar == Character space ifTrue: [ self interactWithSelectedItem ] ifFalse: [ super basicKeyPressed: aChar ]! ! !TextModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowRight command ctrl asKeyCombination }! ! !TextModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character arrowLeft command ctrl asKeyCombination }! ! !ComposableModel commentStamp: '' prior: 36852191! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:37' prior: 19990990! ensureKeyBindingsFor: aWidget self registerKeyStrokesForNextFor: aWidget. self registerKeyStrokesForPreviousFor: aWidget. additionalKeyBindings associationsDo: [:association | aWidget on: association key do: association value ]! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ keyStrokesForNextFocusHolder contents! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ keyStrokesForPreviousFocusHolder contents! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/4/2013 22:39' prior: 19978638! initialize "Initialization code for ComposableModel" super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:33' prior: 19988121! keyStrokeForNextFocus: aKMShortcut keyStrokesForNextFocusHolder contents: { aKMShortcut }! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:33' prior: 19988305! keyStrokeForPreviousFocus: aKMShortcut keyStrokesForPreviousFocusHolder contents: { aKMShortcut }! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:33'! keyStrokesForNextFocus: aCollection keyStrokesForNextFocusHolder contents: aCollection! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:33'! keyStrokesForPreviousFocus: aCollection keyStrokesForPreviousFocusHolder contents: aCollection ! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:44'! registerKeyStrokesForNextFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForNextFocus do: [:each | aWidget on: each do: [ self giveFocusToNextFrom: self widget ] ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:45'! registerKeyStrokesForPreviousFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForPreviousFocus do: [:each | aWidget on: each do: [ self giveFocusToPreviousFrom: self widget ] ]! ! !DropListMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/5/2013 13:11' prior: 20992670! keyStroke: event "Pass on to the list." | indexToSelect | event keyCharacter = Character escape ifTrue: [ self hideList ]. (self navigationKey: event) ifTrue: [^self]. indexToSelect := self listMorph keyStroke: event. "If the returned value is not an integer, do not handle it" indexToSelect isInteger ifFalse: [ ^ self ]. "If nothing found, do nothing" indexToSelect == 0 ifTrue: [ ^ self ]. self listSelectionIndex: indexToSelect! ! !TextInputFieldModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:45'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character tab asKeyCombination }! ! !TextInputFieldModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character tab shift asKeyCombination }! ! ComposableModel removeSelector: #eventKeyStrokeForPreviousFocus! ComposableModel removeSelector: #eventKeyStrokeForNextFocus! DropListModel removeSelector: #eventKeyStrokeForPreviousFocus! DropListModel removeSelector: #eventKeyStrokeForNextFocus! ListComposableModel removeSelector: #eventKeyStrokeForPreviousFocus! ListComposableModel removeSelector: #eventKeyStrokeForNextFocus! ButtonModel removeSelector: #eventKeyStrokeForPreviousFocus! ButtonModel removeSelector: #eventKeyStrokeForNextFocus! RadioButtonModel removeSelector: #eventKeyStrokeForPreviousFocus! RadioButtonModel removeSelector: #eventKeyStrokeForNextFocus! TextModel removeSelector: #eventKeyStrokeForPreviousFocus! TextModel removeSelector: #eventKeyStrokeForNextFocus! CheckBoxModel removeSelector: #eventKeyStrokeForPreviousFocus! CheckBoxModel removeSelector: #eventKeyStrokeForNextFocus! TreeModel removeSelector: #eventKeyStrokeForPreviousFocus! TreeModel removeSelector: #eventKeyStrokeForNextFocus! "Morphic"! "Polymorph-Widgets"! "Ring-Core-Kernel"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(6 May 2013 11:05:23 am) Pharo.image priorSource: 3287109! ----STARTUP----an Array(6 May 2013 11:11:59 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 May 2013 11:11:59 am) Pharo-30105.image priorSource: 3306566! ----STARTUP----an Array(6 May 2013 11:29:05 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/6/2013 11:26' prior: 36841836! commentForCurrentUpdate ^ '10527 Clean up unused fileOut related code / cleanup traits methods in ClassDescription https://pharo.fogbugz.com/f/cases/10527 10530 Add support for platform independent handling keys on keydown and keyup https://pharo.fogbugz.com/f/cases/10530 7026 Move users of SystemBrowser to use ToolRegistry instead https://pharo.fogbugz.com/f/cases/7026'! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'MarcusDenker 5/5/2013 12:51' prior: 36742909! publishChanges | username password str strings| (FileStream isAFileNamed: 'PharoPass.txt') ifTrue: [ str := FileStream fileNamed: 'PharoPass.txt'. strings := str contents substrings. username := strings first. password := strings second] ifFalse: [ username := UIManager default request: 'Pharo repository login'. password := UIManager default requestPassword: 'Pharo repository password'.]. self setToRepositoriesPassword: password to: username. self csForLastUpdateAndPatchUpdatesList: 'Update'. self copyPackagesFromWaitingFolderToHomeRepository. self announceOnMailingList. self inform: 'All packages have been uploaded to the Pharo repository. Remaining manual steps: 1) ./pushUpdate 2) Announce new update on mailing list'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/6/2013 11:26'! script203 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.438.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1430.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1417.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.455.mcz NautilusCommon-MarcusDenker.131.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.802.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.92.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.142.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.38.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.497.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/6/2013 11:27'! update30106 "self new update30106" self withUpdateLog: '10527 Clean up unused fileOut related code / cleanup traits methods in ClassDescription https://pharo.fogbugz.com/f/cases/10527 10530 Add support for platform independent handling keys on keydown and keyup https://pharo.fogbugz.com/f/cases/10530 7026 Move users of SystemBrowser to use ToolRegistry instead https://pharo.fogbugz.com/f/cases/7026'. self loadTogether: self script203 merge: false. Smalltalk tools initDefaultToolSet. self flushCaches. ! ! "ScriptLoader30"! !KeyboardEvent commentStamp: '' prior: 0! I am a keyboard event. I contain the char code of the event pressed, the modifiers pressed, and the keycode of the key pressed.! !MacOSXPlatform commentStamp: '' prior: 0! I am a an object representing a MacOSX platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !UnixPlatform commentStamp: '' prior: 0! I am a an object representing a Unix platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !Win32Platform commentStamp: '' prior: 0! I am a an object representing a Windows platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !Nautilus class methodsFor: 'class initialization' stamp: 'MarcusDenker 5/5/2013 09:27'! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self as: #browser ! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'EstebanLorenzano 7/27/2012 16:33' prior: 51840746! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 5/5/2013 07:33' prior: 51832413! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'MarcusDenker 5/5/2013 07:33' prior: 51832734! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'ab 06/29/2011 14:01' prior: 51842358! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'MarcusDenker 2/21/2010 12:52' prior: 51843158! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'MarcusDenker 5/5/2013 07:25' prior: 51852384! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. ((method fileIndex = 0 or: [ (SourceFiles at: method fileIndex) == nil ]) or: [ (oldPos := method filePosition) = 0 ]) ifTrue: [ "The source code is not accessible. We must decompile..." preamble size > 0 ifTrue: [ outStream cr; nextPut: $!!; nextChunkPut: preamble; cr ]. outStream nextChunkPut: method decompileString ] ifFalse: [ sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ] ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'GuillermoPolito 2/25/2013 10:57' prior: 51843643! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !PluggableButtonMorph methodsFor: 'private' stamp: 'MarcusDenker 5/5/2013 09:13' prior: 29393071! browseAction | classDefiningAction | classDefiningAction := self model class whichClassIncludesSelector: self actionSelector. Smalltalk tools browser newOnClass: classDefiningAction selector: self actionSelector.! ! !KeyboardEvent commentStamp: '' prior: 36872910! I am a keyboard event. I contain the char code of the event pressed, the modifiers pressed, and the keycode of the key pressed.! !Browser class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/5/2013 09:15' prior: 18508769! fullOnClass: aClass selector: aSelector "Open a new full browser set to class." | brower | brower := self new. brower setClass: aClass selector: aSelector. ^ self openBrowserView: (brower openEditString: nil) label: brower labelString! ! !Browser class methodsFor: 'initialization' stamp: 'MarcusDenker 5/5/2013 09:17' prior: 18508033! initialize "Browser initialize" self flushCaches.! ! !Browser methodsFor: 'user interface' stamp: 'MarcusDenker 5/5/2013 09:16' prior: 18506765! addModelItemsToWindowMenu: aMenu "Add model-related items to the window menu" super addModelItemsToWindowMenu: aMenu! ! !MacOSXPlatform commentStamp: '' prior: 36873094! I am a an object representing a MacOSX platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !UnixPlatform commentStamp: '' prior: 36873378! I am a an object representing a Unix platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !Win32Platform commentStamp: '' prior: 36873661! I am a an object representing a Windows platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !AbstractNautilusUI methodsFor: 'menus' stamp: 'MarcusDenker 5/5/2013 09:16' prior: 17309387! addModelItemsToWindowMenu: aMenu "Add model-related items to the window menu" aMenu addLine; add: 'Nautilus Plugins Manager' target: NautilusPluginManager new action: #openInWorld. aMenu add: 'Shortcuts description' target: self action: #openShortcutDescription.! ! !RemoteString methodsFor: 'accessing' stamp: 'MarcusDenker 5/4/2013 22:51' prior: 32256203! text ^ self string asText! ! BrowserSystemSettings class removeSelector: #defaultBrowserSettingOn:! Smalltalk globals removeClassNamed: #BrowserSystemSettings! TPureBehavior removeSelector: #standardMethodHeaderFor:! Browser class removeSelector: #unload! Browser class removeSelector: #registerInAppRegistry! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! ClassDescription removeSelector: #wantsChangeSetLogging! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! ClassDescription removeSelector: #putClassCommentToCondensedChangesFile:! ClassDescription removeSelector: #noteChangesFrom:with:! ClassDescription removeSelector: #moveInstVarNamed:to:after:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! ClassDescription removeSelector: #compile:classified:withStamp:notifying:! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [Author changeStamp] ifFalse: [nil]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! ClassDescription removeSelector: #compile:classified:notifying:! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! ClassDescription removeSelector: #acceptsLoggingOfCompilation! SystemBrowser class removeSelector: #registerToolsOn:! SystemBrowser class removeSelector: #defaultOpenBrowser! SystemBrowser class removeSelector: #addRegistryMenuItemsTo:inAccountOf:! Smalltalk globals removeClassNamed: #SystemBrowser! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! TraitDescription removeSelector: #putClassCommentToCondensedChangesFile:! !Trait method! printCategoryChunk: category on: aFileStream priorMethod: priorMethod ^ self printCategoryChunk: category on: aFileStream withStamp: Author changeStamp priorMethod: priorMethod! ! TraitDescription removeSelector: #printCategoryChunk:on:priorMethod:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! TraitDescription removeSelector: #compile:classified:withStamp:notifying:! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [Author changeStamp] ifFalse: [nil]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! TraitDescription removeSelector: #compile:classified:notifying:! TClassAndTraitDescription removeSelector: #printCategoryChunk:withStamp:on:! TClassAndTraitDescription removeSelector: #printCategoryChunk:on:priorMethod:! TClassAndTraitDescription removeSelector: #printCategoryChunk:on:! TClassAndTraitDescription removeSelector: #methodsFor:stamp:prior:! TClassAndTraitDescription removeSelector: #methodsFor:stamp:! TClassAndTraitDescription removeSelector: #methodsFor:priorSource:inFile:! Nautilus class removeSelector: #initialize! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. ((method fileIndex = 0 or: [ (SourceFiles at: method fileIndex) == nil ]) or: [ (oldPos := method filePosition) = 0 ]) ifTrue: [ "The source code is not accessible. We must decompile..." preamble size > 0 ifTrue: [ outStream cr; nextPut: $!!; nextChunkPut: preamble; cr ]. outStream nextChunkPut: method decompileString ] ifFalse: [ sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ] ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. ((method fileIndex = 0 or: [ (SourceFiles at: method fileIndex) == nil ]) or: [ (oldPos := method filePosition) = 0 ]) ifTrue: [ "The source code is not accessible. We must decompile..." preamble size > 0 ifTrue: [ outStream cr; nextPut: $!!; nextChunkPut: preamble; cr ]. outStream nextChunkPut: method decompileString ] ifFalse: [ sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ] ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! "Files"! "Kernel"! "Morphic"! "Nautilus"! "Settings-Tools"! "System-Platforms"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(6 May 2013 11:29:19 am) Pharo.image priorSource: 3306762! ----STARTUP----an Array(6 May 2013 11:35:52 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 May 2013 11:35:52 am) Pharo-30106.image priorSource: 3344601! ----STARTUP----an Array(6 May 2013 3:59:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/6/2013 15:56' prior: 36861490! commentForCurrentUpdate ^ '10530 Add support for platform independent handling keys on keydown and keyup https://pharo.fogbugz.com/f/cases/10530 10535 Even more decompiler related cleanups https://pharo.fogbugz.com/f/cases/10535 10538 Remove log from keyboard handling https://pharo.fogbugz.com/f/cases/10538'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/6/2013 15:57'! script204 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.440.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1431.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1419.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.455.mcz NautilusCommon-MarcusDenker.131.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.802.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.92.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.142.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.39.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.499.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/6/2013 15:57'! update30107 "self new update30107" self withUpdateLog: '10530 Add support for platform independent handling keys on keydown and keyup https://pharo.fogbugz.com/f/cases/10530 10535 Even more decompiler related cleanups https://pharo.fogbugz.com/f/cases/10535 10538 Remove log from keyboard handling https://pharo.fogbugz.com/f/cases/10538'. self loadTogether: self script204 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !KeyPrinterMorph commentStamp: '' prior: 0! I am a morph that prints the keys in the keyboard events. KeyPrinterMorph new openInWorld! !Key commentStamp: '' prior: 0! I represent a keyboard Key. I am mapped from the platform specific keycodes into a common keycode base, by using my class side methods.! !UnixPlatform methodsFor: '*Keys' stamp: 'GuillermoPolito 4/10/2013 17:27'! keyForValue: aKeyValue ^Key valueForUnixPlatform: aKeyValue.! ! !HandMorph methodsFor: 'private events' stamp: 'GuillermoPolito 5/6/2013 14:36' prior: 36803194! generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp charCode keyValue keyEvent | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [ type := #keyDown. lastKeyScanCode := evtBuf third]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [ type := #keystroke]. modifiers := evtBuf fifth. buttons := modifiers bitShift: 3. keyValue := evtBuf third. charCode := evtBuf sixth. "Adjustments to provide consistent key value data for different VM's: - charCode always contains unicode code point. - keyValue contains 0 if input is outside legacy range" "If there is no unicode data in the event, assume keyValue contains a correct (<256) Unicode codepoint, and use that" (charCode isNil or: [charCode = 0]) ifTrue: [charCode := keyValue]. "If charCode is not single-byte, we definately have Unicode input. Nil keyValue to avoid garbage values from som VMs." charCode > 255 ifTrue: [keyValue := 0]. type = #keystroke ifTrue: [combinedChar ifNil: [ | peekedEvent | peekedEvent := Sensor peekEvent. (peekedEvent notNil and: [peekedEvent fourth = EventKeyDown]) ifTrue: [ (CombinedChar isCompositionCharacter: charCode) ifTrue: [ combinedChar := CombinedChar new. combinedChar simpleAdd: charCode asCharacter. (combinedChar combinesWith: peekedEvent third asCharacter) ifTrue: [^nil]. ]]] ifNotNil: [ (combinedChar simpleAdd: charCode asCharacter) ifTrue: [charCode := combinedChar combined charCode]. combinedChar := nil]]. (type = #keystroke and: [(buttons anyMask: 16) and: [charCode = 30 or: [charCode = 31]]]) ifTrue: [^MouseWheelEvent new setType: #mouseWheel position: lastMouseEvent cursorPoint direction: (charCode = 30 ifTrue: [#up] ifFalse: [#down]) buttons: buttons hand: self stamp: stamp]. keyEvent := KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue charCode: charCode hand: self stamp: stamp. keyEvent scanCode: lastKeyScanCode. ^keyEvent ! ! !MacOSXPlatform methodsFor: '*Keys' stamp: 'GuillermoPolito 4/10/2013 17:08'! keyForValue: aKeyValue ^Key valueForMacOSXPlatform: aKeyValue.! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/5/2013 21:26' prior: 36364683! decompile "Return the decompiled parse tree that represents self" ^self class compiler decompileMethod: self.! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/5/2013 21:30' prior: 36787327! sourceCode "Retrieve or reconstruct the source code for this method." | trailer source | trailer := self trailer. trailer sourceCode ifNotNil: [:code | ^ code ]. trailer hasSourcePointer ifFalse: [ ^ self decompileString]. "Situation normal; read the sourceCode from the file" source := [self getSourceFromFile] on: Error do: [ :ex | ex return: nil]. source isEmptyOrNil ifTrue: [ ^ self decompileString]. ^source! ! !KeyPrinterMorph commentStamp: '' prior: 36909973! I am a morph that prints the keys in the keyboard events. KeyPrinterMorph new openInWorld! !KeyPrinterMorph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/4/2013 12:20'! handlesKeyboard: evt ^ true! ! !KeyPrinterMorph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/4/2013 12:47'! handlesMouseDown: evt ^ true! ! !KeyPrinterMorph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/4/2013 12:50'! keyDown: anEvent UIManager default inform: anEvent key asString.! ! !KeyPrinterMorph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/4/2013 12:46'! mouseDown: event super mouseDown: event. World activeHand newKeyboardFocus: self! ! !KeyPrinterMorph methodsFor: 'initialize' stamp: 'GuillermoPolito 5/4/2013 12:53'! openInWorld self openInWindowLabeled: 'KeyPrinter'! ! !Win32Platform methodsFor: '*Keys' stamp: 'GuillermoPolito 5/4/2013 11:30'! keyForValue: aKeyValue ^Key valueForWindowsPlatform: aKeyValue.! ! !MethodNode methodsFor: 'debugger support' stamp: 'MarcusDenker 5/5/2013 21:28' prior: 35978448! blockExtentsToTempsMap "Answer a Dictionary of blockExtent to temp locations for the current method. This is used by the debugger to locate temp vars in contexts. A temp map entry is a pair of the temp's name and its index, where an index is either an integer for a normal temp or a pair of the index of the indirect temp vector containing the temp and the index of the temp in its indirect temp vector." ^encoder blockExtentsToTempsMap ifNil: [| methNode | methNode := Parser new encoderClass: encoder class; parse: self sourceText class: self methodClass. "As a side effect generate: creates data needed for the map." methNode generate. methNode encoder blockExtentsToTempsMap]! ! !MethodNode methodsFor: 'source mapping' stamp: 'MarcusDenker 5/5/2013 21:29' prior: 35979295! rawSourceRangesAndMethodDo: aBinaryBlock "Evaluate aBinaryBlock with the rawSourceRanges and method generated from the receiver." | methNode method | methNode := Parser new encoderClass: encoder class; parse: self sourceText class: self methodClass. method := methNode generate. "set bytecodes to map to" ^aBinaryBlock value: methNode encoder rawSourceRanges value: method! ! !KeyboardEvent methodsFor: '*Keys' stamp: 'GuillermoPolito 4/10/2013 17:05'! key ^OSPlatform current keyForValue: keyValue! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'MarcusDenker 5/5/2013 21:37' prior: 36877840! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Key commentStamp: '' prior: 36910109! I represent a keyboard Key. I am mapped from the platform specific keycodes into a common keycode base, by using my class side methods.! !Key class methodsFor: 'class initialization' stamp: 'GuillermoPolito 5/4/2013 12:53'! initialize self initializeKeyTable; initializeMacOSVirtualKeyTable; initializeUnixVirtualKeyTable; initializeWindowsVirtualKeyTable! ! !Key class methodsFor: 'key table' stamp: 'GuillermoPolito 4/12/2013 19:57'! initializeKeyTable KeyTable := Dictionary new. #( 16r08f6 Function "XK_function" 16rff08 BackSpace "XK_BackSpace" 16rff09 Tab "XK_Tab" 16rff0a Linefeed "XK_Linefeed" 16rff0b Clear "XK_Clear" 16rff0d Return "XK_Return" 16rff13 Pause "XK_Pause" 16rff14 Scroll_Lock "XK_Scroll_Lock" 16rff15 Sys_Req "XK_Sys_Req" 16rff1b Escape "XK_Escape" 16rffff Delete "XK_Delete" 16rff50 Home "XK_Home" 16rff51 Left "XK_Left" 16rff52 Up "XK_Up" 16rff53 Right "XK_Right" 16rff54 Down "XK_Down" 16rfe03 Level3Shift "XK_ISO_Level3_Shift" 16r00a1 ExclamationDown "XK_exclamdown" 16r00bf QuestionDown "XK_questiondown" 16r00f1 NTilde "XK_ntilde" 16r00d1 CapitalNTilde "XK_ntilde" 16r00ba Masculine "XK_masculine" 16r00e7 CCedilla "XK_ccedilla" 16r00c7 CapitalCCedilla "XK_ccedilla" 16r00aa FeminineOrdinal "XK_ordfeminine" 16r00b7 MiddlePoint "XK_periodcentered" "16rff55 Prior ""XK_Prior" 16rff55 Page_Up "XK_Page_Up" "16rff56 Next" "XK_Next" 16rff56 Page_Down "XK_Page_Down" 16rff57 End "XK_End" 16rff58 Begin "XK_Begin" 16rff80 KP_Space "XK_KP_Space" 16rff89 KP_Tab "XK_KP_Tab" 16rff8d KP_Enter "XK_KP_Enter" 16rff91 KP_F1 "XK_KP_F1" 16rff92 KP_F2 "XK_KP_F2" 16rff93 KP_F3 "XK_KP_F3" 16rff94 KP_F4 "XK_KP_F4" 16rff95 KP_Home "XK_KP_Home" 16rff96 KP_Left "XK_KP_Left" 16rff97 KP_Up "XK_KP_Up" 16rff98 KP_Right "XK_KP_Right" 16rff99 KP_Down "XK_KP_Down" 16rff9a KP_Prior "XK_KP_Prior" 16rff9a KP_Page_Up "XK_KP_Page_Up" 16rff9b KP_Next "XK_KP_Next" 16rff9b KP_Page_Down "XK_KP_Page_Down" 16rff9c KP_End "XK_KP_End" 16rff9d KP_Begin "XK_KP_Begin" 16rff9e KP_Insert "XK_KP_Insert" 16rff9f KP_Delete "XK_KP_Delete" 16rffbd KP_Equal "XK_KP_Equal" 16rffaa KP_Multiply "XK_KP_Multiply" 16rffab KP_Add "XK_KP_Add" 16rffac KP_Separator "XK_KP_Separator" 16rffad KP_Subtract "XK_KP_Subtract" 16rffae KP_Decimal "XK_KP_Decimal" 16rffaf KP_Divide "XK_KP_Divide" 16rffb0 KP_0 "XK_KP_0" 16rffb1 KP_1 "XK_KP_1" 16rffb2 KP_2 "XK_KP_2" 16rffb3 KP_3 "XK_KP_3" 16rffb4 KP_4 "XK_KP_4" 16rffb5 KP_5 "XK_KP_5" 16rffb6 KP_6 "XK_KP_6" 16rffb7 KP_7 "XK_KP_7" 16rffb8 KP_8 "XK_KP_8" 16rffb9 KP_9 "XK_KP_9" 16rffbe F1 "XK_F1" 16rffbf F2 "XK_F2" 16rffc0 F3 "XK_F3" 16rffc1 F4 "XK_F4" 16rffc2 F5 "XK_F5" 16rffc3 F6 "XK_F6" 16rffc4 F7 "XK_F7" 16rffc5 F8 "XK_F8" 16rffc6 F9 "XK_F9" 16rffc7 F10 "XK_F10" 16rffc8 F11 "XK_F11" 16rffc9 F12 "XK_F12" 16rffe1 Shift_L "XK_Shift_L" 16rffe2 Shift_R "XK_Shift_R" 16rffe3 Control_L "XK_Control_L" 16rffe4 Control_R "XK_Control_R" 16rffe5 Caps_Lock "XK_Caps_Lock" 16rffe6 Shift_Lock "XK_Shift_Lock" 16rffe7 Meta_L "XK_Meta_L" 16rffe8 Meta_R "XK_Meta_R" 16rffe9 Alt_L "XK_Alt_L" 16rffea Alt_R "XK_Alt_R" 16rffeb Super_L "XK_Super_L" 16rffec Super_R "XK_Super_R" 16rffed Hyper_L "XK_Hyper_L" 16rffee Hyper_R "XK_Hyper_R" 16rfe50 dead_grave "XK_dead_grave" 16rfe51 dead_acute "XK_dead_acute" 16rfe52 dead_circumflex "XK_dead_circumflex" 16rfe53 dead_tilde "XK_dead_tilde" 16rfe53 dead_perispomeni "XK_dead_perispomeni" 16rfe54 dead_macron "XK_dead_macron" 16rfe55 dead_breve "XK_dead_breve" 16rfe56 dead_abovedot "XK_dead_abovedot" 16rfe57 dead_diaeresis "XK_dead_diaeresis" 16rfe58 dead_abovering "XK_dead_abovering" 16rfe59 dead_doubleacute "XK_dead_doubleacute" 16rfe5a dead_caron "XK_dead_caron" 16rfe5b dead_cedilla "XK_dead_cedilla" 16rfe5c dead_ogonek "XK_dead_ogonek" 16rfe5d dead_iota "XK_dead_iota" 16rfe5e dead_voiced_sound "XK_dead_voiced_sound" 16rfe5f dead_semivoiced_sound "XK_dead_semivoiced_sound" 16rfe60 dead_belowdot "XK_dead_belowdot" 16rfe61 dead_hook "XK_dead_hook" 16rfe62 dead_horn "XK_dead_horn" 16rfe63 dead_stroke "XK_dead_stroke" 16rfe64 dead_abovecomma "XK_dead_abovecomma" 16rfe64 dead_psili "XK_dead_psili" 16rfe65 dead_abovereversedcomma "XK_dead_abovereversedcomma" 16rfe65 dead_dasia "XK_dead_dasia" 16rfe66 dead_doublegrave "XK_dead_doublegrave" 16rfe67 dead_belowring "XK_dead_belowring" 16rfe68 dead_belowmacron "XK_dead_belowmacron" 16rfe69 dead_belowcircumflex "XK_dead_belowcircumflex" 16rfe6a dead_belowtilde "XK_dead_belowtilde" 16rfe6b dead_belowbreve "XK_dead_belowbreve" 16rfe6c dead_belowdiaeresis "XK_dead_belowdiaeresis" 16rfe6d dead_invertedbreve "XK_dead_invertedbreve" 16rfe6e dead_belowcomma "XK_dead_belowcomma" 16rfe6f dead_currency "XK_dead_currency" 16r0020 space "XK_space" 16r0021 exclam "XK_exclam" 16r0022 quotedbl "XK_quotedbl" 16r0023 numbersign "XK_numbersign" 16r0024 dollar "XK_dollar" 16r0025 percent "XK_percent" 16r0026 ampersand "XK_ampersand" 16r0027 apostrophe "XK_apostrophe" "16r0027 quoteright" "XK_quoteright" 16r0028 parenleft "XK_parenleft" 16r0029 parenright "XK_parenright" 16r002a asterisk "XK_asterisk" 16r002b plus "XK_plus" 16r002c comma "XK_comma" 16r002d minus "XK_minus" 16r002e period "XK_period" 16r002f slash "XK_slash" 16r0030 zero "XK_0" 16r0031 one "XK_1" 16r0032 two "XK_2" 16r0033 three "XK_3" 16r0034 four "XK_4" 16r0035 five "XK_5" 16r0036 six "XK_6" 16r0037 seven "XK_7" 16r0038 eight "XK_8" 16r0039 nine "XK_9" 16r003a colon "XK_colon" 16r003b semicolon "XK_semicolon" 16r003c less "XK_less" 16r003d equal "XK_equal" 16r003e greater "XK_greater" 16r003f question "XK_question" 16r0040 at "XK_at" 16r0041 A "XK_A" 16r0042 B "XK_B" 16r0043 C "XK_C" 16r0044 D "XK_D" 16r0045 E "XK_E" 16r0046 F "XK_F" 16r0047 G "XK_G" 16r0048 H "XK_H" 16r0049 I "XK_I" 16r004a J "XK_J" 16r004b K "XK_K" 16r004c L "XK_L" 16r004d M "XK_M" 16r004e N "XK_N" 16r004f O "XK_O" 16r0050 P "XK_P" 16r0051 Q "XK_Q" 16r0052 R "XK_R" 16r0053 S "XK_S" 16r0054 T "XK_T" 16r0055 U "XK_U" 16r0056 V "XK_V" 16r0057 W "XK_W" 16r0058 X "XK_X" 16r0059 Y "XK_Y" 16r005a Z "XK_Z" 16r005b bracketleft "XK_bracketleft" 16r005c backslash "XK_backslash" 16r005d bracketright "XK_bracketright" 16r005e asciicircum "XK_asciicircum" 16r005f underscore "XK_underscore" 16r0060 grave "XK_grave" "16r0060 quoteleft" "XK_quoteleft" 16r0061 a "XK_a" 16r0062 b "XK_b" 16r0063 c "XK_c" 16r0064 d "XK_d" 16r0065 e "XK_e" 16r0066 f "XK_f" 16r0067 g "XK_g" 16r0068 h "XK_h" 16r0069 i "XK_i" 16r006a j "XK_j" 16r006b k "XK_k" 16r006c l "XK_l" 16r006d m "XK_m" 16r006e n "XK_n" 16r006f o "XK_o" 16r0070 p "XK_p" 16r0071 q "XK_q" 16r0072 r "XK_r" 16r0073 s "XK_s" 16r0074 t "XK_t" 16r0075 u "XK_u" 16r0076 v "XK_v" 16r0077 w "XK_w" 16r0078 x "XK_x" 16r0079 y "XK_y" 16r007a z "XK_z" 16r007b braceleft "XK_braceleft" 16r007c bar "XK_bar" 16r007d braceright "XK_braceright" 16r007e asciitilde "XK_asciitilde") pairsDo: [ :keyCode :keyname | KeyTable at: keyCode put: (self basicNew withValue: keyCode andName: keyname asUppercase) ].! ! !Key class methodsFor: 'macos' stamp: 'GuillermoPolito 4/10/2013 17:17'! initializeMacOSVirtualKeyTable MacosVirtualKeyTable := Dictionary new. MacosVirtualKeyTable at: 16r24 put: (self value: 16rff0d); " kVK_Return = 0x24" at: 16r30 put: (self value: 16rff09); " kVK_Tab = 0x30" at: 16r31 put: (self value: 16rff80); " kVK_Space = 0x31" at: 16r33 put: (self value: 16rffff); " kVK_Delete = 0x33" at: 16r35 put: (self value: 16rff1b); " kVK_Escape = 0x35" at: 16r37 put: (self value: 16rffe7); " kVK_Command = 0x37" at: 16r38 put: (self value: 16rffe1); " kVK_Shift = 0x38" at: 16r39 put: (self value: 16rffe5); " kVK_CapsLock = 0x39" at: 16r3A put: (self value: 16rffe9); " kVK_Option = 0x3A" at: 16r3B put: (self value: 16rffe3); " kVK_Control = 0x3B" at: 16r3C put: (self value: 16rffe2); " kVK_RightShift = 0x3C" at: 16r3D put: (self value: 16rffea); " kVK_RightOption = 0x3D" at: 16r3E put: (self value: 16rffe4); " kVK_RightControl = 0x3E" at: 16r3F put: (self value: 16r08f6); " kVK_Function = 0x3F" at: 16r48 put: (self value: 16r48); " kVK_VolumeUp = 0x48" "Not mapped" at: 16r49 put: (self value: 16r49); " kVK_VolumeDown = 0x49" "Not mapped" at: 16r4A put: (self value: 16r4A); " kVK_Mute = 0x4A" "Not mapped" at: 16r7A put: (self value: 16rffbe); " kVK_F1 = 0x7A" at: 16r78 put: (self value: 16rffbf); " kVK_F2 = 0x78" at: 16r63 put: (self value: 16rffc0); " kVK_F3 = 0x63" at: 16r76 put: (self value: 16rffc1); " kVK_F4 = 0x76" at: 16r60 put: (self value: 16rffc2); " kVK_F5 = 0x60" at: 16r61 put: (self value: 16rffc3); " kVK_F6 = 0x61" at: 16r62 put: (self value: 16rffc4); " kVK_F7 = 0x62" at: 16r64 put: (self value: 16rffc5); " kVK_F8 = 0x64" at: 16r65 put: (self value: 16rffc6); " kVK_F9 = 0x65" at: 16r67 put: (self value: 16rffc8); " kVK_F11 = 0x67" at: 16r6D put: (self value: 16rffc7); " kVK_F10 = 0x6D" at: 16r6F put: (self value: 16rffc9); " kVK_F12 = 0x6F" at: 16r72 put: (self value: 16r72); " kVK_Help = 0x72" "Not mapped" at: 16r73 put: (self value: 16rff50); " kVK_Home = 0x73" at: 16r74 put: (self value: 16rff55); " kVK_PageUp = 0x74" at: 16r75 put: (self value: 16rffff); " kVK_ForwardDelete = 0x75" at: 16r77 put: (self value: 16rff57); " kVK_End = 0x77" at: 16r79 put: (self value: 16rff56); " kVK_PageDown = 0x79" at: 16r7B put: (self value: 16rff96); " kVK_LeftArrow = 0x7B" at: 16r7C put: (self value: 16rff98); " kVK_RightArrow = 0x7C" at: 16r7D put: (self value: 16rff99); " kVK_DownArrow = 0x7D" at: 16r7E put: (self value: 16rff97); " kVK_UpArrow = 0x7E" at: 16r00 put: (self value: 16r41); "kVK_ANSI_A = 0x00" at: 16r0B put: (self value: 16r42); " kVK_ANSI_B = 0x0B" at: 16r08 put: (self value: 16r43); " kVK_ANSI_C = 0x08" at: 16r02 put: (self value: 16r44); " kVK_ANSI_D = 0x02" at: 16r0E put: (self value: 16r45); " kVK_ANSI_E = 0x0E" at: 16r03 put: (self value: 16r46); " kVK_ANSI_F = 0x03" at: 16r05 put: (self value: 16r47); " kVK_ANSI_G = 0x05" at: 16r04 put: (self value: 16r48); " kVK_ANSI_H = 0x04" at: 16r22 put: (self value: 16r49); " kVK_ANSI_I = 0x22" at: 16r26 put: (self value: 16r4a); " kVK_ANSI_J = 0x26" at: 16r28 put: (self value: 16r4b); " kVK_ANSI_K = 0x28" at: 16r25 put: (self value: 16r4c); " kVK_ANSI_L = 0x25" at: 16r2E put: (self value: 16r4d); " kVK_ANSI_M = 0x2E" at: 16r2D put: (self value: 16r4e); " kVK_ANSI_N = 0x2D" at: 16r1F put: (self value: 16r4f); " kVK_ANSI_O = 0x1F" at: 16r23 put: (self value: 16r50); " kVK_ANSI_P = 0x23" at: 16r0C put: (self value: 16r51); " kVK_ANSI_Q = 0x0C" at: 16r0F put: (self value: 16r52); " kVK_ANSI_R = 0x0F" at: 16r01 put: (self value: 16r53); " kVK_ANSI_S = 0x01" at: 16r11 put: (self value: 16r54); " kVK_ANSI_T = 0x11" at: 16r20 put: (self value: 16r55); " kVK_ANSI_U = 0x20" at: 16r09 put: (self value: 16r56); " kVK_ANSI_V = 0x09" at: 16r0D put: (self value: 16r57); " kVK_ANSI_W = 0x0D" at: 16r07 put: (self value: 16r58); " kVK_ANSI_X = 0x07" at: 16r10 put: (self value: 16r59); " kVK_ANSI_Y = 0x10" at: 16r06 put: (self value: 16r5a); " kVK_ANSI_Z = 0x06" at: 16r1D put: (self value: 16r30); " kVK_ANSI_0 = 0x1D" at: 16r12 put: (self value: 16r31); " kVK_ANSI_1 = 0x12" at: 16r13 put: (self value: 16r32); " kVK_ANSI_2 = 0x13" at: 16r14 put: (self value: 16r33); " kVK_ANSI_3 = 0x14" at: 16r15 put: (self value: 16r34); " kVK_ANSI_4 = 0x15" at: 16r17 put: (self value: 16r35); " kVK_ANSI_5 = 0x17" at: 16r16 put: (self value: 16r36); " kVK_ANSI_6 = 0x16" at: 16r1A put: (self value: 16r37); " kVK_ANSI_7 = 0x1A" at: 16r1C put: (self value: 16r38); " kVK_ANSI_8 = 0x1C" at: 16r19 put: (self value: 16r39); " kVK_ANSI_9 = 0x19" at: 16r1B put: (self value: 16r2d); " kVK_ANSI_Minus = 0x1B" at: 16r18 put: (self value: 16r3d); " kVK_ANSI_Equal = 0x18" at: 16r21 put: (self value: 16r5b); " kVK_ANSI_LeftBracket = 0x21" at: 16r1E put: (self value: 16r5d); " kVK_ANSI_RightBracket = 0x1E" at: 16r27 put: (self value: 16r27); " kVK_ANSI_Quote = 0x27" at: 16r29 put: (self value: 16r3b); " kVK_ANSI_Semicolon = 0x29" at: 16r2A put: (self value: 16r5c); " kVK_ANSI_Backslash = 0x2A" at: 16r2B put: (self value: 16r2c); " kVK_ANSI_Comma = 0x2B" at: 16r2C put: (self value: 16r2f); " kVK_ANSI_Slash = 0x2C" at: 16r2F put: (self value: 16r2e); " kVK_ANSI_Period = 0x2F" at: 16r32 put: (self value: 16r60); " kVK_ANSI_Grave = 0x32" at: 16r41 put: (self value: 16rffae); " kVK_ANSI_KeypadDecimal = 0x41" at: 16r43 put: (self value: 16rffaa); " kVK_ANSI_KeypadMultiply = 0x43" at: 16r45 put: (self value: 16rffab); " kVK_ANSI_KeypadPlus = 0x45" at: 16r47 put: (self value: 16r47); " kVK_ANSI_KeypadClear = 0x47" "Not mapped" at: 16r4B put: (self value: 16rffaf); " kVK_ANSI_KeypadDivide = 0x4B" at: 16r4C put: (self value: 16rff8d); " kVK_ANSI_KeypadEnter = 0x4C" at: 16r4E put: (self value: 16rffad); " kVK_ANSI_KeypadMinus = 0x4E" at: 16r51 put: (self value: 16rffbd); " kVK_ANSI_KeypadEquals = 0x51" at: 16r52 put: (self value: 16rffb0); " kVK_ANSI_Keypad0 = 0x52" at: 16r53 put: (self value: 16rffb1); " kVK_ANSI_Keypad1 = 0x53" at: 16r54 put: (self value: 16rffb2); " kVK_ANSI_Keypad2 = 0x54" at: 16r55 put: (self value: 16rffb3); " kVK_ANSI_Keypad3 = 0x55" at: 16r56 put: (self value: 16rffb4); " kVK_ANSI_Keypad4 = 0x56" at: 16r57 put: (self value: 16rffb5); " kVK_ANSI_Keypad5 = 0x57" at: 16r58 put: (self value: 16rffb6); " kVK_ANSI_Keypad6 = 0x58" at: 16r59 put: (self value: 16rffb7); " kVK_ANSI_Keypad7 = 0x59" at: 16r5B put: (self value: 16rffb8); " kVK_ANSI_Keypad8 = 0x5B" at: 16r5C put: (self value: 16rffb9) " kVK_ANSI_Keypad9 = 0x5C"! ! !Key class methodsFor: 'unix' stamp: 'GuillermoPolito 4/12/2013 16:29'! initializeUnixVirtualKeyTable UnixVirtualKeyTable := Dictionary new. UnixVirtualKeyTable at: Character cr asciiValue put: (self value: 16rff0d); " kVK_Return = 0x24" at: Character tab asciiValue put: (self value: 16rff09); " kVK_Tab = 0x30" at: Character space asciiValue put: (self value: 16rff80); " kVK_Space = 0x31" at: Character delete asciiValue put: (self value: 16rffff); " kVK_Delete = 0x33" at: Character escape asciiValue put: (self value: 16rff1b); " kVK_Escape = 0x35" at: 8 put: (self value: 16rff08); " kVK_Command = 0x37" at: -1 put: (self value: 16rffe7); " kVK_Command = 0x37" at: 255 put: (self value: 16rffe1); " kVK_Shift = 0x38" at: -1 put: (self value: 16rffe5); " kVK_CapsLock = 0x39" at: 247 put: (self value: 16rffe9); " kVK_Option = 0x3A" at: 251 put: (self value: 16rffe3); " kVK_Control = 0x3B" at: 254 put: (self value: 16rffe2); " kVK_RightShift = 0x3C" at: -1 put: (self value: 16rffea); " kVK_RightOption = 0x3D" at: -1 put: (self value: 16rffe4); " kVK_RightControl = 0x3E" at: -1 put: (self value: 16r08f6); " kVK_Function = 0x3F" at: -1 put: (self value: 16r48); " kVK_VolumeUp = 0x48" "Not mapped" at: -1 put: (self value: 16r49); " kVK_VolumeDown = 0x49" "Not mapped" at: -1 put: (self value: 16r4A); " kVK_Mute = 0x4A" "Not mapped" at: -1 put: (self value: 16rffbe); " kVK_F1 = 0x7A" at: -1 put: (self value: 16rffbf); " kVK_F2 = 0x78" at: -1 put: (self value: 16rffc0); " kVK_F3 = 0x63" at: -1 put: (self value: 16rffc1); " kVK_F4 = 0x76" at: -1 put: (self value: 16rffc2); " kVK_F5 = 0x60" at: -1 put: (self value: 16rffc3); " kVK_F6 = 0x61" at: -1 put: (self value: 16rffc4); " kVK_F7 = 0x62" at: -1 put: (self value: 16rffc5); " kVK_F8 = 0x64" at: -1 put: (self value: 16rffc6); " kVK_F9 = 0x65" at: -1 put: (self value: 16rffc8); " kVK_F11 = 0x67" at: -1 put: (self value: 16rffc7); " kVK_F10 = 0x6D" at: -1 put: (self value: 16rffc9); " kVK_F12 = 0x6F" at: -1 put: (self value: 16r72); " kVK_Help = 0x72" "Not mapped" at: Character home asciiValue put: (self value: 16rff50); " kVK_Home = 0x73" at: Character pageUp asciiValue put: (self value: 16rff55); " kVK_PageUp = 0x74" at: Character delete asciiValue put: (self value: 16rffff); " kVK_ForwardDelete = 0x75" at: Character end asciiValue put: (self value: 16rff57); " kVK_End = 0x77" at: Character pageDown asciiValue put: (self value: 16rff56); " kVK_PageDown = 0x79" at: Character arrowLeft asciiValue put: (self value: 16rff96); " kVK_LeftArrow = 0x7B" at: Character arrowRight asciiValue put: (self value: 16rff98); " kVK_RightArrow = 0x7C" at: Character arrowDown asciiValue put: (self value: 16rff99); " kVK_DownArrow = 0x7D" at: Character arrowUp asciiValue put: (self value: 16rff97); " kVK_UpArrow = 0x7E" at: $a asciiValue put: (self value: 16r41); "kVK_ANSI_A = 0x00" at: $b asciiValue put: (self value: 16r42); " kVK_ANSI_B = 0x0B" at: $c asciiValue put: (self value: 16r43); " kVK_ANSI_C = 0x08" at: $d asciiValue put: (self value: 16r44); " kVK_ANSI_D = 0x02" at: $e asciiValue put: (self value: 16r45); " kVK_ANSI_E = 0x0E" at: $f asciiValue put: (self value: 16r46); " kVK_ANSI_F = 0x03" at: $g asciiValue put: (self value: 16r47); " kVK_ANSI_G = 0x05" at: $h asciiValue put: (self value: 16r48); " kVK_ANSI_H = 0x04" at: $i asciiValue put: (self value: 16r49); " kVK_ANSI_I = 0x22" at: $j asciiValue put: (self value: 16r4a); " kVK_ANSI_J = 0x26" at: $k asciiValue put: (self value: 16r4b); " kVK_ANSI_K = 0x28" at: $l asciiValue put: (self value: 16r4c); " kVK_ANSI_L = 0x25" at: $m asciiValue put: (self value: 16r4d); " kVK_ANSI_M = 0x2E" at: $n asciiValue put: (self value: 16r4e); " kVK_ANSI_N = 0x2D" at: $o asciiValue put: (self value: 16r4f); " kVK_ANSI_O = 0x1F" at: $p asciiValue put: (self value: 16r50); " kVK_ANSI_P = 0x23" at: $q asciiValue put: (self value: 16r51); " kVK_ANSI_Q = 0x0C" at: $r asciiValue put: (self value: 16r52); " kVK_ANSI_R = 0x0F" at: $s asciiValue put: (self value: 16r53); " kVK_ANSI_S = 0x01" at: $t asciiValue put: (self value: 16r54); " kVK_ANSI_T = 0x11" at: $u asciiValue put: (self value: 16r55); " kVK_ANSI_U = 0x20" at: $v asciiValue put: (self value: 16r56); " kVK_ANSI_V = 0x09" at: $w asciiValue put: (self value: 16r57); " kVK_ANSI_W = 0x0D" at: $x asciiValue put: (self value: 16r58); " kVK_ANSI_X = 0x07" at: $y asciiValue put: (self value: 16r59); " kVK_ANSI_Y = 0x10" at: $z asciiValue put: (self value: 16r5a); " kVK_ANSI_Z = 0x06" at: $0 asciiValue put: (self value: 16r30); " kVK_ANSI_0 = 0x1D" at: $1 asciiValue put: (self value: 16r31); " kVK_ANSI_1 = 0x12" at: $2 asciiValue put: (self value: 16r32); " kVK_ANSI_2 = 0x13" at: $3 asciiValue put: (self value: 16r33); " kVK_ANSI_3 = 0x14" at: $4 asciiValue put: (self value: 16r34); " kVK_ANSI_4 = 0x15" at: $5 asciiValue put: (self value: 16r35); " kVK_ANSI_5 = 0x17" at: $6 asciiValue put: (self value: 16r36); " kVK_ANSI_6 = 0x16" at: $7 asciiValue put: (self value: 16r37); " kVK_ANSI_7 = 0x1A" at: $8 asciiValue put: (self value: 16r38); " kVK_ANSI_8 = 0x1C" at: $9 asciiValue put: (self value: 16r39); " kVK_ANSI_9 = 0x19" at: $- asciiValue put: (self value: 16r2d); " kVK_ANSI_Minus = 0x1B" at: $= asciiValue put: (self value: 16r3d); " kVK_ANSI_Equal = 0x18" at: $[ asciiValue put: (self value: 16r5b); " kVK_ANSI_LeftBracket = 0x21" at: $] asciiValue put: (self value: 16r5d); " kVK_ANSI_RightBracket = 0x1E" at: $' asciiValue put: (self value: 16r27); " kVK_ANSI_Quote = 0x27" at: $; asciiValue put: (self value: 16r3b); " kVK_ANSI_Semicolon = 0x29" at: $/ asciiValue put: (self value: 16r5c); " kVK_ANSI_Backslash = 0x2A" at: $, asciiValue put: (self value: 16r2c); " kVK_ANSI_Comma = 0x2B" at: $\ asciiValue put: (self value: 16r2f); " kVK_ANSI_Slash = 0x2C" at: $. asciiValue put: (self value: 16r2e); " kVK_ANSI_Period = 0x2F" at: $` asciiValue put: (self value: 16r60); " kVK_ANSI_Grave = 0x32" at: 1 put: (self value: 16rffae); " kVK_ANSI_KeypadDecimal = 0x41" at: 1 put: (self value: 16rffaa); " kVK_ANSI_KeypadMultiply = 0x43" at: 1 put: (self value: 16rffab); " kVK_ANSI_KeypadPlus = 0x45" at: 1 put: (self value: 16r47); " kVK_ANSI_KeypadClear = 0x47" "Not mapped" at: 1 put: (self value: 16rffaf); " kVK_ANSI_KeypadDivide = 0x4B" at: 1 put: (self value: 16rff8d); " kVK_ANSI_KeypadEnter = 0x4C" at: 1 put: (self value: 16rffad); " kVK_ANSI_KeypadMinus = 0x4E" at: 1 put: (self value: 16rffbd); " kVK_ANSI_KeypadEquals = 0x51" at: 1 put: (self value: 16rffb0); " kVK_ANSI_Keypad0 = 0x52" at: 1 put: (self value: 16rffb1); " kVK_ANSI_Keypad1 = 0x53" at: 1 put: (self value: 16rffb2); " kVK_ANSI_Keypad2 = 0x54" at: 1 put: (self value: 16rffb3); " kVK_ANSI_Keypad3 = 0x55" at: 1 put: (self value: 16rffb4); " kVK_ANSI_Keypad4 = 0x56" at: 1 put: (self value: 16rffb5); " kVK_ANSI_Keypad5 = 0x57" at: 1 put: (self value: 16rffb6); " kVK_ANSI_Keypad6 = 0x58" at: 1 put: (self value: 16rffb7); " kVK_ANSI_Keypad7 = 0x59" at: 1 put: (self value: 16rffb8); " kVK_ANSI_Keypad8 = 0x5B" at: 1 put: (self value: 16rffb9) " kVK_ANSI_Keypad9 = 0x5C"! ! !Key class methodsFor: 'windows' stamp: 'GuillermoPolito 5/4/2013 12:58'! initializeWindowsVirtualKeyTable WindowsVirtualKeyTable := Dictionary new. WindowsVirtualKeyTable at: 16r0d put: (self value: 16rff0d); " kVK_Return = 0x24" at: 16r09 put: (self value: 16rff09); " kVK_Tab = 0x30" at: 16r20 put: (self value: 16rff80); " kVK_Space = 0x31" at: 16r2e put: (self value: 16rffff); " kVK_Delete = 0x33" at: 16r1b put: (self value: 16rff1b); " kVK_Escape = 0x35" at: 16r5B put: (self value: 16rff08); " kVK_Command = 0x37" at: 16r5c put: (self value: 16rffe7); " kVK_Command = 0x37" at: 16r10 put: (self value: 16rffe1); " kVK_Shift = 0x38" at: 16r14 put: (self value: 16rffe5); " kVK_CapsLock = 0x39" at: 16r12 put: (self value: 16rffe9); " kVK_Option = 0x3A" at: 16r11 put: (self value: 16rffe3); " kVK_Control = 0x3B" at: 16ra0 put: (self value: 16rffe2); " kVK_RightShift = 0x3C" at: 16ra5 put: (self value: 16rffea); " kVK_RightOption = 0x3D" at: 16ra3 put: (self value: 16rffe4); " kVK_RightControl = 0x3E" at: -1 put: (self value: 16r08f6); " kVK_Function = 0x3F" at: 16raf put: (self value: 16r48); " kVK_VolumeUp = 0x48" "Not mapped" at: 16rae put: (self value: 16r49); " kVK_VolumeDown = 0x49" "Not mapped" at: 16rad put: (self value: 16r4A); " kVK_Mute = 0x4A" "Not mapped" at: 16r70 put: (self value: 16rffbe); " kVK_F1 = 0x7A" at: 16r71 put: (self value: 16rffbf); " kVK_F2 = 0x78" at: 16r72 put: (self value: 16rffc0); " kVK_F3 = 0x63" at: 16r73 put: (self value: 16rffc1); " kVK_F4 = 0x76" at: 16r74 put: (self value: 16rffc2); " kVK_F5 = 0x60" at: 16r75 put: (self value: 16rffc3); " kVK_F6 = 0x61" at: 16r76 put: (self value: 16rffc4); " kVK_F7 = 0x62" at: 16r77 put: (self value: 16rffc5); " kVK_F8 = 0x64" at: 16r78 put: (self value: 16rffc6); " kVK_F9 = 0x65" at: 16r79 put: (self value: 16rffc8); " kVK_F11 = 0x67" at: 16r7a put: (self value: 16rffc7); " kVK_F10 = 0x6D" at: 16r7b put: (self value: 16rffc9); " kVK_F12 = 0x6F" at: 16r2f put: (self value: 16r72); " kVK_Help = 0x72" "Not mapped" at: 16r24 put: (self value: 16rff50); " kVK_Home = 0x73" at: 16r21 put: (self value: 16rff55); " kVK_PageUp = 0x74" at: 16r2e put: (self value: 16rffff); " kVK_ForwardDelete = 0x75" at: 16r23 put: (self value: 16rff57); " kVK_End = 0x77" at: 16r22 put: (self value: 16rff56); " kVK_PageDown = 0x79" at: 16r1c put: (self value: 16rff96); " kVK_LeftArrow = 0x7B" at: 16r1d put: (self value: 16rff98); " kVK_RightArrow = 0x7C" at: 16r1f put: (self value: 16rff99); " kVK_DownArrow = 0x7D" at: 16r1e put: (self value: 16rff97); " kVK_UpArrow = 0x7E" at: 16r41 put: (self value: 16r41); "kVK_ANSI_A = 0x00" at: 16r42 put: (self value: 16r42); " kVK_ANSI_B = 0x0B" at: 16r43 put: (self value: 16r43); " kVK_ANSI_C = 0x08" at: 16r44 put: (self value: 16r44); " kVK_ANSI_D = 0x02" at: 16r45 put: (self value: 16r45); " kVK_ANSI_E = 0x0E" at: 16r46 put: (self value: 16r46); " kVK_ANSI_F = 0x03" at: 16r47 put: (self value: 16r47); " kVK_ANSI_G = 0x05" at: 16r48 put: (self value: 16r48); " kVK_ANSI_H = 0x04" at: 16r49 put: (self value: 16r49); " kVK_ANSI_I = 0x22" at: 16r4a put: (self value: 16r4a); " kVK_ANSI_J = 0x26" at: 16r4b put: (self value: 16r4b); " kVK_ANSI_K = 0x28" at: 16r4c put: (self value: 16r4c); " kVK_ANSI_L = 0x25" at: 16r4d put: (self value: 16r4d); " kVK_ANSI_M = 0x2E" at: 16r4e put: (self value: 16r4e); " kVK_ANSI_N = 0x2D" at: 16r4f put: (self value: 16r4f); " kVK_ANSI_O = 0x1F" at: 16r50 put: (self value: 16r50); " kVK_ANSI_P = 0x23" at: 16r51 put: (self value: 16r51); " kVK_ANSI_Q = 0x0C" at: 16r52 put: (self value: 16r52); " kVK_ANSI_R = 0x0F" at: 16r53 put: (self value: 16r53); " kVK_ANSI_S = 0x01" at: 16r54 put: (self value: 16r54); " kVK_ANSI_T = 0x11" at: 16r55 put: (self value: 16r55); " kVK_ANSI_U = 0x20" at: 16r56 put: (self value: 16r56); " kVK_ANSI_V = 0x09" at: 16r57 put: (self value: 16r57); " kVK_ANSI_W = 0x0D" at: 16r58 put: (self value: 16r58); " kVK_ANSI_X = 0x07" at: 16r59 put: (self value: 16r59); " kVK_ANSI_Y = 0x10" at: 16r5a put: (self value: 16r5a); " kVK_ANSI_Z = 0x06" at: $0 asciiValue put: (self value: 16r30); " kVK_ANSI_0 = 0x1D" at: $1 asciiValue put: (self value: 16r31); " kVK_ANSI_1 = 0x12" at: $2 asciiValue put: (self value: 16r32); " kVK_ANSI_2 = 0x13" at: $3 asciiValue put: (self value: 16r33); " kVK_ANSI_3 = 0x14" at: $4 asciiValue put: (self value: 16r34); " kVK_ANSI_4 = 0x15" at: $5 asciiValue put: (self value: 16r35); " kVK_ANSI_5 = 0x17" at: $6 asciiValue put: (self value: 16r36); " kVK_ANSI_6 = 0x16" at: $7 asciiValue put: (self value: 16r37); " kVK_ANSI_7 = 0x1A" at: $8 asciiValue put: (self value: 16r38); " kVK_ANSI_8 = 0x1C" at: $9 asciiValue put: (self value: 16r39); " kVK_ANSI_9 = 0x19" at: 16rbd put: (self value: 16r2d); " kVK_ANSI_Minus = 0x1B" at: $= asciiValue put: (self value: 16r3d); " kVK_ANSI_Equal = 0x18" at: 16rdb put: (self value: 16r5b); " kVK_ANSI_LeftBracket = 0x21" at: 16rdd put: (self value: 16r5d); " kVK_ANSI_RightBracket = 0x1E" at: 1 put: (self value: 16r27); " kVK_ANSI_Quote = 0x27" at: 16rba put: (self value: 16r3b); " kVK_ANSI_Semicolon = 0x29" at: 16rbf put: (self value: 16r5c); " kVK_ANSI_Backslash = 0x2A" at: 16rbc put: (self value: 16r2c); " kVK_ANSI_Comma = 0x2B" at: 16rdc put: (self value: 16r2f); " kVK_ANSI_Slash = 0x2C" at: 16rbe put: (self value: 16r2e); " kVK_ANSI_Period = 0x2F" at: 16rc0 put: (self value: 16r60); " kVK_ANSI_Grave = 0x32" at: 16r6e put: (self value: 16rffae); " kVK_ANSI_KeypadDecimal = 0x41" at: 16r6a put: (self value: 16rffaa); " kVK_ANSI_KeypadMultiply = 0x43" at: 16r6b put: (self value: 16rffab); " kVK_ANSI_KeypadPlus = 0x45" at: 16r0c put: (self value: 16r47); " kVK_ANSI_KeypadClear = 0x47" "Not mapped" at: 16r6f put: (self value: 16rffaf); " kVK_ANSI_KeypadDivide = 0x4B" at: 16r0d put: (self value: 16rff8d); " kVK_ANSI_KeypadEnter = 0x4C" at: 16r6d put: (self value: 16rffad); " kVK_ANSI_KeypadMinus = 0x4E" at: 1 put: (self value: 16rffbd); " kVK_ANSI_KeypadEquals = 0x51" at: 16r60 put: (self value: 16rffb0); " kVK_ANSI_Keypad0 = 0x52" at: 16r61 put: (self value: 16rffb1); " kVK_ANSI_Keypad1 = 0x53" at: 16r62 put: (self value: 16rffb2); " kVK_ANSI_Keypad2 = 0x54" at: 16r63 put: (self value: 16rffb3); " kVK_ANSI_Keypad3 = 0x55" at: 16r64 put: (self value: 16rffb4); " kVK_ANSI_Keypad4 = 0x56" at: 16r65 put: (self value: 16rffb5); " kVK_ANSI_Keypad5 = 0x57" at: 16r66 put: (self value: 16rffb6); " kVK_ANSI_Keypad6 = 0x58" at: 16r67 put: (self value: 16rffb7); " kVK_ANSI_Keypad7 = 0x59" at: 16r68 put: (self value: 16rffb8); " kVK_ANSI_Keypad8 = 0x5B" at: 16r69 put: (self value: 16rffb9) " kVK_ANSI_Keypad9 = 0x5C"! ! !Key class methodsFor: 'macos' stamp: 'GuillermoPolito 4/10/2013 15:41'! macOSVirtualKeyTable MacosVirtualKeyTable ifNil: [ self initializeMacOSVirtualKeyTable. ]. ^MacosVirtualKeyTable! ! !Key class methodsFor: 'unix' stamp: 'GuillermoPolito 4/12/2013 17:45'! unixVirtualKeyTable ^KeyTable! ! !Key class methodsFor: 'unknownKeys' stamp: 'GuillermoPolito 5/4/2013 20:02'! unknownKeyName ^#Unknown! ! !Key class methodsFor: 'instance creation' stamp: 'GuillermoPolito 4/10/2013 16:19'! value: aKeyValue ^KeyTable at: aKeyValue! ! !Key class methodsFor: 'macos' stamp: 'GuillermoPolito 5/5/2013 12:06'! valueForMacOSXPlatform: aKeyValue ^self macOSVirtualKeyTable at: aKeyValue ifAbsent: [ (self basicNew withValue: aKeyValue andName: #Unknown) ] ! ! !Key class methodsFor: 'unix' stamp: 'GuillermoPolito 5/5/2013 12:06'! valueForUnixPlatform: aKeyValue ^self unixVirtualKeyTable at: aKeyValue ifAbsent: [ (self basicNew withValue: aKeyValue) ] ! ! !Key class methodsFor: 'windows' stamp: 'GuillermoPolito 5/4/2013 11:33'! valueForWindowsPlatform: aKeyCode ^self windowsVirtualKeyTable at: aKeyCode ifAbsent: [ (self basicNew withValue: aKeyCode andName: #Unknown) ] ! ! !Key class methodsFor: 'windows' stamp: 'GuillermoPolito 5/4/2013 11:33'! windowsVirtualKeyTable WindowsVirtualKeyTable ifNil: [ self initializeWindowsVirtualKeyTable. ]. ^WindowsVirtualKeyTable! ! !Key methodsFor: 'testing' stamp: 'GuillermoPolito 5/4/2013 20:03'! isUnkownKey ^self name == self class unknownKeyName! ! !Key methodsFor: 'accessing' stamp: 'GuillermoPolito 4/10/2013 16:18'! name ^name! ! !Key methodsFor: 'printing' stamp: 'GuillermoPolito 5/4/2013 20:04'! printOn: aStream aStream nextPutAll: 'Key '; nextPutAll: name; nextPutAll: ' code: ('; nextPutAll: value asString; nextPutAll: ')'.! ! !Key methodsFor: 'initialize-release' stamp: 'GuillermoPolito 5/4/2013 20:02'! withValue: aValue self withValue: aValue andName: self class unknownKeyName! ! !Key methodsFor: 'initialize-release' stamp: 'GuillermoPolito 4/10/2013 16:18'! withValue: aValue andName: aName value := aValue. name := aName! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! "Compiler"! "Kernel"! "Keys"! "Morphic"! "Traits"! ----End fileIn----! ----QUIT----an Array(6 May 2013 3:59:16 pm) Pharo.image priorSource: 3344797! ----STARTUP----an Array(6 May 2013 4:06:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 May 2013 4:06:12 pm) Pharo-30107.image priorSource: 3402389! ----STARTUP----an Array(6 May 2013 4:28:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/6/2013 16:26' prior: 36899524! commentForCurrentUpdate ^ '10541 Fix fileOut broken by update 30107 https://pharo.fogbugz.com/f/cases/10541 10539 Small cleanup related to #methods in Kernel https://pharo.fogbugz.com/f/cases/10539 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/6/2013 16:26'! script205 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.440.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1431.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1419.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.455.mcz NautilusCommon-MarcusDenker.133.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.802.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.142.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.41.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.39.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.534.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.501.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/6/2013 16:26'! update30108 "self new update30108" self withUpdateLog: '10541 Fix fileOut broken by update 30107 https://pharo.fogbugz.com/f/cases/10541 10539 Small cleanup related to #methods in Kernel https://pharo.fogbugz.com/f/cases/10539 '. self loadTogether: self script205 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassAndTraitDescription methodsFor: 'organization' stamp: 'MarcusDenker 5/6/2013 12:36'! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'MarcusDenker 5/6/2013 16:12' prior: 36916251! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TPureBehavior methodsFor: 'accessing method dictionary' stamp: 'CamilloBruni 10/17/2012 10:05' prior: 52099473! methods ^ self methodDict values! ! TPureBehavior removeSelector: #addCategory:before:! TClassAndTraitDescription removeSelector: #methods! !Trait method! methods ^ self methodDict values! ! Behavior removeSelector: #methods! Behavior removeSelector: #addCategory:before:! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! methods ^ self methodDict values! ! !Trait method! methods ^ self methodDict values! ! "NautilusCommon"! "Ring-Core-Kernel"! "Traits"! ----End fileIn----! ----QUIT----an Array(6 May 2013 4:28:11 pm) Pharo.image priorSource: 3402583! ----STARTUP----an Array(6 May 2013 4:35:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 May 2013 4:35:33 pm) Pharo-30108.image priorSource: 3418726! ----STARTUP----an Array(7 May 2013 7:36:06 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/7/2013 07:33' prior: 36957309! commentForCurrentUpdate ^ '7001 Protocol Added/Removed https://pharo.fogbugz.com/f/cases/7001 10542 FailingTest: OSEnvironment under Windows https://pharo.fogbugz.com/f/cases/10542 10549 IconicListItem improvment https://pharo.fogbugz.com/f/cases/10549'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/7/2013 07:33'! script206 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.440.mcz CompilerTests-MarcusDenker.145.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1432.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1419.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.456.mcz NautilusCommon-MarcusDenker.133.mcz NautilusRefactoring-MarcusDenker.89.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.804.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.144.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.535.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.501.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/7/2013 07:33'! update30109 "self new update30109" self withUpdateLog: '7001 Protocol Added/Removed https://pharo.fogbugz.com/f/cases/7001 10542 FailingTest: OSEnvironment under Windows https://pharo.fogbugz.com/f/cases/10542 10549 IconicListItem improvment https://pharo.fogbugz.com/f/cases/10549'. self loadTogether: self script206 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ProtocolAnnouncement commentStamp: '' prior: 0! I'm an abstract announcement for protocols! !ProtocolAdded commentStamp: '' prior: 30076366! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! !ProtocolRemoved commentStamp: '' prior: 30093450! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! !IconicListItem commentStamp: '' prior: 0! I am a wrapper used to display a morph with ahead an icon. Here is the way to use me IconicListItem new icon: UITheme current smallOkIcon asMorph; morph: 'Accept' asMorph; yourself! !ButtonModel commentStamp: '' prior: 18554860! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ProtocolAnnouncement commentStamp: '' prior: 36983938! I'm an abstract announcement for protocols! !ProtocolAdded commentStamp: '' prior: 36984043! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! !ProtocolAnnouncement methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 11:58'! classAffected ^self classReorganized! ! !ProtocolAnnouncement methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 11:59'! classReorganized ^ classReorganized! ! !ProtocolAnnouncement methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 11:59'! classReorganized: anObject classReorganized := anObject! ! !ProtocolAnnouncement methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 12:44'! protocol ^ protocol! ! !ProtocolAnnouncement methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 12:44'! protocol: aString protocol := aString! ! !ProtocolRemoved commentStamp: '' prior: 36984259! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! !SystemAnnouncer methodsFor: 'triggering' stamp: 'EstebanLorenzano 5/3/2013 12:02'! protocolAdded: aString inClass: aClass self announce: (ProtocolAdded new classReorganized: aClass; protocol: aString; yourself)! ! !SystemAnnouncer methodsFor: 'triggering' stamp: 'EstebanLorenzano 5/3/2013 12:02'! protocolRemoved: aString inClass: aClass self announce: (ProtocolRemoved new classReorganized: aClass; protocol: aString; yourself)! ! !IconicListItem commentStamp: '' prior: 36984467! I am a wrapper used to display a morph with ahead an icon. Here is the way to use me IconicListItem new icon: UITheme current smallOkIcon asMorph; morph: 'Accept' asMorph; yourself! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/6/2013 23:23'! enabled: aBoolean self submorphs do:[ :each | (each respondsTo: #enabled:) ifTrue: [ each enabled: aBoolean ] ].! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/6/2013 23:26'! icon ^ icon! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/6/2013 23:27'! icon: anObject icon ifNotNil: [ self removeMorph: icon ]. icon := anObject. self addMorphFront: icon! ! !IconicListItem methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/6/2013 23:24'! initialize "Initialization code for IconicListItem" super initialize. self changeTableLayout; listDirection: #leftToRight; cellPositioning: #center; cellInset: 2; borderWidth: 0; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 20@16.! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/6/2013 23:25'! morph ^ morph! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/6/2013 23:27'! morph: anObject morph ifNotNil: [ self removeMorph: morph ]. morph := anObject. self addMorphBack: morph! ! !OSEnvironment methodsFor: 'accessing' stamp: 'CamilloBrunui 5/6/2013 16:37' prior: 36770360! at: aKey put: aValue ^ self setEnv: aKey value: aValue! ! !ClassOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/3/2013 11:26' prior: 19316267! addCategory: catString before: nextCategory | oldCategories | oldCategories := self categories copy. SystemAnnouncer uniqueInstance suspendAllWhile: [ super addCategory: catString before: nextCategory]. self notifyOfChangedCategoriesFrom: oldCategories to: self categories.! ! !ClassOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 5/3/2013 12:02'! notifyOfAddedProtocol: aString SystemAnnouncer uniqueInstance protocolAdded: aString inClass: self subject! ! !ClassOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 5/3/2013 12:03' prior: 19320530! notifyOfChangedCategoriesFrom: oldCollectionOrNil to: newCollectionOrNil (self hasSubject and: [oldCollectionOrNil ~= newCollectionOrNil]) ifTrue: [ ((newCollectionOrNil ifNil: [ #() ]) difference: (oldCollectionOrNil ifNil: [ #() ])) do: [ :each | self notifyOfAddedProtocol: each ]. ((oldCollectionOrNil ifNil: [ #() ]) difference: (newCollectionOrNil ifNil: [ #() ])) do: [ :each | self notifyOfRemovedProtocol: each ]. SystemAnnouncer uniqueInstance classReorganized: self subject].! ! !ClassOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 5/3/2013 12:03'! notifyOfRemovedProtocol: aString SystemAnnouncer uniqueInstance protocolRemoved: aString inClass: self subject! ! !SystemAnnouncerTest methodsFor: 'running' stamp: 'EstebanLorenzano 5/3/2013 11:10' prior: 51492337! setUp super setUp. oldSystemAnnouncer := SystemAnnouncer uniqueInstance. SystemAnnouncer announcer: nil. factory := ClassFactoryForTestCase new.! ! !SystemAnnouncerTest methodsFor: 'running' stamp: 'EstebanLorenzano 5/3/2013 11:03' prior: 51492540! tearDown super tearDown. SystemAnnouncer announcer: oldSystemAnnouncer. factory cleanUp.! ! !SystemAnnouncerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/3/2013 12:08'! testProtocolAdded | pass class classReorganized protocolAdded | pass := false. SystemAnnouncer uniqueInstance on: ProtocolAdded do: [ :ann | pass := true. classReorganized := ann classReorganized. protocolAdded := ann protocol ]. class := factory newClass. class organization addCategory: 'shiny-new-category'. self assert: pass. self assert: classReorganized equals: class. self assert: protocolAdded equals: 'shiny-new-category'! ! !SystemAnnouncerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/3/2013 12:07'! testProtocolRemoved | pass class classRemoved protocolRemoved | pass := false. SystemAnnouncer uniqueInstance on: ProtocolRemoved do: [ :ann | pass := true. classRemoved := ann classReorganized. protocolRemoved := ann protocol ]. class := factory newClass. class organization addCategory: 'shiny-new-category'. class organization removeCategory: 'shiny-new-category'. self assert: pass. self assert: classRemoved equals: class. self assert: protocolRemoved equals: 'shiny-new-category'! ! !PluggableIconListMorph methodsFor: 'display' stamp: 'BenjaminVanRyseghem 5/6/2013 23:48' prior: 29413311! itemMorphFor: anObject index: anIndex "Answer a morph for the object with the appropriate icon." |item icon| item := IconicListItem new originalObject: anObject; yourself. icon := self getIconSelector ifNotNil: [self model perform: self getIconSelector withEnoughArguments: {anObject. anIndex}]. icon ifNotNil: [ item icon: icon asMorph]. item morph: (self wrapItem: anObject index: anIndex) asMorph. ^item! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'EstebanLorenzano 5/3/2013 12:01' prior: 17346510! classReorganized: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. self selectedClass = anAnnouncement classReorganized ifTrue: [ self updateBothView ]! ! !AbstractNautilusUI methodsFor: 'announcement registration' stamp: 'EstebanLorenzano 5/3/2013 12:01' prior: 17265941! registerToSystemAnnouncements self browsedEnvironment packageOrganizer announcer weak on: RPackageCreated send: #packageCreated: to: self; on: RPackageUnregistered send: #packageUnregistred: to: self; on: RPackageRenamed send: #packageRenamed: to: self. SystemAnnouncer uniqueInstance weak on: ClassAdded send: #classAdded: to: self; on: ClassCommented send: #classCommented: to: self; on: ClassRecategorized send: #classRecategorized: to: self; on: ClassModifiedClassDefinition send: #classDefinitionModified: to: self; on: ClassRemoved send: #classRemoved: to: self; on: ClassRenamed send: #classRenamed: to: self; on: ClassReorganized send: #classReorganized: to: self; on: MethodAdded send: #methodAdded: to: self; on: MethodModified send: #methodModified: to: self; on: MethodRecategorized send: #methodRecategorized: to: self; on: MethodRemoved send: #methodRemoved: to: self; on: ProtocolAdded send: #classReorganized: to: self; on: ProtocolRemoved send: #classReorganized: to: self. ! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBrunui 5/6/2013 16:47'! getEnv: aVariableName | valueSize buffer | valueSize := self getEnvSize: aVariableName. valueSize = 0 ifTrue: [ ^ nil ]. buffer := String new: valueSize. (self getEnv: aVariableName buffer: buffer size: valueSize) = (valueSize - 1) ifFalse: [ ^ nil ]. ^ buffer allButLast! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBrunui 5/6/2013 16:51'! getEnv: nameString buffer: aBuffer size: anInteger "If the function succeeds, the return value is the number of characters stored in the buffer pointed to by aBuffer, not including the terminating null character. If aBuffer is not large enough to hold the data, the return value is the buffer size, in characters, required to hold the string and its terminating null character and the contents of aBuffer are undefined. If the function fails, the return value is zero. If the specified environment variable was not found in the environment block, GetLastError returns ERROR_ENVVAR_NOT_FOUND." ^ self nbCall: #( int GetEnvironmentVariableA ( String nameString, char * aBuffer, int anInteger ) ) module: #Kernel32! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBrunui 5/6/2013 16:41'! getEnvSize: nameString ^ self nbCall: #( int GetEnvironmentVariableA ( String nameString, nil, 0 ) ) module: #Kernel32! ! !Win32Environment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 17:55' prior: 36773564! keysAndValuesDo: aBlock "Under windows the environemtn variables are a single big String." | environmentStrings nexString | environmentStrings := self environmentStrings. [ nexString := environmentStrings readString. nexString ifEmpty: [ ^ self ]. self keysAndValuesDo: aBlock withAssociationString: nexString. environmentStrings := NBExternalAddress value: (environmentStrings value + nexString size + 1) ] repeat.! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBrunui 5/6/2013 16:56' prior: 36774087! setEnv: nameString value: valueString "This method calls the Standard C Library getenv() function" ^ self nbCall: #( int SetEnvironmentVariableA ( String nameString, String valueString) ) module: #Kernel32 options: #( optStringOrNull )! ! !Win32Environment methodsFor: 'private' stamp: 'CamilloBrunui 5/6/2013 16:53'! unsetEnv: aString ^ self setEnv: aString value: nil! ! !ButtonModel commentStamp: '' prior: 36984713! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/6/2013 23:29'! buildLabel: text withIcon: icon ^ IconicListItem new morph: text asMorph; icon: (AlphaImageMorph new image: icon); yourself! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/6/2013 23:31'! icon: anIcon iconHolder contents: anIcon! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/6/2013 23:47' prior: 33991953! initialize "Initialization code for ButtonComposableModel" super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self widget ifNotNil: [:widget | widget askBeforeChanging: newValue ]]. self on: Character space asKeyCombination do: [ self action ].! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/6/2013 23:33' prior: 18556572! label iconHolder contents ifNil: [ ^ labelHolder contents ] ifNotNil: [ :icon | ^ self buildLabel: labelHolder contents withIcon: icon ]! ! NixEnvironment removeSelector: #at:put:! "Kernel"! "Nautilus"! "Polymorph-Widgets"! "Spec-Widgets"! "System-Announcements"! "System-Platforms"! "Tests"! ----End fileIn----! ----QUIT----an Array(7 May 2013 7:36:19 am) Pharo.image priorSource: 3418920! ----STARTUP----an Array(7 May 2013 7:42:52 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 May 2013 7:42:52 am) Pharo-30109.image priorSource: 3443096! ----STARTUP----an Array(7 May 2013 10:44:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/7/2013 10:42' prior: 36973646! commentForCurrentUpdate ^ '7215 Cannot use rewrite tool with Nautilus https://pharo.fogbugz.com/f/cases/7215 10550 CompilerSyntaxErrorNotificationTest should use old Compiler https://pharo.fogbugz.com/f/cases/10550'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/7/2013 10:42'! script207 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-IgorStasenko.3.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.440.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.54.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.39.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1432.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1419.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.457.mcz NautilusCommon-MarcusDenker.133.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.804.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.24.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.144.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.816.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.535.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.501.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/7/2013 10:42'! update30110 "self new update30110" self withUpdateLog: '7215 Cannot use rewrite tool with Nautilus https://pharo.fogbugz.com/f/cases/7215 10550 CompilerSyntaxErrorNotificationTest should use old Compiler https://pharo.fogbugz.com/f/cases/10550'. self loadTogether: self script207 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CodeRewritingRule commentStamp: '' prior: 0! I am a lint rule for Code Rewrinting! !AbstractNautilusUI commentStamp: '' prior: 17251851! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !NautilusHelp commentStamp: '' prior: 36582915! I am a page of the Help book related to Nautilus! !AbstractAcceptor commentStamp: '' prior: 0! I am an abstract acceptor. The goal of my children is to properly dispatch the behavior when text is accepted. Depending of the context, different actions could be triggered! !ClassDefinitionAcceptor commentStamp: '' prior: 0! I am an acceptor in the case a class definition has been entered. My action is then to compile the definition as a class object! !ClassOrMethodDefinitionAcceptor commentStamp: '' prior: 0! I am an acceptor in the "weird" context when the text entered could be a class definition or a method definition.! !CodeRewritingAcceptor commentStamp: '' prior: 0! I am an acceptor in the context of code rewriting using RBTreeRewriting! !MethodDefinitionAcceptor commentStamp: '' prior: 0! I am an acceptor in the context of method definition! !CodeRewritingRule commentStamp: '' prior: 37008224! I am a lint rule for Code Rewrinting! !CodeRewritingRule methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 17:48'! name ^ 'Code Rewriting'! ! !CodeRewritingRule methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 17:48'! rewriteRule: aRule rewriteRule := aRule! ! !NautilusUI methodsFor: 'shortcuts from text morph' stamp: 'BenjaminVanRyseghem 4/16/2013 17:11' prior: 28311152! compileSource: aText notifying: aController | source category method | source := aText asString. acceptor accept: source asString notifying: aController.! ! !NautilusUI methodsFor: 'displaying' stamp: 'BenjaminVanRyseghem 4/16/2013 17:29' prior: 28287908! open | focus | super open. window takeKeyboardFocus. focus := list. self selectedClass ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self. focus := list2 ]. self selectedCategory ifNotNil: [:cat | categoryWidget selectProtocol: cat. methodWidget resetMethodCache. methodWidget update: #getMethodItem:. acceptor := MethodDefinitionAcceptor model: self. focus := categoryWidget ]. self selectedMethod ifNotNil: [:meth | methodWidget selectMethod: meth. acceptor := MethodDefinitionAcceptor model: self. focus := methodWidget ]. self giveFocusTo: focus. ! ! !NautilusUI methodsFor: '*NautilusRefactoring' stamp: 'BenjaminVanRyseghem 4/16/2013 17:35'! rewriteCode: aText acceptor := CodeRewritingAcceptor model: self. self sourceCode: aText! ! !NautilusUI methodsFor: 'category-method methods' stamp: 'BenjaminVanRyseghem 4/16/2013 17:08' prior: 28283361! selectedCategory: protocol self okToChange ifTrue: [ methodWidget resetMethodCache. self model package: self selectedPackage class: self selectedClass category: protocol method: nil. self resetMethodsListSelection. protocol ifNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self ] ifNotNil: [ acceptor := MethodDefinitionAcceptor model: self. self giveFocusTo: categoryWidget ]. categoryWidget changed: #selectedCategoryIndex. self changed: #sourceCodeFrom:. ^ true]. ^ false! ! !NautilusUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 17:17' prior: 28280598! selectedClassWithoutChangingSelection: aClass categoryWidget resetCategoryCache. commentTextArea ifNotNil: [ aClass ifNil: [ commentTextArea disable ] ifNotNil: [ commentTextArea enable ]]. self okToChangeBoth ifTrue: [| package packageChanged cl | package := self selectedPackage. (self showPackages not or: [self showGroups ]) ifTrue: [ aClass ifNotNil: [ package := aClass package ]]. aClass ifNil: [ acceptor := ClassDefinitionAcceptor model: self. classesSelection removeAll ] ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self ]. packageChanged := (package ~= self selectedPackage). self model package: package class: aClass category: nil method: nil. cl := aClass. cl ifNotNil: [ cl := cl theNonMetaClass ]. classesSelection at: cl put: true. self changed: #toggleButtonEnabled. self setWindowTitle. packageChanged ifTrue: [ packagesSelection removeAll. packagesSelection at: package put: true. self showGroups ifTrue: [ self updateClassView ] ifFalse: [ self updateBothView ]]. self resetCategoriesListSelection. self resetMethodsListSelection. self update. self changed: #isAClassSelected. self changed: #getComments. self changed: #instanceButtonLabel. self changed: #sourceCodeFrom:]! ! !NautilusUI methodsFor: 'category-method methods' stamp: 'BenjaminVanRyseghem 4/16/2013 17:11' prior: 28283855! selectedMethod: aMethod self okToChange ifTrue: [ self forceSelectedMethod: aMethod. self setWindowTitle. self highlightCategory: aMethod. aMethod ifNil: [ acceptor := self selectedCategory ifNil: [ ClassOrMethodDefinitionAcceptor model: self ] ifNotNil:[ MethodDefinitionAcceptor model: self ]] ifNotNil: [ acceptor := MethodDefinitionAcceptor model: self. self giveFocusTo: methodWidget ]. self changed: #sourceCodeFrom:. multipleMethodsEditor giveFocusToDefault. ^ true]. ^false ! ! !NautilusRefactoring methodsFor: 'rewrite code' stamp: 'BenjaminVanRyseghem 4/16/2013 17:24' prior: 28230435! rewriteCode self model rewriteCode: self rewriteCodeText! ! !CompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/7/2013 08:40' prior: 36322769! evaluateSelection ^Compiler new evaluate: morph editor selection readStream "Note subtle difference versus (morph editor selectionAsStream). The later does not answer the same contents and would raise a SyntaxErrorNotification with wrong sub-selection" in: nil to: nil notifying: nil ifFail: [^failure] logged: false! ! !AbstractNautilusUI commentStamp: '' prior: 37008328! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 5/7/2013 10:41' prior: 36585582! initialize super initialize. cachedHierarchy := SortHierarchically new. groupsSelection := Dictionary new. packagesSelection := Dictionary new. classesSelection := Dictionary new. shouldUpdateTitle := true. testSemaphore := Semaphore new. sourceTextAreas := OrderedCollection new. contentSelection := nil. acceptor := ClassDefinitionAcceptor model: self.! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 17:05' prior: 17257349! selectedPackage: aPackage " Force package selection, not used by the lists " self okToChange ifTrue: [ acceptor := ClassDefinitionAcceptor model: self. packagesSelection removeAll. packagesSelection at: aPackage put: true. aPackage ifNotNil: [ self giveFocusTo: list ]. self selectedPackageWithoutChangingSelection: aPackage]! ! !NautilusHelp commentStamp: '' prior: 37008959! I am a page of the Help book related to Nautilus! !NautilusHelp class methodsFor: 'accessing' stamp: 'SeanDeNigris 2/6/2013 14:42' prior: 27994665! bookName ^ 'Nautilus'.! ! !NautilusHelp class methodsFor: 'menus' stamp: 'SeanDeNigris 2/6/2013 14:51' prior: 27994786! contextMenus ^ HelpTopic title: 'Adding to context menus' contents: 'On the class-side of your object, create a method that: 1. takes one argument (a PragmaMenuAndShortcutRegistration). 2. Begins with the pragma for whichever menu you want to extend (see AbstractNautilusUI "menu pragmas" protocol) For example, to extend the menu for the method list pane: methodMenu: aBuilder To see existing examples in your image, browse senders of that pragma'! ! !NautilusHelp class methodsFor: 'accessing' stamp: 'SeanDeNigris 2/6/2013 14:46' prior: 27995379! pages ^ #(contextMenus). ! ! !AbstractAcceptor commentStamp: '' prior: 37009066! I am an abstract acceptor. The goal of my children is to properly dispatch the behavior when text is accepted. Depending of the context, different actions could be triggered! !AbstractAcceptor class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/16/2013 16:41'! model: model ^ self new model: model; yourself! ! !AbstractAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/16/2013 16:43'! accept: aText notifying: aController self subclassResponsibility! ! !AbstractAcceptor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 16:45'! model ^ model! ! !AbstractAcceptor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/16/2013 16:41'! model: anObject model := anObject! ! !ClassDefinitionAcceptor commentStamp: '' prior: 37009305! I am an acceptor in the case a class definition has been entered. My action is then to compile the definition as a class object! !ClassDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/16/2013 16:45'! accept: aText notifying: aController self model compileAClassFrom: aText notifying: aController! ! !ClassOrMethodDefinitionAcceptor commentStamp: '' prior: 37009506! I am an acceptor in the "weird" context when the text entered could be a class definition or a method definition.! !ClassOrMethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/16/2013 17:19'! accept: source notifying: aController | isClassDefinition | isClassDefinition := false. "Try to parse the source. If it succeed, it means the source represents a message send aka a class definition. On error, we switch to method definition mode" [ RBParser parseMethod: source ] on: Error do: [ isClassDefinition := true ]. isClassDefinition ifTrue: [ self model compileAClassFrom: source notifying: aController ] ifFalse: [ self model compileAMethodFromCategory: Categorizer default withSource: source notifying: aController ]! ! !CodeRewritingAcceptor commentStamp: '' prior: 37009683! I am an acceptor in the context of code rewriting using RBTreeRewriting! !CodeRewritingAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/3/2013 14:03'! accept: aText notifying: aController | environment tree rule compiler result | self model sourceTextArea update: #clearUserEdits. environment := self model browsedEnvironment. compiler := Compiler. tree := compiler evaluate: aText. rule := CodeRewritingRule new rewriteRule: tree; yourself. result := RBSmalllintChecker runRule: rule onEnvironment: environment. (ChangesBrowser changes: result builder changes) openWithSpec ! ! !MethodDefinitionAcceptor commentStamp: '' prior: 37009821! I am an acceptor in the context of method definition! !MethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/16/2013 17:04'! accept: source notifying: aController | protocol method | protocol := self model selectedCategory. method := self model selectedMethod. (protocol isNil or: [ protocol = self model allLabel ]) ifTrue: [ protocol := method ifNil: [ Categorizer default ] ifNotNil: [ method protocol ]] . self model compileAMethodFromCategory: protocol withSource: source notifying: aController! ! "CompilerTests"! "Nautilus"! "NautilusRefactoring"! ----End fileIn----! ----QUIT----an Array(7 May 2013 10:44:12 am) Pharo.image priorSource: 3443290! ----STARTUP----an Array(7 May 2013 10:50:48 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 May 2013 10:50:49 am) Pharo-30110.image priorSource: 3466332! ----STARTUP----an Array(7 May 2013 1:07:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/7/2013 13:04' prior: 36998017! commentForCurrentUpdate ^ '10543 methodDict values -> methods https://pharo.fogbugz.com/f/cases/10543 10554 clean up #schematicTempNamesString https://pharo.fogbugz.com/f/cases/10554 10553 VirtualMachine --> Smalltalk vm https://pharo.fogbugz.com/f/cases/10553'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/7/2013 13:04'! script208 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.442.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1434.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.799.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1421.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.457.mcz NautilusCommon-MarcusDenker.135.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.805.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.39.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.144.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.818.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.535.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.501.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/7/2013 13:04'! update30111 "self new update30111" self withUpdateLog: '10543 methodDict values -> methods https://pharo.fogbugz.com/f/cases/10543 10554 clean up #schematicTempNamesString https://pharo.fogbugz.com/f/cases/10554 10553 VirtualMachine --> Smalltalk vm https://pharo.fogbugz.com/f/cases/10553'. self loadTogether: self script208 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TickDialogWindow class methodsFor: 'example' stamp: 'MarcusDenker 5/6/2013 17:11' prior: 53124311! example (self itemsList: Morph methods itemsHeaderName: 'Plop' wrapBlockOrSelector: #selector title: 'Example') choose! ! !DynamicGroup methodsFor: 'protocol' stamp: 'MarcusDenker 5/6/2013 17:12' prior: 21070049! addClasses: aCollection aCollection do: [:e | self addBlock: [ e theNonMetaClass methods ]. self addBlock: [ e theMetaClass methods ]]! ! !AJx86Registers class methodsFor: 'method compilation' stamp: 'MarcusDenker 5/6/2013 17:12' prior: 17159446! installRegisterAccessors "this method creates simple accessors for all registers" | registerAccessorsCategory | registerAccessorsCategory := 'accessing registers'. "remove all methods in the 'accessing register' category" self class methods select: [ :method | method category = registerAccessorsCategory ] thenDo: [ :method | self class removeSelector: method selector ]. self all do: [ :register | | method | "install the direct accessor on this class" self installRegister: register accessorCategory: registerAccessorsCategory. "install the accessor on the assembler" self installRegister: register accessorCategory: registerAccessorsCategory on: (register isX86 ifTrue: [ AJx86Assembler ] ifFalse: [ AJx64Assembler ])] displayingProgress: [ :each| each name ].! ! !MorphTreeModel class methodsFor: 'examples' stamp: 'MarcusDenker 5/6/2013 17:11' prior: 26937221! checkListExample2 "self checkListExample2" | model | model := self new rootItems: Morph methods. model wrapBlockOrSelector: #selector; autoMultiSelection: true; headerLabel: 'Plop'; beCheckList. ^ (model openDialogWindowIn: World title: 'All Morph methods') ! ! !DiskStore class methodsFor: 'class initialization' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 20891647! checkVMVersion "Display a warning if the VM is too old" | displayError | displayError := [ ^ self inform: 'Your VM is too old for this image. Please download the latest VM.' ]. [(Smalltalk vm interpreterSourceDate > '2012-07-08+2:00' asDate) ifFalse: displayError ] on: Error do: [ :e| displayError value ].! ! !RGMethodDefinition methodsFor: '*NautilusCommon' stamp: 'MarcusDenker 5/6/2013 17:11' prior: 31691413! correspondingTestMethod self isTestMethod ifTrue: [ ^ self ] ifFalse: [| sel testClass | (self selector endsWith: ':') ifTrue: [ sel := self selector copyReplaceAll: ':' with:'' asLowercase ] ifFalse:[ sel := self selector asLowercase ]. (sel beginsWith: 'test') ifFalse: [ sel := 'test', sel]. ^ ((testClass := self methodClass correspondingForTest) = self methodClass) ifTrue: [ nil ] ifFalse:[ ( testClass methods detect: [:each | each selector asLowercase = sel ] ifNone: [ nil ]) asRingDefinition ]]! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 34663361! condenseSources "Move all the changes onto a compacted sources file." "Smalltalk condenseSources" | f newVersionString | Smalltalk vm isRunningCogit ifTrue: [ self error: 'Sources cannot be condensed in a Cog (JIT enabled) Virtual Machine. Try a Stack VM.' ]. self fixUpProblemsWithAllCategory. "The above removes any concrete, spurious '-- all --' categories, which mess up the process." newVersionString := UIManager default request: 'Please designate the version for the new source code file...' initialAnswer: Smalltalk sourceFileVersionString. newVersionString ifNil: [^ self]. newVersionString = self sourceFileVersionString ifTrue: [^ self error: 'The new source file must not be the same as the old.']. Smalltalk sourceFileVersionString: newVersionString. "Write all sources with fileIndex 1" f := FileStream newFileNamed: Smalltalk sourcesName. f header; timeStamp. 'Condensing Sources File...' displayProgressFrom: 0 to: self classNames size + self traitNames size during: [:bar | | count | count := 0. Smalltalk allClassesAndTraitsDo: [:classOrTrait | bar current: (count := count + 1). classOrTrait fileOutOn: f moveSource: true toFile: 1]]. f trailer; close. "Make a new empty changes file" self closeSourceFiles. Smalltalk changesFile renameTo: Smalltalk changesFile basename, '.old'. (FileStream newFileNamed: Smalltalk changesName) header; timeStamp; close. self lastQuitLogPosition: 0. self setMacFileInfoOn: Smalltalk image changesName. self setMacFileInfoOn: Smalltalk image sourcesName. self openSourceFiles. self inform: 'Source files have been rewritten!! Check that all is well, and then save/quit.'! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 36436948! disableModuleLoading self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm disableModuleLoading! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 36437262! forgetModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm forgetModule: aString! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 36437563! listBuiltinModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listBuiltinModule: index! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 36437872! listBuiltinModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listBuiltinModules.! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 36438342! listLoadedModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listLoadedModule: index.! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 36438649! listLoadedModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listLoadedModules! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 36439118! loadModule: aModuleName self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm loadModule: aModuleName.! ! !SmalltalkImage methodsFor: 'modules' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 36439464! unloadModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm unloadModule: aString.! ! !DynamicClassGroup methodsFor: 'queries' stamp: 'MarcusDenker 5/6/2013 17:12' prior: 21064632! methods ^ self classes gather: [:e | e methods ]! ! !DynamicClassGroup methodsFor: 'queries' stamp: 'MarcusDenker 5/6/2013 17:12' prior: 21064784! methodsFor: aClass ^ aClass methods sort: [:a :b | a selector < b selector ]! ! !TextFieldExample methodsFor: 'initialization' stamp: 'MarcusDenker 5/6/2013 17:11' prior: 52694434! initializePresenter textField acceptBlock: [:text | Smalltalk globals at: text asSymbol ifPresent: [:class | methodBrowser methods: class methods ] ifAbsent: [ methodBrowser methods: {} ]]! ! !MethodBrowser class methodsFor: 'example' stamp: 'MarcusDenker 5/6/2013 17:11' prior: 26337047! example | mb | mb := MethodBrowser new. mb openWithSpec. mb methods: Object methods! ! MethodNode removeSelector: #schematicTempNamesString! CompiledMethod removeSelector: #schematicTempNamesString! Decompiler removeSelector: #withTempNames:! BytecodeEncoder removeSelector: #schematicTempNamesString! BytecodeEncoder removeSelector: #printSchematicTempNamesOn:blockExtents:fromIndex:! "AsmJit-x86"! "Compiler"! "FileSystem-Disk"! "GroupManager"! "Kernel"! "Morphic"! "NautilusCommon"! "Polymorph-Widgets"! "Spec-Examples"! "System-Support"! ----End fileIn----! ----QUIT----an Array(7 May 2013 1:07:19 pm) Pharo.image priorSource: 3466528! ----STARTUP----an Array(7 May 2013 1:14:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 May 2013 1:14:05 pm) Pharo-30111.image priorSource: 3485025! ----STARTUP----an Array(7 May 2013 1:50:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(7 May 2013 1:50:09 pm) Pharo.image priorSource: 3485219! ----STARTUP----an Array(7 May 2013 2:05:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 May 2013 2:05:44 pm) Pharo-30111.image priorSource: 3485423! ----STARTUP----an Array(8 May 2013 8:42:04 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/8/2013 08:38' prior: 37021255! commentForCurrentUpdate ^ '10558 Improve Smalltalkhub repository detection from URL repository http://pharo.fogbugz.com/f/cases/10558 10561 RBLintRule should use RBBrowserEnvironment by default https://pharo.fogbugz.com/f/cases/10561 10565 AlainTreeModel selectedItems return an empty collection *always* https://pharo.fogbugz.com/f/cases/10565 10555 MorphTreeMorph do not popup the menu if the tree is empty https://pharo.fogbugz.com/f/cases/10555'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/8/2013 08:39'! script209 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.442.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1434.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.150.mcz Keymapping-KeyCombinations-MarcusDenker.10.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1423.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.457.mcz NautilusCommon-MarcusDenker.135.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.805.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.109.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.818.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.535.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.501.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/8/2013 08:39'! update30112 "self new update30112" self withUpdateLog: '10558 Improve Smalltalkhub repository detection from URL repository http://pharo.fogbugz.com/f/cases/10558 10561 RBLintRule should use RBBrowserEnvironment by default https://pharo.fogbugz.com/f/cases/10561 10565 AlainTreeModel selectedItems return an empty collection *always* https://pharo.fogbugz.com/f/cases/10565 10555 MorphTreeMorph do not popup the menu if the tree is empty https://pharo.fogbugz.com/f/cases/10555'. self loadTogether: self script209 merge: false. SpecProxyDebugger initialize. self flushCaches. ! ! "ScriptLoader30"! !FilteringTreeNode commentStamp: '' prior: 35385763! I am tree node supporting filtering! !RBSmalllintChecker commentStamp: '' prior: 0! I apply a lint rule to all classes and methods in a given environment.! !SearchableTree commentStamp: '' prior: 35374137! I am a tree plus an input field to be able to filter the tree elements! !FilteringTreeNode commentStamp: '' prior: 37051064! I am tree node supporting filtering! !FilteringTreeNode methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 5/7/2013 14:41'! contents ^ contents ifNil: [ contents := self childrenItems collect: [:ci | self childNodeFromItem: ci ] ]! ! !FilteringTreeNode methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/7/2013 14:41' prior: 35386242! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self contents do: [ :n | n updateAccordingTo: aFilter]. self contents removeAllSuchThat: [ :n | (aFilter keepTreeNode: n) not and: [n isEmpty]]] ! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/7/2013 14:19' prior: 35350877! menu: aMenu shifted: aBoolean menuBlockHolder contents cull: aMenu cull: aBoolean. ^ aMenu! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/7/2013 21:15' prior: 35354487! selectedItems < api: #inspect> "Return the selected items" ^ selectionHolder contents! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 14:20'! menu: menu shifted: b ^ self model menu: menu shifted: b! ! !RBSmalllintChecker commentStamp: '' prior: 37051160! I apply a lint rule to all classes and methods in a given environment.! !RBSmalllintChecker methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/7/2013 17:38' prior: 31383512! initialize methodBlock := []. environment := RBBrowserEnvironment new. context := RBSmalllintContext newNoCache! ! !MorphTreeMorph methodsFor: 'geometry' stamp: 'AlainPlantec 2/3/2012 21:42' prior: 26953913! vExtraScrollRange "Return the amount of extra blank space to include below the bottom of the scroll content." "The classic behavior would be ^bounds height - (bounds height * 3 // 4)" "Takes into accound the top header height if present" ^ super vExtraScrollRange + self topHeaderHeight ! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 5/7/2013 14:19' prior: 26974226! yellowButtonEvent: anEvent (self scrollerSubMorphFromPoint: anEvent position) ifNotNil: [:sel | sel selected ifFalse: [self listManager setSelectedMorph: sel]. ^ self yellowButtonActivity: anEvent shiftPressed ]. ^ self yellowButtonActivity: anEvent shiftPressed! ! !MCSmalltalkhubRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 14:31' prior: 24994011! baseURL ^ self smalltalkhubUrl, 'mc/'! ! !MCSmalltalkhubRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 14:31'! hostName ^ 'smalltalkhub.com'! ! !MCSmalltalkhubRepository class methodsFor: 'testing' stamp: 'CamilloBruni 5/7/2013 14:31' prior: 34499021! isResponsibleFor: aUrl ^ aUrl includesSubstring: self hostName! ! !MCSmalltalkhubRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 14:30' prior: 34499189! smalltalkhubUrl ^ 'http://', self hostName, '/'! ! !SearchableTree commentStamp: '' prior: 37051294! I am a tree plus an input field to be able to filter the tree elements! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/7/2013 14:31' prior: 35374297! defaultSpec ^ SpecLayout composed newRow: [:r | r add: #label width: 50; add: #inputField; add: #button width: 25 ] height: 25; newRow: #tree top: 25; yourself! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 14:31'! button ^ button! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/7/2013 14:30' prior: 35376292! initializeWidgets self instantiateModels: #( tree AlainTreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. button label: ''; icon: (UITheme current iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'search'; entryCompletion: nil; acceptOnCR: true! ! !MCHttpRepository class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/7/2013 14:34' prior: 34498194! location: location ^ MCServerRegistry uniqueInstance repositoryAt: location credentialsDo: [ :username :password | (self repositoryClassFor: location) new location: location; user: username; password: password; yourself ]! ! OkToolbar removeSelector: #triggerOkAction! OkToolbar removeSelector: #registerOkButtonEvents! OkToolbar removeSelector: #okButton! OkToolbar removeSelector: #okActionBlock! OkToolbar removeSelector: #okAction:! OkToolbar removeSelector: #okAction! OkToolbar removeSelector: #initializeWidgets! OkToolbar removeSelector: #initializePresenter! OkToolbar removeSelector: #initialize! OkToolbar removeSelector: #hFill! OkToolbar removeSelector: #addAll:withSpec:! OkToolbar class removeSelector: #title! OkToolbar class removeSelector: #defaultSpec! OkCancelToolbar removeSelector: #registerCancelButtonEvents! OkCancelToolbar removeSelector: #initializeWidgets! OkCancelToolbar removeSelector: #initializePresenter! OkCancelToolbar removeSelector: #initialize! OkCancelToolbar removeSelector: #cancelled! OkCancelToolbar removeSelector: #cancelButton! OkCancelToolbar removeSelector: #cancelAction:! OkCancelToolbar removeSelector: #cancelAction! OkCancelToolbar class removeSelector: #title! OkCancelToolbar class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #OkCancelToolbar! Smalltalk globals removeClassNamed: #OkToolbar! "Monticello"! "Morphic"! "Refactoring-Critics"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(8 May 2013 8:42:15 am) Pharo.image priorSource: 3485617! ----STARTUP----an Array(8 May 2013 8:48:50 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 May 2013 8:48:50 am) Pharo-30112.image priorSource: 3502638! ----STARTUP----an Array(9 May 2013 7:46:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/9/2013 07:44' prior: 37040343! commentForCurrentUpdate ^ '10563 SpecDialogWindow is not cancelled when closed (using cmd+w) https://pharo.fogbugz.com/f/cases/10563 10239 FileDialogWindow does not open properly on file https://pharo.fogbugz.com/f/cases/10239 10552 uncategorized method in ClassDescription https://pharo.fogbugz.com/f/cases/10552 10562 KMKeyCombinationChoice are not working https://pharo.fogbugz.com/f/cases/10562 10568 Copy all method in Virtual machine class to instance side https://pharo.fogbugz.com/f/cases/10568'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/9/2013 07:45'! script210 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.442.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1434.mcz KernelTests-MarcusDenker.508.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1423.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.457.mcz NautilusCommon-MarcusDenker.135.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.109.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.174.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.60.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.820.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.535.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1106.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/9/2013 07:45'! update30113 "self new update30113" self withUpdateLog: '10563 SpecDialogWindow is not cancelled when closed (using cmd+w) https://pharo.fogbugz.com/f/cases/10563 10239 FileDialogWindow does not open properly on file https://pharo.fogbugz.com/f/cases/10239 10552 uncategorized method in ClassDescription https://pharo.fogbugz.com/f/cases/10552 10562 KMKeyCombinationChoice are not working https://pharo.fogbugz.com/f/cases/10562 10568 Copy all method in Virtual machine class to instance side https://pharo.fogbugz.com/f/cases/10568'. self loadTogether: self script210 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ValueChanged commentStamp: '' prior: 54627682! A ValueChanged is an announcement raised when a value of a NewValueHolder is changed! !OkToolbar commentStamp: '' prior: 0! An OkCancelToolbar is a model for a basic Ok toolbar! !OkCancelToolbar commentStamp: '' prior: 0! An OkCancelToolbar is a model for a basic Ok-Cancel toolbar! !SpecDialogWindow commentStamp: '' prior: 50690559! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !KMKeyCombinationChoice commentStamp: '' prior: 36624058! I representing a choice between key combinations. A keyboard event will match with me when any of my key combinations matches with it.! !SpecPragmaCollector commentStamp: '' prior: 50730716! A SpecPragmaCollector is a specialized PragmaCollector. Sonce we just want specs defined on class side, we do not have to check the whole system, then to restrain.! !NewValueHolder commentStamp: '' prior: 28446064! A NewValueHolder is a new implementation of ValueHolder based on Announcements! !CollectionValueHolder commentStamp: '' prior: 19570898! A CollectionValueHolder is s a value holder designed for collections! !DictionaryValueHolder commentStamp: '' prior: 20813186! A DictionaryValueHolder is a value holder designed for dictionaries! !SelectionValueHolder commentStamp: '' prior: 32927518! A SelectionValueHolder is a value holder especially designed to contains a list selection (an index + an object)! !VirtualMachine class methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:08' prior: 54664913! allocationsBetweenGC: anInteger "allocations between GCs (read-write)" ^ self parameterAt: 5 put: anInteger! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:07'! allocationsBetweenGC "allocations between GCs (read-write)" ^ self parameterAt: 5! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:09'! allocationsBetweenGC: anInteger "allocations between GCs (read-write)" ^ self parameterAt: 5 put: anInteger! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:09'! binary "Answer the a file reference to the virtual machine binary." "SmalltalkImage current vmBinary" ^ FileLocator vmBinary ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:50'! buildDate "Return a String reflecting the build date of the VM" "Smalltalk buildDate" ^self getSystemAttribute: 1006! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:50'! cogitClass "Return the jit class that is currently executing the system (Cog VM only)" ^self getSystemAttribute: 1008! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:50'! command "return a bash-like lauch command for the vm including all arguments up to the image name " ^ String streamContents: [ :s| s nextPutAll: (self optionAt: 0). Smalltalk commandLine options do: [ :argument| (argument endsWith: '.image') ifTrue: [ ^ s contents ]. s space; nextPutAll: argument]]! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:50'! directory "Answer the a file reference to the directory containing the Smalltalk virtual machine." "SmalltalkImage current directory" ^ FileLocator vmDirectory ! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 10:57'! disableModuleLoading "Primitive. Disable a new module loading mechanism for the rest of current session. This operation is not reversable. Any subsequent attempts to load either external or internal module(s) will fail" ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:50'! documentPath "Answer the absolute path of the document passed to the vm or nil if none." "Smalltalk commandLine documentPath" ^self getSystemAttribute: 2! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:50'! extraVMMemory "Answer the current setting of the 'extraVMMemory' VM parameter. See the comment in extraVMMemory: for details." ^ self parameterAt: 23 ! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:50'! extraVMMemory: extraBytesToReserve "Request that the given amount of extra memory be reserved for use by the virtual machine to leave extra C heap space available for things like plugins, network and file buffers, and so on. This request is stored when the image is saved and honored when the image is next started up. Answer the previous value of this parameter." extraBytesToReserve < 0 ifTrue: [self error: 'VM memory reservation must be non-negative']. ^ self parameterAt: 23 put: extraBytesToReserve ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! fileName ^ (FilePath pathName: (self fullPath) isEncoded: true) asSqueakPathName! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:50'! flagInterpretedMethods: aBoolean "The Cog VM can be instructed to set the flag bit of CompiledMethods that it executes but will only interpret. This can be used e.g. to profile startup. See CompiledMethod>>#flag & CompiledMethod>>#clearFlag. This flag persists across snapshots, stored in the image header." self parameterAt: 48 put: ((self parameterAt: 48) bitClear: 2) + (aBoolean ifTrue: [2] ifFalse: [0])! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 10:57'! forgetModule: aString "Primitive. If the module named aString is loaded, unloaded. If not, and it is marked an unloadable, unmark it so the VM will try to load it again next time. See comment for #unloadModule:." ^self primitiveFailed! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/8/2013 11:51'! fullGCCount "Answer the total number of full GCs since startup (read-only)." ^ self parameterAt: 7 ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! fullPath "Return the full vm path as a string" "Ex: '/Applications/Squeak/Squeak 4.2.5beta1U.app/Contents/MacOS/Squeak VM Opt'" "SmalltalkImage current vmFullPath" ^self getSystemAttribute: 0! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:51'! gcBiasToGrow: aBool "Tell the VM to grow after tenures instead of running in a tight loop where it does IGCs over and over. For some weird reason the primitive takes an integer not a bool but oh well..." self primitiveGCBiasToGrow: (aBool ifTrue: [1] ifFalse: [0])! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:51'! gcBiasToGrowLimit: arg "Tell the VM the grow limit if the GC logic has bias to grow." ^self primitiveFailed! ! !VirtualMachine methodsFor: 'parameters' stamp: 'MarcusDenker 5/7/2013 22:55'! getParameters "Answer an Array containing the current values of the VM's internal parameter/metric registers. Each value is stored in the array at the index corresponding to its VM register. (See #vmParameterAt: and #vmParameterAt:put:.)" "Smalltalk vm getParameters" self primitiveFailed! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:50'! getSystemAttribute: attributeID "Optional. Answer the string for the system attribute with the given integer ID. Answer nil if the given attribute is not defined on this platform. On platforms that support invoking programs from command lines (e.g., Unix), this mechanism can be used to pass command line arguments to programs written in Pharo. By convention, the first command line argument that is not a VM configuration option is considered a 'document' to be filed in. Such a document can add methods and classes, can contain a serialized object, can include code to be executed, or any combination of these. Currently defined attributes include: -1000 1000th command line argument that specify VM options ... -1 first command line argument that specify VM options 0 the full path name for currently executing VM (or, on some platforms, just the path name of the VM's directory) 1 full path name of this image (better use primImageName instead) 2 a Squeak document to open, if any 3 first command line argument for Squeak programs ... 1000 1000th command line argument for Squeak programs 1001 this platform's operating system 'Mac OS', 'Win32', 'unix', ... 1002 operating system version 1003 this platform's processor type 1004 vm version 1005 window system name 1006 vm build id 1007 Interpreter class (Cog VM only) 1008 Cogit class (Cog VM only) 1201 max filename length (Mac OS only) 1202 file last error (Mac OS only) 10001 hardware details (Win32 only) 10002 operating system details (Win32 only) 10003 graphics hardware details (Win32 only)" ^ nil! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:49'! headlessOption "Return the default name for the headless option for this VM" ^ Smalltalk os isUnix ifTrue: [ '-vm-display-null' ] ifFalse: [ '-headless' ]! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! imageFile "Image file " ^ Smalltalk image imageFile! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! imagePath "Image file path Ex: '/Users/foo/Pharo/Pharo-1.1.1-dev10.09.1.image'" ^ Smalltalk image imagePath! ! !VirtualMachine methodsFor: 'parameters' stamp: 'MarcusDenker 5/7/2013 22:54'! imageVersionNumber "Image version number (6505 means the Squeak V3 format with BlockClosure support (but _without_ BlockContext support)" ^ self parameterAt: 41! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:51'! incrementalGCCount "Answer the total number of incremental GCs since startup (read-only)." ^ self parameterAt: 9 ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! interpreterClass "Return the interpreter class that is currently executing the system (Cog VM only)" ^ self getSystemAttribute: 1007! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! interpreterSourceDate "Return the date of changes given by `self interpreterSourceVersion`" | dateString parts | dateString := (self interpreterSourceVersion splitOn: 'Date: ') second. dateString first isDigit ifTrue: [ "most probably the date is in ISO 8601 Format" ^ dateString asDateAndTime ]. "Otherwise assume the old format: DDD MMM DD HH:MM:SS YYYY +TTTT ..." parts := dateString substrings first: 6. "create a more reasonable string.." dateString := String streamContents: [ :s | s nextPutAll: (parts at: 5 ); space; "year" nextPutAll: (parts at: 2 ); space; "month name" nextPutAll: (parts at: 3 ); space; "day of month" nextPutAll: (parts at: 4 ); space; "time" nextPutAll: (parts last); space "timezone"]. ^ dateString asDateAndTime ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:51'! interpreterSourceVersion "The use of this primitive not recommended. Not all VMs providing that" "Answer a string corresponding to the version of the interpreter source. This represents the version level of the Smalltalk source code (interpreter and various plugins) that is translated to C by a CCodeGenerator, as distinct from the external platform source code, typically written in C and managed separately for each platform. An optional primitive is invoked that may not be available on all virtual machines." "Smalltalk vm interpreterSourceVersion" ^ self getSystemAttribute: 1009! ! !VirtualMachine methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 22:55'! isRunningCog "Returns true if we're running on a Cog VM (JIT or StackInterpreter) (parameterAt: 42 is the number of stack pages)" ^[(self parameterAt: 42) > 0] on: Error do:[:ex| ex return: false]! ! !VirtualMachine methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 22:55'! isRunningCogit "Returns true if we're running on the Cog JIT (vmParameterAt: 46 is the size of the machine code zone)" ^[(self parameterAt: 46) > 0] on: Error do:[:ex| ex return: false]! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 10:56'! listBuiltinModule: index "Return the name of the n-th builtin module. This list is not sorted!!" ^self primitiveFailed! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 10:56'! listBuiltinModules "Smalltalk vm listBuiltinModules" "Return a list of all builtin modules (e.g., plugins). Builtin plugins are those that are compiled with the VM directly, as opposed to plugins residing in an external shared library. The list will include all builtin plugins regardless of whether they are currently loaded or not. Note that the list returned is not sorted!!" | modules index tname | modules := Array new writeStream. index := 1. [ true ] whileTrue: [ tname := self listBuiltinModule: index. tname ifNil: [ ^ modules contents ]. modules nextPut: tname. index := index + 1 ]! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 10:56'! listLoadedModule: index "Return the name of the n-th loaded module. This list is not sorted!!" ^self primitiveFailed! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 02:26'! listLoadedModules "SmalltalkImage current listLoadedModules" "Return a list of all currently loaded modules (e.g., plugins). Loaded modules are those that currently in use (e.g., active). The list returned will contain all currently active modules regardless of whether they're builtin (that is compiled with the VM) or external (e.g., residing in some external shared library). Note that the returned list is not sorted!!" | modules index tname | modules := Array new writeStream. index := 1. [true] whileTrue: [ tname := self listLoadedModule: index. tname ifNil:[^modules contents]. modules nextPut: tname. index := index + 1. ].! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 02:26'! loadModule: aModuleName "Primitive. Attempt to load a module of the given name. Fail if module cannot be found, or cannot be loaded, or failed to initialize" ^ self primitiveFailed! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:49'! maxExternalSemaphores "The size of array in some VM's where external signals for semaphores in externalObjects are handled. Essentially, if a semaphore is registered in externalObjects outside its bounds, they will not be signalled." ^ [self parameterAt: 49] on: PrimitiveFailed do: [:ex | ex return: nil]! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 11:49'! maxExternalSemaphores: aSize "This method should never be called as result of normal program execution. If it is however, handle it differently: - In development, signal an error to promt user to set a bigger size at startup immediately. - In production, accept the cost of potentially unhandled interrupts, but log the action for later review. See comment in maxExternalObjectsSilently: why this behaviour is desirable, " "Can't find a place where development/production is decided. Suggest Smalltalk image inProduction, but use an overridable temp meanwhile. " | inProduction | self maxExternalSemaphores ifNil: [^ 0]. inProduction := false. ^ inProduction ifTrue: [self maxExternalSemaphoresSilently: aSize. self crTrace: 'WARNING: Had to increase size of semaphore signal handling table due to many external objects concurrently in use'; crTrace: 'You should increase this size at startup using #maxExternalObjectsSilently:'; crTrace: 'Current table size: ' , self maxExternalSemaphores printString] ifFalse: ["Smalltalk image" self error: 'Not enough space for external objects, set a larger size at startup!!' "Smalltalk image"]! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 10:58'! maxExternalSemaphoresSilently: aSize "Changes the size of array where external signals for semaphores in externalObjects are handled.. The size can only grow, and will always be the next power of two larger than the parameter. The intended use is to set the table size to some adequate maximum as part of a non-resuming image startUp. Setting this at any time other than start-up can potentially result in lost signals during reallocation. i.e. Requests handled during copying og signals from old to new array won't be seen if they occur to indices already copied, before pointers to the new and old arrays are switched." self maxExternalSemaphores ifNil: [^ 0]. "The vm-header field where the size is stored is a short, maximum 64k entries. Well, on most platforms anyways" (aSize < 0 or: [aSize > 65535]) ifTrue: [^ DomainError signalFrom: 0 to: 65535]. ^ self parameterAt: 49 put: aSize! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:52'! maxFilenameLength "Return the maximal filename length (only under MacOS)" "Smalltalk vm maxFilenameLength" ^ self getSystemAttribute: 1201! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:52'! memoryEnd "end of memory" ^ self parameterAt: 3 ! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:52'! oldSpaceEnd "end of old-space (0-based, read-only)" ^ self parameterAt: 1 ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:52'! optionAt: i "Answer the i-th option of the command line, or nil if not so many options." ^self getSystemAttribute: i negated! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:52'! options "return an array with all the options passed to the VM (up to the image) " ^ Array streamContents: [ :s| Smalltalk commandLine options do: [ :argument| (argument endsWith: '.image') ifTrue: [ ^ s contents ]. s nextPut: argument ]]! ! !VirtualMachine methodsFor: 'parameters' stamp: 'MarcusDenker 5/7/2013 22:54'! parameterAt: parameterIndex "parameterIndex is a positive integer corresponding to one of the VM's internal parameter/metric registers. Answer with the current value of that register. Fail if parameterIndex has no corresponding register. VM parameters are numbered as follows: 1 end of old-space (0-based, read-only) 2 end of young-space (read-only) 3 end of memory (read-only) 4 allocationCount (read-only; nil in Cog VMs) 5 allocations between GCs (read-write; nil in Cog VMs) 6 survivor count tenuring threshold (read-write) 7 full GCs since startup (read-only) 8 total milliseconds in full GCs since startup (read-only) 9 incremental GCs since startup (read-only) 10 total milliseconds in incremental GCs since startup (read-only) 11 tenures of surving objects since startup (read-only) 12-20 specific to the translating VM 21 root table size (read-only) 22 root table overflows since startup (read-only) 23 bytes of extra memory to reserve for VM buffers, plugins, etc. 24 memory threshold above whichto shrink object memory (read-write) 25 memory headroom when growing object memory (read-write) 26 interruptChecksEveryNms - force an ioProcessEvents every N milliseconds (read-write) 27 number of times mark loop iterated for current IGC/FGC (read-only) includes ALL marking 28 number of times sweep loop iterated for current IGC/FGC (read-only) 29 number of times make forward loop iterated for current IGC/FGC (read-only) 30 number of times compact move loop iterated for current IGC/FGC (read-only) 31 number of grow memory requests (read-only) 32 number of shrink memory requests (read-only) 33 number of root table entries used for current IGC/FGC (read-only) 34 number of allocations done before current IGC/FGC (read-only) 35 number of survivor objects after current IGC/FGC (read-only) 36 millisecond clock when current IGC/FGC completed (read-only) 37 number of marked objects for Roots of the world, not including Root Table entries for current IGC/FGC (read-only) 38 milliseconds taken by current IGC (read-only) 39 Number of finalization signals for Weak Objects pending when current IGC/FGC completed (read-only) 40 BytesPerWord for this image 41 imageFormatVersion for the VM 42 number of stack pages in use (Cog Stack VM only, otherwise nil) 43 desired number of stack pages (stored in image file header, max 65535; Cog VMs only, otherwise nil) 44 size of eden, in bytes (Cog VMs only, otherwise nil) 45 desired size of eden, in bytes (stored in image file header; Cog VMs only, otherwise nil) 46 size of machine code zone, in bytes (stored in image file header; Cog JIT VM only, otherwise nil) 47 desired size of machine code zone, in bytes (applies at startup only, stored in image file header; Cog JIT VM only) 48 various properties of the Cog VM as an integer encoding an array of bit flags. Bit 0: implies the image's Process class has threadId as its 3rd inst var (zero relative) 49-55 reserved for VM parameters that persist in the image (such as eden above) 56 number of process switches since startup (read-only) 57 number of ioProcessEvents calls since startup (read-only) 58 number of ForceInterruptCheck (Cog VMs) or quickCheckInterruptCalls (non-Cog VMs) calls since startup (read-only) 59 number of check event calls since startup (read-only) 60 number of stack page overflows since startup (read-only; Cog VMs only) 61 number of stack page divorces since startup (read-only; Cog VMs only)" self primitiveFailed! ! !VirtualMachine methodsFor: 'parameters' stamp: 'MarcusDenker 5/7/2013 22:54'! parameterAt: parameterIndex put: newValue "parameterIndex is a positive integer corresponding to one of the VM's internal parameter/metric registers. Store newValue (a positive integer) into that register and answer with the previous value that was stored there. Fail if newValue is out of range, if parameterIndex has no corresponding register, or if the corresponding register is read-only." self primitiveFailed! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:52'! path "Answer the path for the directory containing the Smalltalk virtual machine. Return the empty string if this primitive is not implemented." "SmalltalkImage current vmPath" ^ (FilePath pathName: (self primVmPath) isEncoded: true) asSqueakPathName. ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:52'! platformSourceVersion "The use of this primitive not recommended. Not all VMs providing that" "Answer a string corresponding to the version of the external platform source code, typically written in C and managed separately for each platform. This invokes an optional primitive that may not be available on all virtual machines." "Smalltalk vm platformSourceVersion" self notify: 'This virtual machine does not support the optional primitive #primitivePlatformSourceVersion' translated. ^''! ! !VirtualMachine methodsFor: 'primitives' stamp: 'MarcusDenker 5/7/2013 22:56'! primVmPath "Answer the path for the directory containing the Smalltalk virtual machine. Return the empty string if this primitive is not implemented." "Smalltalk vmPath" ^ ''! ! !VirtualMachine methodsFor: 'primitives' stamp: 'MarcusDenker 5/7/2013 22:56'! primitiveGCBiasToGrow: arg "Tell the VM to grow after tenures instead of running in a tight loop where it does IGCs over and over. For some weird reason the primitive takes an integer not a bool but oh well..." ^self primitiveFailed! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 10:58'! processHasThreadIdInstVar: aBoolean "The threaded VM needs to know if the 4th inst var of Process is threadId which it uses to control process-to-thread binding. This flag persists across snapshots, stored in the image header." aBoolean ifTrue: [self assert: (Process instVarNames at: 4) ='threadId']. self parameterAt: 48 put: ((self parameterAt: 48) bitClear: 1) + (aBoolean asBit) ! ! !VirtualMachine methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 22:56'! processPreemptionYields "Answer whether the VM causes a process to yield on process preemption, i.e. to put a preempted process at the back of its run queue. If the parameter is unavailable (non-Cog VMs) or bit 2 (4) is 0 then preemption yields." ^(([self parameterAt: 48] on: Error do: [:ex| ^true]) allMask: 2r100) not! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 10:58'! processPreemptionYields: aBoolean "The Cog VM can be instructed not to yield on process preemption, i.e. not to put a preempted process at the back of its run queue. By default preempting a process causes it to yield (Blue Book semantics) which can have unfortunate effects. This flag persists across snapshots, stored in the image header." self parameterAt: 48 put: ((self parameterAt: 48) bitClear: 4) + (aBoolean ifTrue: [0] ifFalse: [2r100])! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:52'! setGCBiasToGrow: aNumber "Primitive. Indicate that the GC logic should be bias to grow" ^self primitiveFailed "Example: Smalltalk vm setGCBiasToGrowGCLimit: 16*1024*1024. Smalltalk vm setGCBiasToGrow: 1. "! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:52'! setGCBiasToGrowGCLimit: aNumber "Primitive. Indicate that the bias to grow logic should do a GC after aNumber Bytes" ^self primitiveFailed "Example: Smalltalk vm setGCBiasToGrowGCLimit: 16*1024*1024. "! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:53'! setGCParameters "Adjust the VM's default GC parameters to avoid premature tenuring." self allocationsBetweenGC: 4000. "do an incremental GC after this many allocations" self tenuringThreshold: 2000. "tenure when more than this many objects survive the GC" self setGCBiasToGrowGCLimit: 16*1024*1024. self setGCBiasToGrow: 1. ! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:53'! setGCSemaphore: semaIndex "Primitive. Indicate the GC semaphore index to be signaled on GC occurance." ^self primitiveFailed "Example: | index sema process | sema := Semaphore new. index := Smalltalk registerExternalObject: sema. Smalltalk setGCSemaphore: index. process := [ [[true] whileTrue:[ sema wait. Smalltalk beep. ]] ensure:[ Smalltalk setGCSemaphore: 0. Smalltalk unregisterExternalObject: sema. ]. ] fork. process inspect. "! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/7/2013 22:51'! statisticsReport "Workspace openContents: (Smalltalk vm statisticsReport) label: 'VM Statistics'" | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime upTime2 fullGCs2 fullGCTime2 incrGCs2 incrGCTime2 tenureCount2 str | oldSpaceEnd := self oldSpaceEnd. youngSpaceEnd := self youngSpaceEnd. tenureCount := self tenureCount. memoryEnd := self memoryEnd. fullGCs := self fullGCCount. fullGCTime := self totalFullGCTime. incrGCs := self incrementalGCCount. incrGCTime := self totalIncrementalGCTime. upTime := Time millisecondClockValue. str := (String new: 1000) writeStream. str << 'uptime '; print: (upTime / 1000 / 60 // 60); nextPut: $h; print: (upTime / 1000 / 60 \\ 60) asInteger; nextPut: $m; print: (upTime / 1000 \\ 60) asInteger; nextPut: $s; cr. str << 'memory '. memoryEnd printWithCommasOn: str. str << ' bytes'; cr. str << ' old '. oldSpaceEnd printWithCommasOn: str. str << ' bytes ('; print: ((oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' young '. (youngSpaceEnd - oldSpaceEnd) printWithCommasOn: str. str << ' bytes ('; print: ((youngSpaceEnd - oldSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' used '. youngSpaceEnd printWithCommasOn: str. str << ' bytes ('; print: ((youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << ' free '. (memoryEnd - youngSpaceEnd) printWithCommasOn: str. str << ' bytes ('; print: ((memoryEnd - youngSpaceEnd / memoryEnd * 100) roundTo: 0.1); << '%)'; cr. str << 'GCs '. (fullGCs + incrGCs) printWithCommasOn: str. fullGCs + incrGCs > 0 ifTrue: [ str << ' ('; print: ((upTime / (fullGCs + incrGCs)) roundTo: 1); << 'ms between GCs)' ]. str cr. str << ' full '; print: fullGCs; << ' totalling '. fullGCTime printWithCommasOn: str. str << 'ms ('; print: ((fullGCTime / upTime * 100) roundTo: 0.1); << '% uptime)'. fullGCs = 0 ifFalse: [str << ', avg '; print: ((fullGCTime / fullGCs) roundTo: 0.1); << 'ms']. str cr. str << ' incr '; print: incrGCs; << ' totalling '. incrGCTime printWithCommasOn: str. str << 'ms ('; print: ((incrGCTime / upTime * 100) roundTo: 0.1); << '% uptime), avg '; print: ((incrGCTime / incrGCs) roundTo: 0.1); << 'ms'; cr. str << ' tenures '. tenureCount printWithCommasOn: str. tenureCount = 0 ifFalse: [str << ' (avg '; print: (incrGCs / tenureCount) asInteger; << ' GCs/tenure)']. str cr. LastStats ifNil: [LastStats := Array new: 6] ifNotNil: [ upTime2 := upTime - (LastStats at: 1). fullGCs2 := fullGCs - (LastStats at: 2). fullGCTime2 := fullGCTime - (LastStats at: 3). incrGCs2 := incrGCs - (LastStats at: 4). incrGCTime2 := incrGCTime - (LastStats at: 5). tenureCount2 := tenureCount - (LastStats at: 6). str << 'Since last view '. (fullGCs2 + incrGCs2) printWithCommasOn: str. fullGCs2 + incrGCs2 > 0 ifTrue: [ str << ' ('; print: ((upTime2 / (fullGCs2 + incrGCs2)) roundTo: 1); << 'ms between GCs)'. ]. str cr. str << ' uptime '; print: ((upTime2 / 1000.0) roundTo: 0.1); << 's'; cr. str << ' full '; print: fullGCs2; << ' totalling '. fullGCTime2 printWithCommasOn: str. str << 'ms ('; print: ((fullGCTime2 / upTime2 * 100) roundTo: 0.1); << '% uptime)'. fullGCs2 = 0 ifFalse: [str << ', avg '; print: ((fullGCTime2 / fullGCs2) roundTo: 0.1); << 'ms']. str cr. str << ' incr '; print: incrGCs2; << ' totalling '. incrGCTime2 printWithCommasOn: str. str << 'ms ('; print: ((incrGCTime2 / upTime2 * 100) roundTo: 0.1); << '% uptime), avg '. incrGCs2 > 0 ifTrue: [ str print: ((incrGCTime2 / incrGCs2) roundTo: 0.1); << 'ms' ]. str cr. str << ' tenures '. tenureCount2 printWithCommasOn: str. tenureCount2 = 0 ifFalse: [str << ' (avg '; print: (incrGCs2 / tenureCount2) asInteger; << ' GCs/tenure)']. str cr. ]. LastStats at: 1 put: upTime. LastStats at: 2 put: fullGCs. LastStats at: 3 put: fullGCTime. LastStats at: 4 put: incrGCs. LastStats at: 5 put: incrGCTime. LastStats at: 6 put: tenureCount. ^ str contents ! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/8/2013 11:53'! tenureCount "tenures of surving objects since startup (read-only)." ^ self parameterAt: 11 ! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:53'! tenuringThreshold "survivor count tenuring threshold (read-write)" ^ self parameterAt: 6! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:53'! tenuringThreshold: anInteger "survivor count tenuring threshold (read-write). tenure when more than this many objects survive the GC" ^ self parameterAt: 6 put: anInteger! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/8/2013 11:53'! totalFullGCTime "Answer the total time in milliseconds spent in full GCs since startup (read-only)." ^ self parameterAt: 8 ! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/8/2013 11:53'! totalGCTime ^ self totalFullGCTime + self totalIncrementalGCTime! ! !VirtualMachine methodsFor: 'statistics' stamp: 'MarcusDenker 5/8/2013 11:53'! totalIncrementalGCTime "Answer the total time in milliseconds spent in incremental GCs since startup (read-only)." ^ self parameterAt: 10 ! ! !VirtualMachine methodsFor: 'modules' stamp: 'MarcusDenker 5/8/2013 02:26'! unloadModule: aString "Primitive. Unload the given module. This primitive is intended for development only since some platform do not implement unloading of DLL's accordingly. Also, the mechanism for unloading may not be supported on all platforms." ^self primitiveFailed! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:53'! version "Return a string of attributes representing the current VM" " Smalltalk vm version " ^ String streamContents: [ :s | s nextPutAll: self interpreterClass; cr. self isRunningCogit ifTrue: [ s nextPutAll: self cogitClass; cr ]. s nextPutAll: self interpreterSourceVersion; cr ].! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:53'! versionLabel "The use of this primitive not recommended. Not all VMs providing that" "Answer a string corresponding to the version of virtual machine. This represents the version level of the Smalltalk source code (interpreter and various plugins) that is translated to C by a CCodeGenerator, in addition to the external platform source code, typically written in C and managed separately for each platform. This invokes an optional primitive that may not be available on all virtual machines. See also vmVersion, which answers a string identifying the image from which virtual machine sources were generated." "Smalltalk vm versionLabel" self notify: 'This virtual machine does not support the optional primitive #primitiveVMVersion' translated. ^''! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:53'! vmDirectory ^ self directory ! ! !VirtualMachine methodsFor: 'accessing' stamp: 'MarcusDenker 5/8/2013 11:54'! vmFileName ^ self fileName! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 10:57'! voidCogVMState "Void any internal caches the VM maintains other than the method lookup caches. These comprise - the stack zone, where method activations are stored, and - the machine code zone, where the machine code form of CompiledMethods is held." ^self primitiveFailed! ! !VirtualMachine methodsFor: 'attributes' stamp: 'MarcusDenker 5/8/2013 10:58'! wordSize ^ WordSize ifNil: [WordSize := [self parameterAt: 40] on: Error do: [4]]! ! !VirtualMachine methodsFor: 'gc' stamp: 'MarcusDenker 5/8/2013 11:54'! youngSpaceEnd "end of young-space" ^ self parameterAt: 2 ! ! !ValueChanged commentStamp: '' prior: 37068361! A ValueChanged is an announcement raised when a value of a NewValueHolder is changed! !OkToolbar commentStamp: '' prior: 37068497! An OkCancelToolbar is a model for a basic Ok toolbar! !OkCancelToolbar commentStamp: '' prior: 37068607! An OkCancelToolbar is a model for a basic Ok-Cancel toolbar! !OkCancelToolbar class methodsFor: 'specs' stamp: 'bvr 6/4/2012 14:51'! defaultSpec ^ { #Panel. #changeTableLayout. #listDirection:. #rightToLeft. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #okButton. }. #add:. {#model. #cancelButton.}. #hSpaceFill. #vShrinkWrap. }! ! !OkCancelToolbar class methodsFor: 'specs'! title ^ 'Ok Cancel'! ! !OkCancelToolbar methodsFor: 'protocol'! cancelAction ^ cancelAction contents! ! !OkCancelToolbar methodsFor: 'protocol'! cancelAction: aBlock ^ cancelAction contents: aBlock! ! !OkCancelToolbar methodsFor: 'accessing'! cancelButton ^ cancelButton! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2012 18:32'! cancelled ^ cancelled contents! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/7/2013 18:32'! cancelled: aBoolean cancelled contents: aBoolean! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:03'! initialize "Initialization code for OkCancelToolbar" cancelled := false asValueHolder. cancelAction := [ true ] asValueHolder. super initialize.! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:03'! initializePresenter super initializePresenter. cancelButton action: [ cancelAction contents value == false ifFalse: [ cancelled contents: true. owner ifNil: [ self delete ] ifNotNil: [ owner delete ]]].! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:07'! initializeWidgets super initializeWidgets. self instantiateModels: #( cancelButton ButtonModel ). self registerCancelButtonEvents. self focusOrder add: cancelButton! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:03'! registerCancelButtonEvents cancelButton label: 'Cancel'; enabled: true; state: false! ! !OkToolbar class methodsFor: 'specs' stamp: 'bvr 6/4/2012 14:51'! defaultSpec ^ { #Panel. #changeTableLayout. #listDirection:. #rightToLeft. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #hFill}. #add:. {#model. #okButton.}. #hSpaceFill. #vShrinkWrap. }! ! !OkToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/10/2012 13:07'! title ^ 'Ok Toolbar'! ! !OkToolbar methodsFor: 'private' stamp: 'IgorStasenko 12/20/2012 14:03'! addAll: aWindow withSpec: aSpec aWindow addMorph: (self buildWithSpec: aSpec) fullFrame: ((0@0 corner: 1@0) asLayoutFrame bottomOffset: 30).! ! !OkToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/10/2012 13:05'! hFill ^ Morph new color: Color transparent; height: 0; vResizing: #rigid; hResizing: #spaceFill! ! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/11/2012 10:31'! initialize "Initialization code for OkCancelToolbar" super initialize. okAction := [ true ] asValueHolder.! ! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! initializePresenter okButton action: self okActionBlock! ! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:02'! initializeWidgets self instantiateModels: #( okButton ButtonModel ). self registerOkButtonEvents. self focusOrder add: okButton! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/10/2012 13:05'! okAction ^ okAction contents! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/10/2012 13:05'! okAction: aBlock ^ okAction contents: aBlock! ! !OkToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! okActionBlock ^ [ okAction contents value == false ifFalse: [ owner ifNil: [ self delete ] ifNotNil: [ owner delete ] ] ]! ! !OkToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/10/2012 13:05'! okButton ^ okButton! ! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:01'! registerOkButtonEvents okButton label: 'Ok'; enabled: true; state: false! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:09'! triggerOkAction self okActionBlock value! ! !SystemWindow class methodsFor: '*Keymapping-Core' stamp: 'BenjaminVanRyseghem 5/7/2013 18:38' prior: 51778831! buildShortcutsOn: aBuilder (aBuilder shortcut: #close) category: #WindowShortcuts default: $w ctrl | $w command mac do: [ :target | target close ] description: 'Close this window'.! ! !SpecDialogWindow commentStamp: '' prior: 37068732! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/7/2013 18:38'! close super close. self toolbar cancelled: true.! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 5/7/2013 09:26' prior: 21836806! selectPathName: aString "Select the directory and set the file name text from the given string." | reference | reference := aString asFileReference asAbsolute. reference exists ifFalse: [ ^ self selectPathName: reference parent fullName ]. reference isDirectory ifTrue: [ ^ self selectDirectory: reference ]. "must be a file then" self selectDirectory: reference parent. self fileNameText: reference basename.! ! !KMKeyCombinationChoice commentStamp: '' prior: 37068886! I representing a choice between key combinations. A keyboard event will match with me when any of my key combinations matches with it.! !KMKeyCombinationChoice methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 5/7/2013 18:25'! = another ^ shortcuts anySatisfy: [ :each | another = each ]! ! !KMKeyCombinationChoice methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 5/7/2013 18:26'! matches: anEventBuffer ^ shortcuts anySatisfy: [ :each | each matches: anEventBuffer ]! ! !SpecPragmaCollector commentStamp: '' prior: 37069090! A SpecPragmaCollector is a specialized PragmaCollector. Sonce we just want specs defined on class side, we do not have to check the whole system, then to restrain.! !TClassAndTraitDescription methodsFor: 'organization' stamp: 'MarcusDenker 5/8/2013 12:09' prior: 36967518! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !NewValueHolder commentStamp: '' prior: 37069318! A NewValueHolder is a new implementation of ValueHolder based on Announcements! !CollectionValueHolder commentStamp: '' prior: 37069467! A CollectionValueHolder is s a value holder designed for collections! !DictionaryValueHolder commentStamp: '' prior: 37069606! A DictionaryValueHolder is a value holder designed for dictionaries! !SelectionValueHolder commentStamp: '' prior: 37069743! A SelectionValueHolder is a value holder especially designed to contains a list selection (an index + an object)! VirtualMachine class removeSelector: #statisticsShortReport! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! "Keymapping-Core"! "Keymapping-KeyCombinations"! "Polymorph-Widgets"! "Spec-Core"! "System-Support"! "Traits"! ----End fileIn----! ----QUIT----an Array(9 May 2013 7:47:09 am) Pharo.image priorSource: 3502832! ----STARTUP----an Array(9 May 2013 7:53:38 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 May 2013 7:53:38 am) Pharo-30113.image priorSource: 3557168! ----STARTUP----an Array(9 May 2013 10:16:56 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/9/2013 10:13' prior: 37057558! commentForCurrentUpdate ^ '10503 Move Exception Test https://pharo.fogbugz.com/f/cases/10503 10506 A method need a rename :) https://pharo.fogbugz.com/f/cases/10506 10567 reducing senders of #methodDict https://pharo.fogbugz.com/f/cases/10567 10573 Smalltalk vm should return an instance of VirtualMachine https://pharo.fogbugz.com/f/cases/10573'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/9/2013 10:14'! script211 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.442.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.29.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1436.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1425.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.459.mcz NautilusCommon-MarcusDenker.135.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.822.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1109.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/9/2013 10:14'! update30114 "self new update30114" self withUpdateLog: '10503 Move Exception Test https://pharo.fogbugz.com/f/cases/10503 10506 A method need a rename :) https://pharo.fogbugz.com/f/cases/10506 10567 reducing senders of #methodDict https://pharo.fogbugz.com/f/cases/10567 10573 Smalltalk vm should return an instance of VirtualMachine https://pharo.fogbugz.com/f/cases/10573'. self loadTogether: self script211 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SmalltalkImage commentStamp: 'StephaneDucasse 6/7/2011 15:48' prior: 36682288! My singleton is a central entry point to the system. It has many roles and responsibilities (to be documented) - startup/shutdown image - source management - namespace access - tool access - platform access - VM information and parameters Startup ----------- At startup and shutdown the image execute the methods startUp: and shutdown: of registered classes (registered using addToStartUpList:, addToShutDownList:, ... methods and friends). Startup phases During the first stage of start up the UI manager, the default uimanager is switched to a specific non interactive ui manager (StartupUIManager). Note that this specific non interactive UIManager kills the system on any attempt to open windows and interaction. So be warned, don't use interaction in the first phase. Then all registered classes execute their start up procedures (which should not imply interactive behavior). After startup list is finished, any deferred startup actions are executed, which you can add using the method addDeferredStartupAction: method. ! !RPackageCompleteSetupButForModificationTest methodsFor: 'test starting situation' stamp: 'MarcusDenker 5/7/2013 23:27' prior: 31872603! testExtensionMethodOfClass "self debug: #testExtensionMethodOfClass" "P1 A1DefinedInP1>>methodDefinedInP1 B1DefinedInP1 A2DefinedInP2>>methodDefinedInP1 (was *P2) P2 A2DefinedInP2>>methodDefinedInP2 B2DefinedInB2 P3 A3DefinedInP3 A2DefinedInP2>>methodDefinedInP3 (was *P2*)" self assert: a2 selectors size = 3. "the class contains methods defined by several packages however when looking with a package view we only see the package extension." self assert: (p2 extensionMethodsForClass: a2) size = 0. self assert: (p1 extensionMethodsForClass: a1) size = 0. "show that extensionMethodsForClass: does works for methods of class defined in the package" self assert: (p1 extensionMethodsForClass: a2) size = 1. self assert: (p3 extensionMethodsForClass: a2) size = 1.! ! !Finder methodsFor: 'private-class' stamp: 'MarcusDenker 5/7/2013 23:28' prior: 22126596! constructClassNamesDictionary "Construct the dictionary in the case I'm searching in class names" | result listOfClasses | listOfClasses := self computeListOfClasses: self searchingString. result := Dictionary new. listOfClasses do: [:each | result at: each put: (each selectors sort: [:a :b | a < b])]. self resultDictionary: result.! ! !TraitTest methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 23:35' prior: 53437586! testAddAndRemoveMethodsInClassOrTrait | aC2 | aC2 := self c2 new. self assert: aC2 m51. self c2 compile: 'm51 ^123'. self assert: aC2 m51 = 123. self c2 removeSelector: #m51. self shouldnt: [aC2 m51] raise: MessageNotUnderstood. self assert: aC2 m51. self t4 removeSelector: #m11. self assert: (self t4 includesSelector: #m11)! ! !TraitTest methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 23:27' prior: 53441078! testLocalMethodWithSameCodeInTrait "Test whether there are no unintentional overridden traits methods" SystemNavigation new allBehaviorsDo: [ :each | each hasTraitComposition ifTrue: [ each selectorsDo: [ :selector | (each includesLocalSelector: selector) ifTrue: [ (each traitComposition traitProvidingSelector: selector) ifNotNil: [ :trait | (trait selectors includes: selector) ifTrue: [ self deny: (trait >> selector = (each >> selector)) ] ] ] ] ] ]! ! !TestRunner methodsFor: 'history saving' stamp: 'MarcusDenker 5/7/2013 23:35' prior: 52418013! showProgress | testCaseClasses d string | testCaseClasses := (self suiteForAllSelected tests collect: [:testCase | testCase class]) asSet. "At the end of the algorithm, d will contains all the diff between what was saved and the current result" d := Dictionary new. d at: #passed put: OrderedCollection new. d at: #failures put: OrderedCollection new. d at: #errors put: OrderedCollection new. testCaseClasses do: [ :cls | | t | (cls class includesSelector: #lastStoredRun) ifTrue: [t := cls lastStoredRun. (t at: #passed) do: [:s | (result isErrorFor: cls selector: s) ifTrue: [(d at: #errors) add: {cls . s}]. (result isFailureFor: cls selector: s) ifTrue: [(d at: #failures) add: {cls . s}] ]. (t at: #failures) do: [:s | (result isPassedFor: cls selector: s) ifTrue: [(d at: #passed) add: {cls . s}]. (result isErrorFor: cls selector: s) ifTrue: [(d at: #errors) add: {cls . s}]]. (t at: #errors) do: [:s | (result isPassedFor: cls selector: s) ifTrue: [(d at: #passed) add: {cls . s}]. (result isFailureFor: cls selector: s) ifTrue: [(d at: #failures) add: {cls . s}]]]]. string := String streamContents: [:str| str nextPutAll: '----------------'; cr. str nextPutAll: 'Diff between current result and saved result'; cr. str nextPutAll: 'New passed: '. (d at: #passed) do: [:s| str nextPutAll: s printString, ' ']. str cr. str nextPutAll: 'New failures: '. (d at: #failures) do: [:s| str nextPutAll: s printString, ' ']. str cr. str nextPutAll: 'New errors: '. (d at: #errors) do: [:s| str nextPutAll: s printString, ' ']. str cr]. Smalltalk tools workspace new contents: string; openLabel: 'SUnit Progress' string. ! ! !Metaclass methodsFor: 'fileIn/Out' stamp: 'MarcusDenker 5/7/2013 23:32' prior: 26322992! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: thisClass name , ' initialize'].! ! !Metaclass methodsFor: 'fileIn/Out' stamp: 'MarcusDenker 5/7/2013 23:32' prior: 26323440! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. (aBool and:[moveSource not and: [self includesSelector: #initialize]]) ifTrue: [aFileStream cr. aFileStream cr. aFileStream nextChunkPut: thisClass name , ' initialize'. aFileStream cr]! ! !ExceptionTests methodsFor: 'private' stamp: 'md 3/25/2003 23:40' prior: 21359802! assertSuccess: anExceptionTester self should: [ ( anExceptionTester suiteLog first) endsWith: 'succeeded'].! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'dtl 6/1/2004 21:54' prior: 21355552! testDoubleOuterPass self assertSuccess: (ExceptionTester new runTest: #doubleOuterPassTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'dtl 6/1/2004 21:54' prior: 21355734! testDoublePassOuter self assertSuccess: (ExceptionTester new runTest: #doublePassOuterTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:43' prior: 21355916! testDoubleResume self assertSuccess: (ExceptionTester new runTest: #doubleResumeTest ) ! ! !ExceptionTests methodsFor: 'testing' stamp: 'brp 10/21/2004 16:42' prior: 21355185! testNoTimeout self assertSuccess: (ExceptionTester new runTest: #simpleNoTimeoutTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:44' prior: 21356092! testNonResumableFallOffTheEndHandler self assertSuccess: (ExceptionTester new runTest: #nonResumableFallOffTheEndHandler ) ! ! !ExceptionTests methodsFor: 'testing-outer' stamp: 'dtl 6/1/2004 21:59' prior: 21358911! testNonResumableOuter self should: [ [Error signal. 4] on: Error do: [:ex | ex outer. ex return: 5] ] raise: Error ! ! !ExceptionTests methodsFor: 'testing-outer' stamp: 'dtl 6/1/2004 22:00' prior: 21359118! testNonResumablePass self should: [ [Error signal. 4] on: Error do: [:ex | ex pass. ex return: 5] ] raise: Error ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:44' prior: 21356304! testResumableFallOffTheEndHandler self assertSuccess: (ExceptionTester new runTest: #resumableFallOffTheEndHandler ) ! ! !ExceptionTests methodsFor: 'testing-outer' stamp: 'StephaneDucasse 5/28/2011 13:50' prior: 21359336! testResumableOuter | result | result := [Notification signal. 4] on: Notification do: [:ex | ex outer. ex return: 5]. self assert: result = 5 ! ! !ExceptionTests methodsFor: 'testing-outer' stamp: 'StephaneDucasse 5/28/2011 13:49' prior: 21359579! testResumablePass | result | result := [Notification signal. 4] on: Notification do: [:ex | ex pass. ex return: 5]. self assert: result = 4 ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:44' prior: 21356510! testSignalFromHandlerActionTest self assertSuccess: (ExceptionTester new runTest: #signalFromHandlerActionTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:48' prior: 21356712! testSimpleEnsure self assertSuccess: (ExceptionTester new runTest: #simpleEnsureTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:45' prior: 21356888! testSimpleEnsureTestWithError self assertSuccess: (ExceptionTester new runTest: #simpleEnsureTestWithError ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:46' prior: 21357086! testSimpleEnsureTestWithNotification self assertSuccess: (ExceptionTester new runTest: #simpleEnsureTestWithNotification ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:45' prior: 21357298! testSimpleEnsureTestWithUparrow self assertSuccess: (ExceptionTester new runTest: #simpleEnsureTestWithUparrow ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:46' prior: 21357500! testSimpleIsNested self assertSuccess: (ExceptionTester new runTest: #simpleIsNestedTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:41' prior: 21357680! testSimpleOuter self assertSuccess: (ExceptionTester new runTest: #simpleOuterTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:42' prior: 21357854! testSimplePass self assertSuccess: (ExceptionTester new runTest: #simplePassTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:43' prior: 21358026! testSimpleResignalAs self assertSuccess: (ExceptionTester new runTest: #simpleResignalAsTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:48' prior: 21358210! testSimpleResume self assertSuccess: (ExceptionTester new runTest: #simpleResumeTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:48' prior: 21358386! testSimpleRetry self assertSuccess: (ExceptionTester new runTest: #simpleRetryTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:47' prior: 21358560! testSimpleRetryUsing self assertSuccess: (ExceptionTester new runTest: #simpleRetryUsingTest ) ! ! !ExceptionTests methodsFor: 'testing-exceptiontester' stamp: 'md 3/25/2003 23:48' prior: 21358744! testSimpleReturn self assertSuccess: (ExceptionTester new runTest: #simpleReturnTest ) ! ! !ExceptionTests methodsFor: 'testing' stamp: 'brp 10/21/2004 16:41' prior: 21355347! testTimeoutWithZeroDuration self assertSuccess: (ExceptionTester new runTest: #simpleTimeoutWithZeroDurationTest ) ! ! !ProcessTerminateBug methodsFor: 'tests' stamp: 'StephaneDucasse 3/7/2010 15:39' prior: 30015796! testSchedulerTermination "self debug: #testSchedulerTermination" | process sema gotHere sema2 | gotHere := false. sema := Semaphore new. sema2 := Semaphore new. process := [ sema signal. sema2 wait. "will be suspended here" gotHere := true. "e.g., we must *never* get here" ] forkAt: Processor activeProcess priority. sema wait. "until process gets scheduled" process terminate. sema2 signal. Processor yield. "will give process a chance to continue and horribly screw up" self assert: gotHere not. ! ! !ProcessTerminateBug methodsFor: 'tests' stamp: 'StephaneDucasse 3/7/2010 15:43' prior: 30016404! testTerminationDuringUnwind "An illustration of the issue of process termination during unwind. This uses a well-behaved unwind block that we should allow to complete if at all possible." "self debug: #testTerminationDuringUnwind" | unwindStarted unwindFinished p | unwindStarted := unwindFinished := false. p := [[] ensure: [ unwindStarted := true. Processor yield. unwindFinished := true. ]] fork. self deny: unwindStarted. Processor yield. self assert: unwindStarted. self deny: unwindFinished. p terminate. self assert: unwindFinished.! ! !ProcessTerminateBug methodsFor: 'tests' stamp: 'StephaneDucasse 3/7/2010 15:40' prior: 30017054! testUnwindFromActiveProcess "self debug: #testUnwindFromActiveProcess" | sema process | sema := Semaphore forMutualExclusion. self assert: (sema isSignaled). process := [ sema critical: [ self deny: sema isSignaled. Processor activeProcess terminate.]] forkAt: Processor userInterruptPriority. self assert: sema isSignaled.! ! !ProcessTerminateBug methodsFor: 'tests' stamp: 'StephaneDucasse 3/7/2010 15:41' prior: 30017485! testUnwindFromForeignProcess "self debug:#testUnwindFromForeignProcess" | sema process | sema := Semaphore forMutualExclusion. self assert: sema isSignaled. process := [ sema critical: [self deny: sema isSignaled. sema wait. "deadlock"]] forkAt: Processor userInterruptPriority. self deny: sema isSignaled. "This is for illustration only - the BlockCannotReturn cannot be handled here (it's truncated already)" self shouldnt: [process terminate] raise: BlockCannotReturn. self assert: sema isSignaled. ! ! !NautilusUI methodsFor: 'source code area' stamp: 'MarcusDenker 5/7/2013 23:31' prior: 28314370! methodRemoved: anAnnouncement | method | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. method := anAnnouncement methodRemoved. (method methodClass = self selectedClass) ifTrue: [ self selectedMethod = anAnnouncement methodRemoved ifTrue: [ self selectedMethod: nil ]. self resetMethodsListSelection. self removeAllFromMethodsIconsCache: method. method isTestMethod ifTrue: [ "Should update class icon" ClassesIconsCache removeKey: method methodClass ifAbsent: []. self updateClassView ]. self update. (method methodClass isMeta and: [ method methodClass hasMethods not ]) ifTrue: [ self changed: #instanceButtonLabel ] ]! ! !ClassBuilder methodsFor: 'class mutation' stamp: 'MarcusDenker 5/7/2013 23:29' prior: 34446097! update: oldClass to: newClass "Convert oldClass, all its instances and possibly its meta class into newClass, instances of newClass and possibly its meta class. The process is surprisingly simple in its implementation and surprisingly complex in its nuances and potentially bad side effects. We can rely on two assumptions (which are critical): #1: The method #updateInstancesFrom: will not create any lasting pointers to 'old' instances ('old' is quote on quote since #updateInstancesFrom: will do a become of the old vs. the new instances and therefore it will not create pointers to *new* instances before the #become: which are *old* afterwards) #2: The non-preemptive execution of the critical piece of code guarantees that nobody can get a hold by 'other means' (such as process interruption and reflection) on the old instances. Given the above two, we know that after #updateInstancesFrom: there are no pointer to any old instances. After the forwarding become there will be no pointers to the old class or meta class either. Meaning that if we throw in a nice fat GC at the end of the critical block, everything will be gone (but see the comment right there). There's no need to worry. " | meta | meta := oldClass isMeta. "Note: Everything from here on will run without the ability to get interrupted to prevent any other process to create new instances of the old class." [ "Note: The following removal may look somewhat obscure and needs an explanation. When we mutate the class hierarchy we create new classes for any existing subclass. So it may look as if we don't have to remove the old class from its superclass. However, at the top of the hierarchy (the first class we reshape) that superclass itself is not newly created so therefore it will hold both the oldClass and newClass in its (obsolete or not) subclasses. Since the #become: below will transparently replace the pointers to oldClass with newClass the superclass would have newClass in its subclasses TWICE. With rather unclear effects if we consider that we may convert the meta-class hierarchy itself (which is derived from the non-meta class hierarchy). Due to this problem ALL classes are removed from their superclass just prior to converting them. Here, breaking the superclass/subclass invariant really doesn't matter since we will effectively remove the oldClass (become+GC) just a few lines below." oldClass superclass removeSubclass: oldClass. oldClass superclass removeObsoleteSubclass: oldClass. "make sure that the VM cache is clean" oldClass selectorsDo: [:aSelector | aSelector flushCache]. "Convert the instances of oldClass into instances of newClass" newClass updateInstancesFrom: oldClass. meta ifTrue:[oldClass becomeForward: newClass] ifFalse:[(Array with: oldClass with: oldClass class) elementsForwardIdentityTo: (Array with: newClass with: newClass class)]. Smalltalk garbageCollect. "Warning: Read this before you even think about removing the GC. Yes, it slows us down. Quite heavily if you have a large image. However, there's no good and simple alternative here, since unfortunately, #become: does change class pointers. What happens is that after the above become all of the instances of the old class will have a class pointer identifying them as instances of newClass. If we get our hands on any of these instances we will break immediately since their expected instance layout (that of its class, e.g., newClass) will not match their actual instance layout (that of oldClass). And getting your hands on any of those instances is really simple - just reshaping one class two times in rapid succession will do it. Reflection techniques, interrupts, etc. will only add to this problem. In the case of Metaclass things get even worse since when we recompile the entire class hierarchy we will recompile both, Metaclass and its instances (and some of its instances will have the old and some the new layout). The only easy solution to this problem would be to 'fix up' the class pointers of the old instances to point to the old class (using primitiveChangeClassTo:). But this won't work either - as we do a one-way become we would have to search the entire object memory for the oldClass and couldn't even clearly identify it unless we give it some 'special token' which sounds quite error-prone. If you really need to get rid of the GC here are some alternatives: On the image level, one could create a copy of the oldClass before becoming it into the new class and, after becoming it, 'fix up' the old instances. That would certainly work but it sounds quite complex, as we need to make sure we're not breaking any of the superclass/subclass meta/non-meta class variants. Alternatively, fix up #becomeForward on the VM-level to 'dump the source objects' of #become. This would be quite doable (just 'convert' them into a well known special class such as bitmap) yet it has problems if (accidentally or not) one of the objects in #become: appears on 'both sides of the fence' (right now, this will work ... in a way ... even though the consequences are unclear). Another alternative is to provide a dedicated primitive for this (instead of using it implicitly in become) which would allow us to dump all the existing instances right here. This is equivalent to a more general primitiveChangeClassTo: and might be worthwhile but it would likely have to keep in mind the differences between bits and pointer thingies etc. Since all of the alternatives seem rather complex and magical compared to a straight-forward GC it seems best to stick with the GC solution for now. If someone has a real need to fix this problem, that person will likely be motivated enough to check out the alternatives. Personally I'd probably go for #1 (copy the old class and remap the instances to it) since it's a solution that could be easily reverted from within the image if there's any problem with it." ] valueUnpreemptively. ! ! !ClassTraitTest methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 23:32' prior: 19357225! testChanges "Test the most important features to ensure that general functionality of class traits are working." "self run: #testChanges" | classTrait | classTrait := self t1 classTrait. self deny: (self t5 classSide includesSelector: #m1ClassSide). classTrait compile: 'm1ClassSide ^17' classified: 'mycategory'. "local selectors" self assert: (classTrait includesLocalSelector: #m1ClassSide). self deny: (classTrait includesLocalSelector: #otherSelector). "propagation" self assert: (self t5 classSide methodDict includesKey: #m1ClassSide). self assert: (self c2 class methodDict includesKey: #m1ClassSide). self shouldnt: [self c2 m1ClassSide] raise: Error. self assert: self c2 m1ClassSide equals: 17. "category" self assert: (self c2 class organization categoryOfElement: #m1ClassSide) equals: 'mycategory'. "conflicts" self t2 classSide compile: 'm1ClassSide' classified: 'mycategory'. self assert: (self c2 class methodDict includesKey: #m1ClassSide). self deny: (self c2 class includesLocalSelector: #m1ClassSide). self should: [self c2 m1ClassSide] raise: Error. "conflict category" self assert: (self c2 class organization categoryOfElement: #m1ClassSide) equals: #mycategory! ! !ClassTraitTest methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 23:33' prior: 19359491! testInitialization "self run: #testInitialization" | classTrait | classTrait := self t1 classTrait. self assert: self t1 hasClassTrait. self assert: self t1 classTrait == classTrait. self assert: classTrait isClassTrait. self assert: classTrait classSide == classTrait. self deny: classTrait isBaseTrait. self assert: classTrait baseTrait == self t1. "assert classtrait methods are propagated to users when setting traitComposition" self assert: self t4 hasClassTrait. self assert: self t5 hasClassTrait. self assert: (self t2 classSide includesLocalSelector: #m2ClassSide:). self assert: (self t4 classSide includesSelector: #m2ClassSide:). self assert: (self t5 classSide includesSelector: #m2ClassSide:). self assert: (self c2 m2ClassSide: 17) = 17! ! !TraitFileOutTest methodsFor: 'testing' stamp: 'MarcusDenker 5/7/2013 23:27' prior: 53406358! testFileOutCategory "File out whole system category, delete all classes and traits and then file them in again." "self run: #testFileOutCategory" | file | self class environment organization fileOutCategory: self categoryName. self class environment organization removeSystemCategory: self categoryName. self deny: (Smalltalk globals keys asSet includesAnyOf: #(#CA #CB #TA #TB #TC #TD)). [ file := FileStream readOnlyFileNamed: self categoryName , '.st'. file fileIn ] ensure: [ file close ]. self assert: (Smalltalk globals keys asSet includesAllOf: #(#CA #CB #TA #TB #TC #TD)). ta := Smalltalk globals at: #TA. self assert: ta traitComposition asString = 'TB + TC @ {#cc->#c} - {#c}'. self assert: (ta selectors asSet includesAllOf: #(#a #b #cc)). cb := Smalltalk globals at: #CB. self assert: cb traitComposition asString = 'TA'. self assert: (cb selectors asSet includesAllOf: #(#cb #a #b #cc)). "test classSide traitComposition of CB" self assert: cb classSide traitComposition asString = 'TA classTrait + TC'. self assert: (cb classSide selectors asSet includesAllOf: #(#d #c))! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'MarcusDenker 5/7/2013 23:33' prior: 24647087! testValidTraitComposition "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: '{TPureBehavior}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TPureBehavior).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'MarcusDenker 5/7/2013 23:33' prior: 24647999! testValidTraitComposition2 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TPureBehavior' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TPureBehavior).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'MarcusDenker 5/7/2013 23:33' prior: 24648910! testValidTraitComposition3 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TPureBehavior + TClassAndTraitDescription' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: (cls includesSelector: #comment). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TPureBehavior). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TClassAndTraitDescription).! ! !ContextPart class methodsFor: 'simulation' stamp: 'MarcusDenker 5/7/2013 23:32' prior: 20212294! initializePrimitiveSimulators "extra primitive simulators can be registered by implementing #registerPrimitiveSimulators method in class side of your class. " SpecialPrimitiveSimulators := Dictionary new. Class allSubclassesDo: [:metaclass | (metaclass includesSelector: #registerPrimitiveSimulators) ifTrue: [ metaclass theNonMetaClass registerPrimitiveSimulators. ] ].! ! !MyResumableTestError methodsFor: 'exceptiondescription' stamp: 'tfei 6/13/1999 00:46' prior: 27341126! isResumable ^true! ! !ExceptionTester methodsFor: 'accessing' stamp: 'dtl 6/1/2004 21:53' prior: 21338488! basicANSISignaledExceptionTestSelectors ^#( simpleIsNestedTest simpleOuterTest doubleOuterTest doubleOuterPassTest doublePassOuterTest simplePassTest simpleResignalAsTest simpleResumeTest simpleRetryTest simpleRetryUsingTest simpleReturnTest)! ! !ExceptionTester methodsFor: 'accessing' stamp: 'brp 10/21/2004 17:54' prior: 21338809! basicTestSelectors ^ #(#simpleEnsureTest #simpleEnsureTestWithNotification #simpleEnsureTestWithUparrow #simpleEnsureTestWithError #signalFromHandlerActionTest #resumableFallOffTheEndHandler #nonResumableFallOffTheEndHandler #doubleResumeTest #simpleTimeoutWithZeroDurationTest #simpleTimeoutTest simpleNoTimeoutTest)! ! !ExceptionTester methodsFor: 'logging' stamp: 'tfei 6/8/1999 09:17' prior: 21340386! clearLog log := nil! ! !ExceptionTester methodsFor: 'logging' stamp: 'PeterHugossonMiller 9/3/2009 01:25' prior: 21340496! contents ^( self log inject: (String new: 80) writeStream into: [:result :item | result cr; nextPutAll: item; yourself] ) contents! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:13' prior: 21341184! doSomething self log: self doSomethingString! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:14' prior: 21341311! doSomethingElse self log: self doSomethingElseString! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:14' prior: 21339203! doSomethingElseString ^'Do something else.'! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:14' prior: 21341446! doSomethingExceptional self log: self doSomethingExceptionalString! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:14' prior: 21339324! doSomethingExceptionalString ^'Do something exceptional.'! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:13' prior: 21339459! doSomethingString ^'Do something.'! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:15' prior: 21341595! doYetAnotherThing self log: self doYetAnotherThingString! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:15' prior: 21339571! doYetAnotherThingString ^'Do yet another thing.'! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'dtl 6/1/2004 21:51' prior: 21347314! doubleOuterPassTest "uses #resume" [[[self doSomething. MyTestNotification signal. self doSomethingExceptional] on: MyTestNotification do: [:ex | ex outer. self doSomethingElse]] on: MyTestNotification do: [:ex | ex pass. self doSomethingExceptional]] on: MyTestNotification do: [:ex | self doYetAnotherThing. ex resume]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'dtl 6/1/2004 21:56' prior: 21344727! doubleOuterPassTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'dtl 6/1/2004 21:49' prior: 21347753! doubleOuterTest "uses #resume" [[[self doSomething. MyTestNotification signal. self doSomethingExceptional] on: MyTestNotification do: [:ex | ex outer. self doSomethingExceptional]] on: MyTestNotification do: [:ex | ex outer. self doSomethingElse]] on: MyTestNotification do: [:ex | self doYetAnotherThing. ex resume]! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'dtl 6/1/2004 21:52' prior: 21348189! doublePassOuterTest "uses #resume" [[[self doSomething. MyTestNotification signal. self doSomethingExceptional] on: MyTestNotification do: [:ex | ex pass. self doSomethingExceptional]] on: MyTestNotification do: [:ex | ex outer. self doSomethingElse]] on: MyTestNotification do: [:ex | self doYetAnotherThing. ex resume]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'dtl 6/1/2004 21:56' prior: 21344983! doublePassOuterTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 11/14/1999 17:26' prior: 21352327! doubleResumeTest [self doSomething. MyResumableTestError signal. self doSomethingElse. MyResumableTestError signal. self doYetAnotherThing] on: MyResumableTestError do: [:ex | ex resume].! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 11/14/1999 17:29' prior: 21342012! doubleResumeTestResults ^OrderedCollection new add: self doSomethingString; add: self doSomethingElseString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'accessing' stamp: 'brp 10/21/2004 17:15' prior: 21339698! iterationsBeforeTimeout ^ iterationsBeforeTimeout! ! !ExceptionTester methodsFor: 'accessing' stamp: 'brp 10/21/2004 17:16' prior: 21339826! iterationsBeforeTimeout: anInteger iterationsBeforeTimeout := anInteger! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/7/1999 15:03' prior: 21339975! log log == nil ifTrue: [log := OrderedCollection new]. ^log! ! !ExceptionTester methodsFor: 'logging' stamp: 'tfei 6/7/1999 15:03' prior: 21340727! log: aString self log add: aString! ! !ExceptionTester methodsFor: 'logging' stamp: 'tfei 6/12/1999 23:07' prior: 21340838! logTest: aSelector self suiteLog add: aSelector! ! !ExceptionTester methodsFor: 'logging' stamp: 'tfei 6/8/1999 09:38' prior: 21340961! logTestResult: aString | index | index := self suiteLog size. self suiteLog at: index put: ((self suiteLog at: index), ' ', aString)! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:16' prior: 21341734! methodWithError MyTestError signal: self testString! ! !ExceptionTester methodsFor: 'pseudo actions' stamp: 'tfei 6/8/1999 09:16' prior: 21341868! methodWithNotification MyTestNotification signal: self testString! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/7/1999 13:43' prior: 21352652! nonResumableFallOffTheEndHandler [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [:ex | self doSomethingExceptional]. self doYetAnotherThing! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 6/8/1999 09:21' prior: 21342306! nonResumableFallOffTheEndHandlerResults ^OrderedCollection new add: self doSomethingString; add: self doSomethingExceptionalString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/9/1999 16:07' prior: 21352907! resumableFallOffTheEndHandler [self doSomething. MyTestNotification signal. self doSomethingElse] on: MyTestNotification do: [:ex | self doSomethingExceptional]. self doYetAnotherThing! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 8/19/1999 02:39' prior: 21342566! resumableFallOffTheEndHandlerResults ^OrderedCollection new add: self doSomethingString; add: self doSomethingExceptionalString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'suites' stamp: 'tfei 6/13/1999 01:25' prior: 21351248! runAllTests "ExceptionTester new runAllTests" self runBasicTests; runBasicANSISignaledExceptionTests! ! !ExceptionTester methodsFor: 'suites' stamp: 'tfei 6/12/1999 23:54' prior: 21351429! runBasicANSISignaledExceptionTests self basicANSISignaledExceptionTestSelectors do: [:eachTestSelector | self runTest: eachTestSelector]! ! !ExceptionTester methodsFor: 'suites' stamp: 'tfei 6/9/1999 16:06' prior: 21351648! runBasicTests self basicTestSelectors do: [:eachTestSelector | self runTest: eachTestSelector]! ! !ExceptionTester methodsFor: 'testing' stamp: 'brp 10/21/2004 17:40' prior: 21351828! runTest: aSelector | actualResult expectedResult | [ self logTest: aSelector; clearLog; perform: aSelector ] on: MyTestError do: [ :ex | self log: 'Unhandled Exception'. ex return: nil ]. actualResult := self log. expectedResult := self perform: (aSelector, #Results) asSymbol. actualResult = expectedResult ifTrue: [self logTestResult: 'succeeded'] ifFalse: [self logTestResult: 'failed' ]. ! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 8/19/1999 01:39' prior: 21353173! signalFromHandlerActionTest [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [self doYetAnotherThing. MyTestError signal]! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 8/19/1999 01:51' prior: 21342823! signalFromHandlerActionTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: 'Unhandled Exception'; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/8/1999 09:44' prior: 21353412! simpleEnsureTest [self doSomething. self doSomethingElse] ensure: [self doYetAnotherThing]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 6/8/1999 09:47' prior: 21343065! simpleEnsureTestResults ^OrderedCollection new add: self doSomethingString; add: self doSomethingElseString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/8/1999 12:50' prior: 21353585! simpleEnsureTestWithError [self doSomething. MyTestError signal. self doSomethingElse] ensure: [self doYetAnotherThing]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 6/9/1999 17:44' prior: 21343301! simpleEnsureTestWithErrorResults ^OrderedCollection new add: self doSomethingString; add: 'Unhandled Exception'; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/8/1999 10:15' prior: 21353788! simpleEnsureTestWithNotification [self doSomething. self methodWithNotification. self doSomethingElse] ensure: [self doYetAnotherThing]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 6/8/1999 10:13' prior: 21343541! simpleEnsureTestWithNotificationResults ^OrderedCollection new add: self doSomethingString; add: self doSomethingElseString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/9/1999 16:04' prior: 21354007! simpleEnsureTestWithUparrow [self doSomething. true ifTrue: [^nil]. self doSomethingElse] ensure: [self doYetAnotherThing]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'tfei 6/8/1999 18:55' prior: 21343793! simpleEnsureTestWithUparrowResults ^OrderedCollection new add: self doSomethingString; " add: self doSomethingElseString;" add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 01:27' prior: 21348630! simpleIsNestedTest "uses resignalAs:" [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [:ex | ex isNested "expecting to detect handler in #runTest:" ifTrue: [self doYetAnotherThing. ex resignalAs: MyTestNotification new]]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:09' prior: 21345241! simpleIsNestedTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'brp 10/22/2004 12:00' prior: 21354214! simpleNoTimeoutTest [ self doSomething ] valueWithin: 1 day onTimeout: [ self doSomethingElse ]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'brp 10/21/2004 16:54' prior: 21344043! simpleNoTimeoutTestResults ^OrderedCollection new add: self doSomethingString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tpr 5/27/2004 21:50' prior: 21349002! simpleOuterTest "uses #resume" [[self doSomething. MyTestNotification signal. "self doSomethingElse" self doSomethingExceptional] on: MyTestNotification do: [:ex | ex outer. self doSomethingElse]] on: MyTestNotification do: [:ex | self doYetAnotherThing. ex resume]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:10' prior: 21345498! simpleOuterTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 00:37' prior: 21349376! simplePassTest [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [:ex | self doYetAnotherThing. ex pass "expecting handler in #runTest:"]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:10' prior: 21345752! simplePassTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: 'Unhandled Exception'; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 02:12' prior: 21349652! simpleResignalAsTest "ExceptionTester new simpleResignalAsTest" [self doSomething. MyTestNotification signal. self doSomethingElse] on: MyTestNotification do: [:ex | ex resignalAs: MyTestError new]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:11' prior: 21346000! simpleResignalAsTestResults ^OrderedCollection new add: self doSomethingString; add: 'Unhandled Exception'; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'nice 1/5/2010 15:59' prior: 21349951! simpleResumeTest "see if we can resume twice" [ | it |self doSomething. it := MyResumableTestError signal. it = 3 ifTrue: [self doSomethingElse]. it := MyResumableTestError signal. it = 3 ifTrue: [self doSomethingElse]. ] on: MyResumableTestError do: [:ex | self doYetAnotherThing. ex resume: 3]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'RAA 12/8/2000 12:59' prior: 21346216! simpleResumeTestResults "see if we can resume twice" ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingElseString; add: self doYetAnotherThingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 01:02' prior: 21350361! simpleRetryTest | theMeaningOfLife | theMeaningOfLife := nil. [self doSomething. theMeaningOfLife == nil ifTrue: [MyTestError signal] ifFalse: [self doSomethingElse]] on: MyTestError do: [:ex | theMeaningOfLife := 42. self doYetAnotherThing. ex retry]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:23' prior: 21346580! simpleRetryTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; add: self doSomethingString; add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 01:03' prior: 21350734! simpleRetryUsingTest [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [:ex | ex retryUsing: [self doYetAnotherThing]]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 01:23' prior: 21346870! simpleRetryUsingTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'tfei 6/13/1999 00:59' prior: 21350985! simpleReturnTest | it | it := [self doSomething. MyTestError signal. self doSomethingElse] on: MyTestError do: [:ex | ex return: 3]. it = 3 ifTrue: [self doYetAnotherThing]! ! !ExceptionTester methodsFor: 'signaledexception results' stamp: 'tfei 6/13/1999 02:22' prior: 21347097! simpleReturnTestResults ^OrderedCollection new add: self doSomethingString; add: self doYetAnotherThingString; yourself! ! !ExceptionTester methodsFor: 'tests' stamp: 'brp 10/22/2004 12:00' prior: 21354392! simpleTimeoutTest | n | [1 to: 1000000 do: [ :i | n := i. self doSomething ] ] valueWithin: 50 milliSeconds onTimeout: [ self iterationsBeforeTimeout: n. self doSomethingElse ]! ! !ExceptionTester methodsFor: 'results' stamp: 'brp 10/21/2004 17:44' prior: 21344211! simpleTimeoutTestResults | things | things := OrderedCollection new: self iterationsBeforeTimeout. self iterationsBeforeTimeout timesRepeat: [ things add: self doSomethingString ]. things add: self doSomethingElseString. ^ things! ! !ExceptionTester methodsFor: 'tests' stamp: 'brp 10/22/2004 12:00' prior: 21354652! simpleTimeoutWithZeroDurationTest [ self doSomething ] valueWithin: 0 seconds onTimeout: [ self doSomethingElse ]. ! ! !ExceptionTester methodsFor: 'results' stamp: 'brp 10/21/2004 16:52' prior: 21344524! simpleTimeoutWithZeroDurationTestResults ^OrderedCollection new add: self doSomethingElseString; yourself! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:30' prior: 21340115! suiteLog suiteLog == nil ifTrue: [suiteLog := OrderedCollection new]. ^suiteLog! ! !ExceptionTester methodsFor: 'accessing' stamp: 'tfei 6/8/1999 09:15' prior: 21340275! testString ^'This is only a test.'! ! !ExceptionTester methodsFor: 'tests' stamp: 'tfei 6/7/1999 14:28' prior: 21354847! warningTest self log: 'About to signal warning.'. Warning signal: 'Ouch'. self log: 'Warning signal handled and resumed.'! ! !SmalltalkImage commentStamp: 'StephaneDucasse 6/7/2011 15:48' prior: 37122588! My singleton is a central entry point to the system. It has many roles and responsibilities (to be documented) - startup/shutdown image - source management - namespace access - tool access - platform access - VM information and parameters Startup ----------- At startup and shutdown the image execute the methods startUp: and shutdown: of registered classes (registered using addToStartUpList:, addToShutDownList:, ... methods and friends). Startup phases During the first stage of start up the UI manager, the default uimanager is switched to a specific non interactive ui manager (StartupUIManager). Note that this specific non interactive UIManager kills the system on any attempt to open windows and interaction. So be warned, don't use interaction in the first phase. Then all registered classes execute their start up procedures (which should not imply interactive behavior). After startup list is finished, any deferred startup actions are executed, which you can add using the method addDeferredStartupAction: method. ! !SmalltalkImage methodsFor: 'accessing' stamp: 'MarcusDenker 5/9/2013 08:23' prior: 33504803! vm "Answer the object to query about virtual machine." ^ vm ifNil: [vm := VirtualMachine new]! ! !ClassDescription methodsFor: 'accessing class hierarchy' stamp: 'MarcusDenker 5/7/2013 23:31' prior: 19199278! classesThatImplementAllOf: selectorSet "Return an array of any classes that implement all the messages in selectorSet." | found remaining | found := OrderedCollection new. selectorSet do: [:sel | (self includesSelector: sel) ifTrue: [found add: sel]]. found isEmpty ifTrue: [^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: selectorSet)]] ifFalse: [remaining := selectorSet copyWithoutAll: found. remaining isEmpty ifTrue: [^ Array with: self]. ^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: remaining)]]! ! !ClassDescription methodsFor: '*refactoring-core-fixes' stamp: 'MarcusDenker 5/7/2013 23:29' prior: 19196043! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! GroupWindowMorph removeSelector: #changePropotionalLayout! "Kernel"! "KernelTests"! "Morphic"! "Nautilus"! "RPackage-Tests"! "Refactoring-Core"! "SUnit-UI"! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(9 May 2013 10:17:17 am) Pharo.image priorSource: 3557362! ----STARTUP----an Array(9 May 2013 10:23:41 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 May 2013 10:23:41 am) Pharo-30114.image priorSource: 3615937! ----STARTUP----an Array(9 May 2013 8:28:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/9/2013 20:27' prior: 37112089! commentForCurrentUpdate ^ '10577 deprecate all decompiler API but #decompileMethod: https://pharo.fogbugz.com/f/cases/10577 10581 MenuMorph hardcode bounds instead of using defaultBounds https://pharo.fogbugz.com/f/cases/10581 10579 Small cleanup DebugContext https://pharo.fogbugz.com/f/cases/10579 10574 remove class side methods VirtualMachine https://pharo.fogbugz.com/f/cases/10574'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/9/2013 20:27'! script212 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.445.mcz CompilerTests-MarcusDenker.147.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.31.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.106.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1436.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.459.mcz NautilusCommon-MarcusDenker.135.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.202.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.824.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1109.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/9/2013 20:27'! update30115 "self new update30115" self withUpdateLog: '10577 deprecate all decompiler API but #decompileMethod: https://pharo.fogbugz.com/f/cases/10577 10581 MenuMorph hardcode bounds instead of using defaultBounds https://pharo.fogbugz.com/f/cases/10581 10579 Small cleanup DebugContext https://pharo.fogbugz.com/f/cases/10579 10574 remove class side methods VirtualMachine https://pharo.fogbugz.com/f/cases/10574'. self loadTogether: self script212 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Decompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 20585885! decompile: aSelector in: aClass "See Decompiler|decompile:in:method:. The method is found by looking up the message, aSelector, in the method dictionary of the class, aClass." self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompile: aSelector in: aClass method: (aClass compiledMethodAt: aSelector)! ! !Decompiler methodsFor: 'private' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 20586231! decompile: aSelector in: aClass method: aMethod ^self decompile: aSelector in: aClass method: aMethod using: (self constructorForMethod: aMethod)! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'GaryChambers 9/21/2011 14:12' prior: 53250385! basicDrawOn: aCanvas "Draw on the canvas. Taken from MenuItemMorph for minor refactoring." | stringColor stringBounds| stringColor := self stringColorToUse. stringBounds := self stringBoundsToUse. self isSelected & self isEnabled ifTrue: [ aCanvas fillRectangle: self bounds fillStyle: self selectionFillStyle borderStyle: self selectionBorderStyle]. self hasIcon ifTrue: [|iconForm| iconForm := self icon. self drawIcon: iconForm on: aCanvas in: stringBounds. stringBounds := stringBounds left: stringBounds left + iconForm width + 2]. self hasMarker ifTrue: [ stringBounds := stringBounds left: stringBounds left + self submorphBounds width + 8]. stringBounds := stringBounds top: stringBounds top + stringBounds bottom - self fontToUse height // 2. stringBounds := stringBounds bottom: stringBounds top + self fontToUse height. self drawText: contents on: aCanvas in: stringBounds. self hasSubMenu ifTrue: [|subMenuMarker| subMenuMarker := self subMenuMarker deepCopy mapColor: Color black to: stringColor. self drawSubMenuMarker: subMenuMarker on: aCanvas in: stringBounds]! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'gvc 10/17/2008 14:05' prior: 53251591! drawIcon: aForm on: aCanvas in: aRectangle "Draw the icon on the canvas within the given bounds." |iconForm| self isEnabled ifTrue: [iconForm := aForm] ifFalse: [iconForm := Form extent: aForm extent depth: 32. iconForm fillColor: (Color white alpha: 0.003922). (iconForm getCanvas asAlphaBlendingCanvas: 0.5) drawImage: aForm at: 0@0]. aCanvas translucentImage: iconForm at: aRectangle topLeft + (0@(aRectangle height - iconForm height // 2))! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'EstebanLorenzano 1/30/2013 18:36' prior: 53252169! drawKeyTextOn: aCanvas "Draw the key text on the canvas." |ktp ktw b| self keyText ifNil: [^self]. ktp := self hasSubMenu ifTrue: [self right - self subMenuMarker width] ifFalse: [self right]. ktp := ktp - (ktw := self fontToUse widthOfString: self keyText). b := (ktp @ (self bounds top + self bounds bottom - self fontToUse height // 2) extent: ktw @ self height). self drawText: self keyText on: aCanvas in: b color: Color gray muchDarker.! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'gvc 10/17/2008 14:11' prior: 53252713! drawSubMenuMarker: aForm on: aCanvas in: aRectangle "Draw the submenu marker on the canvas within the given bounds." |markerRect| markerRect := aRectangle topRight + (aForm width negated @ (aRectangle height - aForm height // 2)) extent: aForm extent. self isInDockingBar ifTrue: [markerRect translateBy: -4@1]. self drawIcon: aForm on: aCanvas in: markerRect! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'EstebanLorenzano 1/30/2013 17:35' prior: 53253183! drawText: aStringOrText on: aCanvas in: aRectangle ^ self drawText: aStringOrText on: aCanvas in: aRectangle color: self stringColorToUse.! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'EstebanLorenzano 1/30/2013 17:38' prior: 53253437! drawText: aStringOrText on: aCanvas in: aRectangle color: stringColor "Draw the text on the canvas within the given bounds." (self enabled not and: [self theme disabledItemStyle = #inset]) ifTrue: [ aCanvas drawString: aStringOrText in: aRectangle font: self fontToUse color: stringColor muchLighter lighter; drawString: aStringOrText in: (aRectangle translateBy: -1) font: self fontToUse color: stringColor] ifFalse: [aCanvas drawString: aStringOrText in: aRectangle font: self fontToUse color: stringColor ]! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 36218257! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass ! ! !Compiler class methodsFor: 'decompiling' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 36218423! decompile: aSelector in: aClass method: aMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 36218935! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass ! ! !Compiler methodsFor: 'public - decompiler' stamp: 'MarcusDenker 5/9/2013 11:07' prior: 36219103! decompile: aSelector in: aClass method: aMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !MenuMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/8/2013 14:20'! defaultBounds ^ 0 @ 0 corner: 40 @ 10! ! !MenuMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/8/2013 14:54' prior: 25506965! initialize super initialize. self setDefaultParameters. self listDirection: #topToBottom. self hResizing: #shrinkWrap. self vResizing: #shrinkWrap. defaultTarget := nil. selectedItem := nil. stayUp := false. popUpOwner := nil. self setProperty: #morphicLayerNumber toValue: self morphicLayerNumber. self theme currentSettings preferRoundCorner ifTrue: [ self useRoundedCorners ]! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'MarcusDenker 5/9/2013 09:02' prior: 35918709! recompileCurrentMethodTo: aText | classOfMethod selector | classOfMethod := self selectedClass. selector := classOfMethod compiler parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName isDoIt) and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [ self inform: 'can''t change selector'. ^ nil]. selector := classOfMethod compile: aText classified: self selectedMessageCategoryName notifying: nil. selector isNil ifFalse: [ ^ classOfMethod compiledMethodAt: selector. ] ifTrue: [ ^ nil ] ! ! VirtualMachine class removeSelector: #youngSpaceEnd! VirtualMachine class removeSelector: #wordSize! VirtualMachine class removeSelector: #voidCogVMState! VirtualMachine class removeSelector: #vmFileName! VirtualMachine class removeSelector: #vmDirectory! VirtualMachine class removeSelector: #versionLabel! VirtualMachine class removeSelector: #version! VirtualMachine class removeSelector: #unloadModule:! VirtualMachine class removeSelector: #totalIncrementalGCTime! VirtualMachine class removeSelector: #totalGCTime! VirtualMachine class removeSelector: #totalFullGCTime! VirtualMachine class removeSelector: #tenuringThreshold:! VirtualMachine class removeSelector: #tenuringThreshold! VirtualMachine class removeSelector: #tenureCount! VirtualMachine class removeSelector: #statisticsReport! VirtualMachine class removeSelector: #setGCSemaphore:! VirtualMachine class removeSelector: #setGCParameters! VirtualMachine class removeSelector: #setGCBiasToGrowGCLimit:! VirtualMachine class removeSelector: #setGCBiasToGrow:! VirtualMachine class removeSelector: #processPreemptionYields:! VirtualMachine class removeSelector: #processPreemptionYields! VirtualMachine class removeSelector: #processHasThreadIdInstVar:! VirtualMachine class removeSelector: #primitiveGCBiasToGrow:! VirtualMachine class removeSelector: #primVmPath! VirtualMachine class removeSelector: #platformSourceVersion! VirtualMachine class removeSelector: #path! VirtualMachine class removeSelector: #parameterAt:put:! VirtualMachine class removeSelector: #parameterAt:! VirtualMachine class removeSelector: #options! VirtualMachine class removeSelector: #optionAt:! VirtualMachine class removeSelector: #oldSpaceEnd! VirtualMachine class removeSelector: #memoryEnd! VirtualMachine class removeSelector: #maxFilenameLength! VirtualMachine class removeSelector: #maxExternalSemaphoresSilently:! VirtualMachine class removeSelector: #maxExternalSemaphores:! VirtualMachine class removeSelector: #maxExternalSemaphores! VirtualMachine class removeSelector: #loadModule:! VirtualMachine class removeSelector: #listLoadedModules! VirtualMachine class removeSelector: #listLoadedModule:! VirtualMachine class removeSelector: #listBuiltinModules! VirtualMachine class removeSelector: #listBuiltinModule:! VirtualMachine class removeSelector: #isRunningCogit! VirtualMachine class removeSelector: #isRunningCog! VirtualMachine class removeSelector: #interpreterSourceVersion! VirtualMachine class removeSelector: #interpreterSourceDate! VirtualMachine class removeSelector: #interpreterClass! VirtualMachine class removeSelector: #incrementalGCCount! VirtualMachine class removeSelector: #imageVersionNumber! VirtualMachine class removeSelector: #imagePath! VirtualMachine class removeSelector: #imageFile! VirtualMachine class removeSelector: #headlessOption! VirtualMachine class removeSelector: #getSystemAttribute:! VirtualMachine class removeSelector: #getParameters! VirtualMachine class removeSelector: #gcBiasToGrowLimit:! VirtualMachine class removeSelector: #gcBiasToGrow:! VirtualMachine class removeSelector: #fullPath! VirtualMachine class removeSelector: #fullGCCount! VirtualMachine class removeSelector: #forgetModule:! VirtualMachine class removeSelector: #flagInterpretedMethods:! VirtualMachine class removeSelector: #fileName! VirtualMachine class removeSelector: #extraVMMemory:! VirtualMachine class removeSelector: #extraVMMemory! VirtualMachine class removeSelector: #documentPath! VirtualMachine class removeSelector: #disableModuleLoading! VirtualMachine class removeSelector: #directory! VirtualMachine class removeSelector: #command! VirtualMachine class removeSelector: #cogitClass! VirtualMachine class removeSelector: #buildDate! VirtualMachine class removeSelector: #binary! VirtualMachine class removeSelector: #allocationsBetweenGC:! VirtualMachine class removeSelector: #allocationsBetweenGC! DebugContext removeSelector: #gtDebuggerRetrieveVariableValuePairs! "Compiler"! "DebuggerModel"! "Morphic"! "System-Support"! ----End fileIn----! ----QUIT----an Array(9 May 2013 8:29:08 pm) Pharo.image priorSource: 3616133! ----STARTUP----an Array(9 May 2013 8:35:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 May 2013 8:35:44 pm) Pharo-30115.image priorSource: 3637943! ----STARTUP----an Array(9 May 2013 10:09:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/9/2013 22:07' prior: 37170860! commentForCurrentUpdate ^ '10540 Move most methods in CompiledMethod category debuggersupport to DebuggerMethodMap https://pharo.fogbugz.com/f/cases/10540 10037 drag-drop DNU https://pharo.fogbugz.com/f/cases/10037 10575 Cleanup System-Changes a little https://pharo.fogbugz.com/f/cases/10575 10566 Nautilus method icons are not properly cached https://pharo.fogbugz.com/f/cases/10566'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/9/2013 22:07'! script213 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.88.mcz AST-Interpreter-Extension-MarcusDenker.30.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.446.mcz CompilerTests-MarcusDenker.149.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.31.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1438.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.204.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.824.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1111.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/9/2013 22:07'! update30116 "self new update30116" self withUpdateLog: '10540 Move most methods in CompiledMethod category debuggersupport to DebuggerMethodMap https://pharo.fogbugz.com/f/cases/10540 10037 drag-drop DNU https://pharo.fogbugz.com/f/cases/10037 10575 Cleanup System-Changes a little https://pharo.fogbugz.com/f/cases/10575 10566 Nautilus method icons are not properly cached https://pharo.fogbugz.com/f/cases/10566'. self loadTogether: self script213 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/9/2013 11:26' prior: 19384913! testBlockNumbering "Test that the compiler and CompiledMethod agree on the block numbering of a substantial doit." "self new testBlockNumbering" | methodNode method tempRefs | methodNode := Parser new encoderClass: EncoderForV3PlusClosures; parse: 'foo | numCopiedValuesCounts classToRemove | numCopiedValuesCounts := Dictionary new. 0 to: 32 do: [:i| numCopiedValuesCounts at: i put: 0]. Transcript clear. Smalltalk allClasses remove: classToRemove; do: [:c| {c. c class} do: [:b| Transcript nextPut: b name first; endEntry. b selectorsAndMethodsDo: [:s :m| | pn | m isQuick not ifTrue: [pn := b parserClass new encoderClass: EncoderForV3PlusClosures; parse: (b sourceCodeAt: s) class: b. pn generate. [pn accept: nil] on: MessageNotUnderstood do: [:ex| | msg numCopied | msg := ex message. (msg selector == #visitBlockNode: and: [(msg argument instVarNamed: ''optimized'') not]) ifTrue: [numCopied := (msg argument computeCopiedValues: pn) size. numCopiedValuesCounts at: numCopied put: (numCopiedValuesCounts at: numCopied) + 1]. msg setSelector: #==. ex resume: nil]]]]]. numCopiedValuesCounts' class: Object. method := methodNode generate. tempRefs := methodNode encoder blockExtentsToTempsMap. self assert: tempRefs keys asSet = (method debuggerMap startpcsToBlockExtents: method) values asSet! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/9/2013 11:26' prior: 19386556! testBlockNumberingForInjectInto "Test that the compiler and CompiledMethod agree on the block numbering of Collection>>inject:into: and that temp names for inject:into: are recorded." "self new testBlockNumberingForInjectInto" | methodNode method tempRefs | methodNode := Parser new encoderClass: EncoderForV3PlusClosures; parse: (Collection sourceCodeAt: #inject:into:) class: Collection. method := methodNode generate. tempRefs := methodNode encoder blockExtentsToTempsMap. self assert: tempRefs keys asSet = (method debuggerMap startpcsToBlockExtents: method) values asSet. self assert: ((tempRefs includesKey: (0 to: 6)) and: [((tempRefs at: (0 to: 6)) collect: [:e | e first]) hasEqualElements: {'thisValue'. 'binaryBlock'. 'nextValue'}]). self assert: ((tempRefs includesKey: (2 to: 4)) and: [((tempRefs at: (2 to: 4)) collect: [:e | e first]) hasEqualElements: {'each'. 'binaryBlock'. 'nextValue'}])! ! !PositionableStream methodsFor: '*System-Changes' stamp: 'MarcusDenker 5/8/2013 19:26' prior: 29848847! decodeString: string andRuns: runsRaw | strm runLength runValues newString index | strm := ReadStream on: runsRaw from: 1 to: runsRaw size. (strm peekFor: $() ifFalse: [ ^ nil ]. runLength := OrderedCollection new. [ strm skipSeparators. strm peekFor: $) ] whileFalse: [ runLength add: (Number readFrom: strm) ]. runValues := OrderedCollection new. [ strm atEnd ] whileFalse: [ runValues add: (Number readFrom: strm). strm next ]. newString := WideString new: string size. index := 1. runLength with: runValues do: [ :length :leadingChar | index to: index + length - 1 do: [ :pos | newString at: pos put: (Character leadingChar: leadingChar code: (string at: pos) charCode) ]. index := index + length ]. ^ newString! ! !ChangeRecord methodsFor: 'initialization' stamp: 'MarcusDenker 5/8/2013 19:28' prior: 36351315! fileIn "File the receiver in. If I represent a method or a class-comment, file the method in and make a note of it in the recent-submissions list; if I represent a do-it, then, well, do it." Cursor read showWhile: [ | methodClass s | (methodClass := self methodClass) notNil ifTrue: [ methodClass compile: self text classified: category withStamp: stamp notifying: nil. ]. type == #doIt ifTrue: [ ((s := self string) beginsWith: '----') ifFalse: [ self class compiler evaluate: s ] ]. "This expression break the recentMessageSet because it hijacks compiled methods to represent classComment. In the future we should redo a complete changeset metamodel based on classDefinition, classComment and other. type == #classComment ifTrue: [ | cls | (cls := Smalltalk globals at: class asSymbol) comment: self text stamp: stamp. RecentMessageSet noteMethodSubmission: #Comment forClass: cls ]" ]! ! !CompiledMethod methodsFor: 'debugger support' stamp: 'MarcusDenker 5/9/2013 11:29' prior: 19804986! abstractPCForConcretePC: concretePC "Answer the abstractPC matching concretePC." | abstractPC scanner client | abstractPC := 1. scanner := InstructionStream on: self. client := InstructionClient new. [(scanner atEnd or: [scanner pc >= concretePC]) ifTrue: [^abstractPC]. abstractPC := abstractPC + 1. scanner interpretNextInstructionFor: client. true] whileTrue! ! !CompiledMethod methodsFor: 'debugger support' stamp: 'MarcusDenker 5/9/2013 11:28' prior: 19807684! pcPreviousTo: pc | scanner client prevPc | pc > self endPC ifTrue: [^self endPC]. scanner := InstructionStream on: self. client := InstructionClient new. [scanner pc < pc] whileTrue: [prevPc := scanner pc. scanner interpretNextInstructionFor: client]. ^prevPc! ! !Morph methodsFor: '*Tools-Inspecting' stamp: 'CamilloBruni 5/7/2013 23:37'! scaledIntoFormOfSize: aSmallInteger ^ self imageForm scaledIntoFormOfSize: aSmallInteger ! ! !ChangeSet class methodsFor: 'filein/out' stamp: 'MarcusDenker 5/8/2013 19:26' prior: 18853895! classesOrder: classes "Answer a collection with the classes ordered so they can be filed in." | listInOrder | "SharedPools need to go first" listInOrder := Class superclassOrder: (classes select: [ :each | each inheritsFrom: SharedPool ]). listInOrder addAll: (Class superclassOrder: (classes reject: [ :each | each inheritsFrom: SharedPool ])). ^ listInOrder! ! !ChangeSet class methodsFor: 'filein/out' stamp: 'MarcusDenker 5/8/2013 19:28' prior: 18855837! traitsOrder: aCollection "Arrange the traits in the collection, first who don't depend on others." | unprocessed | unprocessed := aCollection asSet. ^ Array new: unprocessed size streamContents: [ :stream | unprocessed size timesRepeat: [ | aTrait | aTrait := unprocessed detect: [ :each | self hasNoDependenciesFor: each in: unprocessed ]. stream nextPut: aTrait. unprocessed remove: aTrait] ]! ! !DisplayObject methodsFor: 'displaying-display' stamp: 'CamilloBruni 5/9/2013 18:56' prior: 20902893! follow: locationBlock while: durationBlock "Move an image around on the Display. Restore the background continuously without causing flashing. The argument, locationBlock, supplies each new location, and the argument, durationBlock, supplies true to continue, and then false to stop." | bitsBehind loc | loc := locationBlock value. bitsBehind := Form fromDisplay: (loc extent: self extent). ^ self follow: locationBlock while: durationBlock bitsBehind: bitsBehind startingLoc: loc! ! !DisplayObject methodsFor: 'displaying-display' stamp: 'CamilloBruni 5/9/2013 18:52' prior: 20903475! follow: locationBlock while: durationBlock bitsBehind: initialBitsBehind startingLoc: loc "Move an image around on the Display. Restore the background continuously without causing flashing. The argument, locationBlock, supplies each new location, and the argument, durationBlock, supplies true to continue or false to stop. This variant takes the bitsBehind as an input argument, and returns the final saved saved bits as method value." | location rect1 save1 save1Blt buffer bufferBlt newLoc rect2 bothRects | location := loc. rect1 := location extent: self extent. save1 := initialBitsBehind. save1Blt := BitBlt current toForm: save1. buffer := Form extent: self extent*2 depth: Display depth. "Holds overlapping region" bufferBlt := BitBlt current toForm: buffer. Display deferUpdates: true. self displayOn: Display at: location rule: Form paint. Display deferUpdates: false; forceToScreen: (location extent: self extent). [durationBlock value] whileTrue: [ newLoc := locationBlock value. newLoc ~= location ifTrue: [ rect2 := newLoc extent: self extent. bothRects := rect1 merge: rect2. (rect1 intersects: rect2) ifTrue: [ "when overlap, buffer background for both rectangles" bufferBlt copyFrom: bothRects in: Display to: 0@0. bufferBlt copyFrom: save1 boundingBox in: save1 to: rect1 origin - bothRects origin. "now buffer is clean background; get new bits for save1" save1Blt copy: (0@0 extent: self extent) from: rect2 origin - bothRects origin in: buffer. self displayOnPort: bufferBlt at: rect2 origin - bothRects origin rule: Form paint. Display deferUpdates: true. Display copy: bothRects from: 0@0 in: buffer rule: Form over. Display deferUpdates: false; forceToScreen: bothRects] ifFalse: [ "when no overlap, do the simple thing (both rects might be too big)" Display deferUpdates: true. Display copy: (location extent: save1 extent) from: 0@0 in: save1 rule: Form over. save1Blt copyFrom: rect2 in: Display to: 0@0. self displayOn: Display at: newLoc rule: Form paint. Display deferUpdates: false; forceToScreen: (location extent: save1 extent); forceToScreen: (newLoc extent: self extent)]. location := newLoc. rect1 := rect2]]. ^ save1 displayOn: Display at: location ! ! !DisplayObject methodsFor: 'displaying-display' stamp: 'CamilloBruni 5/9/2013 18:53' prior: 20905991! slideFrom: startPoint to: stopPoint nSteps: nSteps delay: milliSecs "Slide this object across the display over the given number of steps, pausing for the given number of milliseconds after each step." "Note: Does not display at the first point, but does at the last." | i p delta | i := 0. p := startPoint. delta := (stopPoint - startPoint) / nSteps asFloat. ^ self follow: [ p := p + delta. p truncated] while: [ (Delay forMilliseconds: milliSecs) wait. (i := i + 1) < nSteps] ! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'CamilloBruni 5/7/2013 23:35' prior: 17383530! debugMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #DebugMenu) order: 9999; label: 'DEBUG'. (aBuilder item: #'Reset icon cache') order: 0; action: [ AbstractNautilusUI resetIconCaches. AbstractMethodWidget resetMethodIconCache ]; parent: #DebugMenu. (aBuilder item: #'Inspect me') order: 100; action: [ target inspect ]; parent: #DebugMenu. (aBuilder item: #'Inspect my model ') order: 200; action: [ target model inspect]; parent: #DebugMenu.! ! !AbstractMethodWidget class methodsFor: 'icon' stamp: 'CamilloBruni 5/7/2013 23:34'! resetMethodIconCache MethodsIconsCache removeAll! ! !AbstractMethodWidget methodsFor: 'icon' stamp: 'CamilloBruni 5/9/2013 21:32' prior: 17244742! methodIconFor: aMethod | actions button action | button := nil. MethodsIconsCache at: aMethod ifPresent: [:icon | icon isArray ifTrue: [ ^ self rebuildUpAndDownArrowIconFrom: icon]. icon class == IconicButtonStateHolder ifFalse: [ ^ icon ]. ^ icon asIcon ]. actions := AbstractMethodIconAction allSubclasses collect: [:class | class for: aMethod in: self model ]. actions sort: [:a :b | a actionOrder < b actionOrder ]. action := actions detect: [:each | each isActionHandled ] ifNone: [ self flag: 'should never happend' ]. "actionIcon need to be invoked before actionStateToCache" button := action actionIcon. MethodsIconsCache at: aMethod put: action actionStateToCache. ^ button! ! !Decompiler methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/9/2013 11:27' prior: 20569524! mapFromBlockStartsIn: aMethod toTempVarsFrom: schematicTempNamesString constructor: aDecompilerConstructor | map | map := aMethod debuggerMap mapFromBlockKeys: (aMethod debuggerMap startpcsToBlockExtents: aMethod) keys asArray sort toSchematicTemps: schematicTempNamesString method: aMethod. map keysAndValuesDo: [:startpc :tempNameTupleVector| tempNameTupleVector isEmpty ifFalse: [| subMap numTemps tempVector | subMap := Dictionary new. "Find how many temp slots there are (direct & indirect temp vectors) and for each indirect temp vector find how big it is." tempNameTupleVector do: [:tuple| tuple last isArray ifTrue: [subMap at: tuple last first put: tuple last last. numTemps := tuple last first] ifFalse: [numTemps := tuple last]]. "create the temp vector for this scope level." tempVector := Array new: numTemps. "fill it in with any indirect temp vectors" subMap keysAndValuesDo: [:index :size| tempVector at: index put: (Array new: size)]. "fill it in with temp nodes." tempNameTupleVector do: [:tuple| | itv | tuple last isArray ifTrue: [itv := tempVector at: tuple last first. itv at: tuple last last put: (aDecompilerConstructor codeTemp: tuple last last - 1 named: tuple first)] ifFalse: [tempVector at: tuple last put: (aDecompilerConstructor codeTemp: tuple last - 1 named: tuple first)]]. "replace any indirect temp vectors with proper RemoteTempVectorNodes" subMap keysAndValuesDo: [:index :size| tempVector at: index put: (aDecompilerConstructor codeRemoteTemp: index remoteTemps: (tempVector at: index))]. "and update the entry in the map" map at: startpc put: tempVector]]. ^map! ! !IconicButtonStateHolder class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/7/2013 23:24' prior: 23490596! forNautilus: icon ^ self new forIcon: icon; yourself ! ! !IconicButtonStateHolder methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 23:29' prior: 23488054! arguments "convert arguments back from a WeakArray" ^ Array withAll: arguments! ! !IconicButtonStateHolder methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 23:29' prior: 23488132! arguments: aCollection arguments := WeakArray withAll: aCollection! ! !IconicButtonStateHolder methodsFor: 'protocol' stamp: 'CamilloBruni 5/7/2013 23:29' prior: 23489294! asIcon ^ IconicButton new target: self target; actionSelector: self actionSelector; arguments: self arguments; labelGraphic: self labelGraphic; color: self color; helpText: self helpText; extent: self extent; borderWidth: self borderWidth! ! !IconicButtonStateHolder methodsFor: 'protocol' stamp: 'CamilloBruni 5/7/2013 23:29' prior: 23489931! forIcon: icon self target: icon target; actionSelector: icon actionSelector; arguments: icon arguments; labelGraphic: icon labelGraphic; color: icon color; helpText: icon helpText; extent: icon extent; borderWidth: icon borderWidth! ! !IconicButtonStateHolder methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 23:26' prior: 23489087! target ^ target first! ! !IconicButtonStateHolder methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 23:26' prior: 23489158! target: anObject target := WeakArray with: anObject! ! !DebuggerMethodMap methodsFor: 'private' stamp: 'MarcusDenker 5/9/2013 11:18'! blockExtentsInto: aDictionary from: initialPC to: endPC scanner: scanner numberer: numbererBlock "Support routine for startpcsToBlockExtents" | extentStart blockSizeOrLocator | extentStart := numbererBlock value. [scanner pc <= endPC] whileTrue: [blockSizeOrLocator := scanner interpretNextInstructionFor: BlockStartLocator new. blockSizeOrLocator isInteger ifTrue: [self blockExtentsInto: aDictionary from: scanner pc to: scanner pc + blockSizeOrLocator - 1 scanner: scanner numberer: numbererBlock]]. aDictionary at: initialPC put: (extentStart to: numbererBlock value). ^aDictionary! ! !DebuggerMethodMap methodsFor: 'private' stamp: 'MarcusDenker 5/9/2013 11:19'! mapFromBlockKeys: keys toSchematicTemps: schematicTempNamesString method: aCompiledMethod "Decode a schematicTempNamesString that encodes the layout of temp names in a method and any closures/blocks within it, matching keys in keys to vectors of temp names." | map tempNames | map := Dictionary new. tempNames := schematicTempNamesString readStream. keys do: [:key| | tempSequence tempIndex | tempSequence := OrderedCollection new. tempIndex := 0. [(tempNames skipSeparators; peek) ifNil: [true] ifNotNil: [:ch| '[]' includes: ch]] whileFalse: [tempNames peek = $( ifTrue: [tempSequence addAllLast: ((self tempsSubSequenceFrom: (tempNames next; yourself)) withIndexCollect: [:temp :index| { temp. { tempIndex + 1. index } }]). tempNames peek ~= $) ifTrue: [self error: 'parse error']. tempIndex := tempIndex + 1. tempNames next] ifFalse: [tempSequence addAllLast: ((self tempsSubSequenceFrom: tempNames) withIndexCollect: [:temp :index| { temp. tempIndex := tempIndex + 1 }])]]. map at: key put: tempSequence asArray. [tempNames peek = $]] whileTrue: [tempNames next]. tempNames peek = $[ ifTrue: [tempNames next]]. ^map! ! !DebuggerMethodMap methodsFor: 'accessing' stamp: 'MarcusDenker 5/9/2013 11:24' prior: 20550664! namedTempAt: index in: aContext "Answer the value of the temp at index in aContext where index is relative to the array of temp names answered by tempNamesForContext:" ^self privateTempAt: index in: aContext startpcsToBlockExtents: (self startpcsToBlockExtents: aContext method)! ! !DebuggerMethodMap methodsFor: 'accessing' stamp: 'MarcusDenker 5/9/2013 11:24' prior: 20551031! namedTempAt: index put: aValue in: aContext "Assign the value of the temp at index in aContext where index is relative to the array of temp names answered by tempNamesForContext:. If the value is a copied value we also need to set it along the lexical chain." ^self privateTempAt: index in: aContext put: aValue startpcsToBlockExtents: (self startpcsToBlockExtents: aContext method)! ! !DebuggerMethodMap methodsFor: 'private' stamp: 'MarcusDenker 5/9/2013 12:40'! startpcsToBlockExtents: aCompiledMethod "Answer a Dictionary of startpc to Interval of blockExtent, using the identical numbering scheme described in and orchestrated by BlockNode>>analyseArguments:temporaries:rootNode:. This is used in part to find the temp names for any block in a method, as needed by the debugger. The other half is to recompile the method, obtaining the temp names for each block extent. By indirecting through the blockExtent instead of using the startpc directly we decouple the debugger's access to temp names from the exact bytecode; insulating debugging from minor changes in the compiler (e.g. changes in literal pooling, adding prefix bytecodes, adding inst vars to CompiledMethod in literals towards the end of the literal frame, etc). If the recompilation doesn't produce exactly the same bytecode at exactly the same offset no matter; the blockExtents will be the same." | index | index := 0. ^self blockExtentsInto: Dictionary new from: aCompiledMethod initialPC to: aCompiledMethod endPC scanner: (InstructionStream on: aCompiledMethod) numberer: [| value | value := index. index := index + 2. value] ! ! !DebuggerMethodMap methodsFor: 'accessing' stamp: 'MarcusDenker 5/9/2013 11:24' prior: 20551506! tempNamesForContext: aContext "Answer an Array of all the temp names in scope in aContext starting with the home's first local (the first argument or first temporary if no arguments)." ^(self privateTempRefsForContext: aContext startpcsToBlockExtents: (self startpcsToBlockExtents: aContext method)) collect: [:pair| pair first]! ! !DebuggerMethodMap methodsFor: 'private' stamp: 'MarcusDenker 5/9/2013 11:21'! tempsSubSequenceFrom: tempNamesStream ^Array streamContents: [:tsss| [tempNamesStream skipSeparators. tempNamesStream atEnd or: ['[]()' includes: tempNamesStream peek]] whileFalse: [tsss nextPut: (String streamContents: [:s| [s nextPut: tempNamesStream next. tempNamesStream peek ifNil: [true] ifNotNil: [:peek| ' []()' includes: peek]] whileFalse])]] "thisContext method tempsSubSequenceFrom: 'les temps perdu(sont n''est pas la)' readStream" "thisContext method tempsSubSequenceFrom: ('les temps perdu(sont n''est pas la)' readStream skipTo: $(; yourself)"! ! !MethodChangeRecord methodsFor: 'accessing' stamp: 'di 4/1/2000 12:02' prior: 26339536! changeType ^ changeType! ! !MethodChangeRecord methodsFor: 'infos' stamp: 'di 4/1/2000 12:02' prior: 26339648! methodInfoFromRemoval "Return an array with the source index of the last version of the method, and the category in which it was defined (so it can be put back there if re-accepted from a version browser)." (changeType == #remove or: [changeType == #addedThenRemoved]) ifTrue: [^ infoFromRemoval] ifFalse: [^ nil]! ! !MethodChangeRecord methodsFor: 'all changes' stamp: 'di 4/4/2000 11:05' prior: 26340057! noteChangeType: newChangeType (changeType == #addedThenRemoved and: [newChangeType == #change]) ifTrue: [changeType := #add] ifFalse: [changeType := newChangeType]! ! !MethodChangeRecord methodsFor: 'infos' stamp: 'di 4/1/2000 11:05' prior: 26340313! noteMethodInfoFromRemoval: info "Store an array with the source index of the last version of the method, and the category in which it was defined (so it can be put back there if re-accepted from a version browser)." infoFromRemoval := info! ! ClassChangeRecord removeSelector: #infoFromRemoval:! CompiledMethod removeSelector: #tempsSubSequenceFrom:! CompiledMethod removeSelector: #startpcsToBlockExtents! CompiledMethod removeSelector: #mapFromBlockKeys:toSchematicTemps:! CompiledMethod removeSelector: #blockExtentsInto:from:to:scanner:numberer:! ChangeSet removeSelector: #methodInfoFromRemoval:! ChangeSet removeSelector: #checkForAnyAlienAuthorship! ChangeSet removeSelector: #checkForAlienAuthorship! AbstractMethodWidget class removeSelector: #resetMethodsIconsCache! "Compiler"! "CompilerTests"! "Graphics-Display Objects"! "Kernel"! "Nautilus"! "NautilusCommon"! "System-Changes"! "Tools"! ----End fileIn----! ----QUIT----an Array(9 May 2013 10:10:08 pm) Pharo.image priorSource: 3638137! ----STARTUP----an Array(9 May 2013 10:16:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 May 2013 10:16:30 pm) Pharo-30116.image priorSource: 3671619! ----STARTUP----an Array(10 May 2013 8:57:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/10/2013 08:55' prior: 37192864! commentForCurrentUpdate ^ '10584 Remove the concept of abstractPC from CompiledMethod https://pharo.fogbugz.com/f/cases/10584 10582 ASTInterpreter: use #sourceNode instead of #currentASTNode https://pharo.fogbugz.com/f/cases/10582 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/10/2013 08:55'! script214 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.32.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.448.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.31.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1440.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.204.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.824.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1111.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/10/2013 08:55'! update30117 "self new update30117" self withUpdateLog: '10584 Remove the concept of abstractPC from CompiledMethod https://pharo.fogbugz.com/f/cases/10584 10582 ASTInterpreter: use #sourceNode instead of #currentASTNode https://pharo.fogbugz.com/f/cases/10582 '. self loadTogether: self script214 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ASTInterpreter class methodsFor: 'interpreting' stamp: 'MarcusDenker 5/9/2013 22:32' prior: 35485610! interpretVMContext: aContext | interpreter | self flag: #TODO. "not implemented yet" interpreter := self new. interpreter resetContext: aContext asASTInterpreterContext. ^interpreter interpret: aContext sourceNode. ! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/9/2013 23:56'! abstractPCForContext: aContext ^aContext debuggerMap abstractPCForConcretePC: aContext pc method: aContext method.! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/9/2013 23:57' prior: 19382149! supportTestSourceRangeAccessForInjectInto: method source: source selectionSequence: selections "Test debugger source range selection for inject:into:" | evaluationCount sourceMap debugTokenSequence debugCount | evaluationCount := 0. sourceMap := method debuggerMap abstractSourceMap. debugTokenSequence := selections collect: [:string| Scanner new scanTokens: string]. debugCount := 0. thisContext runSimulated: [(1 to: 2) withArgs: { 0. [:sum :each| evaluationCount := evaluationCount + 1. sum + each]} executeMethod: method] contextAtEachStep: [:ctxt| | range debugTokens | (ctxt method == method and: ["Exclude the send of #closureCopy:copiedValues: and braceWith:with: to create the block, and the #new: and #at:'s for the indirect temp vector. This for compilation without closure bytecodes. (Note that at:put:'s correspond to stores)" (ctxt willSend and: [(#(closureCopy:copiedValues: new: at: braceWith:with:) includes: ctxt selectorToSendOrSelf) not]) "Exclude the store of the argument into the home context (for BlueBook blocks) and the store of an indirection vector into an initial temp" or: [(ctxt willStore and: [(ctxt isBlock and: [ctxt pc = ctxt startpc]) not and: [(ctxt isBlock not and: [((self abstractPCForContext: ctxt) = 2)]) not]]) or: [ctxt willReturn]]]) ifTrue: [debugTokens := debugTokenSequence at: (debugCount := debugCount + 1) ifAbsent: [#(bogusToken)]. self assert: (sourceMap includesKey: (self abstractPCForContext: ctxt)). range := sourceMap at: (self abstractPCForContext: ctxt) ifAbsent: [(1 to: 0)]. self assert: (Scanner new scanTokens: (source copyFrom: range first to: range last)) = debugTokens]]. self assert: evaluationCount = 2! ! !DebuggerMethodMap methodsFor: 'source mapping' stamp: 'MarcusDenker 5/9/2013 23:51' prior: 20552353! abstractPCFor: concretePC when: contextIsActive "If the context is the actve context (is at the hot end of the stack) then its pc is the current pc. But if the context isn't, because it is suspended sending a message, then its current pc is the previous pc" ^self abstractPCForConcretePC: (contextIsActive ifTrue: [concretePC] ifFalse: [(self method pcPreviousTo: concretePC) ifNil: [concretePC]]) method: self method! ! !DebuggerMethodMap methodsFor: 'source mapping' stamp: 'MarcusDenker 5/9/2013 23:50'! abstractPCForConcretePC: concretePC method: aMethod "Answer the abstractPC matching concretePC." | abstractPC scanner client | abstractPC := 1. scanner := InstructionStream on: aMethod. client := InstructionClient new. [(scanner atEnd or: [scanner pc >= concretePC]) ifTrue: [^abstractPC]. abstractPC := abstractPC + 1. scanner interpretNextInstructionFor: client. true] whileTrue! ! ContextPart removeSelector: #currentASTNode! ContextPart removeSelector: #concretePC! CompiledMethod removeSelector: #abstractPCForConcretePC:! InstructionStream removeSelector: #abstractPC! "AST-Interpreter-Core"! "AST-Interpreter-Extension"! "Compiler"! "CompilerTests"! "Kernel"! ----End fileIn----! ----QUIT----an Array(10 May 2013 8:58:06 am) Pharo.image priorSource: 3671815! ----STARTUP----an Array(10 May 2013 9:04:38 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 May 2013 9:04:38 am) Pharo-30117.image priorSource: 3686069! ----STARTUP----an Array(10 May 2013 7:02:55 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/10/2013 19:01' prior: 37226544! commentForCurrentUpdate ^ '10588 Prepare isHeadless for new VMs with double dash -- arguments https://pharo.fogbugz.com/f/cases/10588 10587 add #options compatibility method to old Compiler class https://pharo.fogbugz.com/f/cases/10587 10589 clean up #decompileString https://pharo.fogbugz.com/f/cases/10589'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/10/2013 19:01'! script215 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.32.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.451.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.31.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1440.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.231.mcz OpalCompiler-Tests-MarcusDenker.129.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.204.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.827.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1111.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/10/2013 19:01'! update30118 "self new update30118" self withUpdateLog: '10588 Prepare isHeadless for new VMs with double dash -- arguments https://pharo.fogbugz.com/f/cases/10588 10587 add #options compatibility method to old Compiler class https://pharo.fogbugz.com/f/cases/10587 10589 clean up #decompileString https://pharo.fogbugz.com/f/cases/10589'. self loadTogether: self script215 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/10/2013 12:54' prior: 19769415! decompileString ^self decompile formattedCode! ! !Compiler methodsFor: 'public - old' stamp: 'md 2/28/2006 10:04' prior: 19907871! compile: textOrStream in: aClass classified: aCategory notifying: aRequestor ifFail: failBlock "Answer a MethodNode for the argument, textOrStream. If the MethodNode can not be created, notify the argument, aRequestor; if aRequestor is nil, evaluate failBlock instead. The MethodNode is the root of a parse tree. It can be told to generate a CompiledMethod to be installed in the method dictionary of the argument, aClass." | methodNode | self from: textOrStream class: aClass classified: aCategory context: nil notifying: aRequestor. methodNode := self translate: sourceStream noPattern: false ifFail: failBlock. methodNode encoder requestor: requestor. ^methodNode. ! ! !Compiler methodsFor: 'public - old' stamp: 'md 2/28/2006 10:45' prior: 19908637! compile: textOrStream in: aClass notifying: aRequestor ifFail: failBlock ^self compile: textOrStream in: aClass classified: nil notifying: aRequestor ifFail: failBlock ! ! !Compiler methodsFor: 'public - old' stamp: 'vb 8/13/2001 23:11' prior: 19908879! compileNoPattern: textOrStream in: aClass context: aContext notifying: aRequestor ifFail: failBlock "Similar to #compile:in:notifying:ifFail:, but the compiled code is expected to be a do-it expression, with no message pattern." self from: textOrStream class: aClass context: aContext notifying: aRequestor. ^self translate: sourceStream noPattern: true ifFail: failBlock! ! !Compiler methodsFor: 'public' stamp: 'MarcusDenker 4/30/2013 10:36' prior: 36098116! evaluate: textOrString "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: textOrString for: nil logged: false! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/30/2013 10:36' prior: 36098526! evaluate: textOrString for: anObject logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor." ^self evaluate: textOrString for: anObject notifying: nil logged: logFlag! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/30/2013 10:35' prior: 36098885! evaluate: textOrString for: anObject notifying: aController logged: logFlag "Compile and execute the argument, textOrString with respect to the class of anObject. If a compilation error occurs, notify aController. If both compilation and execution are successful then, if logFlag is true, log (write) the text onto a system changes file so that it can be replayed if necessary." ^ self evaluate: textOrString in: nil to: anObject notifying: aController ifFail: [^nil] logged: logFlag.! ! !Compiler methodsFor: 'public - old' stamp: 'CamilloBruni 8/1/2012 16:05' prior: 19909348! evaluate: aString in: aContext to: aReceiver "evaluate aString in the given context, and return the result." | result | result := self evaluate: aString in: aContext to: aReceiver notifying: nil ifFail: [^ #failedDoit]. ^ result! ! !Compiler methodsFor: 'public - old' stamp: 'NS 1/19/2004 09:05' prior: 19909672! evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock ^ self evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: false.! ! !Compiler methodsFor: 'public - old' stamp: 'EstebanLorenzano 7/27/2012 16:30' prior: 19909958! evaluate: textOrStream in: aContext to: receiver notifying: aRequestor ifFail: failBlock logged: logFlag "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value toLog itsSelection itsSelectionString | class := aContext == nil ifTrue: [receiver class ] ifFalse: [aContext method methodClass]. self from: textOrStream class: class context: aContext notifying: aRequestor. methodNode := self translate: sourceStream noPattern: true ifFail: [^failBlock value]. method := self interactive ifTrue: [methodNode generateWithSource] ifFalse: [methodNode generate]. value := receiver withArgs: (context ifNil: [#()] ifNotNil: [{context}]) executeMethod: method. logFlag ifTrue: [toLog := ((requestor respondsTo: #selection) and:[(itsSelection := requestor selection) notNil and:[(itsSelectionString := itsSelection asString) isEmptyOrNil not]]) ifTrue:[itsSelectionString] ifFalse:[sourceStream contents]. SystemAnnouncer uniqueInstance evaluated: toLog context: aContext]. ^ value! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/30/2013 10:36' prior: 36099482! evaluate: textOrString logged: logFlag "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil logged: logFlag! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/30/2013 10:37' prior: 36099874! evaluate: textOrString notifying: aController logged: logFlag "See Compiler|evaluate:for:notifying:logged:. Compilation is carried out with respect to nil, i.e., no object." ^self evaluate: textOrString for: nil notifying: aController logged: logFlag! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 5/10/2013 12:53' prior: 36788498! format: textOrStream in: aClass notifying: aRequestor "Compile a parse tree from the argument, textOrStream. Answer a string containing the original code, formatted nicely. If aBoolean is true, then decorate the resulting text with color and hypertext actions" | aNode | self from: textOrStream class: aClass context: nil notifying: aRequestor. aNode := self format: sourceStream noPattern: false ifFail: [^ nil]. ^ aNode formattedCode.! ! !Compiler methodsFor: 'public' stamp: 'MarcusDenker 5/10/2013 12:32'! options: anArray "ignored by the old compiler"! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/28/2013 21:50' prior: 35937765! parse: aString class: aClass ^self parser parse: aString class: aClass! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/28/2013 21:50' prior: 35937920! parse: aString class: aClass noPattern: noPattern context: ctxt notifying: req ifFail: aBlock ^self parser parse: aString class: aClass noPattern: noPattern context: ctxt notifying: req ifFail: aBlock ! ! !Compiler methodsFor: 'public - old' stamp: 'eem 5/15/2008 15:11' prior: 19912270! parse: textOrStream in: aClass notifying: req "Compile the argument, textOrStream, with respect to the class, aClass, and answer the MethodNode that is the root of the resulting parse tree. Notify the argument, req, if an error occurs. The failBlock is defaulted to an empty block." self from: textOrStream class: aClass context: nil notifying: req. ^self parser parse: sourceStream class: class noPattern: false context: context notifying: requestor ifFail: []! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/28/2013 11:04' prior: 35917004! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^self parser parseSelector: aString! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 4/29/2013 13:28' prior: 36008858! parser parser ifNil: [parser := Parser new]. ^parser! ! !MethodNode methodsFor: 'debugger support' stamp: 'MarcusDenker 5/10/2013 12:49' prior: 36914797! blockExtentsToTempsMap "Answer a Dictionary of blockExtent to temp locations for the current method. This is used by the debugger to locate temp vars in contexts. A temp map entry is a pair of the temp's name and its index, where an index is either an integer for a normal temp or a pair of the index of the indirect temp vector containing the temp and the index of the temp in its indirect temp vector." ^encoder blockExtentsToTempsMap ifNil: [| methNode | methNode := Parser new encoderClass: encoder class; parse: self sourceCode class: self methodClass. "As a side effect generate: creates data needed for the map." methNode generate. methNode encoder blockExtentsToTempsMap]! ! !MethodNode methodsFor: 'converting' stamp: 'MarcusDenker 5/10/2013 12:55' prior: 26475561! decompileString "Answer a string description of the parse tree whose root is the receiver." ^self formattedCode ! ! !MethodNode methodsFor: 'printing' stamp: 'MarcusDenker 5/10/2013 12:57'! formattedCode ^ self fullPrintString ! ! !MethodNode methodsFor: 'source mapping' stamp: 'MarcusDenker 5/10/2013 12:50' prior: 36915616! rawSourceRangesAndMethodDo: aBinaryBlock "Evaluate aBinaryBlock with the rawSourceRanges and method generated from the receiver." | methNode method | methNode := Parser new encoderClass: encoder class; parse: self sourceCode class: self methodClass. method := methNode generate. "set bytecodes to map to" ^aBinaryBlock value: methNode encoder rawSourceRanges value: method! ! !SmalltalkImage methodsFor: 'testing' stamp: 'CamilloBruni 5/10/2013 13:18' prior: 50360965! isHeadless "Check if vm were run with headless parameter. Different VMs for different platform have different multiple way(s) to indicate that" -1000 to: 1000 do: [ :n | (#('display=none' '-headless' '-vm-display-null' '-nodisplay' '--headless' '--vm-display-null' '--nodisplay') includes: (self vm getSystemAttribute: n)) ifTrue: [ ^ true ] ]. ^ false ! ! ParseNode removeSelector: #printWithClosureAnalysis! "Compiler"! "System-Support"! ----End fileIn----! ----QUIT----an Array(10 May 2013 7:03:03 pm) Pharo.image priorSource: 3686265! ----STARTUP----an Array(10 May 2013 7:09:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 May 2013 7:09:46 pm) Pharo-30118.image priorSource: 3707296! ----STARTUP----an Array(11 May 2013 9:04:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/11/2013 09:02' prior: 37240994! commentForCurrentUpdate ^ '10592 Update Opal in Image to latest version https://pharo.fogbugz.com/f/cases/10592 10585 isExecutingBlock vs. isClosureContext vs. isBlockContext https://pharo.fogbugz.com/f/cases/10585 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/11/2013 09:02'! script216 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.451.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.28.mcz Kernel-MarcusDenker.1442.mcz KernelTests-MarcusDenker.510.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.132.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.114.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.244.mcz OpalCompiler-Tests-MarcusDenker.131.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.41.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.71.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.62.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.204.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.827.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1114.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.503.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/11/2013 09:02'! update30119 "self new update30119" self withUpdateLog: '10592 Update Opal in Image to latest version https://pharo.fogbugz.com/f/cases/10592 10585 isExecutingBlock vs. isClosureContext vs. isBlockContext https://pharo.fogbugz.com/f/cases/10585 '. self loadTogether: self script216 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 34746920! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 34754504! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! ast ^ ast! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! ast: anObject ast := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! category ^ category! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! category: anObject category := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! class1 ^ class! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! class: anObject class := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! context ^ context! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! context: anObject context := anObject! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/10/2013 10:54'! doesNotUnderstand: message (message selector isUnary and: [ message selector beginsWith: 'opt'] ) ifTrue: [ ^ options includes: message selector ]. ^ super doesNotUnderstand: message! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! failBlock ^ failBlock! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! failBlock: anObject failBlock := anObject! ! !CompilationContext methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/10/2013 10:59'! initialize options := Set new! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 10:09'! interactive ^interactive ! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 10:01'! interactive: anObject interactive := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! logged ^ logged! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! logged: anObject logged := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! noPattern ^ noPattern! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! noPattern: anObject noPattern := anObject! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/10/2013 10:49'! parseOptions: optionsArray "parse an array, which is a sequence of options in a form of: #( + option1 option2 - option3 ... ) each time the #+ is seen, the options which follow it will be subject for inclusion and, correspondingly, if #- seen, then they will be excluded . By default, (if none of #+ or #- specified initially), all options are subject for inclusion. " | include | include := true. optionsArray do: [:option | option == #+ ifTrue: [ include := true ] ifFalse: [ option == #- ifTrue: [ include := false ] ifFalse: [ include ifTrue: [ options add: option ] ifFalse: [ options remove: option ifAbsent:[] ]]] ].! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! parser ^ parser! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! parser: anObject parser := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! receiver ^ receiver! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! receiver: anObject receiver := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! requestor ^ requestor! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:50'! requestor: anObject requestor := anObject! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/9/2013 11:12' prior: 36528107! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass ! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/9/2013 11:13' prior: 36528276! decompile: aSelector in: aClass method: aMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass method: aMethod! ! !OpalCompiler class methodsFor: 'options' stamp: 'MarcusDenker 5/10/2013 11:08'! defaultOptions ^ #( "by default we inline all optimized constructs" + optInlineIf + optInlineIfNil + optInlineAndOr + optInlineWhile + optInlineToDo + optInlineCase - optIlineNone "to turn off all. Overrides the others" - optLongIvarAccessBytecodes "special for Contexts" )! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:52' prior: 36000868! category: aCategory category := aCategory. compilationContext category: aCategory.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:52' prior: 36529261! class: aClass class := aClass. compilationContext class: aClass.! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/11/2013 08:53' prior: 36001106! compile ^self translate generate ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:52' prior: 36002196! context: aContxt context := aContxt. compilationContext context: aContxt! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/9/2013 11:12' prior: 36529378! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: (aClass compiledMethodAt: aSelector)! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/9/2013 11:12' prior: 36529588! decompile: aSelector in: aClass method: aCompiledMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: aCompiledMethod! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/4/2013 20:30' prior: 36530084! decompileMethod: aCompiledMethod | sourceCode | sourceCode := aCompiledMethod getSourceFromFile. ^sourceCode ifNil: [Decompiler new decompile: aCompiledMethod selector in: aCompiledMethod methodClass method: aCompiledMethod ] ifNotNil: [OpalCompiler new parse: sourceCode class: aCompiledMethod methodClass ]! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 5/7/2013 10:07' prior: 36052100! doSemanticAnalysis ^[ast doSemanticAnalysisInContext: compilationContext] on: OCSemanticError do: [ :ex | ex defaultAction. ^failBlock value ]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/7/2013 10:19' prior: 36002579! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context == nil ifTrue: [ receiver class ] ifFalse: [ context method methodClass ]). self noPattern: true. selectedSource := ((requestor respondsTo: #selection) and: [ (itsSelection := requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := (UIManager default interactiveParserFor: requestor) ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. self logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:53' prior: 36004931! failBlock: aBlock failBlock := aBlock. compilationContext failBlock: aBlock.! ! !OpalCompiler methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/10/2013 10:58'! initialize compilationContext := CompilationContext new. compilationContext parseOptions: self class defaultOptions.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:53' prior: 36005526! logged: aBoolean logged := aBoolean. compilationContext logged: aBoolean.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:53' prior: 36005765! noPattern: aBoolean noPattern := aBoolean. compilationContext noPattern: aBoolean. ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/10/2013 10:50'! options: anOptionsArray compilationContext parseOptions: anOptionsArray! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:54' prior: 36008049! receiver: anObject receiver := anObject. compilationContext receiver: anObject.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 10:03' prior: 36008170! requestor: aRequestor requestor := aRequestor. compilationContext requestor: aRequestor. compilationContext interactive: (UIManager default interactiveParserFor: requestor).! ! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 37272452! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTSemanticAnalyzer methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:56'! compilationContext: aCompilationContext compilationContext := aCompilationContext! ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 37272866! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCASTTranslator methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 08:56'! compilationContext: aCompilationContext compilationContext := aCompilationContext! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - optimized blocks' stamp: 'MarcusDenker 5/11/2013 08:53' prior: 35059505! testExampleSimpleBlockLocalIf | ast assignment var | ast := (OCOpalExamples>>#exampleSimpleBlockLocalIf) parseTree. ast doSemanticAnalysis. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. var := assignment variable ocBinding. self assert: var isWrite. self deny: var isEscaping.! ! !MethodContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/10/2013 21:36' prior: 26350724! activeHome "If executing closure, search senders for the activation of the original (outermost) method that (indirectly) created my closure (the closureHome). If the closureHome is not found on the sender chain answer nil." | methodReturnContext | self isBlockContext ifFalse: [^self]. self sender ifNil: [^nil]. methodReturnContext := self methodReturnContext. ^self sender findContextSuchThat: [:ctxt | ctxt = methodReturnContext]! ! !MethodContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/10/2013 21:36' prior: 26351243! activeOuterContext "If executing closure, search senders for the activation in which the receiver's closure was created (the receiver's outerContext). If the outerContext is not found on the sender chain answer nil." | outerContext | self isBlockContext ifFalse: [^self]. self sender ifNil: [^nil]. outerContext := self outerContext. ^self sender findContextSuchThat: [:ctxt | ctxt = outerContext]! ! !MethodContext methodsFor: 'testing' stamp: 'MarcusDenker 5/10/2013 21:35' prior: 35463629! isBlockContext "Is this executing a block versus a method? In the new closure implemetation this is true if closureOrNil is not nil, in which case it should be holding a BlockClosure." ^closureOrNil isClosure! ! !MethodContext methodsFor: 'testing' stamp: 'MarcusDenker 5/10/2013 21:37' prior: 26352631! isExecutingBlock "for compatibility" ^self isBlockContext ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/7/2013 10:08'! doSemanticAnalysisInContext: aCompilationContext "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." aCompilationContext class1 isBehavior ifTrue: [self methodClass: aCompilationContext class1]. OCASTSemanticAnalyzer new scope: aCompilationContext class1 parseScope; errorNotification: aCompilationContext interactive; requestor: aCompilationContext requestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !UndefinedObject methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/7/2013 10:14'! needsLongForm self flag: #FIXME. "clean up after longform is gone" ^false! ! !DebugContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/10/2013 21:37' prior: 34286224! locateClosureHome "In case the current context is a BlockContext locate the closureHome and ask the user to validate the new context. If closureHome is not found or the user does not validate the new context, return nil. If the current context is not a BlockContext return it." | closureHome aText | context isBlockContext ifTrue: [ closureHome := context activeHome. closureHome ifNil: [ self blockNotFoundDialog: context method with: aText. ^ nil ]. (self confirm: 'I will have to revert to the method from\which this block originated. Is that OK?' withCRs) ifFalse: [ ^ nil ]. ^ closureHome]. ^ context! ! !Debugger methodsFor: 'accessing' stamp: 'MarcusDenker 5/10/2013 21:36' prior: 20490715! contents: aText notifying: aController "The retrieved information has changed and its source must now be updated. In this case, the retrieved information is the method of the selected context." | newMethod | contextStackIndex = 0 ifTrue: [ ^ false ]. "check if we're currently in a block" self selectedContext isBlockContext ifTrue: [ ^ self blockContents: aText notifying: aController ]. newMethod := self recompileCurrentMethodTo: aText notifying: aController. newMethod ifNil: [ ^ false ]. self restartRecompiledMethod: newMethod. World addAlarm: #changed: withArguments: #(contentsSelection) for: self at: (Time millisecondClockValue + 200). ^ true! ! MethodContext removeSelector: #isClosureContext! OpalCompiler removeSelector: #withTempNames:! OpalCompiler removeSelector: #parseArgsAndTemps:notifying:! OpalCompiler removeSelector: #decompileBlock:! OpalCompiler class removeSelector: #withTempNames:! OpalCompiler class removeSelector: #decompileBlock:! "AST-Interpreter-Extension"! "DebuggerModel"! "Kernel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(11 May 2013 9:05:09 am) Pharo.image priorSource: 3707492! ----STARTUP----an Array(11 May 2013 9:11:36 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 May 2013 9:11:36 am) Pharo-30119.image priorSource: 3733784! ----STARTUP----an Array(11 May 2013 3:30:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/11/2013 15:28' prior: 37262221! commentForCurrentUpdate ^ '10594 Set compiler option +optLongIvarAccessBytecodes for InstructionStream Hierarchy https://pharo.fogbugz.com/f/cases/10594 10591 reduce sends of methodDictionary and methodDictionary: https://pharo.fogbugz.com/f/cases/10591'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/11/2013 15:29'! script217 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.453.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1444.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1426.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.116.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.244.mcz OpalCompiler-Tests-MarcusDenker.131.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.64.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.149.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.827.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1115.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/11/2013 15:29'! update30120 "self new update30120" self withUpdateLog: '10594 Set compiler option +optLongIvarAccessBytecodes for InstructionStream Hierarchy https://pharo.fogbugz.com/f/cases/10594 10591 reduce sends of methodDictionary and methodDictionary: https://pharo.fogbugz.com/f/cases/10591'. self loadTogether: self script217 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HDTestCoverage methodsFor: 'actions' stamp: 'MarcusDenker 5/10/2013 00:27' prior: 23126053! install reference actualClass methodDict at: reference methodSymbol put: self. self flushCache! ! !HDTestCoverage methodsFor: 'actions' stamp: 'MarcusDenker 5/10/2013 00:27' prior: 23126231! uninstall reference actualClass methodDict at: reference methodSymbol put: method. self flushCache! ! !InstructionStream class methodsFor: 'compiler' stamp: 'MarcusDenker 5/11/2013 09:41'! compiler "The JIT compiler needs to trap all reads to instance variables of contexts. As this check is costly, it is only done in the long form of the bytecodes, which are not used often. In this hierarchy we force the compiler to alwasy generate long bytecodes" ^super compiler options: #(+ optLongIvarAccessBytecodes)! ! !InstructionStream class methodsFor: '*Compiler' stamp: 'eem 7/17/2008 13:16' prior: 23729977! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. We override here to arrange that the compiler will use MaybeContextInstanceVariableNodes for instances variables of ContextPart or any of its superclasses and subclasses. The convention to make the compiler use the special nodes is to use negative indices" | superInstSize | (self withAllSubclasses noneSatisfy: [:class|class isContextClass]) ifTrue: [^super instVarNamesAndOffsetsDo: aBinaryBlock]. (superInstSize := superclass notNil ifTrue: [superclass instSize] ifFalse: [0]) > 0 ifTrue: [superclass instVarNamesAndOffsetsDo: aBinaryBlock]. 1 to: self instSize - superInstSize do: [:i| aBinaryBlock value: (instanceVariables at: i) value: (i + superInstSize) negated]! ! !InstructionStream class methodsFor: '*Compiler' stamp: 'eem 6/19/2008 10:00' prior: 23730881! isContextClass ^false! ! !NECOverrideModel methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 27843733! initializeSelectors clazz superclass ifNotNil: [ self initializeSelectorsFor: clazz superclass]. clazz selectorsDo: [ :each | | entry | entry := selectors detect: [ :ea | ea contentsAsSymbol == each ] ifNone: [ ]. entry notNil ifTrue: [ selectors remove: entry ifAbsent: [ ] ] ]! ! !BehaviorTest methodsFor: 'tests' stamp: 'MarcusDenker 5/10/2013 00:23' prior: 18090122! testAllMethods | allMethods nonOverridenMethods | allMethods := IdentitySet new addAll: Object allMethods; yourself. self assert: (allMethods includesAllOf: Object methods). "We fetch all compiled methods that are not redefined in Object" nonOverridenMethods := OrderedCollection new. ProtoObject selectorsAndMethodsDo: [ :sel :method | (Object includesSelector: sel) ifFalse: [ nonOverridenMethods add: method ] ]. self assert: (allMethods includesAllOf: nonOverridenMethods)! ! !BehaviorTest methodsFor: 'tests' stamp: 'MarcusDenker 5/10/2013 00:28' prior: 18092754! testBehaviorSubclasses "self run: #testBehaviorSubclasses" | b b2 | b := Behavior new. b superclass: OrderedCollection. b methodDict: MethodDictionary new. self shouldnt: [b subclasses ] raise: Error. self shouldnt: [b withAllSubclasses] raise: Error. self shouldnt: [b allSubclasses] raise: Error. b2 := Behavior new. b2 superclass: b. b2 methodDict: MethodDictionary new. self assert: (b subclasses includes: b2). self assert: (b withAllSubclasses includes: b).! ! !ChangeSet methodsFor: 'method changes' stamp: 'MarcusDenker 5/10/2013 00:24' prior: 18828386! adoptSelector: aSelector forClass: aClass "Adopt the given selector/class combination as a change in the receiver" self noteNewMethod: (aClass methodDict at: aSelector) forClass: aClass selector: aSelector priorMethod: nil! ! !RBMethodModifierFinalRule methodsFor: 'running' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 30767970! checkMethod: aContext | current | current := aContext selectedClass superclass. [ current notNil ] whileTrue: [ current methodDict at: aContext selector ifPresent: [ :method | (method pragmas anySatisfy: [ :each | each keyword = #modifier: and: [ each arguments first = #final ] ]) ifTrue: [ result addClass: aContext selectedClass selector: aContext selector ] ]. current := current superclass ]! ! !TestCase class methodsFor: 'coverage' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 52342012! coverageForClass: cls until: aRootClass "returns the test coverage of all the methods included inherited ones but stopping at aRootClass included" | definedMethods testedMethods untestedMethods | definedMethods := cls allSelectorsAboveUntil: aRootClass. definedMethods size = 0 ifTrue: [^ {0. Set new}]. testedMethods := self methods inject: Set new into: [:sums :cm | sums union: cm messages]. testedMethods := testedMethods reject: [:sel | (definedMethods includes: sel) not]. untestedMethods := definedMethods select: [:selector | (testedMethods includes: selector) not]. ^ { (testedMethods size * 100 / definedMethods size) asFloat . untestedMethods} ! ! !TestCase class methodsFor: 'coverage' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 52344117! localCoverageForClass: cls | definedMethods testedMethods untestedMethods | definedMethods := cls selectors. "It happens for IdentityBag / IdentityBagTest" definedMethods size = 0 ifTrue: [^ {0. Set new}]. testedMethods := self methods inject: Set new into: [:sums :cm | sums union: cm messages]. "testedMethods contains all the methods send in test methods, which probably contains methods that have nothign to do with collection" testedMethods := testedMethods reject: [:sel | (definedMethods includes: sel) not]. untestedMethods := definedMethods select: [:selector | (testedMethods includes: selector) not]. ^ { (testedMethods size * 100 / definedMethods size) asFloat . untestedMethods} ! ! !TestCase class methodsFor: 'history' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 52347200! shouldGenerateLastStoredRunMethod | sameRun | (self class includesSelector: #lastStoredRun) ifFalse: [^ true]. sameRun := #(#passed #failures #errors) inject: true into: [ :ok :set | ok and: [(self lastRun at: set) = (self lastStoredRun at: set) ]]. ^ sameRun not ! ! !BreakpointManager class methodsFor: 'install-uninstall' stamp: 'MarcusDenker 5/10/2013 00:24' prior: 18415308! unInstall: breakMethod | class selector oldMethod | oldMethod := self installed at: breakMethod ifAbsent:[^self]. class := breakMethod methodClass. selector := breakMethod selector. (class>>selector) == breakMethod ifTrue:[ class methodDict at: selector put: oldMethod]. self installed removeKey: breakMethod! ! !MethodDictionaryTest methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/10/2013 00:25' prior: 26385908! testIncludesKeyLocalyDefined " self debug: #testIncludesKeyLocalyDefined " self assert: (self class includesSelector: #testIncludesKeyLocalyDefined).! ! !BuilderManifest methodsFor: 'private' stamp: 'MarcusDenker 5/10/2013 00:24' prior: 33917992! isObsoleteManifest | methodDico | methodDico := manifestClass class methodDict. ^ methodDico isEmpty or: [methodDico anySatisfy: [:method | |selector| selector := method selector. (#(#rejectClass. #rejectRules) includes: selector) ifTrue: [ false ] ifFalse: [ (manifestClass perform: selector) anySatisfy: [ :each | each first first = (Character value: 40)]]] ]! ! !RBMethodModifierSuperRule methodsFor: 'running' stamp: 'MarcusDenker 5/10/2013 00:26' prior: 30771971! checkMethod: aContext | current | (aContext superMessages includes: aContext selector) ifTrue: [ ^ self ]. current := aContext selectedClass superclass. [ current notNil ] whileTrue: [ current methodDict at: aContext selector ifPresent: [ :method | (method pragmas anySatisfy: [ :each | each keyword = #modifier: and: [ each arguments first = #super ] ]) ifTrue: [ result addClass: aContext selectedClass selector: aContext selector ] ]. current := current superclass ]! ! !TestRunner methodsFor: 'history saving' stamp: 'MarcusDenker 5/10/2013 00:27' prior: 52415694! hasProgress result classesTested do: [:cls | (cls class includesSelector: #lastStoredRun) ifTrue: [^ true]]. ^ false! ! !TestCoverage methodsFor: 'actions' stamp: 'MarcusDenker 5/10/2013 00:27' prior: 52356507! install reference actualClass methodDict at: reference selector put: self! ! !TestCoverage methodsFor: 'actions' stamp: 'MarcusDenker 5/10/2013 00:27' prior: 52356673! uninstall reference actualClass methodDict at: reference selector put: method! ! !TPureBehavior methodsFor: 'copying' stamp: 'MarcusDenker 5/10/2013 00:28' prior: 52115660! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! "Compiler"! "HudsonBuildTools20"! "Kernel"! "KernelTests"! "Manifest-Core"! "NECompletion"! "Refactoring-Critics"! "SUnit-Core"! "SUnit-UI"! "System-Changes"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(11 May 2013 3:31:09 pm) Pharo.image priorSource: 3733980! ----STARTUP----an Array(11 May 2013 3:37:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 May 2013 3:37:34 pm) Pharo-30120.image priorSource: 3753676! ----STARTUP----an Array(12 May 2013 9:25:59 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/12/2013 09:24' prior: 37288709! commentForCurrentUpdate ^ '10600 add environment: and class: compatibility methods to Compiler https://pharo.fogbugz.com/f/cases/10600 10598 MorphTreeNodeMorph draws wrongly drop highlight https://pharo.fogbugz.com/f/cases/10598 10599 AlainTreeModel not fully covered use of isCheckList https://pharo.fogbugz.com/f/cases/10599'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/12/2013 09:24'! script218 ^ 'AST-Core-MarcusDenker.143.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.454.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1444.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1429.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.116.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.244.mcz OpalCompiler-Tests-MarcusDenker.131.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.64.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.151.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.827.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1115.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/12/2013 09:24'! update30121 "self new update30121" self withUpdateLog: '10600 add environment: and class: compatibility methods to Compiler https://pharo.fogbugz.com/f/cases/10600 10598 MorphTreeNodeMorph draws wrongly drop highlight https://pharo.fogbugz.com/f/cases/10598 10599 AlainTreeModel not fully covered use of isCheckList https://pharo.fogbugz.com/f/cases/10599'. self loadTogether: self script218 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2013 23:11'! beCheckList self isCheckList: true! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/11/2013 23:12' prior: 35386717! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item printString ] asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. treeUpdated := nil asValueHolder. self registerEvents! ! !Compiler methodsFor: 'public' stamp: 'MarcusDenker 5/12/2013 09:23'! class: aClass "ignored by the old compiler"! ! !Compiler methodsFor: 'public' stamp: 'MarcusDenker 5/12/2013 09:22'! environment: anEnvironment "ignored by the old compiler"! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/11/2013 23:04' prior: 27039014! drawMouseDownHighlightOn: aCanvas "Draw with a dotted border." self highlightedForMouseDown ifTrue: [ container ifNil: [^super drawMouseDownHighlightOn: aCanvas]. aCanvas frameRectangle: self bounds width: 1 colors: {container mouseDownHighlightColor. Color transparent} dashes: #(1 1)]! ! "Compiler"! "Morphic"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(12 May 2013 9:26:08 am) Pharo.image priorSource: 3753872! ----STARTUP----an Array(12 May 2013 9:32:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 May 2013 9:32:24 am) Pharo-30121.image priorSource: 3766664! ----STARTUP----an Array(13 May 2013 9:26:53 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(13 May 2013 9:26:57 am) Pharo.image priorSource: 3766860! ----STARTUP----an Array(13 May 2013 9:33:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 May 2013 9:33:55 am) Pharo-30121.image priorSource: 3767066! ----STARTUP----an Array(13 May 2013 1:01:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/13/2013 12:59' prior: 37308601! commentForCurrentUpdate ^ '10603 add compilationContext to AST node MethodNode https://pharo.fogbugz.com/f/cases/10603 10602 AlainTreeModel still not properly updated while columns cahnged https://pharo.fogbugz.com/f/cases/10602 10601 SpecLayout commands refactoring https://pharo.fogbugz.com/f/cases/10601 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/13/2013 12:59'! script219 ^ 'AST-Core-MarcusDenker.146.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.454.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1444.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1429.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.116.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.244.mcz OpalCompiler-Tests-MarcusDenker.131.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.64.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.154.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.827.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1115.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/13/2013 13:00'! update30122 "self new update30122" self withUpdateLog: '10603 add compilationContext to AST node MethodNode https://pharo.fogbugz.com/f/cases/10603 10602 AlainTreeModel still not properly updated while columns cahnged https://pharo.fogbugz.com/f/cases/10602 10601 SpecLayout commands refactoring https://pharo.fogbugz.com/f/cases/10601 '. self loadTogether: self script219 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBMethodNode commentStamp: '' prior: 30774990! RBMethodNode is the AST that represents a Smalltalk method. Instance Variables: arguments the arguments to the method body the body/statements of the method nodeReplacements a dictionary of oldNode -> newNode replacements replacements the collection of string replacements for each node replacement in the parse tree selector the method name (cached) selectorParts the tokens for the selector keywords source the source we compiled tags the source location of any resource/primitive tags ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:09'! add: aBlock bottom: aNumber self add: aBlock top: nil bottom: aNumber left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:55'! add: aBlock left: aNumber self add: aBlock top: nil bottom: nil left: aNumber right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:55'! add: aBlock left: left right: right self add: aBlock top: nil bottom: nil left: left right: right! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:55'! add: aBlock right: aNumber self add: aBlock top: nil bottom: nil left: nil right: aNumber! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:54'! add: aBlock top: aNumber self add: aBlock top: aNumber bottom: nil left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:54'! add: aBlock top: top bottom: bottom self add: aBlock top: top bottom: bottom left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 12:53'! add: aBlock top: top bottom: bottom left: left right: right | originX originY cornerX cornerY offsetOriginX offsetOriginY offsetCornerX offsetCornerY | originX := left isFloat ifTrue: [ left ] ifFalse: [ 0 ]. originY := top isFloat ifTrue: [ top ] ifFalse: [ 0 ]. cornerX := right isFloat ifTrue: [ 1 - right ] ifFalse: [ 1 ]. cornerY := bottom isFloat ifTrue: [ 1 - bottom ] ifFalse: [ 1 ]. offsetOriginX := left isInteger ifTrue: [ left ] ifFalse: [ 0 ]. offsetOriginY := top isInteger ifTrue: [ top ] ifFalse: [ 0 ]. offsetCornerX := right isInteger ifTrue: [ right negated ] ifFalse: [ 0 ]. offsetCornerY := bottom isInteger ifTrue: [ bottom negated ] ifFalse: [ 0 ]. self add: aBlock origin: originX@originY corner: cornerX@cornerY offsetOrigin: offsetOriginX@offsetOriginY offsetCorner: offsetCornerX@offsetCornerY! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec bottom: aNumber self add: aBlock withSpec: aSpec top: nil bottom: aNumber left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec left: aNumber self add: aBlock withSpec: aSpec top: nil bottom: nil left: aNumber right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec left: left right: right self add: aBlock withSpec: aSpec top: nil bottom: nil left: left right: right! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec right: aNumber self add: aBlock withSpec: aSpec top: nil bottom: nil left: nil right: aNumber! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec top: aNumber self add: aBlock withSpec: aSpec top: aNumber bottom: nil left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:11'! add: aBlock withSpec: aSpec top: top bottom: bottom self add: aBlock withSpec: aSpec top: top bottom: bottom left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/12/2013 13:10'! add: aBlock withSpec: aSpec top: top bottom: bottom left: left right: right | originX originY cornerX cornerY offsetOriginX offsetOriginY offsetCornerX offsetCornerY | originX := left isFloat ifTrue: [ left ] ifFalse: [ 0 ]. originY := top isFloat ifTrue: [ top ] ifFalse: [ 0 ]. cornerX := right isFloat ifTrue: [ 1 - right ] ifFalse: [ 1 ]. cornerY := bottom isFloat ifTrue: [ 1 - bottom ] ifFalse: [ 1 ]. offsetOriginX := left isInteger ifTrue: [ left ] ifFalse: [ 0 ]. offsetOriginY := top isInteger ifTrue: [ top ] ifFalse: [ 0 ]. offsetCornerX := right isInteger ifTrue: [ right negated ] ifFalse: [ 0 ]. offsetCornerY := bottom isInteger ifTrue: [ bottom negated ] ifFalse: [ 0 ]. self add: aBlock withSpec: aSpec origin: originX@originY corner: cornerX@cornerY offsetOrigin: offsetOriginX@offsetOriginY offsetCorner: offsetCornerX@offsetCornerY! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:55' prior: 34120586! newColumn: aBlock left: aNumber self add: aBlock left: aNumber! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:55' prior: 34186871! newColumn: aBlock left: left right: right self add: aBlock left: left right: right! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:56' prior: 34120989! newColumn: aBlock right: aNumber self add: aBlock right: aNumber! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:56' prior: 34121407! newRow: aBlock bottom: aNumber self add: aBlock bottom: aNumber! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:56' prior: 34122081! newRow: aBlock top: aNumber self add: aBlock top: aNumber! ! !SpecLayout methodsFor: 'commands-deprecated' stamp: 'BenjaminVanRyseghem 5/12/2013 12:56' prior: 34188692! newRow: aBlock top: top bottom: bottom self add: aBlock top: top bottom: bottom! ! !RBMethodNode commentStamp: '' prior: 37332390! RBMethodNode is the AST that represents a Smalltalk method. Instance Variables: arguments the arguments to the method body the body/statements of the method nodeReplacements a dictionary of oldNode -> newNode replacements replacements the collection of string replacements for each node replacement in the parse tree selector the method name (cached) selectorParts the tokens for the selector keywords source the source we compiled tags the source location of any resource/primitive tags ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 11:45'! compilationContext ^compilationContext! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 11:44'! compilationContext: aCompilationContext compilationContext := aCompilationContext.! ! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/12/2013 13:05'! searchAtBottom ^ SpecLayout composed newColumn: [:c | c add: #tree; newRow: [:r | r add: #label width: 50; add: #inputField; add: #button width: 25 ] height: 25 ]; yourself! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/12/2013 14:44' prior: 35571951! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection selectedItems ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]! ! "AST-Core"! "Spec-Layout"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(13 May 2013 1:01:53 pm) Pharo.image priorSource: 3767262! ----STARTUP----an Array(13 May 2013 1:08:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 May 2013 1:08:32 pm) Pharo-30122.image priorSource: 3786223! ----STARTUP----an Array(13 May 2013 1:26:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/13/2013 13:24' prior: 37321991! commentForCurrentUpdate ^ '10604 update Opal in image to latest version https://pharo.fogbugz.com/f/cases/10604 10595 Set environment for #compiler in Smalltalk>>#compiler https://pharo.fogbugz.com/f/cases/10595 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/13/2013 13:24'! script220 ^ 'AST-Core-MarcusDenker.146.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1444.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1429.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.116.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.461.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.64.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.154.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.829.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1115.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/13/2013 13:24'! update30123 "self new update30123" self withUpdateLog: '10604 update Opal in image to latest version https://pharo.fogbugz.com/f/cases/10604 10595 Set environment for #compiler in Smalltalk>>#compiler https://pharo.fogbugz.com/f/cases/10595 '. self loadTogether: self script220 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/12/2013 11:46' prior: 35917315! compiler ^self methodClass ifNil: [Smalltalk compiler] ifNotNil: [:class | class compiler].! ! !OCIfNotNilTests methodsFor: 'tests' stamp: 'MarcusDenker 5/13/2013 13:12' prior: 35179711! testIfNilIfNotNil0Arg self assert: (5 ifNil: [#foo] ifNotNil: [#bar]) = #bar. self assert: (nil ifNil: [#foo] ifNotNil: [#bar]) = #foo! ! !OCArrayLiteralTest methodsFor: 'running' stamp: 'MarcusDenker 5/13/2013 13:21' prior: 35103663! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ] ! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:25'! getClass ^ class! ! !CompilationContext methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/10/2013 10:59' prior: 37274664! initialize options := Set new! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:04' prior: 37275024! logged ^logged ifNil: [ false ].! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:00' prior: 37275248! noPattern ^noPattern ifNil: [ false ].! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:02' prior: 37277880! category: aCategory compilationContext category: aCategory.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:15' prior: 37278060! class: aClass compilationContext class: aClass.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:17' prior: 37278359! context: aContxt context := aContxt! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 5/9/2013 11:12' prior: 37278537! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: (aClass compiledMethodAt: aSelector)! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 5/9/2013 11:12' prior: 37278810! decompile: aSelector in: aClass method: aCompiledMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: aCompiledMethod! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:08'! environment: anSmallTalkImage compilationContext environment: anSmallTalkImage ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/12/2013 11:28' prior: 37279747! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context == nil ifTrue: [ receiver class ] ifFalse: [ context method methodClass ]). self noPattern: true. selectedSource := ((compilationContext requestor respondsTo: #selection) and: [ (itsSelection := compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := compilationContext interactive ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:06' prior: 37281549! logged: aBoolean compilationContext logged: aBoolean.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:01' prior: 37281721! noPattern: aBoolean compilationContext noPattern: aBoolean. ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/12/2013 11:01' prior: 36052417! parse | expression selector arguments method | compilationContext noPattern ifFalse: [^RBParser parseMethod: source contents]. expression := (RBParser parseExpression: source contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:20' prior: 37282060! receiver: anObject receiver := anObject.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/12/2013 11:27' prior: 37282237! requestor: aRequestor compilationContext requestor: aRequestor. compilationContext interactive: (UIManager default interactiveParserFor: compilationContext requestor).! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/12/2013 11:26' prior: 36008428! translate [ ast := self parse] on: SyntaxErrorNotification, OCBackendError "OCBackendError should not be raised when parsing" do: [:ex | compilationContext requestor ifNotNil: [ compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ]. ^failBlock value]. self doSemanticAnalysis. ^ast. ! ! !DebuggerMethodMapOpal methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/13/2013 13:21' prior: 36009147! forMethod: aCompiledMethod methodNode := aCompiledMethod ast! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/12/2013 11:44' prior: 35625948! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/13/2013 13:19' prior: 37285589! doSemanticAnalysisInContext: aCompilationContext "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." aCompilationContext getClass isBehavior ifTrue: [self methodClass: aCompilationContext getClass]. OCASTSemanticAnalyzer new scope: aCompilationContext getClass parseScope; errorNotification: aCompilationContext interactive; compilationContext: aCompilationContext; requestor: aCompilationContext requestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'MarcusDenker 5/13/2013 13:12' prior: 34906015! addCopyingTemp: aTempVar ^ copiedVars add: (OCCopyingTempVariable new name: aTempVar name; index: tempVars size; escaping: aTempVar escaping; usage: aTempVar usage; scope: self; yourself)! ! !SmalltalkImage methodsFor: 'compiler' stamp: 'MarcusDenker 5/12/2013 11:44' prior: 33510191! compiler ^self compilerClass new environment: self! ! CompilationContext removeSelector: #receiver:! CompilationContext removeSelector: #receiver! CompilationContext removeSelector: #parser:! CompilationContext removeSelector: #parser! CompilationContext removeSelector: #context:! CompilationContext removeSelector: #context! CompilationContext removeSelector: #class1! CompilationContext removeSelector: #ast:! CompilationContext removeSelector: #ast! OpalCompiler removeSelector: #noPattern! OpalCompiler removeSelector: #logged! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment! ! "Compiler"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "System-Support"! ----End fileIn----! ----QUIT----an Array(13 May 2013 1:27:06 pm) Pharo.image priorSource: 3786419! ----STARTUP----an Array(13 May 2013 1:33:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 May 2013 1:33:38 pm) Pharo-30123.image priorSource: 3804982! ----STARTUP----an Array(14 May 2013 8:48:24 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/14/2013 08:44' prior: 37341148! commentForCurrentUpdate ^ '10607 Trait method buttons do not work https://pharo.fogbugz.com/f/cases/10607 10606 Code Navigation https://pharo.fogbugz.com/f/cases/10606 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/14/2013 08:44'! script221 ^ 'AST-Core-MarcusDenker.146.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.71.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.17.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-MarcusDenker.18.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-MarcusDenker.15.mcz HelpSystem-Core-StephaneDucasse.89.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1444.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.33.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.72.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-StephaneDucasse.81.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.49.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.231.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1429.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-MarcusDenker.116.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.462.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-MarcusDenker.90.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.12.mcz Polymorph-Tools-Diff-MarcusDenker.90.mcz Polymorph-Widgets-MarcusDenker.806.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.182.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.64.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-MarcusDenker.9.mcz Settings-Graphics-MarcusDenker.14.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.49.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.161.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.68.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.154.mcz StartupPreferences-MarcusDenker.83.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.271.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.829.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.97.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.65.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1115.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/14/2013 08:44'! update30124 "self new update30124" self withUpdateLog: '10607 Trait method buttons do not work https://pharo.fogbugz.com/f/cases/10607 10606 Code Navigation https://pharo.fogbugz.com/f/cases/10606 '. self loadTogether: self script221 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NNavNavigateNode commentStamp: '' prior: 0! I'm the one who knows generalization to navigate an ast tree I have two concret classes: NavigateInto and NavigateOver! !NNavNavigateHorizontal commentStamp: '' prior: 0! I'm the one who knows how to navigate in an horizontal way visiting node in the same level statin from left to right! !NNavNavigateInto commentStamp: '' prior: 0! I'm the one who knowshow to navigate inside the child nodes! !NNavNavigateIntoNotAsk commentStamp: '' prior: 0! I navigate throw the childs picking allways the firs one! !NNavNavigateOver commentStamp: '' prior: 0! I'm the one who knows how to navigate going to the parent node.! !NNavNavigateTest commentStamp: '' prior: 0! I tests the navigations directions! !NNavNavigateNode commentStamp: '' prior: 37370060! I'm the one who knows generalization to navigate an ast tree I have two concret classes: NavigateInto and NavigateOver! !NNavNavigateHorizontal commentStamp: '' prior: 37370243! I'm the one who knows how to navigate in an horizontal way visiting node in the same level statin from left to right! !NNavNavigateHorizontal class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/7/2013 17:20'! brotherNodeFor: node "Finds the next brother for the node" | brothers nodePosition nextBrotherPosition | node ifNil: [ ^nil ]. node parent ifNil: [ ^nil ]. "no parent you are orphan" brothers := node parent children. nodePosition := (brothers indexOf: node) . nextBrotherPosition := nodePosition = brothers size ifTrue: [ 1 ] ifFalse: [ nodePosition + 1 ]. ^ brothers at: nextBrotherPosition. ! ! !NNavNavigateHorizontal class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/7/2013 14:59'! buildShortcut: aBuilder (aBuilder shortcut: #nodeHorizontalNavigation) category: #SmalltalkEditor default: $u command shift mac| $u ctrl shift unix | $u ctrl shift do: [ :morph | morph standOutHorizontalScope] description: 'Select the node going to the brothers' ! ! !NNavNavigateHorizontal class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/7/2013 15:18'! findSelection: node in: textArea ^ self findBest: (self brotherNodeFor: node) selection: textArea selectionInterval step: [:selection :target | self selectionBrotherScope: selection for: target ]. ! ! !NNavNavigateHorizontal class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/7/2013 15:18'! selectionBrotherScope: selected for: node | brother | node ifNil: [ ^selected ]. brother := self brotherNodeFor: node. ^brother start to: brother stop.! ! !NNavNavigateInto commentStamp: '' prior: 37370418! I'm the one who knowshow to navigate inside the child nodes! !NNavNavigateInto class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/7/2013 17:45'! buildShortcut: aBuilder (aBuilder shortcut: #nodeIntoNavigation) category: #SmalltalkEditor default: $o command mac | $o ctrl unix | $o ctrl do: [ :morph | morph standOutIntoScope ] description: 'Select the node scope reducing to the childs'! ! !NNavNavigateInto class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 17:23'! childNodeFor: node "We find the child for a node, if it has not childs nil, if has more than one let the user select the one he wants." node ifNil:[^nil]. ^ node children isEmpty ifTrue: [ nil ] ifFalse: [ node children size = 1 ifTrue: [node children at: 1] ifFalse: [ self askForNodeSelectionFrom: node children] ]! ! !NNavNavigateInto class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/7/2013 13:53'! findSelection: node in: textArea ^ self findBest: (self childNodeFor: node) selection: textArea selectionInterval step: [:selection :target | self selectionChildrenScope: selection for: target ]. ! ! !NNavNavigateInto class methodsFor: 'step into' stamp: 'GiselaDecuzzi 5/13/2013 13:44'! selectionChildrenScope: selected for: node | children | node ifNil: [ ^selected ]. children := self childNodeFor: node. children ifNil: [ ^selected ]. ^children start to: children stop.! ! !NNavNavigateIntoNotAsk commentStamp: '' prior: 37370542! I navigate throw the childs picking allways the firs one! !NNavNavigateIntoNotAsk class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/7/2013 17:29'! buildShortcut: aBuilder (aBuilder shortcut: #nodeIntoNavigation) category: #SmalltalkEditor default: $o command shift mac| $o ctrl shift unix | $o ctrl shift do: [ :morph | morph standOutIntoFirstScope] description: 'Select the node scope reducing to the childs' ! ! !NNavNavigateIntoNotAsk class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/7/2013 17:26'! childNodeFor: node "We find the child for a node, if it has not childs nil, if has more than one let the user select the one he wants." node ifNil:[^nil]. ^ node children isEmpty ifTrue: [ nil ] ifFalse: [ node children at: 1] ! ! !NNavNavigateNode class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 11:25'! askForNodeSelectionFrom: nodes ^ UIManager default enterOrRequestFrom: (nodes collect: [:node | (node respondsTo: #selector )ifTrue:[node selector] ifFalse:[node name]]) values: nodes lines: #() title: 'Which code do you want to select?' translated! ! !NNavNavigateNode class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 13:14'! findBest: node selection: selectionInText step: blockForStep | selectionInNode | node ifNil:[ ^selectionInText ]. selectionInNode := node start to: node stop. ^ (selectionInText = selectionInNode ) ifTrue: [blockForStep value: selectionInText value: node ] ifFalse: [selectionInNode ].! ! !NNavNavigateNode class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/13/2013 13:35'! findBestNodeIn: text for: selection isWorkspace: isWorkspace | root | isWorkspace ifTrue: [root := RBParser parseFaultyExpression: text] ifFalse: [root := RBParser parseFaultyMethod: text]. ^ root bestNodeFor: selection. ! ! !NNavNavigateNode class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/13/2013 13:37'! standOutFor: editor | node textArea newSelection | textArea := editor sourceTextArea. node := self findBestNodeIn: textArea text for: textArea selectionInterval isWorkspace: editor isWorkspace. newSelection := self findSelection: node in: textArea. textArea selectFrom: newSelection first to: newSelection last! ! !NNavNavigateOver commentStamp: '' prior: 37370657! I'm the one who knows how to navigate going to the parent node.! !NNavNavigateOver class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/7/2013 15:26'! buildShortcut: aBuilder (aBuilder shortcut: #nodeOverNavigation) category: #SmalltalkEditor default: $p command shift mac| $p ctrl shift unix | $p ctrl shift do: [ :morph | morph standOutOverScope ] description: 'Select the node scope going to the paren node' ! ! !NNavNavigateOver class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/7/2013 13:54'! findSelection: node in: textArea ^self findBest: node selection: textArea selectionInterval step: [:selection :target | self selectionParentScope: selection for: target parent]. ! ! !NNavNavigateOver class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/7/2013 14:43'! selectionParentScope: selected for: node | nodeSelection | node ifNil: [ ^selected ]. nodeSelection := node start to: node stop. selected = nodeSelection ifTrue: [ ^self selectionParentScope: selected for: node parent ] ifFalse: [ ^nodeSelection ].! ! !RBProgramNode methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 11:12'! statements ^ #().! ! !SmalltalkEditor methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 13:33'! isWorkspace ^ model isWorkspace! ! !SmalltalkEditor methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 11:04'! sourceTextArea ^morph! ! !TextModel methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 13:36'! isWorkspace ^false! ! !TextModel methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 10:41'! sourceTextArea ^ self dependents at: 1! ! !NautilusUI methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 13:33'! isWorkspace ^ false! ! !NNavNavigateTest commentStamp: '' prior: 37370779! I tests the navigations directions! !NNavNavigateTest methodsFor: 'horizontal' stamp: 'GiselaDecuzzi 5/7/2013 18:25'! testNextBrotherItsTheNextOfTheChilds | bigBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parent addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parent addNode: littleBrother. brother := NNavNavigateHorizontal brotherNodeFor: bigBrother . self assert: brother equals: littleBrother . ! ! !NNavNavigateTest methodsFor: 'horizontal' stamp: 'GiselaDecuzzi 5/7/2013 17:15'! testNextBrotherWhenItsTheLasItsTheFirst | bigBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parent addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parent addNode: littleBrother. brother := NNavNavigateHorizontal brotherNodeFor: littleBrother. self assert: brother equals: bigBrother .! ! !NNavNavigateTest methodsFor: 'children' stamp: 'GiselaDecuzzi 5/12/2013 17:44'! testNextChildWhenHasChildsIsTheBiggerOne | bigBrother littleBrother child parentRenamed | parentRenamed := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parentRenamed addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parentRenamed addNode: littleBrother. child := NNavNavigateIntoNotAsk childNodeFor: parentRenamed . self assert: child equals: bigBrother .! ! !NNavNavigateTest methodsFor: 'children' stamp: 'GiselaDecuzzi 5/7/2013 18:31'! testNextChildWhenItHasNotChildsItIsNil | child parent | parent := RBSequenceNode new. child := NNavNavigateIntoNotAsk childNodeFor: parent . self assert: child isNil .! ! !NNavNavigateTest methodsFor: 'horizontal' stamp: 'GiselaDecuzzi 5/7/2013 17:15'! testNotBrotherWhenOrphan | orphanNode brother | orphanNode := RBVariableNode named: 'roque'. brother := NNavNavigateHorizontal brotherNodeFor: orphanNode. self assert: brother isNil.! ! !NNavNavigateTest methodsFor: 'horizontal' stamp: 'GiselaDecuzzi 5/12/2013 17:45'! testSameNodeIsTheBrotherWhenOnlyChild | uniqueChildNode brother parent | parent := RBSequenceNode new. uniqueChildNode := RBVariableNode named: 'roque'. parent addNode: uniqueChildNode. self assert: uniqueChildNode parent equals: parent. self assert: parent children size equals: 1. brother := NNavNavigateHorizontal brotherNodeFor: uniqueChildNode. self assert: brother equals: uniqueChildNode .! ! !AbstractNautilusUI methodsFor: 'icon' stamp: 'CamilleTeruel 5/13/2013 17:26' prior: 17293279! rebuildIconicButtonFrom: icon ^ IconicButton new target: icon target; actionSelector: icon actionSelector; arguments: icon arguments; labelGraphic: icon labelGraphic; color: icon color; helpText: icon helpText; extent: icon extent; borderWidth: icon borderWidth! ! !Workspace methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 13:36'! isWorkspace ^true! ! !Debugger methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 13:38'! isWorkspace ^false! ! !Debugger methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 10:57'! sourceTextArea ^dependents at: 3.! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/7/2013 15:00'! standOutHorizontalScope self handleEdit: [NNavNavigateHorizontal standOutFor: textMorph editor] ! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/7/2013 17:27'! standOutIntoFirstScope self handleEdit: [NNavNavigateIntoNotAsk standOutFor: textMorph editor]! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/7/2013 13:55'! standOutIntoScope self handleEdit: [NNavNavigateInto standOutFor: textMorph editor]! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/7/2013 14:19'! standOutOverScope self handleEdit: [NNavNavigateOver standOutFor: textMorph editor] ! ! "Nautilus"! "NodeNavigation"! ----End fileIn----! ----QUIT----an Array(14 May 2013 8:48:33 am) Pharo.image priorSource: 3805178! ----STARTUP----an Array(14 May 2013 8:55:12 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 May 2013 8:55:12 am) Pharo-30124.image priorSource: 3827844! ----STARTUP----an Array(14 May 2013 10:45:45 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 32789521! menuCommandOn: aBuilder (aBuilder item: #'Integrator Menu') order: 1.5; precondition: [self currentlyIntegratingChanges]; parent: #System; icon: Smalltalk ui icons smallAuthoringToolsIcon; action: [ScriptLoader releaseMenu]! ! !ScriptLoader class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 32789993! theme ^ Smalltalk ui theme! ! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/14/2013 10:39' prior: 37359907! commentForCurrentUpdate ^ '10576 reducing references/coupling to UITheme and ThemeIcons https://pharo.fogbugz.com/f/cases/10576 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/14/2013 10:40'! script222 ^ 'AST-Core-MarcusDenker.146.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.21.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-EstebanLorenzano.36.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1431.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.464.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.16.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.810.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-EstebanLorenzano.156.mcz StartupPreferences-EstebanLorenzano.86.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.832.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-EstebanLorenzano.68.mcz TextTests-MarcusDenker.5.mcz Tools-EstebanLorenzano.1117.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/14/2013 10:41'! update30125 "self new update30125" self withUpdateLog: '10576 reducing references/coupling to UITheme and ThemeIcons https://pharo.fogbugz.com/f/cases/10576 '. self loadTogether: self script222 merge: false. ThemeIcons current: PharoUIThemeIcons new. World resetWorldMenu. NautilusUI resetIconCaches. self flushCaches. ! ! "ScriptLoader30"! !ThemeIcons commentStamp: 'gvc 5/18/2007 10:25' prior: 52880550! Some extra icons in the vein of MenuIcons.! !AbstractNautilusUI commentStamp: '' prior: 37014856! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !Object methodsFor: '*Tools-Base' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 28575534! defaultBackgroundColor "Answer the color to be used as the base window color for a window whose model is an object of the receiver's class" "I don't want to do a self theme because otherwise I will need to implement it on Object" ^ Smalltalk ui theme windowColorFor: self! ! !Object methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28571345! nautilusIcon ^ Smalltalk ui icons iconNamed: #classIcon! ! !ThemeIcons commentStamp: 'gvc 5/18/2007 10:25' prior: 37393545! Some extra icons in the vein of MenuIcons.! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53023695! backIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons backIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53023955! blankIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons blankIcon.! ! !ThemeIcons class methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 11:04' prior: 52880812! blankIconOfWidth: aNumber ^ self current blankIconOfWidth: aNumber! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52932404! calendarIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons calendarIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52932675! changeSorterIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons changeSorterIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53024087! checkBoxOffIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOffIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53024380! checkBoxOnIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOnIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53024670! checkBoxPressedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxPressedIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53024965! configurationIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons configurationIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53025255! confirmIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons confirmIcon.! ! !ThemeIcons class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/14/2013 09:44'! current "WARNING: Direct access to this method is ill-adviced, use Smalltalk ui icons instead." ^ current ifNil: [ current := self new ]! ! !ThemeIcons class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/10/2013 09:51'! current: aThemeIcons current := aThemeIcons! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53025526! errorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons errorIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53025802! expandBoxIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons expandBoxIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53026089! eyedropperIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons eyedropperIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53026369! forwardIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons forwardIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53026650! fullscreenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons fullscreenIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53026938! haloCollapseIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloCollapseIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53027234! haloDebugIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDebugIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53027521! haloDismissIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDismissIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53027814! haloDragIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDragIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53028098! haloDupIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDupIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53028379! haloFontEmphIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontEmphIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53028675! haloFontSizeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontSizeIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53028971! haloFontStyleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontStyleIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53029270! haloGrabIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloGrabIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53029554! haloHelpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloHelpIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53029838! haloMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloMenuIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53030122! haloPaintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloPaintIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53030409! haloRecolorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloRecolorIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53030702! haloRotIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloRotIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53030983! haloScaleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloScaleIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 19:33' prior: 53031270! haloScaleIconContents ^ self current haloScaleIconContents.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53031644! haloViewIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloViewIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53031918! helpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons helpIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53032180! homeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons homeIcon.! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 11:07' prior: 53022712! iconNamed: aSymbol ^ self current iconNamed: aSymbol ! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 11:07' prior: 53022879! iconNamed: aSymbol ifNone: aBlock ^ self current iconNamed: aSymbol ifNone: aBlock! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53032452! imageIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons imageIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53032717! infoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons infoIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53032980! jumpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons jumpIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53033242! lockIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons lockIcon.! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'gvc 7/23/2008 13:01' prior: 53023085! normalSizeNames "Answer the names of the normal icons" ^#('error' 'info' 'lock' 'question' 'warning' 'upArrow' 'downArrow' 'backspaceArrow')! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53033505! objectsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons objectsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53033776! openIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons openIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53034038! paintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53034313! paintTabIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintTabIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53034597! paintingIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintingIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53034871! pharoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons pharoIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52932986! processBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons processBrowserIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53035408! publishIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons publishIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53035679! questionIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons questionIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53035964! radioButtonOffIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOffIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53036266! radioButtonOnIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOnIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53036565! radioButtonPressedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonPressedIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52933303! recentMessagesIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons recentMessagesIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53036879! rotateIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons rotateIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53037157! scaleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons scaleIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52933620! scriptManagerIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons scriptManagerIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53037422! smallAuthoringToolsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallAuthoringToolsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53037729! smallBackIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBackIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53038006! smallBarcodeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBarcodeIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53038293! smallBoldIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBoldIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53038571! smallCancelIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCancelIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53038855! smallCenteredIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCenteredIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53039144! smallConfigurationIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallConfigurationIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53039448! smallCopyIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCopyIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53039725! smallCutIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCutIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53039999! smallDebugIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52933934! smallDebugItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53040279! smallDeleteIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDeleteIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53040562! smallDoItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDoItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53040839! smallErrorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallErrorIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53041120! smallExpertIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallExpertIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53041403! smallExportIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallExportIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53041686! smallFindIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFindIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53041964! smallFontsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFontsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53042244! smallForwardIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallForwardIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53042540! smallFullscreenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFullscreenIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53042835! smallHelpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHelpIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53043112! smallHierarchyBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHierarchyBrowserIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53043426! smallHomeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHomeIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53043703! smallInfoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallInfoIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53043981! smallInspectItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallInspectItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53044273! smallItalicIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallItalicIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53044557! smallJumpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallJumpIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53044835! smallJustifiedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallJustifiedIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53045127! smallLanguageIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLanguageIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53045417! smallLeftFlushIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLeftFlushIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53045709! smallLoadProjectIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLoadProjectIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53046007! smallLockIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLockIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53046285! smallNewIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallNewIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53046863! smallObjectsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallObjectsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53047149! smallOkIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallOkIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53047420! smallOpenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallOpenIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53047697! smallPaintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPaintIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53047977! smallPasteIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPasteIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53048257! smallPrintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52934245! smallPrintItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53048823! smallPublishIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPublishIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53049108! smallPushpinIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPushpinIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53049395! smallQuestionIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallQuestionIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53049685! smallQuitIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallQuitIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53049962! smallRedoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRedoIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53050239! smallRemoteOpenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRemoteOpenIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53050535! smallRightFlushIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRightFlushIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53050830! smallSaveAsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveAsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53051113! smallSaveIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53051400! smallScreenshotIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallScreenshotIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53051697! smallSelectIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSelectIcon.! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'AlainPlantec 10/24/2010 20:24' prior: 53023326! smallSizeNames "Answer the names of the small icons" ^#('smallError' 'smallInfo' 'smallLock' 'smallQuestion' 'smallWarning' 'smallPushpin' 'smallBold' 'smallItalic' 'smallUnderline' 'smallStrikeOut' 'smallBarcode' 'smallHierarchyBrowser' 'smallSystemBrowser' 'smallScreenshot')! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53052263! smallStrikeOutIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallStrikeOutIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53052556! smallSystemBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSystemBrowserIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53052861! smallUnderlineIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUnderlineIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53053154! smallUndoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUndoIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53053431! smallUpdateIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUpdateIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53053714! smallVolumeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallVolumeIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53053997! smallWarningIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallWarningIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53054284! smallWindowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallWindowIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53054577! solidMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons solidMenuIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52934556! testRunnerIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons testRunnerIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53054864! tinyMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons tinyMenuIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52934862! toolsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons toolsIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52935152! transcriptIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons transcriptIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53055138! upArrowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons upArrowIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52935457! userIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons userIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52935740! versionControlIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons versionControlIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53055410! volumeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons volumeIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53055678! warningIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons warningIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 53055950! windowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons windowIcon.! ! !ThemeIcons class methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 52936057! workspaceIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons workspaceIcon.! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:32'! abstractIcon ^ icons at: #'abstractIcon' ifAbsentPut:[ self abstractIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:18'! abstractIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 369098752 1912602624 2717908992 3019898880 3640655872 3841982464 3674210304 3405774848 385875968 16777215 16777215 1811939328 1845493760 352321536 16777215 16777215 134217728 2432696320 3539992576 3590324224 16777215 16777215 1442840576 2264924160 16777215 16777215 16777215 50331648 2667577344 1241513984 3053453312 2952790016 16777215 16777215 3154116608 1543503872 16777215 16777215 16777215 1509949440 2617245696 16777215 3422552064 2650800128 16777215 16777215 4060086272 2399141888 16777215 16777215 16777216 3523215360 671088640 16777215 3607101440 2399141888 16777215 16777215 3439329280 1325400064 16777215 16777215 1342177280 3019898880 16777215 16777215 3472883712 2533359616 16777215 16777215 436207616 16777215 16777215 16777215 3087007744 1426063360 16777215 16777215 3238002688 2952790016 16777215 16777215 16777215 16777215 16777215 520093696 4244635648 4060086272 4026531840 3825205248 3690987520 3472883712 16777215 16777215 16777215 16777215 16777215 2231369728 1996488704 16777215 16777215 16777215 2483027968 3992977408 16777215 16777215 16777215 16777215 201326592 3321888768 134217728 16777215 16777215 16777215 1962934272 4278190080 318767104 16777215 16777215 771751936 2583691264 922746880 83886080 16777215 16777215 16777215 1090519040 4278190080 2617245696 1811939328 1929379840 3707764736 3875536896 3254779904 201326592 16777215 16777215 16777215 134217728 3791650816 2214592512 419430400) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:32'! alertIcon ^ icons at: #'alertIcon' ifAbsentPut:[ self alertIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:18'! alertIconContents ^(Form extent: 16@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 2919235584 2919235584 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1207959552 4278190080 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278255616 4278255616 3338665984 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1207959552 4278190080 4283633923 4283633923 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278255616 4291897863 4291897863 4278255616 3338665984 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1207959552 4278190080 4283633923 4294914824 4294914824 4283633923 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278255616 4291897863 4294914824 4294914824 4291897863 4278255616 3338665984 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1207959552 4278190080 4283568131 4294914824 4294914824 4294914824 4294914824 4283568131 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278255616 4291832327 4294914824 4294914824 4294914824 4294914824 4291832327 4278255616 3338665984 16777215 16777215 16777215 16777215 16777215 1207959552 4278190080 4283502595 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4283502595 4278190080 1207959552 16777215 16777215 16777215 16777215 3338665984 4278255616 4291832327 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4291832327 4278255616 3338665984 16777215 16777215 16777215 1207959552 4278190080 4283437059 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4283437059 4278190080 1207959552 16777215 16777215 3338665984 4278255616 4291766534 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4291766534 4278255616 3338665984 16777215 1207959552 4278190080 4283437059 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4294914824 4283437059 4278190080 1207959552 3288334336 4278190080 4280813569 4282322178 4282322178 4282322178 4282322178 4282322178 4282322178 4282322178 4282322178 4282322178 4282322178 4280813569 4278190080 3321888768 3238068224 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3254845440) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:33'! announcementIcon ^ icons at: #'announcementIcon' ifAbsentPut:[ self announcementIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! announcementIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 168300858 976894522 976888885 34288443 993737531 993722369 959979575 673982238 103889690 87761712 705236742 120273668 87758851 152641799 789920516 959985427 204284436 488586007 34289723 993723152 926613505 168311098 976632635 473311541 1010580540 1007826230 840318012 1010580540 456396046 1010580540 1010580526 623262780 1010580540 1010580540 1010580540 1010580540) offset: 0@0) colorsFromArray: #(#(0.706 0.788 0.875) #(0.439 0.596 0.761) #(0.545 0.674 0.807) #(0.887 0.934 0.996) #(0.538 0.667 0.804) #(0.423 0.585 0.753) #(0.859 0.918 0.992) #(0.844 0.91 0.992) #(0.577 0.694 0.819) #(0.879 0.93 0.996) #(0.953 0.969 0.98) #(0.663 0.757 0.855) #(0.863 0.922 0.992) #(0.372 0.549 0.733) #(0.71 0.792 0.879) #(0.867 0.926 0.996) #(0.815 0.891 0.992) #(0.361 0.542 0.729) #(0.435 0.592 0.761) #(0.875 0.926 0.996) #(0.827 0.902 0.992) #(0.819 0.894 0.992) #(0.678 0.768 0.863) #(0.49 0.635 0.784) #(0.898 0.941 0.996) #(0.867 0.922 0.996) #(0.482 0.628 0.78) #(0.639 0.741 0.848) #(0.937 0.953 0.973) #(0.815 0.894 0.992) #(0.871 0.926 0.996) #(0.819 0.894 0.988) #(0.941 0.965 0.996) #(0.855 0.914 0.992) #(0.84 0.906 0.992) #(0.91 0.945 0.996) #(0.522 0.655 0.796) #(0.431 0.592 0.757) #(0.745 0.815 0.891) #(0.883 0.934 0.996) #(0.902 0.945 0.996) #(0.458 0.612 0.768) #(0.891 0.937 0.996) #(0.836 0.902 0.992) #(0.894 0.937 0.996) #(0.851 0.914 0.992) #(0.914 0.937 0.965) #(0.831 0.902 0.992) #(0.902 0.941 0.996) #(0.863 0.918 0.992) #(0.365 0.545 0.729) #(0.984 0.988 0.992) #(0.6 0.714 0.831) #(0.906 0.934 0.961) #(0.616 0.721 0.836) #(0.914 0.949 0.996) #(0.992 0.996 0.996) #(0.353 0.534 0.725) #(0.345 0.53 0.721) #(1.0 1.0 1.0)))! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:34'! arrowDoubleDownIcon ^ icons at: #'arrowDoubleDownIcon' ifAbsentPut:[ self arrowDoubleDownIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! arrowDoubleDownIconContents ^ Form extent: 12@6 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 1711418368 4278893824 4278893824 1711418368 16777215 16777215 16777215 16777215 16777215 16777215 1644306688 3540342528 3590744064 4278961664 4278961664 3590744064 3540342528 1644306688 16777215 16777215 16777215 16777215 33554432 3120842496 4278962176 4278962688 4278962688 4278962176 3120842496 33554432 16777215 16777215 16777215 16777215 16777215 402722560 3590744064 4278962688 4278962688 3590744064 402722560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1308764928 3959984384 3959984384 1308764928 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315466752 2315466752 16777215 16777215 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:34'! arrowDoubleUpIcon ^ icons at: #'arrowDoubleUpIcon' ifAbsentPut:[ self arrowDoubleUpIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! arrowDoubleUpIconContents ^ Form extent: 12@6 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 2315466752 2315466752 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1308764928 3959984384 3959984384 1308764928 16777215 16777215 16777215 16777215 16777215 16777215 16777215 402722560 3590744064 4278962688 4278962688 3590744064 402722560 16777215 16777215 16777215 16777215 16777215 33554432 3120842496 4278962176 4278962688 4278962688 4278962176 3120842496 33554432 16777215 16777215 16777215 16777215 1644306688 3540342528 3590744064 4278961664 4278961664 3590744064 3540342528 1644306688 16777215 16777215 16777215 16777215 16777215 16777215 1711418368 4278893824 4278893824 1711418368 16777215 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:35'! arrowDownIcon ^ icons at: #'arrowDownIcon' ifAbsentPut:[ self arrowDownIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! arrowDownIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1157900544 3154467840 3154467840 1157900544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1711483648 4278893824 4278893824 1711483648 16777215 16777215 16777215 16777215 16777215 16777215 1661149440 3624228608 3657853952 4278961664 4278961664 3657853952 3624228608 1661149440 16777215 16777215 16777215 16777215 16777216 3070510592 4278962176 4278962688 4278962688 4278962176 3070510592 16777216 16777215 16777215 16777215 16777215 16777215 352324608 3573966336 4278962688 4278962688 3573966336 352324608 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1258499072 3959984128 3959984128 1258499072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315532032 2315532032 16777215 16777215 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:35'! arrowUpAndDownIcon ^ icons at: #'arrowUpAndDownIcon' ifAbsentPut:[ self arrowUpAndDownIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! arrowUpAndDownIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 2315532032 2315532032 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1308830464 3959984128 3959984128 1308830464 16777215 16777215 16777215 16777215 16777215 16777215 16777215 402658560 3590744064 4278962688 4278962688 3590744064 402658560 16777215 16777215 16777215 16777215 16777215 33554432 3120842496 4278962176 4278962688 4278962688 4278962176 3120842496 33554432 16777215 16777215 16777215 16777215 1644372480 3540342528 3590744064 4278961664 4278961664 3590744064 3540342528 1644372480 16777215 16777215 16777215 16777215 16777215 16777215 1711483648 4278893824 4278893824 1711483648 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1711483648 4278893824 4278893824 1711483648 16777215 16777215 16777215 16777215 16777215 16777215 1644372480 3540342528 3590744064 4278961664 4278961664 3590744064 3540342528 1644372480 16777215 16777215 16777215 16777215 33554432 3120842496 4278962176 4278962688 4278962688 4278962176 3120842496 33554432 16777215 16777215 16777215 16777215 16777215 402658560 3590744064 4278962688 4278962688 3590744064 402658560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1308830464 3959984128 3959984128 1308830464 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315532032 2315532032 16777215 16777215 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:35'! arrowUpIcon ^ icons at: #'arrowUpIcon' ifAbsentPut:[ self arrowUpIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! arrowUpIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 2315532032 2315532032 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1275276288 3959984384 3959984384 1275276288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 369104640 3573967104 4278962688 4278962688 3573967104 369104640 16777215 16777215 16777215 16777215 16777215 16777216 3087288576 4278962176 4278962688 4278962688 4278962176 3087288576 16777216 16777215 16777215 16777215 16777215 1610818304 3540342528 3590744320 4278961664 4278961664 3590744064 3540342528 1610818304 16777215 16777215 16777215 16777215 16777215 16777215 1711483648 4278893824 4278893824 1711483648 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1157900544 3154467840 3154467840 1157900544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! backIcon "Private - Generated method" ^ icons at: #'back' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self backIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! backIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:57'! base64ContentsOfFileNamed: aString "Private - convenient method" | file base64Contents | file := FileStream readOnlyFileNamed: aString. base64Contents := (Base64MimeConverter mimeEncode: file binary) contents. file close. ^ base64Contents! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 20:17'! blankIcon ^ self blankIconOfWidth: 16. ! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:19'! blankIconContents ^ Form extent: 12 @ 12 depth: 8! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! blankIconOfWidth: aNumber ^ icons at: ('blankIcon-' , aNumber asString) asSymbol ifAbsentPut: [Form extent: aNumber @ 1 depth: 8]! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:41'! bookIcon ^ icons at: #'bookIcon' ifAbsentPut:[ self bookIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:14'! bookIconContents ^(Form extent: 12@12 depth: 32 fromArray: #( 0 0 0 0 0 284817913 552924404 0 0 0 0 0 0 0 0 0 817149108 3747766882 4287730065 2679749049 549766340 0 0 0 0 0 0 1086110908 4016202338 4287137928 4288914339 4288914339 4289111718 3216290996 1086505666 0 0 0 816754350 4014952271 4287137928 4289309097 4289769648 4289111718 4288453788 4288453788 4288453788 2947658161 0 814846353 4283782485 4287072135 4288059030 4288059030 4288387995 4289243304 4289309097 4287927444 4287598479 2411050421 1081900156 4283585106 4286611584 4287532686 4287532686 4287466893 4287466893 4287401100 4287401100 4287401100 4288716960 2946868645 3211290728 4288651167 4287269514 4287006342 4287006342 4287006342 4286940549 4286940549 4287203721 4289177511 3483213213 281725642 2677183122 4293190884 4292861919 4289177511 4286874756 4286611584 4286611584 4287006342 4289638062 4020084125 549042617 0 282054607 2677643673 4289572269 4293256677 4292796126 4288980132 4287137928 4290164406 4020215711 816754350 0 0 0 0 551082200 2677643673 4289572269 4293256677 4292401368 4289177511 1085584564 0 0 0 0 0 0 0 551213786 2677643673 4288651167 1623244992 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:41'! breakpointIcon ^ icons at: #'breakpointIcon' ifAbsentPut:[ self breakpointIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:14'! breakpointIconContents ^ (Form extent: 12@12 depth: 32 fromArray: #(65793 263172 723723 1118481 1118481 986895 2105376 2763306 2763306 67103462 268432883 2763306 592137 4292120661 4294091872 4294091873 4294157409 4293761359 4293692217 4292966190 4291188009 4290667050 3788336426 2697513 1842204 4293896029 4294950266 4294951566 4294952079 4294946163 4294679882 4293560119 4291455268 4290408752 3781443373 2236962 2434341 4293634672 4294947176 4293104482 4293298523 4293889090 4294283834 4292508724 4289353754 4288703298 3779669784 460551 2763306 4294090583 4294944865 4294414649 4294412365 4294740308 4294347083 4292442425 4290340132 4289030722 3781115940 0 2763306 4293628243 4294416447 4293757242 4293558847 4293558846 4293428282 4292576052 4291195169 4289356842 3784068364 0 100637231 4293560659 4294345772 4293425455 4293292847 4292965164 4293096750 4292770607 4291784990 4289290532 3781376536 0 268414300 4290343737 4288897835 4289357356 4289357355 4289357356 4289621035 4288765476 4287250199 4288964671 3780194070 0 1447446 2500134 2697513 2763306 2763306 2697513 2500134 1447446 4284691226 4288243004 3780655396 0 263172 1118481 1973790 2368548 2368548 1973790 1118481 263172 4283972646 4288182882 3780721959 0 0 0 263172 526344 526344 263172 0 0 4283777067 4286604879 3780524581 0 0 0 0 0 0 0 0 0 3997841701 3999418930 3528274204 0) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:42'! byteCodePressedIcon ^ icons at: #'byteCodePressedIcon' ifAbsentPut:[ self byteCodePressedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:14'! byteCodePressedIconContents ^ Form extent: 24 @ 24 depth: 32 fromArray: #(4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289638062 4289374890 4289374890 4289374890 4289374890 4289374890 4289638062 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4288782753 4280098078 4278190080 4278190080 4278190080 4278190080 4278190080 4278255873 4279045389 4280098077 4283124555 4287730065 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278190595 4278191367 4278191367 4278191367 4278191367 4278190853 4278190080 4278190080 4278190080 4278255873 4284703587 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278231527 4278211962 4278209903 4278211448 4278219685 4278222774 4278207843 4278190337 4278255873 4287006342 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278207329 4278190080 4278190080 4278190080 4278190080 4278210932 4278232557 4278208616 4278190080 4283256141 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278202695 4278190080 4282532418 4282992969 4278190080 4278192397 4278232299 4278219943 4278190080 4281282351 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278202695 4278190080 4282203453 4282664004 4278190080 4278193169 4278232300 4278212991 4278190080 4282729797 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278208100 4278190080 4278190080 4278190080 4278190080 4278212734 4278217625 4278191624 4278190080 4285887861 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278231784 4278213249 4278211190 4278213507 4278224834 4278231013 4278191624 4278190080 4279703319 4289506476 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278222259 4278191882 4278190080 4278191110 4278200635 4278217368 4278210674 4278190337 4278190080 4283124555 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278202695 4278190080 4278190080 4278190080 4278190080 4278190080 4278223547 4278220457 4278190080 4279045389 4289703855 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278202695 4278190080 4286348412 4288980132 4282466625 4278190080 4278208358 4278232557 4278195487 4278190080 4287203721 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278202695 4278190080 4284243036 4286019447 4280624421 4278190080 4278211448 4278232557 4278201664 4278190080 4286151033 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278203982 4278190080 4278190080 4278190080 4278190080 4278257676 4278227665 4278229983 4278193427 4278190080 4288387995 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278206556 4278232557 4278228438 4278202694 4278200635 4278201665 4278211447 4278226121 4278223289 4278200121 4278190080 4280492835 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4285295724 4278190080 4278194198 4278200635 4278200635 4278200635 4278200635 4278200378 4278197030 4278192140 4278190080 4278190080 4279111182 4288256409 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4287795858 4278848267 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4279111182 4283716692 4288651167 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4288322202 4286874756 4286874756 4286874756 4286874756 4286874756 4286940549 4287664272 4288848546 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931 4281084972 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4292335575 4285229931) offset: 0 @ 0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:42'! byteCodeSelectedIcon ^ icons at: #'byteCodeSelectedIcon' ifAbsentPut:[ self byteCodeSelectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:14'! byteCodeSelectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4285690740 4283388242 4283388242 4283388242 4283388242 4283388242 4283914072 4284900966 4286019447 4289045925 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278210160 4278212477 4278212477 4278212477 4278212477 4278278012 4278601314 4278858308 4278586382 4282205255 4289506476 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278232557 4278231784 4278231270 4278232042 4278232557 4278232557 4278229725 4278596680 4282204997 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278227151 4278388489 4278387974 4278454282 4278793287 4278229982 4278232557 4278231013 4278388232 4289374890 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278224062 4279837479 4289769648 4289111718 4281349688 4278279815 4278232557 4278232557 4278787366 4287532686 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278224062 4279837479 4289769648 4288651167 4281086517 4278280588 4278232557 4278231527 4278454539 4288848546 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278227665 4278388746 4278190080 4278454796 4278729295 4278230497 4278232299 4278405738 4280165673 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278232557 4278232557 4278232557 4278232557 4278232557 4278232557 4278280844 4278716939 4288453788 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278231784 4278213249 4278211190 4278212992 4278223547 4278232299 4278229983 4278664018 4279573535 4288914339 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278224062 4278980883 4283979864 4283256913 4279573793 4278729811 4278232557 4278232557 4278662988 4285295724 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278224062 4279837479 4289769648 4289769648 4289177511 4278586125 4278229468 4278232557 4278217111 4281350203 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278224062 4279837479 4289769648 4289769648 4287795858 4278586897 4278231270 4278232557 4278222517 4280100651 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278225349 4278520075 4280298031 4279705635 4278520589 4278541957 4278232557 4278232557 4278214280 4282533705 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278227923 4278232557 4278232557 4278223805 4278222002 4278223804 4278231785 4278232557 4278232557 4278225091 4278652691 4287203721 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4278981398 4278218398 4278222002 4278222002 4278222002 4278222002 4278221745 4278218656 4278214537 4278727752 4278717968 4285624947 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4282994771 4280298031 4280298031 4280298031 4280298031 4280298031 4280363824 4281284668 4282731084 4285164138 4289243304 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:42'! byteCodeUnselectedIcon ^ icons at: #'byteCodeUnselectedIcon' ifAbsentPut:[ self byteCodeUnselectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:15'! byteCodeUnselectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4285756275 4283519313 4283519313 4283519313 4283519313 4283519313 4283914071 4284900966 4286019447 4289045925 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4282137660 4282664004 4282664004 4282664004 4282664004 4282598211 4281874488 4280887593 4278848010 4282532418 4289506476 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4286611584 4286414205 4286348412 4286479998 4286611584 4286611584 4286019447 4280887593 4282532418 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4285558896 4278584838 4278519045 4278650631 4281019179 4286085240 4286611584 4286282619 4278584838 4289374890 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4284900966 4280361249 4289769648 4289111718 4281677109 4282992969 4286611584 4286611584 4279834905 4287532686 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4284900966 4280361249 4289769648 4288651167 4281413937 4283190348 4286611584 4286414205 4278716424 4288848546 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4285624689 4278650631 4278190080 4278716424 4281282351 4286151033 4286545791 4282006074 4280558628 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4283190348 4278848010 4288453788 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4286414205 4282795590 4282400832 4282729797 4284835173 4286545791 4286085240 4281282351 4279966491 4288914339 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4284900966 4279242768 4283979864 4283387727 4280032284 4281348144 4286611584 4286611584 4281084972 4285295724 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4284900966 4280361249 4289769648 4289769648 4289177511 4278848010 4286019447 4286611584 4283519313 4281742902 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4284900966 4280361249 4289769648 4289769648 4287795858 4278979596 4286348412 4286611584 4284637794 4280558628 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4285164138 4278716424 4280821800 4280163870 4278782217 4283058762 4286611584 4286611584 4282992969 4282795590 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4285690482 4286611584 4286611584 4284900966 4284506208 4284835173 4286479998 4286611584 4286611584 4285098345 4279045389 4287203721 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4279308561 4283782485 4284506208 4284506208 4284506208 4284506208 4284440415 4283848278 4283058762 4280953386 4278979596 4285690482 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4283387727 4280821800 4280821800 4280821800 4280821800 4280821800 4280887593 4281742902 4282992969 4285164138 4289243304 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4174039754) offset: 0@0)! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02'! calendarIcon ^ icons at: #'calendarIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self calendarIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! calendarIconContents ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHOSURBVDjLpZOxa1RBEIe/d/e8 FKeFEA2IGBWCICZYBSESBCFglUDSCJZaRBBbK1HQ0s4/QQlCgoKdoBA9sVBshCBETCNRiUUg 5PDt7MxY7HuXdxgEycKwyzJ88/vN7Gbuzl5WDvDozeZtd66p21EzQw2iGaqGmhPVaqFodNTs /f0rI+M5gLnfmB0/MPg/le88+TLWU6BmgwDtpevgDhrBFETSORQgAQoBEbZvvUJEB2qAqg8O Rw6BxRQeS0gBUkAMsPIdAIm60wNVKwEZrG+AW1JilpRotQNDQwCEOiCWgIXhe1w+f/if3hff rXMhxH4Fooa5kzdT0rNPi3TWlrl6bp7PP1d4ufqCiyNTzIzOUYiz1RWCJECjsuBA3swAmBmd oxu6APza3uDB9EM6a8sAFFEJYsRoOwBRww3yxt+Su6FLq9nqAQuxst11QDTcnX2lhc7XVO3j tw8cOzjMzafzTJ26RJUL0B7Ia020dNlsJAsTJyaZODlZziVj+swsWZb1AarJJUCMeCnn8esf aWruiIKoEtQIkry3mlUx+qfg7owd389prd6+9/7CbsvMrfaQ/O3dhdWzQa0tUZGoaDREjahx V8Dm1u/nANlev/MfAjw0JrMu09AAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02'! changeSorterIcon ^ icons at: #'changeSorterIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self changeSorterIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! changeSorterIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVDjLpVOxSgNBFJxcrkmC +AV+gP5BwEKwtLESW0mZD7CyEyViJVhbG7DURvEXBAsDKgpGxIjIecnF29t9byyyAZu9wkz1 2HnMm3m7WyGJWRC3Dq7aq83FTpKzMcwyqFNYVczHNrvpDc5XmktrXz9siAJpksCKYK5qs9u7 t+3T/fXjysn1q9TrtWhqhCSUAAkMR2PUGzWoAkqCBJST+qF3r4ft5Wo8toyy77En/zQpoSRS k/kaEH+mCoxyiQAARxcvDGHv7DnIbe1ekiQiUQ0uyIkEucJaAEAkUiLgwpzNvUDhyqa4sLiZ cFHplBJxN41QNsWWOXDegTFFsMnkJixujI9QlOUMR1DxDopC/hVhentx//Gp2+rkG2IdksEH nDioE4goqOxv7uQLUjiIE6Sf76AI/NPpAkBl1t8YYUb8Ao9lHyy2IyRjAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! checkBoxOffIcon "Private - Generated method" ^ icons at: #'checkBoxOff' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self checkBoxOffIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! checkBoxOffIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/checkBoxOff.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAVSURBVHheY/j/gaFBnqFBAif6/wMAs5gJ3stUs1kAAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! checkBoxOnIcon "Private - Generated method" ^ icons at: #'checkBoxOn' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self checkBoxOnIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! checkBoxOnIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/checkBoxOn.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAfSURBVHheY/j/gaFBnqFBgmH+DIb5M1FQgyRI/P8PAPXgDZ601IAT AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! checkBoxPressedIcon "Private - Generated method" ^ icons at: #'checkBoxPressed' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self checkBoxPressedIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! checkBoxPressedIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/checkBoxPressed.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAiSURBVHheY/j/gaFBnqFBgmH+DIYJMxFo/kyGBkmQ+P8fAPGKDWJR SBPAAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 17:06'! classIcon ^ self blankIcon! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:43'! classVarsPressedIcon ^ icons at: #'classVarsPressedIcon' ifAbsentPut:[ self classVarsPressedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:20'! classVarsPressedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289572269 4286874756 4284900966 4282992969 4281611316 4282598211 4283979864 4287072135 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4287137928 4280163870 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4279966491 4287664272 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4283716692 4278255873 4278190080 4278190125 4278190199 4278190242 4278190255 4278190240 4278190204 4278190114 4278190080 4281940281 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4286348412 4278190080 4278255883 4278190222 4278190321 4278190189 4278190107 4278190080 4278190084 4278190119 4278190158 4278190080 4281611316 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289111718 4279440147 4278190080 4278190247 4278190321 4278190124 4278190080 4278190080 4279242768 4278782217 4278190080 4278190080 4278190080 4281611316 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4284769380 4278190080 4278190153 4278190335 4278190200 4278190080 4280492835 4288059030 4289769648 4289769648 4287993237 4282400832 4278255873 4283585106 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4282664004 4278190080 4278190238 4278190332 4278190091 4278387459 4288059030 4289769648 4289769648 4289769648 4289769648 4289769648 4289374890 4289703855 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4280756007 4278190080 4278190281 4278190301 4278190080 4280229663 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4279308561 4278190080 4278190312 4278190273 4278190080 4281216558 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4280690214 4278190080 4278190281 4278190300 4278190080 4280229663 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4282664004 4278190080 4278190239 4278190331 4278190090 4278387459 4288059030 4289769648 4289769648 4289769648 4289769648 4289769648 4289374890 4289769648 4289769648 4289769648 4290690750 4292335575 4244898820 4244767234 4284572001 4287466893 4289769648 4289769648 4284703587 4278190080 4278190156 4278190335 4278190200 4278190080 4230095394 4070086808 4038111408 4021334192 4237661589 4282400832 4278255873 4283848278 4289769648 4289769648 4290559164 4292138196 4244898820 4110681092 4283716692 4286940549 4289769648 4289769648 4289111718 4279374354 4278190080 4278190245 4278190321 4278190120 4278190080 4278190080 4279308561 4278782217 4278190080 4278190080 4278190080 4281611316 4289769648 4289769648 4290756543 4291480266 4111207436 3691645450 4282664004 4286085240 4289769648 4289769648 4289769648 4286151033 4278190080 4278255885 4278190229 4278190321 4278190186 4278190102 4278190080 4278190082 4278190117 4278190158 4278190080 4281611316 4289769648 4289769648 4291151301 4289703855 3826915866 2147615234 4196935720 4284440415 4289703855 4289769648 4289769648 4289769648 4283387727 4278190080 4278190080 4278190131 4278190199 4278190239 4278190252 4278190242 4278190211 4278190116 4278190080 4281940281 4289769648 4289769648 4292006610 4271018642 3037662991 738197504 4127853066 4283979864 4288387995 4289769648 4289769648 4289769648 4289769648 4286940549 4280163870 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4279966491 4287664272 4289769648 4290230199 4292335575 4047256636 1728053248 14684133 3892708870 4282729797 4286151033 4289769648 4289769648 4289769648 4289769648 4289769648 4289572269 4286611584 4284703587 4282927176 4281479730 4282400832 4283914071 4287072135 4289769648 4289769648 4289769648 4291217094 4290493371 4077521418 150994944 14684133 1392640514 4077981969 4283914071 4288190616 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4292138196 4097259319 2064058119 14684133 14684133 14684133 2986541827 4078968864 4284572001 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289901234 4291875024 4149367378 2987133964 16777216 14684133 14684133 14684133 134217728 3188065798 4162723358 4284045657 4288848546 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290230199 4289374890 4213844522 3205632530 117440512 14684133 14684133 14684133 14684133 14684133 67108864 2147681027 4093969669 4179697953 4284308829 4287203721 4289177511 4289769648 4289769648 4289769648 4289769648 4289374890 4287861651 4284637794 4196672548 3994030096 1594427657 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 167772160 1862599941 3255964178 3741911305 4161210119 4228055811 4227990018 4227990018 4228055811 4177921542 3708751631 2602573856 822346756 14684133 14684133 14684133 14684133 14684133 14684133) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:43'! classVarsSelectedIcon ^ icons at: #'classVarsSelectedIcon' ifAbsentPut:[ self classVarsSelectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:20'! classVarsSelectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288519581 4287006342 4287927444 4289309097 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4285690483 4279900714 4278519052 4278716443 4278913850 4278848038 4278387465 4280361263 4285361517 4289638062 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4288190616 4280690227 4278716465 4278190269 4278190323 4278190335 4278190335 4278190335 4278190331 4278190259 4278650662 4286282619 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289243304 4279242778 4278256016 4278190333 4278190335 4278190312 4278190237 4278387569 4278256001 4278190247 4278190319 4278782296 4285953654 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4282664011 4278584928 4278190335 4278190335 4278190258 4278650646 4281940294 4284703588 4283848281 4281150779 4278650643 4278387485 4285953654 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4288059030 4278650646 4278190320 4278190335 4278190308 4278650642 4287401100 4289769648 4289769648 4289769648 4289769648 4288322202 4283124562 4288453788 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4285822068 4278848084 4278190335 4278190335 4278584939 4283321940 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4182724431 4283979864 4289572269 4289769648 4289769648 4283650902 4278256002 4278190335 4278190335 4278848054 4286874756 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4216344656 4283979864 4289572269 4289769648 4289769648 4281479743 4278190248 4278190335 4278190335 4278716441 4288453788 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3988174518 4249899088 4283979864 4289572269 4289769648 4289769648 4282927182 4278256014 4278190335 4278190335 4278848045 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 4122458039 4249964881 4283979864 4289572269 4289769648 4289769648 4285229931 4278782304 4278190335 4278190335 4278716502 4284703588 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 4189501110 4233253458 4284045657 4289638062 4289769648 4289769648 4287335307 4278848039 4278190333 4278190335 4278190281 4279045400 4221937061 4222660784 4222660784 4222660784 4272992432 4289638062 4286348412 4289374890 4289769648 4289769648 4289967027 4292335575 4155946678 3813362507 4283979864 4289309097 4289769648 4289769648 4289703855 4280624432 4278321807 4278190335 4278190335 4278519161 4279111193 4285295724 4287598479 4286874756 4284703587 4279440159 4278321671 4285953654 4289769648 4289769648 4290032820 4292335575 3669802172 3696448339 4283979864 4288651167 4289769648 4289769648 4289769648 4288256409 4278716435 4278190290 4278190335 4278190335 4278190267 4278716505 4278913837 4278913852 4278584933 4278190271 4278782296 4285953654 4289769648 4289769648 4290361785 4292335575 3602430136 2706789974 4283979864 4286940549 4289769648 4289769648 4289769648 4289769648 4286019448 4278782227 4278519155 4278190323 4278190335 4278190335 4278190335 4278190335 4278190335 4278190315 4278584893 4285953654 4289769648 4289769648 4291085508 4292335575 2829757098 1195064123 4267202648 4285098345 4289769648 4289769648 4289769648 4289769648 4289769648 4288848546 4282071876 4278387465 4278848048 4278716507 4278255999 4278650727 4278913856 4278584846 4282006084 4288980132 4289769648 4289769648 4291940817 4275624152 1299740792 33554432 3746516815 4283979864 4288980132 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288980132 4287072135 4285295724 4283914071 4285032552 4286479998 4289243304 4289769648 4289769648 4289769648 4290230199 4292335575 3703356604 83886080 14684133 2102612819 4267202648 4285624689 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291743438 4275558359 2089980562 14684133 14684133 33554432 2957856077 4283979864 4287466893 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291019715 4292335575 2879628195 33554432 14684133 14684133 14684133 268435456 3444461134 4284243036 4288059030 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292138196 3299716525 154613559 14684133 14684133 14684133 14684133 14684133 239618120 2706789974 4115747153 4286743170 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289901234 4291282887 3955146430 2376114336 41975936 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 673588774 2706724181 3462356831 3446369131 4237398417 4221147545 4120484249 4103772826 4187593113 4087390368 3047860906 3098718898 2192157097 234881023 14684133 14684133 14684133 14684133 14684133) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:43'! classVarsUnselectedIcon ^ icons at: #'classVarsUnselectedIcon' ifAbsentPut:[ self classVarsUnselectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:21'! classVarsUnselectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288519581 4287006342 4287927444 4289309097 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4285756275 4280427042 4278716424 4279308561 4280492835 4279769112 4278584838 4280821800 4285361517 4289638062 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289769648 4288190616 4281084972 4280032284 4284440415 4286216826 4286611584 4286611584 4286611584 4286479998 4284111450 4279703319 4286282619 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4289243304 4279571733 4282992969 4286545791 4286611584 4285822068 4283387727 4282006074 4282466625 4283716692 4286085240 4281413937 4285953654 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4289769648 4282927176 4281545523 4286611584 4286611584 4284045657 4279111182 4282335039 4284769380 4283979864 4281611316 4279045389 4279242768 4285953654 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4288059030 4279111182 4286085240 4286611584 4285690482 4279045389 4287401100 4289769648 4289769648 4289769648 4289769648 4288322202 4283387727 4288453788 4289769648 4289769648 4290032820 4292335575 3954620086 4165947215 4283979864 4289572269 4289769648 4289769648 4285822068 4281282351 4286611584 4286611584 4281940281 4283519313 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4182724431 4283979864 4289572269 4289769648 4289769648 4283716692 4282532418 4286611584 4286611584 4280295456 4286874756 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3954620086 4216344656 4283979864 4289572269 4289769648 4289769648 4281940281 4283716692 4286611584 4286611584 4279308561 4288453788 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 3988174518 4249899088 4283979864 4289572269 4289769648 4289769648 4283124555 4282927176 4286611584 4286611584 4279966491 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 4122458039 4249964881 4283979864 4289572269 4289769648 4289769648 4285229931 4281677109 4286611584 4286611584 4281282351 4284769380 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4292335575 4189501110 4233253458 4284045657 4289638062 4289769648 4289769648 4287335307 4279834905 4286545791 4286611584 4284835173 4279440147 4221937061 4222660784 4222660784 4222660784 4272992432 4289638062 4286348412 4289374890 4289769648 4289769648 4289967027 4292335575 4155946678 3813362507 4283979864 4289309097 4289769648 4289769648 4289703855 4280953386 4282992969 4286611584 4286611584 4282335039 4279440147 4285295724 4287598479 4286874756 4284703587 4279834905 4278519045 4285953654 4289769648 4289769648 4290032820 4292335575 3669802172 3696448339 4283979864 4288651167 4289769648 4289769648 4289769648 4288256409 4279111182 4285098345 4286611584 4286611584 4284374622 4281413937 4280032284 4280492835 4281677109 4284506208 4281413937 4285953654 4289769648 4289769648 4290361785 4292335575 3602430136 2706789974 4283979864 4286940549 4289769648 4289769648 4289769648 4289769648 4286085240 4279111182 4282137660 4286216826 4286611584 4286611584 4286611584 4286611584 4286611584 4285953654 4280427042 4285953654 4289769648 4289769648 4291085508 4292335575 2829757098 1195064123 4267202648 4285098345 4289769648 4289769648 4289769648 4289769648 4289769648 4288848546 4282400832 4278584838 4280098077 4281413937 4282400832 4281808695 4280690214 4278848010 4282335039 4288980132 4289769648 4289769648 4291940817 4275624152 1299740792 33554432 3746516815 4283979864 4288980132 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288980132 4287072135 4285295724 4283914071 4285032552 4286479998 4289243304 4289769648 4289769648 4289769648 4290230199 4292335575 3703356604 83886080 14684133 2102612819 4267202648 4285624689 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291743438 4275558359 2089980562 14684133 14684133 33554432 2957856077 4283979864 4287466893 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291019715 4292335575 2879628195 33554432 14684133 14684133 14684133 268435456 3444461134 4284243036 4288059030 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292138196 3299716525 154613559 14684133 14684133 14684133 14684133 14684133 239618120 2706789974 4115747153 4286743170 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289901234 4291282887 3955146430 2376114336 41975936 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 673588774 2706724181 3462356831 3446369131 4237398417 4221147545 4120484249 4103772826 4187593113 4087390368 3047860906 3098718898 2192157097 234881023 14684133 14684133 14684133 14684133 14684133) offset: 0@0)! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! clearIcons "Clear the forms. Will be recreated on demand." icons := IdentityDictionary new! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:44'! collectionIcon ^ icons at: #'collectionIcon' ifAbsentPut:[ self collectionIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:21'! collectionIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 168952850 171324982 909522486 255008812 271977989 285543990 706029348 70649368 724044854 254681884 271986469 689508662 135534100 137758237 890965046 909522486 909513472 436212534 909508866 151126326 909522486 909511457 807338806 909522486 909521969 841353526 909522486 909511458 504824630 909522486 909511943 755436854 909522486 909522486 909522486 909522486) offset: 0@0) colorsFromArray: #(#(0.565 0.764 0.538) #(0.992 0.98 0.934) #(0.957 0.879 0.549) #(0.953 0.867 0.514) #(1.0 0.569 0.286) #(0.577 0.772 0.553) #(0.557 0.761 0.53) #(0.957 0.875 0.538) #(1.0 0.949 0.914) #(0.937 0.827 0.369) #(1.0 0.953 0.922) #(0.953 0.871 0.53) #(0.542 0.753 0.518) #(0.992 0.98 0.926) #(0.937 0.965 0.934) #(1.0 0.678 0.466) #(1.0 0.667 0.451) #(0.408 0.678 0.372) #(1.0 0.694 0.494) #(0.93 0.961 0.926) #(1.0 0.682 0.478) #(0.918 0.631 0.447) #(1.0 0.557 0.271) #(0.848 0.757 0.384) #(0.545 0.745 0.506) #(0.561 0.686 0.522) #(0.392 0.671 0.357) #(0.466 0.659 0.423) #(0.887 0.53 0.298) #(0.514 0.71 0.474) #(0.807 0.737 0.458) #(0.887 0.796 0.423) #(0.91 0.628 0.443) #(0.93 0.84 0.466) #(0.894 0.804 0.435) #(0.831 0.553 0.372) #(0.823 0.542 0.357) #(0.643 0.772 0.604) #(0.804 0.733 0.443) #(0.871 0.588 0.408) #(0.498 0.698 0.462) #(0.612 0.733 0.573) #(1.0 0.577 0.306) #(0.639 0.764 0.6) #(0.926 0.569 0.337) #(0.937 0.823 0.353) #(0.937 0.581 0.349) #(0.419 0.686 0.388) #(0.883 0.811 0.53) #(0.894 0.823 0.534) #(0.848 0.776 0.494) #(0.973 0.612 0.38) #(0.941 0.831 0.384) #(0.573 0.694 0.534) #( ) ))! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! configurationIcon "Private - Generated method" ^ icons at: #'configuration' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self configurationIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! configurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! confirmIcon "Private - Generated method" ^ icons at: #'confirm' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self confirmIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! confirmIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! createIconMethodsFromDirectory: directory "Create the methods for the icons. (self createIconMethodsFromDirectory: '')." | normalSize smallSize | normalSize := self normalSizeNames. smallSize := self smallSizeNames. normalSize , smallSize do: [:each | self createIconMethodsFromFile: each directory: directory].. self initializeIcons! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! createIconMethodsFromFile: aFileNamePrefix directory: directory "Create the methods for the icon. aFileNamePrefix is the png file name prefix (without the .png suffix) directory is where the png file is" | iconContentsSourceTemplate iconSourceTemplate png base64 contentsSelector selector | iconContentsSourceTemplate := '{1}IconContents "Private - Method generated with the content of the file {2}" ^ ''{3}'''. iconSourceTemplate := '{1} "Private - Generated method" ^icons at: #{1} ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self {1}Contents readStream) ].'. png :=( directory asFileReference / aFileNamePrefix , 'png') fullName. [base64 := self base64ContentsOfFileNamed: png ] on: Error do: [base64 := nil]. base64 ifNotNil: [contentsSelector := (aFileNamePrefix , 'IconContents') asSymbol. ((self respondsTo: contentsSelector) and: [(self perform: contentsSelector) = base64]) ifFalse: [| contentsSource | contentsSource := iconContentsSourceTemplate format: {aFileNamePrefix. png. base64}. self class compile: contentsSource classified: '*Graphics-Resources-Theme-Icons']. selector := (aFileNamePrefix , 'Icon') asSymbol. (self respondsTo: selector) ifFalse: [| source | source := iconSourceTemplate format: {selector}. self class compile: source classified: 'private - icons']]! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:44'! dirtyMonticelloPackageIcon ^ icons at: #'dirtyMonticelloPackageIcon' ifAbsentPut:[ self dirtyMonticelloPackageIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:21'! dirtyMonticelloPackageIconContents ^ (Form extent: 16@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 722731779 2235369994 3106932744 3394768655 301989888 16777215 16777215 100663296 2707033871 2689666317 3240297990 16777215 16777215 16777215 1985285646 3527478027 3207858441 3040217353 3577022729 4241039649 1496975882 16777215 673974023 3692692484 4156563488 3157854473 3023636745 16777215 16777215 16777215 1817054477 2200963080 16777215 2725122578 2859602707 3583055896 2674987795 959645704 3609199877 2486634761 4021558814 3257271814 924976646 16777215 16777215 16777215 16777215 33554432 16777215 3381204759 2169310477 2792296978 3464303893 3642819845 268435456 2943750931 3279885589 3408004614 16777215 16777215 16777215 16777215 16777215 16777215 706675973 3967620373 606012677 2186087693 4105248029 857801989 50331648 3667007512 2487290635 3207399175 16777215 16777215 16777215 16777215 16777215 16777215 2438729487 3094811668 16777215 3375040263 4088405277 503316480 975635974 4171504411 2350777605 2285767178 16777215 16777215 16777215 16777215 16777215 150994944 3715371795 1564477962 1598294795 3324184070 4189134109 1278085128 1984236299 3750762520 2721778186 1092551941 16777215 16777215 16777215 16777215 16777215 2270104845 3278114832 16777216 3593209607 1124598017 4120516889 637927681 2355040272 3246396693 3240625927 167772160 16777215 16777216 16777215 16777215 959908105 3747549200 858916872 1093601288 3023702538 1782516234 3598915094 33554432 2590839314 2910327828 3357607173 16777215 16777215 2065368068 16777215 1278806281 3612675598 1682771213 16777215 2605059084 1664682249 3026587921 2371227150 16777215 2506625297 2472874257 3324052741 33554432 16777215 2721253384 3694200840 3444116492 1296042506 16777215 16777215 1950485259 3693544966 3376548619 100663296 83886080 3259763981 3727624200 3927376900 3726115844 689570820 16777215 67108864 16777215 16777215 16777215 16777215 16777215 637534208 33554432 16777215 639042564 3056273159 67108864 538248196 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:44'! dirtyPackageIcon ^ icons at: #'dirtyPackageIcon' ifAbsentPut:[ self dirtyPackageIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! dirtyPackageIconContents ^ (Form extent: 15@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 55924053 417994005 50331647 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 465965843 3031638305 3903537987 3402577205 1055007009 55924053 16777215 16777215 16777215 16777215 16777215 16777215 33554432 211096853 2898203925 3903533104 4286542707 4286545791 4286874242 4037368410 3520342827 602025004 75530368 16777215 16777215 16777215 67108864 1907822094 3651740708 4254094677 4107417399 4122498132 4286807935 4189741923 4141438293 4238769019 3970982755 2898412355 399008868 41975936 50331648 3569165862 4155256623 4285098345 4285690482 4286019447 4239415384 4242881853 4191310675 4287269514 4287730065 4288848546 4290879648 4140590437 212511402 16777215 3417454134 4220740451 4173088326 4254618194 4106502465 4123936326 4287004286 4189741923 4141438550 4239162492 4191255676 4207711637 4057304204 284159983 16777215 3433903670 4285164138 4285754990 4240068945 4190259015 4287196782 4286545791 4286939521 4173685089 4258814040 4288185990 4288585374 3989996162 234881023 16777215 3618122282 4284571744 4285032552 4154738503 4286280049 4189085535 4190129742 4173682262 4220874350 4123479116 4286743170 4287269514 3990118753 150994943 16777215 3751747873 4218959157 4235610184 4170400322 4285229931 4285558896 4257240919 4285493103 4285822068 4123411524 4288113515 4107945542 4091689787 83886079 16777215 3548454687 4282203453 4233968957 4270077237 4285551186 4284966759 4290072142 4285229931 4286277479 4242418475 4123019079 4286609271 3854453836 83886079 16777216 3664647188 4280756007 4281742902 4284427822 4285086523 4286790202 4289611848 4290390056 4290652200 4291308588 4285690482 4285953654 3870967366 67108863 117440512 3313569037 4263906830 4280163613 4282654238 4282203453 4283319878 4289282112 4286729806 4284900966 4290194476 4285361517 4253703003 3486721317 41975936 16777216 134217728 1603340296 4016639245 4281337864 4280690214 4281611316 4287577405 4284835173 4284835173 4239861543 3820561958 2127435286 75513920 16777215 16777215 16777215 33554432 218103808 2543520266 4149480717 4280424986 4286460980 4285292640 4004129836 2832208402 296026112 16777215 16777215 16777215 16777215 16777215 16777215 16777215 50331648 372899840 3012103437 4187497251 3083409432 565772288 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 83886080 134217728 33554432 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:45'! downFullIcon ^ icons at: #'downFullIcon' ifAbsentPut:[ self downFullIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! downFullIconContents ^(Form extent: 24@24 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 251658240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 251658240 16777215 16777215 16777215 16777215 16777215 1293352960 3894738944 1847590912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1847590912 3894738944 1293352960 16777215 16777215 16777215 991559680 3846701056 4291952640 3915644928 1562247168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1562247168 3915644928 4291952640 3846701056 991559680 16777215 16777215 554172416 3694657536 4291624960 4292083712 3881107456 1276837888 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1276837888 3881107456 4292083712 4291624960 3694657536 554172416 16777215 16777215 16777215 738983936 3745382400 4291821568 4292018176 3830054912 1008336896 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1008336896 3830054912 4292018176 4291821568 3745382400 738983936 16777215 16777215 16777215 16777215 16777215 906887168 3796172800 4291952640 4291887104 3779002368 772472832 16777215 16777215 16777215 16777215 16777215 16777215 772472832 3779002368 4291887104 4291952640 3796172800 906887168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1125318656 3830317056 4292083712 4291690496 3728211968 570949632 16777215 16777215 16777215 16777215 570949632 3728211968 4291690496 4292083712 3830317056 1125318656 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1343881216 3864592384 4292083712 4291428352 3660644352 402653184 16777215 16777215 402653184 3660644352 4291428352 4292083712 3864592384 1343881216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1595604992 3898867712 4292083712 4291035136 3559718912 285212672 285212672 3559718912 4291035136 4292083712 3898867712 1595604992 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1847459840 3949985792 4292083712 4290641920 3458793472 3458793472 4290641920 4292083712 3949985792 1847459840 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2115895296 4001169408 4292083712 4273733632 4273733632 4292083712 4001169408 2115895296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2367619072 4035510272 4292083712 4292083712 4035510272 2367619072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2602500096 4103340032 4103340032 2602500096 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1260322816 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3861184512 3861184512 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 1260322816 16777215 16777215 2552365056 4290772992 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4290772992 2552365056 16777215 16777215 2552365056 4290772992 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4290772992 2552365056 16777215 16777215 2552365056 4290772992 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 4290772992 2552365056 16777215 16777215 1260322816 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 3089432576 1260322816 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:44'! downIcon ^ icons at: #'downIcon' ifAbsentPut:[ self downIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! downIconContents ^(Form extent: 24@24 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 251658240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 251658240 16777215 16777215 16777215 16777215 16777215 1293352960 3894738944 1847590912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1847590912 3894738944 1293352960 16777215 16777215 16777215 991559680 3846701056 4291952640 3915644928 1562247168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1562247168 3915644928 4291952640 3846701056 991559680 16777215 16777215 554172416 3694657536 4291624960 4292083712 3881107456 1276837888 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1276837888 3881107456 4292083712 4291624960 3694657536 554172416 16777215 16777215 16777215 738983936 3745382400 4291821568 4292018176 3830054912 1008336896 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1008336896 3830054912 4292018176 4291821568 3745382400 738983936 16777215 16777215 16777215 16777215 16777215 906887168 3796172800 4291952640 4291887104 3779002368 772472832 16777215 16777215 16777215 16777215 16777215 16777215 772472832 3779002368 4291887104 4291952640 3796172800 906887168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1125318656 3830317056 4292083712 4291690496 3728211968 570949632 16777215 16777215 16777215 16777215 570949632 3728211968 4291690496 4292083712 3830317056 1125318656 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1343881216 3864592384 4292083712 4291428352 3660644352 402653184 16777215 16777215 402653184 3660644352 4291428352 4292083712 3864592384 1343881216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1595604992 3898867712 4292083712 4291035136 3559718912 285212672 285212672 3559718912 4291035136 4292083712 3898867712 1595604992 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1847459840 3949985792 4292083712 4290641920 3458793472 3458793472 4290641920 4292083712 3949985792 1847459840 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2115895296 4001169408 4292083712 4273733632 4273733632 4292083712 4001169408 2115895296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2367619072 4035510272 4292083712 4292083712 4035510272 2367619072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2602500096 4103340032 4103340032 2602500096 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2770337792 2770337792 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:40'! emptyIcon ^ icons at: #'emptyIcon' ifAbsentPut:[ self blankIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:45'! emptyPackageIcon ^ icons at: #'emptyPackageIcon' ifAbsentPut:[ self emptyPackageIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! emptyPackageIconContents ^ (Form extent: 14@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 33554432 61516458 61516458 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 87241523 1012027986 3211488107 2927262330 613125003 61516458 16777216 16777215 16777215 16777215 16777215 16777216 50331648 541344836 2539346779 4201672816 3530321004 3782637174 4135353468 2407102841 379099288 93952409 16777215 16777215 16777216 252710928 2085704017 3966002276 3344982112 1582519123 109084800 290147147 2070637419 3783097725 3968502410 2323677312 243302528 16777215 67108864 3277478490 4284900966 3797769565 1330071367 138428480 55924053 55924053 208300650 1919576682 4170421139 4272795053 3348008590 164021958 16777215 4134366573 3848824679 3781979244 3681644913 2992857955 1280463442 1365139038 3128325750 3868036493 3851916950 3970081185 3937382319 234881023 16777215 4150749031 3966528620 4268715887 3698224750 4017452405 4252728187 4252991359 3951396229 3599140229 4287203721 4137722016 3903498922 218103807 16777215 4099562074 1684300900 1802004584 3899617135 4184829807 3648550775 3598745471 4202330746 3598548349 1754567828 2492896918 3700790677 150994943 16777215 4047980359 1599625304 16777215 158429553 3261885548 4151604340 4286019190 2557768820 264027324 117440511 2055570821 3531768450 83886079 16777215 4197725236 1750028111 16777215 16777215 2741265508 4167921005 4285756018 1466986608 33554431 50331647 2172419196 3715857275 83886079 16777215 4212989213 3627431478 826820680 16777215 2673235542 3982516063 3698356079 1248422249 16777215 510553710 3178460019 3698816887 67108863 16777215 2586586156 4195751446 4247004196 3091218496 3209185352 4166078544 4235095405 1432774246 2003331176 4134234987 3849351280 1601993852 33554431 16777215 16777215 473183284 3274123047 4263123482 4280953386 4215094589 4285427053 4167394661 3831981927 2188077931 244486802 33554431 16777215 16777215 16777215 16777215 16777215 1093874483 3760267553 4213581093 4268649837 2758108517 492921185 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1832598331 1014528120 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! errorIcon "Private - Generated method" ^icons at: #errorIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self errorIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! errorIconContents "Private - Method generated with the content of the file icons\base\error.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AArUSURBVGiBxZltcFTVGcd/597NbpZsdskLYEhCcORFUqwgKjp+kCkzteqgtZUMU2sraqdV B3zDTsdROtMPTrVWodDWsRZHK6MzpVPEqcWpUqliQytVQwhWEkiCFbJJNiG7d1/uyzn9cO9N NmHJO+2dOXP32Xt37+//nOc85znnCqUUUzn6hLhYW7r0biKRBaK0tIRIJEI4HEHTNJnJpFQq ZchkMqUM45TV2vqiNIyD1VN9aN4hJvNfA5WVK8X8+RtEXV190erV84INDRWisnL4TUqBEENm KkV2z55k5vXXT9odHcfsL77YMbezc8//VECypKReLFu2tei221YEv/vdMlFSgh2Pk21uxmxv x04ksHt7sXt7UZaFVlKCiEbRo1GCtbWUXHklxQsWoEyTzJ49meT27c32iROPVnd2vn1eBSSF mK1dfvmvAmvWXBP84Q8vUJZF+sABsocPY546hbJtlG0jvXMh2/+sz5xJZOVKym+9lVBtLckd O/qSO3YcyjU1bbwwlTo67QJS1dVXaStWvBR+6aVFlJSQPnAAY/9+ZDpdEHA0+EFbStA0ytas Yc5dd6FHIvQ88EBH6q23Nl/Y1vbytAkwliz5nn799ZuLn366JvfZZyTfeAOnrw/lOEjLGhf8 WWKkRCk12AiFmHvvvcxqaKD/17/u7tm2befCo0cfVkrJKQkwli//aXDjxu8VrV9fnv7b30jt 24cyzbPgx/T2KPBKSqT3ufzGG5n/6KNkGhsz/9mw4S83NDWtbQVLjREiBQUY9fV3BzdtejLw ne+Up15/nUxT0xDEeYD37Rlf+hKLnn0Wq7U1d2z9+leWffrpBiA3Wm9oI79IVVev1K+77sdF d955NrwP5Diu7Z2nA14qRfLwYY7edx/Fy5aFqh9++Jt76+ruB0qEEPq4BCSFqNRWrHi5+Oc/ r0m/997Z8JblwluWC+/ZMk/UZOF9O9XSwrHHH6fy7rtnXrxmzYNPxmJfBSJCiMCYArSVK7eF X3xxkXnsGKl33ins+ZHweaIGxUwS3rfjb77JyRdeoOaZZ2avXrLkJ8AF5+qJQQHJ0tJFgRtu uJZolIE9e1ygQqHhe7oQfP74yAebALxvn9i6lVRnJ1UbNlz0zOzZ64HZQFgIoRUUoC1b9ovg I49UpT/4AKe/f1zpUY0Ukwc/0vsTgVdSIk2T9i1bKLnxxtDVCxfeFoY6oAIICjFUo2gAyWh0 WdG6dVcoKTH27594bs8XVAh+gmL8e3r27mXgk0+Yu2nT3Ceqqu4AqoAoEBgmQCxceH/Rt79d nm5sRBrGxOH9UJJybPh8exR43/7it78lcOWVWv2cOVcB1cCs/FByBcyd+2URi5E9fPi8wqsJ wiulONPYiGUYlC5YUFEJNd6AHuwFrV+IxfqqVbVOXx/myZOTC5txwo+EGwteKoXM5Tjz978T +8Y3ordHo1d7PVABFAshREBbvHh9cN26WZnm5uEDVNcRmgaaBrru2roOug6BAJp/nwev+Q+H 4XYekPCFeGI0TyjefUg52KRhDP524L33qHjgAW1lVdWlDAzsB8qBLiAdENHoQq26GnPfPpRt I4JBZj30EKGLLio0b0z6cBwHy7IGm2maw+yRzezsJLd9O6qzk3RLCzEpKY5GZwAlQBlQCpzR iEZLAXcRYtuEr7hi2uFt28Y0zWHtLOCR1ysqkKtWIZXC6u3Ftm0CxcUhIIQ7BmJAMEBpaQTA 7ulB2jaiqGja4cfj8UL3OJrmhtmZMzjZLIFQKAgU4fZCKRDSmDGjFMDq6UHZthuD03QU8uxo baQg2xtjSily8TiislKfCxEgCISBYAAhBEq5tb73g6keSqkJe7tQU7ZNwBvglmki3WJIw02h ISAYUOl0EiHQSktxDAPlONMCP5mQGdmEZQ2mU2Ix7K4u53PI4IooAoo0mUqlAPRYzM3tpjlp eCnllEJm5HUnl0MqhSguxtF1coZhKRCeAB3QNTUwkATQYjGUbTPw7rvYfX0ThnccZ0JwY4pL pQh++KEb0rEYtm2Ty2SsvEcKQARkMnlSJhIE581D2TZWVxfH1q4lWFMDmjZ85oThs6hny7zJ SToOjjc5yfxr52hKSjQpCUiJLiUh/7vubndcKoWorcVxHDKGkc3vcEAGrJaWl7K7d99esnp1 WfcLLwyWCNm2tnEVX+OtLM9loxR4s7KSEuFfz3uutnw5qrVVfRKPt4M72QM2YGkXKPWv3J// 3BGqq0OfNWswE/0v4M9p5z9X02DpUnJvvZX6fTJ51BPgABZgaQB2R8enyjSJXHXV/x9+RBML FuAUF5Nqa0uedjOQ8ryfA0xXQHv785ldu5Llt9wCuj6pBci0wef9n1QKcd11qPZ29Vl3d6cX Oo4HbwwKqIrH/2o891xTcM4cZt5006hl8bR6epT1glQKsXgxaulSzJdf7tuSSPzDgzeBFHAG yA2uic1//3tT8pe/7J1z552IcLgw/MgHTqOnz7KVQlu7Fo4ccQ4eP37EcL3uAFkPfmCwBwCq u7oajdde+6deVETVPfec5Z0xt0imE15KxKpVODU1mK++mtg+MPBh3sBNAQnvbA/bojA/+uje 3vvua5+1di3lN988apyPOi6mCr9oETQ0IHbtSv+hs/MD2x20NpAGeoFuwFBKyWEC5mWzJ7IH Dz7Y/7Ofddf96EdELrtsUhlovDFeyKaiAnHPPfDRR1bTvn3Nf8xmW/OyTj/uSizhjYWz90Zr jh7dndy587nM22+nFz79NCWXXjpl+HPBFoS//37o71c9r7zS8URf3/sevAkkPfhTQEop5RQU AFD78cebezdv3m0eOpSt/81vmLVmzXmHF4sXoz32GMK2VXrr1lOPdHW9mQef8uBPeiGU81lH fcHRcdllT0XvuOOuso0byz/fsYPjW7YgTXN64ZVC/8pXoKEBDh2y4zt3tj9y+vSfst5E5cGf Bo4BbUBCKTVY1I35iun4JZd8K3zNNU9dsG1bda6ri+PPPsvpN94YykpTgNfq69FuvRVZU4PY tSvz8TvvND2RSOSHjQHEgeMefLdSKpfPN66XfM21tZeG6+qeK//BDy6JrltX0t/cTMfzz9O3 fz+2YYxZzwyzdR2tvp7A176GuvhiVFOTk3nttd5dnZ0HdqfT/oD1PR8H2r3WDWTVCOBxv2YV Qmjv19U1lM+f/1jFQw8tDF17bTCXTtPf2Eji3XdJHzmC2dWFmUi4sB4wkQiirAy9rg59+XLE 0qXYgQCqrU1lfve7xIHjx5u29/d/qNw872ebAdyY78CN+0Qh+AkJ8EVUQPiVefO+X1ZVtTZ0 4YXzSm+5Zba+YkXAwV3EW9ksuXgcO5tFzZyJo2nYto1tWciWFpXZuzeZPHFioKW7+8TWROJg 2p2c/BIhjZsqTwOf42acM4BZCH7CAjwRAndXILIAqr8fiXx9SXX19YFYrFwrLg7r4XCxFo2G lK6LXE+PlTUMK5dOm5mBgdzH8Xjrq4bREnerSr8wM3G9nsTNMKe91os7Wdmj8kxUQJ4Qf2eg FHerrwKYCcTKoCwEM067IaHjLv/8QzK0IMkyVJglgB6GygRTjeNV66QFeCIEQ1scYU9M1DuH ve+L8kT4tbwf6wZDhZmBG0KmP0mNi2EqAkYIGdzqyAP3my/A97yNG/t++FiAPR6PnxcBw/7Q FeML0vI+g9sD/ppW+va5Buh4jv8CDd/IyOYopYAAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:45'! exceptionIcon ^ icons at: #'exceptionIcon' ifAbsentPut:[ self exceptionIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! exceptionIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 1583238196 1191577949 759500554 1583225870 390089009 36066088 1578711384 857557019 906518110 1581393173 991970905 1549688414 722677332 570761514 1583242846 1327383559 1091971346 5322527 792346372 337270359 1297099812 1011548469 286015067 654532190 1583242842 941838926 1432247902 1583242763 221384798 1583242846 1583224899 1029594718 1583242846 1583231050 1583242846 1583242846) offset: 0@0) colorsFromArray: #(#(0.906 0.764 0.392) #(0.945 0.867 0.6) #(0.918 0.776 0.306) #(0.969 0.922 0.815) #(0.945 0.831 0.443) #(0.953 0.84 0.443) #(0.934 0.823 0.388) #(0.953 0.819 0.286) #(0.98 0.949 0.855) #(0.93 0.815 0.376) #(0.992 0.98 0.941) #(0.894 0.733 0.302) #(0.945 0.792 0.4) #(0.898 0.725 0.286) #(0.949 0.863 0.423) #(0.965 0.91 0.737) #(0.984 0.961 0.906) #(0.914 0.772 0.365) #(0.91 0.768 0.384) #(0.941 0.844 0.415) #(0.953 0.844 0.498) #(0.965 0.871 0.4) #(0.953 0.836 0.474) #(0.945 0.859 0.439) #(0.949 0.867 0.651) #(0.988 0.965 0.867) #(0.949 0.815 0.455) #(0.957 0.855 0.542) #(0.953 0.875 0.514) #(0.957 0.836 0.341) #(0.953 0.867 0.474) #(0.914 0.78 0.474) #(0.945 0.8 0.263) #(0.934 0.811 0.431) #(0.941 0.792 0.216) #(0.93 0.788 0.443) #(0.965 0.914 0.796) #(0.965 0.891 0.51) #(0.898 0.733 0.22) #(0.906 0.764 0.435) #(0.992 0.984 0.953) #(0.898 0.737 0.275) #(0.957 0.894 0.71) #(0.992 0.977 0.914) #(0.926 0.815 0.569) #(0.918 0.788 0.333) #(0.973 0.902 0.561) #(0.918 0.788 0.286) #(0.957 0.891 0.725) #(0.937 0.815 0.396) #(0.902 0.757 0.396) #(0.965 0.867 0.369) #(0.937 0.84 0.384) #(0.934 0.836 0.526) #(0.91 0.764 0.306) #(0.887 0.721 0.333) #(0.914 0.764 0.357) #(0.941 0.855 0.412) #(0.949 0.855 0.462) #(0.949 0.811 0.232) #(0.957 0.891 0.635) #(0.945 0.863 0.659) #(0.941 0.776 0.408) #(0.953 0.855 0.474) #(0.945 0.844 0.427) #(0.941 0.78 0.236) #(0.957 0.891 0.608) #(0.875 0.69 0.216) #(0.969 0.883 0.451) #(0.906 0.761 0.286) #(0.957 0.848 0.498) #(0.934 0.836 0.396) #(0.961 0.84 0.415) #(0.941 0.831 0.408) #(0.977 0.941 0.855) #(0.949 0.875 0.604) #(0.965 0.91 0.655) #(0.922 0.757 0.404) #(0.941 0.851 0.635) #(0.965 0.914 0.698) #(0.879 0.69 0.247) #(0.898 0.741 0.353) #(0.891 0.717 0.302) #(0.973 0.934 0.804) #(0.953 0.831 0.279) #(1.0 0.996 0.992) #(0.941 0.796 0.443) #(0.941 0.804 0.486) #(0.98 0.922 0.573) #(0.914 0.772 0.345) #(0.98 0.945 0.859) #(0.902 0.725 0.322) #(0.969 0.918 0.772) #(0.926 0.8 0.357) #( ) ))! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! expandBoxIcon "Private - Generated method" ^ icons at: #'expandBox' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self expandBoxIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! expandBoxIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/expandBox.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAS0lEQVR4XmNgZGR8zogFM6AD bIJAsW+SkpLPQRguj0Ph84aGhv0obNooBLkJ3TMYCkEA5GgQBx1jVciAA6AoZMQRlujOAANs ViNjAKn5Ws2+WwvGAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! exportAllIconsAsGif "self exportAllIconsAsGif" | sels | sels := self class selectors select: [:each | '*Icon' match: each asString]. sels do: [:each | self exportIcon: (self perform: each) asGifNamed: each asString]. ! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! exportAllIconsAsPNG "self exportAllIconsAsPNG" | sels | sels := self class selectors select: [:each | '*Icon' match: each asString]. sels do: [:each | self exportIcon: (self perform: each) asPNGNamed: each asString]. ! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! exportIcon: image asGifNamed: aString "self exportIcon: self newIcon asGifNamed: 'newIcon'" | writer | writer := GIFReadWriter on: (FileStream newFileNamed: aString, '.gif'). [ writer nextPutImage: image] ensure: [writer close]! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! exportIcon: image asPNGNamed: aString "self exportIcon: self newIcon asPNGNamed: 'newIcon'" | writer | writer := PNGReadWriter on: (FileStream newFileNamed: aString, '.png'). [ writer nextPutImage: image] ensure: [writer close]! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! eyedropperIcon "Private - Generated method" ^ icons at: #'eyedropper' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self eyedropperIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! eyedropperIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/eyedropper.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAACYAAAAkCAMAAADSK7iXAAADAFBMVEX///8AAAD///9/f3// AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdH R0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYA AAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UA AJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8y AAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2Uy AJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9l AABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2Vl AJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+Y AACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WY AJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///L AADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XL AJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L//// AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/ AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////e TOgfAAABAHRSTlP///////////8A//////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////AP//////OE00 OwAAAR5JREFUeF6t1DGygjAQBmCHVkYroplhFBjzwmHouAidF8ALZOzSeYF4g1Smeu8CtlRJ R5vqJejTV0CWwq2/2QnL/ruwdk4t7CfYj5IXmKnOaMkhdjO+5DHMlDF93xvZ4BD71oNyrAmx 7ql4VQbYSzXlFFNK6f9qgslOaq/0U02wi2tjetPJYzWoqbdxZaQcWpWBn7Vfcfeqtxpn2Toq uB/Enxpl2VdED7g5Vy81xpwi91Od1m81wnLqVJtYe64DLKeUXFsErKXvdcU1sL2riBKxXQJL nrtPFNsYyELhFUJAZJy6CxQDySr8uBAGAph7lcRATjM/riQF4rxfExEvUyD1rCACbcDjwA4t 2sE3hKUYPDXsUTMuEpt3uD7LoPoFh1uzvVTXHQoAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:46'! flagIcon ^ icons at: #'flagIcon' ifAbsentPut:[ self flagIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:22'! flagIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 437918234 437918234 437918234 436470535 101584139 387389210 436404481 17105924 303634202 436666638 218827016 35198490 437126412 185075720 1644314 437060363 168298504 1644570 436930320 269422351 370743322 437326099 320082453 387520538 437918234 437918234 387520538 454761243 454761242 387520538 454761243 454761242 387520282 454761243 454761242 387389210) offset: 0@0) colorsFromArray: #(#(0.22 0.396 0.585) #(0.898 0.945 0.996) #(0.228 0.498 0.761) #(0.608 0.796 0.98) #(0.635 0.804 0.98) #(0.655 0.819 0.98) #(0.47 0.729 0.973) #(0.542 0.768 0.977) #(0.251 0.631 0.961) #(0.267 0.639 0.961) #(0.275 0.643 0.961) #(0.286 0.647 0.961) #(0.302 0.659 0.965) #(0.326 0.667 0.965) #(0.353 0.678 0.965) #(0.396 0.714 0.965) #(0.419 0.729 0.969) #(0.239 0.686 0.93) #(0.243 0.624 0.772) #(0.236 0.682 0.851) #(0.228 0.667 0.788) #(0.224 0.616 0.671) #(0.384 0.228 0.082) #(0.349 0.212 0.098) #(0.329 0.2 0.094) #(0.694 0.462 0.271) #(1.0 1.0 1.0) #( )))! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! forwardIcon "Private - Generated method" ^ icons at: #'forward' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self forwardIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57'! forwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! fullscreenIcon "Private - Generated method" ^ icons at: #fullscreen ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self fullscreenIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! fullscreenIconContents "Private - Method generated with the content of the file /home/dgd/fullScreen.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAABF0 RVh0U29mdHdhcmUAU29kaXBvZGmU4xfQAAAHT0lEQVR4nL2WW2xc1RWGv7X3OWcutmfGYzuO 7TjBSYAAgaSQEGhRQVwU2pAgFQFC6iuKhBAvCEWVKtWPBCpVquhTq6pUBURFaVrUBmQuBRWh FJELhIRQGi42SUx8HY9n5lz2Xn3whAZIipCq/tJ6Odr7/Gv9/1rrHPg/QwAeffTRjjiOK2EY DotIRURKqpoXEauqAnhVTY0xdWDBWnu6VqtNDwwMzO3cubPxjQl37959jYgMqepaEbFAoKoB gIio9x5jjPPeZyLi2nc90BSRaRE5HgTBJ0NDQ5/ddddd7jxcS4SqKo888siNwJWLycJlx04e Gwisdb1dy+qD5aHaOe54EUmApqo2gWb7WR2Ycs69H4bh+IMPPjgtIvoVwtHR0c5CoXCtiNzw i5d+dm881Ojr7a8yO1UjPpGkF5cueXfHxjve+i9Je2BBROZVNRYRFZF559wnxpj3G43Gx6Oj o9mZw0GxWOxUVUSkM+5Y7Or+XoH+rirbe2/jqZeeCGtvLHSpqpwr2zYMUFbVsoi0VLWmqlZE Kt77Ffl8/pOHH374aKvVmhgdHfV269atPara49VveKPx2tW5FYEsmjrHakeodvTw8ZsnuoYr K5NKoWKNMREQyBL8OcgDoAOoiogXESMi/UC/MaZz27ZtdeO9j1Q1yLIs1EwlmcmIT6YkpzOG +4e5+d7vhs8cfHLTqfmTZVUtAmWgV1UHgG4RyZ2n6hFVXd2uvt8YU0qSZMCISM5amw+D0LmT mrp5pX4gxtU9B47up2ugg0t/uDb688Fn13/B/CUUgV6gH+g821fv/SKwQlU3GGM6RMSGYRgY wKhqBPCt5VcfKr7ZM71Fr383edU2XcPzyqEXef/Nf1LMdcTn6xoRCUSkDPS1ZeWM5+1ZVmOM zbIsDEQkExHnnOOWy249JiKzgLtk4NLTT4z9dlO9Wu8sz/fMb99y+wdf0zyISNSWcPosUmlX bAETiEjmvY/PyOS9t8YY19PVl+y84f53Do0fWL6sUk7+Mbb34oWFhTBpNUwaxzZzqc3li3Gx q9LsKlUa1d7l9eGRi2a7q1WstYalcfFtBTMRSVQ1DpxzznufGGMUEGst7S3TlQ/zZsvqa6de fO6pVdtv/0Hf+g1XUSqXKZe76SpXSOJW/sg7B8uH336LI+8c5KU//cZJWJwdXHXhB+vWX3m8 r6/PAUZEUlVNRaQVGGMyVfUiknrvRUQCIC8ickaq2uxMfscd97BqZO1XZBwcWsH1N99ClrZo LNbs88/t6X3290/27vndYxuGRi45ccWm644PDg6qiGTW2iVC5xze+xRw3vvIGCNnv7RWm8n3 9Q9w9MPj7NULmM1gLhGqkbImDyM5ZV2UYa1h623f56Zbb+bQ/v2Fpx5/fM3zz/xqsG/4osb6 jVuOr1y5shUkSVJvF7MgIqW21h1nBjtLU2NEomKxgw/mG7yRNVAEr8J4Aw4AXkNypsymYsh1 +ZTVEVy+cSOfjo9z9z33FH6068cXnTq1qjIyMtIyu3btqgGZiEyqqvPeN9udBUCzUbd9y5YD ME9AybQoSYuyaVK2TUrSomSaRMQcXLT8fHoZT8/3YIzBWkso4FwWJEkSdnd3N4yIaBAEc977 yXanTra7C4B8scOlSQJAqhkV02J1IeXb3cKNvYZ1nY6KbS0lYmLKJuZwK2QqCwijCO8VkCRN 08WdO3emAYCqzojIbHv5ApwClouIhmHkp6dOKyCha7CuXGKgaFCWPnvdXYLxGXNJhkeWQoXx 1BJFEUmWoiIzaZqehqWdRxRFp9pj8VG7sEkR+UhVW6qKima1+TlK1jFUAPExxrcQHyMas6YI ZRt/HhUbY8URBJZms4W10Wwcx5OfEz7wwAOxc+6kiBwTkRpLq2FeVY+r6qedpe7Fo4cP0dmc J/ANAhpYbbajQZdNWNMB3bZJ5Yy3JiOwAfX6AibM1SYmJv5DCLBr164jwIfe+1eNMVPttZQB 05Vq3/hf9jzNhYOriHydnG8Q0SDSBpFvEmqTauC4oGDpC5d8rlrFinDi0xNokD8+MTEx9QVC EdGHHnrosLX2befcq8BhVa0DfsXKtSde+Oseunv6qMYtCtKgSJMiDQrSIM8ieRbpNC0GcsoF BaFkhcZinddff33OefMeEAPYL2+OsbGxuR07dow75+aBmjGmWe1bPntg32vrioV85zVbvkNO Hfg6VhIio0TiyIknMo7IOMoIeQIO79/P3hdePjgxOffrNE0nz0kIsHfvXjc2NvbZnXfe+a8s y8aByeUrVr33xC8f2/jZqROl9euvoJwrk8cQkpLDEZKRQ8mrUJQ8Rw6+zcz0FH/7+74/TM0u 7gUWOXvAvw6qKvfdd19l38t/vDdNWvevv+Ly4as2b+bKzZsZWbuWIAi+cH7fKy+ze/dPpw4c PXl3Bq8A+o0Iv4w1VYadsk1FthuRS8uVSndPb09XoVg0C7V5NzMzMz0xWfvJbIMngXP9bv5v 0N9PB+exCuDf3d6HA+fU4WgAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:46'! greenArrowUpAndDownIcon ^ icons at: #'greenArrowUpAndDownIcon' ifAbsentPut:[ self greenArrowUpAndDownIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! greenArrowUpAndDownIconContents ^ Form extent: 9@15 depth: 32 fromArray: #(16777215 16777215 16777215 906042112 3791859456 906042112 16777215 16777215 16777215 16777215 16777215 268435456 3557049600 4278962432 3557049600 268435456 16777215 16777215 16777215 16777216 3137548288 4278894336 4278962688 4278894336 3137548288 16777216 16777215 16777215 2348951296 4161381376 4278962688 4278962688 4278962688 4161381376 2348951296 16777215 1342316032 3926358272 4278962688 4278962688 4278962688 4278962688 4278962688 3926358272 1342316032 3858831104 3842402048 3842402048 4262115584 4278962688 4262115584 3842402048 3842402048 3858831104 251658240 268435456 1140850688 4194866688 4278962688 4194866688 1140850688 268435456 251658240 16777215 16777215 939524096 4194866688 4278962688 4194866688 939524096 16777215 16777215 251658240 268435456 1140850688 4194866688 4278962688 4194866688 1140850688 268435456 251658240 3858831104 3842402048 3842402048 4262115584 4278962688 4262115584 3842402048 3842402048 3858831104 1342316032 3926358272 4278962688 4278962688 4278962688 4278962688 4278962688 3926358272 1342316032 16777215 2348951296 4161381376 4278962688 4278962688 4278962688 4161381376 2348951296 16777215 16777215 16777216 3137548288 4278894336 4278962688 4278894336 3137548288 16777216 16777215 16777215 16777215 268435456 3557049600 4278962432 3557049600 268435456 16777215 16777215 16777215 16777215 16777215 906042112 3791859456 906042112 16777215 16777215 16777215) offset: 0@0! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:46'! groupIcon ^ icons at: #'groupIcon' ifAbsentPut:[ self groupIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! groupIconContents ^ (Form extent: 15@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 741343023 3275816768 3075604305 610139997 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 206881045 2468937512 4198039352 4282777413 4283629394 4133486431 2422472547 160417763 16777215 16777215 16777215 16777215 16777215 16777215 1593774888 3892256563 3483734080 3963682109 4282777413 4283563857 3915905900 3816339156 3866464511 1668517887 16777215 16777215 16777215 704196930 3271492893 4294906665 4294909748 4294913088 4143399757 3482178394 3546861469 4234117372 4285237503 4286026495 4286881023 3448151551 544905471 16777215 2212050759 3705883738 3892062268 4294909748 4261359168 3506413903 4043306825 3959223899 3718624710 4285237503 4286026495 3933375999 3813831421 1295737599 16777215 2261264440 4291180100 4225057616 3505218398 3640584759 4294965305 4294965317 4294965585 4294965598 3673156994 3613359861 4248921854 4282673663 1329686527 16777215 2327257906 4289868607 4290721090 3821495878 4041136203 3623152977 4294965316 4261411153 3623876694 4110415943 4015421164 4283133695 4283988479 1397584383 16777215 2255301983 4187107390 4289344061 3887095105 4291281462 4292070714 4007252563 3942249295 4294965308 4294965575 4050224622 4284448511 4068575729 1386704574 16777215 2467771800 4146608763 3898423902 3969339963 4289900083 4290820917 4274767168 4294965068 4294965582 4294965594 4051670252 3704655548 4194271886 1526686578 16777215 2567710594 4279970659 4280431990 4180689000 4269180974 4289439538 4290491968 4294965343 4294965602 4173456753 4058746767 4294936466 4294939806 1593798010 67108864 2919241572 4278982722 4279641432 4280168537 4280713254 4282219052 4288322877 4292864882 4286898294 4286775170 4276918936 4294941604 4294944944 1694069631 83886080 1879052875 4177530951 4278653495 4279377983 4279984923 4280448802 4282093368 4287035781 4287299466 4288151447 4277119914 4294946743 3824456348 669148016 16777216 150994944 587202568 3288339543 4227928107 4279059213 4279654422 4281433136 4288216727 4288610206 4289462187 4109085865 2195417203 150994944 16777216 16777215 16777215 33554432 234881024 1207970826 3858781696 4278664199 4280771878 4289396393 4255841706 3111708280 407587627 33554432 16777215 16777215 16777215 16777215 16777215 16777215 67108864 352321536 2046839040 4028261914 3734040464 1028699728 67108864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 117440512 251658240 117440512 16777216 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloCollapseIcon "Private - Generated method" ^ icons at: #'haloCollapse' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloCollapseIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloCollapseIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloCollapse.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAQAQMAAAAVsXwDAAAABlBMVEX///8AAABVwtN+AAAA HklEQVR4XmNABnIMDPUMDIkNDAcboegxI0jEBqEEAJsXBuQ1QnVfAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDebugIcon "Private - Generated method" ^ icons at: #'haloDebug' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloDebugIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDebugIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloDebug.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA KklEQVR4XmOAA2YGBsYGBoYDDAIHGCQOMPAfYGB/wMBQwMBgwcAgAVcFAILSBWOb9kW7AAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDismissIcon "Private - Generated method" ^ icons at: #'haloDismiss' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloDismissIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDismissIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloDismiss.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA HklEQVR4XmNABjwGDHwFDOwPGJgPgBCQAeQCBZEAAHDUBMlabZn2AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDragIcon "Private - Generated method" ^ icons at: #'haloDrag' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloDragIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDragIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloDrag.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA HklEQVR4XmOAAxkLBgEOBvEXDCwKCATkAgWBUjAAAFCjA2d9sn1WAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDupIcon "Private - Generated method" ^ icons at: #'haloDup' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloDupIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloDupIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloDup.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA IUlEQVR4XmNABvINDAJA9INBoINBkINBnoOBEYh+ICsBAGU3BBJiY6CZAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloFontEmphIcon "Private - Generated method" ^ icons at: #'haloFontEmph' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloFontEmphIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! haloFontEmphIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloFontEmph.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA IklEQVR4XmNABvJ7GOQXMEgoMEg4MMhVMMg5MEg0QBEMAABvFwTnHxf6BAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloFontSizeIcon "Private - Generated method" ^ icons at: #'haloFontSize' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloFontSizeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloFontSizeIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloFontSize.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA IElEQVR4XmNAgA8MDA1QxNfAwPGAgaOBgacBRAIRDAAAkngGC2jZE2AAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloFontStyleIcon "Private - Generated method" ^ icons at: #'haloFontStyle' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloFontStyleIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloFontStyleIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloFontStyle.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA IElEQVR4XmNABvIVDJwODBwODFwODHwFIJIDjGQc4EoASL8DJ688wKQAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloGrabIcon "Private - Generated method" ^ icons at: #'haloGrab' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloGrabIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloGrabIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloGrab.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA KklEQVR4XmMAAsYGEGJyYGBRYOAQYBDgYFB/wiCiwcBjABIBIvYHDDAAAG8cBEtTRUljAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! haloHelpIcon "Private - Generated method" ^ icons at: #'haloHelp' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloHelpIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloHelpIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloHelp.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA JElEQVR4XmOAAOYDDOwPGHgMQIgBiBIYGA4wMDaAEBDAGQwMAIjBBXexsDsxAAAAAElFTkSu QmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! haloMenuIcon "Private - Generated method" ^ icons at: #'haloMenu' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloMenuIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloMenuIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloMenu.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA E0lEQVR4XmOAA/4PUMQhgE4iAQClMwZDP3yc0QAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloPaintIcon "Private - Generated method" ^ icons at: #'haloPaint' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloPaintIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloPaintIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloPaint.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA KUlEQVR4XmOAAwkGBjkGBu4GBp4DDCwJDGwGDMwSDIwdDAw3GBgK4KoAV3UEFJk+w6QAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloRecolorIcon "Private - Generated method" ^ icons at: #'haloRecolor' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloRecolorIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloRecolorIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloRecolor.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA KElEQVR4XmNAAAEGhgoG5g8MjB8YmBIYWBIYOBYwCDIwCDEwyCAUAQBsPgQaQ/Ai2wAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloRotIcon "Private - Generated method" ^ icons at: #'haloRot' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloRotIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloRotIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloRot.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA I0lEQVR4XmOAAMYGBiYwg/0BA4sGg4oKCIkogLgg4ABSAAYAW2gEA7XBkhoAAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloScaleIcon "Private - Generated method" ^ icons at: #'haloScale' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloScaleIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloScaleIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloScale.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA GklEQVR4XmNABvwXGDgCEAjIZRBg4P+ArAQAYQsELjspgUgAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloViewIcon "Private - Generated method" ^ icons at: #'haloView' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self haloViewIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! haloViewIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/haloView.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEX///8AAABVwtN+AAAA IElEQVR4XmNABuwPGGR+MOh+YfD/xKD+hEH6BkgEFQAAt5IHQ9vmDjIAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:46'! haltIcon ^ icons at: #'haltIcon' ifAbsentPut:[ self haltIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! haltIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 437918234 437918234 437918234 437654804 319885069 26 437590295 404100630 100859930 437524241 269290764 100860442 437327375 235736076 67305498 437261581 218893324 67305754 437130258 303174162 84082970 436931081 134678279 196890 437918234 437918234 196890 454761243 454761242 196890 454761243 454761242 196634 454761243 454761242 26) offset: 0@0) colorsFromArray: #(#(0.349 0.212 0.098) #(0.329 0.2 0.094) #(0.376 0.232 0.109) #(0.694 0.462 0.271) #(0.608 0.271 0.204) #(0.545 0.185 0.113) #(0.784 0.322 0.294) #(0.721 0.023 0.023) #(0.788 0.055 0.055) #(0.848 0.106 0.106) #(0.875 0.137 0.137) #(0.914 0.208 0.208) #(0.953 0.298 0.298) #(0.953 0.318 0.318) #(0.953 0.333 0.333) #(0.953 0.349 0.349) #(0.953 0.365 0.365) #(0.953 0.388 0.388) #(0.922 0.427 0.427) #(0.953 0.482 0.482) #(0.949 0.542 0.538) #(0.957 0.592 0.592) #(0.953 0.624 0.62) #(0.984 0.879 0.879) #(0.988 0.898 0.898) #(0.992 0.918 0.918) #(1.0 1.0 1.0) #( )))! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! helpIcon "Private - Generated method" ^ icons at: #'help' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self helpIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! helpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! homeIcon "Private - Generated method" ^ icons at: #'home' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self homeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! homeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! iconNamed: aSymbol ^ self iconNamed: aSymbol ifNone: [self blankIcon]! ! !ThemeIcons methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 10:57'! iconNamed: aSymbol ifNone: aBlock ^ (self respondsTo: aSymbol) ifFalse: [aBlock value] ifTrue: [self perform: aSymbol]! ! !ThemeIcons methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/10/2013 09:50'! iconSelectors ^ self class allSelectors select: [ :each | '*Icon' match: each asString ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! imageIcon "Private - Generated method" ^ icons at: #'image' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self imageIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! imageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALqSURBVDjLjVPbS9NRHN9T/0BW FBQUVIQKXigCpVIyygcDJUrnZdNEc5hlmZc0TdSF0bxszs3LvM3pXE6Xa3NL0TJTl7pcTY1E c5rX/WxqCrHhp7NBPaRGD5+Xw/lczud8vzQAtJ0wWhLp+4kbUThSFGrQFwTrB59dE+ryA/3+ vreNOMaPOmLkMeUT4mTMaoph1klh7pPApOLAUH4LPTn+X7qzLwXsKDDGj0wy8hibM+oCrI9p YTWGA0ZnWEd8sWZQYvXDC5g0XAzyo6BJP5f/R2C89OYeErlquiUPP9vogNgF1iYfbH10B0zx RMQFC4oszMsz8F3XBOqdBKqUs7a2B6fdHAIkMnu6le1w3WrwBLrjHSKWrhhYh72w2kVHjTII ae3eKFJexkp/I0YlKWhJdKsgZIanoTjMtlHPxSY9BD/YgbA2eGPteRjmWzOJazrmZKl4rL4A QT8TD4nIfPMjzKgKIUtwNtJIyxXftISclICN3GxYfHyw3FEEy1ALLIPNsOhkWGzLw5umCHCU flBLr2O29i4WXgnQwDpB0YY5NyapASmoxlxQrGAsFrAIWQ6D6Da0GecxXBaLFfLmuHI+Tgrk CBCIYKqIwVKHEHWxxzZp758GbTrc9AqYu4WYb8kkRcnsLcPejzL5DKi3dfAQSEFX9RKRZkzx QklKIaqjD4PW9+QqVy+IxmdpOkwvOaB6xVjpa8QQOSMtY4DHAPW6GuLSVFwprUJxSQYWlRyM S9JQGXlw3PELZDB8OzN9c0hkdXua1/pYfTKonloHkeoWYVachCkuHZNFwZhrTMeCmov2rIso Y+wL2TaJJLKr4r6HzUyIpso4R9yp4mB8LWFgScPHtJyNjhx/CCOcCnccZTua77jKRkiJy51l mKlJxJK2lJBLoOMxiet+myDcKWXXXbBDGn/KTcI6brO7TUgzMcBl4Pk9d3tkhSB8r+s/l+k3 6mKOJpKW10VRh/TlzAOFJLLnTvd2Ffhf/AKfTM1hskDhXAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! infoIcon "Private - Generated method" ^icons at: #infoIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self infoIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! infoIconContents "Private - Method generated with the content of the file icons\base\info.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAuwSURBVGiBtZl7cFTXfcc/5660D1YP9ECykIRMgoQtwOZlHqaeOKYTSDxOGtcwnqStTcDj Gsdx3IS0k6Z0JjN1GscOdqGtmweOXXucmZIGQ2yTGMcFBwyYhw3ijUAPjJ4rCe3z3nvuOf1j 70oraSWtRLIzZ/aeK83ez/d3fq9zrtBacyMfsb73lrmVxoY8P7PyfSKY5yMv4CXPACNuq0gk oaPhhIpEE7rtUqf9UtRUh/UvKm/soenPn4yA0if7l95cKp6oKRb1K+tzZ6y9w1tSmieG/I8G 0u9EEppdJxLhN47HW5tD8uK1Xrm9Zcv0XTeGP0EBwY3h+vnV4oWvLstd9NCd3qKgT9DZL2lo TdDUZdETkYQiklBYYktN0GdQEBAUBDxUl3hZMivIrAo/ltTsOh6Pb3sn3HClS3635fnKvX9S AeKRcNniGuM/7rs9Z8V3Vntvsh3NgfMxTrUkaOuzkI5GKo10VPJ6YKih10ozdYqHpbV5PLCs mOpSH9v3hXu37wsfO9lqfiPys5ln/+gCKjdFli2aYbz88vpAXdALBy7E2Hc2SsxUg4BZwqfm SikMAfctLmL9ynLy/B6++Wp3828/jmxu3DLzlT+agFs3Rx/5/BzP5mfX+qsutJvsPhamN+rg OBp7CNQY8MPEKaXQWg8MXw5sXD2dtSum8Z97+7q27ul+7exztd/SWqtsBOSM9ocF34/+63dW eR9ZtyK3eP+5GL9viGA5OgP80FE4xeDmUj9CQGOHyZXOxKjwSmtipuJHO1s40xrhuw/cPG1O lffRJ4wLnxJTa9dw/ZKtx3GRjCtQvzm64duf8/7wb5bnFL9xLMLJlvgAxEj4Qes+eGcR9y4s xGMM5p/3TvfzL7/6hITljIDXaYKU1sypmsKW9XVc6rDNdVsvvnpu6/wnAHOs1TCG36jcFFm6 ao7nn7/2Z7kj4KVKwjvu3EmDv7s+jy8unjoEHuCzcwrYuKp8XHitFKeawzz+X2eZX+P3fetL lX9Z89CeJ4GgEMKTlQDxSLh00QzjlefW+qvePx8bAW8PuFASPjWXjmJ5Xd6oy7xyXsG48Kn5 mdYI//TaRTasLJ163123PFV4zw8/B+QJITK6+xABS2caW19aF6i72G7x7qnIYBAq5Vp8JLzt KByl8eWKTL8PgC/XQDA+fGr+1tFOfva7Vn78UFXZrYtWfh+4abSVGBCQ/3i47gvzcj5TEIBd x/qxR0mPKbdJh7cdzcdNsVEFnLgcRars4FPzF3ZfoaUzwhP3Vny6bPWP1wFlQEAIMcToA5P5 1ca/bVrlrTh4IUZf1Bk/tyuNo/SAmFf2d3P2k/gI+I7rNs/sbJ0QvNIay1Y8/0YT984P+mpv W/5VcgI1QAngFUIMLLfQWlPw9fD8H9zve/fhFTnFz/2mm6ilxoUfXqhsR6OV5p55Bcye7ifX I2hsT/DmsRDRhBwaxOOJSbv388fr6IlqtfHp/3297a2ntgGXgV6ttQ1uHagtE0/+1fLc4kMX o2PDq9HhHSf58D0nenn7eGbYicIrrfn53mv84CvVRnlN/bI2+DUQBhJCCEdrrQyA6UXitsKA 4FRrYmz4DC1COvxYsEMAs4TXWnPo/HWiCZtZlfklBEqr3IAuSBk/R2zom/3sGn91b9ShNWRN CF6mwc+tDvDZuQUk62Ly4WjQaM60RvnN0e4RcOPBa6UwHc0H565z/5LCgt/d9tfL+w9v6QC6 gX4hhJ0zu9xY9+AS77SG1viE4WWa5WsrfKy9szRjFtr9YRe7j3SOCzva/P1z/XxzdYlRUbf0 9v7D7AOKgQ4gZhQERG1lkUFTlzVp+KQlM6dQpRTSticNnyxuMZQjKQj6pwBBoAjIB3KNAj/5 AKGwvAF4TXIPNhLeNE2ktAddZoLwWilCYRspJX5fjg/wuTFQCHhz8v3kAXSH5aThM62A1hrL srAsC9uWI4J2ImKuxxQJy8HnzfECue4q5AM+Y4o3uQLd/fak4VMPTIc3TRPTNLEsCynlmIUr m4Du7DMpDQoPwel5gBcIAF5DCIQGrBuBd++lPinLW5aFaZrYtj0q/HDg0YZl2wiUQHgMN4X6 AK8RM3VYAPl+IwO8ngB8UkDK8ulDSjmh3J9pXhiAjuvSIXo1TrIFygVyjUhCRQAKp3gyFzE1 Mm9ndoOhlh8ybOuG4P25Ag8O0bhpo7VwBXgAj9Ef1+GkACMzvMquBZBSZrS+ZVlIW44UnyW8 0prCAEgpiSdMOy1PCEAY4YRq7YkqZpR605q1icFrpVCOk9H6pmlipwXxROG11lQXCxzHIRqL J9KzNKCMM9fsl3ceT/Qu+XRwEN6ZGLzWGuk4Ga1vmuakClm62y6oMrjUpXXnlY+b3GBTgARs Q7900/G3T5rNNdN8TCv0TApeuy6UyfrJNGpPGt4QmrnT4benzEj49P+cdQU4gA3YBkBztzxn Sc2y2rxJwQ+PgRR86tpOxUCWbpQ+Zk0T+D0OjW2RMLH2uCtAAiZgGQBNXfInOz6Mh7+8pBiP wcgqm0UPr5QzwvJD6sBEY8C9t+pWQVNI666rF1pc13Fc+OiAgM5tFe+9+F70ZHmhly8unjo0 Y4wnxr0n5RgxkF4HRoPNAD+7XDC3QvPKB1ZvzwfPH3HhLSACXAfMgT3x+WvWt/99bzj0tXvK CXhFRviR/U9aEI8RA7Y9Rgxk8HutFBrNmoUGp9twLp85fBo7aroCEi58/8AKAHRsqzz0y0PR D3NzPDy2qmKkdcaowsOz0IgYSHWjWcIrrbm7VlBV6PD6Eaun/8i2o2mBGwF63G855IjiRLO1 8fGXQ01r7pzGl+4ozry0o8SBcuSoMSDtDHVgDPi6MsHaBbDjIxFrOfqrgygp3cCNASGgC4jq 1J449Ulsn3Hl8KXEUz96s6/rH+6vYeGn8rI+jBorBuzhMTAGfEkQHrtLcOIq9u8PnmxInP/1 pbSs00dyJ9bjxsLIs9Gzz1TtfO1A+MW9p+OxZx+u5faaYFbp1BkrBiwra/gn7xb0xdGv7u9u 7n3/6T+48BbJ04gOoA2IaK2djAIAPnq6evPmHaGdx5qsxE+/Xs99d0wbdyVCUcW5NofzHZpL 3QaNIYPGkIemPi/d8dxx4WeXC7632kAqoV94J9bWsWfTW2nwERe+1XUhM8U65guOhf/Y/MzD dxWs/8bqouLt71zl+V2XsWw1pphsLD0829wz28PaBXCsFfna/s6m9rc3vYmTMNPg24GLQCPQ o91DrXEFAMz7+8tfWVEXeGbrwzdVdvSabHnjMruPtKMcdcPw9RUGDyw0qCpU7Dgh4u8e/Ohk z/4hbhMFOkmexjUCXVprM50vq5d81Y813F5TFnjxb/+8eN6DywuCDU19/GRPM/tO9yaPDcfp Z9LnHqGprzBYPSeHW8o1Jz/Rzi8Px0MtH+44EDu/MxWwKct3Ak3u6AISehhw1q9ZhRBGzYY/ rL15evH3/u4LJbWfucXnjcVNDl3o4/9O9XC6NUZHn0VP2EKlbYLyvFAUFNSUeFgww8PcCkGO kDR2af3fB+M9lxsOnOw7su0oyaBMZZt+kj7fTNLvezLBT0hASgT+ksCMNa8+WlFWtGZmuW/G lxfnly2q8eSgHWzbJmHZdPaZJEzJ1IDGwEFKiS0lZ64pvedUPHylLdzf1XLmSs8HLxxGxmwG W4QYyVTZDlwlmXGuA1Ym+AkLcEUIkqcCeRTOqsxb+OhfVM689fOFU3KK/V4jEPB6/AUBw+cR WnT3m3Y0nrBjMdPqj8bNzisfXYo2vH6GeGecwcbMImn1MMkM0+6OEMliJcfkmaiANCGpk4F8 kkd9JcBUoBBfUREe3xRi7ZLk3jX99Y1icEOSYLAx6yF55plqEyydxavWSQtwRQgGjzgCrpgC 9zvg3s9NE5Hq5VO+HmWwMYuSdCErVaSyYrgRAcOEDBx1pIGnRkpAyvKSZGOWch8bkNlY/E8i YMgPJsWkBBlp15BcgdSeVqXmowVoNp//B5V52MnTW/VPAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/9/2013 11:05'! initialize super initialize. self initializeIcons! ! !ThemeIcons methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/9/2013 11:06'! initializeIcons icons := IdentityDictionary new. self iconSelectors do: [:each | icons at: each put: (self perform: each) ]! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:47'! instVarsPressedIcon ^ icons at: #'instVarsPressedIcon' ifAbsentPut:[ self instVarsPressedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:47'! instVarsPressedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 14684133 14684133 167772160 1862599941 3255964178 3741911305 4161210119 4228055811 4227990018 4227990018 4228055811 4177921542 3708751631 2636391460 839387144 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 67108864 2147681027 4093969669 4179697953 4284308829 4287203721 4289177511 4289769648 4289769648 4289769648 4289769648 4289374890 4287795858 4284506208 4196606755 4010873105 1611270666 14684133 14684133 14684133 14684133 14684133 14684133 134217728 3188065798 4162723358 4284045657 4288848546 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290032820 4289243304 4213844522 3222409746 117440512 14684133 14684133 14684133 14684133 2986541827 4078968864 4284572001 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4291743438 4149367378 2987068171 16777216 14684133 14684133 1392640514 4077981969 4283914071 4288190616 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290230199 4292138196 4097259319 2047083524 14684133 14684133 3892708870 4282729797 4286151033 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291151301 4290493371 4060744202 150994944 738197504 4127853066 4283979864 4288387995 4289769648 4289769648 4289769648 4289769648 4289769648 4287664272 4279308561 4278519045 4278519045 4278584838 4285164138 4289769648 4289769648 4289769648 4289769648 4289769648 4290164406 4292335575 4030413627 1711276032 2147615234 4196935720 4284440415 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4278517760 4278648832 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291940817 4270952849 2970225162 3691645450 4282664004 4286085240 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291151301 4289703855 3776386839 4110681092 4283716692 4286940549 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4291480266 4094364427 4244767234 4284572001 4287532686 4289769648 4289769648 4289769648 4289769648 4289769648 4256149423 4181869122 4278190080 4289396736 4294180864 4278190080 4245819922 4222660784 4289769648 4289769648 4289769648 4289769648 4289769648 4290690750 4292138196 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4289396736 4294180864 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4282729797 4278190080 4278517760 4278648832 4278190080 4279440147 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287664272 4279308561 4278519045 4278519045 4278584838 4285164138 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4283979864 4287401100 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290756543 4292335575 4244898820 4244767234 4216805207 4186672011 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4190093247 4225226711 4228121604) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:48'! instVarsSelectedIcon ^ icons at: #'instVarsSelectedIcon' ifAbsentPut:[ self instVarsSelectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:48'! instVarsSelectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 14684133 14684133 572991271 2623035480 3445645408 3412814699 4237332624 4221147545 4120484249 4103707033 4187593113 4137458844 3030623139 3115035563 2393417896 434891755 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 223169869 2656655705 4099035730 4286611584 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4022386880 2661590180 177838489 14684133 14684133 14684133 14684133 14684133 234881024 3444526927 4284243036 4287927444 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4292138196 3568415153 341268311 14684133 14684133 14684133 16777216 2907787601 4283979864 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290559164 4292335575 3215830445 117440512 14684133 14684133 2069189973 4267202648 4285493103 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291414473 4292335575 2493291676 14684133 33554432 3763359824 4283979864 4288914339 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289967027 4292335575 3972384197 201326592 1195261502 4267202648 4285032552 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288980132 4281871147 4281344032 4281344032 4281409825 4287006342 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291677645 4292335575 1653509774 2723567190 4283979864 4286808963 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280551432 4290707456 4290707456 4284219649 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4292335575 3182144427 3696514132 4283979864 4288453788 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290098613 4292335575 3870799799 3813362507 4283979864 4289111718 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 3904617403 4233187665 4284045657 4289440683 4289769648 4289769648 4289769648 4289769648 4289769648 4272992432 4237069452 4281272842 4294901760 4294901760 4286185729 4250557018 4272992432 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292269782 4240095930 4249964881 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4256873146 4249899088 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4240161723 4216344656 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4206607291 4182724431 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4281272842 4294901760 4294901760 4286185729 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4279764486 4286513152 4286513152 4282188033 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289572269 4284506208 4283979864 4283979864 4283979864 4288387995 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4115483981 4216805207 4171934378 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172394929 4225226711 4105878202) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:48'! instVarsUnselectedIcon ^ icons at: #'instVarsUnselectedIcon' ifAbsentPut:[ self instVarsUnselectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:48'! instVarsUnselectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 14684133 14684133 572991271 2623035480 3445645408 3412814699 4237332624 4221147545 4120484249 4103707033 4187593113 4137458844 3030623139 3115035563 2393417896 434891755 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 223169869 2656655705 4099035730 4286611584 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4022386880 2661590180 177838489 14684133 14684133 14684133 14684133 14684133 234881024 3444526927 4284243036 4287927444 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4292138196 3568415153 341268311 14684133 14684133 14684133 16777216 2907787601 4283979864 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290559164 4292335575 3215830445 117440512 14684133 14684133 2069189973 4267202648 4285493103 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291414473 4292335575 2493291676 14684133 33554432 3763359824 4283979864 4288914339 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289967027 4292335575 3972384197 201326592 1195261502 4267202648 4285032552 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4288980132 4281479730 4280821800 4280821800 4280887593 4287006342 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291677645 4292335575 1653509774 2723567190 4283979864 4286808963 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4279637526 4284506208 4284506208 4281216558 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4292335575 3182144427 3696514132 4283979864 4288453788 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290098613 4292335575 3870799799 3813362507 4283979864 4289111718 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 3904617403 4233187665 4284045657 4289440683 4289769648 4289769648 4289769648 4289769648 4289769648 4272992432 4237069452 4280032284 4286611584 4286611584 4282269246 4250557018 4272992432 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292269782 4240095930 4249964881 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4256873146 4249899088 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4240161723 4216344656 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4206607291 4182724431 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4280032284 4286611584 4286611584 4282269246 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287401100 4279176975 4282400832 4282400832 4280229663 4284177243 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289572269 4284506208 4283979864 4283979864 4283979864 4288387995 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4115483981 4216805207 4171934378 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172394929 4225226711 4105878202) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! jumpIcon "Private - Generated method" ^ icons at: #'jump' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self jumpIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! jumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! lockIcon "Private - Generated method" ^icons at: #lockIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self lockIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! lockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:49'! magnitudeIcon ^ icons at: #'magnitudeIcon' ifAbsentPut:[ self magnitudeIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! magnitudeIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 874447653 738461995 85013556 875824136 573444634 471217204 875826957 607204404 875115572 875836464 489816628 875836468 875836468 50409268 875836468 875836468 268902708 875836468 875836418 101004340 875836468 875836448 167851060 873804852 875825163 204747815 874722356 875763995 321259818 335557684 875042605 102243847 930868 875836468 875836468 875836468) offset: 0@0) colorsFromArray: #(#(0.372 0.372 0.372) #(0.608 0.608 0.608) #(0.961 0.961 0.961) #(0.506 0.506 0.506) #(0.588 0.588 0.588) #(0.415 0.415 0.415) #(0.419 0.419 0.419) #(0.384 0.384 0.384) #(0.745 0.745 0.745) #(0.561 0.561 0.561) #(0.447 0.447 0.447) #(0.435 0.435 0.435) #(0.427 0.427 0.427) #(0.545 0.545 0.545) #(0.522 0.522 0.522) #(0.902 0.902 0.902) #(0.761 0.761 0.761) #(0.53 0.53 0.53) #(0.686 0.686 0.686) #(0.628 0.628 0.628) #(0.181 0.181 0.181) #(0.204 0.204 0.204) #(0.604 0.604 0.604) #(0.455 0.455 0.455) #(0.408 0.408 0.408) #(0.341 0.341 0.341) #(0.659 0.659 0.659) #(0.333 0.333 0.333) #(0.663 0.663 0.663) #(0.624 0.624 0.624) #(0.396 0.396 0.396) #(0.875 0.875 0.875) #(0.542 0.542 0.542) #(0.592 0.592 0.592) #(0.569 0.569 0.569) #(0.236 0.236 0.236) #(0.565 0.565 0.565) #(0.494 0.494 0.494) #(0.62 0.62 0.62) #(0.953 0.953 0.953) #(0.733 0.733 0.733) #(0.502 0.502 0.502) #(0.298 0.298 0.298) #(0.451 0.451 0.451) #(0.585 0.585 0.585) #(0.439 0.439 0.439) #(0.698 0.698 0.698) #(0.714 0.714 0.714) #(0.721 0.721 0.721) #(0.855 0.855 0.855) #(0.474 0.474 0.474) #(0.871 0.871 0.871) #( ) ))! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:49'! monticelloPackageIcon ^ icons at: #'monticelloPackageIcon' ifAbsentPut:[ self monticelloPackageIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! monticelloPackageIconContents ^(Form extent: 16@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 722736128 2235383040 3106942976 3394787328 301989888 16777215 16777215 100663296 2707053056 2689683712 3240305408 16777215 16777215 16777215 1985303808 3527491840 3207869440 3040228864 3577033984 4241082624 1496988160 16777215 673983488 3692698112 4156604416 3157866752 3023649024 16777215 16777215 16777215 1817071104 2200973312 16777215 2725146112 2859627008 3583086848 2675011840 959656704 3609206784 2486646528 4021597184 3257280000 924983808 16777215 16777215 16777215 16777215 33554432 16777215 3381233920 2169326848 2792320768 3464330496 3642827008 268435456 2943776256 3279912704 3408011776 16777215 16777215 16777215 16777215 16777215 16777215 706682624 3967646976 606019328 2186104064 4105285888 857809152 50331648 3667038720 2487304448 3207408896 16777215 16777215 16777215 16777215 16777215 16777215 2438749184 3094836992 16777215 3375049472 4088442880 503316480 975644416 4171539456 2350784000 2285780480 16777215 16777215 16777215 16777215 16777215 150994944 3715396608 1564491776 1598309376 3324191488 4189171968 1278094848 1984251136 3750793216 2721790720 1092558592 16777215 16777215 16777215 16777215 16777215 2270121728 3278136320 16777216 3593219072 1124599808 4120549888 637928960 2355060480 3246424064 3240634368 167772160 16777215 16777216 16777215 16777215 959919872 3747569408 858927616 1093611264 3023714816 1782529792 3598942976 33554432 2590862592 2910353408 3357614336 16777215 16777215 2065373952 16777215 1278818560 3612693760 1682787584 16777215 2605073920 1664694528 3026609664 2371245568 16777215 2506647552 2472895744 3324059904 33554432 16777215 2721264384 3694211328 3444132096 1296056320 16777215 16777215 1950499328 3693553408 3376562688 100663296 83886080 3259780096 3727634176 3927381760 3726120960 689576448 16777215 67108864 16777215 16777215 16777215 16777215 16777215 637534208 33554432 16777215 639047424 3056282368 67108864 538252544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:49'! morphIcon ^ icons at: #'morphIcon' ifAbsentPut:[ self morphIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:23'! morphIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 1578631802 292362797 539127618 1895825665 2117994270 1445606482 202325275 1997372285 33573212 859313989 1763509875 1213866361 1064308758 192424752 1645101626 793665883 476466020 85208644 1751792704 621947215 1414349622 527711064 676669009 1346794755 1617375851 1095982919 656635516 1819423020 354700362 1695037706 154613091 420699479 75263577 2139062143 2139062143 2139062143) offset: 0@0) colorsFromArray: #(#(0.557 0.714 0.898) #(0.526 0.686 0.887) #(0.557 0.706 0.887) #(0.494 0.604 0.796) #(0.494 0.6 0.792) #(0.585 0.811 1.0) #(0.879 0.93 0.883) #(0.514 0.671 0.867) #(0.84 0.867 0.902) #(0.581 0.667 0.804) #(0.474 0.577 0.753) #(0.729 0.851 0.674) #(0.51 0.678 0.883) #(0.565 0.71 0.918) #(0.733 0.894 1.0) #(0.538 0.694 0.883) #(0.455 0.741 1.0) #(0.553 0.69 0.871) #(0.969 0.867 0.78) #(0.506 0.635 0.815) #(0.757 0.906 1.0) #(0.851 0.879 0.922) #(0.655 0.844 1.0) #(0.836 0.918 0.992) #(0.604 0.741 0.902) #(0.518 0.631 0.804) #(0.542 0.678 0.855) #(0.549 0.698 0.883) #(0.753 0.875 0.725) #(0.815 0.894 0.823) #(0.51 0.667 0.863) #(0.639 0.733 0.91) #(0.522 0.659 0.84) #(0.686 0.757 0.867) #(0.542 0.671 0.836) #(1.0 0.949 0.612) #(0.848 0.859 0.894) #(0.988 0.949 0.918) #(1.0 0.682 0.514) #(0.984 0.871 0.415) #(1.0 0.796 0.674) #(0.977 0.914 0.867) #(0.518 0.671 0.859) #(0.585 0.776 0.518) #(0.836 0.879 0.922) #(0.534 0.671 0.851) #(0.706 0.757 0.855) #(0.643 0.745 0.879) #(0.819 0.918 1.0) #(0.827 0.871 0.906) #(0.458 0.721 0.404) #(0.62 0.737 0.891) #(0.51 0.631 0.8) #(0.577 0.663 0.848) #(0.506 0.612 0.776) #(0.565 0.671 0.84) #(0.926 0.961 0.992) #(0.581 0.659 0.792) #(0.545 0.639 0.792) #(0.4 0.686 0.353) #(0.811 0.898 0.827) #(0.561 0.706 0.883) #(0.518 0.674 0.871) #(0.659 0.757 0.891) #(0.887 0.945 0.902) #(1.0 0.84 0.717) #(0.717 0.776 0.863) #(0.678 0.745 0.859) #(0.538 0.628 0.776) #(0.898 0.945 0.992) #(1.0 0.918 0.549) #(0.996 0.961 0.757) #(0.863 0.93 0.992) #(0.474 0.628 0.827) #(0.844 0.871 0.914) #(0.62 0.807 0.581) #(0.848 0.867 0.91) #(0.988 0.977 0.898) #(0.804 0.914 1.0) #(0.98 0.977 0.934) #(0.957 0.84 0.365) #(0.961 0.93 0.714) #(0.596 0.678 0.815) #(1.0 0.6 0.314) #(0.953 0.937 0.823) #(1.0 0.538 0.243) #(0.502 0.659 0.855) #(0.498 0.596 0.768) #(0.549 0.792 0.577) #(0.612 0.682 0.807) #(0.914 0.957 0.992) #(0.706 0.863 1.0) #(0.482 0.616 0.8) #(0.498 0.624 0.792) #(0.694 0.757 0.863) #(1.0 0.737 0.569) #(0.631 0.721 0.902) #(0.522 0.772 1.0) #(0.549 0.792 1.0) #(0.553 0.647 0.823) #(0.836 0.926 1.0) #(0.84 0.863 0.891) #(0.423 0.717 0.423) #(0.788 0.898 0.733) #(0.612 0.729 0.887) #(0.918 0.953 0.922) #(0.934 0.965 0.934) #(0.616 0.831 0.628) #(0.53 0.643 0.807) #(0.545 0.686 0.863) #(0.502 0.596 0.753) #(0.616 0.702 0.823) #(0.772 0.898 1.0) #(0.581 0.686 0.844) #(0.851 0.891 0.934) #(0.937 0.965 0.992) #(0.729 0.859 0.686) #(0.671 0.745 0.879) #(0.682 0.749 0.879) #(0.545 0.698 0.898) #(0.388 0.682 0.341) #(0.534 0.639 0.8) #(0.561 0.702 0.883) #(0.553 0.706 0.91) #(0.486 0.588 0.776) #(0.542 0.698 0.887) #(0.522 0.678 0.875) #( ) ))! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 12:40'! nautilusIcon ^ icons at: #'nautilusIcon' ifAbsentPut:[ self nautilusIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 12:39'! nautilusIconContents | bitmap | bitmap := (Bitmap new: 256) copyFromByteArray: #[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 255 249 235 15 254 248 233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 183 102 33 13 162 147 126 14 199 176 153 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 143 187 142 101 94 197 140 89 0 0 0 0 208 181 135 93 108 190 134 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144 159 121 84 174 168 127 90 119 181 140 104 194 182 128 81 24 207 148 99 4 252 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 159 170 119 70 255 200 124 58 253 189 122 63 60 148 118 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 199 157 91 59 255 222 129 64 255 201 118 48 178 152 100 49 73 138 112 54 106 168 135 62 167 206 169 100 193 191 158 105 115 172 143 97 0 0 0 0 5 155 136 98 55 204 190 157 10 236 223 187 0 0 0 0 21 105 87 68 91 162 123 78 240 187 126 60 255 212 131 43 253 227 148 48 255 218 157 63 255 233 175 78 255 235 176 64 255 224 167 68 255 232 171 81 255 216 168 74 109 181 145 85 21 154 136 98 245 194 174 137 33 211 209 190 81 172 145 107 241 194 152 81 255 207 158 80 255 243 176 64 254 246 176 67 254 208 141 49 255 221 156 81 255 200 123 54 255 209 137 56 255 187 124 56 254 204 128 48 255 248 183 62 230 171 125 65 0 0 0 0 198 196 161 122 135 198 161 130 238 191 139 90 255 227 158 63 254 234 165 51 254 244 172 65 255 227 160 65 254 170 105 26 255 209 144 65 254 185 117 40 253 213 143 55 252 221 143 58 248 238 144 58 255 223 134 39 250 163 97 51 20 231 255 255 185 186 137 106 255 181 122 80 255 162 85 36 255 221 124 53 255 234 154 50 255 234 170 61 255 232 168 69 255 220 149 53 255 238 159 56 255 241 163 59 255 231 158 59 255 226 151 64 255 198 120 54 215 166 91 43 57 133 68 38 13 210 220 210 83 199 158 129 209 203 160 125 129 184 139 102 235 161 83 47 255 190 102 41 255 203 112 40 255 208 117 47 253 213 121 50 251 208 122 55 222 185 106 44 175 159 100 50 139 141 103 65 53 156 105 65 9 99 69 79 0 0 0 0 0 0 0 0 0 0 0 0 143 155 129 114 0 0 0 0 10 138 135 170 65 108 49 22 87 138 77 48 93 129 70 41 45 93 34 6 26 68 32 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 197 179 174 0 0 0 0 93 197 180 176 4 202 182 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 180 88 18 2 146 92 49 1 128 100 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]. ^ Form extent: 16@16 depth: 32 bits: bitmap! ! !ThemeIcons methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! normalSizeNames "Answer the names of the normal icons" ^#('error' 'info' 'lock' 'question' 'warning' 'upArrow' 'downArrow' 'backspaceArrow')! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! objectsIcon "Private - Generated method" ^ icons at: #'objects' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self objectsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! objectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! openIcon "Private - Generated method" ^ icons at: #'open' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self openIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! openIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:49'! packageIcon ^ icons at: #'packageIcon' ifAbsentPut:[ self packageIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:24'! packageIconContents ^ (Form extent: 15@16 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 55924053 75530368 50331647 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 138428480 1750488662 3547295599 2256173690 261724569 55924053 16777215 16777215 16777215 16777215 16777215 16777215 33554432 103492395 1178944837 3361890914 4286085240 4286545791 4286808963 3900275065 1819834488 162179754 75530368 16777215 16777215 16777215 67108864 741618740 2874693720 4235029869 3514399097 3783229311 4286677377 4119234182 3499200913 4203580813 3683026566 1736672131 245671076 41975936 50331648 1902206815 3948896095 4285098345 4285690482 4286019447 4185685116 3213527690 3817441673 4287269514 4287730065 4288848546 4289638062 3180762774 212511402 16777215 2523490665 4084692598 3631641716 4235161455 3497621881 3783229311 4286677377 4119299975 3482555283 4203778192 3919684001 4004358826 3786387375 284159983 16777215 2556847718 4285164138 4285558896 3665656699 3732371319 4286151033 4286545791 4286808963 3968502410 3515912079 4287532686 4288585374 3701974951 234881023 16777215 2639878489 4284506208 4285032552 3715067759 4285822068 3850272125 3883761021 3632563075 4202527868 3582034305 4286743170 4287269514 3583218579 150994943 16777215 2672643405 3863957327 4200291163 3814941539 4285229931 4285558896 4185421687 4285493103 4285822068 3564928124 4286414205 3498542983 3196421509 83886079 16777215 2822651454 4282203453 4182395466 4081929549 4284374622 4284966759 4268715630 4285229931 4285493103 3698027371 3698948473 4286282619 3480976251 83886079 16777216 3039636781 4280756007 4281742902 4265360444 4283058762 4283519313 4284966502 4284243036 4266939476 4233977181 4285690482 4285953654 3480647286 67108863 117440512 2518687776 4246148887 4280098077 4280821800 4282203453 4282992969 4284374365 4284637794 4284900966 4267071062 4285361517 4235095662 2305452650 41975936 16777216 134217728 873731092 3659670050 4245885715 4280690214 4281611316 4283913814 4284835173 4284835173 4065744470 3294255706 844255826 55924053 16777215 16777215 16777215 33554432 218103808 1461131031 3978305568 4280098077 4249635659 4284835173 3730463322 1246514252 100663296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 50331648 285212672 2115903006 3645129539 1833979984 150994944 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 83886080 134217728 33554432 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! paintIcon "Private - Generated method" ^ icons at: #'paint' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self paintIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! paintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! paintTabIcon "Private - Generated method" ^ icons at: #'paintTab' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self paintTabIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! paintTabIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/paintTab.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAdCAYAAACwuqxLAAAABHNCSVQFBQUBSsjp7wAAATJJ REFUeF7FliEUgjAQhheJRiKRuHjRSCQSjUTiopFoJBqNRqLRaDQajUbbucnDMZw6ufO59/43 Bsf/bTc2Jj6Vei7QJ0Epr0xZID6jTSpwlwhstWogQHzmW216iaz2MWEkPkA7AhxmE9PVB5YA mIHCHEpcQoSN7EyN+UlrLQmABWQYyetDIBtrAoQJ74MyqRxAIvfI8kX1QQpijOXxASigoAPG gSbvZh4qSHnWwjC40poXnSquxTY0F8oqqsIgwYA8dwFGi4wRoLSS0pqbaxWYprewcZDpdUjP g0HjhyudqqbsahaIs2vWejs4W60VA2R4Y7d1AabNCmgbF2DaFMAd8jQHepFtVFeH9PDrUVC+ ++DJpvyD/wcIzucXgElHlsm9p6Zq0h+ObT/iBv3sOOl77wZmYEC6UBNb4AAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! paintingIcon "Private - Generated method" ^ icons at: #'painting' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self paintingIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! paintingIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/painting.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAMAAABVlYYBAAADAFBMVEX///+XAJYymJiXlgAQ EBAhISEAAFPK/8oAMZcAMmUAMssAMfwAMTFlMQBlZAAAZJcAl5cAy5gA/JcxlwBklwDLAJf8 AJdkl5eYmJjLmAD8lwCXADGXAGSXAMuXAPwxl8oymP+YlzKXl2SXMQCXZACYMpeXZJcxypcy /5eYywCX/AAyZZhkZJfKl5f/mJgxMAAyZQAxADAxAGUxAJcyMphkAJdkMpgAZTEAlzEAZWUA l2QAyzIA/DEAy2QA/GTKypfL/5j/ypj//ZgxAMsxAPxkAMtkAPzLADHLAGT8ADH8AGQymDIy mGRlmDJkl2TLAMrKAPz8AMr8APxlmMtkl/+Xl8qYmP/KlzHLl2X/lzL/l2QyMjIxZDExMWQx ZGRlADFkMTFlAGRkMWTLMQDLZAD8MQD8ZAAAZcsAmMsAZPwAl/wAy8sA/MoAyvwA/PwyywAx /ABlywBk/ADKMZfLZZf/Mpf/ZJdly5dk/5eXypeY/5jLygDK/AD8ygD8/ACYMjKYZDKYMmSX ZGSXMcqXZcuXMv+XZP8xysoy/8syy/8y//+XyjGY/zKYy2WX/2TKl8rLy8vKmP/Kyv//mMr/ ysr/mP3/yv0xMcoxZMoyMv8yZf9kMcplZctkMv9kZP/KMTHKZDHKMWTLZWX/MjL/ZDL/MmT/ ZGQxyjEy/zIxymQy/2VkyjFl/zJly2Vk/2TKMcrLZcrKMv/KZP//Msr/ZMr/Mv3/ZP1ly8tk /8pkyv9k//+XysqY/8qYy/+Y///KyjHL/zLLymXK/2T/yzL//TL/ymT//WRDQ0NkZDHc3NzK /////crt7e0PAACXAAAADwBlAAAAAJcAAGV2dnaHh4eqqqq6urpVVVVlZWUAAA8AACFDAABT AAAAAMsAANsAAO0AAPwAADEAAEMAhwAAlwAAqgAAuQAAywAA2wAA7QAA/ADLAADbAADtAAD8 AAAAQwAAUwAAZQAAdQAhAAAxAACqAAC5AAAAIQAAMQB1AACHAAAAAKoAALkAAHUAAIcAAAA+ ZgN8AAABAHRSTlP///////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////fvXo qAAAAEFJREFUeF6t0LsNADAIQ0HYf1GPkZ8UKeDXxRW6BnBkmsSdNNNUTuVUTgserbi14VL1 fFG/DS6DL+BjaAeahNafDE0vk9OGbfiMAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! pharoIcon "Private - Generated method" ^icons at: #pharoIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self pharoIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! pharoIconContents "Private - Method generated with the content of the file icons\base\pharo.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFP0lEQVR42sWXe0xTVxzHz729 LaUF+rKUotBLJYBaFDcjKoONgUhmRMFlcwbZxhL3MGZzPjIXdUZmlrkZdZPF6VyiqTgnU5tl wajI3NQJMpkacQXkUSgptPbF7eM+2rtz2fhnibO32Oz7173n3PM7n/N7nHMuAniooKBAMDw8 zPb19YW593Xr1s2sr6/vrK2tTb5x4wbV2dnpLisrU6Iomnj+/PlB+En4cTYRPgCc8vPzpQkJ CcLm5mb3Z3v2zP7gozrL1s3vG3bX7boOgababDZBY2OjJZLJowL4xxOKxUvKs093WHeyUlVZ 1jS1j7T++Ymn967x+rVr3MrZSG1FBYAgKLJ0acnOHS/mbtcpUYSkQuDneza64Rb1/Ax9uqO/ v38MwzCio6MjCMNBd3V1PdIbjwXAcRzLyMgQp6WliUOhkEShUIhlMplgrr+7ulzq3oo9XY6A AAEC99vJZ039BrPZPEBRFMONZaF4ecBgMCB+vx+laRqNi4tDw+GwIDk5GXG73WGLxULDvjBc ERCxrODgVOXHReVLNvucbiQ+NRX4erroo/LUZQ1NTRfdHk9E8Y86BKuFwjUvzZ59bKy3F0nA cUB7vQCTSMDo0NBIW1XVYr/PR5hMpv5AIMDPA5Gqurh4TmF7e4uICSnk2VnA090NEvV6cKar 68AJktyk0WjQwsJCLUEQAVgtdujRR4LwBijJm6uVDFgWPYeg9TKRSBOvUgH/8PC4IbMs8XiH zdbwGxm87GNZWi6XY7m5uTIYNurKlStjkwZIwURJW7S4RQBAEkwxJF4uA4zPD0LBIDTEAhQT sIAJscecI6tbg/5TE+PgvoHq9XoxFNPW1kZNygOzpLLSSo1ufxKGzZKqlMA3agcoZwUmPEx6 +jv74NpbY+6T0Ofkv8dCEARWFEwXCdva2spEBcDJIFc/U56aadSoVLqgxwuQ8Wpj2dtOm/G0 tacWvjD/NV4qlSI+n4+NGiAtaUp6Vda8a8qkxGm0P8COEO7blwY6t/eNOS/AboqPLd4ACFRN /rJPVZLETTRgrJfvtdZ1jgwYYQACKTK1yuaxO2IKwKmmtOasxdbvfODq3TloHbLCpnCyIkVT mlfy/Q9XGytImvTEFCBvZsG75r5bh9VqNeNwuESGrPlrs3HDh2IsTnW2+fgch8t2N6YAGCaM 1+EZqEqd8zaebtgkEsZpkHFjbPic6cs879jD2ALoshfMe6qgskEgEGYiXFrAKmDooOeP6+e2 9nbfPAIeUwWTAlBopysXrNhgFgpFU7hTP0QHvQN3Wo52d1w8QAaIIfhJiI893gB4fsWK7KJV Z9gwQ1ram77ubftxLxUghicmTp9TkmO5c9kMIjiKowKYUblxo0Spffn+uX1v+h9auVj/vaOh KJKWv7xCPX3u+t+NO8pATK5k8CaUvvj1V4ZajE1hmnRNNEtSpmv1L7y1S4Hn1pJeu6Vtb00m 9EBEoeDtAVQkFoapIM3BSPFcnba4eoM8a/4bKCqQcldBlqaIm9tK1RAgGBMATtKchXjK8ve2 SablrIEGRNxJyB1GXDUQ3e0tPQfXloMIt2TeAKnVde/IF1Z+jqCCeFiA421cvrEM5XM2Hzs0 +tNXu1k66IrUHi+AhFlFOt36Iw/glIKJNoZw2V2/nvrW2WI8xHgd3JU8dmUoX7SyZGrN7kvc M2Uf7HFc+OYLd6vpBEsFPXwnjgpAU7X5VUXRqgOjpv11zl9OHgYhhgA8fkImD7Byy2uuq6dv UyN9d6Jd8aQAsCSVmPE6yfGUf0KKqgyfpP53gL8ACERIP0OXTQ4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02'! processBrowserIcon ^ icons at: #'processBrowserIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self processBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! processBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoTETo0n8IkZwAAAfBJREFUOMulkz1oFEEY hp/dmZ3dvcIUIhLRS2EMQtBIAgEhYGFzYBEkarQRUliJwUYRDy6FpLCyMYKVVoaTSIhYnEIq G0FEPUm0CYIH8c40CoJ3O38WMTEhJ0p84WW6Z57h+yYolYoPgHNsI977aUqlom+1mr7Zavq/ xTnnM52tt1QqerlGm7g7T7lS/aebRwuHuXCiBwAJEEWKcqWK6gAlY4gUZ44uQxAy+6YLnAc8 GIs2hnKlyvjpPgDCjWQVp0RpytmhOheHBxFKkiYJaS5FJSkil5AkCQDWmN8GaxEqRiQx/T17 CHMF+rsbqOgTjxcOILwDI8lCDYCxdqtBlChGBmvs29XBy6UGXflTiEiSJDFRohBxhIrVnw1O DtQIA4nIFeDbLEEwgpCCq8efs1DfjbMO6yxTbwOMbQO4PHqdgICPtRneL38lvxcO5XdypNMw 2DeO9wCeqfu32gNuz9xEKIGUEUIKPjfm6N0/ysPXNcz3O1hjscb+eoLdCnjyrpsoVahYEcUK IT9wsPMZvlkjDAKeLvXS/JEBi+0NYHXeFkfoHc45Lj3qwPkdaG3QVmNxqwYbAVpnjA0PcG/u 1Sbc4jzAi7abuPJlZbPBlfNDXBs7htYZWStDG43Wa+eGGk2jUV+HSWB6cvLG9n/j/+YncEMA U9mo9IEAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! publishIcon "Private - Generated method" ^ icons at: #'publish' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self publishIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! publishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! questionIcon "Private - Generated method" ^icons at: #questionIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self questionIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! questionIconContents "Private - Method generated with the content of the file icons\base\question.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAyGSURBVGiBtZp7cFzVfcc/9+5qtatdvWXJetgyjiUZY8BvbEMCjSk4PAKh2CFtCjU2MwEK blLcaZkJk5AZSkoaA3HqDKUmBgx04rTGQOMhgtQ2fr9AtmzLlm29bL21q33vfZzTP/auvCut pJXt3pkz9/7u7Fx9vr/zvb9z7jlSpJRczaGs9s6cXamu8TiZkZutuD3ZeFwOPCqoEV0Eg1EZ CkRFMBSVnc09+luhmDggf1t5dX80+e9fiYCStf5bppUoz1QXKbOWzcqaunKho7jEo6T8RgLJ d4JRyfZj0cCHRyPtrf3G2UteY1Pb+ortV4c/QQHupwKz5kxRXvurxVnzH1vqKHRnK/T4DU60 R2np1RgIGvQHDfoDBrohcWer5LkU8lw2phQ7WDTDzYxyJ5oh2X40Etnwx0DjhV7jn9peraz/ fxWgPBEoXVCt/tv9N9tv/Yfljsm6KdnTFOZ4W5ROn4ZhSgwhMUwRvx5qIvVaSApybNxS4+Hh xUVMKclm086Ad9NO/9GvWsPPhjbVnLzmAirXBRfPn6pu3rzaVet2wJ4zYXaeChGOicuAGcIn YiEEqgL3Lyhk9bIyPE4bf/duX+uOo96fXPhV3dtSSnFNBFz/QuiJb91ge+EXK51VZ7pifHQk gDdkYpoSPQVqDPhh4oQQSCmHWrYdnlpewcpbJ7Gx3tf3+h+63zv9y5nPAYbMwB6jCpj7Yujl Z5c5nlh1a1bRrtNhPj8RRDNlGvg02c4QXkiJtO7dO7+I5x+exv7mSOSZTe31DRu+8QiRnpiU 0pywgFkvhNY8d5fj548usRd9eCRIQ1tkCCIdvCkkNZOzKS/IotBtozjXTqHHhj9scmlA4+KA xvG2ME0Xw2nhE/ENVTmsX11Lc7ceW/X66fdPb5i/FoiM1RsjBFSuC96ycoF96/rvOqt+fzCQ Am8IgT7UC5LSXBuLa90srfVQ5LGN19vsbfLzxqddnLoYHgGfiOsqc9i8djbv7h7w/WzzwVfa 3rl3IxAC9HQi1BQ1TwRK5k9V3/7Xlc6q3U3hMeFNU/D08kncNy8/I3iApXV5/PaZWu6bVzhq T5xsD/LjLWdZs6yk4Nu337A2746X7gTyAIeiKMrwZ6YIuOU69VdvrXLVnu3S+Ox48LKPRdzH yfC6KTlwNpQR+PDjh/dNpmayI62NpBD8z+Ee3vy0nV8+VlU6a+FdPwFKAQ+QNVzEkIDcpwO1 99xovz3PBduP+NFHKY+meVnM3qbghOGllCB0nrmrYFQbSSl57aMLtPUEefbeiumly9c/CkwC 3IA9rYA5U9TX193tKN97JowvZI5f24XkXHeULp8OQJ/fYNepAFt29/FGfQ8fH/YSjo0s57qu o+s6lQUK2XZGfaE1XfDqhy3cMyfHWXvTkr/E7qoEigCnoihDnrUD5P1tYM4/P5S9UEjJzpOh jOAT8e/2DRCKmnx2wo+mC4S8XC43fd7F28/W4nHahrKvaRqapmEaOtOKFRovpbGRJWjH0T5W LCniuQcqKs81vvxY5ydrNwJRQFcURUgppQpQU6qs/f6SrKL9Z8OENDE6vBhpq4+PePm0YXAE vJSSSwMx9jX5h7KvadpQD2iahoIYFT4R/0f9JRZOs6mTq69fApQBxUAOYBuyUEWhclO+S+F4 e3Rs+DSDVqIyDYeXVpyc/QR4QsQlrzEmvJSS/U2DhKI6X6vwlOCaVAGUkFSVVGWNr+6OWtsU b8ikvV+bELwxDnyey8b8r+UOZT8Br2kajR1R+oJjw0shiOmCfacHeWhRfl7ezY8utXqgAHAC NrWuTF31yCLHpBPt0QnDG2PAg+TF703DYVeGsp/cA9uOxsaFT8S7T/u5qVJRy2sWzQPyLQFu wK7muZSaykKVll7tmsFLKVlzZzlLZ+aPyL6u63zRFOGrDjMj+PjgFkaYBrnubLcFno81Lqh5 TnIB+gPGNYNfUpfHmj+vSPF+IvutvTHe3B3JGF4KQX9AxzAMXNn2bMs6uZaAbHuuEw9AX8C4 OnjrXJafxc++dx2qwojs9/tjvPSxn1Asc3gpJYNhQVQzcTrsDsBhVSE34FBzHPEe6PPrVwdv 3fv7B6aQ77aPyH4spvHKJ166B80RA1e6RAwX0+OLUexWbLgrPJYIJ+BQFQVFAto1gK+tcPFn Nxam1P1E9v/r0CDHO/T0858xBCWapusoCAXFbrcGYAfgUMMxGVCAXKeaBl5mDC+lTIFPzn5r T5h3vgiMCz9WnO+C7kHDJNQRsQYxO2BXg1ERBMjPsaUfxETSg8aAF1JyU7U7bfYPNYeIGeOP uqPFziwFGyahSExHCsUagG2ATfVHZCAuQE0PL1IrzGjwUghK8x0ACCFSKs+ZrlhGPk8XCynJ d4FhGESiMZ3LhwIoaiAq2gdCgqkljqTJ2sThpZQkZurDpwwXerSMK85weCklU4oUTNMkFI5E kwRIQNhPXtI3bzsa/etlM92Fb9b3Dn28TBReSsmPtzTjygLTFJimgabrCNOkY0C/YngpJXOr VJp7pey58FVLAhwwAMMu35p8dMWvva2Pf72wcFK+jfY+84rghZQcbfZdkU3GglcVyewKeHd/ LBho/N0pC94EdMCwA7T2Gac1Q85ZXOOhtaf/iuClENhUeGBRCTNK7cRiUU62hdjREEITExOT 3GaUKjhtJuc6gwHCXWFLgA5ogGYHaOk13th6KHLvdxYV5W7d14+mD3vQePBS4nHa+PenZ1JV AKFQiHBYsqDKYOk0nRc/jhCMTrBnrHt3X2+npV/K3o4zbUnWiQFhQFMBejaU/+k3fwo1lOU7 +PaCgtSKMTwro5TCHz04jemljhGzzpIcgwdnj/MODH+e9Zu6MoXZ5ZK392negX2vHrSsoxFf ZgkBsaFv4qZL2nO/rg/0P/7NMlwOJS38CDFJMLfNzBsx60xc15Xo42Z6eCyRrJin0tiJef7k gUb0UMyyTgTwA4GhHgDo3lC5/4P9oUNZdhtP3l0+MjtjjMIgcWWJEeCJazupn4/jwQspuaNG oSrf5P2D2oD/4IbDlnU0IAgMWj2gp6wLHWvVnnp6c3/LiqWTeGBhUfquTfMemELS1O4fAZ6I L3rjC8KZwteWKqycC1u/VMJth3+/F2EYVvZDgBcYsK6NFAHRTVMvHGiO/vCVT3y9//hQNfOm ezKuQBt3XByR/USrb3ZkDF/shie/rnCsA/3zvQ0nok3/3ZxknUGgD/ABMSmlSBEAcOpfqrZt 2RP4TX1jJPyLv6nh5mp3RuV0z2k/P93aSZ9fG8r+YMjgP7+009DpyBh+7R0Kvgjy3V19rd7d L31hwUct3/cAvZaNdBhjeX3RC+3vvfzd4u/cVud0/vT9c2w70J1RT4CkMAekMOkLgTDTww6P 68oUfnCbgjeMfL0+3Nm+7amtmNGIBe8DOoDzQDvgk1KOLQBg3vMtrzz2jfzH1y4vLNr0xw5e 3X5+aP1nNDGZwA6vNt+ss7FyLhxpx9iyq6el6w/rPsGMRpMy3wW0AG1APxCVFvi4W0w3rjvz /aV1np9vWFVe0e2Nsf7D83x0sAthiquGn1Wu8vA8lap8wdZjSuSzvV82DOxKsU3Ask2b1fqA sEzaghpXgKIoSuXq/XOmVRZv/MGdxbMfWZLnPtHi440drexs9BKKGuPOZ5JjmyKZVa6y/AY7 M8skDRel+cGBSH/boa17wk3bkl/YAHG/d1it14JP2bHJbJcyvqRtr1712cppU8qf/9E9xTNu n5ntCEdi7D/j43+PD9DYHqbbpzEQ0BBJH0EeBxS6FaqLbcydamN2uYJdMTjXK+U7eyMD50/s afAd3HAYKROlMlFteoGLQKdlm4iM/yaVLRMBySJw5LqnrHhvTfnkSX8xvSx76oMLcictqLZl IU10XSeq6fT4YkRjBgUuiYqJYRjohsHJS0LuOB4JXOgM+HvbTl4Y2PfafoywboEn5jc+4rbp ss4+4p5Pu1c2oY1uS4QNyAZyyZte7pn/5P2V1836Vn6OvcDpUHJc2TZXnsvmsClC6RuMGaFI TAtHopo/GI31XDjWHDrxQSOR7gjxeU1idI0QL41e4j7vta4DgCbH2Ha9on81UBRFBbIAF/FF pgKrxVfMsgsLsTldhDsNS3DyeJM8n48RH1EDxDPttc5B4i/xuFutVyTAEpH4uM4ivkaTQ3y1 zG2dncSXPuyWCIX415TByMwHLSFhS5QxmmWumYA0QuyWGEdSy0oSgCUgYZ3ER0nMOieEyfGy fk0FDBOSaCqXlz4SceIQ6dpEoJOP/wO5FlMEYbMDfQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! radioButtonOffIcon "Private - Generated method" ^ icons at: #'radioButtonOff' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self radioButtonOffIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! radioButtonOffIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/radioButtonOff.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAgSURBVHheY5BvYFBwZHBQYmgQYWiQQEEOGgwKLgzyTQBytAZcv+h0 jwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! radioButtonOnIcon "Private - Generated method" ^ icons at: #'radioButtonOn' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self radioButtonOnIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! radioButtonOnIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/radioButtonOn.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAnSURBVHheY5BvYFBwZHBQYugXYZg/g2H+TCjql2Rw0GBQcGGQbwIA oQ8I+ivd3nEAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! radioButtonPressedIcon "Private - Generated method" ^ icons at: #'radioButtonPressed' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self radioButtonPressedIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! radioButtonPressedIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/radioButtonPressed.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMAQMAAABsu86kAAAABlBMVEUAAAAAAAClZ7nPAAAA AnRSTlMA/1uRIrUAAAAnSURBVHheY5BvYFBwZHBQYugXYZgwg2HCTCjql2Rw0GBQcGGQbwIA nLkIvsby5GsAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/9/2013 10:56'! readIconMethodsFromDirectory: dir (dir entries select: [ :each | each isFile and: [ (each extension = 'gif') or: [ each extension = 'png' ] ] ] ) do: [ :each | self storeIconMethodFor: each ]. ! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! recentMessagesIcon "Private - Generated method" ^ icons at: #'recentMessagesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self recentMessagesIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! recentMessagesIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMESURBVDjLpZNrSNNRGMb/ViR9 qw9FUSQFQX0IMshI9EMXJIIuZGFZGWZpqSHmxM25dNq8pk7LzTSdc1u6malo3vI6bHmZrmmp 0+mclrfNuTmvk3r6zw8rKfzSgQfec16e33vew3kJAMT/aN2msTDxjKzoaX1nOXXmczXd0lkR bmkRB0/W5ASXlr4KP7UhQCqJ5XTXUlfGVK2YnhiCyWSA0ajHt5FudLcUovq137w4NZDxT0BT IStNLefCoNNCpTXgbYMGnOKvSJd8gaBKja6BSWhUMlRmPwSPdT90HaBGEO8iL6dY9FMaSBXj eNeogXrMBL3JDJ1pHqpREwS1apQ0D6NfUQVhzI2F7Fh/Rxugjh9WOUgm+kZmIKkfhnUZjEYM fJ/AEhlbZf4JZFao0aLU4oMwBJkRNwU2QEP+44lxbQ+ENYPoJSsvrP6EeWEBGbk8TJGgueVl FNc0QDpgRFKBEj3tYmTT3TU2QD0/cMmg/4ZEkRJTixYYln9ghczQopgQvitDWCQTtbI2hIjd 8IDniFFNG3Lp1xZtgOosvyX99BCYPAVGzRYS8gNjxjk8e568ZpYquqFbBQJEp8Es94RH5mHk 0Nx/A4pTvIaHeqrAlijRPGjEONn02JwFQSJXBAmd8SjfCT65xxFRch2SjjRQii7DLXU3XJN2 2K0B8lhevCYxFTLlAOIlKujIBzNYyIqCkyjt4qC48+WasbCDDXYdBfxPiXgocsOJOPvVozF2 dkROXMCx/GiPxX55PkRVnUiQ9EOhmYUP2a/VnFIbhITqALAqfRFV7o3o937IlMbgdp4LDkUS K2t9ZDG9qW/ir6O3lYPGdjliea24lX0E4nY2RK3J4MsSkfsxnoT4gyuNhq/oPA4wiL69NGKb 7UdlRNxhZFGvmMu4nuiqZ+Eq9yAupO/DudRdcEnaDi+eMzjNUbgncIMDg1DuoRH2fw1TBsPb KS3UveDFk0taLuXiolXWmE25Kj4as2n2Lv8sHOiEnDRv/ec0biTyyrr99M3YSSO2/Hn+CweZ 2kRiltpxAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:50'! refreshIcon ^ icons at: #'refreshIcon' ifAbsentPut:[ self refreshIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:24'! refreshIconContents ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 895969127 526080859 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1884706390 4168710521 2288675434 271330348 0 0 0 0 0 0 0 0 0 828465505 2609087363 3615917702 4269439610 4285887861 4285624689 3899156584 1766607948 67569415 0 0 0 0 0 50529027 2306242166 4237069452 4286940549 4286611584 4286282619 4285887861 4285558896 4285229931 4268189543 2235514687 0 0 0 0 0 2590862701 4287598479 4287269514 4270097540 3329652342 3312217196 4285887861 4285558896 3345179491 1011567435 0 0 0 0 0 1263423054 4287532686 4287532686 3867378563 1096835168 0 1885166941 3681579120 1549227863 50923785 0 0 0 0 0 0 3061545851 4287795858 4236937866 811951461 0 0 641547581 137441585 0 0 0 0 0 0 0 34936085 4102720138 4287795858 3011016824 0 0 0 0 0 0 0 0 0 0 0 0 272317243 4287861651 4287795858 2489607268 0 0 0 0 0 0 0 0 68095759 0 0 0 204682035 4287730065 4287795858 2658432116 0 0 0 0 0 0 0 34014983 3965146967 4283979864 3125694030 0 0 3767044232 4287795858 3884287365 137244206 0 0 0 0 0 0 1129863256 4284769380 4284506208 2739423304 0 0 2189459584 4287795858 4287532686 2541123190 16843009 0 0 0 0 305805882 3597166696 4284703587 4250885983 910114623 0 0 273698896 3834218889 4287532686 4287335307 3094442353 1094532413 101255433 286199567 1582124365 3731318631 4284966759 4284703587 2689946965 0 0 0 0 879126118 3985082247 4287269514 4286940549 4286611584 4285624689 4285558896 4285624689 4285229931 4284966759 3227212635 220998700 0 0 0 0 0 509698401 2977659771 4286743170 4286545791 4286282619 4285887861 4285558896 4100417383 2170116441 103295016 0 0 0 0 0 0 0 0 575820370 1734895720 2121298032 2037017194 1448564567 255013683 0 0 0 0 0) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:50'! removeIcon ^ icons at: #'removeIcon' ifAbsentPut:[ self removeIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:24'! removeIconContents ^ (Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 16777216 975118106 1948196125 2233408797 505551386 0 0 0 0 0 0 0 0 0 740105501 2485067036 3913366574 4287266903 4291870588 4290358386 4234896198 2770871586 723394078 0 0 0 0 0 169482778 2803834139 4266346036 4290226543 4292129381 4291006529 4287127849 4290939191 4289826121 4292857218 4270292053 3056281379 991829530 0 0 0 2048727835 4289170770 4293777803 4291932517 4286537258 4278912771 4278190080 4279044356 4285747232 4289428791 4293645446 4293515148 4285162053 1461525786 0 0 2233014039 4292059214 4291203136 4290485594 4293186183 4288648552 4283518790 4284439625 4290950264 4292989063 4292791942 4294041488 4289240168 2535004182 0 0 1141837583 4079033886 4283716440 4291862608 4291794755 4292721001 4294896278 4294436244 4293515404 4294436244 4291016058 4286086513 4079889188 1712262925 0 0 134217728 3676117787 4280495698 4280627542 4282731358 4290877268 4294104192 4289439097 4284839294 4283921301 4284976569 4284516277 2786662166 469762048 0 0 0 3407682073 4283195017 4283194246 4282338678 4281351266 4282406780 4283791527 4284188861 4284124357 4283993287 4282936985 2249528595 0 0 0 0 3122338329 4283195018 4283194246 4283194246 4283194246 4283198876 4283927751 4283927751 4283927751 4283927751 4282408577 1746145553 0 0 0 0 2837125656 4283063944 4283194246 4283194246 4283194246 4283463079 4283927751 4283927751 4283927751 4283927751 4281880424 1225657870 0 0 0 0 2518292504 4282932356 4283194246 4283194246 4283194246 4283594409 4283927751 4283927751 4283927751 4283927751 4264641108 688260614 0 0 0 0 2199459607 4282800510 4283194246 4283194246 4283194246 4283395998 4283927751 4283927751 4283927751 4283927751 4062984519 436207616 0 0 0 0 1192366610 4248059475 4283195017 4283194246 4283194246 4283066516 4283927751 4283927751 4283927751 4283729855 3676448299 285212672 0 0 0 0 67108864 1494289934 3827639852 4282932356 4283194246 4282803083 4283927751 4283729598 4282408577 4230492216 2434077971 67108864 0 0 0 0 0 0 503908617 2887325720 4265496687 4282340983 4281682014 4062323235 2836928279 1225394698 268435456 0 0 0 0 0 0 0 0 67108864 1662326034 2904102936 2216105237 604440327 67108864 0 0 0 0 0) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! rotateIcon "Private - Generated method" ^ icons at: #'rotate' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self rotateIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! rotateIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/rotate.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAWCAYAAADafVyIAAAAnUlEQVR4XuXUuxWAIAwF0FdY pLBwHWdyJWdyJo0U8ieGYCPnxELBKyQRbtDAuC6EDQsO8/gOmLDeiFVEQDwo+RJeVJhcXS8G KpN1QC4nbhcmAO6c5HbB900AfjBjVyIkPVYqlp9DqBcoHxUH79DrVh3QQtIypvdAKye5clYA T8e3IEEny6CBQAj5/6COHNSh8EXmAPrK9P/AEMCvqhOITpH11Gjo0gAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! scaleIcon "Private - Generated method" ^ icons at: #'scale' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self scaleIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! scaleIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/scale.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAYAAABCIB6VAAAApklEQVR4XmNgYGAkAxMFGBmK sxkYnl8jjEHqyDK4OJuFAGYYhC62NGWD0wwMHHD+2gVMg9DFuA0iK+XgjjxLUyaG+moGhv/f ScMYBmNzMc0NBkUkNmxvywZUwwLG+3cyoRqMDxNyMcgwHAbjj1gKgoI0g0Euo6rBIANhYYoe xjAxEE21oACFKyxsKQoKmoUxtnCmyMWwMMYVzlQLCnRXDpYwJr90AwC7NHgnaJUzaQAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! scriptManagerIcon "Private - Generated method" ^ icons at: #'scriptManagerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self scriptManagerIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! scriptManagerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ+SURBVBgZBcExbFRlAADg7//f u7teC3elQEoMgeDkYDQ6oMQQTYyGxMHZuDA6Ypw0cWI20cHJUdl0cJLIiomR6OACGhUCpqGW tlzbu/b97/3v9/tCKQVc/e7RRXz+7OrSpUXbW7S9tu8ddv0M+3iCjF1s42v8WAP0XffKi2eO Xfro9dMAYJ766SL1092jfDa17DfZgycHfvh7/hau1QB9161PhgE8epoNQlAHqprRIDo3iqoY DSpeOjv2zHRl7atfNj6LALltJys1Xc9+CmYtTxtmR8yO2D7kv4MMPr7x0KULK54/NThdA+S2 XTs+jOYN86MsxqBGVRErKkEV6BHynp//2fXbw9lGDZBTWp+OK7PDzqIpYiyqSMxBFakUVYVS 2dxrfHHrrz1crQG6lM6vTwZmR0UHhSoHsSBTKeoS9YU8yLrUXfj+w9d2IkBOzfkz05F5KkKk CkFERACEQil0TSOnJkMNV67fHNdVHI4GUcpZVFAUZAEExEibs4P5osMeROiadHoUiIEeCgFR EAoRBOMB2weNrkmbNz+9UiBCTs1yrVdHqhgIkRL0EOj7QGG5jrZ2D+XUbADEy9dunOpSun7x uXMe7xUPNrOd/WyeyKUIoRgOGS8xWWZ7b6FLaROgzim9iXd+vXvf7mHtoCnaXDRtkLpel3t9 KdamUx+8fcbj7YWc0hZAndv25XffeGH8yfuvAoBcaHOROhS+vLlhecD+wUJu222AOrft/cdP Zr65ddfqsbHVyZLVlZHpysjx5aHRMBrV0XuX141qtnb25bb9F6Duu+7b23funb195955nMRJ nMAJTJeGg8HS0sBkZWx1suz3Px79iZ8A/gd7ijssEaZF9QAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:50'! separatorIcon ^ icons at: #'separatorIcon' ifAbsentPut:[ self separatorIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:24'! separatorIconContents ^ (Form extent: 24@5 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1329216058 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1329216058 3869089181 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 3869089181 1329216058 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1463828544 1329216058 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallAuthoringToolsIcon "Private - Generated method" ^ icons at: #'smallAuthoringTools' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallAuthoringToolsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallAuthoringToolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QsSDykasZ+olQAAAopJREFUOMutk01sFnUQ xn/z/+9uqVBepNXa1hDKRwwRSfCDeGiMRIPRS40JCeFgSuKBg8ajB8MFEhLOEj1gTOPBk+HI QcPBWA4i6s1GAyUaJQYp6Xbb3ffd3Znx8La14NU5zWGeZ+aZeUZ4KOZmmRAJF5BwzN2GAURk 0d0u435uaoY/N9fLQ+B3QD45cmIxCTEDWwKgu3Kbn68eb+ryLwPenZrh03VM2AQ+DVyafP5s jIlA+ys030NzjSz+wsieI+nE028H4FK/0SaCuVkmQC5OvnCGx/a8IXiD610gwz3BDEJMGNv3 evrkM6cU+LiPWZ9A5OzAtrEwvOs1tPcbbiXmKao9tK2ou8tIDEg6Tufx7TEdHHbg/Q2CEJLp 3c9+IPXqT2hboM0i2uS0TUHbLKNtgWlNU92i7d1ldN/RFOQEQAJgpjuzR4Zp6pvE2EWbb0HA vcGtwrRgqLOLMr9GXf5OTFKBvoRk7RjiVtF079BKxKzAdQVBcAzVAquXcK8wa3BrAA//ErjS rRZYWbyKWcHQyDTuPVSXsTanbZa4f/9vOtsjboq7bZw+WU9ispNqdQEJkXLpBt1yHlmziePU PaXuOW7KwVeMewvyoA+27niJJ/ZfwK2lbXNMu6hWqFaYdtf2oYzuPf+Ac9d3oCGOxyQbY/fh r6jy66jmVPl1quIGWx89yuj+abZ1DoFAb/UP3EXB+zPOzfI18Opzb92izK8gYQCRDAkZEtK1 PgEwsi2H+OHyXoAvp2Y4vvELc59nP2L14ZHJk4wfeI/BzgFiOgSANgVVPs+d+Y+4d/sLWo/f vXxKX/zPM33zGW/WKmcGB3c8hZVbsDr2FQ6oklV1Xd50bT88dpor/F/xD94hPsMoW0q7AAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallBackIcon "Private - Generated method" ^ icons at: #'smallBack' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallBackIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallBackIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallBarcodeIcon "Private - Generated method" ^icons at: #smallBarcodeIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallBarcodeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallBarcodeIconContents "Private - Method generated with the content of the file smallBarcode.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1B AACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA ABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYyLjcyclqEXQAAAIRJREFUOE/tUkkOgCAMLBef qSZePPMIn+MLMbWjbWgaT8BRksmwDNNCm5g5EREL2oYYUA8QFdF7gATahj39uY2FsZ/Hsw9t vfgbDPpEX1CrRixyqNiAPujqRC7HxCWTsAAcscseYBroKvRgU5EJwXPA8mqus0KM1MCieIbp 6qJbZj6DTDcgu0pIJUVp4QAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallBoldIcon "Private - Generated method" ^icons at: #smallBoldIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallBoldIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallBoldIconContents "Private - Method generated with the content of the file smallBold.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAELSURBVDiNndOxLkRREAbgb5Bg RaJQqZREISERrYYH2JYQiUIlwWOotCqFROEFtpGIUsMb2BCRaESlWEaxe5Objb2b3UkmmTPz n3PmP/+ZwA5OVFsLTTzhPDM/y8Vj5AD+geXMlJlG+tz8n83iqliM9QBd4BbjWMM+Jkr1pYiY y8y3Xgc8ZOZ1J76MiBr2ujA19KcQEaNY7Eq/4LmKwlFE1Dttr2C6VHvHbma2isQgKnxhs1Bg GBWm0YiIm4iYpPcbnGGj44faipStjtMqCgflNjGD7y7M4yAU5rX/RNmm6K3CdkSsduIFrP+D ua+i0M9/sDXsLPxiPzMbBYVX3FVsSHziTXucG5nZLIp/7M1/esa2s1kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCancelIcon "Private - Generated method" ^ icons at: #'smallCancel' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallCancelIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCancelIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIhSURBVDjLlZPrThNRFIWJicmJ z6BWiYbIkYDEG0JbBiitDQgm0PuFXqSAtKXtpE2hNuoPTXwSnwtExd6w0pl2OtPlrphKLSXh x07OZM769qy19wwAGLhM1ddC184+d18QMzoq3lfsD3LZ7Y3XbE5DL6Atzuyilc5Ciyd7IHVf gNcDYTQ2tvDr5crn6uLSvX+Av2Lk36FFpSVENDe3OxDZu8apO5rROJDLo30+Nlvj5RnTlVNA Ks1aCVFr7b4BPn6Cls21AWgEQlz2+Dl1h7IdA+i97A/geP65WhbmrnZZ0GIJpr6OqZqYAd5/ gJpKox4Mg7pD2YoC2b0/54rJQuJZdm6Izcgma4TW1WZ0h+y8BfbyJMwBmSxkjw+VObNanp5h /adwGhaTXF4NWbLj9gEONyCmUZmd10pGgf1/vwcgOT3tUQE0DdicwIod2EmSbwsKE1P8QoDk cHPJ5YESjgBJkYQpIEZ2KEB51Y6y3ojvY+P8XEDN7uKS0w0ltA7QGCWHCxSWWpwyaCeLy0Bk A7UXyyg8fIzDoWHeBaDN4tQdSvAVdU1Aok+nsNTipIEVnkywo/FHatVkBoIhnFisOBoZxcGt Qd4B0GYJNZsDSiAEadUBCkstPtN3Avs2Msa+Dt9XfxoFSNYF/Bh9gP0bOqHLAm2WUF1YQskw rVFYPWkf3h1iXwbvqGfFPSGW9Eah8HSS9fuZDnS32f71m8KFY7xs/QZyu6TH2+2+FAAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCenteredIcon "Private - Generated method" ^ icons at: #'smallCentered' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallCenteredIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCenteredIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB8SURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYwMORk/54C0w2FOcemgmSIMyH1P7LNCHiLBDcEZ/+a gqwXaFbOIxLc4P0f1e7fUPiZGDcw/AdD02z9/5r/Vf7L/Zf8L/Kf/z/3f/ZsiAwjxbEJAKUI VgAswNGVAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallConfigurationIcon "Private - Generated method" ^ icons at: #'smallConfiguration' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallConfigurationIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallConfigurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCopyIcon "Private - Generated method" ^ icons at: #'smallCopy' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallCopyIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCopyIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoaFAgvgxQ0mwAAAX9JREFUOMuVk0tLAlEY ht8jM2PagP0KzwjdFv2PCFq2iKB1F/BCtrBFkXbbREREG7E2Bf4EMbM2gWUwo7+gmjAFN83t tGl0Rkexb/Wdw3kf3vfjO+ToJDOv6/osRijBz71trsXvnHecYRjT8ejWKHqkD/YmAbgBdtNq NcEY6xMRQgAAodCEJ5RzHmq1Gl6rlYXGd2NmkIv9zG7K7nmev3UBJElCsVSY+kekRRdAUZRO jFarOVRsR3IBKKUolgqdsyzLnuJIJNI/A8YYZFl2DdL5cFC5AJRSlMrFoQ56oZwttiwGRRnN QTA4jna73QXoug7GGMJhivJTaagDSiWYpoHKS6UL0LQfBAJjsCw21O7l1QUeHu/dEQSer56d n7oWhzHL07YoilhZXoVlmVC/VOSus+A21qN5AHnHcmwbhuHrFTtLVVXkbrIA8OzzGpKm6fD7 /RAEAaIoghCCer0OgODj890WpxKx5BzpFR8ep7OmaS55fay/KgAoJGLJHQD4BUJZpgMViPfY AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCutIcon "Private - Generated method" ^ icons at: #'smallCut' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallCutIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallCutIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QocFh0xaEFkXgAAArRJREFUOMuFk11Ik1EY x59z3nevr9vUfaXbbPgVaHjRVRB0YZRJV0XeZCIRaGmWWKhpgZAElaV9gYgQlBjoEPRKkCS6 DAK1MG0zNvJj7zZ1m+51X+92zttNzmFa5+78/w8//s/znIMg5TzrfXIOAN7zPO9tunm7dI/X z7LspTvNrbpUHadeGIYZu9XYrI1Go8t9/a87Uz0Fq7hw5nS55sWrnk8HAggh/E+HHdfV1lcQ Qo7t6E97HpeZc82m7ZCIKKUnDgRgjENLS7+AT0tDsVisdCcFy7JThYWF4HF7KKXU8a8EFTab DVZdK6iutr44kUic6nnePVBSUqJAgMHhdAAAWA8E3G299xljvLy4aAc+jUeSJB3X6/TXZAqw vrFGAWCiraXj4YEAAABKaeXCjwV5bc0DjTeaVPFEHIliEObm5iQA6Npb/xegraVjGmM8ZF+0 0WBwC2s0GhDcgizL8ru2lo7p/wL+pJianZnGTqcD0jkeMt8ORhBCb/arRXuFMaOxl1B6Pb65 qSblZTIz+REVGHNAIHQLITRQ6fG07wsYM5k6437/g6MmEyQoRd6tTdkX3h5mZVRVkJ3D8BxH JVkG5/o6KLKyrla63UPJFsbN5hrJ5+sqNhrpwsrKVDASlgJBEdfEaU2UIzqWwTQQEhOO1dUP R/R6EvP5BsfN5t2XOmowCPNFRWSEYe4DAMxYLCGrUpnY8UcYhnzJNQcBAIYxbv+Wn09GDQZh d4ixmF6SJFJFyKMJleqlgmV5hLE9OWmOm1Hz6arJjIy+y5R2gyxTIMSwC+A4Qa1UMl/z8mIm na5pXhC8iszMK8mPpNU2fHe5Ng4fOtQwa7HECKUYMA4AADAAANVarc/l95/0SxIbAJA5tfrs RUFI7twqiu7q7GyPNxDI8YfDGl8k4lOoVOetouj+DaDzOgfcNME8AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDebugIcon "Private - Generated method" ^ icons at: #'smallDebug' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDebugIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDebugIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKYSURBVDjLnZPJT1NRFMb5G1wD HV5boNiqdHrvFYolCAtsGSSWKpMFKhYqlDI6oAEKaVJwCIgSphaKtLYWCgSNBgRjMNHoxsSF S3cmJmA0NMTw+R6JKKZl4eJL7sm953fOd3JPHIC4WMpcppG5SGnZc8ZjVVF6QLn975sDgfaZ mvg71oRJZIRUYcuAnq/2KWroGfm3QwEn2YpLVPPvOD2oiqj9yq/mGznegl56mx6T7ZbY1M6Y AM0CuZkxT0b2Wg6QW/SsApRXDsotR+d6E9Y/h9DuqoCuJq0lKoDxqU1/pITGR27mBU4h+GEc Tz5OY+ClA5JbyahYzof/9TBO9B/FcWcqpA4xU3We3GJ87ntnfO5meinMvruNnqcmXA2XoDVc Cc0wCYkzBaZpA7ILRJ/2O2B87jA+QT9UeDRe8svZYAG8b/txc6kc9mA+yqayYPQXwvdmBEOr A5B2p0BtFIYOWKCm5RukWwZyXIbA+0F0LpaiKaBHmVsLw4we99ccsM8a8GClF5JOMcQdou8p rULrgRmQo7KI0VcE13MrGv06lE5kodhzGvdWu2GdKkTVWC4DcELcJkKyXbCb1EhAVM//M0DV UNqP2qAJd1baUDaZjTMTeXAttsPi0cM0mgvHvA0NkxYk2QRIrieOsDmEmXttH0DfVfSluSTo WmpD8bgOroUOWNw6VI7koGfOBuq6EqLLTNU6ojrmP5D1HVsjmrkYezGIrlA9LjKgnrlGXJlp gbCOD0EtD0QNN8I3cZqjAlhJr4rXpB1iNLhrYffUQWoT7yUKzbxqJlHLq0jc5JYmgHMunogK YJVqF7mTrPyfgktMRTMX/CrOq1gLF3fYNrLiX+Bs8MoTwT2fQPwXgBXHGL+TaIjfinb3C7cs cRMIcYL6AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDebugItIcon "Private - Generated method" ^ icons at: #'smallDebugItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDebugItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDebugItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALRSURBVDjLfVNbSJNhGP6li24C 6UIiDHWah83UdJv7d7R5oiiPWGp5yIUHNNF0acNjrmWe5gx1Ujmd+pubW8upaSWZRilZdhN0 0WVBEAgalSK5p18hczm7eOF7eb/neZ/n/d6PAEDsFWETAoSN8aWbZ/EDXqLIFLr67x27RPpU 6LUzl1hJiC08a7461lNo4GYLBjnf/ktwYrPjOF/+JxeZeWtCY+hSTk00FX9TsCroZttSrggb 9iSQjJLL4hFybUuyiVwRDHHBpzjg6zmoni3B7CcLrjVnIiY75KpDAtqnVDQcComBXD5tioL5 vQ6THwagfqFCQKsfMifiYJzXIrjlGI43+CNQxaK7jpArtM9t77RPWxjFx9CiBjcey1BhTUGZ 9SIkWhIBDUzIBpIRGe/zcVsB7XOd9gnBfW6fhCK/njPHg3rTgtrxDJSa45DeH45UYwIMC3fQ Ma1GoJIJYaq3xc4Cf4AzR+rZIHVsmN61o3osDSWmWKTrpUgejEXXjAoF/SSye4IRVMMCS+Hz nVnmXWg3A/Ieey3VkIjmqUIUG2OQ1hOOpL4z6JxWorA/AZd6QnB99DySu/zAlB+1+RZ7weey 598B8jpCfuSZZWh7Vo703kgUUWIaSCKXVpbVHYRKy1kYF9ogH45DVOuhDXHTwQNeOR6V2wSC 29z6kOYA1I2XI0kXQ0vm4eFiJ8xv27eAQwsaaKbk0M81Io+KBrd+/0aA0snZ7hnZ9UEzXnIP dD9vpyUHb4HVT4rQMFkA1aMc1I5m0Q1y0TWrRFqvCN41xK9d+x9YwZoJVLBw4S4ThtcaUPMt 0L9qhO7lLZokH9rZOuRQJ8GoIpZcFcRxh5/Iv9RHn6Bl4FSbKyJaXSBsckZGjwCdM7WQ9UfD vYr4clhBsHZtoqPwzHKfY2S4wV/p9DNTHwH3CuIzDfZ1uMp7hXvqkXVGpZPNrWIfXBQEY2ft N8xTb5GsXWfEAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDeleteIcon "Private - Generated method" ^ icons at: #'smallDelete' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDeleteIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDeleteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QQWDyovwTM/8wAAAhxJREFUOMulks9LlGEQ xz/P+9syNUWyXBQzAunQrYQI+wPqYiLh2im6dokILwndqpvdskMXCUPtFmFE5yQNMrNwxS3L FQQxZd3d932eeTqYW2EESwPDwDDz4TtfBv4zFEDv5bZuEWe8slW5OTaydNfrSbf3dnScGe3v G6hofXxi6A5MznjAaH/fAMPDj1hZ/oLjuLiu88/ade4sF7uv8WZ68oWzS5x9N0cQBARBSBju ZkQURURR1c8aEYYhuZVcWYkHsLDwlqH79yo6YWb65Y6JPen2B8DVrq5T5FYziLWIWIy2aG0x WohjIUkMOrGIgDYGYwzW2mEF0JNut9dvpFnfmN3xVyybGyWUqsZza1nfWGZrs8B2XlMsGQ7W HWXq9RRjI4vK+5s8a6GhPkVL8xUA8vkPzH16Tn7fFoWCRbRbni2b6KhfzSONF3DciEz2Idvb 8ziOiwV8r4ooCmlsqN0LULi4TkAY1BGFLaSa0iS6yOLnSTLZVzQ1nkCsYIwhiMK9gMA/gO/X oJSDBXJr4ygUranzKFyaD3ci1hKXNO5vasseKOVgrcFay+raBPU1nQTeMar3H6Lj+CXez4+h dYJYQyJmL0CLwVqDiBDH38l+e0YSG5Ty+bjwlLhkEKMRMYjWfwBCgGxmPWltO+kba5FE0CJo LRQLq6SaTmOMYIwljg3Zpa8J4AOBB8RxSd96/GTkdgWP6BcLySCgfwCHx/uHvBXx4AAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDoItIcon "Private - Generated method" ^ icons at: #'smallDoIt' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDoItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallDoItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIMSURBVDjLpVNLaxNRFP6STmaK dFqrgYKWlGLSgoiKCwsKVnFRtBsVUSTNyj/gxv4Bl678AyKCoCulgmtd+W7romgzKT4QMW1G +5hMpnPnnuuZm6ZNawoVBw7n3pn5vvP4zkkopfA/j9F8cafO3FekCjGpIgKIvayftTXOkr71 jkz2/UXA4HxXfz72gIx/lBsWSfiVtwiWHK8B3kRQeX/6lmnnkuDAwn0MJSKQEFChQCp9CcHi xxgsGWw3B01uRKfx9t1HIP1POpoSdUulLyD0vqO26IAkDW7tgSZYeHPqcmpXxkTChKzOaAKS Edo6jnEWVY5ehFxdHs2cn55rScDR73H6DKyyRWs1R0haGdR+z8YZ3MyMTj9rpUKi/PLkUJuZ fmX3nkNYmQBxzYprpyCA2XMRrvNAcdfDhgKkm6ttKTdW6jH4w4RpD/ALAaNzhH2kSwALoSJC d9+VhIqEVVeD4C1MclaOT0Ke0Cowq+X9eLHapLH23f1XreDzI27LfqT2HIfvzsRAyLB2N1co XV8vodUkfn16+HnnvrPDhrmXsxBY+fmOwcVlJh/IFebK207iuqSShg0rjer8B9TcWY7q38nm nRstm7g1gy9PDk2129mjinjy3OIvJjvI4PJ2u7CJgMEdUMmVuA9ShLez14rj/7RMDHzNAzTP /gCDvR2to968NSs9HBxqvu/E/gBCSoxk53STJQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallErrorIcon "Private - Generated method" ^icons at: #smallErrorIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallErrorIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallErrorIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKCTIOk1O0sAAAAhpJREFUOMudk71Pk1EU xn/3bQvlo76gxBpNoGibArYLxJREh466MmnSgRH+IjsydGYjspBAWEQHMJIWmmhj+LAkpC1N Wyj2PcfhfUsQiRpPcnOTm/P8nuQ59xhuVA5SwDyQBsa95xKwDixlYOt6v7khfjscCi1MJpME w2F8AwOoKp2zM87LZYqFAtVmM5uBxd8AOXg3nUy+HJmZ4XJ7G+f0FBwHVUUMWEN38U9NUt3d 5VOxuJqBVwC+rvN0Mvn6XixGe3MTbTRABFVBRUEEabboHHyjPxbDtqzoi2r1wTKsmBykhkOh 98/m5rhYW0OdDqqKKqh6YgXFhakxBFMpPm9sUGu1Zi1gfjKR4HJnB3UcEFABFXEP6oEUVMFx uMjneTwWAZj3A+lg+D4/PnxERRkrf+dPtW/fQao1Ag8fAaT9wLjVP4iKG9jfSkRR7WB6AgDj FnCV9r8A8PpUBQA/UOrUzyYUg6rDl5ERt0HEvVE3PDdVRN0gtdkCKFnA+vnJCcYeuiL/Iu46 iidWwRocpF2rAaxbwNL+3h6BeNwly3WRNzrtTkNQY/BHIpQODwGWrAxs1VqtbKWQp2fqqQu5 5op3qygYQ080RuPggHq7nc3Alg9gGVaeVyqzts8XHUgkcBoN5KJ99RMVMHaI3vgEjXKZwvHx agbe3LpMdl/fwpPRUQK2jentRUVwmk069Tpfj466zou3buP/rPNPwkdmHrlYdncAAAAASUVO RK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallExpertIcon "Private - Generated method" ^ icons at: #'smallExpert' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallExpertIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallExpertIconContents "Private - Method generated with the content of the file /home/dgd/smallExpert.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABF0 RVh0U29mdHdhcmUAU29kaXBvZGmU4xfQAAACS0lEQVR4nJWRu09TcRTHP+1tL33QVkjB0lqN QABRiiE6SDCEElJcYWbV4GRSw9zBP8BFSRwk6mCiI4Mp0dCQaHwwgQllACqlPEIfVOhte3vb n4M0ImICZzq/c36f73lJnMHehJDfRiiLGW44nGRGfMj6swjU1qObfoSHNWJ2lcZ7z1B0p4W/ PsEraTR61yg7BWHFwsRKM3On5X0+Jx/uXiM3NYRYGuPTx4c0AvyvAxm4CnQDWeAxsNpgZrLX w/eZH9ieB1GlFRZOgseQSNY214pWf6twd7oFIID3wOXDP9dDIfQCdMc7eMo5xj13PPR099Du biefyBOdjyLbZcIvw0qlXLkFfyobjsCjyIxzG1wXXTTVNdFyvoWOng7Mo2ZiuzEKhYJl9vXs K+AmoAIcPeMEV8BoNVJjrMEsm7Fb7HjqPbS526iz1jEwMoCl3uIDAlWoKmAAfDRAqVyiWCqS V/NklSzxVJxoIkrqIIWiKji8DoDe4yNYARPy70fyZ5LN9CY2k428mscoGUntp4in4miSBuA8 LpAFVsjQghXWU+uYZBOlcomtvS0kvcR+fp+N9AaZRAbg80lLnGaVB1wAIQTLm8vs5fZwWBzo 9XqUosJ2bBttV8sB4Sp09IxmYJ4uOungXysAc0CW+8BkNSxVnVAopDcYDEs7iztdpa1SE4bD 7AEQB90XnXrJeWkqGAy+6+/vVyORSO4vgUAgYHe5XA19fX0LxXRxmzjFynJFsiVtCa/R+214 aPjF4ODgohBC1jRN8fv96UgkIn4BMVjYCuwVUJAAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallExportIcon "Private - Generated method" ^ icons at: #'smallExport' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallExportIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallExportIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallFindIcon "Private - Generated method" ^ icons at: #'smallFind' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallFindIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallFindIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIlSURBVDjLY/j//z8DJZiB6gY0 9895tGTDnv+tE+f+B/EnL1gHZofGpt4iyoCK5r5H63YcBmkAG5BRVPO/b/aK/0CDn+A1ICm7 5H/X9CX/azun/m+bNP+/iaUd2AAHN5//WSV1/wuqWsFiVvauyxWUVHkEhUWZwAYsWLOTo6i2 3aOpbzbYqYXVbf89/MP+u3gF/M8pa/gfm5b3PyKn6X/txGX/S1qmgOW4uXmq2NjZGcEGTJi7 mmXKwvUPF63b9T+3vAmMqyeu+j9l+a7/fUu2/2qcvuF/be/8/9G5zf/DkwvBLmRmYXnAwMDA DDYA6FxWkM3TFm/8n11a/x/k55Tc8v/RyTn/1bT0wDaCXAITj0svAOpi+AfErGAD0goqWf1C Y35a2Dr99wqM+G9sYftfW9/4v6yC8lMRMXEDSRm5rWISUv+B/v4vKi75n5eP/z8jI+M7oAFM 8ED0CYo6DAq4XYfP/F+15cD/7hnLQAG2AiSnqqmzorJlwv+1Ow6B5UAxwscveBglFtx8gv/k VzSDDQC66H98RuF/PWPzqyA5oM1XQTEAMiA1v+J/emH1fw5Orj8oBji6+/6HGQBTpKGt/1NR RZ1RQlr2HSjgYAaAwoKVle0/igHWjm7geAYlIJACUGDqGpn9B/qfX0lV4wrIAFAsweSAYYBq ACiBGJhYggMP6Of/QJv/S8sq/AcGohTQv7c5ubj/A+MdFH2gGABj2mUmUjEAnjJojQ5aPHUA AAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallFontsIcon "Private - Generated method" ^ icons at: #'smallFonts' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallFontsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallFontsIconContents "Private - Method generated with the content of the file /home/dgd/smallFonts.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABF0 RVh0U29mdHdhcmUAU29kaXBvZGmU4xfQAAABw0lEQVR4nNWRP0xTURTGv3vP+8Pro9CqQ1Pw 34tplIGYgIZASZogFWpinEy0mGCJiX+Cg4uM3R1MHNwMMwMrcRAGFhwaEjVRQTSS1DQMbaWN 0tf77r0OakUWWDnJGb58J79zvhzg0BftFuPj03an5/XHI6erpdK6OAiA7xYVXZ8KtXW+Vu3W 44Ne8B+AOM8BgON2TOz10ulbbipzP7YX0IqQzNxJCOEnORlHiYx4JBpb3Sp+WgOAgbHJR4Lo 2U6j1nPy3MUnXV7vZScRn69sbMjWFqnFvWr52wspmrMA4IQjd/96vt94U1xfzRaW5nIqCOYs 27kSqltT/yLk85wxlmqPHiuRZS0C0Kbjjnh9yRMAEA5HKt2J/pnBzO1lTubV33HJawGGCsUx KcR3JnFzp1YdFU3/LQOzouHYNABIKWY58esfVhYegOnnAKC15gBgAIBSavLr58LDrS8f3wHA hdHsiAn7le123AAwo5TcNsgwvd7hs8ToGgAwzttSqbxBA+mJrNbqkuse6S5tvl8AgONnzueC ps8CIcqxUz3Jxo/6U61UFyPq+1krvwyk8Bnnoer22iYAMADmn97v5fY+M4exfgFP/5Zri/7V SwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallForwardIcon "Private - Generated method" ^ icons at: #'smallForward' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallForwardIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallForwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallFullscreenIcon "Private - Generated method" ^ icons at: #'smallFullscreen' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallFullscreenIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallFullscreenIconContents "Private - Method generated with the content of the file /home/dgd/smallFullScreen.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABF0 RVh0U29mdHdhcmUAU29kaXBvZGmU4xfQAAADIklEQVR4nH2TTWhcVRzFz//e++7Me+1MxkxS 0jR0nJZSbI0am07c2OomI7HrilB0GVy5kJDtZJNVEHQTcONKF2otlGmUEhoQSUtClTAWalJp Pmtik/l47828efM+/m6yiFA8cDaHw1n84BAAMDNNTU2ZWutjWmsrCALDNE3HNM3q+Ph4gP8R TU9P90oprwHIARBHHBJRi5nrQog9rfVap9N5OjEx0fzPwMzMTG6nuvVp+dmPH/fnTiad9ebO Bxc++uVIJwbgMbMNYJ+INpj5t8nJyS0iYjk6OnpybXf12vbQ6mU+7xvVf+rd/UFuP22mIyIC AAagiShFRD1E1EtEpxcXF7PFYrEq4ji2rIRFkR3B3nBx7t08/dS4ddULvB4AJwD0AegCoABI Zu6N4/jNOI4vM/NZRURGvuesnX80uOqppvXEezLgd1hpqWMAICIJ4DgzHwNgA3CJKH2YaUVE YcJIBO+9+v5TIQQeri+5sd9OLMz9MAgiYZkWeW2/menudc9deH03ne5yD9n4YRiGKgzDkIg6 RGQws3Xp5YKz8uDeqTvz91PKMAAAraaLysoy5m5/f/Hu7Tsbr7w2sjmQO+MqpTxFRB0hhB/H sRRCSAAwrWRi6VkVXzeycCKB00kTQ6cK+OSzM+LDG5v57779Jr8wd9MYLFwtKwCNKIr2AdSZ uYuIglS6S246LsJAISUktpvAhkO4K9O4nu7D8PAw7IbTr5RqKc/zqpZl7QA4OKSuojDg4ypE MRWhS0vUgwjL+y10AFTaBoa0xt+7e3YGmQNRKpXazLzGzAfM/JiZ9xzb9nuojazyICMbL8kW BlM+BgwbGdmElBLr61vPZ2dn6woAMpnMSq1WSwohiswc1WqNR1lCIYyqiEmCmZBLCJyQIZIc od1qot5w/wDAEgDK5XI8Pz+/OTY29lgI4Wid6Cz9eq9QvPK2UtyAZBeafJjko08aqCwt88KD Sqlet/+iFz2sVCqpPysPz9vV7a9G3iqMvDF8SXZnMxBSI/Da+PLzL36/+fP9dwDYLxw4qouA drK4EofIsYBBgPLauHXgYQcA/gWOnHIlydMKjQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallHelpIcon "Private - Generated method" ^ icons at: #'smallHelp' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallHelpIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallHelpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallHierarchyBrowserIcon "Private - Generated method" ^icons at: #smallHierarchyBrowserIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallHierarchyBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallHierarchyBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallHomeIcon "Private - Generated method" ^ icons at: #'smallHome' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallHomeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallHomeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallInfoIcon "Private - Generated method" ^icons at: #smallInfoIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallInfoIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallInfoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallInspectItIcon "Private - Generated method" ^ icons at: #'smallInspectIt' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallInspectItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallInspectItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYdERIIyN9seAAAAzRJREFUOMulk1toVHcQ xmf+57LnnM3e4m42qRs0iBqLlzYbW7NUraQ+GHxQNBQUopJCqautDzVNNVRaNETBEqRUaGsV pIUmL32qtMYQL0isaECjwVvEZJPN3rebze6ePTnz9yUbWvGtHwwzzMOPbxg+hFfU1n74N72Q 34qIKnFCzvmMzWa/2Hm86xN4jcTS8EX74Q25fP6v5p3NssNRjkXD5CYHkAW0TmdSH2cy03vt dltj5/Gum/8GIADAsa871qbT6VvB/Z9h393J4khSLCiapprEpVw2m/G/AUrj2z65+8xpqvBU 1HccPTb0HweJRHLg0wOH8PfbUWNKt0u7NvmyCxdo/5hErqHn6cSNkdii6b/DxYPBQ3L3mW+v AYCtBBA6vjrS5q+r3zyaFM3RGU36qHFJpMqloiIziQhk1SKmcvrsw+dJqrFQzvC6FFy9ZlX2 6sC1WwAALJGIn/TX+aXBF4YcWO42BAZu3TCdeX1WM4kE0zTdkZTuQcDwcATkd9a+q0Sjke75 EyRJ4gQMrXYHKLJ4L5M3mGJyXRSwSMSX9twInTSIyoCDK22In6uqBpIk8XkAEc1aJFGSGOdP JqanGNqYqwxMvWiGx2K5kE4UFzgSMK7MGoap67pARMY8wOv13pmYmKh3yDI+Ho+Xj8dzNzmD KCKLIHG3ADADyK3JWHR97aJyTCYTemVl1WAJwERR/LF/4Ep4q98rqFY1YHKyAUcGnIscyEEI cqFQqHB5PO9vecvDfr5wLpNOp/rnv3Clr39oxZu1bVaLqK9cVqONxov1sXDIo6rqM+JUGxl/ sd3ldu/esUqEwet/clXRMBaLNdQsWXzh4YORrAAAsGPn9svDD+7v57nU1K6mgN0AsXKmyD/g KKypW1pRtc3vhnNnT1NgXYBNTk1KRKbEGGtpaFjXhyUrXadOrB4bG//D4/YUnM5y2V/nd1ZX V9t6ensePXn6SNXzxjdOl/2npi1NcG/4Pmx4byP98utFhq+Go+vUiX0A0BwKhTYCgObz+S4B QG9729HzwWCwExn/ck/LXrBay+D7s98BviZgbK6wlJW5zgEAWltbW1TN8sPc7kP4v3oJO6lm k2hPogUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallItalicIcon "Private - Generated method" ^icons at: #smallItalicIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallItalicIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallItalicIconContents "Private - Method generated with the content of the file smallItalic.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACmSURBVDiNpZIxDsIwEASHFKlo qCPRRqmo4Al8g5fkT3yBFlLkFYgGCdFBwVLE7nJny7FkXbO78uwZSVgXOAEj0FuaCv8cgR3w tASpgEOYV1PhPH8DCPgAdQnCPsxR0rcEIQbcHM3yAK+DO1MHnbtqw9wE8xuovAALIa5vkPQr 6SCP3wlIf6B4ZvhXwIupg63HP1si0AbzI2W2SszmtzpYAxfgnBPwB0Q6/v9KP2ylAAAAAElF TkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallJumpIcon "Private - Generated method" ^ icons at: #'smallJump' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallJumpIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallJumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallJustifiedIcon "Private - Generated method" ^ icons at: #'smallJustified' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallJustifiedIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallJustifiedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/IfpheiEwTNEm5D6H9lmBLxFtAmR/3+h6YWY95xo E7z/o+uHwM9Em2D7/yeSzSAICdc/xJhAMLIA+V1VH3Z4v2kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLanguageIcon "Private - Generated method" ^ icons at: #'smallLanguage' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLanguageIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLanguageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG/SURBVDjLjZK9T8JQFMVZTUyc 3IyJg4mDi87+GyYu6qB/gcZdFxkkJM66qJMGSNRBxDzigJMRQ1jQ4EcQ+SgVKB+FtuL13EdJ xNDq8Ev7Xu85797T51nwhqeAH5w6cAxWwDgReX7jwYfdaCIraroptB7NLlVQrOoiGEsL1G06 GZyxuILicsMUH3VTlOqGKNUMUdTacj+j1Nng0NGAT2WxYosK1bbIVVoiW27J9V8G57WWKVSc zMV5iK+Tudv1vVh5yXdlLQN+os4AFZss2Ob82CCgQmhYHSnmkzf2b6rIhTAaaT2aXZALIRdC LgRtkA1WfYG4iKcVYX52JIs7EYvFmJ8wGiEXQi6EXAhdyn2MxQaPcg68zIETTvzyLsPzWnwq ixVbhFwI3RFykes+A9vkIBKX4jCoIxdCLrI4/0OcUXXK4/1dbbDBS088xGGCCzAJCsiF2lan T8xdKNhHXvRarLFBqmcwCrbAhL32+kP3lHguETKRsNlbqUFPeY2OoikW62DNM+jf2ibzQNN0 g5ALC75AGiT59oIReQ+cDGyTB+TC4jaYGXiRXMTD3AFogVmnOjeDMRAC025duo7wH74BwZ8J lHrTPLcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLeftFlushIcon "Private - Generated method" ^ icons at: #'smallLeftFlush' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLeftFlushIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLeftFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/Ifphej8xbCLEaaAOBNS/yPbjIC3iHZD5P9faHqv k+gGbzQTYD76TLQbbP//hOqE6f5AvBsIRhYAysRMHy5Vf6kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLoadProjectIcon "Private - Generated method" ^ icons at: #'smallLoadProject' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLoadProjectIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLoadProjectIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLockIcon "Private - Generated method" ^icons at: #smallLockIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLockIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallLockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallNewIcon "Private - Generated method" ^ icons at: #'smallNew' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallNewIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallNewIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weR goI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT 07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEs NBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKB gIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJx mAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt 7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxh B1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvr kn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallObjectsIcon "Private - Generated method" ^ icons at: #'smallObjects' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallObjectsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallObjectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallOkIcon "Private - Generated method" ^ icons at: #'smallOk' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallOkIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallOkIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallOpenIcon "Private - Generated method" ^ icons at: #'smallOpen' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallOpenIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPaintIcon "Private - Generated method" ^ icons at: #'smallPaint' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPaintIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPaintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPasteIcon "Private - Generated method" ^ icons at: #'smallPaste' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPasteIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPasteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH+SURBVDjLdZI7aFRREIa/k3u5 cclGwiXEF9GInSCIoF0qa1/BynJdyBYhtaRJSrsFK4XtBCGFQRALm4BYKQg2ti5JQEh2hay6 6ObMmbG49+4jSwYOc4rzfzP/nHFmBsCL6uWrwDfGo7PcaM5wQrjnjxduABvAnXJ6hkdr63Tb nwGYmr3Fy/Un/O3+AngFbC03mq+HATGwdfv+g4ul8jT++1fMjNDrAmBmLF6bZ+LcFczs4fs3 b+8CY4BLpfJpjn4fICo0N+tgBhht+4Ka4ff3ODV7ITFInHPOCt85ADRgIkzMnEWDYKb8aHf5 2fmHAbp/iNsTdlo9gJvOuQNg18w0BjBVVAT1PdT3wIxW65B7a++I4qTf7hKwIfKp0Wg8W1lZ qTvndnOAoMFjprn37ERxgvceEUFE8N6TpimVSmU1jmNqtVp9IgMEVDwmHg0BDYppBnPOEUUR URThnAMgSRKq1eoqMBcXAMRjQTFRVA2VDBBFUT9PTk7S6XQIIZCm6WCIpllVFUUlYGpYCCMd FHfnHCIy8o3ZEH3ARDEJqIKKDbYthxQWitwHZNUzgOYWig6GIcdBgz0IhnrNZ1BY0PG9z4WF pQLw0R8dLU6dn8+EqphCybf6j4YWb6R6AXj6YXt7GrjeFwA7rR5LJ4gAQgh/gOCG6cfaXQDm ODkCcPAfs2Qwc59hLO4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPrintIcon "Private - Generated method" ^ icons at: #'smallPrint' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPrintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsRAAALEQF/ZF+RAAAAB3RJTUUH1QgSDzULeviv6gAAAW5JREFUOMulk81OIlEQ hb9bsOAheuvMihAiszHyGOP4MNr+PIGa0WcQeAJ6x5olO3GnJiTNX2gSu2nuLVcgPfxN9CaV m7pJnTpV51z45jGrSb1RuwL8/6i7Pvn952Lttd6oaZIkOyOOY603arqoyW+Cb7fbW1tXKpVM vhGgWCx+zmhM5lbV3QDOOTqdDgAisgZULpf3M/A8DxHBGLMWexmoKq1Wa9lRRKhWq7tlPPfP rgC/UCjw4+AnzrkM/dXxjDF0n5+I4xjgesHAv/AvsdaSpuleE0wmx4gI9w9/fVldUrfbJUkS giBAVQnDkNFoxGAwYDgc0u/36fV6NJtN3l5fsjuIooj4/Z3xeEypVCIMQwDSNF1SB7DWMuiH xMksCyAiTKKIIGgynU4BmM/niDE4Z5lbi0iOfC7H0XF1swrWWg4rv/4xjOKcYq1FRJbyLpa8 BJjNZniet9VxCxVEBFXFOZcBeLy9uzn9wm9+/AC6aMvlGUG8HQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPrintItIcon "Private - Generated method" ^ icons at: #'smallPrintItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPrintItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVDjLpVLdS9NhFH724WbT WcpKiTUxWyJKRTdGURaSUt5URDcW3XYZ9AER1UXhTQT9CREE3URi1EUkaGhq5ZSgDzc1tWma Gzrd5m/v+55zurBy6u468MD54Dzn0yYi+B9xZhvxwWOPheWCiECYARYIrejCvKoTT/qbQuUb CISlZXNFC4QFIIYQrcIQ0rEPsBKR5N/kNQSxgaN3Xd6gHQzo+HOINmCtIUojz3cG1sJXWIkI +ZtC3uyi9tXqfD1/y15Q+hvEEESvIM93CioZxfJCBExctX4HdgCYe3/kbJ4n4ILNBUp9hhgC k4GjcD9Yp2AthEGZxebAyaHRnATC/MjlDUJMCmLMn5kN7O4AlueHoZLRa4HmoVe5rmCb7T1U 53D5+rz+E1CxdrDSEK3BlgVX6WnEI09EiNXDxQJ3yihc8aQzDmIIcSJ4fqTUKSTtLu9uCGk4 i5ogZCCGAAHEMIrLz9nEaHfm00v4fdW4MxVy3y7gtEPTQQBwCrM7Od2VyboxhBkP5ovcwgqK DZQhbC8JorqsDktWCpejffmWUbNvAdhyfeLEiz2d9xOe+uM1F0HCICYwBDOJKIoLtqF37A0G JrvYMqrEmWsxQlxvGQUSxkQ8As0GhjU0aSxmlrBvx2Ekddre/707voFgvK12MN+7C1YsDEMG pUUBGCaQMH4mJlFSWIbQjx70jHbPKYPGNSOMt9UWQuxLQoyrsTSWlRLFCpZRqPTV2A7sbMTH yXfoCL+eUQYN063yxbmu9X4m80uIK59dGktmx2rv2VM2+yZPZ7hjSjEapltleCVJ5B9GnlbV ZdvZqLiFVOCmQ7beQEW2/zeRQcHUmJPKOgAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPublishIcon "Private - Generated method" ^ icons at: #'smallPublish' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPublishIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPublishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPushpinIcon "Private - Generated method" ^icons at: #smallPushpinIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPushpinIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallPushpinIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEZSURBVCjPY/jPgB9iEVoqPefl lFPdNk2GWBUsVpz9ctL1rkcNW/v+59VhKFgkPfP+xI0dF+uC/jPkWCR/Q1MwX2TGvf7Nretr /UG8BO2I5ygK5olP/dCzpWV+dVAhd+bB+JawrT7ICubIT3nbvaFpVkVqgVDa0diO4CneN91E 4Qpmq0560jW/YXp5XB5nyq2YrqCFno9cJeG+mKk48UHHjLruMu8czuSbkfUBizxeucrDw2GG ev/71uW1jMVrsq4nPIto8F/g8caFDymgetxbHlVLgDjxnWExPjPdb7sIoYRkk17FywJRECdY 1Xux201nMbSgLufO25qyJUY1yNrzsus9JxkscZHMG+kVcN7jqWueowARkUWiAgBEUvolGfpI TwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallQuestionIcon "Private - Generated method" ^icons at: #smallQuestionIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallQuestionIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallQuestionIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallQuitIcon "Private - Generated method" ^ icons at: #'smallQuit' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallQuitIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallQuitIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z713 7p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/z nJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoG DA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwd EaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoF lV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfF Yy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29 X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6o oly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+ lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necA Ii3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8 yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRedoIcon "Private - Generated method" ^ icons at: #'smallRedo' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRedoIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRedoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCicVP7jtIQAAAdxJREFUOMudk01rE1EY hZ87X02MpEJMY4MfbTbVdtPSKn5UYw1CqThuRCuCuBpwrTvBv+B+Vt11KUQKhYrFUrpqpKgb wU11ISliTCZNmslkxs0YJ51Bgmf5Xp7Duee+F/qQbmqebmrTUWcS/WtbN7XCfxs8fmAAvNFN bS44FxFxB4A8sAhMAZMBA5aWTYAbRcNeDxnopnYBeD4ntFS2cHVYTY3mEAJVjmHZPyl9W+HK 6L0eExGAF4AXj/L58/JQTqrZZbzap550H5s1gK7JuT17VvjwBPDy4bXrN2OZM1iVdSxPI+7a AAw6DTbbzt/ihMSlkbssLZso/uzpnbPjk7F0lvqvdyRaDRI0GG5VeEUCR+rtOj14snsNBWBA 1WaPj02n49Z7svtVdqQEmiKoHYkz7kMXFTDrFpljp9lc/dDtQAHouG5GyIJUw2KrVPfWWpXQ 60xcPhGCu3vgdJzk0cZXtnd2WWu1LeAZMFU0bFE0bAHwNjkUgoFuB+w3q+5KXUjA/aJhrx5O 4MMzRcMuRW6iqsgHgBcF+wrBwQQbzb2yWpC9GKY2f9jkzzWiJAOM3ZbdLwft+q2Z3I/UbvmU 0NWtz687dj9/JLiJI8ACUAU2niTd7wK8+UWn8y+D39dLugVezzXeAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRemoteOpenIcon "Private - Generated method" ^ icons at: #'smallRemoteOpen' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRemoteOpenIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRemoteOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRightFlushIcon "Private - Generated method" ^ icons at: #'smallRightFlush' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRightFlushIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallRightFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSZAQNL/31CdMHiGaBNS/yPbjIC3SHSD+3+EXoh5z4k2 wfs/qt2/ofAziW7Q+v8brhsSrn+IMYFgZAEAE0hMH/VkcbsAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSaveAsIcon "Private - Generated method" ^ icons at: #'smallSaveAs' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSaveAsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSaveAsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTgPGbLEcAAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAACV0lEQVQ4y52ST0iTYRzHP+/b/DNz8s7h a1q2iZpIHSI0tgQND2mQROEhhMQiqFiNeepgYR4MIQPxIEWHpCCEFQVF3SKhg2Z5KLKDmmhZ huRwbqXb3vfXYbYSLcjP6XmeL8+H7/PjUc51XLg4Fc5X5+ajC0ABUAfsTFFl2Zb+/VtWWrSv v/NKK39BqfH3NLl2lLmcufrk7sIcv9Nu3ROJG4x+WeT10IA59nGWUvub7b3td2fWFXjbOntj obmzcVGZNTR+pOWwyZJCY+0+ivKz6b7/AuPTCK7U+fXut+Nt8cn05wkREZmYGpWh0Qnx3Xgi 7tNXJTA8LT1P30rDpZvybnJG/iQcDovP7xVLmsVga66LYDCIlpmLqixglSgAI+Oz6JkWvs4v 8n7iA1uyrKAACKmpqQBY4jEQUzBMk/rWW2s6Dk0GicUNugKDdAUGAXjccQIkkasAppiYhknP GQ8AzceO4HGXs7QUIc+mUumuoKmhHoDjNcWYhomI/BaICHa7Rn6Oi2unyunrf0CpqwAVBRUF d5mT2/ce0VhdyOHKCjI2Z6wWAITDYXRdx5lXkpR4dhVR4tpG952HNFYXcrTKja7rRKPR5BMt AKZpEolEANB1HV3X6T1vpeV6gOWYwcnaMpoPHUBVVUKhEJFIBJvNlvgHPr9XKsr3IqwM+D8Y fvUy0cDjrgSRFYOSmLAiIMrKNqEvKS5mfHwMQUH5U+BwOHg+8CwZCLKmzf6qGgCyHQ4QJZlb ADRNIz3d+s+6ml0DwK7ZV51bfi3qag+yERSf33sZaGNjtP8Elb70qz97tp0AAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSaveIcon "Private - Generated method" ^ icons at: #'smallSave' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSaveIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSaveIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTcPnirYvwAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAAChElEQVQ4y52STUhUYRSGn7nd8ebP5Ezg tTHNkbJRbFFRNCYUuMgWRRQuQigsgoqpwVYtKspFEVQQBlK0KAoisCgoalvQIolEiqZFmVRq hqTo3JvO/flOC2Fssja9m/PB4Tyc9z1f4MjZ4yc/WxXa2LgzCVQBW4GGoCbZ0MKfPxYZzs27 58+d4B8KNHd07Y2trI9Vl5uDq2vKOqojhWttzyf9LcPr3ufqw9dR4pE3y7o77wz/FZA8fb7b nRo77InGqB9m2ihjgR6krWUjyysWc/n+C/yhPmIF43+b7yR5LCVfRgZERGTgc1p60wOSuvZE EgcvSM+rL9L19K20nrou7waH5XdZliWpjqTohu6ztDzGxMQE4ZJytMAkheIA0PdxFLNE5/t4 hvcDn1iyqBACAEJBQQEAuueCKMFXiu0nbszbsXdwAtfzudjzkos9LwF4fHYfyGxfA1CiUL6i 61AjAO27d9KYWMfMjE00pNGUWM/e1u0A7GlegfIVIjIHEBEikTAVZTEuHVjHzbsPiMeq0Aig ESBRX82te49o21zDjqb1FBUX5QMALMvCNE2qo7U5SOOq5dTGKrl8+yFtm2vYtSmBaZo4jpOz qAMopbBtGwDTNDFNk+6jhRy72kPW9dnfUk/7ti1omsbU1BS2bRMKheYAhmFQWVmZF96ahg08 u7IBANu2cRyH6enpeSHrAP39/bium9fwPA9d13PvPxWJRPIz8DyPdDrNyMgImUwGEUFEMAyD oaEhQqFQrlqWhWVZ+VdQSlFcXEQwGMx9EgDXdRE1CxM1ez7l+/kWwuEwpaWlRKNRALLZLEAu 7XhdHKUU8bo6lFIsiUZzlgOpjuQZ4DT/p85fkzszTNUiYm0AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallScreenshotIcon "Private - Generated method" ^icons at: #smallScreenshotIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallScreenshotIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallScreenshotIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIrSURBVDjLxVPLjhJBFD3V3dCY SZjwDipDRjCOCcTgLGalJmxYufAD0E/QHV9g3LjSsGDhik/QjTEaTdgaEsQQINEFJjwEecmr 6Yf3lkJmPwsruXWrq+85dc+9VcJxHFxkKLjg0HgqlUpP1+t1drvdXrIsS2w2G9dqtXKzt21b 6Lpu+P3+N4VC4QnH5/P5U3Lfy+XyL1EsFg9VVZ1kMhmwHAJIa1Tf4eH96zC+vcKLDyfwRm6i 1Wo/Go/HLwnsJWPtZ2oikainUil/JBJBp9NBr9fDcDjE5aMTfPz8E835bdw6vQMhBLrd7gNF UXSPxwNN08RsNrur0alJr9eLer2OcDiMdDoNkgKSglAohEajgUqlgkAggGw2i36/j8lkImOa zeYNjQMHgwGCwSC2B0d4/n6FhSlgU366cOHe1Wvwz+eUfgucJQPb7Tai0aiUqvC0WCwQi8Xw +ouBjaPA4yJzK7AUFz79OJDA0WgkwYZhgAq8z1JjAqq2tN+Wm4AqNGouXw9Bk+G4QR2SxmCO 4zV7mQGz7Fh5OI79F0wkCpmqCCyXSxlzPoM9wS4DqijcjgHTJv22Q+k5ksiNFabTqQSapilJ OJ79noAZa7UaMoc9qOYSG9oziUSxlriy+YpqtbrXvSPZEWjMxidwewLjMc6Oj2VxOGBO1Wdi vhvJZFLusf54PC5lMYHI5XKPqa/P6EP3+XyCry4T8E/2BHDoEIdv6fmH92/9Vvz31/gHd9iU VZFEDKoAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSelectIcon "Private - Generated method" ^ icons at: #'smallSelect' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSelectIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSelectIconContents "Private - Method generated with the content of the file /home/dgd/smallSelect.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABF0 RVh0U29mdHdhcmUAU29kaXBvZGmU4xfQAAABK0lEQVR4nKXOO0oEQRAG4L+6q2cfjojgBmJi YmroEQwNBBPxFF7AzBt4DMHcyFwUE2MRPIDruuxMd9VvsKCbrOJOQVNNPT5KcHK7gTjdA2UH MQzgnoCQIJ6AEAE3QFqQBSFk0DMcBaot1uxOobPjm/ODy/WhxrqvWvei1r35v1+FUIzM5mwz PZt7a2Qx98eX9/Hp1cOFJpV0uD8aYUmkKJJixLBCXKxv1qmCSz/0VKtly79FEJlnjdBVgG+o CljpgoVLJP499guQVFInIDtKJ6DJ3nQCPps86wTkgoYAVwYAycXYARAW8/8DKQZBgCgczdPr x3h3azBwEtmc5qQZWZx0gsXJUpzFOe85+fw2mQCIgrPrbVg6AtFAQgHpAOznyTzTHRCDLNRt ev8FfDedurn+q90AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSizeNames "Answer the names of the small icons" ^#('smallError' 'smallInfo' 'smallLock' 'smallQuestion' 'smallWarning' 'smallPushpin' 'smallBold' 'smallItalic' 'smallUnderline' 'smallStrikeOut' 'smallBarcode' 'smallHierarchyBrowser' 'smallSystemBrowser' 'smallScreenshot')! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallStrikeOutIcon "Private - Generated method" ^icons at: #smallStrikeOutIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallStrikeOutIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallStrikeOutIconContents "Private - Method generated with the content of the file smallStrikeOut.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE9SURBVDiNldO/K/5RFMDxF49f iUHf/JhkkUkpPwaD7BaTkk3Z/AUGizIp5S+wyGy0UQaFRd9MFrFQnkgIcQ2f8+jj6fOQW6d7 u+ec9zn33HOklFQE3VjHHsq4wz42MJa3/fLJOY/gEgkPOMP/OCd8YKkQgBJuwnAZzTlwAxbw FvqhIsBEKE9RV5gqq2Gzkr9vkK3+2C9SWBesbQzi5dtt2PcG/R0zRRnUkjp0YACLmAvuNQ5D jvBYkNFJSukNpiP6X6WnUoNyfFcpR29BO9riXFlPuMIzXr9q8JPgH+bjWQkHVXolTGH2F1BX RH5HZ3Uf3Ad98BfIXthNVgN2QrGJ+hrOrbK2fpDv1FCORlESdjGMptA1YlzWpQlbtYZpLqpc +aYXnOfACcfoKAQEpA9rEa0sG6Bb2UgvoFT9tE9NmYDjaYSwiQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSystemBrowserIcon "Private - Generated method" ^icons at: #smallSystemBrowserIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSystemBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallSystemBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallUnderlineIcon "Private - Generated method" ^icons at: #smallUnderlineIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUnderlineIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallUnderlineIconContents "Private - Method generated with the content of the file smallUnderline.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADaSURBVDiN7dMxSkNBEAbgb8UY wUrwADZ2QsAbWIl4AcGzeI9gZSmpbFJ7Am1jE4hYCAoWWoiCGYs3Jk94SYRYOjDMzuw//+6w /0ILl+mtiDDLcZa47VrNOiK9vYBglLjOd23FkvZP8EcEH6qngc0F+I2M7xOCiBjjJfOdWZ2l lDVsZfpcvwHcZNybc/p+xvuIeJxUU2EnqjHecNigwF3cJub0x14N1DWV9AP6Kt1f4zPrPaw2 EiTJAc4xwFPOOsAFjpr+R0FBZ87sTTaMiFfZ3MZdrn9rxxFxBV+mVKeTcAXyQwAAAABJRU5E rkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallUndoIcon "Private - Generated method" ^ icons at: #'smallUndo' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUndoIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallUndoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCg4AFiOWIQAAAhdJREFUOMuVk09okmEc x7/P877P1OX+6MYa0ojWwfIQFIRBgxUEQrBDeAiCYkRQXTuMPHgox4wdIrp0qVhBEDTpUCwW wVKMWnaKlLRoDXITXL4654bv6/M8HcKlm5Z9b88Xvp/neX7P9wGaKDoFiRakbjXm7qGXKcii RdHahd/HbExB1u0NtZr/cwK/j9k8TiPn9oaAwtXNa+ikJ8MFzYC2xcPJ7MXxCb1UCyBbw0Zu HCrVAIsXkBVwLgGI8pvZx18ZBXmVKHgCQeNHFaD4fazd4zRW3d4QjJ/XQShFuQyAL0JfT0Fb iUHKkjroOtFntii9NuRPD+yrvI5ExTIAKBMXhF4NU6r8pqoMUkoIwSGEgOBrKK+nYLKYyI6u XZ2dYu3Q7v36o0hUGPRlktnnQ16wjpMAAM51LHz7iMXvcaTTX+oGVtTisPe7YG5nB4ad3eHt MxgZw0LiJva4rkDwYl1YFO8ik2Uo6xw9jkv49Ha6dPxs2qoCQCBoaPAxOzCZc4+MAQBiM3fq 38tC4DpyGYXMA5jMOgiRal0PAkFDm00y+/yzyc3M0CjI0CgIgIOlvDyVmLv9vm/gHLjoAJHS hL/VuFGVw/fheDdN5eryDRF5aJPbmli7cyN/+DyWFGGVG8U4hGrPNwU0g0SnMNjtOCy07BIA 3Gr4mf6ho1079858jj2pHDujXftvgGzrt6Y+PH9Bde1p1fsFBRbiJSu+JBQAAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallUpdateIcon "Private - Generated method" ^ icons at: #'smallUpdate' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUpdateIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallUpdateIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMiSURBVDiNbVJNbFRlFD33e++V +a0zbQdbqLYKhhKmoaIzjX/RmEY3xGBYqLxEjJCB8LNhBxsMTQwRdGGi4AOjMUwlmDQBN/wE IZLUwqtx0dCS1NLGAUY7tB3ozLTz3vu+66LzkllwkpvcxT0nJ+dcYmb4SGWyzzTo2hEQ3vSk atWEmCfCuOPKEwAu2Jbp1t0eBHCCfIF0JrtF08RAT9cqfV1ns9HWFAGYUShWMDJ2v3xn+qEn Fe+2LfNselc2w4zvAMSImZHKZNcbuhjZ2tcdiseC0InQHA0gHNARDRkIGgIzxUUczw5XCsWK HQ019D4uVw1mNBEz49U9Z0/1rGv7NBgwxK3RHKquB0PX5JrVscW+9PPh3vWtpAmCEIRfrk2o t15sFwe+vuo4rmzRAYCZP7wzXRCup1gxLzLjM8eVZ8anZ5MT9+aPXu9o7tq3dVMoEQvh43e7 RC0GAqAEAEipwlXH85IvPPuDlOoRgEHbMvO2ZV7549uPXhqdLOzdfewS7j8sYXqmDKkYAAMA CyyvqumpSH9jJPBVZ/vKbgBTdWnruiZ2bnsn6XY+HUWicQU0Qb4D1mt38V8/37yAJ+O0J9Vr F4cnq1ftqSXfvOOqAAD2W6gCMGoErpvfAOwE4D5BWLct854v4J0/+r4GEJgZF+1/1Knzf+Wk VD22ZRbrWYezY6tK5aWO30fGbwCI6QBABBAR7v5XhiEYJwf/JABf1JNTmWyYiO72blx7Jj8z lwKgAagKABBEBAAdiRBWt4Tx5f63qa0lcuyVPT/fSmWy6ZrG9hWGrufyswfyheLrmkaubZmu WHZAeFxxcWFoij2P0b4yisM73gh90Jd8ubU5ci29a8A1dPGNVDI+92gBTY1B0oQYBAD/kaj/ x6Glidzc5KXhyc7Mlk3hRCyI7rUJeq49HiqWXfw7W4LjeBQJGjh3ebTiSXUEAJYfSTFN5OZO 3zy5LfmgsPBJ//c35o8P3CwN384jP1tG1ZUQRCjMl+S5y6OLUqmMbZljAOC38BOA7bZlci0w A8B7DYa2VzFvkFLFDV2bIcJQ1ZGHbMv82w/3fy5VdmoTZczGAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57'! smallVolumeIcon "Private - Generated method" ^ icons at: #'smallVolume' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallVolumeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallVolumeIconContents "Private - Method generated with the content of the file /home/dgd/smallVolume.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAmJLR0QA/4ePzL8AAAE3SURB VHjajdE/SJRxHMfxF/f8Hp/n7vLhlAKhyKRCOpccA6EbFEW0BsciyKWphiBoCRuiQXEJnIyG ampyEppydy8wBOFEyPzHA0X1wNGggV0Ivbbv8h3eH44rKWkT/XUNqdhxgrjz5kBTA90SiVlD h0+PdI6PvZhKwDmPVL13G4KaOqcuTL+6k3z8iis+Sd0175pxy0H91ss066g+SKo+Q68uq4Zd 9M5DyyUdE6dHzg7XIrmdM7XHPriq8NoNaxJdgRypA7/Ezo8e9NjDpgzfhMC+kp92FXZb++u+ KKPbd5S1Ak2xVJ+WH3nzqQE5Jq3IpPJgY2GOrDe+NxhCYUvZkkGXvHHfkuJPhkr/4pNiZlsD dbPq+ryVHS9Zqc1c39JAJhF5Zqw9dsXzw7yIXBb/u0fUNt7/+A0ZzEdfNHX2/wAAAABJRU5E rkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallWarningIcon "Private - Generated method" ^icons at: #smallWarningIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallWarningIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallWarningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallWindowIcon "Private - Generated method" ^ icons at: #'smallWindow' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallWindowIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! smallWindowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! solidMenuIcon "Private - Generated method" ^ icons at: #'solidMenu' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self solidMenuIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! solidMenuIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/solidMenu.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABHNCSVQFBQUBSsjp7wAAAE5J REFUeF5jgACO/wykA5AmGCZGHVaNxGISNO648AO7RpAEIYxXI8lOJaSRIqeiaSbeRrwaSXAu lZxKQsiSEh0oSY+cJEdissORGUjLWgBvFzCDqCcU6AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:50'! sourcePressedIcon ^ icons at: #'sourcePressedIcon' ifAbsentPut:[ self sourcePressedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:24'! sourcePressedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 738197504 2852126720 4227858432 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3959620355 2399141888 234881024 14684133 14684133 14684133 14684133 14684133 1107296256 4093640704 4278190080 4278321666 4281677109 4286151033 4287664272 4289111718 4289769648 4289769648 4289769648 4289769648 4289111718 4287466893 4284111450 4280624421 4278190080 4278190080 3842048257 1090519040 14684133 14684133 14684133 1207959552 4160749568 4278190080 4280295456 4287269514 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4287993237 4280953386 4278190080 4110417920 922746880 14684133 268435456 3875536896 4278190080 4280821800 4287598479 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4283585106 4278190080 3942645760 520093696 2533359616 4278190080 4279505940 4285822068 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291217094 4282335039 4278190080 2583691264 4043309056 4278190080 4282992969 4289243304 4289769648 4289769648 4289769648 4289769648 4289703855 4286940549 4285361517 4283914071 4283782485 4284703587 4286019447 4288387995 4289769648 4289769648 4289769648 4289769648 4289901234 4290098613 4278255873 4160749568 4278190080 4279242768 4285361517 4289769648 4289769648 4289769648 4289769648 4286216826 4280032284 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4279111182 4286611584 4289769648 4289769648 4289769648 4291611852 4282532418 4278190080 4278190080 4281150765 4287203721 4289769648 4289769648 4289769648 4286216826 4278190080 4278190080 4280226816 4284300032 4286205440 4286139648 4284825856 4282920448 4279569920 4278190080 4280492835 4289769648 4289769648 4289769648 4290822336 4286940549 4278190080 4278190080 4282861383 4288848546 4289769648 4289769648 4289111718 4278979596 4278190080 4285482496 4292446976 4285614080 4282263552 4280358144 4282066432 4284234496 4286270976 4278190080 4280361249 4289769648 4289769648 4289769648 4290098613 4288716960 4278190080 4278190080 4283716692 4289506476 4289769648 4289769648 4286479998 4278190080 4281277952 4293694976 4283051776 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4280361249 4289769648 4289769648 4289769648 4289835441 4290559164 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4284440415 4278190080 4284825856 4293169408 4278190080 4278190080 4284966759 4287927444 4286808963 4284506208 4280624421 4278190080 4282335039 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4284835173 4278190080 4284431360 4293694976 4280555264 4278190080 4278321666 4280492835 4282729797 4285887861 4289177511 4288980132 4289703855 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4287072135 4278190080 4279372800 4292578304 4291264256 4283314688 4278715648 4278190080 4278190080 4278190080 4278519045 4283914071 4289506476 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4289769648 4281019179 4278190080 4280095232 4288044800 4292972288 4293300736 4290344448 4286731008 4282066432 4278321408 4278190080 4281545523 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4289769648 4288387995 4280558628 4278190080 4278190080 4278584320 4281803520 4285876992 4291592704 4293760768 4290278656 4279241472 4278190080 4285953654 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289572269 4285164138 4281216558 4278321666 4278190080 4278190080 4278190080 4285876992 4293760768 4286270976 4278190080 4282795590 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4288651167 4281216558 4283124555 4287927444 4289769648 4289111718 4286611584 4282729797 4278255873 4278584320 4292906752 4289096192 4278190080 4281348144 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4285427310 4278190080 4278190080 4278190080 4280821800 4283058762 4284572001 4282795590 4278255873 4278518528 4292840960 4287387904 4278190080 4282598211 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4285427310 4278190080 4279898368 4278978304 4278190080 4278190080 4278190080 4278190080 4278190080 4285876992 4293760768 4282460416 4278190080 4284769380 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4285427310 4278190080 4281409280 4288964608 4289030400 4287059456 4284891392 4286402560 4290081536 4292249600 4284365824 4278190080 4278979596 4288651167 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4287598479 4278452995 4278190080 4278190080 4278650112 4280358144 4281803520 4281803520 4280095232 4278452736 4278190080 4278321666 4286216826 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4289769648 4287203721 4283585106 4280427042 4278255873 4278190080 4278190080 4278190080 4278190080 4278453252 4282269246 4287795858 4289769648 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4283979864 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289440683 4288256409 4287072135 4287006342 4288453788 4289638062 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4291480266 4278190080 4278190080 4216805207 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172394929 4224305609 4278190080) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:51'! sourceSelectedIcon ^ icons at: #'sourceSelectedIcon' ifAbsentPut:[ self sourceSelectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! sourceSelectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 14684133 14684133 572991271 2623035480 3445645408 3412814699 4237332624 4221147545 4120484249 4103707033 4187593113 4137458844 3030623139 3115035563 2393417896 434891755 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 223169869 2656655705 4099035730 4286611584 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4022386880 2661590180 177838489 14684133 14684133 14684133 14684133 14684133 234881024 3444526927 4284243036 4287927444 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4292138196 3568415153 341268311 14684133 14684133 14684133 16777216 2907787601 4283979864 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290559164 4292335575 3215830445 117440512 14684133 14684133 2069189973 4267202648 4285493103 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291414473 4292335575 2476646046 14684133 33554432 3763359824 4283979864 4288914339 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289967027 4292335575 3955672774 184549376 1195261502 4267202648 4285032552 4289769648 4289769648 4289769648 4289769648 4289769648 4286940549 4282004781 4280097041 4278584579 4278518786 4279439370 4280688921 4282860607 4285229931 4289572269 4289769648 4289769648 4289769648 4291677645 4292335575 1653509774 2723567190 4283979864 4286808963 4289769648 4289769648 4289769648 4289769648 4283189572 4280227592 4287979264 4291658496 4293432320 4293432320 4292249600 4290409984 4287190784 4280161542 4286282619 4289769648 4289769648 4289769648 4290822336 4292335575 3182144427 3696514132 4283979864 4288453788 4289769648 4289769648 4289769648 4285756274 4280490248 4293103616 4293760768 4293498112 4291001344 4288833280 4290278656 4292380928 4293760768 4282921226 4286085240 4289769648 4289769648 4289769648 4290098613 4292335575 3870799799 3813362507 4283979864 4289111718 4289769648 4289769648 4289769648 4281610279 4288964608 4293760768 4292052480 4279373061 4280426005 4282333744 4281149213 4279241992 4281344522 4280292869 4286085240 4289769648 4289769648 4289769648 4289835441 4292335575 3904617403 4233187665 4284045657 4289440683 4289769648 4289769648 4289769648 4279439370 4291986944 4293760768 4285285891 4249832779 4222660784 4222660784 4222660784 4222529198 4269834368 4283321159 4288519581 4289769648 4289769648 4289769648 4289835441 4292269782 4240095930 4249964881 4283979864 4289374890 4289769648 4289769648 4289769648 4279768334 4291855616 4293760768 4289490432 4279176199 4283255622 4286348412 4288782753 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4256873146 4249899088 4283979864 4289374890 4289769648 4289769648 4289769648 4282070832 4287256577 4293760768 4293760768 4291592704 4286337026 4282264330 4279176198 4280754714 4284308570 4289243304 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4240161723 4216344656 4283979864 4289374890 4289769648 4289769648 4289769648 4287927444 4279241991 4288899072 4293760768 4293760768 4293760768 4293760768 4293563648 4289884672 4283972103 4279965457 4287927444 4289769648 4289769648 4289769648 4289835441 4292335575 4206607291 4182724431 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4287203721 4280228885 4280884746 4286008579 4289950208 4293235200 4293760768 4293760768 4293760768 4287191041 4280952352 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289703855 4287269514 4283716175 4281083678 4279044613 4284037894 4292578304 4293760768 4293694976 4279110405 4288651167 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4288453788 4288980132 4289769648 4289769648 4289769648 4289769648 4288585374 4282137143 4285417219 4293760768 4293760768 4281213194 4287203721 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4280426007 4278847492 4282794813 4287006342 4288914339 4289769648 4288848546 4282531900 4285351685 4293760768 4293760768 4279635975 4288387995 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4280294163 4290016000 4286468354 4281278730 4279110405 4278847493 4278979077 4282592778 4292709632 4293760768 4291592704 4278979078 4289703855 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4280294163 4290804480 4293760768 4293760768 4293760768 4292840960 4293629440 4293760768 4293760768 4292775424 4281278728 4284769121 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4283386949 4278781700 4282001674 4286205441 4288044800 4289555968 4289753088 4288044800 4284957443 4279176198 4283255365 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289309097 4286414205 4283913555 4282794554 4281609765 4281412643 4282662969 4283979606 4288322202 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4115483981 4216805207 4171934378 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172394929 4225226711 4105878202) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:51'! sourceUnselectedIcon ^ icons at: #'sourceUnselectedIcon' ifAbsentPut:[ self sourceUnselectedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! sourceUnselectedIconContents ^ (Form extent: 24@24 depth: 32 fromArray: #(14684133 14684133 14684133 14684133 14684133 572991271 2623035480 3445645408 3412814699 4237332624 4221147545 4120484249 4103707033 4187593113 4137458844 3030623139 3115035563 2393417896 434891755 14684133 14684133 14684133 14684133 14684133 14684133 14684133 14684133 223169869 2656655705 4099035730 4286611584 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290822336 4022386880 2661590180 177838489 14684133 14684133 14684133 14684133 14684133 234881024 3444526927 4284243036 4287927444 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290361785 4292138196 3568415153 341268311 14684133 14684133 14684133 16777216 2907787601 4283979864 4287335307 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4290559164 4292335575 3215830445 117440512 14684133 14684133 2069189973 4267202648 4285493103 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4291414473 4292335575 2476646046 14684133 33554432 3763359824 4283979864 4288914339 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289703855 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289967027 4292335575 3955672774 184549376 1195261502 4267202648 4285032552 4289769648 4289769648 4289769648 4289769648 4289769648 4286940549 4281611316 4279769112 4278519045 4278387459 4279176975 4280295456 4282598211 4285229931 4289572269 4289769648 4289769648 4289769648 4291677645 4292335575 1653509774 2723567190 4283979864 4286808963 4289769648 4289769648 4289769648 4289769648 4282992969 4279505940 4283453520 4285493103 4286414205 4286414205 4285756275 4284769380 4283058762 4279440147 4286282619 4289769648 4289769648 4289769648 4290822336 4292335575 3182144427 3696514132 4283979864 4288453788 4289769648 4289769648 4289769648 4285756275 4279703319 4286216826 4286611584 4286479998 4285098345 4283914071 4284703587 4285822068 4286611584 4281019179 4286085240 4289769648 4289769648 4289769648 4290098613 4292335575 3870799799 3813362507 4283979864 4289111718 4289769648 4289769648 4289769648 4281216558 4283979864 4286611584 4285690482 4278979596 4280032284 4281874488 4280624421 4278979596 4280229663 4279505940 4286085240 4289769648 4289769648 4289769648 4289835441 4292335575 3904617403 4233187665 4284045657 4289440683 4289769648 4289769648 4289769648 4279176975 4285624689 4286611584 4282071867 4249701709 4222660784 4222660784 4222660784 4222529198 4269834368 4283124555 4288519581 4289769648 4289769648 4289769648 4289835441 4292269782 4240095930 4249964881 4283979864 4289374890 4289769648 4289769648 4289769648 4279505940 4285558896 4286611584 4284308829 4278913803 4283058762 4286348412 4288782753 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4256873146 4249899088 4283979864 4289374890 4289769648 4289769648 4289769648 4281742902 4283124555 4286611584 4286611584 4285427310 4282664004 4280690214 4278913803 4280361249 4284243036 4289243304 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4240161723 4216344656 4283979864 4289374890 4289769648 4289769648 4289769648 4287927444 4278979596 4283979864 4286611584 4286611584 4286611584 4286611584 4286479998 4284506208 4281479730 4279637526 4287927444 4289769648 4289769648 4289769648 4289835441 4292335575 4206607291 4182724431 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4287203721 4279966491 4279966491 4282532418 4284572001 4286282619 4286611584 4286611584 4286611584 4283124555 4280624421 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289703855 4287269514 4283585106 4280624421 4278782217 4281545523 4285953654 4286611584 4286545791 4278848010 4288651167 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4288453788 4288980132 4289769648 4289769648 4289769648 4289769648 4288585374 4282006074 4282137660 4286611584 4286611584 4280098077 4287203721 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4280098077 4278650631 4282532418 4287006342 4288914339 4289769648 4288848546 4282335039 4282203453 4286611584 4286611584 4279176975 4288387995 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4279900698 4284572001 4282729797 4280163870 4278848010 4278716424 4278782217 4280887593 4286019447 4286611584 4285427310 4278782217 4289703855 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4279900698 4285032552 4286611584 4286611584 4286611584 4286085240 4286545791 4286611584 4286611584 4286085240 4280098077 4284703587 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4283124555 4278650631 4280558628 4282532418 4283519313 4284308829 4284440415 4283519313 4281940281 4278913803 4282992969 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289309097 4286414205 4283782485 4282400832 4281150765 4281019179 4282335039 4283914071 4288322202 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4165947215 4283979864 4289374890 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289769648 4289835441 4292335575 4172987066 4115483981 4216805207 4171934378 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172329136 4172394929 4225226711 4105878202) offset: 0@0)! ! !ThemeIcons methodsFor: 'private - utilities' stamp: 'EstebanLorenzano 5/10/2013 14:38'! storeIconMethodFor: each | base64 selector source | base64 := self base64ContentsOfFileNamed: each fullName. selector := (each asFileReference base, 'IconContents') asSymbol. source := '{1} "Private - Method generated" ^ ''{2}''' format: {selector. base64}. self class compile: source classified: 'private - contents'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:51'! stringIcon ^ icons at: #'stringIcon' ifAbsentPut:[ self stringIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! stringIconContents ^ ((ColorForm extent: 12@12 depth: 8 fromArray: #( 673716502 100672805 623061032 673717016 118757928 587409448 673710082 33825576 354166824 673717518 268698408 19277864 673714447 504037672 638134312 673720360 302655016 606152744 673720360 673588264 555886632 673720360 673456424 572991528 673720360 671621672 656418856 673720360 673654568 538912808 673720360 671948840 84682792 673720360 673128232 320284712) offset: 0@0) colorsFromArray: #(#(0.439 0.721 0.937) #(0.447 0.674 0.93) #(0.573 0.784 0.953) #(0.451 0.682 0.937) #(0.534 0.761 0.949) #(0.435 0.631 0.926) #(0.439 0.729 0.945) #(0.573 0.788 0.953) #(0.443 0.651 0.926) #(0.443 0.663 0.93) #(0.427 0.671 0.93) #(0.494 0.733 0.945) #(0.431 0.631 0.926) #(0.435 0.643 0.926) #(0.498 0.745 0.945) #(0.478 0.694 0.934) #(0.569 0.78 0.953) #(0.941 0.965 0.992) #(0.941 0.961 0.992) #(0.431 0.628 0.926) #(0.538 0.764 0.949) #(0.447 0.682 0.937) #(0.435 0.706 0.937) #(0.431 0.628 0.918) #(0.522 0.768 0.949) #(0.827 0.898 0.977) #(0.455 0.694 0.937) #(0.419 0.71 0.937) #(0.447 0.682 0.93) #(0.455 0.698 0.937) #(0.443 0.71 0.937) #(0.435 0.635 0.926) #(0.435 0.639 0.926) #(0.443 0.659 0.926) #(0.439 0.651 0.926) #(0.451 0.686 0.937) #(0.443 0.659 0.93) #(0.439 0.717 0.937) #(0.443 0.671 0.93) #(0.435 0.647 0.926) #( ) ))! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:51'! testGreenIcon ^ icons at: #'testGreenIcon' ifAbsentPut:[ self testGreenIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! testGreenIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215 16777215 436207616 3204448256 4278323202 4280376350 4283209800 4283603789 4281625137 4278454788 3204448256 436207616 16777215 16777216 3204448256 4279053323 4284135253 4285913199 4286964095 4287686539 4287686539 4286173300 4279974425 3204448256 16777216 1694498816 4278390018 4281819188 4281322278 4281584939 4283421512 4286701692 4287686539 4287686539 4286502265 4278718727 1694498816 3003121664 4278532866 4279526927 4278962688 4278962688 4278962688 4280077330 4285521256 4287686539 4287686539 4282680896 3003121664 3858759680 4278596868 4279588369 4278962688 4278962688 4278962688 4278962688 4279880718 4286505081 4287686539 4284724574 3858759680 3858759680 4278596100 4279775511 4279091970 4278962688 4278962688 4278962688 4278962688 4282700348 4286964095 4284330585 3858759680 3003121664 4278531331 4279838232 4280186137 4278962688 4278962688 4278962688 4278962688 4280863775 4285913199 4281432365 3003121664 1694498816 4278258432 4279710997 4280959017 4280909604 4279288326 4278962688 4278962688 4280928544 4284924000 4278718727 1694498816 16777216 3204448256 4278592773 4280634914 4281948471 4282806595 4282814529 4282884930 4284523356 4279448081 3204448256 16777216 16777215 436207616 3204448256 4278257409 4279649811 4280902950 4281167401 4279980312 4278388995 3204448256 436207616 16777215 16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:52'! testNotRunIcon ^ icons at: #'testNotRunIcon' ifAbsentPut:[ self testNotRunIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! testNotRunIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215 16777215 436207616 3204448256 4278584838 4282795590 4286348412 4286611584 4283848278 4278716424 3204448256 436207616 16777215 16777216 3204448256 4280295456 4287927444 4289967027 4290690750 4291217094 4291217094 4289703855 4281216558 3204448256 16777216 1694498816 4278782217 4283453520 4287664272 4287861651 4288848546 4290559164 4291217094 4291217094 4290032820 4279111182 1694498816 3003121664 4280756007 4282861383 4286743170 4286743170 4286743170 4287269514 4289967027 4291217094 4291217094 4285361517 3003121664 3858759680 4280492835 4282203453 4286743170 4286743170 4286743170 4286743170 4287137928 4290493371 4291217094 4288059030 3858759680 3858759680 4280361249 4280821800 4286479998 4286743170 4286743170 4286743170 4286743170 4288453788 4290690750 4287795858 3858759680 3003121664 4280492835 4280361249 4283716692 4286743170 4286743170 4286743170 4286743170 4287598479 4289967027 4284374622 3003121664 1694498816 4278650631 4280953386 4281874488 4284440415 4286545791 4286743170 4286743170 4287466893 4288585374 4279111182 1694498816 16777216 3204448256 4279834905 4282269246 4283256141 4284572001 4285822068 4286611584 4287203721 4280756007 3204448256 16777216 16777215 436207616 3204448256 4278519045 4281611316 4283387727 4283782485 4282203453 4278650631 3204448256 436207616 16777215 16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:52'! testRedIcon ^ icons at: #'testRedIcon' ifAbsentPut:[ self testRedIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! testRedIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215 16777215 436207616 3204448256 4278714882 4284227102 4288170056 4288367949 4285149489 4278846468 3204448256 436207616 16777215 16777216 3204448256 4281076491 4290205013 4292374383 4292968319 4293364619 4293364619 4291851380 4281997593 3204448256 16777216 1694498816 4279042562 4284494900 4291503654 4291636011 4292036680 4292902012 4293364619 4293364619 4292180345 4279305991 1694498816 3003121664 4282057218 4284878607 4291428352 4291428352 4291428352 4291564050 4292700264 4293364619 4293364619 4286988352 3003121664 3858759680 4281664516 4283830545 4291428352 4291428352 4291428352 4291428352 4291563022 4292901241 4293364619 4290076254 3858759680 3858759680 4281467908 4281407255 4290970114 4291428352 4291428352 4291428352 4291428352 4291968060 4292968319 4289878361 3858759680 3003121664 4281664259 4280686616 4285864217 4291428352 4291428352 4291428352 4291428352 4291567391 4292374383 4286131501 3003121664 1694498816 4278910976 4281668885 4282394921 4286522404 4290905606 4291428352 4291428352 4291371040 4290797664 4279305991 1694498816 16777216 3204448256 4280616197 4283310626 4284036919 4285612867 4287643969 4288889410 4288896092 4281471249 3204448256 16777216 16777215 436207616 3204448256 4278649089 4282782483 4284818982 4285409577 4283504664 4278780675 3204448256 436207616 16777215 16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:57'! testRunnerIcon "Private - Generated method" ^ icons at: #'testRunnerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRunnerIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! testRunnerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:52'! testYellowIcon ^ icons at: #'testYellowIcon' ifAbsentPut:[ self testYellowIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! testYellowIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215 16777215 436207616 3204448256 4278782211 4285164839 4289375827 4289572953 4286020153 4278913797 3204448256 436207616 16777215 16777216 3204448256 4281545744 4291612771 4293915774 4294376077 4294705048 4294705048 4293191809 4282467102 3204448256 16777216 1694498816 4279176964 4285164603 4293850685 4294047809 4294113371 4294376074 4294705048 4294705048 4293521030 4279505928 1694498816 3003121664 4282862090 4286151963 4294377244 4294377244 4294377244 4294311212 4294376312 4294705048 4294705048 4288059722 3003121664 3858759680 4282335499 4284835867 4294377244 4294377244 4294377244 4294377244 4294311465 4294376327 4294705048 4291349354 3858759680 3858759680 4282072330 4281808922 4293785117 4294377244 4294377244 4294377244 4294377244 4294113616 4294376077 4291218021 3858759680 3003121664 4282467082 4280887578 4287204646 4294377244 4294377244 4294377244 4294377244 4294113847 4293915774 4287270200 3003121664 1694498816 4279111170 4282137882 4282795820 4287862577 4293653536 4294377244 4294377244 4293784887 4292139373 4279505928 1694498816 16777216 3204448256 4281019657 4283914536 4284506684 4286283082 4288783436 4290362703 4289836389 4282006550 3204448256 16777216 16777215 436207616 3204448256 4278716418 4283519770 4285756975 4286415155 4284375328 4278848004 3204448256 436207616 16777215 16777215 16777215 16777216 1694498816 3003121664 3858759680 3858759680 3003121664 1694498816 16777216 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! tinyMenuIcon "Private - Generated method" ^ icons at: #'tinyMenu' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self tinyMenuIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! tinyMenuIconContents "Private - Method generated with the content of the file /home/plantec/dvpt/Pharo/Sprint-10-09/Icons/tinyMenu.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAANklEQVR4XmMAgj9A/A0PBsmD wbeGhob9uDBMngGZgQMgFBLCpJtIrMI/VLeaYDjCDcIXjjAMANORazeIMUQRAAAAAElFTkSu QmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! toolsIcon "Private - Generated method" ^ icons at: #'toolsIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self toolsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57'! toolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QkaDBM5i2PCSAAAAfBJREFUOMulkktoE2EU hb+Z+EyKTRQKgkqwzMaFtt1FrC40FGJm60JwIVSkqLUtElICFQNDQqBrQXRlQIriwomN0GJX gtI2iUkXFYJVadOXhiBERDozbmaGMR3rwrP7ueece++5P/wnBOcjnVGigArI8Vgi9xdNNJ1R bI7YUlT7r/YDqKaZq/j6tQHNbLQd6YxiNBp1I51RDPdaw6pFAcR0RolaZKur19vmZhwFePDw PvFYQgZyACKgDt4cMp4+mzAA9fatETbX15A6Jer1r/das4ndGRUsMYBgFW8MDBqatiXoum7o ukZhfk4ovC8CyDsFK7R0sBHpu0i5UmG59gUgGY8l7v7zjE68yr80SpUS3Sd7KJYLmBNMArqr QTCSOgzUrPeVkE7XCYmjR47RbDZ5N/cWtzU8TvH4cJi+UCcdAS/ZmU2Ot39LLn1eOtd9qoeA P8BKbfnyhfD5+emp11XAABCDkVQXUHs0JjNbXmS2vEjHQR8A5t5yLv8CSZI4e7rX+mR2HiJQ HB8OM/WmxJamI+7zs1Fv2iOaI8vZJ4850O7nTKgXYMxpAMDuXR72+A7x88cvsvkFgHCrSS6v Uv1Y/SNsEWBl4zv7fQHa9np4PvMBIPxpcnTaSTRNkmvrqwtA0r5CMJK6BEw4uNvEO+E3N+LV 9uq8VLwAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:52'! traitIcon ^ icons at: #'traitIcon' ifAbsentPut:[ self traitIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:25'! traitIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 201326592 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 50331648 2734686208 16777215 16777215 855638016 1224736768 1023410176 838860800 1174405120 1207959552 1191182336 1895825408 2181038080 704643072 33554432 2399141888 1409286144 201326592 16777215 83886080 3640655872 922746880 16777215 16777215 16777215 16777215 1426063360 503316480 16777215 16777215 16777215 1862270976 2483027968 16777215 16777215 16777215 16777215 16777215 1258291200 16777215 16777215 16777215 318767104 3556769792 234881024 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2516582400 1476395008 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 788529152 3254779904 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 3238002688 905969664 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1610612736 2801795072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 67108864 3892314112 1258291200 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2147483648 1862270976 788529152 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! transcriptIcon "Private - Generated method" ^ icons at: #'transcriptIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self transcriptIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! transcriptIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADPSURBVCjPdZFNCsIwEEZHPYdS z1DaHsMzuPM6RRcewSO4caPQ3sBDKCK02p+08DmZtGkKlQ+GhHm8MBmiFQUU2ng0B7khClTd QqdBiX1Ma1qMgbDlxh0XnJHiit2JNq5HgAo3KEx7BFAM/PMI0CDB2KNvh1gjHZBi8OR448Gn AkeNDEDvKZDh2Xl4cBcwtcKXkZdYLJBYwCCFPDRpMEjNyKcDPC4RbXuPiWKkNABPOuNhIteg z0pGFkD+y3p0s48DDB43dU7+eLWes3gdn5Y/LD9Y6skuWXcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:53'! uncommentedClassIcon ^ icons at: #'uncommentedClassIcon' ifAbsentPut:[ self uncommentedClassIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:26'! uncommentedClassIconContents ^(Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 1361772544 2905276416 1865089024 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2976382976 4292214784 2402025472 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2727280640 4294901760 2201354240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2055667712 4294574080 1797980160 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1634795520 4293787648 1445658624 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1903165440 4292804608 908787712 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2256076800 4291231744 254476288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2625503232 4088987648 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1350893568 566165504 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 596443136 132186112 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1664483328 4242014208 3669098496 120258560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1227554816 3985440768 1986789376 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! upArrowIcon "Private - Generated method" ^icons at: #upArrowIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self upArrowIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! upArrowIconContents "Private - Method generated with the content of the file graphics\icons\upArrow.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAABh0 RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAAH1JREFUSEtj/A8EDLQEIAtIAUC3 kKL8P2mqIb6lnQUgw2GYWFtIcg5NLWhoaIC7HmQRiE8MINoHyK4nJZiIsgCb4cRaMvAWODg4 oIQ9um9A8vgAUT6AGUDTVAQtUoZwPhj1ATG5HiW5EqUBVPoSq3A0DogKqdGcTFQwkaoIAGEN sTct/gBTAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:53'! upFullIcon ^ icons at: #'upIcon' ifAbsentPut:[ self upFullIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:26'! upFullIconContents ^(Form extent: 24@24 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 234881024 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 805306368 234881024 16777215 16777215 2483032832 4076880128 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4043327744 4076880128 2483032832 16777215 16777215 2550141952 4278219776 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278219776 2550141952 16777215 16777215 2550141952 4278219776 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278219776 2550141952 16777215 16777215 2231374080 3791660032 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3875547136 3875547136 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3741329664 3791660032 2231374080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1006636288 3808439296 3808439296 1006636288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 805309184 3774883072 4278222336 4278222336 3774883072 805309184 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 637536000 3724550656 4278221824 4278222848 4278222848 4278221824 3724550656 637536000 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 503316480 3674217984 4278221312 4278222848 3841995520 3841995520 4278222848 4278221312 3674217984 503316480 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 385875968 3607108352 4278220800 4278222848 3909105664 1442845184 1442845184 3909105664 4278222848 4278220800 3607108352 385875968 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 285212672 3523221504 4278220032 4278222848 3959439616 1761612544 16777215 16777215 1761612544 3959439616 4278222848 4278220032 3523221504 285212672 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 201326592 3439334912 4278219264 4278222848 4009773568 2046825728 16777215 16777215 16777215 16777215 2046825728 4009773568 4278222848 4278219264 3439334912 201326592 16777215 16777215 16777215 16777215 16777215 16777215 16777215 134217728 3338671360 4261440768 4278222848 4060107264 2365592576 16777215 16777215 16777215 16777215 16777215 16777215 2365592576 4060107264 4278222848 4261440768 3338671360 134217728 16777215 16777215 16777215 16777215 16777215 83886080 3204453376 4244662528 4278222848 4127218176 2634028288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2634028288 4127218176 4278222848 4244662528 3204453376 83886080 16777215 16777215 16777215 33554432 3053458432 4194329856 4278222848 4177551616 2885686528 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2885686528 4177551616 4278222848 4194329856 3053458432 33554432 16777215 16777215 1509951744 4076880384 4278222848 4227885056 3087013120 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 3087013120 4227885056 4278222848 4076880384 1509951744 16777215 16777215 33554432 2919240960 4160769280 3271562752 100663296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100663296 3271562752 4160769280 2919240960 33554432 16777215 16777215 16777215 33554432 1996492544 167772160 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 1996492544 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/10/2013 13:53'! upIcon ^ icons at: #'upIcon' ifAbsentPut:[ self upIconContents ].! ! !ThemeIcons methodsFor: '*Nautilus-contents' stamp: 'EstebanLorenzano 5/10/2013 13:26'! upIconContents ^(Form extent: 24@24 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1107301120 1107301120 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1006636288 3808439296 3808439296 1006636288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 805309184 3774883072 4278222336 4278222336 3774883072 805309184 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 637536000 3724550656 4278221824 4278222848 4278222848 4278221824 3724550656 637536000 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 503316480 3674217984 4278221312 4278222848 3841995520 3841995520 4278222848 4278221312 3674217984 503316480 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 385875968 3607108352 4278220800 4278222848 3909105664 1442845184 1442845184 3909105664 4278222848 4278220800 3607108352 385875968 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 285212672 3523221504 4278220032 4278222848 3959439616 1761612544 16777215 16777215 1761612544 3959439616 4278222848 4278220032 3523221504 285212672 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 201326592 3439334912 4278219264 4278222848 4009773568 2046825728 16777215 16777215 16777215 16777215 2046825728 4009773568 4278222848 4278219264 3439334912 201326592 16777215 16777215 16777215 16777215 16777215 16777215 16777215 134217728 3338671360 4261440768 4278222848 4060107264 2365592576 16777215 16777215 16777215 16777215 16777215 16777215 2365592576 4060107264 4278222848 4261440768 3338671360 134217728 16777215 16777215 16777215 16777215 16777215 83886080 3204453376 4244662528 4278222848 4127218176 2634028288 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2634028288 4127218176 4278222848 4244662528 3204453376 83886080 16777215 16777215 16777215 33554432 3053458432 4194329856 4278222848 4177551616 2885686528 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2885686528 4177551616 4278222848 4194329856 3053458432 33554432 16777215 16777215 1509951744 4076880384 4278222848 4227885056 3087013120 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 3087013120 4227885056 4278222848 4076880384 1509951744 16777215 16777215 33554432 2919240960 4160769280 3271562752 100663296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100663296 3271562752 4160769280 2919240960 33554432 16777215 16777215 16777215 33554432 1996492544 167772160 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 1996492544 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! userIcon "Private - Generated method" ^icons at: #userIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self userIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! userIconContents "Private - Method generated with the content of the file /Users/MAC/Desktop/Dev/Resources/extras/famfamfam_silk_icons_v013/icons/user.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ3SURBVDjLpZNtSNNRFIcNKunF 1rZWBMJqKaSiX9RP1dClsjldA42slW0q5oxZiuHrlqllLayoaJa2jbm1Lc3QUZpKFmmaTMsa Rp+kMgjBheSmTL2//kqMBJlFHx44XM7vOfdyuH4A/P6HFQ9zo7cpa/mM6RvCrVDzaVDy6C5J JKv6rwSnIhlFd0R0Up/GwF2KWyl01CTSkM/dQoQRzAurCjRCGnRUUE2FaoSL0HExiYVzsQwc j6RNrSqo4W5Gh6Yc4+1qDDTkIy+GhYK4nTgdz0H2PrrHUJzs71NQn86enPn+CVN9GnzruoYR 63mMPbkC59gQzDl7pt7rc9f7FNyUhPY6Bx9gwt4E9zszhWWpdg6ZcS8j3O7zCTuEpnXB+3MN ZkUUZu0NmHE8XsL91oSWwiiEc3MeseLrN6woYCWa/Zl8ozyQ3w3Hl2lYy0SwlCUvsVi/Gv2J wITnYPDun2Hy6jYuEzAF1jUBCVYpO6kXo+NuGMeBAgcgfwNkvgBOPgUqXgKvP7rBFvRhE1cr p8Vq1noFYSlacVyqGk0D86gbART9BDk9BFnPCNJbCY5aCFL1Cyhtp0RWAp74MsKSrkq9guHy vfMTtmLc1togpZoyqYmyNoITzVTYRJCiXYBIQ3CwFqi83o3JDhX6C0M8XsGIMoQ4OyuRlq1D dZcLkmbgGDX1iIEKNxAcbgTEOqC4ZRaJ6Ub86K7CYFEo8Qo+GBQlQyXBczLZpbloaQ9k1NUz /kD2myBBKxRZpa5hVcQslalatoUxizxAVVrN3CW21bFj9F858Q9dnIRmDyeuybM71uxmH9BN BB1q6zybV7H9s1Ue4PM3/gu/AEbfqfWy2twsAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! versionControlIcon "Private - Generated method" ^ icons at: #'versionControlIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self versionControlIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! versionControlIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYQEhgJtRvS4AAAAalJREFUOMutkjFoVEEQ hr/Z2913d8k9YgxBrhARBJEgSSOKTcTGUgkoh41YKJYRCzuvSCkepBGUFLEJaBUsBEUPtRT0 mohibIyYIipRouFd3tuxeDkVI3hRp5nZgf+b2ZmBfzQBaNTMMPBsk9qR8ZnQkkbNNIHRs1cX 9P38YxVbNqAAGCO5F0g+L2JKAxlpIi+e3jNzD6cB6hbg9OVWliy/MbOTp8Q7B8DaWhsfRQiC cw5TcPi4Wjh28Q5Lb5+z+8AYr1v3Ry2wQ4yYkKViCp405P1FvQMAVPqrIAaA6q59tFfeEShQ 2bINDdmwBfqSlQ+8fHKbkxemQLMNn1UFUAht0o+vSFY/4YoxABYoPro5IYePnoP0C2SroAHV DEKKash9WAdrYM/e/TyYvQ5o0QJ+cPuQYozgK0Dlx3pQJK+9/qYzX4ZGDrIw14ykUTOXgPpf nkG9cwd65MR5luebXaninYe4e+sK4zNBbCfpozI98dauAM5H3+OfACWI+7sCmKi4EeBKPdgu Aan7XQdxleB7/yDN9xGC/AKw5WvTE8fPbGb8XxO9wf+wb+DSh8wTKaW0AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! volumeIcon "Private - Generated method" ^ icons at: #'volume' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self volumeIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Graphics-Resources-Theme-Icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! volumeIconContents "Private - Method generated with the content of the file /home/dgd/volume.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAABGdBTUEAALGOfPtRkwAAACBj SFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAAmJLR0QA/4ePzL8A AAAJcEhZcwAACxMAAAsTAQCanBgAAAHrSURBVDjLldTLahRBFMbx/xu02hEvm1mZIC4qovaA LhoE142+QIMvILoRgjASdKEilSBxO5CFIhKbmUAQNWmD6KCQxCAMEi+JGGKISuETfC665uIM DqRqd6hfn9Nd5zRidxsBV/jOH5rc5QhjJBDwnyUQ43xmix9ssMo8GRiygaBBg0dMM887FsCE jvyfUwEZaRdY5CrDnOUyt8GE7pbaIKEEgEGYNnjpowmYIXdfeQfErJMAUCliArFMAJwEM+Sm 9V5r6iopIC+eXdDiK1lycux+90Qb2tavAlQxFxgBwwoAl8haIH+sTKN6oZ/6rW1ttjJYzEMO QZUEKPnTgnxHmzqjHW3pm77ooxApEFC9QwoxVV+U8eCTmirrq9bU1KqWVNZBEewDe55JwGfM iT1Y0hud0gct661ea1HndEzEQOUiUxzoBwt6quNq6JVyPdOcTuuwCE6AtUywpx/Mqq5RPdec ZlVTTTjSBxBgp7gGCRYA136HG7qpYU2qrppqqou8VtxAcI8RyDBACddzD6GzbTAOFYIxjkLs C6pQbYHWMqGbUF11kcNeH2OdEhDgiHsBmNBZzXRaI2XFN4YtWr4LREREYEJ3vQNKfpRSXNGh PaBMBIb+ebA+Tz/wZPDE0ZMjgiAaBHb919jd/gvLk2YJrn7DBgAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! warningIcon "Private - Generated method" ^icons at: #warningIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self warningIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! warningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56'! windowIcon "Private - Generated method" ^ icons at: #'window' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! windowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56'! workspaceIcon "Private - Generated method" ^ icons at: #'workspaceIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self workspaceIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56'! workspaceIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoSFSUbRvzYGQAAAilJREFUOMt9k89LVFEU xz93fDMqZEGG0cLAEgpXrly1qEXLNu2C0mqRuggXQWCtgja1DkqwRWKC/gG1LSUIwqI0UCOd sRgrHX2Ome/dX6fFG2dGLQ8c7r3ccz/3ew7nqKHngweNsf3W2u44jhuMMVTcYmz1OXFn3XoU x4+11g8CpdT9o03Hek62tKYztXWAgPBP896xXiySX8o3jk+8vp1bzKYD4PqJltb0la5Opj9N s5+JJOTTbafo7enN5BazPYGI1CmV4svcHKMvH+HFISJ4cXjvEUnceUHE4b2j80I/qZRCRA4F FXnC1MdZwOG9lEDJ422QF8F5C4B1yVoF8DQ2NSTB3uOxeO/wJUBstgjXlwk3CwA453YCRISp DzP09d7l2cgTlgt5BME5SyH8SRRtJoFKJR/uAXihviHDqzcvuNHVR2FtmcGRh6wVfkGNpf5A bQlAKYVdAC+e2el5Vn/8oaP9HJmglveTnxHvy49Qle2eFBAgcNzsvsXw2ABvJycI0gqoKSlX OxS43UUE+Dr7jUtXL4IIKHg3PlO+0zrmzPn28tk5v6sGgPMuqZFKAdBxtq1KukKlUvsoECiu bv2/Davy31EDpZQGqW8+3szCwkK5XfezxiOHieIIpdTvANRwNjd/bWxsNNjYKBKGIWG4RhRF GGuw1mK3J9FarDVoo1lZKWjgaSDi7+SXvpPNzV82xmS01pVRNqYM2R5lrTVGm9hYOyQi9/4C 16KCF5hN9R0AAAAASUVORK5CYII='! ! !UIThemeRegistry class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/10/2013 11:08'! icons ^ ThemeIcons current! ! !UIThemeRegistry class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/10/2013 11:08'! theme ^ UITheme current! ! !FileDirectoryWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21844466! icon "Answer a form to be used as icon" "^ item isRemoteDirectory ifTrue: [ Smalltalk ui icons smallRemoteOpenIcon] ifFalse: [Smalltalk ui icons smallOpenIcon]" ^ Smalltalk ui icons smallOpenIcon! ! !UIManager methodsFor: '*Polymorph-Widgets-Themes' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 53892353! theme ^ Smalltalk ui theme! ! !TextSelectionColor class methodsFor: 'default accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52844629! theme ^ Smalltalk ui theme! ! !TextSelectionColor methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52843244! theme ^ Smalltalk ui theme! ! !ListItemWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 24529494! theme ^ Smalltalk ui theme ! ! !ImageMorph methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23541040! setNewImageFrom: formOrNil "Change the receiver's image to be one derived from the supplied form. If nil is supplied, clobber any existing image in the receiver, and in its place put a default graphic, either the one known to the receiver as its default value, else a squeaky mouse" | defaultImage | formOrNil ifNotNil: [^ self image: formOrNil]. defaultImage := Smalltalk ui icons pharoIcon. self image: defaultImage ! ! !MenuRegistrationExample class methodsFor: 'menu declaring' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 25552056! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme ! ! !MenuRegistrationExample class methodsFor: 'menu declaring' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25552231! toolsOn: aBuilder (aBuilder item: #Tools) order: 1.0; target: Smalltalk tools; icon: Smalltalk ui icons smallDoItIcon; withSeparatorAfter; with: [(aBuilder item: #Transcript) selector: #openTranscript; icon: Smalltalk tools transcript taskbarIcon. (aBuilder item: #'File Browser') selector: #openFileList; icon: Smalltalk tools fileList taskbarIcon. (aBuilder item: #'Process Browser') selector: #openProcessBrowser; icon: Smalltalk tools processBrowser taskbarIcon; withSeparatorAfter]! ! !Morph class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26846886! nautilusIcon ^ Smalltalk ui icons iconNamed: #morphIcon! ! !Morph class methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 26847025! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !Morph methodsFor: 'debug and other' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26640644! addDebuggingItemsTo: aMenu hand: aHandMorph aMenu add: 'debug...' translated subMenu: (self buildDebugMenu: aHandMorph). aMenu lastItem icon: Smalltalk ui icons smallDebugIcon! ! !Morph methodsFor: 'menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26770721! addExportMenuItems: aMenu hand: aHandMorph "Add export items to the menu" aMenu ifNotNil: [ | aSubMenu | aSubMenu := UIManager default newMenuIn: self for: self. aSubMenu add: 'BMP file' translated action: #exportAsBMP. aSubMenu add: 'GIF file' translated action: #exportAsGIF. aSubMenu add: 'JPEG file' translated action: #exportAsJPEG. aSubMenu add: 'PNG file' translated action: #exportAsPNG. aMenu add: 'export...' translated icon: Smalltalk ui icons smallExportIcon subMenu: aSubMenu. aMenu lastItem icon: Smalltalk ui icons smallExportIcon ]. ! ! !Morph methodsFor: 'debug and other' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26642673! buildDebugMenu: aHand "Answer a debugging menu for the receiver. The hand argument is seemingly historical and plays no role presently" | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addStayUpItem. (self hasProperty: #errorOnDraw) ifTrue: [aMenu add: 'start drawing again' translated action: #resumeAfterDrawError.]. (self hasProperty: #drawError) ifTrue: [aMenu add: 'debug drawing error' translated action: #debugDrawError. aMenu addLine]. (self hasProperty: #errorOnStep) ifTrue: [aMenu add: 'start stepping again' translated action: #resumeAfterStepError. aMenu addLine]. aMenu add: 'inspect morph' translated action: #inspectInMorphic:. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu add: 'inspect owner chain' translated action: #inspectOwnerChain. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. self isMorphicModel ifTrue: [ aMenu add: 'inspect model' translated target: self model action: #inspect. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. (self model class inheritsFrom: ComposableModel) ifTrue: [ aMenu add: 'edit model' translated target: self model action: #edit. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon ]]. aMenu add: 'explore morph' translated target: self selector: #explore. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu addLine. aMenu add: 'browse morph class' translated target: self selector: #browseHierarchy. (self isMorphicModel) ifTrue: [aMenu add: 'browse model class' target: self model selector: #browseHierarchy]. aMenu add: 'explore view hierarchy' translated target: self selector: #exploreViewHierarchy. ^ aMenu! ! !Morph methodsFor: 'meta-actions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26786318! buildMetaMenu: evt "Build the morph menu. This menu has two sections. The first section contains commands that are handled by the hand; the second contains commands handled by the argument morph." | menu | menu := UIManager default newMenuIn: self for: self. menu addStayUpItem. menu add: 'grab' translated action: #grabMorph:. menu add: 'copy to paste buffer' translated action: #copyToPasteBuffer:. self maybeAddCollapseItemTo: menu. menu add: 'delete' translated action: #dismissMorph:. menu addLine. menu add: 'copy text' translated action: #clipText. menu addLine. menu add: 'go behind' translated action: #goBehind. menu add: 'add halo' translated action: #addHalo:. menu add: 'duplicate' translated action: #maybeDuplicateMorph:. self addEmbeddingMenuItemsTo: menu hand: evt hand. menu add: 'resize' translated action: #resizeMorph:. "Give the argument control over what should be done about fill styles" self addFillStyleMenuItems: menu hand: evt hand. self addDropShadowMenuItems: menu hand: evt hand. self addLayoutMenuItems: menu hand: evt hand. menu addUpdating: #hasClipSubmorphsString target: self selector: #changeClipSubmorphs argumentList: #(). menu addLine. menu add: 'inspect' translated selector: #inspectAt:event: argument: evt position. menu add: 'explore' translated action: #explore. menu lastItem icon: Smalltalk ui icons smallInspectItIcon. menu addLine.. menu add: 'show actions' translated action: #showActions. menu addLine. self addDebuggingItemsTo: menu hand: evt hand. self addCustomMenuItems: menu hand: evt hand. ^ menu ! ! !IconListModel class methodsFor: 'example' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23479771! example self new icons: [:e | Smalltalk ui icons forwardIcon ]; items: (1 to: 10) asArray; openWithSpec! ! !PharoTheme class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/10/2013 09:53'! defaultThemeIconsClass ^ PharoUIThemeIcons! ! !ProceedDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29955677! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallQuestionIcon! ! !ProceedDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29954626! icon "Answer an icon for the receiver." ^ Smalltalk ui icons questionIcon! ! !MCTool class methodsFor: 'window color' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 25081673! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme ! ! !MCTool methodsFor: 'morphic ui' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 25080287! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme ! ! !PSMCPatchOperationWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28987437! icon "Answer a form with an icon to represent the receiver" self item localChosen ifTrue: [ ^ Smalltalk ui icons smallBackIcon ]. ^ super icon! ! !HaloMorph methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23177096! addGraphicalHandleFrom: formKey at: aPoint "Add the supplied form as a graphical handle centered at the given point. Return the handle." | handle aForm | aForm := Smalltalk ui icons iconNamed: formKey ifNone: [ Smalltalk ui icons iconNamed: #solidMenuIcon ]. handle := ImageMorph new image: aForm; bounds: (Rectangle center: aPoint extent: aForm extent). handle wantsYellowButtonMenu: false. self addMorph: handle. handle on: #mouseUp send: #endInteraction to: self. ^ handle ! ! !HaloMorph methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23182404! createHandleAt: aPoint color: aColor iconName: iconName | bou handle | bou := Rectangle center: aPoint extent: self handleSize asPoint. self gradientHalo ifTrue: [ handle := Morph newBounds: bou color: aColor. handle borderWidth: 1. handle useRoundedCorners. self setColor: aColor toHandle: handle] ifFalse: [handle := EllipseMorph newBounds: bou color: aColor]. "" handle borderColor: aColor muchDarker. handle wantsYellowButtonMenu: false. "" iconName isNil ifFalse: [| form | form := Smalltalk ui icons iconNamed: iconName ifNone: []. form isNil ifFalse: [| image | image := ImageMorph new. image image: form. image color: aColor makeForegroundColor. image lock. handle addMorphCentered: image]]. "" ^ handle! ! !MergeJoinSection methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25558664! defaultStateIcons "Answer the default state icons." ^{ Smalltalk ui icons smallBackIcon. Smalltalk ui icons smallForwardIcon. Smalltalk ui icons smallOkIcon. Smalltalk ui icons smallCancelIcon }! ! !MergeJoinSection methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 25560493! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !DenyDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20650964! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallLockIcon! ! !DenyDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20650692! icon "Answer an icon for the receiver." ^ Smalltalk ui icons lockIcon! ! !NECPreferences class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 27846529! backgroundColor ^backgroundColor ifNil: [ backgroundColor := (Smalltalk ui theme settings menuColor ifNil: [ Color white ]) ]! ! !NECPreferences class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 27851747! settingsOn: aBuilder (aBuilder setting: #'Code Completion') target: self; parentName: #codeBrowsing; selector: #enabled; icon: Smalltalk ui icons smallConfigurationIcon; description: 'Enable or disable code completion in browsers, debuggers and workspaces.'; with: [ | availableControllers | availableControllers := self availableControllers. availableControllers size > 1 ifTrue: [ (aBuilder pickOne: #completionController) order: -1; label: 'Controller' translated; getSelector: #currentController; setSelector: #useController:; domainValues: availableControllers ]. (aBuilder setting: #backgroundColor) label: 'Background Color' translated. (aBuilder setting: #expandPrefixes) label: 'Complete common prefixes using TAB in the suggested completions' translated. (aBuilder setting: #useEnterToAccept) label: 'Use ENTER to accept a suggested completion' translated; default: self defaultUseEnterToAccept. (aBuilder setting: #captureNavigationKeys) label: 'Use navigation keys for extended completion functionality' translated. (aBuilder setting: #caseSensitive) label: 'Case Sensitive'; description: 'Decide if you want eCompletion to be case sensitive or not.'. (aBuilder setting: #smartCharacters) label: 'Smart Characters'; description: 'Decide if you want eCompletion to use smart characters, e.g, to automatically close brackets.'. (aBuilder setting: #smartCharactersWithSingleSpace) label: 'Smart Characters with Single Space'; description: 'Enumerate the characters which are automatically inserted with a single space in between.'. (aBuilder setting: #smartCharactersWithDoubleSpace) label: 'Smart Characters with Double Space'; description: 'Enumerate the characters which are automatically inserted with a two spaces in between.'. (aBuilder setting: #popupShowAutomatic) default: self defaultPopupShowAutomatic; label: 'Popup is automatic'. (aBuilder setting: #popupAutomaticDelay) default: self defaultPopupDelay; label: 'Popup appearance delay'. (aBuilder pickOne: #popupShowWithShortcut) default: self defaultPopupShortcut; label: 'Popup appears with this shortcut' translated; domainValues: self availablePopupShortcuts. (aBuilder setting: #spaceAfterCompletion) default: self defaultSpaceAfterCompletion; label: 'Put a space after completion' ].! ! !TransferMorph methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 53481906! defaultColor "answer the default color/fill style for the receiver" ^ Smalltalk ui theme selectionColor! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 27033631! theme "Answer the ui theme that provides controls. Done directly here to avoid performance hit of looking up in window." ^ Smalltalk ui theme! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29315353! checkboxMarkerForm ^ self current checkboxMarkerForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29315643! checkboxSelectedForm ^ self current checkboxSelectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29317390! checkboxUnselectedForm ^ self current checkboxUnselectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29318780! menuPinForm ^ self current menuPinForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29320090! radioButtonMarkerForm ^ self current radioButtonMarkerForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29320383! radioButtonSelectedForm ^ self current radioButtonSelectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29322085! radioButtonUnselectedForm ^ self current radioButtonUnselectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29323493! radioSelectedForm ^ self current radioSelectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29325240! radioUnselectedForm ^ self current radioUnselectedForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29326692! windowCloseForm ^ self current windowCloseForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29327987! windowCloseInactiveForm ^ self current windowCloseInactiveForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29329307! windowMaximizeForm ^ self current windowMaximizeForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29330726! windowMaximizeInactiveForm ^ self current windowMaximizeInactiveForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29332167! windowMenuForm ^ self current windowMenuForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29333255! windowMenuInactiveForm ^ self current windowMenuInactiveForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29334367! windowMinimizeForm ^ self current windowMinimizeForm.! ! !PharoUIThemeIcons class methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 19:34' prior: 29335351! windowMinimizeInactiveForm ^ self current windowMinimizeInactiveForm.! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! checkboxMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! checkboxSelectedForm ^ self form16x16FromContents: self checkboxSelectedFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! checkboxSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! checkboxUnselectedForm ^ self form16x16FromContents: self checkboxUnselectedFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! checkboxUnselectedFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! form16x16FromContents: aByteArray ^ Form extent: 16@16 depth: 32 fromArray: aByteArray offset: 0@0! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! menuPinForm ^self form16x16FromContents: self menuPinFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! menuPinFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 1291845632 3774873600 4194304000 3774873600 788529152 0 0 0 0 0 0 0 0 0 0 1107296256 4278190080 4278190080 4278190080 4278190080 4278190080 788529152 0 0 0 0 0 0 0 0 83886080 3992977408 4278190080 4278190080 4278190080 4278190080 4278190080 3774873600 83886080 0 0 0 0 0 0 0 100663296 4194304000 4278190080 4278190080 4278190080 4278190080 4278190080 4194304000 100663296 0 0 0 0 0 0 0 83886080 3774873600 4278190080 4278190080 4278190080 4278190080 4278190080 3992977408 83886080 0 0 0 0 0 0 0 0 1291845632 4261412864 4278190080 4278190080 4278190080 4261412864 1107296256 0 0 0 0 0 0 0 0 0 0 1107296256 3992977408 4194304000 3774873600 1291845632 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioButtonSelectedForm ^ self form16x16FromContents: self radioButtonSelectedFormContents! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioButtonSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioButtonUnselectedForm ^ self form16x16FromContents: self radioButtonUnselectedFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioButtonUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioSelectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioSelectedFormContents readStream) ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioUnselectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioUnselectedFormContents readStream) ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! radioUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowCloseForm ^ self form16x16FromContents: self windowCloseFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowCloseFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167772160 0 0 0 0 0 0 0 0 167772160 3875536896 4076863488 234881024 0 234881024 2919235584 3858759680 0 0 0 0 0 0 0 0 402653184 3674210304 4261412864 3758096384 671088640 3758096384 4261412864 4278190080 335544320 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 0 0 671088640 4211081216 4261412864 4211081216 671088640 0 0 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 335544320 4278190080 4244635648 3758096384 671088640 3758096384 4143972352 3724541952 402653184 0 0 0 0 0 0 0 0 3892314112 2919235584 234881024 0 234881024 4278190080 1761607680 167772160 0 0 0 0 0 0 0 0 167772160 67108864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowCloseInactiveForm ^ self form16x16FromContents: self windowCloseInactiveFromContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowCloseInactiveFromContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176193664 0 0 0 0 0 0 0 0 176193664 3883958400 4085284992 243302528 0 243302528 2927657088 3867181184 0 0 0 0 0 0 0 0 411074688 3682631808 4269834368 3766517888 679049593 3766517888 4269834368 4286611584 343965824 0 0 0 0 0 0 0 0 360282489 3766517888 4152328063 4219436927 4152393856 3766517888 360282489 0 0 0 0 0 0 0 0 0 0 679049593 4219436927 4269834368 4219436927 679049593 0 0 0 0 0 0 0 0 0 0 360282489 3766517888 4152393856 4219436927 4152328063 3766517888 360282489 0 0 0 0 0 0 0 0 343965824 4286611584 4253057152 3766517888 679049593 3766517888 4152328063 3732963456 411074688 0 0 0 0 0 0 0 0 3900735616 2927657088 243302528 0 243302528 4286611584 1769897598 176193664 0 0 0 0 0 0 0 0 176193664 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMaximizeForm ^ self form16x16FromContents: self windowMaximizeFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMaximizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) ! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMaximizeInactiveForm ^ self form16x16FromContents: self windowMaximizeInactiveFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMaximizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMenuForm ^self form16x16FromContents: self windowMenuFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMenuFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 369098752 3556769792 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 369098752 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMenuInactiveForm ^self form16x16FromContents: self windowMenuInactiveFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMenuInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 377520256 3565191296 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 377520256 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMinimizeForm ^self form16x16FromContents: self windowMinimizeFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMinimizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !PharoUIThemeIcons methodsFor: 'forms' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMinimizeInactiveForm ^self form16x16FromContents: self windowMinimizeInactiveFormContents ! ! !PharoUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:58'! windowMinimizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !AbstractMethodWidget methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17243798! buildUpAndDownArrowIcon: aMethod | container up down | container := Morph new. container extent: 12@12; color: Color transparent. up := IconicButton new target: self model; actionSelector: #arrowUp:; arguments: { aMethod }; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDoubleUpIcon); color: Color transparent; extent: 12 @ 6; helpText: 'Browse overriden message'; borderWidth: 0. down := IconicButton new target: self model; actionSelector: #arrowDown:; arguments: { aMethod }; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDoubleDownIcon); color: Color transparent; extent: 12 @ 6; helpText: 'Browse overriding messages'; borderWidth: 0. ^ (container changeTableLayout; listDirection: #topToBottom; addMorph: down; addMorph: up; yourself) -> {up. down}.! ! !CriticBrowser class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20251549! icon "Answer an icon for the receiver." ^ Smalltalk ui icons smallWarningIcon! ! !CriticBrowser class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 20251904! theme ^ Smalltalk ui theme ! ! !TimeProfiler class methodsFor: 'opening' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53178301! fullReportMenuOn: aBuilder "Specify the menu with a specific pragma. Try it with: (PragmaMenuBuilder pragmaKeyword: 'TimeProfilerFullReportMenu' model: nil) menu popUpInWorld" (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Set search string' translated) keyText: 'h'; selector: #setSearchString. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; icon: Smalltalk ui icons smallCopyIcon. ! ! !TimeProfiler class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53178158! taskbarIcon ^ Smalltalk ui icons iconNamed: #smallDebugIcon! ! !TimeProfiler methodsFor: 'UI specific' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53162881! toolBarOn: aWindow | uiTheme toolBar | uiTheme := Smalltalk ui theme. toolBar := toolBar := aWindow newToolbar: { ( uiTheme newButtonIn: World for: self getState: nil action: #profileIt arguments: {} getEnabled: nil getLabel: nil help: nil) label: ( uiTheme newRowIn: World for: {AlphaImageMorph new image: Smalltalk ui icons smallDoItIcon. uiTheme buttonLabelForText: 'Profile it' translated}); yourself. aWindow newToolSpacer. aWindow newToolSpacer. aWindow newLabel: 'Min time % ' translated. (uiTheme newTextEntryIn: aWindow for: self get: #minPercentageToExpand set: #minPercentageToExpand: class: Float getEnabled: nil help: nil). aWindow newToolSpacer. aWindow newToolSpacer. aWindow newLabel: 'Threshold: ' translated. (uiTheme newTextEntryIn: aWindow for: self get: #threshold set: #threshold: class: Integer getEnabled: nil help: nil). aWindow newToolSpacer. aWindow newToolSpacer. aWindow newDropListFor: self list: #whatToShowList getSelected: #whatToShow setSelected: #whatToShow: getEnabled: nil useIndex: false help: 'Which kind of result'. aWindow newToolSpacer. aWindow newToolSpacer. uiTheme newCheckboxIn: World for: self getSelected: #reportOtherProcesses setSelected: #reportOtherProcesses: getEnabled: nil label: 'All processes' help: nil. aWindow newToolSpacer}. ^ toolBar! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54152535! errorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons errorIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54152671! infoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons infoIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54152811! lockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons lockIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54152943! questionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons questionIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153087! smallDebugIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153227! smallErrorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallErrorIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153378! smallInfoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallInfoIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153533! smallLockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLockIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153681! smallQuestionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallQuestionIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153841! smallWarningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallWarningIcon.! ! !UIThemeVistary methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54153998! warningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons warningIcon.! ! !SettingDeclaration methodsFor: 'user interface' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33161152! defaultIcon ^ (self type = #LogicalFont or: [self realValue isKindOf: AbstractFont]) ifTrue: [ Smalltalk ui icons smallFontsIcon] ifFalse: [ Smalltalk ui icons smallPaintIcon]! ! !SettingDeclaration methodsFor: 'user interface' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33164045! inputWidgetForFileOrDirectoryWithAction: aSymbol | list button | list := EditableDropListMorph on: self list: #list selected: #index changeSelected: #index: useIndex: true addToList: #addToList: class: String getEnabled: #enabled default: self defaultValue. list ghostText: self ghostHelp; hResizing: #rigid; width: 450; wantsFrameAdornments: true. button := self theme newButtonIn: World for: self getState: nil action: aSymbol arguments: nil getEnabled: nil label: (AlphaImageMorph new image: Smalltalk ui icons smallOpenIcon) help: 'Open directory chooser dialog' translated. ^ self theme newRowIn: World for: { list. button }.! ! !ClassListExample methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19288031! treeMorph | treeMorph baseColor oddColor evenColor | baseColor := Color lightBlue lighter. oddColor := (GradientFillStyle ramp: { 0.0->baseColor whiter. 0.2->baseColor. 0.8->baseColor darker. 1.0->baseColor blacker}) radial: false. baseColor := Color veryLightGray muchLighter. evenColor := (GradientFillStyle ramp: { 0.0->baseColor lighter lighter. 0.2->baseColor lighter. 0.8->baseColor. 1.0->baseColor blacker}) radial: false. treeMorph := self treeMorphClass new model: self; beMultiple; columns: {MorphTreeColumn new startWidth: 100; rowMorphGetSelector: #classButton; headerButtonLabel: 'Class' font: nil icon: Smalltalk ui icons smallOpenIcon target: nil actionSelector: nil arguments: #(). MorphTreeColumn new rowMorphGetSelector: #commentText; headerButtonLabel: 'Comments' font: nil icon: Smalltalk ui icons smallPrintIcon target: nil actionSelector: nil arguments: #()}; makeLastColumnUnbounded; withHLines: true; allowColumnDrop; useSquareCorners; hResizing: #spaceFill; vResizing: #spaceFill; rowInset: 5; columnInset: 5; resizerWidth: 2; preferedPaneColor: Color white; getMenuSelector: #menu:shifted:; columnColorForEven: evenColor odd: oddColor. ^ treeMorph buildContents! ! !ProcessBrowser class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29996964! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #processBrowserIcon! ! !ProcessBrowser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 29996829! theme ^ Smalltalk ui theme! ! !NautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/10/2013 16:40' prior: 28284629! addAll: aWindow | topHeight middleHeight bottomMorph bottomHeight delta | delta := 0. bottomHeight := 0. middleHeight := 0. topHeight := 0. " reverse order in column ..." "column vResizing: #rigid." self buildTopPlugins ifNotNil: [:top | topHeight := top height. aWindow addMorph: top fullFrame: ((0 @ 0 corner: 1 @ 0) asLayoutFrame bottomOffset: topHeight). delta := 4. topHeight := topHeight + delta. top color: Color transparent]. "navigationRow := self buildNavigationRow: aWindow height: topHeight." self buildColumns: aWindow height: topHeight"+navigationRow". self setShortcuts: #NautilusSourceCodeShortcuts to: aWindow. self buildMiddlePlugins ifNotNil: [:middle | middleHeight := middle height+4. aWindow addMorph: middle fullFrame: ((0 @ 0.5 corner: 1 @ 0.5) asLayoutFrame bottomOffset: middleHeight). middle color: Color transparent]. sourceCodePanel := PanelMorph new. self setShortcuts: #NautilusSourceCodeShortcuts to: sourceCodePanel. sourceCodePanel changeProportionalLayout. sourceCodePanel addMorph: self buildCodePane fullFrame: LayoutFrame identity. "self buildCommentPane." sourceCodePanel hResizing: #spaceFill; vResizing: #spaceFill. sourceCodeContainer := PanelMorph new. self setShortcuts: #NautilusSourceCodeShortcuts to: sourceCodeContainer. sourceCodeContainer changeTableLayout; listDirection: #leftToRight. sourceCodeContainer addMorph: sourceCodePanel. bottomMorph := self buildBottomPlugins. bottomMorph ifNotNil: [:bottom | bottomHeight := bottom height + 8]. aWindow addMorph: sourceCodeContainer fullFrame: ( (0@0.5 corner: 1 @ 1) asLayoutFrame topOffset: middleHeight; bottomOffset: bottomHeight negated). bottomMorph ifNotNil: [:bottom | aWindow addMorph: bottom fullFrame: ((0 @ 1 corner: 1 @ 1) asLayoutFrame topOffset: bottomHeight negated). bottom color: Color transparent]! ! !NautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/10/2013 17:00' prior: 28286756! buildColumns: aWindow height: height | delta | delta := StandardFonts defaultFont height + 10. aWindow addMorph: (self buildFirstColumn: aWindow) fullFrame: ((0 @ 0 corner: 0.25 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildSecondColumn: aWindow) fullFrame: ((0.25 @ 0 corner: 0.5 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildThirdColumn: aWindow) fullFrame: ( (0.5 @ 0 corner: 0.75 @ 0.5) asLayoutFrame topOffset: height ; bottomOffset: delta negated). aWindow addMorph: (self buildFourthColumn: aWindow) fullFrame: ( (0.75 @ 0 corner: 1 @ 0.5) asLayoutFrame topOffset: height; bottomOffset: delta negated). aWindow addMorph: self buildNavigationList fullFrame: ((0.5 @ 0.5 corner: 0.88 @ 0.5) asLayoutFrame topOffset: delta negated ). aWindow addMorph: (self buildTextAreaButtonsColumn: nil) fullFrame: ((0.88 @ 0.5 corner: 1 @ 0.5) asLayoutFrame topOffset: delta negated ). ! ! !Browser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 18507150! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallSystemBrowserIcon! ! !SmalltalkImage methodsFor: '*Morphic' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33490094! aboutThisSystem "Identify software version" | text dialog width | text := Smalltalk systemInformationString withCRs. width := 0. text linesDo: [:l | width := width max: (Smalltalk ui theme textFont widthOfStringOrText: l)]. dialog := LongMessageDialogWindow new entryText: text. dialog iconMorph image: Smalltalk ui icons pharoIcon. dialog title: 'About Pharo'. dialog open. dialog textMorph minWidth: 20; minHeight: 20. dialog width: (width + 120 min: Display width - 50). dialog position: 25 @ 25! ! !SmalltalkImage methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 33490700! theme self deprecated: 'You need to use Smalltalk ui theme' on: '10 May 2013' in: '3.0'. ^ Smalltalk ui theme! ! !SmalltalkImage methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:42'! ui ^ UIThemeRegistry ! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 20:34' prior: 54327400! windowMenuIconFor: aWindow "Answer the menu icon for the given window." ^ self windowMenuForm! ! !VersionsBrowser methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 54654687! buildDiffMorphFromOldString: oldString toNewString: newString contextClass: aClass |morph| morph := DiffMorph new hResizing: #spaceFill; vResizing: #spaceFill; borderStyle: (BorderStyle inset width: 1); font: Smalltalk ui theme statusFont; yourself. morph from: oldString to: newString contextClass: aClass. ^ morph ! ! !StringHolder class methodsFor: 'themes' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 51159942! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !GroupWindowMorph methodsFor: 'windows' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23076290! offerWindowMenu "Popup the window menu. Fill from current workspace." | aMenu | aMenu := self buildWindowMenu. aMenu addLine; add: 'Grab window...' target: self action: #grabWindow. aMenu lastItem icon: Smalltalk ui icons smallWindowIcon. self tabGroup page ifNotNil: [: page | page model addModelItemsToWindowMenu: aMenu]. aMenu popUpEvent: self currentEvent in: self world! ! !GroupWindowMorph methodsFor: 'theme' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23074074! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme ! ! !MCFileRepositoryInspector class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 24787700! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallSaveIcon! ! !SystemWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51779136! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallWindowIcon! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51705417! buildWindowMenu "Build and answer the window menu." | aMenu | aMenu := self theme newMenuIn: self for: self. aMenu addToggle: 'Close' translated target: self selector: #closeBoxHit getStateSelector: nil enablementSelector: #allowedToClose. aMenu lastItem icon: self theme windowCloseForm. aMenu addLine. aMenu add: 'About' translated action: #showAbout. aMenu lastItem icon: Smalltalk ui icons smallHelpIcon. aMenu addLine. aMenu addLine. aMenu add: 'Change title...' translated action: #relabel. aMenu addLine. aMenu add: 'Send to back' translated action: #sendToBack. aMenu add: 'Make next-to-topmost' translated action: #makeSecondTopmost. aMenu addLine. aMenu add: 'Create window group' translated action: #createWindowGroup. aMenu addLine. self mustNotClose ifFalse: [aMenu add: 'Make unclosable' translated action: #makeUnclosable] ifTrue: [aMenu add: 'Make closable' translated action: #makeClosable]. aMenu add: (self isSticky ifTrue: ['Make draggable'] ifFalse: ['Make undraggable']) translated action: #toggleStickiness. aMenu addLine. self isMaximized ifTrue: [aMenu add: 'Restore' translated action: #expandBoxHit. aMenu lastItem icon: self theme windowMaximizeForm] ifFalse: [aMenu add: 'Maximize' translated action: #expandBoxHit. aMenu lastItem icon: self theme windowMaximizeForm]. self isCollapsed ifFalse: [aMenu add: 'Window color...' translated action: #setWindowColor]. ^aMenu! ! !SystemWindow methodsFor: 'thumbnail' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51777163! icon "Answer a form with an icon to represent the receiver" ^ Smalltalk ui icons windowIcon! ! !SystemWindow methodsFor: 'open/close' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 51762382! openModal self openInWorld. Smalltalk ui theme runModal: self.! ! !SmalltalkEditor class methodsFor: 'menu declaration' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36403842! smalltalkEditorMenuOn: aBuilder "Specify the menu used when writing code. Try it with: (PragmaMenuBuilder pragmaKeyword: 'smalltalkEditorMenu' model: nil) menu popUpInWorld " UserManager default currentUser canEvaluateCode ifTrue: [ (aBuilder item: #'Do it' translated) keyText: 'd'; selector: #doIt; help: nil; icon: Smalltalk ui icons smallDoItIcon. (aBuilder item: #'Print it' translated) keyText: 'p'; selector: #printIt; help: nil; icon: Smalltalk ui icons smallPrintItIcon. ]. UserManager default currentUser canInspect ifTrue: [ (aBuilder item: #'Inspect it' translated) keyText: 'i'; selector: #inspectIt; help: nil; icon: Smalltalk ui icons smallInspectItIcon. (aBuilder item: #'Explore it' translated) keyText: 'I'; selector: #exploreIt; help: nil; icon: Smalltalk ui icons smallInspectItIcon ]. UserManager default currentUser canDebug ifTrue: [ (aBuilder item: #'Debug it' translated) keyText: 'D'; selector: #debugIt; help: nil; icon: Smalltalk ui icons smallDebugIcon. (aBuilder item: #'Profile it' translated) selector: #tallyIt; icon: Smalltalk ui icons smallDebugIcon; withSeparatorAfter. ]. (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; help: nil; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; help: nil; icon: Smalltalk ui icons smallFindIcon. UserManager default currentUser canBrowse ifTrue: [ (aBuilder item: #'Extended search...' translated) selector: #shiftedTextPaneMenuRequest; withSeparatorAfter ]. (aBuilder item: #'Do again' translated) keyText: 'j'; selector: #again; help: nil; icon: Smalltalk ui icons smallRedoIcon. (aBuilder item: #'Undo' translated) keyText: 'z'; selector: #undo; help: nil; icon: Smalltalk ui icons smallUndoIcon; withSeparatorAfter. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; help: nil; icon: Smalltalk ui icons smallCopyIcon. (aBuilder item: #'Cut' translated) keyText: 'x'; selector: #cut; help: nil; icon: Smalltalk ui icons smallCutIcon. (aBuilder item: #'Paste' translated) keyText: 'v'; selector: #paste; help: nil; icon: Smalltalk ui icons smallPasteIcon. (aBuilder item: #'Paste...' translated) selector: #pasteRecent; help: nil; icon: Smalltalk ui icons smallCopyIcon; withSeparatorAfter. UserManager default currentUser canEvaluateCode ifTrue: [ (aBuilder item: #'Accept' translated) keyText: 's'; selector: #accept; help: nil; icon: Smalltalk ui icons smallOkIcon. (aBuilder item: #'Cancel' translated) keyText: 'l'; selector: #cancel; help: nil; icon: Smalltalk ui icons smallCancelIcon ].! ! !SettingTree methodsFor: 'checking' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33193440! checkForUnknownParent self unclassified ifNotEmpty: [:nodesWithUnknownParent | | builder g | builder := SettingTreeBuilder new. g := (builder group: #nodesWithUnknownParent) node. self nodeList addFirst: g. g model: self. g item label: '*** Unclassified ***'. g item icon: Smalltalk ui icons smallDebugIcon. g item order: 0.0. nodesWithUnknownParent do: [:node | node parentName: #nodesWithUnknownParent]]! ! !SettingTree methodsFor: 'theme' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 33196587! theme ^ Smalltalk ui theme! ! !SearchableTree methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37054958! initializeWidgets self instantiateModels: #( tree AlainTreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'search'; entryCompletion: nil; acceptOnCR: true! ! !SettingBrowser class methodsFor: 'world menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33151458! menuCommandOn: aBuilder (aBuilder item: #'Settings') parent: #System; order: 1; icon: Smalltalk ui icons smallConfigurationIcon; action: [ SettingBrowser open ]; help: 'Opens a SystemSettingBrowser which allows you to alter many system settings'! ! !SettingBrowser methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33131214! taskbarIcon ^ Smalltalk ui icons smallConfigurationIcon! ! !Debugger class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20538912! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallDebugIcon! ! !Debugger methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20487373! taskbarIcon ^ Smalltalk ui icons smallDebugIcon! ! !PragmaSetting methodsFor: 'user interface' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29939829! defaultIcon ^ Smalltalk ui icons smallConfigurationIcon! ! !PragmaSetting methodsFor: 'user interface' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 29942503! theme ^ Smalltalk ui theme! ! !String class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51129981! nautilusIcon ^ Smalltalk ui icons iconNamed: #stringIcon! ! !MethodContainsBreakpointAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26345596! privateActionIcon "Return the icon for this action" ^ Smalltalk ui icons iconNamed: #breakpointIcon! ! !MetacelloConfigurationBrowser class methodsFor: 'registration' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25815506! menuCommandOn: aBuilder (aBuilder item: 'Configuration Browser') parent: #Tools; order: 0.5; action: [self open]; icon: Smalltalk ui icons smallLoadProjectIcon! ! !MetacelloConfigurationBrowser class methodsFor: 'registration' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 25815794! theme ^ Smalltalk ui theme! ! !PSMCMergePatchMorph methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28968227! allConflictsMenu "Answer the all conflicts menu." |menu| menu := UIManager default newMenuIn: self for: self. menu addToggle: 'Keep current version of all' translated target: self selector: #keepAllCurrentVersion getStateSelector: nil enablementSelector: #hasAnyNonKeptConflicts. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallBackIcon; keyText: 'Shift+Cmd+c'. menu addToggle: 'Use incoming version of all' translated target: self selector: #useAllIncomingVersion getStateSelector: nil enablementSelector: #hasAnyNonIncomingConflicts. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallForwardIcon; keyText: 'Shift+Cmd+g'. menu addToggle: 'Mark all as conflict' translated target: self selector: #markAllAsConflict getStateSelector: nil enablementSelector: #hasAnyNonConflictConflicts. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallCancelIcon; keyText: 'Shift+Cmd+x'. ^menu! ! !PSMCMergePatchMorph methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28970261! changesMenu: m "Answer the changes menu." |menu| menu := super changesMenu: m. menu addLine. menu addToggle: 'Apply this change' translated target: self selector: #toggleApplySelectedChange getStateSelector: #selectionIsRemoteChosen enablementSelector: #selectionIsNotNil. menu addToggle: 'Keep current version' translated target: self selector: #keepCurrentVersion getStateSelector: nil enablementSelector: #selectionIsNotNil. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallBackIcon; keyText: 'Cmd+c'. menu addToggle: 'Use incoming version' translated target: self selector: #useIncomingVersion getStateSelector: nil enablementSelector: #selectionIsNotNil. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallForwardIcon; keyText: 'Cmd+g'. menu addToggle: 'Mark as conflict' translated target: self selector: #markAsConflict getStateSelector: nil enablementSelector: #selectionIsNotNil. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallCancelIcon; keyText: 'Cmd+x'. menu addToggle: 'All conflicts' translated target: self selector: nil getStateSelector: nil enablementSelector: #hasConflicts. menu lastItem font: self theme menuFont; subMenu: self allConflictsMenu. menu addLine. menu addToggle: 'Select next conflict' translated target: self selector: #selectNextConflict getStateSelector: nil enablementSelector: #notAllConflictsResolved. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallRightFlushIcon; keyText: 'Cmd+f'. ^menu! ! !FreeTypeSystemSettings class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 22805125! freeTypeSettingsOn: aBuilder (aBuilder setting: #noFt2Library) target: self; icon: Smalltalk ui icons smallConfigurationIcon; type: #Label; label: 'Free type' translated; precondition: [FT2Library current isNil]; parent: #appearance; order: 3; description: 'Free type fonts are not available probably because the FT2 plugin is not installed. Check your VM installation' translated. (aBuilder setting: #loadFt2Library) target: self; dialog: [self ft2LibraryVersion]; icon: Smalltalk ui icons smallConfigurationIcon; label: 'Use Free type' translated; description: 'If checked then allows free type fonts using and update available fonts by scanning the current system' translated; precondition: [FT2Library current notNil]; parent: #appearance; order: 3; with: [ (aBuilder pickOne: #monitorType) label: 'Monitor type' translated; description: 'LCD is generally better for laptops, CRT for others' translated; target: FreeTypeSettings; targetSelector: #current; order: 0; default: #LCD; domainValues: {#LCD. #CRT}. (aBuilder setting: #updateFontsAtImageStartup) order: 1; target: FreeTypeSettings; label: 'Update fonts at startup' translated; description: 'If true, then the available font list is recomputed at each startup' translated. (aBuilder group: #advancedSettings) order: 10; label: 'Advanced features' translated; description: 'Some very specific parameters as the hinting or the cache size' translated; with: [ (aBuilder range: #cacheSize) target: FreeTypeCache; targetSelector: #current; label: 'Cache size' translated; description: 'The size of the cache in KBytes' translated; default: 5000; range: (0 to: 50000 by: 10). (aBuilder pickOne: #hintingSymbol) label: 'Hinting' translated; description: 'Changes the glyph shapes:' translated , ' o FULL: glyph shapes features are snapped to pixel boundaries. Glyphs are monochrome, with no anti-aliasing. This option changes the shapes the most.' translated , ' o LIGHT: glyph shapes features are partially snapped to pixel boundaries. This option changes the shapes less than with Full, resulting in better shapes, but less contrast.' translated , ' o NORMAL: glyph shapes features are snapped to pixel boundaries. Glyphs are anti-aliased.' translated , ' o NONE: use the original glyph shapes without snapping their features to pixel boundaries. This gives the best shapes, but with less contrast and more fuzziness.' translated; target: FreeTypeSettings; targetSelector: #current; default: #Light; domainValues: { 'Light' translated->#Light. 'Normal' translated ->#Normal. 'Full' translated -> #Full. 'None' translated -> #None}. (aBuilder range: #glyphContrast) target: FreeTypeSettings; targetSelector: #current; label: 'Glyph contrast' translated; description: 'Change the contrast level for glyphs. This is an integer between 1 and 100' translated; default: 50; range: (0 to: 100 by: 10)]]! ! !FreeTypeSystemSettings class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 22808358! ft2LibraryVersion ^ Smalltalk ui theme newLabelIn: World for: self label: 'Available version: ', FT2Version current libraryVersion asString getEnabled: nil.! ! !MethodFromTraitAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26455073! privateActionIcon "Return the icon for this action" ^ IconicButton new target: method originMethod; actionSelector: #browse; labelGraphic: (Smalltalk ui icons iconNamed: #traitIcon) ; color: Color transparent; extent: 12 @ 12; helpText: 'Browse the trait'; borderWidth: 0! ! !MethodWidget class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26520792! elementsMenu: aBuilder | selectedMethods selectedMethod tmp target | target := aBuilder model. selectedMethods := target selectedMethods. selectedMethod := target selectedMethod. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [ target findMethod ]; order: 0; help: 'Search for a method by name'. target selectedMethod ifNotNil: [ (aBuilder item: #'ToggleBreakPoint') action: [ target toggleBreakPoint ]; order: 199; label: (selectedMethod hasBreakpoint ifFalse: [ 'Add breakpoint'] ifTrue: [ 'Remove breakpoint'] )]. tmp := ((aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [ target fullBrowse ]; order: 200; yourself). target selectedMethod ifNil: [ tmp withSeparatorAfter. ^ target ]. (aBuilder item: #'Generate test and jump') keyText: 'h, j' if: Nautilus useOldStyleKeys not; keyText: 'j' if: Nautilus useOldStyleKeys; action: [ target generateTestMethodsAndFocus: true ]; order: 300. (aBuilder item: #'Generate test') keyText: 'h, J' if: Nautilus useOldStyleKeys not; keyText: 'J' if: Nautilus useOldStyleKeys; action: [ target generateTestMethodsAndFocus: false ]; order: 400; withSeparatorAfter. (target selectedMethods allSatisfy: [:meth | meth isTestMethod ]) ifTrue: [ (aBuilder item: #'Run tests') keyText: 'j, m' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runTestForMethods: selectedMethods notifying: true ]; order: 1000 ]. target selectedMethod correspondingTestMethod notNil ifTrue: [ (aBuilder item: #'Debug tests') keyText: 'd' if: Nautilus useOldStyleKeys not; action: [ target debugTest ]; order: 1001 ]. (aBuilder item: #'Senders of...') keyText: 'b, n' if: Nautilus useOldStyleKeys not; keyText: 'n' if: Nautilus useOldStyleKeys; action: [ target browseSendersOfMessages ]; order: 1100; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Implementors of...') keyText: 'b, m' if: Nautilus useOldStyleKeys not; keyText: 'm' if: Nautilus useOldStyleKeys; action: [ target browseMessages ]; order: 1200; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Inheritance') keyText: 'b, i' if: Nautilus useOldStyleKeys not; keyText: 'i' if: Nautilus useOldStyleKeys; action: [ target methodHierarchy ]; order: 1300; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Versions') keyText: 'b, v' if: Nautilus useOldStyleKeys not; keyText: 'v' if: Nautilus useOldStyleKeys; action: [ target browseVersions ]; order: 1400; enabledBlock: [ target enableMethodSingleSelection ]; withSeparatorAfter. (aBuilder item: #'Categorize method') keyText: 'm, m' if: Nautilus useOldStyleKeys not; action: [ target categorizeMethod ]; order: 1500. (aBuilder item: #'Move to package...') action: [ target moveMethodToPackage ]; order: 1600. (aBuilder item: #'Remove...') keyText: 'x, m' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeMethods ]; order: 1700; icon: (Smalltalk ui icons iconNamed: #removeIcon); withSeparatorAfter. (aBuilder item: #'Add in group...') keyText: 'n, e, m' if: Nautilus useOldStyleKeys not; action: [ target addMethodsInGroup ]; order: 1800. (aBuilder item: #'File Out') action: [ target fileOutMethods ]; order: 1900! ! !ChangeList class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 18773499! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallSaveIcon! ! !Editor methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 21111997! theme ^ Smalltalk ui theme ! ! !ObjectExplorer methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28660801! taskbarIcon ^ Smalltalk ui icons smallInspectItIcon ! ! !SliceSubmitter class methodsFor: 'nautilus menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33374128! buildNautilusMenu: aBuilder | package target mc | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^self ]. mc := NautilusMCBindings default retrieveMCPackageFor: package. mc isNil or: [ mc workingCopy modified not ifTrue: [ ^self ] ]. (aBuilder item: #'Open new bug report and attach changes of this package') action: [ self new receiver: target window; mcPackage: mc; submitNewSlice ]; order: 1299.5; icon: Smalltalk ui icons forwardIcon; help: 'Create a bug entry and a slice for the selected package'; withSeparatorAfter. ! ! !Collection class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19551616! nautilusIcon ^ Smalltalk ui icons iconNamed: #collectionIcon! ! !Spotlight methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 50756521! createSearchMorph | morph | morph := PluggableTextFieldMorph new on: self model text: #contents accept: #contents: readSelection: nil menu: nil; convertTo: String; alwaysAccept: true; acceptOnCR: true; autoAccept: true; getEnabledSelector: nil; font: Smalltalk ui theme textFont; cornerStyle: (Smalltalk ui theme textEntryCornerStyleIn: self); hResizing: #spaceFill; vResizing: #rigid; borderStyle: (BorderStyle inset width: 0); color: Color white ; selectionColor: Smalltalk ui theme selectionColor ; hideScrollBarsIndefinitely; extent: 24@(Smalltalk ui theme textFont height + 8); setBalloonText: nil. morph textMorph: (SpotlightTextMorphForFieldView new contents: ''; yourself). morph ghostText: 'Search class or method...'. morph on: #keyStroke send: #localHandleKeystroke: to: self. morph textMorph onAnnouncement: MorphLostFocus do: [ self delete ]. morph textMorph autoFit: true; wrapFlag: false; margins: (2@1 corner: 2@1). ^morph! ! !Spotlight methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 50757610! defaultBorderColor ^ Smalltalk ui theme windowColor ! ! !Spotlight methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 50757865! defaultColor ^ Smalltalk ui theme selectionColor muchDarker! ! !Spotlight methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 50758110! initialize super initialize. self beSticky. self layoutPolicy: TableLayout new; listDirection: #leftToRight; wrapCentering: #center; hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: self defaultLayoutInset ; cellInset: 5. self addMorphBack: Smalltalk ui icons smallFindIcon asMorph. search := self createSearchMorph crAction: [ :text | self accepted ]; yourself. self addMorphBack: search. self on: Character escape do: [ self close ].! ! !FileList class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21897612! contentMenu: aBuilder (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Set search string' translated) keyText: 'h'; selector: #setSearchString; withSeparatorAfter. (aBuilder item: #'Do again' translated) keyText: 'j'; selector: #again; icon: Smalltalk ui icons smallRedoIcon. (aBuilder item: #'Undo' translated) keyText: 'z'; selector: #undo; icon: Smalltalk ui icons smallUndoIcon; withSeparatorAfter. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; icon: Smalltalk ui icons smallCopyIcon. (aBuilder item: #'Cut' translated) keyText: 'x'; selector: #cut; icon: Smalltalk ui icons smallCutIcon. (aBuilder item: #'Paste' translated) keyText: 'v'; selector: #paste; icon: Smalltalk ui icons smallPasteIcon. (aBuilder item: #'Paste...' translated) selector: #pasteRecent; icon: Smalltalk ui icons smallPasteIcon; withSeparatorAfter . (aBuilder item: #'Do it' translated) keyText: 'd'; selector: #doIt; icon: Smalltalk ui icons smallDoItIcon. (aBuilder item: #'Print it' translated) keyText: 'p'; selector: #printIt; icon: Smalltalk ui icons smallPrintItIcon. (aBuilder item: #'Inspect it' translated) keyText: 'i'; selector: #inspectIt; icon: Smalltalk ui icons smallInspectItIcon. (aBuilder item: #'FileIn selection' translated) keyText: 'G'; selector: #fileItIn; withSeparatorAfter. (aBuilder item: #'Accept' translated) keyText: 's'; selector: #accept; icon: Smalltalk ui icons smallOkIcon. (aBuilder item: #'Cancel' translated) keyText: 'l'; selector: #cancel; icon: Smalltalk ui icons smallCancelIcon; withSeparatorAfter. (aBuilder item: #'More...' translated) selector: #shiftedYellowButtonActivity. ! ! !FileList class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21894537! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallOpenIcon! ! !FileList class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 21894715! theme ^ Smalltalk ui theme ! ! !SHPreferences class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 32572350! settingsOn: aBuilder (aBuilder setting: #'Shout: Syntax Highlighting') target: self; dialog: [ self styleTableRow ]; parentName: #codeBrowsing; description: 'Syntax Highlighting As You Type: Enable syntax highlighting in browsers, debuggers and workspaces and set patterns style.'; selector: #enabled; icon: Smalltalk ui icons smallConfigurationIcon; with: [ (aBuilder setting: #selectorPatternsStyle) label: 'Selector Patterns' translated; description: 'Selector patterns in method pane' translated. (aBuilder setting: #errorStyle) label: 'Syntactic error' translated; description: 'Invalid and undefined code' translated. (aBuilder setting: #argsStyle) label: 'Parameters' translated; description: 'Parameters in patterns, message sends, and blocks' translated. (aBuilder setting: #commentStyle) label: 'Comments' translated; description: 'Comments in code pane' translated. (aBuilder setting: #defaultStyle) label: 'Default' translated; description: 'Default style' translated. (aBuilder setting: #globalVarStyle) label: 'Global variables' translated; description: 'References to global variables, including classes' translated. (aBuilder setting: #instanceVarStyle) label: 'Instance/class variables' translated; description: 'References to instance and class variables' translated. (aBuilder setting: #messageSendsStyle) label: 'Message sends' translated; description: 'Message sends' translated. (aBuilder setting: #primitiveOrModuleStyle) label: 'Primitive or module' translated; description: 'Primitive or module' translated. (aBuilder setting: #primitiveTypesStyle) label: 'Primitive types' translated; description: 'Literal data' translated. (aBuilder setting: #reservedWordsStyle) label: 'Reserved words' translated; description: 'Reserved words of the Smalltalk language' translated. (aBuilder setting: #syntaxStyle) label: 'Syntax' translated; description: 'Any other syntactic element' translated. (aBuilder setting: #variableStyle) label: 'Variable' translated; description: 'Temporary variable' translated ]! ! !Model methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 26542115! theme ^ Smalltalk ui theme! ! !MessageDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25596624! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallInfoIcon! ! !MessageDialogWindow methodsFor: 'visual properties' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25595731! icon "Answer an icon for the receiver." ^ Smalltalk ui icons infoIcon! ! !MCVersionInspector class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25116888! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallSaveIcon! ! !PolymorphSystemSettings class methodsFor: 'morphic' stamp: 'EstebanLorenzano 5/10/2013 09:27' prior: 29820894! uiThemeClass ^ UITheme current class ! ! !MessageList class methodsFor: 'setting' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25614566! icon ^ Smalltalk ui icons smallInfoIcon! ! !Magnitude class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25271043! nautilusIcon ^ Smalltalk ui icons iconNamed: #magnitudeIcon! ! !FileDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21841821! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallOpenIcon! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21826201! iconFor: anEntry "Answer the icon to use for the directory entry." ^ anEntry isDirectory ifTrue: [ Smalltalk ui icons smallOpenIcon ] ifFalse: [(self isImageFile: anEntry basename) ifTrue: [ Smalltalk ui icons smallPaintIcon] ifFalse: [ Smalltalk ui icons smallLeftFlushIcon]]! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21829204! newDeleteButton "Answer a new delete button." ^self newButtonFor: self getState: nil action: #deleteFileOrDirectory arguments: nil getEnabled: #hasSelectedFileOrDirectory labelForm: Smalltalk ui icons smallDeleteIcon help: 'Press to delete the selected file or directory' translated! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21831592! newNewDirectoryButton "Answer a new 'new directory' button." ^self newButtonFor: self getState: nil action: #newDirectory arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallOpenIcon help: 'Press to create a new directory within the current directory' translated! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21832808! newUpButton "Answer a new up one directory level button." ^self newButtonFor: self getState: nil action: #selectParentDirectory arguments: nil getEnabled: #hasParentDirectory labelForm: Smalltalk ui icons smallUndoIcon help: 'Press to switch to the parent of the current directory' translated! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28187756! packagesChangesMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := (NautilusMCBindings default mcPackageFor: package). mcpackage ifNil: [ ^ self ]. mcpackage isDirty ifTrue: [ (aBuilder item: #('Changes with ',package name)) label: 'Changes with...'; order: 1295; help: 'Changes'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. mcpackage workingCopy repositoryGroup repositories doWithIndex: [:repo : index | (aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Changes with ',package name); order: index; action: [ self default viewChangesFor: mcpackage in: repo ]]]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28188693! packagesCommitsMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := (NautilusMCBindings default mcPackageFor: package). mcpackage ifNil: [ ^self ]. mcpackage isDirty ifTrue: [ | last group | (aBuilder item: #('Commit in ',package name)) label: 'Commit in...'; order: 1296; help: 'Commit'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. (group := mcpackage workingCopy repositoryGroup) repositories doWithIndex: [:repo : index | last := ((aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Commit in ',package name); order: index; action: [ self default commit: mcpackage workingCopy in: repo ])]. last withSeparatorAfter. (aBuilder item: 'Add a repository') parent: #('Commit in ',package name); order: 99; action: [ self default addRepositoryTo: group ]]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28189834! packagesCreateMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := NautilusMCBindings default mcPackageFor: package. mcpackage ifNotNil: [ ^ self ]. (aBuilder item: #'Create a MC package') order: 1297; help: 'Create a MC package corresponding to my name'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); action: [ self default createMCPackageFor: target selectedPackage ]; enabledBlock: [ target selectedPackages size < 2 ].! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28190503! packagesOpenMenu: aBuilder | package mcpackage target last group | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := NautilusMCBindings default mcPackageFor: package. mcpackage ifNil: [ ^ self ]. (aBuilder item: #('Open ',package name)) label: 'Open...'; order: 1297; help: 'Open'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. (group := mcpackage workingCopy repositoryGroup) repositories doWithIndex: [:repo : index | last := (aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Open ',package name); order: index; action: [ self default open: mcpackage in: repo ]]. last withSeparatorAfter. (aBuilder item: 'Add a repository') parent: #('Open ',package name); order: 99; action: [ self default addRepositoryTo: group ]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28191554! packagesSliceMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create Slice and commit it') order: 1298; help: 'Create a slice and commit it into PharoInbox'; action: [ self default postNewSliceFor: target window ]; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon). (aBuilder item: #'Create Slice') order: 1299; help: 'Create a slice'; action: [ self default addSliceFor: target window ]; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); withSeparatorAfter.! ! !UserManager class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36416655! switchUsers: aBuilder "I build a menu" (aBuilder item: #'Switch User') parent: #System; order: 1.5; icon: (Smalltalk ui icons iconNamed: #userIcon); action: [ self default openSwitchUsers ]! ! !PopupChoiceDialogWindowWithMessage methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29838935! icon "Answer an icon for the receiver." ^ Smalltalk ui icons questionIcon! ! !AlertDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17497604! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallWarningIcon! ! !AlertDialogWindow methodsFor: 'visual properties' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17497327! icon "Answer an icon for the receiver." ^ Smalltalk ui icons warningIcon! ! !PasteUpMorph methodsFor: 'thumbnail' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 35357742! icon ^ Smalltalk ui icons homeIcon! ! !MenuMorph class methodsFor: 'utilities' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25530010! confirm: queryString trueChoice: trueChoice falseChoice: falseChoice "Put up a yes/no menu with caption queryString. The actual wording for the two choices will be as provided in the trueChoice and falseChoice parameters. Answer true if the response is the true-choice, false if it's the false-choice. This is a modal question -- the user must respond one way or the other." "MenuMorph confirm: 'Are you sure?' trueChoice: 'yes, I''m ' falseChoice: 'no, I just thought'" | menu aBlock result | (ProvideAnswerNotification signal: queryString) ifNotNil:[:answer | ^ trueChoice = answer]. aBlock := [:v| result := v]. menu := self new. menu addTitle: queryString icon: Smalltalk ui icons confirmIcon. menu add: trueChoice target: aBlock selector: #value: argument: true. menu add: falseChoice target: aBlock selector: #value: argument: false. [menu invokeAt: ActiveHand position in: ActiveWorld allowKeyboard: true. result == nil] whileTrue. ^result! ! !MenuMorph class methodsFor: 'utilities' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25531064! inform: queryString "MenuMorph inform: 'I like Pharo'" | menu | (ProvideAnswerNotification signal: queryString) ifNotNil:[:answer | ^ self]. menu := self new. menu addTitle: queryString icon: Smalltalk ui icons confirmIcon. menu add: 'OK' target: self selector: #yourself. menu invokeAt: ActiveHand position in: ActiveWorld allowKeyboard: true.! ! !MenuMorph methodsFor: 'control' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25494732! layoutItems "decorate aMenu with icons" | maxIconWidth | maxIconWidth := 0. self items do: [:item | item icon ifNotNil: [maxIconWidth := maxIconWidth max: item icon width]. item hasSubMenu ifTrue: [item subMenu layoutItems]]. maxIconWidth isZero ifFalse: [self addBlankIconsIfNecessary: (Smalltalk ui icons blankIconOfWidth: maxIconWidth)]. ! ! !ThreePhaseButtonMorph class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53103544! checkBox "Answer a button pre-initialized with checkbox images." | f | ^self new onImage: (f := Smalltalk ui icons checkBoxOnIcon); pressedImage: (Smalltalk ui icons checkBoxPressedIcon); offImage: (Smalltalk ui icons checkBoxOffIcon); extent: f extent + (2@0); yourself ! ! !ThreePhaseButtonMorph class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53103910! radioButton "Answer a button pre-initialized with radiobutton images." | f | ^self new onImage: (f := Smalltalk ui icons radioButtonOnIcon); pressedImage: (Smalltalk ui icons radioButtonPressedIcon); offImage: (Smalltalk ui icons radioButtonOffIcon); extent: f extent + (2@0); yourself ! ! !AbstractFontSelectorDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17227511! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallFontsIcon! ! !AbstractFontSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17222000! newBoldButtonMorph "Answer a button for the boldness of the font." ^self newButtonFor: self getState: #isBold action: #toggleBold arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallBoldIcon help: 'Toggle bold font' translated! ! !AbstractFontSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17224233! newItalicButtonMorph "Answer a button for the italic emphasis of the font." ^self newButtonFor: self getState: #isItalic action: #toggleItalic arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallItalicIcon help: 'Toggle italic font' translated! ! !AbstractFontSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17224603! newStruckOutButtonMorph "Answer a button for the struck out emphasis of the font." ^self newButtonFor: self getState: #isStruckOut action: #toggleStruckOut arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallStrikeOutIcon help: 'Toggle struck-out font' translated! ! !AbstractFontSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17225320! newUnderlinedButtonMorph "Answer a button for the italic emphasis of the font." ^self newButtonFor: self getState: #isUnderlined action: #toggleUnderlined arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallUnderlineIcon help: 'Toggle underlined font' translated! ! !ErrorDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21244091! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallErrorIcon! ! !ErrorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21243816! icon "Answer an icon for the receiver." ^ Smalltalk ui icons errorIcon! ! !MethodContainsHaltAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26347517! privateActionIcon "Return the icon for this action" ^ Smalltalk ui icons iconNamed: #haltIcon! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19365975! icon ^ Smalltalk ui icons smallExpertIcon! ! !Trait methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44'! nautilusIcon ^ Smalltalk ui icons traitIcon! ! !TaskbarTask methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52289209! theme ^ Smalltalk ui theme! ! !PasswordInitializationDialogWindow methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 29173565! initialize "Initialization code for PasswordInitializationDialogWindow" super initialize. self textFont: Smalltalk ui theme textFont.! ! !KMCatcherMorph methodsFor: 'drawing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 24108212! drawOn: aCanvas "Indicate unaccepted edits, conflicts etc." super drawOn: aCanvas. focused ifTrue: [ Smalltalk ui theme drawTextAdornmentFor: self color: Color orange on: aCanvas]! ! !KMCatcherMorph methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 24110708! initialize super initialize. self layoutPolicy: TableLayout new. self listCentering: #center. self width: 300. self height: 25. self color: (Smalltalk ui theme textEditorDisabledFillStyleFor: self). self borderStyle: (Smalltalk ui theme textEditorDisabledBorderStyleFor: self). labelMorph := StringMorph contents: ''. self addMorph: (labelMorph). edited := false. focused := false. self initializeKeystrokes. ! ! !KMCatcherMorph methodsFor: 'event handling' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 24109178! keyboardFocusChange: aBoolean super keyboardFocusChange: aBoolean. focused := aBoolean. focused ifTrue: [ self color: (Smalltalk ui theme textEditorNormalFillStyleFor: self) ] ifFalse: [ self color: (Smalltalk ui theme textEditorDisabledFillStyleFor: self) ]. ^ true! ! !MethodWithCorrespondingTestAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26528138! privateActionIcon "Return the icon for this action" | testIcon | testIcon := Smalltalk ui icons iconNamed: #testNotRunIcon. testMethod hasPassedTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testGreenIcon ]. testMethod hasFailedTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testYellowIcon ]. testMethod hasErrorTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testRedIcon ]. ^ IconicButton new target: self browser; actionSelector: #runTestForAMethod:notifying:; arguments: { method. true}; labelGraphic: testIcon; color: Color transparent; extent: 12 @ 12; helpText: 'Run the test'; borderWidth: 0! ! !MorphTreeModel class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 26936040! theme ^ Smalltalk ui theme! ! !IdentifierChooserMorph methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23496477! theme ^ Smalltalk ui theme ! ! !PSMCChangeWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28956222! icon "Answer a form with an icon to represent the receiver" |o| o := self operation. o isNil ifTrue: [^ Smalltalk ui icons smallJumpIcon]. o isAddition ifTrue: [^ Smalltalk ui icons smallOkIcon]. o isRemoval ifTrue: [^ Smalltalk ui icons smallCancelIcon]. ^ Smalltalk ui icons smallForwardIcon! ! !PSMCChangeWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 28957158! theme ^ Smalltalk ui theme ! ! !PSMCClassChangeWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28958364! icon "Answer a form with an icon to represent the receiver" self isConflict ifTrue: [ self localChosen ifTrue: [ ^ Smalltalk ui icons smallBackIcon ] ]. ^ super icon! ! !Announcement class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17555552! nautilusIcon ^ Smalltalk ui icons iconNamed: #announcementIcon! ! !Paragraph methodsFor: 'access' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 29068113! theme ^ Smalltalk ui theme! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36705240! createAccesorsFor ^ SugsCreateInstanceVarAccessors icon: Smalltalk ui icons smallLanguageIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36705480! createAccessesToVariable ^ SugsAccessesToInstVar icon: Smalltalk ui icons smallInspectItIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36705718! createAccessors ^ SugsCreateClassVarAccessors icon: Smalltalk ui icons smallLanguageIcon position: 30 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36705953! createAddParameter ^ SugsAddParameter icon: Smalltalk ui icons smallPushpinIcon position: 200! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36706175! createBrowseReferences ^ SugsBrowseClassReferences icon: Smalltalk ui icons smallInspectItIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36706411! createExtractMethod ^ SugsExtractMethod icon: Smalltalk ui icons smallRedoIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36706654! createExtractToLocalVariable ^ SugsExtractToLocalVariable icon: Smalltalk ui icons smallJumpIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36706901! createFindImplementors ^ SugsFindImplementors icon: Smalltalk ui icons smallFindIcon position: 20 keyText: 'm'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36707130! createFindSenders ^ SugsFindSenders icon: Smalltalk ui icons smallFindIcon position: 10 keyText: 'n'! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36707380! createFormatSourceCode ^ SugsFormatCode icon: Smalltalk ui icons smallJustifiedIcon position: 0 keyText: 'u'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36707643! createInline ^ SugsInline icon: Smalltalk ui icons smallRightFlushIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36707858! createMoveMethod ^ SugsDelegateMethod icon: Smalltalk ui icons smallRedoIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36708079! createPullUp ^ SugsPullUpMethod icon: Smalltalk ui icons smallRedoIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36708294! createPushDown ^ SugsPushDownMethod icon: Smalltalk ui icons smallUndoIcon position: 101 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36708514! createRemoveMethod ^ SugsRemoveMethod icon: Smalltalk ui icons smallCancelIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36708736! createRemoveParameter ^ SugsRemoveParameter icon: Smalltalk ui icons smallCancelIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36708963! createRenameClass ^ SugsRenameClass icon: Smalltalk ui icons smallLanguageIcon position: 20 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36709200! createRenameClassVariable ^ SugsRenameClassVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36709450! createRenameMethod ^ SugsRenameMethod icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r,m'! ! !SugsSuggestionFactory class methodsFor: 'temp-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36709692! createRenameTemporaryVariable ^ SugsRenameTemporaryVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36709950! createRenameVariable ^ SugsRenameInstanceVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 35753100! createSwapMethod ^ SugsSwapMethod new icon: Smalltalk ui icons smallRedoIcon; position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36710199! createUseAccessorToVar ^ SugsUseAccessorsForClassVar icon: Smalltalk ui icons smallLanguageIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'unknown-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 35753659! createVariableCorrection " " "Unable because it's not fully implemented" | variables index | ^ SugsSuggestion for: [:context | variables := context selectedClass allInstVarNames asArray sort. index := UIManager default chooseFrom: variables. UIManager default inform:(variables at: index) ] named: 'Correct variable to...' translated icon: Smalltalk ui icons smallFindIcon. ! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 36710441! createVariableStoresInto ^ SugsStoresIntoInstVar icon: Smalltalk ui icons smallInspectItIcon position: 60! ! !MethodContainsFlagsAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26346595! privateActionIcon "Return the icon for this action" ^ Smalltalk ui icons iconNamed: #flagIcon! ! !Inspector class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23674067! menuFieldList: aBuilder | target selection | target := aBuilder model. selection := target selection. (aBuilder item: #'Inspect') keyText: 'i'; selector: #inspectSelection; icon: Smalltalk ui icons smallInspectItIcon. (aBuilder item: #'Explore') keyText: 'I'; selector: #exploreSelection; icon: Smalltalk ui icons smallInspectItIcon. (((selection isMemberOf: Array) or: [selection isMemberOf: OrderedCollection]) and: [ selection size > 0]) ifTrue: [ (aBuilder item: #'Inspect element...') selector: #inspectElement ]. (selection isKindOf: MorphExtension) ifTrue: [ (aBuilder item: #'Inspect property...') selector: #inspectElement ]. aBuilder withSeparatorAfter. (aBuilder item: #'Method refs to this inst var') selector: #referencesToSelection. (aBuilder item: #'Methods storing into this inst var') selector: #defsOfSelection. (aBuilder item: #'Explore pointers') selector: #explorePointers. (aBuilder item: #'Explore strong pointers') selector: #exploreStrongPointers; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b'; selector: #browseMethodFull. (aBuilder item: #'Browse class') selector: #browseClass. (aBuilder item: #'Browse hierarchy') keyText: 'h'; selector: #classHierarchy; withSeparatorAfter. (aBuilder item: #'Inst var refs...') selector: #browseInstVarRefs. (aBuilder item: #'Inst var defs...') selector: #browseInstVarDefs. (aBuilder item: #'Class var refs...') selector: #classVarRefs. (aBuilder item: #'Class variables') selector: #browseClassVariables. (aBuilder item: #'Class refs') keyText: 'N'; selector: #browseClassRefs; withSeparatorAfter. (aBuilder item: #'Copy name') keyText: 'c'; selector: #copyName. (aBuilder item: #'Basic inspect') selector: #inspectBasic. ! ! !Inspector class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23670714! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallInspectItIcon! ! !Inspector methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23651023! taskbarIcon ^ Smalltalk ui icons smallInspectItIcon! ! !Inspector methodsFor: 'theme' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23670087! theme ^ Smalltalk ui theme! ! !TextEditorDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 52684478! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallQuestionIcon! ! !TextEditorDialogWindow methodsFor: 'visual properties' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 52683775! icon "Answer an icon for the receiver." ^ Smalltalk ui icons questionIcon! ! !TabGroupMorph class methodsFor: 'example' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 52214905! example | builder window page1 page2 label1 label2 tabs content okButton cancelButton | builder := self theme builder. okButton := builder newOKButton. cancelButton := builder newCancelButton. page1 := ( builder newStack: { ( builder newAlphaImage: Smalltalk ui icons warningIcon help: nil) alpha: 0.5. CircleMorph new hResizing: #spaceFill; vResizing: #spaceFill}) fillStyle: Color red; hResizing: #spaceFill; vResizing: #spaceFill. page2 := builder newPanel fillStyle: Color green; hResizing: #spaceFill; vResizing: #spaceFill. label1 := builder newRow: { builder newButtonLabel: 'First page'. builder newCloseControlFor: nil action: [tabs removePage: page1] help: 'Close this tab'}. label2 := builder newRow: { builder newButtonLabel: 'Second page'. builder newCloseControlFor: nil action: [tabs removePage: page2] help: 'Close this tab'}. label1 cellInset: 0. label2 cellInset: 0. tabs := builder newTabGroup: { label1 -> page1. label2-> page2}. content := builder newColumn: { tabs. ( builder newRow: {okButton. cancelButton}) listCentering: #bottomRight}. window := content extent: 250@300; openInWindow. okButton model: window; action: #delete. cancelButton model: window; action: #delete! ! !ClassListNodeExample methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19291186! icon ^ Smalltalk ui icons smallExpertIcon! ! !PSMCPatchMorph class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28986077! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallForwardIcon! ! !PSMCPatchMorph methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28980791! changesMenu: m "Answer the changes menu." |menu| menu := self newMenu addTitle: 'Changes' icon: Smalltalk ui icons smallCopyIcon. menu addToggle: 'Browse class...' translated target: self selector: #browseClass getStateSelector: nil enablementSelector: #selectionHasAcutalClass. menu lastItem font: self theme menuFont; icon: Smalltalk tools browser taskbarIcon; keyText: 'Cmd+b'. menu addLine. menu addToggle: 'Versions...' translated target: self selector: #browseVersions getStateSelector: nil enablementSelector: #selectionIsMethodChange. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallJustifiedIcon; keyText: 'Cmd+v'. menu addToggle: 'Senders...' translated target: self selector: #browseSenders getStateSelector: nil enablementSelector: #selectionIsMethodChange. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallForwardIcon; keyText: 'Cmd+n'. menu addToggle: 'Implementors...' translated target: self selector: #browseImplementors getStateSelector: nil enablementSelector: #selectionIsMethodChange. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallDoItIcon; keyText: 'Cmd+m'. menu addToggle: 'Install incoming version' translated target: self selector: #loadMethodSelection getStateSelector: nil enablementSelector: #selectionIsMethodChange. menu lastItem font: self theme menuFont; icon: Smalltalk ui icons smallUpdateIcon. menu add: 'Expand All' translated target: self model selector: #expandAll. menu add: 'Collapse All' translated target: self model selector: #collapseAll. ^menu! ! !NECMenuMorph class methodsFor: 'preferences-colors' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 27838130! scrollColor ^ Smalltalk ui theme settings selectionColor! ! !ColorSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19710732! newColorPickerButtonMorph "Answer a button to enable picking of colour." ^self newButtonFor: self getState: nil action: #pickColor arguments: nil getEnabled: nil labelForm: ((Smalltalk ui icons eyedropperIcon) scaledIntoFormOfSize: 16) help: 'Pick a color from the screen' translated! ! !ColorSelectorDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19712781! pickColor "Pick a colour from the screen." |p d c h| h := self activeHand. h showTemporaryCursor: Smalltalk ui icons eyedropperIcon hotSpotOffset: 6 @ 31. h captureEventsUntil: [:evt | evt isMove ifTrue: [ p := evt position. (self hsvaMorph containsPoint: p) ifFalse: ["deal with the fact that 32 bit displays may have garbage in the alpha bits" c := Display depth = 32 ifTrue: [Color colorFromPixelValue: ((Display pixelValueAt: p) bitOr: 16rFF000000) depth: 32] ifFalse: [Display colorAt: p]]. h position: p. self selectedColor ~= c ifTrue: [ self selectedColor: c]]. " self world displayWorldSafely. " h anyButtonPressed ]. h showTemporaryCursor: nil! ! !TextEditor class methodsFor: 'menu declaration' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 52674221! textEditorMenuOn: aBuilder "Specify the menu used when writing text. Try it with: (PragmaMenuBuilder pragmaKeyword: 'textEditorMenu' model: nil) menu popUpInWorld" (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Set search string' translated) keyText: 'h'; selector: #setSearchString. (aBuilder item: #'Do again' translated) keyText: 'j'; selector: #again; icon: Smalltalk ui icons smallRedoIcon. (aBuilder item: #'Undo' translated) keyText: 'z'; selector: #undo; icon: Smalltalk ui icons smallUndoIcon; withSeparatorAfter. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; icon: Smalltalk ui icons smallCopyIcon. (aBuilder item: #'Cut' translated) keyText: 'x'; selector: #cut; icon: Smalltalk ui icons smallCutIcon. (aBuilder item: #'Paste' translated) keyText: 'v'; selector: #paste; icon: Smalltalk ui icons smallPasteIcon. (aBuilder item: #'Paste...' translated) selector: #pasteRecent; icon: Smalltalk ui icons smallCopyIcon; withSeparatorAfter. (aBuilder item: #'Set font...' translated) keyText: 'k'; selector: #offerFontMenu. (aBuilder item: #'Set style...' translated) keyText: 'K'; selector: #changeStyle. (aBuilder item: #'Set alignment...' translated) selector: #chooseAlignment; withSeparatorAfter. (aBuilder item: #'Accept' translated) keyText: 's'; selector: #accept; icon: Smalltalk ui icons smallOkIcon. (aBuilder item: #'Cancel' translated) keyText: 'l'; selector: #cancel; icon: Smalltalk ui icons smallCancelIcon.! ! !PopupChoiceDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 29838101! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallQuestionIcon! ! !DateModel methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 20454876! iconMorph ^ ImageMorph new image: Smalltalk ui icons calendarIcon.! ! !MCWorkingCopyBrowser class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 25196131! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #versionControlIcon! ! !MethodDefaultAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26373011! privateActionIcon "Return the icon for this action" ^ Smalltalk ui icons iconNamed: #emptyIcon! ! !Form methodsFor: '*Polymorph-Widgets-Themes' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 22453346! setAsBackground "Set this form as a background image." | world | world := self currentWorld. world backgroundMorph: ((Smalltalk ui theme builder newAlphaImage: self help: nil) autoSize: false; layout: #scaled; lock) ! ! !TestRunner class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 52426320! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #testRunnerIcon! ! !TestRunner class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52426527! theme ^ Smalltalk ui theme! ! !TestRunner methodsFor: 'building' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52413240! categoriesFrame ^LayoutFrame new rightFraction: 0.25; topOffset: (Smalltalk ui theme textFont height + 13); bottomOffset: self buttonHeight negated! ! !TestRunner methodsFor: 'building' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52413471! categorySearchFrame ^LayoutFrame new rightFraction: 0.25; bottomFraction: 0 offset: (Smalltalk ui theme textFont height + 10)! ! !TestRunner methodsFor: 'building' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52414219! classesFrame ^LayoutFrame new leftFraction: 0.25; topOffset: (Smalltalk ui theme textFont height + 13); rightFraction: 0.5; bottomOffset: self buttonHeight negated! ! !TestRunner methodsFor: 'theme' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52421579! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !AbstractNautilusUI commentStamp: '' prior: 37393655! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 35669946! classesMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. (aBuilder item: #'Rename...') keyText: 'r,c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClass ]; enabledBlock: [ target selectedClasses size <= 1 ]; order: -99; withSeparatorAfter. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; keyText: 'B' if: Nautilus useOldStyleKeys; action: [target restrictedBrowseClass]; order: 1000; help: 'Open a browser on a restricted view'. (target selectedClass isTrait) ifTrue: [ (aBuilder item: #'Browse users') action: [ target restrictedBrowseTraitUsers ]; order: 1050]. (aBuilder item: #'Add in Group...') keyText: 'n, e, c' if: Nautilus useOldStyleKeys not; keyText: 'e' if: Nautilus useOldStyleKeys; action: [ target addClassesInGroup ]; order: 1100; withSeparatorAfter. (target selectedClasses allSatisfy: [:each | each inheritsFrom: TestCase ]) ifTrue:[ (aBuilder item:#'Run tests') keyText: 'j, c' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runClassTests ]; order: 1200]. (aBuilder item: #Analyze) enabledBlock: [ target selectedClasses size <= 1 ]; order: 0; withSeparatorAfter. (aBuilder item: #'Jump to test class') keyText: 'g, j' if: Nautilus useOldStyleKeys not; keyText: 'j' if: Nautilus useOldStyleKeys; action: [ target createTestForSelectedClass ]; enabledBlock: [ target selectedClasses size <= 1 ]; order: 300; withSeparatorAfter. (aBuilder item: #'Move to package...') keyText: 'm, c' if: Nautilus useOldStyleKeys not; action: [ target moveInNewPackage ]; order: 1400. (aBuilder item: #'Copy...') keyText: 'c, c' if: Nautilus useOldStyleKeys not; keyText: 'c' if: Nautilus useOldStyleKeys; action: [ target copyClasses ]; order: 1600. (aBuilder item: #'Remove...') keyText: 'x, c' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 1700; withSeparatorAfter. (aBuilder item: #'File Out') action: [ target fileOutClass ]; withSeparatorAfter; order: 1800. target showGroups ifTrue: [ target selectedGroup isReadOnly ifFalse: [ (aBuilder item: #'Remove from Group') keyText: 'X' if: Nautilus useOldStyleKeys not; action: [ target removeClassFromGroup ]; order: 1900] ].! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17385289! groupsMenu: aBuilder | target | target := aBuilder model. target selectedGroup ifNil: [ ^ target ]. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; action: [ target restrictedBrowseGroups: target selectedGroups ]; order: 1000; withSeparatorAfter. (aBuilder item: #'Run tests') keyText: 'j, g' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runTestsOfGroups: target selectedGroups notifying: true ]; order: 1100. (aBuilder item: #'Merge groups') action: [target mergeGroups]; enabledBlock: [ target selectedGroups size > 1]; order: 1200. target selectedGroup isNil ifFalse: [ target selectedGroup isReadOnly ifFalse: [ (aBuilder item: #'Rename...') keyText: 'r, g' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameGroup ]; enabledBlock: [ target selectedGroups size <= 1]; order: 1300 ]. target selectedGroup removable ifTrue: [ (aBuilder item: #'Remove groups') keyText: 'x, g' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; icon: (Smalltalk ui icons iconNamed: #removeIcon); action: [target removeGroups]; order: 1400 ] ]! ! !AbstractNautilusUI class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17372953! icon ^ Smalltalk ui icons nautilusIcon ! ! !AbstractNautilusUI class methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 13:01' prior: 17427660! initialize " self initialize " ClassesIconsCache := WeakIdentityKeyDictionary new. GroupsIconsCache := WeakIdentityKeyDictionary new. PackagesIconsCache := WeakIdentityKeyDictionary new. NextFocusKey := Character arrowRight. PreviousFocusKey := Character arrowLeft.! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17387837! packagesMenu: aBuilder | package target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; action: [ target restrictedBrowsePackage ]; order: 1000; help: 'Open a browser on a restricted view'; withSeparatorAfter. (aBuilder item: #'Rename...') keyText: 'r, p' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [target renamePackage]; order: 1100; help: 'Rename a package'; enabledBlock: [ target selectedPackages size < 2 ]. (aBuilder item: #'Remove...') keyText: 'x, p' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [target removePackages ]; order: 1200; help: 'Remove a package'; icon: (Smalltalk ui icons iconNamed: #removeIcon). (aBuilder item: #'Run tests...') keyText: 'j, p' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [target runPackagesTestsNotifying: true ]; enabled: (package classes anySatisfy: [:e | e inheritsFrom: TestCase ]); order: 1250; help: 'Run tests'; withSeparatorAfter. (aBuilder item: #'File Out') action: [target fileOutPackage]; order: 1300; help: 'File out a package'; withSeparatorAfter. target selectedPackages size > 1 ifTrue: [ (aBuilder item: #'Add as Groups & Browse') keyText: 'n, g' if: Nautilus useOldStyleKeys not; action: [ target addPackagesAsGroupsAndBrowse ]; order: 1400; help: 'Create a group based on the current package and browse it'. (aBuilder item: #'Add as Groups') keyText: 'n, G' if: Nautilus useOldStyleKeys not; action: [ target addPackagesAsGroups ]; order: 1600; help: 'Create a group based on the current package'. (aBuilder item: #'Add as Group') action: [target addPackageAsGroup]; order: 1700; help: 'Create a group based on the current package'. ] ifFalse: [ (aBuilder item: #'Add as Group & Browse') keyText: 'n, g' if: Nautilus useOldStyleKeys not; keyText: 'G' if: Nautilus useOldStyleKeys; action: [ target addPackageAsGroupAndBrowse ]; order: 1500; help: 'Create a group based on the current package and browse it'. (aBuilder item: #'Add as Group') keyText: 'n, G' if: Nautilus useOldStyleKeys not; action: [target addPackageAsGroup]; order: 1700; help: 'Create a group based on the current package' ]. (aBuilder item: #'Add Matching Packages as Groups and Browse') keyText: 'n, m' if: Nautilus useOldStyleKeys not; keyText: 'M' if: Nautilus useOldStyleKeys; action: [ target addMatchingPackagesInGroupsAndBrowse ]; order: 1800. (aBuilder item: #'Add in Group...') keyText: 'n, e, p' if: Nautilus useOldStyleKeys not; action: [target addPackagesInGroup]; order: 1900; help: 'Add current package in a group'; withSeparatorAfter.! ! !AbstractNautilusUI class methodsFor: 'icon' stamp: 'EstebanLorenzano 5/10/2013 13:04' prior: 17376721! resetClassesIconsCache ClassesIconsCache removeAll. ! ! !AbstractNautilusUI class methodsFor: 'icon' stamp: 'EstebanLorenzano 5/10/2013 13:04' prior: 17376900! resetIconCaches ClassesIconsCache removeAll. GroupsIconsCache removeAll. PackagesIconsCache removeAll.! ! !AbstractNautilusUI methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17297016! buildBrowseClassVarsButton ^ ( PluggableThreePhaseButtonMorph on: self ) actionSelector: #browseClassVars; stateSelector: #isAClassSelected ; onImage: (Smalltalk ui icons iconNamed: #classVarsSelectedIcon); offImage: (Smalltalk ui icons iconNamed: #classVarsUnselectedIcon); pressedImage: (Smalltalk ui icons iconNamed: #classVarsPressedIcon); extent: 24@24; helpText: 'Show class variables'; yourself.! ! !AbstractNautilusUI methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17297504! buildBrowseInstVarsButton ^ ( PluggableThreePhaseButtonMorph on: self ) actionSelector: #browseInstVars; stateSelector: #isAClassSelected ; onImage: (Smalltalk ui icons iconNamed: #instVarsSelectedIcon); offImage: (Smalltalk ui icons iconNamed: #instVarsUnselectedIcon); pressedImage: (Smalltalk ui icons iconNamed: #instVarsPressedIcon); extent: 24@24; helpText: 'Show instance variables'; yourself.! ! !AbstractNautilusUI methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17302773! buildSwitchToByteCodeButton ^ ( PluggableThreePhaseButtonMorph on: self ) actionSelector: # switchToByteCodeButton; stateSelector: #showByteCode ; onImage: (Smalltalk ui icons iconNamed: #byteCodeSelectedIcon); offImage: (Smalltalk ui icons iconNamed: #byteCodeUnselectedIcon); pressedImage: (Smalltalk ui icons iconNamed: #byteCodePressedIcon); extent: 24@24; helpText: 'Show byteCode'; yourself.! ! !AbstractNautilusUI methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17303754! buildSwitchToSourceCodeButton ^ ( PluggableThreePhaseButtonMorph on: self ) actionSelector: # switchToSourceCodeButton; stateSelector: #showSource ; onImage: (Smalltalk ui icons iconNamed: #sourceSelectedIcon); offImage: (Smalltalk ui icons iconNamed: #sourceUnselectedIcon); pressedImage: (Smalltalk ui icons iconNamed: #sourcePressedIcon); extent: 24@24; state: #on; helpText: 'Show source code'; yourself.! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/10/2013 16:37' prior: 36077440! buildTextAreaButtonsColumn: aWindow | column | column := PanelMorph new. column changeTableLayout; listDirection: #leftToRight. { self buildSwitchToSourceCodeButton. self buildSwitchToByteCodeButton. self buildSeparator. self buildBrowseInstVarsButton. self buildBrowseClassVarsButton} reverse do: [:each | column addMorph: each ]. column vResizing: #spaceFill; width: 24; hResizing: #rigid. ^ column! ! !AbstractNautilusUI methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17288829! classIconFor: aClass ClassesIconsCache at: aClass ifPresent: [:icon | icon class == IconicButtonStateHolder ifFalse: [ ^ icon ]. ^ icon asIconTargetting: self ]. ((aClass includesBehavior: (Smalltalk globals at: #TestCase ifAbsent: [ false ])) and: [ aClass isAbstract not ]) ifTrue: [ | icon button | icon := Smalltalk ui icons iconNamed: #testNotRunIcon. aClass hasPassedTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testGreenIcon ]. aClass hasFailedTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testYellowIcon ]. aClass hasErrorTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testRedIcon ]. button := IconicButton new target: self; actionSelector: #runTestsOfClass:notifying:; arguments: { aClass. true }; labelGraphic: icon ; color: Color transparent; extent: 12 @ 12; helpText: 'Run the tests'; borderWidth: 0. ClassesIconsCache at: aClass put: (IconicButtonStateHolder forNautilus: button). ^ button ] ifFalse: [ (aClass organization classComment isEmpty and: [ Nautilus emptyCommentWarning ]) ifTrue: [| button | button := IconicButton new target: self; actionSelector: #openCommentEditor:; arguments: { aClass }; labelGraphic: (Smalltalk ui icons iconNamed: #uncommentedClassIcon) ; color: Color transparent; extent: 12 @ 12; helpText:'Edit the comment'; borderWidth: 0. ClassesIconsCache at: aClass put: (IconicButtonStateHolder forNautilus: button). ^ button ]]. ^ ClassesIconsCache at: aClass put: (aClass nautilusIcon)! ! !AbstractNautilusUI methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17290518! groupIconFor: aGroup | icon | GroupsIconsCache at: aGroup ifPresent: [:ic | ic class == IconicButtonStateHolder ifFalse: [ ^ ic ]. ^ ic asIconTargetting: self ]. icon := IconicButton new target: self; actionSelector: #restrictedBrowseGroups:; arguments: {{aGroup}}; labelGraphic: (Smalltalk ui icons iconNamed: #groupIcon); color: Color transparent; extent: 15 @ 16; helpText: 'Browse restricted environment'; borderWidth: 0. GroupsIconsCache at: aGroup put: (IconicButtonStateHolder forNautilus: icon). ^ icon! ! !AbstractNautilusUI methodsFor: 'icons behavior' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 17295799! openCommentEditor: aClass | newComment | newComment := Smalltalk ui theme textEditorIn: window text: 'Enter a comment for the class ', aClass theNonMetaClass name,':' title: 'Comment Editor' entryText: aClass theNonMetaClass comment entryHeight: 300. newComment ifNotNil: [ aClass theNonMetaClass comment: newComment asString ]! ! !AbstractNautilusUI methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17291954! packageIconFor: aPackage | mcpackage | PackagesIconsCache at: aPackage ifPresent: [:icon | icon class == IconicButtonStateHolder ifFalse: [ ^ icon ]. ^ icon asIconTargetting: self ]. aPackage classes isEmpty ifTrue: [^ PackagesIconsCache at: aPackage put: (Smalltalk ui icons iconNamed: #emptyPackageIcon) ]. mcpackage := (NautilusMCBindings default mcPackageFor: aPackage). (mcpackage notNil and: [ mcpackage isDirty ]) ifTrue: [ | icon | icon := IconicButton new target: self; actionSelector: #saveDirtyPackages:; arguments: {{ aPackage }}; labelGraphic: (aPackage definedClasses ifEmpty: [ (Smalltalk ui icons iconNamed: #dirtyMonticelloPackageIcon) ] ifNotEmpty: [ (Smalltalk ui icons iconNamed: #dirtyPackageIcon) ]); color: Color transparent; extent: 15 @ 16; helpText: 'Save the package'; borderWidth: 0. PackagesIconsCache at: aPackage put: (IconicButtonStateHolder forNautilus: icon). ^ icon ]. (mcpackage notNil and: [(mcpackage name = aPackage name ) and: [ aPackage definedClasses isEmpty]]) ifTrue: [ ^ PackagesIconsCache at: aPackage put: (Smalltalk ui icons iconNamed: #monticelloPackageIcon) ]. ^ PackagesIconsCache at: aPackage put: (Smalltalk ui icons iconNamed: #packageIcon)! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17348315! testCaseStarted: anAnnouncement | class selector | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement testCase class. selector := anAnnouncement testSelector. self selectedClass = class ifTrue: [| method correspondingClass icon | icon := Smalltalk ui icons iconNamed: #testNotRunIcon. method := class methodNamed: selector. correspondingClass := class correspondingClass. self methodWidget setIcon: icon for: method; updateList ]! ! !AbstractTool class methodsFor: 'world menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 17474603! menuCommandOn: aBuilder (aBuilder item: #Tools) order: 1.0; target: self; icon: (Smalltalk ui icons iconNamed: #toolsIcon). ! ! !AbstractTool class methodsFor: 'world menu' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 17474830! theme ^ Smalltalk ui theme ! ! !Exception class methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21336046! nautilusIcon ^ Smalltalk ui icons iconNamed: #exceptionIcon! ! !ThreadSafeTranscript class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53092064! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #transcriptIcon! ! !MethodOveridesAction methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26488931! buildUpAndDownArrowIcon: aMethod | container up down | container := Morph new. container extent: 12@12; color: Color transparent. up := IconicButton new target: self browser; actionSelector: #arrowUp:; arguments: { aMethod }; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDoubleUpIcon); color: Color transparent; extent: 12 @ 6; helpText: 'Browse overriden message'; borderWidth: 0. down := IconicButton new target: self browser; actionSelector: #arrowDown:; arguments: { aMethod }; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDoubleDownIcon); color: Color transparent; extent: 12 @ 6; helpText: 'Browse overriding messages'; borderWidth: 0. ^ (container changeTableLayout; listDirection: #topToBottom; addMorph: down; addMorph: up; yourself) -> {up. down}.! ! !MethodOveridesAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26487984! privateActionIcon "Return the icon for this action" | testMethod | isOverride ifTrue: [ isOverridden ifTrue: [ result := self buildUpAndDownArrowIcon: method. ^ result key ] ifFalse: [ ^ IconicButton new target: self browser; actionSelector: #arrowUp:; arguments: {method}; labelGraphic: (Smalltalk ui icons iconNamed: #arrowUpIcon); color: Color transparent; helpText: 'Browse overriden message'; extent: 12 @ 12; borderWidth: 0 ] ] ifFalse: [ isOverridden ifTrue: [ ^ IconicButton new target: self browser; actionSelector: #arrowDown:; arguments: {method}; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDownIcon); color: Color transparent; helpText: 'Browse overriding messages'; extent: 12 @ 12; borderWidth: 0 ] ]! ! !IndentingListItemMorph methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23574293! theme "Answer the ui theme that provides controls. Done directly here to avoid performance hit of looking up in window." ^ Smalltalk ui theme ! ! !RecentMessageList class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 32153133! icon ^ Smalltalk ui icons iconNamed: #recentMessagesIcon! ! !StartupLoader class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 50901180! startupLoaderMenuOn: aBuilder (aBuilder item: #startupLoader) action: [ self default loadStartupScript ]; label: 'Run startup scripts'; parent: #System; order: 2; help: 'Run startup "scripts'; icon: Smalltalk ui icons smallJustifiedIcon! ! !EditorFindReplaceDialogWindow methodsFor: 'user-interface' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21137612! buildWindowMenu "Build and answer the window menu." | aMenu | aMenu := self theme newMenuIn: self for: self. aMenu addToggle: 'Close' translated target: self selector: #closeBoxHit getStateSelector: nil enablementSelector: #allowedToClose. aMenu lastItem icon: self theme windowCloseForm. aMenu addLine. aMenu add: 'About' translated action: #showAbout. aMenu lastItem icon: Smalltalk ui icons smallHelpIcon. ^aMenu! ! !EditorFindReplaceDialogWindow methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 21129700! taskbarIcon ^ Smalltalk ui icons smallFindIcon! ! !MethodIsAbstractAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26457821! privateActionIcon "Return the icon for this action" ^ Smalltalk ui icons iconNamed: #abstractIcon! ! !Workspace class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54960902! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #workspaceIcon! ! !Workspace methodsFor: 'window menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54956214! addModelItemsToWindowMenu: aMenu aMenu addLine. aMenu add: 'Open...' target: self action: #openCommand. aMenu lastItem icon: Smalltalk ui icons smallOpenIcon. aMenu add: 'Save as...' target: self action: #saveAsCommand. aMenu lastItem icon: Smalltalk ui icons smallSaveAsIcon. self fileName ifNotNil: [aMenu add: 'Reload' target: self action: #reloadCommand]. aMenu addLine. aMenu add: 'Encoding' subMenu: ([ :menu | TextConverter allEncodingNames do: [ :ea | menu addUpdating: #itemForEncoding: target: self selector: #useEncoding: argumentList: {ea}]. menu] value: (UIManager default newMenuIn: self for: self)). aMenu addLine. aMenu addUpdating: #itemForCr target: self selector: #useLineEnding: argumentList: {#cr}. aMenu addUpdating: #itemForLf target: self selector: #useLineEnding: argumentList: {#lf}. aMenu addUpdating: #itemForCrLf target: self selector: #useLineEnding: argumentList: {#crlf}. aMenu addLine. aMenu add: 'Inspect variables' target: self action: #browseBindings. aMenu add: 'Reset variables' target: self action: #initializeBindings. aMenu addUpdating: #mustDeclareVariableWording target: self action: #toggleVariableDeclarationMode. aMenu addUpdating: #acceptDroppedMorphsWording target: self action: #toggleDroppingMorphForReference. aMenu add: 'Previous contents...' target: self selector: #selectPreviousContent. aMenu addLine. aMenu addUpdating: #stylingActiveString target: self action: #toggleStylingActive.! ! !Workspace methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 54946477! theme ^ Smalltalk ui theme! ! !MethodIsTestAction methodsFor: 'order' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 26458533! privateActionIcon "Return the icon for this action" | testIcon | testIcon := Smalltalk ui icons iconNamed: #testNotRunIcon. method hasPassedTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testGreenIcon ]. method hasFailedTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testYellowIcon ]. method hasErrorTest ifTrue: [ testIcon := Smalltalk ui icons iconNamed: #testRedIcon ]. ^ IconicButton new target: self browser; actionSelector: #runTestForAMethod:notifying:; arguments: {method. true}; labelGraphic: testIcon; color: Color transparent; helpText: 'Run the test'; extent: 12 @ 12; borderWidth: 0! ! !KMShortcutSetting class methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/10/2013 09:24' prior: 24182358! settingInputWidgetForNode: aSettingNode | catcherMorph theme | theme := UITheme builder. catcherMorph := KMCatcherMorph for: aSettingNode realValue. ^ theme newRow: {catcherMorph}! ! !ChooseDropListDialogWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19023067! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallQuestionIcon! ! !ChooseDropListDialogWindow methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 19021561! icon "Answer an icon for the receiver." ^ Smalltalk ui icons questionIcon! ! !GraphicFontSettings class methodsFor: 'fonts' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23024990! fontChoiceButtonForStyle: aSymbol label: aLabel | label | label := StringMorph contents: aLabel asString font: (TextStyle default fontOfPointSize: (StandardFonts pointSizeForStyleNamed: aSymbol)). ^ (Smalltalk ui theme newButtonIn: World for: self getState: nil action: #setFontsToStyleNamed: arguments: { aSymbol } getEnabled: nil getLabel: nil help: ('Change font style to ', aLabel) translated) label: label; yourself ! ! !GraphicFontSettings class methodsFor: 'fonts' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23026318! resetAllFontToDefaultButton ^ (self theme newButtonIn: World for: self getState: nil action: #resetAllFontToDefault arguments: {} getEnabled: nil getLabel: nil help: 'Force all system fonts to be the default one' translated) label: (self theme newRowIn: World for: { AlphaImageMorph new image: Smalltalk ui icons smallRedoIcon. self theme buttonLabelForText: 'Force all' translated}); yourself. ! ! !SystemSettingLauncher methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51670399! defaultIcon ^ Smalltalk ui icons smallDoItIcon! ! !SystemSettingLauncher methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 51670533! inputWidget ^ (self theme newButtonIn: World for: self getState: nil action: #launch arguments: {} getEnabled: nil getLabel: nil help: self description) label: ( self theme newRowIn: World for: {AlphaImageMorph new image: Smalltalk ui icons smallRedoIcon. self theme buttonLabelForText: 'Launch' translated}); yourself.! ! !TEasilyThemed methodsFor: 'theme' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 52007143! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28256538! classRefactoringSubmenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. (aBuilder item: #'Rename...') keyText: 'r, c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClassWithRefactoringEngine: target selectedClass theNonMetaClass ]; parent: #'Class Refactoring'; order: 0. (aBuilder item: #'Remove...') action: [ target removeClassWithRefactoringEngine: target selectedClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); parent: #'Class Refactoring'; order: 100; withSeparatorAfter. (aBuilder item: #'Generate Accessors') keyText: 'h, a' if: Nautilus useOldStyleKeys not; action: [ target refactor generateAccessors ]; parent: #'Class Refactoring'; order: 200. (aBuilder item: #'Generate Superclass...') action: [ target refactor generateSuperClass ]; parent: #'Class Refactoring'; order: 300. (aBuilder item: #'Generate Subclass...') action: [ target refactor generateSubclass ]; parent: #'Class Refactoring'; order: 400. (aBuilder item: #'Realize') action: [ target refactor realizeClass ]; parent: #'Class Refactoring'; order: 500. (aBuilder item: #'Split') action: [ target refactor splitClass: target selectedClass ]; parent: #'Class Refactoring'; order: 600.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28258005! classVarRefactoringSubmenu: aBuilder | target selectedClass | target := aBuilder model. selectedClass := target selectedClass. selectedClass ifNil: [ ^ target ]. (aBuilder item: #'Add') action: [ target refactor addClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownClassVarFrom: selectedClass ]; parent: #'Class Var Refactoring'; order: 600.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 28261021! instVarRefactoringSubmenu: aBuilder | target selectedClass | target := aBuilder model. selectedClass := target selectedClass. selectedClass ifNil: [^target]. (aBuilder item: #'Add') action: [ target refactor addInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownInstVarFrom: selectedClass ]; parent: #'Inst Var Refactoring'; order: 600.! ! !NautilusRefactoring methodsFor: 'option' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 28226710! selectVariableTypesFrom: aCollectionOfTypes selected: aSelectedCollection for: aRefactoring | stream result | stream := WriteStream on: String new. aCollectionOfTypes do: [ :each | stream nextPutAll: each name ] separatedBy: [ stream cr ]. result := Smalltalk ui theme textEditorIn: self model window text: 'Select classes to move to: (one class per line)' title: 'Select classes to move to:' entryText: stream contents entryHeight: 300. result ifNil: [ ^ nil ]. ^ (result asString findTokens: String crlf) collect: [ :each | aRefactoring model classFor: (Smalltalk classNamed: each trimBoth) ] ! ! !HelpBrowser class methodsFor: 'world menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 23367163! menuCommandOn: aBuilder (aBuilder item: #'Help Browser') parent: #Help; action: [self open]; icon: Smalltalk ui icons smallHelpIcon! ! !HelpBrowser class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 23366614! theme ^ Smalltalk ui theme ! ! !FinderUI class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 22173092! icon ^ Smalltalk ui icons iconNamed: #smallFindIcon! ! !WateryThemeIcons methodsFor: 'private - accessing' stamp: 'EstebanLorenzano 5/9/2013 10:58'! normalSizeNames "Answer the names of the normal icons" ^#('error' 'info' 'lock' 'question' 'warning')! ! !WateryThemeIcons methodsFor: 'private - accessing' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallSizeNames "Answer the names of the small icons" ^#('smallError' 'smallInfo' 'smallLock' 'smallQuestion' 'smallWarning')! ! !KeyChain methodsFor: 'private' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 35621879! askPasswordForKeyChain: attempt | string | password ifNil: [ ^ lastUnlock contents: true ]. string := (Smalltalk ui theme passwordEntryIn: StandardWindow new text: 'Password for the keychain for ', username asString ,' (', (self maxAttemptsNumber - attempt) asString ,' tries left)' title: 'Password request' entryText: ''). string ifNil: [ ^ self ]. (encryptor encrypt: string) = password ifFalse: [ self logCr: (encryptor encrypt: string). self logCr: password. ^ self ]. lastUnlock contents: true! ! !CategoryWidget class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 18735976! categoriesMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [ target findMethod ]; order: 0; help: 'Search for a method by name'. (aBuilder item: #'Add protocol...') keyText: 'n, t' if: Nautilus useOldStyleKeys not; action: [ target addCategory ]; order: 100; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [ target fullBrowse ]; order: 200; withSeparatorAfter. (aBuilder item: #'Categorize all uncategorized') keyText: 'h, C' if: Nautilus useOldStyleKeys not; action: [ target categorizeAllUncategorizedMethods ]; order: 1100. (aBuilder item: #'Remove empty protocols') action: [ target removeEmptyCategories ]; order: 1200; withSeparatorAfter. target selectedCategory ifNil: [ ^ target ]. (aBuilder item: #'Rename...') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameCategory ]; order: 1300; enabledBlock: [ target enableCategorySingleSelection ]. (aBuilder item: #'Remove...') keyText: 'x, m' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeCategories ]; order: 1400; icon: (Smalltalk ui icons iconNamed: #removeIcon); withSeparatorAfter. (aBuilder item: #'Add in group...') keyText: 'n, e, m' if: Nautilus useOldStyleKeys not; action: [ target addProtocolsInGroup ]; order: 1500. (aBuilder item: #'File Out') action: [ target fileOutCategories ]; order: 1600.! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! errorIconContents "Private - Method generated with the content of the file icons\new\error.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AA7ESURBVGiBvZp7cFRVnsc/59zb3Uk63QmPSIIkJEQU5CWwUjwKtnTAcbZmnJlSynWqZhZr fNDlUjPW4mo5u1Lq+JydWccZvBIdp8aaYUoEldVRdBFxVnlDYgCNECQBEiAEO6/udN/X2T/6 3k53Hgq6O7fq1L3nJPfe7/f3+/5+53fObaGU4uschmEIYB5wHTARGJ/TBNCe004AW4GdsVjM /Vov9g7xVQgYhiE9wN8TQtxQUVFRUVVVRSQSoaioiHA4TFFREQCJRIJkMkkikaC7u5vW1lY6 OjrOAW8Am4G/xGIx+29GwDCMfwAer6qqmlFbW0t1dTVaPE5/QwNmaytWZyfW2bNYHR24pomM RJDRKPqYMYRqaoguXoxbUUFLSwvNzc20tbUdBf4NeDkWi120NS+YgGEYfwc8WVFRcc2CBQsY AyR37SJ54ABmezuuaeJaFso0s9euaaIsC9d1s00pRWD8eEqWLKHs+9/nfCDArl276OjoOADc F4vF/vv/nIBhGPeUlJQ8vnDhQlk1ejS977xDYudO3FRqALQHOI+IZeE6ThZ4loTr4iqFAsbe cAOVsRgn+/rYsWMHfX19v/CIXFCMfCEBwzCCwLrKysoV1y1divXhh/Rt346TSAxYdxD4vDHb Hhb44D6BAON/+EPG3X4772zdyunTp98CbonFYt1fmYBhGGOAzTNnzly0YPZsejZsINXUNKzF hxCxLJRtfynwwdcl8+Zx5VNPsevgQT7++OMjwDdjsVjLRRPwLL918eLFi6eWl9P1pz9hnz2b J5E84INl4+k+1/ojySiv77qEJkzgqro6Pu3tZc+ePZ8A82OxWM9IBOQI48/OnDlz8dSKCuLP P58B7wFTto2yrAz4QWPZvlL5YHP6yicyTF8pRbK1ld3LlzNl1CimTJkyFdhkGIZ2wQQMw/iX ysrKWxfMmUP3+vU4vb0ZLfuy8LQ93JgarPkLBZ7rEaUw43H2/uhHLJw1i/Hjxy8VQjx1QQQM w5hdUlLy5HVLl9K7cSPW2bNDrZvTBo99XeC5/b7jx9l3220su/ZaioqK/tkwjG9ciAeeXLhw obT37CF95MhQ6/rWtyxEQQGRxYuRRUWZMce5YOAFEyZQftNNyGh0AHiOjHwS53bs4ERdHfPm zQN43itbhidgGMZ1FRUVS6vKykj89a8DEsm1tjemlZZS+ctfUr56NVW//z1y0qQB4D6JYfrK dYnMns2cV1/liocfZu6bbxKcOPELvfHpb37DxFGjGDt2bLVS6sfDEvCYPbFgwQIS27fjJpN5 oHMDVZaWcunDDxO45BIAQpEI1b/9Lfrll3+p/ouvuooZ69aheXVSuKyMua+8Qqi6elgZKaWw ens5/PjjLFy4ECHEfxiGUTCcB66pqqq6amwwSHL37qEZJ0c2lz74IIFx4/KsUFBUxKS1a9Gv uGJEGRXPnMmMujq0cDjv3nBJCVe/9hpaWVkecD+tukrx2YsvEk2lGDduXIkQ4h+HI/C92tpa UvX1uKnU0OziySh89dUEysuHiyVCRUVMfvZZ9KlTh+i/ePp0pnvglVKk02m6uro4c+YMbW1t nO/uxozFaLdt2iyLE5ZFi21z0rZpt21Op9N8sn49tbW1KKVWDyEghPhudXU1/Y2NeYGal4Fs m8T+/dimOSwBgFBhIVPWrSMwbVrWA4XTplH9618T7+/n5MmTHDt2jJaWFs6cOUM8Hqenp4fO zk7a+vpIK0XadbE94qZSpFyXhFJ8tGkTNTU1AFNzZSQNw5hTXl5eFUgmMU+cyLP4YCmlT53i 2COPYFvWF5KYWleHc+WVJCdNovhnP6Ozt5euri6SySROTrZSStHf3099fT3WG29kM5mTEw+O 1z/T1ITb0cHYsWOlEGKl/z4dWDZx4kRShw7lp8rBE5VHytm2jSOOw+Q1awgEAnngTdOkt7eX vr4+LlmzBmwbrbAwGxNAHvhUKkV9fT3Jl17COXAAZ5D+c/uOUjS99hoTFi2is7PzZuApX0JV kUgEq7196ETlS8kn4hVo9rZtfPrAA1ieJxKJBO3t7bS1tdHd3Y1t22iBAFphYTYrAXnZybd8 csMGnP37s8HrA/f7Tk5gdzY3E4lEAKbkemB8UVERdjw+rP7zxnJf8u67HLQsyn7ykyGyGKn5 JFKpFA0NDSRffhln375stnGVQgkBUoKuI4RAh4wnbJue9naKi4sBIrlBPD4cDmN//vkX6j83 NbpK0W3bnHr7bQ4+9BBmOn1R4D9qaCC5cSPO3r0Z4EIgdB0RCiGLitCLitAKC9ELCxGFhegF BQTCYfricZ+A9swzzxTneaD3/PmR9Z+T0/sdh7hpZjKFUvR/+CGf2jaX33svmq6PqHelFKZp 0tDQQGLjRty9e1GahpASTddB05BCoIRAAULKzNl7ngAS8TjhgXmkGjik+z3lOPmFmS+bnJwe N00SjoPra9P7G+3tYFm4UmatPZIXRH09qr4eUVCA1DTQ9YxkvOYCCAFK4cIACdtGDwZxHMeH fKlPoD2RSEyQxcVDJy9vPeu4Ll2WlQGfM0O6ShGsqmLyY48hQqE8qfgkcq81TWPWihU0njpF 4vBhhKaBpiGEwJUShMh4wbtHeM8SSiGkJDxmDMlkMqN9KbMx0J5MJpGRSFY2WQ94QM+bJomc vuMBC1VWMvmRR5DFxXkB7pMYLvtous70++8nOncuMhRCBoPIYBA9EEDXdXRNQw8EkLqO9K41 XUfTdYpHjyaRSPgGOZ0lkEgk0KLR/AzkyeRcOk06xxOOFw+hykoue/RRtGh0iFQGF3O53vBJ XPHTn1I8a1YGYCCArmloXpOahiYlAS8u/PFIjgds284SONnT00NgwoS8hYntOHSm05iOMwDc AxH0wMtIZMSsY1kWpld2DOcNTdepXbmS8LRp6FJmQEqJJiW6EGhSZsFLT1qjL7uM7u5uAHfV qlWdPoGtLS0tFM+fn7cY/9yySHvAfb073qK79uc/R2YmlGHBm6ZJfX09jS+9RCqVGlFeuq5T fdtthKZORfdSoqYUWu4ZMgSkZOqNN9La2grQ6cU3Etjf0dFxygyHKZg8GaUUPZZFv23nAVeu C0JQs2YNWknJEG37136qTG3dir1lC01PP03amydy7/GvpaYxYcUKVGkpmk/CdQeAeyBLR4/G LSmhq6sL4C9+KpLefuR/tbS0ULxkCabj0GNZ+VseXuCqggK0UaNGDNZ0Os1HH31Eets2gocP I4NBnCNHOGoYpNPpYWPDdV2EECRnzkRznAx4z/pSqUwGEoJL587l+PHjvtdfzRLwzq81Nzcz 6vrr+Vwp7Nx6PscDVm8vLRs2DBus6XSaxsZG0tu2oR86hPQzia6jmptpqavLeiL3ftd1aW5u hs5OdMdBs22k66K5LlIpJKAJwaxbb838H5jpdHrrYALvtre3H+ywLC654QaUTyIn5/uV4bk/ /pHm118fErCNjY30b9uGdugQWjCI8NKg1DSklIhjxzj13HOkB8XE0aNHSTY0UL5/P9KykJ4X lOuCJ7WJc+fyua7T2dkJ8Pbdd9/dn0fA20i9d+fOnVy+ciUUFIBS2D7wQfn/3Nq1HN28Gcdx srLpf+89AgcPIr2JSXrZQwiB5mlZa27m7HPP0Z9I4DgOzc3N9NfXU/Xuu2ipVMb6jgOOk5EP oGsa8x94gN27d/uYHyXnyNtaNAxj67Jly76R2rKFj9euHQCek0Jtn5DrwoIFWDNmIA4fJtDU lJWNkBLpp8HMS9CUQrou0raxo1E658wh2NFBxa5dSNvGBRxNw9Z1bE3LXGsatd/6FiU/+AHv v/8+wMZYLLY8l4BO/nHPzp079924YoU8d+AApz/4YCCIvTqdnDmBffvQGxsRwWCmaRpIiZAy 4wUfPGTAWxa64xA4e5aazZuRpom0rEwBp+soKTPltBC4QjBqwgRm3HsvGzdtArA1TbtvEN78 ja1YLFbf19d33ztbtzL/V7+i2NvuyC4qfA94JTC6jggEEJ5sssCFQGTSRSaLOA7CttFcF2FZ 6JaVAZ9KoXmB7UqJ0jRcry4KRSJc88ILvLVlC/39/QD/eccddxz7QgIeiV+cPn36xd0NDSx5 9lkCJSUD2cjzgL+nL7wyGP/sA/ceLAHhuuC6mbPjIFwX5TjguiAlZiiEFQxi6zqOJx1CIa5d t44P9u/3A3d7R0fH/YOxDkvAO+745JNPdh2Lx7l+40aKa2ry5oNs+vQqSCBz9ptHFKXyrnP3 fWxNIx0KYRUWYodCOIEAlq4TiEZZ9sILNHV1cezYMYBW13VvWrNmzbAfAoclEIvF0sB39+zZ s7ehtZXvvPoq5YsWDZTSgGNZGat7dbzwgPvSUTBAAq/kAFzADgSwQiHsUAgzFMIMBLACAYor K/nmK6+wr62NhoYGgIQQ4tt33XXX+REMPaIHiMViHcCSpqaml7e89x5Lf/c7Zt99N1o4nMlG pjmwhoWMrITIfvvyFySu9zcbcKTE1nUsr5me1d1gkKply/j79et5c/t23/InHMdZsHLlykMj YYQL/8j37+Fw+MF58+aJS0tL2fHEExz+858RgQCFZWWZ9ElmGSgHZR/h6V54C5OsRwA0jbIZ M5j30EOc6O1l7969fsD+j23bN65atercl2G7mM+si4DnR48ePWX+/PmELYvGP/yBU3v2kIzH M3kfMtmITBWJUgivJMhdZRVGo4ydPp3pt99OVzjM7t27/TLZUUqtLSsru2f58uUjbwF+FQI5 RG4Bni4rKxs7adIkampqcDo7aX79dbqOHycVj5Pu7cVMJBCOQ7CggFBhIQXRKCWVlVx+882o igqOHz/OZ599xvnzWXm/Atwfi8U+vRg8X/WnBjpwC/CvwJWlpaWyqqqKaDRKOBzONshsevX1 9WV/anDixAl6erLf7EwhxNtCiMfuvPPOnRcN5KsSGERGE0L8WCn1T8A0IAoM+ZLiH0qpuBDi LaXUpmQy+fbq1asTX+f9X5vAcM+sq6sbY5pmhZSyQilVCJwJBAKnR40adeZCtX3BL/t/IPA3 Pf4XvU9EdugvtU8AAAAASUVORK5CYII='! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! infoIconContents "Private - Method generated with the content of the file icons\new\info.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AA5iSURBVGiBvZp7cFzVfcc/55x7d1daPWxZAsvY8otkTArmORrb1JSXTSelJjHjEP4oTUqB 7IA7w8QQkjaZ9JmUdFLaDiwwTCelk7RNeQQI4xgMQ9PGb4h5BjvCkgy2sSxZD2tX0r33nF// uHfv7ko2GGizM3d2770jne/3+/v+HvfsKhHhk7yKxaICuoG1wEJgXs2hgMM1x0FgK7C9UCi4 T7Rw8lIfh0CxWNQJ4M8ppdZ1dnZ2dnV10dzcTGNjI/l8nsbGRgBKpRLlcplSqcTo6Cj9/f0M DAwcA34KPAU8WygUot8YgWKx+Fngu11dXectXbqURYsWMVwy7N0/Qf/7AYMjIUePhwwMhgSh o7lR05LXzGnxWHxWltUXtdDZ5ujr66Onp4dDhw79Gvgz4D8LhcJHVvO0CRSLxUuAezs7O69Y uXIlZOaw480yr+wrc/hYQBA6wtARhEIQVD47wlBwzuGswzmHOGFeh89lF7fy+Ss78Blix44d DAwMvALcUygUnv8/J1AsFu9qbW397qpVq3TbGV08t/sE218vMRlUQYehIwhcHZEwdNga4BUS zgniHCCsu7ydwhcXMD7yLtu2bWN8fPx7CZHTypEPJFAsFjPAQwsWLPjS1WvW8os3Q17aO06p bFN1U8CBm3EtihLgrh74dCK+B3+wbh63XH8mW7c+x5EjRzYDNxYKhdGPTaBYLM4Bnlq+fPml F16ykh+/NMbb/ZP1iifApxMJQ0dkZyp+ciLVe93LW7nv65/h9Vd38NZbb+0HrikUCn0fmUCi /NbVq1evntt1Dj/cOsLRoSgGHNb4O5Bp14QodJz/qUbW/c4sAJ58cZDte0erNppOooaIc475 Z2Z5+C8v4MTxfezatetXwIpCoTB2KgL6FNcfXL58+erOrnN45Nlhjh6PCCNHGDmiSAjD5Khc q5yHjpXLm/j+Vxdy+SWtXH5JK/9w91J++8IWRKQGeG1EBBFBJCbYf6jMho07mX3GMpYtW3YO 8HixWDSnTaBYLH51wYIFX77okpX86IVRTpQtUeQII0nAx95OryVEooTcDWvmzFjkjz7fWQd0 JhFJ7jtEHMNjATdt2s35F65i3rx5Vyul7jstAsVi8cLW1tZ7r16zlsd+foKjw2EMOgEehjHo sPZaVL3mnCOXVSdd6GSKp8CdqyfiHL3vjvPHX9/DlVetobGx8Y5isXjV6UTg3lWrVuld+yL2 vzdVVTx0KZEoSpI0lLpr1sYWePLFoRmL/PCZIzMUlxrFa+9JDYltLx/j4X8/SHd3N8Ajydhy cgLFYnFtZ2fn1R1zu/j5a6XUItUjsU1YPa/khLWSJugz/zXEdx45yP7+Mq/tH+fb9x9gy7bB GUDdNCJOTh6Nf/rBPmbPWUh7e/siEbl5OgElIpWB7JX169dfsKevkV+8Vj5lxUnLZyiEQUyi rsLYaeenqDi1JFwKOjm3tSQcN61fxKabO3n66adHgbmFQmFyegSu6OrquiCTb2fnm+X6ilOT qLV+jxL/i5MasBV/f3jF+SD/i0gSkfjeo48dYDJq4cwzz2xVSn2xNgJe8v65pUuX8stfT8bj QW3FCWtB11+rAnWnBnoS69gowEUT2GgK5ywuihBncTaKz12EuAjnFCIKJ4ofPfEr1l25lKNH j24CflAXAaXUdYsWLeK1dybqE3W6/6Nq4p6u4s5G2KhEODVMUB4gKB0iLB8hnDyODU5gw3Fc VMbaMs5O4ewUYqNElABnJ5GoxOPPvsrixYsBzikWi7k0AsVi8aLOzs6ucuBz8GgQqzs9UZNG FSXnztYDlRrFCxvaWX/VLLSOC4Z1wn/8tJ+/e+QNnItwlhrbuMQyNj5PxBBnE1GSz87x9v73 GTjuaG9v10NDQ18B7qtEYM3ChQt5o3cy8bpUG1U40//WSmKLmf53UcD6q2Zx4MA77Nmzh927 d9N74B1uuHYhzlnEgYit87eIrfF/lYgTl5zH+SAu4ieb32b+/PmIyA21Fupqbm7m8GBYl6Sp lWqsE0X1ileI2KBMUB5gqnwUEcfo6Ghqq2PHjmG0SojaKlCxNaXV1fSAakTiNWx6r+fAIM3N zQDLapN4XmNjI8NjUbW6JI2qruKEJ1M8JJgcxoaT8cI2Hgyr5TMGEV+zyd9H9Y0rSfQKCYWg NXgaFArwELFEoXD4yBhNTU0AzbURmJfP5zk+FtVVnDr/R7WKxwtHk6NMlY9iw6ma0NuUQG1y A1U1RaCSAwlwJQ7PV2RzisYGTWPOoyFnaGjwaMgpcjmPfN5neGS8QsA88MADTXURGBo5cUr/ 11YYG00QTA4jUYTY2KfOkfo1BVsTBaBKMlFdxGGUoDMKTxuMAmU0CgEErRQ4QVDx/3CK4bES +Xy+Iv4i4I1KH8A6qebAKSpOMDmMnSolQGyioCQkYo9PB1+1UDVxjRK8rMIYjadBa9AqfgeH UiACSdYjThE5RybjYa2tQD6rQuBwqVSa35TT1UY1o+JYwokRbFCqaVwutY2TagWZbiFjTBoB owQvo/E88AwYrTAGlFZo5VACSmkcyUOWqFgkq9CimNOWp1wux96P2eIBh8vlMs2Nuq5RVSuO I5gYqiaqq9imtpRWS2OthbTW5HJxz8n4Ct+PFfdMDLyivDIKhY63wQCTPuCAQeO0Q0TRNruJ UqlUWeNISqBUKtGSb01tE0VJtbGWoDwYt/5E7emlr5of8b1KBAAaGhpoaGiIP+d0DNxTeFrF 4LVCaRLLKFAV5R3OKdAGJzYuw6KY09acRiCKopTAu2NjY8w/oz19VHTOYV3EVHkQFwVJ/bbp 1khl/JW0NNqUVCUC+XyeXC6XEshmTex3E3u/AlypZJ5U8d+hQJxG6zi6piKIwNmL2xgdHQVw GzduHKyU0a19fX2sOLepbjQOJ47Hs0nibbEOZ5MktS6eVyodU6okABobG1P1s9lsTMDXZDIG P+NhPI3nGUySDMo3oD3wPEQZMAbRJk4UbVBGo5Xm+s+eQ39/P8AgxImigZcHBgbey2cDPrUg F4OfGiMKJ5IyWak4AhLbquJ5sdXSWGn9SikaGhrI5XJks1kymUzs64zB8w3G02gvBqm0RmkP lIcYDTom4lT1PlqD0rS1zaK1yTEyMgLwbKUU6WQ/8um+vj4uu6gJawPCybFY8WmJahOfi4vB x4lr0wqkEw9XwGezWXzfB8D3NMokahoPtEGMj2iNVQanPCwGpxL1MYjSiFIopbj4vLPo7e2t WPTJlEDy/pOenh5+d9VsJDgez+NSm6i2PnHrciAmqZH0gb5CwPf9lABao4xOFNaINlhlsMrD ao+I+HOkDQ4dE0EDGqUNX/7C+fT09AAEU1NTW6cTeOHw4cOvhxMDrLvijGTeieqnxjRha0up pB01m9H4fqxWJpMhk8nUEVCJ6miD014MFo8QQyiGCJ9QNFZi8E5JavKLz12IJ8cZHBwE2HLn nXdO1BFINlK/tn37dr5yw6fJZZMm6KJ0/BU5Sf0XCwK+r8n4kPGqBDzPw/O8tJGhYmCW+AjF IxRDKD6BeASi4yiIxgqIxGXKKI9vbVzBzp07K5j/hppXuitRKBQ2Hzt27IXhoUPcdN2SOALp 1Fgzl6cPH3H9j4GD7ys8T6OUwvf9FLxSsa2c0jilidCx6hgC8ZgSQ+A8QmewTjN9o3PNqqUM D/ZXkvexQqGw46QEktdd27dvd19av4SVF3Qkitt0lo9HYdIZPeuBb8DzK91VISJ16ldavlOa 0OnYNk4z5TwmnEfZ+kw5g0URj26CAhSO+WfM5mu3nMeuXbsAImPMPdPw1hMoFAq/HB8fv2fr 88/x/T9dwaKzmtIkrm5IRYgTlHJ4HviewmgVzzNaIQK+79er74RIFA5D6BQhHoHTTFrNVGQQ EbQ4TDx7onE0N2T557++gp/9bDMTExMAf3/rrbe+84EEEhLfO3LkyKN7X9nJg391Ga3NfuL/ 2tHZ4dfMNPFgBkrDMy/2opSuA//US+/hRGEFHCoeEl28eNYEZFSIpyOMijMkq+Ghb1/Jy7v/ p5K4Lw0MDHxjOlY49fZ6Fnipu7t7xeyOJdx89/P09I1Um5aN90DzDQY/o/E8hWc0xtNp8xFt QGksySGGEE3kNIEYnAAi8YSKxSiLR0hLzufBb13O2OA+9u7dC9DvnLv49ttvn7lnebIIJFGY Aq7btWvX7v539vLkQ7/PpRfPrT6giCMMLaYyxwNKxY8iVN5FcJL0ewFJHlTA4RORVSFZHZFV Ab4K8CVkQXsTT9x3DYd691TAl5RS154K/CkjUBOJHPDo3LlzN6xdew0PPPoqD/7rXk6UphBx zG3PkckajNForTCeiSc0rRFlEKVwSqel0WGqpJKE1Tg8BVd2d/HNW89jy5bNFdsctNZee8cd d7x+SoAfRqCGyDfz+fyfd3d3q1ltZ/G392/j3556E98oOjoa8D0NCQmlEgspBSquLi45xCmk sr8sglFw3tkd/MWfdHPi+EF2795dSdj/jqLo+o0bNx77MGwf5WvWS4FH2tralq1YsYLQ5fmX H7/Grr3vMXyijFYxCRXPyKBMYhiFKB0PgwBK0ZJv4Nyz27nlC+eS90bYuXNnZUy2InJ/R0fH XRs2bAhOB9fH+aL7RuAfOzo62pcsWcLixYsZHLE880IPve+OMDw2yYnxKUoTARZFLpOhoSFL Sz7Hgnmt3PB7n6azTejt7eXAgQMMDaX2fgL4RqFQ2PdR8Hzcnxp4wI3A3cBnZs2apbu6umhp aSGfz6cHxD81GB8fT39qcPDgQcbG0u/sAqXUFqXUd2677bbtHxnIxyUwjYxRSt0sIn8I/BbQ Qvp0O/MlIsNKqc0i8ni5XN6yadOm0idZ/xMTONn/fPjhh+cEQdCpte4UkQbgfd/3j8yePfv9 0/X2aS/2/0DgN/r6X3TaUFhYoyx/AAAAAElFTkSuQmCC'! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! lockIconContents "Private - Method generated with the content of the file icons\new\lock.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AA2HSURBVGiB1Zl5jF3Vfcc/Z7n3rbO88YwXjCc2DC5xgKTYJQgiJ6IoBSGhQmNDaNKUqCVJ F1VEUEGlgkxLTKCiqgyqILIN1DJJLWxEXURwHGKiqqhicSpPUR05NVZsPAvjmTdvu/ds/eO+ 2ewBbIypeqQz77y57573/d7f+X7P73eeCCHw/7npM71h06ZNffV6/ctpmn7VGPN5a61IkgRj TMNa++MkSZ7dsmXLT88F2PmaON0IPPHEE6uSJNmRJMmiZrOZt9aWZl93ztFqtajVauPNZnN/ rVa7ZefOncPnBPWsdloENm/efGuSJJtGRkZ6S6USK1eupL+/n0qlQhRFeO8ZGxvj6NGjHDp0 iEOHDrmhoaETSZL82XPPPfej/zMCO3bsUI1G4x8ajcZXJyYmeq6++mouv/xy0jTl+PHjvPXW W1Sr1bBo0SKxfPlyli1bRqVS4c0332Tfvn3s379/vFqt/nz16tW/e//99/tPnMD27dufHh0d valcLndcd911RFHE888/Hw4cOJBKKV0cx68LIQa11lcqpVbEcVxatGgR119/fVQqlXj55Zd5 8cUXa8ePH3/4pZde+ptPlMDu3bsvHxsb2+O971m3bh3Hjh3jySefNN774d7e3mvuvffegyff c/fdd5c6Ojr2lsvlz11xxRW5q666ip07d/L000+PVavVL+zbt+/tj5uAfJ//iyRJtlWr1Z4b b7yRQ4cOsXHjRqO1/klnZ+fy+cADPPLII/X77rvvypGRkW/v378/ffXVV7nppptYu3ZtTxzH O9evX68+bgLz2ugLL7zw7YmJiaVr166lXq+zefNme/755z//wAMPrD+dSTdu3PjUPffc0/Le P7106dJ4/fr17N+/f9nRo0fvB+77OAnMFwERQnggjuPOlStX8tprrzE5OZlUKpVvnMnEDz30 0A8bjcbre/bssV1dXaxbt64EfOfjjsIpBPbu3fvpZrMpLrvsMo4dO8auXbvSVatW3XHnnXc2 z3Ty4eHha7XW7uDBg6xZs4aenh51+PDhL30syNvtFAIhhM83Go3yypUreeedd4iiKNx1113b P8rkjz76aLNare4fHBykr6+PVatWVbTW3zx72DPtFAKtVut38vl8zlrL4OAg3d3d/3M2XzAx MbGjXq+3JiYmuPTSSxFCrD6b+U5us0S8QXKYONKrr+rsLNJoVDly5Fd+8eLKS4cP356fc9fh k6c5fOqoPdDp4me1Xvi92uQ4y85fjFb0/OypFXmAkdJhs25dcGdDINsHxv78lgB/j0xlksR9 aeIxxtGoJUILO2YSa73zBO8JwRFCAD/1PhCCx1mDsxZrDc45vAsE7/He07JRb5okwnuPs45Y mdHUmGCM99a6737lriM//KgENEAQ4Xt0vLgEYTAOJsYCJ4YD40OBE8Nhwfgw5GNFsaAp5BXF vM56IRvnc5LU1DBJjTSZREmJ0hqd0+hIZ2OdjZ33jI1XF743XiU1hmPjCx8CPjKBTAPCdSAM ACYFk7R7mnUBKCWQUqCkQKl2lxIpBd47grd4byEEhBBZl9mrnDU2xpIai7EGKT0yuPymTRfl zioCNvUypAGbQqseaDUDaQvSVsAkoQ0elATZHksBQoKQAecMrk1ACAEyA4xo9zZ4BBhncd4h BOhIggyiY8yKsyIwPDSiakdbmAQaVWhMQLMaaNQE1gZ0JBEqEKTHB4fxksQpMIogFN62cD4l hIDUGqEUTkmEEjiVkRTCEwigA4WSJi6U0VpQT5Wu1j4q/DaBQrEQpFI0JgS2FUh09qXeB7wV KK1RUqKlRmtFrBSxVuQjhZbghIDgcd4hpUIiUGRLR4mpscQaR5pYGo0UhMM5aLSis0qzNUB3 pcP5Usy4CngLphloioA3IQMgNJFSxFqT15pCrCnmFYW8RoQU4yD1HkFAtSfVQqCQaBRaaLRQ tNKUeq3F+EQNrUHrQLWaPysblQDBB0wCaQImCe21nwlYyhnBzhbwlKCDd9Minle8Ymr9C9K2 gKekId4vFz5TAj4ETAq27T42BdMWdQZ+lvtIMU1KEPDeth3IZaDlDOhpMlKQGkNqDGaKgAwI AWd7KJLtxD5g7IxtTtnotG3OA15JgW8D984CYfrJnxyJKfs0U/apZgxqqm3ZsmW99/4RpdQd t99++4/PiMDRo0N65L0G9WrmQs0qtFqZZQapcMJhvKVlJcEovFAYLyEYgkvw1oHUeKHwbeF6 EfDBo4PDB7DCERcVFV0m0gIdQRwr3qvp6JcT13V2F4tby+VycXJy8tkNGzb0nm4NLQG0VkFp iZQSgSAEgTcCKVXbfRRaKSKtMweKMkFrAQKPCA4pQAqBRKJE5jpTPfiANY4kMTjrsNZirSUE iUkJXedd/eCSJUuKSnmWLFlSGRgY+MvTjYAE6K5UXGVBjnJHTC6OESGCEBHJmJzOk49yFOM8 5XyBjmKRrmKJjnxMIVLkBEQ48gJyAnJKkJOSnFTklCanIoINtBopE+N1apMNapN1apN1ktRz oprzfQsXf61U3M2XvvgN8vlBuru7v7thw4bTkngmYuuydd+aWf8z6cKMBmanElNrfz73OVkH xlrSdpI35T5KK+I4h154c6mrS+cvveQHFPLjXLjiH1m8eHHfqlWrvnXaBDIbDZg0TAt5jnjn gJfTAs4s1H4g+BBC24HsNHghIIpyCN3DslU3F7o6nyKXmwCgr2+QfO4/6OnpuYcsDTuNCHg/ y30CznCS88g570PwBGenScznPlN2OgXeGNsGH9oEYt41N9Bd0WL58h1zQPUueJz+/v7+Xbt2 3fJhBDTAyNAJPXQ0oVEN1OuAEHjhsd6ROIuwGlKJFwrrFVI6nGnhnSEEiQ4KGyQ6CFwIOO+x zqEEpNaAgnwpRuu4vQML8uUl1DpvRvAwx456Dh7smQZ15ZX/zfDoHkqlgfv5kFRbAjjvcBas ybpU2S4q209SCtpjkBKCd+3Cxref+ixfz/5M78TOO5zL0oypzyit+XXrenK5Fhes+Bf+/bU+ fvqzP2bvK3/Ezue/wvHjEZXOx+jv779427ZtN3xoBCoLKnbkeIypBxoOcrGiEGsKuXbxUmgX MHmVFS+tGiZJSJ3NNKEEWku0VqcUL7Zlmaw2MDZB64COIBeWkeu/BcJfE0UJnR0tpJTUajUa jTqR9PR0vc3Q8F66uz/1IPCvHxiBYGfEK8RM+qDb4GYLesp5vHdAOEXA71e8zBbwKL+H0qNc dNFeADq7UkZHRxgdHWV8fBQRPEkdiupxBgYGPrt169ZrP5CA96GdyDEnaTu1ApsneZNzk7bZ ZFJrMdbivZ8GH+Lz6Or/feLo+yhl8A5ykZsmkCR1sJ6kAR35t6mOvUJvb+/DH0rAJqFNYB7w syzUtysv7+Z3n6mxc346gRMSpAhIARPR15HqCBcsf5W0BUkdIuGpTowRQqBY1AQbSBrZtVB7 nIGBgd/cunXrNe+rgRNj42pyMsVYUEpjvEPZrItEElA4FK0UrG3ibIK3HqUV2gu0E2gJ1gU0 Ho3Feo/1HhkpSnEercDpZfRdeBuRvAPT8tgUnAGJQ0iPtZY4inGJx7RNpSgGOTG8j97epd8H fmveCJjUiDTxCBEADwQg4IPDB48LHus8iUkx1mKsxwfR7tkdLpBZaAg4ILUWF7I5tVboSDFR +CbODrK49zWSOiQNaDVAOM+BAwepVqvkcyXSJtMRSBrQePcxBgYG1jzzzDOnaKFdkVWMFnlk JGeOTPJq2n0KeUWpoLFpnbRlSROPIPNzFakMoG4fn0QaKRVps0Wz3qLRbKA1uNzF9K68AZH+ AWkj2yxtmj1lbKCzs0yxWCSf1yQNcOmMrUfpICO//jl9fcs2Aj85JQJAlaDnLV6UytwoBJ/l PycJeD4NGDtr920XL0nlT7HJG1RKb8x5ukkDfOq54FNl+npLdBYn51ybGr938DFWrFixZufO nXP2BRFC4Jf/tu5mZ9LHrTHaO5+lCqF98tbu3jucMVhncdbhncO3T96889kBgMs+Z50jTQ02 NZkDda6OL7nm7zpj84eUc7+YfvJTUXAG6nVJmkicCUTSzYnA1Lh3zRYSsezAtddee+kcAuey CSHE7t27f7Wg69Dyhfm/yECfBMwYyT/vuYIjQz3cdE3CougVrBE4K7ApeCNwTkD5Mi7+8hYG BwdvvfXWW38EH+GH7jNt27Zt+1ZHR8fyDrULH34D304whRAIJZAe3h2q8MKedwlhiO7KF/ja Fz+LjDzeQpTLUpPsJs+JY29QLvc+CJx7Ahs2bJCXXHLJ34b0F5S7enBuASGAYOb0Tio4b4mi t6dKtWZYubyDQvnTBD8FejYBQXP8dbrOu+XC7du3f/222277p3NKYOnSpd9RSi3wtoGIPoNW EqkheIFyAu+zcVQQ/OCRz3CiGujpkEh5fnuG2ZV/+3WyicnOX/8KOLcEnHO/nSQJrdxl/NcR yMcJcRQjpSKO82itkEojkCgh6V2QAZXttNX7gA8BZx1JmmKMhy6Jtxbn3HI4x0sol8v9yeTk 5H8mSfK5QqGQa2ptpTQWjIWWE0JYKaUTQljnnBNCeO99CCEE732QUuKcEz77HULYDHiw1o54 7/fCJ+BC57r9L8W3oJnRdqB5AAAAAElFTkSuQmCC'! ! !VistaryThemeIcons methodsFor: 'private - accessing' stamp: 'EstebanLorenzano 5/9/2013 10:58'! normalSizeNames "Answer the names of the normal icons" ^#('error' 'info' 'lock' 'question' 'warning')! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! questionIconContents "Private - Method generated with the content of the file icons\new\question.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AA8fSURBVGiBvZp5cBzVncc/73XPjKTRZVmyJR/yxWWwHcCgkk2ZAmIMxWZNdimuojaBYjlm sbeKikkgS9h7AyTZZcnCgJeQLCSBynKEcDjGppYNrA+ZQ4YY2yBbh21J1u2RZkbT3e+9/aO7 RzOyDBh201Wv1NNTmvf9/n7f7+/93psRxhi+zJVMJgXQBKwB5gGzCoYAugtGF7AV2J5IJPSX mji4xBchkEwmZQD460KItQ0NDQ2NjY1UVFRQVlZGPB6nrKwMgHQ6TSaTIZ1Oc+zYMTo7O+nr 6+sHXgFeAl5NJBLeH4xAMpm8Ari/sbFx6aJFi5g/fz7DaYvWj7N09joMjLgcHXLpG3BxXE1F maQyLpleabNgdoxV51bSUKPp6Oigra2NI0eOfALcC/xnIpE46Wh+bgLJZPI84MGGhoaLV6xY AdHp7NiT4b39Gbr7HRxX47oaxzU4TnivcV2D1hqtNFprjDbMqotw4fIq/uSSOiIMsmPHDvr6 +t4D7k4kElv+zwkkk8m7qqqq7l+5cqWsmdHI67tG2f5hmnFnArTrahxHFxFxXY0qAB6S0Npg tAYMay+qJXHdXMZGDrFt2zbGxsZ+EBD5XB75VALJZDIKPD537twbV1+6hv/Z4/Jm6xjpjMpH Nw/Y0cc987wAuC4GPplIxIY/WzuLW66aydatr9PT07MJuD6RSBz7wgSSyeR04KVly5ZdcM55 K/jVmyn2dY4XRzwAPpmI62o8dXzEpyYy8V7TsioeuudMPty9g48++uhj4LJEItFx0gSCyG9d tWrVqvrGxfxi6whHBz0fsFugb8dMemZwHY3rFchmkv6PI1FARGvNnJkxNv792YwO7aelpWUv 0JxIJFInS+DJZcuW3XTG0mb+/dVhUmlVZMpirWu0B6fMjbJgVozGmVGmVdqUlUhyrqa7L0dP f46unnH+e9cQ2XE1dTa0RiufRGXc4sVkM51tLezbt28rcHkikVBTEbCnAP+tuXPn3nTueSt4 4rURRjMKz9O4nsHzTF7b4bPF80q458ZZxEvlCWJUkb8bHGnkpy8e4dnXuslkDSYP3vhEjMYY zXBK8Y0Nu/jN4ytJpVKre3p6HgLWT/XpRbMmk8lzqqqqHlx96Rqe+90oR4ddH3QA3HV90G7B s/rpkU8BX3xNr46w4ab5vPDwOVSVWxPAtS4mojXth8b483ve4ZKvXkpZWdm6ZDL51c8kADy4 cuVK2bLf4+PDuYmIuzpPxPMCk7p+RpQ++ZW8saGUh+89E9sCY0IZhUQmSGx7t5+Nz3bR1NQE 8ETQtkxNIJlMrmloaFhdV9/I7z5I5yUyMQLZuBOvXU+jp1TmZ1/nL6nmhrWzfeBGo83U2fjx z/Yzbfo8amtr5xtjbp6SQMDsgRUrVvDm7jSZbADUDbXuR9x1TZH+PdcwlHIBGBn1ePv9FM9s 6uPHvzzMz1/ppatn/DNIVBXL6DgihtExl/uTe1i5ciVCiB8mk8mSws8ITXxxY2Pj2dF4LTv3 DOSjm5eNOxFxN//Mf93WNc79Tx7mtbeHGM+potL4o5928K/3nM6F502bksDZi6um1L8xJiDi v/fUcwdZ983TmTlzZlVfX991wM8mE/j6okWLeP+Tcb89KKw4biHo4mfGGDq7s7QfThdUlEDT AYBnN/UUETDG4DgO2WyWocFR3NwA2vMwWqGVh9YKrT2M9tBaYIxAG8EvX9jL2ksWcfTo0Q2F BCSAEOLK+fPn88GBbLFRJ+s/JOaZIqAh2EIzhq8r44KxsTH6+/s5dOgQBw4coKOjg97eXlr3 HEG5Y2gvg1IZtMqhVQ6jvCD6DlqNY7w0z7+6mwULFgAsLpSRTCaT59bX1zdmnAhdRx0/upOM Wqh/37jFQE2eiM6nXTkZ3EwfS+al6e3tZWRkhEwmg1IqT3rLW0cxSmNMID3jy8dolZeVf6/Y 93EvfUOa2tpaKYS4vTADl86bN4/ft48HWi8wqnu8/pUyaFMAXE9EX3sOXm6EXLoHZ3yQ1c3l NH+lOp+hUELGGHr6smx5uwdjVIH+QyL+HP5r3w9Ge/x60z7mzJmDMebaQgKNFRUVdA+4RSbN S6lAOp5XHPGQiHIyOJk+cpmjuLkxtPI4fX4p626Yl28ZAP9/gyrzwON7yY57RaUzDEaYEX8O lX+v7eAAFRUVAGcUmnhWWVkZwylvoroEC1VRxXGniriLMz6Mcsf9iZUfxepKm3tvPwVLTkQ8 7Lm01mx85iDv7xkuKJ06T0JgkBJsCQIB2Bij8FxDd0+K8vJyKOhPJDArHo8zlPKKKk6R/r3C iPsR88aPkcscRbm5gtQrbBvuSyyipsqeEvzzmw/z7MudE5rXGmE0dkQQKxGUlUrKSmxKSyxK S21KSwQlJTbxeIThkbGQgPXoo4+WF2VgcGT0hPovrDDKy+KMD2M8zzegVmhNXq9XXVbPqfNK i8CHY9fuIR55+pPArBpLGGRUYEsLS4CwJAIDGKQQoA0G4UtQC4ZTaeLxeBj8+cDv892o0mbC AyeoOM74MCqXDiqECiJoAhKGWBSuWjOjyKzhGBl1eGDjXrTygdsxgWVJbAlSghT+X9AIAcYA RoMxGC3wtCYatVEq37vMDgl0p9PpOeUlcmKhOq7iKNzsCMpJ502ZX0GNCqqE4vyzqiktsYoq Tnj/0E8+ZuRYjpKoxLbBtsCSAssCIQVSaIQBISSaoEE0wg+SEkgjmF4TJ5PJ+Nr32WID3ZlM hooyWbRQTVQcjZMdnDCqDmVTWEp9EosXxo+rOACO4/HuniFKSy1sCbblAw8jLyyBQPrHYIAV rClGg4VES40xgppp5aTT6TA4PXkC6XSaynjVROPmBdVGKZzMAMpzfMBGFbS/YQ8zseDUVEem 1H774Qy2BbYlsWyBLYUPXgqEJJCMABFGXqO1AGmhjcKSfksxvaYinwHP8/IEDqVSKebMqA06 UD/tSnvkMgNozwn6E5U/Ggm7xtC4oQfgePAAHYfHiMX86EvL134IXIigoxe+5BBgtERKP7tW kE0MnLKghmPHjgHo9evXD4QEtnZ0dHx/1cXL+JHXk5eFmx3ye5NQNuHG3AQkAtkULv9Pv9jF y290Y4x/VGJLsGzByDGHWERiWcKvNMKPPkKghfAzoP0MGG3A8o2LNKD994WCq65YzLa3XgUY AN8oNvBuX1/f4XjMmXPq3BL2Hkzj5lJ4bjYok2HFMWB8WYXgTdDX6KCmt3WOIjDEIoJIVBC1 BbYtsG2JFbWwpQhE7w8BCGH5qrEmdnbaaLAEwgR21oaamkqqyjUjIyMAr+YXsuA88jcdHR1c eG45Sjm446l8xAuNqrQKzOWD93t2lV/IpDBc1DydxA0L+NbNp3LNFXNomFGKbQsitkRYFsKS SMsGaWGsCEZKlLDQwkZhoYWFkRZgYYTECIEQguVLZ9Pe3h4a+MWQQLgO/Lqtre0vLl91Go88 vdvvx02hUVWxcYs84JO0Jfz1+sUsX1JdVEZXX1DLz18+Quv+UYSUGCHRCIwQaPx7LYTvIQFG GIQGIQTCXwwQEm665ivsfmcLgJPL5bbmMxD8faO7u/tDN9vH2otnBP2OV7QrmjBsYSk1+RX1 mitmc+5ZVceVUdsSXHd5PdOqYiAtv7JIGyVsPGxcLFxj4RHBNRJlJFpYaGF8+UhYvmQethli YGAAYPOdd96ZLSIQHKR+Z/v27dx+7WmUxIJFUHt+u5uvy5Pqv1FgIBKRnL+0umhzE5LQWhON ShY1xtHCQuEP19i4xsI1ERxj4xiJh4UyEmXAGL9MWcLmvvXN7Ny5M8T8TxRc+VOJRCKxqb+/ /43hwSN848qFfgbyO6yCvrxg86G1IRqBqA0VcauofBYuZFprykottJB4SD/qWDjGJmcsHG3j agulJZMPaS5duYjhgc7QvM8lEokdUxIIrru2b9+ub/zThaw4uy6IeABeq2CfSr5Hj9kQscCO wOGj2SkXsTAbRwZdXC192WhJTttktU1GRchpC4XAb92MX53QzJkxje/cspSWlhYAz7Ksuyfh LSaQSCTeHxsbu3vrltf5579qZv7s8ryJJ7Z4HkYbhNDYNkRsgSUFr/xXL46rpiRx4Mg4ew+5 aCxcLXCxcbRkXElynp85aTSW33si0VSUxnjyHy/mt7/dRDabBfiXW2+99cCnEghI/KCnp+ep 1vd28tg/XEhVRSTQf2HrrIkU9DS2Bb39Wf7tF+309I/ngStleGdfmp+8NozSAmVAI/wmUfuT xyyHqHCxpYclfIfEJDz+N5fw7q63Q+O+2dfX993JWOHEp9Mx4M2mpqbmaXULufnbW2jrGCk6 8ymJCeKlFpGo9BcrS2LZEiElsRKbaIlNOguOFigkyli4SDwtcYyF33kYv7VGYQmFjUtlSYTH 7ruI1MB+WltbATq11svvuOOOwakITHkqm0gkcsCVLS0tuzoPtPLi43/MBcvrJ/a3RuO6Civs 4/HrtgEQgnFHkxr1cFVQCg2YYKMCmggeMeESkx4x4RARDhHjMre2nBceuowj7e+E4NNCiK+d CPwJM1CQiRLgqfr6+qvXrLmMR5/azWNPtzKazmGMpr62hGjMwrIkUgos2yJodDDC8hcrIfOl UeNH3p/RN6xEYwu4pKmR7926lM2bN4Wy6VJKfW3dunUfnhDgZxEoIPK9eDz+t01NTaK6ZjYP PLKNZ17aQ8QS1NWVErElBCSEkAEBAcKvLjoYRgtMeL5sDJaApafU8Xd/2cToUBe7du0KDfuW 53lXrV+/vv+zsJ3M16wXAE/U1NSc0dzcjKvj/MevPqCl9TDDoxmk8EkIETZrViAY4bcP4TxC UBkvZckptdxyzRLi9gg7d+4M22RljHmkrq7urquvvtr5PLi+yBfd1wMP19XV1S5cuJAFCxYw MKJ4+Y022g+NMJwaZ3QsRzrroBCURKOUlsaojJcwd1YV1/7RaTTUGNrb2zl48CCDg3l5vwB8 N5FI7D8ZPF/0pwY2cD3wbeDM6upq2djYSGVlJfF4PD/A/6nB2NhY/qcGXV1dpFL57+wcIcRm IcT3b7vttu0nDeSLEphExhJC3GyM+SZwFlBJfnd7/GWMGRZCbDLGPJ/JZDZv2LAh/WXm/9IE pvrMjRs3Tnccp0FK2WCMKQV6I5FIz7Rp03o/r7Y/92T/DwT+oNf/AkoNR+wGvYlRAAAAAElF TkSuQmCC'! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallErrorIconContents "Private - Method generated with the content of the file icons\new\smallError.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAMiSURBVDiNXZPPSxx3HIafnRl3nTVmo3Gprlus7opBYtSGtoLQWv+AkqSF9BiQIHMQc8oh gSTnECGkkG0PIaJQgreWeJRGTDAQbRGNtoZWXaG4uuvY2dnZHzPf+fZgK5oPvLf3fT6nJyCl 5PhNTEwMxGKx6/Wq2l9jWc2OphUPdP3XzO7uT6ZpfmcYhne8H/gfkEqlwu2JxESP635dnp2l tLGBa5pUHAe/qopwXx/ZgQFzOZ3+cnh4eOkEIJVK6f1dXdvNS0tnnZUVXNM8HNs2rusehXCY +hs35Hyx+O3Q0NAUgALQnkhMxFdWzhZXV/HyebxCAbdQwPO8owjfx8lm2bpzJ9DV0PBjKpWK ACiTk5Nf9CrKN8XVVTzbpm50lJZnzyCZPBxKSceTJ3wyP4+WTFKxbayHD9V4LPYCQGlqarru vX59+Nm20Ts7CdXUkHz8mMC5c3wwNoZsbSVnWWQvXmSjXOa3hQUi+Xw3QGBxbu7PhqdP2yoH B7imiUgmaR0bo+y67OdyCN9HCMHb2Vm2796lXCxScV0+u3mTjaamPqXWcT5083k8y8Itldh7 84Zfrl1jb2/vaLy+sMD2vXtUymXQdbQzZ7C2tgCuaI6q2tWWVVdxHDLFIrbnEbt6FSklQgiE EMQ6Otjt7aWUTiNVFSElNdEoOcgpB5q24CsK2WKRfKVC461bRC5cwPM83i0u4hQKqJpG5+3b 1HZ0ENZ1wtXVhFtaAKaVTCbzs9/dzT+VCq7rEohG8TyPtZcv+fv+fdYePKCQz+NLSSAaJez7 nNI03HjcB9bUwcHBxUhPz4g9N6eXHIedmRkyuRwHU1MEdR2tVMJZXsZcX6fu1StUIWi+fJk/ 4AfDMJ4rhmGIt+l0/0cjI9JVFMr7++Snp1GDQdRgkCohqN7cJDozQ8iyON3WxlYikZFSjpxw YXx8/Er76dNTm48eqfs7O4QiEYKKQkgIgo5DUAjqL11i8/z5HcuyPjcM490JwH9CnYo1Nr6o tayP5fZ2oJxOEwyFqIrHKScS/l/Z7PdSytHjRgbe1/kY7FPgK8ACngO/G4bhv9/7FxuHuWxf 1Q6XAAAAAElFTkSuQmCC'! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallInfoIconContents "Private - Method generated with the content of the file icons\new\smallInfo.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAMMSURBVDiNXZPNbxR1GMc/Mzvd2dntbku3LtsXInFpxFiCepCSmgIHEkPiS8pF48WkwWYO RP8C/wCPeBj1VHvwwE2DB29iMJqIJWhFoilLXwid0ul2Z9p5+/1mfh4Wk5bn/P18nuc5fDWl FAdncXHx/Ojo6JWCOTTtJ5UxQ4WRVdhd2tpyv+10Op/bti0P5rX/BY7jlFsnJhZF5ZXLN+8k tDdiOl1BGKb06TlTk2XOT2531tp/Xpifn797SOA4jnXq1en1u4/H6ssrIZ1dQRhKZi8M8sMt j/srPiIVlE345IMhFXm/vDc3N3cdQAdonZhYXH4yXr/XjvADiR8IxoYNPnyrwaU3jiCERKSS bS/k02ur2vDIqW8cxxkAKLRarXO1YzOf3fojxvclXV/gB5JHbsTPSx1u3NwiChOkEEghiSLB yrrSL54tv3ny5Itf6iMjI1d+vScJAom/14OlkJBnVC1BzdwnCT2SvU3iYJ0kaHP7tzsE8cBp AL1UGTrbfpTgBz1YpJI0STjzUs47U0/4aLZKEnqkcReR7CNFhEhD/mmHmuM4Z/RQVo8FT+E4 EkT7HlF3AyX3ieMYlESKFClS8izFKsJg1WB1wweYNQqEe35QOhJGKdGeSxoGPUBKhBDougGZ YLCmUzLLFDSFUhnPDVcAzzOMfPe2TuNiFGyThgEiTREiJZcZ9Xqdnb0+mo0SZqmArmsoDfI8 4/nRMmR8r7uu+93pVk4adhFC9LanCVkmaDQaGH0G/bUSRtlCWRXyYhnD6mf8qMiBv3XP85xz L+92rJIiEyky7f1rlTRqtRqaXkCZFnGhQkA/kWZxaeY47uMHX9m2neu2bWdr7b+mr75/XOmq d4FVVLTXuvy+vMNPS5vEmHRkGV+avNCs0RpadZVSVw91YWFhYbZWn7h+7euHhc2tHQYGTHSz SKabhBTJKPLu1BCTRx9u+r4/Y9v2v4cETwvV32yO/ujH1dfWXaWtuQlmqch4o49WM8m33Qdf KKU+PthI7dk6H5C9DrwN+MAN4L5t2/mzuf8Ad6/AAZ+lo8QAAAAASUVORK5CYII='! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallLockIconContents "Private - Method generated with the content of the file icons\new\smallLock.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AALVSURBVDiNfdM/aBNhGAbw57vvu/tyd8m1Gmtr26Bp1QoqCBlMUUREHNwcuiiIqKCD0EUc XFwiFapYCGJ1EcQKWQpWcCmIQkBBaa3oIlSrNbWpNndJ7nJ3uX9OLWKtz/7+eJ8XXhJFEVYy NDSU1nX9nOM43Y7jLFSr1XyhUPiB/4SsAMPDw8d0XR/VNK27t7f3M6U0WSwWjbm5ucHx8fFn 6wECAExMTKi2bd/MZDIN0zQHBwYGdk1NTWV6enr0/v7+G9lstuW/QKlUutjZ2blnenr6Xi6X uwsAuVzuW6lUupVOp/va2trOr1shNE5vff9p82OrpqRl+/V1LkaRRCMETQuubWJ6fsdl360t blE/Xjt+aWFyDRCYRx7o1U9n3j0PoM9TpLaoSHWocM0SqBAinogjJAQfZpe+HL5Q71lToWqY LQuzHvSfPiQegbEQQejC9RwQkQFMgOXYSCToP+8gaK3cCX0Ks0Kh8hgSigwaeZAEAolSSEzE 0i8DVsP18vn8vnw+H/sTYIvzllye98C5ACoGiIgHs1EHZQwhpfCiAFJMgMJlsU/Z8NoP1CKA o6sbiIzbzQaDwjk0RUZSUyEENjijiDGGes2C6zowYmdj2exVvn37iyOFQiGxCpS/N+TKkgfK QoD4qNYNeBEQChQhIbAcB4mEjPZeSR4Z2Y2Zd5MklUreWQUESDaNJGiqjI2aCon4kEUBssgg cwkVvQorfg7t7ffJ3FcbetkEx9NTY2NjMgAIy2U7RlkIQnz4oYe6ZcIHhQ8CvW5CiSvQUiJc YwlfZktgaEWz/Ejo6kzeBgDy5smhE3bVHGhRKRQeoa4vgjEGyiiW9RqaHVcObu26kfLMZbx8 tQ3drRUIbg1IDoaWdCBB/vzGvzM6Osr39v20N6szpNmgmPoooUOLEJcJvJDD33TyIVt3GgAh hFTMfW897JclKWbvzDAXIAEIAfUDVjeM4m+dHTsKS7Yv+wAAAABJRU5ErkJggg=='! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallQuestionIconContents "Private - Method generated with the content of the file icons\new\smallQuestion.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAMdSURBVDiNXZPNbxR1HIefmV129qVd2i2026VQdOVkBeFA0SalHrxooogkajxwaGozB6IH /gMvXkx8OSzxVNsbniQSk4qk6kENiCFUFIt9p+1sup3dme3Mzu83Mz8PRdPyPX+eJ9/Loyml 2H2Tk5MjpVJpLGEUhpwgdyipPD+TqN+pVq2vbdv+3DTNcPde+09QqVSy5WeOTcrc82/+8HvA wmoLuyHxPME+PebMQJaRgU17eeHeS+Pj43f3CCqVSua5k0Mrd9cPdc3+42HXJXZD4nuSli+Q QiKFJGvAB+8WlF/7+e3R0dGr/wumv7vx1Xzr1IV7cx71hqS/O8l7b3TT32uwarW4+esWH12Z IwgCdCI+vtwVrS391mWaZkOfmpo6q3eevHB/3sd1QxxXopQiVoqNTcHhYpqLr5cYPN5OKEOa TcEnU06iVOqbAUj29vaO/XI/3IGbEscN+fGWzfRPVVIJycSHZQp5jWKnS8tdQQY+t29J3HOD JwCS6VzhhYVHAY67A0sRErQCgm2bp/ojYmmzth4yPfMQGWwTygApBH8veFqlUhnUvbD9sPsY bvkSf7uG31glrbtcvngEFUd8OvGAxeUGcSTIpKCjPcnSqgNwPpnAazpuutPzBX7TQnguoRQM v1igPaexZm3z7ffLdOR10kaWhKZQKuLggRxQqyWTcf22TvfLvruJ8FykEEgpsKrbXLvxiNkH Wxw8YGCkE+i6htIgjiP6S1mIuK5blnXtRDlGeA2klIRSEIoA3w/It2mEcUxbPk0ym0FlcsSp LMlMG309Mgb+1Gu1WuXss3U7k1ZEUhAKQSgFY28d4fTxDl4d6UEZGVqJHC5t+FqGV4aPYq3P f2GaZqybphktL/wxdOmdo0pXOx9kUorrN9eYnWswc8ehhYEdZnFCg6eLecqFJUspdWlPCxMT E+fzXceufvblYmKjusX+/Qa6kSLSDTxSRKQ4d6bAQM/ihuM4w6Zpzu0RPA6qrVgszTit9lMr ltKWrQAjnaKvex/lYhBvWvNXlFLv7y5SezLnXbLTwGuAA3wD/GWaZvzk7l+B2cIZLVTLdwAA AABJRU5ErkJggg=='! ! !VistaryThemeIcons methodsFor: 'private - accessing' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallSizeNames "Answer the names of the small icons" ^#('smallError' 'smallInfo' 'smallLock' 'smallQuestion' 'smallWarning')! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! smallWarningIconContents "Private - Method generated with the content of the file icons\new\smallWarning.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAJtSURBVDiNjZBNSFRhFIaf77v3juV1dMYZf2auTqb9CGVBEkhta9uqheFCUIqIaFOr9gXh oiRCZjRxITrgKG5aBC2CFFuUtHAhRcgglObYjD/3jqNz79fKWjhKB87m8Lwv73lRSnHYxuPx F4lEovcoRiilKDUjIyNXQqHQjFJqL5vNBrq7u/OlOFlSDUQikcHWs0Oiwfrs8/v9Tw7jSsZK JpMd8/PDnnKF2t6sU3NzH+xkMmmUYksmiMViryL1AwIUprlKqPptuWmaD/7rhcnJycvB4LdL 6fR37t3vovf2DWprBqmvr32cSqUO8AcOlmUNVPr7MHSFzxfGcSQGq/i0N9Wu63YdaTA1NdVR UfGlPRpZwDy+QzqdZmNjBTsHZd4QTU0n+kZHR8WhBpZlxasD/eQ3QbgujrNFVaUPOwei8ANR eFenadrNkgbT09PX/eanC6axiJ0Dr+CxuPgVwwiynQU7B/mVBM3NJ59nMpmDBtFoNO6jHzsL 2zko2h6R+jDBSomdAzsL7tYyO+vvrdnZ2c59nVBKMTEx0Xm6eXk8qD1kdwd281DIw+paDIo5 ythkdwf28pB3m2i5lvrZ3t4e/ZsgEAi81AvjFByLgtPAbqERO3+RR8/KmZ65ilLNQAtSP4VZ ZuD8+hhJpVK9APrw8PDdpkYtXGGewy2exyclmiGQhkZb6wJtZ8JU1saA/fIFtrNEMNj6FHgt 4vH4WDQSvlXtX0EXAil1pNBRSuK5ChAIKQCJ8jyKrsceVWw4OmtrazW6pml3VlZ/j2XWy49p mlYUQrhAUUrpAp5SyvvXl8TzQKlN4bruUk9PT+YPUsxAEGFWxzgAAAAASUVORK5CYII='! ! !VistaryThemeIcons methodsFor: 'private - icons' stamp: 'EstebanLorenzano 5/9/2013 10:58'! warningIconContents "Private - Method generated with the content of the file icons\new\warning.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlw SFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoA AAsgSURBVGiB1ZprbBzXeYafc+ayV4riRdyluFwuL6JoUraIRGjQ1nbQFikgo4CAIFURpHDR ypdYgY3EsSOjaAIjCQq0P9oASX7YrlRFslTrZsu0fJPsJJbkOHZjy3IdJqoulCjKIi2aWpJ7 35lz8mMv3CUpuZCWBjrAh7Mz55v53vd739mdM6TQWrNU2xNPPBEDLt1///35paohloLA1q1b BXAI+HMgrrW+45577jlT80KAuRQXNQzjEWC9EEIAYeAF4JalqFVzBXbt2uVRSl2oq6sL1dXV kc1mmZqaQin1N3fffffemhYDZK0vCDwaDAZDoVAIv99PQ0MDjY2NGIbxvSWoVVsCzz77rNcw jM3hcJh0Os3Y2BjxeJyWlhZs2+7fvXv3+lrWgxoTcBzn2/X19a2maeK6v2bd539CwP8GmUyG 5uZmYRjG47WsBzUk8OKLL/qEEJtXrlzJ9PRp7rz9X+mMHeX2P/03crnfEAqFsCxr3b59++6s VU2oIYF0Ov1wY2PjSiEE0fbdeDzThQIyT9/qXSSTSUKhkAQer1VNqBGBY8eO+YUQD8RiMa5e /S3dXYer5le2vksm8zbRaBTbtu/cv3//52tRF2pE4JNPPnkoHA63aa2JtO3AMOb/8Go6Y7tI JBJEIhHDMIzv1qIu1IDAa6+95pdSbl61ahWXL79NZ+y1RfMibW8zOXmUzs5OpJR3DQ0N9d1s bagBgWQyuTkcDrdnMhlWtm5DSucamZpo+07i8TjRaNRyHOcfb7Y23CSBd99916+1fmj16tWM jLxOV+cb182Ptr/FhQtH6O3tRWu98aWXXuq4mfpwkwQuXrx4fyQSaZ+enibStg0h3OvmC6Fo j+xkcnKSjo4OTyKRePRm6sNNPAsdPXrUf+XKlVPr16+P/OpX/8lf/NlDCKH4yU/bmJkxFuRL CY9tGUUpyZHXf8odd9zNwYMHk4FAoHvDhg0TN0rghp9GJyYm7ovFYpHx8XFiHT9DCAXA8Tc7 aGi4DQClFFprHMdhYmKUx7aMIqUi2r6bycm7iMVigbNnz34LeOxGcdyQhYaGhgKO4zwyMDDA 6dMH6e76TXkuGITW1lZaW1sJh8M0NjayfPlyAgGJ1uA60NXxFsPDh7nttttwXfeBPXv2NHym BGZnZ+/r6elpu3TpEr2rdiHEnA39vixaa7LZLMlkklQqRTKZxDDSuHlw86Bdh1DTLuLxOD09 PctSqdSDnxmBw4cPB5RS3xkYGODcuWfpjJ2omvf5smXQlaNlZHFylCPW/iYffvg6a9euRQjx zW3bttV9JgQuX778QH9/f3h0dJS+1buB6i8Bvz+zAHwymcTjyeLkKYd28iz3P83s7CxdXV0N wDeWnMALL7xQZxjGlv7+fi5c2EdH9IMFOYHA4grY1pwCJStFQ0f5nw9+UVLh4SeffNK/pAQm JycfXLNmTfPIyAgD/Xuq5pRbABfwu6RSBdClyGQyBPxuGXiJiHZzeMVO0uk0nZ2dK0zT/PqS ERgaGmqwbfuRvr4+xsb2EGn77RzwCmt4bZdUarbcfaUUlmUR8Ltz90BFflvjLzl54g3Wrl0L 8Oj27du9S0JgZmbm4VtvvbXhzJkzrBnYg1IVQErWyIHHVmSzKXK5HKZpYlkWpmni9eYX5ucB lUVkd5DP54nFYmGl1L01J7B///4W27Yf6u3t5aOPdtPSfKoM2K3wtJMH23KRQpeBl0j4PU6V /yutFF72C068d4zBwUGA7xw4cMCuKQHXdbcMDAwsO3XqFP29e8ug53fUyYFtKmxbYJomUkqU Ukgp8NpuFehKK+GmyU/vQClFNBqNxOPxv68ZgUOHDrXbtv317u5uJsafpqnhbDXofHVYhuL0 6fOcPHmSc+fOkUgkMAwDU7oL8yus1+J9nRPvvcng4CBCiMeeeuopqyYEcrncP/X39/uHh4fp 69m/AIQ7z0qmVMTjs7iui2VZ5TClKoN251spD9pJkhjfgZSSSCQSCwQC/3DTBF599dXVHo/n 76LRKJMf76Q+eL5QtAL0/I5KoQgEvNi2XREmplRVgBezUoM8wvvv/ZrBwUG01luOHz/+qSpc l0A6nX581apVnlOnfk9v7EAB8DVsUDpuCIXXa1V33zQwpV4UdKUq5GeZPL8d27YJh8Od4+Pj m26YwKFDhz7n8Xi+Eg6HuTq5k6Dv4kLQlVYqKmOg8fvtagUsA6nVda1XOl6XP8zJ9/+bNWvW ADz68ssvX1eFaxJwXfcH3d3d5tmzp4m17lsc9CJWElrR2W4QWbmMxuU2fp/GY80iUIsCnt8Q nZ9m/NQOfD4fTU1NXZlM5r7rEVh0RXbw4MEvejyen69bt07+7oN/pifyI5QL2i388pZDzdt3 IZORjI37cJ3CvusKXAdWNGQIeJwF+fOvoV1waaTlj5+jI9bNO++8M9LX19d7yy23LPq2YIEC r7zyilBK/bCtrU2OjJxhZeOeuS5/iv+dPBgo2lckibYkiYaSdIQSxMIJfKbzqSqWlHEzU4x9 +DRer5f6+vrO4eHhzf9nCyUSibts2/6TYDBIZua/sMTla8o93/8lK41ebmbo2Fp+9spf8cvh rzGT6f9U6y2w0scHOf2/v6e9vR0hxMNHjhxZuNBm3pr4ueeeE0qpH7S0tMjR0XOE6w/gOmZR XlGWWysxd6xoA60K8+m0yb/8RwNXZ1L4fKP0XO0hx5f5o4jA1udLzq0YCp+FFAgNhgBDCCDH peG9tP3lI/h8vo54PP4g8KPrEshmsxu9Xu+g1+sldXUndh0o1YIuFdSFgloDQhRqSxBaoEUB y6HjdVyZSuE4Dkoprly5Qnx6lunolwiJ5xFKoAQgBUKBMEAqUbEuEnOAMm9zfuQc4XCYM2fO fOv555//8YYNG6re3ZQJPPPMMxL4fnNzs5iYGCPW/D5ChCj8mQu0EAijhLnQbVkiJEAogRTw SVwDqQVSKxow7XDhPCXQikJUABZlZeaOTY0epulzX8Pj8USLa+cqFcoEcrncJr/f32sYBj55 FMsMot1gEXHh0loVpEaAFAVSFO2jBSgJa/rgrROzxUdoLytWrKC+vp6gncC0W9BaoN1Sw4v2 qQBcpYAQSHWB8fFxmpqaSCaT3967d++PN27cWFbBBNi+fbshhPhuXV0dU1NTxJqnEDIEgCza Q8tCl7WiAKLYQakLlip19otfEFwYDzIyliQYDNLW1kZ3RwPhZR8jZXhxq1wDPIAXwcXJs8RW rcO27Ugmk6lSwQRQSt1nWVa7ZVlMT08TiC5DSomWRaDlsdhtTeE+KBHRRVtoMC3BPX/dwuiE JJGxaKq3aa6bQrJigT0qAc+psJCEnb5KMpnE5/ORSqW+uYCA67p/6/f7yzfe+Y+aCDXl8Hk9 mJYHrTRKaQQSpXSBgCreG7r0LaQBiVYay4SuKOVztLbRaKSQaHRZBa01Qgi01iBAaNBotC7U yOXypHMw60YIui62baO1bt+6dWt406ZN45UK3Oo4Dvl8nvr6eqYz/Vy9qJBSLhqGYSCEQEqJ EKIcJVBAQUEKAKubujBXa41SCle55deRSikQYPgNwsFCHdd1cV1XAl8F/r1MABhNp9MDpmkS CATw+/0VT5Jzy0LDMDAMAyllea60XyJVAjcfZCXQUhQB4ThOOUrHXNcln89Tauzs7CwzMzNo rbVS6kiVhYQQXwK+l0gkbk+lUh4ppQCUEEIJIXRp1ForKaUuzmmttRKFt7qqeB1FwSClUes5 BuWxaJuKKURppzSUPmutS3M5pdRHQojt995774eVJ/L/eVuKfzX4TLc/ADVWmsQ0jTygAAAA AElFTkSuQmCC'! ! !MCSaveVersionDialog class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 24966457! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons smallSaveAsIcon! ! !JobProgressBarMorph methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 24079227! initialize super initialize. progressBar := ProgressBarMorph new. progressBar hResizing: #spaceFill. button := Smalltalk ui icons smallErrorIcon asMorph. self extent: 200@20. self color: Color transparent; layoutPolicy: TableLayout new; listDirection: #leftToRight; cellPositioning: #leftCenter; cellInset: 3; listCentering: #center; hResizing: #spaceFill; vResizing: #shrinkWrap. self addMorphBack: progressBar; addMorphBack: button.! ! !UITheme class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 54093488! current "Answer the current ui theme. WARNING: Direct access to this method is ill-adviced, use Smalltalk ui theme instead." ^Current ifNil: [ Current := PharoTheme newDefault. Current ]! ! !UITheme class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/10/2013 09:19' prior: 54093672! current: aUITheme "Set the current ui theme." Current := aUITheme. UITheme allThemeClasses do: [:c | c changed: #isCurrent]. SystemProgressMorph reset. "reset to use new fill styles" ScrollBar initializeImagesCache. "reset to use new arrows" aUITheme updateWorldDockingBars. World themeChanged.! ! !UITheme class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/10/2013 09:53'! defaultThemeIconsClass ^ ThemeIcons! ! !UITheme class methodsFor: 'examples' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54110005! exampleWindowWithToolbars "Open an example window with toolbars." "self exampleWindowWithToolbars" |win fileMenu tools dock text holder| win := StandardWindow new. fileMenu := win newMenu. fileMenu addToggle: 'Open' translated target: nil "would be model" selector: #openFile. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallOpenIcon; keyText: 'Ctrl+O'. fileMenu addToggle: 'Save' translated target: nil selector: #saveFile getStateSelector: nil enablementSelector: nil. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallSaveIcon; keyText: 'Ctrl+S'. fileMenu addToggle: 'Print...' translated target: nil selector: #print. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallPrintIcon; keyText: 'Ctrl+P'. tools := win newToolbar: {win newButtonFor: nil "if we had a model it would go here" getState: nil action: #openFile arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallOpenIcon help: 'Open file' translated. win newButtonFor: nil getState: nil action: #saveFile arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallSaveIcon help: 'Save file' translated. win newButtonFor: nil getState: nil action: #print arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallPrintIcon help: 'Print' translated}. holder := StringHolder new. text := win newTextEditorFor: holder getText: #contents setText: #contents: getEnabled: nil. dock := win newToolDockingBar. dock add: 'File' translated font: win theme menuBarFont icon: Smalltalk ui icons smallOpenIcon help: 'File operations' translated subMenu: fileMenu; addMorphBack: tools. win addMorph: dock fullFrame: ((0@0 corner: 1@0) asLayoutFrame bottomOffset: dock minExtent y); addMorph: text fullFrame: ((0@0 corner: 1@1) asLayoutFrame topOffset: dock minExtent y). win themeChanged; openInWorld! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53993791! backIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons backIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53993896! blankIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons blankIcon.! ! !UITheme methodsFor: 'icons-utilities' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 54007576! blankIconOfWidth: aNumber self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons blankIconOfWidth: aNumber ! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994003! checkBoxOffIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOffIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994122! checkBoxOnIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOnIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994239! checkBoxPressedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxPressedIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994366! configurationIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons configurationIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994489! confirmIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons confirmIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994590! errorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons errorIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994722! expandBoxIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons expandBoxIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994837! eyedropperIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons eyedropperIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53994954! forwardIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons forwardIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995065! fullscreenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons fullscreenIcon.! ! !UITheme methodsFor: '*growl' stamp: 'EstebanLorenzano 5/10/2013 09:30' prior: 53921295! growlFillColorFor: aGrowlMorph ^ self selectionColor! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995182! haloCollapseIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloCollapseIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995303! haloDebugIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDebugIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995418! haloDismissIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDismissIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995537! haloDragIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDragIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995650! haloDupIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDupIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995761! haloFontEmphIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontEmphIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53995882! haloFontSizeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontSizeIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996003! haloFontStyleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontStyleIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996126! haloGrabIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloGrabIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996239! haloHelpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloHelpIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996352! haloMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloMenuIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996465! haloPaintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloPaintIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996580! haloRecolorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloRecolorIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996699! haloRotIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloRotIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996810! haloScaleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloScaleIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53996925! haloViewIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloViewIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997038! helpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons helpIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997143! homeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons homeIcon.! ! !UITheme methodsFor: 'icons-utilities' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 54007727! iconNamed: aSymbol self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons iconNamed: aSymbol! ! !UITheme methodsFor: 'icons-utilities' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 54007861! iconNamed: aSymbol ifNone: aBlock self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons iconNamed: aSymbol ifNone: aBlock! ! !UITheme methodsFor: 'icons-utilities' stamp: 'EstebanLorenzano 5/14/2013 09:44'! icons ^ Smalltalk ui icons! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997248! imageIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons imageIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997345! infoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons infoIcon.! ! !UITheme methodsFor: 'initialize-release' stamp: 'EstebanLorenzano 5/10/2013 09:54' prior: 54008373! initialize "Initialize the receiver." super initialize. self initializeForms; settings: self defaultSettings. ThemeIcons current: self class defaultThemeIconsClass new.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997481! jumpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons jumpIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997576! lockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons lockIcon.! ! !UITheme methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 54024812! menuPinForm "Answer the form to use for the pin button of a menu." ^ self icons smallPushpinIcon! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997704! objectsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons objectsIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997815! openIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons openIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53997920! paintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998027! paintTabIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintTabIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998140! paintingIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintingIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998243! pharoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons pharoIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998492! publishIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons publishIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998593! questionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons questionIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998733! radioButtonOffIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOffIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998858! radioButtonOnIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOnIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53998981! radioButtonPressedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonPressedIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999114! rotateIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons rotateIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999223! scaleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons scaleIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999330! smallAuthoringToolsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallAuthoringToolsIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999465! smallBackIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBackIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999570! smallBarcodeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBarcodeIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999713! smallBoldIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBoldIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999862! smallCancelIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCancelIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53999981! smallCenteredIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCenteredIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000104! smallConfigurationIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallConfigurationIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000237! smallCopyIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCopyIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000352! smallCutIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCutIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000468! smallDebugIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53922995! smallDebugItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugItIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000615! smallDeleteIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDeleteIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000734! smallDoItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDoItIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000839! smallErrorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallErrorIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54000986! smallExpertIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallExpertIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001105! smallExportIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallExportIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001224! smallFindIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFindIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001339! smallFontsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFontsIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001456! smallForwardIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallForwardIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001577! smallFullscreenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFullscreenIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001704! smallHelpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHelpIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001809! smallHierarchyBrowserIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHierarchyBrowserIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54001990! smallHomeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHomeIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002095! smallInfoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallInfoIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002246! smallInspectItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallInspectItIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002361! smallItalicIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallItalicIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002516! smallJumpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallJumpIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002631! smallJustifiedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallJustifiedIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002756! smallLanguageIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLanguageIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54002879! smallLeftFlushIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLeftFlushIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003004! smallLoadProjectIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLoadProjectIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003123! smallLockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLockIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003267! smallNewIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallNewIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003513! smallObjectsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallObjectsIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003634! smallOkIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallOkIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003745! smallOpenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallOpenIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003860! smallPaintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPaintIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54003977! smallPasteIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPasteIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004094! smallPrintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 53923133! smallPrintItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintItIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004332! smallPublishIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPublishIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004453! smallPushpinIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPushpinIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004564! smallQuestionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallQuestionIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004720! smallQuitIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallQuitIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004835! smallRedoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRedoIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54004950! smallRemoteOpenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRemoteOpenIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005077! smallRightFlushIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRightFlushIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005204! smallSaveAsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveAsIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005323! smallSaveIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005438! smallScreenshotIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallScreenshotIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005565! smallSelectIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSelectIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005674! smallStrikeOutIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallStrikeOutIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005825! smallSystemBrowserIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSystemBrowserIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54005980! smallUnderlineIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUnderlineIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006145! smallUndoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUndoIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006260! smallUpdateIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUpdateIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006379! smallVolumeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallVolumeIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006488! smallWarningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallWarningIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006641! smallWindowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallWindowIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006760! solidMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons solidMenuIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54006996! tinyMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons tinyMenuIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54007109! upArrowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons upArrowIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54007220! volumeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons volumeIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54007319! warningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons warningIcon.! ! !UITheme methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54007456! windowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons windowIcon.! ! !UITheme methodsFor: 'label-styles' stamp: 'EstebanLorenzano 5/9/2013 20:34' prior: 54028423! windowMenuIconFor: aWindow "Answer the menu icon for the given window." ^ aWindow taskbarIcon ifNil: [self windowMenuForm]! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54989757! helpOn: aBuilder (aBuilder item: #Help) order: 4.0; icon: Smalltalk ui icons smallHelpIcon; withSeparatorAfter ! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54991023! quitItemsOn: aBuilder (aBuilder group: #QuitPharo) order: 9999; with: [ (aBuilder item: #'Save') target: self; selector: #saveSession; help: 'save the current version of the image on disk'; icon: Smalltalk ui icons smallSaveIcon. (aBuilder item: #'Save as...') target: self; selector: #saveAs; help: 'save the current version of the image on disk under a new name.'; icon: Smalltalk ui icons smallSaveAsIcon. (aBuilder item: #'Save and quit') target: self; selector: #saveAndQuit; help: 'save the current image on disk, and quit Pharo.'; icon: Smalltalk ui icons smallQuitIcon. (aBuilder item: #'Quit') target: self; selector: #quitSession; help: 'quit Pharo.'; icon: Smalltalk ui icons smallQuitIcon ]! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54992636! screenShotCommandOn: aBuilder (aBuilder item: #Screenshot) parent: #Tools; target: World; selector: #makeAScreenshot; label: 'Screenshot' translated; icon: Smalltalk ui icons smallScreenshotIcon! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 33819669! systemOn: aBuilder (aBuilder item: #System) order: 3.0; icon: Smalltalk ui icons smallConfigurationIcon; with: [ (aBuilder item: #'About...') order: 0; icon: Smalltalk ui icons smallLanguageIcon; action: [Smalltalk aboutThisSystem]. (aBuilder item: #'Software update') order: 2; icon: Smalltalk ui icons smallUpdateIcon; precondition: [self showUpdateOptionInWorldMenu]; action: [ UpdateStreamer new updateFromServer ]; help: 'Load latest code updates via the internet'; withSeparatorAfter. (aBuilder item: #'Start profiling all Processes') action: [self startMessageTally]. (aBuilder item: #'Start profiling UI ') action: [self startThenBrowseMessageTally]. (aBuilder item: #'Space left') action: [Smalltalk informSpaceLeftAfterGarbageCollection]; withSeparatorAfter. (aBuilder item: #'Start drawing again') action: [World resumeAfterDrawError]. (aBuilder item: #'Start stepping again') action: [World resumeAfterStepError]; withSeparatorAfter. (aBuilder item: #'Restore display (r)') action: [World restoreMorphicDisplay]. (aBuilder item: #'Clear all breakpoints') action: [BreakpointManager clear]. Halt isHaltOnceEnabled ifTrue: [(aBuilder item: 'Disable halt/inspect once') action: [self clearHaltOnce]] ifFalse: [(aBuilder item: 'Enable halt/inspect once') action: [self setHaltOnce]]].! ! !WorldState class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 54986799! theme ^ Smalltalk ui theme! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 54995223! windowsOn: aBuilder (aBuilder item: #Windows) order: 4.0; withSeparatorAfter ; icon: Smalltalk ui icons smallWindowIcon; with: [ (aBuilder item: # 'Collapse all windows') action: [World collapseAll]; help: 'Reduce all open windows to collapsed forms that only show titles' translated. (aBuilder item: # 'Expand all windows') action: [World expandAll]; help: 'Expand all collapsed windows back to their expanded forms' translated. (aBuilder item: # 'Fit all windows') action: [World fitAll]; help: 'Fit all open windows as visible in World' translated. (aBuilder item: #'Close all debuggers') action: [Smalltalk tools debugger closeAllDebuggers]. (aBuilder item: # 'Send top window to back (\)') action: [SystemWindow sendTopWindowToBack]; help: 'Make the topmost window become the backmost one, and activate the window just beneath it.' translated. (aBuilder item: # 'Move windows onscreen') action: [World bringWindowsFullOnscreen]; help: 'Make all windows fully visible on the screen' translated. (aBuilder item: # 'Delete unchanged windows') action: [World closeUnchangedWindows]; help: 'Deletes all windows that do not have unsaved text edits.' translated. (aBuilder item: # 'Delete all windows discarding edits') action: [World closeAllWindowsDiscardingChanges]; help: 'Deletes all windows even if they have unsaved text edits.' translated. ]! ! AbstractMethodIconAction removeSelector: #iconClass! AbstractNautilusUI removeSelector: #iconClass! AbstractNautilusUI class removeSelector: #resetIcon! AbstractNautilusUI class removeSelector: #iconClass! AbstractNautilusUI class removeSelector: #icon:! AbstractNautilusUI class removeSelector: #buildIcon! VistaryThemeIcons class removeSelector: #warningIconContents! VistaryThemeIcons class removeSelector: #smallWarningIconContents! VistaryThemeIcons class removeSelector: #smallQuestionIconContents! VistaryThemeIcons class removeSelector: #smallLockIconContents! VistaryThemeIcons class removeSelector: #smallInfoIconContents! VistaryThemeIcons class removeSelector: #smallErrorIconContents! VistaryThemeIcons class removeSelector: #questionIconContents! VistaryThemeIcons class removeSelector: #lockIconContents! VistaryThemeIcons class removeSelector: #infoIconContents! VistaryThemeIcons class removeSelector: #errorIconContents! PharoUIThemeIcons class removeSelector: #windowMinimizeInactiveFormContents! PharoUIThemeIcons class removeSelector: #windowMinimizeFormContents! PharoUIThemeIcons class removeSelector: #windowMenuInactiveFormContents! PharoUIThemeIcons class removeSelector: #windowMenuFormContents! PharoUIThemeIcons class removeSelector: #windowMaximizeInactiveFormContents! PharoUIThemeIcons class removeSelector: #windowMaximizeFormContents! PharoUIThemeIcons class removeSelector: #windowCloseInactiveFromContents! PharoUIThemeIcons class removeSelector: #windowCloseFormContents! PharoUIThemeIcons class removeSelector: #radioUnselectedFormContents! PharoUIThemeIcons class removeSelector: #radioSelectedFormContents! PharoUIThemeIcons class removeSelector: #radioButtonUnselectedFormContents! PharoUIThemeIcons class removeSelector: #radioButtonSelectedFormContents! PharoUIThemeIcons class removeSelector: #menuPinFormContents! PharoUIThemeIcons class removeSelector: #form16x16FromContents:! PharoUIThemeIcons class removeSelector: #checkboxUnselectedFormContents! PharoUIThemeIcons class removeSelector: #checkboxSelectedFormContents! Object removeSelector: #nautilusIconClass! ThemeIcons class removeSelector: #workspaceIconContents! ThemeIcons class removeSelector: #windowIconContents! ThemeIcons class removeSelector: #warningIconContents! ThemeIcons class removeSelector: #volumeIconContents! ThemeIcons class removeSelector: #versionControlIconContents! ThemeIcons class removeSelector: #userIconContents! ThemeIcons class removeSelector: #upArrowIconContents! ThemeIcons class removeSelector: #transcriptIconContents! ThemeIcons class removeSelector: #toolsIconContents! ThemeIcons class removeSelector: #tinyMenuIconContents! ThemeIcons class removeSelector: #testRunnerIconContents! ThemeIcons class removeSelector: #storeIconMethodFor:! ThemeIcons class removeSelector: #solidMenuIconContents! ThemeIcons class removeSelector: #smallWindowIconContents! ThemeIcons class removeSelector: #smallWarningIconContents! ThemeIcons class removeSelector: #smallVolumeIconContents! ThemeIcons class removeSelector: #smallUpdateIconContents! ThemeIcons class removeSelector: #smallUndoIconContents! ThemeIcons class removeSelector: #smallUnderlineIconContents! ThemeIcons class removeSelector: #smallSystemBrowserIconContents! ThemeIcons class removeSelector: #smallStrikeOutIconContents! ThemeIcons class removeSelector: #smallSelectIconContents! ThemeIcons class removeSelector: #smallScreenshotIconContents! ThemeIcons class removeSelector: #smallSaveIconContents! ThemeIcons class removeSelector: #smallSaveAsIconContents! ThemeIcons class removeSelector: #smallRightFlushIconContents! ThemeIcons class removeSelector: #smallRemoteOpenIconContents! ThemeIcons class removeSelector: #smallRedoIconContents! ThemeIcons class removeSelector: #smallQuitIconContents! ThemeIcons class removeSelector: #smallQuestionIconContents! ThemeIcons class removeSelector: #smallPushpinIconContents! ThemeIcons class removeSelector: #smallPublishIconContents! ThemeIcons class removeSelector: #smallPrintItIconContents! ThemeIcons class removeSelector: #smallPrintIconContents! ThemeIcons class removeSelector: #smallPasteIconContents! ThemeIcons class removeSelector: #smallPaintIconContents! ThemeIcons class removeSelector: #smallOpenIconContents! ThemeIcons class removeSelector: #smallOkIconContents! ThemeIcons class removeSelector: #smallObjectsIconContents! ThemeIcons class removeSelector: #smallNewIconContents! ThemeIcons class removeSelector: #smallLockIconContents! ThemeIcons class removeSelector: #smallLoadProjectIconContents! ThemeIcons class removeSelector: #smallLeftFlushIconContents! ThemeIcons class removeSelector: #smallLanguageIconContents! ThemeIcons class removeSelector: #smallJustifiedIconContents! ThemeIcons class removeSelector: #smallJumpIconContents! ThemeIcons class removeSelector: #smallItalicIconContents! ThemeIcons class removeSelector: #smallInspectItIconContents! ThemeIcons class removeSelector: #smallInfoIconContents! ThemeIcons class removeSelector: #smallHomeIconContents! ThemeIcons class removeSelector: #smallHierarchyBrowserIconContents! ThemeIcons class removeSelector: #smallHelpIconContents! ThemeIcons class removeSelector: #smallFullscreenIconContents! ThemeIcons class removeSelector: #smallForwardIconContents! ThemeIcons class removeSelector: #smallFontsIconContents! ThemeIcons class removeSelector: #smallFindIconContents! ThemeIcons class removeSelector: #smallExportIconContents! ThemeIcons class removeSelector: #smallExpertIconContents! ThemeIcons class removeSelector: #smallErrorIconContents! ThemeIcons class removeSelector: #smallDoItIconContents! ThemeIcons class removeSelector: #smallDeleteIconContents! ThemeIcons class removeSelector: #smallDebugItIconContents! ThemeIcons class removeSelector: #smallDebugIconContents! ThemeIcons class removeSelector: #smallCutIconContents! ThemeIcons class removeSelector: #smallCopyIconContents! ThemeIcons class removeSelector: #smallConfigurationIconContents! ThemeIcons class removeSelector: #smallCenteredIconContents! ThemeIcons class removeSelector: #smallCancelIconContents! ThemeIcons class removeSelector: #smallBoldIconContents! ThemeIcons class removeSelector: #smallBarcodeIconContents! ThemeIcons class removeSelector: #smallBackIconContents! ThemeIcons class removeSelector: #smallAuthoringToolsIconContents! ThemeIcons class removeSelector: #scriptManagerIconContents! ThemeIcons class removeSelector: #scaleIconContents! ThemeIcons class removeSelector: #rotateIconContents! ThemeIcons class removeSelector: #recentMessagesIconContents! ThemeIcons class removeSelector: #readIconMethodsFromDirectory:! ThemeIcons class removeSelector: #radioButtonPressedIconContents! ThemeIcons class removeSelector: #radioButtonOnIconContents! ThemeIcons class removeSelector: #radioButtonOffIconContents! ThemeIcons class removeSelector: #questionIconContents! ThemeIcons class removeSelector: #publishIconContents! ThemeIcons class removeSelector: #processBrowserIconContents! ThemeIcons class removeSelector: #pharoIconContents! ThemeIcons class removeSelector: #paintingIconContents! ThemeIcons class removeSelector: #paintTabIconContents! ThemeIcons class removeSelector: #paintIconContents! ThemeIcons class removeSelector: #openIconContents! ThemeIcons class removeSelector: #objectsIconContents! ThemeIcons class removeSelector: #lockIconContents! ThemeIcons class removeSelector: #jumpIconContents! ThemeIcons class removeSelector: #initializeIcons! ThemeIcons class removeSelector: #initialize! ThemeIcons class removeSelector: #infoIconContents! ThemeIcons class removeSelector: #imageIconContents! ThemeIcons class removeSelector: #iconSelectors! ThemeIcons class removeSelector: #homeIconContents! ThemeIcons class removeSelector: #helpIconContents! ThemeIcons class removeSelector: #haloViewIconContents! ThemeIcons class removeSelector: #haloRotIconContents! ThemeIcons class removeSelector: #haloRecolorIconContents! ThemeIcons class removeSelector: #haloPaintIconContents! ThemeIcons class removeSelector: #haloMenuIconContents! ThemeIcons class removeSelector: #haloHelpIconContents! ThemeIcons class removeSelector: #haloGrabIconContents! ThemeIcons class removeSelector: #haloFontStyleIconContents! ThemeIcons class removeSelector: #haloFontSizeIconContents! ThemeIcons class removeSelector: #haloFontEmphIconContents! ThemeIcons class removeSelector: #haloDupIconContents! ThemeIcons class removeSelector: #haloDragIconContents! ThemeIcons class removeSelector: #haloDismissIconContents! ThemeIcons class removeSelector: #haloDebugIconContents! ThemeIcons class removeSelector: #haloCollapseIconContents! ThemeIcons class removeSelector: #fullscreenIconContents! ThemeIcons class removeSelector: #forwardIconContents! ThemeIcons class removeSelector: #eyedropperIconContents! ThemeIcons class removeSelector: #exportIcon:asPNGNamed:! ThemeIcons class removeSelector: #exportIcon:asGifNamed:! ThemeIcons class removeSelector: #exportAllIconsAsPNG! ThemeIcons class removeSelector: #exportAllIconsAsGif! ThemeIcons class removeSelector: #expandBoxIconContents! ThemeIcons class removeSelector: #errorIconContents! ThemeIcons class removeSelector: #createIconMethodsFromFile:directory:! ThemeIcons class removeSelector: #createIconMethodsFromDirectory:! ThemeIcons class removeSelector: #confirmIconContents! ThemeIcons class removeSelector: #configurationIconContents! ThemeIcons class removeSelector: #clearIcons! ThemeIcons class removeSelector: #checkBoxPressedIconContents! ThemeIcons class removeSelector: #checkBoxOnIconContents! ThemeIcons class removeSelector: #checkBoxOffIconContents! ThemeIcons class removeSelector: #changeSorterIconContents! ThemeIcons class removeSelector: #calendarIconContents! ThemeIcons class removeSelector: #base64ContentsOfFileNamed:! ThemeIcons class removeSelector: #backIconContents! AbstractWidget removeSelector: #iconClass! UITheme removeSelector: #squeakyMouseIcon! NautilusMonticello class removeSelector: #iconClass! !Trait method! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !Trait method! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !Trait method! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! "CI-Core"! "FamFam-Icons"! "Graphics-Resources"! "Growl"! "HelpSystem-Core"! "KeyChain"! "Keymapping-Settings"! "Manifest-CriticBrowser"! "MenuRegistration"! "MonticelloGUI"! "Morphic"! "NECompletion"! "Nautilus"! "NautilusRefactoring"! "Polymorph-TaskbarIcons"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "RecentSubmissions"! "SUnit-UI"! "Settings-FreeType"! "Settings-Graphics"! "Settings-Polymorph"! "Shout"! "SmartSuggestions"! "Spec-Widgets"! "StartupPreferences"! "System-Settings"! "System-Support"! "Text"! "Tools"! ----End fileIn----! ----QUIT----an Array(14 May 2013 10:46:38 am) Pharo.image priorSource: 3828040! ----STARTUP----an Array(14 May 2013 10:53:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 May 2013 10:53:20 am) Pharo-30125.image priorSource: 4434214! ----STARTUP----an Array(14 May 2013 12:51:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/14/2013 12:47' prior: 37383255! commentForCurrentUpdate ^ '10611 restore nautilus buttons bar https://pharo.fogbugz.com/f/cases/10611 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/14/2013 12:47'! script223 ^ 'AST-Core-MarcusDenker.146.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.21.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-EstebanLorenzano.36.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1431.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.466.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.16.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.810.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-EstebanLorenzano.156.mcz StartupPreferences-EstebanLorenzano.86.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.832.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-EstebanLorenzano.68.mcz TextTests-MarcusDenker.5.mcz Tools-EstebanLorenzano.1117.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/14/2013 12:47'! update30126 "self new update30126" self withUpdateLog: '10611 restore nautilus buttons bar https://pharo.fogbugz.com/f/cases/10611 '. self loadTogether: self script223 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI class methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 12:00' prior: 37883291! resetIconCaches ClassesIconsCache removeAll. GroupsIconsCache removeAll. PackagesIconsCache removeAll. MethodWidget resetMethodIconCache.! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/14/2013 12:36' prior: 37885737! buildTextAreaButtonsColumn: aWindow | column | column := PanelMorph new. column changeTableLayout; listDirection: #topToBottom. { self buildSwitchToSourceCodeButton. self buildSwitchToByteCodeButton. self buildSeparator. self buildBrowseInstVarsButton. self buildBrowseClassVarsButton} reverse do: [:each | column addMorph: each ]. column vResizing: #spaceFill; width: 24; hResizing: #rigid. ^ column! ! !NautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/14/2013 12:37' prior: 37804202! addAll: aWindow | topHeight middleHeight bottomMorph bottomHeight delta | delta := 0. bottomHeight := 0. middleHeight := 0. topHeight := 0. " reverse order in column ..." "column vResizing: #rigid." self buildTopPlugins ifNotNil: [:top | topHeight := top height. aWindow addMorph: top fullFrame: ((0 @ 0 corner: 1 @ 0) asLayoutFrame bottomOffset: topHeight). delta := 4. topHeight := topHeight + delta. top color: Color transparent]. "navigationRow := self buildNavigationRow: aWindow height: topHeight." self buildColumns: aWindow height: topHeight"+navigationRow". self setShortcuts: #NautilusSourceCodeShortcuts to: aWindow. self buildMiddlePlugins ifNotNil: [:middle | middleHeight := middle height+4. aWindow addMorph: middle fullFrame: ((0 @ 0.5 corner: 1 @ 0.5) asLayoutFrame bottomOffset: middleHeight). middle color: Color transparent]. sourceCodePanel := PanelMorph new. self setShortcuts: #NautilusSourceCodeShortcuts to: sourceCodePanel. sourceCodePanel changeProportionalLayout. sourceCodePanel addMorph: self buildCodePane fullFrame: LayoutFrame identity. "self buildCommentPane." sourceCodePanel hResizing: #spaceFill; vResizing: #spaceFill. sourceCodeContainer := PanelMorph new. self setShortcuts: #NautilusSourceCodeShortcuts to: sourceCodeContainer. sourceCodeContainer changeTableLayout; listDirection: #leftToRight. { sourceCodePanel. self buildTextAreaButtonsColumn: aWindow} reverse do: [:each | sourceCodeContainer addMorph: each]. bottomMorph := self buildBottomPlugins. bottomMorph ifNotNil: [:bottom | bottomHeight := bottom height + 8]. aWindow addMorph: sourceCodeContainer fullFrame: ( (0@0.5 corner: 1 @ 1) asLayoutFrame topOffset: middleHeight; bottomOffset: bottomHeight negated). bottomMorph ifNotNil: [:bottom | aWindow addMorph: bottom fullFrame: ((0 @ 1 corner: 1 @ 1) asLayoutFrame topOffset: bottomHeight negated). bottom color: Color transparent]! ! !NautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 5/14/2013 12:39' prior: 37806250! buildColumns: aWindow height: height | delta | delta := StandardFonts defaultFont height + 10. aWindow addMorph: (self buildFirstColumn: aWindow) fullFrame: ((0 @ 0 corner: 0.25 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildSecondColumn: aWindow) fullFrame: ((0.25 @ 0 corner: 0.5 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildThirdColumn: aWindow) fullFrame: ( (0.5 @ 0 corner: 0.75 @ 0.5) asLayoutFrame topOffset: height ; bottomOffset: delta negated). aWindow addMorph: (self buildFourthColumn: aWindow) fullFrame: ( (0.75 @ 0 corner: 1 @ 0.5) asLayoutFrame topOffset: height; bottomOffset: delta negated). aWindow addMorph: self buildNavigationList fullFrame: ((0.5 @ 0.5 corner: 1.0 @ 0.5) asLayoutFrame topOffset: delta negated ).! ! "Nautilus"! ----End fileIn----! ----QUIT----an Array(14 May 2013 12:51:52 pm) Pharo.image priorSource: 4434412! ----STARTUP----an Array(14 May 2013 12:58:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 May 2013 12:58:20 pm) Pharo-30126.image priorSource: 4448722! ----STARTUP----an Array(14 May 2013 6:08:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/14/2013 17:58' prior: 37989147! commentForCurrentUpdate ^ '10617 fix accessor RBMethodNode>>#compilationContext in Image https://pharo.fogbugz.com/f/cases/10617 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/14/2013 17:59'! script224 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.21.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-EstebanLorenzano.36.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1431.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.466.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.16.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.810.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-StephaneDucasse.22.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.110.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-EstebanLorenzano.156.mcz StartupPreferences-EstebanLorenzano.86.mcz System-Announcements-MarcusDenker.46.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.832.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-EstebanLorenzano.68.mcz TextTests-MarcusDenker.5.mcz Tools-EstebanLorenzano.1117.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/14/2013 17:59'! update30127 "self new update30127" self withUpdateLog: '10617 fix accessor RBMethodNode>>#compilationContext in Image https://pharo.fogbugz.com/f/cases/10617 '. self loadTogether: self script224 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/14/2013 10:06' prior: 37339508! compilationContext ^ compilationContext ifNil: [ compilationContext := self methodClass compiler compilationContext]! ! "AST-Core"! ----End fileIn----! ----QUIT----an Array(14 May 2013 6:08:51 pm) Pharo.image priorSource: 4448920! ----STARTUP----an Array(14 May 2013 6:15:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 May 2013 6:15:13 pm) Pharo-30127.image priorSource: 4459592! ----STARTUP----an Array(14 May 2013 10:16:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/14/2013 22:14' prior: 38003650! commentForCurrentUpdate ^ '10619 Add a mock for the World https://pharo.fogbugz.com/f/cases/10619 7488 Spec About window text https://pharo.fogbugz.com/f/cases/7488 7002 Snapshot announcement https://pharo.fogbugz.com/f/cases/7002'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/14/2013 22:14'! script225 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.21.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-EstebanLorenzano.36.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-EstebanLorenzano.1431.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.466.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.16.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.810.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.114.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.163.mcz StartupPreferences-EstebanLorenzano.86.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.98.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.833.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-EstebanLorenzano.68.mcz TextTests-MarcusDenker.5.mcz Tools-EstebanLorenzano.1117.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/14/2013 22:14'! update30128 "self new update30128" self withUpdateLog: '10619 Add a mock for the World https://pharo.fogbugz.com/f/cases/10619 7488 Spec About window text https://pharo.fogbugz.com/f/cases/7488 7002 Snapshot announcement https://pharo.fogbugz.com/f/cases/7002'. self loadTogether: self script225 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SnapshotDone commentStamp: '' prior: 0! I am announced when the image has been saved. Note that the announcement is done *after* the execution was frozen. So you can send me #isNewImage to know if the current image instance is the same that started the save action.! !SpecDialogWindow commentStamp: '' prior: 37108791! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !SpecWindow commentStamp: '' prior: 0! I am a window used by WindowSpec. I have been introduced since it's currently the best solution to prevent to add dozen of respondsTo: in StandardWindow or add dirty extensions to Object (because all models are not subclasses of Model)! !ComposableModel commentStamp: '' prior: 36855822! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !WorldModel commentStamp: '' prior: 0! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !PanelMorphWithSplitters commentStamp: '' prior: 29053459! A PanelMorphWithSplitters is which add splitters the way SystemWindow do it! !MorphWrapper commentStamp: '' prior: 27073069! A MorphWrapper is used to wrap a morph with a layout in the goal to be easily added to another morph! !RadioButtonGroup commentStamp: '' prior: 32095806! A RadioButtonGroup is a group for radio buttons which ensure that only radio button of this group is activated at the same time.! !SnapshotDone commentStamp: '' prior: 38024897! I am announced when the image has been saved. Note that the announcement is done *after* the execution was frozen. So you can send me #isNewImage to know if the current image instance is the same that started the save action.! !SnapshotDone class methodsFor: 'instance creation' stamp: 'PabloEstefo 1/29/2013 17:04'! isNewImage: aBoolean ^ self new isNewImage: aBoolean.! ! !SnapshotDone methodsFor: 'accessing' stamp: 'PabloEstefo 1/29/2013 16:59'! isNewImage ^ isNewImage! ! !SnapshotDone methodsFor: 'accessing' stamp: 'PabloEstefo 1/29/2013 16:59'! isNewImage: anObject isNewImage := anObject! ! !SystemAnnouncer methodsFor: 'triggering' stamp: 'PabloEstefo 1/29/2013 17:40'! snapshotDone: isNewImage self announce: (SnapshotDone isNewImage: isNewImage)! ! !SpecDialogWindow commentStamp: '' prior: 38025190! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/26/2012 02:09' prior: 50692807! cancelAction: aBlock self toolbar cancelAction: aBlock ! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/2/2012 17:05' prior: 50692955! cancelled ^ self toolbar cancelled! ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/7/2013 18:38' prior: 37108960! close super close. self toolbar cancelled: true.! ! !SpecDialogWindow methodsFor: 'focus' stamp: 'EstebanLorenzano 2/18/2013 15:28' prior: 50692248! giveFocusToNextFrom: aModel ^ self model giveFocusToNextFrom: aModel ! ! !SpecDialogWindow methodsFor: 'focus' stamp: 'EstebanLorenzano 2/18/2013 15:28' prior: 50692406! giveFocusToPreviousFrom: aModel ^ self model giveFocusToPreviousFrom: aModel! ! !SpecDialogWindow methodsFor: 'open/close' stamp: 'BenjaminVanRyseghem 7/10/2012 16:18' prior: 50692580! initialExtent ^ self model ifNil: [ super initialExtent ] ifNotNil: [:m | m initialExtent ifNil: [ super initialExtent ]]! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:05' prior: 35385314! model: aModel super model: aModel. aModel model focusOrder addLast: toolbar.! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/26/2012 02:25' prior: 50690733! newButtonRow ^ self toolbar buildWithSpec! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/12/2012 18:03' prior: 50690869! newContentMorph "Answer a new content morph." ^ self specWidget ifNil: [ nil ] ifNotNil: [:w | w hResizing: #spaceFill; vResizing: #spaceFill ]! ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 7/12/2012 18:04' prior: 50691760! newMainPanel "Answer a new main panel." | panel | panel := self newDialogPanel. self newContentMorph ifNotNil: [:m | panel addMorphBack: m ]. self newButtonRow ifNotNil: [:m | panel addMorphBack: m ]. ^ panel! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/26/2012 02:08' prior: 50693083! okAction: aBlock self toolbar okAction: aBlock ! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:01' prior: 50691130! specWidget ^ specWidget! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:04' prior: 50691247! specWidget: anObject specWidget := anObject.! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:02' prior: 50691385! toolbar "Lazy initialization because this method is called efore the initialize method" ^ toolbar ifNil: [ toolbar := OkCancelToolbar owner: self ]! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:01' prior: 50691628! toolbar: anObject toolbar := anObject.! ! !SpecWindow commentStamp: '' prior: 38025325! I am a window used by WindowSpec. I have been introduced since it's currently the best solution to prevent to add dozen of respondsTo: in StandardWindow or add dirty extensions to Object (because all models are not subclasses of Model)! !SpecWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 17:27'! aboutText ^ self model aboutText! ! !ComposableModel commentStamp: '' prior: 38025626! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 17:31'! aboutText ^ aboutText contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 17:32'! aboutText: aString aboutText contents: aString! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:26' prior: 19982950! ensureExtentFor: widget self extent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]. self initialExtent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 17:32' prior: 36856879! initialize "Initialization code for ComposableModel" super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:27' prior: 34337157! openWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpec: aSpec ] ifFalse: [ window := WindowModel new model: self. window openWithSpec: aSpec. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:27' prior: 34337594! openWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpecLayout: aSpec ] ifFalse: [ window := WindowModel new model: self. window openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:29'! openWorldWithSpec "Build the widget using the default spec and display it into the world" ^ self openWorldWithSpec: self defaultSpecSelector.! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:29'! openWorldWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into the world" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpec: aSpec ] ifFalse: [ window := WorldModel new model: self. window openWithSpec: aSpec. self takeKeyboardFocus ]. ^ window! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:29'! openWorldWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into the world" (window notNil and: [ self needRebuild not ]) ifTrue: [ window rebuildWithSpecLayout: aSpec ] ifFalse: [ window := WorldModel new model: self. window openWorldWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 17:32'! aboutText ^ model contents ifNotNil: [ :m | m aboutText ]! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:19' prior: 54918944! addModelIn: widget withSpecLayout: aSpec self model ifNil: [ ^ self ]. widget addMorph: (self model buildWithSpecLayout: aSpec) frame: (0@0 corner: 1@1)! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:19' prior: 54919190! buildWithSpec: aSpec "Build the widget using the spec name provided as argument" | widget | (self spec notNil and: [ self needRebuild not ]) ifTrue: [ widget := self spec instance ] ifFalse: [ widget := SpecInterpreter private_buildWidgetFor: self withSpec: self defaultSpecSelector. self addModelIn: widget withSpec: aSpec ]. self ensureExtentFor: widget. ^ widget! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:19' prior: 54919731! buildWithSpecLayout: aSpec "Build the widget using the spec name provided as argument" | widget | (self spec notNil and: [ self needRebuild not ]) ifTrue: [ widget := self spec instance ] ifFalse: [ widget := SpecInterpreter private_buildWidgetFor: self withSpec: self defaultSpecSelector. self addModelIn: widget withSpecLayout: aSpec ]. self ensureExtentFor: widget. ^ widget! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:17' prior: 35384862! openModal: aWindow ^ self widget ifNotNil: [:w | w openModal: aWindow ].! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:16' prior: 54920401! openWithSpec: aSpec window := self buildWithSpec: aSpec. window openInWorld. self updateTitle! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:16' prior: 54920592! openWithSpecLayout: aSpec window := self buildWithSpecLayout: aSpec. window openInWorld. self updateTitle! ! !WorldModel commentStamp: '' prior: 38025798! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !WorldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/14/2013 16:34'! defaultSpec self setUpWorld. ^ World! ! !WorldModel class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:40'! setUpWorld World submorphs do: [:e | e delete ]. (Smalltalk at: #PolymorphSystemSettings) perform: #desktopColor: with: (Color r: 0.78 g: 0.753 b: 0.71). ((Smalltalk at: #UITheme) perform: #currentSettings) perform: #windowColor: with: (Color r: 0.745 g: 0.745 b: 0.745). (Smalltalk at: #TaskbarMorph) perform: #showTaskbar: with: false! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23'! addModelIn: widget withSpec: aSpec self model ifNil: [ ^ self ]. widget addMorph: (self model buildWithSpec: aSpec) fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23'! addModelIn: widget withSpecLayout: aSpec self model ifNil: [ ^ self ]. widget addMorph: (self model buildWithSpecLayout: aSpec) fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23'! defaultInitialExtent ^ World extent! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:43'! ensureExtentFor: aWidget self extent ifNotNil: [ :ext | DisplayScreen hostWindowSize: ext ]. self initialExtent ifNotNil: [ :ext | DisplayScreen hostWindowSize: ext ].! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23'! isDisplayed ^ true! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:33'! openWithSpec: aSpec window := self buildWithSpec: aSpec. self updateTitle! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:33'! openWithSpecLayout: aSpec window := self buildWithSpecLayout: aSpec. self updateTitle! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:24'! title: aString ^ DisplayScreen hostWindowTitle: aString! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:41'! updateTitle "Update the window title" DisplayScreen hostWindowTitle: self title! ! !MorphicBindings methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 17:29' prior: 27076437! initializeClassesDictionary ^ IdentityDictionary new at: #List put: #PluggableListMorph; at: #IconList put: #PluggableIconListMorph; at: #Text put: #PluggableTextMorph; at: #Button put: #PluggableButtonMorph; at: #Panel put: #PanelMorph; at: #Checkbox put: #CheckboxMorph; at: #DropList put: #DropListMorph; at: #TextField put: #PluggableTextFieldMorph; at: #Label put: #LabelMorph; at: #MultiColumnList put: #PluggableMultiColumnListMorph; at: #Tree put: #PluggableTreeMorph; at: #Slider put: #PluggableSliderMorph; at: #FrameLayout put: #LayoutFrame; at: #Window put: #SpecWindow; at: #DialogWindow put: #SpecDialogWindow; yourself! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'MartinDias 5/7/2013 16:22' prior: 34642371! snapshot: save andQuit: quit "Mark the changes file and close all files as part of #processShutdownList. If save is true, save the current state of this Smalltalk in the image file. If quit is true, then exit to the outer OS shell. The latter part of this method runs when resuming a previously saved image. This resume logic checks for a document file to process when starting up." | snapshotResult isNewImage | self addSnapshotRecord: save andQuit: quit. self shutDownImage: quit. save ifTrue: [ snapshotResult := self snapshotPrimitive. "<-- PC frozen here on image file" isNewImage := snapshotResult == true. SystemAnnouncer uniqueInstance snapshotDone: isNewImage] ifFalse: [ isNewImage := false ]. (quit and: [ isNewImage not ]) ifTrue: [ self quitPrimitive ]. "create a new session object if we're booting" isNewImage ifTrue: [ session := self newSessionObject ]. self startupImage: isNewImage snapshotWorked: snapshotResult. "We return the resuming state, which may be useful for users to know the state of the image" ^ isNewImage! ! !PanelMorphWithSplitters commentStamp: '' prior: 38026026! A PanelMorphWithSplitters is which add splitters the way SystemWindow do it! !MorphWrapper commentStamp: '' prior: 38026163! A MorphWrapper is used to wrap a morph with a layout in the goal to be easily added to another morph! !RadioButtonGroup commentStamp: '' prior: 38026329! A RadioButtonGroup is a group for radio buttons which ensure that only radio button of this group is activated at the same time.! "Spec-Bindings"! "Spec-Core"! "Spec-Widgets"! "System-Announcements"! "System-Support"! ----End fileIn----! ----QUIT----an Array(14 May 2013 10:17:03 pm) Pharo.image priorSource: 4459788! ----STARTUP----an Array(14 May 2013 10:23:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 May 2013 10:23:38 pm) Pharo-30128.image priorSource: 4486862! ----STARTUP----an Array(15 May 2013 8:10:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/15/2013 08:07' prior: 38014518! commentForCurrentUpdate ^ '7550 Unload keychain https://pharo.fogbugz.com/f/cases/7550 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/15/2013 08:08'! script226 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.21.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1433.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.466.mcz NautilusCommon-MarcusDenker.137.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-MarcusDenker.39.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.16.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.810.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-MarcusDenker.114.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-MarcusDenker.104.mcz Spec-Widgets-MarcusDenker.163.mcz StartupPreferences-MarcusDenker.88.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/15/2013 08:08'! update30129 "self new update30129" self withUpdateLog: '7550 Unload keychain https://pharo.fogbugz.com/f/cases/7550 '. self loadTogether: self script226 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DummyUserManager commentStamp: '' prior: 0! My purpose is to be loaded in the core without breaking anything. Then the real UserManager can be used! !UserManager commentStamp: '' prior: 36415736! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !PharoUserPermissions commentStamp: '' prior: 29341024! A PharoUserPermissions is a wrapper which stores the permissions of a PharoUser! !Debugger class methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 5/4/2013 01:34' prior: 36400185! openOn: process context: context label: title contents: contentsStringOrNil fullView: bool "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | fullView | fullView := (bool or: [self alwaysOpenFullDebugger]). Smalltalk tools userManager canDebug ifFalse: [ UIManager default spawnNewProcessIfThisIsUI: process. process suspend. ^ self ]. ^ UIManager default openDebuggerOn: process context: context label: title contents: contentsStringOrNil fullView: fullView! ! !DummyUserManager commentStamp: '' prior: 38051860! My purpose is to be loaded in the core without breaking anything. Then the real UserManager can be used! !DummyUserManager class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/4/2013 01:28'! default ^ self new! ! !DummyUserManager class methodsFor: 'class initialization' stamp: 'BenjaminVanRyseghem 5/4/2013 12:59'! initialize self reset! ! !DummyUserManager class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/4/2013 12:59'! reset Smalltalk tools register: self new as: #userManager! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:38'! addUser: aUser ^ false! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:39'! canBrowse ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:26'! canDebug ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canDropOSFile ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canEditCode ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canEvaluateCode ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:35'! canInspect ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:35'! canRunStartupScript ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/7/2013 18:53'! canSaveImage ^ true! ! !DummyUserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canShowMorphHalo ^ true! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:38'! includesUser: aUser ^ false! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 18:31'! openSwitchUsers! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 12:59'! reset self class reset! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 13:03'! setCurrentUser: aGroup "I just absorb this message"! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:36'! userNamePasswordFor: aGroup ^ nil! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:40'! userNames ^ #()! ! !DummyUserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:39'! users ^ #()! ! !UserManager commentStamp: '' prior: 38052025! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:39'! canBrowse ^ self currentUser canBrowse! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:29'! canDebug ^ self currentUser canDebug! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canDropOSFile ^ self currentUser canDropOSFile! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canEditCode ^ self currentUser canEditCode! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:37'! canEvaluateCode ^ self currentUser canEvaluateCode! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:35'! canInspect ^ self currentUser canRunStartupScript! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:35'! canRunStartupScript ^ self currentUser canRunStartupScript! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/7/2013 18:56'! canSaveImage ^ self currentUser canSaveImage! ! !UserManager methodsFor: 'permissions' stamp: 'BenjaminVanRyseghem 5/4/2013 01:36'! canShowMorphHalo ^ self currentUser canShowMorphHalo! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:38'! includesUser: aUser ^ self users includes: aUser! ! !UserManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 01:36' prior: 36419464! userNamePasswordFor: aGroup ^ self currentUser userNamePasswordFor: aGroup! ! !PharoUserPermissions commentStamp: '' prior: 38052169! A PharoUserPermissions is a wrapper which stores the permissions of a PharoUser! !PharoUserPermissions methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 18:57'! canSaveImage ^ canSaveImage! ! !PharoUserPermissions methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 18:57'! canSaveImage: anObject canSaveImage := anObject! ! !PharoUserPermissions methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/7/2013 18:57' prior: 29343648! initialize "Initialization code for PharoUserPermissions" super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !DefaultCommandLineHandler class methodsFor: 'class initialization' stamp: 'BenjaminVanRyseghem 5/4/2013 12:53' prior: 36401980! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. Smalltalk addDeferredStartupAction: [ self new activate ]! ! !KeyChain methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/4/2013 18:45' prior: 24200328! setPassword: aPassword (password isNil or: [ self isUnlocked ]) ifTrue: [ | oldPassword | oldPassword := password. aPassword ifNil: [ password := nil ] ifNotNil: [ password := encryptor encrypt: aPassword ]. "Since the passwords are encoded using the password, if you change the password, you have to re-encrypt the passwords" self reEncryptKeysBased: oldPassword ]! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 36402304! dropFiles: anEvent "Handle a number of dropped files from the OS. TODO: - use a more general mechanism for figuring out what to do with the file (perhaps even offering a choice from a menu) - remember the resource location or (when in browser) even the actual file handle" | numFiles stream handler | Smalltalk tools userManager canDropOSFile ifFalse: [ ^ self ]. numFiles := anEvent contents. 1 to: numFiles do: [:i | (stream := FileStream requestDropStream: i) ifNotNil: [ handler := ExternalDropHandler lookupExternalDropHandler: stream. [handler ifNotNil: [handler handle: stream in: self dropEvent: anEvent]] ensure: [stream close]]].! ! !Morph methodsFor: 'halos and balloon help' stamp: 'BenjaminVanRyseghem 5/4/2013 12:54' prior: 36403075! addHalo: evt | halo prospectiveHaloClass | Smalltalk tools userManager canShowMorphHalo ifFalse: [ ^ self ]. prospectiveHaloClass := Smalltalk globals at: self haloClass ifAbsent: [ HaloMorph ]. halo := prospectiveHaloClass new. halo bounds: (halo worldBoundsForMorph: self). halo popUpFor: self event: evt. ^ halo! ! !Morph methodsFor: 'meta-actions' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 36403494! invokeMetaMenu: evt | menu | Smalltalk tools userManager canShowMorphHalo ifFalse: [ ^ self ]. menu := self buildMetaMenu: evt. menu addTitle: self externalName. self world ifNotNil: [ menu popUpEvent: evt in: self world ]! ! !SmalltalkEditor class methodsFor: 'menu declaration' stamp: 'BenjaminVanRyseghem 5/14/2013 18:08' prior: 37812523! smalltalkEditorMenuOn: aBuilder "Specify the menu used when writing code. Try it with: (PragmaMenuBuilder pragmaKeyword: 'smalltalkEditorMenu' model: nil) menu popUpInWorld " Smalltalk tools userManager canEvaluateCode ifTrue: [ (aBuilder item: #'Do it' translated) keyText: 'd'; selector: #doIt; help: nil; icon: Smalltalk ui icons smallDoItIcon. (aBuilder item: #'Print it' translated) keyText: 'p'; selector: #printIt; help: nil; icon: Smalltalk ui icons smallPrintItIcon. ]. Smalltalk tools userManager canInspect ifTrue: [ (aBuilder item: #'Inspect it' translated) keyText: 'i'; selector: #inspectIt; help: nil; icon: Smalltalk ui icons smallInspectItIcon. (aBuilder item: #'Explore it' translated) keyText: 'I'; selector: #exploreIt; help: nil; icon: Smalltalk ui icons smallInspectItIcon ]. Smalltalk tools userManager canDebug ifTrue: [ (aBuilder item: #'Debug it' translated) keyText: 'D'; selector: #debugIt; help: nil; icon: Smalltalk ui icons smallDebugIcon. (aBuilder item: #'Profile it' translated) selector: #tallyIt; icon: Smalltalk ui icons smallDebugIcon; withSeparatorAfter. ]. (aBuilder item: #'Find...' translated) keyText: 'f'; selector: #find; help: nil; icon: Smalltalk ui icons smallFindIcon. (aBuilder item: #'Find again' translated) keyText: 'g'; selector: #findAgain; help: nil; icon: Smalltalk ui icons smallFindIcon. Smalltalk tools userManager canBrowse ifTrue: [ (aBuilder item: #'Extended search...' translated) selector: #shiftedTextPaneMenuRequest; withSeparatorAfter ]. (aBuilder item: #'Do again' translated) keyText: 'j'; selector: #again; help: nil; icon: Smalltalk ui icons smallRedoIcon. (aBuilder item: #'Undo' translated) keyText: 'z'; selector: #undo; help: nil; icon: Smalltalk ui icons smallUndoIcon; withSeparatorAfter. (aBuilder item: #'Copy' translated) keyText: 'c'; selector: #copySelection; help: nil; icon: Smalltalk ui icons smallCopyIcon. (aBuilder item: #'Cut' translated) keyText: 'x'; selector: #cut; help: nil; icon: Smalltalk ui icons smallCutIcon. (aBuilder item: #'Paste' translated) keyText: 'v'; selector: #paste; help: nil; icon: Smalltalk ui icons smallPasteIcon. (aBuilder item: #'Paste...' translated) selector: #pasteRecent; help: nil; icon: Smalltalk ui icons smallCopyIcon; withSeparatorAfter. Smalltalk tools userManager canEvaluateCode ifTrue: [ (aBuilder item: #'Accept' translated) keyText: 's'; selector: #accept; help: nil; icon: Smalltalk ui icons smallOkIcon. (aBuilder item: #'Cancel' translated) keyText: 'l'; selector: #cancel; help: nil; icon: Smalltalk ui icons smallCancelIcon ].! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36406695! browseIt: t1 Smalltalk tools userManager canBrowse ifFalse: [^ false]. self browseIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36406899! debugIt: aKeyboardEvent "Evaluate the current selection in the Debugger." Smalltalk tools userManager canDebug ifFalse: [ ^ false ]. self debugIt. ^ true! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36407157! doIt "Set the context to include pool vars of the model. Then evaluate." Smalltalk tools userManager canEvaluateCode ifFalse: [ ^ false ]. ^ self evaluateSelection! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36407430! doIt: aKeyboardEvent "Called when user hits cmd-d. Select the current line, if relevant, then evaluate and execute. 2/1/96 sw. 2/29/96 sw: don't call selectLine; it's done by doIt now" Smalltalk tools userManager canEvaluateCode ifFalse: [ ^ false ]. self doIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36407813! exploreIt: aKeyboardEvent "Explore the selection -- invoked via cmd-shift-I. If there is no current selection, use the current line." Smalltalk tools userManager canInspect ifFalse: [ ^ false ]. self exploreIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36408143! fileItIn: aKeyboardEvent "File in the selection; invoked via a keyboard shortcut, -- for now, cmd-shift-G." Smalltalk tools userManager canDropOSFile ifFalse: [ ^ false ]. self fileItIn. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36408447! implementorsOfIt: aKeyboardEvent "Triggered by Cmd-m; browse implementors of the selector represented by the current selection, if plausible. 2/1/96 sw" Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self implementorsOfIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36408800! inspectIt: aKeyboardEvent "Inspect the selection -- invoked via cmd-i. If there is no current selection, use the current line. 1/17/96 sw 2/29/96 sw: don't call selectLine; it's done by inspectIt now" Smalltalk tools userManager canInspect ifFalse: [ ^ false ]. self inspectIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36409199! methodNamesContainingIt: aKeyboardEvent "Browse methods whose selectors containing the selection in their names" Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self methodNamesContainingIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36409519! methodStringsContainingIt: aKeyboardEvent "Invoked from cmd-E -- open a browser on all methods holding string constants containing it." Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self methodStringsContainingit. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36409864! pasteInitials: aKeyboardEvent "Replace the current text selection by an authorship name/date stamp; invoked by cmd-shift-v, easy way to put an authorship stamp in the comments of an editor." Smalltalk tools userManager canEditCode ifFalse: [ ^ false ]. self closeTypeIn. self replace: self selectionInterval with: (Text fromString: Author changeStamp) and: [self selectAt: self stopIndex]. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36410373! referencesToIt: aKeyboardEvent "Triggered by Cmd-N; browse references to the current selection" Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self referencesToIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36410667! save: aKeyboardEvent "Submit the current text. Equivalent to 'accept' 1/18/96 sw" Smalltalk tools userManager canEvaluateCode ifFalse: [ ^ false ]. self closeTypeIn. self accept. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36410965! sendersOfIt: aKeyboardEvent "Triggered by Cmd-n; browse implementors of the selector represented by the current selection, if plausible. 2/1/96 sw" Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self sendersOfIt. ^ true! ! !SmalltalkEditor methodsFor: 'editing keys' stamp: 'BenjaminVanRyseghem 5/4/2013 12:57' prior: 36411308! spawnIt: aKeyboardEvent "Triggered by Cmd-o; spawn a new code window, if it makes sense." Smalltalk tools userManager canBrowse ifFalse: [ ^ false ]. self spawn. ^ true! ! !StartupLoader class methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/4/2013 18:23' prior: 50900483! startUp: resuming Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. (self allowStartupScript and: [ resuming ]) ifTrue: [ Smalltalk addDeferredStartupAction: [ self default loadStartupScript ]]! ! !Inspector class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/4/2013 12:54' prior: 36411592! openAsMorphOn: anObject withEvalPane: withEval withLabel: label valueViewClass: valueViewClass "Note: for now, this always adds an eval pane, and ignores the valueViewClass" Smalltalk tools userManager canInspect ifFalse: [ ^ self ]. ^ (self openAsMorphOn: anObject withLabel: label) openInWorld! ! !PharoUser class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/4/2013 12:56' prior: 36412002! username: username ^ Smalltalk tools userManager users detect: [:e | e username = username ] ifNone: [ self new username: username; yourself ]! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/4/2013 12:58' prior: 36415632! userNames ^ Smalltalk tools userManager userNames! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'BenjaminVanRyseghem 5/12/2013 16:00' prior: 33551577! handleStartupErrors: startupErrors "Handle the errors produced during startup. Resume to open a non-interactive debugger on the recorded errors" self logError: 'Got startup errors: ' inContext: nil. startupErrors do: [ :error| self logError: ' ', error description inContext: nil ]. self isInteractive ifFalse: [ self exitFailure ] ifTrue: [ |answer| Smalltalk tools userManager canRunStartupScript ifTrue: [ answer := (UIManager default confirm: 'Got startup errors, proceed to open debuggers' trueChoice: 'Debug' falseChoice: 'Cancel') ] ifFalse: [ answer := false ]. answer == true ifTrue: [ startupErrors do: #debug ]]! ! !WorldState class methodsFor: 'world menu items' stamp: 'BenjaminVanRyseghem 5/7/2013 18:55' prior: 54991904! quitSession | save | save := (self confirm: 'Save changes before quitting?' translated orCancel: [ ^ self ]). Smalltalk tools userManager canSaveImage ifFalse: [ save := false ]. Cursor write showWhile: [ Smalltalk snapshot: save andQuit: true. ]! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/4/2013 12:58' prior: 36419861! userNames ^ Smalltalk tools userManager userNames! ! !PluggableTextMorph methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 36400913! accept Smalltalk tools userManager canEditCode ifFalse: [ ^ self hasUnacceptedEdits: false ]. self acceptBasic. acceptAction ifNotNil: [acceptAction value: textMorph contents asText].! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 36401211! doIt Smalltalk tools userManager canEvaluateCode ifFalse: [ ^ false ]. self handleEdit: [textMorph editor evaluateSelection]! ! !PluggableTextMorph methodsFor: 'styling' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 36401442! hasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " Smalltalk tools userManager canEditCode ifFalse: [ aBoolean ifTrue: [ ^ self ]]. aBoolean == hasUnacceptedEdits ifFalse: [hasUnacceptedEdits := aBoolean. self changed]. aBoolean ifFalse: [hasEditingConflicts := false]. self okToStyle ifTrue: [ self styler styleInBackgroundProcess: textMorph contents]! ! UserManager class removeSelector: #resetDefault! UserManager class removeSelector: #default! "KeyChain"! "Morphic"! "StartupPreferences"! "System-CommandLine"! "System-Support"! "Text"! "Tools"! ----End fileIn----! ----QUIT----an Array(15 May 2013 8:11 am) Pharo.image priorSource: 4487060! ----STARTUP----an Array(15 May 2013 8:17:32 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 May 2013 8:17:32 am) Pharo-30129.image priorSource: 4517698! ----STARTUP----an Array(15 May 2013 11:40:44 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/15/2013 11:36' prior: 38041790! commentForCurrentUpdate ^ '10614 Spec lack of taskbarIcon mechanism https://pharo.fogbugz.com/f/cases/10614 10622 enhance access to icons for each tool https://pharo.fogbugz.com/f/cases/10622 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/15/2013 11:36'! script227 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.456.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-EstebanLorenzano.23.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1433.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.18.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.812.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-EstebanLorenzano.164.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.177.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/15/2013 11:37'! update30130 "self new update30130" self withUpdateLog: '10614 Spec lack of taskbarIcon mechanism https://pharo.fogbugz.com/f/cases/10614 10622 enhance access to icons for each tool https://pharo.fogbugz.com/f/cases/10622 '. self loadTogether: self script227 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ComposableModel commentStamp: '' prior: 38030757! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !AbstractCategoryWidget methodsFor: 'icon' stamp: 'EstebanLorenzano 5/14/2013 17:35'! categoryIconFor: aString self flag: #todo. "this would work better with the new class organizer" "((aString beginsWith: '---') or: [ aString = 'no messages' ]) ifTrue: [ ^ Smalltalk ui icons protocolNoneIcon ]." (aString beginsWith: '*') ifTrue: [ ^ Smalltalk ui icons protocolExtensionIcon ]. (aString beginsWith: 'private') ifTrue: [ ^ Smalltalk ui icons protocolPrivateIcon ]. ((aString = 'initialization' or: [ aString = 'initialize-release' ]) or: [ aString = 'finalization' ]) ifTrue: [ ^ Smalltalk ui icons protocolProtectedIcon ]. ^ Smalltalk ui icons protocolNoneIcon ! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37439619! backIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 37464356! calendarIcon ^ icons at: #'calendarIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self calendarIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37464616! calendarIconContents ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHOSURBVDjLpZOxa1RBEIe/d/e8 FKeFEA2IGBWCICZYBSESBCFglUDSCJZaRBBbK1HQ0s4/QQlCgoKdoBA9sVBshCBETCNRiUUg 5PDt7MxY7HuXdxgEycKwyzJ88/vN7Gbuzl5WDvDozeZtd66p21EzQw2iGaqGmhPVaqFodNTs /f0rI+M5gLnfmB0/MPg/le88+TLWU6BmgwDtpevgDhrBFETSORQgAQoBEbZvvUJEB2qAqg8O Rw6BxRQeS0gBUkAMsPIdAIm60wNVKwEZrG+AW1JilpRotQNDQwCEOiCWgIXhe1w+f/if3hff rXMhxH4Fooa5kzdT0rNPi3TWlrl6bp7PP1d4ufqCiyNTzIzOUYiz1RWCJECjsuBA3swAmBmd oxu6APza3uDB9EM6a8sAFFEJYsRoOwBRww3yxt+Su6FLq9nqAQuxst11QDTcnX2lhc7XVO3j tw8cOzjMzafzTJ26RJUL0B7Ia020dNlsJAsTJyaZODlZziVj+swsWZb1AarJJUCMeCnn8esf aWruiIKoEtQIkry3mlUx+qfg7owd389prd6+9/7CbsvMrfaQ/O3dhdWzQa0tUZGoaDREjahx V8Dm1u/nANlev/MfAjw0JrMu09AAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 37465514! changeSorterIcon ^ icons at: #'changeSorterIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self changeSorterIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37465786! changeSorterIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVDjLpVOxSgNBFJxcrkmC +AV+gP5BwEKwtLESW0mZD7CyEyViJVhbG7DURvEXBAsDKgpGxIjIecnF29t9byyyAZu9wkz1 2HnMm3m7WyGJWRC3Dq7aq83FTpKzMcwyqFNYVczHNrvpDc5XmktrXz9siAJpksCKYK5qs9u7 t+3T/fXjysn1q9TrtWhqhCSUAAkMR2PUGzWoAkqCBJST+qF3r4ft5Wo8toyy77En/zQpoSRS k/kaEH+mCoxyiQAARxcvDGHv7DnIbe1ekiQiUQ0uyIkEucJaAEAkUiLgwpzNvUDhyqa4sLiZ cFHplBJxN41QNsWWOXDegTFFsMnkJixujI9QlOUMR1DxDopC/hVhentx//Gp2+rkG2IdksEH nDioE4goqOxv7uQLUjiIE6Sf76AI/NPpAkBl1t8YYUb8Ao9lHyy2IyRjAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37491098! configurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37492558! confirmIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 37529099! forwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37549959! helpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37551437! homeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37553209! imageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALqSURBVDjLjVPbS9NRHN9T/0BW FBQUVIQKXigCpVIyygcDJUrnZdNEc5hlmZc0TdSF0bxszs3LvM3pXE6Xa3NL0TJTl7pcTY1E c5rX/WxqCrHhp7NBPaRGD5+Xw/lczud8vzQAtJ0wWhLp+4kbUThSFGrQFwTrB59dE+ryA/3+ vreNOMaPOmLkMeUT4mTMaoph1klh7pPApOLAUH4LPTn+X7qzLwXsKDDGj0wy8hibM+oCrI9p YTWGA0ZnWEd8sWZQYvXDC5g0XAzyo6BJP5f/R2C89OYeErlquiUPP9vogNgF1iYfbH10B0zx RMQFC4oszMsz8F3XBOqdBKqUs7a2B6fdHAIkMnu6le1w3WrwBLrjHSKWrhhYh72w2kVHjTII ae3eKFJexkp/I0YlKWhJdKsgZIanoTjMtlHPxSY9BD/YgbA2eGPteRjmWzOJazrmZKl4rL4A QT8TD4nIfPMjzKgKIUtwNtJIyxXftISclICN3GxYfHyw3FEEy1ALLIPNsOhkWGzLw5umCHCU flBLr2O29i4WXgnQwDpB0YY5NyapASmoxlxQrGAsFrAIWQ6D6Da0GecxXBaLFfLmuHI+Tgrk CBCIYKqIwVKHEHWxxzZp758GbTrc9AqYu4WYb8kkRcnsLcPejzL5DKi3dfAQSEFX9RKRZkzx QklKIaqjD4PW9+QqVy+IxmdpOkwvOaB6xVjpa8QQOSMtY4DHAPW6GuLSVFwprUJxSQYWlRyM S9JQGXlw3PELZDB8OzN9c0hkdXua1/pYfTKonloHkeoWYVachCkuHZNFwZhrTMeCmov2rIso Y+wL2TaJJLKr4r6HzUyIpso4R9yp4mB8LWFgScPHtJyNjhx/CCOcCnccZTua77jKRkiJy51l mKlJxJK2lJBLoOMxiet+myDcKWXXXbBDGn/KTcI6brO7TUgzMcBl4Pk9d3tkhSB8r+s/l+k3 6mKOJpKW10VRh/TlzAOFJLLnTvd2Ffhf/AKfTM1hskDhXAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37579845! jumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37580663! lockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37593676! objectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37594991! openIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37598958! paintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 37605373! processBrowserIcon ^ icons at: #'processBrowserIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self processBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37605651! processBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoTETo0n8IkZwAAAfBJREFUOMulkz1oFEEY hp/dmZ3dvcIUIhLRS2EMQtBIAgEhYGFzYBEkarQRUliJwUYRDy6FpLCyMYKVVoaTSIhYnEIq G0FEPUm0CYIH8c40CoJ3O38WMTEhJ0p84WW6Z57h+yYolYoPgHNsI977aUqlom+1mr7Zavq/ xTnnM52tt1QqerlGm7g7T7lS/aebRwuHuXCiBwAJEEWKcqWK6gAlY4gUZ44uQxAy+6YLnAc8 GIs2hnKlyvjpPgDCjWQVp0RpytmhOheHBxFKkiYJaS5FJSkil5AkCQDWmN8GaxEqRiQx/T17 CHMF+rsbqOgTjxcOILwDI8lCDYCxdqtBlChGBmvs29XBy6UGXflTiEiSJDFRohBxhIrVnw1O DtQIA4nIFeDbLEEwgpCCq8efs1DfjbMO6yxTbwOMbQO4PHqdgICPtRneL38lvxcO5XdypNMw 2DeO9wCeqfu32gNuz9xEKIGUEUIKPjfm6N0/ysPXNcz3O1hjscb+eoLdCnjyrpsoVahYEcUK IT9wsPMZvlkjDAKeLvXS/JEBi+0NYHXeFkfoHc45Lj3qwPkdaG3QVmNxqwYbAVpnjA0PcG/u 1Sbc4jzAi7abuPJlZbPBlfNDXBs7htYZWStDG43Wa+eGGk2jUV+HSWB6cvLG9n/j/+YncEMA U9mo9IEAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/14/2013 13:02'! protocolExtensionIcon ^ self protocolNoneIcon ! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/14/2013 13:02'! protocolNoneIcon ^ self blankIconOfWidth: 16! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/14/2013 13:02'! protocolPrivateIcon ^ self protocolNoneIcon ! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/14/2013 13:02'! protocolProtectedIcon ^ self protocolNoneIcon ! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'EstebanLorenzano 5/14/2013 13:02'! protocolPublicIcon ^ self protocolNoneIcon ! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37606913! publishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37615277! recentMessagesIcon "Private - Generated method" ^ icons at: #'recentMessagesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self recentMessagesIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37615585! recentMessagesIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMESURBVDjLpZNrSNNRGMb/ViR9 qw9FUSQFQX0IMshI9EMXJIIuZGFZGWZpqSHmxM25dNq8pk7LzTSdc1u6malo3vI6bHmZrmmp 0+mclrfNuTmvk3r6zw8rKfzSgQfec16e33vew3kJAMT/aN2msTDxjKzoaX1nOXXmczXd0lkR bmkRB0/W5ASXlr4KP7UhQCqJ5XTXUlfGVK2YnhiCyWSA0ajHt5FudLcUovq137w4NZDxT0BT IStNLefCoNNCpTXgbYMGnOKvSJd8gaBKja6BSWhUMlRmPwSPdT90HaBGEO8iL6dY9FMaSBXj eNeogXrMBL3JDJ1pHqpREwS1apQ0D6NfUQVhzI2F7Fh/Rxugjh9WOUgm+kZmIKkfhnUZjEYM fJ/AEhlbZf4JZFao0aLU4oMwBJkRNwU2QEP+44lxbQ+ENYPoJSsvrP6EeWEBGbk8TJGgueVl FNc0QDpgRFKBEj3tYmTT3TU2QD0/cMmg/4ZEkRJTixYYln9ghczQopgQvitDWCQTtbI2hIjd 8IDniFFNG3Lp1xZtgOosvyX99BCYPAVGzRYS8gNjxjk8e568ZpYquqFbBQJEp8Es94RH5mHk 0Nx/A4pTvIaHeqrAlijRPGjEONn02JwFQSJXBAmd8SjfCT65xxFRch2SjjRQii7DLXU3XJN2 2K0B8lhevCYxFTLlAOIlKujIBzNYyIqCkyjt4qC48+WasbCDDXYdBfxPiXgocsOJOPvVozF2 dkROXMCx/GiPxX55PkRVnUiQ9EOhmYUP2a/VnFIbhITqALAqfRFV7o3o937IlMbgdp4LDkUS K2t9ZDG9qW/ir6O3lYPGdjliea24lX0E4nY2RK3J4MsSkfsxnoT4gyuNhq/oPA4wiL69NGKb 7UdlRNxhZFGvmMu4nuiqZ+Eq9yAupO/DudRdcEnaDi+eMzjNUbgncIMDg1DuoRH2fw1TBsPb KS3UveDFk0taLuXiolXWmE25Kj4as2n2Lv8sHOiEnDRv/ec0biTyyrr99M3YSSO2/Hn+CweZ 2kRiltpxAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 18:34'! recoverLostChangesIcon ^ self blankIconOfWidth: 16. ! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 14:50'! referencesIcon ^ self smallWindowIcon! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37623009! scriptManagerIcon "Private - Generated method" ^ icons at: #'scriptManagerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self scriptManagerIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37623314! scriptManagerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ+SURBVBgZBcExbFRlAADg7//f u7teC3elQEoMgeDkYDQ6oMQQTYyGxMHZuDA6Ypw0cWI20cHJUdl0cJLIiomR6OACGhUCpqGW tlzbu/b97/3v9/tCKQVc/e7RRXz+7OrSpUXbW7S9tu8ddv0M+3iCjF1s42v8WAP0XffKi2eO Xfro9dMAYJ766SL1092jfDa17DfZgycHfvh7/hau1QB9161PhgE8epoNQlAHqprRIDo3iqoY DSpeOjv2zHRl7atfNj6LALltJys1Xc9+CmYtTxtmR8yO2D7kv4MMPr7x0KULK54/NThdA+S2 XTs+jOYN86MsxqBGVRErKkEV6BHynp//2fXbw9lGDZBTWp+OK7PDzqIpYiyqSMxBFakUVYVS 2dxrfHHrrz1crQG6lM6vTwZmR0UHhSoHsSBTKeoS9YU8yLrUXfj+w9d2IkBOzfkz05F5KkKk CkFERACEQil0TSOnJkMNV67fHNdVHI4GUcpZVFAUZAEExEibs4P5osMeROiadHoUiIEeCgFR EAoRBOMB2weNrkmbNz+9UiBCTs1yrVdHqhgIkRL0EOj7QGG5jrZ2D+XUbADEy9dunOpSun7x uXMe7xUPNrOd/WyeyKUIoRgOGS8xWWZ7b6FLaROgzim9iXd+vXvf7mHtoCnaXDRtkLpel3t9 KdamUx+8fcbj7YWc0hZAndv25XffeGH8yfuvAoBcaHOROhS+vLlhecD+wUJu222AOrft/cdP Zr65ddfqsbHVyZLVlZHpysjx5aHRMBrV0XuX141qtnb25bb9F6Duu+7b23funb195955nMRJ nMAJTJeGg8HS0sBkZWx1suz3Px79iZ8A/gd7ijssEaZF9QAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37626385! smallAuthoringToolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QsSDykasZ+olQAAAopJREFUOMutk01sFnUQ xn/z/+9uqVBepNXa1hDKRwwRSfCDeGiMRIPRS40JCeFgSuKBg8ajB8MFEhLOEj1gTOPBk+HI QcPBWA4i6s1GAyUaJQYp6Xbb3ffd3Znx8La14NU5zWGeZ+aZeUZ4KOZmmRAJF5BwzN2GAURk 0d0u435uaoY/N9fLQ+B3QD45cmIxCTEDWwKgu3Kbn68eb+ryLwPenZrh03VM2AQ+DVyafP5s jIlA+ys030NzjSz+wsieI+nE028H4FK/0SaCuVkmQC5OvnCGx/a8IXiD610gwz3BDEJMGNv3 evrkM6cU+LiPWZ9A5OzAtrEwvOs1tPcbbiXmKao9tK2ou8tIDEg6Tufx7TEdHHbg/Q2CEJLp 3c9+IPXqT2hboM0i2uS0TUHbLKNtgWlNU92i7d1ldN/RFOQEQAJgpjuzR4Zp6pvE2EWbb0HA vcGtwrRgqLOLMr9GXf5OTFKBvoRk7RjiVtF079BKxKzAdQVBcAzVAquXcK8wa3BrAA//ErjS rRZYWbyKWcHQyDTuPVSXsTanbZa4f/9vOtsjboq7bZw+WU9ispNqdQEJkXLpBt1yHlmziePU PaXuOW7KwVeMewvyoA+27niJJ/ZfwK2lbXNMu6hWqFaYdtf2oYzuPf+Ac9d3oCGOxyQbY/fh r6jy66jmVPl1quIGWx89yuj+abZ1DoFAb/UP3EXB+zPOzfI18Opzb92izK8gYQCRDAkZEtK1 PgEwsi2H+OHyXoAvp2Y4vvELc59nP2L14ZHJk4wfeI/BzgFiOgSANgVVPs+d+Y+4d/sLWo/f vXxKX/zPM33zGW/WKmcGB3c8hZVbsDr2FQ6oklV1Xd50bT88dpor/F/xD94hPsMoW0q7AAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37627865! smallBackIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37630681! smallCancelIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIhSURBVDjLlZPrThNRFIWJicmJ z6BWiYbIkYDEG0JbBiitDQgm0PuFXqSAtKXtpE2hNuoPTXwSnwtExd6w0pl2OtPlrphKLSXh x07OZM769qy19wwAGLhM1ddC184+d18QMzoq3lfsD3LZ7Y3XbE5DL6Atzuyilc5Ciyd7IHVf gNcDYTQ2tvDr5crn6uLSvX+Av2Lk36FFpSVENDe3OxDZu8apO5rROJDLo30+Nlvj5RnTlVNA Ks1aCVFr7b4BPn6Cls21AWgEQlz2+Dl1h7IdA+i97A/geP65WhbmrnZZ0GIJpr6OqZqYAd5/ gJpKox4Mg7pD2YoC2b0/54rJQuJZdm6Izcgma4TW1WZ0h+y8BfbyJMwBmSxkjw+VObNanp5h /adwGhaTXF4NWbLj9gEONyCmUZmd10pGgf1/vwcgOT3tUQE0DdicwIod2EmSbwsKE1P8QoDk cHPJ5YESjgBJkYQpIEZ2KEB51Y6y3ojvY+P8XEDN7uKS0w0ltA7QGCWHCxSWWpwyaCeLy0Bk A7UXyyg8fIzDoWHeBaDN4tQdSvAVdU1Aok+nsNTipIEVnkywo/FHatVkBoIhnFisOBoZxcGt Qd4B0GYJNZsDSiAEadUBCkstPtN3Avs2Msa+Dt9XfxoFSNYF/Bh9gP0bOqHLAm2WUF1YQskw rVFYPWkf3h1iXwbvqGfFPSGW9Eah8HSS9fuZDnS32f71m8KFY7xs/QZyu6TH2+2+FAAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37632019! smallCenteredIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB8SURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYwMORk/54C0w2FOcemgmSIMyH1P7LNCHiLBDcEZ/+a gqwXaFbOIxLc4P0f1e7fUPiZGDcw/AdD02z9/5r/Vf7L/Zf8L/Kf/z/3f/ZsiAwjxbEJAKUI VgAswNGVAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37632802! smallConfigurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37634273! smallCopyIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoaFAgvgxQ0mwAAAX9JREFUOMuVk0tLAlEY ht8jM2PagP0KzwjdFv2PCFq2iKB1F/BCtrBFkXbbREREG7E2Bf4EMbM2gWUwo7+gmjAFN83t tGl0Rkexb/Wdw3kf3vfjO+ToJDOv6/osRijBz71trsXvnHecYRjT8ejWKHqkD/YmAbgBdtNq NcEY6xMRQgAAodCEJ5RzHmq1Gl6rlYXGd2NmkIv9zG7K7nmev3UBJElCsVSY+kekRRdAUZRO jFarOVRsR3IBKKUolgqdsyzLnuJIJNI/A8YYZFl2DdL5cFC5AJRSlMrFoQ56oZwttiwGRRnN QTA4jna73QXoug7GGMJhivJTaagDSiWYpoHKS6UL0LQfBAJjsCw21O7l1QUeHu/dEQSer56d n7oWhzHL07YoilhZXoVlmVC/VOSus+A21qN5AHnHcmwbhuHrFTtLVVXkbrIA8OzzGpKm6fD7 /RAEAaIoghCCer0OgODj890WpxKx5BzpFR8ep7OmaS55fay/KgAoJGLJHQD4BUJZpgMViPfY AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37635379! smallCutIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QocFh0xaEFkXgAAArRJREFUOMuFk11Ik1EY x59z3nevr9vUfaXbbPgVaHjRVRB0YZRJV0XeZCIRaGmWWKhpgZAElaV9gYgQlBjoEPRKkCS6 DAK1MG0zNvJj7zZ1m+51X+92zttNzmFa5+78/w8//s/znIMg5TzrfXIOAN7zPO9tunm7dI/X z7LspTvNrbpUHadeGIYZu9XYrI1Go8t9/a87Uz0Fq7hw5nS55sWrnk8HAggh/E+HHdfV1lcQ Qo7t6E97HpeZc82m7ZCIKKUnDgRgjENLS7+AT0tDsVisdCcFy7JThYWF4HF7KKXU8a8EFTab DVZdK6iutr44kUic6nnePVBSUqJAgMHhdAAAWA8E3G299xljvLy4aAc+jUeSJB3X6/TXZAqw vrFGAWCiraXj4YEAAABKaeXCjwV5bc0DjTeaVPFEHIliEObm5iQA6Npb/xegraVjGmM8ZF+0 0WBwC2s0GhDcgizL8ru2lo7p/wL+pJianZnGTqcD0jkeMt8ORhBCb/arRXuFMaOxl1B6Pb65 qSblZTIz+REVGHNAIHQLITRQ6fG07wsYM5k6437/g6MmEyQoRd6tTdkX3h5mZVRVkJ3D8BxH JVkG5/o6KLKyrla63UPJFsbN5hrJ5+sqNhrpwsrKVDASlgJBEdfEaU2UIzqWwTQQEhOO1dUP R/R6EvP5BsfN5t2XOmowCPNFRWSEYe4DAMxYLCGrUpnY8UcYhnzJNQcBAIYxbv+Wn09GDQZh d4ixmF6SJFJFyKMJleqlgmV5hLE9OWmOm1Hz6arJjIy+y5R2gyxTIMSwC+A4Qa1UMl/z8mIm na5pXhC8iszMK8mPpNU2fHe5Ng4fOtQwa7HECKUYMA4AADAAANVarc/l95/0SxIbAJA5tfrs RUFI7twqiu7q7GyPNxDI8YfDGl8k4lOoVOetouj+DaDzOgfcNME8AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37636907! smallDebugIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKYSURBVDjLnZPJT1NRFMb5G1wD HV5boNiqdHrvFYolCAtsGSSWKpMFKhYqlDI6oAEKaVJwCIgSphaKtLYWCgSNBgRjMNHoxsSF S3cmJmA0NMTw+R6JKKZl4eJL7sm953fOd3JPHIC4WMpcppG5SGnZc8ZjVVF6QLn975sDgfaZ mvg71oRJZIRUYcuAnq/2KWroGfm3QwEn2YpLVPPvOD2oiqj9yq/mGznegl56mx6T7ZbY1M6Y AM0CuZkxT0b2Wg6QW/SsApRXDsotR+d6E9Y/h9DuqoCuJq0lKoDxqU1/pITGR27mBU4h+GEc Tz5OY+ClA5JbyahYzof/9TBO9B/FcWcqpA4xU3We3GJ87ntnfO5meinMvruNnqcmXA2XoDVc Cc0wCYkzBaZpA7ILRJ/2O2B87jA+QT9UeDRe8svZYAG8b/txc6kc9mA+yqayYPQXwvdmBEOr A5B2p0BtFIYOWKCm5RukWwZyXIbA+0F0LpaiKaBHmVsLw4we99ccsM8a8GClF5JOMcQdou8p rULrgRmQo7KI0VcE13MrGv06lE5kodhzGvdWu2GdKkTVWC4DcELcJkKyXbCb1EhAVM//M0DV UNqP2qAJd1baUDaZjTMTeXAttsPi0cM0mgvHvA0NkxYk2QRIrieOsDmEmXttH0DfVfSluSTo WmpD8bgOroUOWNw6VI7koGfOBuq6EqLLTNU6ojrmP5D1HVsjmrkYezGIrlA9LjKgnrlGXJlp gbCOD0EtD0QNN8I3cZqjAlhJr4rXpB1iNLhrYffUQWoT7yUKzbxqJlHLq0jc5JYmgHMunogK YJVqF7mTrPyfgktMRTMX/CrOq1gLF3fYNrLiX+Bs8MoTwT2fQPwXgBXHGL+TaIjfinb3C7cs cRMIcYL6AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37638107! smallDebugItIcon "Private - Generated method" ^ icons at: #'smallDebugItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDebugItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37638409! smallDebugItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALRSURBVDjLfVNbSJNhGP6li24C 6UIiDHWah83UdJv7d7R5oiiPWGp5yIUHNNF0acNjrmWe5gx1Ujmd+pubW8upaSWZRilZdhN0 0WVBEAgalSK5p18hczm7eOF7eb/neZ/n/d6PAEDsFWETAoSN8aWbZ/EDXqLIFLr67x27RPpU 6LUzl1hJiC08a7461lNo4GYLBjnf/ktwYrPjOF/+JxeZeWtCY+hSTk00FX9TsCroZttSrggb 9iSQjJLL4hFybUuyiVwRDHHBpzjg6zmoni3B7CcLrjVnIiY75KpDAtqnVDQcComBXD5tioL5 vQ6THwagfqFCQKsfMifiYJzXIrjlGI43+CNQxaK7jpArtM9t77RPWxjFx9CiBjcey1BhTUGZ 9SIkWhIBDUzIBpIRGe/zcVsB7XOd9gnBfW6fhCK/njPHg3rTgtrxDJSa45DeH45UYwIMC3fQ Ma1GoJIJYaq3xc4Cf4AzR+rZIHVsmN61o3osDSWmWKTrpUgejEXXjAoF/SSye4IRVMMCS+Hz nVnmXWg3A/Ieey3VkIjmqUIUG2OQ1hOOpL4z6JxWorA/AZd6QnB99DySu/zAlB+1+RZ7weey 598B8jpCfuSZZWh7Vo703kgUUWIaSCKXVpbVHYRKy1kYF9ogH45DVOuhDXHTwQNeOR6V2wSC 29z6kOYA1I2XI0kXQ0vm4eFiJ8xv27eAQwsaaKbk0M81Io+KBrd+/0aA0snZ7hnZ9UEzXnIP dD9vpyUHb4HVT4rQMFkA1aMc1I5m0Q1y0TWrRFqvCN41xK9d+x9YwZoJVLBw4S4ThtcaUPMt 0L9qhO7lLZokH9rZOuRQJ8GoIpZcFcRxh5/Iv9RHn6Bl4FSbKyJaXSBsckZGjwCdM7WQ9UfD vYr4clhBsHZtoqPwzHKfY2S4wV/p9DNTHwH3CuIzDfZ1uMp7hXvqkXVGpZPNrWIfXBQEY2ft N8xTb5GsXWfEAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37639977! smallDeleteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QQWDyovwTM/8wAAAhxJREFUOMulks9LlGEQ xz/P+9syNUWyXBQzAunQrYQI+wPqYiLh2im6dokILwndqpvdskMXCUPtFmFE5yQNMrNwxS3L FQQxZd3d932eeTqYW2EESwPDwDDz4TtfBv4zFEDv5bZuEWe8slW5OTaydNfrSbf3dnScGe3v G6hofXxi6A5MznjAaH/fAMPDj1hZ/oLjuLiu88/ade4sF7uv8WZ68oWzS5x9N0cQBARBSBju ZkQURURR1c8aEYYhuZVcWYkHsLDwlqH79yo6YWb65Y6JPen2B8DVrq5T5FYziLWIWIy2aG0x WohjIUkMOrGIgDYGYwzW2mEF0JNut9dvpFnfmN3xVyybGyWUqsZza1nfWGZrs8B2XlMsGQ7W HWXq9RRjI4vK+5s8a6GhPkVL8xUA8vkPzH16Tn7fFoWCRbRbni2b6KhfzSONF3DciEz2Idvb 8ziOiwV8r4ooCmlsqN0LULi4TkAY1BGFLaSa0iS6yOLnSTLZVzQ1nkCsYIwhiMK9gMA/gO/X oJSDBXJr4ygUranzKFyaD3ci1hKXNO5vasseKOVgrcFay+raBPU1nQTeMar3H6Lj+CXez4+h dYJYQyJmL0CLwVqDiBDH38l+e0YSG5Ty+bjwlLhkEKMRMYjWfwBCgGxmPWltO+kba5FE0CJo LRQLq6SaTmOMYIwljg3Zpa8J4AOBB8RxSd96/GTkdgWP6BcLySCgfwCHx/uHvBXx4AAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37641303! smallDoItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIMSURBVDjLpVNLaxNRFP6STmaK dFqrgYKWlGLSgoiKCwsKVnFRtBsVUSTNyj/gxv4Bl678AyKCoCulgmtd+W7romgzKT4QMW1G +5hMpnPnnuuZm6ZNawoVBw7n3pn5vvP4zkkopfA/j9F8cafO3FekCjGpIgKIvayftTXOkr71 jkz2/UXA4HxXfz72gIx/lBsWSfiVtwiWHK8B3kRQeX/6lmnnkuDAwn0MJSKQEFChQCp9CcHi xxgsGWw3B01uRKfx9t1HIP1POpoSdUulLyD0vqO26IAkDW7tgSZYeHPqcmpXxkTChKzOaAKS Edo6jnEWVY5ehFxdHs2cn55rScDR73H6DKyyRWs1R0haGdR+z8YZ3MyMTj9rpUKi/PLkUJuZ fmX3nkNYmQBxzYprpyCA2XMRrvNAcdfDhgKkm6ttKTdW6jH4w4RpD/ALAaNzhH2kSwALoSJC d9+VhIqEVVeD4C1MclaOT0Ke0Cowq+X9eLHapLH23f1XreDzI27LfqT2HIfvzsRAyLB2N1co XV8vodUkfn16+HnnvrPDhrmXsxBY+fmOwcVlJh/IFebK207iuqSShg0rjer8B9TcWY7q38nm nRstm7g1gy9PDk2129mjinjy3OIvJjvI4PJ2u7CJgMEdUMmVuA9ShLez14rj/7RMDHzNAzTP /gCDvR2to968NSs9HBxqvu/E/gBCSoxk53STJQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37642602! smallErrorIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKCTIOk1O0sAAAAhpJREFUOMudk71Pk1EU xn/3bQvlo76gxBpNoGibArYLxJREh466MmnSgRH+IjsydGYjspBAWEQHMJIWmmhj+LAkpC1N Wyj2PcfhfUsQiRpPcnOTm/P8nuQ59xhuVA5SwDyQBsa95xKwDixlYOt6v7khfjscCi1MJpME w2F8AwOoKp2zM87LZYqFAtVmM5uBxd8AOXg3nUy+HJmZ4XJ7G+f0FBwHVUUMWEN38U9NUt3d 5VOxuJqBVwC+rvN0Mvn6XixGe3MTbTRABFVBRUEEabboHHyjPxbDtqzoi2r1wTKsmBykhkOh 98/m5rhYW0OdDqqKKqh6YgXFhakxBFMpPm9sUGu1Zi1gfjKR4HJnB3UcEFABFXEP6oEUVMFx uMjneTwWAZj3A+lg+D4/PnxERRkrf+dPtW/fQao1Ag8fAaT9wLjVP4iKG9jfSkRR7WB6AgDj FnCV9r8A8PpUBQA/UOrUzyYUg6rDl5ERt0HEvVE3PDdVRN0gtdkCKFnA+vnJCcYeuiL/Iu46 iidWwRocpF2rAaxbwNL+3h6BeNwly3WRNzrtTkNQY/BHIpQODwGWrAxs1VqtbKWQp2fqqQu5 5op3qygYQ080RuPggHq7nc3Alg9gGVaeVyqzts8XHUgkcBoN5KJ99RMVMHaI3vgEjXKZwvHx agbe3LpMdl/fwpPRUQK2jentRUVwmk069Tpfj466zou3buP/rPNPwkdmHrlYdncAAAAASUVO RK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37645369! smallExportIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37646516! smallFindIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIlSURBVDjLY/j//z8DJZiB6gY0 9895tGTDnv+tE+f+B/EnL1gHZofGpt4iyoCK5r5H63YcBmkAG5BRVPO/b/aK/0CDn+A1ICm7 5H/X9CX/azun/m+bNP+/iaUd2AAHN5//WSV1/wuqWsFiVvauyxWUVHkEhUWZwAYsWLOTo6i2 3aOpbzbYqYXVbf89/MP+u3gF/M8pa/gfm5b3PyKn6X/txGX/S1qmgOW4uXmq2NjZGcEGTJi7 mmXKwvUPF63b9T+3vAmMqyeu+j9l+a7/fUu2/2qcvuF/be/8/9G5zf/DkwvBLmRmYXnAwMDA DDYA6FxWkM3TFm/8n11a/x/k55Tc8v/RyTn/1bT0wDaCXAITj0svAOpi+AfErGAD0goqWf1C Y35a2Dr99wqM+G9sYftfW9/4v6yC8lMRMXEDSRm5rWISUv+B/v4vKi75n5eP/z8jI+M7oAFM 8ED0CYo6DAq4XYfP/F+15cD/7hnLQAG2AiSnqqmzorJlwv+1Ow6B5UAxwscveBglFtx8gv/k VzSDDQC66H98RuF/PWPzqyA5oM1XQTEAMiA1v+J/emH1fw5Orj8oBji6+/6HGQBTpKGt/1NR RZ1RQlr2HSjgYAaAwoKVle0/igHWjm7geAYlIJACUGDqGpn9B/qfX0lV4wrIAFAsweSAYYBq ACiBGJhYggMP6Of/QJv/S8sq/AcGohTQv7c5ubj/A+MdFH2gGABj2mUmUjEAnjJojQ5aPHUA AAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37649106! smallForwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37651771! smallHelpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37653306! smallHierarchyBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 37654131! smallHomeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37655387! smallInfoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37656892! smallInspectItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYdERIIyN9seAAAAzRJREFUOMulk1toVHcQ xmf+57LnnM3e4m42qRs0iBqLlzYbW7NUraQ+GHxQNBQUopJCqautDzVNNVRaNETBEqRUaGsV pIUmL32qtMYQL0isaECjwVvEZJPN3rebze6ePTnz9yUbWvGtHwwzzMOPbxg+hFfU1n74N72Q 34qIKnFCzvmMzWa/2Hm86xN4jcTS8EX74Q25fP6v5p3NssNRjkXD5CYHkAW0TmdSH2cy03vt dltj5/Gum/8GIADAsa871qbT6VvB/Z9h393J4khSLCiapprEpVw2m/G/AUrj2z65+8xpqvBU 1HccPTb0HweJRHLg0wOH8PfbUWNKt0u7NvmyCxdo/5hErqHn6cSNkdii6b/DxYPBQ3L3mW+v AYCtBBA6vjrS5q+r3zyaFM3RGU36qHFJpMqloiIziQhk1SKmcvrsw+dJqrFQzvC6FFy9ZlX2 6sC1WwAALJGIn/TX+aXBF4YcWO42BAZu3TCdeX1WM4kE0zTdkZTuQcDwcATkd9a+q0Sjke75 EyRJ4gQMrXYHKLJ4L5M3mGJyXRSwSMSX9twInTSIyoCDK22In6uqBpIk8XkAEc1aJFGSGOdP JqanGNqYqwxMvWiGx2K5kE4UFzgSMK7MGoap67pARMY8wOv13pmYmKh3yDI+Ho+Xj8dzNzmD KCKLIHG3ADADyK3JWHR97aJyTCYTemVl1WAJwERR/LF/4Ep4q98rqFY1YHKyAUcGnIscyEEI cqFQqHB5PO9vecvDfr5wLpNOp/rnv3Clr39oxZu1bVaLqK9cVqONxov1sXDIo6rqM+JUGxl/ sd3ldu/esUqEwet/clXRMBaLNdQsWXzh4YORrAAAsGPn9svDD+7v57nU1K6mgN0AsXKmyD/g KKypW1pRtc3vhnNnT1NgXYBNTk1KRKbEGGtpaFjXhyUrXadOrB4bG//D4/YUnM5y2V/nd1ZX V9t6ensePXn6SNXzxjdOl/2npi1NcG/4Pmx4byP98utFhq+Go+vUiX0A0BwKhTYCgObz+S4B QG9729HzwWCwExn/ck/LXrBay+D7s98BviZgbK6wlJW5zgEAWltbW1TN8sPc7kP4v3oJO6lm k2hPogUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37659470! smallJumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37660322! smallJustifiedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/IfpheiEwTNEm5D6H9lmBLxFtAmR/3+h6YWY95xo E7z/o+uHwM9Em2D7/yeSzSAICdc/xJhAMLIA+V1VH3Z4v2kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37661058! smallLanguageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG/SURBVDjLjZK9T8JQFMVZTUyc 3IyJg4mDi87+GyYu6qB/gcZdFxkkJM66qJMGSNRBxDzigJMRQ1jQ4EcQ+SgVKB+FtuL13EdJ xNDq8Ev7Xu85797T51nwhqeAH5w6cAxWwDgReX7jwYfdaCIraroptB7NLlVQrOoiGEsL1G06 GZyxuILicsMUH3VTlOqGKNUMUdTacj+j1Nng0NGAT2WxYosK1bbIVVoiW27J9V8G57WWKVSc zMV5iK+Tudv1vVh5yXdlLQN+os4AFZss2Ob82CCgQmhYHSnmkzf2b6rIhTAaaT2aXZALIRdC LgRtkA1WfYG4iKcVYX52JIs7EYvFmJ8wGiEXQi6EXAhdyn2MxQaPcg68zIETTvzyLsPzWnwq ixVbhFwI3RFykes+A9vkIBKX4jCoIxdCLrI4/0OcUXXK4/1dbbDBS088xGGCCzAJCsiF2lan T8xdKNhHXvRarLFBqmcwCrbAhL32+kP3lHguETKRsNlbqUFPeY2OoikW62DNM+jf2ibzQNN0 g5ALC75AGiT59oIReQ+cDGyTB+TC4jaYGXiRXMTD3AFogVmnOjeDMRAC025duo7wH74BwZ8J lHrTPLcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37662267! smallLeftFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/Ifphej8xbCLEaaAOBNS/yPbjIC3iHZD5P9faHqv k+gGbzQTYD76TLQbbP//hOqE6f5AvBsIRhYAysRMHy5Vf6kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37663012! smallLoadProjectIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37664319! smallLockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37665765! smallNewIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weR goI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT 07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEs NBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKB gIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJx mAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt 7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxh B1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvr kn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37666902! smallObjectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37668231! smallOkIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37669390! smallOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37670554! smallPaintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37671736! smallPasteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH+SURBVDjLdZI7aFRREIa/k3u5 cclGwiXEF9GInSCIoF0qa1/BynJdyBYhtaRJSrsFK4XtBCGFQRALm4BYKQg2ti5JQEh2hay6 6ObMmbG49+4jSwYOc4rzfzP/nHFmBsCL6uWrwDfGo7PcaM5wQrjnjxduABvAnXJ6hkdr63Tb nwGYmr3Fy/Un/O3+AngFbC03mq+HATGwdfv+g4ul8jT++1fMjNDrAmBmLF6bZ+LcFczs4fs3 b+8CY4BLpfJpjn4fICo0N+tgBhht+4Ka4ff3ODV7ITFInHPOCt85ADRgIkzMnEWDYKb8aHf5 2fmHAbp/iNsTdlo9gJvOuQNg18w0BjBVVAT1PdT3wIxW65B7a++I4qTf7hKwIfKp0Wg8W1lZ qTvndnOAoMFjprn37ERxgvceEUFE8N6TpimVSmU1jmNqtVp9IgMEVDwmHg0BDYppBnPOEUUR URThnAMgSRKq1eoqMBcXAMRjQTFRVA2VDBBFUT9PTk7S6XQIIZCm6WCIpllVFUUlYGpYCCMd FHfnHCIy8o3ZEH3ARDEJqIKKDbYthxQWitwHZNUzgOYWig6GIcdBgz0IhnrNZ1BY0PG9z4WF pQLw0R8dLU6dn8+EqphCybf6j4YWb6R6AXj6YXt7GrjeFwA7rR5LJ4gAQgh/gOCG6cfaXQDm ODkCcPAfs2Qwc59hLO4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37673015! smallPrintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsRAAALEQF/ZF+RAAAAB3RJTUUH1QgSDzULeviv6gAAAW5JREFUOMulk81OIlEQ hb9bsOAheuvMihAiszHyGOP4MNr+PIGa0WcQeAJ6x5olO3GnJiTNX2gSu2nuLVcgPfxN9CaV m7pJnTpV51z45jGrSb1RuwL8/6i7Pvn952Lttd6oaZIkOyOOY603arqoyW+Cb7fbW1tXKpVM vhGgWCx+zmhM5lbV3QDOOTqdDgAisgZULpf3M/A8DxHBGLMWexmoKq1Wa9lRRKhWq7tlPPfP rgC/UCjw4+AnzrkM/dXxjDF0n5+I4xjgesHAv/AvsdaSpuleE0wmx4gI9w9/fVldUrfbJUkS giBAVQnDkNFoxGAwYDgc0u/36fV6NJtN3l5fsjuIooj4/Z3xeEypVCIMQwDSNF1SB7DWMuiH xMksCyAiTKKIIGgynU4BmM/niDE4Z5lbi0iOfC7H0XF1swrWWg4rv/4xjOKcYq1FRJbyLpa8 BJjNZniet9VxCxVEBFXFOZcBeLy9uzn9wm9+/AC6aMvlGUG8HQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37673821! smallPrintItIcon "Private - Generated method" ^ icons at: #'smallPrintItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintItIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37674123! smallPrintItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVDjLpVLdS9NhFH724WbT WcpKiTUxWyJKRTdGURaSUt5URDcW3XYZ9AER1UXhTQT9CREE3URi1EUkaGhq5ZSgDzc1tWma Gzrd5m/v+55zurBy6u468MD54Dzn0yYi+B9xZhvxwWOPheWCiECYARYIrejCvKoTT/qbQuUb CISlZXNFC4QFIIYQrcIQ0rEPsBKR5N/kNQSxgaN3Xd6gHQzo+HOINmCtIUojz3cG1sJXWIkI +ZtC3uyi9tXqfD1/y15Q+hvEEESvIM93CioZxfJCBExctX4HdgCYe3/kbJ4n4ILNBUp9hhgC k4GjcD9Yp2AthEGZxebAyaHRnATC/MjlDUJMCmLMn5kN7O4AlueHoZLRa4HmoVe5rmCb7T1U 53D5+rz+E1CxdrDSEK3BlgVX6WnEI09EiNXDxQJ3yihc8aQzDmIIcSJ4fqTUKSTtLu9uCGk4 i5ogZCCGAAHEMIrLz9nEaHfm00v4fdW4MxVy3y7gtEPTQQBwCrM7Od2VyboxhBkP5ovcwgqK DZQhbC8JorqsDktWCpejffmWUbNvAdhyfeLEiz2d9xOe+uM1F0HCICYwBDOJKIoLtqF37A0G JrvYMqrEmWsxQlxvGQUSxkQ8As0GhjU0aSxmlrBvx2Ekddre/707voFgvK12MN+7C1YsDEMG pUUBGCaQMH4mJlFSWIbQjx70jHbPKYPGNSOMt9UWQuxLQoyrsTSWlRLFCpZRqPTV2A7sbMTH yXfoCL+eUQYN063yxbmu9X4m80uIK59dGktmx2rv2VM2+yZPZ7hjSjEapltleCVJ5B9GnlbV ZdvZqLiFVOCmQ7beQEW2/zeRQcHUmJPKOgAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 12:11'! smallProfileIcon ^ self smallDebugIcon! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37675572! smallPublishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37676730! smallPushpinIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEZSURBVCjPY/jPgB9iEVoqPefl lFPdNk2GWBUsVpz9ctL1rkcNW/v+59VhKFgkPfP+xI0dF+uC/jPkWCR/Q1MwX2TGvf7Nretr /UG8BO2I5ygK5olP/dCzpWV+dVAhd+bB+JawrT7ICubIT3nbvaFpVkVqgVDa0diO4CneN91E 4Qpmq0560jW/YXp5XB5nyq2YrqCFno9cJeG+mKk48UHHjLruMu8czuSbkfUBizxeucrDw2GG ev/71uW1jMVrsq4nPIto8F/g8caFDymgetxbHlVLgDjxnWExPjPdb7sIoYRkk17FywJRECdY 1Xux201nMbSgLufO25qyJUY1yNrzsus9JxkscZHMG+kVcN7jqWueowARkUWiAgBEUvolGfpI TwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37677713! smallQuestionIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37679215! smallQuitIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z713 7p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/z nJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoG DA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwd EaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoF lV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfF Yy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29 X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6o oly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+ lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necA Ii3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8 yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37680587! smallRedoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCicVP7jtIQAAAdxJREFUOMudk01rE1EY hZ87X02MpEJMY4MfbTbVdtPSKn5UYw1CqThuRCuCuBpwrTvBv+B+Vt11KUQKhYrFUrpqpKgb wU11ISliTCZNmslkxs0YJ51Bgmf5Xp7Duee+F/qQbmqebmrTUWcS/WtbN7XCfxs8fmAAvNFN bS44FxFxB4A8sAhMAZMBA5aWTYAbRcNeDxnopnYBeD4ntFS2cHVYTY3mEAJVjmHZPyl9W+HK 6L0eExGAF4AXj/L58/JQTqrZZbzap550H5s1gK7JuT17VvjwBPDy4bXrN2OZM1iVdSxPI+7a AAw6DTbbzt/ihMSlkbssLZso/uzpnbPjk7F0lvqvdyRaDRI0GG5VeEUCR+rtOj14snsNBWBA 1WaPj02n49Z7svtVdqQEmiKoHYkz7kMXFTDrFpljp9lc/dDtQAHouG5GyIJUw2KrVPfWWpXQ 60xcPhGCu3vgdJzk0cZXtnd2WWu1LeAZMFU0bFE0bAHwNjkUgoFuB+w3q+5KXUjA/aJhrx5O 4MMzRcMuRW6iqsgHgBcF+wrBwQQbzb2yWpC9GKY2f9jkzzWiJAOM3ZbdLwft+q2Z3I/UbvmU 0NWtz687dj9/JLiJI8ACUAU2niTd7wK8+UWn8y+D39dLugVezzXeAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37681839! smallRemoteOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37683162! smallRightFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSZAQNL/31CdMHiGaBNS/yPbjIC3SHSD+3+EXoh5z4k2 wfs/qt2/ofAziW7Q+v8brhsSrn+IMYFgZAEAE0hMH/VkcbsAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37683893! smallSaveAsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTgPGbLEcAAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAACV0lEQVQ4y52ST0iTYRzHP+/b/DNz8s7h a1q2iZpIHSI0tgQND2mQROEhhMQiqFiNeepgYR4MIQPxIEWHpCCEFQVF3SKhg2Z5KLKDmmhZ huRwbqXb3vfXYbYSLcjP6XmeL8+H7/PjUc51XLg4Fc5X5+ajC0ABUAfsTFFl2Zb+/VtWWrSv v/NKK39BqfH3NLl2lLmcufrk7sIcv9Nu3ROJG4x+WeT10IA59nGWUvub7b3td2fWFXjbOntj obmzcVGZNTR+pOWwyZJCY+0+ivKz6b7/AuPTCK7U+fXut+Nt8cn05wkREZmYGpWh0Qnx3Xgi 7tNXJTA8LT1P30rDpZvybnJG/iQcDovP7xVLmsVga66LYDCIlpmLqixglSgAI+Oz6JkWvs4v 8n7iA1uyrKAACKmpqQBY4jEQUzBMk/rWW2s6Dk0GicUNugKDdAUGAXjccQIkkasAppiYhknP GQ8AzceO4HGXs7QUIc+mUumuoKmhHoDjNcWYhomI/BaICHa7Rn6Oi2unyunrf0CpqwAVBRUF d5mT2/ce0VhdyOHKCjI2Z6wWAITDYXRdx5lXkpR4dhVR4tpG952HNFYXcrTKja7rRKPR5BMt AKZpEolEANB1HV3X6T1vpeV6gOWYwcnaMpoPHUBVVUKhEJFIBJvNlvgHPr9XKsr3IqwM+D8Y fvUy0cDjrgSRFYOSmLAiIMrKNqEvKS5mfHwMQUH5U+BwOHg+8CwZCLKmzf6qGgCyHQ4QJZlb ADRNIz3d+s+6ml0DwK7ZV51bfi3qag+yERSf33sZaGNjtP8Elb70qz97tp0AAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37685503! smallSaveIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTcPnirYvwAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAAChElEQVQ4y52STUhUYRSGn7nd8ebP5Ezg tTHNkbJRbFFRNCYUuMgWRRQuQigsgoqpwVYtKspFEVQQBlK0KAoisCgoalvQIolEiqZFmVRq hqTo3JvO/flOC2Fssja9m/PB4Tyc9z1f4MjZ4yc/WxXa2LgzCVQBW4GGoCbZ0MKfPxYZzs27 58+d4B8KNHd07Y2trI9Vl5uDq2vKOqojhWttzyf9LcPr3ufqw9dR4pE3y7o77wz/FZA8fb7b nRo77InGqB9m2ihjgR6krWUjyysWc/n+C/yhPmIF43+b7yR5LCVfRgZERGTgc1p60wOSuvZE EgcvSM+rL9L19K20nrou7waH5XdZliWpjqTohu6ztDzGxMQE4ZJytMAkheIA0PdxFLNE5/t4 hvcDn1iyqBACAEJBQQEAuueCKMFXiu0nbszbsXdwAtfzudjzkos9LwF4fHYfyGxfA1CiUL6i 61AjAO27d9KYWMfMjE00pNGUWM/e1u0A7GlegfIVIjIHEBEikTAVZTEuHVjHzbsPiMeq0Aig ESBRX82te49o21zDjqb1FBUX5QMALMvCNE2qo7U5SOOq5dTGKrl8+yFtm2vYtSmBaZo4jpOz qAMopbBtGwDTNDFNk+6jhRy72kPW9dnfUk/7ti1omsbU1BS2bRMKheYAhmFQWVmZF96ahg08 u7IBANu2cRyH6enpeSHrAP39/bium9fwPA9d13PvPxWJRPIz8DyPdDrNyMgImUwGEUFEMAyD oaEhQqFQrlqWhWVZ+VdQSlFcXEQwGMx9EgDXdRE1CxM1ez7l+/kWwuEwpaWlRKNRALLZLEAu 7XhdHKUU8bo6lFIsiUZzlgOpjuQZ4DT/p85fkzszTNUiYm0AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37687191! smallScreenshotIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIrSURBVDjLxVPLjhJBFD3V3dCY SZjwDipDRjCOCcTgLGalJmxYufAD0E/QHV9g3LjSsGDhik/QjTEaTdgaEsQQINEFJjwEecmr 6Yf3lkJmPwsruXWrq+85dc+9VcJxHFxkKLjg0HgqlUpP1+t1drvdXrIsS2w2G9dqtXKzt21b 6Lpu+P3+N4VC4QnH5/P5U3Lfy+XyL1EsFg9VVZ1kMhmwHAJIa1Tf4eH96zC+vcKLDyfwRm6i 1Wo/Go/HLwnsJWPtZ2oikainUil/JBJBp9NBr9fDcDjE5aMTfPz8E835bdw6vQMhBLrd7gNF UXSPxwNN08RsNrur0alJr9eLer2OcDiMdDoNkgKSglAohEajgUqlgkAggGw2i36/j8lkImOa zeYNjQMHgwGCwSC2B0d4/n6FhSlgU366cOHe1Wvwz+eUfgucJQPb7Tai0aiUqvC0WCwQi8Xw +ouBjaPA4yJzK7AUFz79OJDA0WgkwYZhgAq8z1JjAqq2tN+Wm4AqNGouXw9Bk+G4QR2SxmCO 4zV7mQGz7Fh5OI79F0wkCpmqCCyXSxlzPoM9wS4DqijcjgHTJv22Q+k5ksiNFabTqQSapilJ OJ79noAZa7UaMoc9qOYSG9oziUSxlriy+YpqtbrXvSPZEWjMxidwewLjMc6Oj2VxOGBO1Wdi vhvJZFLusf54PC5lMYHI5XKPqa/P6EP3+XyCry4T8E/2BHDoEIdv6fmH92/9Vvz31/gHd9iU VZFEDKoAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37691072! smallSystemBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 37692854! smallUndoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCg4AFiOWIQAAAhdJREFUOMuVk09okmEc x7/P877P1OX+6MYa0ojWwfIQFIRBgxUEQrBDeAiCYkRQXTuMPHgox4wdIrp0qVhBEDTpUCwW wVKMWnaKlLRoDXITXL4654bv6/M8HcKlm5Z9b88Xvp/neX7P9wGaKDoFiRakbjXm7qGXKcii RdHahd/HbExB1u0NtZr/cwK/j9k8TiPn9oaAwtXNa+ikJ8MFzYC2xcPJ7MXxCb1UCyBbw0Zu HCrVAIsXkBVwLgGI8pvZx18ZBXmVKHgCQeNHFaD4fazd4zRW3d4QjJ/XQShFuQyAL0JfT0Fb iUHKkjroOtFntii9NuRPD+yrvI5ExTIAKBMXhF4NU6r8pqoMUkoIwSGEgOBrKK+nYLKYyI6u XZ2dYu3Q7v36o0hUGPRlktnnQ16wjpMAAM51LHz7iMXvcaTTX+oGVtTisPe7YG5nB4ad3eHt MxgZw0LiJva4rkDwYl1YFO8ik2Uo6xw9jkv49Ha6dPxs2qoCQCBoaPAxOzCZc4+MAQBiM3fq 38tC4DpyGYXMA5jMOgiRal0PAkFDm00y+/yzyc3M0CjI0CgIgIOlvDyVmLv9vm/gHLjoAJHS hL/VuFGVw/fheDdN5eryDRF5aJPbmli7cyN/+DyWFGGVG8U4hGrPNwU0g0SnMNjtOCy07BIA 3Gr4mf6ho1079858jj2pHDujXftvgGzrt6Y+PH9Bde1p1fsFBRbiJSu+JBQAAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37694176! smallUpdateIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMiSURBVDiNbVJNbFRlFD33e++V +a0zbQdbqLYKhhKmoaIzjX/RmEY3xGBYqLxEjJCB8LNhBxsMTQwRdGGi4AOjMUwlmDQBN/wE IZLUwqtx0dCS1NLGAUY7tB3ozLTz3vu+66LzkllwkpvcxT0nJ+dcYmb4SGWyzzTo2hEQ3vSk atWEmCfCuOPKEwAu2Jbp1t0eBHCCfIF0JrtF08RAT9cqfV1ns9HWFAGYUShWMDJ2v3xn+qEn Fe+2LfNselc2w4zvAMSImZHKZNcbuhjZ2tcdiseC0InQHA0gHNARDRkIGgIzxUUczw5XCsWK HQ019D4uVw1mNBEz49U9Z0/1rGv7NBgwxK3RHKquB0PX5JrVscW+9PPh3vWtpAmCEIRfrk2o t15sFwe+vuo4rmzRAYCZP7wzXRCup1gxLzLjM8eVZ8anZ5MT9+aPXu9o7tq3dVMoEQvh43e7 RC0GAqAEAEipwlXH85IvPPuDlOoRgEHbMvO2ZV7549uPXhqdLOzdfewS7j8sYXqmDKkYAAMA CyyvqumpSH9jJPBVZ/vKbgBTdWnruiZ2bnsn6XY+HUWicQU0Qb4D1mt38V8/37yAJ+O0J9Vr F4cnq1ftqSXfvOOqAAD2W6gCMGoErpvfAOwE4D5BWLct854v4J0/+r4GEJgZF+1/1Knzf+Wk VD22ZRbrWYezY6tK5aWO30fGbwCI6QBABBAR7v5XhiEYJwf/JABf1JNTmWyYiO72blx7Jj8z lwKgAagKABBEBAAdiRBWt4Tx5f63qa0lcuyVPT/fSmWy6ZrG9hWGrufyswfyheLrmkaubZmu WHZAeFxxcWFoij2P0b4yisM73gh90Jd8ubU5ci29a8A1dPGNVDI+92gBTY1B0oQYBAD/kaj/ x6Glidzc5KXhyc7Mlk3hRCyI7rUJeq49HiqWXfw7W4LjeBQJGjh3ebTiSXUEAJYfSTFN5OZO 3zy5LfmgsPBJ//c35o8P3CwN384jP1tG1ZUQRCjMl+S5y6OLUqmMbZljAOC38BOA7bZlci0w A8B7DYa2VzFvkFLFDV2bIcJQ1ZGHbMv82w/3fy5VdmoTZczGAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37696883! smallWarningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37698143! smallWindowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 37727386! testRunnerIcon "Private - Generated method" ^ icons at: #'testRunnerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRunnerIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37727682! testRunnerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37731145! toolsIcon "Private - Generated method" ^ icons at: #'toolsIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self toolsIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 37731426! toolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QkaDBM5i2PCSAAAAfBJREFUOMulkktoE2EU hb+Z+EyKTRQKgkqwzMaFtt1FrC40FGJm60JwIVSkqLUtElICFQNDQqBrQXRlQIriwomN0GJX gtI2iUkXFYJVadOXhiBERDozbmaGMR3rwrP7ueece++5P/wnBOcjnVGigArI8Vgi9xdNNJ1R bI7YUlT7r/YDqKaZq/j6tQHNbLQd6YxiNBp1I51RDPdaw6pFAcR0RolaZKur19vmZhwFePDw PvFYQgZyACKgDt4cMp4+mzAA9fatETbX15A6Jer1r/das4ndGRUsMYBgFW8MDBqatiXoum7o ukZhfk4ovC8CyDsFK7R0sBHpu0i5UmG59gUgGY8l7v7zjE68yr80SpUS3Sd7KJYLmBNMArqr QTCSOgzUrPeVkE7XCYmjR47RbDZ5N/cWtzU8TvH4cJi+UCcdAS/ZmU2Ot39LLn1eOtd9qoeA P8BKbfnyhfD5+emp11XAABCDkVQXUHs0JjNbXmS2vEjHQR8A5t5yLv8CSZI4e7rX+mR2HiJQ HB8OM/WmxJamI+7zs1Fv2iOaI8vZJ4850O7nTKgXYMxpAMDuXR72+A7x88cvsvkFgHCrSS6v Uv1Y/SNsEWBl4zv7fQHa9np4PvMBIPxpcnTaSTRNkmvrqwtA0r5CMJK6BEw4uNvEO+E3N+LV 9uq8VLwAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37734109! transcriptIcon "Private - Generated method" ^ icons at: #'transcriptIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self transcriptIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37734405! transcriptIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADPSURBVCjPdZFNCsIwEEZHPYdS z1DaHsMzuPM6RRcewSO4caPQ3sBDKCK02p+08DmZtGkKlQ+GhHm8MBmiFQUU2ng0B7khClTd QqdBiX1Ma1qMgbDlxh0XnJHiit2JNq5HgAo3KEx7BFAM/PMI0CDB2KNvh1gjHZBi8OR448Gn AkeNDEDvKZDh2Xl4cBcwtcKXkZdYLJBYwCCFPDRpMEjNyKcDPC4RbXuPiWKkNABPOuNhIteg z0pGFkD+y3p0s48DDB43dU7+eLWes3gdn5Y/LD9Y6skuWXcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37749232! userIcon "Private - Generated method" ^icons at: #userIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self userIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37749506! userIconContents "Private - Method generated with the content of the file /Users/MAC/Desktop/Dev/Resources/extras/famfamfam_silk_icons_v013/icons/user.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ3SURBVDjLpZNtSNNRFIcNKunF 1rZWBMJqKaSiX9RP1dClsjldA42slW0q5oxZiuHrlqllLayoaJa2jbm1Lc3QUZpKFmmaTMsa Rp+kMgjBheSmTL2//kqMBJlFHx44XM7vOfdyuH4A/P6HFQ9zo7cpa/mM6RvCrVDzaVDy6C5J JKv6rwSnIhlFd0R0Up/GwF2KWyl01CTSkM/dQoQRzAurCjRCGnRUUE2FaoSL0HExiYVzsQwc j6RNrSqo4W5Gh6Yc4+1qDDTkIy+GhYK4nTgdz0H2PrrHUJzs71NQn86enPn+CVN9GnzruoYR 63mMPbkC59gQzDl7pt7rc9f7FNyUhPY6Bx9gwt4E9zszhWWpdg6ZcS8j3O7zCTuEpnXB+3MN ZkUUZu0NmHE8XsL91oSWwiiEc3MeseLrN6woYCWa/Zl8ozyQ3w3Hl2lYy0SwlCUvsVi/Gv2J wITnYPDun2Hy6jYuEzAF1jUBCVYpO6kXo+NuGMeBAgcgfwNkvgBOPgUqXgKvP7rBFvRhE1cr p8Vq1noFYSlacVyqGk0D86gbART9BDk9BFnPCNJbCY5aCFL1Cyhtp0RWAp74MsKSrkq9guHy vfMTtmLc1togpZoyqYmyNoITzVTYRJCiXYBIQ3CwFqi83o3JDhX6C0M8XsGIMoQ4OyuRlq1D dZcLkmbgGDX1iIEKNxAcbgTEOqC4ZRaJ6Ub86K7CYFEo8Qo+GBQlQyXBczLZpbloaQ9k1NUz /kD2myBBKxRZpa5hVcQslalatoUxizxAVVrN3CW21bFj9F858Q9dnIRmDyeuybM71uxmH9BN BB1q6zybV7H9s1Ue4PM3/gu/AEbfqfWy2twsAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37750765! versionControlIcon "Private - Generated method" ^ icons at: #'versionControlIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self versionControlIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37751073! versionControlIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYQEhgJtRvS4AAAAalJREFUOMutkjFoVEEQ hr/Z2913d8k9YgxBrhARBJEgSSOKTcTGUgkoh41YKJYRCzuvSCkepBGUFLEJaBUsBEUPtRT0 mohibIyYIipRouFd3tuxeDkVI3hRp5nZgf+b2ZmBfzQBaNTMMPBsk9qR8ZnQkkbNNIHRs1cX 9P38YxVbNqAAGCO5F0g+L2JKAxlpIi+e3jNzD6cB6hbg9OVWliy/MbOTp8Q7B8DaWhsfRQiC cw5TcPi4Wjh28Q5Lb5+z+8AYr1v3Ry2wQ4yYkKViCp405P1FvQMAVPqrIAaA6q59tFfeEShQ 2bINDdmwBfqSlQ+8fHKbkxemQLMNn1UFUAht0o+vSFY/4YoxABYoPro5IYePnoP0C2SroAHV DEKKash9WAdrYM/e/TyYvQ5o0QJ+cPuQYozgK0Dlx3pQJK+9/qYzX4ZGDrIw14ykUTOXgPpf nkG9cwd65MR5luebXaninYe4e+sK4zNBbCfpozI98dauAM5H3+OfACWI+7sCmKi4EeBKPdgu Aan7XQdxleB7/yDN9xGC/AKw5WvTE8fPbGb8XxO9wf+wb+DSh8wTKaW0AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37753592! warningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37754832! windowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*famfam-icons-accessing' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37755610! workspaceIcon "Private - Generated method" ^ icons at: #'workspaceIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self workspaceIconContents readStream) ].! ! !ThemeIcons methodsFor: '*famfam-icons-contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 37755903! workspaceIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoSFSUbRvzYGQAAAilJREFUOMt9k89LVFEU xz93fDMqZEGG0cLAEgpXrly1qEXLNu2C0mqRuggXQWCtgja1DkqwRWKC/gG1LSUIwqI0UCOd sRgrHX2Ome/dX6fFG2dGLQ8c7r3ccz/3ew7nqKHngweNsf3W2u44jhuMMVTcYmz1OXFn3XoU x4+11g8CpdT9o03Hek62tKYztXWAgPBP896xXiySX8o3jk+8vp1bzKYD4PqJltb0la5Opj9N s5+JJOTTbafo7enN5BazPYGI1CmV4svcHKMvH+HFISJ4cXjvEUnceUHE4b2j80I/qZRCRA4F FXnC1MdZwOG9lEDJ422QF8F5C4B1yVoF8DQ2NSTB3uOxeO/wJUBstgjXlwk3CwA453YCRISp DzP09d7l2cgTlgt5BME5SyH8SRRtJoFKJR/uAXihviHDqzcvuNHVR2FtmcGRh6wVfkGNpf5A bQlAKYVdAC+e2el5Vn/8oaP9HJmglveTnxHvy49Qle2eFBAgcNzsvsXw2ABvJycI0gqoKSlX OxS43UUE+Dr7jUtXL4IIKHg3PlO+0zrmzPn28tk5v6sGgPMuqZFKAdBxtq1KukKlUvsoECiu bv2/Davy31EDpZQGqW8+3szCwkK5XfezxiOHieIIpdTvANRwNjd/bWxsNNjYKBKGIWG4RhRF GGuw1mK3J9FarDVoo1lZKWjgaSDi7+SXvpPNzV82xmS01pVRNqYM2R5lrTVGm9hYOyQi9/4C 16KCF5hN9R0AAAAASUVORK5CYII='! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/15/2013 11:15' prior: 28198310! buildDownButton ^ IconicButton new target: self; actionSelector: #down; labelGraphic: (Smalltalk ui icons iconNamed: #downIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/15/2013 11:15' prior: 28198606! buildFullDownButton ^ IconicButton new target: self; actionSelector: #fullDown; labelGraphic: (Smalltalk ui icons iconNamed: #downFullIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/15/2013 11:15' prior: 28198914! buildFullUpButton ^ IconicButton new target: self; actionSelector: #fullUp; labelGraphic: (Smalltalk ui icons iconNamed: #upFullIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'EstebanLorenzano 5/15/2013 11:15' prior: 28200398! buildUpButton ^ IconicButton new target: self; actionSelector: #up; labelGraphic: (Smalltalk ui icons iconNamed: #upIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !MessageBrowser methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/14/2013 14:46' prior: 25573262! initialize "Initialization code for MessageBrowser" textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements.! ! !MessageBrowser methodsFor: 'icons' stamp: 'EstebanLorenzano 5/14/2013 14:51'! taskbarIcon ^ Smalltalk ui icons referencesIcon! ! !NewListExample methodsFor: 'morphic' stamp: 'EstebanLorenzano 5/15/2013 11:16' prior: 36224472! iconFor: item at: anIndex | icon | icon := Smalltalk ui icons iconNamed: #testGreenIcon. "^ icon" ^ IconicButton new target: self; actionSelector: #halt; labelGraphic: icon ; color: Color transparent; extent: 12 @ 12; helpText: 'Run the tests'; borderWidth: 0.! ! !CategoryWidget methodsFor: 'item creation' stamp: 'EstebanLorenzano 5/14/2013 15:01' prior: 18728426! buildCategoriesList ^ categoriesList := PluggableIconListMorph new basicWrapSelector: #categoryWrapper:; resetListSelector: #resetCategoriesListSelection; keystrokeSelector: #keyPressedOnCategory:; autoDeselect: true; getListSizeSelector: #categoryListSize; dropItemSelector: #dropMethod:inARow:; dragEnabled: true; dropEnabled: true; hResizing: #spaceFill; vResizing: #spaceFill; getIconSelector: #categoryIconFor:; "WARNING: This needs to be set before the model" model: self; getIndexSelector: #selectedCategoryIndex; setIndexSelector: #selectedCategoryIndex:; getSelectionListSelector: #categorySelectionAt:; setSelectionListSelector: #categorySelectionAt:put:; getMenuSelector: #categoriesMenu:shifted:; beMultipleSelection; getListElementSelector: #getCategoryItem:; changed ! ! !NautilusUI methodsFor: 'displaying' stamp: 'StephaneDucasse 12/19/2012 16:12' prior: 38002239! buildColumns: aWindow height: height | delta | delta := StandardFonts defaultFont height + 10. aWindow addMorph: (self buildFirstColumn: aWindow) fullFrame: ((0 @ 0 corner: 0.25 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildSecondColumn: aWindow) fullFrame: ((0.25 @ 0 corner: 0.5 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildThirdColumn: aWindow) fullFrame: ( (0.5 @ 0 corner: 0.75 @ 0.5) asLayoutFrame topOffset: height ; bottomOffset: delta negated). aWindow addMorph: (self buildFourthColumn: aWindow) fullFrame: ( (0.75 @ 0 corner: 1 @ 0.5) asLayoutFrame topOffset: height; bottomOffset: delta negated). aWindow addMorph: self buildNavigationList fullFrame: ((0.5 @ 0.5 corner: 1 @ 0.5) asLayoutFrame topOffset: delta negated ).! ! !StartupLoader class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 14:38' prior: 37894383! startupLoaderMenuOn: aBuilder (aBuilder item: #startupLoader) action: [ self default loadStartupScript ]; label: 'Run startup scripts'; parent: #System; order: 2; help: 'Run startup "scripts'; icon: Smalltalk ui icons scriptManagerIcon ! ! !ComposableModel commentStamp: '' prior: 38082947! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !ComposableModel methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/15/2013 11:24' prior: 38031590! initialize "Initialization code for ComposableModel" super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. windowIcon := nil asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 14:13'! windowIcon ^ windowIcon contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 14:13'! windowIcon: aForm windowIcon contents: aForm! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 14:50'! taskbarIcon ^ model contents ifNil: [ super taskbarIcon ] ifNotNil: [ :m | m windowIcon ifNil: [ m taskbarIcon ] ]! ! !TimeProfiler class methodsFor: '*famfam-icons-extensions' stamp: 'EstebanLorenzano 5/14/2013 12:11' prior: 37796994! taskbarIcon ^ Smalltalk ui icons smallProfileIcon! ! !DualChangeSorterApplication class methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 14:28' prior: 21017306! menuCommandOn: aBuilder (aBuilder group: #SystemChanges) parent: #Tools; with: [ (aBuilder item: #'Change Sorter') action:[self new openWithSpec]; icon: self taskbarIcon. (aBuilder item: #'Recover lost changes...') icon: Smalltalk ui icons recoverLostChangesIcon; action: [Smalltalk tools changeList browseRecentLog]]! ! !DualChangeSorterApplication class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 12:05'! taskbarIcon ^ Smalltalk ui icons changeSorterIcon! ! NautilusPluginManager removeSelector: #iconClass! CategoryWidget removeSelector: #thereIsNoIconsOnCategories! AbstractCategoryWidget removeSelector: #thereIsNoIconsOnCategories! NautilusIcons removeSelector: #warning! NautilusIcons removeSelector: #upFull! NautilusIcons removeSelector: #up! NautilusIcons removeSelector: #uncommentedClass! NautilusIcons removeSelector: #trait! NautilusIcons removeSelector: #testYellow! NautilusIcons removeSelector: #testRed! NautilusIcons removeSelector: #testNotRun! NautilusIcons removeSelector: #testGreen! NautilusIcons removeSelector: #string! NautilusIcons removeSelector: #sourceUnselectedIcon! NautilusIcons removeSelector: #sourceSelectedIcon! NautilusIcons removeSelector: #sourcePressedIcon! NautilusIcons removeSelector: #separatorIcon! NautilusIcons removeSelector: #removeIcon! NautilusIcons removeSelector: #refreshIcon! NautilusIcons removeSelector: #packageIcon! NautilusIcons removeSelector: #morph! NautilusIcons removeSelector: #monticelloPackage! NautilusIcons removeSelector: #magnitude! NautilusIcons removeSelector: #instVarsUnselectedIcon! NautilusIcons removeSelector: #instVarsSelectedIcon! NautilusIcons removeSelector: #instVarsPressedIcon! NautilusIcons removeSelector: #haltIcon! NautilusIcons removeSelector: #groupIcon! NautilusIcons removeSelector: #greenArrowUpAndDown! NautilusIcons removeSelector: #flag! NautilusIcons removeSelector: #exception! NautilusIcons removeSelector: #emptyPackageIcon! NautilusIcons removeSelector: #downFull! NautilusIcons removeSelector: #down! NautilusIcons removeSelector: #dirtyPackageIcon! NautilusIcons removeSelector: #dirtyMonticelloPackageIcon! NautilusIcons removeSelector: #collection! NautilusIcons removeSelector: #classVarsUnselectedIcon! NautilusIcons removeSelector: #classVarsSelectedIcon! NautilusIcons removeSelector: #classVarsPressedIcon! NautilusIcons removeSelector: #byteCodeUnselectedIcon! NautilusIcons removeSelector: #byteCodeSelectedIcon! NautilusIcons removeSelector: #byteCodePressedIcon! NautilusIcons removeSelector: #breakpoint! NautilusIcons removeSelector: #bookIcon! NautilusIcons removeSelector: #blank! NautilusIcons removeSelector: #arrowUpAndDown! NautilusIcons removeSelector: #arrowUp! NautilusIcons removeSelector: #arrowDown! NautilusIcons removeSelector: #arrowDoubleUp! NautilusIcons removeSelector: #arrowDoubleDown! NautilusIcons removeSelector: #announcement! NautilusIcons removeSelector: #alert! NautilusIcons removeSelector: #abstract! NautilusIcons class removeSelector: #initialize! NautilusIcons class removeSelector: #iconNamed:! NautilusIcons class removeSelector: #default! Smalltalk globals removeClassNamed: #NautilusIcons! "FamFam-Icons"! "Nautilus"! "NautilusCommon"! "NewList"! "Polymorph-TaskbarIcons"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Tools"! "Spec-Widgets"! "StartupPreferences"! ----End fileIn----! ----QUIT----an Array(15 May 2013 11:41:06 am) Pharo.image priorSource: 4517891! ----STARTUP----an Array(15 May 2013 11:48:15 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 May 2013 11:48:16 am) Pharo-30130.image priorSource: 4617235! ----STARTUP----an Array(15 May 2013 12:56:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/15/2013 12:51' prior: 38072625! commentForCurrentUpdate ^ '10596 Set class for #compiler in Behavior>>#compiler https://pharo.fogbugz.com/f/cases/10596 10627 add workaround for failing ZNTests https://pharo.fogbugz.com/f/cases/10627 10630 move FamFam package to Polymorph https://pharo.fogbugz.com/f/cases/10630 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/15/2013 12:51'! script228 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.458.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FamFam-Icons-MarcusDenker.25.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1433.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-MarcusDenker.20.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.814.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-EstebanLorenzano.164.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/15/2013 12:51'! update30131 "self new update30131" self withUpdateLog: '10596 Set class for #compiler in Behavior>>#compiler https://pharo.fogbugz.com/f/cases/10596 10627 add workaround for failing ZNTests https://pharo.fogbugz.com/f/cases/10627 10630 move FamFam package to Polymorph https://pharo.fogbugz.com/f/cases/10630 '. self loadTogether: self script228 merge: false. ScriptLoader new unloadPackageNamed: 'FamFam-Icons'. self flushCaches. ! ! "ScriptLoader30"! !RecentMessageList class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37894222! icon ^ Smalltalk ui icons iconNamed: #recentMessagesIcon! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37395611! calendarIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons calendarIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37395844! changeSorterIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons changeSorterIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37405864! processBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons processBrowserIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37407284! recentMessagesIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons recentMessagesIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37407973! scriptManagerIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons scriptManagerIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37410562! smallDebugItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37417335! smallPrintItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintItIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37422663! testRunnerIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons testRunnerIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37423127! toolsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons toolsIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37423354! transcriptIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons transcriptIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37423816! userIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons userIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37424041! versionControlIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons versionControlIcon.! ! !ThemeIcons class methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37424957! workspaceIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons workspaceIcon.! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38083861! backIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 38084492! calendarIcon ^ icons at: #'calendarIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self calendarIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38084768! calendarIconContents ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHOSURBVDjLpZOxa1RBEIe/d/e8 FKeFEA2IGBWCICZYBSESBCFglUDSCJZaRBBbK1HQ0s4/QQlCgoKdoBA9sVBshCBETCNRiUUg 5PDt7MxY7HuXdxgEycKwyzJ88/vN7Gbuzl5WDvDozeZtd66p21EzQw2iGaqGmhPVaqFodNTs /f0rI+M5gLnfmB0/MPg/le88+TLWU6BmgwDtpevgDhrBFETSORQgAQoBEbZvvUJEB2qAqg8O Rw6BxRQeS0gBUkAMsPIdAIm60wNVKwEZrG+AW1JilpRotQNDQwCEOiCWgIXhe1w+f/if3hff rXMhxH4Fooa5kzdT0rNPi3TWlrl6bp7PP1d4ufqCiyNTzIzOUYiz1RWCJECjsuBA3swAmBmd oxu6APza3uDB9EM6a8sAFFEJYsRoOwBRww3yxt+Su6FLq9nqAQuxst11QDTcnX2lhc7XVO3j tw8cOzjMzafzTJ26RJUL0B7Ia020dNlsJAsTJyaZODlZziVj+swsWZb1AarJJUCMeCnn8esf aWruiIKoEtQIkry3mlUx+qfg7owd389prd6+9/7CbsvMrfaQ/O3dhdWzQa0tUZGoaDREjahx V8Dm1u/nANlev/MfAjw0JrMu09AAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 38085682! changeSorterIcon ^ icons at: #'changeSorterIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self changeSorterIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38085970! changeSorterIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVDjLpVOxSgNBFJxcrkmC +AV+gP5BwEKwtLESW0mZD7CyEyViJVhbG7DURvEXBAsDKgpGxIjIecnF29t9byyyAZu9wkz1 2HnMm3m7WyGJWRC3Dq7aq83FTpKzMcwyqFNYVczHNrvpDc5XmktrXz9siAJpksCKYK5qs9u7 t+3T/fXjysn1q9TrtWhqhCSUAAkMR2PUGzWoAkqCBJST+qF3r4ft5Wo8toyy77En/zQpoSRS k/kaEH+mCoxyiQAARxcvDGHv7DnIbe1ekiQiUQ0uyIkEucJaAEAkUiLgwpzNvUDhyqa4sLiZ cFHplBJxN41QNsWWOXDegTFFsMnkJixujI9QlOUMR1DxDopC/hVhentx//Gp2+rkG2IdksEH nDioE4goqOxv7uQLUjiIE6Sf76AI/NPpAkBl1t8YYUb8Ao9lHyy2IyRjAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38086724! configurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38087922! confirmIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 38089142! forwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38089782! helpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38091007! homeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38091989! imageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALqSURBVDjLjVPbS9NRHN9T/0BW FBQUVIQKXigCpVIyygcDJUrnZdNEc5hlmZc0TdSF0bxszs3LvM3pXE6Xa3NL0TJTl7pcTY1E c5rX/WxqCrHhp7NBPaRGD5+Xw/lczud8vzQAtJ0wWhLp+4kbUThSFGrQFwTrB59dE+ryA/3+ vreNOMaPOmLkMeUT4mTMaoph1klh7pPApOLAUH4LPTn+X7qzLwXsKDDGj0wy8hibM+oCrI9p YTWGA0ZnWEd8sWZQYvXDC5g0XAzyo6BJP5f/R2C89OYeErlquiUPP9vogNgF1iYfbH10B0zx RMQFC4oszMsz8F3XBOqdBKqUs7a2B6fdHAIkMnu6le1w3WrwBLrjHSKWrhhYh72w2kVHjTII ae3eKFJexkp/I0YlKWhJdKsgZIanoTjMtlHPxSY9BD/YgbA2eGPteRjmWzOJazrmZKl4rL4A QT8TD4nIfPMjzKgKIUtwNtJIyxXftISclICN3GxYfHyw3FEEy1ALLIPNsOhkWGzLw5umCHCU flBLr2O29i4WXgnQwDpB0YY5NyapASmoxlxQrGAsFrAIWQ6D6Da0GecxXBaLFfLmuHI+Tgrk CBCIYKqIwVKHEHWxxzZp758GbTrc9AqYu4WYb8kkRcnsLcPejzL5DKi3dfAQSEFX9RKRZkzx QklKIaqjD4PW9+QqVy+IxmdpOkwvOaB6xVjpa8QQOSMtY4DHAPW6GuLSVFwprUJxSQYWlRyM S9JQGXlw3PELZDB8OzN9c0hkdXua1/pYfTKonloHkeoWYVachCkuHZNFwZhrTMeCmov2rIso Y+wL2TaJJLKr4r6HzUyIpso4R9yp4mB8LWFgScPHtJyNjhx/CCOcCnccZTua77jKRkiJy51l mKlJxJK2lJBLoOMxiet+myDcKWXXXbBDGn/KTcI6brO7TUgzMcBl4Pk9d3tkhSB8r+s/l+k3 6mKOJpKW10VRh/TlzAOFJLLnTvd2Ffhf/AKfTM1hskDhXAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38093312! jumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38093876! lockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38095052! objectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38096114! openIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38097002! paintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/13/2013 16:02' prior: 38097910! processBrowserIcon ^ icons at: #'processBrowserIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self processBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38098204! processBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoTETo0n8IkZwAAAfBJREFUOMulkz1oFEEY hp/dmZ3dvcIUIhLRS2EMQtBIAgEhYGFzYBEkarQRUliJwUYRDy6FpLCyMYKVVoaTSIhYnEIq G0FEPUm0CYIH8c40CoJ3O38WMTEhJ0p84WW6Z57h+yYolYoPgHNsI977aUqlom+1mr7Zavq/ xTnnM52tt1QqerlGm7g7T7lS/aebRwuHuXCiBwAJEEWKcqWK6gAlY4gUZ44uQxAy+6YLnAc8 GIs2hnKlyvjpPgDCjWQVp0RpytmhOheHBxFKkiYJaS5FJSkil5AkCQDWmN8GaxEqRiQx/T17 CHMF+rsbqOgTjxcOILwDI8lCDYCxdqtBlChGBmvs29XBy6UGXflTiEiSJDFRohBxhIrVnw1O DtQIA4nIFeDbLEEwgpCCq8efs1DfjbMO6yxTbwOMbQO4PHqdgICPtRneL38lvxcO5XdypNMw 2DeO9wCeqfu32gNuz9xEKIGUEUIKPjfm6N0/ysPXNcz3O1hjscb+eoLdCnjyrpsoVahYEcUK IT9wsPMZvlkjDAKeLvXS/JEBi+0NYHXeFkfoHc45Lj3qwPkdaG3QVmNxqwYbAVpnjA0PcG/u 1Sbc4jzAi7abuPJlZbPBlfNDXBs7htYZWStDG43Wa+eGGk2jUV+HSWB6cvLG9n/j/+YncEMA U9mo9IEAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38099877! publishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38100753! recentMessagesIcon "Private - Generated method" ^ icons at: #'recentMessagesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self recentMessagesIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38101077! recentMessagesIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMESURBVDjLpZNrSNNRGMb/ViR9 qw9FUSQFQX0IMshI9EMXJIIuZGFZGWZpqSHmxM25dNq8pk7LzTSdc1u6malo3vI6bHmZrmmp 0+mclrfNuTmvk3r6zw8rKfzSgQfec16e33vew3kJAMT/aN2msTDxjKzoaX1nOXXmczXd0lkR bmkRB0/W5ASXlr4KP7UhQCqJ5XTXUlfGVK2YnhiCyWSA0ajHt5FudLcUovq137w4NZDxT0BT IStNLefCoNNCpTXgbYMGnOKvSJd8gaBKja6BSWhUMlRmPwSPdT90HaBGEO8iL6dY9FMaSBXj eNeogXrMBL3JDJ1pHqpREwS1apQ0D6NfUQVhzI2F7Fh/Rxugjh9WOUgm+kZmIKkfhnUZjEYM fJ/AEhlbZf4JZFao0aLU4oMwBJkRNwU2QEP+44lxbQ+ENYPoJSsvrP6EeWEBGbk8TJGgueVl FNc0QDpgRFKBEj3tYmTT3TU2QD0/cMmg/4ZEkRJTixYYln9ghczQopgQvitDWCQTtbI2hIjd 8IDniFFNG3Lp1xZtgOosvyX99BCYPAVGzRYS8gNjxjk8e568ZpYquqFbBQJEp8Es94RH5mHk 0Nx/A4pTvIaHeqrAlijRPGjEONn02JwFQSJXBAmd8SjfCT65xxFRch2SjjRQii7DLXU3XJN2 2K0B8lhevCYxFTLlAOIlKujIBzNYyIqCkyjt4qC48+WasbCDDXYdBfxPiXgocsOJOPvVozF2 dkROXMCx/GiPxX55PkRVnUiQ9EOhmYUP2a/VnFIbhITqALAqfRFV7o3o937IlMbgdp4LDkUS K2t9ZDG9qW/ir6O3lYPGdjliea24lX0E4nY2RK3J4MsSkfsxnoT4gyuNhq/oPA4wiL69NGKb 7UdlRNxhZFGvmMu4nuiqZ+Eq9yAupO/DudRdcEnaDi+eMzjNUbgncIMDg1DuoRH2fw1TBsPb KS3UveDFk0taLuXiolXWmE25Kj4as2n2Lv8sHOiEnDRv/ec0biTyyrr99M3YSSO2/Hn+CweZ 2kRiltpxAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38102716! scriptManagerIcon "Private - Generated method" ^ icons at: #'scriptManagerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self scriptManagerIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38103037! scriptManagerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ+SURBVBgZBcExbFRlAADg7//f u7teC3elQEoMgeDkYDQ6oMQQTYyGxMHZuDA6Ypw0cWI20cHJUdl0cJLIiomR6OACGhUCpqGW tlzbu/b97/3v9/tCKQVc/e7RRXz+7OrSpUXbW7S9tu8ddv0M+3iCjF1s42v8WAP0XffKi2eO Xfro9dMAYJ766SL1092jfDa17DfZgycHfvh7/hau1QB9161PhgE8epoNQlAHqprRIDo3iqoY DSpeOjv2zHRl7atfNj6LALltJys1Xc9+CmYtTxtmR8yO2D7kv4MMPr7x0KULK54/NThdA+S2 XTs+jOYN86MsxqBGVRErKkEV6BHynp//2fXbw9lGDZBTWp+OK7PDzqIpYiyqSMxBFakUVYVS 2dxrfHHrrz1crQG6lM6vTwZmR0UHhSoHsSBTKeoS9YU8yLrUXfj+w9d2IkBOzfkz05F5KkKk CkFERACEQil0TSOnJkMNV67fHNdVHI4GUcpZVFAUZAEExEibs4P5osMeROiadHoUiIEeCgFR EAoRBOMB2weNrkmbNz+9UiBCTs1yrVdHqhgIkRL0EOj7QGG5jrZ2D+XUbADEy9dunOpSun7x uXMe7xUPNrOd/WyeyKUIoRgOGS8xWWZ7b6FLaROgzim9iXd+vXvf7mHtoCnaXDRtkLpel3t9 KdamUx+8fcbj7YWc0hZAndv25XffeGH8yfuvAoBcaHOROhS+vLlhecD+wUJu222AOrft/cdP Zr65ddfqsbHVyZLVlZHpysjx5aHRMBrV0XuX141qtnb25bb9F6Duu+7b23funb195955nMRJ nMAJTJeGg8HS0sBkZWx1suz3Px79iZ8A/gd7ijssEaZF9QAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38104222! smallAuthoringToolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QsSDykasZ+olQAAAopJREFUOMutk01sFnUQ xn/z/+9uqVBepNXa1hDKRwwRSfCDeGiMRIPRS40JCeFgSuKBg8ajB8MFEhLOEj1gTOPBk+HI QcPBWA4i6s1GAyUaJQYp6Xbb3ffd3Znx8La14NU5zWGeZ+aZeUZ4KOZmmRAJF5BwzN2GAURk 0d0u435uaoY/N9fLQ+B3QD45cmIxCTEDWwKgu3Kbn68eb+ryLwPenZrh03VM2AQ+DVyafP5s jIlA+ys030NzjSz+wsieI+nE028H4FK/0SaCuVkmQC5OvnCGx/a8IXiD610gwz3BDEJMGNv3 evrkM6cU+LiPWZ9A5OzAtrEwvOs1tPcbbiXmKao9tK2ou8tIDEg6Tufx7TEdHHbg/Q2CEJLp 3c9+IPXqT2hboM0i2uS0TUHbLKNtgWlNU92i7d1ldN/RFOQEQAJgpjuzR4Zp6pvE2EWbb0HA vcGtwrRgqLOLMr9GXf5OTFKBvoRk7RjiVtF079BKxKzAdQVBcAzVAquXcK8wa3BrAA//ErjS rRZYWbyKWcHQyDTuPVSXsTanbZa4f/9vOtsjboq7bZw+WU9ispNqdQEJkXLpBt1yHlmziePU PaXuOW7KwVeMewvyoA+27niJJ/ZfwK2lbXNMu6hWqFaYdtf2oYzuPf+Ac9d3oCGOxyQbY/fh r6jy66jmVPl1quIGWx89yuj+abZ1DoFAb/UP3EXB+zPOzfI18Opzb92izK8gYQCRDAkZEtK1 PgEwsi2H+OHyXoAvp2Y4vvELc59nP2L14ZHJk4wfeI/BzgFiOgSANgVVPs+d+Y+4d/sLWo/f vXxKX/zPM33zGW/WKmcGB3c8hZVbsDr2FQ6oklV1Xd50bT88dpor/F/xD94hPsMoW0q7AAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38105434! smallBackIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADrSURBVDjLY/z//z8DJYCJgUIw yAwoPZHJBsS7STGABY1/9e+fvzKkGMAIiwWgzRfF2ST0/vz5w/Dw/UOGXz9/M/z6AcK/GH4C MZj+jmCD5C70X2VkgWo+KcYqrqfArcTw598fBhluOTD9++9fIP7N8PsfEP/9AxUD0b8ZVq9c i/AC0Nm//zD+Yfj19xdY0R+got9gxb8RNNQAkNyf/0CxX39QvZC5M+68MJuIAQczJ8PDlw8Z Xr9/g9XZIK+BNP/5/Yfh/sJHjIzIKTF2VchNoEI5oAbHDWk7TpAcjUDNukDNB4nVjOKFEZwX AOOhu7x6WtPJAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38106068! smallCancelIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIhSURBVDjLlZPrThNRFIWJicmJ z6BWiYbIkYDEG0JbBiitDQgm0PuFXqSAtKXtpE2hNuoPTXwSnwtExd6w0pl2OtPlrphKLSXh x07OZM769qy19wwAGLhM1ddC184+d18QMzoq3lfsD3LZ7Y3XbE5DL6Atzuyilc5Ciyd7IHVf gNcDYTQ2tvDr5crn6uLSvX+Av2Lk36FFpSVENDe3OxDZu8apO5rROJDLo30+Nlvj5RnTlVNA Ks1aCVFr7b4BPn6Cls21AWgEQlz2+Dl1h7IdA+i97A/geP65WhbmrnZZ0GIJpr6OqZqYAd5/ gJpKox4Mg7pD2YoC2b0/54rJQuJZdm6Izcgma4TW1WZ0h+y8BfbyJMwBmSxkjw+VObNanp5h /adwGhaTXF4NWbLj9gEONyCmUZmd10pGgf1/vwcgOT3tUQE0DdicwIod2EmSbwsKE1P8QoDk cHPJ5YESjgBJkYQpIEZ2KEB51Y6y3ojvY+P8XEDN7uKS0w0ltA7QGCWHCxSWWpwyaCeLy0Bk A7UXyyg8fIzDoWHeBaDN4tQdSvAVdU1Aok+nsNTipIEVnkywo/FHatVkBoIhnFisOBoZxcGt Qd4B0GYJNZsDSiAEadUBCkstPtN3Avs2Msa+Dt9XfxoFSNYF/Bh9gP0bOqHLAm2WUF1YQskw rVFYPWkf3h1iXwbvqGfFPSGW9Eah8HSS9fuZDnS32f71m8KFY7xs/QZyu6TH2+2+FAAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38107126! smallCenteredIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB8SURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYwMORk/54C0w2FOcemgmSIMyH1P7LNCHiLBDcEZ/+a gqwXaFbOIxLc4P0f1e7fUPiZGDcw/AdD02z9/5r/Vf7L/Zf8L/Kf/z/3f/ZsiAwjxbEJAKUI VgAswNGVAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38107614! smallConfigurationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAAAB3RJTUUH1QkIDSkTjqMgxAAAADV0RVh0Q29tbWVudAAoYykgMjAwNCBKYWt1YiBTdGVp bmVyCgpDcmVhdGVkIHdpdGggVGhlIEdJTVCQ2YtvAAACU0lEQVQ4y22QzUtUYRjFf+/73k9n HGdGnfFj0BQjA3WnaAa1aCG5atFCMoL+ioKKKMhVbdq16AP7CyqCdm0k2vVF4pBmpmai+JXO OPe+920Rluk9y8PD7znnCA5o8MKdmYU10Ua8ns6+vHpxv2EdvFhYE23DpzpNQ65W6DCgEkbs VDSf5zYpTk6PAvGAgZGx90sbpsdgKLS0iPt37xFoAwjAcG5klOIkHDk7ZroLYuL5gysnAeQe YL1kekbOnyGd8Jha3KSvvw8nWY9TnaOju5cVnaS1vZXLl4b5OG8GDyWocqA66eO5FutbZQpd AwwND6GkZGGtzOsPS9i2YjcwxFbIVEHKt2jKp1ES5pc3+Dbxlppgm5XCMVzXQyhJeaf8H+Bv hXzK4JgKRzsK/PxapLA6Q3Z5FvfHdxpW55ibmqIhl6FUKsUnaErD8UI1tgjIZ3qZfvYCW5QQ nkSuLtJ/4jRBpUwgLATmMCDlQ2PGJaq4pD2Y8UO8WhsRSXYDgys1QkY4UmCpmARSgK0g5Qsc ZePWWKgkEAooCZpzVWyXQxzXJ+HGACIDQoAUgipX4XoSz09gwohoK6SzOcn2rsZPpHiThncH AaUKVMIIg0EKgbAkjmOhrQgnMjRmPUIdUZNJ014fs8FWGXYrGq0NQgmkkFi2hdAaS2l8R2GM pD7tUZuIqVAKQCPJ5fP4rvPH3HskoK4ui+O4KKWw40Y0hk+Px8e7fBuUBCVt0jVZwjBg69cy j548ZN9er/jHjpW8dfO2Ln6Z2XE9125rabav3bhuAfrg4W/hgM0HfAZ+XAAAAABJRU5ErkJg gg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38108817! smallCopyIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoaFAgvgxQ0mwAAAX9JREFUOMuVk0tLAlEY ht8jM2PagP0KzwjdFv2PCFq2iKB1F/BCtrBFkXbbREREG7E2Bf4EMbM2gWUwo7+gmjAFN83t tGl0Rkexb/Wdw3kf3vfjO+ToJDOv6/osRijBz71trsXvnHecYRjT8ejWKHqkD/YmAbgBdtNq NcEY6xMRQgAAodCEJ5RzHmq1Gl6rlYXGd2NmkIv9zG7K7nmev3UBJElCsVSY+kekRRdAUZRO jFarOVRsR3IBKKUolgqdsyzLnuJIJNI/A8YYZFl2DdL5cFC5AJRSlMrFoQ56oZwttiwGRRnN QTA4jna73QXoug7GGMJhivJTaagDSiWYpoHKS6UL0LQfBAJjsCw21O7l1QUeHu/dEQSer56d n7oWhzHL07YoilhZXoVlmVC/VOSus+A21qN5AHnHcmwbhuHrFTtLVVXkbrIA8OzzGpKm6fD7 /RAEAaIoghCCer0OgODj890WpxKx5BzpFR8ep7OmaS55fay/KgAoJGLJHQD4BUJZpgMViPfY AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38109658! smallCutIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QocFh0xaEFkXgAAArRJREFUOMuFk11Ik1EY x59z3nevr9vUfaXbbPgVaHjRVRB0YZRJV0XeZCIRaGmWWKhpgZAElaV9gYgQlBjoEPRKkCS6 DAK1MG0zNvJj7zZ1m+51X+92zttNzmFa5+78/w8//s/znIMg5TzrfXIOAN7zPO9tunm7dI/X z7LspTvNrbpUHadeGIYZu9XYrI1Go8t9/a87Uz0Fq7hw5nS55sWrnk8HAggh/E+HHdfV1lcQ Qo7t6E97HpeZc82m7ZCIKKUnDgRgjENLS7+AT0tDsVisdCcFy7JThYWF4HF7KKXU8a8EFTab DVZdK6iutr44kUic6nnePVBSUqJAgMHhdAAAWA8E3G299xljvLy4aAc+jUeSJB3X6/TXZAqw vrFGAWCiraXj4YEAAABKaeXCjwV5bc0DjTeaVPFEHIliEObm5iQA6Npb/xegraVjGmM8ZF+0 0WBwC2s0GhDcgizL8ru2lo7p/wL+pJianZnGTqcD0jkeMt8ORhBCb/arRXuFMaOxl1B6Pb65 qSblZTIz+REVGHNAIHQLITRQ6fG07wsYM5k6437/g6MmEyQoRd6tTdkX3h5mZVRVkJ3D8BxH JVkG5/o6KLKyrla63UPJFsbN5hrJ5+sqNhrpwsrKVDASlgJBEdfEaU2UIzqWwTQQEhOO1dUP R/R6EvP5BsfN5t2XOmowCPNFRWSEYe4DAMxYLCGrUpnY8UcYhnzJNQcBAIYxbv+Wn09GDQZh d4ixmF6SJFJFyKMJleqlgmV5hLE9OWmOm1Hz6arJjIy+y5R2gyxTIMSwC+A4Qa1UMl/z8mIm na5pXhC8iszMK8mPpNU2fHe5Ng4fOtQwa7HECKUYMA4AADAAANVarc/l95/0SxIbAJA5tfrs RUFI7twqiu7q7GyPNxDI8YfDGl8k4lOoVOetouj+DaDzOgfcNME8AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38110915! smallDebugIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKYSURBVDjLnZPJT1NRFMb5G1wD HV5boNiqdHrvFYolCAtsGSSWKpMFKhYqlDI6oAEKaVJwCIgSphaKtLYWCgSNBgRjMNHoxsSF S3cmJmA0NMTw+R6JKKZl4eJL7sm953fOd3JPHIC4WMpcppG5SGnZc8ZjVVF6QLn975sDgfaZ mvg71oRJZIRUYcuAnq/2KWroGfm3QwEn2YpLVPPvOD2oiqj9yq/mGznegl56mx6T7ZbY1M6Y AM0CuZkxT0b2Wg6QW/SsApRXDsotR+d6E9Y/h9DuqoCuJq0lKoDxqU1/pITGR27mBU4h+GEc Tz5OY+ClA5JbyahYzof/9TBO9B/FcWcqpA4xU3We3GJ87ntnfO5meinMvruNnqcmXA2XoDVc Cc0wCYkzBaZpA7ILRJ/2O2B87jA+QT9UeDRe8svZYAG8b/txc6kc9mA+yqayYPQXwvdmBEOr A5B2p0BtFIYOWKCm5RukWwZyXIbA+0F0LpaiKaBHmVsLw4we99ccsM8a8GClF5JOMcQdou8p rULrgRmQo7KI0VcE13MrGv06lE5kodhzGvdWu2GdKkTVWC4DcELcJkKyXbCb1EhAVM//M0DV UNqP2qAJd1baUDaZjTMTeXAttsPi0cM0mgvHvA0NkxYk2QRIrieOsDmEmXttH0DfVfSluSTo WmpD8bgOroUOWNw6VI7koGfOBuq6EqLLTNU6ojrmP5D1HVsjmrkYezGIrlA9LjKgnrlGXJlp gbCOD0EtD0QNN8I3cZqjAlhJr4rXpB1iNLhrYffUQWoT7yUKzbxqJlHLq0jc5JYmgHMunogK YJVqF7mTrPyfgktMRTMX/CrOq1gLF3fYNrLiX+Bs8MoTwT2fQPwXgBXHGL+TaIjfinb3C7cs cRMIcYL6AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38112131! smallDebugItIcon "Private - Generated method" ^ icons at: #'smallDebugItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDebugItIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38112449! smallDebugItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALRSURBVDjLfVNbSJNhGP6li24C 6UIiDHWah83UdJv7d7R5oiiPWGp5yIUHNNF0acNjrmWe5gx1Ujmd+pubW8upaSWZRilZdhN0 0WVBEAgalSK5p18hczm7eOF7eb/neZ/n/d6PAEDsFWETAoSN8aWbZ/EDXqLIFLr67x27RPpU 6LUzl1hJiC08a7461lNo4GYLBjnf/ktwYrPjOF/+JxeZeWtCY+hSTk00FX9TsCroZttSrggb 9iSQjJLL4hFybUuyiVwRDHHBpzjg6zmoni3B7CcLrjVnIiY75KpDAtqnVDQcComBXD5tioL5 vQ6THwagfqFCQKsfMifiYJzXIrjlGI43+CNQxaK7jpArtM9t77RPWxjFx9CiBjcey1BhTUGZ 9SIkWhIBDUzIBpIRGe/zcVsB7XOd9gnBfW6fhCK/njPHg3rTgtrxDJSa45DeH45UYwIMC3fQ Ma1GoJIJYaq3xc4Cf4AzR+rZIHVsmN61o3osDSWmWKTrpUgejEXXjAoF/SSye4IRVMMCS+Hz nVnmXWg3A/Ieey3VkIjmqUIUG2OQ1hOOpL4z6JxWorA/AZd6QnB99DySu/zAlB+1+RZ7weey 598B8jpCfuSZZWh7Vo703kgUUWIaSCKXVpbVHYRKy1kYF9ogH45DVOuhDXHTwQNeOR6V2wSC 29z6kOYA1I2XI0kXQ0vm4eFiJ8xv27eAQwsaaKbk0M81Io+KBrd+/0aA0snZ7hnZ9UEzXnIP dD9vpyUHb4HVT4rQMFkA1aMc1I5m0Q1y0TWrRFqvCN41xK9d+x9YwZoJVLBw4S4ThtcaUPMt 0L9qhO7lLZokH9rZOuRQJ8GoIpZcFcRxh5/Iv9RHn6Bl4FSbKyJaXSBsckZGjwCdM7WQ9UfD vYr4clhBsHZtoqPwzHKfY2S4wV/p9DNTHwH3CuIzDfZ1uMp7hXvqkXVGpZPNrWIfXBQEY2ft N8xTb5GsXWfEAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38113743! smallDeleteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QQWDyovwTM/8wAAAhxJREFUOMulks9LlGEQ xz/P+9syNUWyXBQzAunQrYQI+wPqYiLh2im6dokILwndqpvdskMXCUPtFmFE5yQNMrNwxS3L FQQxZd3d932eeTqYW2EESwPDwDDz4TtfBv4zFEDv5bZuEWe8slW5OTaydNfrSbf3dnScGe3v G6hofXxi6A5MznjAaH/fAMPDj1hZ/oLjuLiu88/ade4sF7uv8WZ68oWzS5x9N0cQBARBSBju ZkQURURR1c8aEYYhuZVcWYkHsLDwlqH79yo6YWb65Y6JPen2B8DVrq5T5FYziLWIWIy2aG0x WohjIUkMOrGIgDYGYwzW2mEF0JNut9dvpFnfmN3xVyybGyWUqsZza1nfWGZrs8B2XlMsGQ7W HWXq9RRjI4vK+5s8a6GhPkVL8xUA8vkPzH16Tn7fFoWCRbRbni2b6KhfzSONF3DciEz2Idvb 8ziOiwV8r4ooCmlsqN0LULi4TkAY1BGFLaSa0iS6yOLnSTLZVzQ1nkCsYIwhiMK9gMA/gO/X oJSDBXJr4ygUranzKFyaD3ci1hKXNO5vasseKOVgrcFay+raBPU1nQTeMar3H6Lj+CXez4+h dYJYQyJmL0CLwVqDiBDH38l+e0YSG5Ty+bjwlLhkEKMRMYjWfwBCgGxmPWltO+kba5FE0CJo LRQLq6SaTmOMYIwljg3Zpa8J4AOBB8RxSd96/GTkdgWP6BcLySCgfwCHx/uHvBXx4AAAAABJ RU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38114801! smallDoItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIMSURBVDjLpVNLaxNRFP6STmaK dFqrgYKWlGLSgoiKCwsKVnFRtBsVUSTNyj/gxv4Bl678AyKCoCulgmtd+W7romgzKT4QMW1G +5hMpnPnnuuZm6ZNawoVBw7n3pn5vvP4zkkopfA/j9F8cafO3FekCjGpIgKIvayftTXOkr71 jkz2/UXA4HxXfz72gIx/lBsWSfiVtwiWHK8B3kRQeX/6lmnnkuDAwn0MJSKQEFChQCp9CcHi xxgsGWw3B01uRKfx9t1HIP1POpoSdUulLyD0vqO26IAkDW7tgSZYeHPqcmpXxkTChKzOaAKS Edo6jnEWVY5ehFxdHs2cn55rScDR73H6DKyyRWs1R0haGdR+z8YZ3MyMTj9rpUKi/PLkUJuZ fmX3nkNYmQBxzYprpyCA2XMRrvNAcdfDhgKkm6ttKTdW6jH4w4RpD/ALAaNzhH2kSwALoSJC d9+VhIqEVVeD4C1MclaOT0Ke0Cowq+X9eLHapLH23f1XreDzI27LfqT2HIfvzsRAyLB2N1co XV8vodUkfn16+HnnvrPDhrmXsxBY+fmOwcVlJh/IFebK207iuqSShg0rjer8B9TcWY7q38nm nRstm7g1gy9PDk2129mjinjy3OIvJjvI4PJ2u7CJgMEdUMmVuA9ShLez14rj/7RMDHzNAzTP /gCDvR2to968NSs9HBxqvu/E/gBCSoxk53STJQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38115828! smallErrorIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKCTIOk1O0sAAAAhpJREFUOMudk71Pk1EU xn/3bQvlo76gxBpNoGibArYLxJREh466MmnSgRH+IjsydGYjspBAWEQHMJIWmmhj+LAkpC1N Wyj2PcfhfUsQiRpPcnOTm/P8nuQ59xhuVA5SwDyQBsa95xKwDixlYOt6v7khfjscCi1MJpME w2F8AwOoKp2zM87LZYqFAtVmM5uBxd8AOXg3nUy+HJmZ4XJ7G+f0FBwHVUUMWEN38U9NUt3d 5VOxuJqBVwC+rvN0Mvn6XixGe3MTbTRABFVBRUEEabboHHyjPxbDtqzoi2r1wTKsmBykhkOh 98/m5rhYW0OdDqqKKqh6YgXFhakxBFMpPm9sUGu1Zi1gfjKR4HJnB3UcEFABFXEP6oEUVMFx uMjneTwWAZj3A+lg+D4/PnxERRkrf+dPtW/fQao1Ag8fAaT9wLjVP4iKG9jfSkRR7WB6AgDj FnCV9r8A8PpUBQA/UOrUzyYUg6rDl5ERt0HEvVE3PDdVRN0gtdkCKFnA+vnJCcYeuiL/Iu46 iidWwRocpF2rAaxbwNL+3h6BeNwly3WRNzrtTkNQY/BHIpQODwGWrAxs1VqtbKWQp2fqqQu5 5op3qygYQ080RuPggHq7nc3Alg9gGVaeVyqzts8XHUgkcBoN5KJ99RMVMHaI3vgEjXKZwvHx agbe3LpMdl/fwpPRUQK2jentRUVwmk069Tpfj466zou3buP/rPNPwkdmHrlYdncAAAAASUVO RK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38116881! smallExportIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38117760! smallFindIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIlSURBVDjLY/j//z8DJZiB6gY0 9895tGTDnv+tE+f+B/EnL1gHZofGpt4iyoCK5r5H63YcBmkAG5BRVPO/b/aK/0CDn+A1ICm7 5H/X9CX/azun/m+bNP+/iaUd2AAHN5//WSV1/wuqWsFiVvauyxWUVHkEhUWZwAYsWLOTo6i2 3aOpbzbYqYXVbf89/MP+u3gF/M8pa/gfm5b3PyKn6X/txGX/S1qmgOW4uXmq2NjZGcEGTJi7 mmXKwvUPF63b9T+3vAmMqyeu+j9l+a7/fUu2/2qcvuF/be/8/9G5zf/DkwvBLmRmYXnAwMDA DDYA6FxWkM3TFm/8n11a/x/k55Tc8v/RyTn/1bT0wDaCXAITj0svAOpi+AfErGAD0goqWf1C Y35a2Dr99wqM+G9sYftfW9/4v6yC8lMRMXEDSRm5rWISUv+B/v4vKi75n5eP/z8jI+M7oAFM 8ED0CYo6DAq4XYfP/F+15cD/7hnLQAG2AiSnqqmzorJlwv+1Ow6B5UAxwscveBglFtx8gv/k VzSDDQC66H98RuF/PWPzqyA5oM1XQTEAMiA1v+J/emH1fw5Orj8oBji6+/6HGQBTpKGt/1NR RZ1RQlr2HSjgYAaAwoKVle0/igHWjm7geAYlIJACUGDqGpn9B/qfX0lV4wrIAFAsweSAYYBq ACiBGJhYggMP6Of/QJv/S8sq/AcGohTQv7c5ubj/A+MdFH2gGABj2mUmUjEAnjJojQ5aPHUA AAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38118820! smallForwardIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADvSURBVDjLY/z//z8DJYCJgUIw xAwImOWx22uSExvZBvz68cvm5/dfV5HFGEGxUHoiExwVf//8Zfjz+w/D719/GH79/A3UAMK/ GH4CMYiWFJJk+PXrN8PN27cunWq/oA/SwwIzyUrYluHvP6AB//7A8e+/f4H4N8Pvf0D8Fyb2 h+HLl696WllqJ69Nu2XOArMZpBCuGajoN1jxbwT9FyH36/dvkCt/w10Acvb+h3uxOhvoZzCb i4OLQVJSiuH1q9cMt2/cvXB7zj0beBgQAwwKtS2AFuwH2vwIqFmd5Fi40H/1BFDzQaBrdTFi YYTnBQAI58A33Wys0AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38119465! smallHelpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38120695! smallHierarchyBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 38121252! smallHomeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QoOFCUTUyrSOwAAAetJREFUOMuVk79rU1EU gL97+95L00DyJKBVh2RRexNoVawRXByMQhOnh9RKJ5GioxhcOrRuwan+GOrUJYv1x2AT8A/w PxB5W1zEWtvwYlGJIXnXIfbZl1AhZ7pczvfdcw7nwgHhKVWsgK6A9pR6yDCxB3tKaU+pPUlx aHixOKPLN2/8VyL64ZrrbhSUYv3cWbYnTnHk8DgnvCZTa2vUXJeCUtcOuW51QLAfflOcYff4 MZTKMhaN0mq1GNv8SrZcHpCIfrh6+xadZJJ0Kk0qlQJAa2i32+zW65wslUISsR9+96BExzDJ 5S5g23bQmtYaAN/3+bm1RXJuLpCICuiCUrx/VMZrNjk/nSMejyOECAl83w/OhhCM5vPUXBcD uAOsTp0+w/3SPTaqbwPwycozVh4/RYsRdKeFMEbR3d8sLy3R7qXMynl4vjCZIRFPAKDUBJmM IpvN9F4UkpH0ld7EU3mQFlprFiYzzMO67O/TsixM08QwjOD+S+MHAB/qO3S7fpALMCCQUiKl xJKfAehg8fFTA4Bv3i86IhJaJGNgs/4Oz+coAJcuTnM1GkPqcS5Lk+1NQhUY/RX8m37vpe/e DqLZOHD1A0EkEsG2bRKJBAKJEBCLxXAcZwCyLCv8F67POq8Ah+Fi9eWL13f/AFb41aOFu4Aa AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38122239! smallInfoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKcSURBVDjLpZPLa9RXHMU/d0ys ZEwmMQqZiTaP0agoaKGJUiwIxU0hUjtUQaIuXHSVbRVc+R8ICj5WvrCldJquhVqalIbOohuZ xjDVxDSP0RgzyST9zdzvvffrQkh8tBs9yy9fPhw45xhV5X1U8+Yhc3U0LcEdVxdOVq20OA0o oQjhpnfhzuDZTx6++m9edfDFlZGMtXKxI6HJnrZGGtauAWAhcgwVnnB/enkGo/25859l3wIc vpzP2EhuHNpWF9/dWs/UnKW4EOGDkqhbQyqxjsKzMgM/P1ymhlO5C4ezK4DeS/c7RdzQoa3x 1PaWenJjJZwT9rQ1gSp/js1jYoZdyfX8M1/mp7uFaTR8mrt29FEMQILr62jQ1I5kA8OF59jI ItVA78dJertTiBNs1ZKfLNG+MUHX1oaURtIHEAOw3p/Y197MWHEJEUGCxwfHj8MTZIcnsGKx zrIURYzPLnJgbxvG2hMrKdjItjbV11CYKeG8R7ygIdB3sBMFhkem0RAAQ3Fuka7UZtRHrasO qhYNilOwrkrwnhCU/ON5/q04vHV48ThxOCuoAbxnBQB+am65QnO8FqMxNCjBe14mpHhxBBGC WBLxD3iyWMaYMLUKsO7WYH6Stk1xCAGccmR/Ozs/bKJuXS39R/YgIjgROloSDA39Deit1SZW otsjD8pfp5ONqZ6uTfyWn+T7X0f59t5fqDhUA4ry0fYtjJcWeZQvTBu4/VqRuk9/l9Fy5cbn X+6Od26s58HjWWaflwkusKGxjm1bmhkvLXHvh1+WMbWncgPfZN+qcvex6xnUXkzvSiYP7EvT vH4toDxdqDD4+ygT+cKMMbH+3MCZ7H9uAaDnqytpVX8cDScJlRY0YIwpAjcNcuePgXP/P6Z3 0QuoP4J7WbYhuQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38123461! smallInspectItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYdERIIyN9seAAAAzRJREFUOMulk1toVHcQ xmf+57LnnM3e4m42qRs0iBqLlzYbW7NUraQ+GHxQNBQUopJCqautDzVNNVRaNETBEqRUaGsV pIUmL32qtMYQL0isaECjwVvEZJPN3rebze6ePTnz9yUbWvGtHwwzzMOPbxg+hFfU1n74N72Q 34qIKnFCzvmMzWa/2Hm86xN4jcTS8EX74Q25fP6v5p3NssNRjkXD5CYHkAW0TmdSH2cy03vt dltj5/Gum/8GIADAsa871qbT6VvB/Z9h393J4khSLCiapprEpVw2m/G/AUrj2z65+8xpqvBU 1HccPTb0HweJRHLg0wOH8PfbUWNKt0u7NvmyCxdo/5hErqHn6cSNkdii6b/DxYPBQ3L3mW+v AYCtBBA6vjrS5q+r3zyaFM3RGU36qHFJpMqloiIziQhk1SKmcvrsw+dJqrFQzvC6FFy9ZlX2 6sC1WwAALJGIn/TX+aXBF4YcWO42BAZu3TCdeX1WM4kE0zTdkZTuQcDwcATkd9a+q0Sjke75 EyRJ4gQMrXYHKLJ4L5M3mGJyXRSwSMSX9twInTSIyoCDK22In6uqBpIk8XkAEc1aJFGSGOdP JqanGNqYqwxMvWiGx2K5kE4UFzgSMK7MGoap67pARMY8wOv13pmYmKh3yDI+Ho+Xj8dzNzmD KCKLIHG3ADADyK3JWHR97aJyTCYTemVl1WAJwERR/LF/4Ep4q98rqFY1YHKyAUcGnIscyEEI cqFQqHB5PO9vecvDfr5wLpNOp/rnv3Clr39oxZu1bVaLqK9cVqONxov1sXDIo6rqM+JUGxl/ sd3ldu/esUqEwet/clXRMBaLNdQsWXzh4YORrAAAsGPn9svDD+7v57nU1K6mgN0AsXKmyD/g KKypW1pRtc3vhnNnT1NgXYBNTk1KRKbEGGtpaFjXhyUrXadOrB4bG//D4/YUnM5y2V/nd1ZX V9t6ensePXn6SNXzxjdOl/2npi1NcG/4Pmx4byP98utFhq+Go+vUiX0A0BwKhTYCgObz+S4B QG9729HzwWCwExn/ck/LXrBay+D7s98BviZgbK6wlJW5zgEAWltbW1TN8sPc7kP4v3oJO6lm k2hPogUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38124899! smallJumpIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC5SURBVDjLY/j//z8DJZhh1ADs BjjsspIC4gb77ZZX7TdbXLVda9Zgs8xEihQDGmZfm/7/0KOD/3ff3/V/6plJ/y3mGjYQbYD9 NsurBx4e+D/10tT/nWc6/i+5sui/+RS9q0QbYLfB/OrWO1v+d5/p+t96qvn/3Auz/pt0aRNv gPVyk4appyf+X3xl4f/ZF2b+n3Co579+mSrxXrCcZyhlMV2/wbRP56pRq+ZV3SLlBq1EOanR lEgjAwAXIuIDq5qm/AAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38125468! smallJustifiedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/IfpheiEwTNEm5D6H9lmBLxFtAmR/3+h6YWY95xo E7z/o+uHwM9Em2D7/yeSzSAICdc/xJhAMLIA+V1VH3Z4v2kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38125924! smallLanguageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG/SURBVDjLjZK9T8JQFMVZTUyc 3IyJg4mDi87+GyYu6qB/gcZdFxkkJM66qJMGSNRBxDzigJMRQ1jQ4EcQ+SgVKB+FtuL13EdJ xNDq8Ev7Xu85797T51nwhqeAH5w6cAxWwDgReX7jwYfdaCIraroptB7NLlVQrOoiGEsL1G06 GZyxuILicsMUH3VTlOqGKNUMUdTacj+j1Nng0NGAT2WxYosK1bbIVVoiW27J9V8G57WWKVSc zMV5iK+Tudv1vVh5yXdlLQN+os4AFZss2Ob82CCgQmhYHSnmkzf2b6rIhTAaaT2aXZALIRdC LgRtkA1WfYG4iKcVYX52JIs7EYvFmJ8wGiEXQi6EXAhdyn2MxQaPcg68zIETTvzyLsPzWnwq ixVbhFwI3RFykes+A9vkIBKX4jCoIxdCLrI4/0OcUXXK4/1dbbDBS088xGGCCzAJCsiF2lan T8xdKNhHXvRarLFBqmcwCrbAhL32+kP3lHguETKRsNlbqUFPeY2OoikW62DNM+jf2ibzQNN0 g5ALC75AGiT59oIReQ+cDGyTB+TC4jaYGXiRXMTD3AFogVmnOjeDMRAC025duo7wH74BwZ8J lHrTPLcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38126850! smallLeftFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSYU/Ifphej8xbCLEaaAOBNS/yPbjIC3iHZD5P9faHqv k+gGbzQTYD76TLQbbP//hOqE6f5AvBsIRhYAysRMHy5Vf6kAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38127306! smallLoadProjectIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38128344! smallLockIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ/SURBVDjLbVJBaxNBGH2bpEkT mxi1NTRKTZtoQUHEWz0Igj2I4kG9eVNQhEBO7bEHc+yv8JAiHnr2B4gFqVrQRhObljQolBST JqZJdnZmfbNr2rU68DEz33zfm/fejGHbNrxjaWlpRCk1J6WcYZxkgPGTsWJZ1mIul/vlrTe8 AIVC4Qqbl5PJ5GQsFoPP5wP36PV6qNfr2OIg0L35+fm1fwDYPMLDj+l0OmOaJmq1Gjqdjr4d gUAAiUTCqSsWixvMXV5YWOjqvW+AxOSz8fHxjBAC5XJ5s91up7gO6tDrUqn0QwOTXYZSsoO+ wGDB5EwkEkGlUgGb7mSz2apHajWfz9+sVqvFVCrl1P4PYExr5m16vYUjQ+c0O11DtmN/ebD9 5pG9UpnGzl7Y0Xz30ir8toAtLdiWG0JIvFi76piaGG7g9plVTD/5YLgMCPLg/g0YtMTwhznf ApRBfsP6kAYJSKuN57Md5oXTsvHy7aEEfZMutHZfIRAahWGMsHAICMeZVsD+HmTrG8zudyhr H+HJLGyz7wEgRSh9k4nm+nvqPIb4xWuovV5k/2lMXJ9F8+s6ARqIpk6QsIQtTC+AcGTYpBqf vgBfcJTuKMi+xKfdMCZgIp6eRK8TYu2+w2oA4PwDm+5qVK218XmNLN7xxILqKfS7pGqTWekL muVtV65STs8hA73RqJQQP5+CP3KKACamHj7FlGBDawfH00kEW0MuA8o9AmA6qMrSHqwTIAoM 08hAkHkN0ES3UYfotBGdiNFu5cr2AmgJobOPET7nhxEMuU/o40soSjO7iHbbVNgnUen6pY0/ AOCTbC7PuV44H0f8Cetg5g9zP5aU7loDcfwGcrKyzYdvwUUAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38129525! smallNewIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weR goI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT 07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEs NBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKB gIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJx mAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt 7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxh B1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvr kn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38130385! smallObjectsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAInSURBVDjLhZPda9NQHIbzVwlW ryzthpWuIpWOieKYZXO2q1vC0KFr9aZM3Yr40QunspU2TVYmYhVRvNErwQtR3E0JTq3G2o80 mc0Ql9dzTr/SYdnFA8k5yft78nLCjcxJNwKzsuoOiZoj2GKsi3NS1I7y4hIA7n9wgQvyz4Ki WLphwNgyoRMq+jZ+MUyo1ToOR6Ra3wA6ua4b8F/2gL830WF8YRGB2VX4hBwOBEWrnxl3kGzQ yXzyLJbfLuL+uwQevr+Jk7EsiBn2MmMBdbJ58UEEKx9vYfVDE89MBtTsTVjA53iiy/XbeD4X RaluwhWSNRZQIYmeay6cSsYxfCmFwfMpEGW4wjk4gxm4J7IECd6IhOW7z/AlkYRaawXQbyuT tCOJAQzPp/bU9gtrLOBHrUECJI3bP5bWypoJx7l9cE+tMO0TsTuIpl90uCq+xJnoEtP2hUV8 Cp7G90orwMECGthQd5gynRxLPUWuoOOR8huPN//gyde/iMuvmLZvKgtlfBTFdsBgSNwslavQ iOIACaCF0ofzRQv5bzsd6BrV9obSyI8EUCw34JwkAcd4aWFoWn5N00ihFi30+HwaM5LCmM4U GH5SLtX28uvMtlg2mwH2U9UuNHBlDUKu2ANdo9pDwjqqpNQSOwdyrSegXeih0Rh7wQ5da2lb dDI5RBqxT/Qa2ArdUK1ddLV7/gX7jb1QzdhGjVAl10262n0D7IXSSbtpa9vf+QeB6/JTIb6V uwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38131452! smallOkIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38132343! smallOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLxZO7ihRBFIa/6u0Z W7GHBUV0UQQTZzd3QdhMQxOfwMRXEANBMNQX0MzAzFAwEzHwARbNFDdwEd31Mj3X7a6uOr9B tzNjYjKBJ6nicP7v3KqcJFaxhBVtZUAK8OHlld2st7Xl3DJPVONP+zEUV4HqL5UDYHr5xvuQ Ajgl/Qs7TzvOOVAjxjlC+ePSwe6DfbVegLVuT4r14eTr6zvA8xSAoBLzx6pvj4l+DZIezuVk G9fY2H7YRQIMZIBwycmzH1/s3F8AapfIPNF3kQk7+kw9PWBy+IZOdg5Ug3mkAATy/t0usovz GeCUWTjCz0B+Sj0ekfdvkZ3abBv+U4GaCtJ1iEm6ANQJ6fEzrG/engcKw/wXQvEKxSEKQxRG KE7Izt+DSiwBJMUSm71rguMYhQKrBygOIRStf4TiFFRBvbRGKiQLWP29yRSHKBTtfdBmHs0B UpgvtgF4yRFR+NUKi0XZcYjCeCG2smkzLAHkbRBmP0/Uk26O5YnUActBp1GsAI+S5nRJJJal 5K1aAMrq0d6Tm9uI6zjyf75dAe6tx/SsWeD//o2/Ab6IH3/h25pOAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38133236! smallPaintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG2SURBVDjLY/j//z8DJZgsTUdm CkodmSV7eO8EkQayNN8+WPry3YOV/3d2ib0nVbMsUPPrT8/3/n9+Nun/1hbxP6Rolr99sOTt Z6DmD7cLwZrXVUt5kKb5xb7/P17U/b+4xu4/UHMRUYEI1KwK1PwOpvnSOgeQ5vlExQJQs8at A8UfPr+EaL662QWk+diSPDlWnAZsWjufedOaORyHZ0lrgzR/ebkfrPnWbm+Q5odAzYJY0wFQ I+OmtXN5N62ZVbJpzYzrB2bIfX5zaxJY86NjYSDN34CaVbEmpN4lK5hWrJonBtS8ddOaeT82 rZn9b8vSmn87u6X+393n///gdKP/QM3OOFNi95Jlks0Ll6+bOG/l//OXzv7/8+ny/09PD/zf PD/vHtTmVJxJuXfxErbW+UuyG6Yu+T9t15X/rQt2/k/t2vK/ctKa/0Utk7YuyFeXxpsX6qcv Xdswe/3/tpXH/neuv/a/cu7J/9E9V//7Fi57n1w+QY1gZsppnfMvqWb6/8iSyf8Dcyb8907r +R+QO2tbbNHEIKJz46bF5SybFhVZbVqY17BpfqbEpnmpfJvmJfESYwAA/ZPGvT+K5AYAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38134147! smallPasteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH+SURBVDjLdZI7aFRREIa/k3u5 cclGwiXEF9GInSCIoF0qa1/BynJdyBYhtaRJSrsFK4XtBCGFQRALm4BYKQg2ti5JQEh2hay6 6ObMmbG49+4jSwYOc4rzfzP/nHFmBsCL6uWrwDfGo7PcaM5wQrjnjxduABvAnXJ6hkdr63Tb nwGYmr3Fy/Un/O3+AngFbC03mq+HATGwdfv+g4ul8jT++1fMjNDrAmBmLF6bZ+LcFczs4fs3 b+8CY4BLpfJpjn4fICo0N+tgBhht+4Ka4ff3ODV7ITFInHPOCt85ADRgIkzMnEWDYKb8aHf5 2fmHAbp/iNsTdlo9gJvOuQNg18w0BjBVVAT1PdT3wIxW65B7a++I4qTf7hKwIfKp0Wg8W1lZ qTvndnOAoMFjprn37ERxgvceEUFE8N6TpimVSmU1jmNqtVp9IgMEVDwmHg0BDYppBnPOEUUR URThnAMgSRKq1eoqMBcXAMRjQTFRVA2VDBBFUT9PTk7S6XQIIZCm6WCIpllVFUUlYGpYCCMd FHfnHCIy8o3ZEH3ARDEJqIKKDbYthxQWitwHZNUzgOYWig6GIcdBgz0IhnrNZ1BY0PG9z4WF pQLw0R8dLU6dn8+EqphCybf6j4YWb6R6AXj6YXt7GrjeFwA7rR5LJ4gAQgh/gOCG6cfaXQDm ODkCcPAfs2Qwc59hLO4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38135155! smallPrintIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsRAAALEQF/ZF+RAAAAB3RJTUUH1QgSDzULeviv6gAAAW5JREFUOMulk81OIlEQ hb9bsOAheuvMihAiszHyGOP4MNr+PIGa0WcQeAJ6x5olO3GnJiTNX2gSu2nuLVcgPfxN9CaV m7pJnTpV51z45jGrSb1RuwL8/6i7Pvn952Lttd6oaZIkOyOOY603arqoyW+Cb7fbW1tXKpVM vhGgWCx+zmhM5lbV3QDOOTqdDgAisgZULpf3M/A8DxHBGLMWexmoKq1Wa9lRRKhWq7tlPPfP rgC/UCjw4+AnzrkM/dXxjDF0n5+I4xjgesHAv/AvsdaSpuleE0wmx4gI9w9/fVldUrfbJUkS giBAVQnDkNFoxGAwYDgc0u/36fV6NJtN3l5fsjuIooj4/Z3xeEypVCIMQwDSNF1SB7DWMuiH xMksCyAiTKKIIGgynU4BmM/niDE4Z5lbi0iOfC7H0XF1swrWWg4rv/4xjOKcYq1FRJbyLpa8 BJjNZniet9VxCxVEBFXFOZcBeLy9uzn9wm9+/AC6aMvlGUG8HQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38135977! smallPrintItIcon "Private - Generated method" ^ icons at: #'smallPrintItIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintItIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38136295! smallPrintItIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVDjLpVLdS9NhFH724WbT WcpKiTUxWyJKRTdGURaSUt5URDcW3XYZ9AER1UXhTQT9CREE3URi1EUkaGhq5ZSgDzc1tWma Gzrd5m/v+55zurBy6u468MD54Dzn0yYi+B9xZhvxwWOPheWCiECYARYIrejCvKoTT/qbQuUb CISlZXNFC4QFIIYQrcIQ0rEPsBKR5N/kNQSxgaN3Xd6gHQzo+HOINmCtIUojz3cG1sJXWIkI +ZtC3uyi9tXqfD1/y15Q+hvEEESvIM93CioZxfJCBExctX4HdgCYe3/kbJ4n4ILNBUp9hhgC k4GjcD9Yp2AthEGZxebAyaHRnATC/MjlDUJMCmLMn5kN7O4AlueHoZLRa4HmoVe5rmCb7T1U 53D5+rz+E1CxdrDSEK3BlgVX6WnEI09EiNXDxQJ3yihc8aQzDmIIcSJ4fqTUKSTtLu9uCGk4 i5ogZCCGAAHEMIrLz9nEaHfm00v4fdW4MxVy3y7gtEPTQQBwCrM7Od2VyboxhBkP5ovcwgqK DZQhbC8JorqsDktWCpejffmWUbNvAdhyfeLEiz2d9xOe+uM1F0HCICYwBDOJKIoLtqF37A0G JrvYMqrEmWsxQlxvGQUSxkQ8As0GhjU0aSxmlrBvx2Ekddre/707voFgvK12MN+7C1YsDEMG pUUBGCaQMH4mJlFSWIbQjx70jHbPKYPGNSOMt9UWQuxLQoyrsTSWlRLFCpZRqPTV2A7sbMTH yXfoCL+eUQYN063yxbmu9X4m80uIK59dGktmx2rv2VM2+yZPZ7hjSjEapltleCVJ5B9GnlbV ZdvZqLiFVOCmQ7beQEW2/zeRQcHUmJPKOgAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38137597! smallPublishIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGdSURBVDjLlZNLSwJhFIa1Rb8i IWhRQUlluuoftDEtC5TKSgINily1CmoT0kJBqwlSaBGBLVxItGgZQQQVFe3bKN7wOjqO2tuc wRGvqAMPMzDf+8w5ZzgyADLhGhJQCWi6MCwwQBkJWVWg4jguVSqVKuVyGe0Q3sPtdruaJZJA Q+FcLgeWZWuk02kkk0lEIhFREg6H4fF4GiR0yUlABwqFAorFongnstksUqkUotGoKMjn86CP MAwjSloEFJYgAQUymQxisVhLS9WZyBsEQhu1A/RMfUutxONxsZJQKNRZ0Ey9hCqheSQSid4F 9RJqh2ZCor4EBM/z4lxIQvQtoCp2HtexfW+CObAM062uu4BCElSBJWjEzc8Vrr8Y6L3zvQso TKz6F+H7PAPz7oLRp8eodmSjp7/geDqG2b8Me9CK8zcnXK8O7AWsmDtUF9UHUw/1gr+2O8Bz sPm3YLvbhPPlBI7nI6xc6jC9P/Gr3B0flHZhVpgyKwQ6LpPFtwaTdwmGCy0MpwsVWsD6ZVKQ pNs6z9iV35PWsY/q6iso+w9crJoc0rRwaAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38138477! smallPushpinIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEZSURBVCjPY/jPgB9iEVoqPefl lFPdNk2GWBUsVpz9ctL1rkcNW/v+59VhKFgkPfP+xI0dF+uC/jPkWCR/Q1MwX2TGvf7Nretr /UG8BO2I5ygK5olP/dCzpWV+dVAhd+bB+JawrT7ICubIT3nbvaFpVkVqgVDa0diO4CneN91E 4Qpmq0560jW/YXp5XB5nyq2YrqCFno9cJeG+mKk48UHHjLruMu8czuSbkfUBizxeucrDw2GG ev/71uW1jMVrsq4nPIto8F/g8caFDymgetxbHlVLgDjxnWExPjPdb7sIoYRkk17FywJRECdY 1Xux201nMbSgLufO25qyJUY1yNrzsus9JxkscZHMG+kVcN7jqWueowARkUWiAgBEUvolGfpI TwAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38139179! smallQuestionIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKkSURBVDjLpZPdT5JhGMb9W+BP aK3matVqndXWOOigA6fmJ9DUcrUMlrN0mNMsKTUznQpq6pyKAm8CIogmypcg8GIiX8rHRHjh VbPt6o01nMvZWge/k3vP9duuZ/edAyDnf/hjoCMP2Vr3gUDj3CdV6zT1xZ6iFDaKnLEkBFOm PfaZArWT5sw60iFP+BAbOzTcQSqDZzsNRyCNkcVoaGghzDlVQKylOHJrMrUZ2Yf52y6kc36I xpyoH1lHF7EBgyMKV4jCJ5U/1UVscU4IZOYEa3I1HtwI01hwxlDLhDoJD/wxGr5YGmOLAdRI rVCuhmD3JdA6SQabx12srGB0KSpc86ew4olDOGjH4x4z0gdHDD9+c4TaQQtq+k2Yt0egXYug TmoVZgV9cyHSxXTtJjZR3WNCVfcK/NE0ppYDUNu2QTMCtS0IbrsOrVMOWL27eNJtJLOCDoWX dgeTEEosqPxoBK/TwDzWY9rowy51gJ1dGr2zLpS2aVH5QQ+Hbw88sZ7OClrGXbQrkMTTAQu4 HXqUv9eh7J0OSfo7tiIU+GItilpUuM/AF2tg98eR36Q+FryQ2kjbVhximQu8dgPKxPMoeTuH 4tfqDIWvCBQ2KlDQKEe9dBlGTwR36+THFZg+QoUxAL0jgsoOQzYYS+wjskcjTzSToVAkA7Hq g4Spc6tm4vgT+eIFVvmb+eCSMwLlih/cNg0KmpRoGzdl+BXOb5jAsMYNjSWAm9VjwesPR1kn FilPNMu510CkdPZtqK1BvJQsoaRZjqLGaTzv1UNp9EJl9uNqxefU5QdDnFNX+Y5Qxrn9bDLU R6zjqzsMizeWYdG5gy6ZDbk8aehiuYRz5jHdeDTKvlY1IrhSMUxe4g9SuVwpdaFsgDxf2i84 V9zH/us1/is/AdevBaK9Tb3EAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38140413! smallQuitIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z713 7p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/z nJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoG DA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwd EaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoF lV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfF Yy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29 X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6o oly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+ lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necA Ii3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8 yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38141517! smallRedoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCicVP7jtIQAAAdxJREFUOMudk01rE1EY hZ87X02MpEJMY4MfbTbVdtPSKn5UYw1CqThuRCuCuBpwrTvBv+B+Vt11KUQKhYrFUrpqpKgb wU11ISliTCZNmslkxs0YJ51Bgmf5Xp7Duee+F/qQbmqebmrTUWcS/WtbN7XCfxs8fmAAvNFN bS44FxFxB4A8sAhMAZMBA5aWTYAbRcNeDxnopnYBeD4ntFS2cHVYTY3mEAJVjmHZPyl9W+HK 6L0eExGAF4AXj/L58/JQTqrZZbzap550H5s1gK7JuT17VvjwBPDy4bXrN2OZM1iVdSxPI+7a AAw6DTbbzt/ihMSlkbssLZso/uzpnbPjk7F0lvqvdyRaDRI0GG5VeEUCR+rtOj14snsNBWBA 1WaPj02n49Z7svtVdqQEmiKoHYkz7kMXFTDrFpljp9lc/dDtQAHouG5GyIJUw2KrVPfWWpXQ 60xcPhGCu3vgdJzk0cZXtnd2WWu1LeAZMFU0bFE0bAHwNjkUgoFuB+w3q+5KXUjA/aJhrx5O 4MMzRcMuRW6iqsgHgBcF+wrBwQQbzb2yWpC9GKY2f9jkzzWiJAOM3ZbdLwft+q2Z3I/UbvmU 0NWtz687dj9/JLiJI8ACUAU2niTd7wK8+UWn8y+D39dLugVezzXeAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38142483! smallRemoteOpenIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIRSURBVDjLhZM7a5RBFIafme9b v2TjxkS8IN5SWGgKu8QmhYWFbf6DtT8kVoGAKQRBC8HextrGQhDBxoioSJSV7Gbdze53OTOv xV6yaogHXoY5HJ55z5kZJ4mjwjl3BTgPuHEKGBc3ga+SIpKOFLBSlmVhZppWnufa2traBJYA fxxg1cw0GAzU7XbVbrfVbDZlZur3+9re3t4EltwxLaya2WszI8aImVEUBYuLi5OaNE1vef4T SZLgvSdJErIso9Pp0Gq1DiEfXqy8nZlfXnZumiWePbjZHDkhSZKxK5xzmNkhwMlfv7z2uOac G81Y4BxXeXlxqh2SJME5N9lPAJhyYpkVPx4SygT8PM418MnC3zP5BzQEVM7HUGBFDUVRtd/T //6Rxm6TLztzSAFZCUR8fQEUSE6d5tLdpyOA04xCTjVwqDyg6omzaxsspheoz51k+pbGJ39+ vj7twJPOnmPhxj0ggoSIFDv36ac1UPhjuLPXHiGJEEIPCCmVpJAT++9Q6KDQRbZPYXWqQY7H hmACMQbK1i69vW/Ksuw20EwpkKIRq5/IOkOI7VOfdZC5oSMZqEKxot6oMZN5k/Rm2EIpOQKy FrL9oUIH4mAE66LwC4UDFHNQDjb5VKQqY9v6e/Wqd6JBbHipBrEBOoNCAZTID1fnA6HoSWUs DgF5sfFpe30VcQdH49h3LcC9Kol6Mk79BmoIbLI/IOsSAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38143520! smallRightFlushIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjSURBVCjPY/zPgB8wMVCqgAVE lP//x/AHDH+D4S8w/sWwl5GBgfE/MSZAQNL/31CdMHiGaBNS/yPbjIC3SHSD+3+EXoh5z4k2 wfs/qt2/ofAziW7Q+v8brhsSrn+IMYFgZAEAE0hMH/VkcbsAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38143977! smallSaveAsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTgPGbLEcAAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAACV0lEQVQ4y52ST0iTYRzHP+/b/DNz8s7h a1q2iZpIHSI0tgQND2mQROEhhMQiqFiNeepgYR4MIQPxIEWHpCCEFQVF3SKhg2Z5KLKDmmhZ huRwbqXb3vfXYbYSLcjP6XmeL8+H7/PjUc51XLg4Fc5X5+ajC0ABUAfsTFFl2Zb+/VtWWrSv v/NKK39BqfH3NLl2lLmcufrk7sIcv9Nu3ROJG4x+WeT10IA59nGWUvub7b3td2fWFXjbOntj obmzcVGZNTR+pOWwyZJCY+0+ivKz6b7/AuPTCK7U+fXut+Nt8cn05wkREZmYGpWh0Qnx3Xgi 7tNXJTA8LT1P30rDpZvybnJG/iQcDovP7xVLmsVga66LYDCIlpmLqixglSgAI+Oz6JkWvs4v 8n7iA1uyrKAACKmpqQBY4jEQUzBMk/rWW2s6Dk0GicUNugKDdAUGAXjccQIkkasAppiYhknP GQ8AzceO4HGXs7QUIc+mUumuoKmhHoDjNcWYhomI/BaICHa7Rn6Oi2unyunrf0CpqwAVBRUF d5mT2/ce0VhdyOHKCjI2Z6wWAITDYXRdx5lXkpR4dhVR4tpG952HNFYXcrTKja7rRKPR5BMt AKZpEolEANB1HV3X6T1vpeV6gOWYwcnaMpoPHUBVVUKhEJFIBJvNlvgHPr9XKsr3IqwM+D8Y fvUy0cDjrgSRFYOSmLAiIMrKNqEvKS5mfHwMQUH5U+BwOHg+8CwZCLKmzf6qGgCyHQ4QJZlb ADRNIz3d+s+6ml0DwK7ZV51bfi3qag+yERSf33sZaGNjtP8Elb70qz97tp0AAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38145319! smallSaveIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsKDTcPnirYvwAAAIx0RVh0Q29tbWVudABN ZW51LXNpemVkIGljb24KPT09PT09PT09PQoKKGMpIDIwMDMgSmFrdWIgJ2ppbW1hYycgU3Rl aW5lciwgCmh0dHA6Ly9qaW1tYWMubXVzaWNoYWxsLmN6CgpjcmVhdGVkIHdpdGggdGhlIEdJ TVAsCmh0dHA6Ly93d3cuZ2ltcC5vcmdnisdHAAAChElEQVQ4y52STUhUYRSGn7nd8ebP5Ezg tTHNkbJRbFFRNCYUuMgWRRQuQigsgoqpwVYtKspFEVQQBlK0KAoisCgoalvQIolEiqZFmVRq hqTo3JvO/flOC2Fssja9m/PB4Tyc9z1f4MjZ4yc/WxXa2LgzCVQBW4GGoCbZ0MKfPxYZzs27 58+d4B8KNHd07Y2trI9Vl5uDq2vKOqojhWttzyf9LcPr3ufqw9dR4pE3y7o77wz/FZA8fb7b nRo77InGqB9m2ihjgR6krWUjyysWc/n+C/yhPmIF43+b7yR5LCVfRgZERGTgc1p60wOSuvZE EgcvSM+rL9L19K20nrou7waH5XdZliWpjqTohu6ztDzGxMQE4ZJytMAkheIA0PdxFLNE5/t4 hvcDn1iyqBACAEJBQQEAuueCKMFXiu0nbszbsXdwAtfzudjzkos9LwF4fHYfyGxfA1CiUL6i 61AjAO27d9KYWMfMjE00pNGUWM/e1u0A7GlegfIVIjIHEBEikTAVZTEuHVjHzbsPiMeq0Aig ESBRX82te49o21zDjqb1FBUX5QMALMvCNE2qo7U5SOOq5dTGKrl8+yFtm2vYtSmBaZo4jpOz qAMopbBtGwDTNDFNk+6jhRy72kPW9dnfUk/7ti1omsbU1BS2bRMKheYAhmFQWVmZF96ahg08 u7IBANu2cRyH6enpeSHrAP39/bium9fwPA9d13PvPxWJRPIz8DyPdDrNyMgImUwGEUFEMAyD oaEhQqFQrlqWhWVZ+VdQSlFcXEQwGMx9EgDXdRE1CxM1ez7l+/kWwuEwpaWlRKNRALLZLEAu 7XhdHKUU8bo6lFIsiUZzlgOpjuQZ4DT/p85fkzszTNUiYm0AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38146719! smallScreenshotIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIrSURBVDjLxVPLjhJBFD3V3dCY SZjwDipDRjCOCcTgLGalJmxYufAD0E/QHV9g3LjSsGDhik/QjTEaTdgaEsQQINEFJjwEecmr 6Yf3lkJmPwsruXWrq+85dc+9VcJxHFxkKLjg0HgqlUpP1+t1drvdXrIsS2w2G9dqtXKzt21b 6Lpu+P3+N4VC4QnH5/P5U3Lfy+XyL1EsFg9VVZ1kMhmwHAJIa1Tf4eH96zC+vcKLDyfwRm6i 1Wo/Go/HLwnsJWPtZ2oikainUil/JBJBp9NBr9fDcDjE5aMTfPz8E835bdw6vQMhBLrd7gNF UXSPxwNN08RsNrur0alJr9eLer2OcDiMdDoNkgKSglAohEajgUqlgkAggGw2i36/j8lkImOa zeYNjQMHgwGCwSC2B0d4/n6FhSlgU366cOHe1Wvwz+eUfgucJQPb7Tai0aiUqvC0WCwQi8Xw +ouBjaPA4yJzK7AUFz79OJDA0WgkwYZhgAq8z1JjAqq2tN+Wm4AqNGouXw9Bk+G4QR2SxmCO 4zV7mQGz7Fh5OI79F0wkCpmqCCyXSxlzPoM9wS4DqijcjgHTJv22Q+k5ksiNFabTqQSapilJ OJ79noAZa7UaMoc9qOYSG9oziUSxlriy+YpqtbrXvSPZEWjMxidwewLjMc6Oj2VxOGBO1Wdi vhvJZFLusf54PC5lMYHI5XKPqa/P6EP3+XyCry4T8E/2BHDoEIdv6fmH92/9Vvz31/gHd9iU VZFEDKoAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38147793! smallSystemBrowserIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACoSURBVCjPY/jPAIMMCgxmYKiA EAOKwhmMDGZ//v/5/+M/qhI0BW/+gxQBlTDiUPDl/3v8Cn7//4VfwR/cVkB8kfI27S0WR+7r m/ui70X7i9YX88O7whtflANh7ouUPqgCBsbZLyBGAq1hRLBiX4BZiODBxgIpgAWPOYM/Bguk GCl4En9jsswYkIIHKIzBgiiABg9QGINlxoAUPEBhDJYZwhdmDDZYWAoAtTEEdnXdy7IAAAAA SUVORK5CYII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 38148347! smallUndoIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1gcaCg4AFiOWIQAAAhdJREFUOMuVk09okmEc x7/P877P1OX+6MYa0ojWwfIQFIRBgxUEQrBDeAiCYkRQXTuMPHgox4wdIrp0qVhBEDTpUCwW wVKMWnaKlLRoDXITXL4654bv6/M8HcKlm5Z9b88Xvp/neX7P9wGaKDoFiRakbjXm7qGXKcii RdHahd/HbExB1u0NtZr/cwK/j9k8TiPn9oaAwtXNa+ikJ8MFzYC2xcPJ7MXxCb1UCyBbw0Zu HCrVAIsXkBVwLgGI8pvZx18ZBXmVKHgCQeNHFaD4fazd4zRW3d4QjJ/XQShFuQyAL0JfT0Fb iUHKkjroOtFntii9NuRPD+yrvI5ExTIAKBMXhF4NU6r8pqoMUkoIwSGEgOBrKK+nYLKYyI6u XZ2dYu3Q7v36o0hUGPRlktnnQ16wjpMAAM51LHz7iMXvcaTTX+oGVtTisPe7YG5nB4ad3eHt MxgZw0LiJva4rkDwYl1YFO8ik2Uo6xw9jkv49Ha6dPxs2qoCQCBoaPAxOzCZc4+MAQBiM3fq 38tC4DpyGYXMA5jMOgiRal0PAkFDm00y+/yzyc3M0CjI0CgIgIOlvDyVmLv9vm/gHLjoAJHS hL/VuFGVw/fheDdN5eryDRF5aJPbmli7cyN/+DyWFGGVG8U4hGrPNwU0g0SnMNjtOCy07BIA 3Gr4mf6ho1079858jj2pHDujXftvgGzrt6Y+PH9Bde1p1fsFBRbiJSu+JBQAAAAASUVORK5C YII='! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38149395! smallUpdateIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMiSURBVDiNbVJNbFRlFD33e++V +a0zbQdbqLYKhhKmoaIzjX/RmEY3xGBYqLxEjJCB8LNhBxsMTQwRdGGi4AOjMUwlmDQBN/wE IZLUwqtx0dCS1NLGAUY7tB3ozLTz3vu+66LzkllwkpvcxT0nJ+dcYmb4SGWyzzTo2hEQ3vSk atWEmCfCuOPKEwAu2Jbp1t0eBHCCfIF0JrtF08RAT9cqfV1ns9HWFAGYUShWMDJ2v3xn+qEn Fe+2LfNselc2w4zvAMSImZHKZNcbuhjZ2tcdiseC0InQHA0gHNARDRkIGgIzxUUczw5XCsWK HQ019D4uVw1mNBEz49U9Z0/1rGv7NBgwxK3RHKquB0PX5JrVscW+9PPh3vWtpAmCEIRfrk2o t15sFwe+vuo4rmzRAYCZP7wzXRCup1gxLzLjM8eVZ8anZ5MT9+aPXu9o7tq3dVMoEQvh43e7 RC0GAqAEAEipwlXH85IvPPuDlOoRgEHbMvO2ZV7549uPXhqdLOzdfewS7j8sYXqmDKkYAAMA CyyvqumpSH9jJPBVZ/vKbgBTdWnruiZ2bnsn6XY+HUWicQU0Qb4D1mt38V8/37yAJ+O0J9Vr F4cnq1ftqSXfvOOqAAD2W6gCMGoErpvfAOwE4D5BWLct854v4J0/+r4GEJgZF+1/1Knzf+Wk VD22ZRbrWYezY6tK5aWO30fGbwCI6QBABBAR7v5XhiEYJwf/JABf1JNTmWyYiO72blx7Jj8z lwKgAagKABBEBAAdiRBWt4Tx5f63qa0lcuyVPT/fSmWy6ZrG9hWGrufyswfyheLrmkaubZmu WHZAeFxxcWFoij2P0b4yisM73gh90Jd8ubU5ci29a8A1dPGNVDI+92gBTY1B0oQYBAD/kaj/ x6Glidzc5KXhyc7Mlk3hRCyI7rUJeq49HiqWXfw7W4LjeBQJGjh3ebTiSXUEAJYfSTFN5OZO 3zy5LfmgsPBJ//c35o8P3CwN384jP1tG1ZUQRCjMl+S5y6OLUqmMbZljAOC38BOA7bZlci0w A8B7DYa2VzFvkFLFDV2bIcJQ1ZGHbMv82w/3fy5VdmoTZczGAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38150797! smallWarningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38151783! smallWindowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 38152582! testRunnerIcon "Private - Generated method" ^ icons at: #'testRunnerIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRunnerIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38152894! testRunnerIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjv Ym7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//d v9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bo ttSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQc b5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n 2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcD mHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZa UrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLR bOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38153789! toolsIcon "Private - Generated method" ^ icons at: #'toolsIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self toolsIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:57' prior: 38154086! toolsIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QkaDBM5i2PCSAAAAfBJREFUOMulkktoE2EU hb+Z+EyKTRQKgkqwzMaFtt1FrC40FGJm60JwIVSkqLUtElICFQNDQqBrQXRlQIriwomN0GJX gtI2iUkXFYJVadOXhiBERDozbmaGMR3rwrP7ueece++5P/wnBOcjnVGigArI8Vgi9xdNNJ1R bI7YUlT7r/YDqKaZq/j6tQHNbLQd6YxiNBp1I51RDPdaw6pFAcR0RolaZKur19vmZhwFePDw PvFYQgZyACKgDt4cMp4+mzAA9fatETbX15A6Jer1r/das4ndGRUsMYBgFW8MDBqatiXoum7o ukZhfk4ovC8CyDsFK7R0sBHpu0i5UmG59gUgGY8l7v7zjE68yr80SpUS3Sd7KJYLmBNMArqr QTCSOgzUrPeVkE7XCYmjR47RbDZ5N/cWtzU8TvH4cJi+UCcdAS/ZmU2Ot39LLn1eOtd9qoeA P8BKbfnyhfD5+emp11XAABCDkVQXUHs0JjNbXmS2vEjHQR8A5t5yLv8CSZI4e7rX+mR2HiJQ HB8OM/WmxJamI+7zs1Fv2iOaI8vZJ4850O7nTKgXYMxpAMDuXR72+A7x88cvsvkFgHCrSS6v Uv1Y/SNsEWBl4zv7fQHa9np4PvMBIPxpcnTaSTRNkmvrqwtA0r5CMJK6BEw4uNvEO+E3N+LV 9uq8VLwAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38155078! transcriptIcon "Private - Generated method" ^ icons at: #'transcriptIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self transcriptIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38155390! transcriptIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADPSURBVCjPdZFNCsIwEEZHPYdS z1DaHsMzuPM6RRcewSO4caPQ3sBDKCK02p+08DmZtGkKlQ+GhHm8MBmiFQUU2ng0B7khClTd QqdBiX1Ma1qMgbDlxh0XnJHiit2JNq5HgAo3KEx7BFAM/PMI0CDB2KNvh1gjHZBi8OR448Gn AkeNDEDvKZDh2Xl4cBcwtcKXkZdYLJBYwCCFPDRpMEjNyKcDPC4RbXuPiWKkNABPOuNhIteg z0pGFkD+y3p0s48DDB43dU7+eLWes3gdn5Y/LD9Y6skuWXcAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38155989! userIcon "Private - Generated method" ^icons at: #userIcon ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self userIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38156279! userIconContents "Private - Method generated with the content of the file /Users/MAC/Desktop/Dev/Resources/extras/famfamfam_silk_icons_v013/icons/user.png" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ3SURBVDjLpZNtSNNRFIcNKunF 1rZWBMJqKaSiX9RP1dClsjldA42slW0q5oxZiuHrlqllLayoaJa2jbm1Lc3QUZpKFmmaTMsa Rp+kMgjBheSmTL2//kqMBJlFHx44XM7vOfdyuH4A/P6HFQ9zo7cpa/mM6RvCrVDzaVDy6C5J JKv6rwSnIhlFd0R0Up/GwF2KWyl01CTSkM/dQoQRzAurCjRCGnRUUE2FaoSL0HExiYVzsQwc j6RNrSqo4W5Gh6Yc4+1qDDTkIy+GhYK4nTgdz0H2PrrHUJzs71NQn86enPn+CVN9GnzruoYR 63mMPbkC59gQzDl7pt7rc9f7FNyUhPY6Bx9gwt4E9zszhWWpdg6ZcS8j3O7zCTuEpnXB+3MN ZkUUZu0NmHE8XsL91oSWwiiEc3MeseLrN6woYCWa/Zl8ozyQ3w3Hl2lYy0SwlCUvsVi/Gv2J wITnYPDun2Hy6jYuEzAF1jUBCVYpO6kXo+NuGMeBAgcgfwNkvgBOPgUqXgKvP7rBFvRhE1cr p8Vq1noFYSlacVyqGk0D86gbART9BDk9BFnPCNJbCY5aCFL1Cyhtp0RWAp74MsKSrkq9guHy vfMTtmLc1togpZoyqYmyNoITzVTYRJCiXYBIQ3CwFqi83o3JDhX6C0M8XsGIMoQ4OyuRlq1D dZcLkmbgGDX1iIEKNxAcbgTEOqC4ZRaJ6Ub86K7CYFEo8Qo+GBQlQyXBczLZpbloaQ9k1NUz /kD2myBBKxRZpa5hVcQslalatoUxizxAVVrN3CW21bFj9F858Q9dnIRmDyeuybM71uxmH9BN BB1q6zybV7H9s1Ue4PM3/gu/AEbfqfWy2twsAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38157554! versionControlIcon "Private - Generated method" ^ icons at: #'versionControlIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self versionControlIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38157878! versionControlIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAA CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH1QYQEhgJtRvS4AAAAalJREFUOMutkjFoVEEQ hr/Z2913d8k9YgxBrhARBJEgSSOKTcTGUgkoh41YKJYRCzuvSCkepBGUFLEJaBUsBEUPtRT0 mohibIyYIipRouFd3tuxeDkVI3hRp5nZgf+b2ZmBfzQBaNTMMPBsk9qR8ZnQkkbNNIHRs1cX 9P38YxVbNqAAGCO5F0g+L2JKAxlpIi+e3jNzD6cB6hbg9OVWliy/MbOTp8Q7B8DaWhsfRQiC cw5TcPi4Wjh28Q5Lb5+z+8AYr1v3Ry2wQ4yYkKViCp405P1FvQMAVPqrIAaA6q59tFfeEShQ 2bINDdmwBfqSlQ+8fHKbkxemQLMNn1UFUAht0o+vSFY/4YoxABYoPro5IYePnoP0C2SroAHV DEKKash9WAdrYM/e/TyYvQ5o0QJ+cPuQYozgK0Dlx3pQJK+9/qYzX4ZGDrIw14ykUTOXgPpf nkG9cwd65MR5luebXaninYe4e+sK4zNBbCfpozI98dauAM5H3+OfACWI+7sCmKi4EeBKPdgu Aan7XQdxleB7/yDN9xGC/AKw5WvTE8fPbGb8XxO9wf+wb+DSh8wTKaW0AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38158780! warningIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gIQDictt+6SdwAAAehJREFUOMuVk8FKG2EU hb87mc40iTODEJlK7UZDxCCGQUqaMASCSGODdBe6ECJddOcwG/EJXBt0ZcBCwEVJVgWtr1AI PoBQXAQKhRZc1EBJMX831hLItPbAvYvL4Ttnc4UIhfDIgLcAA3jdgC/jfHoUwISjeXgOcAFH QHWcT4tI91KwWlhY0J6kUloKVkPw7g0wYS8NemJ3l0yzSRp0E/buBQihOAXFbLksej6Pns+T LZdlCoohFPmXdqB7AsNep6M8z1Oe56lep6NOYLgD3b82CGHFhaWM74vh+ziOg+M4GL5PxvfF haUQViIBJuxnwUgEAaJpWJaFZVmIppEIArJgmLA/FhDC+jSk5woFjFIJEcG2bWzbRkQwSiXm CgWmIR3C+gggBDGgsXibruk6IvKngQiarpMIAhbBMKARgsDtCuHVLLReLC8bk2dnEIuhlKLf 7wOQTCYREbi54WptjQ/n54NLqDfgnYQQewxXT8GaPz7mYbWKUgqlFLVaDYB2u42IICL8OD3l YmODLnz/DJOawGYczJlcjnilcmcUEVzXxXXdkVu8UmEmlyMOpsCmbMPXl5CaPThgol6/S/89 wAhARLhutbjc2uI9fJNDGD4DecD/6SfwEZT+CQ4H8GYi4i+idA3DHjR/AZfefQgctOETAAAA AElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38159761! windowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7 IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358 fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7G Zknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQ QpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoW REAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzU gbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBM bGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38160555! workspaceIcon "Private - Generated method" ^ icons at: #'workspaceIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self workspaceIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/9/2013 10:56' prior: 38160864! workspaceIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QoSFSUbRvzYGQAAAilJREFUOMt9k89LVFEU xz93fDMqZEGG0cLAEgpXrly1qEXLNu2C0mqRuggXQWCtgja1DkqwRWKC/gG1LSUIwqI0UCOd sRgrHX2Ome/dX6fFG2dGLQ8c7r3ccz/3ew7nqKHngweNsf3W2u44jhuMMVTcYmz1OXFn3XoU x4+11g8CpdT9o03Hek62tKYztXWAgPBP896xXiySX8o3jk+8vp1bzKYD4PqJltb0la5Opj9N s5+JJOTTbafo7enN5BazPYGI1CmV4svcHKMvH+HFISJ4cXjvEUnceUHE4b2j80I/qZRCRA4F FXnC1MdZwOG9lEDJ422QF8F5C4B1yVoF8DQ2NSTB3uOxeO/wJUBstgjXlwk3CwA453YCRISp DzP09d7l2cgTlgt5BME5SyH8SRRtJoFKJR/uAXihviHDqzcvuNHVR2FtmcGRh6wVfkGNpf5A bQlAKYVdAC+e2el5Vn/8oaP9HJmglveTnxHvy49Qle2eFBAgcNzsvsXw2ABvJycI0gqoKSlX OxS43UUE+Dr7jUtXL4IIKHg3PlO+0zrmzPn28tk5v6sGgPMuqZFKAdBxtq1KukKlUvsoECiu bv2/Davy31EDpZQGqW8+3szCwkK5XfezxiOHieIIpdTvANRwNjd/bWxsNNjYKBKGIWG4RhRF GGuw1mK3J9FarDVoo1lZKWjgaSDi7+SXvpPNzV82xmS01pVRNqYM2R5lrTVGm9hYOyQi9/4C 16KCF5hN9R0AAAAASUVORK5CYII='! ! !ThreadSafeTranscript class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37891763! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #transcriptIcon! ! !FinderUI class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37906596! icon ^ Smalltalk ui icons iconNamed: #smallFindIcon! ! !ProcessBrowser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37803836! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #processBrowserIcon! ! !ProcessBrowser class methodsFor: '*Polymorph-Widgets' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 37804075! theme ^ Smalltalk ui theme! ! !MCWorkingCopyBrowser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37872596! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #versionControlIcon! ! !TimeProfiler class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 12:11' prior: 38168018! taskbarIcon ^ Smalltalk ui icons smallProfileIcon! ! !Workspace class methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 1/21/2011 16:52' prior: 54960602! open ^ self openLabel: 'Workspace'! ! !Workspace class methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 1/21/2011 16:51' prior: 54960739! openLabel: aLabel ^ self new openLabel: aLabel ; yourself! ! !Workspace class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37895707! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #workspaceIcon! ! !ZnClientTests methodsFor: 'testing' stamp: 'MarcusDenker 5/15/2013 09:14' prior: 55389483! testRedirect | client response | self skip. client := ZnClient new url: 'http:/ci.pharo.org'. self assert: (client get; isSuccess). client close; maxNumberOfRedirects: 0; url: 'http:/ci.pharo.org'. self should: [ client get ] raise: ZnTooManyRedirects. client close. response := [ ZnClient new beOneShot; maxNumberOfRedirects: 0; get: 'http:/ci.pharo.org'; response ] on: ZnTooManyRedirects do: [ :exception | exception resume ]. self assert: response isRedirect ! ! !ZnClientTests methodsFor: 'testing' stamp: 'MarcusDenker 5/15/2013 09:14' prior: 55390071! testRedirectDontFollow | client | self skip. (client := ZnClient new) dontFollowRedirects; get: 'http://www.pharo-project.org'. self assert: client response isRedirect. client enforceHttpSuccess: true; get: 'http://www.pharo-project.org'. self assert: client response isRedirect. client close! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 5/14/2013 18:35' prior: 37357277! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! "Compiler"! "FamFam-Icons"! "Polymorph-TaskbarIcons"! "Polymorph-Widgets"! "Zinc-Tests"! Workspace class removeSelector: #taskbarIcon! ThreadSafeTranscript class removeSelector: #taskbarIcon! ProcessBrowser class removeSelector: #taskbarIcon! TimeProfiler class removeSelector: #taskbarIcon! FinderUI class removeSelector: #icon! ThemeIcons class removeSelector: #workspaceIcon! ThemeIcons class removeSelector: #versionControlIcon! ThemeIcons class removeSelector: #userIcon! ThemeIcons class removeSelector: #transcriptIcon! ThemeIcons class removeSelector: #toolsIcon! ThemeIcons class removeSelector: #testRunnerIcon! ThemeIcons class removeSelector: #smallPrintItIcon! ThemeIcons class removeSelector: #smallDebugItIcon! ThemeIcons class removeSelector: #scriptManagerIcon! ThemeIcons class removeSelector: #recentMessagesIcon! ThemeIcons class removeSelector: #processBrowserIcon! ThemeIcons class removeSelector: #changeSorterIcon! ThemeIcons class removeSelector: #calendarIcon! RecentMessageList class removeSelector: #icon! MCWorkingCopyBrowser class removeSelector: #taskbarIcon! ----End fileIn----! ----QUIT----an Array(15 May 2013 12:57:01 pm) Pharo.image priorSource: 4617433! ----STARTUP----an Array(15 May 2013 1:03:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 May 2013 1:03:44 pm) Pharo-30131.image priorSource: 4712483! ----STARTUP----an Array(15 May 2013 3:10:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Polymorph-Widgets"! !MCWorkingCopyBrowser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:49'! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #versionControlIcon! ! !RecentMessageList class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:50'! icon ^ Smalltalk ui icons iconNamed: #recentMessagesIcon! ! !FinderUI class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 14:19'! icon ^ Smalltalk ui icons iconNamed: #smallFindIcon! ! !TimeProfiler class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:51'! taskbarIcon ^ Smalltalk ui icons smallProfileIcon! ! !ThreadSafeTranscript class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:51'! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #transcriptIcon! ! !ProcessBrowser class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:50'! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #processBrowserIcon! ! !Workspace class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 5/15/2013 13:51'! taskbarIcon "Answer the icon for the receiver in a task bar." ^ Smalltalk ui icons iconNamed: #workspaceIcon! ! "Polymorph-TaskbarIcons"! ----End fileIn----! ----QUIT----an Array(15 May 2013 3:11:57 pm) Pharo.image priorSource: 4712680! ----STARTUP----an Array(15 May 2013 3:18:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 May 2013 3:18:25 pm) Pharo-30132.image priorSource: 4714323! ----STARTUP----an Array(15 May 2013 4:59:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/15/2013 16:57' prior: 38172164! commentForCurrentUpdate ^ '10618 loadin latest OpalCompilerTests makes CompilerTests dirty https://pharo.fogbugz.com/f/cases/10618'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/15/2013 14:20'! script229 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.458.mcz CompilerTests-MarcusDenker.151.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1433.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.250.mcz OpalCompiler-Tests-MarcusDenker.134.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.816.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-EstebanLorenzano.164.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/15/2013 16:57'! script230 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.458.mcz CompilerTests-MarcusDenker.155.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1433.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.273.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.816.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-EstebanLorenzano.71.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-EstebanLorenzano.164.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/15/2013 14:20'! update30132 "self new update30132" RPackageOrganizer initialize. self withUpdateLog: '10630 move FamFam package to Polymorph https://pharo.fogbugz.com/f/cases/10630 (second attempt)'. self loadTogether: self script229 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/15/2013 16:57'! update30133 "self new update30133" self withUpdateLog: '10618 loadin latest OpalCompilerTests makes CompilerTests dirty https://pharo.fogbugz.com/f/cases/10618'. self loadTogether: self script230 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCCompilerEvaluationTest commentStamp: 'StephaneDucasse 6/9/2010 20:54' prior: 0! This test is important since it covers a bug of during the debugging of super binding. It uses the class AverageCost/TotalCost and WeightedAverageCost.! !OCCompilerTest commentStamp: 'nice 12/3/2007 22:15' prior: 0! CompilerTest is a holder for SUnit test of Compiler! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 37283078! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCCompilerSyntaxErrorNotifyingTest commentStamp: 'nice 2/23/2012 22:09' prior: 0! A CompilerSyntaxErrorNotifyingTest is a specialization for testing correct handling of non interactive compiler notification. Non interactive is a very relative notion in Smalltalk... Here it means that user interaction will not happen directly in the TextEditor holding source code, but rather thru a SyntaxError window that will pop-up. This test intercept the Notification before the pop-up is raised. ! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 36541697! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! !IRPrimitive commentStamp: 'ajh 3/24/2003 21:35' prior: 0! I represent a primitive. I am more than just a number if I am a named primitive. Structure: num Primitive number. spec Stored in first literal when num is 117 or 120. ! !TotalCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 53274089! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !AverageCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 17788812! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !WeightedAverageCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 54854062! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !OCBytecodeDecompilerTest methodsFor: 'setUp - tearDown' stamp: 'MarcusDenker 5/13/2013 14:51'! setUp currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: OpalCompiler.! ! !OCBytecodeDecompilerTest methodsFor: 'setUp - tearDown' stamp: 'MarcusDenker 5/13/2013 14:51'! tearDown SmalltalkImage compilerClass: currentCompiler.! ! !OCClosureTests methodsFor: 'utilities' stamp: 'StefanMarr 3/16/2012 01:36'! assertValues: anArray | values | values := collection collect: [ :each | each value ]. self assert: anArray asArray = values asArray description: ['Expected: ' , anArray asArray printString , ', but got ' , values asArray printString]! ! !OCClosureTests methodsFor: 'testing' stamp: 'lr 3/11/2009 17:35'! methodArgument: anObject ^ [ anObject ] ! ! !OCClosureTests methodsFor: 'running' stamp: 'lr 3/9/2009 16:48'! setUp super setUp. collection := OrderedCollection new! ! !OCClosureTests methodsFor: 'testing' stamp: 'lr 3/11/2009 17:33'! testBlockArgument | block block1 block2 | block := [ :arg | | temp | temp := arg. [ temp ] ]. block1 := block value: 1. block2 := block value: 2. self assert: block1 value = 1. self assert: block2 value = 2! ! !OCClosureTests methodsFor: 'testing' stamp: 'lr 3/11/2009 17:33'! testBlockTemp | block block1 block2 | block := [ :arg | [ arg ] ]. block1 := block value: 1. block2 := block value: 2. self assert: block1 value = 1. self assert: block2 value = 2! ! !OCClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25'! testEmptyBlockOneArgument self assert: (self class compiler evaluate: '[ :a ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a | ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a | | t | ] value: 1') isNil description: 'Empty blocks in ST-80 should return nil'! ! !OCClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25'! testEmptyBlockTwoArguments self assert: (self class compiler evaluate: '[ :a :b ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a :b | ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ :a :b | | t | ] value: 1 value: 2') isNil description: 'Empty blocks in ST-80 should return nil'! ! !OCClosureTests methodsFor: 'testing-empty' stamp: 'MarcusDenker 5/2/2013 11:25'! testEmptyBlockZeroArguments self assert: (self class compiler evaluate: '[ ] value') isNil description: 'Empty blocks in ST-80 should return nil'. self assert: (self class compiler evaluate: '[ | t | ] value') isNil description: 'Empty blocks in ST-80 should return nil'! ! !OCClosureTests methodsFor: 'testing' stamp: 'sd 6/8/2012 23:31'! testIsClean | local | local := #testIsClean. self assert: [] isClean. "closes over nothing at all" self assert: [:a :b| a < b] isClean. "accesses only arguments" self assert: [:a :b| | s | s := a + b. s even] isClean. "accesses only local variables" self deny: [^nil] isClean. "closes over home (^-return)" self deny: [self] isClean. "closes over the receiver" self deny: [collection] isClean. "closes over the receiver (to access the inst var collection)" self deny: [local] isClean. "closes over local variable of outer context"! ! !OCClosureTests methodsFor: 'testing' stamp: 'lr 3/11/2009 17:36'! testMethodArgument | temp block | temp := 0. block := [ [ temp ] ]. temp := 1. block := block value. temp := 2. self assert: block value = 2! ! !OCClosureTests methodsFor: 'testing' stamp: 'lr 3/11/2009 17:36'! testMethodTemp | block1 block2 | block1 := self methodArgument: 1. block2 := self methodArgument: 2. self assert: block1 value = 1. self assert: block2 value = 2! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoArgument 1 to: 5 do: [ :index | collection add: [ index ] ]. self assertValues: #(1 2 3 4 5)! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoArgumentNotInlined | block | block := [ :index | collection add: [ index ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoInsideTemp 1 to: 5 do: [ :index | | temp | temp := index. collection add: [ temp ] ]. self assertValues: #(1 2 3 4 5)! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoInsideTempNotInlined | block | block := [ :index | | temp | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoOutsideTemp | temp | 1 to: 5 do: [ :index | temp := index. collection add: [ temp ] ]. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-todo' stamp: 'lr 3/10/2009 14:51'! testToDoOutsideTempNotInlined | block temp | block := [ :index | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:29'! testWhileModificationAfter | index | index := 0. [ index < 5 ] whileTrue: [ collection add: [ index ]. index := index + 1 ]. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:29'! testWhileModificationAfterNotInlined | index block | index := 0. block := [ collection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:29'! testWhileModificationBefore | index | index := 0. [ index < 5 ] whileTrue: [ index := index + 1. collection add: [ index ] ]. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:29'! testWhileModificationBeforeNotInlined | index block | index := 0. block := [ index := index + 1. collection add: [ index ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:52'! testWhileWithTemp | index | index := 0. [ index < 5 ] whileTrue: [ | temp | temp := index := index + 1. collection add: [ temp ] ]. self assertValues: #(1 2 3 4 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'StephaneDucasse 7/3/2010 22:21'! testWhileWithTempIsNil "self debug: #testWhileWithTempIsNil" | index | index := 0. [ index < 5 ] whileTrue: [ | temp | collection add: temp. temp := index := index + 1. collection add: temp]. self assertValues: #(nil 1 nil 2 nil 3 nil 4 nil 5)! ! !OCClosureTests methodsFor: 'testing-while' stamp: 'lr 3/10/2009 14:53'! testWhileWithTempNotInlined | index block | index := 0. block := [ | temp | temp := index := index + 1. collection add: [ temp ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(1 2 3 4 5)! ! !OCCompilerEvaluationTest commentStamp: 'StephaneDucasse 6/9/2010 20:54' prior: 38289361! This test is important since it covers a bug of during the debugging of super binding. It uses the class AverageCost/TotalCost and WeightedAverageCost.! !OCCompilerEvaluationTest methodsFor: 'helper methods' stamp: 'carlaGriggio 5/22/2010 21:24'! method ^self methodContext method asString ! ! !OCCompilerEvaluationTest methodsFor: 'helper methods' stamp: 'StephaneDucasse 6/9/2010 20:55'! methodContext | process | process := [ self weightedAverage total ] newProcess. [ process step ] doWhileTrue: [ process suspendedContext method selector ~= #total ]. ^ process suspendedContext! ! !OCCompilerEvaluationTest methodsFor: 'setup' stamp: 'StephaneDucasse 6/9/2010 20:55'! setUp weightedAverage := WeightedAverageCost new ! ! !OCCompilerEvaluationTest methodsFor: 'testing' stamp: 'ClementBera 5/14/2013 13:26'! testEvaluationOfInlinedToDo "Whether inlined or not, #to:do: should return the same value" | inlinedResult notInlinedResult | inlinedResult := OpalCompiler new source: '1+1 to: 0 do: [:i | ]'; failBlock: [^ #failedDoit]; evaluate. notInlinedResult := OpalCompiler new source: '| aBlock | aBlock := [:i | ]. 1+1 to: 0 do: aBlock'; failBlock: [^ #failedDoit]; evaluate. self assert: inlinedResult = notInlinedResult! ! !OCCompilerEvaluationTest methodsFor: 'testing' stamp: 'PavelKrivanek 11/8/2012 12:32'! testEvaluationOfSelfSend "Tests the evaluation of an inherited method that uses super send and self send" "self debug: #testEvaluationOfSelfSend" | result | result := Compiler new evaluate: (self method copyFrom: 6 to: self method size) in: self methodContext to: nil notifying: nil ifFail: [^ #failedDoit] logged: true. self assert: result = (6250 / 3)! ! !OCCompilerEvaluationTest methodsFor: 'helper methods' stamp: 'carlaGriggio 5/23/2010 20:18'! weightedAverage ^weightedAverage ! ! !OCCompilerTest commentStamp: 'nice 12/3/2007 22:15' prior: 38289578! CompilerTest is a holder for SUnit test of Compiler! !OCCompilerTest methodsFor: 'running' stamp: 'ClementBera 5/14/2013 13:54'! compile ^ self compileWithFailBlock: [^ nil]! ! !OCCompilerTest methodsFor: 'running' stamp: 'ClementBera 5/14/2013 13:54'! compileWithFailBlock: aBlock ^ OpalCompiler new source: text; class: MockForCompilation; requestor: self; failBlock: aBlock; translate ! ! !OCCompilerTest methodsFor: 'mocking' stamp: 'JorgeRessia 3/4/2010 12:48'! initializeErrorMessage errorMessage := nil. errorLocation := nil. errorSource := nil! ! !OCCompilerTest methodsFor: 'mocking' stamp: 'JorgeRessia 3/4/2010 12:49'! interactive ^interactive! ! !OCCompilerTest methodsFor: 'mocking' stamp: 'JorgeRessia 3/4/2010 12:49'! notify: aString at: aSmallInteger in: aReadStream errorMessage := aString. errorLocation := aSmallInteger. errorSource := aReadStream. ! ! !OCCompilerTest methodsFor: 'running' stamp: 'EstebanLorenzano 8/3/2012 15:28'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ] ! ! !OCCompilerTest methodsFor: 'running' stamp: 'simon.denier 6/11/2010 14:24'! setUp originalTranscript := Transcript. newTranscript := MockTranscript new. Smalltalk globals at: #Transcript put: newTranscript. ! ! !OCCompilerTest methodsFor: 'running' stamp: 'simon.denier 6/11/2010 14:24'! tearDown Smalltalk globals at: #Transcript put: originalTranscript. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 13:47'! testEmptyCharacterFail interactive := true. self initializeErrorMessage. self flag: 'opal returns nil, old compiler a character was expected'. "self compile: 'test $' failBlock: [^nil]. self fail." ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 13:56'! testInBlockArgumentInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'temp [:var1 | ]'. self compile. self assert: (errorMessage = 'Name already defined --> '). self assert: (errorLocation = 8). self assert: (errorSource contents = 'temp [:var1 | ]'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 13:56'! testInBlockTempArgumentShadowing interactive := true. self initializeErrorMessage. text := 'temp [:temp | |temp|]'. self compileWithFailBlock: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 16). self assert: (errorSource contents = 'temp [:temp | |temp|]'). ^nil]. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 14:00'! testInBlockTempInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'temp [:temp | |var1|]'. self flag: 'display menu instead of going into failblock' "self compileWithFailBlock: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 16). self assert: (errorSource contents = 'temp [:temp | |var1|]'). ^nil]. self fail." ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 14:01'! testInBlockTempShadowing interactive := true. self initializeErrorMessage. text := 'temp |var2| [:temp| |var2|]'. self flag: 'display menu instead of going into failblock' "self compileWithFailBlock: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 22). self assert: (errorSource contents = 'temp |var2| [:temp| |var2|]'). ^nil]." ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 14:02'! testInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'var1 |var1|'. self flag: 'display menu instead of going into failblock' "self compileWithFailBlock: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 7). self assert: (errorSource contents = 'var1 |var1|'). ^nil]. self fail." ! ! !OCCompilerTest methodsFor: 'literals' stamp: 'ClementBera 5/14/2013 14:03'! testNegativeZero self assert: (OpalCompiler evaluate: '-0.0') hex = Float negativeZero hex.! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'ClementBera 5/14/2013 14:12'! testNoShadowing interactive := true. self initializeErrorMessage. text := 'temp |var2|'. self flag: 'display menu instead of going into failblock' "self compileWithFailBlock: [ self fail. ^nil ]. " ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'jb 7/1/2011 10:44'! testNotInteractiveInBlockArgumentInstanceVariableShadowing self initializeErrorMessage. (Compiler new compile: 'temp [:var1 | ]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'jb 7/1/2011 10:44'! testNotInteractiveInBlockTempArgumentShadowing "This test is not completely correct in the sense that it is still interactive. I have to introduce self ( then is interactive) in order to be able to test it" interactive := true. self initializeErrorMessage. (Compiler new compile: 'temp [:temp | |temp|]' in: MockForCompilation classified: nil notifying: self ifFail: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 16). self assert: (errorSource contents = 'temp [:temp | |temp|]'). ^nil]). self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'jb 7/1/2011 10:44'! testNotInteractiveInBlockTempInstanceVariableShadowing self initializeErrorMessage. (Compiler new compile: 'temp [:temp | |var1|]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'jb 7/1/2011 10:44'! testNotInteractiveInBlockTempShadowing "This test is not completely correct in the sense that it is still interactive. I have to introduce self ( then is interactive) in order to be able to test it" interactive := true. self initializeErrorMessage. (Compiler new compile: 'temp |var2| [:temp| |var2|]' in: MockForCompilation classified: nil notifying: self ifFail: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 22). self assert: (errorSource contents = 'temp |var2| [:temp| |var2|]'). ^nil]). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'jb 7/1/2011 10:44'! testNotInteractiveNoShadowing self initializeErrorMessage. (Compiler new compile: 'temp |var2|' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'JorgeRessia 3/4/2010 21:46'! testNotInteractiveShadowingOfTemp "This test is not completely correct in the sense that it is still interactive. I have to introduce self ( then is interactive) in order to be able to test it" self initializeErrorMessage. interactive := false. (Compiler new compile: 'temp |temp1 temp1| ' in: MockForCompilation classified: nil notifying: self ifFail: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 13). self assert: (errorSource contents = 'temp |temp1 temp1| '). ^nil]). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'JorgeRessia 3/4/2010 21:51'! testNotInteractiveSiblingBlocksInstanceVariableShadowing self initializeErrorMessage. (Compiler new compile: 'temp [:temp | ].[:temp | |var1|]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'JorgeRessia 3/4/2010 21:51'! testNotInteractiveSiblingBlocksTempShadowing self initializeErrorMessage. (Compiler new compile: 'temp [:temp | ]. [:temp | ]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'lr 3/8/2010 15:11'! testReservedNameAsBlockArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | Compiler new compile: 'temp ^ [ :' , each , ' | ^ ' , each , ' ]' in: MockForCompilation classified: nil notifying: self ifFail: [ exit value ]. self fail ] valueWithExit. self assert: errorMessage = 'Name is already defined ->'. self assert: errorLocation = 11 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'lr 3/8/2010 15:10'! testReservedNameAsMethodArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | Compiler new compile: 'temp: ' , each , ' ^ ' , each in: MockForCompilation classified: nil notifying: self ifFail: [ exit value ]. self fail ] valueWithExit. self assert: errorMessage = 'Name is already defined ->'. self assert: errorLocation = 7 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'TestRunner 3/8/2010 15:10'! testReservedNameAsTempShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | Compiler new compile: 'temp | ' , each , ' | ^ ' , each in: MockForCompilation classified: nil notifying: self ifFail: [ exit value ]. self fail ] valueWithExit. self assert: errorMessage = 'Name is already defined ->'. self assert: errorLocation = 8 ]! ! !OCCompilerTest methodsFor: 'literals' stamp: 'nice 12/3/2007 22:20'! testScaledDecimalLiterals "Equal ScaledDecimal with different scales should use different slots This is related to http://bugs.squeak.org/view.php?id=6797" "This correctly works when evaluated separately" self deny: (Compiler evaluate: '0.5s1') scale = (Compiler evaluate: '0.5s2') scale. "But not when evaluated together if literal reduction is too agressive" self deny: (Compiler evaluate: '0.5s1 scale = 0.5s2 scale').! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'JorgeRessia 3/4/2010 12:55'! testSiblingBlocksInstanceVariableShadowing interactive := true. self initializeErrorMessage. (Compiler new compile: 'temp [:temp | ].[:temp | |var1|]' in: MockForCompilation classified: nil notifying: self ifFail: [ self assert: (errorMessage = 'Name is already defined ->'). self assert: (errorLocation = 27). self assert: (errorSource contents = 'temp [:temp | ].[:temp | |var1|]'). ^nil]). self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'CamilleTeruel 1/10/2013 14:42'! testSiblingBlocksTempShadowing interactive := true. self initializeErrorMessage. (Compiler new compile: 'temp [:temp | ]. [:temp | ]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'JorgeRessia 3/13/2010 16:16'! testTraitTempShadowing self initializeErrorMessage. Compiler new compile: 'testReplaceFromToWithStartingAt | result repStart collection replacementCollection firstIndex secondIndex | replacementCollection := 1.' in: ArrayTest classified: nil notifying: nil ifFail: [self fail.]. self assert: ( newTranscript contents = '').! ! !OCCompilerTest methodsFor: 'mocking' stamp: 'ClementBera 5/14/2013 13:50'! text ^ text! ! !IRBytecodeGenerator methodsFor: 'initialize' stamp: 'MarcusDenker 5/15/2013 08:27'! irPrimitive: anIrPrimitive literals isEmpty ifFalse: [self error: 'init prim before adding instructions']. anIrPrimitive spec ifNotNil: [literals add: anIrPrimitive spec]. primNum := anIrPrimitive num. ! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/14/2013 16:32'! asPragma ^ Pragma keyword: selector arguments: (arguments collect: [ :each | each value ]) asArray! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/14/2013 17:02'! asPrimitive | args module name spec | args := (self arguments collect: [ :each | each value ]) asArray. self isPrimitive ifFalse: [ IRPrimitive null ]. args first isString ifTrue: [ name := args first. module := args at: 2 ifAbsent: [ nil ]. spec := {(module ifNotNil: [ module asSymbol ]). name asSymbol. 0. 0}. ^ IRPrimitive new num: 117; spec: spec; yourself ] ifFalse: [ ^ IRPrimitive new num: args first; spec: nil; yourself ]! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/14/2013 13:48'! isCompilerOption ^ self selector = #compilerOptions:! ! !OCBC2IR2BCSymbolic methodsFor: 'tests' stamp: 'MarcusDenker 5/15/2013 16:52' prior: 35106259! testExampleInlineBlockCollectionLR3 | aMethod newMethod | aMethod := OCOpalExamples>>#exampleInlineBlockCollectionLR3. newMethod := (aMethod ir) compiledMethodWith: aMethod trailer. self assert: aMethod abstractSymbolic = newMethod abstractSymbolic.! ! !OpalCompiler class methodsFor: 'options' stamp: 'MarcusDenker 5/15/2013 11:13' prior: 37277496! defaultOptions ^ #( "by default we inline all optimized constructs" + optInlineIf + optInlineIfNil + optInlineAndOr + optInlineWhile + optInlineToDo + optInlineCase - optIlineNone "to turn off all. Overrides the others" - optLongIvarAccessBytecodes "special for Contexts" - optOptimizeIR "disabled for now" )! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 14:36'! compilationContext ^ compilationContext! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 14:36'! compilationContext: anObject compilationContext := anObject! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/15/2013 16:52' prior: 37278227! compile ^self translate generate ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/15/2013 15:01' prior: 37353675! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context == nil ifTrue: [ receiver class ] ifFalse: [ context method methodClass ]). self noPattern: true. selectedSource := ((compilationContext requestor respondsTo: #selection) and: [ (itsSelection := compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := compilationContext interactive ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !OpalCompiler methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/13/2013 14:34' prior: 37281335! initialize super initialize. compilationContext := CompilationContext default! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/15/2013 15:00' prior: 37356624! translate [ ast := self parse. self doSemanticAnalysis. ast generate ] on: SyntaxErrorNotification do: [ :ex | compilationContext requestor ifNotNil: [ compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode ]. ^ failBlock value ]. ^ ast! ! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 5/14/2013 10:07'! compilationContext: aCompilationContext ir compilationContext: aCompilationContext! ! !IRBuilder methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/14/2013 17:10'! irPrimitive: primNode ir irPrimitive: primNode! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/13/2013 13:50' prior: 35550441! visitMethodNode: aMethodNode scope := scope newMethodScope. aMethodNode scope: scope. scope node: aMethodNode. aMethodNode arguments do: [:node | (self declareVariableNode: node) markArg]. aMethodNode pragmas do: [:each | self visitNode: each]. self visitNode: aMethodNode body. scope := scope outerScope. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/14/2013 16:32'! visitPragmaNode: aPragmaNode super visitPragmaNode: aPragmaNode. aPragmaNode isCompilerOption ifTrue: [ aPragmaNode asPragma sendTo: aPragmaNode methodNode compilationContext ].! ! !IRTranslator methodsFor: 'interpret' stamp: 'MarcusDenker 5/14/2013 17:07' prior: 34869436! interpret: anIr self pushScope: anIr. anIr optimize. gen irPrimitive: anIr irPrimitive. gen numArgs: anIr numArgs. gen properties: anIr properties. gen numTemps: (anIr tempMap size). gen additionalLiterals: anIr additionalLiterals. gen forceLongForm: anIr forceLongForm. super interpret: anIr. ! ! !CompilationContext class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/13/2013 14:33'! default ^ self new parseOptions: OpalCompiler defaultOptions! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 13:52'! compilerOptions: anArray self parseOptions: anArray! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 14:12'! environment ^ environment! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 14:12'! environment: anObject environment := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 14:54' prior: 37274780! interactive ^ interactive ifNil: [ false ]! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:33'! optIlineNone ^ options includes: #optIlineNone ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineAndOr ^ options includes: #optInlineAndOr ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineCase ^ options includes: #optInlineCase ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineIf ^ options includes: #optInlineIf ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineIfNil ^ options includes: #optInlineIfNil ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineToDo ^ options includes: #optInlineToDo ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 15:32'! optInlineWhile ^ options includes: #optInlineWhile ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/14/2013 10:34'! optLongIvarAccessBytecodes ^ options includes: #optLongIvarAccessBytecodes ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/15/2013 11:14'! optOptimizeIR ^ options includes: #optOptimizeIR ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/13/2013 17:00' prior: 36054389! doSemanticAnalysis self doSemanticAnalysisInContext: self compilationContext! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/13/2013 17:00' prior: 36054559! doSemanticAnalysisIn: behavior self doSemanticAnalysisInContext: self compilationContext! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/14/2013 13:17' prior: 37357516! doSemanticAnalysisInContext: aCompilationContext "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." self flag: #FIXME. "We need to store the class just in the context" aCompilationContext getClass ifNotNil: [self methodClass: aCompilationContext getClass] ifNil: [aCompilationContext class: self methodClass ]. OCASTSemanticAnalyzer new scope: aCompilationContext getClass parseScope; errorNotification: aCompilationContext interactive; compilationContext: aCompilationContext; requestor: aCompilationContext requestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/13/2013 15:59' prior: 36056047! generateIR | ir | scope ifNil: [self doSemanticAnalysisInContext: self compilationContext ]. ir := (OCASTTranslator new visitNode: self) ir. self ir: ir. ^ir! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/14/2013 17:03' prior: 36057307! primitiveFromPragma | aPragmaPrimitive | pragmas isNil ifTrue: [ ^ IRPrimitive null ]. aPragmaPrimitive := pragmas detect: [ :each | each isPrimitive ] ifNone: [ ]. aPragmaPrimitive ifNil: [ ^ IRPrimitive null ] ifNotNil: [ ^ aPragmaPrimitive asPrimitive ]! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:34' prior: 34739774! isInlineAndOr self methodNode compilationContext optInlineAndOr ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(and: or:) includes: self selector) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each isBlock ]) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each arguments isEmpty ]) ifFalse: [ self notify: 'and: (or:) takes zero-arg block'. ^ false ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:34' prior: 34740252! isInlineCase self methodNode compilationContext optInlineCase ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(caseOf: caseOf:otherwise:) includes: self selector) ifFalse: [^ false]. self arguments size = 2 ifTrue: [ "otherwise block" self arguments last isBlock ifFalse: [^ false]]. self arguments first isArray ifFalse: [^ false]. self arguments first statements do: [:assoc | (assoc isMessage and: [assoc selector == #->]) ifFalse: [^ false]. assoc receiver isBlock ifFalse: [^ false]. assoc receiver arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks'. ^ false]. assoc arguments first isBlock ifFalse: [^ false]. assoc arguments first arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks']. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:35' prior: 34741055! isInlineIf self methodNode compilationContext optInlineIf ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ self notify: 'ifTrue:ifFalse: takes zero-arg blocks'. ^ false ] ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:35' prior: 34741554! isInlineIfNil | assertNone assertOneOrNone | self methodNode compilationContext optInlineIfNil ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifNil: ifNotNil: ifNil:ifNotNil: ifNotNil:ifNil:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. assertNone := [:block | block arguments isEmpty ifFalse: [self notify: 'ifNil: takes zero-arg block'. ^ false] ]. assertOneOrNone := [:block | block arguments size > 1 ifTrue: [self notify: 'ifNotNil: takes zero- or one-arg block'. ^ false] ]. self selector == #ifNil: ifTrue: [assertNone value: self arguments first]. self selector == #ifNil:ifNotNil: ifTrue: [assertNone value: self arguments first. assertOneOrNone value: self arguments last]. self selector == #ifNotNil: ifTrue: [assertOneOrNone value: self arguments first]. self selector ==#ifNotNilDo: ifTrue: [assertOneOrNone value: self arguments first]. self selector == #ifNotNil:ifNil: ifTrue: [assertOneOrNone value: self arguments first. assertNone value: self arguments last]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:35' prior: 34742720! isInlineToDo | block step | self methodNode compilationContext optInlineToDo ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(to:do: to:by:do:) includes: self selector) ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size = 1 ifFalse: [ self notify: 'to:do: block must take one arg'. ^ false]. self arguments first isVariable ifTrue: [ (RBParseTreeSearcher new matches: self arguments first name , ' := `@object' do: [:n :a | true]; executeTree: block initialAnswer: false) ifTrue: [^ false]. ]. self arguments size = 3 "to:by:do:" ifTrue: [ step := self arguments second. step isLiteral ifFalse: [^ false]. step value = 0 ifTrue: [^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/14/2013 15:35' prior: 34743532! isInlineWhile self methodNode compilationContext optInlineWhile ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(whileFalse: whileTrue: whileFalse whileTrue) includes: self selector) ifFalse: [^ false]. self receiver isBlock ifFalse: [^ false]. self receiver arguments isEmpty ifFalse: [self notify: 'while receiver block must have no arguments'. ^ false]. self arguments isEmpty ifFalse: [ self arguments first isBlock ifFalse: [^ false]. self arguments first arguments isEmpty ifFalse: [self notify: 'while takes a zero-arg block as its argument'. ^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/15/2013 09:24' prior: 35649224! isInlined self methodNode compilationContext optIlineNone ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineCase ifTrue: [^true]. ^false.! ! !IRBuilderTest class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/13/2013 14:47'! compilerClass ^ OpalCompiler! ! !IRBytecodeDecompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/14/2013 17:07' prior: 34723420! decompile: aCompiledMethod instructionStream := InstructionStream on: aCompiledMethod. irBuilder := IRReconstructor new. scopeStack := Stack new. self pushScope: #() numArgs: aCompiledMethod numArgs. irBuilder irPrimitive: aCompiledMethod irPrimitive. irBuilder properties: aCompiledMethod properties copy. irBuilder numArgs: aCompiledMethod numArgs. irBuilder addTemps: self scope args. aCompiledMethod isQuick ifTrue: [self quickMethod] ifFalse: [self interpret]. self popScope. "just add all literals of the compiledMethod as additional literals. duplicates will be filtered out, but we keep the optimized ones" irBuilder additionalLiterals: (aCompiledMethod literals allButLast: 2). "when compiling methods of context classes, force long form for iVar access by getting the correct context" irBuilder compilationContext: aCompiledMethod methodClass compiler compilationContext. ^ irBuilder ir.! ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 38289701! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCASTTranslator methodsFor: 'errors' stamp: 'MarcusDenker 5/15/2013 14:49' prior: 34754881! backendError: aMessage forNode: aNode SyntaxErrorNotification inClass: Object category: nil withCode: aNode methodNode source doitFlag: false errorMessage: aMessage location: aNode startWithoutParentheses! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 5/14/2013 17:10' prior: 36537934! visitMethodNode: aMethodNode methodBuilder compilationContext: aMethodNode compilationContext. methodBuilder addTemps: aMethodNode scope tempVarNames. methodBuilder properties: aMethodNode properties. methodBuilder irPrimitive: aMethodNode primitiveFromPragma. aMethodNode pragmas do: [:each | self visitPragmaNode: each]. methodBuilder numArgs: aMethodNode arguments size. aMethodNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aMethodNode scope tempVectorName withVars: (aMethodNode scope tempVector collect: [:each| each name]) asArray. ]. effectTranslator visitNode: aMethodNode body. aMethodNode body lastIsReturn ifFalse: [methodBuilder pushReceiver; returnTop]! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 5/14/2013 16:32' prior: 36538790! visitPragmaNode: aPragmaNode methodBuilder addPragma: aPragmaNode asPragma. aPragmaNode isPrimitiveError ifTrue: [ methodBuilder storeTemp: aPragmaNode arguments last value]. ! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/14/2013 17:06'! irPrimitive | primNode n | primNode := IRPrimitive new num: (n := self primitive). (n = 117 or: [n = 120]) ifTrue: [ primNode spec: (self literalAt: 1)]. ^ primNode! ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'ClementBera 5/14/2013 13:22' prior: 35527633! evaluateSelection ^ OpalCompiler new source: morph editor selectionAsStream; requestor: morph editor; failBlock: [^failure]; evaluate ! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'MarcusDenker 5/15/2013 14:50' prior: 35537320! testTooManyArguments self setUpForErrorsIn: '^` Too many arguments ->` [:x1 :x2 :x3 :x4 :x5 :x6 :x7 :x8 :x9 :x10 :x11 :x12 :x13 :x14 :x15 :x16 :x17 | ]'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'ClementBera 5/14/2013 14:42' prior: 35539849! testTooManyTemporaries self setUpForErrorsIn: '| a1 a2 a3 a4 a5 a6 a7 a8 a9 b1 b2 b3 b4 b5 b6 b7 b8 b9 c1 c2 c3 c4 c5 c6 c7 c8 c9 d1 d2 d3 d4 d5 d6 d7 d8 d9 e1 e2 e3 e4 e5 e6 e7 e8 e9 f1 f2 f3 f4 f5 f6 f7 f8 f9 g1 g2 g3 g4 g5 g6 g7 g8 g9 | a1 := a2 := a3 := a4 := a5 := a6 := a7 := a8 := a9 := b1 := b2 := b3 := b4 := b5 := b6 := b7 := b8 := b9 := c1 := c2 := c3 := c4 := c5 := c6 := c7 := c8 := c9 := d1 := d2 := d3 := d4 := d5 := d6 := d7 := d8 := d9 := e1 := e2 := e3 := e4 := e5 := e6 := e7 := e8 := e9 := f1 := f2 := f3 := f4 := f5 := f6 := f7 := f8 := f9 := g1 := g2 := g3 := g4 := g5 := g6 := g7 := g8 := g9 := 1'. self flag: 'fail on jenkins but works on my computer with both compiler I dont know why'. "self should: [ self enumerateAllSelections ] raise: Error. [ self enumerateAllSelections ] on: Error do: [ :ex | self assert: ex messageText equals: 'Cannot compile -- stack including temps is too deep' ]"! ! !OCCompilerSyntaxErrorNotifyingTest commentStamp: 'nice 2/23/2012 22:09' prior: 38290085! A CompilerSyntaxErrorNotifyingTest is a specialization for testing correct handling of non interactive compiler notification. Non interactive is a very relative notion in Smalltalk... Here it means that user interaction will not happen directly in the TextEditor holding source code, but rather thru a SyntaxError window that will pop-up. This test intercept the Notification before the pop-up is raised. ! !OCCompilerSyntaxErrorNotifyingTest class methodsFor: 'testing' stamp: 'nice 2/22/2012 22:54'! shouldInheritSelectors "This class can recycle all of super tests, it just has to refine internal Compiler evaluation machinery" ^true! ! !OCCompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/15/2013 14:54'! enumerateAllSelections "This method intercepts the SyntaxErrorNotification and prevent the SyntaxError morph to open. The notification errorCode hold the source of evaluated sub-selection with inserted error message. This can be compared to expected error notification." 1 to: self numberOfSelections do: [:n | | result | result := [self evaluateSelectionNumber: n] on: SyntaxErrorNotification do: [:exc | | expectedNotification expectedNotificationLocation | expectedNotification := (expectedErrors at: n) allButFirst. expectedNotificationLocation := (expectedErrorPositions at: n) - (morph editor startIndex - 1). self assert: expectedNotificationLocation equals: exc location. self assert: expectedNotification equals: exc errorMessage asString. exc return: nil]].! ! !OCCompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'ClementBera 5/14/2013 13:31'! evaluateSelection ^ OpalCompiler new source: morph editor selection readStream; "Note subtle difference versus (morph editor selectionAsStream). The later does not answer the same contents and would raise a SyntaxErrorNotification with wrong sub-selection" failBlock: [^failure]; evaluate! ! !OCCompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/15/2013 14:38'! expectedFailures "For these tests, the Compiler does not insert the notification where it would be most informative." ^#( "Notifying before the literal (which can be a message send) would be more informative" testTooManyLiterals "Notifying right before the 16th argument would be informative" "testTooManyArguments" "Notifying before the extraneous argument in the right block woul be useful" testifTrueBlockWithArgument )! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/15/2013 14:31'! methodClass ^variableNode methodNode methodClass! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/15/2013 14:32'! methodNode ^variableNode methodNode! ! !IRMethod commentStamp: 'ajh 5/23/2003 11:08' prior: 38290555! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/15/2013 11:19'! compilationContext ^ compilationContext ifNil: [ compilationContext := CompilationContext default]! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 13:57'! compilationContext: aCompilationContext compilationContext := aCompilationContext! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/13/2013 15:22' prior: 34881038! forceLongForm compilationContext ifNil: [ ^ false ]. ^compilationContext optLongIvarAccessBytecodes ! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 5/13/2013 14:43' prior: 34881406! generate: trailer | irTranslator | irTranslator := IRTranslator new trailer: trailer; interpret: self; pragmas: pragmas; yourself. compiledMethod := irTranslator compiledMethod. self sourceNode ifNotNil: [ compiledMethod classBinding: self sourceNode classBinding. compiledMethod selector: self sourceNode selector.] ifNil: [ compiledMethod classBinding: UndefinedObject binding. compiledMethod selector: #UndefinedMethod ]. ^compiledMethod.! ! !IRMethod methodsFor: 'initialize' stamp: 'MarcusDenker 5/15/2013 11:12' prior: 34882162! initialize irPrimitive := IRPrimitive null. tempMap := Dictionary new. pragmas := OrderedCollection new. additionalLiterals := OCLiteralSet new. numArgs := 0.! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/15/2013 08:29'! irPrimitive ^ irPrimitive! ! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/15/2013 08:29'! irPrimitive: aPrimitiveNode irPrimitive := aPrimitiveNode! ! !IRMethod methodsFor: 'optimizing' stamp: 'MarcusDenker 5/15/2013 11:17' prior: 34883860! optimize self removeEmptyStart. self compilationContext optOptimizeIR ifFalse: [^self]. self absorbJumpsToSingleInstrs. self absorbConstantConditionalJumps. self absorbJumpsToSingleInstrs! ! !IRPrimitive commentStamp: 'ajh 3/24/2003 21:35' prior: 38290948! I represent a primitive. I am more than just a number if I am a named primitive. Structure: num Primitive number. spec Stored in first literal when num is 117 or 120. ! !IRPrimitive class methodsFor: 'initialization' stamp: 'JorgeRessia 1/10/2010 11:28'! from: aPragmaNode ^ self new initializeFrom: aPragmaNode! ! !IRPrimitive class methodsFor: 'instance creation' stamp: 'ajh 7/14/2001 12:47'! null ^ self new num: 0! ! !IRPrimitive methodsFor: 'accessing' stamp: 'MarcusDenker 8/12/2010 15:54'! initializeFrom: aPragmaNode primitiveNum := 0. spec := Array with: (aPragmaNode arguments second) name with: (aPragmaNode arguments first) name with: 0 with: 0. ! ! !IRPrimitive methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:37'! num ^ primitiveNum! ! !IRPrimitive methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:23'! num: n primitiveNum := n! ! !IRPrimitive methodsFor: 'printing' stamp: 'ajh 3/12/2003 12:26'! printOn: aStream aStream nextPutAll: 'primitive '; print: primitiveNum! ! !IRPrimitive methodsFor: 'printing' stamp: 'MarcusDenker 8/13/2010 11:39'! printPrimitiveOn: aStream "Print the primitive on aStream" | primIndex primDecl | primIndex := primitiveNum. primIndex = 0 ifTrue: [ ^ self ]. primIndex = 120 ifTrue: [ "External call spec" ^ aStream print: spec ]. aStream nextPutAll: '. (primIndex ~= 117 and: [ primIndex ~= 120 ]) ifTrue: [ Smalltalk at: #Interpreter ifPresent: [ :cls | aStream nextPutAll: ' "'; nextPutAll: ((cls classPool at: #PrimitiveTable) at: primIndex + 1); nextPutAll: '" ' ] ]! ! !IRPrimitive methodsFor: 'printing' stamp: 'ajh 3/19/2003 22:02'! sourceText ^ String streamContents: [:stream | self printPrimitiveOn: stream]! ! !IRPrimitive methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:37'! spec ^ spec! ! !IRPrimitive methodsFor: 'accessing' stamp: 'ajh 7/14/2001 12:30'! spec: literal spec := literal! ! !MockTranscript methodsFor: 'accessing' stamp: 'JorgeRessia 3/4/2010 21:19' prior: 26541248! contents ^stream contents ! ! !MockTranscript methodsFor: 'streaming' stamp: 'JorgeRessia 3/4/2010 21:19' prior: 26541511! cr stream cr! ! !MockTranscript methodsFor: 'initializing' stamp: 'JorgeRessia 3/4/2010 21:19' prior: 26541362! initialize super initialize. stream := String new writeStream.! ! !MockTranscript methodsFor: 'streaming' stamp: 'JorgeRessia 3/4/2010 21:19' prior: 26541607! show: anObject stream nextPutAll: anObject asString ! ! !Object methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/15/2013 09:24' prior: 35654523! mustBeBooleanInMagic: context "Permits to redefine methods inlined by compiler. Take the ast node corresponding to the mustBeBoolean error, compile it on the fly with Opal and executes it as a DoIt. Then resume the execution of the context." | proceedValue sendNode selector expression arguments methodNode method offset position | context skipBackBeforeJump. sendNode := context sourceNode sourceNodeForPC: context pc. position := sendNode irInstruction bytecodeOffset. offset := sendNode irInstruction nextBytecodeOffsetAfterJump - position. expression := sendNode copy asSequenceNode transformLastToReturn. selector := #ExecuteUnOptimzedIn:. arguments := {(RBVariableNode named:'ThisContext')}. methodNode := RBMethodNode selector: selector arguments: arguments body: expression. context tempNames do: [:tempName | methodNode :=methodNode rewriteTempNamedWrite: tempName forContext: context. methodNode :=methodNode rewriteTempNamedRead: tempName forContext: context. ]. methodNode compilationContext: sendNode methodNode compilationContext. methodNode compilationContext class: UndefinedObject; compilerOptions: #(+ optIlineNone). method := methodNode generateWithSource. context jump: offset. proceedValue := self withArgs: {context} executeMethod: method. ^proceedValue! ! !TotalCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 38291217! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !AverageCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 38291383! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !AverageCost methodsFor: 'as yet unclassified' stamp: 'NikoSchwarz 6/5/2010 16:11' prior: 17788987! total ^super total / 12! ! !WeightedAverageCost commentStamp: 'StephaneDucasse 6/9/2010 20:53' prior: 38291557! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! !TotalCost methodsFor: 'as yet unclassified' stamp: 'NikoSchwarz 6/5/2010 15:53' prior: 53274262! total ^25000 ! ! !Compiler methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/14/2013 13:11'! compilationContext ^CompilationContext default! ! !OCOpalExamples class methodsFor: 'compiler' stamp: 'MarcusDenker 5/13/2013 14:46'! compilerClass ^OpalCompiler ! ! IRBuilderTest removeSelector: #testStoreIvarLong! IRBuilderTest removeSelector: #testReturnInstVarLong! OCPrimitiveNode removeSelector: #spec:! OCPrimitiveNode removeSelector: #spec! OCPrimitiveNode removeSelector: #sourceText! OCPrimitiveNode removeSelector: #printPrimitiveOn:! OCPrimitiveNode removeSelector: #printOn:! OCPrimitiveNode removeSelector: #num:! OCPrimitiveNode removeSelector: #num! OCPrimitiveNode removeSelector: #initializeFrom:! OCPrimitiveNode class removeSelector: #null! OCPrimitiveNode class removeSelector: #from:! Smalltalk globals removeClassNamed: #OCPrimitiveNode! Smalltalk globals removeClassNamed: #OCBackendError! OCAbstractNotification removeSelector: #setClass:category:code:doitFlag:errorMessage:location:! OCAbstractNotification removeSelector: #setClass:category:code:doitFlag:! OCAbstractNotification removeSelector: #messageText! OCAbstractNotification removeSelector: #location! OCAbstractNotification removeSelector: #errorMessage! OCAbstractNotification removeSelector: #errorCode! OCAbstractNotification removeSelector: #errorClass! OCAbstractNotification removeSelector: #doitFlag! OCAbstractNotification removeSelector: #defaultAction! OCAbstractNotification removeSelector: #category! OCAbstractNotification class removeSelector: #inClass:category:withCode:doitFlag:errorMessage:location:! OCAbstractNotification class removeSelector: #inClass:category:withCode:doitFlag:! Smalltalk globals removeClassNamed: #OCAbstractNotification! RBMethodNode removeSelector: #doSemanticAnalysisIn:interactive:notifying:! RBMethodNode removeSelector: #doSemanticAnalysisIn:interactive:! OCASTTranslator removeSelector: #compilationContext:! RBPragmaNode removeSelector: #primitive! RBPragmaNode removeSelector: #pragma! IRBytecodeGenerator removeSelector: #primitiveNode:! IRMethod removeSelector: #primitiveNode:! IRMethod removeSelector: #primitiveNode! IRMethod removeSelector: #forceLongForm:! IRBuilder removeSelector: #primitiveNode:! IRBuilder removeSelector: #forceLongForm! CompiledMethod removeSelector: #primitiveNode! "CompilerTests"! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(15 May 2013 5:00:02 pm) Pharo.image priorSource: 4714519! ----STARTUP----an Array(15 May 2013 5:06:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 May 2013 5:06:42 pm) Pharo-30133.image priorSource: 4790632! ----STARTUP----an Array(16 May 2013 8:22:59 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/16/2013 08:13' prior: 38269248! commentForCurrentUpdate ^ '7517 Spec: Document TextModel vs. TextInputFieldModel https://pharo.fogbugz.com/f/cases/7517 10629 Suggestions not working for deprecated ui icons https://pharo.fogbugz.com/f/cases/10629 10623 World is not properly updating layout https://pharo.fogbugz.com/f/cases/10623 10624 WolrdModel does not support delete https://pharo.fogbugz.com/f/cases/10624'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/16/2013 08:13'! script231 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.34.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.458.mcz CompilerTests-MarcusDenker.155.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-EstebanLorenzano.1446.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.273.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.816.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.167.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.70.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1120.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/16/2013 08:13'! update30134 "self new update30134" self withUpdateLog: '7517 Spec: Document TextModel vs. TextInputFieldModel https://pharo.fogbugz.com/f/cases/7517 10629 Suggestions not working for deprecated ui icons https://pharo.fogbugz.com/f/cases/10629 10623 World is not properly updating layout https://pharo.fogbugz.com/f/cases/10623 10624 WolrdModel does not support delete https://pharo.fogbugz.com/f/cases/10624'. self loadTogether: self script231 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SugsMessageBrowserContext commentStamp: '' prior: 0! I know how to use a Text model that came from a SmalltalkEditor and extract the information needed for the suggestions :)! !WorldModel commentStamp: '' prior: 38036321! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !TextModel commentStamp: '' prior: 35388396! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 35388517! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !ConfigurationOfSmartSuggestions commentStamp: '' prior: 0! I'm the configuration of SmartSuggestions project. ! !SugsMenuBuilder commentStamp: '' prior: 36690262! I'm the one who finds the best suggestion for your selection or poition in text. I also add the options to the displayed menus.! !SugsSuggestionFactory commentStamp: '' prior: 36705053! I'm the guy who knows how to create the suggestions. I also categorize them.! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/15/2013 10:57' prior: 36711919! testTetModelIsAValidContext | textModel | textModel := TextModel new. self assert: (SugsAbstractContext contextFor: textModel) class equals: SugsMessageBrowserContext.! ! !RBLiteralValueNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/15/2013 14:57'! specialCommands ^ SugsSuggestionFactory commandsFoLiteralNode.! ! !SugsExtractToLocalVariable methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/15/2013 13:32'! isValidForContext ^context hasOneStatement.! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 15:04'! testExtractLocalInALiteralNodeIsValid | literal context suggestion | literal := RBLiteralValueNode new. context := SugsMockContext withNode: literal. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext .! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:36'! testExtractLocalInAMessageNodeIsValid | context suggestion | context := SugsMockContext withMessageName: 'justAName'. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext ! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:42'! testExtractLocalInASequenceNodeWithMoreSentencesIsNotValid | multipleLines context suggestion | multipleLines := RBSequenceNode new. multipleLines addNode: (RBVariableNode named: 'varName'). multipleLines addNode: (RBVariableNode named: 'otherName'). context := SugsMockContext withNode: multipleLines. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self deny: suggestion isValidForContext . ! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:45'! testExtractLocalInASequenceNodeWithOneSentenceIsValid | oneLine context suggestion | oneLine := RBSequenceNode new. oneLine addNode: (RBVariableNode named: 'varName'). context := SugsMockContext withNode: oneLine. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext .! ! !PasteUpMorph methodsFor: 'world state' stamp: 'BenjaminVanRyseghem 5/14/2013 22:11' prior: 29237099! restoreMorphicDisplay DisplayScreen startUp. ThumbnailMorph recursionReset. self extent: Display extent; viewBox: Display boundingBox; handsDo: [:h | h visible: true; showTemporaryCursor: nil]; resizeBackgroundMorph; restoreMainDockingBarDisplay; fullRepaintNeeded. WorldState addDeferredUIMessage: [Cursor normal show]. self layoutChanged. ! ! !SugsMockContext class methodsFor: 'initialization' stamp: 'GiselaDecuzzi 5/15/2013 14:44'! withNode: aNode ^self new selectedNode: aNode.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 5/15/2013 14:37' prior: 35730869! selectedMessageName ^message ifNil:[super selectedMessageName] ifNotNil: [ message ]! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 5/15/2013 15:02'! hasOneStatement ^ (self selectedMessageName isNotNil or: [ selectedNode isLiteralNode ] ) or: [ selectedNode statements size = 1]! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 5/15/2013 13:41' prior: 35724873! hasParameters ^self selectedMessageName isNil or:[ self selectedMessageName numArgs > 0]. ! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 5/15/2013 13:32' prior: 35726083! selectedMessageName ^[selectedNode selector] on: MessageNotUnderstood do: [ nil ]! ! !SugsMessageBrowserContext commentStamp: '' prior: 38356206! I know how to use a Text model that came from a SmalltalkEditor and extract the information needed for the suggestions :)! !SugsMessageBrowserContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! selectedClass ^model selectedBehavior.! ! !SugsMessageBrowserContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! selectedMethod ^model owner selectedMessage.! ! !SugsMessageBrowserContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:58'! sourceTextArea ^ (model dependents at: 1).! ! !SugsMessageBrowserContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/2/2013 13:57'! tools ^ model systemNavigation! ! !WorldModel commentStamp: '' prior: 38356387! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:41' prior: 38037132! addModelIn: container withSpec: aSpec self model ifNil: [ ^ self ]. widget := self model buildWithSpec: aSpec. container addMorph: widget fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:41' prior: 38037372! addModelIn: container withSpecLayout: aSpec self model ifNil: [ ^ self ]. widget := self model buildWithSpecLayout: aSpec. container addMorph: widget fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:40' prior: 38038106! openWithSpec: aSpec self buildWithSpec: aSpec. self updateTitle! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:40' prior: 38038266! openWithSpecLayout: aSpec self buildWithSpecLayout: aSpec. self updateTitle! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 22:59'! widget ^ widget ! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 13:36'! testSuggestionForAMehodNodeIncludesAllValid | suggestions expected context | context := SugsMockContext methodContext. suggestions := SugsMenuBuilder findSuggestionsFor: context. expected := (SugsSuggestionFactory commandsForMethod do: [:aSugg | aSugg context: context] )select: #isValidForContext. self assert: (expected allSatisfy: [ :expect | suggestions includes: expect ])! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 15:07'! testSuggestionForLiteralNodeIncludesAllExpected | suggestions expected | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext literalContext. expected := SugsSuggestionFactory commandsFoLiteralNode . self assert:(expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 14:22'! testSuggestionForSourceNodeIncludesAllValid | suggestions expected context | context := SugsMockContext sourceContext. suggestions :=SugsMenuBuilder findSuggestionsFor: context. expected := (SugsSuggestionFactory commandsForSource do: [:aSugg | aSugg context: context] )select: #isValidForContext. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !TextModel commentStamp: '' prior: 38356601! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 38356801! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !TextInputFieldModel class methodsFor: 'example' stamp: 'BenjaminVanRyseghem 5/14/2013 17:06' prior: 52720756! example | instance | instance := self new. instance extent: 300@25. instance openWithSpec. instance ghostText: 'This is a ghost'. instance text: 'This is a text'. ! ! !TextModel methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/15/2013 10:57' prior: 36713409! sugsContext ^ SugsMessageBrowserContext model: self.! ! !ConfigurationOfSmartSuggestions commentStamp: '' prior: 38357014! I'm the configuration of SmartSuggestions project. ! !ConfigurationOfSmartSuggestions class methodsFor: 'development support' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfSmartSuggestions class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfSmartSuggestions class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfSmartSuggestions class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfSmartSuggestions class methodsFor: 'metacello tool support' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfSmartSuggestions class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfSmartSuggestions class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfSmartSuggestions class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfSmartSuggestions class methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! project ^self new project! ! !ConfigurationOfSmartSuggestions class methodsFor: 'development support' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/15/2013 15:10'! baseline11: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/gisela/SmartSuggestions/main'. spec package: 'SmartSuggestions' with: 'SmartSuggestions-GiselaDecuzzi.75' ]! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/15/2013 15:11'! baseline12: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/gisela/SmartSuggestions/main'. spec package: 'SmartSuggestions' ]! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes" ^ #().! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/15/2013 15:11'! development: spec spec for: #common version: '1.2-baseline'.! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/6/2013 10:55'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" project := MetacelloMCProject new projectAttributes: self customProjectAttributes. constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self project: project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/6/2013 11:12'! version10: spec spec for: #common do: [ spec blessing: #release. spec repository: 'http://smalltalkhub.com/mc/gisela/SmartSuggestions/main'. spec package: 'SmartSuggestions' with: 'SmartSuggestions-GiselaDecuzzi.66']! ! !ConfigurationOfSmartSuggestions methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/15/2013 15:10'! version11: spec spec for: #common do: [ spec blessing: #release. spec repository: 'http://smalltalkhub.com/mc/gisela/SmartSuggestions/main'. spec package: 'SmartSuggestions' with: 'SmartSuggestions-GiselaDecuzzi.75']! ! !SugsMenuBuilder commentStamp: '' prior: 38357130! I'm the one who finds the best suggestion for your selection or poition in text. I also add the options to the displayed menus.! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/3/2013 15:46' prior: 36690908! buildSmartActionsShortcuts: aBuilder (aBuilder shortcut: #smartSuggestions) category: #SmalltalkEditor default: $t command mac| $t ctrl unix | $t ctrl | $1 ctrl | $1 command mac do: [ :morph | morph smartSuggestions ] description: 'Browse suggestions based on selections'. ! ! !SugsMenuBuilder class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/3/2013 15:50' prior: 36691281! findBestNodeFor: context | root node| root := context selectedMethod ifNil:[ RBParser parseFaultyExpression: context code] ifNotNil: [ RBParser parseFaultyMethod: context code]. context selectedClass ifNotNil: [root annotateInClass: context selectedClass]. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! !SugsMenuBuilder class methodsFor: 'suggestions' stamp: 'GiselaDecuzzi 5/6/2013 14:18' prior: 36691710! findSuggestionsFor: context "Finds the best suggestions for the context passed as a parameter" | node suggestions | node := self findBestNodeFor: context . node ifNil: [ ^OrderedCollection new ]. suggestions := node ifNotNil: [ node specialCommands ]. suggestions do:[:sugg| sugg context: context]. ^suggestions select: [:sugg | sugg isValidForContext ] ! ! !SugsSuggestionFactory commentStamp: '' prior: 38357328! I'm the guy who knows how to create the suggestions. I also categorize them.! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/15/2013 14:54'! collectorForLiteral ^ collectorForLiteral ifNil: [collectorForLiteral := self createCollector: #literalCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'literal' stamp: 'GiselaDecuzzi 5/15/2013 14:57'! commandsFoLiteralNode ^self collectCommandsFrom: self collectorForLiteral .! ! !SugsSuggestionFactory class methodsFor: 'unknown-var' stamp: 'GiselaDecuzzi 5/15/2013 14:56' prior: 35744421! commandsForUndeclaredVariable ^self collectCommandsFrom: self collectorForUndeclaredVariable .! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 5/15/2013 11:04' prior: 37855708! createAccesorsFor ^ SugsCreateInstanceVarAccessors icon: Smalltalk ui icons smallLanguageIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 5/15/2013 11:05' prior: 37855954! createAccessesToVariable ^ SugsAccessesToInstVar icon: Smalltalk ui icons smallInspectItIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 5/15/2013 11:05' prior: 37856198! createAccessors ^ SugsCreateClassVarAccessors icon: Smalltalk ui icons smallLanguageIcon position: 30 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:05' prior: 37856439! createAddParameter ^ SugsAddParameter icon: Smalltalk ui icons smallPushpinIcon position: 200! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 5/15/2013 11:05' prior: 37856667! createBrowseReferences ^ SugsBrowseClassReferences icon: Smalltalk ui icons smallInspectItIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 5/15/2013 14:54' prior: 37856909! createExtractMethod ^ SugsExtractMethod icon: Smalltalk ui icons smallRedoIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 5/15/2013 14:54' prior: 37857158! createExtractToLocalVariable ^ SugsExtractToLocalVariable icon: Smalltalk ui icons smallJumpIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37857427! createFindImplementors ^ SugsFindImplementors icon: Smalltalk ui icons smallFindIcon position: 20 keyText: 'm'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37857678! createFindSenders ^ SugsFindSenders icon: Smalltalk ui icons smallFindIcon position: 10 keyText: 'n'! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37857934! createFormatSourceCode ^ SugsFormatCode icon: Smalltalk ui icons smallJustifiedIcon position: 0 keyText: 'u'! ! !SugsSuggestionFactory class methodsFor: 'messages' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37858203! createInline ^ SugsInline icon: Smalltalk ui icons smallRightFlushIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37858424! createMoveMethod ^ SugsDelegateMethod icon: Smalltalk ui icons smallRedoIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37858651! createPullUp ^ SugsPullUpMethod icon: Smalltalk ui icons smallRedoIcon position: 100! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:06' prior: 37858872! createPushDown ^ SugsPushDownMethod icon: Smalltalk ui icons smallUndoIcon position: 101 ! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37859098! createRemoveMethod ^ SugsRemoveMethod icon: Smalltalk ui icons smallCancelIcon position: 20! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37859326! createRemoveParameter ^ SugsRemoveParameter icon: Smalltalk ui icons smallCancelIcon position: 210! ! !SugsSuggestionFactory class methodsFor: 'class' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37859559! createRenameClass ^ SugsRenameClass icon: Smalltalk ui icons smallLanguageIcon position: 20 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37859802! createRenameClassVariable ^ SugsRenameClassVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37860058! createRenameMethod ^ SugsRenameMethod icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r,m'! ! !SugsSuggestionFactory class methodsFor: 'temp-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37860306! createRenameTemporaryVariable ^ SugsRenameTemporaryVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37860570! createRenameVariable ^ SugsRenameInstanceVar icon: Smalltalk ui icons smallLanguageIcon position: 10 keyText: 'r'! ! !SugsSuggestionFactory class methodsFor: 'methods' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37860823! createSwapMethod ^ SugsSwapMethod new icon: Smalltalk ui icons smallRedoIcon; position: 50! ! !SugsSuggestionFactory class methodsFor: 'class-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37861051! createUseAccessorToVar ^ SugsUseAccessorsForClassVar icon: Smalltalk ui icons smallLanguageIcon position: 10! ! !SugsSuggestionFactory class methodsFor: 'unknown-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37861302! createVariableCorrection " " "Unable because it's not fully implemented" | variables index | ^ SugsSuggestion for: [:context | variables := context selectedClass allInstVarNames asArray sort. index := UIManager default chooseFrom: variables. UIManager default inform:(variables at: index) ] named: 'Correct variable to...' translated icon: Smalltalk ui icons smallFindIcon. ! ! !SugsSuggestionFactory class methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 5/15/2013 11:07' prior: 37861847! createVariableStoresInto ^ SugsStoresIntoInstVar icon: Smalltalk ui icons smallInspectItIcon position: 60! ! SugsSmalltalkEditorTextModelContext removeSelector: #tools! SugsSmalltalkEditorTextModelContext removeSelector: #sourceTextArea! SugsSmalltalkEditorTextModelContext removeSelector: #selectedMethod! SugsSmalltalkEditorTextModelContext removeSelector: #selectedClass! Smalltalk globals removeClassNamed: #SugsSmalltalkEditorTextModelContext! SugsMenuBuilderTest removeSelector: #testSuggestionForSourceNodeIncludesAllDeclared! SugsMenuBuilderTest removeSelector: #testSuggestionForAMehodNodeIncludesAllDeclared! SugsMenuBuilderTest removeSelector: #testNoSuggestionForLiteralNode! "Morphic"! "ConfigurationOfSmartSuggestions"! "SmartSuggestions"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(16 May 2013 8:23:11 am) Pharo.image priorSource: 4790828! ----STARTUP----an Array(16 May 2013 8:31:40 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 May 2013 8:31:40 am) Pharo-30134.image priorSource: 4826359! ----STARTUP----an Array(16 May 2013 1:29:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/16/2013 13:27' prior: 38345557! commentForCurrentUpdate ^ '10634 Simplify CompiledMethod>>#methodClass https://pharo.fogbugz.com/f/cases/10634 10645 clean up pc mapping methods of ASTInterpreter https://pharo.fogbugz.com/f/cases/10645 10642 remove unused low level scanning methods in CompiledMethod (scanLongLoad...) https://pharo.fogbugz.com/f/cases/10642 10632 OutOfScopeNotification not needed https://pharo.fogbugz.com/f/cases/10632 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/16/2013 13:27'! script232 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.17.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.252.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.599.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.460.mcz CompilerTests-MarcusDenker.155.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1450.mcz KernelTests-MarcusDenker.512.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.802.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.7.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.273.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.91.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.816.mcz RPackage-Core-MarcusDenker.218.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.94.mcz Ring-Monticello-StephaneDucasse.12.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.167.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.206.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.86.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.26.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1122.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/16/2013 13:27'! update30135 "self new update30135" self withUpdateLog: '10634 Simplify CompiledMethod>>#methodClass https://pharo.fogbugz.com/f/cases/10634 10645 clean up pc mapping methods of ASTInterpreter https://pharo.fogbugz.com/f/cases/10645 10642 remove unused low level scanning methods in CompiledMethod (scanLongLoad...) https://pharo.fogbugz.com/f/cases/10642 10632 OutOfScopeNotification not needed https://pharo.fogbugz.com/f/cases/10632 '. self loadTogether: self script232 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 09:11' prior: 19786242! classBinding ^self literalAt: self numLiterals! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 09:12' prior: 19788258! methodClass "answer the class that I am installed in" ^self classBinding value! ! !Encoder methodsFor: 'encoding' stamp: 'MarcusDenker 5/16/2013 11:11' prior: 21169758! encodeVariable: name sourceRange: range ifUnknown: action | varNode | varNode := scopeTable at: name ifAbsent: [(self lookupInPools: name ifFound: [:assoc | varNode := self global: assoc name: name]) ifTrue: [varNode] ifFalse: [^action value]]. range ifNotNil: [ name first canBeGlobalVarInitial ifTrue: [globalSourceRanges addLast: { name. range. false }]. ]. (varNode isTemp and: [varNode scope < 0]) ifTrue: [ "every client just does resume: true" action value. " OutOfScopeNotification signal ifTrue: [action value] ifFalse: [ ^self notify: 'out of scope']." ]. ^ varNode! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 5/16/2013 11:12' prior: 36284981! compileSelectionFor: anObject in: evalContext | methodNode failed | failed := false. methodNode := self class compiler compileNoPattern: self selectionAsStream in: anObject class context: evalContext notifying: self morph ifFail: [ failed := true ]. failed ifTrue: [ ^ nil ]. ^methodNode generateWithSource. ! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 5/16/2013 11:12' prior: 36285481! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ '']. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [ rcvr := ctxt := nil]. result := rcvr class compiler evaluate: self selectionForDoitAsStream in: ctxt to: rcvr notifying: self morph "don't set it to self.. The receiver can be destroyed as a result of evaluateSelection" ifFail: [self morph flash. ^nil] logged: true. ^ aBlock value: result! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 5/16/2013 11:13' prior: 33453815! tallySelection "Treat the current selection as an expression; evaluate and tally it." | receiver context v compiledMethod profiler | (model respondsTo: #doItReceiver) ifTrue: [receiver := model doItReceiver. context := model doItContext] ifFalse: [receiver := context := nil]. self lineSelectAndEmptyCheck: [ ^ self ]. compiledMethod := self compileSelectionFor: receiver in: context. compiledMethod ifNil: [^ self]. profiler := TimeProfiler spyOn: [ v:= compiledMethod valueWithReceiver: receiver arguments: #()]. profiler showResult: v. ! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 09:09' prior: 33344195! messageText ^ 'triggered by ', method methodClass printString, '>>', method selector! ! !TextEditor methodsFor: 'do-its' stamp: 'MarcusDenker 5/16/2013 11:11' prior: 36335257! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ nil]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := rcvr class compiler evaluate: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [morph flash. ^ nil] logged: true. ^aBlock value: result! ! !TimeProfiler methodsFor: 'actions' stamp: 'MarcusDenker 5/16/2013 11:15' prior: 53169766! blockCode: aString notifying: aRequestor "Treat the current selection as an expression; evaluate and tally it." | compiledMethod | aString ifNil: [^ self]. blockSource := aString. compiledMethod := self compile: aString for: nil in: self doItContext. compiledMethod ifNil: [^ self]. self showResult: ( compiledMethod valueWithReceiver: self arguments: #()). self changed: #blockCode. self changed: #rootNodes. self changed: #summaryText. self changed: #fullReport. self selection: nil. self startState. ! ! !TimeProfiler methodsFor: 'compiling' stamp: 'MarcusDenker 5/16/2013 11:15' prior: 53173283! compile: codeString for: anObject in: evalContext | methodNode | methodNode := Compiler new compileNoPattern: ('self runBlock: [', codeString, ']') in: anObject class context: evalContext notifying: self ifFail: [^nil]. ^ methodNode generateWithSource.! ! ContextPart removeSelector: #currentText! CompiledMethod removeSelector: #sourceIntervalForPC:! CompiledMethod removeSelector: #sourceCodeForPC:! CompiledMethod removeSelector: #scanVeryLongStore:offset:! CompiledMethod removeSelector: #scanVeryLongLoad:offset:! CompiledMethod removeSelector: #scanLongStore:! CompiledMethod removeSelector: #scanLongLoad:! CompiledMethod removeSelector: #bestNodeForPC:! "AST-Interpreter-Extension"! "Compiler"! "Kernel"! "Text"! "Tools"! ----End fileIn----! ----QUIT----an Array(16 May 2013 1:29:56 pm) Pharo.image priorSource: 4826555! ----STARTUP----an Array(16 May 2013 1:36:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 May 2013 1:36:46 pm) Pharo-30135.image priorSource: 4842621! ----STARTUP----an Array(16 May 2013 5:09:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/16/2013 17:06' prior: 38381284! commentForCurrentUpdate ^ '10385 Spec: SliderModel DNU updateLabel https://pharo.fogbugz.com/f/cases/10385 10378 There are 44 direct references to Scanner https://pharo.fogbugz.com/f/cases/10378'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/16/2013 17:06'! script233 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.254.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.460.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1452.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.273.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.168.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.100.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.835.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/16/2013 17:06'! update30136 "self new update30136" self withUpdateLog: '10385 Spec: SliderModel DNU updateLabel https://pharo.fogbugz.com/f/cases/10385 10378 There are 44 direct references to Scanner https://pharo.fogbugz.com/f/cases/10378'. self loadTogether: self script233 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SliderModel commentStamp: '' prior: 33381510! A SliderModel is a spec model for a slider. See example: self example! !RGBehaviorDefinition methodsFor: 'accessing' stamp: 'ClementBera 5/16/2013 13:12' prior: 31572451! traitNames "Assuming that traits in a composition can be identified by testing for the first character being an uppercase character (and thus not a special character such as {, # etc.)" | tokens | tokens := self traitCompositionSource parseAsLiteralToken. ^tokens select: [:each | each first isUppercase].! ! !StringTest methodsFor: 'tests - converting' stamp: 'ClementBera 5/16/2013 13:13' prior: 51238111! testAsSmalltalkComment | exampleStrings | exampleStrings := #( '' ' ' '"' '""' '"""' 'abc"abc' 'abc""abc' 'abc"hello"abc' 'abc"' '"abc' ). "check that the result of scanning the comment is empty" exampleStrings do: [ :s | | tokens | tokens := s asSmalltalkComment parseAsLiteralToken. self assert: (tokens isEmpty) ]. "check that the result has the same non-quote characters as the original" exampleStrings do: [ :s | self assert: ( (s copyWithout: $") = (s asSmalltalkComment copyWithout: $"))]. "finnaly, test for some common kinds of inputs" self assert: ( 'abc' asSmalltalkComment = '"abc"'). self assert: ( 'abc"abc' asSmalltalkComment = '"abc""abc"'). self assert: ('abc""abc' asSmalltalkComment = '"abc""abc"' ). ! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'ClementBera 5/16/2013 13:13' prior: 32061301! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseAsLiteralToken ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'ClementBera 5/16/2013 13:08' prior: 19308557! changeFromString: aString "Parse the argument, aString, and make this be the receiver's structure." | categorySpecs | categorySpecs := aString parseAsLiteralToken. "If nothing was scanned and I had no elements before, then default me" (categorySpecs isEmpty and: [ self protocolOrganizer isEmpty ]) ifTrue: [ ^ self protocolOrganizer reset ]. ^ self changeFromCategorySpecs: categorySpecs! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'ClementBera 5/16/2013 13:11' prior: 24853226! scanForPreviousVersion | sourceFilesCopy method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := preamble parseAsLiteralToken ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !PackageInfo methodsFor: 'testing' stamp: 'ClementBera 5/16/2013 13:12' prior: 29014627! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseAsLiteralToken ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference theNonMetaClassName category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !SliderModel commentStamp: '' prior: 38407797! A SliderModel is a spec model for a slider. See example: self example! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/8/2013 14:25' prior: 33984362! defaultSpec ^ SpecLayout slider send: #model: withArguments: #( model ); send: #getValueSelector: withArguments: #(value); send: #setValueSelector: withArguments: #( value: ); send: #value: withArguments: #(#(model absoluteValue)); send: #getLabelSelector: withArguments: #( label ); send: #max: withArguments: #(#(model max)); send: #min: withArguments: #(#(model min)); send: #quantum: withArguments: #(#(model quantum)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: #(#(model help)); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/14/2013 15:38'! example | slider | slider := self new. slider min: 0; max: 100; whenValueChangedDo: [:value | slider label: value asString ]. slider openWithSpec ! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2012 18:59' prior: 33381649! color: aColor self widget ifNotNil: [:w | w == self ifFalse: [ super color: aColor ]]! ! !SliderModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/14/2013 15:43' prior: 33381826! initialize "Initialization code for SliderModel" super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self widget ifNotNil: [:w | w max: m ]]. min whenChangedDo: [:m | self widget ifNotNil: [:w | w min: m ]]. quantum whenChangedDo: [:m | self widget ifNotNil: [:w | w quantum: m ]]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self widget ifNotNil: [:w | w == self ifFalse: [ w scaledValue: v ]]. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self widget ifNotNil: [:w | w == self ifFalse: [ w value: v ]]. isChanging := false ]]. labelHolder whenChangedDo: [:v | self widget ifNotNil: [:w | w updateLabel ]].! ! !SliderModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/14/2013 15:44' prior: 33383631! label "Return the label of the slider" ^ labelHolder contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 15:39' prior: 33385559! value: aNumber "Set the value in a range between min and max" value contents == aNumber ifTrue: [ ^ self ]. value contents: aNumber.! ! !RPackage methodsFor: 'system compatibility' stamp: 'ClementBera 5/16/2013 13:12' prior: 31803730! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseAsLiteralToken ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !FilePackage methodsFor: 'change record types' stamp: 'ClementBera 5/16/2013 13:09' prior: 21926743! classDefinition: string with: chgRec | tokens theClass | self flag: #traits. tokens := string parseAsLiteralToken. "tokens size = 11 ifFalse:[^doIts add: chgRec]." theClass := self getClass: (tokens at: 3). theClass definition: string. classOrder add: theClass.! ! !FilePackage methodsFor: 'private' stamp: 'ClementBera 5/16/2013 13:10' prior: 21931551! metaClassDefinition: string with: chgRec | tokens theClass | tokens := string parseAsLiteralToken. theClass := self getClass: (tokens at: 1). theClass metaClass definition: string. classOrder add: theClass metaClass.! ! !FilePackage methodsFor: 'private' stamp: 'ClementBera 5/16/2013 13:10' prior: 21931845! msgClassComment: string with: chgRec | tokens theClass | tokens := string parseAsLiteralToken. (tokens size = 3 and:[(tokens at: 3) isString]) ifTrue:[ theClass := self getClass: tokens first. ^theClass commentString: tokens last]. (tokens size = 4 and:[(tokens at: 3) asString = 'class' and:[(tokens at: 4) isString]]) ifTrue:[ theClass := self getClass: tokens first. theClass metaClass commentString: tokens last]. ! ! !FilePackage methodsFor: 'private' stamp: 'ClementBera 5/16/2013 13:10' prior: 21932348! possibleSystemSource: chgRec | tokens | sourceSystem isEmpty ifTrue:[ tokens := chgRec string parseAsLiteralToken. (tokens size = 1 and:[tokens first isString]) ifTrue:[ sourceSystem := tokens first. ^self]]. doIts add: chgRec.! ! !FilePackage methodsFor: 'private' stamp: 'ClementBera 5/16/2013 13:10' prior: 21932633! removedMethod: string with: chgRec | class tokens | tokens := string parseAsLiteralToken. (tokens size = 3 and:[(tokens at: 2) == #removeSelector: ]) ifTrue:[ class := self getClass: (tokens at: 1). ^class removeSelector: (tokens at: 3). ]. (tokens size = 4 and:[(tokens at: 2) == #class and:[(tokens at: 3) == #removeSelector:]]) ifTrue:[ class := self getClass: (tokens at: 1). ^class metaClass removeSelector: (tokens at: 4). ]. doIts add: chgRec! ! !MCClassTraitParser methodsFor: 'actions' stamp: 'ClementBera 5/16/2013 13:10' prior: 24657485! addDefinitionsTo: aCollection | tokens definition traitCompositionString | tokens := source parseAsLiteralToken. traitCompositionString := (source readStream match: 'uses:'; upToEnd) trimBoth. definition := MCClassTraitDefinition baseTraitName: (tokens at: 1) classTraitComposition: traitCompositionString. aCollection add: definition ! ! !PluggableSliderMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/14/2013 15:44' prior: 29501441! label: aLabel label := aLabel. self changed.! ! !MCTraitParser methodsFor: 'actions' stamp: 'ClementBera 5/16/2013 13:12' prior: 25087141! addDefinitionsTo: aCollection | tokens definition traitCompositionString | tokens := source parseAsLiteralToken. traitCompositionString := (source readStream match: 'uses:'; upToAll: 'category:') trimBoth. definition := MCTraitDefinition name: (tokens at: 3) traitComposition: traitCompositionString category: tokens last comment: '' commentStamp: ''. aCollection add: definition.! ! !Categorizer methodsFor: 'accessing' stamp: 'ClementBera 5/16/2013 13:06' prior: 18711963! changeFromString: aString "Parse the argument, aString, and make this be the receiver's structure." | categorySpecs | categorySpecs := aString parseAsLiteralToken. "If nothing was scanned and I had no elements before, then default me" (categorySpecs isEmpty and: [elementArray isEmpty]) ifTrue: [^ self setDefaultList: Array new]. ^ self changeFromCategorySpecs: categorySpecs! ! !ChangeRecord methodsFor: 'access' stamp: 'ClementBera 5/16/2013 13:07' prior: 18794397! prior | currFile preamble prevPos tokens prevFileIndex | currFile := file readOnlyCopy. currFile position: (0 max: position - 150). [currFile position < (position - 1)] whileTrue: [preamble := currFile nextChunk]. currFile close. prevPos := nil. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseAsLiteralToken] ifFalse: [tokens := Array new]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size - 5) == #methodsFor:]) ifTrue: [ (tokens at: tokens size - 3) == #stamp: ifTrue: [ prevPos := tokens last. prevFileIndex := SourceFiles fileIndexFromSourcePointer: prevPos. prevPos := SourceFiles filePositionFromSourcePointer: prevPos] ifFalse: [ prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. prevPos ifNil: [^ nil]. ^ {prevFileIndex. prevPos. SourceFiles sourcePointerFromFileIndex: prevFileIndex andPosition: prevPos}! ! !ChangeSet class methodsFor: 'scanning' stamp: 'ClementBera 5/16/2013 13:07' prior: 18857052! scanCategory: file "Scan anything that involves more than one chunk; method name is historical only" | itemPosition item tokens stamp isComment anIndex | itemPosition := file position. item := file nextChunk. isComment := (item includesSubstring: 'commentStamp:'). (isComment or: [item includesSubstring: 'methodsFor:']) ifFalse: ["Maybe a preamble, but not one we recognize; bail out with the preamble trick" ^{(ChangeRecord new file: file position: itemPosition type: #preamble)}]. tokens := item parseAsLiteralToken. tokens size >= 3 ifTrue: [stamp := ''. anIndex := tokens indexOf: #stamp: ifAbsent: [nil]. anIndex ifNotNil: [stamp := tokens at: (anIndex + 1)]. tokens second == #methodsFor: ifTrue: [^ self scanFile: file category: tokens third class: tokens first meta: false stamp: stamp]. tokens third == #methodsFor: ifTrue: [^ self scanFile: file category: tokens fourth class: tokens first meta: true stamp: stamp]]. tokens second == #commentStamp: ifTrue: [stamp := tokens third. item := (ChangeRecord new file: file position: file position type: #classComment class: tokens first category: nil meta: false stamp: stamp). file nextChunk. file skipStyleChunk. ^Array with: item]. ^#()! ! !ChangeSet class methodsFor: 'scanning' stamp: 'ClementBera 5/16/2013 13:08' prior: 18859790! scanVersionsOf: method class: class meta: meta category: cat selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp changeList file | changeList := OrderedCollection new. position := method filePosition. sourceFilesCopy := SourceFiles collect:[:x | x ifNotNil:[x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue:[ file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseAsLiteralToken] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-3) = #stamp: ifTrue:[ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos. ] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last. ]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil] ]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size. ] ]. changeList add: (ChangeRecord new file: file position: position type: #method class: class name category: cat meta: meta stamp: stamp). position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]. ]. sourceFilesCopy do: [:x | x ifNotNil:[x close]]. ^changeList! ! !MczInstaller methodsFor: 'utilities' stamp: 'ClementBera 5/16/2013 13:22' prior: 25418191! parseMember: fileName | tokens | tokens := (zip contentsOf: fileName) parseAsLiteralToken first. ^ self associate: tokens! ! !ScannerTest methodsFor: 'testing' stamp: 'ClementBera 5/16/2013 13:13' prior: 36149901! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" self shouldnt: ['1@-1' parseAsLiteralToken] raise: Error. self assert: ('1@-1' parseAsLiteralToken at: 2) asString = '@-'! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'ClementBera 5/16/2013 13:09' prior: 37237346! supportTestSourceRangeAccessForInjectInto: method source: source selectionSequence: selections "Test debugger source range selection for inject:into:" | evaluationCount sourceMap debugTokenSequence debugCount | evaluationCount := 0. sourceMap := method debuggerMap abstractSourceMap. debugTokenSequence := selections collect: [:string| string parseAsLiteralToken]. debugCount := 0. thisContext runSimulated: [(1 to: 2) withArgs: { 0. [:sum :each| evaluationCount := evaluationCount + 1. sum + each]} executeMethod: method] contextAtEachStep: [:ctxt| | range debugTokens | (ctxt method == method and: ["Exclude the send of #closureCopy:copiedValues: and braceWith:with: to create the block, and the #new: and #at:'s for the indirect temp vector. This for compilation without closure bytecodes. (Note that at:put:'s correspond to stores)" (ctxt willSend and: [(#(closureCopy:copiedValues: new: at: braceWith:with:) includes: ctxt selectorToSendOrSelf) not]) "Exclude the store of the argument into the home context (for BlueBook blocks) and the store of an indirection vector into an initial temp" or: [(ctxt willStore and: [(ctxt isBlock and: [ctxt pc = ctxt startpc]) not and: [(ctxt isBlock not and: [((self abstractPCForContext: ctxt) = 2)]) not]]) or: [ctxt willReturn]]]) ifTrue: [debugTokens := debugTokenSequence at: (debugCount := debugCount + 1) ifAbsent: [#(bogusToken)]. self assert: (sourceMap includesKey: (self abstractPCForContext: ctxt)). range := sourceMap at: (self abstractPCForContext: ctxt) ifAbsent: [(1 to: 0)]. self assert: (source copyFrom: range first to: range last) parseAsLiteralToken = debugTokens]]. self assert: evaluationCount = 2! ! !ClassCommentVersionsBrowser methodsFor: 'basic function' stamp: 'ClementBera 5/16/2013 13:07' prior: 19181822! scanVersionsOf: class "Scan for all past versions of the class comment of the given class" | oldCommentRemoteStr sourceFilesCopy position prevPos stamp preamble tokens prevFileIndex | classOfMethod := class. oldCommentRemoteStr := class organization commentRemoteStr. currentCompiledMethod := oldCommentRemoteStr. selectorOfMethod := #Comment. changeList := OrderedCollection new. list := OrderedCollection new. listIndex := 0. oldCommentRemoteStr ifNil:[^ nil] ifNotNil: [oldCommentRemoteStr sourcePointer]. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. position := oldCommentRemoteStr position. file := sourceFilesCopy at: oldCommentRemoteStr sourceFileNumber. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). " Skip back to before the preamble" [file position < (position-1)] "then pick it up from the front" whileTrue: [preamble := file nextChunk]. prevPos := nil. stamp := ''. (preamble findString: 'commentStamp:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseAsLiteralToken. (tokens at: tokens size-3) = #commentStamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]] ifFalse: ["The stamp get lost, maybe after a condenseChanges" stamp := '']. self addItem: (ChangeRecord new file: file position: position type: #classComment class: class name category: nil meta: class stamp: stamp) text: stamp , ' ' , class name , ' class comment'. prevPos = 0 ifTrue:[prevPos := nil]. position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/16/2013 13:22' prior: 24822191! parseMember: fileName | tokens | tokens := (self zip contentsOf: fileName) parseAsLiteralToken first. ^ self associate: tokens! ! !VersionsBrowser methodsFor: 'init & update' stamp: 'ClementBera 5/16/2013 13:07' prior: 54642045! scanVersionsOf: method class: class meta: meta category: category selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp cat | selectorOfMethod := selector. currentCompiledMethod := method. classOfMethod := meta ifTrue: [class class] ifFalse: [class]. cat := category ifNil: ['']. changeList := OrderedCollection new. list := OrderedCollection new. self addedChangeRecord ifNotNil: [ :change | self addItem: change text: ('{1} (in {2})' translated format: { change stamp. change fileName }) ]. listIndex := 0. position := method filePosition. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseAsLiteralToken] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue: [(tokens at: tokens size-3) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last]. cat := tokens at: tokens size-4. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue: [(tokens at: tokens size-1) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size]. cat := tokens at: tokens size-2]. self addItem: (ChangeRecord new file: file position: position type: #method class: class name category: category meta: meta stamp: stamp) text: stamp , ' ' , class name , (meta ifTrue: [' class '] ifFalse: [' ']) , selector, ' {', cat, '}'. position := prevPos. prevPos notNil ifTrue: [file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !ChunkFileFormatParser methodsFor: 'parsing' stamp: 'ClementBera 5/16/2013 13:08' prior: 19028932! parseNextDeclaration | isMetadata nextChunk | readStream skipSeparators. (self isNextStyleChunk) ifTrue: [ self addDeclaration: (StyleDeclaration contents: (self readUpToEndOfStyleChunk)). ^self ]. isMetadata := self isNextChunkMetaData. nextChunk := self nextChunk. isMetadata ifFalse: [ self addDeclaration: (DoItDeclaration contents: nextChunk). ] ifTrue: [ | substrings | substrings := nextChunk parseAsLiteralToken. (substrings includes: 'methodsFor:') ifTrue: [ ^self parseMethodDeclarations: substrings ]. (substrings includes: 'commentStamp:') ifTrue: [ ^self parseCommentDeclaration: substrings ]. (substrings includes: 'reorganize') ifTrue: [ ^self parseClassOrganization: substrings ]. ]! ! !CompiledMethod methodsFor: '*Tools' stamp: 'ClementBera 5/16/2013 13:09' prior: 19781755! explorerContents "(CompiledMethod compiledMethodAt: #explorerContents) explore" ^Array streamContents: [:s| | tokens | tokens := (self headerDescription readStream skipTo: $"; upTo: $") parseAsLiteralToken. s nextPut: (ObjectExplorerWrapper with: ((0 to: tokens size by: 2) collect: [:i| i = 0 ifTrue: [self header] ifFalse: [{tokens at: i - 1. tokens at: i}]]) name: 'header' model: self). (1 to: self numLiterals) do: [:key| s nextPut: (ObjectExplorerWrapper with: (self literalAt: key) name: ('literal', key printString contractTo: 32) model: self)]. self isQuick ifTrue: [s nextPut: (ObjectExplorerWrapper with: self symbolic name: #symbolic model: self)] ifFalse: [self symbolicLinesDo: [:pc :line| pc <= 1 ifTrue: [s nextPut: (ObjectExplorerWrapper with: line name: 'pragma' model: self)] ifFalse: [s nextPut: (ObjectExplorerWrapper with: line name: pc printString model: self)]]]. "should be self numLiterals + 1 * Smalltalk wordSize + 1" self endPC + 1 to: self basicSize do: [:key| s nextPut: (ObjectExplorerWrapper with: (self basicAt: key) name: key printString model: self)]]! ! !CompiledMethod methodsFor: 'printing' stamp: 'ClementBera 5/16/2013 13:09' prior: 19824393! timeStampFromFile: file "return the timestamp of this method for a given source filestream" | preamble stamp tokens tokenCount| preamble := self getPreambleFrom: file at: (0 max: self filePosition - 3). stamp := String new. tokens := (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [preamble parseAsLiteralToken] ifFalse: [Array new "ie cant be back ref"]. (((tokenCount := tokens size) between: 7 and: 8) and: [(tokens at: tokenCount - 5) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 3) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount - 2]]. ((tokenCount between: 5 and: 6) and: [(tokens at: tokenCount - 3) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 1) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount]]. ^ stamp ! ! !MCSystemCategoryParser methodsFor: 'accessing' stamp: 'ClementBera 5/16/2013 13:11' prior: 25058803! category | tokens | tokens := source parseAsLiteralToken. tokens size = 3 ifFalse: [self error: 'Unrecognized category definition']. ^ tokens at: 3! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/16/2013 13:11' prior: 25032803! categoryFromDoIt: aString | tokens | tokens := aString parseAsLiteralToken. tokens size = 3 ifFalse: [self error: 'Unrecognized category definition']. ^ tokens at: 3! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/16/2013 13:11' prior: 25033073! classDefinitionFrom: aPseudoClass | tokens traitCompositionString lastIndex classTraitCompositionString | tokens := aPseudoClass definition parseAsLiteralToken. traitCompositionString := (aPseudoClass definition readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. classTraitCompositionString := (aPseudoClass metaClass definition asString readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}']. classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}']. lastIndex := tokens size. ^ MCClassDefinition name: (tokens at: 3) superclassName: (tokens at: 1) traitComposition: traitCompositionString classTraitComposition: classTraitCompositionString category: (tokens at: lastIndex) instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ') classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ') poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ') classInstVarNames: (self classInstVarNamesFor: aPseudoClass) type: (self typeOfSubclass: (tokens at: 2)) comment: (self commentFor: aPseudoClass) commentStamp: (self commentStampFor: aPseudoClass)! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/16/2013 13:11' prior: 25034400! classInstVarNamesFor: aPseudoClass | tokens | self flag: #traits. aPseudoClass metaClass hasDefinition ifFalse: [^ #()]. tokens := aPseudoClass metaClass definition parseAsLiteralToken. "tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']." ^ tokens last findTokens: ' '! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'ClementBera 5/16/2013 13:13' prior: 50631249! protocolAt: sourcePointer for: sourceDataPointers "Answer the protocol for a given method, retrieved from the sources or changes file. Answer unfound protocol if no protocol is available." | preamble protocol tokens protocolPosition | protocol := 'unfound protocol'. "this is to indicate that the tagging in the source does not use the correct format. We will have to fix that. For example some traits methods are wrongly tagged. see http://code.google.com/p/pharo/issues/detail?id=4581" preamble := self sourcedDataAt: sourcePointer. preamble = 'Trait method' ifTrue: [ ^nil ]. (preamble findString: (sourceDataPointers key) startingAt: 1) > 0 ifTrue: [ tokens := preamble parseAsLiteralToken. protocolPosition := tokens indexOf: sourceDataPointers key. protocolPosition = 0 ifFalse: [ "New format gives change protocol and unified prior pointer" protocol := tokens at: protocolPosition + 1] ]. ^protocol! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'ClementBera 5/16/2013 13:13' prior: 50634159! timeStampAt: sourcePointer for: sourceDataPointers "Answer the authoring time-stamp for the given method, retrieved from the sources or changes file. Answer the empty string if no time stamp is available." | preamble stamp tokens stampPosition | stamp := ''. preamble := self sourcedDataAt: sourcePointer. (preamble findString: (sourceDataPointers key) startingAt: 1) > 0 ifTrue: [ tokens := preamble parseAsLiteralToken. stampPosition := tokens indexOf: sourceDataPointers value. stampPosition = 0 ifFalse: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: stampPosition + 1]]. ^stamp! ! !Symbol class methodsFor: 'instance creation' stamp: 'ClementBera 5/16/2013 13:14' prior: 51364143! readFrom: strm "Symbol readFromString: '#abc'" strm peek = $# ifFalse: [self error: 'Symbols must be introduced by #']. ^ strm parseAsLiteralToken advance "Just do what the code scanner does"! ! !Finder methodsFor: 'private' stamp: 'ClementBera 5/16/2013 13:10' prior: 22121496! findSelector: aString "Answer the selector of aString." | example tokens | example := aString. tokens := example parseAsLiteralToken. tokens size = 1 ifTrue: [^ tokens first]. tokens first == #'^' ifTrue: [^ nil]. (tokens second includes: $:) ifTrue: [^ example findSelector]. Symbol hasInterned: tokens second ifTrue: [:aSymbol | ^ aSymbol]. ^ nil! ! !ChangeList methodsFor: 'viewing access' stamp: 'ClementBera 5/16/2013 13:06' prior: 18768614! contentsDiffedFromCurrent "Answer the contents diffed forward from current (in-memory) method version" | aChange aClass | listIndex = 0 ifTrue: [^ '']. aChange := changeList at: listIndex. (aChange type == #method and: [(aClass := aChange methodClass) notNil and: [aClass includesSelector: aChange methodSelector]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: (aClass sourceCodeAt: aChange methodSelector) to: aChange text inClass: aClass prettyDiffs: self showingPrettyDiffs]. aChange type == #doIt ifTrue: [| tokens | tokens := aChange string parseAsLiteralToken. ((tokens select: [:substr| #(subclass: variableByteSubclass: variableWordSubclass: instanceVariableNames: classVariableNames: ) includes: substr]) asSet size >= 3 and: [(aClass := Smalltalk globals at: tokens third ifAbsent: []) notNil and: [aClass isBehavior]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass definition to: aChange string]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #instanceVariableNames: and: [(aClass := Smalltalk globals at: tokens first ifAbsent: []) notNil and: [aClass isBehavior]]]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass class definition to: aChange string]]. (aChange type == #classComment and: [(aClass := aChange commentClass) notNil]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass comment asString to: aChange string]. ^(changeList at: listIndex) text! ! !ChangeList methodsFor: 'scanning' stamp: 'ClementBera 5/16/2013 13:06' prior: 18763285! scanCategory "Scan anything that involves more than one chunk; method name is historical only" | itemPosition item tokens stamp anIndex | itemPosition := file position. item := file nextChunk. ((item includesSubstring: 'commentStamp:') or: [(item includesSubstring: 'methodsFor:') or: [item endsWith: 'reorganize']]) ifFalse: ["Maybe a preamble, but not one we recognize; bail out with the preamble trick" ^ self addItem: (ChangeRecord new file: file position: itemPosition type: #preamble) text: ('preamble: ' , item contractTo: 50)]. tokens := item parseAsLiteralToken. tokens size >= 3 ifTrue: [stamp := ''. anIndex := tokens indexOf: #stamp: ifAbsent: [nil]. anIndex ifNotNil: [stamp := tokens at: (anIndex + 1)]. tokens second == #methodsFor: ifTrue: [^ self scanCategory: tokens third class: tokens first meta: false stamp: stamp]. tokens third == #methodsFor: ifTrue: [^ self scanCategory: tokens fourth class: tokens first meta: true stamp: stamp]]. tokens second == #commentStamp: ifTrue: [stamp := tokens third. self addItem: (ChangeRecord new file: file position: file position type: #classComment class: tokens first category: nil meta: false stamp: stamp) text: 'class comment for ' , tokens first, (stamp isEmpty ifTrue: [''] ifFalse: ['; ' , stamp]). file nextChunk. ^ file skipStyleChunk]. self assert: tokens last == #reorganize. self addItem: (ChangeRecord new file: file position: file position type: #reorganize class: tokens first category: nil meta: false stamp: stamp) text: 'organization for ' , tokens first, (tokens second == #class ifTrue: [' class'] ifFalse: ['']). file nextChunk! ! !ChangeList methodsFor: 'menu actions' stamp: 'ClementBera 5/16/2013 13:06' prior: 18760545! selectUnchangedDefinitions "Selects all recognizable definitions for which there is already a definition in the current image, whose source is exactly the same." | change class tokens | Cursor read showWhile: [1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: false. (change type = #method and: [(class := change methodClass) notNil and: [class includesSelector: change methodSelector]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = (class sourceCodeAt: change methodSelector) asString withBlanksCondensed]. (change type == #classComment and: [(class := change commentClass) notNil]) ifTrue: [listSelections at: i put: change string = class comment asString]. change type == #doIt ifTrue: [tokens := change string parseAsLiteralToken. ((tokens select: [:substr| #(subclass: variableSubclass: variableByteSubclass: variableWordSubclass: instanceVariableNames: classVariableNames: ) includes: substr]) asSet size >= 3 and: [(class := Smalltalk globals at: tokens third ifAbsent: []) notNil and: [class isBehavior]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = class definition withBlanksCondensed]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #instanceVariableNames: and: [(class := Smalltalk globals at: tokens first ifAbsent: []) notNil and: [class isBehavior]]]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = class class definition withBlanksCondensed]. (tokens size = 3 and: [tokens second == #removeSelector: and: [(class := Smalltalk at: tokens first ifAbsent: []) isNil or: [class isBehavior and: [(class includesSelector: tokens third) not]]]]) ifTrue: [listSelections at: i put: true]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #removeSelector: and: [(class := Smalltalk at: tokens first ifAbsent: []) isNil or: [class isBehavior and: [(class class includesSelector: tokens fourth) not]]]]]) ifTrue: [listSelections at: i put: true]]]]. self changed: #allSelections! ! !MCScriptParser methodsFor: 'actions' stamp: 'ClementBera 5/16/2013 13:11' prior: 24973678! addDefinitionsTo: aCollection | tokens definition | tokens := source parseAsLiteralToken. definition := MCScriptDefinition scriptSelector: tokens second allButLast script: tokens third packageName: tokens first third. aCollection add: definition.! ! !String methodsFor: 'converting' stamp: 'ClementBera 5/16/2013 13:05'! parseAsLiteralToken ^ Scanner new scanTokens: self! ! !MCTraitDefinition methodsFor: '*Ring-Monticello' stamp: 'ClementBera 5/16/2013 13:12' prior: 25082904! classTraitCompositionString ^self traitComposition ifNil: [ '{}' ] ifNotNil: [ :source| | tokens tcs | tcs := ''. tokens := source parseAsLiteralToken. tokens do:[ :each| each first isUppercase ifTrue: [ tcs := tcs, each, ' classTrait + ' ] ]. tcs isEmpty ifTrue: [ '{}' ] ifFalse:[ tcs copyFrom: 1 to: tcs size - 3 ] ]! ! !MCTraitDefinition methodsFor: 'comparing' stamp: 'ClementBera 5/16/2013 13:12' prior: 25083898! requirements "Assuming that traits in a composition can be identified by testing for the first character beeing an uppercase character (and thus not a special character such as {, # etc.)" | tokens traitNames | self hasTraitComposition ifFalse: [ ^Array new ]. tokens := self traitComposition parseAsLiteralToken. traitNames := tokens select: [:each | each first isUppercase]. ^traitNames asArray! ! MczInstaller removeSelector: #scanner! "CodeImport"! "Collections-Strings"! "CollectionsTests"! "CompilerTests"! "Kernel"! "Monticello"! "NewClassOrganizer"! "PackageInfo"! "Polymorph-Widgets"! "RPackage-Core"! "Ring-Core-Kernel"! "Ring-Monticello"! "Spec-Widgets"! "System-Changes"! "System-FilePackage"! "System-Installers"! "Tools"! ----End fileIn----! ----QUIT----an Array(16 May 2013 5:10:02 pm) Pharo.image priorSource: 4842817! ----STARTUP----an Array(16 May 2013 5:17:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 May 2013 5:17:20 pm) Pharo-30136.image priorSource: 4901912! ----STARTUP----an Array(16 May 2013 5:30:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/16/2013 17:28' prior: 38397546! commentForCurrentUpdate ^ '10547 Do not run CommandLineHandlers on the existing stack https://pharo.fogbugz.com/f/cases/10547'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/16/2013 17:29'! script234 ^ 'AST-Core-MarcusDenker.148.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.254.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.460.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1453.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.273.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.168.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/16/2013 17:29'! update30137 "self new update30137" self withUpdateLog: '10547 Do not run CommandLineHandlers on the existing stack https://pharo.fogbugz.com/f/cases/10547'. self loadTogether: self script234 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CommandLineHandler commentStamp: '' prior: 19732421! A CommandLineHandler is activated by the CommandLine. The responsible handler with the highest priority is selected and its instance-side method #activate is invoked. By default the handlers are selected by their class name. In the following shell invocation the FooHandler is chosen: $PATH_TO_VM myImage.image FooHandler A handler may provide a short name with the class-side #commandName method. If the FooHandler defined #commandName returning 'foo' it would be activated with the following shell invocation: $PATH_TO_VM myImage.image foo For more sophisticated handler selection the CommandLineHandler should implement the #isResponsibleFor: class-side method. An instance of the current command line options is passed to this method which should then return a boolean. Between all the responsible handlers the one with the highes #priority is chosen. To change the priority overwrite the class-side accessor. ! !Session commentStamp: '' prior: 0! I am a unique identifier for the current smalltalk session. On each image startup the current session is invalidated and a new session is created. ! !EvaluateCommandLineHandler methodsFor: 'commands' stamp: 'CamilloBruni 5/9/2013 20:17' prior: 35771406! evaluate: aStream | result | [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] on: Error, ParserNotification do: [ :error | self handleError: error ].! ! !Exit methodsFor: 'printing' stamp: 'CamilloBruni 5/9/2013 20:10'! printOn: aStream super printOn: aStream. aStream space print: self status.! ! !BasicCodeLoader methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 19:54' prior: 34053174! activate self activateHelp ifTrue: [ ^ self ]. self loadSourceFiles: (self commandLine allFilesWithExtension: 'st'). self installSourceFiles. (self commandLine hasOption: 'quit') ifTrue: [ self exitSuccess ].! ! !CommandLineHandler commentStamp: '' prior: 38466951! A CommandLineHandler is activated by the CommandLine. The responsible handler with the highest priority is selected and its instance-side method #activate is invoked. By default the handlers are selected by their class name. In the following shell invocation the FooHandler is chosen: $PATH_TO_VM myImage.image FooHandler A handler may provide a short name with the class-side #commandName method. If the FooHandler defined #commandName returning 'foo' it would be activated with the following shell invocation: $PATH_TO_VM myImage.image foo For more sophisticated handler selection the CommandLineHandler should implement the #isResponsibleFor: class-side method. An instance of the current command line options is passed to this method which should then return a boolean. Between all the responsible handlers the one with the highes #priority is chosen. To change the priority overwrite the class-side accessor. ! !CommandLineHandler methodsFor: 'utility' stamp: 'CamilloBruni 5/9/2013 19:58' prior: 34463341! exitFailure ^ self exitFailure: 'Command line handler failed'! ! !CommandLineHandler methodsFor: 'utility' stamp: 'CamilloBruni 5/9/2013 19:52' prior: 36836111! exitFailure: aMessage self hasSessionChanged ifTrue: [ ^ self ]. Exit signalFailure: aMessage ! ! !CommandLineHandler methodsFor: 'utility' stamp: 'CamilloBruni 5/9/2013 19:53' prior: 34463651! exitSuccess self hasSessionChanged ifTrue: [ ^ self ]. Exit signalSuccess ! ! !CommandLineHandler methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 19:54'! hasSessionChanged "check whether the session has changed since the commandline handler as been created" ^ (session == Smalltalk session) not! ! !CommandLineHandler methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/9/2013 19:44' prior: 19735733! initialize super initialize. session := Smalltalk session. self initializeStdout; initializeStderr. ! ! !CommandLineHandler methodsFor: 'utility' stamp: 'CamilloBruni 5/9/2013 20:18' prior: 19737438! quit self exitSuccess! ! !Session commentStamp: '' prior: 38467927! I am a unique identifier for the current smalltalk session. On each image startup the current session is invalidated and a new session is created. ! !Session class methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 19:46'! current ^ current ifNil: [ current := self new ]! ! !Session class methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 19:46'! reset current := nil! ! !SmalltalkImage methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 20:14' prior: 37261247! isHeadless "Check if vm were run with headless parameter. Different VMs for different platform have different multiple way(s) to indicate that" -1000 to: 1000 do: [ :n | (#('display=none' '-headless' '-vm-display-null' '-nodisplay' '--headless' '--vm-display-null' '--nodisplay') includes: (self vm getSystemAttribute: n)) ifTrue: [ ^ true ]]. ^ false ! ! !SmalltalkImage methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 19:47' prior: 33504259! session "Answer the current session object." ^ Session current.! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'MarcusDenker 5/16/2013 17:28' prior: 38039588! snapshot: save andQuit: quit "Mark the changes file and close all files as part of #processShutdownList. If save is true, save the current state of this Smalltalk in the image file. If quit is true, then exit to the outer OS shell. The latter part of this method runs when resuming a previously saved image. This resume logic checks for a document file to process when starting up." | snapshotResult isNewImage | self addSnapshotRecord: save andQuit: quit. self shutDownImage: quit. save ifTrue: [ snapshotResult := self snapshotPrimitive. "<-- PC frozen here on image file" isNewImage := snapshotResult == true. SystemAnnouncer uniqueInstance snapshotDone: isNewImage ] ifFalse: [ isNewImage := false ]. (quit and: [ isNewImage not ]) ifTrue: [ self quitPrimitive ]. "create a new session object if we're booting" isNewImage ifTrue: [ Session reset ]. self startupImage: isNewImage snapshotWorked: snapshotResult. "We return the resuming state, which may be useful for users to know the state of the image" ^ isNewImage! ! !DefaultCommandLineHandler class methodsFor: 'class initialization' stamp: 'MarcusDenker 5/16/2013 17:28' prior: 38058182! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. WorldState addDeferredUIMessage: [ self new activate ]! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 20:08' prior: 20612644! activate self arguments ifEmpty: [ ^ self ]. [ self handleArgument: self arguments first; exitSuccess ] on: Exit do: [ :exit | ^ self handleExit: exit ]! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 20:04' prior: 34480341! activateSubCommand: aCommandLinehandler [ aCommandLinehandler activateWith: commandLine ] on: Exit do: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ]. "the return value of this method is used to check if the subcommand was successfull" ^ aCommandLinehandler! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 20:04'! handleExit: exit ^ self handleExit: exit for: self! ! !DefaultCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 20:14'! handleExit: exit for: aCommandLinehandler Smalltalk isInteractive ifFalse: [ ^ exit pass ]. exit isSuccess ifFalse: [ ^ Error signal: exit messageText ]. self inform: aCommandLinehandler name, ' successfully finished'. "for failing subcommands return self which is used to check if the subcommand failed" exit isSuccess ifTrue: [ ^ aCommandLinehandler ].! ! SmalltalkImage removeSelector: #newSessionObject! "Kernel"! "System-CommandLine"! "System-Support"! ----End fileIn----! ----QUIT----an Array(16 May 2013 5:30:54 pm) Pharo.image priorSource: 4902108! ----STARTUP----an Array(16 May 2013 5:37:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 May 2013 5:37:39 pm) Pharo-30137.image priorSource: 4920537! ----STARTUP----an Array(17 May 2013 7:54:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 07:52' prior: 38456837! commentForCurrentUpdate ^ '10640 unify CompiledMethod #classBinding and methodClassAssociation https://pharo.fogbugz.com/f/cases/10640 10655 fix failing test: SymbolTest.testReadFrom https://pharo.fogbugz.com/f/cases/10655 10643 remove remove CompiledMethod>>receiver:withArguments:executeMethod: https://pharo.fogbugz.com/f/cases/10643 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 07:52'! script235 ^ 'AST-Core-MarcusDenker.150.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.256.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.460.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.275.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.168.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 07:52'! update30138 "self new update30138" self withUpdateLog: '10640 unify CompiledMethod #classBinding and methodClassAssociation https://pharo.fogbugz.com/f/cases/10640 10655 fix failing test: SymbolTest.testReadFrom https://pharo.fogbugz.com/f/cases/10655 10643 remove remove CompiledMethod>>receiver:withArguments:executeMethod: https://pharo.fogbugz.com/f/cases/10643 '. self loadTogether: self script235 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Behavior methodsFor: 'compiling' stamp: 'MarcusDenker 5/16/2013 13:45' prior: 18043421! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" | binding | oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. "Ensure that we share a common binding after recompilation. This is so that ClassBuilder reshapes avoid creating new bindings for every method when recompiling a large class hierarchy." binding := self binding. self methodsDo: [:m| m classBinding == binding ifFalse: [m classBinding: binding ]]. ! ! !Metaclass methodsFor: 'compiling' stamp: 'MarcusDenker 5/16/2013 13:46' prior: 26318894! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! !Symbol class methodsFor: 'instance creation' stamp: 'di 10/11/1999 00:02' prior: 38448136! readFrom: strm "Symbol readFromString: '#abc'" strm peek = $# ifFalse: [self error: 'Symbols must be introduced by #']. ^ (Scanner new scan: strm) advance "Just do what the code scanner does"! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 8/22/2012 16:24' prior: 19799400! author "Answer the author of the current version of the receiver. retrieved from the sources or changes file. Answer the empty string if no time stamp is available." "(CompiledMethod compiledMethodAt: #author) author" self timeStamp ifNotEmpty: [:s | |subS| subS := s substrings first. subS first isLetter ifTrue:[^subS]]. ^''! ! !CompiledMethod methodsFor: 'accessing' stamp: 'stephane.ducasse 3/30/2009 22:43' prior: 19799835! category ^self methodClass organization categoryOfElement:self selector! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 13:46' prior: 38392014! classBinding "answer the association to the class that I am installed in, or nil if none." ^self literalAt: self numLiterals! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 13:46' prior: 34778731! classBinding: aBinding "sets the association to the class that I am installed in" ^self literalAt: self numLiterals put: aBinding.! ! !CompiledMethod methodsFor: 'source code management' stamp: 'MarcusDenker 5/2/2013 19:14' prior: 36817469! getSourceReplacingSelectorWith: newSelector | oldKeywords newKeywords args newSelectorWithArgs source oldSelector s | source := self sourceCode. oldSelector := self ast selector. oldSelector = newSelector ifTrue: [ ^ source ]. oldKeywords := oldSelector keywords. newKeywords := (newSelector ifNil: [self defaultSelector]) keywords. [oldKeywords size = newKeywords size] assert. args := self ast argumentNames. newSelectorWithArgs := String streamContents: [:stream | newKeywords withIndexDo: [:keyword :index | stream nextPutAll: keyword. stream space. args size >= index ifTrue: [ stream nextPutAll: (args at: index); space]]]. s := source string readStream. oldKeywords do: [ :each | s match: each ]. args isEmpty ifFalse: [ s match: args last ]. ^newSelectorWithArgs trimBoth, s upToEnd! ! !CompiledMethod methodsFor: 'accessing-pragmas & properties' stamp: 'CamilloBruni 2/20/2012 15:34' prior: 19768559! hasPragmaNamed: aSymbol ^ self pragmas anySatisfy: [ :pragma | pragma keyword = aSymbol ]! ! !CompiledMethod methodsFor: 'accessing' stamp: 'md 1/20/2006 16:09' prior: 19800630! method "polymorphic with closure" ^ self! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 13:48' prior: 19788733! methodClassAssociation self deprecated: 'use classBinding:' on: '16 May 2013' in: 'Pharo3'. ^self classBinding! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 13:48' prior: 19788956! methodClassAssociation: aBinding self deprecated: 'use classBinding:' on: '16 May 2013' in: 'Pharo3'. self classBinding: aBinding! ! CompiledMethod removeSelector: #receiver:withArguments:executeMethod:! CompiledMethod class removeSelector: #receiver:withArguments:executeMethod:! "AST-Core"! "Collections-Strings"! "Kernel"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(17 May 2013 7:54:57 am) Pharo.image priorSource: 4920733! ----STARTUP----an Array(17 May 2013 8:02:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 8:02:01 am) Pharo-30138.image priorSource: 4935858! ----STARTUP----an Array(17 May 2013 1:10:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 13:09' prior: 38475462! commentForCurrentUpdate ^ '10656 add Compiler>>#parseLiterals: https://pharo.fogbugz.com/f/cases/10656 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 13:09'! script236 ^ 'AST-Core-MarcusDenker.150.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.259.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-EstebanLorenzano.84.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1434.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-EstebanLorenzano.94.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.275.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.23.mcz Spec-Core-EstebanLorenzano.115.mcz Spec-Debugger-MarcusDenker.50.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.18.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.23.mcz Spec-Tools-EstebanLorenzano.106.mcz Spec-Widgets-MarcusDenker.168.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 13:09'! update30139 "self new update30139" self withUpdateLog: '10656 add Compiler>>#parseLiterals: https://pharo.fogbugz.com/f/cases/10656 '. self loadTogether: self script236 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Compiler methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 10:44'! parseLiterals: aString ^ Scanner new scanTokens: aString! ! !String methodsFor: 'converting' stamp: 'MarcusDenker 5/17/2013 10:45' prior: 38454944! parseAsLiteralToken ^ self class compiler parseLiterals: self! ! "Collections-Strings"! "Compiler"! ----End fileIn----! ----QUIT----an Array(17 May 2013 1:10:52 pm) Pharo.image priorSource: 4936054! ----STARTUP----an Array(17 May 2013 1:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 1:18 pm) Pharo-30139.image priorSource: 4946699! ----STARTUP----an Array(17 May 2013 1:54:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 13:52' prior: 38490783! commentForCurrentUpdate ^ '10557 ArrowUp and arrowDown not working in keymaps https://pharo.fogbugz.com/f/cases/10557 7496 openWithSpecLayout: vs. openWithSpec: https://pharo.fogbugz.com/f/cases/7496'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 13:52'! script237 ^ 'AST-Core-MarcusDenker.150.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.259.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.275.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.52.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 13:52'! update30140 "self new update30140" self withUpdateLog: '10557 ArrowUp and arrowDown not working in keymaps https://pharo.fogbugz.com/f/cases/10557 7496 openWithSpecLayout: vs. openWithSpec: https://pharo.fogbugz.com/f/cases/7496'. self loadTogether: self script237 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InstVarSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:04' prior: 23684574! initialize "Initialization code for InstVarSetter" descriptionHolder := nil asValueHolder. textBindings := Dictionary new. super initialize. self announcer weak on: WidgetBuilt do: [ text widget ifNotNil: [:m | m styler workspace: self ] ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 18:50' prior: 19982147! buildWithSpec: aSpec "Build the widget using the spec name provided as argument" ^ self buildWithSpecLayout: (self class perform: aSpec)! ! !ComposableModel methodsFor: 'removeme' stamp: 'BenjaminVanRyseghem 5/14/2013 19:13'! close 1halt! ! !ComposableModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 19:22' prior: 19989845! delete self widget ifNotNil: [:widget | window contents ifNil: [ widget delete ] ifNotNil: [:o | o delete ]]! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 18:13' prior: 38166711! initialize "Initialization code for ComposableModel" super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. windowIcon := nil asValueHolder. window := nil asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 5/14/2013 19:00' prior: 19975607! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 18:58' prior: 34336124! openDialogWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" ^ self openDialogWithSpecLayout: (self class perform: aSpec)! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 19:23' prior: 34336633! openDialogWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window contents notNil and: [ self needRebuild not ]) ifTrue: [ window contents rebuildWithSpec: aSpec ] ifFalse: [ window contents: (DialogWindowModel new model: self). window contents openWithSpecLayout: aSpec. self initializeDialogWindow: window contents. window contents updateTitle. self takeKeyboardFocus ]. ^ window contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 18:57' prior: 38032373! openWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" ^ self openWithSpecLayout: (self class perform: aSpec)! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 19:23' prior: 38032812! openWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window contents notNil and: [ self needRebuild not ]) ifTrue: [ window contents rebuildWithSpecLayout: aSpec ] ifFalse: [ window contents: (WindowModel new model: self). window contents openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window contents! ! !ComposableModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/14/2013 19:25'! whenWindowChanged: aBlock window whenChangedDo: aBlock! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/14/2013 19:22' prior: 19978452! window ^ window contents ifNil: [ owner ifNil: [ nil ] ifNotNil: [:o | o window ]]! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/14/2013 19:30' prior: 36559271! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self close ] ].! ! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 18:14' prior: 38163209! initialize "Initialization code for MessageBrowser" textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak on: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !SpecInterpreterTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 5/14/2013 19:02' prior: 50708403! testBindings self assert: specInterpreter bindings bindings class equals: MorphicBindings. specInterpreterClass bindings: MorphicBindingsWithSplitters new. self assert: specInterpreter bindings bindings class equals: MorphicBindingsWithSplitters. specInterpreterClass buildWidgetFor: TestingComposableModel new withSpec: #selector. self assert: specInterpreter bindings bindings class equals: MorphicBindings.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 5/14/2013 19:30' prior: 36492243! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged: The mementos instances variables are used for diving" object := nil asValueHolder. super initialize. self whenWindowChanged: [ :w | w whenClosedDo: [ self close ] ].! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 19:23' prior: 18910489! accept self okToChange ifFalse: [ ^self ]. self pickedChanges do: [:change | RBRefactoryChangeManager instance performChange: change ]. window contents delete! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 19:24' prior: 18910908! cancel window contents delete! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/16/2013 18:12' prior: 38036150! openWithSpecLayout: aSpec window contents: (self buildWithSpecLayout: aSpec). window contents openInWorld. self updateTitle.! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 19:24' prior: 54920795! rebuildWithSpec: aSpec | sub | sub := window contents submorphs copy. window contents removeAllMorphs. sub allButLast do: [:e | window contents addMorphBack: e ]. self addModelIn: self widget withSpec: aSpec! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 19:24' prior: 54921068! rebuildWithSpecLayout: aSpec | sub | sub := window contents submorphs copy. window contents removeAllMorphs. sub allButLast do: [:e | window contents addMorphBack: e ]. self addModelIn: self widget withSpecLayout: aSpec! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:27' prior: 54892468! initialize "Initialization code for WidgetSetter" model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer weak on: WidgetBuilt do: [ self registerEvents ]! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:27'! registerEvents ^ apiSetters widget ifNotNil: [ :w | | wdw height | height := apiSetters listItems inject: 0 into: [ :s :e | s + e widget height ]. wdw := self window widget. wdw height: height + wdw labelArea height + 12. wdw width: 470 ]! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/14/2013 18:48' prior: 37340139! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection selectedItems ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt do: [ self selectedItems: selectionHolder contents ].! ! !HandMorph methodsFor: 'private events' stamp: 'GiselaDecuzzi 5/17/2013 13:38' prior: 36910484! generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp charCode keyValue keyEvent | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [ type := #keyDown. lastKeyScanCode := evtBuf third]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [ type := #keystroke]. modifiers := evtBuf fifth. buttons := modifiers bitShift: 3. keyValue := evtBuf third. charCode := evtBuf sixth. type = #keystroke ifTrue: [combinedChar ifNil: [ | peekedEvent | peekedEvent := Sensor peekEvent. (peekedEvent notNil and: [peekedEvent fourth = EventKeyDown]) ifTrue: [ (CombinedChar isCompositionCharacter: charCode) ifTrue: [ combinedChar := CombinedChar new. combinedChar simpleAdd: charCode asCharacter. (combinedChar combinesWith: peekedEvent third asCharacter) ifTrue: [^nil]. ]]] ifNotNil: [ (combinedChar simpleAdd: charCode asCharacter) ifTrue: [charCode := combinedChar combined charCode]. combinedChar := nil]]. keyEvent := KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue charCode: charCode hand: self stamp: stamp. keyEvent scanCode: lastKeyScanCode. ^keyEvent ! ! !SpecDebugger class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/14/2013 19:10' prior: 36619505! specOptimized ^ SpecLayout composed add: #stack origin: 0@0 corner: 1@0.25; add: #toolbar origin: 0@0.25 corner: 1@0.25 offsetOrigin: 0@0 offsetCorner: 0@25; addHSplitter; add: #code origin: 0@0.25 corner: 1@0.80 offsetOrigin: 0@25 offsetCorner: 0@0; addHSplitter; add: [ :r | r add: #receiverInspector; addSplitter; add: #contextInspector] top: 0.8; yourself ! ! !SpecDebugger methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/14/2013 19:26' prior: 36508186! close self removeActionsForSession: self session. self session ifNotNil: [ :aSession | aSession terminate]. contextInspector close. receiverInspector inspector close.! ! !SpecDebugger methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:26' prior: 36508599! initialize session := nil asValueHolder. super initialize. needRefresh := false. self announcer weak on: WidgetBuilt do:[ needRefresh:= true ]. self whenWindowChanged: [:w | w whenClosedDo: [ self close ] ]. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ].! ! !CriticBrowser methodsFor: 'display' stamp: 'BenjaminVanRyseghem 5/14/2013 18:56' prior: 20237237! open ^ self openWithSpec! ! CriticBrowser removeSelector: #openWithSpec! SpecDebugger removeSelector: #openWithSpec! SpecDebugger removeSelector: #buildWithSpec:! SpecInterpreter class removeSelector: #buildWindowFor:! SpecInterpreter class removeSelector: #buildWidgetFor:! DialogWindowModel removeSelector: #buildWithSpec:! AlainTreeModel removeSelector: #buildWithSpec:! EyeInspector removeSelector: #openWithSpec:! WidgetSetter removeSelector: #openWithSpec! WindowModel removeSelector: #openWithSpec:! SpecInterpreterTest removeSelector: #testBuildWindowFor! SpecInterpreterTest removeSelector: #testBuildWidgetFor! MessageBrowser removeSelector: #openWithSpec! InspectorWrapper removeSelector: #openWithSpec:! InstVarSetter removeSelector: #openWithSpec! "Manifest-CriticBrowser"! "Morphic"! "NautilusRefactoring"! "Spec-Builder"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Tests"! "Spec-Tools"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(17 May 2013 1:54:57 pm) Pharo.image priorSource: 4946892! ----STARTUP----an Array(17 May 2013 2:01:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 2:01:48 pm) Pharo-30140.image priorSource: 4970508! ----STARTUP----an Array(17 May 2013 2:26:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 14:24' prior: 38501618! commentForCurrentUpdate ^ '10153 Dependency Symbol -> Scanner https://pharo.fogbugz.com/f/cases/10153'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 14:24'! script238 ^ 'AST-Core-MarcusDenker.150.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.260.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.275.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.52.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 14:24'! update30141 "self new update30141" self withUpdateLog: '10153 Dependency Symbol -> Scanner https://pharo.fogbugz.com/f/cases/10153'. self loadTogether: self script238 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Symbol class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/17/2013 10:22' prior: 38487035! readFrom: strm "Symbol readFromString: '#abc'" strm peek = $# ifFalse: [self error: 'Symbols must be introduced by #']. ^ strm contents parseAsLiteralToken first. ! ! "Collections-Strings"! ----End fileIn----! ----QUIT----an Array(17 May 2013 2:26:51 pm) Pharo.image priorSource: 4970704! ----STARTUP----an Array(17 May 2013 2:33:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 2:33:51 pm) Pharo-30141.image priorSource: 4981308! ----STARTUP----an Array(17 May 2013 3:24:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 15:22' prior: 38525433! commentForCurrentUpdate ^ '10647 Implement Scanner scanTokens in new compilation chain https://pharo.fogbugz.com/f/cases/10647'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 15:23'! script239 ^ 'AST-Core-MarcusDenker.152.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.260.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.275.mcz OpalCompiler-Tests-MarcusDenker.141.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.52.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 15:23'! update30142 "self new update30142" self withUpdateLog: '10647 Implement Scanner scanTokens in new compilation chain https://pharo.fogbugz.com/f/cases/10647'. self loadTogether: self script239 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBParser class methodsFor: 'parsing' stamp: 'MarcusDenker 5/17/2013 14:08'! parseLiterals: aString | parser | parser := self new. parser initializeParserWith: aString. ^parser parseLiterals: aString! ! !RBParser methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 14:15'! parseLiterals: aString | stream | stream := WriteStream on: (Array new: 5). [self atEnd or: [currentToken isSpecial and: [currentToken value = $)]]] whileFalse: [stream nextPut: self parseLiteralArrayObject]. self atEnd ifFalse: [ ^ self parserError: 'Unknown input at end']. ^stream contents collect: [ :each | each value ]! ! "AST-Core"! ----End fileIn----! ----QUIT----an Array(17 May 2013 3:24:51 pm) Pharo.image priorSource: 4981504! ----STARTUP----an Array(17 May 2013 3:31:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 3:31:48 pm) Pharo-30142.image priorSource: 4992490! ----STARTUP----an Array(17 May 2013 4:12:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/17/2013 16:09' prior: 38536233! commentForCurrentUpdate ^ '10615 RBMethodNode classBinding: move it to compilationContext https://pharo.fogbugz.com/f/cases/10615/ ... and update Opal to the latest version'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/17/2013 16:09'! script240 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.7.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.260.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.12.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-EstebanLorenzano.21.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.30.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.52.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.101.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1123.mcz ToolsTest-MarcusDenker.denker.32.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.18.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/17/2013 16:09'! update30143 "self new update30143" self withUpdateLog: '10615 RBMethodNode classBinding: move it to compilationContext https://pharo.fogbugz.com/f/cases/10615/ ... and update Opal to the latest version'. self loadTogether: self script240 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBMethodNode commentStamp: '' prior: 37338728! RBMethodNode is the AST that represents a Smalltalk method. Instance Variables: arguments the arguments to the method body the body/statements of the method nodeReplacements a dictionary of oldNode -> newNode replacements replacements the collection of string replacements for each node replacement in the parse tree selector the method name (cached) selectorParts the tokens for the selector keywords source the source we compiled tags the source location of any resource/primitive tags ! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 37282493! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 34956187! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCOpalExamples methodsFor: 'examples-blocks' stamp: 'MarcusDenker 5/17/2013 15:57' prior: 34986023! exampleBlockExternal | t | t := 1. ^[t] value.! ! !RBMethodNode commentStamp: '' prior: 38557605! RBMethodNode is the AST that represents a Smalltalk method. Instance Variables: arguments the arguments to the method body the body/statements of the method nodeReplacements a dictionary of oldNode -> newNode replacements replacements the collection of string replacements for each node replacement in the parse tree selector the method name (cached) selectorParts the tokens for the selector keywords source the source we compiled tags the source location of any resource/primitive tags ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 15:49' prior: 38013870! compilationContext ^ compilationContext! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/17/2013 15:46' prior: 38320920! doSemanticAnalysisInContext: aCompilationContext "Look up vars in classOrScope. My tree will be annotated with bindings to LexicalScopes and ScopeVars." self compilationContext: aCompilationContext. OCASTSemanticAnalyzer new scope: aCompilationContext getClass parseScope; compilationContext: aCompilationContext; requestor: aCompilationContext requestor; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 15:41' prior: 30777294! methodClass ^self compilationContext getClass ! ! !RBMethodNode methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 15:49' prior: 34626974! methodClass: aClass compilationContext ifNil: [compilationContext := aClass compiler compilationContext]. self compilationContext class: aClass! ! !CompiledMethod methodsFor: '*ast-core' stamp: 'MarcusDenker 5/17/2013 15:39' prior: 19783746! parseTree ^(RBExplicitVariableParser parseMethod: self sourceCode onError: [ :msg :pos | ^ nil ]) methodClass: self methodClass. ! ! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 38558384! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTSemanticAnalyzer methodsFor: 'accessing' stamp: 'ClementBera 5/16/2013 13:59'! compilationContext ^ compilationContext! ! !OCASTSemanticAnalyzer methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/17/2013 15:01' prior: 34748054! initialize blockcounter := 0. scope := OCGlobalScope new. "in case never initialized"! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 11:43' prior: 35548261! storeIntoSpecialVariable: variableNode ^ OCSemanticError new variableNode: variableNode; compilationContext: compilationContext; messageText: 'Cannot store into ->'; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 15:00' prior: 34749510! undeclaredVariable: variableNode ^ OCUndeclaredVariableWarning new variableNode: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 15:01' prior: 34749776! uninitializedVariable: variableNode variableNode ocBinding markRead. ^ OCUninitializedVariableWarning new variableNode: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 15:01' prior: 34750080! unknownSelector: messageNode ^ OCUnknownSelectorWarning new messageNode: messageNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 15:01' prior: 34750313! unusedVariable: variableNode ^ OCUnusedVariableWarning new variableNode: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 15:01' prior: 34750546! variable: variableNode shadows: semVar ^ OCShadowVariableWarning new variableNode: variableNode; shadowedVar: semVar; compilationContext: compilationContext; signal! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/17/2013 14:57' prior: 38315040! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate ] on: SyntaxErrorNotification do: [ :ex | compilationContext requestor ifNotNil: [ compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode ]. ^ failBlock value ]. ^ cm! ! !OpalCompiler methodsFor: 'old - public' stamp: 'ClementBera 5/16/2013 11:16' prior: 36004260! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; evaluate! ! !OpalCompiler methodsFor: 'old - public' stamp: 'ClementBera 5/16/2013 11:16' prior: 36004588! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock logged: logFlag ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; logged: logFlag; evaluate! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/17/2013 15:36'! parseLiterals: aString ^RBParser parseLiterals: aString! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/17/2013 14:58' prior: 38316818! translate self compile. ^ ast! ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 5/17/2013 15:38' prior: 38336255! generate: trailer | irTranslator | irTranslator := IRTranslator new trailer: trailer; interpret: self; pragmas: pragmas; yourself. compiledMethod := irTranslator compiledMethod. self sourceNode ifNotNil: [ compiledMethod classBinding: self sourceNode methodClass binding. compiledMethod selector: self sourceNode selector.] ifNil: [ compiledMethod classBinding: UndefinedObject binding. compiledMethod selector: #UndefinedMethod ]. ^compiledMethod.! ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 38558799! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 12:41'! compilationContext ^ compilationContext! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 12:41'! compilationContext: anObject compilationContext := anObject! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 15:02' prior: 34956523! defaultAction self errorNotification ifFalse: [ ^nil ]. ^self openMenuIn: [:labels :lines :caption | UIManager default chooseFrom: labels lines: lines title: caption]! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 15:03' prior: 34956770! errorNotification ^ compilationContext interactive! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 14:46' prior: 35553200! interactive ^ UIManager default interactiveParserFor: self requestor! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 14:46' prior: 34957627! notify: aString at: location "Refer to the comment in Object|notify:." ^self requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [self requestor notify: aString at: location in: self requestor text]! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 14:45' prior: 34958103! requestor ^ compilationContext requestor! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 11:41'! compilationContext ^ compilationContext! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 11:41'! compilationContext: anObject compilationContext := anObject! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 11:44' prior: 38335062! methodClass ^self methodNode methodClass! ! !OCSemanticError methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 11:44' prior: 35557254! notify: aString at: location "Refer to the comment in Object|notify:." ^compilationContext requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [compilationContext requestor notify: aString at: location in: compilationContext requestor text]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 12:51' prior: 34963060! openMenuIn: aBlock | alternatives labels actions lines caption choice name interval | interval := variableNode sourceInterval. name := variableNode name. alternatives := self possibleVariablesFor: name. labels := OrderedCollection new. actions := OrderedCollection new. lines := OrderedCollection new. name first isLowercase ifTrue: [labels add: 'Declare new temporary variable'. actions add: [self declareTempAndPaste: name]. labels add: 'Declare new instance variable'. actions add: [self declareInstVar: name]] ifFalse: [labels add: 'Define new class'. actions add: [self defineClass: name]. labels add: 'Declare new global'. actions add: [self declareGlobal]. labels add: 'Declare new class variable'. actions add: [self declareClassVar]]. lines add: labels size. alternatives do: [:each | labels add: each. actions add: [self substituteVariable: each atInterval: interval]]. lines add: labels size. labels add: 'Cancel'. caption := 'Unknown variable: ' , name , ' please correct, or cancel:'. choice := aBlock value: labels value: lines value: caption. choice ifNotNil: [self resume: (actions at: choice ifAbsent: [compilationContext failBlock value]) value]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 14:45' prior: 34964869! substituteVariable: varName atInterval: anInterval self substituteWord: varName wordInterval: anInterval offset: 0. self methodNode source: self requestor text. variableNode replaceWith:((RBVariableNode named: varName) ocBinding: (variableNode owningScope lookupVar: varName)). ^ (variableNode owningScope lookupVar: varName) ifNil: [self error: 'should be found']. ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 14:45' prior: 34965345! substituteWord: correctWord wordInterval: spot offset: o "Substitute the correctSelector into the (presuamed interactive) receiver." self requestor correctFrom: (spot first + o) to: (spot last + o) with: correctWord. ^ o + correctWord size - spot size! ! !OCASTCheckerTest methodsFor: 'tools' stamp: 'MarcusDenker 5/17/2013 14:49' prior: 35044638! nameAnalysisNoClosureIn: classOrScope for: ast "Look up vars in classOrScope. My tree will be annotated with bindings to Scopes and Variables." OCASTSemanticAnalyzer new scope: classOrScope parseScope; compilationContext: CompilationContext default; visitNode: ast.! ! RBMethodNode removeSelector: #classBinding:! RBMethodNode removeSelector: #classBinding! OCSemanticWarning removeSelector: #requestor:! OCSemanticWarning removeSelector: #initialize! OCSemanticWarning removeSelector: #errorNotification:! OCASTSemanticAnalyzer removeSelector: #errorNotification:! OCSemanticError removeSelector: #requestor:! OCSemanticError removeSelector: #requestor! "AST-Core"! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(17 May 2013 4:12:53 pm) Pharo.image priorSource: 4992686! ----STARTUP----an Array(17 May 2013 4:19:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 May 2013 4:19:59 pm) Pharo-30143.image priorSource: 5017047! ----STARTUP----an Array(18 May 2013 1:12:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/18/2013 13:05' prior: 38547415! commentForCurrentUpdate ^ '10666 FileList should work on any FileSystem https://pharo.fogbugz.com/f/cases/10666 10664 Unify and clean a bit the CommandLine class comments https://pharo.fogbugz.com/f/cases/10664 10663 RPackageOrganizer out of sync https://pharo.fogbugz.com/f/cases/10663 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/18/2013 13:05'! script241 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.19.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.260.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.601.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.157.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1454.mcz KernelTests-MarcusDenker.514.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.805.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.9.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.93.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.220.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.96.mcz Ring-Monticello-MarcusDenker.14.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.52.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.20.mcz Spec-Layout-MarcusDenker.44.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.208.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.88.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.28.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1124.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/18/2013 13:06'! update30144 "self new update30144" self withUpdateLog: '10666 FileList should work on any FileSystem https://pharo.fogbugz.com/f/cases/10666 10664 Unify and clean a bit the CommandLine class comments https://pharo.fogbugz.com/f/cases/10664 10663 RPackageOrganizer out of sync https://pharo.fogbugz.com/f/cases/10663 '. self loadTogether: self script241 merge: false. RPackageOrganizer initialize. World worldMenu. self flushCaches. ! ! "ScriptLoader30"! !QSystemTally commentStamp: '' prior: 30111992! Tally for assembling system profiles. It's a subclass of Link so we can chain tallies together in the receivers list.! !EvaluateCommandLineHandler commentStamp: '' prior: 21247357! Usage: eval [--help] --help list this help message a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval ! !AndreasSystemProfiler commentStamp: '' prior: 17526980! AndreasSystemProfiler uses sub-msec VM supported PC sampling. In Memory of Andreas Raab. Author, Friend, Colleague. http://forum.world.st/In-Memory-of-Andreas-Raab-td4663424.html Released by Ron, Julie and David Example: AndreasSystemProfiler spyOn: [ 10000 timesRepeat: [ 3.14159 printString ] ] -=-=-=-=-=-=-= Apparently, the time taken to run the provided block is as twice as long as run without the profiler. -=-=-=-=-=-=-= Both AndreasSystemProfiler and MessageTally are periodic sampling profilers. The essential difference between AndreasSystemProfiler and MessageTally is in how the current method is sampled. MessageTally is driven from a high-priority process in a loop waiting on a delay. When the delay fires the lower-priority process being profiled is interrupted, its stack is walked to determine the methods along the call chain, and that data is recorded. But since the sampling occurs when the high-priority process preempts the lower-priority process, a sample is only taken at a preemption point. In particular, primitives are *not* profiled because they are not suspension points. A process can only be suspended on method activation (a non-primitive method activation, or primitive failure) or on backward branch. The cost of primitives is charged to a caller and is inferred by subtracting the cost of children of the caller from the caller itself (subtracting the number of samples in children of the caller form the number of samples in the caller itself). Another problem is that using the clock that underlies Delay, which is typically the clock used by processes being profiled, causes sampling errors due to the sampling and sampled processes cohering. Delays are limited in resolution (at best 1 millisecond) so if the profiled process waits on a delay it'll fire immediately after the profiling process (because the profiling process is at higher priority) and so the sampling process may only ever see the sampled process in a wait state. If MessageTally is used to profile multiple processes then a third problem is that if a primitive causes a process switch then its cost will end up being charged to the process switched-to, not switched from. This is again because sampling can only occur after a primitive has completed (successfully or not). AndreasSystemProfiler is driven from a high-priority process in a loop waiting on a Semaphore known to the VM. The profiling process uses a primitive to schedule a sample some number of ticks of the VM's high-performance clock in the future. When the time is reached the VM samples the current method and the current process, *before any process preemption takes place*, and independently of the standard clock, and signals the semaphore. The profiling process then collects the method,process pair via primitives. So AndreasSystemProfiler provides much more accurate results. That said there are still limitations with primitives and Cog. Currently Cog only samples "interpreter" primitives. Those primitives it implements in machine code (integer and float arithmetic, closure evaluation, at:, identityHash) are not sampled and won't show up; they will be charged to the calling method. This is fixable, since Cog actually compiles the sampling direct into interpreter primitive invocation when profiling is in effect and not at other times, but sampling could be a significant cost in these simple and performance-critical primitives.! !CommandLineHandler commentStamp: '' prior: 38468943! A CommandLineHandler is activated by the CommandLine. The responsible handler with the highest priority is selected and its instance-side method #activate is invoked. By default the handlers are selected by their class name. In the following shell invocation the FooHandler is chosen: pharo Pharo.image FooHandler A handler may provide a short name with the class-side #commandName method. If the FooHandler defined #commandName returning 'foo' it would be activated with the following shell invocation: pharo Pharo.image foo For more sophisticated handler selection the CommandLineHandler should implement the #isResponsibleFor: class-side method. An instance of the current command line options is passed to this method which should then return a boolean. Between all the responsible handlers the one with the highes #priority is chosen. To change the priority overwrite the class-side accessor. ! !ConfigurationCommandLineHandler commentStamp: '' prior: 20075445! Usage: config [--help] [] [--install[=]] [--group=] [--username=] [--password=] --help show this help message A Monticello repository name A valid Metacello Configuration name A valid version for the given configuration A valid Metacello group name An optional username to access the configuration's repository An optional password to access the configuration's repository Examples: # display this help message pharo Pharo.image config # list all configurations of a repository pharo Pharo.image config $MC_REPOS_URL # list all the available versions of a confgurtation pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo # install the stable version pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install #install a specific version '1.5' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 #install a specific version '1.5' and only a specific group 'Tests' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 --group=Tests ! !FLFuelCommandLineHandler commentStamp: '' prior: 21499111! I handle .fuel files that are passed as arguments when starting the image. Usage: fuel [save] [quit] save save the image after loading quit Don't save the image and directly quit the image fater loading Documentation: This command will load the and materialize/install it's contents. If no argument is specified the image continues running with the loaded contents. Example: #Load a fuel file and save and quit the image with the contents: pharo Pharo.image save quit path/to/foo.fuel #Load the contents of foo.fuel and save the image, but continue running: pharo Pharo.image save path/to/foo.fuel #Load the contents of foo.fuel and continue running without saving: pharo Pharo.image path/to/foo.fuel ! !LoadUpdatesCommandLineHandler commentStamp: '' prior: 24544429! Usage: update [ --from-file= ] --from-file Use a local instead of updates.pharo.org An update file containing a list of .cs files Documentation: The update the image to the latest version. Usage: pharo Pharo.image update! !PrintVersionCommandLineHandler commentStamp: '' prior: 34076426! Usage: printVersion [ --numeric | --release ] --numeric Print the full version number only (e.g. 12345) --release Print the major relase number only (e.g. 1.2) Documentation: Prints the version number in an easy to parse format. This can be used in Jenkins with the "Description Setter" Plugin. Configure it like this: Regular expression: \[version\] (.*) Description: \1 Examples: pharo Pharo.image printVersion #result will be something like: [version] 3.0 #30100 pharo Pharo.image printVersion --numeric # will print a simpler version 30100 pharo Pharo.image printVersion --release # prints the Pharo release version 3.0! !SaveCommandLineHandler commentStamp: '' prior: 33996084! Usage: save [--delete-old] a base name for the image --delete-old remove the old image and changes file Documentation: Saves the image and changes file under a new name. Examples: # create a 'bar.image' and 'foo.changes' pharo Pharo.image save bar # create the same file as in the previous example but delete Foo.image and Foo.changes pharo Pharo.image save bar --delete-old! !TestRunnerCommandLineHandler commentStamp: '' prior: 52427350! Usage: test [--junit-xml-output] [ ...] --junit-xml-output output the test results in a junit compatible format a String matching a package name Examples: #Run all the tests in the Tests-Exceptions package pharo Pharo.image test Tests-Exceptions #Run all the tests in packages matching Test-.* pharo Pharo.image test "Tests-.*" # Run test on a Hudson/Jenkins server pharo Pharo.image test --junit-xml-output "Tests-.*" ! !QSystemTally commentStamp: '' prior: 38582446! Tally for assembling system profiles. It's a subclass of Link so we can chain tallies together in the receivers list.! !QSystemTally class methodsFor: 'LICENSE' stamp: 'RJT 1/23/2013 15:34' prior: 30120849! LICENSE ^'Project Squeak In Memory of Andreas Raab. Author, Friend, Colleague. http://forum.world.st/In-Memory-of-Andreas-Raab-td4663424.html Copyright (c) 2005-2013, 3D Immersive Collaboration Consulting, LLC., All Rights Reserved Redistributions in source code form must reproduce the above copyright and this condition. Licensed under MIT License (MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.'! ! !QSystemTally methodsFor: 'converting' stamp: 'AlexandreBergel 1/29/2013 10:33' prior: 30112980! asArray | link | ^Array streamContents: [ :s | link := self. [link == nil] whileFalse: [ s nextPut: link. link := link nextLink. ]. ].! ! !QSystemTally methodsFor: 'converting' stamp: 'AlexandreBergel 1/29/2013 10:33' prior: 30113215! asSortedCollection: aCollection "Create a sorted collection from the given input" ^aCollection asSortedCollection: [ :tA :tB | tA tally >= tB tally ]! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 10:34' prior: 30114107! bump: hitCount fromSender: senderTally "Add this hitCount to the total, and include a reference to the sender responsible for the increment" self bumpBy: hitCount. senders ifNil: [ senders := OrderedCollection new ]. senderTally ifNotNil: [ senders add: (senderTally copyWithTally: hitCount) ]! ! !QSystemTally methodsFor: 'tallying' stamp: 'ar 6/11/2007 21:54' prior: 30119198! bumpBy: count "Bump this tally by the specified amount" tally := tally + count! ! !QSystemTally methodsFor: 'initialize' stamp: 'ar 6/11/2007 22:07' prior: 30113601! class: aClass method: aCompiledMethod class := aClass. method := aCompiledMethod. tally := 0.! ! !QSystemTally methodsFor: 'copying' stamp: 'ar 6/11/2007 22:31' prior: 30113437! copyWithTally: hitCount ^ (QSystemTally new class: class method: method) bumpBy: hitCount! ! !QSystemTally methodsFor: 'report' stamp: 'ar 6/11/2007 22:28' prior: 30114474! fullPrintOn: aStream tallyExact: isExact orThreshold: perCent time: totalTime | threshold | isExact ifFalse: [threshold := (perCent asFloat / 100 * tally) rounded]. aStream nextPutAll: '**Tree**'; cr. self treePrintOn: aStream tabs: OrderedCollection new thisTab: '' total: tally totalTime: totalTime tallyExact: isExact orThreshold: threshold. aStream nextPut: Character newPage; cr. aStream nextPutAll: '**Leaves**'; cr. self leavesPrintOn: aStream tallyExact: isExact orThreshold: threshold time: totalTime.! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 11:11' prior: 30115093! getNewTabsFor: tabs ^ tabs size < self maxTabs ifTrue: [ tabs ] ifFalse: [ (tabs select: [ :x | x = '[' ]) copyWith: '[' ]! ! !QSystemTally methodsFor: 'initialize' stamp: 'AlexandreBergel 1/29/2013 11:02' prior: 30113783! initialize super initialize. ! ! !QSystemTally methodsFor: 'report' stamp: 'ar 6/11/2007 22:30' prior: 30115289! into: leafDict fromSender: senderTally | leafNode | leafNode := leafDict at: method ifAbsent: [leafDict at: method put: (QSystemTally new class: class method: method)]. leafNode bump: tally fromSender: senderTally! ! !QSystemTally methodsFor: 'testing' stamp: 'ar 6/11/2007 22:50' prior: 30120580! isPrimitives "Detect pseudo node used to carry tally of local hits" ^ method == nil! ! !QSystemTally methodsFor: 'report' stamp: 'ar 6/11/2007 22:29' prior: 30115579! leavesInto: leafDict fromSender: senderTally | rcvrs | rcvrs := self sonsOver: 0. rcvrs size = 0 ifTrue: [self into: leafDict fromSender: senderTally] ifFalse: [rcvrs do:[:node | node isPrimitives ifTrue: [node leavesInto: leafDict fromSender: senderTally] ifFalse: [node leavesInto: leafDict fromSender: self]]]! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 11:43' prior: 30115994! leavesPrintOn: aStream tallyExact: isExact orThreshold: threshold time: totalTime "@TODO: Apparently, providing true as isExact will always produce an error " | dict | dict := IdentityDictionary new: 100. self leavesInto: dict fromSender: nil. isExact ifTrue: [ (self asSortedCollection: dict) do: [ :node | node printOn: aStream total: tally totalTime: nil tallyExact: isExact. node printSenderCountsOn: aStream ] ] ifFalse:[ ((self asSortedCollection: dict) select: [ :node | node tally > threshold ]) do: [ :node | node printOn: aStream total: tally totalTime: totalTime tallyExact: isExact ] ]! ! !QSystemTally methodsFor: 'accessing' stamp: 'ar 6/11/2007 22:24' prior: 30112180! maxClassNameSize "Return the default maximum width of the class name alone" ^30! ! !QSystemTally methodsFor: 'accessing' stamp: 'ar 6/11/2007 22:24' prior: 30112333! maxClassPlusSelectorSize "Return the default maximum width of the class plus selector together (not counting the '>>')" ^60! ! !QSystemTally methodsFor: 'accessing' stamp: 'bgf 3/6/2008 12:21' prior: 30112530! maxTabs "Return the default number of tabs after which leading white space is compressed" ^36! ! !QSystemTally methodsFor: 'accessing' stamp: 'ar 6/11/2007 21:57' prior: 30112697! method "Answer the CompiledMethod associated with this tally" ^method! ! !QSystemTally methodsFor: 'initialize' stamp: 'ar 6/11/2007 22:50' prior: 30113887! primitives: anInteger "Make the receiver be a node of unassigned primitives" tally := anInteger. method := nil. "indicates primitives"! ! !QSystemTally methodsFor: 'report' stamp: 'MarcusDenker 4/21/2013 18:02' prior: 35686792! printOn: aStream aStream print: class; nextPutAll: '>>'; print: (method ifNotNil:[method selector]). aStream nextPutAll: ' -- '; print: tally.! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 11:00' prior: 30116920! printOn: aStream total: total totalTime: totalTime tallyExact: isExact | className myTally aClass percentage | isExact ifTrue:[ myTally := tally. receivers ifNotNil: [ receivers asArray do: [ :r | myTally := myTally - r tally ] ]. aStream print: myTally; space. ] ifFalse:[ percentage := tally asFloat / total * 100.0 roundTo: 0.1. aStream print: percentage; nextPutAll: ' ('; nextPutAll: (percentage * totalTime / 100) rounded asStringWithCommas; nextPutAll: ') '. ]. self isPrimitives ifTrue:[ aStream nextPutAll: 'primitives'; cr ] ifFalse:[ aClass := method methodClass. className := aClass name contractTo: self maxClassNameSize. aStream nextPutAll: class name; nextPutAll: (aClass = class ifTrue: [' '] ifFalse: [' [' , aClass name , '] ']); nextPutAll: (method selector contractTo: self maxClassPlusSelectorSize - className size); cr. ].! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 11:00' prior: 30117917! sonsOver: threshold "Answer the sons with tallys over the given threshold" "threshold is a number " receivers ifNil: [ ^ #() ]. ^ receivers asArray select: [ :son | son tally > threshold ].! ! !QSystemTally methodsFor: 'accessing' stamp: 'ar 6/11/2007 21:58' prior: 30112840! tally "Answer the tally count for this node" ^tally! ! !QSystemTally methodsFor: 'tallying' stamp: 'ar 6/11/2007 22:01' prior: 30119349! tally: context by: count "Explicitly tally the specified context and its stack." | root | (root := context home sender) ifNil:[^(self bumpBy: count) tallyPath: context by: count] ifNotNil:[^(self tally: root by: count) tallyPath: context by: count]! ! !QSystemTally methodsFor: 'tallying' stamp: 'ar 2/27/2008 12:01' prior: 30119676! tallyMethod: aMethod by: count "Called explicitly and needs to decrement receiver's tally count" | node | node := receivers. [node == nil] whileFalse:[ node method == aMethod ifTrue:[^node bumpBy: count]. node := node nextLink. ]. node := QSystemTally new class: aMethod methodClass method: aMethod. node nextLink: receivers. receivers := node. ^node bumpBy: count! ! !QSystemTally methodsFor: 'tallying' stamp: 'ar 6/11/2007 22:02' prior: 30120124! tallyPath: context by: count "Tally the context chain" | aMethod tally | aMethod := context method. tally := receivers. [tally == nil] whileFalse:[ tally method == aMethod ifTrue:[^tally bumpBy: count]. tally := tally nextLink. ]. tally := QSystemTally new class: context receiver class method: aMethod. tally nextLink: receivers. receivers := tally. ^tally bumpBy: count! ! !QSystemTally methodsFor: 'report' stamp: 'AlexandreBergel 1/29/2013 11:11' prior: 30118192! treePrintOn: aStream tabs: tabs thisTab: myTab total: total totalTime: totalTime tallyExact: isExact orThreshold: threshold "aStream contains the output of the print " "tabs is a collection of strings " | sons sonTab | tabs do: [ :tab | aStream nextPutAll: tab ]. tabs size > 0 ifTrue: [ self printOn: aStream total: total totalTime: totalTime tallyExact: isExact ]. sons := isExact ifTrue: [ receivers ] ifFalse: [ self sonsOver: threshold ]. sons isNil ifTrue: [ ^ self ]. sons notEmpty ifTrue: [ tabs addLast: myTab. sons := self asSortedCollection: sons. 1 to: sons size do: [ :i | sonTab := i < sons size ifTrue: [ ' |' ] ifFalse: [ ' ' ]. (sons at: i) treePrintOn: aStream tabs: (self getNewTabsFor: tabs) thisTab: sonTab total: total totalTime: totalTime tallyExact: isExact orThreshold: threshold ]. tabs removeLast ]! ! !EvaluateCommandLineHandler commentStamp: '' prior: 38582639! Usage: eval [--help] --help list this help message a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval ! !FileList class methodsFor: 'instance creation' stamp: 'CamilloBruni 4/24/2013 19:30'! openOn: aFileReference "Open a view of an instance of me on the given file reference." "FileList openOn: FileSystem memory" (FileList morphicViewOnDirectory: aFileReference) openInWorld! ! !FileList methodsFor: 'accessing' stamp: 'CamilloBruni 4/24/2013 19:27'! fileSystem ^ reference ifNil: [ FileSystem disk ] ifNotNil: [ reference fileSystem ]! ! !FileList methodsFor: 'initialization' stamp: 'CamilloBruni 4/24/2013 19:27' prior: 21867140! initialDirectoryList | dirList | dirList := self fileSystem root directories collect: [ :each | FileDirectoryWrapper with: each name: each basename model: self]. dirList isEmpty ifTrue:[ dirList := Array with: (FileDirectoryWrapper with: self fileSystem workingDirectory name: self fileSystem workingDirectory basename model: self)]. ^dirList! ! !AndreasSystemProfiler commentStamp: '' prior: 38583231! AndreasSystemProfiler uses sub-msec VM supported PC sampling. In Memory of Andreas Raab. Author, Friend, Colleague. http://forum.world.st/In-Memory-of-Andreas-Raab-td4663424.html Released by Ron, Julie and David Example: AndreasSystemProfiler spyOn: [ 10000 timesRepeat: [ 3.14159 printString ] ] -=-=-=-=-=-=-= Apparently, the time taken to run the provided block is as twice as long as run without the profiler. -=-=-=-=-=-=-= Both AndreasSystemProfiler and MessageTally are periodic sampling profilers. The essential difference between AndreasSystemProfiler and MessageTally is in how the current method is sampled. MessageTally is driven from a high-priority process in a loop waiting on a delay. When the delay fires the lower-priority process being profiled is interrupted, its stack is walked to determine the methods along the call chain, and that data is recorded. But since the sampling occurs when the high-priority process preempts the lower-priority process, a sample is only taken at a preemption point. In particular, primitives are *not* profiled because they are not suspension points. A process can only be suspended on method activation (a non-primitive method activation, or primitive failure) or on backward branch. The cost of primitives is charged to a caller and is inferred by subtracting the cost of children of the caller from the caller itself (subtracting the number of samples in children of the caller form the number of samples in the caller itself). Another problem is that using the clock that underlies Delay, which is typically the clock used by processes being profiled, causes sampling errors due to the sampling and sampled processes cohering. Delays are limited in resolution (at best 1 millisecond) so if the profiled process waits on a delay it'll fire immediately after the profiling process (because the profiling process is at higher priority) and so the sampling process may only ever see the sampled process in a wait state. If MessageTally is used to profile multiple processes then a third problem is that if a primitive causes a process switch then its cost will end up being charged to the process switched-to, not switched from. This is again because sampling can only occur after a primitive has completed (successfully or not). AndreasSystemProfiler is driven from a high-priority process in a loop waiting on a Semaphore known to the VM. The profiling process uses a primitive to schedule a sample some number of ticks of the VM's high-performance clock in the future. When the time is reached the VM samples the current method and the current process, *before any process preemption takes place*, and independently of the standard clock, and signals the semaphore. The profiling process then collects the method,process pair via primitives. So AndreasSystemProfiler provides much more accurate results. That said there are still limitations with primitives and Cog. Currently Cog only samples "interpreter" primitives. Those primitives it implements in machine code (integer and float arithmetic, closure evaluation, at:, identityHash) are not sampled and won't show up; they will be charged to the calling method. This is fixable, since Cog actually compiles the sampling direct into interpreter primitive invocation when profiling is in effect and not at other times, but sampling could be a significant cost in these simple and performance-critical primitives.! !AndreasSystemProfiler class methodsFor: 'LICENSE' stamp: 'RJT 1/23/2013 15:34' prior: 17537413! LICENSE ^'Project Squeak In Memory of Andreas Raab. Author, Friend, Colleague. http://forum.world.st/In-Memory-of-Andreas-Raab-td4663424.html Copyright (c) 2005-2013, 3D Immersive Collaboration Consulting, LLC., All Rights Reserved Redistributions in source code form must reproduce the above copyright and this condition. Licensed under MIT License (MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.'! ! !AndreasSystemProfiler class methodsFor: 'spying' stamp: 'RJT 1/23/2013 15:28' prior: 17538888! default ^self new! ! !AndreasSystemProfiler class methodsFor: 'spying' stamp: 'AlexandreBergel 1/29/2013 10:21' prior: 17539003! spyFor: seconds "Run the system profiler for the specified number of seconds" "self spyFor: 5" ^self spyOn: [ (Delay forSeconds: seconds) wait ].! ! !AndreasSystemProfiler class methodsFor: 'spying' stamp: 'AlexandreBergel 1/29/2013 10:23' prior: 17539248! spyOn: aBlock "The main method for profiling and showing the report " "self spyOn: [ 10000 timesRepeat: [ 3.14159 printString ] ]" | profiler | profiler := self new. [ ^ profiler spyOn: aBlock ] ensure: [ profiler doReport ]. ! ! !AndreasSystemProfiler class methodsFor: 'spying' stamp: 'RJT 1/23/2013 15:28' prior: 17539567! spyOnWorldFor: seconds "Run the system profiler for the specified number of seconds, spying on the morphic world in which it was launched. Handy for running Workspace do-its." ^self spyOn: [ | deadline | deadline := Time totalSeconds + seconds. [Time totalSeconds < deadline] whileTrue: [ World doOneCycle ]].! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'RJT 1/23/2013 15:28' prior: 17533121! doReport "Report the results of this profiler run" UIManager default edit: self report label: 'Spy Results'.! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'AlexandreBergel 1/29/2013 10:30' prior: 17533325! report "Answer a report, with cutoff percentage of each element of the tree" ^String streamContents: [ :s | self report: s ]! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'RJT 1/23/2013 15:28' prior: 17533533! report: strm "Print a report, with cutoff percentage of each element of the tree (leaves, roots, tree)=2, on the stream, strm." self report: strm cutoff: 1! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'AlexandreBergel 1/29/2013 11:46' prior: 17533788! report: strm cutoff: threshold tallyRoot isNil ifTrue: [ strm nextPutAll: 'The profiler has not been run'. ^ self ]. tallyRoot tally = 0 ifTrue: [ strm nextPutAll: ' - no tallies obtained' ] ifFalse: [ strm nextPutAll: 'Reporting - ', totalTally asStringWithCommas,' tallies, ', totalTime asStringWithCommas, ' msec.'; cr; cr. tallyRoot fullPrintOn: strm tallyExact: false orThreshold: threshold time: totalTime. ]. totalTime isZero ifFalse: [ self reportGCStatsOn: strm. self reportProcessStatsOn: strm. ].! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'RJT 1/23/2013 15:28' prior: 17534410! reportGCStatsOn: str | oldSpaceEnd youngSpaceEnd memoryEnd fullGCs fullGCTime incrGCs incrGCTime tenureCount upTime rootOverflows | upTime := totalTime. oldSpaceEnd := vmStats at: 1. youngSpaceEnd := vmStats at: 2. memoryEnd := vmStats at: 3. fullGCs := vmStats at: 7. fullGCTime := vmStats at: 8. incrGCs := vmStats at: 9. incrGCTime := vmStats at: 10. tenureCount := vmStats at: 11. rootOverflows := vmStats at: 22. str cr. str nextPutAll: '**Memory**'; cr. str nextPutAll: ' old '; nextPutAll: oldSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' young '; nextPutAll: (youngSpaceEnd - oldSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' used '; nextPutAll: youngSpaceEnd asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str nextPutAll: ' free '; nextPutAll: (memoryEnd - youngSpaceEnd) asStringWithCommasSigned; nextPutAll: ' bytes'; cr. str cr. str nextPutAll: '**GCs**'; cr. str nextPutAll: ' full '; print: fullGCs; nextPutAll: ' totalling '; nextPutAll: fullGCTime asStringWithCommas; nextPutAll: 'ms ('; print: ((fullGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. fullGCs = 0 ifFalse: [str nextPutAll: ', avg '; print: ((fullGCTime / fullGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr. str nextPutAll: ' incr '; print: incrGCs; nextPutAll: ' totalling '; nextPutAll: incrGCTime asStringWithCommas; nextPutAll: 'ms ('; print: ((incrGCTime / upTime * 100) roundTo: 1.0); nextPutAll: '% uptime)'. incrGCs = 0 ifFalse: [str nextPutAll:', avg '; print: ((incrGCTime / incrGCs) roundTo: 1.0); nextPutAll: 'ms']. str cr. str nextPutAll: ' tenures '; nextPutAll: tenureCount asStringWithCommas. tenureCount = 0 ifFalse: [str nextPutAll: ' (avg '; print: (incrGCs / tenureCount) asInteger; nextPutAll: ' GCs/tenure)']. str cr. str nextPutAll: ' root table '; nextPutAll: rootOverflows asStringWithCommas; nextPutAll:' overflows'. str cr. ! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'AlexandreBergel 1/29/2013 10:12' prior: 17536508! reportProcessStatsOn: str | totalSwitches pageOverflows pageDivorces actualSwitches | vmStats size >= 61 ifFalse: [ ^ self ]. "don't try this on the closure VM" totalSwitches := vmStats at: 56. actualSwitches := totalSwitches - (2*totalTally). "exclude to/from profiler" pageOverflows := vmStats at: 60. pageDivorces := vmStats at: 61. str cr. str nextPutAll: '**Processes**'; cr. str tab; nextPutAll: 'Total process switches: ', totalSwitches printString; cr. str tab; nextPutAll: 'Without Profiler: ', actualSwitches printString; cr. str tab; nextPutAll: 'Stack page overflows: ', pageOverflows printString; cr. str tab; nextPutAll: 'Stack page divorces: ', pageDivorces printString; cr. ! ! !AndreasSystemProfiler methodsFor: 'profiling' stamp: 'AlexandreBergel 1/29/2013 10:31' prior: 17530522! runProfilerProcess "Run the profiler process" | process tallyStart tallyTicks tallyStop method leaf | tallyRoot := QSystemTally new class: nil method: nil. totalTally := 0. Smalltalk profileSemaphore: semaphore. totalTicks := 0. tallyStart := tallyStop := Smalltalk highResClock. [ true ] whileTrue: [ tallyStart := tallyStop. tallyStart := Smalltalk highResClock. Smalltalk profileStart: ticks. "run for n ticks" semaphore wait. tallyStop := Smalltalk highResClock. tallyTicks := tallyStop - tallyStart. totalTicks := totalTicks + tallyTicks. process := Smalltalk profileSample. method := Smalltalk profilePrimitive. totalTally := totalTally + 1. process ifNotNil:[ leaf := tallyRoot tally: (process suspendedContext ifNil: [ thisContext ] ) by: tallyTicks. method ifNotNil: [ leaf tallyMethod: method by: tallyTicks ]. ]. ]. ! ! !AndreasSystemProfiler methodsFor: 'profiling' stamp: 'AlexandreBergel 1/29/2013 10:31' prior: 17531482! spyOn: aBlock "Profile system activity during execution of aBlock. The argument is the desired samples per *milli* second. Mostly for polymorphism with MessageTally." self startProfiling. aBlock ensure: [ self stopProfiling ] ! ! !AndreasSystemProfiler methodsFor: 'profiling' stamp: 'AlexandreBergel 1/29/2013 10:31' prior: 17531808! startProfiling "Start the profiler process taking samplesPerMsec samples per *milli* second" | t0 | semaphore := Semaphore new. "Run a 100 msec busy loop to figure out the ticks per msec" t0 := Time millisecondClockValue + 2. [Time millisecondClockValue >= t0] whileFalse. ticksPerMSec := Smalltalk highResClock. [Time millisecondClockValue >= (t0 + 100)] whileFalse. ticksPerMSec := (Smalltalk highResClock - ticksPerMSec) // (Time millisecondClockValue - t0). "Try to get 10 samples per msec" ticks := ticksPerMSec // 10. startTime := Time millisecondClockValue. vmStats := Smalltalk vm getParameters. profilerProcess := [ self runProfilerProcess ] forkAt: Processor timingPriority - 1. ! ! !AndreasSystemProfiler methodsFor: 'profiling' stamp: 'AlexandreBergel 1/29/2013 10:32' prior: 17532609! stopProfiling "Stop the profiler process" Smalltalk profileSemaphore: nil. Smalltalk profileStart: 0. "<- profile stops now" totalTime := Time millisecondClockValue - startTime. Smalltalk vm getParameters keysAndValuesDo: [ :idx :value | value isInteger ifTrue: [ vmStats at: idx put: (value - ((vmStats at: idx) ifNil: [ 0 ])) ]. ]. profilerProcess ifNotNil: [ profilerProcess suspend. profilerProcess := nil. ]. ! ! !CommandLineHandler commentStamp: '' prior: 38586748! A CommandLineHandler is activated by the CommandLine. The responsible handler with the highest priority is selected and its instance-side method #activate is invoked. By default the handlers are selected by their class name. In the following shell invocation the FooHandler is chosen: pharo Pharo.image FooHandler A handler may provide a short name with the class-side #commandName method. If the FooHandler defined #commandName returning 'foo' it would be activated with the following shell invocation: pharo Pharo.image foo For more sophisticated handler selection the CommandLineHandler should implement the #isResponsibleFor: class-side method. An instance of the current command line options is passed to this method which should then return a boolean. Between all the responsible handlers the one with the highes #priority is chosen. To change the priority overwrite the class-side accessor. ! !ConfigurationCommandLineHandler commentStamp: '' prior: 38587739! Usage: config [--help] [] [--install[=]] [--group=] [--username=] [--password=] --help show this help message A Monticello repository name A valid Metacello Configuration name A valid version for the given configuration A valid Metacello group name An optional username to access the configuration's repository An optional password to access the configuration's repository Examples: # display this help message pharo Pharo.image config # list all configurations of a repository pharo Pharo.image config $MC_REPOS_URL # list all the available versions of a confgurtation pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo # install the stable version pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install #install a specific version '1.5' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 #install a specific version '1.5' and only a specific group 'Tests' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 --group=Tests ! !FLFuelCommandLineHandler commentStamp: '' prior: 38589031! I handle .fuel files that are passed as arguments when starting the image. Usage: fuel [save] [quit] save save the image after loading quit Don't save the image and directly quit the image fater loading Documentation: This command will load the and materialize/install it's contents. If no argument is specified the image continues running with the loaded contents. Example: #Load a fuel file and save and quit the image with the contents: pharo Pharo.image save quit path/to/foo.fuel #Load the contents of foo.fuel and save the image, but continue running: pharo Pharo.image save path/to/foo.fuel #Load the contents of foo.fuel and continue running without saving: pharo Pharo.image path/to/foo.fuel ! !LoadUpdatesCommandLineHandler commentStamp: '' prior: 38589881! Usage: update [ --from-file= ] --from-file Use a local instead of updates.pharo.org An update file containing a list of .cs files Documentation: The update the image to the latest version. Usage: pharo Pharo.image update! !PrintVersionCommandLineHandler commentStamp: '' prior: 38590231! Usage: printVersion [ --numeric | --release ] --numeric Print the full version number only (e.g. 12345) --release Print the major relase number only (e.g. 1.2) Documentation: Prints the version number in an easy to parse format. This can be used in Jenkins with the "Description Setter" Plugin. Configure it like this: Regular expression: \[version\] (.*) Description: \1 Examples: pharo Pharo.image printVersion #result will be something like: [version] 3.0 #30100 pharo Pharo.image printVersion --numeric # will print a simpler version 30100 pharo Pharo.image printVersion --release # prints the Pharo release version 3.0! !SaveCommandLineHandler commentStamp: '' prior: 38590950! Usage: save [--delete-old] a base name for the image --delete-old remove the old image and changes file Documentation: Saves the image and changes file under a new name. Examples: # create a 'bar.image' and 'foo.changes' pharo Pharo.image save bar # create the same file as in the previous example but delete Foo.image and Foo.changes pharo Pharo.image save bar --delete-old! !TestRunnerCommandLineHandler commentStamp: '' prior: 38591447! Usage: test [--junit-xml-output] [ ...] --junit-xml-output output the test results in a junit compatible format a String matching a package name Examples: #Run all the tests in the Tests-Exceptions package pharo Pharo.image test Tests-Exceptions #Run all the tests in packages matching Test-.* pharo Pharo.image test "Tests-.*" # Run test on a Hudson/Jenkins server pharo Pharo.image test --junit-xml-output "Tests-.*" ! !SmalltalkImage methodsFor: '*Tools-Profilers' stamp: 'ar 6/22/2007 15:25' prior: 33484801! highResClock "Smalltalk highResClock" "Primitive. Answer the value of the high resolution clock if this computer has one. Usually, this should be the highest resolution value available, for example on Intel it will be the value of the time stamp counter register." ^0! ! !SmalltalkImage methodsFor: '*Tools-Profilers' stamp: 'ar 6/22/2007 15:24' prior: 33485201! profilePrimitive "Primitive. Answer the primitive sample by the profiler, or nil if the profiler isn't active. See also primitiveProfileStart." ^self primitiveFailed! ! !SmalltalkImage methodsFor: '*Tools-Profilers' stamp: 'ar 6/22/2007 15:24' prior: 33485502! profileSample "Primitive. Answer the last sample taken by the profiler, or nil if the profiler isn't active. See also primitiveProfileStart." ^self primitiveFailed! ! !SmalltalkImage methodsFor: '*Tools-Profilers' stamp: 'ar 6/22/2007 15:24' prior: 33485798! profileSemaphore: aSemaphore "Primitive. Install the semaphore to be used for profiling, or nil if no semaphore should be used. See also primitiveProfileStart." ^self primitiveFailed! ! !SmalltalkImage methodsFor: '*Tools-Profilers' stamp: 'ar 6/22/2007 15:24' prior: 33486118! profileStart: counter "Primitive. Begin profiling execution every by using the interrupt check-counter instead of a time-based process (which is limited to timing resolution and triggers off the same signal that many of the processes being profiled trigger off leading to consistently wrong results). The argument is the number of interrupt checks (method activations) to let go by before taking a sample. The sample is being stored in the profileSample iVar which can be retrieved by executing primitiveProfileSample. When a sample is taken, it signals the semaphore specified in primitiveProfileSemaphore. If the argument is less or equal to zero, it disables profiling." ^self primitiveFailed! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 10:45' prior: 17540557! setUp tally := QSystemTally new. tally class: self class method: self class >> #testPrintingTally "tally class: Object method: Object >> #printString."! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 11:43' prior: 17540812! testFullPrintOn | stream | stream := WriteStream on: String new. tally fullPrintOn: stream tallyExact: false orThreshold: 0 time: 10. self assert: stream contents = '**Tree** **Leaves** '! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 11:16' prior: 17541111! testGetNewTab | tabs | self assert: (tally getNewTabsFor: #()) = #(). self assert: (tally getNewTabsFor: #(' ')) = #(' '). tabs := OrderedCollection new. tabs add: '['. (tally maxTabs + 1) timesRepeat: [ tabs add: ' ' ]. self assert: (tally getNewTabsFor: tabs) asArray = #('[' '[').! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 10:48' prior: 17541507! testPrintingTally self assert: tally printString = 'AndreasSystemProfilerTest>>#testPrintingTally -- 0'! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 10:40' prior: 17541713! testPrintingTallyUninitialized self assert: QSystemTally new printString = 'nil>>nil -- nil'! ! !AndreasSystemProfilerTest methodsFor: 'tests profiler' stamp: 'AlexandreBergel 1/29/2013 10:14' prior: 17540149! testSimple self shouldnt: [ AndreasSystemProfiler new spyOn: [ 200 timesRepeat: [ 1.23 printString ] ] ] raise: Error.! ! !AndreasSystemProfilerTest methodsFor: 'tests profiler' stamp: 'AlexandreBergel 1/29/2013 11:45' prior: 17540372! testSimpleReport self shouldnt: [ AndreasSystemProfiler new report ] raise: Error.! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 11:08' prior: 17541908! testTallyTreePrint | stream | stream := WriteStream on: String new. tally treePrintOn: stream tabs: #() thisTab: nil total: 50 totalTime: 100 tallyExact: true orThreshold: 1. "Nothing is printed since there is no tab" self assert: stream contents isEmpty! ! !AndreasSystemProfilerTest methodsFor: 'tests tally' stamp: 'AlexandreBergel 1/29/2013 11:10' prior: 17542290! testTallyTreePrintWithTab | stream | stream := WriteStream on: String new. tally treePrintOn: stream tabs: #(' ') thisTab: nil total: 50 totalTime: 100 tallyExact: true orThreshold: 1. self assert: stream contents = ' 0 AndreasSystemProfilerTest testPrintingTally '! ! "AndreasProfiler"! "ConfigurationCommandLineHandler-Core"! "FuelCommandLineHandler"! "HudsonBuildTools20"! "System-CommandLine"! "Tools"! "ToolsTest"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(18 May 2013 1:13:57 pm) Pharo.image priorSource: 5017243! ----STARTUP----an Array(18 May 2013 1:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 May 2013 1:21 pm) Pharo-30144.image priorSource: 5072974! ----STARTUP----an Array(19 May 2013 2:50:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/19/2013 14:44' prior: 38571972! commentForCurrentUpdate ^ '10660 rename parseAsLiteralToken into parseLiterals https://pharo.fogbugz.com/f/cases/10660 10637 SpecDebugger opens with DNU BlockCosure>>#layoutFrame https://pharo.fogbugz.com/f/cases/10637 10668 Failing Regressiontest: CompiledMethodTest>>#testEqualityClassSideMethod https://pharo.fogbugz.com/f/cases/10668'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/19/2013 14:45'! script242 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.159.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1436.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.117.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.22.mcz Spec-Layout-MarcusDenker.46.mcz Spec-Tests-MarcusDenker.25.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.171.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.72.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1126.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/19/2013 14:45'! update30145 "self new update30145" self withUpdateLog: '10660 rename parseAsLiteralToken into parseLiterals https://pharo.fogbugz.com/f/cases/10660 10637 SpecDebugger opens with DNU BlockCosure>>#layoutFrame https://pharo.fogbugz.com/f/cases/10637 10668 Failing Regressiontest: CompiledMethodTest>>#testEqualityClassSideMethod https://pharo.fogbugz.com/f/cases/10668'. self loadTogether: self script242 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RGBehaviorDefinition methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38407970! traitNames "Assuming that traits in a composition can be identified by testing for the first character being an uppercase character (and thus not a special character such as {, # etc.)" | tokens | tokens := self traitCompositionSource parseLiterals. ^tokens select: [:each | each first isUppercase].! ! !MCTraitDefinition methodsFor: '*Ring-Monticello' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38455103! classTraitCompositionString ^self traitComposition ifNil: [ '{}' ] ifNotNil: [ :source| | tokens tcs | tcs := ''. tokens := source parseLiterals. tokens do:[ :each| each first isUppercase ifTrue: [ tcs := tcs, each, ' classTrait + ' ] ]. tcs isEmpty ifTrue: [ '{}' ] ifFalse:[ tcs copyFrom: 1 to: tcs size - 3 ] ]! ! !MCTraitDefinition methodsFor: 'comparing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38455561! requirements "Assuming that traits in a composition can be identified by testing for the first character beeing an uppercase character (and thus not a special character such as {, # etc.)" | tokens traitNames | self hasTraitComposition ifFalse: [ ^Array new ]. tokens := self traitComposition parseLiterals. traitNames := tokens select: [:each | each first isUppercase]. ^traitNames asArray! ! !StringTest methodsFor: 'tests - converting' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38408386! testAsSmalltalkComment | exampleStrings | exampleStrings := #( '' ' ' '"' '""' '"""' 'abc"abc' 'abc""abc' 'abc"hello"abc' 'abc"' '"abc' ). "check that the result of scanning the comment is empty" exampleStrings do: [ :s | | tokens | tokens := s asSmalltalkComment parseLiterals. self assert: (tokens isEmpty) ]. "check that the result has the same non-quote characters as the original" exampleStrings do: [ :s | self assert: ( (s copyWithout: $") = (s asSmalltalkComment copyWithout: $"))]. "finnaly, test for some common kinds of inputs" self assert: ( 'abc' asSmalltalkComment = '"abc"'). self assert: ( 'abc"abc' asSmalltalkComment = '"abc""abc"'). self assert: ('abc""abc' asSmalltalkComment = '"abc""abc"' ). ! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 20:51' prior: 37333935! add: aBlock top: aNumber self add: aBlock top: aNumber bottom: nil left: nil right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 20:57' prior: 37334313! add: aBlock top: top bottom: bottom left: left right: right | layout | layout := self computeLayoutFromTop: top bottom: bottom left: left right: right. self add: aBlock origin: layout first corner: layout second offsetOrigin: layout third offsetCorner: layout fourth! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 20:57' prior: 37336631! add: aBlock withSpec: aSpec top: top bottom: bottom left: left right: right | layout | layout := self computeLayoutFromTop: top bottom: bottom left: left right: right. self add: aBlock withSpec: aSpec origin: layout first corner: layout second offsetOrigin: layout third offsetCorner: layout fourth! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/18/2013 20:55'! computeLayoutFromTop: top bottom: bottom left: left right: right | originY offsetCornerX cornerX offsetOriginY offsetCornerY cornerY originX offsetOriginX | originX := left isFloat ifTrue: [ left ] ifFalse: [ 0 ]. originY := top isFloat ifTrue: [ top ] ifFalse: [ 0 ]. cornerX := right isFloat ifTrue: [ 1 - right ] ifFalse: [ 1 ]. cornerY := bottom isFloat ifTrue: [ 1 - bottom ] ifFalse: [ 1 ]. offsetOriginX := left isInteger ifTrue: [ left ] ifFalse: [ 0 ]. offsetOriginY := top isInteger ifTrue: [ top ] ifFalse: [ 0 ]. offsetCornerX := right isInteger ifTrue: [ right negated ] ifFalse: [ 0 ]. offsetCornerY := bottom isInteger ifTrue: [ bottom negated ] ifFalse: [ 0 ]. ^ { originX@originY. cornerX@cornerY. offsetOriginX@offsetOriginY. offsetCornerX@offsetCornerY }! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 21:00' prior: 37337679! newColumn: aBlock left: aNumber self newColumn: aBlock left: aNumber right: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 20:59' prior: 37337856! newColumn: aBlock left: left right: right | layout | layout := self computeLayoutFromTop: nil bottom: nil left: left right: right. self newColumn: aBlock origin: layout first corner: layout second offsetOrigin: layout third offsetCorner: layout fourth! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 21:00' prior: 37338053! newColumn: aBlock right: aNumber self newColumn: aBlock left: nil right: aNumber! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 21:00' prior: 37338232! newRow: aBlock bottom: aNumber self newRow: aBlock top: nil bottom: aNumber! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 21:00' prior: 37338410! newRow: aBlock top: aNumber self newRow: aBlock top: aNumber bottom: nil! ! !SpecLayout methodsFor: 'commands-advanced' stamp: 'BenjaminVanRyseghem 5/18/2013 20:59' prior: 37338582! newRow: aBlock top: top bottom: bottom | layout | layout := self computeLayoutFromTop: top bottom: bottom left: nil right: nil. self newRow: aBlock origin: layout first corner: layout second offsetOrigin: layout third offsetCorner: layout fourth! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38409258! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38412246! changeFromString: aString "Parse the argument, aString, and make this be the receiver's structure." | categorySpecs | categorySpecs := aString parseLiterals. "If nothing was scanned and I had no elements before, then default me" (categorySpecs isEmpty and: [ self protocolOrganizer isEmpty ]) ifTrue: [ ^ self protocolOrganizer reset ]. ^ self changeFromCategorySpecs: categorySpecs! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38412750! scanForPreviousVersion | sourceFilesCopy method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := preamble parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !PackageInfo methodsFor: 'testing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38415581! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference theNonMetaClassName category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !RPackage methodsFor: 'system compatibility' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38421595! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !MCClassTraitParser methodsFor: 'actions' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38426662! addDefinitionsTo: aCollection | tokens definition traitCompositionString | tokens := source parseLiterals. traitCompositionString := (source readStream match: 'uses:'; upToEnd) trimBoth. definition := MCClassTraitDefinition baseTraitName: (tokens at: 1) classTraitComposition: traitCompositionString. aCollection add: definition ! ! !FilePackage methodsFor: 'change record types' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38424560! classDefinition: string with: chgRec | tokens theClass | self flag: #traits. tokens := string parseLiterals. "tokens size = 11 ifFalse:[^doIts add: chgRec]." theClass := self getClass: (tokens at: 3). theClass definition: string. classOrder add: theClass.! ! !FilePackage methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38424928! metaClassDefinition: string with: chgRec | tokens theClass | tokens := string parseLiterals. theClass := self getClass: (tokens at: 1). theClass metaClass definition: string. classOrder add: theClass metaClass.! ! !FilePackage methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38425242! msgClassComment: string with: chgRec | tokens theClass | tokens := string parseLiterals. (tokens size = 3 and:[(tokens at: 3) isString]) ifTrue:[ theClass := self getClass: tokens first. ^theClass commentString: tokens last]. (tokens size = 4 and:[(tokens at: 3) asString = 'class' and:[(tokens at: 4) isString]]) ifTrue:[ theClass := self getClass: tokens first. theClass metaClass commentString: tokens last]. ! ! !FilePackage methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38425765! possibleSystemSource: chgRec | tokens | sourceSystem isEmpty ifTrue:[ tokens := chgRec string parseLiterals. (tokens size = 1 and:[tokens first isString]) ifTrue:[ sourceSystem := tokens first. ^self]]. doIts add: chgRec.! ! !FilePackage methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38426098! removedMethod: string with: chgRec | class tokens | tokens := string parseLiterals. (tokens size = 3 and:[(tokens at: 2) == #removeSelector: ]) ifTrue:[ class := self getClass: (tokens at: 1). ^class removeSelector: (tokens at: 3). ]. (tokens size = 4 and:[(tokens at: 2) == #class and:[(tokens at: 3) == #removeSelector:]]) ifTrue:[ class := self getClass: (tokens at: 1). ^class metaClass removeSelector: (tokens at: 4). ]. doIts add: chgRec! ! !MCTraitParser methodsFor: 'actions' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38427266! addDefinitionsTo: aCollection | tokens definition traitCompositionString | tokens := source parseLiterals. traitCompositionString := (source readStream match: 'uses:'; upToAll: 'category:') trimBoth. definition := MCTraitDefinition name: (tokens at: 3) traitComposition: traitCompositionString category: tokens last comment: '' commentStamp: ''. aCollection add: definition.! ! !Categorizer methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38427768! changeFromString: aString "Parse the argument, aString, and make this be the receiver's structure." | categorySpecs | categorySpecs := aString parseLiterals. "If nothing was scanned and I had no elements before, then default me" (categorySpecs isEmpty and: [elementArray isEmpty]) ifTrue: [^ self setDefaultList: Array new]. ^ self changeFromCategorySpecs: categorySpecs! ! !ChangeRecord methodsFor: 'access' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38428248! prior | currFile preamble prevPos tokens prevFileIndex | currFile := file readOnlyCopy. currFile position: (0 max: position - 150). [currFile position < (position - 1)] whileTrue: [preamble := currFile nextChunk]. currFile close. prevPos := nil. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size - 5) == #methodsFor:]) ifTrue: [ (tokens at: tokens size - 3) == #stamp: ifTrue: [ prevPos := tokens last. prevFileIndex := SourceFiles fileIndexFromSourcePointer: prevPos. prevPos := SourceFiles filePositionFromSourcePointer: prevPos] ifFalse: [ prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. prevPos ifNil: [^ nil]. ^ {prevFileIndex. prevPos. SourceFiles sourcePointerFromFileIndex: prevFileIndex andPosition: prevPos}! ! !ChangeSet class methodsFor: 'scanning' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38429340! scanCategory: file "Scan anything that involves more than one chunk; method name is historical only" | itemPosition item tokens stamp isComment anIndex | itemPosition := file position. item := file nextChunk. isComment := (item includesSubstring: 'commentStamp:'). (isComment or: [item includesSubstring: 'methodsFor:']) ifFalse: ["Maybe a preamble, but not one we recognize; bail out with the preamble trick" ^{(ChangeRecord new file: file position: itemPosition type: #preamble)}]. tokens := item parseLiterals. tokens size >= 3 ifTrue: [stamp := ''. anIndex := tokens indexOf: #stamp: ifAbsent: [nil]. anIndex ifNotNil: [stamp := tokens at: (anIndex + 1)]. tokens second == #methodsFor: ifTrue: [^ self scanFile: file category: tokens third class: tokens first meta: false stamp: stamp]. tokens third == #methodsFor: ifTrue: [^ self scanFile: file category: tokens fourth class: tokens first meta: true stamp: stamp]]. tokens second == #commentStamp: ifTrue: [stamp := tokens third. item := (ChangeRecord new file: file position: file position type: #classComment class: tokens first category: nil meta: false stamp: stamp). file nextChunk. file skipStyleChunk. ^Array with: item]. ^#()! ! !ChangeSet class methodsFor: 'scanning' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38430715! scanVersionsOf: method class: class meta: meta category: cat selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp changeList file | changeList := OrderedCollection new. position := method filePosition. sourceFilesCopy := SourceFiles collect:[:x | x ifNotNil:[x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue:[ file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-3) = #stamp: ifTrue:[ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos. ] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last. ]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil] ]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size. ] ]. changeList add: (ChangeRecord new file: file position: position type: #method class: class name category: cat meta: meta stamp: stamp). position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]. ]. sourceFilesCopy do: [:x | x ifNotNil:[x close]]. ^changeList! ! !MczInstaller methodsFor: 'utilities' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38432987! parseMember: fileName | tokens | tokens := (zip contentsOf: fileName) parseLiterals first. ^ self associate: tokens! ! !ScannerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38433204! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" self shouldnt: ['1@-1' parseLiterals] raise: Error. self assert: ('1@-1' parseLiterals at: 2) asString = '@-'! ! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38433577! supportTestSourceRangeAccessForInjectInto: method source: source selectionSequence: selections "Test debugger source range selection for inject:into:" | evaluationCount sourceMap debugTokenSequence debugCount | evaluationCount := 0. sourceMap := method debuggerMap abstractSourceMap. debugTokenSequence := selections collect: [:string| string parseLiterals]. debugCount := 0. thisContext runSimulated: [(1 to: 2) withArgs: { 0. [:sum :each| evaluationCount := evaluationCount + 1. sum + each]} executeMethod: method] contextAtEachStep: [:ctxt| | range debugTokens | (ctxt method == method and: ["Exclude the send of #closureCopy:copiedValues: and braceWith:with: to create the block, and the #new: and #at:'s for the indirect temp vector. This for compilation without closure bytecodes. (Note that at:put:'s correspond to stores)" (ctxt willSend and: [(#(closureCopy:copiedValues: new: at: braceWith:with:) includes: ctxt selectorToSendOrSelf) not]) "Exclude the store of the argument into the home context (for BlueBook blocks) and the store of an indirection vector into an initial temp" or: [(ctxt willStore and: [(ctxt isBlock and: [ctxt pc = ctxt startpc]) not and: [(ctxt isBlock not and: [((self abstractPCForContext: ctxt) = 2)]) not]]) or: [ctxt willReturn]]]) ifTrue: [debugTokens := debugTokenSequence at: (debugCount := debugCount + 1) ifAbsent: [#(bogusToken)]. self assert: (sourceMap includesKey: (self abstractPCForContext: ctxt)). range := sourceMap at: (self abstractPCForContext: ctxt) ifAbsent: [(1 to: 0)]. self assert: (source copyFrom: range first to: range last) parseLiterals = debugTokens]]. self assert: evaluationCount = 2! ! !ClassCommentVersionsBrowser methodsFor: 'basic function' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38435495! scanVersionsOf: class "Scan for all past versions of the class comment of the given class" | oldCommentRemoteStr sourceFilesCopy position prevPos stamp preamble tokens prevFileIndex | classOfMethod := class. oldCommentRemoteStr := class organization commentRemoteStr. currentCompiledMethod := oldCommentRemoteStr. selectorOfMethod := #Comment. changeList := OrderedCollection new. list := OrderedCollection new. listIndex := 0. oldCommentRemoteStr ifNil:[^ nil] ifNotNil: [oldCommentRemoteStr sourcePointer]. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. position := oldCommentRemoteStr position. file := sourceFilesCopy at: oldCommentRemoteStr sourceFileNumber. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). " Skip back to before the preamble" [file position < (position-1)] "then pick it up from the front" whileTrue: [preamble := file nextChunk]. prevPos := nil. stamp := ''. (preamble findString: 'commentStamp:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseLiterals. (tokens at: tokens size-3) = #commentStamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]] ifFalse: ["The stamp get lost, maybe after a condenseChanges" stamp := '']. self addItem: (ChangeRecord new file: file position: position type: #classComment class: class name category: nil meta: class stamp: stamp) text: stamp , ' ' , class name , ' class comment'. prevPos = 0 ifTrue:[prevPos := nil]. position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38437611! parseMember: fileName | tokens | tokens := (self zip contentsOf: fileName) parseLiterals first. ^ self associate: tokens! ! !SpecDebugger class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/18/2013 20:50' prior: 38522611! specOptimized ^ SpecLayout composed add: #stack origin: 0@0 corner: 1@0.25; add: #toolbar origin: 0@0.25 corner: 1@0.25 offsetOrigin: 0@0 offsetCorner: 0@25; addHSplitter; add: #code origin: 0@0.25 corner: 1@0.80 offsetOrigin: 0@25 offsetCorner: 0@0; addHSplitter; newRow: [ :r | r add: #receiverInspector; addSplitter; add: #contextInspector] top: 0.8; yourself ! ! !VersionsBrowser methodsFor: 'init & update' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38437843! scanVersionsOf: method class: class meta: meta category: category selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp cat | selectorOfMethod := selector. currentCompiledMethod := method. classOfMethod := meta ifTrue: [class class] ifFalse: [class]. cat := category ifNil: ['']. changeList := OrderedCollection new. list := OrderedCollection new. self addedChangeRecord ifNotNil: [ :change | self addItem: change text: ('{1} (in {2})' translated format: { change stamp. change fileName }) ]. listIndex := 0. position := method filePosition. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue: [(tokens at: tokens size-3) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last]. cat := tokens at: tokens size-4. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue: [(tokens at: tokens size-1) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size]. cat := tokens at: tokens size-2]. self addItem: (ChangeRecord new file: file position: position type: #method class: class name category: category meta: meta stamp: stamp) text: stamp , ' ' , class name , (meta ifTrue: [' class '] ifFalse: [' ']) , selector, ' {', cat, '}'. position := prevPos. prevPos notNil ifTrue: [file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !ChunkFileFormatParser methodsFor: 'parsing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38440728! parseNextDeclaration | isMetadata nextChunk | readStream skipSeparators. (self isNextStyleChunk) ifTrue: [ self addDeclaration: (StyleDeclaration contents: (self readUpToEndOfStyleChunk)). ^self ]. isMetadata := self isNextChunkMetaData. nextChunk := self nextChunk. isMetadata ifFalse: [ self addDeclaration: (DoItDeclaration contents: nextChunk). ] ifTrue: [ | substrings | substrings := nextChunk parseLiterals. (substrings includes: 'methodsFor:') ifTrue: [ ^self parseMethodDeclarations: substrings ]. (substrings includes: 'commentStamp:') ifTrue: [ ^self parseCommentDeclaration: substrings ]. (substrings includes: 'reorganize') ifTrue: [ ^self parseClassOrganization: substrings ]. ]! ! !CompiledMethod methodsFor: '*Tools' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38441578! explorerContents "(CompiledMethod compiledMethodAt: #explorerContents) explore" ^Array streamContents: [:s| | tokens | tokens := (self headerDescription readStream skipTo: $"; upTo: $") parseLiterals. s nextPut: (ObjectExplorerWrapper with: ((0 to: tokens size by: 2) collect: [:i| i = 0 ifTrue: [self header] ifFalse: [{tokens at: i - 1. tokens at: i}]]) name: 'header' model: self). (1 to: self numLiterals) do: [:key| s nextPut: (ObjectExplorerWrapper with: (self literalAt: key) name: ('literal', key printString contractTo: 32) model: self)]. self isQuick ifTrue: [s nextPut: (ObjectExplorerWrapper with: self symbolic name: #symbolic model: self)] ifFalse: [self symbolicLinesDo: [:pc :line| pc <= 1 ifTrue: [s nextPut: (ObjectExplorerWrapper with: line name: 'pragma' model: self)] ifFalse: [s nextPut: (ObjectExplorerWrapper with: line name: pc printString model: self)]]]. "should be self numLiterals + 1 * Smalltalk wordSize + 1" self endPC + 1 to: self basicSize do: [:key| s nextPut: (ObjectExplorerWrapper with: (self basicAt: key) name: key printString model: self)]]! ! !CompiledMethod methodsFor: 'printing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38443008! timeStampFromFile: file "return the timestamp of this method for a given source filestream" | preamble stamp tokens tokenCount| preamble := self getPreambleFrom: file at: (0 max: self filePosition - 3). stamp := String new. tokens := (preamble findString: 'methodsFor:' startingAt: 1) > 0 ifTrue: [preamble parseLiterals] ifFalse: [Array new "ie cant be back ref"]. (((tokenCount := tokens size) between: 7 and: 8) and: [(tokens at: tokenCount - 5) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 3) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount - 2]]. ((tokenCount between: 5 and: 6) and: [(tokens at: tokenCount - 3) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 1) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount]]. ^ stamp ! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/18/2013 20:47' prior: 38516199! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := EyeInspector new asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self close ] ].! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38444280! categoryFromDoIt: aString | tokens | tokens := aString parseLiterals. tokens size = 3 ifFalse: [self error: 'Unrecognized category definition']. ^ tokens at: 3! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38444554! classDefinitionFrom: aPseudoClass | tokens traitCompositionString lastIndex classTraitCompositionString | tokens := aPseudoClass definition parseLiterals. traitCompositionString := (aPseudoClass definition readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. classTraitCompositionString := (aPseudoClass metaClass definition asString readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}']. classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}']. lastIndex := tokens size. ^ MCClassDefinition name: (tokens at: 3) superclassName: (tokens at: 1) traitComposition: traitCompositionString classTraitComposition: classTraitCompositionString category: (tokens at: lastIndex) instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ') classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ') poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ') classInstVarNames: (self classInstVarNamesFor: aPseudoClass) type: (self typeOfSubclass: (tokens at: 2)) comment: (self commentFor: aPseudoClass) commentStamp: (self commentStampFor: aPseudoClass)! ! !MCStReader methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38445889! classInstVarNamesFor: aPseudoClass | tokens | self flag: #traits. aPseudoClass metaClass hasDefinition ifFalse: [^ #()]. tokens := aPseudoClass metaClass definition parseLiterals. "tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']." ^ tokens last findTokens: ' '! ! !MCSystemCategoryParser methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38444024! category | tokens | tokens := source parseLiterals. tokens size = 3 ifFalse: [self error: 'Unrecognized category definition']. ^ tokens at: 3! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38446297! protocolAt: sourcePointer for: sourceDataPointers "Answer the protocol for a given method, retrieved from the sources or changes file. Answer unfound protocol if no protocol is available." | preamble protocol tokens protocolPosition | protocol := 'unfound protocol'. "this is to indicate that the tagging in the source does not use the correct format. We will have to fix that. For example some traits methods are wrongly tagged. see http://code.google.com/p/pharo/issues/detail?id=4581" preamble := self sourcedDataAt: sourcePointer. preamble = 'Trait method' ifTrue: [ ^nil ]. (preamble findString: (sourceDataPointers key) startingAt: 1) > 0 ifTrue: [ tokens := preamble parseLiterals. protocolPosition := tokens indexOf: sourceDataPointers key. protocolPosition = 0 ifFalse: [ "New format gives change protocol and unified prior pointer" protocol := tokens at: protocolPosition + 1] ]. ^protocol! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38447365! timeStampAt: sourcePointer for: sourceDataPointers "Answer the authoring time-stamp for the given method, retrieved from the sources or changes file. Answer the empty string if no time stamp is available." | preamble stamp tokens stampPosition | stamp := ''. preamble := self sourcedDataAt: sourcePointer. (preamble findString: (sourceDataPointers key) startingAt: 1) > 0 ifTrue: [ tokens := preamble parseLiterals. stampPosition := tokens indexOf: sourceDataPointers value. stampPosition = 0 ifFalse: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: stampPosition + 1]]. ^stamp! ! !Symbol class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38535518! readFrom: strm "Symbol readFromString: '#abc'" strm peek = $# ifFalse: [self error: 'Symbols must be introduced by #']. ^ strm contents parseLiterals first. ! ! !Finder methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38448420! findSelector: aString "Answer the selector of aString." | example tokens | example := aString. tokens := example parseLiterals. tokens size = 1 ifTrue: [^ tokens first]. tokens first == #'^' ifTrue: [^ nil]. (tokens second includes: $:) ifTrue: [^ example findSelector]. Symbol hasInterned: tokens second ifTrue: [:aSymbol | ^ aSymbol]. ^ nil! ! !ChangeList methodsFor: 'viewing access' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38448877! contentsDiffedFromCurrent "Answer the contents diffed forward from current (in-memory) method version" | aChange aClass | listIndex = 0 ifTrue: [^ '']. aChange := changeList at: listIndex. (aChange type == #method and: [(aClass := aChange methodClass) notNil and: [aClass includesSelector: aChange methodSelector]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: (aClass sourceCodeAt: aChange methodSelector) to: aChange text inClass: aClass prettyDiffs: self showingPrettyDiffs]. aChange type == #doIt ifTrue: [| tokens | tokens := aChange string parseLiterals. ((tokens select: [:substr| #(subclass: variableByteSubclass: variableWordSubclass: instanceVariableNames: classVariableNames: ) includes: substr]) asSet size >= 3 and: [(aClass := Smalltalk globals at: tokens third ifAbsent: []) notNil and: [aClass isBehavior]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass definition to: aChange string]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #instanceVariableNames: and: [(aClass := Smalltalk globals at: tokens first ifAbsent: []) notNil and: [aClass isBehavior]]]]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass class definition to: aChange string]]. (aChange type == #classComment and: [(aClass := aChange commentClass) notNil]) ifTrue: [^TextDiffBuilder buildDisplayPatchFrom: aClass comment asString to: aChange string]. ^(changeList at: listIndex) text! ! !ChangeList methodsFor: 'scanning' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38450476! scanCategory "Scan anything that involves more than one chunk; method name is historical only" | itemPosition item tokens stamp anIndex | itemPosition := file position. item := file nextChunk. ((item includesSubstring: 'commentStamp:') or: [(item includesSubstring: 'methodsFor:') or: [item endsWith: 'reorganize']]) ifFalse: ["Maybe a preamble, but not one we recognize; bail out with the preamble trick" ^ self addItem: (ChangeRecord new file: file position: itemPosition type: #preamble) text: ('preamble: ' , item contractTo: 50)]. tokens := item parseLiterals. tokens size >= 3 ifTrue: [stamp := ''. anIndex := tokens indexOf: #stamp: ifAbsent: [nil]. anIndex ifNotNil: [stamp := tokens at: (anIndex + 1)]. tokens second == #methodsFor: ifTrue: [^ self scanCategory: tokens third class: tokens first meta: false stamp: stamp]. tokens third == #methodsFor: ifTrue: [^ self scanCategory: tokens fourth class: tokens first meta: true stamp: stamp]]. tokens second == #commentStamp: ifTrue: [stamp := tokens third. self addItem: (ChangeRecord new file: file position: file position type: #classComment class: tokens first category: nil meta: false stamp: stamp) text: 'class comment for ' , tokens first, (stamp isEmpty ifTrue: [''] ifFalse: ['; ' , stamp]). file nextChunk. ^ file skipStyleChunk]. self assert: tokens last == #reorganize. self addItem: (ChangeRecord new file: file position: file position type: #reorganize class: tokens first category: nil meta: false stamp: stamp) text: 'organization for ' , tokens first, (tokens second == #class ifTrue: [' class'] ifFalse: ['']). file nextChunk! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38452293! selectUnchangedDefinitions "Selects all recognizable definitions for which there is already a definition in the current image, whose source is exactly the same." | change class tokens | Cursor read showWhile: [1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: false. (change type = #method and: [(class := change methodClass) notNil and: [class includesSelector: change methodSelector]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = (class sourceCodeAt: change methodSelector) asString withBlanksCondensed]. (change type == #classComment and: [(class := change commentClass) notNil]) ifTrue: [listSelections at: i put: change string = class comment asString]. change type == #doIt ifTrue: [tokens := change string parseLiterals. ((tokens select: [:substr| #(subclass: variableSubclass: variableByteSubclass: variableWordSubclass: instanceVariableNames: classVariableNames: ) includes: substr]) asSet size >= 3 and: [(class := Smalltalk globals at: tokens third ifAbsent: []) notNil and: [class isBehavior]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = class definition withBlanksCondensed]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #instanceVariableNames: and: [(class := Smalltalk globals at: tokens first ifAbsent: []) notNil and: [class isBehavior]]]]) ifTrue: [listSelections at: i put: change string withBlanksCondensed = class class definition withBlanksCondensed]. (tokens size = 3 and: [tokens second == #removeSelector: and: [(class := Smalltalk at: tokens first ifAbsent: []) isNil or: [class isBehavior and: [(class includesSelector: tokens third) not]]]]) ifTrue: [listSelections at: i put: true]. (tokens size = 4 and: [tokens second == #class and: [tokens third == #removeSelector: and: [(class := Smalltalk at: tokens first ifAbsent: []) isNil or: [class isBehavior and: [(class class includesSelector: tokens fourth) not]]]]]) ifTrue: [listSelections at: i put: true]]]]. self changed: #allSelections! ! !MCScriptParser methodsFor: 'actions' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38454613! addDefinitionsTo: aCollection | tokens definition | tokens := source parseLiterals. definition := MCScriptDefinition scriptSelector: tokens second allButLast script: tokens third packageName: tokens first third. aCollection add: definition.! ! !String methodsFor: 'converting' stamp: 'MarcusDenker 5/18/2013 15:44'! parseLiterals ^ self class compiler parseLiterals: self! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'md 5/18/2013 18:28' prior: 36765200! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. method2 := TestCase class compile: 'aMethod' classified: nil notifying: nil trailer: CompiledMethodTrailer empty ifFail: [ ^nil ]. self assert: method1 = method2. ! ! String removeSelector: #parseAsLiteralToken! "CodeImport"! "Collections-Strings"! "CollectionsTests"! "CompilerTests"! "Kernel"! "KernelTests"! "Monticello"! "NewClassOrganizer"! "PackageInfo"! "RPackage-Core"! "Ring-Core-Kernel"! "Ring-Monticello"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Layout"! "System-Changes"! "System-FilePackage"! "System-Installers"! "Tools"! ----End fileIn----! ----QUIT----an Array(19 May 2013 2:51:07 pm) Pharo.image priorSource: 5073167! ----STARTUP----an Array(19 May 2013 2:59:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 May 2013 2:59:23 pm) Pharo-30145.image priorSource: 5133972! ----STARTUP----an Array(19 May 2013 5:21:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/19/2013 17:18' prior: 38627893! commentForCurrentUpdate ^ '10649 Add drag support to TextMorph https://pharo.fogbugz.com/f/cases/10649 10675 Failing Regressiontest: ScannerTest>>#testLiteralSymbols https://pharo.fogbugz.com/f/cases/10675 10684 Halt in ComposableModel https://pharo.fogbugz.com/f/cases/10684'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/19/2013 17:18'! script243 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.161.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-StephaneDucasse.666.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1437.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.817.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.122.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.177.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.73.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1126.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/19/2013 17:18'! update30146 "self new update30146" self withUpdateLog: '10649 Add drag support to TextMorph https://pharo.fogbugz.com/f/cases/10649 10675 Failing Regressiontest: ScannerTest>>#testLiteralSymbols https://pharo.fogbugz.com/f/cases/10675 10684 Halt in ComposableModel https://pharo.fogbugz.com/f/cases/10684'. self loadTogether: self script243 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecLayout commentStamp: '' prior: 50711112! A SpecPresenter is a object used to describe a user interface! !AbstractBasicWidget commentStamp: '' prior: 33978579! AbstractBasicWidget is an abstract class for basic widgets! !Object methodsFor: '*Morphic' stamp: 'BenjaminVanRyseghem 5/16/2013 12:27'! isTransferable ^ false! ! !Object methodsFor: '*Morphic' stamp: 'BenjaminVanRyseghem 5/16/2013 12:21'! transferFor: passenger from: aMorph ^ TransferMorph withPassenger: passenger from: aMorph! ! !SpecLayout commentStamp: '' prior: 38699296! A SpecPresenter is a object used to describe a user interface! !SpecLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/19/2013 16:15'! selector ^ selector! ! !SpecLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/19/2013 16:15'! selector: anObject selector := anObject! ! !TransferMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 5/16/2013 12:27'! isTransferable ^ true! ! !PluggableListMorph methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:25' prior: 29432725! startDrag: evt | transferMorph draggedItem passenger | dragItemSelector ifNotNil: [ ^self startDragExtended: evt ]. evt hand hasSubmorphs ifTrue: [^ self]. self dragEnabled ifFalse: [^ self]. "Here I ensure at least one element is selected " ActiveHand anyButtonPressed ifFalse: [ ^self ]. draggedItem := self getListItem: (self mouseDownRow ifNil: [ self lastNonZeroIndex ]). draggedItem ifNil: [ ^ self ]. passenger := self model dragPassengersFor: draggedItem inMorph: self. passenger ifNil: [ ^ self ]. transferMorph := self model transferFor: passenger from: self. transferMorph align: transferMorph draggedMorph bottomLeft with: evt position. self mouseDownRow: nil. transferMorph dragTransferType: (self model dragTransferTypeForMorph: self). [evt hand grabMorph: transferMorph ] ensure: [ Cursor normal show. evt hand releaseMouseFocus: self] ! ! !PluggableListMorph methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:26' prior: 29433715! startDragExtended: evt "This method was defined in PluggableListMorphPlus (a subclass that got merged)" dragItemSelector ifNil: [^self]. evt hand hasSubmorphs ifTrue: [^ self]. [ | dragIndex draggedItem ddm ddRect | (self dragEnabled and: [model okToChange]) ifFalse: [^ self]. dragIndex := self rowAtLocation: evt position. dragIndex = 0 ifTrue: [^self]. draggedItem := model perform: dragItemSelector with: dragIndex. draggedItem ifNil: [^self]. self mouseDownRow: nil. ddm := self model transferFor: draggedItem from: self. ddRect := ddm draggedMorph bounds. ddm position: evt position - (ddRect center - ddRect origin). ddm dragTransferType: #dragTransfer. evt hand grabMorph: ddm] ensure: [Cursor normal show. evt hand newMouseFocus: self]! ! !AbstractBasicWidget commentStamp: '' prior: 38699426! AbstractBasicWidget is an abstract class for basic widgets! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37' prior: 33980413! initialize "Initialization code for AbstractBasicWidget" super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37'! transferBlock ^ transferBlock contents! ! !AbstractBasicWidget methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37'! transferBlock: aBlock transferBlock contents: aBlock! ! !AbstractBasicWidget methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 5/16/2013 14:46'! transferFor: passenger from: source ^ transferBlock contents cull:passenger cull: source! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 16:15' prior: 38512265! buildWithSpec: aSpec "Build the widget using the spec name provided as argument" ^ self buildWithSpecLayout: (self retrieveSpec: aSpec)! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 16:16' prior: 38514193! openDialogWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" ^ self openDialogWithSpecLayout: (self retrieveSpec: aSpec)! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 16:17' prior: 33763207! retrieveSpec: aSelector | layout | layout := self class perform: aSelector. layout isSpecLayout ifTrue: [ layout selector: aSelector ]. ^ layout! ! !InspectorWrapper class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/19/2013 16:37' prior: 36502956! inspectorSpec ^ SpecLayout composed add: #inspector withSpec: #inspectorSpec; yourself! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/19/2013 16:11' prior: 38676080! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := EyeInspector new asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 5/16/2013 12:23' prior: 26972609! startDrag: anEvent | aTransferMorph itemMorph passenger | self dragEnabled ifTrue: [itemMorph := self allNodeMorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [anEvent hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. itemMorph ~= self listManager selectedMorph ifTrue: [self listManager setSelectedMorph: itemMorph]. passenger := self model dragPassengerFor: itemMorph inMorph: self. passenger ifNotNil: [ aTransferMorph := self model transferFor: passenger from: self. "Ask the draggedMorph otherwise the transferMorph has not yet its bounds" aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. aTransferMorph dragTransferType: (self model dragTransferTypeForMorph: self). anEvent hand grabMorph: aTransferMorph]. anEvent hand releaseMouseFocus: self! ! !TextMorph methodsFor: 'editing' stamp: 'BenjaminVanRyseghem 5/16/2013 13:22' prior: 52785350! enterClickableRegion: evt | | evt hand hasSubmorphs ifTrue:[^self]. evt hand temporaryCursor ifNotNil:[^self]. "paragraph ifNotNil:[ (paragraph characterBlockAtPoint: evt position) stringIndex ]. "! ! !TextMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 13:23' prior: 52791914! mouseMove: event event redButtonPressed ifFalse: [ ^ self ]. self handleInteraction: [ editor mouseMove: event ]! ! !SimpleHierarchicalListMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 12:26' prior: 33291243! startDrag: anEvent | aTransferMorph itemMorph passenger | self dragEnabled ifTrue: [itemMorph := scroller submorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [anEvent hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. itemMorph ~= self selectedMorph ifTrue: [self setSelectedMorph: itemMorph]. passenger := self model dragPassengerFor: itemMorph inMorph: self. passenger ifNotNil: [ aTransferMorph := self model transferFor: passenger from: self. aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. aTransferMorph dragTransferType: (self model dragTransferTypeForMorph: self). anEvent hand grabMorph: aTransferMorph]. anEvent hand releaseMouseFocus: self! ! !ComposableSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 16:21' prior: 20042958! initializeInstance ^ SpecInterpreter private_interpretASpec: { self classSymbol. #useProportionalLayout. #addSplitters. #vSpaceFill. #hSpaceFill.} model: DummyComposableModel new selector: self selector! ! !SpecInterpreterTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 5/19/2013 16:25' prior: 38517323! testBindings self assert: specInterpreter bindings bindings class equals: MorphicBindings. specInterpreterClass bindings: MorphicBindingsWithSplitters new. self assert: specInterpreter bindings bindings class equals: MorphicBindingsWithSplitters. TestingComposableModel new buildWithSpec: #defaultSpec. self assert: specInterpreter bindings bindings class equals: MorphicBindings.! ! !SpecInterpreterTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 5/19/2013 16:25' prior: 50709234! testBuildWidgetForWithSpec | model morph | model := TestingComposableModel new. morph := model buildWithSpec: #testingSpec. self assert: (morph model == model). self assert: (model widget class = PluggableTextMorph).! ! !TextEditor methodsFor: 'new selection' stamp: 'BenjaminVanRyseghem 5/16/2013 14:16'! deselect self selectFrom: 1 to: 0! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 14:18' prior: 52617854! mouseDown: event "An attempt to break up the old processRedButton code into three phases" "no matter what, if shift is pressed extend the selection" "no right/yellowbutton click just reposoition the cursor" (self paragraph selectionContainsPoint: event cursorPoint) ifTrue: [ self mouseDownOnSelectedText: event ] ifFalse: [ self mouseDownOnUnselectedText: event ]! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 14:24'! mouseDownOnSelectedText: event | selectors | selectors := Array with: #mouseDownOnUnselectedText: with: nil with: nil with: (self morph dragEnabled ifTrue: [ #startDrag: ] ifFalse: [ nil ]). event hand waitForClicksOrDrag: self event: event selectors: selectors threshold: 10! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 14:18'! mouseDownOnUnselectedText: event self editingState mouseDown: event from: morph. self closeTypeIn. "no matter what, if shift is pressed extend the selection" event shiftPressed ifTrue: [ ^ self mouseMove: event ]. event yellowButtonPressed ifTrue: [ self yellowButtonDown: event ] ifFalse: [ "no right/yellowbutton click just reposoition the cursor" self updateSelectionFromEvent: event ]! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 13:33' prior: 52618406! mouseMove: evt "Change the selection in response to mouse-down drag" | characterBlock | characterBlock := self paragraph characterBlockAtPoint: evt cursorPoint. self editingState pointBlock: characterBlock. self paragraph move: evt for: model controller: self. self storeSelectionInParagraph! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 14:29'! startDrag: event self morph startDrag: (event translatedBy: self morph editView topLeft)! ! !TextEditor methodsFor: 'events' stamp: 'BenjaminVanRyseghem 5/16/2013 14:19'! transformedFrom: uberMorph ^ self morph transformedFrom: uberMorph! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'BenjaminVanRyseghem 5/19/2013 16:37' prior: 36486586! basicInspect: anObject ^ self new inspect: anObject; openWithSpec: #inspectorSpec; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 5/19/2013 16:38' prior: 36486792! debuggerSpec ^ SpecLayout composed add: #list origin: 0@0 corner: 0.33@1; addVSplitter; add: #description origin: 0.33@0 corner: 1@1; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 5/19/2013 16:38'! debuggerSpecSlow ^ SpecLayout composed newRow: [:row | row add: #list width: 135; add: #description ]; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 5/19/2013 16:38' prior: 36487981! inspectorSpec ^ SpecLayout composed newRow: [ :r | r newColumn: #list right: 0.6; addSplitter; newColumn: #description left: 0.4 ] bottom: 0.3; addHSplitter; newRow: #text top: 0.7; yourself! ! !EyeInspector class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 5/19/2013 16:37'! inspectorSpecSlow ^ SpecLayout composed newColumn: [:c | c newRow: [:row | row add: #list width: 135; add: #description ]; newRow: [:row2 | row2 add: #text ] height: 75 ]; yourself! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 14:16'! doubleClickOnSelectedText: event "Unselect everything. This message is sent by the editor" self deselect! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 13:04'! dragEnabled ^ self editView dragEnabled! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 13:04'! handlesDoubleClick ^ self editView handlesDoubleClick! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 13:20' prior: 52826762! mouseDown: event | hl | self editView ifNotNil: [self editView mouseDownFromTextMorph: event]. super mouseDown: event. self flag: #hack. (self editView respondsTo: #highlights) ifTrue: [ hl := self editView highlights detect: [ :h | h containsPoint: event position in: (self bounds: self editView innerBounds from: self) ] ifNone: [ ^ self ]. hl clicked: event] ! ! !TextMorphForEditView methodsFor: 'dragging' stamp: 'BenjaminVanRyseghem 5/16/2013 14:23'! startDrag: event self editView startDrag: event! ! !ScannerTest class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/19/2013 16:39'! compilerClass ^Compiler! ! !DialogWindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 16:22' prior: 20712101! buildWithSpecLayout: aSpec "Build the widget using the spec name provided as argument" | widget | (self spec notNil and: [ self needRebuild not ]) ifTrue: [ widget := self spec instance ] ifFalse: [ contentMorph := self model buildWithSpecLayout: aSpec. widget := SpecInterpreter private_buildWidgetFor: self withSpec: self defaultSpecSelector. contentMorph := nil ]. self extent ifNotNil: [:ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ]]. ^ widget! ! !SpecInterpreter class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 16:24' prior: 36554558! private_buildWidgetFor: aComposableModel withSpec: aSymbol ^ self private_interpretASpec: (aComposableModel retrieveSpec: aSymbol) model: aComposableModel selector: aSymbol! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 5/19/2013 16:32' prior: 36556406! interpretASpec: aPresenter selector: aSelector aPresenter ifNil: [ ^ nil ]. (self extractArrayToInterpretFrom: aPresenter) ifNotNil: [ :result | ^ result ]. (self retrieveSpecFrom: aPresenter selector: aSelector) ifNotNil: [ :instance | ^ instance ]. specForChildren := self retrieveSpecToProvideToChildren. index := 2. [ index <= arrayToInterpret size ] whileTrue: [ | newInstance | newInstance := self performNextSelectorAndIncrementIndex. index > arrayToInterpret size ifTrue: [ ^ self returnInterpretationOf: newInstance ]. spec instance: newInstance ]. "If you get here, there is a problem. Must probably it comes from the Spec which is wrongly defined" self assert: arrayToInterpret size < 2. (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. ^ spec instance! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 5/19/2013 16:32' prior: 36558187! retrieveSpecFrom: aPresenter selector: aSelector ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. self model needRebuild: true. spec isRedrawable ifTrue: [ spec removeSubWidgets ]. spec isBasic ifTrue: [ ^ spec instance ] ] ifFalse: [ spec := self computeSpecFrom: arrayToInterpret first selector: aSelector ]. aSelector ifNil: [ aPresenter isSpecLayout ifTrue: [ spec selector: aPresenter selector ] ] ifNotNil: [ spec selector: aSelector ]. ^ nil! ! !MorphTreeColumnButton methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 12:23' prior: 26904196! startDrag: anEvent | aTransferMorph | self dragEnabled ifFalse: [^ self]. (anEvent hand hasSubmorphs) ifTrue: [^ self]. oldColor ifNotNil: [ self fillStyle: oldColor. oldColor := nil]. aTransferMorph := self model transferFor: self model from: self. aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. anEvent hand grabMorph: aTransferMorph. anEvent hand releaseMouseFocus: self! ! !MorphTreeColumnButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/16/2013 12:28' prior: 26902723! wantsDroppedMorph: aMorph event: anEvent ^ model container columnDropUnabled and: [(aMorph isTransferable) and: [(aMorph passenger isKindOf: MorphTreeColumn) and: [aMorph passenger ~= self model]]]! ! !PluggableTextMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/16/2013 13:06'! handlesDoubleClick ^ doubleClickSelector notNil! ! !PluggableTextMorph methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 14:06'! startDrag: event | aTransferMorph itemMorph passenger | self dragEnabled ifFalse: [ ^ self ]. itemMorph := self selectedContents asMorph. passenger := self model dragPassengerFor: itemMorph inMorph: self. passenger ifNotNil: [ aTransferMorph := self model transferFor: passenger from: self. "Ask the draggedMorph otherwise the transferMorph has not yet its bounds" aTransferMorph align: aTransferMorph draggedMorph center with: event position. aTransferMorph dragTransferType: (self model dragTransferTypeForMorph: self). event hand grabMorph: aTransferMorph]. event hand releaseMouseFocus: self! ! SpecInterpreter class removeSelector: #private_interpretASpec:model:! SpecInterpreter class removeSelector: #buildWidgetFor:withSpec:! ComposableModel removeSelector: #close! EyeInspector class removeSelector: #inspectorSpecOptimized! EyeInspector class removeSelector: #debuggerSpecOptimized! "CompilerTests"! "Morphic"! "Spec-Core"! "Spec-Inspector"! "Spec-Layout"! "Spec-Tests"! "Spec-Widgets"! "Text"! ----End fileIn----! ----QUIT----an Array(19 May 2013 5:22:01 pm) Pharo.image priorSource: 5134168! ----STARTUP----an Array(19 May 2013 5:28:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 May 2013 5:28:52 pm) Pharo-30146.image priorSource: 5164284! ----STARTUP----an Array(20 May 2013 10:00:45 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/20/2013 09:57' prior: 38688897! commentForCurrentUpdate ^ '10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 10686 PluggableTextMorph>>#handlesDoubleClick references doubleClickSelector https://pharo.fogbugz.com/f/cases/10686 7348 Closing a window with unaccepted content does not trigger any notification https://pharo.fogbugz.com/f/cases/7348'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/20/2013 09:57'! script244 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.161.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1438.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.821.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.123.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.178.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.73.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1126.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/20/2013 09:57'! update30147 "self new update30147" self withUpdateLog: '10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 10686 PluggableTextMorph>>#handlesDoubleClick references doubleClickSelector https://pharo.fogbugz.com/f/cases/10686 7348 Closing a window with unaccepted content does not trigger any notification https://pharo.fogbugz.com/f/cases/7348'. self loadTogether: self script244 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WindowModel commentStamp: '' prior: 54916665! A WindowModel is a spec model for a Window! !Trait method! toggleEnabled "Toggle the enabled state." self enabled: self enabled not! ! !Trait method! addToggleItemsToHaloMenu: aCustomMenu "Add toggle-items to the halo menu" super addToggleItemsToHaloMenu: aCustomMenu. aCustomMenu addUpdating: #enabledString target: self action: #toggleEnabled! ! !Trait method! enabledString "Answer the string to be shown in a menu to represent the 'enabled' status" ^ (self enabled) -> 'enabled' translated! ! !ComposableModel commentStamp: '' prior: 38166485! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 5/19/2013 13:08' prior: 51707177! closeBoxHit "The user clicked on the close-box control in the window title. For Mac users only, the Mac convention of option-click-on-close-box is obeyed if the mac option key is down. If we have a modal child then don't delete. Play the close sound now since this is the only time we know that the close is user-initiated." self allowedToClose ifFalse: [^self]. self playCloseSound. self close ! ! !WindowModel commentStamp: '' prior: 38729751! A WindowModel is a spec model for a Window! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27'! askOkToClose ^ self model askOkToClose! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:10' prior: 54917958! close self widget ifNotNil: [ :w | w close ].! ! !WindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27' prior: 54917100! initialize "Initialization code for WindowModel" super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 13:25'! okToChange ^ self model okToChange! ! !SpecWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 5/19/2013 13:21'! close self model askOkToClose ifTrue: [ self okToChange ifFalse: [ ^ self ] ]. super close! ! !SpecWindow methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/19/2013 13:21'! okToChange ^ self model okToChange! ! !MetacelloCommonMCSpecLoader class methodsFor: 'utilities' stamp: 'CamilloBruni 5/9/2013 12:57' prior: 25802780! nameComponentsFrom: aVersionName | ar | ar := (aVersionName last isDigit and: [ (aVersionName indexOf: $.) > 0 ]) ifFalse: [Array with: aVersionName with: '' with: 0 with: aVersionName with: self] ifTrue: [ | vrsn str | str := ((aVersionName copyAfterLast: $-) copyAfterLast: $.). vrsn := str isEmpty ifTrue: [0] ifFalse: [str asInteger]. Array with: (aVersionName copyUpToLast: $-) "base pkg name" with: ((aVersionName copyAfterLast: $-) copyUpTo: $.) "user" with: vrsn "version" with: aVersionName with: self ]. ^ar! ! !MetacelloConfigTemplate methodsFor: 'baselines' stamp: 'CamilloBruni 5/9/2013 13:01'! baseline10: spec "Baselines are used by convention in Metacello and essentially are nothing else than normal versions. Name the baseline after the first version it was introduced. In this case 1.0-baseline was introduced the first time with the 1.0 version defined in the #version10 method. Metacello only uses the following tag to figure out the name of this baseline:" "Using #common makes this dependency declaration available for all Smalltalks. If you need more fine-grained control you can add several #for:do: sections for other releases." spec for: #common do: [ spec blessing: #baseline. "specify the default repository for your project's packages" spec repository: 'http://smalltalkhub.com/mc/JohnDoe/MyProject/main'. "use separate methods for external projects" self fuelMetalevel: spec; fileSystemLegacy: spec. "specify the dependencies between packages and projects" spec "a package without dependencies:" package: 'MyProject-Core'; package: 'MyProject-Tests' with: [ "Specfiy dependencies using the #requires: directive, you can refer to any name here, in this case to an external project" spec requires: #('MyProject-Core' 'FuelMetalevel' 'FileSystemLegacy')]. "using groups certain packages and projects can be loaded conditionally" spec "load the tests by default" group: 'default' with: #('core' 'test'); group: 'test' with: #('MyProject-Tests'); group: 'core' with: #('MyProject-Core')]! ! !MetacelloConfigTemplate methodsFor: 'tags' stamp: 'CamilloBruni 5/9/2013 12:30'! development: spec "By convention the development branch should point to a fixed version that is regularly updated and might contain unstable code. The name used by Metacello is only defined by the following pragma:" "For the development tag refer to a fixed version which you update if you commit new code. Note that you can refer here to any other version name from this configuration" spec for: #'common' version: 'dev'. ! ! !MetacelloConfigTemplate methodsFor: 'external projects' stamp: 'CamilloBruni 5/9/2013 13:01'! fileSystemLegacy: spec "This is an example of an external project which does not have a configuration yet. Note that the package name is only used in the Metacello configuration and does not have be exactly the same as the Monticello project/version name." spec package: 'FileSystemLegacy' with: [ spec repository: 'http://smalltalkhub.com/mc/PharoExtras/FileSystemLegacy/main'; "if you do not specify a version, automatically the newest version is chose." file: 'FileSystem-Legacy-JohanBrichau.2' ]! ! !MetacelloConfigTemplate methodsFor: 'external projects' stamp: 'CamilloBruni 5/9/2013 12:13'! fuelMetalevel: spec "Specify a dependency on an external project which has it's own configuration. The given project name can be chosen freely, for simplicity use the same name as the configuration or the conditional group you load." spec project: 'FuelMetalevel' with: [ spec repository: 'http://ss3.gemstone.com/ss/Fuel'; className: 'ConfigurationOfFuel'; "if you want to load by default a special group usse the #loads: message plus a group name of the external configuration" loads: #FuelMetalevel ].! ! !MetacelloConfigTemplate methodsFor: 'tags' stamp: 'CamilloBruni 5/9/2013 12:18'! stable: spec "Symbolic versions can be used to introduce an indirection to a version number. The real name used by Metacello is only defined by the following pragma:" "If another version is stable for a differen Smalltalk use a specific name" "spec for: #'pharo1.4.x' version: '0.9'" "Specfiy which exact version you want to load" spec for: #'common' version: '1.0'. ! ! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'CamilloBruni 5/9/2013 13:02'! version10: spec "The name for this version is solely defined by the following pragma:" "Baselines are used to define more complex setups for your project. If you want to use external projects and have fine-graind control of the dependencies between packages use the #imports: part. See the #baseline10: for more details." "Using #for:do: with the #common release specifier the following version declaration is valid for all platforms." spec for: #common do: [ spec description: 'Version 1.0 the current stable release'; author: 'John Doe'; timestamp: '2013-05-01'. "Specify the versions for each package and external project defined in the baseline, here the 1.0-baseline defined in the baseline10 method." spec "For standard Monticello packages simply refere to the full version name without the extension:" package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.52'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.73'; "External projects versions are specified using #project:with:. Note the project name referes to the name used in the Metacello declaration. FuelMetalevel is defined in the #fuelMetalevel: method." project: 'FuelMetalevel' with: #stable ]. "If you want to specify different version on other platforms add another #for:do: block with a different version identifier."! ! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'CamilloBruni 5/9/2013 13:02'! versionDevelopment: spec "version specification for the current development branch, see #version10 for a complete explanation of a version declaration. In this case the 'dev' version uses the same baselin as version '1.0':" "Update this configuration regulrarly with intermediate releases. If a version is more stable or should stay accessible copy this 'dev' definition and give it a proper version name on its own. For example, in this case you might want to split a new version '1.1' by copying over this definition." spec for: #common do: [ spec description: 'Development Version'; author: 'John Doe'; timestamp: '2013-05-09'. spec package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.152'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.173'; "note that for the 'dev' version we rely on the #development version of the external FuleMetalevel project" project: 'FuelMetalevel' with: #development ].! ! !ComposableModel commentStamp: '' prior: 38730330! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27'! askOkToClose ^ askOkToClose contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27'! askOkToClose: aBoolean askOkToClose contents: aBoolean! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/19/2013 13:28' prior: 38512849! initialize "Initialization code for ComposableModel" super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. windowIcon := nil asValueHolder. window := nil asValueHolder. askOkToClose := false asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! "Metacello-MC"! "Morphic"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(20 May 2013 10:01:06 am) Pharo.image priorSource: 5164480! ----STARTUP----an Array(20 May 2013 10:08:02 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 May 2013 10:08:03 am) Pharo-30147.image priorSource: 5186318! ----STARTUP----an Array(20 May 2013 1:21:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/20/2013 13:19' prior: 38719210! commentForCurrentUpdate ^ '10676 Failing Regressiontests: CompilerExceptionsTest https://pharo.fogbugz.com/f/cases/10676 10688 SpecInterpreterTest.testDynamicBuild is failing https://pharo.fogbugz.com/f/cases/10688/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/20/2013 13:19'! script245 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.462.mcz CompilerTests-MarcusDenker.164.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1438.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.821.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.537.mcz Text-MarcusDenker.73.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1126.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/20/2013 13:19'! update30148 "self new update30148" self withUpdateLog: '10676 Failing Regressiontests: CompilerExceptionsTest https://pharo.fogbugz.com/f/cases/10676 10688 SpecInterpreterTest.testDynamicBuild is failing https://pharo.fogbugz.com/f/cases/10688/ '. self loadTogether: self script245 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/20/2013 12:09' prior: 38519184! rebuildWithSpecLayout: aSpec | sub | sub := window contents submorphs copy. window contents removeAllMorphs. sub allButLast do: [:e | window contents addMorphBack: e ]. self addModelIn: self widget withSpecLayout: aSpec. self widget model: self! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/20/2013 12:04' prior: 38515065! openWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into a window" ^ self openWithSpecLayout: (self retrieveSpec: aSpec)! ! !ClosureCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 5/20/2013 13:08'! setUp currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: Compiler.! ! !ClosureCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 5/20/2013 13:08'! tearDown SmalltalkImage compilerClass: currentCompiler.! ! !CompilerExceptionsTest methodsFor: 'setUp' stamp: 'MarcusDenker 5/20/2013 13:09' prior: 35812201! setUp currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: Compiler. self removeGeneratedMethods.! ! !CompilerExceptionsTest methodsFor: 'setUp' stamp: 'MarcusDenker 5/20/2013 13:09'! tearDown SmalltalkImage compilerClass: currentCompiler.! ! AbstractInstructionTests removeSelector: #runBinaryConditionalJumps:! Smalltalk globals removeClassNamed: #AbstractInstructionTests! ClosureCompilerTest removeSelector: #testDecompiledDoitMethodTempNames! "CompilerTests"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(20 May 2013 1:21:53 pm) Pharo.image priorSource: 5186516! ----STARTUP----an Array(20 May 2013 1:28:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 May 2013 1:28:48 pm) Pharo-30148.image priorSource: 5198626! ----STARTUP----an Array(21 May 2013 7:10:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/21/2013 07:08' prior: 38741246! commentForCurrentUpdate ^ '10687 VistaryThemeIcons class cannot be initialized https://pharo.fogbugz.com/f/cases/10687 10689 Finder>>#computeWithMethodFinder: directly references ReturnNode https://pharo.fogbugz.com/f/cases/10689 10690 Remove two unused classes from old compiler https://pharo.fogbugz.com/f/cases/10690 10693 SmalltalkEditorTest testCompilationOfUndefinedVar references UndeclaredVariable Exception https://pharo.fogbugz.com/f/cases/10693 10694 Force old compiler CompilerEvaluationTest https://pharo.fogbugz.com/f/cases/10694/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/21/2013 07:08'! script246 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1438.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-MarcusDenker.73.mcz TextTests-MarcusDenker.5.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/21/2013 07:08'! update30149 "self new update30149" self withUpdateLog: '10687 VistaryThemeIcons class cannot be initialized https://pharo.fogbugz.com/f/cases/10687 10689 Finder>>#computeWithMethodFinder: directly references ReturnNode https://pharo.fogbugz.com/f/cases/10689 10690 Remove two unused classes from old compiler https://pharo.fogbugz.com/f/cases/10690 10693 SmalltalkEditorTest testCompilationOfUndefinedVar references UndeclaredVariable Exception https://pharo.fogbugz.com/f/cases/10693 10694 Force old compiler CompilerEvaluationTest https://pharo.fogbugz.com/f/cases/10694/'. self loadTogether: self script246 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompilerEvaluationTest commentStamp: 'StephaneDucasse 6/9/2010 20:54' prior: 19918502! This test is important since it covers a bug of during the debugging of super binding. It uses the class AverageCost/TotalCost and WeightedAverageCost.! !ReturnNode methodsFor: 'testing' stamp: 'MarcusDenker 5/20/2013 15:21'! isReturn ^true! ! !ParseNode methodsFor: 'testing' stamp: 'MarcusDenker 5/20/2013 15:21'! isReturn ^false! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 5/20/2013 15:20' prior: 36326857! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [^#()]. "delete trailing period. This should be fixed in the Parser!!" data := aString trimRight: [ :char| char isSeparator or: [ char = $. ]]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [dataObjects := self class compiler evaluate: '{', data, '}'] on: SyntaxErrorNotification do: [:e | self inform: 'Syntax Error: ', e errorMessage. self contents: (e errorCode allButFirst allButLast). ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data in: Object notifying: nil) body statements select: [:each | each isReturn not]. dataStrings := statements collect:[:node | String streamContents: [:strm | (node isMessage) ifTrue: [strm nextPut: $(]. node shortPrintOn: strm. (node isMessage) ifTrue: [strm nextPut: $)]]]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #()]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [resultArray := resultArray collect: [:expression | | newExp | newExp := expression. dataObjects first withIndexDo: [:lit :i | newExp := newExp copyReplaceAll: 'data', i printString with: (dataStrings at: i)]. newExp, ' --> ', dataStrings last ]]. ^ resultArray! ! !CompilerEvaluationTest commentStamp: 'StephaneDucasse 6/9/2010 20:54' prior: 38764525! This test is important since it covers a bug of during the debugging of super binding. It uses the class AverageCost/TotalCost and WeightedAverageCost.! !CompilerEvaluationTest methodsFor: 'setup' stamp: 'MarcusDenker 5/20/2013 15:33' prior: 19919312! setUp weightedAverage := WeightedAverageCost new. currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: Compiler.! ! !CompilerEvaluationTest methodsFor: 'setup' stamp: 'MarcusDenker 5/20/2013 15:34'! tearDown SmalltalkImage compilerClass: currentCompiler.! ! SmalltalkEditorTest removeSelector: #testCompilationOfUndefinedVar! Smalltalk globals removeClassNamed: #SmalltalkEditorTest! CommentNode removeSelector: #accept:! Smalltalk globals removeClassNamed: #CommentNode! OutOfScopeNotification removeSelector: #defaultAction! Smalltalk globals removeClassNamed: #OutOfScopeNotification! VistaryThemeIcons class removeSelector: #initialize! "Compiler"! "CompilerTests"! "Polymorph-Widgets"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(21 May 2013 7:10:58 am) Pharo.image priorSource: 5198822! ----STARTUP----an Array(21 May 2013 7:17:54 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 May 2013 7:17:54 am) Pharo-30149.image priorSource: 5213806! ----STARTUP----an Array(21 May 2013 11:09:44 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/21/2013 11:06' prior: 38753551! commentForCurrentUpdate ^ '10704 split package Text into smaller components https://pharo.fogbugz.com/f/cases/10704 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/21/2013 11:06'! script247 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1438.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-EstebanLorenzano.74.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz TextTests-EstebanLorenzano.7.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/21/2013 11:06'! update30150 "self new update30150" self withUpdateLog: '10704 split package Text into smaller components https://pharo.fogbugz.com/f/cases/10704 '. self loadTogether: self script247 merge: false. ScriptLoader new unregisterPackage: 'Text'; unregisterPackage: 'TextTests'. self flushCaches. ! ! "ScriptLoader30"! !TextAndTextStreamTest commentStamp: '' prior: 52512960! At May 09, 2003 Tim Olson sent a bug report to the Squeak developers list that inspired me to examine the protocol of TextStream in greater detail. (The bug that Tim reported was present in Squeak 3.4, it is shown in testExample1.) In a discussion that followed, Daniel Vainsencher proposed that we should have tests for Text and TextStreams. This class is an attempt to implement that proposal. For Squeak 3.4, some of the test examples fail.! !TextLineEndingsTest commentStamp: 'nk 11/1/2003 07:55' prior: 52731884! This is a test case for Text>>withSqueakLineEndings and String>>withSqueakLineEndings. The main problem we've seen with the Text version is that it doesn't preserve formatting correctly.! !TextAlignmentTest methodsFor: 'initialization' stamp: 'mjr 8/20/2003 18:55' prior: 52509907! setUp super setUp. prototypes add: TextAlignment centered; add: TextAlignment justified; add: TextAlignment leftFlush; add: TextAlignment rightFlush ! ! !TextEmphasisTest methodsFor: 'initialization' stamp: 'mjr 8/20/2003 18:55' prior: 52689198! setUp super setUp. prototypes add: TextEmphasis bold; add: TextEmphasis italic; add: TextEmphasis narrow; add: TextEmphasis normal; add: TextEmphasis struckOut; add: TextEmphasis underlined ! ! !TextEmphasisTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:03' prior: 52689477! testAppendString "tests the Text>>prepend: method when appending a String " "self run: # testAppendString" | receiver argument result expectedResult | receiver := 'xxx' asText addAttribute: TextEmphasis bold from: 1 to: 3. argument := 'yyy'. expectedResult := 'xxxyyy' asText addAttribute: TextEmphasis bold from: 1 to: 3. result := receiver append: argument. self assert: (result == receiver). self assert: (result string = expectedResult string). self assert: (result runs = expectedResult runs)! ! !TextEmphasisTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:04' prior: 52690066! testAppendText "tests the Text>>prepend: method when appending a Text " | receiver argument result expectedResult | receiver := 'xxx' asText addAttribute: TextEmphasis bold from: 1 to: 3. argument := 'yyy' asText addAttribute: TextEmphasis italic from: 1 to: 3. . expectedResult := 'xxxyyy' asText addAttribute: TextEmphasis bold from: 1 to: 3; addAttribute: TextEmphasis italic from: 4 to: 6. result := receiver append: argument. self assert: (result == receiver). self assert: (result string = expectedResult string). self assert: (result runs = expectedResult runs) ! ! !TextEmphasisTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:04' prior: 52690734! testPrependString "tests the Text>>prepend: method when prepending a String " | receiver argument result expectedResult | receiver := 'xxx' asText addAttribute: TextEmphasis bold from: 1 to: 3. argument := 'yyy'. expectedResult := 'yyyxxx' asText addAttribute: TextEmphasis bold from: 4 to: 6. result := receiver prepend: argument. self assert: (result == receiver). self assert: (result string = expectedResult string). self assert: (result runs = expectedResult runs) ! ! !TextEmphasisTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:04' prior: 52691296! testPrependText "tests the Text>>prepend: method when prepending Text " | receiver argument result expectedResult | receiver := 'xxx' asText addAttribute: TextEmphasis bold from: 1 to: 3. argument := 'yyy' asText addAttribute: TextEmphasis italic from: 1 to: 3. expectedResult := 'yyyxxx' asText addAttribute: TextEmphasis italic from: 1 to: 3; addAttribute: TextEmphasis bold from: 4 to: 6. result := receiver prepend: argument. self assert: (result == receiver). self assert: (result string = expectedResult string). self assert: (result runs = expectedResult runs)! ! !TextFontChangeTest methodsFor: 'initialization' stamp: 'mjr 8/20/2003 18:55' prior: 52698877! setUp "create the prototypes for testing" super setUp. prototypes add: TextFontChange defaultFontChange. prototypes add: TextFontChange font1. prototypes add: TextFontChange font2. prototypes add: TextFontChange font3. prototypes add: TextFontChange font4. prototypes add: (TextFontChange fontNumber: 6) ! ! !TextFontChangeTest methodsFor: 'tests' stamp: 'mjr 8/17/2003 20:29' prior: 52699267! testEquality "Check that different instances of the same TextFontChange are equal" self assert: TextFontChange defaultFontChange = TextFontChange defaultFontChange. self assert: TextFontChange font1 = TextFontChange font1. self assert: TextFontChange font2 = TextFontChange font2. self assert: TextFontChange font3 = TextFontChange font3. self assert: TextFontChange font4 = TextFontChange font4. self assert: (TextFontChange fontNumber: 6) = (TextFontChange fontNumber: 6)! ! !TextFontChangeTest methodsFor: 'tests' stamp: 'stephaneducasse 2/4/2006 20:10' prior: 52699836! testHash "test that different instances of the same TextFontChange hash to the same value" | hashes hash | hashes := OrderedCollection new. 1 to: 100 do: [:i | hashes add: TextFontChange defaultFontChange hash]. hash := hashes at: 1. 2 to: 100 do: [:i | self assert: (hashes at: i) = hash]! ! !TextFontReferenceTest methodsFor: 'tests' stamp: 'mjr 8/20/2003 18:55' prior: 52702145! setUp super setUp. prototypes add: (TextFontReference toFont: (StrikeFont familyName: 'NewYork' size: 15)) ! ! !TextKernTest methodsFor: 'tests' stamp: 'mjr 8/20/2003 18:55' prior: 52724356! setUp super setUp. prototypes add: (TextKern kern: 1) ! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'zz 7/2/2008 16:18' prior: 32333807! testANewRunArrayIsEmpty | t | t := RunArray new. self assert:t isEmpty ! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/15/2007 10:25' prior: 32331349! testAt "self debug: #testAt" | array | array := RunArray new: 5 withAll: 2. self assert: (array at: 3) = 2. array at: 3 put: 5. self assert: (array at: 3) = 5 ! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'nice 10/31/2011 20:31' prior: 32331599! testAtPut "self debug: #testAtPut" | array | array := RunArray new: 5 withAll: 2. array at: 3 put: 5. self assert: array asArray = #(2 2 5 2 2). array at: 1 put: 1. self assert: array asArray = #(1 2 5 2 2).! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/15/2007 10:29' prior: 32331897! testAtPut2 "self debug: #testAtPut2" | array | array := RunArray new: 5 withAll: 2. self should: [array at: 0 put: 5] raise: Error. self should: [array at: 6 put: 5] raise: Error. self should: [array at: $b put: 5] raise: Error.! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/12/2007 09:49' prior: 32332213! testFirst "self debug: #testFirst" | array | array := RunArray new: 5 withAll: 2. self assert: array first = 2. array := #($a $b $c $d) as: RunArray. self assert: array first = $a.! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'MarcusDenker 5/2/2013 11:36' prior: 36343416! testIsSelfEvaluating | array array2 | array := RunArray new: 5 withAll: 2. self assert: array isSelfEvaluating. array2 := RunArray new: 5 withAll: Object new. array2 isSelfEvaluating ifTrue: [self assert: (self class compiler evaluate: array2 printString) = array2 description: 'a self evaluating should evaluate as self'].! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/12/2007 09:49' prior: 32332481! testLast "self debug: #testLast" | array | array := RunArray new: 5 withAll: 2. self assert: array last = 2. array := #($a $b $c $d) as: RunArray. self assert: array last = $d.! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'dc 2/12/2007 09:22' prior: 32334396! testNew "self debug: #testNew" | array | array := RunArray new. self assert: array size = 0.! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'nice 10/31/2011 20:32' prior: 32334583! testNewFrom "self debug: #testNewFrom" | array | array := RunArray newFrom: #($a $b $b $b $b $c $c $a). self assert: array size = 8. self assert: array asArray = #($a $b $b $b $b $c $c $a).! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'nice 10/31/2011 20:32' prior: 32334868! testNewWithAll "self debug: #testNewWithAll" | array | array := RunArray new: 5 withAll: 2. self assert: array size = 5. self assert: array asArray = #(2 2 2 2 2)! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'dc 5/24/2007 10:56' prior: 32335123! testNewWithSize |array| array := RunArray new: 5. self assert: array size = 5. 1 to: 5 do: [:index | self assert: (array at: index) isNil]! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/12/2007 09:58' prior: 32332745! testRunLengthAt "self debug: #testRunLengthAt" | array | array := #($a $b $b $c $c $c $d $d) as: RunArray. self assert: (array runLengthAt: 1) = 1. self assert: (array runLengthAt: 2) = 2. self assert: (array runLengthAt: 3) = 1. self assert: (array runLengthAt: 4) = 3. self assert: (array runLengthAt: 5) = 2. self assert: (array runLengthAt: 6) = 1. self assert: (array runLengthAt: 7) = 2. self assert: (array runLengthAt: 8) = 1.! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'nice 10/31/2011 20:32' prior: 32335356! testRunsValues "self debug: #testRunsValues" | array | array := RunArray runs: #(1 4 2 1) values: #($a $b $c $a). self assert: array size = 8. self assert: array asArray = #($a $b $b $b $b $c $c $a).! ! !RunArrayTest methodsFor: 'tests - instance creation' stamp: 'damiencassou 5/30/2008 14:26' prior: 32335658! testScanFromANSICompatibility "self run: #testScanFromANSICompatibility" RunArray scanFrom: '()f1dNumber new;;' readStream. RunArray scanFrom: '()a1death;;' readStream. RunArray scanFrom: '()F1death;;' readStream! ! !RunArrayTest methodsFor: 'tests - accessing' stamp: 'dc 2/12/2007 10:12' prior: 32333270! testWithStartStopAndValueDo "self debug: #testWithStartStopAndValueDo" | array elements startStops | array := #($a $b $b $c $c $c $d $d) as: RunArray. elements := OrderedCollection new. startStops := OrderedCollection new. array withStartStopAndValueDo: [:start :stop :value | elements add: value. startStops add: start->stop]. self assert: elements asArray = #($a $b $c $d). self assert: startStops asArray = {1->1 . 2->3 . 4->6 . 7->8}! ! !TextAndTextStreamTest commentStamp: '' prior: 38779055! At May 09, 2003 Tim Olson sent a bug report to the Squeak developers list that inspired me to examine the protocol of TextStream in greater detail. (The bug that Tim reported was present in Squeak 3.4, it is shown in testExample1.) In a discussion that followed, Daniel Vainsencher proposed that we should have tests for Text and TextStreams. This class is an attempt to implement that proposal. For Squeak 3.4, some of the test examples fail.! !TextAndTextStreamTest methodsFor: 'examples' stamp: 'BG 6/10/2003 20:17' prior: 52513484! example1: size | ts text | ts := TextStream on: (Text new: size). ts nextPutAll: 'xxxxx' asText. ts nextPutAll: ('yyyyy' asText allBold, 'zzzzzzz' asText). text := ts contents. ^text ! ! !TextAndTextStreamTest methodsFor: 'examples' stamp: 'BG 6/10/2003 20:26' prior: 52513765! example2 | ts text | ts := TextStream on: (Text new: 50). ts nextPutAll: 'abc' asText. ts nextPutAll: 'def' asText allBold. ts nextPutAll: 'ghijk' asText. text := ts contents. ^text ! ! !TextAndTextStreamTest methodsFor: 'examples' stamp: 'BG 6/11/2003 13:09' prior: 52514050! replacementAtStartExample3 | text1 replacement length | text1 := 'This is a simple text' copy asText. " without the copy, we would modify a constant that the compiler attached at the compiled method. " length := 'This' size. replacement := 'Tht' asText. text1 replaceFrom: 1 to: length with: replacement startingAt: 1. ! ! !TextAndTextStreamTest methodsFor: 'examples' stamp: 'BG 6/11/2003 13:05' prior: 52514501! replacementExample3 " for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement Here, the replacement text is shorteer than the text that is shall replace. " | text1 string replacement startPos length startPosInRep string2 | text1 := (string := 'This is again simple text' copy) asText. " without the copy, we would modify a constant that the compiler attached at the compiled method. " startPos := string findString: 'simple'. length := 'simple' size. replacement := (string2 := 'both simple and short') asText. startPosInRep := string2 findString: 'short'. text1 replaceFrom: startPos to: startPos + length - 1 with: replacement startingAt: startPosInRep. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:45' prior: 52516737! testAddStringToTextStream "It is possible to add a string into a TextStream. This test verifies that the created text has text attributes for all its characters. " | ts text | ts := TextStream on: (Text new: 50). ts nextPutAll: 'abc' asText. ts nextPutAll: 'def' asText allBold. ts nextPutAll: 'ghijk'. text := ts contents. " now, check the fundamental invariant of a text: " self assert: text string size = text runs size. ! ! !TextAndTextStreamTest methodsFor: 'test-errors' stamp: 'nice 2/24/2012 00:57' prior: 52515433! testAddingAttributesBeforeBeg | aText | aText := 'foo' asText. self should: [aText addAttribute: TextColor red from: 0 to: aText size] raise: Error.! ! !TextAndTextStreamTest methodsFor: 'test-errors' stamp: 'nice 2/24/2012 00:52' prior: 52515669! testAddingAttributesPastTheEnd | aText | aText := 'foo' asText. self should: [aText addAttribute: TextColor red from: 2 to: aText size + 1] raise: Error.! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:40' prior: 52517253! testExampleText1 "self run: #testExampleText1" "inspired by a bug report from Tim Olson. Text attributes are lost when the stream collection is expanded. Documented BUG!!!!!!" | text1 text2 atts1 atts2 | text1 := self example1: 10. " here we will loose the attribute bold " text2 := self example1: 50. " here we have a larger buffer and will not loose text attributes " atts1 := text1 runs copyFrom: 6 to: 10. atts2 := text2 runs copyFrom: 6 to: 10. self assert: atts1 = atts2. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:40' prior: 52517830! testExampleText2 "a Text looses its attributes when it is reversed " | text1 text2 | text1 := self example2. text2 := text1 reversed reversed. self assert: text1 runs = text2 runs. ! ! !TextAndTextStreamTest methodsFor: 'test-errors' stamp: 'nice 2/24/2012 00:57' prior: 52515910! testRemovingAttributesBeforeBeg | aText | aText := Text string: 'foo' attribute: TextColor red . self should: [aText removeAttribute: TextColor red from: 0 to: aText size] raise: Error.! ! !TextAndTextStreamTest methodsFor: 'test-errors' stamp: 'nice 2/24/2012 00:54' prior: 52516183! testRemovingAttributesPastTheEnd | aText | aText := Text string: 'foo' attribute: TextColor red . self should: [aText addAttribute: TextColor red from: 2 to: aText size + 1] raise: Error.! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'PavelKrivanek 11/24/2011 11:09' prior: 52518109! testRunArrayAdjacentMerge "this demonstrates that adjancent runs with equal attributes are merged. " | runArray | runArray := RunArray new. runArray add: TextEmphasis normal withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5. self assert: (runArray runs size = 2). ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'PavelKrivanek 11/24/2011 11:09' prior: 52518530! testRunArrayInvariant "this verifies that the fundamental invariant of a RunArray is always satisfied. " "see comment below" | runArray | runArray := RunArray new. runArray add: TextEmphasis normal withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5; add: TextEmphasis normal withOccurrences: 5. self assert: ((1 to: runArray size) allSatisfy: [:idx | | lastIndex lastOffset lastRun lengthOfPreviousRuns | runArray at: idx. " updates the cached values " lastIndex := runArray instVarNamed: 'lastIndex'. lastRun := runArray instVarNamed: 'lastRun'. lastOffset := runArray instVarNamed: 'lastOffset'. lengthOfPreviousRuns := (1 to: lastRun - 1) inject: 0 into: [:sum :idx2 | sum + (runArray runs at: idx2)]. lastIndex = (lastOffset + lengthOfPreviousRuns + 1) ] ). " This method is a bit tricky. First, it uses Object>>instVarNamed: to access instance variables for which no accessors are defined. The same method is used by the debuggers and by various inspectors. The assertion itself explains the meaning of the cached values."! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'PavelKrivanek 11/24/2011 11:10' prior: 52519867! testRunArrayReversal "this tests the reversal of a RunArray " | runArray | runArray := RunArray new. runArray add: TextEmphasis normal withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5; add: TextEmphasis normal withOccurrences: 5. self assert: (runArray reversed runs size = 3). ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'PavelKrivanek 11/24/2011 11:10' prior: 52520263! testRunArrayRunsAreNotMerged " this demonstrates that different runs are not merged " | runArray | runArray := RunArray new. runArray add: TextEmphasis normal withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5; add: TextEmphasis normal withOccurrences: 5. self assert: (runArray runs size = 3). ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'PavelKrivanek 11/24/2011 11:10' prior: 52520671! testRunArrayRunsSize "this demonstrates that the size of a run array is the sum of the sizes of its runs. " | runArray | runArray := RunArray new. runArray add: TextEmphasis normal withOccurrences: 5; add: TextEmphasis bold withOccurrences: 5; add: TextEmphasis normal withOccurrences: 5. self assert: (runArray size = 15). ! ! !TextAndTextStreamTest methodsFor: 'test-errors' stamp: 'nice 2/24/2012 01:00' prior: 52516458! testSettingRunsOfWrongSize | aText newRuns | aText := 'foo' asText. newRuns := aText runs copyReplaceFrom: 2 to: 1 with: (Array with: TextColor red). self should: [aText runs: newRuns] raise: Error.! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:49' prior: 52521087! testTextEmphasisRangeDetection1 "this tests the detection of the range of a text attribute. " | text startPos boldStyle | text := 'This is a text with attriute bold for some characters' asText. startPos := text findString: 'bold' startingAt: 1. text addAttribute: TextEmphasis bold from: startPos to: startPos + 3. boldStyle := TextEmphasis bold. " uncomment the following statement for examine failures: " " ----------------- (1 to: text size) do: [:idx | | range | range := text rangeOf: boldStyle startingAt: idx. Transcript show: startPos; show: ' -- '; show: idx printString; show: ' '; show: range printString; show: range size printString; show: ((idx between: startPos and: startPos + 3) ifTrue: [range first = startPos & (range size = 4)] ifFalse: [range first = idx & (range size = 0)]) printString; cr. ]. ------------- " self assert: ((1 to: text size) allSatisfy: [:idx | | range | range := text rangeOf: boldStyle startingAt: idx. (idx between: startPos and: startPos + 3) ifTrue: [range first = startPos & (range size = 4)] ifFalse: [range first = idx & (range size = 0)]])! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:51' prior: 52522426! testTextEmphasisRangeDetection2 "this tests the detection of the range of a text attribute. Here the searched attribute spans three runs. The objective of the test is whether the entire range is always found." | text startPos searchedStyle | text := 'This is a text with attriute bold for some characters' asText. startPos := text findString: 'bold' startingAt: 1. text addAttribute: TextEmphasis bold from: startPos to: startPos + 3. text addAttribute: TextEmphasis italic from: startPos - 2 to: startPos + 5. searchedStyle := TextEmphasis italic. " uncomment the following statement for examine failures: " " ----------------------- (1 to: text size) do: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. Transcript show: startPos; show: ' -- '; show: idx printString; show: ' '; show: range printString; show: range size printString; show: ((idx between: startPos - 2 and: startPos -2 + 7) ifTrue: [range first = (startPos - 2) & (range size = 8)] ifFalse: [range first = idx & (range size = 0)]) printString; cr. ]. ----------------------- " self assert: ((1 to: text size) allSatisfy: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. (idx between: startPos - 2 and: startPos -2 + 7) ifTrue: [range first = (startPos - 2) & (range size = 8)] ifFalse: [range first = idx & (range size = 0)]])! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:53' prior: 52524025! testTextEmphasisRangeDetection3 "this tests the detection of the range of a text attribute. Here the searched attribute spans three runs. The the range to be detected begins at text position 1. The objective of the test is whether the entire range is always found." | text startPos searchedStyle | text := 'This is a text with attriute bold for some characters' asText. startPos := text findString: 'bold' startingAt: 1. text addAttribute: TextEmphasis bold from: startPos to: startPos + 3. text addAttribute: TextEmphasis italic from: 1 to: startPos + 5. searchedStyle := TextEmphasis italic. " uncomment the following statement to examine failures: " " ----------------------- (1 to: text size) do: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. Transcript show: startPos; show: ' -- '; show: idx printString; show: ' '; show: range printString; show: range size printString; show: ' '; show: ((idx between: 1 and: startPos + 5) ifTrue: [range first = 1 & (range size = (startPos + 5))] ifFalse: [range first = idx & (range size = 0)]) printString; cr. ]. ----------------------- " self assert: ((1 to: text size) allSatisfy: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. (idx between: 1 and: startPos + 5) ifTrue: [range first = 1 & (range size = (startPos + 5))] ifFalse: [range first = idx & (range size = 0)]])! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:55' prior: 52525819! testTextEmphasisRangeDetection4 "this tests the detection of the range of a text attribute. Here the searched attribute spans three runs. The the range to be detected extends to the end of the text . The objective of the test is whether the entire range is always found." | text startPos searchedStyle | text := 'This is a text with attriute bold for some characters' asText. startPos := text findString: 'bold' startingAt: 1. text addAttribute: TextEmphasis bold from: startPos to: startPos + 3. text addAttribute: TextEmphasis italic from: startPos - 2 to: text size. searchedStyle := TextEmphasis italic. " uncomment the following statement to examine failures: " " ----------------------------------------- (1 to: text size) do: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. Transcript show: startPos; show: ' -- '; show: idx printString; show: ' '; show: range printString; show: range size printString; show: ' '; show: ((idx between: startPos - 2 and: text size) ifTrue: [range first = (startPos - 2) & (range size = (text size - (startPos - 2) + 1))] ifFalse: [range first = idx & (range size = 0)]) printString; cr. ]. -------------------------------" self assert: ((1 to: text size) allSatisfy: [:idx | | range | range := text rangeOf: searchedStyle startingAt: idx. (idx between: startPos - 2 and: text size) ifTrue: [range first = (startPos - 2) & (range size = (text size - (startPos - 2) + 1))] ifFalse: [range first = idx & (range size = 0)]])! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:56' prior: 52527690! testTextReplacement1 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement " | text1 string replacement startPos length startPosInRep string2 | text1 := (string := 'This is a simple text' copy) asText. "without the copy, we would modify a constant that the compiler attached at the compiled method. " startPos := string findString: 'simple'. length := 'simple' size. replacement := (string2 := 'both simple and short*') asText. startPosInRep := string2 findString: 'short'. text1 replaceFrom: startPos to: startPos + length - 1 with: replacement startingAt: startPosInRep. self assert: text1 string size = text1 runs size. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:57' prior: 52528571! testTextReplacement2 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement. Here, the replacement text has trailing characters. " | text1 string replacement startPos length startPosInRep string2 | text1 := (string := 'This is simple text' copy) asText. "without the copy, we would modify a constant that the compiler attached at the compiled method. " startPos := string findString: 'simple'. length := 'simple' size. replacement := (string2 := 'both simple and short*************') asText. startPosInRep := string2 findString: 'short'. text1 replaceFrom: startPos to: startPos + length - 1 with: replacement startingAt: startPosInRep. self assert: text1 string size = text1 runs size. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:58' prior: 52529508! testTextReplacement3 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement Here, the replacement text is shorteer than the text that is shall replace. " self should: [self replacementExample3] raise: Error! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:59' prior: 52529912! testTextReplacementAtStartPos1 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement " | text1 replacement length | text1 := 'This is a simple text' copy asText. "without the copy, we would modify a constant that the compiler attached at the compiled method. " length := 'This' size. replacement := 'That' asText. text1 replaceFrom: 1 to: length with: replacement startingAt: 1. self assert: text1 string size = text1 runs size. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:00' prior: 52530582! testTextReplacementAtStartPos2 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement " | text1 replacement length | text1 := 'This is a simple text' copy asText. "without the copy, we would modify a constant that the compiler attached at the compiled method. " length := 'This' size. replacement := 'That********' asText. text1 replaceFrom: 1 to: length with: replacement startingAt: 1. self assert: text1 string size = text1 runs size. ! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:00' prior: 52531262! testTextReplacementAtStartPos3 "for a Text t, the following assertion should always hold: t string size = t run size This test examines the preservation of this assertion for in-place replacement Here, the replacement text is shorteer than the text that is shall replace. " self should: [self replacementAtStartExample3] raise: Error! ! !TextAndTextStreamTest methodsFor: 'tests' stamp: 'sd 6/5/2005 09:44' prior: 52531682! testTextStreamAdjacentRunsWithIdentitcalAttributes "This test verifies that adjacent runs with identical attributes are coalesced." | ts text rangeOfBold | ts := TextStream on: (Text new: 50). ts nextPutAll: 'abc' asText. ts nextPutAll: 'def' asText allBold. ts nextPutAll: 'ghijk'. text := ts contents. rangeOfBold := text find: TextEmphasis bold. text removeAttribute: TextEmphasis bold from: rangeOfBold first to: rangeOfBold last. "now, check that only one run is left and that it has the correct size " self assert: text runs runs size = 1 & (text runs size = text string size). ! ! !TextLineEndingsTest commentStamp: 'nk 11/1/2003 07:55' prior: 38779575! This is a test case for Text>>withSqueakLineEndings and String>>withSqueakLineEndings. The main problem we've seen with the Text version is that it doesn't preserve formatting correctly.! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:06' prior: 52732144! testDecoratedTextConversionCrLF | text newText | text := ('123456', String crlf, '901234') asText. text addAttribute: TextColor blue from: 4 to: 10. text addAttribute: TextColor red from: 6 to: 9. text addAttribute: TextEmphasis bold. newText := text withSqueakLineEndings. self assert: ((text size - 1) = newText size). self assert: (newText size = newText runs size). self assert: (newText attributesAt: 6) = (text attributesAt: 6). self assert: (newText attributesAt: 8) = (text attributesAt: 9).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:06' prior: 52732728! testDecoratedTextConversionJustLF | text newText | text := ('123456', String lf, '901234') asText. text addAttribute: TextColor blue from: 4 to: 10. text addAttribute: TextColor red from: 6 to: 9. text addAttribute: TextEmphasis bold. newText := text withSqueakLineEndings. self assert: ((text size) = newText size). self assert: (newText size = newText runs size). self assert: (newText attributesAt: 6) = (text attributesAt: 6). self assert: (newText attributesAt: 8) = (text attributesAt: 8).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52733308! testDecoratedTextConversionNoLF | text newText | text := ('123456', String cr, '901234') asText. text addAttribute: TextColor blue from: 4 to: 10. text addAttribute: TextColor red from: 6 to: 9. text addAttribute: TextEmphasis bold. newText := text withSqueakLineEndings. self assert: ((text size) = newText size). self assert: (newText size = newText runs size). self assert: (newText attributesAt: 6) = (text attributesAt: 6). self assert: (newText attributesAt: 8) = (text attributesAt: 8).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52733886! testSimpleTextConversionCrLF | string newText | string := 'This is a test', String crlf, 'of the conversion'. newText := string asText withSqueakLineEndings. self assert: ((string size - 1) = newText size). self assert: (newText size = newText runs size).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52734221! testSimpleTextConversionJustCR | string newText | string := 'This is a test', String cr, 'of the conversion'. newText := string asText withSqueakLineEndings. self assert: ((string size) = newText size). self assert: (newText size = newText runs size).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52734552! testSimpleTextConversionJustLF | string newText | string := 'This is a test', String lf, 'of the conversion'. newText := string asText withSqueakLineEndings. self assert: ((string size) = newText size). self assert: (newText size = newText runs size).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52734883! testStringConversionCrLF | string newString | string := 'This is a test', String crlf, 'of the conversion'. newString := string withSqueakLineEndings. self assert: ((string size - 1) = newString size).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52735163! testStringConversionJustLF | string newString | string := 'This is a test', String lf, 'of the conversion'. newString := string withSqueakLineEndings. self assert: (string size = newString size).! ! !TextLineEndingsTest methodsFor: 'tests' stamp: 'sd 6/5/2005 10:07' prior: 52735437! testStringConversionNoLF | string newString | string := 'This is a test', String cr, 'of the conversion'. newString := string withSqueakLineEndings. self assert: (string = newString).! ! "Text"! "Text-Tests"! "TextTests"! ----End fileIn----! ----QUIT----an Array(21 May 2013 11:09:55 am) Pharo.image priorSource: 5214002! ----STARTUP----an Array(21 May 2013 11:16:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 May 2013 11:16:55 am) Pharo-30150.image priorSource: 5258840! ----STARTUP----an Array(21 May 2013 2:05:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/21/2013 13:59' prior: 38768736! commentForCurrentUpdate ^ '5562 rename Morphic package to Morphic-Base https://pharo.fogbugz.com/f/cases/5562 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/21/2013 13:59'! script248 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.80.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-MarcusDenker.1438.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.836.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/21/2013 14:00'! update30151 "self new update30151" self withUpdateLog: '5562 rename Morphic package to Morphic-Base https://pharo.fogbugz.com/f/cases/5562 '. self loadTogether: self script248 merge: false. (RPackageSet named: 'Morphic') packages do: [ :each | RPackageOrganizer default renamePackage: each in: 'MorphicBase', (each name allButFirst: 7) ]. (RPackageSet named: 'MorphicBase') packages do: [ :each | RPackageOrganizer default renamePackage: each in: 'Morphic-Base', (each name allButFirst: 11) ]. MCWorkingCopy forPackage: (MCPackage named: 'Morphic-Base'). PackageInfo named: 'Morphic-Base'. "This is soooo wrong, but needed for the reconstruction :)" ScriptLoader new unregisterPackage: 'Morphic'. RPackageOrganizer initialize. self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(21 May 2013 2:06:48 pm) Pharo.image priorSource: 5259038! ----STARTUP----an Array(21 May 2013 2:13:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 May 2013 2:13:45 pm) Pharo-30151.image priorSource: 5270036! ----STARTUP----an Array(21 May 2013 4:47:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/21/2013 15:42' prior: 38813772! commentForCurrentUpdate ^ '10478 Add Symbol >> #asClass https://pharo.fogbugz.com/f/cases/10478 10705 Safer NativeBoost usage https://pharo.fogbugz.com/f/cases/10705 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/21/2013 15:42'! script249 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1456.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.839.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/21/2013 15:43'! update30152 "self new update30152" self withUpdateLog: '10478 Add Symbol >> #asClass https://pharo.fogbugz.com/f/cases/10478 10705 Safer NativeBoost usage https://pharo.fogbugz.com/f/cases/10705 '. self loadTogether: self script249 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SymbolTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:34'! testAsClass self assert: #Symbol asClass equals: Symbol! ! !SymbolTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:56'! testAsClassIfAbsent self assert: (#Symbol asClassIfAbsent: [ self fail ]) equals: Symbol. #+ asClassIfAbsent: [ ^ self "success" ]. self fail.! ! !SymbolTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:57'! testAsClassIfPresent #Symbol asClassIfPresent: [ :class | self assert: class equals: Symbol ]. #'+' asClassIfPresent: [ ^ self fail ].! ! !String methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:13'! asClass "returns a global class with my name" ^ self asClassInEnvironment: Smalltalk globals! ! !String methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:24'! asClassIfAbsent: absentBlock "returns a global class with my name" ^ self asClassInEnvironment: Smalltalk globals ifAbsent: absentBlock! ! !String methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 12:03'! asClassIfPresent: presentBlock "returns a global class with my name" ^ presentBlock cull: (self asClassIfAbsent: [ ^ nil ])! ! !String methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:16'! asClassInEnvironment: anEnvironment "I return class named after myself from anEnvironment" ^ self asClassInEnvironment: anEnvironment ifAbsent: [ NotFound signalFor: self in: anEnvironment ]! ! !String methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:23'! asClassInEnvironment: anEnvironment ifAbsent: absentBlock ^ anEnvironment at: self asSymbol ifPresent: [ :aClass| self assert: aClass isBehavior description: [ self printString, ' is not a Class but an instance of a ', aClass class name ]. aClass ] ifAbsent: absentBlock ! ! !StringTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:34'! testAsClass self assert: 'String' asClass equals: String! ! !StringTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:36'! testAsClassIfAbsent self assert: ('String' asClassIfAbsent: [ self fail ]) equals: String. '+' asClassIfAbsent: [ ^ self "success" ]. self fail.! ! !StringTest methodsFor: '*System-Support' stamp: 'CamilloBruni 5/8/2013 11:56'! testAsClassIfPresent 'String' asClassIfPresent: [ :class | self assert: class equals: String ]. '+' asClassIfPresent: [ ^ self fail ].! ! !UnixResolver methodsFor: 'helpers' stamp: 'EstebanLorenzano 5/21/2013 15:42' prior: 34588399! nbGetEnv: str #NativeBoost asClassIfPresent: [ ^ self privNbGetEnv: str ]. ^ nil! ! !UnixResolver methodsFor: 'private' stamp: 'PavelKrivanek 5/21/2013 14:04'! privNbGetEnv: str "This method calls a Standard C library getenv() function" ^ self nbCall: #(#String #getenv #(#String #str)) module: NativeBoost CLibrary! ! !Beeper class methodsFor: 'beeping' stamp: 'CamilloBruni 5/8/2013 11:42' prior: 18001696! beepPrimitive "Make a primitive beep. Only use this if you want to force this to be a primitive beep. Otherwise use Beeper class>>beep since this method bypasses the current registered playable entity." (#SoundService asClassIfAbsent: [ ^ self primitiveBeep ]) soundEnabled ifTrue: [self primitiveBeep]! ! !Beeper methodsFor: 'play interface' stamp: 'CamilloBruni 5/8/2013 11:41' prior: 18000884! play "This is how the default Beeper makes a beep, by sending beep to the default sound service. The sound system will check if sounds are enabled." (#SoundService asClassIfAbsent: [ ^ self ]) default new beep! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 5/8/2013 11:59' prior: 36415019! fullName: aString fullName := aString. #UserManager asClassIfPresent: [:usersManager | usersManager default currentUser setUserName: aString forGroup: #author ].! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 5/8/2013 12:00' prior: 36415292! fullNamePerSe "Answer the currently-prevailing author full name, such as it is, empty or not" #UserManager asClassIfPresent: [:usersManager | ^ usersManager default currentUser userNameFor: #author ]. ^ fullName! ! "FileSystem-Core"! "System-Support"! ----End fileIn----! ----QUIT----an Array(21 May 2013 4:47:55 pm) Pharo.image priorSource: 5270232! ----STARTUP----an Array(21 May 2013 4:54:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 May 2013 4:54:57 pm) Pharo-30152.image priorSource: 5285082! ----STARTUP----an Array(21 May 2013 5:45:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/21/2013 17:43' prior: 38824965! commentForCurrentUpdate ^ '10712 safer use of RPackage in ClassDescription>>#addAndClassifySelector:withMethod:inProtocol:notifying: https://pharo.fogbugz.com/f/cases/10712 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/21/2013 17:43'! script250 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.314.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-EstebanLorenzano.1459.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.103.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.839.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/21/2013 17:43'! update30153 "self new update30153" self withUpdateLog: '10712 safer use of RPackage in ClassDescription>>#addAndClassifySelector:withMethod:inProtocol:notifying: https://pharo.fogbugz.com/f/cases/10712 '. self loadTogether: self script250 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 5/21/2013 17:41' prior: 19203219! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" newProtocol = oldProtocol ifFalse: [ | oldPackage newPackage | "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. (newPackage = oldPackage) ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. "Announce recategorization" SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self ]. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor.]. ! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(21 May 2013 5:45:54 pm) Pharo.image priorSource: 5285278! ----STARTUP----an Array(21 May 2013 5:52:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 May 2013 5:52:59 pm) Pharo-30153.image priorSource: 5297854! ----STARTUP----an Array(22 May 2013 10:20:45 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(22 May 2013 10:20:50 am) Pharo.image priorSource: 5298050! ----STARTUP----an Array(22 May 2013 10:27:39 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 10:27:39 am) Pharo-30153.image priorSource: 5298257! ----STARTUP----an Array(22 May 2013 11:21:44 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 11:20' prior: 38840011! commentForCurrentUpdate ^ '10678 Failing Regressiontest: FLSortedCollectionSerializationTest https://pharo.fogbugz.com/f/cases/10678 10713 verbose error log in privSaveImageWithCleanup https://pharo.fogbugz.com/f/cases/10713 10692 BasicCodeLoader and a subclass directly references ParserNotification https://pharo.fogbugz.com/f/cases/10692/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 11:20'! script251 ^ 'AST-Core-MarcusDenker.154.mcz AST-Interpreter-Core-MarcusDenker.90.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.28.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.465.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-EstebanLorenzano.1459.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.287.mcz OpalCompiler-Tests-MarcusDenker.144.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 11:20'! update30154 "self new update30154" self withUpdateLog: '10678 Failing Regressiontest: FLSortedCollectionSerializationTest https://pharo.fogbugz.com/f/cases/10678 10713 verbose error log in privSaveImageWithCleanup https://pharo.fogbugz.com/f/cases/10713 10692 BasicCodeLoader and a subclass directly references ParserNotification https://pharo.fogbugz.com/f/cases/10692/ '. self loadTogether: self script251 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BasicCodeLoader methodsFor: 'installing' stamp: 'MarcusDenker 5/21/2013 16:31' prior: 17991591! handleErrorsDuring: aBlock reference: aReference | exceptionClassToUse | "workaround to make old Compiler unloadable" exceptionClassToUse := (Smalltalk compilerClass == OpalCompiler) ifTrue: [OCSemanticWarning] ifFalse: [Smalltalk globals at: #ParserNotification]. aBlock on: Error, exceptionClassToUse do: [ :e| self handleError: e reference: aReference ]. ! ! !FLSortedCollectionSerializationTest class methodsFor: 'sorted collections for testing' stamp: 'MarcusDenker 5/21/2013 15:21' prior: 21678322! sortedCollectionForTestingWithClassVariable. ^ SortedCollection sortBlock: [:a :b | ClassVariableForTesting ifTrue: [ a <= b ] ifFalse: [ a >= b ] ]. ! ! !FLSortedCollectionSerializationTest methodsFor: 'tests' stamp: 'MarcusDenker 5/21/2013 15:20' prior: 21674177! testSortedCollectionWithClassVariableChanges "Tests serialization of a SortedCollection whose sortBlock has a reference to a class variable and its value is changed. See also FLBlockClosureSerializationTest >> testBlockClosureWithClassVariableChanges and FLCompiledMethodSerializationTest >> testMethodChangingClassVariable" | aSortedCollection materialized mmethod index | ClassVariableForTesting := false. aSortedCollection := self class sortedCollectionForTestingWithClassVariable. materialized := self resultOfSerializeAndMaterialize: aSortedCollection. "the class variable ClassVariableForTesting should be false" mmethod := materialized sortBlock outerContext method. index := mmethod literals indexOf: (self class bindingOf: #ClassVariableForTesting). self deny: (mmethod literalAt: index) value. ClassVariableForTesting := true. "the class variable ClassVariableForTesting should be true" self assert: (mmethod literalAt: index) value. ! ! !EvaluateCommandLineHandler methodsFor: 'commands' stamp: 'MarcusDenker 5/21/2013 16:31' prior: 38468181! evaluate: aStream | result exceptionClassToUse | "workaround to make old Compiler unloadable" exceptionClassToUse := (Smalltalk compilerClass == OpalCompiler) ifTrue: [OCSemanticWarning] ifFalse: [Smalltalk globals at: #ParserNotification]. [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] on: Error, ParserNotification do: [ :error | self handleError: error ].! ! !SmalltalkImage methodsFor: 'private' stamp: 'PavelKrivanek 5/21/2013 17:31' prior: 50367386! privSaveImageWithCleanup " Do not use this method for common image saving. This method is designated for saving the image during the shrinking process in headless images." (Delay forMilliseconds: 1000) wait. Processor yield. 13 "a magic number (Camillo) "timesRepeat: [ Smalltalk garbageCollect ]. [ self snapshot: true andQuit: true. ] ifError: [:e | | rep | rep := FileStream forceNewFileNamed: 'PharoDebug.log'. rep nextPutAll: 'PharoKernel shrinking report'; cr. rep nextPutAll: 'Error:'; cr. rep nextPutAll: e asString; cr. rep nextPutAll: thisContext stack size asString. thisContext stack copy withIndexDo: [:stck :i | [ rep nextPutAll: i asString; space; nextPutAll: stck asString; cr] ifError: []]. rep close. Smalltalk exitFailure ]! ! "FuelTests"! "System-CommandLine"! "System-Support"! ----End fileIn----! ----QUIT----an Array(22 May 2013 11:21:52 am) Pharo.image priorSource: 5298455! ----STARTUP----an Array(22 May 2013 11:28:46 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 11:28:46 am) Pharo-30154.image priorSource: 5312713! ----STARTUP----an Array(22 May 2013 2:45:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 14:42' prior: 38853186! commentForCurrentUpdate ^ '10610 Make ASTInterpreter use OC (Opal) bindings instead of RB bindings https://pharo.fogbugz.com/f/cases/10610 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 14:43'! script252 ^ 'AST-Core-MarcusDenker.156.mcz AST-Interpreter-Core-MarcusDenker.93.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.30.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.467.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.33.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-EstebanLorenzano.1459.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.86.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.29.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.118.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.468.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.302.mcz OpalCompiler-Tests-MarcusDenker.153.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.65.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.12.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.108.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1128.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 14:43'! update30155 "self new update30155" self withUpdateLog: '10610 Make ASTInterpreter use OC (Opal) bindings instead of RB bindings https://pharo.fogbugz.com/f/cases/10610 '. self loadTogether: self script252 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 38561347! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 38565677! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCShadowVariableWarning commentStamp: 'ajh 3/24/2003 22:21' prior: 34958593! I get signalled when a variable in a block or method scope shadows a variable of the same name in an outer scope. The default action is to allow it.! !OCUndeclaredVariableWarning commentStamp: '' prior: 34959771! I get signalled when a temporary variable is used that is not defined. My default action is to create an Undeclared binding and add it to the Undeclared dictionary.! !OCUninitializedVariableWarning commentStamp: 'ajh 3/24/2003 22:34' prior: 34965912! I get signalled when a temporary variable is used before it is assigned to. My default action is to allow it since all temps get initialized to nil.! !OCUnknownSelectorWarning commentStamp: 'ajh 3/24/2003 22:23' prior: 34966688! I get signalled when no selector is defined for a message send, indicating a possible mispelling. My default action is to create a new selector.! !OCUnusedVariableWarning commentStamp: 'ajh 3/24/2003 22:35' prior: 34967947! I get signalled when a temporary variable is declared but never used. My default action is to allow it since it is benign.! !OCSemanticError commentStamp: '' prior: 0! Raises a semantic error during semantic analysis, which is currently, only 'cannot store into'! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:28' prior: 35171062! testBlockTemps | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := (OpalCompiler new compile: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:28' prior: 35172153! testComplexMethodClassBuilder | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := (OpalCompiler new compile:'superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | oldClassOrNil actualType | (aClass instSize > 0) ifTrue: [^self error: ''cannot make a byte subclass of a class with named fields'']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: ''cannot make a byte subclass of a class with word fields'']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: ''cannot make a byte subclass of a class with pointer fields'']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat' in: ClassBuilder classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile:'superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | oldClassOrNil actualType | (aClass instSize > 0) ifTrue: [^self error: ''cannot make a byte subclass of a class with named fields'']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: ''cannot make a byte subclass of a class with word fields'']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: ''cannot make a byte subclass of a class with pointer fields'']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat' in: ClassBuilder classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:27' prior: 35174819! testNotUsedArgument | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := (OpalCompiler new compile: 'ascentOf: aCharacter ^ self ascent.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile: 'ascentOf: aCharacter ^ self ascent.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:27' prior: 35175827! testPragmas | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := (OpalCompiler new compile:'methodDoublePragma ' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile:'methodDoublePragma ' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. "AdditionalState assertions" self assert: newCompiledMethod literals first selector = originalCompiledMethod literals first selector. self assert: (newCompiledMethod literals first analogousCodeTo: originalCompiledMethod literals first). self assert: (newCompiledMethod literals first instVarNamed: 'method') = newCompiledMethod. self assert: newCompiledMethod literals second = originalCompiledMethod literals second. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:27' prior: 35177297! testPrimitive | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := (OpalCompiler new compile: 'size ^ self basicSize.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile: 'size ^ self basicSize.' in: OCMockCompilationClass classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 5/21/2013 11:27' prior: 35178327! testRemoteTempInVector | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. "Here the problem was that the Scope kept both the remote temp answer and the new remote this caused that the number of temps were more than the correnct" newCompiledMethod := (OpalCompiler new compile: 'value | answer | self do: [:each | answer := each value]. ^answer' in: Object classified: nil notifying: nil ifFail: []) generate. originalCompiledMethod := ((Smalltalk classNamed: #Compiler) new compile: 'value | answer | self do: [:each | answer := each value]. ^answer' in: Object classified: nil notifying: nil ifFail: []) generate. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OpalCompiler class methodsFor: 'setting' stamp: 'MarcusDenker 5/18/2013 16:37' prior: 35997375! allowNonBooleanReceivers ^AllowNonBooleanReceivers ifNil: [ AllowNonBooleanReceivers := false]! ! !OpalCompiler class methodsFor: 'setting' stamp: 'MarcusDenker 5/18/2013 16:38' prior: 35997572! allowNonBooleanReceivers: aBoolean AllowNonBooleanReceivers := aBoolean ! ! !OpalCompiler class methodsFor: 'old - public' stamp: 'MarcusDenker 5/18/2013 16:42' prior: 36528805! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self! ! !OpalCompiler class methodsFor: 'options' stamp: 'md 5/17/2013 16:45' prior: 38314353! defaultOptions ^ #( "by default we inline all optimized constructs" + optInlineIf + optInlineIfNil + optInlineAndOr + optInlineWhile + optInlineToDo + optInlineCase - optIlineNone "to turn off all. Overrides the others" - optLongIvarAccessBytecodes "special for Contexts" + optOptimizeIR "disabled for now" )! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 5/18/2013 16:33' prior: 37279085! decompileMethod: aCompiledMethod | sourceCode | sourceCode := aCompiledMethod getSourceFromFile. ^sourceCode ifNil: [Decompiler new decompile: aCompiledMethod selector in: aCompiledMethod methodClass method: aCompiledMethod ] ifNotNil: [self parse: sourceCode class: aCompiledMethod methodClass ]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/18/2013 16:30' prior: 38315177! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context isNil ifTrue: [ receiver class ] ifFalse: [ context method methodClass ]). self noPattern: true. selectedSource := ((compilationContext requestor respondsTo: #selection) and: [ (itsSelection := compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := compilationContext interactive ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !ASTCache methodsFor: 'accessing' stamp: 'GuillermoPolito 5/14/2013 10:52' prior: 17162175! at: aCompiledMethod ^ self at: aCompiledMethod ifAbsentPut: [ aCompiledMethod parseTree doSemanticAnalysisIn: aCompiledMethod methodClass ]! ! !OCScannerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/19/2013 16:42'! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" self shouldnt: ['1@-1' parseLiterals] raise: Error. self assert: ('1@-1' parseLiterals at: 2) asString = '@-'! ! !OCScannerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/19/2013 16:45'! testLiteralSymbols ((((32 to: 126) collect: [:ascii | Character value: ascii])) copyWithout: $`) , "backtick is not suppored by OBParser" #(':x:yourself' '::' 'x:yourself' '123' 'x0:1:2:' 'x.y.z' '1abc' 'a1b0c2' ' x' 'x ' '+x-y' '||' '--' '++' '+-' '+/-' '-/+' '<|>' '#x' '()' '[]' '{}' '') do: [:str | self assert: (self class compiler evaluate: str asSymbol printString) = str asSymbol description: 'in all case, a Symbol must be printed in an interpretable fashion']! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 5/18/2013 16:30' prior: 34808341! addLastLiteral: object lastLiteral ifNil: [ ^ lastLiteral := object ]. ((lastLiteral literalEqual: object) or: [ "case of metaclass, they have no unique association" (lastLiteral isKindOf: Association) and: [ lastLiteral key isNil ] ]) ifFalse: [ self error: 'there can only be one last literal' ]! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'MarcusDenker 5/18/2013 16:30' prior: 34825549! returnConstant: constant bytes ifEmpty: [ lastSpecialReturn := Message selector: #returnConstant: argument: constant ]. constant == true ifTrue: [ ^ self nextPut: (Bytecodes at: #returnTrue) ]. constant == false ifTrue: [ ^ self nextPut: (Bytecodes at: #returnFalse) ]. constant isNil ifTrue: [ ^ self nextPut: (Bytecodes at: #returnNil) ]. self pushLiteral: constant. self returnTop! ! !IRBuilder methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 17:37'! compilationContext ^ir compilationContext ! ! !IRBuilder methodsFor: 'accessing' stamp: 'MarcusDenker 5/14/2013 17:10' prior: 38317364! irPrimitive: primNode ir irPrimitive: primNode! ! !IRSequence methodsFor: 'optimizing' stamp: 'md 5/17/2013 16:50' prior: 34887525! absorbConstantConditionalJumps: alreadySeen "Collapse sequences that look like: [if] goto s1 ... s1: pushConst: true/false goto s2 s2: if true/false goto s3 else s4 into: [if] goto s3/s4 These sequences are produced by and:/or: messages" | seq bool if | (alreadySeen includes: self) ifTrue: [^ self]. alreadySeen add: self. [(seq := self successorSequences) notEmpty "not return" and: [(seq := seq first "destination") size = 2 and: [(seq first isLiteral: [:obj | (bool := obj) isKindOf: Boolean]) and: [seq last isGoto and: [(if := seq last destination first) isIf]]]] ] whileTrue: [ "absorb" self last destination: (bool == if boolean ifTrue: [if destination] ifFalse: [if otherwise]). ]. self successorSequences do: [:instrs | instrs ifNotNil: [:i | i absorbConstantConditionalJumps: alreadySeen]]. ! ! !IRSequence methodsFor: 'optimizing' stamp: 'md 5/17/2013 16:49' prior: 34888437! absorbJumpToSingleInstr: alreadySeen "Collapse jumps to single return instructions into caller" | seqs seq | (alreadySeen includes: self) ifTrue: [^ self]. alreadySeen add: self. [ (seqs := self successorSequences) size = 1 "unconditional jump..." and: [((seq := seqs first) size = 1) "...to single instruction..." and: [seq successorSequences size < 2 and: [self last isBlockReturnTop not and: [((seq sequence size = 1) and: [(seq sequence first isBlockReturnTop) or: [seq sequence first isReturn]]) not]]]]"...but don't collapse conditional jumps so their otherwiseSequences can stay right after them" ] whileTrue: [ "replace goto with single instruction" self removeLast. seq do: [:instr | self add: instr copy]. ]. seqs do: [:instrs | instrs ifNotNil: [:i | i absorbJumpToSingleInstr: alreadySeen]]. ! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 5/18/2013 16:44' prior: 34902447! rejectRules ^ #('MissingYourselfRule' 'ClassInstVarNotInitializedRule' 'ExcessiveVariablesRule' 'SearchingLiteralRule' 'AbstractClassRule' 'UsesAddRule' 'LongMethodsRule' 'ExcessiveMethodsRule' 'ExcessiveArgumentsRule' 'IfTrueReturnsRule')! ! !OCASTTranslator methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 17:38'! compilationContext ^methodBuilder compilationContext ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 5/18/2013 17:41' prior: 34761341! emitMessageNode: aMessageNode aMessageNode isCascaded ifFalse: [ valueTranslator visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | valueTranslator visitNode: each]. aMessageNode isSuperSend ifTrue: [methodBuilder send: aMessageNode selector toSuperOf: self compilationContext getClass] ifFalse: [methodBuilder send: aMessageNode selector]. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36533698! visitArrayNode: anArrayNode | elementNodes | elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36534011! visitAssignmentNode: anAssignmentNode valueTranslator visitNode: anAssignmentNode value. anAssignmentNode variable ocBinding emitStore: methodBuilder ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36534282! visitBlockNode: aBlockNode | tempNames argumentNames copiedNames | aBlockNode arguments size >15 ifTrue: [self backendError: 'Too many arguments' forNode: aBlockNode ]. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. argumentNames := aBlockNode argumentNames asArray. tempNames := (aBlockNode scope tempVars asArray collect: [ :each | each name]) copyWithoutAll: argumentNames. copiedNames := (aBlockNode scope inComingCopiedVars asArray collect: [:each | each name]). methodBuilder pushClosureCopyCopiedValues: copiedNames args: argumentNames jumpTo: #block. aBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aBlockNode scope tempVectorName withVars: (aBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. effectTranslator visitNode: aBlockNode body. methodBuilder addBlockReturnTopIfRequired. self flag: 'why dont we just add a blockReturnTop here... it could be removed or ignored in IRTranslator'. methodBuilder jumpAheadTarget: #block. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36535490! visitCascadeNode: aCascadeNode valueTranslator visitNode: aCascadeNode receiver. aCascadeNode messages allButLastDo: [:node | methodBuilder pushDup. effectTranslator visitNode: node. ]. valueTranslator visitNode: aCascadeNode messages last. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36535858! visitInlinedBlockNode: anOptimizedBlockNode "We are visiting a scope that is not a block, but inlined in the outer context. This means: - we do not create a Block - we call IRBuilder to add temps " | argumentNames tempNames copiedNames | argumentNames := anOptimizedBlockNode argumentNames asArray. tempNames := (anOptimizedBlockNode scope tempVars collect: [ :each | each name asSymbol]) copyWithoutAll: argumentNames. copiedNames := (anOptimizedBlockNode scope inComingCopiedVars collect: [:each | each name]) asArray. anOptimizedBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: anOptimizedBlockNode scope tempVectorName withVars: (anOptimizedBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. methodBuilder addTemps: copiedNames. methodBuilder addTemps: argumentNames. anOptimizedBlockNode isInlinedLoop ifTrue: [ tempNames do: [ :tempName | methodBuilder pushLiteral: nil. methodBuilder storeTemp: tempName. methodBuilder popTop. ]]. self visitNode: anOptimizedBlockNode body.! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36537094! visitLiteralArrayNode: aRBLiteralArrayNode methodBuilder pushLiteral: aRBLiteralArrayNode value. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36537313! visitLiteralNode: aLiteralNode methodBuilder pushLiteral: aLiteralNode value. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36537510! visitMessageNode: aMessageNode aMessageNode isInlined ifTrue: [ methodBuilder addLiteral: aMessageNode selector. "so searching for senders will work" ^self perform: ('emit', aMessageNode selector asOneArgSelector capitalized) asSymbol with: aMessageNode]. ^ self emitMessageNode: aMessageNode! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 5/14/2013 17:10' prior: 38329518! visitMethodNode: aMethodNode methodBuilder compilationContext: aMethodNode compilationContext. methodBuilder addTemps: aMethodNode scope tempVarNames. methodBuilder properties: aMethodNode properties. methodBuilder irPrimitive: aMethodNode primitiveFromPragma. aMethodNode pragmas do: [:each | self visitPragmaNode: each]. methodBuilder numArgs: aMethodNode arguments size. aMethodNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aMethodNode scope tempVectorName withVars: (aMethodNode scope tempVector collect: [:each| each name]) asArray. ]. effectTranslator visitNode: aMethodNode body. aMethodNode body lastIsReturn ifFalse: [methodBuilder pushReceiver; returnTop]! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'JorgeRessia 5/6/2010 10:00' prior: 34771411! visitNode: aNode methodBuilder mapToNode: aNode. super visitNode: aNode. methodBuilder popMap. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 5/14/2013 16:32' prior: 38330354! visitPragmaNode: aPragmaNode methodBuilder addPragma: aPragmaNode asPragma. aPragmaNode isPrimitiveError ifTrue: [ methodBuilder storeTemp: aPragmaNode arguments last value]. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36539207! visitReturnNode: aReturnNode valueTranslator visitNode: aReturnNode value. methodBuilder returnTop. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36539431! visitSequenceNode: aSequenceNode | statements | statements := aSequenceNode statements. statements ifEmpty: [ aSequenceNode parent isBlock ifTrue:[ methodBuilder pushLiteral: nil]. ^self]. statements allButLastDo: [:each | effectTranslator visitNode: each]. (aSequenceNode parent isBlock ifTrue: [valueTranslator] ifFalse: [effectTranslator]) visitNode: statements last. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 36539933! visitVariableNode: aVariableNode aVariableNode ocBinding emitValue: methodBuilder ! ! !RBProgramNode methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:22'! method ^self parent method! ! !IRMethod methodsFor: 'optimizing' stamp: 'md 5/17/2013 17:17' prior: 38337320! optimize self removeEmptyStart. self compilationContext optOptimizeIR ifFalse: [^self]. self absorbJumpsToSingleInstrs. self absorbConstantConditionalJumps. self absorbJumpsToSingleInstrs! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 14:12'! scope | classScope | (class isNil and: [requestor isNil]) ifTrue: [ ^OCGlobalScope new ]. classScope := OCClassScope for: class. requestor ifNotNil: [ "the requestor is allowed to manage variables, the workspace is using it to auto-define vars" classScope := (OCRequestorScope new requestor: requestor) outerScope: classScope]. ^classScope ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/18/2013 17:07' prior: 38320540! doSemanticAnalysis OCASTSemanticAnalyzer new compilationContext: self compilationContext; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 5/21/2013 14:30' prior: 38320724! doSemanticAnalysisIn: behavior self methodClass: behavior. self doSemanticAnalysis! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/18/2013 17:08' prior: 38560209! doSemanticAnalysisInContext: aCompilationContext self compilationContext: aCompilationContext. self doSemanticAnalysis. ! ! !RBMethodNode methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:22'! method ^self! ! !OCASTCheckerTest methodsFor: 'tools' stamp: 'MarcusDenker 5/18/2013 10:13' prior: 38570728! nameAnalysisNoClosureIn: class for: ast "Look up vars in classOrScope. My tree will be annotated with bindings to Scopes and Variables." OCASTSemanticAnalyzer new compilationContext: class compiler compilationContext; visitNode: ast.! ! !RBSequenceNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/19/2013 16:00' prior: 34744595! transformLastToReturn | last | statements ifEmpty: [ ^self]. last := statements last. last isReturn ifFalse: [self replaceNode: last withNode: (RBReturnNode value: last )]! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'ClementBera 5/21/2013 10:46' prior: 38323796! isInlineIf self methodNode compilationContext optInlineIf ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ OCSemanticError new node: self; compilationContext: self methodNode compilationContext; messageText: 'ifTrue:ifFalse: takes zero-arg blocks -> '; signal. ^ false ] ]. ^ true! ! !OCRequestorScope methodsFor: 'lookup' stamp: 'MarcusDenker 5/21/2013 10:55'! lookupVar: name name first isUppercase ifTrue: [ ^outerScope lookupVar: name ]. (requestor bindingOf: name asSymbol) ifNotNilDo: [:assoc | ^ OCLiteralVariable new assoc: assoc; scope: self; yourself]. ^ super lookupVar: name. ! ! !OCRequestorScope methodsFor: 'lookup' stamp: 'MarcusDenker 5/18/2013 13:52'! newMethodScope ^ OCMethodScope new outerScope: (self outerScope: outerScope instanceScope) ! ! !OCRequestorScope methodsFor: 'accessing' stamp: 'MarcusDenker 4/11/2013 14:37'! requestor ^ requestor! ! !OCRequestorScope methodsFor: 'accessing' stamp: 'MarcusDenker 4/11/2013 14:37'! requestor: anObject requestor := anObject! ! !OCASTSemanticAnalyzer commentStamp: 'ajh 6/23/2004 19:43' prior: 38877875! I visit each node in the abstract syntax tree while growing and shrinking a SemScope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding ScopeVar. Exceptions are raised for undefined variable references and so on (see subclasses of SemanticWarning). ! !OCASTSemanticAnalyzer methodsFor: 'accessing' stamp: 'MarcusDenker 5/18/2013 10:23'! blockcounter ^blockcounter ifNil: [0]! ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 5/18/2013 10:32' prior: 35547371! lookupVariableForRead: aVariableNode | var | var := scope lookupVar: aVariableNode name. var ifNil: [^var]. (var isTemp and: [var scope outerNotOptimizedScope ~= scope outerNotOptimizedScope] ) "only escaping when they will end up in different closures" ifTrue: [var markEscapingRead]. ^var! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:26' prior: 38562130! storeIntoSpecialVariable: variableNode ^ OCSemanticError new node: variableNode; compilationContext: compilationContext; messageText: 'Cannot store into ->'; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:26' prior: 38562423! undeclaredVariable: variableNode ^ OCUndeclaredVariableWarning new node: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:26' prior: 38562683! uninitializedVariable: variableNode variableNode ocBinding markRead. ^ OCUninitializedVariableWarning new node: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:34' prior: 38562982! unknownSelector: messageNode ^ OCUnknownSelectorWarning new node: messageNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:26' prior: 38563233! unusedVariable: variableNode ^ OCUnusedVariableWarning new node: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/17/2013 16:26' prior: 38563485! variable: variableNode shadows: semVar ^ OCShadowVariableWarning new node: variableNode; shadowedVar: semVar; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/18/2013 10:23' prior: 35548908! visitBlockNode: aBlockNode blockcounter := self blockcounter + 1. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. scope := scope newBlockScope: blockcounter. aBlockNode scope: scope. scope node: aBlockNode. aBlockNode arguments do: [:node | (self declareVariableNode: node) markArg]. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/18/2013 10:23' prior: 35549384! visitInlinedBlockNode: aBlockNode scope := scope newOptimizedBlockScope: blockcounter. aBlockNode isInlinedLoop ifTrue: [scope markInlinedLoop]. aBlockNode scope: scope. scope node: aBlockNode. aBlockNode arguments do: [:node | (self declareVariableNode: node ) markArg.]. self visitNode: aBlockNode body. scope := scope popScope.! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/18/2013 10:44' prior: 38317516! visitMethodNode: aMethodNode scope := compilationContext scope newMethodScope. aMethodNode scope: scope. scope node: aMethodNode. aMethodNode arguments do: [:node | (self declareVariableNode: node) markArg]. aMethodNode pragmas do: [:each | self visitNode: each]. self visitNode: aMethodNode body. scope := scope outerScope. ! ! !OCCopyingTempVariable methodsFor: 'debugging' stamp: 'ClementBera 5/21/2013 14:52'! definingScope ^ originalVar scope ! ! !OCCopyingTempVariable methodsFor: 'accessing' stamp: 'ClementBera 5/21/2013 14:47'! originalVar ^ originalVar! ! !OCCopyingTempVariable methodsFor: 'accessing' stamp: 'ClementBera 5/21/2013 14:47'! originalVar: anObject originalVar := anObject! ! !OCTempVariable methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:52'! accept: anInterpeter assign: value inNode: aVariableNode self isArg ifTrue: [ self error: 'Arguments cannot be assigned'. ]. "If it is not an arg, it is a normal temporary" ^ anInterpeter write: value temporaryAt: -1 named: name! ! !OCTempVariable methodsFor: '*AST-Interpreter-Core' stamp: 'ClementBera 5/21/2013 14:50'! readWith: anInterpreter inNode: aVariableNode self isArg ifTrue: [ | definingScope argIndex | definingScope := aVariableNode variableBinding definingScope. 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! ! !OCInstanceScope methodsFor: 'initializing' stamp: 'MarcusDenker 5/18/2013 10:44' prior: 34918091! initialize vars := OCKeyedSet keyBlock: [:var | var name]. selfVar := OCSpecialVariable new name: 'self'; scope: self; yourself. superVar := OCSpecialVariable new name: 'super'; scope: self; yourself.! ! !RBVariableNode methodsFor: '*ast-semantic-accessing' stamp: 'GuillermoPolito 5/14/2013 12:11' prior: 31546655! variableBinding ^self ocBinding! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ClementBera 5/21/2013 14:52' prior: 37358162! addCopyingTemp: aTempVar ^ copiedVars add: (OCCopyingTempVariable new originalVar: aTempVar originalVar; name: aTempVar name; index: tempVars size; escaping: aTempVar escaping; usage: aTempVar usage; scope: self; yourself)! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ClementBera 5/21/2013 14:48' prior: 34906310! addCopyingTempNamed: name ^ copiedVars add: (OCCopyingTempVariable new name: name; index: tempVars size; scope: self; yourself)! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'MarcusDenker 5/18/2013 16:40'! outerNotOptimizedScope ^self! ! !ASTInterpreter methodsFor: 'interpretation' stamp: 'GuillermoPolito 5/14/2013 12:03' prior: 35492570! compile: aString | ast | ast := RBExplicitVariableParser parseExpression: aString. [ ast method doSemanticAnalysisIn: ProtoObject ] on: OCUndeclaredVariableWarning do: [ :e | self error: 'Undeclared variable', e variableNode name ]. ^ ast! ! !ASTInterpreter methodsFor: 'slots' stamp: 'ClementBera 5/21/2013 14:49' prior: 35499880! readArgumentAt: index node: aVariableNode | variableContext | variableContext := self context. [ variableContext code = aVariableNode variableBinding definingScope node ] whileFalse: [ variableContext := variableContext homeContext. self assert: variableContext isNil not ]. ^ variableContext arguments at: index! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/14/2013 11:06' prior: 35503412! visitAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable variableBinding accept: self assign: value inNode: variable. ^ value! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 5/14/2013 12:12' prior: 35506722! visitVariableNode: aVariableNode "there is still this hack with variable binding to make it work with Opal that I'd like to remove. cf deprecated RBVariableNode>>binding ^variableBinding" ^ aVariableNode variableBinding readWith: self inNode: aVariableNode! ! !OCCompilerTest methodsFor: 'literals' stamp: 'MarcusDenker 5/21/2013 07:43' prior: 38310887! testScaledDecimalLiterals "Equal ScaledDecimal with different scales should use different slots This is related to http://bugs.squeak.org/view.php?id=6797" "This correctly works when evaluated separately" self deny: (Smalltalk evaluate: '0.5s1') scale = (Compiler evaluate: '0.5s2') scale. "But not when evaluated together if literal reduction is too agressive" self deny: (Smalltalk evaluate: '0.5s1 scale = 0.5s2 scale').! ! !OCCompilerNotifyingTest methodsFor: 'testing-block arguments' stamp: 'MarcusDenker 5/22/2013 14:42' prior: 35543079! testifTrueBlockWithArgument self skip. self setUpForErrorsIn: 'true ifTrue: [:x` <- argument of ifTrue: has too many arguments ->` | 1 + 1 ]'. self enumerateAllSelections. self setUpForErrorsIn: 'true ifTrue: [:x` <- argument of ifTrue: has too many arguments ->` :y | 1 + 1 ]'. self enumerateAllSelections.! ! !OCASTTranslatorTest methodsFor: 'testing - blocks' stamp: 'ClementBera 5/21/2013 14:54' prior: 35076054! testExampleBlockExternal | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleBlockExternal) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleBlockExternal. ! ! !OCInstanceVariable methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:09'! accept: anInterpreter assign: aValue inNode: aVariableNode ^ anInterpreter write: aValue at: index named: name! ! !OCInstanceVariable methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:10'! readWith: anInterpreter inNode: aVariableNode ^ anInterpreter readInstVarAt: index named: name! ! !OCSemanticWarning commentStamp: 'ajh 7/7/2004 17:36' prior: 38878290! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34957370! methodClass ^node methodNode methodClass! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34957505! methodNode ^node methodNode! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:31'! node ^node ! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:26'! node: anObject node := anObject! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/18/2013 16:26'! openMenuIn: aBlock self subclassResponsibility! ! !OCShadowVariableWarning commentStamp: 'ajh 3/24/2003 22:21' prior: 38878622! I get signalled when a variable in a block or method scope shadows a variable of the same name in an outer scope. The default action is to allow it.! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:29' prior: 34958832! defaultAction ^ self resume: (self variable: self node shadows: self shadowedVar) ! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:27'! node: aVariableNode super node: aVariableNode. messageText := 'Temp shadows: ', aVariableNode name. ! ! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/18/2013 16:43'! openMenuIn: aBlock self error: 'should not be called'! ! !OCUndeclaredVariableWarning commentStamp: '' prior: 38878848! I get signalled when a temporary variable is used that is not defined. My default action is to create an Undeclared binding and add it to the Undeclared dictionary.! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34960030! declareClassVar self methodClass theNonMetaClass addClassVarNamed: node name asSymbol. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should be found']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34960324! declareGlobal Smalltalk at: node name asSymbol put: nil. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should be not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34960591! declareInstVar: name "Declare an instance variable." self methodClass addInstVarNamed: name. "We are changing a class after the scope hierarchy was created, so we need to update the Instance Scope" self methodNode scope outerScope vars: self methodClass allInstVarNames. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34961064! declareTempAndPaste: name | insertion delta theTextString characterBeforeMark tempsMark | theTextString := self methodNode source. tempsMark := self methodNode body leftBar ifNil: [ self methodNode body start ]. characterBeforeMark := theTextString at: tempsMark-1 ifAbsent: [$ ]. (theTextString at: tempsMark) = $| ifTrue: [ "Paste it before the second vertical bar" insertion := name, ' '. characterBeforeMark isSeparator ifFalse: [ insertion := ' ', insertion]. delta := 0. ] ifFalse: [ "No bars - insert some with CR, tab" insertion := '| ' , name , ' |',String cr. delta := 2. "the bar and CR" characterBeforeMark = Character tab ifTrue: [ insertion := insertion , String tab. delta := delta + 1. "the tab" ] ]. tempsMark := tempsMark + (self substituteWord: insertion wordInterval: (tempsMark to: tempsMark-1) offset: 0) - delta. self methodNode scope addTemp: name. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should not happen'] ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 35525974! defaultAction | varName | ^super defaultAction ifNil: [ varName := node name asSymbol. Undeclared at: varName put: nil. OCLiteralVariable new assoc: (Undeclared associationAt: varName); scope: 'scope'; yourself]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/18/2013 16:27' prior: 36329164! defineClass: className "Prompts the user to define a new class." | classSymbol systemCategory classDefinition | classSymbol := className asSymbol. systemCategory := self methodClass category ifNil: [ 'Unknown' ]. classDefinition := 'Object subclass: #' , classSymbol , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategory , ''''. classDefinition := UIManager default multiLineRequest: 'Edit class definition:' initialAnswer: classDefinition answerHeight: 150. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self error ]. self class compiler evaluate: classDefinition. ^ (node owningScope lookupVar: className) ifNil: [self error: 'should be not happen']! ! !OCUndeclaredVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:27'! node: aVariableNode super node: aVariableNode. messageText := 'Undeclared temp: ', aVariableNode name. ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 38568530! openMenuIn: aBlock | alternatives labels actions lines caption choice name interval | interval := node sourceInterval. name := node name. alternatives := self possibleVariablesFor: name. labels := OrderedCollection new. actions := OrderedCollection new. lines := OrderedCollection new. name first isLowercase ifTrue: [labels add: 'Declare new temporary variable'. actions add: [self declareTempAndPaste: name]. labels add: 'Declare new instance variable'. actions add: [self declareInstVar: name]] ifFalse: [labels add: 'Define new class'. actions add: [self defineClass: name]. labels add: 'Declare new global'. actions add: [self declareGlobal]. labels add: 'Declare new class variable'. actions add: [self declareClassVar]]. lines add: labels size. alternatives do: [:each | labels add: each. actions add: [self substituteVariable: each atInterval: interval]]. lines add: labels size. labels add: 'Cancel'. caption := 'Unknown variable: ' , name , ' please correct, or cancel:'. choice := aBlock value: labels value: lines value: caption. choice ifNotNil: [self resume: (actions at: choice ifAbsent: [compilationContext failBlock value]) value]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34964349! possibleVariablesFor: proposedVariable | results class | class := node methodNode methodClass . results := proposedVariable correctAgainst: node temporaryVariables continuedFrom: nil. proposedVariable first canBeGlobalVarInitial ifTrue: [ results := class possibleVariablesFor: proposedVariable continuedFrom: results ]. ^ proposedVariable correctAgainst: nil continuedFrom: results. ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 38569867! substituteVariable: varName atInterval: anInterval self substituteWord: varName wordInterval: anInterval offset: 0. self methodNode source: self requestor text. node replaceWith:((RBVariableNode named: varName) ocBinding: (node owningScope lookupVar: varName)). ^ (node owningScope lookupVar: varName) ifNil: [self error: 'should be found']. ! ! !OCUninitializedVariableWarning commentStamp: 'ajh 3/24/2003 22:34' prior: 38879100! I get signalled when a temporary variable is used before it is assigned to. My default action is to allow it since all temps get initialized to nil.! !OCUninitializedVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:27'! node: aVariableNode super node: aVariableNode. messageText := 'Uninitialized temp: ', aVariableNode name. ! ! !OCUninitializedVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34966159! openMenuIn: aBlock | caption index | caption := node name, ' appears to be uninitialized at this point. Proceed anyway?'. index := aBlock value: #('yes' 'no') value: #() value: caption. ^ self resume: index = 1! ! !OCUnknownSelectorWarning commentStamp: 'ajh 3/24/2003 22:23' prior: 38879330! I get signalled when no selector is defined for a message send, indicating a possible mispelling. My default action is to create a new selector.! !OCUnknownSelectorWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:34'! node: aMessageNode super node: aMessageNode. messageText := 'Unknown selector: ', aMessageNode selector. ! ! !OCUnknownSelectorWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:34' prior: 34967246! openMenuIn: aBlock | alternatives labels lines caption choice name | name := node selector. alternatives := Symbol possibleSelectorsFor: name. labels := Array streamContents: [:s | s nextPut: name; nextPutAll: alternatives; nextPut: 'cancel']. lines := {1. alternatives size + 1}. caption := 'Unknown selector, please\confirm, correct, or cancel' withCRs. choice := aBlock value: labels value: lines value: caption. choice = 0 ifTrue: [self resume: nil]. choice = 1 ifTrue: [self resume: name asSymbol]. choice = labels size ifTrue: [self resume: nil]. self resume: (alternatives at: choice - 1)! ! !OCUnusedVariableWarning commentStamp: 'ajh 3/24/2003 22:35' prior: 38879555! I get signalled when a temporary variable is declared but never used. My default action is to allow it since it is benign.! !OCUnusedVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:27'! node: aVariableNode super node: aVariableNode. messageText := 'Unused temp: ', aVariableNode name. ! ! !OCUnusedVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/17/2013 16:25' prior: 34968160! openMenuIn: aBlock | index | index := aBlock value: #('yes' 'no') value: #() value: (node name) asWideString, ' appears to be unused in this method. OK to remove it?' withCRs . self resume: index = 1! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ClementBera 5/21/2013 14:53'! definingScope ^ scope! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'ClementBera 5/21/2013 14:52'! originalVar ^ self! ! !OCLiteralVariable methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:08'! accept: aVisitor assign: aValue inNode: aVariableNode ^self binding value: aValue! ! !OCLiteralVariable methodsFor: '*AST-Interpreter-Core' stamp: 'GuillermoPolito 5/14/2013 11:10'! readWith: anInterpreter inNode: aVariableNode ^ self value! ! !OCSemanticError commentStamp: '' prior: 38879736! Raises a semantic error during semantic analysis, which is currently, only 'cannot store into'! !OCSemanticError methodsFor: 'exceptiondescription' stamp: 'MarcusDenker 5/17/2013 16:33' prior: 35557100! defaultAction ^self notify: messageText at: node start.! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:33' prior: 38335195! methodNode ^node methodNode! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:33'! node ^ node! ! !OCSemanticError methodsFor: 'accessing' stamp: 'MarcusDenker 5/17/2013 16:33'! node: aNode node := aNode! ! !SyntaxErrorNotification class methodsFor: 'exceptioninstantiator' stamp: 'ar 9/27/2005 19:15' prior: 51479703! inClass: aClass category: aCategory withCode: codeString doitFlag: doitFlag ^ (self new setClass: aClass category: aCategory code: codeString doitFlag: doitFlag) signal! ! !SyntaxErrorNotification class methodsFor: 'exceptionInstantiator' stamp: 'eem 9/23/2008 14:19' prior: 51479329! inClass: aClass category: aCategory withCode: codeString doitFlag: doitFlag errorMessage: errorString location: location ^ (self new setClass: aClass category: aCategory code: codeString doitFlag: doitFlag errorMessage: errorString location: location) signal! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:17' prior: 51477655! category ^category! ! !SyntaxErrorNotification methodsFor: 'exceptiondescription' stamp: 'pavel.krivanek 6/17/2010 10:00' prior: 51479031! defaultAction ^ UIManager default syntaxErrorNotificationDefaultAction: self! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:11' prior: 51477757! doitFlag ^doitFlag! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:10' prior: 51477859! errorClass ^inClass! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:10' prior: 51477962! errorCode ^code! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'eem 9/23/2008 14:23' prior: 51478062! errorMessage ^errorMessage! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'eem 9/23/2008 14:23' prior: 51478173! location ^location! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:14' prior: 51478275! messageText ^ super messageText ifNil: [messageText := code]! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'ar 9/27/2005 19:15' prior: 51478421! setClass: aClass category: aCategory code: codeString doitFlag: aBoolean inClass := aClass. category := aCategory. code := codeString. doitFlag := aBoolean ! ! !SyntaxErrorNotification methodsFor: 'accessing' stamp: 'eem 9/23/2008 14:20' prior: 51478665! setClass: aClass category: aCategory code: codeString doitFlag: aBoolean errorMessage: errorString location: anInteger inClass := aClass. category := aCategory. code := codeString. doitFlag := aBoolean. errorMessage := errorString. location := anInteger! ! OCSemanticError removeSelector: #variableNode:! OCSemanticError removeSelector: #variableNode! TPureBehavior removeSelector: #parseScope! OCUnusedVariableWarning removeSelector: #variableNode:! OCClassScope removeSelector: #classEncoding! TraitBehavior removeSelector: #parseScope! TraitBehavior removeSelector: #needsLongForm! OCToolScope removeSelector: #requestor:! OCToolScope removeSelector: #requestor! OCToolScope removeSelector: #newMethodScope! OCToolScope removeSelector: #lookupVar:! OCToolScope removeSelector: #instanceScope! OCToolScope removeSelector: #initialize! OCToolScope removeSelector: #classEncoding! Smalltalk globals removeClassNamed: #OCToolScope! OCAbstractScope removeSelector: #parseScope! OCAbstractScope removeSelector: #classEncoding! OCBlockScope removeSelector: #outerNotOptimizedScope! OCSemanticWarning removeSelector: #variableNode:! OCSemanticWarning removeSelector: #variableNode! UndefinedObject removeSelector: #parseScope! UndefinedObject removeSelector: #needsLongForm! OCShadowVariableWarning removeSelector: #variableNode:! OCASTSemanticAnalyzer removeSelector: #requestor:! OCASTSemanticAnalyzer removeSelector: #requestor! OCASTSemanticAnalyzer removeSelector: #initialize! OCMethodScope removeSelector: #outerNotOptimizedScope! Behavior removeSelector: #parseScope! Behavior removeSelector: #needsLongForm! OCUndeclaredVariableWarning removeSelector: #variableNode:! OCUninitializedVariableWarning removeSelector: #variableNode:! InstructionStream class removeSelector: #needsLongForm! OCCompilerEvaluationTest removeSelector: #weightedAverage! OCCompilerEvaluationTest removeSelector: #testEvaluationOfSelfSend! OCCompilerEvaluationTest removeSelector: #testEvaluationOfInlinedToDo! OCCompilerEvaluationTest removeSelector: #setUp! OCCompilerEvaluationTest removeSelector: #methodContext! OCCompilerEvaluationTest removeSelector: #method! Smalltalk globals removeClassNamed: #OCCompilerEvaluationTest! OCGlobalScope removeSelector: #classEncoding! OCUnknownSelectorWarning removeSelector: #messageNode:! OCUnknownSelectorWarning removeSelector: #messageNode! "AST-Core"! "AST-Interpreter-Core"! "AST-Semantic"! "Compiler"! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(22 May 2013 2:45:59 pm) Pharo.image priorSource: 5312911! ----STARTUP----an Array(22 May 2013 2:53:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 2:53:53 pm) Pharo-30155.image priorSource: 5378641! ----STARTUP----an Array(22 May 2013 3:18:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 15:15' prior: 38867641! commentForCurrentUpdate ^ '10701 Remove non-boolean setting https://pharo.fogbugz.com/f/cases/10701 10648 There are 11 direct references to Compiler https://pharo.fogbugz.com/f/cases/10648 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 15:16'! script253 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.93.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.30.mcz AST-Tests-Core-MarcusDenker.26.mcz AST-Tests-Semantic-StephaneDucasse.5.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.467.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.302.mcz OpalCompiler-Tests-MarcusDenker.154.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.125.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.180.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 15:16'! update30156 "self new update30156" self withUpdateLog: '10701 Remove non-boolean setting https://pharo.fogbugz.com/f/cases/10701 10648 There are 11 direct references to Compiler https://pharo.fogbugz.com/f/cases/10648 '. self loadTogether: self script253 merge: false. ScriptLoader new unloadPackageNamed: 'AST-Tests-Semantic'. . self flushCaches. ! ! "ScriptLoader30"! !CodeRewritingAcceptor methodsFor: 'protocol' stamp: 'MarcusDenker 5/21/2013 07:38' prior: 37019614! accept: aText notifying: aController | environment tree rule result | self model sourceTextArea update: #clearUserEdits. environment := self model browsedEnvironment. tree := self class compiler evaluate: aText. rule := CodeRewritingRule new rewriteRule: tree; yourself. result := RBSmalllintChecker runRule: rule onEnvironment: environment. (ChangesBrowser changes: result builder changes) openWithSpec ! ! !NativeBoost class methodsFor: 'debugger support' stamp: 'MarcusDenker 5/21/2013 07:44' prior: 27927045! tryRunNativeCode: aCompiledMethod for: aReceiver withArgs: arguments "run only a native code of given method, and if it fails evaluate aFailBlock instead" | src node m | "self assert: (self isNativeMethod: aCompiledMethod)." src := String streamContents: [:str | str nextPutAll: 'NBDebug_stub'. 1 to: aCompiledMethod numArgs do: [:i | i = 1 ifTrue: [ str nextPutAll: ': ' ] ifFalse: [ str nextPutAll: ' with: ' ]. str nextPutAll: 'arg'. i printOn: str. ]. str cr; nextPutAll: ' '; cr; nextPutAll: ' ^ ContextPart primitiveFailTokenFor: errorCode'. ]. node := Smalltalk compiler compile: src in: aCompiledMethod methodClass classified: nil notifying: nil ifFail: [ ^ ContextPart primitiveFailTokenFor: nil ]. m := node generate: aCompiledMethod trailer. m flushCache. m selector flushCache. ^ m valueWithReceiver: aReceiver arguments: arguments. ! ! !RBTemporaryToInstanceVariableTest methodsFor: 'set up' stamp: 'MarcusDenker 5/21/2013 07:45' prior: 31453916! setUp super setUp. model := Smalltalk evaluate: self abstractVariableTestData.! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'MarcusDenker 5/21/2013 07:44' prior: 34285001! evaluate: expression ^ Smalltalk compiler evaluate: expression in: context to: context receiver! ! !RBPatternBlockNode methodsFor: 'matching' stamp: 'MarcusDenker 5/21/2013 07:39' prior: 30975888! createBlockFor: aRBBlockNode | source | self replacePatternNodesIn: aRBBlockNode. source := aRBBlockNode formattedCode. ^Smalltalk compiler evaluate: source for: self logged: false! ! !STEditor methodsFor: 'initialization' stamp: 'MarcusDenker 5/21/2013 07:41' prior: 32629171! okAction text accept. object contents: (Smalltalk evaluate: text getText).! ! !MetacelloPharoPlatform methodsFor: 'reflection' stamp: 'MarcusDenker 5/21/2013 07:44' prior: 26003944! copyClass: oldClass as: newName inCategory: newCategoryName | copysName class newDefinition | copysName := newName asSymbol. copysName = oldClass name ifTrue: [ ^ oldClass ]. (Smalltalk includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := oldClass definition copyReplaceAll: '#' , oldClass name asString with: '#' , copysName asString printString. newDefinition := newDefinition copyReplaceAll: 'category: ' , (SystemOrganization categoryOfElement: oldClass name) asString printString with: 'category: ' , newCategoryName printString. class := Smalltalk evaluate: newDefinition logged: true. class class instanceVariableNames: oldClass class instanceVariablesString. class copyAllCategoriesFrom: oldClass. class class copyAllCategoriesFrom: oldClass class. class category: newCategoryName. ^ class! ! !SingleRuleCriticBrowser methodsFor: 'initialization' stamp: 'MarcusDenker 5/21/2013 07:42' prior: 34146162! initializeActionToPerformOnTextModel | selectedItem | sourceCodeModel acceptBlock: [ :text | selectedItem := criticsModel selectedItem. (selectedItem isCompiledMethod and: [ rule isTransformationRule not ]) ifTrue: [ selectedItem methodClass compile: text ] ifFalse: [ Smalltalk evaluate: text ]] ! ! !SortHierarchicallyTests methodsFor: 'setup' stamp: 'MarcusDenker 5/21/2013 07:41' prior: 36587279! setUp completeTree := self asNodes: {String . ByteString . Symbol . ByteSymbol . WideSymbol . WideString} . partialTree := self asNodes: {String . ByteString . ByteSymbol . WideString}. unrelatedClasses := self asNodes: {ArrayedCollection . BlockClosure . Class . Morph . Point}. archivesClasses := self asNodes: {Archive . TarArchive . ZipArchive . ArchiveMember . TarArchiveMember . ZipArchiveMember . ZipFileMember . ZipDirectoryMember . ZipNewFileMember . ZipStringMember . ZipFileConstants}! ! !TimeProfiler methodsFor: 'compiling' stamp: 'MarcusDenker 5/21/2013 07:41' prior: 38396276! compile: codeString for: anObject in: evalContext | methodNode | methodNode := Smalltalk compiler compileNoPattern: ('self runBlock: [', codeString, ']') in: anObject class context: evalContext notifying: self ifFail: [^nil]. ^ methodNode generateWithSource.! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 5/21/2013 11:35' prior: 35821229! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}]! ! !ContextPart class methodsFor: 'simulation' stamp: 'MarcusDenker 5/21/2013 07:39' prior: 35839757! initializeTryNamedPrimitiveTemplateMethod | methodNode | methodNode := Smalltalk compiler compile: 'tryNamedPrimitive "This method is a template that the Smalltalk simulator uses to execute primitives. See Object documentation whatIsAPrimitive." ^ ContextPart primitiveFailTokenFor: errorCode' in: UndefinedObject classified: nil notifying: #() ifFail: [ self error: 'method source is incorrect'. ]. TryNamedPrimitiveTemplateMethod := methodNode generate: CompiledMethodTrailer empty. ! ! !Object methodsFor: 'converting' stamp: 'MarcusDenker 5/21/2013 11:34' prior: 35653994! mustBeBooleanIn: context "context is the where the non-boolean error occurred. Rewind context to before jump then raise error." | proceedValue | Smalltalk compilerClass = OpalCompiler ifTrue: [ ^ self mustBeBooleanInMagic: context ]. context skipBackBeforeJump. proceedValue := NonBooleanReceiver new object: self; signal: 'proceed for truth.'. ^ proceedValue ~~ false! ! MustBeBooleanTests removeSelector: #tearDown! MustBeBooleanTests removeSelector: #setUp! "AST-Core"! "DebuggerModel"! "Kernel"! "Manifest-CriticBrowser"! "Metacello-Platform"! "NativeBoost-Core"! "Nautilus"! "OpalCompiler-Tests"! "Refactoring-Tests-Core"! "Settings-Compiler"! "Spec-Tools"! "Tools"! RBSemanticTest removeSelector: #testWriter! RBSemanticTest removeSelector: #testVariableScope! RBSemanticTest removeSelector: #testUndeclaredHandled! RBSemanticTest removeSelector: #testUndeclaredBinding! RBSemanticTest removeSelector: #testSpecialSuperBinding! RBSemanticTest removeSelector: #testSpecialSelfBinding! RBSemanticTest removeSelector: #testSpecialContextBinding! RBSemanticTest removeSelector: #testShadowedVariables! RBSemanticTest removeSelector: #testRootScope! RBSemanticTest removeSelector: #testReader! RBSemanticTest removeSelector: #testReadWriter! RBSemanticTest removeSelector: #testMultipleScopes! RBSemanticTest removeSelector: #testMissing! RBSemanticTest removeSelector: #testMethodTemporaryBinding! RBSemanticTest removeSelector: #testMethodScope! RBSemanticTest removeSelector: #testMethodArgumentBinding! RBSemanticTest removeSelector: #testLiteralScope! RBSemanticTest removeSelector: #testInstanceVariableBinding! RBSemanticTest removeSelector: #testGlobalVariableBinding! RBSemanticTest removeSelector: #testClassVariableBinding! RBSemanticTest removeSelector: #testCascadeReceiver! RBSemanticTest removeSelector: #testBlockTemporaryBinding! RBSemanticTest removeSelector: #testBlockScope! RBSemanticTest removeSelector: #testBlockArgumentBinding! RBSemanticTest removeSelector: #testAccessors! RBSemanticTest removeSelector: #parseMethod:! RBSemanticTest removeSelector: #parseExpression:! RBSemanticTest class removeSelector: #packageNamesUnderTest! Smalltalk globals removeClassNamed: #RBSemanticTest! ----End fileIn----! ----QUIT----an Array(22 May 2013 3:19 pm) Pharo.image priorSource: 5378837! ----STARTUP----an Array(22 May 2013 3:26:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 3:26:03 pm) Pharo-30156.image priorSource: 5397723! ----STARTUP----an Array(22 May 2013 3:40:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 15:38' prior: 38933566! commentForCurrentUpdate ^ '10721 Cleanup Setting boolean sends https://pharo.fogbugz.com/f/cases/10721 10715 Spec update https://pharo.fogbugz.com/f/cases/10715 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 15:38'! script254 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.93.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.30.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.467.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.305.mcz OpalCompiler-Tests-MarcusDenker.156.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.77.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.183.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 15:38'! update30157 "self new update30157" self withUpdateLog: '10721 Cleanup Setting boolean sends https://pharo.fogbugz.com/f/cases/10721 10715 Spec update https://pharo.fogbugz.com/f/cases/10715 '. self loadTogether: self script254 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/22/2013 15:31' prior: 35649933! testIfTrueEffect | temp fakeBool | (Smalltalk compilerClass = OpalCompiler) ifFalse: [self skip]. fakeBool := MyBooleanObject new. temp := 1. fakeBool ifTrue: [ temp := 5 + 3 + 1 ]. self assert: temp equals: 9. fakeBool ifTrue: [ [ ] ]. "fakeBool ifTrue: [ 1+ 2. [ :a | a ] value: 5. 7 ]."! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/22/2013 15:31' prior: 35650270! testIfTrueValue | myBooleanObject | (Smalltalk compilerClass = OpalCompiler) ifFalse: [self skip]. self assert: (MyBooleanObject new ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'. myBooleanObject := MyBooleanObject new. self assert: (myBooleanObject ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'.! ! !AlainTreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27' prior: 35571152! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27'! autoDeselection ^ autoDeselection contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27'! autoDeselection: aBoolean autoDeselection contents: aBoolean! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 14:13'! iconBlock ^ [:each | self iconFor: each ]! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:35'! iconBlock: aBlock iconBlock contents: aBlock! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 14:14'! iconFor: aNode ^ iconBlock contents cull: aNode! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27' prior: 37319206! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item printString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. treeUpdated := nil asValueHolder. self registerEvents! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/21/2013 16:35' prior: 38520430! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection selectedItems ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo:[ self updateTree ]. autoDeselection whenChangedDo: [:boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt do: [ self selectedItems: selectionHolder contents ].! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:35'! resetSelection self selectedItems: {}! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:46' prior: 35354120! selectedItem: anItem < api: #st getter: #selectedItem registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" self selectedItems: { anItem }! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:30' prior: 35354665! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" treeModel selectNodePath: aCollection. selectionHolder contents: aCollection. ! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'ClementBera 5/21/2013 16:54'! stringMessage ^ 'Name already defined --> '! ! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'ClementBera 5/21/2013 16:57' prior: 34959260! variable: varNode shadows: semVar (varNode name = 'self' | varNode name = 'super' ) ifTrue: [ ^ OCSemanticError new node: node; compilationContext: compilationContext; messageText: self stringMessage; signal ]. self interactive ifFalse: [ ^ Transcript show: '('; show: varNode name; show: ' is shadowed)'; yourself]. self notify: self stringMessage at: varNode start! ! !CheckboxSpec methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/21/2013 14:02'! defaultColor ^ #(Color class transparent)! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:51'! iconMaxSize: anInteger iconMaxSize contents: anInteger! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:50'! icons: aBlock iconHolder contents: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 14:21'! autoAccept: aBoolean inputField autoAccept: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:34'! iconBlock: aBlock tree iconBlock: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:34'! resetSelection tree resetSelection! ! OpalCompiler class removeSelector: #allowNonBooleanReceivers:! OpalCompiler class removeSelector: #allowNonBooleanReceivers! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(22 May 2013 3:40:52 pm) Pharo.image priorSource: 5397916! ----STARTUP----an Array(22 May 2013 3:48:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 3:48:48 pm) Pharo-30157.image priorSource: 5415450! ----STARTUP----an Array(22 May 2013 4:12:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 16:10' prior: 38952645! commentForCurrentUpdate ^ '10723 Use Opal for semantic analisys in suggestions https://pharo.fogbugz.com/f/cases/10723 10707 Instance variable #askOkToClose is duplicated in WindowModel (already defined in ComposableModel) https://pharo.fogbugz.com/f/cases/10707 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 16:10'! script255 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.93.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.30.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.467.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.305.mcz OpalCompiler-Tests-MarcusDenker.156.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.81.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.184.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 16:10'! update30158 "self new update30158" self withUpdateLog: '10723 Use Opal for semantic analisys in suggestions https://pharo.fogbugz.com/f/cases/10723 10707 Instance variable #askOkToClose is duplicated in WindowModel (already defined in ComposableModel) https://pharo.fogbugz.com/f/cases/10707 '. self loadTogether: self script255 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WindowModel commentStamp: '' prior: 38731026! A WindowModel is a spec model for a Window! !OCLiteralVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:06'! assoc ^ assoc! ! !OCLiteralVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:03'! isLiteral ^true.! ! !OCLiteralVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:47'! specialCommands (self isLiteral and: [Smalltalk globals includesAssociation: self assoc ]) ifTrue:[ ^SugsSuggestionFactory commandsForClass]. (self isLiteral and: [(Smalltalk globals includesAssociation: self assoc ) not]) ifTrue:[^SugsSuggestionFactory commandsForClassVariable]. ! ! !SugsMenuBuilder class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/22/2013 16:00' prior: 38372182! findBestNodeFor: context | root node| root := context selectedMethod ifNil:[ RBParser parseFaultyExpression: context code] ifNotNil: [ RBParser parseFaultyMethod: context code]. context selectedClass ifNotNil: [:theClass| root doSemanticAnalysisInContext: (CompilationContext default class: theClass )]. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! !SugsMockContext methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 5/22/2013 15:24' prior: 35732147! withInstanceVar anInstanceVar.! ! !SugsAbstractContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 5/15/2013 16:52'! hasMoreSentences ^ selectedNode parent isNotNil and: [ selectedNode parent isMethod not ]! ! !SugsExtractMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/15/2013 16:12' prior: 36696672! execute (NautilusRefactoring model: context) extractToMethodTextSelection! ! !SugsExtractMethod methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/15/2013 16:50'! isValidForContext ^ context hasMoreSentences! ! !OCTempVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:43'! specialCommands ^SugsSuggestionFactory commandsForTemporaryVariable.! ! !RBVariableNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:38' prior: 35721801! specialCommands ^self binding specialCommands! ! !SugsMessageBrowserContext methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 5/22/2013 10:40' prior: 38361699! sourceTextArea ^ model widget.! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 5/22/2013 15:08' prior: 35702837! testFindBestNodeForClassItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classContext. self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isLiteral and: [Smalltalk globals includesAssociation: node binding assoc ]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 5/22/2013 15:08' prior: 35703263! testFindBestNodeForClassVarItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classVariableContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es una var de clase?" self assert:( node binding isLiteral and: [(Smalltalk globals includesAssociation: node binding assoc ) not]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 5/22/2013 15:11' prior: 35703715! testFindBestNodeForInstanceVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext instVarContext . self assert: node class equals: RBVariableNode. self assert:( node binding isInstance).! ! !OCInstanceVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:44'! specialCommands ^ SugsSuggestionFactory commandsForInstanceVariable.! ! !WindowModel commentStamp: '' prior: 38980791! A WindowModel is a spec model for a Window! !OCAbstractVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:03'! isLiteral ^false.! ! !OCAbstractVariable methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 5/22/2013 15:40'! specialCommands ^{}.! ! "SmartSuggestions"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(22 May 2013 4:12:52 pm) Pharo.image priorSource: 5415646! ----STARTUP----an Array(22 May 2013 4:19:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 4:19:52 pm) Pharo-30158.image priorSource: 5430417! ----STARTUP----an Array(22 May 2013 4:34:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 16:32' prior: 38970375! commentForCurrentUpdate ^ '10724 Remove AST Semantic Analysis package https://pharo.fogbugz.com/f/cases/10724 10722 Old compiler should have iv compilationContext https://pharo.fogbugz.com/f/cases/10722 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 16:32'! script256 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.93.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Semantic-Binding-MarcusDenker.5.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Semantic-MarcusDenker.30.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.307.mcz OpalCompiler-Tests-MarcusDenker.156.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.81.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.184.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.840.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 16:32'! update30159 "self new update30159" self withUpdateLog: '10724 Remove AST Semantic Analysis package https://pharo.fogbugz.com/f/cases/10724 10722 Old compiler should have iv compilationContext https://pharo.fogbugz.com/f/cases/10722 '. self loadTogether: self script256 merge: false. ScriptLoader new unloadPackageNamed: 'AST-Interpreter-Semantic-Binding'. ScriptLoader new unloadPackageNamed: 'AST-Semantic'. self flushCaches. ! ! "ScriptLoader30"! !Compiler commentStamp: '' prior: 19906224! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !Compiler commentStamp: '' prior: 38995762! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !Compiler methodsFor: 'public' stamp: 'ClementBera 5/22/2013 16:04' prior: 37320431! class: aClass "This is used for compatibility with Opal" class := aClass. self compilationContext class: aClass! ! !Compiler methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 5/22/2013 16:02' prior: 38342709! compilationContext ^ compilationContext ifNil: [ compilationContext := CompilationContext default requestor: requestor; class: class; category: category ] ! ! !Compiler methodsFor: 'public' stamp: 'ClementBera 5/22/2013 16:04' prior: 37320549! environment: anEnvironment "This is used for compatibility with Opal" self compilationContext environment: anEnvironment! ! !Compiler methodsFor: 'public' stamp: 'ClementBera 5/22/2013 16:04' prior: 37257945! options: anArray "This is used for compatibility with Opal" self compilationContext compilerOptions: anArray! ! "Compiler"! "OpalCompiler-Core"! RBArgumentBinding removeSelector: #readWith:! RBInstanceBinding removeSelector: #readWith:! RBInstanceBinding removeSelector: #accept:assign:! RBTemporaryBinding removeSelector: #readWith:! RBTemporaryBinding removeSelector: #accept:assign:! RBLiteralBinding removeSelector: #readWith:! RBLiteralBinding removeSelector: #accept:assign:! RBProgramNode removeSelector: #semanticAnnotatorClass! RBProgramNode removeSelector: #semanticAnnotationMissing! RBProgramNode removeSelector: #lexicalScope! RBProgramNode removeSelector: #annotateInScope:! RBProgramNode removeSelector: #annotateInClass:! RBVariableBinding removeSelector: #writers! RBVariableBinding removeSelector: #setScope:! RBVariableBinding removeSelector: #scope! RBVariableBinding removeSelector: #readers! RBVariableBinding removeSelector: #printOn:! RBVariableBinding removeSelector: #name! RBVariableBinding removeSelector: #isWritten! RBVariableBinding removeSelector: #isUndeclaredBinding! RBVariableBinding removeSelector: #isUndeclared! RBVariableBinding removeSelector: #isTemporaryBinding! RBVariableBinding removeSelector: #isTemp! RBVariableBinding removeSelector: #isSuperBinding! RBVariableBinding removeSelector: #isSuper! RBVariableBinding removeSelector: #isShadowing! RBVariableBinding removeSelector: #isSelfBinding! RBVariableBinding removeSelector: #isSelf! RBVariableBinding removeSelector: #isReadonly! RBVariableBinding removeSelector: #isRead! RBVariableBinding removeSelector: #isPrimitiveErrorBinding! RBVariableBinding removeSelector: #isPrimitiveError! RBVariableBinding removeSelector: #isLiteralBinding! RBVariableBinding removeSelector: #isLiteral! RBVariableBinding removeSelector: #isInstanceBinding! RBVariableBinding removeSelector: #isInstance! RBVariableBinding removeSelector: #isContextBinding! RBVariableBinding removeSelector: #isContext! RBVariableBinding removeSelector: #isArgumentBinding! RBVariableBinding removeSelector: #isArgument! RBVariableBinding removeSelector: #isAccessed! RBVariableBinding removeSelector: #initialize! RBVariableBinding removeSelector: #addWriter:! RBVariableBinding removeSelector: #addReader:! RBVariableBinding removeSelector: #addAccessor:! RBVariableBinding removeSelector: #accessors! RBVariableBinding class removeSelector: #new! RBSuperBinding removeSelector: #name! RBSuperBinding removeSelector: #isSuperBinding! Smalltalk globals removeClassNamed: #RBSuperBinding! RBSpecialBinding removeSelector: #isReadonly! RBSelfBinding removeSelector: #name! RBSelfBinding removeSelector: #isSelfBinding! Smalltalk globals removeClassNamed: #RBSelfBinding! RBContextBinding removeSelector: #name! RBContextBinding removeSelector: #isContextBinding! Smalltalk globals removeClassNamed: #RBContextBinding! Smalltalk globals removeClassNamed: #RBSpecialBinding! RBUndeclaredBinding removeSelector: #isUndeclaredBinding! Smalltalk globals removeClassNamed: #RBUndeclaredBinding! RBTemporaryBinding removeSelector: #isTemporaryBinding! RBPrimitiveErrorBinding removeSelector: #isPrimitiveErrorBinding! RBPrimitiveErrorBinding class removeSelector: #named:! Smalltalk globals removeClassNamed: #RBPrimitiveErrorBinding! Smalltalk globals removeClassNamed: #RBTemporaryBinding! RBLocalBinding removeSelector: #setNode:! RBLocalBinding removeSelector: #node! RBLocalBinding removeSelector: #name! RBLocalBinding class removeSelector: #node:! RBArgumentBinding removeSelector: #isReadonly! RBArgumentBinding removeSelector: #isArgumentBinding! Smalltalk globals removeClassNamed: #RBArgumentBinding! Smalltalk globals removeClassNamed: #RBLocalBinding! RBLiteralBinding removeSelector: #value! RBLiteralBinding removeSelector: #name! RBLiteralBinding removeSelector: #isLiteralBinding! RBLiteralBinding removeSelector: #initializeBinding:! RBLiteralBinding removeSelector: #binding! RBLiteralBinding class removeSelector: #binding:! Smalltalk globals removeClassNamed: #RBLiteralBinding! RBInstanceBinding removeSelector: #name! RBInstanceBinding removeSelector: #isInstanceBinding! RBInstanceBinding removeSelector: #initializeName:index:! RBInstanceBinding removeSelector: #index! RBInstanceBinding class removeSelector: #name:index:! Smalltalk globals removeClassNamed: #RBInstanceBinding! Smalltalk globals removeClassNamed: #RBVariableBinding! RBRootScope removeSelector: #lookup:ifAbsent:! RBRootScope removeSelector: #isRootScope! RBRootScope removeSelector: #initialize! Smalltalk globals removeClassNamed: #RBRootScope! RBOwnedScope removeSelector: #setOwner:! RBOwnedScope removeSelector: #owner! RBOwnedScope removeSelector: #lookup:ifAbsent:! RBOwnedScope class removeSelector: #owner:! RBNodedScope removeSelector: #setNode:! RBNodedScope removeSelector: #node! RBNodedScope class removeSelector: #owner:node:! RBMethodScope removeSelector: #setNode:! RBMethodScope removeSelector: #isMethodScope! RBMethodScope removeSelector: #addPrimitiveErrorBinding! Smalltalk globals removeClassNamed: #RBMethodScope! RBBlockScope removeSelector: #isBlockScope! Smalltalk globals removeClassNamed: #RBBlockScope! Smalltalk globals removeClassNamed: #RBNodedScope! RBVariableScope removeSelector: #setClass:! RBVariableScope removeSelector: #isVariableScope! Smalltalk globals removeClassNamed: #RBVariableScope! RBLiteralScope removeSelector: #isLiteralScope! RBLiteralScope removeSelector: #basicBindingOf:! Smalltalk globals removeClassNamed: #RBLiteralScope! RBClassScope removeSelector: #theClass! RBClassScope removeSelector: #setClass:! RBClassScope class removeSelector: #owner:class:! Smalltalk globals removeClassNamed: #RBClassScope! Smalltalk globals removeClassNamed: #RBOwnedScope! RBLexicalScope removeSelector: #lookup:ifAbsent:! RBLexicalScope removeSelector: #lookup:! RBLexicalScope removeSelector: #isVariableScope! RBLexicalScope removeSelector: #isRootScope! RBLexicalScope removeSelector: #isMethodScope! RBLexicalScope removeSelector: #isLiteralScope! RBLexicalScope removeSelector: #isBlockScope! RBLexicalScope removeSelector: #initialize! RBLexicalScope removeSelector: #bindingOf:! RBLexicalScope removeSelector: #basicBindingOf:! RBLexicalScope removeSelector: #add:! RBLexicalScope class removeSelector: #new! Smalltalk globals removeClassNamed: #RBLexicalScope! RBVariableNode removeSelector: #variableBinding! RBVariableNode removeSelector: #hasVariableBinding! RBVariableNode removeSelector: #binding! RBSemanticAnnotationMissing removeSelector: #isResumable! Smalltalk globals removeClassNamed: #RBSemanticAnnotationMissing! RBSemanticAnnotator removeSelector: #visitVariableNode:! RBSemanticAnnotator removeSelector: #visitSequenceNode:! RBSemanticAnnotator removeSelector: #visitMethodNode:! RBSemanticAnnotator removeSelector: #visitBlockNode:! RBSemanticAnnotator removeSelector: #visitArgumentNodes:! RBSemanticAnnotator removeSelector: #undeclaredVariable:! RBSemanticAnnotator removeSelector: #start:scope:! RBSemanticAnnotator removeSelector: #start:! RBSemanticAnnotator removeSelector: #scope:with:during:! Smalltalk globals removeClassNamed: #RBSemanticAnnotator! RBUndeclaredVariableNotification removeSelector: #node:! RBUndeclaredVariableNotification removeSelector: #node! RBUndeclaredVariableNotification removeSelector: #defaultAction! RBUndeclaredVariableNotification class removeSelector: #node:! Smalltalk globals removeClassNamed: #RBUndeclaredVariableNotification! ----End fileIn----! ----QUIT----an Array(22 May 2013 4:34:59 pm) Pharo.image priorSource: 5430613! ----STARTUP----an Array(22 May 2013 4:42:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 4:42:20 pm) Pharo-30159.image priorSource: 5451465! ----STARTUP----an Array(22 May 2013 5:17:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/22/2013 17:15' prior: 38985342! commentForCurrentUpdate ^ '10716 update shrinking methods https://pharo.fogbugz.com/f/cases/10716 7382 TextModel should allow users to cancel/validate an accept action https://pharo.fogbugz.com/f/cases/7382 10725 unify #binding, #variableBinding and #ocBinding https://pharo.fogbugz.com/f/cases/10725'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/22/2013 17:16'! script257 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.1.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/22/2013 17:16'! update30160 "self new update30160" self withUpdateLog: '10716 update shrinking methods https://pharo.fogbugz.com/f/cases/10716 7382 TextModel should allow users to cancel/validate an accept action https://pharo.fogbugz.com/f/cases/7382 10725 unify #binding, #variableBinding and #ocBinding https://pharo.fogbugz.com/f/cases/10725'. self loadTogether: self script257 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 5/22/2013 16:51' prior: 35977911! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVar: name. var ifNotNil: [ self variable: aVariableNode shadows: var. (var scope ~= scope and: [ scope isOptimizedBlockScope not ]) ifTrue: [ "Create new var that shadows outer one" var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode binding: var. ^ var! ! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 38908697! uninitializedVariable: variableNode variableNode binding markRead. ^ OCUninitializedVariableWarning new node: variableNode; compilationContext: compilationContext; signal! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/22/2013 16:51' prior: 35548529! visitAssignmentNode: anAssignmentNode | var | self visitNode: anAssignmentNode value. var := (self lookupVariableForWrite: anAssignmentNode variable) ifNil: [self undeclaredVariable: anAssignmentNode variable]. var markWrite. anAssignmentNode variable binding: var. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 35551021! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [:node | self declareVariableNode: node]. aSequenceNode parent isMethod ifTrue: [ (aSequenceNode parent pragmas detect: [:pragma | pragma isPrimitiveError] ifNone: [nil]) ifNotNil: [:pragma | self declareVariableNode: (RBVariableNode named: pragma arguments last value asString)]]. aSequenceNode statements do: [:each | self visitNode: each]. aSequenceNode temporaries do: [:node | node binding isUnused ifTrue: [self unusedVariable: node]]. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/22/2013 16:51' prior: 35551645! visitVariableNode: aVariableNode | var | var := (self lookupVariableForRead: aVariableNode) ifNil: [(self undeclaredVariable: aVariableNode)]. "written variables in loops need special care... needs to be checked" (var isTemp and: [var isEscaping and: [scope outerScope isInsideOptimizedLoop]]) ifTrue: [ var isWrite ifTrue: [var markEscapingWrite]. var isRead ifTrue: [var markEscapingRead]]. aVariableNode binding: var. var isUninitialized ifTrue: [self uninitializedVariable: aVariableNode].! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 35047619! testExampleSelf | ast assignment vars | ast := (OCOpalExamples>>#exampleSelf) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'self') isSelf. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value binding isSelf.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 35048127! testExampleSuper | ast assignment vars | ast := (OCOpalExamples>>#exampleSuper) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'super') isSuper. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value binding isSuper.! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 35048640! testExampleThisContext | ast assignment vars | ast := (OCOpalExamples>>#exampleThisContext) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: (ast scope lookupVar: 'thisContext') isContext. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. self assert: assignment value binding isContext.! ! !OCASTClosureAnalyzer methodsFor: 'visiting' stamp: 'MarcusDenker 5/22/2013 16:51' prior: 36541264! visitVariableNode: aVariableNode "re-lookup the temorary variables..." | var | aVariableNode isTemp ifFalse: [^self]. var := scope lookupVar: aVariableNode name. aVariableNode binding: var. var isTempVectorTemp ifTrue: [scope addCopyingTempToAllScopesUpToDefVector: var vectorName]. var isCopying ifTrue: [scope addCopyingTempToAllScopesUpToDefTemp: var].! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'MarcusDenker 5/22/2013 16:48' prior: 35486391! acceptAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable binding accept: self assign: value. ^ value! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'MarcusDenker 5/22/2013 16:49' prior: 35489579! acceptVariableNode: aVariableNode ^ aVariableNode binding readWith: self ! ! !ASTInterpreter methodsFor: 'slots' stamp: 'MarcusDenker 5/22/2013 16:49' prior: 38913819! readArgumentAt: index node: aVariableNode | variableContext | variableContext := self context. [ variableContext code = aVariableNode binding definingScope node ] whileFalse: [ variableContext := variableContext homeContext. self assert: variableContext isNil not ]. ^ variableContext arguments at: index! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/22/2013 16:49' prior: 38914266! visitAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable binding accept: self assign: value inNode: variable. ^ value! ! !ASTInterpreter methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 38914609! visitVariableNode: aVariableNode ^ aVariableNode binding readWith: self inNode: aVariableNode! ! !TextModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/19/2013 13:37' prior: 35886368! accept: aText notifying: aNotifyier | accept | accept := actionToPerformHolder contents cull: aText cull: aNotifyier. accept == false ifTrue: [ ^ self ]. textHolder contents: aText. "Dummy changed to raise an announcement" actionPerformedHolder contents: aText. self changed: #clearUserEdits.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:38' prior: 52747787! acceptBlock: aBlockWithOneArgument "Set the block to perform when the text is accepted. The block must have one argument, which will be the accepted text. The block can return false if the candidate text is to be rejected" actionToPerformHolder contents: aBlockWithOneArgument! ! !OCTempVariable methodsFor: '*AST-Interpreter-Core' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 38911808! readWith: anInterpreter inNode: aVariableNode self isArg ifTrue: [ | definingScope argIndex | definingScope := aVariableNode binding definingScope. 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! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/22/2013 16:50'! binding ^self propertyAt: #binding ifAbsent: [nil].! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/22/2013 16:51'! binding: aSemVar aSemVar ifNil: [^self removeProperty: #binding ifAbsent: []]. self propertyAt: #binding put: aSemVar.! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34780380! isArg ^self binding isArg! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34780626! isInstance ^self binding isInstance! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34780757! isTemp ^self binding isTemp! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34759010! emitIfNilIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args last arguments ifNotEmpty: [ args last arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #notNilCase if: false. valueTranslator visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #notNilCase. valueTranslator visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34759654! emitIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #notNil if: false. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #notNil. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34760259! emitIfNotNilIfNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #else if: true. valueTranslator visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. valueTranslator visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34762200! emitToByDo: aMessageNode | limit step block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. step := aMessageNode arguments second. step isLiteral ifFalse: [self error: 'should not have been inlined']. step := step value. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. "loop" methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: (step > 0 ifTrue: [#<=] ifFalse: [#>=]). methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: step. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34763610! emitToDo: aMessageNode | limit block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: #<=. methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: 1. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 38897555! visitAssignmentNode: anAssignmentNode valueTranslator visitNode: anAssignmentNode value. anAssignmentNode variable binding emitStore: methodBuilder ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 38903327! visitVariableNode: aVariableNode aVariableNode binding emitValue: methodBuilder ! ! !SmalltalkImage methodsFor: 'PharoKernel' stamp: 'PavelKrivanek 5/21/2013 19:47' prior: 33493807! kernelPackageNames ^ #('AST-Core' 'AST-Semantic' 'Announcements-Core' 'Announcements-Core' 'Collections-Abstract' 'Collections-Arithmetic' 'Collections-Arrayed' 'Collections-Atomic' 'Collections-Native' 'Collections-Sequenceable' 'Collections-Stack' 'Collections-Streams' 'Collections-Strings' 'Collections-Support' 'Collections-Text' 'Collections-Traits' 'Collections-Unordered' 'Collections-Weak' 'Compiler' 'Compression' 'Files' 'Graphics-Display Objects' 'Graphics-Primitives' 'Graphics-Transformations' 'Kernel' 'Multilingual-Encodings' 'Multilingual-Languages' 'Multilingual-TextConversion' 'System-Changes' 'System-CommandLine' 'System-Clipboard' 'System-FileRegistry' 'System-Finalization' 'System-Localization' 'System-Object Events' 'System-Platforms' 'System-Support' 'Text-Core' 'Traits' 'UIManager' 'Transcript' 'FileSystem-AnsiStreams' 'FileSystem-Core' 'FileSystem-Disk' 'FileSystem-Memory' 'CodeImport' 'Regex-Core' 'SystemProgress' 'System-Announcements' 'Ring-Core-Kernel' 'Ring-Core-Containers' 'Kernel-Pragmas' 'Kernel-Pragmas' 'System-PragmaCollector' 'OpalCompiler-Core')! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'PavelKrivanek 5/21/2013 19:46' prior: 34638326! privShrinkingProcessWith: additionalPackageNames [ | packages | 10 timesRepeat: [ (Delay forMilliseconds: 100) wait. Processor yield ]. Author fullName: 'Mr.Shrinker'. self privCleanMonticello. UIManager default: DummyUIManager new. UIManager default progressBarEnabled: false. self privCleanProcesses. self privCleanGlobals. 5 timesRepeat: [Smalltalk garbageCollect]. (Smalltalk classNamed: #MCDataStream) initialize. Beeper instVarNamed: #default put: nil. Smalltalk cleanOutUndeclared. 5 timesRepeat: [Smalltalk garbageCollect]. Author reset. (Smalltalk classNamed: #KMPragmaKeymapBuilder) release. "self privShrinkUnicodeTables." Display newDepth: 1. self privCleanStartUpList. self privCleanShutDownList. "CommandLine removeRegistrationNamed: #BasicCodeLoader. SimpleCodeLoader register. " "move class Model to different category" Object subclass: #Model instanceVariableNames: 'dependents' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Objects'. self privCleanTextConstants. (Smalltalk classNamed: #SoundService) default: nil. (Smalltalk classNamed: #SoundService) unregister: (Smalltalk classNamed: #DummySoundSystem). ThreadSafeTranscript install. self privCleanUnloadMethods. (Smalltalk classNamed: #RPackageOrganizer) unregisterInterestToSystemAnnouncement. SystemNavigation new removeAllButPackages: self kernelPackageNames, additionalPackageNames. Smalltalk flushClassNameCache. 3 timesRepeat: [ Smalltalk garbageCollect. Symbol compactSymbolTable.]. Undeclared removeUnreferencedKeys. self privRecompileAll. self privCleanChangeSets. FileServices removeObsolete. Object flushEvents. (Smalltalk classNamed: #MCDataStream) initialize. Locale classPool at: #LocaleChangeListeners put: nil. SmalltalkImage classPool at: #Tools put: nil. Behavior flushObsoleteSubclasses. Smalltalk flushClassNameCache. Smalltalk organization removeEmptyCategories. WeakArray restartFinalizationProcess. SmalltalkImage current fixObsoleteReferences. "UIManager default progressBarEnabled: true." "Smalltalk condenseChanges." Smalltalk saveImageInNewContext. ] ifError: [:e | | rep | rep := FileStream forceNewFileNamed: 'PharoDebug.log'. rep nextPutAll: 'PharoKernel shrinking report'; cr. rep nextPutAll: 'Error:'; cr. rep nextPutAll: e asString; cr. rep nextPutAll: thisContext stack size asString. thisContext stack copy withIndexDo: [:stck :i | [ rep nextPutAll: i asString; space; nextPutAll: stck asString; cr] ifError: []]. rep close. Smalltalk exitFailure ] ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/22/2013 16:51' prior: 38924192! substituteVariable: varName atInterval: anInterval self substituteWord: varName wordInterval: anInterval offset: 0. self methodNode source: self requestor text. node replaceWith:((RBVariableNode named: varName) binding: (node owningScope lookupVar: varName)). ^ (node owningScope lookupVar: varName) ifNil: [self error: 'should be found']. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - optimized blocks' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 37283664! testExampleSimpleBlockLocalIf | ast assignment var | ast := (OCOpalExamples>>#exampleSimpleBlockLocalIf) parseTree. ast doSemanticAnalysis. assignment := RBParseTreeSearcher treeMatching: '`var := ``@anything' in: ast. var := assignment variable binding. self assert: var isWrite. self deny: var isEscaping.! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 34773906! emitIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #end if: true. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTarget: #end. ! ! RBVariableNode removeSelector: #ocBinding:! RBVariableNode removeSelector: #ocBinding! "AST-Interpreter-Core"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Spec-Widgets"! "System-Support"! ----End fileIn----! ----QUIT----an Array(22 May 2013 5:18:02 pm) Pharo.image priorSource: 5451661! ----STARTUP----an Array(22 May 2013 5:25:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 May 2013 5:25:11 pm) Pharo-30160.image priorSource: 5480992! ----STARTUP----an Array(23 May 2013 11:51:45 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/23/2013 11:49' prior: 39006390! commentForCurrentUpdate ^ '10720 Morphic-Base classes have extension methods of Morphic https://pharo.fogbugz.com/f/cases/10720 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/23/2013 11:49'! script258 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.105.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/23/2013 11:49'! update30161 "self new update30161" self withUpdateLog: '10720 Morphic-Base classes have extension methods of Morphic https://pharo.fogbugz.com/f/cases/10720 '. self loadTogether: self script258 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PluggableMenuItemSpec methodsFor: 'Morphic-Base-Menus' stamp: 'EstebanLorenzano 1/30/2013 16:45' prior: 29476568! asMenuItemMorphFrom: parentMenu isLast: aBoolean | it act lbl menu | it := self morphClass new. lbl := self label ifNil: ['']. "here checked can be nil, true, false" checked notNil ifTrue: [ lbl := self hasCheckBox -> lbl]. it contents: lbl. it icon: self icon. it keyText: self keyText. it isEnabled: self enabled. (act := self action) ifNotNil: [ it target: act receiver; selector: act selector; arguments: act arguments ]. (menu := self subMenu) ifNotNil: [ self enabled ifTrue: [ it subMenu: (menu asMenuMorph) ]]. parentMenu ifNotNil: [ parentMenu addMorphBack: it ]. aBoolean ifFalse: [ self separator ifTrue: [ parentMenu addLine ] ]. ^it! ! !PluggableMenuItemSpec methodsFor: 'Morphic-Base-Menus' stamp: 'StephaneDucasse 6/10/2011 22:14' prior: 29477353! morphClass ^ ToggleMenuItemMorph! ! !PluggableMenuSpec methodsFor: 'Morphic-Base-Menus' stamp: 'MarcusDenker 9/26/2011 10:51' prior: 29481356! asMenuMorph | prior menu myitems | prior := parentMenu. parentMenu := menu := self morphClass new. self label ifNotNil: [parentMenu addTitle: self label]. prior ifNil: [menu addStayUpIcons]. myitems := self items. myitems do:[:each| each asMenuItemMorphFrom: parentMenu isLast: (each = myitems last)]. parentMenu := prior. ^menu! ! !PluggableMenuSpec methodsFor: 'Morphic-Base-Menus' stamp: 'BenjaminVanRyseghem 4/17/2011 15:06' prior: 29481793! buildWith: aBuilder ^ self asMenuMorph! ! !PluggableMenuSpec methodsFor: 'Morphic-Base-Menus' stamp: 'BenjaminVanRyseghem 4/11/2011 19:34' prior: 29481932! morphClass ^ MenuMorph! ! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(23 May 2013 11:51:55 am) Pharo.image priorSource: 5481188! ----STARTUP----an Array(23 May 2013 11:58:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 May 2013 11:58:55 am) Pharo-30161.image priorSource: 5493235! ----STARTUP----an Array(23 May 2013 12:57:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/23/2013 12:56' prior: 39035922! commentForCurrentUpdate ^ '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/23/2013 12:56'! script259 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.107.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/23/2013 12:56'! update30162 "self new update30162" self withUpdateLog: '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 '. self loadTogether: self script259 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DefaultCommandLineHandler class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 5/23/2013 12:51' prior: 38473345! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. #ToolRegistry asClassIfPresent: [ "This is a hack for PharoKernel" Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ] ]. WorldState addDeferredUIMessage: [ self new activate ]! ! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(23 May 2013 12:57:51 pm) Pharo.image priorSource: 5493433! ----STARTUP----an Array(23 May 2013 1:05:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 May 2013 1:05:02 pm) Pharo-30162.image priorSource: 5504201! ----STARTUP----an Array(23 May 2013 1:37:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/23/2013 13:36' prior: 39048168! commentForCurrentUpdate ^ '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 (second attempt) 10729 ShrinkingCommandLineHandler https://pharo.fogbugz.com/f/cases/10729 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/23/2013 13:36'! script260 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.2.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.90.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.109.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.539.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/23/2013 13:36'! update30163 "self new update30163" self withUpdateLog: '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 (second attempt) 10729 ShrinkingCommandLineHandler https://pharo.fogbugz.com/f/cases/10729 '. self loadTogether: self script260 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ShrinkingCommandLineHandler commentStamp: '' prior: 0! Usage: save [--keep] --keep keep additional packages package names that will be left in the image WARNING: THIS ARGUMENT WILL DESTROY YOUR IMAGE Use with cation and only on fresh Pharo images Documentation: Shrink the fresh Pharo image to contain only basic kernel packages Examples: # shrink to kernel packages pharo Pharo.image # shrink to kernel and keep listed packages in the image pharo Pharo.image --keep Tanker TankerCommandLineHandler Slot! !DefaultCommandLineHandler class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 5/23/2013 13:30' prior: 39058293! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. #ToolRegistry asClassIfPresent: [ "This is a hack for PharoKernel" Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ] ]. Smalltalk addDeferredStartupAction: [ self new activate ]! ! !ShrinkingCommandLineHandler commentStamp: '' prior: 39069391! Usage: save [--keep] --keep keep additional packages package names that will be left in the image WARNING: THIS ARGUMENT WILL DESTROY YOUR IMAGE Use with cation and only on fresh Pharo images Documentation: Shrink the fresh Pharo image to contain only basic kernel packages Examples: # shrink to kernel packages pharo Pharo.image # shrink to kernel and keep listed packages in the image pharo Pharo.image --keep Tanker TankerCommandLineHandler Slot! !ShrinkingCommandLineHandler class methodsFor: 'accessing' stamp: 'PavelKrivanek 5/23/2013 13:00'! commandName ^ 'shrink'! ! !ShrinkingCommandLineHandler class methodsFor: 'accessing' stamp: 'PavelKrivanek 5/23/2013 13:00'! description ^ 'Shrink the image to Pharo Kernel'! ! !ShrinkingCommandLineHandler methodsFor: 'activation' stamp: 'PavelKrivanek 5/23/2013 13:00'! activate self activateHelp ifTrue: [ ^ self ]. (self hasOption: 'keep') ifTrue: [ Smalltalk shrinkToKernelWith: self arguments. ^ self exitSuccess ]. self hasArguments ifFalse: [ Smalltalk shrinkToKernel. ^ self exitSuccess ]. self printHelp. ^ self exitFailure ! ! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(23 May 2013 1:37:51 pm) Pharo.image priorSource: 5504398! ----STARTUP----an Array(23 May 2013 1:44:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 May 2013 1:44:50 pm) Pharo-30163.image priorSource: 5517172! ----STARTUP----an Array(24 May 2013 12:03:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/24/2013 11:55' prior: 39059131! commentForCurrentUpdate ^ '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 first part, I needed to split the update :('! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/24/2013 11:55'! script261 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.114.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-EstebanLorenzano.542.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/24/2013 11:55'! update30164 "self new update30164" self withUpdateLog: '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 first part, I needed to split the update :('. self loadTogether: self script261 merge: false. Smalltalk removeFromStartUpList: DefaultCommandLineHandler. self flushCaches. ! ! "ScriptLoader30"! !BasicCommandLineHandler commentStamp: '' prior: 0! I'm a command line handler who is not aware of any UI or Tools present in the system. I'm used as base handler for loading executing stripped images (kernel images, for example). My usage is the same as PharoCommandLineHandler, see his comment as better explanation.! !DefaultCommandLineHandler commentStamp: '' prior: 20611983! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A DefaultCommandLineHandler handles default command line arguments and options. The DefaultCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !PharoCommandLineHandler commentStamp: '' prior: 0! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A DefaultCommandLineHandler handles default command line arguments and options. The DefaultCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !StartupLoader class methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/23/2013 16:12' prior: 50900287! initialize super initialize. Smalltalk addToStartUpList: self ! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/23/2013 14:37' prior: 19739905! testResponsibilityDefault | args | args := self argumentsWith: #('--help'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (BasicCodeLoader isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/23/2013 14:37' prior: 19740254! testResponsibilityEval | args | args := self argumentsWith: #('eval' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (BasicCodeLoader isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('-e' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (BasicCodeLoader isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('--evaluate' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (BasicCodeLoader isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/23/2013 14:37' prior: 19741080! testResponsibilitySt | args | args := self argumentsWith: #('/foo/bar/myScript.st'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self assert: (BasicCodeLoader isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('st' '/foo/bar/myScript.st'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self assert: (BasicCodeLoader isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !BasicCommandLineHandler commentStamp: '' prior: 39082327! I'm a command line handler who is not aware of any UI or Tools present in the system. I'm used as base handler for loading executing stripped images (kernel images, for example). My usage is the same as PharoCommandLineHandler, see his comment as better explanation.! !BasicCommandLineHandler class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/23/2013 14:28'! commandName ^ ''! ! !BasicCommandLineHandler class methodsFor: 'handler selection' stamp: 'EstebanLorenzano 5/23/2013 14:30'! description ^ 'basic responsible for the default options and activating other commands'! ! !BasicCommandLineHandler class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 5/23/2013 16:16'! initialize "hook into the startup list" Smalltalk addToStartUpList: self after: StartupLoader! ! !BasicCommandLineHandler class methodsFor: 'handler selection' stamp: 'EstebanLorenzano 5/23/2013 15:10'! isResponsibleFor: aCommandLine "I do not match ever, because my activation is manual" ^ false! ! !BasicCommandLineHandler class methodsFor: 'handler selection' stamp: 'EstebanLorenzano 5/23/2013 14:51'! priority "Highest priority" ^ Float infinity negated! ! !BasicCommandLineHandler class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 5/23/2013 14:31'! startUp: resuming "only handle when lauching a new image" resuming ifFalse: [ ^ self ]. Smalltalk addDeferredStartupAction: [ self new activate ] ! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 15:31'! activate self arguments ifEmpty: [ ^ self ]. [ self handleArgument: self arguments first ] on: Exit do: [ :exit | ^ self handleExit: exit ]! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 14:27'! activateSubCommand: aCommandLinehandler [ aCommandLinehandler activateWith: commandLine ] on: Exit do: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ]. "the return value of this method is used to check if the subcommand was successfull" ^ aCommandLinehandler! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'EstebanLorenzano 5/23/2013 14:27'! copyright self stdout nextPutAll: Smalltalk licenseString; cr. self quit.! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'EstebanLorenzano 5/23/2013 14:27'! error self arguments size = 1 ifTrue: [ (self arguments first beginsWith: '-') ifTrue: [ self << 'Invalid option: '] ifFalse: [ self << 'Invalid sub command: ']] ifFalse: [ self << 'Invalid arguments: "']. (self << (' ' join: self arguments)) nextPutAll: '"'; cr. self printHelp. self exitFailure.! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 15:29'! handleArgument: aString "give priority to subcommands" self handleSubcommand == self ifFalse: [ ^ self ]. "check for default options" aString = '--version' ifTrue: [ ^ self version ]. aString = '--help' ifTrue: [ ^ self help ]. aString = '--list' ifTrue: [ ^ self list ]. aString = '--copyright' ifTrue: [ ^ self copyright ]. "none of the previous options matched hence we output an error message" self error.! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 14:27'! handleExit: exit ^ self handleExit: exit for: self! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 14:27'! handleExit: exit for: aCommandLinehandler Smalltalk isInteractive ifFalse: [ ^ exit pass ]. exit isSuccess ifFalse: [ ^ Error signal: exit messageText ]. self inform: aCommandLinehandler name, ' successfully finished'. "for failing subcommands return self which is used to check if the subcommand failed" exit isSuccess ifTrue: [ ^ aCommandLinehandler ].! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'EstebanLorenzano 5/23/2013 15:33'! handleSubcommand "check if there is an active subcommand" | handlers | handlers := self selectHandlers. "If there is no handler, use myself" handlers ifEmpty: [ ^ self ]. ^self activateSubCommand: handlers first . ! ! !BasicCommandLineHandler methodsFor: 'initialize-release' stamp: 'EstebanLorenzano 5/23/2013 14:27'! initialize super initialize. commandLine := CommandLineArguments new! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'EstebanLorenzano 5/23/2013 14:27'! list | handlers shortNames maxShortNameSize | self stdout nextPutAll: 'Currently installed Command Line Handlers:'; lf. handlers := self allHandlers reject: [ :cls| cls = self class ]. shortNames := handlers collect: #commandName. maxShortNameSize := (shortNames detectMax: [ :name| name size ]) size. handlers do: [ :handler| self stdout nextPutAll: ' '; nextPutAll: (handler commandName padRightTo: maxShortNameSize); nextPutAll: ' '; nextPutAll: (handler description ifNil: [ '--']); lf]. self quit.! ! !BasicCommandLineHandler methodsFor: 'private' stamp: 'EstebanLorenzano 5/23/2013 15:07'! selectHandlers | handlers | handlers := (CommandLineHandler selectHandlersFor: commandLine) copyWithout: self class. handlers := (handlers sort: [ :a :b| a priority >= b priority ]). ^ handlers! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'EstebanLorenzano 5/23/2013 14:27'! version self stdout nextPutAll: 'Image: '; print: SystemVersion current; cr; nextPutAll: 'VM: '; nextPutAll: Smalltalk vm version; cr. self quit.! ! !DefaultCommandLineHandler commentStamp: '' prior: 39082670! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A DefaultCommandLineHandler handles default command line arguments and options. The DefaultCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !DefaultCommandLineHandler class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/24/2013 11:50'! activateWith: aCommandLine Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. "Make sure that the PharoCommandLineHandler starts at the top of the stack in the main UI thread." WorldState addDeferredUIMessage: [ super activateWith: aCommandLine ]! ! !DefaultCommandLineHandler class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/24/2013 11:50' prior: 20616367! description ^ 'responsible for the default options and activating other commands'! ! !DefaultCommandLineHandler class methodsFor: 'handler selection' stamp: 'EstebanLorenzano 5/24/2013 11:50' prior: 20616558! isResponsibleFor: aCommandLine "I do not match ever, because my activation is manual" ^ true! ! !PharoCommandLineHandler commentStamp: '' prior: 39083302! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A DefaultCommandLineHandler handles default command line arguments and options. The DefaultCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !PharoCommandLineHandler class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/23/2013 15:34'! activateWith: aCommandLine Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. "Make sure that the PharoCommandLineHandler starts at the top of the stack in the main UI thread." WorldState addDeferredUIMessage: [ super activateWith: aCommandLine ]! ! !PharoCommandLineHandler class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/23/2013 14:28'! description ^ 'responsible for the default options and activating other commands'! ! !PharoCommandLineHandler class methodsFor: 'handler selection' stamp: 'EstebanLorenzano 5/23/2013 15:15'! isResponsibleFor: aCommandLine "I do not match ever, because my activation is manual" ^ true! ! !ConfigurationCommandLineHandlerTest methodsFor: 'convenience' stamp: 'EstebanLorenzano 5/23/2013 14:37' prior: 20082583! activate: arguments ^ PharoCommandLineHandler activateWith: (self argumentsWith: arguments)! ! DefaultCommandLineHandler removeSelector: #version! DefaultCommandLineHandler removeSelector: #selectHandlers! DefaultCommandLineHandler removeSelector: #list! DefaultCommandLineHandler removeSelector: #initialize! DefaultCommandLineHandler removeSelector: #handleSubcommand! DefaultCommandLineHandler removeSelector: #handleExit:for:! DefaultCommandLineHandler removeSelector: #handleExit:! DefaultCommandLineHandler removeSelector: #handleArgument:! DefaultCommandLineHandler removeSelector: #error! DefaultCommandLineHandler removeSelector: #copyright! DefaultCommandLineHandler removeSelector: #activateSubCommand:! DefaultCommandLineHandler removeSelector: #activate! DefaultCommandLineHandler class removeSelector: #startUp:! DefaultCommandLineHandler class removeSelector: #priority! DefaultCommandLineHandler class removeSelector: #initialize! DefaultCommandLineHandler class removeSelector: #commandName! "ConfigurationCommandLineHandler-Tests"! "StartupPreferences"! "System-CommandLine"! "Tests"! ----End fileIn----! ----QUIT----an Array(24 May 2013 12:03:56 pm) Pharo.image priorSource: 5517368! ----STARTUP----an Array(24 May 2013 12:11:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 May 2013 12:11:16 pm) Pharo-30164.image priorSource: 5541138! ----STARTUP----an Array(24 May 2013 12:39:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 5/24/2013 12:36' prior: 39072102! commentForCurrentUpdate ^ '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 second part '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 5/24/2013 12:36'! script262 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.83.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.26.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.41.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.516.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.83.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.116.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-EstebanLorenzano.542.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 5/24/2013 12:36'! update30165 "self new update30165" self withUpdateLog: '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 second part '. self loadTogether: self script262 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PharoCommandLineHandler commentStamp: '' prior: 39092965! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !PharoCommandLineHandler commentStamp: '' prior: 39106180! Usage: [] [--help] [--copyright] [--version] [--list] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers a valid subcommand in --list Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! DefaultCommandLineHandler class removeSelector: #isResponsibleFor:! DefaultCommandLineHandler class removeSelector: #description! DefaultCommandLineHandler class removeSelector: #activateWith:! Smalltalk globals removeClassNamed: #DefaultCommandLineHandler! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(24 May 2013 12:39:52 pm) Pharo.image priorSource: 5541336! ----STARTUP----an Array(24 May 2013 12:47:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 May 2013 12:47:09 pm) Pharo-30165.image priorSource: 5553252! ----STARTUP----an Array(25 May 2013 10:01:44 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/25/2013 09:59' prior: 39096071! commentForCurrentUpdate ^ '10674 Failing Regressiontest: MethodPragmaTest>>#testCompileInvalid https://pharo.fogbugz.com/f/cases/10674 10736 Fix shortcut for smart suggestions in mac https://pharo.fogbugz.com/f/cases/10736 10726 Enhance methods comments in FileSystem https://pharo.fogbugz.com/f/cases/10726'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/25/2013 09:59'! script263 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1461.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.823.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.26.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.116.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-EstebanLorenzano.542.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/25/2013 09:59'! update30166 "self new update30166" self withUpdateLog: '10674 Failing Regressiontest: MethodPragmaTest>>#testCompileInvalid https://pharo.fogbugz.com/f/cases/10674 10736 Fix shortcut for smart suggestions in mac https://pharo.fogbugz.com/f/cases/10736 10726 Enhance methods comments in FileSystem https://pharo.fogbugz.com/f/cases/10726'. self loadTogether: self script263 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FileSystemTest commentStamp: '' prior: 0! I am an abstract file system test. I directly test - the public interface of a FileSystem using these methods directly - the FileSystem in general through the operation methods of the FileReference! !MemoryStore methodsFor: 'private' stamp: 'CamilloBruni 5/24/2013 14:03' prior: 25436992! copy: sourcePath ifAbsent: absentBlock to: destinationPath ifPresent: presentBlock fileSystem: aFilesystem | sourceNode destinationNode | sourceNode := self nodeAt: sourcePath ifPresent: [ :source | source ] ifAbsent: [ ^ absentBlock value]. sourceNode isDirectory ifTrue: [ ^ absentBlock value ]. destinationNode := self nodeAt: destinationPath parent ifPresent: [ :destination | destination ] ifAbsent: [ ^ self signalDirectoryDoesNotExist: destinationPath parent ]. destinationNode isFile ifTrue: [ self signalDirectoryDoesNotExist: destinationPath parent ]. (destinationNode fileEntriesIncludes: destinationPath basename) ifTrue: [ "cannot overwrite existing file"^ presentBlock value ]. destinationNode fileEntryAt: destinationPath basename put: sourceNode copy ! ! !MemoryStore methodsFor: 'public' stamp: 'CamilloBruni 5/24/2013 14:01' prior: 25435204! delete: path self nodeAt: path parent ifPresent: [ :dict | dict fileEntryRemove: path basename ] ifAbsent: [ ]! ! !MemoryStore methodsFor: 'public' stamp: 'CamilloBruni 5/24/2013 14:05'! rename: sourcePath to: destinationPath | sourceEntry destinationParentEntry newName | sourceEntry := self nodeAt: sourcePath. newName := destinationPath basename. destinationParentEntry := self nodeAt: destinationPath parent. destinationParentEntry isDirectory ifFalse: [ Error signal: 'Copy destination has to be a directory' ]. destinationParentEntry fileEntryAt: newName ifPresent: [ Error signal: 'Destination file exists already' ]. destinationParentEntry fileEntryAt: newName put: sourceEntry. sourceEntry basename: newName. (self nodeAt: sourcePath parent) fileEntryRemove: sourcePath basename ! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 5/24/2013 14:03'! fileEntriesIncludes: aFileName ^ entries includesKey: aFileName! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 5/24/2013 13:59' prior: 25422495! fileEntryAt: aFileName ^ entries at: aFileName! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 5/24/2013 13:55' prior: 25422991! fileEntryAt: aFileName put: anEntry ^ entries at: aFileName ifAbsentPut: [ self modified. anEntry ]! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 5/24/2013 14:01'! fileEntryRemove: aFileName modificationTime := DateAndTime now. ^ entries removeKey: aFileName! ! !MethodPragmaTest methodsFor: 'testing-compiler' stamp: 'MarcusDenker 5/23/2013 09:48' prior: 26493483! testCompileInvalid "Invalid pragmas should properly raise an error." self should: [ self compile: '<>' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '<1>' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '<#123>' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '<<1>' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '<=2>' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '< =1 = >' selector: #zork ] raise: SyntaxErrorNotification. self should: [ self compile: '< =1 =2 >' selector: #zork ] raise: SyntaxErrorNotification.! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 17:24' prior: 17198854! createDirectory "Create a new repository and raise an error if the directory already exist." self resolve createDirectory! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 17:02' prior: 17198991! delete "Delete the receiver, does not raise an error if it is not present." ^ self resolve delete! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 17:03' prior: 17199112! deleteAll "delete this directory and all children of it, raise an error if the file does not exist." DeleteVisitor delete: self resolve! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 17:16' prior: 17199297! deleteAllChildren "delete all children of the receiver, raise an error if the receiver does not exist" self children do: [:aReference | aReference deleteAll ]! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 17:07' prior: 17199504! deleteIfAbsent: aBlock "Delete the receiver, when it does not exist evaluate the block" self resolve deleteIfAbsent: aBlock! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 19:11' prior: 17199786! ensureDirectory "Verifies that the directory does not exist and only creates if necessary. Do not remove files contained if they exist." ^ self resolve ensureDirectory! ! !AbstractFileReference methodsFor: 'operations' stamp: 'StephaneDucasse 5/22/2013 19:27' prior: 17200102! moveTo: aReference "Move the receiver in the location passed as argument. (FileSystem disk workingDirectory / 'paf' ) ensureFile. (FileSystem disk workingDirectory / 'fooFolder') ensureDirectory. (FileSystem disk workingDirectory / 'paf' ) moveTo: (FileSystem disk workingDirectory / 'fooFolder' / 'paf') " ^ self resolve moveTo: aReference! ! !FileSystemStore methodsFor: 'public' stamp: 'CamilloBruni 5/24/2013 13:47'! nodeAt: aPath ^ self nodeAt: aPath ifPresent: [ :node| node ] ifAbsent: [ NotFound signalFor: aPath in: self ]! ! !FileSystemStore methodsFor: 'abstract' stamp: 'CamilloBruni 5/24/2013 13:39'! rename: sourcePath to: destinationPath self subclassResponsibility ! ! !FileSystem methodsFor: 'public-testing' stamp: 'EstebanLorenzano 8/2/2012 15:42' prior: 22016388! isSymlink: aResolvable "Resolve the argument, and answer true if the result refers to a directory, false if it refers to a file or doesn't exist." ^ store isSymlink: (self resolve: aResolvable)! ! !FileSystemTest commentStamp: '' prior: 39118608! I am an abstract file system test. I directly test - the public interface of a FileSystem using these methods directly - the FileSystem in general through the operation methods of the FileReference! !FileSystemTest methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/24/2013 14:27'! markForCleanup: anObject toDelete add: (filesystem resolve: anObject)! ! !FileSystemTest methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/24/2013 14:28' prior: 22072739! tearDown toDelete select: [ :path | filesystem exists: path ] thenDo: [ :path | filesystem delete: path ]! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22073580! testChildrenAt | directory entries | directory := Path * 'plonk'. filesystem createDirectory: directory. filesystem createDirectory: directory / 'griffle'. filesystem createDirectory: directory / 'bint'. self markForCleanup: directory / 'griffle'. self markForCleanup: directory / 'bint'. self markForCleanup: directory. entries := filesystem childrenAt: directory. self assert: entries size = 2. entries do: [ :ea | self assert: (ea isKindOf: Path). self assert: ea parent = (filesystem resolve: directory). self assert: (#('griffle' 'bint' ) includes: ea basename) ]! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:30' prior: 22074230! testCopy | out in contents | self markForCleanup: 'gooly'; markForCleanup: 'plonk'. out := filesystem writeStreamOn: 'gooly'. [ out nextPutAll: 'gooly' ] ensure: [ out close ]. filesystem copy: 'gooly' to: 'plonk'. in := filesystem readStreamOn: 'plonk'. contents := [ in contents asString ] ensure: [ in close ]. self assert: contents equals: 'gooly'! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:30' prior: 22074682! testCopyDestExists | out | self markForCleanup: 'gooly'; markForCleanup: 'plonk'. out := (filesystem open: 'gooly' writable: true) writeStream. [out nextPutAll: 'gooly'] ensure: [out close]. (filesystem open: 'plonk' writable: true) writeStream close. self should: [filesystem copy: 'gooly' to: 'plonk'] raise: FileExists! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:30' prior: 22075298! testCreateDirectoryExists | path | path := Path * 'griffle'. self markForCleanup: path. filesystem createDirectory: path. self should: [filesystem createDirectory: path] raise: DirectoryExists. ! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:39' prior: 22076108! testDirectory | path | path := Path * 'plonk'. self markForCleanup: path. filesystem createDirectory: path. self assert: (filesystem exists: path). self assert: (filesystem isDirectory: path). filesystem delete: path. self deny: (filesystem isFile: path). self deny: (filesystem exists: path)! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:31' prior: 22076464! testEnsureDirectory | path | path := Path * 'plonk'. self markForCleanup: path. filesystem ensureDirectory: path. self assert: (filesystem isDirectory: path).! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:31' prior: 22076702! testEnsureDirectoryCreatesParent | path | path := Path * 'plonk' / 'griffle'. self markForCleanup: path. self markForCleanup: path parent. self shouldnt: [filesystem ensureDirectory: path] raise: FileSystemError. self assert: (filesystem isDirectory: (Path * 'plonk')). self assert: (filesystem isDirectory: path). ! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:31' prior: 22077097! testEnsureDirectoryExists | path | path := Path * 'plonk'. self markForCleanup: path. filesystem createDirectory: path. self shouldnt: [filesystem ensureDirectory: path] raise: FileSystemError. ! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:31' prior: 22077374! testEntriesAt | directory entries | directory := Path * 'plonk'. filesystem createDirectory: directory. filesystem createDirectory: directory / 'griffle'. filesystem createDirectory: directory / 'bint'. self markForCleanup: directory / 'griffle'; markForCleanup: directory / 'bint'; markForCleanup: directory. entries := filesystem entriesAt: directory. self assert: entries size = 2. entries do: [ :ea | self assert: (ea isKindOf: FileSystemDirectoryEntry). self assert: ea reference parent path = (filesystem resolve: directory). self assert: (#('griffle' 'bint' ) includes: ea reference basename). self assert: ea isDirectory ]! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:31' prior: 22078099! testEntryAt | path now entry then | then := DateAndTime now - 1 asSeconds. path := Path * 'plonk'. filesystem createDirectory: path. self markForCleanup: path. entry := filesystem entryAt: path. now := (DateAndTime now + 1 asSeconds). self assert: entry isDirectory. self assert: entry reference = (filesystem referenceTo: path) asAbsolute. self assert: entry creationTime >= then. self assert: entry creationTime <= now. self assert: entry modificationTime >= then. self assert: entry modificationTime <= now.! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:40' prior: 22078691! testFile | path | path := Path * 'gooly'. self markForCleanup: path. (filesystem open: path writable: true) writeStream close. self assert: (filesystem exists: path). self deny: (filesystem isDirectory: path). self assert: (filesystem isFile: path). filesystem delete: path. self deny: (filesystem exists: path)! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:45'! testMoveTo | base file folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureDirectory. file := (base / 'file') ensureFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). file moveTo: (folder / 'newFile'). self deny: (base / 'file') exists. self assert: (folder / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:47'! testMoveToFailingExistingDestination | base file folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureDirectory. (folder / 'newFile') ensureFile. file := (base / 'file') ensureFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). "Destination exists already" self should: [ file moveTo: (folder / 'newFile') ] raise: Error. self assert: (base / 'file') exists. self assert: (folder / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:48'! testMoveToFailingMissingDestination | base file | base := filesystem workingDirectory. file := (base / 'file') ensureFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). "Destination exists already" self deny: (base / 'folder') exists. self should: [ file moveTo: (base / 'folder' / 'newFile') ] raise: Error. self assert: (base / 'file') exists. self deny: (base / 'folder' / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 5/24/2013 14:49'! testMoveToFailingMissingSource | base folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureDirectory. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder'). self deny: (base / 'file') exists. "Destination exists already" self should: [ (base / 'file') moveTo: (folder / 'newFile') ] raise: Error. self deny: (base / 'file') exists. self deny: (folder / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22081294! testReadStream | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self should: [ reference readStream ] raise: FileDoesNotExist. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. self shouldnt: [ stream := reference readStream ] raise: FileDoesNotExist. self assert: stream contents asString equals: 'griffle'. stream close! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22081776! testReadStreamDo | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self should: [ reference readStreamDo: [ :stream | self assert: false ] ] raise: FileDoesNotExist. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. self assert: (reference readStreamDo: [ :stream | stream contents asString ]) = 'griffle'! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22082220! testReadStreamDoIfAbsent | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference readStreamDo: [ :stream | false ] ifAbsent: [ true ]). reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. self assert: (reference readStreamDo: [ :stream | stream contents asString = 'griffle' ] ifAbsent: [ false ])! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22082673! testReadStreamIfAbsent | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference readStreamIfAbsent: [ true ]). reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. stream := reference readStreamIfAbsent: [ false ]. self assert: stream contents asString = 'griffle'. stream close! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22083104! testWriteStream | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). stream := reference writeStream. stream nextPutAll: 'griffle'. stream close. self assert: (filesystem workingDirectory / 'griffle') isFile. stream := reference writeStream. stream close! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22083484! testWriteStreamDo | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference writeStreamDo: [ :stream | stream nextPutAll: 'griffle'. true ]). self assert: (filesystem workingDirectory / 'griffle') isFile. self assert: (reference writeStreamDo: [ :stream | true ])! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22083886! testWriteStreamDoIfPresent | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference writeStreamDo: [ :stream | stream nextPutAll: 'griffle'. true ] ifPresent: [ false ]). self assert: (filesystem workingDirectory / 'griffle') isFile. self assert: (reference writeStreamDo: [ :stream | true ] ifPresent: [ true ])! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 5/24/2013 14:27' prior: 22084350! testWriteStreamIfPresent | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). stream := reference writeStreamIfPresent: [ false ]. stream nextPutAll: 'griffle'. stream close. self assert: (filesystem workingDirectory / 'griffle') isFile. self assert: (reference writeStreamIfPresent: [ true ])! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/24/2013 13:00' prior: 38371783! buildSmartActionsShortcuts: aBuilder (aBuilder shortcut: #smartSuggestions) category: #SmalltalkEditor default: $t command mac| $t ctrl unix | $t ctrl | $1 ctrl do: [ :morph | morph smartSuggestions ] description: 'Browse suggestions based on selections'. ! ! MemoryFileSystemDirectory removeSelector: #remove:! MemoryFileSystemDirectory removeSelector: #includes:! FileSystemTest removeSelector: #delete:! "FileSystem-Core"! "FileSystem-Memory"! "FileSystem-Tests-Core"! "KernelTests"! "SmartSuggestions"! ----End fileIn----! ----QUIT----an Array(25 May 2013 10:01:54 am) Pharo.image priorSource: 5553450! ----STARTUP----an Array(25 May 2013 10:08:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 May 2013 10:08:55 am) Pharo-30166.image priorSource: 5583211! ----STARTUP----an Array(25 May 2013 1:16:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/25/2013 13:14' prior: 39108181! commentForCurrentUpdate ^ '10727 Cleaning trigger: use for deprecation of event https://pharo.fogbugz.com/f/cases/10727 6489 Spec-ify DropListModel / TextModel https://pharo.fogbugz.com/f/cases/close/6489 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/25/2013 13:14'! script264 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.469.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1463.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.309.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.116.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.543.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1130.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/25/2013 13:14'! update30167 "self new update30167" self withUpdateLog: '10727 Cleaning trigger: use for deprecation of event https://pharo.fogbugz.com/f/cases/10727 6489 Spec-ify DropListModel / TextModel https://pharo.fogbugz.com/f/cases/close/6489 '. self loadTogether: self script264 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DropListExample commentStamp: '' prior: 20971230! A DropListExample is a simple example of how to use drop lists. DropListExample new openWithSpec! !DropListItem commentStamp: '' prior: 20974360! A DropListItem is an item (wrapper) designed to fit into a DropList! !DropListMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:41' prior: 20996086! hideList "Hide the list." self listMorph ifNil: [^self]. self listVisible ifFalse: [^self]. self listMorph delete. self listMorph changeModelSelection: self listMorph selectionIndex. self roundedCorners: #(1 2 3 4). (self buttonMorph ifNil: [^self]) roundedCorners: (self roundedCorners copyWithoutAll: #(1 2)). self fillStyle: self fillStyleToUse. self wantsKeyboardFocus ifTrue: [self takeKeyboardFocus]! ! !DropListMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/24/2013 19:26' prior: 36858968! keyStroke: event "Pass on to the list." | indexToSelect | event keyCharacter = Character escape ifTrue: [ self hideList ]. (self navigationKey: event) ifTrue: [^self]. event keyCharacter == Character cr ifTrue: [ ^ self listSelectionIndex: self listSelectionIndex ]. indexToSelect := self listMorph keyStroke: event. "If the returned value is not an integer, do not handle it" indexToSelect isInteger ifFalse: [ ^ self ]. "If nothing found, do nothing" indexToSelect == 0 ifTrue: [ ^ self ]. self listSelectionIndex: indexToSelect! ! !DropListMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/19/2013 12:42' prior: 20993208! listMouseDown: evt "Click outside the list." (self listMorph fullContainsPoint: evt position) ifTrue: [ self listMorph selectionIndex: (self listMorph rowAtLocation: evt position) ]. self hideList! ! !DropListMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/19/2013 12:36' prior: 20987764! listSelectionIndex: anInteger "Set the list selection." self hideList. anInteger = 0 ifTrue: [^self]. listSelectionIndex := anInteger. self changed: #listSelectionIndex; updateContents; triggerEvent: #selectionIndex with: anInteger. self model ifNotNil: [:m | self setIndexSelector ifNotNil: [:s | self useSelectionIndex ifTrue: [m perform: s with: anInteger] ifFalse: [m perform: s with: self selectedItem]]]! ! !DropListMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/19/2013 12:33' prior: 20991940! newListMorph "Answer a new list morph" |m| m := (self listMorphClass on: self list: #list selected: #listSelectionIndex changeSelected: #listSelectionIndex: menu: nil keystroke: nil) autoDeselect: false; wrapSelector: #wrapItem:index:; roundedCorners: #(2 3); setProperty: #morphicLayerNumber toValue: 5; color: self color; borderStyle: (self theme dropListNormalListBorderStyleFor: self); on: #mouseDown send: #listMouseDown: to: self. ^m! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:29'! addItemLabeled: aString do: aBlock | item | item := DropListItem named: aString do: aBlock. "If you add directly in the contents, the update is not triggered from the value holder" listHolder add: item.! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/15/2013 20:54'! displayBlock: aBlock listHolder replace: [ :e | e display: aBlock; yourself ].! ! !DropListModel methodsFor: 'initialization' stamp: 'SeanDeNigris 4/17/2013 22:21' prior: 20976516! initialize "Initialization code for DropListModel" super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 12:46' prior: 20980508! internalResetSelection selectionHolder reset. self getList isEmpty not ifTrue: [ self silentlySetSelectedIndex: 1 ]! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/15/2013 20:34' prior: 20977531! items: aList "Populate the drop list with a list of DropItems" | dropListItems | dropListItems := aList collect: [ :e | DropListItem on: e do: [] ]. listHolder contents: dropListItems! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/17/2013 22:35' prior: 20977744! listItems "Return the list used to populate the drop list" ^ listHolder contents collect: [ :e | e model ].! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/17/2013 22:36' prior: 20978507! selectedItem ^ self selectedItemHolder contents model! ! !DropListModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/19/2013 12:31' prior: 20977227! setIndex: anIndex | item | selectionHolder index contents: anIndex. item := (listHolder contents at: anIndex ifAbsent: [ nil ]). item value. selectionHolder selection contents: item. self changed: #getIndex! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:30' prior: 20978691! setSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder contents at: anIndex ifAbsent: [ ^ self ]. selection value. selectionHolder index contents: anIndex. selectionHolder selection contents: selection! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 12:46'! silentlySetSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder contents at: anIndex ifAbsent: [ ^ self ]. selectionHolder index contents: anIndex. selectionHolder selection contents: selection! ! !DropListModel methodsFor: 'protocol-events' stamp: 'SeanDeNigris 4/15/2013 21:07' prior: 20979521! whenSelectedItemChanged: aBlock "Set a block to perform when the selected item is changed" selectionHolder selection whenChangedDo: [ :new :old :announcement :ann | aBlock cull: (new ifNotNil: [ :item | item model ]) cull: old cull: announcement cull: ann ]! ! !DropListExample commentStamp: '' prior: 39148360! A DropListExample is a simple example of how to use drop lists. DropListExample new openWithSpec! !DropListExample class methodsFor: 'specs' stamp: 'SeanDeNigris 4/17/2013 22:25' prior: 20973964! topSpec ^ { #Panel. #changeTableLayout. #listDirection:. #rightToLeft. #addMorph:. {#model. #uniformDropList.}. #addMorph:. {#model. #heterogeneousDropList.}. #hResizing:. #spaceFill. #vResizing:. #shrinkWrap. }! ! !DropListExample methodsFor: 'accessing' stamp: 'SeanDeNigris 4/17/2013 22:15'! heterogeneousDropList ^ heterogeneousDropList.! ! !DropListExample methodsFor: 'initialization' stamp: 'SeanDeNigris 4/17/2013 22:56' prior: 20972456! initializeWidgets self instantiateModels: #( uniformDropList #DropListModel heterogeneousDropList #DropListModel). uniformDropList items: {morph1. morph2. morph3}; displayBlock: [ :m | m color name capitalized, ' morph' ]; whenSelectedItemChanged: [ :m | container removeAllMorphs. container addMorph: m ]. heterogeneousDropList addItemLabeled: 'Open workspace' do: [ Workspace open ]; addItemLabeled: 'Inspect current morph' do: [ uniformDropList selectedItem inspect ]. "If this is uncommented, it will fire the action of the first item, which is not what we want: heterogeneousDropList setSelectedIndex: 1. same for: heterogeneousDropList setIndex: 1" self setFocus.! ! !DropListExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/24/2013 19:24' prior: 20973260! setFocus self focusOrder add: uniformDropList; add: heterogeneousDropList. ! ! !DropListExample methodsFor: 'accessing' stamp: 'SeanDeNigris 4/17/2013 22:24'! uniformDropList ^ uniformDropList! ! !DropListItem commentStamp: '' prior: 39148519! A DropListItem is an item (wrapper) designed to fit into a DropList! !DropListItem class methodsFor: 'instance creation' stamp: 'SeanDeNigris 4/17/2013 22:21' prior: 20975484! named: label do: aBlock ^ self new action: aBlock; model: label; display: [ :e | e ]; yourself! ! !DropListItem class methodsFor: 'instance creation' stamp: 'SeanDeNigris 4/15/2013 20:36'! on: anObject do: aBlock ^ self new action: aBlock; model: anObject; yourself! ! !DropListItem methodsFor: 'protocol' stamp: 'SeanDeNigris 4/15/2013 20:44'! display: aBlock "aBlock - 1 optional argument, which is the underlying item; returns the string to be displayed" displayBlock := aBlock.! ! !DropListItem methodsFor: 'initialization' stamp: 'SeanDeNigris 4/15/2013 21:32' prior: 20975064! initialize "Initialization code for DropListItem" super initialize. actionHolder := [] asValueHolder. displayBlock := [ :e | e printString ].! ! !DropListItem methodsFor: 'accessing' stamp: 'SeanDeNigris 4/15/2013 20:44' prior: 20974732! label ^ displayBlock cull: model.! ! !DropListItem methodsFor: 'accessing' stamp: 'SeanDeNigris 4/15/2013 20:44' prior: 20974792! label: anObject "For compatibility with old raw-string usage. Send #display: instead" displayBlock := [ anObject ].! ! !DropListItem methodsFor: 'accessing' stamp: 'SeanDeNigris 4/15/2013 21:05'! model ^ model.! ! !DropListItem methodsFor: 'private' stamp: 'SeanDeNigris 4/15/2013 20:40'! model: anObject model := anObject.! ! !Object methodsFor: 'deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 28618078! triggerEvent: anEventSelector ifNotHandled: anExceptionBlock "Evaluate all actions registered for . Return the value of the last registered action." self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^(self actionForEvent: anEventSelector ifAbsent: [^anExceptionBlock value]) value ! ! !Object methodsFor: 'deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 28619147! triggerEvent: anEventSelector with: anObject ifNotHandled: anExceptionBlock self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^self triggerEvent: anEventSelector withArguments: (Array with: anObject) ifNotHandled: anExceptionBlock! ! !Object methodsFor: 'deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 28618642! triggerEvent: anEventSelector withArguments: anArgumentList ifNotHandled: anExceptionBlock self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^(self actionForEvent: anEventSelector ifAbsent: [^anExceptionBlock value]) valueWithArguments: anArgumentList! ! DropListExample removeSelector: #redMorphBlock! DropListExample removeSelector: #greenMorphBlock! DropListExample removeSelector: #dropList! DropListExample removeSelector: #blueMorphBlock! EventManagerTest removeSelector: #testNoValueSupplier! "Kernel"! "Polymorph-Widgets"! "Spec-Examples"! "Spec-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(25 May 2013 1:16:56 pm) Pharo.image priorSource: 5583409! ----STARTUP----an Array(25 May 2013 1:23:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 May 2013 1:23:56 pm) Pharo-30167.image priorSource: 5604984! ----STARTUP----an Array(25 May 2013 7:35:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/25/2013 19:32' prior: 39138139! commentForCurrentUpdate ^ '10737 Nabujito fails because of Opal https://pharo.fogbugz.com/f/cases/ 10305 FileDialogWindowTest should clean up file after test https://pharo.fogbugz.com/f/cases/10305 5923 FileBrowser/FileList Add new file menu item in directory list does not work https://pharo.fogbugz.com/f/cases/5923 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/25/2013 19:33'! script265 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.471.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1463.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.134.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.324.mcz OpalCompiler-Tests-MarcusDenker.158.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.43.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.116.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/25/2013 19:33'! update30168 "self new update30168" self withUpdateLog: '10737 Nabujito fails because of Opal https://pharo.fogbugz.com/f/cases/ 10305 FileDialogWindowTest should clean up file after test https://pharo.fogbugz.com/f/cases/10305 5923 FileBrowser/FileList Add new file menu item in directory list does not work https://pharo.fogbugz.com/f/cases/5923 '. self loadTogether: self script265 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer methodsFor: 'error handling' stamp: 'MarcusDenker 5/23/2013 10:17' prior: 38908160! storeIntoSpecialVariable: variableNode ^ OCSemanticError new node: variableNode; compilationContext: compilationContext; messageText: 'Cannot store into'; signal! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'MarcusDenker 5/25/2013 16:21' prior: 35549861! visitMessageNode: aMessageNode | selectorString | "this should be moved to the parser" selectorString := (String streamContents: [ :str | aMessageNode selectorParts do: [ :each | str nextPutAll: each value ]]). (Symbol findInterned: selectorString) ifNil: [self unknownSelector: aMessageNode]. (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]. ! ! !OCShadowVariableWarning methodsFor: 'accessing' stamp: 'MarcusDenker 5/23/2013 10:41' prior: 38968288! stringMessage ^ 'Name already defined'! ! !OCShadowVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/25/2013 15:25' prior: 38968440! variable: varNode shadows: semVar self interactive ifTrue: [ OCSemanticError new node: node; compilationContext: compilationContext; messageText: self stringMessage; signal ] ifFalse: [ Transcript cr; show: self methodClass name,'>>', varNode methodNode selector; show: '('; show: varNode name; show: ' is shadowed)'; yourself].! ! !OCSemanticError methodsFor: 'error handling' stamp: 'MarcusDenker 5/23/2013 10:35' prior: 38567969! notify: aString at: location "Refer to the comment in Object|notify:." ^compilationContext requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [compilationContext requestor notify: aString , ' ->' at: location in: compilationContext requestor text]! ! !OCSemanticWarning methodsFor: 'correcting' stamp: 'MarcusDenker 5/23/2013 10:35' prior: 38566907! notify: aString at: location "Refer to the comment in Object|notify:." ^self requestor ifNil: [SyntaxErrorNotification inClass: self methodClass category: self methodClass category withCode: self methodNode source doitFlag: false errorMessage: aString location: location] ifNotNil: [self requestor notify: aString , ' ->' at: location in: self requestor text]! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/23/2013 08:07' prior: 38903900! scope | newScope | newScope := OCClassScope for: class. requestor ifNotNil: [ "the requestor is allowed to manage variables, the workspace is using it to auto-define vars" newScope := (OCRequestorScope new requestor: requestor) outerScope: newScope]. ^newScope ! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 5/22/2013 16:04' prior: 38997545! class: aClass "This is used for compatibility with Opal" class := aClass. self compilationContext class: aClass! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 5/22/2013 16:02' prior: 38997760! compilationContext ^ compilationContext ifNil: [ compilationContext := CompilationContext default requestor: requestor; class: class; category: category ] ! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 5/22/2013 16:04' prior: 38998020! environment: anEnvironment "This is used for compatibility with Opal" self compilationContext environment: anEnvironment! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'MarcusDenker 4/30/2013 10:36' prior: 37253081! evaluate: textOrString "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: textOrString for: nil logged: false! ! !Compiler methodsFor: 'public - old' stamp: 'MarcusDenker 5/10/2013 12:53' prior: 37257423! format: textOrStream in: aClass notifying: aRequestor "Compile a parse tree from the argument, textOrStream. Answer a string containing the original code, formatted nicely. If aBoolean is true, then decorate the resulting text with color and hypertext actions" | aNode | self from: textOrStream class: aClass context: nil notifying: aRequestor. aNode := self format: sourceStream noPattern: false ifFail: [^ nil]. ^ aNode formattedCode.! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 5/22/2013 16:04' prior: 38998231! options: anArray "This is used for compatibility with Opal" self compilationContext compilerOptions: anArray! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'MarcusDenker 5/17/2013 10:44' prior: 38500859! parseLiterals: aString ^ Scanner new scanTokens: aString! ! !FileList methodsFor: 'own services' stamp: 'CamilloBruni 5/25/2013 16:17' prior: 21870530! addNewDirectory self addNew: 'Directory' byEvaluating: [:newName | (self directory / newName ) ensureDirectory ] ! ! !FileList methodsFor: 'file menu action' stamp: 'CamilloBruni 5/25/2013 16:17' prior: 21864039! addNewFile self addNew: 'File' byEvaluating: [:newName | (self directory / newName) ensureFile ] ! ! !OpalCompiler class methodsFor: 'public' stamp: 'MarcusDenker 5/23/2013 07:47'! isActive ^Smalltalk compilerClass == self! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/23/2013 10:19' prior: 38563760! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate ] on: SyntaxErrorNotification do: [ :ex | compilationContext requestor ifNotNil: [ compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ^failBlock value] ifNil: [ ex pass ]].! ! !IRMethod methodsFor: 'accessing' stamp: 'ClementBera 5/23/2013 11:09' prior: 38335705! compilationContext ^ compilationContext ifNil: [ "only happens when decompiling or using stand-alone" compilationContext := CompilationContext default]! ! !IRBytecodeGenerator methodsFor: 'results' stamp: 'MarcusDenker 5/23/2013 08:40' prior: 34810549! compiledMethodWith: trailer | cm | cm := (CompiledMethod primitive: (self primNum > 0 ifTrue: [self primNum] ifFalse: [self quickMethodPrim]) numArgs: self numArgs numTemps: self numTemps stackSize: self stackFrameSize literals: self literals bytecodes: self bytecodes trailer: trailer). "set the properties of cm according to properties saved" properties ifNotNil: [ cm penultimateLiteral: properties. properties method: cm. properties pragmas do: [:each | each method: cm]. ]. ^cm.! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 5/23/2013 10:45' prior: 38905781! isInlineIf self methodNode compilationContext optInlineIf ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ OCSemanticError new node: self; compilationContext: self methodNode compilationContext; messageText: 'ifTrue:ifFalse: takes zero-arg blocks'; signal. ^ false ] ]. ^ true! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 5/24/2013 13:44'! doSemanticAnalysis ^ self method doSemanticAnalysis. ! ! !Pragma methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/23/2013 08:39'! method: aCompiledMethod method := aCompiledMethod! ! !FileDialogWindowTest methodsFor: 'tests' stamp: 'CamilloBruni 5/25/2013 17:34' prior: 21842149! testIssue6406 | aFolder dialog file invalidFolder | aFolder := (FileSystem workingDirectory / 'folder') ensureDirectory. [ "Absolute folder paths work" dialog := FileDialogWindow new selectPathName: aFolder fullName. "just compare the lower-case path names for now since on mac the test will fail under certain circumstances..." self assert: dialog selectedFileDirectory fullName asLowercase equals: aFolder fullName asLowercase. "Relative folder paths work" dialog := FileDialogWindow new selectPathName: 'folder' asFileReference. self assert: dialog selectedFileDirectory fullName asLowercase equals: aFolder fullName asLowercase. "Invalid folder defaults to the working folder" invalidFolder := 'cant-possibly-exist-for-testIssue6406'. dialog := FileDialogWindow new selectPathName: invalidFolder. self assert: dialog selectedFileDirectory fullName asLowercase equals: FileSystem workingDirectory fullName asLowercase. ] ensure: [ aFolder ensureDeleted. ]! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 5/24/2013 13:44' prior: 38904359! doSemanticAnalysis self compilationContext ifNil: [ self methodClass: nil class ]. OCASTSemanticAnalyzer new compilationContext: self compilationContext; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 5/23/2013 15:20' prior: 38904814! doSemanticAnalysisInContext: aCompilationContext self compilationContext: aCompilationContext. self doSemanticAnalysis.! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 5/23/2013 08:43' prior: 38896314! rejectRules ^ #('SearchingLiteralRule' 'ExcessiveArgumentsRule' 'LongMethodsRule' 'ClassInstVarNotInitializedRule' 'UsesAddRule' 'ExcessiveMethodsRule' 'MissingYourselfRule' 'ExcessiveVariablesRule' 'TempsReadBeforeWrittenRule' 'AbstractClassRule' 'IfTrueReturnsRule')! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 5/23/2013 08:43'! ruleBadMessageRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#OCASTTranslator #initialize #false)) #'2013-05-23T08:43:44.793471+02:00') #(#(#RGMethodDefinition #(#OCASTTranslator #emitCaseOf: #false)) #'2013-05-23T08:43:44.793471+02:00') #(#(#RGMethodDefinition #(#OpalCompiler #evaluate #false)) #'2013-05-23T08:43:44.793471+02:00') )! ! OCGlobalScope removeSelector: #newMethodScope! OCGlobalScope removeSelector: #lookupVar:! Smalltalk globals removeClassNamed: #OCGlobalScope! SyntaxErrorNotification removeSelector: #setClass:category:code:doitFlag:! SyntaxErrorNotification class removeSelector: #inClass:category:withCode:doitFlag:! "Compiler"! "OpalCompiler-Core"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(25 May 2013 7:35:55 pm) Pharo.image priorSource: 5605180! ----STARTUP----an Array(25 May 2013 7:42:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 May 2013 7:42:54 pm) Pharo-30168.image priorSource: 5626650! ----STARTUP----an Array(26 May 2013 2:50:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/26/2013 14:48' prior: 39159909! commentForCurrentUpdate ^ '10621 Create a lint rule to make sure UITheme and ThemeIcons are not used anymore https://pharo.fogbugz.com/f/cases/10621 10763 Lots of Opal test failing in 168: update tests https://pharo.fogbugz.com/f/cases/10763 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/26/2013 14:48'! script266 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1463.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-EstebanLorenzano.116.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/26/2013 14:48'! update30169 "self new update30169" self withUpdateLog: '10621 Create a lint rule to make sure UITheme and ThemeIcons are not used anymore https://pharo.fogbugz.com/f/cases/10621 10763 Lots of Opal test failing in 168: update tests https://pharo.fogbugz.com/f/cases/10763 '. self loadTogether: self script266 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBAllAnyNoneSatisfyRule commentStamp: '' prior: 0! See rationale! !RBAsOrderedCollectionNotNeededRule commentStamp: '' prior: 0! See rationale! !RBAssignmentInIfTrueRule commentStamp: '' prior: 0! See rationale! !RBAtIfAbsentRule commentStamp: '' prior: 0! See rationale! !RBBetweenAndRule commentStamp: '' prior: 0! See rationale! !RBCascadedNextPutAllsRule commentStamp: '' prior: 0! See rationale! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 0! See rationale! !RBDetectIfNoneRule commentStamp: '' prior: 0! See rationale! !RBEqualNilRule commentStamp: '' prior: 0! See rationale! !RBGuardClauseRule commentStamp: '' prior: 0! See rationale! !RBMinMaxRule commentStamp: '' prior: 0! See rationale! !RBNotEliminationRule commentStamp: '' prior: 0! See rationale! !RBSuperSendsRule commentStamp: '' prior: 0! See rationale! !RBThemeAPIUpdateRule commentStamp: '' prior: 0! See rationale! !RBTranslateLiteralsInMenusRule commentStamp: '' prior: 0! See rationale! !RBUnderscoreAssignmentRule commentStamp: '' prior: 0! See rationale! !RBUnwindBlocksRule commentStamp: '' prior: 0! See rationale! !CCompilationContext commentStamp: '' prior: 0! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !Compiler commentStamp: '' prior: 38996639! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !OCCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 5/25/2013 14:53' prior: 38301128! compileWithFailBlock: aBlock ^ OpalCompiler new source: text; class: MockForCompilation; requestor: self; failBlock: aBlock; translate. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:40' prior: 38302381! testEmptyCharacterFail! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:01' prior: 38302671! testInBlockArgumentInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'temp [:var1 | ]'. self compile. self flag: 'display menu instead of going into failblock'. self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 8). self assert: (errorSource contents = 'temp [:var1 | ]'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:03' prior: 38303059! testInBlockTempArgumentShadowing interactive := true. self initializeErrorMessage. text := 'temp [:temp | |temp|]'. self compileWithFailBlock: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 16). self assert: (errorSource contents = 'temp [:temp | |temp|]'). ^nil]. self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:03' prior: 38303479! testInBlockTempInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'temp [:temp | |var1|]'. self compileWithFailBlock: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 16). self assert: (errorSource contents = 'temp [:temp | |var1|]'). ^nil]. self fail.! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:04' prior: 38303978! testInBlockTempShadowing interactive := true. self initializeErrorMessage. text := 'temp |var2| [:temp| |var2|]'. self compileWithFailBlock: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 22). self assert: (errorSource contents = 'temp |var2| [:temp| |var2|]'). ^nil]. self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:05' prior: 38304464! testInstanceVariableShadowing interactive := true. self initializeErrorMessage. text := 'var1 |var1|'. self compileWithFailBlock: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 7). self assert: (errorSource contents = 'var1 |var1|'). ^nil]. self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:13' prior: 38305110! testNoShadowing interactive := true. self initializeErrorMessage. text := 'temp |var2| var2:=1'. self compileWithFailBlock: [ self fail. ^nil ]. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:06' prior: 38305399! testNotInteractiveInBlockArgumentInstanceVariableShadowing interactive := false. self initializeErrorMessage. OpalCompiler new compile: 'temp [:var1 | ]' in: MockForCompilation classified: nil notifying: self ifFail: nil. self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:31' prior: 38305796! testNotInteractiveInBlockTempArgumentShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | |temp|]' in: MockForCompilation classified: nil notifying: self ifFail: nil). self assert: newTranscript contents equals: ' MockForCompilation>>temp(temp is shadowed)' ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:30' prior: 38306454! testNotInteractiveInBlockTempInstanceVariableShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | |var1|]' in: MockForCompilation classified: nil notifying: self ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:44' prior: 38306854! testNotInteractiveInBlockTempShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp |var2| [:temp| |var2|]' in: MockForCompilation classified: nil notifying: self ifFail: [self fail]). self assert: newTranscript contents equals: ' MockForCompilation>>temp(var2 is shadowed)' ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:44' prior: 38307506! testNotInteractiveNoShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp |var2|' in: MockForCompilation classified: nil notifying: self ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:14' prior: 38307842! testNotInteractiveShadowingOfTemp interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp |temp1 temp1| ' in: MockForCompilation classified: nil notifying: self ifFail: nil). self assert: ( newTranscript contents = ' MockForCompilation>>temp(temp1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:45' prior: 38308482! testNotInteractiveSiblingBlocksInstanceVariableShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | ].[:temp | |var1|]' in: MockForCompilation classified: nil notifying: self ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 14:45' prior: 38308907! testNotInteractiveSiblingBlocksTempShadowing interactive := false. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | ]. [:temp | ]' in: MockForCompilation classified: nil notifying: self ifFail: [self fail. ^nil]). self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:15' prior: 38309271! testReservedNameAsBlockArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | OpalCompiler new compile: 'temp ^ [ :' , each , ' | ^ ' , each , ' ]' in: MockForCompilation classified: nil notifying: self ifFail: [ exit value ]. self fail ] valueWithExit. self assert: ((errorMessage = 'Variable name expected ->' )or: [ errorMessage = 'Name already defined ->' ]). self assert: errorLocation = 11 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:16' prior: 38309819! testReservedNameAsMethodArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | OpalCompiler new compile: 'temp: ' , each , ' ^ ' , each in: MockForCompilation classified: nil notifying: self ifFail: [ exit value ]. self fail ] valueWithExit. self assert: ((errorMessage = 'Variable name expected ->' )or: [ errorMessage = 'Name already defined ->' ]). self assert: errorLocation = 7 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:19' prior: 38311405! testSiblingBlocksInstanceVariableShadowing interactive := true. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | ].[:temp | |var1|]' in: MockForCompilation classified: nil notifying: self ifFail: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 27). ^nil]). self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:19' prior: 38311934! testSiblingBlocksTempShadowing interactive := true. self initializeErrorMessage. (OpalCompiler new compile: 'temp [:temp | ]. [:temp | ]' in: MockForCompilation classified: nil notifying: nil ifFail: [self fail. ^nil]). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 5/25/2013 15:19' prior: 38312270! testTraitTempShadowing self initializeErrorMessage. OpalCompiler new compile: 'testReplaceFromToWithStartingAt | result repStart collection replacementCollection firstIndex secondIndex | replacementCollection := 1.' in: ArrayTest classified: nil notifying: nil ifFail: [self fail.]. self assert: ( newTranscript contents = ' ArrayTest>>testReplaceFromToWithStartingAt(replacementCollection is shadowed) ArrayTest>>testReplaceFromToWithStartingAt(firstIndex is shadowed) ArrayTest>>testReplaceFromToWithStartingAt(secondIndex is shadowed)').! ! !OCOpalExamples class methodsFor: 'compiler' stamp: 'MarcusDenker 5/26/2013 14:37' prior: 38342844! compilerClass ^OpalCompiler! ! !RBAllAnyNoneSatisfyRule commentStamp: '' prior: 39191885! See rationale! !RBAsOrderedCollectionNotNeededRule commentStamp: '' prior: 39191975! See rationale! !RBAssignmentInIfTrueRule commentStamp: '' prior: 39192055! See rationale! !RBAtIfAbsentRule commentStamp: '' prior: 39192127! See rationale! !RBBetweenAndRule commentStamp: '' prior: 39192199! See rationale! !RBCascadedNextPutAllsRule commentStamp: '' prior: 39192280! See rationale! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 39192364! See rationale! !RBDetectIfNoneRule commentStamp: '' prior: 39192438! See rationale! !RBEqualNilRule commentStamp: '' prior: 39192508! See rationale! !RBGuardClauseRule commentStamp: '' prior: 39192581! See rationale! !RBMinMaxRule commentStamp: '' prior: 39192649! See rationale! !RBNotEliminationRule commentStamp: '' prior: 39192725! See rationale! !RBSuperSendsRule commentStamp: '' prior: 39192797! See rationale! !RBThemeAPIUpdateRule commentStamp: '' prior: 39192873! See rationale! !RBThemeAPIUpdateRule class methodsFor: '*Manifest-Core' stamp: 'DamienCassou 5/14/2013 16:29'! identifierMinorVersionNumber "This number identifies the version of the rule definition. Each time the rule is updated and its changes invalidates previous false positives identification (and as such should be reassessed by developers) the number should be increased." ^ 1! ! !RBThemeAPIUpdateRule class methodsFor: '*Manifest-Core' stamp: 'DamienCassou 5/14/2013 16:29'! uniqueIdentifierName "This number should be unique and should change only when the rule completely change semantics" ^'ThemeAPIUpdateRule'! ! !RBThemeAPIUpdateRule methodsFor: '*Manifest-Core' stamp: 'DamienCassou 5/14/2013 16:11'! category ^'Coding Idiom Violation'! ! !RBThemeAPIUpdateRule methodsFor: 'accessing' stamp: 'DamienCassou 5/14/2013 16:22'! group ^ 'Transformations'! ! !RBThemeAPIUpdateRule methodsFor: 'accessing' stamp: 'DamienCassou 5/14/2013 16:23'! initialize super initialize. self rewriteRule replace: 'UITheme current' with: 'Smalltalk ui theme'; replace: 'ThemeIcons current' with: 'Smalltalk ui icons'! ! !RBThemeAPIUpdateRule methodsFor: 'accessing' stamp: 'DamienCassou 5/14/2013 16:21'! name ^ 'Use "Smalltalk ui theme" and "Smalltalk ui icons" instead of "UITheme current" and "ThemeIcons current".'! ! !RBThemeAPIUpdateRule methodsFor: 'accessing' stamp: 'DamienCassou 5/14/2013 16:49'! rationale ^ 'You should not refer to the UITheme or ThemeIcons classes directly because we will kill these classes.'! ! !RBTranslateLiteralsInMenusRule commentStamp: '' prior: 39192959! See rationale! !RBUnderscoreAssignmentRule commentStamp: '' prior: 39193041! See rationale! !RBUnwindBlocksRule commentStamp: '' prior: 39193115! See rationale! !CompilationContext class methodsFor: 'compiler' stamp: 'MarcusDenker 5/26/2013 09:52'! compiler ^self compilerClass new compilationContextClass: CCompilationContext; environment: self environment; class: self! ! !OCCompilerNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/23/2013 10:39' prior: 35527234! enumerateAllSelections 1 to: self numberOfSelections do: [:n | self assert: (self evaluateSelectionNumber: n) == failure. self assert: morph editor selection asString equals: (expectedErrors at: n). self assert: (expectedErrorPositions at: n) equals: morph editor startIndex. morph editor cut].! ! !OCCompilerNotifyingTest methodsFor: 'testing' stamp: 'md 5/23/2013 10:25' prior: 35533454! testInvalidLiteralCharacter self setUpForErrorsIn: '^ #yourself , #)` Expecting a literal type ->` , #end'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'md 5/23/2013 10:27' prior: 38331174! testTooManyArguments self setUpForErrorsIn: '^ ` Too many arguments ->`[:x1 :x2 :x3 :x4 :x5 :x6 :x7 :x8 :x9 :x10 :x11 :x12 :x13 :x14 :x15 :x16 :x17 | ]'. self enumerateAllSelections.! ! !OCCompilerNotifyingTest methodsFor: 'testing-byteCode limits' stamp: 'ClementBera 5/23/2013 15:28' prior: 35537608! testTooManyLiterals self setUpForErrorsIn: '{#(1). #(2). #(3). #(4). #(5). #(6). #(7). #(8). #(9). #(10). #(11). #(12). #(13). #(14). #(15). #(16). #(17). #(18). #(19). #(20). #(21). #(22). #(23). #(24). #(25). #(26). #(27). #(28). #(29). #(30). #(31). #(32). #(33). #(34). #(35). #(36). #(37). #(38). #(39). #(40). #(41). #(42). #(43). #(44). #(45). #(46). #(47). #(48). #(49). #(50). #(51). #(52). #(53). #(54). #(55). #(56). #(57). #(58). #(59). #(60). #(61). #(62). #(63). #(64). #(65). #(66). #(67). #(68). #(69). #(70). #(71). #(72). #(73). #(74). #(75). #(76). #(77). #(78). #(79). #(80). #(81). #(82). #(83). #(84). #(85). #(86). #(87). #(88). #(89). #(90). #(91). #(92). #(93). #(94). #(95). #(96). #(97). #(98). #(99). #(100). #(101). #(102). #(103). #(104). #(105). #(106). #(107). #(108). #(109). #(110). #(111). #(112). #(113). #(114). #(115). #(116). #(117). #(118). #(119). #(120). #(121). #(122). #(123). #(124). #(125). #(126). #(127). #(128). #(129). #(130). #(131). #(132). #(133). #(134). #(135). #(136). #(137). #(138). #(139). #(140). #(141). #(142). #(143). #(144). #(145). #(146). #(147). #(148). #(149). #(150). #(151). #(152). #(153). #(154). #(155). #(156). #(157). #(158). #(159). #(160). #(161). #(162). #(163). #(164). #(165). #(166). #(167). #(168). #(169). #(170). #(171). #(172). #(173). #(174). #(175). #(176). #(177). #(178). #(179). #(180). #(181). #(182). #(183). #(184). #(185). #(186). #(187). #(188). #(189). #(190). #(191). #(192). #(193). #(194). #(195). #(196). #(197). #(198). #(199). #(200). #(201). #(202). #(203). #(204). #(205). #(206). #(207). #(208). #(209). #(210). #(211). #(212). #(213). #(214). #(215). #(216). #(217). #(218). #(219). #(220). #(221). #(222). #(223). #(224). #(225). #(226). #(227). #(228). #(229). #(230). #(231). #(232). #(233). #(234). #(235). #(236). #(237). #(238). #(239). #(240). #(241). #(242). #(243). #(244). #(245). #(246). #(247). #(248). #(249). #(250). #(251). #(252). #(253). #(254). #(255). #(256). `More than 256 literals referenced. You must split or otherwise simplify this method. The 257th literal is: ->`#(257)}'. self should: [ self enumerateAllSelections ] raise: Error. [ self enumerateAllSelections ] on: Error do: [ :exc | exc class = Error. exc messageText = 'too many literals (>256)' ]! ! !OCCompilerNotifyingTest methodsFor: 'testing-block arguments' stamp: 'MarcusDenker 5/23/2013 10:46' prior: 38915530! testifTrueBlockWithArgument self setUpForErrorsIn: '` ifTrue:ifFalse: takes zero-arg blocks ->`true ifTrue: [:x | 1 + 1 ]'. self enumerateAllSelections. self setUpForErrorsIn: '` ifTrue:ifFalse: takes zero-arg blocks ->`true ifTrue: [:x :y | 1 + 1 ]'. self enumerateAllSelections.! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/23/2013 07:48' prior: 38962911! testIfTrueEffect | temp fakeBool | OpalCompiler isActive ifFalse: [self skip]. fakeBool := MyBooleanObject new. temp := 1. fakeBool ifTrue: [ temp := 5 + 3 + 1 ]. self assert: temp equals: 9. fakeBool ifTrue: [ [ ] ]. "fakeBool ifTrue: [ 1+ 2. [ :a | a ] value: 5. 7 ]."! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/23/2013 07:48' prior: 38963330! testIfTrueValue | myBooleanObject | OpalCompiler isActive ifFalse: [self skip]. self assert: (MyBooleanObject new ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'. myBooleanObject := MyBooleanObject new. self assert: (myBooleanObject ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'.! ! !OCClosureCompilerTest class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 5/23/2013 13:50'! compilerClass ^OpalCompiler! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithCopiedAndAssignedTemps | blk "0w" a "0w" b "0w" c "0w" t "0w" r1 "0w" r2 "0w" | a := 1. "1w" b := 2. "1w" c := 4. "1w" t := 0. "1w" blk "5w" := ["2" t "3w" := t "3r" + a "3r" + b "3r" + c "3r" ] "4". r1 "5w" := blk "5r" value. b "5w" := -100. r2 "5w" := blk "5r" value. ^r1 "5r" -> r2 "5r" -> t "5r" "a: main(read(),write(0,1)), block(read(3),write()) => copy; no writes follow read b: main(read(),write(0,1,5)), block(read(3),write()) => remote; write follows contained read blk: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5 c: main(read(),write(0,1)), block(read(3),write()) => copy; no writes follow read r1: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5 r2: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5 t: main(read(5),write(0,1)), block(read(3),write(3)) => remote; read follows contained write" "(Parser new encoderClass: EncoderForV3; parse: (self class sourceCodeAt: #methodWithCopiedAndAssignedTemps) class: self class) generateUsingClosures: #(0 0 0 0)"! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithCopiedAndPostClosedOverAssignedTemps | blk a b c r1 r2 | a := 1. b := 2. c := 4. blk := [a + b + c]. r1 := blk value. b := nil. r2 := blk value. r1 -> r2 "(Parser new encoderClass: EncoderForV3; parse: (self class sourceCodeAt: #methodWithCopiedAndPostClosedOverAssignedTemps) class: self class) generateUsingClosures: #(0 0 0 0)"! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithCopiedTemps | a b c r | a := 1. b := 2. c := 4. r := [a + b + c] value. b := nil. r "Parser new parse: (self class sourceCodeAt: #methodWithCopiedTemps) class: self class" "(Parser new encoderClass: EncoderForV3; parse: (self class sourceCodeAt: #methodWithCopiedTemps) class: self class) generateUsingClosures: #(0 0 0 0)"! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithOptimizedBlocks | s c | s := self isNil ifTrue: [| a | a := 'isNil'. a] ifFalse: [| b | b := 'notNil'. b]. c := String new: s size. 1 to: s size do: [:i| c at: i put: (s at: i)]. ^c "Parser new parse: (self class sourceCodeAt: #methodWithOptimizedBlocks) class: self class"! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithOptimizedBlocksA | s c | s := self isNil ifTrue: [| a | a := 'isNil'. a] ifFalse: [| a | a := 'notNil'. a]. c := String new: s size. 1 to: s size do: [:i| c at: i put: (s at: i)]. ^c "Parser new parse: (self class sourceCodeAt: #methodWithOptimizedBlocksA) class: self class"! ! !OCClosureCompilerTest class methodsFor: 'code examples' stamp: 'MarcusDenker 5/23/2013 13:45'! methodWithVariousTemps | classes total totalLength | classes := self withAllSuperclasses. total := totalLength := 0. classes do: [:class| | className | className := class name. total := total + 1. totalLength := totalLength + className size]. ^total -> totalLength "Parser new parse: (self class sourceCodeAt: #methodWithVariousTemps) class: self class"! ! !OCClosureCompilerTest methodsFor: 'source' stamp: 'MarcusDenker 5/23/2013 13:45'! closureCases ^#( '| n | n := 1. ^n + n' '[:c :s| | mn | mn := Compiler new compile: (c sourceCodeAt: s) in: c notifying: nil ifFail: [self halt]. mn generate: #(0 0 0 0). {mn blockExtentsToTempsMap. mn encoder schematicTempNames}] value: AbstractInstructionTests value: #runBinaryConditionalJumps:' 'inject: thisValue into: binaryBlock | nextValue | nextValue := thisValue. self do: [:each | nextValue := binaryBlock value: nextValue value: each]. ^nextValue' 'mapFromBlockStartsIn: aMethod toTempVarsFrom: schematicTempNamesString constructor: aDecompilerConstructor | map | map := aMethod mapFromBlockKeys: aMethod startpcsToBlockExtents keys asSortedCollection toSchematicTemps: schematicTempNamesString. map keysAndValuesDo: [:startpc :tempNameTupleVector| | subMap tempVector numTemps | subMap := Dictionary new. tempNameTupleVector do: [:tuple| tuple last isArray ifTrue: [subMap at: tuple last first put: tuple last last. numTemps := tuple last first] ifFalse: [numTemps := tuple last]]. tempVector := Array new: numTemps. subMap keysAndValuesDo: [:index :size| tempVector at: index put: (Array new: size)]. tempNameTupleVector do: [:tuple| | itv | tuple last isArray ifTrue: [itv := tempVector at: tuple last first. itv at: tuple last last put: (aDecompilerConstructor codeTemp: tuple last last - 1 named: tuple first)] ifFalse: [tempVector at: tuple last put: (aDecompilerConstructor codeTemp: tuple last - 1 named: tuple first)]]. subMap keysAndValuesDo: [:index :size| tempVector at: index put: (aDecompilerConstructor codeRemoteTemp: index remoteTemps: (tempVector at: index))]. map at: startpc put: tempVector]. ^map' 'gnuifyFrom: inFileStream to: outFileStream | inData beforeInterpret inInterpret inInterpretVars beforePrimitiveResponse inPrimitiveResponse | inData := inFileStream upToEnd withSqueakLineEndings. inFileStream close. outFileStream nextPutAll: ''/* This file has been post-processed for GNU C */''; cr; cr; cr. beforeInterpret := true. "whether we are before the beginning of interpret()" inInterpret := false. "whether we are in the middle of interpret" inInterpretVars := false. "whether we are in the variables of interpret" beforePrimitiveResponse := true. "whether we are before the beginning of primitiveResponse()" inPrimitiveResponse := false. "whether we are inside of primitiveResponse" ''Gnuifying'' displayProgressAt: Sensor cursorPoint from: 1 to: (inData occurrencesOf: Character cr) during: [:bar | | lineNumber | lineNumber := 0. inData linesDo: [ :inLine | | outLine extraOutLine caseLabel | bar value: (lineNumber := lineNumber + 1). outLine := inLine. "print out one line for each input line; by default, print out the line that was input, but some rules modify it" extraOutLine := nil. "occasionally print a second output line..." beforeInterpret ifTrue: [ inLine = ''#include "sq.h"'' ifTrue: [ outLine := ''#include "sqGnu.h"'' ]. inLine = ''interpret(void) {'' ifTrue: [ "reached the beginning of interpret" beforeInterpret := false. inInterpret := true. inInterpretVars := true ] ] ifFalse: [ inInterpretVars ifTrue: [ (inLine findString: ''register struct foo * foo = &fum;'') > 0 ifTrue: [ outLine := ''register struct foo * foo FOO_REG = &fum;'' ]. (inLine findString: '' localIP;'') > 0 ifTrue: [ outLine := '' char* localIP IP_REG;'' ]. (inLine findString: '' localFP;'') > 0 ifTrue: [ outLine := '' char* localFP FP_REG;'' ]. (inLine findString: '' localSP;'') > 0 ifTrue: [ outLine := '' char* localSP SP_REG;'' ]. (inLine findString: '' currentBytecode;'') > 0 ifTrue: [ outLine := '' sqInt currentBytecode CB_REG;'' ]. inLine isEmpty ifTrue: [ "reached end of variables" inInterpretVars := false. outLine := '' JUMP_TABLE;''. extraOutLine := inLine ] ] ifFalse: [ inInterpret ifTrue: [ "working inside interpret(); translate the switch statement" (inLine beginsWith: '' case '') ifTrue: [ caseLabel := (inLine findTokens: '' :'') second. outLine := '' CASE('', caseLabel, '')'' ]. inLine = '' break;'' ifTrue: [ outLine := '' BREAK;'' ]. inLine = ''}'' ifTrue: [ "all finished with interpret()" inInterpret := false ] ] ifFalse: [ beforePrimitiveResponse ifTrue: [ (inLine beginsWith: ''primitiveResponse('') ifTrue: [ "into primitiveResponse we go" beforePrimitiveResponse := false. inPrimitiveResponse := true. extraOutLine := '' PRIM_TABLE;'' ] ] ifFalse: [ inPrimitiveResponse ifTrue: [ inLine = '' switch (primitiveIndex) {'' ifTrue: [ extraOutLine := outLine. outLine := '' PRIM_DISPATCH;'' ]. inLine = '' switch (GIV(primitiveIndex)) {'' ifTrue: [ extraOutLine := outLine. outLine := '' PRIM_DISPATCH;'' ]. (inLine beginsWith: '' case '') ifTrue: [ caseLabel := (inLine findTokens: '' :'') second. outLine := '' CASE('', caseLabel, '')'' ]. inLine = ''}'' ifTrue: [ inPrimitiveResponse := false ] ] ] ] ] ]. outFileStream nextPutAll: outLine; cr. extraOutLine ifNotNil: [ outFileStream nextPutAll: extraOutLine; cr ]]]. outFileStream close' )! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:51'! doTestDebuggerTempAccessWith: one with: two "Test debugger access for temps" | outerContext local1 remote1 | outerContext := thisContext. local1 := 3. remote1 := 1/2. self assert: (self class compiler evaluate: 'one' in: thisContext to: self) == one. self assert: (self class compiler evaluate: 'two' in: thisContext to: self) == two. self assert: (self class compiler evaluate: 'local1' in: thisContext to: self) == local1. self assert: (self class compiler evaluate: 'remote1' in: thisContext to: self) == remote1. self class compiler evaluate: 'local1 := -3.0' in: thisContext to: self. self assert: local1 = -3.0. (1 to: 2) do: [:i| | local2 r1 r2 r3 r4 | local2 := i * 3. remote1 := local2 / 7. self assert: thisContext ~~ outerContext. self assert: (r1 := self class compiler evaluate: 'one' in: thisContext to: self) == one. self assert: (r2 := self class compiler evaluate: 'two' in: thisContext to: self) == two. self assert: (r3 := self class compiler evaluate: 'i' in: thisContext to: self) == i. self assert: (r4 := self class compiler evaluate: 'local2' in: thisContext to: self) == local2. self assert: (r4 := self class compiler evaluate: 'remote1' in: thisContext to: self) == remote1. self assert: (r4 := self class compiler evaluate: 'remote1' in: outerContext to: self) == remote1. self class compiler evaluate: 'local2 := 15' in: thisContext to: self. self assert: local2 = 15. self class compiler evaluate: 'local1 := 25' in: thisContext to: self. self assert: local1 = 25. { r1. r2. r3. r4 } "placate the compiler"]. self assert: local1 = 25. self assert: remote1 = (6/7)! ! !OCClosureCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 5/23/2013 13:46'! setUp currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: OpalCompiler.! ! !OCClosureCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 5/23/2013 13:45'! tearDown SmalltalkImage compilerClass: currentCompiler.! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:53'! testDebuggerTempAccess self doTestDebuggerTempAccessWith: 1 with: 2! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testInlineBlockCollectionEM1 | a1 b1 i1 a2 b2 i2 we wb | b1 := OrderedCollection new. i1 := 1. [a1 := i1. i1 <= 3] whileTrue: [b1 add: [a1]. i1 := i1 + 1]. b1 := b1 asArray collect: [:b | b value]. b2 := OrderedCollection new. i2 := 1. we := [a2 := i2. i2 <= 3]. wb := [b2 add: [a2]. i2 := i2 + 1]. we whileTrue: wb. "defeat optimization" b2 := b2 asArray collect: [:b | b value]. self assert: b1 = b2! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testInlineBlockCollectionLR1 "Test case from Lukas Renggli" | col | col := OrderedCollection new. 1 to: 11 do: [ :each | col add: [ each ] ]. self assert: (col collect: [ :each | each value ]) asArray = (1 to: 11) asArray! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testInlineBlockCollectionLR2 "Test case from Lukas Renggli" | col | col := OrderedCollection new. 1 to: 11 do: [ :each | #(1) do: [:ignored| col add: [ each ]] ]. self assert: (col collect: [ :each | each value ]) asArray = (1 to: 11) asArray! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testInlineBlockCollectionLR3 | col | col := OrderedCollection new. 1 to: 11 do: [ :each | | i | i := each. col add: [ i ]. i := i + 1 ]. self assert: (col collect: [ :each | each value ]) asArray = (2 to: 12) asArray! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testInlineBlockCollectionSD1 | a1 b1 a2 b2 | b1 := OrderedCollection new. 1 to: 3 do: [:i | a1 := i. b1 add: [a1]]. b1 := b1 asArray collect: [:b | b value]. b2 := OrderedCollection new. 1 to: 3 do: [:i | a2 := i. b2 add: [a2]] yourself. "defeat optimization" b2 := b2 asArray collect: [:b | b value]. self assert: b1 = b2! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testOptimizedBlockLocalNilling1 "Whether a block is optimized or not a block-local temp should be nil at the start of each evaluation of the block." 1 to: 3 do: [:i| | j | self assert: j isNil. j := i + 1. self assert: j isNil not]! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testOptimizedBlockLocalNilling2 "Whether a block is optimized or not a block-local temp should be nil at the start of each evaluation of the block." 1 to: 6 do: [:i| | j k | self assert: j isNil. self assert: k isNil. i even ifTrue: [j := i + 2] ifFalse: [k := i + 1]. self assert: (j isNil or: [k isNil]). self assert: (j isNil not or: [k isNil not])]! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 5/23/2013 13:45'! testTempNameAccessForInjectInto "self new testTempNameAccessForInjectInto" | methodNode method evaluationCount block debuggerMap | methodNode := Parser new encoderClass: EncoderForV3PlusClosures; parse: (Collection sourceCodeAt: #inject:into:) class: Collection. method := methodNode generate. debuggerMap := DebuggerMethodMap new forMethod: method methodNode: methodNode. evaluationCount := 0. block := [:prev :each| | theContext tempNames | evaluationCount := evaluationCount + 1. theContext := thisContext sender. tempNames := debuggerMap tempNamesForContext: theContext. self assert: (tempNames hasEqualElements: tempNames). #('thisValue' 'each' 'binaryBlock' 'nextValue') with: { 0. each. block. prev} do: [:tempName :value| self assert: (debuggerMap namedTempAt: (tempNames indexOf: tempName) in: theContext) == value. tempName ~= 'each' ifTrue: [self assert: (debuggerMap namedTempAt: (tempNames indexOf: tempName) in: theContext home) == value]]]. (1 to: 10) withArgs: { 0. block } executeMethod: method. self assert: evaluationCount = 10! ! !OCCompilerExceptionsTest methodsFor: 'compiling' stamp: 'MarcusDenker 5/25/2013 11:17'! compile: sourceString text := sourceString. self class compileSilently: text classified: 'generated' notifying: self! ! !OCCompilerExceptionsTest methodsFor: 'compiling' stamp: 'MarcusDenker 5/25/2013 11:17'! compiling: sourceCode shouldRaise: exceptionClass self should: [ self compile: sourceCode ] raise: exceptionClass! ! !OCCompilerExceptionsTest methodsFor: 'compiling' stamp: 'MarcusDenker 5/25/2013 11:17'! interactive ^ true! ! !OCCompilerExceptionsTest methodsFor: 'compiling' stamp: 'MarcusDenker 5/25/2013 11:17'! removeGeneratedMethods self class removeCategory: 'generated'! ! !OCCompilerExceptionsTest methodsFor: 'emulating' stamp: 'MarcusDenker 5/25/2013 11:17'! select ! ! !OCCompilerExceptionsTest methodsFor: 'emulating' stamp: 'MarcusDenker 5/25/2013 11:17'! selectFrom: start to: end ! ! !OCCompilerExceptionsTest methodsFor: 'emulating' stamp: 'MarcusDenker 5/25/2013 11:17'! selectionInterval ^ 1 to: 0! ! !OCCompilerExceptionsTest methodsFor: 'setUp' stamp: 'MarcusDenker 5/25/2013 16:16'! setUp currentCompiler := SmalltalkImage compilerClass. SmalltalkImage compilerClass: OpalCompiler. ! ! !OCCompilerExceptionsTest methodsFor: 'setUp' stamp: 'MarcusDenker 5/25/2013 16:16'! tearDown self removeGeneratedMethods. SmalltalkImage compilerClass: currentCompiler.! ! !OCCompilerExceptionsTest methodsFor: 'tests' stamp: 'MarcusDenker 5/25/2013 11:22'! testUndeclaredVariable self compiling: 'griffle ^ goo' shouldRaise: OCUndeclaredVariableWarning ; compiling: 'griffle ^ [ goo ] value' shouldRaise: OCUndeclaredVariableWarning! ! !OCCompilerExceptionsTest methodsFor: 'tests' stamp: 'MarcusDenker 5/25/2013 11:21'! testUndefinedVariable self compiling: 'griffle | goo | ^ goo' shouldRaise: OCUninitializedVariableWarning ; compiling: 'griffle [ | goo | ^ goo ] value' shouldRaise: OCUninitializedVariableWarning! ! !OCCompilerExceptionsTest methodsFor: 'tests' stamp: 'MarcusDenker 5/25/2013 16:18'! testUnknownSelector self compiling: 'griffle self reallyHopeThisIsntImplementedAnywere2' shouldRaise: OCUnknownSelectorWarning ; compiling: 'griffle [ self reallyHopeThisIsntImplementedAywhere2 ] value' shouldRaise: OCUnknownSelectorWarning! ! !OCCompilerExceptionsTest methodsFor: 'tests' stamp: 'MarcusDenker 5/25/2013 11:21'! testUnusedVariable self compiling: 'griffle | goo | ^nil' shouldRaise: OCUnusedVariableWarning.! ! !OCCompilerExceptionsTest methodsFor: 'emulating' stamp: 'MarcusDenker 5/25/2013 11:17'! text ^ text! ! !OCCompilerSyntaxErrorNotifyingTest methodsFor: 'private' stamp: 'MarcusDenker 5/23/2013 09:49' prior: 38333235! enumerateAllSelections "This method intercepts the SyntaxErrorNotification and prevent the SyntaxError morph to open. The notification errorCode hold the source of evaluated sub-selection with inserted error message. This can be compared to expected error notification." 1 to: self numberOfSelections do: [:n | | result | result := [self evaluateSelectionNumber: n] on: SyntaxErrorNotification do: [:exc | | expectedNotification expectedNotificationLocation | expectedNotification := (expectedErrors at: n) allButFirst allButLast: 3. expectedNotificationLocation := (expectedErrorPositions at: n) - (morph editor startIndex - 1). self assert: expectedNotificationLocation equals: exc location. self assert: expectedNotification equals: exc errorMessage asString. exc return: nil]].! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 5/25/2013 16:47' prior: 35072924! testSingleRemoteTempVar | ast | ast := (OCOpalExamples>>#singleRemoteTempVar) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. self deny: (ast scope lookupVar: 'collection') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 5/25/2013 16:48' prior: 35073966! testsingleRemoteTempVarWhileWithTempNotInlined | ast | ast := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. ! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 5/25/2013 16:48' prior: 35074544! testsingleRemoteTempVarWrittenAfterClosedOver | ast | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. self deny: (ast scope lookupVar: 'collection') isRemote. ! ! !CCompilationContext commentStamp: '' prior: 39193190! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !CCompilationContext class methodsFor: 'compiler' stamp: 'MarcusDenker 5/26/2013 09:56'! compiler ^self compilerClass new compilationContextClass: CompilationContext; environment: self environment; class: self! ! !CCompilationContext class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/26/2013 09:29'! default ^ self new parseOptions: OpalCompiler defaultOptions! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! category ^ category! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! category: anObject category := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! class: anObject class := anObject! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! compilerOptions: anArray self parseOptions: anArray! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! doesNotUnderstand: message (message selector isUnary and: [ message selector beginsWith: 'opt'] ) ifTrue: [ ^ options includes: message selector ]. ^ super doesNotUnderstand: message! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! environment ^ environment! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! environment: anObject environment := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! failBlock ^ failBlock! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! failBlock: anObject failBlock := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! getClass ^ class! ! !CCompilationContext methodsFor: 'initialize-release' stamp: 'MarcusDenker 5/26/2013 09:29'! initialize options := Set new! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! interactive ^ interactive ifNil: [ false ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! interactive: anObject interactive := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! logged ^logged ifNil: [ false ].! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! logged: anObject logged := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! noPattern ^noPattern ifNil: [ false ].! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! noPattern: anObject noPattern := anObject! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optIlineNone ^ options includes: #optIlineNone ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineAndOr ^ options includes: #optInlineAndOr ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineCase ^ options includes: #optInlineCase ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineIf ^ options includes: #optInlineIf ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineIfNil ^ options includes: #optInlineIfNil ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineToDo ^ options includes: #optInlineToDo ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optInlineWhile ^ options includes: #optInlineWhile ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optLongIvarAccessBytecodes ^ options includes: #optLongIvarAccessBytecodes ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! optOptimizeIR ^ options includes: #optOptimizeIR ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 5/26/2013 09:29'! parseOptions: optionsArray "parse an array, which is a sequence of options in a form of: #( + option1 option2 - option3 ... ) each time the #+ is seen, the options which follow it will be subject for inclusion and, correspondingly, if #- seen, then they will be excluded . By default, (if none of #+ or #- specified initially), all options are subject for inclusion. " | include | include := true. optionsArray do: [:option | option == #+ ifTrue: [ include := true ] ifFalse: [ option == #- ifTrue: [ include := false ] ifFalse: [ include ifTrue: [ options add: option ] ifFalse: [ options remove: option ifAbsent:[] ]]] ].! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! requestor ^ requestor! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! requestor: anObject requestor := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:29'! scope | newScope | newScope := OCClassScope for: class. requestor ifNotNil: [ "the requestor is allowed to manage variables, the workspace is using it to auto-define vars" newScope := (OCRequestorScope new requestor: requestor) outerScope: newScope]. ^newScope ! ! !Compiler commentStamp: '' prior: 39193624! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !Compiler methodsFor: 'public - opal compatibility' stamp: 'MarcusDenker 5/26/2013 09:37' prior: 39173584! compilationContext ^ compilationContext ifNil: [ compilationContext := self compilationContextClass default requestor: requestor; class: class; category: category ] ! ! !Compiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:36'! compilationContextClass ^ compilationContextClass ifNil: [ CCompilationContext ]! ! !Compiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:42'! compilationContextClass: aClass compilationContextClass := aClass! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:49' prior: 37352526! category: aCategory self compilationContext category: aCategory.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:49' prior: 37352683! class: aClass self compilationContext class: aClass.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:48' prior: 38314758! compilationContext ^ compilationContext ifNil: [ compilationContext := self compilationContextClass default ]! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:36'! compilationContextClass ^compilationContextClass ifNil: [ CompilationContext ]! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:53'! compilationContextClass: aClass compilationContextClass := aClass.! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/26/2013 09:50' prior: 39176008! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate ] on: SyntaxErrorNotification do: [ :ex | self compilationContext requestor ifNotNil: [ self compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ^failBlock value] ifNil: [ ex pass ]]. ^cm! ! !OpalCompiler methodsFor: 'private' stamp: 'MarcusDenker 5/26/2013 09:50' prior: 37279498! doSemanticAnalysis ^[ast doSemanticAnalysisInContext: self compilationContext] on: OCSemanticError do: [ :ex | ex defaultAction. ^failBlock value ]! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:50' prior: 37353494! environment: anSmallTalkImage self compilationContext environment: anSmallTalkImage ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/26/2013 09:58' prior: 38890630! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context isNil ifTrue: [ receiver class ] ifFalse: [ context method methodClass ]). self noPattern: true. selectedSource := ((self compilationContext requestor respondsTo: #selection) and: [ (itsSelection := self compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := self compilationContext interactive ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. self compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:51' prior: 37281167! failBlock: aBlock failBlock := aBlock. self compilationContext failBlock: aBlock.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:55' prior: 37355127! logged: aBoolean self compilationContext logged: aBoolean.! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:55' prior: 37355279! noPattern: aBoolean self compilationContext noPattern: aBoolean. ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/26/2013 09:55' prior: 37281892! options: anOptionsArray self compilationContext parseOptions: anOptionsArray! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/26/2013 09:57' prior: 37355442! parse | expression selector arguments method | self compilationContext noPattern ifFalse: [^RBParser parseMethod: source contents]. expression := (RBParser parseExpression: source contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 5/26/2013 09:51' prior: 37356354! requestor: aRequestor self compilationContext requestor: aRequestor. self compilationContext interactive: (UIManager default interactiveParserFor: self compilationContext requestor).! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/25/2013 16:44' prior: 35051896! testOptimizedBlockWrittenAfterClosedOverCase1 | ast scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase1) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self deny: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: (scopes third lookupVar: 'temp') isWrite. self assert: (scopes third lookupVar: 'temp') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/25/2013 16:45' prior: 35052588! testOptimizedBlockWrittenAfterClosedOverCase2 | ast scopes | ast := (OCOpalExamples>>#optimizedBlockWrittenAfterClosedOverCase2) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self deny: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupVar: 'index') definingScope= ast scope. scopes := (OCScopesCollector new visitNode: ast) scopes. self assert: ( scopes third lookupVar: 'temp') isEscapingWrite. self assert: ( scopes third lookupVar: 'temp') isEscaping. ! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'ClementBera 5/24/2013 13:46'! testSemanticAnalysisOnNonMethodNode | ast | { [ 1+ 2 ] . thisContext . (OCOpalExamples>>#exampleReturn1) } do: [ :object | ast := object sourceNode. self shouldnt: [ ast doSemanticAnalysis ] raise: Error. ]. #( '1' 'true' 'nil' '1 + 2' '^1' '1 + 2. 2 + 3' '#(1 true)' '{ #foo . 1 }' '1+2;+3' ) do: [ :source | ast := RBParser parseExpression: source. self shouldnt: [ ast doSemanticAnalysis ] raise: Error ]. ast := RBParser parseMethod: 'foo 1 + 2'. self shouldnt: [ ast doSemanticAnalysis ] raise: Error ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/25/2013 16:46' prior: 35055298! testSingleRemoteTempVar | ast | ast := (OCOpalExamples>>#singleRemoteTempVar) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'collection') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. self assert: (ast scope lookupVar: 'collection') isTemp. self deny: (ast scope lookupVar: 'collection') isInstance. self deny: (ast scope lookupVar: 'index') isInstance. self deny: (ast scope lookupVar: 'block') isInstance. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/25/2013 16:46' prior: 35056161! testsingleRemoteTempVarWhileWithTempNotInlined | ast | ast := (OCOpalExamples>>#exampleWhileWithTempNotInlined) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 5/25/2013 16:47' prior: 35056769! testsingleRemoteTempVarWrittenAfterClosedOver | ast | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: (ast scope lookupVar: 'index') isWrite. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self deny: (ast scope lookupVar: 'collection') isWrite. self assert: (ast scope lookupVar: 'block') isTemp. self assert: (ast scope lookupVar: 'collection') isTemp. ! ! OCAbstractMethodScope removeSelector: #lookupScopeForVar:! OCCompilerTest removeSelector: #testReservedNameAsTempShadowing! OCCompilerNotifyingTest removeSelector: #testCaseOtherwiseBlockWithArgument! OCCompilerNotifyingTest removeSelector: #expectedFailures! OpalCompiler removeSelector: #initialize! OCCompilerSyntaxErrorNotifyingTest removeSelector: #expectedFailures! "Compiler"! "Manifest-Core"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Refactoring-Critics"! ----End fileIn----! ----QUIT----an Array(26 May 2013 2:51:01 pm) Pharo.image priorSource: 5626846! ----STARTUP----an Array(26 May 2013 2:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 May 2013 2:58 pm) Pharo-30169.image priorSource: 5694530! ----STARTUP----an Array(27 May 2013 8:20:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/27/2013 08:18' prior: 39181575! commentForCurrentUpdate ^ '10654 Add the --save option to the eval command line handler https://pharo.fogbugz.com/f/cases/10654 10698 add back Block printing https://pharo.fogbugz.com/f/cases/10698 (When Opal is Active) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/27/2013 08:18'! script267 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1465.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.25.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.118.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/27/2013 08:18'! update30170 "self new update30170" self withUpdateLog: '10654 Add the --save option to the eval command line handler https://pharo.fogbugz.com/f/cases/10654 10698 add back Block printing https://pharo.fogbugz.com/f/cases/10698 (When Opal is Active) '. self loadTogether: self script267 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EvaluateCommandLineHandler commentStamp: '' prior: 38602602! Usage: eval [--help] [--save] --help list this help message --save save the image after evaluation of the expression a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !BlockClosure methodsFor: 'printing' stamp: 'MarcusDenker 5/21/2013 11:42' prior: 36787020! printOn: aStream aStream nextPutAll: self sourceNode formattedCode.! ! !EvaluateCommandLineHandler commentStamp: '' prior: 39259717! Usage: eval [--help] [--save] --help list this help message --save save the image after evaluation of the expression a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'DamienCassou 5/25/2013 15:29' prior: 34053898! activate self activateHelpWithoutArguments ifTrue: [ ^ self ]. self arguments ifEmpty: [ ^ self evaluateStdIn ]. self evaluateArguments. (self hasOption: 'save') ifTrue: [ Smalltalk snapshot: true andQuit: true ] ifFalse: [ self quit ]! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'DamienCassou 5/16/2013 18:21' prior: 21248189! evaluateArguments | args | args := ((self arguments size > 1 and: [ self arguments first = '--save' ]) ifTrue: [ self arguments allButFirst ] ifFalse: [ self arguments ]) joinUsing: Character space. args ifEmpty: [ ^ self ]. self evaluate: args! ! "Kernel"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(27 May 2013 8:20:55 am) Pharo.image priorSource: 5694723! ----STARTUP----an Array(27 May 2013 8:27:56 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 May 2013 8:27:56 am) Pharo-30170.image priorSource: 5707836! ----STARTUP----an Array(27 May 2013 4:46:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/27/2013 16:44' prior: 39249449! commentForCurrentUpdate ^ '10764 EyeInspector never terminate refresh process leading to no garbage collection https://pharo.fogbugz.com/f/cases/10764 10767 Object>>#assert:description: should take a block for the description https://pharo.fogbugz.com/f/cases/10767 10698 add back Block printing https://pharo.fogbugz.com/f/cases/10698 (Really only if Opal is Active) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/27/2013 16:44'! script268 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1467.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-EstebanLorenzano.139.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.14.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.98.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.27.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.118.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.842.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/27/2013 16:45'! update30171 "self new update30171" self withUpdateLog: '10764 EyeInspector never terminate refresh process leading to no garbage collection https://pharo.fogbugz.com/f/cases/10764 10767 Object>>#assert:description: should take a block for the description https://pharo.fogbugz.com/f/cases/10767 10698 add back Block printing https://pharo.fogbugz.com/f/cases/10698 (Really only if Opal is Active) '. self loadTogether: self script268 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'printing' stamp: 'MarcusDenker 5/27/2013 16:43' prior: 39260577! printOn: aStream OpalCompiler isActive ifTrue: [ aStream nextPutAll: self sourceNode formattedCode ] ifFalse: [ aStream nextPutAll: '[...]']! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'ClementBera 5/27/2013 09:57' prior: 38705119! initialize "Initialization code for InspectorWrapper" super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !Object methodsFor: 'error handling' stamp: 'CamilloBruni 5/27/2013 16:20' prior: 28604950! assert: aBlock description: aStringOrBlock "Throw an assertion error if aBlock does not evaluates to true." aBlock value ifFalse: [ AssertionFailure signal: aStringOrBlock value ]! ! "Kernel"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(27 May 2013 4:46:54 pm) Pharo.image priorSource: 5708032! ----STARTUP----an Array(27 May 2013 4:54:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 May 2013 4:54:01 pm) Pharo-30171.image priorSource: 5719915! ----STARTUP----an Array(28 May 2013 1:27:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/28/2013 13:24' prior: 39262761! commentForCurrentUpdate ^ '10544 Fixes to RING meta model https://pharo.fogbugz.com/f/cases/10544 10771 SpecDebugger calls wrong spec https://pharo.fogbugz.com/f/cases/10771 10772 Smalltalk condenseChanges broken https://pharo.fogbugz.com/f/cases/10772 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/28/2013 13:24'! script269 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1467.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.140.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-EstebanLorenzano.185.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.29.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.187.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.118.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/28/2013 13:24'! update30172 "self new update30172" self withUpdateLog: '10544 Fixes to RING meta model https://pharo.fogbugz.com/f/cases/10544 10771 SpecDebugger calls wrong spec https://pharo.fogbugz.com/f/cases/10771 10772 Smalltalk condenseChanges broken https://pharo.fogbugz.com/f/cases/10772 '. self loadTogether: self script269 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RGClassDescriptionDefinition commentStamp: 'VeronicaUquillas 4/19/2011 16:00' prior: 31614535! RGClassDescriptionDefinition is the common parent for classes and metaclasses defining instance variables! !RGBehaviorDefinition methodsFor: 'accessing class hierarchy' stamp: 'DamienCassou 4/29/2013 15:23'! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: superclass. superclass allSuperclassesDo: aBlock]! ! !RGBehaviorDefinition methodsFor: 'testing class hierarchy' stamp: 'DamienCassou 4/29/2013 15:25'! includesBehavior: aClass ^self == aClass or: [self inheritsFrom: aClass]! ! !RGBehaviorDefinition methodsFor: 'accessing class hierarchy' stamp: 'DamienCassou 4/29/2013 15:32'! methodDict ^ methods! ! !RGClassDescriptionDefinition commentStamp: 'VeronicaUquillas 4/19/2011 16:00' prior: 39285190! RGClassDescriptionDefinition is the common parent for classes and metaclasses defining instance variables! !RGClassDescriptionDefinition methodsFor: 'organization' stamp: 'DamienCassou 4/29/2013 15:27'! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." organization ifNil: [self organization: (ClassOrganizer defaultList: self selectors asArray sort)]. "Making sure that subject is set correctly. It should not be necessary." organization ifNotNil: [organization setSubject: self]. ^ organization! ! !RGClassDescriptionDefinition methodsFor: 'accessing' stamp: 'DamienCassou 4/29/2013 15:28'! organization: aClassOrg "Install an instance of ClassOrganizer that represents the organization of the messages of the receiver." aClassOrg ifNotNil: [aClassOrg setSubject: self]. organization := aClassOrg! ! !RGClassDescriptionDefinition methodsFor: '*NautilusCommon' stamp: 'DamienCassou 4/29/2013 15:19'! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! !RGMethodDefinition methodsFor: 'testing' stamp: 'DamienCassou 4/29/2013 15:41'! hasBreakpoint ^ self compiledMethod hasBreakpoint! ! !RGMethodDefinition methodsFor: 'testing' stamp: 'DamienCassou 4/29/2013 15:41'! isAbstract ^ self compiledMethod isAbstract! ! !RGMethodDefinition methodsFor: 'testing' stamp: 'DamienCassou 4/29/2013 15:41'! isOverridden ^ self compiledMethod isOverridden! ! !InspectorWrapper class methodsFor: 'specs' stamp: 'ClementBera 5/28/2013 09:45' prior: 36502593! debuggerSpec ^ SpecLayout composed add: #inspector withSpec: #debuggerSpec; yourself! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'PavelKrivanek 5/28/2013 12:43' prior: 33512217! condenseChanges "Move all the changes onto a compacted sources file." "Smalltalk condenseChanges" | f file oldChanges basename | f := FileStream fileNamed: 'ST80.temp'. f header; timeStamp. 'Condensing Changes File...' displayProgressFrom: 0 to: self classNames size + self traitNames size during: [:bar | | count | count := 0. self allClassesAndTraitsDo: [:classOrTrait | bar current: (count := count + 1). classOrTrait moveChangesTo: f. classOrTrait putClassCommentToCondensedChangesFile: f. classOrTrait classSide moveChangesTo: f]]. self lastQuitLogPosition: f position. f trailer; close. CompiledMethod cleanUp. oldChanges := SourceFiles at: 2. oldChanges close. (oldChanges name , '.old') asFileReference delete. file := oldChanges name asFileReference. basename := file basename. file renameTo: basename, '.old'. f name asFileReference renameTo: basename. self setMacFileInfoOn: oldChanges name. SourceFiles at: 2 put: (FileStream oldFileNamed: oldChanges name)! ! !RBBrowserEnvironment methodsFor: 'private' stamp: 'DamienCassou 4/29/2013 15:17' prior: 30342241! allClassesDo: aBlock self systemDictionary allClassesDo: [ :each | aBlock value: each; value: each theMetaClass ]! ! "NautilusCommon"! "Refactoring-Environment"! "Ring-Core-Kernel"! "Spec-Inspector"! "System-Support"! ----End fileIn----! ----QUIT----an Array(28 May 2013 1:27:55 pm) Pharo.image priorSource: 5720111! ----STARTUP----an Array(28 May 2013 1:35:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 May 2013 1:35:01 pm) Pharo-30172.image priorSource: 5734722! ----STARTUP----an Array(29 May 2013 10:27:47 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/29/2013 10:25' prior: 39274840! commentForCurrentUpdate ^ '10781 Proper initialization/cleanup of RecentMessageList https://pharo.fogbugz.com/f/cases/10781 10783 EyeInspector raise errors on misprinted objects https://pharo.fogbugz.com/f/cases/10783 7377 Where DateModel should open the calendar https://pharo.fogbugz.com/f/cases/7377 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/29/2013 10:25'! script270 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1467.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.140.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.118.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.545.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/29/2013 10:25'! update30173 "self new update30173" self withUpdateLog: '10781 Proper initialization/cleanup of RecentMessageList https://pharo.fogbugz.com/f/cases/10781 10783 EyeInspector raise errors on misprinted objects https://pharo.fogbugz.com/f/cases/10783 7377 Where DateModel should open the calendar https://pharo.fogbugz.com/f/cases/7377 '. self loadTogether: self script270 merge: false. RecentMessageList cleanUp. . self flushCaches. ! ! "ScriptLoader30"! !EyeInspectorTest methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/28/2013 17:14'! instancesToTry ^ { Object new . Class . Metaclass . Array new . Dictionary new . WordArray new. ByteArray new. thisContext . PluggableTextMorph new . 12 . #symbol }! ! !EyeInspectorTest methodsFor: 'as yet unclassified' stamp: 'ClementBera 5/28/2013 17:09'! testErrorRaised | inspector | self instancesToTry do: [ :each | self shouldnt: [ inspector := each ogle ] raise: Error. inspector window close ] ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 5/28/2013 17:02' prior: 36497096! printDescription: item "When you select an element in the list of the inspector, prnt on the description textModel the element selected" item ifNotNil: [:element | description text: ([ element description ] on: Error do: [ 'Error while printing element' ]) ]! ! !DateModel methodsFor: 'private' stamp: 'SeanDeNigris 2/6/2013 15:46' prior: 20454678! chooseDate | calendar | calendar := CalendarMorph openOn: Date today. calendar center: calendar cursorPoint; fitInWorld; onChoiceSend: #onDateChosen: to: self.! ! !RecentMessageList methodsFor: 'initialization' stamp: 'IgorStasenko 5/28/2013 16:32' prior: 32149489! registerToAnnouncements SystemAnnouncer uniqueInstance unsubscribe: self. SystemAnnouncer uniqueInstance weak "Class" on: ClassAdded send: #aClassHasBeenAdded: to: self; on: ClassCommented send: #aClassHasBeenCommented: to: self; on: ClassModifiedClassDefinition send: #aClassHasBeenModified: to: self; on: ClassRecategorized send: #aClassHasBeenRecategorized: to: self; on: ClassRemoved send: #aClassHasBeenRemoved: to: self; on: ClassRenamed send: #aClassHasBeenRenamed: to: self; on: ClassReorganized send: #aClassHasBeenReorganized: to: self; "Method" on: MethodAdded send: #aMethodHasBeenAdded: to: self; on: MethodModified send: #aMethodHasBeenModified: to: self; on: MethodRecategorized send: #aMethodHasBeenRecategorized: to: self; on: MethodRemoved send: #aMethodHasBeenRemoved: to: self! ! "RecentSubmissions"! "Spec-Inspector"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(29 May 2013 10:27:54 am) Pharo.image priorSource: 5734918! ----STARTUP----an Array(29 May 2013 10:35 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 May 2013 10:35:01 am) Pharo-30173.image priorSource: 5747740! ----STARTUP----an Array(30 May 2013 10:48:47 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/30/2013 10:46' prior: 39289648! commentForCurrentUpdate ^ '10788 move CompiledMethod>>#protocol to Kernel https://pharo.fogbugz.com/f/cases/10788 10759 AnObsoleteDefaultCommandLineHandler is in the image https://pharo.fogbugz.com/f/cases/10759 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/30/2013 10:46'! script271 ^ 'AST-Core-MarcusDenker.157.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.26.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.85.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-EstebanLorenzano.66.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.123.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/30/2013 10:46'! update30174 "self new update30174" self withUpdateLog: '10788 move CompiledMethod>>#protocol to Kernel https://pharo.fogbugz.com/f/cases/10788 10759 AnObsoleteDefaultCommandLineHandler is in the image https://pharo.fogbugz.com/f/cases/10759 '. self loadTogether: self script271 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EvaluateCommandLineHandler commentStamp: '' prior: 39260724! Usage: eval [--help] [--save] [ --no-quit ] --help list this help message --save save the image after evaluation of the expression --no-quit if specified, the image continues runing after evaluating the a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !PharoCommandLineHandler commentStamp: '' prior: 39106815! Usage: [] [--help] [--copyright] [--version] [--list] [ --no-quit ] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers --no-quit keep the image running without activating any other command line handler a valid subcommand in --list Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !EvaluateCommandLineHandler commentStamp: '' prior: 39312900! Usage: eval [--help] [--save] [ --no-quit ] --help list this help message --save save the image after evaluation of the expression --no-quit if specified, the image continues runing after evaluating the a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/29/2013 15:51' prior: 39261600! activate self activateHelp ifTrue: [ ^ self ]. self arguments ifEmpty: [ ^ self evaluateStdIn ]. self evaluateArguments. (self hasOption: 'save') ifTrue: [ ^ Smalltalk snapshot: true andQuit: (self hasOption: 'no-quit') not ]. (self hasOption: 'no-quit') ifFalse: [ self quit ]! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/29/2013 15:52'! argumentString | arguments skipArguments | "Now this is ugly... Coral would be nice here!! Basically we strip skipArguments if, and only if they appear at the beginning of arguments" skipArguments := #( '--no-quit' '--save'). arguments := (skipArguments includes: self arguments first) ifFalse: [ self arguments ] ifTrue: [ (self arguments size >= 2 and: [ skipArguments includes: self arguments second ]) ifTrue: [ self arguments allButFirst: 2 ] ifFalse: [ self arguments allButFirst ]]. ^ arguments joinUsing: Character space.! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/26/2013 16:14' prior: 39261958! evaluateArguments | argumentString | argumentString := self argumentString. argumentString ifEmpty: [ ^ self ]. self evaluate: argumentString! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 5/26/2013 13:58'! testBasicCommandlineHandler | args | args := self argumentsWith: #(). "BasicCommandLineHandler gets activated by default on image startup, so there is no need to activate it in a nother case" self deny: (BasicCommandLineHandler isResponsibleFor: args). "The BasicCommandLineHandler should always delegate to the PharoCommandLineHandler if it is present" self assert: BasicCommandLineHandler new selectedHandler equals: PharoCommandLineHandler! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/26/2013 14:04' prior: 39087480! activate [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments| arguments first ]) ] on: Exit do: [ :exit | ^ self handleExit: exit ]! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'CamilloBruni 5/26/2013 14:08'! default ^ self help; exitSuccess! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/26/2013 14:05' prior: 39088695! handleArgument: aString "give priority to subcommands" self handleSubcommand == self ifFalse: [ ^ self ]. "check for default options" aString ifEmpty: [ ^ self default ]. aString = '--version' ifTrue: [ ^ self version ]. aString = '--help' ifTrue: [ ^ self help ]. aString = '--list' ifTrue: [ ^ self list ]. aString = '--copyright' ifTrue: [ ^ self copyright ]. aString = '--no-quit' ifTrue: [ ^ self noQuit ]. "none of the previous options matched hence we output an error message" self error.! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/26/2013 13:42'! handleEmptyArguments Smalltalk isHeadless ifFalse: [ ^ self ]. self help.! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'CamilloBruni 5/26/2013 14:01'! noQuit "Nothing to be done, unlike the other commands the image continues running"! ! !BasicCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 5/26/2013 13:59'! selectedHandler ^ self selectHandlers ifEmpty: [ nil ] ifNotEmpty: [ :handlers | handlers first ]! ! !PharoCommandLineHandler commentStamp: '' prior: 39313921! Usage: [] [--help] [--copyright] [--version] [--list] [ --no-quit ] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers --no-quit keep the image running without activating any other command line handler a valid subcommand in --list Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !PharoCommandLineHandler methodsFor: 'commands' stamp: 'CamilloBruni 5/26/2013 14:08'! default Smalltalk isHeadless ifFalse: [ ^ self noQuit ]. ^ super default! ! !CompiledMethod methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/12/2011 11:28' prior: 19777723! protocol " start to migrate to RING API " ^ self category! ! !CompiledMethod methodsFor: 'accessing' stamp: 'CamilloBruni 1/30/2013 21:09' prior: 19777873! protocol: aString ^ self methodClass organization classify: self selector under: aString! ! "Kernel"! "NautilusCommon"! "System-CommandLine"! "Tests"! ----End fileIn----! ----QUIT----an Array(30 May 2013 10:48:56 am) Pharo.image priorSource: 5747935! ----STARTUP----an Array(30 May 2013 10:56:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 May 2013 10:56:02 am) Pharo-30174.image priorSource: 5765999! ----STARTUP----an Array(31 May 2013 10:19:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/31/2013 10:16' prior: 39302666! commentForCurrentUpdate ^ '10812 CommandlineTestRunner >> #stderr is not returning properly https://pharo.fogbugz.com/f/cases/10812 10807 Scanning wrong token produces DNU https://pharo.fogbugz.com/f/cases/10807 10809 Path>>isAbsoluteWindowsPath: can be optimized https://pharo.fogbugz.com/f/cases/10809 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/31/2013 10:16'! script272 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-StephaneDucasse.40.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.46.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.123.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.7.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/31/2013 10:17'! update30175 "self new update30175" self withUpdateLog: '10812 CommandlineTestRunner >> #stderr is not returning properly https://pharo.fogbugz.com/f/cases/10812 10807 Scanning wrong token produces DNU https://pharo.fogbugz.com/f/cases/10807 10809 Path>>isAbsoluteWindowsPath: can be optimized https://pharo.fogbugz.com/f/cases/10809 '. self loadTogether: self script272 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Path commentStamp: '' prior: 29239947! I'm a private and abstract filesystem path, independent of the string representation used to describe paths on a specific filesystem. I provide methods for navigating the filesystem hierarchy and working with absolute and relative paths. I only refer to a concrete file or directory with regard to a specific filesystem. Normally users should not use me directly. Path independent representation of delimiter is defined by DiskFileSystem current delimiter. API instance creation: #* and #/ are mnemonic to . and / whose arguments should be string file- or directory names, not fragments of Unix path notation intended to be parsed. #/ and #* provide a mini-DSL for building up paths, while #readFrom:delimiter: parses path strings. Note that (Path with: 'parent/child/') isRelative returns true because it creates to a relative path to a file/directory called 'parent/child'. In bash you'd escape the slashes like this: parent\/child\/ similarly (Path with: '/parent/child/') isRelative returns true That's a relative path to '/parent/child'. In bash: /\parent\/child\/ (Path with: '') isRelative returns false Because this is an absolute path to the root of the file system. Absolute paths have an empty first element. If you consider $/ the separator, '/usr/local/bin' has an empty first element. ! !RBScannerTest methodsFor: 'initialize' stamp: 'GiselaDecuzzi 5/30/2013 14:38'! buildScannerForText: source ^RBScanner on: (ReadStream on: source)! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 5/30/2013 15:00'! testNextWithAWrongSymbolGetError | source scanner | source := '#^'. scanner := self buildScannerForText: source. self should: [scanner next] raise: SyntaxErrorNotification.! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 5/30/2013 14:39'! testNextWithAnIdentifierTokenGetTheIdentifierToken | source scanner token | source := 'identifierToken'. scanner := self buildScannerForText: source. token := scanner next. self assert: token isIdentifier. self assert: token value equals: source.! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 5/30/2013 15:28'! testNextWithAnOpeningCommentGetError | source | source := '"only the opening'. self should: [(self buildScannerForText: source) next] raise: SyntaxErrorNotification! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 5/30/2013 15:00'! testNextWithAnOpeningStringsGetError | source scanner | source := '''only the opening'. scanner := self buildScannerForText: source. self should: [scanner next] raise: SyntaxErrorNotification.! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 5/30/2013 15:25'! testNextWithAnUnknownCharacterGetError | source scanner | source := '¿'. scanner := self buildScannerForText: source. self should: [scanner next] raise: SyntaxErrorNotification! ! !RBParser methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/30/2013 14:31' prior: 30919888! initializeParserWith: aString source := aString. self scanner: (self scannerClass on: (ReadStream on: aString))! ! !CommandLineTestRunner methodsFor: 'accessing' stamp: 'CamilloBruni 5/30/2013 22:55' prior: 19742968! stderr (stderr isNil or: [ stderr closed ]) ifTrue: [ stderr := VTermOutputDriver stderr ]. ^ stderr ! ! !CommandLineTestRunner methodsFor: 'accessing' stamp: 'CamilloBruni 5/30/2013 22:55' prior: 19743156! stdout (stdout isNil or: [ stdout closed ]) ifTrue: [ stdout := VTermOutputDriver stdout ]. ^ stdout! ! !Path commentStamp: '' prior: 39331326! I'm a private and abstract filesystem path, independent of the string representation used to describe paths on a specific filesystem. I provide methods for navigating the filesystem hierarchy and working with absolute and relative paths. I only refer to a concrete file or directory with regard to a specific filesystem. Normally users should not use me directly. Path independent representation of delimiter is defined by DiskFileSystem current delimiter. API instance creation: #* and #/ are mnemonic to . and / whose arguments should be string file- or directory names, not fragments of Unix path notation intended to be parsed. #/ and #* provide a mini-DSL for building up paths, while #readFrom:delimiter: parses path strings. Note that (Path with: 'parent/child/') isRelative returns true because it creates to a relative path to a file/directory called 'parent/child'. In bash you'd escape the slashes like this: parent\/child\/ similarly (Path with: '/parent/child/') isRelative returns true That's a relative path to '/parent/child'. In bash: /\parent\/child\/ (Path with: '') isRelative returns false Because this is an absolute path to the root of the file system. Absolute paths have an empty first element. If you consider $/ the separator, '/usr/local/bin' has an empty first element. ! !Path class methodsFor: 'private' stamp: 'CamilloBruni 5/30/2013 22:43'! absoluteWindowsPathRegex ^ absoluteWindowsPathRegex ifNil: [ absoluteWindowsPathRegex := '[a-zA-Z]\:\\.*' asRegex ]! ! !Path class methodsFor: 'private' stamp: 'CamilloBruni 5/30/2013 22:43' prior: 29254626! isAbsoluteWindowsPath: aString ^ self absoluteWindowsPathRegex matches: aString! ! "AST-Core"! "AST-Tests-Core"! "FileSystem-Core"! "SUnit-UI"! ----End fileIn----! ----QUIT----an Array(31 May 2013 10:19:53 am) Pharo.image priorSource: 5766197! ----STARTUP----an Array(31 May 2013 10:26:44 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 May 2013 10:26:44 am) Pharo-30175.image priorSource: 5782176! ----STARTUP----an Array(31 May 2013 1:42:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/31/2013 13:40' prior: 39320928! commentForCurrentUpdate ^ '10770 Comment of on:send:to: https://pharo.fogbugz.com/f/cases/10770 10805 Obsolete behaviors remaining: an Array(AnObsoleteDefaultCommandLineHandler class AnObsoleteDefaultCommandLineHandler) https://pharo.fogbugz.com/f/cases/10805 10811 Add an InvalidUTF8 exception https://pharo.fogbugz.com/f/cases/10811 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/31/2013 13:40'! script273 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.133.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.26.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.125.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/31/2013 13:40'! update30176 "self new update30176" self withUpdateLog: '10770 Comment of on:send:to: https://pharo.fogbugz.com/f/cases/10770 10805 Obsolete behaviors remaining: an Array(AnObsoleteDefaultCommandLineHandler class AnObsoleteDefaultCommandLineHandler) https://pharo.fogbugz.com/f/cases/10805 10811 Add an InvalidUTF8 exception https://pharo.fogbugz.com/f/cases/10811 '. self loadTogether: self script273 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ZnInvalidUTF8 commentStamp: '' prior: 0! An InvalidUTF8 is an Exception that is raised when attempting to decode an invalid UTF-8 Sequence Instance Variables string: string - the string that were decoded ! !Announcer methodsFor: 'convenience' stamp: 'StephaneDucasse 5/31/2013 11:10' prior: 17575513! on: anAnnouncementClass send: aSelector to: anObject "Declare that when anAnnouncementClass is raised, anObject should receive the message aSelector. When the message expects one argument (eg #fooAnnouncement:) the announcement is passed as argument. When the message expects two arguments (eg #fooAnnouncement:announcer:) both the announcement and the announcer are passed as argument" ^ self subscribe: anAnnouncementClass send: aSelector to: anObject! ! !BasicCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 5/31/2013 11:32' prior: 39087063! priority "Lowest priority" ^ Float infinity negated! ! !ZnInvalidUTF8 commentStamp: '' prior: 39347556! An InvalidUTF8 is an Exception that is raised when attempting to decode an invalid UTF-8 Sequence Instance Variables string: string - the string that were decoded ! !ZnInvalidUTF8 methodsFor: 'private' stamp: 'nice 5/23/2013 22:36'! isResumable ^true! ! !ZnInvalidUTF8 methodsFor: 'private' stamp: 'nice 5/23/2013 22:43'! messageText "Return a textual description of the exception." ^messageText ifNil: [string ifNil: ['Invalid UTF8'] ifNotNil: ['Invalid utf8: ', string]]! ! !ZnInvalidUTF8 methodsFor: 'private' stamp: 'nice 5/23/2013 22:40'! string: aString string := aString! ! !PharoCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 5/31/2013 11:32'! priority "Highest priority" ^ Float infinity! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'nicolascellier 5/30/2013 22:04' prior: 55729421! nextFromStream: stream | code byte next | (byte := stream next) < 128 ifTrue: [ ^ Character codePoint: byte ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ code := byte bitAnd: 2r00011111. ((next := stream next) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error: 'illegal UTF-8 encoding' ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ code := byte bitAnd: 2r00001111. 2 timesRepeat: [ ((next := stream next) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error: 'illegal UTF-8 encoding' ] ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ code := byte bitAnd: 2r00000111. 3 timesRepeat: [ ((next := stream next) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error: 'illegal UTF-8 encoding' ] ]. ^ Character codePoint: code ]. ZnInvalidUTF8 new signal: 'illegal UTF-8 encoding'! ! !UTF8TextConverter methodsFor: 'conversion' stamp: 'nicolascellier 5/30/2013 22:05' prior: 54435869! errorMalformedInput ^ZnInvalidUTF8 new signal: 'Invalid utf8 input detected'! ! "Announcements-Core"! "Multilingual-TextConversion"! "System-CommandLine"! "Zinc-Character-Encoding-Core"! ----End fileIn----! ----QUIT----an Array(31 May 2013 1:42:52 pm) Pharo.image priorSource: 5782374! ----STARTUP----an Array(31 May 2013 1:50:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 May 2013 1:50:11 pm) Pharo-30176.image priorSource: 5796416! ----STARTUP----an Array(31 May 2013 6:10:36 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/31/2013 16:15' prior: 39337104! commentForCurrentUpdate ^ '10718 More commands for Node Navigation https://pharo.fogbugz.com/f/cases/10718 10411 flush after nextChunkPut: https://pharo.fogbugz.com/f/cases/10411 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/31/2013 16:15'! script274 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.3.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-EstebanLorenzano.41.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.125.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.34.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/31/2013 16:16'! update30177 "self new update30177" self withUpdateLog: '10718 More commands for Node Navigation https://pharo.fogbugz.com/f/cases/10718 10411 flush after nextChunkPut: https://pharo.fogbugz.com/f/cases/10411 '. self loadTogether: self script274 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfNodeNavigation commentStamp: '' prior: 0! I'm the configuration of project NodeNavigation! !NNavDirection commentStamp: '' prior: 0! I'm the one who knows generalization to navigate an ast tree I have two concret classes: NavigateInto and NavigateOver! !NNavDirectionChild commentStamp: '' prior: 0! I'm the one who knowshow to navigate inside the child nodes! !NNavDirectionFirstChild commentStamp: '' prior: 0! I navigate throw the childs picking allways the firs one! !NNavDirectionParent commentStamp: '' prior: 0! I'm the one who knows how to navigate going to the parent node.! !NNavDirectionPreviousSelection commentStamp: '' prior: 0! I know how to go to the previous selection in the text! !NNavDirectionSibling commentStamp: '' prior: 0! I'm the one who knows how to navigate in an horizontal way visiting node in the same level statin from left to right ! !NNavDirectionPreviousBrother commentStamp: '' prior: 0! Go back to the brother before! !NNavNavigation commentStamp: '' prior: 0! I'm the one who manage the navigation and I have memory from what I've been navigating! !TextModel methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/22/2013 10:39' prior: 37378074! sourceTextArea ^ self widget! ! !NNavNavigateTest methodsFor: 'sibling' stamp: 'GiselaDecuzzi 5/13/2013 17:45' prior: 37378405! testNextBrotherItsTheNextOfTheChilds | bigBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parent addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parent addNode: littleBrother. brother := NNavDirectionSibling brotherNodeFor: bigBrother . self assert: brother equals: littleBrother . ! ! !NNavNavigateTest methodsFor: 'sibling-prev' stamp: 'GiselaDecuzzi 5/14/2013 16:07'! testNextBrotherItsThePreviousOfTheChilds | bigBrother middleBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'big'. parent addNode: bigBrother. middleBrother := RBVariableNode named: 'middle'. parent addNode: middleBrother. littleBrother := RBVariableNode named: 'little'. parent addNode: littleBrother. brother := NNavDirectionPreviousBrother brotherNodeFor: middleBrother . self assert: brother equals: bigBrother . ! ! !NNavNavigateTest methodsFor: 'sibling-prev' stamp: 'GiselaDecuzzi 5/14/2013 16:09'! testNextBrotherWhenItsTheFirstItsTheLast | bigBrother middleBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'big'. parent addNode: bigBrother. middleBrother := RBVariableNode named: 'middle'. parent addNode: middleBrother. littleBrother := RBVariableNode named: 'little'. parent addNode: littleBrother. brother := NNavDirectionPreviousBrother brotherNodeFor: bigBrother. self assert: brother equals: littleBrother .! ! !NNavNavigateTest methodsFor: 'sibling' stamp: 'GiselaDecuzzi 5/13/2013 17:45' prior: 37378877! testNextBrotherWhenItsTheLasItsTheFirst | bigBrother littleBrother brother parent | parent := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parent addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parent addNode: littleBrother. brother := NNavDirectionSibling brotherNodeFor: littleBrother. self assert: brother equals: bigBrother .! ! !NNavNavigateTest methodsFor: 'children' stamp: 'GiselaDecuzzi 5/13/2013 17:45' prior: 37379346! testNextChildWhenHasChildsIsTheBiggerOne | bigBrother littleBrother child parentRenamed | parentRenamed := RBSequenceNode new. bigBrother := RBVariableNode named: 'pp'. parentRenamed addNode: bigBrother. littleBrother := RBVariableNode named: 'roque'. parentRenamed addNode: littleBrother. child := NNavDirectionFirstChild childNodeFor: parentRenamed . self assert: child equals: bigBrother .! ! !NNavNavigateTest methodsFor: 'children' stamp: 'GiselaDecuzzi 5/13/2013 17:45' prior: 37379837! testNextChildWhenItHasNotChildsItIsNil | child parent | parent := RBSequenceNode new. child := NNavDirectionFirstChild childNodeFor: parent . self assert: child isNil .! ! !NNavNavigateTest methodsFor: 'sibling' stamp: 'GiselaDecuzzi 5/14/2013 16:09' prior: 37380099! testNotBrotherWhenOrphan | orphanNode brother | orphanNode := RBVariableNode named: 'roque'. brother := NNavDirectionPreviousBrother brotherNodeFor: orphanNode. self assert: brother isNil.! ! !NNavNavigateTest methodsFor: 'sibling-prev' stamp: 'GiselaDecuzzi 5/14/2013 16:10'! testNotPreviousBrotherWhenOrphan | orphanNode brother | orphanNode := RBVariableNode named: 'roque'. brother := NNavDirectionPreviousBrother brotherNodeFor: orphanNode. self assert: brother isNil.! ! !NNavNavigateTest methodsFor: 'sibling' stamp: 'GiselaDecuzzi 5/13/2013 17:45' prior: 37380374! testSameNodeIsTheBrotherWhenOnlyChild | uniqueChildNode brother parent | parent := RBSequenceNode new. uniqueChildNode := RBVariableNode named: 'roque'. parent addNode: uniqueChildNode. self assert: uniqueChildNode parent equals: parent. self assert: parent children size equals: 1. brother := NNavDirectionSibling brotherNodeFor: uniqueChildNode. self assert: brother equals: uniqueChildNode .! ! !ConfigurationOfNodeNavigation commentStamp: '' prior: 39361495! I'm the configuration of project NodeNavigation! !ConfigurationOfNodeNavigation class methodsFor: 'development support' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfNodeNavigation class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfNodeNavigation class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfNodeNavigation class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfNodeNavigation class methodsFor: 'metacello tool support' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfNodeNavigation class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfNodeNavigation class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfNodeNavigation class methodsFor: 'loading' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfNodeNavigation class methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! project ^self new project! ! !ConfigurationOfNodeNavigation class methodsFor: 'development support' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/13/2013 13:48'! baseline01: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/gisela/NodeNavigation/main'. spec package: 'NodeNavigation' with: 'NodeNavigation-GiselaDecuzzi.24']! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/22/2013 09:41'! baseline11: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/gisela/NodeNavigation/main'. spec package: 'NodeNavigation' with: 'NodeNavigation-GiselaDecuzzi.33']! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/22/2013 09:41'! baseline12: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/gisela/NodeNavigation/main'. spec package: 'NodeNavigation' ]! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes" ^ #().! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/22/2013 09:41'! development: spec spec for: #common version: '1.2-baseline'.! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/7/2013 15:33'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" project := MetacelloMCProject new projectAttributes: self customProjectAttributes. constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self project: project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/13/2013 13:48'! version10: spec spec for: #common do: [ spec blessing: #release. spec repository: 'http://smalltalkhub.com/mc/gisela/NodeNavigation/main'. spec package: 'NodeNavigation' with: 'NodeNavigation-GiselaDecuzzi.24']! ! !ConfigurationOfNodeNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/22/2013 09:40'! version11: spec "This version introduces: - Refactor in the navigations (an object for navigations and strategies for the directions) - Fixed problems with the key mappings - More navigations: - Ctrl + o if you have more brothers to select the one from a list. - Ctrl + u to move between siblings but in the oposite direction that with ctrl+shift+u - Ctrl + shift + b to go to the previous selection " spec for: #common do: [ spec blessing: #release. spec repository: 'http://smalltalkhub.com/mc/gisela/NodeNavigation/main'. spec package: 'NodeNavigation' with: 'NodeNavigation-GiselaDecuzzi.33']! ! !NNavDirection commentStamp: '' prior: 39361598! I'm the one who knows generalization to navigate an ast tree I have two concret classes: NavigateInto and NavigateOver! !NNavDirection class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/13/2013 16:50'! calculateBestSeletionFor: node beforeSelection: selectionInText step: blockForStep | selectionInNode | node ifNil:[ ^selectionInText ]. selectionInNode := node start to: node stop. ^ (selectionInText = selectionInNode ) ifTrue: [blockForStep value: selectionInText value: node ] ifFalse: [selectionInNode ].! ! !NNavDirection class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/14/2013 16:31'! findSelectionFor: navigationContext self subclassResponsibility .! ! !NNavDirectionChild commentStamp: '' prior: 39361777! I'm the one who knowshow to navigate inside the child nodes! !NNavDirectionChild class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/13/2013 15:20'! askForNodeSelectionFrom: nodes ^ UIManager default enterOrRequestFrom: (nodes collect: [:node | (node respondsTo: #selector )ifTrue:[node selector] ifFalse:[node name]]) values: nodes lines: #() title: 'Which code do you want to select?' translated! ! !NNavDirectionChild class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/14/2013 14:42'! buildShortcut: aBuilder (aBuilder shortcut: #selectChild) category: #SmalltalkEditor default: $o command mac | $o ctrl unix | $o ctrl do: [ :morph | morph standOutIntoScope ] description: 'Select the node choosing the child'! ! !NNavDirectionChild class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/7/2013 17:23'! childNodeFor: node "We find the child for a node, if it has not childs nil, if has more than one let the user select the one he wants." node ifNil:[^nil]. ^ node children isEmpty ifTrue: [ nil ] ifFalse: [ node children size = 1 ifTrue: [node children at: 1] ifFalse: [ self askForNodeSelectionFrom: node children] ]! ! !NNavDirectionChild class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/14/2013 16:26'! findSelectionFor: navigationContext ^ self calculateBestSeletionFor: (self childNodeFor: navigationContext bestNodeForSelection) beforeSelection: navigationContext textSelection step: [ :selection :target | self selectionChildrenScope: selection for: target ]! ! !NNavDirectionChild class methodsFor: 'step into' stamp: 'GiselaDecuzzi 5/14/2013 14:18'! selectionChildrenScope: selected for: node | children | node ifNil: [ ^selected ]. children := self childNodeFor: node. ^children ifNil: [ selected ] ifNotNil: [children start to: children stop]! ! !NNavDirectionFirstChild commentStamp: '' prior: 39361902! I navigate throw the childs picking allways the firs one! !NNavDirectionFirstChild class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/14/2013 14:34'! buildShortcut: aBuilder (aBuilder shortcut: #firstChild) category: #SmalltalkEditor default: $o command shift mac| $o ctrl shift unix | $o ctrl shift do: [ :morph | morph standOutIntoFirstScope] description: 'Select the node scope reducing to the first child' ! ! !NNavDirectionFirstChild class methodsFor: 'private' stamp: 'GiselaDecuzzi 5/14/2013 16:33'! childNodeFor: node "We find the child for a node, if it has not childs nil, if has more than one return the first one." node ifNil:[^nil]. ^ node children isEmpty ifTrue: [ nil ] ifFalse: [ node children at: 1] ! ! !NNavDirectionParent commentStamp: '' prior: 39362020! I'm the one who knows how to navigate going to the parent node.! !NNavDirectionParent class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/14/2013 14:34'! buildShortcut: aBuilder (aBuilder shortcut: #parent) category: #SmalltalkEditor default: $p command shift mac| $p ctrl shift unix | $p ctrl shift do: [ :morph | morph standOutOverScope ] description: 'Select the node scope going to the paren node' ! ! !NNavDirectionParent class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/14/2013 16:28'! findSelectionFor: navigationContext ^ self calculateBestSeletionFor: navigationContext bestNodeForSelection beforeSelection: navigationContext textSelection step: [ :selection :target | self selectionParentScope: selection for: target parent ]! ! !NNavDirectionParent class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/7/2013 14:43'! selectionParentScope: selected for: node | nodeSelection | node ifNil: [ ^selected ]. nodeSelection := node start to: node stop. selected = nodeSelection ifTrue: [ ^self selectionParentScope: selected for: node parent ] ifFalse: [ ^nodeSelection ].! ! !NNavDirectionPreviousSelection commentStamp: '' prior: 39362156! I know how to go to the previous selection in the text! !NNavDirectionPreviousSelection class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/22/2013 09:42'! buildShortcut: aBuilder (aBuilder shortcut: #previousSelection) category: #SmalltalkEditor default: $b command shift mac| $b ctrl shift unix | $b ctrl shift do: [ :morph | morph standOutPreviousSelection ] description: 'Select the previous selected scope'! ! !NNavDirectionPreviousSelection class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/14/2013 15:35'! findSelectionFor: navigationContext ^ navigationContext lastSelection ! ! !NNavDirectionSibling commentStamp: '' prior: 39362273! I'm the one who knows how to navigate in an horizontal way visiting node in the same level statin from left to right ! !NNavDirectionPreviousBrother commentStamp: '' prior: 39362461! Go back to the brother before! !NNavDirectionPreviousBrother class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/13/2013 18:07'! brotherPositionFor: nodePosition brothers: brothers ^ nodePosition = 1 ifTrue: [ brothers size ] ifFalse: [ nodePosition - 1 ].! ! !NNavDirectionPreviousBrother class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/14/2013 14:34'! buildShortcut: aBuilder (aBuilder shortcut: #previousSibling) category: #SmalltalkEditor default: $u command mac| $u ctrl unix | $u ctrl do: [ :morph | morph standOutPreviousChild] description: 'Select the node scope reducing to the previous sibling' ! ! !NNavDirectionSibling class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/13/2013 18:07'! brotherNodeFor: node "Finds the next brother for the node" | brothers nodePosition nextBrotherPosition | node ifNil: [ ^nil ]. node parent ifNil: [ ^nil ]. "no parent you are orphan" brothers := node parent children. nodePosition := (brothers indexOf: node) . nextBrotherPosition := self brotherPositionFor: nodePosition brothers: brothers . ^ brothers at: nextBrotherPosition. ! ! !NNavDirectionSibling class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/13/2013 17:28'! brotherPositionFor: nodePosition brothers: brothers ^ nodePosition = brothers size ifTrue: [ 1 ] ifFalse: [ nodePosition + 1 ]. ! ! !NNavDirectionSibling class methodsFor: 'builder' stamp: 'GiselaDecuzzi 5/14/2013 14:34'! buildShortcut: aBuilder (aBuilder shortcut: #sibling) category: #SmalltalkEditor default: $u command shift mac| $u ctrl shift unix | $u ctrl shift do: [ :morph | morph standOutHorizontalScope] description: 'Select the node going to the siblings' ! ! !NNavDirectionSibling class methodsFor: 'stand out' stamp: 'GiselaDecuzzi 5/14/2013 16:27'! findSelectionFor: navigationContext ^ self calculateBestSeletionFor: (self brotherNodeFor: navigationContext bestNodeForSelection ) beforeSelection: navigationContext textSelection step: [ :selection :target | self selectionBrotherScope: selection for: target ]! ! !NNavDirectionSibling class methodsFor: 'step over' stamp: 'GiselaDecuzzi 5/13/2013 17:03'! selectionBrotherScope: selected for: node | brother | node ifNil: [ ^selected ]. brother := self brotherNodeFor: node. ^brother ifNil:[nil] ifNotNil: [ brother start to: brother stop].! ! !NNavNavigation commentStamp: '' prior: 39362547! I'm the one who manage the navigation and I have memory from what I've been navigating! !NNavNavigation class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 5/13/2013 16:10'! new "yes I'm a singleton" Instance ifNil: [Instance := super new]. ^Instance. ! ! !NNavNavigation methodsFor: 'current-context' stamp: 'GiselaDecuzzi 5/14/2013 15:14'! bestNodeForSelection | root | currentEditor isWorkspace ifTrue: [root := RBParser parseFaultyExpression: self currentText] ifFalse: [root := RBParser parseFaultyMethod: self currentText]. ^ root bestNodeFor: self textSelection . ! ! !NNavNavigation methodsFor: 'current-context' stamp: 'GiselaDecuzzi 5/14/2013 15:10'! currentText ^ self textArea text! ! !NNavNavigation methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/14/2013 15:35'! lastSelection ^ lastSelection! ! !NNavNavigation methodsFor: 'navigation' stamp: 'GiselaDecuzzi 5/14/2013 16:00'! navigate: editor direction: direction | newSelection | currentEditor := editor. newSelection := direction findSelectionFor: self. self textArea selectFrom: newSelection first to: newSelection last. self updateState: newSelection . ! ! !NNavNavigation methodsFor: 'current-context' stamp: 'GiselaDecuzzi 5/30/2013 13:55'! textArea ^ currentEditor sourceTextArea ! ! !NNavNavigation methodsFor: 'current-context' stamp: 'GiselaDecuzzi 5/14/2013 15:11'! textSelection ^ self textArea selectionInterval! ! !NNavNavigation methodsFor: 'private' stamp: 'GiselaDecuzzi 5/14/2013 16:02'! updateState: newSelection newSelection = currentSelection ifFalse: [ lastSelection := currentSelection]. currentSelection := newSelection. currentEditor := nil. ! ! !WriteStream methodsFor: 'filein/out' stamp: 'PavelKrivanek 4/26/2013 11:35' prior: 55002828! nextChunkPut: aString "Append the argument, aString, to the receiver, doubling embedded terminators." | i remainder terminator | terminator := $!!. remainder := aString asString. [(i := remainder indexOf: terminator) = 0] whileFalse: [self nextPutAll: (remainder copyFrom: 1 to: i). self nextPut: terminator. "double imbedded terminators" remainder := remainder copyFrom: i+1 to: remainder size]. self nextPutAll: remainder. aString asString includesUnifiedCharacter ifTrue: [ self nextPut: terminator. self nextPutAll: ']lang['. aString asString writeLeadingCharRunsOn: self. ]. self nextPut: terminator. self flush.! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 17:57' prior: 37381580! standOutHorizontalScope self handleEdit: [NNavNavigation new navigate: textMorph editor direction: NNavDirectionSibling ] ! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 18:04' prior: 37381770! standOutIntoFirstScope self handleEdit: [NNavNavigation new navigate: textMorph editor direction: NNavDirectionFirstChild ]! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 17:56' prior: 37381958! standOutIntoScope self handleEdit: [NNavNavigation new navigate: textMorph editor direction: NNavDirectionChild]! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 17:56' prior: 37382135! standOutOverScope self handleEdit: [NNavNavigation new navigate: textMorph editor direction: NNavDirectionParent] ! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/13/2013 18:03'! standOutPreviousChild self handleEdit: [ NNavNavigation new navigate: textMorph editor direction: NNavDirectionPreviousBrother ]! ! !PluggableTextMorph methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 5/14/2013 15:38'! standOutPreviousSelection self handleEdit: [ NNavNavigation new navigate: textMorph editor direction: NNavDirectionPreviousSelection ]! ! NNavNavigateOver class removeSelector: #selectionParentScope:for:! NNavNavigateOver class removeSelector: #findSelection:in:! NNavNavigateOver class removeSelector: #buildShortcut:! Smalltalk globals removeClassNamed: #NNavNavigateOver! NNavNavigateNode class removeSelector: #standOutFor:! NNavNavigateNode class removeSelector: #findBestNodeIn:for:isWorkspace:! NNavNavigateNode class removeSelector: #findBest:selection:step:! NNavNavigateNode class removeSelector: #askForNodeSelectionFrom:! NNavNavigateIntoNotAsk class removeSelector: #childNodeFor:! NNavNavigateIntoNotAsk class removeSelector: #buildShortcut:! Smalltalk globals removeClassNamed: #NNavNavigateIntoNotAsk! NNavNavigateInto class removeSelector: #selectionChildrenScope:for:! NNavNavigateInto class removeSelector: #findSelection:in:! NNavNavigateInto class removeSelector: #childNodeFor:! NNavNavigateInto class removeSelector: #buildShortcut:! Smalltalk globals removeClassNamed: #NNavNavigateInto! NNavNavigateHorizontal class removeSelector: #selectionBrotherScope:for:! NNavNavigateHorizontal class removeSelector: #findSelection:in:! NNavNavigateHorizontal class removeSelector: #buildShortcut:! NNavNavigateHorizontal class removeSelector: #brotherNodeFor:! Smalltalk globals removeClassNamed: #NNavNavigateHorizontal! Smalltalk globals removeClassNamed: #NNavNavigateNode! "Collections-Streams"! "ConfigurationOfNodeNavigation"! "NodeNavigation"! ----End fileIn----! ----QUIT----an Array(31 May 2013 6:10:48 pm) Pharo.image priorSource: 5796612! ----STARTUP----an Array(31 May 2013 6:18:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 May 2013 6:18:34 pm) Pharo-30177.image priorSource: 5832590! ----STARTUP----an Array(31 May 2013 7:04:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 5/31/2013 19:02' prior: 39351341! commentForCurrentUpdate ^ '10714 General update https://pharo.fogbugz.com/f/cases/10714 10816 ReleaseTest>>#testUndeclared fails in Opal RegressionTests https://pharo.fogbugz.com/f/cases/10816 10815 failing in Opal regressionTEst: DebuggerTest.testBasic https://pharo.fogbugz.com/f/cases/10815'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 5/31/2013 19:02'! script275 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.826.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.125.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/31/2013 19:01' prior: 39081905! update30164 "self new update30164" self withUpdateLog: '10710 DefaultCommandLineHandler class>>#startUp: cleanup https://pharo.fogbugz.com/f/cases/10710 first part, I needed to split the update :('. self loadTogether: self script261 merge: false. "Smalltalk removeFromStartUpList: DefaultCommandLineHandler." self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 5/31/2013 19:02'! update30178 "self new update30178" self withUpdateLog: '10714 General update https://pharo.fogbugz.com/f/cases/10714 10816 ReleaseTest>>#testUndeclared fails in Opal RegressionTests https://pharo.fogbugz.com/f/cases/10816 10815 failing in Opal regressionTEst: DebuggerTest.testBasic https://pharo.fogbugz.com/f/cases/10815'. self loadTogether: self script275 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewListExample methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 18:03' prior: 36223656! displayItem: anItem ^ anItem asStringMorph color: Color red; yourself" ^ TextInputFieldModel new ghostText: anItem asString."! ! !NewListRenderer methodsFor: 'drawing - item' stamp: 'BenjaminVanRyseghem 5/21/2013 18:01' prior: 28432780! drawItem: item at: index on: aCanvas "Display the given item at the given row on the given canvas." | itemColor drawBounds itemBounds backgroundColor | drawBounds := self drawBoundsForItem: item at: index. itemBounds := drawBounds translateBy: (self iconMaxSize x + self gapBetweenIconAndItem) @ (2 * self itemHalfOffSet). itemColor := self colorForItem: item at: index. backgroundColor := self backgroundColorForIndex: index. item listRenderOn: aCanvas atRow: index bounds: itemBounds color: itemColor backgroundColor: backgroundColor from: self. self drawIconOn: aCanvas forAt: index from: drawBounds. self flag: 'should be item drawAsListItemOn: aCanvas row: index bounds: drawBounds list: self '! ! !NewListRenderer methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/21/2013 18:04' prior: 28429227! drawOn: aCanvas | first last | aCanvas fillRectangle: self fullBounds color: self drawColor. first := self topVisibleIndexForCanvas: aCanvas. last := self bottomVisibleIndexForCanvas: aCanvas. self listSize isZero ifTrue: [ last := 0 ]. first to: last do: [ :index || item | item := self itemAtIndex: index. self drawBackgroundForItem: item at: index on: aCanvas. self drawItem: item at: index on: aCanvas ]. self hasHeader ifTrue: [ self drawHeaderOn: aCanvas ].! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/21/2013 15:26' prior: 26994975! update: aSymbol aSymbol == #selection ifTrue: [^ self listManager updateSelectionFromModel]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == #selectItems and: [aSymbol second isCollection]]]) ifTrue: [^ self selectedItems: aSymbol second]. ((aSymbol isKindOf: Array) and: [ aSymbol size == 2 and: [ aSymbol first == #autoDeselection ] ] ) ifTrue: [ ^ self autoDeselection: aSymbol second ]. aSymbol == self nodeListSelector ifTrue: [^ self updateList]. aSymbol == #selectAll ifTrue: [^ self listManager selectAll]. aSymbol == #deselectAll ifTrue: [^ self listManager deselectAll]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #openPath]]]) "allow directed path opening where multiple trees exist" ifTrue: [^(self allNodeMorphs at: 1 ifAbsent: [^self]) openPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #openItemPath]]]) "allow directed path opening where multiple trees exist" ifTrue: [^ (self allNodeMorphs at: 1 ifAbsent: [^self]) openItemPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #expandAllFromNode:]]]) ifTrue: [^ self expandAllFromNode: aSymbol third]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #closeItemPath]]]) "allow directed path closing where multiple trees exist" ifTrue: [^ (self allNodeMorphs at: 1 ifAbsent: [^self]) closeItemPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol notEmpty and: [aSymbol first == #openPath]]) ifTrue: [^(self allNodeMorphs at: 1 ifAbsent: [^self]) openPath: aSymbol allButFirst]. ((aSymbol isKindOf: Array) and: [aSymbol size = 2 and: [aSymbol first = self nodeListSelector and: [ aSymbol second == #expandRoots]]]) ifTrue: [^self expandRoots]. ((aSymbol isKindOf: Array) and: [aSymbol size = 2 and: [aSymbol first = self nodeListSelector]]) ifTrue: [aSymbol second = #expandAll ifTrue: [^ self expandAll]. aSymbol second = #collapseAll ifTrue: [^ self collapseAll]]! ! !DebuggerTest methodsFor: 'testing' stamp: 'MarcusDenker 5/31/2013 17:58' prior: 36823240! testBasic | context process debugger printedString | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := Smalltalk tools debugger new process: process controller: nil context: context. debugger expandStack. debugger toggleContextStackIndex: 1. self assert: debugger messageListIndex = 1. printedString := OpalCompiler isActive ifTrue: [ '[ 20 factorial ] in DebuggerTest>>testBasic'] ifFalse: [ '[...] in DebuggerTest>>testBasic' ]. self assert: debugger selectedContext printString = printedString. debugger send. debugger send. self assert: debugger contents = (Integer>>#factorial) sourceCode. self assert: debugger selectedContext printString = 'SmallInteger(Integer)>>factorial'.! ! !Morph methodsFor: '*Morphic-Base-Widgets' stamp: 'BenjaminVanRyseghem 5/21/2013 18:02' prior: 26587892! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph self bounds: drawBounds. self fullDrawOn: aCanvas. (aMorph submorphs includes: self) ifFalse: [ aMorph addMorph: self ]! ! "Morphic-Base"! "NewList"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(31 May 2013 7:04:52 pm) Pharo.image priorSource: 5832786! ----STARTUP----an Array(31 May 2013 7:12:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 May 2013 7:12:13 pm) Pharo-30178.image priorSource: 5849313! ----STARTUP----an Array(4 June 2013 12:51:24 pm) as /home/ubuntu/pharo/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/4/2013 08:31' prior: 39387515! commentForCurrentUpdate ^ '10825 Lots of Obsolete classes related to AST Navigation https://pharo.fogbugz.com/f/cases/10825 10837 CheckBox glitch fixed!! https://pharo.fogbugz.com/f/cases/10837 10826 ./pharo Pharo.image -e 1 + 2 does not work https://pharo.fogbugz.com/f/cases/10826'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/4/2013 08:31'! script276 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.85.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.547.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/4/2013 08:31'! update30179 "self new update30179" self withUpdateLog: '10825 Lots of Obsolete classes related to AST Navigation https://pharo.fogbugz.com/f/cases/10825 10837 CheckBox glitch fixed!! https://pharo.fogbugz.com/f/cases/10837 10826 ./pharo Pharo.image -e 1 + 2 does not work https://pharo.fogbugz.com/f/cases/10826'. self loadTogether: self script276 merge: false. KMRepository reset. . self flushCaches. ! ! "ScriptLoader30"! !CheckboxMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 6/3/2013 15:27' prior: 19014409! initialize "Initialize the receiver." super initialize. labelClickable := true. self borderWidth: 2; "space for focus" borderColor: Color transparent; enabled: true; changeTableLayout; listDirection: #leftToRight; wrapCentering: #center; cellInset: 4; buttonMorph: self newButtonMorph; labelMorph: self newLabelMorph; on: #click send: #labelClicked to: self; on: #mouseMove send: #updateButton: to: self; on: #mouseUp send: #updateButton: to: self! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 6/1/2013 11:18' prior: 39316130! argumentString | arguments skipArguments | "Now this is ugly... Coral would be nice here!! Basically we strip skipArguments if, and only if they appear at the beginning of arguments" skipArguments := #( '--no-quit' '--save' '-e'). arguments := (skipArguments includes: self arguments first) ifFalse: [ self arguments ] ifTrue: [ (self arguments size >= 2 and: [ skipArguments includes: self arguments second ]) ifTrue: [ self arguments allButFirst: 2 ] ifFalse: [ self arguments allButFirst ]]. ^ arguments joinUsing: Character space.! ! "Polymorph-Widgets"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(4 June 2013 12:51:40 pm) Pharo.image priorSource: 5849509! ----STARTUP----an Array(4 June 2013 3:06:56 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 June 2013 3:06:56 pm) Pharo-30179.image priorSource: 5861449! ----STARTUP----an Array(4 June 2013 4:39:09 pm) as /home/ubuntu/pharo/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(4 June 2013 4:39:16 pm) Pharo.image priorSource: 5861687! ----STARTUP----an Array(4 June 2013 6:51:25 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 June 2013 6:51:25 pm) Pharo-30179.image priorSource: 5861910! ----STARTUP----an Array(5 June 2013 10:52:57 am) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/5/2013 12:51' prior: 39404255! commentForCurrentUpdate ^ '10844 Calling deprecated method triggerEvent:with:ifNotHandled: twice when running regressionTests https://pharo.fogbugz.com/f/cases/10844 10786 Semantic analysis not working for instance variables https://pharo.fogbugz.com/f/cases/10786 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/5/2013 12:51'! script277 ^ 'AST-Core-MarcusDenker.161.mcz AST-Interpreter-Core-MarcusDenker.95.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.128.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.188.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/5/2013 12:51'! update30180 "self new update30180" self withUpdateLog: '10844 Calling deprecated method triggerEvent:with:ifNotHandled: twice when running regressionTests https://pharo.fogbugz.com/f/cases/10844 10786 Semantic analysis not working for instance variables https://pharo.fogbugz.com/f/cases/10786 '. self loadTogether: self script277 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SugsMenuBuilder class methodsFor: 'private' stamp: 'MarcusDenker 6/4/2013 14:54' prior: 38981541! findBestNodeFor: context | root node| root := context selectedMethod ifNil:[ RBParser parseFaultyExpression: context code] ifNotNil: [ RBParser parseFaultyMethod: context code]. context selectedClass ifNotNil: [:theClass| root methodNode methodClass: theClass]. root doSemanticAnalysis. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! EventManagerTest removeSelector: #testNoValueSupplierHasArguments! "SmartSuggestions"! "Tests"! ----End fileIn----! ----QUIT----an Array(5 June 2013 10:53:14 am) Pharo.image priorSource: 5862147! ----STARTUP----an Array(5 June 2013 1:01:12 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 June 2013 1:01:12 pm) Pharo-30180.image priorSource: 5873301! ----STARTUP----an Array(6 June 2013 8:20:58 am) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/6/2013 10:05' prior: 39416879! commentForCurrentUpdate ^ '10842 Recategorize AST interpreter visit methods https://pharo.fogbugz.com/f/cases/10842 10850 Fix openWorldWithSpec https://pharo.fogbugz.com/f/cases/10850'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/6/2013 10:05'! script278 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.807.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/6/2013 10:05'! update30181 "self new update30181" self withUpdateLog: '10842 Recategorize AST interpreter visit methods https://pharo.fogbugz.com/f/cases/10842 10850 Fix openWorldWithSpec https://pharo.fogbugz.com/f/cases/10850'. self loadTogether: self script278 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 6/4/2013 14:55' prior: 34662354! visitTemporaryNode: aNode "Sent *each time* a temporary node is found" ^ self visitVariableNode: aNode! ! !TRBProgramNodeVisitor methodsFor: 'visiting' stamp: 'ClementBera 6/4/2013 14:53' prior: 34662517! visitTemporaryNodes: aNodeCollection "This is triggered when defining the temporaries between the pipes" ^self visitArgumentNodes: aNodeCollection! ! !WorldModel class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/5/2013 22:51' prior: 38036700! setUpWorld World changeProportionalLayout. World submorphs do: [:e | e delete ]. (Smalltalk at: #PolymorphSystemSettings) perform: #desktopColor: with: (Color r: 0.78 g: 0.753 b: 0.71). ((Smalltalk at: #UITheme) perform: #currentSettings) perform: #windowColor: with: (Color r: 0.745 g: 0.745 b: 0.745). (Smalltalk at: #TaskbarMorph) perform: #showTaskbar: with: false! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 12/4/2012 17:42' prior: 35485916! acceptArgumentNode: aRBArgumentNode ^ self acceptVariableNode: aRBArgumentNode! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 12/5/2012 10:31' prior: 35486077! acceptArrayNode: anArrayNode | array | array := Array new: anArrayNode statements size. anArrayNode statements doWithIndex: [ :statement :i| array at: i put: (self interpret: statement)]. self updateGotoContext. ^ array! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'MarcusDenker 5/22/2013 16:48' prior: 39021337! acceptAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable binding accept: self assign: value. ^ value! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 6/4/2013 14:55' prior: 35486689! acceptBlockNode: aBlockNode ^ ASTBlockClosure new homeContext: self context; code: aBlockNode! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 10/19/2012 13:49' prior: 35486869! acceptCascadeNode: aCascadeNode | receiver lastResult | receiver := self interpret: aCascadeNode receiver. aCascadeNode messages do: [ :aMessageNode| lastResult := self acceptMessageNode: aMessageNode receiver: receiver. self ifSkip: [ ^ lastResult ]]. ^ lastResult! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'CamilloBruni 10/5/2011 17:38' prior: 35487230! acceptLiteralArrayNode: aNode ^ aNode value! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 4/2/2013 16:52' prior: 35487354! acceptLiteralNode: aLiteralNode ^ aLiteralNode value ! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 2/26/2013 09:59' prior: 35487490! acceptMessageNode: aMessageNode | receiver | receiver := self interpret: aMessageNode receiver. self ifSkip: [^receiver ]. ^ self acceptMessageNode: aMessageNode receiver: receiver.! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 3/18/2013 14:18' prior: 35487761! acceptMessageNode: aMessageNode receiver: receiver | arguments message lookUpClass| context currentExecutedNode: aMessageNode. arguments := (aMessageNode arguments collect: [ :argument| |arg| arg := (self interpret: argument). self ifSkip: [ ^ arg ]. arg ]) asArray. message := Message selector: aMessageNode selector arguments: arguments. lookUpClass := aMessageNode isSuperSend ifFalse: [ self classOf: receiver ] ifTrue: [ self currentMethodClass superclass ]. ^ self send: message to: receiver class: lookUpClass! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 10/19/2012 10:36' prior: 35488427! acceptReturnNode: aReturnNode | returnValue | returnValue := self interpret: aReturnNode value. self ifSkip: [ ^ returnValue ]. self assert: gotoContext == false. gotoContext := context returnContext. ^ returnValue! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'CamilloBruni 10/6/2011 15:51' prior: 35488737! acceptSelfNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 4/6/2013 10:31' prior: 35488858! acceptSequenceNode: aSequenceNode | lastResult | aSequenceNode statements do: [ :statement| lastResult := self interpret: statement. self ifSkip: [ ^ lastResult ]]. self updateGotoContext. ^ lastResult! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'CamilloBruni 12/5/2011 19:31' prior: 35489156! acceptSuperNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'ClementBera 12/4/2012 17:40' prior: 35489279! acceptTemporaryNode: aRBTemporaryNode ^ self acceptVariableNode: aRBTemporaryNode! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'CamilloBruni 12/5/2011 15:14' prior: 35489444! acceptThisContextNode: thisContextNode ^ self context! ! !ASTInterpreter methodsFor: 'deprecated' stamp: 'MarcusDenker 5/22/2013 16:49' prior: 39021643! acceptVariableNode: aVariableNode ^ aVariableNode binding readWith: self ! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35502918! visitArgumentNode: aRBArgumentNode ^ self visitVariableNode: aRBArgumentNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35503088! visitArrayNode: anArrayNode | array | array := Array new: anArrayNode statements size. anArrayNode statements doWithIndex: [ :statement :i| array at: i put: (self interpret: statement)]. self updateGotoContext. ^ array! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'MarcusDenker 5/22/2013 16:49' prior: 39022248! visitAssignmentNode: anAssignmentNode | value variable | value := self interpret: anAssignmentNode value. variable := anAssignmentNode variable. variable binding accept: self assign: value inNode: variable. ^ value! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35503719! visitBlockNode: aBlockNode ^ ASTBlockClosure new homeContext: self context; code: aBlockNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35503908! visitCascadeNode: aCascadeNode | receiver lastResult | receiver := self interpret: aCascadeNode receiver. aCascadeNode messages do: [ :aMessageNode| lastResult := self visitMessageNode: aMessageNode receiver: receiver. self ifSkip: [ ^ lastResult ]]. ^ lastResult! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35504277! visitLiteralArrayNode: aNode ^ aNode value! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35504412! visitLiteralNode: aLiteralNode ^ aLiteralNode value ! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35504558! visitMessageNode: aMessageNode | receiver | receiver := self interpret: aMessageNode receiver. self ifSkip: [^receiver ]. ^ self visitMessageNode: aMessageNode receiver: receiver.! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35504838! visitMessageNode: aMessageNode receiver: receiver | arguments message lookUpClass| context currentExecutedNode: aMessageNode. arguments := (aMessageNode arguments collect: [ :argument| |arg| arg := (self interpret: argument). self ifSkip: [ ^ arg ]. arg ]) asArray. message := Message selector: aMessageNode selector arguments: arguments. lookUpClass := aMessageNode isSuperSend ifFalse: [ self classOf: receiver ] ifTrue: [ self currentMethodClass superclass ]. ^ self send: message to: receiver class: lookUpClass! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35505513! visitReturnNode: aReturnNode | returnValue | returnValue := self interpret: aReturnNode value. self ifSkip: [ ^ returnValue ]. self assert: gotoContext == false. gotoContext := context returnContext. ^ returnValue! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35505832! visitSelfNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35505964! visitSequenceNode: aSequenceNode | lastResult | aSequenceNode statements do: [ :statement| lastResult := self interpret: statement. self ifSkip: [ ^ lastResult ]]. self updateGotoContext. ^ lastResult! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35506271! visitSuperNode: aSelf ^ self currentSelf! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35506404! visitTemporaryNode: aRBTemporaryNode ^ self visitVariableNode: aRBTemporaryNode! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'ClementBera 4/12/2013 13:57' prior: 35506577! visitThisContextNode: thisContextNode ^ self context! ! !ASTInterpreter methodsFor: 'visiting' stamp: 'MarcusDenker 5/22/2013 16:50' prior: 39022580! visitVariableNode: aVariableNode ^ aVariableNode binding readWith: self inNode: aVariableNode! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/5/2013 22:38' prior: 38033487! openWorldWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into the world" ^ self openWorldWithSpecLayout: (self retrieveSpec: aSpec)! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/5/2013 22:43' prior: 38033915! openWorldWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into the world" (window contents notNil and: [ self needRebuild not ]) ifTrue: [ window contents rebuildWithSpecLayout: aSpec ] ifFalse: [ window contents: (WorldModel new model: self). window contents openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window contents! ! !Trait method! visitTemporaryNode: aNode "Sent *each time* a temporary node is found" ^ self visitVariableNode: aNode! ! !Trait method! visitTemporaryNodes: aNodeCollection "This is triggered when defining the temporaries between the pipes" ^self visitArgumentNodes: aNodeCollection! ! "AST-Core"! "AST-Interpreter-Core"! "Spec-Core"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(6 June 2013 8:21:16 am) Pharo.image priorSource: 5873539! ----STARTUP----an Array(6 June 2013 10:28:23 am) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 June 2013 10:28:23 am) Pharo-30181.image priorSource: 5894209! ----STARTUP----an Array(7 June 2013 9:13:54 am) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/7/2013 11:10' prior: 39428270! commentForCurrentUpdate ^ '10115 MCClassTraitDefinition DNU printDefinitionOn: https://pharo.fogbugz.com/f/cases/10115 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 11:10'! script279 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.327.mcz OpalCompiler-Tests-MarcusDenker.174.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/7/2013 11:11'! update30182 "self new update30182" self withUpdateLog: '10115 MCClassTraitDefinition DNU printDefinitionOn: https://pharo.fogbugz.com/f/cases/10115 '. self loadTogether: self script279 merge: false. RPackageOrganizer initialize. self flushCaches. ! ! "ScriptLoader30"! !MCClassTraitDefinition methodsFor: 'visiting' stamp: 'al 10/9/2005 20:23' prior: 24655491! accept: aVisitor ^ aVisitor visitClassTraitDefinition: self.! ! !MCClassTraitDefinition methodsFor: 'printing' stamp: 'CamilleTeruel 5/13/2013 18:05'! printDefinitionOn: stream stream nextPutAll: self baseTrait; nextPutAll: ' classTrait'; cr; tab; nextPutAll: 'uses: '; nextPutAll: self classTraitCompositionString! ! "Monticello"! ----End fileIn----! ----QUIT----an Array(7 June 2013 9:16:01 am) Pharo.image priorSource: 5894447! ----STARTUP----an Array(7 June 2013 11:22:55 am) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 11:22:55 am) Pharo-30182.image priorSource: 5905197! ----STARTUP----an Array(7 June 2013 11:13:52 am) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/7/2013 13:11' prior: 39449182! commentForCurrentUpdate ^ '10813 Update Opal to latest version in image https://pharo.fogbugz.com/f/cases/10813'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/7/2013 13:11'! script280 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.473.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/7/2013 13:11'! update30183 "self new update30183" self withUpdateLog: '10813 Update Opal to latest version in image https://pharo.fogbugz.com/f/cases/10813'. self loadTogether: self script280 merge: false. self flushCaches. ! ! "ScriptLoader30"! !IRTempAccess commentStamp: '' prior: 0! I model the pushTemporary Bytecode! !OCSpecialVariable commentStamp: '' prior: 0! I model self, thisContext and super! !OCSemanticError commentStamp: '' prior: 38927822! Raises a semantic error during semantic analysis! !IRReconstructor commentStamp: '' prior: 0! I am a specialized IRBuilder for the decompiler! !OCASTSemanticAnalyzer commentStamp: '' prior: 38907176! I visit each node in the abstract syntax tree while growing and shrinking a scope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding OCVariable. Exceptions are raised for undefined variable references and so on (see subclasses of OCSemanticWarning). ! !OCAbstractMethodScope commentStamp: '' prior: 0! I am an abstract superclass for Block and Method scopes! !OCBlockScope commentStamp: '' prior: 0! I modelt the scope of a block! !OCOptimizedBlockScope commentStamp: '' prior: 0! In Smalltalk, methods like ifTrue: are inlined an there is no Block for the arguments of these message sends. To be consistent, these blocks need nevertheless a scope. ! !OCMethodScope commentStamp: '' prior: 0! I am the scope for a Method! !IRTranslator commentStamp: 'ajh 3/25/2003 00:26' prior: 34867118! I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen). I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.! !CCompilationContext commentStamp: '' prior: 39232120! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !CompilationContext commentStamp: '' prior: 0! The compilationContext holds all information that is needed in the whole compiler chain. ! !DebuggerMethodMapOpal commentStamp: '' prior: 0! I provide helper methods deadling with -> pc to text mapping -> temporary variables for contexts -> reading and setting tempary variables All methods here should be moved to MethodContext.! !IRBytecodeScope commentStamp: '' prior: 0! I am an internal class used by the decompiler to recreat variable information! !IRRemoteArray commentStamp: '' prior: 0! I model the TempVector for the decompiler! !OpalCompiler commentStamp: '' prior: 0! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !IRTempAccess commentStamp: '' prior: 39470152! I model the pushTemporary Bytecode! !OCSpecialVariable commentStamp: '' prior: 39470246! I model self, thisContext and super! !OCSemanticError commentStamp: '' prior: 39470346! Raises a semantic error during semantic analysis! !OCSemanticWarning methodsFor: 'accessing' stamp: 'MarcusDenker 6/7/2013 13:05' prior: 38566013! compilationContext ^ compilationContext! ! !IRReconstructor commentStamp: '' prior: 39470452! I am a specialized IRBuilder for the decompiler! !OCASTSemanticAnalyzer commentStamp: '' prior: 39470570! I visit each node in the abstract syntax tree while growing and shrinking a scope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding OCVariable. Exceptions are raised for undefined variable references and so on (see subclasses of OCSemanticWarning). ! !IRMethod methodsFor: 'translating' stamp: 'MarcusDenker 5/27/2013 16:01' prior: 38565122! generate: trailer | irTranslator | irTranslator := IRTranslator new compilationContext: compilationContext; trailer: trailer; interpret: self; pragmas: pragmas; yourself. compiledMethod := irTranslator compiledMethod. self sourceNode ifNotNil: [ compiledMethod classBinding: self sourceNode methodClass binding. compiledMethod selector: self sourceNode selector.] ifNil: [ compiledMethod classBinding: UndefinedObject binding. compiledMethod selector: #UndefinedMethod ]. ^compiledMethod.! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 5/27/2013 17:08' prior: 34809719! closureFrom: fromSeqId to: toSeqId copyNumCopiedValues: numCopied numArgs: numArgs2 | distance from to | (numCopied < 0 or: [numCopied > 15]) ifTrue: [^self error: 'too many copied vars']. from := seqOrder at: fromSeqId. to := seqOrder at: toSeqId ifAbsent: [^ self]. "not done yet" distance := (from + 1 to: to -1 ) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]. distance > 1023 ifTrue: [self error: 'forward jump too big']. self nextPut: (Bytecodes at: #PushClosureCopyNumCopiedValuesNuumArgsJumpSize); nextPut: numArgs2 + (numCopied bitShift: 4); nextPut: (distance bitShift: -8); nextPut: (distance bitAnd: 16rFF). ! ! !OCAbstractMethodScope commentStamp: '' prior: 39470977! I am an abstract superclass for Block and Method scopes! !OCBlockScope commentStamp: '' prior: 39471087! I modelt the scope of a block! !OCOptimizedBlockScope commentStamp: '' prior: 39471180! In Smalltalk, methods like ifTrue: are inlined an there is no Block for the arguments of these message sends. To be consistent, these blocks need nevertheless a scope. ! !OCMethodScope commentStamp: '' prior: 39471405! I am the scope for a Method! !IRTranslator commentStamp: 'ajh 3/25/2003 00:26' prior: 39471501! I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen). I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.! !IRTranslator methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 16:03'! compilationContext ^compilationContext ifNil: [ compilationContext := CompilationContext default ]! ! !IRTranslator methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 16:00'! compilationContext: aContext compilationContext := aContext! ! !IRTranslator methodsFor: 'initialize' stamp: 'MarcusDenker 5/27/2013 16:04' prior: 34869211! initialize gen := self compilationContext bytecodeGeneratorClass new . trailer := CompiledMethodTrailer empty. currentScope := Stack new. tempVectorStack := Stack new. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/27/2013 15:52' prior: 39179426! doSemanticAnalysis self compilationContext ifNil: [ self methodClass: nil class ]. self compilationContext semanticAnalyzerClass new compilationContext: self compilationContext; visitNode: self. OCASTClosureAnalyzer new visitNode: self. ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 5/27/2013 15:54' prior: 38321687! generateIR | ir | scope ifNil: [self doSemanticAnalysisInContext: self compilationContext ]. ir := (self compilationContext astTranslatorClass new visitNode: self) ir. self ir: ir. ^ir! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 6/4/2013 14:44' prior: 38919340! declareInstVar: name "Declare an instance variable." self methodClass addInstVarNamed: name. "We are changing a class after the scope hierarchy was created, so we need to update the Instance Scope" self methodNode scope instanceScope vars: self methodClass allInstVarNames. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should not happen']! ! !CCompilationContext commentStamp: '' prior: 39471914! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:47'! astTranslatorClass ^ astTranslatorClass ifNil: [ astTranslatorClass := OCASTTranslator ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:47'! astTranslatorClass: anObject astTranslatorClass := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:48'! bytecodeGeneratorClass ^ bytecodeGeneratorClass ifNil: [ bytecodeGeneratorClass := IRBytecodeGenerator ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:48'! bytecodeGeneratorClass: anObject bytecodeGeneratorClass := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 10:00'! compiledMethodTrailer ^ compiledMethodTrailer ifNil: [ compiledMethodTrailer := CompiledMethodTrailer empty ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 09:56'! compiledMethodTrailer: anObject compiledMethodTrailer := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:50'! parserClass ^ parserClass ifNil: [ parserClass := RBParser ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:50'! parserClass: anObject parserClass := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:50'! semanticAnalyzerClass ^ semanticAnalyzerClass ifNil: [ semanticAnalyzerClass := OCASTSemanticAnalyzer ]! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 15:51'! semanticAnalyzerClass: anObject semanticAnalyzerClass := anObject! ! !CompilationContext commentStamp: '' prior: 39472351! The compilationContext holds all information that is needed in the whole compiler chain. ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:28'! astTranslatorClass ^ astTranslatorClass ifNil: [ astTranslatorClass := OCASTTranslator ]! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:27'! astTranslatorClass: anObject astTranslatorClass := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:28'! bytecodeGeneratorClass ^ bytecodeGeneratorClass ifNil: [ bytecodeGeneratorClass := IRBytecodeGenerator ]! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:27'! bytecodeGeneratorClass: anObject bytecodeGeneratorClass := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 10:00'! compiledMethodTrailer ^ compiledMethodTrailer ifNil: [ compiledMethodTrailer := CompiledMethodTrailer empty ]! ! !CompilationContext methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 09:57'! compiledMethodTrailer: anObject compiledMethodTrailer := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:29'! parserClass ^ parserClass ifNil: [ parserClass := RBParser ]! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:27'! parserClass: anObject parserClass := anObject! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:30'! semanticAnalyzerClass ^ semanticAnalyzerClass ifNil: [ semanticAnalyzerClass := OCASTSemanticAnalyzer ]! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 5/27/2013 11:27'! semanticAnalyzerClass: anObject semanticAnalyzerClass := anObject! ! !DebuggerMethodMapOpal commentStamp: '' prior: 39472505! I provide helper methods deadling with -> pc to text mapping -> temporary variables for contexts -> reading and setting tempary variables All methods here should be moved to MethodContext.! !IRBytecodeScope commentStamp: '' prior: 39472753! I am an internal class used by the decompiler to recreat variable information! !IRRemoteArray commentStamp: '' prior: 39472887! I model the TempVector for the decompiler! !OpalCompiler commentStamp: '' prior: 39472983! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 09:59' prior: 39240158! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate: self compilationContext compiledMethodTrailer ] on: SyntaxErrorNotification do: [ :ex | self compilationContext requestor ifNotNil: [ self compilationContext requestor notify: ex errorMessage , ' ->' at: ex location in: ex errorCode. ^ self compilationContext failBlock value] ifNil: [ ex pass ]]. ^cm! ! !OpalCompiler methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 09:58'! compiledMethodTrailer: bytes self compilationContext compiledMethodTrailer: bytes! ! !OpalCompiler methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 09:59' prior: 37352828! context: aContext context := aContext! ! !OpalCompiler methodsFor: 'private' stamp: 'ClementBera 6/7/2013 09:49' prior: 39240637! doSemanticAnalysis ^[ast doSemanticAnalysisInContext: self compilationContext] on: OCSemanticError do: [ :ex | ex defaultAction. ^ self compilationContext failBlock value ]! ! !OpalCompiler methodsFor: 'accessing' stamp: 'ClementBera 6/7/2013 09:49' prior: 39242562! failBlock: aBlock self compilationContext failBlock: aBlock.! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/27/2013 16:05' prior: 39243245! parse | expression selector arguments method parseClass | parseClass := self compilationContext parserClass. self compilationContext noPattern ifFalse: [^parseClass parseMethod: source contents]. expression := (parseClass parseExpression: source contents) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 5/27/2013 16:06' prior: 38564839! parseLiterals: aString ^RBParser parseLiterals: aString! ! !OCASTCheckerTest methodsFor: 'testing - blocks - optimized' stamp: 'MarcusDenker 6/7/2013 13:06' prior: 35049183! testExampleToDoArgument | ast | ast := (OCOpalExamples>>#exampleToDoArgument) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 0.! ! IRMethod removeSelector: #tempNames! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(7 June 2013 11:14:11 am) Pharo.image priorSource: 5905435! ----STARTUP----an Array(7 June 2013 1:20:59 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 1:20:59 pm) Pharo-30183.image priorSource: 5931206! ----STARTUP----an Array(7 June 2013 11:31:53 am) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/7/2013 13:30' prior: 39460168! commentForCurrentUpdate ^ '10857 Add new public API to old compiler https://pharo.fogbugz.com/f/cases/10857'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/7/2013 13:30'! script281 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.5.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.830.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/7/2013 13:30'! update30184 "self new update30184" self withUpdateLog: '10857 Add new public API to old compiler https://pharo.fogbugz.com/f/cases/10857'. self loadTogether: self script281 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Compiler commentStamp: '' prior: 39237817! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !Compiler commentStamp: '' prior: 39496155! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:04'! category: aCategory category := aCategory. self compilationContext category: aCategory.! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'MarcusDenker 5/26/2013 09:36' prior: 39239004! compilationContextClass ^ compilationContextClass ifNil: [ CCompilationContext ]! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'MarcusDenker 5/26/2013 09:42' prior: 39239163! compilationContextClass: aClass compilationContextClass := aClass! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 10:56'! compile | methodNode | methodNode := self compile: sourceStream in: class classified: category notifying: requestor ifFail: self compilationContext failBlock. ^ methodNode generate: self compilationContext compiledMethodTrailer ! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 09:58'! compiledMethodTrailer: bytes self compilationContext compiledMethodTrailer: bytes! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:15'! context: aContext context := aContext! ! !Compiler methodsFor: 'public - decompiler' stamp: 'ClementBera 6/7/2013 09:50' prior: 37186499! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 10:26'! evaluate "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: sourceStream! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 11:11' prior: 39174098! evaluate: textOrString "See Compiler|evaluate:for:notifying:logged:. If a compilation error occurs, a Syntax Error view is created rather than notifying any requestor. Compilation is carried out with respect to nil, i.e., no object, and the invocation is not logged." ^self evaluate: textOrString in: context to: receiver notifying: requestor ifFail: self compilationContext failBlock logged: self compilationContext logged! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:05'! failBlock: aBlock self compilationContext failBlock: aBlock.! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 10:25'! format ^ self format: sourceStream in: class notifying: requestor! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:15'! logged: aBoolean self compilationContext logged: aBoolean.! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:14'! noPattern: aBoolean self compilationContext noPattern: aBoolean. ! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 5/22/2013 16:04' prior: 39175081! options: anArray "This is used for compatibility with Opal" self compilationContext compilerOptions: anArray! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 10:50'! parse ^self parse: sourceStream class: class! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 5/17/2013 10:44' prior: 39175302! parseLiterals: aString ^ Scanner new scanTokens: aString! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 4/28/2013 11:04' prior: 37259129! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^self parser parseSelector: aString! ! !Compiler methodsFor: 'private' stamp: 'ClementBera 6/7/2013 10:54' prior: 37259446! parser ^ parser ifNil: [parser := Parser new]! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:16'! receiver: anObject receiver := anObject! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:04'! requestor: aRequestor requestor := aRequestor. self compilationContext requestor: aRequestor. self compilationContext interactive: (UIManager default interactiveParserFor: self compilationContext requestor).! ! !Compiler methodsFor: 'public - opal compatibility' stamp: 'ClementBera 6/7/2013 10:03'! source: aString sourceStream := aString readStream.! ! !Compiler methodsFor: 'public access' stamp: 'ClementBera 6/7/2013 10:24'! translate "once we will have change all the sender of MethodNode>>#generate: to use compile, we can remove the methodNode encoder requestor: requestor." | methodNode | methodNode := self parser parse: sourceStream class: class category: category noPattern: self compilationContext noPattern context: context notifying: requestor ifFail: [^ self compilationContext failBlock value]. methodNode encoder requestor: requestor. ^ methodNode! ! "Compiler"! ----End fileIn----! ----QUIT----an Array(7 June 2013 11:32:16 am) Pharo.image priorSource: 5931444! ----STARTUP----an Array(7 June 2013 1:41:41 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 1:41:41 pm) Pharo-30184.image priorSource: 5948444! ----STARTUP----an Array(7 June 2013 1:27:52 pm) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'private' stamp: 'StephaneDucasse 6/7/2013 15:06'! addRepositoryDefaultToAllPackages "self new addRepositoryDefaultToAllPackages" self allManagers do: [:each | each repositoryGroup addRepository: self repository ]. ! ! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/7/2013 15:24' prior: 39486176! commentForCurrentUpdate ^ '10828 Cleaning Morphic https://pharo.fogbugz.com/f/cases/10828 10830 Cleaning Morphic (stringMorph enabled) https://pharo.fogbugz.com/f/cases/10830'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 15:24'! script282 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1469.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.831.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.191.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1132.mcz ToolsTest-MarcusDenker.denker.36.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/7/2013 15:24'! update30185 "self new update30185" self withUpdateLog: '10828 Cleaning Morphic https://pharo.fogbugz.com/f/cases/10828 10830 Cleaning Morphic (stringMorph enabled) https://pharo.fogbugz.com/f/cases/10830'. self loadTogether: self script282 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !PluggableButtonMorph commentStamp: '' prior: 29357793! A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are: getStateSelector fetch a boolean value from the model actionSelector invoke this button's action on the model getLabelSelector fetch this button's lable from the model getMenuSelector fetch a pop-up menu for this button from the model Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false. The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector. If the actionSelector takes one or more arguments, then the following are relevant: arguments A list of arguments to provide when the actionSelector is called. argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic argumentsSelector The message sent to the argumentProvider to obtain the arguments. Options: askBeforeChanging have model ask user before allowing a change that could lose edits triggerOnMouseDown do this button's action on mouse down (vs. up) transition shortcutCharacter a place to record an optional shortcut key ! !IconicListItem class methodsFor: 'instance creation' stamp: 'StephaneDucasse 5/31/2013 15:31'! text: aText icon: form ^ self new morph: aText asMorph; icon: (AlphaImageMorph new form: form); yourself! ! !IconicListItem methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:44' prior: 36986778! enabled: aBoolean self submorphs do: [ :each | each enabled: aBoolean ].! ! !IconicListItem methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:43' prior: 36987084! icon: anObject icon ifNotNil: [ self removeMorph: icon ]. icon := anObject. icon ifNotNil: [ "since the text can be removed" self addMorphFront: icon. self adjustLayoutBounds] ! ! !IconicListItem methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:41' prior: 36987764! morph: anObject morph ifNotNil: [ self removeMorph: morph ]. morph := anObject. morph ifNotNil: [ "since the text can be removed" self addMorphBack: morph. self adjustLayoutBounds] ! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 5/31/2013 17:50' prior: 51725624! modalUnlockFrom: aSystemWindow "Unlock the receiver as a modal owner of the given window." aSystemWindow removeProperty: #modalOwner. self removeProperty: #modalChild. closeBox enabled: (self valueOfProperty: #preModalCloseEnabled ifAbsent: [true]). self removeProperty: #preModalCloseEnabled. self activate! ! !StringMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 19:14'! enabled: aBoolean aBoolean ifTrue: [ self color: self defaultColor ] ifFalse: [ self color: Color lightGray ]! ! !StringMorph methodsFor: 'event handling' stamp: 'AlainPlantec 1/7/2010 22:42' prior: 51162743! handlesMouseDown: evt "If the shift key is pressed then yes. As normal if StringMorph class>> editableStringMorph returns false." ^ (self isEditable: evt) ifTrue: [true] ifFalse: [super handlesMouseDown: evt]! ! !StringMorph methodsFor: 'testing' stamp: 'AlainPlantec 1/7/2010 22:43' prior: 51163050! isEditable: evt "If the shift key is pressed then yes. As normal if StringMorph class>> editableStringMorph returns false." ^(self class editableStringMorph and: [evt shiftPressed and: [self wantsKeyboardFocusOnShiftClick]]) ! ! !StringMorph methodsFor: 'accessing' stamp: 'AlainPlantec 9/30/2011 16:46' prior: 51163371! measureContents "Round up in case fractional." | f | f := self fontToUse. ^((((f widthOfString: contents) max: self minimumWidth) @ f height) + (self layoutInset * 2)) ceiling! ! !StringMorph methodsFor: 'accessing' stamp: 'gvc 6/15/2007 13:18' prior: 51163634! minHeight "Answer the minimum height of the receiver." ^self fontToUse height max: super minHeight! ! !StringMorph methodsFor: 'event handling' stamp: 'AlainPlantec 1/7/2010 22:43' prior: 51163825! mouseDown: evt "If the shift key is pressed, make this string the keyboard input focus. Process as normal if StringMorph class>> editableStringMorph returns false." (self isEditable: evt) ifTrue: [self launchMiniEditor: evt] ifFalse: [super mouseDown: evt]. ! ! !StringMorph methodsFor: 'accessing' stamp: 'gvc 8/9/2007 12:29' prior: 51164172! paneColor "Answer the window's pane color or our owner's color otherwise." ^self paneColorOrNil ifNil: [self owner ifNil: [Color transparent] ifNotNil: [self owner color]]! ! !StringMorph methodsFor: 'accessing' stamp: 'gvc 6/4/2007 12:24' prior: 51164426! setWidth: width "Round up in case fractional." self extent: (width @ (font ifNil: [TextStyle defaultFont]) height) ceiling! ! !ButtonModel methodsFor: 'private' stamp: 'StephaneDucasse 5/31/2013 15:33' prior: 36995899! buildLabel: text withIcon: icon ^ IconicListItem text: text icon: icon ! ! !Morph methodsFor: 'layout' stamp: 'StephaneDucasse 5/31/2013 19:18'! computeBounds [ self doLayoutIn: self layoutBounds ] on: Error do: [ :ex | "This should do it unless you don't screw up the bounds" fullBounds := bounds. ex pass ]! ! !Morph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/2/2013 14:18'! computeFullBounds [ self doLayoutIn: self layoutBounds ] on: Error do: [ :ex | "This should do it unless you don't screw up the bounds" fullBounds := bounds. ex pass ]! ! !Morph methodsFor: 'accessing' stamp: 'gvc 1/11/2007 12:21' prior: 26591549! enabled "Answer whether the receiver is enabled." ^true! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:45'! enabled: aBoolean "does nothing" ! ! !Morph methodsFor: 'layout' stamp: 'StephaneDucasse 6/2/2013 14:18' prior: 26733727! fullBounds "Return the bounding box of the receiver and all its children. Recompute the layout if necessary." fullBounds ifNotNil: [ ^ fullBounds ]. "Errors at this point can be critical so make sure we catch 'em all right" self computeFullBounds. "This should do it unless you don't screw up the bounds" ^ fullBounds! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'StephaneDucasse 5/30/2013 21:34' prior: 18383844! addCornerGrips self addMorphBack: (TopLeftGripMorph new target: self; position: self position). self addMorphBack: (TopRightGripMorph new target: self; position: self position). self addMorphBack: (BottomLeftGripMorph new target: self; position: self position). self addMorphBack: (BottomRightGripMorph new target: self; position: self position)! ! !BorderedMorph methodsFor: 'accessing' stamp: 'gvc 5/9/2006 15:50' prior: 18377987! colorForInsets "Return the color to be used for shading inset borders." self owner isSystemWindow ifTrue: [^self owner colorForInsets]. ^super colorForInsets! ! !LayoutFrame methodsFor: 'layout' stamp: 'StephaneDucasse 5/31/2013 16:19'! center: targetMorph with: anotherMorph "Change the receiver to center the targetMorph with anotherMorph. Note the targetMorph is the morph on which the receiver will be applied. anotherMorph is often the morph containing the targetMorph. " self topOffset: (anotherMorph height - targetMorph height) // 2. self leftOffset: (anotherMorph width - targetMorph width) // 2. ! ! !CheckboxMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:47' prior: 19008990! enabled: aBoolean "Set the value of enabled" enabled := aBoolean. self labelMorph ifNotNil: [:m | m enabled: aBoolean]. self buttonMorph ifNotNil: [:m | m enabled: aBoolean]. self changed: #enabled! ! !PluggableButtonMorph commentStamp: '' prior: 39513872! A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are: getStateSelector fetch a boolean value from the model actionSelector invoke this button's action on the model getLabelSelector fetch this button's lable from the model getMenuSelector fetch a pop-up menu for this button from the model Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false. The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector. If the actionSelector takes one or more arguments, then the following are relevant: arguments A list of arguments to provide when the actionSelector is called. argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic argumentsSelector The message sent to the argumentProvider to obtain the arguments. Options: askBeforeChanging have model ask user before allowing a change that could lose edits triggerOnMouseDown do this button's action on mouse down (vs. up) transition shortcutCharacter a place to record an optional shortcut key ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/23/2007 11:25' prior: 29359699! action "Answer the action selector." ^self actionSelector! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/23/2007 11:26' prior: 29359849! actionSelector: aSymbol "Set actionSelector to be the action defined by aSymbol. SimpleButtonMorph cross-compatibility" actionSelector := aSymbol. ! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'gvc 7/24/2007 16:14' prior: 29360091! adoptColor: aColor "Go through paneColorChanged instead." self paneColorChanged! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'gvc 7/1/2010 15:13' prior: 29360263! adoptPaneColor: aColor super adoptPaneColor: aColor. aColor ifNil: [^self]. self adoptColor: self colorToUse! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/23/2007 11:27' prior: 29360465! arguments "Answer the static arguments. SimpleButtonMorph cross-compatibility." ^arguments! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 3/4/2010 12:16' prior: 29360648! availableBorderStyles "Return the selectors of the the available border styles for each state. Must match the order of interactionStates." ^#(normalBorderStyle mouseOverBorderStyle pressedBorderStyle disabledBorderStyle selectedBorderStyle selectedPressedBorderStyle selectedMouseOverBorderStyle selectedDisabledBorderStyle)! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 3/4/2010 12:15' prior: 29361068! availableFillStyles "Return the selectors of the the available fill styles for each state. Must match the order of interactionStates." ^#(normalFillStyle mouseOverFillStyle pressedFillStyle disabledFillStyle selectedFillStyle selectedPressedFillStyle selectedMouseOverFillStyle selectedDisabledFillStyle)! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 3/4/2010 12:17' prior: 29361468! borderStyleToUse "Return the borderStyle to use for the receiver." self gradientLook ifFalse:[^super borderStyle]. ^self perform: (self availableBorderStyles at: ( self interactionStates indexOf: self interactionState)) ! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'GaryChambers 4/13/2012 13:40' prior: 29361795! changed "Update the fillStyle here." |lc pc bs| self assureExtension. extension borderStyle: (bs := self borderStyleToUse). borderColor := bs style. borderWidth := bs width. extension fillStyle: self fillStyleToUse. self layoutInset: (self theme buttonLabelInsetFor: self). color := self fillStyle asColor. (self labelMorph respondsTo: #interactionState:) ifTrue: [self labelMorph interactionState: self interactionState] ifFalse: [(self labelMorph isNil or: [label isMorph]) ifFalse: [ pc := self normalColor. lc := self enabled ifTrue: [pc contrastingColor] ifFalse: [pc contrastingColor muchDarker]. self labelMorph color: lc]]. super changed! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 13:10' prior: 29362581! color: aColor "Check to avoid repeats of the same color." aColor ifNil: [^self]. (lastColor = aColor and: [ self getModelState = (self valueOfProperty: #lastState)]) ifTrue: [^self]. super color: aColor. self class gradientButtonLook ifTrue: [self adoptColor: aColor]! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/30/2009 14:08' prior: 29362972! colorToUse "Answer the color we should use." |c| c := self getModelState ifTrue: [onColor ifNil: [self paneColor] ifNotNil: [onColor isTransparent ifTrue: [self paneColor] ifFalse: [onColor]]] ifFalse: [offColor ifNil: [self paneColor] ifNotNil: [offColor isTransparent ifTrue: [self paneColor] ifFalse: [offColor]]]. ^c! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/19/2007 13:04' prior: 29363443! contentHolder "Answer the alignment morph for extra control." ^self submorphs first! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 2/11/2009 16:42' prior: 29363619! cornerStyle: aSymbol "Adjust the layout inset." super cornerStyle: aSymbol. self layoutInset: (self theme buttonLabelInsetFor: self)! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/30/2007 15:53' prior: 29363845! disabledBorderStyle "Return the disabled borderStyle of the receiver." ^self theme buttonDisabledBorderStyleFor: self! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/30/2007 15:53' prior: 29364056! disabledFillStyle "Return the disabled fillStyle of the receiver." ^self theme buttonDisabledFillStyleFor: self! ! !PluggableButtonMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 5/31/2013 17:51' prior: 29364273! drawSubmorphsOn: aCanvas "Display submorphs back to front. Draw the focus here since we are using inset bounds for the focus rectangle." super drawSubmorphsOn: aCanvas. self hasKeyboardFocus ifTrue: [self drawKeyboardFocusOn: aCanvas]! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/1/2010 15:16' prior: 29365198! fillStyleToUse "Return the fillStyle to use for the receiver." ^self perform: (self availableFillStyles at: ( self interactionStates indexOf: self interactionState)) ! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 12/4/2007 16:23' prior: 29365461! focusBounds "Answer the bounds for drawing the focus indication." ^self theme buttonFocusBoundsFor: self! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/11/2007 15:00' prior: 29365658! focusColor "Answer the keyboard focus indication color." ^self color contrastingColor! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 4/13/2007 15:53' prior: 29366118! getMenuSelector: aSymbol "Set the menu selector." getMenuSelector := aSymbol! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/28/2011 13:34' prior: 29366299! getModelState "Answer the result of sending the receiver's model the getStateSelector message. If the selector expects arguments then supply as for the actionSelector." model ifNil: [^ false]. ^getStateSelector ifNil: [false] ifNotNil: [getStateSelector numArgs = 0 ifTrue: [model perform: getStateSelector] ifFalse: [argumentsProvider ifNotNil: [ arguments := argumentsProvider perform: argumentsSelector]. model perform: getStateSelector withEnoughArguments: arguments]]! ! !PluggableButtonMorph methodsFor: 'event handling' stamp: 'gvc 1/11/2007 14:37' prior: 29366893! handlesKeyboard: evt "Answer true, we'll handle spacebar for pressing plus the usual tab navigation." ^true! ! !PluggableButtonMorph methodsFor: 'event handling' stamp: 'gvc 5/8/2006 13:40' prior: 29367094! handlesMouseOver: evt ^ true! ! !PluggableButtonMorph methodsFor: 'drawing' stamp: 'gvc 9/11/2009 17:56' prior: 29367214! indicateModalChild "Flash the button border." |fs c w d| fs := self fillStyle. c := self color alphaMixed: 0.5 with: Color black. w := self world. d := 0. self assureExtension. 2 timesRepeat: [ (Delay forDuration: d milliSeconds) wait. d := 200. extension fillStyle: c. color := c. self invalidRect: self bounds. w ifNotNil: [w displayWorldSafely]. (Delay forDuration: d milliSeconds) wait. self fillStyle: fs. w ifNotNil: [w displayWorldSafely]. self invalidRect: self bounds] ! ! !PluggableButtonMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 5/31/2013 18:39' prior: 29390374! initialize "Initialize the state of the receiver." super initialize. self rubberBandCells: false; listDirection: #topToBottom; hResizing: #shrinkWrap; vResizing: #shrinkWrap; wrapCentering: #center; cellPositioning: #center. enabled := true. self initializeLabelMorph. "this is a safe guard for enabled: among others." askBeforeChanging := false. triggerOnMouseDown := false. showSelectionFeedback := false. arguments := #(). self layoutInset: (self theme buttonLabelInsetFor: self); borderStyle: BorderStyle thinGray; extent: 20 @ 15; setProperty: #lastState toValue: false; cornerStyle: (self theme buttonCornerStyleIn: nil)! ! !PluggableButtonMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 5/31/2013 18:39'! initializeLabelMorph labelMorph := Morph new color: Color transparent; extent: 0 @ 0; yourself "this is a safe guard for enabled: among others."! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/10/2007 12:13' prior: 29368764! isDefault "Answer whether the button is considered to be a default one." ^self valueOfProperty: #isDefault ifAbsent: [false] ! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 1/10/2007 12:17' prior: 29368982! isDefault: aBoolean "Set whether the button is to be considered default." aBoolean ifTrue: [self setProperty: #isDefault toValue: true] ifFalse: [self removeProperty: #isDefault]. self changed! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 18:26' prior: 29380568! label: aStringOrTextOrMorph "Label this button with the given string or morph." self label: aStringOrTextOrMorph font: self theme buttonFont! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 18:05' prior: 29381270! label: aStringOrTextOrMorph font: aFont "Label this button with the given string or morph." | r | self removeAllMorphs. "nest label in a row for centering" r := AlignmentMorph newRow borderWidth: 0; layoutInset: 0; color: Color transparent; hResizing: #shrinkWrap; vResizing: #spaceFill; wrapCentering: #center; listCentering: #center; cellPositioning: #center. label := aStringOrTextOrMorph. labelMorph := aStringOrTextOrMorph isMorph ifTrue: [ aStringOrTextOrMorph ] ifFalse: [ self newLabel: aFont ]. r addMorph: labelMorph. self addMorph: r. self labelMorph enabled: self enabled. self updateLabelEnablement ! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 18:06' prior: 29369888! labelMorph "Answer the actual label morph." ^ labelMorph! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 12/3/2008 17:23' prior: 29370530! minHeight "Consult the theme also." ^super minHeight max: self theme buttonMinHeight! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 12/3/2008 17:22' prior: 29370707! minWidth "Consult the theme also." ^super minWidth max: self theme buttonMinWidth! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 4/24/2007 13:34' prior: 29370881! model "Answer the receiver's model." ^model! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 4/25/2007 18:44' prior: 29372809! onColor "Answer the on color." ^onColor ! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/30/2007 15:54' prior: 29373759! selectedBorderStyle "Return the selected borderStyle of the receiver." ^self theme buttonSelectedBorderStyleFor: self! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 7/30/2007 15:54' prior: 29373970! selectedDisabledBorderStyle "Return the selected disabled borderStyle of the receiver." ^self theme buttonSelectedDisabledBorderStyleFor: self! ! !PluggableButtonMorph methodsFor: 'accessing' stamp: 'gvc 6/8/2009 14:26' prior: 29375574! showSelectionFeedback "Answer whether the feedback should be shown for being pressed." ^showSelectionFeedback! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'StephaneDucasse 5/31/2013 18:27' prior: 29392542! updateLabelEnablement "Set the enabled state of the label if possible." self labelMorph enabled: self enabled! ! !UITheme methodsFor: 'label-styles' stamp: 'StephaneDucasse 5/31/2013 17:53' prior: 54018891! buttonLabelFor: aButton "Answer the label to use for the given button." |label| label := self buttonLabelForText: aButton label. label enabled: aButton enabled. label font: self buttonFont. ^label! ! !UITheme methodsFor: 'label-styles' stamp: 'StephaneDucasse 5/31/2013 17:53' prior: 54019634! checkboxLabelFor: aCheckbox "Answer the label to use for the given checkbox." |label| label := self checkboxLabelForText: aCheckbox label. label enabled: aCheckbox enabled. label font: self labelFont. ^label! ! !UITheme methodsFor: 'morph creation' stamp: 'StephaneDucasse 5/31/2013 18:34' prior: 54035873! newButtonIn: aThemedMorph for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: label help: helpText "Answer a new button." |b| b := PluggableButtonMorph on: aModel getState: stateSel action: actionSel. b theme: self; arguments: (args ifNil: [{b}]); cornerStyle: (self buttonCornerStyleIn: aThemedMorph); hResizing: #shrinkWrap; vResizing: #shrinkWrap; label: label font: self buttonFont; getEnabledSelector: enabledSel; setBalloonText: helpText; extent: b minExtent; hResizing: #rigid; vResizing: #rigid; removeProperty: #theme. ^b! ! !PanelMorph methodsFor: 'protocol' stamp: 'StephaneDucasse 5/31/2013 17:50' prior: 29052525! enabled: aBoolean "Pass on to submorphs." self submorphsDo: [:m | m enabled: aBoolean]! ! !NameStringInHalo methodsFor: 'action' stamp: 'di 11/25/1999 23:40' prior: 27909795! placeContents | namePosition | (owner notNil and: [owner isInWorld]) ifTrue: [namePosition := owner basicBox bottomCenter - ((self width // 2) @ (owner handleSize negated // 2 - 1)). namePosition := namePosition min: self world viewBox bottomRight - self extent y + 2. self bounds: (namePosition extent: self extent)]! ! "Morphic-Base"! "Polymorph-Widgets"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(7 June 2013 1:28:35 pm) Pharo.image priorSource: 5948682! ----STARTUP----an Array(7 June 2013 3:36:31 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 3:36:31 pm) Pharo-30185.image priorSource: 5982565! ----STARTUP----an Array(7 June 2013 2:00:53 pm) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/7/2013 15:55' prior: 39503678! commentForCurrentUpdate ^ '10733 AssertionFailure shoudl inherit from Error https://pharo.fogbugz.com/f/cases/10733 10314 Debugger: create better argument names https://pharo.fogbugz.com/f/cases/10314'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 15:55'! script283 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.35.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1470.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.831.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.191.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1135.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.9.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.5.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.346.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.12.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.8.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.179.mcz Zinc-Zodiac-EstebanLorenzano.26.mcz Zodiac-Core-SvenVanCaekenberghe.27.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-SvenVanCaekenberghe.10.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/7/2013 15:56'! update30186 "self new update30186" self withUpdateLog: '10733 AssertionFailure shoudl inherit from Error https://pharo.fogbugz.com/f/cases/10733 10314 Debugger: create better argument names https://pharo.fogbugz.com/f/cases/10314'. self loadTogether: self script283 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AssertionFailure commentStamp: 'gh 5/2/2002 20:29' prior: 17753794! AsssertionFailure is the exception signaled from Object>>assert: when the assertion block evaluates to false.! !Number class methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:48'! canonicalArgumentName ^ 'aNumber'.! ! !String class methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:43'! canonicalArgumentName ^ 'aString'.! ! !Metaclass methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:46'! canonicalArgumentName ^ 'aClass'.! ! !ArgumentNamesTest methodsFor: 'asserting' stamp: 'SeanDeNigris 5/28/2013 18:12'! argumentNameFor: anObject shouldBe: aString self assert: anObject class canonicalArgumentName equals: aString.! ! !ArgumentNamesTest methodsFor: 'asserting' stamp: 'SeanDeNigris 5/28/2013 18:10'! argumentNameForInstanceOf: aClass shouldBe: aString self assert: aClass canonicalArgumentName equals: aString.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:29'! testAPrefixForClassNameStartingWithConsonant self testCollection.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:29'! testAnPrefixForClassNameStartingWithVowel self testInteger.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:45'! testClass self argumentNameForInstanceOf: Class shouldBe: 'aClass'. self argumentNameFor: Integer shouldBe: 'aClass'. self argumentNameFor: Collection shouldBe: 'aClass'.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:01'! testCollection self argumentNameForInstanceOf: Collection shouldBe: 'aCollection'.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:01'! testDefault self argumentNameForInstanceOf: Object shouldBe: 'anObject'.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:01'! testInteger self argumentNameForInstanceOf: Integer shouldBe: 'anInteger'.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:01'! testNumber self argumentNameForInstanceOf: Number shouldBe: 'aNumber'. self argumentNameForInstanceOf: Float shouldBe: 'aNumber'.! ! !ArgumentNamesTest methodsFor: 'tests' stamp: 'SeanDeNigris 5/28/2013 18:01'! testString self argumentNameForInstanceOf: String shouldBe: 'aString'. self argumentNameForInstanceOf: ByteString shouldBe: 'aString'.! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:16' prior: 21077147! testBinaryMessage | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #+ argument: 1) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: '+ anInteger self shouldBeImplemented.' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:31'! testConflictingArgumentNames | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #m1:m2:m3: arguments: #(1 2 3)) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'm1: anInteger m2: anInteger2 m3: anInteger3 self shouldBeImplemented.' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:40'! testGenerateGetter | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #instVar) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'instVar self shouldBeImplemented. ^ instVar' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:40'! testGenerateSetter | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #instVar: argument: 1) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'instVar: anInteger self shouldBeImplemented. instVar := anInteger' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:33'! testNonConflictingArgumentNames | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #m1:m2:m3: arguments: #(1 $a 'string')) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'm1: anInteger m2: aCharacter m3: aString self shouldBeImplemented.' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:42'! testOneArgumentNotMatchingAnInstanceVariable | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #m1: argument: 1) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'm1: anInteger self shouldBeImplemented.' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'SeanDeNigris 5/28/2013 18:41'! testUnaryMessageNotMatchingAnInstanceVariable | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #m1) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'm1 self shouldBeImplemented.' withSeparatorsCompacted! ! !DynamicMessageImplementor methodsFor: 'evaluating-private' stamp: 'SeanDeNigris 5/28/2013 18:09' prior: 21072424! argumentNameAt: anIndex | argumentName argument | argument := message arguments at: anIndex. argumentName := argument class canonicalArgumentName. [ argumentNames includes: argumentName ] whileTrue: [ argumentName := argumentName , anIndex asString ]. argumentNames add: argumentName. ^ argumentName! ! !Integer class methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:51'! canonicalArgumentName ^ 'anInteger'.! ! !AssertionFailure commentStamp: 'gh 5/2/2002 20:29' prior: 39547742! AsssertionFailure is the exception signaled from Object>>assert: when the assertion block evaluates to false.! !Collection class methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:47'! canonicalArgumentName ^ 'aCollection'.! ! !Object class methodsFor: '*Tools-Debugger' stamp: 'SeanDeNigris 5/28/2013 17:57'! canonicalArgumentName | prefix | prefix := self name first isVowel ifTrue: [ 'an' ] ifFalse: [ 'a' ]. ^ prefix, self name.! ! DynamicMessageImplementor removeSelector: #argumentClassNameOf:! DynamicMessageImplementorTest removeSelector: #testMetaclassNameShouldBeUsedWhenArgumentIsAClass! DynamicMessageImplementorTest removeSelector: #testKeywordMessageWithSameArgumentClassShouldGenerateDifferentArgumentNames! DynamicMessageImplementorTest removeSelector: #testKeywordMessageWithDiferentArgumentClass! DynamicMessageImplementorTest removeSelector: #testImplementingUnaryMessageNamedDifferentToAllInstanceVariablesShouldNotGenerateGetter! DynamicMessageImplementorTest removeSelector: #testImplementingKeywordMessageWithOneArgumentNamedDifferentToAllInstanceVariablesShouldNotGenerateSetter! DynamicMessageImplementorTest removeSelector: #testImplementingAMessageNamedAsVariableWithOneParameterShouldGenerateSetter! DynamicMessageImplementorTest removeSelector: #testImplementingAMessageNamedAsVariableShouldGenerateGetter! DynamicMessageImplementorTest removeSelector: #testAnShouldBeUsedAsPrefixWhenArgumentNameStartsWithVowel! "Kernel"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(7 June 2013 2:01:16 pm) Pharo.image priorSource: 5982802! ----STARTUP----an Array(7 June 2013 4:37:40 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 4:37:40 pm) Pharo-30186.image priorSource: 6000972! ----STARTUP----an Array(7 June 2013 3:06:55 pm) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/7/2013 17:04' prior: 39537536! commentForCurrentUpdate ^ '10775 Update Zn+Zdc May 2013 https://pharo.fogbugz.com/default.asp?10775 10785 Auto-complete protocol renaming https://pharo.fogbugz.com/default.asp?10785'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 17:04'! script284 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1470.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.831.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.191.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/7/2013 17:04'! update30187 "self new update30187" self withUpdateLog: '10775 Update Zn+Zdc May 2013 https://pharo.fogbugz.com/default.asp?10775 10785 Auto-complete protocol renaming https://pharo.fogbugz.com/default.asp?10785'. self loadTogether: self script284 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ZnStringEntity commentStamp: '' prior: 55721111! I am ZnStringEntity, a concrete HTTP Entity based on a String. It is used to hold textual (non-binary) data. I am a ZnEntity. Optionally, an encoding is used to convert to and from bytes. The default encoding it UTF-8. Note that content length is the encoded byte count, not the number of characters in the string. Part of Zinc HTTP Components.! !ZnUTF8Encoder commentStamp: 'SvenVanCaekenberghe 12/6/2010 12:55' prior: 55728787! I am ZnUTF8Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-8 encoding and decoding of Unicode according to RFC 3629. Part of Zinc HTTP Components.! !ZnChunkedReadStream commentStamp: 'SvenVanCaekenberghe 1/18/2011 11:01' prior: 55326361! I am ZnChunkedReadStream, implementing HTTP 1.1 chunked transfer encoding on a wrapped streams. Clients should read me until I am atEnd. After I am completely read, I can tell you my totalSize and optional extraHeaders. Part of Zinc HTTP Components.! !ZnInvalidUTF8 commentStamp: '' prior: 39348532! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! !ZnBufferedReadStream commentStamp: '' prior: 55269614! I am ZnBufferedReadStream. I wrap another ReadStream and add efficient buffering for the typical access pattern of parsers: sending lots of #next, #peek and #atEnd messages. By design I do not implement #position and #position: or anything based on that. I can wrap both binary or character streams and act accordingly. Part of Zinc HTTP Components.! !ZnChunkedWriteStream commentStamp: '' prior: 0! I am ZnChunkedWriteStream, I wrap another write stream and add HTTP 1.1 chunked transfer encoding. I write a chunk for each #nextPutAll: or #next:putAll:startingAt: I should be wrapped in a ZnBufferedWriteStream for #next: to work. When done, send #close or #finish to me. Part of Zinc HTTP Components. ! !ZnEntityWriter commentStamp: '' prior: 0! I am ZnEntityWriter, I help writing ZnEntities to a stream given meta data in headers. I deal with chunking and gzip encoding. Part of Zinc HTTP Components.! !ZnHeaders commentStamp: 'SvenVanCaekenberghe 1/18/2011 10:57' prior: 55501246! I am ZnHeaders. I am a collection of HTTP headers. I can be used for generating and parsing. Header names are normalized and used case insensitive. Header values can be multi-valued. Part of Zinc HTTP Components.! !ZnMessageBenchmark commentStamp: '' prior: 0! I am ZnMessageBenchmark helps to test the benchmarking and profiling of ZnMessage writing and reading. Instance Variables buffer: message: representation: ZnMessageBenchmark new simpleRequest; write: 10000. ZnMessageBenchmark new simpleRequest; writeRepresentation; read: 10000. ZnMessageBenchmark new simpleResponse; write: 10000. ZnMessageBenchmark new simpleResponse; writeRepresentation; read: 10000. ! !ZnNetworkingUtils commentStamp: '' prior: 55597299! I am ZnNetworkingUtils holding various utilities related to HTTP networking. My class side is a general API. My instance side is a factory. ZnNetworkingUtils default socketStreamClass: SocketStream. ZnNetworkingUtils default socketStreamClass: ZdcSocketStream. Part of Zinc HTTP Components.! !ZnReadEvalPrintDelegate commentStamp: '' prior: 0! I am ZnReadEvalPrintDelegate, I export a REPL Web Service. You can use this service to work with a headless image. ZnReadEvalPrintDelegate startInServerOn: 1701. ZnClient new url: 'http://localhost:1701/repl'; contents: '42 factorial'; post. Web Service API: POST /repl Here is an example terminal session: $ curl http://localhost:1701/repl # Pharo Smalltalk REPL. POST expressions to evaluate # Here is one way (type ctrl-d to end input) curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl $ curl -X POST -H'Content-Type:text/plain' -d '42 factorial' http://localhost:1701/repl 1405006117752879898543142606244511569936384000000000 $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl { (1 to: 10) sum. (1 to: 10) average } {55. (11/2)} There is error handling as well: $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl 1 plus: 2 MessageNotUnderstood: SmallInteger>>plus: SmallInteger(Object)>>doesNotUnderstand: #plus: Receiver: 1 Arguments and temporary variables: aMessage: plus: 2 exception: MessageNotUnderstood: SmallInteger>>plus: resumeValue: nil Receiver's instance variables: 1 UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: Compiler>>evaluate:in:to:notifying:ifFail: Compiler>>evaluate:in:to: ZnReadEvalPrintDelegate>>evaluate: in Block: [| result |... BlockClosure>>on:do: ZnReadEvalPrintDelegate>>evaluate: in Block: [:out | [| result |... String class(SequenceableCollection class)>>new:streamContents: WARNING: never open this service beyond your local network !! This service gives you absolute control over and access to everything in your image. For example, the following will kill your image: $ curl -X POST -H'Content-Type:text/plain' -d 'Smalltalk quitPrimitive' http://localhost:1701/repl Part of Zinc HTTP Components. ! !ZnTestRunnerDelegate commentStamp: '' prior: 0! I am ZnTestRunnerDelegate, a web service interface to run unit tests. ZnTestRunnerDelegate startInServerOn: 1701. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests'. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests/testBase64'. Web Service API: GET /sunit/MyTestCase GET /sunit/MyTestCase/testOne Part of Zinc HTTP Components! !ZnSingleThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/19/2013 21:12'! augmentResponse: response forRequest: request "Our handler has produced response for request, manipulate the response before writing it" (self useGzipCompressionAndChunking and: [ response contentType isBinary not ]) ifTrue: [ (request acceptsEncodingGzip and: [ response hasContentEncoding not ]) ifTrue: [ response setContentEncodingGzip ]. response hasTransferEncoding ifFalse: [ response setTransferEncodingChunked ] ]! ! !ZnUtilsTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/22/2013 09:42'! testNextPutAll | data result | data := String new: 64 * 1024 withAll: $A. result := String streamContents: [ :out | ZnUtils nextPutAll: data on: out ]. self assert: result equals: data! ! !ZnBivalentWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:01' prior: 55266197! next: count putAll: collection startingAt: offset | buffer | self isBinary ifTrue: [ (collection isKindOf: ByteArray) ifTrue: [ stream next: count putAll: collection startingAt: offset ] ifFalse: [ buffer := ByteArray new: count. buffer replaceFrom: 1 to: count with: collection startingAt: offset. stream nextPutAll: buffer ] ] ifFalse: [ (collection isKindOf: ByteArray) ifTrue: [ buffer := String new: count. buffer replaceFrom: 1 to: count with: collection startingAt: offset. stream nextPutAll: buffer ] ifFalse: [ stream next: count putAll: collection startingAt: offset ] ]! ! !ZnRequestTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:17' prior: 55632281! testReadingWithEntity | input request | input := 'GET /foo.html HTTP/1.1', String crlf, 'Host: foo.com', String crlf, 'Content-Length: 8', String crlf, 'Content-Type: text/plain', String crlf, String crlf, '12345678'. request := ZnRequest readFrom: input asByteArray readStream. self assert: request method equals: #GET. self assert: request hasHeaders. self assert: (request contentType matches: ZnMimeType textPlain). self assert: request contentLength equals: 8. self assert: request hasHeaders. self assert: request entity contents equals: '12345678' ! ! !ZnMimePart methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:41'! = other self class = other class ifFalse: [ ^ false ]. ^ self headers = other headers and: [ self entity = other entity ]! ! !ZnMimePart methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/18/2013 12:53'! entityWriterOn: stream ^ ZnEntityWriter new headers: self headers; stream: stream; yourself! ! !ZnMimePart methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:40'! hash ^ self headers hash bitXor: self entity hash! ! !ZnMimePart methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:54' prior: 55558199! writeOn: stream self headers writeOn: stream. stream nextPutAll: String crlf. self hasEntity ifTrue: [ (self entityWriterOn: stream) writeEntity: self entity ]! ! !ZnNullEncoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/22/2013 10:03'! next: count putAll: string startingAt: offset toStream: stream "Write count bytes from string starting at offset to stream." | bytes | bytes := ByteArray new: count. bytes replaceFrom: 1 to: count with: string startingAt: offset. stream nextPutAll: bytes! ! !ZnNullEncoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/23/2013 11:34'! readInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd" | byteBuffer readCount | byteBuffer := ByteArray new: requestedCount. readCount := stream readInto: byteBuffer startingAt: 1 count: requestedCount. string replaceFrom: offset to: offset + readCount - 1 with: byteBuffer startingAt: 1. ^ readCount! ! !ZnMultiValueDictionary methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/14/2013 12:50'! initialize: n super initialize: n. limit := self defaultLimit! ! !ZnMultiValueDictionary methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/14/2013 12:38' prior: 55594412! limit ^ limit! ! !ZnDefaultServerDelegate methodsFor: 'responses' stamp: 'SvenVanCaekenberghe 5/27/2013 16:11' prior: 55420389! echoRequest: request "Echo request by generating a plain text response useful for debugging purposes" | delay info entity | delay := Integer readFrom: (request uri queryAt: 'delay' ifAbsent: [ '' ]) ifFail: [ 0 ]. delay > 0 ifTrue: [ (Delay forSeconds: delay) wait ]. info := self generateEchoRequestString: request. entity := ZnEntity textCRLF: info. ^ ZnResponse ok: entity! ! !ZnDefaultServerDelegate methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/7/2013 15:02' prior: 55424242! generateEchoRequestString: request "Generate a string echoing the request" ^ String streamContents: [ :stream | stream nextPutAll: 'This is Zinc HTTP Components echoing your request !!'; crlf. stream nextPutAll: 'Running '; print: request server; crlf. stream nextPutAll: request method; nextPutAll: ' request for '. request uri printPathQueryFragmentOn: stream. stream crlf; nextPutAll: 'with headers'; crlf. request headersDo: [ :key :value | stream space; nextPutAll: key; nextPutAll: ': '; nextPutAll: value; crlf ]. request hasEntity ifTrue: [ stream nextPutAll: ' containing '; print: request entity ] ]! ! !ZnEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:42'! = other self class = other class ifFalse: [ ^ false ]. ^ self contentType = other contentType and: [ self contentLength = other contentLength ]! ! !ZnEntity methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 5/7/2013 15:58'! asByteArray "Return the ByteArray that is the binary, encoded representation of the receiver" ^ ByteArray streamContents: [ :stream | self writeOn: stream ]! ! !ZnEntity methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:34' prior: 55451317! contentType: object "We only allow assignment compatible with our designated mime type" | newType | newType := object asZnMimeType. contentType = newType ifTrue: [ ^ self ] ifFalse: [ (self class designatedMimeType isNil or: [ self class designatedMimeType matches: newType ]) ifTrue: [ contentType := newType ] ]! ! !ZnEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:41'! hash ^ self contentType hash bitXor: self contentLength hash! ! !ZnStringEntity commentStamp: '' prior: 39566094! I am ZnStringEntity, a concrete HTTP Entity based on a String. It is used to hold textual (non-binary) data. I am a ZnEntity. Optionally, an encoding is used to convert to and from bytes. The default encoding it UTF-8. Note that content length is the encoded byte count, not the number of characters in the string. Part of Zinc HTTP Components.! !ZnStringEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:44'! = other ^ super = other and: [ self string = other string ]! ! !ZnStringEntity methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/23/2013 12:27' prior: 55723524! computeContentLength self string isNil ifTrue: [ ^ self ]. contentLength := self encoder encodedByteCountForString: string! ! !ZnStringEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:43'! hash ^ super hash bitXor: self string hash! ! !ZnStringEntity methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/23/2013 12:26' prior: 55722559! readFrom: stream | buffer totalRead read readStream stringStream total | total := self contentLength. readStream := total ifNotNil: [ ZnLimitedReadStream on: stream limit: total ] ifNil: [ stream ]. buffer := String new: (ZnUtils streamingBufferSize min: (total ifNil: [ ZnUtils streamingBufferSize ])). stringStream := (total ifNil: [ String new ] ifNotNil: [ String new: total ]) writeStream. totalRead := 0. self initializeEncoder. [ readStream atEnd ] whileFalse: [ read := encoder readInto: buffer startingAt: 1 count: buffer size fromStream: readStream. stringStream next: read putAll: buffer startingAt: 1. totalRead := totalRead + read. totalRead > ZnConstants maximumEntitySize ifTrue: [ ZnEntityTooLarge signal ]. ZnUtils signalProgress: totalRead total: total ]. self string: stringStream contents! ! !ZnStringEntity methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:25' prior: 55723147! writeOn: stream | totalWritten toWrite total | self initializeEncoder. totalWritten := 0. total := string size. [ totalWritten < total ] whileTrue: [ toWrite := ZnUtils streamingBufferSize min: (total - totalWritten). encoder next: toWrite putAll: string startingAt: totalWritten + 1 toStream: stream. totalWritten := totalWritten + toWrite. ZnUtils signalProgress: totalWritten total: total ]! ! !ZnCharacterEncoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/21/2013 21:51' prior: 55308241! encodeString: string "Encode string and return the resulting byte array" ^ ByteArray streamContents: [ :stream | self next: string size putAll: string startingAt: 1 toStream: stream ]! ! !ZnCharacterEncoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/21/2013 21:55'! next: count putAll: string startingAt: offset toStream: stream "Write count characters from string starting at offset to stream." 0 to: count - 1 do: [ :each | self nextPut: (string at: offset + each) toStream: stream ]! ! !ZnCharacterEncoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/23/2013 09:25'! readInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd" 0 to: requestedCount - 1 do: [ :count | stream atEnd ifTrue: [ ^ count ]. string at: offset + count put: (self nextFromStream: stream) ]. ^ requestedCount! ! !ZnUTF8Encoder commentStamp: 'SvenVanCaekenberghe 12/6/2010 12:55' prior: 39566527! I am ZnUTF8Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-8 encoding and decoding of Unicode according to RFC 3629. Part of Zinc HTTP Components.! !ZnUTF8Encoder class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 5/25/2013 13:58'! initialize | encoder stream | ByteASCIISet := ByteArray new: 256. ByteUTF8Encoding := Array new: 256. encoder := self new. stream := ByteArray new writeStream. 0 to: 255 do: [ :each | | bytes | stream reset. encoder nextPut: (Character value: each) toStream: stream. bytes := stream contents. (bytes size = 1 and: [ bytes first = each ]) ifTrue: [ ByteASCIISet at: each + 1 put: 0 ] ifFalse: [ ByteASCIISet at: each + 1 put: 1. ByteUTF8Encoding at: each + 1 put: bytes ] ] ! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 6/3/2013 19:57' prior: 55729065! encodedByteCountFor: character | code | code := character charCode. code < 128 ifTrue: [ ^ 1 ]. code < 2048 ifTrue: [ ^ 2 ]. code < 65535 ifTrue: [ ^ 3 ]. code <= self maximumUTF8Code ifTrue: [ ^ 4 ]. self errorOutsideRange! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 6/3/2013 19:58'! encodingLengthFor: byte byte < 128 ifTrue: [ ^ 1 ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ ^ 2 ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ ^ 3 ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ ^ 4 ]. self error! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 6/3/2013 19:55'! error ZnInvalidUTF8 signal! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 6/3/2013 19:52'! error: message ZnInvalidUTF8 signal: message! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 6/3/2013 19:59'! errorIncomplete self error: 'Incomplete utf-8 encoding'! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 6/3/2013 19:58'! errorOutsideRange self error: 'Unicode character code point outside range'! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/27/2013 14:05'! findFirstNonASCIIIn: string startingAt: offset "This calls a fast primitive. Note that string can be a ByteString or ByteA`rray" offset > string size ifTrue: [ ^ 0 ]. ^ ByteString findFirstInString: string inSet: ByteASCIISet startingAt: offset! ! !ZnUTF8Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/23/2013 22:51'! next: count putAll: string startingAt: offset toStream: stream "Write count characters from string starting at offset to stream." string isByteString ifTrue: [ self next: count putAllByteString: string startingAt: offset toStream: stream ] ifFalse: [ super next: count putAll: string startingAt: offset toStream: stream ]! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/24/2013 21:12'! next: count putAllASCII: string startingAt: offset toStream: stream "Write count bytes from string starting at offset to stream, assuming all characters are in the ASCII set and need no translation" "For now, we don't use the option of mixing ByteString and ByteArray as similar" | bytes | bytes := ByteArray new: count. bytes replaceFrom: 1 to: count with: string startingAt: offset. stream nextPutAll: bytes! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/23/2013 23:05'! next: count putAllByteString: string startingAt: offset toStream: stream "A faster version when string is a ByteString" | lastIndex nextIndex | lastIndex := offset. nextIndex := self findFirstNonASCIIIn: string startingAt: lastIndex. (nextIndex = 0 or: [ offset + count <= nextIndex ]) ifTrue: [ ^ self next: count putAllASCII: string startingAt: offset toStream: stream ]. [ nextIndex > lastIndex ifTrue: [ self next: nextIndex - lastIndex putAllASCII: string startingAt: lastIndex toStream: stream ]. stream nextPutAll: (ByteUTF8Encoding at: (string byteAt: nextIndex) + 1). lastIndex := nextIndex + 1. nextIndex := self findFirstNonASCIIIn: string startingAt: lastIndex. nextIndex = 0 or: [ offset + count <= nextIndex ] ] whileFalse. offset + count <= lastIndex ifFalse: [ self next: offset + count - lastIndex putAllASCII: string startingAt: lastIndex toStream: stream ] ! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 6/3/2013 20:00' prior: 39349377! nextFromStream: stream | code byte next | (byte := stream next) < 128 ifTrue: [ ^ Character codePoint: byte ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ code := byte bitAnd: 2r00011111. ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ code := byte bitAnd: 2r00001111. 2 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ] ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ code := byte bitAnd: 2r00000111. 3 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ] ]. ^ Character codePoint: code ]. self error! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 6/3/2013 20:00' prior: 55730653! nextPut: character toStream: stream | code | code := character codePoint. code < 128 ifTrue: [ ^ stream nextPut: code ]. code < 2048 ifTrue: [ ^ stream nextPut: (2r11000000 + (code bitShift: -6)); nextPut: (2r10000000 + (code bitAnd: 2r111111)) ]. code < 65535 ifTrue: [ ^ stream nextPut: (2r11100000 + (code bitShift: -12)); nextPut: (2r10000000 + ((code bitShift: -6) bitAnd: 2r111111)); nextPut: (2r10000000 + (code bitAnd: 2r111111)) ]. code <= self maximumUTF8Code ifTrue: [ ^ stream nextPut: (2r11110000 + (code bitShift: -18)); nextPut: (2r10000000 + ((code bitShift: -12) bitAnd: 2r111111)); nextPut: (2r10000000 + ((code bitShift: -6) bitAnd: 2r111111)); nextPut: (2r10000000 + (code bitAnd: 2r111111)) ]. self errorOutsideRange ! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/27/2013 16:10'! optimizedReadInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd" "Optimize based on the assumption that most encoded characters will be ASCII" | byteBuffer bytesRead read last next count readStream bytesLeft | "Start by reading the minimum amount of bytes for encoding requestedCount characters" byteBuffer := ByteArray new: requestedCount. bytesRead := stream readInto: byteBuffer startingAt: 1 count: requestedCount. readStream := byteBuffer readStream. read := 0. last := offset. next := self findFirstNonASCIIIn: byteBuffer startingAt: last. (next = 0 or: [ bytesRead < next ]) ifTrue: [ "The whole input is ASCII" self replace: string from: offset to: offset + bytesRead - 1 with: byteBuffer startingAt: 1. ^ bytesRead ]. [ next > last ifTrue: [ "Copy the ASCII run from last to next" count := next - last. self replace: string from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Read one UTF-8 encoded non ASCII character" readStream position: next - 1. count := self encodingLengthFor: readStream peek. bytesLeft := bytesRead - next + 1. count <= bytesLeft ifTrue: [ string at: offset + read put: (self nextFromStream: readStream) ] ifFalse: [ | tmpBuffer extraRead | tmpBuffer := ByteArray new: count. readStream readInto: tmpBuffer startingAt: 1 count: bytesLeft. extraRead := stream readInto: tmpBuffer startingAt: bytesLeft + 1 count: count - bytesLeft. extraRead = (count - bytesLeft) ifFalse: [ self error: 'incomplete utf-8 encoding' ]. string at: offset + read put: (self nextFromStream: tmpBuffer readStream) ]. last := next + count. read := read + 1. "Iterate" next := self findFirstNonASCIIIn: byteBuffer startingAt: last. next = 0 or: [ bytesRead < next ] ] whileFalse. bytesRead < last ifFalse: [ "There is a last ASCII run left" count := bytesRead - last + 1. self replace: string from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Try consuming enough input to reach requestedCount since we probably read too little" count := requestedCount - read. ^ read + (super readInto: string startingAt: offset + read count: count fromStream: stream)! ! !ZnUTF8Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/24/2013 16:21'! readInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd" ^ self optimizedReadInto: string startingAt: offset count: requestedCount fromStream: stream! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/23/2013 22:08'! replace: string from: start to: stop with: replacement startingAt: repStart string isByteString ifTrue: [ string replaceFrom: start to: stop with: replacement startingAt: repStart ] ifFalse: [ | index repOff | repOff := repStart - start. index := start - 1. [ (index := index + 1) <= stop ] whileTrue: [ string at: index put: (replacement at: repOff + index) asCharacter ] ]! ! !ZnMultiPartFormDataEntity methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:29' prior: 55581595! contentType: object "We only allow assignment compatible with our designated mime type. The main/sub must be equal but the parameters must be allowed to be different" | newType | newType := object asZnMimeType. (self class designatedMimeType matches: newType) ifTrue: [ contentType := newType ]! ! !ZnMultiPartFormDataEntity methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/18/2013 19:57' prior: 55584510! writeOn: stream "We always go via our representation because we need a bivalent stream" representation isNil ifTrue: [ self computeRepresentation ]. ZnUtils nextPutAll: representation on: stream! ! !ZnChunkedReadStream commentStamp: 'SvenVanCaekenberghe 1/18/2011 11:01' prior: 39566806! I am ZnChunkedReadStream, implementing HTTP 1.1 chunked transfer encoding on a wrapped streams. Clients should read me until I am atEnd. After I am completely read, I can tell you my totalSize and optional extraHeaders. Part of Zinc HTTP Components.! !ZnChunkedReadStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:36'! chunkCount ^ chunkCount! ! !ZnChunkedReadStream methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/18/2013 00:36' prior: 55333169! getNextChunk | size | (size := self getNextChunkSize) = 0 ifTrue: [ atEnd := true. chunk := position := limit := nil. self getExtraHeaders ] ifFalse: [ totalSize := totalSize + size. chunkCount := chunkCount + 1. self ensureChunkBufferOfSize: size. stream next: size into: chunk. stream next: 2. "consume CRLF" limit := size. position := 0 ]! ! !ZnChunkedReadStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/18/2013 00:36' prior: 55331856! initialize atEnd := false. chunkCount := 0. totalSize := 0! ! !ZnChunkedReadStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/17/2013 21:06' prior: 55330254! readInto: collection startingAt: offset count: requestedCount "Read requestedCount elements into collection starting at offset. Return the actual number of elements read." | read toRead | read := 0. [ read < requestedCount and: [ self atEnd not] ] whileTrue: [ toRead := (limit - position) min: (requestedCount - read). collection replaceFrom: offset + read to: offset + read + toRead - 1 with: chunk startingAt: position + 1. read := read + toRead. position := position + toRead ]. ^ read! ! !ZnChunkedReadStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:49' prior: 55331592! upToEnd "We use our own collectionSpecies and read by chunk" ^ self collectionSpecies streamContents: [ :out | [ self atEnd ] whileFalse: [ out next: limit putAll: chunk. position := limit ] ]! ! !ZnApplicationFormUrlEncodedEntity methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/18/2013 19:58' prior: 55249793! writeOn: stream "In most use cases, contentLength will have been asked first so that a representation is cached" representation isNil ifTrue: [ self computeRepresentation ]. ZnUtils nextPutAll: representation on: stream! ! !ZdcAbstractSocketStreamTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/26/2013 15:19'! runClient: block | semaphore | semaphore := Semaphore new. [ block ensure: [ semaphore signal ] ] forkAt: self serverPriority - 1. semaphore wait! ! !ZdcAbstractSocketStreamTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/26/2013 15:16' prior: 55052760! runServer: block | serverSocket semaphore | serverSocket := self serverSocketOn: self port. self assert: serverSocket notNil. self assert: serverSocket localPort = self port. semaphore := Semaphore new. [ semaphore signal. [ block cull: serverSocket cull: semaphore ] ensure: [ serverSocket closeAndDestroy. semaphore signal ] ] forkAt: self serverPriority. semaphore wait. ^ semaphore! ! !ZdcAbstractSocketStreamTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/26/2013 15:16'! serverPriority ^ Processor userBackgroundPriority! ! !ZdcAbstractSocketStreamTests methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/26/2013 12:23' prior: 55042480! socketStreamTimeout "Timeout in seconds for SocketStream IO" ^ ZnNetworkingUtils socketStreamTimeout! ! !ZdcAbstractSocketStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/27/2013 16:17'! testReverseEchoUpToEnd | dataSent dataRead clientStream semaphore data | semaphore := self runServer: [ :serverSocket :mySemaphore | | clientSocket stream | clientSocket := serverSocket waitForAcceptFor: 10. stream := self socketStreamOn: clientSocket. "Doing #upToEnd here does not seem to work" data := stream next: 6. stream nextPutAll: data reverse. stream close ]. self runClient: [ dataSent := #[ 1 2 3 4 5 6 ]. clientStream := self openConnectionToHostNamed: 'localhost' port: self port. clientStream nextPutAll: dataSent; flush. dataRead := clientStream upToEnd. clientStream close. self assert: dataRead = dataSent reverse. semaphore wait ]! ! !ZnServer methodsFor: 'options' stamp: 'SvenVanCaekenberghe 5/19/2013 20:10'! useGzipCompressionAndChunking "Return whether we should try to use gzip content encoding and chunked transfer encoding, the default is false." ^ self optionAt: #useGzipCompressionAndChunking ifAbsent: [ false ] ! ! !ZnServer methodsFor: 'options' stamp: 'SvenVanCaekenberghe 5/19/2013 20:11'! useGzipCompressionAndChunking: boolean "Set whether we should try to use gzip content encoding and chunked transfer encoding, the default being false." self optionAt: #useGzipCompressionAndChunking put: boolean! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 12:59'! testEntityTooLarge self withServerDo: [ :server | | response client | server maximumEntitySize: 1024. self deny: server debugMode. client := ZnClient new url: server localUrl; addPathSegment: #echo; entity: (ZnEntity with: (ByteArray new: 1024 + 1)); yourself. response := client post; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnEntityTooLarge') ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 09:27' prior: 55676847! testError self withServerDo: [ :server | | url response | self deny: server debugMode. url := server localUrl addPathSegment: #error; queryAt: #message put: 'Test Error'; yourself. response := ZnEasy get: url. self deny: response isSuccess. self assert: response code equals: 500. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'Test Error') ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/19/2013 21:21'! testGzipCompressionAndChunking self withServerDo: [ :server | | client | server useGzipCompressionAndChunking: true. (client := ZnClient new) url: server localUrl; addPathSegment: 'dw-bench'; setAcceptEncodingGzip; get. self assert: client isSuccess. self assert: client response hasContentEncoding. self assert: (client response headers at: 'Content-Encoding') equals: 'gzip'. self assert: client response hasTransferEncoding. self assert: (client response headers at: 'Transfer-Encoding') equals: 'chunked' ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 12:54'! testHeaderLineTooLong self withServerDo: [ :server | | response client | self deny: server debugMode. client := ZnClient new url: server localUrl; addPathSegment: #echo; headerAt: 'X-Test' put: (String new: ZnConstants maximumLineLength withAll: $X); yourself. response := client get; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnLineTooLong') ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 09:26' prior: 55677959! testLocalUrl self withServerDo: [ :server | self assert: server localUrl scheme equals: #http. self assert: server localUrl host equals: NetNameResolver loopBackName. self assert: server localUrl port equals: server port ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/15/2013 22:43'! testReadEvalPrint self withServerDo: [ :server | | x y result | server delegate: ZnReadEvalPrintDelegate new. x := 100 atRandom. y := 100 atRandom. result := ZnClient new url: server localUrl; addPathSegment: #repl; contents: ('{1}+{2}' format: { x. y }); post. self assert: result asInteger equals: x + y ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 12:53'! testRequestLineTooLong self withServerDo: [ :server | | url response | self deny: server debugMode. url := server localUrl addPathSegment: #echo; addPathSegment: (String new: ZnConstants maximumLineLength withAll: $X); yourself. response := ZnEasy get: url. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnLineTooLong') ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 12:53'! testTooManyHeaders self withServerDo: [ :server | | response client | self deny: server debugMode. client := ZnClient new url: server localUrl; addPathSegment: #echo; yourself. client request headers unlimited. 1 to: 256 do: [ :each | client headerAt: ('X-Test-', each printString) put: each printString ]. response := client get; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnTooManyDictionaryEntries') ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/14/2013 09:26' prior: 55680831! testUrl self withServerDo: [ :server | self assert: server url equals: server localUrl. server serverUrl: (ZnUrl new host: 'zn.stfx.eu'; yourself). self assert: server url scheme equals: #http. self assert: server url host equals: 'zn.stfx.eu'. self assert: server url port equals: server port. server serverUrl: 'http://zn.stfx.eu:8080/zn'. self assert: server url scheme equals: #http. self assert: server url host equals: 'zn.stfx.eu'. self assert: server url port equals: 8080. self assert: server url path equals: 'zn' ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:20' prior: 55389058! testQueryGoogle | client | (client := ZnClient new) http; host: 'www.google.com'; addPath: 'search'; queryAt: 'q' put: 'Pharo Smalltalk'; get. self assert: client isSuccess. self assert: (client response contentType matches: ZnMimeType textHtml). self assert: (client contents includesSubstring: 'pharo-project.org'). client close! ! !DebugSession methodsFor: 'evaluating' stamp: 'SeanDeNigris 5/28/2013 21:06' prior: 34290471! askForCategoryIn: aClass default: aString | category | category := category := AbstractTool requestProtocolNameFor: aClass initialAnswer: aString. category ifNil: [^aString]. ^ category isEmptyOrNil ifTrue: [^ aString] ifFalse: [ category ]! ! !ZnStatusLine methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:30'! = other self class = other class ifFalse: [ ^ false ]. ^ self code = other code and: [ self version = other version and: [ self reason = other reason ] ]! ! !ZnStatusLine methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:33'! hash ^ (self code hash bitXor: self version hash) bitXor: self reason hash! ! !ZnBufferedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/18/2013 20:17'! finish self flushBuffer! ! !ZnEntityTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:30' prior: 55464923! testMultiPartFormDataWriteRead | input output bytes | input := (ZnMultiPartFormDataEntity new) addPart: (ZnMimePart fieldName: 'extra' value: 'my-extra'); addPart: (ZnMimePart fieldName: 'info' value: 'my-info'); addPart: (ZnMimePart fieldName: 'file' fileName: 'foo.txt' entity: (ZnEntity text: 'Zinc HTTP Components')); yourself. self assert: input contentLength notNil. self assert: input contentLength > 0. self assert: (input contentType matches: ZnMimeType multiPartFormData). bytes := ByteArray streamContents: [ :stream | input writeOn: stream ]. output := (ZnMultiPartFormDataEntity type: input contentType) readFrom: bytes readStream. self assert: (output partNamed: 'extra') fieldValueString = 'my-extra'. self assert: (output partNamed: 'info') fieldValueString = 'my-info'. self assert: (output partNamed: 'file') contents = 'Zinc HTTP Components'. output := (ZnMultiPartFormDataEntity type: input contentType length: input contentLength) readFrom: bytes readStream. self assert: (output partNamed: 'extra') fieldValueString = 'my-extra'. self assert: (output partNamed: 'info') fieldValueString = 'my-info'. self assert: (output partNamed: 'file') contents = 'Zinc HTTP Components'. ! ! !ZnRequestLine methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 11:19'! = other self class = other class ifFalse: [ ^ false ]. ^ self method = other method and: [ self uri asRelativeUrl = other uri asRelativeUrl and: [ self version = other version ] ]! ! !ZnRequestLine methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:33'! hash ^ (self method hash bitXor: self uri hash) bitXor: self version hash! ! !ZnRequest methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:39'! = other ^ super = other and: [ self requestLine = other requestLine ]! ! !ZnRequest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/19/2013 20:35'! acceptsEncodingGzip | value | value := self headers at: 'Accept-Encoding' ifAbsent: [ ^ false ]. ^ value includesSubstring: 'gzip'! ! !ZnRequest methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:37'! hash ^ super hash bitXor: self requestLine hash! ! !AbstractTool class methodsFor: 'private' stamp: 'SeanDeNigris 5/28/2013 21:10'! protocolSuggestionsFor: aClass | allExistingProtocols interestingProtocols reject | reject := Set new. reject addAll: aClass organization categories; add: ClassOrganizer nullCategory; add: ClassOrganizer default. allExistingProtocols := Smalltalk allClassesAndTraits inject: Set new into: [ :col :e | col addAll: e protocols; yourself ]. interestingProtocols := allExistingProtocols reject: [ :e | reject includes: e ]. ^ interestingProtocols asOrderedCollection sort: [ :a :b | a asLowercase < b asLowercase ].! ! !AbstractTool class methodsFor: 'private' stamp: 'SeanDeNigris 5/28/2013 21:04'! requestProtocolNameFor: aClass initialAnswer: aString | entryCompletion | entryCompletion := EntryCompletion new dataSourceBlock: [ :currText | self protocolSuggestionsFor: aClass ]; filterBlock: [ :currApplicant :currText | currApplicant beginsWith: currText ]. ^ UIManager default request: 'Please type new category name' initialAnswer: aString entryCompletion: entryCompletion.! ! !AbstractTool methodsFor: 'class' stamp: 'SeanDeNigris 5/28/2013 21:05' prior: 17442566! addCategoryIn: aClass before: aCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | newName | newName := self class requestProtocolNameFor: aClass initialAnswer: ''. newName ifNil: [ ^ nil ]. newName := newName asSymbol. aClass organization addCategory: newName before: aCategory. self selectedCategory: newName. ^ newName! ! !AbstractTool methodsFor: 'category' stamp: 'SeanDeNigris 5/28/2013 21:05' prior: 17441782! renameCategory: aCategory from: aClass "Prompt for a new category name and add it before the current selection, or at the end if no current selection" | oldName newName | aClass ifNil: [^ nil]. aCategory ifNil: [^ nil]. oldName := aCategory. newName := self class requestProtocolNameFor: aClass initialAnswer: oldName. newName isEmptyOrNil ifTrue: [^ nil ] ifFalse: [newName := newName asSymbol]. newName = oldName ifTrue: [^ nil ]. aClass organization renameCategory: oldName toBe: newName. ^ newName! ! !ZnUtils class methodsFor: 'streaming' stamp: 'SvenVanCaekenberghe 5/18/2013 18:58'! bufferedWriteStreamOn: stream ^ (ZnBufferedWriteStream on: stream) sizeBuffer: self streamingBufferSize; yourself! ! !ZnUtils class methodsFor: 'streaming' stamp: 'SvenVanCaekenberghe 5/28/2013 13:04'! nextPutAll: collection on: stream | totalWritten toWrite total | total := collection size. "Do not enter the loop for small sizes" total < self streamingBufferSize ifTrue: [ ^ stream nextPutAll: collection ]. totalWritten := 0. [ totalWritten < total ] whileTrue: [ toWrite := self streamingBufferSize min: (total - totalWritten). stream next: toWrite putAll: collection startingAt: totalWritten + 1. totalWritten := totalWritten + toWrite. self signalProgress: totalWritten total: total ]! ! !ZdcAbstractSocketStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/3/2013 19:45' prior: 55031373! close "Close the stream, flush if necessary" [ self flush ] ensure: [ socket ifNotNil: [ self socketClose. socket := nil ] ]! ! !ZdcAbstractSocketStream methodsFor: 'private socket' stamp: 'SvenVanCaekenberghe 5/18/2013 21:26' prior: 55039200! socketClose socket closeAndDestroy ! ! !ZnClient methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 5/7/2013 16:04'! curl "Create and return a curl command line invocation equivalent to the current request." "ZnClient new url: 'http://zn.stfx.eu/zn/small.html'; method: #GET; curl." "ZnClient new url: 'http://zn.stfx.eu/echo'; contents: #[2 4 6 8]; method: #POST; curl." self prepareRequest. ^ String streamContents: [ :stream | request hasEntity ifTrue: [ stream << 'echo ' << request entity asByteArray hex << ' | xxd -r -p | ' ]. stream << 'curl'. request method = #GET ifFalse: [ stream << ' -X ' << request method ]. stream space; print: request uri. request headersDo: [ :key :value | stream << ' -H"' << key << ':' << value << '"' ]. request hasEntity ifTrue: [ stream << ' --data-binary @-' ] ]! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 5/21/2013 22:31' prior: 55345320! multiPartFormDataEntity "Initialize the current request to have an multipart/form-data entity. Return the existing entity if there is one. Fail if another type was already set." request hasEntity ifTrue: [ (request entity contentType matches: ZnMimeType multiPartFormData) ifFalse: [ self error: 'An incompatible entity was already set for the request' ] ] ifFalse: [ request entity: ZnMultiPartFormDataEntity new ]. ^ request entity! ! !ZnClient methodsFor: 'notifications' stamp: 'SvenVanCaekenberghe 4/19/2013 12:52'! noteRedirect: url self log debug: [ 'Redirecting to ', url printString ]! ! !ZnClient methodsFor: 'private protocol' stamp: 'SvenVanCaekenberghe 4/19/2013 12:53' prior: 55375792! prepareRedirect "We implement the common behavior that POST/PUT redirects turn into GET request. Note also that the body data is dropped, as well as the cookie handling." | targetUrl | targetUrl := self redirectUrl. self noteRedirect: targetUrl. self receiveCookies. (#(POST PUT) includes: request method) ifTrue: [ self method: #GET ]. request hasEntity ifTrue: [ request resetEntity: nil ]. self url: targetUrl. self sendCookies! ! !ZnByteArrayEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:45'! = other ^ super = other and: [ self bytes = other bytes ]! ! !ZnByteArrayEntity methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:44'! hash ^ super hash bitXor: self bytes hash! ! !ZnByteArrayEntity methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/18/2013 19:54' prior: 55287961! writeOn: stream ZnUtils nextPutAll: self bytes on: stream! ! !ZnHTTPSTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:21' prior: 55483880! testGetPharoVersion | client lastBuildVersion version | self ensureSocketStreamFactory. self isNativeSSLPluginPresent ifFalse: [ ^ self ]. lastBuildVersion := (client := ZnClient new) beOneShot; get: 'https://ci.inria.fr/pharo/job/Pharo-2.0/lastSuccessfulBuild/api/xml?xpath=/*/description'. self assert: client isSuccess. self assert: (client response contentType matches: ZnMimeType applicationXml). self assert: client response contentLength > 0. self assert: lastBuildVersion notNil. self assert: lastBuildVersion isString. self assert: lastBuildVersion size > 0. version := (lastBuildVersion copyAfter: $>) copyUpTo: $<. self deny: version isEmpty! ! !ZnHTTPSTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:21' prior: 55486254! testTransfers self ensureSocketStreamFactory. self isNativeSSLPluginPresent ifFalse: [ ^ self ]. (Integer primesUpTo: 100) do: [ :each | | size client | size := 1024 * each + each. (client := ZnClient new) https; host: 's3-eu-west-1.amazonaws.com'; addPath: 'public-stfx-eu'; addPath: ('test-', size asString, '.txt'); get; close. self assert: client isSuccess. self assert: (client response contentType matches: ZnMimeType textPlain). self assert: client response contentLength equals: size. self assert: client contents equals: (self class generateTestData: size) ]! ! !ZnHTTPSTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 22:24' prior: 55486945! testTransfersSingleClient | client | self ensureSocketStreamFactory. self isNativeSSLPluginPresent ifFalse: [ ^ self ]. (client := ZnClient new) https; host: 's3-eu-west-1.amazonaws.com'. (Integer primesUpTo: 100) do: [ :each | | size | size := 1024 * each + each. client url: ('/public-stfx-eu/test-', size asString, '.txt'); get. self assert: client isSuccess. self assert: (client response contentType matches: ZnMimeType textPlain). self assert: client response contentLength equals: size. self assert: client contents equals: (self class generateTestData: size) ]. client close! ! !Debugger methodsFor: 'context stack menu' stamp: 'SeanDeNigris 5/28/2013 21:06' prior: 20509137! askForCategoryIn: aClass default: aString | category | category := AbstractTool requestProtocolNameFor: aClass initialAnswer: aString. category ifNil: [^aString]. ^ category isEmptyOrNil ifTrue: [^ aString] ifFalse: [ category ]! ! !ZdcSecureSocketStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/3/2013 19:46' prior: 55093183! close "Close the stream, flush if necessary. Destory the SSLSession object." [ super close ] ensure: [ sslSession ifNotNil: [ sslSession destroy. sslSession := nil ] ]! ! !ZnEntityReader methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 12:02' prior: 55460010! isChunked | transferEncoding | transferEncoding := self headers at: 'Transfer-Encoding' ifAbsent: [ ^ false ]. ^ transferEncoding = 'chunked' or: [ transferEncoding beginsWith: 'chunked' ]! ! !ZnEntityReader methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/28/2013 13:17' prior: 55460746! readEntityFromStream | entity decodedEntityLength chunkedStream isChunked | chunkedStream := (isChunked := self isChunked) ifTrue: [ stream := ZnChunkedReadStream on: stream ] ifFalse: [ nil ]. self isGzipped ifTrue: [ self hasContentLength ifTrue: [ stream := ZnLimitedReadStream on: stream limit: self contentLength ]. decodedEntityLength := nil. stream := GZipReadStream on: stream ] ifFalse: [ decodedEntityLength := self contentLength ]. entity := self readFrom: stream usingType: self contentType andLength: decodedEntityLength. isChunked ifTrue: [ self isIdentityEncoded ifTrue: [ entity contentLength: stream totalSize ]. chunkedStream extraHeaders ifNotNil: [ :extraHeaders | self headers addAll: extraHeaders ] ]. ^ entity! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/22/2013 13:51' prior: 55311396! testConvencienceMethods | encoder string | encoder := ZnUTF8Encoder new. string := 'élève en Français'. self assert: (encoder decodeBytes: (encoder encodeString: string)) equals: string. self assert: (encoder encodedByteCountForString: string) = 20. #( 'ccc' 'ççç' 'c' 'ç' 'çc' 'cç' ) do: [ :each | self assert: (encoder decodeBytes: (encoder encodeString: each)) equals: each ]! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/24/2013 13:24'! testNextPutAllStartingAtToStream | encoder | encoder := ZnUTF8Encoder new. #( 'ccc' 'ççç' 'c' 'ç' 'çc' 'cç' 'çç' ) do: [ :each | #( ( '' '' ) ( 'ABC' '' ) ( '' 'ABC' ) ( 'ABC' 'ABC' ) ( 'AéC' '' ) ( '' 'AèC' ) ( 'AéC' 'AèC' ) ( 'AXC' 'AèC' ) ( 'AéC' 'AXC' ) ( 'PRE' 'ç' ) ) do: [ :extra | | prefix postfix string bytes | prefix := extra first. postfix := extra last. string := prefix, each, postfix. bytes := ByteArray streamContents: [ :out | encoder next: each size putAll: string startingAt: prefix size + 1 toStream: out ]. self assert: (encoder decodeBytes: bytes) equals: each ] ]! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/24/2013 16:22'! testReadIntoStartingAtCountFromStream | encoder | encoder := ZnUTF8Encoder new. #( 'ccc' 'ççç' 'c' 'ç' 'çc' 'cç' 'çç' ) do: [ :each | #( ( '' '' ) ( 'ABC' '' ) ( '' 'ABC' ) ( 'ABC' 'ABC' ) ( 'AéC' '' ) ( '' 'AèC' ) ( 'AéC' 'AèC' ) ( 'AXC' 'AèC' ) ( 'AéC' 'AXC' ) ( 'PRE' 'ç' ) ) do: [ :extra | | prefix postfix string bytes buffer | prefix := extra first. postfix := extra last. string := prefix, each. bytes := encoder encodeString: string, postfix. buffer := String new: string size. encoder readInto: buffer startingAt: 1 count: string size fromStream: bytes readStream. self assert: buffer equals: string ] ]! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/3/2013 19:51'! testUTF8EncoderIncomplete "The examples are taken from http://en.wikipedia.org/wiki/UTF-8#Description" | encoder | encoder := ZnUTF8Encoder new. #( (16rC2 16rA2) (16rE2 16r82 16rAC) (16rF0 16rA4 16rAD 16rA2) ) do: [ :each | 2 to: each size do: [ :count | self should: [ encoder decodeBytes: (each allButLast: count - 1) ] raise: ZnInvalidUTF8 ] ]! ! !ZnResponse methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:39'! = other ^ super = other and: [ self statusLine = other statusLine ]! ! !ZnResponse methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/19/2013 21:08'! hasContentEncoding ^ self headers includesKey: 'Content-Encoding'! ! !ZnResponse methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/19/2013 21:09'! hasTransferEncoding ^ self headers includesKey: 'Transfer-Encoding'! ! !ZnResponse methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:37'! hash ^ super hash bitXor: self status hash! ! !ZnResponse methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/19/2013 20:24'! setContentEncodingGzip self headers at: 'Content-Encoding' put: 'gzip'! ! !ZnResponse methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/20/2013 13:02'! setTransferEncodingChunked self headers at: 'Transfer-Encoding' put: 'chunked'; clearContentLength! ! !ZnChunkedStreamTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/17/2013 15:48'! nextPutAll: collection on: stream chunked: size | written | written := 0. [ written < collection size ] whileTrue: [ | chunkSize | chunkSize := size min: (collection size - written). chunkSize printOn: stream base: 16. stream nextPutAll: String crlf. chunkSize timesRepeat: [ stream nextPut: (collection at: (written := written + 1)) ]. stream nextPutAll: String crlf ]. stream print: 0; nextPutAll: String crlf; nextPutAll: String crlf! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 16:26'! testBinaryWriteRead | data written read | data := ByteArray new: 1024 streamContents: [ :out | 1024 timesRepeat: [ out nextPut: 256 atRandom - 1 ] ]. written := ByteArray streamContents: [ :out | | stream | stream := ZnBufferedWriteStream on: (ZnChunkedWriteStream on: out). stream sizeBuffer: 256. 1 to: 1024 by: 256 do: [ :each | stream next: 256 putAll: data startingAt: each ]. stream close ]. read := (ZnChunkedReadStream on: written readStream) upToEnd. self assert: read equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 13:59'! testGzipWriteRead | data written read | data := String streamContents: [ :out | { Collection. Stream. Exception. Magnitude } do: [ :cls | cls allSubclassesDo: [ :each | out nextPutAll: each comment ] ] ]. data := data asByteArray. written := ByteArray streamContents: [ :out | | stream chunkedStream | stream := GZipWriteStream on: (chunkedStream := ZnChunkedWriteStream on: out). stream nextPutAll: data. stream finish. chunkedStream finish ]. read := (GZipReadStream on: (ZnChunkedReadStream on: written readStream)) upToEnd. self assert: read equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:47'! testReading | data chunked plain | data := String withAll: ($a to: $z), ($A to: $Z). chunked := String streamContents: [ :stream | self nextPutAll: data on: stream chunked: 16 ]. plain := (ZnChunkedReadStream on: chunked readStream) upToEnd. self assert: plain equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 15:37'! testReadingBuffered | data chunked plain buffer readStream | data := String withAll: ($a to: $z), ($A to: $Z). chunked := String streamContents: [ :stream | self nextPutAll: data on: stream chunked: 16 ]. readStream := ZnChunkedReadStream on: chunked readStream. buffer := String new: 11. plain := String streamContents: [ :output | | readCount | [ readStream atEnd ] whileFalse: [ readCount := readStream readInto: buffer startingAt: 1 count: buffer size. output next: readCount putAll: buffer ] ]. self assert: plain equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:47'! testReadingGzip | data gzipped chunked plain | data := String withAll: ($a to: $z), ($A to: $Z). gzipped := String streamContents: [ :stream | (GZipWriteStream on: stream) nextPutAll: data; close ]. chunked := String streamContents: [ :stream | self nextPutAll: gzipped on: stream chunked: 16 ]. plain := (GZipReadStream on: (ZnChunkedReadStream on: chunked readStream)) upToEnd. self assert: data equals: plain ! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:47'! testReadingGzipStepped | data gzipped chunked unchunked ungzipped | data := String withAll: ($a to: $z), ($A to: $Z). gzipped := String streamContents: [ :stream | (GZipWriteStream on: stream) nextPutAll: data; close ]. chunked := String streamContents: [ :stream | self nextPutAll: gzipped on: stream chunked: 16 ]. unchunked := (ZnChunkedReadStream on: chunked readStream) upToEnd. ungzipped := (GZipReadStream on: unchunked) upToEnd. self assert: gzipped equals: unchunked. self assert: data equals: ungzipped ! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:48'! testReadingNext | data chunked plain | data := String withAll: ($a to: $z), ($A to: $Z). chunked := String streamContents: [ :stream | self nextPutAll: data on: stream chunked: 16 ]. plain := (ZnChunkedReadStream on: chunked readStream) next: 26 + 26. self assert: plain equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 23:48'! testReadingNextInto | data chunked plain | data := String withAll: ($a to: $z), ($A to: $Z). chunked := String streamContents: [ :stream | self nextPutAll: data on: stream chunked: 16 ]. plain := String new: 26 + 26. (ZnChunkedReadStream on: chunked readStream) next: 26 + 26 into: plain. self assert: plain equals: data! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 15:43'! testWriting | chunks result reference | chunks := #( 'ABC' 'DEF' 'GHI' 'JKL' ). result := String streamContents: [ :out | | stream | stream := ZnChunkedWriteStream on: out. chunks do: [ :each | stream nextPutAll: each ]. stream finish ]. reference := String streamContents: [ :out | self nextPutAll: (String new join: chunks) on: out chunked: 3 ]. self assert: result equals: reference! ! !ZnChunkedStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 15:57'! testWritingBuffered | data written read | data := String withAll: ($a to: $z), ($A to: $Z). written := String streamContents: [ :out | | stream | stream := ZnBufferedWriteStream on: (ZnChunkedWriteStream on: out). stream sizeBuffer: 16. stream nextPutAll: data. stream close ]. read := (ZnChunkedReadStream on: written readStream) upToEnd. self assert: read equals: data! ! !ZnEntityWriterTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/19/2013 11:41'! testChunkedOnly | entity headers writer output reader result | entity := ZnEntity text: (String streamContents: [ :out | { Collection. Stream. Exception. Magnitude } do: [ :cls | cls allSubclassesDo: [ :each | out nextPutAll: each comment ] ] ]). headers := ZnHeaders new acceptEntityDescription: entity; at: 'Transfer-Encoding' put: 'chunked'; yourself. output := ByteArray streamContents: [ :out | writer := ZnEntityWriter new stream: out; headers: headers; yourself. writer writeEntity: entity ]. reader := ZnEntityReader new stream: output readStream; headers: headers; yourself. result := reader readEntity. self assert: result contents equals: entity contents! ! !ZnEntityWriterTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 13:26'! testGzippedAndChunked | entity headers writer output reader result | entity := ZnEntity text: (String streamContents: [ :out | { Collection. Stream. Exception. Magnitude } do: [ :cls | cls allSubclassesDo: [ :each | out nextPutAll: each comment ] ] ]). headers := ZnHeaders new acceptEntityDescription: entity; at: 'Content-Encoding' put: 'gzip'; at: 'Transfer-Encoding' put: 'chunked'; yourself. output := ByteArray streamContents: [ :out | writer := ZnEntityWriter new stream: out; headers: headers; yourself. writer writeEntity: entity ]. reader := ZnEntityReader new stream: output readStream; headers: headers; yourself. result := reader readEntity. self assert: result contents equals: entity contents! ! !ZnEntityWriterTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 13:10'! testPlain | entity writer output | entity := ZnEntity text: 'Foo bar!!'. output := ByteArray streamContents: [ :out | writer := ZnEntityWriter new stream: out; headers: ZnHeaders new; yourself. writer writeEntity: entity ]. self assert: output equals: 'Foo bar!!' asByteArray! ! !ZnEntityWriterTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 13:24'! testPlainUsingReader | entity headers writer output reader result | entity := ZnEntity text: 'Foo bar!!'. headers := ZnHeaders new acceptEntityDescription: entity; yourself. output := ByteArray streamContents: [ :out | writer := ZnEntityWriter new stream: out; headers: headers; yourself. writer writeEntity: entity ]. reader := ZnEntityReader new stream: output readStream; headers: headers; yourself. result := reader readEntity. self assert: result contents equals: 'Foo bar!!'! ! !ZnMessageBenchmarkTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/22/2013 13:37'! testRequests ZnMessageBenchmark requests do: [ :each | | bench | bench := ZnMessageBenchmark new. bench perform: each. self assert: (bench message isKindOf: ZnRequest). bench writeRepresentation. self assert: (bench read isKindOf: ZnRequest). self assert: bench read equals: bench message ] ! ! !ZnMessageBenchmarkTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/22/2013 13:37'! testResponses ZnMessageBenchmark responses do: [ :each | | bench | bench := ZnMessageBenchmark new. bench perform: each. self assert: (bench message isKindOf: ZnResponse). bench writeRepresentation. self assert: (bench read isKindOf: ZnResponse). self assert: bench read equals: bench message ] ! ! !ZnInvalidUTF8 commentStamp: '' prior: 39567121! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! !ZdcIOBufferTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 19:30'! testBivalentReading | data ioBuffer buffer | data := 'some string'. ioBuffer := ZdcIOBuffer on: data. ioBuffer advanceWritePointer: data size. buffer := ByteArray new: data size. ioBuffer readInto: buffer startingAt: 1 count: data size. self assert: buffer equals: data asByteArray. ioBuffer := ZdcIOBuffer on: data asByteArray. ioBuffer advanceWritePointer: data size. buffer := String new: data size. ioBuffer readInto: buffer startingAt: 1 count: data size. self assert: buffer equals: data. ! ! !ZdcIOBufferTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 15:08'! testBivalentWriting | data ioBuffer | data := 'some string'. ioBuffer := ZdcIOBuffer on: (String new: data size). ioBuffer next: data size putAll: data asByteArray startingAt: 1. self assert: ioBuffer contents equals: data. ioBuffer := ZdcIOBuffer on: (ByteArray new: data size). ioBuffer next: data size putAll: data startingAt: 1. self assert: ioBuffer contents equals: data asByteArray! ! !ZdcIOBufferTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 19:16'! testNextPutAllStartingAt | ioBuffer | ioBuffer := ZdcIOBuffer on: (String new: 12). ioBuffer next: 4 putAll: 'abcd' startingAt: 1. ioBuffer next: 4 putAll: 'xxxxabcdyyyy' startingAt: 5. ioBuffer next: 4 putAll: '--abcd' startingAt: 3. self assert: ioBuffer contents equals: 'abcdabcdabcd'! ! !ZdcIOBufferTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 19:24'! testReadIntoStartingAtCount | data ioBuffer string | data := 'abcdefghijkl'. ioBuffer := ZdcIOBuffer on: data. ioBuffer advanceWritePointer: 12. string := String new: 12. ioBuffer readInto: string startingAt: 1 count: 4. ioBuffer readInto: string startingAt: 5 count: 4. ioBuffer readInto: string startingAt: 9 count: 4. self assert: string equals: data! ! !ZnMessage methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:38'! = other self class = other class ifFalse: [ ^ false ]. ^ self headers = other headers and: [ self entity = other entity ]! ! !ZnMessage methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/18/2013 12:51'! entityWriterOn: stream ^ ZnEntityWriter new headers: self headers; stream: stream; yourself! ! !ZnMessage methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:37'! hash ^ self headers hash bitXor: self entity hash! ! !ZnMessage methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:52' prior: 55553316! writeOn: stream | bivalentWriteStream | bivalentWriteStream := ZnBivalentWriteStream on: stream. self headers writeOn: bivalentWriteStream. bivalentWriteStream nextPutAll: String crlf. self hasEntity ifTrue: [ (self entityWriterOn: bivalentWriteStream) writeEntity: self entity ]! ! !ZdcIOBuffer methodsFor: 'writing' stamp: 'SvenVanCaekenberghe 5/28/2013 15:47' prior: 55060631! next: count putAll: collection startingAt: offset "Add count elements from collection starting at offset. Fail if there is not enough room" | writeOffset | count > self availableForWriting ifTrue: [ self bufferFullError ]. writeOffset := self freeSpaceStart. buffer replaceFrom: writeOffset to: writeOffset + count - 1 with: collection startingAt: offset. self advanceWritePointer: count! ! !ZdcIOBuffer methodsFor: 'reading' stamp: 'SvenVanCaekenberghe 5/28/2013 15:48'! readInto: collection startingAt: offset count: requestedCount "Read requestedCount elements into collection starting at offset, returning the number of elements read, there could be less elements available." | toRead | toRead := requestedCount min: self availableForReading. collection replaceFrom: offset to: offset + toRead - 1 with: buffer startingAt: self contentsStart. self advanceReadPointer: toRead. ^ toRead! ! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:30' prior: 55573854! testAsMimeType self assert: 'text/plain;charset=utf-8' asZnMimeType equals: ZnMimeType textPlain. self assert: ZnMimeType applicationOctetStream asZnMimeType equals: ZnMimeType applicationOctetStream! ! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:28' prior: 55574509! testCopying | mimeType1 mimeType2 | mimeType1 := ZnMimeType textPlain. mimeType2 := ZnMimeType textPlain. self assert: mimeType1 = mimeType2. self assert: mimeType1 parameters = mimeType2 parameters. mimeType1 charSet: 'utf-8'. self assert: mimeType1 charSet = 'utf-8'. mimeType2 charSet: 'latin1'. self assert: mimeType2 charSet = 'latin1'. self assert: (mimeType1 matches: mimeType2). self deny: mimeType1 parameters = mimeType2 parameters. self deny: mimeType1 charSet = mimeType2 charSet. ! ! !ZnMultiThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/19/2013 20:07'! augmentResponse: response forRequest: request "Our handler has produced response for request, manipulate the response before writing it" super augmentResponse: response forRequest: request. response setKeepAliveFor: request.! ! !ZnMultiThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/19/2013 20:06' prior: 55587901! executeOneRequestResponseOn: stream "Execute one HTTP request / response cycle on stream in 3 steps #readRequest: #handleRequest: and #writeResponse:on: Return true when the outer loop we are in should stop." | request response | (request := self readRequestSafely: stream) ifNil: [ ^ true ] ifNotNil: [ response := self handleRequest: request. self augmentResponse: response forRequest: request. self writeResponseSafely: response on: stream. response useConnection: stream ]. ^ request wantsConnectionClose or: [ response wantsConnectionClose ]! ! !ZnMultiThreadedServer methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/14/2013 10:43'! readRequestBadExceptionSet "Return the set of exceptions which, when they occur while reading a request, are interpreted as equivalent to a request parse error or bad request." ^ self exceptionSet: #(#ZnParseError #ZnCharacterEncodingError #ZnUnknownScheme #ZnPortNotANumber #ZnTooManyDictionaryEntries #ZnEntityTooLarge)! ! !ZnMultiThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/14/2013 10:51' prior: 55589597! readRequestSafely: stream "Read request from stream, returning nil when the connection is closed or times out" ^ [ [ self readRequest: stream ] on: self readRequestBadExceptionSet do: [ :exception | self log debug: [ exception printString , ' bad request while parsing' ]. self writeResponseBad: exception on: stream. nil ] ] on: self readRequestTerminationExceptionSet do: [ :exception | self log debug: [ exception printString , ' while reading request' ]. nil ]! ! !ZnMultiThreadedServer methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/27/2013 14:57'! readRequestTerminationExceptionSet "Return the set of exceptions which, when they occur while reading a request, are interpreted as equivalent to a timeout or connection close." ^ self exceptionSet: #(#ConnectionClosed #ConnectionTimedOut #PrimitiveFailed)! ! !ZnMultiThreadedServer methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/14/2013 10:48'! writeResponseBad: exception on: stream "When we failed to parse a request, write a bad request response before closing." | response | response := ZnResponse new statusLine: ZnStatusLine badRequest; headers: ZnHeaders defaultResponseHeaders; entity: (ZnEntity textCRLF: 'Bad Request ' , exception printString); yourself. response setConnectionClose. self writeResponseSafely: response on: stream! ! !ZnMultiThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/14/2013 10:39' prior: 55590734! writeResponseSafely: response on: stream "Write response to stream, when the connection is closed or times out we ignore this" [ self writeResponse: response on: stream ] on: self writeResponseTerminationExceptionSet do: [ :exception | self log debug: [ exception printString , ' while writing response' ] ]! ! !ZnMultiThreadedServer methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/14/2013 10:39'! writeResponseTerminationExceptionSet "Return the set of exceptions which, when they occur while writing a response, are interpreted as equivalent to a timeout or connection close." ^ self exceptionSet: #(#ConnectionClosed #ConnectionTimedOut #PrimitiveFailed)! ! !ZnCharacterWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 4/19/2013 12:49' prior: 55325094! encoding: encoding encoder := ZnCharacterEncoder newForEncoding: encoding! ! !ZnMimeType methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:26' prior: 55563193! = other ^ (self class == other class) and: [ self main = other main and: [ self sub = other sub and: [ self hasParameters not & other hasParameters not or: [ self parameters = other parameters ] ] ] ] ! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:24'! hasParameters ^ parameters notNil and: [ parameters isEmpty not ]! ! !ZnMimeType methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/21/2013 20:32' prior: 55563384! hash | hash | hash := self main hash bitXor: self sub hash. self hasParameters ifTrue: [ hash := hash bitXor: self parameters hash ]. ^ hash! ! !ZnBufferedReadStream commentStamp: '' prior: 39567357! I am ZnBufferedReadStream. I wrap another ReadStream and add efficient buffering for the typical access pattern of parsers: sending lots of #next, #peek and #atEnd messages. By design I do not implement #position and #position: or anything based on that. I can wrap both binary or character streams and act accordingly. Part of Zinc HTTP Components.! !ZnChunkedWriteStream commentStamp: '' prior: 39567773! I am ZnChunkedWriteStream, I wrap another write stream and add HTTP 1.1 chunked transfer encoding. I write a chunk for each #nextPutAll: or #next:putAll:startingAt: I should be wrapped in a ZnBufferedWriteStream for #next: to work. When done, send #close or #finish to me. Part of Zinc HTTP Components. ! !ZnChunkedWriteStream class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/17/2013 15:08'! on: writeStream ^ self new on: writeStream; yourself! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/17/2013 15:10'! binary stream binary! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:37'! chunkCount ^ chunkCount! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/17/2013 15:09'! close self finish. stream close! ! !ZnChunkedWriteStream methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/17/2013 16:22'! crlf stream nextPutAll: (self isBinary ifTrue: [ #[ 13 10 ] ] ifFalse: [ String crlf ])! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/17/2013 15:09'! extraHeaders ^ extraHeaders ifNil: [ extraHeaders ]! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/17/2013 15:31'! finish self writeChunkSize: 0. self crlf. extraHeaders ifNotNil: [ extraHeaders writeOn: stream ]! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/17/2013 15:09'! flush stream flush! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/18/2013 00:35'! initialize super initialize. totalSize := 0. chunkCount := 0! ! !ZnChunkedWriteStream methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/17/2013 15:25'! isBinary ^ stream isBinary ! ! !ZnChunkedWriteStream methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:12'! isStream ^ true! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:23'! next: count putAll: collection self next: count putAll: collection startingAt: 1! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:35'! next: count putAll: collection startingAt: offset self writeChunkSize: count. stream next: count putAll: collection startingAt: offset. self crlf. chunkCount := chunkCount + 1. totalSize := totalSize + count ! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 21:02'! nextPut: element self error: 'Wrap me into a buffered stream, because each #nexPut: will create a new chunk'! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:26'! nextPutAll: collection self next: collection size putAll: collection startingAt: 1! ! !ZnChunkedWriteStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/17/2013 15:08'! on: writeStream stream := writeStream! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 00:28'! position ^ totalSize! ! !ZnChunkedWriteStream methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/17/2013 15:28'! writeChunkSize: size stream nextPutAll: (self isBinary ifTrue: [ size printStringHex asByteArray ] ifFalse: [ size printStringHex ]). self crlf! ! !ZnEntityWriter commentStamp: '' prior: 39568135! I am ZnEntityWriter, I help writing ZnEntities to a stream given meta data in headers. I deal with chunking and gzip encoding. Part of Zinc HTTP Components.! !ZnEntityWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 20:58'! contentType ^ (self headers includesKey: 'Content-Type') ifTrue: [ self headers contentType ] ifFalse: [ ZnMimeType applicationOctetStream ]! ! !ZnEntityWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:47'! headers ^ headers! ! !ZnEntityWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:47'! headers: znHeaders headers := znHeaders! ! !ZnEntityWriter methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/28/2013 12:02'! isChunked | transferEncoding | transferEncoding := self headers at: 'Transfer-Encoding' ifAbsent: [ ^ false ]. ^ transferEncoding = 'chunked' or: [ transferEncoding beginsWith: 'chunked' ]! ! !ZnEntityWriter methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/18/2013 13:01'! isGzipped | contentEncoding | contentEncoding := self headers at: 'Content-Encoding' ifAbsent: [ ^ false ]. ^ contentEncoding = 'gzip'! ! !ZnEntityWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:47'! stream ^ stream! ! !ZnEntityWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/18/2013 12:47'! stream: writeStream stream := writeStream! ! !ZnEntityWriter methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/28/2013 13:10'! writeEntity: entity | actualStream gzipStream bufferedStream chunkedStream isChunked | actualStream := stream. chunkedStream := gzipStream := bufferedStream := nil. (isChunked := self isChunked) ifTrue: [ chunkedStream := actualStream := ZnChunkedWriteStream on: actualStream ]. self isGzipped ifTrue: [ gzipStream := actualStream := GZipWriteStream on: actualStream ] ifFalse: [ (isChunked and: [ self contentType isBinary not ]) ifTrue: [ bufferedStream := actualStream := ZnUtils bufferedWriteStreamOn: actualStream ] ]. entity writeOn: actualStream. gzipStream ifNotNil: [ gzipStream finish ]. bufferedStream ifNotNil: [ bufferedStream finish ]. chunkedStream ifNotNil: [ chunkedStream finish ] ! ! !ZnHeaders commentStamp: 'SvenVanCaekenberghe 1/18/2011 10:57' prior: 39568375! I am ZnHeaders. I am a collection of HTTP headers. I can be used for generating and parsing. Header names are normalized and used case insensitive. Header values can be multi-valued. Part of Zinc HTTP Components.! !ZnHeaders class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 5/28/2013 11:52'! initialize CommonHeaders := ( #( 'Content-Length' 'Content-Type' 'Date' 'Server' 'Connection' 'User-Agent' 'Host' 'Accept' 'Accept-Language' 'Accept-Encoding' 'Referer' 'Dnt' 'Cookie' 'Set-Cookie' 'Authorization' 'WWW-Authenticate' 'Proxy-Authorization' 'Content-Encoding' 'Transfer-Encoding' 'Location' 'If-Modified-Since' 'Content-Disposition' 'X-Zinc-Remote-Address' 'X-Forwarded-Server' 'X-Forwarded-For' 'X-Forwarded-Host' ) collect: [ :each | ZnUtils capitalizeString: each ]) asSet! ! !ZnHeaders methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:34'! = other self class = other class ifFalse: [ ^ false ]. ^ self headers = other headers! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/20/2013 14:12' prior: 55501545! acceptEntityDescription: entity "Take over the content type and length from entity" entity ifNotNil: [ self at: 'Content-Type' put: entity contentType printString; at: 'Content-Length' put: entity contentLength printString ] ifNil: [ self clearContentType; clearContentLength ] ! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/20/2013 12:59'! clearContentLength self removeKey: 'Content-Length' ifAbsent: [] ! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/20/2013 12:59'! clearContentType self removeKey: 'Content-Type' ifAbsent: [] ! ! !ZnHeaders methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 5/22/2013 10:35'! hash ^ self headers hash! ! !ZnHeaders methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/28/2013 11:59' prior: 55508670! normalizeHeaderKey: string "Test string to see if it has proper header key capitalization, if true, return string, if not, return a properly capitalized copy" "Optimization: if string is a know,, properly capitalized header, use it as is" (CommonHeaders includes: string) ifTrue: [ ^ string ]. ^ (ZnUtils isCapitalizedString: string) ifTrue: [ string ] ifFalse: [ ZnUtils capitalizeString: string ] ! ! !ZnHeaders methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/14/2013 11:29'! unlimited self headers unlimited! ! !ZnMessageBenchmark commentStamp: '' prior: 39568650! I am ZnMessageBenchmark helps to test the benchmarking and profiling of ZnMessage writing and reading. Instance Variables buffer: message: representation: ZnMessageBenchmark new simpleRequest; write: 10000. ZnMessageBenchmark new simpleRequest; writeRepresentation; read: 10000. ZnMessageBenchmark new simpleResponse; write: 10000. ZnMessageBenchmark new simpleResponse; writeRepresentation; read: 10000. ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 14:41'! bench: messages | results | results := Dictionary new. messages do: [ :each | | bench report | bench := self new. bench perform: each. bench writeRepresentation. report := 'Writing {1} - Reading {2}' format: { bench benchWrite. bench benchRead }. results at: each put: report ] displayingProgress: 'Benchmarking...'. ^ results! ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 14:41'! benchAll ^ self bench: self messages! ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 14:11'! messages ^ self requests , self responses! ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 13:37'! requests ^ #( simpleRequest standardRequest postRequest )! ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/22/2013 13:37'! responses ^ #( simpleResponse textResponse8k textResponse64k textResponse256k asciiResponse8k asciiResponse64k asciiResponse256k binaryResponse8k binaryResponse64k binaryResponse256k )! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 19:59'! asciiResponse256k message := ZnResponse ok: (ZnEntity with: (self randomAsciiString: 256 * 1024) type: 'text/plain;charset=ascii')! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 20:06'! asciiResponse64k message := ZnResponse ok: (ZnEntity with: (self randomAsciiString: 64 * 1024) type: 'text/plain;charset=ascii')! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 20:05'! asciiResponse8k message := ZnResponse ok: (ZnEntity with: (self randomAsciiString: 8 * 1024) type: 'text/plain;charset=ascii')! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 17:07'! benchRead ^ [ self read ] bench! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 17:06'! benchWrite ^ [ self write ] bench! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:18'! binaryResponse256k message := ZnResponse ok: (ZnEntity with: (self randomBytes: 256 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:18'! binaryResponse64k message := ZnResponse ok: (ZnEntity with: (self randomBytes: 64 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:18'! binaryResponse8k message := ZnResponse ok: (ZnEntity with: (self randomBytes: 8 * 1024))! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 15:24'! buffer ^ buffer ifNil: [ buffer := ByteArray new: ZnUtils streamingBufferSize ]! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 16:01'! message ^ message! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:24'! postRequest message := (ZnRequest post: 'http://zn.stfx.eu/echo/one/two/three?param1=123¶m2=foobar') setAcceptEncodingGzip; setBasicAuthenticationUsername: 'john' password: 'secret'; entity: (ZnEntity with: (self randomBytes: 512)); yourself! ! !ZnMessageBenchmark methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/21/2013 16:14'! randomAsciiString: count ^ String new: count streamContents: [ :stream | count timesRepeat: [ stream nextPut: '0123456789ABCDEF' atRandom ] ]! ! !ZnMessageBenchmark methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/21/2013 16:14'! randomBytes: count | bytes | bytes := ByteArray new: count. 1 to: count do: [ :each | bytes at: each put: (#(65 66 67 68) at: each \\ 4 + 1) ]. ^ bytes! ! !ZnMessageBenchmark methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/22/2013 09:09'! randomUnicodeString: count ^ String new: count streamContents: [ :stream | "This is about 6% non-ASCII characters, still a ByteString" count timesRepeat: [ stream nextPut: '0123456789ABCDEF-élève en Français-0123456789ABCDEF' atRandom ] ]! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 15:28'! read | readStream | readStream := representation readStream. ^ message class readFrom: readStream! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 15:34'! read: count count timesRepeat: [ self read ]! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 15:31'! simpleRequest message := ZnRequest get: 'http://zn.stfx.eu/dw-bench'! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 15:56'! simpleResponse message := ZnResponse ok: (ZnEntity html: ZnDefaultServerDelegate new generateDWBench)! ! !ZnMessageBenchmark methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/21/2013 15:23'! sizeBuffer: size buffer := ByteArray new: size! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:08'! standardRequest message := (ZnRequest get: 'http://zn.stfx.eu/echo/one/two/three?param1=123¶m2=foobar') setAcceptEncodingGzip; setBasicAuthenticationUsername: 'john' password: 'secret'; yourself! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:27'! textResponse256k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeString: 256 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:20'! textResponse64k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeString: 64 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:20'! textResponse8k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeString: 8 * 1024))! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 15:26'! write | writeStream | writeStream := self buffer writeStream. message writeOn: writeStream. ^ writeStream! ! !ZnMessageBenchmark methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 5/21/2013 15:35'! write: count count timesRepeat: [ self write ]! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:32'! writeRepresentation representation := self write contents. self sizeBuffer: representation size + 1024 ! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/21/2013 16:56'! writeUsingGzipEncodingAndChunkingRepresentation message setContentEncodingGzip; setTransferEncodingChunked. representation := self write contents. self sizeBuffer: representation size + 1024 ! ! !ZnNetworkingUtils commentStamp: '' prior: 39569183! I am ZnNetworkingUtils holding various utilities related to HTTP networking. My class side is a general API. My instance side is a factory. ZnNetworkingUtils default socketStreamClass: SocketStream. ZnNetworkingUtils default socketStreamClass: ZdcSocketStream. Part of Zinc HTTP Components.! !ZnNetworkingUtils class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 5/18/2013 20:03' prior: 55604317! initialize "The default will try to use ZdcSocketStream and ZdcSecureSocketStream" Default := self new. DefaultSocketStreamTimeout := 30! ! !ZnNetworkingUtils methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/20/2013 15:31' prior: 55598662! initialize super initialize. self socketStreamClass: (Smalltalk globals at: #ZdcSocketStream ifAbsent: [ SocketStream ]). self secureSocketStreamClass: (Smalltalk globals at: #ZdcSecureSocketStream ifAbsent: [ nil ])! ! !ZnReadEvalPrintDelegate commentStamp: '' prior: 39569543! I am ZnReadEvalPrintDelegate, I export a REPL Web Service. You can use this service to work with a headless image. ZnReadEvalPrintDelegate startInServerOn: 1701. ZnClient new url: 'http://localhost:1701/repl'; contents: '42 factorial'; post. Web Service API: POST /repl Here is an example terminal session: $ curl http://localhost:1701/repl # Pharo Smalltalk REPL. POST expressions to evaluate # Here is one way (type ctrl-d to end input) curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl $ curl -X POST -H'Content-Type:text/plain' -d '42 factorial' http://localhost:1701/repl 1405006117752879898543142606244511569936384000000000 $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl { (1 to: 10) sum. (1 to: 10) average } {55. (11/2)} There is error handling as well: $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl 1 plus: 2 MessageNotUnderstood: SmallInteger>>plus: SmallInteger(Object)>>doesNotUnderstand: #plus: Receiver: 1 Arguments and temporary variables: aMessage: plus: 2 exception: MessageNotUnderstood: SmallInteger>>plus: resumeValue: nil Receiver's instance variables: 1 UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: Compiler>>evaluate:in:to:notifying:ifFail: Compiler>>evaluate:in:to: ZnReadEvalPrintDelegate>>evaluate: in Block: [| result |... BlockClosure>>on:do: ZnReadEvalPrintDelegate>>evaluate: in Block: [:out | [| result |... String class(SequenceableCollection class)>>new:streamContents: WARNING: never open this service beyond your local network !! This service gives you absolute control over and access to everything in your image. For example, the following will kill your image: $ curl -X POST -H'Content-Type:text/plain' -d 'Smalltalk quitPrimitive' http://localhost:1701/repl Part of Zinc HTTP Components. ! !ZnReadEvalPrintDelegate class methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/15/2013 22:05'! startInServerOn: port "Start a new server bound to port on the local network running a REPL web service" "self startInServerOn: 1701" ^ (ZnServer on: port) bindingAddress: NetNameResolver loopBackAddress; delegate: self new; start; yourself! ! !ZnReadEvalPrintDelegate methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/16/2013 11:17'! evaluate: string | output | output := String streamContents: [ :out | [ | result | result := Compiler evaluate: string. out print: result; cr ] on: Error, ParserNotification do: [ :exception | out print: exception; cr. exception signalerContext printDetails: out. exception signalerContext sender debugStack: 8 on: out ]. out cr ]. ^ String lf join: output lines! ! !ZnReadEvalPrintDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/16/2013 09:51'! handleGetRequest: request ^ ZnResponse ok: (ZnEntity text: (self helpText format: { request server port })) ! ! !ZnReadEvalPrintDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/16/2013 09:54'! handlePostRequest: request ^ ZnResponse ok: (ZnEntity text: (self evaluate: request entity contents))! ! !ZnReadEvalPrintDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/16/2013 09:52'! handleRequest: request request uri firstPathSegment = #repl ifTrue: [ request method = #GET ifTrue: [ ^ self handleGetRequest: request ]. (request method = #POST and: [ request hasEntity and: [ request contentType isBinary not ] ]) ifTrue: [ ^ self handlePostRequest: request ] ]. ^ ZnResponse notFound: request uri! ! !ZnReadEvalPrintDelegate methodsFor: 'private' stamp: 'SvenVanCaekenberghe 5/15/2013 21:53'! helpText ^ '# Pharo Smalltalk REPL. POST expressions to evaluate\# Here is one way (type ctrl-d to end input)\curl -X POST -H''Content-Type:text/plain'' --data-binary @- http://localhost:{1}/repl\' withCRs replaceAll: Character cr with: Character lf; yourself! ! !ZnReadEvalPrintDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/15/2013 13:44'! value: request "I implement the generic #value: message as equivalent to #handleRequest:" ^ self handleRequest: request! ! !ZnTestRunnerDelegate commentStamp: '' prior: 39571540! I am ZnTestRunnerDelegate, a web service interface to run unit tests. ZnTestRunnerDelegate startInServerOn: 1701. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests'. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests/testBase64'. Web Service API: GET /sunit/MyTestCase GET /sunit/MyTestCase/testOne Part of Zinc HTTP Components! !ZnTestRunnerDelegate class methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/27/2013 17:16'! startInServerOn: port "Start a new server bound to port on the local network running a test runner web service" "self startInServerOn: 1701" ^ (ZnServer on: port) bindingAddress: NetNameResolver loopBackAddress; delegate: self new; start; yourself! ! !ZnTestRunnerDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/28/2013 10:29'! handleGetRequest: request | testCaseClass selector result | testCaseClass := Smalltalk globals at: request uri pathSegments second asSymbol ifAbsent: [ ^ self notFoundResponse: 'No such class, ', request uri pathSegments second ]. (testCaseClass inheritsFrom: TestCase) ifFalse: [ ^ self notFoundResponse: testCaseClass printString, ' is not a TestCase subclass' ]. selector := request uri pathSegments size = 3 ifTrue: [ request uri pathSegments third asSymbol ] ifFalse: [ nil ]. (selector isNil or: [ testCaseClass canUnderstand: selector ]) ifFalse: [ ^ self notFoundResponse: selector, ' is not a method of ', testCaseClass printString ]. result := selector ifNil: [ testCaseClass suite run ] ifNotNil: [ testCaseClass run: selector ]. ^ result runCount = result passedCount ifTrue: [ ZnResponse ok: (ZnEntity textCRLF: result printString) ] ifFalse: [ ZnResponse serverError: result printString ]! ! !ZnTestRunnerDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/27/2013 17:20'! handleRequest: request (request method = #GET and: [ request uri firstPathSegment = #sunit and: [ request uri pathSegments size > 1 ] ]) ifTrue: [ ^ self handleGetRequest: request ]. ^ ZnResponse notFound: request uri! ! !ZnTestRunnerDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 5/28/2013 10:28'! notFoundResponse: message ^ ZnResponse new statusLine: ZnStatusLine notFound; headers: ZnHeaders defaultResponseHeaders; entity: (ZnEntity textCRLF: 'Not Found: ', message); yourself.! ! !ZnTestRunnerDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 5/27/2013 17:16'! value: request "I implement the generic #value: message as equivalent to #handleRequest:" ^ self handleRequest: request! ! ZnClient removeSelector: #noteRedirect! ZnMultiThreadedServer removeSelector: #writeResponseExceptionSet! ZnMultiThreadedServer removeSelector: #readRequestExceptionSet! ZnStringEntity removeSelector: #readUpToEndFrom:! ZnStringEntity removeSelector: #readLimitedFrom:! ZdcIOBuffer removeSelector: #buffer:! ZnChunkedReadStreamTests removeSelector: #testReadingNextInto! ZnChunkedReadStreamTests removeSelector: #testReadingNext! ZnChunkedReadStreamTests removeSelector: #testReadingGzipStepped! ZnChunkedReadStreamTests removeSelector: #testReadingGzip! ZnChunkedReadStreamTests removeSelector: #testReadingBuffered! ZnChunkedReadStreamTests removeSelector: #testReading! Smalltalk globals removeClassNamed: #ZnChunkedReadStreamTests! ZnUtils class removeSelector: #nextPutAll:on:chunked:! "DebuggerModel"! "Tools"! "Zinc-Character-Encoding-Core"! "Zinc-Character-Encoding-Tests"! "Zinc-HTTP"! "Zinc-Resource-Meta-Core"! "Zinc-Resource-Meta-Tests"! "Zinc-Tests"! "Zinc-Zodiac"! "Zodiac-Core"! "Zodiac-Tests"! ----End fileIn----! ----QUIT----an Array(7 June 2013 3:07:37 pm) Pharo.image priorSource: 6001209! ----STARTUP----an Array(7 June 2013 5:16:10 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 5:16:10 pm) Pharo-30187.image priorSource: 6109206! ----STARTUP----an Array(7 June 2013 4:27:52 pm) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/7/2013 18:24' prior: 39555943! commentForCurrentUpdate ^ '10867 enabled: cleans post fix https://pharo.fogbugz.com/default.asp?10867 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 18:24'! script285 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1470.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.808.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.191.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/7/2013 18:25'! update30188 "self new update30188" self withUpdateLog: '10867 enabled: cleans post fix https://pharo.fogbugz.com/default.asp?10867 '. self loadTogether: self script285 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 6/7/2013 18:07' prior: 39516487! modalUnlockFrom: aSystemWindow "Unlock the receiver as a modal owner of the given window." aSystemWindow removeProperty: #modalOwner. self removeProperty: #modalChild. closeBox ifNotNilDo: [:cl | cl enabled: (self valueOfProperty: #preModalCloseEnabled ifAbsent: [true])]. self removeProperty: #preModalCloseEnabled. self activate! ! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(7 June 2013 4:28:09 pm) Pharo.image priorSource: 6109443! ----STARTUP----an Array(7 June 2013 6:35:11 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 6:35:11 pm) Pharo-30188.image priorSource: 6120157! ----STARTUP----an Array(7 June 2013 7:10:52 pm) as /mnt/pharo/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(7 June 2013 7:11:01 pm) Pharo.image priorSource: 6120394! ----STARTUP----an Array(7 June 2013 9:17:52 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 June 2013 9:17:52 pm) Pharo-30188.image priorSource: 6120603! ----STARTUP----an Array(9 June 2013 4:48:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(9 June 2013 4:49:01 pm) Pharo.image priorSource: 6120840! ----STARTUP----an Array(9 June 2013 4:55:23 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 June 2013 4:55:23 pm) Pharo-30188.image priorSource: 6121046! ----STARTUP----an Array(9 June 2013 5:21:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/9/2013 17:19' prior: 39664177! commentForCurrentUpdate ^ '30188 (new attempt after the double 30188) Issue 10745 [ENH]: MethodContext>>#callChainAnySatisfy: https://pharo.fogbugz.com/default.asp?10745 Issue 10838 an MCOrganizationDefinition should only remove empty categories during unload https://pharo.fogbugz.com/default.asp?10838 Issue 10853 AlainTreeModel: Want menu on tree items only https://pharo.fogbugz.com/default.asp?10853 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/7/2013 20:50'! script286 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1471.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.809.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.192.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/9/2013 17:00'! script287 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1472.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.810.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.193.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/9/2013 17:19'! script288 ^ 'AST-Core-MarcusDenker.163.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.28.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-MarcusDenker.122.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1473.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.811.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.194.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.30.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/9/2013 17:01' prior: 39673873! update30188 "self new update30188" self withUpdateLog: '10745 [ENH]: MethodContext>>#callChainAnySatisfy: https://pharo.fogbugz.com/default.asp?10745 10838 an MCOrganizationDefinition should only remove empty categories during unload https://pharo.fogbugz.com/default.asp?10838 10853 AlainTreeModel: Want menu on tree items only https://pharo.fogbugz.com/default.asp?10853'. self loadTogether: self script287 merge: false. ScriptLoader new cleanRepositories. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/9/2013 17:19'! update30189 "self new update30189" self withUpdateLog: '30188 (new attempt after the double 30188) Issue 10745 [ENH]: MethodContext>>#callChainAnySatisfy: https://pharo.fogbugz.com/default.asp?10745 Issue 10838 an MCOrganizationDefinition should only remove empty categories during unload https://pharo.fogbugz.com/default.asp?10838 Issue 10853 AlainTreeModel: Want menu on tree items only https://pharo.fogbugz.com/default.asp?10853 '. self loadTogether: self script288 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AlainTreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42'! allowMenuOnNoItem ^ allowMenuOnNoItem contents! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42'! allowMenuOnNoItem: aBoolean allowMenuOnNoItem contents: aBoolean! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'DamienCassou 6/6/2013 15:43' prior: 38965332! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item printString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. treeUpdated := nil asValueHolder. self registerEvents! ! !AlainTreeModel methodsFor: 'morphic' stamp: 'DamienCassou 6/6/2013 16:41' prior: 37052110! menu: aMenu shifted: aBoolean (self allowMenuOnNoItem not and: [ self selectedItems isEmpty ]) ifTrue: [ ^ nil ]. menuBlockHolder contents cull: aMenu cull: aBoolean. ^ aMenu! ! !MCOrganizationDefinition methodsFor: 'unloading' stamp: 'ChristopheDemarey 6/3/2013 16:44' prior: 24885814! unload categories do: [ :category | (SystemOrganization isEmptyCategoryNamed: category) ifTrue: [ SystemOrganization removeCategory: category ] ]! ! !MethodContext methodsFor: 'testing' stamp: 'SeanDeNigris 5/24/2013 11:07'! callChainAnySatisfy: aBlock (aBlock value: self) ifTrue: [ ^ true ]. self sender ifNil: [ ^ false ]. ^ self sender callChainAnySatisfy: aBlock.! ! "Kernel"! "Monticello"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(9 June 2013 5:22:01 pm) Pharo.image priorSource: 6121283! ----STARTUP----an Array(9 June 2013 5:28:17 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 June 2013 5:28:17 pm) Pharo-30189.image priorSource: 6154233! ----STARTUP----an Array(10 June 2013 10:20:53 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/10/2013 10:14' prior: 39676014! commentForCurrentUpdate ^ '10779 - Parsing faulty method ends with incorrect ast. Thanks Gisela https://pharo.fogbugz.com/default.asp? 10801 - Use UTF8 encoding in MC snapshot source.st https://pharo.fogbugz.com/default.asp?10801 Thanks nicolas cellier and sven.'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/10/2013 10:14'! script289 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.28.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.43.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-StephaneDucasse.1473.mcz KernelTests-MarcusDenker.518.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-StephaneDucasse.194.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-StephaneDucasse.34.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/10/2013 10:14'! update30190 "self new update30190" self withUpdateLog: '10779 - Parsing faulty method ends with incorrect ast. Thanks Gisela https://pharo.fogbugz.com/default.asp? 10801 - Use UTF8 encoding in MC snapshot source.st https://pharo.fogbugz.com/default.asp?10801 Thanks nicolas cellier and sven.'. self loadTogether: self script289 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBParser class methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/28/2013 13:22' prior: 30943882! errorNodeBlock ^ [ :aString :position :parser| parser parseErrorNode: aString ]! ! !RBParser class methodsFor: 'parsing' stamp: 'GiselaDecuzzi 5/28/2013 15:09' prior: 30944290! parseExpression: aString onError: aBlock | node parser | parser := self new. parser errorBlock: aBlock. parser initializeParserWith: aString. node := parser parseExpression: aString. ^(node statements size == 1 and: [node temporaries isEmpty]) ifTrue: [node statements first] ifFalse: [node]! ! !RBParser class methodsFor: 'parsing' stamp: 'GiselaDecuzzi 6/5/2013 09:53' prior: 30944851! parseFaultyMethod: aString ^self parseMethod: aString onError: self errorNodeBlock! ! !RBParser class methodsFor: 'parsing' stamp: 'GiselaDecuzzi 5/28/2013 15:09' prior: 30945085! parseMethod: aString onError: aBlock | parser | parser := self new. parser errorBlock: aBlock. parser initializeParserWith: aString. ^parser parseMethod: aString! ! !RBParser methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/5/2013 09:31' prior: 30920858! errorPosition ^currentToken ifNotNil: [ :token | token start] ifNil:[1]! ! !RBParser methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/5/2013 10:34' prior: 39334251! initializeParserWith: aString source := aString. self scanner: (self scannerClass on: (ReadStream on: aString) errorBlock: [ :errorMsg :position | self parseErrorNode: errorMsg] )! ! !RBParser methodsFor: 'private-parsing' stamp: 'GiselaDecuzzi 6/3/2013 16:09' prior: 30929913! parseBlock | position node | position := currentToken start. self step. node := self blockNodeClass new. self parseBlockArgsInto: node. node left: position. node body: self sequenceNodeClass new. (self parseStatements: false into: node body). (currentToken isSpecial and: [currentToken value = $]]) ifFalse: [^ self parserError: ''']'' expected' translated]. node right: currentToken start. self step. ^node! ! !RBParser methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/5/2013 09:34' prior: 30920976! parseErrorNode: aMessageString | token sourceString | sourceString := source copyFrom: self errorPosition to: source size. token := RBValueToken value: sourceString start: self errorPosition. ^ RBParseErrorNode errorMessage: aMessageString token: token! ! !RBParser methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/27/2013 18:55' prior: 30920462! parseMethod: aString | node errorNode | node := self parseMethod. self atEnd ifFalse: [ errorNode := self parserError: 'Unknown input at end'. errorNode ifNotNil: [ node statements: node statements, {errorNode }] ]. node source: aString. ^ node! ! !RBParser methodsFor: 'private-parsing' stamp: 'GiselaDecuzzi 5/28/2013 11:39' prior: 30939565! parseStatementList: pragmaBoolean into: sequenceNode | statements return periods returnPosition node | return := false. statements := OrderedCollection new. periods := OrderedCollection new. self addCommentsTo: sequenceNode. pragmaBoolean ifTrue: [self parsePragmas]. [currentToken isSpecial and: [currentToken value = $.]] whileTrue: [periods add: currentToken start. self step]. [self atEnd or: [currentToken isSpecial and: ['])}' includes: currentToken value]]] whileFalse: [ return ifTrue: [ (self parserError: 'End of statement list encounted') ifNotNil: [ :errorNode | statements add: errorNode. sequenceNode statements: statements. sequenceNode periods: periods. self step. ^sequenceNode] ]. (currentToken isSpecial and: [currentToken value = $^]) ifTrue: [returnPosition := currentToken start. self step. node := self returnNodeClass return: returnPosition value: self parseAssignment. statements add: node. return := true] ifFalse: [ "check for pragmas" (currentToken isBinary and: [ currentToken value == #<]) ifTrue: [ self parsePragma ] ifFalse: [ node := self parseAssignment. statements add: node ]]. (currentToken isSpecial and: [currentToken value = $.]) ifTrue: [periods add: currentToken start. self step. self addCommentsTo: node] ifFalse: [ "check for closing pragmas" (currentToken isBinary and: [ currentToken value == #>]) ifFalse: [ return := true ] ifTrue: [ self step ]]. [currentToken isSpecial and: [currentToken value = $.]] whileTrue: [periods add: currentToken start. self step] ]. statements notEmpty ifTrue: [self addCommentsTo: statements last]. sequenceNode statements: statements; periods: periods. ^sequenceNode! ! !RBParser methodsFor: 'private-parsing' stamp: 'GiselaDecuzzi 6/3/2013 16:08' prior: 30943557! parseVariableNode currentToken isIdentifier ifFalse: [ ^ self parserError: 'Variable name expected' translated]. ^self parsePrimitiveIdentifier! ! !RBParser methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/5/2013 10:05' prior: 30921318! parserError: aString "Let the errorBlock try to recover from the error." | errorNode | errorNode := self errorBlock cull: aString cull: self errorPosition cull: self. errorNode ifNotNil: [ ^ errorNode ]. SyntaxErrorNotification inClass: Object category: nil withCode: source doitFlag: false errorMessage: aString location: currentToken start! ! !RBParser methodsFor: 'initialize-release' stamp: 'GiselaDecuzzi 6/5/2013 09:43' prior: 30921900! scanner: aScanner scanner := aScanner. pragmas := nil. self initialize. self step.! ! !RBParser methodsFor: 'private' stamp: 'GiselaDecuzzi 5/28/2013 17:11' prior: 30925173! step (currentToken notNil and: [currentToken comments notNil]) ifTrue: [comments addAll: currentToken comments]. nextToken notNil ifTrue: [currentToken := nextToken. nextToken := nil] ifFalse: [currentToken := scanner next].! ! !RBPragmaNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^self arguments anySatisfy: #isFaulty.! ! !RBAssignmentNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:29'! isFaulty ^self variable isFaulty or: [ self assignment isFaulty].! ! !RBBlockNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:29'! isFaulty ^(self arguments anySatisfy: #isFaulty ) or: [ self body isFaulty]! ! !RBCascadeNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:29'! isFaulty ^self messages anySatisfy: #isFaulty! ! !RBProgramNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:27'! isFaulty self subclassResponsibility! ! !RBParseErrorNode class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 5/27/2013 18:35' prior: 30893108! errorMessage: aString token: anRBToken self haltOnce. ^ self new errorMessage: aString; token: anRBToken; yourself! ! !RBParseErrorNode methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^true.! ! !RBMethodNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty (self arguments anySatisfy: #isFaulty) ifTrue:[ ^true]. (self pragmas anySatisfy: #isFaulty) ifTrue:[ ^true]. ^self body isFaulty! ! !RBMethodNode methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/27/2013 18:59'! statements: aCollection self body statements: aCollection ! ! !RBMessageNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^self receiver isFaulty or: [self arguments anySatisfy: #isFaulty]! ! !RBSequenceNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^self statements anySatisfy: #isFaulty.! ! !RBArrayNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:29'! isFaulty ^self statements anySatisfy: #isFaulty! ! !MczInstaller methodsFor: 'private' stamp: 'nicolascellier 5/31/2013 23:35'! contentStreamForMember: member ^[(member contentStreamFromEncoding: 'utf8') text] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1 and we do not need to do anything But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. (str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [str := (WideString fromByteArray: str contents asByteArray) readStream]. exc return: str]! ! !MczInstaller methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:36'! contentsForMember: member ^[(member contentStreamFromEncoding: 'utf8') text contents] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1. But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. exc return: ((str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [WideString fromByteArray: str contents asByteArray] ifFalse: [str contents])]! ! !MczInstaller methodsFor: 'installation' stamp: 'nicolascellier 6/2/2013 18:38' prior: 25416496! installMember: member self useNewChangeSetDuring: [ CodeImporter evaluateReadStream: (self contentsForMember: member) readStream. ]! ! !MczInstaller methodsFor: 'utilities' stamp: 'nicolascellier 6/2/2013 18:37' prior: 38664576! parseMember: memberOrName | member tokens | member := self zip member: memberOrName. tokens := (self contentsForMember: member) parseLiterals first. ^ self associate: tokens! ! !MCMczReader methodsFor: 'private' stamp: 'nicolascellier 5/31/2013 23:35'! contentStreamForMember: member ^[(member contentStreamFromEncoding: 'utf8') text] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1 and we do not need to do anything But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. (str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [str := (WideString fromByteArray: str contents asByteArray) readStream]. exc return: str]! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:36'! contentsForMember: member ^[(member contentStreamFromEncoding: 'utf8') text contents] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1. But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. exc return: ((str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [WideString fromByteArray: str contents asByteArray] ifFalse: [str contents])]! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:36' prior: 24821279! extractDefinitionsFrom: member | reader | (MCSnapshotReader readerClassForFileNamed: member fileName) ifNotNil: [:rc | reader := rc on: (self contentsForMember: member) readStream. definitions addAll: reader definitions] ! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'nicolascellier 5/31/2013 23:33' prior: 24821573! extractDependencyFrom: zipMember ^ MCVersionDependency package: (MCPackage named: (zipMember fileName copyAfterLast: $/)) info: (self extractInfoFrom: (self parseMember: zipMember))! ! !MCMczReader methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:37' prior: 38669168! parseMember: memberOrName | member tokens | member := self zip member: memberOrName. tokens := (self contentsForMember: member) parseLiterals first. ^ self associate: tokens! ! !MCMczWriter methodsFor: 'writing' stamp: 'nicolascellier 6/2/2013 18:39'! addString: string at: path encodedTo: encodingName | member | member := zip addString: (string convertToEncoding: encodingName) as: path. member desiredCompressionMethod: ZipArchive compressionDeflated ! ! !MCMczWriter methodsFor: 'serializing' stamp: 'nicolascellier 5/31/2013 23:07' prior: 24824691! serializeDefinitions: aCollection ^String streamContents: [:aStream | | writer | writer := self snapshotWriterClass on: aStream. writer writeDefinitions: aCollection]! ! !MCMczWriter methodsFor: 'visiting' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24825873! writePackage: aPackage self addString: (self serializePackage: aPackage) at: 'package' encodedTo: 'utf8'! ! !MCMczWriter methodsFor: 'visiting' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24826031! writeSnapshot: aSnapshot self addString: (self serializeDefinitions: aSnapshot definitions) at: 'snapshot/source.', self snapshotWriterClass extension encodedTo: 'utf8'. self addString: (self serializeInBinary: aSnapshot) at: 'snapshot.bin'! ! !MCMczWriter methodsFor: 'visiting' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24826337! writeVersionDependency: aVersionDependency | string | string := (self serializeVersionInfo: aVersionDependency versionInfo). self addString: string at: 'dependencies/', aVersionDependency package name encodedTo: 'utf8'! ! !MCMczWriter methodsFor: 'visiting' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24826622! writeVersionInfo: aVersionInfo | string | string := self serializeVersionInfo: aVersionInfo. self addString: string at: 'version' encodedTo: 'utf8'. ! ! !MCMcdWriter methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24813604! writeBaseInfo: aVersionInfo | string | string := self serializeVersionInfo: aVersionInfo. self addString: string at: 'base' encodedTo: 'utf8'. ! ! !MCMcdWriter methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24813996! writeNewDefinitions: aCollection self addString: (self serializeDefinitions: aCollection) at: 'new/source.', self snapshotWriterClass extension encodedTo: 'utf8'.! ! !MCMcdWriter methodsFor: 'as yet unclassified' stamp: 'nicolascellier 6/2/2013 18:39' prior: 24814223! writeOldDefinitions: aCollection self addString: (self serializeDefinitions: aCollection) at: 'old/source.', self snapshotWriterClass extension encodedTo: 'utf8'.! ! !ZipArchiveMember methodsFor: 'accessing' stamp: 'nicolascellier 5/31/2013 23:01' prior: 55127408! contentStream "Answer my contents as a text stream. Default is no conversion, since we don't know what the bytes mean." ^self contentStreamFromEncoding: 'latin1' ! ! !ZipArchiveMember methodsFor: 'accessing' stamp: 'nicolascellier 5/31/2013 22:39'! contentStreamFromEncoding: encodingName "Answer my contents as a text stream. Interpret the raw bytes with given encodingName" | s | s := MultiByteBinaryOrTextStream on: (String new: self uncompressedSize). s converter: (TextConverter newForEncoding: encodingName). self extractTo: s. s reset. ^ s ! ! !RBVariableNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^false! ! !RBReturnNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^self value isFaulty.! ! !RBParserTest methodsFor: 'private' stamp: 'GiselaDecuzzi 5/27/2013 18:31'! parseFaultyMethod: text ^RBParser parseFaultyMethod: text.! ! !RBParserTest methodsFor: 'tests' stamp: 'GiselaDecuzzi 6/5/2013 10:28'! testParseFaultyMethod | node strangeExpressions | strangeExpressions := OrderedCollection new . strangeExpressions add: 'method: asd self ,'; add: 'method: asd self a:'; "message without needed argument" add: 'method: asd []]'; add: 'method: asd [ ] ,';"binary message without second argument" add: 'method: ^^'; "returning twice" add: 'method: asd ['; "opening a block" add: 'method: asd ^ asd. n'; "invalid expresion after return" add: 'method: asd ^ {'. "Only Open a literal array" strangeExpressions do: [ :exp | node := self parseFaultyMethod: exp. self assert: node isMethod. self assert: node isFaulty. ]. ! ! !RBParserTest methodsFor: 'tests' stamp: 'GiselaDecuzzi 5/27/2013 19:31'! testParseFaultyMethodExpresionHasErrorNodeAsFinal | node strangeExpression | strangeExpression := 'method: asd ^ asd. n'. node := self parseFaultyMethod: strangeExpression. self assert: node isMethod. self assert: node isFaulty. self assert: node statements size equals: 2. self assert: node statements last isFaulty ! ! !RBLiteralArrayNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:29'! isFaulty ^self contents anySatisfy: #isFaulty! ! !RBLiteralValueNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/5/2013 10:30'! isFaulty ^false.! ! !RBScanner methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/28/2013 13:28' prior: 31288818! errorBlock: aBlock errorBlock := aBlock! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/3/2013 10:15' prior: 31294076! scanLiteral self step. self stripSeparators. characterType = #alphabetic ifTrue: [ ^ self scanSymbol ]. characterType = #binary ifTrue: [ ^ (self scanBinary: RBLiteralToken) stop: self previousStepPosition ]. currentCharacter = $' ifTrue: [ ^ self scanStringSymbol ]. (currentCharacter = $( or: [ currentCharacter = $[ ]) ifTrue: [ ^ self scanLiteralArrayToken]. "Accept some strange literals like '#1', '# species' and '##species:'" characterType = #digit ifTrue: [ ^ self scanNumber ]. currentCharacter = $# ifTrue: [ ^ self scanLiteral ]. ^self scannerError: 'Expecting a literal type' translated.! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/3/2013 10:17' prior: 31295195! scanLiteralString self step. [currentCharacter isNil ifTrue: [^self scannerError: 'Unmatched '' in string literal.' translated]. currentCharacter = $' and: [self step ~= $']] whileFalse: [buffer nextPut: currentCharacter. self step]. ^RBLiteralToken value: buffer contents start: tokenStart stop: self previousStepPosition! ! !RBScanner methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/3/2013 10:16' prior: 31289688! scanToken "fast-n-ugly. Don't write stuff like this. Has been found to cause cancer in laboratory rats. Basically a case statement. Didn't use Dictionary because lookup is pretty slow." characterType = #alphabetic ifTrue: [^self scanIdentifierOrKeyword]. (characterType = #digit or: [currentCharacter = $- and: [(self classify: stream peek) = #digit]]) ifTrue: [^self scanNumber]. characterType = #binary ifTrue: [^self scanBinary: RBBinarySelectorToken]. characterType = #special ifTrue: [^self scanSpecialCharacter]. currentCharacter = $' ifTrue: [^self scanLiteralString]. currentCharacter = $# ifTrue: [^self scanLiteral]. currentCharacter = $$ ifTrue: [^self scanLiteralCharacter]. ^self scannerError: 'Unknown character' translated! ! !RBScanner methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/5/2013 09:58' prior: 35793083! scannerError: aString "Evaluate the block. If it returns raise an error" self errorBlock cull: aString cull: self errorPosition cull: self. ^ SyntaxErrorNotification inClass: Object category: nil withCode: stream contents doitFlag: false errorMessage: aString location: stream position + 1! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/3/2013 10:16' prior: 31297810! stripComment | start stop | start := stream position. [self step = $"] whileFalse: [characterType = #eof ifTrue: [^self scannerError: 'Unmatched " in comment.' translated]]. stop := stream position. self step. comments add: (start to: stop)! ! "AST-Core"! "AST-Tests-Core"! "Compression"! "Monticello"! "System-Installers"! ----End fileIn----! ----QUIT----an Array(10 June 2013 10:21:02 am) Pharo.image priorSource: 6154470! ----STARTUP----an Array(10 June 2013 10:27:30 am) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 June 2013 10:27:30 am) Pharo-30190.image priorSource: 6184582! ----STARTUP----an Array(10 June 2013 6:24:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/10/2013 18:21' prior: 39709204! commentForCurrentUpdate ^ '10854 AlainTreeModel: keyboard navigation broken https://pharo.fogbugz.com/f/cases/10854 10872 Add more date and time tests https://pharo.fogbugz.com/f/cases/10872 10874 The memory FileSystem has a problem copying files https://pharo.fogbugz.com/f/cases/10874'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/10/2013 18:21'! script290 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-StephaneDucasse.34.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/10/2013 18:21'! update30191 "self new update30191" self withUpdateLog: '10854 AlainTreeModel: keyboard navigation broken https://pharo.fogbugz.com/f/cases/10854 10872 Add more date and time tests https://pharo.fogbugz.com/f/cases/10872 10874 The memory FileSystem has a problem copying files https://pharo.fogbugz.com/f/cases/10874'. self loadTogether: self script290 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateAndTimeTest methodsFor: 'tests' stamp: 'CamilloBruni 6/7/2013 23:40'! testAsTime | dateAndTime | dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: 0 asDuration. self assert: dateAndTime asTime equals: (Time hour: 1 minute: 2 second: 3). dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: 5 hours. self assert: dateAndTime asTime equals: (Time hour: 1 minute: 2 second: 3). dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: -5 hours. self assert: dateAndTime asTime equals: (Time hour: 1 minute: 2 second: 3).! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'CamilloBruni 6/7/2013 23:40'! testAsTimeUTC | dateAndTime | dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: 0 asDuration. self assert: dateAndTime asTimeUTC equals: (Time hour: 1 minute: 2 second: 3). dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: -5 hours. self assert: dateAndTime asTimeUTC equals: (Time hour: 6 minute: 2 second: 3). dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: 5 hours. self assert: dateAndTime asTimeUTC equals: (Time hour: 24+1-5 minute: 2 second: 3).! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'CamilloBruni 6/7/2013 23:55'! testOffset | dateAndTime1 dateAndTime2 | dateAndTime1 := DateAndTime year: 1000 day: 100 hour: 1 minute: 2 second: 3 offset: 1 hours. dateAndTime2 := dateAndTime1 offset: 1 hour. self assert: dateAndTime1 equals: dateAndTime2. self assert: dateAndTime1 localSeconds equals: dateAndTime2 localSeconds. dateAndTime2 := dateAndTime1 offset: -1 hour. self assert: dateAndTime1 equals: dateAndTime2. self deny: dateAndTime1 localSeconds == dateAndTime2 localSeconds. dateAndTime2 := dateAndTime1 offset: -2 hour. self assert: dateAndTime1 equals: dateAndTime2. self deny: dateAndTime1 localSeconds == dateAndTime2 localSeconds.! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'CamilloBruni 6/8/2013 00:16'! testSecondsSinceMidnightLocalTime | dateAndTime | dateAndTime := DateAndTime year: 1000 day: 100 hour: 0 minute: 0 second: 56 offset: 0 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 56. dateAndTime := DateAndTime year: 1000 day: 100 hour: 0 minute: 1 second: 56 offset: 0 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 60+56. dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 0 second: 56 offset: 0 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 3600+56. "1 hour offset" dateAndTime := DateAndTime year: 1000 day: 100 hour: 0 minute: 0 second: 56 offset: 1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 56. dateAndTime := DateAndTime year: 1000 day: 100 hour: 0 minute: 1 second: 56 offset: 1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 60+56. dateAndTime := DateAndTime year: 1000 day: 100 hour: 1 minute: 0 second: 56 offset: 1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 3600+56. "-1 hour offset" dateAndTime := DateAndTime year: 1000 day: 100 hour: 0 minute: 0 second: 56 offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 56. dateAndTime := DateAndTime year: 1001 day: 101 hour: 0 minute: 1 second: 56 offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 60+56. dateAndTime := DateAndTime year: 1002 day: 102 hour: 1 minute: 0 second: 56 offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 3600+56.! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'CamilloBruni 6/8/2013 00:26'! testSecondsSinceMidnightLocalTimeNormalization | dateAndTime| "Check offset: changes from times defined in UTC" dateAndTime := DateAndTime year: 1001 day: 101 hour: 0 minute: 1 second: 56 offset: 0 hours. dateAndTime := dateAndTime offset: 1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (1*3600) + (1*60) + 56. "-1 hours will switch to the previous day" dateAndTime := dateAndTime offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (23*3600) + (1*60) + 56. dateAndTime := DateAndTime year: 1001 day: 101 hour: 23 minute: 1 second: 56 offset: 0 hours. dateAndTime := dateAndTime offset: 1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (0*3600) + (1*60) + 56. "-1 hours will switch to the next day" dateAndTime := dateAndTime offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: 22*3600 + (1*60) + 56. "Check offset: changes from times defined in +1" dateAndTime := DateAndTime year: 1001 day: 101 hour: 0 minute: 1 second: 56 offset: 1 hours. dateAndTime := dateAndTime offset: 2 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (1*3600) + (1*60) + 56. "0 hours will switch to the previous day" dateAndTime := dateAndTime offset: 0 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (23*3600) + (1*60) + 56. dateAndTime := dateAndTime offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (22*3600) + (1*60) + 56. dateAndTime := DateAndTime year: 1001 day: 101 hour: 23 minute: 1 second: 56 offset: 1 hours. "+2 hours will switch to the next day" dateAndTime := dateAndTime offset: 2 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (0*3600) + (1*60) + 56. dateAndTime := dateAndTime offset: 0 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (22*3600) + (1*60) + 56. dateAndTime := dateAndTime offset: -1 hours. self assert: dateAndTime secondsSinceMidnightLocalTime equals: (21*3600) + (1*60) + 56. ! ! !DateAndTime methodsFor: 'converting' stamp: 'CamilloBruni 6/7/2013 23:37'! asTimeUTC ^ Time seconds: self secondsSinceMidnightUTC nanoSeconds: nanos! ! !DateAndTime methodsFor: 'accessing' stamp: 'CamilloBruni 6/8/2013 00:10' prior: 20344688! offset: anOffset "Answer a equivalent to the receiver but with its local time being offset from UTC by offset. Unlike #translateTo: this will NOT change the absolute in UTC " ^ self class basicNew ticks: self ticks offset: anOffset asDuration; yourself ! ! !DateAndTime methodsFor: 'offset' stamp: 'CamilloBruni 6/8/2013 00:10' prior: 20352043! translateTo: anOffset "Keep myself's representation and move it to another timezone offset. Note that unlike #offset: this WILL change the absolute time in UTC |t| t := DateAndTime now. t = (t offset: 2 hours). t = (t translateTo: 2 hours). " self dayMonthYearDo: [ :day :month :year| ^ self class year: year month: month day: day hour: self hour minute: self minute second: self second nanoSecond: self nanoSecond offset: anOffset asDuration ]! ! !FileSystemTest methodsFor: 'tests' stamp: 'DamienCassou 6/8/2013 10:47'! testCopyWithCorrectBasename | directory | self markForCleanup: 'gooly'; markForCleanup: 'plonk'. directory := filesystem workingDirectory. (directory / 'gooly') ensureFile. directory / 'gooly' copyTo: directory / 'plonk'. self assert: (directory / 'plonk') exists. self assert: (directory childNames includes: 'plonk')! ! !AlainTreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character tab asKeyCombination }! ! !AlainTreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character tab shift asKeyCombination }! ! !MemoryStore methodsFor: 'private' stamp: 'DamienCassou 6/8/2013 10:52' prior: 39118899! copy: sourcePath ifAbsent: absentBlock to: destinationPath ifPresent: presentBlock fileSystem: aFilesystem | sourceNode destinationNode | sourceNode := self nodeAt: sourcePath ifPresent: [ :source | source ] ifAbsent: [ ^ absentBlock value]. sourceNode isDirectory ifTrue: [ ^ absentBlock value ]. destinationNode := self nodeAt: destinationPath parent ifPresent: [ :destination | destination ] ifAbsent: [ ^ self signalDirectoryDoesNotExist: destinationPath parent ]. destinationNode isFile ifTrue: [ self signalDirectoryDoesNotExist: destinationPath parent ]. (destinationNode fileEntriesIncludes: destinationPath basename) ifTrue: [ "cannot overwrite existing file"^ presentBlock value ]. destinationNode fileEntryAt: destinationPath basename put: (sourceNode copy basename: destinationPath basename; yourself) ! ! "FileSystem-Memory"! "FileSystem-Tests-Core"! "Kernel"! "KernelTests"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(10 June 2013 6:25:03 pm) Pharo.image priorSource: 6184823! ----STARTUP----an Array(10 June 2013 6:31:30 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 June 2013 6:31:30 pm) Pharo-30191.image priorSource: 6204608! ----STARTUP----an Array(11 June 2013 9:54:54 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/11/2013 09:52' prior: 39739555! commentForCurrentUpdate ^ '10818 Integrate tabs https://pharo.fogbugz.com/f/cases/10818'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/11/2013 09:52'! script291 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-StephaneDucasse.34.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.18.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/11/2013 09:53'! update30192 "self new update30192" self withUpdateLog: '10818 Integrate tabs https://pharo.fogbugz.com/f/cases/10818'. self loadTogether: self script291 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !TabBar commentStamp: '' prior: 0! I am a bar gathering tabs. I am the one managing the selected tab and related bahavior (unselecting the last one, updating the layout to make the selected tab on top of the other)! !TabManager commentStamp: '' prior: 0! I am the entry point for tabs. I am composed of a TabBar and a Morph used as a canvas to render the morph represented by the selected tab. I am very stupid (as you can see only four methods). I just listen to selected tab, and render it! !TabWithNoContents commentStamp: '' prior: 0! Error raised when a tab is asked its contents but have no morph and no retrieving block, or the retrieving block is returning nil.! !TabActionButton commentStamp: '' prior: 0! I am a multi state button supporting icon. I am used to render tab actions! !TabAction commentStamp: '' prior: 0! I am a data object representing an action associated to a tab. I contains - an action to be performed when clicked - an icon to be rendered - a label to add indication about what I am supposed to do! !TabExample commentStamp: '' prior: 0! I am an example of how to: - instanciate tabs (#tabs) - use a tab manager Nothing really complicated here. self open! !TabState commentStamp: '' prior: 0! I represent the current state of a tab. This class is abstract so have a look at my subclasses to have a better overview. I have tree responsibilities: - influence the rendering (color, border) - point out if the state changement asked on my tab is relevant (trying to enable an enabled tab by example) - provide the next state for each change (disable, enable, selected)! !TabDisabled commentStamp: '' prior: 0! I am the state corresponding to a tab being disabled.! !TabEnabled commentStamp: '' prior: 0! I am the state of a tab enabled but not yet selected! !TabSelected commentStamp: '' prior: 0! I am the state of a selected tab! !Tab commentStamp: '' prior: 0! I represent a simple tab I have a IconicListItem which wrap my label and my icon. I also have a morph to display when selected. This morph can in fact be anything responding to #asMorph. Moreover it could be a block for lazy initialization. I also have a state representing if I am selecting or not, enabled or not, etc! !LockableTab commentStamp: '' prior: 0! I am a tab which can be locked/unlocked with according action and icon! !TabLabelItem commentStamp: '' prior: 0! I am a special label morph for tabs. This way I can control which of my submorphs to show according to the tab size! !OrderedCollection methodsFor: '*Tabs' stamp: 'BenjaminVanRyseghem 6/4/2013 16:52'! max: aBlock | max | self ifEmpty: [ ^ nil ]. max := aBlock value: self first. self allButFirstDo: [ :each || value | value := aBlock value: each. value > max ifTrue: [ max := value ] ]. ^ max! ! !TabBar commentStamp: '' prior: 39769627! I am a bar gathering tabs. I am the one managing the selected tab and related bahavior (unselecting the last one, updating the layout to make the selected tab on top of the other)! !TabBar methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/4/2013 16:23'! actionOffset ^ 4! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/8/2013 16:09'! actionsChanged: aTab self selectedTab = aTab ifFalse: [ ^ self ]. self adjustLayout. ! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 03:18'! addActionsFor: aTab | rightOffset | rightOffset := self actionOffset. aTab hasMenu ifTrue: [ rightOffset := 2 * rightOffset + self menuButtonWidth. self addMenuButton ]. aTab actions reverseDo: [ :each || topOffset | topOffset := self height - each icon height // 2. self addMorph: (self createActionButtonFor: each) fullFrame: (LayoutFrame identity bottomFraction: 0; leftFraction: 1; topOffset: topOffset; bottomOffset: topOffset + each icon height; rightOffset: rightOffset negated ; leftOffset: rightOffset negated - each icon width ). rightOffset := rightOffset + each icon width + self actionOffset]! ! !TabBar methodsFor: 'private-history' stamp: 'BenjaminVanRyseghem 6/2/2013 17:38'! addFirstInHistory: aTab self removeFromHistory: aTab. selectionHistory addFirst: aTab! ! !TabBar methodsFor: 'private-history' stamp: 'BenjaminVanRyseghem 6/2/2013 17:38'! addInHistory: aTab self removeFromHistory: aTab. selectionHistory addLast: aTab! ! !TabBar methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 21:06'! addMenuButton | topOffset rightOffset | rightOffset := self actionOffset. topOffset := (self height - 16) // 2. self addMorph: menuButton fullFrame: (LayoutFrame identity bottomFraction: 0; leftFraction: 1; rightOffset: rightOffset negated; leftOffset: rightOffset negated - self menuButtonWidth; topOffset: topOffset; bottomOffset: topOffset + self menuButtonHeight)! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 01:45'! addTab: aTab (tabs includes: aTab) ifTrue: [ ^ self ]. tabs add: aTab. self registerActionsFor: aTab. self selectedTab ifNil: [ aTab selected: true ]. self addFirstInHistory: aTab. self adjustLayout. self changed. self triggerEvent: #tabAdded with: aTab! ! !TabBar methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/8/2013 16:17'! adjustLayout | length overlap | length := self computeLength. self removeAllMorphs. length isZero ifTrue: [ ^ self ]. overlap := self overlap. selectionHistory do: [ :tab || index | index := (tabs indexOf: tab) - 1. self addMorph: tab fullFrame: (LayoutFrame identity rightFraction: 0; leftOffset: (index*(length-overlap)); rightOffset: (index*(length-overlap)) + length; bottomOffset: -1; yourself ). tab updateShowIcon ]. self addActionsFor: self selectedTab.! ! !TabBar methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:48'! borderColor ^ Color gray! ! !TabBar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 15:25'! bounds: b super bounds: b. self adjustLayout! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:21'! canBeClosed ^ tabs allSatisfy: [ :tab | tab closeable ]! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:26'! closeAllTabs tabs copy do: [ :tab | tab close ]! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 16:58'! computeLength | width size length | size := tabs size. size isZero ifTrue: [ ^ 0 ]. width := self width - self extraSpace + ((size-1) * self overlap). length := width / size. length := length min: 200. length := length max: 33. ^ length ! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 03:45'! createActionButtonFor: anAction ^ TabActionButton forAction: anAction! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 03:30'! createMenuButton "Answer a button for the window menu." | form msb | form := Smalltalk ui theme windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := Smalltalk ui theme windowMenuPassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := Smalltalk ui theme windowMenuForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := Smalltalk ui theme windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [ self popUpMenu ]; setBalloonText: 'tab menu' translated; extent: 16@16. ^ msb! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 17:54'! delete super delete. self triggerEvent: #barDeleted with: self! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/11/2013 02:02'! deleteSelectedTabs self selectedTabs do: [:e | e close ].! ! !TabBar methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/2/2013 17:28'! drawLinesOn: aCanvas self selectedTab ifNil: [ aCanvas line: self bottomLeft + (0 @ -1) to: self bottomRight + (0 @ -1) width: 1 color: self borderColor ] ifNotNil: [ aCanvas line: self bottomLeft + (0 @ -1) to: self selectedTab bottomLeft width: 1 color: self borderColor. aCanvas line: self selectedTab bottomLeft to: self selectedTab bottomRight width: 1 color: self selectedColor. aCanvas line: self selectedTab bottomRight to: self bottomRight + (0 @ -1) width: 1 color: self borderColor ]! ! !TabBar methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:52'! drawSubmorphsOn: aCanvas super drawSubmorphsOn: aCanvas. self drawLinesOn: aCanvas! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 16:47'! extraSpace ^ tabs max: [ :each | each extraSpaceForActions ]! ! !TabBar methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 14:20'! initialize "Initialization code for TabsBar" super initialize. tabs := OrderedCollection new. selectionHistory := OrderedCollection new. menuButton := self createMenuButton. numberOfSelectedTabs := 1. self changeProportionalLayout. self addMenuButton. ! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 15:12'! isMultiSelection ^ numberOfSelectedTabs > 1! ! !TabBar methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/4/2013 16:25'! menuButtonHeight ^ 16! ! !TabBar methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/4/2013 16:24'! menuButtonWidth ^ 16! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 14:49'! needSpaceForActions | tab | tab := self selectedTab. tab ifNil: [ ^ false ]. ^ self selectedTab hasMenu or: [ self selectedTab hasActions ]! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 15:28'! orderedSelectedTabs ^ tabs select: [ :e | e selected ]! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/30/2013 14:12'! overlap ^ 8! ! !TabBar methodsFor: 'change reporting' stamp: 'BenjaminVanRyseghem 6/2/2013 19:37'! ownerChanged super ownerChanged. self adjustLayout! ! !TabBar methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 6/4/2013 16:03'! popUpMenu | menu | menu := self selectedTab menu. menu popUpAt: menuButton bottomRight forHand: ActiveHand in: World! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:32'! registerActionsFor: aTab aTab when: #tabSelected send: #tabSelected: to: self; when: #tabDeleted send: #tabDeleted: to: self; when: #rightKeyPressed send: #rightKeyPressed: to: self; when: #leftKeyPressed send: #leftKeyPressed: to: self; when: #tabRefreshed send: #tabRefreshed: to: self; when: #actionsChanged send: #actionsChanged: to: self; when: #tabResetSelection send: #tabResetSelection: to: self; when: #tabAddedToSelection send: #tabAddedToSelection: to: self; when: #tabRemovedFromSelection send: #tabRemovedFromSelection: to: self; when: #tabSelectTo send: #tabSelectTo: to: self; when: #tabEmptyContents send: #tabEmptyContents: to: self! ! !TabBar methodsFor: 'private-history' stamp: 'BenjaminVanRyseghem 6/2/2013 17:38'! removeFromHistory: aTab selectionHistory remove: aTab ifAbsent: [ ].! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 00:43'! removeTab: aTab | nextSelection | selectionHistory size = 1 ifTrue: [ ^ self delete ]. aTab selected ifTrue: [ nextSelection := selectionHistory at: selectionHistory size - 1. nextSelection selected: true ]. self removeFromHistory: aTab. tabs remove: aTab. self adjustLayout. self triggerEvent: #tabDeleted with: aTab! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 14:53'! reversedSelectedTabs ^ selectionHistory last: numberOfSelectedTabs! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 21:21'! selectLastTab | tab | tab := tabs lastIfAbsent: [ ^ self ]. tab selected: true! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 18:22'! selectNext | index nextSelection | index := tabs indexOf: self selectedTab. nextSelection := tabs at: index + 1 ifAbsent: [ ^ self ]. nextSelection selected: true.! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 18:22'! selectPrevious | index nextSelection | index := tabs indexOf: self selectedTab. nextSelection := tabs at: index - 1 ifAbsent: [ ^ self ]. nextSelection selected: true.! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 21:19'! selectTabAt: index ifAbsent: aBlock | tab | tab := tabs at: index ifAbsent: [ ^ aBlock value ]. tab selected: true! ! !TabBar methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:54'! selectedColor ^ Smalltalk ui theme class lightBaseColor! ! !TabBar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/2/2013 17:31'! selectedTab ^ selectionHistory lastIfAbsent: [ nil ]! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 14:53'! selectedTabs ^ (selectionHistory last: numberOfSelectedTabs) reversed! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/11/2013 01:55'! tabAddedToSelection: aTab aTab selected ifTrue: [ ^ self ]. numberOfSelectedTabs := numberOfSelectedTabs + 1. self addInHistory: aTab. aTab silentlySelected: true. self adjustLayout. self triggerEvent: #tabAddedToSelection with: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 00:43'! tabDeleted: aTab self removeTab: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 21:10'! tabEmptyContents: aTab self selectedTab = aTab ifFalse: [ ^ self ]. (selectionHistory last: numberOfSelectedTabs) do: [ :each | each == aTab ifFalse: [ each silentlySelected: false ] ]. numberOfSelectedTabs := 1. self adjustLayout. self triggerEvent: #tabEmptyContents with: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/8/2013 15:37'! tabRefreshed: aTab self selectedTab = aTab ifFalse: [ ^ self ]. self triggerEvent: #tabRefreshed with: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/10/2013 17:29'! tabRemovedFromSelection: aTab numberOfSelectedTabs == 1 ifTrue: [ ^ self ]. numberOfSelectedTabs := numberOfSelectedTabs - 1. "Insert the remove tab just before the selected ones to preserve order" selectionHistory remove: aTab. selectionHistory add: aTab afterIndex: (selectionHistory size - numberOfSelectedTabs). aTab silentlySelected: false. self adjustLayout. self triggerEvent: #tabRemovedFromSelection with: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 15:13'! tabResetSelection: aTab "Clicked on an already clicked tab, since it can happened after a multi selection, I have to clear the selection except for this tab" (selectionHistory last: numberOfSelectedTabs) do: [ :each | each == aTab ifFalse: [ each silentlySelected: false ] ]. numberOfSelectedTabs := 1. self addInHistory: aTab. self adjustLayout. self triggerEvent: #tabResetSelection with: aTab! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/11/2013 02:00'! tabSelectTo: aTab | index selectedIndex | index := tabs indexOf: aTab. "If absent, then the system must be in a curious shape" selectedIndex := tabs indexOf: self selectedTab ifAbsent: [ ^ self ]. "No currently selected tab" index compareWith: selectedIndex ifLesser: [ selectedIndex to: index by: -1 do: [ :i | (tabs at: i) addToSelection ] ] ifEqual: [ ] ifGreater: [ selectedIndex to: index do: [ :i | (tabs at: i) addToSelection ] ]. self addInHistory: aTab. self adjustLayout.! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/11/2013 01:55'! tabSelected: aTab self isMultiSelection ifTrue: [ self tabResetSelection: aTab ] ifFalse: [ self selectedTab ifNotNil: [ self selectedTab selected: false ]. self addInHistory: aTab. self adjustLayout. self triggerEvent: #tabSelected with: aTab ]! ! !TabBar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:07'! tabs ^ tabs! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:52'! tabs: aCollection tabs := aCollection. selectionHistory removeAll. aCollection do: [ :aTab | self registerActionsFor: aTab. self selectedTab ifNil: [ aTab selected: true ]. self addFirstInHistory: aTab ]. self adjustLayout. self changed. self triggerEvent: #tabsChanged! ! !TabManager commentStamp: '' prior: 39769859! I am the entry point for tabs. I am composed of a TabBar and a Morph used as a canvas to render the morph represented by the selected tab. I am very stupid (as you can see only four methods). I just listen to selected tab, and render it! !TabManager methodsFor: 'private-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 20:52'! addLastTabContents: aTab among: size delta: delta | process | process := aTab retrieveMorph: [ :contents | contents ifNil: [ TabWithNoContents signalTab: aTab ]. contentsWrapper addMorph: contents fullFrame: (LayoutFrame identity leftFraction: (size - 1) * delta; leftOffset: 2; rightFraction: 1). contents takeKeyboardFocus ]. process ifNotNil: [ processes add: process ]! ! !TabManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 14:41'! addMorphs self addMorph: toolbar fullFrame: (LayoutFrame identity bottomFraction: 0; bottomOffset: 27; yourself). self addMorph: container fullFrame: (LayoutFrame identity topOffset: 27; yourself). container addMorph: contentsWrapper fullFrame: (LayoutFrame identity topOffset: 10; rightOffset: -1; bottomOffset: -1; leftOffset: 2; yourself).! ! !TabManager methodsFor: 'private-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 20:53'! addSplitterOn: tabs delta: delta | leftProcess rightProcess | tabs overlappingPairsWithIndexDo: [ :left :right :index | leftProcess := left retrieveMorph: [ :leftContents | leftContents ifNil: [ TabWithNoContents signalTab: left ]. rightProcess := right retrieveMorph: [ :rightContents || splitter | rightContents ifNil: [ TabWithNoContents signalTab: right ]. splitter := ProportionalSplitterMorph new addLeftOrTop: leftContents; addRightOrBottom: rightContents; yourself. contentsWrapper addMorph: splitter fullFrame: (LayoutFrame identity leftFraction: index * delta; rightFraction: index * delta; leftOffset: -2; rightOffset: 2) ] ] ]. leftProcess ifNotNil: [ processes add: leftProcess ]. rightProcess ifNotNil: [ processes add: rightProcess ].! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 17:52'! addTab: aTab toolbar addTab: aTab. ! ! !TabManager methodsFor: 'private-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 20:53'! addTabContents: tab at: index delta: delta | process | process := tab retrieveMorph: [ :contents || leftOffset | contents ifNil: [ TabWithNoContents signalTab: tab ]. index = 1 ifTrue: [ leftOffset := 0 ] ifFalse: [ leftOffset := 2 ]. contentsWrapper addMorph: contents fullFrame: (LayoutFrame identity leftFraction: (index - 1) * delta; leftOffset: leftOffset; rightOffset: -2; rightFraction: index * delta) ]. process ifNotNil: [ processes add: process ]! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 18:40'! barDeleted: aBar self close! ! !TabManager methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 5/30/2013 19:55'! borderColor ^ Color gray! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:20'! canBeClosed ^ toolbar canBeClosed! ! !TabManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 20:54'! cleanProcesses processes do: [ :each | each terminate ]. processes removeAll.! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:20'! close self canBeClosed ifFalse: [ ^ self ]. self delete.! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:23'! closeAllTabs toolbar closeAllTabs! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 18:39'! delete super delete. self triggerEvent: #tabManagerDeleted with: self! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/11/2013 02:01'! deleteSelectedTabs toolbar deleteSelectedTabs! ! !TabManager methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 20:01'! drawLinesOn: aCanvas aCanvas line: self topLeft + (0 @ 25) to: self bottomLeft width: 1 color: self borderColor. aCanvas line: self bottomLeft to: self bottomRight width: 1 color: self borderColor. aCanvas line: self topRight + (0 @ 26) to: self bottomRight width: 1 color: self borderColor! ! !TabManager methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 20:01'! drawSubmorphsOn: aCanvas super drawSubmorphsOn: aCanvas. self drawLinesOn: aCanvas! ! !TabManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 21:01'! initialize "Initialization code for TabManager" super initialize. toolbar := TabBar new. processes := OrderedCollection new. self registerBarActions. self registerShortcuts. container := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. contentsWrapper := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. self changeProportionalLayout. self addMorphs! ! !TabManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/10/2013 17:10'! registerBarActions toolbar when: #tabSelected send: #tabSelected: to: self; when: #barDeleted send: #barDeleted: to: self; when: #tabsChanged send: #tabsChanged to: self; when: #tabRefreshed send: #tabRefreshed: to: self; when: #tabAddedToSelection send: #tabAddedToSelection: to: self; when: #tabRemovedFromSelection send: #tabRemovedFromSelection: to: self; when: #tabResetSelection send: #tabResetSelection: to: self; when: #tabEmptyContents send: #tabEmptyContents: to: self! ! !TabManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/11/2013 02:01'! registerShortcuts self on: $] command shift | $] control shift do: [ self selectNext ]; on: $[ command shift | $[ control shift do: [ self selectPrevious ]; on: $w command | $w control do: [ self deleteSelectedTabs ]; on: $w command shift | $w control shift do: [ self closeAllTabs ]. 1 to: 9 do: [ :index | self on: index asString first command | index asString first control do: [ self selectTabAt: index ] ]. self on: $0 command | $0 control do: [ self selectLastTab ]! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 21:20'! selectLastTab toolbar selectLastTab! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 18:24'! selectNext toolbar selectNext! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 18:24'! selectPrevious toolbar selectPrevious! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 21:18'! selectTabAt: index toolbar selectTabAt: index ifAbsent: [].! ! !TabManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:11'! setMultipleContents | tabs size delta | contentsWrapper removeAllMorphs. self cleanProcesses. tabs := toolbar orderedSelectedTabs. size := tabs size. delta := 1 / size. tabs allButLast keysAndValuesDo: [ :index :tab | self addTabContents: tab at: index delta: delta ]. self addLastTabContents: tabs last among: size delta: delta. self addSplitterOn: tabs delta: delta! ! !TabManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 20:59'! setTabContentFrom: aTab | process | contentsWrapper removeAllMorphs. self cleanProcesses. process := aTab retrieveMorph: [ :contents | contents ifNil: [ TabWithNoContents signalTab: aTab ]. contentsWrapper addMorph: contents fullFrame: LayoutFrame identity. contents takeKeyboardFocus ]. process ifNotNil: [ processes add: process ].! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/10/2013 17:11'! tabAddedToSelection: aTab self setMultipleContents! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 21:08'! tabEmptyContents: aTab "My bar already filtered the tab, so here I am sure the tab is the selected tab" contentsWrapper removeAllMorphs ! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 14:44'! tabRefreshed: aTab "Here we know that aTab is the selected tab" self setTabContentFrom: aTab! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/10/2013 17:11'! tabRemovedFromSelection: aTab self setMultipleContents! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 14:46'! tabResetSelection: aTab self setTabContentFrom: aTab! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/9/2013 14:44'! tabSelected: aTab self setTabContentFrom: aTab! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:24'! tabs: aCollection toolbar tabs: aCollection! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/8/2013 16:15'! tabsChanged "Nothing to do"! ! !Magnitude methodsFor: '*Tabs' stamp: 'BenjaminVanRyseghem 6/10/2013 17:49'! compareWith: anotherMagnitude ifLesser: lesserBlock ifEqual: equalBlock ifGreater: greaterBlock self < anotherMagnitude ifTrue: lesserBlock ifFalse: [ self = anotherMagnitude ifTrue: equalBlock ifFalse: greaterBlock ]! ! !TabWithNoContents commentStamp: '' prior: 39770157! Error raised when a tab is asked its contents but have no morph and no retrieving block, or the retrieving block is returning nil.! !TabWithNoContents class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/9/2013 00:50'! signalTab: aTab ^ self new tab: aTab; signal! ! !TabWithNoContents methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/9/2013 00:50'! tab: aTab tab := aTab! ! !TabActionButton commentStamp: '' prior: 39770345! I am a multi state button supporting icon. I am used to render tab actions! !TabActionButton class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/9/2013 03:44'! forAction: anAction ^ self new forAction: anAction; yourself! ! !TabActionButton methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/9/2013 03:48'! drawOn: aCanvas super drawOn: aCanvas. icon ifNil: [ ^ self ]. icon image ifNil: [ ^ self ]. aCanvas translucentImage: icon image at: self topLeft! ! !TabActionButton methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/9/2013 03:45'! forAction: anAction | baseColor | baseColor := Smalltalk ui theme class baseColor. self extent: anAction icon extent. self activeEnabledNotOverUpFillStyle: baseColor. self activeDisabledNotOverUpFillStyle: (self theme buttonDisabledFillStyleFor: self). self passiveEnabledNotOverUpFillStyle: baseColor. self passiveDisabledNotOverUpFillStyle: baseColor. self activeEnabledOverUpFillStyle: (self theme buttonMouseOverFillStyleFor: self); passiveEnabledOverUpFillStyle: (self theme buttonMouseOverFillStyleFor: self). self activeEnabledOverDownFillStyle: (self theme buttonPressedFillStyleFor: self); passiveEnabledOverDownFillStyle: (self theme buttonPressedFillStyleFor: self); addUpAction: [ anAction action value ]; setBalloonText: anAction label; extent: 16@16. icon := anAction icon. ^ self! ! !TabActionButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/9/2013 03:43'! icon: anObject icon := anObject! ! !TabAction commentStamp: '' prior: 39770472! I am a data object representing an action associated to a tab. I contains - an action to be performed when clicked - an icon to be rendered - a label to add indication about what I am supposed to do! !TabAction class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/4/2013 16:10'! action: action icon: icon label: label ^ self new action: action; icon: icon; label: label; yourself! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:10'! action ^ action! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:34'! action: anObject action := anObject. icon on: #click send: #value to: action! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:10'! icon ^ icon! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:33'! icon: aForm icon image: aForm. label ifNotNil: [ icon setBalloonText: label maxLineLength: 100 ]. action ifNotNil: [ icon on: #click send: #value to: action ]! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:33'! initialize "Initialization code for TabAction" super initialize. icon := ImageMorph new! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:10'! label ^ label! ! !TabAction methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 16:34'! label: aLabel label := aLabel. icon setBalloonText: label maxLineLength: 100! ! !TabExample commentStamp: '' prior: 39770727! I am an example of how to: - instanciate tabs (#tabs) - use a tab manager Nothing really complicated here. self open! !TabExample class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/30/2013 15:09'! open ^ self new open! ! !TabExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/30/2013 15:10'! addTabs self tabs do: [ :tab | manager addTab: tab ]! ! !TabExample methodsFor: 'tabs creation' stamp: 'BenjaminVanRyseghem 6/9/2013 03:05'! blueMorphTab | tab | tab := Tab label: 'Blue Morph' icon: Smalltalk ui icons smallBackIcon morph: Morph new. tab actions: { (TabAction action: [ tab morph color: Color random ] icon: Smalltalk ui icons smallConfigurationIcon label: 'Randomize color') }. tab closeable: false; menu: [ :menu | menu add: 'Fubu' target: self selector: #halt ]. ^ tab! ! !TabExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/2/2013 18:13'! delete window ifNotNil: [ window delete ]! ! !TabExample methodsFor: 'tabs creation' stamp: 'BenjaminVanRyseghem 6/8/2013 15:34'! freshListTab ^ (Tab label: 'Fresh List' icon: nil retrievingBlock: [ 1 second asDelay wait. ListComposableModel new items: (1 to: 50) asOrderedCollection; buildWithSpec ] actions: { (TabAction action: [ self halt ] icon: Smalltalk ui icons smallConfigurationIcon label: 'Halt!!') }) menu: [ :menu | menu add: 'Fubu' target: self selector: #halt ]; yourself! ! !TabExample methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/2/2013 17:56'! initialize "Initialization code for TabExample" super initialize. manager := TabManager new. manager when: #tabManagerDeleted send: #delete to: self. listModel := ListComposableModel new. listModel items: ((1 to: 1000) asOrderedCollection)! ! !TabExample methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/9/2013 01:50'! open window := manager openInWindow. window extent: 400@300. self addTabs. " listModel openWithSpec"! ! !TabExample methodsFor: 'tabs creation' stamp: 'BenjaminVanRyseghem 6/4/2013 16:14'! redMorphTab ^ (LockableTab label: 'Red Morph' icon: Smalltalk ui icons smallBackIcon morph: (Morph new color: Color red; yourself)) closeable: false; yourself! ! !TabExample methodsFor: 'tabs creation' stamp: 'BenjaminVanRyseghem 6/4/2013 16:14'! storedListTab ^ Tab label: 'Stored List Model' icon: Smalltalk ui icons smallHelpIcon retrievingBlock: [ listModel buildWithSpec ]! ! !TabExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 16:14'! tabs ^ OrderedCollection new add: self storedListTab; add: self freshListTab; add: self blueMorphTab; add: self redMorphTab; yourself! ! !TabExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/9/2013 02:58'! window ^ window! ! !TabState commentStamp: '' prior: 39770899! I represent the current state of a tab. This class is abstract so have a look at my subclasses to have a better overview. I have tree responsibilities: - influence the rendering (color, border) - point out if the state changement asked on my tab is relevant (trying to enable an enabled tab by example) - provide the next state for each change (disable, enable, selected)! !TabDisabled commentStamp: '' prior: 39771329! I am the state corresponding to a tab being disabled.! !TabDisabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:30'! backgroundColor ^ Color gray darker! ! !TabDisabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:35'! isEnabledMatchingTheState: aBoolean ^ aBoolean not! ! !TabDisabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:35'! isSelectedMatchingTheState: aBoolean ^ aBoolean not! ! !TabDisabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:35'! newStateForEnabled: aBoolean ^ TabEnabled tab: self tab! ! !TabDisabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:35'! newStateForSelected: aBoolean "An disabled tab can not be selected" ^ self! ! !TabEnabled commentStamp: '' prior: 39771435! I am the state of a tab enabled but not yet selected! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 15:09'! backgroundColor ^ Color fromHexString: 'aaaaaa'! ! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 14:17'! enabled ^ true! ! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:24'! isEnabledMatchingTheState: aBoolean ^ aBoolean! ! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:24'! isSelectedMatchingTheState: aBoolean ^ aBoolean not! ! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:32'! newStateForEnabled: aBoolean "aBoolean here must be false" self deny: aBoolean. ^ TabDisabled tab: self tab! ! !TabEnabled methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:33'! newStateForSelected: aBoolean self assert: aBoolean. ^ TabSelected tab: self tab! ! !TabSelected commentStamp: '' prior: 39771541! I am the state of a selected tab! !TabSelected methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:29'! backgroundColor ^ Smalltalk ui theme class lightBaseColor! ! !TabSelected methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:26'! isSelectedMatchingTheState: aBoolean ^ aBoolean! ! !TabSelected methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:33'! newStateForSelected: aBoolean ^ TabEnabled tab: self tab! ! !TabSelected methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 14:17'! selected ^ true! ! !TabState class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/30/2013 13:32'! tab: tab ^ self new tab: tab; yourself! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:28'! backgroundColor ^ self subclassResponsibility! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:55'! buildBorderVertices | borderVertices | borderVertices := OrderedCollection new. borderVertices add: tab bottomLeft; add: tab topLeft + (7 @ 0); add: tab topRight + (-8 @ 0); add: tab bottomRight + (-1@0). ^ borderVertices! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:54'! buildVerticesFrom: borderVertices ^ borderVertices! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 14:16'! enabled ^ false! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:23'! isEnabledMatchingTheState: aBoolean ^ self subclassResponsibility! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:22'! isSelectedMatchingTheState: aBoolean ^ self subclassResponsibility! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:23'! newStateForEnabled: aBoolean ^ self subclassResponsibility! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:22'! newStateForSelected: aBoolean ^ self subclassResponsibility! ! !TabState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 14:16'! selected ^ false! ! !TabState methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 13:32'! tab ^ tab! ! !TabState methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 13:32'! tab: anObject tab := anObject! ! !Tab commentStamp: '' prior: 39771619! I represent a simple tab I have a IconicListItem which wrap my label and my icon. I also have a morph to display when selected. This morph can in fact be anything responding to #asMorph. Moreover it could be a block for lazy initialization. I also have a state representing if I am selecting or not, enabled or not, etc! !LockableTab commentStamp: '' prior: 39771993! I am a tab which can be locked/unlocked with according action and icon! !LockableTab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/8/2013 15:54'! lockedIcon ^ Icons at: #lockedIcon ifAbsentPut: [ self lockedIconContents ]! ! !LockableTab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/8/2013 15:54'! lockedIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(0 0 0 807082779 3175894092 4235885178 4235885178 3159116876 807082779 0 0 0 0 0 1107296256 4286545791 4290164406 3801519766 3801519766 4290230199 4286545791 1107296256 0 0 0 0 3578020932 4290295992 2284991026 335741699 335741699 2285122612 4290361785 3578020932 0 0 0 301989888 3899288170 4019755160 738197504 0 0 738197504 4019228816 3900011893 301989888 0 33554432 1478500384 4100746348 4137458844 2436709693 2035898713 2035898713 2436907072 4135814019 4102325380 1478171419 33554432 234881024 3429723501 4291611852 4292532954 4292072403 4292072403 4292072403 4292072403 4292401368 4291809231 3429723501 234881024 251658240 3480120942 4291546059 4292138196 4292269782 4292006610 4292006610 4292269782 4292138196 4291546059 3480120942 251658240 251658240 3479857770 4290559164 4291217094 4291743438 4285493103 4285493103 4291743438 4291282887 4290559164 3479857770 251658240 251658240 3479726184 4290098613 4290756543 4291151301 4286743170 4286743170 4291151301 4290756543 4290230199 3479726184 251658240 251658240 3479660391 4289967027 4290624957 4290822336 4289703855 4289703855 4290822336 4290624957 4290032820 3479726184 251658240 268435456 3530057832 4290230199 4290888129 4290888129 4291019715 4291019715 4290888129 4290888129 4290230199 3530123625 268435456 150994944 2939631415 4283979864 4284308829 4284374622 4284374622 4284374622 4284374622 4284308829 4284045657 2939697208 150994944) offset: 0@0! ! !LockableTab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 15:42'! closeable: anObject closeable := anObject. anObject ifTrue: [ self setUnlockedIcon ] ifFalse: [ self setLockedIcon ]! ! !LockableTab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 15:42'! setLockedIcon closeIcon image: self class lockedIcon.! ! !LockableTab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/4/2013 15:42'! setUnlockedIcon closeIcon image: self class closeIcon.! ! !LockableTab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 15:49'! showCloseIcon closeIcon show! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/4/2013 15:48'! closeHalfOverIcon ^ Icons at: #closeHalfOverIcon ifAbsentPut: [ self closeHalfOverIconContents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/2/2013 16:35'! closeHalfOverIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777216 869400576 1523908608 1943339008 1943339008 1523908608 869400576 16777216 16777215 16777215 16777215 232259584 1624571904 2161311744 2161311744 2161311744 2161311744 2161311744 2161311744 1624571904 232259584 16777215 16777216 1624571904 3262657845 3429841466 2161311744 2161311744 2161311744 2161311744 3429841466 3262657845 1624571904 16777216 869400576 2161311744 3429841466 4283256141 3413129529 2161311744 2161311744 3413129529 4283256141 3429841466 2161311744 869400576 1523908608 2161311744 2161311744 3413129529 4283256141 3396352313 3396352313 4283256141 3413129529 2161311744 2161311744 1523908608 1943339008 2161311744 2161311744 2161311744 3396352313 4283256141 4283256141 3396352313 2161311744 2161311744 2161311744 1943339008 1943339008 2161311744 2161311744 2161311744 3396352313 4283256141 4283256141 3396352313 2161311744 2161311744 2161311744 1943339008 1523908608 2161311744 2161311744 3413129529 4283256141 3396352313 3396352313 4283256141 3413129529 2161311744 2161311744 1523908608 869400576 2161311744 3429841466 4283256141 3413129529 2161311744 2161311744 3413129529 4283256141 3429841466 2161311744 869400576 16777216 1624571904 3262657845 3429841466 2161311744 2161311744 2161311744 2161311744 3429841466 3262657845 1624571904 16777216 16777215 232259584 1624571904 2161311744 2161311744 2161311744 2161311744 2161311744 2161311744 1624571904 232259584 16777215 16777215 16777215 16777216 869400576 1523908608 1943339008 1943339008 1523908608 869400576 16777216 16777215 16777215) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/4/2013 15:48'! closeIcon ^ Icons at: #closeIcon ifAbsentPut: [ self closeIconContents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/2/2013 16:07'! closeIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2219658573 2555202893 16777216 16777215 16777215 16777216 2555202893 2219658573 16777215 16777215 16777215 16777215 2555202893 4283256141 2538359884 16777216 16777216 2538359884 4283256141 2555202893 16777215 16777215 16777215 16777215 16777216 2538359884 4283256141 2488159822 2488159822 4283256141 2538359884 16777216 16777215 16777215 16777215 16777215 16777215 16777216 2488159822 4283256141 4283256141 2488159822 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777216 2488159822 4283256141 4283256141 2488159822 16777216 16777215 16777215 16777215 16777215 16777215 16777216 2538359884 4283256141 2488159822 2488159822 4283256141 2538359884 16777216 16777215 16777215 16777215 16777215 2555202893 4283256141 2538359884 16777216 16777216 2538359884 4283256141 2555202893 16777215 16777215 16777215 16777215 2219658573 2555202893 16777216 16777215 16777215 16777216 2555202893 2219658573 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/4/2013 15:48'! closeOverIcon ^ Icons at: #closeOverIcon ifAbsentPut: [ self closeOverIconContents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/2/2013 16:06'! closeOverIconContents ^ Form extent: 12@12 depth: 32 fromArray: #(16777215 16777215 33488896 1708392448 3017015296 3872653312 3872653312 3017015296 1708392448 33488896 16777215 16777215 16777215 450363392 3218341888 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 3218341888 450363392 16777215 33488896 3218341888 4289940556 4290339683 4292018176 4292083712 4292083712 4292018176 4290339683 4289940556 3218341888 33488896 1708392448 4292083712 4290339683 4294704123 4290339683 4292018176 4292018176 4290339683 4294704123 4290339683 4292083712 1708392448 3017015296 4292083712 4292018176 4290339683 4294704123 4290338912 4290338912 4294704123 4290339683 4292018176 4292083712 3017015296 3872653312 4292083712 4292083712 4292018176 4290338912 4294704123 4294704123 4290338912 4292018176 4292083712 4292083712 3872653312 3872653312 4292083712 4292083712 4292018176 4290338912 4294704123 4294704123 4290338912 4292018176 4292083712 4292083712 3872653312 3017015296 4292083712 4292018176 4290339683 4294704123 4290338912 4290338912 4294704123 4290339683 4292018176 4292083712 3017015296 1708392448 4292083712 4290339683 4294704123 4290339683 4292018176 4292018176 4290339683 4294704123 4290339683 4292083712 1708392448 33488896 3218341888 4289940556 4290339683 4292018176 4292083712 4292083712 4292018176 4290339683 4289940556 3218341888 33488896 16777215 450363392 3218341888 4292083712 4292083712 4292083712 4292083712 4292083712 4292083712 3218341888 450363392 16777215 16777215 16777215 33488896 1708392448 3017015296 3872653312 3872653312 3017015296 1708392448 33488896 16777215 16777215) offset: 0@0! ! !Tab class methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/4/2013 15:48'! initialize "Initialization code for Tab class" Icons := Dictionary new.! ! !Tab class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 5/30/2013 15:05'! label: label icon: icon morph: morph ^ self new label: label; icon: icon; morph: morph; yourself! ! !Tab class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/4/2013 16:17'! label: label icon: icon morph: morph actions: aCollection ^ self new label: label; icon: icon; morph: morph; addActions: aCollection; yourself! ! !Tab class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/2/2013 17:16'! label: label icon: icon retrievingBlock: morph ^ self new label: label; icon: icon; retrievingBlock: morph; yourself! ! !Tab class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/4/2013 16:18'! label: label icon: icon retrievingBlock: morph actions: aCollection ^ self new label: label; icon: icon; retrievingBlock: morph; addActions: aCollection; yourself! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/4/2013 14:58'! menuIcon ^ Smalltalk ui theme windowMenuForm! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon1 ^ Icons at: #refreshIcon1 ifAbsentPut: [ self refreshIcon1Contents ]! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:51'! refreshIcon10 ^ Icons at: #refreshIcon10 ifAbsentPut: [ self refreshIcon10Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon10Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 24965223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 142401386 508995915 575841097 172795971 171609395 0 0 0 0 0 0 0 0 0 0 0 509259086 1935320144 2153357393 1918409809 1296271422 539520547 50431232 0 0 21606215 0 0 0 0 0 0 776641344 2573182807 3714821476 3664292451 2907804748 1144486963 67118080 106278475 356683834 323196477 88120119 0 0 0 87740209 861909334 2037101154 3497244267 4269653366 4285706860 3428424532 1463714105 289443895 676569674 1799588924 1799193396 574721081 0 0 191092052 980796521 2390409071 3766402420 4186226811 4252743795 4033259104 3209531208 1329168179 1028563268 2237310290 3495073867 3175911493 1162711879 119633438 91416929 846777708 2558576501 3800943236 4270507393 3917265012 3194398047 2722333759 2033218350 1143632933 1817354569 3362172510 4285312612 3814826587 1934002754 304509477 275369308 1652410738 3415199366 4287876234 4052206207 2925897567 1296534849 740581665 621232135 573074978 1885251668 3732651122 4286692985 3832458600 1984859975 186083605 477416806 2223361402 3969175947 4288204688 3614880623 1917818442 287276055 0 0 675714877 2439622753 3967926649 4286758521 3663962716 1749124155 287139352 594857318 2659305334 4069510022 4287021437 3295258721 1614710839 727693651 896978024 1164688223 2003481184 3463689836 4236427643 4168200297 2941621838 1261861682 100683264 493996646 2339881070 4001152372 4084248680 2790364488 1278640687 1416346977 2591869041 3246179186 3749494131 4219649914 4168660594 3361841499 1950516540 455238686 34165767 291223121 1751429979 3663570773 2958597968 1581287480 792431412 1719717238 3633303685 4237741966 4287613063 4001217398 3160844128 1766296129 623998507 83905280 0 90095955 810788938 1565762379 1196399687 304839716 243131760 1921372028 3650146183 4271164556 4085628798 2993334626 1431147334 472870955 16777216 0 0 0 89504329 274249039 40821860 0 210300795 1501153391 2843920249 3531390068 3228084576 2102301767 522614559 0 0 0 0 0 0 0 0 0 39777866 443994473 1165278825 1533521502 1700109134 1144751925 187403302 0 0 0 0 0 0 0 0 0 0 41145701 75955315 206613319 240495952 272141619 52661788 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:42'! refreshIcon1Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1918411854 0 0 0 0 0 0 0 0 0 74170463 224573016 358395218 425108812 424581958 424120639 3796998729 2219545155 0 0 0 0 0 0 0 258785377 1483455585 3077815657 4033919079 4285248097 4284787292 4284326485 4285837932 4150568029 1949990196 84164352 0 0 0 0 141673060 2036971870 3984639095 4288007307 4288598421 4288992667 4288664983 4288336274 4287679624 4286298997 3846341437 924803099 0 0 0 0 1248311133 4017798768 4288729751 4288664215 4287152768 4284917343 4284193876 4283733070 4285048929 4216887635 2368696107 269899029 0 0 0 0 2774576726 4287613062 4288664471 4235966323 3528233285 1480558136 1026585898 1042836516 3929042988 2536270631 0 0 0 0 0 0 3948323406 4283800909 4283405639 3510995518 1044021042 0 0 0 2216779550 408331084 1465887829 1347788876 1330550598 1413909823 0 0 1632474693 1631948094 1631487032 1698134833 556164899 1685243238 225625702 0 0 475571792 3075645002 4148991300 4165241661 4114448694 0 0 0 0 0 0 1769128807 3815685475 761508440 424779592 642816840 3126041931 4151225958 4288139152 4286626937 3208346934 0 0 0 0 73578836 1567670373 4001810556 4287613573 4285576806 4284919134 4284655450 4286364020 4287678856 4287219330 4267285075 1798336811 0 0 0 0 560380762 3530866026 4288270224 4289255071 4289058461 4288664728 4288270738 4287350659 4285970287 4200373590 2637131819 371089436 0 0 0 0 157332566 1919332444 4084906610 4286824059 4284917599 4284325462 4283864913 4216295241 3494151486 2133749289 538729239 0 0 0 0 0 0 35359503 2102697036 3947729734 1312786232 1043626541 1026322727 891709472 572415514 169367061 0 0 0 0 0 0 0 0 39363658 1950056501 188581687 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon2 ^ Icons at: #refreshIcon2 ifAbsentPut: [ self refreshIcon2Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:42'! refreshIcon2Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 74831464 0 0 0 0 0 0 0 0 0 0 0 0 375502935 1013430619 1500298594 1433124192 963493219 0 0 0 0 0 0 0 0 0 0 1112975436 2574170212 3950690160 4102539134 3951675263 3849829998 2540221279 357737288 0 0 157067857 0 0 0 0 475439950 3998720847 4286364532 4288796057 4288992411 4288598677 4288598421 4286627702 3630279257 810851916 843749186 1884923215 0 0 0 0 894211396 2504890181 4132411207 4285575016 4236032116 4202346354 4286363765 4288532885 4287219329 4284392278 3982402390 2521535555 34755853 22126153 0 0 0 624854583 1799325241 3191768375 2420673856 2302576183 2588906569 4284193876 4286823804 4287810954 4285969519 2992151121 0 0 0 0 0 0 167784448 1060139819 438988836 0 420501771 1396342324 3998520654 4286167154 4269324659 3209070400 405170464 0 0 0 71615025 610843741 981191535 1651622758 2372779873 578474350 0 740056601 3928977196 3846801732 3376645183 2452911407 369510403 0 0 0 627686494 3413359977 3951741568 4136159614 3178347878 87208481 0 1075533848 1395222820 1093430566 285753864 185486606 34230791 0 0 0 811576660 3564813425 4288598421 4288795544 4252022374 1885251669 33576192 157861469 493140058 1532996693 409120856 0 0 0 0 0 390698305 3295128415 4270178429 4288006542 4288467605 4285378917 3143476053 3142884940 3277562707 3612055363 2051708226 777034312 71930178 0 0 0 28374419 3058011455 3042154572 3831209556 4286034800 4288270738 4286890364 4253467006 4287021439 4286692985 4266102080 3024127545 440831295 0 0 0 154367789 1295613747 354842143 1043692590 3058404934 4284193622 4286232690 4286627448 4287153537 4286363765 3948320592 2553970227 0 0 0 0 0 0 0 101601033 605445393 2017230134 3460597054 3629158730 3645541188 3108275775 1814916904 23188057 0 0 0 0 0 0 0 0 0 167781888 589785122 1075731994 907960090 337535772 136076824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon3 ^ Icons at: #refreshIcon3 ifAbsentPut: [ self refreshIcon3Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:44'! refreshIcon3Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 592553543 660648789 341949526 190297161 0 0 0 0 0 0 0 0 0 0 290297413 1414569032 4032406865 3128146282 3010706536 1701887589 727891288 44105614 0 0 0 0 0 0 0 0 56474195 1665897795 4048919885 4287350148 4288139406 4035496062 2424030065 778682206 22654542 0 0 0 0 0 0 0 0 893157942 3242823746 4285772395 4288335249 4288664470 4186359421 2473507429 0 0 0 0 0 0 140494417 375898459 124311385 218511878 2301917998 3142686026 3983913837 4287349891 4288532628 3530930795 610053202 0 0 0 0 155625272 1231862114 3279142249 1837288311 1013365595 876381237 909014055 2336196408 3698043748 4288138639 4286167663 1868014415 16843010 0 0 0 373856064 2977085033 4170173062 4287614085 3112159092 2305671009 162594719 505703967 2857144646 4286166129 4287087999 2505810515 389779508 324709455 0 0 1867223877 3782061926 4288138383 4288795544 3916807530 1131265889 114294716 100663296 1413185333 4050496103 4287547783 4284852573 2941820751 1901700431 0 490175793 2218690104 3142949454 4219451768 4288467349 3681465444 625909317 0 588337167 2939055915 4284062291 4287088000 4269192303 3059063374 709267774 0 54033970 185162499 1144948535 3764297815 4287415685 4268667494 1398382929 0 991977244 2351655720 3746072643 4133856864 3797654870 1733201991 0 0 0 0 471951643 2991361863 4286692475 4237019011 3445729113 1968217415 510114652 994282554 858483239 2369288499 2352313904 371287323 0 0 0 0 83886080 1799126838 4150173272 4286824827 4270244222 3849302375 3259996998 1616356942 40819295 100674560 370694932 33554432 0 0 0 0 0 892169000 3376710974 4151159910 4287219330 4287284611 4100763492 2202703170 341683540 0 0 0 0 0 0 0 0 83891200 1311731754 3192424770 4032929882 4252809589 4284128339 3544221497 877171009 0 0 0 0 0 0 0 0 0 268451840 874274328 2067365173 2789311036 3058338884 2587524915 491163199 23776609 0 0 0 0 0 0 0 0 0 33569792 16777216 488464665 0 221411115 0 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon4 ^ Icons at: #refreshIcon4 ifAbsentPut: [ self refreshIcon4Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:45'! refreshIcon4Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 89234760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 759994436 1381278284 592619592 122466366 0 0 0 0 0 0 0 156416323 308789596 71948342 0 239308347 1850513220 4166492751 2959716960 913029984 0 0 0 0 0 0 507481656 1651357027 2473835625 1819328102 73397069 405169955 2739310143 4285378406 3951806595 2943663465 744930394 0 0 0 255295281 1547469878 2790825554 3816405361 4153330309 2928135037 829539942 1009348388 3091565374 4285969518 4288401554 3968518528 1618198888 206683720 0 0 0 1362854965 3243744080 4237017988 4288730007 4035693441 2088223852 859472692 2151843643 3933384810 4288532628 4187279243 2340144241 342870883 0 0 0 471756567 3025968724 4287349636 4254847122 3866475882 2305933925 795787617 1093103904 3311313239 4270638468 4287876234 2910174828 476495964 0 0 0 1194818610 3663502934 4270704262 4118067052 1784983641 410110307 0 522613025 3126303569 4187080841 4220504454 2507061348 0 0 0 119556892 1765572406 4000230505 4287284611 3446386787 558536770 0 83886080 808153381 3344867159 4287021181 4235836015 1532996438 34968584 0 0 286872086 2537587002 4284983136 4253664897 3462571866 860724292 369376770 1528848670 2822405174 4067273319 4287350659 3161437031 1045141827 0 0 0 269962772 2453569336 4134316901 4287284610 3866473837 1784062797 557548084 2284546856 4031417157 4286298740 4286824827 3512574805 507745595 38385723 0 0 251741185 1949858354 3965558103 4287219074 4185898359 3327171655 1230283593 1110800432 3478097994 4285706860 4252349295 3529220179 2237178446 459255892 0 0 67120128 924803868 3058601800 4236032373 4285575529 3025904467 1045997903 151009792 2201384753 3410792008 2790758737 1817023558 793680965 59043444 0 0 0 17958931 1697739821 3360591688 4065235527 2906753337 425306448 0 471950109 1261136934 490241073 0 0 0 0 0 0 0 167787008 1028098369 2637922356 1430292537 223716686 0 33564416 16777216 0 0 0 0 0 0 0 0 0 0 288849456 156607054 0 0 0 0 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:50'! refreshIcon5 ^ Icons at: #refreshIcon5 ifAbsentPut: [ self refreshIcon5Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:46'! refreshIcon5Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36733993 288717871 0 33571840 0 0 0 0 0 0 0 0 0 0 0 0 54034738 1413055027 1900909896 1298312025 1064024160 258591069 0 0 0 0 0 0 0 0 0 0 218126080 2135395904 3479414108 3782916722 3179135348 1718533476 124705120 0 40555870 273719368 0 0 0 0 0 371617057 1228900153 3059588949 4186357631 4288269969 3885026951 1954531957 16842496 170619686 1112250179 1615961673 626173001 0 0 0 472672807 1715240758 3428621911 4118723191 4287941260 4288467603 3968584577 1551747698 589788450 1547206706 3075578186 4250510417 1751034965 0 0 219368721 2084141620 3613039444 4286298230 4270441858 4101355629 3396713578 3061105000 1449769310 1194161192 3158871617 4201557863 4118855801 2389949546 0 50331648 1210871335 3125842250 4285575017 4253664897 3715019110 1784851033 811446096 880135016 762299490 1446280237 3496322653 4287349890 4153855885 2926886249 0 184566016 1714780208 3932003671 4286955902 4135500918 2573116757 372344104 0 0 167789824 1816299835 3782258537 4288532628 4254256777 2306721138 0 0 2084470841 3983584873 4287219330 3917002864 1817683022 405171231 789663504 538465812 977044534 3143146578 4119380608 4287941772 3616328578 1618396011 0 151341316 2000321845 4016284509 4285706859 3663570261 1917688899 976056617 2469162281 2839182390 3311312216 4017796722 4287744392 4019112325 2843000427 712033637 0 0 994609987 3527904064 3763180358 2337710158 978691915 1043626031 3561392194 4217808480 4286495351 4236887424 4185438574 2490349414 862500446 34530304 0 0 456884788 2100985907 1899988791 542417739 39843158 1345483566 3696793938 4286298740 4286824827 3614290278 1952557400 659333188 0 0 0 0 0 189832265 290100547 33554431 16777216 1160671530 3309997126 3865684324 4016679522 2656476750 254117662 0 0 0 0 0 0 0 0 0 16790528 505241111 1194883634 1901172043 2270337354 2287510094 458926927 0 0 0 0 0 0 0 0 0 0 0 33570304 0 440964160 391621196 141676900 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:51'! refreshIcon6 ^ Icons at: #refreshIcon6 ifAbsentPut: [ self refreshIcon6Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:47'! refreshIcon6Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238519345 35020813 0 0 0 0 0 0 0 0 0 0 34619404 67128832 50331648 455899943 1446741045 608670018 0 0 0 0 0 0 0 34147080 286544913 1009544488 1144354607 1329299253 1245743161 2219479363 2908133967 2052891221 593275729 0 0 0 0 0 0 908289567 2084536634 3041758791 3545930580 3680740446 3664620903 3782718319 4135631737 3766205299 2004204651 308921436 0 0 0 0 640775725 2336589632 3898383446 4235440492 4286561656 4286955903 4287218817 4288007053 4288532885 4069707401 2759640179 862633824 0 0 0 220753701 1983478836 3697846113 4286692986 4287087487 4035035257 3715084903 3463624298 3917266546 4153593480 3565997443 1820314741 209575792 0 0 0 458068297 2722860613 4251428705 4286496118 3950623089 2640554586 1364566092 911779661 1701558879 3010773352 1786431343 693545037 83886080 154961973 90425688 18831128 876249651 2990572856 3847197768 3579683925 2740560976 1145608255 167783680 0 343463274 947572844 1112316484 1244427559 1698399028 1850381635 1347394887 0 256546115 1429963572 1598657345 1532602192 1263377987 959345706 1260215579 385890048 0 457018420 1479900462 3058734408 3814695512 4099843414 3260457806 0 0 123843675 91934319 33554407 825259563 2335931703 2989914163 1999992625 993953592 1950649150 3009323352 4001085299 4287087231 4085498492 2473243746 0 0 0 0 488727837 2118288445 3898120530 4217742687 3798377568 3547048292 3815944299 4136092031 4271821205 4288205199 3531851128 1567669606 0 0 0 101733130 908815654 3192425284 4151291753 4286759035 4286955901 4287153023 4270967176 4287875979 4069707145 3448491137 2071446124 392807517 0 0 0 0 489253666 1968017479 3664226402 4134711914 3647844710 3530864234 3497507437 3263349881 2843328879 1551352940 527156831 53856803 0 0 0 0 0 625709637 2186451274 2891489360 1431412041 978493513 979086675 778614622 594199136 225431905 0 0 0 0 0 0 0 53183778 693214791 1515889999 222733371 0 0 0 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:51'! refreshIcon7 ^ Icons at: #refreshIcon7 ifAbsentPut: [ self refreshIcon7Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:48'! refreshIcon7Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33561088 0 0 0 0 0 0 0 0 0 0 0 0 0 287730978 607287342 1127051304 1227977773 841903913 471818779 16784128 0 0 0 0 0 0 0 71471676 441357130 1899658805 2773915472 3260388943 3377829199 3008204359 1967556672 909079337 169762073 0 20350256 37198896 0 0 0 507217460 2168489272 3528890448 4252020586 4269915770 4286232434 4168463470 3865421151 2774178900 1279363642 993625395 1026916656 305694770 0 0 0 591366456 2453702200 3947926857 4218598250 4269981818 4119184253 4236427386 4286955903 4101617522 3446582374 2975571539 2253230918 592090181 0 0 0 173649746 1011257918 2169806412 3076236626 3043470686 2657397595 2993336162 3799365485 4253861508 4220569481 4135697786 3010244196 844735824 0 0 0 0 0 559722066 1313775684 1128502074 608473147 726309440 1953149792 3900555123 4288401810 4237676173 3279863925 1114750054 0 0 0 101932045 404578841 825390638 1446411058 1294494245 553926148 0 845659738 2960572779 3784166787 3566063236 2658977139 829342052 0 0 0 505307416 2067562296 2974650184 3478032457 2973136947 1142906909 0 361228663 1618200167 1702545518 1467861875 779997810 291816536 0 0 0 758808116 2857341514 4100894312 4285509481 3781140057 1967425087 472348961 456952884 976980274 1077379889 506032931 0 0 0 0 0 575377989 2757665112 4168266348 4286890620 4219320693 3563825508 2572786771 2286719559 2387382596 2638777921 1832879928 843091001 41418599 0 0 0 508336195 2253560650 3412306011 3664621926 4169318265 4270572674 4118854777 3900750969 4001216885 4084314217 3915227733 2404556106 776970055 58061673 0 0 274049353 1532667215 1263508550 1499112786 3044128103 3934569082 4271098763 4288336018 4288467347 4287481989 4051155312 3310921040 894608202 89699664 0 0 0 208323932 0 221942066 928623697 2256125807 3330459000 3616263042 3683634821 3481585273 2490809965 1315025240 257142088 0 0 0 0 0 0 0 72724301 392215381 1198703463 1517732971 1584973421 1198768743 661439073 33604352 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:51'! refreshIcon8 ^ Icons at: #refreshIcon8 ifAbsentPut: [ self refreshIcon8Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:48'! refreshIcon8Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121476406 490769208 424580170 640578858 236610840 102324245 0 0 0 0 0 0 0 0 0 39634005 658475576 2168357685 2739703622 2639105864 1951174214 1093431335 337733150 0 0 0 0 0 0 0 0 44105625 960663098 3074854207 4149976404 4235309163 3731334752 2974781513 1429896245 303520019 0 0 0 0 0 0 17466368 0 491954761 2287312717 3865685345 4286627448 4286824315 4016876132 2941095495 1060469040 33563904 0 0 0 0 101208064 438462237 337009682 323590977 1381344843 2875041620 3614881901 4119250046 4286495862 3781600864 1850182209 303059978 0 0 0 54894397 708345138 2034205242 2135065918 1312455989 1178043441 1145476668 1851565651 3161371238 4169318523 4152014708 2740624468 640777003 0 0 0 273126975 1817549135 3462307928 3831669597 3394080840 1949266476 739727124 355040032 1734453848 3799365485 4286824572 3446582630 1531613506 556563239 70550575 89504327 978295622 2774311253 4134711916 4286167154 3999244121 2503309106 621233415 0 1113764439 3396975727 4287744393 4018388348 3042811733 1698859836 473269295 174242644 1549444431 2623316819 3899502950 4253336188 3933253225 2000979519 252401416 83886046 1450164835 3615343475 4271624594 4287613064 3446780265 1683200332 289969988 46202788 358395728 994876227 2590486111 4152541049 4068259700 2589695317 641239090 358266957 1567868519 2844118139 3918647175 3868117893 2843196014 828090450 56409427 0 0 205297460 1885777756 3833577077 4287349890 3581063532 2320339784 1346078003 1061261625 1315946596 2022035324 2558313843 1366737515 292405089 0 0 0 54508600 1013298780 3145777782 4254256010 4220372613 3715741297 2891422287 1916568886 539389728 327343990 561368681 308988255 0 0 0 0 0 342016086 2239546481 3784034945 4238070419 4287875722 4118000235 3042154571 1060865588 16777216 56081483 0 0 0 0 0 0 107733085 997245796 2340538487 3650080389 4136684679 4269850489 3781141847 1699715911 106808146 0 0 0 0 0 0 0 0 110034812 863028837 1736230768 2743059572 2977348718 3344607058 1414635593 257406030 0 0 0 0) offset: 0@0! ! !Tab class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 6/9/2013 02:51'! refreshIcon9 ^ Icons at: #refreshIcon9 ifAbsentPut: [ self refreshIcon9Contents ]! ! !Tab class methodsFor: 'icons-contents' stamp: 'BenjaminVanRyseghem 6/9/2013 02:49'! refreshIcon9Contents ^ Form extent: 16@16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289575996 440372534 155686977 0 0 0 0 0 0 0 0 36936489 67128576 67528960 0 323524927 1396738360 2218755126 1196134469 371815206 33575424 0 0 0 0 89638474 223059779 809798206 1211595570 573009187 67124992 575906634 2672398658 3746731595 3109262669 1665304126 219965722 0 0 0 157664086 928161864 1817615695 2656870230 3008533837 2017493820 540507697 1029089356 2925504599 4285246819 4201820524 2824510035 1077048877 118840593 0 0 409253207 1901699919 3126961753 4117868907 4083919974 3243414605 1396277044 1296669248 2925504854 4068260979 4286758522 3697517148 1950384955 321021983 0 0 139703111 1078893636 3261574496 4269653366 4269060973 3612447564 1898934828 909147433 1868342866 3632053619 4287021950 3983256163 2303100992 488924704 0 0 0 1214032211 3144988267 4270112891 3933253225 2722333759 1293901597 335556864 1062379337 3178148454 4236427643 4016876389 2336852803 488991521 0 0 223787853 1684780641 3800022645 4236492411 3177752417 1262124853 167776000 0 1046063183 3228677481 4286692986 3765415529 1816627777 253648920 0 0 291422802 2323432049 3985426563 4186489472 2909054558 658082099 46332305 678544995 2003876453 3766205554 4270113149 3362302305 1246005823 83890432 0 0 661702499 2625685109 4170304648 4203661190 3160909921 1379567156 744470611 1853409644 3565012083 4204055948 4186555010 2942937441 892896305 35016724 0 0 511103337 2273429879 3952529805 4288138895 3681923693 2152238657 1061130039 1971178099 3700412293 4288270481 4152935041 3109986390 1346341177 153255454 0 0 308922717 1652476530 3633237636 4287810441 4151751789 2723058502 1043496236 1182123370 2827669377 3817786501 3548101491 2455741272 1212123705 254903339 0 0 0 846645864 2692793717 3867460732 4151226471 2639304264 640317220 277145719 1568393586 2172372081 1802680424 844275274 273588554 54040627 0 0 0 208264538 1131594088 2708322149 3579553363 1867619657 289311798 31260606 275698785 494127719 276287082 73979227 0 0 0 0 0 0 224640601 844869458 1431610443 760259400 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !Tab methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/4/2013 15:12'! actionOffset ^ 4! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/4/2013 14:40'! actions ^ actions! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:08'! actions: aCollection actions := aCollection. self triggerEvent: #actionsChanged with: self! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 16:17'! addAction: anAction actions add: anAction! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 16:17'! addActions: aCollection actions addAll: aCollection! ! !Tab methodsFor: 'icons-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 19:49'! addActionsToIcon closeIcon on: #mouseEnter send: #mouseEnterIcon to: self; on: #click send: #close to: self; on: #mouseLeave send: #mouseLeaveIcon to: self! ! !Tab methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 6/2/2013 18:29'! addIcon self addMorph: closeIcon fullFrame: (LayoutFrame identity bottomFraction: 0; leftFraction: 1; topOffset: 8; "tab height : 26px, icon height: 12 px -> (26 - 12 / 4) + 1" leftOffset: self iconRightOffset negated - 12; rightOffset: self iconRightOffset negated; bottomOffset: 20; "8 + 12" yourself)! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/30/2013 13:08'! addLabel self addMorph: label fullFrame: (LayoutFrame identity topFraction: 1; leftOffset: self labelRightOffset; topOffset: (label height negated - self labelBottomOffset); yourself) ! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/8/2013 15:31'! addRefreshMenuItemOn: aMenu "I have a block for retrieving my contents, so I install a menu action for this" retrievingBlock ifNil: [ ^ self ]. aMenu addLine. aMenu add: 'Refresh content' target: self selector: #refreshContent! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:27'! addToSelection self triggerEvent: #tabAddedToSelection with: self. "No need to change here since the toolbar I belong to will do it"! ! !Tab methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 6/2/2013 18:19'! backgroundColor ^ state backgroundColor! ! !Tab methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 5/30/2013 13:14'! borderColor ^ Color gray! ! !Tab methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 5/30/2013 13:31'! buildBorderVertices ^ state buildBorderVertices! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/2/2013 18:38'! buildLabel: text withIcon: icon ^ (TabLabelItem tab: self) morph: text asMorph; icon: (AlphaImageMorph new image: icon); yourself! ! !Tab methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 5/30/2013 13:37'! buildVerticesFrom: borderVertices ^ state buildVerticesFrom: borderVertices! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:18'! close closeable ifFalse: [ ^ self ]. self delete! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 12:24'! closeable ^ closeable! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:56'! closeable: anObject closeable := anObject. anObject ifTrue: [ self showCloseIcon ] ifFalse: [ self hideCloseIcon ]! ! !Tab methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/2/2013 16:11'! defaultBounds ^ 0@0 corner: 100@26! ! !Tab methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 5/30/2013 12:25'! defaultIcon ^ Smalltalk ui icons blankIcon! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 02:55'! delete super delete. retrievingProcess terminate. self triggerEvent: #tabDeleted with: self! ! !Tab methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:56'! drawOn: aCanvas | borderVertices vertices | borderVertices := self buildBorderVertices. vertices := self buildVerticesFrom: borderVertices. aCanvas drawPolygon: vertices color: self backgroundColor borderWidth: 0 borderColor: Color transparent. borderVertices overlappingPairsDo: [ :start :end | aCanvas line: start to: end width: 1 color: self borderColor. ]! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:16'! enabled ^ state enabled! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 13:23'! enabled: aBoolean (state isEnabledMatchingTheState: aBoolean) ifTrue: [ ^ self ]. state := state newStateForEnabled: aBoolean. label enabled: aBoolean. self changed! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 16:20'! extraSpaceForActions | space offsets | space := 0. offsets := 1. self hasMenu ifTrue: [ offsets := offsets +1. space := space + self menuIcon width ]. self actions do: [ :each | space := space + each icon width. offsets := offsets +1 ]. ^ space + (offsets * self actionOffset)! ! !Tab methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/30/2013 14:14'! handlesMouseDown: event ^ true! ! !Tab methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/30/2013 14:15'! handlesMouseUp: event ^ true! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 14:42'! hasActions ^ actions notEmpty! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:25'! hasMenu ^ menu notNil or: [ retrievingBlock notNil ]! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 15:54'! hideCloseIcon closeIcon hide! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 02:03'! icon ^ label icon! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 15:17'! icon: anIcon anIcon ifNil: [ label icon: nil ] ifNotNil: [ label icon: (AlphaImageMorph new image: anIcon) ]! ! !Tab methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/2/2013 16:17'! iconRightOffset ^ 10! ! !Tab methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 01:49'! initialize "Initialization code for Tab" super initialize. self changeProportionalLayout. state := TabEnabled tab: self. closeable := true. label := self buildLabel: 'tab' withIcon: self defaultIcon. closeIcon := AlphaImageMorph withForm: self class closeIcon. morph := nil. actions := OrderedCollection new. retrievingSemaphore := Semaphore new. self addLabel. self addIcon. self addActionsToIcon.! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 12:24'! label ^ label! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/30/2013 15:14'! label: aString label morph: aString asMorph! ! !Tab methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 6/2/2013 16:22'! labelBottomOffset ^ 5! ! !Tab methodsFor: 'private-constants' stamp: 'BenjaminVanRyseghem 5/30/2013 15:03'! labelRightOffset ^ 12! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/8/2013 15:28'! menu | newMenu | newMenu := MenuMorph new defaultTarget: self. menu ifNotNil: [ menu cull: newMenu ]. self addRefreshMenuItemOn: newMenu. ^ newMenu! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 15:54'! menu: aMenu menu := aMenu! ! !Tab methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 6/4/2013 14:54'! menuIcon ^ self class menuIcon! ! !Tab methodsFor: 'private-tab label' stamp: 'BenjaminVanRyseghem 6/2/2013 18:43'! modifyClippingBounds: clippingBounds | rightOffset | rightOffset := -10. closeIcon visible ifTrue: [ rightOffset := rightOffset - 14 ]. ^ clippingBounds expandBy: (0@0 corner: rightOffset@0)! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/9/2013 03:06'! morph ^ morph! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 01:47'! morph: anObject morph := anObject. self triggerEvent: #tabRefreshed with: self! ! !Tab methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/30/2013 14:15'! mouseDown: event self flag: 'ToDo: Add drag'! ! !Tab methodsFor: 'icons-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 19:49'! mouseEnterIcon closeable ifFalse: [ ^ self ]. fadeOut ifNotNil: [ fadeOut terminate ]. closeIcon image: self class closeOverIcon! ! !Tab methodsFor: 'icons-actions' stamp: 'BenjaminVanRyseghem 6/2/2013 19:49'! mouseLeaveIcon closeable ifFalse: [ ^ self ]. fadeOut ifNotNil: [ fadeOut terminate ]. fadeOut := [ closeIcon image: self class closeHalfOverIcon. 50 milliSeconds asDelay wait. closeIcon image: self class closeIcon ] fork! ! !Tab methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 6/10/2013 17:31'! mouseUp: event (event commandKeyPressed or: [ event controlKeyPressed ]) ifTrue: [ self toggleSelection ] ifFalse: [ event shiftPressed ifTrue: [ self selectToMe ] ifFalse: [ self selected: true ] ]! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/9/2013 21:06'! refreshContent morph := nil. self triggerEvent: #tabEmptyContents with: self. "Trigger the update" self softRetrieveMorph.! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:29'! removeFromSelection self triggerEvent: #tabRemovedFromSelection with: self. "No need to change here since the toolbar I belong to will do it"! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 20:49'! retrieveMorph: aBlock "This is a hard request. The result is blocking contrary to softRetrieveMorph. Late binding so the morph may be built only on demand" morph ifNotNil: [ aBlock value: morph. ^ nil ]. retrievingSemaphore isSignaled ifFalse: [ self softRetrieveMorph ]. ^ [ retrievingSemaphore wait. aBlock value: morph ] fork! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/8/2013 15:17'! retrievingBlock: anObject retrievingBlock := anObject. self softRetrieveMorph.! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:32'! selectToMe self triggerEvent: #tabSelectTo with: self. "No need to change here since the toolbar I belong to will do it"! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 14:16'! selected ^ state selected! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 14:13'! selected: aBoolean (state isSelectedMatchingTheState: aBoolean) ifTrue: [ ^ self triggerEvent: #tabResetSelection with: self ]. state := state newStateForSelected: aBoolean. aBoolean ifTrue: [ self triggerEvent: #tabSelected with: self. self showCloseIcon ]. "No need to change here since the toolbar Ibelong to will do it"! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/4/2013 15:54'! showCloseIcon closeable ifTrue: [ closeIcon show ]! ! !Tab methodsFor: 'private-tab label' stamp: 'BenjaminVanRyseghem 6/2/2013 19:09'! showIconTreshold ^ closeIcon visible ifTrue: [ 54 ] ifFalse: [ 40 ]! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/10/2013 17:26'! silentlySelected: aBoolean (state isSelectedMatchingTheState: aBoolean) ifTrue: [ ^ self ]. state := state newStateForSelected: aBoolean. aBoolean ifTrue: [ self showCloseIcon ]. "No need to change here since the toolbar Ibelong to will do it"! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 02:52'! softRetrieveMorph | rotating oldIcon | "Like retrieveMorph but done in a separated process" morph ifNotNil: [ ^ self ]. retrievingProcess ifNotNil: [ "The retrieving process is already running, let's wait for its result" retrievingProcess isTerminated ifFalse: [ ^ self ] ]. oldIcon := self icon ifNotNil: [ :i | i image ]. retrievingProcess := [ [ "set rotating icon" self icon: self class refreshIcon1. rotating := [ | i | i := 1. [ true ] whileTrue:[ i := (i \\ 10)+1. 100 milliSeconds asDelay wait. self icon: (self class perform: ('refreshIcon', i asString) asSymbol) ] ] fork. "compute time consuming data" self morph: retrievingBlock value ] ensure: [ rotating terminate. self icon: oldIcon. retrievingSemaphore signal ] ] fork.! ! !Tab methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/10/2013 17:07'! toggleSelection self selected ifTrue: [ self removeFromSelection ] ifFalse: [ self addToSelection ]! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/2/2013 19:53'! updateShowIcon (self selected not and: [ self width < 100 ]) ifTrue: [ self hideCloseIcon ] ifFalse: [ self showCloseIcon ]! ! !SequenceableCollection methodsFor: '*Tabs' stamp: 'BenjaminVanRyseghem 6/2/2013 17:31'! lastIfAbsent: aBlock ^ self at: self size ifAbsent: aBlock! ! !TabLabelItem commentStamp: '' prior: 39772118! I am a special label morph for tabs. This way I can control which of my submorphs to show according to the tab size! !TabLabelItem class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 6/2/2013 18:37'! tab: tab ^ self new tab: tab; yourself! ! !TabLabelItem methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 20:06'! clipSubmorphs ^ true! ! !TabLabelItem methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/2/2013 18:41'! clippingBounds "Return the bounds to which any submorphs should be clipped if the property is set" ^ tab modifyClippingBounds: super clippingBounds! ! !TabLabelItem methodsFor: 'drawing-private' stamp: 'BenjaminVanRyseghem 6/2/2013 19:15'! computeSubmorphsToDraw owner width < tab showIconTreshold ifTrue: [ (storedIcon isNil and: [ icon notNil ]) ifTrue: [ storedIcon := icon. self removeMorph: icon ]. ^ { morph } ]. storedIcon ifNotNil: [ self addMorphFront: storedIcon. storedIcon := nil ]. ^ self submorphs! ! !TabLabelItem methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/30/2013 20:12'! drawSubmorphsOn: aCanvas "Display submorphs back to front" | drawBlock submorphsToDraw | submorphs isEmpty ifTrue: [ ^ self ]. submorphsToDraw := self computeSubmorphsToDraw. drawBlock := [ :canvas | submorphsToDraw do: [ :m | canvas fullDrawMorph: m ] ]. self clipSubmorphs ifTrue: [ aCanvas clipBy: (aCanvas clipRect intersect: self clippingBounds ifNone: [ ^ self ]) during: drawBlock ] ifFalse: [ drawBlock value: aCanvas ]! ! !TabLabelItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/30/2013 20:00'! icon: anObject icon ifNotNil: [ self removeMorph: icon ]. icon := anObject. icon ifNotNil: [ self addMorphFront: icon ]! ! !TabLabelItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/2/2013 18:37'! tab: anObject tab := anObject! ! "Tabs"! "Tabs-Support"! ----End fileIn----! ----QUIT----an Array(11 June 2013 9:55:05 am) Pharo.image priorSource: 6204847! ----STARTUP----an Array(11 June 2013 10:01:32 am) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 June 2013 10:01:32 am) Pharo-30192.image priorSource: 6299235! ----STARTUP----an Array(11 June 2013 10:18:53 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/11/2013 10:16' prior: 39759578! commentForCurrentUpdate ^ '10882 Undeclared ivar string in ZnInvalidUTF8 https://pharo.fogbugz.com/f/cases/10882 10881 two tests failing in MCMczInstallerTest due to missing accessor https://pharo.fogbugz.com/f/cases/10881'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/11/2013 10:16'! script292 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.155.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.833.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/11/2013 10:16'! update30193 "self new update30193" self withUpdateLog: '10882 Undeclared ivar string in ZnInvalidUTF8 https://pharo.fogbugz.com/f/cases/10882 10881 two tests failing in MCMczInstallerTest due to missing accessor https://pharo.fogbugz.com/f/cases/10881'. self loadTogether: self script292 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ZnInvalidUTF8 commentStamp: '' prior: 39629063! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! !MczInstaller methodsFor: 'accessing' stamp: 'md 6/11/2013 10:00'! zip ^zip! ! !ZnInvalidUTF8 commentStamp: '' prior: 39864491! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! "System-Installers"! "Zinc-Character-Encoding-Core"! ----End fileIn----! ----QUIT----an Array(11 June 2013 10:18:58 am) Pharo.image priorSource: 6299475! ----STARTUP----an Array(11 June 2013 10:25:21 am) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 June 2013 10:25:21 am) Pharo-30193.image priorSource: 6310611! ----STARTUP----an Array(11 June 2013 3:29:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/11/2013 15:27' prior: 39854208! commentForCurrentUpdate ^ '10546 Matrix class comment refers to Array2D which does not exist anymore https://pharo.fogbugz.com/f/cases/10546 10875 CleanUp in PolyMorph https://pharo.fogbugz.com/f/cases/10875 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/11/2013 15:27'! script293 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.836.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.187.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.31.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.844.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/11/2013 15:27'! update30194 "self new update30194" self withUpdateLog: '10546 Matrix class comment refers to Array2D which does not exist anymore https://pharo.fogbugz.com/f/cases/10546 10875 CleanUp in PolyMorph https://pharo.fogbugz.com/f/cases/10875 '. self loadTogether: self script293 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Matrix commentStamp: '' prior: 25362523! I represent a two-dimensional array. Structure: nrows : a non-negative integer saying how many rows there are. ncols : a non-negative integer saying how many columns there are. contents : an Array holding the elements in row-major order. That is, for a 2x3 array the contents are (11 12 13 21 22 23). Element-wise matrix arithmetic works; you can freely mix matrices and numbers but don't try to mix matrices and arrays (yet). Matrix multiplication, using the symbol +* (derived from APL's +.x), works between (Matrix or Array) +* (Matrix or Array). Don't try to use a number as an argument of +*. Matrix * Number and Number * Matrix work fine, so you don't need +* with numbers. ! !UITheme methodsFor: 'fill-styles-buttons' stamp: 'BenjaminVanRyseghem 3/18/2013 23:08'! checkboxButtonLabelNormalFillStyleFor: aCheckboxButton label: aLabel "Return the selected disabled checkbox button fillStyle for the given button." ^ aLabel color! ! !UITheme methodsFor: 'morph creation' stamp: 'NicolasPetton 3/18/2013 19:14'! newScrollBarDownButtonFor: aScrollbar ^ BorderedMorph newBounds: (aScrollbar innerBounds bottomRight - aScrollbar buttonExtent extent: aScrollbar buttonExtent)! ! !UITheme methodsFor: 'morph creation' stamp: 'NicolasPetton 3/18/2013 19:13'! newScrollBarUpButtonFor: aScrollbar ^ BorderedMorph newBounds: (aScrollbar innerBounds topLeft extent: aScrollbar buttonExtent)! ! !UITheme methodsFor: 'morph creation' stamp: 'BenjaminVanRyseghem 3/22/2013 16:02'! newWindowHeaderFor: aWindow ^ (AlignmentMorph newSpacer: Color transparent) vResizing: #spaceFill; layoutPolicy: ProportionalLayout new! ! !UITheme methodsFor: 'fill-styles-scrollbars' stamp: 'NicolasPetton 3/18/2013 18:39' prior: 53992289! scrollbarNormalFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." ^ Color white! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 3/22/2013 15:48'! selectionColorForFrame: frame ^ self selectionColor! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 3/22/2013 16:16'! windowBorderWidthFor: aWindow ^ 4! ! !UITheme methodsFor: 'morph creation' stamp: 'BenjaminVanRyseghem 3/22/2013 17:24'! windowCollapseBoxLayoutFor: aWindow ^ LayoutFrame new leftFraction: 1; leftOffset: aWindow boxExtent x negated; yourself! ! !CheckboxMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/18/2013 23:10' prior: 19011163! labelMorph: aMorph "Set the value of labelMorph" labelMorph ifNotNil: [labelMorph delete]. labelMorph := aMorph. labelMorph color: (self theme checkboxButtonLabelNormalFillStyleFor: self label: labelMorph). self addMorphBack: aMorph. self enabled: self enabled.! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 3/22/2013 17:21' prior: 51688901! addCollapseBox "If I have a labelArea, add a collapse box to it." labelArea ifNil: [^ self]. collapseBox := self createCollapseBox. collapseBox layoutFrame: (self theme windowCollapseBoxLayoutFor: self). labelArea addMorphBack: collapseBox! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 6/9/2013 23:49' prior: 51716692! initializeLabelArea "Initialize the label area (titlebar) for the window." label := self theme windowLabelFor: self. "Add default inital boxes" collapseBox := self createCollapseBox. "Add collapse box so #labelHeight will work" closeBox := self createCloseBox. self wantsExpandBox ifTrue: [ expandBox := self createExpandBox. self setExpandBoxBalloonText]. menuBox := self createMenuBox. stripes := Array with: (Morph newBounds: bounds) with: (Morph newBounds: bounds). self addLabelArea. labelArea goBehind. self replaceBoxes. labelArea fillStyle: self activeTitleFillStyle.! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 3/22/2013 16:07' prior: 51720108! labelHeight "Answer the height for the window label. The standard behavior is at bottom; a hook is provided so that models can stipulate other heights, in support of various less-window-looking demos. If no label answer the class border width instead." label ifNil: [^self isEmbedded ifTrue: [0] ifFalse: [self class borderWidth]]. (model notNil and: [model respondsTo: #desiredWindowLabelHeightIn:]) ifTrue: [ (model desiredWindowLabelHeightIn: self) ifNotNil: [:h | ^h]]. ^(label height + (self class borderWidth * 2)) max: (collapseBox ifNotNil: [collapseBox height] ifNil: [10])! ! !Matrix commentStamp: '' prior: 39875829! I represent a two-dimensional array. Structure: nrows : a non-negative integer saying how many rows there are. ncols : a non-negative integer saying how many columns there are. contents : an Array holding the elements in row-major order. That is, for a 2x3 array the contents are (11 12 13 21 22 23). Element-wise matrix arithmetic works; you can freely mix matrices and numbers but don't try to mix matrices and arrays (yet). Matrix multiplication, using the symbol +* (derived from APL's +.x), works between (Matrix or Array) +* (Matrix or Array). Don't try to use a number as an argument of +*. Matrix * Number and Number * Matrix work fine, so you don't need +* with numbers. ! "Collections-Unordered"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(11 June 2013 3:30:01 pm) Pharo.image priorSource: 6310852! ----STARTUP----an Array(11 June 2013 3:36:25 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 June 2013 3:36:25 pm) Pharo-30194.image priorSource: 6326735! ----STARTUP----an Array(11 June 2013 10:36:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/11/2013 22:34' prior: 39865584! commentForCurrentUpdate ^ '10285 RecentMessageList class>>startup: is not needed https://pharo.fogbugz.com/f/cases/10285 10758 Two categories in Setting: debugging and Debugging https://pharo.fogbugz.com/f/cases/10758'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/11/2013 22:34'! script294 ^ 'AST-Core-StephaneDucasse.166.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-StephaneDucasse.33.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.7.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.836.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.846.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/11/2013 22:34'! update30195 "self new update30195" self withUpdateLog: '10285 RecentMessageList class>>startup: is not needed https://pharo.fogbugz.com/f/cases/10285 10758 Two categories in Setting: debugging and Debugging https://pharo.fogbugz.com/f/cases/10758'. self loadTogether: self script294 merge: false. Smalltalk removeFromStartUpList: RecentMessageList. . self flushCaches. ! ! "ScriptLoader30"! !EyeInspector class methodsFor: 'settings' stamp: 'MarcusDenker 6/11/2013 21:54' prior: 36487256! defaultBrowserSettingOn: aBuilder (aBuilder setting: #useAutoRefresh) target: self; parent: #debugging; label: 'Auto Refresh Inspectors' translated; description: 'If true, refreshes inspectors in regular intervals' translated ! ! !RecentMessageList class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/11/2013 16:17' prior: 34316839! open self new open.! ! !RecentMessageList class methodsFor: 'tool registration' stamp: 'MarcusDenker 4/2/2013 15:45' prior: 34316973! registerToolsOn: registry registry register: self as: #recentMessageList! ! !RecentMessageList class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/11/2013 16:17' prior: 32154444! uniqueInstance ^UniqueInstance ifNil: [UniqueInstance := self basicNew initialize]! ! RecentMessageList class removeSelector: #startUp:! RecentMessageList class removeSelector: #initialize! RecentMessageList class removeSelector: #ensureSingletonExistence! "RecentSubmissions"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(11 June 2013 10:36:59 pm) Pharo.image priorSource: 6326974! ----STARTUP----an Array(11 June 2013 10:43:19 pm) as /Users/jenkins-pharo/Documents/ci.inria.fr/pharo/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 June 2013 10:43:19 pm) Pharo-30195.image priorSource: 6338664! ----STARTUP----an Array(12 June 2013 3:36:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/12/2013 15:33' prior: 39881706! commentForCurrentUpdate ^ '10847 Scanner should return error tokens when scanning wrong tokens https://pharo.fogbugz.com/f/cases/10847 10876 CleanUp in Morphic https://pharo.fogbugz.com/f/cases/10876 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/12/2013 15:33'! script295 ^ 'AST-Core-MarcusDenker.169.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.614.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1474.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.812.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.95.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.836.mcz RPackage-Core-MarcusDenker.222.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.99.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.210.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.846.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1136.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/12/2013 15:34'! update30196 "self new update30196" self withUpdateLog: '10847 Scanner should return error tokens when scanning wrong tokens https://pharo.fogbugz.com/f/cases/10847 10876 CleanUp in Morphic https://pharo.fogbugz.com/f/cases/10876 '. self loadTogether: self script295 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBErrorToken commentStamp: '' prior: 0! I'm an scanned error. I can have multiple causes.! !RBParserTest methodsFor: 'tests' stamp: 'GiselaDecuzzi 6/10/2013 11:38' prior: 39734658! testParseFaultyMethod | node strangeExpressions | strangeExpressions := OrderedCollection new . strangeExpressions add: 'method: asd self ,'; add: 'method: asd self a:'; "message without needed argument" add: 'method: asd []]'; add: 'method: asd [ ] ,';"binary message without second argument" add: 'method: ^^'; "returning twice" add: 'method: asd ['; "opening a block" add: 'method: asd ^ asd. n'; "invalid expresion after return" add: 'method: asd ^ {'; "Only Open a literal array" add: 'selector '''; add: 'selector #^'; add: 'selector ¿'. strangeExpressions do: [ :exp | node := self parseFaultyMethod: exp. self assert: node isMethod. self assert: node isFaulty. ]. ! ! !RBParserTest methodsFor: 'tests' stamp: 'GiselaDecuzzi 6/10/2013 13:30'! testParseMethodWithErrorTokenIsWellFormed | node strangeMethod body statement message errorNode | strangeMethod := ' selector |temp| temp := ''this is right'', ''wrong because no end. ^temp'. node := self parseFaultyMethod: strangeMethod. self assert: node isMethod. self assert: node isFaulty. self assert: node arguments isEmpty. body := node body. self assert: body isSequence. self assert: body isFaulty. self assert: (body temporaries includes: (RBVariableNode named: 'temp')). statement := body statements first. self assert: statement isFaulty. self assert: statement isAssignment . message := statement value. self assert: message isFaulty. self assert: message arguments size equals: 1. errorNode := message arguments at: 1. self assert: errorNode isFaulty. self assert: errorNode token isError. self assert: errorNode errorMessage equals: 'Unmatched '' in string literal.' translated. ! ! !RBParser methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/10/2013 11:42' prior: 39720755! initializeParserWith: aString source := aString. self scanner: (self scannerClass on: (ReadStream on: aString)) ! ! !RBParser methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/10/2013 13:48' prior: 39721571! parseErrorNode: aMessageString | token sourceString | currentToken isError ifTrue: [ ^ RBParseErrorNode errorMessage: currentToken cause token: currentToken ]. sourceString := source copyFrom: self errorPosition to: source size. token := RBValueToken value: sourceString start: self errorPosition. ^ RBParseErrorNode errorMessage: aMessageString token: token! ! !RBParser methodsFor: 'private-parsing' stamp: 'GiselaDecuzzi 6/10/2013 13:46' prior: 35291463! parsePrimitiveObject currentToken isIdentifier ifTrue: [^self parsePrimitiveIdentifier]. (currentToken isLiteralToken and: [currentToken isMultiKeyword not]) ifTrue: [^self parsePrimitiveLiteral]. currentToken isLiteralArrayToken ifTrue: [^currentToken isForByteArray ifTrue: [self parseLiteralByteArray] ifFalse: [self parseLiteralArray]]. currentToken isSpecial ifTrue: [currentToken value = $[ ifTrue: [^self parseBlock]. currentToken value = $( ifTrue: [^self parseParenthesizedExpression]. currentToken value = ${ ifTrue: [^self parseArray]]. (currentToken isBinary and: [ currentToken value = #- ]) ifTrue: [ ^self parseNegatedNumber ]. ^ self parserError: 'Variable or expression expected'! ! !RBParser methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/10/2013 15:53' prior: 39724542! parserError: aString "Let the errorBlock try to recover from the error." | errorNode errorMessage errorPosition | errorNode := self errorBlock cull: aString cull: self errorPosition cull: self. errorNode ifNotNil: [ ^ errorNode ]. currentToken isError ifTrue: [ errorMessage := currentToken cause. errorPosition := currentToken location ] ifFalse: [errorMessage := aString. errorPosition := currentToken start]. SyntaxErrorNotification inClass: Object category: nil withCode: source doitFlag: false errorMessage: errorMessage location: errorPosition! ! !RBScanner class methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 11:42' prior: 31300954! isVariable: aString | scanner token | scanner := self on: (ReadStream on: aString). token := scanner next. token isIdentifier ifFalse: [^false]. (token start = 1 and: [token stop = aString size]) ifFalse: [^false]. ^(aString includes: $.) not! ! !RBScanner class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 6/10/2013 13:00' prior: 31300475! on: aStream errorBlock: aBlock | str | str := self new on: aStream. str errorBlock: aBlock; step; stripSeparators. ^str! ! !RBScanner methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/10/2013 13:11' prior: 31290480! errorBlock ^errorBlock ifNil: [[:message :position | ]] ifNotNil: [errorBlock]! ! !RBScanner methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/10/2013 13:12' prior: 31290611! errorPosition ^stream position! ! !RBScanner methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/10/2013 14:53' prior: 31289156! next | token | buffer reset. tokenStart := stream position. token := characterType = #eof ifTrue: [RBToken start: tokenStart + 1 "The EOF token should occur after the end of input"] ifFalse: [self scanToken]. self stripSeparators. token comments: self getComments. ^token! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 15:53'! scanError: theCause currentCharacter ifNotNil: [ :char | buffer nextPut: char ]. ^ RBErrorToken value: buffer contents asString start: tokenStart cause: theCause location: stream position + 1! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 10:47' prior: 39736199! scanLiteral self step. self stripSeparators. characterType = #alphabetic ifTrue: [ ^ self scanSymbol ]. characterType = #binary ifTrue: [ ^ (self scanBinary: RBLiteralToken) stop: self previousStepPosition ]. currentCharacter = $' ifTrue: [ ^ self scanStringSymbol ]. (currentCharacter = $( or: [ currentCharacter = $[ ]) ifTrue: [ ^ self scanLiteralArrayToken]. "Accept some strange literals like '#1', '# species' and '##species:'" characterType = #digit ifTrue: [ ^ self scanNumber ]. currentCharacter = $# ifTrue: [ ^ self scanLiteral ]. ^self scanError: 'Expecting a literal type' translated.! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 11:05' prior: 39736926! scanLiteralString self step. [currentCharacter isNil ifTrue: [^self scanError: 'Unmatched '' in string literal.' translated]. currentCharacter = $' and: [self step ~= $']] whileFalse: [buffer nextPut: currentCharacter. self step]. ^RBLiteralToken value: buffer contents start: tokenStart stop: self previousStepPosition! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 14:43' prior: 35792569! scanNumber | start number stop string | start := stream position. stream position: start - 1. number := [SqNumberParser parse: stream] on: Error do: [:err | self scannerError: err messageText]. stop := stream position. stream position: start - 1. string := stream next: stop - start + 1. stream position: stop. self step. ^RBNumberLiteralToken value: number start: start stop: stop source: string! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 10:47' prior: 31296248! scanPatternVariable buffer nextPut: currentCharacter. self step. currentCharacter = ${ ifTrue: [self step. ^RBPatternBlockToken value: '`{' start: tokenStart]. [characterType = #alphabetic] whileFalse: [characterType = #eof ifTrue: [self scanError: 'Meta variable expected']. buffer nextPut: currentCharacter. self step]. ^self scanIdentifierOrKeyword! ! !RBScanner methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/10/2013 10:22' prior: 39737371! scanToken "fast-n-ugly. Don't write stuff like this. Has been found to cause cancer in laboratory rats. Basically a case statement. Didn't use Dictionary because lookup is pretty slow." characterType = #alphabetic ifTrue: [^self scanIdentifierOrKeyword]. (characterType = #digit or: [currentCharacter = $- and: [(self classify: stream peek) = #digit]]) ifTrue: [^self scanNumber]. characterType = #binary ifTrue: [^self scanBinary: RBBinarySelectorToken]. characterType = #special ifTrue: [^self scanSpecialCharacter]. currentCharacter = $' ifTrue: [^self scanLiteralString]. currentCharacter = $# ifTrue: [^self scanLiteral]. currentCharacter = $$ ifTrue: [^self scanLiteralCharacter]. ^self scanError: 'Unknown character' translated! ! !RBScanner methodsFor: 'error handling' stamp: 'GiselaDecuzzi 6/10/2013 13:08' prior: 39738226! scannerError: aString (self errorBlock cull: aString cull: self errorPosition cull: self) ifNil: [ ^ SyntaxErrorNotification inClass: Object category: nil withCode: stream contents doitFlag: false errorMessage: aString location: stream position + 1 ]! ! !RBScanner methodsFor: 'private-scanning' stamp: 'GiselaDecuzzi 6/10/2013 13:07' prior: 39738651! stripComment | start stop | start := stream position. [self step = $"] whileFalse: [characterType = #eof ifTrue: [^self scannerError: 'Unmatched " in comment.' translated]]. stop := stream position. self step. comments add: (start to: stop)! ! !LazyListMorph methodsFor: 'drawing' stamp: 'NicolasPetton 3/18/2013 17:36' prior: 24326915! drawOn: aCanvas listItems size = 0 ifTrue: [^ self]. aCanvas fillRectangle: aCanvas clipRect color: (self theme listNormalFillStyleFor: self). "self drawSelectionOn: aCanvas." (self topVisibleRowForCanvas: aCanvas) to: (self bottomVisibleRowForCanvas: aCanvas) do: [:row | (listSource itemSelectedAmongMultiple: row) ifTrue: [ self drawBackgroundForSelectedRow: row on: aCanvas] ifFalse: [ (listSource searchedElement = row) ifTrue: [ self drawBackgroundForSearchedRow: row on: aCanvas] ifFalse: [ (listSource backgroundColorFor: row) ifNotNil: [:col | self drawBackgroundForRow: row on: aCanvas color: col ]]]. selectedRow = row ifTrue: [ self drawSelectionOn: aCanvas ]. (listSource separatorAfterARow: row) ifTrue: [ self drawSeparatorAfter: row on: aCanvas ]. self display: (self item: row) atRow: row on: aCanvas]. listSource potentialDropRow > 0 ifTrue: [self highlightPotentialDropRow: listSource potentialDropRow on: aCanvas]! ! !RBErrorToken commentStamp: '' prior: 39903857! I'm an scanned error. I can have multiple causes.! !RBErrorToken class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 6/10/2013 15:54'! value: value start: tokenStart cause: errorCause location: thePosition ^ self new value: value start: tokenStart cause: errorCause location: thePosition; yourself! ! !RBErrorToken methodsFor: 'accesing' stamp: 'GiselaDecuzzi 6/10/2013 10:48'! cause ^ cause! ! !RBErrorToken methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 10:40'! isError ^true! ! !RBErrorToken methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/10/2013 15:51'! location ^ location! ! !RBErrorToken methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 15:51'! value: theValue start: tokenStart cause: errorCause location: errorPosition self value: theValue start: tokenStart . location := errorPosition. cause := errorCause .! ! !ScrollBar methodsFor: 'geometry' stamp: 'NicolasPetton 3/18/2013 20:06' prior: 32813617! buttonExtent | size | size := self theme scrollbarThickness. ^ bounds isWide ifTrue: [ upButton ifNil: [ size@size ] ifNotNil: [ upButton extent ] ] ifFalse: [ downButton ifNil: [ size@size ] ifNotNil: [ downButton extent ] ]! ! !ScrollBar methodsFor: 'initialization' stamp: 'NicolasPetton 3/18/2013 19:14' prior: 32815389! initializeDownButton "initialize the receiver's downButton" downButton := self theme newScrollBarDownButtonFor: self. downButton color: self thumbColor. downButton on: #mouseDown send: #scrollDownInit to: self. downButton on: #mouseUp send: #finishedScrolling to: self. self updateDownButtonImage. downButton borderWidth: 1; borderColor: Color lightGray. downButton cornerStyle: (self theme scrollbarButtonCornerStyleIn: self window). downButton on: #mouseUp send: #finishedScrolling: to: self. downButton on: #mouseEnter send: #mouseEnterDownButton: to: self. downButton on: #mouseLeave send: #mouseLeaveDownButton: to: self. self addMorph: downButton! ! !ScrollBar methodsFor: 'initialization' stamp: 'NicolasPetton 3/18/2013 19:27' prior: 32816914! initializeSlider "Initialize the receiver's slider." self initializeUpButton; initializeDownButton; initializePagingArea. super initializeSlider. self sliderColor: self sliderColor. self slider width: self theme scrollbarThickness; height: self theme scrollbarThickness. slider cornerStyle: (self theme scrollbarThumbCornerStyleIn: self window). slider on: #mouseEnter send: #mouseEnterThumb: to: self. slider on: #mouseLeave send: #mouseLeaveThumb: to: self! ! !ScrollBar methodsFor: 'initialization' stamp: 'NicolasPetton 3/18/2013 19:13' prior: 32817377! initializeUpButton "initialize the receiver's upButton" upButton := self theme newScrollBarUpButtonFor: self. upButton color: self thumbColor. upButton on: #mouseDown send: #scrollUpInit to: self. upButton on: #mouseUp send: #finishedScrolling to: self. self updateUpButtonImage. upButton borderWidth: 1; borderColor: Color lightGray. upButton cornerStyle: (self theme scrollbarButtonCornerStyleIn: self window). upButton on: #mouseUp send: #finishedScrolling: to: self. upButton on: #mouseEnter send: #mouseEnterUpButton: to: self. upButton on: #mouseLeave send: #mouseLeaveUpButton: to: self. self addMorph: upButton! ! !SystemWindow class methodsFor: 'initializing' stamp: 'BenjaminVanRyseghem 3/22/2013 16:16' prior: 51779888! borderWidth "Making changes to this for some reason requires repositioning of CornerGripMorphs. Edit BorderedMorph#addCornerGrip and play with offsets to get them right if you increase border width. For instance, going from 4 to 6 here and you should updated offsets to (-23@-23 corner: 0@0) for the right placement of corner grips." ^ self theme windowBorderWidthFor: self! ! !SystemWindow methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/22/2013 16:02' prior: 51752172! addLabelArea labelArea :=self theme newWindowHeaderFor: self. self addMorph: labelArea.! ! !Morph methodsFor: 'events-accessing' stamp: 'BenjaminVanRyseghem 6/9/2013 23:54' prior: 26686152! actionMap "Answer an action map" ^ self updateableActionMap! ! !RBToken methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 10:40'! isError ^false! ! !GroupWindowMorph methodsFor: 'layout' stamp: 'LaurentLaffont 2/16/2012 09:33'! changePropotionalLayout | layout | ((layout := self layoutPolicy) notNil and:[layout isProportionalLayout]) ifTrue:[^self]. "already proportional layout" self layoutPolicy: ProportionalLayout new. self layoutChanged.! ! !RBAssignmentNode methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 13:31' prior: 39725651! isFaulty ^self variable isFaulty or: [ self value isFaulty].! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 6/10/2013 11:09' prior: 39332863! testNextWithAWrongSymbolGetError | source scanner scannedToken | source := '#^'. scanner := self buildScannerForText: source. scannedToken := scanner next. self verifyErrorToken: scannedToken message: 'Expecting a literal type' translated valueExpected: '^'! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 6/10/2013 11:03' prior: 39333119! testNextWithAnIdentifierTokenGetTheIdentifierToken | source scanner token | source := 'identifierToken'. scanner := self buildScannerForText: source. token := scanner next. self assert: token isIdentifier. self deny: token isError. self assert: token value equals: source.! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 6/10/2013 11:10' prior: 39333698! testNextWithAnOpeningStringsGetError | source scannedToken | source := '''only the opening'. scannedToken := (self buildScannerForText: source) next. self verifyErrorToken: scannedToken message: 'Unmatched '' in string literal.' translated valueExpected: 'only the opening'! ! !RBScannerTest methodsFor: 'next' stamp: 'GiselaDecuzzi 6/10/2013 11:13' prior: 39333974! testNextWithAnUnknownCharacterGetError | source scanner scannedToken | source := '¿'. scanner := self buildScannerForText: source. scannedToken := scanner next. self verifyErrorToken: scannedToken message: 'Unknown character' translated valueExpected: source! ! !RBScannerTest methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/10/2013 11:10'! verifyErrorToken: scannedToken message: message valueExpected: valueExpected self assert: scannedToken isError. self assert: scannedToken cause equals: message. self assert: scannedToken value equals: valueExpected. self assert: scannedToken start equals: 1.! ! "AST-Core"! "AST-Tests-Core"! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(12 June 2013 3:37:04 pm) Pharo.image priorSource: 6338905! ----STARTUP----an Array(12 June 2013 4:02:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 June 2013 4:02:44 pm) Pharo-30196.image priorSource: 6366660! ----STARTUP----an Array(12 June 2013 8:37:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/12/2013 20:31' prior: 39893637! commentForCurrentUpdate ^ '10636 consider change "findString: arg startingAt:1 > 0" to "includesSubstring: arg" https://pharo.fogbugz.com/f/cases/10636 10877 Cleanup in polymorphic ver2 https://pharo.fogbugz.com/f/cases/10877'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/12/2013 20:32'! script296 ^ 'AST-Core-MarcusDenker.169.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.87.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.45.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.616.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.69.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1476.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.814.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.837.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.195.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.212.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.846.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1138.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/12/2013 20:32'! update30197 "self new update30197" self withUpdateLog: '10636 consider change "findString: arg startingAt:1 > 0" to "includesSubstring: arg" https://pharo.fogbugz.com/f/cases/10636 10877 Cleanup in polymorphic ver2 https://pharo.fogbugz.com/f/cases/10877'. self loadTogether: self script296 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'system compatibility' stamp: 'MarcusDenker 6/11/2013 14:39' prior: 38653403! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'MarcusDenker 6/11/2013 14:39' prior: 38647616! scanForPreviousVersion | sourceFilesCopy method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [ tokens := preamble parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !VersionsBrowser methodsFor: 'init & update' stamp: 'MarcusDenker 6/11/2013 14:42' prior: 38669917! scanVersionsOf: method class: class meta: meta category: category selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp cat | selectorOfMethod := selector. currentCompiledMethod := method. classOfMethod := meta ifTrue: [class class] ifFalse: [class]. cat := category ifNil: ['']. changeList := OrderedCollection new. list := OrderedCollection new. self addedChangeRecord ifNotNil: [ :change | self addItem: change text: ('{1} (in {2})' translated format: { change stamp. change fileName }) ]. listIndex := 0. position := method filePosition. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue: [(tokens at: tokens size-3) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last]. cat := tokens at: tokens size-4. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue: [(tokens at: tokens size-1) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size]. cat := tokens at: tokens size-2]. self addItem: (ChangeRecord new file: file position: position type: #method class: class name category: category meta: meta stamp: stamp) text: stamp , ' ' , class name , (meta ifTrue: [' class '] ifFalse: [' ']) , selector, ' {', cat, '}'. position := prevPos. prevPos notNil ifTrue: [file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !ChangeRecord methodsFor: 'access' stamp: 'MarcusDenker 6/11/2013 14:38' prior: 38659852! prior | currFile preamble prevPos tokens prevFileIndex | currFile := file readOnlyCopy. currFile position: (0 max: position - 150). [currFile position < (position - 1)] whileTrue: [preamble := currFile nextChunk]. currFile close. prevPos := nil. (preamble includesSubstring: 'methodsFor:') ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size - 5) == #methodsFor:]) ifTrue: [ (tokens at: tokens size - 3) == #stamp: ifTrue: [ prevPos := tokens last. prevFileIndex := SourceFiles fileIndexFromSourcePointer: prevPos. prevPos := SourceFiles filePositionFromSourcePointer: prevPos] ifFalse: [ prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. prevPos ifNil: [^ nil]. ^ {prevFileIndex. prevPos. SourceFiles sourcePointerFromFileIndex: prevFileIndex andPosition: prevPos}! ! !CompiledMethod methodsFor: 'printing' stamp: 'MarcusDenker 6/11/2013 14:38' prior: 38675067! timeStampFromFile: file "return the timestamp of this method for a given source filestream" | preamble stamp tokens tokenCount| preamble := self getPreambleFrom: file at: (0 max: self filePosition - 3). stamp := String new. tokens := (preamble includesSubstring: 'methodsFor:') ifTrue: [preamble parseLiterals] ifFalse: [Array new "ie cant be back ref"]. (((tokenCount := tokens size) between: 7 and: 8) and: [(tokens at: tokenCount - 5) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 3) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount - 2]]. ((tokenCount between: 5 and: 6) and: [(tokens at: tokenCount - 3) == #methodsFor:]) ifTrue: [(tokens at: tokenCount - 1) == #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokenCount]]. ^ stamp ! ! !FreeTypeNameParser methodsFor: 'parsing' stamp: 'MarcusDenker 6/11/2013 14:39' prior: 22779029! splitBadTokensIn: aString "split tokens such as BoldOblique, that should be two words" | str | str := aString. #( ('bold' 'oblique') ('bold' 'italic') ) do:[:pair | | i | (i := str asLowercase includesSubstring: pair first, pair second) ifTrue:[ str := (str first: i + pair first size - 1), ' ', (str last: (str size - (i + pair first size - 1)))]]. ^str! ! !ChangeSet class methodsFor: 'scanning' stamp: 'MarcusDenker 6/11/2013 14:38' prior: 38662309! scanVersionsOf: method class: class meta: meta category: cat selector: selector | position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp changeList file | changeList := OrderedCollection new. position := method filePosition. sourceFilesCopy := SourceFiles collect:[:x | x ifNotNil:[x readOnlyCopy]]. method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue:[ file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-3) = #stamp: ifTrue:[ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos. ] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last. ]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil] ]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size. ] ]. changeList add: (ChangeRecord new file: file position: position type: #method class: class name category: cat meta: meta stamp: stamp). position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]. ]. sourceFilesCopy do: [:x | x ifNotNil:[x close]]. ^changeList! ! !ClassCommentVersionsBrowser methodsFor: 'basic function' stamp: 'MarcusDenker 6/11/2013 14:42' prior: 38667057! scanVersionsOf: class "Scan for all past versions of the class comment of the given class" | oldCommentRemoteStr sourceFilesCopy position prevPos stamp preamble tokens prevFileIndex | classOfMethod := class. oldCommentRemoteStr := class organization commentRemoteStr. currentCompiledMethod := oldCommentRemoteStr. selectorOfMethod := #Comment. changeList := OrderedCollection new. list := OrderedCollection new. listIndex := 0. oldCommentRemoteStr ifNil:[^ nil] ifNotNil: [oldCommentRemoteStr sourcePointer]. sourceFilesCopy := SourceFiles collect: [:x | x isNil ifTrue: [ nil ] ifFalse: [x readOnlyCopy]]. position := oldCommentRemoteStr position. file := sourceFilesCopy at: oldCommentRemoteStr sourceFileNumber. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). " Skip back to before the preamble" [file position < (position-1)] "then pick it up from the front" whileTrue: [preamble := file nextChunk]. prevPos := nil. stamp := ''. (preamble includesSubstring: 'commentStamp:') ifTrue: [tokens := preamble parseLiterals. (tokens at: tokens size-3) = #commentStamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]] ifFalse: ["The stamp get lost, maybe after a condenseChanges" stamp := '']. self addItem: (ChangeRecord new file: file position: position type: #classComment class: class name category: nil meta: class stamp: stamp) text: stamp , ' ' , class name , ' class comment'. prevPos = 0 ifTrue:[prevPos := nil]. position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]]. sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]. listSelections := Array new: list size withAll: false! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 6/11/2013 14:40' prior: 38678863! protocolAt: sourcePointer for: sourceDataPointers "Answer the protocol for a given method, retrieved from the sources or changes file. Answer unfound protocol if no protocol is available." | preamble protocol tokens protocolPosition | protocol := 'unfound protocol'. "this is to indicate that the tagging in the source does not use the correct format. We will have to fix that. For example some traits methods are wrongly tagged. see http://code.google.com/p/pharo/issues/detail?id=4581" preamble := self sourcedDataAt: sourcePointer. preamble = 'Trait method' ifTrue: [ ^nil ]. (preamble includesSubstring: (sourceDataPointers key)) ifTrue: [ tokens := preamble parseLiterals. protocolPosition := tokens indexOf: sourceDataPointers key. protocolPosition = 0 ifFalse: [ "New format gives change protocol and unified prior pointer" protocol := tokens at: protocolPosition + 1] ]. ^protocol! ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 6/11/2013 14:40' prior: 38679926! timeStampAt: sourcePointer for: sourceDataPointers "Answer the authoring time-stamp for the given method, retrieved from the sources or changes file. Answer the empty string if no time stamp is available." | preamble stamp tokens stampPosition | stamp := ''. preamble := self sourcedDataAt: sourcePointer. (preamble includesSubstring: sourceDataPointers key) ifTrue: [ tokens := preamble parseLiterals. stampPosition := tokens indexOf: sourceDataPointers value. stampPosition = 0 ifFalse: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: stampPosition + 1]]. ^stamp! ! !StandardWindow methodsFor: 'initialization' stamp: 'gvc 10/26/2006 10:36' prior: 50840498! defaultColor "Answer the default color/fill style for the receiver" ^self theme windowColor! ! !StandardWindow methodsFor: 'morphic ui' stamp: 'gvc 10/26/2006 10:33' prior: 50840679! defaultLabel "Answer the default label for the receiver." ^'Window' translated! ! !StandardWindow methodsFor: 'open/close' stamp: 'gvc 1/10/2007 11:39' prior: 50840845! delete "If fullscreen remove the owner too." self mustNotClose ifTrue: [^ self]. self model okToChange ifFalse: [^ self]. self model okToClose ifFalse: [^self]. self isFullscreen ifTrue: [self owner delete] ifFalse: [super delete]! ! !StandardWindow methodsFor: 'macpal' stamp: 'gvc 9/12/2006 16:26' prior: 50841171! flash "Flash the window." |fs c w d| fs := self fillStyle. c := self color alphaMixed: 0.5 with: Color white. w := self world. d := 0. 2 timesRepeat: [ (Delay forDuration: d milliSeconds) wait. d := 200. self color: c. w ifNotNil: [w displayWorldSafely]. (Delay forDuration: d milliSeconds) wait. self fillStyle: fs. w ifNotNil: [w displayWorldSafely]] ! ! !StandardWindow methodsFor: '*Polymorph-Widgets' stamp: 'gvc 10/26/2006 10:37' prior: 50841633! initialize "Initialize the receiver." super initialize. self setLabel: self defaultLabel; setWindowColor: self defaultColor! ! !StandardWindow methodsFor: '*Polymorph-Widgets' stamp: 'GaryChambers 12/19/2011 15:52' prior: 50841859! isActive "Answer active if fullscreen too." ^self isFullscreen or: [super isActive]! ! !StandardWindow methodsFor: 'testing' stamp: 'gvc 9/14/2006 16:47' prior: 50842031! isFullscreen "Answer whether the window should be draw as fullscreen, i.e. no title bar or borders." ^self owner isKindOf: FullscreenMorph! ! !StandardWindow methodsFor: '*Polymorph-Widgets' stamp: 'nice 1/5/2010 15:59' prior: 50842258! makeBorderless "Remove the border and border width offsets.." | b| b := self class borderWidth. self submorphsDo: [:m | | l | l := m layoutFrame. l ifNotNil: [ l rightFraction = 1 ifTrue: [l rightOffset: l rightOffset + b]. l leftFraction = 0 ifTrue: [l leftOffset: l leftOffset - b]. l bottomFraction = 1 ifTrue: [l bottomOffset: l bottomOffset + b]]]. self borderWidth: 0! ! !StandardWindow methodsFor: 'accessing' stamp: 'gvc 9/29/2006 12:12' prior: 50842737! model: anObject "Reset the minimum extent." super model: anObject. self title: self title! ! !StandardWindow methodsFor: '*Polymorph-Widgets' stamp: 'gvc 2/26/2010 12:56' prior: 50842915! mouseMove: evt "Handle a mouse-move event" self isFullscreen ifTrue: [^self]. "do nothing if fullscreen" ^super mouseMove: evt! ! !StandardWindow methodsFor: 'submorphs-accessing' stamp: 'gvc 5/7/2008 11:45' prior: 50843129! noteNewOwner: aMorph "Go fullscreen if needed." super noteNewOwner: aMorph. (self isFullscreen and: [labelArea owner notNil]) ifTrue: [ self beWithoutGrips; removeLabelArea; makeBorderless. (self submorphs size = 1 and: [self submorphs first isKindOf: PanelMorph]) ifTrue: [self submorphs first roundedCorners: #()]]! ! !StandardWindow methodsFor: 'accessing' stamp: 'gvc 10/26/2006 12:07' prior: 50843552! open "Where else would you want to open it?." self openInWorld! ! !StandardWindow methodsFor: '*Polymorph-Widgets' stamp: 'gvc 9/14/2006 19:20' prior: 50844109! wantsRoundedCorners "Check to see if the property is set first." ^self isFullscreen ifTrue: [false] ifFalse: [^super wantsRoundedCorners]! ! !StandardWindow methodsFor: 'event handling' stamp: 'CamilloBruni 2/4/2012 14:44' prior: 50844347! yellowButtonActivity: shiftState "Do nothing." ^ false! ! !UITheme class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/10/2013 04:06'! lightBaseColor ^ Color white! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/10/2013 04:06'! lightBaseColor ^ self class lightBaseColor! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'MarcusDenker 6/11/2013 14:40' prior: 38644134! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !PackageInfo methodsFor: 'testing' stamp: 'MarcusDenker 6/11/2013 14:39' prior: 38650442! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = (Smalltalk globals at: #Categorizer ifAbsent: [ Smalltalk globals at: #ClassOrganizer ]) default ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference theNonMetaClassName category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! "FreeType"! "Kernel"! "Monticello"! "PackageInfo"! "Polymorph-Widgets"! "RPackage-Core"! "Ring-Core-Kernel"! "System-Changes"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 June 2013 8:40:52 pm) Pharo.image priorSource: 6366858! ----STARTUP----an Array(12 June 2013 8:49:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 June 2013 8:49:09 pm) Pharo-30197.image priorSource: 6404736! ----STARTUP----an Array(13 June 2013 3:55:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(13 June 2013 3:55:12 pm) Pharo.image priorSource: 6404934! ----STARTUP----an Array(13 June 2013 4:04:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 June 2013 4:04:35 pm) Pharo-30197.image priorSource: 6405142! ----STARTUP----an Array(13 June 2013 5:08:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/13/2013 16:48' prior: 39921589! commentForCurrentUpdate ^ '10902 Add FileReference >> contents https://pharo.fogbugz.com/f/cases/10902 10895 DateModel Enhancement: add getter & better class comment https://pharo.fogbugz.com/f/cases/10895 10899 Fix FontSet class>>#fontName https://pharo.fogbugz.com/f/cases/10899 10898 substring refactoring broke freetype loading https://pharo.fogbugz.com/f/cases/10898'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/13/2013 16:48'! script297 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.89.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.47.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1476.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.814.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.837.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.212.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.846.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1138.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/13/2013 16:48'! update30198 "self new update30198" self withUpdateLog: '10902 Add FileReference >> contents https://pharo.fogbugz.com/f/cases/10902 10895 DateModel Enhancement: add getter & better class comment https://pharo.fogbugz.com/f/cases/10895 10899 Fix FontSet class>>#fontName https://pharo.fogbugz.com/f/cases/10899 10898 substring refactoring broke freetype loading https://pharo.fogbugz.com/f/cases/10898'. self loadTogether: self script297 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateModel commentStamp: '' prior: 20452897! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !FileReferenceTest methodsFor: 'tests' stamp: 'CamilloBruni 6/13/2013 16:06'! testContents | ref contents | contents := '12345 abcdf!!'. ref := filesystem * 'file'. ref writeStreamDo: [ :stream | stream nextPutAll: contents ]. self assert: ref contents asString equals: contents! ! !FontSet class methodsFor: 'private' stamp: 'ClementBera 6/13/2013 15:23' prior: 22442474! fontName ^ self name asSymbol! ! !FreeTypeNameParser methodsFor: 'parsing' stamp: 'nice 1/5/2010 15:59' prior: 39942601! splitBadTokensIn: aString "split tokens such as BoldOblique, that should be two words" | str | str := aString. #( ('bold' 'oblique') ('bold' 'italic') ) do:[:pair | | i | (i := str asLowercase findString: pair first, pair second startingAt: 1) > 0 ifTrue:[ str := (str first: i + pair first size - 1), ' ', (str last: (str size - (i + pair first size - 1)))]]. ^str! ! !AbstractFileReference methodsFor: 'accessing' stamp: 'CamilloBruni 6/13/2013 16:02'! contents self readStreamDo: [ :stream | ^ stream contents ]! ! !RBParseErrorNode class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/13/2013 16:44' prior: 39726231! errorMessage: aString token: anRBToken ^ self new errorMessage: aString; token: anRBToken; yourself! ! !DateModel commentStamp: '' prior: 39970644! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !DateModel methodsFor: 'accessing' stamp: 'SeanDeNigris 6/12/2013 08:51'! date: aDate ^ self dateModel text: aDate asString.! ! "AST-Core"! "FileSystem-Core"! "FileSystem-Tests-Core"! "FreeType"! "Graphics-Fonts"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(13 June 2013 5:08:46 pm) Pharo.image priorSource: 6405340! ----STARTUP----an Array(13 June 2013 6:24:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 June 2013 6:24:22 pm) Pharo-30198.image priorSource: 6418887! ----STARTUP----an Array(14 June 2013 12:55:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/14/2013 12:53' prior: 39960071! commentForCurrentUpdate ^ '10905 SystemOrganizer: Small file out cleanup https://pharo.fogbugz.com/f/cases/10905 10904 IconicListItem>>text:icon: sends unknown #form: to an AlphaImageMorph https://pharo.fogbugz.com/f/cases/10904 10901 Remove Cursor references from AbstractTool https://pharo.fogbugz.com/f/cases/10901'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/14/2013 12:54'! script298 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.262.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.603.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.89.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.47.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1476.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.814.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.470.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.839.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.212.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.847.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1141.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.505.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/14/2013 12:54'! update30199 "self new update30199" self withUpdateLog: '10905 SystemOrganizer: Small file out cleanup https://pharo.fogbugz.com/f/cases/10905 10904 IconicListItem>>text:icon: sends unknown #form: to an AlphaImageMorph https://pharo.fogbugz.com/f/cases/10904 10901 Remove Cursor references from AbstractTool https://pharo.fogbugz.com/f/cases/10901'. self loadTogether: self script298 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemOrganizer methodsFor: 'filein/out' stamp: 'SeanDeNigris 6/13/2013 10:25' prior: 51623780! fileOutCategory: category "Store on the file named category (a string) concatenated with '.st' all the classes associated with the category." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutCategory: category on: internalStream. ^ FileStream writeSourceCodeFrom: internalStream baseName: category isSt: true ! ! !SystemOrganizer methodsFor: 'filein/out' stamp: 'SeanDeNigris 6/13/2013 09:39' prior: 51624485! fileOutCategory: category on: aFileStream initializing: aBool "Store on the file associated with aFileStream, all the traits and classes associated with the category and any requested shared pools in the right order." | poolSet tempClass classes traits | traits := self orderedTraitsIn: category. classes := self superclassOrder: category. poolSet := Set new. classes do: [:class | class sharedPools do: [:eachPool | poolSet add: eachPool]]. poolSet size > 0 ifTrue: [ tempClass := Class new. tempClass shouldFileOutPools ifTrue: [ poolSet := poolSet select: [:aPool | tempClass shouldFileOutPool: (Smalltalk globals keyAtIdentityValue: aPool)]. poolSet do: [:aPool | tempClass fileOutPool: aPool onFileStream: aFileStream]]]. traits, classes do: [:each | each fileOutOn: aFileStream moveSource: false toFile: 0 initializing: false] separatedBy: [ aFileStream cr; nextPut: Character newPage; cr ]. aBool ifTrue: [classes do: [:cls | cls fileOutInitializerOn: aFileStream]].! ! !AbstractTool methodsFor: 'private' stamp: 'SeanDeNigris 6/13/2013 08:52'! do: aBlock on: aCollection displaying: aString | job | aCollection ifEmpty: [ ^ self ]. job := [ :bar | aCollection do: [ :element | aBlock value: element. bar increment ] ] asJob. job title: aString; min: 0; max: aCollection size; run.! ! !AbstractTool methodsFor: 'class' stamp: 'SeanDeNigris 6/13/2013 09:12' prior: 17452485! fileOutClasses: aCollection "Print a description of the selected class onto a file whose name is the category name followed by .st." self do: [ :class | class theNonMetaClass fileOut ] on: aCollection displaying: 'Filing out classes...'.! ! !AbstractTool methodsFor: 'method' stamp: 'SeanDeNigris 6/13/2013 09:12' prior: 17462368! fileOutMethods: aCollection self do: [ :method | method methodClass fileOutMethod: method selector ] on: aCollection displaying: 'Filing out methods...'.! ! !AbstractTool methodsFor: 'package' stamp: 'SeanDeNigris 6/13/2013 09:12' prior: 17472788! fileOutPackages: aCollection self do: [ :package | package fileOut ] on: aCollection displaying: 'Filing out packages...'.! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'DamienCassou 6/13/2013 16:38' prior: 39515503! text: aText icon: form ^ self new morph: aText asMorph; icon: (AlphaImageMorph new image: form); yourself! ! "Polymorph-Widgets"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(14 June 2013 12:55:51 pm) Pharo.image priorSource: 6419085! ----STARTUP----an Array(14 June 2013 1:03:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 June 2013 1:03:16 pm) Pharo-30199.image priorSource: 6432824! ----STARTUP----an Array(17 June 2013 11:17:57 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/17/2013 11:13' prior: 39973817! commentForCurrentUpdate ^ '7069 Filing out extension package in Nautilus produces empty file https://pharo.fogbugz.com/f/cases/7069 10915 String class>>#readFrom: is broken and untested https://pharo.fogbugz.com/f/cases/10915 10917 Add method for creating anonymous classes https://pharo.fogbugz.com/f/cases/10917 10920 TimeProfiler >> #blockCode uses strange printing strategy https://pharo.fogbugz.com/f/cases/10920 10921 Smalltalk vm headlessOption returns wrong value with latest VM https://pharo.fogbugz.com/f/cases/10921'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/17/2013 11:13'! script299 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.124.mcz CompressionTests-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.89.mcz FileSystem-Disk-MarcusDenker.56.mcz FileSystem-Memory-MarcusDenker.30.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.47.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-MarcusDenker.9.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.317.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-MarcusDenker.32.mcz Kernel-MarcusDenker.1479.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.814.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.25.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.839.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-EstebanLorenzano.95.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.212.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.849.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.549.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1143.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.507.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-MarcusDenker.20.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/17/2013 11:13'! update30200 "self new update30200" self withUpdateLog: '7069 Filing out extension package in Nautilus produces empty file https://pharo.fogbugz.com/f/cases/7069 10915 String class>>#readFrom: is broken and untested https://pharo.fogbugz.com/f/cases/10915 10917 Add method for creating anonymous classes https://pharo.fogbugz.com/f/cases/10917 10920 TimeProfiler >> #blockCode uses strange printing strategy https://pharo.fogbugz.com/f/cases/10920 10921 Smalltalk vm headlessOption returns wrong value with latest VM https://pharo.fogbugz.com/f/cases/10921'. self loadTogether: self script299 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'SeanDeNigris 6/13/2013 10:30' prior: 51846812! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'SeanDeNigris 6/13/2013 10:29'! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !RPackage methodsFor: '*Nautilus' stamp: 'SeanDeNigris 6/13/2013 10:39' prior: 31775416! fileOut | internalStream | internalStream := (String new: 1000) writeStream. SystemOrganization fileOutCategory: self name on: internalStream. classExtensionSelectors keysAndValuesDo: [ :className :selectors | selectors do: [ :selector | | extendedClass | extendedClass := Smalltalk globals classNamed: className. extendedClass fileOutMethod: selector on: internalStream ] ]. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !VirtualMachine methodsFor: 'accessing' stamp: 'CamilloBruni 6/16/2013 20:20' prior: 37077578! headlessOption "Return the default name for the headless option for this VM" ^ self optionDash, (Smalltalk os isUnix ifTrue: [ 'vm-display-null' ] ifFalse: [ 'headless' ])! ! !VirtualMachine methodsFor: 'accessing' stamp: 'CamilloBruni 6/16/2013 20:20'! optionDash "VMs release in Mai 2013 use -- instead of - for VM command line options" ^ (Smalltalk vm interpreterSourceDate > '2012-05-17' asDate) ifTrue: [ '--' ] ifFalse: [ '-' ]! ! !StringTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/14/2013 13:44'! testReadFrom self assert: (String readFrom: ($' asString, 'foo', $' asString) readStream) equals: 'foo'. self assert: (String readFrom: ($' asString, 'this ', $' asString, $' asString, ' is embedded', $' asString) readStream) equals: 'this '' is embedded'. self assert: (String readFrom: ('', $' asString, 'foo', $' asString, '') readStream) equals: 'foo'. self assert: (String readFrom: 'this '' is embedded' printString readStream) equals: 'this '' is embedded'! ! !TimeProfiler methodsFor: 'actions' stamp: 'CamilloBruni 6/16/2013 19:58' prior: 36257159! blockCode ^ block ifNil: [''] ifNotNil: [ blockSource ifNil: [ blockSource := block asString ]]! ! !ClassBuilder methodsFor: 'class definition' stamp: 'CamilloBruni 6/16/2013 17:32'! anonymousSubclassOf: newSuper "Create an annonimous subclass of the given superclass." ^ self newSubclassOf: newSuper type: newSuper typeOfClass instanceVariables: '' from: nil! ! !String class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 6/14/2013 13:42' prior: 51136053! readFrom: inStream "Answer an instance of me that is determined by reading the stream, inStream. Embedded double quotes become the quote Character." | char done | ^ self streamContents: [ :outStream | "go to first quote" inStream skipTo: $'. done := false. [ done or: [ inStream atEnd ] ] whileFalse: [ char := inStream next. char = $' ifTrue: [ char := inStream next. char = $' ifTrue: [ outStream nextPut: char ] ifFalse: [ done := true ] ] ifFalse: [ outStream nextPut: char ] ] ]! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !Trait method! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! "Collections-Strings"! "CollectionsTests"! "Kernel"! "Nautilus"! "System-Support"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(17 June 2013 11:20:20 am) Pharo.image priorSource: 6433023! ----STARTUP----an Array(17 June 2013 11:29:48 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 June 2013 11:29:48 am) Pharo-30200.image priorSource: 6449575! ----STARTUP----an Array(17 June 2013 2:19:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/17/2013 14:12' prior: 39987755! commentForCurrentUpdate ^ '10923 delete should raise error when there is no file https://pharo.fogbugz.com/f/cases/10923 10924 Simplifying ensure* and create protocol https://pharo.fogbugz.com/f/cases/10924 + writeStreamForFileNamed:replace:do: using ensureDeleted then ensureDelete'! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'S 6/17/2013 13:16' prior: 33713222! csForLastUpdate: aString "Create the changeSet for latest update (preamble, update, postload)" | updateNumber filename| updateNumber := self getLatestUpdateNumber. filename := updateNumber asString, '-Pha-', aString, '.cs'. filename asFileReference ensureDelete; writeStreamDo: [ :stream| self generateCS: self latestScriptLoaderPackageIdentificationString fromUpdate: updateNumber on: stream]. ^ filename! ! !ScriptLoader methodsFor: 'generate scripts/methods' stamp: 'StephaneDucasse 6/17/2013 12:47' prior: 32743918! generateNewUpdateMethod "ScriptLoader new generateNewUpdateMethod" | str mthName preamble postscript | str := ReadWriteStream on: (String new: 1000). mthName := 'update', self currentUpdateVersionNumber asString. str nextPutAll: mthName ; cr ; tab. str nextPutAll: '"self new ', mthName, '"'; crtab. preamble := UIManager default multiLineRequest: 'Preamble expression' initialAnswer: '' answerHeight: 100. preamble isEmptyOrNil ifFalse: [str nextPutAll: preamble; ensureEndsWith: $.; crtab]. str nextPutAll: 'self withUpdateLog: ' ; nextPut: $'; nextPutAll: self commentForCurrentUpdate ; nextPut: $'; nextPut: $. . str crtab. str nextPutAll: 'self script' , self currentScriptVersionNumber asString, '.'. str crtab. postscript := UIManager default multiLineRequest: 'Postscript expression' initialAnswer: '' answerHeight: 100. postscript isEmptyOrNil ifFalse: [str nextPutAll: postscript; ensureEndsWith: $.; crtab]. str nextPutAll: 'self flushCaches.'; cr. ^ str contents! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/17/2013 14:12'! script300 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-StephaneDucasse.23.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1479.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-StephaneDucasse.27.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.339.mcz OpalCompiler-Tests-MarcusDenker.177.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.841.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-StephaneDucasse.18.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.851.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-StephaneDucasse.551.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1145.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.507.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/17/2013 13:48' prior: 39997923! update30200 "self new update30200" self withUpdateLog: '7069 Filing out extension package in Nautilus produces empty file https://pharo.fogbugz.com/f/cases/7069 10915 String class>>#readFrom: is broken and untested https://pharo.fogbugz.com/f/cases/10915 10917 Add method for creating anonymous classes https://pharo.fogbugz.com/f/cases/10917 10920 TimeProfiler >> #blockCode uses strange printing strategy https://pharo.fogbugz.com/f/cases/10920 10921 Smalltalk vm headlessOption returns wrong value with latest VM https://pharo.fogbugz.com/f/cases/10921'. self loadTogether: self script299 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/17/2013 14:12'! update30201 "self new update30201" self withUpdateLog: '10923 delete should raise error when there is no file https://pharo.fogbugz.com/f/cases/10923 10924 Simplifying ensure* and create protocol https://pharo.fogbugz.com/f/cases/10924 + writeStreamForFileNamed:replace:do: using ensureDeleted then ensureDelete'. self loadTogether: self script300 merge: false. self flushCaches. ! ! !Loader class methodsFor: 'private' stamp: 'S 6/17/2013 13:26' prior: 24549228! waitingCacheFolder ^ self packageToBeTestedFolderName asFileReference ensureCreateDirectory; yourself ! ! "ScriptLoader30"! !DiskStore methodsFor: 'public' stamp: 'CamilloBruni 6/17/2013 11:07' prior: 20886479! delete: path | pathString encodedPathString | (self exists: path) ifFalse: [ ^ FileDoesNotExist signalWith: path ]. pathString := self stringFromPath: path. encodedPathString := Primitives encode: pathString. (self isDirectory: path) ifTrue: [ Primitives deleteDirectory: encodedPathString ] ifFalse: [ StandardFileStream retryWithGC: [ Primitives deleteFile: encodedPathString ] until: [ :result | result notNil ] forFileNamed: pathString ]! ! !MemoryFileSystemDirectory methodsFor: 'creation' stamp: 'S 6/17/2013 13:33'! ensureCreateDirectory: aDirectoryName ^ self fileEntryAt: aDirectoryName put: (MemoryFileSystemDirectory named: aDirectoryName)! ! !MemoryFileSystemDirectory methodsFor: 'creation' stamp: 'S 6/17/2013 13:32'! ensureCreateFile: aFileName ^ self fileEntryAt: aFileName put: (MemoryFileSystemFile named: aFileName)! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 6/17/2013 10:42' prior: 39121274! fileEntryRemove: aFileName ^ self fileEntryRemove: aFileName ifAbsent: [ FileDoesNotExist signalWith: aFileName ]! ! !MemoryFileSystemDirectory methodsFor: 'accessing' stamp: 'CamilloBruni 6/17/2013 10:40'! fileEntryRemove: aFileName ifAbsent: absentBlock | deletedEntry | deletedEntry := entries removeKey: aFileName ifAbsent: [ ^ absentBlock value ]. modificationTime := DateAndTime now. ^ deletedEntry! ! !BaseStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 17980396! testFileNamed | testString fileName | "Given" fileName := self testFileName. testString := 'testString'. "When" [self baseStreamType fileNamed: fileName do: [:streamType | streamType nextPut: testString]. "Then" self baseStreamType fileNamed: fileName do: [:streamType | self assert: streamType next = testString]] ensure: [ (FileSystem disk workingDirectory / fileName) ensureDelete ].! ! !MemoryStore methodsFor: 'public' stamp: 'S 6/17/2013 13:33' prior: 25434730! createDirectory: path | parent | parent := path parent. ^ self nodeAt: parent ifPresent: [ :entry | entry fileEntryAt: path basename ifPresent: [ :node | node isDirectory ifTrue: [ self signalDirectoryExists: path ] ifFalse: [ self signalFileExists: path ] ]. entry ensureCreateDirectory: path basename ] ifAbsent: [ self signalDirectoryDoesNotExist: parent ]! ! !MemoryStore methodsFor: 'private' stamp: 'S 6/17/2013 13:32' prior: 25437875! createFile: aPath ^ self nodeAt: aPath parent ifPresent: [ :entry | entry isDirectory ifTrue: [ entry ensureCreateFile: aPath basename ]] ifAbsent: [ self signalDirectoryDoesNotExist: aPath parent ]! ! !MemoryStore methodsFor: 'public' stamp: 'CamilloBruni 6/17/2013 10:51' prior: 39119807! delete: path self nodeAt: path parent ifPresent: [ :dict | dict fileEntryRemove: path basename ifAbsent: [ FileDoesNotExist signalWith: path ]] ifAbsent: [ DirectoryDoesNotExist signalWith: path parent ]! ! !MultiByteFileStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 27246270! testReadIntoStartingAtCount | testString filename buffer | testString := 'élève en Français'. filename := 'test-file-' , 99 atRandom printString , '.txt'. filename asFileReference ensureDelete. filename asFileReference writeStreamDo: [ :stream | stream nextPutAll: testString; crlf ]. buffer := String new: testString size. [ filename asFileReference readStreamDo: [ :stream | self assert: (stream readInto: buffer startingAt: 1 count: testString size) equals: testString size. self assert: buffer equals: testString ] ] ensure: [ filename asFileReference ensureDelete ]! ! !FileList methodsFor: 'own services' stamp: 'S 6/17/2013 13:26' prior: 39175455! addNewDirectory self addNew: 'Directory' byEvaluating: [:newName | (self directory / newName ) ensureCreateDirectory ] ! ! !FileList methodsFor: 'file menu action' stamp: 'S 6/17/2013 13:24' prior: 39175678! addNewFile self addNew: 'File' byEvaluating: [:newName | (self directory / newName) ensureCreateFile ] ! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:20' prior: 17198671! copyAllTo: aResolvable "Performs a deep copy of the receiver, to a location specified by the argument. If the receiver is a file, the file will be copied; if a directory, the directory and its contents will be copied recursively. The argument must be a reference that doesn't exist; it will be created by the copy." CopyVisitor copy: self resolve asAbsolute to: aResolvable resolve! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:17' prior: 39122990! delete "Delete the receiver, does raise an error if it is not present." ^ self resolve delete! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:21' prior: 39123199! deleteAll "Delete this directory and all children of it, raise an error if the file does not exist." DeleteVisitor delete: self resolve! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:26'! ensureCreateDirectory "Verifies that the directory does not exist and only creates if necessary. Do not remove files contained if they exist." ^ self resolve ensureCreateDirectory! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:24'! ensureCreateFile "Create if necessary a file for the receiver." self writeStream close. ! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:17'! ensureDelete "Delete the file and does not raise exception if it does not exist contrary to delete" self deleteIfAbsent: [].! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:29'! ensureDeleteAll "Delete this directory and all children of it, and does not raise an error if the file does not exist." self exists ifFalse: [ ^ self ]. self deleteAll ! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:30'! ensureDeleteAllChildren "delete all children of the receiver and does not raise an error if the receiver does not exist" self exists ifFalse: [ ^ self ]. self deleteAllChildren! ! !AbstractFileReference methodsFor: 'deprecated' stamp: 'S 6/17/2013 13:24' prior: 17199655! ensureDeleted "Delete the file and does not raise exception if it does not exist contrary to delete" self deprecated: 'Use ensureDelete' on: '21/06/2013' in: #Pharo30. self ensureDelete.! ! !AbstractFileReference methodsFor: 'deprecated' stamp: 'S 6/17/2013 13:26' prior: 39123953! ensureDirectory "Verifies that the directory does not exist and only creates if necessary. Do not remove files contained if they exist." self deprecated: 'Use ensureCreateDirectory' on: '21/06/2013' in: #Pharo30. ^ self ensureCreateDirectory! ! !AbstractFileReference methodsFor: 'deprecated' stamp: 'S 6/17/2013 13:25' prior: 17199925! ensureFile "Create if necessary a file for the receiver." self deprecated: 'Use ensureCreateFile' on: '21/06/2013' in: #Pharo30. self ensureCreateFile.! ! !AbstractFileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:30' prior: 39124232! moveTo: aReference "Move the receiver in the location passed as argument. (FileSystem disk workingDirectory / 'paf' ) ensureCreateFile. (FileSystem disk workingDirectory / 'fooFolder') ensureCreateDirectory. (FileSystem disk workingDirectory / 'paf' ) moveTo: (FileSystem disk workingDirectory / 'fooFolder' / 'paf') " ^ self resolve moveTo: aReference! ! !FLSerializationTest methodsFor: 'cleaning' stamp: 'S 6/17/2013 13:16' prior: 21647974! deleteFileNamed: aFilename aFilename asFileReference ensureDelete! ! !MCDirectoryRepositoryTest methodsFor: 'accessing' stamp: 'S 6/17/2013 13:26' prior: 24759266! directory directory ifNil: [directory := 'mctest' asFileReference. directory ensureCreateDirectory]. ^ directory! ! !UpdateStreamer methodsFor: 'untested' stamp: 'S 6/17/2013 13:26' prior: 54526255! saveUpdate: doc onFile: fileName "Save the update on a local file. With or without the update number on the front" | file fName pos updateDirectory | updateDirectory := 'updates' asFileReference. updateDirectory ensureCreateDirectory. fName := fileName. (self updateRemoveSequenceNum) ifTrue: [pos := fName findFirst: [:c | c isDigit not]. fName := fName copyFrom: pos to: fName size]. doc reset; ascii. file := updateDirectory / fName. file exists ifTrue: [ ^ self ]. file writeStreamDo: [ :s| s nextPutAll: doc contents]. ! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 39756840! testCopyWithCorrectBasename | directory | self markForCleanup: 'gooly'; markForCleanup: 'plonk'. directory := filesystem workingDirectory. (directory / 'gooly') ensureCreateFile. directory / 'gooly' copyTo: directory / 'plonk'. self assert: (directory / 'plonk') exists. self assert: (directory childNames includes: 'plonk')! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24'! testDelete "Unlike ensureDelete, delete raises an exception if the file does not exist." | reference | reference := filesystem workingDirectory / 'does-not-exist'. self deny: reference exists. self should: [ reference delete ] raise: FileDoesNotExist. reference := ( filesystem workingDirectory / 'file') ensureCreateFile. reference delete. self deny: reference exists. ! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:33' prior: 39128280! testEnsureDirectory | path | path := Path * 'plonk'. self markForCleanup: path. filesystem ensureCreateDirectory: path. self assert: (filesystem isDirectory: path).! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:33' prior: 39128542! testEnsureDirectoryCreatesParent | path | path := Path * 'plonk' / 'griffle'. self markForCleanup: path. self markForCleanup: path parent. self shouldnt: [filesystem ensureCreateDirectory: path] raise: FileSystemError. self assert: (filesystem isDirectory: (Path * 'plonk')). self assert: (filesystem isDirectory: path). ! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:33' prior: 39128969! testEnsureDirectoryExists | path | path := Path * 'plonk'. self markForCleanup: path. filesystem createDirectory: path. self shouldnt: [filesystem ensureCreateDirectory: path] raise: FileSystemError. ! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 39131060! testMoveTo | base file folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureCreateDirectory. file := (base / 'file') ensureCreateFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). file moveTo: (folder / 'newFile'). self deny: (base / 'file') exists. self assert: (folder / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 39131571! testMoveToFailingExistingDestination | base file folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureCreateDirectory. (folder / 'newFile') ensureCreateFile. file := (base / 'file') ensureCreateFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). "Destination exists already" self should: [ file moveTo: (folder / 'newFile') ] raise: Error. self assert: (base / 'file') exists. self assert: (folder / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 39132204! testMoveToFailingMissingDestination | base file | base := filesystem workingDirectory. file := (base / 'file') ensureCreateFile. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder') ; markForCleanup: (base / 'file'). "Destination exists already" self deny: (base / 'folder') exists. self should: [ file moveTo: (base / 'folder' / 'newFile') ] raise: Error. self assert: (base / 'file') exists. self deny: (base / 'folder' / 'newFile') exists.! ! !FileSystemTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 39132802! testMoveToFailingMissingSource | base folder | base := filesystem workingDirectory. folder := (base / 'folder') ensureCreateDirectory. "Cleanup after running" self markForCleanup: (base / 'folder' / 'newFile'); markForCleanup: (base / 'folder'). self deny: (base / 'file') exists. "Destination exists already" self should: [ (base / 'file') moveTo: (folder / 'newFile') ] raise: Error. self deny: (base / 'file') exists. self deny: (folder / 'newFile') exists.! ! !TraitFileOutTest methodsFor: 'running' stamp: 'Anonymous 6/17/2013 13:16' prior: 53405953! tearDown | dir | dir := FileSystem workingDirectory. self createdClassesAndTraits, self resourceClassesAndTraits do: [:each | (dir / each asString,'st') ensureDelete ] . (dir / self categoryName,'st') ensureDelete. self class environment organization removeSystemCategory: self categoryName. super tearDown! ! !FileReferenceTest methodsFor: 'support' stamp: 'S 6/17/2013 13:33' prior: 21955653! createFile: aPath filesystem ensureCreateDirectory: aPath parent. (filesystem writeStreamOn: aPath) close! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21965188! testDeleteIfAbsent | flag reference | flag := false. reference := filesystem / 'plonk'. reference ensureCreateFile. reference exists ifFalse: [self error]. reference deleteIfAbsent: [flag := true]. self deny: flag. reference exists ifTrue: [self error]. reference deleteIfAbsent: [flag := true]. self assert: flag.! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21966462! testEnsureDeleted | reference | reference := filesystem / 'plonk'. "Deletes the file if it exists" reference ensureCreateFile. self assert: reference exists. reference ensureDelete. self deny: reference exists. "No-op if file does not exist" self shouldnt: [reference ensureDelete] raise: Error. ! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21967586! testExists | reference | reference := filesystem / 'plonk'. reference ensureCreateFile. self assert: reference exists. reference delete. self deny: reference exists. ! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21969289! testHasDirectories "self debug: #testHasDirectories" | ref children | filesystem createDirectory: '/alpha'. filesystem createDirectory: '/alpha/beta'. (filesystem / 'alpha' / 'beta' / 'delta') ensureCreateFile. filesystem createDirectory: '/alpha/gamma'. ref := filesystem / 'alpha'. self assert: ref hasDirectories. self deny: (ref / 'beta') hasDirectories. self deny: (ref / 'beta' / 'gamma') hasDirectories.! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21969806! testHasFiles "self debug: #testHasFiles" | ref children | filesystem createDirectory: '/alpha'. filesystem createDirectory: '/alpha/beta'. (filesystem / 'alpha' / 'beta' / 'delta') ensureCreateFile. filesystem createDirectory: '/alpha/beta/eta'. filesystem createDirectory: '/alpha/gamma'. ref := filesystem / 'alpha'. self deny: ref hasFiles. self assert: (ref / 'beta') hasFiles. self deny: (ref / 'beta' / 'gamma') hasFiles.! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 21977107! testRename | file newName tmp originalPwd originalFullName | [ file := (FileLocator imageDirectory / 'oldName') ensureCreateFile. originalFullName := file fullName. tmp := (FileLocator imageDirectory / 'tmp') ensureCreateDirectory. originalPwd := FileSystem disk workingDirectory. file renameTo: 'newName'. self deny: originalFullName asFileReference exists. self assert: file basename equals: 'newName'. self assert: (originalFullName asFileReference parent / 'newName') exists ] ensure: [ file delete. tmp deleteAll. ].! ! !FileReferenceTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:24' prior: 21977732! testRenameTargetExists | existingFile fileToRename | [ existingFile := 'existingFile' asFileReference ensureCreateFile. fileToRename := 'fileToRename' asFileReference ensureCreateFile. self should: [ fileToRename renameTo: existingFile basename ] raise: FileExists ] ensure: [ existingFile delete. fileToRename delete ].! ! !ChangeSet class methodsFor: 'defaults' stamp: 'S 6/17/2013 13:26' prior: 18848063! promptForDefaultChangeSetDirectoryIfNecessary "Check the Preference (if any), and prompt the user to change it if necessary. The default if the Preference is unset is the current directory. Answer the directory." "ChangeSet promptForDefaultChangeSetDirectoryIfNecessary" | choice directoryPath dir message | directoryPath := self defaultChangeSetDirectoryName. [dir := directoryPath asFileReference. dir exists] whileFalse: [message := 'The preferred change set directory' translated , ' (''{1}'') ' , 'does not exist.' translated , ' ' , 'Create it or use the default directory' translated , ' ({2})?' format: {directoryPath. FileSystem workingDirectory fullName}. choice := UIManager default chooseFrom: (#('Create directory' 'Use default directory and forget preference' 'Choose another directory' ) collect: [:ea | ea translated]) message: message. choice = 1 ifTrue: [dir ensureCreateDirectory ]. choice = 3 ifTrue: [dir := UIManager default chooseDirectory. directoryPath := dir ifNil: [''] ifNotNil: [dir pathName]]]. self defaultChangeSetDirectory: directoryPath. ^ dir! ! !MCCacheRepository class methodsFor: 'defaults' stamp: 'S 6/17/2013 13:26' prior: 24617505! defaultDirectory ^ 'package-cache' asFileReference ensureCreateDirectory; yourself! ! !StartupLoader methodsFor: 'private' stamp: 'S 6/17/2013 13:26' prior: 50895098! addAtStartup: aCollection inDirectory: aFileReference named: fileName | scriptFile | aFileReference ensureCreateDirectory. scriptFile := aFileReference / fileName. FileStream forceNewFileNamed: scriptFile fullName do: [ :stream | stream nextPutAll: (self buildStreamFor: aCollection) ]. ! ! !FilePluginPrims methodsFor: 'path primitives' stamp: 'CamilloBruni 6/17/2013 11:05' prior: 21941805! lookupDirectory: fullPath filename: fileName ^ #badDirectoryPath ! ! !FilePluginPrims methodsFor: 'path primitives' stamp: 'CamilloBruni 6/17/2013 11:06' prior: 36836269! lookupEntryIn: fullPath index: index "Look up the index-th entry of the directory with the given fully-qualified path (i.e., starting from the root of the file hierarchy) and return an array containing: The empty string enumerates the top-level files or drives. (For example, on Unix, the empty path enumerates the contents of '/'. On Macs and PCs, it enumerates the mounted volumes/drives.) The creation and modification times are in seconds since the start of the Smalltalk time epoch. DirFlag is true if the entry is a directory. FileSize the file size in bytes or zero for directories. The primitive returns nil when index is past the end of the directory. It fails if the given path is bad." ^ #badDirectoryPath ! ! !HDChangeReport methodsFor: 'running' stamp: 'S 6/17/2013 13:16' prior: 23110901! run 'changelog.xml' asFileReference ensureDelete writeStreamDo: [ :stream| self generateOn: stream ]! ! !HDLintReport methodsFor: 'generating' stamp: 'Anonymous 6/17/2013 13:16' prior: 23118404! generateClass: aClass on: aStream | sourceStream sourceName | sourceStream := WriteStream on: String new. sourceName := environment name , '-' , aClass name , '.st'. aStream tab; nextPutAll: ''; nextPut: Character lf. self generateClass: aClass source: sourceStream on: aStream. self generateClass: aClass class source: sourceStream on: aStream. aStream tab; nextPutAll: ''; nextPut: Character lf. sourceName asFileReference ensureDelete writeStreamDo: [ :stream | stream nextPutAll: sourceStream contents ]! ! !HDLintReport methodsFor: 'running' stamp: 'Anonymous 6/17/2013 13:16' prior: 23122260! run RBSmalllintChecker runRule: (RBCompositeLintRule rules: rules) onEnvironment: environment. (environment name , '-Lint.xml') asFileReference ensureDelete writeStreamDo: [ :stream| self generateOn: stream ]! ! !SmalltalkImage methodsFor: 'saving' stamp: 'S 6/17/2013 13:26' prior: 33542129! backupImageInFileNamed: aFileReference "Save the the image under the given file. Unlike #saveImageInFileNamed: this method continues evaluation in the original image after saving a backup copy. Note: This method does not save the .changes file, use #saveAs:" | imageFile previousFullImageName isNewSession | imageFile := aFileReference asFileReference. imageFile parent ensureCreateDirectory. previousFullImageName := self imagePath. isNewSession := false. [ "change to the new image name " self changeImagePathTo: imageFile fullName; closeSourceFiles; openSourceFiles. "so SNAPSHOT appears in new changes file" isNewSession := self snapshot: true andQuit: false. ] ensure: [ isNewSession ifFalse: [ "unlike #saveImageInFileNamed: we do NOT continue in the new image" "switch back to the old image" self changeImagePathTo: previousFullImageName; closeSourceFiles; openSourceFiles ]]. ^ isNewSession.! ! !SmalltalkImage methodsFor: 'saving' stamp: 'S 6/17/2013 13:26' prior: 33545292! saveChangesInFileNamed: aString | changesFile | changesFile := aString asFileReference. changesFile parent ensureCreateDirectory. "Ensure that the destination file is not the same as the original one" (Smalltalk changesFile absolutePath = changesFile absolutePath) ifFalse: [ changesFile deleteIfAbsent: [ ]. Smalltalk changesFile copyTo: changesFile ]. self setMacFileInfoOn: changesFile fullName! ! !SmalltalkImage methodsFor: 'saving' stamp: 'S 6/17/2013 13:26' prior: 34641783! saveImageInFileNamed: aFile "Save the image in the given file. Unlike #backupImageInFileNamed: this method continues evaluation in the new image after saving. Note: This method does not save the .changes file, use #saveAs:" | imageFile | imageFile := aFile asFileReference. imageFile parent ensureCreateDirectory. ^self changeImagePathTo: imageFile fullName; closeSourceFiles; openSourceFiles; "so SNAPSHOT appears in new changes file" snapshot: true andQuit: false! ! !MCWorkingCopyTest methodsFor: 'running' stamp: 'Anonymous 6/17/2013 13:16' prior: 25202200! clearPackageCache | dir | dir := MCCacheRepository uniqueInstance directory. " (dir filesMatching: 'MonticelloMocks*') do: [:ea | ea ensureDeleted ]." (dir filesMatching: 'MonticelloTest*') do: [:ea | ea ensureDelete]. (dir filesMatching: 'rev*') do: [:ea | ea ensureDelete]. (dir filesMatching: 'foo-*') do: [:ea | ea ensureDelete]. (dir filesMatching: 'foo2-*') do: [:ea | ea ensureDelete].! ! !ZipArchiveMember methodsFor: 'extraction' stamp: 'S 6/17/2013 13:26' prior: 55138515! extractInDirectory: aDirectory overwrite: overwriteAll "Extract this entry into the given directory. Answer #okay, #failed, #abort, or #retryWithOverwrite." | path fileDir file index localName | path := fileName findTokens: '/'. localName := path last. fileDir := path allButLast inject: aDirectory into: [ :base :part | base / part ]. fileDir ensureCreateDirectory. file := fileDir / localName. file exists ifTrue: [ overwriteAll ifFalse:[ [index := UIManager default chooseFrom: { 'Yes, overwrite'. 'No, don''t overwrite'. 'Overwrite ALL files'. 'Cancel operation' } lines: #(2) title: fileName, ' already exists. Overwrite?'. index == nil] whileTrue. index = 4 ifTrue:[^#abort]. index = 3 ifTrue:[^#retryWithOverwrite]. index = 2 ifTrue:[^#okay]. ]. file ensureDelete. file := [file ensureCreateFile] on: Error do:[:ex| ^#failed]. ]. file writeStreamDo: [ :str | self extractTo: str ]. ^#okay! ! !ZipArchiveMember methodsFor: 'accessing' stamp: 'S 6/17/2013 13:26' prior: 55130083! extractToFileNamed: aLocalFileName inDirectory: dir | file fullDir | self isEncrypted ifTrue: [ ^self error: 'encryption unsupported' ]. file := dir / aLocalFileName. file parent ensureCreateDirectory. self isDirectory ifFalse: [ fullDir forceNewFileNamed: file basename do: [:stream | self extractTo: stream]] ifTrue: [ fullDir ensureCreateDirectory ] ! ! !FileStreamTest methodsFor: 'private' stamp: 'S 6/17/2013 13:16' prior: 22012795! doTestsForReading: count intoBufferWithSize: readSize startingAt: startIndex fromFileOfSize: writeSize offsetBy: startOffset "Do the actual assertions for read/write buffers with the given parameters If offset > 0, some elements will be fetched from buffer. If count > writeSize - startOffset, not all will be successfully read." | file filename | filename := 'filestream.tst'. [ |writeBuffer readBuffer bytesRead| writeBuffer := (ByteArray new: writeSize). 0 to: writeSize -1 do: [:ix | writeBuffer at: ix +1 put: (ix \\ 255) + 1]. (StandardFileStream forceNewFileNamed: filename) binary ; nextPutAll: writeBuffer ; close. file := StandardFileStream readOnlyFileNamed: filename. readBuffer := ByteArray new: readSize. startOffset > 0 ifTrue: [file next: startOffset]. bytesRead := file readInto: readBuffer startingAt: startIndex count: count. "Test the count is correct, ie. either read count, or the remaining bytes in write buffer" self assert: ((writeSize - startOffset) min: count) equals: bytesRead. "quick test for total not written" self assert: readSize - bytesRead equals: (readBuffer occurrencesOf: 0). "compare test for readStream and what was in write" 1 to: readSize do: [ : n | |expected| expected := (n between: startIndex and: startIndex + bytesRead -1) ifTrue: [ (writeBuffer at: startOffset + n - startIndex +1) ] ifFalse: [ 0 ]. self assert: expected equals: (readBuffer at: n) ] ] ensure: [ file ifNotNil: [ file close ]. (FileSystem disk workingDirectory / filename) ensureDelete ]! ! !FileStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 22008784! testCachingNextChunkPut "Ensure that nextChunkPut:/nextChunk works properly on a caching file" | file text read | [file := FileStream forceNewFileNamed: 'testCachingNextChunkPut'. text := 'this is a chunkful of text'. file nextChunkPut: text. read := [file position: 0; nextChunkText] valueWithin: 1 seconds onTimeout:['']. self assert: read = text. ] ensure:[ file close. (FileSystem disk workingDirectory / file name) ensureDelete ].! ! !FileStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 22009315! testDetectFileDo | file | [ file := 'filestream.tst' asFileReference. file writeStreamDo: [ :s | s nextPutAll: '42' ]. FileStream detectFile: [ file readStream ] do: [ :stream | self assert: stream notNil. self deny: stream closed. self assert: stream contentsOfEntireFile = '42']] ensure: [ file ensureDelete ].! ! !FileStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 22009733! testFileTruncation "Ensure that nextChunkPut:/nextChunk works properly on a caching file" "self debug: #testFileTruncation" | file stream | file := 'TruncationTest.txt' asFileReference. [ file writeStreamDo: [ :s | s nextPutAll: '1234567890' ]. file writeStreamDo: [ :s | self assert: s contents equals: '1234567890'. s truncate: 4 ]. file readStreamDo: [ :s | self assert: s contents equals: '1234' ]. ] ensure: [ file ensureDelete ] ! ! !FileStreamTest methodsFor: 'testing' stamp: 'S 6/17/2013 13:16' prior: 22010275! testNextChunkOutOfBounds "self debug: #testNextChunkOutOfBounds" "Ensure that nextChunkPut:/nextChunk works properly on a caching file" | file text read | [file := FileStream forceNewFileNamed: 'testNextChunkOutOfBounds'. text := 'this is a chunkful of text'. file nextChunkPut: text. read := [file position: 999999; nextChunkText] valueWithin: 1 seconds onTimeout:[nil]. self assert: read = ''. ] ensure: [ file close. (FileSystem disk workingDirectory / file name) ensureDelete ].! ! !FileStreamTest methodsFor: 'testing' stamp: 'Anonymous 6/17/2013 13:16' prior: 22010856! testNextLine | filename lines text | filename := 'filestream.tst'. lines := #('line 1' ' and line 2' '' 'fourth'). text := lines first , String cr , lines second , String crlf , lines third , String lf , lines fourth. [ | file | (StandardFileStream forceNewFileNamed: filename) nextPutAll: text; close. file := StandardFileStream readOnlyFileNamed: filename. lines do: [ :e | self assert: file nextLine = e ]. self assert: file nextLine isNil. file close ] ensure: [ (FileSystem disk workingDirectory / filename) ensureDelete ].! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'S 6/17/2013 13:26' prior: 21829596! newDirectory "Create a new directory within the selected directory." |dir dirName title| dir := self selectedFileDirectory ifNil: [^self]. title := 'Create Directory' translated. dirName := self textEntry: 'Enter directory name' translated title: title. dirName ifNil: [^self]. [ (dir / dirName) exists ifTrue: [ ^self alert: 'A file or directory already exists\with the name' withCRs translated, ' "', dirName, '"' title: title ]. (dir / dirName) ensureCreateDirectory ] on: Error do: [:ex | ^self alert: 'Invalid directory name' translated, ' "', dirName, '"' title: title ]. self clearEntryCache; updateDirectories! ! !FileSystemHandleTest methodsFor: 'running' stamp: 'S 6/17/2013 13:16' prior: 22049503! tearDown handle ensureClosed. reference ensureDelete.! ! !FileSystemHandleTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:16' prior: 22050877! testEnsureClosed filesystem := self createFileSystem. reference := filesystem * 'plonk'. handle := reference openWritable: true. handle ensureClosed. self deny: handle isOpen. handle ensureClosed. reference ensureDelete. handle reference exists ifTrue: [self error]. self shouldnt: [ handle ensureClosed ] raise: Error.! ! !FileDialogWindowTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 39178326! testIssue6406 | aFolder dialog file invalidFolder | aFolder := (FileSystem workingDirectory / 'folder') ensureCreateDirectory. [ "Absolute folder paths work" dialog := FileDialogWindow new selectPathName: aFolder fullName. "just compare the lower-case path names for now since on mac the test will fail under certain circumstances..." self assert: dialog selectedFileDirectory fullName asLowercase equals: aFolder fullName asLowercase. "Relative folder paths work" dialog := FileDialogWindow new selectPathName: 'folder' asFileReference. self assert: dialog selectedFileDirectory fullName asLowercase equals: aFolder fullName asLowercase. "Invalid folder defaults to the working folder" invalidFolder := 'cant-possibly-exist-for-testIssue6406'. dialog := FileDialogWindow new selectPathName: invalidFolder. self assert: dialog selectedFileDirectory fullName asLowercase equals: FileSystem workingDirectory fullName asLowercase. ] ensure: [ aFolder ensureDelete. ]! ! !ZipArchive methodsFor: 'archive operations' stamp: 'S 6/17/2013 13:26' prior: 55113703! extractAllTo: aDirectory informing: bar overwrite: allOverwrite "Extract all elements to the given directory" | overwriteAll | overwriteAll := allOverwrite. self members do:[:entry| | dir | entry isDirectory ifTrue:[ bar ifNotNil: [bar label: 'Creating ', entry fileName]. dir := (entry fileName findTokens:'/') inject: aDirectory into:[:base :part| base / part]. dir ensureCreateDirectory. ]. ]. self members do:[:entry| | response | entry isDirectory ifFalse:[ bar ifNotNil: [bar label: 'Extracting ', entry fileName]. response := entry extractInDirectory: aDirectory overwrite: overwriteAll. response == #retryWithOverwrite ifTrue:[ overwriteAll := true. response := entry extractInDirectory: aDirectory overwrite: overwriteAll. ]. response == #abort ifTrue:[^self]. response == #failed ifTrue:[ (self confirm: 'Failed to extract ', entry fileName, '. Proceed?') ifFalse:[^self]. ]. ]. ]. ! ! !FileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:26' prior: 21949176! copyTo: aReference self isDirectory ifTrue: [ aReference ensureCreateDirectory ] ifFalse: [ filesystem = aReference fileSystem ifTrue: [ filesystem copy: path to: aReference path ] ifFalse: [ filesystem copy: path toReference: aReference ] ]! ! !FileReference methodsFor: 'operations' stamp: 'S 6/17/2013 13:33'! ensureCreateDirectory "Create if necessary a directory for the receiver." filesystem ensureCreateDirectory: path ! ! !FileSystemStore methodsFor: 'public' stamp: 'S 6/17/2013 13:33'! ensureCreateDirectory: aPath (self isDirectory: aPath) ifTrue: [ ^ self ]. self ensureCreateDirectory: aPath parent. self createDirectory: aPath! ! !MCMczInstallerTest methodsFor: 'as yet unclassified' stamp: 'Anonymous 6/17/2013 13:16' prior: 24818927! deleteFile self fileName asFileReference ensureDelete! ! !CopyVisitor methodsFor: 'visiting' stamp: 'S 6/17/2013 13:26' prior: 20224239! visitDirectory: anEntry | reference | reference := anEntry reference. reference = source ifTrue: [dest ensureCreateDirectory] ifFalse: [self copyDirectory: reference]! ! !MCDirectoryRepository methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/17/2013 14:11' prior: 24757770! writeStreamForFileNamed: aString replace: shouldReplace do: aBlock | file | file := directory / aString. shouldReplace ifTrue: [ file ensureDelete ]. file writeStreamDo: [ :stream | aBlock value: stream ].! ! !ZipStore methodsFor: 'public' stamp: 'S 6/17/2013 13:33' prior: 55215895! open | archive output | self reference exists ifFalse: [ ^ self ]. archive := ZipArchive new. self reference readStreamDo: [ :input | archive readFrom: input contents readStream. archive members do: [ :member | | path | path := self pathFromMember: member. member isDirectory ifTrue: [ self ensureCreateDirectory: path ] ifFalse: [ self ensureCreateDirectory: path parent. self createFile: path. self replaceFile: path in: [ :bytes | output := bytes writeStream. member rewindData. member copyRawDataTo: output. output contents ] ] ] ]. ^ self! ! !GZipReadStream class methodsFor: 'unzipping' stamp: 'S 6/17/2013 13:26' prior: 22848573! unzip: fullFileName to: pathString "Unzip the contents of the file specified by the full path name fullFileName to the location given by pathString." | zipped buffer unzipped newName | newName := fullFileName copyUpToLast: FileSystem disk extensionDelimiter. pathString asFileReference ensureCreateDirectory. unzipped := FileStream newFileNamed: (pathString asFileReference / newName) fullName. unzipped isNil ifTrue: [self error: pathString, ' looks incorrect']. [ unzipped binary. zipped := self on: (FileStream readOnlyFileNamed: fullFileName). buffer := ByteArray new: 50000. [zipped atEnd] whileFalse: [unzipped nextPutAll: (zipped nextInto: buffer)]] ensure: [ zipped close. unzipped close]. ^ newName! ! !ZipArchiveTest methodsFor: 'tests' stamp: 'S 6/17/2013 13:26' prior: 55154200! setUp | now | now := DateAndTime now asString replaceAll: $: with: $_. fileToZip := ('_test-zip-file', now) asFileReference. fileToZip writeStreamDo: [ :stream | stream nextPutAll: 'file contents' ]. subdir := ('_test-zip-dir', now) asFileReference. subdir ensureCreateDirectory. zipFile := ('pharo_test', now) asFileReference, 'zip'. zip := ZipArchive new. ! ! !FileSystem methodsFor: 'public' stamp: 'S 6/17/2013 13:33'! ensureCreateDirectory: aResolvable "Resolve the argument to an absolute path, then ask the store to make sure that all the directories contained in the argument path exist or are created." store ensureCreateDirectory: (self resolve: aResolvable)! ! MemoryFileSystemDirectory removeSelector: #ensureFile:! MemoryFileSystemDirectory removeSelector: #ensureDirectory:! FileReference removeSelector: #ensureDirectory! FileSystem removeSelector: #ensureDirectory:! FileSystemStore removeSelector: #ensureDirectory:! "Compression"! "CompressionTests"! "FileSystem-Core"! "FileSystem-Disk"! "FileSystem-Memory"! "FileSystem-Tests-Core"! "FileSystem-Zip"! "FuelTests"! "HudsonBuildTools20"! "Monticello"! "Multilingual-Tests"! "Polymorph-Widgets"! "StartupPreferences"! "System-Changes"! "System-Support"! "Tests"! "Tools"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(17 June 2013 2:20:03 pm) Pharo.image priorSource: 6449775! ----STARTUP----an Array(17 June 2013 2:38:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 June 2013 2:38:43 pm) Pharo-30201.image priorSource: 6500479! ----STARTUP----an Array(17 June 2013 3:46:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/17/2013 15:44' prior: 40004510! commentForCurrentUpdate ^ '10927 Update Image with latest Opal https://pharo.fogbugz.com/f/cases/10927 10926 #fileOutMethod:on: is uncategorized https://pharo.fogbugz.com/f/cases/10926 10932 RBRefactoringChangeTests should recreate Mock class in setup https://pharo.fogbugz.com/f/cases/10932'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/17/2013 15:44'! script301 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-StephaneDucasse.23.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.32.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1482.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.10.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-StephaneDucasse.27.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.841.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.851.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-StephaneDucasse.551.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1145.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/17/2013 15:44'! update30202 "self new update30202" self withUpdateLog: '10927 Update Image with latest Opal https://pharo.fogbugz.com/f/cases/10927 10926 #fileOutMethod:on: is uncategorized https://pharo.fogbugz.com/f/cases/10926 10932 RBRefactoringChangeTests should recreate Mock class in setup https://pharo.fogbugz.com/f/cases/10932'. self loadTogether: self script301 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OpalCompiler commentStamp: '' prior: 39482703! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'MarcusDenker 6/14/2013 13:30' prior: 39016842! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVarForDeclaration: name. var ifNotNil: [ self variable: aVariableNode shadows: var. (var scope ~= scope and: [ scope isOptimizedBlockScope not ]) ifTrue: [ "Create new var that shadows outer one" var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode binding: var. ^ var! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'MarcusDenker 6/14/2013 15:48' prior: 39245707! testSemanticAnalysisOnNonMethodNode | ast | { [ 1+ 2 ] . thisContext . (OCOpalExamples>>#exampleReturn1) } do: [ :object | ast := object sourceNode. self shouldnt: [ ast doSemanticAnalysis ] raise: Error. ]. #( '1' 'true' 'nil' '1 + 2' '^1' '1 + 2. 2 + 3' '#(1 true)' '{ #foo . 1 }' '1+2;+3' ) do: [ :source | ast := RBExplicitVariableParser parseExpression: source. self shouldnt: [ ast doSemanticAnalysis ] raise: Error ]. ast := RBExplicitVariableParser parseMethod: 'foo 1 + 2'. self shouldnt: [ ast doSemanticAnalysis ] raise: Error ! ! !OCClassScope methodsFor: 'lookup' stamp: 'MarcusDenker 6/14/2013 15:22' prior: 34916715! lookupVar: name "Return a SemVar for my pool var with this name. Return nil if none found" ^(class bindingOf: name asSymbol) ifNotNil: [:assoc | OCLiteralVariable new assoc: assoc; scope: self; yourself] ! ! !OCClassScope methodsFor: 'lookup' stamp: 'MarcusDenker 6/5/2013 13:52'! lookupVarForDeclaration: name ^self lookupVar: name! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'nice 5/1/2013 23:03'! emitAnd: aMessageNode self visitNode: aMessageNode receiver. methodBuilder pushDup; jumpAheadTo: #end if: false; popTop. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'nice 5/1/2013 23:02' prior: 34776677! emitIfFalse: aMessageNode self visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #false if: false. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #false. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'MarcusDenker 6/11/2013 15:52'! emitIfNotNil: aMessageNode | args | self visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first binding emitStore: methodBuilder ]. methodBuilder pushDup. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #end if: true. methodBuilder popTop. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'nice 5/1/2013 23:03' prior: 34777117! emitIfTrue: aMessageNode self visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. methodBuilder pushLiteral: nil. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'inline messages' stamp: 'nice 5/1/2013 23:03'! emitOr: aMessageNode self visitNode: aMessageNode receiver. methodBuilder pushDup; jumpAheadTo: #end if: true; popTop. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslatorForValue methodsFor: 'visitor-double dispatching' stamp: 'nice 5/2/2013 00:21'! visitSequenceNode: aSequenceNode | statements | statements := aSequenceNode statements. statements ifEmpty: [ methodBuilder pushLiteral: nil. ^self]. statements allButLastDo: [:each | effectTranslator visitNode: each]. self visitNode: statements last.! ! !OCUnusedVariableWarning methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/14/2013 17:02'! defaultAction | answer | self errorNotification ifFalse: [ ^nil ]. answer := UIManager default chooseFrom: #('yes' 'no') lines: #() title: node name asWideString, ' appears to be unused in this method. OK to remove it?' withCRs. (answer = 2 ) ifTrue: [ ^self]. self methodNode body removeTemporaryNamed: node name. self requestor correctFrom: node start to: node stop with: ''. self methodNode source: self requestor text. ! ! !CompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 6/14/2013 15:49' prior: 39481592! parserClass ^ parserClass ifNil: [ parserClass := RBExplicitVariableParser ]! ! !OCAbstractVariable methodsFor: 'accessing' stamp: 'MarcusDenker 6/13/2013 14:59'! isArg ^false! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 6/14/2013 15:42'! isUndeclared ^ false! ! !OCUndeclaredVariable methodsFor: 'accessing' stamp: 'MarcusDenker 6/14/2013 15:36'! assoc ^Undeclared associationAt: name! ! !OCUndeclaredVariable methodsFor: 'emitting' stamp: 'MarcusDenker 6/14/2013 15:36'! emitStore: methodBuilder methodBuilder storeIntoLiteralVariable: self assoc ! ! !OCUndeclaredVariable methodsFor: 'emitting' stamp: 'MarcusDenker 6/14/2013 15:36'! emitValue: methodBuilder methodBuilder pushLiteralVariable: self assoc. ! ! !OCUndeclaredVariable methodsFor: 'testing' stamp: 'MarcusDenker 6/14/2013 15:42'! isUndeclared ^ true! ! !OCUndeclaredVariable methodsFor: 'accessing' stamp: 'MarcusDenker 6/14/2013 15:33'! name ^ name! ! !OCUndeclaredVariable methodsFor: 'accessing' stamp: 'MarcusDenker 6/14/2013 15:33'! name: anObject name := anObject! ! !OpalCompiler commentStamp: '' prior: 40065863! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 6/17/2013 12:51' prior: 39239638! compilationContext ^ compilationContext ifNil: [ compilationContext := self compilationContextClass default ]! ! !OpalCompiler methodsFor: 'public access' stamp: 'GiselaDecuzzi 6/11/2013 14:39' prior: 39484274! parse | expression selector arguments method | self compilationContext noPattern ifFalse: [^self parseMethod]. expression := (self parseExpression) asSequenceNode transformLastToReturn. context ifNil: [selector := #DoIt. arguments := #()] ifNotNil: [selector := #DoItIn:. arguments := {(RBVariableNode named:'ThisContext')}]. method := RBMethodNode selector: selector arguments: arguments body: expression. context ifNotNil: [context tempNames do: [:tempName | method :=method rewriteTempNamedWrite: tempName forContext: context. method :=method rewriteTempNamedRead: tempName forContext: context. ]]. ^method ! ! !OpalCompiler methodsFor: 'private' stamp: 'GiselaDecuzzi 6/11/2013 14:41'! parseExpression | parseClass | parseClass := self compilationContext parserClass. ^self useFaultyForParsing ifTrue: [parseClass parseFaultyExpression: source contents] ifFalse: [parseClass parseExpression: source contents]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 6/14/2013 15:48' prior: 39485128! parseLiterals: aString ^RBExplicitVariableParser parseLiterals: aString! ! !OpalCompiler methodsFor: 'private' stamp: 'GiselaDecuzzi 6/11/2013 14:36'! parseMethod | parseClass | parseClass := self compilationContext parserClass. ^self useFaultyForParsing ifTrue: [parseClass parseFaultyMethod: source contents] ifFalse: [parseClass parseMethod: source contents]! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 6/14/2013 15:48' prior: 36007600! parseSelector: aString "Answer the message selector for the argument, aString, which should parse successfully up to the temporary declaration or the end of the method header." ^[RBExplicitVariableParser parseMethodPattern: aString] on: Error do: [nil].! ! !OpalCompiler methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/11/2013 13:56'! useFaultyForParsing ^ useFaultyForParsing ifNil: [ useFaultyForParsing := false ]! ! !OpalCompiler methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/11/2013 13:55'! useFaultyForParsing: anObject useFaultyForParsing := anObject! ! !CCompilationContext methodsFor: 'accessing' stamp: 'MarcusDenker 6/14/2013 15:49' prior: 39479789! parserClass ^ parserClass ifNil: [ parserClass := RBExplicitVariableParser ]! ! !OCAbstractScope methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2013 13:53'! lookupVarForDeclaration: name "subclass responsibility" ^ self outerScope lookupVarForDeclaration: name! ! !OCInstanceScope methodsFor: 'lookup' stamp: 'MarcusDenker 6/14/2013 13:34'! lookupVarForDeclaration: name "Return a ScopeVar for my inst var with this name. Return nil if none found" name = 'self' ifTrue: [^ selfVar]. name = 'super' ifTrue: [^ superVar]. ^ vars at: name ifAbsent: [self outerScope lookupVarForDeclaration: name]! ! !RBRefactoringChangeTests methodsFor: 'mocking' stamp: 'MarcusDenker 6/17/2013 14:53' prior: 31122213! changeMock ^ Smalltalk at: #RBRefactoringChangeMock! ! !RBRefactoringChangeTests methodsFor: 'mocking' stamp: 'MarcusDenker 6/17/2013 15:05'! createMockClass self class compiler evaluate: 'Object subclass: #RBRefactoringChangeMock instanceVariableNames: ''instVar'' classVariableNames: ''ClassVar'' poolDictionaries: '''' category: ''Refactoring-Tests-Changes'''. self class compiler evaluate: 'RBRefactoringChangeMock class instanceVariableNames: ''classInstVar'''. self changeMock compile: 'one ^ 1' classified: 'accessing'.! ! !RBRefactoringChangeTests methodsFor: 'mocking' stamp: 'MarcusDenker 6/17/2013 14:56'! removeMockClass Smalltalk removeClassNamed: #RBRefactoringChangeMock.! ! !RBRefactoringChangeTests methodsFor: 'running' stamp: 'MarcusDenker 6/17/2013 14:53' prior: 31122541! setUp super setUp. self createMockClass. changes := RBCompositeRefactoryChange named: 'testing'! ! !RBRefactoringChangeTests methodsFor: 'running' stamp: 'MarcusDenker 6/17/2013 15:02'! tearDown super tearDown. self removeMockClass. ! ! !RBRefactoringChangeTests methodsFor: 'mocking' stamp: 'MarcusDenker 6/17/2013 15:24' prior: 31122441! text "for #testPerformAddRemoveMethodInteractively" ^'method ^1'! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'nice 5/1/2013 18:03' prior: 34755184! emitAnd: aMessageNode self shouldBeSentToValueOrEffectTranslator ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'nice 5/1/2013 16:11' prior: 34758056! emitIfFalseIfTrue: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: true. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. self visitInlinedBlockNode: aMessageNode arguments last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 6/11/2013 15:52' prior: 39024904! emitIfNilIfNotNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args last arguments ifNotEmpty: [ args last arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #notNilCase if: false. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #notNilCase. self visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'nice 5/1/2013 21:01' prior: 39025562! emitIfNotNil: aMessageNode self shouldBeSentToValueOrEffectTranslator! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 6/11/2013 15:52' prior: 39026181! emitIfNotNilIfNil: aMessageNode | args | valueTranslator visitNode: aMessageNode receiver. args := aMessageNode arguments. args first arguments ifNotEmpty: [ args first arguments first binding emitStore: methodBuilder ]. methodBuilder pushLiteral: nil. methodBuilder send: #==. methodBuilder jumpAheadTo: #else if: true. self visitInlinedBlockNode: args first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. self visitInlinedBlockNode: args last. methodBuilder jumpAheadTarget: #end! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'nice 5/1/2013 16:11' prior: 34760896! emitIfTrueIfFalse: aMessageNode valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: false. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. self visitInlinedBlockNode: aMessageNode arguments last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'nice 5/1/2013 18:03' prior: 34761811! emitOr: aMessageNode self shouldBeSentToValueOrEffectTranslator ! ! !OCASTTranslator methodsFor: 'errors' stamp: 'nice 5/1/2013 18:03'! shouldBeSentToValueOrEffectTranslator self error: 'should be sent only to valueTranslator or effectTranslator'! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 38897261! visitArrayNode: anArrayNode | elementNodes | elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 6/11/2013 15:52' prior: 39029483! visitAssignmentNode: anAssignmentNode valueTranslator visitNode: anAssignmentNode value. anAssignmentNode variable binding emitStore: methodBuilder ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'nice 5/1/2013 18:09' prior: 38897807! visitBlockNode: aBlockNode | tempNames argumentNames copiedNames | aBlockNode arguments size >15 ifTrue: [self backendError: 'Too many arguments' forNode: aBlockNode ]. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. argumentNames := aBlockNode argumentNames asArray. tempNames := (aBlockNode scope tempVars asArray collect: [ :each | each name]) copyWithoutAll: argumentNames. copiedNames := (aBlockNode scope inComingCopiedVars asArray collect: [:each | each name]). methodBuilder pushClosureCopyCopiedValues: copiedNames args: argumentNames jumpTo: #block. aBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aBlockNode scope tempVectorName withVars: (aBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. valueTranslator visitNode: aBlockNode body. methodBuilder addBlockReturnTopIfRequired. self flag: 'why dont we just add a blockReturnTop here... it could be removed or ignored in IRTranslator'. methodBuilder jumpAheadTarget: #block. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'nice 5/1/2013 16:13' prior: 38898996! visitCascadeNode: aCascadeNode valueTranslator visitNode: aCascadeNode receiver. aCascadeNode messages allButLastDo: [:node | methodBuilder pushDup. effectTranslator visitNode: node. ]. self visitNode: aCascadeNode messages last. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 38899345! visitInlinedBlockNode: anOptimizedBlockNode "We are visiting a scope that is not a block, but inlined in the outer context. This means: - we do not create a Block - we call IRBuilder to add temps " | argumentNames tempNames copiedNames | argumentNames := anOptimizedBlockNode argumentNames asArray. tempNames := (anOptimizedBlockNode scope tempVars collect: [ :each | each name asSymbol]) copyWithoutAll: argumentNames. copiedNames := (anOptimizedBlockNode scope inComingCopiedVars collect: [:each | each name]) asArray. anOptimizedBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: anOptimizedBlockNode scope tempVectorName withVars: (anOptimizedBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. methodBuilder addTemps: copiedNames. methodBuilder addTemps: argumentNames. anOptimizedBlockNode isInlinedLoop ifTrue: [ tempNames do: [ :tempName | methodBuilder pushLiteral: nil. methodBuilder storeTemp: tempName. methodBuilder popTop. ]]. self visitNode: anOptimizedBlockNode body.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 38900562! visitLiteralArrayNode: aRBLiteralArrayNode methodBuilder pushLiteral: aRBLiteralArrayNode value. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 38900762! visitLiteralNode: aLiteralNode methodBuilder pushLiteral: aLiteralNode value. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 4/11/2013 15:12' prior: 38900940! visitMessageNode: aMessageNode aMessageNode isInlined ifTrue: [ methodBuilder addLiteral: aMessageNode selector. "so searching for senders will work" ^self perform: ('emit', aMessageNode selector asOneArgSelector capitalized) asSymbol with: aMessageNode]. ^ self emitMessageNode: aMessageNode! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'nice 5/2/2013 00:22' prior: 38902844! visitSequenceNode: aSequenceNode self shouldBeSentToValueOrEffectTranslator! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 6/14/2013 15:44'! isUndeclared ^self binding isUndeclared! ! !OCAbstractMethodScope methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 6/5/2013 13:53'! lookupVarForDeclaration: name tempVars at: name ifPresent: [:v | ^ v]. name = 'thisContext' ifTrue: [^ thisContextVar]. ^self outerScope lookupVarForDeclaration: name ! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 6/14/2013 15:42' prior: 38920938! defaultAction | varName | ^super defaultAction ifNil: [ varName := node name asSymbol. Undeclared at: varName put: nil. OCUndeclaredVariable new name: varName]! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 6/17/2013 12:51' prior: 35005502! testLiteralCharacter | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: $e; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = $e). ^iRMethod ! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'nice 5/1/2013 15:58' prior: 34773021! emitAnd: aMessageNode self emitIfTrue: aMessageNode! ! !OCASTTranslatorForEffect methodsFor: 'inline messages' stamp: 'nice 5/1/2013 15:58' prior: 34775324! emitOr: aMessageNode self emitIfFalse: aMessageNode! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'nice 5/2/2013 00:21'! visitSequenceNode: aSequenceNode aSequenceNode statements do: [:each | self visitNode: each].! ! OCASTTranslatorForEffect removeSelector: #visitInlinedBlockNode:! OCASTTranslatorForEffect removeSelector: #visitCascadeNode:! OCASTTranslatorForEffect removeSelector: #emitIfTrueIfFalse:! OCASTTranslatorForEffect removeSelector: #emitIfNotNilIfNil:! OCASTTranslatorForEffect removeSelector: #emitIfNilIfNotNil:! OCASTTranslatorForEffect removeSelector: #emitIfFalseIfTrue:! RBRefactoringChangeMock removeSelector: #one! Smalltalk globals removeClassNamed: #RBRefactoringChangeMock! OCCompiledMethodIntegrityTests removeSelector: #testComplexMethodClassBuilder! OCUnusedVariableWarning removeSelector: #openMenuIn:! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! TraitDescription removeSelector: #methodsInCategory:! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! ClassDescription removeSelector: #methodsInCategory:! "Kernel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Refactoring-Tests-Changes"! "Traits"! ----End fileIn----! ----QUIT----an Array(17 June 2013 3:46:56 pm) Pharo.image priorSource: 6500677! ----STARTUP----an Array(17 June 2013 3:55:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 June 2013 3:55:09 pm) Pharo-30202.image priorSource: 6532482! ----STARTUP----an Array(17 June 2013 4:45:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/17/2013 16:43' prior: 40055408! commentForCurrentUpdate ^ '10933 Fixing delete raising exception post symptoms https://pharo.fogbugz.com/f/cases/10933 10921 Smalltalk vm headlessOption returns wrong value with latest VM https://pharo.fogbugz.com/f/cases/10921 10878 Clean un in Morphic part2 https://pharo.fogbugz.com/f/cases/10878 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/17/2013 16:43'! script302 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.764.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1482.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.12.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.841.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.853.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.553.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1145.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/17/2013 16:43'! update30203 "self new update30203" self withUpdateLog: '10933 Fixing delete raising exception post symptoms https://pharo.fogbugz.com/f/cases/10933 10921 Smalltalk vm headlessOption returns wrong value with latest VM https://pharo.fogbugz.com/f/cases/10921 10878 Clean un in Morphic part2 https://pharo.fogbugz.com/f/cases/10878 '. self loadTogether: self script302 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MultiByteFileStreamTest methodsFor: 'testing' stamp: 'StephaneDucasse 6/17/2013 15:55' prior: 27243761! tearDown 'foobug6933' asFileReference ensureDelete. self lineEndTestFile asFileReference ensureDelete.! ! !VirtualMachine methodsFor: 'accessing' stamp: 'CamilloBruni 6/17/2013 16:28' prior: 40000438! optionDash "VMs release in Mai 2013 use -- instead of - for VM command line options" ^ (Smalltalk vm interpreterSourceDate > '2013-05-17' asDate) ifTrue: [ '--' ] ifFalse: [ '-' ]! ! !ZipArchiveTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/17/2013 15:54' prior: 55154641! tearDown fileToZip ensureDelete. zip close. subdir ensureDeleteAll. zipFile ensureDelete.! ! !BasicCodeLoaderTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/17/2013 15:55' prior: 17995403! testInstallSourceFilesFail | codeLoader | codeLoader := BasicCodeLoader new. codeLoader loadSourceFiles: {'codeLoad1.st'}. "Ensure file is not there" (FileSystem disk workingDirectory / 'codeLoad1.st') asFileReference ensureDelete. "Trying non existing file" self should: [ codeLoader installSourceFiles ] raise: Error.! ! !Morph methodsFor: 'events-accessing' stamp: 'gvc 9/11/2009 17:43' prior: 39918595! actionMap "Answer an action map" ^self updateableActionMap! ! !PNGReadWriterTest methodsFor: 'helpers' stamp: 'StephaneDucasse 6/17/2013 15:54' prior: 28925722! deleteFile fileName asFileReference ensureDelete! ! !PluggableTextMorphWithLimits methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/10/2013 04:08' prior: 29590540! backgroundColorFor: rect "Return the current fillStyle of the receiver." | basicColor | basicColor := self basicColor. self warningLimit negative ifTrue: [ ^ basicColor ]. textMorph ifNotNil: [ | size | size := self textSize. ( size >= self warningLimit ) ifTrue: [ | overshoot transitionSpan transitionColor | transitionSpan := self warningLimit. transitionColor := Color yellow mixed: 0.6 with: self basicColor. ( size >= self alertLimit ) ifFalse: [ overshoot := size - self warningLimit ] ifTrue: [ transitionSpan := self alertLimit - self warningLimit. basicColor := transitionColor mixed: 0.5 with: self basicColor. transitionColor := (Color orange mixed: 0.5 with: Color red) mixed: 0.5 with: self basicColor. overshoot := size - self alertLimit ]. ^ CompositeFillStyle fillStyles: { (GradientFillStyle ramp: {0->transitionColor. 1 -> basicColor }) origin: (rect width/2) asFloat @ rect bottom; direction: 0@((12+(2*rect height*overshoot / transitionSpan)) negated asFloat); normal: 0@1; radial: false; yourself. (GradientFillStyle ramp: {0 -> Smalltalk ui theme lightBaseColor. 0.3->(Smalltalk ui theme lightBaseColor alpha: 0.01) }) origin: rect left @ (rect height/2) asFloat; direction: (rect width)@0; normal: 1@0; radial: false; yourself } " ^ transitionColor mixed: overshoot / transitionSpan with: basicColor" ] ]. ^ basicColor ! ! "CompressionTests"! "Graphics-Tests"! "Morphic-Base"! "Multilingual-Tests"! "System-Support"! "Tests"! ----End fileIn----! ----QUIT----an Array(17 June 2013 4:45:52 pm) Pharo.image priorSource: 6532680! ----STARTUP----an Array(17 June 2013 4:54:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 June 2013 4:54:09 pm) Pharo-30203.image priorSource: 6546555! ----STARTUP----an Array(18 June 2013 8:53:42 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/18/2013 08:49' prior: 40087411! commentForCurrentUpdate ^ '10912 Add simple #fuelTo: aFile method on Object https://pharo.fogbugz.com/f/cases/10912 10919 Direct reference to ClassBuilder in a test case in Tests-System https://pharo.fogbugz.com/f/cases/10919 10930 Clean up #modelSleep https://pharo.fogbugz.com/f/cases/10930 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/18/2013 08:50'! script303 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-StephaneDucasse.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1483.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.13.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.130.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.197.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.853.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.13.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1145.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/18/2013 08:50'! update30204 "self new update30204" self withUpdateLog: '10912 Add simple #fuelTo: aFile method on Object https://pharo.fogbugz.com/f/cases/10912 10919 Direct reference to ClassBuilder in a test case in Tests-System https://pharo.fogbugz.com/f/cases/10919 10930 Clean up #modelSleep https://pharo.fogbugz.com/f/cases/10930 '. self loadTogether: self script303 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassQueryTest methodsFor: 'dependencies' stamp: 'MartinDias 6/17/2013 18:51' prior: 19322588! testReferencedClasses " self debug: #testReferencedClasses " | refs | refs := Metaclass referencedClasses. self assert: (refs includes: SystemAnnouncer). refs := self class referencedClasses. self assert: (refs includesAllOf: {SoundService . Beeper})! ! !SystemWindow methodsFor: 'resize/collapse' stamp: 'MarcusDenker 6/17/2013 13:44' prior: 51766429! collapseOrExpand "Collapse or expand the window, depending on existing state. Use the taskbar if present, otherwise do as normal." | cf | self isTaskbarPresent ifTrue: [^self minimizeOrRestore]. isCollapsed ifTrue: ["Expand -- restore panes to morphics structure" isCollapsed := false. self activate. "Bring to frint first" collapsedFrame := self getBoundsWithFlex. collapseBox ifNotNil: [collapseBox setBalloonText: 'Collapse this window']. self setBoundsWithFlex: fullFrame. paneMorphs reverseDo: [:m | self addMorph: m unlock. self world startSteppingSubmorphsOf: m]. self addPaneSplitters; addGripsIfWanted] ifFalse: ["Collapse -- remove panes from morphics structure" isCollapsed := true. fullFrame := self getBoundsWithFlex. "First save latest fullFrame" paneMorphs do: [:m | m delete; releaseCachedState]. self removePaneSplitters. self removeGrips. cf := self getCollapsedFrame. collapsedFrame ifNil: [collapsedFrame := cf]. self setBoundsWithFlex: cf. collapseBox ifNotNil: [collapseBox setBalloonText: 'expand this window']. expandBox ifNotNil: [expandBox setBalloonText: 'expand to full screen']]. self layoutChanged. "This gets invoked only if the taskbar is not present, if it is, then minimizeOrRestore is invoked (cf beginning of this method)" self announce: (WindowCollapsed new window: self; yourself).! ! !SystemWindow methodsFor: 'resize/collapse' stamp: 'MarcusDenker 6/17/2013 13:44' prior: 51770555! minimizeOrRestore "Collapse or expand the window, depending on existing state" |mc windowEvent | isCollapsed ifTrue: ["Expand -- restore panes to morphics structure" self theme settings animationSettings useAnimation ifTrue: [self animateRestoreFromMinimized]. isCollapsed := false. "Bring to front first" self setBoundsWithFlex: fullFrame; comeToFront; show. mc := self modalChild. paneMorphs reverseDo: [:m | mc ifNil: [m unlock]. self addMorph: m. self world startSteppingSubmorphsOf: m]. self activate] ifFalse: ["Collapse -- remove panes from morphics structure" isCollapsed := true. fullFrame := self getBoundsWithFlex. "First save latest fullFrame" paneMorphs do: [:m | m delete; releaseCachedState]. self setBoundsWithFlex: (-100 @ -100 extent: 2 @ 2); "place offscreen" hide. self theme settings animationSettings useAnimation ifTrue: [self animateMinimize]. self isActive ifTrue: [ self world navigateVisibleWindowForward]]. self layoutChanged. "This gets invoked only if the taskbar is present, see sender of minimizeOrRestore" windowEvent := self isMinimized ifTrue: [ WindowCollapsed new ] ifFalse: [ WindowExpanded new ]. windowEvent window: self. self announce: windowEvent.! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 6/17/2013 13:44' prior: 51729508! passivate "Make me unable to respond to mouse and keyboard" super passivate. self setStripeColorsFrom: self paneColorToUse. self isEmbedded ifTrue: [^self]. "Control boxes remain active, except in novice mode" self lockInactivePortions. labelArea ifNil: "i.e. label area is nil, so we're titleless" [self adjustBorderUponDeactivationWhenLabeless]! ! !Object methodsFor: '*Fuel' stamp: 'CamilloBruni 6/14/2013 09:59'! serializeToFileNamed: aFilename ^ FLSerializer serialize: self toFileNamed: aFilename! ! Object removeSelector: #modelSleep! "Fuel"! "Kernel"! "Morphic-Base"! "Polymorph-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(18 June 2013 8:53:54 am) Pharo.image priorSource: 6546753! ----STARTUP----an Array(18 June 2013 9:01:34 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 June 2013 9:01:34 am) Pharo-30204.image priorSource: 6561485! ----STARTUP----an Array(19 June 2013 7:49:43 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/19/2013 07:46' prior: 40101484! commentForCurrentUpdate ^ '10951 Debugger add new Method class choice dialog should show traits https://pharo.fogbugz.com/f/cases/10951 10958 Tabs model https://pharo.fogbugz.com/f/cases/10958 10959 metacelloPlatformAttributes not updated for Pharo3 https://pharo.fogbugz.com/f/cases/10959 10960 Pass on Tabs https://pharo.fogbugz.com/f/cases/10960 10961 Fix pluggableTextMorphWithLimits color https://pharo.fogbugz.com/f/cases/10961 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/19/2013 07:47'! script304 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1483.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.472.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.44.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-EstebanLorenzano.162.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1147.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/19/2013 07:47'! update30205 "self new update30205" self withUpdateLog: '10951 Debugger add new Method class choice dialog should show traits https://pharo.fogbugz.com/f/cases/10951 10958 Tabs model https://pharo.fogbugz.com/f/cases/10958 10959 metacelloPlatformAttributes not updated for Pharo3 https://pharo.fogbugz.com/f/cases/10959 10960 Pass on Tabs https://pharo.fogbugz.com/f/cases/10960 10961 Fix pluggableTextMorphWithLimits color https://pharo.fogbugz.com/f/cases/10961 '. self loadTogether: self script304 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SequenceableCollection methodsFor: '*Tabs' stamp: 'BenjaminVanRyseghem 6/18/2013 18:48'! max: aBlock | max | self ifEmpty: [ ^ nil ]. max := aBlock value: self first. self allButFirstDo: [ :each || value | value := aBlock value: each. value > max ifTrue: [ max := value ] ]. ^ max! ! !TabManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/18/2013 19:51'! adoptPaneColor: aColor "Prevent submorphs to be polluted by window color" self color: aColor! ! !TabManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/18/2013 18:55'! minExtent ^ 100@50! ! !TabManager methodsFor: '*Spec-Widgets' stamp: 'BenjaminVanRyseghem 6/9/2013 00:46'! setTabs: aBlock self tabs: aBlock value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:47'! ensureWidget self widget ifNotNil: [ :w | ^ w ]. self buildWithSpec. ^ self widget! ! !PluggableTextMorphWithLimits methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/18/2013 16:34' prior: 40099353! backgroundColorFor: rect "Return the current fillStyle of the receiver." | basicColor defaultColor | defaultColor := Smalltalk ui theme textEditorNormalFillStyleFor: self. basicColor := self basicColor. self warningLimit negative ifTrue: [ ^ basicColor ]. textMorph ifNotNil: [ | size | size := self textSize. ( size >= self warningLimit ) ifTrue: [ | overshoot transitionSpan transitionColor | transitionSpan := self warningLimit. transitionColor := Color yellow mixed: 0.6 with: self basicColor. ( size >= self alertLimit ) ifFalse: [ overshoot := size - self warningLimit ] ifTrue: [ transitionSpan := self alertLimit - self warningLimit. basicColor := transitionColor mixed: 0.5 with: self basicColor. transitionColor := (Color orange mixed: 0.5 with: Color red) mixed: 0.5 with: self basicColor. overshoot := size - self alertLimit ]. ^ CompositeFillStyle fillStyles: { (GradientFillStyle ramp: {0->transitionColor. 1 -> basicColor }) origin: (rect width/2) asFloat @ rect bottom; direction: 0@((12+(2*rect height*overshoot / transitionSpan)) negated asFloat); normal: 0@1; radial: false; yourself. (GradientFillStyle ramp: {0 -> defaultColor. 0.3->(defaultColor alpha: 0.01) }) origin: rect left @ (rect height/2) asFloat; direction: (rect width)@0; normal: 1@0; radial: false; yourself } " ^ transitionColor mixed: overshoot / transitionSpan with: basicColor" ] ]. ^ basicColor ! ! !DebugSession methodsFor: 'evaluating' stamp: 'ST 6/18/2013 15:43' prior: 34290959! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses union: aClass traits. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !MorphTreeListManager methodsFor: '*Spec-Widgets' stamp: 'BenjaminVanRyseghem 6/18/2013 16:22'! secondSelection: anItem | nodeMorph | nodeMorph := self allNodeMorphs detect: [ :e | e complexContents item == anItem ]. self searchedElement: nodeMorph. client changed.! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 6/18/2013 16:07' prior: 36459199! itemHasBeenSelected ^ [ :item | selectedItem contents: item ]! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/18/2013 19:02' prior: 39848831! retrievingBlock: anObject retrievingBlock := anObject. retrievingBlock ifNotNil: [ self softRetrieveMorph ].! ! !Tab methodsFor: '*Spec-Widgets' stamp: 'BenjaminVanRyseghem 6/8/2013 16:04'! setActionsFrom: aBlock self actions: aBlock value! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 16:17'! secondSelection: anItem tree secondSelection: anItem! ! !SmalltalkImage methodsFor: 'miscellaneous' stamp: 'ChristopheDemarey 6/18/2013 17:09' prior: 33537539! metacelloPlatformAttributes "Returns the tags for the conditional platform loading in Metacello. Pay attention the order is important: from most to least general." "For release integrators, we should not have #'pharo1.3x' **and** #'pharo1.4.x'" ^ #(#squeakCommon #pharo #'pharo3.x' #'pharo3.0.x')! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 16:20'! secondSelection: anItem self widget ifNotNil: [ :w | w listManager secondSelection: anItem ]! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 17:03' prior: 38967907! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" "treeModel selectNodePath: aCollection." selectionHolder contents: aCollection. ! ! !Debugger methodsFor: 'private' stamp: 'ST 6/18/2013 15:43' prior: 20528136! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses union: aClass traits. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !TabManagerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/18/2013 18:54'! defaultSpec ^ SpecLayout new type: #TabManager; send: #setTabs: withArguments: #(#(model getTabs)); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:47'! addTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs contents add: aTab. self widget ifNotNil: [ :w | w addTab: aTab ensureWidget ]! ! !TabManagerModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/9/2013 00:45'! getTabs ^ [ self tabs collect: [ :each | each widget ifNil: [ each buildWithSpec ] ] ]! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 00:41'! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:42'! removeTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs contents remove: aTab ifAbsent: [ ]. self widget ifNotNil: [ :w | w removeTab: aTab ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:44'! removeTabNumber: anIndex self removeTab: (tabs at: anIndex)! ! !TabManagerModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/8/2013 16:28'! tabs ^ tabs contents! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:28'! tabs: aCollection tabs contents: aCollection! ! !TabModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/8/2013 16:04'! defaultSpec ^ SpecLayout new type: #Tab; send: #label: withArguments: #(#(model label)); send: #icon: withArguments: #(#(model icon)); send: #retrievingBlock: withArguments: #(#(model retrievingBlock)); send: #morph: withArguments: #(#(model morph)); send: #menu: withArguments: #(#(model menu)); send: #setActionsFrom: withArguments: #(#(model actionsBlock)); yourself! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02'! actions ^ actions contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58'! actions: aCollection actions contents: aCollection! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 16:04'! actionsBlock ^ [ self actions ]! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:53'! closeable: aBoolean closeable contents: aBoolean! ! !TabModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/8/2013 16:00'! defaultIcon ^ Smalltalk ui icons blankIcon! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02'! icon ^ icon contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:57'! icon: aForm icon contents: aForm! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/8/2013 15:52'! initialExtent ^ 200@25! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 00:53'! initialize "Initialization code for TabModel" super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 15:48'! label ^ label contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:52'! label: aString label contents: aString! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02'! menu ^ menu contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58'! menu: aBlock menu contents: aBlock! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:59'! model: aComposableModel self retrievingBlock: [ aComposableModel buildWithSpec ]! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/18/2013 19:01'! morph ^ morph contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58'! morph: aMorph morph contents: aMorph! ! !TabModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02'! retrievingBlock ^ retrievingBlock contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58'! retrievingBlock: aBlock retrievingBlock contents: aBlock! ! SequenceableCollection removeSelector: #lastIfAbsent:! OrderedCollection removeSelector: #max:! "DebuggerModel"! "Morphic-Base"! "Spec-Core"! "Spec-Widgets"! "System-Support"! "Tabs"! "Tools"! ----End fileIn----! ----QUIT----an Array(19 June 2013 7:49:55 am) Pharo.image priorSource: 6561683! ----STARTUP----an Array(19 June 2013 7:57:38 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 June 2013 7:57:38 am) Pharo-30205.image priorSource: 6583763! ----STARTUP----an Array(19 June 2013 8:04:41 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/19/2013 08:03' prior: 40116414! commentForCurrentUpdate ^ '10949 Bug when a method is recategorized https://pharo.fogbugz.com/f/cases/10949 10963 Nautilus add accessors https://pharo.fogbugz.com/f/cases/10963 10962 NewList fix in deselectAll https://pharo.fogbugz.com/f/cases/10962'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/19/2013 08:03'! script305 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1483.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1147.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/19/2013 08:03'! update30206 "self new update30206" self withUpdateLog: '10949 Bug when a method is recategorized https://pharo.fogbugz.com/f/cases/10949 10963 Nautilus add accessors https://pharo.fogbugz.com/f/cases/10963 10962 NewList fix in deselectAll https://pharo.fogbugz.com/f/cases/10962'. self loadTogether: self script305 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'ST 6/18/2013 14:06' prior: 31981496! systemMethodRecategorizedActionFrom: ann "a protocol has been renamed a method has been removed. // WILL BE TREATED WITH SystemMethodRemovedAnnouncement a method has been moved to another category -maybe from the classic category to an extending package -maybe from an extending package to another extending package -maybe from an extending package to a classic category - maybe from a classic category to another classic category" | oldProtocol newProtocol method methodPackage destinationPackage | oldProtocol := ann oldProtocol. "old protocol might be nil:" oldProtocol asString ifNil: [oldProtocol := '']. newProtocol := ann newProtocol. method := ann methodRecategorized. "1). See compiledMethod >> packageFromOrganizer:" "we have to pay attention that this announcement can come from TraitDescription>>updateOrganizationSelector:oldCategory:newCategory: . In this context, it can happen that the method referenced by the event is nil. In this case I think we should change nothing" method isNil ifFalse: [ "If the method origin is not the one of the event, we do not care about that method" method origin = ann methodClass ifFalse: [^ self]. methodPackage := method packageFromOrganizer: self. "if newProtocol is nil, it means that we are in a 'methodRemoved' case. Nothing should be modified (all the work will be done when catching methodRemovedAnnouncement) " newProtocol isNil ifTrue: [^self]. "it can happen that oldProtocol is Nil. in this case we should do nothing" oldProtocol ifNil: [^ self]. "maybe the category has changed" newProtocol asLowercase = oldProtocol asLowercase ifFalse: [ "according the extension specified is valid or not, the method will be defined as an extension of an external package or in the class parent package" destinationPackage := (self hasPackageForProtocol: newProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: newProtocol inClass: method methodClass ] ifFalse: [ (newProtocol beginsWith: '*') ifTrue: [ self ensureExistAndRegisterPackageNamed: newProtocol allButFirst capitalized ] ifFalse: [ method methodClass package ] ]. methodPackage := (self hasPackageForProtocol: oldProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: oldProtocol inClass: method methodClass ] ifFalse: [ method methodClass package ]. "then, we will remove the method from the method package, and add it to the destination package (we check before that the source package and the destination package are different)." methodPackage = destinationPackage ifFalse: [ (methodPackage methods includes: method) ifTrue: [ methodPackage removeMethod: method ]. destinationPackage addMethod: method. SystemAnnouncer uniqueInstance methodRepackaged: method from: methodPackage to: destinationPackage. ] ] ] ! ! !AbstractMethodWidget class methodsFor: 'icon' stamp: 'BenjaminVanRyseghem 6/18/2013 15:57'! methodsIconsCache ^ MethodsIconsCache! ! !AbstractNautilusUI class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/18/2013 17:40'! classesIconsCache ^ ClassesIconsCache! ! !AbstractNautilusUI class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/18/2013 17:40' prior: 17372627! classesIconsCache: anObject ClassesIconsCache := anObject! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 17:00' prior: 28388429! deselectAll selectedIndex contents: 0. self isMultipleSelection ifTrue: [ selectedIndexes removeAll. self secondSelection: 0 ]. self changed.! ! "Nautilus"! "NewList"! "RPackage-SystemIntegration"! ----End fileIn----! ----QUIT----an Array(19 June 2013 8:04:48 am) Pharo.image priorSource: 6583961! ----STARTUP----an Array(19 June 2013 8:12:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 June 2013 8:12:22 am) Pharo-30206.image priorSource: 6598414! ----STARTUP----an Array(19 June 2013 8:45:42 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/19/2013 08:42' prior: 40138692! commentForCurrentUpdate ^ '10944 Enable Opal in 3.0 https://pharo.fogbugz.com/f/cases/10944 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/19/2013 08:42'! script306 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.477.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1483.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.38.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1147.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/19/2013 08:42'! update30207 "self new update30207" self withUpdateLog: '10944 Enable Opal in 3.0 https://pharo.fogbugz.com/f/cases/10944 '. self loadTogether: self script306 merge: false. SmalltalkImage compilerClass: OpalCompiler. OpalCompiler recompileAll. self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(19 June 2013 8:46:59 am) Pharo.image priorSource: 6598612! ----STARTUP----an Array(19 June 2013 8:55:03 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 June 2013 8:55:03 am) Pharo-30207.image priorSource: 6608963! ----STARTUP----an Array(19 June 2013 2:33:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/19/2013 14:31' prior: 40153343! commentForCurrentUpdate ^ '10947 A method in Behavior needs to be recategorized https://pharo.fogbugz.com/f/cases/10947 10948 Add configuration for enable node navigation using arrows https://pharo.fogbugz.com/f/cases/10948 10965 BreakPoints do not work with new AST https://pharo.fogbugz.com/f/cases/10965'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/19/2013 14:31'! script307 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.483.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1484.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/19/2013 14:31'! update30208 "self new update30208" self withUpdateLog: '10947 A method in Behavior needs to be recategorized https://pharo.fogbugz.com/f/cases/10947 10948 Add configuration for enable node navigation using arrows https://pharo.fogbugz.com/f/cases/10948 10965 BreakPoints do not work with new AST https://pharo.fogbugz.com/f/cases/10965'. self loadTogether: self script307 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NNavNavigation commentStamp: '' prior: 39381736! I'm the one who manage the navigation and I have memory from what I've been navigating! !NNavDirectionFirstChild class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/18/2013 11:29' prior: 39376557! buildShortcut: aBuilder (aBuilder shortcut: #firstChild) category: #SmalltalkEditor default: self defaultKeyCombination do: [ :morph | morph standOutIntoFirstScope] description: 'Select the node scope reducing to the first child' ! ! !NNavDirectionFirstChild class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/19/2013 12:42'! defaultKeyCombination ^NNavNavigation useArrowsShortcuts ifTrue: [ Character arrowRight command shift mac | Character arrowRight ctrl shift ] ifFalse: [ $o command shift mac| $o ctrl shift unix | $o ctrl shift ] ! ! !NNavDirectionSibling class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/18/2013 11:40' prior: 39380749! buildShortcut: aBuilder (aBuilder shortcut: #sibling) category: #SmalltalkEditor default: self defaultKeyCombination do: [ :morph | morph standOutHorizontalScope] description: 'Select the node going to the siblings' ! ! !NNavDirectionSibling class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/19/2013 12:44'! defaultKeyCombination ^NNavNavigation useArrowsShortcuts ifTrue: [ Character arrowRight command mac | Character arrowRight ctrl ] ifFalse: [ $u command shift mac| $u ctrl shift unix | $u ctrl shift ]! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'ST 6/18/2013 13:23' prior: 36119285! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !NNavNavigation commentStamp: '' prior: 40174354! I'm the one who manage the navigation and I have memory from what I've been navigating! !NNavNavigation class methodsFor: 'configuration' stamp: 'GiselaDecuzzi 6/18/2013 11:26'! enableAstHighlightSetting: aBuilder (aBuilder setting: #useArrowsShortcuts) label: 'AST navigation' translated; parent: #codeBrowsing; target: NNavNavigation ; description: 'When selected the shortcuts for node navigation use arrows' translated ! ! !NNavNavigation class methodsFor: 'configuration' stamp: 'GiselaDecuzzi 6/18/2013 11:32'! useArrowsShortcuts ^UseArrowsShortcuts ifNil: [ false ] ! ! !NNavNavigation class methodsFor: 'configuration' stamp: 'GiselaDecuzzi 6/18/2013 11:28'! useArrowsShortcuts: enable UseArrowsShortcuts := enable. KMRepository reset. ! ! !NNavDirectionParent class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/18/2013 11:38' prior: 39377381! buildShortcut: aBuilder (aBuilder shortcut: #parent) category: #SmalltalkEditor default: self defaultKeyCombination do: [ :morph | morph standOutOverScope ] description: 'Select the node scope going to the paren node' ! ! !NNavDirectionParent class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/19/2013 12:43'! defaultKeyCombination ^NNavNavigation useArrowsShortcuts ifTrue: [ Character arrowLeft command shift mac | Character arrowLeft ctrl shift ] ifFalse: [ $p command shift mac| $p ctrl shift unix | $p ctrl shift ] ! ! !NNavDirectionPreviousBrother class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/18/2013 11:41' prior: 39379671! buildShortcut: aBuilder (aBuilder shortcut: #previousSibling) category: #SmalltalkEditor default: self defaultKeyCombination do: [ :morph | morph standOutPreviousChild] description: 'Select the node scope reducing to the previous sibling' ! ! !NNavDirectionPreviousBrother class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/19/2013 12:44'! defaultKeyCombination ^NNavNavigation useArrowsShortcuts ifTrue: [Character arrowLeft command mac | Character arrowLeft ctrl ] ifFalse: [ $u command mac| $u ctrl unix | $u ctrl ] ! ! !BreakpointManager class methodsFor: 'private' stamp: 'MarcusDenker 6/19/2013 10:58' prior: 36283552! breakpointMethodSourceFor: aSymbol in: aClass "Compose new source containing a break statement (currently it will be the first, later we want to insert it in any place)" | oldSource methodNode breakOnlyMethodNode sendBreakMessageNode ast | OpalCompiler isActive ifFalse: [ oldSource := aClass sourceCodeAt: aSymbol. methodNode := aClass compiler compile: oldSource in: aClass notifying: nil ifFail: [self error: '[breakpoint] unable to install breakpoint']. breakOnlyMethodNode := aClass compiler compile: 'temporaryMethodSelectorForBreakpoint self break. ^self' in: aClass notifying: nil ifFail: [self error: '[breakpoint] unable to install breakpoint']. sendBreakMessageNode := breakOnlyMethodNode block statements first. methodNode block statements addFirst: sendBreakMessageNode. ^methodNode printString ]. sendBreakMessageNode := RBMessageNode receiver: (RBVariableNode named: 'self') selector: #break. ast := (aClass>>aSymbol) ast copy. ast body addNodeFirst: sendBreakMessageNode. ^ast formattedCode.! ! "Compiler"! "Kernel"! "NodeNavigation"! "Tools"! ----End fileIn----! ----QUIT----an Array(19 June 2013 2:33:53 pm) Pharo.image priorSource: 6609161! ----STARTUP----an Array(19 June 2013 2:41:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 June 2013 2:41:57 pm) Pharo-30208.image priorSource: 6625162! ----STARTUP----an Array(20 June 2013 12:29:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/20/2013 12:24' prior: 40163892! commentForCurrentUpdate ^ '10975 integrate athens https://pharo.fogbugz.com/f/cases/10975/integrate-athens '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/20/2013 12:24'! script308 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.483.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-StephaneDucasse.319.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1484.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-MarcusDenker.142.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-MarcusDenker.224.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.101.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.509.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/20/2013 12:26'! update30209 "self new update30209" Gofer it smalltalkhubUser: 'Pharo' project: 'Athens'; configuration; load. ConfigurationOfAthens loadDevelopment. . self withUpdateLog: '10975 integrate athens https://pharo.fogbugz.com/f/cases/10975/integrate-athens '. self loadTogether: self script308 merge: false. ScriptLoader new unloadPackageNamed: 'ConfigurationOfAthens'; cleanRepositories. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfAthens commentStamp: '' prior: 0! "Load latest stable version " self loadStable. "Load latest development version" self loadDevelopment Extras: Tutorial self project lastVersion load: 'Tutorial' "SVG importer" (note before doing this you need to load XMLParser, which you can find in Configurations browser) self project lastVersion load: 'SVG' ! !ConfigurationOfAthens commentStamp: '' prior: 40190362! "Load latest stable version " self loadStable. "Load latest development version" self loadDevelopment Extras: Tutorial self project lastVersion load: 'Tutorial' "SVG importer" (note before doing this you need to load XMLParser, which you can find in Configurations browser) self project lastVersion load: 'SVG' ! !ConfigurationOfAthens class methodsFor: 'development support' stamp: 'IgorStasenko 2/6/2012 16:29'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfAthens class methodsFor: 'private' stamp: 'IgorStasenko 2/6/2012 16:29'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfAthens class methodsFor: 'private' stamp: 'IgorStasenko 2/6/2012 16:29'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfAthens class methodsFor: 'private' stamp: 'IgorStasenko 2/6/2012 16:29'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfAthens class methodsFor: 'metacello tool support' stamp: 'IgorStasenko 2/6/2012 16:29'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfAthens class methodsFor: 'loading' stamp: 'IgorStasenko 2/6/2012 16:29'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfAthens class methodsFor: 'loading' stamp: 'IgorStasenko 2/6/2012 16:29'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfAthens class methodsFor: 'loading' stamp: 'IgorStasenko 12/22/2012 01:01'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project latestVersion: #development) load! ! !ConfigurationOfAthens class methodsFor: 'loading' stamp: 'IgorStasenko 12/22/2012 01:01'! loadStable "Load the #stable version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadStable" ^(self project latestVersion: #stable) load! ! !ConfigurationOfAthens class methodsFor: 'loading' stamp: 'IgorStasenko 7/5/2012 08:56'! loadVersion: aVersion "Load the specified version " ^(self project version: aVersion) load! ! !ConfigurationOfAthens class methodsFor: 'accessing' stamp: 'IgorStasenko 2/6/2012 16:29'! project ^self new project! ! !ConfigurationOfAthens class methodsFor: 'development support' stamp: 'IgorStasenko 2/6/2012 16:29'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfAthens methodsFor: 'baselines' stamp: 'IgorStasenko 2/29/2012 17:38'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.squeaksource.com/Athens'. spec project: 'ConfigurationOfNativeBoost default' with: [ spec className: 'ConfigurationOfNativeBoost'; loads: #('default' ); "this is optional" file: 'NativeBoost-Installer'; repository: 'http://www.squeaksource.com/NativeBoost' ]. spec package: 'Athens-Core' . spec package: 'Athens-Text' with: [ spec requires: #('Athens-Core') ]. spec package: 'Athens-Balloon' with: [ spec requires: #('Athens-Text') ]. spec package: 'Athens-Morphic' with: [ spec requires: #('Athens-Balloon') ]. spec package: 'Athens-CairoPools'. spec package: 'Athens-Cairo' with: [ spec requires: #( 'ConfigurationOfNativeBoost default' 'Athens-Core' 'Athens-CairoPools' ) ]. spec package: 'Athens-PangoCairo' with: [ spec requires: #( 'Athens-Cairo' ) ]. spec package: 'Athens-Examples' with: [ spec requires: #('Athens-Morphic')]. spec group: 'Core' with: #('Athens-Core' ); group: 'default' with: #('Athens-Morphic' 'Athens-PangoCairo' 'Athens-Examples') ]. ! ! !ConfigurationOfAthens methodsFor: 'baselines' stamp: 'IgorStasenko 4/16/2012 12:01'! baseline11: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.squeaksource.com/Athens'. spec project: 'ConfigurationOfNativeBoost default' with: [ spec className: 'ConfigurationOfNativeBoost'; loads: #('default' ); "this is optional" file: 'ConfigurationOfNativeBoost'; repository: 'http://www.squeaksource.com/NativeBoost' ]. spec package: 'Athens-Core' . spec package: 'Athens-Text' with: [ spec requires: #('Athens-Core') ]. spec package: 'Athens-Balloon' with: [ spec requires: #('Athens-Text') ]. spec package: 'Athens-Morphic' with: [ spec requires: #('Athens-Balloon') ]. spec package: 'Athens-CairoPools'. spec package: 'Athens-Cairo' with: [ spec requires: #( 'ConfigurationOfNativeBoost default' 'Athens-Core' 'Athens-CairoPools' ) ]. spec package: 'Athens-PangoCairo' with: [ spec requires: #( 'Athens-Cairo' ) ]. spec package: 'Athens-Examples' with: [ spec requires: #('Athens-Morphic')]. spec group: 'Core' with: #('Athens-Core' ); group: 'default' with: #('Athens-Morphic' 'Athens-PangoCairo' 'Athens-Examples') ]. ! ! !ConfigurationOfAthens methodsFor: 'baselines' stamp: 'IgorStasenko 3/28/2013 15:37'! baseline20: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.smalltalkhub.com/mc/Pharo/Athens/main'. spec package: 'Athens-Core' . spec package: 'Athens-Text' with: [ spec requires: #('Athens-Core') ]. spec package: 'Athens-Balloon' with: [ spec requires: #('Athens-Text') ]. spec package: 'Athens-Morphic' with: [ spec requires: #('Athens-Balloon') ]. spec package: 'Athens-CairoPools'. spec package: 'Athens-Cairo' with: [ spec requires: #( 'Athens-Core' 'Athens-CairoPools' ) ]. spec package: 'Athens-PangoCairo' with: [ spec requires: #( 'Athens-Cairo' ) ]. spec package: 'Athens-Examples' with: [ spec requires: #('Athens-Morphic')]. spec group: 'Core' with: #('Athens-Core' ); group: 'default' with: #('Athens-Morphic' 'Athens-PangoCairo' 'Athens-Examples') ]. ! ! !ConfigurationOfAthens methodsFor: 'baselines' stamp: 'IgorStasenko 4/30/2013 01:10'! baseline21: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.smalltalkhub.com/mc/Pharo/Athens/main'. spec package: 'Athens-Core' . spec package: 'Athens-Text' with: [ spec requires: #('Athens-Core') ]. spec package: 'Athens-Balloon' with: [ spec requires: #('Athens-Text') ]. spec package: 'Athens-Morphic' with: [ spec requires: #('Athens-Balloon') ]. spec package: 'Athens-CairoPools'. spec package: 'Athens-Cairo' with: [ spec requires: #( 'Athens-Core' 'Athens-CairoPools' ) ]. spec package: 'Athens-PangoCairo' with: [ spec requires: #( 'Athens-Cairo' ) ]. spec package: 'Athens-Examples' with: [ spec requires: #('Athens-Morphic')]. spec package: 'Athens-Tutorial' with: [ spec requires: #('Athens-Morphic') ]. spec package: 'Athens-SVG' with: [ spec requires: #('Athens-Morphic') ]. spec group: 'Core' with: #('Athens-Core' ); group: 'default' with: #('Athens-Morphic' 'Athens-PangoCairo' 'Athens-Examples'); group: 'Tutorial' with: #('Athens-Tutorial'); group: 'SVG' with: #('Athens-SVG') ]. ! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 6/17/2013 16:34'! development: spec spec for: #common version: '2.1'! ! !ConfigurationOfAthens methodsFor: 'accessing' stamp: 'IgorStasenko 2/6/2012 16:29'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 6/17/2013 16:34'! stable: spec "right now no stable version" ^ self development:spec! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'sig 2/29/2012 22:25'! version011: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.0.6'; package: 'NativeBoost-Installer' with: 'NativeBoost-Installer-IgorStasenko.21'. spec package: 'Athens-Core' with: 'Athens-Core-sig.5'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.1'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-sig.3'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.1'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.2'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.7'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.3'. spec package: 'Athens-Examples' with: 'Athens-Examples-sig.2'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 3/8/2012 17:53'! version012: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.0.8'. spec package: 'NativeBoost-Installer' with: 'NativeBoost-Installer-IgorStasenko.23'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.6'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.4'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.2'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.8'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.3'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.3'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 3/20/2012 15:48'! version013: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.0.9'. spec package: 'NativeBoost-Installer' with: 'NativeBoost-Installer-IgorStasenko.24'. spec package: 'Athens-Core' with: 'Athens-Core-FernandoOlivero.8'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.4'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.2'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-FernandoOlivero.9'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.5'. spec package: 'Athens-Examples' with: 'Athens-Examples-FernandoOlivero.5'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 3/30/2012 15:36'! version014: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.1.0'. spec package: 'NativeBoost-Installer' with: 'NativeBoost-Installer-IgorStasenko.24'. spec package: 'Athens-Core' with: 'Athens-Core-FernandoOlivero.8'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.4'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.2'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-FernandoOlivero.9'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.5'. spec package: 'Athens-Examples' with: 'Athens-Examples-FernandoOlivero.5'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 2/29/2012 17:44'! version01: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.0.6'; package: 'NativeBoost-Installer' with: 'NativeBoost-Installer-IgorStasenko.21'. spec package: 'Athens-Core' with: 'Athens-Core-FernandoOlivero.4'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.1'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.2'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.1'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.1'. spec package: 'Athens-Cairo' with: ' Athens-Cairo-IgorStasenko.7'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.3'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.1'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 4/20/2012 14:52'! version10: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.1.2'. spec package: 'Athens-Core' with: 'Athens-Core-FernandoOlivero.14'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.5'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-FernandoOlivero.3'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.19'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.6'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.11'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 4/27/2012 15:35'! version11: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.1.2'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.17'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.6'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-FernandoOlivero.3'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.23'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.6'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.13'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 7/5/2012 08:53'! version121: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.2.1'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.19'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.3'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.6'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-FernandoOlivero.4'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.26'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.6'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.15'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 5/31/2012 02:28'! version12: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.2'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.18'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.2'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.6'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.2'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-FernandoOlivero.4'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.25'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.6'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.14'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 8/23/2012 17:52'! version13: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.3'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.19'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.3'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.6'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.3'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-FernandoOlivero.4'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.26'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.9'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.15'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 9/3/2012 04:00'! version14: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.4'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.20'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.5'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.7'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.5'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.5'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.28'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.9'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.17'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 12/7/2012 16:23'! version15: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.8'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.25'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.5'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.7'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.9'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.5'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.31'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.11'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.19'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'DamienPollet 12/22/2012 01:47'! version16: spec spec for: #common do: [ spec blessing: #development. spec project: 'ConfigurationOfNativeBoost default' with: '1.8'. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.25'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.5'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.7'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.9'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.5'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.34'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.11'. spec package: 'Athens-Examples' with: 'Athens-Examples-DamienPollet.20'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 4/3/2013 06:30'! version20: spec spec for: #common do: [ spec blessing: #development. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.25'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.5'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.7'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.9'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.5'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.36'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.11'. spec package: 'Athens-Examples' with: 'Athens-Examples-DamienPollet.20'. ].! ! !ConfigurationOfAthens methodsFor: 'versions' stamp: 'IgorStasenko 6/3/2013 14:35'! version21: spec spec for: #common do: [ spec blessing: #development. spec package: 'Athens-Core' with: 'Athens-Core-IgorStasenko.30'. spec package: 'Athens-Text' with: 'Athens-Text-IgorStasenko.5'. spec package: 'Athens-Balloon' with: 'Athens-Balloon-IgorStasenko.9'. spec package: 'Athens-Morphic' with: 'Athens-Morphic-IgorStasenko.16'. spec package: 'Athens-CairoPools' with: 'Athens-CairoPools-IgorStasenko.5'. spec package: 'Athens-Cairo' with: 'Athens-Cairo-IgorStasenko.39'. spec package: 'Athens-PangoCairo' with: 'Athens-PangoCairo-FernandoOlivero.11'. spec package: 'Athens-Examples' with: 'Athens-Examples-IgorStasenko.22'. spec package: 'Athens-Tutorial' with: 'Athens-Tutorial-IgorStasenko.4'. spec package: 'Athens-SVG' with: 'Athens-SVG-IgorStasenko.7' ].! ! "ConfigurationOfAthens"! !AthensAbstractPaint commentStamp: 'FernandoOlivero 3/9/2012 14:03' prior: 0! I am an abstract paint, which should be converted before it can be used by Athens. I am backend agnostic, as opposed to concrete paint(s). Also, any other object can play the role of paint, as long as it implements the conversion method, #asAthensPaintOn: See other implementors of #asAthensPaintOn:, such as Color and Form.! !AthensPaint commentStamp: 'FernandoOlivero 3/9/2012 13:57' prior: 0! I am a base class, which defines a paint. My subclasses represent a concreate paint by implementing my protocol, that actually draws a specific shapes with me. My subclasses usually backend-specific, but as long as you implement my protocol, any object can be treated as paint: - fillPath: aPath on: aCanvas - fillRectangle: aRectangle on: aCanvas - asStrokePaint ! !AthensStrokePaint commentStamp: '' prior: 0! I representing a stroke paint object used by Athens. This class is not used anywhere. The comment to this class is still under development. ! !GradientPaint commentStamp: '' prior: 0! I am paint which using color gradient for fills. The gradient is defined using color ramp in range between 0 and 1 where colors can be set at certain point. The color are interpolated between defined points. The color ramp is a collection of associations with keys - floating point values between 0 and 1 and values with Colors, for example: { 0 -> Color white. 1 -> Color black }. My subclasses used to define a concrete kind of gradient, while me is an abstract class which has common properties for all gradients: color ramp. Also, note that my subclasses representing backend-neutral gradients, encapsulating all necessary data, which is then passed to corresponding surface factory method, like AthensSurface>>#createLinearGradient:start:stop: , which answers backend-specific gradient paint. I am userful in cases when user wants to define a paint without need to have any Athens surface at hand. Sure thing, using backend-specific gradients is preferable, if possible, because conversion to backend-specific paint can be costly. Especially if gradient is statically defined (ramp values and other parameters never changing) and used many times during the life time of surface. ! !LinearGradientPaint commentStamp: '' prior: 0! I represent a linear gradient paint. My start and stop points defining the position and direction of gradient fill in user space coordinates, so that the ramp color at 0 maps to starting point and ramp color at 1 maps to stop point of linear gradient. Also check the comment of my superclass to know better how and when you can use me. ! !RadialGradientPaint commentStamp: '' prior: 0! I represent a radial gradient paint. The center point and radius defining a circle where gradient will be drawn in user space coordinates. The gradient's ramp color at 0 maps to the focal point and ramp color at 1 maps to the edge of the circle, interpolating colors in between. Also check the comment of my superclass to know better how and when you can use me. ! !AthensAbstractShape commentStamp: '' prior: 0! In Athens, any object can play role of a shape. I demonstrating the minimal protocol which should be supported by "shape" role, to be used with Athens canvas. See my methods comments for more details. ! !AthensShape commentStamp: '' prior: 0! This class represents an interface, which should be supported by all shapes used for drawing with Athens framework. Shapes do not have to inherit directly from me, for example Rectangle implements my protocol (via extensions), and as result can be used as a valid shape for drawing with Athens.! !AthensPath commentStamp: '' prior: 0! This class represents an interface, which should be supported by all paths (special kind of shape) used for drawing with Athens framework. Path data organization is up to surface where it built, therefore paths are not interchangeable between different surfaces. ! !AthensCanvas commentStamp: '' prior: 0! The Athens canvas is a central object which is used to performs drawings on a surface. Please note, that Athens does not allows you to instantiate canvas directly, instead you obtain a ready for use instance as an argument in #drawDuring: message, sent to athens surface: surface drawDuring: [:canvas | .... ] Using canvas outside a #drawDuring: method is highly discouraged. Doing so may lead to unpredicted behavior/data corruption/image crash.! !AthensPaintMode commentStamp: '' prior: 0! A paint mode controls how the incoming color (source) will be transferred to surface (destination). To set a paint mode for canvas, send a message with corresponding mode name to my instance. My instance(s) is available via canvas protocol, i.e. 'canvas paintMode'. For example, to set an 'over' paint mode, use following: canvas paintMode over. If you want to restore original paint mode after performing drawing operations, which may change it, use #restoreAfter: method , i.e. canvas paintMode restoreAfter: [ .. perform any drawing operations here.. ]. Since different backends may support different set of paint modes, the default implementation in AthensPaintMode for all mode setters is to signal an error. To query a set of available paint modes, supported by backend, use #availableModes message. ! !AthensPathBuilder commentStamp: '' prior: 0! i am abstract path builder, to specify an interface protocol which is available for building paths, by using canvas or surface #createPath: method.! !AthensPathConverter commentStamp: 'IgorStasenko 5/1/2011 23:14' prior: 0! i am a base class for path conversion. i take a path as input and producing a path commands as output. My default implementation just passing all path commands without changes to destination without any conversion Example of use: converter := AthensXYZConverter dest: (AthensPolygonPath new). convertedPath := converter convert: sourcePath. You can chain multiple converters: basicConverter := AthensZYXConv dest: AthensPolygonPath new. compoundConverter := AthensABCConverter dest: basicConverter. compoundConverter convert: somePath in this case, an initial conversion is performed by instance of AthensABCConverter, and then conversion results are passed down to AthensZYXConv, and then finally to instance of AthensPolygonPath. ! !AthensBezierConverter commentStamp: 'IgorStasenko 5/1/2011 21:50' prior: 0! I converting all bezier segments to a sequence of line segments, by approximating the curve along its path. This classs is used for generating strokes.! !AthensPathSegment commentStamp: '' prior: 0! The path segment is path building block. Path is formed from list of connected path segments. At building stage, there is no container nor separately defined "path" object, just a linked list of segments. Later the segments are accumulated in backend-specific path object, and the way how it is organized may vary. My (sub)instances usually are not created directly by user, but instead by instance of AthensPathBuilder. Therefore, all my subclasses are considered private and implementation detail.! !AthensArcSegment commentStamp: 'IgorStasenko 3/7/2012 13:41' prior: 0! i am abstract class , representing an arc segment! !AthensCCWArcSegment commentStamp: '' prior: 0! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in counter-clockwise direction.! !AthensCWArcSegment commentStamp: '' prior: 0! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in clockwise direction.! !AthensCubicSegment commentStamp: 'IgorStasenko 3/7/2012 13:32' prior: 0! i represent a cubic Bezier path segment! !AthensEllipticalArcSegment commentStamp: '' prior: 0! I representing an elliptical arc, using endpoint parametrization: - initial endpoint (x0,y0), which comes from previous segment - final endpoint (x1,y1) - rh, rv , the radii of unrotated ellipse - Large arc flag: true if more than 180 degrees of the arc is to be traversed (as measured on the unscaled circle), false otherwise - Sweep flag: true if the arc is to be traversed in the counter-clockwise direction, false otherwise (not functional yet)! !AthensLineSegment commentStamp: '' prior: 0! i represent a line segment, created using #lineTo: command of AthensPathBuilder! !AthensCloseSegment commentStamp: '' prior: 0! i represent close segment (when user issuing #close command to path builder)! !AthensMoveSegment commentStamp: 'IgorStasenko 5/2/2011 05:35' prior: 0! Move segment always indicates starting of a new contour. If contour ends with close command, then my insntance will have 'closed' flag set to true. See AthensPathBuilder , which is responsible for building paths.! !AthensQuadSegment commentStamp: 'IgorStasenko 3/7/2012 13:32' prior: 0! i represent a quadric Bezier path segment. Any quadratic spline can be expressed as a cubic (where the cubic term is zero). The end points of the cubic will be the same as the quadratic's. CP0 = QP0 CP3 = QP2 The two control points for the cubic are: CP1 = QP0 + 2/3 *(QP1-QP0) CP2 = QP2 + 2/3 *(QP1-QP2) ! !AthensCurveFlattener commentStamp: '' prior: 0! This converter flattens all curves by converting them to series of lines. This means that path can be rendered using simple polygon rendering technique and nothing else.! !AthensPolygon commentStamp: 'IgorStasenko 12/20/2011 18:38' prior: 0! i am special kind of shape which using only straight line segments, unlike from more generic paths.! !AthensPolygonTester commentStamp: '' prior: 0! I implementing a simple and efficient algorithm to test whether given point lies withing a polygon or not. A polygon is a collection of points 1...size.! !AthensSurface commentStamp: '' prior: 0! I representing a surface, where all drawing operations will happen. I also having a number of factory methods to create paints, paths and other objects involved in drawing. AthensSurface is an abstract, while subclasses implement a specific kind of surface for one or another backend. The primary role of AthensSurface class is to define a public protocol for all Athens surfaces, which can be used by applications which using Athens framework. To get a new surface, use: extent: x@y for surfaces which don't need to have dimensions specified, it would just #new.! !AthensTransform commentStamp: 'IgorStasenko 3/7/2012 14:41' prior: 0! My instances represent an interface for coordinate system transformation defined by 3x3 matrix of following kind: | sx shx x | | shy sy y | | w0 w1 w2 | sx and sy define scaling in the x and y directions, respectively; shx and shy define shearing in the x and y directions, respectively; tx and ty define translation in the x and y directions, respectively. AthensSurface are responsible for providing specific implementation of me, which is most appropriate for backend its using. My internal representation isnt available for manipulation, for example dont assume i'm a matrix. In short, do not copy my state or modify it directly, instead use methods such as #loadAffineTransformation:, and talk to my surface. My subclasses should implement a common protocol for applying generic types of affine transformations on coordinate system: - translate - rotate - shear - scale - matrix multiply - matrix load Surface must support 4 kinds of transformations of coordinate system(s): - path-to-surface (#pathTransform) to transform path coordinates to surface space - image-to-surface (#imageTransform) to transform between user coordinates and surface pixels - fill-paint-to-user (#fillTransform) - stroke-paint-to-user (#strokeTransform) Given a (fill or stroke) paint-to-user transformation Tp and user-to-surface transformation Tu, the paint color and alpha of a pixel to be drawn with surface coordinates (x, y) is defined by mapping its center point (x + 1/2, y + 1/2) through the inverse transformation (Tu * Tp)^-1 , resulting in a sample point in the paint coordinate space. All transformations, except image-to-surface , ignoring w0 , w1 and w2 values and always assume them set to { 0 , 0 , 1 } respectively. For accessing a particular kind of transformation, send message to canvas, i.e.: canvas pathTransform translateBy: 10@10. It is safe to store transformation in temporary variable, as long as canvas is valid. ! !AthensAffineTransform commentStamp: '' prior: 0! I support the same protocol than AthensTransform, but in addition I store a plain 2x3 matrix with state accessible at any moment. This is different to AthensTransform because it does not expose its internal storage, because it can be backend specific.! !AthensGenericTransform commentStamp: '' prior: 0! I am an extended version of my supeclass, and I represent generic 3x3 matrix. ! !Rectangle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 5/6/2013 05:43'! asAthensShapeOn: anAthensCanvas "Just answer self. Receiver don't needs any conversion to be used with Athens" ^ self! ! !Rectangle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 3/27/2011 18:43'! asPolygonTransformedBy: aTransform "answer a clock-wise oriented polygon, representing receiver, transformed by transform" ^ { aTransform transform: origin. aTransform transformX: corner x Y: origin y. aTransform transform: corner. aTransform transformX: origin x Y: corner y. }! ! !Rectangle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 3/23/2011 03:00'! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint fillRectangle: self on: anAthensCanvas! ! !Form methodsFor: '*Athens-Core' stamp: 'IgorStasenko 3/8/2012 13:45'! asAthensPaintOn: canvas ^ canvas surface createFormPaint: self! ! !AthensAbstractPaint commentStamp: 'FernandoOlivero 3/9/2012 14:03' prior: 40214940! I am an abstract paint, which should be converted before it can be used by Athens. I am backend agnostic, as opposed to concrete paint(s). Also, any other object can play the role of paint, as long as it implements the conversion method, #asAthensPaintOn: See other implementors of #asAthensPaintOn:, such as Color and Form.! !AthensAbstractPaint methodsFor: 'converting' stamp: 'FernandoOlivero 3/9/2012 13:30'! asAthensPaintOn: anAthensCanvas ^ self! ! !AthensPaint commentStamp: 'FernandoOlivero 3/9/2012 13:57' prior: 40215337! I am a base class, which defines a paint. My subclasses represent a concreate paint by implementing my protocol, that actually draws a specific shapes with me. My subclasses usually backend-specific, but as long as you implement my protocol, any object can be treated as paint: - fillPath: aPath on: aCanvas - fillRectangle: aRectangle on: aCanvas - asStrokePaint ! !AthensPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:28'! asStrokePaintOn: aCanvas "default implementation" ^ aCanvas surface createStrokePaintFor: self ! ! !AthensPaint methodsFor: 'rendering' stamp: 'IgorStasenko 5/1/2011 23:20'! fillPath: athensBalloonPath on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " self subclassResponsibility! ! !AthensPaint methodsFor: 'rendering' stamp: 'IgorStasenko 3/23/2011 03:02'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " self subclassResponsibility! ! !AthensStrokePaint commentStamp: '' prior: 40215772! I representing a stroke paint object used by Athens. This class is not used anywhere. The comment to this class is still under development. ! !AthensStrokePaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:12'! asStrokePaintOn: aCanvas "receiver is stroke paint already" ^ self! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! capStyle ^ capStyle! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! capStyle: anObject capStyle := anObject! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! fillPaint ^ fillPaint! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! fillPaint: anObject fillPaint := anObject! ! !AthensStrokePaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 1/13/2012 00:35'! initialize super initialize. width := 1. capStyle := #butt. joinStyle := #bevel. innerJoinStyle := #bevel. miterLimit := 4.0. ! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! innerJoinStyle ^ innerJoinStyle! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! innerJoinStyle: anObject innerJoinStyle := anObject! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! joinStyle ^ joinStyle! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! joinStyle: anObject joinStyle := anObject! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! miterLimit ^ miterLimit! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! miterLimit: anObject miterLimit := anObject! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 9/19/2011 15:40'! width ^ width! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 15:28'! width: anObject width := anObject! ! !GradientPaint commentStamp: '' prior: 40215972! I am paint which using color gradient for fills. The gradient is defined using color ramp in range between 0 and 1 where colors can be set at certain point. The color are interpolated between defined points. The color ramp is a collection of associations with keys - floating point values between 0 and 1 and values with Colors, for example: { 0 -> Color white. 1 -> Color black }. My subclasses used to define a concrete kind of gradient, while me is an abstract class which has common properties for all gradients: color ramp. Also, note that my subclasses representing backend-neutral gradients, encapsulating all necessary data, which is then passed to corresponding surface factory method, like AthensSurface>>#createLinearGradient:start:stop: , which answers backend-specific gradient paint. I am userful in cases when user wants to define a paint without need to have any Athens surface at hand. Sure thing, using backend-specific gradients is preferable, if possible, because conversion to backend-specific paint can be costly. Especially if gradient is statically defined (ramp values and other parameters never changing) and used many times during the life time of surface. ! !GradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:54'! atStop: anOffset put: aColor colorRamp add: (anOffset -> aColor). ! ! !GradientPaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/13/2012 21:11'! colorRamp ^ colorRamp! ! !GradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/13/2013 09:11'! colorRamp: aRamp "The color ramp is a collection of associations with keys - floating point values between 0 and 1 and values with Colors, for example: { 0 -> Color white. 1 -> Color black }. " colorRamp := aRamp copy.! ! !GradientPaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/12/2013 09:51'! initialize super initialize. colorRamp := OrderedCollection new.! ! !GradientPaint methodsFor: 'testing' stamp: 'FernandoOlivero 1/13/2012 21:36'! is: aSymbol ^ aSymbol = #pattern or:[ super is: aSymbol] ! ! !LinearGradientPaint commentStamp: '' prior: 40217228! I represent a linear gradient paint. My start and stop points defining the position and direction of gradient fill in user space coordinates, so that the ramp color at 0 maps to starting point and ramp color at 1 maps to stop point of linear gradient. Also check the comment of my superclass to know better how and when you can use me. ! !LinearGradientPaint class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 09:56'! from: aStartPoint to: aStopPoint | p | p := self new. p initializeFrom: aStartPoint to: aStopPoint. ^ p! ! !LinearGradientPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/12/2013 10:14'! asAthensPaintOn: aCanvas ^ aCanvas surface createLinearGradient: self colorRamp start: self start stop: self stop! ! !LinearGradientPaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/13/2012 23:10'! start ^ start! ! !LinearGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:56'! start: anObject start := anObject! ! !LinearGradientPaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/13/2012 23:10'! stop ^ stop! ! !LinearGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:56'! stop: anObject stop := anObject! ! !RadialGradientPaint commentStamp: '' prior: 40217631! I represent a radial gradient paint. The center point and radius defining a circle where gradient will be drawn in user space coordinates. The gradient's ramp color at 0 maps to the focal point and ramp color at 1 maps to the edge of the circle, interpolating colors in between. Also check the comment of my superclass to know better how and when you can use me. ! !RadialGradientPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/12/2013 09:33'! asAthensPaintOn: aCanvas ^ aCanvas surface createRadialGradient: colorRamp center: center radius: radius focalPoint: focalPoint ! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:26'! center ^ center! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:22'! center: aPoint center := aPoint! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:26'! focalPoint ^ focalPoint! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:24'! focalPoint: aPoint focalPoint := aPoint! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:26'! radius ^ radius! ! !RadialGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 09:23'! radius: aNumber radius := aNumber! ! !AthensAbstractShape commentStamp: '' prior: 40218059! In Athens, any object can play role of a shape. I demonstrating the minimal protocol which should be supported by "shape" role, to be used with Athens canvas. See my methods comments for more details. ! !AthensAbstractShape methodsFor: 'converting' stamp: 'IgorStasenko 5/6/2013 05:40'! asAthensShapeOn: canvas "Note: The answered object of this message should conform with AthensShape protocol. " self subclassResponsibility.! ! !AthensShape commentStamp: '' prior: 40218315! This class represents an interface, which should be supported by all shapes used for drawing with Athens framework. Shapes do not have to inherit directly from me, for example Rectangle implements my protocol (via extensions), and as result can be used as a valid shape for drawing with Athens.! !AthensPath commentStamp: '' prior: 40218663! This class represents an interface, which should be supported by all paths (special kind of shape) used for drawing with Athens framework. Path data organization is up to surface where it built, therefore paths are not interchangeable between different surfaces. ! !AthensShape methodsFor: 'converting' stamp: 'IgorStasenko 5/6/2013 05:32'! asAthensShapeOn: canvas "Receiver is a shape, no conversion is needed." ^ self! ! !AthensShape methodsFor: 'drawing' stamp: 'IgorStasenko 12/20/2011 18:36'! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" self subclassResponsibility! ! !AthensBezier3Scene class methodsFor: 'instance creation' stamp: 'IgorStasenko 4/26/2013 17:51'! on: anControlPointArray ^ self basicNew initFromArray: anControlPointArray! ! !AthensBezier3Scene methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/29/2013 21:51'! curvePathBlock ^ [ :builder | builder absolute; moveTo: pt1; curveVia: pt2 and: pt3 to: pt4 ]. ! ! !AthensBezier3Scene methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/26/2013 17:54'! initFromArray: aControlPointsArray pt1 := aControlPointsArray at: 1. pt2 := aControlPointsArray at: 2. pt3 := aControlPointsArray at: 3. pt4 := aControlPointsArray at: 4. ! ! !AthensBezier3Scene methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/2/2013 18:25'! renderOn: canvas | path pathBlock polygonizedPath | canvas surface clear: Color black. pathBlock := [ :builder | builder absolute; moveTo: pt1; curveVia: pt2 and: pt3 to: pt4 ]. "First , we draw the curve using Cairo" (canvas setStrokePaint: Color green). canvas drawShape: (canvas createPath: pathBlock). "draw a polygon, connecting control points" (canvas setStrokePaint: Color blue) width: 0.5. canvas drawShape: (canvas createPath: [ :builder | builder absolute; moveTo: pt1; lineTo: pt2; lineTo: pt3; lineTo: pt4 ]). canvas setPaint: Color red. path := AthensSimplePathBuilder createPath: pathBlock. " polygonizedPath := path asPolygon: canvas pathTransform. " canvas drawShape: ( canvas createPath: [ :builder | | flattener | builder absolute. flattener := AthensCurveFlattener new dest: builder. flattener transform: (canvas pathTransform). flattener convert:path. ]).! ! !AthensCanvas commentStamp: '' prior: 40218983! The Athens canvas is a central object which is used to performs drawings on a surface. Please note, that Athens does not allows you to instantiate canvas directly, instead you obtain a ready for use instance as an argument in #drawDuring: message, sent to athens surface: surface drawDuring: [:canvas | .... ] Using canvas outside a #drawDuring: method is highly discouraged. Doing so may lead to unpredicted behavior/data corruption/image crash.! !AthensCanvas class methodsFor: 'private' stamp: 'IgorStasenko 3/21/2011 00:19'! new "use #on: instead" self shouldNotImplement! ! !AthensCanvas class methodsFor: 'private' stamp: 'IgorStasenko 3/21/2011 00:17'! on: aSurface ^ self basicNew initializeWithSurface: aSurface! ! !AthensCanvas methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:20'! cacheAt: anObject ifAbsentPut: aBlock ^ surface cacheAt: anObject ifAbsentPut: aBlock! ! !AthensCanvas methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:31'! clearMask: aShape "set mask pixels to 0 for all pixels covered by shape, aShape" ^ aShape paintFillsUsing: surface clearMaskPaint on: self ! ! !AthensCanvas methodsFor: 'clipping' stamp: 'IgorStasenko 4/21/2011 14:47'! clipBy: aRectangle during: aBlock " Set a clipping rectangle during drawing operations performed in a block. Note that clipping rectangle are intetersected with currently active clipping rectangle " ^surface clipBy: aRectangle during: aBlock! ! !AthensCanvas methodsFor: 'paths' stamp: 'IgorStasenko 11/19/2012 05:21'! createPath: aPathCreatingBlock "Create new path. A path creating block should be a monadic block, which will get a path builder instance as argument. See AthensPathBuilder for available protocol. The resulting path object can be later used for drawing. " ^ surface createPath: aPathCreatingBlock! ! !AthensCanvas methodsFor: 'paths' stamp: 'IgorStasenko 3/22/2011 22:04'! createRectanglePath: aRectangle ^ surface createRectanglePath: aRectangle ! ! !AthensCanvas methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:06'! disableMask ^ surface disableMask! ! !AthensCanvas methodsFor: 'drawing' stamp: 'FernandoOlivero 3/13/2012 16:21'! draw "Fill the shape (anObject) using currently selected paint an object should implement double-dispatch to currently selected paint" ^ shape paintFillsUsing: paint on: self ! ! !AthensCanvas methodsFor: 'drawing' stamp: 'IgorStasenko 11/19/2012 05:18'! draw: anObject "A generic dispatch method to draw anObject on receiver. the object should understand #drawOnAthensCanvas: message" ^ anObject drawOnAthensCanvas: self! ! !AthensCanvas methodsFor: 'drawing' stamp: 'IgorStasenko 11/19/2012 05:17'! drawShape: anObject "A convenience method, which sets the current shape to anObject and then fills it with currently selected paint" self setShape: anObject. self draw. ! ! !AthensCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 9/1/2012 22:08'! drawString: aString "Draw a string using currently selected font. Answer a total advance of rendered string " ^ fontRenderer renderCharacters: aString from: 1 to: aString size.! ! !AthensCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 9/1/2012 22:08'! drawString: aString from: start to: end "Draw a portion of string using currently selected font. Answer a total advance of rendered portion" ^ fontRenderer renderCharacters: aString from: start to: end! ! !AthensCanvas methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:06'! enableMask ^ surface enableMask! ! !AthensCanvas methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:56'! flushCacheAt: anObject "Flush (delete) any cached value(s) identified by given object, anObject. A surface using identity comparison for object identifiers. Answer receiver. " surface removeCacheAt: anObject! ! !AthensCanvas methodsFor: 'initialization' stamp: 'IgorStasenko 3/22/2011 11:13'! initializeWithSurface: anAthensSurface surface := anAthensSurface! ! !AthensCanvas methodsFor: 'clipping' stamp: 'IgorStasenko 4/21/2011 14:40'! isVisible: aRectangle "check if rectangle are not fully clipped by current clipping coordinates" ^ true! ! !AthensCanvas methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 12:12'! paint ^ paint ! ! !AthensCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 11/19/2012 05:14'! paintMode "Answer the current paint mode controller. The answered object should conform to AthensPaintMode public protocol." ^ paintMode! ! !AthensCanvas methodsFor: 'transformation matrices' stamp: 'IgorStasenko 11/19/2012 05:14'! paintTransform "Answer the paint transformation matrix controller. The answered object should conform to AthensTransform public protocol." ^ surface paintTransform ! ! !AthensCanvas methodsFor: 'transformation matrices' stamp: 'IgorStasenko 11/19/2012 05:14'! pathTransform "Answer the path transformation matrix controller. The answered object should conform to AthensTransform public protocol." ^ surface pathTransform ! ! !AthensCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 11/19/2012 05:12'! setFont: aFont "Set the current font of receiver. Font object should answer a glyph renderer instance, compatible with glyph renderer protocol" fontRenderer := aFont glyphRendererOn: surface.! ! !AthensCanvas methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:35'! setMask: aShape "set mask pixels to 1 for all pixels covered by shape, aShape" ^ aShape paintFillsUsing: surface setMaskPaint on: self ! ! !AthensCanvas methodsFor: 'paint' stamp: 'IgorStasenko 11/19/2012 05:11'! setPaint: aPaint "set the current paint of receiver" paint = aPaint ifTrue:[ ^ paint ]. paint := aPaint asAthensPaintOn: self. ^ paint.! ! !AthensCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 5/6/2013 05:41'! setShape: anObject "Set the current shape of receiver" shape := anObject asAthensShapeOn: self.! ! !AthensCanvas methodsFor: 'paint' stamp: 'IgorStasenko 11/19/2012 05:11'! setStrokePaint: aPaint "use paint as stroke paint, note conversion to #asStrokePaintOn:" paint := (aPaint asAthensPaintOn: self) asStrokePaintOn: self. ^ paint! ! !AthensCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 11/19/2012 05:10'! surface "Answer an Athens surface, to which receiver is bound to" ^ surface! ! !AthensCubicBezier methodsFor: 'subdivision' stamp: 'IgorStasenko 4/29/2013 21:42'! recursiveSubDiv: flattener level: level | dx dy d2 d3 da1 da2 k f1 f2 | " Try to approximate the full cubic curve by a single straight line " level > flattener subdivisionLimit ifTrue: [ ^ self ]. dx := x4-x1. dy := y4-y1. d2 := ((x2 - x4) * dy - ((y2 - y4) * dx)) abs. d3 := ((x3 - x4) * dy - ((y3 - y4) * dx)) abs. f1 := d2 > flattener curveCollinearityEpsilon. f2 := d3 > flattener curveCollinearityEpsilon. f1 ifTrue: [ f2 ifTrue: [ " Regular case " (d2 + d3) squared <= (flattener distanceToleranceSquared * (dx squared + dy squared)) ifTrue: [ "If the curvature doesn't exceed the distance_tolerance value we tend to finish subdivisions." " flattener accountForAngleTolerance ifFalse: [ ^ flattener lineToX: (x2 interpolateTo: x3 at: 0.5) y: (y2 interpolateTo: y3 at: 0.5) ]. " "Angle & Cusp Condition" k := (y3-y2) arcTan: (x3 - x2). da1 := (k - ((y2-y1) arcTan: (x2-x1))) abs. da2 := ((y4-y3 arcTan: x4-x3) - k) abs. da1 >= Float pi ifTrue: [ da1 := Float pi*2 - da1 ]. da2 >= Float pi ifTrue: [ da2 := Float pi*2 - da2 ]. (da1 + da2) < flattener angleTolerance ifTrue: [ " Finally we can stop the recursion " ^ flattener lineToX: (x2 interpolateTo: x3 at: 0.5) y: (y2 interpolateTo: y3 at: 0.5) ]. (flattener overCuspLimit: da1) ifTrue: [ ^ flattener lineToX: x2 y: y2 ]. (flattener overCuspLimit: da2) ifTrue: [ ^ flattener lineToX: x3 y: y3 ]. ] ] ifFalse: [ "p1,p3,p4 are collinear, p2 is significant" (d2 squared <= (flattener distanceToleranceSquared * (dx squared + dy squared) ) ) ifTrue: [ flattener accountForAngleTolerance ifFalse: [ ^ flattener lineToX: (x2 interpolateTo: x3 at: 0.5) y: (y2 interpolateTo: y3 at: 0.5) ]. "Angle Condition" da1 := ((y3-y2 arcTan: (x3-x2)) - (y2-y1 arcTan:(x2-x1))) abs. da1 >= Float pi ifTrue: [ da1 := Float pi * 2 - da1 ]. da1 < flattener angleTolerance ifTrue: [ ^ flattener lineToX: x2 y: y2; lineToX: x3 y: y3 ]. (flattener overCuspLimit: da1) ifTrue: [ ^ flattener lineToX: x2 y: y2 ] ] ] ] ifFalse: [ f2 ifTrue: [ "p1,p2,p4 are collinear, p3 is significant " (d3 squared <= (flattener distanceToleranceSquared * (dx squared + dy squared) ) ) ifTrue: [ flattener accountForAngleTolerance ifFalse: [ ^ flattener lineToX: (x2 interpolateTo: x3 at: 0.5) y: (y2 interpolateTo: y3 at: 0.5) ]. "Angle Condition" da1 := ((y4-y3 arcTan: (x4-x3)) - (y3-y2 arcTan:(x3-x2))) abs. da1 >= Float pi ifTrue: [ da1 := Float pi * 2 - da1 ]. da1 < flattener angleTolerance ifTrue: [ ^ flattener lineToX: x2 y: y2; lineToX: x3 y: y3 ]. (flattener overCuspLimit: da1) ifTrue: [ ^ flattener lineToX: x3 y: y3 ] ] ] ifFalse: [ "All collinear OR p1==p4 " k := dx*dx + (dy*dy). (k = 0.0) ifTrue: [ d2 := (x1-x2) squared + (y1-y2) squared. d3 := (x3-x4) squared + (y3-y4) squared ] ifFalse: [ k := 1 / k. da1 := x2 - x1. da2 := y2 - y1. d2 := k * (da1*dx + (da2*dy)). da1 := x3 - x1. da2 := y3 - y1. d3 := k * (da1*dx + (da2*dy)). (d2 > 0.0 and: [ d2 < 1.0 and: [d3>0.0 and: [d3 < 1.0]]]) ifTrue: [ " Simple collinear case, 1---2---3---4 We can leave just two endpoints" ^ self ]. d2 <= 0.0 ifTrue: [ d2 := (x1-x2) squared + (y1-y2) squared ] ifFalse: [ d2 >= 1.0 ifTrue: [ d2 := (x2-x4) squared + (y2-y4) squared ] ifFalse: [ d2 := (x2 - x1 - (d2*dx)) squared + (y2 - y1 - (d2*dy)) squared ]]. d3 <= 0.0 ifTrue: [ d3 := (x3-x1) squared + (y3-y1) squared ] ifFalse: [ d3 >= 1.0 ifTrue: [ d3 := (x3-x4) squared + (y3-y4) squared ] ifFalse: [ d3 := (x3 - x1 - (d3*dx)) squared + (y3-y1- (d3*dy)) squared ]]. ]. (d2 > d3) ifTrue: [ (d2 < flattener distanceToleranceSquared) ifTrue: [ ^ flattener lineToX: x2 y: y2 ] ] ifFalse: [ (d3 < flattener distanceToleranceSquared ) ifTrue: [ ^ flattener lineToX: x3 y: y3 ] ]. ] ]. self subdivideAt: 0.5 do: [ :b1 :b2 | b1 recursiveSubDiv: flattener level: level +1. b2 recursiveSubDiv: flattener level: level +1. ]. ! ! !AthensCubicBezier methodsFor: 'subdivision' stamp: 'IgorStasenko 4/24/2013 16:21'! subdivideAt: t do: aBinaryBlock | x12 y12 x23 y23 x34 y34 x1223 y1223 x2334 y2334 xsplit ysplit | x12 := x1 interpolateTo: x2 at: t. y12 := y1 interpolateTo: y2 at: t. x23 := x2 interpolateTo: x3 at: t. y23 := y2 interpolateTo: y3 at: t. x34 := x3 interpolateTo: x4 at: t. y34 := y3 interpolateTo: y4 at: t. x1223 := x12 interpolateTo: x23 at: t. x2334 := x23 interpolateTo: x34 at: t. y1223 := y12 interpolateTo: y23 at: t. y2334 := y23 interpolateTo: y34 at: t. xsplit := x1223 interpolateTo: x2334 at: t. ysplit := y1223 interpolateTo: y2334 at: t. ^ aBinaryBlock value: "p1 - p12 - p1223 - psplit" (self copy x2: x12; y2: y12; x3: x1223; y3: y1223; x4: xsplit; y4: ysplit ) value: "psplit - p2334 - p34 - p4" (self copy x1: xsplit; y1: ysplit; x2: x2334; y2: y2334; x3: x34; y3: y34 ) ! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x1 ^ x1! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x1: anObject x1 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x2 ^ x2! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x2: anObject x2 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x3 ^ x3! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x3: anObject x3 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x4 ^ x4! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! x4: anObject x4 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y1 ^ y1! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y1: anObject y1 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y2 ^ y2! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y2: anObject y2 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y3 ^ y3! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y3: anObject y3 := anObject! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y4 ^ y4! ! !AthensCubicBezier methodsFor: 'accessing' stamp: 'IgorStasenko 4/26/2013 17:07'! y4: anObject y4 := anObject! ! !AthensPaintMode commentStamp: '' prior: 40219490! A paint mode controls how the incoming color (source) will be transferred to surface (destination). To set a paint mode for canvas, send a message with corresponding mode name to my instance. My instance(s) is available via canvas protocol, i.e. 'canvas paintMode'. For example, to set an 'over' paint mode, use following: canvas paintMode over. If you want to restore original paint mode after performing drawing operations, which may change it, use #restoreAfter: method , i.e. canvas paintMode restoreAfter: [ .. perform any drawing operations here.. ]. Since different backends may support different set of paint modes, the default implementation in AthensPaintMode for all mode setters is to signal an error. To query a set of available paint modes, supported by backend, use #availableModes message. ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! add self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:04'! atop "Set 'atop' painting mode " self notAvailable! ! !AthensPaintMode methodsFor: 'capabilities' stamp: 'IgorStasenko 9/1/2012 17:01'! availableModes "Answer a collection of paint mode names, currently supported by backend. Different backends may support different sets of paint modes. You may need to structure your code depending on modes available" ^ #()! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:02'! clear "Set 'clear' drawing mode. Drawing under this mode will clear the surface under the shape boundaries" self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! colorBurn self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! colorDodge self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! darken self notAvailable! ! !AthensPaintMode methodsFor: 'default mode' stamp: 'IgorStasenko 9/1/2012 16:41'! default "Set the default paint mode. The default paint mode in Athens, is 'over' " ^ self over! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:02'! dest "Set 'dest' drawing mode. Drawing under this mode will ignore the source, as if nothing drawn" self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! destAtop self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! destIn self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! destOut self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:04'! destOver self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! difference self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! exclusion self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! hardLight self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! hslColor self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! hslHue self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! hslLuminosity self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:07'! hslSaturation self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:48'! in self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! lighten self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! multiply self notAvailable! ! !AthensPaintMode methodsFor: 'errors' stamp: 'IgorStasenko 9/1/2012 16:49'! notAvailable ^ self error: 'A requested paint mode is not supported by backend'! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:04'! out "Set 'out' painting mode " self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:50'! over "Set 'over' drawing mode. This is default paint mode. Drawing under this mode will blend source with destination color using source alpha component" self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! overlay self notAvailable! ! !AthensPaintMode methodsFor: 'convenience' stamp: 'IgorStasenko 9/1/2012 14:40'! restoreAfter: aBlock "restore current paint mode after evaluating a block" self subclassResponsibility! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! saturate self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! screen self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:06'! softLight self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:50'! source "Set 'source' drawing mode. Drawing under this mode will replace the content with incoming source under the shape boundaries" self notAvailable! ! !AthensPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:05'! xor self notAvailable! ! !AthensPathBuilder commentStamp: '' prior: 40220371! i am abstract path builder, to specify an interface protocol which is available for building paths, by using canvas or surface #createPath: method.! !AthensPathBuilder class methodsFor: 'instance creation' stamp: 'IgorStasenko 4/18/2013 17:45'! createPath: aBlock ^ self new createPath: aBlock! ! !AthensPathBuilder class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/7/2012 15:26'! initialize ZeroPoint := 0@0! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:26'! absolute "next commands will use absolute coordinates for all segment points" self subclassResponsibility! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:28'! ccwArcTo: endPt angle: rot " Add a counter-clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " self subclassResponsibility! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:30'! close "close the current path controur" self subclassResponsibility ! ! !AthensPathBuilder methodsFor: 'creating path' stamp: 'IgorStasenko 4/18/2013 17:46'! createPath: aBlock "aBlock value: self ...." self subclassResponsibility ! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:30'! curveVia: cp1 and: cp2 to: aPoint "Add a cubic bezier curve, starting from current path endpoint, using control points cp1, cp2 and ending at aPoint " self subclassResponsibility ! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:29'! curveVia: cp1 to: aPoint "Add a quadric bezier curve, starting from current path endpoint, using control point cp1, and ending at aPoint " self subclassResponsibility ! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:28'! cwArcTo: endPt angle: rot " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " self subclassResponsibility! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:27'! lineTo: aPoint "add a line segment, starting from current path endpoint to aPoint" self subclassResponsibility! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:27'! moveTo: aPoint " move command always starts a new contour " self subclassResponsibility! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 14:27'! relative "next commands will use relative coordinates for all segment points" self subclassResponsibility! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/21/2011 03:40'! absolute absolute := true.! ! !AthensSimplePathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/26/2011 16:32'! addSegment: aSegment lastSegment next: aSegment. lastSegment := aSegment. ! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 13:41'! ccwArcTo: endPt angle: rot " angle should be specified in radians " ^ self addSegment: (AthensCCWArcSegment new endPoint: (self toAbsolute: endPt) angle: rot). ! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/26/2011 16:47'! close "close the current contour" self addSegment: (AthensCloseSegment new point: contourStartPt). contourStartPt := nil. open := false! ! !AthensSimplePathBuilder methodsFor: 'creating path' stamp: 'IgorStasenko 4/18/2013 17:47'! createPath: aBlock "aBlock value: self ...." aBlock value: self. ^ pathStart! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/26/2011 19:26'! curveVia: cp1 and: cp2 to: aPoint "Cubic bezier curve" | pt1 pt2 pt3 | "Quad bezier curve" pt1 := self toAbsolute: cp1. pt2 := self toAbsolute: cp2. pt3 := self toAbsolute: aPoint. ^ self addSegment: ( AthensCubicSegment new from: lastSegment endPoint via: pt1 and: pt2 to: pt3) ! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/26/2011 16:51'! curveVia: cp1 to: aPoint | pt1 pt2 | "Quad bezier curve" pt1 := self toAbsolute: cp1. pt2 := self toAbsolute: aPoint. ^ self addSegment: ( AthensQuadSegment new from: lastSegment endPoint via: pt1 to: pt2) ! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 13:37'! cwArcTo: endPt angle: rot " angle should be specified in radians " ^ self addSegment: (AthensCWArcSegment new endPoint: (self toAbsolute: endPt) angle: rot). ! ! !AthensSimplePathBuilder methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/18/2013 14:26'! initialize "A new path always starts from implicit (moveTo:0@0) segment. If next segment is moveTo: , the point of already existing move segment will be changed, avoiding creating extra move segments. " absolute := false. contourStartPt := ZeroPoint. pathStart := lastSegment := (AthensMoveSegment new point: ZeroPoint).! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/26/2011 16:45'! lineTo: aPoint ^ self addSegment: (AthensLineSegment new point: (self toAbsolute: aPoint)). ! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/26/2011 16:50'! moveTo: aPoint " move command always starts a new contour " contourStartPt := self toAbsolute: aPoint. "collapse multiple moves to a single one" lastSegment isMove ifTrue: [ lastSegment point: contourStartPt. ^ self ]. self addSegment: (AthensMoveSegment new point: contourStartPt; reopen: open). open := true.! ! !AthensSimplePathBuilder methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 19:40'! pathBounds ^ xMin@yMin corner: xMax@yMax! ! !AthensSimplePathBuilder methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 19:50'! pathStart ^ pathStart! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/21/2011 03:40'! relative absolute := false.! ! !AthensSimplePathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/26/2011 16:43'! toAbsolute: aPoint | pt | pt := absolute ifTrue: [ aPoint ] ifFalse: [ lastSegment endPoint + aPoint ]. "note the coordinate to calculate the path's bounding box" xMin ifNil: [ xMin := xMax := pt x. yMin := yMax := pt y. ] ifNotNil: [ xMin := pt x min: xMin. yMin := pt y min: yMin. xMax := pt x max: xMax. yMax := pt y max: yMax. ]. ^ pt! ! !AthensPathConverter commentStamp: 'IgorStasenko 5/1/2011 23:14' prior: 40220596! i am a base class for path conversion. i take a path as input and producing a path commands as output. My default implementation just passing all path commands without changes to destination without any conversion Example of use: converter := AthensXYZConverter dest: (AthensPolygonPath new). convertedPath := converter convert: sourcePath. You can chain multiple converters: basicConverter := AthensZYXConv dest: AthensPolygonPath new. compoundConverter := AthensABCConverter dest: basicConverter. compoundConverter convert: somePath in this case, an initial conversion is performed by instance of AthensABCConverter, and then conversion results are passed down to AthensZYXConv, and then finally to instance of AthensPolygonPath. ! !AthensBezierConverter commentStamp: 'IgorStasenko 5/1/2011 21:50' prior: 40221418! I converting all bezier segments to a sequence of line segments, by approximating the curve along its path. This classs is used for generating strokes.! !AthensBezierConverter class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/29/2011 18:10'! initialize CollinearityEps := 1e-30. DistanceEps := 1e-30. CurveAngleTolerance := 0.01.! ! !AthensBezierConverter methodsFor: 'helpers' stamp: 'IgorStasenko 5/1/2011 21:45'! angleBetween: p1 and: p2 ifDegenerate: aBlock " Calculate an angle (in radians) between two vectors. Evaluate a block, in case if calculation not possible because one of the vectors has zero length " | x1 y1 x2 y2 dot2 n2 | x1 := p1 x. y1 := p1 y. x2 := p2 x. y2 := p2 y. dot2 := x1 * x2 + (y1 * y2). dot2 := dot2 * dot2. n2 := (x1*x1 + (y1*y1)) * (x2*x2 + (y2*y2)). n2 = 0 ifTrue: [ ^ aBlock value ]. ^ (dot2 / n2) arcCos! ! !AthensBezierConverter methodsFor: 'converting path commands' stamp: 'IgorStasenko 5/1/2011 22:03'! curveVia: pt1 to: pt2 self recursiveBezier2_x1: endPoint x y1: endPoint y x2: pt1 x y2: pt1 y x3: pt2 x y3: pt2 y! ! !AthensBezierConverter methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/29/2011 18:11'! initialize distanceTolerance := 0.5. angleTolerance := 0.1 . ! ! !AthensBezierConverter methodsFor: 'testing' stamp: 'IgorStasenko 4/29/2011 18:09'! isFlatBezier2_x1: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3 | dx dy d da angle | dx := x3-x1. dy := y3-y1. d := (((x2 - x3) * dy) - ((y2 - y3) * dx)) abs. d > CollinearityEps ifTrue: [ "regular case" d*d <= (distanceTolerance * ( dx*dx + (dy*dy))) ifTrue: [ angleTolerance < CurveAngleTolerance ifTrue: [ ^ true ]. angle := self angleBetween: x2-x1 @ (y2-y1) and: x3-x2 @ (y3-y2) ifDegenerate: [ 0.0 ]. "parallel. no need to proceed further" angle <= angleTolerance ifTrue: [ ^ true ] ] ] ifFalse: [ "collinear" da := dx*dx + (dy*dy). da = 0 ifTrue: [ d := (x1-x2) squared + (y1-y2) squared ] ifFalse: [ d = ((x2 - x1)*dx + ((y2 - y1)*dy)) / da. (d > 0.0 and: [ d < 1.0 ] ) ifTrue: [ "Simple collinear case, 1---2---3" ^ true ]. d <= 0.0 ifTrue: [ d := (x1-x2) squared + (y1-y2) squared ] ifFalse: [ d >= 1.0 ifTrue: [ d:= (x2-x3) squared + (y2-y3) squared ] ifFalse: [ d:= (x2 - x1 - (d*dx)) squared + (y2 - y1 - (d*dy)) squared ] ]. ]. d < self distanceToleranceSquared ifTrue: [ ^ true ] ]. ^ false! ! !AthensBezierConverter methodsFor: 'helpers' stamp: 'IgorStasenko 5/1/2011 21:47'! recursiveBezier2_x1: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3 "recursively subdive bezier curve as long as #isFlatBezier2.. answers false " (self isFlatBezier2_x1: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3) ifTrue: [ dest lineTo: x2 @ y2; lineTo: x3 @ y3 ] ifFalse: [ | x12 y12 x23 y23 x123 y123 | "calculate midpoints of line segments " x12 := (x1 + x2) * 0.5. y12 := (y1 + y2) * 0.5 . x23 := (x2 + x3) * 0.5 . y23 := (y2 + y3) * 0.5 . x123 := (x12 + x23) * 0.5. y123 := (y12 + y23) * 0.5. self recursiveBezier2_x1: x1 y1: y1 x2: x12 y2: y12 x3: x123 y3: y123. self recursiveBezier2_x1: x123 y1: y123 x2: x23 y2: y23 x3: x3 y3: y3. ] ! ! !AthensPathConverter class methodsFor: 'instance creation' stamp: 'IgorStasenko 5/1/2011 22:18'! dest: aDest ^ self new dest: aDest! ! !AthensPathConverter class methodsFor: 'instance creation' stamp: 'IgorStasenko 5/1/2011 22:20'! source: aSource dest: aDest " answer a converted path from source to dest, using my instance as a converter" ^ self new source: aSource dest: aDest! ! !AthensPathConverter methodsFor: 'converting path commands' stamp: 'IgorStasenko 5/2/2011 05:18'! close: aPoint ^ dest close: aPoint! ! !AthensPathConverter methodsFor: 'actions' stamp: 'IgorStasenko 5/1/2011 22:16'! convert: aSourcePath " iterate over segments and do conversion " | segment | segment := aSourcePath. [ segment notNil ] whileTrue: [ segment convertWith: self. endPoint := segment endPoint. segment := segment next. ]. ^ dest finish! ! !AthensPathConverter methodsFor: 'converting path commands' stamp: 'IgorStasenko 4/29/2011 18:31'! curveVia: pt1 to: pt2 ^ dest curveVia: pt1 to: pt2 ! ! !AthensPathConverter methodsFor: 'accessing' stamp: 'IgorStasenko 5/1/2011 22:18'! dest: anObject dest := anObject! ! !AthensPathConverter methodsFor: 'actions' stamp: 'IgorStasenko 5/1/2011 22:13'! finish ^ dest finish! ! !AthensPathConverter methodsFor: 'converting path commands' stamp: 'IgorStasenko 4/29/2011 18:36'! lineTo: aPoint ^ dest lineTo: aPoint! ! !AthensPathConverter methodsFor: 'converting path commands' stamp: 'IgorStasenko 4/29/2011 18:28'! moveTo: aPoint ^ dest moveTo: aPoint! ! !AthensPathConverter methodsFor: 'accessing' stamp: 'IgorStasenko 4/29/2011 18:18'! source: aSource dest: aDest sourcePath := aSource. dest := aDest! ! !AthensPathSegment commentStamp: '' prior: 40221630! The path segment is path building block. Path is formed from list of connected path segments. At building stage, there is no container nor separately defined "path" object, just a linked list of segments. Later the segments are accumulated in backend-specific path object, and the way how it is organized may vary. My (sub)instances usually are not created directly by user, but instead by instance of AthensPathBuilder. Therefore, all my subclasses are considered private and implementation detail.! !AthensArcSegment commentStamp: 'IgorStasenko 3/7/2012 13:41' prior: 40222204! i am abstract class , representing an arc segment! !AthensArcSegment methodsFor: 'accessors' stamp: 'IgorStasenko 3/7/2012 13:44'! angle ^ angle! ! !AthensArcSegment methodsFor: 'accessors' stamp: 'IgorStasenko 3/7/2012 13:31'! endPoint ^ endPoint! ! !AthensArcSegment methodsFor: 'accessors' stamp: 'IgorStasenko 3/7/2012 13:30'! endPoint: pt angle: a endPoint := pt. angle := a! ! !AthensCCWArcSegment commentStamp: '' prior: 40222315! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in counter-clockwise direction.! !AthensCCWArcSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:39'! accept: aVisitor ^ aVisitor ccwArcSegment: self! ! !AthensCCWArcSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:21'! sendCommandTo: aBuilder ^ aBuilder ccwArcTo: endPoint angle: angle! ! !AthensCWArcSegment commentStamp: '' prior: 40222514! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in clockwise direction.! !AthensCWArcSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:39'! accept: aVisitor ^ aVisitor cwArcSegment: self! ! !AthensCWArcSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:21'! sendCommandTo: aBuilder ^ aBuilder cwArcTo: endPoint angle: angle! ! !AthensCubicSegment commentStamp: 'IgorStasenko 3/7/2012 13:32' prior: 40222720! i represent a cubic Bezier path segment! !AthensCubicSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:39'! accept: aVisitor ^ aVisitor cubicBezierSegment: self! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 11:39'! endPoint ^ to! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 08:17'! from: origin via: controlPoint and: secondControlPoint to: destination via1:= controlPoint. via2 := secondControlPoint. to := destination.! ! !AthensCubicSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:22'! sendCommandTo: aBuilder ^ aBuilder curveVia: via1 and: via2 to: to ! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 08:05'! to ^ to! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 08:09'! via1 ^ via1! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 08:09'! via2 ^ via2! ! !AthensEllipticalArcSegment commentStamp: '' prior: 40222828! I representing an elliptical arc, using endpoint parametrization: - initial endpoint (x0,y0), which comes from previous segment - final endpoint (x1,y1) - rh, rv , the radii of unrotated ellipse - Large arc flag: true if more than 180 degrees of the arc is to be traversed (as measured on the unscaled circle), false otherwise - Sweep flag: true if the arc is to be traversed in the counter-clockwise direction, false otherwise (not functional yet)! !AthensEllipticalArcSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:42'! accept: aVisitor ^ aVisitor ellipticalArcSegment: self! ! !AthensLineSegment commentStamp: '' prior: 40223341! i represent a line segment, created using #lineTo: command of AthensPathBuilder! !AthensCloseSegment commentStamp: '' prior: 40223484! i represent close segment (when user issuing #close command to path builder)! !AthensCloseSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:40'! accept: aVisitor ^ aVisitor closeSegment: self! ! !AthensCloseSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:22'! sendCommandTo: aBuilder ^ aBuilder close ! ! !AthensLineSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:41'! accept: aVisitor ^ aVisitor lineSegment: self! ! !AthensLineSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:21'! endPoint ^ point! ! !AthensLineSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:16'! point ^ point! ! !AthensLineSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:16'! point: anObject point := anObject! ! !AthensLineSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:23'! sendCommandTo: aBuilder ^ aBuilder lineTo: point ! ! !AthensMoveSegment commentStamp: 'IgorStasenko 5/2/2011 05:35' prior: 40223635! Move segment always indicates starting of a new contour. If contour ends with close command, then my insntance will have 'closed' flag set to true. See AthensPathBuilder , which is responsible for building paths.! !AthensMoveSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:40'! accept: aVisitor ^ aVisitor moveSegment: self! ! !AthensMoveSegment methodsFor: 'accessing' stamp: 'IgorStasenko 5/2/2011 05:37'! closed: aBoolean closed := aBoolean! ! !AthensMoveSegment methodsFor: 'testing' stamp: 'IgorStasenko 5/2/2011 05:37'! isClosed ^ closed == true! ! !AthensMoveSegment methodsFor: 'testing' stamp: 'IgorStasenko 3/27/2011 17:48'! isMove ^ true! ! !AthensMoveSegment methodsFor: 'accessing' stamp: 'FernandoOlivero 1/15/2012 14:59'! reopen: aBoolean closed := aBoolean! ! !AthensMoveSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:23'! sendCommandTo: aBuilder ^ aBuilder moveTo: point ! ! !AthensPathSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:38'! accept: aVisitor self subclassResponsibility ! ! !AthensPathSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/29/2011 18:13'! convertWith: anObject self subclassResponsibility! ! !AthensPathSegment methodsFor: 'iterating' stamp: 'IgorStasenko 4/18/2013 04:52'! do: aBlock | segment | segment := self. [ aBlock value: segment. segment := segment next. segment notNil ] whileTrue.! ! !AthensPathSegment methodsFor: 'testing' stamp: 'IgorStasenko 3/26/2011 16:44'! isMove ^ false! ! !AthensPathSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:14'! next ^ next! ! !AthensPathSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:14'! next: anObject next := anObject! ! !AthensPathSegment methodsFor: 'iterating' stamp: 'IgorStasenko 4/18/2013 05:20'! sendCommandsTo: aBuilder self do: [ :segment | segment sendCommandTo: aBuilder ]! ! !AthensPathSegment methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 21:51'! size "answer 1 + the number of segments next to receiver" | segment count | segment := self. count := 0. [ segment notNil ] whileTrue: [ count := count + 1. segment := segment next ]. ^ count.! ! !AthensPathSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/13/2013 17:33'! visitWith: visitor self subclassResponsibility! ! !AthensQuadSegment commentStamp: 'IgorStasenko 3/7/2012 13:32' prior: 40223923! i represent a quadric Bezier path segment. Any quadratic spline can be expressed as a cubic (where the cubic term is zero). The end points of the cubic will be the same as the quadratic's. CP0 = QP0 CP3 = QP2 The two control points for the cubic are: CP1 = QP0 + 2/3 *(QP1-QP0) CP2 = QP2 + 2/3 *(QP1-QP2) ! !AthensQuadSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 04:40'! accept: aVisitor ^ aVisitor quadricBezierSegment: self! ! !AthensQuadSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:52'! endPoint ^ to! ! !AthensQuadSegment methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/26/2011 16:52'! from: pt0 via: pt1 to: p via := pt1. to := p.! ! !AthensQuadSegment methodsFor: 'visitor' stamp: 'IgorStasenko 4/18/2013 05:22'! sendCommandTo: aBuilder ^ aBuilder curveVia: via to: to ! ! !AthensQuadSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:52'! to ^ to! ! !AthensQuadSegment methodsFor: 'accessing' stamp: 'IgorStasenko 3/26/2011 16:52'! via ^ via! ! !AthensCurveFlattener commentStamp: '' prior: 40224312! This converter flattens all curves by converting them to series of lines. This means that path can be rendered using simple polygon rendering technique and nothing else.! !AthensCurveFlattener class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/26/2013 17:40'! initialize CurveCollinearityEpsilon := 1e-30 asFloat. CurveDistanceEpsilon := 1e-30 asFloat. CurveAngleToleranceEpsilon := 0.01. SubdivisionLimit := 10.! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 4/29/2013 21:48'! accountForAngleTolerance " It's important only when we want to draw an equidistant curve, that is, a stroke of considerable width. If we don't need to draw a stroke or the stroke width is one pixel or less, the distance criterion works quite well. " ^ false.! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 4/29/2013 21:48'! angleTolerance ^ CurveAngleToleranceEpsilon ! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 4/25/2013 00:59'! curveCollinearityEpsilon ^ CurveCollinearityEpsilon ! ! !AthensCurveFlattener methodsFor: 'path commands' stamp: 'IgorStasenko 4/26/2013 17:34'! curveVia: via1 and: via2 to: end | pt1 pt2 pt3 pt4 curve | pt1 := transform transform: endPoint. pt2 := transform transform: via1. pt3 := transform transform: via2. pt4 := transform transform: end. endPoint := end. curve := AthensCubicBezier new x1: pt1 x; y1: pt1 y; x2: pt2 x; y2: pt2 y; x3: pt3 x; y3: pt3 y; x4: pt4 x; y4: pt4 y. curve recursiveSubDiv: self level: 0. self lineTo: endPoint. ! ! !AthensCurveFlattener methodsFor: 'path commands' stamp: 'IgorStasenko 4/18/2013 21:47'! curveVia: via to: end | pt1 pt2 pt3 | pt1 := transform transform: endPoint. pt2 := transform transform: via. pt3 := transform transform: end. endPoint := end. self flattenQuadBezier: pt1 x y1: pt1 y x2: pt2 x y2: pt2 y x3: pt3 x y3: pt3 y. ! ! !AthensCurveFlattener methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 21:59'! defaultTolerance ^ 1! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 5/2/2013 17:43'! distanceToleranceSquared ^ self lengthToleranceSquared ! ! !AthensCurveFlattener methodsFor: 'helpers' stamp: 'IgorStasenko 4/19/2013 22:17'! flattenCubicBezier: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3 x4: x4 y4: y4 ! ! !AthensCurveFlattener methodsFor: 'public API' stamp: 'IgorStasenko 4/18/2013 15:06'! flattenPath: aPath transform: transform "This is an entry point for flattening path. An additional argument, transform is an Affine matrix, used to map path geometry to screen, and therefore used to calculate the error tolerance for path subdivisions" ^ self flattenPath: aPath transform: transform toleranceMultiplier: 1! ! !AthensCurveFlattener methodsFor: 'public API' stamp: 'IgorStasenko 4/18/2013 17:48'! flattenPath: aPath transform: aTransform toleranceMultiplier: aToleranceMultiplier "This is an entry point for flattening path (converting all curves into line segments by approximating them). - transform is an Affine matrix, used to map path geometry to screen, and therefore used to calculate the error tolerance for path subdivisions - a tolerance multiplier is a number .. which if = 1 , the default error tolerance is used, if > 1 you will get more coarse approximation if < 1 you will get more finer approximation " transform := aTransform. lengthTolerance := aToleranceMultiplier. lengthToleranceSquared := lengthTolerance squared. ! ! !AthensCurveFlattener methodsFor: 'helpers' stamp: 'IgorStasenko 4/18/2013 23:34'! flattenQuadBezier: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3 "Recursively subdive quadric bezier curve as long as #isFlatBezier.. answers false " "The points here is unboxed intentionally to avoid generating extra garbage (which contributes to performance loss)" (self isFlatQuadBezier: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3) ifTrue: [ | midx midy | midx := (x2 + x1 + x2+x3) * 0.25 . "mid ( mid(pt1,pt2), mid(pt2,pt3)) " midy := (y2 + y1 + y2+y3) * 0.25 . dest lineTo: (self inverseTransform: midx @ midy); lineTo: (self inverseTransform: x3 @ y3) " dest lineTo: (self inverseTransform: x2 @ y2); lineTo: (self inverseTransform: x3 @ y3) " ] ifFalse: [ | x12 y12 x23 y23 x123 y123 | "calculate midpoints of line segments " x12 := (x1 + x2) * 0.5. y12 := (y1 + y2) * 0.5 . x23 := (x2 + x3) * 0.5 . y23 := (y2 + y3) * 0.5 . x123 := (x12 + x23) * 0.5. y123 := (y12 + y23) * 0.5. self flattenQuadBezier: x1 y1: y1 x2: x12 y2: y12 x3: x123 y3: y123. self flattenQuadBezier: x123 y1: y123 x2: x23 y2: y23 x3: x3 y3: y3. ] ! ! !AthensCurveFlattener methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/18/2013 17:58'! initialize super initialize. transform := AthensAffineTransform new. "identity" self toleranceMultiplier: self defaultTolerance! ! !AthensCurveFlattener methodsFor: 'helpers' stamp: 'IgorStasenko 4/18/2013 18:06'! inverseTransform: aPoint ^ transform inverseTransform: aPoint! ! !AthensCurveFlattener methodsFor: 'helpers' stamp: 'IgorStasenko 4/18/2013 22:33'! isFlatQuadBezier: x1 y1: y1 x2: x2 y2: y2 x3: x3 y3: y3 | dx dy d da | dx := x3-x1. dy := y3-y1. "This is the area of triangle enclosing curve * 2" d := (((x2 - x3) * dy) - ((y2 - y3) * dx)) abs. d > (self lengthToleranceSquared ) ifTrue: [ "Non-collinear case (regular one)" | dot | "if dot product is close to zero, that means we having flat curve" dot := ( (x2-x1)*(x2-x3) + ((y1-y2)*(y2-y3)) ) abs. dot < (self lengthToleranceSquared * 0.5 ) ifTrue: [ ^ true ]. ] ifFalse: [ "collinear" da := dx*dx + (dy*dy). da = 0 "end points coincide" ifTrue: [ d := (x1-x2) squared + (y1-y2) squared "pointy case" ] ifFalse: [ "the control point lies on line between endpoints?" d := ((x2 - x1)*dx + ((y2 - y1)*dy)) / da. (d > 0.0 and: [ d < 1.0 ] ) ifTrue: [ "Simple collinear case, 1---2---3" ^ true ]. d <= 0.0 ifTrue: [ d := (x1-x2) squared + (y1-y2) squared ] ifFalse: [ d >= 1.0 ifTrue: [ d:= (x2-x3) squared + (y2-y3) squared ] ifFalse: [ d:= (x2 - x1 - (d*dx)) squared + (y2 - y1 - (d*dy)) squared ] ]. ]. d < (self lengthToleranceSquared) ifTrue: [ ^ true ] ]. ^ false! ! !AthensCurveFlattener methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 17:49'! lengthTolerance ^ lengthTolerance! ! !AthensCurveFlattener methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 17:49'! lengthToleranceSquared ^ lengthToleranceSquared! ! !AthensCurveFlattener methodsFor: 'path commands' stamp: 'IgorStasenko 4/18/2013 21:46'! lineTo: aPoint endPoint := aPoint. ^ dest lineTo: aPoint! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 4/25/2013 01:14'! lineToX: trX y: trY ^ dest lineTo: (self inverseTransform: trX @ trY) ! ! !AthensCurveFlattener methodsFor: 'path commands' stamp: 'IgorStasenko 4/18/2013 18:04'! moveTo: aPoint contourStartPt := endPoint := aPoint. ^ dest moveTo: aPoint! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 4/29/2013 21:32'! overCuspLimit: angleInRadians "if(m_cusp_limit !!= 0.0) { if(da1 > m_cusp_limit) { ^ angleInRadians > 1.01" ^ false. ! ! !AthensCurveFlattener methodsFor: 'visiting' stamp: 'IgorStasenko 4/18/2013 17:24'! quadricBezierSegment: segment | pt1 pt2 pt3 | pt1 := transform transform: endPoint. pt2 := transform transform: segment via. pt3 := transform transform: segment endPoint. endPoint := segment endPoint. self flattenQuadBezier: pt1 x y1: pt1 y x2: pt2 x y2: pt2 y x3: pt3 x y3: pt3 y. ! ! !AthensCurveFlattener methodsFor: 'subdivision callbacks' stamp: 'IgorStasenko 5/2/2013 17:43'! subdivisionLimit "max number of recursive subdivisions for single curve" ^ SubdivisionLimit ! ! !AthensCurveFlattener methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 17:56'! toleranceMultiplier: aToleranceMultiplier " A tolerance multiplier is a number .. which if = 1 , the default error tolerance is used, if > 1 you will get more coarse approximation if < 1 you will get more finer approximation " lengthTolerance := aToleranceMultiplier. lengthToleranceSquared := lengthTolerance squared. ! ! !AthensCurveFlattener methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 17:56'! transform: aTransform " - transform is an Affine matrix, used to map path geometry to screen, and therefore used to calculate the error tolerance for path subdivisions - a tolerance multiplier is a number .. which if = 1 , the default error tolerance is used, if > 1 you will get more coarse approximation if < 1 you will get more finer approximation " transform := aTransform. ! ! !AthensPathSegmentConverter methodsFor: 'converting' stamp: 'IgorStasenko 4/18/2013 17:50'! convert: aPath "pipe the path segments to destination, converting segments on the way" contourStartPt := endPoint := 0@0. aPath sendCommandsTo: self. ! ! !AthensPathSegmentConverter methodsFor: 'accessing' stamp: 'IgorStasenko 4/18/2013 17:39'! dest: aDest dest := aDest! ! !AthensPolygon commentStamp: 'IgorStasenko 12/20/2011 18:38' prior: 40224554! i am special kind of shape which using only straight line segments, unlike from more generic paths.! !AthensPolygon methodsFor: 'conversion' stamp: 'IgorStasenko 5/1/2011 22:11'! finish "Finally convert contours to arrays" contours := contours collect: [:ea | ea asArray ]! ! !AthensPolygon methodsFor: 'conversion' stamp: 'IgorStasenko 4/29/2011 18:32'! lineTo: aPoint currentContour add: aPoint! ! !AthensPolygon methodsFor: 'conversion' stamp: 'IgorStasenko 4/29/2011 18:29'! moveTo: aPoint " create a new contour " self newContour. currentContour add: aPoint.! ! !AthensPolygon methodsFor: 'conversion' stamp: 'IgorStasenko 4/29/2011 18:30'! newContour contours ifNil: [ contours := OrderedCollection new ]. currentContour := contours add: OrderedCollection new.! ! !AthensPolygon methodsFor: 'drawing' stamp: 'IgorStasenko 5/2/2011 04:48'! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint fillPolygon: self on: anAthensCanvas! ! !AthensPolygonTester commentStamp: '' prior: 40224715! I implementing a simple and efficient algorithm to test whether given point lies withing a polygon or not. A polygon is a collection of points 1...size.! !AthensPolygonTester methodsFor: 'testing' stamp: 'IgorStasenko 4/19/2013 16:29'! includesPoint: aPoint " Thanks to Google and Randolph Franklin i don't have to reinvent this very simple algorithm. See [ 1 ] for details, copyrights etc. [1] http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html " | inside testX testY i j size | inside := false. i := 1. size := polygon size. j := size. testX := aPoint x. testY := aPoint y. [ i <= size ] whileTrue: [ | pi pj | pi := polygon at: i. pj := polygon at: j. (((pi y > testY) ~= (pj y > testY)) and: [ testX < ( pj x - pi x * (testY - pi y) / ( pj y - pi y ) + pi x ) ]) ifTrue: [ inside := inside not ]. j := i. i := i + 1. ]. ^ inside ! ! !AthensPolygonTester methodsFor: 'accessing' stamp: 'IgorStasenko 4/19/2013 15:56'! polygon: poly polygon := poly! ! !AthensSurface commentStamp: '' prior: 40224924! I representing a surface, where all drawing operations will happen. I also having a number of factory methods to create paints, paths and other objects involved in drawing. AthensSurface is an abstract, while subclasses implement a specific kind of surface for one or another backend. The primary role of AthensSurface class is to define a public protocol for all Athens surfaces, which can be used by applications which using Athens framework. To get a new surface, use: extent: x@y for surfaces which don't need to have dimensions specified, it would just #new.! !AthensSurface class methodsFor: 'instance creation' stamp: 'sig 2/29/2012 21:43'! extent: aPoint "Create a new surface with given extent. Note that some surfaces may not support this method, since they may represent an infinite surface." self subclassResponsibility! ! !AthensSurface methodsFor: 'converting' stamp: 'sig 2/29/2012 21:51'! asForm "Answer a Form , which contains a bits, converted from surface " self subclassResponsibility! ! !AthensSurface methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:22'! cacheAt: anObject ifAbsentPut: aBlock "Answer an object from surface's cache identified by anObject, if there is no cached object under such identifier, evaluate a block and put it into cache. Then answer the result of evaluation. A surface using identity comparison for object identifiers. " self subclassResponsibility! ! !AthensSurface methodsFor: 'public' stamp: 'IgorStasenko 12/20/2011 15:38'! clear "clear the surface" self subclassResponsibility! ! !AthensSurface methodsFor: 'public' stamp: 'IgorStasenko 9/1/2012 20:06'! clear: clearColor "clear the surface" self subclassResponsibility! ! !AthensSurface methodsFor: 'clipping' stamp: 'IgorStasenko 4/21/2011 14:47'! clipBy: aRectangle during: aBlockClosure self subclassResponsibility.! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 3/8/2012 13:46'! createFormPaint: aForm self subclassResponsibility.! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/13/2011 17:45'! createLinearGradient: colorRamp origin: pt1 corner: pt2 self subclassResponsibility! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/12/2013 09:59'! createLinearGradient: colorRamp start: pt1 stop: pt2 "This protocol is deprecated. Use #createLinearGradient: start:stop: instead" self shouldNotImplement ! ! !AthensSurface methodsFor: 'paths' stamp: 'IgorStasenko 3/26/2011 19:32'! createPath: aPathBuilder "Create a path from provided path builder instance" self subclassResponsibility! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 12:17'! createRadialGradient: colorRamp center: aCenter radius: aRadius "by default, focal point coincede with center" ^ self createRadialGradient: colorRamp center: aCenter radius: aRadius focalPoint: aCenter ! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 12:16'! createRadialGradient: colorRamp center: aCenter radius: aRadius focalPoint: fp self subclassResponsibility! ! !AthensSurface methodsFor: 'paths' stamp: 'FernandoOlivero 1/13/2012 03:08'! createRectanglePath: aRectangle ^ aRectangle! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 12/20/2011 15:25'! createSolidColorPaint: aColor "Answer an instance of AthensPaint, valid for use with given surface" self subclassResponsibility! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 11:20'! createStrokePaintFor: aPaint "Answer an instance of AthensPaint, valid for use as stroke paint on receiver, using an argument, paint for fills" self subclassResponsibility! ! !AthensSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:15'! disableMask self subclassResponsibility! ! !AthensSurface methodsFor: 'public' stamp: 'IgorStasenko 3/7/2012 15:06'! drawDuring: aBlock "You may draw on receiver only when inside a block and only using provided canvas object. This ensures releasing system resources used after finishing drawing" currentCanvas ifNotNil: [ self attemptToRecurseDrawing ]. [ currentCanvas := self newCanvas. aBlock value: currentCanvas. ] ensure: [ self releaseCanvas. currentCanvas := nil. ].! ! !AthensSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:15'! enableMask self subclassResponsibility! ! !AthensSurface methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:56'! flushCacheAt: anObject "Flush (delete) any cached value(s) identified by given object, anObject. A surface using identity comparison for object identifiers. Answer receiver. " self subclassResponsibility! ! !AthensSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:16'! maskEnabled self subclassResponsibility! ! !AthensSurface methodsFor: 'private' stamp: 'IgorStasenko 3/21/2011 02:35'! newCanvas "Answer a preinitialized instance of AthensCanvas. Private to receiver and its subclasses, override seldom" ^ AthensCanvas on: self ! ! !AthensSurface methodsFor: 'private' stamp: 'IgorStasenko 3/22/2011 22:40'! releaseCanvas currentCanvas := nil! ! !AthensTransform commentStamp: 'IgorStasenko 3/7/2012 14:41' prior: 40225589! My instances represent an interface for coordinate system transformation defined by 3x3 matrix of following kind: | sx shx x | | shy sy y | | w0 w1 w2 | sx and sy define scaling in the x and y directions, respectively; shx and shy define shearing in the x and y directions, respectively; tx and ty define translation in the x and y directions, respectively. AthensSurface are responsible for providing specific implementation of me, which is most appropriate for backend its using. My internal representation isnt available for manipulation, for example dont assume i'm a matrix. In short, do not copy my state or modify it directly, instead use methods such as #loadAffineTransformation:, and talk to my surface. My subclasses should implement a common protocol for applying generic types of affine transformations on coordinate system: - translate - rotate - shear - scale - matrix multiply - matrix load Surface must support 4 kinds of transformations of coordinate system(s): - path-to-surface (#pathTransform) to transform path coordinates to surface space - image-to-surface (#imageTransform) to transform between user coordinates and surface pixels - fill-paint-to-user (#fillTransform) - stroke-paint-to-user (#strokeTransform) Given a (fill or stroke) paint-to-user transformation Tp and user-to-surface transformation Tu, the paint color and alpha of a pixel to be drawn with surface coordinates (x, y) is defined by mapping its center point (x + 1/2, y + 1/2) through the inverse transformation (Tu * Tp)^-1 , resulting in a sample point in the paint coordinate space. All transformations, except image-to-surface , ignoring w0 , w1 and w2 values and always assume them set to { 0 , 0 , 1 } respectively. For accessing a particular kind of transformation, send message to canvas, i.e.: canvas pathTransform translateBy: 10@10. It is safe to store transformation in temporary variable, as long as canvas is valid. ! !AthensAffineTransform commentStamp: '' prior: 40227605! I support the same protocol than AthensTransform, but in addition I store a plain 2x3 matrix with state accessible at any moment. This is different to AthensTransform because it does not expose its internal storage, because it can be backend specific.! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 10/21/2011 12:55'! clearTranslation "reset a translation from matrix, leaving only scale and rotation" x := y := 0.0! ! !AthensAffineTransform methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/26/2011 02:09'! initialize self loadIdentity! ! !AthensAffineTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 4/18/2013 15:53'! inverseTransform: aPoint | px py y0 x0 | px := aPoint x. py := aPoint y. " (we assume matrix is never degenerate) Given straight transformation formulae: px := x0*sx + y0*shx + x. py := x0*shy + y0*sy + y. we doing inverse one, trying to find x0,y0 for rest of given variables (px,py,x,y,sx,sy,shx,shy). x0 := px - x - (shx*y0) / sx. y0 := py - y - (shy*x0) / sy. y0 := py - y - (shy*(px - x - (shx*y0) / sx)) / sy. sy * y0 == py - y - (shy*(px - x - (shx*y0) / sx)). sx * sy * y0 == (sx*(py - y)) - (shy*(px - x - (shx*y0))). sx * sy * y0 == sx*py - (sx*y) - (shy*px) + (shy*x) + (shy*shx*y0). (sx * sy * y0) - (shy*shx*y0) == sx*py - (sx*y) - (shy*px) + (shy*x) . y0* ((sx * sy) - (shy*shx)) == sx*py - (sx*y) - (shy*px) + (shy*x) . " y0 := sx*py - (sx*y) - (shy*px) + (shy*x) / ((sx * sy) - (shy*shx)). x0 := px - x - (shx*y0) / sx. ^ x0@y0 ! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 3/28/2012 15:10'! inverted "answer an inverse transformation of receiver" self notYetImplemented ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/7/2012 14:02'! loadAffineTransform: m x := m x. y := m y. sx := m sx. sy := m sy. shx := m shx. shy := m shy.! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 02:09'! loadIdentity "initialize with identity transform" sx := sy := 1.0. shx := shy := x := y := 0.0. ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 4/24/2012 14:47'! multiplyBy: m "multiply receiver by given affine matrix" " | sx shx x | | sx' shx' x' | | shy sy y | * | shy' sy' y' | | 0 0 1 | | 0 0 1 | " | nsx nshx nx nshy nsy ny | nsx := sx * m sx + (shx * m shy). nshx := sx * m shx + (shx * m sy). nx := sx * m x + (shx * m y) + x. nshy := shy * m sx + (sy * m shy). nsy := shy * m shx + (sy * m sy). ny := shy* m x + (sy * m y) + y. sx := nsx. sy := nsy. shx := nshx. shy := nshy. x := nx. y := ny. ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/7/2012 14:01'! restoreAfter: aBlock |previous| previous := self copy. aBlock ensure: [ self loadAffineTransform: previous ]! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:46'! rotateByDegrees: angle ^ self rotateByRadians: angle degreesToRadians! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 03:21'! rotateByRadians: angle "multiply receiver by rotation matrix | sx shx x | | cos -sin 0 | | (sx*cos)+(shx*sin) (-sx*sin+shx*cos) x | | shy sy y | * | sin cos 0 | ===> | (shy*cos)+(sy*sin) (-shy*sin)+sy*cos) y | | 0 0 1 | | 0 0 1 | | 0 0 1 | " | cos sin newSx newSy | cos := angle cos. sin := angle sin. newSx := sx*cos + (shx*sin). newSy := sy*cos - (shy*sin). shx := shx*cos - (sx*sin). shy := shy*cos + (sy*sin). sx := newSx. sy := newSy.! ! !AthensAffineTransform methodsFor: 'accessing'! scale ^ sx@sy! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/21/2012 18:26'! scaleBy: factor "multiply receiver by uniform scale matrix | sx shx x | | (f x) 0 0 | | sx*(f x) shx*(f y) x | | shy sy y | * | 0 (f y) 0 | ===> | shy*(f x) sy*(f y) y | | 0 0 1 | | 0 0 1 | | 0 0 1 | " factor isPoint ifTrue: [ sx := sx*factor x. shx := shx*factor y. sy := sy*factor y. shy := shy*factor x. ] ifFalse: [ sx := sx*factor. shx := shx*factor. sy := sy*factor. shy := shy*factor. ] ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:52'! scaleX: fx Y: fy "multiply receiver by scale matrix | sx shx x | | fx 0 0 | | sx*fx shx*fx x | | shy sy y | * | 0 fy 0 | ===> | shy*fy sy*fy y | | 0 0 1 | | 0 0 1 | | 0 0 1 | " sx := sx*fx. shx := shx*fx. sy := sy*fy. shy := shy*fy. ! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! shx ^ shx! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:04'! shx: number shx := number! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! shy ^ shy! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:04'! shy: number shy := number! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! sx ^ sx! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:04'! sx: number sx := number! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! sy ^ sy! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:04'! sy: number sy := number! ! !AthensAffineTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 3/26/2011 03:02'! transform: aPoint | px py | px := aPoint x. py := aPoint y. ^ Point x: (sx*px +(shx*py) + x) y: (shy*px + (sy*py) + y) ! ! !AthensAffineTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 3/27/2011 18:40'! transformX: px Y: py " transform x and y coordinates by receiver. Answer a Point" ^ Point x: (sx*px +(shx*py) + x) y: (shy*px + (sy*py) + y) ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 03:17'! translateBy: aPoint ^ self translateX: aPoint x Y: aPoint y! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/21/2012 18:23'! translateX: px Y: py " multiply receiver by translation matrix : | sx shx x | | 1 0 px | | sx shx (sx*px + shx*py + x) | | shy sy y | * | 0 1 py | ===> | shy sy (shy*px + sy*py + y) | | 0 0 1 | | 0 0 1 | | 0 0 1 | " x := (sx*px) + (shx*py) + x. y := (shy*px) + (sy*py) + y. ! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 10/24/2011 17:24'! translateX: px y: py " multiply receiver by translation matrix : | sx shx x | | 1 0 px | | sx shx (sx*px + shx*py + x) | | shy sy y | * | 0 1 py | ===> | shy sy (shy*px + sy*py + y) | | 0 0 1 | | 0 0 1 | | 0 0 1 | " x := (sx*px) + (shx*py) + x. y := (shy*px) + (sy*py) + y. ! ! !AthensAffineTransform methodsFor: 'accessing'! translation ^ x@y! ! !AthensAffineTransform methodsFor: 'accessing'! translation: aPoint x := aPoint x. y := aPoint y.! ! !AthensAffineTransform methodsFor: 'transformations' stamp: 'IgorStasenko 10/25/2011 13:20'! transposed | s | s := shx. shx := shy. shy := s.! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! x ^ x! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:03'! x: number x := number! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 10/20/2011 18:48'! y ^ y! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'IgorStasenko 4/24/2012 14:04'! y: number y := number! ! !AthensGenericTransform commentStamp: '' prior: 40227922! I am an extended version of my supeclass, and I represent generic 3x3 matrix. ! !AthensGenericTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 02:10'! loadIdentity "initialize with identity transform" super loadIdentity. w0 := w1 := 0.0. w2 := 1.0! ! !AthensTransform methodsFor: 'accessing' stamp: 'IgorStasenko 8/31/2012 22:29'! getMatrix "Answer an affine transformation matrix currently used by receiver. Note, that resulting matrix should be copied from receiver's data, i.e. no future modifications of receiver should affect the answered object. The default implementation is to answer a copy of receiver" ^ self copy! ! !AthensTransform methodsFor: 'transformations'! invert "i should invert" self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/7/2012 14:00'! loadAffineTransform: anAthenTransform self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 12/20/2011 16:46'! loadIdentity "load the identity matrix into receiver" self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/7/2012 13:52'! restoreAfter: aBlock "i should save the current transform state, evaluate the block, and then restore the saved transform state" self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:56'! rotateByDegrees: angle self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:55'! rotateByRadians: angle self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:55'! scaleBy: factor self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:55'! scaleX: fx Y: fy self subclassResponsibility! ! !AthensTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 3/27/2011 18:42'! transform: aPoint self subclassResponsibility! ! !AthensTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 3/27/2011 18:42'! transformX: px Y: py self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/26/2011 01:55'! translateBy: aPoint self subclassResponsibility! ! !AthensTransform methodsFor: 'transformations' stamp: 'IgorStasenko 12/21/2011 12:39'! translateX: px Y: py self subclassResponsibility! ! !SolidFillStyle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 4/21/2011 15:01'! asAthensPaintOn: anAthensCanvas ^ anAthensCanvas surface createSolidColorPaint: color! ! !GradientFillStyle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 10/11/2012 16:16'! asAthensPaintOn: anAthensCanvas ^ AthensMorphicGradientPaint new gradient: self. "^ radial ifTrue: [ anAthensCanvas surface createRadialGradient: colorRamp center: (anAthensCanvas pathTransform inverseTransform: origin ) radius: direction y ] ifFalse: [ anAthensCanvas surface createLinearGradient: colorRamp origin: (anAthensCanvas pathTransform inverseTransform: origin) corner: (anAthensCanvas pathTransform inverseTransform: origin + direction ) ] "! ! !ImageFillStyle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 10/12/2012 03:28'! asAthensPaintOn: anAthensCanvas ^ (anAthensCanvas cacheAt: self ifAbsentPut: [ anAthensCanvas surface createFormPaint: form ]) origin: origin; direction: (form width@0) ! ! !Color methodsFor: '*Athens-Core' stamp: 'IgorStasenko 4/13/2011 17:47'! asAthensPaintOn: anAthensCanvas ^ anAthensCanvas surface createSolidColorPaint: self! ! "Athens-Core"! !AthensTextDisplayCommand commentStamp: 'IgorStasenko 2/6/2012 16:20' prior: 0! An abstract base class for all text rendering commands. A text rendered takes a stream (or list) of my (sub)instances and in that way it renders the text! !AthensBackgroundChange commentStamp: 'IgorStasenko 2/6/2012 16:16' prior: 0! Text display command for changing the background color! !AthensCharacterSpan commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 0! A text command to render a character span containing the range of characters for with same attributes! !AthensColorChange commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 0! A command to change the current font color! !AthensFontChange commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 0! A command to change the currently selected font! !AthensTextLine commentStamp: 'IgorStasenko 2/6/2012 16:20' prior: 0! I representing a single line of text! !AthensTextRenderer commentStamp: 'IgorStasenko 10/20/2011 10:14' prior: 0! This is a text renderer, which pipelining a text command(s) , produced by AthensTextComposer into a concrete calls to canvas. Its using a glyph renderer instance(s) to draw separate font glyphs on a surface in a most suitable/efficient manner for given Athens surface. ! !AthensTextScanner commentStamp: 'IgorStasenko 2/6/2012 16:22' prior: 0! I responsible for scanning the Text and transforming it into a list of AthensTextLine, where each line is a list of AthensTextDisplayCommand (sub)instances! !SimpleTextGlyphInfo class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/13/2011 04:04'! fromFace: anFT2Face ^(self new) loadFrom: anFT2Face; yourself.! ! !SimpleTextGlyphInfo methodsFor: 'accessing' stamp: 'IgorStasenko 7/13/2011 04:05'! face ^ face! ! !SimpleTextGlyphInfo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/20/2011 05:09'! loadFrom: anFT2Face "Same as in superclass, but avoid converting coordinates to not waste CPU cycles" face := anFT2Face. self primLoadFrom: anFT2Face. format := ((Smalltalk isLittleEndian) ifTrue: [ format reversed ] ifFalse: [ format ]) asString. ! ! !AthensTextComposer class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:07'! scan: aText for: scanner ^ self new scan: aText for: scanner! ! !AthensTextComposer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:51'! lines ^ lines! ! !AthensTextComposer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2011 12:42'! renderOn: aCanvas | renderer | renderer := AthensTextRenderer new. renderer render: text lines: lines on: aCanvas. ! ! !AthensTextComposer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/30/2011 19:14'! scan: aText for: scanner " scan text from starting index, answer the index of first character for potential next line" | index top | text := aText. scanner text: text. "edge case, text is empty " text isEmpty ifTrue: [ ^ scanner ]. scanner newLine: 1. index := 1. text runs withStartStopAndValueDo: [:start :stop :values | scanner setAttributes: values. start to: stop do: [:i | | ch | ch := text at: i. ch = Character cr ifTrue: [ scanner endLine: i - 1. scanner newLine: i + 1 ] ifFalse: [ scanner addCharacter: i. ] ] ]. scanner endLine: (text size). lines := scanner lines. "set the lines top offset" top := 0. lines do: [:line | line top: top. top := top + line height ]. ! ! !AthensTextDisplayCommand commentStamp: 'IgorStasenko 2/6/2012 16:20' prior: 40311270! An abstract base class for all text rendering commands. A text rendered takes a stream (or list) of my (sub)instances and in that way it renders the text! !AthensBackgroundChange commentStamp: 'IgorStasenko 2/6/2012 16:16' prior: 40311504! Text display command for changing the background color! !AthensBackgroundChange methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/28/2011 14:44'! addWidth: aWidth width := width + aWidth! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:33'! color ^ color! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:33'! color: anObject color := anObject! ! !AthensBackgroundChange methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/28/2011 14:45'! initialize width :=0. color := Color transparent.! ! !AthensBackgroundChange methodsFor: 'rendering' stamp: 'IgorStasenko 11/7/2011 13:42'! renderOn: renderer color isTransparent ifFalse: [ renderer renderBackground: self ]! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 13:41'! start ^ start! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 13:41'! start: aStart start := aStart! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:33'! width ^ width! ! !AthensBackgroundChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:33'! width: anObject width := anObject! ! !AthensCharacterSpan commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 40311635! A text command to render a character span containing the range of characters for with same attributes! !AthensCharacterSpan methodsFor: 'rendering' stamp: 'IgorStasenko 10/17/2011 12:52'! renderOn: renderer renderer renderCharactersFrom: start to: stop! ! !AthensCharacterSpan methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:31'! splitAt: position | newSpan | "split receiver on two character spans " " position points to first character which should be included in newly created span " position == start ifTrue: [ ^ self ]. (position < start or: [ position > stop ]) ifTrue: [ self error: 'invalid position' ]. newSpan := self class new start: position; stop: stop. stop := position - 1. self insert: newSpan.! ! !AthensCharacterSpan methodsFor: 'accessing' stamp: 'IgorStasenko 10/17/2011 12:02'! start ^ start! ! !AthensCharacterSpan methodsFor: 'accessing' stamp: 'IgorStasenko 10/17/2011 12:02'! start: anObject start := anObject! ! !AthensCharacterSpan methodsFor: 'accessing' stamp: 'IgorStasenko 10/17/2011 12:02'! stop ^ stop! ! !AthensCharacterSpan methodsFor: 'accessing' stamp: 'IgorStasenko 10/17/2011 12:02'! stop: anObject stop := anObject! ! !AthensColorChange commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 40311811! A command to change the current font color! !AthensColorChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 16:58'! color ^ color! ! !AthensColorChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 16:58'! color: anObject color := anObject! ! !AthensColorChange methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2011 12:51'! renderOn: renderer renderer setCurrentColor: color! ! !AthensFontChange commentStamp: 'IgorStasenko 2/6/2012 16:17' prior: 40311927! A command to change the currently selected font! !AthensFontChange class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:55'! font: aFont ^ self new font: aFont! ! !AthensFontChange methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 11:07'! font ^ font! ! !AthensFontChange methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 16:55'! font: aFont font := aFont! ! !AthensFontChange methodsFor: 'rendering' stamp: 'IgorStasenko 10/17/2011 12:50'! renderOn: anAthensTextRenderer anAthensTextRenderer setCurrentFont: font.! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:14'! addLast: aCommand self tail next: aCommand! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:21'! do: aBlock | nn | nn := self. [ nn isNil ] whileFalse: [ aBlock value: nn. nn := nn next. ]! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:19'! insert: aCommands | nn | nn := next. next := aCommands. next tail next: nn! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:12'! next ^ next! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:12'! next: anObject next := anObject! ! !AthensTextDisplayCommand methodsFor: 'copying' stamp: 'IgorStasenko 11/10/2011 10:47'! postCopy "unlink the copy by default" next := nil! ! !AthensTextDisplayCommand methodsFor: 'rendering' stamp: 'IgorStasenko 10/30/2011 18:57'! renderOn: renderer self shouldBeImplemented ! ! !AthensTextDisplayCommand methodsFor: 'accessing' stamp: 'IgorStasenko 11/10/2011 10:15'! tail | nn | nn := self. [ nn next notNil ] whileTrue: [ nn := nn next ]. ^ nn! ! !AthensTextLine commentStamp: 'IgorStasenko 2/6/2012 16:20' prior: 40312046! I representing a single line of text! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 10:20'! addCommand: aCommand commands ifNil: [ tail := commands := aCommand. ] ifNotNil: [ tail next: aCommand ]. tail := tail tail. ! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/28/2011 12:43'! addWidth: aNumber width := width + aNumber.! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 11/21/2011 12:47'! bottom ^ top + self heightAndDescent! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! commands ^ commands! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! commands: anObject commands := anObject! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! endIndex ^ endIndex! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! endIndex: anObject endIndex := anObject! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/5/2011 18:04'! height ^ height! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! height: anObject height := anObject! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 14:44'! heightAndDescent ^ height + maxDescent! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 10:15'! initialize commands := tail := nil. width := height := maxAscent := maxDescent := 0.! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 11:00'! maxAscent ^ maxAscent! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 11:05'! maxAscent: mascent maxAscent := mascent max: maxAscent! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 14:36'! maxDescent ^ maxDescent! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 14:43'! maxDescent: mascent maxDescent := mascent max: maxDescent! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/28/2011 12:41'! maxHeight: aHeight height := height max: aHeight! ! !AthensTextLine methodsFor: 'rendering' stamp: 'IgorStasenko 11/10/2011 12:23'! renderOn: aTextRenderer commands ifNil: [ ^ self ]. commands do: [ :cmd | cmd renderOn: aTextRenderer ]. ! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/20/2011 10:30'! renderOn: anAthensTextRenderer x: aSmallInteger y: aSmallInteger3 self shouldBeImplemented.! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! startIndex ^ startIndex! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:10'! startIndex: index startIndex := index! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! text ^ text! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:48'! text: aText text := aText! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 11/21/2011 12:47'! top ^ top! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/5/2011 18:05'! top: aTop top := aTop! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/5/2011 18:04'! width ^ width! ! !AthensTextLine methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2011 17:19'! width: anObject width := anObject! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 18:59'! surfaceClass ^ AthensCairoSurface! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 19:00'! test1 | t c surf | t := ' AthensTextRenderTest test1 leftFlush p := MultiNewParagraph new. p compose: t style: TextStyle default from: 1 in: (0@0 corner: 100@100). p MultiNewParagraph TextStyle default alignment globalBounds: toLocal: ' asText . t addAttribute: (TextColor new color: Color red) from: 3 to: 10. t addAttribute: (TextEmphasis italic) from: 5 to: 13. c := AthensTextComposer scan: t for: AthensTextScanner new. surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas pathTransform scaleBy: 0.8. c renderOn: canvas ]. Display getCanvas translucentImage: surf form at: 0@0 ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 19:00'! test2 | t c surf | t := self testText. t addAttribute: (AthensTextBackground new color: (Color green alpha: 0.3 )) from: 1 to: 267. c := AthensTextComposer scan: t for: AthensTextScanner new. surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas setPaint: (Color white ). canvas drawShape: (0@0 corner: 300@300). canvas pathTransform scaleBy: 1. canvas pathTransform translateX: 300 Y: 0. canvas setPaint: Color yellow. canvas pathTransform rotateByDegrees: 0. c renderOn: canvas ]. Display getCanvas translucentImage: surf form at: 0@0 ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 19:01'! test3 | t c surf | "t := '12345 pi kl mn op gj the text must flow' " t := 'qW' asText . t addAttribute: (TextFontReference toFont: ( LogicalFont familyName: 'Arial' pointSize: 8 )). c := AthensTextComposer scan: t for: AthensTextScanner new. surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas setPaint: (Color yellow alpha: 0.5). canvas drawShape: (0@0 corner: 300@300). canvas pathTransform translateBy: 200@200. " canvas pathTransform rotateByDegrees: 90. " canvas pathTransform scaleBy: 4. 1 to: 10 do: [:i | canvas setPaint: (Color blue alpha: 0.5). canvas drawShape: (0@0 corner: 100@10). c renderOn: canvas. canvas pathTransform rotateByDegrees: 5. canvas pathTransform translateBy: 0 @11 . ]. ]. Display getCanvas translucentImage: surf form at: 100@100 ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 19:01'! test4 | t c surf | "t := '12345 pi kl mn op gj the text must flow' " t := 'Unfortunately this class has not been documented yet.' asText . t addAttribute: (TextFontReference toFont: ( LogicalFont familyName: 'Tahoma' pointSize: 10 )). t addAttribute: (TextColor new color: Color red) from: 3 to: 10. c := AthensTextComposer scan: t for: AthensTextScanner new. surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas setPaint: (Color yellow alpha: 0.5). canvas drawShape: (0@0 corner: 300@300). canvas pathTransform scaleBy: 1. 1 to: 20 do: [:i | c renderOn: canvas. canvas pathTransform translateBy: 0.1@10. ] ]. Display getCanvas translucentImage: surf form at: 100@100 ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 19:01'! test5 | t c surf | "t := '12345 pi kl mn op gj the text must flow' " t := 'U' asText . t addAttribute: (TextFontReference toFont: ( LogicalFont familyName: 'Tahoma' pointSize: 10 )). c := AthensTextComposer scan: t for: AthensTextScanner new. surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas setPaint: (Color yellow alpha: 0.5). canvas drawShape: (0@0 corner: 300@300). canvas pathTransform scaleBy: 1. 1 to: 20 do: [:i | c renderOn: canvas. canvas pathTransform translateBy: 10@0.1. ] ]. Display getCanvas translucentImage: surf form at: 100@100 ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/19/2011 14:39'! testBlitting | fnt form blt | fnt := LogicalFont familyName: 'Arial' pointSize: 24. form := fnt realFont glyphOf: $W destDepth: 8 colorValue: 1 subpixelPosition: 0. blt := BitBlt toForm: Display. blt sourceForm: form; destOrigin: 0@0; sourceOrigin: 0@0; halftoneForm: nil; combinationRule: 41; width: form width; height: form height; copyBitsColor: 0 alpha: 255 gammaTable: FreeTypeSettings current gammaTable ungammaTable: FreeTypeSettings current gammaInverseTable. " blt copyForm: form to: 100@100 rule: 41." Display forceToScreen. " Display getCanvas translucentImage: form at: 0@0. " ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 21:08'! testText | t | t := 'The safety Dconstraint is that the garbage collector MUST NOT collect any storage that then becomes needed to continue correct execution of the program. Should weak references be added, then garbage collection decisions become observable. Based on a suggestion from Cameron McCormack, we state the safety constraint as follows: So long as operational semantics of the remainder of the program execution includes the possibility that a reference to an object X may be dereferenced, then X MUST NOT be collected. Thus, the garbage collector is allowed to ignore any references that remain present in the semantic state, but which it can ascertain will never be dereferenced in any possible execution. This sets an upper bound on what state MAY be collected. Put another way, if the garbage collector ever reports that X has been collected, such as by nullifying a weak reference to X, if operational semantics of remaining execution requires the traversal of a strong (non-weak) reference to X, then the previous report demonstrates a safety violation. ' asText . t addAttribute: (TextFontReference toFont: ( LogicalFont familyName: 'Arial' pointSize: 8 )). t addAttribute: (TextEmphasis italic) from: 5 to: 100. t addAttribute: (TextColor new color: (Color red)) from: 10 to: 60. t addAttribute: (TextEmphasis italic) from: 100 to: 200. t addAttribute: (TextColor new color: Color green) from: 230 to: 360. t addAttribute: ( TextFontReference toFont: ( LogicalFont familyName: 'Tahoma' pointSize: 14)) from: 88 to: 200. ^ t! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 16:25'! testWindow ^ (AthensPluggableTextMorph on: self text: #testText accept: nil) embeddedInMorphicWindowLabeled: 'A fancy looking title text' ! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 22:25'! testWindowRender | surf | surf := self surfaceClass extent: Display extent. surf drawDuring: [ :canvas | canvas pathTransform scaleBy: 1. canvas fullDrawMorph: self testWindow. ]. Display getCanvas translucentImage: surf asForm at: 0@0 ! ! !AthensTextRenderer commentStamp: 'IgorStasenko 10/20/2011 10:14' prior: 40312160! This is a text renderer, which pipelining a text command(s) , produced by AthensTextComposer into a concrete calls to canvas. Its using a glyph renderer instance(s) to draw separate font glyphs on a surface in a most suitable/efficient manner for given Athens surface. ! !AthensTextRenderer class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 21:16'! textGoryDetails " Took from: http://www.freetype.org/freetype2/docs/tutorial/step2.html (Font face metrics) In this case, you can access the global design metrics as: units_per_EM This is the size of the EM square for the font face. It is used by scalable formats to scale design coordinates to device pixels, as described in the last chapter of this section. Its value usually is 2048 (for TrueType) or 1000 (for Type 1), but others are possible too. It is set to 1 for fixed-size formats like FNT/FON/PCF/BDF. bbox The global bounding box is defined as the largest rectangle that can enclose all the glyphs in a font face. ascender The ascender is the vertical distance from the horizontal baseline to the highest ‘character’ coordinate in a font face. Unfortunately, font formats define the ascender differently. For some, it represents the ascent of all capital latin characters (without accents), for others it is the ascent of the highest accented character, and finally, other formats define it as being equal to bbox.yMax. descender The descender is the vertical distance from the horizontal baseline to the lowest ‘character’ coordinate in a font face. Unfortunately, font formats define the descender differently. For some, it represents the descent of all capital latin characters (without accents), for others it is the ascent of the lowest accented character, and finally, other formats define it as being equal to bbox.yMin. This field is negative for values below the baseline. height This field is simply used to compute a default line spacing (i.e., the baseline-to-baseline distance) when writing text with this font. Note that it usually is larger than the sum of the ascender and descender taken as absolute values. There is also no guarantee that no glyphs extend above or below subsequent baselines when using this distance. max_advance_width This field gives the maximum horizontal cursor advance for all glyphs in the font. It can be used to quickly compute the maximum advance width of a string of text. It doesn't correspond to the maximum glyph image width!! max_advance_height Same as max_advance_width but for vertical text layout. underline_position When displaying or rendering underlined text, this value corresponds to the vertical position, relative to the baseline, of the underline bar's center. It is negative if it is below the baseline. underline_thickness When displaying or rendering underlined text, this value corresponds to the vertical thickness of the underline. "! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/20/2011 13:07'! initialize color := Color black.! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 21:23'! render: aText lines: lines on: aCanvas text := aText. canvas := aCanvas. canvas pathTransform restoreAfter: [ lines do: [:line | | origY | currentLine := line. maxAscent := line maxAscent. "set the origin to font's baseline position" canvas pathTransform translateX: 0 Y: maxAscent. "reset advance" advance := 0@0. line renderOn: self. "line is rendered, advance vertically by line height" canvas pathTransform translateX: 0 Y: line height * 1.2 - maxAscent. ] ]! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 14:44'! renderBackground: bkObj "self halt." canvas setPaint: bkObj color. canvas drawShape: ( bkObj start@0 corner: bkObj start + bkObj width @ currentLine heightAndDescent) ! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 14:41'! renderBackground: aColor width: w "self halt." canvas setPaint: aColor. canvas drawShape: ( advance x@0 corner: advance x + w +1@ currentLine heightAndDescent) ! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 19:02'! renderCharactersFrom: start to: stop " accumulate advance while rendering spans" "canvas drawShape: (advance x @ advance y extent: 2 @ 2)." glyphRenderer advance: advance. advance := advance + (glyphRenderer renderCharacters: text from: start to: stop). ! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 19:01'! setCurrentColor: aColor color = aColor ifTrue: [ ^ self ]. color := aColor. " canvas setPaint: aColor." glyphRenderer ifNotNil: [ glyphRenderer setColor: aColor ].! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 22:03'! setCurrentFont: aFont font := aFont. glyphRenderer := font glyphRendererOn: canvas surface. glyphRenderer advance: advance; setColor: color.! ! !AthensTextScanner commentStamp: 'IgorStasenko 2/6/2012 16:22' prior: 40312505! I responsible for scanning the Text and transforming it into a list of AthensTextLine, where each line is a list of AthensTextDisplayCommand (sub)instances! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 12:00'! addCharacter: position | charWidth fnt | currentStrip ifNil: [ self applyAttributes. fnt := currentFont font. currentLine maxAscent: fnt getPreciseAscent. currentLine maxDescent: fnt getPreciseDescent. currentLine maxHeight: fnt getPreciseHeight. currentStrip := AthensCharacterSpan new. currentLine addCommand: currentStrip. currentStrip start: position. ]. charWidth := currentFont font getGlyphWidth: (text at: position). currentLine addWidth: charWidth. currentBackground ifNotNil: [ currentBackground addWidth: charWidth ]. currentStrip stop: position. ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:26'! addCommand: aCommand currentLine addCommand: aCommand! ! !AthensTextScanner methodsFor: 'text attributes' stamp: 'IgorStasenko 11/10/2011 11:14'! addEmphasis: emphasis | fnt | fnt := currentFont ifNil: [ self defaultFont ] ifNotNil: [ currentFont font ]. self setActualFont: (fnt emphasized: emphasis)! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:58'! applyAttributes currentAttributes do: [:attr | attr emphasizeScanner: self ]. currentFont ifNil: [ self setActualFont: self defaultFont ]. currentColor ifNil: [ self textColor: self defaultColor ]. ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:13'! defaultColor ^ Color black! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:13'! defaultFont ^ self textStyle defaultFont! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:53'! defaultTextStyle ^ TextStyle default! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 17:19'! endLine: index currentLine endIndex: index! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:54'! initialize lines := OrderedCollection new. currentAttributes := #().! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2011 12:45'! lines ^ lines! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 12:21'! newLine: startingIndex currentLine := lines add: (AthensTextLine new text: text; startIndex: startingIndex; yourself). " currentStrip ifNotNil: [ currentLine addCommand: currentFont copy. currentLine addCommand: currentColor copy. currentBackground ifNotNil: [ currentBackground := currentBackground copy start: 0; width: 0. currentLine addCommand: currentBackground ]. ]. " "reset everything, to make sure all attributes will be reapplied for new line" currentColor := currentBackground := currentFont := currentStrip := nil.! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/28/2011 14:58'! resetBackground self textBackground: Color transparent.! ! !AthensTextScanner methodsFor: 'text attributes' stamp: 'IgorStasenko 11/10/2011 12:04'! setActualFont: aFont currentFont ifNil: [ currentFont := AthensFontChange new font: aFont. self addCommand: currentFont. ^ self ]. aFont = currentFont font ifFalse: [ currentFont := AthensFontChange new font: aFont. self addCommand: currentFont. ]. ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 12:13'! setAttributes: anArray currentBackground := nil. currentAttributes := anArray. "we should reset character string here" currentStrip := nil. ! ! !AthensTextScanner methodsFor: 'text attributes' stamp: 'IgorStasenko 10/11/2011 16:52'! setFont: fontNumber self setActualFont: (self textStyle fontAt: fontNumber). ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:08'! text: aText text := aText! ! !AthensTextScanner methodsFor: 'text attributes' stamp: 'IgorStasenko 11/10/2011 11:31'! textBackground: aColor "background is transparent by default " (currentBackground notNil and: [ currentBackground color = aColor ]) ifTrue: [ ^ self]. currentBackground ifNil: [ aColor isTransparent ifTrue: [ ^ self ] ]. currentBackground := AthensBackgroundChange new color: aColor. currentBackground start: currentLine width. currentLine addCommand: currentBackground.! ! !AthensTextScanner methodsFor: 'text attributes' stamp: 'IgorStasenko 11/10/2011 11:15'! textColor: aColor currentColor ifNil: [ currentColor := AthensColorChange new color: aColor. self addCommand: currentColor. ^ self ]. currentColor color = aColor ifFalse: [ currentColor := AthensColorChange new color: aColor. self addCommand: currentColor. ]. ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2011 16:53'! textStyle ^ textStyle ifNil: [ textStyle := self defaultTextStyle ]! ! !GlyphRenderer class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/12/2011 19:45'! forFont: aFont ^ self basicNew initForFont: aFont! ! !GlyphRenderer class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/12/2011 19:26'! test | fnt glyph | fnt := StandardFonts defaultFont. fnt class == LogicalFont ifTrue: [ fnt := fnt realFont. ]. fnt class ~~ FreeTypeFont ifTrue: [ self error: 'invalid font' ]. glyph := self new initPixelSize: fnt pixelSize. glyph renderGlyph: $A asUnicode face: fnt face. glyph renderGlyph: $B asUnicode face: fnt face. glyph renderGlyph: $C asUnicode face: fnt face. glyph renderGlyph: $+ asUnicode face: fnt face. glyph drawOn: Display at: 0@0! ! !GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/12/2011 19:45'! initForFont: aFont self subclassResponsibility ! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 6/11/2012 02:17'! getGlyphWidth: aCharacter ^ self realFont getGlyphWidth: aCharacter! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 6/11/2012 02:16'! getPreciseAscent ^ self realFont getPreciseAscent! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 6/11/2012 02:16'! getPreciseDescent ^ self realFont getPreciseDescent! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 6/11/2012 02:17'! getPreciseHeight ^ self realFont getPreciseHeight! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 6/11/2012 02:17'! glyphRendererOn: anAthensBalloonSurface ^ self realFont glyphRendererOn: anAthensBalloonSurface! ! !AthensTextBackground methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:42'! color ^ color! ! !AthensTextBackground methodsFor: 'accessing' stamp: 'IgorStasenko 10/28/2011 14:42'! color: anObject color := anObject! ! !AthensTextBackground methodsFor: 'scanning' stamp: 'IgorStasenko 10/28/2011 14:31'! dominates: other ^ other class == self class! ! !AthensTextBackground methodsFor: 'scanning' stamp: 'IgorStasenko 10/28/2011 14:31'! emphasizeScanner: scanner "Set the emphasis for text display" scanner textBackground: color! ! !AthensTextBackground methodsFor: 'comparing' stamp: 'IgorStasenko 10/28/2011 14:31'! hash ^ color hash! ! !AthensTextBackground methodsFor: 'printing' stamp: 'IgorStasenko 10/28/2011 14:32'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' code: '; print: color! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 11/7/2011 14:15'! getGlyphWidth: aCharacter aCharacter asciiValue = 9 ifTrue: [ ^ (self linearWidthOf: Character space) * 8 ]. ^ (self linearWidthOf: aCharacter)! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 9/1/2012 21:00'! getPreciseAscent "we using face bouding box for getting ascent value, otherwise two different font sizes on same line won't align properly" ^(self face ascender * self pixelSize / self face unitsPerEm) asFloat. ! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 11/7/2011 14:47'! getPreciseDescent "we using face bouding box for getting ascent value, otherwise two different font sizes on same line won't align properly" ^(self face descender * self pixelSize / self face unitsPerEm) asFloat negated. ! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 10/28/2011 11:46'! getPreciseHeight "get precise font ascent, can be floating value" ^(self face height * self pixelSize / self face unitsPerEm) asFloat. ! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 10/20/2011 05:12'! glyphRendererOn: anAthensSurface ^ anAthensSurface getFreetypeFontRendererFor: self ! ! "Athens-Text"! !AthensBalloonSurface commentStamp: '' prior: 0! I am concrete implementation of Athens surface which using balloon engine for rendering. ! !AthensBalloonRadialGradient commentStamp: '' prior: 0! blghjfg ! !AthensBalloonSolidColorPaint commentStamp: 'IgorStasenko 12/20/2011 15:27' prior: 0! maybe Color could act as a AthensPaint by itself by implementing a corresponding protocol! !AthensBalloonEngine commentStamp: 'IgorStasenko 3/29/2011 01:04' prior: 0! - balloon engine using only first 4 variables of receiver instance: - work buffer - span - bitBlt (Bitblt object) - forms ! !AthensBalloonPath methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/27/2011 00:23'! contours ^ contours! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/29/2011 14:53'! contoursForFilling "answer a collection of contours, ready for filling by balloon engine" ^ contours collect: [:contour | contour last = contour first ifTrue: [contour asArray] ifFalse: [ (contour , { contour last. contour last. contour first }) ] ]! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 9/14/2011 15:08'! contoursForStroke "answer a collection of contours, ready for stroking by balloon engine" ^ contours collect: [:contour | contour asArray ]! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/29/2011 14:55'! convertFromBuilder: aBuilder | segment cContours | bounds := aBuilder pathBounds. segment := aBuilder pathStart. [ segment notNil ] whileTrue: [ segment visitWith: self. segment := segment next ]. " finally make all OrderedColllections ==> Array " cContours := Array new: contours size. 1 to: cContours size do: [:i | cContours at: i put: (contours at: i) asArray. ]. contours := cContours.! ! !AthensBalloonPath methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/27/2011 17:40'! duplicateLastPoint contours last size < 2 ifFalse: [ "duplicate last contour point" contours last add: (contours last last). ]. ! ! !AthensBalloonPath methodsFor: 'accessing' stamp: 'IgorStasenko 3/27/2011 13:54'! numContours ^ contours size! ! !AthensBalloonPath methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/27/2011 00:15'! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint fillPath: self on: anAthensCanvas! ! !AthensBalloonPath methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/13/2011 16:21'! paintStrokeUsing: paint on: anAthensCanvas ^ paint strokePath: self on: anAthensCanvas ! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/27/2011 17:31'! visitCloseSegment: closeSegment "see if its alredy closed" contours last last = contours last first ifFalse: [ contours last add: (contours last last); add: closeSegment endPoint; add: closeSegment endPoint ]! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/27/2011 17:40'! visitLineSegment: line self duplicateLastPoint. contours last add: line endPoint; add: line endPoint.! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/27/2011 00:05'! visitMoveSegment: seg contours ifNil: [ contours := OrderedCollection new ]. contours add: OrderedCollection new. contours last add: seg endPoint.! ! !AthensBalloonPath methodsFor: 'converting' stamp: 'IgorStasenko 3/27/2011 17:40'! visitQuadSegment: quadSegment self duplicateLastPoint. contours last add: quadSegment via; add: quadSegment to! ! !AthensBalloonSurface commentStamp: '' prior: 40344537! I am concrete implementation of Athens surface which using balloon engine for rendering. ! !AthensBalloonSurface class methodsFor: 'as yet unclassified' stamp: 'sig 2/29/2012 21:45'! extent: aPoint "Create a new surface with given extent." ^ self new form: (Form extent: aPoint depth: 32)! ! !AthensBalloonSurface methodsFor: 'converting' stamp: 'sig 2/29/2012 21:52'! asForm ^ form! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'sig 2/29/2012 21:49'! clear ^ self clearForm! ! !AthensBalloonSurface methodsFor: 'testing' stamp: 'IgorStasenko 4/1/2011 09:36'! clearForm form bits: ( Bitmap new: form bits size). ! ! !AthensBalloonSurface methodsFor: 'clipping' stamp: 'IgorStasenko 4/21/2011 14:55'! clipBy: aRectangle during: aBlock | oldRect | oldRect := engine clipRect. engine clipRect: (oldRect intersect: aRectangle). aBlock ensure: [ engine clipRect: oldRect ]! ! !AthensBalloonSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 16:33'! clipRect ^ engine clipRect! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/14/2011 17:12'! createCircularGradient: colorRamp center: aCenter radius: aRadius ^ AthensBalloonRadialGradient new colorRamp: colorRamp; center: aCenter; radius: aRadius; yourself! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 3/8/2012 13:48'! createFormPaint: aForm ^ AthensBalloonImagePaint new form: aForm! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/1/2011 10:48'! createLinearGradient: colorRamp origin: pt1 corner: pt2 ^ AthensBalloonLinearGradient new colorRamp: colorRamp; origin: pt1; corner: pt2; yourself! ! !AthensBalloonSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:00'! createLinearGradient: colorRamp start: pt1 stop: pt2 ^ AthensBalloonLinearGradient new colorRamp: colorRamp; start: pt1; stop: pt2; yourself! ! !AthensBalloonSurface methodsFor: 'paths' stamp: 'IgorStasenko 4/18/2013 04:46'! createPath: aPathCreatingBlock "Create a path from provided path builder instance" | builder | builder := AthensSimplePathBuilder new. aPathCreatingBlock value: builder. ^ AthensBalloonPath new convertFromBuilder: builder. ! ! !AthensBalloonSurface methodsFor: 'paths' stamp: 'IgorStasenko 4/1/2011 15:08'! createRectanglePath: aRectangle "In balloon implementation, rectangles don't require conversion and can be used directly" ^ aRectangle! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 3/22/2011 21:59'! createSolidColorPaint: aColor ^ AthensBalloonSolidColorPaint new color: aColor! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 11:22'! createStrokePaintFor: aPaint ^ AthensBalloonStrokePaint new fillPaint: aPaint! ! !AthensBalloonSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:16'! disableMask maskEnabled := false.! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 4/21/2011 16:35'! drawImage: aForm engine drawImage: aForm transform: imageTransform! ! !AthensBalloonSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:16'! enableMask maskEnabled := true! ! !AthensBalloonSurface methodsFor: 'accessing' stamp: 'IgorStasenko 3/27/2011 20:30'! engine ^ engine! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 4/1/2011 09:25'! fillBezierShape: contours color: aColor engine prepareForRendering; registerColorFill: aColor ; fillBezierShape: contours! ! !AthensBalloonSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/14/2011 15:08'! fillBezierShape: anArray color: aColor width: aSmallInteger self shouldBeImplemented.! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 4/1/2011 09:24'! fillRectangle: rect color: aColor engine prepareForRendering; registerColorFill: aColor ; fillRectangle: rect ! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! fillTransform ^ fillTransform! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! fillTransform: anObject fillTransform := anObject! ! !AthensBalloonSurface methodsFor: 'accessing' stamp: 'IgorStasenko 3/21/2011 15:10'! form ^ form! ! !AthensBalloonSurface methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 16:17'! form: aForm form := aForm. mask := Form extent: form extent depth: 1. engine := AthensBalloonEngine new. engine bitBlt: (GrafPort toForm: form) . engine clipRect: (0@0 extent: form extent). engine edgeTransform: pathTransform. engine destOffset: 0@0. engine reset.! ! !AthensBalloonSurface methodsFor: 'fonts' stamp: 'IgorStasenko 10/20/2011 10:03'! getFreetypeFontRendererFor: aFreeTypeFont ^ (FT2GlyphRenderer forFont: aFreeTypeFont surface: self)! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! imageTransform ^ imageTransform! ! !AthensBalloonSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/21/2012 19:12'! initialize pathTransform := AthensAffineTransform new. paintTransform := AthensAffineTransform new. imageTransform := AthensAffineTransform new " AthensGenericTransform new". fillTransform := AthensAffineTransform new. strokeTransform := AthensAffineTransform new. maskEnabled := false.! ! !AthensBalloonSurface methodsFor: 'masking' stamp: 'IgorStasenko 3/27/2011 18:17'! maskEnabled ^ maskEnabled! ! !AthensBalloonSurface methodsFor: 'accessing' stamp: 'IgorStasenko 3/21/2012 19:12'! paintTransform ^ paintTransform ! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! pathTransform ^ pathTransform! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 10/17/2011 13:52'! pathTransform: anObject pathTransform := anObject copy. engine edgeTransform: pathTransform.! ! !AthensBalloonSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/14/2011 15:12'! strokeBezierShape: contours color: aColor width: aWidth engine prepareForRendering; registerColorFill: aColor ; strokeBezierShape: contours width: aWidth! ! !AthensBalloonSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/14/2011 15:24'! strokeRectangle: rect color: aColor width: aWidth engine prepareForRendering; registerColorFill: aColor ; strokeRectangle: rect width: aWidth! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! strokeTransform ^ strokeTransform! ! !AthensBalloonSurface methodsFor: 'accessing matrices' stamp: 'IgorStasenko 3/26/2011 02:12'! strokeTransform: anObject strokeTransform := anObject! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:45'! direction ^ direction! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:45'! direction: anObject direction := anObject! ! !AthensBalloonImagePaint methodsFor: 'rendering' stamp: 'IgorStasenko 4/22/2011 11:19'! fillPath: aPath on: anAthensCanvas anAthensCanvas surface engine prepareForRendering; registerFormFill: form origin: origin direction: direction normal: self normal; fillBezierShape: aPath contoursForFilling! ! !AthensBalloonImagePaint methodsFor: 'rendering' stamp: 'IgorStasenko 4/22/2011 11:18'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " anAthensCanvas surface engine reset prepareForRendering; registerFormFill: form origin: origin direction: direction normal: self normal; fillRectangle: aRect ! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:30'! form ^ form! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:49'! form: anObject form := anObject. origin := 0@0. direction := form extent x @0.! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:47'! normal ^ ((direction y negated @ direction x) * form height / form width ) rounded! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:45'! origin ^ origin! ! !AthensBalloonImagePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2011 15:45'! origin: anObject origin := anObject! ! !AthensBalloonMaskPaint methodsFor: 'rendering' stamp: 'IgorStasenko 3/27/2011 18:45'! fillRectangle: aRect on: canvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | transformed transform surf | transform := canvas pathTransform. transformed := aRect asPolygonTransformedBy: transform. canvas surface balloonCanvas drawPolygon: transformed fillStyle: Color black ! ! !AthensBalloonGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! colorRamp ^ colorRamp! ! !AthensBalloonGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! colorRamp: anObject colorRamp := anObject! ! !AthensBalloonGradientPaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/19/2011 15:34'! strokeRect: aRectangle on: anAthensCanvas stroke: anAthensBalloonStrokePaint self shouldBeImplemented.! ! !AthensBalloonLinearGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/1/2011 10:47'! corner ^ corner! ! !AthensBalloonLinearGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/1/2011 10:47'! corner: anObject corner := anObject! ! !AthensBalloonLinearGradient methodsFor: 'rendering' stamp: 'IgorStasenko 3/8/2012 13:58'! fillPath: aPath on: anAthensCanvas | torigin tcorner | "A gradient fill coordinates are first transformed by paintTransform matrix, then by pathTransform matrix" torigin := anAthensCanvas paintTransform transform: origin. tcorner := anAthensCanvas paintTransform transform: corner. ^ anAthensCanvas surface engine prepareForRendering; registerLinearGradient: colorRamp origin: torigin corner: tcorner; fillBezierShape: aPath contoursForFilling! ! !AthensBalloonLinearGradient methodsFor: 'rendering' stamp: 'IgorStasenko 3/8/2012 13:59'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | torigin tcorner | "A gradient fill coordinates are first transformed by paintTransform matrix, then by pathTransform matrix" torigin := anAthensCanvas paintTransform transform: origin. tcorner := anAthensCanvas paintTransform transform: corner. ^ anAthensCanvas surface engine prepareForRendering; registerLinearGradient: colorRamp origin: torigin corner: tcorner; fillRectangle: aRect! ! !AthensBalloonLinearGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/1/2011 10:47'! origin ^ origin! ! !AthensBalloonLinearGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/1/2011 10:47'! origin: anObject origin := anObject! ! !AthensBalloonLinearGradient methodsFor: 'rendering' stamp: 'IgorStasenko 3/8/2012 13:59'! strokeRect: rect on: canvas stroke: strokePaint | torigin tcorner | "A gradient fill coordinates are first transformed by paintTransform matrix, then by pathTransform matrix" torigin := canvas paintTransform transform: origin. tcorner := canvas paintTransform transform: corner. ^ canvas surface engine prepareForRendering; registerLinearGradient: colorRamp origin: torigin corner: tcorner; strokeRectangle: rect width: strokePaint width! ! !AthensBalloonRadialGradient commentStamp: '' prior: 40344696! blghjfg ! !AthensBalloonRadialGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! center ^ center! ! !AthensBalloonRadialGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! center: anObject center := anObject! ! !AthensBalloonRadialGradient methodsFor: 'rendering' stamp: 'IgorStasenko 3/8/2012 13:58'! fillPath: aPath on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | c | c := anAthensCanvas paintTransform transform: center. ^ anAthensCanvas surface engine prepareForRendering; registerRadialGradient: colorRamp center: c radius: radius; fillBezierShape: aPath contoursForFilling ! ! !AthensBalloonRadialGradient methodsFor: 'rendering' stamp: 'IgorStasenko 3/8/2012 13:58'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | c dir n | c := anAthensCanvas paintTransform transform: center. dir := (radius@0). n := (0@radius). ^ anAthensCanvas surface engine prepareForRendering; registerRadialGradient: colorRamp center: c direction: dir normal: n; fillRectangle: aRect! ! !AthensBalloonRadialGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! radius ^ radius! ! !AthensBalloonRadialGradient methodsFor: 'accessing' stamp: 'IgorStasenko 4/14/2011 16:27'! radius: anObject radius := anObject! ! !AthensBalloonPaint methodsFor: 'converting' stamp: 'IgorStasenko 3/21/2012 19:11'! asAthensPaintOn: surf ^ self ! ! !AthensBalloonPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:18'! asStrokePaintOn: aCanvas ^ AthensBalloonStrokePaint new fillPaint: self! ! !AthensBalloonSolidColorPaint commentStamp: 'IgorStasenko 12/20/2011 15:27' prior: 40344792! maybe Color could act as a AthensPaint by itself by implementing a corresponding protocol! !AthensBalloonSolidColorPaint methodsFor: 'accessing' stamp: 'IgorStasenko 3/22/2011 21:59'! color ^ color! ! !AthensBalloonSolidColorPaint methodsFor: 'accessing' stamp: 'IgorStasenko 3/22/2011 21:59'! color: anObject color := anObject! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 3/29/2011 15:00'! fillPath: athensBalloonPath on: anAthensCanvas ^ anAthensCanvas surface fillBezierShape: athensBalloonPath contoursForFilling color: color. ! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 4/1/2011 09:13'! fillRectangle: aRect on: canvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " ^ canvas surface fillRectangle: aRect color: color! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/14/2011 15:10'! strokePath: aPath on: anAthensCanvas stroke: strokePaint anAthensCanvas surface strokeBezierShape: aPath contoursForStroke color: color width: strokePaint width. ! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/14/2011 15:17'! strokeRect: rect on: canvas stroke: strokePaint ^ canvas surface strokeRectangle: rect color: color width: strokePaint width! ! !AthensBalloonEngine commentStamp: 'IgorStasenko 3/29/2011 01:04' prior: 40344959! - balloon engine using only first 4 variables of receiver instance: - work buffer - span - bitBlt (Bitblt object) - forms ! !AthensBalloonEngine methodsFor: 'accessing' stamp: 'IgorStasenko 9/19/2011 16:15'! clipRect: aRect clipRect := aRect truncated. ! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 4/21/2011 16:20'! copyBits (bitBlt notNil and:[bitBlt destForm notNil]) ifTrue:[bitBlt destForm unhibernate]. self copyLoopFastest.! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 4/22/2011 13:56'! drawImage: aForm transform: m | orig dir normal tr corner rect | rect := aForm boundingBox. orig := 0@0. dir := aForm width @ 0. normal := 0 @ aForm height. tr := edgeTransform. edgeTransform := m. self prepareForRendering. self registerFormFill: aForm origin: orig direction: dir normal: normal. self fillRectangle: rect. edgeTransform := tr. ! ! !AthensBalloonEngine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/19/2011 16:37'! fastReset workBuffer ifNil: [ ^ self reset ]. workBuffer at: (1+GWState) put: GEStateUnlocked; at: (1+GWObjUsed) put: 4; at: (1+GWNeedsFlush) put: 0; at: (1+GWCurrentZ) put: 0; at: (1+GWGETStart) put: 0"; at: (1+GWGETUsed) put: 0; at: (1+GWAETStart) put: 0; at: (1+GWAETUsed) put: 0". self primSetEdgeTransform: edgeTransform. self primSetClipRect: clipRect. self primSetColorTransform: colorTransform. self primSetDepth: self primGetDepth + 1. postFlushNeeded := false. forms := #(). " - self magicNumberPut: GWMagicNumber. - self wbSizePut: size. + self wbTopPut: size. + self statePut: GEStateUnlocked. - self objStartPut: GWHeaderSize. + self objUsedPut: 4. - self objectTypeOf: 0 put: GEPrimitiveFill. - self objectLengthOf: 0 put: 4. - self objectIndexOf: 0 put: 0. self getStartPut: 0. self getUsedPut: 0. self aetStartPut: 0. self aetUsedPut: 0. self stopReasonPut: 0. + self needsFlushPut: 0. - self clipMinXPut: 0. - self clipMaxXPut: 0. - self clipMinYPut: 0. - self clipMaxYPut: 0. + self currentZPut: 0. self resetGraphicsEngineStats. self initEdgeTransform. self initColorTransform. "! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 4/1/2011 09:26'! fillBezierShape: contours contours do:[ :points | self primAddBezierShape: points segments: (points size // 3) fill: currentFill lineWidth: 0 lineFill: 0. "Note: To avoid premature flushing of the pipeline we need to reset the flush bit within the engine." self primFlushNeeded: false. ]. self copyBits.! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 4/21/2011 15:04'! fillRectangle: rect currentFill = 0 ifTrue: [ ^ self ]. "no fill " self primAddRectFrom: rect origin to: rect corner fillIndex: currentFill borderWidth: 0 borderColor: 0. self copyBits. ! ! !AthensBalloonEngine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/13/2011 12:15'! prepareForRendering self fastReset! ! !AthensBalloonEngine methodsFor: 'registering fills' stamp: 'IgorStasenko 4/1/2011 09:16'! registerColorFill: aColor currentFill := aColor scaledPixelValue32. ! ! !AthensBalloonEngine methodsFor: 'registering fills' stamp: 'IgorStasenko 4/22/2011 18:52'! registerFormFill: form origin: orig direction: dir normal: norm forms := forms copyWith: form. form unhibernate. currentFill := self primAddBitmapFill: form colormap: (form colormapIfNeededForDepth: 32) tile: true "shall we always tile? " from: orig along: dir normal: norm xIndex: forms size. ! ! !AthensBalloonEngine methodsFor: 'paints' stamp: 'IgorStasenko 4/1/2011 16:01'! registerLinearGradient: colorRamp origin: origin corner: corner | pixelRamp direction normal | pixelRamp := GradientFillStyle pixelRampCache at: colorRamp. direction := corner - origin. normal := direction y negated @ direction x. currentFill := self primAddGradientFill: pixelRamp from: origin along: direction normal: normal radial: false.! ! !AthensBalloonEngine methodsFor: 'paints' stamp: 'IgorStasenko 4/14/2011 17:15'! registerRadialGradient: colorRamp center: aCenter direction: dir normal: n | pixelRamp | pixelRamp := GradientFillStyle pixelRampCache at: colorRamp. currentFill := self primAddGradientFill: pixelRamp from: aCenter along: dir normal: n radial: true.! ! !AthensBalloonEngine methodsFor: 'paints' stamp: 'IgorStasenko 4/14/2011 16:26'! registerRadialGradient: colorRamp center: aCenter radius: r | pixelRamp | pixelRamp := GradientFillStyle pixelRampCache at: colorRamp. currentFill := self primAddGradientFill: pixelRamp from: aCenter along: (aCenter x + r @ aCenter y) normal: (aCenter x @ aCenter y - r) radial: true.! ! !AthensBalloonEngine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/22/2011 14:00'! reset workBuffer ifNil:[workBuffer := self class allocateOrRecycleBuffer: 10000]. self primInitializeBuffer: workBuffer. self primSetAALevel: 4. self primSetOffset: 0@0. self primSetClipRect: clipRect. self primSetEdgeTransform: edgeTransform. self primSetColorTransform: colorTransform. forms := #().! ! !AthensBalloonEngine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/1/2011 09:03'! setFill: aFill currentFill := aFill! ! !AthensBalloonEngine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/14/2011 15:12'! strokeBezierShape: contours width: aWidth contours do:[ :points | self primAddBezierShape: points segments: (points size // 3) fill: 0 lineWidth: aWidth lineFill: currentFill. "Note: To avoid premature flushing of the pipeline we need to reset the flush bit within the engine." self primFlushNeeded: false. ]. self copyBits. ! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 5/2/2011 04:36'! strokeRectangle: rect borderWidth: width currentFill = 0 ifTrue: [ ^ self ]. "no fill " self primAddRectFrom: rect origin to: rect corner fillIndex: 0 borderWidth: width borderColor: currentFill. self copyBits. ! ! !AthensBalloonEngine methodsFor: 'drawing' stamp: 'IgorStasenko 9/19/2011 15:38'! strokeRectangle: rect width: aWidth currentFill = 0 ifTrue: [ ^ self ]. "no fill " self primAddRectFrom: rect origin to: rect corner fillIndex: 0 borderWidth: aWidth asInteger borderColor: currentFill. self copyBits. ! ! !FT2GlyphRenderer class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/20/2011 10:29'! forFont: aFont surface: aSurface ^ self new initForFont: aFont surface: aSurface! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/19/2011 15:31'! clearBitmap form bits atAllPut: 0. ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/19/2011 15:37'! form ^ form! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/25/2011 18:29'! getAdvance "aPoint is a text origin in user's coordinate system, and anvance is accumulated advance came from another renderer instance, expressed in surface's coordinate system" | pt | pt := (penX/64.0) @ (penY/64.0) - origin. ^ pt! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 16:32'! initForFont: aFont surface: aSurface self assert: (aFont class == FreeTypeFont). surface := aSurface. font := aFont. slot := SimpleTextGlyphInfo new. pixelSize := font pixelSize rounded. blt := BitBlt toForm: surface form. self loadSurfaceTransform. colorMap := Bitmap new: 256. blt sourceForm: form; sourceX: 0; sourceY: 0; destOrigin: 0@0; sourceOrigin: 0@0; halftoneForm: nil; combinationRule: 24; width: form width; height: form height; colorMap: colorMap; clipRect: surface clipRect. translation := IntegerArray new: 2. ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/12/2011 20:11'! loadSlotInfo slot loadFrom: font face.! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 14:25'! loadSurfaceTransform | m mt org xaxis yaxis sum xmin xmax ymin ymax formW formH fix face bbox | face := font face. face setPixelWidth: pixelSize height: pixelSize. bbox := face bbox. m := surface pathTransform copy transposed. org := m transform: 0@0. xaxis := (m transform: bbox right - bbox left * pixelSize / face unitsPerEm @ 0) - org. yaxis := (m transform: 0 @ (bbox bottom - bbox top * pixelSize / face unitsPerEm)) - org. sum := xaxis + yaxis. xmin := 0 min: ((xaxis x min: yaxis x) min: sum x). ymin := 0 min: ((xaxis y min: yaxis y) min: sum y). xmax := 0 max: ((xaxis x max: yaxis x) max: sum x). ymax := 0 max: ((xaxis y max: yaxis y) max: sum y). formW := (xmax - xmin) ceiling + 1. formH := (ymax - ymin) ceiling + 1. " freetype 'zero' points to bottom-left point on form" "calculate bitmap translation relative to top-left corner of glyph" bitmapX := (yaxis x negated + xmin * 64.0) rounded. bitmapY := (xaxis y negated + ymin * 64.0) rounded. descend := 0 @ ((face bbox height - face bbox bottom * pixelSize / face unitsPerEm) +1). descend := (m transform: descend) - org. descend := descend + (xmin negated@(ymin negated)). descend := (descend * 64 ) rounded. form := Form extent: formW @ formH depth: 8. blt sourceForm: form; width: form width; height: form height. "prepare transformation matrix for freetype" matrix := IntegerArray new: 4. "values in matrix are 16.16 fixed point floating values" fix := 65536. "(2 raisedTo: 16)." matrix at: 1 put: (m sx * fix) rounded; at: 2 put: (m shx * fix) rounded; at: 3 put: (m shy * fix) rounded; at: 4 put: (m sy * fix) rounded. ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/25/2011 18:40'! loadUnicode: unicode | ext hintingFlags flags arr face | face := font face. " hintingFlags := FreeTypeSettings current hintingFlags." flags := LoadNoBitmap bitOr: 2 "hintingFlags". " bitOr:( LoadIgnoreTransform bitOr: 2 ). " face primLoadCharacter: unicode flags: flags. self loadSlotInfo. ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 13:45'! renderGlyphsIn: text from: start to: stop | face | face := font face. " face setPixelWidth: pixelSize height: pixelSize. " start to: stop do: [:i | | bx by | bx := penX + bitmapX. by := penY + bitmapY. "add a small shift, to incorporate subpixel position" translation at: 1 put: descend x + (bx bitAnd: 2r111111). translation at: 2 put: descend y - (by bitAnd: 2r111111). face primSetTransform: matrix delta: translation. self loadUnicode: (text at: i) asUnicode. self clearBitmap. face renderGlyphIntoForm: form. blt destX: bx >> 6; destY: by >> 6; copyBits. "increment x by horizontal advance" penX := penX + slot advanceX. penY := penY - slot advanceY. ]. ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 13:59'! setColor: color "Set the color which will be used to render glyphs." | clr rgb alpha | currentColor = color ifTrue: [ ^ self ]. currentColor := color. clr := color pixelValue32. rgb := clr bitAnd: 16rFFFFFF. alpha := clr >> 24. 0 to: 255 do:[:i | | a | a := (i+1) * alpha bitAnd: 16rFF00. colorMap at: i+1 put: ( (a<<16) + rgb ). ]. " colorMap at: 1 put: (Color red alpha: 0.1) pixelValue32." ! ! !FT2GlyphRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/7/2011 13:45'! setPosition: aPoint advance: advancePt baseline: baselineOffset "aPoint is a text origin in user's coordinate system, and andvance is accumulated advance came from another renderer instance, expressed in surface's coordinate system" | pt offset | offset := baselineOffset - font getPreciseAscent "(font face ascender * pixelSize / font face unitsPerEm)". pt := aPoint + (0@offset). pt := surface pathTransform transform: pt. origin := pt. pt := pt + advancePt. "remember the origin, so on #getAdvance , we will answer the current advance for renderer in surface coordinate system" " 2 raisedTo: 6 " penX := (pt x * 64) rounded. penY := (pt y * 64) rounded. ! ! !AthensBalloonStrokePaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:29'! asStrokePaintOn: aCanvas "already stroke paint" ^ self! ! !AthensBalloonStrokePaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/14/2011 15:05'! fillPath: aPath on: aCanvas ^ fillPaint strokePath: aPath on: aCanvas stroke: self! ! !AthensBalloonStrokePaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/14/2011 15:16'! fillRectangle: aRect on: aCanvas ^ fillPaint strokeRect: aRect on: aCanvas stroke: self! ! "Athens-Balloon"! !AthensSceneView commentStamp: '' prior: 0! i am simple morph for representing some scene. The scene is any object which implements #renderOn: method, or a block with single argument. (an argument passed is an Athens canvas). I implement a simple view panning and zooming with mouse drag and mouse-wheel (correspondigly). Example1: open scene view, by passing a simple rendering block. | view | view := AthensSceneView new. view scene: [:canvas | canvas surface clear: Color black. canvas setPaint: Color red. canvas drawShape: (0@0 corner:120@100) ]. view openInWindow. Example2: open scene view on imported SVG file (note you need 'Athens-SVG' package loaded): | view | view := AthensSceneView new. view scene: (AthensSVGConverter fromFile: 'lion.svg'). view openInWindow. ! !AthensInteractiveScene commentStamp: '' prior: 0! i am like my superclass, can display any scene (object which understands #renderOn: message) and support free-form pan and zoom. but in addition, i expecting that scene object understands following: scene handleEvent: event in: sceneView at: position This method should answer true if scene object wants to handle event by itself , preventing default handling of view (pan & zoom). The point is coordinates of event in scene coordinate space (not screen coordinate space). The event is MorphicEvent (currently limited only to mouse move&button events). Note that if scene view enters zooming or panning state, no events will be passed to scene object as long as state is active. ! !PluggableSliderMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 14:41'! drawOnAthensCanvas: aCanvas super drawOn: aCanvas. aCanvas morphicDrawString: self label in: self labelBounds font: self font color: self fontColor. ! ! !AthensBezier3Scene class methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 4/26/2013 17:53'! openViewOn: aControlPointsArray ^ AthensSceneView new scene: (self on: aControlPointsArray ); openInWindow! ! !AthensCanvas methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 4/21/2011 14:27'! fullDrawMorph: aMorph "Hook method for potential other canvases. In the core, this method looks supefluous but PostscriptCanvases and other canvases can specialized it for Morph rendering. Therefore it should not be merged with fullDraw:." aMorph fullDrawOnAthensCanvas: self! ! !AthensCanvas methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 15:25'! morphicDrawString: string at: position font: aFont color: aColor self pathTransform restoreAfter: [ self pathTransform translateX: position x Y: position y + aFont getPreciseAscent. self setFont: aFont; setPaint: aColor; drawString: string. ] ! ! !AthensCanvas methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 15:23'! morphicDrawString: string in: rect font: aFont color: aColor self pathTransform restoreAfter: [ self pathTransform translateX: rect left Y: rect top. self clipBy: (0@0 corner: rect extent) during: [ self setFont: aFont. self pathTransform translateX: 0 Y: aFont getPreciseAscent. self setPaint: aColor; drawString: string. ] ]! ! !AthensPluggableTextMorph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:01'! textMorphClass ^ AthensTextMorph! ! !IndentingListItemMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 14:56'! drawOnAthensCanvas: aCanvas | tRect sRect columnScanner colorToUse columnLeft | tRect := self toggleRectangle. sRect := bounds withLeft: tRect right + 4. " self athensDrawToggleOn: aCanvas in: tRect. " colorToUse := complexContents preferredColor ifNil: [ color ]. icon isNil ifFalse: [ "aCanvas translucentImage: icon at: sRect left @ (self top + ((self height - icon height) // 2))." sRect := sRect left: sRect left + icon width + 2 ]. (container columns isNil or: [ (contents asString indexOf: Character tab) = 0 ]) ifTrue: [ sRect := sRect top: (sRect top + sRect bottom - self fontToUse height) // 2. "contents treeRenderOn: aCanvas bounds: sRect color: colorToUse font: self fontToUse from: self" ] ifFalse: [ columnLeft := sRect left. columnScanner := contents asString readStream. container columns do: [ :width | | columnData columnRect | columnRect := columnLeft @ sRect top extent: width @ sRect height. columnData := columnScanner upTo: Character tab. columnData isEmpty ifFalse: [ aCanvas morphicDrawString: columnData in: columnRect font: self fontToUse color: colorToUse ]. columnLeft := columnRect right + 5 ] ]! ! !AthensBasicScene methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/21/2013 06:07'! renderOn: canvas canvas surface clear: Color black. canvas pathTransform rotateByDegrees: 30. canvas setPaint: Color yellow. canvas drawShape: (canvas createPath: [:builder | builder relative; lineTo: 100@0; curveVia: 50@50 to: 0@100 ]). ! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 22:42'! initialize geometry := WeakIdentityKeyDictionary new. stack := OrderedCollection new: 100.! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 23:02'! newStory history := OrderedCollection new: 1000.! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 23:03'! pop | doneMorph | doneMorph := stack removeLast. history add: doneMorph. currentMorph := stack ifEmpty: [ nil ] ifNotEmpty: [ stack last ].! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 22:44'! push: aMorph currentMorph := aMorph. stack addLast: aMorph.! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 22:50'! registerShape: aShape canvas: aCanvas | infos info | infos := geometry at: currentMorph ifAbsentPut: [ OrderedCollection new ]. info := AthensVisualInfo new shape: aShape; clipRect: aCanvas clipRect; transform: aCanvas pathTransform getMatrix. infos add: info! ! !AthensGeometricalHierarchy methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 22:57'! withMorph: aMorph do: aBlock self push: aMorph. "clear geometry for incoming morph" geometry removeKey: aMorph ifAbsent: nil. [aBlock value ] ensure: [ self pop ]! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:31'! caretRect ^ (0@0 corner: 0@0) ! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 16:08'! characterBlockForIndex: index ^ self defaultCharacterBlock! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:22'! compose: aText style: aTextStyle from: startingIndex in: aRectangle text := aText. textStyle := aTextStyle self shouldBeImplemented.! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:50'! compose: aText style: aTextStyle in: rect text := aText. textStyle := aTextStyle. containerRect := rect. lines := (AthensTextComposer scan: aText for: AthensTextScanner new) lines.! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:04'! defaultCharacterBlock ^ (CharacterBlock new stringIndex: 1 text: text topLeft: 0@0 extent: 0 @ 0) textLine: lines first! ! !AthensParagraph methodsFor: 'drawing' stamp: 'IgorStasenko 10/7/2012 23:32'! drawOnAthensCanvas: canvas bounds: aRectangle | renderer | "self halt." " canvas clipBy: aRectangle during: [ " renderer := AthensTextRenderer new. renderer render: text lines: lines on: canvas. " ]. "! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:48'! extent ^ containerRect width @ lines last bottom! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:07'! extraSelectionChanged " refreshExtraSelection := true " self flag: #foo! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:06'! findReplaceSelectionRegex: aRegex " findReplaceSelectionRegex := aRegex. " self flag: #foo ! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:28'! focused ^ false! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:45'! focused: bool "why we should care?" "self flag: #ooo"! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:00'! positionWhenComposed: pos positionWhenComposed := pos! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:06'! secondarySelection: aSubString " secondarySelection := aSubString." self flag: #foo.! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:02'! selectionColor: anUndefinedObject self shouldBeImplemented.! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:08'! selectionRects ^ #()! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:09'! selectionStart: startBlock selectionStop: stopBlock selectionStart := startBlock. selectionStop := stopBlock.! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:28'! showCared ! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:29'! showCaret ! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:29'! showCaret: abool ! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:05'! text ^ text! ! !AthensParagraph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:20'! textOwner: anUndefinedObject self shouldBeImplemented.! ! !LazyListMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 15:29'! athensDisplay: item atRow: row on: aCanvas "Display the given item at the given row on the given canvas." | c drawBounds frame attrs useDefaultFont | " drawBounds := self drawBoundsForRow: row. c := self colorForRow: row. aCanvas morphicDrawString: item asString at: drawBounds topLeft font: self font color: (self colorForRow: row)"! ! !LazyListMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/9/2012 19:04'! athensDrawBackgroundForSearchedRow: row on: aCanvas aCanvas setPaint: listSource secondarySelectionColor. aCanvas drawShape: (self selectionFrameForRow: row)! ! !LazyListMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/9/2012 19:03'! athensDrawBackgroundForSelectedRow: row on: aCanvas aCanvas setPaint: listSource selectionColorToUse. aCanvas drawShape: (self selectionFrameForRow: row)! ! !LazyListMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/4/2011 16:50'! athensDrawSelectionOn: anAthensCanvas self value! ! !LazyListMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 15:12'! drawOnAthensCanvas: aCanvas "self drawSelectionOn: aCanvas." 1 to: listItems size do: [:row | (listSource itemSelectedAmongMultiple: row) ifTrue: [ self athensDrawBackgroundForSelectedRow: row on: aCanvas] ifFalse: [ (listSource searchedElement = row) ifTrue: [ self athensDrawBackgroundForSearchedRow: row on: aCanvas] ifFalse: [ (listSource backgroundColorFor: row) ifNotNil: [:col | self athensDrawBackgroundForRow: row on: aCanvas color: col ]]]. selectedRow = row ifTrue: [ self athensDrawSelectionOn: aCanvas ]. (listSource separatorAfterARow: row) ifTrue: [ self athensDrawSeparatorAfter: row on: aCanvas ]. self athensDisplay: (self item: row) atRow: row on: aCanvas]. "listSource potentialDropRow > 0 ifTrue: [self athensHighlightPotentialDropRow: listSource potentialDropRow on: aCanvas]"! ! !PasteUpMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 4/21/2011 14:33'! drawOnAthensCanvas: aCanvas "Draw in order: - background color - background sketch, if any - Update and draw the turtleTrails form. See the comment in updateTrailsForm. Later (in drawSubmorphsOn:) I will skip drawing the background sketch." "draw background fill" super drawOnAthensCanvas: aCanvas. backgroundMorph ifNotNil: [ aCanvas clipBy: self clippingBounds during: [ aCanvas fullDrawMorph: backgroundMorph ] ] ! ! !AthensCompositePaint methodsFor: 'drawing' stamp: 'IgorStasenko 10/9/2012 19:13'! fillPath: athensPath on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " paints do: [:paint | paint fillPath: athensPath on: anAthensCanvas ] ! ! !AthensCompositePaint methodsFor: 'drawing' stamp: 'IgorStasenko 10/9/2012 19:13'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " paints do: [:paint | paint fillRectangle: aRect on: anAthensCanvas ] ! ! !AthensCompositePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 10/9/2012 19:07'! fromFillStyles: fillStyles on: aCanvas paints := fillStyles collect: [:each | each asAthensPaintOn: aCanvas ]! ! !AthensMorphicGradientPaint methodsFor: 'rendering' stamp: 'IgorStasenko 4/12/2013 10:06'! fillRectangle: aRect on: canvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | fill | fill := gradient radial ifTrue: [ canvas surface createRadialGradient: gradient colorRamp center: (canvas pathTransform inverseTransform: gradient origin ) radius: gradient direction y ] ifFalse: [ canvas surface createLinearGradient: gradient colorRamp start: (canvas pathTransform inverseTransform: gradient origin) stop: (canvas pathTransform inverseTransform: gradient origin + gradient direction ) ]. fill fillRectangle: aRect on: canvas. ! ! !AthensMorphicGradientPaint methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2012 16:14'! gradient: aGradient gradient := aGradient! ! !TextMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 3/8/2012 14:02'! drawOnAthensCanvas: aCanvas "Draw the receiver on a canvas. Draw keyboard focus if appropriate." | fauxBounds | self setDefaultContentsIfNil. super drawOnAthensCanvas: aCanvas. "Border and background if any" "nothing to draw?" (self startingIndex > text size) ifTrue: [ ^ self ]. "Hack here: The canvas expects bounds to carry the location of the text, but we also need to communicate clipping." fauxBounds := self bounds topLeft corner: self innerBounds bottomRight. self paragraph drawOnAthensCanvas: aCanvas bounds: fauxBounds. ! ! !StringMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/3/2012 17:27'! drawOnAthensCanvas: canvas | pt bnd gap | " bnd := self bounds. gap := self layoutInset. " bnd := self bounds topLeft + self layoutInset. font := self fontToUse. canvas pathTransform restoreAfter: [ canvas pathTransform translateBy: bnd. canvas pathTransform translateX: 0 Y: font getPreciseAscent. canvas setPaint: color; setFont: self fontToUse; drawString: contents. ]! ! !CompositeFillStyle methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/9/2012 19:10'! asAthensPaintOn: aCanvas ^ AthensCompositePaint new fromFillStyles: fillStyles on: aCanvas! ! !TransformMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/7/2012 23:18'! clipDuring: aBlock canvas: aCanvas self clipSubmorphs ifTrue: [ aCanvas clipBy: self clippingBounds during: aBlock ] ifFalse: [ ^ aBlock value ] ! ! !TransformMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/7/2012 23:22'! drawClippedOn: aCanvas during: aBlock ^ self clipSubmorphs ifTrue: [ aCanvas clipBy: self clippingBounds during: aBlock ] ifFalse: [ aBlock value ] ! ! !TransformMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/7/2012 23:21'! fullDrawOnAthensCanvas: anAthensCanvas "Draw the full Morphic structure on the given Canvas" self visible ifFalse: [^ self]. (anAthensCanvas isVisible: self fullBounds) ifFalse: [^self]. (self hasProperty: #errorOnDraw) ifTrue: [^self "drawErrorOn: aCanvas" ]. (anAthensCanvas isVisible: self bounds) ifTrue: [ anAthensCanvas draw: self ]. submorphs isEmpty ifTrue: [^self]. self clipDuring: [ anAthensCanvas pathTransform restoreAfter: [ anAthensCanvas pathTransform translateBy: self transform offset negated. submorphs reverseDo: [:m | anAthensCanvas fullDrawMorph: m ] ] ] canvas: anAthensCanvas. ! ! !AthensSceneView commentStamp: '' prior: 40375831! i am simple morph for representing some scene. The scene is any object which implements #renderOn: method, or a block with single argument. (an argument passed is an Athens canvas). I implement a simple view panning and zooming with mouse drag and mouse-wheel (correspondigly). Example1: open scene view, by passing a simple rendering block. | view | view := AthensSceneView new. view scene: [:canvas | canvas surface clear: Color black. canvas setPaint: Color red. canvas drawShape: (0@0 corner:120@100) ]. view openInWindow. Example2: open scene view on imported SVG file (note you need 'Athens-SVG' package loaded): | view | view := AthensSceneView new. view scene: (AthensSVGConverter fromFile: 'lion.svg'). view openInWindow. ! !AthensInteractiveScene commentStamp: '' prior: 40376641! i am like my superclass, can display any scene (object which understands #renderOn: message) and support free-form pan and zoom. but in addition, i expecting that scene object understands following: scene handleEvent: event in: sceneView at: position This method should answer true if scene object wants to handle event by itself , preventing default handling of view (pan & zoom). The point is coordinates of event in scene coordinate space (not screen coordinate space). The event is MorphicEvent (currently limited only to mouse move&button events). Note that if scene view enters zooming or panning state, no events will be passed to scene object as long as state is active. ! !AthensInteractiveScene methodsFor: 'event handling' stamp: 'IgorStasenko 6/1/2013 05:13'! eventHandledByScene: evt ^ true == (scene handleEvent: evt in: self at: (self eventPositionInScene:evt)) ! ! !AthensInteractiveScene methodsFor: 'event handling' stamp: 'IgorStasenko 6/1/2013 05:08'! eventPositionInScene: evt | pt | pt := evt position - self topLeft. ^ transform transform: pt! ! !AthensInteractiveScene methodsFor: 'event handling' stamp: 'IgorStasenko 6/1/2013 05:17'! mouseDown: evt ((self inState: #panning) or: [ self inState:#zooming ]) ifFalse: [ (self eventHandledByScene: evt) ifTrue: [ ^ self ]. ]. ^ super mouseDown: evt! ! !AthensInteractiveScene methodsFor: 'event handling' stamp: 'IgorStasenko 6/1/2013 05:12'! mouseMove: evt ((self inState: #panning) or: [ self inState:#zooming ]) ifFalse: [ (self eventHandledByScene: evt) ifTrue: [ ^ self ]. ]. ^ super mouseMove: evt! ! !AthensInteractiveScene methodsFor: 'event handling' stamp: 'IgorStasenko 6/1/2013 05:16'! mouseUp: evt ((self inState: #panning) or: [ self inState:#zooming ]) ifFalse: [ (self eventHandledByScene: evt) ifTrue: [ ^ self ]. ]. ^ super mouseUp:evt ! ! !AthensSceneView methodsFor: 'colors' stamp: 'IgorStasenko 4/21/2013 15:01'! backgroundColor ^ Color gray! ! !AthensSceneView methodsFor: 'session management' stamp: 'IgorStasenko 4/21/2013 04:37'! checkSession session == Smalltalk session ifFalse: [ self initializeForNewSession ]! ! !AthensSceneView methodsFor: 'session management' stamp: 'IgorStasenko 4/21/2013 04:40'! createSurface | extent | extent := self extent asIntegerPoint. (scene respondsTo: #createSurface:) ifTrue: [ surface := scene createSurface: extent. ] ifFalse: [ surface := AthensCairoSurface extent: extent]. ! ! !AthensSceneView methodsFor: 'drawing' stamp: 'IgorStasenko 6/3/2013 14:22'! drawOn: canvas | px py | self checkSession. canvas fillRectangle: bounds color: self backgroundColor . scene ifNotNil: [ surface drawDuring: [ : acanvas | surface clear. acanvas pathTransform loadAffineTransform: transform. scene isBlock ifTrue: [ scene cull: acanvas cull: self ] ifFalse: [ scene renderOn: acanvas ] ] ]. canvas translucentImage: surface asForm at: bounds origin. self showDebugInfo ifTrue: [ px := transform x printShowingDecimalPlaces: 3. py := transform y printShowingDecimalPlaces: 3. canvas drawString: 'zoom: ' , (transform sx printShowingDecimalPlaces: 3), ' pan: ', px, ' @ ' , py at: bounds origin font: nil color: Color white ].! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 05:02'! handlesMouseDown: evt ^ true! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 05:13'! handlesMouseOver: evt ^ true! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 06:01'! handlesMouseWheel: event ^ true! ! !AthensSceneView methodsFor: 'state tracking' stamp: 'IgorStasenko 4/21/2013 05:37'! inState: stateName ^ (state at: stateName ifAbsent: nil) notNil! ! !AthensSceneView methodsFor: 'state tracking' stamp: 'IgorStasenko 4/21/2013 05:45'! inState: stateName do: aBlock ^ (state at: stateName ifAbsent: nil) ifNotNil: aBlock ! ! !AthensSceneView methodsFor: 'initialize-release' stamp: 'IgorStasenko 6/3/2013 14:28'! initialize super initialize. transform := AthensAffineTransform new. self hResizing: #spaceFill. self vResizing: #spaceFill. color := Color transparent. state := Dictionary new. self extent: self minimumExtent. ! ! !AthensSceneView methodsFor: 'session management' stamp: 'IgorStasenko 4/21/2013 04:40'! initializeForNewSession self createSurface. session := Smalltalk session. ! ! !AthensSceneView methodsFor: 'accessing' stamp: 'IgorStasenko 6/3/2013 14:27'! keepRefreshing: aBoolean keepRefreshing := aBoolean. keepRefreshing ifTrue: [ self startStepping ].! ! !AthensSceneView methodsFor: 'layout' stamp: 'IgorStasenko 4/21/2013 05:39'! layoutChanged "react on morph resize" super layoutChanged. surface ifNotNil: [ self extent asIntegerPoint ~= surface extent ifTrue: [ self createSurface ] ]. ! ! !AthensSceneView methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/21/2013 06:50'! minimumExtent ^ 300@300! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 06:12'! mouseDown: evt | pos | pos := evt cursorPoint. "left button" evt redButtonPressed ifTrue: [ self setState: #panning value: { transform x@transform y. pos } ]. ! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 05:41'! mouseEnter: evt self setState: #mouseIn! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 05:44'! mouseLeave: evt self resetState: #mouseIn; resetState: #panning.! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 06:15'! mouseMove: evt self inState: #panning do: [ :startPanAndPos | | delta | delta := startPanAndPos first + ( evt cursorPoint - startPanAndPos second ). transform x: delta x; y: delta y. self changed. ] ! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/21/2013 05:44'! mouseUp: evt "self halt." self resetState: #panning! ! !AthensSceneView methodsFor: 'event handling' stamp: 'IgorStasenko 4/22/2013 15:00'! mouseWheel: event "Handle a mouseWheel event." | center zoom | center := transform inverseTransform: (event cursorPoint - bounds origin). zoom := 1. event direction = #up ifTrue: [ zoom := 1.25 ]. event direction = #down ifTrue: [ zoom := 1/1.25 ]. (self inState: #zooming) ifTrue: [ self updateZoom: zoom cursor: event cursorPoint. ] ifFalse: [ self startZooming: zoom center: center. ] ! ! !AthensSceneView methodsFor: 'state tracking' stamp: 'IgorStasenko 4/21/2013 05:39'! resetState: stateName state at: stateName put: nil. "receiver's state changed" self changed.! ! !AthensSceneView methodsFor: 'accessing' stamp: 'IgorStasenko 4/21/2013 05:51'! scene ^ scene! ! !AthensSceneView methodsFor: 'accessing' stamp: 'IgorStasenko 4/25/2013 01:19'! scene: aScene scene := aScene. self changed.! ! !AthensSceneView methodsFor: 'state tracking' stamp: 'IgorStasenko 4/21/2013 05:39'! setState: stateName state at: stateName put: true. "receiver's state changed" self changed.! ! !AthensSceneView methodsFor: 'state tracking' stamp: 'IgorStasenko 4/21/2013 05:39'! setState: stateName value: aValue state at: stateName put: aValue. "receiver's state changed" self changed.! ! !AthensSceneView methodsFor: 'drawing' stamp: 'IgorStasenko 4/26/2013 14:46'! showDebugInfo ^ true ! ! !AthensSceneView methodsFor: 'zoom animation' stamp: 'IgorStasenko 4/22/2013 14:41'! startZooming: zoom center: center | start end | start := Time millisecondClockValue. end := start + 250. self setState: #zooming value: { center. transform copy. zoom. start. end}. self startStepping! ! !AthensSceneView methodsFor: 'zoom animation' stamp: 'IgorStasenko 6/1/2013 14:09'! step self inState: #zooming do: [ :zoomState | | now start end center targetZoom factor | now := Time millisecondClockValue. start := zoomState at: 4. end := zoomState at: 5. (now between: start and:end) ifFalse: [ now := end. self resetState: #zooming. self stopStepping ]. transform := (zoomState at: 2) copy. center := zoomState at: 1. factor := (now-start)/(end - start ). targetZoom := zoomState at: 3. targetZoom := 1* (1-factor) + (targetZoom * factor). transform translateBy: center; scaleBy:targetZoom; translateBy: center negated. ]. self changed. ! ! !AthensSceneView methodsFor: 'zoom animation' stamp: 'IgorStasenko 4/22/2013 14:22'! stepTime ^ 0! ! !AthensSceneView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/3/2013 14:27'! stopStepping keepRefreshing ifFalse: [ ^ super stopStepping ]! ! !AthensSceneView methodsFor: 'zoom animation' stamp: 'IgorStasenko 4/22/2013 15:01'! updateZoom: zoom cursor: cursorPoint | zoomState targetZoom start end now fraction newCenter | zoomState := state at:#zooming. "change the target zoom and increase time a bit" targetZoom := zoomState at: 3. start := zoomState at: 4. end := zoomState at: 5. now := Time millisecondClockValue. (now > end) ifTrue: [ now := end ]. "interpolate linearly the target zoom factor over time start ... end" fraction := (now - start) / (end - start). "zoom goes from 1..target zoom" targetZoom := 1*(1-fraction) + (targetZoom * fraction). self step. "to update transform" zoomState at: 3 put: targetZoom * zoom. newCenter := transform inverseTransform: (cursorPoint - bounds origin). zoomState at: 1 put: newCenter. zoomState at: 2 put: transform copy. zoomState at: 4 put: now. zoomState at: 5 put: now + 250 . ! ! !Morph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/11/2012 16:51'! drawOnAthensCanvas: anAthensCanvas | border | border := self borderStyle. anAthensCanvas setPaint: self fillStyle. anAthensCanvas drawShape: self bounds. "Fill the given rectangle." anAthensCanvas drawShape: (self bounds insetBy: border width). (anAthensCanvas setStrokePaint: border color) width: border width. anAthensCanvas drawShape: (self bounds insetBy: (border width /2 asFloat)). "aBorderStyle frameRectangle: aRectangle on: self " ! ! !Morph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 9/2/2012 21:44'! fullDrawOnAthensCanvas: anAthensCanvas "Draw the full Morphic structure on the given Canvas" self visible ifFalse: [^ self]. (anAthensCanvas isVisible: self fullBounds) ifFalse: [^self]. (self hasProperty: #errorOnDraw) ifTrue: [^self "drawErrorOn: aCanvas" ]. (anAthensCanvas isVisible: self bounds) ifTrue: [ anAthensCanvas draw: self ]. submorphs isEmpty ifTrue: [^self]. self clipSubmorphs ifTrue: [ | clip | clip := self clippingBounds. anAthensCanvas clipBy: clip during: [ submorphs reverseDo: [:m | anAthensCanvas fullDrawMorph: m ] ] ] ifFalse: [ submorphs reverseDo: [:m | anAthensCanvas fullDrawMorph: m ] ] ! ! !Morph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 11/7/2012 19:16'! testAthensRender | surf | surf := AthensCairoSurface extent: Display extent. surf drawDuring: [:can | " can pathTransform scaleBy: 0.5; rotateByDegrees: 30." self fullDrawOnAthensCanvas: can ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !ImageMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/12/2012 03:39'! drawOnAthensCanvas: aCanvas | cached | cached := aCanvas cacheAt: image ifAbsentPut: [ image asAthensPaintOn: aCanvas. ]. aCanvas setPaint: cached. aCanvas paintTransform restoreAfter: [ aCanvas paintTransform translateBy: self innerBounds origin negated. aCanvas drawShape: self innerBounds. ]! ! !AthensTextMorph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:42'! contents: stringOrText wrappedTo: width "Accept new text contents. Lay it out, wrapping to width. Then fit my height to the result." wrapFlag := true. super extent: width truncated@self height. self newContents: stringOrText! ! !AthensTextMorph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:23'! createParagraph | newParagraph | self setDefaultContentsIfNil. "...Code here to recreate the paragraph..." newParagraph := AthensParagraph new. newParagraph compose: text style: textStyle copy in: self container. wrapFlag ifFalse: ["Was given huge container at first... now adjust" newParagraph adjustRightX]. newParagraph focused: (self currentHand keyboardFocus == self). paragraph := newParagraph. self fit. ^ paragraph! ! !AthensTextMorph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 12:18'! paragraph ^ paragraph ifNil: [ paragraph := self createParagraph ]. ! ! !AthensTextMorph methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/21/2011 13:02'! selectionColor: aColor selectionColor := aColor. ! ! !Paragraph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 10/8/2012 04:21'! drawOnAthensCanvas: aCanvas bounds: aRectangle "do nothing"! ! !LabelMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 8/31/2012 12:58'! drawOnAthensCanvas: aCanvas "Draw based on enablement." |pc| pc := self owner ifNil: [self paneColor] ifNotNil: [self owner color isTransparent ifTrue: [self owner paneColor] ifFalse: [self owner color]]. aCanvas pathTransform restoreAfter: [ "aCanvas setPaint: Color blue; drawShape: (self bounds). " aCanvas pathTransform translateX: self left Y: self top + self fontToUse ascent. aCanvas setFont: self fontToUse; setPaint: (self enabled ifTrue: [ self color ] ifFalse: [ pc muchDarker ] ); drawString: self contents. ]! ! "Athens-Morphic"! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 19:52'! init_cairo_subpixel_order_t "typedef enum {" CAIRO_SUBPIXEL_ORDER_DEFAULT := 0. CAIRO_SUBPIXEL_ORDER_RGB := 1. CAIRO_SUBPIXEL_ORDER_BGR := 2. CAIRO_SUBPIXEL_ORDER_VRGB := 3. CAIRO_SUBPIXEL_ORDER_VBGR := 4. "} cairo_subpixel_order_t;" ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 19:51'! initialize " self initialize " self initialize_types; initialize_cairo_format_t; initialize_cairo_font_slant_t; initialize_cairo_font_weight_t; initialize_cairo_font_type_t ; initialize_cairo_operator_t ; initialize_cairo_line_cap_t ; initialize_cairo_line_join_t; initialize_cairo_status_t; initialize_cairo_extend_t; initialize_cairo_hint_style_t; initialize_cairo_antialias_t; init_cairo_subpixel_order_t. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 01:22'! initialize_cairo_antialias_t "typedef enum {" CAIRO_ANTIALIAS_DEFAULT := 0. " method " CAIRO_ANTIALIAS_NONE := 1. CAIRO_ANTIALIAS_GRAY := 2. CAIRO_ANTIALIAS_SUBPIXEL := 3. " hints " CAIRO_ANTIALIAS_FAST := 4. CAIRO_ANTIALIAS_GOOD := 5. CAIRO_ANTIALIAS_BEST := 6. "} cairo_antialias_t; " ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:33'! initialize_cairo_extend_t "typedef enum {" CAIRO_EXTEND_NONE := 0 . CAIRO_EXTEND_REPEAT := 1. CAIRO_EXTEND_REFLECT :=2. CAIRO_EXTEND_PAD := 3. "} cairo_extend_t" ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_font_slant_t "typedef enum _cairo_font_slant {" CAIRO_FONT_SLANT_NORMAL := 0. CAIRO_FONT_SLANT_ITALIC := 1. CAIRO_FONT_SLANT_OBLIQUE := 2 ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_font_type_t "typedef enum _cairo_font_type {" CAIRO_FONT_TYPE_TOY := 0. CAIRO_FONT_TYPE_FT := 1. CAIRO_FONT_TYPE_WIN32 := 2. CAIRO_FONT_TYPE_QUARTZ := 3. CAIRO_FONT_TYPE_USER := 4. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_font_weight_t "typedef enum _cairo_font_weight {" CAIRO_FONT_WEIGHT_NORMAL := 0. CAIRO_FONT_WEIGHT_BOLD := 1. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_format_t "enum cairo_format_t" CAIRO_FORMAT_INVALID := -1. CAIRO_FORMAT_ARGB32 := 0. CAIRO_FORMAT_RGB24 := 1. CAIRO_FORMAT_A8 := 2. CAIRO_FORMAT_A1 := 3. CAIRO_FORMAT_RGB16_565 := 4! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 01:11'! initialize_cairo_hint_style_t "typedef enum { " CAIRO_HINT_STYLE_DEFAULT := 0. CAIRO_HINT_STYLE_NONE := 1. CAIRO_HINT_STYLE_SLIGHT := 2. CAIRO_HINT_STYLE_MEDIUM := 3. CAIRO_HINT_STYLE_FULL := 4. "} cairo_hint_style_t; " ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_line_cap_t "typedef enum _cairo_line_cap { " CAIRO_LINE_CAP_BUTT := 0. CAIRO_LINE_CAP_ROUND := 1. CAIRO_LINE_CAP_SQUARE := 2. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_line_join_t " typedef enum _cairo_line_join {" CAIRO_LINE_JOIN_MITER := 0. CAIRO_LINE_JOIN_ROUND := 1. CAIRO_LINE_JOIN_BEVEL := 2. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_operator_t " typedef enum _cairo_operator {" CAIRO_OPERATOR_CLEAR := 0. CAIRO_OPERATOR_SOURCE:= 1. CAIRO_OPERATOR_OVER:= 2. CAIRO_OPERATOR_IN:= 3. CAIRO_OPERATOR_OUT:= 4. CAIRO_OPERATOR_ATOP:= 5. CAIRO_OPERATOR_DEST:= 6. CAIRO_OPERATOR_DEST_OVER:= 7. CAIRO_OPERATOR_DEST_IN:= 8. CAIRO_OPERATOR_DEST_OUT:= 9. CAIRO_OPERATOR_DEST_ATOP:= 10. CAIRO_OPERATOR_XOR:= 11. CAIRO_OPERATOR_ADD:= 12. CAIRO_OPERATOR_SATURATE:= 13. CAIRO_OPERATOR_MULTIPLY:= 14. CAIRO_OPERATOR_SCREEN:= 15. CAIRO_OPERATOR_OVERLAY:= 16. CAIRO_OPERATOR_DARKEN := 17. CAIRO_OPERATOR_LIGHTEN := 18. CAIRO_OPERATOR_COLOR_DODGE := 19. CAIRO_OPERATOR_COLOR_BURN := 20. CAIRO_OPERATOR_HARD_LIGHT := 21. CAIRO_OPERATOR_SOFT_LIGHT := 22. CAIRO_OPERATOR_DIFFERENCE := 23. CAIRO_OPERATOR_EXCLUSION := 24. CAIRO_OPERATOR_HSL_HUE := 25. CAIRO_OPERATOR_HSL_SATURATION := 26. CAIRO_OPERATOR_HSL_COLOR := 27. CAIRO_OPERATOR_HSL_LUMINOSITY := 28. "} cairo_operator_t;"! ! !AthensCairoDefs class methodsFor: 'as yet unclassified'! initialize_cairo_status_t " typedef enum _cairo_status {" CAIRO_STATUS_SUCCESS := 0. CAIRO_STATUS_NO_MEMORY:=1. CAIRO_STATUS_INVALID_RESTORE:=2. CAIRO_STATUS_INVALID_POP_GROUP:=3. CAIRO_STATUS_NO_CURRENT_POINT:=4. CAIRO_STATUS_INVALID_MATRIX:=5. CAIRO_STATUS_INVALID_STATUS:=6. CAIRO_STATUS_NULL_POINTER:=7. CAIRO_STATUS_INVALID_STRING:=8. CAIRO_STATUS_INVALID_PATH_DATA:=9. CAIRO_STATUS_READ_ERROR:= 10. CAIRO_STATUS_WRITE_ERROR:=11. CAIRO_STATUS_SURFACE_FINISHED:=12. CAIRO_STATUS_SURFACE_TYPE_MISMATCH:=13. CAIRO_STATUS_PATTERN_TYPE_MISMATCH:=14. CAIRO_STATUS_INVALID_CONTENT:=15. CAIRO_STATUS_INVALID_FORMAT:=16. CAIRO_STATUS_INVALID_VISUAL:=17. CAIRO_STATUS_FILE_NOT_FOUND:=18. CAIRO_STATUS_INVALID_DASH:=19. CAIRO_STATUS_INVALID_DSC_COMMENT:=20. CAIRO_STATUS_INVALID_INDEX:=21. CAIRO_STATUS_CLIP_NOT_REPRESENTABLE:=22. CAIRO_STATUS_TEMP_FILE_ERROR:=23. CAIRO_STATUS_INVALID_STRIDE:=24. CAIRO_STATUS_FONT_TYPE_MISMATCH:=25. CAIRO_STATUS_USER_FONT_IMMUTABLE:=26. CAIRO_STATUS_USER_FONT_ERROR:=27. CAIRO_STATUS_NEGATIVE_COUNT:=28. CAIRO_STATUS_INVALID_CLUSTERS:=29. CAIRO_STATUS_INVALID_SLANT:=30. CAIRO_STATUS_INVALID_WEIGHT:=31. CAIRO_STATUS_INVALID_SIZE:=32. CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED:=33. CAIRO_STATUS_DEVICE_TYPE_MISMATCH:=34. CAIRO_STATUS_DEVICE_ERROR:=35. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 19:40'! initialize_types cairo_status_t := cairo_font_type_t := cairo_line_join_t := cairo_line_cap_t := cairo_status_t := cairo_font_slant_t := cairo_font_weight_t := cairo_operator_t := #int. cairo_pattern_t := #AthensCairoPatternPaint. cairo_t := #AthensCairoCanvas. cairo_surface_t := #AthensCairoSurface . cairo_text_extents_t := #CairoTextExtents.! ! "Athens-CairoPools"! !AthensCairoCanvas commentStamp: 'IgorStasenko 12/20/2011 15:58' prior: 0! my instances representing a low-level cairo context and mapped to cairo_t * C type! !AthensCairoPaintMode commentStamp: '' prior: 0! I control the paint modes supported by Cairo backend. for the list and description of paint modes supported by Cairo library, see http://cairographics.org/operators/! !AthensCairoSurface commentStamp: '' prior: 0! i am a concrete implementation of Athens surface which using cairo graphics library for rendering. Cairo library, by itself can have multiple surface types. This class uses image surface (a bitmap located in system memory) and maps to cairo_image_surface_t* C type.! !AthensCairoPDFSurface commentStamp: '' prior: 0! i am a concrete implementation of Athens surface which using cairo graphics library for rendering for generating PDF files as output. ! !AthensQuartzSurface commentStamp: '' prior: 0! The Quartz surface is used to render cairo graphics targeting the Apple OS X Quartz rendering system. ! !CairoScaledFont commentStamp: '' prior: 0! my instances map to cairo_scaled_font_t * data type! !CairoFontFace commentStamp: '' prior: 0! I am a private class, used to represent a 'cairo_font_face_t *' data structure of Cairo library. I am not useful for direct use nor providing any functionality. My only purpose is to keep a strong reference to original FT2Face object (so it won't be freed before a corresponding instance of mine will release it). ! !AthensCairoMatrix commentStamp: '' prior: 0! I implement an AthensAffineTransform interface.! !CairoFontExtents commentStamp: '' prior: 0! I represent the cairo_font_extents_t structure type The cairo_font_extents_t structure stores metric information for a font. Values are given in the current user-space coordinate system. Because font metrics are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double ascent; the distance that the font extends above the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements above it. double descent; the distance that the font extends below the baseline. This value is positive for typical fonts that include portions below the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements below it. double height; the recommended vertical distance between baselines when setting consecutive lines of text with the font. This is greater than ascent+descent by a quantity known as the line spacing or external leading. When space is at a premium, most fonts can be set with only a distance of ascent+descent between lines. double max_x_advance; the maximum distance in the X direction that the origin is advanced for any glyph in the font. double max_y_advance; the maximum distance in the Y direction that the origin is advanced for any glyph in the font. This will be zero for normal fonts used for horizontal writing. (The scripts of East Asia are sometimes written vertically.)! !CairoTextExtents commentStamp: '' prior: 0! I represent the cairo_text_extents_t structure type The cairo_text_extents_t structure stores the extents of a single glyph or a string of glyphs in user-space coordinates. Because text extents are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double x_bearing; the horizontal distance from the origin to the leftmost part of the glyphs as drawn. Positive if the glyphs lie entirely to the right of the origin. double y_bearing; the vertical distance from the origin to the topmost part of the glyphs as drawn. Positive only if the glyphs lie completely below the origin; will usually be negative. double width; width of the glyphs as drawn double height; height of the glyphs as drawn double x_advance; distance to advance in the X direction after drawing these glyphs double y_advance; distance to advance in the Y direction after drawing these glyphs. Will typically be zero except for vertical text layout as found in East-Asian languages.! !SQSurfaceDispatch commentStamp: 'IgorStasenko 12/30/2011 12:35' prior: 0! A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; ! !CairoPNGPaint commentStamp: '' prior: 0! I am a surface paint with lazy initialization scheme, that i loading image from .png file the first time i will be used. ! !AthensFontDescription commentStamp: 'FernandoOlivero 1/24/2012 18:30' prior: 0! Creates a new font description from a string representation in the form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", 1)FAMILY-LIST is a comma separated list of families optionally terminated by a comma, 2)STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity. If STYLE-OPTIONS is missing, then all style options will be set to the default values 3)SIZE is a decimal number (size in points) or optionally followed by the unit modifier "px" for absolute size. ! !CairoBackendCache commentStamp: '' prior: 0! I providing a simple [weak]key->value storage used to cache various objects used by Athens for Cairo backend, like fonts/forms etc. The cache is global (there's only a single instance of me used at a time) and cache is visible globally by all entities of Cairo backend. The cached objects is held weakly. The cache is flushed for a new image session.! !TCairoLibrary classTrait methodsFor: 'library path' stamp: 'IgorStasenko 6/10/2012 05:43'! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !TCairoLibrary methodsFor: 'library path' stamp: 'IgorStasenko 12/20/2011 16:52'! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoCanvas commentStamp: 'IgorStasenko 12/20/2011 15:58' prior: 40413630! my instances representing a low-level cairo context and mapped to cairo_t * C type! !AthensCairoCanvas class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 15:45'! asNBExternalType: gen "use handle ivar to hold my instance (cairo_t)" ^ NBExternalObjectType objectClass: self! ! !AthensCairoCanvas class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 16:12'! nbLibraryNameOrHandle ^ AthensCairoSurface nbLibraryNameOrHandle! ! !AthensCairoCanvas class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 16:14'! on: cairoSurface ^ (self primCreate: cairoSurface) surface: cairoSurface! ! !AthensCairoCanvas class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 16:14'! primCreate: cairoSurface ^self nbCall: #( AthensCairoCanvas cairo_create (AthensCairoSurface cairoSurface) )! ! !AthensCairoCanvas methodsFor: 'clipping' stamp: 'IgorStasenko 10/7/2012 23:06'! clipBy: aRectangle during: aBlock | oldClip newClip | oldClip := currentClipRect. newClip := oldClip ifNil: [ aRectangle ] ifNotNil: [ oldClip intersect: aRectangle]. self setPathMatrix; resetClip; setClipRect: newClip. currentClipRect := newClip. [aBlock value] ensure: [ self setPathMatrix; resetClip; setClipRect: oldClip. currentClipRect := oldClip. ]. ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 12/20/2011 15:56'! destroy ^self nbCall: #( void cairo_destroy (self) )! ! !AthensCairoCanvas methodsFor: 'drawing' stamp: 'IgorStasenko 10/11/2012 18:42'! draw "Fill the shape (anObject) using currently selected paint an object should implement double-dispatch to currently selected paint" "set the trasformation matrix" self setPathMatrix. ^ shape paintFillsUsing: paint on: self ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 12/20/2011 16:10'! fill ^ self nbCall: #(void cairo_fill (self)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 19:45'! getCurrentPoint | x y | "since we use pointers to floats we must create a copy of original values to not scratch them" x := 0.0 shallowCopy. y := 0.0 shallowCopy. self primGetCurrentPointX: x Y: y. ^ x @ y ! ! !AthensCairoCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 5/31/2012 01:47'! handle ^ handle value! ! !AthensCairoCanvas methodsFor: 'initialize-release' stamp: 'IgorStasenko 10/11/2012 18:45'! initializeWithSurface: anAthensSurface super initializeWithSurface: anAthensSurface. self paintMode default.! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 17:32'! loadPath: aPath ^ self nbCall: #( void cairo_append_path (self , AthensCairoPath aPath)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 18:19'! moveToX: x Y: y " move command always starts a new contour " ^ self nbCall: #(void cairo_move_to (self, double x, double y ) ) ! ! !AthensCairoCanvas methodsFor: 'library path' stamp: 'IgorStasenko 12/20/2011 16:11'! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoCanvas methodsFor: 'private'! newPath ^ self nbCall: #( void cairo_new_path ( self ) )! ! !AthensCairoCanvas methodsFor: 'accessing'! paintTransform ^ paintTransform ! ! !AthensCairoCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 16:48'! pathTransform ^ pathTransform! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/2/2012 20:55'! primClip ^ self nbCall: #(void cairo_clip (self)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 19:44'! primGetCurrentPointX: x Y: y ^self nbCall: #( void cairo_get_current_point (self, double * x, double * y))! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 3/30/2012 17:59'! primGetSource self nbCall: #( cairo_pattern_t cairo_get_source ( self ) )! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 6/3/2012 04:02'! primPaint "A drawing operator that paints the current source everywhere within the current clip region." ^ self nbCall: #(void cairo_paint (self)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 05:42'! primResetDashes: anOffset " void cairo_set_dash (cairo_t *cr, double *dashes, int num_dashes, double offset);" self nbCall: #(void cairo_set_dash ( self, 0, 0, double anOffset) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 06:23'! primSetLineCap: capStyle ^ self nbCall: #(void cairo_set_line_cap ( self, cairo_line_cap_t capStyle) )! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 06:21'! primSetLineJoin: joinStyle self nbCall: #(void cairo_set_line_join ( self, cairo_line_join_t joinStyle) )! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 06:23'! primSetLineWidth: width self nbCall: #(void cairo_set_line_width ( self, double width) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 12/20/2011 16:05'! rectangleX: x y: y width: aWidth height: aHeight ^ self nbCall: #(void cairo_rectangle (self, double x, double y, double aWidth, double aHeight) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 11:22'! resetClip ^ self nbCall: #(void cairo_reset_clip (self)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 05:55'! resetDash self primResetDashes: 0.0! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/2/2012 19:05'! setAA: antiAlias "cairo_set_antialias () void cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias); Set the antialiasing mode of the rasterizer used for drawing shapes. This value is a hint, and a particular backend may or may not support a particular value. At the current time, no backend supports CAIRO_ANTIALIAS_SUBPIXEL when drawing shapes. Note that this option does not affect text rendering, instead see cairo_font_options_set_antialias(). "! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/2/2012 22:18'! setClipRect: aRectOrNil aRectOrNil ifNil: [ self resetClip ] ifNotNil: [ self newPath; rectangleX: aRectOrNil left y: aRectOrNil top width: aRectOrNil width height: aRectOrNil height; primClip ]! ! !AthensCairoCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 9/1/2012 22:06'! setFont: aFont fontRenderer := aFont glyphRendererOn: surface. ^ fontRenderer! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 22:45'! setFontSize: aSize " void cairo_set_font_size (cairo_t *cr, double size); " ^ self nbCall: #( void cairo_set_font_size (self , double aSize )) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 5/31/2012 01:53'! setPathMatrix ^ self nbCall: #(void cairo_set_matrix (self, AthensCairoMatrix * pathTransform) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 18:43'! setPathMatrix: aMatrix ^ self nbCall: #(void cairo_set_matrix (self, AthensCairoMatrix * aMatrix) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 14:01'! setScaledFont: aFont "Replaces the current font face, font matrix, and font options in the cairo_t with those of the cairo_scaled_font_t. Except for some translation, the current CTM of the cairo_t should be the same as that of the cairo_scaled_font_t, which can be accessed using cairo_scaled_font_get_ctm(). " ^ self nbCall: #( void cairo_set_scaled_font (self , CairoScaledFont aFont)) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 12/20/2011 16:17'! setSourceR: red g: green b: blue a: alpha ^ self nbCall: #( void cairo_set_source_rgba ( self , double red, double green, double blue, double alpha) )! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 13:56'! showText: anUTF8String "A drawing operator that generates the shape from a string of UTF-8 characters, rendered according to the current font_face, font_size (font_matrix), and font_options. " ^ self nbCall: #(void cairo_show_text (self, char * anUTF8String )) ! ! !AthensCairoCanvas methodsFor: 'accessing' stamp: 'IgorStasenko 9/2/2012 19:06'! surface: aCairoSurface "initialize for given surface" surface := aCairoSurface. pathTransform := AthensCairoMatrix new. paintTransform := AthensCairoMatrix new. paintMode := AthensCairoPaintMode new canvas: self. self setAA: CAIRO_ANTIALIAS_SUBPIXEL.! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 19:39'! text: utf8String extents: extentsObj "cairo_text_extents () void cairo_text_extents (cairo_t *cr, const char *utf8, cairo_text_extents_t *extents); " ^ self nbCall: #( void cairo_text_extents (self, char * utf8String, cairo_text_extents_t * extentsObj) ) ! ! !AthensCairoCanvas methodsFor: 'path segments visitor' stamp: 'FernandoOlivero 1/15/2012 14:58'! visitCloseSegment: closeSegment self closePath! ! !AthensCairoCanvas methodsFor: 'path segments visitor' stamp: 'FernandoOlivero 2/14/2012 08:16'! visitCubicSegment: anAthensCubicSegment | destination controlPoint controlPoint2 | destination := anAthensCubicSegment to. controlPoint := anAthensCubicSegment via1. controlPoint2 := anAthensCubicSegment via2. self curveToX: destination x Y: destination y viaX: controlPoint x Y: controlPoint y andX: controlPoint2 x Y: controlPoint2 y ! ! !AthensCairoCanvas methodsFor: 'path segments visitor' stamp: 'IgorStasenko 12/20/2011 18:49'! visitLineSegment: line ^ self lineToX: line endPoint x Y: line endPoint y! ! !AthensCairoCanvas methodsFor: 'path segments visitor' stamp: 'IgorStasenko 12/20/2011 18:46'! visitMoveSegment: mov ^ self moveToX: mov endPoint x Y: mov endPoint y! ! !AthensCairoCanvas methodsFor: 'path segments visitor' stamp: 'FernandoOlivero 2/14/2012 08:17'! visitQuadSegment: anAthensCubicSegment | destination controlPoint | destination := anAthensCubicSegment to. controlPoint := anAthensCubicSegment via. self curveToX: destination x Y: destination y viaX: controlPoint x Y: controlPoint y ! ! !AthensCairoPaintMode commentStamp: '' prior: 40413775! I control the paint modes supported by Cairo backend. for the list and description of paint modes supported by Cairo library, see http://cairographics.org/operators/! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:12'! add ^ self setOperator: CAIRO_OPERATOR_ADD! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:11'! atop ^ self setOperator: CAIRO_OPERATOR_ATOP! ! !AthensCairoPaintMode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 17:18'! availableModes ^ #( clear source over in out atop dest destOver destIn destOut destAtop xor add saturate multiply screen overlay darken lighten colorDodge colorBurn hardLight softLight difference exclusion hslHue hslSaturation hslColor hslLuminosity )! ! !AthensCairoPaintMode methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/1/2012 15:32'! canvas: aCanvas canvas := aCanvas! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:00'! clear "Set 'clear' drawing mode. Drawing under this mode will clear the surface under the shape boundaries" ^ self setOperator: CAIRO_OPERATOR_CLEAR! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:14'! colorBurn ^ self setOperator: CAIRO_OPERATOR_COLOR_BURN! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:14'! colorDodge ^ self setOperator: CAIRO_OPERATOR_COLOR_DODGE! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:13'! darken ^ self setOperator: CAIRO_OPERATOR_DARKEN! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:01'! dest "Set 'dest' drawing mode. Drawing under this mode will ignore the source, as if nothing drawn" ^ self setOperator: CAIRO_OPERATOR_DEST! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:12'! destAtop ^ self setOperator: CAIRO_OPERATOR_DEST_ATOP! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:12'! destIn ^ self setOperator: CAIRO_OPERATOR_DEST_IN! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:12'! destOut ^ self setOperator: CAIRO_OPERATOR_DEST_OUT! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:11'! destOver ^ self setOperator: CAIRO_OPERATOR_DEST_OVER! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:15'! difference ^ self setOperator: CAIRO_OPERATOR_DIFFERENCE! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:15'! exclusion ^ self setOperator: CAIRO_OPERATOR_EXCLUSION! ! !AthensCairoPaintMode methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 15:40'! getOperator ^ self nbCall: #( cairo_operator_t cairo_get_operator (AthensCairoCanvas canvas) ) ! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:14'! hardLight ^ self setOperator: CAIRO_OPERATOR_HARD_LIGHT! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:15'! hslColor ^ self setOperator: CAIRO_OPERATOR_HSL_COLOR! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:15'! hslHue ^ self setOperator: CAIRO_OPERATOR_HSL_HUE! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:16'! hslLuminosity ^ self setOperator: CAIRO_OPERATOR_HSL_LUMINOSITY! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:15'! hslSaturation ^ self setOperator: CAIRO_OPERATOR_HSL_SATURATION! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:11'! in ^ self setOperator: CAIRO_OPERATOR_IN! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:14'! lighten ^ self setOperator: CAIRO_OPERATOR_LIGHTEN! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:13'! multiply ^ self setOperator: CAIRO_OPERATOR_MULTIPLY! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:11'! out ^ self setOperator: CAIRO_OPERATOR_OUT! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:01'! over "Set 'over' drawing mode. This is default paint mode. Drawing under this mode will blend source with destination color using source alpha component" ^ self setOperator: CAIRO_OPERATOR_OVER! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:13'! overlay ^ self setOperator: CAIRO_OPERATOR_OVERLAY! ! !AthensCairoPaintMode methodsFor: 'convenience' stamp: 'IgorStasenko 9/1/2012 15:36'! restoreAfter: aBlock | op | op := self getOperator. aBlock ensure: [ self setOperator: op ]! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:13'! saturate ^ self setOperator: CAIRO_OPERATOR_SATURATE! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:13'! screen ^ self setOperator: CAIRO_OPERATOR_SCREEN! ! !AthensCairoPaintMode methodsFor: 'private' stamp: 'IgorStasenko 9/1/2012 15:37'! setOperator: aCairoOperatorT ^ self nbCall: #(void cairo_set_operator (AthensCairoCanvas canvas, cairo_operator_t aCairoOperatorT) ) ! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:14'! softLight ^ self setOperator: CAIRO_OPERATOR_SOFT_LIGHT! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 16:01'! source "Set 'source' drawing mode. Drawing under this mode will replace the content with incoming source under the shape boundaries" ^ self setOperator: CAIRO_OPERATOR_SOURCE! ! !AthensCairoPaintMode methodsFor: 'modes' stamp: 'IgorStasenko 9/1/2012 17:12'! xor ^ self setOperator: CAIRO_OPERATOR_XOR! ! !AthensCairoSurface commentStamp: '' prior: 40414002! i am a concrete implementation of Athens surface which using cairo graphics library for rendering. Cairo library, by itself can have multiple surface types. This class uses image surface (a bitmap located in system memory) and maps to cairo_image_surface_t* C type.! !AthensCairoPDFSurface commentStamp: '' prior: 40414332! i am a concrete implementation of Athens surface which using cairo graphics library for rendering for generating PDF files as output. ! !AthensCairoPDFSurface class methodsFor: 'private' stamp: 'IgorStasenko 5/4/2012 18:12'! createPDF: fileName width: width_in_points height: height_in_points ^self nbCall: #(AthensCairoPDFSurface cairo_pdf_surface_create (String fileName, double width_in_points, double height_in_points) ) ! ! !AthensCairoPDFSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:13'! extent: anExtent fileName: fileName ^ (self createPDF: fileName width: anExtent x height: anExtent y) initialize! ! !AthensCairoPDFSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:34'! finalizeResourceData: handle self destroySurfaceHandle: handle. ! ! !AthensCairoPDFSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:14'! registerSurface: surface "do not register my instances with SurfacePlugin"! ! !AthensCairoPDFSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:22'! newCanvas ^ self primCreateCanvas surface: self! ! !AthensCairoPDFSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:15'! resourceData ^ handle value ! ! !AthensCairoPDFSurface methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2012 18:29'! showPage ^self nbCall: #( void cairo_surface_show_page (self) )! ! !AthensCairoSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 14:49'! asNBExternalType: gen "use handle ivar to hold my instance (cairo_surface_t)" ^ NBExternalObjectType objectClass: self! ! !AthensCairoSurface class methodsFor: 'session management'! checkSession uniqueSession == NativeBoost uniqueSessionObject ifFalse: [ self initializeForNewSession ].! ! !AthensCairoSurface class methodsFor: 'instance creation' stamp: 'IgorStasenko 4/12/2013 09:05'! createFromFile: aFileName ifFailed: aBlock "Right now, this protocol is Cairo backend only. " | surface cstring | cstring := aFileName , (Character value: 0) asString. surface := self primCreateFromFile: cstring. surface isSuccess not ifTrue: [ self destroySurfaceHandle: surface handle value. ^ aBlock cull: surface status ] ifFalse: [ surface initialize ]. ^ surface .! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! createGetSurfaceFormatFn " int getSurfaceFormat(int handle, int* width, int* height, int* depth, int* isMSB); Return general information about the OS drawing surface. Return true if successful, false otherwise. The returned values describe the basic properties such as width, height, depth and LSB vs. MSB pixels. " | fn | fn := NBNativeFunctionGen cdecl: #( int (int handle, int* width, int* height, int* depth, int* isMSB) ) emit: [:gen :proxy :asm | | callInfo fnPtr | " the handle is a handle to cairo image surface (cairo_surface_t *) " "*width = cairo_image_surface_get_width ( handle )" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_width') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment; mov: (gen arg: #width) to: asm EDX; mov: asm EAX to: asm EDX ptr. "*height = cairo_image_surface_get_height ( handle )" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_height') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment; mov: (gen arg: #height) to: asm EDX; "work around the bitblt bug which tries to access past the buffer size designated by width*height*depth " dec: asm EAX; mov: asm EAX to: asm EDX ptr. "*depth = 32" asm mov: (gen arg: #depth) to: asm EAX; mov: 32 to: asm EAX ptr. " *isMSB = false " asm mov: (gen arg: #isMSB) to: asm EAX; mov: 0 to: asm EAX ptr; "return true" mov: 1 to: asm EAX ]. fn install. ^ fn address! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! createLockSurfaceFn " int lockSurface(int handle, int *pitch, int x, int y, int w, int h); Lock the bits of the surface. Return a pointer to the actual surface bits, or NULL on failure. If successful, store the pitch of the surface (e.g., the bytes per scan line). For equal source/dest handles only one locking operation is performed. This is to prevent locking of overlapping areas which does not work with certain APIs (e.g., DirectDraw prevents locking of overlapping areas). A special case for non-overlapping but equal source/dest handle would be possible but we would have to transfer this information over to unlockSurfaces somehow (currently, only one unlock operation is performed for equal source and dest handles). Also, this would require a change in the notion of ioLockSurface() which is right now interpreted as a hint and not as a requirement to lock only the specific portion of the surface. The arguments in ioLockSurface() provide the implementation with an explicit hint what area is affected. It can be very useful to know the max. affected area beforehand if getting the bits requires expensive copy operations (e.g., like a roundtrip to the X server or a glReadPixel op). However, the returned pointer *MUST* point to the virtual origin of the surface and not to the beginning of the rectangle. The promise made by BitBlt is to never access data outside the given rectangle (aligned to 4byte boundaries!!) so it is okay to return a pointer to the virtual origin that is actually outside the valid memory area. The area provided in ioLockSurface() is already clipped (e.g., it will always be inside the source and dest boundingBox) but it is not aligned to word boundaries yet. It is up to the support code to compute accurate alignment if necessary. " | fn | fn := NBNativeFunctionGen cdecl: #(int (int handle, int *pitch, int x, int y, int w, int h) ) emit: [:gen :proxy :asm | | callInfo fnPtr | " the handle is a handle to cairo image surface (cairo_surface_t *) " "*pitch = cairo_image_surface_get_stride ( handle )" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_stride') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment; mov: (gen arg: #pitch) to: asm EDX; mov: asm EAX to: asm EDX ptr. " return cairo_image_surface_get_data ()" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_data') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment ]. fn install. ^ fn address! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! createShowSurfaceFn " int showSurface(int handle, int x, int y, int w, int h); Display the contents of the surface on the actual screen. If ioShowSurface() is called the surface in question represents a Squeak DisplayScreen. " | fn | fn := NBNativeFunctionGen cdecl: #(int (int handle, int x, int y, int w, int h)) emit: [:gen :proxy :asm | "do nothing" asm mov: 1 to: asm EAX ]. fn install. ^ fn address! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! createUnlockSurfaceFn " int unlockSurface(int handle, int x, int y, int w, int h); Unlock the bits of a (possibly modified) surface after BitBlt completed. The return value is ignored. The arguments provided specify the dirty region of the surface. If the surface is unmodified all arguments are set to zero. " | fn | fn := NBNativeFunctionGen cdecl: #(int (int handle, int x, int y, int w, int h) ) emit: [:gen :proxy :asm | "do nothing" ]. fn install. ^ fn address! ! !AthensCairoSurface class methodsFor: 'private' stamp: 'IgorStasenko 5/31/2012 01:50'! destroyContextHandle: aHandle ^self nbCall: #( void cairo_destroy (size_t aHandle) )! ! !AthensCairoSurface class methodsFor: 'private'! destroySurfaceHandle: handle ^self nbCall: #( void cairo_surface_destroy ( ulong handle ) ) ! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! dispatchStruct self checkSession. ^ dispatchStruct! ! !AthensCairoSurface class methodsFor: 'instance creation' stamp: 'IgorStasenko 3/7/2012 15:32'! extent: anExtent ^ self extent: anExtent format: CAIRO_FORMAT_ARGB32 ! ! !AthensCairoSurface class methodsFor: 'instance creation' stamp: 'IgorStasenko 3/7/2012 15:32'! extent: anExtent format: aFormat ^ ( self primImage: aFormat width: anExtent x height: anExtent y ) initialize ! ! !AthensCairoSurface class methodsFor: 'finalize resources' stamp: 'IgorStasenko 5/31/2012 01:49'! finalizeResourceData: data | handle id contextHandle | handle := data first. id := data second. contextHandle := data third. (self findSurface: id) = handle ifFalse: [ self error: 'surface is not registered with surface plugin'. ]. self unregisterSurfaceWithId: id. self destroyContextHandle: contextHandle. self destroySurfaceHandle: handle. ! ! !AthensCairoSurface class methodsFor: 'private'! findSurface: surfaceId | buf | buf := ByteArray new: 4. "sizeof(int)" (self ioFindSurface: surfaceId handle: buf) ifTrue: [ ^ buf nbUlongAt: 1 ]. ^ nil. ! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks'! fnPtr: anFnName ^ NativeBoost loadSymbol: anFnName fromModule: self nbLibraryNameOrHandle. ! ! !AthensCairoSurface class methodsFor: 'instance creation' stamp: 'IgorStasenko 10/11/2012 18:41'! fromForm: aForm | form surface newBits | form := aForm unhibernate; asFormOfDepth: 32. surface := self extent: aForm extent. "we should convert form bits with premultiplied alpha" newBits := form bits collect:[:pixel | | alpha r g b| alpha := (pixel >> 24) / 255. r := ( (pixel bitAnd: 255) * alpha ) asInteger. g := ( (pixel >>8 bitAnd: 255) * alpha ) asInteger. b := ( (pixel >>16 bitAnd: 255) * alpha ) asInteger. (pixel bitAnd: 16rFF000000) + (b<<16) + (g<<8) + r ]. NativeBoost memCopy: newBits to: surface getDataPtr size: (form width * form height *4). surface markDirty. ^ surface.! ! !AthensCairoSurface class methodsFor: 'session management'! initializeForNewSession | ptr | uniqueSession := NativeBoost uniqueSessionObject. "create a dispatch structure" dispatchStruct := dispatch := SQSurfaceDispatch new. dispatch getSurfaceFormatFn: self createGetSurfaceFormatFn; lockSurfaceFn: self createLockSurfaceFn; unlockSurfaceFn: self createUnlockSurfaceFn; showSurfaceFn: self createShowSurfaceFn. "now we should place this structure to external memory" ptr := NativeBoost allocate: (SQSurfaceDispatch instanceSize). NativeBoost memCopy: dispatch to: ptr size: (SQSurfaceDispatch instanceSize). dispatch := ptr.! ! !AthensCairoSurface class methodsFor: 'private'! ioFindSurface: id dispatch: dispPtr handle: handlePtr " int ioFindSurface(int surfaceID, sqSurfaceDispatch *fn, int *surfaceHandle); Find the surface with the given ID, and, optionally, the given set of surface functions. The registered handle is returned in surfaceHandle. Return true if successful (e.g., the surface has been found), false otherwise. " self nbCall: #( bool ioFindSurface(int id, void * dispPtr, int *handlePtr) ) module: #SurfacePlugin! ! !AthensCairoSurface class methodsFor: 'private'! ioFindSurface: id handle: handlePtr " int ioFindSurface(int surfaceID, sqSurfaceDispatch *fn, int *surfaceHandle); Find the surface with the given ID, and, optionally, the given set of surface functions. The registered handle is returned in surfaceHandle. Return true if successful (e.g., the surface has been found), false otherwise. " self nbCall: #( bool ioFindSurface(int id, 0 , int *handlePtr) ) module: #SurfacePlugin! ! !AthensCairoSurface class methodsFor: 'private'! ioRegisterSurface: aCairoSurfaceHandle dispatch: sqSurfaceDispatchPtr surfaceId: idHolder " int ioRegisterSurface(int surfaceHandle, sqSurfaceDispatch *fn, int *surfaceID); Register a new surface with the given handle and the set of surface functions. The new ID is returned in surfaceID. Returns true if successful, false otherwise. " self nbCall: #( bool ioRegisterSurface(ulong aCairoSurfaceHandle, void * sqSurfaceDispatchPtr, int *idHolder) ) module: #SurfacePlugin! ! !AthensCairoSurface class methodsFor: 'private'! ioUnregisterSurface: aCairoSurfaceId " ioUnregisterSurface: Unregister the surface with the given id. Returns true if successful, false otherwise. " self nbCall: #( int ioUnregisterSurface(ulong aCairoSurfaceId) ) module: #SurfacePlugin! ! !AthensCairoSurface class methodsFor: 'private' stamp: 'FernandoOlivero 3/29/2012 12:04'! primCreateFromFile: aFileName ^self nbCall: #(AthensCairoSurface cairo_image_surface_create_from_png (char* aFileName)) ! ! !AthensCairoSurface class methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 13:02'! primImage: aFormat width: aWidth height: aHeight ^self nbCall: #(AthensCairoSurface cairo_image_surface_create (int aFormat, int aWidth, int aHeight) ) ! ! !AthensCairoSurface class methodsFor: 'private' stamp: 'IgorStasenko 12/20/2011 15:01'! primWidth: aWidth height: aHeight ^self nbCall: #( AthensCairoSurface cairo_image_surface_create ( CAIRO_FORMAT_ARGB32, int aWidth, int aHeight) )! ! !AthensCairoSurface class methodsFor: 'private' stamp: 'IgorStasenko 10/12/2012 03:37'! registerSurface: anAthensCairoSurface "register the cairo surface with surface plugin, so, it can be used directly by bitblt operations. Answer an id and unique session object " | id | self checkSession. id := ByteArray new: 8 "we need 4, but put some more (NBExternalType sizeOf: #int)". (self ioRegisterSurface: anAthensCairoSurface handle value dispatch: dispatch surfaceId: id) ifFalse: [ self error: 'Unable to register surface with SurfacePlugin']. id := id nbLongAt: 1. ^ id! ! !AthensCairoSurface class methodsFor: 'private'! testGetSurfaceFormat: handle width: wBuf height: hBuf depth: depthBuf isMSB: isMSBBuf NBFFICallout cdecl: #( int (ulong handle, int* wBuf, int* hBuf, int* depthBuf, int* isMSBBuf) ) emitCall: [:gen :proxy :asm | asm mov: (self dispatchStruct getSurfaceFormatFn) asUImm32 to: asm EAX; call: asm EAX ] ! ! !AthensCairoSurface class methodsFor: 'private'! testLockSurface: handle pitch: pBuf x: x y: y w: w h: h NBFFICallout cdecl: #( void * (int handle, int *pBuf, int x, int y, int w, int h) ) emitCall: [:gen :proxy :asm | asm mov: (self dispatchStruct lockSurfaceFn) asUImm32 to: asm EAX; call: asm EAX ] ! ! !AthensCairoSurface class methodsFor: 'private'! testSurfacePluginCallbacks | surface wb hb db mb ptr | surface := AthensCairoSurface extent: 800@800. wb := ByteArray new: 4. hb := ByteArray new: 4. db := ByteArray new: 4. mb := ByteArray new: 4. self testGetSurfaceFormat: surface handle width: wb height: hb depth: db isMSB: mb. self assert: (surface width = (wb nbUlongAt: 1)). self assert: (surface height = (hb nbUlongAt: 1)). self assert: (32 = (db nbUlongAt: 1)). self assert: (0 = (mb nbUlongAt: 1)). ptr := self testLockSurface: surface handle pitch: wb x: 0 y: 0 w: 100 h: 100. self assert: (wb nbUlongAt: 1) = surface stride. self assert: ptr = surface getDataPtr! ! !AthensCairoSurface class methodsFor: 'private'! unregisterSurfaceWithId: anAthensCairoSurfaceId self ioUnregisterSurface: anAthensCairoSurfaceId! ! !AthensCairoSurface class methodsFor: 'instance creation' stamp: 'IgorStasenko 12/20/2011 15:02'! width: aWidth height: aHeight ^ (self primWidth: aWidth height: aHeight) initialize! ! !AthensCairoSurface methodsFor: 'converting' stamp: 'FernandoOlivero 4/19/2012 14:03'! asAthensPaintOn: aCanvas ^ AthensCairoPatternSurfacePaint createForSurface: self. ! ! !AthensCairoSurface methodsFor: 'converting' stamp: 'IgorStasenko 4/26/2013 15:20'! asForm "create a form and copy an image data there" self checkSession. self flush. ^ Form extent: (self width@self height) depth: 32 bits: id! ! !AthensCairoSurface methodsFor: 'drawing'! attemptToRecurseDrawing ^ self ! ! !AthensCairoSurface methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:24'! cacheAt: anObject ifAbsentPut: aBlock "Answer an object from surface's cache identified by anObject, if there is no cached object under such identifier, evaluate a block and put it into cache. Then answer the result of evaluation. A surface using identity comparison for object identifiers. " ^ CairoBackendCache soleInstance at: anObject ifAbsentPut: aBlock! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 4/26/2013 15:21'! checkSession session == Smalltalk session ifFalse: [ self error: 'Attempt to use invalid external resource (left from previous session)' ]! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 10/9/2012 19:22'! clear ^ self clear: Color transparent! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 10/11/2012 18:05'! clear: clearPaint currentCanvas pathTransform restoreAfter: [ currentCanvas pathTransform loadIdentity. currentCanvas paintMode restoreAfter: [ currentCanvas paintMode source. currentCanvas setPaint: clearPaint; drawShape: (0@0 extent: self extent). ]]. ! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'IgorStasenko 8/31/2012 00:47'! createFormPaint: aForm "here we should convert form to cairo surface" | form32 newSurface paint form2 | newSurface := self class fromForm: aForm. ^ newSurface asAthensPaintOn: context ! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/12/2013 10:05'! createLinearGradient: aColorRamp origin: aStart corner: aStop self deprecated: 'Use #createLinearGradient:start:stop: instead' on: '12 April 2013' in: 'ConfigurationOfAthens 2.0'. ^self createLinearGradient: aColorRamp start: aStart stop: aStop! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/12/2013 10:01'! createLinearGradient: aColorRamp start: aStartPoint stop: aStopPoint ^ AthensCairoGradientPaint createLinearGradient: aColorRamp start: aStartPoint stop: aStopPoint ! ! !AthensCairoSurface methodsFor: 'creation' stamp: 'FernandoOlivero 3/26/2012 18:47'! createPath: aPathCreatingBlock ^ builder createPath: aPathCreatingBlock ! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 12:25'! createRadialGradient: colorRamp center: aCenter radius: aRadius focalPoint: fp ^AthensCairoGradientPaint radialBetween: fp extending: 0 and: aCenter extending: aRadius withColorRamp: colorRamp! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'FernandoOlivero 1/13/2012 20:12'! createSolidColorPaint: aColor ^ AthensCairoSolidPaint new color: aColor! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/27/2012 11:22'! createStrokePaintFor: aPaint ^ AthensCairoStrokePaint new fillPaint: aPaint! ! !AthensCairoSurface methodsFor: 'drawing' stamp: 'IgorStasenko 4/26/2013 15:19'! drawDuring: aBlock "You may draw on receiver only when inside a block and only using provided canvas object. This ensures releasing system resources used after finishing drawing" self checkSession. currentCanvas ifNotNil: [ self attemptToRecurseDrawing ]. [ currentCanvas := context. self privSetDefaults. aBlock value: currentCanvas. self flush. ] ensure: [ currentCanvas := nil. ].! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 15:18'! extent ^ self width @ self height! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 5/4/2012 18:32'! flush ^self nbCall: #( void cairo_surface_flush (self) )! ! !AthensCairoSurface methodsFor: 'caching' stamp: 'IgorStasenko 10/12/2012 03:54'! flushCacheAt: anObject "Flush (delete) any cached value(s) identified by given object, anObject. Do nothing if there's no cached values stored for given object. Answer receiver. A surface using identity comparison for object identifiers. " CairoBackendCache soleInstance removeAt: anObject! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 15:19'! getDataPtr "get a pointer to surface bitmap data" ^self nbCall: #( void* cairo_image_surface_get_data ( self ) ) ! ! !AthensCairoSurface methodsFor: 'text support' stamp: 'IgorStasenko 9/2/2012 00:50'! getFreetypeFontRendererFor: aFreetypeFont "answer the same instance, just reset it's font and advance" ^ ftFontRenderer font: aFreetypeFont; advance: 0@0; yourself! ! !AthensCairoSurface methodsFor: 'accessing'! handle ^ handle value! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 15:12'! height ^self nbCall: #( int cairo_image_surface_get_height ( self ) ) ! ! !AthensCairoSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/26/2013 15:19'! initialize "the handle should be set already since we using an NB callout to create an instance" handle value = 0 ifTrue: [ self error: 'Error creating new surface' ]. session := Smalltalk session. id := self class registerSurface: self. context := self newCanvas. builder := AthensCairoPathBuilder new. builder context: context. ftFontRenderer := CairoFreetypeFontRenderer new canvas: context. NBExternalResourceManager addResource: self.! ! !AthensCairoSurface methodsFor: 'testing' stamp: 'FernandoOlivero 1/12/2012 11:59'! isSuccess ^ self status = CAIRO_STATUS_SUCCESS! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 8/31/2012 00:37'! markDirty ^self nbCall: #( void cairo_surface_mark_dirty (self) )! ! !AthensCairoSurface methodsFor: 'nb helper' stamp: 'IgorStasenko 12/16/2011 11:38'! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 10/17/2012 17:15'! newCanvas "Answer a preinitialized instance of AthensCanvas. Private to receiver and its subclasses, override seldom" ^ self primCreateCanvas surface: self ! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 10/17/2012 17:15'! primCreateCanvas ^self nbCall: #( AthensCairoCanvas cairo_create (self) )! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 06:22'! privSetDefaults "reset matrices" currentCanvas pathTransform loadIdentity. currentCanvas paintTransform loadIdentity. currentCanvas resetDash. currentCanvas paintMode over. currentCanvas primSetLineJoin: CAIRO_LINE_JOIN_MITER. currentCanvas primSetLineCap: CAIRO_LINE_CAP_BUTT. currentCanvas primSetLineWidth: 1.0. ! ! !AthensCairoSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 5/31/2012 01:48'! resourceData ^ { handle value. id. context handle }! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'FernandoOlivero 1/12/2012 11:55'! status ^ self nbCall: #(int cairo_surface_status (self) ) ! ! !AthensCairoSurface methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 12:00'! statusToString: aCairoStatusT ^ self nbCall: #(String cairo_status_to_string (cairo_status_t aCairoStatusT))! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 15:10'! stride ^self nbCall: #( int cairo_image_surface_get_stride ( self ) ) ! ! !AthensCairoSurface methodsFor: 'accessing' stamp: 'IgorStasenko 12/20/2011 15:12'! width ^self nbCall: #( int cairo_image_surface_get_width ( self ) ) ! ! !AthensCairoSurface methodsFor: 'converting' stamp: 'FernandoOlivero 1/12/2012 12:54'! writeToPng: aFileName self nbCall: #(void cairo_surface_write_to_png (self, String aFileName) ) ! ! !AthensQuartzSurface commentStamp: '' prior: 40414594! The Quartz surface is used to render cairo graphics targeting the Apple OS X Quartz rendering system. ! !AthensQuartzSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2012 17:36'! finalizeResourceData: data | handle contextHandle | handle := data first. " id := data second. - id is not used " contextHandle := data third. self destroyContextHandle: contextHandle. self destroySurfaceHandle: handle. ! ! !AthensQuartzSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2012 17:02'! primImage: aFormat width: aWidth height: aHeight "Creates a Quartz surface backed by a CGBitmap. The surface is created using the Device RGB (or Device Gray, for A8) color space. All Cairo operations, including those that require software rendering, will succeed on this surface. " ^self nbCall: #(AthensQuartzSurface cairo_quartz_surface_create (int aFormat, int aWidth, int aHeight) ) ! ! !AthensQuartzSurface class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/17/2012 17:33'! registerSurface: quartzSurface "we cannot use SurfacePlugin for quartz surfaces" ^ nil ! ! !AthensCairoPath class methodsFor: 'instance creation'! finalizeResourceData: aHandle self primDestroyPath: aHandle value ! ! !AthensCairoPath class methodsFor: 'instance creation'! primDestroyPath: aHandle ^ self nbCall: #(void cairo_path_destroy ( ulong aHandle )) ! ! !AthensCairoPath methodsFor: 'converting' stamp: 'IgorStasenko 5/6/2013 05:44'! asAthensShapeOn: anAthensCanvas ^ self! ! !AthensCairoPath methodsFor: 'initialize-release' stamp: 'FernandoOlivero 3/28/2012 19:10'! initialize handle value = 0 ifTrue: [ self error: 'Error creating new path' ]. NBExternalResourceManager addResource: self data: handle! ! !AthensCairoPath methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/8/2012 17:29'! loadInto: context ^ self nbCall: #( void cairo_append_path (AthensCairoCanvas context, self )) ! ! !AthensCairoPath methodsFor: 'drawing' stamp: 'IgorStasenko 12/20/2011 18:33'! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint fillPath: self on: anAthensCanvas! ! !AthensCairoPath methodsFor: 'instance creation' stamp: 'FernandoOlivero 3/28/2012 19:12'! primDestroyPath: aHandle ^ self nbCall: #(void cairo_path_destroy ( ulong aHandle )) ! ! !AthensCairoGradientPaint class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:25'! createLinearGradient: aColorRamp start: aStartPoint stop: aStopPoint | paint | paint := self primCreateLinearX0: aStartPoint x asFloat y0: aStartPoint y asFloat x1: aStopPoint x asFloat y1: aStopPoint y asFloat. "note, we do #initialize here because instance was created by primitive" paint initialize; populateRamp: aColorRamp. ^ paint ! ! !AthensCairoGradientPaint class methodsFor: 'primitives' stamp: 'IgorStasenko 4/12/2013 10:23'! primCreateLinearX0: x0 y0: y0 x1: x1 y1: y1 ^self nbCall: #(AthensCairoGradientPaint cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ) ! ! !AthensCairoGradientPaint class methodsFor: 'primitives' stamp: 'FernandoOlivero 4/19/2012 13:55'! primCreateRadialXo: xo yo: yo radiuso: radiuso x1: x1 y1: y1 radius1: radius1 ^self nbCall: #(AthensCairoGradientPaint cairo_pattern_create_radial ( double xo, double yo, double radiuso, double x1, double y1, double radius1 ) ) ! ! !AthensCairoGradientPaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:56'! radialBetween: origin extending: innerRadius and: outerOrigin extending: outerRadius withColorRamp: colorRamp | paint | paint := self primCreateRadialXo: origin x yo: origin y radiuso: innerRadius x1: outerOrigin x y1: outerOrigin y radius1: outerRadius. paint initializeRadialBetween: origin extending: innerRadius and: outerOrigin extending: outerRadius withColorRamp: colorRamp. ^ paint.! ! !AthensCairoGradientPaint methodsFor: 'private' stamp: 'IgorStasenko 4/12/2013 10:19'! addColorStopAt: anOffset colored: aColor self primAddColorStopOffset: anOffset R: aColor red G: aColor green B: aColor blue A: aColor alpha ! ! !AthensCairoGradientPaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 14:13'! defaultExtend "The default extend mode is CAIRO_EXTEND_NONE for surface patterns and CAIRO_EXTEND_PAD for gradient patterns. " ^ CAIRO_EXTEND_PAD! ! !AthensCairoGradientPaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 13:56'! initializeRadialBetween: origin extending: innerRadius and: outerOrigin extending: outerRadius withColorRamp: aRamp self initialize. aRamp do:[:each| self addColorStopAt: each key colored: each value ] ! ! !AthensCairoGradientPaint methodsFor: 'private' stamp: 'IgorStasenko 4/12/2013 10:17'! populateRamp: aRamp aRamp do: [ :each | self addColorStopAt: each key colored: each value ] ! ! !AthensCairoGradientPaint methodsFor: 'primitives' stamp: 'IgorStasenko 4/12/2013 10:21'! primAddColorStopOffset: offset R: red G: green B: blue A: alpha ^ self nbCall:#( void cairo_pattern_add_color_stop_rgba ( cairo_pattern_t self, double offset, double red, double green, double blue, double alpha )) ! ! !AthensCairoPatternColorPaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:54'! createForColor: aColor | pat | pat := self primCreateForR: aColor red G: aColor green B: aColor blue A: aColor alpha . pat initializeColor: aColor. ^ pat! ! !AthensCairoPatternColorPaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:55'! primCreateForR: r G: g B: b A: a " Creates a new cairo_pattern_t corresponding to a translucent color. " ^self nbCall: #(AthensCairoPatternColorPaint cairo_pattern_create_rgba( double r, double g, double b, double a ) ) ! ! !AthensCairoPatternColorPaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 13:54'! initializeColor: aColor self initialize. color := aColor .! ! !AthensCairoPatternPaint class methodsFor: 'private'! finalizeResourceData: handle self primDestroyPattern: handle value ! ! !AthensCairoPatternPaint class methodsFor: 'private'! primDestroyPattern: aHandle self nbCall: #(void cairo_pattern_destroy (ulong aHandle) ) ! ! !AthensCairoPatternPaint methodsFor: 'converting'! asAthensPaintOn: anAthensCanvas ^ self! ! !AthensCairoPatternPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:30'! asStrokePaintOn: aCanvas ^ aCanvas surface createStrokePaintFor: self! ! !AthensCairoPatternPaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 14:14'! defaultExtend "The default extend mode is CAIRO_EXTEND_NONE for surface patterns and CAIRO_EXTEND_PAD for gradient patterns. " ^ CAIRO_EXTEND_NONE! ! !AthensCairoPatternPaint methodsFor: 'drawing'! fillOn: aCanvas ^ self nbCall: #(void cairo_fill (AthensCairoCanvas aCanvas )) ! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 4/3/2013 03:49'! fillPath: path on: anAthensCanvas | | anAthensCanvas newPath; loadPath: path. self setMatrix: anAthensCanvas paintTransform inverted. self loadOn: anAthensCanvas. self fillOn: anAthensCanvas! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 4/3/2013 03:48'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | | anAthensCanvas rectangleX: aRect left y: aRect top width: aRect width height: aRect height. " transform := AthensCairoMatrix new. transform loadIdentity ; translateBy: aRect origin x negated @aRect origin y negated ; multiplyBy: anAthensCanvas paintTransform . " self setMatrix: anAthensCanvas paintTransform inverted. self loadOn: anAthensCanvas . self fillOn: anAthensCanvas. ! ! !AthensCairoPatternPaint methodsFor: 'initialize-release'! initialize handle value = 0 ifTrue: [ self error: 'Error creating new paint' ]. "register to be finalized" NBExternalResourceManager addResource: self data: handle.! ! !AthensCairoPatternPaint methodsFor: 'testing' stamp: 'IgorStasenko 3/28/2012 18:50'! isPatternTypeMismatch ^ self status = CAIRO_STATUS_PATTERN_TYPE_MISMATCH.! ! !AthensCairoPatternPaint methodsFor: 'testing'! isSuccess ^ self status = CAIRO_STATUS_SUCCESS! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'FernandoOlivero 4/19/2012 15:51'! loadOn: anAthensCanvas " Note: The pattern's transformation matrix will be locked to the user space in effect at the time of cairo_set_source(). This means that further modifications of the current transformation matrix will not affect the source pattern. See cairo_pattern_set_matrix(). " self isSuccess ifTrue:[ self primSetSourceOn: anAthensCanvas.] ifFalse:[ anAthensCanvas setSourceR: 1.0 g: 0.0 b: 0.0 a: 1.0]. ! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'FernandoOlivero 4/19/2012 15:01'! maskOn: anAthensCanvas " A drawing operator that paints the current source using the alpha channel of pattern as a mask. (Opaque areas of pattern are painted with the source, transparent areas are not painted.) " ^ self nbCall: #(void cairo_mask(cairo_t anAthensCanvas, self))! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'IgorStasenko 8/31/2012 01:12'! noRepeat self primSetExtend: CAIRO_EXTEND_NONE. ! ! !AthensCairoPatternPaint methodsFor: 'primitives' stamp: 'IgorStasenko 3/30/2012 18:13'! primSetExtend: extend ^ self nbCall:#( void cairo_pattern_set_extend ( self , ulong extend) ) ! ! !AthensCairoPatternPaint methodsFor: 'primitives' stamp: 'FernandoOlivero 4/19/2012 14:00'! primSetSourceOn: aCanvas ^ self nbCall: #(void cairo_set_source ( cairo_t aCanvas, self)) ! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'IgorStasenko 8/31/2012 01:13'! reflect self primSetExtend: CAIRO_EXTEND_REFLECT.! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'IgorStasenko 8/31/2012 01:14'! repeat self primSetExtend: CAIRO_EXTEND_REPEAT.! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/12/2013 10:29'! setExtend: aSymbol " typedef enum { CAIRO_EXTEND_NONE, CAIRO_EXTEND_REPEAT, CAIRO_EXTEND_REFLECT, CAIRO_EXTEND_PAD } cairo_extend_t; " | enum | enum := self defaultExtend. aSymbol = #None ifTrue: [ enum := CAIRO_EXTEND_NONE ]. aSymbol = #Repeat ifTrue: [ enum := CAIRO_EXTEND_REPEAT ]. aSymbol = #Reflect ifTrue: [ enum := CAIRO_EXTEND_REFLECT ]. aSymbol = #Pad ifTrue: [ enum := CAIRO_EXTEND_PAD ]. self primSetExtend: enum.! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'IgorStasenko 5/31/2012 01:53'! setMatrix: m self nbCall: #( void cairo_pattern_set_matrix ( self, AthensCairoMatrix * m) ) ! ! !AthensCairoPatternPaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/13/2012 20:15'! status ^ self nbCall: #(int cairo_pattern_status (cairo_pattern_t self)) ! ! !AthensCairoPatternSurfacePaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:57'! createForSurface: anAthensCairoSurface |pat| pat := self primCreateForSurface: anAthensCairoSurface . pat initializeFor: anAthensCairoSurface . ^ pat! ! !AthensCairoPatternSurfacePaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/19/2012 13:57'! primCreateForSurface: anAthensCairoSurface " pattern = cairo_pattern_create_for_surface (image);" ^self nbCall: #(AthensCairoPatternSurfacePaint cairo_pattern_create_for_surface( cairo_surface_t anAthensCairoSurface ) ) ! ! !AthensCairoPatternSurfacePaint methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 17:29'! direction: aPoint direction := aPoint.! ! !AthensCairoPatternSurfacePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 4/22/2012 23:39'! extent ^ surface extent ! ! !AthensCairoPatternSurfacePaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 13:58'! initializeFor: anAthensCairoSurface self initialize. surface := anAthensCairoSurface . ! ! !AthensCairoPatternSurfacePaint methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 17:15'! origin: aPoint origin := aPoint.! ! !AthensCairoPatternSurfacePaint methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 17:39'! setMatrix: aMatrix aMatrix restoreAfter: [ origin ifNotNil: [ aMatrix translateBy: origin negated ]. super setMatrix: aMatrix. ]! ! !CairoFontOptions class methodsFor: 'finalizing' stamp: 'IgorStasenko 8/28/2012 12:11'! finalizeResourceData: aData "finalize the external resource data, returned by #resourceData on instance side" self primDestroy: aData! ! !CairoFontOptions class methodsFor: 'instance creation' stamp: 'IgorStasenko 8/28/2012 12:06'! new ^ self primCreate initialize! ! !CairoFontOptions class methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 12:05'! primCreate "cairo_font_options_t * cairo_font_options_create (void); Allocates a new font options object with all options initialized to default values. Returns : a newly allocated cairo_font_options_t. Free with cairo_font_options_destroy(). This function always returns a valid pointer; if memory cannot be allocated, then a special error object is returned where all operations on the object do nothing. You can check for this with cairo_font_options_status(). " ^ self nbCall: #(CairoFontOptions cairo_font_options_create ())! ! !CairoFontOptions class methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 12:09'! primDestroy: anOptions "void cairo_font_options_destroy (cairo_font_options_t *options); Destroys a cairo_font_options_t object created with cairo_font_options_create() or cairo_font_options_copy(). options : a cairo_font_options_t" ^ self nbCall: #(void cairo_font_options_destroy (size_t anOptions))! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:28'! aaBest ^ self setAA: CAIRO_ANTIALIAS_BEST.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:27'! aaDefault ^ self setAA: CAIRO_ANTIALIAS_DEFAULT.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:28'! aaFast ^ self setAA: CAIRO_ANTIALIAS_FAST.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:28'! aaGood ^ self setAA: CAIRO_ANTIALIAS_GOOD.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:27'! aaGray ^ self setAA: CAIRO_ANTIALIAS_GRAY.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:27'! aaNone ^ self setAA: CAIRO_ANTIALIAS_NONE.! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:28'! aaSubpixel ^ self setAA: CAIRO_ANTIALIAS_SUBPIXEL.! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:15'! hintStyleDefault ^ self setHintStyle: CAIRO_HINT_STYLE_DEFAULT! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:16'! hintStyleFull ^ self setHintStyle: CAIRO_HINT_STYLE_FULL! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:15'! hintStyleMedium ^ self setHintStyle: CAIRO_HINT_STYLE_MEDIUM! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:15'! hintStyleNone ^ self setHintStyle: CAIRO_HINT_STYLE_NONE! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:15'! hintStyleSlight ^ self setHintStyle: CAIRO_HINT_STYLE_SLIGHT! ! !CairoFontOptions methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/2/2012 01:16'! initialize self registerAsExternalResource. self setDefaults! ! !CairoFontOptions methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/28/2012 12:07'! resourceData ^ handle value! ! !CairoFontOptions methodsFor: 'antialiasing' stamp: 'IgorStasenko 9/2/2012 01:29'! setAA: antialias "cairo_font_options_set_antialias () void cairo_font_options_set_antialias (cairo_font_options_t *options, cairo_antialias_t antialias); Sets the antialiasing mode for the font options object. This specifies the type of antialiasing to do when rendering text. options : a cairo_font_options_t antialias : the new antialiasing mode" ^ self nbCall: #( void cairo_font_options_set_antialias (self, uint antialias)) ! ! !CairoFontOptions methodsFor: 'defaults' stamp: 'IgorStasenko 10/11/2012 18:46'! setDefaults self hintStyleNone; subpixelOrderRGB; aaSubpixel! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 9/2/2012 01:14'! setHintStyle: aStyle "cairo_font_options_set_hint_style () void cairo_font_options_set_hint_style (cairo_font_options_t *options, cairo_hint_style_t hint_style); Sets the hint style for font outlines for the font options object. This controls whether to fit font outlines to the pixel grid, and if so, whether to optimize for fidelity or contrast. See the documentation for cairo_hint_style_t for full details. " ^ self nbCall: #( void cairo_font_options_set_hint_style (self, uint aStyle)) ! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:50'! setSubpixelOrder: order "void cairo_font_options_set_subpixel_order (cairo_font_options_t *options, cairo_subpixel_order_t subpixel_order)" ^ self nbCall: #( void cairo_font_options_set_subpixel_order (self, uint order)) ! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:26'! subpixelOrderBGR ^ self setSubpixelOrder: CAIRO_SUBPIXEL_ORDER_BGR! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:25'! subpixelOrderDefault ^ self setSubpixelOrder: CAIRO_SUBPIXEL_ORDER_DEFAULT! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:25'! subpixelOrderRGB ^ self setSubpixelOrder: CAIRO_SUBPIXEL_ORDER_RGB! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:26'! subpixelOrderVBGR ^ self setSubpixelOrder: CAIRO_SUBPIXEL_ORDER_VBGR! ! !CairoFontOptions methodsFor: 'subpixel order' stamp: 'IgorStasenko 9/2/2012 19:26'! subpixelOrderVRGB ^ self setSubpixelOrder: CAIRO_SUBPIXEL_ORDER_VRGB! ! !CairoScaledFont commentStamp: '' prior: 40414754! my instances map to cairo_scaled_font_t * data type! !CairoScaledFont class methodsFor: 'finalizing' stamp: 'IgorStasenko 6/11/2012 06:50'! finalizeResourceData: handle " void cairo_scaled_font_destroy (cairo_scaled_font_t *scaled_font); " ^ self nbCall: #( void cairo_scaled_font_destroy (size_t handle) )! ! !CairoScaledFont class methodsFor: 'instance creation' stamp: 'IgorStasenko 9/2/2012 18:44'! fromFreetypeFont: aFont cairoFace: face | options fontMatrix deviceMatrix font | options := CairoBackendCache soleInstance at: #AAOptions ifAbsentPut: [ CairoFontOptions new ]. fontMatrix := AthensCairoMatrix new. deviceMatrix := AthensCairoMatrix new. fontMatrix scaleBy: aFont getPreciseHeight. font := self primCreate: face fontMatrix: fontMatrix userToDeviceMatrix: deviceMatrix options: options. "to keep a reference to cairo face in instance" ^ font initWithFace: face. ! ! !CairoScaledFont class methodsFor: 'private' stamp: 'IgorStasenko 8/28/2012 12:18'! primCreate: face fontMatrix: fontMatrix userToDeviceMatrix: ctm options: options " cairo_scaled_font_t * cairo_scaled_font_create (cairo_font_face_t *font_face, const cairo_matrix_t *font_matrix, const cairo_matrix_t *ctm, const cairo_font_options_t *options); Creates a cairo_scaled_font_t object from a font face and matrices that describe the size of the font and the environment in which it will be used. font_face : a cairo_font_face_t font_matrix : font space to user space transformation matrix for the font. In the simplest case of a N point font, this matrix is just a scale by N, but it can also be used to shear the font or stretch it unequally along the two axes. See cairo_set_font_matrix(). ctm : user to device transformation matrix with which the font will be used. options : options to use when getting metrics for the font and rendering with it. Returns : a newly created cairo_scaled_font_t. Destroy with cairo_scaled_font_destroy() " ^ self nbCall: #( CairoScaledFont cairo_scaled_font_create ( CairoFontFace face, AthensCairoMatrix * fontMatrix, AthensCairoMatrix * ctm, CairoFontOptions options ) ) ! ! !CairoScaledFont methodsFor: 'accessing' stamp: 'IgorStasenko 8/28/2012 11:26'! extents | extents | extents := CairoFontExtents new. self getExtents: extents. ^ extents! ! !CairoScaledFont methodsFor: 'accessing' stamp: 'IgorStasenko 6/11/2012 06:58'! getExtents: cairoFontExtents "void cairo_scaled_font_extents (cairo_scaled_font_t *scaled_font, cairo_font_extents_t *extents); " ^ self nbCall: #(int cairo_scaled_font_extents (self, CairoFontExtents * cairoFontExtents )) ! ! !CairoScaledFont methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/28/2012 12:28'! initWithFace: cairo_face face := cairo_face. self registerAsExternalResource.! ! !CairoScaledFont methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/28/2012 12:34'! initialize self status ~= CAIRO_STATUS_SUCCESS ifTrue: [ self error: 'Something is wrong!!' ]. self registerAsExternalResource ! ! !CairoScaledFont methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 23:33'! lock " FT_Face cairo_ft_scaled_font_lock_face (cairo_scaled_font_t *scaled_font); " ^ self nbCall: #( void cairo_ft_scaled_font_lock_face (self)) ! ! !CairoScaledFont methodsFor: 'external resource management' stamp: 'IgorStasenko 6/11/2012 06:49'! resourceData ^ handle value! ! !CairoScaledFont methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 23:02'! set_CTM: matrix " cairo_font_face_t * cairo_ft_font_face_create_for_ft_face (FT_Face face, int load_flags); " ^ self nbCall: #( CairoFontFace cairo_ft_font_face_create_for_ft_face(uint aFace , int flags )) ! ! !CairoScaledFont methodsFor: 'accessing' stamp: 'IgorStasenko 6/11/2012 06:51'! status "cairo_status_t cairo_scaled_font_status (cairo_scaled_font_t *scaled_font);" ^ self nbCall: #(int cairo_scaled_font_status (self)) ! ! !CairoScaledFont methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 23:33'! unlock " FT_Face cairo_ft_scaled_font_lock_face (cairo_scaled_font_t *scaled_font); " ^ self nbCall: #( void cairo_ft_scaled_font_unlock_face (self)) ! ! !AthensCairoSolidPaint methodsFor: 'accessing' stamp: 'IgorStasenko 3/28/2012 18:27'! color: aColor r := aColor red. g := aColor green. b := aColor blue. a := aColor alpha.! ! !AthensCairoSolidPaint methodsFor: 'private'! fillOn: aCanvas ^ self nbCall: #(void cairo_fill (AthensCairoCanvas aCanvas )) ! ! !AthensCairoSolidPaint methodsFor: 'drawing' stamp: 'IgorStasenko 3/21/2012 19:03'! fillPath: path on: anAthensCanvas self loadOn: anAthensCanvas. anAthensCanvas newPath; loadPath: path. self fillOn: anAthensCanvas! ! !AthensCairoSolidPaint methodsFor: 'drawing' stamp: 'IgorStasenko 3/28/2012 18:22'! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " self loadOn: anAthensCanvas. anAthensCanvas newPath; rectangleX: aRect left y: aRect top width: aRect width height: aRect height . self fillOn: anAthensCanvas! ! !AthensCairoSolidPaint methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 05:55'! loadOn: anAthensCanvas anAthensCanvas setSourceR: r g: g b: b a: a; resetDash ! ! !AthensCairoTransform class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 16:49'! for: cairoCanvas ^ self new canvas: cairoCanvas! ! !AthensCairoTransform methodsFor: 'initializing' stamp: 'IgorStasenko 12/20/2011 16:43'! canvas: aCairoCanvas canvas := aCairoCanvas! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'IgorStasenko 12/20/2011 16:47'! loadIdentity ^self nbCall: #( void cairo_identity_matrix (AthensCairoCanvas canvas) ) ! ! !AthensCairoTransform methodsFor: 'transformations' stamp: 'FernandoOlivero 1/15/2012 19:39'! moveTo: aPoint self moveToX: aPoint x asFloat Y: aPoint y asFloat! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'FernandoOlivero 1/14/2012 20:31'! moveToX: px Y: py ^self nbCall: #( void cairo_move_to (AthensCairoCanvas canvas, double px, double py)) ! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'IgorStasenko 12/21/2011 13:43'! primTransformX: x Y: y ^self nbCall: #( void cairo_user_to_device (AthensCairoCanvas canvas, NBFloatPtr x, NBFloatPtr y) ) ! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'FernandoOlivero 1/14/2012 00:32'! restore ^ self nbCall: #(void cairo_restore(AthensCairoCanvas canvas)) ! ! !AthensCairoTransform methodsFor: 'transformations' stamp: 'IgorStasenko 3/7/2012 13:55'! restoreAfter: aBlock self save. aBlock ensure: [ self restore ].! ! !AthensCairoTransform methodsFor: 'transformations' stamp: 'IgorStasenko 12/20/2011 16:45'! rotateByDegrees: angle ^ self rotateByRadians: angle degreesToRadians! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'IgorStasenko 12/20/2011 16:45'! rotateByRadians: angle ^self nbCall: #( void cairo_rotate (AthensCairoCanvas canvas, double angle)) ! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'FernandoOlivero 1/14/2012 00:32'! save ^ self nbCall: #(void cairo_save (AthensCairoCanvas canvas)) ! ! !AthensCairoTransform methodsFor: 'transformations' stamp: 'FernandoOlivero 1/15/2012 16:49'! scaleBy: aScalarOrPoint | double | aScalarOrPoint isPoint ifTrue:[ self scaleX: aScalarOrPoint x asFloat Y: aScalarOrPoint y asFloat ] ifFalse:[ double := aScalarOrPoint asFloat. self scaleX: double Y: double ]. ! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'IgorStasenko 12/20/2011 16:44'! scaleX: fx Y: fy ^self nbCall: #( void cairo_scale (AthensCairoCanvas canvas, double fx, double fy)) ! ! !AthensCairoTransform methodsFor: 'vector-transform' stamp: 'IgorStasenko 12/21/2011 13:42'! transform: aPoint | x y | "since we use pointers to floats we must create a copy of original values to not scratch them" x := aPoint x asFloat shallowCopy. y := aPoint y asFloat shallowCopy. self primTransformX: x Y: y. ^ x @ y! ! !AthensCairoTransform methodsFor: 'transformations' stamp: 'FernandoOlivero 1/14/2012 00:38'! translateBy: aPoint self translateX: aPoint x Y: aPoint y ! ! !AthensCairoTransform methodsFor: 'primitives' stamp: 'IgorStasenko 12/20/2011 16:54'! translateX: px Y: py ^self nbCall: #( void cairo_translate (AthensCairoCanvas canvas, double px, double py)) ! ! !CairoFontFace commentStamp: '' prior: 40414862! I am a private class, used to represent a 'cairo_font_face_t *' data structure of Cairo library. I am not useful for direct use nor providing any functionality. My only purpose is to keep a strong reference to original FT2Face object (so it won't be freed before a corresponding instance of mine will release it). ! !CairoFontFace class methodsFor: 'finalizing' stamp: 'IgorStasenko 6/11/2012 06:03'! finalizeResourceData: handle " void cairo_font_face_destroy (cairo_font_face_t *font_face); " ^ self nbCall: #( void cairo_font_face_destroy (size_t handle)) ! ! !CairoFontFace class methodsFor: 'instance creation' stamp: 'IgorStasenko 9/1/2012 22:48'! fromFreetypeFace: aFace | handle cairoFace | handle := aFace handle nbUlongAt: 1. cairoFace := self primFtFace: handle loadFlags: (LoadIgnoreTransform "LoadNoScale "). ^ cairoFace initializeWithFreetypeFace: aFace! ! !CairoFontFace class methodsFor: 'instance creation' stamp: 'IgorStasenko 6/11/2012 05:33'! ftFace: aFace loadFlags: flags " cairo_font_face_t * cairo_ft_font_face_create_for_ft_face (FT_Face face, int load_flags); Creates a new font face for the FreeType font backend from a pre-opened FreeType face. This font can then be used with cairo_set_font_face() or cairo_scaled_font_create(). The cairo_scaled_font_t returned from cairo_scaled_font_create() is also for the FreeType backend and can be used with functions such as cairo_ft_scaled_font_lock_face(). Note that Cairo may keep a reference to the FT_Face alive in a font-cache and the exact lifetime of the reference depends highly upon the exact usage pattern and is subject to external factors. You must not call FT_Done_Face() before the last reference to the cairo_font_face_t has been dropped. " ^ (self primFtFace: aFace loadFlags: flags) initialize! ! !CairoFontFace class methodsFor: 'instance creation' stamp: 'IgorStasenko 6/11/2012 05:30'! primFtFace: aFace loadFlags: flags " cairo_font_face_t * cairo_ft_font_face_create_for_ft_face (FT_Face face, int load_flags); " ^ self nbCall: #( CairoFontFace cairo_ft_font_face_create_for_ft_face(uint aFace , int flags )) ! ! !CairoFontFace methodsFor: 'initialize-release' stamp: 'IgorStasenko 6/11/2012 06:00'! initialize self registerAsExternalResource ! ! !CairoFontFace methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/28/2012 11:54'! initializeWithFreetypeFace: aFace ftFace := aFace. self registerAsExternalResource.! ! !CairoFontFace methodsFor: 'external resource management' stamp: 'IgorStasenko 6/11/2012 06:00'! resourceData ^ handle value! ! !CairoFontFace methodsFor: 'accessing' stamp: 'IgorStasenko 6/11/2012 06:29'! status ^ self nbCall: #(int cairo_font_face_status (self)) ! ! !AthensCairoPathBuilder class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/7/2012 14:53'! buildPathFrom: aPathCreatingBlock ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 16:45'! absolute absolute := true! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 16:36'! angleOfVector: v | n acos | n := v normalized. acos := n x arcCos. ^ v y < 0 ifTrue: [ Float pi * 2 - acos ] ifFalse: [ acos ]! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 16:47'! arcCenterX: xc centerY: yc radius: radius startAngle: angle1 endAngle: angle2 self nbCall: #(void cairo_arc (AthensCairoCanvas context, double xc, double yc, double radius, double angle1, double angle2) ) ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 17:01'! arcNegativeCenterX: xc centerY: yc radius: radius startAngle: angle1 endAngle: angle2 self nbCall: #(void cairo_arc_negative (AthensCairoCanvas context, double xc, double yc, double radius, double angle1, double angle2) ) ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 17:12'! arcTo: newEndPoint angle: angle cw: aBool " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " | start end center v radius startAngle endAngle cwAngle | start := endPoint. endPoint := end := self toAbsolute: newEndPoint. "we have to transform the input. because Cario expects the center , radius, starting and ending angle, and we have the starting point, the ending point , and the angle. " aBool ifTrue: [cwAngle := angle] ifFalse: [cwAngle := angle negated]. center := self calcCenter: start end: end angle: cwAngle. v := (start - center). radius := v r. startAngle := self angleOfVector: v. endAngle := self angleOfVector: (end-center). aBool ifTrue: [ self arcCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ifFalse: [ self arcNegativeCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 16:54'! calcCenter: start end: end angle: angle | v rot center radius len sina cosa m | v := end - start. m := AthensAffineTransform new rotateByRadians: (Float pi - angle /2). v := m transform: v. len := v r. radius := len / 2 / (angle /2) sin. center := v * (radius/len) + start. ^ center! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/8/2012 17:06'! ccwArcTo: newEndPoint angle: angle " Add a counter-clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " ^ self arcTo: newEndPoint angle: angle cw: false! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'FernandoOlivero 3/9/2012 14:42'! close self closePath. endPoint := self getCurrentPoint! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'FernandoOlivero 3/9/2012 14:43'! closePath self nbCall: #(void cairo_close_path (AthensCairoCanvas context))! ! !AthensCairoPathBuilder methodsFor: 'accessing' stamp: 'IgorStasenko 3/7/2012 15:15'! context: anObject context := anObject! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/7/2012 16:47'! copyPath ^ self nbCall: #( AthensCairoPath cairo_copy_path (AthensCairoCanvas context) ) ! ! !AthensCairoPathBuilder methodsFor: 'accessing' stamp: 'IgorStasenko 3/7/2012 17:15'! createPath: aBlock self newPath. "set default to relative" absolute := false. endPoint := ZeroPoint. "set the implicit path origin" self moveToX: 0 Y: 0. aBlock value: self. ^ self copyPath initialize ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'FernandoOlivero 3/11/2012 00:52'! curveVia: p1 and: p2 to: aPoint | pt1 pt2 | pt1 := self toAbsolute: p1. pt2 := self toAbsolute: p2. endPoint := self toAbsolute: aPoint. self curveViaX: pt1 x Y: pt1 y viaX: pt2 x Y: pt2 y toX: endPoint x Y: endPoint y ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 17:45'! curveVia: p1 to: aPoint | pt0 pt1 cp1 cp2 twoThirds | "Quad bezier curve" pt0 := endPoint. pt1 := self toAbsolute: p1. endPoint := self toAbsolute: aPoint. "Any quadratic spline can be expressed as a cubic (where the cubic term is zero). The end points of the cubic will be the same as the quadratic's. CP0 = QP0 CP3 = QP2 The two control points for the cubic are: CP1 = QP0 + 2/3 *(QP1-QP0) CP2 = QP2 + 2/3 *(QP1-QP2)" twoThirds := (2/3) asFloat. cp1 := pt1 - pt0 * twoThirds + pt0. cp2 := pt1 - endPoint * twoThirds + endPoint. self curveViaX: cp1 x Y: cp1 y viaX: cp2 x Y: cp2 y toX: endPoint x Y: endPoint y ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/7/2012 17:39'! curveViaX: x1 Y: y1 viaX: x2 Y: y2 toX: x3 Y: y3 ^ self nbCall: #(void cairo_curve_to(AthensCairoCanvas context, double x1, double y1, double x2, double y2, double x3, double y3)) ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/8/2012 17:05'! cwArcTo: newEndPoint angle: angle " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " ^ self arcTo: newEndPoint angle: angle cw: true! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 9/3/2012 02:40'! getCurrentPoint ^ context getCurrentPoint! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'FernandoOlivero 3/29/2012 18:18'! lineTo: aPoint endPoint := self toAbsolute: aPoint. ^ self lineToX: endPoint x asFloat Y: endPoint y asFloat! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/7/2012 16:08'! lineToX: x Y: y ^ self nbCall: #(void cairo_line_to (AthensCairoCanvas context, double x, double y ) ) ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'FernandoOlivero 3/29/2012 14:16'! moveTo: aPoint endPoint := self toAbsolute: aPoint. ^ self moveToX: endPoint x asFloat Y: endPoint y asFloat ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/7/2012 16:07'! moveToX: x Y: y " move command always starts a new contour " ^ self nbCall: #(void cairo_move_to (AthensCairoCanvas context, double x, double y ) ) ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 3/7/2012 16:04'! newPath ^ self nbCall: #( void cairo_new_path ( AthensCairoCanvas context ) )! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 16:45'! relative absolute := false! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'IgorStasenko 3/7/2012 16:20'! toAbsolute: aPoint ^ absolute ifTrue: [ aPoint ] ifFalse: [ endPoint + aPoint ]! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/12/2012 22:28'! beBevel self joinStyle: CAIRO_LINE_JOIN_BEVEL! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/12/2012 22:45'! beButt self capStyle: CAIRO_LINE_CAP_BUTT.! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 2/14/2012 12:02'! beCapRound self capStyle: CAIRO_LINE_CAP_ROUND! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 3/25/2012 21:24'! beJoinRound self joinStyle: CAIRO_LINE_JOIN_ROUND ! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/12/2012 22:29'! beMiter self joinStyle: CAIRO_LINE_JOIN_MITER! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'FernandoOlivero 1/12/2012 22:45'! beSquare self capStyle: CAIRO_LINE_CAP_SQUARE! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 4/3/2013 05:15'! capButt self capStyle: CAIRO_LINE_CAP_BUTT.! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 4/3/2013 05:16'! capRound self capStyle: CAIRO_LINE_CAP_ROUND! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 4/3/2013 05:18'! capSquare self capStyle: CAIRO_LINE_CAP_SQUARE! ! !AthensCairoStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 4/3/2013 05:54'! dashes: anAlternateCollectionOfLenghts offset: anOffset dashLenghts := anAlternateCollectionOfLenghts. dashOffset := anOffset asFloat.! ! !AthensCairoStrokePaint methodsFor: 'drawing' stamp: 'IgorStasenko 3/28/2012 18:21'! fillPath: aPath on: anAthensCanvas self loadOn: anAthensCanvas. anAthensCanvas newPath; loadPath: aPath. self strokeOn: anAthensCanvas. ! ! !AthensCairoStrokePaint methodsFor: 'drawing' stamp: 'IgorStasenko 3/28/2012 18:21'! fillRectangle: aRect on: anAthensCanvas self loadOn: anAthensCanvas. anAthensCanvas newPath; rectangleX: aRect left y: aRect top width: aRect width height: aRect height. self strokeOn: anAthensCanvas. ! ! !AthensCairoStrokePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/8/2012 17:24'! initialize super initialize. width := 1. capStyle := joinStyle := nil. ! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 4/3/2013 05:14'! joinBevel self joinStyle: CAIRO_LINE_JOIN_BEVEL! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 4/3/2013 05:16'! joinMiter self joinStyle: CAIRO_LINE_JOIN_MITER! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 4/3/2013 05:15'! joinRound self joinStyle: CAIRO_LINE_JOIN_ROUND ! ! !AthensCairoStrokePaint methodsFor: 'drawing' stamp: 'IgorStasenko 4/3/2013 05:58'! loadOn: aCanvas self fillPaint loadOn: aCanvas. self width notNil ifTrue:[ self primSetLineWidthOn: aCanvas]. self joinStyle notNil ifTrue:[ self primSetLineJoinOn: aCanvas]. self capStyle notNil ifTrue:[ self primSetLineCapOn: aCanvas]. dashLenghts ifNil: [ aCanvas resetDash ] ifNotNil: [ self setDashesOn: aCanvas ].! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 23:51'! primSetDashesOn: aCanvas lengths: dashesLengths count: dashesCount offset: anOffset " void cairo_set_dash (cairo_t *cr, double *dashes, int num_dashes, double offset);" self nbCall: #(void cairo_set_dash ( AthensCairoCanvas aCanvas, double* dashesLengths, int dashesCount, double anOffset) ) ! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 23:20'! primSetLineCapOn: aCanvas ^ self nbCall: #(void cairo_set_line_cap ( AthensCairoCanvas aCanvas, cairo_line_cap_t capStyle) )! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 23:21'! primSetLineJoinOn: aCanvas self nbCall: #(void cairo_set_line_join ( AthensCairoCanvas aCanvas, cairo_line_join_t joinStyle) )! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'FernandoOlivero 1/12/2012 23:19'! primSetLineWidthOn: aCanvas self nbCall: #(void cairo_set_line_width ( AthensCairoCanvas aCanvas, double width) ) ! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'IgorStasenko 4/3/2013 05:53'! setDashesOn: aCanvas | buf | buf := ByteArray new: 8*dashLenghts size. dashLenghts withIndexDo: [:len :i | buf nbFloat64AtOffset: (i-1)*8 put: len asFloat ]. self primSetDashesOn: aCanvas lengths: buf count: dashLenghts size offset: dashOffset ! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'IgorStasenko 3/8/2012 17:24'! strokeOn: aCanvas self nbCall: #(void cairo_stroke(AthensCairoCanvas aCanvas)) ! ! !AthensCairoMatrix commentStamp: '' prior: 40415239! I implement an AthensAffineTransform interface.! !AthensCairoMatrix class methodsFor: 'as yet unclassified'! fieldsDesc ^ #( double sx; double shx; double shy; double sy; double x; double y; )! ! !AthensCairoMatrix methodsFor: 'transformations'! clearTranslation "reset a translation from matrix, leaving only scale and rotation" self x: 0. self y: 0.! ! !AthensCairoMatrix methodsFor: 'private' stamp: 'IgorStasenko 6/4/2012 17:59'! copyFromMatrix: m NativeBoost memCopy: m to: self size: self class instanceSize.! ! !AthensCairoMatrix methodsFor: 'accessing' stamp: 'IgorStasenko 8/31/2012 22:31'! getMatrix "Shall we answer an AthensAffineMatrix instead? ^ AthensAffineMatrix new loadAffineTransform: self " ^ self copy! ! !AthensCairoMatrix methodsFor: 'initialize-release'! initialize self loadIdentity.! ! !AthensCairoMatrix methodsFor: 'private' stamp: 'IgorStasenko 5/31/2012 01:41'! initx: x y: y sx: sx sy: sy shx: shx shy: shy ^self nbCall: #( void cairo_matrix_init (AthensCairoMatrix * self, double sx, double shx, double shy, double sy, double x, double y)) ! ! !AthensCairoMatrix methodsFor: 'transformations'! inverseTransform: aPoint ^ self inverted transform: aPoint! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:41'! invert ^self nbCall: #( cairo_status_t cairo_matrix_invert (AthensCairoMatrix * self)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'FernandoOlivero 4/21/2012 02:35'! inverted | m | m := self copy. m invert. ^ m! ! !AthensCairoMatrix methodsFor: 'testing'! is: aSymbol ^ aSymbol = #cairoMatrix or:[ super is: aSymbol ].! ! !AthensCairoMatrix methodsFor: 'transformations'! loadAffineTransform: m self initx: m x y: m y sx: m sx sy: m sy shx: m shx shy: m shy! ! !AthensCairoMatrix methodsFor: 'transformations'! loadIdentity "initialize with identity transform" self primLoadIdentity ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 3/28/2012 16:32'! multiplyBy: anAthensAffineTransform self primMultiplyBy: ( self class new loadAffineTransform: anAthensAffineTransform)! ! !AthensCairoMatrix methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/31/2012 01:42'! primLoadIdentity "initialize with identity transform" ^ self nbCall: #( void cairo_matrix_init_identity (AthensCairoMatrix * self ) )! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:57'! primMultiplyBy: m ^self nbCall: #(void cairo_matrix_multiply (AthensCairoMatrix * self, AthensCairoMatrix * m , AthensCairoMatrix * self ) ) ! ! !AthensCairoMatrix methodsFor: 'private' stamp: 'IgorStasenko 5/31/2012 01:42'! primTransformX: x Y: y ^self nbCall: #( void cairo_matrix_transform_point (AthensCairoMatrix * self, double * x, double * y)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 6/3/2012 04:07'! restoreAfter: aBlock |previous| previous := self copy. aBlock ensure: [ self copyFromMatrix: previous. "just copy the memory" "self loadAffineTransform: previous" ]! ! !AthensCairoMatrix methodsFor: 'transformations'! rotateByDegrees: angle ^ self rotateByRadians: angle degreesToRadians! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:43'! rotateByRadians: angle ^self nbCall: #( void cairo_matrix_rotate (AthensCairoMatrix * self, double angle)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'FernandoOlivero 3/22/2012 13:35'! scaleBy: factor "if factor is number, do a uniform scale, if not, then factor is assument to be an instance of Point containing non-uniform scale for each axis" factor isPoint ifTrue: [ self scaleX: factor x asFloat Y: factor y asFloat ] ifFalse: [ self scaleX: factor asFloat Y: factor asFloat ] ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:43'! scaleX: fx Y: fy ^self nbCall: #( void cairo_matrix_scale (AthensCairoMatrix * self, double fx, double fy)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:43'! setRotationInRadians: radians ^self nbCall: #( void cairo_matrix_init_rotate (AthensCairoMatrix * self, double radians)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:43'! setScaleX: x Y: y ^self nbCall: #( void cairo_matrix_init_scale (AthensCairoMatrix * self, double x, double y)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:43'! setTranslateX: x Y: y ^self nbCall: #( void cairo_matrix_init_translate (AthensCairoMatrix * self, double x, double y)) ! ! !AthensCairoMatrix methodsFor: 'transformations'! transform: aPoint | x y | "since we use pointers to floats we must create a copy of original values to not scratch them" x := aPoint x asFloat shallowCopy. y := aPoint y asFloat shallowCopy. self primTransformX: x Y: y. ^ x @ y! ! !AthensCairoMatrix methodsFor: 'transformations'! translateBy: aPoint self translateX: aPoint x Y: aPoint y ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 5/31/2012 01:44'! translateX: px Y: py ^self nbCall: #( void cairo_matrix_translate (AthensCairoMatrix * self, double px, double py)) ! ! !CairoFontExtents commentStamp: '' prior: 40415345! I represent the cairo_font_extents_t structure type The cairo_font_extents_t structure stores metric information for a font. Values are given in the current user-space coordinate system. Because font metrics are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double ascent; the distance that the font extends above the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements above it. double descent; the distance that the font extends below the baseline. This value is positive for typical fonts that include portions below the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements below it. double height; the recommended vertical distance between baselines when setting consecutive lines of text with the font. This is greater than ascent+descent by a quantity known as the line spacing or external leading. When space is at a premium, most fonts can be set with only a distance of ascent+descent between lines. double max_x_advance; the maximum distance in the X direction that the origin is advanced for any glyph in the font. double max_y_advance; the maximum distance in the Y direction that the origin is advanced for any glyph in the font. This will be zero for normal fonts used for horizontal writing. (The scripts of East Asia are sometimes written vertically.)! !CairoFontExtents class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/11/2012 06:56'! fieldsDesc ^ #( double ascent; double descent; double height; double max_x_advance; double max_y_advance; )! ! !CairoTextExtents commentStamp: '' prior: 40417364! I represent the cairo_text_extents_t structure type The cairo_text_extents_t structure stores the extents of a single glyph or a string of glyphs in user-space coordinates. Because text extents are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double x_bearing; the horizontal distance from the origin to the leftmost part of the glyphs as drawn. Positive if the glyphs lie entirely to the right of the origin. double y_bearing; the vertical distance from the origin to the topmost part of the glyphs as drawn. Positive only if the glyphs lie completely below the origin; will usually be negative. double width; width of the glyphs as drawn double height; height of the glyphs as drawn double x_advance; distance to advance in the X direction after drawing these glyphs double y_advance; distance to advance in the Y direction after drawing these glyphs. Will typically be zero except for vertical text layout as found in East-Asian languages.! !CairoTextExtents class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/11/2012 07:01'! fieldsDesc ^ #( double x_bearing; double y_bearing; double width; double height; double x_advance; double y_advance; )! ! !SQSurfaceDispatch commentStamp: 'IgorStasenko 12/30/2011 12:35' prior: 40418745! A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; ! !SQSurfaceDispatch class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/30/2011 12:30'! fieldsDesc " A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; " ^ #( int majorVersion; int minorVersion; void* getSurfaceFormatFn; void* lockSurfaceFn; void* unlockSurfaceFn; void* showSurfaceFn )! ! !SQSurfaceDispatch methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/30/2011 12:35'! initialize self majorVersion: 1; minorVersion: 0! ! !CairoPNGPaint commentStamp: '' prior: 40419220! I am a surface paint with lazy initialization scheme, that i loading image from .png file the first time i will be used. ! !CairoPNGPaint class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 1/12/2012 12:47'! fileNamed: aFileName | image| image := self new. image initializeOnFileNamed: aFileName. ^ image! ! !CairoPNGPaint methodsFor: 'converting' stamp: 'IgorStasenko 4/12/2013 09:09'! asAthensPaintOn: anAthensCanvas | surface | surface := AthensCairoSurface createFromFile: fileName ifFailed: [ :status | status = CAIRO_STATUS_READ_ERROR ifTrue: [ self error: 'Cairo couldnt read the file named ', fileName ]. status = CAIRO_STATUS_FILE_NOT_FOUND ifTrue: [ self error: 'Cairo cant find the file named ', fileName ]. ^ self error: 'Cannot create surface. Cairo status code: ', status asString ]. ^ surface asAthensPaintOn: anAthensCanvas. ! ! !CairoPNGPaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 1/12/2012 12:47'! initializeOnFileNamed: aFileName fileName := aFileName.! ! !AthensCairoText methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 18:35'! asString ^ text asString! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:23'! beBold self fontWeight: CAIRO_FONT_WEIGHT_BOLD! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 19:40'! beNormal self fontWeight: CAIRO_FONT_WEIGHT_NORMAL! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:23'! beSlantNormal self fontSlant: CAIRO_FONT_SLANT_NORMAL! ! !AthensCairoText methodsFor: 'drawing' stamp: 'FernandoOlivero 4/7/2012 12:12'! drawOn: aCanvas self loadOn: aCanvas. self showOn: aCanvas! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:23'! fontFamily ^ fontFamily! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 19:42'! fontFamily: anObject "CSS2 generic family names: serif, sans-serif, cursive, fantasy, monospace" fontFamily := anObject! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:23'! fontSize ^ fontSize! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:23'! fontSize: anObject fontSize := anObject! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:24'! fontSlant ^ fontSlant! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 20:00'! fontSlant: anObject anObject isSymbol ifTrue:[ fontSlant := self slantFrom: anObject ] ifFalse:[ fontSlant := anObject ]! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 18:24'! fontWeight ^ fontWeight! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/25/2012 01:03'! fontWeight: anObject anObject isSymbol ifTrue:[ fontWeight := self weightFrom: anObject ] ifFalse:[ fontWeight := anObject ] ! ! !AthensCairoText methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/30/2012 14:49'! initialize super initialize. self beNormal; beSlantNormal. fontSize := 10.! ! !AthensCairoText methodsFor: 'drawing' stamp: 'FernandoOlivero 3/30/2012 14:49'! loadOn: aCanvas fontFamily notNil ifTrue:[ self primSelectFont: fontFamily slant: fontSlant weight: fontWeight on: aCanvas] . fontSize notNil ifTrue:[ self primSetFontSize: fontSize on: aCanvas ]! ! !AthensCairoText methodsFor: 'as yet unclassified'! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoText methodsFor: 'private' stamp: 'FernandoOlivero 1/25/2012 01:00'! primSelectFont: aFontFamily slant: aFontSlant weight: aFontWeight on: aCanvas self nbCall: #(void cairo_select_font_face ( cairo_t aCanvas, char * aFontFamily, cairo_font_slant_t aFontSlant, cairo_font_weight_t aFontWeight) ) ! ! !AthensCairoText methodsFor: 'private' stamp: 'FernandoOlivero 1/14/2012 18:31'! primSetFontSize: aFontSize on: aCanvas self nbCall: #(void cairo_set_font_size ( cairo_t aCanvas, double aFontSize) ) ! ! !AthensCairoText methodsFor: 'private' stamp: 'FernandoOlivero 1/25/2012 00:59'! primShowText: aString on: aCanvas self nbCall: #(void cairo_show_text ( cairo_t aCanvas, char * aString) ) ! ! !AthensCairoText methodsFor: 'font description' stamp: 'FernandoOlivero 1/14/2012 20:10'! readFrom: aFontDescription self fontFamily: aFontDescription fontFamily. self fontSlant: aFontDescription fontSlant. self fontWeight: aFontDescription fontWeight. self fontSize: aFontDescription fontSize.! ! !AthensCairoText methodsFor: 'drawing' stamp: 'FernandoOlivero 4/7/2012 12:12'! showOn: aCanvas | cString| aCanvas setPathMatrix. cString := self asString copyWith: (Character value: 0). self primShowText: cString on: aCanvas! ! !AthensCairoText methodsFor: 'private' stamp: 'FernandoOlivero 1/25/2012 01:02'! slantFrom: aSymbol ^ aSymbol caseOf: { [#normal]->[ CAIRO_FONT_SLANT_NORMAL ]. [#italic]->[ CAIRO_FONT_SLANT_ITALIC ]. [#oblique]->[ CAIRO_FONT_SLANT_OBLIQUE ] }! ! !AthensCairoText methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 18:24'! text ^ text! ! !AthensCairoText methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 18:24'! text: anObject text := anObject! ! !AthensCairoText methodsFor: 'private' stamp: 'FernandoOlivero 1/25/2012 01:03'! weightFrom: aSymbol ^ aSymbol caseOf: { [#normal]->[ CAIRO_FONT_WEIGHT_NORMAL ]. [#bold]->[ CAIRO_FONT_WEIGHT_BOLD ] } ! ! !AthensFontDescription commentStamp: 'FernandoOlivero 1/24/2012 18:30' prior: 40419476! Creates a new font description from a string representation in the form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", 1)FAMILY-LIST is a comma separated list of families optionally terminated by a comma, 2)STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity. If STYLE-OPTIONS is missing, then all style options will be set to the default values 3)SIZE is a decimal number (size in points) or optionally followed by the unit modifier "px" for absolute size. ! !AthensFontDescription class methodsFor: 'examples' stamp: 'FernandoOlivero 1/24/2012 18:43'! example | fDesc | fDesc := AthensFontDescription new. fDesc family: 'monospace'; fontSize: 22. ^ fDesc! ! !AthensFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 16:31'! asString "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]" | str | str := '' writeStream. str nextPutAll: family; space. " 2)STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity. If STYLE-OPTIONS is missing, then all style options will be set to the default values " #(slant. variant. weight. stretch. gravity) do:[:each| |val| val := options at: each ifAbsent: nil. val notNil ifTrue:[str nextPutAll: val ; space ]]. self fontSize notNil ifTrue:[ str space; nextPutAll: self fontSize asString ]. ^ str contents! ! !AthensFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 20:07'! beBold self weight: #bold! ! !AthensFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 20:06'! beItalic self slant: #italic! ! !AthensFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 20:07'! beNormal self slant: #normal ; weight: #normal.! ! !AthensFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/14/2012 20:06'! beOblique self slant: #oblique! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 19:42'! family: aFamilyName "CSS2 generic family names: serif, sans-serif, cursive, fantasy, monospace" family := aFamilyName. ! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 20:10'! fontFamily ^ family! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:26'! fontGravity ^ options at: #gravity! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 20:09'! fontSize ^ size ! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/10/2012 12:12'! fontSize: aPointSize size := aPointSize! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/25/2012 01:02'! fontSlant ^ options at: #slant ! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:26'! fontStretch ^ options at: #stretch! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:25'! fontVariant ^ options at: #variant ! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 20:06'! fontWeight ^ options at: #weight ! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:28'! gravity: aNumber options at: #gravity put: aNumber. ! ! !AthensFontDescription methodsFor: 'initialize-release' stamp: 'FernandoOlivero 1/14/2012 20:08'! initialize super initialize. family := 'monospace'. options := Dictionary new. options at:#weight put: #normal; at:#slant put: #normal. size := 14. ! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 19:52'! slant: aNumber options at: #slant put: aNumber. ! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:28'! stretch: aNumber options at: #stretch put: aNumber. ! ! !AthensFontDescription methodsFor: 'pango-options' stamp: 'FernandoOlivero 1/17/2012 16:28'! variant: aNumber options at: #variant put: aNumber. ! ! !AthensFontDescription methodsFor: 'cairo-options' stamp: 'FernandoOlivero 1/14/2012 19:52'! weight: aNumber options at: #weight put: aNumber. ! ! !CairoBackendCache commentStamp: '' prior: 40420073! I providing a simple [weak]key->value storage used to cache various objects used by Athens for Cairo backend, like fonts/forms etc. The cache is global (there's only a single instance of me used at a time) and cache is visible globally by all entities of Cairo backend. The cached objects is held weakly. The cache is flushed for a new image session.! !CairoBackendCache class methodsFor: 'class initialization' stamp: 'IgorStasenko 9/2/2012 01:57'! initialize "self initialize " soleInstance ifNotNil: [ NativeBoost announcer unsubscribe: soleInstance. soleInstance initialize ]. soleInstance := self new. "be notified about session change" NativeBoost notifyAboutSessionChange: soleInstance! ! !CairoBackendCache class methodsFor: 'accessing' stamp: 'IgorStasenko 9/1/2012 23:55'! soleInstance ^ soleInstance! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 19:15'! at: anObject ^ cache at: anObject ifAbsent: nil! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:31'! at: anObject ifAbsentPut: aBlock ^ cache at: anObject ifAbsentPut: aBlock! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:39'! for: anObject at: key ifAbsentPut: aBlock | subCache | subCache := cache at: anObject ifAbsentPut: [ WeakIdentityKeyDictionary new ]. ^ subCache at: key ifAbsentPut: aBlock! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 23:43'! initialize cache := WeakIdentityKeyDictionary new.! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 01:54'! nbSessionChanged self initialize. ! ! !CairoBackendCache methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/12/2012 03:54'! removeAt: anObject ^ cache removeKey: anObject ifAbsent: nil! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 21:29'! advance ^ advance! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/1/2012 21:30'! advance: aPoint advance := aPoint! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:24'! canvas: aCairoCanvas canvas := aCairoCanvas.! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:28'! font: aFreetypeFont font := cache at: aFreetypeFont ifAbsentPut: [ | ftFace face | ftFace := aFreetypeFont face. face := cache at: ftFace ifAbsentPut: [ CairoFontFace fromFreetypeFace: ftFace ]. CairoScaledFont fromFreetypeFont: aFreetypeFont cairoFace: face. ]. originalFont := aFreetypeFont. ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:24'! initialize utfConverter := CairoUTF8Converter new. advance := 0@0. cache := CairoBackendCache soleInstance.! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/30/2012 18:27'! render: aString ^ self renderCharacters: aString from: 1 to: aString size! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 15:46'! renderCharacters: aString from: start to: end | utfString extents currentPt | utfConverter convert: aString from: start to: end. font lock. canvas setScaledFont: font; setFontSize: originalFont pixelSize. canvas setPathMatrix; newPath; moveToX: advance x Y: advance y. canvas paint loadOn: canvas. currentPt := canvas getCurrentPoint. canvas showText: utfConverter buffer. font unlock. ^ canvas getCurrentPoint - currentPt. "cairo_show_text ()" ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 01:43'! setColor: aColor (canvas setPaint: aColor )! ! !CairoLibraryLoader class methodsFor: 'linux' stamp: 'IgorStasenko 4/16/2013 15:56'! cantFindCairoOnLinux " Cog VM is a 32-bit process, and therefore won't link with 64-bit libraries on 64-bit OS. In case if you have problems with cairo library on linux system, try following: Installing 32-bit version of Cairo library. for Fedora it is: $ yum install cairo.i686 /usr/lib/libcairo.so.2 for Ubuntu: $ sudo apt-get install libcairo2:i386 /usr/lib/i386-linux-gnu/libcairo.so.2 If library is installed try to locate it and add path to it to #pathToCairoOnLinux method. " self error: 'Cannot locate cairo library. Please check if it installed on your system'! ! !CairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/10/2012 05:46'! getLibraryHandle (NativeBoost sessionChanged: session) ifTrue: [ libHandle := self loadCairoLibrary. session := NativeBoost uniqueSessionObject. ]. ^ libHandle ! ! !CairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/16/2013 15:50'! getLibraryPath (NativeBoost platformId = NativeBoostConstants linux32PlatformId) ifTrue: [ ^ self pathToCairoOnLinux. ]. (NativeBoost platformId = NativeBoostConstants mac32PlatformId) ifTrue: [ ^ 'libcairo.2.dylib' ]. (NativeBoost platformId = NativeBoostConstants win32PlatformId) ifTrue: [ ^ 'libcairo-2.dll' ]. self error: 'define your own path' ! ! !CairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/10/2012 05:42'! loadCairoLibrary ^ NativeBoost forCurrentPlatform loadModule: self getLibraryPath ! ! !CairoLibraryLoader class methodsFor: 'linux' stamp: 'IgorStasenko 4/16/2013 15:55'! pathToCairoOnLinux "On different flavors of linux the path to library may differ depending on OS distro or whether system is 32 or 64 bit. " #( '/usr/lib/i386-linux-gnu/libcairo.so.2' '/usr/lib/libcairo.so.2' ) do: [ :path | path asFileReference exists ifTrue: [ ^ path ] ]. ^ self cantFindCairoOnLinux ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/28/2012 18:03'! buffer ^ buffer! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/28/2012 14:10'! checkBufferSpace: minimalSize | size | size := buffer ifNil: [ 0 ] ifNotNil: [ buffer size ]. size < minimalSize ifTrue: [ buffer := ByteArray new: minimalSize. ] ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/28/2012 18:31'! convert: aString from: start to: end | bs stream | self checkBufferSpace: 4*(end-start + 2). stream := ZnCharacterWriteStream on: (bs :=buffer writeStream). stream next: end-start+1 putAll: aString startingAt: start. " start to: end do: [:i| stream nextPut: (aString at: i) ]. " bs nextPut: 0. ^ bs position.! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/12/2012 18:07'! convertByteString: aByteString ^ NBFFICallout cdecl: #( void (void * aByteString)) emitCall: [:gen :proxy :asm | ]! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/22/2012 02:56'! convertUnicode: asm " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanOne moreThanTwo moreThanThree end | moreThanOne := asm uniqueLabelName: 'moreThanOne'. moreThanTwo := asm uniqueLabelName: 'moreThanTwo'. moreThanThree := asm uniqueLabelName: 'moreThanThree'. end := asm uniqueLabelName: 'end'. asm cmp: asm EAX with: 16r7F; jg: moreThanOne; "one byte" mov: 1 to: asm EDX; jmp: end; label: moreThanOne; cmp: asm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: asm EAX with: 2; shl: asm AL with: 2; or: asm AX with: 2r1100000010000000; xchg: asm AL with: asm AH; mov: 2 to: asm EDX; jmp: end; label: moreThanTwo; cmp: asm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: asm EAX with: 4; shr: asm AX with: 2; shr: asm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: asm EAX with: 2r111000001000000010000000; "16rE08080" shl: asm EAX with: 8; bswap: asm EAX; mov: 3 to: asm EDX; jmp: end; "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: asm EAX to: asm EDX; shl: asm EAX with: 4; shr: asm AX with: 2; shr: asm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: asm EAX with: 16r3F3F3F; bswap: asm EAX; shr: asm EDX with: 18; "6*3" or: asm DL with: 16r11110000; mov: asm DL to: asm AL; mov: 4 to: asm EDX; label: end ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/22/2012 14:28'! convertUnicode: asm conversionLabels: convLabels " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanTwo moreThanThree | moreThanTwo := asm uniqueLabelName: 'moreThanTwo'. moreThanThree := asm uniqueLabelName: 'moreThanThree'. asm cmp: asm EAX with: 16r7F; jle: (convLabels at: 1); "one byte" cmp: asm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: asm EAX with: 2; shl: asm AL with: 2; or: asm AX with: 2r1100000010000000; xchg: asm AL with: asm AH; jmp: (convLabels at: 2); label: moreThanTwo; cmp: asm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: asm EAX with: 4; shr: asm AX with: 2; shr: asm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: asm EAX with: 2r111000001000000010000000; "16rE08080" shl: asm EAX with: 8; bswap: asm EAX; jmp: (convLabels at: 3); "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: asm EAX to: asm EDX; shl: asm EAX with: 4; shr: asm AX with: 2; shr: asm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: asm EAX with: 16r3F3F3F; or: asm EAX with: 16r808080; bswap: asm EAX; shr: asm EDX with: 18; "6*3" or: asm DL with: 16r11110000; mov: asm DL to: asm AL; jmp: (convLabels at: 4)! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/12/2012 18:02'! convertWideString: aWideString ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/22/2012 15:10'! store: numBytes accumulated: accumBytes | toShift left | asm label: ('write', numBytes asString , 'to' , accumBytes asString) asSymbol. (accumBytes + numBytes ) > 4 ifTrue: [ toShift := 4 - accumBytes. left := numBytes - toShift ] ifFalse: [ toShift := numBytes. left := 0 ]. (accumBytes = 0 and: [numBytes = 4]) ifTrue: [ "just store directly" asm mov: asm EAX to: asm EDI ptr. ]. asm shrd: asm EBX with: asm EAX with: toShift * 8. ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! "Athens-Cairo"! !PangoCairoLibraryLoader commentStamp: '' prior: 0! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoCairoLibrary . ! !PangoLibraryLoader commentStamp: '' prior: 0! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoLibrary. ! !PangoConstants commentStamp: 'FernandoOlivero 1/17/2012 14:40' prior: 0! self initialize! !AthensPangoRectangle commentStamp: 'FernandoOlivero 2/5/2012 17:17' prior: 0! PangoRectangle typedef struct { int x; int y; int width; int height; } PangoRectangle; ! !AthensPangoFontDescription commentStamp: 'FernandoOlivero 1/17/2012 13:45' prior: 0! Creates a new font description from a string representation in the form [FAMILY-LIST] [STYLE-OPTIONS] [SIZE], where FAMILY-LIST is a comma separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity, and SIZE is a decimal number (size in points) or optionally followed by the unit modifier 'px' for absolute size. Any one of the options may be absent. If FAMILY-LIST is absent, then the family_name field of the resulting font description will be initialized to NULL. If STYLE-OPTIONS is missing, then all style options will be set to the default values. If SIZE is missing, the size in the resulting font description will be set to 0.! !TPangoCairoLibrary classTrait methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 13:09'! nbLibraryNameOrHandle ^ PangoCairoLibraryLoader getLibraryHandle! ! !TPangoCairoLibrary classTrait methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 13:08'! pangoLibraryNameOrHandle ^ PangoLibraryLoader getLibraryHandle! ! !TPangoCairoLibrary classTrait methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/9/2012 14:55'! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! !TPangoCairoLibrary methodsFor: 'initialization' stamp: 'FernandoOlivero 1/17/2012 11:48'! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !TPangoCairoLibrary methodsFor: 'initialization' stamp: 'FernandoOlivero 1/17/2012 11:54'! pangoLibraryNameOrHandle ^ self class pangoLibraryNameOrHandle! ! !TPangoCairoLibrary methodsFor: 'initialization' stamp: 'FernandoOlivero 10/3/2012 12:33'! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! !PangoCairoLibraryLoader commentStamp: '' prior: 40547879! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoCairoLibrary . ! !PangoCairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 12:28'! getLibraryHandle (NativeBoost sessionChanged: session) ifTrue: [ libHandle := self loadPangoCairoLibrary. session := NativeBoost uniqueSessionObject. ]. ^ libHandle ! ! !PangoCairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 16:43'! getLibraryPath ^ '/opt/local/lib/libpangocairo-1.0.0.dylib'! ! !PangoCairoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 12:28'! loadPangoCairoLibrary ^ NativeBoost forCurrentPlatform loadModule: self getLibraryPath ! ! !PangoLibraryLoader commentStamp: '' prior: 40548141! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoLibrary. ! !PangoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 13:07'! getLibraryHandle (NativeBoost sessionChanged: session) ifTrue: [ libHandle := self loadPangoLibrary. session := NativeBoost uniqueSessionObject. ]. ^ libHandle ! ! !PangoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 16:42'! getLibraryPath ^ '/opt/local/lib/libpango-1.0.0.dylib' ! ! !PangoLibraryLoader class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/3/2012 13:07'! loadPangoLibrary ^ NativeBoost forCurrentPlatform loadModule: self getLibraryPath ! ! !PangoConstants commentStamp: 'FernandoOlivero 1/17/2012 14:40' prior: 40548413! self initialize! !AthensPangoRectangle commentStamp: 'FernandoOlivero 2/5/2012 17:17' prior: 40548509! PangoRectangle typedef struct { int x; int y; int width; int height; } PangoRectangle; ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/28/2012 13:06'! asByteArray | bigEndian array | "4 ints = 4 * 4 bytes = 16 bytes " array := ByteArray new: 16. bigEndian := Smalltalk isBigEndian. array longAt: 1 put: x * PANGO_SCALE bigEndian: bigEndian. array longAt: 5 put: y * PANGO_SCALE bigEndian: bigEndian. array longAt: 9 put: width * PANGO_SCALE bigEndian: bigEndian. array longAt: 13 put: height * PANGO_SCALE bigEndian: bigEndian. ^ array ! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:28'! extent ^ width@height! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:16'! height ^ height! ! !AthensPangoRectangle methodsFor: 'initialize-release' stamp: 'FernandoOlivero 2/5/2012 17:34'! initialize x := y := width := height := 0.! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 18:37'! origin ^ x@y ! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:37'! pangoScale ^ PANGO_SCALE! ! !AthensPangoRectangle methodsFor: 'initialize-release' stamp: 'FernandoOlivero 2/28/2012 13:06'! readFrom: aByteArray | bigEndian | bigEndian := Smalltalk isBigEndian. x := ( (aByteArray longAt: 1 bigEndian: bigEndian) / self pangoScale ) rounded. y := ( ( aByteArray longAt: 5 bigEndian: bigEndian ) / self pangoScale ) rounded. width := ( ( aByteArray longAt: 9 bigEndian: bigEndian ) / self pangoScale ) rounded. height := ( ( aByteArray longAt: 13 bigEndian: bigEndian ) / self pangoScale ) rounded.! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:16'! width ^ width! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:16'! x ^ x! ! !AthensPangoRectangle methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 17:16'! y ^ y! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/13/2011 16:52'! initialize self initializeAlignment; initializeEllipsizeMode; initializeWrapMode; initializeStyle; initializeFontMask; initializeVariant ; initializeWeight; initializeStretch; initializeScale; initializeGravity ; initializeDirection .! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 20:24'! initializeAlignment "typedef enum {" PANGO_ALIGN_LEFT := 0. PANGO_ALIGN_CENTER := 1. PANGO_ALIGN_RIGHT := 2. "} PangoAlignment;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/13/2011 16:53'! initializeDirection " typedef enum {" PANGO_DIRECTION_LTR := 0. PANGO_DIRECTION_RTL:= 1. PANGO_DIRECTION_TTB_LTR:= 2. PANGO_DIRECTION_TTB_RTL:= 3. PANGO_DIRECTION_WEAK_LTR:= 4. PANGO_DIRECTION_WEAK_RTL:= 5. PANGO_DIRECTION_NEUTRAL:= 6. "} PangoDirection;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 20:23'! initializeEllipsizeMode "typedef enum {" PANGO_ELLIPSIZE_NONE := 0. PANGO_ELLIPSIZE_START := 1. PANGO_ELLIPSIZE_MIDDLE := 2. PANGO_ELLIPSIZE_END := 3. "} PangoEllipsizeMode;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 23:02'! initializeFontMask " typedef enum {" PANGO_FONT_MASK_FAMILY := 1 << 0. PANGO_FONT_MASK_STYLE := 1 << 1. PANGO_FONT_MASK_VARIANT := 1 << 2. PANGO_FONT_MASK_WEIGHT := 1 << 3. PANGO_FONT_MASK_STRETCH := 1 << 4. PANGO_FONT_MASK_SIZE := 1 << 5. PANGO_FONT_MASK_GRAVITY := 1 << 6 "} PangoFontMask;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/13/2011 16:38'! initializeGravity " typedef enum {" PANGO_GRAVITY_SOUTH := 0. PANGO_GRAVITY_EAST := 1. PANGO_GRAVITY_NORTH := 2. PANGO_GRAVITY_WEST := 3. PANGO_GRAVITY_AUTO := 4. "} PangoGravity;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/11/2011 00:42'! initializeScale PANGO_SCALE := 1024. ! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 23:01'! initializeStretch " typedef enum {" PANGO_STRETCH_ULTRA_CONDENSED := 0. PANGO_STRETCH_EXTRA_CONDENSED := 1. PANGO_STRETCH_CONDENSED := 2. PANGO_STRETCH_SEMI_CONDENSED := 3. PANGO_STRETCH_NORMAL := 4. PANGO_STRETCH_SEMI_EXPANDED := 5. PANGO_STRETCH_EXPANDED := 6. PANGO_STRETCH_EXTRA_EXPANDED := 7. PANGO_STRETCH_ULTRA_EXPANDED := 8. "} PangoStretch;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 22:57'! initializeStyle " typedef enum {" PANGO_STYLE_NORMAL := 0. PANGO_STYLE_OBLIQUE := 1. PANGO_STYLE_ITALIC := 2. "} PangoStyle;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 23:00'! initializeVariant " typedef enum {" PANGO_VARIANT_NORMAL := 0. PANGO_VARIANT_SMALL_CAPS := 1. "} PangoVariant;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 22:59'! initializeWeight " typedef enum {" PANGO_WEIGHT_THIN := 100. PANGO_WEIGHT_ULTRALIGHT := 200. PANGO_WEIGHT_LIGHT := 300. PANGO_WEIGHT_BOOK := 380. PANGO_WEIGHT_NORMAL := 400. PANGO_WEIGHT_MEDIUM := 500. PANGO_WEIGHT_SEMIBOLD := 600. PANGO_WEIGHT_BOLD := 700. PANGO_WEIGHT_ULTRABOLD := 800. PANGO_WEIGHT_HEAVY := 900. PANGO_WEIGHT_ULTRAHEAVY := 1000. "} PangoWeight;"! ! !PangoConstants class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 12/10/2011 20:22'! initializeWrapMode "typedef enum {" PANGO_WRAP_WORD := 0. PANGO_WRAP_CHAR := 1. PANGO_WRAP_WORD_CHAR := 2. ! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:15'! alignment ^ alignment! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:41'! alignment: anObject "left,center or right" alignment := anObject! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 14:48'! alignmentValue ^alignment caseOf:{ ['left']->[PANGO_ALIGN_LEFT]. ['center']->[PANGO_ALIGN_CENTER]. ['right']->[PANGO_ALIGN_RIGHT]. }! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 14:49'! alignmentValueFrom: anInt ^anInt caseOf:{ [PANGO_ALIGN_LEFT]->['left']. [PANGO_ALIGN_CENTER]->['center']. [PANGO_ALIGN_RIGHT]->['right']. }! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:39'! beJustified self justify: true.! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:15'! ellipsize ^ ellipsize! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 15:33'! ellipsize: anObject "none, start, middle, end" "Sets the type of ellipsization being performed for layout. Depending on the ellipsization mode ellipsize text is removed from the start, middle, or end of text so they fit within the width and height of layout set with pango_layout_set_width() and pango_layout_set_height(). If the layout contains characters such as newlines that force it to be layed out in multiple paragraphs, then whether each paragraph is ellipsized separately or the entire layout is ellipsized as a whole depends on the set height of the layout. See pango_layout_set_height() for details." ellipsize := anObject! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 3/2/2012 16:59'! ellipsizeValue ^ellipsize caseOf:{ ['none'] -> [PANGO_ELLIPSIZE_NONE]. ['start']->[PANGO_ELLIPSIZE_START]. ['middle']->[PANGO_ELLIPSIZE_MIDDLE]. ['end']->[ PANGO_ELLIPSIZE_END]. }! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 14:51'! ellipsizeValueFrom: anInt ^anInt caseOf:{ [PANGO_ELLIPSIZE_NONE]->['none']. [PANGO_ELLIPSIZE_START]->['start']. [PANGO_ELLIPSIZE_MIDDLE]->['middle']. [ PANGO_ELLIPSIZE_END]->['end']. }! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 10/5/2012 01:48'! getTabsFrom: anAthensParagraph | tabsArray | tabsArray := AthensPangoTabs getFrom: anAthensParagraph . tabs := tabsArray asArray collect:[:e| e / PANGO_SCALE]. tabsArray finalize.! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 15:54'! indentation ^ indentation / PANGO_SCALE! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 15:54'! indentation: anObject "Sets the width in Pango units to indent each paragraph. A negative value of indent will produce a hanging indentation. That is, the first line will have the full width, and subsequent lines will be indented by the absolute value of indent. The indent setting is ignored if layout alignment is set to PANGO_ALIGN_CENTER." indentation := anObject * PANGO_SCALE! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 15:11'! justify ^ justify = 1 ! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 15:23'! justify: anObject anObject isNumber ifTrue:[ justify := anObject] ifFalse:[ anObject ifTrue:[ justify := 1 ] ifFalse:[ justify := 0 ] ].! ! !AthensPangoLayoutDescription methodsFor: 'drawing' stamp: 'FernandoOlivero 10/4/2012 18:10'! loadOn: aPangoLayout justify notNil ifTrue:[ self primSetJustifyOn: aPangoLayout]. wrap notNil ifTrue:[ self primSetWrap: self wrapValue on: aPangoLayout]. tabs notNil ifTrue:[ self setTabsOn: aPangoLayout ]. spacing notNil ifTrue:[ self primSetSpacingOn: aPangoLayout ]. indentation notNil ifTrue:[ self primSetIndentOn: aPangoLayout]. ellipsize notNil ifTrue:[ self primSetEllipsize: self ellipsizeValue on: aPangoLayout]. alignment notNil ifTrue:[ self primSetAlignment: self alignmentValue on: aPangoLayout]. ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:19'! primGetAlignmentFrom: anAthensParagraph ^ self pangoNbCall: #(PangoAlignment pango_layout_get_alignment (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:05'! primGetEllipsizeFrom: anAthensParagraph ^ self pangoNbCall: #(PangoEllipsizeMode pango_layout_get_ellipsize (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 14:34'! primGetIndentFrom: anAthensParagraph ^ self pangoNbCall: #(int pango_layout_get_indent (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:12'! primGetJustifyFrom: anAthensParagraph ^ self pangoNbCall: #(gboolean pango_layout_get_justify (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 14:35'! primGetSpacingFrom: anAthensParagraph ^ self pangoNbCall: #(int pango_layout_get_spacing (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 14:35'! primGetWrapFrom: anAthensParagraph ^ self pangoNbCall: #(PangoWrapMode pango_layout_get_wrap (PangoLayout anAthensParagraph)) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:19'! primSetAlignment: aMode on: anAthensParagraph self pangoNbCall: #(void pango_layout_set_alignment ( PangoLayout anAthensParagraph, PangoAlignment aMode )) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:19'! primSetEllipsize: aMode on: anAthensParagraph self pangoNbCall: #(void pango_layout_set_ellipsize ( PangoLayout anAthensParagraph, PangoEllipsizeMode aMode) ) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:55'! primSetIndentOn: anAthensParagraph self pangoNbCall: #(void pango_layout_set_indent ( PangoLayout anAthensParagraph, int indentation) ) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:19'! primSetJustifyOn: anAthensParagraph self pangoNbCall: #(void pango_layout_set_justify ( PangoLayout anAthensParagraph, gboolean justify )) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:22'! primSetSpacingOn: anAthensParagraph self pangoNbCall: #(void pango_layout_set_spacing ( PangoLayout anAthensParagraph, int spacing) ) ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 1/17/2012 15:19'! primSetWrap: aMode on: anAthensParagraph self pangoNbCall: #(void pango_layout_set_wrap ( PangoLayout anAthensParagraph, PangoWrapMode aMode) ) ! ! !AthensPangoLayoutDescription methodsFor: 'drawing' stamp: 'FernandoOlivero 10/4/2012 18:10'! readFrom: aPangoLayout self justify:( self primGetJustifyFrom: aPangoLayout). wrap := self wrapValueFrom: (self primGetWrapFrom: aPangoLayout). tabs := self getTabsFrom: aPangoLayout. spacing := self primGetSpacingFrom: aPangoLayout. indentation := self primGetIndentFrom: aPangoLayout. ellipsize := self ellipsizeValueFrom:(self primGetEllipsizeFrom: aPangoLayout). alignment := self alignmentValueFrom: (self primGetAlignmentFrom: aPangoLayout). ! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 10/5/2012 01:48'! readTabsFrom: anAthensParagraph | tabsArray | tabsArray := AthensPangoTabs from: anAthensParagraph. tabsArray loadOn: anAthensParagraph. tabsArray finalize. ! ! !AthensPangoLayoutDescription methodsFor: 'primitives' stamp: 'FernandoOlivero 10/5/2012 01:48'! setTabsOn: anAthensParagraph | tabsArray | tabsArray := AthensPangoTabs tabs: tabs. tabsArray loadOn: anAthensParagraph. tabsArray finalize. ! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 16:48'! spacing ^ spacing / PANGO_SCALE! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 16:48'! spacing: anObject spacing := anObject * PANGO_SCALE! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:15'! tabs ^ tabs! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 18:31'! tabs: anObject "an array of tab offsets" tabs := anObject! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:15'! wrap ^ wrap! ! !AthensPangoLayoutDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 14:53'! wrap: anObject "word, char, wordChar" wrap := anObject! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 14:47'! wrapValue ^wrap caseOf:{ ['word']->[PANGO_WRAP_WORD ]. ['char']->[PANGO_WRAP_CHAR ]. ['wordChar']->[PANGO_WRAP_WORD_CHAR ]. }! ! !AthensPangoLayoutDescription methodsFor: 'private' stamp: 'FernandoOlivero 1/17/2012 14:48'! wrapValueFrom: anInt ^anInt caseOf:{ [PANGO_WRAP_WORD ]->['word']. [PANGO_WRAP_CHAR ]->['char']. [PANGO_WRAP_WORD_CHAR ]->['wordChar']. }! ! !PangoTypes class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/19/2012 01:02'! initialize " self initialize " PangoAlignment := PangoEllipsizeMode := PangoWrapMode := PangoGravity := PangoDirection := gboolean := #int. PangoLayout := #AthensPangoLayout. PangoFontDescription := #AthensPangoFontDescription. PangoTabArray := #AthensPangoTabs. ". PangoFontMap := #NBPangoFontMap. PangoLanguage := #NBPangoLanguage. PangoCairoFontMap := #NBPangoCairoFontMap. PangoContext := #AthensPangoContext. PangoLayoutIter := #AthensPangoCairoParagraphIterator. " PangoLayoutLine := #AthensPangoLayoutLine. ! ! !AthensPangoExternalObject methodsFor: 'initialization' stamp: 'FernandoOlivero 10/5/2012 01:40'! initialize super initialize. self registerAsExternalResource! ! !AthensPangoExternalObject methodsFor: 'initialization' stamp: 'FernandoOlivero 10/5/2012 01:46'! resourceData ^ self ! ! !AthensPangoFontDescription commentStamp: 'FernandoOlivero 1/17/2012 13:45' prior: 40548693! Creates a new font description from a string representation in the form [FAMILY-LIST] [STYLE-OPTIONS] [SIZE], where FAMILY-LIST is a comma separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity, and SIZE is a decimal number (size in points) or optionally followed by the unit modifier 'px' for absolute size. Any one of the options may be absent. If FAMILY-LIST is absent, then the family_name field of the resulting font description will be initialized to NULL. If STYLE-OPTIONS is missing, then all style options will be set to the default values. If SIZE is missing, the size in the resulting font description will be set to 0.! !AthensPangoFontDescription class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2012 01:42'! finalizeResourceData: aFontDescription self pangoNbCall:#(void pango_font_description_free (PangoFontDescription aFontDescription)) ! ! !AthensPangoFontDescription class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/19/2012 01:03'! fromString: aString ^self pangoNbCall:#(PangoFontDescription pango_font_description_from_string (char * aString)) ! ! !AthensPangoFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 13:36'! asString ^ self primToString.! ! !AthensPangoFontDescription methodsFor: 'testing' stamp: 'FernandoOlivero 1/17/2012 13:34'! isAbsolute ": whether the size for the font description is in points or device units. Use pango_font_description_get_set_fields() to find out if the size field of the font description was explicitly set or not. " ^ self primIsAbsolute ! ! !AthensPangoFontDescription methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 16:43'! loadOn: anAthensParagraph anAthensParagraph setFontDescription: self.! ! !AthensPangoFontDescription methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/19/2012 01:03'! primIsAbsolute ^ self pangoNbCall: #(gboolean pango_font_description_get_size_is_absolute ( PangoFontDescription self)) ! ! !AthensPangoFontDescription methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 13:36'! primToString ^ self pangoNbCall:#(String pango_font_description_to_string (PangoFontDescription self)).! ! !AthensPangoTabs class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2012 01:44'! finalizeResourceData: aTabs self pangoNbCall:#(void pango_tab_array_free (PangoTabArray aTabs)) ! ! !AthensPangoTabs class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 1/17/2012 18:38'! getFrom: anAthensParagraph ^ self pangoNbCall: #(PangoTabArray pango_layout_get_tabs (PangoLayout anAthensParagraph))! ! !AthensPangoTabs class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/6/2012 23:54'! primNewSize: aSize pixels: positionsInPixels firstAlignment: anAlignment firstOffset: offset ^ self pangoNbCall:#(PangoTabArray pango_tab_array_new_with_positions (int aSize, int positionsInPixels, int anAlignment, int offset))! ! !AthensPangoTabs class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 1/17/2012 23:19'! tabs: aCollectionOfTabs | tabs | tabs := self primNewSize: aCollectionOfTabs size pixels: 1 firstAlignment: 0 firstOffset: aCollectionOfTabs first. aCollectionOfTabs allButFirst withIndexDo:[:each :i| tabs at: i -1 put: each]. ^ tabs ! ! !AthensPangoTabs methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 22:54'! asArray | arr numberOfStops | numberOfStops := self primNumberOfStops. arr := Array new: numberOfStops. 1 to: numberOfStops do:[:i| |pair| pair := self primGetTabStopAt: i. arr at: i put: pair value]. ^ arr! ! !AthensPangoTabs methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 22:56'! at: anIndex put: aLocation self primSetTab: anIndex alignment: 0 location: aLocation! ! !AthensPangoTabs methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 23:06'! loadOn: anAthensParagraph self primSetTabsOn: anAthensParagraph. ! ! !AthensPangoTabs methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 22:54'! primGetTabStopAt: anIndex " void pango_tab_array_get_tab (PangoTabArray *tab_array, gint tab_index, PangoTabAlign *alignment, gint *location);" ^ 0->8! ! !AthensPangoTabs methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 19:09'! primNumberOfStops ^ self pangoNbCall: #(int pango_tab_array_get_size (PangoTabArray self)) ! ! !AthensPangoTabs methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 22:57'! primSetTab: index alignment: alignment location: location self pangoNbCall:#(void pango_tab_array_set_tab ( PangoTabArray self, int index, int alignment, int location))! ! !AthensPangoTabs methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 18:32'! primSetTabsOn: anAthensParagraph self pangoNbCall: #(void pango_layout_set_tabs ( PangoLayout anAthensParagraph, PangoTabArray self) ) ! ! !AthensPangoLayout class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2012 01:51'! finalizeResourceData: aLayout self pangoNbCall: #(void g_object_unref (aLayout)) ! ! !AthensPangoLayout class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/15/2012 23:02'! newIn: aCairoCanvas "Creates a layout object set up to match the current transformation and target surface of the Cairo context. This layout can then be used for text measurement with functions like pango_layout_get_size() or drawing with functions like pango_cairo_show_layout(). If you change the transformation or target surface for cr, you need to call pango_cairo_update_layout() This function is the most convenient way to use Cairo with Pango, however it is slightly inefficient since it creates a separate PangoContext object for each layout. This might matter in an application that was laying out large amounts of text." ^ self nbCall: #(AthensPangoLayout pango_cairo_create_layout (AthensCairoCanvas aCairoCanvas ) ) ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 12:23'! asString ^ self primGetText! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 10/5/2012 01:48'! cursorPositionsAtIndex: anIndex | strong strongArray weak weakArray | strong := AthensPangoRectangle new. strongArray := strong asByteArray. weak := AthensPangoRectangle new. weakArray := weak asByteArray. self primGetCursorPosAt: anIndex strong: strongArray weak: weakArray . strong readFrom: strongArray. weak readFrom: weakArray. ^ {strong. weak}! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 1/18/2012 01:15'! ellipsizeHeight | h | h := self primGetHeight. h = -1 ifTrue:[ ^ h] ifFalse:[ ^ h / PANGO_SCALE]! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 10/19/2012 01:06'! ellipsizeHeight: aPositiveIntOrMinusOne "Sets the height to which the PangoLayout should be ellipsized at. There are two different behaviors, based on whether height is positive or negative. If height is positive, it will be the maximum height of the layout. Only lines would be shown that would fit, and if there is any text omitted, an ellipsis added. At least one line is included in each paragraph regardless of how small the height value is. A value of zero will render exactly one line for the entire layout. If height is negative, it will be the (negative of) maximum number of lines per paragraph. That is, the total number of lines shown may well be more than this value if the layout contains multiple paragraphs of text. The default value of -1 means that first line of each paragraph is ellipsized. This behvaior may be changed in the future to act per layout instead of per paragraph. File a bug against pango at http://bugzilla.gnome.org/ if your code relies on this behavior. Height setting only has effect if a positive width is set on layout and ellipsization mode of layout is not PANGO_ELLIPSIZE_NONE. The behavior is undefined if a height other than -1 is set and ellipsization mode is set to PANGO_ELLIPSIZE_NONE, and may change in the future." aPositiveIntOrMinusOne = -1 ifTrue:[self primSetHeight: aPositiveIntOrMinusOne] ifFalse:[self primSetHeight: aPositiveIntOrMinusOne * PANGO_SCALE ] ! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 3/2/2012 17:04'! extent |width height bigEndian w h| width := ByteArray new:4. height := ByteArray new:4. self primGetSizeWidth: width height: height. bigEndian := Smalltalk isBigEndian. w := ( (width longAt: 1 bigEndian: bigEndian) / PANGO_SCALE ) rounded. h := ( (height longAt: 1 bigEndian: bigEndian) / PANGO_SCALE ) rounded. ^ w @ h! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 21:51'! fontDescription ^ self primGetFontDescription. ! ! !AthensPangoLayout methodsFor: 'fonts' stamp: 'FernandoOlivero 10/5/2012 01:37'! fontDescriptionString ^ self primGetFontDescription asString. ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 7/9/2012 15:35'! indexAt: aPoint | trailing index i hit | index := ByteArray new: 4. trailing := ByteArray new: 4. hit := self primLayoutX: (aPoint x * self pangoScale) rounded Y: (aPoint y * self pangoScale ) rounded toIndex: index trailing: trailing . i := index unsignedLongAt: 1 bigEndian: Smalltalk isBigEndian. ^ i ! ! !AthensPangoLayout methodsFor: 'testing' stamp: 'FernandoOlivero 10/3/2012 23:47'! isEllipsized ^ self pangoNbCall:#(int pango_layout_is_ellipsized (PangoLayout self)) ! ! !AthensPangoLayout methodsFor: 'testing' stamp: 'FernandoOlivero 10/3/2012 23:46'! isWrapped ^ self pangoNbCall:#(int pango_layout_is_wrapped (PangoLayout self)) ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 19:19'! iterator ^ self primGetIterator. ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 7/9/2012 19:00'! lineAndDeltaXAtIndex: anIndex | line x i deltaX | line := ByteArray new: 4. x := ByteArray new: 4. self primIndex: anIndex toLine: line x: x trailing: 0. i := line unsignedLongAt: 1 bigEndian: Smalltalk isBigEndian. deltaX := (x unsignedLongAt: 1 bigEndian: Smalltalk isBigEndian) / self pangoScale . ^ i + 1 -> (deltaX/7) rounded ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 10/5/2012 01:32'! lineAt: aLineNumber ^ AthensPangoLayoutLine at: aLineNumber in: self ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 2/12/2012 18:02'! linesPerParagraph: aNumber wrappedTo: aWidth " If height is negative, it will be the (negative of) maximum number of lines per paragraph. That is, the total number of lines shown may well be more than this value if the layout contains multiple paragraphs of text. The default value of -1 means that first line of each paragraph is ellipsized. This behvaior may be changed in the future to act per layout instead of per paragraph. File a bug against pango at http://bugzilla.gnome.org/ if your code relies on this behavior. " "Height setting only has effect if a positive width is set on layout and ellipsization mode of layout is not PANGO_ELLIPSIZE_NONE. " self ellipsizeHeight: aNumber rounded negated ; wrapWidth: aWidth rounded! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 4/28/2012 19:38'! markup: aString "Sets the layout text and attribute list from marked-up text (see markup format). Replaces the current text and attribute list. http://developer.gnome.org/pango/stable/PangoMarkupFormat.html " aString isNil ifTrue:[ ^ self ]. self primSetMarkup: aString length: aString size ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 1/18/2012 01:18'! maximumHeight: aHeight wrappedTo: aWidth "If height is positive, it will be the maximum height of the layout. Only lines would be shown that would fit, and if there is any text omitted, an ellipsis added. At least one line is included in each paragraph regardless of how small the height value is. A value of zero will render exactly one line for the entire layout." "Height setting only has effect if a positive width is set on layout and ellipsization mode of layout is not PANGO_ELLIPSIZE_NONE. " self ellipsizeHeight: aHeight ; wrapWidth: aWidth! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 2/28/2012 22:31'! nextCursorPositionFrom: anIndex forward: forward advance: advance |biggie towards intArray trailingIntArray trailing charOffset index | "if 0, the cursor was at the trailing edge of the grapheme indicated by old_index, if > 0, the cursor was at the leading edge." forward ifTrue:[ trailing := 0 ] ifFalse:[ trailing := 1 ]. "A negative value indicates motion to the left." advance ifTrue:[ towards := 0 ] ifFalse:[ towards := -1 ]. intArray := ByteArray new: 4. trailingIntArray := ByteArray new: 4. self primMoveCursorVisuallyStrong: 1 from: anIndex trailing: trailing towards: towards storeNextIn: intArray storeNextTrailingIn: trailingIntArray. biggie := Smalltalk isBigEndian. index := intArray longAt: 1 bigEndian: biggie. charOffset := trailingIntArray longAt: 1 bigEndian: biggie. ": number of characters to move forward from the location returned for new_index to get the position where the cursor should be displayed. This allows distinguishing the position at the beginning of one line from the position at the end of the preceding line. new_index is always on the line where the cursor should be displayed." ^ {index . charOffset}! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 12:21'! numberOfLines ^ self primGetLineCount! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 1/17/2012 21:43'! pangoScale ^ PANGO_SCALE! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 10/5/2012 01:48'! positionAt: anIndex | rect array | rect := AthensPangoRectangle new. array := rect asByteArray. self primIndexToPosition: anIndex fill: array. rect readFrom: array. ^ rect origin ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 4/28/2012 18:59'! primClearAttributes ^ self pangoNbCall: #(void pango_layout_set_attributes (self, nil) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/7/2012 23:39'! primErrorUnderlineCurrentPathOf: aNBCairoContext atX: x y: y width: w height: h self nbCall: #(void pango_cairo_error_underline_path ( cairo_t aCairoCanvas, double x, double y, double w, double h) )! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/5/2012 22:58'! primGetCursorPosAt: index strong: strongArray weak: weakArray ^ self pangoNbCall: #(void pango_layout_get_cursor_pos ( self, int index, ByteArray strongArray, ByteArray weakArray ))! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/4/2012 01:17'! primGetFontDescription ^ self pangoNbCall:#(PangoFontDescription pango_layout_get_font_description ( PangoLayout self ) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:20'! primGetHeight ^ self pangoNbCall: #(int pango_layout_get_height (PangoLayout self)) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/5/2012 19:20'! primGetIterator self pangoNbCall:#(PangoLayoutIter * pango_layout_get_iter (self) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:21'! primGetLineCount ^ self pangoNbCall:#(int pango_layout_get_line_count (PangoLayout self) )! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/18/2012 01:18'! primGetSizeWidth: aWordW height: aWordH self pangoNbCall: #(void pango_layout_get_size ( PangoLayout self, int* aWordW, int* aWordH)). ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:20'! primGetText ^ self pangoNbCall: #(String pango_layout_get_text (PangoLayout self))! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:20'! primGetWidth " the width in Pango units, or -1 if no width set. " ^ self pangoNbCall: #(int pango_layout_get_width (PangoLayout self)) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/5/2012 19:52'! primIndex: index toLine: line x: x trailing: anBooleanInt self pangoNbCall: #(void pango_layout_index_to_line_x (self, int index, int anBooleanInt, int *line, int *x)). ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/5/2012 17:22'! primIndexToPosition: anIndex fill: aByteArray self pangoNbCall:#(void pango_layout_index_to_pos ( self, int anIndex, ByteArray aByteArray) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:03'! primLayoutPath: aCairoCanvas "Adds the text in a PangoLayout to the current path in the specified cairo context. The top-left corner of the PangoLayout will be at the current point of the cairo context." ^ self nbCall: #(void pango_cairo_layout_path ( cairo_t aCairoCanvas, self) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 7/9/2012 15:30'! primLayoutX: anX Y: anY toIndex: index trailing: trailing ^ self pangoNbCall: #(gboolean pango_layout_xy_to_index ( self, int anX, int anY, int* index, int* trailing ))! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/28/2012 14:01'! primMoveCursorVisuallyStrong: aBooleanInt from: anCursorIndex trailing: aTrailingInt towards: directionInt storeNextIn: aByteArray storeNextTrailingIn: nextTrailingByteArray ^ self pangoNbCall: #(void pango_layout_move_cursor_visually (self, int aBooleanInt, int anCursorIndex, int aTrailingInt, int directionInt, int * aByteArray, int * nextTrailingByteArray))! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 16:45'! primSetFontDescription: anAthensPangoCairoFontDescription self pangoNbCall: #(void pango_layout_set_font_description ( self, PangoFontDescription anAthensPangoCairoFontDescription))! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 16:05'! primSetHeight: aHeight self pangoNbCall: #(void pango_layout_set_height ( PangoLayout self, int aHeight) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/4/2012 00:47'! primSetMarkup: aMarkup length: aLength self pangoNbCall:#(void pango_layout_set_markup ( self , String aMarkup, int aLength )) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/4/2012 00:47'! primSetText: aString size: aStringSize self pangoNbCall: #(void pango_layout_set_text ( self, String aString, int aStringSize) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 15:31'! primSetWidth: aWidth self pangoNbCall: #(void pango_layout_set_width ( PangoLayout self, int aWidth) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/7/2012 23:38'! primShowErrorUnderline: aCairoCanvas atX: x y: y width: w height: h self nbCall: #(void pango_cairo_show_error_underline (cairo_t aCairoCanvas, double x, double y, double w, double h) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/4/2012 00:22'! primShowLayout: aCairoCanvas self nbCall: #(void pango_cairo_show_layout( cairo_t aCairoCanvas, PangoLayout self ) ) ! ! !AthensPangoLayout methodsFor: 'apply primitives' stamp: 'FernandoOlivero 10/5/2012 13:31'! primUpdateLayout: aCairoCanvas self nbCall: #(void pango_cairo_update_layout( cairo_t aCairoCanvas, PangoLayout ) ) ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 10/5/2012 01:34'! readOnlyLineAt: aLineNumber ^ AthensPangoLayoutLine at: aLineNumber in: self. ! ! !AthensPangoLayout methodsFor: 'fonts' stamp: 'FernandoOlivero 1/17/2012 16:43'! setFontDescription: anAthensPangoCairoFontDescription self primSetFontDescription: anAthensPangoCairoFontDescription! ! !AthensPangoLayout methodsFor: 'fonts' stamp: 'FernandoOlivero 10/5/2012 01:48'! setFontDescriptionFromString: aString | desc | desc := AthensPangoFontDescription fromString: aString. desc loadOn: self. ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 10/4/2012 00:46'! text: aString self primClearAttributes ; primSetText: aString size: aString size! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 10/5/2012 02:25'! text: aString markup: aMarkup (aMarkup isNil or:[ aMarkup isEmpty ] ) ifTrue: [ self text: aString ] ifFalse: [ self primSetMarkup: aMarkup length: aMarkup size]. ! ! !AthensPangoLayout methodsFor: 'private' stamp: 'FernandoOlivero 10/4/2012 00:48'! toCString: aString ^ aString ", (Character value:0) asString. " ! ! !AthensPangoLayout methodsFor: 'accessing' stamp: 'FernandoOlivero 2/7/2012 23:37'! underlineOn: aCairoCanvas at: aPoint extending: anExtent self primShowErrorUnderline: aCairoCanvas atX: aPoint x y: aPoint y width: anExtent x height: anExtent y! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 1/18/2012 01:15'! wrapWidth | h | h := self primGetWidth. h = -1 ifTrue:[ ^ h] ifFalse:[ ^ h / PANGO_SCALE]! ! !AthensPangoLayout methodsFor: 'geometry' stamp: 'FernandoOlivero 10/19/2012 01:07'! wrapWidth: aPositiveIntOrMinusOne aPositiveIntOrMinusOne = -1 ifTrue:[self primSetWidth: -1 ] ifFalse:[self primSetWidth: aPositiveIntOrMinusOne rounded * PANGO_SCALE ] ! ! !AthensPangoLayoutLine class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 1/17/2012 12:14'! at: aLineNumber in: anAthensPangoCairoPar ^ self pangoNbCall: #(PangoLayoutLine pango_layout_get_line_readonly (PangoLayout anAthensPangoCairoPar, int aLineNumber))! ! !AthensPangoLayoutLine class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2012 01:35'! finalizeResourceData: aLine self pangoNbCall: #(void pango_layout_line_unref (aLine)) ! ! !AthensPangoLayoutLine methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 20:14'! extent ^ self getExtents second extent rounded ! ! !AthensPangoLayoutLine methodsFor: 'accessing' stamp: 'FernandoOlivero 10/5/2012 01:48'! getExtents | inkRect inkRectArray logicalRect logicalRectArray| inkRect := AthensPangoRectangle new. inkRectArray := inkRect asByteArray. logicalRect := AthensPangoRectangle new. logicalRectArray := logicalRect asByteArray. self primGetExtentsInk: inkRectArray logical: logicalRectArray. inkRect readFrom: inkRectArray. logicalRect readFrom: logicalRectArray. ^ {inkRect. logicalRect}.! ! !AthensPangoLayoutLine methodsFor: 'accessing' stamp: 'FernandoOlivero 2/5/2012 20:13'! height ^ self extent y ! ! !AthensPangoLayoutLine methodsFor: 'apply primitives' stamp: 'FernandoOlivero 2/5/2012 20:00'! primGetExtentsInk: anInkRect logical: aLogicalRect self pangoNbCall: #(void pango_layout_line_get_extents ( self, ByteArray anInkRect, ByteArray aLogicalRect))! ! !AthensPangoLayoutLine methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:07'! primLayoutPath: aCairoCanvas "Adds the text in a PangoLayout to the current path in the specified cairo context. The top-left corner of the PangoLayout will be at the current point of the cairo context." ^ self nbCall: #(void pango_cairo_layout_line_path ( cairo_t aCairoCanvas, self) ) ! ! !AthensPangoLayoutLine methodsFor: 'apply primitives' stamp: 'FernandoOlivero 1/17/2012 12:07'! primShowLayout: aCairoCanvas "The top-left corner of the PangoLayout will be drawn at the current point of the cairo context." ^ self nbCall: #(void pango_cairo_show_layout_line ( cairo_t aCairoCanvas, self) ) ! ! !AthensPangoText methodsFor: 'drawing' stamp: 'FernandoOlivero 10/5/2012 13:30'! drawOn: aCanvas self primShowLayout: aCanvas ! ! !AthensPangoText methodsFor: 'drawing' stamp: 'FernandoOlivero 10/5/2012 11:42'! drawOn: aCanvas fontColor: aFontColor | athensPaint | athensPaint := aCanvas setPaint: aFontColor . athensPaint loadOn: aCanvas . self drawOn: aCanvas .! ! !AthensPangoText methodsFor: 'drawing' stamp: 'FernandoOlivero 10/5/2012 13:30'! olddrawOn: aCanvas aCanvas setPathMatrix. self primUpdateLayout: aCanvas. self primShowLayout: aCanvas ! ! !Trait method! nbLibraryNameOrHandle ^ PangoCairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ PangoCairoLibraryLoader getLibraryHandle! ! !Trait method! pangoLibraryNameOrHandle ^ PangoLibraryLoader getLibraryHandle! ! !Trait method! pangoLibraryNameOrHandle ^ PangoLibraryLoader getLibraryHandle! ! !Trait method! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! !Trait method! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! pangoLibraryNameOrHandle ^ self class pangoLibraryNameOrHandle! ! !Trait method! pangoLibraryNameOrHandle ^ self class pangoLibraryNameOrHandle! ! !Trait method! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! !Trait method! pangoNbCall: fnSpec | sender | sender := thisContext sender. ^ NBFFICallout handleFailureIn: sender nativeCode: [ :gen | gen sender: sender; callType: self nbCallingConvention; generateCall: fnSpec module: self pangoLibraryNameOrHandle] ! ! "Athens-PangoCairo"! !AthensDemoMorph commentStamp: '' prior: 0! self new openInWorld inspect ---- Use self nextFigure/prevFigure in inpector to change the rendered figure. You can find an implementation of each figure in corresponding #figure<#>: method! !AthensSurfaceExamples commentStamp: 'IgorStasenko 1/17/2012 16:42' prior: 0! AthensCairoSurfaceExamples example1. AthensCairoSurfaceExamples example2. AthensBalloonSurfaceExamples example6.! !AthensCairoSurfaceExamples commentStamp: 'FernandoOlivero 4/18/2012 13:59' prior: 0! self example1! !VGTigerDemo commentStamp: '' prior: 0! self runDemo ! !AthensDemoMorph commentStamp: '' prior: 40600658! self new openInWorld inspect ---- Use self nextFigure/prevFigure in inpector to change the rendered figure. You can find an implementation of each figure in corresponding #figure<#>: method! !AthensDemoMorph methodsFor: 'initialize-release'! backColor ^ Color white.! ! !AthensDemoMorph methodsFor: 'accessing' stamp: 'FernandoOlivero 3/30/2012 11:51'! carColor ^ Color veryVeryLightGray! ! !AthensDemoMorph methodsFor: 'accessing'! chasisDecoratorColor ^ Color black! ! !AthensDemoMorph methodsFor: 'accessing' stamp: 'FernandoOlivero 3/30/2012 14:24'! chasisLineColor ^ Color white! ! !AthensDemoMorph methodsFor: 'accessing'! coloredCarColor ^ Color red! ! !AthensDemoMorph methodsFor: 'accessing'! defaultExtent ^ 400@400! ! !AthensDemoMorph methodsFor: 'drawing' stamp: 'FernandoOlivero 3/30/2012 15:00'! drawBackgroundOn: aCanvas aCanvas setPaint: Color veryLightGray; drawShape: (0@0 extent: 1@1)! ! !AthensDemoMorph methodsFor: 'drawing' stamp: 'IgorStasenko 3/30/2012 17:20'! drawCarOn: aCanvas "chasis -----------------------------------------------------------------------" | p stroke wheel decorator | p := aCanvas createPath:[:b| b moveTo: 0.3@0.3 ; lineTo: 0.4@0; curveVia: 0.1@0 to: 0.1@0.1; lineTo: 0@0.2; curveVia: 0@0.1 to: -0.1@0.1; lineTo: -0.4@0; curveVia: -0.1@0 to: (0.1@0.1) negated; lineTo: 0@0.2 negated ; curveVia: 0@0.1 negated to: 0.1@0.1 negated ]. aCanvas setPaint: self coloredCarColor; drawShape: p. stroke := aCanvas setStrokePaint: self wheelColor. stroke width: 0.01. aCanvas draw. "wheels-----------------------------------------------------------------------" wheel := aCanvas createPath:[:b| b moveTo: 0.3@0.3; cwArcTo: 0.15@0 angle: Float halfPi ; moveTo: 0.1@0; cwArcTo: 0.15@0 angle: Float halfPi ; moveTo: 0.0@0.4; cwArcTo: 0.15 negated@0 angle: Float halfPi; moveTo: -0.1@0; cwArcTo: 0.15 negated@0 angle: Float halfPi ]. aCanvas setPaint: self wheelColor; drawShape: wheel. "chasis decorator-----------------------------------------------------------------------" decorator := aCanvas createPath:[:b| b moveTo: 0.2@0.45; lineTo: 0.225@0 ; cwArcTo: 0.15@0 angle: Float halfPi ; lineTo: 0.225@0; lineTo: 0@0.1 ; lineTo: -0.225@ 0; cwArcTo: -0.15@0 angle: Float halfPi ; lineTo: -0.225@ 0 ; lineTo: 0@0.1 negated]. stroke := aCanvas setStrokePaint: self chasisDecoratorColor. stroke width: 0.01. aCanvas drawShape: decorator. aCanvas setPaint: self chasisLineColor. aCanvas draw. ! ! !AthensDemoMorph methodsFor: 'drawing' stamp: 'IgorStasenko 3/30/2012 18:23'! drawOn: aCanvas self render. aCanvas drawImage: surface asForm at: self bounds origin! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'FernandoOlivero 4/19/2012 14:20'! figure10: aCanvas | pt ellipsePath patternPaint rectangle | ellipsePath := aCanvas createPath: [ :builder | builder moveTo: 0@200; cwArcTo: 240@0 angle: Float pi ; cwArcTo: -240@0 angle: Float pi ]. aCanvas setPaint: Color black. aCanvas drawShape: ellipsePath. rectangle := 250@40 extent: 140@300. aCanvas drawShape: rectangle. aCanvas paintTransform loadIdentity. aCanvas paintTransform scaleBy: ((frame/100) sin abs)*5. aCanvas paintTransform rotateByDegrees: (frame/100) sin * 360. patternPaint := aCanvas setPaint: pharoLogo. patternPaint setExtend: #Repeat. aCanvas drawShape: ellipsePath. aCanvas setPaint: patternPaint. patternPaint setExtend: #Reflect. aCanvas drawShape: rectangle. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:25'! figure1: aCanvas aCanvas setPaint: self carColor; drawShape: (50@100 extent: 300@200) ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:25'! figure2: aCanvas | pt path | path := aCanvas createPath: [:builder | builder absolute; moveTo: 70@100; lineTo: 330@100; cwArcTo: 350@120 angle: 90 degreesToRadians; lineTo: 350@280; cwArcTo: 330@300 angle: 90 degreesToRadians; lineTo: 70@300; cwArcTo: 50@280 angle: 90 degreesToRadians; lineTo: 50@120; cwArcTo: 70@100 angle: 90 degreesToRadians ]. aCanvas setPaint: self carColor; drawShape: path ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:26'! figure3: aCanvas | pt path | path := aCanvas createPath: [:builder | builder relative; moveTo: 0.3@0.3 ; lineTo: 0.4@0; curveVia: 0.1@0 to: 0.1@0.1; lineTo: 0@0.2; curveVia: 0@0.1 to: -0.1@0.1; lineTo: -0.4@0; curveVia: -0.1@0 to: (-0.1@ -0.1); lineTo: 0@ -0.2 ; curveVia: 0@ -0.1 to: 0.1@ -0.1 ]. aCanvas pathTransform scaleBy: self extent. aCanvas setPaint: self carColor; drawShape: path ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:29'! figure4: aCanvas | path stroke | path := self roundedRectanglePathOn: aCanvas. aCanvas setShape: path. aCanvas setPaint: self carColor. aCanvas draw. stroke := aCanvas setStrokePaint: Color black. stroke width: 3. aCanvas draw. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:26'! figure5: aCanvas | wheels | self figure4: aCanvas. wheels := aCanvas createPath: [:builder | builder moveTo: 100@100; cwArcTo: 60@0 angle: 90 degreesToRadians; moveTo: 80@0; cwArcTo: 60@0 angle: 90 degreesToRadians; moveTo: 0.0@200; cwArcTo: -60@0 angle: 90 degreesToRadians; moveTo: -80@0; cwArcTo: -60@0 angle: 90 degreesToRadians ]. aCanvas setPaint: self wheelColor; drawShape: wheels! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 4/12/2013 10:06'! figure6: aCanvas | pt c linearGradient | self figure5: aCanvas. linearGradient := aCanvas surface createLinearGradient: { 0 -> self coloredCarColor . 0.25 -> self coloredCarColor muchLighter. 0.5 -> Color white. 0.75 -> (self coloredCarColor muchLighter ). 1 -> (self coloredCarColor alpha: 0) } start: 0@100 stop: 0@300. aCanvas setShape: (self roundedRectanglePathOn: aCanvas). aCanvas setPaint: linearGradient. aCanvas draw. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'DamienPollet 12/22/2012 01:38'! figure7: aCanvas | pt | self drawBackgroundOn: aCanvas. pt := aCanvas pathTransform. pt restoreAfter:[ pt scaleBy: self extent . self drawCarOn: aCanvas. pt scaleBy: 0.25@0.25. self drawCarOn: aCanvas. pt translateBy: 2@0; rotateByDegrees: 35. self drawCarOn: aCanvas. ]. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 18:27'! figure8: aCanvas | pt | pt := aCanvas pathTransform. pt restoreAfter:[ | stroke p wheel decorator | pt scaleBy: self extent . self drawBackgroundOn: aCanvas. pt scaleBy: (frame/100) sin abs. self drawCarOn: aCanvas. pt scaleBy: 0.25@0.2.5. self drawCarOn: aCanvas. pt translateBy: 2@0; rotateByDegrees: 35. self drawCarOn: aCanvas. ]. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'FernandoOlivero 4/19/2012 14:38'! figure9: aCanvas | pt ellipsePath patternPaint | ellipsePath := aCanvas createPath: [ :builder | builder moveTo: 10@200; cwArcTo: 360@0 angle: Float pi ; lineTo: -100@180; lineTo: -150@ -0; lineTo: -110@ -180]. aCanvas setPaint: Color black. aCanvas drawShape: ellipsePath. aCanvas paintTransform loadIdentity. aCanvas paintTransform scaleBy: ((frame/200) sin abs)*3. patternPaint := aCanvas setPaint: esugBallon . patternPaint setExtend: #None. aCanvas draw.! ! !AthensDemoMorph methodsFor: 'initialize-release' stamp: 'FernandoOlivero 4/19/2012 14:21'! figures ^ #( figure1: figure2: figure3: figure4: figure5: figure6: figure7: figure8: figure9: figure10: ). ! ! !AthensDemoMorph methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/29/2012 10:22'! initialize | ref | super initialize. self extent: self defaultExtent. self color: self backColor. surface := AthensCairoSurface extent: self extent. current := 1. frame := 0. ref := 'Pharo.png' asFileReference. pharoLogo := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. ref := 'esug-balloon.png' asFileReference. esugBallon := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. self startStepping. ! ! !AthensDemoMorph methodsFor: 'accessing'! nextFigure current := current + 1. current > self figures size ifTrue: [ current := 1 ].! ! !AthensDemoMorph methodsFor: 'accessing'! prevFigure current := current - 1. current < 1 ifTrue: [ current := self figures size ].! ! !AthensDemoMorph methodsFor: 'drawing' stamp: 'IgorStasenko 3/30/2012 18:22'! render surface drawDuring: [:canvas | surface clear. canvas pathTransform loadIdentity. canvas setPaint: Color lightGray; drawShape: (0@0 corner: self extent). self perform: (self figures at: current) with: canvas ]. ! ! !AthensDemoMorph methodsFor: 'figures' stamp: 'IgorStasenko 3/30/2012 16:42'! roundedRectanglePathOn: aCanvas ^ aCanvas createPath: [:builder | builder absolute; moveTo: 70@100; lineTo: 330@100; cwArcTo: 350@120 angle: 90 degreesToRadians; lineTo: 350@280; cwArcTo: 330@300 angle: 90 degreesToRadians; lineTo: 70@300; cwArcTo: 50@280 angle: 90 degreesToRadians; lineTo: 50@120; cwArcTo: 70@100 angle: 90 degreesToRadians ]. ! ! !AthensDemoMorph methodsFor: 'accessing' stamp: 'FernandoOlivero 3/30/2012 15:20'! step frame := frame + 1. self changed! ! !AthensDemoMorph methodsFor: 'accessing' stamp: 'FernandoOlivero 3/30/2012 15:17'! stepTime ^ 0! ! !AthensDemoMorph methodsFor: 'drawing' stamp: 'IgorStasenko 3/30/2012 16:52'! wheelColor ^ Color brown darker! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 18:27'! circle ^ circle ! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:16'! defaultExtent ^ 800@800! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 18:21'! drawCircles: canvas canvas pathTransform restoreAfter: [ canvas pathTransform scaleBy: 0.5 . canvas setPaint: Color black; setShape: self circle; draw. canvas pathTransform scaleBy: 0.8. canvas setPaint: Color white; draw. canvas pathTransform scaleBy: 0.8. canvas setPaint: Color black; draw ]! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 18:22'! drawOn: aCanvas self render. aCanvas drawImage: surface asForm at: self bounds origin! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:33'! drawSpike: canvas | dist | dist := (canvas pathTransform transform: 1@0) - (canvas pathTransform transform: 0@0). dist r < 2 ifTrue: [ ^ self ]. canvas setPaint: (Color black alpha: 0.5); drawShape: spike. canvas pathTransform restoreAfter: [ canvas pathTransform translateX: 0 Y: 1; scaleBy: 0.5 + ((frame *0.1) sin * 0.1 ). canvas pathTransform rotateByDegrees: -180. 1 to: 2 do:[ :i | canvas pathTransform rotateByDegrees: 120 + ((frame * 0.1) cos * 20). canvas pathTransform restoreAfter: [ self drawSpike: canvas. ] ]. self drawCircles: canvas ] ! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:31'! initialize super initialize. self extent: self defaultExtent. surface := AthensCairoSurface extent: self extent. circle := surface createPath: [:builder | builder absolute; moveTo: -1 @ 0 ; ccwArcTo: 0@ 1 angle: 90 degreesToRadians ; ccwArcTo: 1@0 angle: 90 degreesToRadians ; ccwArcTo: 0@ -1 angle: 90 degreesToRadians ; ccwArcTo: -1@0 angle: 90 degreesToRadians ]. spike := surface createPath: [:builder | builder absolute; moveTo: -0.1 @ 0; lineTo: -0.05 @ 1; lineTo: 0.05 @ 1; lineTo: 0.1 @ 0 ]. frame := 1. self startStepping. ! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/3/2012 16:54'! render surface drawDuring: [:canvas | canvas pathTransform loadIdentity. surface clear. " canvas setPaint: Color white; drawShape: (0@0 corner: self extent ). " canvas pathTransform translateX: self extent x *0.5 Y: self extent y * 0.5; scaleBy: 160. canvas pathTransform rotateByDegrees: (frame * 0.5 + ((frame *0.1 + 1.7) cos * 5)). 1 to: 3 do:[ :i | canvas pathTransform rotateByDegrees: 120. self drawSpike: canvas. ]. self drawCircles: canvas ]. ! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:18'! step frame := Time millisecondClockValue / 100. self changed! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:12'! stepTime ^ 0! ! !Morph methodsFor: '*Athens-Examples' stamp: 'IgorStasenko 5/6/2013 18:08'! openInSceneView ^ AthensSceneView new scene: (AthensMorphScene new morph:self); openInWindow! ! !AthensMorphScene methodsFor: 'accessing' stamp: 'IgorStasenko 5/6/2013 18:06'! morph ^ morph! ! !AthensMorphScene methodsFor: 'accessing' stamp: 'IgorStasenko 5/6/2013 18:06'! morph: anObject morph := anObject! ! !AthensMorphScene methodsFor: 'accessing' stamp: 'IgorStasenko 5/6/2013 18:09'! renderOn:aCanvas morph fullDrawOnAthensCanvas: aCanvas! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! box ^ box! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! box: anObject box := anObject! ! !AthensSimpleTreeNode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:10'! children ^ children! ! !AthensSimpleTreeNode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:10'! children: aCollection children := aCollection! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:28'! color ^ color ! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:29'! color: aColor color := aColor! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! extent ^ extent! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! extent: anObject extent := anObject! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:38'! height ^ extent y! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:12'! layoutHorizontally: center | pos | "position ourselves in the middle X" originX := center - (self width * 0.5). "childs" pos := center - (self layoutWidth *0.5). children do: [ :each | each layoutHorizontally: pos + (each layoutWidth *0.5). pos := pos + each layoutWidth + self spacingBetweenChilds. ]! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:16'! layoutWidth ^ layoutWidth ifNil: [ | childWidth | childWidth := 0. children isEmpty ifFalse: [ children do: [ :each | childWidth := childWidth + each layoutWidth ]. childWidth := childWidth + (self spacingBetweenChilds * (children size-1)). ]. layoutWidth := self width max: childWidth. ]. ! ! !AthensSimpleTreeNode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 23:55'! midBottom ^ originX +(extent x *0.5) @ (originY + extent y)! ! !AthensSimpleTreeNode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 23:55'! midTop ^ originX +(extent x *0.5) @ originY ! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:47'! originX ^ originX! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:47'! originY ^ originY! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 23:13'! originY: aNumber originY := aNumber! ! !AthensSimpleTreeNode methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2013 00:32'! renderOn: aCanvas aCanvas setPaint: color. aCanvas drawShape: (originX @ originY extent: extent). " children do: [ :each | each renderOn: aCanvas ]. [ ^ self ] value. " children do: [ :each | | path | "we cache the path connecting each child and its parent, to not recreate it each time" path := aCanvas cacheAt: each ifAbsentPut: [ | midTop midBot | midTop := self midBottom. midBot := each midTop. aCanvas createPath: [:builder | builder absolute; moveTo: self midBottom; curveVia: midTop x@midBot y and: midBot x@ midTop y to: midBot "lineTo: each midTop" ]]. aCanvas setStrokePaint: (Color red alpha:0.5). aCanvas drawShape: path. each renderOn: aCanvas ]! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:37'! spacingBetweenChilds ^ 10! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! subject ^ subject! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:09'! subject: anObject subject := anObject! ! !AthensSimpleTreeNode methodsFor: 'accessing' stamp: 'IgorStasenko 5/3/2013 22:38'! width ^ extent x! ! !AthensSurfaceExamples commentStamp: 'IgorStasenko 1/17/2012 16:42' prior: 40600930! AthensCairoSurfaceExamples example1. AthensCairoSurfaceExamples example2. AthensBalloonSurfaceExamples example6.! !AthensBalloonSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'sig 2/29/2012 21:37'! newSurface: extent ^ AthensBalloonSurface extent: extent! ! !AthensCairoSurfaceExamples commentStamp: 'FernandoOlivero 4/18/2012 13:59' prior: 40601131! self example1! !AthensCairoSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 01:02'! exampleInterop " self exampleInterop Test the interoperability with bitblt. A cairo image surface bits are exposed to bitblt operations via surface plugin. " | surf | surf := self newSurface: 100@100. surf asForm getCanvas fillRectangle: (0@0 corner: 50@50) color: Color red. surf markDirty. surf drawDuring: [:can | can pathTransform loadIdentity. can pathTransform translateX: 30 Y: 30. can pathTransform rotateByDegrees: 35. can setPaint: (Color red). can setShape: (-20@ -20 corner: 20@ 20). 2 timesRepeat: [ can draw. can setPaint: (Color green alpha:0.5)] ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensCairoSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 2/6/2012 15:29'! newSurface: extent ^ AthensCairoSurface extent: extent! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 20:09'! draw2Strings " self subclasses anyOne exampleDrawText " | surf font1 font2 ascent advance | font1 := LogicalFont familyName: 'Arial' pointSize: 10. font2 := LogicalFont familyName: 'Tahoma' pointSize: 20. ascent := font1 getPreciseAscent max: font2 getPreciseAscent. surf := self newSurface: 600@200. surf drawDuring: [:can | surf clear: Color white. can pathTransform loadIdentity. can pathTransform translateX: 30 Y: 30; scaleBy: 1.9. can setPaint: (Color black). can setFont: font1. can pathTransform translateX: 0 Y: ascent. advance := can drawString: 'Keep '. can setFont: font2. "The #drawString: method answers a cumulative advance of rendered string, so by translating origin with advance, we can draw another string on 'same' line " can pathTransform translateBy: advance. advance := can drawString: 'IT'. can setFont: font1. can pathTransform translateBy: advance. can drawString: 'in mind.'. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 20:09'! drawFontMetrics " self subclasses anyOne exampleDrawText " | surf font | font := LogicalFont familyName: 'Arial' pointSize: 10. surf := self newSurface: 400@400. surf drawDuring: [:can | surf clear: Color white. can pathTransform loadIdentity. can pathTransform translateX: 30 Y: 30; scaleBy: 20. can setPaint: (Color r:1 g:0.9 b:0.9); drawShape: (0@0 corner: 400@ (font getPreciseHeight)). can setPaint: (Color r: 0.9 g: 0.9 b: 1); drawShape: (0@0 corner: 400@ (font getPreciseAscent+font getPreciseDescent)). (can setStrokePaint: Color green) width: 0.05. can drawShape: (can createPath: [:builder | builder moveTo: 0@0; lineTo: 0@font getPreciseAscent ] ). (can setStrokePaint: Color red) width: 0.05. can drawShape: (can createPath: [:builder | builder moveTo: 0@font getPreciseAscent; lineTo: 0@font getPreciseDescent ] ). (can setStrokePaint: Color blue) width: 0.05. can drawShape: (can createPath: [:builder | builder moveTo: 0@font getPreciseAscent; lineTo: 400@0 ] ). can setFont: font. can setPaint: (Color black). can pathTransform translateX: 0 Y: (font getPreciseAscent). can drawString: 'yh'. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/13/2012 16:24'! example1 " self subclasses anyOne example1 " | surf | surf := self newSurface: 100@100. surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can pathTransform translateX: 30 Y: 30. can pathTransform rotateByDegrees: 35. can setPaint: (Color red). can setShape: (-20@ -20 corner: 20@ 20). 2 timesRepeat: [ can draw. can setPaint: (Color green alpha:0.5)] ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/21/2012 18:58'! example10 " draw a rounded rectangle, using the arc segments AthensCairoSurfaceExamples example10. " | surf | surf := self newSurface: 440@440. surf drawDuring: [:can | | p | surf clear. can pathTransform scaleBy: 3; translateX: 10 Y: 10. p:= can createPath: [:path | |halfPi | halfPi := Float pi /2. path relative; moveTo: 10@0; lineTo: 40@0; ccwArcTo: 10@10 angle: halfPi; lineTo: 0@40; cwArcTo: -10@10 angle: halfPi; lineTo: -40@0; cwArcTo: -10@ -10 angle: halfPi; lineTo: 0@ -40; ccwArcTo: 10@ -10 angle: halfPi]. can setShape: p. can setPaint: Color white. can draw. can setStrokePaint: Color red. can draw ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'sig 2/29/2012 22:04'! example2 " Draw a path on surface. self example2. " | surf | surf := self newSurface: 100@100. surf drawDuring: [:can | surf clear. can setPaint: Color blue. can drawShape: ( can createPath: [:path | path absolute; lineTo: 50@0; lineTo: 50@50; lineTo: 0@50 ]) ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/28/2012 14:03'! example3 " Draw simple filled path, changing the transformation and colors to get some animated effects. self example3 " | surf | surf := self newSurface: 800@800. surf drawDuring: [:can | | transform path | can setPaint: Color blue. can pathTransform translateX: 200 Y: 200. can pathTransform scaleBy: 6. path := can createPath: [:pathbuilder | pathbuilder absolute; moveTo: -25 @ -25; curveVia: 25@ -25 to: 25@25; curveVia: -25@25 to: -25@ -25 ]. 1 to: 1000 do: [:i | can setPaint: Color random. can pathTransform restoreAfter: [ can pathTransform rotateByDegrees: i*5. can pathTransform scaleBy: (1- ( i/2000)). can drawShape: path. ]. Display getCanvas drawImage: surf asForm at: 0@0. ] ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/30/2012 11:29'! example3stroke " Draw simple stroke path, changing the transformation and colors to get some animated effects. AthensCairoSurfaceExamples example3stroke " | surf | surf := self newSurface: 400@400. surf drawDuring: [:can | | transform path | (can setStrokePaint: Color blue) width: 1. can pathTransform translateX: 200 Y: 200. can pathTransform scaleBy: 1. path := can createPath: [:pathbuilder | pathbuilder absolute; moveTo: -25 @ -25; curveVia: 25@ -25 to: 25@25; curveVia: -25@25 to: -25@ -25 ]. 1 to: 1000 do: [:i | (can setStrokePaint: Color random) width: 1. can pathTransform restoreAfter: [ can pathTransform rotateByDegrees: i*5. can pathTransform scaleBy: (1- ( i/2000)). can drawShape: path. ]. Display getCanvas drawImage: surf asForm at: 0@0. ] ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'sig 2/29/2012 22:21'! example4 " This example demostrates that same path could be reused multiple times when drawing. First, we creating a path, and later we can use it in #drawShape: command. " | surf path | surf := self newSurface: 100@100. path := surf createRectanglePath: (0@ 0 corner: 20@ 20). surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can setPaint: (Color red). can pathTransform translateX: 5 Y: 5. can drawShape: path. can setPaint: (Color blue). can pathTransform translateX: 5 Y: 5. can drawShape: path. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/7/2012 17:28'! example5 " draw a hollow rectangle (frame) using lineTo/moveTo commands, with path, consisting of two contours: outer and inner one. Note how #moveTo: command implicitly starts new contour when inssued in the middle of command chain. " | surf | surf := self newSurface: 100@100. surf drawDuring: [:can | surf clear. can setPaint: Color blue. can drawShape: ( can createPath: [:path | path absolute; lineTo: 50@0; lineTo: 50@50; lineTo: 0@50; moveTo: 10@10; lineTo: 10@40; lineTo: 40@40; lineTo: 40@10 ]) ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:13'! example6 "Draw two rectangles, filled by linear gradient. Note that it should produce same rectangles with exact same fills, because gradient paint coordinates are affected by pathTransform matrix. self example6 " | surf paint | surf := self newSurface: 100@200. paint := surf createLinearGradient: { 0->Color red . 1->Color green } start: 0@0 stop: 50@50. surf drawDuring: [:can | surf clear. can setPaint: paint. can drawShape: (0@0 corner: 50@50). can pathTransform translateX: 50 Y: 50; rotateByDegrees: 30. can drawShape: (0@0 corner: 50@50). ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:13'! example6point1 "Draw two rectangles, filled by linear gradient. Note that it should produce same rectangles with exact same fills, because gradient paint coordinates are affected by pathTransform matrix. self example6 " | surf paint | surf := self newSurface: 100@200. paint := surf createLinearGradient: { 0->Color red . 1->Color green } start: 0@0 stop: 30@30. surf drawDuring: [:can | surf clear. can setPaint: paint. can drawShape: (0@0 corner: 50@50). ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:14'! example6stroke " self example6stroke Draw two rectangles, stoked by linear gradient. Note that it should produce same rectangles with exact same fills, because gradient paint coordinates are affected by pathTransform matrix. " | surf paint | surf := self newSurface: 100@100. paint := surf createLinearGradient: { 0->Color red . 1->Color green } start: 0@0 stop: 50@50. surf drawDuring: [:can | | stroke | surf clear. stroke := can setStrokePaint: paint. stroke width: 4. can drawShape: (0@0 corner: 50@50). can pathTransform translateX: 50 Y: 50. can drawShape: (0@0 corner: 50@50). ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/12/2013 10:14'! example7 "Draw two rectangles, filled by linear gradient. Rotate the gradient in a loop. Note that it should produce same rectangles with exact same fills, because gradient paint coordinates are affected by pathTransform matrix. " | surf paint | surf := self newSurface: 100@100. paint := surf createLinearGradient: { 0->Color red . 1->Color green } start: 0@0 stop: 50@50. surf drawDuring: [:can | 1 to: 10000 do: [:i | surf clear. can pathTransform loadIdentity. can paintTransform loadIdentity translateX: 15 Y: 15; rotateByDegrees: (i/10000 * 360). can setPaint: paint. can drawShape: (0@0 corner: 50@50). can pathTransform translateX: 50 Y: 50. can drawShape: (0@0 corner: 50@50). Display getCanvas drawImage: surf asForm at: 0@0 ]. ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/27/2012 12:18'! example8 "Draw a rectangle filled by radial gradient. " | surf paint | surf := self newSurface: 200@200. paint := surf createRadialGradient: { 0->Color red . 1->Color green } center: 100@100 radius: 100. surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can setPaint: paint. can drawShape: (0@0 corner: 200@200). Display getCanvas drawImage: surf asForm at: 0@0 ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/11/2012 02:19'! example9 " Fill the rectangle using image paint. " | surf paint f bf | surf := self newSurface: 200@200. surf form getCanvas fillRectangle: surf form boundingBox color: Color white. f := Form extent: 10@10 depth: 32. f getCanvas fillRectangle: (0@0 corner: 5@5) color: (Color red alpha: 0.1). f getCanvas fillRectangle: (5@5 corner: 10@10) color: (Color green alpha: 0.1). paint := surf createFormPaint: f. surf drawDuring: [:can | can setPaint: paint. can drawShape: (0@0 corner: 100@200). Display getCanvas drawImage: surf asForm at: 0@0 ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/7/2012 23:06'! exampleClip " self subclasses anyOne exampleClip " | surf | surf := self newSurface: 100@100. surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can setPaint: (Color blue). can drawShape: (0@0 corner: 100@ 100). can pathTransform translateX: -20 Y: -20. can clipBy: (20@20 corner: 80@80) during: [ can pathTransform translateX: 20 Y: 20. can setPaint: (Color red). can drawShape: (0@0 corner: 100@ 100). ] ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 18:20'! exampleDrawForm | surf surf2 font | surf2 := self newSurface: 100@100. surf2 drawDuring: [:c | c setPaint: (Color red alpha: 0.5) . c drawShape: (0@0 corner: 100@100). ]. surf := self newSurface: 300@300. surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can setShape: (0@0 corner: 300@300). can setPaint: Color black. can draw. can pathTransform translateX: 30 Y: 30. can setPaint: surf2. can draw. can pathTransform translateX: 30 Y: 30. can draw. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2012 18:25'! exampleDrawForm2 | surf font | surf := self newSurface: 300@300. surf drawDuring: [:can | surf clear. can pathTransform loadIdentity. can setShape: (0@0 corner: 300@300). can setPaint: Color black. can draw. can pathTransform scaleBy: 0.5; translateX: 60 Y: 60. (can setPaint: ThemeIcons helpIcon) repeat. can paintTransform scaleBy: 0.1; rotateByDegrees: 30. can draw. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/9/2012 19:18'! exampleDrawText " self subclasses anyOne exampleDrawText " | surf font | font := LogicalFont familyName: 'Arial' pointSize: 20. surf := self newSurface: 300@100. surf drawDuring: [:can | "clear background" surf clear: Color white. "set font and color" can setFont: font. can setPaint: Color black. "translate an origin by font's ascent, otherwise we will see only things below baseline" can pathTransform translateX: 0 Y: (font getPreciseAscent). can drawString: 'Hello Athens!!'. ]. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 20:15'! exampleStrokeRect " Draw a frame rectangle, rotate & transform it in a loop self exampleStrokeRect " | surf | surf := self newSurface: 400@400. surf drawDuring: [:can | | path | can pathTransform translateX: 200 Y: 200. can pathTransform scaleBy: 8. 1 to: 1000 do: [:i | (can setStrokePaint: Color random) width: 1. can pathTransform restoreAfter: [ can pathTransform rotateByDegrees: i*5. can pathTransform scaleBy: (1- ( i/2000)). surf clear. can drawShape: (0@0 corner: 25@25) ]. Display getCanvas drawImage: surf asForm at: 0@0. ] ]. ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/31/2012 00:56'! exampleUseForm | surf font form | form := Form extent: 100@100 depth: 32. form getCanvas fillRectangle: (0@0 corner: 30@30) color: (Color red). form getCanvas fillRectangle: (10@10 corner: 40@40) color: (Color green). form getCanvas fillRectangle: (20@20 corner: 50@50) color: (Color blue). surf := AthensCairoSurface fromForm: form. Display getCanvas drawImage: surf asForm at: 0@0 ! ! !AthensSurfaceExamples class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/20/2011 15:35'! newSurface: extent self subclassResponsibility! ! !AthensTigerShape methodsFor: 'as yet unclassified'! addFill fill := true.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! addStroke stroke := true.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! capStyle: cap capStyle := cap.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! fillPaint: aColor fillPaint := aColor! ! !AthensTigerShape methodsFor: 'as yet unclassified'! fillRule ^ fillRule! ! !AthensTigerShape methodsFor: 'as yet unclassified'! fillRule: rule fillRule := rule.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! initialize fill := stroke := false.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! joinStyle: join joinStyle := join.! ! !AthensTigerShape methodsFor: 'as yet unclassified'! miterLimit: lim miterLimit := lim.! ! !AthensTigerShape methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/27/2012 11:26'! prepareFor: surface fill ifTrue: [ fillPaint := surface createSolidColorPaint: fillPaint. ]. stroke ifTrue: [ strokePaint := surface createStrokePaintFor: (surface createSolidColorPaint: strokePaint). ]. ! ! !AthensTigerShape methodsFor: 'as yet unclassified'! renderOn: can fill ifTrue: [ can setPaint: fillPaint. can drawShape: path. ]. stroke ifTrue: [ can setStrokePaint: strokePaint. can drawShape: path. ]! ! !AthensTigerShape methodsFor: 'as yet unclassified'! setPath: anAthensCairoPath path := anAthensCairoPath! ! !AthensTigerShape methodsFor: 'as yet unclassified'! strokePaint: aColor strokePaint := aColor! ! !AthensTigerShape methodsFor: 'as yet unclassified'! strokeWidth: w strokeWidth := w! ! !AthensTreeView class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 23:21'! openOn: root extentBlock: extBlock childsBlock: childsBlock | scene | scene := self new root: root extentBlock: extBlock childsBlock: childsBlock. ^ AthensSceneView new scene: scene; openInWindow.! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:24'! buildSubtreeFor: aNodeObject level: aLevel | node childs | node := AthensSimpleTreeNode new. node subject: aNodeObject; extent: (nodeExtentBlock value: aNodeObject). childs := (nodeChildsBlock value: aNodeObject) collect: [ :each | self buildSubtreeFor: each level: aLevel+1 ]. node children: childs. (self rowAt: aLevel) add: node. ^ node ! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 23:30'! layOutGeometry "first do a vertical layout" | origin | origin := 0. rows do: [:row | | rowHeight color | rowHeight := 0. color := Color random. row do: [ :node | node originY: origin. node color: color. rowHeight := rowHeight max: node height. ]. origin := origin + rowHeight + self spacingBetweenRows. ]. "now do a horizontal one" root layoutHorizontally: 0.! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/4/2013 00:34'! renderOn: aCanvas aCanvas surface clear: Color white. root renderOn: aCanvas! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:22'! root: aRootObject root := self buildSubtreeFor: aRootObject level: 1. self layOutGeometry! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 23:14'! root: aRootObject extentBlock: extBlock childsBlock: childsBlock nodeExtentBlock := extBlock. nodeChildsBlock := childsBlock. root := self buildSubtreeFor: aRootObject level: 1. self layOutGeometry! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:55'! rowAt: aLevel rows ifNil: [ rows := OrderedCollection new ]. [ aLevel > rows size ] whileTrue: [ rows add: OrderedCollection new ]. ^ rows at: aLevel! ! !AthensTreeView methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/3/2013 22:59'! spacingBetweenRows ^ 30! ! !CurveWorkshop methodsFor: 'colors' stamp: 'IgorStasenko 4/18/2013 12:35'! curveColor ^ Color red! ! !CurveWorkshop methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/18/2013 06:08'! draw ! ! !CurveWorkshop methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/18/2013 12:36'! drawOn: canvas self drawQuadFrom: 10@200 via: 50@50 to: 200@200 on: canvas! ! !CurveWorkshop methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/18/2013 17:48'! drawQuadFrom: pt1 via: pt2 to: pt3 on: canvas | curve triangle middleRay curveBlock | curveBlock := [ :builder | builder absolute; moveTo: pt1; curveVia: pt2 to: pt3 ]. curve := canvas createPath: curveBlock. canvas setStrokePaint: self curveColor. canvas drawShape: curve. triangle := canvas createPath: [ :builder | builder absolute; moveTo: pt1; lineTo: pt2; lineTo: pt3; lineTo: pt1. ]. canvas setStrokePaint: self triangleColor. canvas drawShape: triangle. middleRay := canvas createPath: [ :builder | builder absolute; moveTo: pt2; lineTo: (pt1 + pt3)/2 ]. canvas setStrokePaint: self middleRayColor. canvas drawShape: middleRay. triangle := AthensSimplePathBuilder createPath: curveBlock. triangle := canvas surface createPath: [ :builder | AthensCurveFlattener new dest: builder; flattenPath: triangle transform: (canvas pathTransform). ]. canvas setStrokePaint: Color yellow; drawShape: triangle. ! ! !CurveWorkshop methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/18/2013 12:39'! initialize! ! !CurveWorkshop methodsFor: 'colors' stamp: 'IgorStasenko 4/18/2013 12:35'! middleRayColor ^ Color blue! ! !CurveWorkshop methodsFor: 'colors' stamp: 'IgorStasenko 4/18/2013 12:35'! triangleColor ^ Color green! ! !VGTigerDemo commentStamp: '' prior: 40601198! self runDemo ! !VGTigerDemo class methodsFor: 'as yet unclassified'! checkDataSizes " VGTigerDemo checkDataSizes " self assert: (self commands size = self tigerCommandCount). self assert: (self tigerPointsCount = self tigerPoints size).! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! commands " VGTigerDemo commands " | pt str | pt := 1. str := String new: self tigerCommandCount. "merge everything into a single string" self tigerCommands do: [:sub | 0 to: sub size-1 do: [:i | str at: pt+i put: (sub at: i+1). ]. pt := pt + sub size. ]. ^ str! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! runDemo ^ self new runDemo! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerCommandCount ^ 4142! ! !VGTigerDemo class methodsFor: 'huge data'! tigerCommands ^ #( 'FNBMMCCCENS' 'BMMCCCEFNBMMCCCENSBM' 'MCCCEFNBMMCCCENSBMMC' 'CCEFNBMMCCCENSBMMCCC' 'EFNBMMCCCENSBMMCCCEF' 'NBMMCCCENSBMMCCCEFNB' 'MMCCCENSBMMCCCEFNBMM' 'CCCENSBMMCCCEFNBMMCC' 'CENSBMMCCCEFNBMMCCCE' 'NSBMMCCCEFNBMMCCCENS' 'BMMCCCEFNBMMCCCENSBM' 'MCCCEFNBMMCCCCCCCCLC' 'LCLCCCCCLCCLCCCCCCCL' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCLLCCLCCCC' 'LCCCCCCCCCCCCCCCLNSB' 'MMCCCCCCCCLCLCLCCCCC' 'LCCLCCCCCCCLCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCLLCCLCCCCLCCCCCCC' 'CCCCCCCCLFNBMMCCCCCC' 'LCLCCCCCCCCCCCCLCCCC' 'CCCCCCCCCCCCCCCCENSB' 'MMCCCCCCLCLCCCCCCCCC' 'CCCLCCCCCCCCCCCCCCCC' 'CCCCEFNBMMCCCCLCCCCC' 'CCCCCCLFNBMMCCCCCCCC' 'LCCCCLCCCEFNBMMCCCCC' 'CCCLCCCCLCCCEFNBMMCC' 'CCCCCCLCCCCLCCCEFNBM' 'MCCCCCCCCLCCCCLCCCEF' 'NBMMCCCCCCCCLCCCCLCC' 'CEFNBMMCCCCCCCCLCCCC' 'LCCCEFNBMMCCCCCCCCLC' 'CCCLCCCEFNBMMCCCCCCC' 'CLCCCCLCCCEFNBMMCCCC' 'CCCCLCCCCLCCCEFNBMMC' 'CCCCCCCLCCCCLCCCEFNB' 'MMCCCCLCCCCCCCCCCCLF' 'NBMMCCCCCEFNBMMCCCCC' 'CEFNRMMCLCLCCCCLCLCC' 'EFNRMMCCCEFNRMMCCCEF' 'NRMMCCCEFNRMMCCCEFNR' 'MMCCCEFNRMMLCCCCCCCC' 'CCCCCCCCCCCCCLFNBMMC' 'CCLLCCCCCCCCEFNBMMCC' 'CCCCEFNBMMCCCCLFNBMM' 'CCCCCCCCCCCEFNBMMCCC' 'LCCCCCCENSBMMCCCLCCC' 'CCCEFNBMMCCCCCENSBMM' 'CCCCCEFNBMMCCCCCCCEN' 'SBMMCCFNBMMCCCENSBMM' 'CCCEFNBMMCCCENSBMMCC' 'CEFNBMMCCCENSBMMCCCE' 'FNBMMCCCENSBMMCCCEFN' 'BMMCCCENSBMMCCCEFNBM' 'MCCCENSBMMCCCENSBMMC' 'CCNSBMMCCCFNBMMCCCCC' 'ENSBMMCCCCCENSBMMCNS' 'BMMCFNBMMCCCCEFNBMMC' 'CCCCENSBMMCCCCCEFNBM' 'MCCCCCENSBMMCCCCCEFN' 'BMMCCCCENSBMMCCCCEFN' 'BMMCCCCCCCCEFNBMMCCC' 'CENSBMMCCCCEFNBMMCCC' 'ENSBMMCCCEFNBMMCCCEN' 'SBMMCCCEFNBMMCCCENSB' 'MMCCCEFNBMMCCCENSBMM' 'CCCEFNBMMLCCCLFNBMMC' 'CCCCEFNBMMCCCCCCCCEF' 'NBMMCCCCCCCCEFNBMMCC' 'CCCCCCEFNBMMCCCCCCCC' 'EFNBMMCCCCCCCCEFNBMM' 'CCCCCCCCEFNBMMCCCCEF' 'NBMMCCCCLCCCCEFNBMMC' 'CCCEFNBMMCCCCEFNBMMC' 'CEFNBMMCCCCEFNBMMCCC' 'CCLCCCCLCCEFNBMMCCCC' 'CLCCCCLCCEFNBMMCCLCC' 'CCLCCCCCEFNBMMCCLCCC' 'CLCCCCCEFNBMMCCLCCCC' 'LCCCCCEFNBMMCCCCCLCC' 'CCLCCEFNBMMCCCEFNBMM' 'CCCEFNBMMCCCEFNBMMCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'EFNBMMCCCCLCCCCCLFNB' 'MMCCCCCCEFNBMMCCCCCC' 'EFNBMMCCCCCCEFNBMMCC' 'CCCCEFNBMMCCCCCCEFNB' 'MMCCCCCCEFNBMMCCCCCL' 'CCCCCCCCCCCCCCCCLFNR' 'MMCCCEFNRMMCCLLCEFNR' 'MMCCCEFNRMMCCCCEFNRM' 'MCCCEFNBMMCLLLCCCCCC' 'CCCCCCCCCLCCCCCLCCCC' 'CCCCLCCCLLCLCCCCCCCC' 'CCCCCCCCLCCEFNBMMCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCEFNBMMCCCCC' 'CCCCCCEFNBMMCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCEFNBMMCCCCCC' 'CCCCCCCCCCCCCCCEFNBM' 'MCCCCCCCCCCCCCCCCCCC' 'CCCCEFNBMMCCCCCCCCEF' 'NBMMCCCCEFNBMMCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCLCCCCCCCCLLLCCCCC' 'CLLCCCCCCLLLLNSRMMCC' 'NSRMMCCNSRMMCCCNSRMM' 'CCCFNBMMCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCLCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCLCCCCCCCCCCCCCCCCL' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCEFNRM' 'MCCCCCEFNBMMCCCCEFNB' 'MMCCCCEFNBMMCCCCEFNB' 'MMCCCCCCCCCCCLCCCEFN' 'BMMCCCCCCCCCCCCEFNBM' 'MCCCCCCCCCCCCFNBMMCC' 'CCCCCCCCCCCCCCCCLFNB' 'MMCCCCLFNBMMCLCCCCCC' 'CCCEFNBMMCCCCCCCCCCC' 'CCCCCCCCCCCCCCCEFNBM' 'MCCCCCCCCCCCCCCCCCEF' 'NBMMCCCCCCCCCCCCCCCC' 'CCCEFNBMMCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'CCCCCCCCCCCCCCCCCCCC' 'EFNBMMCCCLCCCCCCCCCL' 'LCCCCLLCCCCCCLCFNBMM' 'CLCCEFNBMMCCCCCEFNBM' 'MCCCLCCCCLFNBMMCCCCC' 'CEFNBMMCCCCCCCCCCCCC' 'CCCCCCCCCEFNBMMCCCCC' 'CCCCEFNBMMCCCCCCCCCC' 'CCCEFNBMMCCCCCCCCCEF' 'NBMMCCCCCCCCCEFNBMMC' 'CCCCCCCCEFNBMMCCLFNB' 'MMCCLFNBMMCCLFNBMMCC' 'LFNBMMCCLFNBMMCCLFNB' 'MMCCLFNBMMCCLFNBMMCC' 'LFNBMMCCLFNBMMCCLFNB' 'MMCCLFNBMMCCLFNBMMCC' 'LFNBMMCCLFNBMMCCLFNB' 'MMCCCEFNBMMCCCEFNBMM' 'LLCCEFNBMMCCCCCCCCCC' 'CCCCCCCCCCCCCCCCEFNB' 'MMCCCCCCCCCEFNRMMCCC' 'ENSRMMCCCEFNRMMCCCEN' 'SRMMCCCEFNRMMCCCENSR' 'MMCCCEFNRMMCCCENSRMM' 'CCCEFNRMMCCCENSRMMCC' 'CEFNRMMCCCENSRMMCCCE' 'FNRMMCCCENSRMMCCCEFN' 'RMMCCCENSRMMCCCEFNBM' 'MCCCCCCCCCEFNBMMCCCC' 'CCCCCEFNBMMCCLFNBMMC' 'CLFNBMMCCLFNBMMCCLFN' 'BMMCCLFNBMMCCLFNBMMC' 'CLFNBMMCCLFNBMMCCLFN' 'RMMCCCENSRMMCCCEFNBM' 'MCCCCCCCCEFNRMMCCCEN' 'SRMMCCCEFNRMMCCCENSR' 'MMCCCEFNRMMCCCENSRMM' 'CCCEFNRMMCCCENSRMMCC' 'CEFNRMMCCCENSRMMCCCE' 'FNRMMCCCENSRMMCCCEFN' 'RMMCCCENSRMMCCCEFNRM' 'MCCCENSRMMCCCEFNRMMC' 'CCENSRMMCCCEFNRMMCCC' 'ENSRMMCCCEFNRMMCCCEN' 'SRMMCCCEFNRMMCCCENSR' 'MMCCCEFNRMMCCCENSRMM' 'CCCEFNRMMCCCENSRMMCC' 'CEFNRMMCCCENSRMMCCCE' 'FNRMMCCCENSRMMCCCEFN' 'RMMCCCENSRMMCCCEFNRM' 'MCCCENSRMMCCCEFNRMMC' 'CCENSRMMCCCEFNRMMCCC' 'ENSRMMCCCEFNRMMCCCEN' 'SRMMCCCEFNRMMCCCENSR' 'MMCCCEFNRMMCCCENSRMM' 'CCCEFNRMMCCCENSRMMCC' 'CEFNRMMCCCENSRMMCCCE' 'FNBMMCCLFNBMMCCLFNBM' 'MCCLFNBMMCCLFNBMMCCL' 'FNBMMCCLFNRMMCCCEFNR' 'MMCCCCCCCEFNRMMCCCCC' 'CCEFNRMMCCCCCCCCCEFN' 'RMMCCCCCEFNRMMCCCCCC' 'CCEFNRMMCCCCEFNRMMCC' 'CCCCCCCCCCCCCCCEFNRM' 'MCCCCEFNRMMCCCEFNRMM' 'CCCEFNRMMCCCEFNRMMCC' 'CCCCEFNRMMCCCEFNRMMC' 'CCCEFNRMMCCCCEFNRMMC' 'CEFNRMMCCCCEFNRMMCCC' 'EFNRMMCCCEFNRMMCCCEF' 'NRMMLCLNSRMMLNSRMMCN' 'SRMMCNSRMMC' ).! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerMaxX ^ 612.0! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerMaxY ^ 792.0! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerMinX ^ 0.0 ! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerMinY ^ 0.0 ! ! !VGTigerDemo class methodsFor: 'huge data'! tigerPoints ^ #(10 0 1 1 1 1 1 1 5 85.25 487.75 85.25 487.75 85.5742 485.199 84.25 484.746 83.7617 485.242 65.6641 538.125 43.2461 535.746 43.2422 535.746 62.6445 543.746 85.25 487.75 10 0.1892 0 0 0 0 0 0 5 85.25 487.75 85.25 487.75 85.5742 485.199 84.25 484.746 83.7617 485.242 65.6641 538.125 43.2461 535.746 43.2422 535.746 62.6445 543.746 85.25 487.75 10 0 1 1 1 1 1 1 5 89.2461 490.75 89.2461 490.75 88.7422 488.613 88.2461 488.746 87.0508 489.27 88.0234 545.156 66.2461 550.746 66.2461 550.742 87.0977 551.469 89.2461 490.75 10 0.1892 0 0 0 0 0 0 5 89.2461 490.75 89.2461 490.75 88.7422 488.613 88.2461 488.746 87.0508 489.27 88.0234 545.156 66.2461 550.746 66.2461 550.742 87.0977 551.469 89.2461 490.75 10 0 1 1 1 1 1 1 5 119.25 443.75 119.25 443.75 121.387 442.992 121.246 442.746 120.352 441.504 66.2578 455.586 56.25 435.75 56.25 435.75 59.9062 456.168 119.25 443.75 10 0.1892 0 0 0 0 0 0 5 119.25 443.75 119.25 443.75 121.387 442.992 121.246 442.746 120.352 441.504 66.2578 455.586 56.25 435.75 56.25 435.75 59.9062 456.168 119.25 443.75 10 0 1 1 1 1 1 1 5 116.246 432.75 116.246 432.75 118.539 432.383 118.25 431.746 118.023 430.641 62.25 426.965 58.25 404.75 58.25 404.75 56.0391 425.516 116.246 432.75 10 0.1892 0 0 0 0 0 0 5 116.246 432.75 116.246 432.75 118.539 432.383 118.25 431.746 118.023 430.641 62.25 426.965 58.25 404.75 58.25 404.75 56.0391 425.516 116.246 432.75 10 0 1 1 1 1 1 1 5 112.25 438.746 112.25 438.742 113.82 438.164 113.25 437.75 113.059 436.52 57.3437 441.016 50.2461 419.75 50.2461 419.75 50.9883 440.492 112.25 438.746 10 0.1892 0 0 0 0 0 0 5 112.25 438.746 112.25 438.742 113.82 438.164 113.25 437.75 113.059 436.52 57.3437 441.016 50.2461 419.75 50.2461 419.75 50.9883 440.492 112.25 438.746 10 0 1 1 1 1 1 1 5 100.246 458.746 100.246 458.746 101.527 457.406 101.25 456.746 100.121 456.262 52.0039 484.699 36.25 467.746 36.25 467.746 46.0586 487.012 100.246 458.746 10 0.1892 0 0 0 0 0 0 5 100.246 458.746 100.246 458.746 101.527 457.406 101.25 456.746 100.121 456.262 52.0039 484.699 36.25 467.746 36.25 467.746 46.0586 487.012 100.246 458.746 10 0 1 1 1 1 1 1 5 92.2461 454.75 92.2422 454.75 93.3906 452.969 93.2461 452.75 92.125 451.672 41.0976 474.484 27.25 456.746 27.25 456.746 34.9258 476.105 92.2461 454.75 10 0.1892 0 0 0 0 0 0 5 92.2461 454.75 92.2422 454.75 93.3906 452.969 93.2461 452.75 92.125 451.672 41.0976 474.484 27.25 456.746 27.25 456.746 34.9258 476.105 92.2461 454.75 10 0 1 1 1 1 1 1 5 89.2461 449.746 89.2461 449.742 90.6992 448.723 90.25 447.746 89.6211 447.262 35.9609 462.906 25.25 442.746 25.25 442.742 29.625 463.676 89.2461 449.746 10 0.1892 0 0 0 0 0 0 5 89.2461 449.746 89.2461 449.742 90.6992 448.723 90.25 447.746 89.6211 447.262 35.9609 462.906 25.25 442.746 25.25 442.742 29.625 463.676 89.2461 449.746 10 0 1 1 1 1 1 1 5 100.246 448.75 100.246 448.75 101.969 447.469 101.25 446.75 100.43 446.512 56.3516 480.887 39.2461 466.746 39.2461 466.742 50.75 483.941 100.246 448.75 10 0.1892 0 0 0 0 0 0 5 100.246 448.75 100.246 448.75 101.969 447.469 101.25 446.75 100.43 446.512 56.3516 480.887 39.2461 466.746 39.2461 466.742 50.75 483.941 100.246 448.75 10 0 1 1 1 1 1 1 5 79.25 480.746 79.25 480.746 79.6367 479.02 79.25 478.746 77.8789 478.578 46.418 524.777 25.25 516.75 25.25 516.75 42.0195 529.398 79.25 480.746 10 0.1892 0 0 0 0 0 0 5 79.25 480.746 79.25 480.746 79.6367 479.02 79.25 478.746 77.8789 478.578 46.418 524.777 25.25 516.75 25.25 516.75 42.0195 529.398 79.25 480.746 10 0 1 1 1 1 1 1 5 79.25 473.746 79.25 473.742 80.8164 471.527 80.25 470.75 79.1914 470.723 38.5078 509.051 19.25 496.75 19.25 496.75 33.2148 512.609 79.25 473.746 10 0.1892 0 0 0 0 0 0 5 79.25 473.746 79.25 473.742 80.8164 471.527 80.25 470.75 79.1914 470.723 38.5078 509.051 19.25 496.75 19.25 496.75 33.2148 512.609 79.25 473.746 10 0 1 1 1 1 1 1 5 79.25 468.75 79.25 468.75 80.8516 466.828 80.25 466.746 79.3086 465.875 35.2305 500.246 17.25 485.75 17.25 485.75 29.6289 503.301 79.25 468.75 10 0.1892 0 0 0 0 0 0 5 79.25 468.75 79.25 468.75 80.8516 466.828 80.25 466.746 79.3086 465.875 35.2305 500.246 17.25 485.75 17.25 485.75 29.6289 503.301 79.25 468.75 10 0 1 1 1 1 1 1 88 77.2461 466.746 77.7383 459.973 78.8242 452.746 80.25 449.746 80.25 449.742 76.7773 435.676 86.25 420.746 86.25 420.742 86.0195 413.238 88.2461 409.746 88.2461 409.742 92.1797 400.477 97.25 399.75 101.73 398.887 111.324 395.508 122.246 393.75 122.246 393.75 141.02 378.477 137.246 364.75 137.242 364.75 137.059 346.355 133.246 344.75 133.246 344.75 145.859 356.918 135.25 338.75 130.25 317.746 130.25 317.742 158.617 341.516 141.25 321.746 130.25 292.75 130.25 292.75 152.02 312.918 144.246 303.75 140.25 293.746 140.25 293.746 188.098 323.918 154.246 291.746 154.242 291.746 163.02 295.316 168.25 291.746 168.25 291.746 175.34 293.559 174.25 291.746 174.25 291.746 151.578 280.355 147.25 259.746 147.25 259.746 156.859 271.117 153.246 258.746 154.246 246.746 154.242 246.746 158.18 270.238 157.25 228.746 157.25 228.742 178.859 248.676 166.246 225.746 166.246 207.75 166.246 207.75 182.816 225.355 176.246 211.75 176.246 211.75 186.777 220.957 182.25 203.746 182.25 203.746 181.5 192.797 186.25 204.746 186.25 204.746 203.938 238.777 197.25 209.75 197.25 209.75 196.457 188.836 201.246 204.746 201.246 204.746 202.18 193.676 212.246 185.75 212.246 185.75 210.977 241.637 225.25 201.746 229.25 183.746 229.25 183.742 232.539 194.117 232.246 199.75 232.246 199.75 248.379 217.879 241.25 190.746 241.25 190.746 257.617 216.117 254.246 201.746 254.246 201.746 245.738 183.996 247.246 178.75 247.242 178.75 265.977 216.996 267.246 218.75 267.246 218.75 265.098 172.117 277.246 211.75 277.246 211.75 283.137 198.516 280.246 193.746 280.242 193.746 288.859 202.477 288.246 205.746 288.246 205.742 293.039 215.016 296.25 199.75 296.25 199.75 298.098 189.719 300.246 192.746 300.246 192.746 304.258 166.836 305.25 191.746 305.25 191.746 307.34 206.879 299.246 219.75 299.246 219.75 300.297 223.156 297.246 227.746 297.246 227.742 312.18 203.797 304.25 235.746 304.25 235.746 316.578 226.676 318.25 226.746 318.25 226.746 302.937 252.195 312.246 246.746 312.242 246.746 306.898 258.355 326.25 244.75 326.25 244.75 309.098 262.758 328.25 251.75 328.25 251.75 337.258 245.156 329.25 255.75 329.25 255.75 313.059 273.758 337.25 253.75 337.25 253.75 350.02 235.918 351.25 232.75 351.25 232.75 339.898 264.957 335.246 267.75 335.242 267.75 344.301 308.078 389.246 290.75 389.246 290.75 397.098 271.996 402.246 291.746 402.242 291.746 416.02 299.277 428.25 268.75 428.25 268.75 432.738 283.879 432.246 286.746 432.246 286.742 439.34 285.637 438.25 286.746 438.25 286.742 452.98 282.117 454.246 282.746 454.246 282.746 461.777 275.516 462.246 279.75 462.242 279.75 472.34 276.398 470.25 280.746 470.25 280.746 479.82 263.195 480.246 258.746 483.25 274.75 485.25 271.746 485.25 271.746 486.859 279.918 486.25 280.746 485.098 282.559 507.98 273.758 513.246 250.746 515.246 241.75 515.242 241.75 522.059 257.918 520.246 262.75 520.246 262.75 526.02 261.438 526.246 256.746 526.242 256.746 530.859 282.117 525.25 288.746 525.25 288.742 530.418 289.598 531.246 285.75 531.246 293.746 531.246 293.746 539.66 292.676 539.246 295.746 539.242 295.742 544.5 299.719 546.246 294.75 546.242 294.75 533.059 333.156 553.246 311.75 553.246 311.75 561.219 300.156 557.246 320.75 553.301 341.516 548.898 343.277 554.25 343.746 554.25 343.742 555.059 347.676 553.246 349.75 550.66 351.195 554.25 349.75 554.25 349.75 554.25 349.75 559.461 345.035 553.246 368.746 553.246 368.746 560.777 367.477 547.25 399.75 547.25 399.75 550.66 402.238 546.246 411.746 546.242 411.742 555.059 406.637 558.25 408.75 558.25 408.75 557.699 410.156 554.25 414.746 554.25 414.746 530.418 474.84 553.246 450.75 553.246 450.75 565.895 435.73 559.246 460.746 559.242 460.742 548.832 487.223 549.25 491.746 77.2461 466.746 10 1.1 0 0 0 0 0 0 88 77.2461 466.746 77.7383 459.973 78.8242 452.746 80.25 449.746 80.25 449.742 76.7773 435.676 86.25 420.746 86.25 420.742 86.0195 413.238 88.2461 409.746 88.2461 409.742 92.1797 400.477 97.25 399.75 101.73 398.887 111.324 395.508 122.246 393.75 122.246 393.75 141.02 378.477 137.246 364.75 137.242 364.75 137.059 346.355 133.246 344.75 133.246 344.75 145.859 356.918 135.25 338.75 130.25 317.746 130.25 317.742 158.617 341.516 141.25 321.746 130.25 292.75 130.25 292.75 152.02 312.918 144.246 303.75 140.25 293.746 140.25 293.746 188.098 323.918 154.246 291.746 154.242 291.746 163.02 295.316 168.25 291.746 168.25 291.746 175.34 293.559 174.25 291.746 174.25 291.746 151.578 280.355 147.25 259.746 147.25 259.746 156.859 271.117 153.246 258.746 154.246 246.746 154.242 246.746 158.18 270.238 157.25 228.746 157.25 228.742 178.859 248.676 166.246 225.746 166.246 207.75 166.246 207.75 182.816 225.355 176.246 211.75 176.246 211.75 186.777 220.957 182.25 203.746 182.25 203.746 181.5 192.797 186.25 204.746 186.25 204.746 203.938 238.777 197.25 209.75 197.25 209.75 196.457 188.836 201.246 204.746 201.246 204.746 202.18 193.676 212.246 185.75 212.246 185.75 210.977 241.637 225.25 201.746 229.25 183.746 229.25 183.742 232.539 194.117 232.246 199.75 232.246 199.75 248.379 217.879 241.25 190.746 241.25 190.746 257.617 216.117 254.246 201.746 254.246 201.746 245.738 183.996 247.246 178.75 247.242 178.75 265.977 216.996 267.246 218.75 267.246 218.75 265.098 172.117 277.246 211.75 277.246 211.75 283.137 198.516 280.246 193.746 280.242 193.746 288.859 202.477 288.246 205.746 288.246 205.742 293.039 215.016 296.25 199.75 296.25 199.75 298.098 189.719 300.246 192.746 300.246 192.746 304.258 166.836 305.25 191.746 305.25 191.746 307.34 206.879 299.246 219.75 299.246 219.75 300.297 223.156 297.246 227.746 297.246 227.742 312.18 203.797 304.25 235.746 304.25 235.746 316.578 226.676 318.25 226.746 318.25 226.746 302.937 252.195 312.246 246.746 312.242 246.746 306.898 258.355 326.25 244.75 326.25 244.75 309.098 262.758 328.25 251.75 328.25 251.75 337.258 245.156 329.25 255.75 329.25 255.75 313.059 273.758 337.25 253.75 337.25 253.75 350.02 235.918 351.25 232.75 351.25 232.75 339.898 264.957 335.246 267.75 335.242 267.75 344.301 308.078 389.246 290.75 389.246 290.75 397.098 271.996 402.246 291.746 402.242 291.746 416.02 299.277 428.25 268.75 428.25 268.75 432.738 283.879 432.246 286.746 432.246 286.742 439.34 285.637 438.25 286.746 438.25 286.742 452.98 282.117 454.246 282.746 454.246 282.746 461.777 275.516 462.246 279.75 462.242 279.75 472.34 276.398 470.25 280.746 470.25 280.746 479.82 263.195 480.246 258.746 483.25 274.75 485.25 271.746 485.25 271.746 486.859 279.918 486.25 280.746 485.098 282.559 507.98 273.758 513.246 250.746 515.246 241.75 515.242 241.75 522.059 257.918 520.246 262.75 520.246 262.75 526.02 261.438 526.246 256.746 526.242 256.746 530.859 282.117 525.25 288.746 525.25 288.742 530.418 289.598 531.246 285.75 531.246 293.746 531.246 293.746 539.66 292.676 539.246 295.746 539.242 295.742 544.5 299.719 546.246 294.75 546.242 294.75 533.059 333.156 553.246 311.75 553.246 311.75 561.219 300.156 557.246 320.75 553.301 341.516 548.898 343.277 554.25 343.746 554.25 343.742 555.059 347.676 553.246 349.75 550.66 351.195 554.25 349.75 554.25 349.75 554.25 349.75 559.461 345.035 553.246 368.746 553.246 368.746 560.777 367.477 547.25 399.75 547.25 399.75 550.66 402.238 546.246 411.746 546.242 411.742 555.059 406.637 558.25 408.75 558.25 408.75 557.699 410.156 554.25 414.746 554.25 414.746 530.418 474.84 553.246 450.75 553.246 450.75 565.895 435.73 559.246 460.746 559.242 460.742 548.832 487.223 549.25 491.746 77.2461 466.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 44 549.25 491.746 550.379 491.531 552.805 490.293 554.25 488.746 554.25 488.742 561.66 476.598 556.25 496.75 556.25 496.75 545.82 528.52 555.246 515.746 555.246 515.742 562.098 508.277 558.25 522.746 554.328 541.309 551.25 548.746 551.25 548.746 551.25 548.746 564.301 543.039 535.246 586.75 544.246 582.75 544.246 582.75 522.938 626.199 499.25 631.746 490.25 638.746 490.25 638.742 532.621 680.316 518.25 720.75 518.25 720.75 511.059 726.52 500.246 716.75 500.246 716.75 493.461 711.117 487.246 712.75 487.246 712.75 452.98 711.559 451.25 711.746 448.578 711.559 410.301 752.477 338.25 732.746 338.25 732.742 332.418 730.918 327.25 731.75 327.25 731.75 307.34 749.84 253.246 724.746 253.246 724.746 242.656 722.559 241.25 722.746 239.137 722.559 236.059 722.559 227.25 715.746 218.457 708.477 218.02 707.598 216.25 705.75 216.25 705.75 197.777 693.52 192.25 692.75 192.25 692.75 179.738 685.598 175.25 674.75 171.246 673.746 171.246 673.742 169.18 665.359 168.25 663.75 168.25 663.75 163.457 660.078 162.25 653.746 162.25 653.742 152.898 647.316 153.246 642.746 153.242 642.742 151.578 636.758 150.246 631.746 150.246 631.742 142.777 626.199 143.246 622.75 143.242 622.75 135.297 607.719 136.25 599.75 136.25 599.75 129.578 600.68 126.246 597.75 126.242 597.75 125.617 592.758 124.25 592.746 124.25 592.746 120.777 591 123.25 586.75 123.25 586.75 121.656 583.52 121.246 581.746 121.246 581.746 122.098 578.68 117.25 572.746 117.25 572.742 110.219 551.84 112.25 545.75 112.25 545.75 112.859 540.84 110.246 538.75 110.246 538.75 105.816 539.52 115.246 526.746 115.242 526.742 115.938 525 112.25 522.746 112.25 522.746 93.5 518.398 91.25 500.746 91.25 500.746 75.8984 484.078 76.2461 478.746 75.8984 475.824 76.1953 472.359 77.2461 467.746 77.2461 467.746 76.3398 458.117 106.25 456.746 137.059 456.355 549.25 491.746 549.25 491.746 10 1.1 0 0 0 0 0 0 44 549.25 491.746 550.379 491.531 552.805 490.293 554.25 488.746 554.25 488.742 561.66 476.598 556.25 496.75 556.25 496.75 545.82 528.52 555.246 515.746 555.246 515.742 562.098 508.277 558.25 522.746 554.328 541.309 551.25 548.746 551.25 548.746 551.25 548.746 564.301 543.039 535.246 586.75 544.246 582.75 544.246 582.75 522.938 626.199 499.25 631.746 490.25 638.746 490.25 638.742 532.621 680.316 518.25 720.75 518.25 720.75 511.059 726.52 500.246 716.75 500.246 716.75 493.461 711.117 487.246 712.75 487.246 712.75 452.98 711.559 451.25 711.746 448.578 711.559 410.301 752.477 338.25 732.746 338.25 732.742 332.418 730.918 327.25 731.75 327.25 731.75 307.34 749.84 253.246 724.746 253.246 724.746 242.656 722.559 241.25 722.746 239.137 722.559 236.059 722.559 227.25 715.746 218.457 708.477 218.02 707.598 216.25 705.75 216.25 705.75 197.777 693.52 192.25 692.75 192.25 692.75 179.738 685.598 175.25 674.75 171.246 673.746 171.246 673.742 169.18 665.359 168.25 663.75 168.25 663.75 163.457 660.078 162.25 653.746 162.25 653.742 152.898 647.316 153.246 642.746 153.242 642.742 151.578 636.758 150.246 631.746 150.246 631.742 142.777 626.199 143.246 622.75 143.242 622.75 135.297 607.719 136.25 599.75 136.25 599.75 129.578 600.68 126.246 597.75 126.242 597.75 125.617 592.758 124.25 592.746 124.25 592.746 120.777 591 123.25 586.75 123.25 586.75 121.656 583.52 121.246 581.746 121.246 581.746 122.098 578.68 117.25 572.746 117.25 572.742 110.219 551.84 112.25 545.75 112.25 545.75 112.859 540.84 110.246 538.75 110.246 538.75 105.816 539.52 115.246 526.746 115.242 526.742 115.938 525 112.25 522.746 112.25 522.746 93.5 518.398 91.25 500.746 91.25 500.746 75.8984 484.078 76.2461 478.746 75.8984 475.824 76.1953 472.359 77.2461 467.746 77.2461 467.746 76.3398 458.117 106.25 456.746 137.059 456.355 549.25 491.746 549.25 491.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 18 93.2461 466.746 65.3398 510.477 81.2461 448.75 81.2461 448.75 90.8594 410.598 233.246 451.746 233.246 451.746 233.246 451.742 419.098 485.398 431.246 489.746 443.738 494.199 548.246 486.746 548.246 486.746 542.246 505.75 471.02 556.68 449.898 531.156 435.246 535.746 419.98 539.957 422.621 529.398 419.246 528.746 415.578 527.637 372.461 554.918 365.246 553.75 358.379 553.156 330.504 579.285 347.25 544.746 364.539 506.957 282.699 501.238 264.246 513.746 245.738 525.879 272.25 493.746 272.25 493.746 292.379 471.316 254.246 489.746 254.246 489.746 216.699 503.879 190.297 475.719 187.246 474.75 183.258 473.957 177.977 470.438 177.246 477.746 176.219 484.52 167.957 502.891 133.246 473.746 111.098 455.695 96.25 479.75 96.25 479.75 93.2461 466.746 10 0 0.91 0.5 0.228 0.91 0.5 0.228 19 367.246 551.75 359.82 551.238 331.914 577.352 348.25 542.75 366.641 503.719 284.141 499.316 265.246 511.746 247.18 523.957 273.25 491.746 273.25 491.746 293.82 469.398 256.246 487.75 256.246 487.75 218.137 501.957 191.738 473.797 188.246 472.75 184.699 472.039 179.418 468.516 178.246 475.746 177.656 482.598 169.543 500.785 134.25 471.746 111.18 452.957 96.25 476.75 96.25 476.75 93.2461 465.75 65.3164 509.219 82.2461 444.746 82.2461 444.746 91.5781 407.238 235.246 449.746 235.246 449.746 235.242 449.742 420.539 483.477 433.246 487.75 445.18 492.277 549.25 485.75 549.25 485.75 543.25 504.746 471.578 555.398 451.34 529.238 436.25 533.746 421.418 538.039 424.059 527.477 420.246 526.746 417.02 525.719 373.898 552.996 367.246 551.75 10 0 0.919 0.55 0.305 0.919 0.55 0.305 19 368.246 549.75 361.258 549.316 334.051 575.75 350.25 540.75 367.641 500.695 285.578 497.398 267.246 509.75 248.617 522.035 275.246 489.746 275.246 489.746 295.258 467.477 257.246 485.75 257.246 485.75 219.578 500.035 193.18 471.875 189.246 470.75 186.137 470.117 180.859 466.598 180.246 473.746 179.098 480.676 171.125 498.68 136.25 469.746 111.258 450.215 97.25 472.75 97.25 472.75 93.2461 463.75 66.6172 506.637 82.2461 441.75 82.2461 441.75 92.2969 403.879 236.25 447.746 236.25 447.746 236.25 447.746 421.98 481.559 434.246 485.75 446.617 490.355 549.25 483.75 549.25 483.75 543.25 502.746 472.141 554.117 452.777 527.316 438.25 531.75 422.859 536.117 425.5 525.559 422.246 524.746 418.457 523.797 375.34 551.078 368.246 549.75 10 0 0.928 0.6 0.382 0.928 0.6 0.382 19 369.25 548.746 362.699 547.398 335.496 573.832 351.25 538.75 369.738 497.285 286.43 495.867 268.246 507.75 250.059 520.117 276.246 487.75 276.246 487.75 296.699 465.559 259.25 483.75 259.25 483.75 221.02 498.117 194.617 469.957 191.246 468.75 187.578 468.199 182.301 464.676 181.25 471.746 180.539 478.758 172.711 496.574 137.246 467.746 111.336 447.477 97.25 469.746 97.25 469.746 93.2461 461.75 68.7969 502.516 83.2461 438.746 83.2461 438.746 93.0195 400.516 237.25 445.746 237.25 445.746 237.25 445.746 423.418 479.637 435.246 483.75 448.059 488.438 550.246 481.75 550.246 481.75 544.246 501.75 472.699 552.84 454.219 525.398 439.25 529.75 424.301 534.199 426.938 523.637 423.246 522.746 419.898 521.879 376.777 549.156 369.25 548.746 10 0 0.937 0.65 0.46 0.937 0.65 0.46 19 371.25 546.746 364.141 545.477 337.492 572.156 352.25 536.75 371.18 493.559 288.457 493.559 270.25 505.75 251.5 518.195 278.246 485.75 278.246 485.75 298.141 463.637 260.25 481.75 260.25 481.75 222.457 496.195 196.059 468.035 192.25 466.746 189.02 466.277 183.738 462.758 183.25 469.746 181.98 476.836 174.297 494.473 139.246 466.746 111.418 444.738 97.25 466.746 97.25 466.746 93.2461 460.746 70.9766 498.617 84.25 434.746 84.25 434.746 93.7383 397.156 239.25 444.746 239.25 444.746 239.25 444.742 424.859 477.715 437.25 481.75 449.5 486.516 550.246 479.75 550.246 479.75 544.246 500.746 473.262 551.559 455.66 523.477 440.25 527.75 425.738 532.277 428.379 521.715 425.25 520.75 421.34 519.957 378.219 547.238 371.25 546.746 10 0 0.946 0.7 0.537 0.946 0.7 0.537 19 372.25 544.746 365.578 543.559 337.02 569.352 354.246 534.75 375.258 492.078 289.898 491.637 271.25 503.75 252.938 516.277 279.246 483.75 279.246 483.75 299.578 461.719 261.25 479.75 261.25 479.75 223.898 494.277 197.5 466.117 194.25 464.746 190.457 464.355 185.18 460.836 184.25 467.746 183.418 474.918 175.879 492.367 140.25 464.746 111.5 441.996 98.2461 462.746 98.2461 462.746 92.2461 458.746 72.9375 495.156 85.25 431.746 85.25 431.746 94.457 393.797 240.25 442.746 240.25 442.746 240.25 442.742 426.301 475.797 438.25 479.75 450.941 484.598 551.25 477.746 551.25 477.746 545.25 498.75 473.82 550.277 457.102 521.559 442.246 525.75 427.18 530.355 429.82 519.797 426.25 518.75 422.781 518.039 379.66 545.316 372.25 544.746 10 0 0.955 0.75 0.614 0.955 0.75 0.614 19 374.25 542.75 367.02 541.637 338.043 567.223 355.246 532.746 378.02 488.836 291.34 489.715 273.25 501.75 254.379 514.355 281.25 481.75 281.25 481.75 301.02 459.797 263.25 478.746 263.25 478.746 225.34 492.355 198.938 464.195 195.25 463.75 191.898 462.438 186.617 458.918 185.25 465.75 184.859 472.996 177.465 490.262 141.25 462.746 111.578 439.258 98.2461 459.75 98.2461 459.75 92.2461 456.746 75.1172 490.156 85.25 428.75 85.25 428.75 95.1797 390.438 242.246 440.746 242.246 440.746 242.246 440.742 427.738 473.875 440.25 478.746 452.379 482.676 551.25 475.746 551.25 475.746 545.25 497.746 474.379 548.996 458.539 519.637 443.246 523.75 428.621 528.438 431.258 517.875 427.25 516.75 424.219 516.117 381.102 543.398 374.25 542.75 10 0 0.964 0.8 0.691 0.964 0.8 0.691 19 375.246 540.75 368.461 539.719 338.273 564.66 357.246 530.746 381.219 487.355 292.777 487.797 274.25 499.746 255.82 512.438 282.25 479.75 282.25 479.75 302.457 457.879 264.246 476.75 264.246 476.75 226.777 490.438 200.379 462.277 197.25 461.75 193.34 460.516 188.059 456.996 187.246 463.75 186.297 471.078 179.047 488.156 143.246 460.746 111.656 436.516 99.2461 456.746 99.2461 456.746 92.2461 454.75 76.8555 486.477 86.25 424.75 86.25 424.75 95.8984 387.074 243.246 438.746 243.246 438.746 243.246 438.742 429.18 471.957 441.246 476.75 453.82 480.758 552.25 474.75 552.25 474.75 546.246 496.75 474.941 547.719 459.98 517.719 445.246 521.746 430.059 526.516 432.699 515.957 429.25 514.75 425.66 514.195 382.539 541.477 375.246 540.75 10 0 0.973 0.85 0.769 0.973 0.85 0.769 19 377.246 538.75 369.898 537.797 339.715 562.738 358.25 528.746 382.66 485.437 294.219 485.875 275.246 497.746 257.258 510.516 283.25 477.746 283.25 477.746 303.898 455.957 266.246 474.75 266.246 474.75 228.219 488.516 201.816 460.355 198.246 459.75 194.777 458.598 189.5 455.078 188.246 461.75 187.738 469.156 180.633 486.051 144.246 458.746 111.738 433.777 99.2461 452.75 99.2461 452.75 92.2461 453.746 77.7188 482.578 87.2461 421.75 87.2461 421.75 96.6172 383.715 245.246 436.746 245.246 436.746 245.246 436.746 430.621 470.035 443.246 474.75 455.258 478.836 552.25 472.75 552.25 472.75 547.25 495.746 475.5 546.438 461.418 515.797 446.246 519.746 431.5 524.598 434.141 514.035 430.246 512.75 427.098 512.277 383.98 539.555 377.246 538.75 10 0 0.982 0.9 0.846 0.982 0.9 0.846 19 378.246 536.75 371.34 535.879 341.578 561.055 360.25 526.746 384.098 482.195 295.66 483.957 277.246 496.75 258.699 508.598 285.25 475.746 285.25 475.746 305.34 454.035 267.246 472.75 267.246 472.75 229.66 486.598 203.258 458.438 199.246 457.75 196.219 456.676 190.937 453.156 190.246 459.75 189.18 467.238 182.219 483.949 146.25 456.746 111.82 431.035 99.2461 449.746 99.2461 449.746 92.2461 451.746 78.3594 478.238 87.2461 417.75 87.2461 417.75 97.3399 380.355 246.246 434.746 246.246 434.746 246.242 434.746 432.059 468.117 444.246 472.75 456.699 476.918 553.246 470.75 553.246 470.75 547.25 493.746 476.059 545.156 462.859 513.879 448.25 518.75 432.938 522.676 435.578 512.117 432.246 510.746 428.539 510.355 385.418 537.637 378.246 536.75 10 0 0.991 0.95 0.923 0.991 0.95 0.923 19 380.25 534.75 372.777 533.957 344.207 559.746 361.25 524.746 384.66 478.078 297.098 482.035 278.246 494.75 260.141 506.676 286.246 473.746 286.246 473.746 306.777 452.117 269.246 470.75 269.246 470.75 231.098 484.676 204.699 456.516 201.246 455.746 197.66 454.758 192.379 451.238 191.246 458.746 190.621 465.316 183.801 481.844 147.25 454.75 111.898 428.297 100.246 446.75 100.246 446.75 92.2461 449.746 78.5586 475.656 88.2461 414.746 88.2461 414.746 98.0586 376.996 248.25 432.75 248.25 432.75 248.25 432.75 433.5 466.195 446.246 470.75 458.141 474.996 553.246 468.75 553.246 468.75 548.246 492.75 476.621 543.879 464.301 511.957 449.25 516.75 434.379 520.758 437.02 510.195 433.246 509.75 429.98 508.438 386.859 535.719 380.25 534.75 10 0 1 1 1 1 1 1 18 92.2461 448.75 78.5391 472.637 89.2461 411.746 89.2461 411.746 98.7773 373.637 249.25 430.75 249.25 430.75 249.25 430.75 434.938 464.277 447.25 468.75 459.578 473.078 553.246 466.746 553.246 466.746 548.246 491.746 477.18 542.598 465.738 510.039 451.25 514.75 435.82 518.84 438.461 508.277 435.246 507.75 431.418 506.52 388.301 533.797 381.25 532.746 374.219 532.039 346.477 558.227 363.25 522.746 387.23 470.762 295.941 481.848 280.246 492.75 261.578 504.758 288.246 471.746 288.246 471.746 308.219 450.195 270.25 468.75 270.25 468.75 232.539 482.758 206.137 454.598 202.246 453.746 199.098 452.836 193.816 449.316 193.25 456.746 192.059 463.398 185.387 479.738 149.246 452.75 111.977 425.559 100.246 442.746 100.246 442.746 92.2461 448.75 10 0 0 0 0 0 0 0 7 138.246 415.75 138.246 415.75 130.457 402.676 153.246 387.746 153.242 387.742 154.879 386.617 135.25 390.746 135.25 390.746 128.258 393.438 126.246 404.75 126.242 404.75 121.219 409.719 116.246 415.75 110.656 422.035 138.246 415.75 138.246 415.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 8 292.25 467.746 292.25 467.746 311.848 438.297 311.246 432.75 309.758 421.598 309.539 411.035 313.246 406.75 316.578 402.238 326.25 365.746 326.25 365.746 326.25 365.742 325.82 364.398 339.25 405.746 339.25 405.742 352.219 423.797 330.25 443.75 330.25 443.75 291.5 475.719 292.25 467.746 10 0 0 0 0 0 0 0 15 160.246 385.746 160.246 385.742 172.699 378.035 157.25 343.746 164.246 346.746 164.242 346.746 163.02 334.035 159.246 331.75 167.25 334.75 167.25 334.75 172.699 326.117 168.25 320.75 168.25 320.75 186.777 312.035 186.25 304.746 186.25 304.746 192.938 313.797 188.246 320.75 184.137 327.879 176.219 323.477 177.246 343.746 167.25 339.746 167.25 339.742 173.578 349.879 173.25 356.75 165.246 354.746 165.242 354.742 181.793 383.512 170.246 384.75 163.457 385.957 160.246 385.746 160.246 385.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 196.25 367.75 196.25 367.75 199.098 372.316 196.25 371.75 192.938 370.559 158.617 354.277 152.25 343.746 152.25 343.742 189.859 370.559 196.25 367.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 207.25 358.75 207.25 358.75 210.539 363.516 207.25 362.75 204.379 361.758 170.059 345.477 163.25 334.75 163.25 334.75 201.297 361.758 207.25 358.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 222.246 375.75 222.246 375.75 225.059 380.238 222.246 379.746 218.898 378.477 184.578 362.195 178.246 351.75 178.246 351.75 215.816 378.477 222.246 375.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 196.25 327.75 196.25 327.75 196.457 334.035 193.25 332.746 190.297 332.277 150.699 312.918 144.246 302.746 144.246 302.746 190.297 330.516 196.25 327.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 198.246 339.746 198.246 339.742 199.098 344.598 196.25 343.746 193.816 343.719 164.777 330.957 158.25 320.75 158.25 320.75 190.738 344.156 198.246 339.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 24 182.25 286.746 171.246 278.75 171.246 278.75 182.379 286.957 186.25 285.75 186.25 285.75 178.859 273.316 178.246 267.75 178.246 267.75 189.418 281.676 195.25 280.746 195.25 280.746 203.938 280.797 204.25 268.75 204.25 268.75 210.098 280.355 213.246 279.75 213.242 279.75 214.938 272.879 213.246 265.75 213.242 265.75 218.02 273.758 222.246 271.746 222.246 271.746 229.457 274.195 228.25 261.746 228.25 261.742 228.578 249.996 227.25 246.746 227.25 246.746 233.859 275.957 236.25 276.75 236.25 276.75 245.297 277.719 250.25 267.75 250.25 267.75 246.18 276.398 251.25 273.746 251.25 273.742 263.34 272.438 267.246 264.746 267.246 264.742 259.379 278.156 265.246 274.75 265.246 274.75 273.02 274.637 274.25 267.75 274.25 267.75 283.578 244.277 286.246 242.75 286.246 242.75 277.418 266.277 279.246 266.746 279.242 266.742 276.977 279.477 282.25 262.75 282.25 262.75 279.18 278.598 285.25 277.746 291.5 276.836 296.34 265.836 305.25 268.75 305.25 268.75 316.141 262.316 318.25 338.75 182.25 286.746 10 0 0 0 0 0 0 0 15 187.246 388.75 187.246 388.75 203.5 395.637 247.246 388.75 247.242 388.75 255.418 388.598 263.25 398.746 270.379 407.957 299.859 415.879 307.25 413.75 317.25 406.75 318.25 405.746 318.25 405.742 331.98 393.879 332.246 385.746 332.859 377.156 316.578 324.355 306.25 306.746 295.457 289.156 284.898 275.516 264.246 277.746 264.246 277.742 240.898 282.559 212.246 277.746 212.246 277.742 180.617 279.918 177.246 288.746 174.457 297.516 190.246 313.746 190.246 313.746 190.246 313.746 194.699 323.477 193.25 339.746 192.059 355.156 192.5 385.957 187.246 388.75 10 0 0.9 0.4 0.55 0.9 0.4 0.55 8 211.246 386.75 220.656 366.598 188.246 294.75 188.246 294.75 185.898 293.117 202.023 286.469 213.246 288.746 225.219 292.059 269.246 287.75 269.246 287.75 295.457 304.559 309.246 353.75 309.246 353.75 309.246 353.75 320.98 379.797 301.246 383.746 282.258 386.836 211.246 386.75 211.246 386.75 10 0 0.7 0.2 0.35 0.7 0.2 0.35 6 209.246 352.746 212.844 366.922 214.586 379.902 211.246 386.75 211.246 386.75 280.059 379.797 292.25 402.75 297.043 411.34 313.277 377.598 313.246 366.75 313.242 366.75 243.539 351.195 227.25 363.746 209.246 352.746 10 0 0.65 0.15 0.3 0.65 0.15 0.3 13 214.25 334.75 214.25 334.75 216.258 326.996 213.246 322.75 213.242 322.75 211.859 321.719 210.246 321.746 210.246 321.742 211.859 317.316 218.25 315.746 218.25 315.746 220.656 310.719 223.246 310.746 225.938 309.836 231.219 303.676 235.246 304.746 240.02 306.316 252.25 310.746 252.25 310.746 252.25 310.742 258.5 314.238 268.246 310.746 268.242 310.742 270.789 311.16 271.25 315.746 271.809 320.727 275.219 324.797 277.246 326.746 279.617 329.195 290.18 343.277 289.246 343.746 287.539 344.156 214.25 334.75 214.25 334.75 10 0 1 0.45 0.5 1 0.45 0.5 12 209.246 387.746 209.246 387.742 206.137 363.516 209.246 354.746 213.18 345.035 212.297 342.836 211.246 338.75 210.539 334.035 215.379 323.035 221.246 316.75 234.246 314.75 234.246 314.75 251.457 318.637 261.25 315.746 261.25 315.746 271.473 314.078 275.246 330.746 275.246 330.742 280.5 337.559 288.246 340.75 296.34 343.719 304.258 389.477 300.246 398.746 295.457 407.078 279.617 411.918 262.25 394.746 244.418 377.598 242.219 396.078 209.246 387.746 10 1.1 0 0 0 0 0 0 12 209.246 387.746 209.246 387.742 206.137 363.516 209.246 354.746 213.18 345.035 212.297 342.836 211.246 338.75 210.539 334.035 215.379 323.035 221.246 316.75 234.246 314.75 234.246 314.75 251.457 318.637 261.25 315.746 261.25 315.746 271.473 314.078 275.246 330.746 275.246 330.742 280.5 337.559 288.246 340.75 296.34 343.719 304.258 389.477 300.246 398.746 295.457 407.078 279.617 411.918 262.25 394.746 244.418 377.598 242.219 396.078 209.246 387.746 10 0 1 1 0.8 1 1 0.8 7 211.246 305.75 211.246 305.75 210.098 308.078 205.25 308.746 205.25 308.742 180.617 312.477 171.246 325.75 171.246 325.75 163.898 332.277 168.25 319.746 168.25 319.742 180.18 297.078 187.246 293.746 187.246 293.746 205.699 289.598 211.246 305.75 10 0.55 0 0 0 0 0 0 7 211.246 305.75 211.246 305.75 210.098 308.078 205.25 308.746 205.25 308.742 180.617 312.477 171.246 325.75 171.246 325.75 163.898 332.277 168.25 319.746 168.25 319.742 180.18 297.078 187.246 293.746 187.246 293.746 205.699 289.598 211.246 305.75 10 0 0.8 0.25 0.3 0.8 0.25 0.3 9 299.246 375.75 299.641 384.941 301.789 394.418 300.246 398.746 292.766 412.461 274.098 406.535 262.25 394.746 244.418 377.598 242.219 396.078 209.246 387.746 209.246 387.742 207.297 372.797 208.25 361.746 208.25 361.742 249.258 374.516 250.25 368.746 250.25 368.746 251.898 371.879 262.25 371.75 272.137 371.879 297.152 373.168 299.246 375.75 10 2.2 0.65 0.1 0.15 0.65 0.1 0.15 3 251.25 387.746 251.25 387.742 256.738 381.996 253.246 371.75 253.246 371.75 236.938 353.836 239.25 338.75 10 0 1 1 0.8 1 1 0.8 5 198.246 293.746 198.246 293.746 193.816 308.078 203.25 300.75 203.25 300.75 208.777 298.398 207.25 296.75 206.137 294.879 199.977 290.477 198.246 293.746 10 0.55 0 0 0 0 0 0 5 198.246 293.746 198.246 293.746 193.816 308.078 203.25 300.75 203.25 300.75 208.777 298.398 207.25 296.75 206.137 294.879 199.977 290.477 198.246 293.746 10 0 1 1 0.8 1 1 0.8 5 204.25 292.75 204.25 292.75 200.328 303.941 208.25 297.746 208.25 297.742 212.937 295.266 211.246 294.75 206.227 293.383 211.242 290.566 204.25 292.75 10 0.55 0 0 0 0 0 0 5 204.25 292.75 204.25 292.75 200.328 303.941 208.25 297.746 208.25 297.742 212.937 295.266 211.246 294.75 206.227 293.383 211.242 290.566 204.25 292.75 10 0 1 1 0.8 1 1 0.8 5 209.246 292.75 209.246 292.75 205.609 303.941 213.246 297.746 213.242 297.742 218.168 295.414 216.25 294.75 212.824 293.383 216.523 290.566 209.246 292.75 10 0.55 0 0 0 0 0 0 5 209.246 292.75 209.246 292.75 205.609 303.941 213.246 297.746 213.242 297.742 218.168 295.414 216.25 294.75 212.824 293.383 216.523 290.566 209.246 292.75 10 0 1 1 0.8 1 1 0.8 5 216.25 292.75 216.25 292.75 212.871 303.723 220.246 297.746 220.246 297.742 225.434 295.172 224.246 294.75 220.527 293.383 223.781 290.344 216.25 292.75 10 0.55 0 0 0 0 0 0 5 216.25 292.75 216.25 292.75 212.871 303.723 220.246 297.746 220.246 297.742 225.434 295.172 224.246 294.75 220.527 293.383 223.781 290.344 216.25 292.75 10 0 1 1 0.8 1 1 0.8 5 224.246 292.75 224.242 292.75 220 303.809 227.25 297.746 227.25 297.742 231.969 296.066 231.246 294.75 229.855 293.25 230.91 290.434 224.246 292.75 10 0.55 0 0 0 0 0 0 5 224.246 292.75 224.242 292.75 220 303.809 227.25 297.746 227.25 297.742 231.969 296.066 231.246 294.75 229.855 293.25 230.91 290.434 224.246 292.75 10 0 1 1 0.8 1 1 0.8 5 231.246 291.746 231.246 291.746 225.938 305.438 236.25 298.75 236.25 298.75 241.34 296.195 240.25 294.75 238.699 292.676 240.02 289.156 231.246 291.746 10 0.55 0 0 0 0 0 0 5 231.246 291.746 231.246 291.746 225.938 305.438 236.25 298.75 236.25 298.75 241.34 296.195 240.25 294.75 238.699 292.676 240.02 289.156 231.246 291.746 10 2.2 0.65 0.15 0.3 0.65 0.15 0.3 4 200.246 310.746 200.246 310.742 214.5 313.797 221.246 310.746 221.246 310.742 227.699 308.957 229.25 309.75 230.34 309.836 234.246 310.746 234.246 310.746 10 2.2 0.65 0.15 0.3 0.65 0.15 0.3 4 237.25 300.75 237.25 300.75 250.578 315.996 264.246 310.746 271.496 308.328 270.379 312.035 271.25 314.75 272.137 318.195 272.359 322.816 278.246 325.75 10 0 1 1 0.8 1 1 0.8 7 256.246 318.75 256.246 318.75 251.898 330.516 249.25 316.75 245.738 302.355 242.219 298.398 240.25 295.746 240.25 295.742 240.457 289.598 249.25 289.75 249.25 289.75 261.578 290.477 262.25 293.746 262.457 296.637 260.699 309.398 256.246 318.75 10 0.55 0 0 0 0 0 0 7 256.246 318.75 256.246 318.75 251.898 330.516 249.25 316.75 245.738 302.355 242.219 298.398 240.25 295.746 240.25 295.742 240.457 289.598 249.25 289.75 249.25 289.75 261.578 290.477 262.25 293.746 262.457 296.637 260.699 309.398 256.246 318.75 10 2.2 0.65 0.15 0.3 0.65 0.15 0.3 2 271.25 310.746 271.25 310.742 275.656 313.355 278.246 311.75 10 2.2 0.65 0.15 0.3 0.65 0.15 0.3 2 279.246 328.746 279.242 328.742 282.039 334.148 287.246 334.75 10 0 0.7 0.7 0.7 0.7 0.7 0.7 6 191.246 288.746 191.242 288.742 211.418 284.758 216.25 286.746 216.25 286.742 225.938 286.516 216.25 284.746 216.25 284.742 202.617 284.316 194.25 285.75 194.25 285.75 181.059 291.797 191.246 288.746 10 0 1 1 0.8 1 1 0.8 7 207.25 390.746 207.25 390.746 226.379 390.797 228.25 389.75 228.25 389.75 236.5 356.035 232.246 347.75 232.246 347.75 231.219 344.598 228.25 350.746 228.25 350.742 207.898 386.836 204.25 388.75 200.859 391.238 205.699 390.797 207.25 390.746 10 0.55 0 0 0 0 0 0 7 207.25 390.746 207.25 390.746 226.379 390.797 228.25 389.75 228.25 389.75 236.5 356.035 232.246 347.75 232.246 347.75 231.219 344.598 228.25 350.746 228.25 350.742 207.898 386.836 204.25 388.75 200.859 391.238 205.699 390.797 207.25 390.746 10 0 1 1 0.8 1 1 0.8 7 122.246 393.75 122.246 393.75 132 391.898 146.25 388.75 146.25 388.75 151.137 364.398 154.246 358.75 158.18 353.836 154.219 353.836 150.246 356.75 146.297 359.996 130.02 375.398 128.25 379.746 125.617 385.078 122.246 393.75 122.246 393.75 10 0.55 0 0 0 0 0 0 7 122.246 393.75 122.246 393.75 132 391.898 146.25 388.75 146.25 388.75 151.137 364.398 154.246 358.75 158.18 353.836 154.219 353.836 150.246 356.75 146.297 359.996 130.02 375.398 128.25 379.746 125.617 385.078 122.246 393.75 122.246 393.75 10 0 1 1 0.8 1 1 0.8 6 146.25 388.75 146.25 388.75 152.637 387.094 153.246 384.75 154.855 382.223 152.25 378.75 152.25 378.75 152.25 378.75 151.324 374.961 150.246 377.75 148.68 379.719 145.52 388.145 146.25 388.75 10 0.55 0 0 0 0 0 0 6 146.25 388.75 146.25 388.75 152.637 387.094 153.246 384.75 154.855 382.223 152.25 378.75 152.25 378.75 152.25 378.75 151.324 374.961 150.246 377.75 148.68 379.719 145.52 388.145 146.25 388.75 10 0 0 0 0 0 0 0 10 146.25 388.75 146.25 388.75 150.258 383.316 154.246 383.746 158.18 383.316 158.598 383.77 161.246 382.75 166.758 381.996 166.316 384.195 173.25 382.75 176.48 382.348 179.297 383.316 182.25 381.746 185.457 380.676 188.977 381.559 190.246 383.746 191.617 385.957 197.25 390.746 197.25 390.746 197.25 390.746 182.816 388.598 179.246 387.746 179.246 387.742 155.098 386.398 146.25 388.75 10 0 1 1 0.8 1 1 0.8 6 195.25 388.75 195.25 388.75 188.262 384.969 188.246 382.75 187.383 379.688 193.25 375.75 193.25 375.75 193.25 375.75 196.625 370.559 197.25 372.746 197.941 375.836 196.238 388.379 195.25 388.75 10 0.55 0 0 0 0 0 0 6 195.25 388.75 195.25 388.75 188.262 384.969 188.246 382.75 187.383 379.688 193.25 375.75 193.25 375.75 193.25 375.75 196.625 370.559 197.25 372.746 197.941 375.836 196.238 388.379 195.25 388.75 10 0 1 1 0.8 1 1 0.8 5 154.246 382.75 154.242 382.75 161.832 370.5 162.25 382.75 162.25 382.75 162.684 384.215 160.246 383.746 154.066 384.324 155.738 388.836 154.246 382.75 10 0.55 0 0 0 0 0 0 5 154.246 382.75 154.242 382.75 161.832 370.5 162.25 382.75 162.25 382.75 162.684 384.215 160.246 383.746 154.066 384.324 155.738 388.836 154.246 382.75 10 0 1 1 0.8 1 1 0.8 5 162.25 382.75 162.25 382.75 170.734 370.227 170.246 382.75 170.242 382.75 170.043 383 168.25 382.75 162.891 383.625 163.27 388.594 162.25 382.75 10 0.55 0 0 0 0 0 0 5 162.25 382.75 162.25 382.75 170.734 370.227 170.246 382.75 170.242 382.75 170.043 383 168.25 382.75 162.891 383.625 163.27 388.594 162.25 382.75 10 0 1 1 0.8 1 1 0.8 5 170.246 382.75 170.242 382.75 178.711 370.832 178.246 381.746 178.246 381.746 178.105 382.82 176.246 382.75 172.004 383.93 171.773 387.504 170.246 382.75 10 0.55 0 0 0 0 0 0 5 170.246 382.75 170.242 382.75 178.711 370.832 178.246 381.746 178.246 381.746 178.105 382.82 176.246 382.75 172.004 383.93 171.773 387.504 170.246 382.75 10 0 1 1 0.8 1 1 0.8 5 177.246 382.75 177.246 382.75 186.207 369.719 186.25 380.75 186.25 380.75 188.398 381.992 186.25 381.746 180.078 383.051 180.957 387.953 177.246 382.75 10 0.55 0 0 0 0 0 0 5 177.246 382.75 177.246 382.75 186.207 369.719 186.25 380.75 186.25 380.75 188.398 381.992 186.25 381.746 180.078 383.051 180.957 387.953 177.246 382.75 10 0 0.9 0.9 0.7 0.9 0.9 0.7 6 137.246 378.75 129.25 379.746 126.441 385.738 124.25 392.746 124.25 392.746 124.25 392.746 131.117 391.402 145.25 388.75 145.25 388.75 145.832 384.672 147.25 378.75 137.246 378.75 10 0 0.9 0.9 0.7 0.9 0.9 0.7 7 209.246 383.746 207.469 386.437 206.02 388.371 205.25 388.75 201.992 390.891 206.547 390.477 208.25 390.746 208.25 390.746 226.02 390.477 228.25 389.75 228.25 389.75 228.668 387.18 229.25 383.746 229.25 383.742 218.32 385.66 209.246 383.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 10 268.246 535.746 298.758 531.289 326.832 570.492 329.25 580.75 330.703 591.789 319.25 604.75 319.25 604.75 321.023 608.246 315.699 623.734 310.246 633.75 304.082 644.063 286.594 642.992 267.246 643.75 249.875 645.031 229.547 619.379 228.25 617.75 226.641 615.508 233.418 573.398 235.246 566.75 236.32 560.813 233.246 531.75 233.246 531.75 271.082 541.781 237.773 540 268.246 535.746 10 0 0.92 0.56 0.32 0.92 0.56 0.32 10 229.25 616.746 227.469 614.828 234.121 573.484 235.246 567.75 236.973 561.129 234.246 532.746 234.246 532.746 270.063 542.387 238.398 540.695 268.246 536.75 298.273 532.141 325.836 570.633 327.25 580.75 329.637 591.543 318.25 604.75 318.25 604.75 320.133 607.699 314.906 622.906 309.246 632.75 303.504 642.867 286.332 641.813 267.246 642.746 250.277 643.816 230.32 618.629 229.25 616.746 10 0 0.94 0.67 0.49 0.94 0.67 0.49 10 229.25 615.75 228.297 614.152 234.824 573.574 236.25 567.75 237.625 561.445 235.246 533.746 235.246 533.746 269.371 543.539 239.023 541.391 268.246 536.75 297.793 532.996 324.844 570.773 326.25 580.75 328.574 591.297 318.25 603.746 318.25 603.746 319.246 607.156 314.113 622.078 308.246 631.746 302.922 641.668 286.066 640.637 267.246 641.75 250.684 642.602 231.094 617.883 229.25 615.75 10 0 0.96 0.78 0.66 0.96 0.78 0.66 10 230.25 615.75 229.125 613.473 235.531 573.66 237.25 567.75 238.277 561.762 235.246 534.75 235.246 534.75 267.91 544.25 239.648 542.086 268.246 537.746 297.309 533.852 323.848 570.914 325.25 580.75 327.508 591.051 317.25 603.746 317.25 603.746 318.355 606.609 313.324 621.254 308.246 630.75 302.34 640.473 285.805 639.457 267.246 640.746 251.09 641.387 231.871 617.133 230.25 615.75 10 0 0.98 0.89 0.83 0.98 0.89 0.83 10 231.246 614.746 229.949 612.797 236.234 573.75 237.25 567.75 238.926 562.082 236.25 534.75 236.25 534.75 266.891 544.965 240.273 542.781 268.246 538.75 296.824 534.703 322.855 571.055 324.246 580.75 326.445 590.805 316.25 602.75 316.25 602.75 317.469 606.063 312.531 620.426 307.25 629.746 301.762 639.273 285.543 638.281 267.246 639.75 251.492 640.172 232.645 616.387 231.246 614.746 10 0 1 1 1 1 1 1 10 268.246 539.746 296.34 535.559 321.859 571.199 323.246 580.75 325.379 590.559 315.25 602.75 315.25 602.75 316.578 605.52 311.738 619.598 306.25 628.75 301.18 638.078 285.277 637.102 267.246 637.75 251.898 638.957 233.418 615.637 232.246 613.75 230.777 612.117 236.938 573.84 238.25 567.75 239.578 562.398 237.25 535.746 237.25 535.746 264.988 545.457 240.898 543.477 268.246 539.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 319.25 576.746 319.25 576.742 289.078 568.559 276.246 570.746 276.246 570.746 258.937 577.578 249.25 553.75 249.25 553.75 245.297 545.68 243.246 543.746 240.898 541.277 319.25 576.746 319.25 576.746 10 0 0 0 0 0 0 0 11 324.246 579.746 324.242 579.746 291.937 565.918 281.25 566.75 281.25 566.75 262.898 571.418 253.246 555.75 253.246 555.75 244.418 545.238 241.25 543.746 241.25 543.742 240.457 541.719 247.246 545.75 259.25 540.75 259.25 540.75 275.219 529.84 286.246 547.75 286.246 547.75 290.18 559.758 290.246 561.746 290.18 564.156 313.5 570.316 315.25 570.746 317.02 571.199 324.277 575.816 324.246 579.746 10 0 0.6 0.8 0.2 0.6 0.8 0.2 6 271.25 539.746 264.141 539.832 254.93 544.086 255.246 550.746 254.93 557.832 264.141 564.723 271.25 564.75 279.258 564.723 285.387 559.152 285.25 552.746 285.387 545.402 279.258 539.832 271.25 539.746 10 0 0.4 0.6 0 0.4 0.6 0 6 267.246 557.746 262.383 557.391 256.785 555.738 257.246 555.75 258.559 561.055 265.555 564.723 271.25 564.75 276.422 564.723 280.59 562.547 283.25 558.75 283.25 558.75 277.203 559.598 267.246 557.746 10 0 1 1 1 1 1 1 4 281.25 558.75 281.25 558.75 276.098 561.957 276.246 559.746 276.246 559.746 280.059 554.699 281.25 558.75 10 0 0 0 0 0 0 0 6 270.25 549.75 267.187 549.5 264.961 551.727 265.246 554.746 264.961 557.227 267.187 559.457 270.25 559.746 272.687 559.457 274.918 557.227 275.246 554.746 274.918 551.727 272.687 549.5 270.25 549.75 10 0 0.8 0.45 0.15 0.8 0.45 0.15 15 155.246 563.746 155.246 563.742 152.02 587.477 154.246 592.746 154.242 592.746 166.539 603.316 166.246 607.746 166.246 607.742 165.656 627.078 164.246 627.746 163.02 628.84 154.656 635.438 148.246 628.75 148.242 628.75 136.617 608.598 137.246 601.746 137.246 599.75 137.242 599.75 129.137 599.797 127.246 597.75 127.246 597.75 126.059 591.879 124.25 591.75 124.25 591.75 121.656 588.797 124.25 585.746 124.25 585.742 121.656 583.078 122.246 578.75 130.25 574.746 130.25 574.742 132.656 558.438 144.246 552.746 149.859 550.156 153.34 557.559 155.246 563.746 10 0 1 1 1 1 1 1 15 154.246 565.746 154.242 565.742 151.27 587.172 153.246 591.75 153.242 591.75 164.34 601.426 164.246 604.75 164.242 604.75 163.547 622.809 162.25 623.746 161.172 624.395 153.645 630.336 147.25 623.746 147.25 623.746 137.41 606.18 138.246 599.75 138.246 597.75 138.246 597.75 130.68 598.258 129.25 596.746 129.25 596.742 127.906 591.129 126.246 590.746 126.242 590.746 123.945 588.359 126.246 585.746 126.242 585.742 123.945 583.211 124.25 579.746 132.246 575.75 132.246 575.75 133.848 561.035 144.246 555.75 149.324 553.582 152.457 560.242 154.246 565.746 10 0 0.925 0.588 0.363 0.925 0.588 0.363 15 164.246 626.75 162.645 627.816 154.406 634.16 148.246 627.746 148.242 627.742 136.816 607.992 137.246 600.75 137.246 598.746 137.242 598.742 129.523 599.414 128.25 597.75 128.25 597.75 126.52 591.691 125.25 591.75 125.25 591.75 122.23 588.688 124.25 585.746 124.25 585.742 122.23 583.109 122.246 578.75 131.246 574.746 131.242 574.742 132.953 559.086 144.246 553.75 149.723 551.012 153.117 558.23 155.246 564.75 155.246 564.75 151.832 587.402 154.246 591.75 154.242 591.75 165.988 602.844 165.246 606.75 165.242 606.75 165.129 626.012 164.246 626.75 10 0 0.95 0.725 0.575 0.95 0.725 0.575 15 163.25 625.746 162.27 626.793 154.152 632.887 148.246 625.746 148.242 625.746 137.016 607.387 138.246 600.75 138.246 598.746 138.246 598.742 129.906 599.027 128.25 596.746 128.25 596.742 126.98 591.504 125.25 590.746 125.25 590.746 122.801 588.578 125.25 585.746 125.25 585.742 122.801 583.145 123.25 578.75 131.246 574.746 131.242 574.742 133.254 559.734 144.246 554.746 149.59 551.867 152.898 558.898 155.246 564.75 155.246 564.75 151.645 587.324 154.246 591.75 154.242 591.75 165.438 602.371 165.246 605.746 165.242 605.742 164.602 624.945 163.25 625.746 10 0 0.975 0.863 0.788 0.975 0.863 0.788 15 163.25 624.75 161.895 625.77 153.898 631.609 148.246 624.75 148.242 624.75 137.211 606.781 138.246 600.75 138.246 597.75 138.246 597.75 130.293 598.645 128.25 596.746 128.25 596.742 127.445 591.316 126.246 590.746 126.242 590.746 123.375 588.469 125.25 585.746 125.25 585.742 123.375 583.176 124.25 578.75 131.246 574.746 131.242 574.742 133.551 560.387 144.246 554.746 149.457 552.727 152.68 559.57 154.246 565.746 154.242 565.742 151.457 587.246 154.246 591.75 154.242 591.75 164.887 601.898 164.246 605.746 164.242 605.742 164.074 623.879 163.25 624.75 10 0 1 1 1 1 1 1 15 154.246 566.75 154.242 566.75 151.27 587.172 153.246 591.75 153.242 591.75 164.34 601.426 164.246 604.75 164.242 604.75 163.547 622.809 162.25 623.746 161.523 624.746 153.645 630.336 147.25 623.746 147.25 623.746 137.41 606.18 138.246 599.75 138.246 597.75 138.246 597.75 130.68 598.258 129.25 596.746 129.25 596.742 127.906 591.129 126.246 590.746 126.242 590.746 123.945 588.359 126.246 585.746 126.242 585.742 123.945 583.211 124.25 579.746 132.246 575.75 132.246 575.75 133.848 561.035 144.246 555.75 149.324 553.582 152.457 560.352 154.246 566.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 151.25 572.746 151.25 572.742 127.27 584.398 126.246 585.746 126.242 585.742 136.289 576.258 137.246 576.746 138.047 576.258 151.25 572.746 151.25 572.746 10 0 0 0 0 0 0 0 5 132.246 579.746 132.246 579.746 152.457 576.039 152.25 570.746 152.457 567.996 152.191 553.234 146.25 554.746 137.059 557.559 141.02 573.398 132.246 579.746 10 0 0.6 0.8 0.2 0.6 0.8 0.2 5 141.25 575.75 141.25 575.75 151.332 574.195 152.25 570.746 153.117 569.438 153.848 560.301 148.246 558.75 142.832 558.098 140.379 569.34 141.25 575.75 10 0 0 0 0 0 0 0 44 236.25 528.746 235.504 530.93 236.949 530.785 239.25 531.75 241.117 532.039 254.539 536.219 255.246 538.75 256.297 541.938 271.25 536.75 271.25 536.75 272.797 536.219 277.246 533.746 277.246 533.746 282.918 532.039 290.246 531.75 290.246 531.75 292.816 530.5 296.25 527.75 296.25 527.75 312.617 516.199 326.25 523.75 326.25 523.75 348.258 531.379 341.25 550.746 341.25 550.746 338.359 560.199 342.246 563.746 342.246 563.746 342.098 568.117 350.25 560.75 350.25 560.75 352.879 556.457 354.246 550.746 354.246 550.746 362.559 538.637 359.25 557.746 359.25 557.746 359.039 559.316 355.961 563.277 356.246 564.75 355.961 565.918 354.246 569.75 354.246 569.75 350.68 573.398 353.246 580.75 353.246 580.75 355.301 596.277 353.246 594.746 353.246 594.746 351.559 596.277 341.25 585.746 341.25 585.746 339.02 581.539 332.246 579.746 332.246 579.746 329.34 577.797 325.25 579.746 325.25 579.746 322.738 579.777 316.25 571.75 316.25 571.75 319.66 572.297 322.301 567.457 325.25 566.75 327.578 567.02 329.559 569.879 331.246 570.746 333.078 571.199 336.25 564.75 336.25 564.75 336.598 561.957 330.25 556.75 330.25 556.75 330 551.617 328.25 553.75 328.25 553.75 324.938 554.039 323.621 549.859 322.246 544.746 321.418 539.738 317.25 539.746 317.25 539.746 315.039 531.156 313.246 534.75 313.246 534.75 313.5 540.617 307.25 533.746 307.25 533.746 305.578 532.039 300.246 534.75 300.246 534.75 293.039 536.656 295.25 538.75 295.25 538.75 297.656 541.277 310.246 538.75 310.246 538.75 312.398 540.617 303.25 544.746 303.25 544.746 302.937 547 304.25 551.75 304.25 551.75 305.359 555.359 313.246 561.746 313.246 561.746 323.18 562.84 320.246 564.75 320.246 564.75 313.277 570.316 307.25 561.746 307.25 561.746 304.477 555.137 285.25 538.75 285.25 538.75 280.059 534.898 282.918 542.379 278.246 538.75 274.117 534.898 251.25 544.746 251.25 544.746 238.738 546.109 235.734 528.793 232.246 531.75 232.246 531.75 237.813 522.855 236.25 528.746 10 0 0 0 0 0 0 0 12 450.25 711.746 450.25 711.746 422.18 703.199 419.246 682.746 419.246 682.742 416.461 657.438 439.25 637.75 439.25 637.75 439.34 631.039 441.246 627.746 441.246 627.742 439.777 622.238 460.246 630.75 490.25 639.75 490.25 639.75 497.418 642.477 503.25 651.746 508.859 661.84 525.578 682.52 521.25 709.75 521.25 709.75 522.938 722.559 516.25 722.746 516.25 722.746 507.098 724.758 499.25 716.75 499.25 716.75 491.699 712.879 489.246 713.746 450.25 711.746 10 0 0 0 0 0 0 0 8 510.25 712.75 510.25 712.75 512.73 722.91 507.25 717.746 507.25 717.742 499.664 711.293 491.246 711.746 491.242 711.746 475.465 708.875 470.25 694.75 470.25 694.75 466.266 664.828 475.25 658.746 475.25 658.746 480.305 650.309 488.25 657.75 495.793 664.828 512.844 698.082 510.25 712.75 10 0 0.2 0.2 0.2 0.2 0.2 0.2 8 510.25 712.75 510.25 712.75 512.309 722.313 507.25 716.75 507.25 716.75 499.48 710.906 491.246 710.746 491.242 710.742 475.719 708.531 471.246 694.75 471.242 694.75 466.691 665.289 475.25 658.746 475.25 658.746 480.469 651.031 488.25 657.75 495.68 665.289 512.387 697.961 510.25 712.75 10 0 0.4 0.4 0.4 0.4 0.4 0.4 8 509.246 712.75 509.246 712.75 511.887 721.715 507.25 716.75 507.25 716.75 499.293 710.52 491.246 710.746 491.242 710.742 475.973 708.188 471.246 693.746 471.242 693.742 467.113 665.746 475.25 659.75 475.25 659.75 480.637 651.754 488.25 658.746 495.563 665.746 511.93 697.84 509.246 712.75 10 0 0.6 0.6 0.6 0.6 0.6 0.6 8 509.246 711.746 509.246 711.746 511.465 721.113 506.246 715.746 506.242 715.742 499.109 710.133 491.246 709.75 491.242 709.75 476.23 707.844 471.246 693.746 471.242 693.742 467.535 666.203 476.246 660.746 476.246 660.742 480.805 652.477 488.25 659.75 495.449 666.203 511.477 697.719 509.246 711.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 8 509.246 711.746 509.246 711.746 511.043 720.516 506.246 715.746 506.242 715.742 498.926 709.746 491.246 709.75 491.242 709.75 476.484 707.5 472.25 693.746 472.25 693.742 467.957 666.66 476.246 660.746 476.246 660.742 480.973 653.195 488.25 659.75 495.332 666.66 511.02 697.598 509.246 711.746 10 0 1 1 1 1 1 1 8 508.25 710.746 508.25 710.742 510.621 719.918 506.246 714.75 506.242 714.75 498.738 709.359 491.246 709.75 491.242 709.75 476.738 707.156 472.25 693.746 472.25 693.742 468.379 667.117 476.246 661.75 476.246 661.75 481.141 653.918 488.25 660.746 495.219 667.117 510.563 697.477 508.25 710.746 10 0 0.6 0.15 0 0.6 0.15 0 24 275.246 487.75 275.246 487.75 253.219 508.719 244.246 509.75 244.246 509.75 206.578 514 190.246 493.746 190.246 493.742 209.656 516.637 240.25 510.746 240.25 510.742 216.258 515.316 202.246 511.746 202.242 511.746 184.137 511.797 173.25 496.75 170.246 490.75 170.242 490.75 174.898 507.398 195.25 513.746 195.25 513.746 220.219 519.277 232.246 513.746 232.246 513.746 208.34 521.477 197.25 519.746 197.25 519.742 163.898 521.918 150.246 492.75 150.246 492.75 154.219 508.719 170.246 516.75 170.242 516.75 185.457 526.316 208.25 522.746 208.25 522.746 223.738 519.719 229.25 516.75 235.18 514.438 233.859 517.52 224.246 522.746 224.242 522.746 218.457 533.797 203.25 533.746 203.25 533.746 155.977 529.398 144.246 515.746 144.246 515.742 159.5 528.52 171.246 531.75 171.246 531.75 195.578 540.398 205.25 539.746 205.25 539.742 232.098 538.418 240.25 542.75 240.25 542.75 228.137 537.316 231.246 533.746 235.18 530.277 242.656 521.918 242.246 520.75 242.656 519.277 269.277 494.969 273.25 489.746 275.246 487.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 428.25 273.746 428.25 273.742 410.848 314.348 397.246 324.746 397.246 324.746 425.699 307.199 429.25 287.75 429.25 287.75 429.547 276.398 428.25 273.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 7 479.25 265.75 479.25 265.75 450.449 326.449 430.246 352.746 430.246 352.742 477.949 311.598 483.25 282.746 484.246 276.75 480.246 278.75 480.242 278.75 480.148 269.25 479.25 265.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 542.246 319.746 542.246 319.742 473 384.75 471.246 387.746 471.242 387.742 537.898 314.898 541.25 306.746 541.25 306.742 539 316.547 542.246 319.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 334.246 271.746 334.246 271.746 355.848 328.648 377.246 303.75 377.246 303.75 393.25 292.898 392.25 289.75 392.25 289.75 388.297 296.75 368.246 295.746 368.242 295.742 347.598 299.5 334.246 271.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 544.246 411.746 544.246 411.742 494.449 443.047 486.25 444.746 473.211 447.297 540.648 412.797 546.246 400.75 546.242 400.75 548.348 404 544.246 411.746 10 0 0 0 0 0 0 0 63 378.246 294.75 378.246 294.75 400.621 296.637 408.246 303.75 413.246 299.746 432.246 342.75 436.25 336.75 436.25 336.75 452.098 352.957 451.25 361.746 450.34 370.559 465.246 354.746 465.246 354.746 465.246 354.742 464.418 367.918 472.25 360.75 472.25 360.75 469.699 377.598 479.25 368.746 479.25 368.746 467.348 401.969 492.25 373.75 498.301 366.598 493.246 373.75 493.246 373.75 493.242 373.75 464.859 426.879 488.25 410.75 488.25 410.75 490.82 436.117 489.246 440.746 488.18 445.797 485.98 470.438 480.246 475.746 475.418 481.879 481.141 483.637 487.246 477.746 487.246 477.742 474.98 504.316 489.246 490.75 489.246 490.75 485.539 507.84 480.246 510.746 480.242 510.742 474.539 529.84 491.246 517.746 491.242 517.742 486.418 531.598 483.25 534.75 483.25 534.75 470.141 565.477 478.246 559.746 483.25 555.75 483.25 555.75 475.418 571.637 482.246 566.75 489.5 561.957 489.246 562.75 489.246 562.75 489.246 562.75 466.18 598.918 488.25 579.746 488.25 579.746 479.645 594.867 476.246 602.75 476.246 602.75 455.18 624.879 471.246 617.75 476.246 615.75 476.246 615.75 466.621 627.078 458.246 628.75 449.02 630.598 460.461 637.637 467.246 635.75 474.539 633.238 491.246 624.75 491.246 624.75 491.242 624.75 505.777 604.199 510.25 603.746 510.25 603.746 488.18 612.117 495.246 603.746 495.242 603.746 510.621 587.918 502.246 588.75 502.242 588.75 496.098 580.438 501.25 570.746 501.25 570.746 481.074 590.988 497.25 562.75 505.25 544.746 505.25 544.746 478.059 572.078 490.25 547.75 490.25 547.75 509.301 521.918 511.246 521.746 513.699 521.039 518.25 511.746 518.25 511.746 513.246 513.746 519.25 503.75 519.25 503.75 507.098 517.078 513.246 502.746 520.246 486.746 520.246 486.742 497.418 510.918 512.25 478.746 512.25 478.746 494.34 484.078 504.246 464.746 504.242 464.742 502.258 447.559 502.246 441.75 503.141 436.117 504.461 404.879 499.25 395.75 494.777 387.277 506.219 366.156 508.25 361.746 510.621 357.355 514.578 345.477 505.25 355.75 495.219 365.719 500.059 359.559 502.246 349.75 504.461 340.195 511.059 323.035 510.25 316.75 510.25 316.75 508.859 315.559 505.25 319.746 505.25 319.742 489.059 344.598 491.246 328.746 491.242 328.742 489.5 319.957 486.25 310.746 486.25 310.742 482.461 298.398 482.246 307.75 482.242 307.75 478.938 326.559 476.246 317.746 472.777 309.836 468.82 303.238 465.246 300.75 462.66 297.957 456.938 323.035 455.25 311.75 455.25 311.75 442.418 325.238 437.25 306.746 424.246 288.746 424.242 288.742 423.938 302.797 422.246 295.746 422.246 295.742 389.621 289.598 378.246 294.75 10 0 0 0 0 0 0 0 34 340.25 686.746 340.25 686.742 327.578 695.719 323.246 695.746 318.777 694.84 353.539 704.957 399.246 674.75 399.246 674.75 404.141 671.52 408.246 671.746 408.246 671.742 411.621 669.316 408.246 665.75 408.246 665.75 398.859 654.797 411.246 642.746 411.246 642.742 431.418 635 425.25 644.75 425.25 644.75 437.141 640.277 440.25 635.75 442.418 631.477 441.246 635.75 441.246 635.75 441.246 635.75 434.059 643.797 427.25 649.746 427.25 649.742 421.738 651.719 418.25 660.746 415.578 670.199 412.938 681.199 418.25 684.746 418.25 684.742 413.379 679.879 414.25 684.746 415.141 688.68 419.098 692.637 421.246 692.75 422.621 693.52 440.66 710.898 448.25 711.746 448.25 711.746 438.02 709.797 434.246 710.746 431.418 712 402.16 724.539 395.25 725.75 395.25 725.75 377.078 733.117 390.246 730.746 390.242 730.742 429.66 726.738 449.25 711.746 449.25 711.746 441.758 721.457 421.246 728.746 421.246 728.742 397.098 743.02 358.25 737.746 358.25 737.742 338.801 734 330.25 731.75 330.25 731.75 327.359 732.68 326.25 732.746 326.039 733.559 313.059 743.457 282.25 735.746 282.25 735.746 264 730.699 254.246 725.75 254.246 725.75 237.816 724.098 234.246 720.75 234.246 720.75 213.398 704.52 211.246 703.75 209 702.758 196.457 694.398 195.25 693.746 195.25 693.742 222.637 701.219 225.25 703.75 227.918 706.5 247.059 709.359 249.25 707.75 252.34 706.277 261.578 706.938 251.25 706.746 251.25 706.742 334.18 690 335.246 687.75 335.938 685.598 340.25 686.746 340.25 686.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 13 419.246 696.75 419.246 696.75 407.66 705.18 405.25 704.746 403.258 705.18 389.621 716.398 385.25 715.746 380.379 715.52 366.961 726.52 337.25 717.746 337.25 717.742 336.16 719.699 340.25 720.75 340.25 720.75 347.16 723 347.25 723.75 347.25 723.75 369.82 728.277 377.246 724.746 377.246 724.746 387.859 721.457 394.25 714.75 394.25 714.75 407 711.117 410.246 711.746 410.246 711.746 420.199 709.797 420.246 707.75 420.246 707.75 427.02 704.52 425.25 701.75 425.25 701.75 425.48 699.898 419.246 696.75 10 0 0.8 0.45 0.15 0.8 0.45 0.15 38 405.25 699.746 406.047 698.664 407.168 698.555 408.246 697.746 408.094 697.32 407.773 696.961 407.25 696.75 406.281 696.504 405.121 697.133 404.25 696.75 403.422 696.258 402.715 696.457 402.246 696.75 400.313 697.105 398.301 697.137 396.25 696.75 394.254 697.621 391.66 696.977 389.246 697.746 389.309 698.109 389.063 697.727 389.246 697.746 385.629 699.016 381.512 698.707 379.246 700.746 376.168 701.672 373.574 702.18 371.25 702.746 368.906 703.488 367.355 704.574 365.246 705.75 364.059 706.27 362.457 706.844 361.25 707.75 358.719 707.75 356.703 707.625 354.246 707.75 354.52 708.227 354.309 707.848 354.246 707.75 353.863 707.996 353.543 708.637 353.246 708.746 351.508 708.004 349.871 709.074 348.25 708.746 346.742 710.043 344.844 709.773 343.246 710.746 339.883 711.195 336.414 709.797 333.246 710.746 337.602 712.926 342.758 711.57 347.25 713.746 349.789 715.148 352.715 713.938 355.246 714.75 356.078 714.934 356.84 715.152 357.246 714.75 357.426 714.566 357.625 714.828 357.246 714.75 360.387 713.527 362.934 712.125 365.246 710.746 366.039 710.793 366.621 711.047 367.246 710.746 368.57 709.488 370.711 709.602 372.25 708.746 374.105 708.809 376.078 708.391 378.246 708.746 378.066 709.109 378.324 708.734 378.246 708.746 379.602 709.582 380.875 709.281 382.25 708.746 382.227 708.82 382.957 708.551 383.25 708.746 384.531 708.164 385.473 707.637 387.246 707.75 386.895 707.414 387.098 707.789 387.246 707.75 388.41 707.277 389.559 707.34 390.246 705.75 390.426 706.207 390.609 706.469 390.246 706.746 391.828 706.066 392.543 705.238 394.25 704.746 394.289 704.855 394.961 704.168 395.25 703.75 398.227 703.168 400.254 701.488 402.246 700.746 403.5 700.16 404.465 699.902 405.25 699.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 23 321.246 714.75 318.094 716.91 315.488 718.125 313.246 719.746 312.605 720.234 312.207 720.051 312.246 719.746 310.879 720.852 309.902 721.492 309.246 722.746 308.227 722.68 307.324 722.664 307.25 722.746 303.969 724.371 301.074 724.984 298.246 726.746 299.066 727 300.301 726.73 301.246 727.75 301.172 727.309 301.434 726.996 302.246 726.746 303.668 728.203 305.703 728.371 307.25 728.746 309.422 728.172 311.313 727.836 313.246 727.75 313.605 727.484 313.824 726.91 314.25 726.746 316.629 726.074 319.258 726.648 321.246 725.75 323.336 725.035 325.066 724.133 326.25 722.746 326.703 722.441 326.348 722.113 326.25 721.746 326.465 722.02 326.766 721.793 327.25 721.746 326.98 721.184 326.98 720.852 327.25 720.75 326.766 720.246 326.457 720.133 326.25 719.746 324.5 719.871 326.449 721.387 325.25 720.75 324.277 720 325.098 718.453 324.246 716.75 323.973 717.27 323.719 717.512 324.246 717.746 324.098 717.363 323.434 717.043 323.246 716.75 322.824 715.898 321.836 714.344 321.246 714.75 10 0 0.8 0.45 0.15 0.8 0.45 0.15 25 285.25 706.746 281.645 707.801 278.293 707.676 275.246 708.746 274.898 709.109 274.656 708.727 274.25 708.746 273.082 709.41 272.07 710.473 271.25 711.746 269.883 712.602 268.059 712.176 266.246 712.75 266.301 712.848 266.078 713.41 266.246 713.746 264.406 713.625 263.387 714.672 262.25 715.746 264.809 716.172 267.461 716.137 270.25 716.75 270.293 716.582 270.453 716.227 270.25 715.746 270.746 716.227 270.891 716.469 271.25 716.75 271.254 716.309 271.586 715.953 272.25 715.746 272.469 716.824 273.082 716.617 273.25 716.75 273.836 716.563 273.973 716.227 274.25 715.746 274.27 716.227 274.41 716.57 274.25 716.75 274.707 716.57 274.852 716.227 275.246 715.746 275.148 716.227 275.289 716.469 275.246 716.75 276.199 715.758 277.172 716.367 278.246 715.746 279.219 715.922 279.512 714.656 280.246 714.75 285.879 712.895 290.43 710.535 295.25 707.75 295.566 708.078 295.801 707.805 295.25 707.75 295.973 707.379 296.316 707.477 296.25 707.75 297.688 706.523 298.832 705.922 299.246 704.746 299.84 704.34 299.477 703.895 299.246 703.75 294.348 705.047 289.941 705.715 285.25 706.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 10 270.25 658.746 268.117 659.637 267.477 661.871 266.246 663.75 266 664.215 266.301 664.563 266.246 664.746 267.266 664.832 267.863 664.309 268.246 663.75 270.234 663.137 271.922 661.77 274.25 661.75 276.309 659.16 280.992 658.738 281.25 654.75 281 654.074 279.43 655.082 279.246 653.746 276.262 655.242 273.633 655.129 271.25 656.746 270.336 657.16 270.699 657.66 270.25 658.746 10 0 0.8 0.45 0.15 0.8 0.45 0.15 6 239.25 715.746 239.727 716.129 247.461 715.871 247.246 715.746 247.391 715.406 238.891 714.254 238.25 714.75 238.309 714.523 230.047 711.852 230.25 711.746 230.191 712.148 239.285 716.129 239.25 715.746 10 0 0 0 0 0 0 0 80 256.246 705.75 256.246 705.75 240.238 703.418 235.246 701.75 230.559 700.777 210.098 692.418 207.25 689.746 207.25 689.746 192.059 684.277 173.25 662.746 173.25 662.742 181.719 666.02 184.25 668.75 184.25 668.75 199.098 682.957 199.246 679.75 199.246 679.75 212.297 689.559 211.246 686.746 211.246 686.742 238.477 699.457 236.25 695.746 236.25 695.742 260.039 701 259.25 698.75 259.25 698.75 279.617 693.957 276.246 693.746 276.246 693.742 270.156 692.418 277.246 688.746 277.246 688.742 273.457 683.617 267.246 687.75 261.578 692.418 264.879 690 259.25 688.746 259.25 688.742 256.52 688.02 251.25 692.75 251.25 692.75 245.297 697.477 235.246 693.746 235.242 693.742 201.957 679.656 200.246 678.746 200.246 678.746 195.797 675.918 193.25 671.746 193.25 671.742 186.777 667.117 183.25 665.75 183.25 665.75 169.398 652.816 168.25 651.746 168.25 651.742 164.34 645.559 163.25 644.75 163.25 644.75 170.5 649.297 172.25 651.746 172.25 651.742 188.098 662.5 194.25 663.75 194.25 663.75 198.879 666.68 200.246 667.746 200.246 667.746 215.598 678.34 220.246 678.746 220.246 678.746 230.34 672.617 233.246 680.746 233.246 680.746 239.359 682.297 245.246 680.746 245.246 680.746 249.039 683.84 248.25 686.746 248.25 686.742 249.918 688.238 251.25 683.75 251.25 683.75 254.758 680.098 260.25 682.746 260.25 682.742 264.437 682.52 262.25 679.75 262.25 679.75 257.398 675.699 244.246 675.746 244.246 675.742 230.777 674.816 212.246 666.75 212.246 666.75 179.957 655.02 170.246 643.75 170.242 643.75 162.797 633.898 157.25 632.75 157.25 632.75 150.477 631.699 144.246 623.746 144.246 623.746 154.656 629.938 164.246 629.746 164.242 629.742 168.957 632.578 165.246 628.75 165.242 628.75 160.816 620.258 162.25 614.746 162.25 614.746 161.918 608.598 161.246 606.75 161.246 606.75 152.457 592.758 152.25 589.75 152.457 587.477 153.777 576.699 154.246 575.75 154.656 575.379 153.117 577.797 157.25 574.746 161.477 572.52 164.559 570.758 165.246 567.75 166.316 564.598 163.238 573.617 163.25 575.75 162.797 577.578 158.18 585.5 159.246 587.746 159.242 587.742 160.156 587.039 161.246 585.746 161.246 585.742 160.379 586.156 161.246 589.75 161.246 589.75 161.918 595.84 163.25 599.75 165 602.879 167.199 607.059 167.25 607.746 168.078 608.816 168.078 615.199 169.25 612.746 173.25 609.746 173.25 609.742 170.277 612.34 172.25 614.746 172.25 614.746 171.598 620.918 173.25 623.746 173.25 623.746 181.277 633.02 183.25 633.75 184.797 635.219 183.25 634.746 183.25 634.746 183.25 634.746 189.859 639.398 183.25 637.75 183.25 637.75 179.078 635.879 176.246 635.75 176.246 635.75 167.418 633.68 172.25 638.746 176.219 642.918 187.219 648.859 191.246 648.75 192.25 646.75 204.25 649.746 203.25 648.75 203.25 648.75 203.059 648.859 207.25 649.746 212.297 649.738 218.68 648.199 220.246 649.746 221.758 652.156 225.5 653.258 225.25 651.746 224.617 650.18 224.246 647.746 224.246 647.746 224.242 647.746 229.898 654.359 229.25 651.746 228.578 649.52 219.559 643.797 218.25 636.746 229.25 645.746 233.246 649.746 233.246 649.742 237.379 646.879 237.25 648.75 237.816 650.398 242.879 656.777 244.246 656.746 245.52 656.34 247.719 659.418 247.246 656.746 247.277 653.699 255.246 647.746 255.246 647.746 255.246 647.746 259.156 649.738 260.25 647.746 262.238 646.656 267.246 669.746 267.246 669.746 294.25 681.75 342.246 685.75 323.246 692.75 256.246 705.75 10 2.2 0.3 0 0 0.3 0 0 3 276.246 486.746 276.246 486.742 260.039 504.977 251.25 507.75 251.25 507.75 236.059 515.316 209.246 506.746 10 2.2 0.3 0 0 0.3 0 0 3 247.246 509.75 247.242 509.75 219.559 518.18 202.246 513.746 202.242 513.746 182.379 511.359 173.25 495.746 10 2.2 0.3 0 0 0.3 0 0 4 243.246 510.746 243.246 510.742 224.617 518.617 208.25 520.75 208.25 520.75 190.078 523.898 172.25 515.746 172.25 515.742 158.398 509.379 152.25 497.746 10 2.2 0.3 0 0 0.3 0 0 4 244.246 510.746 244.246 510.742 227.477 522.359 226.25 523.75 226.25 523.75 218.68 536 204.25 536.75 204.25 536.75 180.84 535.559 162.25 526.746 10 0 0 0 0 0 0 0 169 243.246 519.746 244.68 518.543 274.25 486.746 274.25 486.746 313.059 446.457 282.25 483.75 282.25 483.75 273.898 489.359 264.246 509.75 264.246 509.75 262.457 513.117 279.246 501.75 279.246 501.75 283.578 501.238 298.246 479.75 298.246 479.75 291.059 482.758 296.25 474.75 296.25 474.75 299.418 472.637 322.246 455.746 322.246 455.746 325.82 451.078 330.25 449.746 330.25 449.746 345.621 455.035 338.25 440.746 338.25 440.746 341.219 433.035 347.25 445.746 347.25 445.746 359.699 464.277 341.25 461.75 341.25 461.75 308.656 458.559 301.246 475.746 301.246 475.746 298.539 478.797 308.246 475.746 308.246 475.746 317.461 473.957 300.246 489.746 300.246 489.746 302.937 489.797 313.246 482.746 313.246 482.746 324.5 472.199 326.25 474.75 326.25 474.75 346.5 484.078 358.25 475.746 358.25 475.746 360.141 473.957 353.98 466.477 355.246 460.746 357.5 455.035 363.25 441.75 363.25 441.75 360.141 439.637 360.25 427.746 360.25 427.746 379.059 402.238 368.246 404.75 368.246 404.75 351.34 404.879 367.246 396.746 367.246 396.746 371.141 394.316 381.25 386.75 381.25 386.75 377.738 387.719 376.246 381.746 376.246 381.746 381.258 377.598 378.246 372.746 378.246 372.746 371.578 370.996 370.25 366.75 370.25 366.75 377.738 357.797 366.246 357.746 366.246 357.746 370.699 352.516 365.246 339.746 365.246 339.746 360.141 339.316 353.246 332.746 353.246 332.746 355.738 327.879 344.246 321.746 344.246 321.746 335.059 319.957 338.25 312.75 338.25 312.75 329.34 305.879 326.25 288.746 326.25 288.746 325.82 276.836 323.18 273.316 329.25 275.746 334.621 277.719 333.246 291.746 333.246 291.746 328.461 308.516 375.246 325.75 375.246 325.75 379.938 327.879 381.25 333.75 381.25 333.75 383.02 333.156 392.25 324.746 392.25 324.746 401.059 312.477 401.246 322.75 401.246 322.75 402.82 326.559 401.246 332.746 401.246 332.746 407.66 356.918 392.25 363.746 392.25 363.746 381.258 400.918 396.25 391.75 396.25 391.75 399.738 385.516 411.246 379.746 411.246 379.746 415.25 382.75 413.82 387.719 423.246 394.746 423.246 394.746 426.141 387.277 432.246 395.75 432.246 395.75 436.699 422.918 450.25 406.75 450.25 406.75 454.738 405.758 456.246 412.746 456.246 412.746 460.02 424.676 456.246 439.75 456.246 439.75 460.02 440.078 470.25 433.746 470.25 433.746 473.66 437.438 463.539 455.918 468.25 453.746 472.34 450.637 477.25 448.75 477.25 448.75 478.059 451.078 467.246 464.746 467.246 464.746 462.219 467.797 456.246 489.746 456.246 489.746 464.418 486.277 453.25 502.746 453.25 502.746 453.418 506.52 460.246 518.75 460.246 518.75 459.141 526.316 460.246 525.75 460.246 525.75 463.098 524.559 471.898 522.797 464.25 529.75 456.938 536.879 465.246 541.746 465.246 541.746 470.141 545.238 455.25 544.746 455.25 544.746 449.461 549.637 450.25 553.75 450.25 553.75 458.699 551.84 442.859 567.68 440.25 571.75 437.578 575.598 448.25 581.746 448.25 581.746 462.66 585.277 450.25 588.75 450.25 588.75 428.34 588.359 440.25 599.75 440.25 599.75 446.82 599.797 445.246 602.75 445.246 602.75 439.34 603.758 429.25 610.75 429.25 610.75 424.379 614.758 428.25 613.75 428.25 613.75 446.82 612.559 415.25 624.75 415.25 624.75 423.938 624.879 404.25 636.746 404.25 636.746 401.938 638.078 398.246 646.75 398.246 646.75 391.82 652.156 386.246 659.75 386.246 659.75 386.098 664.477 381.25 669.746 381.25 669.746 368.059 684.719 362.25 684.746 362.25 684.746 345.621 688.238 340.25 687.75 340.25 687.75 282.25 682.746 252.777 668.438 261.25 645.746 261.25 645.746 268.398 636.098 278.246 640.746 278.246 640.746 283.578 647.098 296.25 644.75 296.25 644.75 318.777 641.156 316.25 644.75 316.25 644.75 313.277 650.18 295.457 657 295.25 657.75 295.02 658.316 285.25 661.75 285.25 661.75 282.039 663.379 277.246 673.746 277.246 673.746 273.68 677.238 291.246 670.75 291.246 670.75 289.738 669.758 298.246 665.75 298.246 665.75 317.02 666.457 328.25 654.75 328.25 654.75 340.559 636.316 341.25 645.746 341.25 645.746 343.859 655.68 331.246 678.746 331.246 678.746 331.32 681.199 340.25 673.746 340.25 673.746 341.879 676.137 343.246 669.746 343.246 669.746 342.98 667.117 347.25 658.746 347.25 658.746 350.238 644.02 354.246 651.746 354.246 651.746 359.25 641.75 360.801 638.957 354.246 630.75 354.246 630.75 353.98 627.52 354.859 627.738 348.25 619.75 342.539 611.02 346.246 605.746 346.246 605.746 344.738 598.918 354.246 599.75 354.246 599.75 357.277 596.938 361.25 596.746 361.25 596.746 363 594.738 365.246 595.75 365.246 595.75 367.398 599.578 374.25 597.75 374.25 597.75 375.758 600.02 385.25 600.75 385.25 600.75 385.879 603.316 386.32 605.078 390.246 605.746 393.801 606.398 366.246 653.746 366.246 653.746 373.777 654.578 365.246 667.746 365.246 667.746 362.34 675.477 374.879 659.418 377.246 657.75 379.719 656.34 380.82 653.918 379.246 653.746 377.301 654.359 375.32 651.938 377.246 651.746 378.398 651.5 392.699 635 396.25 623.746 400.18 612.559 406.777 608.156 413.246 601.746 420.418 594.957 419.246 568.746 419.246 568.746 419.098 558.656 425.25 546.746 425.25 546.746 427.898 542.816 423.246 522.746 423.246 522.746 421.078 520.379 422.246 519.746 422.246 519.746 423.719 518.18 431.246 503.75 431.246 503.75 429.219 503.879 433.246 499.746 433.246 499.746 438.898 493.316 432.246 496.75 432.246 496.75 425.258 498.379 433.246 487.75 433.246 487.75 434.277 485.617 424.246 490.75 424.246 490.75 414.258 491.34 427.25 483.75 427.25 483.75 436.48 475.5 424.246 480.746 424.246 480.746 418.879 482.316 422.246 474.75 422.246 474.75 425.918 473.078 445.246 465.75 445.246 465.75 445.277 461.195 442.246 455.746 442.246 455.746 442.418 451.297 440.25 447.746 440.25 447.746 438.68 438.535 438.25 437.75 438.25 437.75 433.398 437.438 425.25 422.746 425.25 422.746 423.277 419.398 412.246 405.746 412.246 405.746 409.859 398.496 390.246 406.75 390.246 406.75 382.801 402.676 385.25 406.75 385.25 406.75 384.559 408.836 390.246 415.75 390.246 415.75 397.539 418.297 394.25 429.746 394.25 429.746 399.078 431.719 386.758 434.797 387.246 435.75 387.199 437.438 393.25 438.746 393.25 438.746 402.379 441.176 397.246 443.75 397.246 443.75 396.879 448.219 400.246 454.75 400.246 454.75 412.938 455.258 400.246 472.75 400.246 472.75 388.301 481.438 387.246 487.75 387.246 487.75 401.059 496.84 392.039 510.477 392.25 514.75 392.48 518.398 394.25 541.746 394.25 541.746 391.598 548.977 388.246 563.746 388.246 563.746 390.719 569.656 399.246 583.746 399.246 583.746 401.938 588.137 411.621 593.418 409.246 596.746 406.777 600.02 398.246 597.75 398.246 597.75 389.621 599.578 390.246 593.75 390.246 593.75 388.52 592.758 387.246 587.746 387.246 587.746 386.848 578.531 377.246 571.75 377.246 571.75 364.758 564.816 375.246 560.75 375.246 560.75 381.48 553.156 370.25 552.746 370.25 552.746 358.598 554.918 367.246 543.746 367.246 543.746 379.5 529.617 376.246 526.746 376.246 526.746 364.98 525.438 379.246 515.746 379.246 515.746 379.242 515.742 377.961 517.52 378.246 515.746 378.398 513.559 381.699 508.938 382.25 506.746 383.461 504.539 379.246 504.746 379.246 504.746 379.719 493.758 363.25 498.75 363.25 498.75 363.25 498.75 362.777 498.379 361.25 497.746 359.258 497.938 346.938 498.816 340.25 500.746 334.18 503.656 326.25 503.75 326.25 503.75 326.25 503.75 322.301 501.68 314.25 501.75 305.578 502.117 297.246 498.75 297.246 498.75 291.937 499.477 301.398 504.316 301.246 503.75 301.84 503.879 308 510.039 299.246 509.75 275.223 507.578 263.25 518.75 263.25 518.75 261.137 520.379 258.246 523.75 258.246 523.75 247.277 525.656 260.25 509.75 260.25 509.75 261.137 508.277 259.25 506.746 259.25 506.746 258.719 508.938 250.25 514.75 250.25 514.75 247.047 515.949 245.547 517.414 243.246 519.746 10 0 0.3 0 0 0.3 0 0 7 216.25 532.746 216.25 532.742 229.457 526.758 232.246 523.75 235.18 520.598 250.25 507.75 250.25 507.75 250.25 507.75 244.637 510.258 242.246 511.746 238.918 514.219 227.25 522.746 227.25 522.746 227.25 522.746 222.859 529.84 216.25 532.746 10 0 0.6 0.8 0.2 0.6 0.8 0.2 6 153.246 566.75 153.258 567.398 152.684 570.379 152.25 570.746 151.332 573.977 141.25 575.75 141.25 575.75 141.207 574.098 141.148 572.34 141.25 570.746 141.25 570.746 146.621 564.469 153.246 566.75 10 0 0.4 0.6 0 0.4 0.6 0 6 153.246 567.75 152.395 567.281 152.871 570.461 152.25 570.746 151.555 573.977 141.25 575.75 141.25 575.75 141.207 574.207 141.148 572.449 141.25 570.746 141.25 570.746 145.961 565.02 153.246 567.75 10 0 0 0 0 0 0 0 6 148.246 567.75 147.371 567.297 146.812 568.551 147.25 569.75 146.812 571.645 147.371 572.898 148.246 572.746 148.746 572.898 149.305 571.645 149.246 569.75 149.305 568.551 148.746 567.297 148.246 567.75 10 0 0 0 0 0 0 0 17 98.2461 459.75 98.2422 459.75 91.7383 448.438 119.25 454.75 119.25 454.75 134.418 456.355 137.246 458.746 138.379 458.117 147.582 454.891 150.246 453.746 158.18 452.398 167.25 463.75 167.25 463.75 167.25 463.75 172.477 474.949 175.25 474.75 178.637 474.949 175.25 472.75 175.25 472.75 175.25 472.75 167.859 462.078 168.25 460.746 168.25 460.742 162.578 438.316 145.25 437.75 145.25 437.75 127.215 436.391 128.25 429.746 128.25 429.742 138.379 432.598 141.25 429.746 141.25 429.742 152.898 430.398 144.246 423.746 136.25 410.75 136.25 410.75 136.773 406.289 125.25 409.746 114.84 413.898 103.25 427.746 103.25 427.746 103.25 427.742 85.9648 444.094 98.2461 459.75 10 0 0.9 0.6 0.6 0.9 0.6 0.6 14 96.25 454.75 96.25 454.75 94.3789 444.477 135.25 455.746 135.25 455.742 139.699 455.918 142.246 454.75 144.977 454.156 158.18 451.078 160.246 452.75 160.246 452.75 152.457 437.438 139.246 438.746 139.246 438.742 125.18 437.438 125.25 431.746 125.25 431.742 130.02 424.238 135.25 421.75 135.25 421.75 138.379 418.957 138.246 415.75 137.5 411.918 134.418 410.156 132.246 409.746 130.02 408.398 126.5 411.918 124.25 411.746 122.977 411.918 113.738 418.957 109.246 423.746 104.059 429.516 94.8164 442.719 95.25 445.746 95.6992 448.879 96.25 454.75 96.25 454.75 10 0 0.7 0.4 0.4 0.7 0.4 0.4 13 100.246 435.75 102.957 431.496 106.477 426.879 109.246 423.746 113.738 418.957 122.977 411.918 124.25 411.746 126.5 411.918 130.02 408.398 132.246 409.746 134.418 410.156 137.5 411.918 138.246 415.75 138.379 418.957 135.25 421.75 135.25 421.75 131.926 423.285 128.91 427.125 127.246 429.746 127.246 429.742 127.379 426.879 121.246 427.746 115.938 428.637 110.219 431.719 108.25 434.746 106.699 438.758 104.059 441.398 106.25 437.75 107.578 433.477 110.219 429.516 112.25 428.75 113.738 428.637 113.297 427.316 110.246 427.746 108.02 428.195 104.938 428.637 100.246 434.746 10 0 0.6 0.15 0 0.6 0.15 0 20 97.25 458.746 97.25 458.746 99.2187 473.957 100.246 478.746 100.246 478.746 99.6563 485.84 102.25 490.75 104.938 495.078 107.137 501.898 110.246 507.75 113.738 513.777 113.957 518.18 118.25 519.746 122.758 521.699 129.359 531.156 132.246 532.746 135.52 533.359 135.25 532.746 135.25 532.746 135.25 532.742 142.777 548.758 157.25 544.746 157.25 544.746 139.918 547.438 157.25 557.746 157.25 557.746 152.02 556.566 155.246 564.75 158.07 569.402 157.52 561.957 145.25 548.746 145.25 548.746 139.918 539.52 134.25 535.746 128.477 532.918 115.277 525.219 114.25 520.75 112.637 516.859 109.117 510.477 107.25 508.746 104.719 506.957 101.637 502.34 101.25 498.75 101.25 498.75 99.8789 494.199 98.2461 492.75 96.7969 491.559 96.5781 488.039 96.25 485.75 96.5781 483.637 94.3789 480.559 94.2461 477.746 94.2461 477.742 95.4766 457.016 95.25 454.75 97.25 458.746 10 0 1 1 1 1 1 1 6 88.2461 453.746 88.2461 453.742 85.5781 455.477 80.25 448.75 80.25 448.75 88.7695 412.578 89.2461 410.75 89.2461 410.75 89.9766 413.348 88.2461 421.75 87.1172 429.188 86.25 442.746 86.25 442.746 88.2461 453.746 10 0 0.6 0.15 0 0.6 0.15 0 13 111.246 520.75 111.246 520.75 92.1797 517.078 92.2461 484.746 91.25 457.75 91.25 457.75 90.418 485.84 89.2461 487.75 87.7773 489.359 92.1797 501.68 88.2461 494.75 88.2461 494.75 73.2578 479.68 82.2461 456.746 82.2422 456.746 83.707 452.727 80.25 457.75 80.25 457.75 75.3477 471.648 76.2461 478.746 76.2422 478.746 76.7773 481.109 79.25 483.75 79.25 483.75 88.3281 497.059 91.25 499.746 91.25 499.742 93.2773 515.43 110.246 520.75 110.246 520.75 116.488 523.68 111.246 520.75 10 0 0 0 0 0 0 0 28 265.246 593.75 265.605 593.809 265.594 594.875 266.246 594.746 267.496 595.441 267.676 596.617 268.246 597.75 269.207 598.93 269.418 600.617 270.25 602.75 270.359 603.027 270.387 604.078 270.25 604.75 268.754 607.531 267.98 610.227 266.246 612.746 266.098 613.391 265.812 614.262 265.246 614.746 265.082 616.441 263.699 617.535 263.25 618.746 262.434 619.469 263.012 620.488 262.25 620.746 261.238 620.695 259.645 621.332 259.25 619.75 258.742 617.359 259.852 614.586 261.25 611.75 260.059 611.137 260.426 610.125 260.25 609.746 261.375 605.313 260.055 601.625 259.25 597.75 259.191 597.691 259.57 597.473 259.25 597.75 258.195 594.449 256.598 591.762 254.246 588.75 253.762 588.051 252.805 587.043 252.25 585.746 251.852 585.008 251.402 583.945 251.25 582.75 247.898 579.801 245.426 575.57 242.246 571.75 242.043 570.594 242.363 569.262 243.246 568.746 243.863 568.527 244.918 569.656 245.246 570.746 245.859 571.352 246.25 572.066 247.246 572.746 246.937 572.969 246.738 573.43 247.246 573.75 249.785 576.145 251.621 579.375 254.246 581.746 256.465 582.34 258.152 583.438 260.25 584.75 260.414 584.75 260.992 584.477 261.25 584.75 263.238 585.984 263.238 588.223 263.25 590.746 263.41 591.297 263.625 592.746 265.246 593.75 10 0 0 0 0 0 0 0 19 255.246 598.746 255.289 598.414 255.117 598.879 255.246 598.746 255.418 599.477 255.859 599.68 256.246 599.75 256.16 600.277 255.98 600.695 256.246 600.75 258.695 603.543 258.977 606.867 258.246 609.746 258.965 610.82 259.031 612.207 258.246 612.746 257.625 615.012 257.414 617.129 256.246 618.746 255.457 620.223 253.723 621.59 252.25 619.75 251.75 619.719 251.398 618.852 251.25 617.75 251.773 617.887 252.09 617.727 252.25 617.75 251.941 617.281 251.34 617.035 251.25 616.746 251.301 615.09 250.25 613.43 251.25 611.75 251.793 610.176 252.695 608.133 253.246 605.746 252.082 603.852 253.219 601.156 251.25 598.746 251.141 598.93 251.148 598.508 251.25 598.746 251.605 597.75 252.051 597.305 252.25 596.746 252.809 596.848 253.191 596.848 253.246 596.746 254.047 597.383 254.484 597.918 255.246 598.746 10 0 0 0 0 0 0 0 21 324.246 609.746 325.773 607.703 326.094 604.629 324.246 602.75 324.445 599.457 328.129 601.637 330.25 601.746 330.32 602.645 330.57 603.023 331.246 602.75 332.043 603.047 332.789 604.18 334.246 603.746 334.438 605.691 336.238 606.465 337.25 607.746 338.844 612.047 338.195 616.746 335.246 620.746 335.129 620.598 335.371 621.164 335.246 621.75 334.402 623.996 332.125 624.34 330.25 624.75 328.703 629.359 327.977 633.793 326.25 637.75 324.266 638.133 323.496 640.047 322.246 640.746 320.559 641.629 319.934 639.891 320.246 638.746 319.988 638.516 320.484 638.27 320.246 637.75 320.215 637.688 319.926 637.566 320.246 637.75 319.93 637.27 320.172 637.125 320.246 636.746 319.309 636.074 317.742 635.551 317.25 634.746 316.371 630.211 319.199 626.773 321.246 623.746 321.684 622.004 320.875 620.605 320.246 619.75 319.559 618.512 319.676 617.273 320.246 616.746 320.809 613.766 322.559 611.855 324.246 609.746 10 0 0 0 0 0 0 0 73 283.25 589.75 281.734 587.41 277.98 584.586 281.25 582.75 281.402 582.324 281.809 582.32 282.25 582.75 284.223 584.188 286.426 585.18 289.246 585.746 289.242 585.852 289.543 585.34 290.246 585.746 291.727 586.289 293.938 586.227 295.25 587.746 299.383 587.453 303.305 588.68 307.25 589.75 308.309 590.609 309.707 591.227 311.246 591.75 312.543 592.41 313.867 593.434 315.25 594.746 315.234 594.836 315.625 594.738 316.25 594.746 315.875 595.688 316.934 595.828 317.25 596.746 317.305 596.766 317.141 597.203 317.25 597.75 319.641 599.105 320.652 601.328 319.25 603.746 319.051 604.578 318.777 605.258 318.25 605.746 316.961 606.781 315.75 605.844 314.25 605.746 314.422 605.488 313.621 605.676 313.246 605.746 312.25 604.977 310.785 605.621 310.246 604.75 308.344 604.371 306.977 604.188 305.25 603.746 305.07 603.684 304.215 603.789 304.25 602.75 303.891 603.246 303.727 603.504 303.25 603.746 301.512 603.043 300.125 602.809 298.246 600.75 298.582 600.801 298.098 600.996 298.246 600.75 296.867 599.961 296.422 598.602 295.25 597.75 294.992 597.727 294.602 597.914 294.25 597.75 293.68 597.297 293.277 596.59 292.25 595.75 292.207 595.848 291.766 596.207 292.25 596.746 292.07 598.629 292.789 600.594 292.25 602.75 294.441 605.43 297.211 607.574 299.246 610.75 299.215 612.961 299.977 615.32 300.246 617.75 299.84 617.816 299.523 618.625 299.246 618.746 299.043 619.945 300.039 621.117 299.246 621.75 297.566 623.238 296.145 622.273 295.25 620.746 293.215 620.27 290.945 619.508 289.246 620.746 288.102 621.73 287.465 622.727 286.246 623.746 285.504 625.32 285.871 626.898 286.246 628.75 285.953 628.762 285.609 628.91 285.25 628.75 285.609 629.207 285.852 629.352 286.246 629.746 285.223 630.188 284.918 631.352 284.25 631.746 284.133 632.898 283.391 633.871 282.25 633.75 280.238 634.965 278.395 632.859 276.246 632.75 275.746 632.758 275.23 633.902 274.25 634.746 274.043 634.496 273.27 634.531 273.25 633.75 272.113 633.688 271.465 633.559 270.25 633.75 268.852 632.855 267.449 631.652 266.246 630.75 264.188 629.77 263.137 628.188 262.25 626.75 260.914 625.469 260.762 622.813 262.25 622.75 264.352 621.547 265.785 624.523 268.246 623.746 268.293 624.105 268.52 623.766 268.246 623.746 268.824 623.219 269.066 623.469 269.246 623.746 270.223 622.656 271.504 622.285 272.25 621.75 273.602 620.332 275.523 620.793 276.246 619.75 278.32 618.043 277.707 615.094 280.246 613.75 279.195 612.215 278.527 610.809 278.246 608.75 277.848 607.914 278.941 606.598 280.246 606.75 281.656 606.801 281.945 607.633 282.25 608.75 282.773 608.523 283.289 608.199 283.25 607.746 282.738 605.336 281.609 603.141 281.25 600.75 281.043 600.121 280.707 599.898 280.246 599.75 279.762 595.453 275.305 592.82 272.25 589.75 272.063 588.785 272.059 587.414 272.25 586.75 274.051 585.445 276.207 587.145 278.246 587.746 278.313 589.023 279.258 590.063 280.246 589.75 281.004 589.988 281.262 590.586 281.25 590.746 282 590.879 282.555 590.633 283.25 590.746 284.77 592.164 286.32 593.383 288.246 594.746 288.441 594.832 288.82 594.66 289.246 594.746 289.414 594.957 289.621 595.383 290.246 595.75 290.359 595.805 290.625 595.484 291.246 594.746 290.129 594.793 290.125 593.742 289.246 593.75 288.629 593.223 288.012 592.66 287.246 591.75 286.949 591.957 286.227 592.23 286.246 591.75 285.453 590.902 284.152 590.418 283.25 589.75 10 0 0 0 0 0 0 0 30 222.246 643.75 222.246 643.75 212.258 646.957 200.246 618.746 200.246 618.742 197.34 613 194.25 610.75 192.059 608.598 179.738 604.637 177.246 599.75 166.246 582.75 166.246 582.75 182.379 600.238 186.25 602.75 186.25 602.75 194.699 612.117 191.246 604.75 191.242 604.75 175.777 592.758 177.246 582.75 177.246 582.75 170.938 566.797 170.246 564.75 170.242 564.75 187.656 599.797 190.246 600.75 192.938 602.438 194.258 602.438 193.25 598.746 191.617 594.52 191.18 576.477 188.246 574.746 188.246 574.742 196.898 596.719 196.25 599.75 196.25 599.75 199.539 604.199 202.246 598.746 201.246 580.75 205.25 567.75 205.25 567.75 203.059 580 205.25 596.746 205.25 596.742 202.617 608.598 207.25 602.75 211.418 596.277 221.977 589.68 222.246 584.75 222.246 584.75 216.258 603.758 206.25 608.75 201.246 602.75 200.246 604.75 200.246 604.75 196.457 605.52 201.246 612.746 206.137 620.477 205.25 621.75 205.25 621.75 205.25 621.75 212.738 613.438 214.25 613.75 214.25 613.75 229.02 621.797 230.25 594.746 230.25 594.742 237.816 610.797 227.25 618.746 227.25 618.742 211.418 620.477 212.246 625.746 220.246 639.75 224.617 645.559 223.246 642.746 223.246 642.746 10 0 0 0 0 0 0 0 6 200.246 625.746 200.246 625.746 186.34 625.758 183.25 619.75 175.25 609.746 175.25 609.742 193.816 620.477 198.246 621.75 202.617 623.117 200.246 625.746 200.246 625.746 10 0 0 0 0 0 0 0 7 156.25 618.746 156.25 618.742 154.219 617.398 154.246 614.746 153.34 611.238 150.699 610.797 151.25 607.746 152.457 604.637 154.656 602 154.246 606.75 154.656 610.797 156.418 613 157.25 614.746 158.18 615.637 159.938 620.477 156.25 618.746 10 0 0 0 0 0 0 0 10 146.25 551.75 146.25 551.75 137.5 555.797 134.25 559.746 130.457 563.719 130.957 558.035 125.25 558.75 119.187 558.922 120.246 576.746 120.246 576.746 116.246 567.75 116.246 567.75 114.617 552.277 123.25 554.746 127.715 556.207 129.137 554.477 127.246 553.75 125.617 552.719 133.539 552.277 130.25 550.746 127.379 548.758 143.219 554.477 140.25 542.75 146.25 551.75 10 0 0 0 0 0 0 0 8 133.246 535.746 133.246 535.746 115.938 530.719 112.25 541.746 112.25 541.742 106.699 538.637 109.246 535.746 111.539 532.039 113.25 531.75 113.25 531.75 113.25 531.75 118.797 530.277 118.25 529.75 117.477 528.52 115.246 524.746 115.246 524.746 115.242 524.746 126.059 531.379 133.246 535.746 10 0 1 1 1 1 1 1 24 384.25 449.746 383.648 447.191 381.813 446.309 379.246 445.746 377.609 446.629 374.754 450.047 372.25 447.746 372.156 448.305 371.301 448.371 371.25 448.75 370.41 450.086 370.711 451.238 370.25 451.746 369.734 453.516 368.953 455.016 369.25 456.746 371.145 457.359 371.801 459.457 371.25 461.75 371.203 461.68 370.73 461.895 371.25 462.746 371.156 462.633 371.504 462.883 372.25 462.746 371.652 463.031 371.492 462.773 371.25 462.746 370.699 462.91 370.836 463.613 371.25 463.75 371.621 465.957 373.836 466.25 375.246 464.746 375.602 465.559 376.16 465.348 376.246 465.75 376.586 466.016 377.031 466.594 377.246 466.746 377.82 468.266 379.613 467.047 380.25 467.746 381.672 468.629 382.844 469.398 384.25 468.75 386.02 467.621 387.898 466.285 389.246 464.746 389.848 463.453 390.113 462.047 390.246 460.746 390.008 460.281 388.488 460.668 388.246 459.75 387.402 457.723 389.414 457.152 390.246 455.746 390.465 455.297 390.176 454.961 390.246 454.75 389.375 454.711 388.516 454.922 388.246 454.75 389.734 450.91 386.703 450.164 384.25 449.746 10 0 1 1 1 1 1 1 11 373.25 427.746 373.551 429.891 371.789 431.82 373.25 433.746 373.27 433.551 373.41 433.305 373.25 433.746 373.707 433.305 373.852 433.551 374.25 433.746 375.645 431.258 379.66 430.238 379.246 426.75 379.48 426.617 378.285 425.605 379.246 424.75 377.285 423.414 377.223 420.809 376.246 418.746 374.836 419.051 373.504 419.449 372.25 419.75 372.625 421.691 372.496 423.543 373.25 424.75 373.879 425.766 373.563 426.949 373.25 427.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 15 190.246 437.75 190.246 437.75 172.195 426.727 187.246 443.75 197.34 454.156 208.25 460.746 208.25 460.746 208.25 460.742 219.777 465.156 223.246 466.746 227.699 467.797 244.418 473.52 248.25 473.746 251.457 474.398 262.02 478.797 269.246 474.75 276.977 470 286.246 464.746 286.246 464.746 286.246 464.742 267.738 474.398 264.246 471.746 259.816 469.117 251.898 469.559 245.246 465.75 245.246 465.75 229.02 461.195 225.25 458.746 221.977 456.797 210.539 444.035 209.246 444.746 207.02 445.797 209.219 446.238 210.246 449.746 211.859 452.398 209.656 454.156 201.246 446.75 192.059 440.078 190.246 437.75 190.246 437.75 10 0 0 0 0 0 0 0 11 199.246 444.746 199.246 444.742 200.434 458.785 210.246 456.746 210.246 456.746 218.809 461.539 222.246 463.75 222.246 463.75 230.758 465.578 232.246 466.746 252.523 475.824 268.715 470.855 269.246 471.746 269.918 473.316 291.504 465.488 295.25 460.746 295.906 460.508 284.219 467.152 273.25 468.75 264.453 471.008 240.691 468.961 228.25 462.746 225.422 461.211 215.582 454.848 213.246 454.75 210.016 455.094 199.246 444.746 199.246 444.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 11 194.25 416.746 194.25 416.742 177.977 418.957 196.25 420.746 196.25 420.742 216.258 422.918 220.246 428.75 220.246 428.75 235.617 438.758 238.25 438.746 241.777 439.637 274.777 447.559 275.246 449.746 275.656 452.836 281.816 452.836 283.25 451.746 285.34 451.078 284.457 449.758 281.25 448.75 278.297 447.996 243.977 429.957 237.25 428.75 229.898 427.316 217.137 418.957 212.246 417.75 206.578 416.316 194.25 416.746 194.25 416.746 10 0 0 0 0 0 0 0 11 216.25 424.75 216.25 424.75 206.73 425.367 216.25 426.75 216.25 426.75 225.887 430.035 228.25 432.75 228.25 432.75 235.801 438.145 237.25 438.746 238.957 438.594 254.313 442.652 254.246 443.75 254.762 445.355 292.234 459.191 297.246 455.746 300.301 453.371 289.406 455.219 279.246 450.75 277.32 449.684 240.082 433.637 236.25 432.75 232.871 432.285 226.34 428.008 223.246 427.746 220.934 426.656 216.25 424.75 216.25 424.75 10 0 0 0 0 0 0 0 4 207.25 421.75 207.25 421.75 213.18 422.477 212.246 420.746 210.539 418.957 208.25 419.75 208.25 419.75 207.25 421.75 10 0 0 0 0 0 0 0 4 199.246 420.746 199.246 420.742 205.258 420.719 204.25 418.746 202.617 417.195 200.246 417.75 200.246 417.75 199.246 420.746 10 0 0 0 0 0 0 0 4 188.246 418.746 188.246 418.742 193.816 418.957 192.25 416.746 191.18 415.438 188.246 416.746 188.246 416.746 188.246 418.746 10 0 0 0 0 0 0 0 4 179.246 417.75 179.246 417.75 185.457 418.078 184.25 416.746 182.816 414.559 180.246 415.75 180.246 415.75 179.246 417.75 10 0 0 0 0 0 0 0 4 222.246 460.746 222.246 460.742 226.816 461.195 225.25 459.75 224.18 457.676 220.246 457.75 220.246 457.75 222.246 460.746 10 0 0 0 0 0 0 0 4 211.246 454.75 211.246 454.75 218.133 457.391 215.25 453.746 214.059 451.957 211.246 452.75 211.246 452.75 211.246 454.75 10 0 0 0 0 0 0 0 4 198.246 449.746 198.246 449.742 204.379 450.195 203.25 448.75 201.738 446.676 199.246 447.746 199.246 447.746 198.246 449.746 10 0 0 0 0 0 0 0 4 190.246 442.746 190.246 442.742 196.02 443.598 194.25 441.75 193.379 440.078 190.246 440.746 190.246 440.746 190.246 442.746 10 0 0 0 0 0 0 0 4 183.25 437.75 183.25 437.75 188.539 438.316 187.246 436.746 185.898 434.797 183.25 435.75 183.25 435.75 183.25 437.75 10 0 0 0 0 0 0 0 4 226.25 430.75 226.25 430.75 233.422 431.426 231.246 428.75 229.906 426.742 226.25 427.746 226.25 427.746 226.25 430.75 10 0 0 0 0 0 0 0 4 237.25 435.75 237.25 435.75 244.863 436.707 243.246 434.746 241.348 432.02 238.25 432.75 238.25 432.75 237.25 435.75 10 0 0 0 0 0 0 0 4 249.25 440.746 249.25 440.742 256.742 441.547 255.246 438.746 253.227 436.859 249.25 437.75 249.25 437.75 249.25 440.746 10 0 0 0 0 0 0 0 4 260.25 445.746 260.25 445.746 268.18 446.824 266.246 444.746 264.668 442.141 261.25 443.75 261.25 443.75 260.25 445.746 10 0 0 0 0 0 0 0 4 230.25 465.75 230.25 465.75 237.82 466.625 236.25 464.746 234.309 461.941 230.25 461.75 230.25 461.75 230.25 465.75 10 0 0 0 0 0 0 0 4 241.25 469.746 241.25 469.746 248.82 470.145 247.246 467.746 245.309 465.461 240.25 465.75 240.25 465.75 241.25 469.746 10 0 0 0 0 0 0 0 4 216.25 425.746 216.25 425.746 221.977 425.996 220.246 423.746 219.34 422.477 216.25 423.746 216.25 423.746 216.25 425.746 10 0 0.6 0.15 0 0.6 0.15 0 5 135.25 534.75 135.25 534.75 130.898 525 130.25 521.746 130.25 521.742 131.34 531.156 132.246 533.746 133.977 535.559 135.25 534.75 135.25 534.75 10 0 0.6 0.15 0 0.6 0.15 0 5 115.246 519.746 115.242 519.742 111.977 503.438 112.25 500.746 112.25 500.746 111.098 513.117 111.246 514.75 111.977 515.758 115.246 519.746 115.246 519.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 138.246 601.746 138.246 597.75 135.25 597.75 135.25 597.75 151.359 583.738 152.25 575.75 152.25 575.75 152.898 584.398 138.246 601.746 10 0 0 0 0 0 0 0 28 143.246 599.75 142.285 600.402 142.527 601.223 142.246 601.746 141.188 602.078 143.508 602.141 143.246 602.75 142.836 604.254 143.039 604.277 143.246 605.746 142.844 606.34 143.488 608.031 144.246 608.75 145.504 610.332 144.047 613.559 146.25 615.75 146.188 615.582 146.598 616.191 147.25 616.746 147.637 617.711 148.941 618.246 150.246 618.746 150.336 619.461 150.113 620.371 150.246 620.746 151.523 620.141 152.891 620.285 153.246 619.75 152.715 617.027 151.254 615.137 150.246 613.75 150.344 612.527 149.84 611.828 149.246 610.75 148.059 608.336 148.266 605.207 148.246 601.746 148.07 601.992 147.73 601.906 147.25 601.746 148.129 599.277 148.77 596.859 149.246 594.746 150.141 593.387 150.66 592.402 151.25 591.75 150.945 590.625 151.059 589.711 150.246 588.75 152.848 585.754 151.41 582.84 152.25 578.75 152.922 578.27 154.785 576.164 154.246 576.746 151.512 577.297 151.387 577.734 151.25 578.75 151.031 579.25 150.668 580.762 150.246 581.746 150.336 581.605 150.148 583.68 150.246 583.746 148.398 586.434 149.895 586.238 148.246 588.75 146.816 589.582 145.754 590.797 144.246 591.75 144.301 592.297 145.559 593.094 145.25 593.75 144.156 594.746 142.887 595.59 143.246 596.746 143.43 597.992 143.578 599.156 143.246 599.75 10 0 0 0 0 0 0 0 11 139.246 597.75 139.246 597.75 139.258 590.559 142.246 588.75 144.539 587.039 143.219 587.918 139.246 588.75 136.18 590.559 137.246 591.75 137.246 591.75 137.242 591.75 134.418 591 137.246 588.75 139.699 586.598 143.656 583.957 142.246 583.746 140.137 583.957 131.777 588.359 132.246 591.75 131.777 594.52 130.25 598.746 130.25 598.746 130.25 598.742 131.887 599.906 137.246 599.75 137.242 599.75 138.707 599.027 139.246 597.75 10 0 1 1 1 1 1 1 5 138.246 577.75 138.246 577.75 128.566 580.648 108.25 576.746 108.25 576.742 118.172 579.203 139.246 576.746 150.148 575.324 138.246 577.75 138.246 577.75 10 0.11 0 0 0 0 0 0 5 138.246 577.75 138.246 577.75 128.566 580.648 108.25 576.746 108.25 576.742 118.172 579.203 139.246 576.746 150.148 575.324 138.246 577.75 138.246 577.75 10 0 1 1 1 1 1 1 5 140.25 577.75 140.25 577.75 131.176 581.527 110.246 579.746 110.246 579.746 120.695 580.984 141.25 576.746 152.215 574.355 140.25 577.75 140.25 577.75 10 0.11 0 0 0 0 0 0 5 140.25 577.75 140.25 577.75 131.176 581.527 110.246 579.746 110.246 579.746 120.695 580.984 141.25 576.746 152.215 574.355 140.25 577.75 140.25 577.75 10 0 1 1 1 1 1 1 5 142.246 577.75 142.242 577.75 133.453 582.086 113.25 581.746 113.25 581.746 122.965 582.328 143.246 576.746 153.902 573.371 142.246 577.75 142.246 577.75 10 0.11 0 0 0 0 0 0 5 142.246 577.75 142.242 577.75 133.453 582.086 113.25 581.746 113.25 581.746 122.965 582.328 143.246 576.746 153.902 573.371 142.246 577.75 142.246 577.75 10 0 1 1 1 1 1 1 5 143.246 577.75 143.242 577.75 136.102 582.047 117.25 583.746 117.25 583.742 126.715 583.066 144.246 576.746 153.77 572.66 143.246 577.75 143.246 577.75 10 0.11 0 0 0 0 0 0 5 143.246 577.75 143.242 577.75 136.102 582.047 117.25 583.746 117.25 583.742 126.715 583.066 144.246 576.746 153.77 572.66 143.246 577.75 143.246 577.75 10 0 1 1 1 1 1 1 5 270.25 565.746 270.25 565.742 269.398 565.031 269.246 566.75 269.871 567.629 300.898 582.117 305.25 581.746 305.25 581.746 271.602 567.316 270.25 565.746 10 0.11 0 0 0 0 0 0 5 270.25 565.746 270.25 565.742 269.398 565.031 269.246 566.75 269.871 567.629 300.898 582.117 305.25 581.746 305.25 581.746 271.602 567.316 270.25 565.746 10 0 1 1 1 1 1 1 5 266.246 564.75 266.246 564.75 265.727 564.25 266.246 565.746 265.992 566.879 295.785 583.758 300.246 583.746 300.246 583.742 267.742 566.699 266.246 564.75 10 0.11 0 0 0 0 0 0 5 266.246 564.75 266.246 564.75 265.727 564.25 266.246 565.746 265.992 566.879 295.785 583.758 300.246 583.746 300.246 583.742 267.742 566.699 266.246 564.75 10 0 1 1 1 1 1 1 5 263.25 563.746 263.25 563.742 262.164 562.676 262.25 563.746 262.254 565.316 284.055 582.363 295.25 584.75 295.25 584.75 275.016 575.484 263.25 563.746 10 0.11 0 0 0 0 0 0 5 263.25 563.746 263.25 563.742 262.164 562.676 262.25 563.746 262.254 565.316 284.055 582.363 295.25 584.75 295.25 584.75 275.016 575.484 263.25 563.746 10 0 1 1 1 1 1 1 5 260.25 561.746 260.25 561.742 259.09 560.711 259.25 561.746 259.176 563.086 278.793 578.43 288.246 580.75 288.246 580.75 270.656 572.238 260.25 561.746 10 0.11 0 0 0 0 0 0 5 260.25 561.746 260.25 561.742 259.09 560.711 259.25 561.746 259.176 563.086 278.793 578.43 288.246 580.75 288.246 580.75 270.656 572.238 260.25 561.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 11 225.25 398.746 225.25 398.742 208.34 401.355 227.25 402.75 227.25 402.75 246.617 405.316 251.25 410.75 251.25 410.75 265.977 421.156 269.246 421.75 272.137 422.035 290.18 425.996 290.246 428.75 291.059 431.277 297.656 433.918 299.246 432.75 301.18 432.156 301.18 422.035 298.246 420.746 295.02 420.277 274.34 412.355 267.246 410.75 260.258 409.719 247.5 401.355 242.246 399.75 236.938 398.719 225.25 398.746 225.25 398.746 10 0 0 0 0 0 0 0 11 305.25 439.75 305.25 439.75 302.059 438.098 300.246 434.746 300.246 434.746 293.699 423.578 278.246 419.75 278.246 419.75 252.777 410.156 244.246 407.746 244.246 407.742 229.457 402.457 221.246 403.746 221.246 403.746 213.617 403.117 220.246 401.746 220.246 401.746 242.656 403.559 246.246 405.746 246.242 405.742 263.559 411.258 267.246 413.75 270.156 416.977 290.18 422.477 292.25 424.75 295.02 426.879 305.797 436.117 305.25 439.75 10 0 0 0 0 0 0 0 4 241.25 404.75 241.25 404.75 246.52 405.445 245.246 403.746 243.984 402.035 241.25 402.75 241.25 402.75 241.25 404.75 10 0 0 0 0 0 0 0 4 233.246 403.746 233.246 403.746 238.598 403.957 237.25 402.75 236.063 400.547 233.246 401.746 233.246 401.746 233.246 403.746 10 0 0 0 0 0 0 0 4 221.246 402.75 221.246 402.75 227.125 402.586 226.25 400.75 224.59 399.176 222.246 399.75 222.246 399.75 221.246 402.75 10 0 0 0 0 0 0 0 4 213.246 401.746 213.242 401.746 218.73 401.984 217.25 400.75 216.191 398.578 213.246 399.75 213.246 399.75 213.246 401.746 10 0 0 0 0 0 0 0 4 259.25 413.75 259.25 413.75 266.609 413.664 265.246 411.746 263.234 409.129 259.25 410.75 259.25 410.75 259.25 413.75 10 0 0 0 0 0 0 0 4 270.25 417.75 270.25 417.75 276.855 421.832 276.246 416.746 275.973 413.453 271.25 415.75 271.25 415.75 270.25 417.75 10 0 0 0 0 0 0 0 4 280.246 421.75 280.242 421.75 288.223 425.367 286.246 419.75 285.457 416.664 281.25 418.746 281.25 418.746 280.246 421.75 10 0 0 0 0 0 0 0 4 291.246 426.75 291.242 426.75 295.605 431.996 297.246 424.75 297.227 421.875 291.246 423.746 291.246 423.746 291.246 426.75 10 0 0 0 0 0 0 0 4 249.25 408.75 249.25 408.75 255.266 408.652 254.246 406.75 252.73 405.242 250.25 405.746 250.25 405.746 249.25 408.75 10 0 1 1 1 1 1 1 5 288.246 541.746 288.246 541.742 287.875 541.203 288.246 542.75 287.875 543.559 307.109 558.148 317.25 559.746 317.25 559.746 299.125 552.27 288.246 541.746 10 0.11 0 0 0 0 0 0 5 288.246 541.746 288.246 541.742 287.875 541.203 288.246 542.75 287.875 543.559 307.109 558.148 317.25 559.746 317.25 559.746 299.125 552.27 288.246 541.746 10 0 0 0 0 0 0 0 10 292.25 471.746 292.25 471.742 316.141 447.117 326.25 442.746 326.25 442.742 336.379 430.836 332.246 401.746 332.246 401.746 328.461 393.879 325.25 416.746 325.25 416.742 328.461 444.477 316.25 426.75 316.25 426.75 306.898 437.766 314.25 437.75 314.25 437.75 317.461 435.238 318.25 436.746 318.34 438.758 309.539 453.719 290.246 469.746 271.699 485.398 292.25 471.746 292.25 471.746 10 0 1 1 1 1 1 1 5 227.25 428.75 227.25 428.75 227.477 431.059 229.25 429.746 231.438 429.297 335.059 422.477 370.25 395.75 370.25 395.75 320.098 421.598 227.25 428.75 10 0.11 0 0 0 0 0 0 5 227.25 428.75 227.25 428.75 227.477 431.059 229.25 429.746 231.438 429.297 335.059 422.477 370.25 395.75 370.25 395.75 320.098 421.598 227.25 428.75 10 0 1 1 1 1 1 1 5 239.25 433.746 239.25 433.742 238.918 435.898 241.25 434.746 242.879 434.137 393.141 435.238 419.246 399.75 419.246 399.75 394.898 427.316 239.25 433.746 10 0.11 0 0 0 0 0 0 5 239.25 433.746 239.25 433.742 238.918 435.898 241.25 434.746 242.879 434.137 393.141 435.238 419.246 399.75 419.246 399.75 394.898 427.316 239.25 433.746 10 0 1 1 1 1 1 1 5 252.25 438.746 252.25 438.742 251.68 440.297 253.246 439.75 255.637 438.535 446.379 452.836 472.25 416.746 472.25 416.742 461.777 445.355 252.25 438.746 10 0.11 0 0 0 0 0 0 5 252.25 438.746 252.25 438.742 251.68 440.297 253.246 439.75 255.637 438.535 446.379 452.836 472.25 416.746 472.25 416.742 461.777 445.355 252.25 438.746 10 0 1 1 1 1 1 1 5 263.25 443.75 263.25 443.75 262.68 445.578 264.246 444.746 266.637 443.816 401.059 486.277 427.25 450.75 427.25 450.75 412.277 477.699 263.25 443.75 10 0.11 0 0 0 0 0 0 5 263.25 443.75 263.25 443.75 262.68 445.578 264.246 444.746 266.637 443.816 401.059 486.277 427.25 450.75 427.25 450.75 412.277 477.699 263.25 443.75 10 0 1 1 1 1 1 1 5 199.246 418.746 199.246 418.742 198.879 420.496 201.246 419.75 202.84 418.738 222.418 416.316 224.246 373.75 224.242 373.75 216.699 419.836 199.246 418.746 10 0.11 0 0 0 0 0 0 5 199.246 418.746 199.246 418.742 198.879 420.496 201.246 419.75 202.84 418.738 222.418 416.316 224.246 373.75 224.242 373.75 216.699 419.836 199.246 418.746 10 0 1 1 1 1 1 1 5 189.246 416.746 189.246 416.742 189.199 418.738 191.246 417.75 193.156 416.977 208.777 422.035 205.25 379.746 205.25 379.746 207.02 418.078 189.246 416.746 10 0.11 0 0 0 0 0 0 5 189.246 416.746 189.246 416.742 189.199 418.738 191.246 417.75 193.156 416.977 208.777 422.035 205.25 379.746 205.25 379.746 207.02 418.078 189.246 416.746 10 0 1 1 1 1 1 1 5 180.246 416.746 180.242 416.742 180.398 418.297 182.25 417.75 184.359 416.535 201.297 415.879 187.246 390.746 187.246 390.746 198.219 417.637 180.246 416.746 10 0.11 0 0 0 0 0 0 5 180.246 416.746 180.242 416.742 180.398 418.297 182.25 417.75 184.359 416.535 201.297 415.879 187.246 390.746 187.246 390.746 198.219 417.637 180.246 416.746 10 0 1 1 1 1 1 1 5 232.246 464.746 232.246 464.742 232.187 462.887 234.246 463.75 251.566 478.113 287.254 542.906 348.25 548.746 348.25 548.746 306.367 562.426 232.246 464.746 10 0.11 0 0 0 0 0 0 5 232.246 464.746 232.246 464.742 232.187 462.887 234.246 463.75 251.566 478.113 287.254 542.906 348.25 548.746 348.25 548.746 306.367 562.426 232.246 464.746 10 0 1 1 1 1 1 1 5 245.246 466.746 245.246 466.742 243.496 468.379 245.246 468.75 247.605 469.754 371.293 549.508 414.25 540.75 414.25 540.75 384.688 549.004 245.246 466.746 10 0.11 0 0 0 0 0 0 5 245.246 466.746 245.246 466.742 243.496 468.379 245.246 468.75 247.605 469.754 371.293 549.508 414.25 540.75 414.25 540.75 384.688 549.004 245.246 466.746 10 0 1 1 1 1 1 1 5 222.246 460.746 222.246 460.742 221.512 458.594 223.246 459.75 233.266 465.301 237.242 528.234 285.25 529.75 285.25 529.75 249.523 545.801 222.246 460.746 10 0.11 0 0 0 0 0 0 5 222.246 460.746 222.246 460.742 221.512 458.594 223.246 459.75 233.266 465.301 237.242 528.234 285.25 529.75 285.25 529.75 249.523 545.801 222.246 460.746 10 0 1 1 1 1 1 1 5 200.246 447.746 200.246 447.746 198.973 446.812 201.246 446.75 212.391 448.555 235.937 493.953 285.25 488.746 285.25 488.742 249.656 504.148 200.246 447.746 10 0.11 0 0 0 0 0 0 5 200.246 447.746 200.246 447.746 198.973 446.812 201.246 446.75 212.391 448.555 235.937 493.953 285.25 488.746 285.25 488.742 249.656 504.148 200.246 447.746 10 0 1 1 1 1 1 1 5 212.246 454.75 212.246 454.75 211.625 453.348 213.246 453.746 224.461 457.637 238.852 506.711 288.246 510.746 288.246 510.742 250.363 519.348 212.246 454.75 10 0.11 0 0 0 0 0 0 5 212.246 454.75 212.246 454.75 211.625 453.348 213.246 453.746 224.461 457.637 238.852 506.711 288.246 510.746 288.246 510.742 250.363 519.348 212.246 454.75 10 0 1 1 1 1 1 1 5 192.25 442.746 192.25 442.742 191.453 441.449 193.25 441.75 202.32 442.863 221.395 479.633 261.25 474.75 261.25 474.75 232.508 487.891 192.25 442.746 10 0.11 0 0 0 0 0 0 5 192.25 442.746 192.25 442.742 191.453 441.449 193.25 441.75 202.32 442.863 221.395 479.633 261.25 474.75 261.25 474.75 232.508 487.891 192.25 442.746 10 0 1 1 1 1 1 1 5 184.25 435.75 184.25 435.75 182.949 434.945 184.25 434.746 189.281 435.414 222.984 471.801 243.246 454.75 243.246 454.75 230.082 475.344 184.25 435.75 10 0.11 0 0 0 0 0 0 5 184.25 435.75 184.25 435.75 182.949 434.945 184.25 434.746 189.281 435.414 222.984 471.801 243.246 454.75 243.246 454.75 230.082 475.344 184.25 435.75 10 0 1 1 1 1 1 1 5 260.25 470.75 260.25 470.75 259.219 472.699 261.25 472.75 263.469 473.547 396.242 537.031 438.25 522.746 438.25 522.746 409.465 534.84 260.25 470.75 10 0.11 0 0 0 0 0 0 5 260.25 470.75 260.25 470.75 259.219 472.699 261.25 472.75 263.469 473.547 396.242 537.031 438.25 522.746 438.25 522.746 409.465 534.84 260.25 470.75 10 0 1 1 1 1 1 1 5 223.246 400.75 223.246 400.75 223.52 402.457 225.25 401.746 227.477 400.695 244.418 400.035 231.246 375.75 231.246 375.75 241.34 401.797 223.246 400.75 10 0.11 0 0 0 0 0 0 5 223.246 400.75 223.246 400.75 223.52 402.457 225.25 401.746 227.477 400.695 244.418 400.035 231.246 375.75 231.246 375.75 241.34 401.797 223.246 400.75 10 0 1 1 1 1 1 1 5 235.246 401.746 235.242 401.746 234.957 404.219 237.25 403.746 238.918 402.457 258.5 400.035 260.25 357.746 260.25 357.746 252.777 403.559 235.246 401.746 10 0.11 0 0 0 0 0 0 5 235.246 401.746 235.242 401.746 234.957 404.219 237.25 403.746 238.918 402.457 258.5 400.035 260.25 357.746 260.25 357.746 252.777 403.559 235.246 401.746 10 0 1 1 1 1 1 1 5 242.246 403.746 242.246 403.746 242.437 405.977 244.246 404.75 246.398 404.219 273.457 400.477 299.246 364.75 299.246 364.75 260.258 405.316 242.246 403.746 10 0.11 0 0 0 0 0 0 5 242.246 403.746 242.246 403.746 242.437 405.977 244.246 404.75 246.398 404.219 273.457 400.477 299.246 364.75 299.246 364.75 260.258 405.316 242.246 403.746 10 0 1 1 1 1 1 1 5 251.25 405.746 251.25 405.742 250.566 408.164 252.25 407.746 254.723 406.945 277.199 409.031 319.25 371.75 319.25 371.75 268.316 409.875 251.25 405.746 10 0.11 0 0 0 0 0 0 5 251.25 405.746 251.25 405.742 250.566 408.164 252.25 407.746 254.723 406.945 277.199 409.031 319.25 371.75 319.25 371.75 268.316 409.875 251.25 405.746 10 0 1 1 1 1 1 1 5 262.25 410.75 262.25 410.75 262.004 413.004 264.246 412.746 266.164 411.785 304.48 406.832 361.25 368.746 361.25 368.746 279.754 414.715 262.25 410.75 10 0.11 0 0 0 0 0 0 5 262.25 410.75 262.25 410.75 262.004 413.004 264.246 412.746 266.164 411.785 304.48 406.832 361.25 368.746 361.25 368.746 279.754 414.715 262.25 410.75 10 0 1 1 1 1 1 1 5 218.25 423.746 218.25 423.746 217.797 425.777 220.246 424.75 221.758 424.016 280.5 421.156 314.25 391.75 314.25 391.75 275.547 418.93 218.25 423.746 10 0.11 0 0 0 0 0 0 5 218.25 423.746 218.25 423.746 217.797 425.777 220.246 424.75 221.758 424.016 280.5 421.156 314.25 391.75 314.25 391.75 275.547 418.93 218.25 423.746 10 0 1 1 1 1 1 1 5 207.25 419.75 207.25 419.75 206.797 421.379 209.246 420.746 210.758 419.617 237.816 415.879 264.246 379.746 264.246 379.746 224.617 420.719 207.25 419.75 10 0.11 0 0 0 0 0 0 5 207.25 419.75 207.25 419.75 206.797 421.379 209.246 420.746 210.758 419.617 237.816 415.879 264.246 379.746 264.246 379.746 224.617 420.719 207.25 419.75 10 0 1 1 1 1 1 1 5 274.25 415.75 274.25 415.75 273.828 418.031 276.246 417.75 278.066 417.125 316.645 414.992 376.246 380.75 376.246 380.75 290.746 418.625 274.25 415.75 10 0.11 0 0 0 0 0 0 5 274.25 415.75 274.25 415.75 273.828 418.031 276.246 417.75 278.066 417.125 316.645 414.992 376.246 380.75 376.246 380.75 290.746 418.625 274.25 415.75 10 0 1 1 1 1 1 1 5 283.25 418.746 283.25 418.742 283.07 420.672 285.25 419.75 287.309 419.762 325.883 417.633 385.25 383.746 385.25 383.742 300.648 421.703 283.25 418.746 10 0.11 0 0 0 0 0 0 5 283.25 418.746 283.25 418.742 283.07 420.672 285.25 419.75 287.309 419.762 325.883 417.633 385.25 383.746 385.25 383.742 300.648 421.703 283.25 418.746 10 0 1 1 1 1 1 1 5 294.25 424.75 294.25 424.75 293.629 426.172 296.25 425.746 297.867 425.262 345.242 420.492 444.246 382.75 444.246 382.75 311.207 427.203 294.25 424.75 10 0.11 0 0 0 0 0 0 5 294.25 424.75 294.25 424.75 293.629 426.172 296.25 425.746 297.867 425.262 345.242 420.492 444.246 382.75 444.246 382.75 311.207 427.203 294.25 424.75 10 0 0 0 0 0 0 0 4 172.25 416.746 172.25 416.742 177.539 417.195 176.246 415.75 174.898 413.676 172.25 414.746 172.25 414.746 172.25 416.746 10 0 0 0 0 0 0 0 4 205.25 401.746 205.25 401.746 211.418 401.797 210.246 399.75 208.777 398.277 206.25 398.746 206.25 398.746 205.25 401.746 10 0 0 0 0 0 0 0 4 196.25 401.746 196.25 401.746 201.738 402.238 200.246 400.75 199.098 398.719 196.25 399.75 196.25 399.75 196.25 401.746 10 0 0 0 0 0 0 0 4 91.25 414.746 91.25 414.746 96.6602 413.344 95.25 411.746 93.0156 410.879 91.25 412.746 91.25 412.746 91.25 414.746 10 0 0 0 0 0 0 0 4 93.2461 425.746 93.2422 425.746 98.8633 423.902 97.25 422.746 95.2148 421.441 93.2461 422.746 93.2461 422.746 93.2461 425.746 10 0 0 0 0 0 0 0 4 85.25 429.746 85.25 429.742 90.9414 428.742 89.2461 427.746 87.2969 426.281 85.25 427.746 85.25 427.746 85.25 429.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 173.25 347.75 173.25 347.75 171.379 347.676 167.25 345.75 164.777 345.477 152.457 341.516 146.25 330.746 146.25 330.742 159.938 341.078 173.25 347.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 9 269.246 245.746 269.781 245.484 269.84 245.02 270.25 244.75 270.887 244.957 272.242 244.625 272.25 245.746 271.172 250.063 270.211 255.492 265.246 257.746 264.961 257.789 263.375 257.332 263.25 256.746 263.156 254.684 263.027 253.203 263.25 251.75 263.695 250.027 266.07 250.016 267.246 251.75 268.109 249.699 268.582 247.672 269.246 245.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 9 257.246 240.75 258.262 239.004 258.121 236.961 259.25 236.746 260.492 236.016 262.527 237.09 262.25 238.746 261.188 240.539 260.758 243 259.25 244.75 259.012 245.281 259.277 245.867 259.25 245.746 258.445 247.57 257.188 248.379 255.246 247.746 254.41 245.594 255.676 243.25 257.246 241.75 257.5 241.203 257.316 240.793 257.246 240.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 11 214.25 246.746 213.758 246.684 213.719 247.191 214.25 247.746 214.484 248.68 215.355 249.914 215.25 250.746 214.602 252.203 213.375 252 212.246 251.75 211.41 250.281 211.355 248.273 210.246 246.746 210.379 246.355 210.438 245.723 210.246 245.746 209.43 244.832 208.945 243.152 209.246 242.75 209.109 242.18 208.91 231.281 209.246 231.75 209.836 232.379 213.188 243.086 213.246 243.75 213.328 244.871 214.133 245.383 214.25 246.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 7 185.25 253.75 188.574 256.488 191.641 259.746 191.246 263.75 191.027 264.902 189.074 264.32 189.246 263.75 187.988 259.402 185.746 256.477 183.25 253.75 180.504 251.594 178.457 244.617 178.246 243.75 182.266 249.84 184.746 252.859 185.25 253.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 10 170.246 260.746 171.32 260.707 170.988 261.246 171.246 261.746 172.273 263.215 173.707 264.586 173.25 266.746 173.73 266.805 173.313 267.145 173.25 266.746 172.641 266.695 172.262 266.551 172.25 266.746 169.91 263.715 168.371 260.777 167.25 257.746 166.582 257.289 165.324 252.352 165.246 251.75 165.934 252.133 167.824 256.734 168.25 256.746 169.445 257.613 169.457 259.391 170.246 260.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 189.246 238.746 189.641 239.758 191.371 241.078 191.246 241.75 191.117 243.078 191.633 244.664 190.246 243.75 189.246 242.867 185.453 241.383 185.25 234.746 185.129 234.363 188.398 237.328 189.246 238.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 19 205.25 257.746 205.477 258.434 206.258 257.91 207.25 257.746 207.473 258.609 208.148 259.223 208.25 259.746 209.535 262.301 211.48 264.305 211.246 266.746 209.996 268.484 209.25 266.238 208.25 264.746 207.102 266.988 206.004 264.926 204.25 264.746 204.496 264.324 204.262 264.707 204.25 264.746 202.887 264.195 202.137 263.004 201.246 261.746 200.852 261.996 200.406 262.195 200.246 261.746 199.527 261.383 198.457 261.027 198.246 260.746 196.93 257.297 193.473 254.992 191.246 246.746 191.816 245.695 196.359 254.004 197.25 254.75 197.816 256.086 197.945 252.945 199.246 253.75 199.406 253.707 199.609 253.445 200.246 253.75 199.973 253.605 200.211 253.855 200.246 253.75 200.637 254.176 200.492 254.789 200.246 254.75 202.074 256.039 201.98 257.215 203.25 258.746 203.344 257.711 204.508 258.5 205.25 257.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 271.25 197.75 271.25 197.75 278.957 220.297 274.25 232.75 274.25 232.75 286.656 208.855 281.25 196.75 281.25 196.75 281.156 207.977 277.246 213.746 277.246 213.746 272.359 199.398 271.25 197.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 254.246 200.75 254.246 200.75 260.477 210.398 251.25 230.75 251.25 230.75 250.797 208.195 243.246 195.746 243.246 195.742 258.937 218.316 254.246 200.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 243.246 202.746 243.246 202.746 243.316 224.918 244.246 227.746 244.246 227.742 239.578 209.957 228.25 199.75 228.25 199.75 244.199 212.598 243.246 202.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 233.246 237.746 233.246 237.746 239.578 223.156 228.25 202.746 228.25 202.746 235.617 216.336 230.25 223.746 230.25 223.746 233.199 227.777 233.246 237.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 8 212.246 203.746 212.246 203.746 210.758 220.516 212.246 222.75 212.246 222.75 212.957 229.977 212.246 230.75 212.246 230.75 216.918 237.898 217.25 229.75 217.25 229.75 218.68 221.176 222.246 215.746 222.246 215.746 225.719 210.176 225.25 202.746 225.25 202.746 214.5 236.355 212.246 203.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 208.25 233.75 208.25 233.75 200.637 221.836 198.246 200.75 198.246 200.75 197.117 207.758 201.246 223.746 201.246 223.746 205.918 240.535 208.25 233.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 184.25 211.75 184.25 211.75 189.418 217.879 191.246 223.746 191.242 223.746 194.918 240.758 188.246 231.75 188.246 231.75 188.098 222.496 179.246 214.746 179.246 214.746 184.359 216.996 184.25 211.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 177.246 217.746 177.246 217.742 181.277 236.578 182.25 237.746 182.25 237.746 184.137 241.195 181.25 237.746 181.25 237.746 171.379 216.559 167.25 209.75 167.25 209.75 175.777 219.418 177.246 217.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 4 171.246 235.746 171.246 235.746 183.918 260.336 160.246 231.75 160.246 231.75 172.039 242.738 171.246 235.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 6 154.246 251.75 154.242 251.75 159.5 272.438 162.25 271.746 162.25 271.746 171.379 282.117 164.246 270.75 164.242 270.75 157.52 259.898 158.25 248.746 158.25 248.746 157.52 259.676 154.246 251.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 517.246 264.746 517.242 264.742 504.348 275.297 501.25 278.75 501.25 278.75 516.449 258.797 516.25 250.746 516.25 250.742 519.199 259.348 517.246 264.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 523.25 288.746 523.25 288.742 500.5 305 496.25 312.75 496.25 312.75 525.797 280.797 526.246 275.746 526.242 275.742 526.348 285.75 523.25 288.746 10 0 0.8 0.8 0.8 0.8 0.8 0.8 5 542.246 457.75 542.246 457.75 529.098 466.699 527.25 464.746 527.25 464.742 539 457.348 542.246 447.746 542.246 447.746 540.098 457.898 542.246 457.75 10 0 0.8 0.8 0.8 0.8 0.8 0.8 4 551.25 369.75 532.25 382.75 532.25 382.75 553.297 363.848 554.25 359.746 551.25 369.75 10 1.1 0 0 0 0 0 0 2 122.246 393.75 146.25 388.75 10 1.1 0 0 0 0 0 0 2 177.246 215.746 177.246 215.746 176.547 219.75 166.246 207.75 10 1.1 0 0 0 0 0 0 2 183.25 210.75 183.25 210.75 185.348 217.547 178.246 212.746 10 1.1 0 0 0 0 0 0 2 242.246 200.75 242.246 200.75 244.199 213.148 231.246 198.75 )! ! !VGTigerDemo class methodsFor: 'as yet unclassified'! tigerPointsCount ^ 16988! ! !VGTigerDemo methodsFor: 'as yet unclassified'! convertPathData2 | paths pathData cmdStream ptStream fillBlocks strokeBlocks capBlocks joinBlocks cmdBlocks | paths := OrderedCollection new. cmdStream := self class commands readStream. ptStream := self class tigerPoints readStream. pathData := nil. fillBlocks := { "N" []. "F" [ pathData addFill ]. "E" [ pathData addFill; fillRule: #VGEVENODD ] }. strokeBlocks := { "N" []. "S" [ pathData addStroke ] }. capBlocks := { "B" [ pathData capStyle: #VGCAPBUTT ]. "R" [ pathData capStyle: #VGCAPROUND ]. "S" [ pathData capStyle: #VGCAPSQUARE ] }. joinBlocks := { "M" [ pathData joinStyle: #VGJOINMITER ]. "R" [ pathData joinStyle: #VGJOINROUND ]. "B" [ pathData joinStyle: #VGJOINBEVEL ] }. cmdBlocks := { "M"[:s | s moveToX: ptStream next Y: ptStream next ]. "L" [:s | s lineToX: ptStream next Y: ptStream next ]. "C" [:s | s curveVia: (ptStream next @ ptStream next) and: (ptStream next @ ptStream next) to: (ptStream next @ ptStream next) ]. "E" [:s | s close ] }. [ pathData := AthensTigerShape new. fillBlocks := { "N" []. "F" [ pathData addFill; fillRule: #VGNONZERO. ]. "E" [ pathData addFill; fillRule: #VGEVENODD ] }. strokeBlocks := { "N" []. "S" [ pathData addStroke ] }. " fill type " pathData fillRule: #VGNONZERO. (fillBlocks at: ('NFE' indexOf: cmdStream next)) value. " stroke type " (strokeBlocks at: ('NS' indexOf: cmdStream next)) value. " line cap " (capBlocks at: ('BRS' indexOf: cmdStream next)) value. " line join " (joinBlocks at: ('MRB' indexOf: cmdStream next)) value. " the rest of stroke attributes " pathData miterLimit: ptStream next. pathData strokeWidth: ptStream next. " paints " pathData strokePaint: ((Color r: ptStream next g: ptStream next b: ptStream next )). pathData fillPaint: ((Color r: ptStream next g: ptStream next b: ptStream next )). pathData setPath: ( surface createPath: [:builder | builder absolute. (ptStream next asInteger) timesRepeat: [ (cmdBlocks at: ('MLCE' indexOf: cmdStream next) ) value: builder. ] ] ). paths add: pathData. cmdStream atEnd ] whileFalse. paths do: [:ea | self assert: ea fillRule = #VGNONZERO. ea prepareFor: surface ]. self assert: (ptStream atEnd). ^ paths! ! !VGTigerDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/10/2012 09:42'! initialize surface := AthensCairoSurface extent: 400@400. ! ! !VGTigerDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/10/2012 09:40'! runDemo | paths extent rotation scale translation rotationSpeed time frames zoom | paths := self convertPathData2. rotationSpeed := 1. rotation := 0. extent := surface extent. scale := extent x / self class tigerMaxY. translation := 0@0. time := Time millisecondClockValue. frames := 0. [ Sensor anyButtonPressed ] whileFalse: [ rotation := rotation + rotationSpeed. frames := frames + 1. zoom := (frames/100) sin abs . surface drawDuring: [:can | can pathTransform loadIdentity. can setPaint: Color white; drawShape: (0@0 corner: surface extent). can pathTransform translateX: (0.5 * (extent x - (self class tigerMaxX * scale*zoom))) Y: extent y / -12.0 ; scaleBy: scale*zoom ; translateX: (self class tigerMaxX * 0.5) Y: (self class tigerMaxY * 0.5 ); scaleBy: 0.8; rotateByDegrees: rotation; translateX: (self class tigerMaxX * -0.5) Y: (self class tigerMaxY * -0.5 ). paths do: [:each | each renderOn: can ]. ]. "display it" Display getCanvas drawImage: surface asForm at: 0@0 ]. World invalidRect: (World bounds). time := Time millisecondClockValue - time. Transcript show: 'Total rendering time: ', time asString, ' ms, total frames: ' , frames asString ; cr; show: ' FPS: ' , (1000*frames/time) asFloat asString! ! "Athens-Examples"! ConfigurationOfAthens removeSelector: #version21:! ConfigurationOfAthens removeSelector: #version20:! ConfigurationOfAthens removeSelector: #version16:! ConfigurationOfAthens removeSelector: #version15:! ConfigurationOfAthens removeSelector: #version14:! ConfigurationOfAthens removeSelector: #version13:! ConfigurationOfAthens removeSelector: #version12:! ConfigurationOfAthens removeSelector: #version121:! ConfigurationOfAthens removeSelector: #version11:! ConfigurationOfAthens removeSelector: #version10:! ConfigurationOfAthens removeSelector: #version01:! ConfigurationOfAthens removeSelector: #version014:! ConfigurationOfAthens removeSelector: #version013:! ConfigurationOfAthens removeSelector: #version012:! ConfigurationOfAthens removeSelector: #version011:! ConfigurationOfAthens removeSelector: #stable:! ConfigurationOfAthens removeSelector: #project! ConfigurationOfAthens removeSelector: #development:! ConfigurationOfAthens removeSelector: #baseline21:! ConfigurationOfAthens removeSelector: #baseline20:! ConfigurationOfAthens removeSelector: #baseline11:! ConfigurationOfAthens removeSelector: #baseline10:! ConfigurationOfAthens class removeSelector: #validate! ConfigurationOfAthens class removeSelector: #project! ConfigurationOfAthens class removeSelector: #loadVersion:! ConfigurationOfAthens class removeSelector: #loadStable! ConfigurationOfAthens class removeSelector: #loadDevelopment! ConfigurationOfAthens class removeSelector: #loadBleedingEdge! ConfigurationOfAthens class removeSelector: #load! ConfigurationOfAthens class removeSelector: #isMetacelloConfig! ConfigurationOfAthens class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfAthens class removeSelector: #ensureMetacello! ConfigurationOfAthens class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfAthens class removeSelector: #DevelopmentSupport! Smalltalk globals removeClassNamed: #ConfigurationOfAthens! ----End fileIn----! ----QUIT----an Array(20 June 2013 12:30:30 pm) Pharo.image priorSource: 6625360! ----STARTUP----an Array(20 June 2013 12:39:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 June 2013 12:39:10 pm) Pharo-30209.image priorSource: 7215641! ----STARTUP----an Array(21 June 2013 3:57:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 15:53' prior: 40180096! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 15:53'! script309 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.484.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.320.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1486.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-EstebanLorenzano.143.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.226.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.102.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.511.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 15:53'! update30210 "self new update30210" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor '. self loadTogether: self script309 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [self traitComposition] ifFalse: [TraitComposition new]. (composition methodDescriptionsForSelector: aSymbol) do: [:each | | effectiveCategory sel currentCategory | sel := each selector. (self includesLocalSelector: sel) ifFalse: [ currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [changedCategories add: currentCategory]. self organization removeElement: sel. ] ifFalse: [ ((currentCategory isNil or: [currentCategory == ClassOrganizer ambiguous or: [currentCategory == oldCategoryOrNil]]) and: [currentCategory ~~ effectiveCategory]) ifTrue: [ currentCategory ifNotNil: [changedCategories add: currentCategory]. self organization classify: sel under: effectiveCategory suppressIfDefault: false]]]]. ^ changedCategories! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: ClassOrganizer default! ! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self organization classify: selector under: category]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor].! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! allMethodsInCategory: aName self explicitRequirement.! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! isClassSide ^self == self classSide! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! allSelectors self explicitRequirement! ! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments. Could use String.keywords. Could see how compiler does this." | list | list := OrderedCollection new. self selectorsDo: [:aSel | | num | num := aSel count: [:char | char == $:]. num = 0 ifTrue: [aSel last isLetter ifFalse: [num := 1]]. num = numberOfArgs ifTrue: [list add: aSel]]. ^ list! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! basicLocalSelectors: aSetOrNil self explicitRequirement! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Trait method! binding ^ nil -> self! ! !Trait method! basicLocalSelectors self explicitRequirement! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector" ^self sourceCodeAt: selector ifAbsent: aBlock! ! !Trait method! methodDict: aDictionary ^ self explicitRequirement! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! methodDict ^ self explicitRequirement! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !Trait method! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush the method cache, when we add a method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache].! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! name ^ self explicitRequirement! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! methods ^ self methodDict values! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !Trait method! lookupSelector: selector ^ self explicitRequirement! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! traitComposition: aTraitComposition ^self explicitRequirement ! ! !Trait method! includesBehavior: aBehavior ^self == aBehavior! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! hasTraitComposition self explicitRequirement! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache.! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! protocols ^ self organization categories copy! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! traitComposition "Return my trait composition. Manipulating the composition does not effect changes automatically. Use #setTraitComposition: to do this but note, that you have to make a copy of the old trait composition before changing it because only the difference between the new and the old composition is updated." ^self explicitRequirement ! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in this class/trait. If it is found, binaryBlock is evaluated with this class/trait and the associated method. Otherwise absentBlock is evaluated. Note that this implementation is very simple because PureBehavior does not know about inheritance (cf. implementation in Behavior)" ^ binaryBlock value: self value: (self compiledMethodAt: aSymbol ifAbsent: [^ absentBlock value]).! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !ClassDescription methodsFor: 'organization updating' stamp: 'ST 6/18/2013 10:38' prior: 19252277! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !ClassDescription methodsFor: 'printing' stamp: 'ST 6/18/2013 10:38' prior: 19256760! printWithClosureAnalysisOn: aStream aStream nextPutAll: self name! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'ST 6/18/2013 10:38' prior: 19210026! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! !TClassDescription classTrait methodsFor: 'testing'! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !TClassDescription classTrait methodsFor: 'cleanup'! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40801340! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 16:28' prior: 40799497! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" newProtocol = oldProtocol ifFalse: [ | oldPackage newPackage | "Check for repackage" newPackage := RPackage organizer packageForProtocol: newProtocol inClass: self. oldPackage := RPackage organizer packageForProtocol: oldProtocol inClass: self. (newPackage = oldPackage) ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ]. "Announce recategorization" SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self ]. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor.]. ! ! !TClassDescription methodsFor: 'authors' stamp: 'SebastianTleye 5/24/2013 16:28'! addAuthorsTo: result "private method that to store the result in the argument." self methodsDo: [:each | result add: each author ]! ! !TClassDescription methodsFor: 'organization' stamp: '' prior: 40795642! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'ST 6/13/2013 17:36' prior: 40786228! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'ST 6/13/2013 17:37' prior: 40801134! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !TClassDescription methodsFor: 'traits'! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! allInstVarNamesEverywhere "Answer the set of inst var names used by the receiver, all superclasses, and all subclasses" | aList | aList := OrderedCollection new. (self allSuperclasses , self withAllSubclasses asOrderedCollection) do: [:cls | aList addAll: cls instVarNames]. ^ aList asSet "BorderedMorph allInstVarNamesEverywhere"! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 16:28'! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock combinedClassCategories | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 16:28' prior: 40807955! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aName = ClassOrganizer allCategory ifTrue: [aClass organization allMethodSelectors] ifFalse: [aClass organization listAtCategoryNamed: aName])]. ^ aColl asSet asArray sort! ! !TClassDescription methodsFor: 'pool variable' stamp: 'ST 6/14/2013 14:02'! allSharedPools "Answer an ordered collection of the shared pools the receiver shares, including those defined in the superclasses of the receiver." ^ OrderedCollection new! ! !TClassDescription methodsFor: 'organization updating' stamp: 'ST 6/13/2013 17:38' prior: 40786775! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !TClassDescription methodsFor: 'authors' stamp: 'SebastianTleye 5/24/2013 16:28'! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." "self new authorsgather: Date" | br result selectors | result := Bag new. self addAuthorsTo: result. self class addAuthorsTo: result. ^ result! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! checkForInstVarsOK: instVarString "Return true if instVarString does no include any names used in a subclass" | instVarArray | instVarArray := instVarString subStrings: ' '. self allSubclasses do: [:cl | cl instVarNames do: [:n | (instVarArray includes: n) ifTrue: [self error: n , ' is already used in ' , cl name. ^ false]]]. ^ true! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40788658! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40804825! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 5/24/2013 16:28'! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'; cr; cr; nextPutAll: 'Instance Variables'. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! classThatDefinesClassVariable: classVarName "Answer the class that defines the given class variable" (self classPool includesKey: classVarName asSymbol) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesClassVariable: classVarName]! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! classThatDefinesInstanceVariable: instVarName (self instVarNames notNil and: [self instVarNames includes: instVarName asString]) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesInstanceVariable: instVarName]! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 16:28'! classVariablesString "Answer a string of my class variable names separated by spaces." ^String streamContents: [ :stream | self classVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 16:28'! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! !TClassDescription methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! classesThatImplementAllOf: selectorSet "Return an array of any classes that implement all the messages in selectorSet." | found remaining | found := OrderedCollection new. selectorSet do: [:sel | (self includesSelector: sel) ifTrue: [found add: sel]]. found isEmpty ifTrue: [^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: selectorSet)]] ifFalse: [remaining := selectorSet copyWithoutAll: found. remaining isEmpty ifTrue: [^ Array with: self]. ^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: remaining)]]! ! !TClassDescription methodsFor: 'accessing comment' stamp: '' prior: 40788431! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !TClassDescription methodsFor: 'accessing comment' stamp: '' prior: 40793147! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !TClassDescription methodsFor: 'accessing comment' stamp: '' prior: 40800951! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !TClassDescription methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! commentInventory "Answer a string with a count of the classes with and without comments for all the classes in the package of which this class is a member." "Morph commentInventory" ^ self environment organization commentInventory: (self category copyUpTo: $-), '*'! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40794718! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40803999! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40784960! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40800681! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40807717! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40791900! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TClassDescription methodsFor: 'compiling' stamp: 'ST 6/13/2013 17:38' prior: 40788912! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 5/24/2013 16:28' prior: 40797463! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40803613! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40798599! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40799170! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40789107! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40789894! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40793741! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40787485! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40791459! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40797936! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !TClassDescription methodsFor: 'copying' stamp: '' prior: 40804204! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40785859! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40797243! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !TClassDescription methodsFor: 'private' stamp: '' prior: 40793302! errorCategoryName self error: 'Category name must be a String'! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40781831! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40796136! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40795181! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40790173! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40783146! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: internalStream moveSource: false toFile: 0. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40804437! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40793384! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40808029! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40800403! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! forceNewFrom: anArray "Create a new instance of the class and fill its instance variables up with the array." | object max | object := self new. max := self instSize. anArray doWithIndex: [:each :index | index > max ifFalse: [object instVarAt: index put: each]]. ^ object! ! !TClassDescription methodsFor: 'accessing comment' stamp: '' prior: 40791714! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:28'! hasInstVarNamed: aString "Return true whether the receiver defines an instance variable named aString." ^ self instVarNames includes: aString! ! !TClassDescription methodsFor: 'pool variable' stamp: 'ST 6/14/2013 14:03'! hasSharedPools "Only a class may have shared pools" ^ false! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:31'! instVarIndexFor: instVarName "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName]. index = 0 ifTrue: [^self superclass == nil ifTrue: [0] ifFalse: [self superclass instVarIndexFor: instVarName]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:31'! instVarIndexFor: instVarName ifAbsent: aBlock "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName ifAbsent: [0]]. index = 0 ifTrue: [^self superclass == nil ifTrue: [aBlock value] ifFalse: [self superclass instVarIndexFor: instVarName ifAbsent: aBlock]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 16:28'! instVarMappingFrom: oldClass "Return the mapping from instVars of oldClass to new class that is used for converting old instances of oldClass." | oldInstVarNames | oldInstVarNames := oldClass allInstVarNames. ^self allInstVarNames collect: [:instVarName | oldInstVarNames indexOf: instVarName].! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:31'! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass isNil ifTrue: [0] ifFalse: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass isNil ifTrue: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 5/24/2013 16:32'! instVarNames "Answer an Array of the receiver's instance variable names." self instanceVariables == nil ifTrue: [^#()] ifFalse: [^self instanceVariables]! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 5/24/2013 16:30'! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instVarNamesAndOffsetsDo: aBinaryBlock]. 1 to: self instSize - superInstSize do: [:i| aBinaryBlock value: (self instanceVariables at: i) value: i + superInstSize]! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! instanceSide ^ self theNonMetaClass! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 16:28'! instanceVariablesString "Answer a string of my instance variable names separated by spaces." ^String streamContents: [ :stream | self instVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: '' prior: 40808655! isClassSide ^self == self classSide! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: '' prior: 40794257! isInstanceSide ^self isClassSide not! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'ST 6/13/2013 17:37' prior: 40791415! isMeta ^self isClassSide! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 16:28'! linesOfCode "An approximate measure of lines of code. Includes comments, but excludes blank lines." | lines | lines := self localMethods inject: 0 into: [:sum :each | sum + each linesOfCode]. ^ self isMeta ifTrue: [lines] ifFalse: [lines + self class linesOfCode]! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40793542! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40798290! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40791136! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: '' prior: 40794851! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40794313! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 16:28'! newInstanceFrom: oldInstance variable: variable size: instSize map: map "Create a new instance of the receiver based on the given old instance. The supplied map contains a mapping of the old instVar names into the receiver's instVars" | new | variable ifTrue: [new := self basicNew: oldInstance basicSize] ifFalse: [new := self basicNew]. 1 to: instSize do: [:offset | (map at: offset) > 0 ifTrue: [new instVarAt: offset put: (oldInstance instVarAt: (map at: offset))]]. variable ifTrue: [1 to: oldInstance basicSize do: [:offset | new basicAt: offset put: (oldInstance basicAt: offset)]]. ^new! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: '' prior: 40787875! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28'! noteChangesFrom: oldMethodDict "create notifications about the changes made to the method dictionary" "additions have already been notified in #addTraitSelector:withMethod:" " deal with removal / updates relative to the old method dictionary" oldMethodDict keysAndValuesDo: [ :selector :oldMethod| self methodDict at: selector ifPresent: [ :currentMethod| currentMethod == oldMethod ifFalse: [ self noteMethodChanged: oldMethod to: currentMethod]] ifAbsent: [ self noteMethodRemoved: oldMethod ]]. ! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40793008! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28'! noteMethodAdded: aMethod SystemAnnouncer uniqueInstance methodAdded: aMethod! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28'! noteMethodChanged: oldMethod to: newMethod SystemAnnouncer uniqueInstance methodChangedFrom: oldMethod to: newMethod ! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28'! noteMethodRemoved: oldMethod SystemAnnouncer uniqueInstance methodRemoved: oldMethod! ! !TClassDescription methodsFor: 'organization updating' stamp: '' prior: 40795761! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !TClassDescription methodsFor: 'organization updating' stamp: '' prior: 40796859! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !TClassDescription methodsFor: 'organization updating' stamp: '' prior: 40790934! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 16:28'! numberOfMethods "count all methods that are local (not comming from a trait)" | num | num := self localMethods size. ^ self isMeta ifTrue: [ num ] ifFalse: [ num + self class numberOfMethods ] ! ! !TClassDescription methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/24/2013 16:30'! obsolete "Make the receiver obsolete." self superclass removeSubclass: self. self organization: nil. super obsolete.! ! !TClassDescription methodsFor: 'organization' stamp: 'ST 5/31/2013 16:09'! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [self organization: (ClassOrganizer defaultList: self selectors asArray sort)]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [self basicOrganization setSubject: self]. ^ self basicOrganization.! ! !TClassDescription methodsFor: 'organization' stamp: 'ST 5/31/2013 16:09'! organization: aClassOrg "Install an instance of ClassOrganizer that represents the organization of the messages of the receiver." aClassOrg ifNotNil: [aClassOrg setSubject: self]. self basicOrganization: aClassOrg.! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40782187! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40801693! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TClassDescription methodsFor: 'printing' stamp: 'ST 6/13/2013 17:39' prior: 40794101! printOn: aStream aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! printSubclassesOn: aStream level: level "As part of the algorithm for printing a description of the receiver, print the subclass on the file stream, aStream, indenting level times." | subclassNames | aStream crtab: level. aStream nextPutAll: self name. aStream space; print: self instVarNames. self == Class ifTrue: [aStream crtab: level + 1; nextPutAll: '[ ... all the Metaclasses ... ]'. ^self]. subclassNames := self subclasses asSortedCollection:[:c1 :c2| c1 name <= c2 name]. "Print subclasses in alphabetical order" subclassNames do: [:subclass | subclass printSubclassesOn: aStream level: level + 1]! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40806369! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40797822! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: '' prior: 40803238! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 16:28' prior: 40781144! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !TClassDescription methodsFor: 'organization' stamp: '' prior: 40783522! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !TClassDescription methodsFor: 'filein/out' stamp: '' prior: 40780922! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 16:32'! setInstVarNames: instVarArray "Private - for class initialization only" | required | required := self instSize. self superclass notNil ifTrue:[required := required - self superclass instSize]. instVarArray size = required ifFalse:[^self error: required printString, ' instvar names are required']. instVarArray isEmpty ifTrue:[self instanceVariables: nil] ifFalse:[self instanceVariables: instVarArray asArray].! ! !TClassDescription methodsFor: 'pool variable' stamp: 'ST 6/14/2013 14:20'! sharedPoolOfVarNamed: aString "Only classes may have shared pools" ^ nil! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 16:28'! sharedPoolsString "Answer a string of my shared pool names separated by spaces." ^String streamContents: [ :stream | self sharedPools do: [ :each | stream nextPutAll: (self environment keyAtIdentityValue: each ifAbsent: [ 'private' ]) ] separatedBy: [ stream space ] ]! ! !TClassDescription methodsFor: 'printing' stamp: '' prior: 40799057! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! subclasses ^ Array new! ! !TClassDescription methodsFor: 'accessing class hierarchy' stamp: 'ST 6/14/2013 14:21'! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." ^self subclasses do: aBlock! ! !TClassDescription methodsFor: 'initialize-release' stamp: 'ST 6/14/2013 14:22'! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self instanceVariables: nil. self organization: nil.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 5/24/2013 16:28'! theMetaClass "Sent to a class or metaclass, always return the metaclass" ^self class! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'ST 6/13/2013 17:42'! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: '' prior: 40794168! uncategorizedMethods ^ self methodsInCategory: ClassOrganizer default! ! !TClassDescription methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/24/2013 16:28'! updateInstances: oldInstances from: oldClass isMeta: isMeta "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "If there are any contexts having an old instance as receiver it might crash the system because the layout has changed, and the method only knows about the old layout." | map variable instSize newInstances | oldInstances isEmpty ifTrue:[^#()]. "no instances to convert" isMeta ifTrue: [ oldInstances size = 1 ifFalse:[^self error:'Metaclasses can only have one instance']. self soleInstance class == self ifTrue:[ ^self error:'Metaclasses can only have one instance']]. map := self instVarMappingFrom: oldClass. variable := self isVariable. instSize := self instSize. newInstances := Array new: oldInstances size. 1 to: oldInstances size do:[:i| newInstances at: i put: ( self newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)]. "Now perform a bulk mutation of old instances into new ones" oldInstances elementsExchangeIdentityWith: newInstances. ^newInstances "which are now old"! ! !TClassDescription methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/24/2013 16:28'! updateInstancesFrom: oldClass "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "ar 7/15/1999: The updating below is possibly dangerous. If there are any contexts having an old instance as receiver it might crash the system if the new receiver in which the context is executed has a different layout. See bottom below for a simple example:" | oldInstances | oldInstances := oldClass allInstances asArray. oldInstances := self updateInstances: oldInstances from: oldClass isMeta: self isMeta. ^oldInstances " | crashingBlock class | class := Object subclass: #CrashTestDummy instanceVariableNames: 'instVar' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. class compile:'instVar: value instVar := value'. class compile:'crashingBlock ^[instVar]'. crashingBlock := (class new) instVar: 42; crashingBlock. Object subclass: #CrashTestDummy instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. crashingBlock. crashingBlock value. " ! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28'! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == ClassOrganizer ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 5/24/2013 16:28' prior: 40783769! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories ]. ^ changedCategories! ! !TClassDescription methodsFor: 'pool variable' stamp: 'SebastianTleye 5/24/2013 16:28'! usesLocalPoolVarNamed: aString ^ false! ! !TClassDescription methodsFor: 'pool variable' stamp: 'SebastianTleye 5/24/2013 16:28'! usesPoolVarNamed: aString "Only classes may use a pool variable named: aString" ^ false! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 16:28'! version "Allows polymorphism with TraitDescription>>version" ^ self classVersion! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40788283! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: '' prior: 40795472! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !TClassDescription methodsFor: 'organization' stamp: '' prior: 40787157! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !TClassDescription methodsFor: 'organization' stamp: '' prior: 40792681! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Behavior methodsFor: 'accessing instances and variables' stamp: 'ST 6/18/2013 11:05' prior: 18021249! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'ST 6/18/2013 11:04' prior: 40175863! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !Behavior methodsFor: 'traits' stamp: 'ST 6/18/2013 11:04' prior: 18073990! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !Behavior methodsFor: 'traits' stamp: 'ST 6/18/2013 11:04' prior: 18074371! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !Behavior methodsFor: 'compiling' stamp: 'ST 6/18/2013 11:04' prior: 18044098! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !Behavior methodsFor: 'testing' stamp: 'ST 6/18/2013 11:04' prior: 18062070! isAnonymous ^true! ! !Behavior methodsFor: 'testing' stamp: 'ST 6/18/2013 11:05' prior: 18062153! isBehavior "Return true if the receiver is a behavior" ^true! ! !Behavior methodsFor: 'adding/removing methods' stamp: 'ST 6/18/2013 11:05' prior: 18040556! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Behavior methodsFor: 'adding/removing methods' stamp: 'ST 6/18/2013 11:04' prior: 18042386! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !Behavior methodsFor: 'traits' stamp: 'ST 6/18/2013 11:05' prior: 18076052! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !Behavior methodsFor: 'traits' stamp: 'ST 6/18/2013 11:04' prior: 18076243! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !Behavior methodsFor: 'traits' stamp: 'ST 6/18/2013 11:05' prior: 18078339! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TBehavior classTrait methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:34'! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !TBehavior classTrait methodsFor: 'cleanup' stamp: 'SebastianTleye 5/24/2013 17:34'! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40823002! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40811612! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 5/31/2013 16:14'! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self obsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self obsoleteSubclasses at: self put: obs.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40825659! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40811834! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40831697! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40810443! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TBehavior methodsFor: 'traits' stamp: 'ST 6/14/2013 15:17' prior: 40816491! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 5/24/2013 17:04'! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:42'! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:42'! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 5/24/2013 17:04'! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40810583! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:42'! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:04'! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'ST 6/17/2013 14:14'! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:42'! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:42'! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:42'! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'ST 6/14/2013 15:26'! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40811987! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40822115! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40814922! basicLocalSelectors "Direct accessor for the instance variable localSelectors. Because of hardcoded ivar indexes of Behavior and Class in the VM, Class and Metaclass declare the needed ivar and override this method as an accessor. By returning nil instead of declaring this method as a subclass responsibility, Behavior can be instantiated for creating anonymous classes." ^nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40811759! basicLocalSelectors: aSetOrNil self explicitRequirement! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 5/24/2013 17:04'! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 5/24/2013 17:04'! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40830242! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethod flushCache. selector flushCache! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 17:43'! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! !TBehavior methodsFor: 'private' stamp: 'ST 5/31/2013 19:29'! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! !TBehavior methodsFor: 'private' stamp: 'ST 5/31/2013 19:29'! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:43' prior: 40816274! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument. The selector can be in the method dictionary of the receiver's class or any of its superclasses." (self includesSelector: selector) ifTrue: [^true]. self superclass == nil ifTrue: [^false]. ^self superclass canUnderstand: selector! ! !TBehavior methodsFor: 'testing' stamp: '' prior: 40830589! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40827193! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 17:04'! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40834801! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 17:44'! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 5/24/2013 17:04'! classesComposedWithMe ^{self}! ! !TBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 5/24/2013 17:04'! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! !TBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 5/24/2013 17:04'! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40822649! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40825799! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40830140! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! !TBehavior methodsFor: 'copying' stamp: '' prior: 40826240! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TBehavior methodsFor: 'copying' stamp: '' prior: 40836915! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40811027! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TBehavior methodsFor: 'initialization' stamp: '' prior: 40826359! emptyMethodDictionary ^ MethodDictionary new! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40829797! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TBehavior methodsFor: 'naming' stamp: '' prior: 40831353! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40832737! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40821346! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40812650! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40824987! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 17:04'! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40818039! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40828481! hasTraitComposition self explicitRequirement! ! !TBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40827752! includesBehavior: aClass ^self == aClass or:[self inheritsFrom: aClass]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40812474! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40818332! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 5/24/2013 17:53'! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! !TBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:54'! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! !TBehavior methodsFor: 'initialize-release' stamp: 'ST 5/31/2013 19:29'! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:54'! instSize "Answer the number of named instance variables (as opposed to indexed variables) of the receiver." self flag: #instSizeChange. "Smalltalk browseAllCallsOn: #instSizeChange" " NOTE: This code supports the backward-compatible extension to 8 bits of instSize. When we revise the image format, it should become... ^ ((format bitShift: -1) bitAnd: 16rFF) - 1 Note also that every other method in this category will require 2 bits more of right shift after the change. " ^ ((self format bitShift: -10) bitAnd: 16rC0) + ((self format bitShift: -1) bitAnd: 16r3F) - 1! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:54'! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'ST 6/13/2013 11:21'! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! !TBehavior methodsFor: 'compiling' stamp: 'ST 6/14/2013 15:45'! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! !TBehavior methodsFor: 'memory usage' stamp: 'SebastianTleye 5/24/2013 17:04'! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40821788! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing' stamp: 'ST 6/14/2013 15:46'! isBehavior "Return true if the receiver is a behavior" ^true! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isCompact ^self indexIfCompact ~= 0! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 17:04'! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40828067! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40813239! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isMeta ^ false! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! !TBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:04'! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! !TBehavior methodsFor: 'printing' stamp: '' prior: 40818782! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40814597! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TBehavior methodsFor: 'printing' stamp: '' prior: 40827818! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/28/2013 10:14' prior: 40827122! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40820849! methodDict ^ self explicitRequirement! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40816057! methodDict: aDictionary ^ self explicitRequirement! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40817894! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40833277! methodDictionary "Convenience" ^self methodDict! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40821127! methodDictionary: aDictionary self methodDict: aDictionary! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40825438! methods ^ self methodDict values! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40834655! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TBehavior methodsFor: 'accessing' stamp: 'ST 6/13/2013 10:53' prior: 40824651! name "Answer a String that is the name of the receiver." ^'a subclass of ', self superclass name.! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 5/24/2013 17:04'! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 5/24/2013 17:04'! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! !TBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/24/2013 17:04'! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40815219! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40818534! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40822941! notifyUsersOfChangedSelectors: aCollection! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 17:04'! numberOfInstanceVariables ^ self instVarNames size ! ! !TBehavior methodsFor: 'initialization' stamp: '' prior: 40836330! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TBehavior methodsFor: 'copying' stamp: '' prior: 40833345! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:49'! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 17:04'! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 17:53'! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 5/24/2013 17:53'! printWithClosureAnalysisOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printWithClosureAnalysisOn: aStream! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40825369! purgeLocalSelectors self basicLocalSelectors: nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40836647! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40821205! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 5/31/2013 16:14'! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self obsoleteSubclasses removeKey: self ifAbsent: [].! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40820906! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 5/31/2013 16:15'! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self obsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self obsoleteSubclasses at: self put: obs! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40809188! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TBehavior methodsFor: 'adding/removing methods' stamp: '' prior: 40825169! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40836780! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40816127! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40814986! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40831462! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04' prior: 40811178! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40826424! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40812349! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! !TBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 5/24/2013 17:04'! shutDown "This message is sent on system shutdown to registered classes" ! ! !TBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 5/24/2013 17:04'! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40823911! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: '' prior: 40824519! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 5/24/2013 17:04'! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method methodNode | method := self compiledMethodAt: selector. methodNode := self compiler compile: (self sourceCodeAt: selector) in: self notifying: nil ifFail: [^ false]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!!!']. ^ (methodNode generate: method trailer) = method! ! !TBehavior methodsFor: 'private' stamp: '' prior: 40817147! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 5/24/2013 17:04'! startUp "This message is sent to registered classes when the system is coming up." ! ! !TBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 5/24/2013 17:04'! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! !TBehavior methodsFor: 'printing' stamp: '' prior: 40835300! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 17:04'! subclassDefinerClass "Answer an evaluator class appropriate for evaluating definitions of new subclasses of this class." ^self compilerClass! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 5/24/2013 17:04'! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:04'! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self class allInstances select: [:each | each superclass = self ]! ! !TBehavior methodsFor: 'enumerating' stamp: 'ST 6/14/2013 15:50'! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! !TBehavior methodsFor: 'initialize-release' stamp: 'ST 5/31/2013 19:29'! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:49'! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40835934! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'ST 6/14/2013 16:00' prior: 40831884! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((method refersToLiteral: literal) or: [ specialFlag and: [ method scanFor: specialByte ] ]) ifTrue: [ selectors add: sel ] ]. ^ selectors! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40832364! traitComposition "Return my trait composition. Manipulating the composition does not effect changes automatically. Use #setTraitComposition: to do this but note, that you have to make a copy of the old trait composition before changing it because only the difference between the new and the old composition is updated." ^self explicitRequirement ! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40827670! traitComposition: aTraitComposition ^self explicitRequirement ! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40818170! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40818653! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40820236! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40823282! traitTransformations ^ self traitComposition transformations ! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40823999! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40810640! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 5/24/2013 17:04'! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:49' prior: 40815900! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! !TBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 5/24/2013 17:04'! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! !TBehavior methodsFor: 'traits' stamp: '' prior: 40828545! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'ST 6/3/2013 13:08'! users ^IdentitySet new.! ! !TBehavior methodsFor: 'compiling' stamp: 'SebastianTleye 5/24/2013 17:04'! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:54'! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:04'! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40830708! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !TBehavior methodsFor: 'testing method dictionary' stamp: '' prior: 40833435! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:04'! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !TBehavior methodsFor: 'queries' stamp: 'SebastianTleye 5/24/2013 17:54'! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! !TBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 5/24/2013 17:04'! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/24/2013 17:04'! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: '' prior: 40826125! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." aBlock value: self. self allSubclassesDo: aBlock! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:04'! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: '' prior: 40824702! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 5/24/2013 17:50'! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 5/24/2013 17:50'! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:19'! allSuperclassesFor: aClass cache: cache ^ cache at: aClass ifAbsentPut: [aClass allSuperclasses asArray]! ! !TClass classTrait methodsFor: 'testing'! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !TClass classTrait methodsFor: 'cleanup'! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:19'! doesNotIncludeInstanceOrSuperclassesFor: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:19'! fileOutPool: aString "file out the global pool named aString" | internalStream | internalStream := (String new: 1000) writeStream. self new fileOutPool: (self environment at: aString asSymbol) onFileStream: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: aString isSt: true.! ! !TClass classTrait methodsFor: 'private' stamp: 'ST 5/6/2013 16:19'! hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache ^ (self hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache) and: [ aClass isMeta not or: [ self hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache]] ! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:20'! hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:20'! hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache ^ (unprocessedClasses includesAnyOf: (self allSuperclassesFor: aClass cache: cache)) not ! ! !TClass classTrait methodsFor: 'inquiries' stamp: 'ST 5/6/2013 16:20'! rootsOfTheWorld "return all classes that have a nil superclass" ^(Smalltalk globals select: [:each | each isBehavior and: [each superclass isNil]]) asOrderedCollection! ! !TClass classTrait methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 16:20'! superclassOrder: classes "Arrange the classes in the collection, classes, in superclass order so the classes can be properly filed in. Do it in sets instead of ordered collections." | all unprocessedClasses cache | unprocessedClasses := classes asSet. cache := Dictionary new. all := OrderedCollection new: unprocessedClasses size. unprocessedClasses size timesRepeat: [ |nextClass| nextClass := unprocessedClasses detect: [:aClass | self hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache]. all add: nextClass. unprocessedClasses remove: nextClass]. ^all! ! !TClass classTrait methodsFor: 'instance creation' stamp: 'ST 5/6/2013 16:20'! template: aSystemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class." ^ self templateForSubclassOf: Object name category: aSystemCategoryName ! ! !TClass classTrait methodsFor: 'instance creation' stamp: 'ST 5/6/2013 16:20'! templateForSubclassOf: priorClassName category: systemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class, given that the class previously looked at was as given" ^priorClassName asString, ' subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategoryName asString , ''''! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/7/2013 14:25'! addClassVarNamed: aString "Add the argument, aString, as a class variable of the receiver. Signal an error if the first character of aString is not capitalized, or if it is already a variable named in the class." | symbol oldState | oldState := self copy. aString first canBeGlobalVarInitial ifFalse: [^self error: aString, ' class variable name should be capitalized; proceed to include anyway.']. symbol := aString asSymbol. self withAllSubclasses do: [:subclass | (subclass bindingOf: symbol) ifNotNil:[ ^ self error: aString , ' is already used as a variable name in class ' , subclass name]]. (self classPool includesKey: symbol) ifFalse: ["Pick up any refs in Undeclared" self classPool declare: symbol from: Undeclared. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: oldState to: self]! ! !TClass methodsFor: 'instance variables' stamp: 'ST 5/6/2013 16:00'! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^(ClassBuilder new) name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !TClass methodsFor: 'accessing method dictionary'! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TClass methodsFor: 'accessing method dictionary'! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !TClass methodsFor: 'pool variables' stamp: 'ST 5/7/2013 14:55'! addSharedPool: aSharedPool "Add the argument, aSharedPool, as one of the receiver's shared pools. Create an error if the shared pool is already one of the pools. This method will work with shared pools that are plain Dictionaries or thenewer SharedPool subclasses" (self sharedPools includes: aSharedPool) ifTrue: [^self error: 'This is already in my shared pool list']. self sharedPools == nil ifTrue: [self sharedPools: (OrderedCollection with: aSharedPool)] ifFalse: [self sharedPools add: aSharedPool]! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/27/2013 18:02'! addSubclass: aSubclass "Make the argument, aSubclass, be one of the subclasses of the receiver. Create an error notification if the argument's superclass is not the receiver." aSubclass superclass ~~ self ifTrue: [^self error: aSubclass name , ' is not my subclass']. self subclasses == nil ifTrue: [self subclasses: (Array with: aSubclass). ^self]. self subclasses do:[:cl| cl == aSubclass ifTrue:[^self]]. "Already my subclass" self subclasses: (self subclasses copyWith: aSubclass).! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/6/2013 15:51'! allClassVarNames "Answer a Set of the names of the receiver's class variables, including those defined in the superclasses of the receiver." | aSet | self superclass == nil ifTrue: [^self classVarNames asSet] "This is the keys so it is a new Set." ifFalse: [aSet := self superclass allClassVarNames. aSet addAll: self classVarNames. ^aSet]! ! !TClass methodsFor: 'pool variables' stamp: 'ST 5/6/2013 16:03'! allSharedPools "Answer an ordered collection of the pools the receiver shares, including those defined in the superclasses of the receiver." | aSet | ^self superclass == nil ifTrue: [self sharedPools copy] ifFalse: [aSet := self superclass allSharedPools. aSet addAll: self sharedPools. aSet]! ! !TClass methodsFor: 'traits' stamp: 'ST 6/17/2013 10:25'! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self classSide noteNewBaseTraitCompositionApplied: self traitComposition. ^ changedSelectors! ! !TClass methodsFor: 'compiling' stamp: 'ST 6/14/2013 13:07'! binding "Answer a binding for the receiver, sharing if possible" | binding | binding := self environment associationAt: self name ifAbsent: [nil -> self]. ^binding value == self ifTrue: [binding] ifFalse: [nil -> self]! ! !TClass methodsFor: 'compiling' stamp: 'ST 5/6/2013 15:54'! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver, or nil if variable with such name is not defined" "The lookup recurses up to superclasses looking inside their class and shared pools, but not the environment, since two classes, even if they have ancestry relationship, could use different environments. That's why we doing an environment lookup only as a last step of symbol lookup and taking only the environment of receiver only, not any of it's superclass(es) " | aSymbol | aSymbol := varName asSymbol. ^ (self innerBindingOf: aSymbol) ifNil: [ self environment bindingOf: aSymbol ]! ! !TClass methodsFor: 'organization' stamp: '' prior: 40837017! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !TClass methodsFor: 'organization' stamp: '' prior: 40837514! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 5/17/2013 11:14'! classPoolFrom: aClass "share the classPool with aClass." self classPool: aClass classPool.! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/6/2013 15:51'! classVarNamed: name "Answer the content of the Class Variable" ^self classPool at: name asSymbol ifAbsent: [self error: 'no such lass var']! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/7/2013 14:26'! classVarNamed: name put: anObject "Store anObject in the class variable." | symbol | symbol := name asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/6/2013 15:52'! classVarNames "Answer a collection of the names of the class variables defined in the receiver." ^self classPool keys asArray sort! ! !TClass methodsFor: 'compiling'! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !TClass methodsFor: 'compiling' stamp: 'ST 6/17/2013 13:08'! compileAll super compileAll. self class compileAll.! ! !TClass methodsFor: 'compiling' stamp: 'ST 5/6/2013 15:54'! compileAllFrom: oldClass "Recompile all the methods in the receiver's method dictionary (not the subclasses). Also recompile the methods in the metaclass." super compileAllFrom: oldClass. self class compileAllFrom: oldClass class! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 5/7/2013 14:43'! declare: varString "Declare class variables common to all instances. Answer whether recompilation is advisable." | newVars conflicts | newVars := (varString subStrings: ' ') collect: [:x | x asSymbol]. conflicts := false. (self classPool keys reject: [:x | newVars includes: x]) do: [:var | self removeClassVarNamed: var]. (newVars reject: [:var | self classPool includesKey: var]) do: [:var | "adding" "check if new vars defined elsewhere" (self innerBindingOf: var) ifNotNil: [(DuplicatedVariableError new) variable: var; signal: var , ' is defined elsewhere'. conflicts := true]]. newVars notEmpty ifTrue: [self classPool: self classPool. "in case it was nil" newVars do: [:var | self classPool declare: var from: Undeclared]]. ^conflicts! ! !TClass methodsFor: 'copying' stamp: 'ST 6/17/2013 13:21'! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class class instanceVariableNames: self class instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/7/2013 14:27'! ensureClassPool self classPool.! ! !TClass methodsFor: 'viewer' stamp: 'ST 5/7/2013 15:01'! externalName "Answer a name by which the receiver can be known." ^ self name! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:56'! fileOut "Create a file whose name is the name of the receiver with '.st' as the extension, and file a description of the receiver onto it." | internalStream | internalStream := (String new: 100) writeStream. internalStream header; timeStamp. self hasSharedPools ifTrue: [ self shouldFileOutPools ifTrue: [self fileOutSharedPoolsOn: internalStream]]. self fileOutOn: internalStream moveSource: false toFile: 0. internalStream trailer. FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:56'! fileOutInitializerOn: aStream ^self class fileOutInitializerOn: aStream! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." ^self fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: true! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: self name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self class nonTrivial ifTrue: [aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self class fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool]! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! fileOutPool: aPool onFileStream: aFileStream | aPoolName | (aPool isKindOf: SharedPool class) ifTrue:[^self notify: 'we do not fileout SharedPool type shared pools for now']. aPoolName := self environment keyAtIdentityValue: aPool. self crTrace: aPoolName. aFileStream nextPutAll: 'Transcript show: ''' , aPoolName , '''; cr!!'; cr. aFileStream nextPutAll: 'Smalltalk at: #' , aPoolName , ' put: Dictionary new!!'; cr. aPool keys asSortedCollection do: [ :aKey | | aValue | aValue := aPool at: aKey. aFileStream nextPutAll: aPoolName , ' at: #''' , aKey asString , '''', ' put: '. (aValue isKindOf: Number) ifTrue: [aValue printOn: aFileStream] ifFalse: [aFileStream nextPutAll: '('. aValue printOn: aFileStream. aFileStream nextPutAll: ')']. aFileStream nextPutAll: '!!'; cr]. aFileStream cr! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! fileOutSharedPoolsOn: aFileStream "file out the shared pools of this class after prompting the user about each pool" | poolsToFileOut | poolsToFileOut := self sharedPools select: [:aPool | (self shouldFileOutPool: (self environment keyAtIdentityValue: aPool))]. poolsToFileOut do: [:aPool | self fileOutPool: aPool onFileStream: aFileStream]. ! ! !TClass methodsFor: 'testing' stamp: 'ST 5/6/2013 16:07'! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ super hasAbstractMethods or: [self class hasAbstractMethods] ! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/6/2013 15:52'! hasClassVarNamed: aString "Return whether the receiver has a class variables (shared variables among its class and subclasses) named: aString" ^ self classVarNames includes: aString! ! !TClass methodsFor: 'testing' stamp: 'ST 5/6/2013 16:08'! hasMethods "Answer a Boolean according to whether any methods are defined for the receiver (includes whether there are methods defined in the receiver's metaclass)." ^super hasMethods or: [self class hasMethods]! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! hasSharedPools "Returns whether the receiver uses shared pools directly (Does not take into account that it may inherit shared pool uses." ^ self sharedPools notEmpty! ! !TClass methodsFor: 'accessing' stamp: 'ST 5/7/2013 14:11'! hasTraitComposition ^ self traitComposition notEmpty.! ! !TClass methodsFor: 'compiling' stamp: 'ST 5/7/2013 14:36'! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" | binding | "First look in classVar dictionary." binding := self classPool bindingOf: aSymbol. binding ifNotNil: [^binding]. "Next look in shared pools." self sharedPools do: [:pool | | aBinding | aBinding := pool bindingOf: aSymbol. aBinding ifNotNil: [^aBinding ]. ]. self superclass ifNotNil: [ ^ self superclass innerBindingOf: aSymbol. ]. ^ nil! ! !TClass methodsFor: 'testing' stamp: 'ST 5/7/2013 15:00'! isAnonymous ^self name isNil! ! !TClass methodsFor: 'accessing parallel hierarchy'! isMeta ^self isClassSide! ! !TClass methodsFor: 'testing' stamp: 'SebastianTleye 5/22/2013 10:18'! isObsolete "Return true if the receiver is obsolete." ^(self environment at: self name ifAbsent: [nil]) ~~ self! ! !TClass methodsFor: 'self evaluating' stamp: 'ST 5/6/2013 16:05'! isSelfEvaluating ^self isObsolete not! ! !TClass methodsFor: 'private' stamp: 'ST 6/17/2013 13:39'! isValidTraitName: aSymbol ^(aSymbol isEmptyOrNil or: [aSymbol first isLetter not or: [aSymbol anySatisfy: [:character | character isAlphaNumeric not]]]) not! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 6/17/2013 13:34'! name: aString traitComposition: aComposition methodDict: aMethodDict localSelectors: aSet organization: aClassOrganization "Used by copy" self name: aString. self localSelectors: aSet. self methodDict: aMethodDict. self traitComposition: aComposition. self organization: aClassOrganization! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! newSubclass | i className | i := 1. [className := (self name , i printString) asSymbol. self environment includesKey: className] whileTrue: [i := i + 1]. ^ self subclass: className instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' "Point newSubclass new"! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 5/6/2013 15:58'! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self class instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self class obsolete. super obsolete.! ! !TClass methodsFor: 'accessing' stamp: 'ST 5/6/2013 15:46'! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !TClass methodsFor: 'compiling' stamp: 'ST 5/7/2013 14:37'! possibleVariablesFor: misspelled continuedFrom: oldResults | results | results := misspelled correctAgainstDictionary: self classPool continuedFrom: oldResults. self sharedPools do: [:pool | results := misspelled correctAgainstDictionary: pool continuedFrom: results ]. self superclass == nil ifTrue: [ ^ misspelled correctAgainstDictionary: self environment continuedFrom: results ] ifFalse: [ ^ self superclass possibleVariablesFor: misspelled continuedFrom: results ]! ! !TClass methodsFor: 'compiling' stamp: 'ST 5/6/2013 15:55'! reformatAll "Reformat all methods in this class. Leaves old code accessible to version browsing" super reformatAll. "me..." self class reformatAll "...and my metaclass"! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/7/2013 14:28'! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [^self error: aString, ' is not a class variable']. self withAllSubclasses do:[:subclass | (Array with: subclass with: subclass class) do:[:classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name, ' (' , aString , ' is Undeclared) '. ^Undeclared declare: aSymbol from: self classPool]. (self confirm: (aString,' is still used in code of class ', classOrMeta name, '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [^Undeclared declare: aSymbol from: self classPool] ifFalse: [^self]]]]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [self classPool: nil]. ! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! removeFromChanges "References to the receiver, a class, and its metaclass should no longer be included in the system ChangeSet." ChangeSet current removeClassAndMetaClassChanges: self! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 5/6/2013 15:58'! removeFromSystem "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." self removeFromSystem: true.! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 6/17/2013 13:03'! removeFromSystem: logged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." "keep the class name and category for triggering the system change message. If we wait to long, then we get obsolete information which is not what we want." "tell class to deactivate and unload itself-- two separate events in the module system" self unload. self users do: [ :user | user removeFromComposition: self ]. self superclass ifNotNil: ["If we have no superclass there's nothing to be remembered" self superclass addObsoleteSubclass: self]. self environment forgetClass: self logged: logged. self obsolete.! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 5/6/2013 15:59'! removeFromSystemUnlogged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver. Do not log the removal either to the current change set nor to the system changes log" ^self removeFromSystem: false! ! !TClass methodsFor: 'instance variables' stamp: 'ST 5/6/2013 16:01'! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^(ClassBuilder new) name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !TClass methodsFor: 'pool variables' stamp: 'ST 5/7/2013 14:56'! removeSharedPool: aDictionary "Remove the pool dictionary, aDictionary, as one of the receiver's pool dictionaries. Create an error notification if the dictionary is not one of the pools. : Note that it removes the wrong one if there are two empty Dictionaries in the list." | satisfiedSet workingSet aSubclass | (self sharedPools includes: aDictionary) ifFalse: [^self error: 'the dictionary is not in my pool']. "first see if it is declared in a superclass in which case we can remove it." (self selectSuperclasses: [:class | class sharedPools includes: aDictionary]) isEmpty ifFalse: [self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. ^self]. "second get all the subclasses that reference aDictionary through me rather than a superclass that is one of my subclasses." workingSet := self subclasses asOrderedCollection. satisfiedSet := Set new. [workingSet isEmpty] whileFalse: [aSubclass := workingSet removeFirst. (aSubclass sharedPools includes: aDictionary) ifFalse: [satisfiedSet add: aSubclass. workingSet addAll: aSubclass subclasses]]. "for each of these, see if they refer to any of the variables in aDictionary because if they do, we can not remove the dictionary." satisfiedSet add: self. satisfiedSet do: [:sub | aDictionary associationsDo: [:aGlobal | (sub whichSelectorsReferTo: aGlobal) isEmpty ifFalse: [^self error: aGlobal key , ' is still used in code of class ' , sub name]]]. self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 5/27/2013 18:01'! removeSubclass: aSubclass "If the argument, aSubclass, is one of the receiver's subclasses, remove it." self subclasses == nil ifFalse: [self subclasses: (self subclasses copyWithout: aSubclass). self subclasses isEmpty ifTrue: [self subclasses: nil]].! ! !TClass methodsFor: 'class name' stamp: 'ST 5/7/2013 14:59'! rename: aString "The new name of the receiver is the argument, aString." | oldName newName | (newName := aString asSymbol) = (oldName := self name) ifTrue: [^ self]. (self environment includesKey: newName) ifTrue: [^ self error: newName , ' already exists']. self setName: newName. self environment renameClass: self from: oldName. (Undeclared includesKey: newName) ifTrue: [self inform: 'There are references to, ' , aString printString , ' from Undeclared. Check them after this change.'].! ! !TClass methodsFor: 'private' stamp: 'ST 6/17/2013 11:01'! setName: aSymbol andRegisterInCategory: categorySymbol environment: aSystemDictionary (self isValidTraitName: aSymbol) ifFalse: [TraitException signal: 'Invalid trait name']. (self environment == aSystemDictionary and: [self name = aSymbol and: [self category = categorySymbol]]) ifTrue: [^self]. ((aSystemDictionary includes: aSymbol) and: [(aSystemDictionary at: aSymbol) ~~ self]) ifTrue: [TraitException signal: 'The name ''' , aSymbol , ''' is already used']. (self environment notNil and: [self name notNil and: [self name ~= aSymbol]]) ifTrue: [ self environment renameClass: self as: aSymbol]. self name: aSymbol. self environment: aSystemDictionary. self environment at: self name put: self. self environment organization classify: self name under: categorySymbol. ^ true! ! !TClass methodsFor: 'pool variables' stamp: 'SebastianTleye 5/24/2013 15:06'! sharedPoolOfVarNamed: aString "Returns the SharedPool or nil from which the pool variable named aString is coming from." ^ self sharedPools detect: [:each | each usesClassVarNamed: aString ] ifNone: [ self superclass == nil ifTrue: [nil] ifFalse: [self superclass sharedPoolOfVarNamed: aString] ]! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 5/7/2013 14:49'! sharing: poolString "Set up sharedPools. Answer whether recompilation is advisable." | oldPools | oldPools := self sharedPools. self sharedPools: OrderedCollection new. (poolString subStrings: ' ') do: [:poolName | self sharedPools add: (self environment at: poolName asSymbol ifAbsent:[ (self confirm: 'The pool dictionary ', poolName,' does not exist.', '\Do you want it automatically created?' withCRs) ifTrue:[self environment at: poolName asSymbol put: Dictionary new] ifFalse:[^self error: poolName,' does not exist']])]. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. oldPools do: [:pool | | found | found := self sharedPools anySatisfy: [:p | p == pool]. found ifFalse: [^ true "A pool got deleted"]]. ^ false! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! shouldFileOutPool: aPoolName "respond with true if the user wants to file out aPoolName" ^self confirm: ('FileOut the sharedPool ', aPoolName, '?')! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:57'! shouldFileOutPools "respond with true if the user wants to file out the shared pools" ^self confirm: 'FileOut selected sharedPools?'! ! !TClass methodsFor: 'private' stamp: 'ST 5/6/2013 16:05'! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! subclass: t ^ self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! subclass: t instanceVariableNames: ins ^ self subclass: t instanceVariableNames: ins classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := (ClassBuilder new) superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! subclass: t uses: aTraitComposition | cls | cls := self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified'. cls setTraitComposition: aTraitComposition asTraitComposition. ^ cls! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:06'! subclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'ST 5/7/2013 14:20'! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses size == 0 ifFalse:[self subclasses do: aBlock]! ! !TClass methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/24/2013 16:44'! superclass: sup methodDict: md format: ft name: nm organization: org instVarNames: nilOrArray classPool: pool sharedPools: poolSet "Answer an instance of me, a new class, using the arguments of the message as the needed information. Must only be sent to a new instance; else we would need Object flushCache." self superclass: sup. self methodDict: md. self setFormat: ft. self setName: nm. self instanceVariables: nilOrArray. self classPool: pool. self sharedPools: poolSet. self organization: org.! ! !TClass methodsFor: 'initialize-release' stamp: 'SebastianTleye 5/27/2013 15:35'! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self subclasses: nil. ! ! !TClass methodsFor: 'initialize-release' stamp: 'ST 6/14/2013 13:42'! unload "Sent when a the class is removed. Does nothing, but may be overridden by (class-side) subclasses."! ! !TClass methodsFor: 'class variables' stamp: 'ST 5/6/2013 15:53'! usesClassVarNamed: aString "Return whether the receiver or its superclasses have a class variable named: aString" ^ self allClassVarNames includes: aString! ! !TClass methodsFor: 'pool variables' stamp: 'ST 5/6/2013 16:04'! usesLocalPoolVarNamed: aString "Return whether the receiver uses a pool variable named: aString which is defined locally" self hasSharedPools ifTrue: [ self sharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [ ^true ]]] ifFalse: [ ^false ]. ^false! ! !TClass methodsFor: 'pool variables' stamp: 'ST 5/6/2013 16:04'! usesPoolVarNamed: aString "Return whether the receiver has a pool variable named: aString, taking into account superclasses too" self allSharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [^true]]. ^false! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^(ClassBuilder new) superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^(ClassBuilder new) superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^(ClassBuilder new) superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^(ClassBuilder new) superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'ST 5/6/2013 16:07'! weakSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !TClass methodsFor: 'enumerating' stamp: 'ST 5/13/2013 13:16'! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! !TClass methodsFor: 'fileIn/Out' stamp: 'ST 5/6/2013 15:58'! withClassVersion: aVersion aVersion = self classVersion ifTrue:[^self]. ^self error: 'Invalid class version'! ! "Compiler"! "FuelTests"! "Kernel"! "NautilusCommon"! "RPackage-Core"! "Ring-Core-Kernel"! "Traits"! ----End fileIn----! ----QUIT----an Array(21 June 2013 3:58:09 pm) Pharo.image priorSource: 7215841! ----STARTUP----an Array(21 June 2013 4:06:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 4:06:30 pm) Pharo-30210.image priorSource: 7453639! ----STARTUP----an Array(21 June 2013 4:30:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 16:26' prior: 40770577! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 2...)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 16:26'! script310 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.485.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.321.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1487.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-EstebanLorenzano.144.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.227.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.102.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.511.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 16:26'! update30211 "self new update30211" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 2...)'. self loadTogether: self script310 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 6/21/2013 16:25'! basicOrganization ^ organization! ! !ClassDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 6/21/2013 16:26'! basicOrganization: anOrganization organization := anOrganization! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(21 June 2013 4:30:53 pm) Pharo.image priorSource: 7453837! ----STARTUP----an Array(21 June 2013 4:39:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 4:39:04 pm) Pharo-30211.image priorSource: 7464807! ----STARTUP----an Array(21 June 2013 5:01:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 16:54' prior: 41008572! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 3)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 16:54'! script311 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.486.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.322.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1488.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-MarcusDenker.136.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.120.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.474.mcz NautilusCommon-EstebanLorenzano.145.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.228.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.102.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.512.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 16:54'! update30212 "self new update30212" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 3)'. self loadTogether: self script311 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! methods ^ self methodDict values! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! users ^IdentitySet new.! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !Trait method! binding ^ nil -> self! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Behavior commentStamp: 'al 12/8/2005 20:44' prior: 18003465! My instances describe the behavior of other objects. I provide the minimum state necessary for compiling methods, and creating and running instances. Most objects are created as instances of the more fully supported subclass, Class, but I am a good starting point for providing instance-specific behavior (as in Metaclass).! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: internalStream moveSource: false toFile: 0. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! isClassSide ^self == self classSide! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !ClassDescription commentStamp: '' prior: 19192925! I add a number of facilities to basic Behaviors: Named instance variables Category organization for methods The notion of a name of this class (implemented as subclass responsibility) The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. I am an abstract class, in particular, my facilities are intended for inheritance by two subclasses, Class and Metaclass. The slots 'organization' and 'methodDict' should ONLY be accessed by message in order for things to work during ImageSegment>>discoverActiveClasses (q.v.).! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! isValidTraitName: aSymbol ^(aSymbol isEmptyOrNil or: [aSymbol first isLetter not or: [aSymbol anySatisfy: [:character | character isAlphaNumeric not]]]) not! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! setName: aSymbol andRegisterInCategory: categorySymbol environment: aSystemDictionary (self isValidTraitName: aSymbol) ifFalse: [TraitException signal: 'Invalid trait name']. (self environment == aSystemDictionary and: [self name = aSymbol and: [self category = categorySymbol]]) ifTrue: [^self]. ((aSystemDictionary includes: aSymbol) and: [(aSystemDictionary at: aSymbol) ~~ self]) ifTrue: [TraitException signal: 'The name ''' , aSymbol , ''' is already used']. (self environment notNil and: [self name notNil and: [self name ~= aSymbol]]) ifTrue: [ self environment renameClass: self as: aSymbol]. self name: aSymbol. self environment: aSystemDictionary. self environment at: self name put: self. self environment organization classify: self name under: categorySymbol. ^ true! ! !Trait method! category self traitConflict ! ! !Trait method! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! !Trait method! name: aString traitComposition: aComposition methodDict: aMethodDict localSelectors: aSet organization: aClassOrganization "Used by copy" self name: aString. self localSelectors: aSet. self methodDict: aMethodDict. self traitComposition: aComposition. self organization: aClassOrganization! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! category: arg1 self traitConflict! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Class commentStamp: '' prior: 19042868! I add a number of facilities to those in ClassDescription: A set of all my subclasses (defined in ClassDescription, but only used here and below) A name by which I can be found in a SystemDictionary A classPool for class variables shared between this class and its metaclass A list of sharedPools which probably should be supplanted by some better mechanism. My instances describe the representation and behavior of objects. I add more comprehensive programming support facilities to the basic attributes of Behavior and the descriptive facilities of ClassDescription. The slot 'subclasses' is a redundant structure. It is never used during execution, but is used by the development system to simplify or speed certain operations. ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'ST 6/18/2013 15:04' prior: 40908881! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !TBehavior methodsFor: 'compiling' stamp: 'ST 6/18/2013 15:16' prior: 40930150! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !TBehavior methodsFor: 'testing' stamp: 'ST 6/18/2013 15:04' prior: 40931607! isBehavior "Return true if the receiver is a behavior" ^true! ! !Behavior commentStamp: 'al 12/8/2005 20:44' prior: 41050530! My instances describe the behavior of other objects. I provide the minimum state necessary for compiling methods, and creating and running instances. Most objects are created as instances of the more fully supported subclass, Class, but I am a good starting point for providing instance-specific behavior (as in Metaclass).! !ClassDescription commentStamp: '' prior: 41075716! I add a number of facilities to basic Behaviors: Named instance variables Category organization for methods The notion of a name of this class (implemented as subclass responsibility) The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. I am an abstract class, in particular, my facilities are intended for inheritance by two subclasses, Class and Metaclass. The slots 'organization' and 'methodDict' should ONLY be accessed by message in order for things to work during ImageSegment>>discoverActiveClasses (q.v.).! !Class commentStamp: '' prior: 41079128! I add a number of facilities to those in ClassDescription: A set of all my subclasses (defined in ClassDescription, but only used here and below) A name by which I can be found in a SystemDictionary A classPool for class variables shared between this class and its metaclass A list of sharedPools which probably should be supplanted by some better mechanism. My instances describe the representation and behavior of objects. I add more comprehensive programming support facilities to the basic attributes of Behavior and the descriptive facilities of ClassDescription. The slot 'subclasses' is a redundant structure. It is never used during execution, but is used by the development system to simplify or speed certain operations. ! !ClassDescription methodsFor: 'compiling' stamp: 'ST 6/18/2013 15:05' prior: 19214568! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !ClassDescription methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/21/2013 16:52'! instanceVariables ^ instanceVariables! ! !ClassDescription methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/21/2013 16:53'! instanceVariables: anObject instanceVariables := anObject ! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'ST 6/18/2013 15:23' prior: 40887402! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! TClassDescription removeSelector: #zapOrganization! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! TClassDescription removeSelector: #whichCategoryIncludesSelector:! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! TClassDescription removeSelector: #wantsRecompilationProgressReported! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! TClassDescription removeSelector: #wantsChangeSetLogging! !Trait method! uncategorizedMethods ^ self methodsInCategory: ClassOrganizer default! ! TClassDescription removeSelector: #uncategorizedMethods! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! TClassDescription removeSelector: #storeOn:! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ (aSymbol asString = ClassOrganizer allCategory) ifTrue: [ self organization allMethodSelectors ] ifFalse: [ self organization listAtCategoryNamed: aSymbol ]! ! TClassDescription removeSelector: #selectorsToFileOutCategory:! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! TClassDescription removeSelector: #reorganize! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! TClassDescription removeSelector: #removeCategory:! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! TClassDescription removeSelector: #reformatAll! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! TClassDescription removeSelector: #putClassCommentToCondensedChangesFile:! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! TClassDescription removeSelector: #printOn:! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! TClassDescription removeSelector: #printMethodChunk:withPreamble:on:moveSource:toFile:! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! TClassDescription removeSelector: #printCategoryChunk:on:withStamp:priorMethod:! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self! ! TClassDescription removeSelector: #notifyOfRecategorizedSelector:from:to:! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! TClassDescription removeSelector: #noteRecategorizedSelectors:oldComposition:! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! TClassDescription removeSelector: #noteRecategorizedSelector:from:to:! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! TClassDescription removeSelector: #noteCompilationOf:meta:! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! TClassDescription removeSelector: #noteAddedSelector:meta:! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! TClassDescription removeSelector: #moveChangesTo:! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (aName = ClassOrganizer allCategory ifTrue: [self organization allMethodSelectors] ifFalse: [self organization listAtCategoryNamed: aName]). ^ aColl asArray sort! ! TClassDescription removeSelector: #methodsInCategory:! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! TClassDescription removeSelector: #methodsFor:! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! TClassDescription removeSelector: #logMethodSource:forMethod:inCategory:withStamp:! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! TClassDescription removeSelector: #localMethods! !Trait method! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! TClassDescription removeSelector: #isMeta! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! TClassDescription removeSelector: #isInstanceSide! !Trait method! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! TClassDescription removeSelector: #isClassSide! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! TClassDescription removeSelector: #hasComment! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! TClassDescription removeSelector: #fileOutOrganizationOn:! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! TClassDescription removeSelector: #fileOutOn:moveSource:toFile:! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! TClassDescription removeSelector: #fileOutOn:! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! TClassDescription removeSelector: #fileOutChangedMessages:on:moveSource:toFile:! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! TClassDescription removeSelector: #fileOutChangedMessages:on:! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! TClassDescription removeSelector: #fileOutCategory:on:moveSource:toFile:! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! TClassDescription removeSelector: #fileOutCategory:! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! TClassDescription removeSelector: #errorCategoryName! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! TClassDescription removeSelector: #doneCompiling! !Trait method! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! TClassDescription removeSelector: #definition! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! TClassDescription removeSelector: #copyMethodDictionaryFrom:! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! TClassDescription removeSelector: #copyCategory:from:classified:! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! TClassDescription removeSelector: #copyCategory:from:! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! TClassDescription removeSelector: #copyAllCategoriesFrom:! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! TClassDescription removeSelector: #copyAll:from:classified:! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! TClassDescription removeSelector: #copyAll:from:! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! TClassDescription removeSelector: #copy:from:classified:! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! TClassDescription removeSelector: #copy:from:! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! TClassDescription removeSelector: #compileSilently:classified:notifying:! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! TClassDescription removeSelector: #compileSilently:classified:! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: ClassOrganizer default notifying: requestor! ! TClassDescription removeSelector: #compile:notifying:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! TClassDescription removeSelector: #compile:classified:withStamp:notifying:logSource:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! TClassDescription removeSelector: #compile:classified:withStamp:notifying:! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! TClassDescription removeSelector: #compile:classified:notifying:! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! TClassDescription removeSelector: #compile:classified:! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! TClassDescription removeSelector: #commentStamp:prior:! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! TClassDescription removeSelector: #commentStamp:! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! TClassDescription removeSelector: #comment:stamp:! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! TClassDescription removeSelector: #comment:! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! TClassDescription removeSelector: #comment! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! TClassDescription removeSelector: #classComment:stamp:! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! TClassDescription removeSelector: #classComment:! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! TClassDescription removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! TClassDescription removeSelector: #addSelectorSilently:withMethod:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! TClassDescription removeSelector: #addSelector:withMethod:notifying:! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! TClassDescription removeSelector: #addCategory:before:! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! TClassDescription removeSelector: #acceptsLoggingOfCompilation! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! TClass removeSelector: #category:! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! TClass removeSelector: #category! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! TBehavior removeSelector: #withAllSuperclasses! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! TBehavior removeSelector: #whichSelectorsReferTo:special:byte:! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! TBehavior removeSelector: #whichSelectorsReferTo:! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = ClassOrganizer default ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! TBehavior removeSelector: #updateMethodDictionarySelector:! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! TBehavior removeSelector: #traitsProvidingSelector:! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! TBehavior removeSelector: #traits! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! TBehavior removeSelector: #traitTransformations! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! TBehavior removeSelector: #traitOrClassOfSelector:! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! TBehavior removeSelector: #traitCompositionString! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! TBehavior removeSelector: #traitCompositionIncludes:! !Trait method! traitComposition: aTraitComposition ^self explicitRequirement ! ! TBehavior removeSelector: #traitComposition:! !Trait method! traitComposition "Return my trait composition. Manipulating the composition does not effect changes automatically. Use #setTraitComposition: to do this but note, that you have to make a copy of the old trait composition before changing it because only the difference between the new and the old composition is updated." ^self explicitRequirement ! ! TBehavior removeSelector: #traitComposition! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! TBehavior removeSelector: #thoroughHasSelectorReferringTo:special:byte:! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! TBehavior removeSelector: #storeLiteral:on:! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! TBehavior removeSelector: #spaceUsed! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! TBehavior removeSelector: #sourceCodeAt:ifAbsent:! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! TBehavior removeSelector: #sourceCodeAt:! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! TBehavior removeSelector: #setTraitCompositionFrom:! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! TBehavior removeSelector: #setTraitComposition:! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! TBehavior removeSelector: #selectorsDo:! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! TBehavior removeSelector: #selectorsAndMethodsDo:! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! TBehavior removeSelector: #selectors! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! TBehavior removeSelector: #removeTraitSelector:! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! TBehavior removeSelector: #removeSelectorSilently:! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! TBehavior removeSelector: #removeSelector:! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! TBehavior removeSelector: #removeFromComposition:! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! TBehavior removeSelector: #removeAlias:of:! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! TBehavior removeSelector: #registerLocalSelector:! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! TBehavior removeSelector: #purgeLocalSelectors! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! TBehavior removeSelector: #postCopy! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! TBehavior removeSelector: #obsolete! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! TBehavior removeSelector: #notifyUsersOfChangedSelectors:! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! TBehavior removeSelector: #notifyUsersOfChangedSelector:! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! TBehavior removeSelector: #noteChangedSelectors:! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! TBehavior removeSelector: #methodsDo:! !Trait method! methods ^ self methodDict values! ! !Trait method! methods ^ self methodDict values! ! !Trait method! methods ^ self methodDict values! ! TBehavior removeSelector: #methods! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! TBehavior removeSelector: #methodDictionary:! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! TBehavior removeSelector: #methodDictionary! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! TBehavior removeSelector: #methodDictAddSelectorSilently:withMethod:! !Trait method! methodDict: aDictionary ^ self explicitRequirement! ! TBehavior removeSelector: #methodDict:! !Trait method! methodDict ^ self explicitRequirement! ! TBehavior removeSelector: #methodDict! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! TBehavior removeSelector: #longPrintOn:! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! TBehavior removeSelector: #localSelectors! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! TBehavior removeSelector: #literalScannedAs:notifying:! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! TBehavior removeSelector: #isLocalAliasSelector:! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! TBehavior removeSelector: #isDisabledSelector:! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! TBehavior removeSelector: #isAliasSelector:! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! TBehavior removeSelector: #includesSelector:! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! TBehavior removeSelector: #includesLocalSelector:! !Trait method! hasTraitComposition self explicitRequirement! ! TBehavior removeSelector: #hasTraitComposition! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! TBehavior removeSelector: #hasMethods! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! TBehavior removeSelector: #flattenDownAllTraits! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! TBehavior removeSelector: #flattenDown:! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! TBehavior removeSelector: #firstPrecodeCommentFor:! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! TBehavior removeSelector: #firstCommentAt:! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! TBehavior removeSelector: #environment! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! TBehavior removeSelector: #ensureLocalSelectors! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! TBehavior removeSelector: #emptyMethodDictionary! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! TBehavior removeSelector: #deregisterLocalSelector:! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! TBehavior removeSelector: #deepCopy! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! TBehavior removeSelector: #copyOfMethodDictionary! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! TBehavior removeSelector: #compress! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! TBehavior removeSelector: #compiledMethodAt:ifAbsent:! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! TBehavior removeSelector: #compiledMethodAt:! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! TBehavior removeSelector: #changeRecordsAt:! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! TBehavior removeSelector: #canZapMethodDictionary! !Trait method! basicLocalSelectors: aSetOrNil self explicitRequirement! ! TBehavior removeSelector: #basicLocalSelectors:! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! TBehavior removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! TBehavior removeSelector: #addToComposition:! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! TBehavior removeSelector: #addSelectorSilently:withMethod:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! TBehavior removeSelector: #addSelector:withMethod:notifying:! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! TBehavior removeSelector: #addSelector:withMethod:! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! TBehavior removeSelector: #addExclusionOf:to:! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! TBehavior removeSelector: #>>! "Compiler"! "FuelTests"! "Kernel"! "NautilusCommon"! "RPackage-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(21 June 2013 5:02:05 pm) Pharo.image priorSource: 7465005! ----STARTUP----an Array(21 June 2013 5:10:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 5:10:32 pm) Pharo-30212.image priorSource: 7659939! ----STARTUP----an Array(21 June 2013 5:39:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 17:36' prior: 41019740! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 4)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 17:36'! script312 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.487.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1489.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.137.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.477.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.229.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.103.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.555.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.512.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 17:36'! update30213 "self new update30213" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 4)'. self loadTogether: self script312 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !Class commentStamp: '' prior: 41081901! I add a number of facilities to those in ClassDescription: A set of all my subclasses (defined in ClassDescription, but only used here and below) A name by which I can be found in a SystemDictionary A classPool for class variables shared between this class and its metaclass A list of sharedPools which probably should be supplanted by some better mechanism. My instances describe the representation and behavior of objects. I add more comprehensive programming support facilities to the basic attributes of Behavior and the descriptive facilities of ClassDescription. The slot 'subclasses' is a redundant structure. It is never used during execution, but is used by the development system to simplify or speed certain operations. ! !Behavior methodsFor: '*NativeBoost-Core' stamp: 'ST 6/18/2013 16:38' prior: 18009431! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !Class commentStamp: '' prior: 41226273! I add a number of facilities to those in ClassDescription: A set of all my subclasses (defined in ClassDescription, but only used here and below) A name by which I can be found in a SystemDictionary A classPool for class variables shared between this class and its metaclass A list of sharedPools which probably should be supplanted by some better mechanism. My instances describe the representation and behavior of objects. I add more comprehensive programming support facilities to the basic attributes of Behavior and the descriptive facilities of ClassDescription. The slot 'subclasses' is a redundant structure. It is never used during execution, but is used by the development system to simplify or speed certain operations. ! !Class methodsFor: 'accessing class hierarchy' stamp: 'ST 6/18/2013 16:28'! subclasses: aCollection subclasses := aCollection.! ! !ClassDescription methodsFor: 'organization' stamp: 'ST 6/18/2013 16:34' prior: 41019014! basicOrganization ^organization.! ! !ClassDescription methodsFor: 'organization' stamp: 'ST 6/18/2013 16:34' prior: 41019139! basicOrganization: aClassOrg organization := aClassOrg.! ! !ClassDescription methodsFor: 'accessing' stamp: 'ST 6/18/2013 16:34' prior: 41083241! instanceVariables ^instanceVariables.! ! !ClassDescription methodsFor: 'accessing' stamp: 'ST 6/18/2013 16:34' prior: 41083368! instanceVariables: anObject instanceVariables := anObject! ! !Trait method! withClassVersion: aVersion aVersion = self classVersion ifTrue:[^self]. ^self error: 'Invalid class version'! ! Class removeSelector: #withClassVersion:! !Trait method! weakSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Class removeSelector: #weakSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^(ClassBuilder new) superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! Class removeSelector: #weakSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Class removeSelector: #variableWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^(ClassBuilder new) superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! Class removeSelector: #variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Class removeSelector: #variableSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^(ClassBuilder new) superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! Class removeSelector: #variableSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Class removeSelector: #variableByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^(ClassBuilder new) superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! Class removeSelector: #variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! usesPoolVarNamed: aString "Return whether the receiver has a pool variable named: aString, taking into account superclasses too" self allSharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [^true]]. ^false! ! Class removeSelector: #usesPoolVarNamed:! !Trait method! usesLocalPoolVarNamed: aString "Return whether the receiver uses a pool variable named: aString which is defined locally" self hasSharedPools ifTrue: [ self sharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [ ^true ]]] ifFalse: [ ^false ]. ^false! ! Class removeSelector: #usesLocalPoolVarNamed:! !Trait method! usesClassVarNamed: aString "Return whether the receiver or its superclasses have a class variable named: aString" ^ self allClassVarNames includes: aString! ! Class removeSelector: #usesClassVarNamed:! !Trait method! unload "Sent when a the class is removed. Does nothing, but may be overridden by (class-side) subclasses."! ! Class removeSelector: #unload! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self subclasses: nil. ! ! Class removeSelector: #superclass:methodDictionary:format:! !Trait method! superclass: sup methodDict: md format: ft name: nm organization: org instVarNames: nilOrArray classPool: pool sharedPools: poolSet "Answer an instance of me, a new class, using the arguments of the message as the needed information. Must only be sent to a new instance; else we would need Object flushCache." self superclass: sup. self methodDict: md. self setFormat: ft. self setName: nm. self instanceVariables: nilOrArray. self classPool: pool. self sharedPools: poolSet. self organization: org.! ! Class removeSelector: #superclass:methodDict:format:name:organization:instVarNames:classPool:sharedPools:! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses size == 0 ifFalse:[self subclasses do: aBlock]! ! Class removeSelector: #subclassesDo:! !Trait method! subclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! Class removeSelector: #subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! subclass: t uses: aTraitComposition | cls | cls := self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified'. cls setTraitComposition: aTraitComposition asTraitComposition. ^ cls! ! Class removeSelector: #subclass:uses:! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := (ClassBuilder new) superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! Class removeSelector: #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! subclass: t instanceVariableNames: ins ^ self subclass: t instanceVariableNames: ins classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! Class removeSelector: #subclass:instanceVariableNames:! !Trait method! subclass: t ^ self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! Class removeSelector: #subclass:! !Trait method! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! Class removeSelector: #spaceUsed! !Trait method! shouldFileOutPools "respond with true if the user wants to file out the shared pools" ^self confirm: 'FileOut selected sharedPools?'! ! Class removeSelector: #shouldFileOutPools! !Trait method! shouldFileOutPool: aPoolName "respond with true if the user wants to file out aPoolName" ^self confirm: ('FileOut the sharedPool ', aPoolName, '?')! ! Class removeSelector: #shouldFileOutPool:! !Trait method! sharing: poolString "Set up sharedPools. Answer whether recompilation is advisable." | oldPools | oldPools := self sharedPools. self sharedPools: OrderedCollection new. (poolString subStrings: ' ') do: [:poolName | self sharedPools add: (self environment at: poolName asSymbol ifAbsent:[ (self confirm: 'The pool dictionary ', poolName,' does not exist.', '\Do you want it automatically created?' withCRs) ifTrue:[self environment at: poolName asSymbol put: Dictionary new] ifFalse:[^self error: poolName,' does not exist']])]. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. oldPools do: [:pool | | found | found := self sharedPools anySatisfy: [:p | p == pool]. found ifFalse: [^ true "A pool got deleted"]]. ^ false! ! Class removeSelector: #sharing:! !Trait method! sharedPoolOfVarNamed: aString "Returns the SharedPool or nil from which the pool variable named aString is coming from." ^ self sharedPools detect: [:each | each usesClassVarNamed: aString ] ifNone: [ self superclass == nil ifTrue: [nil] ifFalse: [self superclass sharedPoolOfVarNamed: aString] ]! ! Class removeSelector: #sharedPoolOfVarNamed:! !Trait method! rename: aString "The new name of the receiver is the argument, aString." | oldName newName | (newName := aString asSymbol) = (oldName := self name) ifTrue: [^ self]. (self environment includesKey: newName) ifTrue: [^ self error: newName , ' already exists']. self setName: newName. self environment renameClass: self from: oldName. (Undeclared includesKey: newName) ifTrue: [self inform: 'There are references to, ' , aString printString , ' from Undeclared. Check them after this change.'].! ! Class removeSelector: #rename:! !Trait method! removeSubclass: aSubclass "If the argument, aSubclass, is one of the receiver's subclasses, remove it." self subclasses == nil ifFalse: [self subclasses: (self subclasses copyWithout: aSubclass). self subclasses isEmpty ifTrue: [self subclasses: nil]].! ! Class removeSelector: #removeSubclass:! !Trait method! removeSharedPool: aDictionary "Remove the pool dictionary, aDictionary, as one of the receiver's pool dictionaries. Create an error notification if the dictionary is not one of the pools. : Note that it removes the wrong one if there are two empty Dictionaries in the list." | satisfiedSet workingSet aSubclass | (self sharedPools includes: aDictionary) ifFalse: [^self error: 'the dictionary is not in my pool']. "first see if it is declared in a superclass in which case we can remove it." (self selectSuperclasses: [:class | class sharedPools includes: aDictionary]) isEmpty ifFalse: [self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. ^self]. "second get all the subclasses that reference aDictionary through me rather than a superclass that is one of my subclasses." workingSet := self subclasses asOrderedCollection. satisfiedSet := Set new. [workingSet isEmpty] whileFalse: [aSubclass := workingSet removeFirst. (aSubclass sharedPools includes: aDictionary) ifFalse: [satisfiedSet add: aSubclass. workingSet addAll: aSubclass subclasses]]. "for each of these, see if they refer to any of the variables in aDictionary because if they do, we can not remove the dictionary." satisfiedSet add: self. satisfiedSet do: [:sub | aDictionary associationsDo: [:aGlobal | (sub whichSelectorsReferTo: aGlobal) isEmpty ifFalse: [^self error: aGlobal key , ' is still used in code of class ' , sub name]]]. self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]! ! Class removeSelector: #removeSharedPool:! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^(ClassBuilder new) name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! Class removeSelector: #removeInstVarNamed:! !Trait method! removeFromSystemUnlogged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver. Do not log the removal either to the current change set nor to the system changes log" ^self removeFromSystem: false! ! Class removeSelector: #removeFromSystemUnlogged! !Trait method! removeFromSystem: logged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." "keep the class name and category for triggering the system change message. If we wait to long, then we get obsolete information which is not what we want." "tell class to deactivate and unload itself-- two separate events in the module system" self unload. self users do: [ :user | user removeFromComposition: self ]. self superclass ifNotNil: ["If we have no superclass there's nothing to be remembered" self superclass addObsoleteSubclass: self]. self environment forgetClass: self logged: logged. self obsolete.! ! Class removeSelector: #removeFromSystem:! !Trait method! removeFromSystem "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." self removeFromSystem: true.! ! Class removeSelector: #removeFromSystem! !Trait method! removeFromChanges "References to the receiver, a class, and its metaclass should no longer be included in the system ChangeSet." ChangeSet current removeClassAndMetaClassChanges: self! ! Class removeSelector: #removeFromChanges! !Trait method! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [^self error: aString, ' is not a class variable']. self withAllSubclasses do:[:subclass | (Array with: subclass with: subclass class) do:[:classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name, ' (' , aString , ' is Undeclared) '. ^Undeclared declare: aSymbol from: self classPool]. (self confirm: (aString,' is still used in code of class ', classOrMeta name, '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [^Undeclared declare: aSymbol from: self classPool] ifFalse: [^self]]]]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [self classPool: nil]. ! ! Class removeSelector: #removeClassVarNamed:! !Trait method! reformatAll "Reformat all methods in this class. Leaves old code accessible to version browsing" super reformatAll. "me..." self class reformatAll "...and my metaclass"! ! Class removeSelector: #reformatAll! !Trait method! possibleVariablesFor: misspelled continuedFrom: oldResults | results | results := misspelled correctAgainstDictionary: self classPool continuedFrom: oldResults. self sharedPools do: [:pool | results := misspelled correctAgainstDictionary: pool continuedFrom: results ]. self superclass == nil ifTrue: [ ^ misspelled correctAgainstDictionary: self environment continuedFrom: results ] ifFalse: [ ^ self superclass possibleVariablesFor: misspelled continuedFrom: results ]! ! Class removeSelector: #possibleVariablesFor:continuedFrom:! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! Class removeSelector: #poolDictionaryNames! !Trait method! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self class instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self class obsolete. super obsolete.! ! Class removeSelector: #obsolete! !Trait method! newSubclass | i className | i := 1. [className := (self name , i printString) asSymbol. self environment includesKey: className] whileTrue: [i := i + 1]. ^ self subclass: className instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' "Point newSubclass new"! ! Class removeSelector: #newSubclass! !Trait method! isSelfEvaluating ^self isObsolete not! ! Class removeSelector: #isSelfEvaluating! !Trait method! isObsolete "Return true if the receiver is obsolete." ^(self environment at: self name ifAbsent: [nil]) ~~ self! ! Class removeSelector: #isObsolete! !Trait method! isAnonymous ^self name isNil! ! Class removeSelector: #isAnonymous! !Trait method! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" | binding | "First look in classVar dictionary." binding := self classPool bindingOf: aSymbol. binding ifNotNil: [^binding]. "Next look in shared pools." self sharedPools do: [:pool | | aBinding | aBinding := pool bindingOf: aSymbol. aBinding ifNotNil: [^aBinding ]. ]. self superclass ifNotNil: [ ^ self superclass innerBindingOf: aSymbol. ]. ^ nil! ! Class removeSelector: #innerBindingOf:! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! Class removeSelector: #hasTraitComposition! !Trait method! hasSharedPools "Returns whether the receiver uses shared pools directly (Does not take into account that it may inherit shared pool uses." ^ self sharedPools notEmpty! ! Class removeSelector: #hasSharedPools! !Trait method! hasMethods "Answer a Boolean according to whether any methods are defined for the receiver (includes whether there are methods defined in the receiver's metaclass)." ^super hasMethods or: [self class hasMethods]! ! Class removeSelector: #hasMethods! !Trait method! hasClassVarNamed: aString "Return whether the receiver has a class variables (shared variables among its class and subclasses) named: aString" ^ self classVarNames includes: aString! ! Class removeSelector: #hasClassVarNamed:! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ super hasAbstractMethods or: [self class hasAbstractMethods] ! ! Class removeSelector: #hasAbstractMethods! !Trait method! fileOutSharedPoolsOn: aFileStream "file out the shared pools of this class after prompting the user about each pool" | poolsToFileOut | poolsToFileOut := self sharedPools select: [:aPool | (self shouldFileOutPool: (self environment keyAtIdentityValue: aPool))]. poolsToFileOut do: [:aPool | self fileOutPool: aPool onFileStream: aFileStream]. ! ! Class removeSelector: #fileOutSharedPoolsOn:! !Trait method! fileOutPool: aPool onFileStream: aFileStream | aPoolName | (aPool isKindOf: SharedPool class) ifTrue:[^self notify: 'we do not fileout SharedPool type shared pools for now']. aPoolName := self environment keyAtIdentityValue: aPool. self crTrace: aPoolName. aFileStream nextPutAll: 'Transcript show: ''' , aPoolName , '''; cr!!'; cr. aFileStream nextPutAll: 'Smalltalk at: #' , aPoolName , ' put: Dictionary new!!'; cr. aPool keys asSortedCollection do: [ :aKey | | aValue | aValue := aPool at: aKey. aFileStream nextPutAll: aPoolName , ' at: #''' , aKey asString , '''', ' put: '. (aValue isKindOf: Number) ifTrue: [aValue printOn: aFileStream] ifFalse: [aFileStream nextPutAll: '('. aValue printOn: aFileStream. aFileStream nextPutAll: ')']. aFileStream nextPutAll: '!!'; cr]. aFileStream cr! ! Class removeSelector: #fileOutPool:onFileStream:! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: self name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self class nonTrivial ifTrue: [aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self class fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool]! ! Class removeSelector: #fileOutOn:moveSource:toFile:initializing:! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." ^self fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: true! ! Class removeSelector: #fileOutOn:moveSource:toFile:! !Trait method! fileOutInitializerOn: aStream ^self class fileOutInitializerOn: aStream! ! Class removeSelector: #fileOutInitializerOn:! !Trait method! fileOut "Create a file whose name is the name of the receiver with '.st' as the extension, and file a description of the receiver onto it." | internalStream | internalStream := (String new: 100) writeStream. internalStream header; timeStamp. self hasSharedPools ifTrue: [ self shouldFileOutPools ifTrue: [self fileOutSharedPoolsOn: internalStream]]. self fileOutOn: internalStream moveSource: false toFile: 0. internalStream trailer. FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true! ! Class removeSelector: #fileOut! !Trait method! externalName "Answer a name by which the receiver can be known." ^ self name! ! Class removeSelector: #externalName! !Trait method! ensureClassPool self classPool.! ! Class removeSelector: #ensureClassPool! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class class instanceVariableNames: self class instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! Class removeSelector: #duplicateClassWithNewName:! !Trait method! declare: varString "Declare class variables common to all instances. Answer whether recompilation is advisable." | newVars conflicts | newVars := (varString subStrings: ' ') collect: [:x | x asSymbol]. conflicts := false. (self classPool keys reject: [:x | newVars includes: x]) do: [:var | self removeClassVarNamed: var]. (newVars reject: [:var | self classPool includesKey: var]) do: [:var | "adding" "check if new vars defined elsewhere" (self innerBindingOf: var) ifNotNil: [(DuplicatedVariableError new) variable: var; signal: var , ' is defined elsewhere'. conflicts := true]]. newVars notEmpty ifTrue: [self classPool: self classPool. "in case it was nil" newVars do: [:var | self classPool declare: var from: Undeclared]]. ^conflicts! ! Class removeSelector: #declare:! !Trait method! compileAllFrom: oldClass "Recompile all the methods in the receiver's method dictionary (not the subclasses). Also recompile the methods in the metaclass." super compileAllFrom: oldClass. self class compileAllFrom: oldClass class! ! Class removeSelector: #compileAllFrom:! !Trait method! compileAll super compileAll. self class compileAll.! ! Class removeSelector: #compileAll! !Trait method! classVarNames "Answer a collection of the names of the class variables defined in the receiver." ^self classPool keys asArray sort! ! Class removeSelector: #classVarNames! !Trait method! classVarNamed: name put: anObject "Store anObject in the class variable." | symbol | symbol := name asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! Class removeSelector: #classVarNamed:put:! !Trait method! classVarNamed: name "Answer the content of the Class Variable" ^self classPool at: name asSymbol ifAbsent: [self error: 'no such lass var']! ! Class removeSelector: #classVarNamed:! !Trait method! classPoolFrom: aClass "share the classPool with aClass." self classPool: aClass classPool.! ! Class removeSelector: #classPoolFrom:! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver, or nil if variable with such name is not defined" "The lookup recurses up to superclasses looking inside their class and shared pools, but not the environment, since two classes, even if they have ancestry relationship, could use different environments. That's why we doing an environment lookup only as a last step of symbol lookup and taking only the environment of receiver only, not any of it's superclass(es) " | aSymbol | aSymbol := varName asSymbol. ^ (self innerBindingOf: aSymbol) ifNil: [ self environment bindingOf: aSymbol ]! ! Class removeSelector: #bindingOf:! !Trait method! binding "Answer a binding for the receiver, sharing if possible" | binding | binding := self environment associationAt: self name ifAbsent: [nil -> self]. ^binding value == self ifTrue: [binding] ifFalse: [nil -> self]! ! Class removeSelector: #binding! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self classSide noteNewBaseTraitCompositionApplied: self traitComposition. ^ changedSelectors! ! Class removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! allSharedPools "Answer an ordered collection of the pools the receiver shares, including those defined in the superclasses of the receiver." | aSet | ^self superclass == nil ifTrue: [self sharedPools copy] ifFalse: [aSet := self superclass allSharedPools. aSet addAll: self sharedPools. aSet]! ! Class removeSelector: #allSharedPools! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's class variables, including those defined in the superclasses of the receiver." | aSet | self superclass == nil ifTrue: [^self classVarNames asSet] "This is the keys so it is a new Set." ifFalse: [aSet := self superclass allClassVarNames. aSet addAll: self classVarNames. ^aSet]! ! Class removeSelector: #allClassVarNames! !Trait method! addSubclass: aSubclass "Make the argument, aSubclass, be one of the subclasses of the receiver. Create an error notification if the argument's superclass is not the receiver." aSubclass superclass ~~ self ifTrue: [^self error: aSubclass name , ' is not my subclass']. self subclasses == nil ifTrue: [self subclasses: (Array with: aSubclass). ^self]. self subclasses do:[:cl| cl == aSubclass ifTrue:[^self]]. "Already my subclass" self subclasses: (self subclasses copyWith: aSubclass).! ! Class removeSelector: #addSubclass:! !Trait method! addSharedPool: aSharedPool "Add the argument, aSharedPool, as one of the receiver's shared pools. Create an error if the shared pool is already one of the pools. This method will work with shared pools that are plain Dictionaries or thenewer SharedPool subclasses" (self sharedPools includes: aSharedPool) ifTrue: [^self error: 'This is already in my shared pool list']. self sharedPools == nil ifTrue: [self sharedPools: (OrderedCollection with: aSharedPool)] ifFalse: [self sharedPools add: aSharedPool]! ! Class removeSelector: #addSharedPool:! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^(ClassBuilder new) name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! Class removeSelector: #addInstVarNamed:! !Trait method! addClassVarNamed: aString "Add the argument, aString, as a class variable of the receiver. Signal an error if the first character of aString is not capitalized, or if it is already a variable named in the class." | symbol oldState | oldState := self copy. aString first canBeGlobalVarInitial ifFalse: [^self error: aString, ' class variable name should be capitalized; proceed to include anyway.']. symbol := aString asSymbol. self withAllSubclasses do: [:subclass | (subclass bindingOf: symbol) ifNotNil:[ ^ self error: aString , ' is already used as a variable name in class ' , subclass name]]. (self classPool includesKey: symbol) ifFalse: ["Pick up any refs in Undeclared" self classPool declare: symbol from: Undeclared. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: oldState to: self]! ! Class removeSelector: #addClassVarNamed:! !Trait method! version "Allows polymorphism with TraitDescription>>version" ^ self classVersion! ! ClassDescription removeSelector: #version! !Trait method! usesPoolVarNamed: aString "Only classes may use a pool variable named: aString" ^ false! ! ClassDescription removeSelector: #usesPoolVarNamed:! !Trait method! usesLocalPoolVarNamed: aString ^ false! ! ClassDescription removeSelector: #usesLocalPoolVarNamed:! !Trait method! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories ]. ^ changedCategories! ! ClassDescription removeSelector: #updateOrganizationSelector:oldCategory:newCategory:! !Trait method! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == ClassOrganizer ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! ClassDescription removeSelector: #updateOrganizationDescription:oldCategory:newCategory:changedCategories:! !Trait method! updateInstancesFrom: oldClass "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "ar 7/15/1999: The updating below is possibly dangerous. If there are any contexts having an old instance as receiver it might crash the system if the new receiver in which the context is executed has a different layout. See bottom below for a simple example:" | oldInstances | oldInstances := oldClass allInstances asArray. oldInstances := self updateInstances: oldInstances from: oldClass isMeta: self isMeta. ^oldInstances " | crashingBlock class | class := Object subclass: #CrashTestDummy instanceVariableNames: 'instVar' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. class compile:'instVar: value instVar := value'. class compile:'crashingBlock ^[instVar]'. crashingBlock := (class new) instVar: 42; crashingBlock. Object subclass: #CrashTestDummy instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. crashingBlock. crashingBlock value. " ! ! ClassDescription removeSelector: #updateInstancesFrom:! !Trait method! updateInstances: oldInstances from: oldClass isMeta: isMeta "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "If there are any contexts having an old instance as receiver it might crash the system because the layout has changed, and the method only knows about the old layout." | map variable instSize newInstances | oldInstances isEmpty ifTrue:[^#()]. "no instances to convert" isMeta ifTrue: [ oldInstances size = 1 ifFalse:[^self error:'Metaclasses can only have one instance']. self soleInstance class == self ifTrue:[ ^self error:'Metaclasses can only have one instance']]. map := self instVarMappingFrom: oldClass. variable := self isVariable. instSize := self instSize. newInstances := Array new: oldInstances size. 1 to: oldInstances size do:[:i| newInstances at: i put: ( self newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)]. "Now perform a bulk mutation of old instances into new ones" oldInstances elementsExchangeIdentityWith: newInstances. ^newInstances "which are now old"! ! ClassDescription removeSelector: #updateInstances:from:isMeta:! !Trait method! uncategorizedMethods ^ self methodsInCategory: ClassOrganizer default! ! ClassDescription removeSelector: #uncategorizedMethods! !Trait method! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! ClassDescription removeSelector: #theNonMetaClass! !Trait method! theMetaClass "Sent to a class or metaclass, always return the metaclass" ^self class! ! ClassDescription removeSelector: #theMetaClass! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self instanceVariables: nil. self organization: nil.! ! ClassDescription removeSelector: #superclass:methodDictionary:format:! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." ^self subclasses do: aBlock! ! ClassDescription removeSelector: #subclassesDo:! !Trait method! subclasses ^ Array new! ! ClassDescription removeSelector: #subclasses! !Trait method! sharedPoolsString "Answer a string of my shared pool names separated by spaces." ^String streamContents: [ :stream | self sharedPools do: [ :each | stream nextPutAll: (self environment keyAtIdentityValue: each ifAbsent: [ 'private' ]) ] separatedBy: [ stream space ] ]! ! ClassDescription removeSelector: #sharedPoolsString! !Trait method! sharedPoolOfVarNamed: aString "Only classes may have shared pools" ^ nil! ! ClassDescription removeSelector: #sharedPoolOfVarNamed:! !Trait method! setInstVarNames: instVarArray "Private - for class initialization only" | required | required := self instSize. self superclass notNil ifTrue:[required := required - self superclass instSize]. instVarArray size = required ifFalse:[^self error: required printString, ' instvar names are required']. instVarArray isEmpty ifTrue:[self instanceVariables: nil] ifFalse:[self instanceVariables: instVarArray asArray].! ! ClassDescription removeSelector: #setInstVarNames:! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! ClassDescription removeSelector: #removeSelector:! ClassDescription removeSelector: #printWithClosureAnalysisOn:! !Trait method! printSubclassesOn: aStream level: level "As part of the algorithm for printing a description of the receiver, print the subclass on the file stream, aStream, indenting level times." | subclassNames | aStream crtab: level. aStream nextPutAll: self name. aStream space; print: self instVarNames. self == Class ifTrue: [aStream crtab: level + 1; nextPutAll: '[ ... all the Metaclasses ... ]'. ^self]. subclassNames := self subclasses asSortedCollection:[:c1 :c2| c1 name <= c2 name]. "Print subclasses in alphabetical order" subclassNames do: [:subclass | subclass printSubclassesOn: aStream level: level + 1]! ! ClassDescription removeSelector: #printSubclassesOn:level:! !Trait method! organization: aClassOrg "Install an instance of ClassOrganizer that represents the organization of the messages of the receiver." aClassOrg ifNotNil: [aClassOrg setSubject: self]. self basicOrganization: aClassOrg.! ! ClassDescription removeSelector: #organization:! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [self organization: (ClassOrganizer defaultList: self selectors asArray sort)]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [self basicOrganization setSubject: self]. ^ self basicOrganization.! ! ClassDescription removeSelector: #organization! !Trait method! obsolete "Make the receiver obsolete." self superclass removeSubclass: self. self organization: nil. super obsolete.! ! ClassDescription removeSelector: #obsolete! !Trait method! numberOfMethods "count all methods that are local (not comming from a trait)" | num | num := self localMethods size. ^ self isMeta ifTrue: [ num ] ifFalse: [ num + self class numberOfMethods ] ! ! ClassDescription removeSelector: #numberOfMethods! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self! ! ClassDescription removeSelector: #notifyOfRecategorizedSelector:from:to:! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! ClassDescription removeSelector: #noteRecategorizedSelectors:oldComposition:! !Trait method! noteMethodRemoved: oldMethod SystemAnnouncer uniqueInstance methodRemoved: oldMethod! ! ClassDescription removeSelector: #noteMethodRemoved:! !Trait method! noteMethodChanged: oldMethod to: newMethod SystemAnnouncer uniqueInstance methodChangedFrom: oldMethod to: newMethod ! ! ClassDescription removeSelector: #noteMethodChanged:to:! !Trait method! noteMethodAdded: aMethod SystemAnnouncer uniqueInstance methodAdded: aMethod! ! ClassDescription removeSelector: #noteMethodAdded:! !Trait method! noteChangesFrom: oldMethodDict "create notifications about the changes made to the method dictionary" "additions have already been notified in #addTraitSelector:withMethod:" " deal with removal / updates relative to the old method dictionary" oldMethodDict keysAndValuesDo: [ :selector :oldMethod| self methodDict at: selector ifPresent: [ :currentMethod| currentMethod == oldMethod ifFalse: [ self noteMethodChanged: oldMethod to: currentMethod]] ifAbsent: [ self noteMethodRemoved: oldMethod ]]. ! ! ClassDescription removeSelector: #noteChangesFrom:! !Trait method! newInstanceFrom: oldInstance variable: variable size: instSize map: map "Create a new instance of the receiver based on the given old instance. The supplied map contains a mapping of the old instVar names into the receiver's instVars" | new | variable ifTrue: [new := self basicNew: oldInstance basicSize] ifFalse: [new := self basicNew]. 1 to: instSize do: [:offset | (map at: offset) > 0 ifTrue: [new instVarAt: offset put: (oldInstance instVarAt: (map at: offset))]]. variable ifTrue: [1 to: oldInstance basicSize do: [:offset | new basicAt: offset put: (oldInstance basicAt: offset)]]. ^new! ! ClassDescription removeSelector: #newInstanceFrom:variable:size:map:! !Trait method! linesOfCode "An approximate measure of lines of code. Includes comments, but excludes blank lines." | lines | lines := self localMethods inject: 0 into: [:sum :each | sum + each linesOfCode]. ^ self isMeta ifTrue: [lines] ifFalse: [lines + self class linesOfCode]! ! ClassDescription removeSelector: #linesOfCode! !Trait method! instanceVariablesString "Answer a string of my instance variable names separated by spaces." ^String streamContents: [ :stream | self instVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! ClassDescription removeSelector: #instanceVariablesString! !Trait method! instanceSide ^ self theNonMetaClass! ! ClassDescription removeSelector: #instanceSide! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instVarNamesAndOffsetsDo: aBinaryBlock]. 1 to: self instSize - superInstSize do: [:i| aBinaryBlock value: (self instanceVariables at: i) value: i + superInstSize]! ! ClassDescription removeSelector: #instVarNamesAndOffsetsDo:! !Trait method! instVarNames "Answer an Array of the receiver's instance variable names." self instanceVariables == nil ifTrue: [^#()] ifFalse: [^self instanceVariables]! ! ClassDescription removeSelector: #instVarNames! !Trait method! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass isNil ifTrue: [0] ifFalse: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass isNil ifTrue: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! ClassDescription removeSelector: #instVarNameForIndex:! !Trait method! instVarMappingFrom: oldClass "Return the mapping from instVars of oldClass to new class that is used for converting old instances of oldClass." | oldInstVarNames | oldInstVarNames := oldClass allInstVarNames. ^self allInstVarNames collect: [:instVarName | oldInstVarNames indexOf: instVarName].! ! ClassDescription removeSelector: #instVarMappingFrom:! !Trait method! instVarIndexFor: instVarName ifAbsent: aBlock "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName ifAbsent: [0]]. index = 0 ifTrue: [^self superclass == nil ifTrue: [aBlock value] ifFalse: [self superclass instVarIndexFor: instVarName ifAbsent: aBlock]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! ClassDescription removeSelector: #instVarIndexFor:ifAbsent:! !Trait method! instVarIndexFor: instVarName "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName]. index = 0 ifTrue: [^self superclass == nil ifTrue: [0] ifFalse: [self superclass instVarIndexFor: instVarName]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! ClassDescription removeSelector: #instVarIndexFor:! !Trait method! hasSharedPools "Only a class may have shared pools" ^ false! ! ClassDescription removeSelector: #hasSharedPools! !Trait method! hasInstVarNamed: aString "Return true whether the receiver defines an instance variable named aString." ^ self instVarNames includes: aString! ! ClassDescription removeSelector: #hasInstVarNamed:! !Trait method! forceNewFrom: anArray "Create a new instance of the class and fill its instance variables up with the array." | object max | object := self new. max := self instSize. anArray doWithIndex: [:each :index | index > max ifFalse: [object instVarAt: index put: each]]. ^ object! ! ClassDescription removeSelector: #forceNewFrom:! ClassDescription removeSelector: #criticClass! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! ClassDescription removeSelector: #compileSilently:! !Trait method! commentInventory "Answer a string with a count of the classes with and without comments for all the classes in the package of which this class is a member." "Morph commentInventory" ^ self environment organization commentInventory: (self category copyUpTo: $-), '*'! ! ClassDescription removeSelector: #commentInventory! !Trait method! classesThatImplementAllOf: selectorSet "Return an array of any classes that implement all the messages in selectorSet." | found remaining | found := OrderedCollection new. selectorSet do: [:sel | (self includesSelector: sel) ifTrue: [found add: sel]]. found isEmpty ifTrue: [^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: selectorSet)]] ifFalse: [remaining := selectorSet copyWithoutAll: found. remaining isEmpty ifTrue: [^ Array with: self]. ^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: remaining)]]! ! ClassDescription removeSelector: #classesThatImplementAllOf:! !Trait method! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! ClassDescription removeSelector: #classVersion! !Trait method! classVariablesString "Answer a string of my class variable names separated by spaces." ^String streamContents: [ :stream | self classVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! ClassDescription removeSelector: #classVariablesString! !Trait method! classThatDefinesInstanceVariable: instVarName (self instVarNames notNil and: [self instVarNames includes: instVarName asString]) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesInstanceVariable: instVarName]! ! ClassDescription removeSelector: #classThatDefinesInstanceVariable:! !Trait method! classThatDefinesClassVariable: classVarName "Answer the class that defines the given class variable" (self classPool includesKey: classVarName asSymbol) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesClassVariable: classVarName]! ! ClassDescription removeSelector: #classThatDefinesClassVariable:! !Trait method! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'; cr; cr; nextPutAll: 'Instance Variables'. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! ClassDescription removeSelector: #classCommentBlank! !Trait method! checkForInstVarsOK: instVarString "Return true if instVarString does no include any names used in a subclass" | instVarArray | instVarArray := instVarString subStrings: ' '. self allSubclasses do: [:cl | cl instVarNames do: [:n | (instVarArray includes: n) ifTrue: [self error: n , ' is already used in ' , cl name. ^ false]]]. ^ true! ! ClassDescription removeSelector: #checkForInstVarsOK:! !Trait method! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." "self new authorsgather: Date" | br result selectors | result := Bag new. self addAuthorsTo: result. self class addAuthorsTo: result. ^ result! ! ClassDescription removeSelector: #authors! !Trait method! allSharedPools "Answer an ordered collection of the shared pools the receiver shares, including those defined in the superclasses of the receiver." ^ OrderedCollection new! ! ClassDescription removeSelector: #allSharedPools! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aName = ClassOrganizer allCategory ifTrue: [aClass organization allMethodSelectors] ifFalse: [aClass organization listAtCategoryNamed: aName])]. ^ aColl asSet asArray sort! ! ClassDescription removeSelector: #allMethodsInCategory:! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock combinedClassCategories | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! ClassDescription removeSelector: #allMethodCategoriesIntegratedThrough:! !Trait method! allInstVarNamesEverywhere "Answer the set of inst var names used by the receiver, all superclasses, and all subclasses" | aList | aList := OrderedCollection new. (self allSuperclasses , self withAllSubclasses asOrderedCollection) do: [:cls | aList addAll: cls instVarNames]. ^ aList asSet "BorderedMorph allInstVarNamesEverywhere"! ! ClassDescription removeSelector: #allInstVarNamesEverywhere! !Trait method! addAuthorsTo: result "private method that to store the result in the argument." self methodsDo: [:each | result add: each author ]! ! ClassDescription removeSelector: #addAuthorsTo:! !Trait method! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" newProtocol = oldProtocol ifFalse: [ | oldPackage newPackage | "Check for repackage" newPackage := RPackage organizer packageForProtocol: newProtocol inClass: self. oldPackage := RPackage organizer packageForProtocol: oldProtocol inClass: self. (newPackage = oldPackage) ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ]. "Announce recategorization" SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self ]. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor.]. ! ! ClassDescription removeSelector: #addAndClassifySelector:withMethod:inProtocol:notifying:! !Trait method! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! Behavior removeSelector: #zapAllMethods! !Trait method! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! Behavior removeSelector: #withAllSuperclassesDo:! !Trait method! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! Behavior removeSelector: #withAllSuperAndSubclassesDo:! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." aBlock value: self. self allSubclassesDo: aBlock! ! Behavior removeSelector: #withAllSubclassesDo:! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! Behavior removeSelector: #withAllSubclasses! !Trait method! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! Behavior removeSelector: #withAllSubAndSuperclassesDo:! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! Behavior removeSelector: #whichSuperclassSatisfies:! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! Behavior removeSelector: #whichSelectorsStoreInto:! !Trait method! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! Behavior removeSelector: #whichSelectorsRead:! !Trait method! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! Behavior removeSelector: #whichSelectorsAssign:! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! Behavior removeSelector: #whichSelectorsAccess:! !Trait method! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! Behavior removeSelector: #whichClassIncludesSelector:! !Trait method! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! Behavior removeSelector: #whichClassDefinesInstVar:! !Trait method! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! Behavior removeSelector: #whichClassDefinesClassVar:! !Trait method! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! Behavior removeSelector: #variablesAndOffsetsDo:! !Trait method! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! Behavior removeSelector: #unreferencedInstanceVariables! !Trait method! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! Behavior removeSelector: #ultimateSourceCodeAt:ifAbsent:! !Trait method! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! Behavior removeSelector: #typeOfClass! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! Behavior removeSelector: #traitsProvidingSelector:! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((method refersToLiteral: literal) or: [ specialFlag and: [ method scanFor: specialByte ] ]) ifTrue: [ selectors add: sel ] ]. ^ selectors! ! Behavior removeSelector: #thoroughWhichSelectorsReferTo:special:byte:! !Trait method! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! Behavior removeSelector: #supermostPrecodeCommentFor:! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! Behavior removeSelector: #superclass:methodDictionary:format:! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! Behavior removeSelector: #subclassesDo:! !Trait method! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self class allInstances select: [:each | each superclass = self ]! ! Behavior removeSelector: #subclasses! !Trait method! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! Behavior removeSelector: #subclassInstVarNames! !Trait method! subclassDefinerClass "Answer an evaluator class appropriate for evaluating definitions of new subclasses of this class." ^self compilerClass! ! Behavior removeSelector: #subclassDefinerClass! !Trait method! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! Behavior removeSelector: #startUp:! !Trait method! startUp "This message is sent to registered classes when the system is coming up." ! ! Behavior removeSelector: #startUp! !Trait method! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method methodNode | method := self compiledMethodAt: selector. methodNode := self compiler compile: (self sourceCodeAt: selector) in: self notifying: nil ifFail: [^ false]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!!!']. ^ (methodNode generate: method trailer) = method! ! Behavior removeSelector: #sourceMatchesBytecodeAt:! !Trait method! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! Behavior removeSelector: #someInstance! !Trait method! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! Behavior removeSelector: #shutDown:! !Trait method! shutDown "This message is sent on system shutdown to registered classes" ! ! Behavior removeSelector: #shutDown! !Trait method! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! Behavior removeSelector: #shouldNotBeRedefined! !Trait method! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! Behavior removeSelector: #sharedPools! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! Behavior removeSelector: #setTraitComposition:! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! Behavior removeSelector: #selectorsWithArgs:! !Trait method! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! Behavior removeSelector: #selectSuperclasses:! !Trait method! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! Behavior removeSelector: #selectSubclasses:! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! Behavior removeSelector: #removeTraitSelector:! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! Behavior removeSelector: #removeSelectorSilently:! Behavior removeSelector: #realClass! !Trait method! protocols ^ self organization categories copy! ! Behavior removeSelector: #protocols! !Trait method! printWithClosureAnalysisOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printWithClosureAnalysisOn: aStream! ! Behavior removeSelector: #printWithClosureAnalysisOn:! !Trait method! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! Behavior removeSelector: #printOn:! !Trait method! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! Behavior removeSelector: #printHierarchy! !Trait method! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! Behavior removeSelector: #precodeCommentOrInheritedCommentFor:! !Trait method! numberOfInstanceVariables ^ self instVarNames size ! ! Behavior removeSelector: #numberOfInstanceVariables! !Trait method! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! Behavior removeSelector: #nonObsoleteClass! !Trait method! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! Behavior removeSelector: #nextQuotePosIn:startingFrom:! !Trait method! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! Behavior removeSelector: #new:! !Trait method! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! Behavior removeSelector: #new! !Trait method! name "Answer a String that is the name of the receiver." ^'a subclass of ', self superclass name.! ! Behavior removeSelector: #name! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! Behavior removeSelector: #methodsInProtocol:! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! Behavior removeSelector: #methodNamed:! !Trait method! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! Behavior removeSelector: #lookupSelector:! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! Behavior removeSelector: #localSelectors! !Trait method! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! Behavior removeSelector: #kindOfSubclass! !Trait method! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! Behavior removeSelector: #isWords! !Trait method! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! Behavior removeSelector: #isWeak! !Trait method! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! Behavior removeSelector: #isVariable! !Trait method! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! Behavior removeSelector: #isPointers! !Trait method! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! Behavior removeSelector: #isObsolete! !Trait method! isMeta ^ false! ! Behavior removeSelector: #isMeta! !Trait method! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! Behavior removeSelector: #isFixed! !Trait method! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! Behavior removeSelector: #isComposedBy:! !Trait method! isCompact ^self indexIfCompact ~= 0! ! Behavior removeSelector: #isCompact! !Trait method! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! Behavior removeSelector: #isBytes! !Trait method! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! Behavior removeSelector: #isBits! !Trait method! isBehavior "Return true if the receiver is a behavior" ^true! ! Behavior removeSelector: #isBehavior! Behavior removeSelector: #isAnonymous! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! Behavior removeSelector: #isAliasSelector:! !Trait method! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! Behavior removeSelector: #instancesSizeInMemory! !Trait method! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! Behavior removeSelector: #instanceCount! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! Behavior removeSelector: #instVarNamesAndOffsetsDo:! !Trait method! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! Behavior removeSelector: #instVarNames! !Trait method! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! Behavior removeSelector: #instSpec! !Trait method! instSize "Answer the number of named instance variables (as opposed to indexed variables) of the receiver." self flag: #instSizeChange. "Smalltalk browseAllCallsOn: #instSizeChange" " NOTE: This code supports the backward-compatible extension to 8 bits of instSize. When we revise the image format, it should become... ^ ((format bitShift: -1) bitAnd: 16rFF) - 1 Note also that every other method in this category will require 2 bits more of right shift after the change. " ^ ((self format bitShift: -10) bitAnd: 16rC0) + ((self format bitShift: -1) bitAnd: 16r3F) - 1! ! Behavior removeSelector: #instSize! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format! ! Behavior removeSelector: #initialize! !Trait method! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! Behavior removeSelector: #inheritsFrom:! !Trait method! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! Behavior removeSelector: #indexIfCompact! !Trait method! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! Behavior removeSelector: #includesSharedPoolNamed:! !Trait method! includesBehavior: aClass ^self == aClass or:[self inheritsFrom: aClass]! ! Behavior removeSelector: #includesBehavior:! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! Behavior removeSelector: #hasAbstractMethods! !Trait method! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! Behavior removeSelector: #flushCache! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! Behavior removeSelector: #flattenDownAllTraits! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! Behavior removeSelector: #flattenDown:! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! Behavior removeSelector: #environment! !Trait method! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! Behavior removeSelector: #copiesMethodsFromSuperclass! !Trait method! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! Behavior removeSelector: #copiesFromSuperclass:! !Trait method! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! Behavior removeSelector: #copiedMethodsFromSuperclass! !Trait method! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! Behavior removeSelector: #copiedFromSuperclass:! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! Behavior removeSelector: #compileAllFrom:! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! Behavior removeSelector: #compile:classified:notifying:trailer:ifFail:! !Trait method! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! Behavior removeSelector: #commentsIn:! !Trait method! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! Behavior removeSelector: #commentsAt:! !Trait method! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! Behavior removeSelector: #cleanUp:! !Trait method! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! Behavior removeSelector: #cleanUp! !Trait method! classesComposedWithMe ^{self}! ! Behavior removeSelector: #classesComposedWithMe! !Trait method! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! Behavior removeSelector: #classVarNames! !Trait method! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! Behavior removeSelector: #classDepth! !Trait method! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! Behavior removeSelector: #classBindingOf:! !Trait method! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! Behavior removeSelector: #classAndMethodFor:do:ifAbsent:! !Trait method! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! Behavior removeSelector: #checkCanBeUncompact! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument. The selector can be in the method dictionary of the receiver's class or any of its superclasses." (self includesSelector: selector) ifTrue: [^true]. self superclass == nil ifTrue: [^false]. ^self superclass canUnderstand: selector! ! Behavior removeSelector: #canUnderstand:! !Trait method! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! Behavior removeSelector: #canPerform:! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! Behavior removeSelector: #bindingOf:! !Trait method! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! Behavior removeSelector: #becomeUncompact! !Trait method! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! Behavior removeSelector: #becomeCompactSimplyAt:! !Trait method! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! Behavior removeSelector: #becomeCompact! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethod flushCache. selector flushCache! ! Behavior removeSelector: #basicRemoveSelector:! !Trait method! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! Behavior removeSelector: #basicNew:! !Trait method! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! Behavior removeSelector: #basicNew! !Trait method! basicLocalSelectors "Direct accessor for the instance variable localSelectors. Because of hardcoded ivar indexes of Behavior and Class in the VM, Class and Metaclass declare the needed ivar and override this method as an accessor. By returning nil instead of declaring this method as a subclass responsibility, Behavior can be instantiated for creating anonymous classes." ^nil! ! Behavior removeSelector: #basicLocalSelectors! !Trait method! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! Behavior removeSelector: #basicAddSelector:withMethod:! !Trait method! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! Behavior removeSelector: #allowsSubInstVars! !Trait method! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! Behavior removeSelector: #allUnreferencedInstanceVariables! !Trait method! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! Behavior removeSelector: #allSuperclassesIncluding:! !Trait method! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! Behavior removeSelector: #allSuperclassesDo:! !Trait method! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! Behavior removeSelector: #allSuperclasses! !Trait method! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! Behavior removeSelector: #allSubclassesWithLevelDo:startingLevel:! !Trait method! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! Behavior removeSelector: #allSubclassesDo:! !Trait method! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! Behavior removeSelector: #allSubclasses! !Trait method! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! Behavior removeSelector: #allSubInstancesDo:! !Trait method! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! Behavior removeSelector: #allSubInstances! !Trait method! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! Behavior removeSelector: #allSharedPools! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! Behavior removeSelector: #allSelectorsWithout:! !Trait method! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! Behavior removeSelector: #allSelectorsBelow:! !Trait method! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! Behavior removeSelector: #allSelectorsAboveUntil:! !Trait method! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! Behavior removeSelector: #allSelectorsAbove! !Trait method! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! Behavior removeSelector: #allSelectors! !Trait method! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! Behavior removeSelector: #allMethods! !Trait method! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! Behavior removeSelector: #allLocalCallsOn:! !Trait method! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! Behavior removeSelector: #allInstancesDo:! !Trait method! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! Behavior removeSelector: #allInstances! !Trait method! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! Behavior removeSelector: #allInstVarNames! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! Behavior removeSelector: #allClassVarNames! !Trait method! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! Behavior removeSelector: #adoptInstance:! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! Behavior removeSelector: #addTraitSelector:withMethod:! "Compiler"! "Kernel"! "Manifest-Core"! "NativeBoost-Core"! "Nautilus"! "RPackage-Core"! "Ring-Core-Kernel"! ----End fileIn----! ----QUIT----an Array(21 June 2013 5:40:02 pm) Pharo.image priorSource: 7660137! ----STARTUP----an Array(21 June 2013 5:48:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 5:48:21 pm) Pharo-30213.image priorSource: 7779111! ----STARTUP----an Array(21 June 2013 5:58:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 17:55' prior: 41214872! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 5... and there are still more, yeah my life is pure happiness :)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 17:55'! script313 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.488.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1490.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.137.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.477.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.230.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.104.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.557.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.513.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 17:55'! update30214 "self new update30214" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 5... and there are still more, yeah my life is pure happiness :)'. self loadTogether: self script313 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Class methodsFor: 'accessing' stamp: 'ST 6/18/2013 21:48' prior: 19051293! classPool "Answer the dictionary of class variables." classPool == nil ifTrue: [classPool := Dictionary new]. ^classPool.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'ST 6/21/2013 10:16'! classSide ^self theMetaClass! ! !TClassDescription methodsFor: 'printing' stamp: 'ST 6/18/2013 17:09'! printWithClosureAnalysisOn: aStream aStream nextPutAll: self name! ! !Behavior methodsFor: 'obsolete subclasses' stamp: 'ST 6/21/2013 10:12'! basicObsoleteSubclasses ^ObsoleteSubclasses.! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 6/21/2013 10:13' prior: 40898663! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 6/21/2013 10:13'! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 6/21/2013 10:14' prior: 40943933! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'ST 6/21/2013 10:14' prior: 40944342! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! !SourceFileArrayTest methodsFor: 'testing' stamp: 'ST 6/18/2013 21:48' prior: 33567051! testProtocol "Test that we can access protocol correctly" "self debug: #testProtocol" | okCm notOkCm | okCm := Point>>#dist: . self assert: (SourceFiles sourcedDataAt: okCm sourcePointer) = 'Point methodsFor: ''point functions'' stamp: ''lr 7/4/2009 10:42'''. self assert: (SourceFiles protocolAt: okCm sourcePointer) = 'point functions'. notOkCm := Behavior >> #superclass. self assert: (SourceFiles protocolAt: notOkCm sourcePointer) = 'accessing class hierarchy'. ! ! !Trait method! printWithClosureAnalysisOn: aStream aStream nextPutAll: self name! ! "Kernel"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----an Array(21 June 2013 5:58:53 pm) Pharo.image priorSource: 7779309! ----STARTUP----an Array(21 June 2013 6:07:28 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 6:07:28 pm) Pharo-30214.image priorSource: 7792762! ----STARTUP----an Array(21 June 2013 6:17:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/21/2013 18:13' prior: 41334044! commentForCurrentUpdate ^ '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 6, last?)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/21/2013 18:14'! script314 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.202.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.489.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1491.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.15.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.478.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.105.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.557.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.514.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/21/2013 18:14'! update30215 "self new update30215" self withUpdateLog: '10976 kernel methods refactor https://pharo.fogbugz.com/f/cases/10976/kernel-methods-refactor (pass 6, last?)'. self loadTogether: self script314 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'ST 6/21/2013 11:47' prior: 40839667! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" newProtocol = oldProtocol ifFalse: [ | oldPackage newPackage | "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. (newPackage = oldPackage) ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. "Announce recategorization" SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self ]. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor.]. ! ! !Behavior methodsFor: '*Ring-Core-Kernel' stamp: 'ST 6/21/2013 12:56' prior: 41304144! methodNamed: aSelector ^ self methodDict at: aSelector! ! !Behavior methodsFor: '*Ring-Core-Kernel' stamp: 'ST 6/21/2013 12:56' prior: 41303948! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !Behavior methodsFor: '*Ring-Core-Kernel' stamp: 'ST 6/21/2013 12:56' prior: 41300619! protocols ^ self organization categories copy! ! !Behavior methodsFor: '*Nautilus' stamp: 'ST 6/21/2013 12:55'! realClass ^ self! ! !ClassDescription methodsFor: '*rpackage-core' stamp: 'ST 6/21/2013 12:53' prior: 41278244! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !ClassDescription methodsFor: '*Manifest-Core' stamp: 'ST 6/21/2013 12:52'! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: '' prior: 40826898! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^self superclass bindingOf: varName! ! !TBehavior methodsFor: 'testing' stamp: 'ST 6/21/2013 12:49'! isAnonymous ^true! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! TClassDescription removeSelector: #fileOutMethod:! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! TClassDescription removeSelector: #compileSilently:! !Trait method! classSide ^self theMetaClass! ! ClassDescription removeSelector: #classSide! !Trait method! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" newProtocol = oldProtocol ifFalse: [ | oldPackage newPackage | "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. (newPackage = oldPackage) ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. "Announce recategorization" SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self ]. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor.]. ! ! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^self superclass bindingOf: varName! ! !Trait method! isAnonymous ^true! ! "Compiler"! "Kernel"! "Manifest-Core"! "Nautilus"! "RPackage-Core"! "Ring-Core-Kernel"! "Traits"! ----End fileIn----! ----QUIT----an Array(21 June 2013 6:17:54 pm) Pharo.image priorSource: 7792960! ----STARTUP----an Array(21 June 2013 6:26:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 June 2013 6:26:11 pm) Pharo-30215.image priorSource: 7811849! ----STARTUP----an Array(23 June 2013 5:11:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/23/2013 17:08' prior: 41347695! commentForCurrentUpdate ^ '10995 remove #printWithClosureAnalysisOn: https://pharo.fogbugz.com/f/cases/10995 10985 StepList full of useless morphs https://pharo.fogbugz.com/f/cases/10985 10892 flatCollect added to pharo https://pharo.fogbugz.com/f/cases/10892 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/23/2013 17:08'! script315 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.93.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.491.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-StephaneDucasse.99.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1493.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.17.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.478.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.842.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.105.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-StephaneDucasse.97.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.16.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.557.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.516.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/23/2013 17:08'! update30216 "self new update30216" self withUpdateLog: '10995 remove #printWithClosureAnalysisOn: https://pharo.fogbugz.com/f/cases/10995 10985 StepList full of useless morphs https://pharo.fogbugz.com/f/cases/10985 10892 flatCollect added to pharo https://pharo.fogbugz.com/f/cases/10892 '. self loadTogether: self script315 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'BenjaminVanRyseghem 6/21/2013 17:57' prior: 29195638! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. self isWorldMorph ifTrue: ["Add the given morph to this world and start stepping it if it wants to be." self addMorphFront: aMorph. (aMorph fullBounds intersects: self viewBox) ifFalse: [Beeper beep. aMorph position: self bounds center]] ifFalse: [super acceptDroppingMorph: aMorph event: evt]. aMorph submorphsDo: [:m | (m isKindOf: HaloMorph) ifTrue: [m delete]]. self bringTopmostsToFront. ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'BenjaminVanRyseghem 6/21/2013 17:53' prior: 26665803! justDroppedInto: aMorph event: anEvent "This message is sent to a dropped morph after it has been dropped on -- and been accepted by -- a drop-sensitive morph" | aWindow | (self formerOwner notNil and: [self formerOwner ~~ aMorph]) ifTrue: [self removeHalo]. self formerOwner: nil. self formerPosition: nil. (aWindow := aMorph ownerThatIsA: SystemWindow) ifNotNil: [aWindow isActive ifFalse: [aWindow activate]]. "An object launched by certain parts-launcher mechanisms should end up fully visible..." (self hasProperty: #beFullyVisibleAfterDrop) ifTrue: [aMorph == ActiveWorld ifTrue: [self goHome]. self removeProperty: #beFullyVisibleAfterDrop]. ! ! !Collection methodsFor: 'enumerating' stamp: 'ST 6/23/2013 11:35'! flatCollect: aBlock ^ Array streamContents: [:stream | self do: [:ea | stream nextPutAll: (aBlock value: ea)]]! ! !Collection methodsFor: 'enumerating' stamp: 'ST 6/23/2013 11:33' prior: 19529709! gather: aBlock "This method is kept for compatibility reasons, use flatCollect instead." ^ self flatCollect: aBlock.! ! Object removeSelector: #printWithClosureAnalysisOn:! TempVariableNode removeSelector: #printWithClosureAnalysisOn:indent:! TempVariableNode removeSelector: #printDefinitionForClosureAnalysisOn:! SelectorNode removeSelector: #printWithClosureAnalysisOn:indent:! VariableNode removeSelector: #printWithClosureAnalysisOn:indent:! AssignmentNode removeSelector: #printWithClosureAnalysisOn:indent:precedence:! AssignmentNode removeSelector: #printWithClosureAnalysisOn:indent:! MethodNode removeSelector: #printWithClosureAnalysisOn:! RemoteTempVectorNode removeSelector: #printDefinitionForClosureAnalysisOn:! TBehavior removeSelector: #printWithClosureAnalysisOn:! BraceNode removeSelector: #printWithClosureAnalysisOn:indent:! LiteralNode removeSelector: #printWithClosureAnalysisOn:indent:! BlockNode removeSelector: #printWithClosureAnalysisTemporariesOn:indent:! BlockNode removeSelector: #printWithClosureAnalysisStatementsOn:indent:! BlockNode removeSelector: #printWithClosureAnalysisOn:indent:! BlockNode removeSelector: #printWithClosureAnalysisArgumentsOn:indent:! TClassDescription removeSelector: #printWithClosureAnalysisOn:! CascadeNode removeSelector: #printWithClosureAnalysisOn:indent:precedence:! CascadeNode removeSelector: #printWithClosureAnalysisOn:indent:! MessageNode removeSelector: #test! MessageNode removeSelector: #printWithClosureAnalysisWhileOn:indent:! MessageNode removeSelector: #printWithClosureAnalysisToDoOn:indent:! MessageNode removeSelector: #printWithClosureAnalysisReceiver:on:indent:! MessageNode removeSelector: #printWithClosureAnalysisParenReceiver:on:indent:! MessageNode removeSelector: #printWithClosureAnalysisOn:indent:precedence:! MessageNode removeSelector: #printWithClosureAnalysisOn:indent:! MessageNode removeSelector: #printWithClosureAnalysisKeywords:arguments:on:indent:! MessageNode removeSelector: #printWithClosureAnalysisIfOn:indent:! MessageNode removeSelector: #printWithClosureAnalysisIfNilNotNil:indent:! MessageNode removeSelector: #printWithClosureAnalysisIfNil:indent:! MessageNode removeSelector: #printWithClosureAnalysisCaseOn:indent:! ParseNode removeSelector: #printWithClosureAnalysisOn:indent:precedence:! ParseNode removeSelector: #printWithClosureAnalysisOn:indent:! ParseNode removeSelector: #printWithClosureAnalysisOn:! ReturnNode removeSelector: #printWithClosureAnalysisOn:indent:! "Collections-Abstract"! "Compiler"! "Kernel"! "Morphic-Base"! "Traits"! ----End fileIn----! ----QUIT----an Array(23 June 2013 5:11:55 pm) Pharo.image priorSource: 7812047! ----STARTUP----an Array(23 June 2013 5:20:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 June 2013 5:20:14 pm) Pharo-30216.image priorSource: 7827381! ----STARTUP----an Array(24 June 2013 10:38:43 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/24/2013 10:35' prior: 41366778! commentForCurrentUpdate ^ '10972 Tabs example broken https://pharo.fogbugz.com/f/cases/10972 10996 Same category for = messages https://pharo.fogbugz.com/f/cases/10996 10997 Some typos in StartupPreferences + updating comments https://pharo.fogbugz.com/f/cases/10997 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/24/2013 10:36'! script316 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.491.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1493.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.816.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.234.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.18.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.478.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.844.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.105.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.199.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.557.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.516.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/24/2013 10:36'! update30217 "self new update30217" self withUpdateLog: '10972 Tabs example broken https://pharo.fogbugz.com/f/cases/10972 10996 Same category for = messages https://pharo.fogbugz.com/f/cases/10996 10997 Some typos in StartupPreferences + updating comments https://pharo.fogbugz.com/f/cases/10997 '. self loadTogether: self script316 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PreferencesHandler commentStamp: '' prior: 29946738! I manage the links of the chain of responsibilites to retrieve the good preference file.! !StartupLoader commentStamp: '' prior: 50888442! StartupLoader searches for and executes .st files from certain locations such as Library/Preferences/pharo on Mac OS X. StartupLoader looks within such locations for a 'pharo' folder. This contains the startup scripts common to all versions of Pharo, and also optionally a folder per Pharo version holding startup scripts suitable for that version only. So a typical directory layout might be... .../some/folders/pharo/Content/Resources/pharo.image. .../some/folders/pharo/Content/Resources/startup.st .../some/folders/.config/pharo/author.st .../some/folders/.config/pharo/useSharedCache.st .../some/folders/.config/pharo/1.4/mystartupFor14only.st .../some/folders/.config/pharo/2.0/mystartupFor20only.st (**Note however that '.config' is an invalid filename on Windows, so '..config' is used instead) To know the real values for you... Print the result of "StartupLoader preferencesGeneralFolder" which holds the startup scripts common to all versions of Pharo. Print the result of "StartupLoader preferencesVersionFolder" which holds the startup scripts specific to the version of the current image. ----------- StartupLoader example will define a script sample startup.st in your unix root on unix Its contents is StartupLoader default executeAtomicItems: { StartupAtomicItem name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' isSingleton: true. StartupAtomicItem name: 'Open Workspace' code: 'Workspace openContents: ''I should be displayed each time'''. } For a more complete example, see StartupLoader class>>#example2! !TaskbarTask methodsFor: 'comparing' stamp: 'gvc 7/24/2007 12:18' prior: 52289317! = aTaskbarTask "Answer whether equal." ^self species = aTaskbarTask species and: [self morph == aTaskbarTask morph and: [self state == aTaskbarTask state and: [self icon = aTaskbarTask icon and: [self label = aTaskbarTask label]]]]! ! !TaskbarTask methodsFor: 'activation' stamp: 'gvc 4/23/2007 14:51' prior: 52289641! activate "Activate the task." (self morph respondsTo: #restoreAndActivate) ifTrue: [self morph restoreAndActivate]! ! !TaskbarTask methodsFor: 'user-interface' stamp: 'gvc 4/20/2007 11:06' prior: 52289843! buttonClickedForTasklist: aTasklist "Notify the tasklist." aTasklist taskClicked: self! ! !TaskbarTask methodsFor: 'comparing' stamp: 'gvc 12/12/2007 12:01' prior: 52290016! hash "Hash is implemented because #= is implemented." ^self morph hash bitXor: (self state hash bitXor: (self icon hash bitXor: self label hash))! ! !TaskbarTask methodsFor: 'testing' stamp: 'gvc 4/20/2007 10:49' prior: 52290253! isActive "Answer whether the task is active." ^self state == #active! ! !TaskbarTask methodsFor: 'testing' stamp: 'gvc 4/20/2007 10:25' prior: 52290406! isMinimized "Answer whether the task is minimized." ^self state == #minimized! ! !TaskbarTask methodsFor: 'user-interface' stamp: 'gvc 4/20/2007 10:21' prior: 52290568! taskbarButtonFor: aTaskBar "Answer a button for the task." ^self morph taskbarButtonFor: aTaskBar! ! !TaskbarTask methodsFor: 'user-interface' stamp: 'FernandoOlivero 4/12/2011 10:34' prior: 52290763! tasklistButtonFor: aTasklist "Answer a button for the task." ^self theme newTasklistButtonIn: aTasklist for: self! ! !TabPanelBorder methodsFor: 'drawing' stamp: 'GaryChambers 6/8/2011 12:02' prior: 52222437! frameRectangle: aRectangle on: aCanvas "Draw the border taking the currently selected tab into account. Only works for top-positioned tabs for the moment." |w h r tab| w := self width. w isPoint ifTrue: [h := w y. w := w x] ifFalse:[h := w]. r := aRectangle topLeft extent: w@aRectangle height. aCanvas fillRectangle: r color: self color. "left" r := aRectangle topRight - (w@0) extent: w@aRectangle height. aCanvas fillRectangle: r color: self color. "right" r := aRectangle bottomLeft + (w@h negated) extent: aRectangle width - w - w@h. aCanvas fillRectangle: r color: self color. "bottom" tab := self selectedTab. (tab isNil or: [tab owner isNil]) ifTrue: [ r := aRectangle topLeft + (w@0) corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. ^self]. "top" r := aRectangle topLeft + (w@0) corner: tab bounds left + w@(aRectangle top + h). aCanvas fillRectangle: r color: self color. "top 1" r := tab bounds left + w@ aRectangle top corner: tab bounds right - w@(aRectangle top + h). aCanvas fillRectangle: r color: tab paneColor. "top 2" r := tab bounds right - w@ aRectangle top corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. "top 3"! ! !TabPanelBorder methodsFor: 'accessing' stamp: 'gvc 1/7/2008 14:27' prior: 52223765! selectedTab "Answer the currently selected tab." ^(self tabSelector ifNil: [^nil]) selectedTab! ! !TabPanelBorder methodsFor: 'accessing' stamp: 'gvc 1/7/2008 14:16' prior: 52223947! style "Answer #tabbed." ^#tabbed! ! !CompositeBorder methodsFor: 'comparing' stamp: 'gvc 3/29/2007 17:32' prior: 20043776! = aBorderStyle "Check the sub-borders too" ^super = aBorderStyle and: [ self borders = aBorderStyle borders]! ! !CompositeBorder methodsFor: 'accessing' stamp: 'gvc 3/12/2007 12:13' prior: 20043976! colorsAtCorners "Return the colors of the first border." ^self borders first colorsAtCorners! ! !CompositeBorder methodsFor: 'drawing' stamp: 'gvc 3/14/2007 10:47' prior: 20044158! frameRectangle: aRectangle on: aCanvas "Draw each border in turn." |r| r := aRectangle. self borders do: [:b | b frameRectangle: r on: aCanvas. r := r insetBy: b width]! ! !CompositeBorder methodsFor: 'comparing' stamp: 'gvc 5/18/2007 13:29' prior: 20044422! hash "Since #= is overridden." ^super hash bitXor: self borders hash! ! !CompositeBorder methodsFor: 'testing' stamp: 'gvc 3/14/2007 10:32' prior: 20044580! isComposite "Answer true." ^true! ! !Color methodsFor: 'comparing' stamp: 'di 1/6/1999 20:26' prior: 19601305! = aColor "Return true if the receiver equals the given color. This method handles TranslucentColors, too." aColor isColor ifFalse: [^ false]. ^ aColor privateRGB = rgb and: [aColor privateAlpha = self privateAlpha] ! ! !Color methodsFor: 'comparing' stamp: '' prior: 19601855! hash ^ rgb! ! !BoundedGradientFillStyle methodsFor: 'comparing' stamp: 'gvc 3/13/2009 12:39' prior: 18397711! = aGradientFillStyle "Answer whether equal." ^super = aGradientFillStyle and: [self extent = aGradientFillStyle extent]! ! !BoundedGradientFillStyle methodsFor: '*Polymorph-Widgets' stamp: 'IgorStasenko 12/22/2012 03:41' prior: 18397940! fillRectangle: aRectangle on: aCanvas "Fill the given rectangle on the given canvas with the receiver." self extent ifNil: [^super fillRectangle: aRectangle on: aCanvas]. aCanvas fillRectangle: ((self origin extent: self extent) intersect: aRectangle ifNone: [^ self ]) basicFillStyle: self! ! !BoundedGradientFillStyle methodsFor: 'comparing' stamp: 'gvc 3/13/2009 12:39' prior: 18398330! hash "Hash is implemented because #= is implemented." ^super hash bitXor: self extent hash! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/9/2009 13:58' prior: 32284504! frameRectangle0: aRectangle on: aCanvas "Draw the border for a corner radius of 0." aCanvas frameAndFillRectangle: aRectangle fillColor: Color transparent borderWidth: self width borderColor: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/21/2008 14:20' prior: 32284801! frameRectangle1: aRectangle on: aCanvas "Draw the border for a corner radius of 1." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (1@0) to: r topRight - (1@0) width: self width color: self color; line: r topRight + (0@1) to: r bottomRight - (0@1) width: self width color: self color; line: r bottomRight - (1@0) to: r bottomLeft + (1@0) width: self width color: self color; line: r bottomLeft - (0@1) to: r topLeft + (0@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/21/2008 14:26' prior: 32285444! frameRectangle2: aRectangle on: aCanvas "Draw the border for a corner radius of 2." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (2@0) to: r topRight - (2@0) width: self width color: self color; line: r topRight + (-1@1) to: r topRight + (-1@1) width: self width color: self color; line: r topRight + (0@2) to: r bottomRight - (0@2) width: self width color: self color; line: r bottomRight - (1@1) to: r bottomRight - (1@1) width: self width color: self color; line: r bottomRight - (2@0) to: r bottomLeft + (2@0) width: self width color: self color; line: r bottomLeft - (-1@1) to: r bottomLeft - (-1@1) width: self width color: self color; line: r bottomLeft - (0@2) to: r topLeft + (0@2) width: self width color: self color; line: r topLeft + (1@1) to: r topLeft + (1@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/21/2008 14:37' prior: 32286447! frameRectangle3: aRectangle on: aCanvas "Draw the border for a corner radius of 3." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (3@0) to: r topRight - (3@0) width: self width color: self color; line: r topRight + (-2@1) to: r topRight + (-1@1) width: self width color: self color; line: r topRight + (-1@1) to: r topRight + (-1@2) width: self width color: self color; line: r topRight + (0@3) to: r bottomRight - (0@3) width: self width color: self color; line: r bottomRight - (1@2) to: r bottomRight - (1@1) width: self width color: self color; line: r bottomRight - (1@1) to: r bottomRight - (2@1) width: self width color: self color; line: r bottomRight - (3@0) to: r bottomLeft + (3@0) width: self width color: self color; line: r bottomLeft - (-2@1) to: r bottomLeft - (-1@1) width: self width color: self color; line: r bottomLeft - (-1@1) to: r bottomLeft - (-1@2) width: self width color: self color; line: r bottomLeft - (0@3) to: r topLeft + (0@3) width: self width color: self color; line: r topLeft + (1@2) to: r topLeft + (1@1) width: self width color: self color; line: r topLeft + (1@1) to: r topLeft + (2@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/21/2008 14:41' prior: 32287810! frameRectangle4: aRectangle on: aCanvas "Draw the border for a corner radius of 4." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (4@0) to: r topRight - (4@0) width: self width color: self color; line: r topRight + (-3@1) to: r topRight + (-1@2) width: self width color: self color; line: r topRight + (-1@2) to: r topRight + (-1@3) width: self width color: self color; line: r topRight + (0@4) to: r bottomRight - (0@4) width: self width color: self color; line: r bottomRight - (1@3) to: r bottomRight - (1@2) width: self width color: self color; line: r bottomRight - (2@1) to: r bottomRight - (3@1) width: self width color: self color; line: r bottomRight - (4@0) to: r bottomLeft + (4@0) width: self width color: self color; line: r bottomLeft - (-3@1) to: r bottomLeft - (-2@1) width: self width color: self color; line: r bottomLeft - (-1@2) to: r bottomLeft - (-1@3) width: self width color: self color; line: r bottomLeft - (0@4) to: r topLeft + (0@4) width: self width color: self color; line: r topLeft + (1@3) to: r topLeft + (1@2) width: self width color: self color; line: r topLeft + (2@1) to: r topLeft + (3@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 1/9/2009 16:50' prior: 32289172! frameRectangle5: aRectangle on: aCanvas "Draw the border for a corner radius of 5." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (5@0) to: r topRight - (5@0) width: self width color: self color; line: r topRight + (-4@1) to: r topRight + (-2@2) width: self width color: self color; line: r topRight + (-1@3) to: r topRight + (-1@4) width: self width color: self color; line: r topRight + (0@5) to: r bottomRight - (0@5) width: self width color: self color; line: r bottomRight - (1@4) to: r bottomRight - (2@2) width: self width color: self color; line: r bottomRight - (3@1) to: r bottomRight - (4@1) width: self width color: self color; line: r bottomRight - (5@0) to: r bottomLeft + (5@0) width: self width color: self color; line: r bottomLeft - (-4@1) to: r bottomLeft - (-3@1) width: self width color: self color; line: r bottomLeft - (-2@2) to: r bottomLeft - (-1@4) width: self width color: self color; line: r bottomLeft - (0@5) to: r topLeft + (0@5) width: self width color: self color; line: r topLeft + (1@4) to: r topLeft + (1@3) width: self width color: self color; line: r topLeft + (2@2) to: r topLeft + (4@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/9/2009 13:48' prior: 32290534! frameRectangle6: aRectangle on: aCanvas "Draw the border for a corner radius of 6." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (6@0) to: r topRight - (6@0) width: self width color: self color; line: r topRight + (-5@1) to: r topRight + (-3@2) width: self width color: self color; line: r topRight + (-2@3) to: r topRight + (-2@3) width: self width color: self color; line: r topRight + (-1@4) to: r topRight + (-1@5) width: self width color: self color; line: r topRight + (0@6) to: r bottomRight - (0@6) width: self width color: self color; line: r bottomRight - (1@5) to: r bottomRight - (2@3) width: self width color: self color; line: r bottomRight - (3@2) to: r bottomRight - (4@1) width: self width color: self color; line: r bottomRight - (5@1) to: r bottomRight - (6@0) width: self width color: self color; line: r bottomRight - (7@0) to: r bottomLeft + (6@0) width: self width color: self color; line: r bottomLeft - (-5@1) to: r bottomLeft - (-4@1) width: self width color: self color; line: r bottomLeft - (-3@2) to: r bottomLeft - (-3@2) width: self width color: self color; line: r bottomLeft - (-2@3) to: r bottomLeft - (-1@5) width: self width color: self color; line: r bottomLeft - (0@6) to: r topLeft + (0@6) width: self width color: self color; line: r topLeft + (1@5) to: r topLeft + (1@4) width: self width color: self color; line: r topLeft + (2@3) to: r topLeft + (2@3) width: self width color: self color; line: r topLeft + (3@2) to: r topLeft + (5@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 1/9/2009 17:06' prior: 32292256! frameRectangle7: aRectangle on: aCanvas "Draw the border for a corner radius of 7." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (7@0) to: r topRight - (7@0) width: self width color: self color; line: r topRight + (-6@1) to: r topRight + (-5@1) width: self width color: self color; line: r topRight + (-4@2) to: r topRight + (-2@4) width: self width color: self color; line: r topRight + (-1@5) to: r topRight + (-1@6) width: self width color: self color; line: r topRight + (0@7) to: r bottomRight - (0@7) width: self width color: self color; line: r bottomRight - (1@6) to: r bottomRight - (1@5) width: self width color: self color; line: r bottomRight - (2@4) to: r bottomRight - (4@2) width: self width color: self color; line: r bottomRight - (5@1) to: r bottomRight - (6@1) width: self width color: self color; line: r bottomRight - (7@0) to: r bottomLeft + (7@0) width: self width color: self color; line: r bottomLeft - (-6@1) to: r bottomLeft - (-5@1) width: self width color: self color; line: r bottomLeft - (-4@2) to: r bottomLeft - (-2@4) width: self width color: self color; line: r bottomLeft - (-1@5) to: r bottomLeft - (-1@6) width: self width color: self color; line: r bottomLeft - (0@7) to: r topLeft + (0@7) width: self width color: self color; line: r topLeft + (1@6) to: r topLeft + (1@5) width: self width color: self color; line: r topLeft + (2@4) to: r topLeft + (4@2) width: self width color: self color; line: r topLeft + (5@1) to: r topLeft + (6@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 1/9/2009 17:10' prior: 32293978! frameRectangle8: aRectangle on: aCanvas "Draw the border for a corner radius of 8." |r| r := aRectangle insetBy: self width // 2. self width odd ifTrue: [r := r insetBy: (0@0 corner: 1@1)]. aCanvas line: r topLeft + (8@0) to: r topRight - (8@0) width: self width color: self color; line: r topRight + (-7@1) to: r topRight + (-6@1) width: self width color: self color; line: r topRight + (-5@2) to: r topRight + (-2@5) width: self width color: self color; line: r topRight + (-1@6) to: r topRight + (-1@7) width: self width color: self color; line: r topRight + (0@8) to: r bottomRight - (0@8) width: self width color: self color; line: r bottomRight - (1@7) to: r bottomRight - (1@6) width: self width color: self color; line: r bottomRight - (2@5) to: r bottomRight - (5@2) width: self width color: self color; line: r bottomRight - (6@1) to: r bottomRight - (7@1) width: self width color: self color; line: r bottomRight - (8@0) to: r bottomLeft + (8@0) width: self width color: self color; line: r bottomLeft - (-7@1) to: r bottomLeft - (-6@1) width: self width color: self color; line: r bottomLeft - (-5@2) to: r bottomLeft - (-2@5) width: self width color: self color; line: r bottomLeft - (-1@6) to: r bottomLeft - (-1@7) width: self width color: self color; line: r bottomLeft - (0@8) to: r topLeft + (0@8) width: self width color: self color; line: r topLeft + (1@7) to: r topLeft + (1@6) width: self width color: self color; line: r topLeft + (2@5) to: r topLeft + (5@2) width: self width color: self color; line: r topLeft + (6@1) to: r topLeft + (7@1) width: self width color: self color! ! !RoundedBorder methodsFor: 'drawing' stamp: 'gvc 2/9/2009 13:58' prior: 32295700! frameRectangle: aRectangle on: aCanvas "Draw the border. Radius is the x/y offset not width 'around the corner'." self cornerRadius = 0 ifTrue: [^self frameRectangle0: aRectangle on: aCanvas]. self cornerRadius = 1 ifTrue: [^self frameRectangle1: aRectangle on: aCanvas]. self cornerRadius = 2 ifTrue: [^self frameRectangle2: aRectangle on: aCanvas]. self cornerRadius = 3 ifTrue: [^self frameRectangle3: aRectangle on: aCanvas]. self cornerRadius = 4 ifTrue: [^self frameRectangle4: aRectangle on: aCanvas]. self cornerRadius = 5 ifTrue: [^self frameRectangle5: aRectangle on: aCanvas]. self cornerRadius = 6 ifTrue: [^self frameRectangle6: aRectangle on: aCanvas]. self cornerRadius = 7 ifTrue: [^self frameRectangle7: aRectangle on: aCanvas]. self cornerRadius = 8 ifTrue: [^self frameRectangle8: aRectangle on: aCanvas]. ^super frameRectangle: aRectangle on: aCanvas.! ! !RoundedBorder methodsFor: 'initialize' stamp: 'gvc 3/14/2007 12:16' prior: 32296668! initialize "Initialize the receiver." super initialize. self cornerRadius: 0! ! !TabBar methodsFor: 'accessing' stamp: 'MarcusDenker 6/23/2013 17:29' prior: 39782981! selectedTab ^selectionHistory ifEmpty: [ nil ] ifNotEmpty: [ selectionHistory last ]! ! !DashedBorder methodsFor: 'drawing' stamp: 'gvc 4/24/2007 15:51' prior: 20321351! frameRectangle: aRectangle on: aCanvas "Frame the given rectangle on aCanvas" (aRectangle width < self width or: [aRectangle height < self width]) ifTrue: [^self]." don't do if too small" aCanvas frameRectangle: aRectangle width: self width colors: self dashColors dashes: self dashLengths! ! !DashedBorder methodsFor: 'initialize' stamp: 'gvc 4/24/2007 15:50' prior: 20321738! initialize "Initialize the receiver." super initialize. self dashColors: {Color black. Color white}; dashLengths: #(1 1)! ! !DashedBorder methodsFor: 'accessing' stamp: 'gvc 8/8/2007 17:21' prior: 20321948! style "Answer #dashed." ^#dashed! ! !ImageFillStyle methodsFor: 'comparing' stamp: 'gvc 12/8/2008 18:54' prior: 23536056! = anOrientedFillStyle "Answer whether equal." ^super = anOrientedFillStyle and: [self form = anOrientedFillStyle form]! ! !ImageFillStyle methodsFor: 'converting' stamp: 'gvc 3/2/2010 17:16' prior: 23536263! asColor "Answer transparent, no other reasonable interpretation." ^Color transparent! ! !ImageFillStyle methodsFor: '*Polymorph-Widgets' stamp: 'gvc 1/28/2009 17:40' prior: 23536436! fillRectangle: aRectangle on: aCanvas "Fill the given rectangle on the given canvas with the receiver." self extent ifNil: [aCanvas translucentImage: self form at: self origin] ifNotNil: [aCanvas clipBy: (self origin + self offset extent: self extent) during: [:c | c translucentImage: self form at: self origin]]! ! !ImageFillStyle methodsFor: 'comparing' stamp: 'gvc 12/8/2008 18:53' prior: 23536867! hash "Hash is implemented because #= is implemented." ^super hash bitXor: self form hash! ! !PreferencesHandler commentStamp: '' prior: 41393006! I manage the links of the chain of responsibilites to retrieve the good preference file.! !PreferencesHandler methodsFor: 'private' stamp: 'StephaneDucasse 6/23/2013 18:04' prior: 36840369! lookInFolder: folder forFilesMatching: pattern | result files | result := OrderedCollection new. folder isDirectory ifFalse: [ ^ nil ]. files := folder filesMatching: pattern. files do: [ :e | result add: e ]. ^ result isEmpty ifTrue: [ nil ] ifFalse: [ result ]! ! !PreferencesHandler methodsFor: 'actions' stamp: 'StephaneDucasse 6/23/2013 18:04' prior: 29947300! lookInGeneralPreferencesFolder ^ self lookInFolder: StartupLoader preferencesGeneralFolder forFilesMatching: '*.st'.! ! !PreferencesHandler methodsFor: 'actions' stamp: 'StephaneDucasse 6/23/2013 18:04' prior: 29947503! lookInImageFolder ^ self lookInFolder: FileSystem workingDirectory forFilesMatching: StartupLoader startupScriptName.! ! !PreferencesHandler methodsFor: 'actions' stamp: 'StephaneDucasse 6/23/2013 18:04' prior: 29947707! lookInPreferencesVersionFolder ^ self lookInFolder: StartupLoader preferencesVersionFolder forFilesMatching: '*.st'.! ! !StartupLoader commentStamp: '' prior: 41393157! StartupLoader searches for and executes .st files from certain locations such as Library/Preferences/pharo on Mac OS X. StartupLoader looks within such locations for a 'pharo' folder. This contains the startup scripts common to all versions of Pharo, and also optionally a folder per Pharo version holding startup scripts suitable for that version only. So a typical directory layout might be... .../some/folders/pharo/Content/Resources/pharo.image. .../some/folders/pharo/Content/Resources/startup.st .../some/folders/.config/pharo/author.st .../some/folders/.config/pharo/useSharedCache.st .../some/folders/.config/pharo/1.4/mystartupFor14only.st .../some/folders/.config/pharo/2.0/mystartupFor20only.st (**Note however that '.config' is an invalid filename on Windows, so '..config' is used instead) To know the real values for you... Print the result of "StartupLoader preferencesGeneralFolder" which holds the startup scripts common to all versions of Pharo. Print the result of "StartupLoader preferencesVersionFolder" which holds the startup scripts specific to the version of the current image. ----------- StartupLoader example will define a script sample startup.st in your unix root on unix Its contents is StartupLoader default executeAtomicItems: { StartupAtomicItem name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' isSingleton: true. StartupAtomicItem name: 'Open Workspace' code: 'Workspace openContents: ''I should be displayed each time'''. } For a more complete example, see StartupLoader class>>#example2! !StartupLoader class methodsFor: 'private' stamp: 'StephaneDucasse 6/23/2013 17:25' prior: 50902571! startupPreferencesVersionFolderScriptName ^ 'startupPharo', SystemVersion current dottedMajorMinor,'.st'! ! !StartupLoader methodsFor: 'startup loading' stamp: 'StephaneDucasse 6/23/2013 18:03' prior: 50894348! loadPreferences self retrieveFilesStream do: [:file | file fileIn ].! ! !StartupLoader methodsFor: 'startup loading' stamp: 'StephaneDucasse 6/23/2013 18:03'! retrieveFilesStream ^ PreferencesHandler new perform! ! StartupLoader removeSelector: #retreiveFilesStream! "Balloon"! "Graphics-Primitives"! "Morphic-Base"! "Polymorph-Widgets"! "StartupPreferences"! "Tabs"! ----End fileIn----! ----QUIT----an Array(24 June 2013 10:38:56 am) Pharo.image priorSource: 7827579! ----STARTUP----an Array(24 June 2013 10:47:35 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 June 2013 10:47:35 am) Pharo-30217.image priorSource: 7863923! ----STARTUP----an Array(24 June 2013 11:57:42 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/24/2013 11:55' prior: 41382311! commentForCurrentUpdate ^ '10979 AlainTreeModel should use asString instead of printString to display items https://pharo.fogbugz.com/f/cases/10979 10880 PolyMorph part3 https://pharo.fogbugz.com/f/cases/10880 11000 Categorize All Monticello Methods https://pharo.fogbugz.com/f/cases/11000 10998 Add ReleaseTest>>testUnknownProcesses https://pharo.fogbugz.com/f/cases/10998 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/24/2013 11:55'! script317 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.491.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.17.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1493.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.819.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.238.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.18.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.478.mcz NautilusCommon-EstebanLorenzano.146.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.845.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.105.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.201.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.516.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/24/2013 11:55'! update30218 "self new update30218" self withUpdateLog: '10979 AlainTreeModel should use asString instead of printString to display items https://pharo.fogbugz.com/f/cases/10979 10880 PolyMorph part3 https://pharo.fogbugz.com/f/cases/10880 11000 Categorize All Monticello Methods https://pharo.fogbugz.com/f/cases/11000 10998 Add ReleaseTest>>testUnknownProcesses https://pharo.fogbugz.com/f/cases/10998 '. self loadTogether: self script317 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCMczWriter class methodsFor: 'writing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24827593! fileOut: aVersion on: aStream | inst | inst := self on: aStream. inst writeVersion: aVersion. inst flush. ! ! !MCMczWriter class methodsFor: 'accessing' stamp: 'cwp 8/1/2003 12:35' prior: 24827792! readerClass ^ MCMczReader! ! !MCPackageCache methodsFor: 'initialize-release' stamp: 'alain.plantec 5/28/2009 10:03' prior: 24895507! initialize super initialize. sorter := MCVersionSorter new. fileNames := Dictionary new.! ! !MCPackageCache methodsFor: 'accessing' stamp: 'AdrianLienhard 1/21/2010 22:14' prior: 24895694! recordVersionInfo: aVersionInfo forFileNamed: aString fileNames at: aVersionInfo put: aString. sorter addVersionInfo: aVersionInfo! ! !MCPackageCache methodsFor: 'accessing' stamp: 'avi 1/22/2004 18:21' prior: 24895911! versionInfos ^ sorter sortedVersionInfos ! ! !MCClassVariableDefinition class methodsFor: 'accessing' stamp: 'cwp 7/7/2003 22:58' prior: 24658808! type ^ #class! ! !MCRepositoryGroup class methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24955113! default ^ default ifNil: [default := self new]! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'SeanDeNigris 7/17/2012 15:42' prior: 24951662! addRepository: aRepository ((repositories includes: aRepository) or: [aRepository == MCCacheRepository uniqueInstance]) ifFalse: [repositories add: aRepository. self class default addRepository: aRepository]. self changed: (Array with: #added with: aRepository). ^ aRepository! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'NorbertHartl 6/20/2008 10:11' prior: 24952044! disableCache useCache := false! ! !MCRepositoryGroup methodsFor: 'testing' stamp: 'avi 11/7/2003 00:20' prior: 24952912! includes: aRepository ^ self repositories includes: aRepository! ! !MCRepositoryGroup methodsFor: 'interface' stamp: 'EstebanLorenzano 5/3/2013 14:22' prior: 36727627! includesVersionNamed: aString " check for existing version name in parallel over all repositories " | results | results := Array new: self repositories size. self repositories doWithIndex: [:repository :index | " fork of test for each repository " results at: index put: (repository includesVersionNamed: aString) ]. " check if any repository included the given versionName already" ^ results anySatisfy: [:result| result = true ] ! ! !MCRepositoryGroup methodsFor: 'initialize-release' stamp: 'alain.plantec 5/28/2009 10:03' prior: 24953074! initialize super initialize. repositories := OrderedCollection new! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'sd 3/15/2008 17:33' prior: 24953229! removeHTTPRepositoryLocationNamed: aRepositoryString | httpRepo others | httpRepo := repositories select: [:each | each isKindOf: MCHttpRepository]. others := repositories reject: [:each | each isKindOf: MCHttpRepository]. repositories := others, (httpRepo reject: [:each | each locationWithTrailingSlash = aRepositoryString]). self changed: #repositories! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'lr 5/9/2010 19:04' prior: 24953678! removeRepository: aRepository repositories remove: aRepository ifAbsent: []. self changed: (Array with: #removed with: aRepository)! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'SeanDeNigris 7/17/2012 15:42' prior: 24953908! repositories ^ (self useCache ifTrue: [Array with: MCCacheRepository uniqueInstance] ifFalse: [Array new]) , repositories select: #isValid! ! !MCRepositoryGroup methodsFor: 'enumerating' stamp: 'avi 11/7/2003 00:51' prior: 24954141! repositoriesDo: aBlock self repositories do: [:ea | [aBlock value: ea] on: Error do: []]! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'abc 6/20/2008 10:02' prior: 24954318! useCache ^ useCache ifNil: [ useCache := true ]! ! !MCRepositoryGroup methodsFor: 'interface' stamp: 'dvf 8/10/2004 23:02' prior: 24954457! versionWithInfo: aVersionInfo ^self versionWithInfo: aVersionInfo ifNone: [ self error: 'Could not find version ', aVersionInfo name printString,'. Maybe you need to add a repository?' ]! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'marcus.denker 11/10/2008 10:04' prior: 24954743! versionWithInfo: aVersionInfo ifNone: aBlock self repositoriesDo: [:ea | (ea versionWithInfo: aVersionInfo) ifNotNil: [:v | ^ v]]. ^aBlock value! ! !MCVersionNotification class methodsFor: 'instance creation' stamp: 'avi 8/26/2004 14:27' prior: 25127237! version: aVersion repository: aRepository ^ self basicNew initializeWithVersion: aVersion repository: aRepository! ! !MCDictionaryRepository methodsFor: 'comparing' stamp: 'ab 8/21/2003 12:56' prior: 24750200! = other ^ self == other! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'ab 8/20/2003 21:04' prior: 24748083! allVersionInfos ^ dict values collect: [:ea | ea info]! ! !MCDictionaryRepository methodsFor: 'storing' stamp: 'avi 8/26/2004 14:20' prior: 24748231! basicStoreVersion: aVersion dict at: aVersion info put: aVersion! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24748400! closestAncestorVersionFor: anAncestry ifNone: errorBlock | info | info := anAncestry breadthFirstAncestors detect: [:ea | self includesVersionWithInfo: ea] ifNone: [^ errorBlock value]. ^ self versionWithInfo: info! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'ab 7/26/2003 02:47' prior: 24748715! description ^ description ifNil: ['cache']! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24748863! description: aString description := aString ! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'ab 7/26/2003 02:47' prior: 24749001! dictionary ^ dict! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24749124! dictionary: aDictionary dict := aDictionary! ! !MCDictionaryRepository methodsFor: 'interface' stamp: 'ab 7/21/2003 23:39' prior: 24749261! includesVersionNamed: aString ^ dict anySatisfy: [:ea | ea info name = aString]! ! !MCDictionaryRepository methodsFor: 'testing' stamp: 'ab 8/21/2003 19:49' prior: 24749433! includesVersionWithInfo: aVersionInfo ^ dict includesKey: aVersionInfo! ! !MCDictionaryRepository methodsFor: 'initialize-release' stamp: 'alain.plantec 5/28/2009 10:02' prior: 24749607! initialize super initialize. dict := Dictionary new. ! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24749767! sortedVersionInfos | sorter | sorter := MCVersionSorter new. self allVersionInfos do: [:ea | sorter addVersionInfo: ea]. ^ sorter sortedVersionInfos ! ! !MCDictionaryRepository methodsFor: 'interface' stamp: 'ab 8/16/2003 18:22' prior: 24750012! versionWithInfo: aVersionInfo ifAbsent: errorBlock ^ dict at: aVersionInfo ifAbsent: errorBlock! ! !MCWorkingAncestry methodsFor: 'adding' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25140171! addAncestor: aNode ancestors := (self ancestors reject: [:each | aNode hasAncestor: each]) copyWith: aNode! ! !MCWorkingAncestry methodsFor: 'adding' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25140379! addStepChild: aVersionInfo stepChildren := stepChildren copyWith: aVersionInfo! ! !MCWorkingAncestry methodsFor: 'accessing' stamp: 'MiguelCoba 7/25/2009 02:01' prior: 25140553! infoWithName: nameString message: messageString ^ MCVersionInfo name: nameString id: UUID new message: messageString date: Date today time: Time now author: Author fullName ancestors: ancestors asArray stepChildren: self stepChildren asArray! ! !MCWorkingAncestry methodsFor: 'accessing' stamp: 'avi 2/13/2004 01:14' prior: 25140899! name ^ ''! ! !MCWorkingAncestry methodsFor: 'accessing' stamp: 'avi 2/13/2004 01:14' prior: 25141011! summary ^ 'Ancestors: ', self ancestorString! ! !MCTool methodsFor: 'opening' stamp: 'CamilloBruni 2/4/2012 12:25' prior: 25072713! show "Open the tool returning the window." modal := false. self window openInWorldExtent: self defaultExtent. self setDefaultFocus. ^ self window! ! !MCTool methodsFor: 'opening' stamp: 'CamilloBruni 2/4/2012 12:25' prior: 25072950! showLabelled: labelString modal := false. self label: labelString. self window openInWorldExtent: self defaultExtent. self setDefaultFocus. ^ self window.! ! !MCReader methodsFor: 'accessing' stamp: 'CamilloBruni 4/24/2012 15:49' prior: 24936697! stream stream closed ifTrue: [ stream open ]. ^ stream ! ! !MCSnapshotReader class methodsFor: 'accessing' stamp: 'avi 1/21/2004 22:56' prior: 25025234! snapshotFromStream: aStream ^ (self on: aStream) snapshot! ! !MCSnapshotReader methodsFor: 'accessing' stamp: 'avi 1/21/2004 23:09' prior: 25024817! definitions definitions ifNil: [self loadDefinitions]. ^ definitions! ! !MCSnapshotReader methodsFor: 'accessing' stamp: 'avi 1/21/2004 23:10' prior: 25024974! snapshot ^ MCSnapshot fromDefinitions: self definitions! ! !MCFileBasedRepository class methodsFor: 'actions' stamp: 'avi 2/3/2005 00:43' prior: 24772854! flushAllCaches self allSubInstancesDo: [:ea | ea flushCache]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'CamilloBruni 4/20/2012 17:57' prior: 24765328! allFileNames cacheFileNames == true ifFalse: [ ^ self loadAllFileNames ]. ^ allFileNames ifNil: [ allFileNames := self loadAllFileNames]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'ab 8/21/2003 20:01' prior: 24765560! allFileNamesForVersionNamed: aString ^ self filterFileNames: self readableFileNames forVersionNamed: aString! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'CamilloBruni 3/2/2012 13:01' prior: 24765769! allFileNamesOrCache cacheFileNames ifFalse: [ ^ self allFileNames ]. ^ allFileNames ifNil: [ allFileNames := self allFileNames]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'ab 8/21/2003 00:40' prior: 24765992! allVersionNames ^ self readableFileNames collect: [:ea | self versionNameFromFileName: ea]! ! !MCFileBasedRepository methodsFor: 'storing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24766186! basicStoreVersion: aVersion self writeStreamForFileNamed: aVersion fileName do: [:s | aVersion fileOutOn: s]. aVersion isCacheable ifTrue: [ cache ifNil: [cache := Dictionary new]. cache at: aVersion fileName put: aVersion]. ! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24766524! cache ^ cache ifNil: [cache := Dictionary new]! ! !MCFileBasedRepository methodsFor: 'caching' stamp: 'CamilloBruni 3/2/2012 13:01' prior: 24766671! cacheAllFileNamesDuring: aBlock cacheFileNames == true ifTrue: [ ^ aBlock value ]. allFileNames := nil. cacheFileNames := true. ^ aBlock ensure: [ allFileNames := nil. cacheFileNames := false]! ! !MCFileBasedRepository methodsFor: 'caching' stamp: 'bf 6/9/2005 15:47' prior: 24766962! cachedFileNames ^cache == nil ifTrue: [#()] ifFalse: [cache keys]! ! !MCFileBasedRepository methodsFor: 'testing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24767135! canReadFileNamed: aString | reader | reader := MCVersionReader readerClassForFileNamed: aString. ^ reader notNil! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'avi 9/17/2005 16:40' prior: 24767342! closestAncestorVersionFor: anAncestry ifNone: errorBlock ^ self cacheAllFileNamesDuring: [super closestAncestorVersionFor: anAncestry ifNone: errorBlock]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'ab 8/21/2003 20:01' prior: 24767589! filterFileNames: aCollection forVersionNamed: aString ^ aCollection select: [:ea | (self versionNameFromFileName: ea) = aString] ! ! !MCFileBasedRepository methodsFor: 'private' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24767822! flushCache cache := nil! ! !MCFileBasedRepository methodsFor: 'testing' stamp: 'CamilloBruni 1/26/2012 19:49' prior: 24767947! includesFileNamed: aString "slow default implementation" ^ self allFileNames includes: aString! ! !MCFileBasedRepository methodsFor: 'testing' stamp: 'ab 8/21/2003 00:36' prior: 24768134! includesVersionNamed: aString ^ self allVersionNames includes: aString! ! !MCFileBasedRepository methodsFor: 'interface' stamp: 'CamilloBruni 3/2/2012 13:03' prior: 24768305! loadAllFileNames self subclassResponsibility! ! !MCFileBasedRepository methodsFor: 'private' stamp: 'SeanDeNigris 7/17/2012 15:50' prior: 24768451! loadVersionFromFileNamed: aString (MCCacheRepository uniqueInstance includesFileNamed: aString) ifTrue: [ ^ MCCacheRepository uniqueInstance loadVersionFromFileNamed: aString]. ^ self versionReaderForFileNamed: aString do: [:r | r version]! ! !MCFileBasedRepository methodsFor: 'loading' stamp: 'avi 9/17/2005 18:37' prior: 24768789! loadVersionInfoFromFileNamed: aString ^ self versionReaderForFileNamed: aString do: [:r | r info] ! ! !MCFileBasedRepository methodsFor: 'caching' stamp: 'CamilloBruni 4/20/2012 18:14' prior: 24768990! maxCacheSize ^ 512! ! !MCFileBasedRepository methodsFor: 'notifying' stamp: 'CamilloBruni 1/26/2012 19:50' prior: 24769110! notifyList (self includesFileNamed: 'notify') ifFalse: [^ #()]. ^ self readStreamForFileNamed: 'notify' do: [:s | s upToEnd lines]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'bf 3/11/2005 18:01' prior: 24769336! possiblyNewerVersionsOfAnyOf: someVersions | pkgs | pkgs := Dictionary new. someVersions do: [:aVersionInfo | pkgs at: (aVersionInfo name copyUpToLast: $-) put: (aVersionInfo name copyAfterLast: $.) asNumber]. ^[self allVersionNames select: [:each | (pkgs at: (each copyUpToLast: $-) ifPresent: [:verNumber | verNumber < (each copyAfterLast: $.) asNumber or: [verNumber = (each copyAfterLast: $.) asNumber and: [someVersions noneSatisfy: [:v | v name = each]]]]) == true] ] on: Error do: [:ex | ex return: #()]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'StephaneDucasse 1/24/2013 12:06' prior: 24769976! readableFileNames | all cached new emptyFilenamelength | ".-..mcz" emptyFilenamelength := 'P-i.c.mcz' size. all := self allFileNames. "from repository" all := all reject: [ :each | each size < emptyFilenamelength]. "first stupid way to filter first level broken files. Ideally we should remove any files not following the naming pattern: PackageName-author.number[(branch)].mcz" cached := self cachedFileNames. "in memory" new := all difference: cached. ^ (cached asArray, new) select: [:ea | self canReadFileNamed: ea]! ! !MCFileBasedRepository methodsFor: 'caching' stamp: 'avi 9/18/2005 22:43' prior: 24770664! resizeCache: aDictionary [aDictionary size <= self maxCacheSize] whileFalse: [aDictionary removeKey: aDictionary keys atRandom]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'CamilloBruni 4/21/2012 18:01' prior: 24770895! versionFromFileNamed: aString | v | v := self cache at: aString ifAbsent: [ self loadVersionFromFileNamed: aString ]. self resizeCache: cache. (v notNil and: [v isCacheable]) ifTrue: [cache at: aString put: v]. ^ v! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'avi 9/17/2005 18:37' prior: 24771215! versionInfoFromFileNamed: aString self cache at: aString ifPresent: [:v | ^ v info]. ^ self loadVersionInfoFromFileNamed: aString! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'bf 5/30/2005 22:52' prior: 24771437! versionNameFromFileName: aString ^ (aString copyUpToLast: $.) copyUpTo: $(! ! !MCFileBasedRepository methodsFor: 'actions' stamp: 'marcus.denker 11/10/2008 10:04' prior: 24771615! versionReaderForFileNamed: aString do: aBlock ^ self readStreamForFileNamed: aString do: [:s | (MCVersionReader readerClassForFileNamed: aString) ifNotNil: [:class | aBlock value: (class on: s fileName: aString)]] ! ! !MCFileBasedRepository methodsFor: 'interface' stamp: 'SeanDeNigris 7/17/2012 15:40' prior: 24771942! versionWithInfo: aVersionInfo ifAbsent: errorBlock "get a version for the given versionInfo. always query first the packageCache and only then try to load the version from the remote location" ^ MCCacheRepository uniqueInstance versionWithInfo: aVersionInfo ifAbsent: [ (self allFileNamesForVersionNamed: aVersionInfo name) do: [:fileName | | version | version := self versionFromFileNamed: fileName. version info = aVersionInfo ifTrue: [^ version]]. ^ errorBlock value].! ! !MCFileBasedRepository methodsFor: 'storing' stamp: 'avi 10/31/2003 14:32' prior: 24772531! writeStreamForFileNamed: aString do: aBlock ^ self writeStreamForFileNamed: aString replace: false do: aBlock! ! !MCMergeOrLoadWarning class methodsFor: 'signalling' stamp: 'abc 8/8/2011 12:50' prior: 24835523! signalFor: aVersionCollection ^ self new versions: aVersionCollection; signal! ! !MCPreambleDefinition class methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:04' prior: 24935826! scriptSelector ^ #preamble! ! !MCPreambleDefinition methodsFor: 'installing' stamp: 'avi 2/28/2005 17:15' prior: 24935582! load super load. self evaluate! ! !MCPatch class methodsFor: 'instance-creation' stamp: 'avi 9/11/2004 15:49' prior: 24918112! fromBase: baseSnapshot target: targetSnapshot ^ self new initializeWithBase: baseSnapshot target: targetSnapshot! ! !MCPatch class methodsFor: 'instance-creation' stamp: 'avi 9/11/2004 15:50' prior: 24918309! operations: aCollection ^ self basicNew initializeWithOperations: aCollection! ! !MCWriter methodsFor: 'accessing' stamp: 'cwp 8/1/2003 01:14' prior: 25212312! stream ^ stream! ! !MCWriter methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25212418! stream: aStream stream := aStream! ! !MCSubDirectoryRepository methodsFor: 'i/o' stamp: 'EstebanLorenzano 8/17/2012 13:43' prior: 25054121! findFullNameForReading: aBaseName "Answer the latest version of aBaseName" ^((directory glob: [ :each | each basename = aBaseName]) sorted: [ :a :b | a modificationTime < b modificationTime ]) first.! ! !MCSubDirectoryRepository methodsFor: 'i/o' stamp: 'SeanDeNigris 2/5/2013 15:21' prior: 25054429! findFullNameForWriting: aBaseName | possible split prefix fpattern now | split := self splitNameVersionExtensionFor: aBaseName. fpattern := split first, '*'. possible := SortedCollection sortBlock: [ :a :b | a first = b first ifTrue: [ a second = b second ifFalse: [ a second < b second ] ifTrue: [ a third fullName size < b third fullName size ]] ifFalse: [ a first > b first ] ]. now := Time totalSeconds. prefix := directory pathSegments size. self allDirectories do: [:dir | | dirScore fileScore parts | parts := dir pathSegments allButFirst: prefix. dirScore := (parts select: [ :part | fpattern match: part ]) size. fileScore := (dir entries collect: [ :ent | (ent isDirectory not and: [ fpattern match: ent name ]) ifFalse: [ SmallInteger maxVal ] ifTrue: [ now - ent modificationTime ]]). "minimum age" fileScore := fileScore isEmpty ifTrue: [ SmallInteger maxVal ] ifFalse: [ fileScore min ]. possible add: { dirScore. fileScore. dir } ]. ^ (possible first third) / aBaseName! ! !MCSubDirectoryRepository methodsFor: 'interface' stamp: 'StephaneDucasse 6/17/2012 18:52' prior: 25055573! loadAllFileNames "sorting {entry. dirName. name}" | sorted | sorted := SortedCollection sortBlock: [:a :b | a first modificationTime >= b first modificationTime ]. self allDirectories do: [:dir | dir entries do: [:ent | ent isDirectory ifFalse: [sorted add: {ent. dir fullName. ent basename}]]]. ^ sorted collect: [:ea | ea third ]! ! !MCSubDirectoryRepository methodsFor: 'i/o' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25056032! readStreamForFileNamed: aString do: aBlock | file val | file := FileStream readOnlyFileNamed: (self findFullNameForReading: aString). val := aBlock value: file. file close. ^ val! ! !MCSubDirectoryRepository methodsFor: 'i/o' stamp: 'SeanDeNigris 2/5/2013 15:35' prior: 25056318! splitNameVersionExtensionFor: aBaseName | file version | file := aBaseName asFileReference. version := (file extensions at: file extensions size - 1) asNumber. ^ { file base. version. file extension }. ! ! !MCSubDirectoryRepository methodsFor: 'i/o' stamp: 'nk 6/11/2004 20:34' prior: 25056624! writeStreamForFileNamed: aString replace: aBoolean do: aBlock | file | file := aBoolean ifTrue: [FileStream forceNewFileNamed: (self findFullNameForReading: aString)] ifFalse: [FileStream newFileNamed: (self findFullNameForWriting: aString)]. aBlock value: file. file close! ! !MCStReader class methodsFor: 'accessing' stamp: 'avi 1/20/2004 00:17' prior: 25037282! extension ^ 'st'! ! !MCStReader methodsFor: 'adding' stamp: 'marcus.denker 11/10/2008 10:04' prior: 25032584! addDefinitionsFromDoit: aString (MCDoItParser forDoit: aString) ifNotNil: [:parser | parser addDefinitionsTo: definitions]! ! !MCStReader methodsFor: 'reading' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38676608! categoryFromDoIt: aString | tokens | tokens := aString parseLiterals. tokens size = 3 ifFalse: [self error: 'Unrecognized category definition']. ^ tokens at: 3! ! !MCStReader methodsFor: 'reading' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38676877! classDefinitionFrom: aPseudoClass | tokens traitCompositionString lastIndex classTraitCompositionString | tokens := aPseudoClass definition parseLiterals. traitCompositionString := (aPseudoClass definition readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. classTraitCompositionString := (aPseudoClass metaClass definition asString readStream match: 'uses:'; upToAll: 'instanceVariableNames:') trimBoth. traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}']. classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}']. lastIndex := tokens size. ^ MCClassDefinition name: (tokens at: 3) superclassName: (tokens at: 1) traitComposition: traitCompositionString classTraitComposition: classTraitCompositionString category: (tokens at: lastIndex) instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ') classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ') poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ') classInstVarNames: (self classInstVarNamesFor: aPseudoClass) type: (self typeOfSubclass: (tokens at: 2)) comment: (self commentFor: aPseudoClass) commentStamp: (self commentStampFor: aPseudoClass)! ! !MCStReader methodsFor: 'reading' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38678207! classInstVarNamesFor: aPseudoClass | tokens | self flag: #traits. aPseudoClass metaClass hasDefinition ifFalse: [^ #()]. tokens := aPseudoClass metaClass definition parseLiterals. "tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']." ^ tokens last findTokens: ' '! ! !MCStReader methodsFor: 'reading' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25034797! commentFor: aPseudoClass | comment | comment := aPseudoClass organization classComment. ^ comment asString = '' ifTrue: [comment] ifFalse: [comment string]! ! !MCStReader methodsFor: 'reading' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25035051! commentStampFor: aPseudoClass | comment | comment := aPseudoClass organization classComment. ^ [comment stamp] on: MessageNotUnderstood do: [nil]! ! !MCStReader methodsFor: 'reading' stamp: 'avi 3/3/2004 15:23' prior: 25035280! methodDefinitionsFor: aPseudoClass ^ aPseudoClass selectors collect: [:ea | MCMethodDefinition className: aPseudoClass name classIsMeta: aPseudoClass isMeta selector: ea category: (aPseudoClass organization categoryOfElement: ea) timeStamp: (aPseudoClass stampAt: ea) source: (aPseudoClass sourceCodeAt: ea)]! ! !MCStReader methodsFor: 'reading' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25035705! systemOrganizationFromRecords: changeRecords | categories | categories := changeRecords select: [:ea | 'SystemOrganization*' match: ea string] thenCollect: [:ea | (self categoryFromDoIt: ea string)]. ^ categories isEmpty ifFalse: [MCOrganizationDefinition categories: categories asArray]! ! !MCStReader methodsFor: 'reading' stamp: 'avi 1/19/2004 21:56' prior: 25036086! typeOfSubclass: aSymbol #( (subclass: normal) (variableSubclass: variable) (variableByteSubclass: bytes) (variableWordSubclass: words) (weakSubclass: weak) ) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]]. self error: 'Unrecognized class definition'! ! !MCPatchOperation methodsFor: 'testing' stamp: 'nk 2/25/2005 17:28' prior: 24929804! isClassPatch ^false! ! !MCPatchOperation methodsFor: 'accessing' stamp: 'nk 2/23/2005 18:17' prior: 24929910! targetClass self subclassResponsibility.! ! !MCDependentsWrapper methodsFor: 'comparing' stamp: 'c 8/10/2010 22:24' prior: 24745071! = anMCDependentsWrapper self class = anMCDependentsWrapper class ifFalse: [^ false]. ^ (self item package name = anMCDependentsWrapper item package name) and: [self model = anMCDependentsWrapper model]. ! ! !MCDependentsWrapper methodsFor: 'converting' stamp: 'ar 2/14/2004 02:31' prior: 24745366! asString ^item description! ! !MCDependentsWrapper methodsFor: 'accessing' stamp: 'avi 9/10/2004 17:54' prior: 24745483! contents | list workingCopies | workingCopies := model unsortedWorkingCopies. list := item requiredPackages collect: [:each | workingCopies detect: [:wc | wc package = each] ifNone: [nil]] thenSelect: [:x | x notNil]. ^list collect: [:each | self class with: each model: model]! ! !MCDependentsWrapper methodsFor: 'accessing' stamp: 'ar 2/14/2004 02:31' prior: 24745869! hasContents ^item requiredPackages isEmpty not! ! !MCDependentsWrapper methodsFor: 'comparing' stamp: 'c 8/10/2010 22:15' prior: 24746004! hash ^ (self item package name hash * 37) + self model hash ! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 6/12/2013 14:01' prior: 51691654! addMorph: aMorph fullFrame: aLayoutFrame "Add a morph to the receiver with the given layout frame." | left right bottom top windowBorderWidth frame | frame := aLayoutFrame asLayoutFrame. windowBorderWidth := self class borderWidth. left := frame leftOffset. right := frame rightOffset. bottom := frame bottomOffset. top := frame topOffset. frame rightFraction = 1 ifTrue: [frame rightOffset: right - windowBorderWidth - self theme windowRightOffset]. frame leftFraction = 0 ifTrue: [frame leftOffset: left + windowBorderWidth + self theme windowLeftOffset] ifFalse: [frame leftFraction = 1 ifFalse: [ frame leftOffset: left + ProportionalSplitterMorph splitterWidth]]. frame bottomFraction = 1 ifTrue: [frame bottomOffset: bottom - windowBorderWidth - self theme windowBottomOffset]. frame topFraction = 0 ifTrue: [frame topOffset: top+ self theme windowTopOffset] ifFalse: [frame topFraction = 1 ifFalse: [ frame topOffset: top + ProportionalSplitterMorph splitterWidth]]. super addMorph: aMorph fullFrame: frame. paneMorphs := paneMorphs copyReplaceFrom: 1 to: 0 with: (Array with: aMorph). aMorph adoptPaneColor: self paneColor. aMorph borderStyle: (self theme windowPaneBorderStyleFor: aMorph in: self); color: (aMorph initialColorInSystemWindow: self). self theme settings scrollBarsOnRight "reorder panes so flop-out right-side scrollbar is visible" ifTrue: [self addMorphBack: aMorph]. self owner ifNotNil: [self addPaneSplitters] "do when opened for performance"! ! !MCPackage class methodsFor: 'instance creation' stamp: 'ab 7/10/2003 01:17' prior: 24893522! named: aString ^ self new name: aString! ! !MCMergeResolutionRequest methodsFor: 'accessing' stamp: 'ab 7/18/2003 18:19' prior: 24839318! merger ^ merger! ! !MCMergeResolutionRequest methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/7/2012 16:13' prior: 24839442! merger: aMerger merger := aMerger! ! !MCFileRepositoryInspector methodsFor: 'adding' stamp: 'StephaneDucasse 1/23/2013 21:58' prior: 24776399! addVersionInformationExtractedFrom: each to: packageNames | name | name := (each copyUpToLast: $.) copyUpTo: $(. name last isDigit ifTrue: [ versions add: {(packageNames add: (name copyUpToLast: $-)). "pkg name" ((name copyAfterLast: $-) copyUpTo: $.). "user" (((name copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ]). "version" each }]! ! !MCFileRepositoryInspector methodsFor: 'actions' stamp: 'StephaneDucasse 1/23/2013 21:55' prior: 24776884! computeLoadedAndInheritedFromManager: each each ancestors do: [ :ancestor | loaded add: ancestor name. ancestor ancestorsDoWhileTrue: [ :heir | (inherited includes: heir name) ifTrue: [ false ] ifFalse: [ inherited add: heir name. true ] ] ]! ! !MCFileRepositoryInspector methodsFor: 'actions' stamp: 'avi 9/18/2005 10:54' prior: 24777268! load self hasVersion ifTrue: [self version isCacheable ifTrue: [version workingCopy repositoryGroup addRepository: repository]. super load. self refresh].! ! !MCFileRepositoryInspector methodsFor: 'actions' stamp: 'bf 11/16/2004 11:56' prior: 24777528! merge super merge. self refresh. ! ! !MCFileRepositoryInspector methodsFor: 'actions' stamp: 'StephaneDucasse 1/24/2013 12:05' prior: 24777671! refresh | packageNames | packageNames := Set new. packageList := nil. versions := OrderedCollection new. repository readableFileNames do: [ :each | self addVersionInformationExtractedFrom: each to: packageNames ]. versions := versions select: [ :each | (each at: 3) isNumber ]. newer := Set new. inherited := Set new. loaded := Set new. self allManagers do: [ :each | | latest | self computeLoadedAndInheritedFromManager: each. latest := (versions select: [ :v | v first = each package name ]) detectMax: [ :v | v third ]. (latest notNil and: [ each ancestors allSatisfy: [ :ancestor | | av | av := ((ancestor name copyAfterLast: $-) copyAfter: $.) asInteger. av < latest third or: [ av = latest third and: [ ((ancestor name copyAfterLast: $-) copyUpTo: $.) ~= latest second ] ] ] ]) ifTrue: [ newer add: each package name ] ]. self changed: #packageList; changed: #packageSelection; changed: #versionList! ! !MCFileRepositoryInspector methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/5/2013 18:17' prior: 24778780! setRepository: aFileBasedRepository workingCopy: aWorkingCopy order := self class order. repository := aFileBasedRepository. aWorkingCopy ifNil: [ selectedPackage := self packageList isEmpty ifFalse: [self packageList first asString]] ifNotNil: [ selectedPackage := aWorkingCopy ancestry ancestorString copyUpToLast: $-. selectedPackage ifEmpty: [ selectedPackage := aWorkingCopy package name ]]. [ self refresh. MCWorkingCopy addDependent: self.] fork. ! ! !MCRepositoryInspector methodsFor: 'testing' stamp: 'avi 2/28/2004 20:20' prior: 24955472! hasVersion ^ selectedVersion notNil! ! !MCRepositoryInspector methodsFor: 'actions' stamp: 'avi 9/17/2005 17:11' prior: 24955600! load self hasVersion ifTrue: [super load. self version workingCopy repositoryGroup addRepository: repository].! ! !MCRepositoryInspector methodsFor: 'actions' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24955818! refresh packages := repository packages. self changed: #packageList. self packageSelection: self packageSelection. ! ! !MCRepositoryInspector methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24956039! setRepository: aRepository workingCopy: aWorkingCopy repository := aRepository. aWorkingCopy isNil ifFalse: [ selectedPackage := aWorkingCopy package]. self refresh! ! !MCRepositoryInspector methodsFor: 'accessing' stamp: 'avi 2/28/2004 20:20' prior: 24956298! summary ^ selectedVersion ifNotNil: [selectedVersion summary] ifNil: ['']! ! !MCRepositoryInspector methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24956479! version ^ version ifNil: [version := repository versionWithInfo: selectedVersion]! ! !MCTraitDefinition class methodsFor: 'instance-creation' stamp: 'al 10/9/2005 20:28' prior: 25086436! name: classNameString traitComposition: traitCompositionString category: categoryString comment: commentString commentStamp: commentStamp ^ self instanceLike: (self new initializeWithName: classNameString traitComposition: traitCompositionString category: categoryString comment: commentString commentStamp: commentStamp) ! ! !MCTraitDefinition methodsFor: 'comparing' stamp: 'nice 10/31/2009 13:10' prior: 25085860! = aDefinition self flag: #traits. "Ugly we harcoded the super superclass method. We will have to refactor the definition hierarchy" ^ (aDefinition isKindOf: MCDefinition) and: [(self isRevisionOf: aDefinition) and: [self traitCompositionString = aDefinition traitCompositionString and: [category = aDefinition category and: [comment = aDefinition comment]]]]! ! !MCStWriter class methodsFor: 'accessing' stamp: 'avi 1/20/2004 00:16' prior: 25046282! readerClass ^ MCStReader! ! !MCScriptDefinition class methodsFor: 'instance-creation' stamp: 'bf 4/4/2005 12:20' prior: 24972372! from: aPackageInfo ^ self script: (aPackageInfo perform: self scriptSelector) contents asString packageName: aPackageInfo name! ! !MCScriptDefinition class methodsFor: 'instance-creation' stamp: 'avi 2/28/2005 16:59' prior: 24972732! script: aString packageName: packageString ^ self instanceLike: (self new initializeWithScript: aString packageName: packageString)! ! !MCScriptDefinition class methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:00' prior: 24972594! scriptSelector self subclassResponsibility! ! !MCScriptDefinition class methodsFor: 'instance-creation' stamp: 'bf 8/13/2009 00:24' prior: 24972958! scriptSelector: selectorString script: aString packageName: packageString ^ (self subclassForScriptSelector: selectorString) script: aString packageName: packageString! ! !MCScriptDefinition class methodsFor: 'accessing' stamp: 'bf 8/13/2009 00:25' prior: 24973222! subclassForScriptSelector: selectorString ^self allSubclasses detect: [:ea | ea scriptSelector = selectorString]! ! !MCCacheRepository methodsFor: 'storing' stamp: 'StephaneDucasse 8/17/2012 16:22' prior: 24613358! basicStoreVersion: aVersion "we store a version if it is cacheable and we don't have the file already" (aVersion isCacheable and: [(self includesFileNamed: aVersion fileName) not]) ifTrue: [super basicStoreVersion: aVersion] ! ! !MCCacheRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24613688! cacheForPackage: aPackage packageCaches ifNil: [packageCaches := Dictionary new]. ^ packageCaches at: aPackage ifAbsentPut: [MCPackageCache new]! ! !MCCacheRepository methodsFor: 'private' stamp: 'CamilloBruni 2/28/2012 20:10' prior: 24613931! loadVersionFromFileNamed: aString ^ self versionReaderForFileNamed: aString do: [:r | r version]! ! !MCCacheRepository methodsFor: 'instance-creation' stamp: 'avi 1/22/2004 18:15' prior: 24614118! newFileNames ^ self allFileNames difference: self seenFileNames! ! !MCCacheRepository methodsFor: 'accessing' stamp: 'avi 1/22/2004 15:13' prior: 24614271! packageForFileNamed: aString ^ self packageCache at: aString ifAbsentPut: [self versionReaderForFileNamed: aString do: [:r | r package]]! ! !MCCacheRepository methodsFor: 'accessing' stamp: 'avi 1/22/2004 18:29' prior: 24614496! rescan self newFileNames do: [:ea | self versionReaderForFileNamed: ea do: [:reader | (self cacheForPackage: reader package) recordVersionInfo: reader info forFileNamed: ea. self seenFileNames add: ea]] displayingProgress: 'Scanning cache...'! ! !MCCacheRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24614861! seenFileNames ^ seenFiles ifNil: [seenFiles := OrderedCollection new]! ! !MCCacheRepository methodsFor: 'storing' stamp: 'MarcusDenker 7/6/2012 16:59' prior: 24615027! storeVersion: aVersion cacheEnabled == true ifFalse: [ ^ self ]. (self includesFileNamed: aVersion fileName) ifTrue: [ ^ self ]. ^ super storeVersion: aVersion.! ! !MCCacheRepository methodsFor: 'accessing' stamp: 'CamilloBruni 7/6/2012 16:13' prior: 24615286! versionInfoForFileNamed: aString ^ self infoCache at: aString ifAbsentPut: [ self versionReaderForFileNamed: aString do: [:r | r info]]! ! !MCCacheRepository methodsFor: 'interface' stamp: 'CamilloBruni 4/20/2012 18:10' prior: 24615525! versionWithInfo: aVersionInfo ifAbsent: errorBlock (self allFileNamesForVersionNamed: aVersionInfo name) do: [:fileName | | version | version := self versionFromFileNamed: fileName. version info = aVersionInfo ifTrue: [^ version]]. ^ errorBlock value! ! !MCModification class methodsFor: 'instance-creation' stamp: 'cwp 11/28/2002 07:19' prior: 24881602! of: base to: target ^ self new initializeWithBase: base target: target! ! !MCModification methodsFor: 'printing' stamp: 'StephaneDucasse 8/17/2012 16:30' prior: 24880296! summarySuffixOver: previousDefinition | sourceChanged categoryChanged timeStampChanged | sourceChanged := self source ~= previousDefinition source. timeStampChanged := self timeStamp ~= previousDefinition timeStamp. categoryChanged := self category ~= previousDefinition category. sourceChanged | timeStampChanged | categoryChanged ifFalse: [ ^super summarySuffixOver: previousDefinition ]. sourceChanged ifTrue: [ ^categoryChanged ifTrue: [ ' (changed and recategorized)' ] ifFalse: [ ' (changed)' ] ]. timeStampChanged & categoryChanged ifTrue: [^ ' (recategorized and different time stamp)' ]. ^categoryChanged ifTrue: [ ' (only recategorized)' ] ifFalse: [ ' (only different time stamp)' ] ! ! !MCVersionDependency class methodsFor: 'instance-creation' stamp: 'avi 1/19/2004 13:13' prior: 25101487! package: aPackage info: aVersionInfo ^ self basicNew initializeWithPackage: aPackage info: aVersionInfo! ! !MCPatcher class methodsFor: 'public' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24933671! apply: aPatch to: aSnapshot | loader | loader := self snapshot: aSnapshot. aPatch applyTo: loader. ^ loader patchedSnapshot! ! !MCPatcher class methodsFor: 'instance-creation' stamp: 'ab 6/1/2003 14:22' prior: 24933882! snapshot: aSnapshot ^ self new initializeWithSnapshot: aSnapshot! ! !MCPatcher methodsFor: 'adding' stamp: 'ab 6/2/2003 00:46' prior: 24932764! addDefinition: aDefinition definitions add: aDefinition! ! !MCPatcher methodsFor: 'initialize-release' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24932911! initializeWithSnapshot: aSnapshot definitions := MCDefinitionIndex definitions: aSnapshot definitions! ! !MCPatcher methodsFor: 'operations' stamp: 'ab 6/1/2003 14:23' prior: 24933091! modifyDefinition: baseDefinition to: targetDefinition self addDefinition: targetDefinition! ! !MCPatcher methodsFor: 'accessing' stamp: 'ab 7/6/2003 23:48' prior: 24933260! patchedSnapshot ^ MCSnapshot fromDefinitions: definitions definitions! ! !MCPatcher methodsFor: 'operations' stamp: 'ab 6/2/2003 00:46' prior: 24933408! removeDefinition: aDefinition definitions remove: aDefinition! ! !MCPostscriptDefinition class methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:04' prior: 24935304! scriptSelector ^ #postscript! ! !MCPostscriptDefinition methodsFor: 'installing' stamp: 'avi 2/28/2005 17:16' prior: 24934914! postload self evaluate! ! !MCPostscriptDefinition methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:16' prior: 24935030! sortKey ^ 'zzz' "force to the end so it gets loaded late"! ! !MCVersionInfo class methodsFor: 'instance-creation' stamp: 'avi 9/11/2004 10:44' prior: 25109262! name: vName id: id message: message date: date time: time author: author ancestors: ancestors ^ self name: vName id: id message: message date: date time: time author: author ancestors: ancestors stepChildren: #()! ! !MCVersionInfo class methodsFor: 'instance-creation' stamp: 'avi 9/11/2004 10:43' prior: 25109582! name: vName id: id message: message date: date time: time author: author ancestors: ancestors stepChildren: stepChildren ^ self new initializeWithName: vName id: id message: message date: date time: time author: author ancestors: ancestors stepChildren: stepChildren! ! !MCRemovalPostscriptDefinition class methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:04' prior: 24940370! scriptSelector ^ #postscriptOfRemoval ! ! !MCRemovalPostscriptDefinition methodsFor: 'installing' stamp: 'avi 2/28/2005 17:15' prior: 24940104! unload super unload. self evaluate! ! !MCChangeSelectionRequest methodsFor: 'accessing' stamp: 'avi 9/14/2004 15:02' prior: 24621034! label ^ label! ! !MCChangeSelectionRequest methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24621154! label: aString label := aString! ! !MCChangeSelectionRequest methodsFor: 'accessing' stamp: 'avi 9/11/2004 15:12' prior: 24621281! patch ^ patch! ! !MCChangeSelectionRequest methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24621401! patch: aPatch patch := aPatch! ! !MCInstanceVariableDefinition class methodsFor: 'accessing' stamp: 'cwp 7/7/2003 22:59' prior: 24811468! type ^ #instance! ! !MCRemovalPreambleDefinition class methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:04' prior: 24941093! scriptSelector ^ #preambleOfRemoval! ! !MCRemovalPreambleDefinition methodsFor: 'accessing' stamp: 'avi 2/28/2005 17:14' prior: 24940672! sortKey ^ 'zzz' "force to the end so it gets unloaded early"! ! !MCRemovalPreambleDefinition methodsFor: 'installing' stamp: 'avi 2/28/2005 17:15' prior: 24940831! unload super unload. self evaluate! ! !MCClassDefinition methodsFor: 'comparing' stamp: 'nice 10/31/2009 13:11' prior: 24639245! = aDefinition ^(super = aDefinition) and: [superclassName = aDefinition superclassName and: [self traitCompositionString = aDefinition traitCompositionString and: [self classTraitCompositionString = aDefinition classTraitCompositionString and: [category = aDefinition category and: [type = aDefinition type and: [self sortedVariables = aDefinition sortedVariables and: [comment = aDefinition comment]]]]]]]! ! !MCSqueaksourceRepository methodsFor: 'converting' stamp: 'CamilloBruni 9/14/2012 17:25' prior: 25030800! asCreationTemplate ^self class creationTemplateLocation: self location user: user password: password! ! !MCDirectoryRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 5/4/2012 21:35' prior: 24758314! defaultDirectoryName ^ DefaultDirectoryName ifNil: [ DefaultDirectoryName := FileSystem workingDirectory fullName].! ! !MCDirectoryRepository class methodsFor: 'accessing' stamp: 'SeanDeNigris 4/21/2010 14:38' prior: 24758538! defaultDirectoryName: aDirectoryName DefaultDirectoryName := aDirectoryName.! ! !MCDirectoryRepository class methodsFor: 'accessing' stamp: 'ab 7/24/2003 21:20' prior: 24758710! description ^ 'directory'! ! !MCDirectoryRepository methodsFor: 'accessing' stamp: 'CamilloBruni 2/28/2012 20:08' prior: 24755728! allFileNamesForVersionNamed: aString "avoid slow default implementation and directly check for existing files" |extensions| extensions := MCReader concreteSubclasses collect: [ :class| class extension ]. ^ extensions collect: [ :extension| aString , '.', extension ] thenSelect: [ :fileName| self includesFileNamed: fileName ]! ! !MCDirectoryRepository methodsFor: 'accessing' stamp: 'CamilloBruni 5/4/2012 19:04' prior: 24756163! description ^ directory fullName! ! !MCDirectoryRepository methodsFor: 'accessing' stamp: 'ab 7/6/2003 17:49' prior: 24756286! directory ^ directory! ! !MCDirectoryRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24756411! directory: aDirectory directory := aDirectory! ! !MCDirectoryRepository methodsFor: 'testing' stamp: 'SeanDeNigris 6/18/2012 15:58' prior: 24756558! includesFileNamed: aString "HACK: speed up the cache hits" ^ (directory / aString) exists.! ! !MCDirectoryRepository methodsFor: 'testing' stamp: 'CamilloBruni 2/28/2012 20:08' prior: 24756751! includesVersionNamed: aString "avoid slow default implementation and directly check for existing files" ^ (self allFileNamesForVersionNamed: aString) isEmpty not! ! !MCDirectoryRepository methodsFor: 'initialize-release' stamp: 'CamilloBruni 5/4/2012 21:35' prior: 24757014! initialize super initialize. directory := FileSystem workingDirectory! ! !MCDirectoryRepository methodsFor: 'testing' stamp: 'nk 11/2/2003 10:55' prior: 24757176! isValid ^directory exists! ! !MCDirectoryRepository methodsFor: 'interface' stamp: 'StephaneDucasse 6/17/2012 18:51' prior: 24757306! loadAllFileNames ^ (directory entries sort: [:a :b | a modificationTime >= b modificationTime]) collect: [:ea | ea basename]! ! !MCDirectoryRepository methodsFor: 'i/o' stamp: 'SeanDeNigris 6/29/2012 15:49' prior: 24757532! readStreamForFileNamed: aString do: aBlock | val | directory / aString readStreamDo: [ :stream| val := aBlock value: stream ]. ^ val! ! !MCDirectoryRepository methodsFor: 'i/o' stamp: 'StephaneDucasse 6/17/2013 14:11' prior: 40051724! writeStreamForFileNamed: aString replace: shouldReplace do: aBlock | file | file := directory / aString. shouldReplace ifTrue: [ file ensureDelete ]. file writeStreamDo: [ :stream | aBlock value: stream ].! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'MarcusDenker 6/24/2013 11:51' prior: 39706556! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. treeUpdated := nil asValueHolder. self registerEvents! ! !MCMockDependentItem methodsFor: 'comparing' stamp: 'bf 5/20/2005 16:15' prior: 24875204! <= other ^ self name <= other name! ! !MCMockDependentItem methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24874440! name ^ name! ! !MCMockDependentItem methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24874554! name: aString name := aString! ! !MCMockDependentItem methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24874686! provides: anArray provides := anArray! ! !MCMockDependentItem methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24874813! provisions ^ provides ifNil: [#()]! ! !MCMockDependentItem methodsFor: 'comparing' stamp: 'ab 7/7/2003 23:21' prior: 24874937! requirements ^ requires ifNil: [#()]! ! !MCMockDependentItem methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24875076! requires: anArray requires := anArray! ! !MCDefinitionIndex class methodsFor: 'instance-creation' stamp: 'ab 6/2/2003 01:29' prior: 24738288! definitions: aCollection ^ self new addAll: aCollection! ! !MCDefinitionIndex methodsFor: 'adding' stamp: 'StephaneDucasse 5/6/2010 08:52' prior: 24737234! add: aDefinition ^ definitions at: aDefinition description put: aDefinition! ! !MCDefinitionIndex methodsFor: 'adding' stamp: 'ab 6/2/2003 00:38' prior: 24737078! addAll: aCollection aCollection do: [:ea | self add: ea]! ! !MCDefinitionIndex methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24737409! definitionLike: aDefinition ifPresent: foundBlock ifAbsent: errorBlock | definition | definition := definitions at: aDefinition description ifAbsent: []. ^ definition ifNil: errorBlock ifNotNil: [foundBlock value: definition]! ! !MCDefinitionIndex methodsFor: 'accessing' stamp: 'ab 6/2/2003 00:42' prior: 24737727! definitions ^ definitions values! ! !MCDefinitionIndex methodsFor: 'initialize-release' stamp: 'alain.plantec 5/28/2009 10:02' prior: 24737858! initialize super initialize. definitions := Dictionary new! ! !MCDefinitionIndex methodsFor: 'removing' stamp: 'ab 6/2/2003 00:40' prior: 24738004! remove: aDefinition definitions removeKey: aDefinition description ifAbsent: []! ! !MCMcdReader class methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:09' prior: 24813352! extension ^ 'mcd'! ! !MCMcdReader methodsFor: 'accessing' stamp: 'avi 2/14/2004 21:33' prior: 24811722! baseInfo ^ baseInfo ifNil: [self loadBaseInfo]! ! !MCMcdReader methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:41' prior: 24811851! basicVersion ^ MCDiffyVersion package: self package info: self info dependencies: self dependencies baseInfo: self baseInfo patch: self patch! ! !MCMcdReader methodsFor: 'loading' stamp: 'avi 2/14/2004 21:37' prior: 24812085! buildPatchFrom: oldDefinitions to: newDefinitions ^ MCPatch fromBase: (MCSnapshot fromDefinitions: oldDefinitions) target: (MCSnapshot fromDefinitions: newDefinitions)! ! !MCMcdReader methodsFor: 'loading' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24812350! loadBaseInfo ^ baseInfo := self extractInfoFrom: (self parseMember: 'base')! ! !MCMcdReader methodsFor: 'loading' stamp: 'MarianoMartinezPeck 6/17/2012 12:37' prior: 24812524! loadPatch | old new | (self zip memberNamed: 'patch.bin') ifNotNil: [:m | [^ patch := (MCDataStream on: m contentStream) next ] on: Error do: [:fallThrough ]]. definitions := OrderedCollection new. (self zip membersMatching: 'old/*') do: [:m | self extractDefinitionsFrom: m]. old := definitions asArray. definitions := OrderedCollection new. (self zip membersMatching: 'new/*') do: [:m | self extractDefinitionsFrom: m]. new := definitions asArray. ^ patch := self buildPatchFrom: old to: new. ! ! !MCMcdReader methodsFor: 'accessing' stamp: 'avi 2/14/2004 21:34' prior: 24813120! patch ^ patch ifNil: [self loadPatch]! ! !ReleaseTest class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:47'! actualProcesses ^ Process allSubInstances reject: [ :each | each isTerminated ]! ! !ReleaseTest class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:47'! knownProcesses "Return a dynamic list of know processes" "(self actualProcesses difference: self knownProcesses) do: [ :each | each suspend; terminate ]." ^ { Processor activeProcess. InputEventFetcher default fetcherProcess. WeakArray runningFinalizationProcess. Processor backgroundProcess. SmalltalkImage current lowSpaceWatcherProcess. UIManager default uiProcess. Delay schedulingProcess } asSet! ! !ReleaseTest methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:48'! actualProcesses ^ self class actualProcesses! ! !ReleaseTest methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:38'! knownProcesses ^ self class knownProcesses! ! !ReleaseTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:48'! testUnknownProcesses "Make sure that there are no other processes running except the known processes" | unknownProcesses | unknownProcesses := self actualProcesses difference: self knownProcesses. self assert: unknownProcesses isEmpty description: (String streamContents: [ :out | out << 'Found unknown processes: '. unknownProcesses do: [ :each | out print: each ] separatedBy: [ out << ', ' ] ])! ! !MCChangeSelector methodsFor: 'morphic ui' stamp: 'avi 9/11/2004 16:07' prior: 24621666! buttonSpecs ^ #((Select select 'Select these changes') (Cancel cancel 'Cancel the operation') )! ! !MCChangeSelector methodsFor: 'actions' stamp: 'avi 9/11/2004 16:26' prior: 24621854! cancel self answer: nil! ! !MCChangeSelector methodsFor: 'morphic ui' stamp: 'avi 9/14/2004 15:01' prior: 24621965! defaultLabel ^ 'Change Selector'! ! !MCChangeSelector methodsFor: 'actions' stamp: 'avi 9/11/2004 16:13' prior: 24622085! innerButtonRow ^ self buttonRow: #(('Select All' selectAll 'select all changes') ('Select None' selectNone 'select no changes'))! ! !MCChangeSelector methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24622318! kept ^ kept ifNil: [kept := Set new]! ! !MCChangeSelector methodsFor: 'multi-selection' stamp: 'avi 9/11/2004 16:22' prior: 24622442! listSelectionAt: aNumber ^ self kept includes: (self items at: aNumber)! ! !MCChangeSelector methodsFor: 'multi-selection' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24622612! listSelectionAt: aNumber put: aBoolean | item | item := self items at: aNumber. aBoolean ifTrue: [self kept add: item ] ifFalse: [self kept remove: item ifAbsent: []]! ! !MCChangeSelector methodsFor: 'emulating' stamp: 'avi 9/11/2004 16:26' prior: 24622872! select self answer: (MCPatch operations: kept)! ! !MCChangeSelector methodsFor: 'selection' stamp: 'avi 9/14/2004 15:00' prior: 24623006! selectAll kept addAll: self items. self changed: #list! ! !MCChangeSelector methodsFor: 'selection' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24623160! selectNone kept := Set new. self changed: #list! ! !MCChangeSelector methodsFor: 'morphic ui' stamp: 'MarcusDenker 3/25/2013 13:06' prior: 34192986! widgetSpecs ^#( ((buttonRow) (0 0 1 0) (0 0 0 30)) ((multiListMorph:selection:listSelection:menu: list selection listSelectionAt: methodListMenu:) (0 0 1 0.4) (0 30 0 0)) ((buttonRow: #(('Select All' selectAll 'select all changes') ('Select None' selectNone 'select no changes'))) (0 0.4 1 0.4) (0 0 0 30)) ((textMorph: text) (0 0.4 1 1) (0 30 0 0)) ) ! ! !MCPackageLoader class methodsFor: 'public' stamp: 'ab 7/6/2003 23:30' prior: 24904630! installSnapshot: aSnapshot self new installSnapshot: aSnapshot; load! ! !MCPackageLoader class methodsFor: 'public' stamp: 'bf 12/5/2004 12:00' prior: 24904794! unloadPackage: aPackage self new unloadPackage: aPackage; loadWithNameLike: aPackage name, '-unload'! ! !MCPackageLoader class methodsFor: 'public' stamp: 'ab 7/7/2003 12:11' prior: 24904989! updatePackage: aPackage withSnapshot: aSnapshot self new updatePackage: aPackage withSnapshot: aSnapshot; load! ! !MCMergeRecord class methodsFor: 'instance-creation' stamp: 'abc 2/13/2004 15:52' prior: 24837986! version: aVersion ^ self basicNew initializeWithVersion: aVersion! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24835925! ancestorInfo ^ ancestorInfo ifNil: [ancestorInfo := version info commonAncestorWith: version workingCopy ancestry]! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24836135! ancestorSnapshot ^ ancestorSnapshot ifNil: [ancestorSnapshot := version workingCopy findSnapshotWithVersionInfo: self ancestorInfo]! ! !MCMergeRecord methodsFor: 'testing' stamp: 'StephaneDucasse 4/27/2010 11:49' prior: 24836363! imageIsClean | ancestors | ancestors := version workingCopy ancestors. ^ ancestors size = 1 and: [(ancestors first = self ancestorInfo) and: [self imagePatch isEmpty]]! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24836634! imagePatch ^ imagePatch ifNil: [imagePatch := self packageSnapshot patchRelativeToBase: self ancestorSnapshot]! ! !MCMergeRecord methodsFor: 'initialize-release' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24836840! initializeWithVersion: aVersion version := aVersion! ! !MCMergeRecord methodsFor: 'testing' stamp: 'abc 2/13/2004 17:14' prior: 24836976! isAncestorMerge ^ version workingCopy ancestry hasAncestor: version info! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24837144! mergePatch ^ mergePatch ifNil: [mergePatch := version snapshot patchRelativeToBase: self ancestorSnapshot]! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24837346! packageSnapshot ^ packageSnapshot ifNil: [packageSnapshot := version package snapshot]! ! !MCMergeRecord methodsFor: 'actions' stamp: 'abc 2/13/2004 17:14' prior: 24837517! updateWorkingCopy self isAncestorMerge ifFalse: [self imageIsClean ifTrue: [version workingCopy loaded: version] ifFalse: [version workingCopy merged: version]]! ! !MCMergeRecord methodsFor: 'accessing' stamp: 'abc 2/13/2004 15:52' prior: 24837770! version ^ version! ! !MCDependencySorter class methodsFor: 'instance-creation' stamp: 'ab 5/23/2003 14:17' prior: 24741417! items: aCollection ^ self new addAll: aCollection! ! !MCDependencySorter class methodsFor: 'public' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24741573! sortItems: aCollection | sorter | sorter := self items: aCollection. sorter externalRequirements do: [:req | sorter addProvision: req]. ^ sorter orderedItems.! ! !MCVersionSorter methodsFor: 'adding' stamp: 'avi 9/11/2004 14:19' prior: 25133749! addAllAncestorsOf: aVersionInfo to: aSet (aSet includes: aVersionInfo) ifTrue: [^ self]. aSet add: aVersionInfo. (self knownAncestorsOf: aVersionInfo) do: [:ea | self addAllAncestorsOf: ea to: aSet]! ! !MCVersionSorter methodsFor: 'adding' stamp: 'avi 8/31/2003 21:30' prior: 25134040! addAllVersionInfos: aCollection aCollection do: [:ea | self addVersionInfo: ea]! ! !MCVersionSorter methodsFor: 'adding' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25134217! addToCurrentLayer: aVersionInfo | layer | layer := layers at: depthIndex. (layer includes: aVersionInfo) ifFalse: [depths at: aVersionInfo ifPresent: [:i | i < depthIndex ifTrue: [(layers at: i) remove: aVersionInfo] ifFalse: [^ false]]. layer add: aVersionInfo. depths at: aVersionInfo put: depthIndex. ^ true]. ^ false ! ! !MCVersionSorter methodsFor: 'adding' stamp: 'avi 9/11/2004 10:49' prior: 25134650! addVersionInfo: aVersionInfo roots add: aVersionInfo. self registerStepChildrenOf: aVersionInfo seen: Set new! ! !MCVersionSorter methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25134858! allAncestorsOf: aVersionInfo | all | all := Set new. self addAllAncestorsOf: aVersionInfo to: all. ^ all! ! !MCVersionSorter methodsFor: 'initialize-release' stamp: 'alain.plantec 5/28/2009 10:04' prior: 25135062! initialize super initialize. stepparents := Dictionary new. roots := OrderedCollection new.! ! !MCVersionSorter methodsFor: 'accessing' stamp: 'avi 9/11/2004 14:37' prior: 25135242! knownAncestorsOf: aVersionInfo ^ aVersionInfo ancestors, (self stepParentsOf: aVersionInfo) asArray! ! !MCVersionSorter methodsFor: 'accessing' stamp: 'ab 8/17/2003 15:53' prior: 25135427! layers ^ layers! ! !MCVersionSorter methodsFor: 'private' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25135540! popLayer depthIndex := depthIndex - 1! ! !MCVersionSorter methodsFor: 'private' stamp: 'avi 9/11/2004 10:39' prior: 25135664! processVersionInfo: aVersionInfo (self addToCurrentLayer: aVersionInfo) ifTrue: [self pushLayer. (self knownAncestorsOf: aVersionInfo) do: [:ea | self processVersionInfo: ea]. self popLayer] ! ! !MCVersionSorter methodsFor: 'private' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25135959! pushLayer depthIndex := depthIndex + 1. depthIndex > layers size ifTrue: [layers add: OrderedCollection new]. ! ! !MCVersionSorter methodsFor: 'private' stamp: 'avi 9/11/2004 14:34' prior: 25136158! registerStepChildrenOf: aVersionInfo seen: aSet (aSet includes: aVersionInfo) ifTrue: [^ self]. aSet add: aVersionInfo. aVersionInfo stepChildren do: [:ea | (self stepParentsOf: ea) add: aVersionInfo]. aVersionInfo ancestors do: [:ea | self registerStepChildrenOf: ea seen: aSet].! ! !MCVersionSorter methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25136539! sortedVersionInfos layers := OrderedCollection with: OrderedCollection new. depthIndex := 1. depths := Dictionary new. roots do: [:ea | self processVersionInfo: ea]. ^ layers gather: [:ea | ea]! ! !MCVersionSorter methodsFor: 'accessing' stamp: 'avi 9/11/2004 10:40' prior: 25136823! stepParentsOf: aVersionInfo ^ (stepparents at: aVersionInfo ifAbsentPut: [Set new])! ! !MCWorkingHistoryBrowser methodsFor: 'accessing' stamp: 'ab 8/22/2003 01:37' prior: 25211463! baseSnapshot ^ package snapshot! ! !MCEmptyPackageInfo methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24763118! classes ^ #()! ! !MCEmptyPackageInfo methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24763219! methods ^ #()! ! !MCEmptyPackageInfo methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24763320! packageName ^ 'MCEmptyPackage'! ! !MCOrganizationDefinition methodsFor: 'comparing' stamp: 'SeanDeNigris 2/13/2013 08:41' prior: 24885148! = aDefinition ^ (super = aDefinition) and: [ self categories size = aDefinition categories size and: [ self categories includesAllOf: aDefinition categories ] ].! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:17' prior: 24751213! baseInfo ^ base! ! !MCDiffyVersion methodsFor: 'operations' stamp: 'CamilloBrui 7/8/2011 12:28' prior: 24751321! baseSnapshot | baseVersion | baseVersion := self workingCopy repositoryGroup versionWithInfo: base. baseVersion ifNil: [ self error: 'Missing snapshot: ', self baseInfo name]. ^ baseVersion snapshot! ! !MCDiffyVersion methodsFor: 'testing' stamp: 'bf 5/23/2005 15:42' prior: 24751631! canOptimizeLoading "Answer wether I can provide a patch for the working copy without the usual diff pass" ^ package hasWorkingCopy and: [package workingCopy modified not and: [package workingCopy ancestors includes: self baseInfo]]! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'bf 5/30/2005 17:39' prior: 24751953! fileName ^ (self class nameForVer: info name base: base name), '.', self writerClass extension! ! !MCDiffyVersion methodsFor: 'initialize-release' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24752144! initializeWithPackage: aPackage info: aVersionInfo dependencies: aCollection baseInfo: baseVersionInfo patch: aPatch patch := aPatch. base := baseVersionInfo. super initializeWithPackage: aPackage info: aVersionInfo snapshot: nil dependencies: aCollection. ! ! !MCDiffyVersion methodsFor: 'testing' stamp: 'avi 2/13/2004 23:24' prior: 24752489! isDiffy ^ true! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:17' prior: 24752589! patch ^ patch! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24752699! snapshot ^ snapshot ifNil: [snapshot := MCPatcher apply: patch to: self baseSnapshot]! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'avi 2/19/2004 22:03' prior: 24752870! summary ^ '(Diff against ', self baseInfo name, ')', String cr, super summary! ! !MCDiffyVersion methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:17' prior: 24753033! writerClass ^ MCMcdWriter ! ! !MCMcdWriter class methodsFor: 'accessing' stamp: 'avi 2/13/2004 23:09' prior: 24815093! readerClass ^ MCMcdReader! ! !MCMcdWriter methodsFor: 'writing' stamp: 'nicolascellier 6/2/2013 18:39' prior: 39732885! writeBaseInfo: aVersionInfo | string | string := self serializeVersionInfo: aVersionInfo. self addString: string at: 'base' encodedTo: 'utf8'. ! ! !MCMcdWriter methodsFor: 'visiting' stamp: 'avi 2/17/2004 01:48' prior: 24813814! writeDefinitions: aVersion self writeBaseInfo: aVersion baseInfo. self writePatch: aVersion patch.! ! !MCMcdWriter methodsFor: 'writing' stamp: 'nicolascellier 6/2/2013 18:39' prior: 39733138! writeNewDefinitions: aCollection self addString: (self serializeDefinitions: aCollection) at: 'new/source.', self snapshotWriterClass extension encodedTo: 'utf8'.! ! !MCMcdWriter methodsFor: 'writing' stamp: 'nicolascellier 6/2/2013 18:39' prior: 39733408! writeOldDefinitions: aCollection self addString: (self serializeDefinitions: aCollection) at: 'old/source.', self snapshotWriterClass extension encodedTo: 'utf8'.! ! !MCMcdWriter methodsFor: 'writing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24814461! writePatch: aPatch | old new | old := OrderedCollection new. new := OrderedCollection new. aPatch operations do: [:ea | ea isRemoval ifTrue: [old add: ea definition]. ea isAddition ifTrue: [new add: ea definition]. ea isModification ifTrue: [old add: ea baseDefinition. new add: ea definition]]. self writeOldDefinitions: old. self writeNewDefinitions: new. self addString: (self serializeInBinary: aPatch) at: 'patch.bin'.! ! !MCVersionNameAndMessageRequest methodsFor: 'accessing' stamp: 'AndrewBlack 9/4/2009 14:16' prior: 25124518! suggestedLogComment ^ suggestedLogComment! ! !MCVersionNameAndMessageRequest methodsFor: 'accessing' stamp: 'AndrewBlack 9/4/2009 14:16' prior: 25124669! suggestedLogComment: aLogMessage suggestedLogComment := aLogMessage! ! !MCVersionNameAndMessageRequest methodsFor: 'accessing' stamp: 'ab 7/10/2003 01:07' prior: 25124838! suggestedName ^ suggestion! ! !MCVersionNameAndMessageRequest methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25124977! suggestedName: aString suggestion := aString! ! !MCNoChangesException methodsFor: 'accessing' stamp: 'jf 8/21/2003 19:49' prior: 24882519! defaultAction self inform: 'No changes'! ! !MCThreeWayMerger class methodsFor: 'instance-creation' stamp: 'avi 2/13/2004 01:53' prior: 25071797! base: aSnapshot patch: aPatch aPatch isEmpty ifTrue: [MCNoChangesException signal]. ^ self new addBaseSnapshot: aSnapshot; applyPatch: aPatch; yourself ! ! !MCThreeWayMerger class methodsFor: 'instance-creation' stamp: 'ab 6/2/2003 01:09' prior: 25072050! base: aSnapshot target: targetSnapshot ancestor: ancestorSnapshot ^ self base: aSnapshot patch: (targetSnapshot patchRelativeToBase: ancestorSnapshot)! ! !MCVersionMerger class methodsFor: 'action' stamp: 'CamilloBruni 9/30/2011 16:53' prior: 25123900! mergeVersion: aVersion self new addVersion: aVersion; mergeWithNameLike: aVersion info name! ! !MCVersionMerger methodsFor: 'adding' stamp: 'CamilloBruni 9/30/2011 16:53' prior: 25121967! addVersion: aVersion records add: (MCMergeRecord version: aVersion). aVersion dependencies do: [:ea | | dep | dep := ea resolve. (records anySatisfy: [:r | r version = dep]) ifFalse: [self addVersion: dep]] displayingProgress: [ :ea| 'Searching dependency: ', ea package name]! ! !MCVersionMerger methodsFor: 'adding' stamp: 'CamilloBruni 8/4/2011 13:49' prior: 25122357! addVersions: aCollection aCollection do: [ :version| self addVersion: version].! ! !MCVersionMerger methodsFor: 'actions' stamp: 'CamilloBruni 9/30/2011 16:52' prior: 25122534! gatherChanges records do: [:ea | merger addBaseSnapshot: ea packageSnapshot]. records do: [:ea | merger applyPatch: ea mergePatch].! ! !MCVersionMerger methodsFor: 'initialize-release' stamp: 'CamilloBruni 8/4/2011 14:03' prior: 25122761! initialize super initialize. records := OrderedCollection new. merger := MCThreeWayMerger new.! ! !MCVersionMerger methodsFor: 'actions' stamp: 'CamilloBruni 1/16/2012 15:49' prior: 25122953! merge self gatherChanges. self resolveConflicts ifTrue: [merger load. records do: [:ea | ea updateWorkingCopy]. ^ true]. ^ false! ! !MCVersionMerger methodsFor: 'actions' stamp: 'CamilloBruni 9/30/2011 16:51' prior: 25123189! mergeWithNameLike: baseName self gatherChanges. self resolveConflicts ifTrue: [merger loadWithNameLike: baseName. records do: [:ea | ea updateWorkingCopy]].! ! !MCVersionMerger methodsFor: 'actions' stamp: 'CamilloBruni 8/4/2011 14:03' prior: 25123448! resolveConflicts (records allSatisfy: [:ea | ea isAncestorMerge]) ifTrue: [ MCNoChangesException signal. ^ false]. ^ ((MCMergeResolutionRequest new merger: merger) signal: 'Merging ', records first version info name) = true! ! !MCDirtyPackageInfo methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24760144! classes ^ Array new: 0.! ! !MCDirtyPackageInfo methodsFor: 'accessing' stamp: 'GuillermoPolito 7/6/2012 11:06' prior: 24760268! methods ^ (Smalltalk at: #MCMockClassA) selectors select: [:ea | ea beginsWith: 'ordinal'] thenCollect: [:ea | RGMethodDefinition realClass: (Smalltalk at: #MCMockClassA) selector: ea ]! ! !MCDirtyPackageInfo methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24760548! packageName ^ 'MCDirtyPackage'! ! !MCAddition class methodsFor: 'instance-creation' stamp: 'cwp 11/27/2002 10:03' prior: 24604997! of: aDefinition ^ self new intializeWithDefinition: aDefinition! ! !MCVariableDefinition class methodsFor: 'instance-creation' stamp: 'cwp 7/7/2003 23:18' prior: 25089662! name: aString ^ self new name: aString ! ! !MCVariableDefinition methodsFor: 'printing' stamp: 'nk 7/24/2003 14:56' prior: 25088349! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self name; nextPut: $)! ! !MCFilteredVersionSorter methodsFor: 'adding' stamp: 'bf 5/28/2005 01:14' prior: 24789026! addVersionInfo: aVersionInfo (aVersionInfo hasAncestor: target) ifTrue: [super addVersionInfo: aVersionInfo] ! ! !MCFilteredVersionSorter methodsFor: 'private' stamp: 'MarianoMartinezPeck 12/25/2009 23:08' prior: 24789249! processVersionInfo: aVersionInfo | success | aVersionInfo = target ifTrue: [^ true]. (aVersionInfo hasAncestor: target) ifFalse: [^false]. self pushLayer. success := (self knownAncestorsOf: aVersionInfo) anySatisfy: [:ea | self processVersionInfo: ea]. self popLayer. success ifTrue: [self addToCurrentLayer: aVersionInfo]. ^ success ! ! !MCFilteredVersionSorter methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24789700! target: aVersionInfo target := aVersionInfo! ! !MCServerRegistry methodsFor: 'public' stamp: 'CamilloBruni 4/11/2013 17:33' prior: 34693712! on: repositoryUrl beUser: nameString withPassword: passwordString | credentials | credentials := MCServerCredentials user: nameString password: passwordString. registry at: repositoryUrl put: credentials.! ! !MCClassInstanceVariableDefinition class methodsFor: 'accessing' stamp: 'cwp 7/7/2003 22:59' prior: 24652680! type ^ #classInstance! ! !MCSnapshot class methodsFor: 'instance-creation' stamp: 'ab 7/6/2003 23:48' prior: 24999005! empty ^ self fromDefinitions: #()! ! !MCSnapshot class methodsFor: 'instance-creation' stamp: 'ab 7/6/2003 23:48' prior: 24999124! fromDefinitions: aCollection ^ self new initializeWithDefinitions: aCollection! ! !MCSnapshot methodsFor: 'comparing' stamp: 'MarianoMartinezPeck 5/30/2012 17:12' prior: 24998106! = other self == other ifTrue: [ ^ true ]. self species = other species ifFalse: [ ^ false ]. ^ definitions asArray = other definitions asArray! ! !MCSnapshot methodsFor: 'comparing' stamp: 'ab 7/10/2003 01:05' prior: 24997987! hash ^ definitions asArray hash! ! !MCMethodDefinition class methodsFor: 'initialization' stamp: 'CamilloBruni 6/2/2012 00:13' prior: 24858199! cachedDefinitions Definitions ifNil: [ Definitions := WeakIdentityKeyDictionary new ]. ^ Definitions! ! !MCMethodDefinition class methodsFor: 'initialization' stamp: 'StephaneDucasse 12/28/2012 21:31' prior: 24858410! flushMethodCache "We do not named this method flushCache because it would override an important class methods." Definitions := nil.! ! !MCMethodDefinition class methodsFor: 'initialization' stamp: 'ab 8/22/2003 18:14' prior: 24858640! initialize Smalltalk addToShutDownList: self! ! !MCMethodDefinition class methodsFor: 'initialization' stamp: 'StephaneDucasse 12/28/2012 21:31' prior: 24858794! shutDown "Free up all cached monticello method definitions" self flushMethodCache ! ! !MCClassTraitDefinition methodsFor: 'comparing' stamp: 'nice 10/31/2009 13:11' prior: 24655231! = aDefinition ^ (super = aDefinition) and: [baseTrait = aDefinition baseTrait and: [self classTraitCompositionString = aDefinition classTraitCompositionString]] ! ! !MCRemoval class methodsFor: 'instance-creation' stamp: 'cwp 11/27/2002 10:03' prior: 24939773! of: aDefinition ^ self new intializeWithDefinition: aDefinition! ! !MCFtpRepository class methodsFor: 'accessing' stamp: 'avi 9/16/2003 13:57' prior: 24794639! creationTemplate ^ 'MCFtpRepository host: ''modules.squeakfoundation.org'' directory: ''mc'' user: ''squeak'' password: ''squeak''' ! ! !MCFtpRepository class methodsFor: 'accessing' stamp: 'avi 9/16/2003 13:57' prior: 24794869! description ^ 'FTP'! ! !MCFtpRepository class methodsFor: 'instance creation' stamp: 'avi 9/16/2003 13:57' prior: 24794981! host: host directory: directory user: user password: password ^ self new host: host; directory: directory; user: user; password: password! ! !MCFtpRepository class methodsFor: 'accessing' stamp: 'bkv 2/18/2004 20:38' prior: 24795219! templateCreationSelector ^ #host:directory:user:password: ! ! !MCFtpRepository methodsFor: 'enumerating' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24792043! clientDo: aBlock | client | client := FTPClient openOnHostNamed: host. client loginUser: user password: password. directory isEmpty ifFalse: [client changeDirectoryTo: directory]. ^ [aBlock value: client] ensure: [client close]! ! !MCFtpRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24792372! directory: dirPath directory := dirPath! ! !MCFtpRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24792509! host: hostname host := hostname! ! !MCFtpRepository methodsFor: 'interface' stamp: 'CamilloBruni 3/2/2012 13:02' prior: 24792635! loadAllFileNames ^ self clientDo: [:client | self parseDirectoryListing: client getDirectory]! ! !MCFtpRepository methodsFor: 'parsing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24792830! parseDirectoryListing: aString | stream files line tokens | stream := aString readStream. files := OrderedCollection new. [stream atEnd] whileFalse: [line := stream nextLine. tokens := line findTokens: ' '. tokens size > 2 ifTrue: [files add: tokens last]]. ^ files! ! !MCFtpRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24793203! password: passwordString password := passwordString! ! !MCFtpRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24793352! user: userString user := userString! ! !MCMczReader methodsFor: 'converting' stamp: 'stephane.ducasse 3/31/2009 21:23' prior: 24820903! associate: tokens | result | result := Dictionary new. tokens pairsDo: [:key :value | | tmp | tmp := value. value isString ifFalse: [tmp := value collect: [:ea | self associate: ea]]. value = 'nil' ifTrue: [tmp := '']. result at: key put: tmp]. ^ result! ! !MCMczReader methodsFor: 'parsing' stamp: 'nicolascellier 6/2/2013 18:36' prior: 39729684! contentsForMember: member ^[(member contentStreamFromEncoding: 'utf8') text contents] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1. But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. exc return: ((str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [WideString fromByteArray: str contents asByteArray] ifFalse: [str contents])]! ! !MCMczReader methodsFor: 'parsing' stamp: 'nicolascellier 6/2/2013 18:36' prior: 39730306! extractDefinitionsFrom: member | reader | (MCSnapshotReader readerClassForFileNamed: member fileName) ifNotNil: [:rc | reader := rc on: (self contentsForMember: member) readStream. definitions addAll: reader definitions] ! ! !MCMczReader methodsFor: 'parsing' stamp: 'nicolascellier 5/31/2013 23:33' prior: 39730645! extractDependencyFrom: zipMember ^ MCVersionDependency package: (MCPackage named: (zipMember fileName copyAfterLast: $/)) info: (self extractInfoFrom: (self parseMember: zipMember))! ! !MCMczReader methodsFor: 'utilities' stamp: 'StephaneDucasse 8/17/2012 15:50' prior: 24821862! extractInfoFrom: dict ^MCWorkingCopy infoFromDictionary: dict cache: self infoCache! ! !MCMczReader methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24822039! infoCache ^ infoCache ifNil: [infoCache := Dictionary new]! ! !MCMczReader methodsFor: 'parsing' stamp: 'nicolascellier 6/2/2013 18:37' prior: 39730938! parseMember: memberOrName | member tokens | member := self zip member: memberOrName. tokens := (self contentsForMember: member) parseLiterals first. ^ self associate: tokens! ! !MCMczReader methodsFor: 'accessing' stamp: 'avi 1/22/2004 20:33' prior: 24822409! scanner ^ MCScanner! ! !MCMczReader methodsFor: 'accessing' stamp: 'CamilloBruni 4/24/2012 15:47' prior: 24822520! zip stream closed ifTrue: [ zip := nil]. zip ifNil: [zip := ZipArchive new. zip readFrom: self stream]. ^ zip! ! !MCMockDefinition methodsFor: 'comparing' stamp: 'MarianoMartinezPeck 5/30/2012 17:12' prior: 24871525! = definition self == definition ifTrue: [ ^ true ]. self species = definition species ifFalse: [ ^ false ]. ^definition token = token! ! !MCMockDefinition methodsFor: 'converting' stamp: 'ab 7/7/2003 23:21' prior: 24870749! asString ^ token! ! !MCMockDefinition methodsFor: 'comparing' stamp: 'ab 7/7/2003 23:21' prior: 24870852! description ^ token first! ! !MCMockDefinition methodsFor: 'comparing' stamp: 'ab 7/7/2003 23:21' prior: 24870964! hash ^ token hash! ! !MCMockDefinition methodsFor: 'printing' stamp: 'ab 7/7/2003 23:21' prior: 24871068! printString ^ token! ! !MCMockDefinition methodsFor: 'printing' stamp: 'ab 7/7/2003 23:21' prior: 24871174! summary ^ token! ! !MCMockDefinition methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24871276! token ^ token! ! !MCMockDefinition methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24871389! token: aString token := aString! ! !MCPoolImportDefinition class methodsFor: 'accessing' stamp: 'cwp 7/7/2003 22:59' prior: 24934648! type ^ #pool! ! !MCRepository class methodsFor: 'accessing' stamp: 'ab 8/21/2003 00:30' prior: 24947130! allConcreteSubclasses ^ self withAllSubclasses reject: [:ea | ea isAbstract]! ! !MCRepository class methodsFor: 'accessing' stamp: 'bkv 2/18/2004 20:59' prior: 24947296! creationTemplate self subclassResponsibility.! ! !MCRepository class methodsFor: 'accessing' stamp: 'ab 8/21/2003 00:29' prior: 24947430! description ^ nil! ! !MCRepository class methodsFor: 'request handling' stamp: 'bkv 2/18/2004 20:58' prior: 24947537! fillInTheBlankRequest self subclassResponsibility.! ! !MCRepository class methodsFor: 'testing' stamp: 'ab 8/21/2003 12:59' prior: 24947676! isAbstract ^ self description isNil! ! !MCRepository class methodsFor: 'instance creation' stamp: 'ab 7/24/2003 21:01' prior: 24947800! morphicConfigure ^ self new! ! !MCRepository methodsFor: 'comparing' stamp: 'ab 8/21/2003 12:36' prior: 24945709! = other ^ other species = self species and: [other description = self description]! ! !MCRepository methodsFor: 'testing' stamp: 'avi 8/31/2004 01:08' prior: 24942353! alwaysStoreDiffs ^ storeDiffs ifNil: [false]! ! !MCRepository methodsFor: 'converting' stamp: 'bkv 2/18/2004 20:48' prior: 24942481! asCreationTemplate ^ self creationTemplate! ! !MCRepository methodsFor: 'storing' stamp: 'avi 8/26/2004 14:20' prior: 24942607! basicStoreVersion: aVersion self subclassResponsibility! ! !MCRepository methodsFor: 'accessing' stamp: 'marcus.denker 11/10/2008 10:04' prior: 24942757! closestAncestorVersionFor: anAncestry ifNone: errorBlock anAncestry breadthFirstAncestorsDo: [:ancestorInfo | (self versionWithInfo: ancestorInfo) ifNotNil: [:v | ^ v]]. ^ errorBlock value! ! !MCRepository methodsFor: 'accessing' stamp: 'bkv 2/18/2004 20:46' prior: 24943034! creationTemplate ^ creationTemplate! ! !MCRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24943164! creationTemplate: aString self creationTemplate ifNotNil: [ self error: 'Creation template already set for this MCRepository instance.' ]. creationTemplate := aString.! ! !MCRepository methodsFor: 'accessing' stamp: 'avi 10/9/2003 12:53' prior: 24943418! description ^ self class name! ! !MCRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24943542! doAlwaysStoreDiffs storeDiffs := true! ! !MCRepository methodsFor: 'accessing' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24943674! doNotAlwaysStoreDiffs storeDiffs := false! ! !MCRepository methodsFor: 'comparing' stamp: 'ab 8/21/2003 12:36' prior: 24943798! hash ^ self description hash! ! !MCRepository methodsFor: 'notifying' stamp: 'avi 8/26/2004 14:27' prior: 24943910! notificationForVersion: aVersion ^ MCVersionNotification version: aVersion repository: self! ! !MCRepository methodsFor: 'notifying' stamp: 'avi 8/26/2004 14:23' prior: 24944085! notifyList ^ #()! ! !MCRepository methodsFor: 'accessing' stamp: 'bf 3/10/2005 23:01' prior: 24944184! possiblyNewerVersionsOfAnyOf: someVersions ^#()! ! !MCRepository methodsFor: 'storing' stamp: 'CamilloBruni 4/21/2012 21:12' prior: 24944324! prepareVersionForStorage: aVersion ^ self alwaysStoreDiffs ifTrue: [ aVersion asDiffAgainst: (self closestAncestorVersionFor: aVersion info ifNone: [^ aVersion])] ifFalse: [ aVersion ]! ! !MCRepository methodsFor: 'printing' stamp: 'mas 9/24/2003 04:21' prior: 24944603! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self description; nextPut: $).! ! !MCRepository methodsFor: 'notifying' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 24944809! sendNotificationsForVersion: aVersion | notification notifyList | notifyList := self notifyList. notifyList isEmpty ifFalse: [notification := self notificationForVersion: aVersion. notifyList do: [:ea | notification notify: ea]]! ! !MCRepository methodsFor: 'storing' stamp: 'SeanDeNigris 7/17/2012 15:49' prior: 24945136! storeDependencies: aVersion MCCacheRepository uniqueInstance cacheAllFileNamesDuring: [self cacheAllFileNamesDuring: [aVersion allAvailableDependenciesDo: [:dep | (self includesVersionNamed: dep info name) ifFalse: [self storeVersion: dep]]]]! ! !MCRepository methodsFor: 'storing' stamp: 'CamilloBruni 4/22/2012 21:11' prior: 24945493! storeVersion: aVersion self basicStoreVersion: (self prepareVersionForStorage: aVersion). self sendNotificationsForVersion: aVersion! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/12/2013 14:00'! windowBottomOffset ^ 0! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/12/2013 13:59'! windowLeftOffset ^ 0! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/12/2013 13:59'! windowRightOffset ^ 0! ! !UITheme methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/12/2013 13:59'! windowTopOffset ^ 0! ! "Monticello"! "MonticelloGUI"! "Polymorph-Widgets"! "Spec-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(24 June 2013 11:58:01 am) Pharo.image priorSource: 7864123! ----STARTUP----an Array(24 June 2013 12:06:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 June 2013 12:06:24 pm) Pharo-30218.image priorSource: 7958875! ----STARTUP----an Array(25 June 2013 12:19:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(25 June 2013 12:20:03 pm) Pharo.image priorSource: 7959075! ----STARTUP----an Array(25 June 2013 12:28:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 June 2013 12:28:18 pm) Pharo-30218.image priorSource: 7959285! ----STARTUP----an Array(25 June 2013 1:08:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/25/2013 13:05' prior: 41418856! commentForCurrentUpdate ^ '10735 Cleaning ImageMorph API use form: for ImageMorph new form: ... and not image because image does not convey what is expected. https://pharo.fogbugz.com/default.asp?10735 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/25/2013 13:05'! script318 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.491.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1493.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.819.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.238.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.20.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.121.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.105.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-MarcusDenker.73.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-EstebanLorenzano.203.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.855.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1149.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-MarcusDenker.516.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/25/2013 12:09' prior: 41429181! update30218 "self new update30218" self withUpdateLog: '10979 AlainTreeModel should use asString instead of printString to display items https://pharo.fogbugz.com/f/cases/10979 10880 PolyMorph part3 https://pharo.fogbugz.com/f/cases/10880 11000 Categorize All Monticello Methods https://pharo.fogbugz.com/f/cases/11000 10998 Add ReleaseTest>>testUnknownProcesses https://pharo.fogbugz.com/f/cases/10998 '. self loadTogether: self script317 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/25/2013 13:05'! update30219 "self new update30219" self withUpdateLog: '10735 Cleaning ImageMorph API use form: for ImageMorph new form: ... and not image because image does not convey what is expected. https://pharo.fogbugz.com/default.asp?10735 '. self loadTogether: self script318 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ScrollBar methodsFor: 'initialize' stamp: 'StephaneDucasse 5/23/2013 18:39' prior: 32819319! updateDownButtonImage "update the receiver's downButton. put a new image inside" downButton removeAllMorphs. downButton addMorphCentered: (ImageMorph new form: self downImage)! ! !ScrollBar methodsFor: 'initialize' stamp: 'StephaneDucasse 5/23/2013 18:39' prior: 32819572! updateUpButtonImage "update the receiver's upButton. put a new image inside" upButton removeAllMorphs. upButton addMorphCentered: (ImageMorph new form: self upImage)! ! !HaloMorph methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:35' prior: 37765621! addGraphicalHandleFrom: formKey at: aPoint "Add the supplied form as a graphical handle centered at the given point. Return the handle." | handle aForm | aForm := Smalltalk ui icons iconNamed: formKey ifNone: [ Smalltalk ui icons iconNamed: #solidMenuIcon ]. handle := ImageMorph new form: aForm; bounds: (Rectangle center: aPoint extent: aForm extent). handle wantsYellowButtonMenu: false. self addMorph: handle. handle on: #mouseUp send: #endInteraction to: self. ^ handle ! ! !HaloMorph methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:35' prior: 37766207! createHandleAt: aPoint color: aColor iconName: iconName | bou handle | bou := Rectangle center: aPoint extent: self handleSize asPoint. self gradientHalo ifTrue: [ handle := Morph newBounds: bou color: aColor. handle borderWidth: 1. handle useRoundedCorners. self setColor: aColor toHandle: handle] ifFalse: [handle := EllipseMorph newBounds: bou color: aColor]. "" handle borderColor: aColor muchDarker. handle wantsYellowButtonMenu: false. "" iconName isNil ifFalse: [| form | form := Smalltalk ui icons iconNamed: iconName ifNone: []. form isNil ifFalse: [| image | image := ImageMorph new. image form: form. image color: aColor makeForegroundColor. image lock. handle addMorphCentered: image]]. "" ^ handle! ! !SVColorSelectorMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 5/23/2013 18:40' prior: 32669241! newLocationMorph "Answer a new morph indicating the location of the selected color." ^ImageMorph new form: Cursor crossHair withMask asCursorForm! ! !PopupChoiceDialogWindowWithMessage methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 5/23/2013 18:39' prior: 29841597! newIconMorph "Answer an icon for the receiver." ^ImageMorph new form: self icon! ! !ThumbnailImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:36' prior: 53106766! newImage: aForm "Use aForm as the new popupImage and update the thumbnail image." imagePopupMorph ifNil: [ imagePopupMorph := aForm asMorph] ifNotNil: [ imagePopupMorph form: aForm ]. self newThumbnail: aForm ! ! !ThumbnailImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:37' prior: 53107078! newThumbnail: aForm "Use aForm as the new popupImage and update the thumbnail image." | scale thumbForm border smoothing | scale := aForm extent scaleTo: desiredExtent . smoothing := (scale x < 1.0 or: [ scale y < 1.0 ]) ifTrue: [ 2 ] ifFalse: [ 1 ] . thumbForm := aForm magnify: aForm boundingBox by: scale smoothing: smoothing . self form: thumbForm . "heres where we put in a thumbnail" "We need the following to keep the border the right size. Otherwise it will shrink." (border := self borderStyle) == BorderStyle default ifFalse: [ self borderStyle: border ] . "We have changed clear the old and show the new" self invalidRect: self bounds . ! ! !CheckboxMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 5/23/2013 18:25' prior: 19013267! keyboardFocusChange: aBoolean "The message is sent to a morph when its keyboard focus changes. Update for focus feedback." super keyboardFocusChange: aBoolean. self focusChanged! ! !IncrementalSliderMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 5/23/2013 18:38' prior: 23564370! newButtonLabel: direction ofSize: size "Answer a new label for an inc/dec button." ^AlphaImageMorph new image: (ScrollBar arrowOfDirection: direction size: size color: self paneColor darker)! ! !DateModel methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:34' prior: 37872398! iconMorph ^ ImageMorph new form: Smalltalk ui icons calendarIcon.! ! !Form methodsFor: '*Morphic-Base' stamp: 'StephaneDucasse 5/23/2013 18:34' prior: 22451185! asMorph ^ImageMorph new form: self! ! !MenuItemMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:38' prior: 25444730! contents: aString withMarkers: aBool inverse: inverse "Set the menu item entry. If aBool is true, parse aString for embedded markers." | markerIndex marker | self contentString: nil. "get rid of old" aBool ifFalse: [^super contents: aString]. self removeAllMorphs. "get rid of old markers if updating" self hasIcon ifTrue: [ self icon: nil ]. self flag: #CleanYesNoOnOffAfter. (aString isKindOf: Association) ifTrue: [ super contents: aString value. marker := aString key ifTrue: [self onImage] ifFalse: [self offImage]] ifFalse: [ (aString notEmpty and: [aString first = $<]) ifFalse: [^super contents: aString]. markerIndex := aString indexOf: $>. markerIndex = 0 ifTrue: [^super contents: aString]. marker := (aString copyFrom: 1 to: markerIndex) asLowercase. (#('' '' '' '') includes: marker) ifFalse: [^super contents: aString]. self contentString: aString. "remember actual string" marker := (marker = '' or: [marker = '']) ~= inverse ifTrue: [self onImage] ifFalse: [self offImage]. super contents: (aString copyFrom: markerIndex + 1 to: aString size)]. "And set the marker" marker := ImageMorph new form: marker. marker position: self left @ (self top + 2). self addMorphFront: marker! ! !MessageDialogWindow methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:38' prior: 25596047! newIconMorph "Answer an icon for the receiver." ^ImageMorph new form: self icon! ! !MorphTreeColumn methodsFor: 'column drawing' stamp: 'StephaneDucasse 5/23/2013 18:40' prior: 26896212! headerButtonLabel: aLabel font: aFont icon: anIconForm target: aReceiver actionSelector: aSelector arguments: aCollection self headerButton. self header label: aLabel font: aFont. self header addMorphFront: (ImageMorph new form: anIconForm). self header actionSelector: aSelector. self header target: aReceiver. self header arguments: aCollection ! ! !MorphTreeColumn methodsFor: 'column drawing' stamp: 'StephaneDucasse 5/23/2013 18:40' prior: 26897020! headerButtonLabel: aLabel icon: anIconForm self headerButtonLabel: aLabel font: nil. self header cellInset: 3@0. self header addMorphFront: (ImageMorph new form: anIconForm)! ! !MorphTreeColumn methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:40' prior: 26892453! thumbnailOfSize: thumbExtent "Answer a new thumbnail for the receiver." |f t r| r := self header fullBounds scaledAndCenteredIn: (0@0 extent: thumbExtent). f := Form extent: r extent depth: Display depth. t := MatrixTransform2x3 withScale: 1.0. f getCanvas transformBy: t clippingTo: f boundingBox during: [:c | c translateBy: self visibleBounds topLeft negated during: [:ct | self container fullDrawOn: ct]] smoothing: 6. ^ImageMorph new form: f! ! !UITheme methodsFor: '*growl' stamp: 'StephaneDucasse 5/23/2013 18:41' prior: 53920746! growlDismissHandleFor: aGrowlMorph | handle form image | handle := BorderedMorph newBounds: ((3@3) extent: (20@20)) color: Color white. handle borderColor: handle color muchDarker. handle borderWidth: 1. handle wantsYellowButtonMenu: false. form := self "haloDismissIcon" windowCloseForm. form ifNotNil: [ image := ImageMorph new. image form: form. image color: handle color makeForegroundColor. image lock. handle addMorphCentered: image]. ^ handle! ! !ImageMorph class methodsFor: 'instance creation' stamp: 'StephaneDucasse 5/23/2013 18:23' prior: 23546046! fromString: aString font: aFont "Create a new ImageMorph showing the given string in the given font" ^ self new form: (StringMorph contents: aString font: aFont) imageForm! ! !ImageMorph class methodsFor: 'instance creation' stamp: 'StephaneDucasse 5/23/2013 18:23' prior: 23546317! withForm: aForm ^ self new form: aForm ; yourself! ! !ImageMorph methodsFor: 'geometry' stamp: 'gvc 9/25/2006 15:45' prior: 23538407! adoptPaneColor: paneColor "Change our border color too." super adoptPaneColor: paneColor. paneColor ifNil: [^self]. self borderStyle baseColor: paneColor twiceDarker! ! !ImageMorph methodsFor: 'accessing' stamp: 'gvc 8/27/2009 11:56' prior: 23538658! borderStyle: newStyle "Set the extent to include border width." | newExtent | self borderStyle = newStyle ifTrue: [^self]. newExtent := 2 * newStyle width + image extent. bounds extent = newExtent ifFalse: [super extent: newExtent]. super borderStyle: newStyle! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:22' prior: 23540153! borderWidth: bw | newExtent | newExtent := 2 * bw + image extent. bounds extent = newExtent ifFalse: [super extent: newExtent]. super borderWidth: bw! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:18' prior: 23539018! color: aColor "Set the color. Change to a ColorForm here if depth 1." super color: aColor. (image depth = 1 and: [aColor isColor]) ifTrue: [ image isColorForm ifFalse: [ image := ColorForm mappingWhiteToTransparentFrom: image]. image colors: {Color transparent. aColor}. self changed]! ! !ImageMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 5/23/2013 17:19' prior: 23539439! drawOn: aCanvas "Draw the border after the image." | style | self isOpaque ifTrue: [aCanvas drawImage: image at: self innerBounds origin] ifFalse: [aCanvas translucentImage: image at: self innerBounds origin]. (style := self borderStyle) ifNotNil: [style frameRectangle: bounds on: aCanvas]! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:20' prior: 23540347! form ^ image ! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:33'! form: aForm image := aForm. super extent: (2 * self borderWidth) asPoint + image extent. self changed! ! !ImageMorph methodsFor: 'menu commands' stamp: 'StephaneDucasse 5/23/2013 18:35' prior: 23542678! grabFromScreen self form: Form fromUser. ! ! !ImageMorph methodsFor: 'deprecated' stamp: 'StephaneDucasse 5/23/2013 17:26' prior: 23540469! image self deprecated: 'Use form instead' on: '23 May 2013' in: #pharo30. ^ self form ! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:32' prior: 23539832! image: anImage image := anImage. super extent: (2 * self borderWidth) asPoint + image extent. self changed! ! !ImageMorph methodsFor: 'other' stamp: 'StephaneDucasse 5/23/2013 18:06' prior: 23538286! imageExport ^ self form bits asArray! ! !ImageMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 5/23/2013 17:28' prior: 23542322! initialize super initialize. self form: self defaultImage. ! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:22' prior: 23540556! isOpaque "Return true if the receiver is marked as being completely opaque" ^ self valueOfProperty: #isOpaque ifAbsent: [false]! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:22' prior: 23540759! isOpaque: aBool "Mark the receiver as being completely opaque or not" aBool == false ifTrue: [self removeProperty: #isOpaque] ifFalse: [self setProperty: #isOpaque toValue: aBool]. self changed! ! !ImageMorph methodsFor: 'deprecated' stamp: 'StephaneDucasse 5/23/2013 17:26' prior: 23543312! newForm: aForm self deprecated: 'Use form: instead' on: '23 May 2013' in: #pharo30. self form: aForm! ! !ImageMorph methodsFor: 'menu commands' stamp: 'StephaneDucasse 5/23/2013 18:36' prior: 23542806! readFromFile | fileName | fileName := UIManager default request: 'Please enter the image file name' translated initialAnswer: 'fileName'. fileName isEmptyOrNil ifTrue: [^ self]. self form: (Form fromFileNamed: fileName). ! ! !ImageMorph methodsFor: 'deprecated' stamp: 'StephaneDucasse 5/23/2013 17:27' prior: 37758071! setNewImageFrom: form "Change the receiver's image to be one derived from the supplied form." self deprecated: 'Use form: instead' on: '23 May 2013' in: #pharo30. self form: form! ! !ImageMorph methodsFor: 'testing' stamp: 'StephaneDucasse 5/23/2013 17:21' prior: 23541796! wantsRecolorHandle ^ image notNil and: [image depth = 1]! ! !ImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 17:20' prior: 23541535! withSnapshotBorder self borderStyle: ((ComplexBorder style: #complexFramed) color: (Color r: 0.613 g: 1.0 b: 0.516); width: 1; yourself)! ! !Morph methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 5/23/2013 18:34' prior: 26610357! taskThumbnailOfSize: thumbExtent "Answer a new task thumbnail for the receiver." |f t r| r := self bounds scaledAndCenteredIn: (0@0 extent: thumbExtent). f := Form extent: r extent depth: Display depth. t := MatrixTransform2x3 withScale: f extent / self extent. f getCanvas transformBy: t clippingTo: f boundingBox during: [:c | c translateBy: self topLeft negated during: [:ct | self fullDrawOn: ct]] smoothing: 2. ^ImageMorph new form: f! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'StephaneDucasse 5/23/2013 18:39' prior: 26978838! expandedToggleImage ^ expandedToggleImage ifNil: [expandedToggleImage := ImageMorph new form: self expandedForm]. ! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'StephaneDucasse 5/23/2013 18:39' prior: 26979525! notExpandedToggleImage ^ notExpandedToggleImage ifNil: [notExpandedToggleImage := ImageMorph new form: self notExpandedForm]. ! ! !AlphaImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:06' prior: 17515493! imageExtent "Answer the extent of the original form." ^self form extent! ! !AlphaImageMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 5/23/2013 18:06' prior: 17519516! imageRectangleFromDisplayRectangle: aRectangle "Answer a rectangle in (original) image coordinates that corresponds to the given rectangle (in relative display coordinates)." |db| db := self displayBounds . db area = 0 ifTrue: [^db]. self layout == #scaledAspect ifTrue: [ ^((aRectangle translateBy: self layoutPosition negated) scaleBy: self form width / db width) rounded]. self layout == #scaled ifTrue: [ ^((aRectangle translateBy: self layoutPosition negated) scaleBy: (self form width / db width) @ (self form height / db height)) rounded]. ^self scale = 1 ifTrue: [aRectangle translateBy: self layoutPosition negated] ifFalse: [((aRectangle translateBy: self layoutPosition negated) scaleBy: 1 / self scale) rounded]! ! !AlphaImageMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 5/23/2013 18:07' prior: 17521433! optimalExtent "Answer the optimal extent for the receiver." ^self form extent * self scale + (self borderWidth * 2)! ! !AlphaImageMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/23/2013 18:07' prior: 17517128! scaledImage "Answer the image scaled as required." |i| i := self form. i boundingBox area = 0 ifTrue: [^i]. (self layout == #scaled and: [self extent ~= i extent]) ifTrue: [ ^i magnify: i boundingBox by: (self extent / i extent) smoothing: 2]. (self layout == #scaledAspect and: [self extent ~= i extent]) ifTrue: [ ^self width / i width > (self height / i height) ifTrue: [i magnify: i boundingBox by: (self height / i height) smoothing: 2] ifFalse: [i magnify: i boundingBox by: (self width / i width) smoothing: 2]]. self scale ~= 1 ifTrue: [ ^i magnify: i boundingBox by: self scale smoothing: 2]. ^i! ! !IconicButton methodsFor: '*Nautilus' stamp: 'StephaneDucasse 5/23/2013 18:06' prior: 23481624! labelGraphic ^ graphicalMorph form! ! !IconicButton methodsFor: '*Polymorph-Widgets-override' stamp: 'StephaneDucasse 5/23/2013 18:35' prior: 23483500! labelGraphic: aForm "Changed to look for any image morph rather than just a sketch." graphicalMorph ifNotNil: [graphicalMorph delete]. graphicalMorph := ImageMorph new form: aForm. self extent: graphicalMorph extent + (self borderWidth + self extraBorder). graphicalMorph position: self center - (graphicalMorph extent // 2). self addMorph: graphicalMorph. graphicalMorph lock! ! !TransferMorph methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:40' prior: 53483677! updateCopyIcon | copyIcon | copyIcon := self submorphWithProperty: #tmCopyIcon. self shouldCopy ifFalse: [ ^ copyIcon ifNotNil: [ copyIcon delete ]]. copyIcon ifNotNil: [ ^ self ]. copyIcon := ImageMorph new form: CopyPlusIcon. copyIcon setProperty: #tmCopyIcon toValue: true. ^ self addMorphFront: copyIcon. ! ! "Growl"! "Morphic-Base"! "Nautilus"! "NautilusCommon"! "Polymorph-Widgets"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(25 June 2013 1:09:12 pm) Pharo.image priorSource: 7959485! ----STARTUP----an Array(25 June 2013 1:17:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 June 2013 1:17:32 pm) Pharo-30219.image priorSource: 7988015! ----STARTUP----an Array(25 June 2013 1:38:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/25/2013 13:33' prior: 41514221! commentForCurrentUpdate ^ '10939 Add the method #classBuilder to SmalltalkImage https://pharo.fogbugz.com/f/cases/10939/Add-the-method-classBuilder-to-SmalltalkImage 10990 compileAllFrom: is different due the kernel classes modification https://pharo.fogbugz.com/f/cases/10990/ 10991 More needed changes for the polymorphism https://pharo.fogbugz.com/f/cases/10991/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/25/2013 13:33'! script319 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.97.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.492.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1494.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.820.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.238.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.20.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.106.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-MarcusDenker.54.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.33.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-EstebanLorenzano.203.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.857.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.99.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1151.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.517.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/25/2013 13:33'! update30220 "self new update30220" self withUpdateLog: '10939 Add the method #classBuilder to SmalltalkImage https://pharo.fogbugz.com/f/cases/10939/Add-the-method-classBuilder-to-SmalltalkImage 10990 compileAllFrom: is different due the kernel classes modification https://pharo.fogbugz.com/f/cases/10990/ 10991 More needed changes for the polymorphism https://pharo.fogbugz.com/f/cases/10991/ '. self loadTogether: self script319 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'MartinDias 6/24/2013 15:25' prior: 27477725! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBExternalTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " | newSubclass | newSubclass := self classBuilder newSubclassOf: NBExternalTypeValue type: NBExternalTypeValue typeOfClass instanceVariables: '' from: nil. "we're not using 'self' to avoid wrong subclassing from anonymous subclass " newSubclass valueType: aTypeName. ^ newSubclass! ! !Class methodsFor: 'pool variables' stamp: 'SebastianTleye 6/24/2013 10:19' prior: 19077936! sharedPools "Answer an orderedCollection of the shared pools declared in the receiver." sharedPools == nil ifTrue: [^sharedPools := OrderedCollection new]. ^sharedPools.! ! !ClassFactoryWithOrganization methodsFor: 'creating' stamp: 'MartinDias 6/24/2013 15:26' prior: 19276977! newClassNamed: aString subclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | newClass := self class classBuilder name: aString inEnvironment: self organization environment subclassOf: aClass type: aClass typeOfClass instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: category asSymbol. self createdClasses add: newClass. ^newClass! ! !ClassFactoryWithOrganization methodsFor: 'creating' stamp: 'MartinDias 6/24/2013 15:26' prior: 19277925! newSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | newClass := self class classBuilder name: self newName inEnvironment: self organization environment subclassOf: aClass type: aClass typeOfClass instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: category asSymbol. self createdClasses add: newClass. ^newClass! ! !String methodsFor: '*Compiler-Kernel' stamp: 'MartinDias 6/24/2013 15:15' prior: 51020257! isLegalClassName "Answer whether aString is a legal class name." ^ [Smalltalk classBuilder validateClassName: self asSymbol] on: Error do: [^ false] ! ! !MCClassDefinition methodsFor: 'installing' stamp: 'MartinDias 6/24/2013 15:26' prior: 36323214! createClass | superClass class composition | superClass := superclassName == #nil ifFalse: [ Smalltalk globals at: superclassName ]. [ class := superClass classBuilder name: name inEnvironment: superClass environment subclassOf: superClass type: type instanceVariableNames: self instanceVariablesString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: category.] on: Warning, DuplicatedVariableError do: [:ex| ex resume]. self traitComposition ifNotNil: [ composition := self class compiler evaluate: self traitComposition. ((((composition isCollection and: [ ( composition includes: nil ) not]) or: [composition isKindOf: TraitComposition ]) or: [composition isKindOf: Trait ]) or: [composition isKindOf: TraitTransformation ]) ifTrue: [ class setTraitComposition: composition asTraitComposition ] ]. self classTraitComposition ifNotNil: [ composition := self class compiler evaluate: self classTraitComposition. ((((composition isCollection and: [ ( composition includes: nil ) not]) or: [composition isKindOf: TraitComposition ]) or: [composition isKindOf: Trait ]) or: [composition isKindOf: TraitTransformation ]) ifTrue: [ class class setTraitComposition: composition asTraitComposition ] ]. ^ class! ! !Metaclass methodsFor: 'initialize-release' stamp: 'MartinDias 6/24/2013 15:26' prior: 26324803! instanceVariableNames: instVarString "Declare additional named variables for my instance." ^thisClass classBuilder class: self instanceVariableNames: instVarString! ! !TClass methodsFor: 'instance variables' stamp: 'MartinDias 6/24/2013 15:25' prior: 40972613! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:24'! classBuilder "Answer the object responsible of creating subclasses of myself in the system." ^ Smalltalk classBuilder! ! !TClass methodsFor: 'class variables' stamp: 'SebastianTleye 6/24/2013 10:20' prior: 40981380! ensureClassPool ^self classPool.! ! !TClass methodsFor: 'instance variables' stamp: 'MartinDias 6/24/2013 15:25' prior: 40992405! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:25' prior: 40998879! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:25' prior: 41002477! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^self classBuilder superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:25' prior: 41003800! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^self classBuilder superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:25' prior: 41005080! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^self classBuilder superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 6/24/2013 15:23' prior: 41006404! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^self classBuilder superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !Browser methodsFor: 'class functions' stamp: 'MartinDias 6/24/2013 15:27' prior: 18428234! copyClass | copysName nameOk | classListIndex = 0 ifTrue: [^ self]. self okToChange ifFalse: [^ self]. copysName := self request: 'Please type new class name' initialAnswer: self selectedClass name. copysName isEmptyOrNil ifTrue: [^ self]. nameOk := [self selectedClass classBuilder validateClassName: copysName asSymbol] on: Error do: [ :ex | ^ self inform: ex printString]. nameOk ifTrue: [ "Cancel returns ''" self selectedClass duplicateClassWithNewName: copysName. self classListIndex: 0. self changed: #classList]! ! !Browser methodsFor: 'class functions' stamp: 'MartinDias 6/24/2013 15:27' prior: 18436644! renameClass | oldName newName obs okToRename | classListIndex = 0 ifTrue: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. oldName := self selectedClass name. newName := self request: 'Please type new class name' initialAnswer: oldName. newName isEmptyOrNil ifTrue: [ ^ self ]. "Cancel returns ''" newName := newName asSymbol. newName = oldName ifTrue: [ ^ self ]. (Smalltalk globals includesKey: newName) ifTrue: [ ^ self inform: newName , ' already exists' ]. okToRename := [self selectedClass classBuilder validateClassName: newName] on: Error do: [ :ex | ^ self inform: ex printString]. okToRename ifTrue: [ self selectedClass rename: newName. self changed: #classList. self classListIndex: ((systemOrganizer listAtCategoryNamed: self selectedSystemCategoryName) indexOf: newName). obs := self systemNavigation allReferencesTo: (self selectedClass environment associationAt: newName). obs isEmpty ifFalse: [ self systemNavigation browseMessageList: obs name: 'Obsolete References to ' , oldName autoSelect: oldName ]]! ! !SmalltalkImage methodsFor: 'accessing' stamp: 'MartinDias 6/24/2013 15:13'! classBuilder "Answer the object responsible of creating classes in the system." ^ ClassBuilder new! ! !NBExternalArray class methodsFor: 'private' stamp: 'MartinDias 6/24/2013 15:25' prior: 27406643! anonymousSubclassInitElementType: aTypeName "create and initialize the anonymous subclass of me" | newSubclass | newSubclass := self classBuilder newSubclassOf: NBExternalArray type: NBExternalArray typeOfClass instanceVariables: '' from: nil. "we're not using 'self' to avoid wrong subclassing from anonymous subclass " newSubclass initElementType: aTypeName. ^ newSubclass! ! !Trait method! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! Behavior removeSelector: #removeObsoleteSubclass:! !Trait method! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! Behavior removeSelector: #removeAllObsoleteSubclasses! !Trait method! protocols ^ self organization categories copy! ! Behavior removeSelector: #protocols! !Trait method! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! Behavior removeSelector: #obsoleteSubclasses! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! Behavior removeSelector: #methodsInProtocol:! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! Behavior removeSelector: #methodNamed:! !Trait method! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! Behavior removeSelector: #addObsoleteSubclass:! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !Trait method! classBuilder "Answer the object responsible of creating subclasses of myself in the system." ^ Smalltalk classBuilder! ! !Trait method! ensureClassPool ^self classPool.! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !Trait method! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^self classBuilder superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !Trait method! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^self classBuilder superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !Trait method! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^self classBuilder superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !Trait method! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^self classBuilder superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! "Compiler"! "Kernel"! "Monticello"! "NativeBoost-Core"! "Ring-Core-Kernel"! "SUnit-Core"! "System-Support"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(25 June 2013 1:39:12 pm) Pharo.image priorSource: 7988213! ----STARTUP----an Array(25 June 2013 1:47:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 June 2013 1:47:32 pm) Pharo-30220.image priorSource: 8015837! ----STARTUP----an Array(25 June 2013 3:30:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/25/2013 15:27' prior: 41542948! commentForCurrentUpdate ^ '10545 Delays do not work properly directly on image startup https://pharo.fogbugz.com/f/cases/10545/Delays-do-not-work-properly-directly-on-image-startup 10817 Spec inspector https://pharo.fogbugz.com/f/cases/10817/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/25/2013 15:27'! script320 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-EstebanLorenzano.99.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.492.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1495.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.820.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.21.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.106.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.51.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-EstebanLorenzano.57.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-EstebanLorenzano.35.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-EstebanLorenzano.203.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1152.mcz ToolsTest-StephaneDucasse.denker.37.mcz Traits-EstebanLorenzano.517.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/25/2013 15:27'! update30221 "self new update30221" self withUpdateLog: '10545 Delays do not work properly directly on image startup https://pharo.fogbugz.com/f/cases/10545/Delays-do-not-work-properly-directly-on-image-startup 10817 Spec inspector https://pharo.fogbugz.com/f/cases/10817/ '. self loadTogether: self script320 merge: false. (Process allInstances select: [ :p | | ctx | ctx := p suspendedContext. ctx notNil and: [ ctx method selector == #wait ] ]) do: #terminate. Smalltalk tools initDefaultToolSet. . self flushCaches. ! ! "ScriptLoader30"! !ToolRegistry commentStamp: 'BernardoContreras 1/18/2012 21:44' prior: 53258137! I am serving as a system-wide hub for various tools. Instead of using direct class names for tools, which is not always nice because can introduce inter-package dependencies, i provide a uniform way for accessing tools, via Smalltalk global: Smalltalk tools someToolName, where 'someToolName' is a name of the tool , under which some tool are registered. Tools are adding themselves to registry by implementing #registerToolsOn: message at class side, for example: MyClass>>registerToolsOn: registry registry register: self as: #myTool Registers a MyClass as a tool under name #myTool, and can be accessed via: Smalltalk tools myTool and avoid putting 'MyClass' reference into code. You can add ' self registerToolsOn: Smalltalk tools ' in class #initialize, so your new tool(s) can be registered during package loading. To reset tool registry to defaults , use: Smalltalk resetTools. Also registry storing a map of inspector types. This is to replace an old scheme which using #inspectorClass , and introducing dependencies. Now, an inspecting class dont needs to have any knowledge about its specialized inspector. Instead, a specialized inspector could tell registry that it is available for inspecting instances of given class (see #registerInspector:for: senders). This allows to avoid dependency from instance class to its inspector class or using extension methods. WARNING: The point of the tools registry is NOT to be a facade full of protocols but to be a registration for tools that get loaded. So, the tools registry should NOT hold specific tool's protocol. the tool's client should invoke the correct methods of the tool. ----------- The category 'menu' is for backward compatibility with ToolSet. We should remove it. ! !EyeCollectionInspector methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 14:25' prior: 36482934! objectVariableSize ^ [ self object size ] on: Error do: [ self object basicSize ]! ! !EyeCollectionInspector methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 14:30' prior: 36483062! title ^ super title, ' [', self objectVariableSize asString, ']'! ! !EyeInspectorTest methodsFor: 'as yet unclassified' stamp: 'cb 6/25/2013 13:14' prior: 39300118! instancesToTry ^ { Object new . Class . Metaclass . Array new . Dictionary new . WordArray new. ByteArray new. Color red . thisContext . PluggableTextMorph new . 12 . #symbol . (12.32) . TBehavior . (SmallInteger>>#+) . #(1 2 3) . #[1 2 3] . [ 1 + 2 ] . Error new . (1 << 40) }! ! !EyeInspectorTest methodsFor: 'as yet unclassified' stamp: 'cb 6/25/2013 13:39' prior: 39300377! testErrorRaised | inspector | self instancesToTry do: [ :each | self shouldnt: [ inspector := each inspector ] raise: Error. inspector window close ] ! ! !Inspector class methodsFor: 'instance creation' stamp: 'cb 6/25/2013 13:25' prior: 23673413! openOn: anObject withEvalPane: withEval "Create and schedule an instance of me on the model, anInspector. " ^ self openOn: anObject withEvalPane: withEval withLabel: anObject defaultLabel! ! !EyeDictionaryInspector methodsFor: 'list' stamp: 'ClementBera 6/25/2013 14:42' prior: 36483496! addVariableFields: elements self sortedKeys do: [ :key | elements add: (IndexedEyeElement host: self object index: key)]! ! !EyeDictionaryInspector methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 14:42'! sortedKeys ^ [ self object keys sorted ] on: Error do: [ "case of non sortable keys" self object keys ]! ! !Number methodsFor: 'as yet unclassified' stamp: 'cb 6/25/2013 13:24'! defaultLabel "Answer the default label to be used for an Inspector window on the receiver." ^ super defaultLabel, ': ', self printString! ! !Delay class methodsFor: 'instance creation' stamp: 'CamilloBruni 6/23/2013 13:44' prior: 20636683! forDuration: aDuration "Return a new Delay for the given duration." ^ self forMilliseconds: aDuration asMilliSeconds ! ! !Delay class methodsFor: 'instance creation' stamp: 'CamilloBruni 6/23/2013 13:44' prior: 20637182! forSeconds: aNumber "Return a new Delay for the given number of Seconds" ^ self forMilliseconds: aNumber * 1000 ! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 6/23/2013 13:46' prior: 20640953! handleTimerEvent "Handle a timer event; which can be either: - a schedule request (ScheduledDelay notNil) - an unschedule request (FinishedDelay notNil) - a timer signal (not explicitly specified) We check for timer expiry every time we get a signal." | nowTick nextTick | "Wait until there is work to do." TimingSemaphore wait. "Process any schedule requests" ScheduledDelay ifNotNil: [ "Schedule the given delay" self scheduleDelay: ScheduledDelay. ScheduledDelay := nil ]. "Process any unschedule requests" FinishedDelay ifNotNil: [ self unscheduleDelay: FinishedDelay. FinishedDelay := nil ]. "Check for clock wrap-around." nowTick := Time millisecondClockValue. nowTick < ActiveDelayStartTime ifTrue: [ "clock wrapped" self saveResumptionTimes. self restoreResumptionTimes ]. ActiveDelayStartTime := nowTick. "Signal any expired delays" [ ActiveDelay notNil and:[ nowTick >= ActiveDelay resumptionTime ]] whileTrue: [ ActiveDelay signalWaitingProcess. SuspendedDelays isEmpty ifTrue: [ ActiveDelay := nil ] ifFalse:[ ActiveDelay := SuspendedDelays removeFirst ]]. "And signal when the next request is due. We sleep at most 1sec here as a soft busy-loop so that we don't accidentally miss signals." nextTick := nowTick + 1000. ActiveDelay ifNotNil: [ nextTick := nextTick min: ActiveDelay resumptionTime ]. nextTick := nextTick min: SmallInteger maxVal. "Since we have processed all outstanding requests, reset the timing semaphore so that only new work will wake us up again. Do this RIGHT BEFORE setting the next wakeup call from the VM because it is only signaled once so we mustn't miss it." TimingSemaphore initSignals. Delay primSignal: TimingSemaphore atMilliseconds: nextTick. "This last test is necessary for the obscure case that the msecs clock rolls over after nowTick has been computed (unlikely but not impossible). In this case we'd wait for MillisecondClockMask msecs (roughly six days) or until another delay gets scheduled (which may not be any time soon). In any case, since handling the condition is easy, let's just deal with it" Time millisecondClockValue < nowTick ifTrue:[ TimingSemaphore signal ]. "retry" ! ! !Delay class methodsFor: 'testing' stamp: 'CamilloBruni 6/23/2013 13:47' prior: 20640756! nextWakeUpTime ^ AccessProtect critical: [ ActiveDelay isNil ifTrue: [ 0 ] ifFalse: [ ActiveDelay resumptionTime ]]! ! !Delay class methodsFor: 'snapshotting' stamp: 'CamilloBruni 6/23/2013 13:47' prior: 20638519! restoreResumptionTimes "Private!! Restore the resumption times of all scheduled Delays after a snapshot or clock roll-over. This method should be called only while the AccessProtect semaphore is held." | newBaseTime | newBaseTime := Time millisecondClockValue. SuspendedDelays do: [ :delay | delay adjustResumptionTimeOldBase: 0 newBase: newBaseTime ]. ActiveDelay == nil ifFalse: [ ActiveDelay adjustResumptionTimeOldBase: 0 newBase: newBaseTime ]. ! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 6/23/2013 13:48' prior: 20643228! runTimerEventLoop "Run the timer event loop." [ RunTimerEventLoop ] whileTrue: [ self handleTimerEvent ]! ! !Delay class methodsFor: 'snapshotting' stamp: 'CamilloBruni 6/23/2013 13:48' prior: 20639041! saveResumptionTimes "Private!! Record the resumption times of all Delays relative to a base time of zero. This is done prior to snapshotting or adjusting the resumption times after a clock roll-over. This method should be called only while the AccessProtect semaphore is held." | oldBaseTime | oldBaseTime := Time millisecondClockValue. ActiveDelay == nil ifFalse: [ oldBaseTime < ActiveDelayStartTime ifTrue: [ oldBaseTime := ActiveDelayStartTime ]. "clock rolled over" ActiveDelay adjustResumptionTimeOldBase: oldBaseTime newBase: 0 ]. SuspendedDelays do: [ :delay | delay adjustResumptionTimeOldBase: oldBaseTime newBase: 0 ]. ! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 6/23/2013 13:49' prior: 20643415! scheduleDelay: aDelay "Private. Schedule this Delay." aDelay resumptionTime: Time millisecondClockValue + aDelay delayDuration. "Do the above here, via the high priority timer process to avoid rollover bug due to process pre-emption since the caller cannot use the AccessProtect semaphore." aDelay beingWaitedOn: true. ActiveDelay ifNil: [ ActiveDelay := aDelay ] ifNotNil: [ aDelay resumptionTime < ActiveDelay resumptionTime ifTrue: [ SuspendedDelays add: ActiveDelay. ActiveDelay := aDelay ] ifFalse: [ SuspendedDelays add: aDelay ]] ! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 6/23/2013 13:55' prior: 20644186! startTimerEventLoop "Start the timer event loop" "Delay startTimerEventLoop" self stopTimerEventLoop. AccessProtect := Semaphore forMutualExclusion. ActiveDelayStartTime := Time millisecondClockValue. SuspendedDelays := Heap withAll: (SuspendedDelays ifNil: [ #() ]) sortBlock: [ :delay1 :delay2 | delay1 resumptionTime <= delay2 resumptionTime ]. TimingSemaphore := Semaphore new. RunTimerEventLoop := true. TimerEventLoop := [ self runTimerEventLoop ] newProcess. TimerEventLoop name: 'Delay scheduling process'; priority: Processor timingPriority. TimerEventLoop resume. TimingSemaphore signal. "get going" ! ! !Delay class methodsFor: 'snapshotting' stamp: 'CamilloBruni 6/23/2013 13:57' prior: 20640288! startUp "Restart active delay, if any, when resuming a snapshot." "Compare to false since it can be nil" (DelaySuspended = false) ifTrue:[ ^self error: 'Trying to activate Delay twice' ]. self startTimerEventLoop. DelaySuspended := false. self restoreResumptionTimes. AccessProtect signal. ! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 6/23/2013 13:53' prior: 20645032! unscheduleDelay: aDelay "Private. Unschedule this Delay." aDelay beingWaitedOn ifFalse:[ ^self ]. ActiveDelay == aDelay ifTrue: [ SuspendedDelays isEmpty ifTrue: [ ActiveDelay := nil ] ifFalse: [ ActiveDelay := SuspendedDelays removeFirst ]] ifFalse:[ SuspendedDelays remove: aDelay ifAbsent: []]. aDelay beingWaitedOn: false.! ! !ByteArray class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeByteArrayInspector! ! !Dictionary class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeDictionaryInspector! ! !MethodFinder methodsFor: 'initialize' stamp: 'cb 6/25/2013 13:24' prior: 36270777! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !Debugger methodsFor: 'context stack (message list)' stamp: 'ClementBera 6/25/2013 14:14' prior: 20506485! expandStack "A Notifier is being turned into a full debugger. Show a substantial amount of stack in the context pane." self newStack: (contextStackTop stackOfSize: 20). contextStackIndex := 0. receiverInspector := Inspector inspect: nil. contextVariablesInspector := ContextVariablesInspector inspect: nil. proceedValue := nil! ! !EyeContextInspector methodsFor: 'list' stamp: 'ClementBera 6/25/2013 14:45' prior: 36486246! addVariableFields: elements self tempNames do: [ :name | elements add: (ContextTempEyeElement host: self object tempName: name) ]! ! !EyeContextInspector methodsFor: 'list' stamp: 'ClementBera 6/25/2013 14:46'! tempNames ^ [ self object tempNames ] on: Error do: [ #() ]! ! !SmallDictionary methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeDictionaryInspector! ! !SpecDebugger methodsFor: 'updating' stamp: 'cb 6/25/2013 13:39' prior: 36560719! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver inspector. receiverInspector owner: self.! ! !MethodContext class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeContextInspector! ! !CompiledMethod class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeCompiledMethodInspector! ! !InspectorWrapper class methodsFor: 'instance creation' stamp: 'cb 6/25/2013 13:39' prior: 36502809! inspect: anObject ^ self openInspector: anObject inspector! ! !InspectorWrapper methodsFor: 'actions' stamp: 'cb 6/25/2013 13:39' prior: 36505089! inspect: anObject self inspector: anObject inspector. ! ! !Morph methodsFor: 'as yet unclassified' stamp: 'cb 6/25/2013 13:25'! defaultLabel "Answer the default label to be used" ^ super printString truncateTo: 40! ! !Morph methodsFor: 'utilities' stamp: 'cb 6/25/2013 13:24' prior: 26837322! embedInWindow | window worldToUse | worldToUse := self world. "I'm assuming we are already in a world" window := (SystemWindow labelled: self defaultLabel) model: nil. window bounds: ((self position - ((0@window labelHeight) + window borderWidth)) corner: self bottomRight + window borderWidth). window addMorph: self frame: (0@0 extent: 1@1). window updatePaneColors. worldToUse addMorph: window. window activate! ! !Morph methodsFor: 'initialize' stamp: 'cb 6/25/2013 13:24' prior: 26730064! openInWindow ^self openInWindowLabeled: self defaultLabel ! ! !Integer class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeIntegerInspector! ! !Object methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:33' prior: 28577991! basicInspect "Create and schedule an Inspector in which the user can examine the receiver's variables. This method should not be overriden." ^Smalltalk tools basicInspect: self! ! !Object methodsFor: '*Morphic-Base' stamp: 'cb 6/25/2013 13:23'! defaultLabel "Answer the default label to be used in morphs." ^ self class name! ! !Object methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 9/21/2012 13:53' prior: 28578598! inspect "Create and schedule an Inspector in which the user can examine the receiver's variables." ^ Smalltalk tools inspect: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'SeanDeNigris 1/23/2013 22:22' prior: 28579258! inspectOnce "Inspect unless we have already done it once." Halt isHaltOnceEnabled ifTrue: [ Halt disableHaltOnce. ^ self inspect ].! ! !Object methodsFor: '*Spec-Inspector' stamp: 'IgorStasenko 4/15/2011 17:30' prior: 28579983! inspectWithLabel: aLabel "Create and schedule an Inspector in which the user can examine the receiver's variables." ^Smalltalk tools inspect: self label: aLabel! ! !Object methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:39'! inspector ^ Smalltalk tools inspector: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'ClementBera 6/25/2013 13:57' prior: 28580228! inspectorClass "Answer the class of the inspector to be used on the receiver. Called by inspect; use basicInspect to get a normal (less useful) type of inspector." ^ Smalltalk tools inspectorClass! ! !ToolRegistry commentStamp: 'BernardoContreras 1/18/2012 21:44' prior: 41581670! I am serving as a system-wide hub for various tools. Instead of using direct class names for tools, which is not always nice because can introduce inter-package dependencies, i provide a uniform way for accessing tools, via Smalltalk global: Smalltalk tools someToolName, where 'someToolName' is a name of the tool , under which some tool are registered. Tools are adding themselves to registry by implementing #registerToolsOn: message at class side, for example: MyClass>>registerToolsOn: registry registry register: self as: #myTool Registers a MyClass as a tool under name #myTool, and can be accessed via: Smalltalk tools myTool and avoid putting 'MyClass' reference into code. You can add ' self registerToolsOn: Smalltalk tools ' in class #initialize, so your new tool(s) can be registered during package loading. To reset tool registry to defaults , use: Smalltalk resetTools. Also registry storing a map of inspector types. This is to replace an old scheme which using #inspectorClass , and introducing dependencies. Now, an inspecting class dont needs to have any knowledge about its specialized inspector. Instead, a specialized inspector could tell registry that it is available for inspecting instances of given class (see #registerInspector:for: senders). This allows to avoid dependency from instance class to its inspector class or using extension methods. WARNING: The point of the tools registry is NOT to be a facade full of protocols but to be a registration for tools that get loaded. So, the tools registry should NOT hold specific tool's protocol. the tool's client should invoke the correct methods of the tool. ----------- The category 'menu' is for backward compatibility with ToolSet. We should remove it. ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'cb 6/25/2013 13:34'! basicInspect: anObject "Open an inspector on the given object" | class | class := tools at: #basicInspector ifAbsent: [ ^ self error: 'no inspector found' ]. ^ class basicInspect: anObject ! ! !ToolRegistry methodsFor: 'initialize-release' stamp: 'cb 6/25/2013 13:32' prior: 53263450! initialize "symbols used as keys " tools := IdentityDictionary new. self initDefaultToolSet! ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'ClementBera 6/25/2013 13:59' prior: 53260547! inspect: anObject "Open an inspector on the given object" ^ self inspectorClass inspect: anObject ! ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'cb 6/25/2013 13:36' prior: 53261032! inspect: anObject label: aString self flag: #FIXME. "should consider the label here" ^ self inspect: anObject ! ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'ClementBera 6/25/2013 13:58'! inspector: anObject "Open an inspector on the given object" ^ self inspectorClass inspector: anObject ! ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'ClementBera 6/25/2013 13:58'! inspectorClass ^ tools at: #inspector ifAbsent: [ ^ self error: 'no inspector found' ] ! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 6/25/2013 14:26' prior: 36487640! inspect: anObject InspectorWrapper openInspector: (self inspector: anObject). ^ anObject! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'cb 6/25/2013 13:37' prior: 36563015! inspector: anObject ^ anObject class inspectorClass new inspect: anObject; yourself! ! !EyeInspector class methodsFor: 'tools registry' stamp: 'ClementBera 6/25/2013 14:03'! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self as: #inspector; register: self as: #basicInspector. ! ! !EyeInspector methodsFor: 'list' stamp: 'ClementBera 6/25/2013 13:56' prior: 36491597! generateElements "generate the collection of elements to show in the inspector for the object inspected" |elements| elements := OrderedCollection new. self addSelf: elements. self addAllInstVars: elements. self addSpecialFields: elements. self addInstancesVariable: elements. self addVariableFields: elements. ^elements! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 6/25/2013 14:56' prior: 38517853! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged: The mementos instances variables are used for diving" object := nil asValueHolder. super initialize. self whenWindowChanged: [ :myWindow | myWindow whenClosedDo: [ self close ] ].! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 6/25/2013 14:51' prior: 36497406! refresh "refresh the object in the inspector, updating his modified instance variables" description hasUnacceptedEdits ifTrue: [ ^ self ]. description getSelection size = 0 ifTrue: [ self printDescription ]! ! !Set class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeSetInspector! ! !Collection class methodsFor: '*Spec-Inspector' stamp: 'cb 6/25/2013 13:43'! inspectorClass ^ EyeCollectionInspector! ! Collection class removeSelector: #eyeClass! Set removeSelector: #inspectorClass! Set class removeSelector: #eyeClass! EyeInspector removeSelector: #initialExtent! Object removeSelector: #ogle! Object removeSelector: #inspectUntilCount:! Object removeSelector: #inspectOnCount:! Object removeSelector: #eyeInspector! Object removeSelector: #eyeClass! Object removeSelector: #doExpiredInspectCount! Object removeSelector: #defaultLabelForInspector! Object class removeSelector: #eyeClass! WeakSetInspector class removeSelector: #registerToolsOn:! OrderedCollectionInspector class removeSelector: #registerToolsOn:! Integer removeSelector: #inspectorClass! Integer class removeSelector: #eyeClass! Morph removeSelector: #defaultLabelForInspector! CompiledMethodInspector class removeSelector: #registerToolsOn:! AIContext removeSelector: #inspectorClass! OrderedCollection removeSelector: #inspectorClass! CompiledMethod removeSelector: #inspectorClass! CompiledMethod class removeSelector: #eyeClass! MethodContext removeSelector: #inspectorClass! MethodContext class removeSelector: #eyeClass! SmallDictionary removeSelector: #eyeClass! ToolRegistry removeSelector: #registerInspector:for:! ToolRegistry removeSelector: #inspectorClassOf:! WeakSet removeSelector: #inspectorClass! Dictionary removeSelector: #inspectorClass! Dictionary class removeSelector: #eyeClass! DictionaryInspector class removeSelector: #registerToolsOn:! ByteArray class removeSelector: #eyeClass! Number removeSelector: #defaultLabelForInspector! Float removeSelector: #inspectorClass! SetInspector class removeSelector: #registerToolsOn:! MCTool removeSelector: #defaultLabel! ContextInspector class removeSelector: #registerToolsOn:! "AST-Interpreter-Core"! "Kernel"! "MonticelloGUI"! "Morphic-Base"! "Spec-Debugger"! "Spec-Inspector"! "System-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(25 June 2013 3:31:15 pm) Pharo.image priorSource: 8016035! ----STARTUP----an Array(25 June 2013 3:39:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 June 2013 3:39:23 pm) Pharo-30221.image priorSource: 8059995! ----STARTUP----an Array(26 June 2013 1:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/26/2013 13:16' prior: 41570770! commentForCurrentUpdate ^ '11017 Eye inspector and Object explorer not compatible https://pharo.fogbugz.com/f/cases/11017 11012 Object>>isComplex is related to complex number https://pharo.fogbugz.com/f/cases/11012 11016 Failing Inspector Tests https://pharo.fogbugz.com/f/cases/11016 11020 Setting an upper limit for HandMorph while dragging https://pharo.fogbugz.com/f/cases/11020 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/26/2013 13:16'! script321 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-EstebanLorenzano.99.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.134.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.605.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.492.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.39.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1496.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.820.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.22.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.106.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-EstebanLorenzano.164.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.87.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.25.mcz Spec-Core-MarcusDenker.132.mcz Spec-Debugger-EstebanLorenzano.57.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-EstebanLorenzano.203.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1154.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-EstebanLorenzano.517.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/26/2013 13:16'! update30222 "self new update30222" self withUpdateLog: '11017 Eye inspector and Object explorer not compatible https://pharo.fogbugz.com/f/cases/11017 11012 Object>>isComplex is related to complex number https://pharo.fogbugz.com/f/cases/11012 11016 Failing Inspector Tests https://pharo.fogbugz.com/f/cases/11016 11020 Setting an upper limit for HandMorph while dragging https://pharo.fogbugz.com/f/cases/11020 '. self loadTogether: self script321 merge: false. (Process allInstances select: [ :proc| proc name beginsWith: 'every 0:00:00:01 do: [' ]) do: #terminate. . self flushCaches. ! ! "ScriptLoader30"! !Morph commentStamp: 'efc 2/26/2003 20:01' prior: 26582072! A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30. Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method. The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain. My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly. Structure: instance var Type Description bounds Rectangle A Rectangle indicating my position and a size that will enclose me. owner Morph My parent Morph, or nil for the top-level Morph, which is a or nil world, typically a PasteUpMorph. submorphs Array My child Morphs. fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs. color Color My primary color. Subclasses can use this in different ways. extension MorphExtension Allows extra properties to be stored without adding a or nil storage burden to all morphs. By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning. Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.! !HandMorph commentStamp: '' prior: 23212383! The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging. There is some minimal support for multiple hands in the same world.! !PolymorphSystemSettings class methodsFor: 'desktop' stamp: 'BenjaminVanRyseghem 6/25/2013 20:16' prior: 29813121! setDesktopLogoWith: aMorph self desktopLogo ifNotNil: [self desktopLogo delete]. self desktopLogo: aMorph. self desktopLogo ifNotNil: [ self desktopLogo openInWorld; top: HandMorph upperHandLimit; beSticky; lock; goBehind]! ! !EyeInspectorTest methodsFor: 'accessing' stamp: 'cb 6/25/2013 13:14' prior: 41583884! instancesToTry ^ { Object new . Class . Metaclass . Array new . Dictionary new . WordArray new. ByteArray new. Color red . thisContext . PluggableTextMorph new . 12 . #symbol . (12.32) . TBehavior . (SmallInteger>>#+) . #(1 2 3) . #[1 2 3] . [ 1 + 2 ] . Error new . (1 << 40) }! ! !EyeInspectorTest methodsFor: 'tests' stamp: 'CamilloBruni 6/25/2013 16:34' prior: 41584300! testErrorRaised | inspector | self instancesToTry do: [ :each | self shouldnt: [ inspector := each inspector ] raise: Error. inspector close ] ! ! !ObjectExplorer methodsFor: 'error handling' stamp: 'ClementBera 6/25/2013 17:07' prior: 28664153! doesNotUnderstand: aMessage inspector ifNotNil: [ (inspector respondsTo: aMessage selector) ifTrue: [ ^ inspector perform: aMessage selector withArguments: aMessage arguments ] ]. ^ super doesNotUnderstand: aMessage! ! !ObjectExplorer methodsFor: 'menus' stamp: 'ClementBera 6/25/2013 17:04' prior: 28665309! explorerKey: aChar from: view currentSelection ifNotNil: [ self updateInspector. aChar == $i ifTrue: [^ self inspectSelection]. aChar == $I ifTrue: [^ self exploreSelection]. aChar == $b ifTrue: [^ inspector selectedObject browse]. aChar == $h ifTrue: [^ self systemNavigation browseHierarchy: inspector selectedObject class]. aChar == $c ifTrue: [^ inspector selectedElement copyAccessorCode]. ]. ^ self arrowKey: aChar from: view! ! !ObjectExplorer methodsFor: 'menus' stamp: 'ClementBera 6/25/2013 16:44' prior: 28666206! genericMenu: aMenu "Borrow a menu from my inspector" | menu | currentSelection ifNil: [menu := aMenu. menu add: '*nothing selected*' target: self selector: #yourself] ifNotNil: [ self updateInspector. aMenu defaultTarget: inspector. inspector inspectionMenu: aMenu. aMenu items do: [:item | (#(#inspectSelection #exploreSelection #referencesToSelection #defsOfSelection #explorePointers #exploreStrongPointers) includes: item selector) ifTrue: [item target: self]]. aMenu addLine; add: 'monitor changes' target: self selector: #monitor: argument: currentSelection]. monitorList isEmptyOrNil ifFalse: [aMenu addLine; add: 'stop monitoring all' target: self selector: #stopMonitoring]. ^ aMenu! ! !ObjectExplorer methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 17:06'! updateInspector inspector := self parentObject inspector. inspector selectedObject: self object. inspector close.! ! !Morph commentStamp: 'efc 2/26/2003 20:01' prior: 41625986! A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30. Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method. The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain. My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly. Structure: instance var Type Description bounds Rectangle A Rectangle indicating my position and a size that will enclose me. owner Morph My parent Morph, or nil for the top-level Morph, which is a or nil world, typically a PasteUpMorph. submorphs Array My child Morphs. fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs. color Color My primary color. Subclasses can use this in different ways. extension MorphExtension Allows extra properties to be stored without adding a or nil storage burden to all morphs. By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning. Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.! !Morph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 18:27'! announcer ^ announcer ifNil: [ announcer := Announcer new ].! ! !Morph methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 6/25/2013 18:40' prior: 26631365! announceKeyboardFocusChange: gotFocus | announcement | announcement := gotFocus ifTrue: [ MorphGotFocus morph: self ] ifFalse: [ MorphLostFocus morph: self ]. self announcer announce: announcement. Morph announcer announce: announcement.! ! !HandMorph commentStamp: '' prior: 41627704! The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging. There is some minimal support for multiple hands in the same world.! !HandMorph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:43'! upperHandLimit ^ UpperHandLimit ifNil: [ UpperHandLimit := 0 ]! ! !HandMorph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:45'! upperHandLimit: anInteger UpperHandLimit := anInteger! ! !HandMorph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:43' prior: 23235584! handleEvent: anEvent | evt | owner ifNil:[^self]. evt := anEvent. self logEventStats: evt. evt isMouse ifTrue:[ "just for record, to be used by capture block" lastMouseEvent := evt]. captureBlock ifNotNil: [ ^ captureBlock value: anEvent ]. evt isMouseOver ifTrue:[^self sendMouseEvent: evt]. self showDebugEvent: evt. "Notify listeners" self sendListenEvent: evt to: self eventListeners. evt isWindowEvent ifTrue: [ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isKeyboard ifTrue:[ self sendListenEvent: evt to: self keyboardListeners. self sendKeyboardEvent: evt. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isDropEvent ifTrue:[ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isMouse ifTrue:[ self sendListenEvent: evt to: self mouseListeners. lastMouseEvent := evt]. "Check for pending drag or double click operations." mouseClickState ifNotNil:[ (mouseClickState handleEvent: evt from: self) ifFalse:[ "Possibly dispatched #click: or something and will not re-establish otherwise" ^self mouseOverHandler processMouseOver: lastMouseEvent]]. evt isMove ifTrue:[ | pos | pos := evt position. evt isDraggingEvent ifTrue: [ | treshold | treshold := 0. (self submorphs at: 1 ifAbsent: [ nil ]) ifNotNil: [ :first | treshold := self top-first top ]. pos y < (self class upperHandLimit+treshold) ifTrue: [ pos := pos x @ (self class upperHandLimit + treshold)] ]. self position: pos. self sendMouseEvent: evt. ] ifFalse:[ "Issue a synthetic move event if we're not at the position of the event" (evt position = self position) ifFalse:[self moveToEvent: evt]. "Drop submorphs on button events" (self hasSubmorphs) ifTrue:[self dropMorphs: evt] ifFalse:[self sendMouseEvent: evt]. ]. self showMouseFocusEvent: evt. self mouseOverHandler processMouseOver: lastMouseEvent. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 16:52' prior: 36498962! selectedElement ^ list selectedItem ifNil: [ "sometimes the new list model desynchronize its selected index from its selected element, this mean that the inspector evaluates 'list setSelectedIndex: 1' but 'list selectedItem' still returns nil. This code fixes this case, that is triggered for example when you do Cmd+c in an ObjectExplorer." list selectedIndex ifNotNil: [ :currentIndex | list listItems at: currentIndex ] ]! ! !EyeInspector methodsFor: 'accessing' stamp: 'ClementBera 6/25/2013 17:06'! selectedObject: anObject "Sets the selectedElement of the inspector to anObject. If anObject is not in the list, then sets the selectedElement to 1" list setSelectedIndex: 1. list listItems withIndexDo: [ :item :index | item value == anObject ifTrue: [ list setSelectedIndex: index ] ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 6/25/2013 16:41' prior: 36500465! updateList "update the list of elements displayed according to the new object" |elements| elements := self generateElements. "first reset the items to make sure we don't interfere with the display block" list items: #(). list displayBlock: [ :e :index | (elements at: index ifAbsent: [ InstanceVariableEyeElement host: nil ]) label ]. list items: elements. list menu: [ :aMenu | self inspectionMenu: aMenu ]. ! ! WeakSetInspectorTest removeSelector: #testSymbolTableM6812! Smalltalk globals removeClassNamed: #WeakSetInspectorTest! Object removeSelector: #isComplex! "Kernel"! "Morphic-Base"! "Settings-Polymorph"! "Spec-Inspector"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(26 June 2013 1:20:43 pm) Pharo.image priorSource: 8060193! ----STARTUP----an Array(26 June 2013 1:29:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 June 2013 1:29:11 pm) Pharo-30222.image priorSource: 8083002! ----STARTUP----an Array(26 June 2013 1:52:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/26/2013 13:49' prior: 41614921! commentForCurrentUpdate ^ '10950 Smart Suggestions should use Opal for parsing https://pharo.fogbugz.com/f/cases/10950 11025 Integrate the new version of the debugger https://pharo.fogbugz.com/f/cases/11025 11001 reduce shadowed args https://pharo.fogbugz.com/f/cases/11001 11002 #cleanUpProcesses in ImageCleaner? https://pharo.fogbugz.com/f/cases/11002'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/26/2013 13:50'! script322 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-IgorStasenko.39.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-IgorStasenko.30.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.607.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1497.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.820.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.22.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.134.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/26/2013 13:50'! update30223 "self new update30223" self withUpdateLog: '10950 Smart Suggestions should use Opal for parsing https://pharo.fogbugz.com/f/cases/10950 11025 Integrate the new version of the debugger https://pharo.fogbugz.com/f/cases/11025 11001 reduce shadowed args https://pharo.fogbugz.com/f/cases/11001 11002 #cleanUpProcesses in ImageCleaner? https://pharo.fogbugz.com/f/cases/11002'. self loadTogether: self script322 merge: false. ImageCleaner new cleanUpProcesses. self flushCaches. ! ! "ScriptLoader30"! !SugsInlineTemporary commentStamp: '' prior: 0! This inline a variable in an assignment sentence! !SugsSuggestionFactory commentStamp: '' prior: 38373084! I'm the guy who knows how to create the suggestions. I also categorize them.! !LeafNode methodsFor: 'private' stamp: 'MarcusDenker 6/24/2013 11:25' prior: 24348169! code: argIndex type: type argIndex isNil ifTrue: [^type negated]. (CodeLimits at: type) > argIndex ifTrue: [^(CodeBases at: type) + argIndex]. ^type * 256 + argIndex! ! !StringTest methodsFor: 'tests - line breaking' stamp: 'MarcusDenker 6/24/2013 11:09' prior: 51307928! testLinesDoWithCr | myString | myString := 'This is a test of line breaking', String cr. myString linesDo: [ :line | self assert: ((line size + 1) = myString size)]! ! !StringTest methodsFor: 'tests - line breaking' stamp: 'MarcusDenker 6/24/2013 11:09' prior: 51308197! testLinesDoWithCrBetween | aString | aString := ' This is a test ', String cr,'of line breaking'. aString linesDo: [ :line | self assert: ((line size) = 16)]! ! !StringTest methodsFor: 'tests - line breaking' stamp: 'MarcusDenker 6/24/2013 11:10' prior: 51308464! testLinesDoWithCrLf | aString | aString := 'This is a test of line breaking', String crlf. aString linesDo: [ :line | self assert: ((line size + 2) = aString size)]! ! !StringTest methodsFor: 'tests - line breaking' stamp: 'MarcusDenker 6/24/2013 11:10' prior: 51308737! testLinesDoWithCrLfBetween | aString | aString := '-This is a test-', String crlf,'of line breaking'. aString linesDo: [ :line | self assert: ((line size) = 16)]! ! !StringTest methodsFor: 'tests - converting' stamp: 'MarcusDenker 6/24/2013 11:11' prior: 51242401! testWriteStreamConvertsToWideString | oldWideString newString ws | "test that a write stream on a ByteString is autoconverted into a WideString if a Wide character is inserted into it" oldWideString := (WideString new: 1) wordAt: 1 put: 20984060; yourself. newString := (String new: oldWideString size). ws := string writeStream. oldWideString do: [:each | ws nextPut: each]. self assert: (newString = oldWideString).! ! !SugsInlineTemporary commentStamp: '' prior: 41648825! This inline a variable in an assignment sentence! !SugsInlineTemporary methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 6/12/2013 11:50'! execute (NautilusRefactoring model: context) inlineTemporaryBetween: context selectedInterval from: context selectedMethod! ! !SugsInlineTemporary methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 6/12/2013 11:50'! label ^'Inline temporary' translated! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 6/10/2013 15:54'! locateClosureHomeWithContent: aText "In case the current context is a BlockContext locate the closureHome and ask the user to validate the new context. If closureHome is not found or the user does not validate the new context, return nil. aText is the new content of the current context. If the current context is not a BlockContext return it." | closureHome | context isBlockContext ifTrue: [ closureHome := context activeHome. closureHome ifNil: [ self blockNotFoundDialog: context method with: aText. ^ nil ]. (self confirm: 'I will have to revert to the method from\which this block originated. Is that OK?' withCRs) ifFalse: [ ^ nil ]. ^ closureHome]. ^ context! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'AndreiChis 6/3/2013 14:25'! recompileCurrentMethodTo: aText notifying: aNotifyer | classOfMethod selector | classOfMethod := self selectedClass. selector := classOfMethod compiler parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName isDoIt) and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [ self inform: 'can''t change selector'. ^ nil]. selector := classOfMethod compile: aText classified: self selectedMessageCategoryName notifying: aNotifyer. selector isNil ifFalse: [ ^ classOfMethod compiledMethodAt: selector. ] ifTrue: [ ^ nil ] ! ! !RBAssignmentNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 6/12/2013 13:49'! specialCommands ^ SugsSuggestionFactory commandsForAssignment.! ! !RBProgramNode methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 6/12/2013 11:35'! suggestions ^SugsSuggestionFactory globalCommands addAll: self specialCommands; yourself ! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 6/4/2013 16:16' prior: 34291758! contextChanged self triggerEvent: #contextChanged! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 6/4/2013 16:14' prior: 34293550! implement: aMessage inClass: aClass aClass compile: (DynamicMessageImplementor for: aMessage in: aClass) value classified: (self askForCategoryIn: aClass default: 'as yet unclassified'). self context privRefreshWith: (aClass lookupSelector: aMessage selector). self context method numArgs > 0 ifTrue: [(self context tempAt: 1) arguments withIndexDo: [:arg :index| self context tempAt: index put: arg]]. self contextChanged ! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 6/4/2013 15:24'! installAlarm: aSelector self installAlarm: aSelector withArgument: #()! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 6/4/2013 14:38'! installAlarm: aSelector withArgument: args World addAlarm: aSelector withArguments: args for: self at: Time millisecondClockValue + 200! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 6/10/2013 15:53'! recompileMethodTo: text inContext: selectedContext notifying: aNotifyer "The retrieved information has changed and its source must now be updated. In this case, the retrieved information is the method of the given context." | newMethod recompilationContext | (recompilationContext := (self createModelForContext: selectedContext) locateClosureHomeWithContent: text) ifNil: [ ^ false ]. newMethod := (self createModelForContext: recompilationContext) recompileCurrentMethodTo: text notifying: aNotifyer. newMethod ifNil: [ ^ false ]. newMethod isQuick ifTrue: [ recompilationContext := self downInContext: recompilationContext. recompilationContext jump: (recompilationContext previousPc - recompilationContext pc) ]. self rewindContextToMethod: newMethod fromContext: recompilationContext. "Use an alarm instead of triggering the notification directly, as the content of the editor can still be unaccepted. " self installAlarm: #contextChanged. ^ true! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 6/24/2013 12:42'! cleanUpProcesses (Process allInstances reject: [ :p | {(InputEventFetcher default fetcherProcess). (Processor activeProcess). (WeakArray runningFinalizationProcess). (Processor backgroundProcess). (SmalltalkImage current lowSpaceWatcherProcess). (UIManager default uiProcess). (Delay schedulingProcess)} includes: p ]) do: [ :p | p suspend; terminate ] ! ! !TClass methodsFor: 'class variables' stamp: 'MarcusDenker 6/24/2013 11:04' prior: 40978510! classVarNamed: aString "Answer the content of the Class Variable" ^self classPool at: aString asSymbol ifAbsent: [self error: 'no such lass var']! ! !TClass methodsFor: 'class variables' stamp: 'MarcusDenker 6/24/2013 11:05' prior: 40978722! classVarNamed: aString put: anObject "Store anObject in the class variable." | symbol | symbol := aString asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! !SHParserST80 methodsFor: 'parse' stamp: 'MarcusDenker 6/24/2013 11:23' prior: 32529292! parse: aBoolean self initializeInstanceVariables. sourcePosition := 1. arguments := Dictionary new. temporaries := Dictionary new. blockDepth := bracketDepth := 0. ranges isNil ifTrue: [ranges := OrderedCollection new: 100] ifFalse: [ranges reset]. errorBlock := [^ false]. [self scanNext. aBoolean ifTrue: [self parseMessagePattern. self parsePragmaSequence]. self parseMethodTemporaries. aBoolean ifTrue: [self parsePragmaSequence]. self parseStatementList. currentToken ifNotNil: [self error]] ensure: [errorBlock := nil]. ^ true! ! !TCopySequenceableWithReplacement methodsFor: 'tests - copying with replacement' stamp: 'MarcusDenker 6/24/2013 11:24' prior: 51899764! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !TCopySequenceableWithReplacement methodsFor: 'tests - fixture' stamp: 'MarcusDenker 6/24/2013 11:29' prior: 51907182! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 6/3/2013 15:12' prior: 36713706! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorWrapper). (#contextInspector -> #EyeDebuggerContextInspector)}. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self setStackMenu. self setFocusOrder! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 6/3/2013 15:56'! recompileMethodTo: aString inContext: aContext notifying: aNotifyer ^ aContext ifNil: [ false ] ifNotNil: [ self session recompileMethodTo: aString inContext: aContext notifying: aNotifyer ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 6/4/2013 16:14' prior: 34269243! registerActionsForSession: aSession aSession ifNotNil: [ aSession when: #restart send: #updateRestart to: self; when: #resume send: #updateResume to: self; when: #stepInto send: #updateStepInto to: self; when: #stepOver send: #updateStepOver to: self; when: #stepThrough send: #updateStepThrough to: self; when: #contextChanged send: #updateContextChanged to: self ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 6/4/2013 16:14' prior: 34269716! removeActionsForSession: aSession aSession ifNotNil: [ aSession removeActionsForEvent: #restart; removeActionsForEvent: #resume; removeActionsForEvent: #stepInto; removeActionsForEvent: #stepOver; removeActionsForEvent: #stepThrough; removeActionsForEvent:#contextChanged ]. ! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 6/4/2013 16:18' prior: 34271736! updateContextChanged |selection| selection := self stack selectedItem. self updateStep. self stack setSelectedItem: selection! ! !AddMethodDescription class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/24/2013 11:04' prior: 17481727! category: mycategory source: source ^ self new category: mycategory; source: source; yourself! ! !Encoder methodsFor: 'encoding' stamp: 'MarcusDenker 6/24/2013 11:12' prior: 21169219! encodeSelector: aSelector ^self name: aSelector key: aSelector class: SelectorNode type: SendType set: selectorSet! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 6/18/2013 14:31' prior: 35705632! testFindBestNodeForTemporaryVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext tempVarContext . self assert: node isTemp.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 6/12/2013 13:52'! testSuggestionForAAssigmentNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext assigmentContext. expected := SugsSuggestionFactory commandsForAssignment. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !RGClassDefinition methodsFor: 'class variables' stamp: 'MarcusDenker 6/24/2013 11:04' prior: 31590922! classVarNamed: aString ^classVariables detect:[ :v| v name = aString asSymbol ] ifNone:[ nil ]! ! !Heap class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/24/2013 11:12' prior: 23308058! withAll: aCollection sortBlock: aBlock "Create a new heap with all the elements from aCollection" ^(self basicNew) setCollection: aCollection asArray copy tally: aCollection size; sortBlock: aBlock; yourself! ! !TimeProfiler methodsFor: 'UI specific' stamp: 'MarcusDenker 6/24/2013 11:08' prior: 53159489! fullReportMenu: aMenuMorph shift: aBoolean ^ (PragmaMenuBuilder pragmaKeyword: 'TimeProfilerFullReportMenu' model: self) menu ! ! !ParseNode methodsFor: 'encoding' stamp: 'MarcusDenker 6/24/2013 11:13' prior: 29098166! encodeSelector: aSelector ^nil! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 6/12/2013 13:53'! assigmentContext ^ self new selectorToUse: #withAssigment; yourself.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/12/2013 13:56' prior: 35729499! interval: selector selector = #withLiteral ifTrue:[^ 18 to: 17]. selector = #withSelf ifTrue:[^ 13 to: 13]. selector = #withSuper ifTrue:[^ 13 to: 13]. selector = #withClass ifTrue:[^ 15 to: 16]. selector = #withClassVariable ifTrue:[^ (27 to: 26)]. selector = #withMethod ifTrue:[^ 6 to: 5]. selector = #withMesage ifTrue:[^ 21 to: 23]. selector = #withClassVariable ifTrue:[^ 15 to: 16]. selector = #withTemporaryVar ifTrue:[^ 63 to: 62]. selector = #withInstanceVar ifTrue:[^ 18 to: 30]. selector = #withSourceContext ifTrue:[^ 39 to: 68]. selector = #withAssigment ifTrue:[^ 26 to: 35]. ^selectedInterval ! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/12/2013 13:53'! withAssigment |temp| temp := 10. ^temp! ! !SugsMenuBuilder class methodsFor: 'private' stamp: 'GiselaDecuzzi 6/18/2013 14:32' prior: 39427224! findBestNodeFor: context | root node| root := OpalCompiler new source: context code; useFaultyForParsing: true; parse. context selectedClass ifNotNil: [:theClass| root methodNode methodClass: theClass]. root doSemanticAnalysis. node := root bestNodeFor: context selectedInterval. context selectedNode: node. ^node.! ! !SugsMenuBuilder class methodsFor: 'suggestions' stamp: 'GiselaDecuzzi 6/12/2013 10:19' prior: 38372645! findSuggestionsFor: context "Finds the best suggestions for the context passed as a parameter" | node suggestions | node := self findBestNodeFor: context . node ifNil: [ ^OrderedCollection new ]. suggestions := node ifNotNil: [ node suggestions ]. suggestions do:[:sugg| sugg context: context]. ^suggestions select: [:sugg | sugg isValidForContext ] ! ! !InputEventSensor methodsFor: 'private events' stamp: 'MarcusDenker 6/24/2013 11:18' prior: 23642985! mapButtons: buttons modifiers: anInteger "Map the buttons to yellow or blue based on the given modifiers. If only the red button is pressed, then map Ctrl-RedButton -> BlueButton. Cmd-RedButton -> YellowButton. " (buttons = RedButtonBit) ifFalse:[^buttons]. (anInteger allMask: CtrlKeyBit) ifTrue:[^BlueButtonBit]. (anInteger allMask: CommandKeyBit) ifTrue:[^YellowButtonBit]. ^buttons! ! !SpecPragmaCollector class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/24/2013 11:16' prior: 50732129! behavior: aBehavior ^ self new behavior: aBehavior; yourself! ! !SugsSuggestionFactory commentStamp: '' prior: 41648944! I'm the guy who knows how to create the suggestions. I also categorize them.! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 6/12/2013 13:31'! collectorForAssignment ^ collectorForAssignment ifNil: [collectorForAssignment := self createCollector: #assignmentCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'assignment' stamp: 'GiselaDecuzzi 6/12/2013 13:48'! commandsForAssignment ^self collectCommandsFrom: self collectorForAssignment.! ! !SugsSuggestionFactory class methodsFor: 'assignment' stamp: 'GiselaDecuzzi 6/12/2013 12:50'! createInlineTemporary ^ SugsInlineTemporary icon: Smalltalk ui icons smallLanguageIcon position: 10 ! ! !SugsSuggestionFactory class methodsFor: 'private' stamp: 'GiselaDecuzzi 6/12/2013 10:18'! globalCollector ^ collectorForAll ifNil: [collectorForAll := self createCollector: #globalCommand]. ! ! !SugsSuggestionFactory class methodsFor: 'global' stamp: 'GiselaDecuzzi 6/12/2013 10:18'! globalCommands ^self collectCommandsFrom: self globalCollector.! ! !TextModel methodsFor: 'protocol-events' stamp: 'MarcusDenker 6/24/2013 11:09' prior: 52751603! whenAboutToStyleChanged: aBlock "Set a block to perform when the about to style block changed" self whenAboutToStyleBlockChanged: [:block :old :announcement :anAnnouncer | aBlock cull: (block value) cull: old cull: announcement cull: anAnnouncer ]! ! !ASTBlockClosure methodsFor: 'evaluating' stamp: 'MarcusDenker 6/24/2013 11:03' prior: 35462112! valueWithPossibleArgs: anArray | numberOfArgs | numberOfArgs := self numArgs. numberOfArgs = 0 ifTrue: [ ^ self value ]. numberOfArgs = anArray size ifTrue: [ ^ self valueWithArguments: anArray ]. numberOfArgs > anArray size ifTrue: [ ^ self valueWithArguments: anArray , (Array new: numberOfArgs - anArray size) ]. ^ self valueWithArguments: (anArray copyFrom: 1 to: numberOfArgs)! ! DebugContext removeSelector: #recompileCurrentMethodTo:! DebugContext removeSelector: #locateClosureHome! SugsContextTest removeSelector: #testContextForRubricItsARubricContext! SugsContextTest removeSelector: #rubricInstance! SugsRubricContext removeSelector: #sourceTextArea! SugsRubricContext removeSelector: #selectedMethod! SugsRubricContext removeSelector: #selectedInterval! SugsRubricContext removeSelector: #selectedClass! SugsRubricContext removeSelector: #code! Smalltalk globals removeClassNamed: #SugsRubricContext! DebugSession removeSelector: #recompileMethodTo:inContext:! SpecDebugger removeSelector: #recompileMethodTo:inContext:! !Trait method! classVarNamed: aString "Answer the content of the Class Variable" ^self classPool at: aString asSymbol ifAbsent: [self error: 'no such lass var']! ! !Trait method! classVarNamed: aString put: anObject "Store anObject in the class variable." | symbol | symbol := aString asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! "AST-Interpreter-Core"! "Collections-Sequenceable"! "CollectionsTests"! "Compiler"! "DebuggerModel"! "Kernel"! "Ring-Core-Kernel"! "Shout"! "SmartSuggestions"! "Spec-Builder"! "Spec-Core"! "Spec-Debugger"! "Spec-Widgets"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(26 June 2013 1:53:16 pm) Pharo.image priorSource: 8083200! ----STARTUP----an Array(26 June 2013 2:01:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 June 2013 2:01:38 pm) Pharo-30223.image priorSource: 8121505! ----STARTUP----an Array(27 June 2013 2:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/27/2013 13:58' prior: 41637931! commentForCurrentUpdate ^ '10971 Small cleaning related to complex numbers https://pharo.fogbugz.com/f/cases/10971/Small-cleaning-related-to-complex-numbers 11003 Remove Object >> #is: https://pharo.fogbugz.com/f/cases/11003/Remove-Object-is 11027 Update GemstoneRepository to gemtalksystemsRepository https://pharo.fogbugz.com/f/cases/11027/Update-GemstoneRepository-to-gemtalksystemsRepository '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/27/2013 13:58'! script323 ^ 'AST-Core-MarcusDenker.170.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.607.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1499.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.22.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.134.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/27/2013 13:59'! update30224 "self new update30224" self withUpdateLog: '10971 Small cleaning related to complex numbers https://pharo.fogbugz.com/f/cases/10971/Small-cleaning-related-to-complex-numbers 11003 Remove Object >> #is: https://pharo.fogbugz.com/f/cases/11003/Remove-Object-is 11027 Update GemstoneRepository to gemtalksystemsRepository https://pharo.fogbugz.com/f/cases/11027/Update-GemstoneRepository-to-gemtalksystemsRepository '. self loadTogether: self script323 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCGemstoneRepository class methodsFor: 'accessing' stamp: 'CamilloBruni 6/26/2013 13:37' prior: 24798835! baseURL ^ 'http://ss3.gemtalksystems.com/ss/'! ! !MCGemstoneRepository class methodsFor: 'testing' stamp: 'CamilloBruni 6/26/2013 13:37' prior: 34496254! isResponsibleFor: aUrl ^ (aUrl includesSubstring: 'ss3.gemstone.com/') or: [ aUrl includesSubstring: 'ss3.gemtalksystems.com/' ]! ! Object removeSelector: #is:! Number removeSelector: #arg! AthensCairoMatrix removeSelector: #is:! GradientPaint removeSelector: #is:! "Athens-Cairo"! "Athens-Core"! "Kernel"! "Monticello"! ----End fileIn----! ----QUIT----an Array(27 June 2013 2:06:10 pm) Pharo.image priorSource: 8121703! ----STARTUP----an Array(27 June 2013 2:14:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 June 2013 2:14:15 pm) Pharo-30224.image priorSource: 8133512! ----STARTUP----an Array(27 June 2013 5:03:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/27/2013 17:00' prior: 41676435! commentForCurrentUpdate ^ '11044 Undeclare ref to ConfigurationOfAthens https://pharo.fogbugz.com/f/cases/11044 11041 CompiledMethod class>>#cleanUp should embedd source in trailer https://pharo.fogbugz.com/f/cases/11041 11028 Fix a failing string test https://pharo.fogbugz.com/f/cases/11028 11045 Cannot use isSuper on RBProgramNode https://pharo.fogbugz.com/f/cases/11045'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/27/2013 17:00'! script324 ^ 'AST-Core-MarcusDenker.171.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1501.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.22.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.134.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/27/2013 16:29' prior: 40189861! update30209 "self new update30209" Gofer it smalltalkhubUser: 'Pharo' project: 'Athens'; configuration; load. "ConfigurationOfAthens loadDevelopment." . self withUpdateLog: '10975 integrate athens https://pharo.fogbugz.com/f/cases/10975/integrate-athens '. self loadTogether: self script308 merge: false. ScriptLoader new unloadPackageNamed: 'ConfigurationOfAthens'; cleanRepositories. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/27/2013 17:00'! update30225 "self new update30225" self withUpdateLog: '11044 Undeclare ref to ConfigurationOfAthens https://pharo.fogbugz.com/f/cases/11044 11041 CompiledMethod class>>#cleanUp should embedd source in trailer https://pharo.fogbugz.com/f/cases/11041 11028 Fix a failing string test https://pharo.fogbugz.com/f/cases/11028 11045 Cannot use isSuper on RBProgramNode https://pharo.fogbugz.com/f/cases/11045'. self loadTogether: self script324 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBProgramNode methodsFor: 'testing' stamp: 'MarcusDenker 6/27/2013 16:59'! isSuper ^false! ! !StringTest methodsFor: 'initialization' stamp: 'MarcusDenker 6/26/2013 14:10' prior: 51185375! setUp string := 'Hi, I am a String'. emptyString := ''. subcollection3ElementsSorted := 'bcd'. nonEmpty5ElementsSorted := 'a' , subcollection3ElementsSorted , 'e'. unsortedCollection := 'azsbe'. indexInNonEmptyArray := #(1 3 2 ). arrayWithCharacters := #($a $b $c ). nonEmpty1element := 'a'. withoutEqualElements := 'abcde'. sameAtEndAndBegining := 'abca'. elementInNonEmpty := $c. collectionNotIncluded := notIn asString , notIn asString. notIn := $z! ! !StringTest methodsFor: 'tests - accessing' stamp: 'MarcusDenker 6/26/2013 14:10' prior: 51226800! testAt self assert: (string at: 1) = $H.! ! !StringTest methodsFor: 'tests - converting' stamp: 'MarcusDenker 6/26/2013 14:06' prior: 41650488! testWriteStreamConvertsToWideString | oldWideString newString ws | "test that a write stream on a ByteString is autoconverted into a WideString if a Wide character is inserted into it" oldWideString := (WideString new: 1) wordAt: 1 put: 20984060; yourself. newString := (String new: oldWideString size). ws := newString writeStream. oldWideString do: [:each | ws nextPut: each]. self assert: (newString = oldWideString).! ! !CompiledMethod class methodsFor: 'instance creation' stamp: 'MarcusDenker 6/27/2013 15:46' prior: 19851072! cleanUp self allInstances do: [:e | e isInstalled ifFalse: [e embeddSourceInTrailer]]. "pay attention since embeddSourceInTrailer creates a new compiled method. So iterating while changing it is a bad idea. This is why we use allInstances do and not allInstancesDo:"! ! CompiledMethod removeSelector: #zapSourcePointer! "AST-Core"! "CollectionsTests"! "Kernel"! ----End fileIn----! ----QUIT----an Array(27 June 2013 5:03:11 pm) Pharo.image priorSource: 8133710! ----STARTUP----an Array(27 June 2013 5:11:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 June 2013 5:11:30 pm) Pharo-30225.image priorSource: 8147235! ----STARTUP----an Array(27 June 2013 5:18:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/27/2013 17:15' prior: 41688441! commentForCurrentUpdate ^ '11030 #defaultLabel is uncategorized in Number https://pharo.fogbugz.com/f/cases/11030 11033 notObsolete IS obselete https://pharo.fogbugz.com/f/cases/11033 11034 HandMorph>>startUp should be removed https://pharo.fogbugz.com/f/cases/11034 11039 Start to define default values https://pharo.fogbugz.com/f/cases/11039'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/27/2013 17:16'! script325 ^ 'AST-Core-MarcusDenker.171.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1502.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.24.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/27/2013 17:16'! update30226 "self new update30226" self withUpdateLog: '11030 #defaultLabel is uncategorized in Number https://pharo.fogbugz.com/f/cases/11030 11033 notObsolete IS obselete https://pharo.fogbugz.com/f/cases/11033 11034 HandMorph>>startUp should be removed https://pharo.fogbugz.com/f/cases/11034 11039 Start to define default values https://pharo.fogbugz.com/f/cases/11039'. self loadTogether: self script325 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MenuItemMorph methodsFor: 'events' stamp: 'StephaneDucasse 6/26/2013 14:39' prior: 25452868! invokeWithEvent: evt "Perform the action associated with the given menu item." | w | self isEnabled ifFalse: [^ self]. owner ifNotNil:[self isStayUpItem ifFalse:[ self flag: #workAround. "The tile system invokes menus straightforwardly so the menu might not be in the world." (w := self world) ifNotNil:[ owner deleteIfPopUp: evt. "Repair damage before invoking the action for better feedback" w displayWorldSafely]]]. selector ifNil:[^self]. Cursor normal showWhile: [ | selArgCount | "show cursor in case item opens a new MVC window" (selArgCount := selector numArgs) = 0 ifTrue: [target perform: selector] ifFalse: [selArgCount = arguments size ifTrue: [target perform: selector withArguments: arguments] ifFalse: [target perform: selector withArguments: (arguments copyWith: evt)]]. self changed].! ! !Number methodsFor: '*Morphic-Base' stamp: 'cb 6/25/2013 13:24' prior: 41585248! defaultLabel "Answer the default label to be used for an Inspector window on the receiver." ^ super defaultLabel, ': ', self printString! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/27/2013 13:31'! buttonHeight ^ 26! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/27/2013 13:32'! buttonWidth ^ 150! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 6/27/2013 13:31'! toolbarHeight ^ 26! ! HandMorph class removeSelector: #startUp! MenuItemMorph removeSelector: #notObsolete! "Kernel"! "Morphic-Base"! "Spec-Core"! ----End fileIn----! ----QUIT----an Array(27 June 2013 5:18:15 pm) Pharo.image priorSource: 8147433! ----STARTUP----an Array(27 June 2013 5:26:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 June 2013 5:26:49 pm) Pharo-30226.image priorSource: 8160184! ----STARTUP----an Array(27 June 2013 5:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/27/2013 17:50' prior: 41702164! commentForCurrentUpdate ^ '10398 Integrate new class builder step 1 https://pharo.fogbugz.com/f/cases/10398'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/27/2013 17:50'! script326 ^ 'AST-Core-MarcusDenker.171.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1502.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-EstebanLorenzano.52.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.24.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.847.mcz RPackage-Core-EstebanLorenzano.231.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.111.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.39.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/27/2013 17:50'! update30227 "self new update30227" self withUpdateLog: '10398 Integrate new class builder step 1 https://pharo.fogbugz.com/f/cases/10398'. self loadTogether: self script326 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !SlotClassBuilderConflict commentStamp: '' prior: 0! I represent an error raised while building a class.! !CircularHierarchyConflict commentStamp: '' prior: 0! I am signaled if a new class introduces a circular class hierarchy.! !InvalidGlobalNameConflict commentStamp: '' prior: 0! I am an error raised by SlotClassBuilder.! !InvalidSlotNameConflict commentStamp: '' prior: 0! I am signaled the name of default Slot is an invalid variable name.! !PrimitiveTypeConflict commentStamp: '' prior: 0! I am an error raised when extending a class with an incompatible layout.! !SlotDuplicationConflict commentStamp: '' prior: 0! I am an error raised when generating a duplicated slot.! !SlotNotFound commentStamp: '' prior: 0! I am an exception to indicate that a slot is found in a layout.! !AbstractClassInstaller commentStamp: '' prior: 0! I take a ready class and install it in a given environment. My sublcasses implement custom strategies.! !AnonymousClassInstaller commentStamp: '' prior: 0! I am a class installer that does not expose the class to the global environment nor announces that a new class has been created. As it's name suggest it is used for anonymous classes, for instance in Tests.! !PharoClassInstaller commentStamp: '' prior: 0! I am the default class installer. I install a new or modified class in the globals dictionary and announce this change publicly. The default environment can be changed to any SystemDictionary.! !AbstractClassModification commentStamp: '' prior: 0! I represent a class modification. I content field modifications.! !ClassModification commentStamp: '' prior: 0! I represent a modification in a class. ! !ClassModificationPropagation commentStamp: '' prior: 0! I am a propagation to subclasses of a modification in a class.! !AbstractFieldModification commentStamp: '' prior: 0! I am an abstract field modification. Field modifications encapsulate the changes required to migrated instances.! !AddedField commentStamp: '' prior: 0! I represent the change of a newly added field on an instance.! !ModifiedField commentStamp: '' prior: 0! I encapsulate the modification of a slot. The two use-cases are: slot renaming or a changed slot type. Both cases enforce recompilation of all the methods accessing the corresponding variable. This is unlike the ShiftedField modification which is only used when the type of the slot does not change.! !RemovedField commentStamp: '' prior: 0! I represent the change of a removed field on an instance.! !ShiftedField commentStamp: '' prior: 0! I represent the change of a shifted field on an instance. The old field and the new field correspond to the same Slot. In terms of method migration, it is only necessary to update the index of direct accessors/bytecodes to instance variable.! !UnmodifiedField commentStamp: '' prior: 0! Ceci n'est pas une modifications. I am used to migrate non modified fields from the old to the new instance. Typically I am used when only certain fields are modified and others are left as is.! !AbstractLayout commentStamp: '' prior: 0! I'm a container for slots. There are special cases of layouts without slots, like NilLayout or BitsLayout.! !EmptyLayout commentStamp: '' prior: 0! Empty top-level layout used to delimit the layout chains.! !ObjectLayout commentStamp: '' prior: 0! I am the superclass of standard layouts for Objects.! !BitsLayout commentStamp: '' prior: 0! I am a specialized layout which does not hold slots but only raw data (bytes or words).! !ByteLayout commentStamp: '' prior: 0! I am a raw data layout that holds bytes (8 bit).! !WordLayout commentStamp: '' prior: 0! I am a raw data layout that holds words (32 / 64 bit depending on the platform).! !CompiledMethodLayout commentStamp: '' prior: 0! I am a special layout version for CompiledMethods. Unlike default Object layouts, CompiledMethods define a custom format integer since they mix bytes and pointer types. See CompiledMethod for more details.! !LayoutWithSlots commentStamp: '' prior: 0! I am the superclass for all layouts with Slots.! !PointerLayout commentStamp: '' prior: 0! I am the default layout for objects. I contain a fixed number of Slots. Instances of classes using this kind of layout have always the same size.! !VariableLayout commentStamp: '' prior: 0! I am the default layout for variable sized objects such as Array. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional fields which can be accessed with an index.! !WeakLayout commentStamp: '' prior: 0! I am a special layout for weak variable sized objects such as WeakArray. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional weak fields which can be accessed with an index. References held in the variable part are held weakly and might be nilled out by the garbage collector at any time. References in the named section are held strongly as in the default layout.! !SmallIntegerLayout commentStamp: '' prior: 0! I am the special layout for SmallIntegers. SmallIntegers are typically implemented as tagged pointers and thus require a special format.! !AbstractMethodUpdateStrategy commentStamp: '' prior: 0! I am used to update compiled methods in response to class modifications. My sublcasses implement different strategies to update affected methods.! !MethodRecompileStrategy commentStamp: '' prior: 0! I am simple update strategy that recompiles all methods.! !AbstractModification commentStamp: '' prior: 0! Modifications to a high-level class have an impact on the related low-level structures. There are two modification models that transform the high-level model into concrete low-level modifications models, the method modification model and the instance modification model. Both models list for every field, whether it was added, removed, or shifted to a new position. Instance Variables: slotShift modificationMap <(Collection of: AbstractFieldModification)>! !InstanceModification commentStamp: '' prior: 0! I collect and provide the information to migrate instances when a class changed.! !MethodModification commentStamp: '' prior: 0! I collect and provide the information to update methods when a class changed.! !LayoutAbstractScope commentStamp: '' prior: 0! Layout scopes reify how classes extend the layout of their superclass.! !LayoutClassScope commentStamp: '' prior: 0! I am layout scope for classes.! !LayoutEmptyScope commentStamp: '' prior: 0! I am the last layout scope in a scope chain.! !OldClassBuilderAdapter commentStamp: '' prior: 0! I am an adapter of a Slot class builder to the traditional class building protocol.! !Slot commentStamp: '' prior: 0! I'm a meta-object for accessing a field in an Object. By default each Slot corresponds to an instance variable and vice versa. Hence there is a Slot for each instance variable. I define a protocol to read (#read:) and to write (#write:to:) values to a field inside an Object. For customizing a subclass can override the meta-obejct-protocol methods. See subclasses for examples. Vocabulary: - variable: named accessor for a Slot - Slot: class-side meta-object, mapping of names to values using a MOP to fields - field: space occupied in an object, used to hold values accessed via Slots! !SlotClassBuilder commentStamp: '' prior: 0! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Instance Variables: client oldClasses newClasses classSlots globals category superclass name <(DependentsArray of: Character) | IRSequence | Path | (SequenceableCollection of: Character) | TextLine> layoutClass slots traitComposition ! !SlotVirus commentStamp: 'CAmi 3/15/2011 15:47' prior: 0! I am used to spread slot into an unaffected system. SlotVirus spread. Initializes default slots and layouts on all objects (note: so far this will break custom objects with custom slots)! !Class methodsFor: '*Slot' stamp: 'MartinDias 6/14/2013 18:07'! subclass: className layoutClass: aLayoutClass slots: slotCollection sharedVariableNames: sharedVariablesString sharedPoolNames: sharedPoolsString category: categoryName "This is a message for creating a new class as a subclass of an existing class (the receiver)." ^ PharoClassInstaller make: [ :builder | builder superclass: self; layoutClass: aLayoutClass; name: className; slots: slotCollection; sharedVariables: sharedVariablesString; sharedPools: sharedPoolsString; category: categoryName. "Class-side stuff shouldn't be lost. Probably this is responsibility of class builder." Smalltalk at: className ifPresent: [ :oldClass | builder classSlots: (oldClass classSide instVarNames collect: [:n | n asSlot ]); classTraitComposition: oldClass classSide traitComposition. ]. ]! ! !ByteString methodsFor: '*Slot' stamp: 'ToonVerwaest 4/1/2011 03:57'! asSlot ^ self asSymbol asSlot! ! !SlotClassBuilderConflict commentStamp: '' prior: 41725545! I represent an error raised while building a class.! !CircularHierarchyConflict commentStamp: '' prior: 41725664! I am signaled if a new class introduces a circular class hierarchy.! !InvalidGlobalNameConflict commentStamp: '' prior: 41725799! I am an error raised by SlotClassBuilder.! !InvalidSlotNameConflict commentStamp: '' prior: 41725906! I am signaled the name of default Slot is an invalid variable name.! !PrimitiveTypeConflict commentStamp: '' prior: 41726037! I am an error raised when extending a class with an incompatible layout.! !PrimitiveTypeConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! layout ^ layout! ! !PrimitiveTypeConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! layout: anObject layout := anObject! ! !PrimitiveTypeConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:30'! messageText ^ 'Class with ', layout class name, ' cannot be extended as ', subType! ! !PrimitiveTypeConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! subType ^ subType! ! !PrimitiveTypeConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! subType: anObject subType := anObject! ! !SlotClassBuilderConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:12'! defaultAction "No one has handled this error, but now give them a chance to decide how to debug it. If none handle this either then open debugger (see UnhandedError-defaultAction)" UnhandledError signalForException: self! ! !SlotClassBuilderConflict methodsFor: 'private' stamp: 'ToonVerwaest 3/21/2011 01:13'! isResumable "Determine whether an exception is resumable." ^ false! ! !SlotDuplicationConflict commentStamp: '' prior: 41726175! I am an error raised when generating a duplicated slot.! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:15'! host ^ host! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:15'! host: anObject host := anObject! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:17'! messageText ^ 'Slot #''', oldSlot name, ''' appeared twice in ', host name! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! newSlot ^ newSlot! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! newSlot: anObject newSlot := anObject! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! oldSlot ^ oldSlot! ! !SlotDuplicationConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! oldSlot: anObject oldSlot := anObject! ! !TraitTransformation methodsFor: '*Slot' stamp: 'ToonVerwaest 3/31/2011 23:03'! composeWithLayout: aLayout ^ subject composeWithLayout: aLayout! ! !Symbol class methodsFor: '*Slot' stamp: 'MartinDias 8/7/2012 01:18'! pseudovariablesNames ^#('self' 'true' 'false' 'nil' 'thisContext' 'super')! ! !Symbol methodsFor: '*Slot' stamp: 'CAmi 3/15/2011 16:23'! => aSlot aSlot isBehavior ifTrue: [ ^ aSlot named: self]. ^ aSlot name: self; yourself! ! !Symbol methodsFor: '*Slot' stamp: 'CAmi 3/15/2011 14:35'! asSlot ^ Slot named: self.! ! !Symbol methodsFor: '*Slot' stamp: 'MartinDias 8/7/2012 01:31'! isPseudovariableName "Answer true if I am a pseudo-variable name. #self isPseudovariableName -> true " ^ self class pseudovariablesNames includes: self! ! !String methodsFor: '*Slot' stamp: 'MartinDias 8/7/2012 22:01'! asSlotCollection "Parse as slots. Example: 'a b' asSlotCollection --> {a => Slot. b => Slot} " ^ (self subStrings: ' ') collect: [ :x | x asSlot ]! ! !TraitComposition methodsFor: '*Slot' stamp: 'ToonVerwaest 4/2/2011 20:49'! composeWithLayout: aLayout | result | result := aLayout. transformations do: [ :aTransformation | result := aTransformation composeWithLayout: result ]. ^ result! ! !TraitDescription methodsFor: '*Slot' stamp: 'ToonVerwaest 3/31/2011 23:04'! composeWithLayout: aLayout " Standard traits don't have any state " ^ aLayout! ! !SlotNotFound commentStamp: '' prior: 41726285! I am an exception to indicate that a slot is found in a layout.! !SlotNotFound class methodsFor: 'signalling' stamp: 'CAmi 3/15/2011 18:53'! signalForName: aSymbol self new name: aSymbol; signal! ! !SlotNotFound class methodsFor: 'signalling' stamp: 'CAmi 3/15/2011 18:55'! signalForName: aSymbol inClass: aClass self new name: aSymbol; targetClass: aClass; signal! ! !SlotNotFound methodsFor: 'accessing' stamp: 'CamilloBruni 3/23/2011 14:22'! messageText ^ 'Slot ''', name asString, ''' not found', (targetClass ifNil: [''] ifNotNil:[' in ', targetClass name])! ! !SlotNotFound methodsFor: 'accessing' stamp: 'CAmi 3/15/2011 18:54'! name ^ name! ! !SlotNotFound methodsFor: 'accessing' stamp: 'CAmi 3/15/2011 18:54'! name: anObject name := anObject! ! !SlotNotFound methodsFor: 'accessing' stamp: 'CAmi 3/15/2011 18:55'! targetClass ^ targetClass! ! !SlotNotFound methodsFor: 'accessing' stamp: 'CAmi 3/15/2011 18:54'! targetClass: aClass targetClass := aClass! ! !AbstractClassInstaller commentStamp: '' prior: 41726413! I take a ready class and install it in a given environment. My sublcasses implement custom strategies.! !AbstractClassInstaller class methodsFor: 'building' stamp: 'ToonVerwaest 3/22/2011 19:12'! make: aBlock | builder | builder := self new builder. aBlock value: builder. ^ builder build! ! !AbstractClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:42'! builder ^ builder! ! !AbstractClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 17:43'! classAdded: aClass inCategory: aCategory self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:44'! classAt: aName ifAbsent: aBlock self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 18:38'! classDefinitionDeeplyChangedFrom: oldClass to: newClass by: classModification self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 18:38'! classDefinitionShallowChangedFrom: oldClass to: newClass by: classModification self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'traits' stamp: 'ToonVerwaest 4/2/2011 20:51'! copyTraitCompositionFrom: old to: new self installTraitComposition: old traitComposition copyTraitExpression on: new. ! ! !AbstractClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:45'! environment: anEnvironment self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'initialize-release' stamp: 'ToonVerwaest 3/22/2011 17:43'! initialize builder := SlotClassBuilder new. builder client: self! ! !AbstractClassInstaller methodsFor: 'traits' stamp: 'MartinDias 6/24/2013 18:25'! installTraitComposition: aTraitComposition on: aClass self flag: 'Should probably send something else to test'. aClass setTraitComposition: aTraitComposition! ! !AbstractClassInstaller methodsFor: 'migrating' stamp: 'ToonVerwaest 3/22/2011 18:30'! migrateClasses: old to: new using: anInstanceModification self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 17:44'! recategorize: aClass to: aCategory self subclassResponsibility! ! !AbstractClassInstaller methodsFor: 'notifications' stamp: 'CamilloBruni 3/29/2011 11:23'! superclassChangedOf: aClass to: newClass by: classModification self subclassResponsibility.! ! !AnonymousClassInstaller commentStamp: '' prior: 41726581! I am a class installer that does not expose the class to the global environment nor announces that a new class has been created. As it's name suggest it is used for anonymous classes, for instance in Tests.! !AnonymousClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 17:45'! classAdded: aClass inCategory: aCategory! ! !AnonymousClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:46'! classAt: aName ifAbsent: aBlock ^ aBlock value! ! !AnonymousClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 18:38'! classDefinitionDeeplyChangedFrom: oldClass to: newClass by: classModification! ! !AnonymousClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 18:38'! classDefinitionShallowChangedFrom: oldClass to: newClass by: classModification! ! !AnonymousClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:46'! environment: anEnvironment! ! !AnonymousClassInstaller methodsFor: 'migrating' stamp: 'ToonVerwaest 3/22/2011 18:30'! migrateClasses: old to: new using: anInstanceModification! ! !AnonymousClassInstaller methodsFor: 'notifications' stamp: 'ToonVerwaest 3/22/2011 17:46'! recategorize: aClass to: aCategory! ! !AnonymousClassInstaller methodsFor: 'notifications' stamp: 'CamilloBruni 3/29/2011 11:23'! superclassChangedOf: aClass to: newClass by: classModification! ! !PharoClassInstaller commentStamp: '' prior: 41726849! I am the default class installer. I install a new or modified class in the globals dictionary and announce this change publicly. The default environment can be changed to any SystemDictionary.! !PharoClassInstaller class methodsFor: 'testing' stamp: 'MartinDias 11/6/2012 11:32'! validateClassName: aString "Validate if a string can be the name of a new class. Raise an error if not." self new builder name: aString.! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'CamilloBruni 5/31/2013 13:06'! classAdded: aClass inCategory: aCategory " Install the new class in the system " environment at: aClass name put: aClass. environment flushClassNameCache. " Update the system's organization " environment organization classify: aClass name under: aCategory. self systemAnnouncer classAdded: aClass inCategory: aCategory. " Inform superclass of new subclass " aClass superclass addSubclass: aClass.! ! !PharoClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 17:03'! classAt: aName ifAbsent: aBlock ^ (environment at: aName ifAbsent: aBlock) ifNil: aBlock! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 4/26/2013 17:07'! classDefinitionChangedFrom: oldClass to: newClass by: classModification self copyMethodsFrom: oldClass to: newClass using: classModification. " Copy over the trait composition " self copyTraitCompositionFrom: oldClass to: oldClass. " Copy over the method organization " newClass organization: oldClass organization. " Update the superclass links " oldClass superclass == newClass superclass ifFalse: [ oldClass superclass removeSubclass: oldClass. newClass superclass addSubclass: newClass ]. self systemAnnouncer classDefinitionChangedFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 4/26/2013 17:07'! classFormatChangedFrom: oldClass to: newClass by: classModification self copyMethodsFrom: oldClass to: newClass using: classModification. " Copy over the trait composition " self copyTraitCompositionFrom: oldClass to: oldClass. " Copy over the method organization " newClass organization: oldClass organization. " Update the superclass links " oldClass superclass == newClass superclass ifFalse: [ oldClass superclass removeSubclass: oldClass. newClass superclass addSubclass: newClass ]. self systemAnnouncer classDefinitionChangedFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'MartinDias 7/30/2012 00:08'! copyMethodsFrom: oldClass to: newClass using: classModification methodUpdateStrategy transform: oldClass to: newClass using: classModification methodModification! ! !PharoClassInstaller methodsFor: 'accessing' stamp: 'ToonVerwaest 3/22/2011 16:55'! environment: anEnvironment environment := anEnvironment! ! !PharoClassInstaller methodsFor: 'initialize-release' stamp: 'MartinDias 7/30/2012 00:03'! initialize super initialize. environment := nil environment. methodUpdateStrategy := MethodRecompileStrategy new.! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'ToonVerwaest 3/30/2011 13:34'! migrateClasses: old to: new using: anInstanceModification instanceModification := anInstanceModification. old size > 0 ifTrue: [ [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index)]. old elementsForwardIdentityTo: new. " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: " " If we don't clean up this garbage, a second update would revive them with a wrong layout!! " " (newClass rather than oldClass, since they are now both newClass) " Smalltalk garbageCollect. ] valueUnpreemptively ]! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 5/23/2013 13:29'! recategorize: aClass to: newCategory | oldCategory | oldCategory := aClass category. oldCategory ~~ newCategory ifTrue: [ environment organization classify: aClass name under: newCategory. self systemAnnouncer class: aClass recategorizedFrom: oldCategory to: newCategory ]! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 4/26/2013 17:07'! shallowClassDefinitionChangedFrom: oldClass to: newClass by: classModification self shallowCopyMethodsFrom: oldClass to: newClass using: classModification. " Copy over the trait composition " self copyTraitCompositionFrom: oldClass to: oldClass. " Copy over the method organization " newClass organization: oldClass organization. " Update the superclass links " oldClass superclass == newClass superclass ifFalse: [ oldClass superclass removeSubclass: oldClass. newClass superclass addSubclass: newClass ]. self systemAnnouncer classDefinitionChangedFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'ToonVerwaest 3/22/2011 18:54'! shallowCopyMethodsFrom: oldClass to: newClass using: classModification newClass methodDict: oldClass methodDict! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 4/26/2013 17:07'! superclassChangedOf: aClass to: newClass by: classModification |oldClass| oldClass := aClass copy. aClass superclass removeSubclass: aClass. aClass superclass: newClass. newClass addSubclass: aClass. self systemAnnouncer classDefinitionChangedFrom: oldClass to: aClass.! ! !PharoClassInstaller methodsFor: 'private' stamp: 'MartinDias 4/26/2013 17:07'! systemAnnouncer ^ SystemAnnouncer uniqueInstance! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'ToonVerwaest 3/23/2011 23:57'! updateClass: oldClass to: newClass | compactClassIndex | compactClassIndex := oldClass indexIfCompact. compactClassIndex > 0 ifTrue: [ newClass layout compactClassIndex: compactClassIndex ]. self updateInstancesFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'MartinDias 3/26/2013 10:49'! updateInstancesFrom: old to: new | oldInstances variable instSize newInstances map | oldInstances := old allInstances asArray. variable := new isVariable. instSize := new instSize. newInstances := Array new: oldInstances size. map := new instVarMappingFrom: old. 1 to: oldInstances size do:[:i| newInstances at: i put: ( new newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)]. oldInstances elementsForwardIdentityTo: newInstances.! ! !AbstractClassModification commentStamp: '' prior: 41727110! I represent a class modification. I content field modifications.! !AbstractClassModification methodsFor: 'public' stamp: 'ToonVerwaest 4/1/2011 17:49'! apply ^ newClass := target shallowCopy superclass: self superclass layout: layout! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'CamilloBruni 3/30/2011 19:27'! checkSanity layout checkSanity.! ! !AbstractClassModification methodsFor: 'private' stamp: 'ToonVerwaest 3/21/2011 01:20'! computeChange self checkSanity.! ! !AbstractClassModification methodsFor: 'initialize-release' stamp: 'ToonVerwaest 4/1/2011 03:31'! initialize propagations := OrderedCollection new.! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 13:50'! layout ^ layout! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'MartinDias 4/12/2013 13:01'! layout: aLayout layout := aLayout. layout host: target. layout finalize. layout = target layout ifFalse: [ self computeChange ]! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 17:49'! newClass ^ newClass! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 17:24'! newLayout ^ layout! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 17:38'! oldLayout ^ target layout! ! !AbstractClassModification methodsFor: 'private' stamp: 'ToonVerwaest 4/1/2011 03:16'! propagate target subclassesDo: [ :subclass | propagations add: (ClassModificationPropagation propagate: self to: subclass) ] ! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 03:19'! propagationsDo: aBlock propagations do: [ :aPropagation | aBlock value: aPropagation. aPropagation propagationsDo: aBlock ]! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/31/2011 19:53'! result ^ target! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 19:40'! target ^ target! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/19/2011 15:57'! target: aTarget target := aTarget! ! !ClassModification commentStamp: '' prior: 41727236! I represent a modification in a class. ! !ClassModification class methodsFor: 'instance creation' stamp: 'MartinDias 7/30/2012 01:28'! modify: aClass extend: aSuperclass withLayoutType: layoutClass slots: someSlots traitComposition: aTraitComposition ^ self new target: aClass; superclass: aSuperclass; traitComposition: aTraitComposition; layoutType: layoutClass slots: someSlots! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 14:30'! additions: aCollection additions := aCollection! ! !ClassModification methodsFor: 'private' stamp: 'CamilloBruni 3/29/2011 19:00'! buildModificationMapFor: aModification aModification slotShift: (ShiftedField new shift: slotShift). aModification size = 0 ifTrue: [ ^ aModification ]. additions do: [ :slot | self installSlotAddition: slot on: aModification]. changes keysAndValuesDo: [ :newSlot :oldSlot | self installSlotChangeFrom: oldSlot to: newSlot on: aModification ]. removals do: [ :slot | self installSlotRemoval: slot on: aModification]. copies keysAndValuesDo: [ :newSlot :oldSlot | self installSlotCopiedFrom: oldSlot to: newSlot on: aModification ]. ^ aModification! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 15:49'! changes ^ changes! ! !ClassModification methodsFor: 'private' stamp: 'ToonVerwaest 4/3/2011 11:21'! computeChange super computeChange. layout computeChangesFrom: target layout in: self. slotShift := layout fieldSize - target layout fieldSize. self propagate.! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:45'! copies ^ copies! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 02:00'! formatChange ^ (layout format = target layout format) not! ! !ClassModification methodsFor: 'initialize-release' stamp: 'ToonVerwaest 4/1/2011 03:31'! initialize super initialize. changes := IdentityDictionary new. copies := IdentityDictionary new. removals := {}. additions := {}.! ! !ClassModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 20:02'! installSlotAddition: slot on: aModification 0 to: slot size - 1 do: [ :idx | (AddedField new newSlot: slot; fieldIndex: idx) installOn: aModification ]! ! !ClassModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 20:02'! installSlotChangeFrom: oldSlot to: newSlot on: aModification 0 to: newSlot size - 1 do: [ :idx | (ModifiedField new newSlot: newSlot; originalSlot: oldSlot; fieldIndex: idx) installOn: aModification ]! ! !ClassModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/30/2011 13:41'! installSlotCopiedFrom: oldSlot to: newSlot on: aModification 0 to: newSlot size - 1 do: [ :idx | (UnmodifiedField new slot: newSlot; fieldIndex: idx) installOn: aModification ]! ! !ClassModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 20:02'! installSlotRemoval: slot on: aModification 0 to: slot size - 1 do: [ :idx | (RemovedField new originalSlot: slot; fieldIndex: idx) installOn: aModification ]! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 02:45'! instanceModification | map | map := InstanceModification new: layout fieldSize. ^ self buildModificationMapFor: map! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 7/30/2012 01:30'! layoutType: layoutType slots: slotArray | parentLayout newScope | parentLayout := self parentLayout. newScope := parentLayout slotScope extend: slotArray. self layout: (layoutType buildFrom: parentLayout scope: newScope host: self target)! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 02:27'! methodModification ^ methodModification ifNil: [ methodModification := MethodModification new: target layout fieldSize. self buildModificationMapFor: methodModification ]! ! !ClassModification methodsFor: 'testing' stamp: 'ToonVerwaest 3/31/2011 21:17'! modifiesFormat ^ (layout format = target layout format) not! ! !ClassModification methodsFor: 'testing' stamp: 'ToonVerwaest 3/30/2011 15:31'! modifiesSlots ^ (changes isEmpty and: [ removals isEmpty and: [ additions isEmpty ]]) not! ! !ClassModification methodsFor: 'testing' stamp: 'CamilloBruni 3/24/2011 23:56'! modifiesSuperclass ^ (target superclass == superclass) not! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 03:04'! newScope ^ layout slotScope! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 03:03'! originalScope ^ target layout slotScope! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 17:15'! parentLayout ^ traitComposition composeWithLayout: self superLayout! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 14:30'! removals: aCollection removals := aCollection! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 23:32'! slotShift ^ slotShift! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 15:25'! subclassSlotOffset ^ subclassSlotOffset! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 6/24/2013 16:54'! superLayout ^ superclass ifNil: [ EmptyLayout instance ] ifNotNil: [ superclass layout ]! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 19:34'! superclass ^ superclass! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/20/2011 14:32'! superclass: aClass superclass := aClass! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/31/2011 19:48'! traitComposition ^ traitComposition! ! !ClassModification methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 20:54'! traitComposition: aTraitComposition " We copy the trait composition since we might want " " to update the slot indices if the composition is partly stateful " traitComposition := aTraitComposition copyTraitExpression! ! !ClassModificationPropagation commentStamp: '' prior: 41727346! I am a propagation to subclasses of a modification in a class.! !ClassModificationPropagation class methodsFor: 'instance creation' stamp: 'ToonVerwaest 3/20/2011 14:51'! propagate: aModification to: aClass ^ self new propagate: aModification to: aClass! ! !ClassModificationPropagation methodsFor: 'migrating' stamp: 'ToonVerwaest 3/27/2011 21:14'! methodModification ^ origin methodModification! ! !ClassModificationPropagation methodsFor: 'public' stamp: 'ToonVerwaest 4/1/2011 18:16'! propagate: aModification to: aTarget origin := aModification. target := aTarget. self layout: (target layout reshapeFrom: origin oldLayout slotScope to: origin newLayout).! ! !ClassModificationPropagation methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 17:50'! superclass ^ origin newClass! ! !AbstractFieldModification commentStamp: '' prior: 41727476! I am an abstract field modification. Field modifications encapsulate the changes required to migrated instances.! !AbstractFieldModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:19'! fieldIndex ^ fieldIndex! ! !AbstractFieldModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:19'! fieldIndex: anObject fieldIndex := anObject! ! !AbstractFieldModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:07'! installOn: aModification self subclassResponsibility! ! !AbstractFieldModification methodsFor: 'migrating' stamp: 'ToonVerwaest 3/28/2011 20:31'! migrateAt: index to: newInstance from: oldInstance! ! !AddedField commentStamp: '' prior: 41727641! I represent the change of a newly added field on an instance.! !AddedField methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:07'! installOn: aModification aModification installAddedSlot: self! ! !AddedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 19:48'! name ^ newSlot name! ! !AddedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:19'! newFieldIndex ^ newSlot index + fieldIndex! ! !AddedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:35'! newSlot ^ newSlot! ! !AddedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:35'! newSlot: anObject newSlot := anObject! ! !ModifiedField commentStamp: '' prior: 41727758! I encapsulate the modification of a slot. The two use-cases are: slot renaming or a changed slot type. Both cases enforce recompilation of all the methods accessing the corresponding variable. This is unlike the ShiftedField modification which is only used when the type of the slot does not change.! !ModifiedField methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:08'! installOn: aModification aModification installModifiedSlot: self! ! !ModifiedField methodsFor: 'migrating' stamp: 'ToonVerwaest 3/30/2011 13:54'! migrateAt: index to: newInstance from: oldInstance newInstance instVarAt: index put: (oldInstance instVarAt: self oldFieldIndex)! ! !ModifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:14'! newFieldIndex ^ newSlot index + fieldIndex! ! !ModifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:34'! newSlot ^ newSlot! ! !ModifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:34'! newSlot: anObject newSlot := anObject! ! !ModifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:14'! oldFieldIndex ^ originalSlot index + fieldIndex! ! !ModifiedField methodsFor: 'accessing' stamp: 'CamilloBruni 3/28/2011 18:50'! originalSlot ^ originalSlot! ! !ModifiedField methodsFor: 'accessing' stamp: 'CamilloBruni 3/28/2011 18:50'! originalSlot: anObject originalSlot := anObject! ! !RemovedField commentStamp: '' prior: 41728113! I represent the change of a removed field on an instance.! !RemovedField methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:08'! installOn: aModification aModification installRemovedSlot: self! ! !RemovedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:19'! oldFieldIndex ^ originalSlot index + fieldIndex! ! !RemovedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:34'! originalSlot ^ originalSlot! ! !RemovedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 16:34'! originalSlot: anObject originalSlot := anObject! ! !ShiftedField commentStamp: '' prior: 41728225! I represent the change of a shifted field on an instance. The old field and the new field correspond to the same Slot. In terms of method migration, it is only necessary to update the index of direct accessors/bytecodes to instance variable.! !ShiftedField methodsFor: 'migrating' stamp: 'MartinDias 6/24/2013 18:04'! migrateAt: index to: newInstance from: oldInstance newInstance instVarAt: index put: (oldInstance instVarAt: index - shift)! ! !ShiftedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 20:27'! shift ^ shift! ! !ShiftedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 20:27'! shift: anObject shift := anObject! ! !UnmodifiedField commentStamp: '' prior: 41728525! Ceci n'est pas une modifications. I am used to migrate non modified fields from the old to the new instance. Typically I am used when only certain fields are modified and others are left as is.! !UnmodifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:27'! fieldIndex ^ slot index + fieldIndex! ! !UnmodifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:28'! installOn: aModification aModification installUnmodifiedSlot: self! ! !UnmodifiedField methodsFor: 'migrating' stamp: 'ToonVerwaest 3/30/2011 13:55'! migrateAt: index to: newInstance from: oldInstance newInstance instVarAt: index put: (oldInstance instVarAt: index)! ! !UnmodifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:48'! slot ^ slot! ! !UnmodifiedField methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 17:48'! slot: anObject slot := anObject! ! !AbstractLayout commentStamp: '' prior: 41728775! I'm a container for slots. There are special cases of layouts without slots, like NilLayout or BitsLayout.! !AbstractLayout methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:15'! = other ^ self class = other class! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/3/2011 22:58'! allSlots ^ {}! ! !AbstractLayout methodsFor: 'enumerating' stamp: 'MartinDias 8/7/2012 00:42'! allSlotsDo: aBlock self slotScope allSlotsDo: aBlock! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 19:07'! allVisibleSlots ^ {}! ! !AbstractLayout methodsFor: 'validation' stamp: 'ToonVerwaest 4/1/2011 03:38'! checkSanity host ifNil: [ self error: 'Host should not be nil' ].! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 03:37'! fieldSize ^ 0! ! !AbstractLayout methodsFor: 'finalization' stamp: 'ToonVerwaest 4/7/2011 12:08'! finalize self allSlotsDo: [ :aSlot | aSlot finalize: self ]! ! !AbstractLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 03:37'! hasFields ^ false! ! !AbstractLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 03:37'! hasSlots ^ false! ! !AbstractLayout methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:20'! hash ^ self class hash! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:52'! host ^ host! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:52'! host: anObject host := anObject! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 03:38'! instanceVariables ^ {}! ! !AbstractLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 03:37'! isBits ^ false! ! !AbstractLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 03:37'! isVariable ^ false! ! !AbstractLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 03:37'! isWeak ^ false! ! !AbstractLayout methodsFor: 'printing' stamp: 'ToonVerwaest 4/1/2011 03:39'! printSlotDefinitionOn: aStream aStream << '{}'! ! !AbstractLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/7/2011 12:10'! resolveSlot: aName self flag: 'Signal rather than error'. self error: 'No slots found'! ! !AbstractLayout methodsFor: 'accessing' stamp: 'MartinDias 8/6/2012 22:31'! slotScope ^ LayoutEmptyScope instance! ! !EmptyLayout commentStamp: '' prior: 41728936! Empty top-level layout used to delimit the layout chains.! !EmptyLayout class methodsFor: 'instance creation' stamp: 'ToonVerwaest 3/20/2011 15:29'! instance ^ instance ifNil: [ instance := self new ]! ! !EmptyLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 14:26'! extend: someSlots ^ PointerLayout new slotScope: (LayoutEmptyScope instance extend: someSlots)! ! !EmptyLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/1/2011 13:56'! extendByte ^ ByteLayout new! ! !EmptyLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 14:26'! extendVariable: someSlots ^ VariableLayout new slotScope: (LayoutEmptyScope extend: someSlots)! ! !EmptyLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/1/2011 13:57'! extendWeak ^ WeakLayout new! ! !EmptyLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/1/2011 13:56'! extendWord ^ WordLayout new! ! !EmptyLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 02:06'! fieldSize ^ 0! ! !EmptyLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 02:06'! hasFields ^ false! ! !EmptyLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 02:06'! hasSlots ^ false! ! !ObjectLayout commentStamp: '' prior: 41729048! I am the superclass of standard layouts for Objects.! !BitsLayout commentStamp: '' prior: 41729153! I am a specialized layout which does not hold slots but only raw data (bytes or words).! !BitsLayout methodsFor: 'initialize-release' stamp: 'ToonVerwaest 4/1/2011 01:53'! initializeInstance: anInstance! ! !BitsLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:25'! isBits ^ true! ! !BitsLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:26'! isVariable ^ true! ! !ByteLayout commentStamp: '' prior: 41729293! I am a raw data layout that holds bytes (8 bit).! !ByteLayout class methodsFor: 'instance creation' stamp: 'MartinDias 8/1/2012 00:27'! buildFrom: superLayout scope: aScope host: aClass self flag: #todo. "Seems that #extendByte already checks for #hasFields, so next code shouldnt be needed, right?" " aScope hasFields ifTrue: [ self error: 'No fields expected!!' ]." ^ superLayout extendByte host: aClass; yourself! ! !ByteLayout methodsFor: 'extending' stamp: 'MartinDias 8/7/2012 00:47'! extendWord PrimitiveTypeConflict new layout: self; subType: #word; signal! ! !ByteLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:27'! instanceSpecification ^ 8! ! !WordLayout commentStamp: '' prior: 41729394! I am a raw data layout that holds words (32 / 64 bit depending on the platform).! !WordLayout class methodsFor: 'instance creation' stamp: 'MartinDias 8/1/2012 00:27'! buildFrom: superLayout scope: aScope host: aClass self flag: #todo. "Seems that #extendByte already checks for #hasFields, so next code shouldnt be needed, right?" " aScope hasFields ifTrue: [ self error: 'No fields expected!!' ]. " ^ superLayout extendWord host: aClass; yourself! ! !WordLayout methodsFor: 'extending' stamp: 'MartinDias 8/7/2012 00:47'! extendByte PrimitiveTypeConflict new layout: self; subType: #byte; signal! ! !WordLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:27'! instanceSpecification ^ 6! ! !CompiledMethodLayout commentStamp: '' prior: 41729537! I am a special layout version for CompiledMethods. Unlike default Object layouts, CompiledMethods define a custom format integer since they mix bytes and pointer types. See CompiledMethod for more details.! !CompiledMethodLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 15:58'! format ^ 3586! ! !CompiledMethodLayout methodsFor: 'initialize-release' stamp: 'CamilloBruni 10/16/2011 20:21'! initialize super initialize. self host: CompiledMethod.! ! !LayoutWithSlots commentStamp: '' prior: 41729802! I am the superclass for all layouts with Slots.! !LayoutWithSlots methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:23'! = other ^ super = other ifFalse: [ false ] ifTrue: [ self slotScope = other slotScope ]! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 02:23'! allSlots ^ slotScope flatten! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/4/2011 13:30'! allVisibleSlots ^ slotScope allVisibleSlots! ! !LayoutWithSlots methodsFor: 'compatibility' stamp: 'CamilloBruni 4/4/2011 13:20'! atName: aName ^ slotScope atName: aName! ! !LayoutWithSlots methodsFor: 'compatibility' stamp: 'ToonVerwaest 4/1/2011 14:03'! atName: aName ifAbsent: aBlock ^ slotScope atName: aName ifAbsent: aBlock! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'ToonVerwaest 4/1/2011 02:02'! checkSanity super checkSanity. self checkSlotNames. self checkSlotIndices.! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'ToonVerwaest 4/1/2011 02:43'! checkSlotIndices | slots current | slots := slotScope flatten. [ slots size > 1 ] whileTrue: [ current := slots removeFirst. self assert: slots first index = (current index + current size) ]! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'ToonVerwaest 4/3/2011 16:01'! checkSlotNames | slots current | slots := slotScope allVisibleSlots. [ slots isEmpty ] whileFalse: [ current := slots removeLast. slots do: [ :other | other name == current name ifTrue: [ SlotDuplicationConflict new oldSlot: current; newSlot: other; host: host; signal ]]]! ! !LayoutWithSlots methodsFor: 'diff' stamp: 'ToonVerwaest 4/7/2011 11:53'! computeChangesFrom: other in: modification | additions changes removals copies | other hasSlots ifFalse: [ ^ modification additions: self allSlots asArray ]. additions := self allSlots. removals := OrderedCollection new. copies := modification copies. changes := modification changes. other allSlots do: [ :oldSlot | (self popSlot: oldSlot from: additions) ifNil: [ removals add: oldSlot ] ifNotNil: [ :newSlot | newSlot = oldSlot ifTrue: [ copies at: newSlot put: oldSlot ] ifFalse: [ changes at: newSlot put: oldSlot ]]]. modification additions: additions asArray; removals: removals asArray.! ! !LayoutWithSlots methodsFor: 'extending' stamp: 'CamilloBruni 4/4/2011 15:39'! extend: aScope ^ self species new slotScope: aScope! ! !LayoutWithSlots methodsFor: 'reshaping' stamp: 'ToonVerwaest 4/1/2011 03:25'! extendAgain: aLayout with: someScope | result | result := aLayout copy. result slotScope: someScope. ^ result! ! !LayoutWithSlots methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 17:31'! extendVariable: newScope ^ VariableLayout new slotScope: newScope! ! !LayoutWithSlots methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 17:31'! extendWeak: newScope ^ WeakLayout new slotScope: newScope! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:28'! fieldSize ^ slotScope fieldSize! ! !LayoutWithSlots methodsFor: 'forking' stamp: 'MartinDias 7/30/2012 01:39'! forkLayout: aLayout | forkScope | forkScope := slotScope forkScope: aLayout slotScope. ^ aLayout species buildFrom: self scope: forkScope host: self host! ! !LayoutWithSlots methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:16'! hasFields ^ slotScope hasFields! ! !LayoutWithSlots methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 02:25'! hasSlots ^ slotScope hasSlots! ! !LayoutWithSlots methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:24'! hash ^ self class hash bitXor: self slotScope hash! ! !LayoutWithSlots methodsFor: 'compatibility' stamp: 'ToonVerwaest 4/1/2011 15:26'! includesName: aName self atName: aName ifAbsent: [ ^ false ]. ^ true! ! !LayoutWithSlots methodsFor: 'instance initialization' stamp: 'ToonVerwaest 4/1/2011 01:54'! initializeInstance: anInstance self allSlotsDo: [ :slot | slot initialize: anInstance ]! ! !LayoutWithSlots methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:33'! instanceSpecification | base | base := self instanceSpecificationBase. ^ self hasFields ifTrue: [ base + 1 ] ifFalse: [ base ]! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/4/2011 13:48'! instanceVariables ^ slotScope visibleSlotNames! ! !LayoutWithSlots methodsFor: 'diff' stamp: 'ToonVerwaest 4/1/2011 02:45'! popSlot: aSlot from: collection collection withIndexDo: [ :slot :index | slot name == aSlot name ifTrue: [ ^ collection removeAt: index ]]. ^ nil! ! !LayoutWithSlots methodsFor: 'copying' stamp: 'ToonVerwaest 4/2/2011 21:00'! postCopy slotScope := slotScope copy! ! !LayoutWithSlots methodsFor: 'printing' stamp: 'ToonVerwaest 4/1/2011 01:40'! printSlotDefinitionOn: aStream slotScope printSlotDefinitionOn: aStream! ! !LayoutWithSlots methodsFor: 'reshaping' stamp: 'ToonVerwaest 4/1/2011 17:24'! reshapeTo: aModification | newScope | newScope := slotScope rebase: aModification originalScope to: aModification newScope. ^ aModification newLayout extendAgain: self with: newScope.! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/7/2011 12:10'! resolveSlot: aName ^ slotScope atName: aName! ! !LayoutWithSlots methodsFor: 'testing' stamp: 'CamilloBruni 10/16/2011 20:20'! size ^ slotScope fieldSize! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'CamilloBruni 10/16/2011 20:12'! slotAt: index self flag: 'clean..'. ^ self allSlots at: index! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:13'! slotScope ^ slotScope! ! !LayoutWithSlots methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:13'! slotScope: anObject slotScope := anObject! ! !PointerLayout commentStamp: '' prior: 41729905! I am the default layout for objects. I contain a fixed number of Slots. Instances of classes using this kind of layout have always the same size.! !PointerLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/30/2012 01:43'! buildFrom: superLayout scope: aScope host: aClass ^ (superLayout extend: aScope) host: aClass; yourself! ! !PointerLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:27'! instanceSpecificationBase ^ 0! ! !VariableLayout commentStamp: '' prior: 41730108! I am the default layout for variable sized objects such as Array. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional fields which can be accessed with an index.! !VariableLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/30/2012 01:43'! buildFrom: superLayout scope: aScope host: aClass ^ (superLayout extendVariable: aScope) host: aClass; yourself! ! !VariableLayout methodsFor: 'reshaping' stamp: 'ToonVerwaest 4/1/2011 02:55'! extendAgain: aLayout with: someScope | result | result := self species new. result host: aLayout host. aLayout compactClassIndex > 0 ifTrue: [ result compactClassIndex: aLayout compactClassIndex ]. result slotScope: someScope. ^ result! ! !VariableLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:27'! instanceSpecificationBase ^ 2! ! !VariableLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:26'! isVariable ^ true! ! !WeakLayout commentStamp: '' prior: 41730435! I am a special layout for weak variable sized objects such as WeakArray. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional weak fields which can be accessed with an index. References held in the variable part are held weakly and might be nilled out by the garbage collector at any time. References in the named section are held strongly as in the default layout.! !WeakLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/30/2012 01:44'! buildFrom: superLayout scope: aScope host: aClass ^ (superLayout extendWeak: aScope) host: aClass; yourself! ! !WeakLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:27'! instanceSpecification ^ 4! ! !WeakLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:26'! isVariable ^ true! ! !WeakLayout methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 01:26'! isWeak ^ true! ! !ObjectLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/30/2012 01:40'! buildFrom: superLayout scope: aScope host: aClass self subclassResponsibility! ! !ObjectLayout methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:27'! = other ^ super = other ifFalse: [ false ] ifTrue: [ self compactClassIndex = other compactClassIndex ]! ! !ObjectLayout methodsFor: 'accessing' stamp: 'MartinDias 3/28/2013 12:00'! compactClassIndex ^ compactClassIndex! ! !ObjectLayout methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:35'! compactClassIndex: anIndex compactClassIndex := anIndex. host setFormat: self format! ! !ObjectLayout methodsFor: 'diff' stamp: 'ToonVerwaest 4/1/2011 02:22'! computeChangesFrom: other in: modification other hasSlots ifTrue: [ modification removals: other allSlots asArray ]! ! !ObjectLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 17:25'! extend: aScope PrimitiveTypeConflict new layout: self; subType: #slot; signal! ! !ObjectLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/1/2011 13:56'! extendByte self hasFields ifTrue: [ PrimitiveTypeConflict new layout: self; subType: #byte; signal ]. ^ ByteLayout new! ! !ObjectLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 17:26'! extendVariable: aScope PrimitiveTypeConflict new layout: self; subType: #variable; signal! ! !ObjectLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/1/2011 13:56'! extendWord self hasFields ifTrue: [ PrimitiveTypeConflict new layout: self; subType: #word; signal ]. ^ WordLayout new! ! !ObjectLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 01:34'! format | fieldSize sizeHiBits format | fieldSize := self fieldSize + 1. sizeHiBits := fieldSize // 64. format := sizeHiBits. format := (format bitShift: 5) + compactClassIndex. format := (format bitShift: 4) + self instanceSpecification. format := (format bitShift: 6) + (fieldSize \\ 64). format := (format bitShift: 1). ^ format! ! !ObjectLayout methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:27'! hash ^ super hash bitXor: self compactClassIndex! ! !ObjectLayout methodsFor: 'initialize-release' stamp: 'ToonVerwaest 4/1/2011 01:34'! initialize compactClassIndex := 0! ! !ObjectLayout methodsFor: 'initialize-release' stamp: 'ToonVerwaest 4/1/2011 01:53'! initializeInstance: anInstance self subclassResponsibility! ! !ObjectLayout methodsFor: 'reshaping' stamp: 'MartinDias 4/4/2013 20:24'! reshapeFrom: oldScope to: newLayout | newScope | newScope := self slotScope rebase: oldScope to: newLayout slotScope. ^ newLayout extendAgain: self with: newScope.! ! !ObjectLayout methodsFor: 'reshaping' stamp: 'MartinDias 7/30/2012 01:39'! reshapeTo: aModification ^ self class buildFrom: aModification layout scope: LayoutEmptyScope instance host: self host! ! !SmallIntegerLayout commentStamp: '' prior: 41730974! I am the special layout for SmallIntegers. SmallIntegers are typically implemented as tagged pointers and thus require a special format.! !SmallIntegerLayout methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 17:32'! extend: newScope ^ PointerLayout new slotScope: newScope! ! !SmallIntegerLayout methodsFor: 'format' stamp: 'ToonVerwaest 4/1/2011 04:12'! format ^ 2! ! !SmallIntegerLayout methodsFor: 'initialize-release' stamp: 'CamilloBruni 10/16/2011 20:21'! initialize super initialize. self host: SmallInteger.! ! !AbstractMethodUpdateStrategy commentStamp: '' prior: 41731182! I am used to update compiled methods in response to class modifications. My sublcasses implement different strategies to update affected methods.! !AbstractMethodUpdateStrategy methodsFor: 'updating' stamp: 'MartinDias 7/30/2012 00:08'! transform: oldClass to: newClass using: aMethodModification self subclassResponsibility ! ! !MethodRecompileStrategy commentStamp: '' prior: 41731393! I am simple update strategy that recompiles all methods.! !MethodRecompileStrategy methodsFor: 'updating' stamp: 'MartinDias 5/7/2013 19:10'! transform: oldClass to: newClass using: aMethodModification newClass compileAllFrom: oldClass. "Somehow something is not fully ready yet when recompiling so we have to manually update the class literal (last literal) to properly use the newClass' name" self updateClassLiteralKeysIn: newClass! ! !MethodRecompileStrategy methodsFor: 'updating' stamp: 'MartinDias 5/7/2013 19:09'! updateClassLiteralKeysIn: aClass aClass isMeta ifTrue: [ ^ self ]. aClass methodsDo: [ :method | | literal | literal := method allLiterals last. literal value = aClass ifTrue: [ literal key: aClass name ]]! ! !AbstractModification commentStamp: '' prior: 41731512! Modifications to a high-level class have an impact on the related low-level structures. There are two modification models that transform the high-level model into concrete low-level modifications models, the method modification model and the instance modification model. Both models list for every field, whether it was added, removed, or shifted to a new position. Instance Variables: slotShift modificationMap <(Collection of: AbstractFieldModification)>! !AbstractModification class methodsFor: 'instance creation' stamp: 'ToonVerwaest 3/24/2011 12:17'! new: anInteger ^ self new initialize: anInteger ! ! !AbstractModification methodsFor: 'initialize-release' stamp: 'ToonVerwaest 3/28/2011 19:46'! initialize: anInteger self initialize. modificationMap := Array new: anInteger.! ! !AbstractModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:12'! installAddedSlot: addedSlot self subclassResponsibility! ! !AbstractModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:12'! installModifiedSlot: modifiedSlot self subclassResponsibility! ! !AbstractModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:12'! installRemovedSlot: removedSlot self subclassResponsibility! ! !AbstractModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:29'! installUnmodifiedSlot: unmodifiedSlot modificationMap at: unmodifiedSlot fieldIndex put: unmodifiedSlot! ! !AbstractModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/30/2011 13:52'! modificationAt: idx idx > modificationMap size ifTrue: [ ^ slotShift ]. ^ modificationMap at: idx! ! !AbstractModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/24/2011 12:18'! size ^ modificationMap size.! ! !AbstractModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/24/2011 11:37'! slotShift: aShift slotShift := aShift! ! !InstanceModification commentStamp: '' prior: 41732044! I collect and provide the information to migrate instances when a class changed.! !InstanceModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:13'! installAddedSlot: addedSlot modificationMap at: addedSlot newFieldIndex put: addedSlot! ! !InstanceModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:14'! installModifiedSlot: modifiedSlot modificationMap at: modifiedSlot newFieldIndex put: modifiedSlot! ! !InstanceModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:14'! installRemovedSlot: removedSlot " ignore "! ! !MethodModification commentStamp: '' prior: 41732185! I collect and provide the information to update methods when a class changed.! !MethodModification methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 20:06'! addedSlotNamed: name ifAbsent: aBlock ^ addedSlots at: name ifAbsent: aBlock! ! !MethodModification methodsFor: 'initialize-release' stamp: 'ToonVerwaest 3/28/2011 19:47'! initialize addedSlots := Dictionary new! ! !MethodModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 19:48'! installAddedSlot: addedSlot addedSlots at: addedSlot name put: addedSlot! ! !MethodModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:15'! installModifiedSlot: modifiedSlot modificationMap at: modifiedSlot oldFieldIndex put: modifiedSlot! ! !MethodModification methodsFor: 'installing' stamp: 'ToonVerwaest 3/28/2011 17:15'! installRemovedSlot: removedSlot modificationMap at: removedSlot oldFieldIndex put: removedSlot! ! !LayoutAbstractScope commentStamp: '' prior: 41732324! Layout scopes reify how classes extend the layout of their superclass.! !LayoutAbstractScope methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:29'! = other ^ self class = other class! ! !LayoutAbstractScope methodsFor: 'enumerating' stamp: 'ToonVerwaest 4/2/2011 14:27'! allSlotsDo: aBlock self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 14:30'! allSlotsReverseDo: aBlock self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/4/2011 13:03'! atName: aName ^ self atName: aName ifAbsent: [ SlotNotFound signalForName: aName ].! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 14:04'! atName: aName ifAbsent: aBlock self allSlotsDo: [ :slot | slot name == aName ifTrue: [ ^ slot ]]. ^ aBlock value! ! !LayoutAbstractScope methodsFor: 'extending' stamp: 'ToonVerwaest 4/2/2011 14:25'! extend: someSlots ^ self extend: someSlots as: LayoutClassScope! ! !LayoutAbstractScope methodsFor: 'extending' stamp: 'CamilloBruni 4/6/2011 14:28'! extend: someSlots as: type | scope fieldIndex currentParentScope nextParentScope | scope := type new: someSlots size. fieldIndex := self firstFieldIndex. currentParentScope := self. someSlots withIndexDo: [ :slot :slotIndex | |realSlot| realSlot := slot asSlot. nextParentScope := realSlot parentScopeFor: currentParentScope. nextParentScope == currentParentScope ifFalse: [ currentParentScope := nextParentScope. fieldIndex := fieldIndex + currentParentScope ownFieldSize]. realSlot index: fieldIndex. fieldIndex := fieldIndex + realSlot size. scope at: slotIndex put: realSlot ]. scope parentScope: currentParentScope. ^ scope! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 14:27'! fieldSize self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 18:33'! firstFieldIndex ^ self fieldSize + 1! ! !LayoutAbstractScope methodsFor: 'flattening' stamp: 'ToonVerwaest 4/2/2011 14:28'! flatten self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'testing' stamp: 'ToonVerwaest 4/2/2011 14:29'! hasFields self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'testing' stamp: 'ToonVerwaest 4/2/2011 14:29'! hasSlots self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:29'! hash ^ self class hash! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2011 14:25'! ownFieldSize self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'printing' stamp: 'ToonVerwaest 4/2/2011 14:29'! printSlotDefinitionOn: aStream self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'reshaping' stamp: 'MartinDias 4/4/2013 20:40'! rebase: originalScope to: newScope self error: 'Should not happen'! ! !LayoutAbstractScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 14:50'! visibleSlotNames self subclassResponsibility! ! !LayoutAbstractScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 18:31'! withParentScopesDo: aBlock self subclassResponsibility! ! !LayoutClassScope commentStamp: '' prior: 41732453! I am layout scope for classes.! !LayoutClassScope methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:31'! = other super = other ifFalse: [ ^ false ]. self size = other size ifFalse: [ ^ false ]. 1 to: self size do: [ :index| (self at: index) = (other at: index) ifFalse: [ ^ false ]]. ^ self parentScope = other parentScope.! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'ToonVerwaest 4/1/2011 02:11'! allSlotsDo: aBlock parentScope allSlotsDo: aBlock. self do: aBlock! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 14:30'! allSlotsReverseDo: aBlock self reverseDo: aBlock. parentScope allSlotsReverseDo: aBlock.! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/4/2011 12:48'! allVisibleSlots | result | result := parentScope allVisibleSlots. self do: [ :slot | slot isVisible ifTrue: [ result add: slot ]]. ^ result! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'ToonVerwaest 4/1/2011 02:10'! do: aBlock 1 to: self size do: [ :index | aBlock value: (self at: index) ]! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2011 14:25'! fieldSize ^ parentScope fieldSize + self ownFieldSize.! ! !LayoutClassScope methodsFor: 'flattening' stamp: 'ToonVerwaest 4/1/2011 01:56'! flatten | result | result := parentScope flatten. result addAll: self. ^ result! ! !LayoutClassScope methodsFor: 'testing' stamp: 'CamilloBruni 4/4/2011 12:48'! hasFields self do: [ :slot | slot size > 0 ifTrue: [ ^ true ]]. ^ parentScope hasFields! ! !LayoutClassScope methodsFor: 'testing' stamp: 'CamilloBruni 4/4/2011 12:48'! hasSlots self size > 0 ifTrue: [ ^ true ]. ^ parentScope hasSlots! ! !LayoutClassScope methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:34'! hash | hash | hash := super hash. 1 to: self size do: [ :i | hash := (hash + (self at: i) hash) hashMultiply]. ^ hash bitXor: self parentScope hash.! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2011 14:26'! ownFieldSize |result| result := 0. self do: [ :slot | result := result + slot size ]. ^ result! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'MartinDias 4/12/2013 13:48'! parentScope ^ parentScope! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'MartinDias 4/12/2013 13:35'! parentScope: aLayoutScope parentScope := aLayoutScope! ! !LayoutClassScope methodsFor: 'copying' stamp: 'ToonVerwaest 4/2/2011 18:26'! postCopy parentScope := parentScope copy. 1 to: self size do: [ :index | self at: index put: (self at: index) copy ]! ! !LayoutClassScope methodsFor: 'printing' stamp: 'CamilloBruni 4/4/2011 12:48'! printSlotDefinitionOn: aStream | printedAtLeastOnSlot | aStream << '{'. printedAtLeastOnSlot := false. self do: [ :slot | slot isVisible ifTrue: [ aStream lf; tab; tab; store: slot; << '.'. printedAtLeastOnSlot := true.]]. printedAtLeastOnSlot ifTrue: [ aStream lf; tab ]. aStream << '}'.! ! !LayoutClassScope methodsFor: 'reshaping' stamp: 'MartinDias 4/4/2013 20:39'! rebase: originalScope to: newScope | newParent result fieldIndex | newParent := parentScope == originalScope ifTrue: [ newScope ] ifFalse: [ parentScope rebase: originalScope to: newScope ]. result := self copy. result parentScope: newParent. fieldIndex := newParent firstFieldIndex. result do: [ :slot | slot index: fieldIndex. fieldIndex := fieldIndex + slot size ]. ^ result ! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 14:49'! reverseDo: aBlock |size| size := self size. 1 to: size do: [ :index | aBlock value: (self at: (1 + size - index)) ]! ! !LayoutClassScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/4/2011 12:48'! visibleSlotNames | result | result := OrderedCollection new. self do: [ :slot | slot isVisible ifTrue: [ result add: slot name ]]. ^ result asArray! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'CamilloBruni 10/16/2011 20:08'! withIndexDo: elementAndIndexBlock "Just like with:do: except that the iteration index supplies the second argument to the block." 1 to: self size do: [:index | elementAndIndexBlock value: (self at: index) value: index]! ! !LayoutClassScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 18:31'! withParentScopesDo: aBlock aBlock value: self. parentScope withParentScopesDo: aBlock.! ! !LayoutEmptyScope commentStamp: '' prior: 41732542! I am the last layout scope in a scope chain.! !LayoutEmptyScope class methodsFor: 'accessing' stamp: 'ToonVerwaest 4/1/2011 01:31'! instance ^ instance ifNil: [ instance := self new ]! ! !LayoutEmptyScope methodsFor: 'enumerating' stamp: 'ToonVerwaest 4/2/2011 14:32'! allSlotsDo: aBlock! ! !LayoutEmptyScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 14:30'! allSlotsReverseDo: aBlock! ! !LayoutEmptyScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 19:08'! allVisibleSlots ^ OrderedCollection new! ! !LayoutEmptyScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 14:31'! fieldSize ^ 0! ! !LayoutEmptyScope methodsFor: 'flattening' stamp: 'ToonVerwaest 4/2/2011 14:32'! flatten ^ OrderedCollection new! ! !LayoutEmptyScope methodsFor: 'testing' stamp: 'ToonVerwaest 4/2/2011 14:33'! hasFields ^ false! ! !LayoutEmptyScope methodsFor: 'testing' stamp: 'ToonVerwaest 4/2/2011 14:33'! hasSlots ^ false! ! !LayoutEmptyScope methodsFor: 'accessing' stamp: 'CamilloBruni 4/6/2011 14:26'! ownFieldSize ^ 0! ! !LayoutEmptyScope methodsFor: 'printing' stamp: 'ToonVerwaest 4/2/2011 14:33'! printSlotDefinitionOn: aStream aStream << '{}'! ! !LayoutEmptyScope methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 19:11'! visibleSlotNames ^ {}! ! !LayoutEmptyScope methodsFor: 'enumerating' stamp: 'CamilloBruni 4/4/2011 18:31'! withParentScopesDo: aBlock aBlock value: self.! ! !OldClassBuilderAdapter commentStamp: '' prior: 41732651! I am an adapter of a Slot class builder to the traditional class building protocol.! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/27/2013 17:03'! anonymousSubclassOf: newSuper "Answer an anonymous subclass of the given superclass." ^ self newSubclassOf: newSuper type: newSuper typeOfClass instanceVariables: '' from: nil! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/15/2013 18:13'! class: oldClass instanceVariableNames: instVarString "This is the basic initialization message to change the definition of an existing Metaclass" | theClass | theClass := oldClass theNonMetaClass. ^ self slotClassInstaller make: [ :builder | builder superclass: theClass superclass; name: theClass name; layoutClass: theClass layout class; slots: (theClass instVarNames collect: [:n | n asSlot ]); sharedVariables: theClass classVariablesString; sharedPools: theClass sharedPoolsString; traitComposition: theClass traitComposition; category: theClass category asString; classSlots: instVarString asSlotCollection ]! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 18:03'! name: name inEnvironment: env subclassOf: superClass type: type instanceVariableNames: instanceVariablesString classVariableNames: classVariablesString poolDictionaries: sharedPoolsString category: category "Define a new class in the given environment" | typeOfClassToLayoutMap | typeOfClassToLayoutMap := Dictionary new at: #compiledMethod put: CompiledMethodLayout; at: #bytes put: ByteLayout; at: #words put: WordLayout; at: #weak put: WeakLayout; at: #variable put: VariableLayout; at: #normal put: PointerLayout; yourself. ^ self slotClassInstaller make: [ :builder | builder superclass: superClass; name: name; layoutClass: (typeOfClassToLayoutMap at: type); slots: instanceVariablesString asSlotCollection; sharedVariables: classVariablesString; sharedPools: sharedPoolsString; category: category ]. ! ! !OldClassBuilderAdapter methodsFor: 'accessing' stamp: 'MartinDias 6/14/2013 17:42'! slotClassInstaller ^ PharoClassInstaller! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 18:11'! superclass: newSuper subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class." ^self name: t inEnvironment: newSuper environment subclassOf: newSuper type: newSuper typeOfClass instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 18:01'! superclass: aClass variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable byte-sized nonpointer variables." | oldClassOrNil actualType | (aClass instSize > 0) ifTrue: [^self error: 'cannot make a byte subclass of a class with named fields']. (aClass isVariable and: [aClass isWords]) ifTrue: [^self error: 'cannot make a byte subclass of a class with word fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a byte subclass of a class with pointer fields']. oldClassOrNil := aClass environment at: t ifAbsent:[nil]. actualType := (oldClassOrNil notNil and: [oldClassOrNil typeOfClass == #compiledMethod]) ifTrue: [#compiledMethod] ifFalse: [#bytes]. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: actualType instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 18:00'! superclass: aClass variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable pointer variables." aClass isBits ifTrue: [^self error: 'cannot make a pointer subclass of a class with non-pointer fields']. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: #variable instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 17:59'! superclass: aClass variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class in which the subclass is to have indexable word-sized nonpointer variables." (aClass instSize > 0) ifTrue: [^self error: 'cannot make a word subclass of a class with named fields']. (aClass isVariable and: [aClass isBytes]) ifTrue: [^self error: 'cannot make a word subclass of a class with byte fields']. (aClass isVariable and: [aClass isPointers]) ifTrue: [^self error: 'cannot make a word subclass of a class with pointer fields']. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: #words instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 6/14/2013 17:58'! superclass: aClass weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." aClass isBits ifTrue: [^self error: 'cannot make a pointer subclass of a class with non-pointer fields']. ^self name: t inEnvironment: aClass environment subclassOf: aClass type: #weak instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !Slot commentStamp: '' prior: 41732781! I'm a meta-object for accessing a field in an Object. By default each Slot corresponds to an instance variable and vice versa. Hence there is a Slot for each instance variable. I define a protocol to read (#read:) and to write (#write:to:) values to a field inside an Object. For customizing a subclass can override the meta-obejct-protocol methods. See subclasses for examples. Vocabulary: - variable: named accessor for a Slot - Slot: class-side meta-object, mapping of names to values using a MOP to fields - field: space occupied in an object, used to hold values accessed via Slots! !Slot class methodsFor: 'instance creation' stamp: 'CamilloBruni 3/22/2011 16:40'! asSlot ^ self new! ! !Slot class methodsFor: 'validating' stamp: 'MartinDias 8/7/2012 01:31'! checkValidName: aSymbol aSymbol isPseudovariableName ifTrue: [ ^ InvalidSlotNameConflict signal: aSymbol, ' is an invalid name for a slot' ]! ! !Slot class methodsFor: 'instance creation' stamp: 'MartinDias 8/7/2012 01:12'! named: aSymbol self checkValidName: aSymbol. ^ self new name: aSymbol; yourself! ! !Slot methodsFor: 'comparing' stamp: 'MartinDias 6/24/2013 18:11'! = other self == other ifTrue: [ ^ true ]. ^ ((self species == other species) and: [ index = other index ]) and: [ name = other name ]! ! !Slot methodsFor: 'converting' stamp: 'CAmi 3/15/2011 14:34'! asSlot ^ self! ! !Slot methodsFor: 'finalization' stamp: 'CAmi 3/15/2011 16:55'! finalize: layout "nothing to do here"! ! !Slot methodsFor: 'comparing' stamp: 'MartinDias 4/12/2013 13:37'! hash ^ (self species hash bitXor: self name hash) bitXor: self index! ! !Slot methodsFor: 'accessing' stamp: 'CamilloBruni 3/10/2011 15:01'! index ^ index! ! !Slot methodsFor: 'accessing' stamp: 'CamilloBruni 4/4/2011 18:16'! index: anIndex index := anIndex! ! !Slot methodsFor: 'initialization' stamp: 'CamilloBruni 3/10/2011 17:17'! initialize: instance "nothing to do for the default slot"! ! !Slot methodsFor: 'private' stamp: 'MartinDias 6/24/2013 16:29'! internalRead: anObject ^ anObject instVarAt: index! ! !Slot methodsFor: 'private' stamp: 'MartinDias 6/24/2013 16:29'! internalWrite: aValue to: anObject anObject instVarAt: index put: aValue.! ! !Slot methodsFor: 'testing' stamp: 'CamilloBruni 3/30/2011 18:46'! isVisible ^ true! ! !Slot methodsFor: 'testing' stamp: 'CamilloBruni 3/10/2011 15:01'! name ^ name! ! !Slot methodsFor: 'accessing' stamp: 'MartinDias 7/29/2012 20:58'! name: aSymbol name := aSymbol! ! !Slot methodsFor: 'accessing' stamp: 'CamilloBruni 4/4/2011 18:41'! parentScopeFor: aScope ^ aScope! ! !Slot methodsFor: 'printing' stamp: 'CamilloBruni 3/30/2011 15:37'! printOn: aStream aStream << self name << ' => '; << self class name.! ! !Slot methodsFor: 'meta-object-protocol' stamp: 'MartinDias 6/24/2013 16:28'! read: anObject ^ self internalRead: anObject! ! !Slot methodsFor: 'accessing' stamp: 'CAmi 3/15/2011 14:32'! size ^ 1! ! !Slot methodsFor: 'printing' stamp: 'CAmi 3/15/2011 17:59'! storeInitializationOn: aStream aStream nextPutAll: self class name! ! !Slot methodsFor: 'printing' stamp: 'CamilloBruni 3/29/2011 16:36'! storeOn: aStream aStream store: self name. aStream nextPutAll: ' => '. self storeInitializationOn: aStream.! ! !Slot methodsFor: 'meta-object-protocol' stamp: 'MartinDias 6/24/2013 16:29'! write: aValue to: anObject self internalWrite: aValue to: anObject! ! !SlotClassBuilder commentStamp: '' prior: 41733429! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Instance Variables: client oldClasses newClasses classSlots globals category superclass name <(DependentsArray of: Character) | IRSequence | Path | (SequenceableCollection of: Character) | TextLine> layoutClass slots traitComposition ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/3/2011 11:27'! apply: classModification classModification modifiesSlots ifTrue: [self applySlotChange: classModification] ifFalse: [ classModification modifiesFormat ifTrue: [ self applyFormatChange: classModification] ifFalse: [ classModification modifiesSuperclass ifTrue: [ self applySuperclassChange: classModification ] ifFalse: [ ^ self installTraitComposition: classModification ]]]. client migrateClasses: oldClasses asArray to: newClasses asArray using: classModification instanceModification. self installTraitComposition: classModification. oldClasses removeAll. newClasses removeAll.! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/3/2011 11:26'! applyAndNotify: classModification | old new | old := classModification target. new := classModification apply. " Notify the system of the change " client shallowClassDefinitionChangedFrom: old to: new by: classModification. " Store the modification for updateClasses " oldClasses add: old. newClasses add: new. ^ new! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/1/2011 03:41'! applyAndUpdateFormat: classModification | old new | old := classModification target. new := classModification apply. " Notify the system of the change " client classFormatChangedFrom: old to: new by: classModification. " Store the modification for updateClasses " oldClasses add: old. newClasses add: new. ^ new! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 3/31/2011 19:56'! applyAndUpdateMethods: classModification | old new | old := classModification target. new := classModification apply. " Notify the system of the change " client classDefinitionChangedFrom: old to: new by: classModification. " Store the modification for updateClasses " oldClasses add: old. newClasses add: new. ^ new! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/1/2011 03:18'! applyFormatChange: classModification result := self applyAndUpdateFormat: classModification. classModification propagationsDo: [ :propagation | self applyAndUpdateFormat: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/1/2011 03:18'! applyPropagations: classModification classModification propagationsDo: [ :propagation | self applyAndUpdateMethods: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/1/2011 03:18'! applySlotChange: classModification result := self applyAndUpdateMethods: classModification. classModification propagationsDo: [ :propagation | self applyAndUpdateMethods: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'ToonVerwaest 4/3/2011 11:27'! applySuperclassChange: classModification result := self applyAndNotify: classModification. classModification propagationsDo: [ :propagation | self applyAndNotify: propagation ]! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 8/7/2012 02:37'! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self metaOfSuper withLayoutType: PointerLayout slots: classSlots traitComposition: classTraitComposition. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: layoutClass slots: slots traitComposition: traitComposition. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 8/7/2012 02:35'! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self metaOfSuper withLayoutType: PointerLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. client classAdded: newClass inCategory: category. ^ newClass! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:28'! category: aCategory category := aCategory! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:28'! classSlots: someClassSlots classSlots := someClassSlots! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 4/2/2011 20:53'! classTraitComposition: aTraitComposition classTraitComposition := aTraitComposition asTraitComposition! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:28'! client: aClient client := aClient! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'CamilloBruni 5/31/2013 13:05'! environment ^ client environment! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'CamilloBruni 6/4/2013 10:06'! environment: globals client environment: globals! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 6/24/2013 18:25'! initialize super initialize. oldClasses := OrderedCollection new. newClasses := OrderedCollection new. sharedPoolsString := ''. sharedVariablesString := ''. classSlots := {}. slots := {}. layoutClass := PointerLayout. superclass := Object. classTraitComposition := {} asTraitComposition. traitComposition := {} asTraitComposition.! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 8/6/2012 22:08'! installTraitComposition: classModification client installTraitComposition: classModification traitComposition on: classModification target! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 8/6/2012 11:24'! invalidGlobalNameError: description "Throw a name validation exception" ^ InvalidGlobalNameConflict new signal: description! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:29'! layoutClass: aLayoutClass layoutClass := aLayoutClass! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:29'! metaOfSuper ^ superclass ifNil: [ Class ] ifNotNil: [ superclass class ].! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:29'! name: aName name := aName. self validateClassName.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 8/7/2012 02:12'! sharedPools: poolString sharedPoolsString := poolString! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 8/7/2012 02:29'! sharedVariables: aString sharedVariablesString := aString ! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/28/2011 00:29'! slots: someSlots slots := someSlots! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'CamilloBruni 5/31/2013 13:04'! superclass: aSuperclass superclass := aSuperclass. superclass ifNotNil: [ self validateClass: superclass ].! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'ToonVerwaest 3/31/2011 20:09'! traitComposition: aTraitComposition traitComposition := aTraitComposition asTraitComposition! ! !SlotClassBuilder methodsFor: 'validating' stamp: 'ToonVerwaest 3/28/2011 00:29'! validateClass: aClass aClass isBehavior ifFalse: [ self error: 'Trying to build classes from non-class objects' ]. aClass isMeta ifTrue: [ self error: 'Metaclasses cannot be used for building classes' ].! ! !SlotClassBuilder methodsFor: 'validating' stamp: 'MartinDias 10/25/2012 01:54'! validateClassName "Validate the new class name. Raise an error if invalid." name isSymbol ifFalse: [ self invalidGlobalNameError: 'Class name should be a symbol.' ]. (name detect: [ :c | (c isAlphaNumeric or: [ c = $_ ]) not ] ifNone: []) ifNotNil: [ :c | self invalidGlobalNameError: 'Invalid character: ''', c printString, '''' ]. name first canBeGlobalVarInitial ifFalse: [ self invalidGlobalNameError: 'Class name does not start with a valid Global Var Initial.' ]. ! ! !SlotClassBuilder methodsFor: 'validating' stamp: 'MartinDias 8/6/2012 11:23'! validateSuperChain: oldClass superclass ifNil: [ ^ nil ]. superclass withAllSuperclassesDo: [ :class | class == oldClass ifTrue: [ CircularHierarchyConflict signal: 'Trying to build a circular hierarchy' ]].! ! !SlotVirus commentStamp: 'CAmi 3/15/2011 15:47' prior: 41734478! I am used to spread slot into an unaffected system. SlotVirus spread. Initializes default slots and layouts on all objects (note: so far this will break custom objects with custom slots)! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:17'! basicLayoutFor: aClass aClass isBits ifTrue: [ aClass isBytes ifTrue: [ ^ aClass superclass layout extendByte ]. ^ aClass superclass layout extendWord ]. aClass isWeak ifTrue: [ ^ self basicWeakLayoutFor: aClass ]. aClass isVariable ifTrue: [ ^ self basicVariableLayoutFor: aClass ]. ^ aClass superclass layout extend: (self layoutScopeFor: aClass).! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:18'! basicLayoutScopeFor: aClass ^ aClass superclass layout slotScope extend: (aClass instVarNames ifNil: [ #() ])! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:18'! basicVariableLayoutFor: aClass ^ aClass superclass layout extendVariable: (self layoutScopeFor: aClass)! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:18'! basicWeakLayoutFor: aClass ^ aClass superclass layout extendWeak: (self layoutScopeFor: aClass)! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 3/31/2011 13:28'! checkAllLayouts (SystemNavigation default allClasses sort: [:a :b| a name <= b name]) do: [ :cls| self checkLayoutOfClass: cls. self checkLayoutOfClass: cls class.]! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 3/31/2011 13:22'! checkDuplicateClass: cls cls isMeta ifTrue: [ ^ self ]. (Smalltalk includesKey: cls name) ifFalse: [ ^ self]. ((Smalltalk at: cls name) == cls) ifFalse: [ cls becomeForward: (Smalltalk at: cls name)].! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 10/16/2011 20:12'! checkInheritedSlots: cls | mySlot | cls superclass ifNil: [ ^ self ]. (cls superclass layout size <= cls layout size) ifFalse: [ self error: (cls name, ' does not inherit all slots from ', cls superclass name). ^ self]. cls superclass layout allSlots withIndexDo: [ :slot :index| mySlot := (cls layout slotAt: index). self haltIf: slot index ~= mySlot index. self haltIf: slot name ~= mySlot name].! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 3/31/2011 13:11'! checkLayout: aClass (aClass withAllSubclasses sort: [:a :b| a name <= b name]) do: [ :cls| self checkLayoutOfClass: cls. self checkLayoutOfClass: cls class.]! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 3/31/2011 15:02'! checkLayoutOfClass: cls self checkDuplicateClass: cls. self assert: cls layout isNil not. "self assert: cls format == cls layout format." cls layout checkSanity. cls layout hasSlots ifFalse: [ ^ self]. cls isMeta ifFalse: [ (cls superclass subclasses includes: cls) ifFalse: [ "self error: (cls name, ' is not properly registered as sublclass of ', cls superclass name)." self fixSuperclassSubclasses: cls]]. self checkInheritedSlots: cls. self checkSlotsIndices: cls! ! !SlotVirus class methodsFor: 'testing' stamp: 'CamilloBruni 10/16/2011 20:14'! checkSlotsIndices: cls cls layout allSlots withIndexDo: [ :slot :index| self assert: slot name isNil not. self flag: 'fix slot indexing..' "self assert: slot index = ((cls layout fixedSizeUpToIndex: index) + 1). slot index: ((cls layout fixedSizeUpToIndex: index) + 1)"]! ! !SlotVirus class methodsFor: 'fixing' stamp: 'CamilloBruni 3/31/2011 14:16'! fixSuperclassSubclasses: cls |collection newSubclasses| cls superclass ifNil: [ ^ self ]. cls superclass addSubclass: cls. ! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:31'! installLayoutVariable (ClassDescription allInstVarNames includes: #layout) ifTrue: [ ^ self ]. ClassDescription addInstVarNamed: #layout.! ! !SlotVirus class methodsFor: 'installing' stamp: 'MartinDias 6/24/2013 16:54'! installNewLayouts ProtoObject instVarNamed: #layout put: ((EmptyLayout instance extend: #()) host: ProtoObject). " self flag: 'I do not like PseudoContext'. PseudoContext instVarNamed: #layout put: ((NilLayout instance extend: #()) host: ProtoObject)." ProtoObject allSubclassesDo: [ :aSubclass | aSubclass instVarNamed: #layout put: (self newLayoutFor: aSubclass) ]. SmallInteger instVarNamed: #layout put: (SmallIntegerLayout new). CompiledMethod instVarNamed: #layout put: (CompiledMethodLayout new).! ! !SlotVirus class methodsFor: 'testing' stamp: 'ToonVerwaest 4/1/2011 15:26'! invalidClasses | result | result := OrderedCollection new. ProtoObject withAllSubclassesDo: [ :aClass | aClass format ~~ aClass layout format ifTrue: [ result add: aClass ]]. ^ result! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:42'! layoutScopeFor: aClass ^ self basicLayoutScopeFor: aClass! ! !SlotVirus class methodsFor: 'installing' stamp: 'CamilloBruni 10/17/2011 16:56'! newLayoutFor: aClass |aLayout| aLayout := (self basicLayoutFor: aClass). aLayout := aClass traitComposition composeWithLayout: aLayout. "fill in the instvars without triggering any slots" ^ aLayout instVarNamed: #host put: aClass; instVarNamed: #compactClassIndex put: aClass indexIfCompact; yourself! ! !SlotVirus class methodsFor: 'fixing' stamp: 'MartinDias 8/12/2012 18:21'! refresh #(Slot AbstractLayout SlotObject SlotTest SlotModifier) do: [ :aName | Smalltalk at: aName ifPresent: [ :aClass | aClass recompileAll ] ]. ! ! !SlotVirus class methodsFor: 'fixing' stamp: 'CamilloBruni 3/28/2011 18:07'! removeBrokenDoIts SystemNavigation default allClassesDo: [ :cls| cls methodDict removeKey: #DoItIn: ifAbsent: []].! ! !SlotVirus class methodsFor: 'installing' stamp: 'MartinDias 7/29/2012 20:44'! spread self installLayoutVariable. self installNewLayouts. SystemNavigation default allClasses do: [ :cls| cls initializeLayout. cls class initializeLayout] displayingProgress:[:aClass| 'Processing ', aClass name]. AbstractLayout withAllSubclassesDo: [ :s | s allInstances do: [ :aLayout | self flag: #todo. "Remove the next if moving initialization code to AbstractLayout class." aLayout host ifNotNilDo: [ :host | aLayout instVarNamed: #compactClassIndex put: host indexIfCompact ] ]].! ! !ClassDescription methodsFor: '*Slot' stamp: 'CamilloBruni 10/18/2011 15:10'! initializeLayout (self allInstVarNames includes: #layout) ifFalse: [ ^ self ]. layout isNil ifFalse: [ ^ self ]. self superclass isNil ifFalse: [ self superclass initializeLayout ]. layout := SlotVirus newLayoutFor: self! ! !ClassDescription methodsFor: '*Slot' stamp: 'CAmi 3/15/2011 18:33'! initializeLayoutWithSlots: slots | offset superlayout| superlayout := superclass layout. offset := superlayout size. "create the new layout and copy in the super slots" layout := self layoutSized: slots size + offset. layout replaceFrom: 1 to: offset with: superlayout. "create new slots" slots withIndexDo: [ :slot :index| layout at: offset + index put: slot asSlot]. layout finalize. "backup solution to create instvar names" instanceVariables := Array new: slots size. 1 to: slots size do: [ :index| instanceVariables at: index put: (layout at: index + offset) name].! ! !ClassDescription methodsFor: '*Slot' stamp: 'CAmi 3/14/2011 19:37'! layout ^ layout! ! !ClassDescription methodsFor: '*Slot' stamp: 'CamilloBruni 3/30/2011 19:21'! layoutSized: size |layoutInstance layoutClass| layoutClass := PointerLayout. self isBits ifTrue: [ self isBytes ifTrue: [ layoutClass := ByteLayout ]. self isWords ifTrue: [ layoutClass := WordLayout ]] ifFalse: [ self isVariable ifTrue: [ layoutClass := VariableLayout ]. self isWeak ifTrue: [ layoutClass := WeakLayout ]]. layoutInstance := layoutClass new: size. layoutInstance host: self. ^ layoutInstance! ! !ClassDescription methodsFor: '*Slot' stamp: 'MartinDias 7/30/2012 01:49'! superclass: aSuperclass layout: aLayout layout := aLayout. " layout host: self. --> this is done in #buildFrom:scope:host:" self superclass: aSuperclass methodDictionary: MethodDictionary new format: aLayout format. instanceVariables := layout instanceVariables asArray! ! !ClassDescription methodsFor: '*Slot' stamp: 'MartinDias 6/24/2013 16:54'! superclass: aSuperclass withLayoutType: layoutType slots: slotArray | superLayout newScope newLayout | superLayout := aSuperclass ifNil: [ EmptyLayout instance ] ifNotNil: [ aSuperclass layout ]. newScope := superLayout slotScope extend: slotArray. newLayout := layoutType buildFrom: superLayout scope: newScope host: self. newLayout checkSanity. self superclass: aSuperclass layout: newLayout! ! "Slot"! ----End fileIn----! ----QUIT----an Array(27 June 2013 5:53:18 pm) Pharo.image priorSource: 8160382! ----STARTUP----an Array(27 June 2013 6:01:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 June 2013 6:01:43 pm) Pharo-30227.image priorSource: 8271427! ----STARTUP----an Array(27 June 2013 6:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(27 June 2013 6:18:04 pm) Pharo.image priorSource: 8271625! ----STARTUP----an Array(27 June 2013 6:26:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 June 2013 6:26:19 pm) Pharo-30227.image priorSource: 8271830! ----STARTUP----an Array(28 June 2013 10:48:02 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(28 June 2013 10:48:06 am) Pharo.image priorSource: 8272028! ----STARTUP----an Array(28 June 2013 10:56:10 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 10:56:10 am) Pharo-30227.image priorSource: 8272237! ----STARTUP----an Array(28 June 2013 11:57:32 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(28 June 2013 11:57:36 am) Pharo.image priorSource: 8272437! ----STARTUP----an Array(28 June 2013 12:11:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 12:11:59 pm) Pharo-30227.image priorSource: 8272647! ----STARTUP----an Array(28 June 2013 12:28:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 12:24' prior: 41715110! commentForCurrentUpdate ^ '11059 OpenToolTest failing https://pharo.fogbugz.com/f/cases/11059 10887 Compound Extension Methods Unpackaged https://pharo.fogbugz.com/f/cases/10887 10910 Window Menu Registration (like World Menu) https://pharo.fogbugz.com/f/cases/10910 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 12:25'! script327 ^ 'AST-Core-MarcusDenker.171.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.41.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1502.mcz KernelTests-MarcusDenker.520.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.25.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1155.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 12:25'! update30228 "self new update30228" self withUpdateLog: '11059 OpenToolTest failing https://pharo.fogbugz.com/f/cases/11059 10887 Compound Extension Methods Unpackaged https://pharo.fogbugz.com/f/cases/10887 10910 Window Menu Registration (like World Menu) https://pharo.fogbugz.com/f/cases/10910 '. self loadTogether: self script327 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizerTest commentStamp: 'StephaneDucasse 4/24/2011 17:10' prior: 32024500! RPackageOrganizerTest tests the behavior of PackageOrganizer. Note that it does not rely on announcement to be emitted to maintain invariants. Therefore the new created PackageOrganizer is not registered to listen to event. ! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! !SystemWindow commentStamp: '' prior: 51684640! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! !FallbackMenu commentStamp: '' prior: 0! I appear when there is an error while trying to build a menu from pragmas. I include items to: * Debug: give the user an opportunity to see and correct the error * Explain: why they're seeing a different menu * Custom: clients can add items to me by implementing #fallbackMenuOn:. Browse implementors for examples.! !RPackageOrganizer methodsFor: 'private registration' stamp: 'SeanDeNigris 6/11/2013 15:02' prior: 32014069! checkPackageExistsOrRegister: packageName (self packages anySatisfy: [ :each | self category: packageName matches: each packageName ]) ifFalse: [ (RPackage named: packageName capitalized) register ] ! ! !RPackageOrganizerTest commentStamp: 'StephaneDucasse 4/24/2011 17:10' prior: 41838310! RPackageOrganizerTest tests the behavior of PackageOrganizer. Note that it does not rely on announcement to be emitted to maintain invariants. Therefore the new created PackageOrganizer is not registered to listen to event. ! !RPackageOrganizerTest methodsFor: 'tests extending' stamp: 'SeanDeNigris 6/11/2013 15:02'! testTestingPackageExistence | extensionCategory package existingPackage | existingPackage := (RPackage named: 'RPackage-Tests') register; yourself. extensionCategory := existingPackage name, '-subcategory'. package := RPackage named: extensionCategory. packageOrganizer := package organizer. self deny: (packageOrganizer includesPackageNamed: extensionCategory). packageOrganizer checkPackageExistsOrRegister: extensionCategory. self deny: (packageOrganizer includesPackageNamed: extensionCategory).! ! !SystemWindow commentStamp: '' prior: 41873936! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! !SystemWindow class methodsFor: 'private-menu building' stamp: 'SeanDeNigris 6/14/2013 00:41'! icons ^ Smalltalk ui icons.! ! !SystemWindow class methodsFor: 'menu items' stamp: 'SeanDeNigris 6/14/2013 01:01'! windowMenuOn: aBuilder | closableLabel draggableLabel maximizeLabel | (aBuilder item: #'Close') action: [ aBuilder model closeBoxHit ]; icon: self icons windowCloseForm; enabledBlock: [ aBuilder model allowedToClose ]; withSeparatorAfter. (aBuilder item: #'About') action: [ aBuilder model showAbout ]; icon: Smalltalk ui icons smallHelpIcon; withSeparatorAfter. (aBuilder item: #'Change title...') action: [ aBuilder model relabel ]; withSeparatorAfter. (aBuilder item: #'Send to back') action: [ aBuilder model sendToBack ]. (aBuilder item: #'Make next-to-topmost') action: [ aBuilder model makeSecondTopmost ]; withSeparatorAfter. (aBuilder item: #'Create window group') action: [ aBuilder model createWindowGroup ]; withSeparatorAfter. aBuilder model mustNotClose ifFalse: [ closableLabel := #'Make unclosable' ] ifTrue: [ closableLabel := #'Make closable' ]. (aBuilder item: closableLabel) action: [ aBuilder model perform: closableLabel asCamelCase withFirstCharacterDownshifted ]. draggableLabel := aBuilder model isSticky ifTrue: [#'Make draggable'] ifFalse: [#'Make undraggable']. (aBuilder item: draggableLabel) action: [ aBuilder model toggleStickiness ]; withSeparatorAfter. maximizeLabel := aBuilder model isMaximized ifTrue: [ #'Restore' ] ifFalse: [ #'Maximize' ]. (aBuilder item: maximizeLabel) action: [ aBuilder model expandBoxHit ]; icon: self icons windowMaximizeForm. aBuilder model isCollapsed ifFalse: [ (aBuilder item: #'Window color...') action: [ aBuilder model setWindowColor ] ].! ! !SystemWindow methodsFor: 'menu actions' stamp: 'tbn 7/6/2010 16:30' prior: 51757155! addCustomMenuItems: aCustomMenu hand: aHandMorph super addCustomMenuItems: aCustomMenu hand: aHandMorph. "template..." aCustomMenu addLine. aCustomMenu add: 'Edit label...' translated action: #relabel. ! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'SeanDeNigris 6/16/2013 14:11' prior: 37810538! buildWindowMenu ^ self menuBuilder menu.! ! !SystemWindow methodsFor: 'menu actions' stamp: 'AlainPlantec 4/14/2010 15:01' prior: 51757437! changeColor "Change the color of the receiver -- triggered, e.g. from a menu. This variant allows the recolor triggered from the window's halo recolor handle to have the same result as choosing change-window-color from the window-title menu" self setWindowColor ! ! !SystemWindow methodsFor: 'menu actions' stamp: 'PavelKrivaenk 4/19/2012 10:39' prior: 51757780! createWindowGroup | group pos ext | pos := self position. ext := self extent. group := GroupWindowMorph new. group addWindow: self. (group openInWindowLabeled: 'Group: ' translated, self label) extent: ext; position: pos. ! ! !SystemWindow methodsFor: 'menu actions' stamp: 'sw 8/7/2000 17:35' prior: 51758095! deleteCloseBox closeBox ifNotNil: [closeBox delete. closeBox := nil]! ! !SystemWindow methodsFor: 'menu building' stamp: 'SeanDeNigris 6/14/2013 02:38'! discoveredMenuPragmaKeyword ^ 'windowMenu'.! ! !SystemWindow methodsFor: 'menu building' stamp: 'SeanDeNigris 6/16/2013 12:22'! fallbackMenuOn: menu "Build the menu that is put up if something is going wrong with the menubuilder" menu addToggle: 'Close' translated target: self selector: #closeBoxHit getStateSelector: nil enablementSelector: #allowedToClose. menu lastItem icon: self theme windowCloseForm.! ! !SystemWindow methodsFor: 'menu actions' stamp: 'gm 2/16/2003 20:35' prior: 51758235! makeSecondTopmost | aWorld nextWindow | aWorld := self world. nextWindow := aWorld submorphs detect: [:m | (m isSystemWindow) and: [m ~~ self]] ifNone: [^self]. nextWindow activate. aWorld addMorph: self behind: nextWindow! ! !SystemWindow methodsFor: 'menu actions' stamp: 'sw 8/7/2000 17:35' prior: 51758537! makeUnclosable mustNotClose := true. self deleteCloseBox! ! !SystemWindow methodsFor: 'menu building' stamp: 'SeanDeNigris 6/14/2013 03:09'! menuBuilder ^ menuBuilder ifNil: [ menuBuilder := PragmaMenuBuilder pragmaKeyword: self discoveredMenuPragmaKeyword model: self ].! ! !SystemWindow methodsFor: 'menu actions' stamp: 'RAA 6/12/2000 09:01' prior: 51758663! offerWindowMenu | aMenu | aMenu := self buildWindowMenu. model ifNotNil: [model addModelItemsToWindowMenu: aMenu]. aMenu popUpEvent: self currentEvent in: self world! ! !SystemWindow methodsFor: 'menu actions' stamp: 'michael.rueger 3/9/2009 18:48' prior: 51758912! sendToBack | aWorld nextWindow | aWorld := self world. nextWindow := aWorld submorphs detect: [:m | (m isSystemWindow) and: [m ~~ self]] ifNone: [^self]. nextWindow activate. aWorld addMorphBack: self! ! !SystemWindow methodsFor: 'menu actions' stamp: 'HenrikSperreJohansen 5/21/2010 13:46' prior: 51759211! setWindowColor "Allow the user to select a new basic color for the window" (UIManager default chooseColor: self paneColor) ifNotNil: [:nc | self setWindowColor: nc]. ! ! !SystemWindow methodsFor: 'menu actions' stamp: 'StephaneDucasse 5/28/2011 13:42' prior: 51759462! takeOutOfWindow "Take the receiver's pane morph out the window and place it, naked, where once the window was" | aMorph | paneMorphs size = 1 ifFalse: [^ Beeper beep]. aMorph := paneMorphs first. owner addMorphFront: aMorph. self delete! ! !SystemWindow methodsFor: 'menu actions' stamp: 'dgd 9/18/2004 18:27' prior: 51759772! wantsYellowButtonMenu "Answer true if the receiver wants a yellow button menu" ^ false! ! !RPackageCompleteSetupButForModificationTest methodsFor: 'test starting situation' stamp: 'CamilloBruni 6/15/2013 10:17' prior: 37123774! testExtensionMethodOfClass "self debug: #testExtensionMethodOfClass" "P1 A1DefinedInP1>>methodDefinedInP1 B1DefinedInP1 A2DefinedInP2>>methodDefinedInP1 (was *P2) P2 A2DefinedInP2>>methodDefinedInP2 B2DefinedInB2 P3 A3DefinedInP3 A2DefinedInP2>>methodDefinedInP3 (was *P2*)" self assert: a2 selectors size = 3. "the class contains methods defined by several packages however when looking with a package view we only see the package extension." self assert: (p2 extensionMethodsForClass: a2) size = 0. self assert: (p1 extensionMethodsForClass: a1) size = 0. "show that extensionMethodsForClass: does works for methods of class defined in the package" self assert: (p1 extensionMethodsForClass: a2) size = 1. self assert: (p3 extensionMethodsForClass: a2) size = 1.! ! !FallbackMenu commentStamp: '' prior: 41874486! I appear when there is an error while trying to build a menu from pragmas. I include items to: * Debug: give the user an opportunity to see and correct the error * Explain: why they're seeing a different menu * Custom: clients can add items to me by implementing #fallbackMenuOn:. Browse implementors for examples.! !FallbackMenu class methodsFor: 'instance creation' stamp: 'SeanDeNigris 6/16/2013 13:48'! when: aPragmaMenuBuilder fails: anObject ^ self new builder: aPragmaMenuBuilder; client: anObject; menu.! ! !FallbackMenu methodsFor: 'private' stamp: 'SeanDeNigris 6/16/2013 13:48'! builder: aPragmaMenuBuilder builder := aPragmaMenuBuilder.! ! !FallbackMenu methodsFor: 'private' stamp: 'SeanDeNigris 6/16/2013 13:49'! client: anObject client := anObject.! ! !FallbackMenu methodsFor: 'menu actions' stamp: 'SeanDeNigris 6/16/2013 14:50'! debug "If we don't reset the builder after debugging, the fallback menu does not appear anymore" [ builder menuSpec asMenuMorph ] ensure: [ builder reset ].! ! !FallbackMenu methodsFor: 'private' stamp: 'SeanDeNigris 6/14/2013 02:31'! fallbackMenuExplanations | workspace wsBindings | wsBindings := Dictionary newFrom: { #menu-> self }. workspace := Smalltalk tools workspace openContents: '"Something is wrong with this menu. To investigate just debug following expression:" menu debug'. workspace label: 'Fallback menu explanations'; setBindings: wsBindings.! ! !FallbackMenu methodsFor: 'private' stamp: 'SeanDeNigris 6/16/2013 13:59'! menu "Build the menu that is put up if something is going wrong with the menubuilder" | menu | menu := UIManager default newMenuIn: ActiveWorld for: self. menu addStayUpItem. menu add: 'Why you see this menu' target: self selector: #fallbackMenuExplanations. menu add: 'Debug' target: self selector: #debug. menu addLine. client fallbackMenuOn: menu. ^ menu! ! !Object methodsFor: '*MenuRegistration-Core' stamp: 'SeanDeNigris 6/16/2013 13:38'! fallbackMenuOn: aMenuMorph "When pragma menu building goes wrong, a fallback menu is created. To add custom items to that menu, override me in subclasses. See WorldState>>#fallbackMenuOn: for an example"! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'ClementBera 6/28/2013 11:16' prior: 28695291! testInspectArray | inspector | inspector := (1 to: 1000) asArray inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'ClementBera 6/28/2013 11:16' prior: 28695489! testInspectClass | inspector | inspector := Object inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'ClementBera 6/28/2013 11:16' prior: 28695673! testInspectDictionary | inspector | inspector := (Dictionary new) inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'ClementBera 6/28/2013 11:16' prior: 28695872! testInspectInteger | inspector | inspector := 1 inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'ClementBera 6/28/2013 11:16' prior: 28696053! testInspectTraitClass | inspector | inspector := TPureBehavior inspector. inspector changed. inspector close.! ! !WorldState class methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 01:52'! discoveredMenuPragmaKeyword ^ DesktopMenuPragmaKeyword ifNil: [DesktopMenuPragmaKeyword := 'worldMenu']! ! !WorldState class methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 02:15'! discoveredMenuTitle ^ DesktopMenuTitle ifNil: [DesktopMenuTitle := 'World']! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/14/2013 02:53'! discoveredMenuOn: aBuilder ^ aBuilder menuEntitled: self discoveredMenuTitle! ! !WorldState methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 01:52'! discoveredMenuPragmaKeyword ^ self class discoveredMenuPragmaKeyword! ! !WorldState methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 02:15'! discoveredMenuTitle ^ self class discoveredMenuTitle! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/16/2013 12:21'! fallbackMenuOn: menu "Build the menu that is put up if something is going wrong with the menubuilder" menu addTitle: 'Fallback menu'. menu commandKeyHandler: self. menu addLine. menu defaultTarget: Smalltalk tools; addList: Smalltalk tools mainMenuItems. menu addLine. menu add: 'Save' target: self class selector: #saveSession. menu add: 'Save as...' target: self class selector: #saveAs. menu add: 'Save and quit' target: self class selector: #saveAndQuit. menu add: 'Quit' target: self class selector: #quitSession.! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/14/2013 03:09' prior: 54985183! menuBuilder ^ menuBuilder ifNil: [menuBuilder := PragmaMenuBuilder pragmaKeyword: self discoveredMenuPragmaKeyword model: self ]! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/16/2013 13:13' prior: 54985572! worldMenu ^ menuBuilder menuEntitled: self discoveredMenuTitle.! ! !PragmaMenuBuilder class methodsFor: 'instance creation' stamp: 'SeanDeNigris 6/16/2013 14:18' prior: 29932746! withAllPragmaKeywords: aCollection model: aModel "Build a builder using aPragmaKeyword as the pragma keyword and aModel a the model of the resulting builder" ^ self new pragmaKeywords: aCollection; model: aModel; yourself.! ! !PragmaMenuBuilder methodsFor: 'private' stamp: 'SeanDeNigris 6/16/2013 13:48'! fallbackMenu ^ FallbackMenu when: self fails: model.! ! !PragmaMenuBuilder methodsFor: 'public menu building' stamp: 'SeanDeNigris 6/16/2013 13:26' prior: 29927967! menu "returns a MenuMorph build from my menuSpec" ^ self menuFrom: [ self menuSpec ].! ! !PragmaMenuBuilder methodsFor: 'public menu building' stamp: 'SeanDeNigris 6/16/2013 14:24' prior: 29928146! menuAt: aName "returns a MenuMorph from my menuSpec" ^ self menuFrom: [ self menuSpecAt: aName ].! ! !PragmaMenuBuilder methodsFor: 'public menu building' stamp: 'SeanDeNigris 6/16/2013 13:24' prior: 29928340! menuEntitled: aTitle "returns a MenuMorph build from my menuSpec" ^ self menuFrom: [ self menuSpec label: aTitle ].! ! !PragmaMenuBuilder methodsFor: 'private' stamp: 'SeanDeNigris 6/16/2013 13:25'! menuFrom: specBlock ^ [ specBlock value asMenuMorph ] on: Error do: [ self reset. self fallbackMenu ].! ! WorldState removeSelector: #worldMenuAt:! WorldState removeSelector: #fallbackWorldMenu! WorldState removeSelector: #fallbackMenuExplanations! WorldState removeSelector: #discoveredWorldMenuAt:! WorldState removeSelector: #discoveredWorldMenu! WorldState removeSelector: #desktopMenuTitle! WorldState removeSelector: #desktopMenuPragmaKeyword! WorldState class removeSelector: #desktopMenuTitle! WorldState class removeSelector: #desktopMenuPragmaKeyword! PasteUpMorph removeSelector: #worldMenuAt:! PasteUpMorph removeSelector: #discoveredWorldMenu! "MenuRegistration"! "Morphic-Base"! "Polymorph-Widgets"! "RPackage-Core"! "RPackage-Tests"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(28 June 2013 12:28:25 pm) Pharo.image priorSource: 8272847! ----STARTUP----an Array(28 June 2013 12:43:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 12:43:04 pm) Pharo-30228.image priorSource: 8335984! ----STARTUP----an Array(28 June 2013 12:58:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 12:55' prior: 41827580! commentForCurrentUpdate ^ '11067 World Menu is broken https://pharo.fogbugz.com/f/cases/11067 10984 Remove NameOfSubclass class https://pharo.fogbugz.com/f/cases/10984 11057 Random order in classes when debugger windows is shown https://pharo.fogbugz.com/f/cases/11057 11061 Remove test for old ClassBuilder https://pharo.fogbugz.com/f/cases/11061 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 12:55'! script328 ^ 'AST-Core-MarcusDenker.173.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.264.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1502.mcz KernelTests-MarcusDenker.522.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.12.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.27.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.480.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.94.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1156.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 12:56'! update30229 "self new update30229" self withUpdateLog: '11067 World Menu is broken https://pharo.fogbugz.com/f/cases/11067 10984 Remove NameOfSubclass class https://pharo.fogbugz.com/f/cases/10984 11057 Random order in classes when debugger windows is shown https://pharo.fogbugz.com/f/cases/11057 11061 Remove test for old ClassBuilder https://pharo.fogbugz.com/f/cases/11061 '. self loadTogether: self script328 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DebugSession methodsFor: 'evaluating' stamp: 'SebastianTleye 6/28/2013 11:21' prior: 40129730! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses addAll: (aClass traits sort: [ :t1 :t2 | t1 asString < t2 asString ]); yourself. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !Debugger methodsFor: 'private' stamp: 'SebastianTleye 6/28/2013 11:21' prior: 40132133! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses addAll: (aClass traits sort: [ :t1 :t2 | t1 asString < t2 asString ]); yourself. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !WorldState methodsFor: 'worldmenu building' stamp: 'MarcusDenker 6/28/2013 12:48' prior: 41888323! worldMenu ^self menuBuilder menuEntitled: self discoveredMenuTitle.! ! Smalltalk globals removeClassNamed: #NameOfSubclass! ClassBuilderValidationTests removeSelector: #testCreateClassWithString! Smalltalk globals removeClassNamed: #ClassBuilderValidationTests! ClassBuilderFormatTests removeSelector: #testWordVariableSubclass! ClassBuilderFormatTests removeSelector: #testWeakSubclass! ClassBuilderFormatTests removeSelector: #testVariableSubclass! ClassBuilderFormatTests removeSelector: #testSubclassWithInstanceVariables! ClassBuilderFormatTests removeSelector: #testSubclass! ClassBuilderFormatTests removeSelector: #testDuplicateClassVariableError! ClassBuilderFormatTests removeSelector: #testChangeToVariableSubclass! ClassBuilderFormatTests removeSelector: #testByteVariableSubclass! ClassBuilderFormatTests removeSelector: #subClassName! ClassBuilderFormatTests removeSelector: #makeWordVariableSubclassOf:! ClassBuilderFormatTests removeSelector: #makeWeakSubclassOf:! ClassBuilderFormatTests removeSelector: #makeVariableSubclassOf:! ClassBuilderFormatTests removeSelector: #makeNormalSubclassOf:! ClassBuilderFormatTests removeSelector: #makeIVarsSubclassOf:! ClassBuilderFormatTests removeSelector: #makeByteVariableSubclassOf:! ClassBuilderFormatTests removeSelector: #cleanup! ClassBuilderFormatTests removeSelector: #categoryNameForTemporaryClasses! ClassBuilderFormatTests removeSelector: #baseClassName! ClassBuilderFormatTests class removeSelector: #isUnitTest! Smalltalk globals removeClassNamed: #ClassBuilderFormatTests! ClassBuilderChangeClassTypeTest removeSelector: #cleanup! ClassBuilderChangeClassTypeTest removeSelector: #baseClassName! Smalltalk globals removeClassNamed: #ClassBuilderChangeClassTypeTest! "AST-Core"! "DebuggerModel"! "KernelTests"! "Morphic-Base"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 June 2013 12:58:15 pm) Pharo.image priorSource: 8336184! ----STARTUP----an Array(28 June 2013 1:12:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 1:12:31 pm) Pharo-30229.image priorSource: 8350337! ----STARTUP----an Array(28 June 2013 1:26:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 13:22' prior: 41890917! commentForCurrentUpdate ^ '11053 Cannot add class instance variables by the ui https://pharo.fogbugz.com/f/cases/11053 10439 Keymapping seems to be out of sync between 2.0 and 3.0 https://pharo.fogbugz.com/f/cases/10439 11058 Ask for suggestions at the end of a method breaks https://pharo.fogbugz.com/f/cases/11058 11060 Introduce WorldMorph as subclass of PasteUpMorph https://pharo.fogbugz.com/f/cases/11060'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 13:23'! script329 ^ 'AST-Core-MarcusDenker.173.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1505.mcz KernelTests-MarcusDenker.522.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.28.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.482.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.166.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-StephaneDucasse.214.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1156.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 13:23'! update30230 "self new update30230" self withUpdateLog: '11053 Cannot add class instance variables by the ui https://pharo.fogbugz.com/f/cases/11053 10439 Keymapping seems to be out of sync between 2.0 and 3.0 https://pharo.fogbugz.com/f/cases/10439 11058 Ask for suggestions at the end of a method breaks https://pharo.fogbugz.com/f/cases/11058 11060 Introduce WorldMorph as subclass of PasteUpMorph https://pharo.fogbugz.com/f/cases/11060'. self loadTogether: self script329 merge: false. (Smalltalk at: #WorldMorph) new beCurrentWorld. self flushCaches. ! ! "ScriptLoader30"! !WorldMorph commentStamp: '' prior: 0! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand! !ByteString methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 6/28/2013 13:03'! asShortcut ^ self asKeyCombination! ! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 6/28/2013 13:02'! asShortcut ^ self asKeyCombination! ! !SugsMenuBuilder class methodsFor: 'builder' stamp: 'GiselaDecuzzi 6/28/2013 10:40' prior: 39137086! buildSmartActionsShortcuts: aBuilder (aBuilder shortcut: #smartSuggestions) category: #SmalltalkEditor default: $t command mac| $t ctrl unix | $t ctrl do: [ :morph | morph smartSuggestions ] description: 'Browse suggestions based on selections'. ! ! !SugsMenuBuilder class methodsFor: 'show' stamp: 'GiselaDecuzzi 6/28/2013 10:59' prior: 36692193! showMenuFor: model | suggs menu context | context := [ SugsAbstractContext contextFor: model ] ifError: [ "If we aren't in the right context we will fail in populate the suggestions so... better not" ^ self ]. suggs := SugsMenuBuilder findSuggestionsFor: context. menu := UIManager default newMenuIn: model model for: model. menu addTitle: 'Suggestions > ' translated , context selectedNodeText. suggs do: [ :aSugg | (menu add: aSugg label target: aSugg action: #execute) icon: aSugg icon ]. context selectTheTextForTheNode. menu setInvokingView: self. menu invokeModal! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 6/28/2013 11:05'! selectTheTextForTheNode selectedNode ifNotNil: [ self sourceTextArea selectFrom: self nodeStart to: self nodeStop]! ! !PasteUpMorph methodsFor: 'as yet unclassified ' stamp: 'StephaneDucasse 6/27/2013 16:44'! beCurrentWorld | morphs | owner := nil. morphs := World submorphs. Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. worldState := WorldState new. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [:h | h releaseCachedState]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !WorldMorph commentStamp: '' prior: 41916295! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand! !KMKeyCombinationChoice methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 5/7/2013 18:25' prior: 37109866! = another ^ shortcuts anySatisfy: [ :each | another = each ]! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'GiselaDecuzzi 6/28/2013 12:24' prior: 17260940! showInstance: aBoolean self okToChange ifTrue:[ self model showInstance: aBoolean. classesSelection removeAll. self selectedClass ifNotNil: [:class | aBoolean ifTrue: [self selectedClass: class theNonMetaClass. acceptor := ClassOrMethodDefinitionAcceptor model: self ] ifFalse: [self selectedClass: class theMetaClass. acceptor := ClassDefinitionAcceptor model: self ]]. self update. self changed: #instanceButtonState. self changed: #instanceButtonLabel ]! ! !KMKeyCombination methodsFor: 'converting' stamp: 'GuillermoPolito 6/28/2013 13:03' prior: 34018481! asShortcut ^ self asKeyCombination! ! !Integer methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 6/28/2013 13:03'! asShortcut ^ self asKeyCombination! ! !KeyboardEvent methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 6/28/2013 13:03'! asShortcut ^ self asKeyCombination! ! !Collection methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 6/28/2013 13:02'! asShortcut ^ self asKeyCombination! ! KMSingleKeyCombination removeSelector: #asKeyCombination! KMModifiedKeyCombination removeSelector: #asKeyCombination! KMKeyCombinationSequence removeSelector: #asKeyCombination! KMKeyCombinationChoice removeSelector: #asKeyCombination! "Collections-Strings"! "Kernel"! "Keymapping-KeyCombinations"! "Morphic-Base"! "Nautilus"! "SmartSuggestions"! ----End fileIn----! ----QUIT----an Array(28 June 2013 1:26:15 pm) Pharo.image priorSource: 8350536! ----STARTUP----an Array(28 June 2013 1:40:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 1:40:44 pm) Pharo-30230.image priorSource: 8366092! ----STARTUP----an Array(28 June 2013 1:56:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 13:53' prior: 41905267! commentForCurrentUpdate ^ '10861 System not filing in class comments from changes file. https://pharo.fogbugz.com/f/cases/10861 6830 SourceCode styler should use RBParser https://pharo.fogbugz.com/f/cases/6830 6378 sizeInMemory does not take into account padding https://pharo.fogbugz.com/f/cases/6378'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 13:53'! script330 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1506.mcz KernelTests-MarcusDenker.524.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.28.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.482.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.182.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1156.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 13:53'! update30231 "self new update30231" self withUpdateLog: '10861 System not filing in class comments from changes file. https://pharo.fogbugz.com/f/cases/10861 6830 SourceCode styler should use RBParser https://pharo.fogbugz.com/f/cases/6830 6378 sizeInMemory does not take into account padding https://pharo.fogbugz.com/f/cases/6378'. self loadTogether: self script330 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !Trait method! visitMessageNode: aMessageNode (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]! ! !Trait method! visitParseErrorNode: anErrorNode! ! !Trait method! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !Trait method! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !Trait method! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !Trait method! visitThisContextNode: aThisContextNode ^ self visitVariableNode: aThisContextNode! ! !Trait method! visitAssignmentNode: anAssignmentNode self visitNode: anAssignmentNode variable. self visitNode: anAssignmentNode value! ! !Trait method! visitArrayNode: anArrayNode anArrayNode children do: [:each | self visitNode: each]! ! !Trait method! visitCascadeNode: aCascadeNode aCascadeNode messages do: [:each | self visitNode: each]! ! !Trait method! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !Trait method! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !Trait method! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !Trait method! visitPragmaNode: aPragmaNode aPragmaNode arguments do: [ :each | self visitNode: each ]! ! !Trait method! visitTemporaryNodes: aNodeCollection "This is triggered when defining the temporaries between the pipes" ^self visitArgumentNodes: aNodeCollection! ! !Trait method! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !Trait method! visitReturnNode: aReturnNode ^ self visitNode: aReturnNode value! ! !Trait method! visitVariableNode: aVariableNode ^ aVariableNode! ! !Trait method! visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode self visitNode: aRBPatternWrapperBlockNode wrappedNode. self visitArgumentNodes: aRBPatternWrapperBlockNode arguments. self visitNode: aRBPatternWrapperBlockNode body! ! !Trait method! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !Trait method! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !Trait method! visitTemporaryNode: aNode "Sent *each time* a temporary node is found" ^ self visitVariableNode: aNode! ! !Trait method! visitArgumentNode: anArgumentNode "Sent *each time* an argument node is found" ^ self visitVariableNode: anArgumentNode! ! !Trait method! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !Trait method! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !Trait method! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !Trait method! visitMethodNode: aMethodNode self visitArgumentNodes: aMethodNode arguments. aMethodNode pragmas do: [ :each | self visitNode: each ]. self visitNode: aMethodNode body! ! !Trait method! visitSuperNode: aSuperNode ^ self visitVariableNode: aSuperNode! ! !Trait method! visitSelfNode: aSelfNode ^ self visitVariableNode: aSelfNode! ! !Trait method! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !Trait method! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! !Trait method! visitNode: aNode ^aNode acceptVisitor: self! ! !Trait method! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !Trait method! visitLiteralArrayNode: aRBLiteralArrayNode aRBLiteralArrayNode contents do: [:each | self visitNode: each]! ! !Trait method! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !Trait method! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !Trait method! visitBlockNode: aBlockNode self visitArgumentNodes: aBlockNode arguments. self visitNode: aBlockNode body! ! !Trait method! visitPatternBlockNode: aRBPatternBlockNode self visitArgumentNodes: aRBPatternBlockNode arguments. self visitNode: aRBPatternBlockNode body! ! !Trait method! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !Trait method! visitLiteralNode: aLiteralNode! ! !Trait method! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !Trait method! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !Trait method! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !Trait method! visitSequenceNode: aSequenceNode self visitTemporaryNodes: aSequenceNode temporaries. aSequenceNode statements do: [:each | self visitNode: each]! ! !Trait method! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !Trait method! visitArgumentNodes: aNodeCollection "Sent *once* when visiting method and block nodes" ^aNodeCollection do: [ :each | self visitArgumentNode: each ]! ! !SHRBTextStyler commentStamp: '' prior: 0! I'm the one who visits node to coloring the code! !SHPreferences class methodsFor: 'private' stamp: 'CamilloBruni 10/31/2012 19:43' prior: 32575345! applyStyle | table | table := Groups values gather: [:group | group styleForTable]. SHTextStylerST80 styleTable: table. SHRBTextStyler styleTable: table.! ! !SHPreferences class methodsFor: 'settings' stamp: 'CamilloBruni 10/31/2012 19:41' prior: 32571865! setStyleTable: anArray SHTextStylerST80 styleTable: anArray. SHRBTextStyler styleTable: anArray.! ! !SHTextStyler methodsFor: 'styling' stamp: 'GiselaDecuzzi 6/24/2013 11:34' prior: 32588134! style: aText self terminateBackgroundStylingProcess. stylingEnabled ifTrue: [text := aText copy. self privateStyle: text. view ifNotNil: [:view2| view2 stylerStyled: text]]! ! !SHRBTextStyler commentStamp: '' prior: 41938745! I'm the one who visits node to coloring the code! !SHRBTextStyler class methodsFor: 'as yet unclassified' stamp: 'g 6/24/2013 18:02'! enableAstHighlightSetting: aBuilder (aBuilder setting: #useAstColoring) label: 'Enable AST based coloring' translated; parent: #codeBrowsing; target: SHRBTextStyler ; description: 'When selected we use AST for coloring text' translated ! ! !SHRBTextStyler class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 6/14/2013 16:47'! useAstColoring ^ PluggableTextMorph stylingClass = SHRBTextStyler ! ! !SHRBTextStyler class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 6/14/2013 16:48'! useAstColoring: bool ^ PluggableTextMorph stylingClass: (bool ifTrue: [SHRBTextStyler] ifFalse:[SHTextStylerST80])! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 21:40'! addAttributes: attributes forNode: anRBNode self addAttributes: attributes from: anRBNode start to: anRBNode stop! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 21:40'! addAttributes: attributes from: start to: stop charAttr from: start to: stop put: attributes! ! !SHRBTextStyler methodsFor: 'converting' stamp: 'CamilloBruni 10/31/2012 19:04'! addAttributesFrom: attributeRuns satisfying: aTestBlock to: aText attributeRuns withStartStopAndValueDo: [:start :stop :attributes | attributes select: aTestBlock thenDo: [ :selectedAttribute| aText addAttribute: selectedAttribute from: start to: stop ]]. ^ aText! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 20:02'! addStyle: styleSymbol attribute: additionalAttribute forNode: anRBNode self addStyle:styleSymbol attributes: { additionalAttribute } forNode: anRBNode.! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 20:01'! addStyle: styleSymbol attributes: additionalAttributes forNode: anRBNode self addAttributes: (self attributesFor: styleSymbol), additionalAttributes forNode: anRBNode.! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 19:33'! addStyle: styleSymbol forNode: anRBNode self addAttributes: (self attributesFor: styleSymbol) forNode: anRBNode.! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 21:40'! addStyle: styleSymbol from: start to: end self addAttributes: (self attributesFor: styleSymbol) from: start to: end.! ! !SHRBTextStyler methodsFor: 'private' stamp: 'CamilloBruni 10/31/2012 19:04'! attributesFor: aSymbol ^ self class attributesFor: aSymbol pixelHeight: self pixelHeight! ! !SHRBTextStyler methodsFor: 'formatting' stamp: 'CamilloBruni 10/31/2012 19:56'! literalStyleSymbol: aValue aValue isSymbol ifTrue: [ ^ #symbol ]. aValue isString ifTrue: [ ^ #string ]. aValue isNumber ifTrue: [ ^ #number ]. aValue == true ifTrue: [ ^ #true ]. aValue == false ifTrue: [ ^ #false ]. aValue == nil ifTrue: [ ^ #nil ]. ^ #default! ! !SHRBTextStyler methodsFor: 'private' stamp: 'GiselaDecuzzi 6/11/2013 18:23'! parse: aText isMethod: isMethod |root| isMethod ifTrue: [ [root := RBParser parseFaultyMethod: aText asString. root methodNode methodClass: classOrMetaClass. ^root] on: Error do: [^RBParser parseFaultyExpression: aText asString]] ifFalse:[ ^RBParser parseFaultyExpression: aText asString ].! ! !SHRBTextStyler methodsFor: 'private' stamp: 'CamilloBruni 11/1/2012 15:00'! pixelHeight ^ pixelHeight ifNil: [ pixelHeight := (font ifNil: [ TextStyle defaultFont ]) pixelSize ]! ! !SHRBTextStyler methodsFor: 'private' stamp: 'CamilloBruni 10/31/2012 19:04'! privateFormat: aText aText asString = Object sourceCodeTemplate ifTrue: [^ self parseableSourceCodeTemplate asText]. ^ aText! ! !SHRBTextStyler methodsFor: 'private' stamp: 'GiselaDecuzzi 6/24/2013 13:11'! privateStyle: aText | ast | ast := self parse: aText isMethod: classOrMetaClass isNil not . ast doSemanticAnalysis. self style: aText ast: ast. ^ aText! ! !SHRBTextStyler methodsFor: 'private' stamp: 'GiselaDecuzzi 6/24/2013 13:06'! resolveStyleFor: aVariableNode aVariableNode binding ifNil: [^#default]. aVariableNode isArg ifTrue: [ ^#methodArg]. aVariableNode isTemp ifTrue: [ ^#tempVar]. aVariableNode isInstance ifTrue: [ ^#instVar]. aVariableNode isUndeclared ifTrue: [ ^#invalid]. self flag: 'todo: see if its incompleteIdentifier'. ^#invalid.! ! !SHRBTextStyler methodsFor: 'private' stamp: 'GiselaDecuzzi 5/30/2013 12:50'! style: aText ast: ast | oldRuns | oldRuns := aText runs. text := aText. charAttr := Array new: aText size withAll: (self attributesFor: #default). ast acceptVisitor: self . aText runs: (RunArray newFrom: charAttr). self addAttributesFrom: oldRuns satisfying: [:each | each shoutShouldPreserve] to: aText. ! ! !SHRBTextStyler methodsFor: 'converting' stamp: 'CamilloBruni 10/31/2012 19:04'! unstyledTextFrom: aText "return a Text object without all styling attributes" | answer | answer := super unstyledTextFrom: aText. self addAttributesFrom: aText runs satisfying: [ :each| each isKindOf: TextAction ] to: answer. ^ answer! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 14:44' prior: 41935056! visitArgumentNode: anArgumentNode self addStyle: #argument forNode: anArgumentNode.! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/27/2013 17:31' prior: 41937130! visitBlockNode: aBlockNode aBlockNode comments do: [ :comment| self addStyle: #comment from: comment first to: comment last ]. aBlockNode arguments do: [ :argument| self addStyle: #blockPatternArg forNode: argument ]. self visitNode: aBlockNode body! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 6/24/2013 13:01'! visitClassReferenceNode: aNode Smalltalk at: aNode name asSymbol ifAbsent: [ self addStyle: #invalid attribute: (TextClassLink className: aNode name asSymbol ) forNode: aNode. ^self ]. self addStyle: #globalVar attribute: (TextClassLink className: aNode name asSymbol ) forNode: aNode ! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:20' prior: 41937589! visitLiteralNode: aLiteralNode | value | value := aLiteralNode value. self addStyle: (self literalStyleSymbol: value) attribute: (TextClassLink class: value class) forNode: aLiteralNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 6/24/2013 17:48' prior: 41931898! visitMessageNode: aMessageNode | style link | style := #keyword. self haltOnce. (Symbol findInterned: aMessageNode selector asString ) ifNil: [ (Symbol thatStartsCaseSensitive:aMessageNode selector asString skipping: nil) isNil ifTrue: [style := #undefinedKeyword] ifFalse: [style := #incompleteKeyword]]. link := TextMethodLink selector: aMessageNode selector. aMessageNode selectorParts do: [ :token| self addStyle: style attribute: link forNode: token ]. (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/27/2013 17:56' prior: 41935686! visitMethodNode: aMethodNode aMethodNode comments do: [ :comment| self addStyle: #comment from: comment first to: comment last ]. aMethodNode arguments do: [ :argument| self addStyle: #patternArg forNode: argument ]. aMethodNode selectorParts do: [ :selectorPart| self addStyle: #patternKeyword forNode: selectorPart ]. aMethodNode pragmas do: [ :each | self visitNode: each ]. self visitNode: aMethodNode body! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/27/2013 17:56' prior: 41936424! visitNode: aNode aNode comments do: [ :comment| self addStyle: #comment from: comment first to: comment last ]. ^aNode acceptVisitor: self! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:21' prior: 41932125! visitParseErrorNode: anErrorNode self addStyle: #invalid forNode: anErrorNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:21' prior: 41933748! visitPragmaNode: aPragmaNode aPragmaNode selectorParts do: [ :token| self addStyle: #pragmaKeyword forNode: token ]. aPragmaNode arguments do: [ :each | self visitNode: each ]! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 6/3/2013 16:53' prior: 41934198! visitReturnNode: aReturnNode self addStyle: #return from: aReturnNode start to: aReturnNode stop. self visitNode: aReturnNode value! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:22' prior: 41935961! visitSelfNode: aSelfNode self addStyle: #self forNode: aSelfNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/27/2013 17:55' prior: 41938203! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [ :temporary| self addStyle: #patternTempVar forNode: temporary ]. aSequenceNode statements do: [:each | self visitNode: each]! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:23' prior: 41935878! visitSuperNode: aSuperNode self addStyle: #super forNode: aSuperNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:23' prior: 41934932! visitTemporaryNode: aTemporaryNode self addStyle: #tempVar forNode: aTemporaryNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 5/24/2013 15:24' prior: 41932681! visitThisContextNode: aThisContextNode self addStyle: #thisContext forNode: aThisContextNode! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 6/11/2013 16:28' prior: 41934283! visitVariableNode: aVariableNode aVariableNode name first isUppercase ifTrue: [environment ifNil: [ ^ self visitClassReferenceNode: aVariableNode ]]. self addStyle: (self resolveStyleFor: aVariableNode) attribute: (TextVariableLink variableName: aVariableNode name) forNode: aVariableNode. ! ! !SHTextStylerST80 methodsFor: 'private' stamp: 'CamilloBruni 10/31/2012 19:29'! addAttribute: newAttribute in: range to: charAttributes |attributes| attributes := charAttributes at: range start. attributes := attributes, {newAttribute}. charAttributes from: range start to: range end put: attributes! ! !SHTextStylerST80 methodsFor: 'converting' stamp: 'CamilloBruni 10/31/2012 16:57' prior: 32591809! addAttributesFrom: attributeRuns satisfying: aTestBlock to: aText attributeRuns withStartStopAndValueDo: [:start :stop :attributes | attributes select: aTestBlock thenDo: [ :selectedAttribute| aText addAttribute: selectedAttribute from: start to: stop ]]. ^ aText! ! !SHTextStylerST80 methodsFor: 'private' stamp: 'GiselaDecuzzi 5/30/2013 12:50' prior: 32594474! privateStyle: aText (self rangesIn: aText setWorkspace: true) ifNotNilDo: [ :ranges| self setAttributesIn: aText fromRanges: ranges]! ! !SHTextStylerST80 methodsFor: 'private' stamp: 'GiselaDecuzzi 5/30/2013 12:50' prior: 32594699! rangesIn: aText setWorkspace: aBoolean parser ifNil: [parser := SHParserST80 new on: (view ifNotNil: [ view model ]) ]. ^ parser rangesIn: aText asString classOrMetaClass: classOrMetaClass workspace: (aBoolean ifTrue: [workspace]) environment: environment! ! !SHTextStylerST80 methodsFor: 'converting' stamp: 'CamilloBruni 10/31/2012 16:57' prior: 32592188! unstyledTextFrom: aText "return a Text object without all styling attributes" | answer | answer := super unstyledTextFrom: aText. self addAttributesFrom: aText runs satisfying: [ :each| each isKindOf: TextAction ] to: answer. ^ answer! ! !Object methodsFor: 'memory usage' stamp: 'GuillermoPolito 6/28/2013 11:06' prior: 28624329! sizeInMemory "Answer the number of bytes consumed by this instance including object header." | contentBytes | contentBytes := Smalltalk wordSize. "base header" contentBytes := contentBytes + (self class instSize * Smalltalk wordSize). "instance vars" self class isVariable ifTrue:[ | bytesPerElement | "indexed elements" bytesPerElement := self class isBytes ifTrue: [1] ifFalse: [4]. contentBytes := (contentBytes + (self basicSize * bytesPerElement)). "If we are not filling an ammount of bytes multiple of the wordSize, we do it" (contentBytes \\ Smalltalk wordSize) = 0 ifFalse: [ | extraBytesToFillAWord | extraBytesToFillAWord := Smalltalk wordSize - (contentBytes \\ Smalltalk wordSize). contentBytes := contentBytes + extraBytesToFillAWord. ] ]. contentBytes > 255 ifTrue: [ contentBytes := contentBytes + (2 * Smalltalk wordSize) ] ifFalse: [ self class isCompact ifFalse: [ contentBytes := contentBytes + Smalltalk wordSize] ]. ^contentBytes! ! !ChangeRecord methodsFor: 'initialization' stamp: 'GuillermoPolito 6/28/2013 10:37' prior: 37207048! fileIn "File the receiver in. If I represent a method or a class-comment, file the method in and make a note of it in the recent-submissions list; if I represent a do-it, then, well, do it." Cursor read showWhile: [ | methodClass s | (methodClass := self methodClass) notNil ifTrue: [ methodClass compile: self text classified: category withStamp: stamp notifying: nil ]. type == #doIt ifTrue: [ ((s := self string) beginsWith: '----') ifFalse: [ self class compiler evaluate: s ] ]. type == #classComment ifTrue: [ (Smalltalk globals at: class asSymbol) comment: self text stamp: stamp ] ]! ! !SizeInMemoryTest methodsFor: 'tests' stamp: 'GuillermoPolito 6/28/2013 11:01'! testSizeInMemoryOfByteObjects "Byte objects should be padded to words" self assert: 'a' sizeInMemory equals: 8. self assert: 'abcd' sizeInMemory equals: 8. self assert: '' sizeInMemory equals: 4. self assert: 'abcde' sizeInMemory equals: 12. self assert: 'abcdefghi' sizeInMemory equals: 16.! ! !RBParseErrorNode methodsFor: 'accessing' stamp: 'g 6/24/2013 18:03'! binding: anOCTempVariable "only for compatibility" ! ! "AST-Core"! "Kernel"! "KernelTests"! "Shout"! "System-Changes"! ----End fileIn----! ----QUIT----an Array(28 June 2013 1:56:13 pm) Pharo.image priorSource: 8366290! ----STARTUP----an Array(28 June 2013 2:04:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 2:04:08 pm) Pharo-30231.image priorSource: 8399659! ----STARTUP----an Array(28 June 2013 2:37:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 14:34' prior: 41921021! commentForCurrentUpdate ^ '11068 Separating WorldMorph from PasteUpMorph https://pharo.fogbugz.com/f/cases/11068'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 14:34'! script331 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1506.mcz KernelTests-MarcusDenker.524.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.31.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.482.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.182.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.559.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1156.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 14:35'! update30232 "self new update30232" self withUpdateLog: '11068 Separating WorldMorph from PasteUpMorph https://pharo.fogbugz.com/f/cases/11068'. self loadTogether: self script331 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WorldMorph commentStamp: '' prior: 41918720! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld.! !WorldMorph commentStamp: '' prior: 41964957! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld.! !WorldMorph class methodsFor: 'system startup' stamp: 'StephaneDucasse 6/27/2013 17:00'! cleanUp World cleanseOtherworldlySteppers.! ! !WorldMorph class methodsFor: 'setting' stamp: 'StephaneDucasse 6/27/2013 19:29'! defaultWorldColor ^ Color r: 0.937 g: 0.937 b: 0.937. ! ! !WorldMorph class methodsFor: 'system startup' stamp: 'StephaneDucasse 6/27/2013 17:00'! shutDown World ifNotNil: [ World triggerEvent: #aboutToLeaveWorld ]! ! !WorldMorph class methodsFor: 'system startup' stamp: 'StephaneDucasse 6/27/2013 17:00'! startUp World ifNotNil: [ World restoreMorphicDisplay. World triggerEvent: #aboutToEnterWorld ]! ! !WorldMorph methodsFor: 'structure' stamp: 'StephaneDucasse 6/27/2013 17:46'! activeHand ^ worldState activeHand! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57'! activeHand: aHandMorph "temporarily retained for old main event loops" worldState activeHand: aHandMorph. ! ! !WorldMorph methodsFor: 'alarms-scheduler' stamp: 'StephaneDucasse 6/27/2013 17:23'! addAlarm: aSelector withArguments: argArray for: aTarget at: scheduledTime "Add a new alarm with the given set of parameters" worldState addAlarm: aSelector withArguments: argArray for: aTarget at: scheduledTime.! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:56'! addHand: aHandMorph "Add the given hand to the list of hands for this world." aHandMorph owner ifNotNil: [ aHandMorph owner removeHand: aHandMorph ]. worldState addHand: aHandMorph. aHandMorph privateOwner: self! ! !WorldMorph methodsFor: 'submorphs-accessing' stamp: 'StephaneDucasse 6/27/2013 17:51'! allMorphsDo: aBlock "Enumerate all morphs in the world, including those held in hands." super allMorphsDo: aBlock. worldState handsReverseDo: [ :h | h allMorphsDo: aBlock ]! ! !WorldMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 6/27/2013 17:22'! announcer WorldAnnouncer ifNil: [ WorldAnnouncer := Announcer new ]. ^ WorldAnnouncer! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57'! assuredCanvas ^ worldState assuredCanvas! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 17:50'! canvas ^ worldState canvas! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:12'! cleanseStepList "Remove morphs from the step list that are not in this World." worldState cleanseStepListForWorld: self! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 17:31'! defaultWorldColor ^ self class defaultWorldColor! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 6/27/2013 20:07'! deleteBalloonTarget: aMorph "Delete the balloon help targeting the given morph" self handsDo: [ :h | h deleteBalloonTarget: aMorph ]! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:20'! discoveredWorldMenu ^ worldState discoveredWorldMenu! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:55'! displayWorld worldState displayWorld: self submorphs: submorphs! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57'! displayWorldSafely worldState displayWorldSafely: self. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 17:57'! doOneCycle "see the comment in doOneCycleFor:" worldState doOneCycleFor: self! ! !WorldMorph methodsFor: 'interaction loop' stamp: 'StephaneDucasse 6/27/2013 19:00'! doOneCycleNow "see the comment in doOneCycleNowFor:" worldState doOneCycleNowFor: self. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:12'! doOneSubCycle "Like doOneCycle, but preserves activeHand." worldState doOneSubCycleFor: self! ! !WorldMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 6/27/2013 18:51'! extent: aPoint super extent: aPoint. worldState viewBox ifNotNil: [ worldState canvas: nil. worldState viewBox: bounds ]! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:51'! firstHand ^ worldState hands first! ! !WorldMorph methodsFor: 'geometry testing' stamp: 'StephaneDucasse 6/28/2013 13:23'! fullContainsPoint: pt ^bounds containsPoint: pt ! ! !WorldMorph methodsFor: '*Morphic-Base-Windows' stamp: 'StephaneDucasse 6/28/2013 13:25'! fullRepaintNeeded worldState doFullRepaint. self windowsSatisfying: [:w | w makeMeVisible. false]. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:53'! haloMorphs ^ self hands collect: [ :h | h halo ] thenSelect: [ :halo | halo notNil ]! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:47'! hands ^ worldState hands! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:57'! handsDo: aBlock ^ worldState handsDo: aBlock ! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:58'! handsReverseDo: aBlock ^ worldState handsReverseDo: aBlock! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 19:30'! install "Was beCurrentWorld and should be later called initialize" | morphs | owner := nil. morphs := World submorphs. "we should decide if we get morph or not. Now submorphs returns an array and this is strange that this is not an OrderedCollection" Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. worldState := WorldState new. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [ :h | h releaseCachedState ]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !WorldMorph methodsFor: 'change reporting' stamp: 'StephaneDucasse 6/27/2013 18:52'! invalidRect: damageRect from: aMorph "Clip damage reports to my bounds, since drawing is clipped to my bounds." worldState recordDamagedRect: (damageRect intersect: self bounds ifNone: [ ^ self ])! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:17'! isEasySelecting "This is to isolate easySelection predicate. Selectors in holders make no sense so we are limiting easy selection to the worldMorph. It would also make sense in playfield so feel free to adjust this predicate. Selection can always be forced by using the shift before mouse down." ^ worldState isEasySelecting! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:11'! isStepping: aMorph ^ worldState isStepping: aMorph! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:10'! isStepping: aMorph selector: aSelector ^ worldState isStepping: aMorph selector: aSelector! ! !WorldMorph methodsFor: 'classification' stamp: 'StephaneDucasse 6/27/2013 16:48'! isWorldMorph ^ true! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:09'! listOfSteppingMorphs ^ worldState listOfSteppingMorphs "self currentWorld listOfSteppingMorphs"! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 6/27/2013 19:43'! mouseUp: evt self removeAlarm: #invokeWorldMenu:. super mouseUp: evt.! ! !WorldMorph methodsFor: 'printing' stamp: 'StephaneDucasse 6/27/2013 19:02'! printOn: aStream "Reimplemented to add a tag showing that the receiver is currently functioning as a 'world', if it is" super printOn: aStream. aStream nextPutAll: ' [world]'! ! !WorldMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/27/2013 19:24'! privateMoveBy: delta super privateMoveBy: delta. worldState viewBox ifNotNil: [ worldState viewBox: bounds ]! ! !WorldMorph methodsFor: 'alarms-scheduler' stamp: 'StephaneDucasse 6/27/2013 18:51'! removeAlarm: aSelector for: aTarget "Remove the alarm with the given selector" worldState removeAlarm: aSelector for: aTarget! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:51'! removeHand: aHandMorph "Remove the given hand from the list of hands for this world." (worldState hands includes: aHandMorph) ifFalse: [ ^ self ]. aHandMorph dropMorphs. self invalidRect: aHandMorph fullBounds. worldState removeHand: aHandMorph! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:08'! resetWorldMenu worldState resetWorldMenu ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:08'! runLocalStepMethods worldState runLocalStepMethodsIn: self ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07'! runStepMethods worldState runStepMethodsIn: self ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:15'! sleep worldState canvas ifNil: [^ self "already called (clean this up)"]. Cursor normal show. "restore the normal cursor" worldState canvas: nil. "free my canvas to save space" self fullReleaseCachedState. ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07'! startStepping: aMorph at: scheduledTime selector: aSelector arguments: args stepTime: stepTime worldState startStepping: aMorph at: scheduledTime selector: aSelector arguments: args stepTime: stepTime.! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:07'! stepListSize ^ worldState stepListSize "Transcript cr; show: self currentWorld stepListSize printString, ' items on steplist as of ', Date dateAndTimeNow printString"! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07'! stopStepping: aMorph "Remove the given morph from the step list." worldState stopStepping: aMorph ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:06'! stopStepping: aMorph selector: aSelector "Remove the given morph from the step list." worldState stopStepping: aMorph selector: aSelector ! ! !WorldMorph methodsFor: 'copying' stamp: 'StephaneDucasse 6/27/2013 18:51'! veryDeepCopyWith: deepCopier "never copy the World" ^ self! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:58'! viewBox ^ worldState viewBox! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:15'! viewBox: newViewBox "I am now displayed within newViewBox; react." (self viewBox isNil or: [ self viewBox extent ~= newViewBox extent ]) ifTrue: [ worldState canvas: nil ]. worldState viewBox: newViewBox. super viewBox: newViewBox. worldState handsDo: [ :hand | hand releaseKeyboardFocus ]. self fullRepaintNeeded! ! !WorldMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/27/2013 19:33'! wantsDroppedMorph: aMorph event: evt ^ true! ! !WorldMorph methodsFor: 'structure' stamp: 'StephaneDucasse 6/27/2013 19:03'! world ^self! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:05'! worldMenu ^ worldState worldMenu ! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04'! worldMenuAt: aMenuItemName ^ worldState worldMenuAt: aMenuItemName! ! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(28 June 2013 2:37:12 pm) Pharo.image priorSource: 8399857! ----STARTUP----an Array(28 June 2013 2:45:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 2:45:03 pm) Pharo-30232.image priorSource: 8422154! ----STARTUP----an Array(28 June 2013 3:04:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(28 June 2013 3:04:05 pm) Pharo.image priorSource: 8422352! ----STARTUP----an Array(28 June 2013 3:12:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 3:12:05 pm) Pharo-30232.image priorSource: 8422560! ----STARTUP----an Array(28 June 2013 3:55:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 6/28/2013 15:52' prior: 41954588! commentForCurrentUpdate ^ '10670 Scrolling unfocused list https://pharo.fogbugz.com/f/cases/10670 10791 Spotlight: Mousing Suggestion is not accepted https://pharo.fogbugz.com/f/cases/10791 11076 Harden testErrorClassCreation https://pharo.fogbugz.com/f/cases/11076 11073 Duplicated variables and uncategorized methos in SHRBStyler https://pharo.fogbugz.com/f/cases/11073'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 6/28/2013 15:53'! script332 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1506.mcz KernelTests-MarcusDenker.524.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.823.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.33.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.482.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.11.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-MarcusDenker.97.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-MarcusDenker.232.mcz RPackage-SystemIntegration-MarcusDenker.164.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-MarcusDenker.39.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-MarcusDenker.46.mcz Refactoring-Environment-MarcusDenker.16.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.107.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.76.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.110.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.858.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-MarcusDenker.561.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1159.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.518.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 6/28/2013 15:53'! update30233 "self new update30233" self withUpdateLog: '10670 Scrolling unfocused list https://pharo.fogbugz.com/f/cases/10670 10791 Spotlight: Mousing Suggestion is not accepted https://pharo.fogbugz.com/f/cases/10791 11076 Harden testErrorClassCreation https://pharo.fogbugz.com/f/cases/11076 11073 Duplicated variables and uncategorized methos in SHRBStyler https://pharo.fogbugz.com/f/cases/11073'. self loadTogether: self script332 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SHRBTextStyler commentStamp: '' prior: 41939598! I'm the one who visits node to coloring the code! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 6/28/2013 15:03' prior: 53439269! testErrorClassCreation | tmpCategory trait aSubclass aClass | tmpCategory := 'TemporaryGeneratedClasses'. trait := Trait named: #TMyTrait uses: {} category: tmpCategory. [ aClass := nil subclass: #AClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: tmpCategory. "----------------" aSubclass := aClass subclass: #AClass2 uses: trait instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: tmpCategory. "----------------" "Change the superclass of AClass" Object subclass: #AClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: tmpCategory. self assert: trait users asArray equals: {aSubclass}. self assert: aSubclass traits asArray equals: {trait}. ] ensure: [ #(AClass AClass2 TMyTrait) do: [ :aClassName | Smalltalk globals at: aClassName ifPresent: [ :v | v removeFromSystem ]]]! ! !SHRBTextStyler commentStamp: '' prior: 41988398! I'm the one who visits node to coloring the code! !SHRBTextStyler class methodsFor: 'configuration' stamp: 'g 6/24/2013 18:02' prior: 41939732! enableAstHighlightSetting: aBuilder (aBuilder setting: #useAstColoring) label: 'Enable AST based coloring' translated; parent: #codeBrowsing; target: SHRBTextStyler ; description: 'When selected we use AST for coloring text' translated ! ! !SHRBTextStyler class methodsFor: 'configuration' stamp: 'GiselaDecuzzi 6/14/2013 16:47' prior: 41940098! useAstColoring ^ PluggableTextMorph stylingClass = SHRBTextStyler ! ! !SHRBTextStyler class methodsFor: 'configuration' stamp: 'GiselaDecuzzi 6/14/2013 16:48' prior: 41940265! useAstColoring: bool ^ PluggableTextMorph stylingClass: (bool ifTrue: [SHRBTextStyler] ifFalse:[SHTextStylerST80])! ! !SHRBTextStyler methodsFor: 'visiting rb nodes' stamp: 'GiselaDecuzzi 6/28/2013 14:32' prior: 41946193! visitMessageNode: aMessageNode | style link | style := #keyword. (Symbol findInterned: aMessageNode selector asString ) ifNil: [ (Symbol thatStartsCaseSensitive:aMessageNode selector asString skipping: nil) isNil ifTrue: [style := #undefinedKeyword] ifFalse: [style := #incompleteKeyword]]. link := TextMethodLink selector: aMessageNode selector. aMessageNode selectorParts do: [ :token| self addStyle: style attribute: link forNode: token ]. (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) ifTrue: [self visitNode: aMessageNode receiver]. aMessageNode arguments do: [:each | self visitNode: each]! ! !Spotlight methodsFor: 'events' stamp: 'GuillermoPolito 6/28/2013 13:32' prior: 50755698! localHandleKeystroke: evt "Answer whether we locally handle the keyStroke event. Disregard tabs for now." | crAction | search textMorph acceptContents. crAction := search textMorph crAction. (search autoAccept and: [ evt keyCharacter = Character cr and: [ crAction notNil ] ]) ifTrue: [ self updateContentsWithMenu. (crAction isKindOf: MessageSend) ifTrue: [ crAction value] ifFalse: [ crAction value: search text]. ^true]. ^false! ! !HandMorph methodsFor: 'private events' stamp: 'GuillermoPolito 6/28/2013 13:15' prior: 38521063! generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp charCode keyValue keyEvent | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [ type := #keyDown. lastKeyScanCode := evtBuf third]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [ type := #keystroke]. modifiers := evtBuf fifth. buttons := modifiers bitShift: 3. keyValue := evtBuf third. charCode := evtBuf sixth. type = #keystroke ifTrue: [combinedChar ifNil: [ | peekedEvent | peekedEvent := Sensor peekEvent. (peekedEvent notNil and: [peekedEvent fourth = EventKeyDown]) ifTrue: [ (CombinedChar isCompositionCharacter: charCode) ifTrue: [ combinedChar := CombinedChar new. combinedChar simpleAdd: charCode asCharacter. (combinedChar combinesWith: peekedEvent third asCharacter) ifTrue: [^nil]. ]]] ifNotNil: [ (combinedChar simpleAdd: charCode asCharacter) ifTrue: [charCode := combinedChar combined charCode]. combinedChar := nil]]. self flag: #fixme. "This piece of code handles the creation of scrolling events. When a scroll is done by the user, the VM forwards a keystroke event with the up/down key. So we reconvert it to a MouseWheelEvent in that case." (type = #keystroke and: [(buttons anyMask: 16) and: [charCode = 30 or: [charCode = 31]]]) ifTrue: [^MouseWheelEvent new setType: #mouseWheel position: lastMouseEvent cursorPoint direction: (charCode = 30 ifTrue: [#up] ifFalse: [#down]) buttons: buttons hand: self stamp: stamp]. keyEvent := KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue charCode: charCode hand: self stamp: stamp. keyEvent scanCode: lastKeyScanCode. ^keyEvent ! ! "Morphic-Base"! "Shout"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 June 2013 3:55:14 pm) Pharo.image priorSource: 8422758! ----STARTUP----an Array(28 June 2013 4:03:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 4:03:17 pm) Pharo-30233.image priorSource: 8439566! ----STARTUP----an Array(28 June 2013 5:01:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 6/28/2013 16:50' prior: 41977489! commentForCurrentUpdate ^ '6757 Should enable the new class organizer https://pharo.fogbugz.com/f/cases/6757 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 6/28/2013 16:51'! script333 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.33.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.485.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.31.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.861.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1160.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 6/28/2013 16:51'! update30234 "self new update30234" self withUpdateLog: '6757 Should enable the new class organizer https://pharo.fogbugz.com/f/cases/6757 '. self loadTogether: self script333 merge: false. Smalltalk allClassesAndTraitsDo: [:c || org proOrg | org := c theNonMetaClass organization. proOrg := ClassOrganization importFrom: org. c theNonMetaClass organization: proOrg. org := c theMetaClass organization. proOrg := ClassOrganization importFrom: org. c theMetaClass organization: proOrg ]. "There is an error classifying this one" (ClassDescription>>#updateOrganizationDescription:oldCategory:newCategory:changed:) protocol: 'organization updating'. self flushCaches. ! ! "ScriptLoader30"! !ProtocolRemovalException commentStamp: '' prior: 0! A ProtocolRemovalException is an error raised when someone try to remove a protocol that should not be removed! !MCMethodDefinitionTest methodsFor: 'mocks' stamp: 'EstebanLorenzano 6/27/2013 18:28' prior: 24861270! override ^ 1! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'EstebanLorenzano 5/28/2013 13:22' prior: 19262136! testOrganization | aClassOrganizer | aClassOrganizer := ClassDescription organization. self assert: (aClassOrganizer isKindOf: ClassOrganization).! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 6/17/2013 13:43' prior: 39953216! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !CodeHolder methodsFor: 'categories' stamp: 'EstebanLorenzano 6/26/2013 17:59' prior: 19422916! categoryFromUserWithPrompt: aPrompt for: aClass "self new categoryFromUserWithPrompt: 'testing' for: SystemDictionary" | labels myCategories reject lines newName | labels := OrderedCollection new. labels addAll: (myCategories := aClass organization categories asSortedCollection: [:a :b | a asLowercase < b asLowercase]). reject := myCategories asSet. reject add: Protocol nullCategory; add: Protocol unclassified. lines := OrderedCollection with: 1 with: (myCategories size + 1). aClass allSuperclasses do: [:cls | | cats | cats := cls organization categories reject: [:cat | reject includes: cat]. cats isEmpty ifFalse: [lines add: labels size. labels addAll: (cats asSortedCollection: [:a :b | a asLowercase < b asLowercase]). reject addAll: cats]]. newName := UIManager default chooseOrRequestFrom: labels lines: lines title: aPrompt. ^ newName ifNotNil: [newName asSymbol]! ! !ChunkImportTestCase methodsFor: 'importing-code' stamp: 'EstebanLorenzano 6/27/2013 17:35' prior: 19032964! testImportAClassCategory | class classOrganizationString chunk | classOrganizationString := '(#testing testImportAMethod testImportAClass) (#auxiliar importAClass)'. chunk := '!!{1} reorganize!!'. SystemAnnouncer uniqueInstance suspendAllWhile: [ [ class := self importAClass. "we write the methods we will categorize" class compileSilently: 'testImportAClass'. class compileSilently: 'testImportAMethod'. class compileSilently: 'importAClass'. CodeImporter evaluateString: (chunk format: { class name asString }), classOrganizationString. self assert: classOrganizationString trimBoth equals: class organization stringForFileOut trimBoth. ] ensure: [ class ifNotNil: [ class removeFromSystem ] ] ]! ! !TraitMethodDescription methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:07' prior: 53411160! effectiveMethodCategoryCurrent: currentCategoryOrNil new: newCategoryOrNil | result size isCurrent isConflict | size := self size. size = 0 ifTrue: [^ nil]. result := self locatedMethods anyOne category. size = 1 ifTrue: [^ result]. isCurrent := currentCategoryOrNil isNil. isConflict := false. self locatedMethods do: [:each | | cat | cat := each category. isCurrent := isCurrent or: [cat == currentCategoryOrNil]. isConflict := isConflict or: [cat ~~ result]]. isConflict ifFalse: [^ result]. (isCurrent not and: [newCategoryOrNil notNil]) ifTrue: [^ newCategoryOrNil]. ^ Protocol ambiguous ! ! !SystemNavigation methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 13:50' prior: 51554731! allMethodsInCategory: category "Answer the collection of methods that are contained in a particular method category" "SystemNavigation new allMethodsInCategory: 'printing'" | aCollection | aCollection := Set new. self allBehaviorsDo: [ :behavior | (behavior organization listAtCategoryNamed: category) do: [ :sel | aCollection add: (self createMethodNamed: sel realParent: behavior) ] ]. ^aCollection. ! ! !MCSnapshotBrowserTest methodsFor: 'private' stamp: 'EstebanLorenzano 6/27/2013 18:38' prior: 25023902! protocolsForClass: aClass ^ aClass organization realCategories ! ! !ProtocolOrganizer methodsFor: 'protocol - adding' stamp: 'EstebanLorenzano 6/21/2013 14:37' prior: 30091680! addProtocolNamed: aName ^ protocols add: (Protocol name: aName)! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:12' prior: 30087214! allProtocolsNames ^ self allProtocols collect: #name! ! !ProtocolOrganizer methodsFor: 'protocol - adding' stamp: 'EstebanLorenzano 5/28/2013 14:11' prior: 30089221! classify: aSymbol inProtocolNamed: aProtocolName | name protocol | name := aProtocolName. name = allProtocol name ifTrue: [ name := Protocol unclassified ]. "maybe here we should check if this method already belong to another protocol" (self protocolsOfSelector: aSymbol) do: [:p | p removeMethod: aSymbol ]. protocol := self getProtocolNamed: name ifNone: [ self addProtocolNamed: name ]. protocol addMethod: aSymbol ! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/21/2013 15:31' prior: 30089749! classify: aSymbol inProtocolNamed: aProtocolName suppressIfDefault: aBoolean | oldProtocols | oldProtocols := self protocolsOfSelector: aSymbol. self classify: aSymbol inProtocolNamed: aProtocolName. aBoolean ifTrue: [ (oldProtocols select: #canBeRemoved) do: [:e | self removeProtocol: e ] ].! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:56' prior: 30090172! getProtocolNamed: aName ^ self allProtocols detect: [ :e | e name = aName ] ifNone: [ Protocol empty ]! ! !ProtocolOrganizer methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 16:08'! hasProtocolNamed: aString ^ self allProtocols anySatisfy: [ :each | each name = aString ]! ! !ProtocolOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 6/26/2013 18:01' prior: 30088268! importFrom: aClassOrganizer aClassOrganizer categories do: [:cat || protocol methods | cat = Protocol nullCategory ifFalse: [ methods := aClassOrganizer listAtCategoryNamed: cat. protocol := self addProtocolNamed: cat asString. methods do: [:m | protocol addMethod: m ]]].! ! !ProtocolOrganizer methodsFor: 'testing' stamp: 'EstebanLorenzano 6/28/2013 16:03'! includesSelector: selector ^ protocols anySatisfy: [ :each | each includesSelector: selector ]! ! !ProtocolOrganizer methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 5/28/2013 14:52' prior: 30090591! methodsInProtocolNamed: aName aName = AllProtocol defaultName ifTrue: [ ^ self allMethods ]. ^ (self getProtocolNamed: aName) methods! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:03' prior: 30087505! protocolsNames ^ protocols collect: #name as: Array! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/28/2013 16:05' prior: 30090756! protocolsOfSelector: aSelector ^ (self protocols select: [:each | each includesSelector: aSelector ]) asArray! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/21/2013 14:51' prior: 30090952! protocolsSorted ^ (self protocols collect: #name as: Array) sort copyWithFirst: allProtocol name! ! !ProtocolOrganizer methodsFor: 'protocol - removing' stamp: 'EstebanLorenzano 6/27/2013 16:10' prior: 30092082! removeProtocol: aProtocol aProtocol canBeRemoved ifFalse: [ "Virtual protocols who cannot be removed should not raise an error" aProtocol isVirtualProtocol ifTrue: [ ^ self ]. ProtocolRemovalException signal ]. ^ protocols remove: aProtocol ifAbsent: [ ]! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/28/2013 11:28' prior: 30330081! protocolsFor: aClass ^aClass organization realCategories select: [:each | self includesProtocol: each in: aClass]! ! !MethodClassifier methodsFor: 'classification-rules' stamp: 'EstebanLorenzano 5/28/2013 14:10' prior: 26342363! classifyByOtherImplementors: aMethod | protocolBag | protocolBag := Bag new. aMethod implementors ifEmpty: [ ^ false ] ifNotEmpty: [ :methods | methods do: [ :method | self flag: 'TODO: at some point we should have first-class protocols which will tell whether they are extensions...'. ((method protocol beginsWith: '*') or: [ method protocol = Protocol unclassified ]) ifFalse: [ protocolBag add: method protocol ]] without: aMethod ]. protocolBag ifEmpty: [ ^ false ]. aMethod protocol: protocolBag sortedCounts first value. ^ true! ! !ClassOrMethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'EstebanLorenzano 5/28/2013 14:43' prior: 37018805! accept: source notifying: aController | isClassDefinition | isClassDefinition := false. "Try to parse the source. If it succeed, it means the source represents a message send aka a class definition. On error, we switch to method definition mode" [ RBParser parseMethod: source ] on: Error do: [ isClassDefinition := true ]. isClassDefinition ifTrue: [ self model compileAClassFrom: source notifying: aController ] ifFalse: [ self model compileAMethodFromCategory: Protocol unclassified withSource: source notifying: aController ]! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 6/28/2013 16:26' prior: 41358179! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 6/26/2013 12:45' prior: 40844992! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! !TClassDescription methodsFor: 'private' stamp: 'EstebanLorenzano 6/28/2013 13:39'! notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol | oldPackage newPackage | (newProtocol = oldProtocol) ifTrue: [ ^ self ]. "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. "Announce recategorization" newPackage = oldPackage ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self! ! !TClassDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 6/26/2013 12:47' prior: 40877841! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (ClassOrganization forClass: self) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !TClassDescription methodsFor: 'organization updating' stamp: 'EstebanLorenzano 6/26/2013 12:48' prior: 40890431! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !PackageInfo methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 14:24' prior: 39956153! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference theNonMetaClassName category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !AllProtocol class methodsFor: 'data' stamp: 'EstebanLorenzano 6/21/2013 13:07' prior: 17508838! defaultName ^ '--- all ---'! ! !AllProtocol methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:05' prior: 17508620! canBeRemoved ^ false! ! !AllProtocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 15:53'! isVirtualProtocol ^ true! ! !MessageBrowser methodsFor: 'private' stamp: 'EstebanLorenzano 6/26/2013 18:05' prior: 25583024! accept: text notifying: notifyer listModel selectedItem ifNotNil: [:message | message methodClass compile: text classified: message protocol notifying: notifyer ]! ! !CategoryWidget methodsFor: 'private' stamp: 'EstebanLorenzano 6/21/2013 13:30' prior: 36758306! sortCategories: allProtocols forClass: class firstInPackage: currentPackage "List the protocols in this order: 1. the -- all -- category 2. the extension protocols of the given package 3. the extension protocols 4. the normal protocols" | packageExtensionName packageExtensionStart sortBlock currentPackageProtocols otherProtocols | packageExtensionName := '*', currentPackage name asLowercase. packageExtensionStart := packageExtensionName, '-'. currentPackageProtocols := allProtocols reject: [ :protocolName | protocolName beginsWith: '*' ]. "Filter out the existing protocols so that we can sort them later separately" otherProtocols := allProtocols difference: currentPackageProtocols. sortBlock := [ :a :b | (a compare: b caseSensitive: false) = 1 ]. ^ (currentPackageProtocols sort: sortBlock), (otherProtocols sort: sortBlock)! ! !MethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'EstebanLorenzano 5/28/2013 14:39' prior: 37020282! accept: source notifying: aController | protocol method | protocol := self model selectedCategory. method := self model selectedMethod. protocol ifNil: [ protocol := method ifNil: [ Protocol unclassified ] ifNotNil: [ method protocol ] ]. self model compileAMethodFromCategory: protocol withSource: source notifying: aController! ! !Protocol class methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/28/2013 13:21'! ambiguous ^ #ambiguous! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:16' prior: 30075792! defaultName ^ self unclassified! ! !Protocol class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/28/2013 14:57'! empty ^ self name: ''! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 17:57'! nullCategory ^ 'no messages'! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:15'! unclassified ^ #'as yet unclassified'! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:11' prior: 30074944! addMethod: aSymbol ^ methods add: aSymbol! ! !Protocol methodsFor: 'private' stamp: 'EstebanLorenzano 6/17/2013 12:51' prior: 30075581! canBeRemoved ^ self isEmpty ! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/28/2013 16:04'! includesSelector: selector ^ methods includes: selector! ! !Protocol methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:27' prior: 30075208! isEmpty ^ self methods isEmpty! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 15:53'! isVirtualProtocol "A virtual protocol is a calculated one (it does not have any methods by it self)" ^ false! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:11' prior: 30075448! removeMethod: aSymbol ^ methods remove: aSymbol! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:12' prior: 30075324! rename: newName self name: newName! ! !NautilusUI methodsFor: 'widget - method' stamp: 'EstebanLorenzano 5/28/2013 14:40' prior: 28319770! allLabel ^ AllProtocol defaultName! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 5/28/2013 14:13' prior: 28300010! implementSelector: aSelector | behavior method category head source | category := Protocol unclassified. behavior := SearchFacade classSearch chooseFromOwner: self window. aSelector ifNil: [ ^ sourceTextArea flash ]. behavior ifNil: [ ^ sourceTextArea flash ]. (behavior includesSelector: aSelector) ifFalse: [ head := (self signatureFor: aSelector). source := head,' ^ self shouldBeImplemented'. method := behavior compile: source classified: category notifying: sourceTextArea ]. method := (behavior methodNamed: aSelector). self showInstance: true. self showGroups: false. self model package: behavior package class: behavior category: category method: method. self update. self updateBothView. self changed: #sourceCodeFrom:. self giveFocusTo: sourceTextArea. head ifNotNil: [ sourceTextArea selectFrom: head size + 4 to: source size ].! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'EstebanLorenzano 6/17/2013 13:43' prior: 39934848! scanForPreviousVersion | sourceFilesCopy method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [ tokens := preamble parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !ClassTestCase methodsFor: 'tests' stamp: 'EstebanLorenzano 5/28/2013 14:44' prior: 36306932! testUnCategorizedMethods | uncategorizedMethods | uncategorizedMethods := self targetClass methodsInCategory: Protocol unclassified. self assert: uncategorizedMethods isEmpty description: uncategorizedMethods asString ! ! !Nautilus methodsFor: 'announcement' stamp: '' prior: 27962032! announce: anAnnouncement self announcer announce: anAnnouncement ! ! !Nautilus methodsFor: 'initialization' stamp: '' prior: 27966159! initialize super initialize. plugins := OrderedCollection new. self class pluginClasses do: [:each || class position | class := each first. position := each second. plugins add: ((class model: self) position: position; yourself)]! ! !RGClassDescriptionDefinition methodsFor: 'organization' stamp: 'EstebanLorenzano 6/26/2013 18:16' prior: 39286209! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." organization ifNil: [ self organization: (ClassOrganization forClass: self) ]. "Making sure that subject is set correctly. It should not be necessary." organization ifNotNil: [ organization setSubject: self ]. ^ organization! ! !TClassAndTraitDescription methodsFor: 'compiling' stamp: 'EstebanLorenzano 5/28/2013 13:51' prior: 51833861! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !TClassAndTraitDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 5/28/2013 13:51' prior: 51828966! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !TClassAndTraitDescription methodsFor: 'filein/out' stamp: 'EstebanLorenzano 5/28/2013 13:52' prior: 36879833! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !TClassAndTraitDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 6/26/2013 12:43' prior: 51830842! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !TClassAndTraitDescription methodsFor: 'organization updating' stamp: 'EstebanLorenzano 5/28/2013 14:04'! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !TClassAndTraitDescription methodsFor: 'organization updating' stamp: 'EstebanLorenzano 5/28/2013 14:00' prior: 51858231! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories ]. ^ changedCategories! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 5/28/2013 14:13' prior: 17352819! asYetUnclassifiedString ^ Protocol unclassified.! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 6/21/2013 15:31' prior: 17313240! categorizeAllUncategorizedMethods "Categorize methods by looking in parent classes for a method category." self selectedClass ifNotNil: [ :aClass | | methods | self flag: 'TODO: why the heck do all the methods.* methods return selectors??'. methods := aClass uncategorizedMethods collect: [ :selector| aClass >> selector ]. MethodClassifier classifyAll: methods ]! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 17:58' prior: 17364865! noMethodsString ^ Protocol nullCategory! ! !AbstractTool class methodsFor: 'private' stamp: 'EstebanLorenzano 6/26/2013 18:07' prior: 39606472! protocolSuggestionsFor: aClass | allExistingProtocols interestingProtocols reject | reject := Set new. reject addAll: aClass organization categories; add: Protocol nullCategory; add: Protocol unclassified. allExistingProtocols := Smalltalk allClassesAndTraits inject: Set new into: [ :col :e | col addAll: e protocols; yourself ]. interestingProtocols := allExistingProtocols reject: [ :e | reject includes: e ]. ^ interestingProtocols asOrderedCollection sort: [ :a :b | a asLowercase < b asLowercase ].! ! !AbstractTool methodsFor: 'method' stamp: 'EstebanLorenzano 5/28/2013 14:13' prior: 17459889! categorizeMethods: aCollection of: aClass from: aCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | labels reject lines oldIndex newName | aCollection ifEmpty: [^ self]. aClass ifNil: [^self]. labels := OrderedCollection new. labels addAll: aClass organization categories copy sort; add: Protocol unclassified. lines := OrderedCollection new. lines add: labels size -1. newName := UIManager default chooseOrRequestFrom: labels lines: lines title: ('Change Protocol (current: ', aCategory, ')'). newName ifNil: [ ^self ]. newName := newName asSymbol. aCollection do: [:item | item methodClass organization classify: item selector under: newName suppressIfDefault: true ].! ! !MethodWidget methodsFor: 'private' stamp: 'EstebanLorenzano 5/28/2013 14:40' prior: 26518711! loadMethods ^ self model showGroups ifTrue: [ self model selectedCategories ifEmpty: [ self model methodsForCategoryInGroup: self model allLabel ] ifNotEmpty: [:cat | self model methodsForCategoriesInGroup: cat ]] ifFalse: [ self model selectedCategories ifEmpty: [ self model methodsForCategory: self model allLabel ] ifNotEmpty: [:cat | self model methodsForCategories: cat ]]! ! !TPureBehavior methodsFor: 'traits' stamp: 'EstebanLorenzano 5/28/2013 14:05' prior: 52130923! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TClass methodsFor: 'compiling' stamp: 'EstebanLorenzano 6/26/2013 17:55' prior: 40979201! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !ProtocolRemovalException commentStamp: '' prior: 42005421! A ProtocolRemovalException is an error raised when someone try to remove a protocol that should not be removed! !RPackage methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 6/17/2013 13:40' prior: 39931901! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !RPackage methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 6/27/2013 18:04' prior: 31807056! coreCategoriesForClass: aClass self flag: #stef. "only used by goferCleanUp" ^ aClass organization realCategories reject: [ :cat | self isForeignClassExtension: cat ]! ! !RPackage methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 6/27/2013 18:05' prior: 31807313! extensionCategoriesForClass: aClass self flag: #stef. "only used by goferCleanUp and PackageEnvironment of RB" ^ aClass organization realCategories select: [:cat | self isYourClassExtension: cat]! ! !RPackage methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 6/27/2013 18:07' prior: 31775823! importCategory "import all the classes of the class categories matching the receiver name (following package info semantics)." | cat classesInCat | cat := Smalltalk globals organization categories select: [:each | each beginsWith: self name ]. classesInCat := cat gather: [:c | Smalltalk globals organization listAtCategoryNamed: c]. classesInCat do: [:each | self importClass: (Smalltalk globals at: each). self importClass: (Smalltalk globals at: each) theMetaClass]! ! !RPackage methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 6/27/2013 18:05' prior: 31776405! importClass: aClass "import a class already created but not attached to a package to the receiver. Handle also *- convention. Methods defined in *category are not added to the package. Pay attention that it will not import anything from the metaClass side " | protocols | self addClassDefinition: aClass. protocols := aClass organization realCategories reject: [:each | (each first = $*) and: [ ( '*', self name asLowercase match: each asLowercase) not] ]. "we reject all extensions except the ones that have the same name as the package - highly improbable but who knows" protocols do: [:each | self importProtocol: each forClass: aClass] ! ! !ClassOrganization class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/28/2013 16:35'! forClass: aClass ^ self basicNew initializeClass: aClass; yourself! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 16:57'! addCategory: aString | oldCategories | (self protocolOrganizer hasProtocolNamed: aString) ifTrue: [ ^self ]. oldCategories := self categories copy. self protocolOrganizer addProtocolNamed: aString. self notifyOfAddedCategory: aString. self notifyOfChangedCategoriesFrom: oldCategories to: self categories.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:38' prior: 19304428! addCategory: aProtocolName before: aUselessArgument self addCategory: aProtocolName! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:01' prior: 19311890! categories ^ self protocolOrganizer allProtocolsNames! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:45' prior: 19312045! categoriesSorted ^ self protocolOrganizer protocolsSorted! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 5/28/2013 14:09' prior: 19304802! categoryOfElement: aSelector ^ (self protocolOrganizer protocolsOfSelector: aSelector) ifEmpty: [ Protocol unclassified ] ifNotEmpty: [:col | col first name ]! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/28/2013 16:18' prior: 19305776! classify: selector under: aProtocolName suppressIfDefault: aBoolean | oldProtocol forceNotify | forceNotify := (self protocolOrganizer includesSelector: selector) not. oldProtocol := self categoryOfElement: selector. (forceNotify or: [ oldProtocol ~= aProtocolName or: [ aBoolean not or: [ aProtocolName ~= Protocol unclassified ] ] ]) ifTrue: [ self protocolOrganizer classify: selector inProtocolNamed: aProtocolName suppressIfDefault: aBoolean. self notifyOfChangedSelector: selector from: oldProtocol to: aProtocolName ].! ! !ClassOrganization methodsFor: 'testing' stamp: 'EstebanLorenzano 5/28/2013 14:58'! hasComment ^ self comment notNil! ! !ClassOrganization methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 16:34'! initialize super initialize. protocolOrganizer := ProtocolOrganizer new.! ! !ClassOrganization methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 16:35'! initializeClass: aClass self initialize. organizedClass := aClass. organizedClass selectors do: [ :each | self classify: each under: Protocol unclassified ]! ! !ClassOrganization methodsFor: 'testing' stamp: 'EstebanLorenzano 5/28/2013 17:16'! isEmptyCategoryNamed: categoryName ^ (self protocolOrganizer getProtocolNamed: categoryName) isEmpty! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:52' prior: 19312207! listAtCategoryNamed: aName ^ (self protocolOrganizer methodsInProtocolNamed: aName) asArray! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/26/2013 16:59'! notifyOfAddedCategory: protocolName self hasSubject ifFalse: [ ^ self ]. SystemAnnouncer uniqueInstance protocolAdded: protocolName inClass: self subject! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/21/2013 14:35' prior: 19310237! notifyOfChangedCategoriesFrom: oldCollectionOrNil to: newCollectionOrNil (self hasSubject and: [ oldCollectionOrNil ~= newCollectionOrNil ]) ifTrue: [ SystemAnnouncer uniqueInstance classReorganized: self subject ].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/21/2013 14:20' prior: 19310830! notifyOfChangedSelector: element from: oldCategory to: newCategory (self hasSubject and: [(oldCategory ~= newCategory)]) ifTrue: [ self subject notifyOfRecategorizedSelector: element from: oldCategory to: newCategory ].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/26/2013 16:59'! notifyOfRemovedCategory: protocolName self hasSubject ifFalse: [ ^ self ]. SystemAnnouncer uniqueInstance protocolRemoved: protocolName inClass: self subject! ! !ClassOrganization methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/12/2012 15:01' prior: 19304280! protocolOrganizer ^ protocolOrganizer! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:01'! realCategories ^ self protocolOrganizer protocolsNames ! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 16:59' prior: 19306577! removeCategory: protocolName | oldCategories | (self protocolOrganizer hasProtocolNamed: protocolName) ifFalse: [ ^ self ]. oldCategories := self protocolOrganizer allProtocolsNames copy. self protocolOrganizer removeProtocolNamed: protocolName. self notifyOfRemovedCategory: protocolName. self notifyOfChangedCategoriesFrom: oldCategories to: self protocolOrganizer allProtocolsNames.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:41' prior: 19306956! removeElement: aSymbol | oldProtocol | oldProtocol := self categoryOfElement: aSymbol. self protocolOrganizer removeMethod: aSymbol. self notifyOfChangedSelector: aSymbol from: oldProtocol to: (self categoryOfElement: aSymbol).! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/26/2013 18:32' prior: 19307638! renameCategory: oldName toBe: newName self silentlyRenameCategory: oldName toBe: newName. self notifyOfChangedCategoryFrom: oldName to: newName. "I need to notify also the selector changes, otherwise RPackage will not notice" (self protocolOrganizer getProtocolNamed: newName) methods do: [ :each | self notifyOfChangedSelector: each from: oldName to: newName ]! ! !ClassOrganization methodsFor: 'private' stamp: 'EstebanLorenzano 5/28/2013 18:05'! silentlyRenameCategory: oldName toBe: newName self protocolOrganizer renameProtocol: oldName into: newName. ! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:42' prior: 19308067! sortCategories "Do nothing"! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 5/28/2013 14:06' prior: 53364174! allMethodsInCategory: aName "Answer a list of all the method categories of the receiver" | aColl | aColl := self organization listAtCategoryNamed: aName. ^aColl asSet asArray sort! ! !TraitDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 5/28/2013 14:06' prior: 53393790! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." organization ifNil: [ self organization: ClassOrganization new ]. "Making sure that subject is set correctly. It should not be necessary." organization ifNotNil: [ organization setSubject: self ]. ^ organization! ! !RBUnclassifiedMethodsRule methodsFor: 'running' stamp: 'EstebanLorenzano 6/26/2013 18:09' prior: 31491421! checkMethod: aContext (aContext selectedClass organization categoryOfElement: aContext selector) = Protocol unclassified ifTrue: [ result addClass: aContext selectedClass selector: aContext selector ]! ! !Browser methodsFor: 'message category functions' stamp: 'EstebanLorenzano 6/26/2013 18:00' prior: 18471244! addCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | labels reject lines oldIndex newName | self okToChange ifFalse: [^ self]. classListIndex = 0 ifTrue: [^ self]. labels := OrderedCollection new. reject := Set new. reject addAll: self selectedClassOrMetaClass organization categories; add: Protocol nullCategory; add: Protocol unclassified. lines := OrderedCollection new. self selectedClassOrMetaClass allSuperclasses do: [:cls | | cats | cls = Object ifFalse: [ cats := cls organization categories reject: [:cat | reject includes: cat]. cats isEmpty ifFalse: [ lines add: labels size. labels addAll: cats asSortedCollection. reject addAll: cats ] ] ]. newName := UIManager default chooseOrRequestFrom: labels lines: lines title: 'Add Category'. newName ifNil: [ ^self ]. newName := newName asSymbol. oldIndex := messageCategoryListIndex. self classOrMetaClassOrganizer addCategory: newName before: (messageCategoryListIndex = 0 ifTrue: [nil] ifFalse: [self selectedMessageCategoryName]). self changed: #messageCategoryList. self messageCategoryListIndex: (oldIndex = 0 ifTrue: [self classOrMetaClassOrganizer categories size + 1] ifFalse: [oldIndex]). self changed: #messageCategoryList. ! ! !Browser methodsFor: 'message category list' stamp: 'EstebanLorenzano 6/26/2013 18:07' prior: 18479150! categorizeAllUncategorizedMethods "Categorize methods by looking in parent classes for a method category." | organizer organizers | organizer := self classOrMetaClassOrganizer. organizers := self selectedClassOrMetaClass withAllSuperclasses collect: [:ea | ea organization]. (organizer listAtCategoryNamed: Protocol unclassified) do: [:sel | | found | found := (organizers collect: [ :org | org categoryOfElement: sel]) detect: [:ea | ea ~= Protocol unclassified and: [ ea ~= nil]] ifNone: []. found ifNotNil: [organizer classify: sel under: found]]. self changed: #messageCategoryList! ! !Browser methodsFor: 'message category functions' stamp: 'EstebanLorenzano 6/26/2013 18:08' prior: 18474351! categoryOfCurrentMethod "Determine the method category associated with the receiver at the current moment, or nil if none" | aCategory | ^ super categoryOfCurrentMethod ifNil: [(aCategory := self messageCategoryListSelection) == AllProtocol defaultName ifTrue: [nil] ifFalse: [aCategory]]! ! !Browser methodsFor: 'drag and drop' stamp: 'EstebanLorenzano 6/26/2013 18:08' prior: 18449966! changeMessageCategoryForMethod: methodSel dstMessageCategory: dstMessageCategorySel srcMessageCategory: srcMessageCategorySel insideClassOrMeta: classOrMeta internal: internal copySemantic: copyFlag "Recategorize the method named by methodSel. If the dstMessageCategorySel is the allCategory, then recategorize it from its parents." | success messageCategorySel | copyFlag ifTrue: [^ false]. "only move semantic" messageCategorySel := dstMessageCategorySel ifNil: [srcMessageCategorySel]. (success := messageCategorySel notNil and: [messageCategorySel ~= srcMessageCategorySel]) ifTrue: [success := messageCategorySel == AllProtocol defaultName ifTrue: [self recategorizeMethodSelector: methodSel] ifFalse: [(classOrMeta organization categories includes: messageCategorySel) and: [classOrMeta organization classify: methodSel under: messageCategorySel suppressIfDefault: false. true]]]. success ifTrue: [self changed: #messageList. internal ifFalse: [self setSelector: methodSel]]. ^ success! ! !Browser methodsFor: 'code pane' stamp: 'EstebanLorenzano 6/26/2013 18:08' prior: 18442417! compileMessage: aText notifying: aController "Compile the code that was accepted by the user, placing the compiled method into an appropriate message category. Return true if the compilation succeeded, else false." | fallBackCategoryIndex fallBackMethodIndex originalSelectorName result | self selectedMessageCategoryName ifNil: [ self selectOriginalCategoryForCurrentMethod ifFalse:["Select the '--all--' category" self messageCategoryListIndex: 1]]. self selectedMessageCategoryName asSymbol = AllProtocol defaultName ifTrue: [ "User tried to save a method while the ALL category was selected" fallBackCategoryIndex := messageCategoryListIndex. fallBackMethodIndex := messageListIndex. editSelection == #newMessage ifTrue: [ "Select the 'as yet unclassified' category" messageCategoryListIndex := 0. (result := self defineMessageFrom: aText notifying: aController) ifNil: ["Compilation failure: reselect the original category & method" messageCategoryListIndex := fallBackCategoryIndex. messageListIndex := fallBackMethodIndex] ifNotNil: [self setSelector: result]] ifFalse: [originalSelectorName := self selectedMessageName. self setOriginalCategoryIndexForCurrentMethod. messageListIndex := fallBackMethodIndex := self messageList indexOf: originalSelectorName. (result := self defineMessageFrom: aText notifying: aController) ifNotNil: [self setSelector: result] ifNil: [ "Compilation failure: reselect the original category & method" messageCategoryListIndex := fallBackCategoryIndex. messageListIndex := fallBackMethodIndex. ^ result notNil]]. self changed: #messageCategoryList. ^ result notNil] ifFalse: [ "User tried to save a method while the ALL category was NOT selected" ^ (self defineMessageFrom: aText notifying: aController) notNil]! ! !Browser methodsFor: 'message functions' stamp: 'EstebanLorenzano 6/26/2013 18:01' prior: 18484330! defineMessageFrom: aString notifying: aController "Compile the expressions in aString. Notify aController if a syntax error occurs. Install the compiled method in the selected class classified under the currently selected message category name. Answer the selector obtained if compilation succeeds, nil otherwise." | selectedMessageName selector category oldMessageList | selectedMessageName := self selectedMessageName. oldMessageList := self messageList. contents := nil. selector := self selectedClassOrMetaClass compile: aString classified: (category := self selectedMessageCategoryName) notifying: aController. selector == nil ifTrue: [^ nil]. contents := aString copy. selector ~~ selectedMessageName ifTrue: [category = Protocol nullCategory ifTrue: [self changed: #classSelectionChanged. self changed: #classList. self messageCategoryListIndex: 1]. self setClassOrganizer. "In case organization not cached" (oldMessageList includes: selector) ifFalse: [self changed: #messageList]. self messageListIndex: (self messageList indexOf: selector)]. ^ selector! ! !Browser methodsFor: 'drag and drop' stamp: 'EstebanLorenzano 6/26/2013 18:09' prior: 18452492! dstMessageCategoryDstListMorph: dstListMorph | dropItem | ^dstListMorph getListSelector == #messageCategoryList ifTrue: [dropItem := dstListMorph potentialDropItem. dropItem ifNotNil: [dropItem asSymbol]] ifFalse: [self selectedMessageCategoryName ifNil: [ Protocol unclassified ]]! ! !Browser methodsFor: 'message category list' stamp: 'EstebanLorenzano 6/26/2013 18:08' prior: 18481502! recategorizeMethodSelector: sel "Categorize method named sel by looking in parent classes for a method category. Answer true if recategorized." self selectedClassOrMetaClass allSuperclasses do: [:ea | | thisCat | thisCat := ea organization categoryOfElement: sel. (thisCat ~= Protocol unclassified and: [thisCat notNil]) ifTrue: [self classOrMetaClassOrganizer classify: sel under: thisCat. self changed: #messageCategoryList. ^ true]]. ^ false! ! !Browser methodsFor: 'message category list' stamp: 'EstebanLorenzano 6/26/2013 18:08' prior: 18482365! selectOriginalCategoryForCurrentMethod "private - Select the message category for the current method. Note: This should only be called when somebody tries to save a method that they are modifying while ALL is selected. Returns: true on success, false on failure." | aSymbol selectorName | aSymbol := self categoryOfCurrentMethod. selectorName := self selectedMessageName. (aSymbol notNil and: [aSymbol ~= AllProtocol defaultName ]) ifTrue: [messageCategoryListIndex := (self messageCategoryList indexOf: aSymbol). messageListIndex := (self messageList indexOf: selectorName). self changed: #messageCategorySelectionChanged. self changed: #messageCategoryListIndex. "update my selection" self changed: #messageList. self changed: #messageListIndex. ^ true]. ^ false! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'SeanDeNigris 7/12/2012 08:44' prior: 39287773! condenseChanges "Move all the changes onto a compacted sources file." "Smalltalk condenseChanges" | f file oldChanges | f := FileStream fileNamed: 'ST80.temp'. f header; timeStamp. 'Condensing Changes File...' displayProgressFrom: 0 to: self classNames size + self traitNames size during: [:bar | | count | count := 0. self allClassesAndTraitsDo: [:classOrTrait | bar current: (count := count + 1). classOrTrait moveChangesTo: f. classOrTrait putClassCommentToCondensedChangesFile: f. classOrTrait classSide moveChangesTo: f]]. self lastQuitLogPosition: f position. f trailer; close. CompiledMethod cleanUp. oldChanges := SourceFiles at: 2. oldChanges close. (oldChanges name , '.old') asFileReference delete. (file := oldChanges name asFileReference) renameTo: file basename, '.old'. f name asFileReference renameTo: file basename. self setMacFileInfoOn: oldChanges name. SourceFiles at: 2 put: (FileStream oldFileNamed: oldChanges name)! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'EstebanLorenzano 5/28/2013 14:15' prior: 33516185! fixUpProblemsWithAllCategory "Moves all methods that are in formally classified a category named '-- all --' into the default 'as yet unclassified' category" "Smalltalk fixUpProblemsWithAllCategory" | methodCount classCount | self flag: #ShouldBeMovedInClassOrganization. methodCount := 0. classCount := 0. self systemNavigation allBehaviorsDo: [:aClass | | org any | org := aClass organization. (org categories includes: #'-- all --') ifTrue: [any := false. aClass selectorsDo: [:aSelector | | aCategory | aCategory := org categoryOfElement: aSelector. aCategory = #'-- all --' ifTrue: [ org classify: aSelector under: Protocol unclassified suppressIfDefault: false. self crTrace: aClass name, ' >> ', aSelector. methodCount := methodCount + 1. any := true ] ]. any ifTrue: [classCount := classCount + 1]. org removeEmptyCategories]]. self crTrace: methodCount printString, ' methods in ', classCount printString, ' classes moved from "-- all --" to "as yet unclassified"' ! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'EstebanLorenzano 5/28/2013 13:47' prior: 33520914! removeEmptyMessageCategories "Smalltalk removeEmptyMessageCategories" self garbageCollect. ClassOrganization allInstancesDo: [ :org | org removeEmptyCategories ]. SystemOrganization removeEmptyCategories.! ! !ClassOrganizationTest methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/21/2013 15:06'! organization ^ organization! ! !ClassOrganizationTest methodsFor: 'running' stamp: 'EstebanLorenzano 6/21/2013 14:47'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! !ClassOrganizationTest methodsFor: 'running' stamp: 'EstebanLorenzano 6/21/2013 15:06'! setUp organization := ClassOrganization new. organization addCategory: 'empty'. organization addCategory: 'one'. organization classify: #one under: 'one' suppressIfDefault: true. ! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06'! testAddCategory self organization addCategory: 'test-protocol'. self assert: (self organization categories includes: 'test-protocol')! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06'! testCategories | categories | categories := self organization categories. self assert: categories notEmpty.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06'! testListAtCategoryNamed | methods | methods := self organization listAtCategoryNamed: 'empty'. self assert: methods isEmpty. methods := self organization listAtCategoryNamed: 'one'. self assert: methods size = 1. self assert: methods first = #one.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/27/2013 17:11'! testRemoveCategory self assert: self organization categories size = 3. self should: [ self organization removeCategory: 'one' ] raise: Error. self shouldnt: [ self organization removeCategory: 'empty' ] raise: Error. self assert: self organization categories size = 2. self assert: self organization categories first = AllProtocol defaultName. self assert: self organization categories second = 'one'.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/26/2013 16:39'! testRemoveNonExistingProtocol self shouldnt: [ self organization removeCategory: 'non-existent' ] raise: Error. ! ! !RBAddMethodChange methodsFor: 'initialize-release' stamp: 'EstebanLorenzano 6/28/2013 12:25' prior: 30203200! protocols: aCollectionOrString protocols := aCollectionOrString isString ifTrue: [ aCollectionOrString = Protocol unclassified ifTrue: [ protocols := #(accessing) ] ifFalse: [ Array with: aCollectionOrString ] ] ifFalse: [ aCollectionOrString ]. ! ! !SyntaxError methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 13:48' prior: 35914624! setClass: aClass code: aString error: errorMessage location: anErrorPosition debugger: aDebugger doitFlag: flag class := aClass. error := errorMessage. location := anErrorPosition. debugger := aDebugger. selector := aClass compiler parseSelector: aString. contents := self checkForUnprintableCharacters: aString. self highlightError. category ifNil: [ category := aClass organization categoryOfElement: selector ]. category ifNil: [ category := Protocol unclassified ]. doitFlag := flag! ! !TraitMethodDescriptionTest methodsFor: 'testing' stamp: 'md 5/1/2012 17:30' prior: 53418011! testArgumentNames self t1 compile: 'zork1: myArgument zork2: mySecondArgument ^true'. self t2 compile: 'zork1: myArgument zork2: somethingElse ^false'. self assert: ((self t5 sourceCodeAt: #zork1:zork2:) asString beginsWith: 'zork1: arg1 zork2: arg2'). self t1 compile: 'zork1: myArgument zork2: mySecondArgument ^true'. self t2 compile: 'zork1: somethingElse zork2: myArgument ^false'. self assert: ((self t5 sourceCodeAt: #zork1:zork2:) asString beginsWith: 'zork1: arg1 zork2: arg2')! ! !TraitMethodDescriptionTest methodsFor: 'testing' stamp: 'CamilloBruni 4/27/2012 17:54' prior: 53418607! testCategories self assert: (self t4 organization categoryOfElement: #m21) equals: #cat1. self assert: (self t4 organization categoryOfElement: #m22) equals: #cat2. self assert: (self t4 organization categoryOfElement: #m11) equals: #catX. self assert: (self t4 organization categoryOfElement: #m12) equals: #cat2. self assert: (self t4 organization categoryOfElement: #m13) equals: #cat3. self assert: (self t6 organization categoryOfElement: #m22Alias) equals: #cat2. self t2 organization classify: #m22 under: #catX. self assert: (self t4 organization categoryOfElement: #m22) equals: #catX. self assert: (self t6 organization categoryOfElement: #m22Alias) equals: #catX. self t6 organization classify: #m22 under: #catY. self t6 organization classify: #m22Alias under: #catY. self t2 organization classify: #m22 under: #catZ. self assert: (self t6 organization categoryOfElement: #m22) equals: #catY. self assert: (self t6 organization categoryOfElement: #m22Alias) equals: #catY. self t1 compile: 'mA' classified: #catA. self assert: (self t4 organization categoryOfElement: #mA) equals: #catA. self t1 organization classify: #mA under: #cat1. self assert: (self t4 organization categories includes: #catA) not! ! !TraitMethodDescriptionTest methodsFor: 'testing' stamp: 'md 5/1/2012 17:33' prior: 53421160! testConflictMethodCreation "Generate conflicting methods between t1 and t2 and check the resulting method in Trait t5 (or c2). Also test selectors like foo:x (without space) or selectors with CRs." "unary" self t2 compile: 'm12 ^false'. self assert: ((self t5 sourceCodeAt: #m12) asString beginsWith: 'm12'). self should: [self c2 new m12] raise: Error. "binary" self t1 compile: '@ myArgument ^true'. self t2 compile: '@myArgument ^false'. self assert: ((self t5 sourceCodeAt: #@) asString beginsWith: '@ anObject'). self should: [self c2 new @ 17] raise: Error. "keyword" self t1 compile: 'zork: myArgument ^true'. self t2 compile: 'zork: myArgument ^false'. self assert: ((self t5 sourceCodeAt: #zork:) asString beginsWith: 'zork: arg1'). self should: [self c2 new zork: 17] raise: Error. self t1 compile: 'zork:myArgument ^true'. self t2 compile: 'zork:myArgument ^false'. self assert: ((self t5 sourceCodeAt: #zork:) asString beginsWith: 'zork: arg1'). self should: [self c2 new zork: 17] raise: Error. self t1 compile: 'zork1: t1 zork2: t2 ^true'. self t2 compile: 'zork1: anObject zork2: anotherObject ^false'. self assert: ((self t5 sourceCodeAt: #zork1:zork2:) asString beginsWith: 'zork1: arg1 zork2: arg2'). self should: [self c2 new zork1: 1 zork2: 2] raise: Error! ! !TraitMethodDescriptionTest methodsFor: 'testing' stamp: 'EstebanLorenzano 5/29/2013 09:06' prior: 53419934! testConflictingCategories | t7 t8 | self t2 compile: 'm11' classified: #catY. self assert: (self t4 organization categoryOfElement: #m11) equals: #catX. self assert: (self t5 organization categoryOfElement: #m11) equals: #cat1. t7 := self createTraitNamed: #T7 uses: self t1 + self t2. self assert: (t7 organization categoryOfElement: #m11) equals: Protocol ambiguous. self t1 removeSelector: #m11. self assert: (self t4 organization categoryOfElement: #m11) equals: #catX. self assert: (self t5 organization categoryOfElement: #m11) equals: #catY. self assert: (t7 organization categoryOfElement: #m11) equals: #catY. self assert: (t7 organization categories includes: Protocol ambiguous) not. self t1 compile: 'm11' classified: #cat1. t8 := self createTraitNamed: #T8 uses: self t1 + self t2. t8 organization classify: #m11 under: #cat1. self t1 organization classify: #m11 under: #catZ. self assert: (self t4 organization categoryOfElement: #m11) equals: #catX. self assert: (self t5 organization categoryOfElement: #m11) equals: #catY. self assert: (t8 organization categoryOfElement: #m11) equals: #catZ! ! !TraitMethodDescriptionTest methodsFor: 'testing' stamp: 'al 1/23/2004 12:57' prior: 53422569! testInitialize | empty | empty := TraitMethodDescription new. self assert: empty isEmpty. self deny: empty isConflict. self deny: empty isProvided. self deny: empty isRequired! ! !ClassDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 6/27/2013 17:10' prior: 41228240! basicOrganization ^ organization ! ! !ClassDescription methodsFor: 'organization' stamp: 'EstebanLorenzano 6/27/2013 17:10' prior: 41228367! basicOrganization: aClassOrg organization := aClassOrg! ! Protocol removeSelector: #includesMethod:! TestClass removeSelector: #foo! Smalltalk globals removeClassNamed: #TestClass! AllProtocol class removeSelector: #nullCategory! Smalltalk globals removeClassNamed: #ProtocolRemovaleException! NautilusUI removeSelector: #loadCategories! !Trait method! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. priorMethodOrNil isNil ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! !Trait method! notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol | oldPackage newPackage | (newProtocol = oldProtocol) ifTrue: [ ^ self ]. "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. "Announce recategorization" newPackage = oldPackage ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self! ! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (ClassOrganization forClass: self) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !Trait method! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories ]. ^ changedCategories! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! "Kernel"! "KernelTests"! "Monticello"! "Nautilus"! "NewClassOrganizer"! "PackageInfo"! "RPackage-Core"! "RPackage-SystemIntegration"! "Refactoring-Changes"! "Refactoring-Critics"! "Refactoring-Environment"! "Ring-Core-Kernel"! "SUnit-Core"! "Spec-Tools"! "System-Support"! "Tests"! "Tools"! "Traits"! ColorComponentSelector showing an alpha gradient over a hatched background.! I am a specific context for the ASTInterpreter that represents BlockContext in Pharo. I have one aditional role with is to manage myself the exception handling and I do not delegate it to the context of the BlockClosure>>on:do: method Instance Variables exceptionHandler: homeContext: exceptionHandler - is nil if there are no exception handler is an ExceptionHandler which represents an ExceptionClass, a handlerBlock and the isActive boolean. It represents in Pharo the temporaries of the BlockClosure>>on:do: method homeContext - is the homeContext of the BlockClosure ! I am an abstract specific context for the ASTInterpreter that represents ContextPart in Pharo. Instance Variables arguments: closure: isExecuted: outerContext: temporaries: arguments - is the collection of the arguments of the method closure - is either a CompiledMethod or an ASTBlockClosure, depending if I am an AIBlockClosure or an AIMethodContext isExecuted - permits to know if my method has already been executed. In Pharo, when I am terminated my pc is set to nil. Then, you can know if I am terminated by checking if my pc is nil. In the ASTInterpreter we don't have pc so we use isExecuted boolean to know if the context is terminated. (isExecuted make the test ASTInterpreterTest>>testNonLocalReturnPart2 pass with the returningBlock) outerContext - is my sender temporaries - is the collection of the arguments + the temporaries of the method ! Permits to inspect the stack of contexts while inspecting a context in the Pharo inspector. Was used before the ASTDebugger was implemented.! I am a specific context for the ASTInterpreter that represents MethodContext in Pharo. Instance Variables receiver: receiver - is the receiver of my method ! I am a specific context for the ASTInterpreter that represents the first context that is interpreted. This way, when I am fully interpreted it means that the interpreting task is finished. holds the code from a DoIt ! I am a pseudo instruction used to align the following instruction to a multiple of a given byte number. Example: asm := AJx64Assembler noStackFrame. "align the following instruction to a word (2bytes)" asm alignWord. asm inc: asm RAX. "align the following instruction to a double (4bytes)" asm alignDouble. asm inc: asm RAX. "align the following instruction to a QuadWord (8bytes)" asm alignQuad. asm inc: asm RAX. "align the following instruction to a multiple of an arbirary count" asm align: 64. asm inc: asm RAX.! I represent a pure data section in an assembly instruction stream. Example: asm := AJx64Assembler noStackFrame. "add a raw byte" asm db: 16rFF. "add a raw word" asm dw: #[16r34 16r12]. "add a raw double" asm dw: #[16r78 16r56 16r34 16r12]. "add a arbitrary sized data section with a byteArray" asm data: #[1 2 3 4 5 6 7 8 9 10 11 12 ].! I am an immediate (constant integer) operand used by the assembler. Example: asm := AJx64Assembler new. "create an immediate from an integer" 1 asImm. "implicitely use an immediate in an assembly instrution" asm add: 1 to: asm RAX. ! I am memory operand used in asembly instructions. Example: asm := AJx86Assembler new. "create a simple memory operand with RAX as base" asm RAX ptr. "the same with a 8 byte offset" asm RAX ptr + 8! note: assembler should set size even before realizing a temp into stack location reference! This is a pseudo-instruction to indicate a place in native code for routine prologue. It is later replaced by real instructions which contain code for initializing stack frame & extra stack space required by routine.! stdcall calling convention. Used on windows. No need for stack cleanup after call. No need to align stack before making call.! I am an assembler for the Intel x86-64 architecture.! Virtual registers used for relative instruction pointer addressing in 64Bit mode In IA-32 architecture and compatibility mode, addressing relative to the instruction pointer is available only with control-transfer instructions. In 64-bit mode, instruc- tions that use ModR/M addressing can use RIP-relative addressing. Without RIP-rela- tive addressing, all ModR/M instruction modes address memory relative to zero.! I am an Assmbler for the Intel x86 (32Bit) architecture. Example: asm := AJx64Assembler new. "by default the assembler will set up a stack frame" asm noStackFrame. "load the constant 16r12 into the RAX register" asm mov: 16r12 to: asm RAX. "output the bytes for this instruction" asm bytes ! A general purpose x86 & x64 registers! name: an instruction mnemonic group: an instruction encoding group o1Flags: operand1 flags o2Flags: operand2 flags opCode1: opcode 1 opCode2: opcode 2 opCodeR: code for inlining in MR field as register Operand flags: bit: 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ______________________________________________ *86| *64 | XMM | MM | IMM | MEM | 64 | 32 | 16 | 8| - *64 , set on o1Flags, meaning that instruction available only for x64 processor mode - *86 , set on o1Flags, meaning that instruction available only for x86 processor mode ! I am a SHaredPool which initializes all the registers needed by the Assmbler.! I am an c87 Floating Point register! I am a specific class to the ASTInterpreter. I represent a BlockClosure in Pharo. Instance Variables homeContext: homeContext - is the homeContext of the BlockClosure ! I am a simple cache for AST nodes corresponding to CompiledMethods in the image. The cache is emptied when the image is saved.! I interpret AST. I run methods in my method-evalluation protocol, called through acceptMessageNode:receiver: Instance Variables context: currentNode: gotoContext: primitiveFailed: context - is the current context being interpreted currentNode - is the current node being interpreted gotoContext - In the case of non local return or exception it is used to return to the right context after executing the unwinded blocks. primitiveFailed - primitiveFail token ! Default superclass for application about dialogs.! I represent an absolute path (a position starting from Path root)! I am an abstract acceptor. The goal of my children is to properly dispatch the behavior when text is accepted. Depending of the context, different actions could be triggered! AbstractBasicWidget is an abstract class for basic widgets! AbstractHolder is an abstract class which handle two dictionaries: one for classes symbol, and one for selectors symbols.! AbstractCategoryWidget is an abstraction describing a widget used to manage categories! I take a ready class and install it in a given environment. My sublcasses implement custom strategies.! I represent a class modification. I content field modifications.! An AbstractEcryptor is an interface for encryptor. It's basically just an algorithm to encrypt a string, without ensuring it can be decrypted! An AbstractEcryptorDecryptor is an interface providing the method for encrypting/decrypting a string! I'm an abstract superclass for enumeration operations on directory entries. ! I represent an abstract inspection element. In an EyeInspector, a eye element corresponds to a wrapper around a field element. Public API : label: display on left list panel of the eye inspector description: printed on the right panel of the eye inspector host: object inspected in the eye inspector value: object represented by this eye element ! I am an abstract field modification. Field modifications encapsulate the changes required to migrated instances.! I am an abstract superclass for FileLocator and FileReference. By implementing most of the methods on myself most code duplucation between the locator and the reference can be avoided! AbstractFont defines the generic interface that all fonts need to implement.! Dialog based font chooser with preview.! AbstractGroup is an abstraction of what a group is.! AbstractKeyPressedPlugin is an abstraction of plugin which react to key strokes ! I'm a container for slots. There are special cases of layouts without slots, like NilLayout or BitsLayout.! An AbstractMessageConverter is a wrapper used to switch which information to retrieve from a method. This way, you can avoid switch case, you just have to use set the correct filter! AbstractMethodIconAction is the common super class for all the method icon actions. A method icon action is used to retrieve the correct icon the method in nautilus lists! I am used to update compiled methods in response to class modifications. My sublcasses implement different strategies to update affected methods.! AbstractMethodWidget is an abstraction describing a widget used to manage methods! Modifications to a high-level class have an impact on the related low-level structures. There are two modification models that transform the high-level model into concrete low-level modifications models, the method modification model and the instance modification model. Both models list for every field, whether it was added, removed, or shifted to a new position. Instance Variables: slotShift modificationMap <(Collection of: AbstractFieldModification)>! AbstractNautilusPlugin is an abstraction of what a plugin for Nautilus is. Mainly, it defines the protocol! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! An AbstractNautilusUITest is a test class for testing the behavior of AbstractNautilusUI! AbstractKeyPressedPlugin is an abstraction of plugin which react when a package is selected! AbstractPackageWidget is an abstraction describing a widget used to manage packages! I am the superclass of a hierarchy of morph specialized in allowing the user to resize or rearrange windows and panes.! This is the abstract base class for a sound system. A sound system offers a small protocol for playing sounds and making beeps and works like a facade towards the rest of Squeak. A sound system is registered in the application registry SoundService and can be accessed by "SoundService default" like for example: SoundService default playSoundNamed: 'croak' The idea is that as much sound playing as possible should go through this facade. This way we decouple the sound system from the rest of Squeak and make it pluggable. It also is a perfect spot to check for the SoundSettings class>>soundEnabled Two basic subclasses exist at the time of this writing, the BaseSoundSystem which represents the standard Squeak sound system, and the DummySoundSystem which is a dummy implementation that can be used when there is no sound card available, or when the base sound system isn't in the image, or when you simply don't want to use the available sound card.! An AbstractSpec is a basic wrapper which describe a spec. For now it can seems useless, but structural info will be stored thanks to those wrappers! AbstractSpecLayoutAction is an abstract class representing a spec layout action.! An AbstractTextChangedPlugin is a plugin which simply log each time the method displayer changed! I'm an abstract class grouping generic methods for managing packages/classes/groups/methods from a browser! I am an abstract class for tree filters. My children should propose a filter for tree nodes! AbstractWidget is an abstraction for the different widget which could be used to compose the Nautilus UI! I represent the change of a newly added field on an instance.! I am class holding state for compiled methods. All my instance variables should be actually part of the CompiledMethod itself, but the current implementation of the VM doesn't allow this. Currently I hold the selector and any pragmas or properties the compiled method has. Pragmas and properties are stored in indexable fields; pragmas as instances of Pragma, properties as instances of Association. I am a reimplementation of much of MethodProperties, but eliminating the explicit properties and pragmas dictionaries. Hence I answer true to isMethodProperties.! This is a dummy for a custom Help browser that can be registered as a replacement for the HelpBrowser class. Instance Variables rootTopic: rootTopic - The root help topic ! Message dialog with a warning icon.! An AlexPlugin is a plugin which show the setUp when a test method is selected! Used for layout. Since all morphs now support layoutPolicy the main use of this class is no longer needed. Kept around for compability. Supports a few methods not found elsewhere that can be convenient, eg. newRow ! I am an eye element for all inst vars, printing a description of all the instance vriables (usually second field in the inspector)! An AllProtocol is a special protocol to hanlde the "all" case! Test originally from Andreas Raab! see ColorMappingCanvas comment.! Displays an image with the specified alpha value (translucency) and optional scale and layout (scaled, top-right etc.).! Alpha aware InfiniteForm.! An AmbiguousSelector is a notification produced by the Scanner/Parser/Compiler when encountering this ambiguous construct: 1@-2 Upper expression can be interpreted both 1 @ -2 (regular st-80 and former Squeak syntax, the minus is attached to the literal number) 1 @- 2 (extended binary selector, the minus sign is allowed at any position and thus part of the binary selector) ! AndreasSystemProfiler uses sub-msec VM supported PC sampling. In Memory of Andreas Raab. Author, Friend, Colleague. http://forum.world.st/In-Memory-of-Andreas-Raab-td4663424.html Released by Ron, Julie and David Example: AndreasSystemProfiler spyOn: [ 10000 timesRepeat: [ 3.14159 printString ] ] -=-=-=-=-=-=-= Apparently, the time taken to run the provided block is as twice as long as run without the profiler. -=-=-=-=-=-=-= Both AndreasSystemProfiler and MessageTally are periodic sampling profilers. The essential difference between AndreasSystemProfiler and MessageTally is in how the current method is sampled. MessageTally is driven from a high-priority process in a loop waiting on a delay. When the delay fires the lower-priority process being profiled is interrupted, its stack is walked to determine the methods along the call chain, and that data is recorded. But since the sampling occurs when the high-priority process preempts the lower-priority process, a sample is only taken at a preemption point. In particular, primitives are *not* profiled because they are not suspension points. A process can only be suspended on method activation (a non-primitive method activation, or primitive failure) or on backward branch. The cost of primitives is charged to a caller and is inferred by subtracting the cost of children of the caller from the caller itself (subtracting the number of samples in children of the caller form the number of samples in the caller itself). Another problem is that using the clock that underlies Delay, which is typically the clock used by processes being profiled, causes sampling errors due to the sampling and sampled processes cohering. Delays are limited in resolution (at best 1 millisecond) so if the profiled process waits on a delay it'll fire immediately after the profiling process (because the profiling process is at higher priority) and so the sampling process may only ever see the sampled process in a wait state. If MessageTally is used to profile multiple processes then a third problem is that if a primitive causes a process switch then its cost will end up being charged to the process switched-to, not switched from. This is again because sampling can only occur after a primitive has completed (successfully or not). AndreasSystemProfiler is driven from a high-priority process in a loop waiting on a Semaphore known to the VM. The profiling process uses a primitive to schedule a sample some number of ticks of the VM's high-performance clock in the future. When the time is reached the VM samples the current method and the current process, *before any process preemption takes place*, and independently of the standard clock, and signals the semaphore. The profiling process then collects the method,process pair via primitives. So AndreasSystemProfiler provides much more accurate results. That said there are still limitations with primitives and Cog. Currently Cog only samples "interpreter" primitives. Those primitives it implements in machine code (integer and float arithmetic, closure evaluation, at:, identityHash) are not sampled and won't show up; they will be charged to the calling method. This is fixable, since Cog actually compiles the sampling direct into interpreter primitive invocation when profiling is in effect and not at other times, but sampling could be a significant cost in these simple and performance-critical primitives.! Read an animated GIF file. Example: open all images of an animated GIF file in a Morphic window gifPath := '/path/to/my_animated.gif'. forms := (AnimatedGIFReadWriter formsFromFileNamed: gifPath) forms. content := UITheme builder newRow: (forms collect: [:aForm| UITheme builder newImage: aForm]). content openInWindowLabeled: 'Content of ', gifPath.! An IgorsPlugin is a plugin which displays info about the current selection! This class is the superclass for events that someone might want to announce, such as a button click or an attribute change. Typically you create subclasses for your own events you want to announce. ! Use me to debug and log to the transcript annoncements. AnnouncementLogger new subscribeTo: SystemAnnouncer announcer To unsubscribe AnnouncementLogger allInstancesDo: [:each | SystemAnnouncer announcer unsubscribe: each ]! This is a simple test mock.! This is a simple test mock! This is a simple test mock! If you want to register the same action for multiple events, simply create an AnnouncementSet using a comma: Parent>>initialize super initialize. self session announcer on: AddChild, RemoveChild do: [:it | self changeChild: it child] Motivation example: Often the UI is built after/independently from the model. You want to have the model raise fine-grained announcements to enable the layers on top, but sometimes it is easier in the UI to refresh everything whenever something happens.! I am a tool to inspect live events . If you want to inspect events generated by an announcer without a priori knowledge about the kind and frequency of events, you can always open a spy on an announcer to track its events. announcer open or AnnouncementSpy openOn: announcer This opens a window which displays the sequence of events emitted by the announcer (after the spy has been launched). You can open/inspect each event individually using the contextual menu. you can also clear the list view. Try it on World announcer open (in Pharo 1.1 or later), then add and close windows to see events generated.! The subscription is a single entry in a SubscriptionRegistry. Several subscriptions by the same object is possible. I know how to make myself weak or strong, only use this capability if it can't be determined at subscribe time though, as it uses become: (for thread-safety), which is quite slow.! This is a custom help book providing the API documentation for the announcements framework. ! This is a custom help book for the announcements framework. ! This is a custom help book providing a tutorial for the announcements framework. ! The code is based on the announcements as described by Vassili Bykov in . The implementation uses a threadsafe subscription registry, in the sense that registering, unregistering, and announcing from an announcer at the same time in different threads should never cause failures. For security reasons, registry is kept private, and has no accessor like in other implementations! An AnnouncerTest is a test class used to test Announcer. Instance Variables announcer: the announcer to test announcer - the announcer that is tested ! I am a class installer that does not expose the class to the global environment nor announces that a new class has been created. As it's name suggest it is used for anonymous classes, for instance in Tests.! AppRegistry is a simple little class, not much more than a wrapper around a collection. It's intended to help break dependencies between packages. For example, if you'd like to be able to send e-mail, you could use the bare-bones MailComposition class, or you could use the full-blown Celeste e-mail client. Instead of choosing one or the other, you can call "MailSender default" (where MailSender is a subclass of AppRegistry), and thus avoid creating a hard-coded dependency on either of the two mail senders. This will only really be useful, of course, for applications that have a very simple, general, well-defined interface. Most of the time, you're probably better off just marking your package as being dependent on a specific other package, and avoiding the hassle of this whole AppRegistry thing. But for simple things like e-mail senders or web browsers, it might be useful. ! This is the abstract superclass for file archives. Archives can be read from or written to files, and contain members that represent files and directories.! This is the abstract superclass for archive members, which are files or directories stored in archives.! I am ArithmeticError, the superclass of all exceptions related to arithmentic.! I present an ArrayedCollection whose elements are objects.! This is the unit test for the class Array. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! I am an abstract collection of elements with a fixed range of integers (from 1 to n>=0) as external keys.! AsssertionFailure is the exception signaled from Object>>assert: when the assertion block evaluates to false.! AssignmentNode comment: 'I represent a (var_expr) construct.'! I represent a pair of associated objects--a key and a value. My instances can serve as entries in a dictionary. Implementation notes: Note that hash is not redefined even if the = was redefined because Association>>hash may cause extreme slowdowns in compiling Unicode methods. Association>>hash does not need to hash the value; it's slow and useless. ! An asynchronous file allows simple file read and write operations to be performed in parallel with other processing. This is useful in multimedia applications that need to stream large amounts of sound or image data from or to a file while doing other work. Closing the file after its use is currently required to not leak external semaphores. ! I am an abstract paint, which should be converted before it can be used by Athens. I am backend agnostic, as opposed to concrete paint(s). Also, any other object can play the role of paint, as long as it implements the conversion method, #asAthensPaintOn: See other implementors of #asAthensPaintOn:, such as Color and Form.! In Athens, any object can play role of a shape. I demonstrating the minimal protocol which should be supported by "shape" role, to be used with Athens canvas. See my methods comments for more details. ! I support the same protocol than AthensTransform, but in addition I store a plain 2x3 matrix with state accessible at any moment. This is different to AthensTransform because it does not expose its internal storage, because it can be backend specific.! i am abstract class , representing an arc segment! Text display command for changing the background color! - balloon engine using only first 4 variables of receiver instance: - work buffer - span - bitBlt (Bitblt object) - forms ! blghjfg ! maybe Color could act as a AthensPaint by itself by implementing a corresponding protocol! I am concrete implementation of Athens surface which using balloon engine for rendering. ! I converting all bezier segments to a sequence of line segments, by approximating the curve along its path. This classs is used for generating strokes.! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in counter-clockwise direction.! i represent a circular arc, connecting previous segment endpoint and my endpoing of given angle, passing in clockwise direction.! my instances representing a low-level cairo context and mapped to cairo_t * C type! I implement an AthensAffineTransform interface.! i am a concrete implementation of Athens surface which using cairo graphics library for rendering for generating PDF files as output. ! I control the paint modes supported by Cairo backend. for the list and description of paint modes supported by Cairo library, see http://cairographics.org/operators/! i am a concrete implementation of Athens surface which using cairo graphics library for rendering. Cairo library, by itself can have multiple surface types. This class uses image surface (a bitmap located in system memory) and maps to cairo_image_surface_t* C type.! self example1! The Athens canvas is a central object which is used to performs drawings on a surface. Please note, that Athens does not allows you to instantiate canvas directly, instead you obtain a ready for use instance as an argument in #drawDuring: message, sent to athens surface: surface drawDuring: [:canvas | .... ] Using canvas outside a #drawDuring: method is highly discouraged. Doing so may lead to unpredicted behavior/data corruption/image crash.! A text command to render a character span containing the range of characters for with same attributes! i represent close segment (when user issuing #close command to path builder)! A command to change the current font color! i represent a cubic Bezier path segment! This converter flattens all curves by converting them to series of lines. This means that path can be rendered using simple polygon rendering technique and nothing else.! self new openInWorld inspect ---- Use self nextFigure/prevFigure in inpector to change the rendered figure. You can find an implementation of each figure in corresponding #figure<#>: method! I representing an elliptical arc, using endpoint parametrization: - initial endpoint (x0,y0), which comes from previous segment - final endpoint (x1,y1) - rh, rv , the radii of unrotated ellipse - Large arc flag: true if more than 180 degrees of the arc is to be traversed (as measured on the unscaled circle), false otherwise - Sweep flag: true if the arc is to be traversed in the counter-clockwise direction, false otherwise (not functional yet)! A command to change the currently selected font! Creates a new font description from a string representation in the form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", 1)FAMILY-LIST is a comma separated list of families optionally terminated by a comma, 2)STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity. If STYLE-OPTIONS is missing, then all style options will be set to the default values 3)SIZE is a decimal number (size in points) or optionally followed by the unit modifier "px" for absolute size. ! I am an extended version of my supeclass, and I represent generic 3x3 matrix. ! i am like my superclass, can display any scene (object which understands #renderOn: message) and support free-form pan and zoom. but in addition, i expecting that scene object understands following: scene handleEvent: event in: sceneView at: position This method should answer true if scene object wants to handle event by itself , preventing default handling of view (pan & zoom). The point is coordinates of event in scene coordinate space (not screen coordinate space). The event is MorphicEvent (currently limited only to mouse move&button events). Note that if scene view enters zooming or panning state, no events will be passed to scene object as long as state is active. ! i represent a line segment, created using #lineTo: command of AthensPathBuilder! Move segment always indicates starting of a new contour. If contour ends with close command, then my insntance will have 'closed' flag set to true. See AthensPathBuilder , which is responsible for building paths.! I am a base class, which defines a paint. My subclasses represent a concreate paint by implementing my protocol, that actually draws a specific shapes with me. My subclasses usually backend-specific, but as long as you implement my protocol, any object can be treated as paint: - fillPath: aPath on: aCanvas - fillRectangle: aRectangle on: aCanvas - asStrokePaint ! A paint mode controls how the incoming color (source) will be transferred to surface (destination). To set a paint mode for canvas, send a message with corresponding mode name to my instance. My instance(s) is available via canvas protocol, i.e. 'canvas paintMode'. For example, to set an 'over' paint mode, use following: canvas paintMode over. If you want to restore original paint mode after performing drawing operations, which may change it, use #restoreAfter: method , i.e. canvas paintMode restoreAfter: [ .. perform any drawing operations here.. ]. Since different backends may support different set of paint modes, the default implementation in AthensPaintMode for all mode setters is to signal an error. To query a set of available paint modes, supported by backend, use #availableModes message. ! Creates a new font description from a string representation in the form [FAMILY-LIST] [STYLE-OPTIONS] [SIZE], where FAMILY-LIST is a comma separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, stretch, or gravity, and SIZE is a decimal number (size in points) or optionally followed by the unit modifier 'px' for absolute size. Any one of the options may be absent. If FAMILY-LIST is absent, then the family_name field of the resulting font description will be initialized to NULL. If STYLE-OPTIONS is missing, then all style options will be set to the default values. If SIZE is missing, the size in the resulting font description will be set to 0.! PangoRectangle typedef struct { int x; int y; int width; int height; } PangoRectangle; ! This class represents an interface, which should be supported by all paths (special kind of shape) used for drawing with Athens framework. Path data organization is up to surface where it built, therefore paths are not interchangeable between different surfaces. ! i am abstract path builder, to specify an interface protocol which is available for building paths, by using canvas or surface #createPath: method.! i am a base class for path conversion. i take a path as input and producing a path commands as output. My default implementation just passing all path commands without changes to destination without any conversion Example of use: converter := AthensXYZConverter dest: (AthensPolygonPath new). convertedPath := converter convert: sourcePath. You can chain multiple converters: basicConverter := AthensZYXConv dest: AthensPolygonPath new. compoundConverter := AthensABCConverter dest: basicConverter. compoundConverter convert: somePath in this case, an initial conversion is performed by instance of AthensABCConverter, and then conversion results are passed down to AthensZYXConv, and then finally to instance of AthensPolygonPath. ! The path segment is path building block. Path is formed from list of connected path segments. At building stage, there is no container nor separately defined "path" object, just a linked list of segments. Later the segments are accumulated in backend-specific path object, and the way how it is organized may vary. My (sub)instances usually are not created directly by user, but instead by instance of AthensPathBuilder. Therefore, all my subclasses are considered private and implementation detail.! i am special kind of shape which using only straight line segments, unlike from more generic paths.! I implementing a simple and efficient algorithm to test whether given point lies withing a polygon or not. A polygon is a collection of points 1...size.! i represent a quadric Bezier path segment. Any quadratic spline can be expressed as a cubic (where the cubic term is zero). The end points of the cubic will be the same as the quadratic's. CP0 = QP0 CP3 = QP2 The two control points for the cubic are: CP1 = QP0 + 2/3 *(QP1-QP0) CP2 = QP2 + 2/3 *(QP1-QP2) ! The Quartz surface is used to render cairo graphics targeting the Apple OS X Quartz rendering system. ! i am simple morph for representing some scene. The scene is any object which implements #renderOn: method, or a block with single argument. (an argument passed is an Athens canvas). I implement a simple view panning and zooming with mouse drag and mouse-wheel (correspondigly). Example1: open scene view, by passing a simple rendering block. | view | view := AthensSceneView new. view scene: [:canvas | canvas surface clear: Color black. canvas setPaint: Color red. canvas drawShape: (0@0 corner:120@100) ]. view openInWindow. Example2: open scene view on imported SVG file (note you need 'Athens-SVG' package loaded): | view | view := AthensSceneView new. view scene: (AthensSVGConverter fromFile: 'lion.svg'). view openInWindow. ! This class represents an interface, which should be supported by all shapes used for drawing with Athens framework. Shapes do not have to inherit directly from me, for example Rectangle implements my protocol (via extensions), and as result can be used as a valid shape for drawing with Athens.! I representing a stroke paint object used by Athens. This class is not used anywhere. The comment to this class is still under development. ! I representing a surface, where all drawing operations will happen. I also having a number of factory methods to create paints, paths and other objects involved in drawing. AthensSurface is an abstract, while subclasses implement a specific kind of surface for one or another backend. The primary role of AthensSurface class is to define a public protocol for all Athens surfaces, which can be used by applications which using Athens framework. To get a new surface, use: extent: x@y for surfaces which don't need to have dimensions specified, it would just #new.! AthensCairoSurfaceExamples example1. AthensCairoSurfaceExamples example2. AthensBalloonSurfaceExamples example6.! An abstract base class for all text rendering commands. A text rendered takes a stream (or list) of my (sub)instances and in that way it renders the text! I representing a single line of text! This is a text renderer, which pipelining a text command(s) , produced by AthensTextComposer into a concrete calls to canvas. Its using a glyph renderer instance(s) to draw separate font glyphs on a surface in a most suitable/efficient manner for given Athens surface. ! I responsible for scanning the Text and transforming it into a list of AthensTextLine, where each line is a list of AthensTextDisplayCommand (sub)instances! My instances represent an interface for coordinate system transformation defined by 3x3 matrix of following kind: | sx shx x | | shy sy y | | w0 w1 w2 | sx and sy define scaling in the x and y directions, respectively; shx and shy define shearing in the x and y directions, respectively; tx and ty define translation in the x and y directions, respectively. AthensSurface are responsible for providing specific implementation of me, which is most appropriate for backend its using. My internal representation isnt available for manipulation, for example dont assume i'm a matrix. In short, do not copy my state or modify it directly, instead use methods such as #loadAffineTransformation:, and talk to my surface. My subclasses should implement a common protocol for applying generic types of affine transformations on coordinate system: - translate - rotate - shear - scale - matrix multiply - matrix load Surface must support 4 kinds of transformations of coordinate system(s): - path-to-surface (#pathTransform) to transform path coordinates to surface space - image-to-surface (#imageTransform) to transform between user coordinates and surface pixels - fill-paint-to-user (#fillTransform) - stroke-paint-to-user (#strokeTransform) Given a (fill or stroke) paint-to-user transformation Tp and user-to-surface transformation Tu, the paint color and alpha of a pixel to be drawn with surface coordinates (x, y) is defined by mapping its center point (x + 1/2, y + 1/2) through the inverse transformation (Tu * Tp)^-1 , resulting in a sample point in the paint coordinate space. All transformations, except image-to-surface , ignoring w0 , w1 and w2 values and always assume them set to { 0 , 0 , 1 } respectively. For accessing a particular kind of transformation, send message to canvas, i.e.: canvas pathTransform translateBy: 10@10. It is safe to store transformation in temporary variable, as long as canvas is valid. ! I am just a base abstract class, containing common behavior for various queue types! i am a queue item , used by atomic queues. All my new instances are circular i.e. next=self! I am using semaphore to signal/wait for new items available in queue I am introducing extra protocol - #next, which blocks the sender until it can successfully fetch next item from queue. ! An Authentifier is a UI made for specifying username and password! I am responsible for the full name used to identify the current code author.! I am used to request a new author name.! The Authorizer does user authorization checking. Each instance of authorizer keeps track of the realm that it is authorizing for, and the table of authorized users. An authorizer can be asked to return the user name/symbol associated with a userID (which concatenates the username and password from the HTTP request) with the user: method. ! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! I read and write BMP files. Example to save and load a screenshot of the world in a .bmp file: BMPReadWriter putForm: (Form fromDisplay: (0@0 corner: 400@400)) onFileNamed: '/tmp/screenshot.bmp'. (ImageMorph withForm: (BMPReadWriter formFromFileNamed: '/tmp/screenshot.bmp')) openInWindow.! I am an object that doesn't always report #= correctly. Used for testing the EqualityTester.! I am an object that doesn't always hash correctly. I am used for testing the HashTester.! I represent an unordered collection of possibly duplicate elements. I store these elements in a dictionary, tallying up occurrences of equal objects. Because I store an occurrence only once, my clients should beware that objects they store will not necessarily be retrieved such that == is true. If the client cares, a subclass of me should be created.! This class is a simulation of the code that's run by the Balloon engine. For debugging purposes only.! BalloonBuffer is a repository for primitive data used by the BalloonEngine.! BalloonCanvas is a canvas using the BalloonEngine for drawing wherever possible. It has various methods which other canvases do not support due to the extra features of the balloon engine.! BalloonEdgeData defines an entry in the internal edge table of the Balloon engine. Instance Variables: index The index into the external objects array of the associated graphics engine xValue The computed x-value of the requested operation yValue The y-value for the requested operation height The (remaining) height of the edge source The object from the external objects array! BalloonEngine is the representative for the Balloon engine inside Squeak. For most purposes it should not be used directly but via BalloonCanvas since this ensures proper initialization and is polymorphic with other canvas uses.! This class is a simulation of the code that's run by the Balloon engine. For debugging purposes only.! This class is a simulation of the code that's run by the Balloon engine. For debugging purposes only.! A balloon with text used for the display of explanatory information. Balloon help is integrated into Morphic as follows: If a Morph has the property #balloonText, then it will respond to #showBalloon by adding a text balloon to the world, and to #deleteBalloon by removing the balloon. Moreover, if mouseOverEnabled is true (see class msg), then the Hand will arrange to cause display of the balloon after the mouse has lingered over the morph for a while, and removal of the balloon when the mouse leaves the bounds of that morph. In any case, the Hand will attempt to remove any such balloons before handling mouseDown events, or displaying other balloons. Balloons should not be duplicated with veryDeepCopy unless their target is also duplicated at the same time.! This class is a simulation of the code that's run by the Balloon engine. For debugging purposes only.! This class is a repository for data which needs to be preserved during certain operations of BalloonCanvas.! This class encodes and decodes data in Base64 format. This is MIME encoding. We translate a whole stream at once, taking a Stream as input and giving one as output. Returns a whole stream for the caller to use. 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y Outbound: bytes are broken into 6 bit chunks, and the 0-63 value is converted to a character. 3 data bytes go into 4 characters. Inbound: Characters are translated in to 0-63 values and shifted into 8 bit bytes. (See: N. Borenstein, Bellcore, N. Freed, Innosoft, Network Working Group, Request for Comments: RFC 1521, September 1993, MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies. Sec 6.2) By Ted Kaehler, based on Tim Olson's Base64Filter.! This is the unit test for the class Base64MimeConverter. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! This class contains some tests regarding the classes Behavior ClassDescription Class Metaclass --- ! CodeLoader provides a way to load smalltalk source file from local. Example: CodeLoader new loadSourceFiles: (Array with: (#file:, FileDirectory default fullName, '/useless.st')); installSourceFiles ! I'm a command line handler who is not aware of any UI or Tools present in the system. I'm used as base handler for loading executing stripped images (kernel images, for example). My usage is the same as PharoCommandLineHandler, see his comment as better explanation.! I am an eye element for indexable fields. (basicAt:)! Beeper provides simple audio (or in some other way) feedback to the user. The recommended use is "Beeper beep" to give the user the equivalence of a beep. If you want to force the beep to use the primitive in the VM for beeping, then use "Beeper beepPrimitive". In either case, if sounds are disabled there will be no beep. The actual beeping, when you use "Beeper beep", is done by sending a #play message to a registered playable object. You can register your own playable object by invoking the class side method #setDefault: passing in an object that responds to the #play message. The default playable object is an instance of Beeper itself which implements #play on the instance side. That implementation delegates the playing of the beep to the default SoundService. Note that #play is introduced as a common interface between AbstractSound and Beeper. This way we can register instances of AbstractSound as playable entities, for example: Beeper setDefault: (SampledSound new setSamples: self coffeeCupClink samplingRate: 12000). Then "Beeper beep" will play the coffeeCup sound.! My instances describe the behavior of other objects. I provide the minimum state necessary for compiling methods, and creating and running instances. Most objects are created as instances of the more fully supported subclass, Class, but I am a good starting point for providing instance-specific behavior (as in Metaclass).! I'm an abstract class grouping the behavior of the code declarations that will be instaled in a behavior, such as methods, class comments, organizations...! This class represents a quadratic bezier segment between two points Instance variables: via The additional control point (OFF the curve)! This class represents a cubic bezier segment between two points Instance variables: via1, via2 The additional control points (OFF the curve)! A BindingsHolder is a simple wrapper to manage the bindings It has actually two bindings - the current one: the inst var bindings it's the first one queried - is the needed selector is not defined in the current binding, itchecks in a default one (the class var Bindings)! I represent a block transfer (BLT) of pixels into a rectangle (destX, destY, width, height) of the destinationForm. The source of pixels may be a similar rectangle (at sourceX, sourceY) in the sourceForm, or a constant color, currently called halftoneForm. If both are specified, their pixel values are combined with a logical AND function prior to transfer. In any case, the pixels from the source are combined with those of the destination by as specified by the combinationRule. The combination rule whose value is 0 through 15 programs the transfer to produce 1 or 0 according to its 4-bit representation as follows: 8: if source is 0 and destination is 0 4: if source is 0 and destination is 1 2: if source is 1 and destination is 0 1: if source is 1 and destination is 1. At each pixel the corresponding bits of the source and destination pixel values determine one of these conditions; if the combination rule has a 1 in the corresponding bit position, then the new destination value will be 1, otherwise it will be zero. Forms may be of different depths, see the comment in class Form. In addition to the original 16 combination rules, this BitBlt supports 16 fails (to simulate paint bits) 17 fails (to simulate erase bits) 18 sourceWord + destinationWord 19 sourceWord - destinationWord 20 rgbAdd: sourceWord with: destinationWord. Sum of color components 21 rgbSub: sourceWord with: destinationWord. Difference of color components 22 OLDrgbDiff: sourceWord with: destinationWord. Sum of abs of differences in components 23 OLDtallyIntoMap: destinationWord. Tallies pixValues into a colorMap these old versions don't do bitwise dest clipping. Use 32 and 33 now. 24 alphaBlend: sourceWord with: destinationWord. 32-bit source and dest only 25 pixPaint: sourceWord with: destinationWord. Wherever the sourceForm is non-zero, it replaces the destination. Can be used with a 1-bit source color mapped to (0, FFFFFFFF), and a fillColor to fill the dest with that color wherever the source is 1. 26 pixMask: sourceWord with: destinationWord. Like pixPaint, but fills with 0. 27 rgbMax: sourceWord with: destinationWord. Max of each color component. 28 rgbMin: sourceWord with: destinationWord. Min of each color component. 29 rgbMin: sourceWord bitInvert32 with: destinationWord. Min with (max-source) 30 alphaBlendConst: sourceWord with: destinationWord. alpha is an arg. works in 16 bits. 31 alphaPaintConst: sourceWord with: destinationWord. alpha is an arg. works in 16 bits. 32 rgbDiff: sourceWord with: destinationWord. Sum of abs of differences in components 33 tallyIntoMap: destinationWord. Tallies pixValues into a colorMap 34 alphaBlendScaled: srcWord with: dstWord. Alpha blend of scaled srcWord and destWord. The color specified by halftoneForm may be either a Color or a Pattern. A Color is converted to a pixelValue for the depth of the destinationForm. If a Pattern, BitBlt will simply interpret its bitmap as an array of Color pixelValues. BitBlt aligns the first element of this array with the top scanline of the destinationForm, the second with the second, and so on, cycling through the color array as necessary. Within each scan line the 32-bit value is repeated from left to right across the form. If the value repeats on pixels boudaries, the effect will be a constant color; if not, it will produce a halftone that repeats on 32-bit boundaries. Any transfer specified is further clipped by the specified rectangle (clipX, clipY, clipWidth, clipHeight), and also by the bounds of the source and destination forms. To make a small Form repeat and fill a big form, use an InfiniteForm as the source. To write on a form and leave with both transparent and opapue areas, use a MaskedForm as the source. Pixels from a source to a destination whose pixels have a different depth are converted based on the optional colorMap. If colorMap is nil, then conversion to more bits is done by filling the new high-order bits with zero, and conversion to fewer bits is done by truncating the lost high-order bits. The colorMap, if specified, must be a either word array (ie Bitmap) with 2^n elements, where n is the pixel depth of the source, or a fully specified ColorMap which may contain a lookup table (ie Bitmap) and/or four separate masks and shifts which are applied to the pixels. For every source pixel, BitBlt will first perform masking and shifting and then index the lookup table, and select the corresponding pixelValue and mask it to the destination pixel size before storing. When blitting from a 32 or 16 bit deep Form to one 8 bits or less, the default is truncation. This will produce very strange colors, since truncation of the high bits does not produce the nearest encoded color. Supply a 512 long colorMap, and red, green, and blue will be shifted down to 3 bits each, and mapped. The message copybits...stdColors will use the best map to the standard colors for destinations of depths 8, 4, 2 and 1. Two other sized of colorMaps are allowed, 4096 (4 bits per color) and 32786 (five bits per color). Normal blits between 16 and 32 bit forms truncates or pads the colors automatically to provide the best preservation of colors. Colors can be remapped at the same depth. Sometimes a Form is in terms of colors that are not the standard colors for this depth, for example in a GIF file. Convert the Form to a MaskedForm and send colorMap: the list of colors that the picture is in terms of. MaskedForm will use the colorMap when copying to the display or another Form. (Note also that a Form can be copied to itself, and transformed in the process, if a non-nil colorMap is supplied.)! My instances provide contiguous storage of bits, primarily to hold the graphical data of Forms. Forms and their subclasses provide the additional structural information as to how the bits should be interpreted in two dimensions.! A BitmapFillStyle fills using any kind of form. Instance variables: form
The form to be used as fill. tileFlag If true, then the form is repeatedly drawn to fill the area.! I am a specialized layout which does not hold slots but only raw data (bytes or words).! This class is private to the EHS implementation. Its use allows for ensured execution to survive code such as: [self doThis. ^nil] ensure: [self doThat] Signaling or handling this exception is not recommended.! I am a block closure for Eliot's closure implementation. Not to be confused with the old BlockClosure.! This test case collects examples for block uses that require full block closures.! I am a support class for the decompiler that is used to find the number of local temps in a block by finding out what the stack offset is at the end of a block.! I represent a bracketed block with 0 or more arguments and 1 or more statements. If I am initialized with no statements, I create one. I have a flag to tell whether my last statement returns a value from the enclosing method. My last three fields remember data needed for code generation. I can emit for value in the usual way, in which case I create a literal method (actually a context remotely copied) to be evaluated by sending it value: at run time. Or I can emit code to be evaluated in line; this only happens at the top level of a method and in conditionals and while-loops, none of which have arguments.! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. In particular, the icons should be operating system agnostic, because, for example, people in Windows are confused by the red, yellow, green buttons of apple. - uses a limited amount of colors and effects. - is fast. self defaultSettings: nil. self beCurrent. ! Boolean is an abstract class defining the protocol for logic testing operations and conditional control structures for the logical values represented by the instances of its subclasses True and False. Boolean redefines #new so no instances of Boolean can be created. It also redefines several messages in the 'copying' protocol to ensure that only one instance of each of its subclasses True (the global true, logical assertion) and False (the global false, logical negation) ever exist in the system.! This is the unit test for the class Boolean. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category ! See BorderedMorph BorderedMorh new borderStyle: (BorderStyle inset width: 2); openInWorld.! BorderedMorph introduce borders to morph. Borders have the instanceVariables borderWidth and borderColor. BorderedMorph new borderColor: Color red; borderWidth: 10; openInWorld. BorderedMorph also have a varaity of border styles: simple, inset, raised, complexAltFramed, complexAltInset, complexAltRaised, complexFramed, complexInset, complexRaised. These styles are set using the classes BorderStyle, SimpleBorder, RaisedBorder, InsetBorder and ComplexBorder. BorderedMorph new borderStyle: (SimpleBorder width: 1 color: Color white); openInWorld. BorderedMorph new borderStyle: (BorderStyle inset width: 2); openInWorld. ! I am the handle in the left bottom of windows used for resizing them.! I am the handle in the right bottom of windows used for resizing them.! Gradient fillstyle that draws with optional extent.! Used for compiling and decompiling brace constructs. These now compile into either a fast short form for 4 elements or less: Array braceWith: a with: b ... or a long form of indefinfite length: (Array braceStream: N) nextPut: a; nextPut: b; ...; braceArray. The erstwhile brace assignment form is no longer supported.! Morph displaying opposing arrows.! Abstract superclass for morphs that are used to select a component (R, G, B or A) of a colour.! I traverse the filesystem in breadth-first order. Given this hierarchy: alpha beta gamma delta epsilon I would visit the nodes in the following order: alpha, delta, beta, gamma, epsilon. I use my work instance variable as a queue, adding nodes to be visited to the end and retrieving them from the beginning. ! This exception is raised on executing a breakpoint. "BreakPoint signal" is called from "Object>>break".! This class manages methods that include breakpoints. It has several class methods to install and uninstall breakpoints. Evaluating "BreakpointManager clear" will remove all installed breakpoints in the system. Known issues: - currently, only break-on-entry type of breakpoints are supported - uninstalling the breakpoint doesn't auto-update other browsers - uninstalling a breakpoint while debugging should restart-simulate the current method Ernest Micklei, 2002 Send comments to emicklei@philemonworks.com! I represent a query path into the class descriptions, the software of the system.! I am a PluggableTextMorph that knows enough to make myself invisible when necessary.! URLs that instruct a browser to do something.! A ManifestBuilder is used to create, read and write a Manifest Instance Variables manifestClass: manifestClass - xxxxx ! A ManifestBuilderTest is a class to test the behavior of ManifestBuilder! A ButtonComposableModel is an applicative model which handle a basic button. self example! A ButtonSpec is a spec used to describe a button! I represent an ArrayedCollection whose elements are integers between 0 and 255. ! A ByteCodeMessageConverter is a wrapper wich display the bytecode of the provided message! I am a raw data layout that holds bytes (8 bit).! This class represents the array of 8 bit wide characters. ! This class represents the symbols containing 8bit characters.! A ByteTextConverter is the abstract class for text converters on single byte encodings.! I am an abstract superclass for different bytecode set encoders. Subclasses inherit the literal management of Encoder and encapsulate the mapping of opcodes to specific bytecodes.! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! Text converter for Simplified Chinese variation of EUC. (Even though the name doesn't look so, it is what it is.)! Text converter for CP1250. Windows code page used in Eastern Europe.! Text converter for CP1252. Windows code page used in Western Europe.! Text converter for CP1253. Windows code page used for Greek.! CPUWatcher implements a simple runaway process monitoring tool that will suspend a process that is taking up too much of Pharo's time and allow user interaction. By default it watches for a Process that is taking more than 80% of the time; this threshold can be changed. CPUWatcher can also be used to show cpu percentages for each process from within the ProcessBrowser. CPUWatcher startMonitoring. "process period 20 seconds, sample rate 100 msec" CPUWatcher current monitorProcessPeriod: 10 sampleRate: 20. CPUWatcher current threshold: 0.5. "change from 80% to 50%" CPUWatcher stopMonitoring. ! This morph can be used to cache the picture of a morph that takes a long time to draw. It should be used with judgement, however, since heavy use of caching can consume large amounts of memory.! A CaesarEcryptorDecryptor is a world know encryptng algorithm by rotation! I providing a simple [weak]key->value storage used to cache various objects used by Athens for Cairo backend, like fonts/forms etc. The cache is global (there's only a single instance of me used at a time) and cache is visible globally by all entities of Cairo backend. The cached objects is held weakly. The cache is flushed for a new image session.! I represent the cairo_font_extents_t structure type The cairo_font_extents_t structure stores metric information for a font. Values are given in the current user-space coordinate system. Because font metrics are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double ascent; the distance that the font extends above the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements above it. double descent; the distance that the font extends below the baseline. This value is positive for typical fonts that include portions below the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements below it. double height; the recommended vertical distance between baselines when setting consecutive lines of text with the font. This is greater than ascent+descent by a quantity known as the line spacing or external leading. When space is at a premium, most fonts can be set with only a distance of ascent+descent between lines. double max_x_advance; the maximum distance in the X direction that the origin is advanced for any glyph in the font. double max_y_advance; the maximum distance in the Y direction that the origin is advanced for any glyph in the font. This will be zero for normal fonts used for horizontal writing. (The scripts of East Asia are sometimes written vertically.)! I am a private class, used to represent a 'cairo_font_face_t *' data structure of Cairo library. I am not useful for direct use nor providing any functionality. My only purpose is to keep a strong reference to original FT2Face object (so it won't be freed before a corresponding instance of mine will release it). ! I am a surface paint with lazy initialization scheme, that i loading image from .png file the first time i will be used. ! my instances map to cairo_scaled_font_t * data type! I represent the cairo_text_extents_t structure type The cairo_text_extents_t structure stores the extents of a single glyph or a string of glyphs in user-space coordinates. Because text extents are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double x_bearing; the horizontal distance from the origin to the leftmost part of the glyphs as drawn. Positive if the glyphs lie entirely to the right of the origin. double y_bearing; the vertical distance from the origin to the topmost part of the glyphs as drawn. Positive only if the glyphs lie completely below the origin; will usually be negative. double width; width of the glyphs as drawn double height; height of the glyphs as drawn double x_advance; distance to advance in the X direction after drawing these glyphs double y_advance; distance to advance in the Y direction after drawing these glyphs. Will typically be zero except for vertical text layout as found in East-Asian languages.! A CalendarDyaMorph represents a specific day on a monthly calendar. Instance Variables bounds: date: highlighted: owner: bounds - owner-relative bounding box date - the specific date (year/month/day) the CalendarMorph represents highlighted - flag to keep track of when a CalendarMorph has the mouse dragging over it, and is thus highlighted owner - the morph that contains the CalendarMorph, and all its siblings ! A CalendarMorph is a standalone morph that represents a selectable monthly calendar. CalendarMorph openOn: Date today Instance Variables date: days: > touchPoints: value: > date - the currently selected date (always within the current month) days - all the days that are visible, including days from the previous month, the current month, and the next month touchPoints - extra hotspots that are touch-responsive (key rectangle is in world coordinates) ! A canvas is a two-dimensional medium on which morphs are drawn in a device-independent manner. Canvases keep track of the origin and clipping rectangle, as well as the underlying drawing medium (such as a window, pixmap, or postscript script). Subclasses must implement (at least) the following methods: * Drawing: #fillOval:color:borderWidth:borderColor: #frameAndFillRectangle:fillColor:borderWidth:borderColor: #drawPolygon:color:borderWidth:borderColor: #image:at:sourceRect:rule: #stencil:at:sourceRect:rule: #line:to:width:color: #paragraph:bounds:color: #text:bounds:font:color: * Support #clipBy:during: #translateBy:during: #translateBy:clippingTo:during: #transformBy:clippingTo:during: ! The first message has the common receiver, the rest have receiver == nil, which signifies cascading.! A Categorizer is responsible to manage the class categories and method protocols. Instances consist of an Array of category names (categoryArray), each of which refers to an Array of elements (elementArray). This association is made through an Array of stop indices (categoryStops), each of which is the index in elementArray of the last element (if any) of the corresponding category. For example: categories := Array with: 'firstCat' with: 'secondCat' with: 'thirdCat'. stops := Array with: 1 with: 4 with: 4. elements := Array with: #a with: #b with: #c with: #d. This means that category firstCat has only #a, secondCat has #b, #c, and #d, and thirdCat has no elements. This means that stops at: stops size must be the same as elements size. Instance Variables categoryArray: categoryStops: elementArray: categoryArray - holds the list of categories. A category could be any Object but is generally a String or Symbol. Categories should be unique (categoryArray asSet size = categoryArray size) categoryStops - holds the index of last element belonging to each category. There should be a category stop for each category (categoryStops size = categoryArray size). The categoryStops should be sorted (categoryStops sorted = categoryStops). A category stop equal to its predecessor (= 0 for the first category stop) denotes an empty category. elementArray - holds the elements to be classified. The elements are sorted by category. Class variables Default is the default category used to classify yet unclassified methods of a class NullCategory is the category to be displayed in a Browser for a class having no method.! This announcement will be emited when adding a category using: => SystemOrganizer >> addCategory:! This announcement will be emited when removing a category using: => SystemOrganizer >> removeCategory:! This announcement will be emited when renaming a category using: => SystemOrganizer >> renameCategory:toBe:! CategoryWidget is the basic implementation of a wiget managing categories! A ChangeList represents a list of changed methods that reside on a file in fileOut format. The classes and methods in my list are not necessarily in this image!! Used as the model when changes are recovered. It holds three lists: changeList - a list of ChangeRecords list - a list of one-line printable headers listSelections - a list of Booleans (true = selected, false = not selected) multiple OK. listIndex Items that are removed (removeDoits, remove an item) are removed from all three lists. Most recently clicked item is the one showing in the bottom pane.! A ChangeRecord represents a change recorded on a file in fileOut format. It includes a type (more needs to be done here), and additional information for certain types such as method defs which need class and category.! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). This implementation of ChangeSet is capable of remembering and manipulating methods for which the classes are not present in the system. However at the present time, this capability is not used in normal rearranging and fileOuts, but only for invoking and revoking associated with isolation layers. For isolated projects (see Project class comment), the changeSet binding is semi-permanent. Every project exists in an isolation layer defined by its closest enclosing parent (or itself) that is isolated. If a project is not isolated, then changes reported to its designated changeSet must also be reported to the permanent changeSet for that layer, designated in the isolated project. This ensures that that outer project will be able to revert all changes upon exit. Note that only certain changes may be reverted. Classes may not be added, removed, renamed or reshaped except in the layer in which they are defined because these operations on non-local classes are not revertable. If a Squeak Project is established as being isolated, then its associated changeSet will be declared to be revertable. In this case all changes stored can be reverted. The changeSet associated with an isolated project is tied to that project, and cannot be edited in a changeSorter. ------ name - a String used to name the changeSet, and thus any associated project or fileOut. preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. revertable - a Boolean If this variable is true, then all of the changes recorded by this changeSet can be reverted. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes. structures - Dictionary {#Rectangle -> #( 'origin' 'corner')}. Of the names of the instances variables before any changes for all classes in classChanges, and all of their superclasses. In the same format used in SmartRefStream. Inst var names are strings. superclasses - Dictionary {#Rectangle -> #Object}. Of all classes in classChanges, and all of their superclasses. Structures and superclasses save the instance variable names of this class and all of its superclasses. Later we can tell how it changed and write a conversion method. The conversion method is used when old format objects are brought in from the disk from ImageSegment files (.extSeg) or SmartRefStream files (.obj .morph .bo .sp). NOTE: It should be fairly simple, by adding a bit more information to the classChangeRecords, to reconstruct the information now stored in 'structures' and 'superclasses'. This would be a welcome simplification. ! Class category changes are not being properly added to the default changeset in Squeak 3.7. This test case will pass in Squeak 3.6, and fail in Squeak 3.[7-9]. ! A ChangeSorterApplication is spec version of the dual sorter. ChangeSorterApplication new openWithSpec! A ChangeSorterModel is a model used by Change Sorter UIs for computation! A ChangesBrowser is a browser used to browse a composite change wich gather all the wanted changes! I represent the changes file and give access to him. If you want to log a change, look at my #logChange: method. I have a default instance that is hearing SystemAnnouncements and logging the change logs in there. But you can have your own instance and log whatever you want.! I represent a character by storing its associated Unicode. The first 256 characters are created uniquely, so that all instances of latin1 characters ($R, for example) are identical. The code point is based on Unicode. Since Unicode is 21-bit wide character set, we have several bits available for other information. As the Unicode Standard states, a Unicode code point doesn't carry the language information. This is going to be a problem with the languages so called CJK (Chinese, Japanese, Korean. Or often CJKV including Vietnamese). Since the characters of those languages are unified and given the same code point, it is impossible to display a bare Unicode code point in an inspector or such tools. To utilize the extra available bits, we use them for identifying the languages. Since the old implementation uses the bits to identify the character encoding, the bits are sometimes called "encoding tag" or neutrally "leading char", but the bits rigidly denotes the concept of languages. The other languages can have the language tag if you like. This will help to break the large default font (font set) into separately loadable chunk of fonts. However, it is open to the each native speakers and writers to decide how to define the character equality, since the same Unicode code point may have different language tag thus simple #= comparison may return false. I represent a character by storing its associated ASCII code (extended to 256 codes). My instances are created uniquely, so that all instances of a character ($R, for example) are identical.! I describe the location of one character displayed on the screen. My instances are used to return the results of methods: Paragraph characterBlockAtPoint: aPoint and Paragraph characterBlockForIndex: stringIndex. Any recomposition or movement of a Paragraph can make the information I store stale. text (Text): The text where my character is from stringIndex (Integer): The index of my character in the text, starting from 1 textLine (TextLine): The displayed line my character is on origin (Point): The top-left corner of the area allocated for displaying my character's glyph, in pixels, counting right then down from the top-left corner of the text display area, and starting from 0@0 corner (Point): The bottom-right corner of the area allocated for displaying my character's glyph, in pixels, counting right then down from the top-left corner of the text display area, and starting from 0@0 ! My instances are used to scan text to compute the CharacterBlock for a character specified by its index in the text or its proximity to the cursor location.! My instances hold the state associated with scanning text. My subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms.! A set of characters. Lookups for inclusion are very fast.! CharacterSetComplement is a space efficient implementation of (CharacterSet complement) taking care of WideCharacter (code > 255) However, it will maintain a byteArrayMap for character <= 255 in a cache keeping instance variables: absent contains character that are not in the set (i.e. my complement) byteArrayMapCache cache this information because it has to be used in tight loops where efficiency matters! CharacterSetTest holds tests for CharacterSet! This is the unit test for the class Character. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! A CheckBoxExample is a simple example of how to use CheckBoxes. CheckBoxExample new openWithSpec! A CheckboxModel is a spec model for Checkbox You can also have a look at CheckBoxExample for a full example of how to use them with a group. ! Checkbox/radio - button only.! Checkbox with box button and label with enablement support.! A CheckboxSpec is a spec used to describe a CheckboxButton and a RadionButton! Message dialog containing a drop list for selection of an item.! A ChoseDate is an announcement raised by the CalendarMorph! ChronologyConstants is a SharedPool for the constants used by the Kernel-Chronology classes.! I represent the chunk file format. Right now I know how to parse chunks from a readStream, but not how to write them.! I am a specialization of EllipseMorph that knows enough to remain circular. ! A CircleMorphTest is a subclass of MorphTest. It was first implemented when removing some unused and broken functionality. My fixtures are morph, a CircleMorph and world. ! I am signaled if a new class introduces a circular class hierarchy.! I add a number of facilities to those in ClassDescription: A set of all my subclasses (defined in ClassDescription, but only used here and below) A name by which I can be found in a SystemDictionary A classPool for class variables shared between this class and its metaclass A list of sharedPools which probably should be supplanted by some better mechanism. My instances describe the representation and behavior of objects. I add more comprehensive programming support facilities to the basic attributes of Behavior and the descriptive facilities of ClassDescription. The slot 'subclasses' is a redundant structure. It is never used during execution, but is used by the development system to simplify or speed certain operations. ! A builder to build the API Help for a class Instance Variables addMethods: addSubclasses: subclassesAsSeparateTopic: addMethods - When true the builder will include method help addSubclasses - When true the builder will recursively go through and add subclasses subclassesAsSeparateTopic - xxxxx ! This announcement will be emitted when a class or a trait is added, using: => Trait >> named: (the notification is done in Trait >> named:uses:category:env:) => Class >> subclass: ! Responsible for creating a new class or changing the format of an existing class (from a class definition in a browser or a fileIn). This includes validating the definition, computing the format of instances, creating or modifying the accompanying Metaclass, setting up the class and metaclass objects themselves, registering the class as a global, recompiling methods, modifying affected subclasses, mutating existing instances to the new format, and more. You typically only need to use or modify this class, or even know how it works, when making fundamental changes to how the Smalltalk system and language works. Implementation notes: ClassBuilder relies on the assumption that it can see ALL subclasses of some class. If there are any existing subclasses of some class, regardless of whether they have instances or not, regardless of whether they are considered obsolete or not, ClassBuilder MUST SEE THEM. ! I represent a mechanism for retrieving class descriptions stored on a file.! A ClassChangeRecorder keeps track of most substantive changes premissible in a project, isolated or not. Structure: inForce a boolean Tells whether these changes are in effect. true for all changeSets in and above the current project. It should be sufficient only to record this for the changeSet as a whole, but this redundancy could help in error recovery. classIsLocal a boolean True if and only if this class is defined in this layer of the project structure. changeTypes an identitySet Summarizes which changes have been made in this class. Values include #comment, #reorganize, #rename, and the four more summarized below. thisName a string Retains the class name for this layer. priorName a string Preserves the prior name. thisComment a text Retains the class comment for this layer. priorComment a text Preserves the prior comment. thisOrganization a classOrganizer Retains the class organization for this layer. priorOrganization a classOrganizer Preserves the prior organization. thisMD a methodDictionary Used to prepare changes for nearly atomic invocation of this layer (see below). priorMD a methodDictionary Preserves the state of an altered class as it exists in the next outer layer of the project structure. methodChanges a dictionary of classChangeRecords Retains all the method changes for this layer. Four of the possible changeTypes are maintained in a mutually exclusive set, analogously to MethodChangeRecords. Here is a simple summary of the relationship between these four changeType symbols and the recording of prior state | prior == nil | prior not nil --------- |---------------------------- |-------------------- add | add | change --------- |---------------------------- |-------------------- remove | addedThenRemoved | remove A classChangeRecorder is notified of changes by the method noteMethodChange: . ClassChangeRecorders are designed to invoke a set of changes relative to the definition of a class in an prior layer. It is important that both invocation and revocation of these changes take place in a nearly atomic fashion so that interdependent changes will be adopted as a whole, and so that only one flush of the method cache should be necessary. A further reason for revocation to be simple is that it may be requested as an attempt to recover from an error in a project that is failing.! I represent the declaration of a class comment in a file. My contents are the class comment to import, and the comment reader is the object who knows the class where to put the class comment. Sending me the message #import makes me install the comment into the class.! A tool to read and browse class comment versions.! This announcement will be emitted when a class or a trait comment changes! I am an acceptor in the case a class definition has been entered. My action is then to compile the definition as a class object! I add a number of facilities to basic Behaviors: Named instance variables Category organization for methods The notion of a name of this class (implemented as subclass responsibility) The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. I am an abstract class, in particular, my facilities are intended for inheritance by two subclasses, Class and Metaclass. The slots 'organization' and 'methodDict' should ONLY be accessed by message in order for things to work during ImageSegment>>discoverActiveClasses (q.v.).! This is the unit test for the class ClassDescription. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! I'm like TextDiffBuilder, but I split the input text by Character >> #separators, instead of new lines. I'm probably ment to create diffs of class definitions.! I'm useful when classes needs to be created during the execution of the test. This avoid polluting your unit tests with dummy and mock classes. A typical usage of it is: TestCase subclass: #YourTest instanceVariableNames: 'classFactory' YourTest>>setUp classFactory := ClassFactoryForTestCase new YourTest>>tearDown classFactory deleteClasses. YourTest>>testIsBehavior | cls | cls := classFactory newClass. self assert: cls isBehavior ! I'm a class to create classes with a category. I'm only used by Tests. I am similar to ClassFactoryForTestCase (i.e., I can be used in place of a ClassFactoryForTestCase), expect that classes may be created on a specific class category.! ClassListExample new openOn: Object ! A ClassMethodBrowser is a simple browser using spec and reusing MethodBrowser to browse classes>>methods>>sourceCode. | cb | cb := ClassMethodBrowser new. cb openWithSpec. cb classes: Smalltalk allClasses.! I represent a modification in a class. ! I am a propagation to subclasses of a modification in a class.! This announcement will be emitted when a class or a trait definition changes: when an inst var or a classVariable is added! I'm a class using two shared pools. ! I am an acceptor in the "weird" context when the text entered could be a class definition or a method definition.! A ClassOrganization is a new implementation of ClassOrganizer with - cleaner API - better object management - better categorization This object is in charge of system notifications. It manages the class comment, the class comment stamp and a protocol organizer! I represent the declaration of a class organization in a file. My contents is the class organization string to import, and the class organizer is the one of the changed class. Sending me the message #import makes me install the class organization I carry into the class.! I represent method categorization information for classes. The handling of class comments has gone through a tortuous evolution. Grandfathered class comments (before late aug 98) have no time stamps, and historically, fileouts of class comments always substituted the timestamp reflecting the author and date/time at the moment of fileout; and historically any timestamps in a filed out class comment were dropped on the floor, with the author & time prevailing at the moment of filein being substituted. Such grandfathered comments now go out on fileouts with '' timestamp; class comments created after the 8/98 changes will have their correct timestamps preserved, though there is not yet a decent ui for reading those stamps other than filing out and looking at the file; nor is there yet any ui for browsing and recovering past versions of such comments. Everything in good time!!! This announcement will be raised when: - we set a category to a class (see 'Class >>category:') - we set a category to a Trait (see Trait>>category:) It corresponds to the RecategorizedEvent! the annoucement will be emitted when removing a class or a trait using: => removeFromSystem! the annoucement will be emitted when renaming a class or a trait using: => RenameClassRefactoring >> rename:to: => class>>rename: The corresponding event is raised in: SystemDictionary>>renameClass:from:to:! This announcement corresponds to the ReorganizedEvent, which seems to (by looking at the references of ReorganizedEvent) be raised when: - we rename a protocol (see 'renameCategory:toBe: '). if The category is not empty, SystemMethodRecategorizedAnnouncement will also be emitted - we sort (modify the order of) protocols (see 'sortCategories') - we add a protocol (see 'addCategory:before:') - we remove a protocol (see 'removeCategory:' 'removeEmptyCategories')! This class is intended for unit tests of individual classes and their metaclasses. It provides methods to determine the coverage of the unit tests. Subclasses are expected to re-implement #classesToBeTested and #selectorsToBeIgnored. They should also implement to confirm that all methods have been tested. #testCoverage super testCoverage. ! While every class has an associated metaclass, a trait can have an associated classtrait, an instance of me. To preserve metaclass compatibility, the associated classtrait (if there is one) is automatically applied to the metaclass, whenever a trait is applied to a class. Consequently, a trait with an associated classtrait can only be applied to classes, whereas a trait without a classtrait can be applied to both classes and metaclasses.! ClassTreeExample new openOn: Object ! The Clipboard class is the abstract superclass for the concrete platform specific clipboard. The legacy clipboard support using the VM supplied primitives is implemented by Clipboard/ExternalClipboard. The Clipboard implements a basic buffering scheme for text. The currently selected text is also exported to the OS so that text can be copied from and to other applications. Commonly only a single instance is used (the default clipboard) but applications are free to use other than the default clipboard if necessary.! A modified canvas which clips all drawing commands.! I display code annotations that can be embedded in a browser (basic core image browser) to show useful informations about the current method or class. In order to show me in your browser, the "show annotation pane" setting must be set to true (search for 'annotation' in the setting browser). This setting is set to false by default. The informations to show are given by CodeHolder>>annotation. A methods annotation is built according to a list of requests which consists in a list of symbols. These symbols are interpreted by CodeHolder>>#annotationForSelector: ofClass:. See CodeHolder class >>#annotationRequests for more details about this list of requests. By default, the author, the time stamp, the message category, the senders and implementors count and the list of change sets in which the method is referenced are shown. Because the building of an annotation can be very time consuming (especially the implementors count),an annotation is built in background. So, I am also a good example of how a process can be used in order to build some data in background. Instance Variables codeHolder: process: codeHolder - The CodeHolder (a Browser, a MessageList ..) in which I'm embedded process - The process which is building the annotation in background COTDC - A.Plantec! A CodeCriticBrowser is a UI made to browse code critics refactor! I'm the abstract superclass of all the code declarations that should exist in an exported file.! An ancestor class for all models which can show code. Eventually, much of the code that currently resides in StringHolder which only applies to code-holding StringHolders might get moved down here.! I'm an object in charge of import source files. I know a format object that knows how to parse the files, and I import the parsed results into the image. I handle doIts normally, but some special cases like class organization, class comment or methods are handled via a double dispatch (See my method extensions for that). =-=-=- How to use me -=-=-= If you want to fileIn the code -aka compile/evaluate it: CodeImporter evaluateReadStream: '2+2!!' readStream. or CodeImporter evaluateString: '2+2!!' or CodeImporter evaluateFileNamed: 'something.st' or CodeImporter evaluateFileStream: (FileStream readOnlyFileNamed: 'something.st') Now, you can also generate a model of code declarations inside a file by just creating an instance: CodeImporter fileStream: (FileStream readOnlyFileNamed: 'something.st'). And then query me sending the message #codeDeclarations Instances of me can be created through #fromString: #readStream: #fileNamed: #fileStream:! I am an acceptor in the context of code rewriting using RBTreeRewriting! I am a lint rule for Code Rewrinting! I am a visitor that collects objects from the nodes I visit. I take a block similar to those passed to Collection>>collect:. I evaluate the block with DirectoryEntries for the nodes I visit, and collect the objects answered into an array. I can use any guide, and the objects in the array I produce will reflect the order imposed by the guide.! I am the abstract superclass of all classes that represent a group of elements.! For a collection of collections, enumerate all elements of the cartesian product. The code shows how recursion is used to implement variable nesting of loops. The cartesian product is usually a huge collection, that should not be kept in memory. Therefore the user of the class has to provide a block with one argument that is called each time a tuple is constructed. When possible, that block should not build a collection of all these tuples, but should immediately drop unsuitable tuples. To get a first impression, try this with 'inspect it': | result | result := OrderedCollection new. CollectionCombinator new forArrays: (OrderedCollection with: #(#a #b #c) with: #(1 2 3 4 5) with: #('v' 'w' 'x' 'y' 'z') with: #('one' 'two' 'three') ) processWith: [:item |result addLast: item]. result ! I am CollectionIsEmpty, an exception indicating that an operation was attempted on an empty collection where that does not make sense. I am an Error and thus an Exception. The collection that is empty is in my inherited signaler instance variable. ! I'm the root of the hierarchy of the collection tests. ! A CollectionValueHolder is s a value holder designed for collections! This package only makes extensions to existing collection classes by adding the arithmetic protocols. Such protocols allow one to perform in particular vector-operations on collection! This class represents abstract color, regardless of the depth of bitmap it will be shown in. At the very last moment a Color is converted to a pixelValue that depends on the depth of the actual Bitmap inside the Form it will be used with. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. (See comment in BitBlt.) To change the depth of the Display and set how many colors you can see, execute: (Display newDepth: 8). (See comment in DisplayMedium) Color is represented as the amount of light in red, green, and blue. White is (1.0, 1.0, 1.0) and black is (0, 0, 0). Pure red is (1.0, 0, 0). These colors are "additive". Think of Color's instance variables as: r amount of red, a Float between 0.0 and 1.0. g amount of green, a Float between 0.0 and 1.0. b amount of blue, a Float between 0.0 and 1.0. (But, in fact, the three are encoded as values from 0 to 1023 and combined in a single integer, rgb. The user does not need to know this.) Many colors are named. You find a color by name by sending a message to class Color, for example (Color lightBlue). Also, (Color red: 0.2 green: 0.6 blue: 1.0) or (Color r: 0.2 g: 0.6 b: 1.0) creates a color. (see below) A color is essentially immutable. Once you set red, green, and blue, you cannot change them. Instead, create a new Color and use it. Applications such as contour maps and bar graphs will want to display one of a set of shades based on a number. Convert the range of this number to an integer from 1 to N. Then call (Color green lightShades: N) to get an Array of colors from white to green. Use the Array messages at:, atPin:, or atWrap: to pull out the correct color from the array. atPin: gives the first (or last) color if the index is out of range. atWrap: wraps around to the other end if the index is out of range. Here are some fun things to run in when your screen has color: Pen new mandala: 30 diameter: Display height-100. Pen new web "Draw with the mouse, opt-click to end" Display fillWhite. Pen new hilberts: 5. Form toothpaste: 30 "Draw with mouse, opt-click to end" You might also want to try the comment in Form>class>examples>tinyText... Messages: mixed: proportion with: aColor Answer this color mixed with the given color additively. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. + add two colors - subtract two colors * multiply the values of r, g, b by a number or an Array of factors. ((Color named: #white) * 0.3) gives a darkish gray. (aColor * #(0 0 0.9)) gives a color with slightly less blue. / divide a color by a factor or an array of three factors. errorForDepth: d How close the nearest color at this depth is to this abstract color. Sum of the squares of the RGB differences, square rooted and normalized to 1.0. Multiply by 100 to get percent. hue Returns the hue of the color. On a wheel from 0 to 360 with pure red at 0 and again at 360. saturation Returns the saturation of the color. 0.0 to 1.0 brightness Returns the brightness of the color. 0.0 to 1.0 name Look to see if this Color has a name. display Show a swatch of this color tracking the cursor. lightShades: thisMany An array of thisMany colors from white to the receiver. darkShades: thisMany An array of thisMany colors from black to the receiver. Array is of length num. mix: color2 shades: thisMany An array of thisMany colors from the receiver to color2. wheel: thisMany An array of thisMany colors around the color wheel starting and ending at the receiver. pixelValueForDepth: d Returns the bits that appear be in a Bitmap of this depth for this color. Represents the nearest available color at this depth. Normal users do not need to know which pixelValue is used for which color. Messages to Class Color. red: r green: g blue: b Return a color with the given r, g, and b components. r: g: b: Same as above, for fast typing. hue: h saturation: s brightness: b Create a color with the given hue, saturation, and brightness. pink blue red ... Many colors have messages that return an instance of Color. canUnderstand: #brown Returns true if #brown is a defined color. names An OrderedCollection of the names of the colors. named: #notAllThatGray put: aColor Add a new color to the list and create an access message and a class variable for it. fromUser Shows the palette of colors available at this display depth. Click anywhere to return the color you clicked on. hotColdShades: thisMany An array of thisMany colors showing temperature from blue to red to white hot. stdColorsForDepth: d An Array of colors available at this depth. For 16 bit and 32 bits, returns a ColorGenerator. It responds to at: with a Color for that index, simulating a very big Array. colorFromPixelValue: value depth: d Returns a Color whose bit pattern (inside a Bitmap) at this depth is the number specified. Normal users do not need to use this. (See also comments in these classes: Form, Bitmap, BitBlt, Pattern, MaskedForm.)! I'm a Announcement used to indicate a color has changed. Example: (ColorSelectorDialogWindow new title: 'Choose a color'; open; announcer) on: ColorChanged do: [:ann| UIManager inform: 'Selected color: ', ann newColor asString].! ColorPresenter that opens a colour selector when clicked.! Simple fillstyle that draws a color at the specified origin with option extent.! ColorForm is a normal Form plus a color map of up to 2^depth Colors. Typically, one reserves one entry in the color map for transparent. This allows 1, 3, 15, or 255 non-transparent colors in ColorForms of depths 1, 2, 4, and 8 bits per pixel. ColorForms don't support depths greater than 8 bits because that would require excessively large color maps with little real benefit, since 16-bit and 32-bit depths already support thousands and millions of colors. ColorForms have several uses: 1) Precise colors. You can have up to 256 true colors, instead being limited to the 8-bit color palette. 2) Easy transparency. Just store (Color transparent) at the desired position in the color map. 3) Cheap color remapping by changing the color map. A color map is an Array of up to 2^depth Color objects. A Bitmap colorMap is automatically computed and cached for rapid display. Note that if you change the color map, you must resubmit it via the colors: method to flush this cache. ColorForms can be a bit tricky. Note that: a) When you BitBlt from one ColorForm to another, you must remember to copy the color map of the source ColorForm to the destination ColorForm. b) A ColorForm's color map is an array of depth-independent Color objects. BitBlt requires a BitMap of actual pixel values, adjusted to the destination depth. These are different things!! ColorForms automatically maintain a cache of the BitBlt-style color map corresponding to the colors array for the last depth on which the ColorForm was displayed, so there should be little need for clients to work with BitBlt-style color maps. c) The default map for 8 bit depth has black in the first entry, not transparent. Say (cform colors at: 1 put: Color transparent). ! I'm a transformation of pixel values. I apply up to four masks and shits to compute the transformed pixel value. I'm used when applying a BitBlt transfer, whenever pixels from a source to a destination have diferent depths. For further information refer to BitBlt class comments. To see me in action evaluate: BitBlt exampleColorMap! I'm an abstract class which introduce a filter between a drawing request and the final output, handled by #mapColor: For each potential pixel operation like: source -> op -> output it introducing a color mapping stage: source -> op -> mapping -> output Then #mapColor: can be redefined in subclasses to implement more specific behavior. For example: - ShadowDrawingCanvas will replace the rendered color with the color of shadow (if not transparent). - AlphaBlendingCanvas will add or intensify alpha of rendered color. For an easy to understand example see #drawPolygon:color:borderWidth:borderColor:! Displays a colour with alpha against a white, hatched and black background.! Standard dialog for selecting a colour by HSVA colour selector, picking from the screen or editing of values.! Compositions classVar is a: combined instVar is a ! The CommandLineArguments represents the arguments passed to the image. In the following case, $PHARO_VM myImage.image --foo bar `CommandLineArguments default` contains {'--foo'. 'bar'}.! That class tests the API given by AbstractUserInput. Since that class is obviously abstract, it can't be instantiated, the tests are running on CommandLine (which inherits from AbstractUserInput)! A CommandLineHandler is activated by the CommandLine. The responsible handler with the highest priority is selected and its instance-side method #activate is invoked. By default the handlers are selected by their class name. In the following shell invocation the FooHandler is chosen: pharo Pharo.image FooHandler A handler may provide a short name with the class-side #commandName method. If the FooHandler defined #commandName returning 'foo' it would be activated with the following shell invocation: pharo Pharo.image foo For more sophisticated handler selection the CommandLineHandler should implement the #isResponsibleFor: class-side method. An instance of the current command line options is passed to this method which should then return a boolean. Between all the responsible handlers the one with the highes #priority is chosen. To change the priority overwrite the class-side accessor. ! I am command line test runner. I run a TestSuite and outpout the progress in a terminal friendly way.! The compilationContext holds all information that is needed in the whole compiler chain. ! My instances are methods suitable for interpretation by the virtual machine. This is the only class in the system whose instances intermix both indexable pointer fields and indexable integer fields. The current format of a CompiledMethod is as follows: header (4 bytes) literals (4 bytes each) bytecodes (variable) trailer (variable) The header is a 30-bit integer with the following format: (index 0) 9 bits: main part of primitive number (#primitive) (index 9) 8 bits: number of literals (#numLiterals) (index 17) 1 bit: whether a large frame size is needed (#frameSize) (index 18) 6 bits: number of temporary variables (#numTemps) (index 24) 4 bits: number of arguments to the method (#numArgs) (index 28) 1 bit: high-bit of primitive number (#primitive) (index 29) 1 bit: flag bit, ignored by the VM (#flag) The trailer has two variant formats. In the first variant, the last byte is at least 252 and the last four bytes represent a source pointer into one of the sources files (see #sourcePointer). In the second variant, the last byte is less than 252, and the last several bytes are a compressed version of the names of the method's temporary variables. The number of bytes used for this purpose is the value of the last byte in the method. ! I am a special layout version for CompiledMethods. Unlike default Object layouts, CompiledMethods define a custom format integer since they mix bytes and pointer types. See CompiledMethod for more details.! This is the unit test for the class CompiledMethod. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! I am responsible for encoding and decoding various kinds of compiled method trailer data. I should not expose any binary data outside of myself, so all tools which working with compiled methods should ask me to encode the meta-data, they want to be added to the compiled method trailer, as well as retrieve it. To add a new kind of trailer, you should give it a proper name and define it in the #trailerKinds method at my class side. Then you need to implement a corresponding #encode and #decode methods at instance side. Then add any public accessor methods, which will use a newly introduced trailer kind for communicating with outer layer(s). An encodeXXX methods should store result (byte array) into encodedData instance variable. A decodeXXX methods should read the data from compiled method instance, held by 'method' ivar, and always set 'size' ivar (denoting a total length of trailer in compiled method) and optionally 'data' ivar which should keep a decoded data, ready to be used by outer layer(s) using accessor method(s) you providing. The kind of compiled method trailer is determined by the last byte of compiled method. The byte format used is following: "2rkkkkkkdd" where 'k' bits stands for 'kind' , allowing totally 64 different kinds of method trailer and 'd' bits is data. Following is the list of currently defined trailer kinds: NoTrailer , k = 000000, dd unused method has no trailer, and total trailer size bytes is always 1 ClearedTrailer, k = 000001, method has cleared trailer (it was set to something else, but then cleared) dd+1 determines the number of bytes for size field, and size is a total length of trailer bytes So a total length of trailer is: 1 + (dd + 1) + size TempsNamesQCompress, k = 000010 the trailer contains a list of method temp names, compressed using qCompress: method. dd+1 determines the number of bytes for size field, and size is a number of bytes of compressed buffer. So a total length of trailer is: 1 + (dd + 1) + size TempsNamesZip, k = 000011 the trailer contains a list of method temp names, compressed using GZIP compression method. dd+1 determines the number of bytes for size field, and size is a number of bytes of compressed buffer So a total length of trailer is: 1 + (dd + 1) + size SourceBySelector, k = 000100 the trailer indicates , that method source is determined by a class + selector where it is installed to. Trailer size = 1. SourceByStringIdentifier, k = 000101 the trailer indicates , that method source is determined by a class + some ByteString identifier. dd+1 determines the number of bytes for size of ByteString identifier, and size is number of bytes of string. A total length of trailer is: 1 + (dd + 1) + size EmbeddedSourceQCompress, k = 000110 the trailer contains an utf-8 encoded method source code, compressed using qCompress method dd+1 determines the number of bytes for size field, and size is a number of bytes of compressed source code A total length of trailer is: 1 + (dd + 1) + size EmbeddedSourceZip, k = 000111 the trailer contains an utf-8 encoded method source code, comressed using GZIP dd+1 determines the number of bytes for size field, and size is a number of bytes of compressed buffer A total length of trailer is: 1 + (dd + 1) + size VarLengthSourcePointer, k = 001000 the trailer is variable-length encoded source pointer. dd bits is unused. ExtendedKind, k = 001001 the next byte of trailer (one that prepends the last byte of compiled method) denotes an extended kind of trailer, allowing to use additional 256 kinds of encoding method's trailer in future. SourcePointer, k = 111111 the trailer is encoded source pointer. Total trailer size is 4-bytes (this kind of encoding is backwards compatible with most of existing compiled methods) ! The compiler accepts Smalltalk source code and compiles it with respect to a given class. The user of the compiler supplies a context so that temporary variables are accessible during compilation. If there is an error, a requestor (usually a kind of StringHolderController) is sent the message notify:at:in: so that the error message can be displayed. If there is no error, then the result of compilation is a MethodNode, which is the root of a parse tree whose nodes are kinds of ParseNodes. The parse tree can be sent messages to (1) generate code for a CompiledMethod (this is done for compiling methods or evaluating expressions); (2) pretty-print the code (for formatting); or (3) produce a map from object code back to source code (used by debugger program-counter selection). See also Parser, Encoder, ParseNode.! This test is important since it covers a bug of during the debugging of super binding. It uses the class AverageCost/TotalCost and WeightedAverageCost.! A CompilerNotifyingTest is a TestCase for checking that Compiler/Parser notifications are inserted at the right place in a TextEditor. Instance Variables expectedErrorPositions: expectedErrors: failure: morph: text: errorPositions - the position where error text should be inserted for each chunk of text evaluated errors - the error text that should be inserted on evaluation of each chunk of text evaluated failure - an object returned in case of evaluation error and whose identity can be uniquely recognized as a failure morph - the Morph holding the text text - the string containing all the chunks to be evaluated (separated by %) and the expected error messages (`enclosed in back quotes`) this text will be stripped of the error messages before being evaluated. ! A CompilerSyntaxErrorNotifyingTest is a specialization for testing correct handling of non interactive compiler notification. Non interactive is a very relative notion in Smalltalk... Here it means that user interaction will not happen directly in the TextEditor holding source code, but rather thru a SyntaxError window that will pop-up. This test intercept the Notification before the pop-up is raised. ! CompilerTest is a holder for SUnit test of Compiler! see BorderedMorph. poly := polygon250 baseColor := Color blue twiceLighter. border := (ComplexBorder framed: 10) baseColor: poly color. border frameRectangle: ((100@100 extent: 200@200) insetBy: -5) on: Display getCanvas. baseColor := Color red twiceLighter. border := (ComplexBorder framed: 10) baseColor: baseColor. border drawPolygon: {100@100. 300@100. 300@300. 100@300} on: Display getCanvas. border drawPolyPatchFrom: 100@200 via: 100@100 via: 200@100 to: 200@200 on: Display getCanvas. border drawPolyPatchFrom: 100@100 via: 200@100 via: 200@200 to: 100@200 on: Display getCanvas. border drawPolyPatchFrom: 200@100 via: 200@200 via: 100@200 to: 100@100 on: Display getCanvas. border drawPolyPatchFrom: 200@200 via: 100@200 via: 100@100 to: 200@100 on: Display getCanvas. border := (ComplexBorder raised: 10) baseColor: poly color. border drawPolygon: poly getVertices on: Display getCanvas 360 / 16.0 22.5 points := (0 to: 15) collect:[:i| (Point r: 100 degrees: i*22.5) + 200]. Display getCanvas fillOval: (100@100 extent: 200@200) color: baseColor. border drawPolygon: points on: Display getCanvas. -1 to: points size + 1 do:[:i| border drawPolyPatchFrom: (points atWrap: i) via: (points atWrap: i+1) via: (points atWrap: i+2) to: (points atWrap: i+3) on: Display getCanvas. ]. Display getCanvas fillOval: (100@100 extent: 200@200) color: baseColor. 0 to: 36 do:[:i| border drawLineFrom: (Point r: 100 degrees: i*10) + 200 to: (Point r: 100 degrees: i+1*10) + 200 on: Display getCanvas. ]. drawPolygon: Point r: 1.0 degrees: 10 MessageTally spyOn:[ Display deferUpdates: true. t1 := [1 to: 1000 do:[:i| border drawLineFrom: (100@100) to: (300@100) on: Display getCanvas. border drawLineFrom: (300@100) to: (300@300) on: Display getCanvas. border drawLineFrom: (300@300) to: (100@300) on: Display getCanvas. border drawLineFrom: (100@300) to: (100@100) on: Display getCanvas]] timeToRun. Display deferUpdates: false. ]. MessageTally spyOn:[ Display deferUpdates: true. t2 := [1 to: 1000 do:[:i| border drawLine2From: (100@100) to: (300@100) on: Display getCanvas. border drawLine2From: (300@100) to: (300@300) on: Display getCanvas. border drawLine2From: (300@300) to: (100@300) on: Display getCanvas. border drawLine2From: (100@300) to: (100@100) on: Display getCanvas]] timeToRun. Display deferUpdates: false. ]. ! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! Morph with an inset border by default and theme access.! A ComposableSpec is a spec used to combine other specs! Border supporting multiple "sub-borders".! Fillstyle supporting compositing of multiple sub-fillstyles.! A composite transform provides the effect of several levels of coordinate transformations.! CompositionScanners are used to measure text and determine where line breaks and space padding should occur.! Text converter for X Compound Text.! This represents the state of CompoundTextConverter.! This class represents a very compact representation of a boundary shape. It consists of a number of compressed arrays that can be handled by the balloon engine directly. Due to this, there are certain restrictions (see below). Boundaries are always represented by three subsequent points that define a quadratic bezier segment. It is recommended that for straight line segments the control point is set either to the previous or the next point. Instance variables: points Point storage area leftFills Containing the "left" fill index of each segment rightFills Containing the "right" fill index of each segment lineWidths Containing the line width of each segment lineFills Containing the line fill (e.g., line color) of each segment fillStyles Contains the actual fill styles referenced by the indexes RESTRICTIONS: None of the ShortRunArrays may contain a run of length Zero. Also, due to the use of ShortRunArrays a) you cannot have more than 32768 different fill styles b) you cannot have a line width that exceeds 32768 In case you have trouble with a), try to merge some of the fills into one. You might do so by converting colors to 32bit pixel values. In case you have trouble with b) you might change the general resolution of the compressed shape to have less accuracy. ! Usage: config [--help] [] [--install[=]] [--group=] [--username=] [--password=] --help show this help message A Monticello repository name A valid Metacello Configuration name A valid version for the given configuration A valid Metacello group name An optional username to access the configuration's repository An optional password to access the configuration's repository Examples: # display this help message pharo Pharo.image config # list all configurations of a repository pharo Pharo.image config $MC_REPOS_URL # list all the available versions of a confgurtation pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo # install the stable version pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install #install a specific version '1.5' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 #install a specific version '1.5' and only a specific group 'Tests' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 --group=Tests ! Probably to be removed to use metacello toolbox! I'm the configuration of project NodeNavigation! I'm the configuration of SmartSuggestions project. ! Signals a prematurely closed connection. ! A ConnectionQueue listens on a given port number and collects a queue of client connections. In order to handle state changes quickly, a ConnectionQueue has its own process that: (a) tries to keep a socket listening on the port whenever the queue isn't already full of connections and (b) prunes stale connections out of the queue to make room for fresh ones. ! Signals that a connection to the specified host and port was refused. host host which refused the connection port prot to which the connection was refused ! Signals that a connection attempt timed out. ! To the instruction parsing ability of InstructionStream I add the actual semantics for execution. The execution state is stored in the indexable fields of my subclasses. This includes temporary variables and a stack of values used in evaluating expressions. The actual semantics of execution can be found in my category "system simulation" and "instruction decode". These methods exactly parallel the operation of the Smalltalk machine itself. The simulator is a group of my methods that do what the Smalltalk interpreter does: execute Smalltalk bytecodes. By adding code to the simulator, you may take statistics on the running of Smalltalk methods. For example, Transcript show: (ContextPart runSimulated: [3 factorial]) printString. --------------------- A mechanism for registering a custom primitive simulators added. To register own simulator use: #simulatePrimitiveNumber: num with: simulator for numbered primitives , and #simulatePrimitive: primName module: moduleName with: simulator for named primitives. During (re)initialization, a ContextPart class sends a #registerPrimitiveSimulators to all classes in system, which implementing it (but not to implementor's subclasses). This can be used to make sure that your custom simulator is present. Hence, it is recommended to place registration code in #registerPrimitiveSimulators implementation for one of your classes. In order to make sure that simulator(s) registered during package loading, make sure that one of your classes registering them (via class initialization mechanism). A simulator can be any object which implements the: #simulatePrimitiveFor:receiver:arguments:context: and should simulate the invocation of corresponding primitive. If simulated primitive fails, a simulator should answer PrimitiveFailToken. If primitive succeeds, it should answer a primitive return value. ! I am an eye element for temporaries in context! I represent a query path into the internal representation of a ContextPart. Typically this is a context at a point in the query path of a Debugger. As a StringHolder, the string I represent is the value of the currently selected variable of the observed temporary variable of the context.! I permit to save the execution flow and to restart it later. I was originally used in seaside. Example : You have an object with the instance variable executionFlow. You save the current execution flow with : Continuation currentDo: [ :cc | executionFlow := cc] You restart the execution flow with : executionFlow value: true ! I represent intentend to provide complete coverage for the Continuation class.! Specially themed "control" button. Used for drop-lists, expanders etc.! A Cookie is a simple object which kept a value during a defined amount of time.! I create a copy of the directory tree that I visit. I use the PreorderGuide so that I can create directories before creating their contents. ! I am the superclass of a hierarchy of morph specialized in allowing the user to resize windows.! This class is a quick hack to support rounded corners in morphic. Rather than produce rounded rectangles, it tweaks the display of corners. Rather than work for any radius, it only supports a radius of 6. Rather than work for any border width, it only supports widths 0, 1 and 2. The corners, while apparently transparent, still behave opaquely to mouse clicks. Worse than this, the approach relies on the ability to extract underlying bits from the canvas prior to display. This ran afoul of top-down display, it seems, in SystemWindow spawnReframeHandle: (qv). It will also make a postscript printer very unhappy. But, hey, it's cute.! I am a browser for the SmallLint Critics Example: | rule environment | rule := RBExcessiveArgumentsRule new. environment := (RBPackageEnvironment new packages: {RPackageSet named: 'Manifest-Core'}). (CriticBrowser openOnRule: rule onEnvironment: environment) ! I'am a toolbar for the SmallLint Critics Instance Variables browseModel: criticHolder: falsepositiveModel: ruleHolder: transformModel: browseModel - xxxxx criticHolder - xxxxx falsepositiveModel - xxxxx ruleHolder - xxxxx transformModel - xxxxx ! A CriticWorkspace holds the current worspace for the CriticBrowser. It's composed of the set of rules to check (as a composite rule) and the environment to work in.! I am a cache for the critics and false positives critics Instance Variables browser: checker: critics: falsePositiveClasses: falsePositiveRules: falsePositives: packages: toDos: browser - xxxxx checker - xxxxx critics - xxxxx falsePositiveClasses - xxxxx falsePositiveRules - xxxxx falsePositives - xxxxx packages - xxxxx toDos - xxxxx ! I am a segment between to points. In the form of a cubic polynomial that can be evaluated between 0..1 to obtain the end points and intermediate values. ! I am a Form that is a possible appearance for a mouse cursor. My size is always 16x16, ever since the original implementation on the Alto. There are many examples available in the "current cursor" category of class methods. For example, "Cursor normal" and "Cursor wait". For example: Cursor wait show ! A 32-bit ARGB Cursor of arbitrary extent (some platforms may limit the size). Compositing assumes alpha is pre-multiplied.! A Cursor which additionally has a 16x16 transparency bitmap called a "mask". See the comment of beCursorWithMask: for details on how the mask is treated.! This is really only a shell for creating Shapes with smooth outlines.! This is a common superclass for custom help. Subclasses of this class are automatically included into the system help. By default the informations provided on the receiver class are converted into help topics by a specific builder - here the CustomHelpHelpBuilder. Note that you can provide an own custom builder by overriding the #builder method ! This builder builds help topics from a help topic description (which is typically stored in a class). The help topic description object has to understand the following messages: #bookName - should return the name of the help book #icon - should return the icon of the help book #key - should return a unique key to identify the book #pages - should return an array of method selectors to call to get the books pages ! QuestionDialog supporting custom text/buttons for yes/no choices.! Border style supporting dashed lines of configurable patterns and colours.! Instances of Date are Timespans with duration of 1 day. Their default creation assumes a start of midnight in the local time zone.! I represent a point in UTC time as defined by ISO 8601. I have zero duration. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. ALways positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is almost always zero but it defined for full ISO compliance and is suitable for timestamping. ! I represent one of several Sunit test Cases intentended to provide complete coverage for the Chronology set of classes as part of the external testing. The other Chronology sunit test cases are: DateTestCase DateAndTimeLeapTestCase, DurationTestCase, ScheduleTestCase TimeStampTestCase TimespanDoTestCase, TimespanDoSpanAYearTestCase, TimespanTestCase, YearMonthWeekTestCase. These tests attempt to exercise all public and private methods. Except, they do not explicitly depreciated methods. tlk My fixtures are: aDateAndTime = January 01, 1901 midnight (the start of the Squeak epoch) with localTimeZone = Grenwhich Meridian (local offset = 0 hours) aDuration = 1 day, 2 hours, 3, minutes, 4 seconds and 5 nano seconds. aTimeZone = 'Epoch Test Time Zone', 'ETZ' , offset: 12 hours, 15 minutes. ! I represent one of several Sunit test Cases intentended to provide complete coverage for the Chronology set of classes as part of the external testing. tlk. My fixtures are: aDateAndTime = February 29, 2004 1:33 PM with offset: 2 hours aDuration = 15 days, 14 hours, 13 minutes, 12 seconds and 11 nano seconds. aTimeZone = Grenwhich Meridian (local offset = 0 hours) ! A DateAndTimeTest is xxxxxxxxx. Instance creation from strings and streams: if no offset is specified, the local offset is used. Instance Variables ! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! I am a helper object used for validating formatted Date strings. ! This is the unit test for the class Date. ! A DebugContext is a helper that complements DebugSession. It is meant to be created dynamically on a context when the session wants to access the provided services. To create instances first call forContext: to set the current context, and then if the interrupted is different use topContext: Not sure if it is still a good idea to have this class. Instance Variables context: method: methodNode: ranges: topContext: context - xxxxx method - xxxxx methodNode - xxxxx ranges - xxxxx topContext - xxxxx ! A DebugSession models a debuggeing session. It contains the interrupted context and process. Its main goal is to handle debugger actions such as restart or stepInto, as well as recomplilation of methods. It is the model used as an input to a ui. As it is just a model it does now contain any information related to the ui. For example, it does not know what a selection in the ui is. It is the job on the ui to maintain the selection and call this session with the propper context. To create sessions use the mehod 'process: aProcess context: aContext'. aContext must be a context belonging to aProcess, and aProcess must be an interrupted process. Instance Variables context: errorWasInUIProcess: process: context - xxxxx errorWasInUIProcess - xxxxx process - xxxxx ! I represent the machine state at the time of an interrupted process. I also represent a query path into the state of the process. The debugger is typically viewed through a window that views the stack of suspended contexts, the code for, and execution point in, the currently selected message, and inspectors on both the receiver of the currently selected message, and the variables in the current context. Special note on recursive errors: Some errors affect Squeak's ability to present a debugger. This is normally an unrecoverable situation. However, if such an error occurs in an isolation layer, Squeak will attempt to exit from the isolation layer and then present a debugger. Here is the chain of events in such a recovery. * A recursive error is detected. * The current project is queried for an isolationHead * Changes in the isolationHead are revoked * The parent project of isolated project is returned to * The debugger is opened there and execution resumes. If the user closes that debugger, execution continues in the outer project and layer. If, after repairing some damage, the user proceeds from the debugger, then the isolationHead is re-invoked, the failed project is re-entered, and execution resumes in that world. ! I am a place-holder for information needed by the Debugger to inspect method activations. I insulate the debugger from details of code generation such as exact bytecode offsets and temporary variable locations. My function is to abstract the source map away from actual bytecode pcs to abstract bytecode pcs. To reduce compilation time I try and defer as much computation to access time as possible as instances of me will be created after each compilation. I maintain a WeakIdentityDictionary of method to DebuggerMethodMap to cache maps. I refer to my method through a WeakArray to keep the map cache functional. If the reference from a DebuggerMethodMap to its method were strong then the method would never be dropped from the cache because the reference from its map would keep it alive.! I provide helper methods deadling with -> pc to text mapping -> temporary variables for contexts -> reading and setting tempary variables All methods here should be moved to MethodContext.! I decompile a method in three phases: Reverser: postfix byte codes -> prefix symbolic codes (nodes and atoms) Parser: prefix symbolic codes -> node tree (same as the compiler) Printer: node tree -> text (done by the nodes) instance vars: constructor an auxiliary knowing how to generate Abstract Syntax Tree (node tree) method the method being decompiled instVars the instance variables of the class implementing method tempVars hold the names of temporary variables (if known) NOTE: POLYMORPHISM WILL BE RESOLVED IN #initSymbols: constTable parse node associated with byte encoded constants (nil true false 0 1 -1 etc...) stack multipurpose... statements the statements of the method being decompiled lastPc exit caseExits - stack of exit addresses that have been seen in the branches of caseOf:'s lastJumpPc lastReturnPc limit hasValue blockStackBase numLocaltemps - number of temps local to a block; also a flag indicating decompiling a block blockStartsToTempVars tempVarCount number of temp vars used by the method lastJumpIfPcStack the value of program counter just before the last encountered conditional jumps! I construct the node tree for a Decompiler.! DeepCopier does a veryDeepCopy. It is a complete tree copy using a dictionary. Any object that is in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy. See Object|veryDeepCopy which calls (self veryDeepCopyWith: aDeepCopier). When a tree of morphs points at a morph outside of itself, that morph should not be copied. Use our own kind of weak pointers for the 'potentially outside' morphs. Default is that any new class will have all of its fields deeply copied. If a field needs to be weakly copied, define veryDeepInner: and veryDeepFixupWith:. veryDeepInner: has the loop that actually copies the fields. If a class defines its own copy of veryDeepInner: (to leave some fields out), then veryDeepFixupWith: will be called on that object at the end. veryDeepInner: can compute an alternate object to put in a field. (Object veryDeepCopyWith: discovers which superclasses did not define veryDeepInner:, and very deeply copies the variables defined in those classes). To decide if a class needs veryDeepInner: and veryDeepFixupWith:, ask this about an instance: If I duplicate this object, does that mean that I also want to make duplicates of the things it holds onto? If yes, (i.e. a Paragraph does want a new copy of its Text) then do nothing. If no, (i.e. an undo command does not want to copy the objects it acts upon), then define veryDeepInner: and veryDeepFixupWith:. Here is an analysis for the specific case of a morph being held by another morph. Does field X contain a morph (or a Player whose costume is a morph)? If not, no action needed. Is the morph in field X already a submorph of the object? Is it down lower in the submorph tree? If so, no action needed. Could the morph in field X every appear on the screen (be a submorph of some other morph)? If not, no action needed. If it could, you must write the methods veryDeepFixupWith: and veryDeepInner:, and in them, refrain from sending veryDeepCopyWith: to the contents of field X. ----- Things Ted is still considering ----- Rule: If a morph stores a uniClass class (Player 57) as an object in a field, the new uniClass will not be stored there. Each uniClass instance does have a new class created for it. (fix this by putting the old class in references and allow lookup? Wrong if encounter it before seeing an instance?) Rule: If object A has object C in a field, and A says (^ C) for the copy, but object B has A in a normal field and it gets deepCopied, and A in encountered first, then there will be two copies of C. (just be aware of it) Dependents are now fixed up. Suppose a model has a dependent view. In the DependentFields dictionary, model -> (view ...). If only the model is copied, no dependents are created (no one knows about the new model). If only the view is copied, it is inserted into DependentFields on the right side. model -> (view copiedView ...). If both are copied, the new model has the new view as its dependent. If additional things depend on a model that is copied, the caller must add them to its dependents. ! An alternative default handler that uses the file-list services to process files. ! I am a TreeNode used to render TreeModel node using the old API for convenience! I'm the base class for "stream compressor". For example, my subclass GZipWriteStream can compress a stream contents using gzip algorithm. Try: gzData := String streamContents: [:aStream| (GZipWriteStream on: aStream) nextPutAll: 'Some data to be gzipped'; close. ]. Transcript show: gzData; cr; show: (GZipReadStream on: gzData) upToEnd; cr. See InflateStream! I am the main way that a process may pause for some amount of time. The simplest usage is like this: (Delay forSeconds: 5) wait. An instance of Delay responds to the message 'wait' by suspending the caller's process for a certain amount of time. The duration of the pause is specified when the Delay is created with the message forMilliseconds: or forSeconds:. A Delay can be used again when the current wait has finished. For example, a clock process might repeatedly wait on a one-second Delay. The maximum delay is (SmallInteger maxVal // 2) milliseconds, or about six days. A delay in progress when an image snapshot is saved is resumed when the snapshot is re-started. Delays work across millisecond clock roll-overs. For a more complex example, see #testDelayOf:for:rect: . A word of advice: This is THE highest priority code which is run in Pharo, in other words it is time-critical. The speed of this code is critical for accurate responses, it is critical for network services, it affects every last part of the system. In short: Don't fix it if it ain't broken!! This code isn't supposed to be beautiful, it's supposed to be fast!! The reason for duplicating code is to make it fast. The reason for not using ifNil:[]ifNotNil:[] is that the compiler may not inline those. Since the effect of changes are VERY hard to predict it is best to leave things as they are for now unless there is an actual need to change anything! DelayWaitTimeout is a special kind of Delay used in waitTimeoutMSecs: to avoid signaling the underlying semaphore when the wait times out.! I delete the directory tree that I visit. I use the PostorderGuide so that I can delete files before deleting their containing directories.! Dialog window displaying a message with a single OK button. Escape/return will close. Icon is a themed lock icon.! Act as an array of (weak) dependents of some object. When dependents are reclaimed, they are replaced by an UndefinedObject in the DependentsArray. This is why instances of this class will take care to iterate only on non nil elements. These nil also cause loops written as (1 to: self size do: [:i | (self at: i) doSomething]) to be inefficient. This is because #size and #at: both require scanning for nils. For this reason, DependentsArray though sequenceable, is not a subclass of SequenceableCollection.! This Warning is signalled by methods which are deprecated. The use of Object>>#deprecatedExplanation: aString and Object>>#deprecated: aBlock explanation: aString is recommended. Idiom: Imagine I want to deprecate the message #foo. foo ^ 'foo' I can replace it with: foo self deprecatedExplanation: 'The method #foo was not good. Use Bar>>newFoo instead.' ^ 'foo' Or, for certain cases such as when #foo implements a primitive, #foo can be renamed to #fooDeprecated. fooDeprecated ^ foo ^ self deprecated: [self fooDeprecated] explanation: 'The method #foo was not good. Use Bar>>newFoo instead.' ! unselectedItems is the original list to search in selectItems is the list of the selected items! Dialog style window with no window controls (expand, collapse etc). Usually opened modally (the morph that is used to modally open determines the modal scope, use of World implies "system modal"). Designed to be subclassed with content. Supports Escape key for cancel and Enter key for default button.! A DialogWindowModel is a model used to describe a DialogWindow! I represent a set of elements that can be viewed from one of two perspectives: a set of associations, or a container of values that are externally named where the name can be any object that responds to =. The external name is referred to as the key. I inherit many operations from Set.! I provide a custom inspector for classes of type Dictionary. These customizations are tools to interactively manipulate the Dictionary I'm inspecting and they are accessed in the context menu of the currently selected association. The customizations that I provide are as follows: inspect -> Create and schedule an Inspector on my currently selected association copy name -> copy the name of my currently selected association so that it can be pasted somewhere else references -> Create a browser on all references to the association of the current selection objects pointing to this value -> Open a list inspector on all the objects that point to the value of the selected instance variable, if any. senders of this key -> Create a browser on all senders of the selected key refresh view add key rename key remove basic inspect -> Bring up a non-special inspector ! A DictionaryValueHolder is a value holder designed for dictionaries! A DiffChangeRecordConverter is a converter used to show the diff between two methodreferences! My instances are container objects used by TextDiffBuilder for comparison. They hold a string and the precomputed hash of the string to speed up #=. They may reference another DiffElement object which is their pair in the diff. Instance Variables hash: match: string: hash - the hash of string, stored for fast access match - another DiffElement object which has the same string and turned out to be my pair in the longest common subsequence found by a TextDiffBuilder, or nil if I don't a matching DiffElement string - a part of a longer text, typically a line ! My settings allow the user to choose whether different line endings will be shown in diffs, and the colors/emphasis used for added/removed text! This class implements the Digital Signature Algorithm (DSA) of the U.S. government's "Digital Signature Standard" (DSS). The DSA algorithm was proposed in 1991 and became a standard in May 1994. The official description is available as a Federal Information Processing Standards Publication (FIPS PUB 186, May 19, 1994). A companion standard, the Secure Hash Standard, or SHS (FIPS PUB 180-1, April 17, 1995), describes a 160-bit message digest algorithm known as the Secure Hash Algorithm (SHA). This message digest is used to compute the document signature. Here's how to use it: 1. The "signer" creates a pair of keys. One of these must be kept private. The other may be freely distributed. For example, it could be built into the signature checking code of an application. 2. When the signer wishes to sign a packet of data (a "message") , he uses the secure hash algorithm to create a 160-bit message digest (hash) which is used as the input to DSA. The result of this is a pair of large numbers called a "signature" that is attached to the original message. 3. When someone receives a signed message purported to have come from the signer, they compute the 160-bit hash of the message and pass that, along with the message signature and the signer's public key, to the signature verification algorithm. If the signature checks, then it is virtually guaranteed that the message originated from someone who had the signer's private key. That is, the message is not a forgery and has not been modified since it was signed. For example, if the message contains a program, and the recipient trusts the signer, then the recipient can run the program with the assurance that it won't do anything harmful. (At least, not intentionally. A digital signature is no guarantee against bugs!! :->) The signer must keep the private key secure, since anyone who has the private key can forge the signer's signature on any message they like. As long as the secret key is not stolen, cryptographers believe it to be virtually impossible either to forge a signature, to find a message that matches an existing sigature, or to discover the signer's private key by analyzing message signatures. Knowing the public key (which, for example, could be recovered from an application that had it built in), does not weaken the security at all. An excellent reference work on digital signatures and cryptography in general is: Schneier, Bruce "Applied Cryptography: Protocols, Algorithms, and Source Code in C" John Wiley and Sons, 1996. I used this book as a guide to implementing many of the numerical algorithms required by DSA. Patents and Export Restrictions: Many digital signature technologies are patented. DSA is also patented, but the patent is owned by the U.S. government which has made DSA available royalty-free. There is a claim that the government patent infringes on an earlier patent by Schnorr, but the government is requiring the use of DSA, so they apparently believe this claim is not strong enough to be a serious threat to their own patent. Most cryptography technology, including digital signature technology, requires an export license for it to be distributed outside the U.S. Recent legislation may have relaxed the export license requirements, but it would be prudent to check the current regulations before exporting this code.! I am raised when I an operation is attempted inside a directory that does not exist. ! I am raised on an attempt to create a directory that already exists.! I am an abstract superclass for disk store implementations. My subclasses provide access to the actual data storage of a particular kind of filesystem. ! I am a display object which can both paint myself on a medium (displayOn: messages), and can act as a medium myself. My chief subclass is Form.! The abstract protocol for most display primitives that are used by Views for presenting information on the screen.! There is only one instance of me, Display. It is a global and is used to handle general user requests to deal with the whole display screen. Although I offer no protocol, my name provides a way to distinguish this special instance from all other Forms. This is useful, for example, in dealing with saving and restoring the system. To change the depth of your Display... Display newDepth: 16. Display newDepth: 8. Display newDepth: 1. Valid display depths are 1, 2, 4, 8, 16 and 32. It is suggested that you run with your monitors setting the same, for better speed and color fidelity. Note that this can add up to 4Mb for the Display form. Finally, note that newDepth: ends by executing a 'ControlManager restore' which currently terminates the active process, so nothing that follows in the doit will get executed. Depths 1, 2, 4 and 8 bits go through a color map to put color on the screen, but 16 and 32-bit color use the pixel values directly for RGB color (5 and 8 bits per, respectivlely). The color choice an be observed by executing Color fromUser in whatever depth you are using. ! This class represents a base for generic transformations of 2D points between different coordinate systems (including scaling and rotation). The transformations map objects between one coordinate system and another where it is assumed that a nested hierarchy of transformations can be defined. It is assumed that transformations deal with Integer points. All transformations should return Integer coordinates (even though float points may be passed in as argument). Compositions of transformations MUST work in the following order. A 'global' transformation (the argument in #composedWithGlobal:) is defined as a transformation that takes place between the receiver (the 'local') transformation and any 'global' point computations, whereas a 'local' transformation (e.g., the argument in #composedWithLocal:) takes place between the receiver ('global') and any 'local' points. For the transformation methods this means that combining a global and a local transformation will result in the following order: globalPointToLocal: globalPoint "globalPoint -> globalTransform -> localTransform -> locaPoint" ^localTransform globalPointToLocal: (globalTransform globalPointToLocal: globalPoint) localPointToGlobal: localPoint "localPoint -> localTransform -> globalTransform -> globalPoint" ^globalTransform localPointToGlobal: (localTransform localPointToGlobal: localPoint) ! I represent the declaration of some code to evaluate. My contents are the code to evaluate. Sending me the message #import makes me evaluate the code and return the result of the computation. Be careful, my #import method also handles ChangeSet interaction so far, handling Changeset preambles and Postscripts.! I'm a kind of container which adhere to one edge of the screen. See me in action with: DockingBarMorph new addMorph: (SimpleButtonMorph new label: 'Say hello'; target: [UIManager inform: 'Hello']; actionSelector: #value); addMorph: (SimpleButtonMorph new label: 'Say bonjour'; target: [UIManager inform: 'Bonjour']; actionSelector: #value); addMorph: (SimpleButtonMorph new label: 'Close'; target: [DockingBarMorph allInstances last delete]; actionSelector: #value); adhereToBottom; openInWorld.! I am DomainError, an ArithmeticException indicating that some argument falls outside an expected domain, [from, to] When my valid interval is left- or right-open, use signal: creation protocol to provide a custom messageText rather than the default [from, to] notation! DOS stores timestamps, in local time, as 32 bit integers with the following format: 32 bits (low to high): Low 16 bits: Bits 0-4: seconds / 2 Bits 5-10: minutes 0-59 Bits 11-15: hours 0-23 High 16 bits: 16-20: day of month 1-31 21-24: month 1-12 25-31: year offset from 1980 (e.g. 1981 -> 1) References (with visual aids): http://blogs.msdn.com/b/oldnewthing/archive/2003/09/05/54806.aspx & http://mindprod.com/jgloss/zip.html! I model the event produced when a hand drops a (grabbed) morph into another morph. I know the position of the drop, the dropped morph and the hand that produced me. To handle this event a morph should override one of these methods: #acceptDroppingMorph:event: #justDroppedInto:event: Additionaly, a morph can specify if it wants to accept a dropped morph by overriding #wantsDroppedMorph:event:. Symmetrically, the morph being dropped can specify if it wants to be dropped in another morph by overriding #wantsToBeDroppedInto:. Note that for a successful drop operation both parties need to agree. See HandMorph>>dropMorph:event: for an example of usage. ! A DropListExample is a simple example of how to use drop lists. DropListExample new openWithSpec! A DropListItem is an item (wrapper) designed to fit into a DropList! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! Displays a selected item and a drop button. When pressed will popup a list to enable changing of the selection. Supports enablement.! A DropListSpec is a spec to describe a drop list! A DualChangeSorterApplication is a dual change sorter based on spec. DualChangeSorter shares the model between its two subcomponents (ChangeSorterApplication). ChangeSorterModel defines the application logic. ! A DummyComposableModel is a stupid ComposableSpec subclass used to uglyly retrieve the bindings The bindings should be a class side inst var of SpecInterpreter! A DummyEcryptor is an encryptor that just do _NOT_ encrypt at all :)! A DummyEcryptorDecryptor is an encryptor that just do _NOT_ encrypt/decrypt at all :)! A DummyKeyPressedPlugin is a dummy plugin which display the counter of keystrokes! A DummyPackageSelectedPlugin is a dummy plugin which display the counter of keystrokes! This is a dummy sound system registered in SoundService to absorb all sound playing and to use the primitive beep instead of sampled sounds when playing a beep.! I'm an alternative UIManager used to run an the image without GUI. I redefine methods which requires user input as these requests are irrelevant in a headless environment. ! My purpose is to be loaded in the core without breaking anything. Then the real UserManager can be used! I am an error signalled when a variable is redeclared. For instance when a method is created wich has a temporary or argument with the same name as an instance variable.! I represent a duration of time. I have nanosecond precision! A DynamicClassGroup is a group automatically updated whose default granularity is class.! A DynamicComposableModel is a model of spec with a dynamic binding for subwidgets! I am a dynamic eye element, if you are too lazy to create your own subclass of AbstractEyeElement, use it...! A DynamicGroup is a group automatically updated whose default granularity is method.! I am an example of how to fully dynamically create a UI, and also how to dynamically redrawn a widget. ========================== (DynamicSpecExample object: nil) open. (DynamicSpecExample object: 4) open. (DynamicSpecExample object: 'Hello World') open.! My subclasses are dynamic variables: each subclass represents a variable whose value persists inside the block passed to #value:during:. There is no way to change the value inside such a block, but it is possible to temporarirly rebind it in a nested manner.! I am a dummy proto to see how easy it is to replace a subwidget with another one dynamically. DynamicWidgetChange new openWithSpec! Text converter for Japanese variation of EUC.! Text converter for Korean variation of EUC.! Text converter for Extended Unix Character. This is an abstract class. The CJK variations are implemented as subclasses.! Similar to a ProportionalSplitterMorph but designed to attach to an edge of a single morph only.! I'm a DropListMorph which content can be modified. Try: (EditableDropListMorph on: [#(one two three)] list: #value selected: nil changeSelected: nil) openInWindow extent: 400@20.! I store the current state of an editing session. An instance of mine is shared by all TextEditor instances that are created during an editing session managed by a TextMorph (see below for more explanations about editing session). The state data are basically made of an undo/redo manager and of all data needed in order to manage text editing undo and redo (mainly all informations for the current and previous selection intervals). I'm created by a TextEditor at the beginning of an editing session (see TextEditor>>editingStateClass and TextEditor>>editingState). Specializations can be introduced to fit a particular TextEditor subclass need. Editing session: An editing session starts when a TextMorph is created (precisely, when a TextEditor instance is first assigned to a TextMorph editor instance variable). An editing session ends when a TextMorph is deleted. During an editing session, a TextMorph can make use of a lot of TextEditor instances, one at a time. As an example, each time a TextMorph is resized, its editor is released and a new one that fit the TextMorph physical properties is created. Another example, when a TextMorph loses the keyboard focus, then its editor could be fully released; it is created again when the TextMorph retrieves the focus. When an editor is created by a TextMorph, the state of the previous TextEditor, stored in its associated EditingState instance, is got and passed to the newly created editor. Thus the editing session remains stable (see TextEditor >> #stateArray and TextMorph >> #installEditorToReplace:). So TextEditor instances are extremely volatile whereas its associated EditingState instance remains during the whole editing session. Instance Variables: emphasisHere pointBlock markBlock startOfTyping previousInterval previousSelection undoManager lastParenLocation mouseDownInterval secondarySelectionToken ** obsolete ** should be removed ** - emphasisHere: The TextAttributes that are used for the newly entered text - pointBlock: The CharacterBlock where a selection begins (where the mouse has first pointed) - markBlock: The CharacterBlock where a selection ends - startOfTyping: The index of the first character which has been entered during the currently undoable/redoable portion of text (see TextEditor>>#openTypeIn and TextEditor>>#doneTyping) - previousInterval: Previous interval used for undo/redo actions - previousSelection: The previously selected text for undo/redo actions - undoManager: The undo/redo manager - lastParenLocation: Keep the position of the open parenthesis which corresponds to the last entered close parenthesis - mouseDownInterval: The position of the first mouse down in the editor ! New text editors. TextEditor provides most of the functionality that used to be in TextMorphEditor. This class is no longer a Controller!! SmalltalkEditor has Smalltalk code specific features. SimpleEditor provides basic functionality for single line text editing. It does not handle fonts and styles, aligning and Smalltalk utilities. It handles one single line. ! A round BorderedMorph. Supports borderWidth and borderColor. Only simple borderStyle is implemented. EllipseMorph new borderWidth:10; borderColor: Color green; openInWorld. EllipseMorph new borderStyle:(SimpleBorder width: 5 color: Color blue); openInWorld.! Menu designed to be embedded in another morph rather than popped up directly.! A label that underdraws to the top-left and/or bottom-right with a lighter and/or darker colour to the receiver.! Empty top-level layout used to delimit the layout chains.! An abstract superclasss of the classes that represent encoded character sets. In the old implementation, the charsets had more important role. However, in the current implementation, the subclasses are used only for keeping the backward compatibility. The other confusion comes from the name of "Latin1" class. It used to mean the Latin-1 (ISO-8859-1) character set, but now it primarily means that the "Western European languages that are covered by the characters in Latin-1 character set. ! I encode names and literals into tree nodes with byte codes for the compiler. Byte codes for literals are not assigned until the tree-sizing pass of the compiler, because only then is it known which literals are actually needed. I also keep track of sourceCode ranges during parsing and code generation so I can provide an inverse map for the debugger.! I am an alternate to EncoderForV3 that tries to use thje longest forms of bytecodes possible so as to avoid using as many bytecode as possible to allow for the unused portions of the bytecode set this makes available to be reassigned. I do not use the following ranges 0 through 111 0- 15 0000iiii Push Receiver Variable #iiii 16- 31 0001iiii Push Temporary Location #iiii 32- 63 001iiiii Push Literal Constant #iiiii 64- 95 010iiiii Push Literal Variable #iiiii 96-103 01100iii Pop and Store Receiver Variable #iii 104-111 01101iii Pop and Store Temporary Location #iii 138-159 138-143 Unused. 144-151 10010iii Jump iii + 1 (i.e., 1 through 8). 152-159 10011iii Pop and Jump 0n False iii +1 (i.e., 1 through 8). 176-255 176-191 1011iiii Send Arithmetic Message #iiii 192-207 1100iiii Send Special Message #iiii 208-223 1101iiii Send Literal Selector #iiii With No Arguments 224-239 1110iiii Send Literal Selector #iiii With 1 Argument 240-255 1111iiii Send Literal Selector #iiii With 2 Arguments = 112 + (160 - 138) + (256 - 176) = 214, or 84% of the bytecodes! An encoder for the V3 bytecode set augmented with the following bytecodes that are part of the full closure implementation. 138 10001010 jkkkkkkk Push (Array new: kkkkkkk) (j = 0) or Pop kkkkkkk elements into: (Array new: kkkkkkk) (j = 1) 140 10001100 kkkkkkkk jjjjjjjj Push Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 141 10001101 kkkkkkkk jjjjjjjj Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 142 10001110 kkkkkkkk jjjjjjjj Pop and Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 143 10001111 llllkkkk jjjjjjjj iiiiiiii Push Closure Num Copied llll Num Args kkkk BlockSize jjjjjjjjiiiiiiii This is an exact duplicate of EncoderForV3PlusClosures. Could be a trait (or in Newspeak, a Mixin). For now we impose upon you to synchronise any and all changes between these two classes.! I add behaviour to Encoder to size and emit bytecodes for the Squeak V3.x VM bytecode set. The intention is for another subclass to restrict the range of bytecodes used to long forms only, allowing the bytecode set to be redefined by avoiding using the many short forms. The short forms may then be reassigned.! An encoder for the V3 bytecode set augmented with the following bytecodes that are part of the full closure implementation. 138 10001010 jkkkkkkk Push (Array new: kkkkkkk) (j = 0) or Pop kkkkkkk elements into: (Array new: kkkkkkk) (j = 1) 140 10001100 kkkkkkkk jjjjjjjj Push Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 141 10001101 kkkkkkkk jjjjjjjj Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 142 10001110 kkkkkkkk jjjjjjjj Pop and Store Temp At kkkkkkkk In Temp Vector At: jjjjjjjj 143 10001111 llllkkkk jjjjjjjj iiiiiiii Push Closure Num Copied llll Num Args kkkk BlockSize jjjjjjjjiiiiiiii This is an exact duplicate of EncoderForLongFormV3PlusClosures. Could be a trait (or in Newspeak, a Mixin). For now we impose upon you to synchronise any and all changes between these two classes.! An EntryCompletion is a handler for the driving of the completion menu in a PluggableTextFieldMorph. The completion menu is an IdentifierChooserMorph which is typically built and popup when a character is entered in a PluggableTextFieldMorph. Instance Variables chooseBlock: chooser: dataSourceBlock: filterBlock: previousToken: chooseBlock - One argument block which is evaluated when a token is chosen, the token is passed as argument chooser - The IdentifierChooserMorph which is currently opened dataSourceBlock - The block that is evaluated in order to get the list of items filterBlock - The block used to filter the dataSource list, it takes 2 args, the first is an item from the current dataSource list element, the second is the token fetched from the requestor (the PluggableTextFieldMorph). It returns true if the current dataSource list element is to be kept previousToken - Used to be able to not open the list if the current text in the PluggableTextFieldMorph was the previous chosen one ! I provide a simple way to test the equality properties of any object.! >From the ANSI standard: This protocol describes the behavior of instances of class Error. These are used to represent error conditions that prevent the normal continuation of processing. Actual error exceptions used by an application may be subclasses of this class. As Error is explicitly specified to be subclassable, conforming implementations must implement its behavior in a non-fragile manner. Additional notes: Error>defaultAction uses an explicit test for the presence of the Debugger class to decide whether or not it is in development mode. In the future, TFEI hopes to enhance the semantics of #defaultAction to improve support for pluggable default handlers.! A message dialog with an error icon.! This error thrown when image runs in non-interactive mode (no user intervention possible nor expected), but application trying to use tools which require user's intervention. For example, in headless image application trying to query a user name, or dialog to confirm with proceeding some action.! An ErrorWhileCreationException is an exception raised when the creation of a new issue fails! An EternalCookie is a cookie that live forever. Actualy not eternal, but will last one year! Usage: eval [--help] [--save] [ --no-quit ] --help list this help message --save save the image after evaluation of the expression --no-quit if specified, the image continues runing after evaluating the a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! Events in Morphic originate in a Hand, pass to a target morph, and are then dispatched by an EventHandler. EventHandlers support redirection of mouse and keyboard activity by specifying and independent recipient object and message selector for each of the possible events. In addition each eventHandler can supply an optional value parameter for distinguishing between, eg, events from a number of otherwise identical source morphs. The basic protocol of an event handler is to receive a message of the form mouseDown: event in: targetMorph and redirect this as one of mouseDownRecipient perform: mouseDownSelector0 mouseDownRecipient perform: mouseDownSelector1 with: event mouseDownRecipient perform: mouseDownSelector2 with: event with: targetMorph mouseDownRecipient perform: mouseDownSelector3 with: event with: targetMorph with: valueParameter depending on the arity of the mouseDownSelector. ! Support for handling mouseOver events (no button down).! An EventManager is used to registers a 'observer' object's interest in in changes to an 'observed' object. Then when the observered object is changed, EventManager broadcasts the an update message to all objects with a registered interest. Finally, the Event manager can be used to remove an object from the list of observer object. An interested object is said to be a dependant on the target object. Registering an interest in an event is called adding a dependant. Deregistering is called removing a dependant. The EventManager's action map is a WeakIdentityDictionary that maps events (selectors) to dependants (objects & selectors) in a way that ensures the mapping is to specific objects (hence identity) and in a way that allows the object to be garbage collected if not other used (hence weak.) EventManager class has ActionMaps which has one actionMap for each object. Classic uses of an EventManager are to implement the Observer Pattern, see ChangeNotification or the MorphicModle as examples.! This is a constants, used by EventSensor to identify various event types and theirs contents. NOTE: A constant values should be kept in sync with VM-side, which are defined in sq.h header file.! I am ExactFloatPrintPolicy. Through FloatPrintPolicy and double dispatch I force Float>>#printOn:base: to dynamically use the slower but accurate way to print Floats using Float>>#absPrintExactlyOn:base:! Morph with an inset border by default and theme access. Overrides openModal: to allow multiple free example dialogs to be presented.! Model used for radio buttons in example of basic controls (see "UITheme exampleBasicControls").! This is the main class used to implement the exception handling system (EHS). It plays two distinct roles: that of the exception, and that of the exception handler. More specifically, it implements the bulk of the protocols laid out in the ANSI specification - those protocol names are reflected in the message categories. Exception is an abstract class. Instances should neither be created nor trapped. In most cases, subclasses should inherit from Error or Notification rather than directly from Exception. Exceptions have an optional #messageText that can be set when they are signaled. Exceptions also have the concept of #signaler, the object that is the subject of the exception. This will be set automatically (to the #receiver), but can be set when the exception is signaled. In implementing this EHS, The Fourth Estate Inc. incorporated some ideas and code from Craig Latta's EHS. His insights were crucial in allowing us to implement BlockContext>>valueUninterruptably (and by extension, #ensure: and #ifCurtailed:), and we imported the following methods with little or no modification: ContextPart>>terminateTo: ContextPart>>terminate MethodContext>>receiver: MethodContext>>answer: Thanks, Craig!!! I represent the BlockClosure>>on:do: temporaries in Pharo. Instance Variables block: enabled: exception: block - is the handler block enabled - is false if not active (to avoid running twice an handler block)) exception - is the exceptionClass ! An ExceptionSet is a grouping of exception handlers which acts as a single handler. Within the group, the most recently added handler will be the last handler found during a handler search (in the case where more than one handler in the group is capable of handling a given exception). ! See NonReentrantWeakMessageSend! An Exit is an exception that quit the image without saving with a given success status. Exit signalFaillure: 'something went wrong'! A morph that can expand or collapse to show its contents.! I am an Announcement that occurs when an ExpanderMorph is contracted (rolled-up). Example where visibility of another UI component depends on the expanded/contracted state of Expander 2 |builder expanders ex1 ex2 text list row| builder := UITheme builder. expanders := builder newColumn: { ex1 := builder newExpander: 'Expander 1'. ex2 := builder newExpander: 'Expander 2'}. expanders width: 100; hResizing: #rigid. text := builder newTextEditorFor: (ValueHolder new contents: 'Some text') getText: #contents setText: #contents:. list := (builder newListFor: (ListModel new list: #('One' 'Two' 'Three' 'Four'); selectionIndex: 3) list: #list selected: #selectionIndex changeSelected: #selectionIndex: help: 'This is a list') minWidth: 120; visible: false; disableTableLayout: true. ex2 announcer when: ExpanderMorphContracted do: [list hide; disableTableLayout: true]; when: ExpanderMorphExpanded do: [list show; disableTableLayout: false]. row := builder newRow: { expanders. (builder newRow: {text. list}) vResizing: #spaceFill}.! The titlebar area for and ExpanderMorph. Includes title label and expand/collapse button.! This announcement correspond to code evaluation. For example, a DoIt or PrintIt evaluated in a workspace raises one of this announcements.! An ExtendedNumberParser is extending Squeak number syntax with these rules - allow partial specification of integer and fraction parts: 1.e2 .1e3 are both 100.0 - allow plus sign before number and in exponent ! Specialized border for TabGroup. Does not draw border beneath the selectd tab and only draws on top.! An ExternalClipboard is the abstract superclass for the platform specific clipboards based on the clipboard plugin (former ExtendedClipboardInterface originally developed for Sophie). Instance Variables clipboard: SmallInteger clipboard - handle for the external clipboard. If 0 the external clipboard is invalid ! By John M McIntosh johnmci@smalltalkconsulting.com This class was written to mange the external semaphore table. When I was writing a Socket test server I discovered various race conditions on the access to the externalSemaphore table. This new class uses class side methods to restrict access using two mutex semaphores, one for removal and one for additions to the table. It seemed cleaner to deligate the reponsibility here versus adding more code and another class variable to SystemDictionary Note that in Smalltalk recreateSpecialObjectsArray we still directly play with the table. Henrik Sperre Johansen The name is somewhat of a misnomer; the table can be used for any objects, not just semaphores. That is its main usage though, so a split which deals with semaphores and other external objects differently (In the same underlying table) is not currently worth it. Therefore, while in general not all users will care if the table is above a certain size, we still guard against adding more objects than the limit above which external signals would be lost (on some VMs.) ! Specialized version of inspector showing the hex and string representation of the byte array ! Specialized version of inspector showing the size of the inspected collection in title.! Specialized version of inspector showing bytecodes symbolic representation, ast, ir, literals.! I am an eye inspector specified for MethodContext! Specific context inspector for the bottom right of the debugger! Specialized version of inspector showing keys on left panel and values on description panel! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! Specialized version of inspector showing hex, octal and binary representations! Specialized version of inspector showing values only! A FLAbstractCollectionCluster is the common behavior for all cluster collections. ! I am responsible of traversing the graph of references starting from a root object. I will produce a clusterization which the serializer will store on a stream. An example of use is: (FLAnalyzer newDefault clusterizationOf: (Array with: 1@2 with: 3@4)) clusters. ! I am responsible of traversing the graph of references starting from a root object. I will produce a clusterization which the serializer will store on a stream. An example of use is: (FLAnalyzer newDefault clusterizationOf: (Array with: 1@2 with: 3@4)) clusters. ! I represent an error produced during materialization when the serialized signature doesn't match the materializer's signature (accessible via FLMaterializer>>signature). A signature is a byte prefix that should prefix a well-serialized stream.! I represent an error produced during materialization when the serialized version doesn't match the materializer's version (accessible via FLMaterializer>>version). A version is encoded in 16 bits and is enconded heading the serialized stream, after the signature.! I have the common behavior for generic storing and loading variable bits objects.! FLBufferedWriteStream is a buffered write stream we use for Fuel serialization. Instead of directly using the stream provided to FLSerializer at creation time by the user, we create an instance of FLBufferedWriteStream for that stream. MultiByteFileStream has no real buffer and goes to disk too frequently. With FLBufferedWriteStream we keep stuff in a cache and only go to disk when this is full. The way of using it is jut FLBufferedWriteStream on: aWriteStream. For example: FLBufferedWriteStream on: (FileDirectory default forceNewFileNamed: 'TestFile') binary With the message #sizeBuffer: you can set the size of the buffer. Make sure to always send #flush or #close when you're done, otherwise the last buffer might not yet have been written. ! I am a strategy that emulate what we offer with FLSerializer class >> #serializeInMemory: and FLMaterializer class >> #materializeFromByteArray: ! I am the generic cluster for storing and loading variable byte objects.! I represent an error produced during materialization when a serialized class or trait name doesn't exist.! I have the common behavior for testing class serialization.! I represent a cluster of objects grouped by some specific similarity. I know how to serialize and materialize them all together.! I manage the clusters collected during the analysis step of serialization.! I am a cluster for CompiledMethod instances. How CompiledMethod trailers are serialized can be established using methods in 'configurating' class-side protocol.! I am an abstraction used by the materialization algorithm to decode the graph from a stream.! A FLDictionaryCollectionCluster is a special optional cluster that rather than using the default (variable object) serialization, uses #keysAndValuesDo: to iterate objects and #add: during materialization. This way we avoid analyzing/serializing lots of nil. Also, the rehash is not needed. So far we use it for Dictionary, IdentityDictionary and MethodDictionary.! I am an abstraction used by the serialization algorithm to encode the graph in a stream.! I represent an error produced during Fuel operation.! I am a strategy for traditional file streams.! I am a generic cluster for objects without indexable variables.! I handle .fuel files that are passed as arguments when starting the image. Usage: fuel [save] [quit] save save the image after loading quit Don't save the image and directly quit the image fater loading Documentation: This command will load the and materialize/install it's contents. If no argument is specified the image continues running with the loaded contents. Example: #Load a fuel file and save and quit the image with the contents: pharo Pharo.image save quit path/to/foo.fuel #Load the contents of foo.fuel and save the image, but continue running: pharo Pharo.image save path/to/foo.fuel #Load the contents of foo.fuel and continue running without saving: pharo Pharo.image path/to/foo.fuel ! I am a strategy for using GZipStream.! I am a cluster for classes that should be present when materializing. In other words, it only serializes a reference to the class, using its name.! I test the serialization of classes as *global* objects, i.e. the classes has to be present in the image at materialization time.! I am a cluster for those Metaclasses and ClassTrait who are not stored in detail.! I am a cluster for objects that are reachables from Smalltalk global dictionary.! I clusterize CompiledMethods that will be obtained on materialization accessing method dictionary of the corresponding class in Smalltalk globals. ! I represent an error produced during materialization when a serialized global name doesn't exist (at Smalltalk globals).! I clusterize objects that will be obtained on materialization via a message send to a global object. Explained with an example: Suppose we have a special instance of User that represents the admin user, and it is a unique instance in the image. In case the admin user is referenced in our graph, we want to treat that object as a global. We can do that in this way: User >> fuelAccept: aVisitor ^self == User admin ifTrue: [aVisitor visitGlobalSend: self] ifFalse: [super fuelAccept: aVisitor] User >> fuelGlobalName ^#User User >> fuelSelector ^#admin So what will happen is that during serialization, the admin user won't be completly serialized (with all its intance variables) but instead its global name and selector are stored. Then, at materialization time, Fuel will send the selector #admin to the class User, and use what that answers as the admin user of the materialized graph. We test this feature in FLGlobalSendSerializationTest.! I test the serialization of traits as *external* objects, i.e. the traits has to be present in the image at materialization time.! I am a cluster for known objects that belong to Smalltalk global dictionary. For example, Transcript could be serialized and materialized by me.! An instance of FLHeader is serialized together with the orignal object graph to serialize. This header is useful to: 1) Attach additional state or metadata associated to the graph being serialized. 2) Attach pre and post materialization actions! I am a cluster for simple objects who define serialization and materialization via hooks on their classes.! I am an optimized stream for writing and reading *indexes*, i.e. positive integers with a known upper bound. ! I am a template class whose algorithm for serialize a collection of objects consists on delegate the serialization of each individual object to the subclass.! I am an IdentityDictionary optimized for including a large number of elements.! I share behavior for special HashedCollections that are optimized for including a large number of elements.! A LargeIdentitySet is an IdentitySet for large collections. Rather than using linear probing, it takes advantage of the fact that identityHash (on a classic, 32bit VM) in Pharo only has 4096 unique values, using a bucket for each of those. It will still work if hash range changes (ie buckets are chosen mod 4096), but the potential gain will be lower the more diverse the hash space is. With linear probing you risk an array looking like this: Index: Hash: 1 X 2 X 3 X 4 4 5 5 6 4 7 4 8 7 9 6 10 X While with buckets the same dataset looks: Index: Hash: 1 X 2 X 3 X 4 [4, 4, 4] 5 5 6 6 7 7 8 X 9 X 10 X So includes: can generally be done faster (also sped up byusing a special primitive), and removal of objects does not have to do extensive cleanup if object was part of a chain.! I know how to map an object to its default cluster. I can map every object.! I map classes, traits, and global objects that belong to Smalltalk dictionary. I collaborate in serialization default behavior. For example, the global Transcript as well as any class in the image, are mapped by me.! The purpose of my hierarchy is to map objects with clusters.! I implement the algorithm for materializing an object graph on a stream. FLMaterializer known how to build instances of me.! I represent an error happened during materialization.! I am a binary object materializer. See an example of use in FLSerializer's documentation. ! I represent an error produced during materialization when is detected a change in the bytecodes of a method serialized as global. This error was born when testing the materialization of a BlockClosure defined in a method that changed. The test produced a VM crash.! I am a cluster for MethodContexts.! I represent an error produced during materialization when a serialized method in a class or trait name doesn't exist (at Smalltalk globals).! I represent migration information about a class. See 'configuring-migration' protocol in FLMaterializer.! I am a strategy for MultiByteBinaryOrTextStream..! I represent an error which may happen while tracing in the graph an object that is forbidden of being serialized.! I implement a generic way of serializing and materializing an object, for those that do not need more special way of doing it.! I represent an error which may happen during serialization, when trying to encode on the stream a reference to an object that should be encoded before, but it is not. This usually happens when the graph changes during serialization. Another possible cause is a bug in the analysis step of serialization.! I am an error produced during serialization, signaled when trying to serialize an obsolete class as global. It is a prevention, because such class is lekely to be absent during materialization.! I have shared behavior of some optional clusters.! FLPerson is a class just to be able to change the hash of an object and try to test problems with hash.! I map substituted objects. For example, suppose you want to substitute instances of WriteStream by nil. In such case, I will map every WriteStream instance to my substitutions cluster, and its factory block will value to nil with any argument. ! FLPointCluster is an optional class that optimizes Point instances, since there are a lot of instances in the system, it makes sense to optimize them. We take advantage of bytecode optimizations done by Pharo for messages like #@, #x and #y. In addition, we avoid the overhead of class reshape, etc. ! I have the common behavior for storing and loading pointer objects.! I am a cluster that serializes and materializes interacting directly with the stream.! Used at #testObjectByProxyThatBecomesItsContent! FLRectangleCluster is an optional class that optimizes Rectangle instances, since there are a lot of instances in the system, it makes sense to optimize them. We take advantage of bytecode optimizations done by Pharo for messages like #new, #@, #x and #y. In addition, we avoid the overhead of class reshape, etc. ! I implement the algorithm for serializing an object graph on a stream. FLSerializer known how to build instances of me.! I represent an error happened during serialization.! I am a binary object serializer. An example of use: | sourceArray loadedArray | sourceArray := Array with: 'a string' with: Transcript with: [ Transcript show: 'a string' ]. "Store to the file" FLSerializer serialize: sourceArray toFileNamed: 'example.FL'. "Load from the file" loadedArray := FLMaterializer materializeFromFileNamed: 'example.FL'. "The arrays are not the same" [ sourceArray ~~ loadedArray ] assert. "The strings are not the same" [ sourceArray first ~~ loadedArray first ] assert. [ sourceArray first = loadedArray first ] assert. "The global instance Transcript is the same" [ sourceArray second == loadedArray second ] assert. "Appreciate in Transcript that the loaded block prints a string" loadedArray third value. ! A FLSimpleCollectionCluster is a special optional cluster that rather than using the default (variable object) serialization, uses #do: to iterate objects and #add: during materialization. So far we use it for Set, IdentitySet and OrderedCollection.! FLSimpleStack is a simple stack used in Fuel to avoid a recursion while traversing the graph to serialize. While analizing the content of an object (inst vars) we can encounter simple objects (direct string representation) or complex objects (composite). In the latter case we start analizing those instVars. So... Imagine object X with two instVars Y and Z. Imagine the method of the traverse is called #analye:. So you do #analize: X. Then, in such method you check whether X has regular pointers to regular objects, and if true, you analize them. So in this case you would send #analyze: Y and #analize: Z, generating the recursion. Right ? Notice that the time between analyse: Y and analyse: Z is dependent on the graph that is attached to Y. Y can have objects that have further objects etc. So leaving X aside, Y can be the first object to serialize and Z the last. With this FLSimpleStack, instead of sending #analyze: Y and #analize: Z what Fuel does is just to do a push on a stack: #push: Y and #push: Z. And then we are done with X, so we pop from the stack and we continue with the next object (at some point in the future we will pop Y and Z) When there are no more objects in the stack it means we are done. ! I don't have so much sense as a class.! I am a strategy that help tests for writing (and then reading) on streams.! I am a cluster for objects that have to be replaced in the object graph by another one (at serialization time). Examples of use: 1) Suppose you want to substitute instances of WriteStream by nil. In such case, WriteStream has to implement this method: fuelAccept: aVisitor ^aVisitor visitSubstitution: self by: nil 2) Suppose you want to substitute every integer in the graph by its string representation. In such case you should configure the analyzer through: anAnalyzer when: [:x | x isInteger] substituteBy: [:x | x printString]. In this way, when you serialize #(1 2), you will then materialize #('1' '2')! I test the serialization of classes and traits as *external* objects, i.e. the classes or traits have to be present in the image at materialization time.! I have the common behavior for testing trait serialization.! I am a generic cluster for objects with indexable variables.! I am used to materialize instance variables in an object, tolerating "class shape changing". Cases tolerated are: - instance variable added - instance variable order change - instance variable removed ! I am a cluster for objects with weak indexable variables.! I am the generic cluster for storing and loading variable word objects. Most word-like objects are subclasses from ArrayedCollection. Hence, we may have used the method #writeOn: to serialize, and #newFromStream: to materialize. #writeOn: is slow because it ALWAYS encode wors in a big endian format. Most machines today are even little endian. Even worst, #newFromStream: has to always do a #restoreEndianness. #newFromStream: is fast because it uses the method #nextWordsInto: which is a hack but that is really fast. The problem is that #nextWordsInto: has to always do the #restoreEndianness when we are in little endian machines (most of the time). Hence, this cluster provives the best of both worlds: the serialization is done with a platform-dependen way, that is, the endianness will be the same of the machine where we are serializing. In addition, we serialize with the same hack that #nextWordsInto: uses, that is, the Bitmap >> hackBits: And the materialization will use a variation of #nextWordsInto: (#fuelNextWordsInto:) that ONLY does the #restoreEndianness if the machine where we are materializing has a different endianness than where we have serialized the object. To do this, while serializing, we store in the header of the Fuel stream, the endianness. Then in materialization, we compare agains that. Conclusion: we only restore endianness when needed. Notice, in addition, that the method #newFromStream: sends the message #restoreEndianness. This method EXPECTS that the object was serialized in big endian format, and it will only change the endianness if we are materializing in a little endian machine. This means that if you serialize in little endian and materialize in big endian, you are screw. For this reason, this cluster uses a method that always change the endianness, Bitmap class >> swapBytesIn:from:to: Future work: maybe we can modify and use the Bitmap hackBits: not only for materialization but also for serialization. ! Do not rearrange these fields!! This structure models the size of a bitmap strike (i.e., a bitmap instance of the font for a given resolution) in a fixed-size font face. It is used for the `availableSizes' field of the FT2Face structure. height :: The (vertical) baseline-to-baseline distance in pixels. It makes most sense to define the height of a bitmap font in this way. width :: The average width of the font (in pixels). Since the algorithms to compute this value are different for the various bitmap formats, it can only give an additional hint if the `height' value isn't sufficient to select the proper font. For monospaced fonts the average width is the same as the maximum width. size :: The point size in 26.6 fractional format this font shall represent (for a given vertical resolution). x_ppem :: The horizontal ppem value (in 26.6 fractional format). y_ppem :: The vertical ppem value (in 26.6 fractional format). Usually, this is the `nominal' pixel height of the font. The values in this structure are taken from the bitmap font. If the font doesn't provide a parameter it is set to zero to indicate that the information is not available. The following formula converts from dpi to ppem: ppem = size * dpi / 72 where `size' is in points. Windows FNT: The `size' parameter is not reliable: There exist fonts (e.g., app850.fon) which have a wrong size for some subfonts; x_ppem and y_ppem are thus set equal to pixel width and height given in in the Windows FNT header. TrueType embedded bitmaps: `size', `width', and `height' values are not contained in the bitmap strike itself. They are computed from the global font parameters. ! The various flags from the Freetype/2 header. The LoadXXXX flags can be used with primitiveLoadGlyph:flags: or with the Cairo primCairoFtFontCreateForFtFace:flags:scale: primitives. FT_LOAD_DEFAULT :: Corresponding to 0, this value is used a default glyph load. In this case, the following will happen: 1. FreeType looks for a bitmap for the glyph corresponding to the face's current size. If one is found, the function returns. The bitmap data can be accessed from the glyph slot (see note below). 2. If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then "hinted" to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below). Note that by default, the glyph loader doesn't render outlines into bitmaps. The following flags are used to modify this default behaviour to more specific and useful cases. FT_LOAD_NO_SCALE :: Don't scale the vector outline being loaded to 26.6 fractional pixels, but kept in font units. Note that this also disables hinting and the loading of embedded bitmaps. You should only use it when you want to retrieve the original glyph outlines in font units. FT_LOAD_NO_HINTING :: Don't hint glyph outlines after their scaling to device pixels. This generally generates "blurrier" glyphs in anti-aliased modes. This flag is ignored if @FT_LOAD_NO_SCALE is set. FT_LOAD_RENDER :: Render the glyph outline immediately into a bitmap before the glyph loader returns. By default, the glyph is rendered for the @FT_RENDER_MODE_NORMAL mode, which corresponds to 8-bit anti-aliased bitmaps using 256 opacity levels. You can use either @FT_LOAD_TARGET_MONO or @FT_LOAD_MONOCHROME to render 1-bit monochrome bitmaps. This flag is ignored if @FT_LOAD_NO_SCALE is set. FT_LOAD_NO_BITMAP :: Don't look for bitmaps when loading the glyph. Only scalable outlines will be loaded when available, and scaled, hinted, or rendered depending on other bit flags. This does not prevent you from rendering outlines to bitmaps with @FT_LOAD_RENDER, however. FT_LOAD_VERTICAL_LAYOUT :: Prepare the glyph image for vertical text layout. This basically means that `face.glyph.advance' will correspond to the vertical advance height (instead of the default horizontal advance width), and that the glyph image will be translated to match the vertical bearings positions. FT_LOAD_FORCE_AUTOHINT :: Force the use of the FreeType auto-hinter when a glyph outline is loaded. You shouldn't need this in a typical application, since it is mostly used to experiment with its algorithm. FT_LOAD_CROP_BITMAP :: Indicates that the glyph loader should try to crop the bitmap (i.e., remove all space around its black bits) when loading it. This is only useful when loading embedded bitmaps in certain fonts, since bitmaps rendered with @FT_LOAD_RENDER are always cropped by default. FT_LOAD_PEDANTIC :: Indicates that the glyph loader should perform pedantic verifications during glyph loading, rejecting invalid fonts. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also. FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: Indicates that the glyph loader should ignore the global advance width defined in the font. As far as we know, this is only used by the X-TrueType font server, in order to deal correctly with the incorrect metrics contained in DynaLab's TrueType CJK fonts. FT_LOAD_NO_RECURSE :: This flag is only used internally. It merely indicates that the glyph loader should not load composite glyphs recursively. Instead, it should set the `num_subglyph' and `subglyphs' values of the glyph slot accordingly, and set "glyph->format" to @FT_GLYPH_FORMAT_COMPOSITE. The description of sub-glyphs is not available to client applications for now. FT_LOAD_IGNORE_TRANSFORM :: Indicates that the glyph loader should not try to transform the loaded glyph image. This doesn't prevent scaling, hinting, or rendering. FT_LOAD_MONOCHROME :: This flag is used with @FT_LOAD_RENDER to indicate that you want to render a 1-bit monochrome glyph bitmap from a vectorial outline. Note that this has no effect on the hinting algorithm used by the glyph loader. You should better use @FT_LOAD_TARGET_MONO if you want to render monochrome-optimized glyph images instead. FT_LOAD_LINEAR_DESIGN :: Return the linearly scaled metrics expressed in original font units instead of the default 16.16 pixel values. FT_LOAD_NO_AUTOHINT :: Indicates that the auto-hinter should never be used to hint glyph outlines. This doesn't prevent native format-specific hinters from being used. This can be important for certain fonts where unhinted output is better than auto-hinted one. One of following flags (as LoadTargetXXX) can be used to further specify the result. FT_RENDER_MODE_NORMAL :: This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps, using 256 levels of opacity. FT_RENDER_MODE_LIGHT :: This is similar to @FT_RENDER_MODE_NORMAL, except that this changes the hinting to prevent stem width quantization. This results in glyph shapes that are more similar to the original, while being a bit more fuzzy ("better shapes", instead of "better contrast" if you want :-). FT_RENDER_MODE_MONO :: This mode corresponds to 1-bit bitmaps. FT_RENDER_MODE_LCD :: This mode corresponds to horizontal RGB/BGR sub-pixel displays, like LCD-screens. It produces 8-bit bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the @FT_PIXEL_MODE_LCD mode. FT_RENDER_MODE_LCD_V :: This mode corresponds to vertical RGB/BGR sub-pixel displays (like PDA screens, rotated LCD displays, etc.). It produces 8-bit bitmaps that are 3 times the height of the original glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. The LCD-optimized glyph bitmaps produced by FT_Render_Glyph are _not filtered_ to reduce color-fringes. It is up to the caller to perform this pass. ! This is an Error that knows how to get the Freetype2 error code and string.! Do not rearrange these fields!! New fields should go at the end, because the plugin has to know about these indexes. ByteArray representing a pointer to the malloc'd FT_Face struct: handle Copied from the FT_Face struct on creation: numFaces faceIndex faceFlags styleFlags numGlyphs familyName styleName numFixedSizes availableSizes numCharmaps charmaps Copied on creation, but only relevant to scalable outlines: bbox unitsPerEm ascender descender height maxAdvanceWidth maxAdvanceHeight underlinePosition underlineThickness Working memory: glyph -- FT2GlyphSlot, set by loadGlyph or loadChar size -- the active size, set by activateSize, used by loadGlyph, getKerning, etc. charmap -- set by setCharmap ! Do not rearrange these fields!! face -- the FT2Face that owns this FT2GlyphSlot. Note that even when the glyph image is transformed, the metrics are not. linearHoriAdvance -- For scalable formats only, this field holds the linearly scaled horizontal advance width for the glyph (i.e. the scaled and unhinted value of the hori advance). This can be important to perform correct WYSIWYG layout. Note that this value is expressed by default in 16.16 pixels. However, when the glyph is loaded with the FT_LOAD_LINEAR_DESIGN flag, this field contains simply the value of the advance in original font units. linearVertAdvance -- For scalable formats only, this field holds the linearly scaled vertical advance height for the glyph. See linearHoriAdvance for comments. advance -- This is the transformed advance width for the glyph. format -- This field indicates the format of the image contained in the glyph slot. Typically FT_GLYPH_FORMAT_BITMAP, FT_GLYPH_FORMAT_OUTLINE, and FT_GLYPH_FORMAT_COMPOSITE, but others are possible. bitmap -- This field is used as a bitmap descriptor when the slot format is FT_GLYPH_FORMAT_BITMAP. Note that the address and content of the bitmap buffer can change between calls of @FT_Load_Glyph and a few other functions. bitmap_left -- This is the bitmap's left bearing expressed in integer pixels. Of course, this is only valid if the format is FT_GLYPH_FORMAT_BITMAP. bitmap_top -- This is the bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the baseline to the top-most glyph scanline, upwards y-coordinates being *positive*. outline -- The outline descriptor for the current glyph image if its format is FT_GLYPH_FORMAT_OUTLINE. num_subglyphs -- The number of subglyphs in a composite glyph. This field is only valid for the composite glyph format that should normally only be loaded with the @FT_LOAD_NO_RECURSE flag. For now this is internal to FreeType. subglyphs -- An array of subglyph descriptors for composite glyphs. There are `num_subglyphs' elements in there. Currently internal to FreeType. control_data -- Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data. control_len -- This is the length in bytes of the control data. other -- Really wicked formats can use this pointer to present their own glyph image to client apps. Note that the app will need to know about the image format. width, height, hBearingX, hBearingY, hAdvance, vBearingX, vBearingY, vAdvance -- The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the @FT_Load_Glyph API function) and can be expressed either in 26.6 fractional pixels or font units. ! handle holds a (typically 32-bit) pointer to an externally managed object.! This is a wrapper for the global 'library' in the plugin. It is provided for the use of Cairo APIs that take an FT_Library argument.! @instVar: contoursSize - The number of contours in the outline. @instVar: pointsSize - The number of points in the outline. @instVar: points - an array of 26.6 fixed point integer pairs giving the outline's point coordinates. @instVar: tags - an array of pointsSize bytes, giving each outline point's type. (counting from 0) If bit 0 is unset, the point is 'off' the curve, i.e., a Bézier control point, while it is 'on' when set. Bit 1 is meaningful for 'off' points only. If set, it indicates a third-order Bézier arc control point; and a second-order control point if unset. @instVar: contours - an array of contoursSize shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points '0' to 'contours[0]', the second one is defined by the points 'contours[0]+1' to 'contours[1]', etc. @instVar: flags - a set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on how to convert/grid-fit it.! Do not rearrange these fields!! This is used to report FT2 version information. Its fields must remain unchanged, or you must change FT2Plugin>>primitiveVersion.! A minimal FTP client program. Could store all state in inst vars, and use an instance to represent the full state of a connection in progress. But simpler to do all that in one method and have it be a complete transaction. Always operates in passive mode (PASV). All connections are initiated from client in order to get through firewalls. See ServerDirectory openFTP, ServerDirectory getFileNamed:, ServerDirectory putFile:named: for examples of use. See TCP/IP, second edition, by Dr. Sidnie Feit, McGraw-Hill, 1997, Chapter 14, p311.! I hold the source code for DoIt. It is needed if you want to debug with ASTDebugger (Smalltalkhub user:'dh83' project:'ast-interpreter') a DoIt method or if you want to look at the stack in the AIContextInspector! I appear when there is an error while trying to build a menu from pragmas. I include items to: * Debug: give the user an opportunity to see and correct the error * Explain: why they're seeing a different menu * Custom: clients can add items to me by implementing #fallbackMenuOn:. Browse implementors for examples.! False defines the behavior of its single instance, false -- logical negation. Notice how the truth-value checks become direct message sends, without the need for explicit testing. Be aware however that most of these methods are not sent as real messages in normal use. Most are inline coded by the compiler as test and jump bytecodes - avoiding the overhead of the full message sends. So simply redefining these methods here will have no effect.! This is the unit test for the class False. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category ! This class adds the following optimizations to the basic Inflate decompression: a) Bit reversed access If we want to fetch the bits efficiently then we have them in the wrong bit order (e.g., when we should fetch 2r100 we would get 2r001). But since the huffman tree lookup determines the efficiency of the decompression, reversing the bits before traversal is expensive. Therefore the entries in each table are stored in REVERSE BIT ORDER. This is achieved by a reverse increment of the current table index in the huffman table construction phase (see method increment:bits:). According to my measures this speeds up the implementation by about 30-40%. b) Inplace storage of code meanings and extra bits Rather than looking up the meaning for each code during decompression of blocks we store the appropriate values directly in the huffman tables, using a pre-defined mapping. Even though this does not make a big difference in speed, it cleans up the code and allows easier translation into primitive code (which is clearly one goal of this implementation). c) Precomputed huffman tables for fixed blocks So we don't have to compute the huffman tables from scratch. The precomputed tables are not in our superclass to avoid double storage (and my superclass is more intended for documentation anyways).! I am a class browser view on a fileout (either a source file (.st) or change set (.cs)). I do not actually load the code into to the system, nor do I alter the classes in the image. Use me to vet code in a comfortable way before loading it into your image. From a FileList, I can be invoked by selecting a source file and selecting the "browse code" menu item from the yellow button menu. I use PseudoClass, PseudoClassOrganizers, and PseudoMetaclass to model the class structure of the source file.! Dialog based file chooser for selcting or saving files. Supports various types of answer (file stream, file name, directory path etc) with optional extension filters and image or text file preview.! I am raised when an operation is attempted on a file that does not exist. This includes cases where a file operation is attempted on a directory.! I am raised on an attempt to create a file or directory over top of an existing file.! I provide an interface for doing IO on an open file. I keep an id, which as an opaque identifier used by the FilePlugin primitives. I translate positions from the 1-based indexes used in Smalltalk to the 0-based offsets used by the primitives. I do not implement the primitives myself, instead delegating those to an instance of FilePluginPrimitives.! A FileList is a tool to deal with files. FileList open "open FileList"! I am a late-bound reference. I refer to a file or directory in relation to a well-known location on the filesystem, called an origin. When asked to perform concrete operation, I look up the current location of my origin, and resolve my path against it. Usage ---------- FileLocator vmDirectory parent pathString > '/Applications' FileLocator desktop. FileLocator desktop basename. FileLocator home basename. FileLocator image. FileLocator vmBinary asAbsolute pathString > '/Applications/CogVM.app/Contents/MacOS/CogVM' FileLocator vmBinary pathString > '/Applications/CogVM.app/Contents/MacOS/CogVM' Implementation ------------------------ origin A symbolic name for base reference I use to resolve myself. path A relative path that is resolved against my origin" ! I represent a service that may change the contents of a directory. Such changes include: * file creation * file deletion * file modification! This class absorb the difference of internal and external representation of the file path. The idea is to keep the internal one as much as possible, and only when it goes to a primitive, the encoded file path, i.e. the native platform representation is passsed to the primitive. The converter used is obtained by "LanguageEnvironment defaultFileNameConverter". ! I provide an interface to the primitives in the FilePlugin. ! I combine a filesystem and path, which is sufficient to refer to a concrete file or directory. I provide methods for navigating my filesystem, performing filesystem operations and opening and closing files. I am the primary mechanism for working with files and directories. | working | working := FileSystem disk workingDirectory. working files | disk | disk := FileSystem disk. disk root. "a reference to the root directory" disk working. "a reference to the working directory"! I represent a Stream that accesses a FilePage from a File. One use for my instance is to access larger "virtual Strings" than can be stored contiguously in main memory. I restrict the objects stored and retrieved to be Integers or Characters. An end of file pointer terminates reading; it can be extended by writing past it, or the file can be explicitly truncated. To use the file system for most applications, you typically create a FileStream. This is done by sending a message to a FileDirectory (file:, oldFile:, newFile:, rename:newName:) which creates an instance of me. Accesses to the file are then done via my instance. *** On DOS, files cannot be shortened!! *** To overwrite a file with a shorter one, first delete the old file (FileDirectory deleteFilePath: 'Hard Disk:aFolder:dataFolder:foo') or (aFileDirectory deleteFileNamed: 'foo'). Then write your new shorter version.! I present a low-level protocol for interacting with filesystems. I hold a reference to a store (a subinstance of FileSystemStore) which takes care of the details of performing file and directory operations on the filesystem I represent. I keep track of the current directory, and am responsible for resolving all paths that I pass into my store. My store acts as a factory and offers platform specific actions. FileSystem instances know two methods that return a Reference object: workingDirectory and root. FileSystem disk workingDirectory FileSystem disk root ! I am a cache for metadata about a file or directory. The information I hold is as follows: reference A reference to the file or directory to which my data pertains. creation The creation date and time, stored as number seconds since the Smalltalk epoch. modification The modification date and time, number seconds since the Smalltalk epoch. isDirectory True if my data pertains to a directory, false if a file. size Size in bytes for a file, 0 for a directory. ! I am an abstract superclass for errors that may occur during filesystem operations.! I am an abstract superclass for objects that fulfill the Guide role in the Guide/Visitor pattern. My subclasses know how to traverse a filesystem in a specific order, "showing" the files and directories they encounter to a visitor. visitor An object that fulfills the Visitor role and implements the visitor protocol. work An OrderedCollection, used to keep track of filesystem nodes that have not yet been visited! I am an abstract superclass for file handle implementations. I provide a uniform interface that streams can use for read and write operations on a file regardless of the filesystem. I encapsulate the actual IO primitives.! I'm a set of permissions for a Directory Entry! I am an abstract superclass for objects that can resolve origins into references. Such objects use the Chain of Responsibility pattern, and when unable to resolve a particular origin, delegate that resolution request to the next resolver in the list. next The next resolver in the list, or nil ! I am an abstract superclass for store implementations. My subclasses provide access to the actual data storage of a particular kind of filesystem. The file system can be accessed via FileSystem disk FileSystem memory My associated filesystem can be accessed as follows: DiskStore currentFileSystem! I am an abstract file system test. I directly test - the public interface of a FileSystem using these methods directly - the FileSystem in general through the operation methods of the FileReference! I am an abstract superclass for objects that can perform operations on directory trees. My subclasses implement the visitor protocol, and process filesystem nodes shown to them by guides.! This class models a file URL according to (somewhat) RFC1738, see http://www.w3.org/Addressing/rfc1738.txt Here is the relevant part of the RFC: 3.10 FILES The file URL scheme is used to designate files accessible on a particular host computer. This scheme, unlike most other URL schemes, does not designate a resource that is universally accessible over the Internet. A file URL takes the form: file:/// where is the fully qualified domain name of the system on which the is accessible, and is a hierarchical directory path of the form //.../. For example, a VMS file DISK$USER:[MY.NOTES]NOTE123456.TXT might become As a special case, can be the string "localhost" or the empty string; this is interpreted as `the machine from which the URL is being interpreted'. The file URL scheme is unusual in that it does not specify an Internet protocol or access method for such files; as such, its utility in network protocols between hosts is limited. From the above we can conclude that the RFC says that the part never starts or ends with a slash and is always absolute. If the last name can be a directory instead of a file is not specified clearly. The path is stored as a SequenceableCollection of path parts. Notes regarding non RFC features in this class: - If the last path part is the empty string, then the FileUrl is referring to a directory. This is also shown with a trailing slash when converted to a String. - The FileUrl has an attribute isAbsolute which signals if the path should be considered absolute or relative to the current directory. This distinction is not visible in the String representation of FileUrl, since the RFC does not have that. - Fragment is supported (kept for historical reasons) ! FillStyle is an abstract base class for fills in the BalloonEngine.! BorderStyle supporting general (potentially composite) fillstyles. ! A FillStyleTest is a test class for testing the behavior of FillStyle! I am tree node supporting filtering! I'm the finderUI model in the MVC pattern. I'm compute the search string and I construct a resultDictionary. Then I throw events everywhere and my views are redrawn.! A FinderClassNode is a node used by the FinderUI's tree representing a Class! A FinderMethodNode is a node used by the FinderUI's tree representing a Method! A FinderNode is an abstract class used by the tree of FinderUI! I show the finder bar within Nautilus! A FinderPragmaNode is a Node used to render a pragma in the Finder Tree! A FinderSingleMethodNode is a node used to display a selector implemented only once in the system! A FinderUI is a UI used to render a Finder instance. This tool is used to look for selectors, class, source code or patterns through the system, or through a specified environment! I am a font for special purpose like password or fallback. I can show same form whenever someone requests any character. Variable displaySelector is future use to show a form dynamically. (Although it would be unnecessary...)! My instances represent IEEE-754 floating-point double-precision numbers. They have about 16 digits of accuracy and their range is between plus and minus 10^307. Some valid examples are: 8.0 13.3 0.3 2.5e6 1.27e-30 1.27e-31 -12.987654e12 Mainly: no embedded blanks, little e for tens power, and a digit on both sides of the decimal point. It is actually possible to specify a radix for Float constants. This is great for teaching about numbers, but may be confusing to the average reader: 3r20.2 --> 6.66666666666667 8r20.2 --> 16.25 If you don't have access to the definition of IEEE-754, you can figure out what is going on by printing various simple values in Float hex. It may help you to know that the basic format is... sign 1 bit exponent 11 bits with bias of 1023 (16r3FF) to produce an exponent in the range -1023 .. +1024 - 16r000: significand = 0: Float zero significand ~= 0: Denormalized number (exp = -1024, no hidden '1' bit) - 16r7FF: significand = 0: Infinity significand ~= 0: Not A Number (NaN) representation mantissa 53 bits, but only 52 are stored (20 in the first word, 32 in the second). This is because a normalized mantissa, by definition, has a 1 to the right of its floating point, and IEEE-754 omits this redundant bit to gain an extra bit of precision instead. People talk about the mantissa without its leading one as the FRACTION, and with its leading 1 as the SIGNFICAND. The single-precision format is... sign 1 bit exponent 8 bits, with bias of 127, to represent -126 to +127 - 0x0 and 0xFF reserved for Float zero (mantissa is ignored) - 16r7F reserved for Float underflow/overflow (mantissa is ignored) mantissa 24 bits, but only 23 are stored This format is used in FloatArray (qv), and much can be learned from the conversion routines, Float asIEEE32BitWord, and Float class fromIEEE32Bit:. Thanks to Rich Harmon for asking many questions and to Tim Olson, Bruce Cohen, Rick Zaccone and others for the answers that I have collected here.! FloatArrays store 32bit IEEE floating point numbers.! These tests are used to assert that FloatArrayPlugin has same results as Float asIEEE32BitWord! I am FloatInspector. I am an Inspector. I am a specialized Inspector for Floats. I add extra elements (sign, significand, exponent) of the Float object that I am inspecting. Note that these should be interpreted as sign * significand * (2 raisedToInteger: exponent)! I am FloatPrintPolicy. I am a DynamicVariable. I control whether Float instances are printed exactly or inexactly. The inexact printing is much faster, but can be less accurate. The default policy is ExactFloatPrintPolicy. FloatPrintPolicy value: InexactFloatPrintPolicy new during: [ Float pi printString ]! I provide a test suite for Float values. Examine my tests to see how Floats should behave, and see how to use them.! I am FloatingPointException, an ArithmeticError indicating a problem in a floating point calculation. Precision underflow or overflow could be considered FloatingPointExceptions. ZeroDivide, DomainError and NaNException are examples of more specific ArithmeticErrors that can be signaled before an operation is actually attempted.! I'm an object holding information to choose a font from a list of fonts.! I'm the UI of a font chooser. ! Abstract superClass for fontProviders examples of possible fontProviders are StrikeFontProvider FreeTypeFontProvider Win32NativeFontProvider ! FontSet provides a mechanism for storing a set of fonts as a class that can be conveniently filedOut, filedIn, and installed as a TextStyle. The most common use is... Find a font you like. Use BitFont to convert a bunch of sizes to data files named, eg, LovelyNN.BF Use FontSet convertFontsNamed: 'Lovely' to produce a FontSet named Lovely. FileOut that FontSet for later use. Use Lovely installAsTextStyle to make all sizes available in a TextStyle named #Lovely in the TextConstants dictionary. Use ctrl-k in any text pane to select the new Lovely style for that paragraph. Then use cmd-1 through 5 or cmd-k to set the point-size for any selection. ! signaled by font loading code when reading a DiskProxy that calls for a missing font.! I am mainly a test for fallback font. FontTest buildSuite run! Just a class for testing.! A rectangular array of pixels, used for holding images. All pictures, including character images are Forms. The depth of a Form is how many bits are used to specify the color at each pixel. The actual bits are held in a Bitmap, whose internal structure is different at each depth. Class Color allows you to deal with colors without knowing how they are actually encoded inside a Bitmap. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. Forms are indexed starting at 0 instead of 1; thus, the top-left pixel of a Form has coordinates 0@0. Forms are combined using BitBlt. See the comment in class BitBlt. Forms that repeat many times to fill a large destination are InfiniteForms. colorAt: x@y Returns the abstract Color at this location displayAt: x@y shows this form on the screen displayOn: aMedium at: x@y shows this form in a Window, a Form, or other DisplayMedium fillColor: aColor Set all the pixels to the color. edit launch an editor to change the bits of this form. pixelValueAt: x@y The encoded color. The encoding depends on the depth. ! Note that when shadowDrawing is true, shadowStipple may be either a color, for a solid shadow of the given color, or it may be a stipple used to simulate gray shading when the display cannot support alpha blending.! Various tests for class form.! Fraction provides methods for dealing with fractions like 1/3 as fractions (not as 0.33333...). All public arithmetic operations answer reduced fractions (see examples). instance variables: 'numerator denominator ' Examples: (note the parentheses required to get the right answers in Smalltalk and Pharo): (2/3) + (2/3) (2/3) + (1/2) "answers shows the reduced fraction" (2/3) raisedToInteger: 5 "fractions also can have exponents" ! A FrameLayoutSpec is for a FrameLayout! This is a font provider for true type fonts. You can use it to add TTF files to your image: FreeTypeFontProvider current updateFromFileEntry: (FileDirectory default entryAt: 'UnDotum.ttf') directory: FileDirectory default locationType: #imageRelative. FreeTypeFontProvider current buildFamilies. FreeTypeFontSelectorDialogWindow new open. StandardFonts balloonFont: (LogicalFont familyName: 'UnDotum' pointSize: 10). StandardFonts defaultFont: (LogicalFont familyName: 'UnDotum' pointSize: 14).! I'm a dialog to select a font. Usage example: |fontSelector| fontSelector := FreeTypeFontSelectorDialogWindow new. UITheme builder openModal: fontSelector. fontSelector selectedFont inspect.! This class produces glyphs for a FreeTypeFont. It can be subclassed to provide, for example, sub-pixel anti-aliased glyphs.! Provides for another morph to occupy the full screen area (less docking bars).! A label that underdraws to the top-left, top-right, bottom-right and bottom left by a specifed offset in a contrasting colour to the receiver's with a specified alpha value.! This class represents the domestic character encoding called GB 2312 used for simplified Chinese. ! Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. Used with permission. Modified for use in Squeak.! This class defines magic numbers taken from the RFC1952 GZIP file format specification version 4.3 (1996) [1]. A class imports these constants as 'class variables' by including the following in its class definition: poolDictionaries: 'GZipConstants' A method on the class side initialises the values. [1] http://www.ietf.org/rfc/rfc1952.txt (Section 2.3.1 Member header and trailer) -------------8<----snip--------------- As an aside the following in [GzipConstants class >> initialize] does not match the specification for bit 5 as "reserved". GZipEncryptFlag := 16r20. "Archive is encrypted" I did find it defined here [2] & [3] however the FAQ [4] specifically says encryption is NOT part of the standard. This constant is only used in [GzipReadStream >> on:from:to] as... (flags anyMask: GZipEncryptFlag) ifTrue:[^self error:'Cannot decompress encrypted stream']. So perhaps its okay to leave but maybe some slight benefit from amending the text as follows.. GZipEncryptFlag := 16r20. "Archive is encrypted. Not supported. Not part of the standard." ifTrue:[^self error:'Cannot decompress encrypted stream. Encryption is not part of RFC1952']. It is a better presentation to a user if you can indicate that it is someone else's fault that their decompress failed, and not Pharo. [2] http://www.onicos.com/staff/iz/formats/gzip.html [3] http://research.cs.wisc.edu/wpis/examples/pcca/gzip/gzip.h [3] http://www.gzip.org/#faq15! gzip is an integral part of the VM. ! gzip is an integral part of the VM. ! Support for GeneralScrollPane.! A scroll pane that handles its contents accurately.! A Generator transforms callback interfaces into stream interfaces. When a producer algorithm provide results as callbacks (blocks) and a consumer algorithm expects streamable input, a Generator transforms one into the other, for example: | generator | generator := Generator on: [:g| Integer primesUpTo: 100 do:[:prime| g yield: prime]]. [generator atEnd] whileFalse:[Transcript show: generator next]. Instance Variables block: The block associated with the generator. continue: The continuation to return to. home: The home (root) context of the activated block next: The next object to return from the Generator. ! a URL type that can't be broken down in any systematic way. For example, mailto: and telnet: URLs. The part after the scheme name is stored available via the #locator message.! A GoBackStringMorph is a string morph which do not totally rotate but do some go and back! : Gofer, a person who runs errands. Origin 1960s: from go for, i.e. go and fetch. : ''The New Oxford American Dictionary'' !! Synopsis Gofer is a small tool on top of Monticello that loads, updates, merges, diffs, reverts, commits, recompiles and unloads groups of Monticello packages. Contrary to existing tools Gofer makes sure that these operations are performed as clean as possible: - Gofer treats packages from one or more repository in one operation. - Gofer works with fixed versions or tries to find the "latest" version using a given package name. - Gofer automatically assigns repositories to all packages, so that the other tools are ready to be used on individual packages. - Gofer makes sure that there is only one repository instance registered for a single physical location. - Gofer works with Monticello dependencies and uniformly treats them like the primary package. - Gofer prefers to work with faster repositories if there is a choice. - Gofer cleans up after Monticello, no empty class categories and no empty method protocols are to be expected. - Gofer supports operations to sync remote and local repositories with each other. !! Installation Gofer is included with the latest Pharo and GemStone distributions. To update to the latest version you can use Gofer itself: == Gofer upgrade In case you are missing Gofer in your image, grab it from *http://source.lukas-renggli.ch/gofer.html*. !! Description Gofer is very simple by design, the basic useage scenario is always the same and consists of three steps: # You specify one or more Monticello repository URLs. You can do this using the methods ==url:==, ==url:username:password:== (HTTP, FTP), ==directory:==, or ==repository:== if you need full control. You might also use the convenience methods like ==squeaksource:==, ==wiresong:==, or ==gemsource:== for well known repositories. Additionally the following settings are available: #- Gofer implicitly declares the local package cache as a repository. To disable the local package cache use the method ==disablePackageCache==, to re-enable use ==enablePackageCache==. #- Gofer throws an error if a repository is not reachable. To silently ignore repository erros use the message ==disableRepositoryErrors==, to re-enable use ==enableRepositoryErrors==. # You specify one or more Monticello packages you want to work with, by adding them to the Gofer instance. Use ==version:== to add a specific version, or use ==package:== to add the "latest" version in the given repository. Furthermore there is ==package:constraint:== that allows you to further constraint the version to be loaded in a block passed in as the second argument. # You specify one or more actions to be performed on the specified packages: | ==load== | Load the specified packages. | ==update== | Update the specified packages. | ==merge== | Merge the specified packages into their working copies. | ==localChanges== | Answer the changes between the base version and the working copy. | ==browseLocalChanges== | Browse the changes between the base version and the working copy. | ==remoteChanges== | Answer the changes between the working copy and the remote changes. | ==browseRemoteChanges== | Browse the changes between the working copy and the remote changes. | ==cleanup== | Cleans the specified packages. | ==commit== | Commit the modified specified packages. | ==commit:== | Commit the modified specified packages with the given commit message. | ==revert== | Revert the specified packages to the currently loaded version. | ==recompile== | Recompile the specified packages. | ==reinitialize== | Call the class side initializers on the specified packages. | ==unload== | Unload the specified packages. | ==fetch== | Download versions from remote repositories into the local cache. | ==push== | Upload local versions from local cache into remote repositories. !! Example To use Gofer to update to exact versions of the Kom Server, the 'latest' code of Seaside 2.8 and the 'latest' code of the Scriptaculous package that is committed by the author with the initials 'lr' one could evaluate: == Gofer new == squeaksource: 'KomHttpServer'; == version: 'DynamicBindings-gc.7'; == version: 'KomServices-gc.19'; == version: 'KomHttpServer-gc.32'; == update. == Gofer new == squeaksource: 'Seaside'; == package: 'Seaside2.8a'; == package: 'Scriptaculous' constraint: [ :version | version author = 'lr' ]; == load! A GoferPackageReference refers to the latest version of a Monticello package satisfying an additional constraint.! A GoferPackageReference refers to the latest version of a Monticello package.! A GoferReference is an abstract superclass for various kinds of references to Monticello packages and versions.! I'm a private and internal class to Gofer. I'm a command used to call the class side initializers on all package code.! A GoferRepositoryError is the error thrown when a repository cannot be accessed.! A GoferVersionReference refers to a specific version of a Monticello package in a particular repository. This class is the only one that can actually load the version, because it is the only one knowing where to find it.! A GoferVersionReference refers to a specific version of a Monticello package.! A GoogleAttachment is a representation of a google issue tracker attachment! A GoogleIssue is a representation of a Google Issue Tracker issue. see for a documentation of the google issue api.! A GoogleIssueComment is a representation of a Google Issue Tracker issue's comment! A GoogleIssueDescription is a representation of a Google Issue Tracker issue first comment (the Google API have a special name for it)! self example. IntegrationManager initialize. IntegrationManager default summary. see for a documentation of the google issue api.! Used to encapsulate the password to avoid a security breach! A user entity needed by Google to ensure authentification! A gradient fill style is a fill which interpolates smoothly between any number of colors. Instance variables: colorRamp Contains the colors and their relative positions along the fill, which is a number between zero and one. pixelRamp A cached version of the colorRamp to avoid needless recomputations. radial If true, this fill describes a radial gradient. If false, it is a linear gradient. isTranslucent A (cached) flag determining if there are any translucent colors involved. Class variables: PixelRampCache Recently used pixelRamps. They tend to have high temporal locality and this saves space and time.! I am paint which using color gradient for fills. The gradient is defined using color ramp in range between 0 and 1 where colors can be set at certain point. The color are interpolated between defined points. The color ramp is a collection of associations with keys - floating point values between 0 and 1 and values with Colors, for example: { 0 -> Color white. 1 -> Color black }. My subclasses used to define a concrete kind of gradient, while me is an abstract class which has common properties for all gradients: color ramp. Also, note that my subclasses representing backend-neutral gradients, encapsulating all necessary data, which is then passed to corresponding surface factory method, like AthensSurface>>#createLinearGradient:start:stop: , which answers backend-specific gradient paint. I am userful in cases when user wants to define a paint without need to have any Athens surface at hand. Sure thing, using backend-specific gradients is preferable, if possible, because conversion to backend-specific paint can be costly. Especially if gradient is statically defined (ramp values and other parameters never changing) and used many times during the life time of surface. ! This class provides the support for Greek. It is here, but most of the methods are not implemented yet. ! A GroupAreadyExists is an exception raised when a group with the provided name already exists! I'm a morph where you can drag windows to group them as tabs. Try: (GroupWindowMorph new openInWindowLabeled: 'Window organizer') extent: 400@400.! Groupbox with title with a vertical layout. Appears in a lighter colour than the owner's pane colour.! A GroupsAlreadyExists is fired when a set of groups already exists firstGroup points to a correct group which was part of the set! A GroupsHolder is a simple object which manage a collection of groups! A GroupsManager should be a singleton. It manages all the groups of the system, to be able to share groups among tools! A GrowlMorph is a little Morph to announce event happening. Freely inspired from the MIT Snarl developed by Tony Garnock-Jones. GrowlMorph new openInWorld 10 timesRepeat: [ (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) " vanishDelay: 1000; resetVanishTimer". World doOneCycle ] (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) actionBlock: [Transcript open]! ColorComponentSelector showing a hue rainbow palette.! HMAC is a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. See RFC 2114.! Colour selector featuring a saturation/volume area, hue selection strip and alpha selection strip.! Colour selector featuring a saturation/volume area and a hue selection strip.! I am HTTPProgress, a notification to show progress when using HTTP. I include - total: The total size of the download/upload (if known) - amount: The completed amount of the download/upload (if known) Use #total:, #amount: or #amountLeft: to set the appropriate byte counts to indicate progress. Use #fraction or #percentage as a value that indicates progress. Total and amount are optional and can be nil. Test using #isEmpty. You can try HTTPProgress example. ! This class is deprecated in Pharo 2.0 since 2012-10-03T18:02:49Z. Use ZnClient to build, execute and process HTTP client requests.! This morph provides a halo of handles for its target morph. Dragging, duplicating, rotating, and resizing to be done by mousing down on the appropriate handle. There are also handles for help and for a menu of infrequently used operations.! Sets spec's for how handles are layed out in a halo.! Halt is provided to support Object>>halt.! The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging. There is some minimal support for multiple hands in the same world.! A HandleMorph provides mouse-up control behavior.! I am a simple TestCase that tests for correct operation of #hash and #=. Subclasses of me need to fill my prototypes with suitable objects to be tested.! HashTableSizes is a helper class, used by hashedCollections to determine sizes for hash tables. Public protocol is all class-side: #goodSizeAtLeast: anInteger answers a "good" integer greater than or equal to the given integer. An integer is not "good" as a hash table size if it is any of: * Not prime * Divides 256**k +- a, for small k and a * Close to a power of two * Close to dividing the hashMultiply constant See Andres Valloud's hashing book, and Knuth TAOCP vol. 3. This class caches a table of selected good primes within the positive SmallInteger range. When this table must be rebuilt, it uses an instance to compute the table. Primes are selected to keep the table fairly small, with approximately five entries per power of two. The cached table is ordered, and is searched with a binary search to find the closest good size >= the requested size.! I provide a simple way to test the hash properties of any object. I am given an object that should be tested and I treat it like a prototype. I take a copy of it when I am given it so that it can't change whilst I am holding on to it. I can then test that multiple copies of this object all hash to the same value.! I am a simple test case to check that HashTester works correctly! I am an abstract collection of objects that implement hash and equality in a consitent way. This means that whenever two objects are equal, their hashes have to be equal too. If two objects are equal then I can only store one of them. Hashes are expected to be integers (preferably SmallIntegers). I also expect that the objects contained by me do not change their hashes. If that happens, hash invariants have to be re-established, which can be done by #rehash. Since I'm abstract, no instances of me should exist. My subclasses should implement #scanFor:, #fixCollisionsFrom: and #noCheckNoGrowFillFrom:. Instance Variables array: (typically Array or WeakArray) tally: (non-negative) array - An array whose size is a prime number, it's non-nil elements are the elements of the collection, and whose nil elements are empty slots. There is always at least one nil. In fact I try to keep my "load" at 75% or less so that hashing will work well. tally - The number of elements in the collection. The array size is always greater than this. Implementation details: I implement a hash table which uses open addressing with linear probing as the method of collision resolution. Searching for an element or a free slot for an element is done by #scanFor: which should return the index of the slot in array corresponding to it's argument. When an element is removed #fixCollisionsFrom: should rehash all elements in array between the original index of the removed element, wrapping around after the last slot until reaching an empty slot. My maximum load factor (75%) is hardcoded in #atNewIndex:put:, so it can only be changed by overriding that method. When my load factor reaches this limit I replace my array with a larger one (see #grow) ensuring that my load factor will be less than or equal to 50%. The new array is filled by #noCheckNoGrowFillFrom: which should use #scanForEmptySlotFor: instead of #scanFor: for better performance. I do not shrink. ! Heap implements a special data structure commonly referred to as 'heap' [ http://en.wikipedia.org/wiki/Heap_%28data_structure%29 ] Heaps are good at handling priority queues because: 1) greatest priority element according to the sort block will be stored in first position and thus accessed in O(1) operations 2) worse time for inserting or removing an element is in O(log n) operations, where n is the size of the Heap Insertion/Removal times are more efficient than above upper bound, provided that: a) Elements are only removed at the beginning b) Elements are added with arbitrary sort order. 3) there is no need to fully sort the Heap, which makes it more efficient than a SortedCollection The heap can be fully sorted by sending the message #fullySort. Worse time for fully sorting the Heap is in O(n log n) operations, but this is rarely used a feature. Remind that the Heap does not fully sort the collection if you don't ask. Thus don't expect #do: and other iterators to enumerate elements according to the sortBlock order. Instance variables: array The data repository tally The number of elements in the heap sortBlock A two-argument block defining the sort order, or nil in which case the default sort order is [:element1 :element2| element1 <= element2] indexUpdateBlock A two-argument block of the form [:data :index | ... ] which allows an application object to keep track of its index within the heap. Useful for quick heap update when object's sort value changes (for example, when an object in a priority queue has its priority increased by an external event, you don't want to have to search through the whole heap to find the index before fixing the heap). No update occurs if nil. The Heap can be viewed as a binary tree (every node in the tree has at most two children). The root is stored in first slot of internal array. The children are stored in next two slots. The children of children in next four slots. etc... For a node A of index i (1 based), the two children B1 and B2 are thus stored in indices (2*i) and (2*i+1). Of course, the children indices must be less than the tally otherwise they are considered inexistent. The Heap does arrange to preserve the following invariant: For any children B of a node A, A is sorted before B, in other words, (self sort: A before: B) = true This implies that the root is always the first element according to sort order. ! This class represents the browsable package API help for the help system. Instance Variables ! A HelpBrowser is used to display a hierarchy of help topics and their contents. Instance Variables rootTopic: window: treeMorph: contentMorph: rootTopic - xxxxx window - xxxxx treeMorph - xxxxx contentMorph - xxxxx ! This is an utility class that builds the books for a help system. Instance Variables rootTopics: rootTopics - a collection of books ! This class is used to store help icons for the help browser. Typically one implements a method returning a 12x12 Form instance which should not be called directly. Since the class provides an internal icon cache (so the icons can be reused without creating too many new instances) the icons should be accessed using the #iconNamed: message with the method selector as argument. To create a form from an icon file stored on disk you can use the following code: | image stream | image := ColorForm fromFileNamed: '/path/to/icon.png'. stream := WriteStream with: String new. image storeOn: stream. stream contents inspect.! Welcome to Pharo Smalltalk Help System! A HelpTopic provides content information that can be used as a help to the user. It can be labeled with a title, identified using an (optional) unique key and marked with an (optional) icon. Help topics form a hierarchy since any topic is able to have zero or more subtopics. Instance Variables contents: The help topic contents icon: An optional icon for the topic key: An optional unique key subtopics: A collection of subtopics title: The title contents - The help topic contents - typically containing the help topics information icon - An optional icon for the topic key - An optional unique key which can be used to identify the topic. subtopics - A collection of subtopics. By default the subtopics are not sorted, so the insertion order is used. If necessary it is possible to sort the subtopics by title. title - A meaninful title for the help topic ! This class implements a list item wrapper for help topics. Instance Variables ! A URL which has a hierarchical encoding. For instance, http and ftp URLs are hierarchical.! I'm a data structure used to store an history. My behavior is - I store Associations (anElement -> anInteger), where anElement is the element to store and anInteger the number of times it has been added. (as a Dictionary) - I only store once each element (as a Set). - I have a max size. If I add an element and have reached the max size, I remove the less seen element. - I store element in the chronological order (as an OrderedCollection)! A HistoryIterator holds an UndoRedoGroup in order to store an history of commands with the possibility of undoing and redoing. The iterator cursor is represented by the index inst var. Index always contains the position of the command that can be currently undone. So, undo decrease index and redo increase index. When a new record is stored, then, index contains the newly added record position. See HistoryIteratorTest for examples. Instance Variables index: maxSize: plugged: recorder: index - the iterator cursor maxSize - the maximum number of records that can be added in the root group. plugged - if false, then adding of command is not allowed. Useful to prevent bad history recording recurssions (record while undoing or redoing). recorder - The root of the history tree which records undo/redo commands ! This class represents the abstract leaf structure of items stored in History tree. Composite nodes of such trees are made of HistoryNode instances. For a particular use, this class need to be subclassed. See for example UndoRedoRecord! A HistoryNode is composite node of an history tree. It is made to contain some other HistoryNode or HistoryLeaf instances. A subnode is added with #addItem: In order to add and feed a new subtree, one can use openGroup which add a new HistoryNode. When openGroup is sent to an HistoryNode named H, then a new group G is added and all subsequent sent of #addItem: or of #openGroup to H will update the new node G until G is closed by a closeGroup. As examples: --------------- H := HistoryNode new. H addItem: (i1 := HistoryLeaf new). --------------- gives: H i1 --------------- H := HistoryNode new. H openGroup. "add a new group named g1" H addItem: (i1 := HistoryLeaf new). H addItem: (i2 := HistoryLeaf new). -------------- gives: H g1 i1 i2 -------------- H := HistoryNode new. H openGroup. "add a new group named g1" H openGroup. "add a new group named g2" H addItem: (i1 := HistoryLeaf new). H addItem: (i2 := HistoryLeaf new). -------------- gives: H g1 g2 i1 i2 -------------- H := HistoryNode new. H openGroup. "add a new group named g1" H openGroup. "add a new group named g2" H addItem: (i1 := HistoryLeaf new). H closeGroup. "close g2" H addItem: (i2 := HistoryLeaf new). H closeGroup. "close g1" H addItem: (i3 := HistoryLeaf new). -------------- gives: H g1 g2 i1 i2 i3 Also se HistoryNodeTest. Instance Variables history: opened: history - The list of subnodes (HistoryLeaf or HistoryNode instances) opened - true if the node is opened for adding ! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! IRAccess models all bytecodes that read or write variables or self/super/thisContext! I provide a simple interface for constructing an IRMethod. For example, to create an ir method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in BytecodeGenerator), do: IRBuilder new numArgs: 1; addTemps: #(a z); pushReceiver; pushInstVar: 1; pushTemp: #a; send: #>; jumpAheadTo: #else if: false; pushLiteral: 'yes'; returnTop; jumpAheadTarget: #else; pushLiteral: 'no'; returnTop; ir Sending #compiledMethod to an ir method will generate its compiledMethod. Sending #methodNode to it will decompile to its parse tree. ! I interpret bytecode instructions, sending the appropriate instruction messages to my IRBuilder, resulting in an IRMethod.! I generate bytecodes in response to 'instructions' messages being sent to me. I rewrite jumps at the end so their jump offsets are correct (see #bytecodes). For example, to create a compiled method that compares first instVar to first arg and returns 'yes' or 'no' (same example as in IRBuilder), do: BytecodeGenerator new numArgs: 1; pushInstVar: 1; pushTemp: 1; send: #>; if: false goto: #else; pushLiteral: 'yes'; returnTop; label: #else; pushLiteral: 'no'; returnTop; compiledMethod You can send #ir to the compiledMethod to decompile to its IRMethod, and you can send #methodNode to either to decompile to its parse tree. ! I am an internal class used by the decompiler to recreat variable information! I am a bytecode accessing an instance variable. As such, I have an index.! I am an instruction in the IR (intermediate representation) language. The IR serves as the intermediary between the Smalltalk language and the bytecode language. It is easier to optimize and translate to/from this language than it is to optimize/translate directly from Smalltalk to bytecodes. The IR is generic and simple consisting of just twelve instructions. They are: goto: labelNum if: boolean goto: labelNum1 otherwise: labelNum2 label: labelNum popTop pushDup pushLiteral: object pushTemp: name blockReturn returnTop send: selector send: selector toSuperOf: behavior storeTemp: name Each instruction is reified as an instance of one of my subclasses and grouped by basic block (IRSequence) into an IRMethod. IRInterpreter visits each instruction in a IRMethod responding to the above instruction messages sent to it. ! I visit each IRInstruction in an IRMethod in order. Each instruction sends its instruction message to me upon being visited. See my 'instructions' method category for complete list of instructions. Subclasses should override them.! Instruction "goto: labelNum"! Instruction "if: boolean goto: labelNum1 otherwise: labelNum2"! LiteralVariables are -> Globals -> Pool access -> Class Var access! I am a method in the IR (intermediate representation) language consisting of IRInstructions grouped by IRSequence (basic block). The IRSequences form a control graph (therefore I only have to hold onto the starting sequence). #compiledMethod will convert me to a CompiledMethod. #methodNode will convert me back to a parse tree. ! Instruction "popTop"! I represent a primitive. I am more than just a number if I am a named primitive. Structure: num Primitive number. spec Stored in first literal when num is 117 or 120. ! I interpret IRMethod instructions and write them out to a print stream.! Instruction "pushDup"! Instruction "pushLiteral: object"! I am modelling the push self bytecode! I am a specialized IRBuilder for the decompiler! I model the TempVector for the decompiler! Instruction "returnTop"! Instruction "send: selector" or "send: selector toSuperOf: behavior"! This keeps track of the stack count for the BytecodeGenerator.! I model the pushTemporary Bytecode! I interpret IRMethod instructions, sending the appropriate bytecode messages to my BytecodeGenerator (gen). I hold some messages back in pending awaiting certain sequences of them that can be consolidated into single bytecode instructions, otherwise the pending messages are executed in order as if they were executed when they first appeared.! Text converter for ISO 8859-15. An international encoding used in Western Europe, similar to ISO 8859-1 but adds the Euro symbol and drops others like one quarter.! Text converter for ISO 8859-2. An international encoding used in Eastern Europe.! Text converter for ISO 8859-7. An international encoding used for Greek.! An IconListModel is a spec model for icon list! An IconListSpec is a spec use to describe a list with icons! A "Simple Button" in which the appearance is provided by a Form.! An IconicButtonStateHolder is a state holder for Iconic button. Since Nautilus cache the icon, I do not want to keep pointers to the iconic button's target. I use this state holder for the storage! I am a wrapper used to display a morph with ahead an icon. Here is the way to use me IconicListItem new icon: UITheme current smallOkIcon asMorph; morph: 'Accept' asMorph; yourself! An IdentifierChooserMorph is a menu builder which takes a list of labels as input and build/popup a menu for them. The morph could be made of one menu in one column for all labels of of several menus in a scrollabe row. The action which is performed when a menu item is selected is also parametrized (see examples below). The morph can take the keyboard focus and then, up, down, left and right arrows can be used to choose a menu item. It is the responsibility of the user of this morph to decide when and how the keyboard focus is token. The design is widely inpired from PopupChoiceDialogWindow. example 1 A very simple example with three label. The nil value will be represented as a menu line in the resulting morph. (IdentifierChooserMorph labels: {'aaaaaa'. 'bbbbbbb'. nil. 'cccccccc'} chooseBlock: [ :chosen | UIManager default inform: (chosen, (' has been chosen' translated))]) open example 2 The same except that a color is specified (IdentifierChooserMorph labels: {'aaaaaa'. 'bbbbbbb'. nil. 'cccccccc'} chooseBlock: [ :chosen | UIManager default inform: (chosen, (' has been chosen' translated))]) baseColor: Color white; open example 3 Allows the presentation of one menu (one column) vith two fixed labels followed by the list of all classes. (IdentifierChooserMorph labels: ({'aaaaaa'. 'bbbbbbb'}, { nil }, (Object allSubclasses collect: [:c | c theNonMetaClass name]) asSet asArray sort) chooseBlock: [ :chosen | (Smalltalk globals at: chosen asSymbol) ifNotNil: [:c | c browse] ]) oneMenuOfWidth: 300; baseColor: Color white; open Instance Variables baseColor: choiceMenus: choicesMorph: chooseBlock: labels: maxLines: requestor: scrollPaneWidth: baseColor - The color used for the menu items and the receiver choiceMenus - The array of EmbeddedMenuMorph choicesMorph - The AlignmentMorph which contains all menus chooseBlock - A block with one argument which is evaluated when a menu item is selected. The argument takes the chosen label as argument labels - The array of labels maxLines - If not nil, gives the maximum number of lines for one menu requestor - if not nil, a Morph from which the receiver is built scrollPaneWidth - The maximum width of the scrollPane, this contraints the width of the receiver. ! Like a Bag, except that items are compared with #== instead of #= . See the comment of IdentitySet for more information. ! Like a Dictionary, except that keys are compared with #== instead of #= . See the comment of IdentitySet for more information.! An IdentityMorphTreeListManager is a MorphTreeListManager which always check for identity between items ! An IdentityMorphTreeMorph is a MorphTreeMorph which always check for identity between items ! The same as a Set, except that items are compared using #== instead of #=. Almost any class named IdentityFoo is the same as Foo except for the way items are compared. In Foo, #= is used, while in IdentityFoo, #== is used. That is, identity collections will treat items as the same only if they have the same identity. For example, note that copies of a string are equal: ('abc' copy) = ('abc' copy) but they are not identitcal: ('abc' copy) == ('abc' copy) A regular Set will only include equal objects once: | aSet | aSet := Set new. aSet add: 'abc' copy. aSet add: 'abc' copy. aSet An IdentitySet will include multiple equal objects if they are not identical: | aSet | aSet := IdentitySet new. aSet add: 'abc' copy. aSet add: 'abc' copy. aSet ! An IgorsPlugin is a plugin which displays info about the current selection! This class is private to the EHS implementation. An instance of it is signaled whenever an attempt is made to resume from an exception which answers false to #isResumable.! Simple fillstyle that draws a (potentially translucent) form at the specified origin. Direction and normal are unused.! ImageMorph is a morph that displays a picture (Form). My extent is determined by the extent of my form. Use #image: to set my picture. Structure: instance var Type Description image Form The Form to use when drawing Code examples: ImageMorph new openInWorld; grabFromScreen (Form fromFileNamed: 'myGraphicsFileName') asMorph openInWorld Relationship to SketchMorph: ImageMorph should be favored over SketchMorph, a parallel, legacy class -- see the Swiki FAQ for details ( http://minnow.cc.gatech.edu/squeak/1372 ). ! Displays an image scaled to a fixed size along with a label describing the original dimensions.! Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. I am an abstract class to provide for encoding and/or decoding an image on a stream. Instance Variables: stream stream for image storages Class Variables: ImageNotStoredSignal image not stored error signal MagicNumberErrorSignal magic number error signal Subclasses must implement the following messages: accessing nextImage nextPutImage: testing canUnderstand (added tao 10/26/97)! I am a Hack. I am a notification used to know if the the current process is in the middle of a FileIn. But I am used everywhere. Probably I should be removed, but not now.! An IndentingListItemMorph is a StringMorph that draws itself with an optional toggle at its left, as part of the display of the SimpleHierarchicalListMorph. It will also display lines around the toggle depending on UITheme settings Instance variables: indentLevel the indent level, from 0 at the root and increasing by 1 at each level of the hierarchy. isExpanded true if this item is expanded (showing its children) complexContents an adapter wrapping my represented item that can answer its children, etc. firstChild my first child, or nil if none container my container nextSibling the next item in the linked list of siblings, or nil if none. Contributed by Bob Arning as part of the ObjectExplorer package. Don't blame him if it's not perfect. We wanted to get it out for people to play with.! I am an eye element for indexable fields. (at:)! I am InexactFloatPrintPolicy. Through FloatPrintPolicy and double dispatch I force Float>>#printOn:base: to dynamically use the faster but potentially less accurate way to print Floats using Float>>#absPrintOn:base:! I represent a Form obtained by replicating a pattern form indefinitely in all directions.! This class implements the Inflate decompression algorithm as defined by RFC1951 and used in PKZip, GZip and ZLib (and many, many more). It is a variant of the LZ77 compression algorithm described in [LZ77] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data Compression", IEEE Transactions on Information Theory", Vol. 23, No. 3, pp. 337-343. [RFC1951] Deutsch. P, "DEFLATE Compressed Data Format Specification version 1.3" For more information see the above mentioned RFC 1951 which can for instance be found at http://www.leo.org/pub/comp/doc/standards/rfc/index.html Huffman Tree Implementation Notes: =========================================== The huffman tree used for decoding literal, distance and length codes in the inflate algorithm has been encoded in a single Array. The tree is made up of subsequent tables storing all entries at the current bit depth. Each entry in the table (e.g., a 32bit Integer value) is either a leaf or a non-leaf node. Leaf nodes store the immediate value in its low 16 bits whereas non-leaf nodes store the offset of the subtable in its low 16bits. The high 8 bits of non-leaf nodes contain the number of additional bits needed for the sub table (the high 8 bits of leaf-nodes are always zero). The first entry in each table is always a non-leaf node indicating how many bits we need to fetch initially. We can thus travel down the tree as follows (written in sort-of-pseudocode the actual implementation can be seen in InflateStream>>decodeValueFrom:): table := initialTable. bitsNeeded := high 8 bits of (table at: 1). "Determine initial bits" table := initialTable + (low 16 bits of (table at: 1)). "Determine start of first real table" [bits := fetch next bitsNeeded bits. "Grab the bits" value := table at: bits. "Lookup the value" value has high 8 bit set] whileTrue:[ "Check if it's leaf" table := initialTable + (low 16 bits of value). "No - compute new sub table start" bitsNeeded := high 8 bit of value]. "Compute additional number of bits needed" ^value ! EventFetcher is responsible for fetching the raw VM events and forward them to the registered event handlers. Event fetching is done in a high priority process, so even with other processes (e.g. the Morphic UI process) being busy events will still be fetched. Instance Variables inputSemaphore: eventHandlers fetcherProcess inputSemaphore - a semaphore registered with the VM to signal availability of an event. Currently not supported on all platforms. eventHandlers - registered event handlers. Event buffers are cloned before sent to each handler. fetcherProcess - a process that fetches the events from the VM. Either polling (InputEventPollingFetcher) or waiting on the inputSemaphore. Event format: The current event format is very simple. Each event is recorded into an 8 element array. All events must provide some SmallInteger ID (the first field in the event buffer) and a time stamp (the second field in the event buffer), so that the difference between the time stamp of an event and the current time can be reported. Currently, the following events are defined: Null event ============= The Null event is returned when the ST side asks for more events but no more events are available. Structure: [1] - event type 0 [2-8] - unused Mouse event structure ========================== Mouse events are generated when mouse input is detected. Structure: [1] - event type 1 [2] - time stamp [3] - mouse x position [4] - mouse y position [5] - button state; bitfield with the following entries: 1 - yellow (e.g., right) button 2 - blue (e.g., middle) button 4 - red (e.g., left) button [all other bits are currently undefined] [6] - modifier keys; bitfield with the following entries: 1 - shift key 2 - ctrl key 4 - (Mac specific) option key 8 - Cmd/Alt key [all other bits are currently undefined] [7] - reserved. [8] - reserved. Keyboard events ==================== Keyboard events are generated when keyboard input is detected. [1] - event type 2 [2] - time stamp [3] - character code For now the character code is in Mac Roman encoding. [4] - press state; integer with the following meaning 0 - character 1 - key press (down) 2 - key release (up) [5] - modifier keys (same as in mouse events) [6] - reserved. [7] - reserved. [8] - reserved. ! An InputEventHandler is the abstract superclass for all input event handlers. Subclasses need to implement handleEvent:. Instance Variables eventFetcher: eventFetcher - the event fetcher I'm registered with and receiving my events from. ! An InputEventSensor is a replacement for the old Morphic EventSensor framework. It updates its state when events are received so that all state based users of Sensor (e.g., Sensor keyboard, Sensor leftShiftDown, Sensor mouseButtons) will work exactly as before. The usage of these funtions is discouraged. Instance variables: mouseButtons - mouse button state as replacement for primMouseButtons mousePosition - mouse position as replacement for primMousePt eventQueue - an optional event queue for event driven applications modifiers - modifier states Class variables: ButtonDecodeTable KeyDecodeTable ! I am a generic widget far a user to enter a string Example self example (printMe)! see BorderedMorph! I represent a query path into the internal representation of an object. As a StringHolder, the string I represent is the value of the currently selected variable of the observed object.! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! My job is to scan bytecodes for instance variable references. BlockContext allInstances collect: [ :x | {x. x hasInstVarRef} ].! This is the unit test for the class InstVarRefLocator. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! I collect and provide the information to migrate instances when a class changed.! I am an eye element for instance variables.! My job is to make it easier to implement clients for InstructionStream. See InstVarRefLocator as an example. ! This is the unit test for the class InstructionClient. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! My instances can print the object code of a CompiledMethod in symbolic format. They print into an instance variable, stream, and uses oldPC to determine how many bytes to print in the listing. The variable method is used to hold the method being printed.! This is the unit test for the class InstructionPrinter. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! My instances can interpret the byte-encoded Smalltalk instruction set. They maintain a program counter (pc) for streaming through CompiledMethods. My subclasses are Contexts, which inherit this capability. They store the return pointer in the instance variable sender, and the current position in their method in the instance variable pc. For other users, sender can hold a method to be similarly interpreted. The unclean re-use of sender to hold the method was to avoid a trivial subclass for the stand-alone scanning function.! I am a common abstract superclass for all Integer implementations. My implementation subclasses are SmallInteger, LargePositiveInteger, and LargeNegativeInteger. Integer division consists of: / exact division, answers a fraction if result is not a whole integer // answers an Integer, rounded towards negative infinity \\ is modulo rounded towards negative infinity quo: truncated division, rounded towards zero! IntegerArrays store 32bit signed Integer values. Negative values are stored as 2's complement.! I am IntegerInspector. I am an Inspector. I am a specialized Inspector for Integers. I add extra representations (hex, octal, binary) of the Integer object that I am inspecting.! I resolve origins by consulting the user. I maintain a cache of the user's responses.! I read several parameters related to the default web browser network preferences, through the InternetConfigPlugin VM module. For example, to get the default path where downloaded files should be placed: InternetConfiguration getDownloadPath. Seems to work only on MacOSX! Gradient fill style that uses proper alpha-aware interpolation.! I signal when there is an Error in the interpretation of the code in the ASTInterpreter. In my cause instance variable you can the see the original class of the Error. ! I represent a finite arithmetic progression.! I am an error raised by SlotClassBuilder.! I am signaled the name of default Slot is an invalid variable name.! Signals if an operation on a Socket found it in a state invalid for that operation. ! An IssueCreator is a UI to create a Google Issue Tracker entry! This class represents the domestic character encoding called JIS X 0208 used for Japanese.! I represent a single component of color in JPEG YCbCr color space. I can accept a list of blocks in my component from the current MCU, then stream the samples from this block for use in color conversion. I also store the running DC sample value for my component, used by the Huffman decoder. The following layout is fixed for the JPEG primitives to work: currentX currentY hSampleFactor vSampleFactor mcuBlocks > widthInBlocks heightInBlocks dctSize mcuWidth mcuHeight priorDCValue ! I represent the table of values used to decode Huffman entropy-encoded bitstreams. From the JFIF file header entropy values, I build a derived table of codes and values for faster decoding.! Encapsulates huffman encoded access to JPEG data. The following layout is fixed for the JPEG primitives to work: collection position readLimit bitBuffer bitsInBuffer ! I am a subclass of ImageReadWriter that understands JFIF file streams, and can decode JPEG images. This code is based upon the Independent Joint Photographic Experts Group (IJPEG) software, originally written in C by Tom Lane, Philip Gladstone, Luis Ortiz, Jim Boucher, Lee Crocker, Julian Minguillon, George Phillips, Davide Rossi, Ge' Weijers, and other members of the Independent JPEG Group. ! This class provides the Japanese support. Since it has been used most other than default 'latin-1' languages, this tends to be a good place to look at when you want to know what a typical subclass of LanguageEnvironment should do. ! A Job is a task to run and potentially notified to the user. [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: (0.1 * each); title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! A JobChange is an announcement for a job change. To get notify SystemAnnouncer uniqueInstance on: JobChange send: #XXX to: whoever.! A JobChange is an announcement for a job end. A JobChange is an announcement for a job change. To get notify SystemAnnouncer uniqueInstance on: JobEnd send: #XXX to: whoever.! A JobNotification class is an abstract class representing the root of JobNotification.! A JobProgress is a notification to announce job progress. For example [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: 0.1* each ; title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! A JobProgressBarMorph is a progress bar with a title and a icon to stop update. JobProgressBarMorph new openInWorld! I combine a progress title and a JobPorgressBarMorph to a visual representation of a Job. Usually I am contained in the global instance of the SystemProgressMorph! A JobStart is announcement announcing the start of a job execution. SystemAnnouncer uniqueInstance on: JobStart send: #XXX to: whoever.! A JobStartNotification is the first notification raised when a job start.! I represent the Alt key modifier. Look at my superclass for a more detailed explanaition.! I am a buffer of keyboard events. I am checked against key combinations to see if there is a match. I am cleared when the current morph loses focus or when a full match announcement is given.! I am a keymap builder that is used when configuring keymappings by pragmas. Send me the #shortcut: message with a keymap name, so I give you a specific builder to build a keymap. You can also tell me to install a category as global.! I am a morph that captures keymappings, so they can be used for configuration/customization, or debugging.! I am a keymap category. I represent a set of keymaps that can be attached to a morph, so morphs can share my keymaps.! I am the reification of the relation morph<->category, created when a morph gets attached a category of shortcuts.! I represent the Command key modifier. Look at my superclass for a more detailed explanaition.! I am an announcement raised when there is a full match between the key buffer and a shortcut.! I represent a composed key modifier. I contain a collection of modifiers that should match with a keyboard event. Look at my superclass for a more detailed explanaition.! I represent the Ctrl key modifier. Look at my superclass for a more detailed explanaition.! A KMDescription is a window showing the description of shortcuts for a specified set of symbols reprensenting KMCategories! I am an object that controls the dispatch order of keymaps given a hierarchy of morphs. ! I'm an object that saves a buffer of keyevents for the morph I'm attached. I am the one that dispatches the single and multiple shortcuts. If the morph has a keymap that matches the keyboard event, I tell the keymap event to execute with the morph I'm attached.! I am a class used to access some of the main classes of Keymapping. See my class side to have an idea of what can I give you.! I'm an abstract class representing a key combination. I'm can represent several cases of key presses: - simple key presses: pressing a single key, as a letter or number, or others like tab or space - modified key presses: a simple key + a modifier like shift or alt - option key presses: a list of key presses where only one of them should be valid - chained shortcuts: a sequence of shortcuts My more important protocols are: - matching: contains methods to control if a key combination is equals to other or matches a sequence of keyboard events - combining: defines simple ways to combine shorcut objects, like chaining them or modifying them For more information, look at my subclasses.! I representing a choice between key combinations. A keyboard event will match with me when any of my key combinations matches with it.! I represent a sequence of key combinations. In order to have a match between me and a user's key presses, all user events must match all of my inner shortcuts in the same exact order. To create a sequence of key combinations use the #, message. Like for example: $a command , $b shift! I am the real keymap. I have an action to evaluate when my keymap sequence is pressed.! I am a specific builder to configure one shortcut.! I am a simple log utility that can be enabled by sending the #setDebug and disabled by using #removeDebug. I trace the keymapping events.! I am a morph used for mock reasons.! I represent key combinations combining a single key + a modifier. The modifier could be a single modifier key (look at my subclasses) or a combination of them. For example, valid modified key combinations could be: - shift + a - ctrl + shift + c To create a modified key combinations use the #command, #alt, #control or #shift messages. Like for example: $a command $b shift $1 control $z alt! I'm an abstract class representing a key modifier. A modifier is a key that is pressed to modify the value of a following key. For example, valid modifiers are Alt, Ctrl, Cmd (only for macosx), Shift. Additionally, I could be a composed modifier, combining several of the named above. For example, I could have a value of Alt + Ctrl.! I am a Null object representing the absence of a Keymap.! I do not match with any keyboard event. I respond to the Null object pattern, since I represent the inexistance of a key combination.! A KMPartialMatch is an announcement raised when a partial match is completed! I represent a platform specific key combination, one that should only be launched for a particular platform such as windows, unix or mac. I'm a sort of decorator of a key combination.! I am a singleton object, subscribed to system events, to listen to the creation of methods marked with the and keymap:> pragmas. When I listen one of those events, I reinitialize the KMRepository default instance and reload it with all declared keymaps.! I have a singleton instance which can be accessed by executing the following: "self default" I am currently a god object to be refactored =D.! I represent the Shift key modifier. Look at my superclass for a more detailed explanaition.! I represent a shortcut declaration for the settings pharo framework.! I represent a shortcut setting. I relate a keymap with its default shortcut and its current shortcut, so it can be mutated.! I represent a single key press, the simplest key combination. I match with a keyboard event when that event key is the same as me and the key event is not modified. To create a single key combination use the #asShortcut message. Like for example: $a asShortcut! I am a storage of shortcuts. I store and provide facilities to access named and annonimous shortcuts.! I am the reification of the Keymap target. I am the one that receives the actions.! This class represents the domestic character encoding called KS X 1001 used for Korean.! I represent a keyboard Key. I am mapped from the platform specific keycodes into a common keycode base, by using my class side methods.! A KeyChain is a holder for username/password. It can be queried by the system to prevent the user to be forced to set his or her password each time. keys have this structure: |- group1 (by example squeaksource) -> (username -> password) |- group2 (by example smalltalkhub) -> (username -> password)! A KeyChainViewer is a GUI to see and edit values of a keychain! I am KeyNotFound, an exception indicating that a key was not found in a Dictionary.! I am a morph that prints the keys in the keyboard events. KeyPrinterMorph new openInWorld! I am a keyboard event. I contain the char code of the event pressed, the modifiers pressed, and the keycode of the key pressed.! A KeychainEditingWrapper is a simple wrapper for the KeychainEditor ! A KeychainEditor is a GUI for editing keychain entrie! Provides path based access to elements contained in the receiver and any subtrees. Example: (KeyedTree new at: 1 put: 'One'; at: 2 put: 'Two'; at: 'Tree' put: (KeyedTree new at: $a put: 'Tree-A'; at: $b put: 'Tree-B'; yourself); yourself) atPath: #('Tree' $b)! I am a dispatcher that dispatches the global keymappings.! A KonamiCodePlugin is a plugin which run an action when the Konami code is entered! This class provides the Korean support. Unfortunately, we haven't tested this yet. We did have a working version in previous implementations, but not this new implementation. But as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! This is a thread-safe LIFO (last-in-first-out) queue (also known as stack) implementation, based on atomic operations. ! I'm a cache of values, given a key I return a Value from the cache or from the factory! I am an announcement raised when someone click on the label of a CheckboxMorph! A LabelModel is a spec model for Labels! String morph with enablement support. When disabled the text will appear inset.! A LabelSpec is a spec used to describe a label! The name multilingualized Squeak suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same. Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well. When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical. Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least. ! Just like LargePositiveInteger, but represents a negative number.! I represent positive integers of more than 30 bits (ie, >= 1073741824). These values are beyond the range of SmallInteger, and are encoded here as an array of 8-bit digits. Care must be taken, when new values are computed, that any result that COULD BE a SmallInteger IS a SmallInteger (see normalize). Note that the bit manipulation primitives, bitAnd:, bitShift:, etc., = and ~= run without failure (and therefore fast) if the value fits in 32 bits. This is a great help to the simulator.! This class represents the domestic character encoding called ISO-8859-1, also known as Latin-1 used for Most of the Western European Languages.! This class provides the support for the languages in 'Latin-1' category. Although we could have different language environments for different languages in the category, so far nobody seriously needed it. ! Text converter for ISO 8859-1. An international encoding used in Western Europe.! This class provides the support for the languages in 'Latin-2' category. Although we could have different language environments for different languages in the category, so far nobody seriously needed it. I (Yoshiki) don't have good knowledge in these language, so when Pavel Krivanek volunteered to implement the detail, it was a good test to see how flexible my m17n framework was. There are a few glitches, but with several email conversations over a few days, we managed to make it work relatively painlessly. I thought this went well. There seem that some source of headache, as Windows doesn't exactly use Latin-2 encoded characters, but a little modified version called 'code page 1250'. Similar to Japanese support, the encode interpreters are swapped based on the type of platform it is running on. ! This class provides the support for the languages in 'Latin-9' category.! Layout scopes reify how classes extend the layout of their superclass.! I am used in table layouts to hold temporary values while the layout is being computed. Instance variables: target The morph contained in this cell cellSize The size of the cell extraSpace Additional space to add after this cell nextCell The next cell in the arrangement. Implementation note: Both, cellSize and extraSpace contains points where x - represents the primary table direction y - represents the secondary table direction ! I am layout scope for classes.! I am the last layout scope in a scope chain.! I define a transformation frame relative to some rectangle. I'm basic data structure used for graphics. Instance variables: leftFraction topFraction rightFraction bottomFraction The fractional distance (between 0 and 1) to place the morph in its owner's bounds leftOffset topOffset rightOffset bottomOffset Fixed pixel offset to apply after fractional positioning (e.g., "10 pixel right of the center of the owner")! A LayoutPolicy defines how submorphs of some morph should be arranged. Subclasses of the receiver define concrete layout policies.! This class provides a compact bit encoding for the most commonly used layout properties.! I am the superclass for all layouts with Slots.! LazyClassListExample new openOn: Object ! The morph that displays the list in a PluggableListMorph. It is "lazy" because it will only request the list items that it actually needs to display. I will cache the maximum width of my items in maxWidth to avoid this potentially expensive and frequent computation.! Support for morph lists in PluggableMorphListMorph.! I am a MorphTreeMorph, but I only render the rows lazily as they appear on screen. Caveat: There is no rendering in the background. This means that if a row takes too long to render, you can experience a shorter or longer freeze when scrolling.! I represent a leaf node of the compiler parse tree. I am abstract. Types (defined in class ParseNode): 1 LdInstType (which uses class VariableNode) 2 LdTempType (which uses class VariableNode) 3 LdLitType (which uses class LiteralNode) 4 LdLitIndType (which uses class VariableNode) 5 SendType (which uses class SelectorNode). Note that Squeak departs slightly from the Blue Book bytecode spec. In order to allow access to more than 63 literals and instance variables, bytecode 132 has been redefined as DoubleExtendedDoAnything: byte2 byte3 Operation (hi 3 bits) (lo 5 bits) 0 nargs lit index Send Literal Message 0-255 1 nargs lit index Super-Send Lit Msg 0-255 2 ignored rcvr index Push Receiver Variable 0-255 3 ignored lit index Push Literal Constant 0-255 4 ignored lit index Push Literal Variable 0-255 5 ignored rcvr index Store Receiver Variable 0-255 6 ignored rcvr index Store-pop Receiver Variable 0-255 7 ignored lit index Store Literal Variable 0-255 This has allowed bytecode 134 also to be redefined as a second extended send that can access literals up to 64 for nargs up to 3 without needing three bytes. It is just like 131, except that the extension byte is aallllll instead of aaalllll, where aaa are bits of argument count, and lll are bits of literal index.! I am a subclass which work when VM does not supports finalization lists. I am about 3 times slower when it comes to finalizing items! A LimitedWriteStream is a specialized WriteStream that has a maximum size of the collection it streams over. When this limit is reached a special limitBlock is executed. This can for example be used to "bail out" of lengthy streaming operations before they have finished. For a simple example take a look at the universal Object printString. The message SequenceableCollection class streamContents:limitedTo: creates a LimitedWriteStream. In this case it prevents very large (or possibly recursive) object structures to "overdo" their textual representation. ! I'm a wrapper for a stream optimized for line-by-line access using #nextLine. My instances can be nested. I read one line ahead. Reading terminates when the stream ends, or if the limitingBlock evaluated with the line answers true. To skip the delimiting line for further reading use #skipThisLine. Character-based reading (#next) is permitted, too. Send #updatePosition when switching from line-based reading. See examples at the class side. --bf 2/19/1999 12:52! This is really only a shell for creating single-segment straight-line Shapes.! This class represents a straight line segment between two points Instance variables: start start point of the line end end point of the line ! I represent a linear gradient paint. My start and stop points defining the position and direction of gradient fill in user space coordinates, so that the ramp color at 0 maps to starting point and ramp color at 1 maps to stop point of linear gradient. Also check the comment of my superclass to know better how and when you can use me. ! An instance of me is a simple record of a pointer to another Link. I am an abstract class; my concrete subclasses, for example, Process, can be stored in a LinkedList structure.! A LinkedList is a sequential collection of objects where adjecent objects are linked by pointer. Using the message sequence addFirst:/removeLast causes the receiver to behave as a stack; using addLast:/removeFirst causes the receiver to behave as a queue. A LinkedList can be used to hold two different kinds of objecs: (a) Objects inheriting frm Link (b) Any objects. If you attempt to add any object into a LinkedList that is not a Link, it will automatically be wrapped by a ValueLink. A LinkedList therefore behaves very much like any collection, except that certain calls such as atIndex: are linear rather than constant time.! A set of test cases which thoroughly test functionality of the LinkedList class.! A ListComposableModel is an applicative model which handle a basic list. | t | t:= ListComposableModel new. t openWithSpec. t items: (Smalltalk allClasses). self example | t | t:= ListComposableModel new. t openWithSpec. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). | t | t:= ListComposableModel new. t openWithSpec. t filteringBlock: [:col | col select: [:each | each name beginsWith: 'Zn']]. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). ! testing ListComposableModel! A ListDialogWindow is a dialog window used to search an element into a list. A text field is provided to on the fly reduce the field or search! Contributed by Bob Arning as part of the ObjectExplorer package. ! Resusable model for a simple single selection list.! A ListSelectionModel is a basic example to show multi selection on lists | l | l := ListSelectionModel new. l openWithSpec! A ListSpec is a spec used to describe a list! A LiteralDictionary, like an IdentityDictionary, has a special test for equality. In this case it is simple equality between objects of like class. This allows equal Float or String literals to be shared without the possibility of erroneously sharing, say, 1 and 1.0! I am a parse tree leaf representing a literal string or number.! Usage: update [ --from-file= ] --from-file Use a local instead of updates.pharo.org An update file containing a list of .cs files Documentation: The update the image to the latest version. Usage: pharo Pharo.image update! I'm an abstract class which collect some infos about package and system (versions, dirty). #currentChangedPackages instance method and #currentMajorVersionNumber class are missing and provided by my wellknown subclass ScriptLoader (see ScriptLoader comment). Stef: This is a class that was extracted from scriptLoader because I want to slowly get in place a loader infrastructure based on Metacello.! Main comment stating the purpose of this class and relevant relationship to other classes. http://www.w3.org/WAI/ER/IG/ert/iso639.htm http://www.oasis-open.org/cover/iso639a.html See also http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/language_code_issues.html http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.10 ISO 3166 http://mitglied.lycos.de/buran/knowhow/codes/locales/ ! I am a tab which can be locked/unlocked with according action and icon! I describe a font.! I reference all font families available in the system. For example: LogicalFontManager current allFamilies. FreeTypeFontSelectorDialogWindow new open. ! Exception for signaling login failures of protocol clients. ! Dialog window displaying a message with a single OK button. Escape/return will close. Icon is a themed information icon. Handles long messages through use of a text editor with potential for scrolling.! I'm a TestCase which takes time to run. I can be disabled using #doNotRunLongTestCases and enabled again using #runLongTestCases. Tests that are long should be subclasses of myself. I also provide a setting for the SettingsBrowser! I represent a key for looking up entries in a data structure. Subclasses of me, such as Association, typically represent dictionary entries.! A MCAddition represents the operation to add an entity to a snapshot. ! Abstract superclass of records of ancestry.! I am a special monticello directory-based repository that is used for the global monticello cache. Most other repositories will first query the default cache repository for existing files before handling the request by themselves. For instance an http repository will first check if the file is in the caceh before doing a "slow" download.! A MCClassDefinition represents a class.! A MCClassInstanceVariableDefinition represents a class instance variable.! MCClassTraitParser identifies classTrait. ! A MCClassVariableDefinition represent a class variable.! MCCodeTool is an abstract superclass for those Monticello browsers that display code. It contains copies of the various CodeHolder methods that perform the various menu operations in the method list. ! An MCConfiguration specifies the configuration of a set of related Monticello packages. It maintains an ordered list of package versions and a list of repositories in which the packages may be found. An MCConfiguration may be filed out for storage as an array specification, and new instances can be created from a stored array specification. ! A MCConfigurationBrowser displays an MCConfiguration, and edits the configuration to add or remove package dependencies and repository specifications. It allows a configuration to be stored in a repository or posted to an update stream.! I am used to prompt in a UI indepentent way for a username and a password. If the user successfully entered the two strings I return an MCServerCredential if not I return nil.! This is the save-to-disk facility. A DataStream can store one or more objects in a persistent form. To handle objects with sharing and cycles, you must use a ReferenceStream instead of a DataStream. (Or SmartRefStream.) ReferenceStream is typically faster and produces smaller files because it doesn't repeatedly write the same Symbols. Here is the way to use DataStream and ReferenceStream: rr := ReferenceStream fileNamed: 'test.obj'. rr nextPut: . rr close. To get it back: rr := ReferenceStream fileNamed: 'test.obj'. := rr next. rr close. Each object to be stored has two opportunities to control what gets stored. On the high level, objectToStoreOnDataStream allows you to substitute another object on the way out. The low level hook is storeDataOn:. The read-in counterparts to these messages are comeFullyUpOnReload and (class) readDataFrom:size:. See these methods for more information about externalizing and internalizing. NOTE: A DataStream should be treated as a write-stream for writing. It is a read-stream for reading. It is not a ReadWriteStream. ! A MCDefinition is the root of inheritance of entities representing code. ! I'm a simple container of MCDefinitions which can be added or removed.! A MCDependencySorter computes the dependencies to a set of entities.! A MCDoItParser is a simple 'parser' which understand the addDefinitionsTo: message. Each parser can use the source and add definitions to the list of entities that is passed to them. MCDoitParser invokes automatically its subclasses to parse the correct source. Each Doit entities (entities which are defined as doits) extend this entry point to add specific behavior.! I'm a monticello tool composed of three panes to browse repositories and the packages they contain. You get an instance of me when you click on a repository in Monticello browser and press open. My left pane presents the packages, my right one their versions and the bottom one the commit log of the selected package versions. I underline the packages you already loaded, and highlight the ones you don't have updated to the last version. I also highlight the versions you did not load yet. Example: I can browse packages of PharoInbox with: (MCFileRepositoryInspector repository: (MCHttpRepository location: 'http://www.squeaksource.com/PharoInbox' user: '' password: '') workingCopy: nil) show. COTDC - S.Ducasse, G.Polito, L.Laffont! I am an monticello repository implementation for the FTP protocol.! An explicit subclass of MCHttpRepository to provide a template for gemstone repositories.! I am general http repository for monticello. I support the general protocol for listing files in a remote repository.! A MCInstanceVariableDefinition represents an instance variable definition.! A MCMergeOrLoadWarning is a simple warning used when amerge or a load action may override existing entities.! A MCMerger is an abstract responsible for performing merge operations and detecting conflicts.! A MCMethodDefinition represents a method definition. It captures the following information. Instance Variables category: classIsMeta: className: selector: source: timeStamp: ! This is a mock class. The Monticello tests manipulated it to simulate a developer modifying code in the image.! This comment has a bang!! Bang!! Bang!!! This class should be used instead of MCMockPackageInfo in the monticello tests! A MCModification represents the operation to modify an entity to a snapshot. ! A PackageLoader doing some additional cross-package checks! A MCOrganizationDefinition represents a category change. ! MCPackage represents a package. It is merely a wrapper on top of a package set or packageInfo. Strangely enough it does not inherit from MCDefinition. Its most important method is snapshot which returns a snapshot with all the entities that should be saved. ! I'm a kind of cache for versions and filenames of packages.! A MCPackageLoader is responsible for loading packages. It gets used by VersionLoader, so it is eventually responsible for loading everything. Instance Variables additions: Definitions that need to be added errorDefinitions: obsoletions: provisions: removals: requirements: unloadableDefinitions: methodAdditions MethodDefinitions corresponding to the Definitions in "additions" that have been added so far. ! MCPackageManager is a kind of package wrapper knowing if the package is dirty or not. The class side manages registered package managers. Instance Variables: package modified Class Instance Variables: registry ! An MCPackageModified is raised when a MCPackage is modified! I represent a set of patch operations which can be applied by sending message applyTo: to my instances. ! I'm an abstract class that represent an single delta element between two packages: removal, addition or modification.! I can add or remove or modify definitions. My main purpose is to generate monticello snapshot out of multiple snapshots or definitions by using my most used method #apply:to:.! I am signalled when a repositroy cannot save or access a version.! A MCPoolImportDefinition represents a pool definition.! A pseudo file stream which can be used for updates.! A MCRemoval represents the removal of an entity of a given snapshot.! I am an MC-specific errror! A singleton class, holds the list of repositories. Can look for a requested VersionInfo among its repositories.! Monticello's dialog that allows the user to change the version name and to enter a message for the commit log.! I scan / tokenize metadata (package name, version info, ancestry, dependencies, ...) found in .mcz files. For example, try: MCScanner scan: '(name ''MyPackage-ll.6'' message ''Fix bug xxx'' id ''b21dbd73-f1c3-2746-a3cc-92f1d4edea28'')' readStream! A MCScriptParser identifies script and add MCScriptDefinition. ! I store a username and password. ! MCSliceMaker is a dialog to help you making slices. It allows you to enter the slice number, the summary and to directly select dependent dirty packages. Then a slice package is added for you in the working copy browser from which it is opened. Just copy-paste issue number and summary. All is formated for you. Instance Variables info: okToDoSlice: window: info - It is the model for the user interface okToDoSlice - true if the OK button is clicked, it is to avoid slice making in case of cancel and in the case where the close button of the window has been clicked window - my window ! I am specialized version of an MCHttpRepository for http://smalltalkhub.com. I support a faster mcz listing that does not rely on parsing an html size.! MCSnapshot represents a list of entities compared to a given base entities. It holds a list of definitions (instances of MCDefinition subclasses). It can install these entities or update a package.! I am an abstract class defining the interface for reading sources containing class and method definitions. I should define loadDefinitions as a subclassResponsibility, but don't. MCVersionReader could be a subclass of me for reading sources containing additional metadata, but isn't. I'm useless and can be safely removed. I'm only referenced in MCMczReader>>extractDefinitionsFrom: and it can be replaced by MCReader.! I am a specialized MCHttpRepository for http://squeaksource.com. I optimize checks for existing files by doing a head request instead of reloading the whole file list first.! I read Category/Classes/Methodes/.... definitions from Monticello source.st file format. See also MCStWriter. Example: |source| source := String streamContents: [:aStream| |writer| writer := MCStWriter on: aStream. writer writeDefinitions: {True asClassDefinition. False asClassDefinition}. ]. (MCStReader on: source readStream) definitions explore.! I write Category/Classes/Methods/.... definitions into Monticello source.st file format found in .mcz packages. See also MCStReader Example: String streamContents: [:aStream| |writer| writer := MCStWriter on: aStream. writer writeDefinitions: {True asClassDefinition. False asClassDefinition}. ]! A MCDirectoryRepository that looks in subdirectories too.! I am not a subclass of MCRepositoryTest because my purpose was to show that a bug had been fixed and my author didn't feel like implementing all the reuirements of MCRepositoryTests! A MCSystemCategoryParser extracts or set a category/protocol to the corresponding MCOrganizationDefinition.! A MCThreeWayMerger is more advanced merge operation. Operations are subclasses of MCPatchOperation: addition (MCAddition), modification of an entity (MCModification ) and removal (MCRemoval). ! A MCTraitDefinition represents a trait.! A MCTraitParser extracts an MCTraitDefinition from the source.! A MCVariableDefinition represents a variable.! An MCVersionCreated is raised when a MCVersion is created ! Adds to the record of ancestry, other identifying details.! I serialize an MCVersionInfo into a given stream. If the version info has been serialized before I output a compacted version consiting of the id. ! I am a tool that visually represents an MCVersion. While I can be opened on anMCVersion, you've probably seen me most often after saving a package in the Monticello Browser. I have buttons to perform common version-related actions - like browsing, loading, and viewing changes. In my main text area, I display the following information about my version - name, author, timestamp, UUID, ancestors and log message.! A MCVersionLoader is responsible for loading a given version. ! The interim record of ancestry for a working copy, gets merged version added to the ancestry, and is used to create the VersionInfo when the working copy becomes a version. ! MCWorkingCopy represents one version of a package in memory. It provides support for ancestry access, required packages and the repositories in which the package is managed. Instance Variables: versionInfo ancestry counter repositoryGroup requiredPackages ! A MCWorkingCopyCreated is a announcement raised when a new MCWorkingCopy is created! A MCWorkingCopyDeleted class is an announcement raised when a MCWorkingCopy is removed! This class implements the MD5 128-bit one-way hash function. It uses the MD5Plugin for better performance. Some methods are taken from the original version of MD5NonPrimitive.! This class implements the MD5 128-bit one-way hash function. It relies on the ThirtyTwoBitRegister class supplied as part of the "Digital Signatures" functionality included in Squeak 2.7. As of this date (1/20/2000), the U.S. Government has lifted many of the previous restrictions on the export of encryption software, but you should check before exporting anything including this code. MD5 is commonly used for some secure Internet protocols, including authentication in HTTP, which is why I wrote it. Submitted by Duane Maxwell ! I'm a dummy class just to have a package that is not empty.! a MIME object, along with its type and the URL it was found at (if any)! I contain the value portion of a MIME-compatible header. I must be only initialized with the value and not the field name. E.g. in processing Subject: This is the subject the MIMEHeaderValue should be given only 'This is the subject' For traditional non-MIME headers, the complete value returned for mainValue and paramaters returns an empty collection. For MIME headers, both mainValue and parameters are used.! For local files, we do not read the entire contents unless we absolutely have to.! I guess and represent the content type of a file. For a description of what is MIME, see http://en.wikipedia.org/wiki/Internet_media_type http://en.wikipedia.org/wiki/MIME Examples: MIMEType forFileNameReturnMimeTypesOrDefault: 'index.html'. MIMEType fromMIMEString: 'application/zip'.! I am an expert on Mac OS X filesystem conventions. I resolve origins according to these conventions.! I am a an object representing a MacOSX platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! Text converter for Mac Roman. An encoding used for the languages originated from Western Europe area.! I'm a specific store for OSX file systems! I'm the abstract class Magnitude that provides common protocol for objects that have the ability to be compared along a linear dimension, such as dates or times. Subclasses of Magnitude include Date, ArithmeticValue, and Time, as well as Character and LookupKey. My subclasses should implement < aMagnitude = aMagnitude hash Here are some example of my protocol: 3 > 4 5 = 6 100 max: 9 7 between: 5 and: 10 ! Parse mail addresses. The basic syntax is: addressList := MailAddressParser addressesIn: aString This currently only returns the bare addresses, but it could also return a list of the address "source codes". For example, if you give it "Joe , ", it will currently return a list ('joe@foo' 'jane'). It would be nice to also get a list ('Joe ' '').! This is the unit test for the class MailAddressParser. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! a single token from an RFC822 mail address. Used internally in MailAddressParser! Divides an address into tokens, as specified in RFC 822. Used by MailAddressParser.! a message being composed. When finished, it will be submitted via a Celeste.! I represent an Internet mail or news message. text - the raw text of my message body - the body of my message, as a MIMEDocument fields - a dictionary mapping lowercased field names into collections of MIMEHeaderValue's parts - if I am a multipart message, then this is a cache of my parts! a URL specifying a mailing address; activating it triggers a mail-sender to start up, if one is present.! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser! ManifestManifestCriticBrowser is the manifest for the Manifest-CriticBrowser package itself.! Border with customisable inner margin.! I represent a two-dimensional array. Structure: nrows : a non-negative integer saying how many rows there are. ncols : a non-negative integer saying how many columns there are. contents : an Array holding the elements in row-major order. That is, for a 2x3 array the contents are (11 12 13 21 22 23). Element-wise matrix arithmetic works; you can freely mix matrices and numbers but don't try to mix matrices and arrays (yet). Matrix multiplication, using the symbol +* (derived from APL's +.x), works between (Matrix or Array) +* (Matrix or Array). Don't try to use a number as an argument of +*. Matrix * Number and Number * Matrix work fine, so you don't need +* with numbers. ! This class represents a transformation for points, that is a combination of scale, offset, and rotation. It is implemented as a 2x3 matrix containing the transformation from the local coordinate system in the global coordinate system. Thus, transforming points from local to global coordinates is fast and cheap whereas transformations from global to local coordinate systems are relatively expensive. Implementation Note: It is assumed that the transformation deals with Integer points. All transformations will return Integer coordinates (even though float points may be passed in here).! MatrixTransformMorph is similar to TransformMorph but uses a MatrixTransform2x3 instead of a MorphicTransform. It is used by clients who want use the BalloonEngine for vector-based scaling instead of the standard WarpBlt pixel-based mechanism.! This class conspires to arrange that inst var access for contexts is done exclusively using the long-form instance variabl;e access bytecodes. See InstructionStream class>>variablesAndOffsetsDo:. A virtual machine can benefit in performance by organizing method and block activations using a more conventional stack organization than by using first-class activation records (contexts). But such a virtual machine is also cabable of hiding the stack and making it appear as if contexts are still used. This means the system has better performance but still has all the benefits of first-class activation records. To pull this off the VM needs to intercept any and all accesses to context objects so that it can make contexts function as proxy objects for stack frames. Without help from the image such a virtual machine based on an interpreter would have to perform an expensive check on all instance variable accesses to determine if the instance variable was that of a context serving as a proxy for a stack frame. A simple hack is to take advantage of the short and long forms of instance variable access bytecodes. The BlueBook instruction set (and likely any bytecode set evolved from it) has short form bytecodes for fetching and storing the first few bytecodes (BlueBook fetch first 16, store first 8). Contexts typically have at most 6 instance variables. If we arrange to use the long-form bytecodes for all context inst var accesses then we only have to check for context inst var access in long-form bytecodes, and then only if the index is within the context inst var range. This effectively makes the check free because on modern processors checking an index fetched from memory into a register against a constant costs far less than the memry read to fetch the index.! I represent a memory file system entry for a directory! I am an abstract file system entry for a memory file system. My subclasses should specialize on the kind of file they are.! I represent a memory file system entry for a regular file! I provide "primitives" for doing IO on files in a MemoryFileSystem. I delegate most of my actions to the MemoryFile. This way there is only one place needed where the data is stored.! I'm a specific store for memory file system! I represent an item in a menu. Instance variables: isEnabled True if the menu item can be executed. subMenu The submenu to activate automatically when the user mouses over the item. isSelected True if the item is currently selected. target The target of the associated action. selector The associated action. arguments The arguments for the associated action. icon An optional icon form to be displayed to my left. ! Instance variables: defaultTarget The default target for creating menu items selectedItem The currently selected item in the receiver stayUp True if the receiver should stay up after clicks popUpOwner The menu item that automatically invoked the receiver, if any. activeSubMenu The currently active submenu.! A MenuRegistration stores the declaration of a menu item. It is mainly an handler for a PluggableMenuItemSpec. A menu item is declared withing a particular method tagged with a pragma. This kind-of method takes a builder as argument and its evaluation results in the building of a MenuRegistration sub-tree which is stored in the builder. As an example: MenuRegistrationExample class>>myOwnCoolToolRegistrationOn: aBuilder (aBuilder item: #MyOwnCoolTool) label: 'My own cool tool'; target: Workspace; selector: #openContents: ; arguments: #('yep, my own cool tool can be opened from the world menu !! :)') Evaluating this method results in the creation of a MenuRegistration which name is #MyOwnCoolTool. Thus, the resulting sub-tree is only made of a root node. After it has be built, this root node is recorded in the builder. To experiment this, just evaluate the following code: ------------- | builder | builder := PragmaMenuBuilder new. MenuRegistrationExample myOwnCoolToolRegistrationOn: builder. builder explore ------------- Using pragma allows the menu builder to dynamically discover which are the methods to evaluate in order to build a menu. Thus, a resulting menu is built by evaluating a set of methods which share the same pragma keyword. In the following example, all method having are evaluated for the building of the resulting menu: --------------- (PragmaMenuBuilder pragmaKeyword: 'worldMenuExample' model: nil) menu popUpInWorld --------------- Within a method, three kind of declarations can be used: (1) item by item (2) an item with a sub-menu and (3) a group. 1 - item by item menu registration declaration: This kind of declaring is for the setting of one menu item and only one within a method. 1.1 - A simple menu item with an action In the following example, a menu item with the name #'Browser' and a action which consists in sending #openClassBrowser to StandardToolSet is declared: AClassSomewhere class>>openBrowserOn: aBuilder (aBuilder item: #'Browser') target: StandardToolSet; selector: #openClassBrowser. A simple action without any argument can also be set with a block: (aBuilder item: #'Browser') action: [StandardToolSet openClassBrowser] You can also indicate a balloon help string and a particular icon: (aBuilder item: #'Browser') action: [StandardToolSet openClassBrowser]; help: 'Open a system browser'; icon: MenuIcons smallSystemBrowserIcon If the action needs one or several arguments, you can also give it/them as follow: (aBuilder item: #'Save and quit') target: SmalltalkImage current; selector: #snapshot:andQuit:. arguments: #(true true) By default, the item label is set with the item name but it can be explicitly given as follow: (aBuilder item: #'Browser') label: 'System browser'; target: StandardToolSet; selector: #openClassBrowser. 1.2 - Placing the menu item in a menu The resulting menu item of previous example will be placed at the root of the menu. In order to declare another place for it, you have to explicitly set its parent name. As an example, consider the following item which declares a simple entry with no action. Such item is typically used as a root for a sub-menu tree: AClassSomewhere class>>openToolsOn: aBuilder (aBuilder item: #'Tools') Now, a sub-menu item for #Tools can be declared separately, within another method by using the #parent: message: AnotherClassSomewhere class>>myToolsOn: aBuilder (aBuilder item: #'CoolTool') label: 'Cool tool'; parent: #Tools; Note that the argument of #parent: must be the name of another item. If it is not the case, then the parent name indication is simply ignored. 1.3 - Item ordering If no ordering setting is indicated, items ordering is unpredicable (it depends on method retrieving order). If one want an item to appear at a certain position, it is possible to set it by sending #order: to a MenuRegistration. The #order: message takes a float as argument. As an example, see the two following declarations, in the resulting menu, Wozy is placed before 'Wozy configuration' AnotherClassSomewhere class>>myWozySystemOpenOn: aBuilder (aBuilder item: #'Wozy') parent: #CoolTool; order: 1.0 AnotherClassSomewhere class>>myWozySystemConfigOn: aBuilder (aBuilder item: #'Wozy configuration') parent: #CoolTool; order: 2.0 2) Item with a submenu The one menu item - one declaring method way can be ugly. When a set a menu items are known to be put all-together, it is possible to declare the sub-tree in one method. The following example show such a sub-tree with the #Tools item at root and four sub-items declared in a single method. Note a menu target declared for the root is shared by all sub-items. In that case, it also remains possible for a sub-item to declare its own target. AClassSomewhere class>>openToolsOn: aBuilder (aBuilder item: #'Tools') target: StandardToolSet; "The target is shared by all children" with: [ "My sub-menu are given here" (aBuilder item: #'System browser') selector: #openClassBrowser. (aBuilder item: #Workspace) selector: #openWorkspace. (aBuilder item: #'Test Runner') selector: #openTestRunner. (aBuilder item: #'Monticello Browser') selector: #openMonticelloBrowser] 3) group of menu items When you want some items to be shown always grouped together, you can use a group. Its declaring is like an item with a submenu except that you are using the message #group: instead of #item:. The consequence is that only the children are shown in the menu. Of course, #label and #icon: are ignored for a group. Here is an example: AClassSomewhere class>>mostUsedToolsOn: aBuilder (aBuilder group: #MostUsedTools) "My name can be also used as parent name" withSeparatorAfter; "A separator will be added after my last child" order: 0; "the entire group will be placed at the top" target: StandardToolSet; "The target is shared by all children" with: [ (aBuilder item: #'System browser') selector: #openClassBrowser. (aBuilder item: #Workspace) selector: #openWorkspace. (aBuilder item: #'Test Runner') selector: #openTestRunner. (aBuilder item: #'Monticello Browser') selector: #openMonticelloBrowser] --------------------------- Instance Variables isGroup: itemList: order: owner: parentName: spec: isGroup - if true, then this item is ignored and flatten itemList - all my MenuRegistration (my sub-menus or my elements if i'm a group) order - my order in the owner list owner - my owner parentName - the declared parent name which serve as basis for PragmaBenuBuilder>>#arrangeRegistrations spec - my PluggableMenuItemSpec ! I'm here to show you how to use the menu registration. See class side methods and try it with: ---------------- (PragmaMenuBuilder pragmaKeyword: 'worldMenuExample' model: nil) menu popUpInWorld ---------------- ! I represent a selector and its argument values. Generally, the system does not use instances of Message for efficiency reasons. However, when a message is not understood by its receiver, the interpreter will make up an instance of me in order to capture the information involved in an actual message transmission. This instance is sent it as an argument with the message doesNotUnderstand: to the receiver.! This node represents accesses to temporary variables for do-its in the debugger. Since they execute in another context, they must send a message to the original context to access the value of the temporary variable in that context.! A MessageBrowser is a UI to browse a list of method, regardless of what they could be. example: MessageBrowser new openWithSpec; messages: (SystemNavigation new allSendersOf: #at:) yourself! A MessageBrowserTest is a test class for testing the behavior of MessageBrowser! Any message sent to me is returned as a Message object. "Message catcher" creates an instance of me. ! Dialog window displaying a message with a single OK button. Escape/return will close. Icon is a themed information icon.! MessageList is a simple object that holds a set of ordered method definitions. See MessageList example for an example. MessageList example Instance Variables: methodReferenceList ! A MessageListAbstractNode is an abstract node model. Instance Variables ! MessageListBrowser is the UI for instances of MessageList Instance Variables: messageList dictionary originalList selectedMorph treeMorph textArea dropList preference sortingSelector ! I represent a receiver and its message. Precedence codes: 1 unary 2 binary 3 keyword 4 other If special>0, I compile special code in-line instead of sending messages with literal methods as remotely copied contexts.! This exception is provided to support Object>>doesNotUnderstand:.! Instances of MessageSend encapsulate message sends to objects. Arguments can be either predefined or supplied when the message send is performed. Use #value to perform a message send with its predefined arguments and #valueWithArguments: if additonal arguments have to supplied. Structure: receiver Object -- object receiving the message send selector Symbol -- message selector arguments Array -- bound arguments! My instances observe and report the amount of time spent in methods. NOTE: a higher-level user interface (combining the MessageTally result tree with a method browser) is available from TimeProfileBrowser. Note that TimeProfileBrowser was not fancy with the different setting possibilities. TimeProfileBrowser spyOn: [20 timesRepeat: [Transcript show: 100 factorial printString]] Strategies ----------- MessageTally provides two different strategies available for profiling: * spyOn: and friends use a high-priority Process to interrupt the block or process being spied on at periodic intervals. The interrupted call stack is then examined for caller information. See below for an example showing different settings * tallySends: and friends use the interpreter simulator to run the block, recording every method call. The two give you different results: * spyOn: gives you a view of where the time is being spent in your program, at least on a rough statistical level (assuming you've run the block for long enough and have a high enough poll rate). If you're trying to optimize your code, start here and optimize the methods where most of the time is being spent first. * tallySends: gives you accurate counts of how many times methods get called, and by exactly which route. If you're debugging, or trying to figure out if a given method is getting called too many times, this is your tool. Q: How do you interpret MessageTally>>tallySends A: The methods #tallySends and #spyOn: measure two very different quantities, but broken down in the same who-called-who format. #spyOn: is approximate, but more indicative of real time spent, whereas #tallySends is exact and a precise record of how many times each method got executed. Examples ---------- Here you can see all the processes computation time [1000 timesRepeat: [3.14159 printString. Processor yield]] fork. [1000 timesRepeat: [30 factorial. Processor yield]] fork. [1000 timesRepeat: [30 factorial. Processor yield]] fork. MessageTally spyAllOn: [ (Delay forMilliseconds: 100) wait] Settings --------- You can change the printing format (that is, the whitespace and string compression) by using these instance methods: maxClassNameSize: maxClassPlusSelectorSize: maxTabs: You can change the default polling period (initially set to 1) by calling MessageTally defaultPollPeriod: numberOfMilliseconds To understand the difference ---------------------------------- Here we see all the processes [1000 timesRepeat: [ 100 timesRepeat: [120 factorial]. (Delay forMilliseconds: 10) wait ]] forkAt: 45 named: '45'. MessageTally spyAllOn: [10000 timesRepeat: [1.23 printString]] Here we only see the execution of the expression [10000 timesRepeat: [1.23 printString] [1000 timesRepeat: [ 100 timesRepeat: [120 factorial]. (Delay forMilliseconds: 10) wait ]] forkAt: 45 named: '45'. MessageTally spyOn: [10000 timesRepeat: [1.23 printString]] Here we only check the exact message sends: this is not a pc-sampling approach [1000 timesRepeat: [ 100 timesRepeat: [120 factorial]. (Delay forMilliseconds: 10) wait ]] forkAt: 45 named: '45'. MessageTally tallySends: [10000 timesRepeat: [1.23 printString]] ! THIS IS AN EXPERIMENTAL CLASS. Use MetacelloConfigTemplate for creating configurations. Subclass me to create a new configuration, then edit and evaluate the following expression to create the initial baseline version: "create baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! Performs configuration validation. For programmatically decoding reason codes use: MetacellMCVersionValidator fullDescriptionForReasonCode: Warning reason codes: #notDevelopmentVersion - the symbolic version #development refers to a non-development literal version. #loadWarning - Warning signalled during load [load validation]. #onlyBaselineVersion - one or more baseline versions have been defined, but no non-baseline versions are defined. #stableDevelopmentVersion - a version whose blessing is #development has been declared as a #stable version Critical Warning reason codes: #duplicateVersionDefinitions - there are multiple pragma methods specifying the same version #loadDeprecation - deprecation warning signalled while loading configuration [load validation] #noLoadableVersions - no non #baseline versions defined in configuration #noTests - no test cases defined in loaded configuration [load validation] #noVersionSpecified - no version defined for the project reference or package. The version specified in the baseline or the latest version of the project or package in the repository will be used. #packageNameMismatch - the name in the packageSpec does not match the name of the mcz file #projectClassNameFileMismatch - the class name of the configuration does not match the mcz file containing the configuration #testDeprecation - deprecation warning signalled while running configuration tests [load validation] Error reason codes: #cannotResolveVersion - the version (project reference or symbolic version) was not found in the specified configuration #duplicateNames - multiple independent definitions for an entity with same name (project, package, or group) #incompleteProjectSpec - missing required fields in project reference (className and/or repository) #incorrectVersionString - the version declared in pragma doesn't match version in versionSpec #invalidDoItSelector - doit select must be a Symbol #invalidVersionString - versionString must be a String #loadError - error occured while loading configuration [load validation] #missingVersionImport - version specified in import pragma not defined in configuration #noVersionsDefined - no usable baseline or version defined in configuration ... configuration cannot be loaded #projectCreationError - error occured while resolving project reference #shadowedNames - name duplication between packages and projects #testFailures - test failures while running tests [load validation] #versionCompositionError - error while creating versionSpec from pragmas ! MetacelloToolbox implements a toolbox API for Metacello. The toolbox methods on the class-side implement scripts for a number of commonly performed Metacello development tasks. The methods should be used in development scripts or GUI tools so that a common implementation is preserved across the toolset.! MetacelloValidationCriticalWarning indicates that there is a logical inconsistency that may not be intentional and that could cause incorrect loads! MetacelloValidationError indicates that errors are to be expected if an attempt to use the configuration/version is made! MetacelloValidationWarning indicates that there is a logical inconsistency that is not likely to cause any functional problems! # Metacello version format Thanks to [Mozilla Toolkit version format](https://developer.mozilla.org/en/Toolkit_version_format) for inspiration. ##Version Format A version string consists of one or more version parts, separated with dots or dashes. A version part with a leading dot is numeric. A version part with a leading dash is string. The rationale behind splitting a version part into a sequence of strings and numbers is that when comparing version parts, the numeric parts are compared as numbers, e.g. '1.0-pre.1' < '1.0-pre.10', while the strings are compared bytewise. See the next section for details on how versions are compared. ##Comparing versions When two version strings are compared, their version parts are compared left to right. Empty parts are ignored. If at some point a version part of one version string is greater than the corresponding version part of another version string, then the first version string is greater than the other one. If a version string has extra parts and the common parts are equal, the shorter version string is less than the longer version string (1.0 is less than 1.0.0). Otherwise, the version strings are equal. ##Comparing version parts Version parts are also compared left to right, A string-part that exists is always less-then a nonexisting string-part (1.6-a is less than 1.6). Examples ``` 1 == 1. < 1.0 == 1..--0 < 1.1-a < 1.1-aa < 1.1-ab < 1.1-b < 1.1-c < 1.1-pre < 1.1-pre.0 < 1.1-pre.1-a < 1.1-pre.1-aa < 1.1-pre.1-b < 1.1-pre.1 < 1.1-pre.2 < 1.1-pre.10 < 1.1 < 1.1.0 < 1.1.00 < 1.10 < 2.0 ```! My instances add instance-specific behavior to various class-describing objects in the system. This typically includes messages for initializing class variables and instance creation messages particular to a class. There is only one instance of a particular Metaclass, namely the class which is being described. A Metaclass shares the class variables of its instance. [Subtle] In general, the superclass hierarchy for metaclasses parallels that for classes. Thus, Integer superclass == Number, and Integer class superclass == Number class. However there is a singularity at Object. Here the class hierarchy terminates, but the metaclass hierarchy must wrap around to Class, since ALL metaclasses are subclasses of Class. Thus, Object superclass == nil, and Object class superclass == Class. [Subtle detail] A class is know by name to an environment. Typically this is the SystemDictionary named Smalltalk. If we ever make lightweight classes that are not in Smalltalk, they must be in some environment. Specifically, the code that sets 'wasPresent' in name:inEnvironment:subclassOf:instanceVariableNames:variable:words:pointers:classVariableNames:poolDictionaries:category:comment:changed: must continue to work.! This announcement is emited when we add a method to a class or a trait using: => Behavior >> compile: or TraitBehavior >> compile:! I represent the addition of a method to a class. I can produce the CompiledMethod, install it, and then notify the system that the method has been added. This allows Monticello to implement atomic addition. A loader can compile all classes and methods first and then install all methods only after they have been all compiled, and in a way that executes little code.ß! A MethodBrowser is a simple browser using Spec to display a list of methods and their source code si := MethodBrowser new. si openWithSpec. si methods: Object methodDict values! MethodChangeRecords are used to record method changes. Here is a simple summary of the relationship between the changeType symbol and the recording of prior state | prior == nil | prior not nil --------- |---------------------------- |-------------------- add | add | change --------- |---------------------------- |-------------------- remove | addedThenRemoved | remove Structure: changeType symbol -- as summarized above currentMethod method This is the current version of the method. It can be used to assert this change upon entry to a layer. infoFromRemoval -- an array of size 2. The first element is the source index of the last version of the method. The second element is the category in which it was defined, so it can be put back there if re-accepted from a version browser. Note that the above states each have an associated revoke action: add --> remove change --> change back remove --> add back addedThenRemoved --> no change However all of these are accomplished trivially by restoring the original method dictionary.! I am a method classifier that sets the protocl of methods using some simple rules. Example Usage: MethodClassifier classify: MyClass >> #mySelector! A MethodContainsBreakpointAction is the action corresponding to the fact that the method contains a breakpoint! Action when the method contains a flag! Action when the method contains a halt! My instances hold all the dynamic state associated with the execution of either a method activation resulting from a message send or a block activation resulting from a block evaluation. In addition to their inherited state, this includes the receiver (self), the closure for a BlockClosure activation (which is nil for a method activation), a CompiledMethod, and space in the variable part of the context for arguments and temporary variables. MethodContexts, though normal in their variable size, are actually only used in two sizes, small and large, which are determined by the temporary space required by the method being executed. MethodContexts must only be created using the method newForMethod:. Note that it is impossible to determine the real object size of a MethodContext except by asking for the frameSize of its method. Any fields above the stack pointer (stackp) are truly invisible -- even (and especially!!) to the garbage collector. Any store into stackp other than by the primitive method stackp: is potentially fatal.! I am an SUnit Test of MethodContext and its super type, ContextPart. See also BlockContextTest. See pages 430-437 of A. Goldberg and D. Robson's Smalltalk-80 The Language (aka the purple book), which deal with Contexts. My fixtures are from their example. (The Squeak byte codes are not quite the same as Smalltalk-80.) My fixtures are: aReceiver - just some arbitrary object, "Rectangle origin: 100@100 corner: 200@200" aSender - just some arbitrary object, thisContext aCompiledMethod - just some arbitrary method, "Rectangle rightCenter". aMethodContext - just some arbitray context ... ! I represent the declaration of a method. My contents are the source code to import, and the category reader is the object who knows the class, category and timestamp where to install the method. Sending me the message #import makes me install the method into the class.! Action by default, empty icon! I am an acceptor in the context of method definition! I'm a special dictionary holding methods. I am just like a normal Dictionary, except that I am implemented differently. Each Class has an instance of MethodDictionary to hold the correspondence between selectors (names of methods) and methods themselves. In a normal Dictionary, the instance variable 'array' holds an array of Associations. Since there are thousands of methods in the system, these Associations waste space. Each MethodDictionary is a variable object, with the list of keys (selector Symbols) in the variable part of the instance. The variable 'array' holds the values, which are CompiledMethods.! Find a method in the system from a set of examples. Done by brute force, trying every possible selector. Errors are skipped over using ( [3 + 'xyz'] ifError: [^ false] ). Submit an array of the form ((data1 data2) answer (data1 data2) answer). MethodFinder methodFor: #( (4 3) 7 (0 5) 5 (5 5) 10). answer: 'data1 + data2' More generally, use the brace notation to construct live examples. The program tries data1 as the receiver, and tries all other permutations of the data for the receiver and args, and tries leaving out one argument, and uses all selectors data understands, and uses all selectors in all od data's superclasses. Floating point values must be precise to 0.01 percent, or (X * 0.0001). If you get an error, you have probably discovered a selector that needs to be removed from the Approved list. See MethodFinder.initialize. Please email the Pharo Team. Only considers 0, 1, 2, and 3 argument messages. The argument data may have 1 to 5 entries, but only a max of 4 used at a time. For now, we only test messages that use given number of args or one fewer. For example, this data (100 true 0.6) would test the receiver plus two args, and the receiver plus one arg, but not any other patterns. Three sets of selectors: Approved, AddAndRemove, and Blocks selectors. When testing a selector in AddAndRemove, deepCopy the receiver. We do not handle selectors that modify an argument (printOn: etc.). Blocks is a set of (selector argNumber) where that argument must be a block. For perform, the selector is tested. It must be in the Approved list. do: is not on the Approved list. It does not produce a result that can be tested. Type 'do' into the upper pane of the Selector Finder to find messages list that. Implementation Notes arguments of the load: method are structured as follows: - Odd list entries are data for it, even ones are the answers. nil input means data and answers were supplied already." "(MethodFinder new) load: #( (4 3) 7 (-10 5) -5 (-3 11) 8) ! To do: - radix should be returned ! Action when the method comes from a trait! Action when the method is abstract! Aciton when the method is a test! I collect and provide the information to update methods when a class changed.! This announcement is emited when we RE-compile a method in a class or a trait, with: ClassDescription >> compile: or TraitDescription >> compile:. If the method is not yet registered in the class or the trait, the announcement will not be emitted. The action of renaming a method will be handled by SystemMethodRemovedAnnouncement and SystemMethodAddedAnnouncement, since this refactoring is concretely composed by removing the old method and add a new with the new name ! A MethodNameEditor is an editor to set the name of a method. This class is imported from OB. Maybe it should be redone with Spec, but since it works well, I will not put more energy here.! I am the root of the parse tree.! Action when the method overrides another one, or the method is overidden by another one or both! This announcement will be emitted when: => a non-empty protocol is renamed in a class or a trait (using ClassOrganizer >> renameCategory:toBe:). If the protocol does not contain any method, the announcement will not be emitted. Therefore, if we rename a non-empty protocol, both SystemMethodRecategorizedAnnouncement and SystemClassReorganizedAnnouncement will be emitted => a method is removed from a category of a class or a trait (using ClassOrganizer >> removeElement:) => a method is RE-categorized in a protocol of a trait or a class, using Organizer>>classify:under:. If the method is classify under its current protocol, the announcement will not be emitted! I am simple update strategy that recompiles all methods.! This announcement will be emitted when a method is removed from a trait or a class, using ClassDescription >>removeSelector: or TraitDescription >> removeSelector. ! A MethodToolbar is xxxxxxxxx. | b | b := MethodToolbar new. b openWithSpec. b method: (ButtonModel>>#state:). b method: nil! MethodWidget is the basic implementation of a wiget managing methods! Action when the method has a corresponding test method! I'm the base class for converting some data from a MIME type to another. Subclasses should implement #mimeDecode and #mimeEncode.! I'm only a fake container, since in some cases to build a context we use the wraped model, and build a full container isn't so simple... ! I am Exception used in the Weak collection tests which has a custom pass action. Instead of using the Exception's default pass mechanism I will call a customized block.! I am test object used for the WeakRegisty tests. Upon finalization I trigger a custom finalizationAction (usually a Block)! Provides a superclass for classes that function as models. The only behavior provided is fast dependents maintenance, which bypasses the generic DependentsFields mechanism. 1/23/96 sw! DialogWindow that updates content based upon its model.! A ModelSpec is a spec to describe a call to model! I encapsulate the modification of a slot. The two use-cases are: slot renaming or a changed slot type. Both cases enforce recompilation of all the methods accessing the corresponding variable. This is unlike the ShiftedField modification which is only used when the type of the slot does not change.! A MondrianPlugin is a plugin which switch the code pane with a morph when a package is selwcted! A monitor provides process synchronization that is more high level than the one provided by a Semaphore. Similar to the classical definition of a Monitor it has the following properties: 1) At any time, only one process can execute code inside a critical section of a monitor. 2) A monitor is reentrant, which means that the active process in a monitor never gets blocked when it enters a (nested) critical section of the same monitor. 3) Inside a critical section, a process can wait for an event that may be coupled to a certain condition. If the condition is not fulfilled, the process leaves the monitor temporarily (in order to let other processes enter) and waits until another process signals the event. Then, the original process checks the condition again (this is often necessary because the state of the monitor could have changed in the meantime) and continues if it is fulfilled. 4) The monitor is fair, which means that the process that is waiting on a signaled condition the longest gets activated first. 5) The monitor allows you to define timeouts after which a process gets activated automatically. Basic usage: Monitor>>critical: aBlock Critical section. Executes aBlock as a critical section. At any time, only one process can execute code in a critical section. NOTE: All the following synchronization operations are only valid inside the critical section of the monitor!! Monitor>>wait Unconditional waiting for the default event. The current process gets blocked and leaves the monitor, which means that the monitor allows another process to execute critical code. When the default event is signaled, the original process is resumed. Monitor>>waitWhile: aBlock Conditional waiting for the default event. The current process gets blocked and leaves the monitor only if the argument block evaluates to true. This means that another process can enter the monitor. When the default event is signaled, the original process is resumed, which means that the condition (argument block) is checked again. Only if it evaluates to false, does execution proceed. Otherwise, the process gets blocked and leaves the monitor again... Monitor>>waitUntil: aBlock Conditional waiting for the default event. See Monitor>>waitWhile: aBlock. Monitor>>signal One process waiting for the default event is woken up. Monitor>>signalAll All processes waiting for the default event are woken up. Using non-default (specific) events: Monitor>>waitFor: aSymbol Unconditional waiting for the non-default event represented by the argument symbol. Same as Monitor>>wait, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitWhile: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. Same as Monitor>>waitWhile:for:, but the process gets only reactivated by the specific event and not the default event. Monitor>>waitUntil: aBlock for: aSymbol Confitional waiting for the non-default event represented by the argument symbol. See Monitor>>waitWhile:for: aBlock. Monitor>>signal: aSymbol One process waiting for the given event is woken up. If there is no process waiting for this specific event, a process waiting for the default event gets resumed. Monitor>>signalAll: aSymbol All process waiting for the given event or the default event are woken up. Monitor>>signalReallyAll All processes waiting for any events (default or specific) are woken up. Using timeouts Monitor>>waitMaxMilliseconds: anInteger Monitor>>waitFor: aSymbol maxMilliseconds: anInteger Same as Monitor>>wait (resp. Monitor>>waitFor:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitWhile: aBlock maxMilliseconds: anInteger Monitor>>waitWhile: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitWhile: (resp. Monitor>>waitWhile:for:), but the process gets automatically woken up when the specified time has passed. Monitor>>waitUntil: aBlock maxMilliseconds: anInteger Monitor>>waitUntil: aBlock for: aSymbol maxMilliseconds: anInteger Same as Monitor>>waitUntil: (resp. Monitor>>waitUntil:for:), but the process gets automatically woken up when the specified time has passed.! This is a specialization of the class Delay that is used for the implementation of the class Monitor.! I represent a month.! This is the unit test for the class Month. ! MonticelloRepositoryBrowser example! A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30. Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method. The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain. My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly. Structure: instance var Type Description bounds Rectangle A Rectangle indicating my position and a size that will enclose me. owner Morph My parent Morph, or nil for the top-level Morph, which is a or nil world, typically a PasteUpMorph. submorphs Array My child Morphs. fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs. color Color My primary color. Subclasses can use this in different ways. extension MorphExtension Allows extra properties to be stored without adding a or nil storage burden to all morphs. By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning. Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.! I am an abstract announcement for morphic events. I carry the morph where the event has ocurred. My subclasses should add information for more precise events.! I'm an announcement raised when a morph is deleted. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is deleted, all it's children also get deleted and they raise a similar announcement.! Drop list supporting morphs in list.! A MorphEmbedder is a Spec model which embed a morph into a window! I represent a subscription to an event. I'm kind of an announcement, that's why I will be replaced by them soon :)! MorphExtension provides access to extra instance state that is not required in most simple morphs. This allows simple morphs to remain relatively lightweight while still admitting more complex structures as necessary. The otherProperties field takes this policy to the extreme of allowing any number of additional named attributes, albeit at a certain cost in speed and space.! I represents the windows frame for window dragging or resizing when fast dragging or fast resizing is wanted (when UITheme currentSettings fastDragging is set to true). For window resizing, I'm created by a corner or an edge grip when the mouse is clicked on it (see SystemWindow>>doFastWindowReframe:). For window dragging, I'm created when the top window bar is clicked (see SystemWindow>>doFastFrameDrag:). I'm always created with the same bounds as the target window bounds. The mouse focus is given to me and my bounds are changed while the hand is moving. On mouse up, the window bounds is set to my own bounds and then I'm deleted. Instance Variables location: startGap: target: location - The symbol representing the corner or the edge (#topLeft, #top, #topRight .... or #left). I'm set to nil for window dragging startGap - For window dragging, keep track of the distance between the window top bar first click location and the window position target - The window to be resized or dragged ! I'm an announcement raised when a morph gets keyboard focus. ! I'm an announcement raised when a morph losts keyboard focus.! I'm an announcement raised when a morph is opened. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is opened, all it's children also get opened and they raise a similar announcement.! This is the unit test for the class Morph. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - http://minnow.cc.gatech.edu/squeak/1547 - the sunit class category! I'm the base class for tree models. See ClassListExample for basic usage.! A MorphTreeMorph is a list and a tree in one easily customizable widget. A list or tree is made of nodes. Each node can be made of whatever object . This allows the use of morphs inside the tree. A MorphTreeMorph works with a model which must use the TMorphTreeModel trait. MorphTreeModel uses it and can serves as the model or as a superclass for a specific tree model. Customizable columns: Several customizable columns can be viewed. Columns are separated by resizers used in order to increase or decrease the columns width with the mouse. A MorphTreeMorph can have a top header composed of buttons, one button per column. Such a button can have an icon and/or a title and may run some action when clicked on (a typical action is the ordering of the list). You can also allow column drag-and-drop so that a column can be dynamically moved with a simple drop. See this in action with following example: ----------- ClassListExample new openOn: Collection ----------- By default, the last column is not bounded, so that no resizer is added for it and threre exists no unused space between the last scroller and the right side of the whole tree. But, in some case one want to have a resizer also for the last column. This is the case for data grid as an example This is possible by sending #makeLastColumnBounded to the MorphTreeMorph. Try it with: ----------- SimpleGridExample new open ----------- Single and multi-selection: A MorphTreeMorph implements single and multiple selection. Multi-selection is allowed by sending #multiSelection: with true as argument. Several items can be selected with ctrl-click (or cmd-click on mac) or with shift-click (see MorphTreeMorphModel comments to see how to handle selection from the model). Try multi-selection with following example: ------------ SimplestClassListExample new openOn: Collection ------------ Double-click handling: You can allow double-click just by indicating the message to send to the model with the doubleClickSelector: selector. Try this with the package-tree example where double-clicking on a class node or or a method node open a browser on the class or on the method: ------------ PackageTreeExample new open ------------ Long list handling: For very long lists or trees, two kind of pager can be used to limit the number of items visible in the list. The idea is that when you have very long lists, you most of the time do not want to see all details but just want some visual support for what is in the list: - with a simple pager, you indicate how much items are to be seen in one page, the list items are viewed page by page, - with a chunk pager you can expand either incrementally or all-together the number of items once you get to the bottom of the existing items. See SimplestClassListWithPagerExample and SimplestClassListWithChunkExample examples. Try them with: ------------ SimplestClassListWithPagerExample new openOn: Object. SimplestClassListWithChunkExample new openOn: Object. ------------ Columns/rows coloring: MorphTreeMorph makes it possible the coloring of either the columns or the rows. A MorphTreeMorph understands #rowColorForEven:odd: for rows coloring and columnColorForEven:odd: for columns coloring with two colors passed as argument (nil means no color). See following examples: ------------- PackageTreeExample new open. "For row coloring" ClassListExample new openOn: Collection. "For column coloring" ------------- Column drag and drop A column can be dragged. Inside the tree, a column can be dropped into another one. Then, the two columns are swapped (the roughly implemented) Try it with: ------------- ClassListExample new openOn: Collection. ------------- Instance Variables autoDeselection: autoMultiSelection: columnColors: columnDropUnabled: columnInset: columnResizers: columns: doubleClickSelector: expandedToggleImage: gapAfterIcon: gapAfterToggle: getListSelector: getSelectionSelector: hasToggleAtRoot: iconReservedExtent: indentGap: keystrokeActionSelector: lastSelectedMorph: lineColor: multipleSelection: nodeList: nodeSortBlock: notExpandedToggleImage: pager: potentialDropMorph: preferedPaneColor: resizerWidth: rowColors: rowInset: scrollDeltaHeight: selectedMorphList: setSelectionSelector: shiftSelectedMorph: topHeader: topHeaderBackground: unboundLastColumn: withHLines: autoDeselection - xxxxx autoMultiSelection - xxxxx columnColors - xxxxx columnDropUnabled - xxxxx columnInset - xxxxx columnResizers - xxxxx columns - xxxxx doubleClickSelector - xxxxx expandedToggleImage - xxxxx gapAfterIcon - xxxxx gapAfterToggle - xxxxx getListSelector - xxxxx getSelectionSelector - xxxxx hasToggleAtRoot - xxxxx iconReservedExtent - xxxxx indentGap - xxxxx keystrokeActionSelector - xxxxx lastSelectedMorph - xxxxx lineColor - xxxxx multipleSelection - xxxxx nodeList - xxxxx nodeSortBlock - xxxxx notExpandedToggleImage - xxxxx pager - xxxxx potentialDropMorph - xxxxx preferedPaneColor - xxxxx resizerWidth - xxxxx rowColors - xxxxx rowInset - xxxxx scrollDeltaHeight - xxxxx selectedMorphList - xxxxx setSelectionSelector - xxxxx shiftSelectedMorph - xxxxx topHeader - xxxxx topHeaderBackground - xxxxx unboundLastColumn - xxxxx withHLines - xxxxx ! I'm a pager control used to navigate in a MorphTreeMorph that has a lot of entries. You can see one of my subclass in action using: "May take a while to open" ClassListExample new open! I wrap an item to be displayed in a TreeMorph, so I can answer content and representation in a polymorphic way. My hierarchy usually follows TreeMorphModel one.! I draw the node part of a tree.! Display a morph in a SimpleHierarchicalListMorph, and arrange to recursively display the morph's submorphs. The "item" that is wrapped is the morph to display.! A MorphWrapper is used to wrap a morph with a layout in the goal to be easily added to another morph! I represent a message to be scheduled by the WorldState. For example, you can see me in action with the following example which print 'alarm test' on Transcript one second after evaluating the code: Transcript open. MorphicUIManager currentWorld addAlarm: #show: withArguments: #('alarm test') for: Transcript at: (Time millisecondClockValue + 1000). * Note * Compared to doing: [(Delay forMilliseconds: 1000) wait. Transcript show: 'alarm test'] forkAt: Processor activeProcess priority +1. the alarm system has several distinctions: - Runs with the step refresh rate resolution. - Alarms only run for the active world. (Unless a non-standard scheduler is in use) - Alarms with the same scheduled time are guaranteed to be executed in the order they were added! MorphicBindings is the class holding the bindings between Spec and Morphic! MorphicBindingsWithSplitters is like MorphicBindings with splitters support in addition! This class represents the base for all events. Instance variables: stamp The millisecond clock time stamp (based on Time millisecondClock) source If non-nil the hand that generated the event.! The class represents a strategy for dispatching events to some immediate child of a morph. It is used by morphs to delegate the somewhat complex action of dispatching events accurately. ! I'm the class in charge of handling the subscriptions to events such as clicks or key presses. I'm a provisory solution while my clients are fixed and I can be replaced by announcements! MorphicModels are used to represent structures with state and behavior as well as graphical structure. A morphicModel is usually the root of a morphic tree depicting its appearance. The tree is constructed concretely by adding its consituent morphs to a world. When a part is named in a world, it is given a new slot in the model. When a part is sensitized, it is named, and a set of mouse-driven methods is also generated in the model. These may be edited to induce particular behavior. When a variable is added through the morphic world, it is given a slot in the model, along with a set of access methods. In addition for public variables (and this is the default for now), methods are generated and called in any outer model in which this model gets embedded, thus propagating variable changes outward.! This class implements simple translation, scaling and rotation for points, as well as inverse transformations. These transformations are used in TransformMorphs (clipping scrollers) and TransformationMorphs (general flex-morph wrappers) to map, eg, global mouse coords into local coords, and to invert, eg, local damage rectangles into global damage rectangles.! A MorphicUIBugTest is a class for testing the shortcomings and repairs of the MorphicUI manager. . Instance Variables cases: cases - a list of morphs that may need to be deleted during teardown. the tests are expected to fill this list it starts out empty by default. ! The Morphic ui manager. I was packaged in toolbuilder and I may change in the future. For the moment, the goal is to unload toolbuilder. ! MouseClickState is a simple class managing the distinction between clicks, double clicks, and drag operations. It has been factored out of HandMorph due to the many instVars. Instance variables: clickClient The client wishing to receive #click:, #dblClick:, or #drag messages clickState The internal state of handling the last event (#firstClickDown, #firstClickUp, #firstClickTimedOut) firstClickDown The #mouseDown event after which the client wished to receive #click: or similar messages firstClickUp The first mouse up event which came in before the double click time out was exceeded (it is sent if there is a timout after the first mouse up event occured) firstClickTime The millisecond clock value of the first event clickSelector The selector to use for sending #click: messages dblClickSelector The selector to use for sending #doubleClick: messages dblClickTime Timout in milliseconds for a double click operation dragSelector The selector to use for sending #drag: messages dragThreshold Threshold used for determining if a #drag: message is sent (pixels!!) ! A mouse event generated by intercepting the keyboard events (ctrl+up/down arrow) generated by the VM in response to mouse wheel activity.! It is similar to MultiByteFileStream, but works on in memory stream.! The central class to access the external file. The interface of this object is similar to good old StandardFileStream, but internally it asks the converter, which is a sub-instance of TextConverter, and do the text conversion. It also combined the good old CrLfFileStream. CrLfFileStream class>>new now returns an instance of MultiByteFileStream. There are several pitfalls: * You always have to be careful about the binary/text distinction. In #text mode, it usually interpret the bytes. * A few file pointer operations treat the file as uninterpreted byte no matter what. This means that if you use 'fileStream skip: -1', 'fileStream position: x', etc. in #text mode, the file position can be in the middle of multi byte character. If you want to implement some function similar to #peek for example, call the saveStateOf: and restoreStateOf: methods to be able to get back to the original state. * #lineEndConvention: and #wantsLineEndConversion: (and #binary) can cause some puzzling situation because the inst var lineEndConvention and wantsLineEndConversion are mutated. If you have any suggestions to clean up the protocol, please let me know.! A canvas which forwards drawing commands to sub-canvases.! A MultiColumnListModel is a spec model for Multi columns list! A MultiColumnListSpec is a spec used to describe a multi column list! I'm a class related to the computation of characters counting for text flow.! A variant of LazyListMorph that can display multi-column lists.! A MultipleMethodsEditor is a widget to edit multiple methods in one widget! I am model for multiple methods editor (the -All- button)! A MultipleMethodsEditorButtonModel is a ButtonModel created for MultipleMethodsEditor! A simple button that handles multiple fillstyle states: Normal Mouse-over Mouse-down-inside Mouse-down outside with variants being a combination of passive/active and enabled/disabled.! A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested. Instance variables: semaphore The (primitive) semaphore used for synchronization. owner The process owning the mutex.! A MutexSet helps with aquiring a set of mutexes.! I am a collection on examples on how to use the NativeBoost infrastructure. Check my class-side methods for more details.! A special hacky type, which storing a ulong function return value into existing byte array instance. A method, which using this type in callout should have an argument , named 'returnValueBuffer' and pass a byte array instance, big enough to store ulong there. This is essentially used during NativeBoost bootstrap, to generate & install the gall gate function, without calling any of interpreterProxy function which may cause GC.! A helper type, which takes a byte array argument and pushing its size! The generated callback code does following: 1. Trunk 1.0. Each callback instance has unique trunk code, which is installed into external memory during callback initialization. 1.1. An external function makes a call to trunk address. 1.2. Trunk code sets the globally registered callback index to ECX register and jumps to callback entry code. 2. Entering callback 2.1. saves the VM's execution state (stack/frame pointers, reenterInterpreter jump buffer). See #saveExecutionState. 2.2. fetching the callback oop for index passed from trunk. 2.3. coercing the callback function arguments to their smalltalk equivalent and creates an array with them. See #emitArgumentsCoercion. 2.4. synthesizes a fresh method context which is an activation of #pvtEnter:stackPointer:primitiveMethod: and swaps the active context with synthesized context. See #activateCallbackContext: . 2.5. increments a global callback counter value. See #incrementCallbackCounter. 2.6. enters an interpreter loop by calling VM's #enterSmalltalkExecutiveImplementation function. 3. Leaving callback. 3.1. A leave procedure starts from method: #primLeave:stackPtr:contextOop:returnValue:primitiveMethod: , which simply jumps to provided leave address, a code, generated for leaving from given callback. 3.2. Coerce the return value from smalltalk object to it's C equivalent. See #generateCallbackLeaveCodeFor:leaveAddr:. 3.3. Swaps a currently active context with one which were before entering callback 3.4. jumps to #returnToC label in callback entry code 3.5. sets the current C stack frame back to callback enter procedure. 3.6. restores the VM execution state (an opposite to 2.1) , see #restoreExecutionState. 3.7. decrements global callback counter. 3.8. returns to external function ! Character type. Represented as single byte on C side. Accepts Character/Smallint as argument, converts return value to Character instance! I am used to SIGNAL recursion error during code generation.. Do not confuse me with NBRecursionDetect notification, which is used to detect recursion. A recursion usually happens when generating code for some method requires generating code for very same method, and so it enters infinite loop! I am a specialized interpreter proxy for the Cog family of intererpreters! My primary function is to represent a pointer (address) to memory, in cases, when a kind of data under given address does not having any special structure, which can be reflected more nicely in language. Usually i can be used to hold pointer(s) to buffers (void*), or to allocated memory region etc. I providing some basic interface for reading/writing data into memory where i pointing to, as well as some convenience methods.! I am abstract class which provides a convenient interface to work with arrays which elements are values of some external (C) type. In order to use me with concrete element type, you must create a subclass of me and initialize element type properly. Subclassing using public subclass: - if you want to create a public subclass of me, then you should make sure that in class-side #initialize method, you add self-send #initElementType: and specify the element type name to use. (And of course, initialize the class before attempting to create any instances). Subclassing with anonymous subclass: To create an anonymous subclass of me, use #ofType: protocol, i.e.: floatArrayClass := NBExternalArray ofType: 'float'. Please note that separate #at: / #at:put: methods will be automatically added in each and every subclass. Never remove them, despite they looking identical to superclass methods!! !!!!CAUTION!!!! Currently those methods do not perform any range checking for index. So, please make sure you using sane index values (1<= index <= size). Also, note, that class instance variables: elementType and elementSize, once initialized, is considered read-only. Changing them, once you created at least a single instance of your class may lead to funny consequences. Arrays in external memory vs object memory: My instances can work either with data held in object memory or in external memory. The difference is only at instantiation time: To create a new array in object memory, just use #new: protocol: myArray := floatArrayClass new: 10. "create a new array with 10 floats". To allocate a new array in external memory, use #externalNew: protocol: myArray := floatArrayClass externalNew: 10. .. myArray free. "and sure thing, do not forget to free external memory after use". To check whether array uses object memory or external memory , use #isExternal protocol. Also, you can convert any external address into NBExternalArray subclass instance, i.e. suppose some external function returns a pointer (instance of NBExternalAddress): pointer := self callSomeFunc: 1. So, in order to access memory at given address as array of 100 elements of type 'int', you can use following: myArray := (NBExternalArray ofType: 'int') onAddress: pointer size: 100. myArray at: 1. "read first element" myArray at: 2 put: 50. "write second element" myArray do: [:each | ... ] ... etc (sure thing, in the above example, the "NBExternalArray ofType: 'int' " expression is just to demonstrate the intent. It should be replaced with some variable, which you initialize only once and use many times, because creating an anonymous subclass each time would be highly ineffective ) Supported protocols: Since NBExternalTypeArray inherits from ArrayedCollection, you're free to use any protocols defined there as well as in its superclasses. There's only few additions comparing to ArrayedCollection, like #isExternal and #free . Copying: a #copy behavior is special for external arrays: A copy will always use object memory, even if original used external memory. ! NBExternalEnumerationType reifies the enum declarations in C and offers a nice interface (especially in terms of debug/inspect). To use it just subclass the NBExternalEnumeration and add an #enumDecl method to the class side such as: NBExternalEnumeration subclass: #NBTestEnumeration instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'NativeBoost-Tests' NBTestEnumeration class>>enumDecl ^ {(#AAA -> 1). (#BBB -> 2). (#CCC -> 3). (#DDD -> 2400)} asDictionary DO NOT FORGET to call the #initialize method on your class. The rest is automatically done ;) You can use your new enum in two ways: - add it to a client class poolDictionaries list (see #NBExternalEnumTests for an example), and then just write CCC in your code -- CCC here is an item of your enum - send the name of an item to your class --- NBTestEnumeration DDD The NBExternalEnumeration implements (instance and class) some more API methods like: #itemAt: retrieves the item having a specific value --- NBTestEnumeration itemAt: 2 #includes: checks the existence of a specific item in the enum --- NBTestEnumeration includes: #AAA! Usually, my instances representing an opaque object handle returned by external function. There's little what we can do with it, except from passing as argument to another function(s). I hold a byte array of a pointer size (typicaly 4 or 8 bytes). You can set the raw handle value with #value: and read it with #value. Note, do not subclass from me directly. If you want to represent some opaque C data structure (handle, stucture, pointer to structure etc), subclass from NBExternalObject instead. Otherwise, if you insist, override #asNBExternalType: method on class side in own subclass to provide own marshalling for instances of your subclass(es) (but it makes even less sense since once you define own #asNBExternalType:, you free to use any base class for your subclasses, unless of course you want to reuse some of my methods)! This is a simplistic implementation of external heap manager. Using it , you can allocate or free external memory. - should not throw any exceptions. If allocation fails, should simply answer nil/0 ! I representing an external object of one kind, provided by some external library/function. My instance holds a handle, which is used to identify the external object when i am passed as an argument, or when i'm used as a return type in function signature. A typical usage of me is to create a subclass, and then use that subclass name directly in function signatures: NBExternalObject subclass: #MyExternalObject newObj := MyExternalObject newObject. MyExternalObject class>>newObject ^ self nbCall: #(MyExternalObject someExternalFunction() ) here, assume that someExternalFunction() returns some handle (or pointer) to some opaque external structure. By putting NBExternalObject subclass (MyExternalObject) as a return type into the function signature, we are telling the code generator to automatically convert the return value into an instance of a given class and initialize its handle to the value returned by the function. When used as argument type, the value, which is used to pass to the external function is value held in my handle instance variable: MyExternalObject>>compareWith: anotherExternalObject ^ self nbCall: #( void compare ( self , MyExternalObject anotherExternalObject)) The main advantage of using NBExternalObject subclass as a type name for arguments is that it provides type safety by checking the incoming argument, that it is an instance of your class, and nothing else. If not, the primitive will fail without calling the external function. ! I providing coercions for NBExternalObject and its subclasses! i am responsible for finalizing an external resource, registered using external resource manager. When object, registered as external resource being garbage collected, i telling an object's class to finalize it's associated data (by passing an object, received from #resourceData message sent to an object at registration time). I automatically keep tracking for session change (image save/boot), and ignore finalization of resources of old sessions (since they are not longer valid, and cannot be freed since session changed). Like that, a users of NBExternalResourceManager don't need to implement a session checking logic, and need only to: a) register object as external resource: NBExternalResourceManager addResource: anObject. an object should understand the #resourceData message, which is remembered at registration point (it can be any external resource like, id, handle or memory pointer). Then, when object is garbage collected, its class will receive a message to finalize the resource data in #finalizeResourceData: The passed data is exactly same as previously returned by #resourceData method. An example: Imagine that you want to represent an external resource by keeping its handle. Object subclass: #MyExternalObject instanceVariableNames: 'handle' classVariableNames: '' poolDictionaries: '' category: 'XYZ' To let your object(s) to be managed by external resource manager, you need to register it. Usually you do it after successfully claiming an external resource: MyExternalObject>>initialize handle := self createNewExternalResource. "claim resource" self assert: self handleIsValid. "etc..." "Now, register receiver as external resource" NBExternalResourceManager addResource: self "Another form of use is: NBExternalResourceManager addResource: self data: handle. " ---- If you used #addResource: method for registration, you should provide an implementation of #resourceData method: MyExternalObject>>resourceData ^ handle "since we need only handle to identify external resource" ---- Now, for properly finalizing the external resource we should implement: MyExternalObject class>> finalizeResourceData: aHandle ^ self destroyHandle: aHandle. "do whatever is needed to destroy the handle" Note that in #finalizeResourceData: you cannot access any other properties of your instance, since it is already garbage collected. You also don't need to do a session checking, since it is done automatically by resource manager. ! i am responsible for managing a finalization of external resources. When object, registered as external resource being garbage collected, i telling an object's class to finalize it's associated data (by passing an object, received from #resourceData message sent to an object at registration time). I automatically keep tracking for session change (image save/boot), and ignore finalization of resources of old sessions (since they are not longer valid, and cannot be freed since session changed). Like that, a users of NBExternalResourceManager don't need to implement a session checking logic, and need only to: a) register object as external resource: NBExternalResourceManager addResource: anObject. b) an object should understand the #resourceData message, which is remembered at registration point (it can be any external resource like, id, handle or memory pointer). Then, when object is garbage collected, its class will receive a message to finalize the resource data in #finalizeResourceData: The passed data is exactly same as previously returned by #resourceData method. An example: Imagine that you want to represent an external resource by keeping its handle. Object subclass: #MyExternalObject instanceVariableNames: 'handle' classVariableNames: '' poolDictionaries: '' category: 'XYZ' To let your object(s) to be managed by external resource manager, you need to register it. Usually you do it after successfully claiming an external resource: MyExternalObject>>initialize handle := self createNewExternalResource. "claim resource" self assert: self handleIsValid. "etc..." "Now, register receiver as external resource" NBExternalResourceManager addResource: self "Another form of use is: NBExternalResourceManager addResource: self data: handle. " ---- If you used #addResource: method for registration, you should provide an implementation of #resourceData method: MyExternalObject>>resourceData ^ handle "since we need only handle to identify external resource" ---- Now, for properly finalizing the external resource we should implement: MyExternalObject class>> finalizeResourceData: aHandle ^ self destroyHandle: aHandle. "do whatever is needed to destroy the handle" Note that in #finalizeResourceData: you cannot access any other properties of your instance, since it is already garbage collected. You also don't need to do a session checking, since it is done automatically by resource manager. ! NBExternalString type can be used to coerce squeak's String to char* back and forth. Use #String or #NBExternalString as type name. Some functions may accept null as a valid argument (if string is optional). You can set #optStringOrNull in callout options in that case. If type is used as return value type, then C string (char *) converted to ByteString instance. If return value is null, a nil will be answered instead.! I am used for transparent structures: that is, a structure is transparent if you know its fields and can modify them. This is in contrast of opaque structures, which you never manipulate directly but through functions. For each struct type, you define a subclass of me, and implement the fieldsDesc class method. After that you do a initializeAccessors for that class and voila, field accessors are generated automatically. Class Instance Variables: initialized currentFields ! I am an abstract class that primarily serves for generating a machine code which converting arguments and return types between Smalltalk and C worlds. My subclasses implementing a marshalling for concrete type, which is then used by FFI. Instance Variables: pointerArity loader : an instance of argument loader, which emits code to load the smalltalk argument into register. When generating the marshalling code to push a variable, my instances need this helper which, depending on where the object is (inst var, method arg, etc) gets the object in question into a register.! I am a generic meta class for creating a subclasses, which instances will hold a single value of specified C type. To create a new class for some concrete C type use: myClass := NBExternalTypeValue getClassForType: 'float'. Then you can use instances of given anonymous class(es) as a value holders for type you specified: float := myClass new. ... float value: 1.5 float value etc.. By combining this with class/pool variables we have a convenient way of defining a values, which are passed by pointer to a function. For instance, imagine that we need to create a binding to a function: void getFoo( SomeType * value) which is not an unusual situation, when C function using pointer arguments for storing it's output there. And this is what NBExternalTypeValue is done for: To define a binding to this function you can: - declare a pool/class variable, named SomeType - initialize it: SomeType := NBExternalTypeValue ofType: 'SomeType' and then use it in function signature: getFoo: value ^ self nbcall: #(void getFoo ( SomeType * value )) --- and call it like: var := SomeType new. self getFoo: var. var value -> will read the value ! This registry serve for instantiating an external types by native code. My sole instance is always refreshing during fresh image startup.! My instances represent a callback function, which will be called by external function at some moment. To create a new callback, first, make a subclass of me and override #fnSpec method, which is an anonymous C function signature, l.e. 'int (int foo , float bar )' , which tells that given callback class implements a callback for a function which takes two arguments (foo, bar), and returns integer. (Additionally you can override a #callType method which determines a callback function calling convention. A default calling convention for callbacks is #cdecl, and others is barely used on x86 platforms). To use callbacks, you must instantiate it first by passing block as an argument: mycallback := MyCallback on: someBlock. The block is the closure which will be evaluated when callback function get called, so the block must take same number of arguments as specified in #fnSpec method, and its evaluation result must yield a value which can be converted back C type value, which you speficied as a return type of callback function. For example, if callback signature is 'int (int foo , float bar )' , we can create a callback with following block closure: mycallback := MyCallback on: [:foo :bar | (foo + bar ) asInteger ]. Passing callback as an argument to external function. For passing a callbacks as an argument to C function, you can use its class name for an argument type. For example: primStQSort: base len: size compare: qsortCallback ^ self nbCall: #(void qsort (NBExternalAddress base, ulong size, 1, NBQSortCallback qsortCallback)) module: NativeBoost CLibrary options: #( optMayGC ) as you can see , the third argument (qsortCallback) of function signature, has 'NBQSortCallback' type, which is a class name of existing NBFFICallback subclass. And, of course you are free to create any type aliases for the callback type to use different type names in signature. Just make sure that aliases are resolved correctly to an instance of NBFFICallbackType, during processing of the function signature by NBFFICallout class. !!!!Note!!!! A special care must be taken for all functions which may make callbacks!! In the above qsort() example, you can see an additional option for external call - #optMayGC, which tells a code generator to call an external function via call gate (a special stub which handling a code relocation caused by GC). Thats it, for any external functions, which may call the callback you must pass this option. Rationale: since most of external functions don't make any callbacks (and so has no chance to trigger GC), using this option by default will be an overkill, which will just spend extra CPU cycles for nothing. However, if you omit this option when calling the function(s) which may call back, expect a hard crash(es) to happen. If you unsure which external library functions may call back, you can turn on this option by default for all methods in your class by implementing #ffiCalloutOptions method at class side: MyClass class>>ffiCalloutOptions ^ #( optMayGC ) Like that, for any code generated to make external calls in methods of your class, this option will take an effect. Callback lifetime. Each time you instantiating a new callback, it reserves a small amount of external memory , which must be freed once callback is no longer used. This is done automatically, using object finalization scheme, once system detects that there is no more strong references to callback left. So, you only need to make sure that an instance of callback, which you passed to some external function will be kept around in system, as long as an external library has a pointer to it and can perform calls to it. If you lose the last reference to callback object before making sure that external library can no longer make calls to it, this will lead to an unpredictive behavior (segmentation fault, invalid instruction, memory corruption / pick your favorite). Redefining callback signature. A callback uses a lazy-initialization scheme to generate a common marshalling code which will be used by all instances of specific callback class. So, changing a callback signature (by changing its #fnSpec method) will not have an immediate effect, if you already created at least a single instance of it. To make changes take effect, you must restart an image. ! Pushing a callback to stack! Callout arguments can be either: - an integer constant, boolean or nil - a type name (string or symbol) - a class name - a class variable - any other object, which responds to #asFFICalloutArgument: An object , answered by #asFFICalloutArgument: should implement a public protocol of NBExternalType Todo.... Options: argument coercion options: #coerceBoolToInt - Boolean -> C integer (0/1) #coerceNilToInt - nil -> C integer (0) #coerceFloatToInt - Float -> C integer #coerceCharToInt - Character -> C integer #noTypeChecking - do not perform any type checking for pushed arguments (dangerous, but sometimes can be useful) return value coercion options: #returnBoolAsInt - do not turn a bool(0/1) into Boolean (true/false) cdecl calling convention: 1. Function parameters are pushed on the stack in a right-to-left order. 2. Any local variables declared by the callee are allocated on the stack by subtracting the number of bytes required from esp. That is (sub esp,NUMBER_OF_BYTES). 3. Registers eax, ecx, and edx are available for use in the subprogram. 4. Registers ebx, esi, edi, and ebp must not be modified by the callee. (In fact, they may be used, but their original values must be restored before exiting the callee). 5. When the callee terminates, any local variable must be released by restoring esp to its original value (mov esp,ebp). 6. Function return values are returned in the eax register (except for floating point values, which are returned in the st0 register). 7. After the callee is over, the parameters that were pushed on the stack by the caller must be removed by the caller itself once the callee is terminated. It can be done in two ways : * pop ecx n times, where n is the number of parameters pushed (cons: a useless result is stored in ecx, and ecx's value changes) * add esp,NUMBER_OF_BYTES_PREVIOUSLY_PUSHED (1 parameter pushed = 4 bytes on a 32 bit machine)! My instances indicating an error during execution of FFI callout. To get a description, i look up in NBFFICallout for custom error messages , in addition to my superclass. ! My instances can be used to push an arbitrary integer value to the stack. Could be useful for purposes, when some of the external function values is known beforehead, like size of structure etc. For emitting a constant as argument for a function just put it into an argument list, like: apiCall: #( long 'IsBadWritePtr' (10) ) module: 'Kernel32.dll' here, 10 is a constant, which will be pushed on stack! i am a simplified implementation of WeakRegistry, and have same public protocol. The implementation is simpler and faster, because i rely on new finalization support in VM. ! not supported on x86 archs.. ! Use to pass a pointer to instance of Float, which is C (double *) equivalent. Can be used for functions which may modify the floating-point values at specified memory pointer. NOTE: always copy float objects before passing them to such callouts.! Abstract class for floating-point native types! I am abstract class, describing a function argument. My subclasses should know what code to emit in order to load an argument. ! I am used to hold a parsed function signature, describing a C function. Since all C functions having return type, arguments and name (unless it anonymous one), same structure can be used to hold an information about it in my instances. However, what objects used to represent types and arguments is up to code generator. Instance Variables: returnType functionName arguments ! I responsible for marshalling signed 16-bit integer type values.! I responsible for marshalling signed 32-bit integer type values.! I responsible for marshalling signed 64-bit integer type values.! I responsible for marshalling signed 8-bit integer type values.! Abstract class for all integer external types! I am an important part of a native code generation toolchain, which provides an access to all interpreterProxy functions. A native code, inevitably, needs to convert a method's arguments to their native representations, and access a different fields of oops. For this, we need to use interpreter proxy methods. Code generator options, used by proxy: #optNonMovable - The code is a standalone routine, which a) will be placed into a non-movable memory region. b) can be called by any other function, not by primitiveNativeCall, therefore #optDirectProxyFnAddress - call proxy functions directly, instead of loading their address indirectly via interpreterProxy struct #optUseStackPointer - use a direct ST stack pointer, initially retrieved using #getStackPointer ! I providing a basic interface for use a dynamically generated native code with NativeBoost plugin using #primitiveNativeCall. On my class side, you can find the interface to help managing native code, as well as basic functionality for dealing with it at run time. My instance serves as a helper to access common facilities used for code generation: - assembler - interpreter proxy i do not provide anything beyond that, so you still basically on you own, and must use assembler and interpreter proxy for implementing a low-level funcitonality in your code (like new primitive, new function etc) Instance Variables: asm : An object that is used to generate native code proxy : An object providing an access to public VM interface: like fetching a var from smalltalk stack, accessing object's internals, etc. options : A set of options which generated code may use method : a compiled method instance where native code will be installed to, (of course in case if my instance used for generating code to be installed there, and if not, it can be ignored) Usage: My most simple use is in a form: myMethod ^ NBNativeCodeGen methodAssembly: [:gen | "here you put an instructions or provide own machine code. a block should answer a bytearray, which should contain ready for use machine code" ] In case, if you want to use different top-level interface, like in order to write something like following: myMethod ^ self myCode: [ "here you put an instructions or provide own machine code" ] You can use #handleFailureIn:nativeCode: method , which takes care of handling primitive failure, dealing with errors and finally installing native code, which you providing, into corresponding method. ! I'm a generator of native code. I can create C style functions, providing convenient syntactic sugar for accessing the function arguments in function body (but you still have to write the body of the function with the assembler). I can be used for implementing small helper routines, low-level callbacks or functions which will run in separate (to VM) thread. A function spec is used to help with fetching arguments from call stack by using #arg: method for that: NBNativeFunctionGen cdecl: #( int (byte* a, byte * b) ) emit: [:gen | | asm | asm := gen asm. "this will load argument from stack to register" asm mov: (gen arg: #b) to: EAX; ]. By invoking the expression above, I will generate a native code and keep it in my instance. Now to put this code in use, it must be installed (see #install) into external memory. Then an address to the function can be passed to any other external function, or even called by FFI callout: myFunction := NBNativeFunctionGen cdecl: #(..) emit: [...]. myFunction install. address := myFunction address. After function is no longer needed, it must be uninstalled (to conserve the external memory): myFunction uninstall. Note, that this must be done explicitly, since like everything which works with external resources, there's no any automatic resource management for external memory. ! i am exposing an object format to ease accessing various object fields directly, without calling interpreter proxy functions, where it is appropriate! - an object format for 32-bit images! i am special "type", doing no conversion of any sort, just passing an object oop as it is.! i am used to detect recursion during code generation.. use me like following: NBRecursionDetect in: someMethod during: [ ... some block .. ]. if recursion is detected, while evaluating the block, then NBCodeGenRecursion error will be signaled. A recursion usually happens when generating code for some method requires generating code for very same method, and so it enters infinite loop! This guy knows how to load a receiver's ivar. ! i know what to emit for loading a method's argument from VM stack into register ! i implement marshalling for the size_t type. size_t value size depends on a platform's word size. on 32-bit it will be 32 bit. on 64-bit it will be 64 bit ! - depending on context, acts either as char or wchar! - depending on context, acts either as char* or wchar* string! I responsible for marshalling unsigned 16-bit integer type values.! I responsible for marshalling unsigned 32-bit integer type values.! I responsible for marshalling unsigned 64-bit integer type values.! I responsible for marshalling unsigned 8-bit integer type values.! This is an example of defining custom type. This type accepts a string(s) and converts them into utf-8 representation on stack on the fly and then pushes the pointer to converted string to callee. UTF8TextConverter new convertFromSystemString: ( NBBasicExamples new encodeToUTF8: 'owehjfopeh fr´' asWideString)! Unix heap implementation, based on mmap()/munmap() functions to manage external heap.! Instances of this class represent a reference value to a Win32 resource (file, window, ...)! Through WinTypes pool, i seen as HWND type , so whenever you type HWND, you are working with instances of me ! I represent a class Variable! I'm a simple InstructionClient that tries to guess the type of a given class variable name of a class. ! A completion is started by the ECController. The controller creates me to compute the context of the completion. The most important information about the context are the receiverClass and the completionToken. I create a ECModel or subclass when requested by the 'model' method. I use SHParser and SHRange to parse the text input.! I live as an instance variable in a Browser, Debugger, Workspace or other window. I'm the glue between all participants of the completion system. I create the NECContext and pass myself to the NECMenuMorph. I process the keyboard events and pass them to the NECMenuMorph or close the morph if needed.! A NECControllerTest is a test class for testing the behavior of NECController! I display some detail information for a selected ECEntry in the ECMenuMorph. The content I show, is provided by an ECDetailContentProvider subclass. ! I represent a completion entry that is management by a ECModel and shown in the ECMenuMorph as a menu entry.! A NECEntryDescription is a holder for some information to be displayed.! I represent a global variable.! I represent an instance variable.! I'm a simple InstructionClient that tries to guess the type of a given instance variable name of a class. ! I represent a local variable! I show the possible completions in a menu like appearance. The user may choose an entry from my list and complete the word he was typing in the editor. I'm showed with the Tab key and will be deleted when with ESC key or when a successful completion occurs. The following keystrokes are supported: Ctrl-Space or Tab: Open a new morph. Tab requires at least one character in front of the cursor. When already open complete the selected entry. Esc: Close me Ctrl+u: Change to untyped mode, so I show all selectors of all classes in the system and the variables that are accessible to the current context. Arrow Up: Move one entry up. Arrow Down: Move one entry down Enter: (like Ctrl-Space and Tab): Complete with the selected item and close the morph any letter or digit: Narrow the completion further Ctrl+t: Toggle the expand flag. When expand is disabled, you don't see selectors belonging to Object and ProtoObject. ! I'm an abstract class that stores the entries to be completed.! I'm used when completing a method override. I contain all selectors of the superclass minus the already implemented selectors of the current class. When a completion occurs I complete a method template with a send to super.! I control the preferences for completion framework. It is the same for NECompletion and NOCompletion (and other potential completion algorithms should be configured here too) ! NEC is based on the eCompletion package developed by Ruben Baker. We thank Ruben for having release this code in MIT. It was maintained by lukas renggli, damien Cassou and a couple of other cool developers. The current version (NEC) relies on some methods that re available in Pharo1.4. In addition the extensions made to shout has been moved to the Shout package. The goal of thise new version is to make sure that OCompletion can be just expressed as an extension of ECompletion and not a full copy of the ecompletion. This package relies on Shout.! I represent a selector! I represent self! I represent super.! I retrieve the symbols for the ecompletion algorithm. TODO remove stupid symbols (like packages and timestamps) I also do not know why I live here (in Pharo package)... I should have my place in Model :)! I'm only for SUnit TestCases.! I'm only for SUnit TestCases.! I'm used in ECInstVarTypeGuesser to store found type informations.! I'm the model for a typed completion, that means when a receiver class is known. I only have selectors. I have an expand toggle: When false I filter out Object and ProtoObject selectors. The default value is true.! kind of variant but no idea why - sd! When no receiver class is known, I'm the right model. I store all temporary variables, instance variables of the selected class and all selectors in system. For performance reasons I only collect selectors when at least one character is known.! I'm an InstructionClient that tries to guess the type of a given instance variable name of a class. ! I'm a specialized controller, that works with Workspaces.! I'm the one who knows generalization to navigate an ast tree I have two concret classes: NavigateInto and NavigateOver! I'm the one who knowshow to navigate inside the child nodes! I navigate throw the childs picking allways the firs one! I'm the one who knows how to navigate going to the parent node.! Go back to the brother before! I know how to go to the previous selection in the text! I'm the one who knows how to navigate in an horizontal way visiting node in the same level statin from left to right ! I tests the navigations directions! I'm the one who manage the navigation and I have memory from what I've been navigating! I keep track of symbols to be retrieved in ocompletion algorithm. Unlike ecompletion, I learn something and try to retrieve users last occurences of typing sequences first, then the system symbols which match. TODO remove stupid symbols (like packages and method extensions and timestamp)! I keep the context of the ocompletion. I do the same as my parent but for this specific algorithm! I am the entrance door to the ocompletion algorithm. I can resolve the queried sequences and retrieve a list of answers according to ocompletion algorithm based on the last accepted sequences from the user. ! I keep a symbol entry, along with the last time it was used in the system. I am used to sort the possible answers.! I implement a null object pattern related to NOCModel in order to mark the end of possible completions in the answer list. ! I am the list of entries (possible symbols) returned by nocompletion algorithm. I am sorted according to last acceptance from the user.! I am a morphic item used to show ocompletion entries. ! I keep the state of the ocompletion algorithm. See comments of my parents for details. ! I am NaNException, an ArithmeticException signaled when Float nan was encountered where it was not allowed. ! Signals that a name lookup operation failed. hostName hostName for which the name loopup failed ! Shows the name of the morph in the halo. ! i am a core class, which provides a common functionality, required by many NativeBoost facilities to function, including: - basic memory operations - external roots registry - call gate function - session management Every new session, i using an unique instance, which is platform specific (see my subclasses). To access a current session instance, you can issue: NativeBoost forCurrentPlatform ! Provides support for looking up Forms by name for presentation in the UI. Different forms can be registered for a name for different locales allowing images presented in the UI to be localised. Typically used where images contain language dependent text. E.g. buttonForm := (NaturalLanguageFormTranslator localeID: Locale current localeID) translate: 'submit button' Form translations are added like so: (NaturalLanguageFormTranslator isoLanguage: 'en' isoCountry: 'gb') name: 'submit button' form: aForm! A NaturalLanguageTranslator is a dummy translator. The localization framework is found in the gettext package. ! I'm a new browser based on RPackage and Announcements with fancy goodies: - groups ( you can create groups with your favorite classes) - multi-selections - environments - iconic buttons - hierarchy - pragma based menus! an Announcer dedicated to Nautilus relative announcements! Announcement raised when a boolean value changed! A NautilusBreadcrumbsPlugin is a plugin which add breadcrumbs (for Igor ;) ) ! A NautilusChanged is raised when a NautilusUI send th message #changed:! A NautilusClassSelected is raised when a class is selected! A NautilusGroupSelected is raised when a group is selected! I am a page of the Help book related to Nautilus! A NautilusKeyPressed is raised each time a key is pressed on a Nautilus ui! A NautilusMCBindings is a class which basically kept bindings between RPackages and MCPackage! A NautilusMethodSelected is raised each time a mehod is selected! A NautilusMonticello is a class used to handle monticello integration into Nautilus by creating the menu entries! A NautilusPackageSelected is raised when a package is selected! NautilusPluginManager is a manger of plugins used to set up plugin for Nautilus UI! A NautilusPluginManagerTree is a tree which is used to render the plugins selection! A NautilusCategorySelected is raised when a category is selected! NautilusRefactoring is a facade for refactorings: - class - method - inst var - class var - source code! A NautilusShowCategoriesChanged is raised the value showCategories changed! A NautilusShowCommentChanged is raised when showComment is switched! A NautilusShowGroupsChanged is raised when the value showGroups is switched! A NautilusShowHierarchyChanged is raised when the value of howHierarchy is switched! A NautilusShowInstanceChanged is raised when the value of showInstances is changed! A NautilusShowPackagesChanged is raised when the value of showPackages changed! A NautilusTest is a test class for testing the behavior of Nautilus! A NautilusTextDisplayerChanged is raised when the way to display the method changed.! A UI for an instance of Nautilus! A NautilusUITest is a test class for testing the behavior of NautilusUI! I am a subclass of StandardWindow with my own icon Maybe I'm useless, but right now I'm not on the top of the to do list! A NautilusWrapper is a wrapper which hold a single step of the Nautilus browsing history! I act as a web browser history! This class implements TCP/IP style network name lookup and translation facilities. Attempt to keep track of whether there is a network available. HaveNetwork true if last attempt to contact the network was successful. LastContact Time of that contact (totalSeconds). haveNetwork returns true, false, or #expired. True means there was contact in the last 30 minutes. False means contact failed or was false last time we asked. Get out of false state by making contact with a server in some way (FileList or updates).! Abstract super class for all network related exceptions.! I am NetworkSystemSettings, a class side API to manage various system network settings, mostly related to HTTP proxying.! I represent a node for the genPushNewArray: opcode.! NewList is a new morph as replacement for PluggableListMorph. The API used is hardcoded, but NewListAdapter has been introduced to hold this "pluggable" behavior! NewListAdapter is used to link the model and the list. It holds the "pluggable" part of the widget, aka the definition of the API! I am an example of how to use the NewList. I also provide so comparision with the old List implementation. NewListExample new withNewList; openInWindow. NewListExample new withOldList; openInWindow.! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! NewListRenderer is the morph contained by a NewList used to render all the items and manage mouse events.! A NewValueHolder is a new implementation of ValueHolder based on Announcements! A NewVersionBrowser is a tool made for browsing the several versions of the provided method.! I am a specialized OSEnvironment version for *nix systems (Linux, OSX).! Signals that no network was found. This could happen, e.g., on dial-up connection when no connection was established when Squeak tried to access it. ! I am NonInteractiveTranscript, a replacement for Transcript, writing everything to a file or stdout. This is useful when running headless. NonInteractiveTranscript file install. To connect to the output stream of the virtual machine process choose stdout. NonInteractiveTranscript stdout install. ! This is a non-interactive UI manager, i.e. a UI manager which doesn't provides any kind of interactivity with users. For most of requests, it throws an ErrorNonInteractive exception, which can be handled by various tools to do things differently when UI is not avaliable. For example: response := [ UIManager default request: 'what is your name?' ] on: ErrorNonInteractive do: [:ex | ex resume: 'Mr. John Smith' ]. You can replace the default UI Manager with my instance in cases, when you need to guarantee that your task(s) will run in fully automated mode. This is useful for things like: - when image runs as a persistent application on a server - image runs headless from command-line with some batch scripts/commands ! NonReentrantWeakMessageSend does what it says, while the message is being executed, additional evaluations will be discarded. It's used by when:sendOnce:to: protocol from Polymorph events, but unused in the base image. when:send:to:exclusive: is used one place though. It's useful when objects are mutually registered to each other's events, but the actions may lead to the others action being triggered. Examples are - two lists whose contents update based on the selection in the other - The DiffMorph (Uses ExclusiveWeakMessageSend) ExclusiveWeakMessageSend are used when the decision whether to process an event is shared between multiple objects. IE 2 objects respond to different events, but if received simultaneously, only the first of them should have it's action executed. With Announcement, the corresponding functionality to non-reentrancy would be achieved using: VW - AnnouncementCollection>>suspendWhile: anActionBlock Pharo - Announcer >> suspend: aSubscriber while: anActionBlock (As we neither have a specific AnnouncementCollection class, nor access to Registry itself. Not implemented yet though :P) The shared state required to achieve Exclusivity would probably have to recide outside of the framework.! I am NotFound, an exception to indicate that something is not found in a collection. I am an Error and thus Exception. Typically, the thing not found is in my object instance variable. The collection where this thing was not found is in my inherited signaler instance variable. [ NotFound signalFor: 10 in: #(1 2 3) ] on: NotFound do: [ :exception | exception ]! I am NotYetImplement, an exception signaled when a method is a stub for code that will be implemented in the future. This is used in incremental development, for example when doing Test First development. It is similar to ShouldBeImplemented, with a slightly different meaning.! A Notification is an indication that something interesting has occurred. If it is not handled, it will pass by without effect.! A canvas which ignores all drawing commands.! A NullObjectSpec is a NullPattern object spec! I am a stream that does nothing i.e. generates and consumes an infinite number of elements (NullObject pattern). I can be used as an equivalent of /dev/null (for example a logging in off mode) or for performance benchmarks.! This class is a styler NullObject! Class Number holds the most general methods for dealing with numbers. Subclasses Float, Fraction, and Integer, and their subclasses, provide concrete representations of a numeric quantity. All of Number's subclasses participate in a simple type coercion mechanism that supports mixed-mode arithmetic and comparisons. It works as follows: If self op: arg fails because of incompatible types, then it is retried in the following guise: (arg adaptTypeA: self) op: arg adaptToTypeA. This gives the arg of typeB an opportunity to resolve the incompatibility, knowing exactly what two types are involved. If self is more general, then arg will be converted, and viceVersa. This mechanism is extensible to any new number classes that one might wish to add to Squeak. The only requirement is that every subclass of Number must support a pair of conversion methods specific to each of the other subclasses of Number. Implementation notes ---------------------------------- The implementation of #degreeCos and #degreeSin is such that results are exact for any multiple of 90. Care is also taken to evaluate the sine between -90° and 90°, this will avoid #degreesToRadians and i386 FPU sine fonction to accumulate round off errors due to approximate representation of pi. We can thus evaluate 240 degreeCos with at most 1 ulp error. It's not perfect, but better than previous implementation. For cosine, we know that: cosd(x)=cosd(abs(x)) cosd(x)=sind(90-x) thus the trick is to evaluate: cosd(x)=sind(90-abs(x)) after appropriate modulo in [-180,180[ This way, we are sure to evaluate the sine between -90° and 90° The #degreesToRadians and #sin are used rather than #degreeSin to avoid cycles. For sine, it would be necessary to evaluate either sind(x) if abs(x) <=90 or sind(180-x) if abs(x) >= 90 A possible implementation would be: | x | x := 90 + self \\ 360 - 90. x >= 180 ifTrue: [x := 180 - x]. ^x degreesToRadians sin We prefer evaluating cosd(90-x) thus providing a branch free implementation.! NumberParser is an abstract class for parsing and building numbers from string/stream. It offers a framework with utility methods and exception handling. Number syntax is not defined and should be subclassResponsibility. Instance variables: sourceStream the stream of characters from which the number is read base the radix in which to interpret digits neg true in case of minus sign integerPart the integer part of the number fractionPart the fraction part of the number if any exponent the exponent used in scientific notation if any scale the scale used in case of ScaledDecimal number if any nDigits number of digits read to form an Integer lasNonZero position of last non zero digit, starting at 1 from left, 0 if all digits are zero requestor could eventually be used to insert an error message in a text editor failBlock Block to execute whenever an error occurs! Tests to verify parsing of numbers from streams and strings. Note: ScaledDecimalTest contains related tests for parsing ScaledDecimal.! I visit each node in the abstract syntax tree while growing and shrinking a scope chain. Each method and block node is linked with its corresponding scope object, and each variable def and ref is linked with its corresponding OCVariable. Exceptions are raised for undefined variable references and so on (see subclasses of OCSemanticWarning). ! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! I override some methods in my super to generate instructions for effect only.! I override some methods in my super to generate instructions for effect and value only.! I am an argument or temporary variable of a method or block. index is not the index in the bytecode but just used for sorting (see tempVars). to be fixed...! I am an abstract superclass for Block and Method scopes! I am a symbol table where variable names are associated with SemVars. Each context (method/closure) get a fresh scope that inherits from its outer scope.! I am an entry in a Scope that gets associated with variable nodes of the same name. ! I modelt the scope of a block! I include all variable enries for class, pool and global vars.! A CompilerNotifyingTest is a TestCase for checking that Compiler/Parser notifications are inserted at the right place in a TextEditor. Instance Variables expectedErrorPositions: expectedErrors: failure: morph: text: errorPositions - the position where error text should be inserted for each chunk of text evaluated errors - the error text that should be inserted on evaluation of each chunk of text evaluated failure - an object returned in case of evaluation error and whose identity can be uniquely recognized as a failure morph - the Morph holding the text text - the string containing all the chunks to be evaluated (separated by %) and the expected error messages (`enclosed in back quotes`) this text will be stripped of the error messages before being evaluated. ! A CompilerSyntaxErrorNotifyingTest is a specialization for testing correct handling of non interactive compiler notification. Non interactive is a very relative notion in Smalltalk... Here it means that user interaction will not happen directly in the TextEditor holding source code, but rather thru a SyntaxError window that will pop-up. This test intercept the Notification before the pop-up is raised. ! CompilerTest is a holder for SUnit test of Compiler! Like Set except a key of every element is used for hashing and searching instead of the element itself. keyBlock gets the key of an element.! Holds a unique ordered collection of literals! Holds a unique set of literals. Literal objects are equal if they are #= plus they are the same class. This set uses this rule for finding elements. Example: Set new add: 'anthony'; add: #anthony; size "= 1" LiteralSet new add: 'anthony'; add: #anthony; size "= 2" ! I am a global, pool, or class variable.! I am the scope for a Method! I am the central place for example code used in tests! In Smalltalk, methods like ifTrue: are inlined an there is no Block for the arguments of these message sends. To be consistent, these blocks need nevertheless a scope. ! I test a primitive failure with perform:withArguments: which was raised when selectors with many arguments was called from methods with small stack sizes.! I am a helper class to simplify tests related to scopes. I collect all scopes of the AST. This way one can easily check for scopes and variables even when the scopes are deeply nested. Simple example (with just a method scope): |ast scopes ivar| ast := (OCOpalExamples>>#exampleiVar) parseTree doSemanticAnalysisIn: OCOpalExamples. scopes := (OCScopesCollector new visitNode: ast) scopes. ivar := scopes first lookupVar: #iVar! Raises a semantic error during semantic analysis! If a variable is not found or some other problem occurs during checking (ASTChecker) than a particular subclass instance of me is signal, usually causing a notification to the user. If not handled, the default handling is done, and compiling continues.! I get signalled when a variable in a block or method scope shadows a variable of the same name in an outer scope. The default action is to allow it.! I provide at least one test which corresponds to a message sent by InstructionStream>>#interpretNextInstructionFor: to its client.! I model self, thisContext and super! I get signalled when a temporary variable is used that is not defined. My default action is to create an Undeclared binding and add it to the Undeclared dictionary.! I get signalled when a temporary variable is used before it is assigned to. My default action is to allow it since all temps get initialized to nil.! I get signalled when no selector is defined for a message send, indicating a possible mispelling. My default action is to create a new selector.! I get signalled when a temporary variable is declared but never used. My default action is to allow it since it is benign.! I represent the user environment variables. See `man environ` for more details.! This tests the OSEnvironment. The tests assume that there is at least 1 environment variable given.! An OSPlatform is an abstract representation of a 'OS platform'. Platforms can be hierarchical, e.g., a "general" platform as superclass and more specific platforms as subclasses as long as the subclasses provide sufficient means to identify themselves. The original implementation was for Tweak. Current holds the current OSPlatform subclass Architectural considerations: most platform specific methods that need to be added to the platform class should be in the form of extensions rather then adding them directly to this package. Otherwise the platform class will degenerate very quickly into a dependence hub for all kinds of sub systems.! Object is the root class for almost all of the other classes in the class hierarchy. The exceptions are ProtoObject (the superclass of Object) and its subclasses. Class Object provides default behavior common to all normal objects, such as access, copying, comparison, error handling, message sending, and reflection. Also utility messages that all objects should respond to are defined here. Object has no instance variables, nor should any be added. This is due to several classes of objects that inherit from Object that have special implementations (SmallInteger and UndefinedObject for example) or the VM knows about and depends on the structure and layout of certain standard classes. Class Variables: DependentsFields an IdentityDictionary Provides a virtual 'dependents' field so that any object may have one or more dependent views, synchronized by the changed:/update: protocol. Note that class Model has a real slot for its dependents, and overrides the associated protocol with more efficient implementations. EventsFields an IdentityDictionary that maps each object to its dependents. Registers a message send (consisting of a selector and a receiver object) which should be performed when anEventSymbol is triggered by the receiver. Part of a new event notification framework which could eventually replace the existing changed/update mechanism. It is intended to be compatible with Dolphin Smalltalk and VSE as much as possible. Because Object is the root of the inheritance tree, methods are often defined in Object to give all objects special behaviors needed by certain subsystems or applications, or to respond to certain general test messages such as isMorph. About at: index accepting float and not only integers This behavior is also free in the sense that the failure code is only invoked when the primitive fails and so adds nothing to the cost of successful accesses, which are the high dynamic frequency operation. It will also show up under profiling if one is concerned about efficiency, and so isn't a hidden cost. It is also in keeping with Smalltalk's mixed mode/arbitrary precision implicit coercion number system that one *can* use fractions or floats as indices. Stripping out coercions like this will make the system more brittle. So please do *not* remove this "hack". I think it's a feature and a useful one. Can you give me an example that demonstrates the usefulness of this feature? | a r | a := Array new: 10 withAll: 0. r := Random new. 100 timesRepeat: [| v | v := r next * 10 + 1. a at: v put: (a at: v) + 1]. a i.e. I didn't have to provide an explicit rounding step. That's useful. But in general anywhere where an index is derived by some calculation not having to provide the rounding step could be useful/helpful/more concise. e.g. (n roundTo: 0.1) * 10 vs ((n roundTo: 0.1) * 10) asInteger. Some thought went into the original choice. It is not a hack but there by intent. The integers are simply a subset of the reals and forcing the programmer to use them is favouring the machine above the programmer. But I think you should justify getting rid of it rather than my having to justify keeping it. Getting rid of it risks breaking code. If it is there but does not harm then why get rid of it? best Eliot Miranda ! ObjectExplorer provides a hierarchical alternative to #inspect. Simply evaluate an expression like: World explore and enjoy.! Contributed by Bob Arning as part of the ObjectExplorer package. ! Represents an action that is to be taken when a target object (not referenced by the ObjectFinalizer) is garbage-collected.! An ObjectFinalizerCollection is simple collection which is intended to hold ObjectFinalizers and be used by WeakRegistry.! I am the superclass of standard layouts for Objects.! Generic object<->string converter for use with PluggableTextFieldMorph. Optional regex matching for validation. Optional transform blocks for each conversion direction.! Example class for ClassTest! An OkCancelToolbar is a model for a basic Ok-Cancel toolbar! An OkCancelToolbar is a model for a basic Ok toolbar! I am an adapter of a Slot class builder to the traditional class building protocol.! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! Answer the set of temporary variables that are read before they are written in the visited parse tree. Used by the compiler to detect those block-local temporaries of blocks in optimized loops that require nilling to prevent a value from a previous iteration persisting into a subsequent one.! I represent a collection of objects ordered by the collector.! These test cases demonstrate addition of items into an OrderedCollection as well as item removal. Some of the assertions are quite complicated and use a lot of collection protocol. Such methods do not test one single method, but protocol in general.! An OrderedIdentityDictionary is a dictionary which keep the order of addition of the elements! OrientedFill is an abstract superclass for fills which can be aligned appropriately. Instance variables: origin The point at which to align the fill. direction The direction in which the fill is defined normal Typically, just the direction rotated by 90 degrees.! OutOfMemory is signaled when an allocation fails due to not having enough memory. Its default action signals the low-space semaphore. Originally suggested by A. Raab.! Instances of this class accept, via #baseMorph:, a morph that is expected to be row-like containing submorphs. Based on the receiver's layout, the base morphs that are able to fit within the receiver (subject to minExtents) are layed out along with, if necessary, a button to pop-up a column of any remaining, unfittable, base morphs. Handy for button bars etc. Example: (OverflowRowMorph new baseMorph: (UITheme builder newRow: ((1 to: 6) collect: [:i | |label| label := 'Button ', i asString. (UITheme builder newButtonFor: Transcript getState: nil action: #show: arguments: {label} getEnabled: nil label: label help: nil) hResizing: #spaceFill]))) openInWindow ! I am a subclass of ImageReadWriter that decodes Portable Network Graphics (PNG) images. Submitted by Duane Maxwell! This class implements POP3 (Post Office Protocol 3) as specified in RFC 1939. (see http://www.ietf.org/rfc.html) You can use it to download email from the mail server to your personal mail program. To see an example of it's use, see POPSocket class>>example.! Exception for signaling POP3 login failures.! A PSMCMergeMorph is a graphical tool to navigate changes and select changes in case of conflicts.! I'm a Monticello tool based on polymorph used to browse diffs. Activate me with the setting named 'Use Polymorph difference tools'.! Subclass this class to create new Packages.! This plugin shows the tasks in the current package. A task is a method which sends #flag: to mark it as #todo, or #fixme, or whatever task you want to fix. Clicking in the specific task makes you jump to the marked method.! PackageTreeExample new open! PackageWidget is the basic implementation of a wiget managing packages! A container morph that tracks the owner's pane colour unless an explicit fillStyle is specified. Additionally allows hooking of mouseOver events (no button down).! A PanelMorphWithSplitters is which add splitters the way SystemWindow do it! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoCairoLibrary . ! self initialize! If you dont to spend 10hours building it on Mac OSX, download theme here https://github.com/plt/libs/tree/master/i386-macosx self getLibraryPath. self getLibraryHandle. self loadPangoLibrary. ! A Paragraph represents text that has been laid out, or composed, in some container. I also display the different kinds of text selection (secondary, find-replace and selection bar). Class collaborations SelectionBlock instances are built by myself and stored in the extraSelectionBlocks instance variable in order to display supplementary selections Class main API no particular main API. Instance Variables extraSelectionBlocks: findReplaceSelectionRegex: presentationLines: presentationText: refreshExtraSelection: secondarySelection: extraSelectionBlocks - a collection of SelectionBlock for the drowing of the differents kind of text selection findReplaceSelectionRegex - the find/replace matcher that is set from the editor of by the FindReplaceService presentationLines - created for debugging purpose, should be removed ? presentationText - created for debugging purpose, should be removed ? refreshExtraSelection - a boolean that is set to tru when there is a need to refresh selections secondarySelection - the string of the secondary selection that is set from the editor when a portion of text is selected text A Text with encoded per-character emphasis. textStyle A TextStyle with font set, line height and horizontal alignment. firstCharacterIndex The starting index in text for this paragraph, allowing composition of a long text into a number of containers. container A Rectangle or TextContainer that determines where text can go. lines An Array of TextLines comprising the final layout of the text after it has been composed within its container. positionWhenComposed As its name implies. Allows display at new locations without the need to recompose the text. Lines are ordered vertically. However, for a given y, there may be several lines in left to right order. Lines must never be empty, even if text is empty. Notes on yet another hack - 5 Feb 2001 We really need to clean up #composeLinesFrom:to:delta:into:priorLines:atY:!!!!!! I added one more habdful of code to correct: This is an annoying bug that's been around for a couple of years, but I finally figured out how to duplicate the problem, so I figured I'd just report it now. (It doesn't necessarily have to be fixed for 3.0 if it looks messy, but if it's a simple fix, it would be worth it.) In Morphic, if you have the following text in a workspace: This is line 1 This is line 2 **and** you have a return character after line 2, you will normally be able to click the mouse two times below line 2 in order to select all the text. If you edit line 2 (e.g. so that it reads "line number 2"), you can still select all the text by clicking below the second line. However, if you edit line 1, you will not be able to select all the text from the bottom in the same way. Things get messed up such that the last return character seems to be gone. In this state, if you position the cursor immediately after the 2, and press the right arrow, the cursor jumps to the beginning of line 2... oof. (report by Doug Way) While I don't have a very deep understanding of the above mentioned method, I was able to determine that text ending in a CR worked better in the editor when the last entry in had a start of text size + 1 and a stop of text size. I have accordingly added code near the end to ensure this. It seems to have fixed the problem, but we do need to clean this baby up some day. - Bob ! This superclass of most compiler/decompiler classes declares common class variables, default messages, and the code emitters for jumps. Some of the class variables are initialized here; the rest are initialized in class VariableNode.! ParseNodeEnumerator implements ParseNode>>nodesDo:. It can be used to enumerate an entire tree via aParseNode accept: (ParseNodeEnumerator ofBlock: aBlock) or selectively, excluding the node and subnodes for which selectBlock answers false, via aParseNode accept: (ParseNodeEnumerator ofBlock: aBlock select: selectBlock) Here's a doIt that generates and compiles the visiting methods: self superclass selectors do: [:s| self compile: (String streamContents: [:str| | arg | arg := 'a', (s allButFirst: 5) allButLast. str nextPutAll: s, ' ', arg; crtab; nextPutAll: '(theSelectBlock isNil or: [theSelectBlock value: '; nextPutAll: arg; nextPutAll: ']) ifFalse:'; crtab; tab: 2; nextPutAll: '[^nil].'; crtab; nextPutAll: 'theBlock value: '; nextPutAll: arg; nextPut: $.; crtab; nextPutAll: '^super '; nextPutAll: s, ' ', arg])]! I am an abstract superclass for ParseNode visitors that functions as a null visitor. Here's the code that defines my interface: (SystemNavigation new allImplementorsOf: #accept: localTo: ParseNode) do: [:methodReference| methodReference compiledMethod messages do: [:sel| ((sel beginsWith: 'visit') and: [sel numArgs = 1]) ifTrue: [ParseNodeVisitor compile: (String streamContents: [:str| str nextPutAll: sel; space; nextPut: $a. methodReference classSymbol first isVowel ifTrue: [str nextPut: $n]. str nextPutAll: methodReference classSymbol]) classified: 'visiting']]]! I keep track of the current and high position of the stack that will be needed by code being compiled.! I parse Smalltalk syntax and create a MethodNode that is the root of the parse tree. I look one token ahead.! "Hold a password. There are three ways to get the password. If there is no password (sequence == nil), ask the user for it. If the use supplied one during this session, return that. It is cleared at shutDown. If sequence is a number, get the server passwords off the disk. File 'sqk.info' must be in the same folder 'Squeak.sources' file. Decode the file. Return the password indexed by sequence."! I'm a Dialog whose TextEditors characters are replaced by *. Example: (UITheme builder openModal: (PasswordDialogWindow new title: 'Authentification'; textFont: StandardFonts defaultFont; text: 'Enter your password')) entryText explore! A PasswordInitializationDialogWindow is a dialog window asking twice for the same pssword to confirm it. Used to set a password and ensure the entered value! A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph. Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld. model cursor ?? padding ?? backgroundMorph A Form that covers the background. turtleTrailsForm Moving submorphs may leave trails on this form. turtlePen Draws the trails. lastTurtlePositions A Dictionary of (aPlayer -> aPoint) so turtle trails can be drawn only once each step cycle. The point is the start of the current stroke. isPartsBin If true, every object dragged out is copied. autoLineLayout ?? indicateCursor ?? resizeToFit ?? wantsMouseOverHalos If true, simply moving the cursor over a submorph brings up its halo. worldState If I am also a World, keeps the hands, damageRecorder, stepList etc. griddingOn If true, submorphs are on a grid ! I'm a private and abstract filesystem path, independent of the string representation used to describe paths on a specific filesystem. I provide methods for navigating the filesystem hierarchy and working with absolute and relative paths. I only refer to a concrete file or directory with regard to a specific filesystem. Normally users should not use me directly. Path independent representation of delimiter is defined by DiskFileSystem current delimiter. API instance creation: #* and #/ are mnemonic to . and / whose arguments should be string file- or directory names, not fragments of Unix path notation intended to be parsed. #/ and #* provide a mini-DSL for building up paths, while #readFrom:delimiter: parses path strings. Note that (Path with: 'parent/child/') isRelative returns true because it creates to a relative path to a file/directory called 'parent/child'. In bash you'd escape the slashes like this: parent\/child\/ similarly (Path with: '/parent/child/') isRelative returns true That's a relative path to '/parent/child'. In bash: /\parent\/child\/ (Path with: '') isRelative returns false Because this is an absolute path to the root of the file system. Absolute paths have an empty first element. If you consider $/ the separator, '/usr/local/bin' has an empty first element. ! I represent a model of an open sequence of connected points that can be queried for enclosing bounds and whether a point lies along any segment. I am typically used for drawing with a Canvas. ps := PathShape new addVertex: 0@0; addVertex: 30@30; addVertex: 50@10. self assert: (ps containsPoint: 24@24). self assert: (ps containsPoint: 40@30) not. Transcript show: ps calculatedBounds asString; cr.! I test a primitive failure with perform:withArguments: which was raised when selectors with many arguments was called from methods with small stack sizes.! A PermissionsEditor is a GUI for editing a user permissions! I am the default class installer. I install a new or modified class in the globals dictionary and announce this change publicly. The default environment can be changed to any SystemDictionary.! Usage: [] [--help] [--copyright] [--version] [--list] [ --no-quit ] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers --no-quit keep the image running without activating any other command line handler a valid subcommand in --list Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! I am GLMUITheme2, a small customization based on GLMUITheme (Glamorous) by Tudor Girba. GLMUITheme2 defaultSettings: nil. GLMUITheme2 beCurrent. GLMUITheme2 setPreferredWorldBackground. World backgroundMorph: nil. ! self defaultSettings: nil. self beCurrent. ! I contain the labels for the google issue tracker entries! A PharoUser is a simple object with a username and an avatar. It also works as a factory to keep already generated instances! A PharoUserPermissions is a wrapper which stores the permissions of a PharoUser! I allow to test basic and tricky cases for the Pharo interpreter, such as non local returns, exception handling, ensure blocks. Test me when you refactor / change Pharo interpreter. Instance Variables ! A PickList is a tick list done using spec.! A CheckListSettingDeclaration is a setting for which the value domain is a list. Each element of the list is an instance of FixedSettingValue. If domainValues is set, then the list of valid values is constant (initialized at declaration time). Instead, if getter is set, then the setting list is always dynamically computed. See SettingManager comment for more explanations. Instance Variables ! Groupbox without title with a vertical layout. Appears in a lighter colour than the owner's pane colour.! I am an abstract superclass for platform-specific resolvers.! A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are: getStateSelector fetch a boolean value from the model actionSelector invoke this button's action on the model getLabelSelector fetch this button's lable from the model getMenuSelector fetch a pop-up menu for this button from the model Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false. The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector. If the actionSelector takes one or more arguments, then the following are relevant: arguments A list of arguments to provide when the actionSelector is called. argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic argumentsSelector The message sent to the argumentProvider to obtain the arguments. Options: askBeforeChanging have model ask user before allowing a change that could lose edits triggerOnMouseDown do this button's action on mouse down (vs. up) transition shortcutCharacter a place to record an optional shortcut key ! An abstract canvas which modifies the behavior of an underlying canvas in some way. Subclasses should implement apply:, which takes a one argument block and an actual canvas to draw on. See apply: for the specific definition.! Pluggable form of dialog window supporting custom selector on model for applying changes along with configurable content and buttons.! Class PluggableDictionary allows the redefinition of hashing and equality by clients. This is in particular useful if the clients know about specific properties of the objects stored in the dictionary. See the class comment of PluggableSet for an example. Instance variables: hashBlock A one argument block used for hashing the elements. equalBlock A two argument block used for comparing the elements. ! A type of PluggableListMorph that supports a single icon (Form) for items. Useful for lists with icons.! luggableListItemWrapper makes it more easy for clients to use hierarchical lists. Rather than having to write a subclass of ListItemWrapper, a PluggableListItemWrapper can be used to provide the appropriate information straight from the model: string - an explicit string representation (contrary to the 'item' which contains any kind of object) getStringSelector - a message invoked to retrieve the sting representation of its item dynamically from its model (when a constant representation is undesirable) hasContentsSelector - a message invoked in the model to answer whether the item has any children or not. getContentsSelector - a message invoked in the model to retrieve the contents for its item. All callback selectors can have zero, one or two arguments with the item and the wrapper as first and second argument.! ... When a PluggableListMorph is in focus, type in a letter (or several letters quickly) to go to the next item that begins with that letter. Special keys (up, down, home, etc.) are also supported.! I'm a spec for a menu. The World menu pragma based registration uses it for now. I'm moved in this package so that later the ToolBuilder package can be unloaded. We could probably avoid MenuSpec and just use MenuMorph instead. ! A type of PluggableListMorph that supports morphs for items. Useful for lists with icons etc.! This morph can be used to show a list having multiple columns, The columns are self width sized to make the largest entry in each list fit. In some cases the pane may then be too narrow. Use it like a regular PluggableListMorph except pass in an array of lists instead of a single list. There are base assumptions made here that each list in the array of lists is the same size. Also, the highlight color for the selection is easy to modify in the #highlightSelection method. I used blue when testing just to see it work.! A pluggable panel morph which deals with changing children.! PluggableSets allow the redefinition of hashing and equality by clients. This is in particular useful if the clients know about specific properties of the objects stored in the set which in turn can heavily improve the performance of sets and dictionaries. Note: As of Pharo 1.1#11284, using normal Dictionary is actually faster as the bench below shows... ;-) Instance variables: hashBlock A one argument block used for hashing the elements. equalBlock A two argument block used for comparing the elements. Example: Adding 1000 integer points in the range (0@0) to: (100@100) to a set. | rnd set max pt | set := Set new: 1000. rnd := Random new. max := 100. Time millisecondsToRun:[ 1 to: 1000 do:[:i| pt := (rnd next * max) truncated @ (rnd next * max) truncated. set add: pt. ]. ]. The above is way slow since the default hashing function of points leads to an awful lot of collisions in the set. And now the same, with a somewhat different hash function: | rnd set max pt | set := PluggableSet new: 1000. set hashBlock:[:item| (item x bitShift: 16) + item y]. rnd := Random new. max := 100. Time millisecondsToRun:[ 1 to: 1000 do:[:i| pt := (rnd next * max) truncated @ (rnd next * max) truncated. set add: pt. ]. ]. ! A pluggable slider (rather than one that auto-generates access selectors). Needs to be themed...! A pluggable system window. Fixes the issues with label retrieval and adds support for changing children.! This morph manages a set of PluggableTabButtonMorphs. Each tab should be added in the left to right order that they should be displayed. Each tab will be evenly sized to fit the available space. This morph intercepts mouse clicks, figures out which tab was clicked, pops up the new tab as the active tab and triggers the registered event. See PluggableTabButtonMorph for information on what a tab can consist of. Example: (PluggableTabBarMorph on: nil) addTab: (Text fromString: 'Test') withAction: [Transcript show: 'Test'; cr]; addTab: (Text fromString: 'Another') withAction: [Transcript show: 'Another'; cr]; width: 200; openInHand ! This is a specialized pluggable button morph that is meant to represent a tab in a set of tabs arranged horizontally. Each tab will overlap slightly when drawn. All but one tab will be drawn in left to right order in the specified color, but lighter. The active tab will be drawn last in the full color and slightly taller to indicate that it is selected. Clicking the active tab has no effect but clicking any other tab will change the active tab to the clicked tab. This morph does not itself accept any events. The parent tab set will grab the mouse clicks and handle notifying the appropriate tabs that they have been activated or deactivated. There is a single selector which provides the text for the button label and affects the width of the tab. When the width changes the tab will inform its parent that it has changed and that the layout needs to be updated. The model for the text selector of course should be the client for the tab set. The button label can be a String, Text, or Morph. Texts work better than plain Strings.! An attribute which evaluates an arbitrary block when it is selected.! Multi-line text editor with support for accepting on both each change and/or when keyboard focus changes. Also supports custom selection colour and clickable highlights. Used for plain text, no styling, no code menu etc. to see later uses: TEnableOnHaloMenu ! Single-line text field editor with DialogWindow key integration (return for default, escape for cancel) and keyboard focus navigation (tab/shift-tab). Additionally supports pluggable converters to translate between an object and its string form and vice-versa.! I have a warningLimit ( 350 by default ) and an alertLimit ( 2* warningLimit by default ), and the number of characters of the text displayed is counted ( without space, tabs, cr etc). If my text size is below the warning limit, the background is white ( or the default color ), if it is between warningLimit and alertLimit, the background turns more and more yellow, and if it's above the alertLimit, the background turns orange :) Test it with: self example. I am designed for editing method source code !!! A PluggableThreePhaseButtonMorph is an extesion of ThreePhaseButtonMorph to make it pluggable Then a model can be defined, and queried for state, on image, off image and pressed image.! Tree item for PluggableTreeMorph.! A pluggable tree morph.! I provide fast JPEG compression and decompression. I require the VM pluginJPEGReadWriter2Plugin, which is typically stored in same directory as the Squeak virtual machine. JPEGReadWriter2Plugin is based on LIBJPEG library. This sentence applies to the plugin: "This software is based in part on the work of the Independent JPEG Group". The LIBJPEG license allows it to be used free for any purpose so long as its origin and copyright are acknowledged. You can read more about LIBJPEG and get the complete source code at www.ijg.org. ! A PluginTreeNode is a node of a NautilusPluginManagerTree! I represent an x-y pair of numbers usually designating a location on the screen.! This class stores 32bit Integer points in place. It is used to pass data efficiently to the primitive level during high-bandwidth 2D graphics operations.! SUnit Test for PointArray! This is the unit test for the class Point. ! A variant on the ObjectExlorer that works "backwards": like the ObjectExplorer, it shows a tree of objects, but expanding a node won't show the objects which that node references, but rather the objects that reference that node. Its main use is to track down memory leaks: if you want to know why a particular object is still alive, open a PointerExplorer on it and drill down until you find the root object that's referencing it. For example, find all the references to the symbol #zot with: PointerExplorer new openExplorerFor: #zot For the "name" of the object, the PointerExplorer shows each object's identityHash, to allow the user to identify when two similar objects are identical and notice cycles.! A subclass of ObjectExplorerWrapper for use with PointerExplorer. #contents is overridden to work backwards: it returns wrappers for the objects pointing to item rather than for the objects that item points to.! I am the default layout for objects. I contain a fixed number of Slots. Instances of classes using this kind of layout have always the same size.! I'm a Polygon PathShape (see PathShape).! This class implements a morph which can behave as four different objects depending on the the following two facts: - is it OPEN or CLOSED? - is it SEGMENTED or SMOOTHED. 1. The OPEN and SEGMENTED variant looks like polyline. 2. The OPEN and SMOOTHED variant looks like spline (kind of curve) 3. The CLOSED and SEGMENTED variant looks like polygon. This is actually what you get when you do PolygonMorph new openInWorld You get a triangle. See below how to manipulate these objects... 4. The CLOSED and SMOOTHED variant looks like blob (???) Prototypes of this morph can also be found in "Object Catalog". Several (different variants) of this object are among "Basic" morphs. Explore the assiciated morph-menu. It enables you - to toggle showing of "handles". They make it possible to - reposition already existing vertices (by moving yellow handles) - create new vertices (by moving green handles) - delete already existing vertices (by dragging and dropping one yellow handle closely nearby the adjacent yellow handle Handles can be made visible/hidden by shift+leftclicking the morph. This way it is possible to quickly show handles, adjust vertices and then again hide handles. - making closed polygon open, i.e. converting it to a curve (and vice versa) - toggle smoothed/segmented line/outline - set up custom dashing (for line, curves or borders of closed polygons - set up custom arrow-heads (for lines resp. curves) ------------------------------------------------------------------------------------------ Implementation notes: This class combines the old Polygon and Curve classes. The 1-bit fillForm to make display and containment tests reasonably fast. However, this functionality is in the process of being supplanted by balloon capabilities, which should eventually provide anti-aliasing as well. wiz 7/18/2004 21:26 s have made some changes to this class to 1) correct some bugs associated with one vertex polygons. 2) prepare for some enhancements with new curves. 3) add shaping items to menu.! This class holds tests for PolygonMorph! I provide settings for Morphic appearance (theme, fonts, colors, ...) that can be found and changed in the Settings browser.! Presents a list of options in a popup format. If the list is long it will split into multiple columns. If very long, the columns will be scrollable. Maximum extent of the content area is half the display extent.! I'm a dialog which ask the user to select a element in a list. See me in action: UIManager default inform: (UIManager default chooseFrom: #(one two three) values: #('1' '2' '3') message: 'Select one' title: 'PopupChoiceDialogWindowWithMessage example').! I represent an accessor for a sequence of objects (a collection) that are externally named by indices so that the point of access can be repositioned. I am abstract in that I do not implement the messages next and nextPut: which are inherited from my superclass Stream.! I traverse the filesystem in depth-first post order. Given this hierarchy: alpha beta gamma delta epsilon I would visit the nodes in the following order: beta, gamma, alpha, epsilon, delta. I use my work instance variable as a stack. I push messages that cause nodes to be traversed or visited, and execute them in reverse order.! I represent an occurrence of a pragma in a compiled method. A pragma is a literal message pattern that occurs between angle brackets at the start of a method after any temporaries. A common example is the primitive pragma: but one can add one's own and use them as metadata attached to a method. Because pragmas are messages one can browse senders and implementors and perform them. One can query a method for its pragmas by sendng it the pragmas message, which answers an Array of instances of me, one for each pragma in the method. I can provide information about the defining class, method, its selector, as well as the information about the pragma keyword and its arguments. See the two 'accessing' protocols for details. 'accessing-method' provides information about the method the pragma is found in, while 'accessing-pragma' is about the pragma itself. Instances are retrieved using one of the pragma search methods of the 'finding' protocol on the class side. To browse all methods with pragmas in the system evaluate SystemNavigation new browseAllSelect: [:m| m pragmas notEmpty] and to browse all nonprimitive methods with pragmas evaluate SystemNavigation new browseAllSelect: [:m| m primitive isZero and: [m pragmas notEmpty]]! A PragmaAdded is announced by a PragamColllector when a method defined with an acceptable pragma according to the PragmaCollector filter is added. Instance Variables ! A PragmaAnnouncement is announced by a PragmaCollector when it adds, removes or updates a PragmaHandler. Instance Variables pragma: pragma - the pragma which has been added, removed or updated ! A PragmaCollector is used in order to collect some Pragma instances. A PragmaCollector makes use of SystemChangeNotifier event notifications in order to maintain its contents up-to-date according to its filter: when a method is added, removed or updated, if the method is defined with a pragma which is acceptable according to its filter, then the collector contents is updated. A PragmaCollector makes use of an announcer in order to notify all registered listeners when a pragma is added, removed or updated. A PragmaAnnouncement is announced when a Pragma is added, removed or updated. Corresponding announcement classes are, respectiveley, PragmaAdded, PragmaRemoved and PragmaUpdated. Explore the result of the expression below. In the collected instance variable should be stored all pragmas of the system: --------------------------- (PragmaCollector filter: [:pragma | true]) reset --------------------------- In the following example, collected pragma are thoses with the 'primitive:' keyword () --------------------------- (PragmaCollector filter: [:prg | prg keyword = 'primitive:']) reset --------------------------- Instance Variables announcer: collected: filter: announcer the announcer which is used to announce the adding, the removing or the updating of a method with an acceptable pragma declaration collected the current collection of Pragma filter a block or a message send which is used in order to filter the pragma. This is a one argument valuable. When evaluated, the candidate pragam is passed as argument and the result must be a boolean. ! A PragmaCollectorReset is an announce which is announced by a PragamColllector when it is reset. see PragmaCollector>>reset. Instance Variables collector: collector - the collector which is reset ! A PragmaMenuAndShortcutRegistration is the list items holder! A PragmaMenuAndShortcutRegistrationItem is an item of a menu or keymap! For the impatients, see MenuRegistrationExample class methods and try it with: --------------- ((PragmaMenuBuilder pragmaKeyword: MenuRegistrationExample pragmaKeyword model: nil) menuEntitled: 'World') popUpInWorld --------------- PragmaMenuBuilder is for the dynamic building of menus based on pragmas. A PragmaMenuBuilder instance is the root of a tree of MenuRegistration instances. The basic principle is that each menu sub-tree is specified by a method which is tagged by a specific pragma. Such methods are dynamically retrieved and then evaluated with a MenuRegistration passed as argument (see #retrieveRegistrations). The result is a tree of MenuRegistration which roots are stored in my itemList inst. var. After the tree of MenuRegistration has been built, it is re-organized (re-organization is based on the parent declaration) and is re-ordered (based on the MenuRegistration order indications). Then the tree of MenuRegistration can serve as input for the building of a PluggableMenuSpec. The PluggableMenuSpec is itself used in order to build a MenuMorph with the help of the current ToolBuilder. (see MenuRegistration comment for more informations about how to specify menu entries). The tree of MenuRegistration is built by #buildTree in three steps (1) the collecting of the MenuRegistration instances (2) the re-organization and (3) the sorting: 1) The first step consists in evaluating all pragma methods by passing a builder (a PragmaMenuBuilder instance) as argument. Each pragma method invocation build a sub-tree which root is added to the builder itemList collection. (see #collectRegistrations). As an example, this first step could produce a tree as follow (stored in a PragmaMenuBuilder itemList inst var) : #Tools #'Other tool', parentName: #Tools / \ | (#Worspace) (#browser) (#'Test runner' ) 2) The second step consists is re-organizing the tree. A MenuRegistration can be declared with a particular parent name (by sending #parent: to it with a symbol as argument). If the parentName of a MenuRegistration X is the name of another MenuRegistration Z, then it means that X must be placed as a child of Z. This is the goal of this re-arrangement step which moves badly placed nodes at their good place. (see #arrangeRegistrations). With previous example, the second step produces: #Tools / | \ (#Worspace) (#browser) #'Other tool' , parentName: #Tools | (#'Test runner') 2) The third step consists in sorting the tree according to the order inst. var. value of each MenuRegistration. This is done in two passes: the first pass tries to assign as much order inst. var. as possible (If an item is given with a specific order, then, previous and following items order can be automatically computed - see #assignOrderWithBlock: and #orderAssignBlock). The second pass consists in a smple sort according to a sort block given by #itemSortBlock. Instance Variables model: pragmaCollector: pragmaKeywords: currentRoot: model - Serves as the default target for the menu. Note that a default target can also be declared at menu item level pragmaKeywords - The list of pragma keywords used for the declaring of my menu items pragmaCollector - The PragmaCollector associated with this builder. When a method declared with the same pragma as my pragmaKeyword is updated/added/removed my menu items are recomputed so that the resulting menu is always in sync with currently declared items. currentRoot - the current MenuRegistration in which new items are to be added ! A PragmaRemoved is announced by a PragamColllector when a method defined with an acceptable pragma according to the PragmaCollector filter is removed. Instance Variables ! A PragmaSetting is a holder for a setting. A setting is declared in a class method which contains a pragma (as examples, or ). Settings can be collected on the fly by a PragmaCollector and browsed by a SettingBrowser. Settings are organized in trees. Instance Variables allowedInStyle: description: dialog: icon: label: name: order: ordering: precondition: target: targetSelector: allowedInStyle - xxxxx description - xxxxx dialog - xxxxx icon - xxxxx label - xxxxx name - xxxxx order - xxxxx ordering - xxxxx precondition - xxxxx target - xxxxx targetSelector - xxxxx ! A PragmaUpdated is announced by a PragamColllector when a method defined with an acceptable pragma according to the PragmaCollector filter is updated (recompiled). Instance Variables ! I am the window that shows up when the debugger is launched. I show you the first lines of the stack trace that caused my apparition, and buttons to allow you to: - resume the execution - abandon the execution - debug this error - create the method if it is MessageNotUnderstood exception To see me, evaluate: 2/0! I manage the links of the chain of responsibilites to retrieve the good preference file.! I traverse the filesystem in depth-first pre order. Given this hierarchy: alpha beta gamma delta epsilon I would visit the nodes in the following order: alpha, beta, gamma, delta, epsilon. I use my work instance variable as a stack. I push nodes to be visited and visit them in reverse order.! I'm like TextDiffBuilder, but I use the pretty-printed version of the source code if available. Instance Variables sourceClass: sourceClass - this class provides the pretty-printer ! I am PrimitiveFailed, an exception signaled when a primitive fails.! I am an error raised when extending a class with an incompatible layout.! Usage: printVersion [ --numeric | --release ] --numeric Print the full version number only (e.g. 12345) --release Print the major relase number only (e.g. 1.2) Documentation: Prints the version number in an easy to parse format. This can be used in Jenkins with the "Description Setter" Plugin. Configure it like this: Regular expression: \[version\] (.*) Description: \1 Examples: pharo Pharo.image printVersion #result will be something like: [version] 3.0 #30100 pharo Pharo.image printVersion --numeric # will print a simpler version 30100 pharo Pharo.image printVersion --release # prints the Pharo release version 3.0! Yes/no dialog. Test result as to whether the dialog is cancelled (no) or not (yes).! I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced partly using the value of priority. (If anyone ever makes a subclass of Process, be sure to use allSubInstances in anyProcessesAbove:.) Process-specific storage: An old implementation using #environmentAt: [ifAbsent:/put:] protocol are no longer supported. One must not use a process-specific storage (PSS) methods directly, and instead use ProcessSpecificVariable (or subclass) instances to access process-specific storage. A new implemention is a revision towards making an access to PSS faster. When new instance of ProcessSpecificVariable are created, it obtains an unique index, which is registered using #allocatePSKey: (see class side). This allows to dynamically create as many process-specific variables as needed, and access them in fast manner via simple array index (instead of dictionary lookup, as in previous implementation). Another important aspect of new implementation is that all values in PSS are held weakly. This is done to prevent accidental memory leaks as well as no need to manually unregistering a process-specific keys , once they are no longer in use.! Change Set: ProcessBrowser Date: 14 March 2000 Author: Ned Konz email: ned@bike-nomad.com This is distributed under the Squeak License. Added 14 March: CPUWatcher integration automatically start and stop CPUWatcher added CPUWatcher to process list menu Added 29 October: MVC version 2.8, 2.7 compatibility rearranged menus added pointer inspection and chasing added suspend/resume recognized more well-known processes misc. bug fixes Added 26 October: highlight pc in source code Added 27 October: added 'signal semaphore' added 'inspect receiver', 'explore receiver', 'message tally' to stack list menu added 'find context', 'next context' to process list menu added 'change priority' and 'debug' choices to process list menu 27 October mods by Bob Arning: alters process display in Ned's ProcessBrowser to - show process priority - drop 'a Process in' that appears on each line - show in priority order - prettier names for known processes - fix to Utilities to forget update downloading process when it ends (1 less dead process) - correct stack dump for the active process ! My subclasses have values specific to the active process. They can be read with #value and set with #value:! A ProcessSpecificTest is a test case for process local and dynamic variables. ! My subclasses (not instances of them) keep state specific to the current process. There are two kinds of process-specific variables: process-local (state available for read and write in all methods inside the process), and dynamic variables (implementing dynamic scope).! A ProcessTest holds test cases for generic Process-related behaviour.! My single instance, named Processor, coordinates the use of the physical processor by all Processes requiring service.! Instances of this morph get used by SystemProgressMorph or a JobProgressBar to display a bar (i.e., the rectangular part of a progress bar). Here is an example of how to use it. | p | p := ProgressBarMorph from: 0 to: 200. p extent: 200@20. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 10) wait ]. p delete ] fork | p | p := ProgressBarMorph from: 0 to: 200. p extent: 600@7. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 5) wait ]. p delete ] fork! Used to signal progress without requiring a specific receiver to notify. Caller/callee convention could be to simply count the number of signals caught or to pass more substantive information with #signal:.! I represent a layout that places all children of some morph in their given LayoutFrame.! I am the morph the user grabs to adjust pane splitters.! ProtoObject establishes minimal behavior required of any object in Squeak, even objects that should balk at normal object behavior. Generally these are proxy objects designed to read themselves in from the disk, or to perform some wrapper behavior, before responding to a message. Current examples are ObjectOut and ImageSegmentRootStub, and one could argue that ObjectTracer should also inherit from this class. ProtoObject has no instance variables, nor should any be added.! This is the unit test for the class ProtoObject. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! A Protocol is a simple value holder representing a protocol. It's composed of a name and a set of method selectors! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! I'm an abstract announcement for protocols! ProtocolClient is the abstract super class for a variety of network protocol clients. It uses a stream rather than the direct network access so it could also work for streams on serial connections etc. Structure: stream stream representing the connection to and from the server connectInfo information required for opening a connection lastResponse remembers the last response from the server. progressObservers any object understanding #show: can be registered as a progress observer (login, transfer, etc)! Abstract super class for protocol clients protocolInstance reference to the protocol client throughing the exception. Exception handlers can access the client in order close, respond or whatever may be appropriate ! A ProtocolOrganizer is part of a ClassOrganizer. It manages the protocols of the class that owns it! A ProtocolRemovalException is an error raised when someone try to remove a protocol that should not be removed! This class is not used, but should be used when we hook into the addition and removal of protocols. Right now, we only get ClassReorganizedAnnouncement! I am a simple holder of a prototype object and hand out copies when requested.! I provide an inert model of a Class, used by FileContentsBrowser to manipulate filedout code. Instead of a method dictionary or selectors onto CompiledMethods, I have a dictionary ("source") of selectors onto ChangeRecords, which were, in the case of FileContentsBrowser, parsed from a source or change set file.! Tally for assembling system profiles. It's a subclass of Link so we can chain tallies together in the receivers list.! I represent a particular kind of Rectangle that has a border and inside color.! A yes/no/cancel message dialog. Cancel (escape & return) is the default.! A yes/no message dialog. Yes (return) is the default. Escape will answer no.! I do quoted printable MIME decoding as specified in RFC 2045 "MIME Part One: Format of Internet Message Bodies". Short version of RFC2045, Sect. 6.7: (1) Any octet, except a CR or LF that is part of a CRLF line break of the canonical (standard) form of the data being encoded, may be represented by an "=" followed by a two digit hexadecimal representation of the octet's value. [...] (2) Octets with decimal values of 33 through 60 inclusive, and 62 through 126, inclusive, MAY be represented as the US-ASCII characters which correspond to those octets [...]. (3) Octets with values of 9 and 32 MAY be represented as US-ASCII TAB (HT) and SPACE characters, respectively, but MUST NOT be so represented at the end of an encoded line. [...] (4) A line break in a text body, represented as a CRLF sequence in the text canonical form, must be represented by a (RFC 822) line break, which is also a CRLF sequence, in the Quoted-Printable encoding. [...] (5) The Quoted-Printable encoding REQUIRES that encoded lines be no more than 76 characters long. If longer lines are to be encoded with the Quoted-Printable encoding, "soft" line breaks must be used. An equal sign as the last character on a encoded line indicates such a non-significant ("soft") line break in the encoded text. --bf 11/27/1998 16:50! See my #rationale.! See my #rationale.! See rationale! I am a specific variable node for method and block arguments.! See #name for the area where I check spelling.! A RBArrayNode is an AST node for runtime arrays. Instance Variables left: position of { periods: the positions of all the periods that separate the statements right: position of } statements: the statement nodes! See rationale! See rationale! RBAssignmentNode is an AST node for assignment statements Instance Variables: assignment position of the := value the value that we're assigning variable the variable being assigned ! RBAssignmentToken is the first-class representation of the assignment token ':=' ! See rationale! See my #rationale. The message sends I identify often suggest poor design, costly execution, or other inadequate practices. See #badSelectors for the list of messages that are checked.! I am a rule that has a result. It is not clear why it is not merged with its superclass but this is ok too.! See rationale! RBBinarySelectorToken is the first-class representation of a binary selector (e.g. +) ! I am a special kind of rule where the verification is specified using a block. The methods checkClass: and checkMethods are the hooks to specify such verifications.! RBBlockNode is an AST node that represents a block "[...]". Instance Variables: arguments the arguments for the block bar position of the | after the arguments body the code inside the block colons positions of each : before each argument left position of [ right position of ] ! RBBlockReplaceRule replaces the matching node by the result of evaluating replaceBlock. This allows arbitrary computation to come up with a replacement. Instance Variables: replaceBlock The block that returns the node to replace to matching node with. ! RBCascadeNode is an AST node for cascaded messages (e.g., "self print1 ; print2"). Instance Variables: messages the messages semicolons positions of the ; between messages ! See rationale! See #name for the area where I check spelling.! See #name for the area where I check spelling.! See my #rationale.! See my #rationale.! See #name for the area where I check spelling.! See my #rationale.! I am a specific variable node used for ClassReferences! This smell arises when class or pool variable names do not start with an uppercase letter, which is a standard style in Smalltalk. In fact a lowercase character is used to represent variables with a local scope such as instance variables, temporary variables, method and block arguments. Uppercase is used to represent the case where the scope of a variable is either global (class name and global variables such as Transcript) or shared among different classes (class variables or pool variables).! See #name for the area where I check spelling.! See rationale! See my #rationale.! A RBCompositeLintRule is a composite rule holding rules.! RBConfigurableFormatter formats the Refactoring Browser's parse trees. It has many more formatting options than the default formatter used by the RB. To change the RB to use this formatter, execute "RBProgramNode formatterClass: RBConfigurableFormatter". For some refactorings the RB must reformat the code after the change, so it is good to have a formatter configured to your tastes. Instance Variables: codeStream the stream we are writing our output to indent how many times are we indenting a new line -- indents are normally tabs but could be any whitespace string lineStart the position of the character that started the current line. This is used for calculating the line length. lookaheadCode sometimes we need to lookahead while formatting, this dictionary contains the nodes that have already been formatted by lookahead originalSource the original source before we started formatting. This is used to extract the comments from the original source. ! A RBCreateCascadeRefactoring is a refactoring used to generate cascades in source code. Copied from OB-Refactory-Tools and should be moved into RB instead ! See my #rationale. When a class defines = also and not hash, this can lead to really subtle bugs and behavior where sometimes it appears that an object is in a set and sometimes not. One pattern proposed by Kent Beck in Best Smalltalk Practices is to define hash in terms of instance variable hash xor. Here is an example: Book>>= anotherBook ^ (self author = anotherBook author) and: [self title = anotherBook title] Book>>hash ^ (self title hash bitXor: self title hash ! See rationale! See rationale! See my #rationale. The methods are equivalent when they have the same abstract syntax tree, except for variable names. The methods new and initialize are ignored because they are often overridden for compatilbity with other platforms. The ignored methods can be edited in #ignoredSelectors! I'm an scanned error. I can have multiple causes.! See my #rationale. If the arguments are used in multiple methods this is a clear indication for the creation of an object representing the context in which the computation should occur. The defined number of arguments can be edited in #argumentsCount.! See my #rationale. Several possibilities can occur. Here are some hints: - check whether some classes in the hierarchy just do not add enough behavior to require a class in itself - check whether all the classes are the root of a kind of little inheritance hierarchy. Note that often a framework may already define a certain level of inheritance, with other layers added by user code. This rule does not take these frameworks into account. The defined inheritance depth can be edited in #inheritanceDepth.! See my #rationale. A good design assigns one responsibility to a class. Ask yourself, "what is the key responsibility of this class?" Using the strategy design pattern may be a solution to structure and delegate some behavior. An indication that a class may have too many responsibilities is when different groups of methods access a subpart of the instance variables. In a large system, having some large classes is often inevitable; but when there are more than a couple of large classes, you should really reconsider your design. The defined number of methods can be edited in #methodsCount.! See my #rationale. Sometimes instance variables are used instead of method arguments or temporaries. You can check if an instance variable's value is always valid during the complete lifetime of an object. In addition, looking at methods used together by a group of methods may be an indication that a new object should be created. Large classes often exhibit a large number of instance variables. Some people also confuse classes and namespaces. The defined number of instance variables can be edited in #variablesCount.! I am a specialized version of the RBParser that takes the specialized sublcasses of RBVariableNode into account.! See rationale! RBIdentifierToken is the first class representation of an identifier token (e.g. Class) ! See my #rationale. This rule pays attention not to flag methods with pragmas and test methods which are likely to be sent through reflection. Now if your code is used and extended by others, better use a deprecation mechanism, following the pattern: foo self deprecated: ''Use bar instead ''. ^ self bar! See my #rationale. Extension methods: Superclass extenstion methods are ignored, since they may have a different protocol name. Pay attention when you apply automatic recategorization because it may move the subclass's method in another package.! See my #rationale. In addition, have a look at the initialize method in each of the subclasses because if the instance variable is really the same, it will be initialized similarly in different places.! See my #rationale.! See #name for the area where I check spelling.! A stupid spell checker implementation, to be used in case no native spell checker is available. Uses a combined word-list of and .! See my #rationale. Just sending super often happens due to code changes or when you simply forget that you wanted to extend the behavior of a superclass method.! RBKeywordToken is the first-class representation of a keyword token (e.g. add:)! I represent an executable check applied on an environment (groups of classes, methods... )! See my #rationale.! See my #rationale. This smell checks methods having #(#true #false #nil) in their literal frame, which may be a bug. ! A RBLiteralArrayNode is an AST node that represents literal arrays and literal byte arrays. Instance Variables contents: literal nodes of the array isByteArray: if the receiver is a literal byte array start: source position of #( or #[ stop: source position of ) or ]! RBLiteralNode is an AST node that represents literals.! RBLiteralToken is the first-class representation of a literal token (entire literals, even literal arrays, are a single token in the ST80 grammar.). Instance Variables: stopPosition The position within the source code where the token terminates. ! RBLiteralNode is an AST node that represents literal values (e.g., #foo, true, 1, etc.), but not literal arrays. Instance Variables: token the token that contains the literal value as well as its source positions! See #name for the area where I check spelling.! See my #rationale. Long methods should often be split into several smaller ones. When you start to need an empty line to separate groups of statements, this is an indication that you should probably define a new method. Do not forget that methods are points of extension in an object-oriented language. It means that each time you define a method, a subclass may override and extend it while taking advantage and reusing the calling context of your method. This is the basis for the Hook and Template Design Pattern and central to good object-oriented design. So keep your methods short. Use the extract method refactoring, which even checks whether the method you are extracting already exists in the class. The defined number of statements can be edited in #longMethodSize. In the future such rule should hold state and not be based on method redefinition for its customization. ! A native spell checker of the Apple OS X platform. Source code is ripped from JMMMacSpelling.1.cs by John McIntosh .! RBMessageNode is an AST node that represents a message send. Instance Variables: arguments our argument nodes receiver the receiver's node selector the selector we're sending (cached) selectorParts the tokens for each keyword ! See #name for the area where I check spelling.! See my #rationale.! See my #rationale.! See my #rationale.! See my #rationale.! RBMethodNode is the AST that represents a Smalltalk method. Instance Variables: arguments the arguments to the method body the body/statements of the method nodeReplacements a dictionary of oldNode -> newNode replacements replacements the collection of string replacements for each node replacement in the parse tree selector the method name (cached) selectorParts the tokens for the selector keywords source the source we compiled tags the source location of any resource/primitive tags ! See #name for the area where I check spelling.! See #name for the area where I check spelling.! See my #rationale.! See rationale! See my #rationale.! See my #rationale.! When using cascaded messages, it is often important to finish the cascade with a yourself message. Why? for several reasons. First the messages in the cascade may not return the last receiver but the argument as in the well known case of adding elements in a collection. | col | col := (OrderedCollection new: 2) add: 1; add: 2. In this example, col will be assigned to 2 instead of an orderedCollection because add: returns its argument and not the receiver. The correct way to do it is using yourself (since yourself returns the receiver). | col | col := (OrderedCollection new: 2) add: 1; add: 2 ; yourself. Second case. Using yourself you can block the influence of redefined method. Imagine the following example: a method creating an instance, initializing it and returning it. Box class >> new | inst | inst := self new. inst initialize. ^ inst What this code ensures is that the instance is returned. Using ^ inst initialize would have return the same (but with the risk that if initialize did not return the receiver the new method would not return the right instance) The previous code can be expressed as follow: Box class >> new ^ self new initialize ; yourself Here yourself play the same role as the ^ inst above. ! See my #rationale.! See rationale! See my #rationale.! See my #rationale.! I am a node representing a source code segement that could not be parsed. I am manly used for source-code coloring where we should parse as far as possible and mark the rest as a failure.! A RBParseTreeLintRule is a rule that is expressed using a parse tree matcher on a method AST.! ParseTreeRewriter walks over and transforms its RBProgramNode (tree). If the tree is modified, then answer is set to true, and the modified tree can be retrieved by the #tree method. Instance Variables: tree the parse tree we're transforming! RBParseTreeRule is the abstract superclass of all of the parse tree searching rules. A parse tree rule is the first class representation of a particular rule to search for. The owner of a rule is the algorithm that actually executes the search. This arrangement allows multiple searches to be conducted by a single Searcher. Instance Variables: owner The searcher that is actually performing the search. searchTree The parse tree to be searched. ! ParseTreeSearcher walks over a normal source code parse tree using the visitor pattern, and then matches these nodes against the meta-nodes using the match:inContext: methods defined for the meta-nodes. Instance Variables: answer the "answer" that is propagated between matches argumentSearches argument searches (search for the BRProgramNode and perform the BlockClosure when its found) context a dictionary that contains what each meta-node matches against. This could be a normal Dictionary that is created for each search, but is created once and reused (efficiency). messages the sent messages in our searches searches non-argument searches (search for the BRProgramNode and perform the BlockClosure when its found)! RBParser takes a source code string and generates an AST for it. This is a hand-written, recursive descent parser and has been optimized for speed. The simplest way to call this is either 'RBParser parseExpression: aString' if you want the AST for an expression, or 'RBParser parseMethod: aString' if you want to parse an entire method. Instance Variables: currentToken The current token being processed. emptyStatements True if empty statements are allowed. In IBM, they are, in VW they aren't. errorBlock The block to evaluate on a syntax error. nextToken The next token that will be processed. This allows one-token lookahead. scanner The scanner that generates a stream of tokens to parse. source The source code to parse tags The source intervals of the tags appearing at the top of a method (e.g. Primitive calls) Shared Variables: ParserType the type code we are parsing! RBPatternBlockNode is the node in matching parse trees (it never occurs in normal Smalltalk code) that executes a block to determine if a match occurs. valueBlock takes two arguments, the first is the actual node that we are trying to match against, and second node is the dictionary that contains all the metavariable bindings that the matcher has made thus far. Instance Variables: valueBlock The block to execute when attempting to match this to a node. ! RBPatternBlockToken is the first-class representation of the pattern block token. ! RBPatternMessageNode is a RBMessageNode that will match other message nodes without their selectors being equal. Instance Variables: isCascadeList are we matching a list of message nodes in a cascaded message isList are we matching each keyword or matching all keywords together (e.g., `keyword1: would match a one argument method whereas `@keywords: would match 0 or more arguments)! RBPatternMethodNode is a RBMethodNode that will match other method nodes without their selectors being equal. Instance Variables: isList are we matching each keyword or matching all keywords together (e.g., `keyword1: would match a one argument method whereas `@keywords: would match 0 or more arguments) ! RBPatternParser is a subclass of RBParser that allows the extended syntax that creates matching trees. These trees can be used by the ParseTreeMatcher to search and transform source code. ! RBPatternScanner is a subclass of RBScanner that allows the extended syntax of pattern matching trees. ! RBPatternVariableNode is an AST node that is used to match several other types of nodes (literals, variables, value nodes, statement nodes, and sequences of statement nodes). The different types of matches are determined by the name of the node. If the name contains a # character, then it will match a literal. If it contains, a . then it matches statements. If it contains no extra characters, then it matches only variables. These options are mutually exclusive. The @ character can be combined with the name to match lists of items. If combined with the . character, then it will match a list of statement nodes (0 or more). If used without the . or # character, then it matches anything except for list of statements. Combining the @ with the # is not supported. Adding another ` in the name will cause the search/replace to look for more matches inside the node that this node matched. This option should not be used for top level expressions since that would cause infinite recursion (e.g., searching only for "``@anything"). Instance Variables: isAnything can we match any type of node isList can we match a list of items (@) isLiteral only match a literal node (#) isStatement only match statements (.) recurseInto search for more matches in the node we match (`) ! RBPatternWrapperBlockNode allows further matching using a block after a node has been matched by a pattern node. Instance Variables: wrappedNode The original pattern node to match! RBPragmaNode is an AST node that represents a method pragma. Instance Variables: arguments our argument nodes left position of < right position of > selector the selector we're sending (cached) selectorParts the tokens for each keyword! RBProgramNode is an abstract class that represents an abstract syntax tree node in a Smalltalk program. Subclasses must implement the following messages: accessing start stop visitor acceptVisitor: The #start and #stop methods are used to find the source that corresponds to this node. "source copyFrom: self start to: self stop" should return the source for this node. The #acceptVisitor: method is used by RBProgramNodeVisitors (the visitor pattern). This will also require updating all the RBProgramNodeVisitors so that they know of the new node. Subclasses might also want to redefine match:inContext: and copyInContext: to do parse tree searching and replacing. Subclasses that contain other nodes should override equalTo:withMapping: to compare nodes while ignoring renaming temporary variables, and children that returns a collection of our children nodes. Instance Variables: comments the intervals in the source that have comments for this node parent the node we're contained in Shared Variables: FormatterClass the formatter class that is used when we are formatted! RBProgramNodeVisitor is an abstract visitor for the RBProgramNodes. ! RBReadBeforeWrittenTester is a visitor that identifies variables that may have been read before they are initialized. Instance Variables: checkNewTemps description of checkNewTemps read description of read scopeStack description of scopeStack ! Make a given class concrete, by providing empty templates for all the abstract methods.! The receiver is signaled whenever a precondition of a refactoring is violated. The action block, if defined, might help the user to resolve the issue.! This error is signalled whenever there is a non recoverable error during refactorings.! The receiver is a warning that usually requires the user to validate. This is used in situations where either the behavior of the program will not be strictly preserved or the change may have a wider impact than the user may think. ! I am the superclass of all refactoring change objects. All I have is a name for the refactoring, but I can perform one or more refactoring operations with the message #execute. I am a composite object. To know about my components, ask me with #changes and #changesSize. ! See my #rationale.! See my #longDescription .! RBReplaceRule is the abstract superclass of all of the transforming rules. The rules change the source code by replacing the node that matches the rule. Subclasses implement different strategies for this replacement. Subclasses must implement the following messages: matching foundMatchFor: Instance Variables: verificationBlock Is evaluated with the matching node. This allows for further verification of a match beyond simple tree matching. ! RBReturnNode is an AST node that represents a return expression. Instance Variables: return the position of the ^ character value the value that is being returned ! See my #rationale.! RBScanner is a stream that returns a sequence of token from the string that it is created on. The tokens know where they came from in the source code and which comments were attached to them. Instance Variables: buffer Accumulates the text for the current token. characterType The type of the next character. (e.g. #alphabetic, etc.) classificationTable Mapping from Character values to their characterType. comments Source intervals of scanned comments that must be attached to the next token. currentCharacter The character currently being processed. errorBlock The block to execute on lexical errors. extendedLiterals True if IBM-type literals are allowed. In VW, this is false. nameSpaceCharacter The character used to separate namespaces. numberType The method to perform: to scan a number. separatorsInLiterals True if separators are allowed within literals. stream Contains the text to be scanned. tokenStart The source position of the beginning of the current token Class Instance Variables: classificationTable the default classification table for all characters Shared Variables: PatternVariableCharacter the character that starts a pattern node! RBSearchRule is a parse tree rule that simply searches for matches to the rule. Every time a match is found, answerBlock is evaluated with the node that matches and the cureent answer. This two-argument approach allows a collection to be formed from all of the matches (Think inject:into:). Instance Variables: answerBlock Block to evaluate with the matching node and the current answer. ! I am a specialized version for the 'self'! See my #rationale. A common example of this is in creation methods. You might define a method such as: createInstance ^super new initialize If the new method is not defined in the class, you should probably rewrite this to use self instead. Also, if the new method is defined, you might question why you need to send new to the superclass instead of to the class.! See my #rationale.! RBSequenceNode is an AST node that represents a sequence of statements. Both RBBlockNodes and RBMethodNodes contain these. Instance Variables: leftBar the position of the left | in the temporaries definition periods the positions of all the periods that separate the statements rightBar the position of the right | in the temporaries definition statements the statement nodes temporaries the temporaries defined ! I apply a lint rule to all classes and methods in a given environment.! RBSpecialCharacterToken is the first class representation of special characters. ! Abstract superclass. See subclasses.! Check for string concatenation inside some iteration message. Since string concatenation is O(n^2), it is better to use streaming since it is O(n) - assuming that n is large enough. As a general principal avoid , since the receiver is copied. Therefore chaining , messages will lead to multiple useless copies of the receiver. Instead of writing | string | string := String new. #(1 2 3) do: [ :each | string := string, each asString]. ^ string Write, it is much more efficient. String streamContents: [:s | #(1 2 3) do: [:each | s nextPutAll: each asString]] ! RBStringReplaceRule replaces a matched tree with another tree (which may include metavariable from the matching tree). This is a very succint syntax for specifying most rewrites. Instance Variables: replaceTree The tree to replace the matched tree with. ! RBStringReplacement represents replacing source in the original method with a different string. These are used when reformatting code after a parse tree change has been made. Depending on the change, it may be possible to minimally change the parse tree without needing to format it. Instance Variables: startPosition the start position in the original source stopPosition the end position in the original source string replaces everything from the startPosition to the endPosition with this string ! See my #rationale.! I am a specialized variable node for 'super'! See my #rationale.! See rationale! Move a method from the class to the instance side, or vice versa. Normally this is not considered to be a refactoring.! See my #rationale.! I am a specialized variable node for temporary variables! See my #rationale.! See #name for the area where I check spelling.! See my #rationale.! See rationale! I represent the specialized variable named 'thisContext'! RBToken is the abstract superclass of all of the RB tokens. These tokens (unlike the standard parser's) remember where they came from in the original source code. Subclasses must implement the following messages: accessing length Instance Variables: sourcePointer The position in the original source code where this token began. ! A RBTransformationRule is a special rule that not only detects problems but also can automatically transform the good.! See rationale! See my #rationale.! See my #rationale.! See my #rationale.! See rationale! See my #rationale.! See my #rationale.! See rationale! See my #rationale.! See my #rationale.! RBValueNode is an abstract class that represents a node that returns some value. Subclasses must implement the following messages: accessing startWithoutParentheses stopWithoutParentheses testing needsParenthesis Instance Variables: parentheses the positions of the parethesis around this node. We need a collection of intervals for stupid code such as "((3 + 4))" that has multiple parethesis around the same expression. ! RBValueToken is the abstract superclass of all tokens that have additional information attached. For example, the BinarySelector token holds onto the actual character (e.g. $+). Instance Variables: value The value of this token ! See my #rationale.! RBVariableNode is an AST node that represent a variable (global, inst var, temp, etc.). Instance Variables: token the token that contains our name and position ! See my #rationale.! See my #rationale.! I do quoted printable MIME decoding as specified in RFC 2047 ""MIME Part Three: Message Header Extensions for Non-ASCII Text". See String>>decodeMimeHeader! This is the abstract class for container-based elements. Elements are separated in groups by kind (e.g classes, methods, pools, etc.) Subclasses have to define the kind of collection for a particular group of entities. For a container the use of a dictionary or another collection (e.g. SortedCollection) to store group of elements is independent. ! An RGBehaviorDefinition is an abstract definition for class-alike entities (e.g. classes, traits) Instance Variables methods: protocols: superclass: ! RGClassDefinition is the concrete representation of a class (no trait)! RGClassDescriptionDefinition is the common parent for classes and metaclasses defining instance variables! RGCommentDefinition is a first-class representation of class's comments! A concrete container already knows how to treat classes, methods and packages. ! RGElementDefinition is the abstract class for representing elements of a class-alike definition (i.e., methods, variables, comment). parent holds the RGClassDefinition or RGMetaclassDefinition defining this element. Now a RingEntityDefinition offers two APIs: one that is generic and works for all the source code entities and this is the one we just presented: parent, parentName and realParent. Having such interface is important to build generic tools that could manipulate any entities in a polymorphic way (yes no isKindOf: everywhere). In addition, a ring method definition offers a specific interface that should only be used when you know that you are solely manipulate specific entity such as class element: method definition, class comment, and variables. Here is the equivalence table realParent realClass parent ringClass parentName className For example for a methodDefinition we will have the following: GENERIC API ------------------ * To access the ring class definition name, use parentName aRGMethodDefinition parentName Example: (Point>>#dist:) asRingDefinition parentName -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition parent Example: aRGMethodDefinition(Point>>#dist:) parent -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realParent aRGMethodDefinition realParent Example: (Point>>#dist:) asRingDefinition realParent -> Point CLASS Element specific API ------------------------------------------ * The message class returns the class of the object :). Yes as you see we could not use class and className because class is already used to refer to the class of the object. Example: (Point>>#dist:) asRingDefinition class -> RingMethodDefinition * The message className returns the name of the ring class defining the reingMethodDefinition. Example: (Point>>#dist:) asRingDefinition className -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition ringClass Example: aRGMethodDefinition(Point>>#dist:) ringClass -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realClass aRGMethodDefinition realClass Example: (Point>>#dist:) asRingDefinition realClass -> Point ! RGFactory is responsible for creating instances of the Ring meta-model classes! An RGGlobalDefinition is an abstract superclass for representing classes, global variables and shared pools ! RGMetaclassDefinition is a concrete representation of metaclasses of classes (traits are excluded)! RGMetatraitDefinition is a concrete representation of metaclasses of traits! RGMethodDefinition is a concrete representation of methods. It can be used to build browser for methods that are not in the image. It is polymorphic with CompiledMethod. * We can ask a RGMethodDefinition for its selector using the selector message. Example: (Point>>#dist:) asRingDefinition selector -> #dist We can also ask the ring object representation of its class or the Smalltalk class actually implementing the corresponding compiledMethod. * To access the ring class definition name, use parentName aRGMethodDefinition parentName Example: (Point>>#dist:) asRingDefinition parentName -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition parent Example: aRGMethodDefinition(Point>>#dist:) parent -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realParent aRGMethodDefinition realParent Example: (Point>>#dist:) asRingDefinition realParent -> Point Now a RingEntityDefinition offers two APIs: one that is generic and works for all the source code entities and this is the one we just presented: parent, parentName and realParent. Having such interface is important to build generic tools that could manipulate any entities in a polymorphic way (yes no isKindOf: everywhere). In addition, a ring method definition offers a specific interface that should only be used when you know that you are solely manipulate specific entity such as class element: method definition, class comment, and variables. Here is the equivalence table realParent realClass parent ringClass parentName className * The message class returns the class of the object :). Example: (Point>>#dist:) asRingDefinition class -> RingMethodDefinition * The message className returns the name of the ring class defining the reingMethodDefinition. Example: (Point>>#dist:) asRingDefinition className -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition ringClass Example: aRGMethodDefinition(Point>>#dist:) ringClass -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realClass aRGMethodDefinition realClass Example: (Point>>#dist:) asRingDefinition realClass -> Point ! RGDefinition is a named ring object.! A namespace is a container that in addition to managing classes and methods, it also knows how to treat pools and global variables! RGObject is the root class of the Ring meta-model. A ring object can be annotated and knows its environment! RGPackage is the representation for packages. A package manages classes, methods and children packages as elements. A package can also know in which package is defined ! A slice is an arbitrary container of elements (working unit) By inheritance it knows how to treat classes and methods ! RGTraitDefinition is the concrete representation of a trait (no class)! RGTraitDescriptionDefinition is the common parent for traits and metatraits that know their users (ie. classes/metaclasses)! A RPackage is a new implementation of package. Note that it does not touch classes but it is just a layer on top of classes therefore removing a method from a package does not change the underlying class. Instance Variables classDefinedSelectors: Dictionary classExtensionSelectors: Dictionary metaclassDefinedSelectors: Dictionary metaclassExtensionSelectors: Dictionary packageName: String classes: OrderedCollection of Symbols classTags: is a mapping from tags to classNames The reason we use four dictionaries is that this way we only store #Point in both as the class and the metaclass are involved. We do not have to with Point_class problem when comparing defined and extended classes. The idea is taken from the RBSelectorEnvironment. Class Invariant one: Classes should not contain metaclass name, but only class names Implementation notes ==================== This class went over 3 internal representations implementation. - first: a list of class + two dictionaries: class * methods This was not good since we add to go all the time over the list of classes. - second: 4 dictionaries class * selectors This was not good since we want to have defined classes without methods. - third: 4 dictionaries + definedClasses Originally I wanted to avoid to have a defined class list and I wanted to avoid to have to declare the class as defined. But this is not really good since - we will want to know if a class definition (without method for example is defined in a given package) - second this is easier to hook the packageOf: behavior (we register the package class when the class is added to the package). defined classes information is redundant with the dictionary keys of defined methods but we would have to check and register the class to the packageOrganizer the first time a method is defined then also check on remove to unregister the class from the packageOrganizer. Adding a method does not define the class as a defined package class. This has to be done explictly. The reason for this choice is that a class should register to the packageOrganizer and that I do not want to do it each time a method is added and I do not want to test it each time a method is added. Now this is done only when the class is declared as defined. We could also give the complete freedom to the client to register the class but I thought it was a good compromise. ClassTag are tags that can be associated to classes. They help user organizing their class internal. So that we can have a package infrastructure as follows: Package1 ClassA ClassB in case there is no tags associated to the package or Package2 Tag1 ClassA ClassB Tag2 ClassC ClassD ClassE ClassA Todo ==== Next: - finish - build up a synchronizer that import PackageInfo. ! A dummy class to run some benchmarcks! I am a public announcement sent when a new RPackage is created! The tests takes as fixture the following situation (which is constructed partially) For tests that do not need to check the incremental construction. P1 A1DefinedInP1>>methodDefinedInP1 B1DefinedInP1 A2DefinedInP2>>methodDefinedInP1 (was *P2) P2 A2DefinedInP2>>methodDefinedInP2 B2DefinedInB2 P3 A3DefinedInP3 A2DefinedInP2>>methodDefinedInP3 (was *P2*)! I had some problems using the 'ensure:' method. There was some conflicts with the organizer used for the test when trying to clean the classes, categories and packages generated for the test. There is something I don't get with this method. Therefore I choosed to clean by default all possible generated classes, categories and packages after each test using the tearDown method. For now, all that was in the 'ensure:' methods has been commented. Look for example at: testAddMethodInClassicCategoryAddMethodToTheParentPackageOfItsClass and try to uncomment it! A RPackageOrganizer is responsible for providing all the package currently defined in the system. In addition it provides a back pointer from the class to its package. The classPackageMapping and the classExtendingPackageMapping should be moved in the future to the classes themselves. For tests or actions that could destroy the package organizer, do not access directly the singleton of RPackageOrganizer. Use instead RPackage withOrganizer: aNewOrganizer do: ablock or via RPackage organizer RPackageOrganizer fillUp will fill up the system from the current PackageOrganizer "self fillUp" ----------------------------------------------------------------------------------------------------------------------------------------------- A rpackageOrganizer update itself when some changes are made in the system. It does that by registering to a systemAnnoucer, specifying an action when an annoucement is triggered. Here is what I (Cyrille Delaunay) propose to do for each annocuement triggered: SystemCategoryAddedAnnouncement => I would just register a new RPackage (if it does not already exist) in the RPackageOrganizer SystemCategoryRemovedAnnouncement => I would just unregister the RPackage concerned from the organizer SystemCategoryRenamedAnnouncement => I would update the RPackage concerned, by changing its name => I would update the 'packages' dictionary of the organizer, putting the new name as key SystemClassAddedAnnouncement => Import the class in the RPackage concerned (RPackage >> importClass:) => Register the class in the 'classPackageMapping' dictionary of the organizer (RPackageOrganizer >> registerPackage:forClass) (=> maybe we should pay attention if both the class and the metaclass launch this kind of event ?) SystemClassRecategorizedAnnouncement => I would update the old RPackage concerned: => unregister the class => unregister all defined methods of the class => I would update the new RPackage: => Import the class in the RPackage (importClass:) => I would update the organizer: => update the 'classPackageDictionary' to point on the new RPackage SystemClassRemovedAnnouncement => I would update the RPackake concerned => unregister the class => unregister all defined methods of the class => I would update the organizer: => update the 'classPackageDictionary' to remove the class SystemClassRenamedAnnouncement => I would update the RPackage in which the class is defined: => update the 'classDefinedSelectors' dictionary (replace the old key by the new one) => update the 'metaclassDefinedSelectors' dictionary (replace the old key by the new one) => I would update all RPackages extending this class => update the 'classExtensionsSelectors' dictionary (replace the old key by the new one) => update the 'metaclassclassExtensionsSelectors' dictionary (replace the old key by the new one) => I would update the organizer => update the 'classPackageDictionary' to replace the key with the new class name => update the 'classExtendingPackagesMapping' to replace the key with the new class name SystemClassReorganizedAnnouncement (=> I guess we should check if extensions have not been added or removed ? (to retrieve this information, the only thing I found is ClassDescription >> organization, and then check each category begining with '*' and compare with the organizer. seems to be painful, no?)) => when an extension is removed, all methods inside are removed. Therefore, the MethodRemovedAnnounecement will do the job. Not sur this one still usefull SystemProtocolAddedAnnouncement => I don't see anything to do for this annoucement SystemProtocolRemovedAnnoucement => If the category is an extension from a package, I would move all the methods concerned, from the extending RPackage to the class RPackage SystemMethodAddedAnnouncement => I would check the category in which the method has been defined => if it correspond to an extending package -> add the method to the extending RPackage => if not, add the method to the class parentPackage SystemMethodModifiedAnnouncement this annoucement can correspond to several kind of modifications: * a method has been renamed => I would update the rPackage in which the method is defined to replace the old selector by the new one * a method has been move to another category -maybe from a classic category to an extending package => we should move the method from the method class parentPackage to extendingPackage package -maybe from an extending package to another extending package => we should move the method from the extendingPackage package to the other extendingPackage package -maybe from an extending package to a classic category => we should move the method from the extendingPackage to the method class parentPackage -maybe from a classic category to another classic category => we have nothing to do SystemMethodRecategorizedAnnouncement same thing than above SystemMethodRemovedAnnouncement => I would simply remove the method from the RPackage in which it is register! RPackageOrganizerTest tests the behavior of PackageOrganizer. Note that it does not rely on announcement to be emitted to maintain invariants. Therefore the new created PackageOrganizer is not registered to listen to event. ! The tests takes as fixture the following situation and exercises the readonly queries. We should be able to use a test resources to speed it up. P1 A1DefinedInP1 A1DefinedInP1>>methodDefinedInP1 B1DefinedInP1 A2DefinedInP2>>methodDefinedInP1 P2 A2DefinedInP2 A2DefinedInP2>>methodDefinedInP2 B2DefinedInB2 P3 A3DefinedInP3 A2DefinedInP2>>methodDefinedInP3 ! I am a public announcement sent when a new RPackage is renamed! I'm a set who can be instantiated by pattern matching RPackages ("name" and "name-*"). My purpose is to provide a bridge between monticello and system packages, to allow backward compatibility with old packaging. ! I am a public announcement sent when a new RPackage is unregistred ( kind of removed from the system )! A simulation of a FileStream, but living totally in memory. Hold the contents of a file or web page from the network. Can then fileIn like a normal FileStream. Need to be able to switch between binary and text, as a FileStream does, without recopying the whole collection. Convert to binary upon input and output. Always keep as text internally.! I represent a radial gradient paint. The center point and radius defining a circle where gradient will be drawn in user space coordinates. The gradient's ramp color at 0 maps to the focal point and ramp color at 1 maps to the edge of the circle, interpolating colors in between. Also check the comment of my superclass to know better how and when you can use me. ! A RadioButtonGroup is a group for radio buttons which ensure that only radio button of this group is activated at the same time.! A RadioButtonGroupExample is an simple example about how to use RadioButtons and RadioGroup! A RadioButtonModel is a spec model for RadioButton !! The method privateSetState: is really private and should only be used by RadioButtonGroup !! You can also have a look at RadioButtonGroupExample for a full example of how to use them with a group.! see BorderedMorph! This Random Number Generator graciously contributed by David N. Smith. It is an adaptation of the Park-Miller RNG which uses Floats to avoid the need for LargeInteger arithmetic. If you just want a quick random integer, use: 10 atRandom Every integer interval can give a random number: (6 to: 12) atRandom SequenceableCollections can give randomly selected elements: 'pick one of these letters randomly' atRandom SequenceableCollections also respond to shuffled, as in: ($A to: $Z) shuffled The correct way to use class Random is to store one in an instance or class variable: myGenerator := Random new. Then use it every time you need another number between 0.0 and 1.0 (excluding) myGenerator next You can also generate a positive integer myGenerator nextInt: 10! A RangeSettingValue is a setting for which the value domain is an interval. See SettingManager comment for more explanations. Instance Variables range: range - The interval which define the value domain ! A RawSpec is a spec used to describe whatever you want. It simply works as a stack of interpreted symbols! I represent an accessor for a sequence of objects that can only read objects from the sequence.! I am an SUnit test for ReadStream. I have no test fixtures.! I represent an accessor for a sequence of objects. My instances can both read and store objects.! This is the unit test for the class ReadWriteStream. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! Responsible for real-estate management on the screen, which is to say, controlling where new windows appear, with what sizes, etc. 5/20/96 sw! RecentMessageList record and store all the changes and can show them by doing RecentMessageList openInWorld.! I represent a rectangular area of the screen. Arithmetic functions take points as arguments and carry out scaling and translating operations to create new instances of me. Rectangle functions create new instances by determining intersections of rectangles with rectangles. Note 1: only rectangles parallel to reference frame (Screen) can be represented by this class. Note 2: the Rectangle is represented by two extremities of one diagonal. By convention, it must be the diagonal: from rectangle origin (the point having smallest coordinates in reference frame), to rectangle corner (the point having largest coordinates in reference frame). Note 3: Screen coordinates conventions are: x is horizontal axis, zero at left border, oriented toward right; y is vertical axis, zero at top border, oriented toward bottom. This corresponds to the latin convention for writing text from left to right and top to bottom. Note 4: the Rectangle extent is obtained by subtracting rectangle origin to rectangle corner coordinates. If this leads to a negative width (extent x coordinate) and/or a negative height (extent y coordinate), then the Rectangle is degenerated and considered empty. Instance variables: origin the coordinates of corner having smallest coordinates (top left in Screen coordinates) corner the coordinates of corner having largest coordinates (bottom right in Screen coordinates) ! A subclass of BorderedMorph that supports different fillStyles. RectangleMorph diagonalPrototype openInWorld. RectangleMorph gradientPrototype openInWorld.! Refactor is a script class used to automaticaly do some refactor through UIs! This is a custom help book providing the API documentation for the regular expression framework. ! This class represents compilation errors in regular expressions.! This is a common superclass for errors in regular expressions.! This is a custom help book for the regular expression framework. ! This class represents matching errors in regular expressions.! This class represents syntax errors in regular expressions.! I represent a relative path (a position starting from Path workingDirectory)! I contain tests that validate the integrity of the system.! My instances provide an external file reference to a piece of text. It may be the sourceCode of a method, or the class comments of a class. The changes file or file-in file usually has a chunk that is just the source string of a method: max: aNumber ^ self > aNumber ifTrue: [self] ifFalse: [aNumber]!! I can return either a String or a Text. Some a chunk is followed by a second chunk (beginning with ]style[) containing style information. The encoding is like this: max: aNumber ^ self > aNumber ifTrue: [self] ifFalse: [aNumber]!! ]style[(14 50 312)f1,f1b,f1LInteger +;i!! Allowed TextAttributes are TextFontChange, TextEmphasis, TextColor, TextDoIt, TextKern, TextLink, TextURL. TextFontReference and TextAnchor are not supported. See PositionableStream nextChunkText and RunArray class scanFrom:.! I am a node for a vector of remote temps, created to share temps between closures when those temps are written to in closures other than their defining ones.! I represent the change of a removed field on an instance.! A RenderBugz is an infinite recursion bug test for TransformationMorphs. In 3.9 (7067) and before, when TransformationMorph has no rendee there are several methods that will infinitely recurse until manually stopped or the image runs out of memory. So far the ones I've caught are the getters and setters for heading and forwardDirection. So there are tests for them here. Ideally there would be a way to run a test against a stopwatch to catch endless recursion. Found it. Now incorperated. And the tests should be both save to run and cleanup after themselves even when they fail. So far we have not tested the normal cases of rendering working. I will leave that as a separate task for another time. So this is an automatic test when the bugs are fixed and interactive (crash) tests when the bugs are present. Instance Variables Revision notes. wiz 5/15/2008 22:58 When running tests from the TestRunner browser the test would sporadically fail. When they failed a transfomation morph would be left on the screen and not removed by the ensureBlock. So I changed things to fall under MorphicUIBugTests because that had a cleanup mechansizm for left over morphs. I also added one routine to test for time and one parameter to determine the time limit. To my surprise doubling or tripling the time limit still produced sporadic errors when the test is run repeatedly enough ( I am using a 400mz iMac. ) So now the parameter is set to 4. Things will probably fail there if tried long enough. At that point try 5 etc. I am reluctant to make the number larger than necessary. The tighter the test the more you know what is working. I also added a dummy test to check specifically for the timing bug. It fails on the same sporadic basis as the other test went the time parameter is short enough. This lends confidence to the theory that the timing difficulty is coming from outside the test. The sunit runner puts up a progress morph for each test. So the morphic display stuff is busy and probably also the GC. ! A ResetWindow is simple UI to reset the currently analysed model.! I represent a request for user assistance in resolving an origin. I am a resumable exception that gets raised when there is no way of automatically resolving a particular origin. ! A ResumableTestFailure triggers a TestFailure, but lets execution of the TestCase continue. this is useful when iterating through collections, and #assert: ing on each element. in combination with methods like testcase>>#assert:description:, this lets you run through a whole collection and note which tests pass. here''s an example: (1 to: 30) do: [ :each | self assert: each odd description: each printString, ' is even' resumable: true] for each element where #odd returns , the element will be printed to the Transcript. ! I represent an expression of the form ^expr.! I'm a class using a single shared pool (which hides a system class). My subclasses should be able to access the class variable defined in the pool I use. ! A RotatingStringMorph is a StringMorph which rotate to show everything if the width is too small to display the whole contents! Rounded corner border supporting radii of 1-4 pixels. Slower but more flexible than CornerRounder.! A simple row layout.! My instances provide space-efficient storage of data which tends to be constant over long runs of the possible indices. Essentially repeated values are stored singly and then associated with a "run" length that denotes the number of consecutive occurrences of the value. My two important variables are runs An array of how many elements are in each run values An array of what the value is over those elements The variables lastIndex, lastRun and lastOffset cache the last access so that streaming through RunArrays is not an N-squared process. Many complexities of access can be bypassed by using the method RunArray withStartStopAndValueDo:! EncodedCharSet initialize. LanguageEnvironment resetKnownEnvironments. Locale switchToID: (LocaleID isoLanguage: 'ru'). ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- I am a parser created to parse the insides of a character set ([...]) construct. I create and answer a collection of "elements", each being an instance of one of: RxsCharacter, RxsRange, or RxsPredicate. Instance Variables: source open on whatever is inside the square brackets we have to parse. lookahead The current lookahead character elements > Parsing result! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A match start optimizer, handy for searching a string. Takes a regex syntax tree and sets itself up so that prefix characters or matcher states that cannot start a match are later recognized with #canStartMatch:in: method. Used by RxMatcher, but can be used by other matchers (if implemented) as well.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- This is a recursive regex matcher. Not strikingly efficient, but simple. Also, keeps track of matched subexpressions. The life cycle goes as follows: 1. Initialization. Accepts a syntax tree (presumably produced by RxParser) and compiles it into a matcher built of other classes in this category. 2. Matching. Accepts a stream or a string and returns a boolean indicating whether the whole stream or its prefix -- depending on the message sent -- matches the regex. 3. Subexpression query. After a successful match, and before any other match, the matcher may be queried about the range of specific stream (string) positions that matched to certain parenthesized subexpressions of the original expression. Any number of queries may follow a successful match, and any number or matches may follow a successful initialization. Note that `matcher' is actually a sort of a misnomer. The actual matcher is a web of Rxm* instances built by RxMatcher during initialization. RxMatcher is just the interface facade of this network. It is also a builder of it, and also provides a stream-like protocol to easily access the stream being matched. Instance variables: matcher The entry point into the actual matcher. stream The stream currently being matched against. markerPositions Positions of markers' matches. markerCount Number of markers. lastResult Whether the latest match attempt succeeded or not. lastChar character last seen in the matcher stream! This class provides tests for the regular expression matcher.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- The regular expression parser. Translates a regular expression read from a stream into a parse tree. ('accessing' protocol). The tree can later be passed to a matcher initialization method. All other classes in this category implement the tree. Refer to their comments for any details. Instance variables: input A stream with the regular expression being parsed. lookahead ! This class provides tests for the regular expression parser.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- This is a branch of a matching process. Either `next' chain should match, or `alternative', if not nil, should match. Since this is also used to build loopbacks to match repetitions, `loopback' variable indicates whether the instance is a loopback: it affects the matcher-building operations (which of the paths through the branch is to consider as the primary when we have to find the "tail" of a matcher construct). Instance variables alternative to match if `next' fails to match. loopback ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A matcher is built of a number of links interconnected into some intricate structure. Regardless of fancy stuff, any link (except for the terminator) has the next one. Any link can match against a stream of characters, recursively propagating the match to the next link. Any link supports a number of matcher-building messages. This superclass does all of the above. The class is not necessarily abstract. It may double as an empty string matcher: it recursively propagates the match to the next link, thus always matching nothing successfully. Principal method: matchAgainst: aMatcher Any subclass will reimplement this to test the state of the matcher, most probably reading one or more characters from the matcher's stream, and either decide it has matched and answer true, leaving matcher stream positioned at the end of match, or answer false and restore the matcher stream position to whatever it was before the matching attempt. Instance variables: next The next link in the structure.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A marker is used to remember positions of match of certain points of a regular expression. The marker receives an identifying key from the Matcher and uses that key to report positions of successful matches to the Matcher. Instance variables: index Something that makes sense for the Matcher. Received from the latter during initalization and later passed to it to identify the receiver.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- Instance holds onto a one-argument block and matches exactly one character if the block evaluates to true when passed the character as the argument. Instance variables: predicate ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A special node that matches a specific matcher state rather than any input character. The state is either at-beginning-of-line or at-end-of-line.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- Instance holds onto a string and matches exactly this string, and exactly once. Instance variables: string ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- Instances of this class are used to terminate matcher's chains. When a match reaches this (an instance receives #matchAgainst: message), the match is considered to succeed. Instances also support building protocol of RxmLinks, with some restrictions.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A Branch is a Piece followed by a Branch or an empty string. Instance variables: piece branch ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A character set corresponds to a [...] construct in the regular expression. Instance variables: elements An element can be one of: RxsCharacter, RxsRange, or RxsPredicate. negated ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A character is a literal character that appears either in the expression itself or in a character set within an expression. Instance variables: character ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- One of a few special nodes more often representing special state of the match rather than a predicate on a character. The ugly exception is the #any condition which *is* a predicate on a character. Instance variables: kind ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- This is an empty string. It terminates some of the recursive constructs.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A message predicate represents a condition on a character that is tested (at the match time) by sending a unary message to the character expecting a Boolean answer. Instance variables: selector ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A generic syntax tree node, provides some common responses to the standard tests, as well as tree structure printing -- handy for debugging.! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A piece is an atom, possibly optional or repeated a number of times. Instance variables: atom min max nil means infinity! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- This represents a character that satisfies a certain predicate. Instance Variables: predicate A one-argument block. If it evaluates to the value defined by when it is passed a character, the predicate is considered to match. negation A one-argument block that is a negation of .! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- I represent a range of characters as appear in character classes such as [a-ZA-Z0-9]. I appear in a syntax tree only as an element of RxsCharSet. Instance Variables: first last ! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- The body of a parenthesized thing, or a top-level expression, also an atom. Instance variables: branch regex ! This class implements the Secure Hash Algorithm (SHA) described in the U.S. government's Secure Hash Standard (SHS). This standard is described in FIPS PUB 180-1, "SECURE HASH STANDARD", April 17, 1995. The Secure Hash Algorithm is also described on p. 442 of 'Applied Cryptography: Protocols, Algorithms, and Source Code in C' by Bruce Scheier, Wiley, 1996. See the comment in class DigitalSignatureAlgorithm for details on its use. Implementation notes: The secure hash standard was created with 32-bit hardware in mind. All arithmetic in the hash computation must be done modulo 2^32. This implementation uses ThirtyTwoBitRegister objects to simulate hardware registers; this implementation is about six times faster than using LargePositiveIntegers (measured on a Macintosh G3 Powerbook). Implementing a primitive to process each 64-byte buffer would probably speed up the computation by a factor of 20 or more. ! A SHA1Ecryptor is an encryptor using SHA1 algorithm! This example shows how to use shout for method editing. Try it with: SHMethodEditingMode new open For method editing, you need to provide a class to the styler. When a class is given, the styler is automatically turned into a method editing mode. The styler is then able to style the code according to the class bindings (instance variables names, shared pool...) See #shoutAboutToStyle. - First, the class is given to the styler by sending #classOrMetaClass: to the view with the class as argument. - Finally, in this example, #shoutAboutToStyle returns true because the code is always to be styled. Instance Variables className: code: className - The class name for the styler code - the code which is entered into the editor ! In this example, the view has two text editors. Try it with: SHOneEditorShoutedASecondNotShouted new open. The top view is supposed to be used for code editing and the other for comment editing. Only the code editor view has to be highligthed whereas the comment editor is never highligthed. In this case, the model must implement a #shoutAboutToStyle: method which returns true. When the view is built, the comment pane is setup to forbid code styling by sending #styled: to it with false as argument. See the #open method and the #styled: sent. Instance Variables: code comment ! I am a Smalltalk method / expression parser supporting syntax highligthing. ! I'm the one who visits node to coloring the code! I associate a type with a range of characters in a String I have these instance variables... start - the one based index of the first character of the range within the String. end - the one based index of the last character of the range within the String. type - a Symbol describing the type of the range A sequence of instances of me are created by an instance of SHParserST80 which can then used by an instance of SHTextStyler to style Text. ! I am testing the class SHStyleElement! I'm a example that shows how to have a simple editor in which text is highlighted or not depending on the editor model state. Try it with: SHStylingOrNotDependingOnModelState new open. Thus, depending on the model state, the view should be styled or not styled. This is achieve by implementing a #shoutAboutToStyle: method in the model (here, an instance of myself). #shoutAboutToStyle: returns true if the view which is passed as argument must be styled. In this excample, if the value of the 'state' instance variable is #code, then the text is hilighted, else it is not. Instance Variables: code codeEditing ! I am an Abstract class. Subclasses of me can create formatted, coloured, and styled copies of Text that is given to them. They may perform their styling asynchronously, in a background process which I create and manage. My public interface is... view: aViewOrMorph - set the view that will receive notifications when styling has completed. format: aText - modifies aText's string style: aText - modifies the TextAttributes of aText, but does not change the string, then sends #stylerStyled: to the view. styleInBackgroundProcess: aText - performs style: in a background process, then sends #stylerStylednBackground: to the view. styledTextFor: aText - answers a formatted and styled copy of aText unstyledTextFrom: aText - answers a copy of aText with all TextAttributes removed Subclasses of me should re-implement... privateFormat: aText - answer a formatted version of aText; the String may be changed privateStyle: aText - modify the TextAttributes of aText; but do not change the String ! I style Smalltalk methods and expressions. My 'styleTable' class instance var holds an array ofArrays which control how each token is styled/coloured. See my defaultStyleTable class method for its structure. My styleTable can be changed by either modifying the defaultStyleTable class method and then executing SHTextStylerST80 initialize ; or by giving me a new styleTable through my #styleTable: class method. My 'textAttributesByPixelSize' class instance var contains a dictionary of dictionaries. The key is a pixelSize and the value a Dictionary from token type Symbol to TextAttribute array. It is created/maintained automatically. I reimplement #unstyledTextFrom: so that TextActions are preserved in the unstyled text ! By default, shout styling is into a method editing mode. If you need a script editor for example, then you have to setup shout into a workspace mode. In order to setup a workspace mode, one have to make it available the workspace instance to the view styler. Typically, the workspace inspace is the model instance itself. See the sent of the #workspace: message into the #open method: open ... editor := window newTextEditorFor: self getText: #code setText: #code: getEnabled: nil. editor styler workspace: self. ... ^ window openInWorld The workspace class has also to implement #hasBindingOf: and #hasBindingThatBeginsWith:. In fact, #hasBindingOf: and #hasBindingThatBeginsWith: are sent to the workspace by shout during styling. As an example, see the #bindings method implemented here: bindings ^ #('shout' 'styling') It returns a list of symbols which is used by #hasBindingOf: and #hasBindingThatBeginsWith:. Then open an editor with: SHWorkspaceEditingMode new open If you enter the word 'shout' as an example, you will see that the word is recognized as a variable name. ! This class implements the SMTP (mail sending) protocol specified in RFC 821. HELO MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: SAML FROM: VRFY EXPN HELP [ ] NOOP QUIT TURN ! A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; ! This is a custom help book for the SUnit framework. ! This is both an example of writing tests and a self test for the SUnit. The tests here are pretty strange, since you want to make sure things blow up. You should not generally have to write tests this complicated in structure, although they will be far more complicated in terms of your own objects- more assertions, more complicated setup. Kent says: "Never forget, however, that if the tests are hard to write, something is probably wrong with the design".! This is a custom help book providing a tutorial for the SUnit framework. ! I am SUnitUnloader, a little tool to unload SUnit and a fixed set of Tests from the current image. Usage: SUnitUnloader new unloadAll Caveat: #unloadTestPackages uses a fixed and probably ill maintained list of what packages hold unit tests. ! A colour selector that displays an area with saturation on the x axis and volume on the y axis. Provides interactive selection of colour by mouse. For the moment it is event rather than model based. Setting the color will specify the hue and setting the selectedColor will specify the saturation and volume (may have a different hue to that displayed if not in sync).! Usage: save [--delete-old] a base name for the image --delete-old remove the old image and changes file Documentation: Saves the image and changes file under a new name. Examples: # create a 'bar.image' and 'foo.changes' pharo Pharo.image save bar # create the same file as in the previous example but delete Foo.image and Foo.changes pharo Pharo.image save bar --delete-old! ScaledDecimal implement a special kind of Fraction that prints in decimal notation. It uses a limited number of digits (scale) after the decimal separation dot and round the result. Note that a ScaledDecimal does not printOn: exactly, however it will storeOn: exactly because the full precision fraction is kept in memory. This is mostly usefull with denominators being powers of 10.! I provide a test suite for ScaledDecimal values. Examine my tests to see how SmallIntegers should behave, and see how to use them.! I scan a string or text, picking out Smalltalk syntactic tokens. I look one character ahead. I put each token found into the instance variable, token, and its type (a Symbol) into the variable, tokenType. At the end of the input stream, I pretend to see an endless sequence of special characters called doits.! I represent a powerful class for implementing recurring schedules.! Pharo Process Description --- Here is the pharo process. General points ----------------------- An enhancement - should be added to the bug tracker - announced to the mailing-list - asked for feedback - results should be added to the BT entry Fixed tag means ready for integration Closed tag means integrated A bug detected - discuss via the mailing-list - should be added to the bug tracker - fix are considered as enh (see point above) When a fix is fixed it should be either post as cs to the BT entry or in the PharoInbox as a Slice (a slice is an emtpy package that has as requirement other package composing the fix). We have three projects: Pharo PharoInbox PharoTreatedInbox A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project To help browsing multiple repositories: ScriptLoader new addExtraRepositories +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Now the integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu 1.) Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. You have to download the latest version using a script like this one. Pay attention to update it so that it reflects the right version (ie 1.0, 1.1, 1.2...) scp -p LOGIN@scm.gforge.inria.fr:/home/groups/pharo/htdocs/updates/pharo1.1/updates.list . - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named package-to-be-tested. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the package previously saved in the packages to be tested. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else: ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.list file local to the disc - copy all the package from the local directory to the Pharo After the updates.list and the cs file should be manually uploaded to the ftp (see below) scp "$1" LOGIN@files.pharo.org/updates/pharo1.1/ 5) in case of problems. Think that if you pass the step 4 you may have a scriptLoader version that got published and that is reloaded during the first step. CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! Inspired by an oiginal design of Hans-Martin Mosner, this ScrollBar is intended to exercise the handling of input events in Morphic. With sufficient flexibility in this area, all particular behavior can be concentrated in this single class with no need to specialize any other morphs to achieve button, slider and menu-button behavior. Once we have this working, put in logic for horizontal operation as well. CachedImages was added to reduce the number of forms created and thrown away. This will be helpful for Nebraska and others as well.! The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange. Basic clue about utilization of the ScrollPane class is given in: ScrollPane example1. ScrollPane example2.! SearchFacade is a facade for creating searching dialog window! I am a searchfield with a dropdown for the history. It is a minor extension to the EditableDropListMorph managing the search history directly in the morph. Typical use-case: ^ SearchMorph new model: self; setIndexSelector: #classSearchAccept:; "sends the search result to the model" searchList: self class classSearchList; "sent on creation to get the initial search list" yourself ! SearchableList new items: #( aaa abc axz bbb bfbg bof c); openWithSpec should it be a subclass of LIstModel? Because now I will have to delegate a lot? and I cannot plug a IconList How do I make textModel react to every keystroke without an accept! I am a tree plus an input field to be able to filter the tree elements! This class implements the Secure Hash Algorithm (SHA) described in the U.S. government's Secure Hash Standard (SHS). This standard is described in FIPS PUB 180-1, "SECURE HASH STANDARD", April 17, 1995. The Secure Hash Algorithm is also described on p. 442 of 'Applied Cryptography: Protocols, Algorithms, and Source Code in C' by Bruce Scheier, Wiley, 1996. See the comment in class DigitalSignatureAlgorithm for details on its use. Implementation notes: The secure hash standard was created with 32-bit hardware in mind. All arithmetic in the hash computation must be done modulo 2^32. This implementation uses ThirtyTwoBitRegister objects to simulate hardware registers; this implementation is about six times faster than using LargePositiveIntegers (measured on a Macintosh G3 Powerbook). Implementing a primitive to process each 64-byte buffer would probably speed up the computation by a factor of 20 or more. ! This is the unit test for the class SecureHashAlgorithm. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! A simple selection browser.! To select packages.! To select rules.! I am a visitor that selects objects from the nodes I visit. I take a block similar to those passed to Collection>>select:. I evaluate the block with DirectoryEntries for the nodes I visit. I can use any guide, and the objects in the array I produce will reflect the order imposed by the guide.! A selectionMorph supports the selection of multiple objects in a morphic world or pasteUp. Using command+shift you get a squared lazzo and you can grab morphs. After you can grab the selection as a morph. Structure: selectedItems an OrderedCollection of Morphs These are the morphs that have been selected slippage a Point Keeps track of actual movement between the steps of gridded movement dupLoc a Point Notes the position when first duplicate request occurs from halo dupDelta a Point Holds the final delta of the first duplicate plus subsequent moves. ! A SelectionValueHolder is a value holder especially designed to contains a list selection (an index + an object)! A SelectorChooserMorph is an IdentifierChooserMorph specialized to allow a selector query from a selector prefix and for a TextMorph. When the prefix starts with an uppercase, then, only globals names and class names that begins with the prefix are shown. Otherwise, all systems symbols that begins with the prefix are presented (the string comparison is not case sensitive). It takes the keyboard focus when a navigation key (up, down, left or right key) is first pressed in the TextMorph from which it has been opened. Instance Variables prefix: requestorPos prefix - The prefix which has been used to compute the labels list. requestorPos - private, used to be able to automatically close the menu if the position of the requestor is changing! I am SelectorException, an abstract superclass for exceptions related to a selector.! I am a parse tree leaf representing a selector.! I am an eye element for self! I provide synchronized communication of a single bit of information (a "signal") between Processes. A signal is sent by sending the message signal and received by sending the message wait. If no signal has been sent when a wait message is sent, the sending Process will be suspended until a signal is sent.! A SemaphoreTest is sunit test for simple and multiEx semaphores Instance Variables none; does not have common test fixture accross all tests (because its testing differenct sorts of semaphores (could refactor into muliple testcases if there were more test conditions. ! Simple themed separator morph.! I am an abstract superclass for collections that have a well-defined order associated with their elements. Thus each element is externally-named by integers referred to as indices.! This class supports a simple interface to the serial ports of the underlying platform, if it supports serial ports. The mapping of port numbers to hardware ports is platform specific, but typically follows platform ordering conventions. For example, on the Macintosh, port 0 is the modem port and port 1 is the printer port, since in the programmers documentation these ports are referred to as ports A and B. ! I am a unique identifier for the current smalltalk session. On each image startup the current session is invalidated and a new session is created. ! I represent a set of objects without duplicates. I can hold anything that responds to #hash and #=, except for nil. My instances will automatically grow, if necessary, Note that I rely on #=, not #==. If you want a set using #==, use IdentitySet. Instance structure: array An array whose non-nil elements are the elements of the set, and whose nil elements are empty slots. There is always at least one nil. In fact I try to keep my "load" at 75% or less so that hashing will work well. tally The number of elements in the set. The array size is always greater than this. The core operation is #findElementOrNil:, which either finds the position where an object is stored in array, if it is present, or finds a suitable position holding nil, if its argument is not present in array,! I am a helper class for handling the contents of Set. My main purpose is to allow a Set to contain nil. Since nil represents an empty slot in a Set, it cannot be stored directly in the array of values. Instead, an instance of SetElement is used as a wrapper. See implementors and senders of #asElement for wrapping, and #enclosedSetElement for unwrapping.! I am an eye element for sets, showing appropriate thing with indexes ! A verison of the Inspector specialized for inspecting Sets. It displays the elements of the set like elements of an array. Note that the indices, being phyical locations in the hash table, are not meaningful outside of the set.! This is the unit test for the class Set. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !! The User interface A SettingBrowser allows the browsing as well as the editing of setting values. For each setting, a label and an input widget allowing the change of the setting value are shown. !!!! Browsing standards settings In order to open a setting browser one can also use the expression below: -------------------- SettingBrowser open -------------------- It opens a SettingBrowser for all settings declared with the standard 'systemsettings' pragma keyword. To see how these settings are declared in the image, you can browse all senders of #systemsettings: -------------- SystemNavigation new browseAllCallsOn: #systemsettings -------------- !!!! Browsing application specific settings For specific applications, other pragma keywords can be used. These keywords can be passed as follow: -------------------- (SettingBrowser forKeywords: #('blob')) open. -------------------- Then, only settings which are declared with the keyword 'blob' are viewed. Here is an example of such a setting declared in the class side of a class BlobSettings -------------------- BlobSettings class>>blobSettingOn: aBuilder (aBuilder group: #blobEditing) label: 'Editing' translated; parent: #blobBrowsing; description: 'All settings concerned with blob editing' translated; with: [ (aBuilder setting: #color) ... -------------------- The expression 'SettingBrowser open' is then equivalent to the '(SettingBrowser forKeywords: #('systemsettings')) open' expression. !!!! Filtering The SettingBrowser has a filtering functionality to limitate the number of settings. You can enter a token in the input field of the toolbar in order to show only settings that are matching the token. Two filtering modes are allowed: with a substring or with a regular expression. - with a substring: only settings which name, description, pragma class or method selector includes this substring are viewed; - with a regular expression: the same as with a substring except that the input is used as a regular expression. This filtering is applied if the Regexp checkbox is checked. !! How to declare a setting A setting is declared with a method class side. This kind of method takes a builder as argument and a standard setting is tagged with the pragma. The builder argument serves as a facade for the declaration. !!!!A simple boolean setting example Let's start with a setting declaration example: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; setSelector: #caseSensitiveFinds:; getSelector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. For this setting to be declared, we make the asumption that we have TextEditor class>>caseSensitiveFinds and TextEditor class>>caseSensitiveFinds: methods in order to change the preference value. To declare a setting, just send #setting: to the builder with its identifier, a Symbol passed as argument. It creates a setting node. Then you can set the label, the description with #label: and #description sent to the newly created setting node. You also have to set the selectors for setting and getting the preference value as well as the target to which these accessors are sent (often a class). This is done by sending respectively, #setSelector:, #getSelector: and #target: to the setting node. Because all settings are organized in trees we need a way to indicate what is the position of the setting node in the overall setting trees list. In fact it can be done two ways. The first way is to use the #parent: message (A second possibility is to declare a subtree in one method, it is explained later in this documentation).The #parent: message is send for non root settings. #parent takes the identifier of the parent setting as argument. You may notice that in this example, if we don't take into account the $: at the end of the setting accessor, the getting and the setting accessors are the same. This is often the case. You can simply set the setter and the getter by sending the #selector: message to the setting node. Thus the declaration is simplified as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; selector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. You may also notice that the identifier of the setting is then the same as the selector. In this case, you can omit to set the selector because by default, the identifier is used as the selector for getting the preference value and the identifier concatenated with a $: at the end is used as the setting selector. Thus the declaration is simplified again as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; target: TextEditor; parent: #codeEditing. Finally, if you decide to declare a setting directly in the class which implements the selector, the target information can be also omitted because the class in which the setting is declared is used by default. Thus the simplest declaration can be: TextEditor class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; parent: #codeEditing. !!!!Declaring a subtree in one single method Directly declaring a sub-tree of settings in one method is also possible. Then, typically, a root group is declared for the application settings and the children settings themselves are also declared within the same method as in the example below in which #formatCommentWithStatements and #indentString are directly declared as children of the #configurableFormatter setting: RBConfigurableFormatter class>>settingsOn: aBuilder (aBuilder group: #configurableFormatter) target: self; parent: #refactoring; label: 'Configurable Formatter' translated; description: 'Settings related to the formatter' translated; with: [ (aBuilder setting: #formatCommentWithStatements) label: 'Format comment with statements' translated. (aBuilder setting: #indentString) label: 'Indent string' translated] !!!!Optional setting Any setting can have children. In the case where a boolean setting is used as a parent, then, its children are chown only if the parent preference value is true. !!!!Range setting You send the #range: message to the builder instead of the #setting: message. In addition, you send the #range: message to the setting with an interval as argument in order to indicate the valid range. screenMarginSettingOn: aBuilder (aBuilder range: #fullscreenMargin) target: SystemWindow; parent: #windows; label: 'Fullscreen margin' translated; description: 'Specify the amount of space that is let around a windows when it''s opened fullscreen' translated; range: (-5 to: 100). !!!!List setting For this kind of setting, the SettingBrowser will show a drop list. Here is an example for the window position strategy. Notice that the setting is declared by sending the #pickOne message to the builder. Notice also that the list of valid values are given by sending the #domainValues: message to the setting. The argument is an array of association. Each association key is the label that is shown and the corresponding association value gives the value that will be assigned to the preference. windowPositionStrategySettingsOn: aBuilder (aBuilder pickOne: #usedStrategy) label: 'Window position strategy' translated; target: RealEstateAgent; domainValues: { 'Reverse Stagger' translated -> #staggerFor:initialExtent:world:. 'Cascade' translated -> #cascadeFor:initialExtent:world:. 'Standard' translated -> #standardFor:initialExtent:world:}; !!!!Launcher A launcher is a particular setting. It allows to launch a script directly from the setting browser. Imagine that you have changed some settings and that you need to evaluate a script in order to update some other objets. It can be used also to configurate globally a package of the entire image. As an example, in order to use True Type Fonts, the system must be updated by collecting all the available TT fonts. This can be done by evaluating the following expression: ------------- FreeTypeFontProvider current updateFromSystem ------------- In order to be able to launch this script from the setting browser, you have to declare a launcher. For example, look-at how the script for the TT fonts is declared in GraphicFontSettings class >> #standardFontsSettingsOn:. GraphicFontSettings class >> #standardFontsSettingsOn: (aBuilder group: #standardFonts) ... (aBuilder launcher: #updateFromSystem) order: 1; target: FreeTypeFontProvider; targetSelector: #current; description: 'Update available fonts by scanning the current system'; script: #updateFromSystem; label: 'Update fonts from system' translated. Notice that you send #launcher: to the builder in order to create the setting node, then you send #script: to the created node with the selector of the script passed as argument. Implementation details See also SettingNode, SettingTree, SettingNodeBuilder and SettingTreeBuilder classes. Instance Variables roots: searchedText: status: collector: roots - the roots of the viewed setting trees searchedText - the string used as a filter token or regexp in order to select viewed settings status - a WriteStream used in order to store useful information which are shown when no current item is selected collector - The SettingCollector which has the responsibility to collect settings and to build viewed trees ! A SettingDeclaration is an handler for a writtable setting value. Its main responsibility is allow real value changing and to hold descriptive data about the setting. When the real value is changed, all declared listeners are notified. The standard event mechanism is used for that purpose. See #value: method which is call in order to change a setting value. Whatever object can declare its interest in the real value changes by sending #whenChangedSend:to: to a setting. See notification protocol. For convenience, my olds values are registered in a list. This list is used by the SystemSettingBrowser in order to easily retrieve previous values. The type instance variable is a Symbol. It is used by the SystemSettingBrowser in order to build the input widget of a setting. It can be the name of the class or the name of a superclass of the value. In that case, the input widget is built by #settingInputWidgetForNode: implemented by the class which name is the value of the type instance variable. As an example, the input widget for a Boolean is built by Boolean class>>settingInputWidgetForNode:. Type value is not limited to be a class name. It can also be whatever symbol. In that case, the selector corresponding to the message to send to the setting in order to build the inputWidget is built by SettingDeclaration>>localInputWidgetSelector. If the type instance variable is not set, then it is dynamically set to the class name of the value. See SettingManager comment for more explanations. Instance Variables default: getSelector: ghostHelp: setSelector: type: default - xxxxx getSelector - xxxxx ghostHelp - xxxxx setSelector - xxxxx type - xxxxx ! A SettingFilter is a filter wich is used by a SettingBrowser in order to select which nodes of the setting trees are to be shown. A SettingFilter subclass must redefine the #keepHandler: method which return true if the argument handler is to be kept. Instance Variables ! A SettingTreeNode is used by a SettingCollector as a node for setting trees. Built trees can be viewed by a SettingBrowser Instance Variables contents: parentNode: contents - the children parentNode - the parent or nil if the node is a root ! A SettingPackageFilter is a SettingFilter used to select settings from a given list of packages: a setting is kept only if the package in which it is defined is present in the given package list Instance Variables packages: packages - The collection of PackageInfo the filter is currently using! A SettingRegexpFilter is SettingFilter which makes use of a regular expression in order to keep or not a SettingHandler. Instance Variables regexp: regexp - a regular expression string ! A SettingTokenFilter is SettingFilter which makes use of a token (substring) in order to keep or not a SettingHandler. Instance Variables token: ! A SettingTree is responsible for the building of system setting trees from a collection of pragma. Built tree nodes are instances of SettingNode. Built trees are suitable for tree browsing with the help of a MorphTreeMorph (see SettingBrowser>>treeMorphIn: and SettingBrowser>>roots to know how a SettingBrowser is initializing its MorphTreeMorph with the help of a SettingTree). Below, two examples of tree building with a SettingCollector are shown. --------------- (SettingTree acceptableKeywords: #(#'systemsettings')) settingTreeRoots. "get system setting trees" --------------- Instance Variables collector nodeList ! see ColorMappingCanvas comment.! A shared pool represents a set of bindings which are accessible to all classes which import the pool in its 'pool dictionaries'. SharedPool is NOT a dictionary but rather a name space. Bindings are represented by 'class variables' - as long as we have no better way to represent them at least.! An implementation of a shared queue based on class Monitor. Clients may may place items on the queue using nextPut: or remove them using methods like next or nextOrNil. Items are removed in first-in first-out (FIFO) order. It is safe for multiple threads to access the same shared queue, which is why this is a "shared" queue. [monitor] is used to synchronize access from multiple threads. [items] is an ordered collection holding the items that are in the queue. New items are added at the end, and old items are removed from the beginning. All methods must hold the monitor while they run. ! Text converter for Shift-JIS. Mac and Windows in Japanese mode use this encoding.! I represent the change of a shifted field on an instance. The old field and the new field correspond to the same Slot. In terms of method migration, it is only necessary to update the index of direct accessors/bytecodes to instance variable.! ShortIntegerArray is an array for efficiently representing integers in the 16bit range.! SUnit Test for ShortIntegerArray! I am ShouldBeImplemented, an exception signaled when some method should have been implemented but was not. This is more like a placeholder during development.! I am ShouldNotImplement, an exception signaled when a method was implemented but should not have been. This can happen when an implementation is inherited.! Usage: save [--keep] --keep keep additional packages package names that will be left in the image WARNING: THIS ARGUMENT WILL DESTROY YOUR IMAGE Use with cation and only on fresh Pharo images Documentation: Shrink the fresh Pharo image to contain only basic kernel packages Examples: # shrink to kernel packages pharo Pharo.image # shrink to kernel and keep listed packages in the image pharo Pharo.image --keep Tanker TankerCommandLineHandler Slot! see BorderedMorph! I am labeled, rectangular morph which allows the user to click me. I can be configured to send my "target" the message "actionSelector" with "arguments" when I am clicked. I may have a label, implemented as a StringMorph. Example: SimpleButtonMorph new target: Beeper; label: 'Beep!!'; actionSelector: #beep; openInWorld Structure: instance var Type Description target Object The Object to notify upon a click actionSelector Symbol The message to send to Target (#messageName) arguments Array Arguments to send with #actionSelection (optional) actWhen Symbol When to take action: may be #buttonUp (default), #buttonDown, #whilePressed, or #startDrag oldColor Color Used to restore color after click Another example: a button which quits the image without saving it. SimpleButtonMorph new target: Smalltalk; label: 'quit'; actionSelector: #snapshot:andQuit:; arguments: (Array with: false with: true); openInWorld ! See comment in Editor! SimpleGridExample new open! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList.! I represent a service provider : the service provider label : to be display in a menu selector : to do the service useLineAfter stateSelector : a secondary selector (to be able to query state of the provider for example) description : a description for balloon for example argumentGetter : a selector to get additional arguments with (if selector requres them) buttonLabel : a short label The entire client interface (provided by FileList and other users of the registry) is this (browse #getArgumentsFrom: and the senders of #argumentGetter:): fullName (returns a String with the full filename) dirAndFileName (returns {directory. fileName}) readOnlyStream (returns an open read-only stream) ! I represent a switch that can be either on or off. I chnage my state in response to a mouse click. When clicked, I also send my actionSelector to my target, just like a SimpleButtonMorph. SimpleSwitchMorph new openInWorld! SimplestClassListExample new openOn: Object! SimplestClassListWithChunkExample new openOn: Object! SimplestClassListWithPagerExample new openOn: Object! This class provides the Simplified Chinese support (Used mainly in Mainland China). Unfortunately, we haven't tested this yet, but as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! I am a browser for the SmallLint Critics of a rule.! I am SizeMismatch, an exception indicating that an operation was attempted on two or more collections that don't match in size. ! SliceSubmitter is a tool made to submit slice easily be automaticcaly creating the issue on GoogleIssueTracker! A SliderModel is a spec model for a slider. See example: self example! A SliderSpec is the spec used to describe a slider! I'm a meta-object for accessing a field in an Object. By default each Slot corresponds to an instance variable and vice versa. Hence there is a Slot for each instance variable. I define a protocol to read (#read:) and to write (#write:to:) values to a field inside an Object. For customizing a subclass can override the meta-obejct-protocol methods. See subclasses for examples. Vocabulary: - variable: named accessor for a Slot - Slot: class-side meta-object, mapping of names to values using a MOP to fields - field: space occupied in an object, used to hold values accessed via Slots! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Instance Variables: client oldClasses newClasses classSlots globals category superclass name <(DependentsArray of: Character) | IRSequence | Path | (SequenceableCollection of: Character) | TextLine> layoutClass slots traitComposition ! I represent an error raised while building a class.! I am an error raised when generating a duplicated slot.! I am an exception to indicate that a slot is found in a layout.! I am used to spread slot into an unaffected system. SlotVirus spread. Initializes default slots and layouts on all objects (note: so far this will break custom objects with custom slots)! RBSmallDictionary is a special dictionary optimized for small collections. In addition to the normal dictionary protocol, it also supports an #empty message which "empties" the collection but may hang on to the original elements (so it could collect garbage). Without #empty we would either need to create a new dictionary or explicitly remove everything from the dictionary. Both of these take more time and #empty. Instance Variables: keys array of keys (we don't use Associations for our key value pairs) size the size of the dictionary values array of our values ! I'm a SmallDictionary (this means faster than default one when dealing with limited number of items) but I check my key based on identity.! My instances are 31-bit numbers, stored in twos complement form. The allowable range is approximately +- 1 billion (see SmallInteger minVal, maxVal).! I am the special layout for SmallIntegers. SmallIntegers are typically implemented as tagged pointers and thus require a special format.! I provide a test suite for SmallInteger values. Examine my tests to see how SmallIntegers should behave, and see how to use them.! SmalllintManifestChecker is responsible for running a set of rules on a given subsystem. | rules checker | rules := RBCompositeLintRule allGoodRules resetResult. "the resetResult is necessary because it will build a knid of cache of the result and this cannot be done automatically (for example you may want to run several rules without invalidating the results). " checker := SmalllintManifestChecker new runRules: rules onPackage: (RPackageOrganizer default packageNamed: #'Manifest-Core').! See EditingState comments. SmalltalkEditingState is made to manage data for Smalltalk code editing sessions (such as a selector chooser). Instance Variables: selectorChooser - selectorChooser The basic selector chooser which is popup to fetch available selectors or class names begining with a prefix. The prefix is token from the current caret location (see SelectorChooserMorph comments). ! The editor built specifically for Smalltalk code! My singleton is a central entry point to the system. It has many roles and responsibilities (to be documented) - startup/shutdown image - source management - namespace access - tool access - platform access - VM information and parameters Startup ----------- At startup and shutdown the image execute the methods startUp: and shutdown: of registered classes (registered using addToStartUpList:, addToShutDownList:, ... methods and friends). Startup phases During the first stage of start up the UI manager, the default uimanager is switched to a specific non interactive ui manager (StartupUIManager). Note that this specific non interactive UIManager kills the system on any attempt to open windows and interaction. So be warned, don't use interaction in the first phase. Then all registered classes execute their start up procedures (which should not imply interactive behavior). After startup list is finished, any deferred startup actions are executed, which you can add using the method addDeferredStartupAction: method. ! I am announced when the image has been saved. Note that the announcement is done *after* the execution was frozen. So you can send me #isNewImage to know if the current image instance is the same that started the save action.! A Socket represents a network connection point. Current sockets are designed to support the TCP/IP and UDP protocols. Sockets are the lowest level of networking object in Pharo and are not normally used directly. SocketStream is a higher level object wrapping a Socket in a stream like protocol. ProtocolClient and subclasses are in turn wrappers around a SocketStream to provide support for specific network protocols such as POP, NNTP, HTTP, and FTP.! I represent a socket (network) address consisting of a host internet address and a port number. My contents are opaque and cannot be interpreted directly. See the accessing protocol for methods that retrieve the information I contain.! SocketStream is a wrapper for class Socket making it easy to write networking code by giving the programmer a stream-like protocol. A Socket is a two way communication link with two logically separate channels - input and output. The Socket class is the lowest level in Pharo for network communication and using it directly can be difficult and bug prone. A SocketStream can be in binary or ascii mode, ascii is the default which means you are transmitting and receiving Strings. Most Internet protocols are in clear text ascii, like for example HTTP. Another setting is what timeout you want to use - default is the standardTimeout from Socket. More settings can be found in the method category 'configuration'. Simplest example of connecting, sending/receiving and closing: | stream result | stream := SocketStream openConnectionToHostNamed: 'www.pharo-project.org' port: 80. [[stream nextPutAll: 'GET / HTTP/1.0'; crlf; crlf; flush. result := stream upToEnd. "Give us all data until the socket is closed." Transcript show: result; cr.] ensure: [stream close]] on: ConnectionTimedOut do: [:ex | Transcript show: ex asString;cr. ex resume] There are two important things to note above: - The methods in category "stream in" can signal two exceptions (unless turned off with #shouldSignal:): ConnectionClosed and ConnectionTimedOut - We close the stream using #ensure:, that is to make sure it isn't left opened. - We use #on:do: to catch any signal. In this case we do not need to catch ConnectionClosed since #upToEnd does that for us intrinsically. ---------------- SocketStream (below called SS) is a reimplementation of 'Old'-SocketStream (below called OSS) - the class that originates from the original Comanche implementation but now is included in standard Squeak. SS has the same protocol as OSS and is meant to replace it. SS is faster, more flexible, is better documented and adds a few features: 1. #shouldSignal:, which decides if SS should signal low level Socket exceptions (true) or if it should swallow them like original OSS did. Default is true. The only reason I added this is for backwards compatibility - not signalling causes problems - see bug 4 below. 2. #nextAllInBuffer, #nextInBuffer:, #skip:, #receiveData:, #nextPutAllFlush: and #recentlyRead are new additions to the public protocol. It also fixes various bugs: 1. #isDataAvailable could theoretically answer false, when there actually is some in the buffer in OSS. If #receiveDataIfAvailable reads the last byte then the following "socket dataAvailable" would answer false. So the last byte would be sitting in the inStream missed. 2. #upToAll: in OSS has several problems, for example - #positionOfSubCollection:ifAbsent: which was introduced answers one position too low. This was compensated in upToAll:, but only in the pushBack: call, not the actual result being returned which was cut short 1 byte. Amusingly this makes KomHttpServer not use "Keep-Alive" since the last $e in 'Alive' was cut short. :) 3. SS doesn't inherit from PositionableStream since that just breaks various inherited messages, like for example #skip:. OSS should IMHO be changed to inherit from Object - or of course, replaced in full with SS. :) 4. Since SocketStream by default signals closes and timeouts the SocketStreamTest now passes. The reason for SocketStream to fail is that while it does timeout on a low level (#SocketStream>>receiveData doesn't hang forever) - the callers of #receiveData sometimes loop - like in #next:, and thus eliminates the timeout. SS warns about some methods (in their method comments) not honouring timeouts if shouldSignal is false, I really don't know what they should do in that case: #next:, #upTo:, #upToAll: and #upToEnd (and #receiveData:) The primary reason for the SS implementation is optimal performance. The main differences in implementation with the old OSS are: 1. SS uses two buffers directly (inBuffer and outBuffer) with pointers marking start and stop within the buffer. OSS instead uses two regular streams, a ReadStream and a WriteStream. Using internal buffers makes it possible to avoid copying and reallocation in various ways, it also makes SS be able to have specialized growing/buffer moving behaviour. 2. #upTo:, #upToAll: and #peekForAll: uses selectged String messages that in turn uses fast primitives for searching. OSS used other messages that fell back on byte per byte reading. 3. #receiveData in OSS creates a temporary buffer stream for each call!! During a long read operation, like say #upToAll: (which for example is used when uploading files using HTTP POST forms), this is devastating - especially since the default size is only 2000 bytes - and leads to a very high number of low level read operations on the Socket, typically 100 times more calls than with OSS. The buffer in OSS is held in an instvar (not recreated for each call), is larger from the start and above all - grows dynamically by doubling. OSS can also avoid a grow/reallocation by doing a "move down" if data has been read from the SS as it comes in and through that making room in the lower part of the inBuffer. The net result is that upToAll: for large files is about 10 times faster. 4. The implementation of upTo: and upToAll: tries to avoid doing unnecessary find operations in the buffer and is greedy by default, which means it favors reading more data - if available - before searching for the stop sequence. If we had #findString:startingAt:stoppingAt: this wouldn't have to be greedy and we wouldn't be needlessly scanning dead buffer area. VM hackers? Also, while you are at it - make it work for ByteArrays too. :) SS can not be run unbuffered, since that seems unneeded. The option to autoFlush is still available, with it set to true SocketStream (just like OSS) will flush on its own on each nextPut:/nextPutAll:, otherwise flushing it will have to be done manually but is done on close. The first performance tests shows that, as noted above, receiving large amounts of data using #upToAll: is greatly improved - factor of 10. Serving HTTP with small payloads seemed at first not be faster at all - but this is due to the high overhead of Socket connect/close and other things. Increasing payloads show a difference and especially with keep alive on - where the new SS roughly doubles the throughput!!! This class implements the socks 4 and partially socks 5 connection protocol. For backward compatibility the socks protocol is disabled by default, so subclasses still work. For further documentation check out: Socks4: http://spiderman.socks.nec.com/protocol/socks4.protocol Socks5: http://spiderman.socks.nec.com/rfc/rfc1928.txt! SolidFillStyle is a fill which represents a color for the BalloonEngine. Instance variables: color The color to use. pixelValue32 The cached pixel value to use.! A SortHierarchically is an algorithm used to display a list of classes where subclasses are indented and follow their superclass. Instance Variables hierarchy: an array of SortHierarchicallyNodes correctly sorted ! A SortHierarchicallyNode is a wrapper around any object that is used by the sorting algorithm of SortHierarchically to store the ancestry chain of this object. Instance Variables ancestor: a SortHierarchicallyNode that is an ancestor of the receiver if any, nil otherwise. element: any model object that is part of a collection we are sorting hierarchically. ! I represent a collection of objects ordered by some property of the objects themselves. The ordering is specified in a BlockContext.! This is the AppRegistry class for the sound system. A sound system offers a small protocol for playing sounds and making beeps and works like a facade towards the rest of Squeak. A sound system is registered in this registry and can be accessed by "SoundService default". This way we decouple the sound system from the rest of Squeak and make it pluggable. It also is a perfect spot to check for the SoundSettings class>>soundEnabled.! Groups a set of sounds to use with a UITheme. Note that, although instances may have their sounds changed the settings will still indicate the class of theme that is current.! This is a variation on StandardSourceFileArray that provides a larger maximum changes file size. The available address space for source pointers in a traditional CompiledMethod is 16r1000000 through 16r4FFFFFF. StandardSourceFileArray maps positions in the sources file to address range 16r1000000 through 16r1FFFFFF and 16r3000000 through 16r3FFFFFF, and positions in the changes file to address range 16r2000000 through 16r2FFFFFF and 16r4000000 through 16r4FFFFFF. This permits a maximum file size of 16r2000000 (32MB) for both the sources file and the changes file. This implementation extends the source pointer address space using bit 25 of the source pointer to identify the external sources and changes files, with the remaining high order bits treated as address extension. This limits the number of external file references to two (the traditional sources and changes files). If additional external file references are needed in the future, some higher order bits in the source pointer address space should be allocated for that purpose. The use of bit 25 of the source pointer for file references permits backward compatibility with StandardSourceFileArray, with essentially unlimited address space expansion for the sources and changes files. ! This test documents the source pointer address conversion methods for ExpandedSourceFileArray. The available address space for source pointers in a traditional CompiledMethod is 16r1000000 through 16r4FFFFFF. StandardSourceFileArray maps positions in the sources file to address range 16r1000000 through 16r1FFFFFF and 16r3000000 through 16r3FFFFFF, and positions in the changes file to address range 16r2000000 through 16r2FFFFFF and 16r4000000 through 16r4FFFFFF. This permits a maximum file size of 16r2000000 (32MB) for both the sources file and the changes file. ExpandedSourceFileArray extends the source pointer address space using bit 25 of the source pointer to identify the external sources and changes files, with the remaining high order bits treated as address extension. This limits the number of external file references to two (the traditional sources and changes files). If additional external file references are needed in the future, some higher order bits in the source pointer address space should be allocated for that purpose. The use of bit 25 of the source pointer for file references permits backward compatibility with StandardSourceFileArray, with essentially unlimited address space expansion for the sources and changes files. ! A SourceMessageConverter is a wrapper wich display the source code of the provided message! I'm responsible to help getting information about system space usage. The information I compute is represented by a spaceTallyItem try something like: ((SpaceTally new spaceTally: (Array with: TextMorph with: Point)) asSortedCollection: [:a :b | a spaceForInstances > b spaceForInstances]) SpaceTally new systemWideSpaceTally This class has been created from a part of SystemDictionary. It still deserves a nice clean, such as using object instead of array having 4 slots. sd-20 June 2003! I'm represent an entry in the spaceTally.! A version of SparseLargeTable that does not populate its bins until a value other than the default is stored.!!! Derivated from Stephan Pair's LargeArray, but to hold a sparse table, in which most of the entries are the same default value, it uses some tricks.! A SpecBinder is a stupid dictionary where keys are spec symbolic name and values are corresponding spec class! A SpecColumnLayout is the layout used to specify a new column! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! SpecDebuggerToolbar maintains a list of buttons for the most important debugging actions. The execution of all actions is delegated to the session. Instance Variables createMethodButton: restartButton: resumeButton: runToSelectionButton: selectedContext: session: stepIntoButton: stepOverButton: stepThroughButton: whereIsButton: createMethodButton - xxxxx restartButton - xxxxx resumeButton - xxxxx runToSelectionButton - xxxxx selectedContext - xxxxx session - xxxxx stepIntoButton - xxxxx stepOverButton - xxxxx stepThroughButton - xxxxx whereIsButton - xxxxx ! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! A SpecInterpreter is a interpreter for spec presenters! A SpecInterpreterTest is a test class for testing the behavior of SpecInterpreter! A SpecPresenter is a object used to describe a user interface! A SpecLayoutAdd represents the action to add a subwidget into a spec layout! A SpecLayoutAddColumn is an action representing the addition of a column to a layout! A SpecLayoutAddRow is an action representing the addition of a row to a layout ! A SpecLayoutAddWithSpec is an action representing an add in the spec layout with a spec selector precised! A SpecLayoutSend is a spec layout action used when a selector is sent to the layout! A SpecPragmaCollector is a specialized PragmaCollector. Sonce we just want specs defined on class side, we do not have to check the whole system, then to restrain.! SpecProxyDebugger is a simple extension of the existing debugger that adds a button for opening the SpecDebugger in the pre-debugger window. Instance Variables ! A SpecRowLayout isthe layout used to specify a new row! A SpecSplitterHorizontal is a description of the addition of a horizontal splitter! A SpecSplitterVertical is the description of the addition of a vertical splitter! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! I am a window used by WindowSpec. I have been introduced since it's currently the best solution to prevent to add dozen of respondsTo: in StandardWindow or add dirty extensions to Object (because all models are not subclasses of Model)! "Evaluate me to view the SplitJoin documentation:" self showDocumentation "CHANGES LOG: - merged implementations by Keith Hodges (Join) and Damiena Pollet and Oscar Nierstrasz (RubyShards) into SplitJoin package - moved all extension methods to *splitjoin method category - merged all tests into SplitJoinTest - fixed protocol in SequenceableCollection to splitOn: and joinUsing: and split: join: for splitters and joiners - added Object>>joinTo: aStream and SequenceableCollection>>joinTo: aStream to support joining of either sequences or sequences of sequences - prepared some documentation - added systematic tests for all split/join cases - added Object>>join: - prepared split/join tests for all 16 cases - prepares split+join tests for 4 standard cases - reviewed/merged old tests - changed splitjoin tests to use different joiner - added separate test for split+join=id cases - adapted documentation -- join result type is type of joiner or array or string - fix split tests to check result asOrderedCollection - added split tests for OrderedCollection and SortedCollection - new join: method for OrderedCollection and SortedCollection (uses appendTo: in Object and SequenceableCollection) - reviewed all split: implementations -- removed unnecessary helper methods - check boundary conditions -- split on empty sequence ... "! I'm a morph who searchs classes and implementors in an easy way (it is a "code completion" morph in a cool place and with better "enter" handling). To activate it just press shift+enter! I'm a TextMorphForFieldView who prevents losing focus when tab is pressed (so I can trigger OCompletion) I'm kind a hack, because if form (morph) does not has more than one element, it shouldnt try to rotate the focus, but well... life is hard :) ! SqNumberParser is a NumberParser specialized in reading Number with Squeak syntax. Squeak syntax follows general Smalltalk-80 conventions for integer and floats, extended with scaled decimals. Noticeable differences with st-80 and other Smalltalks are: - allow both 2r-10 and -2r10 and even -2r-10 - allow floating point with radix 2r10.011 - do not allow single s without following digits as ScaledDecimal - handle special case of Float (NaN Infinity and -0.0 as negative zero)! Provide tests for new clas aimed at parsing numbers. It duplicates NumberParsingTest, with few more tests.! I implement a simple Stack. #push: adds a new object of any kind on top of the stack. #pop returns the first element and remove it from the stack. #top answer the first element of the stack without removing it.! Provides a simple, platform-independent, interface to a file system. The instance variable rwmode, inherited from class PositionableStream, here is used to hold a Boolean -- true means opened for read-write, false means opened for read-only. 2/12/96 sw I implement a simple read buffering scheme with the variables defined in PositionableStream (which are unused in me otherwise) in the following way: collection or This is the buffer. position The relative position in the buffer. Greater or equal to zero. readLimit The number of bytes buffered. Greater or equal to zero. Read buffering is enabled with #enableReadBuffering, disabled with #disableReadBuffering and it is enabled by default. The buffer is filled when a read attempt of an unbuffered absolute position is requested, or when a negative repositioning is made (with #position: with an argument < than the current absolute position) to an absolute position which is not buffered. In the first case, the buffer is positioned to the given absolute position. In the latter case the repositioning is made to the requested absolute position minus fourth of the buffer size. This means that further small negative repositionings won't result in buffer flushing. This is really useful when filing in code. The read buffer is flushed (#flushReadBuffer) whenever a write attempt is made. The buffer state is valid if and only if collection is not nil and position < readLimit.! I am a facade and a global reference to actual fonts to be used system wide in a number of predefined categories. I also provide methods to interactively choose these fonts, to reset all fonts to some default value, to set larger demo fonts, to construct a font menu and to manipulate the current settings as an external specification. The font categories that I know of are: ButtonFont, CodeFont, HaloFont, ListFont, MenuFont and WindowTitleFont Examples: - I open a dialog to choose the font for buttons with: StandardFonts chooseButtonFont. - To change base size for all fonts (when you want big fonts for a screencast or a presentation): StandardFonts setDemoFonts. - Then restore default fonts with: StandardFonts restoreDefaultFonts.! Themed SystemWindow that avoids being picked up except via the title bar. Supports opening in "fullscreen" mode, taking docking bars into account. Prevents yellow button menu. Uses TEasilyThemed for easy theme access to subclasses.! I am an atomic item used to execute a portion of code at image startup.! StartupLoader searches for and executes .st files from certain locations such as Library/Preferences/pharo on Mac OS X. StartupLoader looks within such locations for a 'pharo' folder. This contains the startup scripts common to all versions of Pharo, and also optionally a folder per Pharo version holding startup scripts suitable for that version only. So a typical directory layout might be... .../some/folders/pharo/Content/Resources/pharo.image. .../some/folders/pharo/Content/Resources/startup.st .../some/folders/.config/pharo/author.st .../some/folders/.config/pharo/useSharedCache.st .../some/folders/.config/pharo/1.4/mystartupFor14only.st .../some/folders/.config/pharo/2.0/mystartupFor20only.st (**Note however that '.config' is an invalid filename on Windows, so '..config' is used instead) To know the real values for you... Print the result of "StartupLoader preferencesGeneralFolder" which holds the startup scripts common to all versions of Pharo. Print the result of "StartupLoader preferencesVersionFolder" which holds the startup scripts specific to the version of the current image. ----------- StartupLoader example will define a script sample startup.st in your unix root on unix Its contents is StartupLoader default executeAtomicItems: { StartupAtomicItem name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' isSingleton: true. StartupAtomicItem name: 'Open Workspace' code: 'Workspace openContents: ''I should be displayed each time'''. } For a more complete example, see StartupLoader class>>#example2! I'm a MorphicAlarm to be queued in WorldState list of stepping actions. I hold the stepTime (refresh period) of my receiver / Morph (if nil, the #stepTime value of my receiver is used). See - WordState>>runLocalStepMethodsIn: (where the stepping actions are sent). - WorldState>>startStepping:at:selector:arguments:stepTime: (to queue a new StepMessage) Example: MorphicUIManager currentWorld startStepping: (Morph new openInWorld) at: Time millisecondClockValue selector: #toggleVisible arguments: nil stepTime: 500.! A StickynessBugz is for mantis #5500 rectangles and ellipses don't act sticky when rotated even when they are.. Instance Variables ! A Stopwatch maintains a collection of timespans.! I am an abstract class that represents an accessor for a sequence of objects. This sequence is referred to as my "contents".! I represent a compact encoding of a set of Forms corresponding to characters in the ASCII character set. All the forms are placed side by side in a large form whose height is the font height, and whose width is the sum of all the character widths. The xTable variable gives the left-x coordinates of the subforms corresponding to the glyphs. Characters are mapped to glyphs by using the characterToGyphMap. Subclasses can have non-trivial mapping rules as well as different representations for glyphs sizes (e.g., not using an xTable). If so, these classes should return nil when queried for xTable and/or the characterToGlyphMap. This will cause the CharacterScanner primitive to fail and query the font for the width of a character (so that a more programatical approach can be implemented). For display, fonts need to implement two messages: #installOn: aDisplayContext foregroundColor: foregroundColor backgroundColor: backgroundColor This method installs the receiver (a font) on the given DisplayContext (which may be an instance of BitBlt or Canvas (or any of it's subclasses). The font should take the appropriate action to initialize the display context so that further display operations can be optimized. #displayString: aString on: aDisplayContext from: startIndex to: stopIndex at: aPoint kern: kernDelta This method is called for each subsequent run of characters in aString which is to be displayed with the (previously installed) settings. ! I am something acts like a font out of collection of fonts. First font in me is used as representative font to answer many messages. Examples: - display a font: StrikeFontSet allInstances first fontDisplay - calculate pixels width of a string for a font: StrikeFontSet allInstances first widthOfString: 'Pharo'! A String is an indexed collection of Characters. Class String provides the abstract super class for ByteString (that represents an array of 8-bit Characters) and WideString (that represents an array of 32-bit characters). In the similar manner of LargeInteger and SmallInteger, those subclasses are chosen accordingly for a string; namely as long as the system can figure out so, the String is used to represent the given string. Strings support a vast array of useful methods, which can best be learned by browsing and trying out examples as you find them in the code. Here are a few useful methods to look at... String match: String contractTo: String also inherits many useful methods from its hierarchy, such as SequenceableCollection , SequenceableCollection copyReplaceAll:with: ! I am a kind of Model that includes a piece of text. In some cases, the text can be edited, and in some the text is a method. Categories 'code pane menu' and 'message list menu' are messages that may be called by my menus when the text is a method, and when some pane is a list of methods. Other of my subclasses may ignore these two catagories altogether.! StringMorph is a "lightweight" Morph to display a String. It supports only a single font, color, and emphasis combination. For multiple text styles, use TextMorph. Structure: instance var Type Description font StrikeFont (normally nil; then the accessor #font gives back TextStyle or nil defaultFont) emphasis SmallInteger bitmask determining character attributes (underline, bold, italics, narrow, struckout) contents String The text that will be displayed. hasFocus Boolean Do I have the keyboard focus or not? If you shift-click on a StringMorph you can edit its string. This is accomplished the following way: StringMorph can launch a StringMorphEditor if it receives a #mouseDown event. A StringMorph may also be used like a SimpleButtonMorph to do an action when clicked. Use the menu 'extras' / 'add mouseUpAction'. The following propery will be defined: aStringMorph valueOfProperty: #mouseUpCodeToRun! A StringMorphAttributeScanner provides the interface of a CharacterScanner so that text attributes may be collected from a Text and used elsewhere, like in setting the attributes of a StringMorph. ! I am a textMorph used as a pop-up editor for StringMorphs. I present a yellow background and I go away when a CR is typed or when the user clicks elsewhere.! This is the unit test for the class String. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! i doing same job, as my superclass, but do not follow weak references! i doing same job as my superclass, PointerExplorerWrapper, but filter out a weak references to object(s).! I'm the declaration of a style stuff into a file. I'm not really used, but I'm here to make parsing an homogeneous process and backwards compatibility. Sending me the #import message does nothing :).! I should be able to access the pool variables defined in my superclass.! I am SubclassResponsibility, an exception signaled when an inherited method should have been implemented in a subclass but was not.! I am SubscriptOutOfBounds, an exception indicating that some operation attempted to use a subscript outside allowed bounds. Normally, I hold the offending subscript and/or the allowed lowerBound and upperBound (inclusive). SubscriptOutOfBounds signalFor: 10 lowerBound: 1 upperBound: 5 in: (Array new: 5)! The subscription registry is a threadsafe storage for the subscriptions to an Announcer. In Pharo, subscriptionsFor: protocol is not implemented. This is because Announcer does not provide public access to its registery for encapsulation reasons. (We do not want access to the announcer from action blocks to break encapsulation to other subscribers)! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! I know how to find accesses to an instance var! I know how to add a parameter to a method! I know how to browse references from a class! I know how to create accessors for a class var! I know how to create accessors for an instance var! I know how to talk with a debugger and extract the information needed for the suggestions :)! I know how to delegate the selected method in an instance variable and move the code to a class! If you want to extract code in a new method I'm your guy! The classic option to extract a line of code in a local variable! I know how to find implementors for a message! I know how to find senders from a message! I know how to format the code! I know how to inline the method from a message! This inline a variable in an assignment sentence! I'm the one who finds the best suggestion for your selection or poition in text. I also add the options to the displayed menus.! I know how to use a Text model that came from a SmalltalkEditor and extract the information needed for the suggestions :)! I'm a mock context with lot of stuff hardcoded. I'm used in the tests to make easier the configuration for detecting diferents context.! The implementation who asumes that my model it's a nautilus object.! I know how to pull up the method to my superclass! I know how to push down the method to my subclass! I know how to remove a mehod! I know how to remove a parameter from a method! I know how to rename a class! I know how to rename a class variable! I know how to rename an instance variable! I know how to rename methods! I know how to rename a local variable.! I know how to find stores into for an instance var! I'm the representation from a suggestion that can be executed. I have some information related to the suggestion.! I'm the guy who knows how to create the suggestions. I also categorize them.! I know how to move a method from instance side to class side and the oposit, depending the method.! I know how to replace the call of a class variable for the use of an accessor and create accessors if it's necessary.! A SwitchUsers is a GUI to swith the current user! I represent Strings that are created uniquely. Thus, someString asSymbol == someString asSymbol.! This is the unit test for the class Symbol. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! I represent syntax error report for syntax errors encountered when filing in class descriptions from a non-interactive source such as an external file. As a StringHolder, the string to be viewed is the method code or expression containing the error. The user may fix the error and accept the method to continue the fileIn. ! The root announcement for the events coming from the Pharo system. Currently, it wraps the event that comes from the SystemChangeNotifier.! This class plays the role of the announcer for events raised by the Pharo system. BEWARE: You should not need to subclass me. Think about just using me to send your announces (if you need system behavior) or using your own announcers as instance or class variables.! I represent a special dictionary used as global namespace for class names : Smalltalk globals classNames. and for traits too: Smalltalk globals traitNames. and a few other globals: (Smalltalk globals keys reject: [:k | (Smalltalk globals at: k) isBehavior]) collect: [:k | k -> (Smalltalk globals at: k) class]. As the above example let you guess, the global namespace of Smalltalk system is accessed through: Smalltalk globals.! This class defines Help for the system in front of you. It defines the default contents when you open a help browser. So "HelpBrowser open" is the same as "HelpBrowser openOn: SystemHelp". ! I support the navigation of the system. I act as a facade but as I could require some state or different way of navigating the system all my behavior are on the instance side. I should (it is not complety done yet) be parametrized by an environment (aSystemDictionary) that scopes my queries.! I am an sunit test for SystemNavigation with the default value for its environment (Smalltalk globals). ! My instances provide an organization for the classes in the system, just as a ClassOrganizer organizes the messages within a class. The only difference is the methods for fileIn/Out.! A SystemProgressItemMorph is 'bar' in a SystemProgressMorph. ! I display a set of progress indicator in a list. Special care is taken to update the view while the rest of the UI process is blocked. Reset. SystemProgressMorph reset. Examples. self show: 'Doing...' from: 500 to: 600 during: [ :bar | 500 to: 600 do: [ :x | bar current: x. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ]. self show: 'Doing...' from: 0 to: 50 during: [ :bar | 0 to: 50 do: [ :x | bar increment. bar label: x asString. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ].! This class defines the full reference help for the system. (contents for the full API Help). Just run "HelpBrowser openOn: SystemReference". ! SystemReporter offers a window where information about the system is gathered. This can be easily copied to the clipboard and be attached to a bug report for better identification of the context the bug occured in. To extend the SystemReporter: - add a method reportXYZ: aStream to the reporting category - insert a line add: #XYZ method: #reportXYZ to the initialize method ! I resolve origins that are related to the currently running Smalltalk system, using primitives provided by the VM. ! I am responsible for maintaining what version of Squeak and the VM is running. I also track all of the update items that have been included in the image. I'm invoked at auto start to get the latest plugins, etc. Some queries are SystemVersion current major SystemVersion current minor SystemVersion current suffix SystemVersion current highestUpdate! I am an sunit test for SystemVersion. Originally created to test SqueakMapSystemVersionFix change set. I have no test fixtures.! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! I think it is not used yet. I think it is a Trait so that we can make things assertable and not need to subclass from TestCase for example. I may expect that TestCase uses such Trait instead of implementing all those methods, but it is not the case. Even more, TAssertable users size -> 0. So...seems a work half done. Adrian Kuhn introduce it. Check http://forum.world.st/template/NamlServlet.jtp?macro=search_page&node=1294837&query=TAssertable! This trait is a protocol for comparable objects. Classes using it must implement #<, #=, and #hash.! Tests whether a copied object contains the same elements than its source. Note that the order is not garanteed -- see TEqualityTest for that. ! I am a helper Trait for date tests. By providing methods to locally change the time zones I simplify date and time tests.! Trait providing useful theme-related methods.! I group a set of tests testing whether a collection is empty. I do not do any assymption on the elements being added since it would bind me to know how to access it. ! Trait providing an "enabled" option on the halo menu.! I'm testing that high-order iterators are working. Note however that I do not pay attention to the order of the elements. Hence, my doTest is designed to not checking that. TIterateSequenceableTest is about this distinction and as such will not be applicable to test Set, Bag, Dictionary. ! Contains methods for accessing points stored in variable word classes. Initially used by PointArray & ShortPointArray! A TRBProgramNodeVisitor is a simple that define visitor methods. ! I represent a set of methods related to element sorting. My public api is composed of the messages: #sort, #isSorted, #isSortedBy:, and #sort: To get the behavior I define, my users should implement: #isEmpty, #size, #first, and #at: ! Tests whether two objects are equals: they contain the same objects in the same order.! methods that make the user of this trait protocol-compatible with TraitTransformation. When used in Trait and ClassTrait, this eliminates the need for TraitHolders. ! I represent a simple tab I have a IconicListItem which wrap my label and my icon. I also have a morph to display when selected. This morph can in fact be anything responding to #asMorph. Moreover it could be a block for lazy initialization. I also have a state representing if I am selecting or not, enabled or not, etc! I am a data object representing an action associated to a tab. I contains - an action to be performed when clicked - an icon to be rendered - a label to add indication about what I am supposed to do! I am a multi state button supporting icon. I am used to render tab actions! I am a bar gathering tabs. I am the one managing the selected tab and related bahavior (unselecting the last one, updating the layout to make the selected tab on top of the other)! A TabClassical is an example to learn how to use tabs ;)! A TabContainerMorph is a morph (which should be pluggable soon) which handle a first bar for tabs button and a container which is used to display the morph corresponding to the selected tab! I am the state corresponding to a tab being disabled.! I am the state of a tab enabled but not yet selected! I am an example of how to: - instanciate tabs (#tabs) - use a tab manager Nothing really complicated here. self open! Organises a set of pages sharing the same space and selected through the use of tabs along the top.! I am a special label morph for tabs. This way I can control which of my submorphs to show according to the tab size! Specially themed label used for tab selector items. ! I am the entry point for tabs. I am composed of a TabBar and a Morph used as a canvas to render the morph represented by the selected tab. I am very stupid (as you can see only four methods). I just listen to selected tab, and render it! Specialist border for a TabGroup panel. Does not draw border beneath selected tab.! I am the state of a selected tab! Row of tabs for a TabGroupMorph.! I represent the current state of a tab. This class is abstract so have a look at my subclasses to have a better overview. I have tree responsibilities: - influence the rendering (color, border) - point out if the state changement asked on my tab is relevant (trying to enable an enabled tab by example) - provide the next state for each change (disable, enable, selected)! Error raised when a tab is asked its contents but have no morph and no retrieving block, or the retrieving block is returning nil.! The layout process: For computing the new layout for the children of any morph, we start with an initial rectangle which is provided as a reference. Step 1: The first step of layout computation is to compute the minimum extent each of our children can have. The minimum extent is mapped through both the local layout frame of the morph (for relative positioning) and the global layout frame (for insets, such as cursor indication) to obtain the minimal size required for each cell. Step 2: Based on the cell sizes, the number of cells we can put into each row and column is computed. For equal spacing, the maximum size of the cells is taken into account here. Step 3: Based on the row/column sizes, we compute the extra space which should be added to each row/column. For #leftFlush/#topFlush - we add all extra space add the end #rightFlush/#bottomFlush - we add all extra space at the start #centering - we add 1/2 of the extra space at start and end #justified - we distribute the space evenly between the morphs [NOTE: If any #spaceFill morphs are encountered during this step, #justified is implied and the space is exclusively and equally distributed between those #spaceFill morphs. This is for backward compatibility and should *never* be necessary in the new regime]. Step 4: The morphs are placed in the computed cells and the extra space is distributed as necessary. Placing the submorphs is done by mapping through the global and the local layout frame as requested. Start point: => bounds: new rectangle for the morph. Compute basic arrangement of morphs: => For each submorph compute minExtent - if global layout frame inset in global layout frame - if local layout frame inset in local layout frame => Compute number of morphs per, width and height of row/column - if equal spacing based on max size => Compute extra space per row/column - if centering = #justified; distribute space equally - if centering #leftFlush/#topFlush (-1) add start extra - if centering #rightFlush/#bottomFlush (1) add end extra - if centering #centered add 1/2 extra to start/end => Place morphs in appropriate cells - if global layout frame inset in global layout frame - if local layout frame inset in local layout frame Distribute morphs in row/column: => Compute the max length of each row/column ! This is a kind of archive that uses the TAR format (popular in Unix). It is here as a placeholder.! Themed synchronous taskbar (not using #step to poll windows). The buttons provide visual feedback as to whether a window is active or minimised (collapsed) plus a popup menu with options to restore, minimise, maximise and close the associated window. Optional (via settings) preview of the window while mouse is over a taskbar button. ! Holds the state of a taskbar/tasklist entry.! Themed task list/switcher to select the topmost window. Use cmd + left or right arrows (not ideal but the os typically handles cmd + tab/shift-tab). On Linux, release of the command key is not detected (vm issue), so press and release cmd again or move the mouse!!! Abstract super class for protocol clients based on the generic telnet protocol " " Structure: responseCode the numerical (integer) value of the last response code ! Abstract super class for exceptions signalled by clients based on the telnet protocol. ! I am a parse tree leaf representing a temporary variable! I provide a simple mapping from high-level commands to low-level terminal character sequences. ! I am used to externally notify that a test has been run (or a test suite)! I understand methods beginning #assert:... and #deny:... (and my class-side understands #assert:description:). I am the superclass of TestCase and TestResource and can also be the superclass of any test helper classes you create to factor out test behaviour. I exist so that test code can be refactored between my subclasses without difficulty. Send #assert:description: when you want to check for an expected value. For example, you might say self assert: socket isOpen description: 'We requested a socket but now it is not open'. to test whether or not a socket is open at a point in a test. Use description strings both to give more information about where a test failed in debugger notifiers and logs, and to document the intent of a test. Other methods include #assert:, #assert:description:resumable:, #deny:, #deny:description:, #deny:description:resumable:, #should:raise:, #should:raise:description:, #shouldnt:raise:, #shouldnt:raise:description:. All these methods are defined on the superclass, TestAsserter. (Any convenience assertion methods you create for general use should also be defined in my 'convenience' protocol.) Override my class-side #isLogging in subclasses to have failed assertion descriptions shown on the Transcript. To have them appear elsewhere, also override my class-side #failureLog. ! A TestCase is an implementation of the Command pattern to run a test. TestCase instances are created with the class method #selector:, passing the symbol that names the method to be executed when the test case runs. Various UIs exist to run these instances and they can also be created and run programmatically. When you discover a new fixture, subclass TestCase and create a #test... method for the first test. As that method develops and more #test... methods are added, you will find yourself refactoring temps into instance variables for the objects in the fixture and overriding #setUp to initialize these variables. As required, override #tearDown to nil references, release objects and deallocate. See my superclass' comment for assertion and logging information.! This is a common superclass for announcements related to SUnit test cases. Instance Variables testCase: testResult: testSelector: testCase - The test case testResult - The result of the test case testSelector - The selector of the test method! This event is announced when testing a test case ends.! This event is announced when testing a test case starts.! I wrap a method in order to detect whether it has been called or not. Then I can be used to calculate test coverage for SUnit.! TestDynamicVariable is a test class using in ProcessSpecificTest. ! The test framework distinguishes between failures and errors. A failure is an event whose possibiity is explicitly anticipated and checked for in an assertion, whereas an error is an unanticipated problem like a division by 0 or an index out of bounds. TestFailure is raised when the boolean parameter of an assert: ... or deny: ... call is the opposite of what the assertion claims.! Helper class for MorphTest! TestLocalVariable is a test class using in ProcessSpecificTest.! Normally a test will set up all the objects it needs and tear them down again after it has run. This self-containedness makes a test more robust. Use TestResources only for objects that are needed by several tests and that are too 'expensive' (in time or otherwise) to recreate and destroy for each test. A viable approach is to develop the code in MyTestCase's #setUp and #tearDown methods, then at some point refactor the code into the #setUp and #tearDown of a TestResource whose class is added to MyTestCase class>>resource method. TestResource uses the singleton pattern. A TestResource class will set up a single instance of itself when first requested and tear it down again at the end of TestSuite>>run (or TestCase>>run, >>debug and >>debugAsFailure). Normally, a TestResource, once setUp, remains active during the running of all remaining tests and is #reset after all tests have run. For an exception, see subclass CompetingResource in SUnitResourcePatterns. Users can choose to #reset a resource in the #tearDown of a test that alters it, sacrificing the performance gain of having a single #setUp of the resource for the certainty that other tests using it will not see the alterations. Generally however, this should be the exception: if you need to reset the resource for every test that uses it, its code should just be part of your test's #setUp and #tearDown code. To use, create a subclass of TestResource and override the following: - TestCase class>>resources, to return a collection including the TestResource class, for all test case classes that need it * a TestCase' resources are set up in the order returned and torn down in the reverse order - TestResource class>>resources, if the resource itself always needs some other resource to be present before it can set up * a TestResource's resource are set up before it and torn down after it, and are set up in the order returned and torn down in the reverse order - TestResource>>setUp and tearDown, to define initial and final behaviour (just like a test) - TestResource>>isAvailable, to return true if it is and false if it isn't (the framework calls this after setUp); ideally, this call should not change the resource' state - that should be done in setUp TestResource implements the singleton pattern in its class-side #isAvailable and #reset methods. Do not override these when creating specific resources; unless you are developing a whole new pattern of use, it will always be correct to override instance-side #setUp, #tearDown and #isAvailable, and dangerous to override class>>isAvailable, class>>isAlreadyAvailable and class>>reset. Generally, users do not code interactions with a test's resources during the running of a test. Code that reads a resource' values while leaving its state strictly alone is safe enough. A test must leave a resource in a clean state: always use #reset if a test must protect later-running tests from unsafe changes (and review whether in such a case a resource is the right thing to use in the first place). See my superclass' comment for assertion and logging information. ! This implements the Collecting Parameter pattern for running a bunch of tests. It holds tests that have run, sorted into the result categories of passed, failures and errors. TestResult is an interesting object to subclass or substitute. #runCase: is the external protocol you need to reproduce. TestResult subclasses can handle multi-threaded tests (see SUnitXProcPatterns) and might record coverage information or send emails when the run completes. ! I am a UI for test failures which have been serialized as fuel files. You can: * materialize the failed test process to debug * browse the test method. self open. ! Although tests can be most easily be run from a browser, I provide the ability to: * select sets of test suites to run. I am designed to make it easy to execute groups of tests * obtain a more detailed log of the results UI Description ___________ My left-most pane lists all of the categories that contain test classes (i.e., subclasses of TestCase); when some of these categories are selected, the test classes that they contain appear in the pane to the right. Abstract classes are italicized, and the test class hierarchy is shown by indentation, so subclasses of ClassTestCase are indented more than subclasses of TestCase. The tests that did not pass (if any) are listed in the right-hand panes of the Test Runner; if you want to debug one, to see why it failed, just click on the name. ! Usage: test [--junit-xml-output] [ ...] --junit-xml-output output the test results in a junit compatible format a String matching a package name Examples: #Run all the tests in the Tests-Exceptions package pharo Pharo.image test Tests-Exceptions #Run all the tests in packages matching Test-.* pharo Pharo.image test "Tests-.*" # Run test on a Hudson/Jenkins server pharo Pharo.image test --junit-xml-output "Tests-.*" ! I mark a test as being skipped.! This is a Composite of Tests, either TestCases or other TestSuites. The top-level protocol is #run. This creates aTestResult and sends self run: aTestResult. then ensures that any TestResources made available during the run are reset. These, and the dependencies protocol, are common between this and TestCase.! This announcment is thrown when a test suite just finished (more precisly when hisoties are updated)! A TestingComposableModel is a stupid composable model used to test SpecInterpreter! I represent a character string that has been marked with abstract changes in character appearance. Actual display is performed in the presence of a TextStyle which indicates, for each abstract code, an actual font to be used. A Text associates a set of TextAttributes with each character in its character string. These attributes may be font numbers, emphases such as bold or italic, or hyperling actions. Font numbers are interpreted relative to whatever textStyle appears, along with the text, in a Paragraph. Since most characters have the same attributes as their neighbors, the attributes are stored in a RunArray for efficiency. Each of my instances has string a String runs a RunArray! I'm a Text attribute that tells how content should be aligned. TextMorph new newContents: (Text streamContents: [:aStream| aStream nextPutAll: 'Left flush' asText; cr; nextPutAll: ('Centered' asText addAttribute: TextAlignment centered); cr; nextPutAll: ('Right flush' asText addAttribute: TextAlignment rightFlush); cr ]); openInWindowLabeled: 'TextAlignment demo'! TextAnchors support anchoring of images in text. A TextAnchor exists as an attribute of text emphasis, and it gets control like a FontReference, through the emphasizeScanner: message. Depending on whether its anchoredMorph is a Morph or a Form, it repositions the morph, or displays the form respectively. The coordination between composition, display and selection can best be understood by browsing the various implementations of placeEmbeddedObject:. In the morphic world, simply embed any form or morph in text. Workspace new contents: (Text withAll: 'foo') , (Text string: '*' attribute: (TextAnchor new anchoredMorph: MenuIcons confirmIcon)) , (Text withAll: 'bar'); openLabel: 'Text with Form'. Workspace new contents: (Text withAll: 'foo') , (Text string: '*' attribute: (TextAnchor new anchoredMorph: EllipseMorph new)) , (Text withAll: 'bar'); openLabel: 'Text with Morph'. In this case you select a piece of the screen, and it gets anchored to a one-character text in the editor's past buffer. If you then paste into some other text, you will see the image as an embedded image.! At May 09, 2003 Tim Olson sent a bug report to the Squeak developers list that inspired me to examine the protocol of TextStream in greater detail. (The bug that Tim reported was present in Squeak 3.4, it is shown in testExample1.) In a discussion that followed, Daniel Vainsencher proposed that we should have tests for Text and TextStreams. This class is an attempt to implement that proposal. For Squeak 3.4, some of the test examples fail.! Tells a piece of text to be a certain way. Select text, press Command-6, choose a attribute. If selected text is of the form Hi There the part in angle brackets is saved for action, and the Hi There appears in the paragraph. If selection has no angle brackets, use the whole thing as both the text and the action. TextDoIt -- eval as a Smalltalk expression (the part in angle brackets) TextLink -- Show a method, class comment, class hierarchy, or class defintion. , , , or are what you type. TextURL -- Show the web page. These attributes of text need to be stored on the disk in a regular file-out. It is done in this form: Hi There in the text, and a Run containing dSmalltalk beep;; Click here to see the extent: in the text, and a Run containing method LPoint extent:; See RunArray class scanFrom: where decoding is done. ! A TextColor encodes a text color change applicable over a given range of text.! A TextContainer models the shape of an ownerMorph, possibly occluded by one or more occludingMorphs, and scans this shape to provide a list of rectangles suitable for layout of text. It does this by displaying the shadow of the ownerMorph in black, and any occludingMorphs in white, on its shadowForm. It then scans horizontal strips of appropriate height to find unbroken intervals of black, greater than minWidth in extent. Conputation of the rectangles is done on demand, and results are cached so that text can be redisplayed without having to recompute the rectangles.! The abstract class for all different type of text converters. nextFromStream: and nextPut:toStream: are the public accessible methods. If you are going to make a subclass for a stateful text conversion, you should override restoreStateOf:with: and saveStateOf: along the line of CompoundTextConverter. ! I implement the diff algorithm. I can show the differences between two texts. See my method comments for further information. Instance Variables xLines: yLines: xLines - an Array of DiffElement which is created from the first input text yLines - an Array of DiffElement which is created from the second input text! Tests for the new algorithm that is diffing changes. Tests from L. Uzonyi (from squeak trunk System.ul207and 208)! See comment in Editor. My instances edit Text, this is, they support multiple lines and TextAttributes. They have no specific facilities for editing Smalltalk code. Those are found in SmalltalkEditor.! Multi-line text entry dialog.! A TextEmphasis, encodes a characteristic applicable to all fonts. The encoding is as follows: 1 bold 2 itallic 4 underlined 8 narrow 16 struck out! Single-line text entry dialog.! A TextFieldExample is a simple example of how to use TextFields.! A TextFieldSpec is a spec used to describe a text field! A TextFontChange encodes a font change applicable over a given range of text. The font number is interpreted relative to the textStyle governing display of this text.! A TextFontReference encodes a font change applicable over a given range of text. The font reference is absolute: unlike a TextFontChange, it is independent of the textStyle governing display of this text.! Definition of a clickable highlighted range of text with optional borders.! Definition of a clickable highlighted range of text with optional borders.! create a hanging indent. ! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! A TextKern encodes a kerning change applicable over a given range of text. Positive values of kern spread letters out, negative kern will cause them to overlap more. Note that kerns other than 0 will display somewhat slower, as kerning is not yet supported in the text scanning primitive. ! A TextLine embodies the layout of a line of composed text. left right top bottom The full line rectangle firstIndex lastIndex Starting and stopping indices in the full text internalSpaces Number of spaces to share paddingWidth paddingWidth Number of pixels of extra space in full line baseline Distance of baseline below the top of the line leftMargin Left margin due to paragraph indentation TextLine's rather verbose message protocol is required for compatibility with the old CharacterScanners.! This is a test case for Text>>withSqueakLineEndings and String>>withSqueakLineEndings. The main problem we've seen with the Text version is that it doesn't preserve formatting correctly.! A link to a hidden mail message. Clicking on it allows the message to be viewed or saved to disk.! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text. Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color. Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter. If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape. The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except... If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property. Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph. Still a TextMorph can be composed of several texts of different fonts | font1 font2 t1 t2 tMorph| tMorph := TextMorph new. font1 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)). font2 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)). t1 := 'this is font1' asText addAttribute: font1. t2 := ' and this is font2' asText addAttribute: font2. tMorph contents: (t1,t2). tMorph openInHand. Yet to do: Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.! I'm a TextMorph that must be embedded in a PluggableTextMorph. Multi-line text editor with support for accepting on both each change and/or when keyboard focus changes. Also supports custom selection colour and clickable highlights From PluggableTextEditorMorph. Instance Variables acceptOnCR: acceptOnFocusChange: autoAccept: editView: selectionColor: acceptOnCR - xxxxx acceptOnFocusChange - xxxxx autoAccept - xxxxx editView - xxxxx selectionColor - xxxxx ! Used by PluggableTextEditorMorph to specify a plain TextEditor for the editor ! Single-line text field editor with DialogWindow key integration (return for default, escape for cancel) and keyboard focus navigation (tab/shift-tab).! I represent a text selection attribute that can be added to a text for a text emphazing (text color). I have a color block (colorBlock) which is evaluated in order to get the text color. I have three instances, one for the primary selection and the two others for the secondary selection and the find replace selection. PrimarySelection is used in TextEditor>>#storeSelectionInParagraph in order to emphasize the selection text if the selection text color setting is not nil. SecondarySelection and FindReplaceSelection are manage by MultiNewParagraph if secondary selection text and find replace selection text colors are not nil. Instance Variables colorBlock: colorBlock - The block which is evaluated in order to get the text color ! A TextSpec is a spec used to describe a text area! A TextStopConditions is a private helper class for text composition (See class CharacterScanner and subclasses). It maps some characters controling the text layout (like carriage return, line feeds, space and tabulation) to some selector representing the action to be performed by the CharacterScanner. By default, a TextStopConditions does not map any action to control character; instances must be properly initialized by sending #at:put: messages. For example, inter-word spacing can be adjusted so as to obtain "justified" paragraphs. See implementors of #paddedSpace, #cr, #space, #columnBreak for example of special character actions. A TextStopConditions also store two selectors for mapping the actions to be taken when: - end of run is encountered; - text overflows horizontal composition bounds. These actions are by default #endOfRun and #crossedX (see implementors of these messages), but can enventually be changed using #endOfRun: and #crossedX:. In a text (see class Text), the "runs" are used to store text style attributes, so an "end of run" event probably means some action in the textcomposer should be taken to change the font. TextStopConditions current implementation can only map 256 character codes (from 1 to 256). It is the composer responsibility to encode the character before sending #at:. Presumably, the composer will use the character codePoint + 1 (see implementors of #codePoint). If this is not sufficient, then this class could be changed to use a Dictionary or a LargeTable Historically, the EndOfRun and CrossedX were two TextConstant of value 257 and 258, which did occupy corresponding slots in the stops array. Since these are valid character codePoint, this usage has been deprecated. However, because any error in text composition would have catastrophic consequences (unresponsive user interface), backward compatibility with obsolete historical code is still maintained internally which is why the stops array has a sze of 258. Instance Variables crossedX: endOfRun: stops: crossedX - selector to perform when the composed text overflows X composition bound endOfRun - selector to perform at end of run stops - an array mapping character code (codePoint + 1) to special actions, or nil if character is to be rendered normally ! I'm a Stream of Text objects. ex: |ts| ts := TextStream on: (Text new: 50). ts nextPutAll: 'I ' asText. ts nextPutAll: 'love' asText allBold. ts nextPutAll: ' Pharo'. TextMorph new newContents: ts contents; openInWindowLabeled: 'TextStream test'! A textStyle comprises the formatting information for composing and displaying a unit (usually a paragraph) of text. Typically one makes a copy of a master textStyle (such as TextStyle default), and then that copy may get altered in the process of editing. Bad things can happen if you do not copy first. Each of my instances consists of... fontArray An array of StrikeFonts fontFamilySize unused lineGrid An integer; default line spacing for paragraphs baseline An integer; default baseline (dist from line top to bottom of an 'a') alignment An integer; text alignment, see TextStyle alignment: firstIndent An integer; indent of first line in pixels restIndent An integer; indent of remaining lines in pixels rightIndent An integer; indent of right margin rel to section tabsArray An array of integers giving tab offsets in pixels marginTabsArray An array of margin tabs leading An integer giving default vertical line separation For a concrete example, look at TextStyle default copy inspect! I'm a text attribute used to encode an URL.! Some extra icons in the vein of MenuIcons.! Configurable basic settings for themes.! I represent a 32-bit register. An instance of me can hold any non-negative integer in the range [0..(2^32 - 1)]. Operations are performed on my contents in place, like a hardware register, and results are always modulo 2^32. This class is primarily meant for use by the SecureHashAlgorithm class. ! I'm an output device. Ultimately I can replace TranscripterStream since I'm thread safe and TranscripterStream. ThreadSafeTranscript can be installed as the default transcript using ThreadSafeTranscript installThreadSafeAsTranscript It can be installed as another Transcript accessible using STranscript ThreadSafeTranscript installThreadSafeAsSTranscript ! A button morph with separate images for on, off, and pressed with the mouse. When the event actWhen occurs, send actionSelector with 'arguments' to target. For other events, default to my eventHandler. The current event is not supplied in the arguments to the actionSelector. image (a.k.a. onImage) may not be nil. offImage and pressedImage may be nil. nil there means be transparent and show the underlying object. Tools for debugging: Display the images momentarily under program control (for positioning) (self is an instance). self state: #on. self state: #off. self state: #pressed. self state: #off. Display a rectangle where the button is. Display fillWithColor: bounds + (self world viewBox origin). self invalidRect: bounds.! A ThumbnailImageMorph is variant of Lex Spoon's CDScreenShotMorph. It displays a thumbnail of the image stored in imagePopupMorph. As a super class of PopupThumbnail morph it is meant to be a thumbnail w/o the popup action. Basicly it provides a scalable thumbnail with the usual morph event behaviors. A menu item allows for "photographing" any morph on the screen to become the subject of our images. Instance Variables imagePopupMorph: image: desiredExtent isPopup imagePopupMorph - an ImageMorph containing the full sized image. - it can be set from a morph image via the sight target menu item. image - holds the scaled thumbnail form of our imagePopupMorph image. desiredExtent - holds the desired extent that the thumbnail is expected to fit within. - it is guarded to be positive and non-zero. - it can be set by extent: so that the yellow halo handle works. isPopup - true when popup feature is on. - toggled from red halo menu Setting the size of the thumbnail works somewhat excentrically because the extent of the thumbnail depends both on the desiredExtent and the aspect ratio of the current popup image. With the popup feature off this morph can be picked up and dropped with the mouse. When the feature is on, a full sized snapshot will be seen when the mouse is pressed. Since the mouse can't be used for two things at once, moving the morph must be done with the grab halo or brown move halo.! A Morph that views another morph, its objectToView.! A TickDialogWindow is a dialog window which contains a TickList where user can pick a list of items. self example! A TickSelectionCheckboxButtonMorph is the button hidden into the TickSelectionCheckboxMorph! A TickSelectionCheckboxMorph is a checkbox which propagate a bit more the events! A TickSelectionListMorph is used to render the tick list storeValue - xxxxx ! A TickSelectionListNode is node for the tree used to render the tick list selected - xxxxx ! A TickSelectionListNodeMorph is the morph used to render the tree used to render te tick list! This represents a particular point in time during any given day. For example, '5:19:45 pm'. If you need a point in time on a particular day, use DateAndTime. If you need a duration of time, use Duration. ! TimeProfiler is a graphical front end of MessageTally. It gives nice facilities to navigate and browse a profile. Use examples: TimeProfiler new open TimeProfiler new openOnBlock: [SimpleGridExample new open] TimeProfiler new openOnBlock: [ClassTreeExample new openOn: Object] MessageTally spyAllOn: [ClassTreeExample new openOn: Object]! A TimeProfilerNode represents a node in the tally tree! This represents a duration of 0 length that marks a particular point in time.! A TimeStampMessageConverter is a wrapper wich display the timestamp of the provided message! This is the unit test for the class TimeStamp.! This is the unit test for the class Time. ! TimeZone is a simple class to colect the information identifying a UTC time zone. offset - Duration - the time zone's offset from UTC abbreviation - String - the abbreviated name for the time zone. name - String - the name of the time zone. TimeZone class >> #timeZones returns an array of the known time zones TimeZone class >> #default returns the default time zone (Grenwich Mean Time)! I am signalled by #duration:timeoutDo: if the receiving block takes too long to execute. I am signalled by a watchdog process spawned by #duration:timeoutDo: and caught in the same method. I am not intended to be used elsewhere.! I represent a duration starting on a specific DateAndTime. ! I am one of several Sunit test Cases intentended to provide complete coverage for the Chronology set of classes as part of the external testing. See DateAndTimeEpochTestCase for a complete list. tlk. My fixtures include a Timespan that crosses over a year boundary: aDate = December 25, 2004, midnight aDuration = 91 days aTimeSpan= 91 days, starting December 25, 2004, midnight! I am one of several Sunit test Cases intentended to provide complete coverage for the Chronology set of classes as part of the external testing. See DateAndTimeEpochTestCase for a complete list. tlk. My fixtures are: aDate = January 8, 2003, midnight aDuration = 91 days aTimeSpan= 91 days, starting January 8, 2003, midnight ! A ToogleIconicButton is an iconic button with two different images, one when the button is activated, one when it is desactivated. Not really usefull since there is PluggableThreePhaseButtonMorph! A menu item that supports on/off state (using standard icons), enablement and display of "accelerator" key text.! I am a filter for a token. If a node item contains my token I accept it! A non user-moveable docking bar that uses theme-based fill styles.! I am serving as a system-wide hub for various tools. Instead of using direct class names for tools, which is not always nice because can introduce inter-package dependencies, i provide a uniform way for accessing tools, via Smalltalk global: Smalltalk tools someToolName, where 'someToolName' is a name of the tool , under which some tool are registered. Tools are adding themselves to registry by implementing #registerToolsOn: message at class side, for example: MyClass>>registerToolsOn: registry registry register: self as: #myTool Registers a MyClass as a tool under name #myTool, and can be accessed via: Smalltalk tools myTool and avoid putting 'MyClass' reference into code. You can add ' self registerToolsOn: Smalltalk tools ' in class #initialize, so your new tool(s) can be registered during package loading. To reset tool registry to defaults , use: Smalltalk resetTools. Also registry storing a map of inspector types. This is to replace an old scheme which using #inspectorClass , and introducing dependencies. Now, an inspecting class dont needs to have any knowledge about its specialized inspector. Instead, a specialized inspector could tell registry that it is available for inspecting instances of given class (see #registerInspector:for: senders). This allows to avoid dependency from instance class to its inspector class or using extension methods. WARNING: The point of the tools registry is NOT to be a facade full of protocols but to be a registration for tools that get loaded. So, the tools registry should NOT hold specific tool's protocol. the tool's client should invoke the correct methods of the tool. ----------- The category 'menu' is for backward compatibility with ToolSet. We should remove it. ! I am the handle in the left top of windows used for resizing them.! I am the handle in the right top of windows used for resizing them.! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! Each trait in the system is represented as an instance of me. Like Class, I concretize my superclass by providing instance variables for the name and the environment. Since traits do not define variables, I not provide facilities for pool variables. However, I declare an instance variable to hold the associated classtrait, which is an instance of the class ClassTrait. ! See comment of my superclass TraitTransformation.! I declare the instance variables methodDict, traitComposition and localSelectors that normally would be defined on PureBehavior (see class comment of PureBehavior). Furthermore I keep track of where I am used and I provide compatibility methods to make me useable in tools where originally a class was expected.! I hold a collection of trait transformations and provide important facilities to query the trait composition. For each trait in the composition clause there exists exactly one transformation in the collection. Note, that directly manipulating the composition of a class or trait does not effect changes automatically. Use PureBehavior>>setTraitComposition: to do this. You have to make a copy of the old trait composition before changing it because only the difference between the new and the old composition is updated!!! Signal invalid trait compositions.! I add a number of facilities (most defined by traits which are also used in ClassDescription): Category organization for methods The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. Copying of methods to other traits/classes Operators to create trait compositions! General exception used for example to signal invalid trait compositions! See comment of my superclass TraitTransformation.! Used by TraitComposition to encapsulates a collection of methods for one particular selector when querying for changes. According to the number and kind of those methods a provided method exists, there is a conflict or there are no provided nor conflicting methods at all. I provide the interface to query for those situations, e.g., effectiveMethod returns the provided method or the conflict marker method. ! A trait transformation is an instance of one of my concrete subclasses, TraitAlias or TraitExclusion. These represent a transformation of a trait, specified by the alias and exclusion operators. I define an instance variable named subject which holds the object that is transformed. Thus, an alias transformation has as its subject a trait, and a trait exclusion has as its subject either a trait alias or a trait. Each of the concrete transformation classes implement the method allSelectors according to the transformation it represents. (There was formerly a subclass called TraitHolder, which was the identity transformation and which did not modify the trait. This was clearly redundant, and was removed.)! Transcripter is a dog-simple scrolling stream with display. It is intended to operate with no support from MVC or color in a minimal, or headless version of Pharo. No attention has been paid to appearance or performance. type exit (without quote) to exit the evaluator type revert (without quote) to revert the last changes. Transcripter askForEmergencyEvaluatorOrExitWithText: 'Emergency Evaluator' Transcripter emergencyEvaluator! This is a Morph that is used to visually indicate the progress of a drag operation, and also as a container for various bits of drag state information. It polls the shift state in its step method to update its copy state (shift pressed = should copy). And if you hit the Escape key while dragging, it aborts the drag operation.! A TransformMorph introduces a 2-D transformation between its (global) coordinates and the (local) coordinates of its submorphs, while also clipping all display to its bounds. Specifically, with no offset, angle or scaling, a submorph with coordinates (0@0) will appear exactly at the topLeft of the windowMorph (its position). Rotation and scaling are relative to the local origin, (0@0). instance var type description transform MorphicTransform The coordinate transform between my coordinates and the local coordinates of my submorphs. smoothing anInteger in 1..3 Perform smoothing of my contents during drawing 1 No smoothing (#smoothingOff) 2 Smoothing w/ edge adjacent pixels (#smoothingOn) 3 Smoothing w/ edge and corner adj pixels localBounds Rectangle or nil caches the value of #localSubmorphBounds for performance TransformMorphs operate with two different display strategies, depending on whether the transformation is a pure translation or not. If so, then they simply use a clipping canvas and display their submorphs with the appropriate offset. If the transformation includes scaling or rotation, then a caching canvas is used, whose active area covers the fullBounds of the submorphs intersected with the source quadrilateral corresponding to the window bounds.! A transform morph that allows the use of a layout policy to arrange submorphs.! A TransformWithLayoutMorphExpander is a layout which expand its submorph. I am designed for having only one submorph !! I am really specific to the multi source code widget! A TransformationMorph is like a transformMorph, except that it does not clip, and its bounds include its entire submorph. TransformationMorphs are assumed to have only one submorph -- the idea is that it is a wrapper that enables its submorph to scale and rotate. A TransformationMorph may come to have more than one submorph if, eg, a menu sprouts a sub menu, using the transformationMorph temporarily as its world, but this ability is only sparsely supported (as in layoutChanged). See TransformationMorph class example1 method.! A TranslucentColor behaves just like a normal color, except that it will pack its alpha value into the high byte of a 32-bit pixelValue. This allows creating forms with translucency for use with the alpha blend function of BitBlt. An alpha of zero is transparent, and 1.0 is opaque.! A SimpleHierarchicalListMorph subclass supporting alternative fonts for all items.! A TreeModel is a spec model of a Tree ;)! A TreeSpec is a spec used to describe a tree! True defines the behavior of its single instance, true -- logical assertion. Notice how the truth-value checks become direct message sends, without the need for explicit testing. Be aware however that most of these methods are not sent as real messages in normal use. Most are inline coded by the compiler as test and jump bytecodes - avoiding the overhead of the full message sends. So simply redefining these methods here will have no effect.! This class represents the Unicode conversion table from/to the domestic encodings and Unicode. ! UIManager is a dispatcher for various UI requests.! All instances of UITestCase are skipped in headless mode.! Common superclass for User Interface themes. Provides methods for creating new morphs in a standard way, various "services" like a file dialog, message dialogs etc. and also methods for customising aspects of the appearance of various morphs. Though conceptually abstract, no code is "missing". Subclasses, therefore, should override the aspects they wish to change. UITheme exampleBasicControls UITheme exampleBuilder UITheme exampleColorControls UITheme exampleDialogs UITheme exampleGroups UITheme exampleOtherControls UITheme exampleWindowWithToolbars! A Vista-style UI theme. Do UIThemeVistary beCurrent to use.! An OSX-style UI theme. Do UIThemeWatery beCurrent to use.! An URLPlugin is a plugin which shows the URL of the current navigation! Text converter for UTF-16. It supports the endianness and byte order mark. The default is to not use a BOM, make sure to set this if using the converter to write to a location where encoding metadata is not present / specified by the protocol. This usually means you want to write one when storing strings to files on disk, but not when transmitting encoded string to a web client, nor when sending data to a database.! An UTF8DecomposedTextConverter converts from decomposed UTF8 using the UnicodeCompositionStream. Instance Variables ! Text converter for UTF-8. Since the BOM is used to distinguish the MacRoman code and UTF-8 code, BOM is written for UTF-8 by #writeBOMOn: which is called by client.! A class to generate UUID by John M McIntosh johnmci@smalltalkconsulting.com See http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt If a plugin does not exist then we generate a UUID version 4 type GUUID! This class generates a pseudo-random UUID by John M McIntosh johnmci@smalltalkconsulting.com See http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt! A UlysseTheMonkey is an intergalactikal monkey who is coming from outer space to check the fix proposed in the google issue tracker. Do NOT mess with Ulysse !!!!! I describe the behavior of my sole instance, nil. nil represents a prior value for variables that have not been initialized, or for results which are meaningless.! This is the unit test for the class UndefinedObject. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! An UndoRedoGroup is a composite node of an history tree. It is made to allow redoing or undoing of several commands in one shot. See for example its use to record all text replacement when a "replace all" is performed from a FindReplaceService (see TextEditor>>replaceAll: with: startingAt:) Instance Variables ! An UndoRedoRecord is a leaf of an history tree. It holds undo and redo commands. Such a command is represented by a MessageSend. Instance Variables redoMessage: undoMessage: redoMessage - The command which is performed for redoing undoMessage - The command which is performed for undoing ! I am the ultimate error. By default if an Error or Exception is not handled by the code the default action is to raise an UnhandledError which in interactive mode triggers the UIManager to open a debugger. Error signal ... UnhandledError signalForException: error ... UIManager opens a debugger ! This class holds the entry points for the utility functions around characters. ! The Unix vm does not do line-ending conversion, thus this subclass which specifies we convert CR's to LF's when pasting to it! I am a an object representing a Unix platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! I am an expert on Unix filesystem conventions. I resolve origins according to these conventions.! I'm a specific store for Unix file systems! An UnlockedKeyChain is a keychain with no password. It stores values that anyone can access! Ceci n'est pas une modifications. I am used to migrate non modified fields from the old to the new instance. Typically I am used when only certain fields are modified and others are left as is.! Just a class for testing! I'm a little class inspired heavily from Utilities that download update.list and launch update. you can tell me to update throw a given number of update or to be verbose. UpdateStreamer new beVerbose; updateFromServer This will update all the updates available and show up dialogs ! A menu item whose textual label and whose enablement are updatable. The wordingProvider provides the current wording, upon being being sent the wordingSelector. The item can also dynamically update whether or not it should be enabled; to do this, give it an enablementSelector, which is also sent to the wordingProvider..! A menu updating itself! A StringMorph that constantly tries to show the current data from the target object. When sent #step, it shows what the target objects has (target perform: getSelector). When edited (with shift-click), it writes back to the target. floatPrecision = 1. to round to integer. floatPrecision = .1 to round to 1 decimal place, etc. Even when ((target isNil) or: [getSelector == nil]), the user would still like to edit the string with shift-click.! A Uniform Resource Locator. It specifies the location of a document on the Internet. The base class is abstract; child classes break different types of URLs down in ways appropriate for that type.! This is the unit test for the class Url. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! An UserEditor is a GUI for editing a user profile! An UserInterruptHandler watches incoming input events and checks for the user interrupt key. If encountered it interrupts the current process and opens a notifier.. Instance Variables interruptKey: interruptKey - definition of the user interrupt key ! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! I am an sunit test for SystemNavigation.! An UsernamePassword is just a simple wrapper! self runDemo ! I convert low-level terminal inputs, like mouse report or a key command.! I convert high-level terminal commands like moving the cursor or setting the color to characters sequences understood by the terminal. Furthermore I do some bookkeeping to reduce the number of characters sent to the terminal.! A ValueChanged is an announcement raised when a value of a NewValueHolder is changed! A ValueLink is a Link containing a Value. Adding an object to a LinkedList which is not a Link will create a ValueLink containing that object. value - The object this link points to.! I am ValueNotFound, an exception indicating that a value was not found in a Dictionary.! I am the default layout for variable sized objects such as Array. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional fields which can be accessed with an index.! I am a parse tree leaf representing a variable. Note that my name and key are different for pool variables: the key is the Object Reference.! I am an error that is triggered when a variable not defined in a context is called. It is catched in case of a DoIt because there you don't need to declare temporaries.! VersionsBrowser shows all the versions of a particular method, and lets you compare them, revert to selected versions, and so on.! A ViewHierarchyExplorer is specialized Explorer that works exclusively with morphs. It provides the user with a tree view of the Morph Composition Hierarchy and allows you to quickly identify a tree item with its corresponding morph by "flashing" the node in question. This tool facilitates the understanding of complex morph compositions. A View Hierarchy Explorer can be opened from the Halo Debug Menu > "explore view hierarchy", or simply send #ExploreViewHierarchy to any morph instance. try.. [World exploreViewHierarchy] and [OBPackageBrowser open exploreViewHierarchy]! I am test object used for a WeakRegistry test. I add myself to a given WeakRegistry and on finalization I modify the very same registry by removing myself from it.! I am exposing a various attributes of smalltalk virtual machine. The direct use of this class is not recommended. All attributes are normally should be accessed via Smalltalk vm someAttribute instead of VirtualMachine someAttribute ! Vistary theme specific icons.! This is a thread-safe implementation of a queue with wait-free operations. It is guaranteed that any message sent to my instance (like adding new item, or fetching item) will not block sender, nor enter a waiting loop. The implementation is based on atomicity of simple assignment operations, which can't be interrupted in a middle, i.e. two assignment statements in a row, like: x:=y. y:=z. can't be interrupted by interpreter and can be seen as a single atomic operation. This implementation fits best for case, when multiple threads populating queue, but only single thread fetching items from it. In given implementation, inserting new items into queue can't block the sender and insertion operation always takes constant time (if we ignore the possible GC interference here). For reading/polling operations queue using a lock mechanism, which indicating that queue currently in the middle of extraction, and therefore, if some thread obtained a lock upon the queue, other threads must wait till one that obtained the lock will finish its operation(s) and release the lock. All operations which may block the sender will answer the default value(s) instead. ! A Warning is a Notification which by default should be brought to the attention of the user.! WarpBlt is a little warp-drive added on to BitBlt. It takes a quadrilateral as its source specification, while its destination is traversed and combined just like any other call to copyBits. The source quadrilateral is specified as an array of points starting with the corner that wants to end up in the topLeft, and proceding to the successive points that want to follow CCW around the destination rectangle. Note that in specifying a plain old rectangle source, its non topLeft points must be actual pixels, not outside by 1, as with rectangle bottmRight, eg. See the method Rectangle asQuad. WarpBlt does a fast job of rotation, reflection and scaling, and it can even produce a semblance of perspective. Depth parameters are included for future improvements in this direction. but the primitve does not support this yet.! Watery theme specific icons.! A WeakAnnouncementSubscription is a subscription which is removed automatically when the subscriber is unreferenced. No support for ephemerons currently prevents this from working for Block actions (blocks hold their receiver, which is the default subscriber strongly). To switch between subscription types, use makeStrong/makeWeak on the subscription returned when initially registering with announcer. Note, that list and next must be first instance variables.! WeakArray is an array which holds only weakly on its elements. This means whenever an object is only referenced by instances of WeakArray it will be garbage collected.! IMPORTANT!!!!!! This class is a special object, recognized by VM. Its only purpose is to a) identify a special kind of objects who usually having a weak references but also having an instance of me held by first non-weak fixed slot (instance variable). b) a 'first' instance variable points to the head of a list of items, reported by VM which has weak references which became garbage during last garbage collection At my class side, there are some public behavior, which is used by finalization process to detect if VM supports new finalization scheme or should use the old one. Weak registry using #hasNewFinalization for switching to correct finalization logic, depending on VM it currently runs on. ! My instances is used by weak registry to hold a single weak reference and executor(s). Once object, referenced weakly by my instance become garbage, a weak registry triggers its execution by sending #finalizeValues to my instance. Note, that a new VM finalization scheme does not implies to use this particular class in order to implement finalization scheme. VM refers only to WeakFinalizationList class. In this way, my class and its implementation can serve as an example for implementing various finalization actions, which may differ from this one, provided by default for use by weak registry. Once initialized, my instance should: - point to particular list (an instance of WeakFinalizationList), - next should be nil - executor or multiple executors initialized - weak reference slot should point to some object of interest At the moment, when object, referenced weakly, become garbage, VM checks if its fist instance variable is an instance of WeakFinalizationList. If it so, then it adds a given object to this list, and also links the tail of list through 'next' instance variable. So, as a result of garbage collection, a list will contain all objects, which had weak references to garbage collected objects. It is a responsibility of application to manage the instances of WeakFinalizationList's , as well as clear this list before the next garbage collection. As a consequence of that you can: - use multiple different lists and manage them differently in order to react differently when some objects became garbage - you are not obliged to handle/clear the list(s) immediately after GC. You can clean up them periodically. - you can implement own kind of weak referencing object(s), which could use same finalization, provided by newer VMs. VM requires only that an object with weak reference having at least two instance variables, and its first instance variable points to instance of WeakFinalizationList. Everything else is optional. ! This class represents an identity dictionary with weak keys.! I am an association holding only weakly on my key.! I am a dictionary holding only weakly on my keys. This is a bit dangerous since at any time my keys can go away. Clients are responsible to register my instances by WeakArray such that the appropriate actions can be taken upon loss of any keys. As key may disappear at any time, my reported size may be greater than the number of keys encountered in iterations. See WeakRegistry for an example of use. Implementation notes: I am a set of WeakAssociations. Each WeakAssociation can be in one of three states: a key is present, or the key has been garbage-collected, or the association is expired (meaning that the value has also been released). During finalization, associations with no key expire, but I still keep them to avoid rehashing the entire set. When adding a new entry, the new entry can either go into a slot that is nil, or one that has an expired association. I keep a count of expired associations and rehash when there are too many (currently, if they account for more than 25% of the space).! This class represents an identity dictionary with weak keys, whose values are collections. Keys not in the dictionary are mapped to the empty collection. Conversely, if a collection becomes empty, the mapping can be removed to save time and space. However, because this requires re-hashing, it does not pay to do this to eagerly.! I am a special layout for weak variable sized objects such as WeakArray. I contain a fixed number of Slots plus. Instances of classes using this kind of layout have only a minimum given size. Instances have a custom number of additional weak fields which can be accessed with an index. References held in the variable part are held weakly and might be nilled out by the garbage collector at any time. References in the named section are held strongly as in the default layout.! Instances of WeakMessageSend encapsulate message sends to objects, like MessageSend. Unlike MessageSend it is not necessarily a valid mesage. A request to value only results in a send if infact it is valid. See MessageSendComments also. WeakMessageSend is used primarily for event regristration. Unlike MessageSend WeakMessageSend stoes receiver (object receiving the message send) as a the first and only element of its array as opposed to a named ivar. But like MessageSend, it does have selector Symbol -- message selector arguments Array -- bound arguments and it also has shouldBeNil Boolean -- used to ensure array of arguments is not all nils! I am just like an OrderedCollection except that I hold my objects weakly. In use, be aware that objects only referenced by me are not "removed" (like in OrderedCollection), but merely nilled. So guard against nils when iterating/accessing, and don't expect #size to represent the number of objects I hold. For more details, read my tests in WeakOrderedCollectionTest. ! This kind of WeakRegistry using a new VM feature, which allows a more robust finalization support. In contrast to old implementation, it doesn't spending linear time , checking what elements became garbage.! I'm a Set with weak elements. Implementation. flag is a special object that indicates that at a given slot the set has a free entry.! A verison of the SetInspector specialized for inspecting WeakSets. It knows about the flag object used to indicate empty locations in the hash table.! I am a wrapper around an Announcer, used to create weak subscriptions at subscription time. Use me like this: anAnnouncer weak subscribe: Announcement send: #foo to: barObject. I raise an error for block subscriptions, as they require non-existing Ephemeron support to function correctly.! I am a lookup key (acting like an association but) holding only weakly on my value.! I am a dictionary holding only weakly on my values. Clients may expect to get a nil value for any object they request.! I represent a week.! Part of an test resource to verify that super is well bound. See CompilerEvaluationTest! WideCharacterSet is used to store a Set of WideCharacter with fast access and inclusion test. Implementation should be efficient in memory if sets are sufficently sparse. Wide Characters are at most 32bits. We split them into 16 highBits and 16 lowBits. map is a dictionary key: 16 highBits value: map of 16 lowBits. Maps of lowBits are stored as arrays of bits in a ByteArray. If a bit is set to 1, this indicate that corresponding character is present. 8192 bytes are necessary in each lowmap. Empty lowmap are removed from the map Dictionary. A byteArrayMap is maintained in parallel with map for fast handling of ByteString. (byteArrayMap at: i+1) = 0 means that character of asciiValue i is absent, = 1 means present.! WideCharacterSetTest holds tests for WideCharacterSet! This class represents the array of 32 bit wide characters. ! This is the unit test for the class String. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! This class represents the symbols containing 32bit characters.! I am raised when a widget has been built! This help type extends the system with a wiki like help descriptions! I'm an HelpSystem builder which create an HelpSystem book from a wiki-like formatted string. !! Usage - Create a class-side method on the class you want to put documentation. - Add the pragma with the title of the book as parameter - The method should answer the documentation as a String (using Pier syntax. See http://www.piercms.com/doc/syntax ). !! Example MyClass class>>aMethod ^ ' !! Section 1 Some text for this section !!!! Subsection 1.1 !!!!!! Subsection 1.1.1 !!!! Subsection 1.2 !! Section 2'! I am a specialized OSEnvironment for Windows! I am a an object representing a Windows platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! Emitted when navigating between windows. ! This announcement is emitted when a window is collapsed, by pressing the '-' top left button of a window.! Window edge gripper allowing resizing of a window by a particular side.! I'm an event related to the host window, only dispatched to the World. ! This announcement is emitted when a window leaves a collapsed mode. This happens when you press on a window icon in the taskbar.! A WindowModel is a spec model for a Window! A WindowSpec is a spec used to describe a window! I am an expert on Windows filesystem conventions. I resolve origins according to these conventions.! I'm a specific store for Windows file systems! WordArrays store 32-bit unsigned Integer values. ! I am a raw data layout that holds words (32 / 64 bit depending on the platform).! This class is designed to be used as the container for morphs that are placed at absolute positions and is placed within a scroller. An example would be the background behind a page view in a word processor. Optimises #layoutChanged to not propagate to owner (assumed to be in a scroller).! WorkingCopyToolBar new openWithSpec! A Workspace is a text area plus a lot of support for executable code. It is a great place to execute top-level commands to compute something useful, and it is a great place to develop bits of a program before those bits get put into class methods. To open a new workspace, execute: Workspace open A workspace can have its own variables, called "workspace variables", to hold intermediate results. For example, if you type into a workspace "x := 5" and do-it, then later you could type in "y := x * 2" and y would become 10. Additionally, in Morphic, a workspace can gain access to morphs that are on the screen. If acceptDroppedMorphss is turned on, then whenever a morph is dropped on the workspace, a variable will be created which references that morph. This functionality is toggled with the window-wide menu of a workspace. The instance variables of this class are: bindings - holds the workspace variables for this workspace acceptDroppedMorphss - whether dropped morphs should create new variables! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld.! The state of a Morphic world. (This needs some serious commenting!!!!) The MinCycleLapse variable holds the minimum amount of time that a morphic cycle is allowed to take. If a cycle takes less than this, then interCyclePause: will wait until the full time has been used up.! I represent an accessor for a sequence of objects that can only store objects in the sequence.! I represent a year.! I am one of several Sunit test Cases intentended to provide complete coverage for the Chronology set of classes as part of the external testing. See DateAndEpochTestCase for a complete list. tlk. I have no fixtures but do make sure to restore anything I change.! I use the zlib implementation of the deflate algorithm to compress a ByteArray. According to Wikipedia, "this algorithm provides good compression on a wide variety of data with minimal use of system resources." See http://en.wikipedia.org/wiki/DEFLATE for details on the deflate algorithm. This is how you get a compressed ByteArray from your input: zipStream := ZLibWriteStream on: (ByteArray new). zipStream nextPutAll: myByteArray; close. compressed := zipStream encodedStream contents.! I am ZdcAbstractSSLSession, an object managing the secure communication between two parties. I define the abstract interface for my subclasses. More specifically, I handle connection setup handshaking as well as the encryption and decryption of data travelling between two parties. Apart from instanciating and later explicitely destroying me, I am used by feeding data into me using the methods in my operations protocol. These might result in data that has to be sent to the other side. I am propably too primitive to be used directly, see ZdcSecureSocketStream for a higher level client.! I am ZdcAbstractSocketStream, a binary read/write stream for socket communication. Interally, IO is done through a read and a write ZdcIOBuffer. I am abstract, my subclasses should implement actual IO through a delegate.! ZdcAbstractSocketStreamTests holds units tests for socket streams. This is an abstract class, subclasses should implement #socketStreamClass ! I am ZdcIOBuffer. I manage a fixed SequenceableCollection buffer for simultaneous input and output. I maintain a readPointer and a writePointer. When data is written to me, it is stored at the end, past my writePointer. When data is read from me, it is retrieved from the front, past my readPointer. Invariant: readPointer <= writePointer My valid contents for reading is defined from contentsStart to contentsEnd, from readPointer + 1 to writePointer. Data can be added to the free space defined from freeSpaceStart to freeSpaceEnd, from writePointer + 1 to the buffer's' size. There can be a gap at my front. Compacting moves data if necessary to make (more) room at the end.! ZdcIOBufferTests holds unit tests for ZdcIOBuffer.! I am ZnOptimizedSocketStream. I am a ZdcSimpleSocketStream. I re-implement the critical operations dealing with bulk input and output more efficiently to work with buffer sized chunks, bypassing #next and #nextPut:! ZdcOptimizedSocketStreamTests tests ZdcOptimizedSocketStream! I am ZdcPluginMissing, signaled when a plugin required by Zodiac is missing. You can find more information on Zodiac's website http://zdc.stfx.eu! I am ZdcPluginSSLSession, an object managing the secure communication between two parties. I am a ZdcAbstractSSLSession. I am a wrapper for the SqueakSSL plugin. I am probably too primitive to be used directly, see ZnSecureSocketStream for a higher level client. Ackowledgement: based on the original SqueakSSL code.! ZdcReferenceSocketStreamTests test the reference SocketStream in the image! I am ZdcSecurePOP3Client. I open a ZdcSecureSocketStream to the POP3 server and connect it at the SSL level. ZdcSecurePOP3Client retrieveMessagesFromGMailAccount: '@gmail.com' password: '' limit: 5.! I am ZdcSecureSMTPClient. I open a ZdcSecureSocketStream to the SMTP server and connect it at the SSL level. | mailMessage | mailMessage := MailMessage empty. mailMessage setField: 'subject' toString: 'ZdcSecureSMTPClient Test'. mailMessage body: (MIMEDocument contentType: 'text/plain' content: 'This is test from Pharo Smalltalk'). ZdcSecureSMTPClient sendUsingGMailAccount: '@gmail.com' password: '' to: '' message: mailMessage! I am ZdcSecureSocketStream, a binary read/write stream for SSL communication. I am a ZdcOptimizedSocketStream. When I am used as a client, call #connect on me before using me as a normal stream. When I am used as a server, call #accept on me before using me as a normal stream. Currently, certificate management is ignored. ! ZdcSecureSocketStreamTests tests ZdcSecureSocketStream ! I am ZdcSimpleSocketStream. I am a ZdcAbstractSocketStream. I do a minimal implementation of the requirements defined by my superclass. I rely on the rather inefficient implementation of my superclass' methods, funneling all access through #next and #nextPut.! ZdcSimpleSocketStreamTests tests ZdcSimpleSocketStream! I am ZdcSocketStream. I am a ZdcOptimizedSocketStream. I further optimize my superclass' methods dealing with bulk input and output to transparently bypass the internal buffers when this makes sense.! ZdcSocketStreamTests tests ZdcSocketStream! I am ZeroDivide, an ArithmeticError that may be signaled when a mathematical division by 0 is attempted.! A ZipArchive represents an archive that is read and/or written using the PKZIP file format. ZipArchive instances know how to read and write such archives; their members are subinstances of ZipArchiveMember.! Subinstances of me are members in a ZipArchive. They represent different data sources: * ZipDirectoryMember -- a directory to be added to a zip file * ZipFileMember -- a file or directory that is already in a zip file * ZipNewFilemember -- a file that is to be added to a zip file * ZipStringMember -- a string that is to be added to a zip file They can write their data to another stream either copying, compressing, or decompressing as desired.! This class defines magic numbers taken from RFC1951 [1b], and also possibly RFC1950 [1a] & RFC1952 [1c]. It presets some dictionary structures as described at [1a] 8.1. A class can import these bindings as 'class variables' by including the following in its class definition: poolDictionaries: 'ZipFileConstants' Following are source references to these constants contained within several class side initialization methods. (These might be better spread through out those methods as time permits) initializeDeflateConstants WindowSize [2e]"w_size", [2a]"windowBits is the base two logarithm of windowSize where default windowBits=15" WindowMask [2e]"w_mask" MaxDistance [2e]"MAX_DIST" MinMatch [2c] MaxMatch [2c] HashBits [2e]"hash_bits" HashMask [2e]"hash_mask" HashShift [2e]"hash_shift" initializeDistanceCodes BaseDistance [2f] DistanceCodes [2f] initializeExtraBits ExtraLengthBits [1]3.2.5, [2b] ExtraDistanceBits [1]3.2.5, [2b] ExtraBitLengthBits [2b] BitLengthOrder [1]3.2.7, [2b] initializeFixedTrees [1]3.2.6 initializeWriteStreamConstants MaxBits [2d] MaxBitLengthBits [2b] EndBlock [2b] StoredBlock [2c] FixedBlock [2c] DynamicBlock [2c] [1]3.2.3"BTYPE" NumLiterals MaxLengthCodes [2e] MaxDistCodes [2e] MaxBitLengthCodes [2e] MaxLiteralCodes Repeat3To6 [2b] Repeat3To10 [2b] Repeat11To138 [2b] [1a] "ZLIB Compressed Data Format Specification version 3.3" http://www.ietf.org/rfc/rfc1950.txt [1b] "DEFLATE Compressed Data Format Specification version 1.3" http://www.ietf.org/rfc/rfc1951.txt [1c] "GZIP file format specification version 4.3" http://www.ietf.org/rfc/rfc1952.txt [2] ZLIB Source Code http://zlib.net/zlib-1.2.5.tar.gz [2a] zlib.h [2b] trees.c [2c] zutil.h [2d] inftrees.c [2e] deflate.h [2f] trees.h ! ZipFileMember instances represent directories inside ZipArchives. They don't do much other than hold names and permissions (and extra fields). You can add files in subdirectories to a ZipArchive without using any ZipDirectoryMembers.! ZipEncoderNode represents a node in a huffman tree for encoding ZipStreams. Instance variables: value - Encoded value frequency - Number of occurences of the encoded value height - Height of the node in the tree bitLength - bit length of the code code - Assigned code for this node parent - Parent of this node left - First child of this node right - Second child of this node ! ZipEncoderTree represents a huffman tree for encoding ZipStreams. Instance variables: bitLengths - Bit lengths of each generated code codes - Codes for each value maxCode - Maximum value with non-zero frequency! This class defines magic numbers taken from the PKWARE ZIP Application Note [1] approved by ISO/IEC JTC 1/SC 34 N 1621 in July 2011 [2] to be the international normative reference for the zip file format. A class imports these bindings as 'class variables' by including the following in its class definition: poolDictionaries: 'ZipFileConstants' There is a single method on the class side to initialise the values. [1] http://www.pkware.com/documents/casestudies/APPNOTE.TXT [2] http://www.itscj.ipsj.or.jp/sc34/open/1621.pdf Following are pertinent extracts from the PKWARE ZIP Application Note.... All values are stored in little-endian byte order unless otherwise specified. A. local file header signature 4 bytes (0x04034b50) C. Data descriptor: crc-32 4 bytes compressed size 4 bytes uncompressed size 4 bytes F. central file header signature 4 bytes (0x02014b50) I. end of central dir signature 4 bytes (0x06054b50) J. Explanation of fields: * version made by (2 bytes) 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) 3 - UNIX 1,2,4-20 not implemented * compression method: (2 bytes) 0 - The file is stored (no compression) 6 - The file is Imploded 8 - The file is Deflated 1-7,9-19,97,98 not implemented * For Methods 8 and 9 - Deflating Bit 2 Bit 1 0 0 Normal (-en) compression option was used. 0 1 Maximum (-exx/-ex) compression option was used. 1 0 Fast (-ef) compression option was used. 1 1 Super Fast (-es) compression option was used. * internal file attributes: (2 bytes) Bits 1 and 2 are reserved for use by PKWARE. The lowest bit of this field indicates, if set, that the file is apparently an ASCII or text file. If not set, that the file apparently contains binary data. Note the following do not appear in the PKWARE ZIP Application Note. Should they be defined elsewhere? "Unix permission bits" DefaultDirectoryPermissions := 8r040755. DefaultFilePermissions := 8r0100666. DirectoryAttrib := 8r040000. FileAttrib := 8r0100000. ! ZipNewFileMember instances are used to represent files that have been read from a ZipArchive. Their data stays in the file on disk, so the original Zip file cannot be directly overwritten.! ZipNewFileMember instances are used to represent files that are going to be written to a ZipArchive. Their data comes from external file streams.! ZipReadStream is intended for uncompressing the compressed contents of Zip archive members. Since Zip archive members keep their expected CRC value separately in Zip headers, this class does not attempt to read the CRC from its input stream. Instead, if you want the CRC verification to work you have to call #expectedCrc: with the expected CRC-32 value from the Zip member header.! I'm a specific store for Zip file systems! ZipStringMember instances are used to represent files that are going to be written to a ZipArchive. Their data comes from in-image strings, though.! I am ZnApplicationFormUrlEncodedEntity, a concrete HTTP Entity holding a set of fields (key value pairs) that is form URL encoded. I am a ZnEntity. Part of Zinc HTTP Components.! I am ZnBase64Encoder. Base64 encoding is a technique to encode binary data as a string of characters that can be safely transported over various protocols. Basically, every 3 bytes are encoded using 4 characters from an alphabet of 64. Each encoded character represents 6 bits. The most commonly used alphabet is 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'. One or two equal signs (= or ==) are used for padding. The encoded data can optionally be broken into lines. Characters not part of the alphabet are considered as white space and are ignored. My #encode: method works from ByteArray to String, while my #decode: method works from String to ByteArray. Note that to encode a String as Base64, you first have to encode the characters as bytes using a character encoder. See also http://en.wikipedia.org/wiki/Base64 Part of Zinc HTTP Components.! I am ZnBasicAuthenticator. I help servers handle HTTP Basic Authentication. I implement the required #authenticateRequest:do: I have a credentials dictionary with username->password associations. Part of Zinc HTTP Components.! I am ZnBasicCredential, a concrete subclass of ZnCredential. I implement basic HTTP authentication. I hold a username and password. Part of Zinc HTTP Components.! I am ZnBivalentWriteStream, wrapping another write stream. I allow both Characters and Strings as well as Integers (0 to: 255) and ByteArrays to be writtten to me. The write stream that I wrap can be both binary as well as character based. Part of Zinc HTTP Components.! I am ZnBufferedReadStream. I wrap another ReadStream and add efficient buffering for the typical access pattern of parsers: sending lots of #next, #peek and #atEnd messages. By design I do not implement #position and #position: or anything based on that. I can wrap both binary or character streams and act accordingly. Part of Zinc HTTP Components.! I am ZnBufferedReadStreamTests.! I am ZnBufferedWriteStream. I wrap a write stream and add buffering. Make sure to always send me #flush or #close when you're done, otherwise the last buffer might not yet have been written. My class side's #on:do: helps to ensure this. I can wrap both binary or character streams and act accordingly. Part of Zinc HTTP Components.! I am ZnByteArrayEntity, a concrete HTTP Entity based on a ByteArray. It is used to hold binary (non textual) data. I am a ZnEntity. Part of Zinc HTTP Components.! I am ZnByteEncoder, a concrete subclass of ZnCharacterEncoder. I handle single byte encodings where byte values 0 to 127 map to ASCII and 128 to 255 are a permutation to Unicode characters. I derive my mappings by parsing official unicode.org specifications. Part of Zinc HTTP Components.! I am ZnCharacterEncoder, I encode and decode Character objects to and from a binary stream. I am an abstract class with following protocol: #nextFromStream: #nextPut:toStream: #encodedByteCountFor: The first two are compatible with TextConverter and subclasses. I add some convenience methods: #encodeString: #decodeBytes: #encodedByteCountForString: Contrary to older encoders, I work strictly from strings to bytes and vice versa and I will throw errors instead of silently ignoring them. Part of Zinc HTTP Components.! I am ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding characters. Part of Zinc HTTP Components! I am ZnCharacterReadStream. I wrap another binary ReadStream and use a ZnCharacerEncoder to allow Characters to be read. I am not positionable, but I do allow a one character peek using a one character internal buffer. Part of Zinc HTTP Components. ! I am ZnCharacterWriteStream. I wrap another binary WriteStream and use a ZnCharacerEncoder to allow Characters to be written. Part of Zinc HTTP Components.! I am ZnChunkedReadStream, implementing HTTP 1.1 chunked transfer encoding on a wrapped streams. Clients should read me until I am atEnd. After I am completely read, I can tell you my totalSize and optional extraHeaders. Part of Zinc HTTP Components.! I am ZnChunkedWriteStream, I wrap another write stream and add HTTP 1.1 chunked transfer encoding. I write a chunk for each #nextPutAll: or #next:putAll:startingAt: I should be wrapped in a ZnBufferedWriteStream for #next: to work. When done, send #close or #finish to me. Part of Zinc HTTP Components. ! I am ZnClient, an object to build, execute and process HTTP client requests. I have a rich protocol to construct requests and to access responses. I have various error handling options. I can reuse an existing connection to a specific host:port. I handle sessions, cookies, redirects and authentication. I have many options (settings) with sensible defaults. Simplest possible invocation: ZnClient new get: 'http://zn.stfx.eu/zn/numbers.txt'. Using some features to make a better HTTP request: ZnClient new systemPolicy; accept: ZnMimeType textPlain; http; host: 'zn.stfx.eu'; path: 'zn/numbers.txt'; contentReader: [ :entity | entity contents lines collect: [ :each | each asNumber ] ]; ifFail: [ :exception | self inform: 'I am sorry: ', exception printString ]; get. Part of Zinc HTTP Components.! I am ZnConnectionTimeout. I am a DynamicVariable and a ProcessSpecificVariable. I can be used to modify the global default socket IO timeout on a per process basis, for example: ZnConnectionTimeout value: 5 during: [ ^ ZnClient new get: 'http://zn.stfx.eu/zn/small.html' ]! I am ZnConstants, holding various constants that we use. Part of Zinc HTTP Components.! I represent an HTTP Cookie token. Part of Zinc HTTP Components.! I represent a container for storing HTTP Cookies for a client session. Part of Zinc HTTP Components.! I am ZnCredential, an abstract class representing credentials in a domain and realm. Part of Zinc HTTP Components.! I am ZnSignalProgress. I am a DynamicVariable and a ProcessSpecificVariable. I hold a reference to the current ZnServer instance during HTTP processing, during the dynamic scope of #handleRequest:! I am ZnSignalProgress. I am a ProcessLocalVariable and a ProcessSpecificVariable. I hold a reference to the current ZnServerSession instance during HTTP processing, during the dynamic scope of #handleRequest: ZnServerSessions are created lazily. ! I am ZnDefaultServerDelegate. I function as a delegate for ZnServer, implementing #handleRequest: I implement responses to the following prefixes: /echo - an echo text of request information for debugging purposes /dw-bench - a dynamic html page for benchmarking purposes /unicode - a unicode test page /random - a random string (/random/32 for a specific size) /bytes - bytes according to a pattern (/bytes/32 for a specific size) /favicon.ico - a Zn favicon /status - a server status page /help - lists all page prefixes / - an html welcome page Without any matches, I respond with a page not found. Part of Zinc HTTP Components.! I am ZnDigestAuthenticator. I help servers handle HTTP Digest Authentication. I have a nonces dictionary with nonce->opaque associations. I generate a new nonce value for every 401 response I trigger. Part of Zinc HTTP Components.! I am ZnDigestCredential, a concrete subclass of ZnCredential and subclass of ZnBasicCredential. I implement digest HTTP authentication. I hold a nounce and opaque. Part of Zinc HTTP Components.! I am ZnDispatcherDelegate, doing a straight-forward dispatching to mapped URLs. ZnDispatcherDelegate API: (server := ZnServer startDefaultOn: 9090) delegate: (ZnDispatcherDelegate new map: '/hello' to: [ :request :response | response entity: (ZnEntity html: '

hello server

') ]; map: '/counter' to: [ :request :response | counterApplication handleRequest: request response: response ]).! I am ZnEasy, a simplified HTTP client for occasional use. My class side implements a number of convenience methods to do common HTTP client operations. ZnEasy get: 'http://zn.stfx.eu/zn/small.html'. For most requests, I return a response object. Some return an image Form. ZnEasy getPng: 'http://www.pharo-project.org/images/pharo.png'. For my implementation I use ZnClient, a full featured HTTP client. Part of Zinc HTTP Components.! I am ZnEntity, an abstract HTTP Entity. An entity has a content type (mime-type), a content length (byte length) and a contents. Entities can encode and decode themselves to and from binary streams. Part of Zinc HTTP Components.! I am ZnEntityReader, I help reading ZnEntities from a stream given meta data in headers. I deal with chunking and gzip decoding. I have several options: - to read streaming entities, where the client has to do the actual reading - to read binary entities, where textual content is not interpreted - to allow reading up to end, when there is no content length set Part of Zinc HTTP Components.! ZnEntityTooLarge is signalled when too big an entity is read from a stream. This is a resumable exception! I am ZnEntityWriter, I help writing ZnEntities to a stream given meta data in headers. I deal with chunking and gzip encoding. Part of Zinc HTTP Components.! I am ZnFileLogger, a ZnLogListener that appends to a file. Part of Zinc HTTP Components.! I am ZnFileSystemUtils. I help is abstracting over API differences pre and post the introduction of FileSystem in Pharo 2.0 Part of Zinc HTTP Components.! ZnHTTPSTests. These require that the ZnZodiacNetworkingUtils socket stream factory is enabled: ZnNetworkingUtils default: ZnZodiacNetworkingUtils new. Part of Zinc HTTP Components! I am ZnHTTPSocketFacade. On my class side I implement all necessary replacement methods of HTTPSocket. The interface (signature and semantics) of this API is defined by HTTPSocket. Overwriting these HTTPSocket methods with mine will effectively redirect all HTTP client access in this Smalltalk image through Zinc HTTP Components. Part of Zinc HTTP Components.! I am ZnHeaders. I am a collection of HTTP headers. I can be used for generating and parsing. Header names are normalized and used case insensitive. Header values can be multi-valued. Part of Zinc HTTP Components.! ZnHttpUnsuccessful is signalled when an HTTP client receives a non success response. See ZnResponse>>#isSuccess I hold the response that was unsuccessful. Part of Zinc HTTP Components. ! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! I am ZnLimitedReadStream, wrapping another read stream delegating to it but limiting reading to a fixed number of elements. I can be atEnd while my wrapped stream is not. My contentSpecies can be forced to be ByteArray (binary) or ByteString (ascii). I do byte/char conversions on the fly (support bivalent access). This implementation is really a kludge. Part of Zinc HTTP Components.! I am ZnLineReader and I help reading CRLF terminated lines from a stream. I can work on ascii and binary streams doing conversions as necessary. I limit lines to a maximum length. I work with a reusable buffer. Part of Zinc HTTP Components.! ZnLineTooLong is signalled when an HTTP CRLF terminated input line exceeds a predefined limit. Part of Zinc HTTP Components. ! I am ZnLogEvent, an Announcement sent by an HTTP server or client containing logging information. A log event has a TimeStamp, a Process ID, a category and a message. The following categories are used: #info (I), #debug (D) and #transaction (T). Part of Zinc HTTP Components.! I am ZnLogListener. I am an abstract class, subclasses should implement #event:. I add filtering and monitor for exclusive access. Part of Zinc HTTP Components.! I am ZnLogSupport, I help HTTP servers and clients to manage ZnLogEvents. To use the logging framework, instanciate your own log support: log := ZnLogSupport new. and use it to log messages: log info: 'Started server'. log debug: [ 'Created ', someComplexObject printString ]. To view the log, add a log listener: log addListener: ZnTranscriptLogger new. Make sure to enable your log support as it is off by default: log enabled: true. Part of Zinc HTTP Components.! ZnManagingMultiThreadedServer is a ZnMultiThreadedServer that manages the socket stream connections used by the worker threads that are spawned. ZnManagingMultiThreadedServer startDefaultOn: 1701. I keep track of all the connections that I spawn so that I can close them when I am stopped. Part of Zinc HTTP Components.! I am ZnMaximumEntitySize. I am a DynamicVariable and a ProcessSpecificVariable. I am used to control the maximum size of entities being read from streams. ! I am ZnMemoryLogger, a ZnLogListener that collects ZnLogEvents in memory. Part of Zinc HTTP Components.! I am ZnMessage, an abstract class representing an HTTP Message. Part of Zinc HTTP Components.! I am ZnMessageBenchmark helps to test the benchmarking and profiling of ZnMessage writing and reading. Instance Variables buffer: message: representation: ZnMessageBenchmark new simpleRequest; write: 10000. ZnMessageBenchmark new simpleRequest; writeRepresentation; read: 10000. ZnMessageBenchmark new simpleResponse; write: 10000. ZnMessageBenchmark new simpleResponse; writeRepresentation; read: 10000. ! I am ZnMimePart. I hold headers and an optional entity. I am used in MultiPartMimeEncoding. Acknowledgement: some code borrowed from AJP. Part of Zinc HTTP Components.! I am ZnMimeType. Mime types are an element used in describing resources, more specifically their format. Here are some examples MIME types: text/plain text/html text/plain;charset=utf-8 image/png text/* A mime type has a main/sub form with optional parameters. For more information: http://en.wikipedia.org/wiki/MIME_type I know whether I am binary or not and know my charset when applicable. My class side offers access to some common constants. Note that for text types we default to UTF-8 encoding. Examples: ZnMimeType textPlain = 'text/plain' asZnMimeType. ZnMimeType textPlain charSet. ZnMimeType textHtml matches: ZnMimeType text. ZnMimeType default matches: ZnMimeType any. ZnMimeType imagePng isBinary. ZnMimeType forFilenameExtension: 'html'. I started life as a copy of WAMineType. Part of Zinc HTTP Components.! ZnMissingHost is signalled when a host should be specified but was not. Part of Zinc HTTP Components. ! I am ZnMonticelloServerDelegate. I am a proof of concept implementation of a basic Monticello server. I function as a delegate for ZnServer. ZnServer startDefaultOn: 1701. ZnServer default delegate: ((ZnMonticelloServerDelegate new) directory: '/tmp/monticello'; yourself). Part of Zinc HTTP Components.! I am ZnMultiPartFormDataEntity, a concrete HTTP Entity holding multi part form data that is encoded according to specific rules. I am a ZnEntity. Acknowledgement: some code borrowed from AJP. Part of Zinc HTTP Components.! I am ZnMultiThreadedServer. I inherit most features from ZnSingleThreadedServer. ZnMultiThreadedServer startDefaultOn: 1701. ZnMultiThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient get: 'http://localhost:1701' username: 'foo' password: 'secret'. I am multi threaded, I fork a new process for each incoming request. I try to keep connections alive in each process. Part of Zinc HTTP Components.! I am ZnMultiValueDictionary. I am a Dictionary. I offer an #at:add: method to transparently create Array valued multi entries when needed. My #keysAndValuesDo: is overwritten to transparently deal with multi entries. To merge two instance preserving multiple values you can use #addAllMulti: I normally limit the number of entries to protect me from resource abuse. Note that most other methods will show the actual value. Part of Zinc HTTP Components.! I am ZnNetworkingUtils holding various utilities related to HTTP networking. My class side is a general API. My instance side is a factory. ZnNetworkingUtils default socketStreamClass: SocketStream. ZnNetworkingUtils default socketStreamClass: ZdcSocketStream. Part of Zinc HTTP Components.! I am ZnNullEncoder, a concrete subclass of ZnCharacterEncoder. I perform no encoding or decoding at all for all characters with a code value below 256. I can only be used for ASCII. Note that in principle I could handle Latin1 (ISO-8859-1), although that is not completely correct. To get maximum efficiency, it remains an option. Part of Zinc HTTP Components.! ZnParseError is the superclass of all Zinc HTTP parsing related errors. Part of Zinc HTTP Components.! I am ZnPercentEncoder. I implement RFC 3986 percent encoding and decoding. All characters that are not part of a safe set are encoded using a percent (%) followed by a two digit hexadecimal number of a byte value. Non-ASCII characters are first encoded, normally using UTF-8. My #encode: and #decode: messages work from String to String. My decoder additionally will accept + as an encoding for a space. See also http://en.wikipedia.org/wiki/Percent-encoding Part of Zinc HTTP Components ! ZnPortNotANumber is signalled when an URL is parsed containing an illegal port specification. Part of Zinc HTTP Components.! I am ZnReadEvalPrintDelegate, I export a REPL Web Service. You can use this service to work with a headless image. ZnReadEvalPrintDelegate startInServerOn: 1701. ZnClient new url: 'http://localhost:1701/repl'; contents: '42 factorial'; post. Web Service API: POST /repl Here is an example terminal session: $ curl http://localhost:1701/repl # Pharo Smalltalk REPL. POST expressions to evaluate # Here is one way (type ctrl-d to end input) curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl $ curl -X POST -H'Content-Type:text/plain' -d '42 factorial' http://localhost:1701/repl 1405006117752879898543142606244511569936384000000000 $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl { (1 to: 10) sum. (1 to: 10) average } {55. (11/2)} There is error handling as well: $ curl -X POST -H'Content-Type:text/plain' --data-binary @- http://localhost:1701/repl 1 plus: 2 MessageNotUnderstood: SmallInteger>>plus: SmallInteger(Object)>>doesNotUnderstand: #plus: Receiver: 1 Arguments and temporary variables: aMessage: plus: 2 exception: MessageNotUnderstood: SmallInteger>>plus: resumeValue: nil Receiver's instance variables: 1 UndefinedObject>>DoIt Compiler>>evaluate:in:to:notifying:ifFail:logged: Compiler>>evaluate:in:to:notifying:ifFail: Compiler>>evaluate:in:to: ZnReadEvalPrintDelegate>>evaluate: in Block: [| result |... BlockClosure>>on:do: ZnReadEvalPrintDelegate>>evaluate: in Block: [:out | [| result |... String class(SequenceableCollection class)>>new:streamContents: WARNING: never open this service beyond your local network !! This service gives you absolute control over and access to everything in your image. For example, the following will kill your image: $ curl -X POST -H'Content-Type:text/plain' -d 'Smalltalk quitPrimitive' http://localhost:1701/repl Part of Zinc HTTP Components. ! I am ZnRequest, representing an HTTP Request, consisting of a request line, headers and an optional entity (body). I am a ZnMessage. I can be used for generating and parsing. Part of Zinc HTTP Components.! I am an HTTP Request Line. I consist of an HTTP method, an URI and an HTTP protocol version. I can be used for generating and parsing. Part of Zinc HTTP Components.! I am ZnResourceMetaUtils. I contain some class side utility methods. Part of Zinc HTTP Components.! I am ZnResponse, representing an HTTP Response consisting of a status line, headers and an optional entity (body). I am a ZnMessage. I can be used for generating and parsing. Part of Zinc HTTP Components.! I am ZnSecureServer, an implementation of an HTTPS server. I am a ZnMultiThreadedServer (ZnSecureServer on: 1443) certificate: '/home/sven/ssl/key-cert.pem'; logToTranscript; start; yourself. Disclaimer: this is an experimental proof of concept.! I am ZnServer, an abstract superclass of HTTP Servers. I am a facade for controlling a default server implementation. I delegate my public class protocol methods to #defaultServerClass. ZnServer startDefaultOn: 1701. ZnClient get: 'http://localhost:1701'. Subclasses can register with me to have start/stop sent to them on System startUp/shutDown. The default server instance will be registered automatically when it is started. Part of Zinc HTTP Components.! I am ZnServerSession. I represent an HTTP session in the context of a ZnServer. To get a reference to the current session, send #session to a ZnMessage (request or response). Part of Zinc HTTP Components.! I am ZnServerSessionManager. I manage a collection of ZnServerSession on behalf of a ZnServer. Session ids are stored in cookies. Part of Zinc HTTP Components.! I am ZnSignalProgress. I am a DynamicVariable and a ProcessSpecificVariable. I can be used to indicate that Zn related code down the call stack has to signal HTTPProgress, for example: ZnSignalProgress value: true during: [ ^ ZnClient new get: 'http://zn.stfx.eu/zn/small.html' ]! I am ZnSingleThreadedServer. I can be customized with a delegate (#handleRequest:) and an authenticator (#authenticateRequest:do:). ZnSingleThreadedServer startDefaultOn: 1701. ZnSingleThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient get: 'http://localhost:1701' username: 'foo' password: 'secret'. I use ZnDefaultServerDelegate when no other delegate is set. I am single threaded, I run in a single process. I close connections after each request/response cycle. Acknowledgement: basic design copied from Blackfoot. Part of Zinc HTTP Components.! I am ZnStandardOutputLogger, a ZnLogListener that appends to the OS level standard output stream. Part of Zinc HTTP Components.! I am ZnStaticFileServerDelegate. I am a simple proof of concept implementation of a web server serving static files. I handle urls with an optional prefix as requests for files in a directory. I serve index.html or index.htm when a directory is requested and these files exist. I do a redirect when a path that is not does not end with a / refers to directory. I function as a delegate for ZnServer. ZnServer startDefaultOn: 1701. ZnServer default delegate: ((ZnStaticFileServerDelegate new) prefixFromString: 'apple/macosx'; directory: '/Library/WebServer/Documents' asDirectory; yourself). Part of Zinc HTTP Components.! I am an HTTP Status Line. I consist of an HTTP protocol version, an integer HTTP status code and an HTTP reason string. I can be used for generating and parsing. Part of Zinc HTTP Components.! I am ZnStreamingEntity, a concrete HTTP Entity based on a stream. I am a ZnEntity. When a ZnStreamingEntity is created using #readFrom: its content type and length are set but no body is actually read. Instead, stream is set to a ZnLimitedReadStream that clients can/must use to read from. When the client is done, either all data must be read or #consumeContent must be called. A client should normally not close the stream. A ZnStreamingEntity can also be instanciated with an existing read stream. During #writeOn: this stream is copied to the output stream. Part of Zinc HTTP Components.! I am ZnStringEntity, a concrete HTTP Entity based on a String. It is used to hold textual (non-binary) data. I am a ZnEntity. Optionally, an encoding is used to convert to and from bytes. The default encoding it UTF-8. Note that content length is the encoded byte count, not the number of characters in the string. Part of Zinc HTTP Components.! I am ZnTestRunnerDelegate, a web service interface to run unit tests. ZnTestRunnerDelegate startInServerOn: 1701. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests'. ZnEasy get: 'http://localhost:1701/sunit/ZnUtilsTests/testBase64'. Web Service API: GET /sunit/MyTestCase GET /sunit/MyTestCase/testOne Part of Zinc HTTP Components! ZnTooManyDictionaryEntries is signalled when too many entries are added to a limited ZnMultiValueDictionary. Part of Zinc HTTP Components. ! ZnTooManyRedirects is signalled when an HTTP client has been following more redirects than allowed. Part of Zinc HTTP Components. ! I am ZnTranscriptLogger, a ZnLogListener that appends to the Transcript. Part of Zinc HTTP Components.! I am ZnUTF8Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-8 encoding and decoding of Unicode according to RFC 3629. Part of Zinc HTTP Components.! ZnUnexpectedContentType is signalled when a different content type (mime type) was expected. I hold the expected and actual content types. Part of Zinc HTTP Components. ! ZnUnknownHttpMethod is signalled when an unknown/unsupported HTTP method is found while parsing a request. I am resumable to allow non-standard methods. Part of Zinc HTTP Components. ! ZnUnknownHttpStatusCode is signalled when an unknown/unsupported HTTP status code is found. Part of Zinc HTTP Components. ! ZnUnknownHttpVersion is signalled when an unknown/unsupported HTTP version is found. Part of Zinc HTTP Components. ! ZnUnknownScheme is signalled when an unknown/unsupported URL scheme is found. Part of Zinc HTTP Components. ! I am ZnUrl, an implementation of an interpreted URL/URI. URLs are an element used in describing resources, more specifically to identify them. I consist of the following parts: - scheme - like #http, #https, #ws, #wws, #file or nil - host - hostname string or nil - port - port integer or nil - segments - collection of path segments, ends with #/ for directories - query - query dictionary or nil - fragment - fragment string or nil - username - username string or nil - password - password string or nil The syntax of my external representation informally looks like this scheme://username:password@host:port/segments?query#fragment I am most often created by parsing my external representation using either my #fromString: class method or by sending the #asZnUrl convenience method to a String. Using #asZnUrl helps in accepting both Strings and ZnUrls arguments. ZnUrl fromString: 'http://www.google.com/search?q=Smalltalk'. I can also be constucted programmatically. ZnUrl new scheme: #https; host: 'encrypted.google.com'; addPathSegment: 'search'; queryAt: 'q' put: 'Smalltalk'; yourself. My components can be manipulated destructively. Here is an example: ('http://www.google.com/?one=1&two=2' asZnUrl) queryAt: 'three' put: '3'; queryRemoveKey: 'one'; yourself. Some characters of parts of a URL are illegal because they would interfere with the syntax and further processing and thus have to be encoded. The methods in accessing protocols do not do any encoding, those in parsing and printing do. Here is an example: ('http://www.google.com' asZnUrl) addPathSegment: 'some encoding here'; queryAt: 'and some encoding' put: 'here, too'; yourself My parser is somewhat forgiving and accepts some unencoded URLs as well, like most browsers would. 'http://www.example.com:8888/a path?q=a, b, c' asZnUrl. I can parse in the context of a default scheme, like a browser would do. ZnUrl fromString: 'www.example.com' defaultScheme: #http Given a scheme, I know its default port, try #portOrDefault. A path defaults to what is commonly referred to as slash, test with #isSlash. Paths are most often (but don't have to be) interpreted as filesystem paths. To support this, I have #isFile and #isDirectory tests and #file and #directory accessors. I have some support to handle one URL in the context of another one, this is also known as a relative URL in the context of an absolute URL. Refer to #isAbsolute, #isRelative and #inContextOf: '/folder/file.txt' asZnUrl inContextOf: ('http://fileserver.example.net:4400' asZnUrl). Sometimes, the combination of my host and port are referred to as authority, see #authority. URL/URI/URN (Uniform/Universal Resource Locator/Identifier/Name) are closely related and can be and are used as synonyms is many contexts. Refer to http://en.wikipedia.org/wiki/Url for more information. There is a convenience method #retrieveContents to download the resource a ZnUrl points to, 'http://zn.stfx.eu/zn/numbers.txt' asZnUrl retrieveContents. Part of Zinc HTTP Components.! I represent a session store for an HTTP client instance of ZnUserAgent. I hold the cookie jar for the session and any authentication credentials used by the client. Part of Zinc HTTP Components.! I am ZnUtils holding various utilities related to HTTP handling. Part of Zinc HTTP Components.! I am ZnValueDelegate. I forward #handleRequest: messages to the object that I wrap using #value: ZnServer default delegate: (ZnValueDelegate with: [ :request | ZnResponse ok: (ZnEntity with: 'You asked for ', request uri printString) ] ). Part of Zinc HTTP Components.! ZnZodiacNetworkingUtils is socket and socketstream factory subclassing ZnNetworkingUtils, instanciating Zodiac socket streams., namely ZdcSocketStream and ZdcSecureSocketStream. Obviously, this class depends on Zodiac. ZnNetworkingUtils default: ZnZodiacNetworkingUtils new. ZnNetworkingUtils default: nil. Part of Zinc HTTP Components.! ----End fileIn----! ----QUIT----an Array(28 June 2013 5:01:25 pm) Pharo.image priorSource: 8439764! ----STARTUP----an Array(28 June 2013 5:09:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 5:09:58 pm) Pharo-30234.image priorSource: 9280626! ----STARTUP----an Array(28 June 2013 5:30:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 6/28/2013 17:27' prior: 41994499! commentForCurrentUpdate ^ '11071 PasteUpMorph cleaning https://pharo.fogbugz.com/default.asp?11071 11024 Removing>>griddedPoint: https://pharo.fogbugz.com/default.asp?11024'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 6/28/2013 17:27'! script334 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.34.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.485.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.31.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.861.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1160.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 6/28/2013 17:27'! update30235 "self new update30235" self withUpdateLog: '11071 PasteUpMorph cleaning https://pharo.fogbugz.com/default.asp?11071 11024 Removing>>griddedPoint: https://pharo.fogbugz.com/default.asp?11024'. self loadTogether: self script334 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PasteUpMorph commentStamp: '' prior: 42533164! A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph. Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided. ! !PolygonMorph methodsFor: 'editing' stamp: 'StephaneDucasse 6/28/2013 11:25' prior: 29690177! dragVertex: ix event: evt fromHandle: handle | p | p := evt cursorPoint. handle position: p - (handle extent // 2). self verticesAt: ix put: p! ! !PolygonMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 6/28/2013 11:30' prior: 29687801! justDroppedInto: newOwner event: evt | delta | (newOwner isKindOf: PasteUpMorph) ifTrue: ["Compensate for border width so that gridded drop is consistent with gridded drag of handles." delta := borderWidth + 1//2 ]. ^ super justDroppedInto: newOwner event: evt! ! !SelectionMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/28/2013 11:34' prior: 32925648! privateFullMoveBy: delta | deltaSlipped griddingMorph | selectedItems isEmpty ifTrue: [ ^ super privateFullMoveBy: delta ]. griddingMorph := self pasteUpMorph. griddingMorph ifNil: [ ^ super privateFullMoveBy: delta ]. deltaSlipped := delta + slippage. slippage := 0. super privateFullMoveBy: deltaSlipped. selectedItems do: [ :m | m position: m position + deltaSlipped ]! ! !HaloMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/28/2013 11:26' prior: 23184099! doDrag: evt with: dragHandle | thePoint | evt hand obtainHalo: self. thePoint := target point: evt position - positionOffset from: owner. target setConstrainedPosition: thePoint hangOut: true. ! ! !HaloMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/28/2013 11:26' prior: 23185199! doGrow: evt with: growHandle "Called while the mouse is down in the grow handle" | newExtent extentToUse scale | evt hand obtainHalo: self. newExtent := (target pointFromWorld: (evt cursorPoint - positionOffset)) - target topLeft. evt shiftPressed ifTrue: [ scale := (newExtent x / (originalExtent x max: 1)) min: (newExtent y / (originalExtent y max: 1)). newExtent := (originalExtent x * scale) asInteger @ (originalExtent y * scale) asInteger ]. (newExtent x < 1 or: [newExtent y < 1 ]) ifTrue: [^ self]. target renderedMorph setExtentFromHalo: (extentToUse := newExtent). growHandle position: evt cursorPoint - (growHandle extent // 2). self layoutChanged. ! ! !Morph methodsFor: 'meta-actions' stamp: 'StephaneDucasse 6/28/2013 11:26' prior: 26792982! resizeMorph: evt | handle | handle := HandleMorph new forEachPointDo: [ :newPoint | self extent: newPoint - self bounds topLeft ]. evt hand attachMorph: handle. handle startStepping! ! !PasteUpMorph commentStamp: '' prior: 42846125! A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph. Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided. ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:20'! discoveredWorldMenu ^ owner discoveredWorldMenu ! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 22:55'! drawBackgroundSketchOn: aCanvas backgroundMorph ifNotNil: [ self clipSubmorphs ifTrue: [ aCanvas clipBy: self clippingBounds during: [ :canvas | canvas fullDrawMorph: backgroundMorph ] ] ifFalse: [ aCanvas fullDrawMorph: backgroundMorph ] ]! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 22:54'! drawGridOn: aCanvas (self griddingOn and: [ self gridVisible ]) ifTrue: [ aCanvas fillRectangle: self bounds fillStyle: (self gridFormOrigin: self gridOrigin grid: self gridModulus background: nil line: Color lightGray) ]! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 22:54' prior: 29194054! drawOn: aCanvas "Draw in order: - background color - grid, if any - background sketch, if any Later (in drawSubmorphsOn:) I will skip drawing the background sketch." super drawOn: aCanvas. self drawGridOn: aCanvas. self drawBackgroundSketchOn: aCanvas! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 19:19' prior: 29210299! drawSubmorphsOn: aCanvas "Display submorphs back to front, but skip my background sketch." | drawBlock | submorphs isEmpty ifTrue: [ ^ self ]. drawBlock := [ :canvas | submorphs reverseDo: [ :m | m ~~ backgroundMorph ifTrue: [ canvas fullDrawMorph: m ] ] ]. self clipSubmorphs ifTrue: [ aCanvas clipBy: (aCanvas clipRect intersect: self clippingBounds ifNone: [ ^ self ]) during: drawBlock ] ifFalse: [ drawBlock value: aCanvas ]! ! !PasteUpMorph methodsFor: 'testing' stamp: 'StephaneDucasse 6/28/2013 13:17' prior: 29218255! isEasySelecting "This is to isolate easySelection predicate. Selectors in holders make no sense so we are limiting easy selection to the worldMorph. It would also make sense in playfield so feel free to adjust this predicate. Selection can always be forced by using the shift before mouse down." ^ false! ! !PasteUpMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 6/27/2013 19:34' prior: 29189202! modalWindow: aMorph (self valueOfProperty: #modalWindow) ifNotNil: [ :morph | morph doCancel ]. self setProperty: #modalWindow toValue: aMorph. aMorph ifNotNil: [ self when: #aboutToLeaveWorld send: #removeModalWindow to: self ]! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'CamilloBruni 2/4/2012 14:45' prior: 29190425! mouseDown: evt "Handle a mouse down event." | grabbedMorph handHadHalos | (self defaultYellowButtonMenuEnabled and: [evt yellowButtonPressed]) ifTrue: [ (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ self ]]. grabbedMorph := self morphToGrab: evt. grabbedMorph ifNotNil: [ grabbedMorph isSticky ifTrue: [^self]. ^evt hand grabMorph: grabbedMorph]. (super handlesMouseDown: evt) ifTrue: [^super mouseDown: evt]. handHadHalos := evt hand halo notNil. evt hand removeHalo. "shake off halos" self isWorldMorph ifTrue: [ self currentWindow ifNotNil: [:topWindow | SystemWindow passivateTopWindow]]. "since pasteup will release keyboard focus now" evt hand releaseKeyboardFocus. "shake of keyboard foci" self submorphs select: [:each | each hasProperty: #morphHierarchy] thenDo: [:each | each delete]. (evt shiftPressed not and: [ self isWorldMorph not and: [ self wantsEasySelection not ]]) ifTrue: [ "explicitly ignore the event if we're not the world and we'll not select, so that we could be picked up if need be" evt wasHandled: false. ^ self. ]. ( evt shiftPressed or: [ self wantsEasySelection ] ) ifTrue: [ "We'll select on drag, let's decide what to do on click" | clickSelector | clickSelector := nil. evt shiftPressed ifTrue: [ clickSelector := #findWindow:.] ifFalse: [self isWorldMorph ifTrue: [clickSelector := handHadHalos ifTrue: [ #delayedInvokeWorldMenu: ] ifFalse: [ #invokeWorldMenu: ]]]. evt hand waitForClicksOrDrag: self event: evt selectors: { clickSelector. nil. nil. #dragThroughOnDesktop: } threshold: 5. ] ifFalse: [ "We wont select, just bring world menu if I'm the world" self isWorldMorph ifTrue: [ handHadHalos ifTrue: [ self delayedInvokeWorldMenu: evt ] ifFalse: [ self invokeWorldMenu: evt ] ] ]. ! ! !PasteUpMorph methodsFor: 'events-processing' stamp: 'StephaneDucasse 6/27/2013 18:58' prior: 29201484! processEvent: anEvent using: defaultDispatcher "Reimplemented to install the receiver as the new ActiveWorld if it is one" | priorWorld result | self isWorldMorph ifFalse: [^super processEvent: anEvent using: defaultDispatcher]. priorWorld := ActiveWorld. ActiveWorld := self. result := super processEvent: anEvent using: defaultDispatcher. ActiveWorld := priorWorld. ^result! ! !PasteUpMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:37' prior: 29238034! startSteppingSubmorphsOf: aMorph "Ensure that all submorphs of the given morph that want to be stepped are added to the step list. Typically used after adding a morph to the world." aMorph allMorphsDo: [:m | m wantsSteps ifTrue: [m arrangeToStartSteppingIn: m world]. ] ! ! !PasteUpMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:14' prior: 29213024! viewBox: newViewBox "I am now displayed within newViewBox; react." super position: newViewBox topLeft. fullBounds := bounds := newViewBox. ! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 6/27/2013 19:32' prior: 29197675! wantsDroppedMorph: aMorph event: evt self visible ifFalse: [^ false]. "will be a call to #hidden again very soon" self dropEnabled ifFalse: [^ false]. ^ true! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04' prior: 29229284! worldMenu ^ owner worldMenu ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04'! worldMenuAt: aMenuItemName ^ owner worldMenuAt: aMenuItemName ! ! Morph removeSelector: #griddedPoint:! Morph removeSelector: #gridPoint:! PasteUpMorph removeSelector: #world! PasteUpMorph removeSelector: #viewBox! PasteUpMorph removeSelector: #veryDeepCopyWith:! PasteUpMorph removeSelector: #stopStepping:selector:! PasteUpMorph removeSelector: #stopStepping:! PasteUpMorph removeSelector: #stepListSize! PasteUpMorph removeSelector: #startStepping:at:selector:arguments:stepTime:! PasteUpMorph removeSelector: #someHalo! PasteUpMorph removeSelector: #sleep! PasteUpMorph removeSelector: #setGradientColor:! PasteUpMorph removeSelector: #runStepMethods! PasteUpMorph removeSelector: #runLocalStepMethods! PasteUpMorph removeSelector: #resetWorldMenu! PasteUpMorph removeSelector: #removeHand:! PasteUpMorph removeSelector: #removeAlarm:for:! PasteUpMorph removeSelector: #privateOuterDisplayWorld! PasteUpMorph removeSelector: #privateMoveBy:! PasteUpMorph removeSelector: #privateFullMoveBy:! PasteUpMorph removeSelector: #printOn:! PasteUpMorph removeSelector: #previousPage! PasteUpMorph removeSelector: #nextPage! PasteUpMorph removeSelector: #mouseUp:! PasteUpMorph removeSelector: #listOfSteppingMorphs! PasteUpMorph removeSelector: #isWorldMorph! PasteUpMorph removeSelector: #isStepping:selector:! PasteUpMorph removeSelector: #isStepping:! PasteUpMorph removeSelector: #invalidRect:from:! PasteUpMorph removeSelector: #install! PasteUpMorph removeSelector: #handsReverseDo:! PasteUpMorph removeSelector: #handsDo:! PasteUpMorph removeSelector: #hands! PasteUpMorph removeSelector: #haloMorphs! PasteUpMorph removeSelector: #gridPoint:! PasteUpMorph removeSelector: #gradientFillColor:! PasteUpMorph removeSelector: #fullRepaintNeeded! PasteUpMorph removeSelector: #fullContainsPoint:! PasteUpMorph removeSelector: #firstHand! PasteUpMorph removeSelector: #extent:! PasteUpMorph removeSelector: #doOneSubCycle! PasteUpMorph removeSelector: #doOneCycleNow! PasteUpMorph removeSelector: #doOneCycle! PasteUpMorph removeSelector: #displayWorldSafely! PasteUpMorph removeSelector: #displayWorld! PasteUpMorph removeSelector: #deleteBalloonTarget:! PasteUpMorph removeSelector: #defaultWorldColor! PasteUpMorph removeSelector: #cleanseStepList! PasteUpMorph removeSelector: #canvas! PasteUpMorph removeSelector: #beCurrentWorld! PasteUpMorph removeSelector: #assuredCanvas! PasteUpMorph removeSelector: #announcer! PasteUpMorph removeSelector: #allMorphsDo:! PasteUpMorph removeSelector: #addHand:! PasteUpMorph removeSelector: #addAlarm:withArguments:for:at:! PasteUpMorph removeSelector: #activeHand:! PasteUpMorph removeSelector: #activeHand! PasteUpMorph class removeSelector: #startUp! PasteUpMorph class removeSelector: #shutDown! PasteUpMorph class removeSelector: #defaultWorldColor! PasteUpMorph class removeSelector: #cleanUp! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(28 June 2013 5:30:16 pm) Pharo.image priorSource: 9280824! ----STARTUP----an Array(28 June 2013 5:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 June 2013 5:39 pm) Pharo-30235.image priorSource: 9304038! ----STARTUP----an Array(1 July 2013 11:57:07 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 7/1/2013 11:54' prior: 42835558! commentForCurrentUpdate ^ '11090 Cleaning WorldMorph initialize and UIProcess startup. https://pharo.fogbugz.com/default.asp?11090'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 7/1/2013 11:54'! script335 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.36.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.485.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-MarcusDenker.96.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.31.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.848.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.863.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1160.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 7/1/2013 11:54'! update30236 "self new update30236" self withUpdateLog: '11090 Cleaning WorldMorph initialize and UIProcess startup. https://pharo.fogbugz.com/default.asp?11090'. self loadTogether: self script335 merge: false. SmalltalkImage initializeShutDownList. SmalltalkImage initializeStartUpList. . self flushCaches. ! ! "ScriptLoader30"! !WorldMorph class methodsFor: 'world creation' stamp: 'StephaneDucasse 7/1/2013 10:06'! installNewWorld "let us play God." [ | man | self new install. man := UIManager default. man uiProcess ifNotNil: [ man terminateUIProcess ]. man spawnNewProcess. ] forkAt: Processor userInterruptPriority! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/1/2013 10:09'! initialize worldState := WorldState new. super initialize! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/1/2013 10:09' prior: 41970446! install "Was beCurrentWorld and should be later called initialize" | morphs | owner := nil. morphs := World submorphs. "we should decide if we get morph or not. Now submorphs returns an array and this is strange that this is not an OrderedCollection" Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [ :h | h releaseCachedState ]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !SmalltalkImage class methodsFor: 'initialization' stamp: 'StephaneDucasse 7/1/2013 09:57' prior: 50368696! initializeShutDownList "SmalltalkImage initializeShutDownList" | oldList | oldList := ShutDownList. ShutDownList := OrderedCollection new. "These get processed from the bottom up..." #(#Delay #DisplayScreen #InputEventFetcher #Form #WorldMorph #StrikeFont #Color #SoundPlayer #HttpUrl #Password) do: [ :clsName | Smalltalk globals at: clsName ifPresent: [ :cls | Smalltalk addToShutDownList: cls ] ]. oldList ifNotNil: [ oldList reverseDo: [ :className | Smalltalk globals at: className ifPresent: [ :theClass | Smalltalk addToShutDownList: theClass ] ] ]! ! !SmalltalkImage class methodsFor: 'initialization' stamp: 'StephaneDucasse 7/1/2013 09:57' prior: 50369367! initializeStartUpList "SmalltalkImage initializeStartUpList" | oldList | oldList := StartUpList. StartUpList := OrderedCollection new. "These get processed from the top down..." #(#Delay #DisplayScreen #Cursor #InputEventFetcher #ProcessorScheduler #LanguageEnvironment #NaturalLanguageTranslator #ShortIntegerArray #ShortRunArray) do: [ :clsName | Smalltalk globals at: clsName ifPresent: [ :cls | Smalltalk addToStartUpList: cls ] ]. oldList ifNotNil: [ oldList do: [ :className | Smalltalk globals at: className ifPresent: [ :theClass | Smalltalk addToStartUpList: theClass ] ] ]. #(#WorldMorph) do: [ :clsName | Smalltalk globals at: clsName ifPresent: [ :cls | Smalltalk addToStartUpList: cls ] ]! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'StephaneDucasse 7/1/2013 09:57' prior: 33496983! privCleanShutDownList #( #FreeTypeSettings #FreeTypeCache #FT2Handle #LogicalFont #MCMethodDefinition #InternetConfiguration #TTCFont #CPUWatcher #ProcessBrowser #SecurityManager #CommandHistory #Password #HttpUrl #StrikeFont #WorldMorph #Form #ZnServer ) do: [:className | Smalltalk removeFromShutDownList: (Smalltalk classNamed: className)].! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'StephaneDucasse 7/1/2013 09:57' prior: 33497446! privCleanStartUpList #( #NaturalLanguageTranslator #ShortIntegerArray #ShortRunArray #WorldMorph #SecurityManager #FreeTypeFontProvider #UUIDGenerator #ProcessBrowser #CPUWatcher #DateAndTime #HostSystemMenus #MenuIcons #InternetConfiguration #CommandHistory #HostWindowProxy #FreeTypeSettings #UITheme #CodeLoader #ZnServer #MCWorkingCopy #RecentMessageList #EditorFindReplaceDialogWindow #CodeUpdate) do: [:className | Smalltalk removeFromStartUpList: (Smalltalk classNamed: className)].! ! "Morphic-Base"! "System-Support"! ----End fileIn----! ----QUIT----an Array(1 July 2013 11:57:17 am) Pharo.image priorSource: 9304233! ----STARTUP----an Array(1 July 2013 12:05:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 July 2013 12:05:52 pm) Pharo-30236.image priorSource: 9319082! ----STARTUP----an Array(1 July 2013 2:03:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 7/1/2013 13:49' prior: 42858963! commentForCurrentUpdate ^ '11054 PullUp takes the class and not the superclass as input https://pharo.fogbugz.com/default.asp?11054 11081 failing tests testFileOutCategory & testFileOutTrait https://pharo.fogbugz.com/default.asp?11081 11084 Remove SystemNavigation>>#allCallsOn:and: https://pharo.fogbugz.com/default.asp?11084 11048 Dont display a StringMorph if the string is nil https://pharo.fogbugz.com/default.asp?11048'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 7/1/2013 13:50'! script336 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.210.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-MarcusDenker.609.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.36.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.485.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-StephaneDucasse.853.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1164.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 7/1/2013 13:50'! update30237 "self new update30237" self withUpdateLog: '11054 PullUp takes the class and not the superclass as input https://pharo.fogbugz.com/default.asp?11054 11081 failing tests testFileOutCategory & testFileOutTrait https://pharo.fogbugz.com/default.asp?11081 11084 Remove SystemNavigation>>#allCallsOn:and: https://pharo.fogbugz.com/default.asp?11084 11048 Dont display a StringMorph if the string is nil https://pharo.fogbugz.com/default.asp?11048'. self loadTogether: self script336 merge: false. WorldMorph installNewWorld . self flushCaches. ! ! "ScriptLoader30"! !NautilusRefactoring methodsFor: 'private-inst var' stamp: 'StephaneDucasse 6/28/2013 10:34' prior: 28246846! privatePullUpInstVarFrom: aClass ^ self class: aClass andInstVariable: [ :class :variable | RBPullUpInstanceVariableRefactoring model: environment variable: variable class: class superclass ]! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 6/27/2013 17:58' prior: 39987068! text: aText icon: form | morph | aText ifNotNil: [ morph := aText asMorph ]. ^ self new morph: morph; icon: (AlphaImageMorph new image: form); yourself! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'CamilloBruni 6/29/2013 20:23'! fileOutCommentOn: aFileStream moveSource: moveSource toFile: fileIndex "Copy the class comment to aFileStream. If moveSource is true (as in compressChanges or compressSources, then update classComment to point to the new file." | fileComment | self classComment ifNil: [ ^ self ]. aFileStream cr. fileComment := RemoteString newString: self classComment string onFileNumber: fileIndex toFile: aFileStream. moveSource ifTrue: [ self classComment: fileComment ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'CamilloBruni 6/29/2013 20:27'! putCommentOnFile: aFileStream numbered: sourceIndex moveSource: moveSource forClass: aClass "Store the comment about the class onto file, aFileStream." | header | self classComment ifNil: [ ^ self ]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: aClass name; nextPutAll: ' commentStamp: '. commentStamp ifNil: [commentStamp := '']. commentStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: '0']. aFileStream nextChunkPut: header. aClass organization fileOutCommentOn: aFileStream moveSource: moveSource toFile: sourceIndex. aFileStream cr! ! SystemNavigation removeSelector: #browseAllSendersOf:and:! SystemNavigation removeSelector: #browseAllCallsOn:and:! SystemNavigation removeSelector: #allCallsOn:and:! "NautilusRefactoring"! "NewClassOrganizer"! "Polymorph-Widgets"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(1 July 2013 2:03:18 pm) Pharo.image priorSource: 9319280! ----STARTUP----an Array(1 July 2013 2:11:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 July 2013 2:11:44 pm) Pharo-30237.image priorSource: 9332874! ----STARTUP----an Array(2 July 2013 10:41:48 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! ----End fileIn----! ----End fileIn----! ----End fileIn----! !GLMUIThemeIcons commentStamp: 'TudorGirba 1/30/2011 22:49' prior: 0! This class holds a set of icons to be used in the Glamorous UI Theme.! !GLMTabPanelBorder commentStamp: '' prior: 0! Specialized border for TabGroup. Does not draw border beneath the selectd tab and only draws on top.! !EclipseUIThemeIcons commentStamp: '' prior: 0! An icon set pack taken from eclipse.! !GLMUIThemeExtraIcons commentStamp: 'TudorGirba 1/30/2011 22:55' prior: 0! This class offers a number of extra icons that work with the Glamorous Theme.! !GLMUITheme commentStamp: 'TudorGirba 1/30/2011 22:51' prior: 0! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. In particular, the icons should be operating system agnostic, because, for example, people in Windows are confused by the red, yellow, green buttons of apple. - uses a limited amount of colors and effects. - is fast. self defaultSettings: nil. self beCurrent. ! !GLMWhitespaceTheme commentStamp: '' prior: 0! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. - maximizes whitespace. - is fast. PolymorphSystemSettings desktopColor: Color white. self defaultSettings: nil. self beCurrent.! !Form methodsFor: '*EclipsePack' stamp: 'EstebanLorenzano 5/10/2013 14:56'! mergeBottomRightWith: aForm ^ self mergeWith: aForm at: self extent - aForm extent! ! !Form methodsFor: '*EclipsePack' stamp: 'EstebanLorenzano 5/10/2013 14:56'! mergeWith: aForm ^ self mergeWith: aForm at: 0@0! ! !Form methodsFor: '*EclipsePack' stamp: 'EstebanLorenzano 5/10/2013 15:28'! mergeWith: aForm at: aPoint | mergedForm | mergedForm := self deepCopy. mergedForm getCanvas translucentImage: aForm at: aPoint. ^ mergedForm ! ! !UITheme methodsFor: '*glamour-morphic-theme' stamp: 'TudorGirba 5/23/2012 13:10'! configureWatcherWindowLabelAreaFor: aWindow ^ self configureWindowLabelAreaFor: aWindow! ! !UITheme methodsFor: '*glamour-morphic-theme' stamp: 'TudorGirba 5/23/2012 13:28'! watcherWindowActiveFillStyleFor: aWindow ^ self windowActiveFillStyleFor: aWindow! ! !UITheme methodsFor: '*glamour-morphic-theme' stamp: 'TudorGirba 5/23/2012 14:10'! watcherWindowInactiveFillStyleFor: aWindow ^ self windowInactiveFillStyleFor: aWindow! ! !GLMUIThemeIcons commentStamp: 'TudorGirba 1/30/2011 22:49' prior: 42887836! This class holds a set of icons to be used in the Glamorous UI Theme.! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:22'! checkboxMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 14:10'! checkboxSelectedForm ^ self form16x16FromContents: self checkboxSelectedFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 14:10'! checkboxSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! checkboxUnselectedForm ^ self form16x16FromContents: self checkboxUnselectedFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:26'! checkboxUnselectedFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:39'! form16x16FromContents: aByteArray ^ Form extent: 16@16 depth: 32 fromArray: aByteArray offset: 0@0! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! menuPinForm ^self form16x16FromContents: self menuPinFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:26'! menuPinFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 1291845632 3774873600 4194304000 3774873600 788529152 0 0 0 0 0 0 0 0 0 0 1107296256 4278190080 4278190080 4278190080 4278190080 4278190080 788529152 0 0 0 0 0 0 0 0 83886080 3992977408 4278190080 4278190080 4278190080 4278190080 4278190080 3774873600 83886080 0 0 0 0 0 0 0 100663296 4194304000 4278190080 4278190080 4278190080 4278190080 4278190080 4194304000 100663296 0 0 0 0 0 0 0 83886080 3774873600 4278190080 4278190080 4278190080 4278190080 4278190080 3992977408 83886080 0 0 0 0 0 0 0 0 1291845632 4261412864 4278190080 4278190080 4278190080 4261412864 1107296256 0 0 0 0 0 0 0 0 0 0 1107296256 3992977408 4194304000 3774873600 1291845632 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 09:11'! radioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! radioButtonSelectedForm ^ self form16x16FromContents: self radioButtonSelectedFormContents! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:27'! radioButtonSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! radioButtonUnselectedForm ^ self form16x16FromContents: self radioButtonUnselectedFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:27'! radioButtonUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:14'! radioSelectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioSelectedFormContents readStream) ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:13'! radioSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:14'! radioUnselectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioUnselectedFormContents readStream) ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:13'! radioUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowCloseForm ^ self form16x16FromContents: self windowCloseFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:24'! windowCloseFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167772160 0 0 0 0 0 0 0 0 167772160 3875536896 4076863488 234881024 0 234881024 2919235584 3858759680 0 0 0 0 0 0 0 0 402653184 3674210304 4261412864 3758096384 671088640 3758096384 4261412864 4278190080 335544320 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 0 0 671088640 4211081216 4261412864 4211081216 671088640 0 0 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 335544320 4278190080 4244635648 3758096384 671088640 3758096384 4143972352 3724541952 402653184 0 0 0 0 0 0 0 0 3892314112 2919235584 234881024 0 234881024 4278190080 1761607680 167772160 0 0 0 0 0 0 0 0 167772160 67108864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowCloseInactiveForm ^ self form16x16FromContents: self windowCloseInactiveFromContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowCloseInactiveFromContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176193664 0 0 0 0 0 0 0 0 176193664 3883958400 4085284992 243302528 0 243302528 2927657088 3867181184 0 0 0 0 0 0 0 0 411074688 3682631808 4269834368 3766517888 679049593 3766517888 4269834368 4286611584 343965824 0 0 0 0 0 0 0 0 360282489 3766517888 4152328063 4219436927 4152393856 3766517888 360282489 0 0 0 0 0 0 0 0 0 0 679049593 4219436927 4269834368 4219436927 679049593 0 0 0 0 0 0 0 0 0 0 360282489 3766517888 4152393856 4219436927 4152328063 3766517888 360282489 0 0 0 0 0 0 0 0 343965824 4286611584 4253057152 3766517888 679049593 3766517888 4152328063 3732963456 411074688 0 0 0 0 0 0 0 0 3900735616 2927657088 243302528 0 243302528 4286611584 1769897598 176193664 0 0 0 0 0 0 0 0 176193664 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMaximizeForm ^ self form16x16FromContents: self windowMaximizeFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:07'! windowMaximizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMaximizeInactiveForm ^ self form16x16FromContents: self windowMaximizeInactiveFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowMaximizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:52'! windowMenuForm ^self form16x16FromContents: self windowMenuFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:52'! windowMenuFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 369098752 3556769792 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 369098752 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMenuInactiveForm ^self form16x16FromContents: self windowMenuInactiveFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:15'! windowMenuInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 377520256 3565191296 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 377520256 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMinimizeForm ^self form16x16FromContents: self windowMinimizeFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:09'! windowMinimizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:42'! windowMinimizeInactiveForm ^self form16x16FromContents: self windowMinimizeInactiveFormContents ! ! !GLMUIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowMinimizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !GLMUIThemeIcons methodsFor: 'see class side' stamp: 'TudorGirba 1/30/2011 22:49'! seeClassSide! ! !GLMTabPanelBorder commentStamp: '' prior: 42887965! Specialized border for TabGroup. Does not draw border beneath the selectd tab and only draws on top.! !GLMTabPanelBorder methodsFor: 'drawing' stamp: 'tg 9/10/2010 07:42'! frameRectangle: aRectangle on: aCanvas "Draw the border taking the currently selected tab into account. Only works for top-positioned tabs for the moment." |w h r tab| w := self width. w isPoint ifTrue: [h := w y. w := w x] ifFalse:[h := w]. tab := self selectedTab. tab ifNil: [ r := aRectangle topLeft + (w@0) corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. ^self]. "top" r := aRectangle topLeft + (w@0) corner: tab bounds left + w@(aRectangle top + h). aCanvas fillRectangle: r color: self color. "top 1" r := tab bounds left + w@ aRectangle top corner: tab bounds right - w@(aRectangle top + h). aCanvas fillRectangle: r color: tab paneColor. "top 2" r := tab bounds right - w@ aRectangle top corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. "top 3"! ! !EclipseUIThemeIcons commentStamp: '' prior: 42888127! An icon set pack taken from eclipse.! !EclipseUIThemeIcons class methodsFor: 'license' stamp: 'EstebanLorenzano 6/21/2013 11:18'! LICENSE ^ ' The icon pack itself is distributed under MIT license. The eclipse icons, however, have their own open source license terms, the EPL, who can be found here: http://www.eclipse.org/legal/epl-v10.html '! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! backIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0jh5ZIkdgCdpvADAHyknkFg4Ol6PcSMACEoCAwHRKHR0Ag5DMZi IY8T6IyNcDRRKPp9fhODGEMkEhEJiBGMEo4kRCEWEA8gIZYhmUYiDhUiUkIlFCWgQiYmpaml QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! bundle_exporterIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAAAAP///z8/X6CgpACAAD+/Pz+fPz9fP8DcwL+/f9/fv//ff/+/P9+f P79/P39fP18/P////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAAAEALAAAAAAQABAAAAVoYCCOZGmK0FkqziM8jqImT8NAS/MkpvIsDB1jCJGRHLbg Y9hwOErLRjPqTI0gAshj+0IgIACr6Ddk/AgEA6KEZC4JhUJ6LfIFhfC43DBKQKoNeXEEByQs YBB5hAMqKWgHjCojA5GSliEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! changeSorterIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAI5GlKZ5qm92hGV9lFyFpU6PvVSLs01aXRuGe0WTiHipov///wAAAAAA AAAAAAAAACH5BAEAAAsALAAAAAAQABAAAARGcMlJq10KoaRumUi3XYY1WiWWbGeVrlJLvQgm T6mysgl6/YQLYEiUDISARWAoEVwCSqZgOrUsoZKD4GBlKrNISQD7Gy6HEQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 17:06'! classIcon ^ icons at: #'classIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self classIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! classIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGyogTOCTTaDT0CJWEKLWkaPXlSYalqbcFyccX6zkIG1ks3i1CR2Pi58 RjOBSzmGUFicbV2ecWOid6LJri18RC59RS99RjB+RjOBSUuSYEqQXneuh9jp3TKARzaESjuH Tz+JUo69mj6ITz6IUD6HUEaOV0ePWFKWYmuneo++msPdyeLv5VKWYFaaZFaZZF2caqvPs7zY wlSXYVeZZFiZZF6catrq3ebx6FKWXvH38mCgaXyyhHmugYW4jIy8k/D38VmZYWikb2GgZ2Ce Zp7Godzq3Weiam2mcHeueICzgHuxenmud4e4hYGzfeHv4JG+jLPSsLzZub7au5/HmqDHm7vY t8Lcv8bew7DQq////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFoALAAAAAAQABAAAAengFqCWgsRGQ8aEQuDjFoK D0FIkkEBCo2OHU1YVldWVEkMloMLD0tSWaioUUoBi4IHQlOoVU9QWU5MQhKDBThEWUVDwkdG RkAFgwEXKVkqFRQUFRgeIg68HxtZKyAkJBMwECbIghIjNTlZMSghWT8vLACDHAwyPDapNz40 DK6CCQ0ldOzosUPHDAEJLiWwcKKFixYnLCS8RMjAAAIDEPSjyLGjx4+NAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! configurationIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJKAiruyu4t8jYR5j4B2kXZxlXGFrH2RuX6RuYaawmJ3nWN3nHGFq4uW q1Vrj1Zrj/v9//j8//r9//H6//T7//f8/+35//D6//P7//b8//n9//z+/+z5/+/6//L7/9Xz /+v5/+76//H7//X8//j9/+z6//T8/+77//P8//f9//v+//b9//r+//n+/////////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC8ALAAA AAAQABAAAAaOwFdjSCwahZ+kcqlsIEGAKGhKnTobH0DAFQBwOKXSt3T9CFxogSWBYCweoTJh GyB0Oqf7vTwp+EWAExciFxdlHogYGB4oih6KZSZRACMjJiMUlyZlWlwAKxkrFSkVGWVnAy4C JAkHBgoOEXJ0BC0sEhq3EmUQfgUQECrCwhBlG8fIycdXRs1EL9DR0tMvQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! confirmIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQaAPb9/wJGjA5ipFWQv7bQ5MfU0PT7/5a2xff8//j9//r9//f9//z+//X8 //3+//n9/+zy9fb8/whUmPv+/wxcn/Lz9e3y9f7+/wtdn/Hy9f///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAWIoCaOZFkWgxAEwlCY2hEMRJURQ3CUh0A4AIEAcCEIdqJC 4AcIDgEOQuClGQwYTQC2yWBYRT5FU/icTIyiAOTxEAubCoUlkIYk7gAKBvC4Q+gaPggICwAS EgsLhGhVA4MIACsNABEIXxpKBA0NKysRDVJUMT4GpaZGSCMyNKU4OjAoKiwuMLUlIQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:44'! dirtyMonticelloPackageIcon ^ icons at: #'dirtyMonticelloPackageIcon' ifAbsentPut:[ (self monticelloPackageIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self overlayDirtyIconContents readStream)) ].! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:24'! dirtyPackageIcon ^ icons at: #'dirtyPackageIcon' ifAbsentPut:[ (self packageIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self overlayDirtyIconContents readStream)) ].! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:38'! emptyPackageIcon ^ icons at: #'emptyPackageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self emptyPackageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! emptyPackageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEWen39fXz9/f1+CgmKF hWWIiGiMjG2RkXKlpYWyspK5uZnDw6PS0rKbmnqjooO+vZ3x7sL///8AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKdzybAAAAEnRSTlP///////////////// /////wDiv78SAAAAAWJLR0QfBQ0QvQAAAAlwSFlzAAAASAAAAEgARslrPgAAAGVJREFUGNN1 j1sOgDAIBAH7oi/1/pe1W4xRk+7HkEzKhtL5Cy0Fv4SmEQHURNpLUQGSiV6OmgXoJqhUiAEy 0TRnZaBNwTLCbGO+iOhjINpKeEqDCf+UehMOfQK4+7BtRIC0+MsnF+ymDJF0K83MAAAAAElF TkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! forwardIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0ji5ZIsdgCd5vADAHyMnqzWMwgMPERNo1FAHAyCggAhyAw3DMaC EF/I7QyOEDPpK/4TCoGCI0IkEogRihESCYwkRCGSISCUDxAWIVIiFQ4iUiclFCWgJyYmpalS QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! helpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAP78/f7+//Lz9/Hy9vv8/46Zr/z9/4+arpKdr7W9yvf6/9zj7cvT3tzk 79vj7rO9ybS+ytrk8Cphl1N/rJaxzKO706K60o2esLO9x9vl79rk7tnj7dzl7tvk7fn8//3+ /yZimClimShhlilil0Z1oU9/rVGAqlB/qVJ/qFOAqV6KsW2Tt3icvpSz0JSyzpWzz6G71Nvl 7trk7SZilidjlyhkmCdjlShilCljlU2Aq0+Aq1CBrE+AqFCAqFyJsGmUt5SyzJWzzZezy5ay yiZjkk2BqU+Bpl2NsZSyytvk69rj6ufw9/b7/62xtPj8//f7/u7y9ZOzypSzyNnm79jl7tvm 7Obv9Kuws/f8//n9//j9//b9//X9//T8/ury9Pr+//n9/vj8/fb+//T+//L8/fj+/vf9/ezy 8vz//6iysfv//vj8+6izr/3//v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAG4ALAAAAAAQABAAAAfLgG6Cg4SFhR1DOSMSOkML hm4QOkIdAgMyQjsJhQ8ISQFaY1pcAA0XGINVJxpoGyQhIjYOAR0mj25AFG1PRzYrQDc4WGpS LYI9VAYEFSxaWCYzWB9KE4IjZ1oeWV9aKiIqBltQN4I2Xk5lYlg+Nz8EYmtnNYImEQpOXGBE IFphZh4MSgiKQgHLEy1ZYFjoIoYLliBIBGXgMYUJEyzBulikYiTGoCYFOjDUIoYJGQ4HrhRi U8RFgyVWOLzIkQaSBiApaNBAMcQjpJ+EAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! homeIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAACM+gCdBhNre6BM0fC5NjxI0fCE/fV17r9ne505upU9uo1Z1qld3qlh3 qlt6rlt6rVt6rF59sF58r2KCtWOCtdje5yJHeSBHednh69fe59be5+30/PL4/+bx++f0/+Xx +8zX4Ov2//H5//j8/+Dw+yRTciVUct/y/uT0/ef2//X6/eL1/+v3/eb3/+b4//T8/y1kbClh Zv7//zt/ZDZ6XTyFYD2GXzmEW2JmYWdtZWzBOmhtZW9za7reHWVmX+3rAvPzBWhoXJOTg66r cpOPW66qc//7zpOSg396TWhmW//1v5SRgZSQgP/yv//qqv/srXJtXJiTgm5pWp2Te5mRfv/e lv/fmJ6VgP/Pc6KVfP/PdP/Ug6WVeaSVeqGTeaaWe54/NaBCN59FOv///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGQALAAAAAAQABAAAAewgGSCg4SFhWJFgl+GhUNg ZF1GXIyDYURZSlBNXpRkSFdPUhhSTlOUUVZBFWMVSVVUhktbPgJjtgI+W0yER1g4CGM3NTdj CDhaQoM8Oxm2Nj82tho5PIQFIDJjNDM0YzIgA4UEYyojtmMjKmMEhQovGyIxMDEcGy8JhRMs HyEmQCUhOrCgUCgCChIeLPS4kIIECgmFIKw40cKADgMuTqxwUOgBgwUHAAQAcGBBAwiCAgEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! imageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! jmeth_objIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGiUxXSdyYKn0Ims04uu1Nfj8d7o8+Ts9UV9tE2DuEt/s06DuE2AtFGG u06BtVKGulOHu1OGuV2Ov2CRwl+PwGKSw2GRwmSTw2aUxGaUw26byG6ax3ahzHukzn6mzn2l zYKoz4is0pGz1pO015a215e215q52qjB26nC26vE3bHI4LzR5tzm8OXt9U6CtE+DtVKIulWK vFWJu1aKvFeLu1uOvl2PvmKUw1+QvmGSwKrD27DI37LK4N/p8qbE3sfa6v///////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAQABAAAAefgEGCg4SFhj8DFRMWAz+G giQTGgKUGhMkhiQ0ICY+niYgNJiDBQ0dLR2pqS0eDQWDAxsrQAcctgdAKwEigxc1KkBAPRQ9 wTs2F4MQDCdADixALA5AJwoPvTAoQC8vLNzULsmCIjMpQBHo6EA6MiWDBgg5PTn09Dw3CK+D IwkAH///cMQYYWjEAgwZEmJYQPDRjxASYEgg4OiRxYsYgwQCADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! jumpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! lockIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPz8/v39/mh2kqSwyPj6/l54qGN8qGqAqGqAp36TuZipx6260rrH3+Hp +OHp92J8qHKGp3uMp3yMp6Sxx97o+ODp+N/o9+fu+vT3/EtuonKHp3uNp3yNp/L2/Pj6/YST p2x2g4STpouXpuTt+Obu+Orx+vH2/PD1+/P3/PL2+4uYpujw+e3z+pCbpvX5/ff6/fb5/Pn7 /XqBhc/t++H0/fv9/f3+/sPEu7m3qKCYbJuVcKyoj6ecaKSaapWQdf3zy/Tmtv3vvf3wwv3y x/3yyf3zzraSJPXaiPzhj/zkmvzmnvzmn/zmoOXgz7GLIbSPI8GeOKaJOMekRbiZRNi9bfDX jtnEh+XRldzPrHhbE6d+HK6GH6uDH8WwfdLAlNHBm8Kqc8m2idbLstnQvPPt4f///////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGYALAAAAAAQABAAAAfPgGaCg4SFgzyIiYqKgj0z j5CPPJA8gjkzI5maIz4zGQw+gjozJKWmJDIzHSkygjszK7GyKwK1tYI4NCa7JiW+IAMTEyCC N2FQUF8YGCwsLQ4NFS2CYFJkZFJeLi4nKhYWFCJmYkZYZWVjRk0vKCEzFxcfZl1aYV1dYVpd MTAbERIcIph5gqSIFSA/ljypEUMDJAhmnAwREmVKECZOAgA44IkBAjNbiFzJkuWKki02bDyY 4YGAATNcqiShQiXJES4LFCQowLPAPC1Ag3YxZCYQADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! logical_package_objIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPbpu/PhsvXjtfDesu7br+zZrsGYRPLaquzXrubTrPDo2Pjw4Pjy5uzR pezSpuzTqOjMoefLoOzQpefLoeXLo+DDnOHFnuPHoODEnt7Dn93CnvPr4MWDMty/mti7mPPq 38F6Lb13LNS0kde3lNm6l9e5lrpxKtOyj9Gwj9S0kte3lfDo4Ojg2KZeI5NVH6phJLBmJ8qm h6JZInE8F3A2F55wWHlPQMCooP///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaEQJxwSCwai7MjEcQEuZqgIwjgKNUIAUzUaHhARrWJpBI6zjYf1k1BQpmG0Gfz Vqu5krhp9ZoFMQoaMEMhXmBiZAsHFy9DJh4qMTYpbSYrFx0tQjMudTaedS40BjIcQzADESI2 CYCCRi8CDSQ1CIqMRi0UFic1GZeZRhwywy7DpEpDeEdBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/14/2013 14:52'! migrate16IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJBSURBVHjaxFNLTBNRFD1v5s2n ndLOYEdIC0U0IbYYwWATY0JC7ML4C0tBN7hw5dKNC/duWLjR+FkoidGFIXHBQle4MGKQiKL1 ExsjCgH6s9YZpu18nkUjATVx0YUnuS95ue+de/LOeYQxhkbAoUHQ1M2hf08hLud57FHFsW/J gu/yXxVogjPaLPPPNZnO+jj7wsZDHuM9kYo9AUm5VLLKXX8QhERuuUWLnh3YubcnFU/2duix c4rALWzWwd6fSqagB7R01iitk3BhCY/370i0nD88gmR7Gzo1EUN9fTjSnYz6BdEKiGLOLwi5 mKZ3JiIRjA6epJHglvSK8VMJOTg27F0dPkNEpxmLpY+49+o2Fr4uId6SgB6MYenbCgSOQvXL KBg56EoQIUXHtalpp2CtnqC25xEQP5r4MHycAZ+oYldUAwGPorkInlXhugz5MoPtuniXncc2 tYx9MZ0+/LB0kUo8z6xakUx+mkHeLGK73got0ApFkJHJZ/HFMuoucGgPaZAoj4BEkcktY+rN nGnY1aNUFbyJOzOTx9pUHtOfn2Kgqx8dzRGMz07hyXymQAgp1C0kTbKkjST7w5ZNcHcuba6Y hrpVaXLIgRvHEZZp2iN8gpIKJMEHo8ZQs2svTIf1/nptgcOzQ/Hde+6/TZuL5aKqKyHnR5DW lnzF6dYl+7QDfrBiW57j2uOrnji2yUSQ+MTrl6xUMdYvrxOsIVcl1+uRqRep78Tf8u5yrsce VG3nSlBSnI098t8/U8ME3wUYAEK92uxZ9EygAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/15/2013 21:09'! modifiedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QQGEA05RBIJeAAAAlBJREFUOMulk0tPU2EQ ht+vh1OgxXohJFAQLzQR8QZeEiHRQKKRoHHTuBC5/IL2z7B2wSUQF8QFKCaAGHAjC8MGNMRC aaFATJEWOLTnfDPjwliQxpDoLCfzPvNmLkpE8D9RcDQRD4drhLhdg7rEdsoZDBG9QeA+Fhq8 8nIocrheHXawGgoHNVOP73KgwltfD3XKB2QycDYT2JqYwI+t5DoJhRr6Xg/nAVZD4SAR9Z55 0Oz13rgOWloANuOAbUOVnIaqrkZy9C3i0W97TLr7ztDYcA4QC4UuCvFM6f1Gv+d2A2hqBNZ+ BoocFLpNKBaInQHqbuL7u3GsbsYSLPpe06v3Sy4AEOIOj7/UX3ytDjQ9Bsrug7MWTCsN3k6C 0lvgjAVnZhxlLS0ozmT9xNQBAC4AYEWd3qu14C9zx05dL0dQUd8EFt2Z2wIJVRZ4PMDiIrLR JViJbQCAc1TtcsFMOSi6dRc8pytzDsR2wOk0eCcFSmVhnjDzOpMISAxozYAArDRyABJa21+J Qrw+GCcL4ezk9YahFAxFcJ89h9TyMtjRawcA1v3J2VmIP3CsA/N8ALH5KbDo/oMhih7Y9RYl kh+mYLY+BmddUIbxSwgFIgG4AL7WJ1iZfINd20qQkoE/Dunzi6dBFt1bVlLqLWt5CDsagR2J gG1G4aUA3FUXEJ8cQTS5uMeKu9tGF4bzTvnT80dBJt3jJruiqrYR7nI/AMBKxBCZn4ZFmXVW HPotzgMAwMdnzTWinXZtcJcwlYvtQBu8IUx9rPVg29jXvz/Tv8RP+TtdwOVsP3gAAAAASUVO RK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:43'! monticelloPackageIcon ^ icons at: #'monticelloPackageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self monticelloPackageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! monticelloPackageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPPz9f//eurqw+npy/z4pP36v/780vnqefvwofz1vefhtP7hNPLYSPnh Tsu0Q/nspvz0zPrdWvznjP3ur8+rI9KkD86jFsKhPsGeQMOTIL+dQ76bRfru0cKRIr6PI+S0 Q++/WbuYSLiWS+rMjOfPmuHNnriwn8SHDMKEDL6LJriJKfC1PuCvSLeTTuaXDb6BDr+BD/ao HbaFK9qpTrSQUfnhtuCPELx8Ebt8Ebh4E7h5E7OBLrB/MfC6XrOOU7ioje/hyfuaCbR1FbN1 FbBxF9SiVdeFFK1tGqxtGtCOMq16Ncx7GalpHax4Nubh26ZmH////wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFAALAAAAAAQABAAAAepgFBQDheFFw6CiYqEEwYJ D4eKihgjHywzRSslFBmdGRSCGiNAAAMKJBYZEgUIEJ9QG6MAFSe1JxU9PUkxHVAhI060EQQH DLcCDTEeUCLAKCAuNkZLLifIMSlQLcAwIDUcAQtBL9cqUDTAON7g4jfXMoM+Tjnr4UE61zuC DiZC9eJDrvFQRORfECLIlIBKdMQgkh9NFiaqwORbOCYVJCmq8KTjk4waQ4YMBAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 12:44'! nautilusIcon ^ self smallSystemBrowserIcon! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! objectsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! openIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPjomPjwyPjosOjQiPDYkPjgmPjgoPjYiPjQeODAePjYkPjQgNiwcLyF MsOLNrR/MqVsJK1yK7x/MsOFNq1sJJ5mJ61yL55fHZ5fII9SGf///////wAAAAAAAAAAAAAA ACH5BAEAABsALAAAAAAQABAAAAVV4CaOZGmeaGo6rKNulCZrVDoBADEkzOT7pEZgSCw2SBKB csnEkB6GqMFCrVo3EYXWUuh6uwPLBnI4WMpodFh0QVgW8Dh8LcpYEPg8nj6q+P+AL4KDIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! overlayDirtyIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAMFBMVEX6+s4dFAchFwopHQ0i FwoqHQ00JBE+LBYzJBJJNBo/LBZROR1JMxpUODD///8AAACF0F/3AAAAD3RSTlP///////// /////////wDU3JihAAAAAWJLR0QPGLoA2QAAAAlwSFlzAAAASAAAAEgARslrPgAAADBJREFU CNdjeAcEDK93797N8OYu702GV7y87AwvLjBcY3jMy8vK8Ogu7xWGh4KCggCnUxHTmTvaYgAA AABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:38'! packageIcon ^ icons at: #'packageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self packageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! packageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEX58bvt0ablyaG/gjHF gzLbv57Bei3XuZi/dSrBdyvXuJe3bSi7cSrOq4upYCOTVR+uYyWlXCKgWSGiWSLHoIJxPBee cFh5T0D///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAL0p7aAAAAGXRSTlP///////////////// //////////////8AATQKtwAAAAFiS0dEHwUNEL0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABt SURBVBjTdY9JDoAgEARZVFxAVGTG/79UmkmMmtCHOlSGSlDXb6op8kvYoSwCVsTUGxMImESM RumZgFGEN1o7AryIJczuZGCpIkciYubCmOvFhh4DmzxZn+gqYn+iu4iEHgFJRHeURaBr/OWz G0x4EXacxCpnAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! paintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! processBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+1Rkg1dnhvb4/Pn6/FtriV9vjGR0kIiTqKy0wuHp+OHp92l5lG5+ mHODnLa+y+Xs+Onv+e3y+neHn3eHnpqmt+Hq+OHq9+Ts+Pb4+ytcnCtalytYkytXkEZzrVp/ r3KDm3aHn3eIn3aHnuDq9+Xt+O7z+vP2+ilvxCluwilsvipquilotSpmsSpkqythpipfoStf oStcmypalypblytblypYkypZkypXkCtYkCtXj2qa1mqRwZe44pez13aIn/P3/PL2++3z+vb5 /M/t+93y/P//n//fX7+fP//78P+/P5qNc9+fP25NJZxoVlQ4MP///wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFAALAAAAAAQABAAAAe7gFCCTk9OgoeIgk1NT0ZP i4mITUhHlUhNkYNPR0tPS0eFPTsopCgfT0pKT0moqgkIAbEBKYRKnUuqTkVEvEQCKlCTTMOX BBlDAxkDBSvBjEyPTSfTJ0EABiyHhE5AJkIm4CYSBy2HPg9FEerr6gwuhzwVRBAYGBD0ECUN L4cwIEQkFFywoGCBAgsOYhySESIEhRATRIQY8aOhhkMeatSgoZHGjBobNnrI5IGDjRsjSebQ sVJHBxwdOowMBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:22'! projectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtension2IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEVBd69ThroQXJwZY6Am a6cscKhIg7Owyd////////8AAAAAAAAAAAAAAAAAAAAAAAAAHByLAAAACnRSTlP///////// //8AsswszwAAAAFiS0dEDxi6ANkAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAtSURBVAjXY5gJ BQzEMjyhjGliUEZpayWEYdFhCWZMD2gIBzMmKSkpkWAyCAAAf19Ib5Xf/x4AAAAASUVORK5C YII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtension3IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAABDklEQVQ4jWP8//8/AyWAiSLdNDegyF6eoP8Y0cPgYKXhf2Y2bgYGBgaG81efMRhqS8Hl bBqPMBJ0ATMbN4N5RT2DqkckAxMrB5xNtBf+/PnH8O7CLYZXT98w3H32Fc7+8+cfYS8U2cv/ VxRlZmBi5WC4++wrw/+/vxgYmdkYlKW4Gf79/sFw//Vfhr6DD1G98f//fxS8Jdfk/69vu/6/ ODblf6GdHJy9JdfkP7ra////Y3rh568/cGcrS3HD2T9//WG4PydKHF09C7rA719/GQ7MnsnA wMDA8O/3DzibgYHhlyJ/4BuMQMDmLBgutJP7////f4brCwOF////z/j//34WdDUY6YBUMMjz AjEAAFJot416CC4JAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:14'! protocolExtensionIcon ^ icons at: #'protocolExtensionIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolExtensionIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtensionIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAABmElEQVQ4jc2TwUtUURTGf2/m3VcwZBFGE640JmFACUShQaFN61aDazduRXdR7lon/gPm skWIiLRsMQsjok1JEMMoUjlPHZ03M83w5s2977Tq8d5YFLjxwLf4uN/57v0O51oiwkUqdaHu fxkszWSlXt2bBuzj8u6jt69eFuD7zbjGikcoPR1P5PlUbjKeG0iYDt5fvpYvFn/+5nb/rZML L+gcnXBS9ch0SozNzaKcNKffahy8WSFfvKX/GkEboXN8ig56EIYAdL0m3XoLJEQbod3O34v3 JF5ggpCa6yHa0Kq3KO+7TB01UI7C7/iYIMTyu1fI/GEGSzNZGblzlczQAwDK+24kyg1nAWj/ eEflwGflvWtFhyISYXN+VLy9Lal+WJfd7VV58vihHH5+LbWvG1Iprcnm/KjE9SKSjBD0DEql 0Y5COQ654SyOncKxNI5KEfRM/8yTBtoInnuGDnoEvg9As9ZA2RZdP0Cb81ub2IOd5xNS+eJF vKEN1+10xO/mb1B49tFKOPRnimNx+va5zP2wLvdn+p/6BQSj81S4jLsYAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPrivate2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAANhCT+N3gOeIkP///////wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAA AAMcSLrc/jDKSesEGN8wArhD+EkAJ4xRplls675MAgA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:14'! protocolPrivateIcon ^ icons at: #'protocolPrivateIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolPrivateIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPrivateIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAOdgYcgpMMgwNMgpMcgdLPJNXPFNXPV2gMgZKueTi8lDPMlHPsk+OvaS judgYPV8fO2Dg////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABEALAAAAAAQABAAAAU0YCSOZGmeaKqu7Lm88JIqTV0rKdM8fMOkgoOhYDgIUgOI AwCABFKEhFRKSCGuWERry+2qQgA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolProtected2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAL6cKLuYJ7uZJ66HH7ONIrKNIqd+HKqBHaqCHq6HIP7elv7PbP////// /wAAAAAAACH5BAEAAA0ALAAAAAAQABAAAAQksMlJq70468016A2gfFugMIqgFQvjLoSWtMvA HQsCGmDv/5kIADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:15'! protocolProtectedIcon ^ icons at: #'protocolProtectedIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolProtectedIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolProtectedIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP/ysP/pkf/qkbeTJb6cKLuYJ7uZJ//mmK6HH7ONIrKNIriTJP/efad+ HKqBHaqCHq6HIP7bjP7elv7PbP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABQALAAAAAAQABAAAAUzICWOZGmeaKquJUGwFAEAr1oIeGCky8H8jMMApYhMjpNI IgWROCWIlcP5gDUasKx2CwsBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPublic2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAABCGTTSYaEShdH29n5HIrh6JUnGxdYm4gf///////wAAAAAAAAAAAAAA AAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAQpMMlJq704680xEQKxEcFxBGIWGAhiBBpwtAeg DXI9bEMB7J2gcEjURAAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:15'! protocolPublicIcon ^ icons at: #'protocolPublicIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolPublicIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/14/2013 16:32'! protocolPublicIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAABCGTTSYaEShdH29n5HIrh6JUnGxdYm4gf///////wAAAAAAAAAAAAAA AAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAQpMMlJq704680xEQKxEcFxBGIWGAhiBBpwtAeg DXI9bEMB7J2gcEjURAAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! publishIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAL/F3UhgoExin1Fmm1hqmF5ulGV9sGRykXGEqmh1j292hHV8inmRu3WH qH6VuYSYtam/4LDI5bHI5YSQn2V9lLnS6c7g8LjT6bnT6VyFpU6PvVSLs8Hd7sDd7cHd7dTn 8sbk8Nfs9U1aXfrpnvrvwPbflv/xwv/11P301//rs//xyuzRi//lpP/tv//aif/flv/Rdf/V fePBfdmycffjy/vs4MnAwP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaIQJwQN1kYh0jk5Faj0RZJoXEyIpVWsplxYeviBhAUykQuk08agDCRarvfqs3w wKrb7y25sPB6Ff6ABQ0PGw8NOAQuigQgjY4hGyEIXzExAx4dHZgcHh8bDkICMAIXpRcYFakW ejgBARGwsRKwDBlIrri5BjgUUb5CCr9JCsTEwkMiCiLHSMs4QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recentMessagesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAK291u7z+0tuok9xpVR2qXuWwO/0+4qdtPn7/QU0YM/t++z4/fL8//b9 //nONNbQvJuFSox9ULGPPrORQKqLQfKqC7SQPeiNB6VkFaVlFaRhF4xZJ6BVGptLH5tKH5pH IP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZeQBCIICwaj0OkUkg0fjocDebYFAg3l4ojQxUWrB9PlGsEEAaC9ETBtiy/oLXB IFla45Q8ZVmEKOYQfEIPCwgBEUgHCUWKBw+ISItCCQySSpYJDZaRRZmbR4uLjYKkQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recoverLostChanges2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAImEhUhvwFJmj0xfhVVqlFhtmFVqk1twmkxhiE9ki1Jnj11znUhllnV/ j0tvonGq5ZLC76PL8arZ+n654On4//H6/tHy/8fp8/z4nPz4nfntWfz1m/blZPblZ/blafbl avblbffiavfia/TaT5OOc+3HL/vYTfLNTum9KvHDL/HDMMWaGfjBI8SXHO6+LsGSIKaUbL6E Fb6NJrqIK7mHK9+PD7aDMbaCMbN9NrJ+NrF9Ov///wAAAAAAAAAAAAAAACH5BAEAADsALAAA AAAQABAAAAZ+wJ1wSCwajavk6rhjCFemjSe1FAYCDoZ213KNULXYMDB07l4iDCf1GjqMMlGm k5IJteYhLf1JzcpGNyEYICo2TEI4JxolLDk7AwgJCgYFBwtCOpo6Vg8TEBESF5hHkQkCBJak RjAWrq8wTCQWFLW1JEwAFhW8vABMDcHCwUdBADs='! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 14:27'! recoverLostChangesIcon ^ icons at: #'recoverLostChangesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self recoverLostChangesIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recoverLostChangesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJJ+itPL0MfG1MPE1VxlnVxlnLi92k1boz5Tqj9UqjFLrzFMr7K73WZy jAsaOGx8mZC27AY3d9Pi9xpJgxpJgiJQh4GPoGKk7bC+zmeq75zG8m2y8sPf+XK59Ha+9qnW +LHh/eDz/uf3//H5/eP2/+f4/+76//T8//zTrfu5f/jAmPvXvfmbePvDs////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAA AAAQABAAAAZtQJdwSCwaAUjjUZVqBZRCpMfDQQICz2IixAWsUCwAQymQdjaZi7U4SIDe8Hei WJAQPo28Pk88GA4aDSSDhA1GCBANIg4lD4yGRQsKDSYWIxgWJpAVExERQg0noqOQLpyfLnt7 RBUUUEoVr7JQQQA7'! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 14:49'! referencesIcon ^ icons at: #'referencesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self referencesIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! referencesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAYlOhBrrbXe/87v/+f3/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAUALAAAAAAQABAAAAhjAAsIHEiw4MAA CBEeTBjgIIGHAQRIDPCQQEOBAQZoDACgY8aNByUKuFgg4sSFCQUUGMmQoAAAAgG8NDhw5kqZ NAXOnInTIEOSPx1CFGrxoMYBQI8CFbn0JMaWTxPmnErVYEAAADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:16'! removeIcon ^ self smallDeleteIcon! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! scriptManagerIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAEpZfHaEnHmGmomPj4mQj0pUM0pTKtXet9XdsdzjtdzjttXcp9zhqtzh rNzhrebqvtfbk9fblNjcltjcmObpvufpttzdidzei9zejefotdXTUdXUWvDww5eXhubjd+He fuHff+HfgeHfg/DvvfDvvs3ITc3ITs3IT83IU+zlaOzlaufidebgdPj1w/DlX/DmYPDmYuzj bOzjbaKffvjqXvjqZaKaUYp7NYp9PYp9P5GFTrKoda6ld6ujeYp7OIp/Uf///wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAdwgECCg4I7O4SIhDscDzyJ iDstFAqOj4UtJAkOlY+RIxUNP5ZAOzk4GQw3EwKWOgcIPjcSGCKsjz0LNhEXIR4ytokzEBYg KzEwwIkdHywqLycBo0AEKS4mANIDBSgl2KMENTQG3qMAGxoD0oMA6erugQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallBackIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0jh5ZIkdgCdpvADAHyknkFg4Ol6PcSMACEoCAwHRKHR0Ag5DMZi IY8T6IyNcDRRKPp9fhODGEMkEhEJiBGMEo4kRCEWEA8gIZYhmUYiDhUiUkIlFCWgQiYmpaml QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallCancelIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMczNfRxdPRzdPNydPNzddgqL+AsNN8sM8cpMOY2PuU2PsUgK+UwOfJV YPRja/NjavNja/Nka8UYJ8YZKMUZJ8YgLPJUYMUTJfE/UvA/UfJIWPFIWNRldN+cqMpdSc5u XspXRspYRslYRtWIfMlQQ9ymoMlHPslHP8hHP8c9OeBhW/WBfcc9OuNST/WAfvSAfuPExP// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAA AAAQABAAAAZ8wJhwSCwaj0eYZ1QceWBEWKgVYgpHohYIKiyRXCvSp/QhvcIl4ghFEKhMqkHg ZCVyWBHIw/FIcZAACg0NFgkASDEIDBsaGgwISBwVGJSUC39FHBOUBRIFGBkUmEIdF6AXHB0c phkXHUMwFwaoQ6sHF1xCsaNCq7mIwMExQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallCenteredIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAIAAAENKh////yH5BAEAAAEALAAAAAAQABAAAAIXjI+py+1/gJwAPoqldblu 1lEfmI3mGRQAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallConfigurationIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJKAiruyu4t8jYR5j4B2kXZxlXGFrH2RuX6RuYaawmJ3nWN3nHGFq4uW q1Vrj1Zrj/v9//j8//r9//H6//T7//f8/+35//D6//P7//b8//n9//z+/+z5/+/6//L7/9Xz /+v5/+76//H7//X8//j9/+z6//T8/+77//P8//f9//v+//b9//r+//n+/////////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC8ALAAA AAAQABAAAAaOwFdjSCwahZ+kcqlsIEGAKGhKnTobH0DAFQBwOKXSt3T9CFxogSWBYCweoTJh GyB0Oqf7vTwp+EWAExciFxdlHogYGB4oih6KZSZRACMjJiMUlyZlWlwAKxkrFSkVGWVnAy4C JAkHBgoOEXJ0BC0sEhq3EmUQfgUQECrCwhBlG8fIycdXRs1EL9DR0tMvQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallCopyIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPP1+/j5/GN6p+7y+vL1+/n6/Pj5+152o2Z+qGqCrG2ErXGIsXOJsnyS uH6Tuoygw/D0+4GXvISav4mewZGlx97o+N3n99/o9+Ts+efu+e3y+vP2+9zn99/p+N7o9+Hq +Orw+fb4++bu+fD1+/L2+/X4+/f5+5qaj6Cdi52bjq+ngaukhKiihqOfirese7Sqfse1ccWz csOydL+wdryueeDIj9SyaNSyadq9fNWyaf///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAA AAAQABAAAAaaQJ1wSCwKYchk0qiLFZ5KJVFmChicz+wNNpyVKBGqtRrA5bg6GmFD8oIVh1AN Z5vpXCPKQ83eADaAGzQ6LxoaA3h6Eg0MCQIQLjoqIHqFh4aYGi86KyIZGZOKjI4gKjosGHqd n6wZnis6LR+zqKKNAhgsOigdFBOys8HBLTopHBwWvL4OCwgXHhUoOifUJ8bI2BYWHClF1d/f QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallCutIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAANjb5r7DzZ2nuba+zBcyXXmHnU1ge2KLs3OVuK7F3WGLsytto0d9q0h9 qxFemxJfnBJfm////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABEALAAAAAAQABAAAAVRYCSOZGmWQnCagDGsZVDAZTGL79oK0VAYI4RwJDAUCwOA SJGIJA6RAsHgKjFEiYbNqCwtEuDFoJgzPSAOHJA2GggR7AjTCaVdnQ32Nxw/p0khADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDebugIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAALGusR1ieR1jeR1jeB9leR9keCBleSJmeiFneSRoeidqeydreiptfCpt eytufCxvey1wfDhWUzFOSiA5Mi1ORThWTjFWSihBOTFORShIPShFOS1IPSM+MiNBMi1OPS5q Ijp8K1ONPJLBf3OnWJbDeZXCeZ/HgabJh67Oka/OkbXSmdvrzLbSmbjSnLjSncbcrtXnwtvq zOfz28fcr8bbrsfbr8vftNXmwsfbrv///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADkALAAA AAAQABAAAAZ5wJxQWBkaj0PJMII0AjYAIaZpkVAyEAhAE23mABBZLQvJTS5Nx+yzur0eAIDH IowwAY2YbGVzMbpGGBoKMCsiNCwnC00cCS82OCMpJgkTHkdcCC0qKCEkB1FKQxQABAYnJiUg BUh0QhMBAwIBXkMdcbVGGblGrry/QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDebugItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAALittxMTQ9fX5iAic4+QuSIpedPU4Dc/g1FapOPk7lBapFVfp1liqVli qG53s3J6tMzP40RQm0NPl0tXn09boFdip1lkqVllqWBrrmNurmRur2Vwr2Zwr2t1sjJCjTpI kENRl2Rwr255s3WAtX+Ju+bo8iU4hDxNlNjc6YyawIqZv5ypx7nD16O0y6O3y67Dz67Fz7LI 0LbL07jN08rg28ri3Mri29Lm4B+ETsLez8fg0z2WZESaaVameHOzj1erclircVircliqcU2n ZU2mZWGwYIO+gYO9gZPFh/Hx7f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEoALAAAAAAQABAAAAeegEqCgg6DhoeDGoMiiIYA CwCCGY0dGhcKHx8AE5GNSgARSTQgEhFKHhKNCDQINTczFAAADRuCIowADDZJojANnYYYExY3 SQY3Misehjg4ORAjMzQ3Dy4qJx4VgjhIOD06KC8xLQckJpEhSjhHR0Y4PAksKSQBBcxAQj8/ QTgCBAMDDuEYQmQIDh8lgAksgmOHDiUKPKlzJoiDxIuIAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDeleteIconContents "Private - Method generated" ^ 'R0lGODlhDgAQAOYAANDY6GiYyGiQuHCYwEiAsFCIuGCQuGiYwHCgyAhYmChwqDh4qECAsEiI uJC42LDQ6BBgmDB4qDiAsFCIsFiQuGiYuHioyAhgmEiIsBhomDiAqGCYuIiwyJC40JjA2Hio wICwyJi4yChwkCBwkIiwwKDI2BhwkDB4kHiouCh4kJi4wDiAkJjAyKDI0LDY4Dh4gECIkDiI kEiQkJjAwKDIyKjIyLjY2MDY2EiQiICooKDAuLDIwMDY0IiwoJi4qKjIuLDQwLjQwMDYyJCw mKjIsLDQuLjYwKjAqMjgyLDIqLjQsMDYuMjgwMjguMDQsNDgwNDguNDgsNjosP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAOABAAAAergFOCggSFBIODAAMGBQwR CgoLBAYAggcPLjdIT1BIPDYPB4IADQ0UAhUbFBgSDZWCMTk9MT4+MT05MYg4SU44UVI4R0Mv u0RKOFBROEpEMogwP0UwnDBFRDCIKzo7K0xNKzs6K4gnKjUnQksnNDMniCIkLSk8RiIhLCmI Jh8lIzZBRnDoMAJRhgMeMtgAksGCgwyINBBAAAEEigsTAmhANEVDgo8gN3IcyTEQADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDoItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAACCAQSaAQSaIQUGRV16abzqITzOISGatdy2IQUiRV0iaVzqRSEGRT2at bzqIQTN3OkGISEiRT0+aV1ekXi2AMzOIOkGaSEiaTzqIOkGRQVekV0iASGakZnetd63LrbrS utXg1V6aV4i3gG+kXoCtb4i3d5rBiIi3b5G3d5G3b6TBiIDMJsLpeP///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAA AAAQABAAAAaYQJdwSCwWQYdCIFA4gIyug2G1MqlEnGbxkCitWqtUCoVKHIYgA+n0aYFP8JPh GZWMRm336n4/uwwhgXl6gR0GQgYbih5ujSwbHQFCAA+VjI0flQQAQgEUn5ctHp8QE5JRDBER lx6qFxIDfiAIEhmMHg4OGRcTCHRRCxMeHhUYFhoTC35DBwgKEw0NEwoIy0RIAksCTlDdRUEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallErrorIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPJ0dulqbuttcfm4uvm6vPvO0N9PV95PV+5YYuJUW+FUXO9fZvvJzM4o N84pON1ATdZMWOtVYPFea+OGjc4lNc4uPs4wQO/Jz+artc9uXNeKfduWislHPs9aUuRmYfN8 fOt8fOPExOvU1P///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACQALAAA AAAQABAAAAZqQJJwSCwaj0iSaJPpZDQiZIjjAVk9nJBRxAF8vl8AJ0qcGADoNOAwKUIChIJc ThBAihXJaM8fSSpuEQMMhIQDEXdlDwiMjQgPbUQXFAgLlpYIDhdGGA0JAaAKDhhIFxMQFhAT m0mtrq9JQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallExportIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAD8/nz9fn0xnl1FtnlFsnVRvoVBtnVNwoVFtnVJunVh0pFh0o1h1o1l1 o1x4p198q2B9q197qGN/rWR/rWaCr4WhzYahzZ2z1l99q199qmOArYWizYaizYaizJCq0qe7 2qe82q/B3TNwpDNwo0B3pw1cmv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAA AAAQABAAAAZmQJNwSCwaj0gjaVQqJYkkkfMpLEWppimJCjBGKGBiYAguh0KUYZd8pmhCGolw TJRIQpPHB/LMgDAOFw5PgQ4NHgkKDAuMjY0eCwccHBscFpUbGx0cFZQFAgYGAwgGpKEIqASo WERBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallFindIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAALClrLu1ubOpsKqdp6eapKufqMTAw7attLSrsrGnr62jq8C7v765vaeb pb22vLmyuMbCxsnGycfEx8G+wcrIysTBxUltof//yf///v70jergpPvws+nWc/npqvrpqvrp q/raffffnvXVkfTVkvXUkd+9f+SiOemvV+uyXa2OX7mYZqeIXKuNX/ClO7KQYqiIXJ59Vp19 VpFvTo9uTZBvTpNyUJNyUf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAZ4QJxwSCwajS2aS1U6DlunzcagcuKgG4sn5HJiLZ2QiHbEbj6hEapVTKVYr3OI tG5TIhVGLF0npigUEAsPAjV9Q24pEhMBCAoybEUmGRcrDgcAAzNGkxcYNzAJBQSbRJ0YqBc2 DaVEHJ6pGTStRBqfGBcZILRWvThBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallFontsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAADdSlm2LsqK1zitXj4egwEF0qMDR4v///yH5BAEAAAcALAAAAAAQABAA AAM1eLrc/jBKI5kZVV2cC+HHNhRWIXBGYVyUNrxcgRUAM1BfeB9DsOw8EgtGks1eFBkrw2w6 KwkAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallForwardIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0ji5ZIsdgCd5vADAHyMnqzWMwgMPERNo1FAHAyCggAhyAw3DMaC EF/I7QyOEDPpK/4TCoGCI0IkEogRihESCYwkRCGSISCUDxAWIVIiFQ4iUiclFCWgJyYmpalS QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHelpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP7+//Hy9fLz9czU3tvk7v3+/yhilkR2pF2JsV+KsWqSt2yUuHmdvpWy zKK701CAqvX7//r9/+jw9fT7//f8/+3y9fb8/+zy9fn9//z+//X8//j9//f9//v+//b9//// /yH5BAEAAB8ALAAAAAAQABAAAAWA4CeOZGk+j2Ggppg2hBAQzVo+cMHtHEA/JAOhQDiohETD CJfhJAyLmoGTaQA/D0Kk42DsUpwO4Wq4YDCRHcKAiEQqyk95Q+esFRj6JZ6lUHYqO38DVzh+ fw4OFh4WFFYjQhoaHCoaFhoEcS4wEDwQEz83BjASEjQ2LSgqLC2tJSEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHiararchyBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAG92hCaASDmHUkyTY0OSW1WbalWba1aYalueb1OXZ16gcVGVWlSWW2Kk Y3GucHSwcWupZ2ypaHqoa6HGhv7977qXJsSlQ6+IIK6IIK+IIf///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAVEoCaOZClaqKlWVKWaGXaNCKG8wGg8k1OogCAgAGlEAq/R gCFZDJKjhOAAJeWqo6sGZUkKASwXbhSbjbEiLdcrDKPLmhAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHierarchyBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAG92hCaASDmHUkyTY0OSW1WbalWba1aYalueb1OXZ16gcVGVWlSWW2Kk Y3GucHSwcWupZ2ypaHqoa6HGhv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABQALAAAAAAQABAAAAVFICVSCKGMaGo8k1OkcAA1UQCnAyMtw50mgoMPBhiVTr4i ZdV63QBQGc32FOV2vaoIKEwOiUbTUMl0JaOzmpdy5a0pXFQIADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallHomeIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAACM+gCdBhNre6BM0fC5NjxI0fCE/fV17r9ne505upU9uo1Z1qld3qlh3 qlt6rlt6rVt6rF59sF58r2KCtWOCtdje5yJHeSBHednh69fe59be5+30/PL4/+bx++f0/+Xx +8zX4Ov2//H5//j8/+Dw+yRTciVUct/y/uT0/ef2//X6/eL1/+v3/eb3/+b4//T8/y1kbClh Zv7//zt/ZDZ6XTyFYD2GXzmEW2JmYWdtZWzBOmhtZW9za7reHWVmX+3rAvPzBWhoXJOTg66r cpOPW66qc//7zpOSg396TWhmW//1v5SRgZSQgP/yv//qqv/srXJtXJiTgm5pWp2Te5mRfv/e lv/fmJ6VgP/Pc6KVfP/PdP/Ug6WVeaSVeqGTeaaWe54/NaBCN59FOv///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGQALAAAAAAQABAAAAewgGSCg4SFhWJFgl+GhUNg ZF1GXIyDYURZSlBNXpRkSFdPUhhSTlOUUVZBFWMVSVVUhktbPgJjtgI+W0yER1g4CGM3NTdj CDhaQoM8Oxm2Nj82tho5PIQFIDJjNDM0YzIgA4UEYyojtmMjKmMEhQovGyIxMDEcGy8JhRMs HyEmQCUhOrCgUCgCChIeLPS4kIIECgmFIKw40cKADgMuTqxwUOgBgwUHAAQAcGBBAwiCAgEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallInfoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQaAPb9/wJGjA5ipFWQv7bQ5MfU0PT7/5a2xff8//j9//r9//f9//z+//X8 //3+//n9/+zy9fb8/whUmPv+/wxcn/Lz9e3y9f7+/wtdn/Hy9f///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAWIoCaOZFkWgxAEwlCY2hEMRJURQ3CUh0A4AIEAcCEIdqJC 4AcIDgEOQuClGQwYTQC2yWBYRT5FU/icTIyiAOTxEAubCoUlkIYk7gAKBvC4Q+gaPggICwAS EgsLhGhVA4MIACsNABEIXxpKBA0NKysRDVJUMT4GpaZGSCMyNKU4OjAoKiwuMLUlIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallInspectItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAKmyxouWqxcyXVVsh665xjJObuTo7NXz/+v6//z//////wAAAAAAAAAA AAAAAAAAACH5BAEAAAoALAAAAAAQABAAAARLUMlJax0DWFv0qEAxBFJXUqH0ZVtahkUXwwU5 FQeCdGG+UwVEIlEoCYlAQ8JVULokNBtNs6laBQpsVqC1EAQECWFcxWq5Xat6LYkAADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallJumpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLanguageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOZfAP79772EFqa72PzuuI6o0ODp66ZrEP30zpiw0yRonFeDqsjW47mcZfzp pJiw1Pvll9bh57fJ3v364kF4pC1tnv354ihqnurr2nqVrfvopP354a6QYqhtEbJ3E9nZwrV8 FOTr6rC7p+Hn4MLPya+hc7vBnu3nxdjd1lOBqc7Y3mGPu2iMqJWzyrqymIWpxSdqna6Ycdbh 6EmAs/30zS5tns62gdHQuMy0gLbJ3rfI3qhtEN3AgnSSrChqna50E5yeopCwyZqKWufgtcvS zb2me8avftGpVOTr66rBzKtwEanB0cjV47mcY1yFpdvj5enu6FyGpTNwoEh7pqCzp6a5srOe eLl/Ff764buBFuLize/y5sfSxr6+qr/M1kyBtP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAF8ALAAAAAAQABAAAAeagF+Cg4SFhoeIgwwBjAEM hhgKCiRcAJYAOwGECkAFNUcsSpeWWIIoBQU3BSBPWkgVVxoSElY8LhAxRRBOIhcjWwfBMx9S CwtLRAspJ1kmVAPQAx0TOBEROVVdQx5CUw0NGT5fKyoC5gIwLTYhJQ8PSYNRDgjzCD9MQRw6 RhuENAQACXihMMiAwUFNZLyw0ANKogQQE0mcSFFQIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLeftFlushIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAJEAADk7iUNKh////wAAACH5BAEAAAIALAAAAAAQABAAAAIelI+py53gngi0 MhgPrNzq/HXBBRqb6JmlcHLkCoMFADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLoadProjectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLockIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPz8/v39/mh2kqSwyPj6/l54qGN8qGqAqGqAp36TuZipx6260rrH3+Hp +OHp92J8qHKGp3uMp3yMp6Sxx97o+ODp+N/o9+fu+vT3/EtuonKHp3uNp3yNp/L2/Pj6/YST p2x2g4STpouXpuTt+Obu+Orx+vH2/PD1+/P3/PL2+4uYpujw+e3z+pCbpvX5/ff6/fb5/Pn7 /XqBhc/t++H0/fv9/f3+/sPEu7m3qKCYbJuVcKyoj6ecaKSaapWQdf3zy/Tmtv3vvf3wwv3y x/3yyf3zzraSJPXaiPzhj/zkmvzmnvzmn/zmoOXgz7GLIbSPI8GeOKaJOMekRbiZRNi9bfDX jtnEh+XRldzPrHhbE6d+HK6GH6uDH8WwfdLAlNHBm8Kqc8m2idbLstnQvPPt4f///////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGYALAAAAAAQABAAAAfPgGaCg4SFgzyIiYqKgj0z j5CPPJA8gjkzI5maIz4zGQw+gjozJKWmJDIzHSkygjszK7GyKwK1tYI4NCa7JiW+IAMTEyCC N2FQUF8YGCwsLQ4NFS2CYFJkZFJeLi4nKhYWFCJmYkZYZWVjRk0vKCEzFxcfZl1aYV1dYVpd MTAbERIcIph5gqSIFSA/ljypEUMDJAhmnAwREmVKECZOAgA44IkBAjNbiFzJkuWKki02bDyY 4YGAATNcqiShQiXJES4LFCQowLPAPC1Ag3YxZCYQADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallNewIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+/j5/GN6p+7y+vL1+/n6/Pj5+152o2Z+qGqCrG2ErXGIsXOJsnyS uH6Tuoygw4GXvISav4mewZGlx97o+N3n99/o9+Ts+efu+e3y+vP2+9zn99/p+N7o9+Hq+OLr +Orw+ebu+fD1+/L2++jw+fX4+/f5+9DSy5iYkZmYipSTh/7978jGtJKQgJeVhZORg93axqSf g6GdhamigZ+agZuXhKOcfv30z52ZiMazbsOwb7ysdbiqd7Oneq2ieK6kfaiffNTInv3zz7WR I7WSI7qXJrmVKMOsZMCuc/zno555FqaBGqaCGqWCGq6KH7iUKPvdg5l0E6B7Gf///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAedgFOCg4SFhodFhkeLjEEw RitPhTkFlZUfQ0QrRESEOiYBBqBONzdCQjdOg0glExAKByRNTUlMS4Q7BBojGgAaJUpQUoU8 IhMPEQ0MCSVRJ4U9GRkD0tUlLIU/IMfJywIgPoUzIRjl5uRAhTEX3MoJAhc2hTIe9fb2NIU4 HBMSDgsILHSgUKNQig0bKiRMqNBFIRQQIapoQfGFCkGBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallObjectCatalogIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallObjectsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallOkIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAAAAAAAMwAAZgAAmQAAzAAA/zMAADMAMzMAZjMAmTMAzDMA/2YAAGYA M2YAZmYAmWYAzGYA/5kAAJkAM5kAZpkAmZkAzJkA/8wAAMwAM8wAZswAmcwAzMwA//8AAP8A M/8AZv8Amf8AzP8A/wAzAAAzMwAzZgAzmQAzzAAz/zMzADMzMzMzZjMzmTMzzDMz/2YzAGYz M2YzZmYzmWYzzGYz/5kzAJkzM5kzZpkzmZkzzJkz/8wzAMwzM8wzZswzmcwzzMwz//8zAP8z M/8zZv8zmf8zzP8z/wBmAABmMwBmZgBmmQBmzABm/zNmADNmMzNmZjNmmTNmzDNm/2ZmAGZm M2ZmZmZmmWZmzGZm/5lmAJlmM5lmZplmmZlmzJlm/8xmAMxmM8xmZsxmmcxmzMxm//9mAP9m M/9mZv9mmf9mzP9m/wCZAACZMwCZZgCZmQCZzACZ/zOZADOZMzOZZjOZmTOZzDOZ/2aZAGaZ M2aZZmaZmWaZzGaZ/5mZAJmZM5mZZpmZmZmZzJmZ/8yZAMyZM8yZZsyZmcyZzMyZ//+ZAP+Z M/+ZZv+Zmf+ZzP+Z/wDMAADMMwDMZgDMmQDMzADM/zPMADPMMzPMZjPMmTPMzDPM/2bMAGbM M2bMZmbMmWbMzGbM/5nMAJnMM5nMZpnMmZnMzJnM/8zMAMzMM8zMZszMmczMzMzM///MAP/M M//MZv/Mmf/MzP/M/wD/AAD/MwD/ZgD/mQD/zAD//zP/ADP/MzP/ZjP/mTP/zDP//2b/AGb/ M2b/Zmb/mWb/zGb//5n/AJn/M5n/Zpn/mZn/zJn//8z/AMz/M8z/Zsz/mcz/zMz/////AP// M///Zv//mf//zP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANcALAAAAAAQABAAQAg0AK8JHEiw4MBL CAUiTGiwocKFBhk6nEix4MJLES9irMixo0eJEy9aJCjSokaQGVF6XGkwIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallOpenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPjomPjwyPjosOjQiPDYkPjgmPjgoPjYiPjQeODAePjYkPjQgNiwcLyF MsOLNrR/MqVsJK1yK7x/MsOFNq1sJJ5mJ61yL55fHZ5fII9SGf///////wAAAAAAAAAAAAAA ACH5BAEAABsALAAAAAAQABAAAAVV4CaOZGmeaGo6rKNulCZrVDoBADEkzOT7pEZgSCw2SBKB csnEkB6GqMFCrVo3EYXWUuh6uwPLBnI4WMpodFh0QVgW8Dh8LcpYEPg8nj6q+P+AL4KDIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallPaintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPasteIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPb3+vP1+oeUroeUrfL1+/j5+152o22ErV9zlmBzlnGCoIeVrt/o+OLq +O/z+u7y+YGXvICUtIGUtJGlx4KRqoeVrZenwJinwI6bsI2Yqq+6zN7o+Obt+PP2+4yYqq66 zN7o9+Hq+OLr+Orw+d/p9+Lr9+Xt+PP2+pKbpt7p95KcpvL2+qvB1PX4+pqfoZmgoaGknKio l6+tkru0irawjrCskuDIj9q9fPLGcfHGcfLJefHIefLMg/LNg/LQjvLRjvTVmfPVmvTZpfTd sPXhuvXkwvHFcfLIefPMg/PQjvTUmfPUmvXYpfTYpfXdsPbhuvbjwvbkwvbmyNiubMyoddCs eNSwe86secWaYcOaZM6pdseicsqldNOuesGbbMSeb76Ya62BUq+EVrGJXLONY7yWarWQZ+TW xtTBr////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGkALAAAAAAQABAAAAe6gGmCg4SFhmkYLCwYh4QU Hx8aHxSHZ1hYChcWFhcKYVhnhFZSCRISEaYSCFJXolKvsLFUhF1RUEVRM7q7WYRVRERPRDMF xQU3NIRaQ07MNC0TBgA2yINcTE1CQjUdBCsnJwEyg1tBS0BKMQ4TEAcGDzGDXz8+SUkwI/n6 MINePD1IkLzgwM6dCReDwOzQcUSHihAlGogI0QDFoDJTjODI4WEDCQYpUoDIMAiNGTJjxAhY UGHAgJYD0gQCADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPrintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAIyZuI2auYmYuIyauau52K+82rC92hY6gxc6g0NekoqauoqZuIybuZGd tEBdlFZ0qFRvn1hxn2Z/rWmCrnaNt3qQuH+WvoOZv4ubuVFyp1FxplV1qlV2qlV0qVV1qVV0 qFV1qFV1p1Z1qFZ1p118r2KCtWB/sWWFuGWEt2iIu2iIuoKf0IGezoKfzufw/1N1qVR2qlZ3 qld4q1x9sF+As2uNv2qLvYGgzoKgzoKhzpGftL3O58jW6snW6tDc7ejx/9rj8Nni7+ny/97m 8r3P6LzO573P57/Q6MnX6sjW6dDd7tnj8Nji7/H3//j7/7zP577Q58LU6snY6snX6ebx/+fy /9nj7+nz/97n8uXx/9nk8Njj756mr+r0//D3/52mr+32//f7//f5+/L5/+3y9vj8/+jv9PX7 //r9//L6//f8//b8/+3z9vf5+vX8//r+//n+//r///v///z//6uwra2wrvv9+vz9+ri4qb68 pry5oMfCoLe1p8jBmsS/o8vClMvClczDmM7FmsG7nMzCls7FnMvDody/befNk9GjQ82gQv// /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIwALAAAAAAQABAAAAjmABkJHEiwYEFB hP4AClTIIME+iyIuUrTHkENGg944cfIG0aFEfhzqKRPGCRo5cebkcchnjQUKEiA4gIOHIIEa B+g08ZLmjBo3Y+ogqEGAkY2IX7pcqDAhQgIwXCLaYKTCTpsGVLL8EHKligsdYu6kYISCjJkF CgAwCDAAAwYBZticYFRiSBArS7ToBQJEyxYmWEowoqFECo8pSBL36JGEhxQfJhiRiHLkieUi O4g8MQLlSJQZjGTEgOGhQwcPHja8MM0hhgxGBTKwwJGjRY4VtnHfyFBAoAEND0CIGD5CRIgP GgwwCggAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPrintItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAEOTXkiUXzKESUOUW0mRXbPSvC2ERD+VVoe9laXPsE2XX3S0g4C4jqPO rb7axcbcy8bay9fk2jyTTkOXVUGSUk2WXWCncFaSY3Kwf4G4jXOxf0GNTk6YWlKYXjyNSEqT VFGaW12kaNnm2y98OE2XVlukYyp9MjWEPUWNTFSgXMDVwi9/NT6PRESQSTp3PrbSuDeMOzZ2 OkiYTDqIPUSTRmykbbDOsbjTua3Lra3KrbfQt/X49bjSt12dWFSPT1qSVHS2bHGmZ0qIO2yj X2+kYGyjWcvcxXKmXmWjSIa0boe0bpa6gZK5eLrYpoG0WJ3VYIXOLp7VX5i/ba7ecq7cdvv/ 9vn+8P7/+Pj46P797/jwsPjomPDYgPjgiPDgqPjQYPjYePjYgLCDGbB8FKFuD5poD6l1FP// /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGgALAAAAAAQABAAAAergGhoBUA0BBUZDoKLiwgk UFNSS0EdCYyCEB9KTVZRTkxJHBGXFj1HKmdVT0hEQxqXGz8+OmdnV1RFNQqXAi4xObVnRkIX AJcGKyY4tTcnIyADlxgeLTZnLygsDxQMlyISMjw3MzAPYg/mYowNEyElKeZZYjtiWOqLDwsH AeZYWmL1vNy7hEZMFy0IEXIZQ1CQGTBbIm4BY6ahIDIYw3whY5FRmS9lOnoMKSgQADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 19:10'! smallProfileIcon ^ icons at: #'smallProfileIcon ' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallProfileIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallProfileIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAABhHhRlEgBpFgR1JhCNVmCZYmiBKgiNNhDlnpD9spxZFgCRXmCJSjyNU kCdamiRSijxqpTBdkRZUkRdSjxdSjhhQi3KgzHSjzXOizHelznyo0QJWlwNXlwVXl3SfuXii u87k8H+pv9bs99fs993x+9vv+d7x+9Xs99ru997x+o62xoy1xarM2LLR3eb4/5C5x67O2Mrh 59Tp7tDm6tLn6+v8/+z8/9js78jf4tDl583i4uHx8fD///H//8Xc29zt7PH9/P///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAQABAAAAd0gEGCg4SFhoeIgi8NAg0v iT4EFjtAPxgEPocLOj08njwwHYYhGTWmBqY2ECGFDTkusAOwLjcUhQEzJboHuiUoCoUMOCDE D8QgMRWFHhcnIs8RIiMJH4YOLSTZJCYsHIc+BRoyKTQIG5mIKxIAEyqJ7/Dx8IEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallProjectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPublishIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAL/F3UhgoExin1Fmm1hqmF5ulGV9sGRykXGEqmh1j292hHV8inmRu3WH qH6VuYSYtam/4LDI5bHI5YSQn2V9lLnS6c7g8LjT6bnT6VyFpU6PvVSLs8Hd7sDd7cHd7dTn 8sbk8Nfs9U1aXfrpnvrvwPbflv/xwv/11P301//rs//xyuzRi//lpP/tv//aif/flv/Rdf/V fePBfdmycffjy/vs4MnAwP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaIQJwQN1kYh0jk5Faj0RZJoXEyIpVWsplxYeviBhAUykQuk08agDCRarvfqs3w wKrb7y25sPB6Ff6ABQ0PGw8NOAQuigQgjY4hGyEIXzExAx4dHZgcHh8bDkICMAIXpRcYFakW ejgBARGwsRKwDBlIrri5BjgUUb5CCr9JCsTEwkMiCiLHSMs4QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPushpinIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEWIla4XMl2RmqmQmqgw dLpEdqpGd6tGeKs+hcQ+hMNdm86qyuSryuTF3/RdnM6EtNqEtdrN5PZanMxvtuKz2PBYtuhz xOyZ1PG64fa94vXZ7vny+//r+f/u+v/x+//1/P/4/f/r+v/u+//v+//x/P/y/P/1/f/4/v/3 /v+doaCdoqAAcjYAYS4AUicAlT41m1hytkl9tVGjyoGfp26qqperqZe3sY6/toj///8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABs 3AP9AAAAB3RJTUUH1gUREQgiKKvoswAAAJNJREFUeJx9z9kOgjAQheGi4F73XQsULVUr7UgV fP8nsxljgsT451x9F5MMedYif0Gb/BsU3PIqaFBgHAQtvzMc9a2yFq7awXS2WK42W2XAKjwa tP1ubzyAzGQlQkkxDzL7Ab7n3OOuNxQ0YUnC5owdCoQ73YljKMK1EA+EC02jNHKbRGeEJpUn GcvYrYFAKv349gU7qSnr237mhQAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallQuestionIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP7+//Hy9fLz9czU3tvk7v3+/yhilkR2pF2JsV+KsWqSt2yUuHmdvpWy zKK701CAqvX7//r9/+jw9fT7//f8/+3y9fb8/+zy9fn9//z+//X8//j9//f9//v+//b9//// /yH5BAEAAB8ALAAAAAAQABAAAAWA4CeOZGk+j2Ggppg2hBAQzVo+cMHtHEA/JAOhQDiohETD CJfhJAyLmoGTaQA/D0Kk42DsUpwO4Wq4YDCRHcKAiEQqyk95Q+esFRj6JZ6lUHYqO38DVzh+ fw4OFh4WFFYjQhoaHCoaFhoEcS4wEDwQEz83BjASEjQ2LSgqLC2tJSEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallQuitIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAG2LuVx8qf797/342v332vvpoPzwvPzwvfvjkPvkkPvjkfvkkfzooPzp oPzoofvooPvoofzvvPvehfvfhvvgifvhifvdg72EFrF4E7qBFbZ8FbZ9FbqBFqluEKhuEKhu Ea1yErJ3E6ZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACMALAAA AAAQABAAAAZgwJFwSCwaj8UAAGlUFi+Xo3N4EUSbS+GFMIB6r1OOYWyIHMiZkVPzYDgahUcD Qt+olyEFArFYJP57GHdCIBQVh4aGFSCDQh0SEx8eHR+VQlNCIhYiUllDIpxYTKOkpUNBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRedoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPz62f385vz52f797/375v352f775vvws/vwtPvxtPvpnvvpn/vjke7Y i/vllvvll/vontzKi/von+rftPvehfvfifvgifvhjfvijc24dfvjkt7VudS2X8KpZtK/htfH mLaWSceubcOrcs68k7yDFb2EFryDFrB2Erd9FLN5E7J4E7uBFbV8FLyCFrl/FbmAFbuCFrqB FqxxEapvEapwEaluEahuEa90Eq50Eq1xEqxyErB2E6dsEP///wAAAAAAACH5BAEAAD0ALAAA AAAQABAAAAaBwJ5wSCwKPaWNcVmadIil0rI1MBFJVWNsMFkNV4MBrCiaBCIvV+ZlMBBeRFFE UAA0GoWCYI8afkIICAcJB4IJgQgsQykNEgsQkAsLCo4QKkIfJw6bmw+eDg87RB84HAynDBoa DDdLIyA6MhcXGDlLRDQWFTO3RDYUNb1EPDzCxj1BADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRemoteOpenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAAAADRhqzpnsENwuE56v1R6tleCx12Iy36cyo9SGZ5fHZ5mJ6VsJK1s JK1yK61yL612NrR/Mrx/MqyFH7CKIbyFMrqXJsOFNsOLNvjQeJmv1K/B3OjQiPjQgPjYiPvf ifjYkPXfoPjgmPjomPjgoPzqr/josMDN5PXqxvjwyPP08P///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAiLAP8JHEiwoMGD CBMq/HdAIYaHGA4gOGDhYIMVGCVqMFDCQsWBF0aMKFDghEkCKlJSoCCwQooUAQJsmDkAhc2V AiWY2GkiAAINAj5MmEAwQggSSCE8WMqU6T8HIKI+EEG1KlUOD/4x8ODhAdevX7EKVJDhQYez aM+KFZjgQYa3cN+uHbigrt27CxMGBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRightFlushIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAJEAADk7iUNKh////wAAACH5BAEAAAIALAAAAAAQABAAAAIglI+pyw0cohSv pWqkntiajmwB5SGdqJHlB23qCq7yfBQAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallSaveAsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPj4/IOt8F17q157q117ql57qlVvmkBTc2F9qmJ9qcnb+rvL5OTp8WWB qWSAqMjc+snc+cDP5sHQ5sbU6MfU6M3Z6mWBqGuEp7LD27vM5MDQ5s7a6tXf7dXf7GqFp3CI pc3a6t3l78/T2Oru82+IpbnF0+Tq8XWMpHWMo/D1+u/y9Vh1kXqQo3uQot7r9u/1+t/s9vD1 +X+Tod7s9t/s9YOWoPD2+fP19oSXn+/2+YiZn4iZnrfDxnGDhoqbnrG9v6Wzrv79+uTPnf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEMALAAAAAAQABAAAAekgEOCg4SFgiI+Pj0/jD89 iSKEPjc8QZaXPDc+hDoqPi8xKTY5KT4qO4Q4Iz4wLjAwMzQ+IzWEMgw+Qrq7PiYyhC0hGInE PhghLIQnHRwdzhzN0CiEJBsgIA7ZDhUbFR+EFxQTDgDlQg4TFB6EFhEaDg8QCkAOERINhAgZ Cw66K+cZMiQgVKIAgQICBhRYKGChoYcQDRkIMGRiRYoPDxgYopGjgUAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallSaveIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPj4/Fp5q1t5q1t6q1t5ql57qmF9qdzj7+zv9Ft6qmB+qWR/qGSAqGiC p5ey2bXO8rfJ47rL5L7O5cTS58nW6c7a68/a68/a6vDy9WyFprrM5LLD27vM5LLD2r7P5r/P 5cPS58PS5sjW6cnW6M/b687a6tXf7dXf7Nvj7uLo8GeDp2uFpnCIpcjW6M/b6ufs8s/T2LnF 09vk7uHo8Obs83OLpHeNo+zw9Fh1kXeOo3yQouLt93uQouHt9+zz+dvo8uHt9n+Todzp8uzz +PDz9dvp8uvz+IKVoIOWoPP19oWXn4aYn4iZn4iZnrfDxnGDhoqbnrG9v4qbnPb5+ff5+aWz rv79+uTPnf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFgALAAAAAAQABAAAAfcgFiCg4SFgjBQiU9RjIxP iVAwWE1JSU5WmJlWTpVMWEoYRFBUpFRTpFChS1hINwhQPrFDRrFQNzdHWEE0L1A9vz07QEBQ Ly9BWDwpM1BFP0VCP0JFUDMzOlg2MjJQV97fV1AHKDlYNSYnHZDrGycmNVgsLhYWLhcl9PQV JCUsWBkjKARkQJDgiBYiRqzA0mBCCBAMAEgEcIUBiIsqsCyQIOEDAwcgpUhh8MGDBAZYDESI oIHBg5dVqjBYyUEBlgIQcjL4hqNiTggFsMQYQCCBAAEEAghIkIDAUgKBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallScreenshotIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJnSURBVHjapFNdSFNhGH6+s6lF ZDcpONcWJv1M66buCvrBoi5WGAh5E7SIIiIoLxoliVLgipF00U00MoKgWLoGgWFlWIxAwuzP ag5duUZzbuds7sfOOV/n+04eSgKDXnh5v/c9z/u8z3nP+aCqKhZyWbpD5fwbKn8sp3Lqoh5/ 5QL+xUrqgehmuDrbAOWbHrUcthcgbMJ86wsO0Md9/Ube6W2G6/gj+NztIMtkUNHMSXzXdukE p4+dpcnsInTfPk9Yc8MeB4iSANWmESWm+SRowsPJhNopqOHlOnPFGZCuSz4a/jwGouU/ZKI/ 0MLO3TsMBfucFVzB9bYrMBUlKGXlONJ+iisAIxALquH+u09oaHjccE2hvrDpDnrwkFdf4NQJ jmV1YSYn8ynRaAL9DwbQsHcbHGttiH2KYPDhM+w/cFOT9hZY3KhPZAJNVVhC38HjCUGYFmfx fjSKzEzekMyIQqNhfJeLuNddD3dXBoFgAkJZHQKve0GFargO+8F6zYl0EaKUAfuesXgKS0uB sfAXrLRV42jzRgy+SsFutfBaZlbHwGTR0ONgveZkugBJyvLNRSIxQ4VjTQ3SxUqsr6vk+VA8 ySPHmLbyM+s15/MKUmKGF75OpviUVbUrYLVWaXWJ1/lZq81hbtyPIy8LYL3m0hIFopgFVSkK s4S/Alsk2wOTzYwRWlbX8HNOGyBqA3NFgPWSpqYOum6THex/ZHt4/nQCPb2tHMzIXo5Ejdc6 576FLdvtRv5haALEHximl68G8fulmCNbyFpOOv9+F3qCI/SCN/hHrbXFiUbnBjIfSyil+B/7 KcAAqaNmtdvCPngAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallSystemBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAAFx6qmB+rWaDsZGlx2yKt3KQunaUvv///yH5BAEAAAcALAAAAAAQABAA AAMqeLrc/jA6QOUCAxzDCxFBQ2mWQpYHOUojpn2haFbRWao01GYHXOeoICQBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallUndoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPz62f385vz52f797/375v352f775vvws/vwtPvxtPvpnvvpn/vjke7Y i/vllvvll/vontzKi/von+rftPvehfvfifvgifvhjfvijc24dfvjkt7VudS2X8KpZtK/htfH mLaWScOrcs68k7yDFb2EFryDFrN5E7qAFbqBFbV8FLyCFrh+FatxEaluEa1zEqtxErB2E6Zr EKhtEadsEf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADQALAAA AAAQABAAAAaAQJpwSCwaj7QNyXMkkYidybNIGkyF1atwNBiUhqPJQEVEEQwGVOaEigQmoeFK QC8UGg1AQRCJ01IIgQkHCAeDgSEfNCYQCxIKCwsQk44NJkMwDw4PnA6enjCKQy4MGhoMqAwc LqJELBgXFy8vICJINC0VFi23RDMUMr1EMTHCxkEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallUpdateIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAABVlg1dmQ1dmB9nnSBonR9onTR0okqBplyMql2NqnOas1yNqmmUrXig tI+xwH6mtn6mtYStt53Cw53Cwp7CwqzSxqzTxbjhybjhyLnhyMHryv797/vwtPnolPvpnvnd evHag7eUJPHTc/vehfnNX72EFrB2Erh+FLN6E7uBFbqBFbd+FbuBFqluEKhuEKxxEahuEbB1 Eq91EqxxEqtxEq91E////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADYALAAA AAAQABAAAAZtQJtQWCoNj0jixpg8slKpzUbVFJ5AnCyns2qGRJ5w+INq1kYkmQkdq85ILxuN NKvaXDAhrCVkMPp2Ngwaf4N/TQkZGAgLGRcITQcRFpQVFREHTQYQExQSEg8GdgQNDgMFBYE2 AgoBqkMAAK92QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallWarningIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP7bc//egf/ij/7ijv/jl/7kl//mnv7lnv/uwf7CTP7DTf7DT/7IW//N a/7Na//NbP7QdP/dmbltAIJNAF03AMSAJMSCLKqASa2DS6uBSquCSrGHTq6ETbCHT7WKUrKI UcCVXL+UXMOYX8GWXsSZYMiib6+ETbOIUcOXX86uhd3Muf///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAA AAAQABAAAAZowJVwSCwaj0ihikRSJYcoBEL0XKlGkcjImQQhJBREKFnyICoThKeE/AAW6AXg dPyUAgrLJBEo0YsbAQyDhAEdRRwDDw8OaA4NDQImRBgFEJdglxAEGEQZKQcHBqOkKRpFF6mq q1WtrUEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallWindowIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGh2km95jm56jS1XjzBakTRdkzdgljxkmUBnnEBonERrn0Vsn0hvoklv oktxpUxypE50p091plF2qCtWjS1YjjBbkTlnnTdhlnh/iDlonj9wpXd/iD5wpUR2qkyBtU2B tVqTxVqUxWCbzWGbzY++5K3O6bnV7MHZ7k6c1Veg12Kn2m6t3XCu3YC24J/H59Xy//L7/+v5 /+76//H7/+n5/+36//T8/+Hp7Ov6//v+//X9//j+//v//4GGgYKFgI2NeY6MeZiTcqCZbKec aKCYbdnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAQABAAAAeXgEaCg4SFhoeGExMDFQUX BwgLDA8QEoMdKCgpKiwtJC4lJieWgooUBAUGBwkKDQ4RpEZDL7S1ti9Dg7MrvCs0vb65gkIv I0VFIjErxys4RINBLx7HHzIgNzchNUGDPy8Z2BYwHBrlM0CDPS8TNDQTOjo28To+gxvrihM7 +foYgwIvcuTgMZAHwYEBBgFYyLAhQ0QQIxoKBAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:26'! testGreenIcon ^ icons at: #'testGreenIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testGreenIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testGreenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testNotRunIcon ^ icons at: #'testNotRunIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testNotRunIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testNotRunIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyElEQVQ4je1ROw6DMBRzSh9i jbLwEUs4BAMSI4dmhgTOErGQgc9AOrUqUNQDtJYsPdmWZekBf7Aro+971zQNsixDFEXI8/xj 9qNY17ULggBxHGNZFgzDgHmeUVXVKX87ClprR0QIwxDbtuF5ExG01u5rgVIKnHNM07Qj5xxK qdPa+1EQQsBaC9/3d/q6rhBCnApOC6SUsNaCiHYcxxFSyu8FZVkyADDGwPM8OOdgjAFj7OW9 4/KNbdu6ruuQpimSJEFRFJfZX8cDTFpNEGq15bYAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testRedIcon ^ icons at: #'testRedIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRedIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testRedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7ElEQVQ4je2RMU7DQBBF3+5G srSW1mA5Tp3KVEnhK8AF0iQVXAOfAM5CSwOCPmnTAXVSRCSWXGAJYjEUpCAsFhfIl6b58+fP Hw0c0Ioyz6WwVm4jJ2WeS5tO/UU+xbF0Q0twfsHnasX2/o7Xt5qTsvT02ts8HEisFcFkAh/v 6OMjgvGYWCvK4cBL4jkW1srl2SkY80OloGm4fnjkqq73Zjq/DfpG08znqCTZ42W9pm+8wP4J IxfxUlXotIfupt+V9niuKkYu+t8gWS6VARazKSoModmymE3p7HqeQxs2WSaFtXLjnGyyrPWN B8AX1+RFw2bQv8AAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testRunnerIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAAAAAgD9fvwCAgICAAICAgAAAAP///wAAACH5BAEAAAYALAAAAAAQABAA AAM0aLrc/pANECIDpdhFANhZtnzPh2kFAREZ0QnWqW4nAD8CIXyT5rAnRefhYww3QswNyXwk AAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testYellowIcon ^ icons at: #'testYellowIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testYellowIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testYellowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVQ4je2RMUtCURTHf+/e q2AUD7SHYE4K4uDu0ODcd7At/BxOzm75QYqmxoRAdGgIiXg4PBqKGkSre8HTEIR6e/UF/MNZ fud/DufPgZ1S5SY16Xa0XJ8bcZOapPmC32BylZEov4cqnoF9YvV2yfPrkqMT5/nVNrDjihRC UNEprD7B5FFRm0L43ft3QW8wQ4ct5ONhrR7RYYveYOZda7ZBtQyyGBNkDje4uBeqZT+ul8ne Hsg0fqfeOAbkx3Z/d0O9kiPbnG/MeBGyzXmgFSTxEPQ+iCOJhxiNN/yn7Kgk3Y6Wi74ROyql vnEn+AKLwVPWIMle+gAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! toolsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUyALJ5KP38+v313PjQgPjgoLCLIceLN8ymcKttJfjYkPjgmMabX6ttIrqX JqtnHbp/KO7z+OHr9/jomP3y141PFPrcmujQiP3v0ZxbF/zpv/jTh9e6lvDYkKh4SKNnHd7K s7eBNdiwcPzwzv3v1L2Wavrgqvrosrp5KODAePrlsPjYiNHf7sF/K/jQeJxhH/josPjwyIGY sv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAA AAAQABAAAAZ/QJlwSCwSDUiDseggNpcylkTCsaBCrGyW+IB5v+AH8fQqm88dIoDAJgDeoMVh fljIGIk8Q8E3iQSAAhsyHioqCIaGKRMFjQVCGC0IA5QDGiUjMQ0NMUIUCC2hoRUZFzEBAZ1C LqytJB8xEagRqlAxKxAQK7VLtyu/vL0xw1DFQQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/11/2013 13:11'! traitIcon ^ icons at: #'traitIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self traitIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! traitIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAACI0lEQVQ4ja2TS0uUURjHf+e9zatzaS6m42VCiFJBElG7I1hQixZ9g2jVImjTF+gjFARt 2kS0j2hTFmlRiZUWZKljg2maw2jNODPOxfdyWoQ6by2C6r98OP/fec55/o+QUlKribFl+frZ InMzq7iuRAjY39XIwOAe+o60Cn6RqAXcvjEh344vEQyZRBvqt+vf10oU8hV6D7Vx7mKfB6LV mp+PpOjqjtPUHKIuoG8famoJkUnneTGaApC1EA0gNfNNjg7P0dkb58Llw/iDhqdN23aZmvzK 3MwKo8NJjp1ol3s7YwJAAXh0L0lbIoxlu0y/X+HDuxXKG5tYlkMmXeDLfBbdVEFKfKbg8f2k 9wmfZlcpVSyM9TI3r72k3q9z5eoZNEPj7p1JPqdyBHeZlEoWqqaQ/JjxArLZEpvVKkIIbMeh kK9g+jQURRCJBZh8tczSQg4hBNWKjWPv/KMCEInUoxkGCBBCIITArNNRVUE4FsB2JFvTUlRB NOr3AroOxNE1BV3X0HQFRRVYlgNAecPGth10Q0XVBabpo2eg1Qs4dbaDXLZMMFRHvDlM78EE 0v15o2VvousqkQY/PsPHeq7C0aH234N06/ob+eTBLK1tYaKNOyEqFioszq9hmDpWVTJ4ch/n L/V7cwBsFeXIw1kc1wV2EtqwO0wmnWfodIfH7OlgSxNjy3L86QLTU2mKxSqBgI/unhb6jyf+ vAt/I+Wf3P8D8AOoI9lGL3q6bwAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! transcriptIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+/f4+zpOgUFWiENYi0pgklBmmFZtnmB3qF11pmZ/r1Rkg1dnhvb4 /FtriV9vjGR0kOHp+OHp91priGl6lWl5lG5+mHODnOXs+Onv+e3y+m5/mHeHn3eHnuHq+OHq 9+Ts+Pb4+ytcnCtalytYkytXkEZzrVp/r3KDm3aHn3eIn3aHnuDq9+Xt+O7z+vP2+ilvxClu wilsvilruipquilotSpotSlmsCpmsSpjrCpkqyphpithpipfoStfoStcmypalypblytblypY kypZkypXkCtYkCtXj3aIn/L2++3z+vb5/Pb5+8/t+////wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAE4ALAAAAAAQABAAAAejgE6Cg4SFgycwiYqLMCeD MQuRkpMLMYMyDE2am5sMMoMzE01MIQEhSw0hDQ40gzYPTQoJBgQCL0kADzWDNxBNLi5KwMAa EDiDORSxCggHBQMCGRU6gzsbTRggIBjZGC0WPIM9KE0sER8eERIRHhc+gz8pKR0pHCopK0jy IoMmQkJB/gUBImQEQBOGnJggMYQIwoQmjByReKREkRIlHibcyHFjIAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 16:20'! uncommentedClassIcon ^ icons at: #'uncommentedClassIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self uncommentedClassIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! uncommentedClassIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPR4e8gnL/Rmb/Nnb/NYY/JXY+mkqsgZKvLFyvTQ1PT3+8lHPvaSjsk6 OPaIhvaHh////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABAALAAAAAAQABAAAAVHICSOSqmMKKogy4KcqbowzALHorI8jo2TDQCgccMpAoJB oBhTHAqEAzOlMLQMU+pB+ut6IYlW4qtz9LKkg5nbXW1fZNP3GwIAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! userIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOZsAN7p7OTq7K7G4cvb6ICcxff5+vL193CVze7y89bk6+Hp6+zx89bk6mmK ydDc5Vd2rKKyzHuTwd3l6Yum1EJmqEFqtW6Tzoibv73R5Y2iw4yhxOXr7/j6+lZwobjJ3eXq 77jI4Dpjr+Lo8sPR4aq+2MfY516HxoWbv9/m8ZSs0J+63pCv21V6wNrj7H6Wu9Pg6b3M2/// /9Pd6r/M3+ft8XyQttDa42qPy9fg556109Hb5KC63dnf6W+IuC1WqWKJydri55iszZ+63T5m sr3R5PP2+L/L4NXj6p611FVyqURin1FvpomewXeNtd3l6MzZ5HmZ0H2h1fL1+Kq+2X6d0sva 6Pb4+ZiqycbX5tzk6LjF2rzQ5dje55SnxjZfrVx/wWaMyYGYvU1rpOju8WmEt+3x9lJ/w3WP t9rj6Iam2Orv9ZGw2v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGwALAAAAAAQABAAAAe4gGyCEDUXgoeIhxABQBmG iYlXWToZTYdBPRGJXTYwWlxsMUYKOASaiBozPBNfDSI0TwRkqAgcEwAvBw1SMgQdh0wBtVRH JQcsKCAPhycBwlZQWAIHFAULCstsYc5OGwYWURXWCmgOvy4BEh/fAO3iYw4jHklnEt437QAM AxRFLR5TlhwCky/BgC0ChpQhkUPMoR/t9hERoCKEGiQplBwyASBBFQwChKzxAomNGYMgd6xI 46Oky0SBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! variable_viewIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///+LmKqdprJlfJkz TG9+bST8AAAAAXRSTlMAQObYZgAAADZJREFUeNpjYMANGB0YGBxBDBEBCGYwYREQYTEAMpwZ nRyZHVxcGJyBEswOyCJwNXBdcHOIAAD04waDcvfrWwAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! versionControlIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAIOKlPr8/2iOvGyRvm+Tv1J/sFaCs1aDs1qFtVuFtV+It1+Jt2OMuWSM uWiPvGuSvW+Uv019r018rlGAsdPl9Mzi86vS7bfY78Pe8fr9/4TA5pDG6J7M6vn9/9Xz/+n5 //D7//794v794/z4o/z4pPv1pP360P771cK0Osi5VvnqdPnqd/nqefnqe/nqf/z1x/PXP/LY R/LYSPLYSvfjYpmWg5mWhPPWPPLYTPrgYX91QsOnK8aqNfrdWoV4QKGafcCcHcOiJMOjJ8up L+/LQI58Pqugdea2GfrJLpiCO+WxGfG6JvG6J/rGK6yMNaOHOOO0PbKPNPfkuuvfxLd/C8KO JcGNJuOGCbF9OujYxOV5B////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFsALAAAAAAQABAAAAejgFuCg4SFhoMpQTtCQCmH gihNOSMsMksojzxIPSSVS1SPU1IvJTdHV1aCERMGCAoMAgMQIioxTKlbGhscFhcYFRQEIiuW VYISBQcJCw0ODwQhLTNLxltRHh5G2NhRIS441IJOHh9GH+cfTiYwSlpYgk81NgA/9T9PJzRE WEOCSR4gAIAYCCJJFixYoAwq4iEAgA4QMxQ55EOHxYs6fDzayLFjIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! warningIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP7bc//egf/ij/7ijv/jl/7kl//mnv7lnv/uwf7CTP7DTf7DT/7IW//N a/7Na//NbP7QdP/dmbltAIJNAF03AMSAJMSCLKqASa2DS6uBSquCSrGHTq6ETbCHT7WKUrKI UcCVXL+UXMOYX8GWXsSZYMiib6+ETbOIUcOXX86uhd3Muf///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAA AAAQABAAAAZowJVwSCwaj0ihikRSJYcoBEL0XKlGkcjImQQhJBREKFnyICoThKeE/AAW6AXg dPyUAgrLJBEo0YsbAQyDhAEdRRwDDw8OaA4NDQImRBgFEJdglxAEGEQZKQcHBqOkKRpFF6mq q1WtrUEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/15/2013 21:09'! widgetIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB+UlEQVQ4jaWTy2oUURRF17m3 qvqRdHce3ZqHMYLgRIJm4sCR0whx6CQ+JhkK+iuSoYJgvkDwA/wDcZpojGny7rTRdKU6Vffh oE3FJqAB9+ge2HuzDocL/ykBWH754ZVSsqgDdaGQMc5j/dKjF/eeBwBKyeLY1WFvTSYiCq31 b2MGIgQ6AMBai/cOrQO2Ng6fAb0C5w1ZLOJciLGGpNtGqYgoLCIipOkRxmcMFIfQKsRpEcQJ QM5srGNuYYb5x7PEnZSTJOPB01nmn9zm+Dgl6WTcf3iLuYUZTGbzdRRAGEYkSYf4uwMBZx3l apibyoMhWWpQBfjZMiQnMVpp+ggQy/rqDgD18SqNsSrd2IKDxniNkUsVAL6ubAMmjwWnD68c 3z7vcfPOBFeuNajUyuxutimUIsYmh4kKPWtzrQXanx7wjKBeHyE+SsDD5HSDyxPDbDUP2G62 GJ+qMzndAANJnDA6OnKeoFdnaa4eMnVjCIDdzTbFUsTs3etUagXWV9qIdv2RPwfRno21vXw+ 2Dtif/tH7mx+2cfLXwrKgxGtnc4ZXhDg/ZmlvR9TqZX7CvpWKBXLuDTl/dtPOGcpDUSIwLs3 H9FaoUMoRIXzBcY4771HRGSgGuVwFYboV4/GOe+ddS4v6HaT11sbflHri30ma5xP0+7Shcz/ 0i8hyMm9wAyCcQAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! windowIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGh2km95jm56jS1XjzBakTRdkzdgljxkmUBnnEBonERrn0Vsn0hvoklv oktxpUxypE50p091plF2qCtWjS1YjjBbkTlnnTdhlnh/iDlonj9wpXd/iD5wpUR2qkyBtU2B tVqTxVqUxWCbzWGbzY++5K3O6bnV7MHZ7k6c1Veg12Kn2m6t3XCu3YC24J/H59Xy//L7/+v5 /+76//H7/+n5/+36//T8/+Hp7Ov6//v+//X9//j+//v//4GGgYKFgI2NeY6MeZiTcqCZbKec aKCYbdnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAQABAAAAeXgEaCg4SFhoeGExMDFQUX BwgLDA8QEoMdKCgpKiwtJC4lJieWgooUBAUGBwkKDQ4RpEZDL7S1ti9Dg7MrvCs0vb65gkIv I0VFIjErxys4RINBLx7HHzIgNzchNUGDPy8Z2BYwHBrlM0CDPS8TNDQTOjo28To+gxvrihM7 +foYgwIvcuTgMZAHwYEBBgFYyLAhQ0QQIxoKBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! workspaceIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAMzFxqeantvb3v7+//39/t7f4vL1+aG41aS61iJDZ2ePupey0Km/2ER2 qkZ3q0l5rEl6rE19r1SCsu7y9v3+/9/o8Pr9/2iz4W214m+24ni65ITA5rrb8Pf8//X6/fL4 +/n9//j8/vv9/u/6/9Xz/9bz/+j4/+r5/+76//H7//j9//b7/en5/+z6/+36//T8//P7/vf9 //X7/fv+//b9//r+//n9/vf8/fz9/fv+/dvTobu0in91Qol6P4N3QZF+PYl6QJmCO5iCO66N NaiKN6GGOaCGOcu0drKPNLmcUPDYqOnEfvbmyJN8V5R/XZWBYJN4UY9pOI5pOI9sPpBwQ5Bw RJJ0So9pOamUj/W5rKmamLZ2b8CEfcikov////7+/v39/f///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGEALAAAAAAQABAAAAfBgGGCg4SFhodhW1tdiIRP W1lbjYJOBQBckg0Omg8REgsVTUwCWliCFxgXGRobHB9QTEoBUAiCmg0QCgwTVrFLVgYHgkgk JCUmFFQ6SktVXjlHgkMkLCghXlM7O1EDXzJJgkQkJzAiCVdSUV5gMi1EgkYkKCMhCQleXgQe KC5GgkIkUqSwgM8LjhUCUwgR9IPEixc0VKiwoeLhwx+CepCI0aGDChAgVMQYGQOIIB8kLFio MaOly5Y+BPGYSbNmzTCBAAA7'! ! !GLMUIThemeExtraIcons commentStamp: 'TudorGirba 1/30/2011 22:55' prior: 42888240! This class offers a number of extra icons that work with the Glamorous Theme.! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousAccept ^ self icons at: #glamorousAccept ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 2969567232 4278190080 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 50331648 2969567232 4143972352 4043309056 973078528 16777215 16777215 16777215 16777215 16777215 16777215 16777215 536870912 16777215 16777215 50331648 2969567232 4143972352 4110417920 922746880 16777215 16777215 16777215 16777215 16777215 16777215 184549376 3758096384 4278190080 603979776 50331648 2969567232 4143972352 4110417920 922746880 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2365587456 4261412864 3976200192 3137339392 4143972352 4110417920 922746880 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100663296 3405774848 4227858432 4261412864 4143972352 922746880 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 4177526784 4278190080 1375731712 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 671088640 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousAdd ^ self icons at: #glamorousAdd ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousAlarm ^ self icons at: #glamorousAlarm ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 436207616 16777215 16777215 16777215 402653184 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100663296 3003121664 2399141888 16777215 16777215 16777215 2315255808 2969567232 100663296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1442840576 2097152000 1644496133 3122733345 3625852446 3122733345 1644496133 2113929216 1526726656 16777215 16777215 16777215 16777215 16777215 16777215 16777215 553648128 3171749133 4030939971 4289440683 4291282887 4289440683 4030939971 2133469738 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1594361864 4129761063 4291546059 4291546059 4291546059 4291546059 4291546059 4030939971 1594361864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3122733345 4289440683 4291546059 4291546059 4291546059 4291546059 4291546059 4289440683 3122733345 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3625852446 4291282887 4291546059 4291546059 4291546059 4291546059 4291546059 4291282887 3625852446 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3122733345 4289440683 4291546059 4291546059 4291546059 4291546059 4291546059 4289440683 3122733345 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1594361864 4081205826 4291546059 4291546059 4291546059 4291546059 4291546059 4163315495 1594361864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 536870912 4194961930 4129761063 4289440683 4291282887 4289440683 4030939971 4194961930 520093696 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1979711488 1056964608 1594361864 3122733345 3625852446 3122733345 1594361864 1073741824 1979711488 16777215 16777215 16777215 16777215 16777215 16777215 16777215 520093696 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousBookmark ^ self icons at: #glamorousBookmark ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3321888768 4009754624 4194304000 3909091328 3254779904 2130706432 251658240 2147483648 3254779904 3909091328 4194304000 4009754624 3321888768 16777215 16777215 16777215 4278190080 285212672 33554432 335544320 1157627904 3456106496 4278190080 3422552064 1157627904 335544320 33554432 285212672 4278190080 16777215 16777215 16777215 4261412864 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4261412864 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 4278190080 1946157056 2181038080 1862270976 1191182336 268435456 4278190080 268435456 1191182336 1862270976 2181038080 1946157056 4278190080 16777215 16777215 16777215 1862270976 2348810240 2063597568 2399141888 3221225472 4278190080 4278190080 4278190080 3221225472 2399141888 2063597568 2348810240 1862270976 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 637534208 4278190080 654311424 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousBrowse ^ self icons at: #glamorousBrowse ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2248146944 2113929216 2130706432 2113929216 2113929216 2130706432 2113929216 2130706432 2130706432 2113929216 3305111552 3388997632 788529152 16777215 16777215 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3271557120 2281701376 553648128 16777215 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1996488704 687865856 2986344448 721420288 16777215 2130706432 16777215 16777215 16777215 1056964608 2130706432 2130706432 2130706432 2130706432 2130706432 1056964608 2113929216 1996488704 2952790016 3976200192 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3355443200 16777215 2130706432 16777215 16777215 16777215 1056964608 2130706432 2130706432 2130706432 2130706432 2130706432 1056964608 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 1056964608 1073741824 2130706432 2130706432 2130706432 2130706432 1073741824 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 1056964608 1073741824 2130706432 2130706432 2130706432 2130706432 1073741824 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 1056964608 1073741824 2130706432 2130706432 2130706432 2130706432 1073741824 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 16777215 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 16777215 2113929216 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2130706432 2113929216) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousBug ^ self icons at: #glamorousBug ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1224736768 503316480 16777215 1224736768 503316480 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 268435456 4278190080 4278190080 2181038080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2734686208 4278190080 4177526784 4278190080 2365587456 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 150994944 4278190080 4278190080 4278190080 4278190080 4043309056 150994944 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2634746635 4278190080 4283190348 4286216826 4283190348 4278190080 1478895142 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2450065673 4278190080 4293454056 4294967295 4294967295 4294967295 4293454056 4179171609 2450065673 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3976923915 4292532954 4294967295 4294967295 4294967295 4294967295 4294967295 4292532954 3976923915 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3976923915 4292532954 4294967295 4294967295 4294967295 4294967295 4294967295 4292532954 3976923915 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2450065673 4179237402 4293388263 4294967295 4294967295 4294967295 4293388263 4278190080 2450065673 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2685078283 4278190080 4065349712 4202462332 4065349712 4278190080 2282819857 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 469762048 1543503872 2147483648 1543503872 469762048 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousCancel ^ self icons at: #glamorousCancel ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 587202560 2348810240 234881024 16777215 318767104 939524096 369098752 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3925868544 4127195136 2801795072 201326592 3472883712 4093640704 2466250752 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 436207616 4127195136 4143972352 3992977408 4143972352 3959422976 570425344 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1157627904 4244635648 4261412864 4160749568 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 184549376 3472883712 4160749568 4261412864 4160749568 2801795072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3472883712 4244635648 3959422976 1442840576 4110417920 4227858432 1493172224 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1895825408 3976200192 520093696 16777215 1157627904 4160749568 1258291200 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 520093696 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousDown ^ self icons at: #glamorousDown ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 956301312 1073741824 1073741824 4278190080 4278190080 1073741824 1073741824 956301312 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2852126720 4278190080 4278190080 4278190080 4278190080 2852126720 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 3640655872 4278190080 4278190080 3640655872 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 4127195136 4127195136 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousEdit ^ self icons at: #glamorousEdit ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2248146944 4278190080 570425344 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315255808 3456106496 1593835520 3875536896 687865856 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315255808 3456106496 301989888 16777215 1509949440 3875536896 687865856 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2315255808 3456106496 301989888 16777215 16777215 218103808 3003121664 2634022912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 989855744 3070230528 50331648 16777215 16777215 301989888 3489660928 2281701376 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1862270976 2600468480 16777215 16777215 301989888 3489660928 2281701376 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3103784960 1358954496 67108864 1140850688 3640655872 2281701376 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 150994944 4278190080 2952790016 4194304000 4278190080 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 2449473536 1560281088 352321536 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousExample ^ self icons at: #glamorousExample ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1291845632 1593835520 16777215 16777215 16777215 1593835520 3439329280 2667577344 2566914048 83886080 16777215 83886080 2365587456 3221225472 3087007744 3422552064 2449473536 2785017856 16777215 16777215 1090519040 4278190080 1409286144 16777215 3305111552 2214592512 16777215 1677721600 4278190080 1275068416 150994944 4160749568 2550136832 16777215 16777215 16777215 2634022912 4278190080 1795162112 1375731712 3456106496 3321888768 16777215 1879048192 4278190080 1124073472 100663296 4110417920 2969567232 16777215 16777215 16777215 2835349504 4278190080 1543503872 989855744 989855744 889192448 16777215 218103808 3422552064 3472883712 2801795072 3405774848 654311424 16777215 16777215 16777215 1694498816 4278190080 1728053248 16777215 33554432 1795162112 16777215 1207959552 2298478592 419430400 251658240 33554432 16777215 16777215 16777215 16777215 33554432 2415919104 3992977408 2483027968 2483027968 704643072 16777215 1073741824 4127195136 4244635648 4278190080 4227858432 3238002688 83886080 16777215 16777215 16777215 16777215 100663296 318767104 16777215 16777215 16777215 1291845632 2785017856 1795162112 1526726656 1711276032 3690987520 1006632960 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1962934272 2701131776 939524096 889192448 1577058304 2885681152 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 687865856 1291845632 1308622848 838860800 16777216 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousGrayCircle ^ self icons at: #glamorousGrayCircle ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 109084800 2274464145 3885142674 3885142674 2274464145 109084800 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2274464145 4287795858 4287795858 4287795858 4287795858 2274464145 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3885142674 4287795858 4287795858 4287795858 4287795858 3885142674 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3885142674 4287795858 4287795858 4287795858 4287795858 3885142674 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2274464145 4287795858 4287795858 4287795858 4287795858 2274464145 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 109084800 2274464145 3885142674 3885142674 2274464145 109084800 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousGreenCircle ^ self icons at: #glamorousGreenCircle ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100696064 2264962304 3875575296 3875575296 2264962304 100696064 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2264962304 4278228736 4278228736 4278228736 4278228736 2264962304 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3875575296 4278228736 4278228736 4278228736 4278228736 3875575296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3875575296 4278228736 4278228736 4278228736 4278228736 3875575296 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2264962304 4278228736 4278228736 4278228736 4278228736 2264962304 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 100696064 2264962304 3875575296 3875575296 2264962304 100696064 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousHelp ^ self icons at: #glamorousHelp ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 117440512 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 3489660928 3003121664 4278190080 3003121664 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 452984832 4278190080 352321536 1778384896 4278190080 536870912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 452984832 4278190080 1442840576 1442840576 4278190080 637534208 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 285212672 16777215 3741319168 4278190080 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 637534208 4278190080 167772160 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2348810240 452984832 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 872415232 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 285212672 4278190080 3489660928 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 285212672 4278190080 3489660928 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousInspect ^ self icons at: #glamorousInspect ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 4009754624 2566914048 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 167772160 4278190080 4009754624 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 117440512 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2147483648 2785017856 2348810240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 67108864 4278190080 3741319168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3489660928 3741319168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3489660928 3741319168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3489660928 3741319168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2566914048 4278190080 4278190080 2785017856 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousInto ^ self icons at: #glamorousInto ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1258291200 4278190080 4278190080 4278190080 4278190080 4278190080 1258291200 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 251658240 4009754624 4278190080 4278190080 4278190080 4009754624 251658240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1442840576 4076863488 4278190080 4076863488 1459617792 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3238002688 4177526784 3254779904 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 536870912 3992977408 536870912 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousLeft ^ self icons at: #glamorousLeft ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 956301312 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 2852126720 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 3640655872 4278190080 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 4127195136 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 4127195136 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 3640655872 4278190080 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 2852126720 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 956301312 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousLeftSide ^ self icons at: #glamorousLeftSide ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousOpen ^ self icons at: #glamorousOpen ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 16777215 16777215 16777215 4143972352 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 1208683275 16777215 4278190080 16777215 16777215 16777215 2600929031 4181934915 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4286479998 4093903876 201326592 4278190080 16777215 16777215 16777215 520093696 4144301317 4287203721 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4096667182 1996620290 4278190080 16777215 16777215 16777215 16777215 2869364487 4283058762 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4286085240 4026860805 4278190080 16777215 16777215 16777215 16777215 704643072 4278650631 4287466893 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4287795858 4079363622 4278190080 16777215 16777215 16777215 16777215 16777215 4262005001 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261610243 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousOver ^ self icons at: #glamorousOver ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1258291200 251658240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4043309056 1509949440 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4093640704 3355443200 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4194304000 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4093640704 3355443200 570425344 16777215 16777215 16777215 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4261412864 16777215 4278190080 4026531840 1509949440 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 1258291200 251658240 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousPlay ^ self icons at: #glamorousPlay ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4110417920 1879048192 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4076863488 3456106496 603979776 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4227858432 4110417920 1895825408 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4076863488 3456106496 603979776 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4194304000 4009754624 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4076863488 3456106496 570425344 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4227858432 4110417920 1895825408 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4076863488 3472883712 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4110417920 1895825408 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousRedCircle ^ self icons at: #glamorousRedCircle ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 114622464 2279547942 3890160678 3890160678 2279547942 114622464 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2279547942 4292879654 4292879654 4292879654 4292879654 2279547942 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3890160678 4292879654 4292879654 4292879654 4292879654 3890160678 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3890160678 4292879654 4292879654 4292879654 4292879654 3890160678 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2279547942 4292879654 4292879654 4292879654 4292879654 2279547942 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 114622464 2279547942 3890160678 3890160678 2279547942 114622464 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousRedo ^ self icons at: #glamorousRedo ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 956301312 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 2852126720 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 4278190080 3640655872 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4127195136 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4127195136 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 1073741824 4278190080 4278190080 3640655872 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 1073741824 4278190080 2852126720 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 956301312 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousRefresh ^ self icons at: #glamorousRefresh ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 3875536896 3036676096 1660944384 16777216 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 3221225472 402653184 16777215 16777215 16777215 16777215 16777215 687865856 4009754624 704643072 16777215 16777215 16777215 402653184 1476395008 3791650816 4278190080 3154116608 33554432 16777215 16777215 16777215 167772160 3758096384 4227858432 3791650816 167772160 16777215 16777215 16777215 16777215 301989888 3808428032 4278190080 1694498816 16777215 16777215 16777215 2801795072 4127195136 4278190080 4110417920 2835349504 16777215 16777215 16777215 16777215 16777215 1493172224 4278190080 2986344448 16777215 16777215 1593835520 4110417920 4278190080 4278190080 4278190080 4093640704 1627389952 16777215 16777215 16777215 16777215 369098752 4278190080 3992977408 16777215 16777215 4127195136 4278190080 4278190080 4278190080 4278190080 4278190080 4127195136 16777215 16777215 16777215 16777215 469762048 4278190080 4076863488 16777215 16777215 16777215 16777215 3355443200 4278190080 1509949440 16777215 16777215 16777215 16777215 16777215 16777215 1493172224 4278190080 3338665984 16777215 16777215 16777215 16777215 1778384896 4278190080 3808428032 335544320 16777215 16777215 16777215 16777215 335544320 3774873600 4278190080 1577058304 16777215 16777215 16777215 16777215 33554432 3120562176 4278190080 3774873600 1493172224 469762048 369098752 1509949440 3808428032 4278190080 3271557120 16777215 16777215 16777215 16777215 16777215 16777215 369098752 3271557120 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3120562176 369098752 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777216 1577058304 3338665984 4076863488 4093640704 3355443200 1778384896 33554432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousRemove ^ self icons at: #glamorousRemove ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2130706432 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 2130706432 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousRestart ^ self icons at: #glamorousRestart ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 721420288 1073741824 855638016 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2717908992 4278190080 3724541952 16777215 16777215 16777215 16777215 16777215 654311424 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2835349504 4278190080 3640655872 16777215 16777215 16777215 822083584 3623878656 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2936012800 4278190080 3523215360 16777215 402653184 2952790016 4177526784 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3053453312 4278190080 3388997632 16777215 4278190080 4227858432 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3154116608 4278190080 3271557120 16777215 3053453312 4160749568 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3271557120 4278190080 3154116608 16777215 16777215 704643072 3422552064 4194304000 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3388997632 4278190080 3053453312 16777215 16777215 16777215 16777215 1291845632 2885681152 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 1073741824 805306368 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousRight ^ self icons at: #glamorousRight ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 956301312 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 2852126720 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 4278190080 3640655872 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4127195136 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4127195136 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 4278190080 3640655872 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 2852126720 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 956301312 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousRightSide ^ self icons at: #glamorousRightSide ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousSearch ^ self icons at: #glamorousSearch ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 989855744 3019898880 3875536896 3875536896 3019898880 989855744 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2046820352 4244635648 4278190080 4278190080 4278190080 4278190080 4244635648 2046820352 16777215 16777215 16777215 16777215 16777215 16777215 16777215 989855744 4244635648 4177526784 2013265920 402653184 402653184 2013265920 4177526784 4244635648 989855744 16777215 16777215 16777215 16777215 16777215 16777215 3019898880 4278190080 2013265920 16777215 16777215 16777215 16777215 2013265920 4278190080 3019898880 16777215 16777215 16777215 16777215 16777215 16777215 3875536896 4278190080 402653184 16777215 16777215 16777215 16777215 402653184 4278190080 3875536896 16777215 16777215 16777215 16777215 16777215 16777215 3875536896 4278190080 402653184 16777215 16777215 16777215 16777215 402653184 4278190080 3875536896 16777215 16777215 16777215 16777215 16777215 16777215 3019898880 4278190080 2013265920 16777215 16777215 16777215 16777215 2013265920 4278190080 3019898880 16777215 16777215 16777215 16777215 16777215 16777215 989855744 4244635648 4177526784 2013265920 402653184 402653184 2080374784 4211081216 4278190080 1644167168 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2046820352 4244635648 4278190080 4278190080 4278190080 4278190080 4261412864 4278190080 4060086272 822083584 16777215 16777215 16777215 16777215 16777215 16777215 16777215 989855744 3019898880 3875536896 3875536896 3036676096 4110417920 4278190080 4278190080 4060086272 83886080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 805306368 4060086272 4278190080 3992977408 2281701376 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 989855744 4278190080 1476395008 150994944 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 553648128 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousSpawn ^ self icons at: #glamorousSpawn ifAbsentPut: [(Form extent: (16@18) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 587202560 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 1979711488 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 503316480 4278190080 3992977408 2919235584 184549376 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 754974720 2852126720 3909091328 4278190080 4278190080 4278190080 4060086272 3674210304 620756992 16777215 16777215 16777215 16777215 16777215 16777215 1711276032 4143972352 4278190080 4278190080 3825205248 4278190080 4278190080 4278190080 4127195136 1912602624 16777215 16777215 16777215 16777215 16777215 973078528 4244635648 4261412864 2399141888 452984832 16777215 4278190080 4278190080 4026531840 2751463424 268435456 16777215 16777215 16777215 16777215 16777215 3556769792 4278190080 2046820352 16777215 16777215 16777215 4278190080 4060086272 1778384896 16777215 16777215 16777215 16777215 16777215 16777215 469762048 4278190080 3858759680 67108864 16777215 16777215 16777215 3590324224 1006632960 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1308622848 4278190080 2969567232 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1426063360 3758096384 2315255808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousThrough ^ self icons at: #glamorousThrough ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 1258291200 251658240 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4009754624 1459617792 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4076863488 3254779904 536870912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4177526784 3992977408 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4076863488 3238002688 536870912 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4009754624 1442840576 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 1258291200 251658240 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4261412864 4278190080 4261412864 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:37'! glamorousUndo ^ self icons at: #glamorousUndo ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 956301312 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 2852126720 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 3640655872 4278190080 4278190080 1073741824 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 4127195136 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 4127195136 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 3640655872 4278190080 4278190080 1073741824 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 2852126720 4278190080 1073741824 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 956301312 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'icons' stamp: 'TudorGirba 5/1/2013 23:36'! glamorousUp ^ self icons at: #glamorousUp ifAbsentPut: [(Form extent: (16@16) depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1627389952 1627389952 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 771751936 4127195136 4127195136 771751936 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 218103808 3640655872 4278190080 4278190080 3640655872 218103808 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2852126720 4278190080 4278190080 4278190080 4278190080 2852126720 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1828716544 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 1828716544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 956301312 1073741824 1073741824 4278190080 4278190080 1073741824 1073741824 956301312 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: (0@0))]! ! !GLMUIThemeExtraIcons class methodsFor: 'utils' stamp: 'TudorGirba 1/31/2011 00:16'! icons ^ icons ifNil: [icons := Dictionary new] ! ! !GLMUIThemeExtraIcons class methodsFor: 'utils' stamp: 'TudorGirba 5/1/2013 23:36'! importIcons "self importIcons" | wantedIcons | self resetIcons. wantedIcons := #( 'glamorousInspect' 'glamorousExample' 'glamorousHelp' 'glamorousSearch' 'glamorousAccept' 'glamorousCancel' 'glamorousBrowse' 'glamorousAdd' 'glamorousRemove' 'glamorousUp' 'glamorousDown' 'glamorousLeft' 'glamorousRight' 'glamorousEdit' 'glamorousAlarm' 'glamorousRedCircle' 'glamorousGreenCircle' 'glamorousGrayCircle' 'glamorousUndo' 'glamorousRedo' 'glamorousPlay' 'glamorousRestart' 'glamorousOver' 'glamorousInto' 'glamorousThrough' 'glamorousBookmark' 'glamorousOpen' 'glamorousRefresh' 'glamorousSpawn' 'glamorousBug' 'glamorousLeftSide' 'glamorousRightSide'). (Smalltalk at: #MooseScripts) importIcons: wantedIcons fromFolder: 'icons' inClass: self category: 'icons'! ! !GLMUIThemeExtraIcons class methodsFor: 'utils' stamp: 'TudorGirba 1/31/2011 00:16'! resetIcons icons := nil! ! !GLMUITheme commentStamp: 'TudorGirba 1/30/2011 22:51' prior: 42888384! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. In particular, the icons should be operating system agnostic, because, for example, people in Windows are confused by the red, yellow, green buttons of apple. - uses a limited amount of colors and effects. - is fast. self defaultSettings: nil. self beCurrent. ! !GLMUITheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:51'! baseColor ^ Color r: 210 g: 210 b: 210 range: 255! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'tg 9/5/2010 20:50'! basePassiveBackgroundColor ^ Color r: 245 g: 245 b: 245 range: 255! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'tg 9/5/2010 21:46'! baseSelectionColor ^ Color r: 97 g: 163 b: 225 range: 255! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:33'! darkBaseColor ^ Color r: 200 g: 200 b: 200 range: 255! ! !GLMUITheme class methodsFor: 'private' stamp: 'tg 11/5/2010 20:50'! importGlamorousIcons "utility method to import the icons necessary for the theme from the file system" "self importGlamorousIcons" | icons | icons := #( 'glamorousMax' 'glamorousMin' 'glamorousClose' 'glamorousMenu' 'glamorousMaxInactive' 'glamorousMinInactive' 'glamorousCloseInactive' 'glamorousMenuInactive' 'glamorousMenuPin' 'glamorousCheckboxSelected' 'glamorousCheckboxUnselected' 'glamorousRadioSelected' 'glamorousRadioUnselected'). self importIcons: icons fromFolder: 'icons' inClass: GLMUIThemeIcons category: '*glamour-morphic-theme'! ! !GLMUITheme class methodsFor: 'private' stamp: 'tg 9/3/2010 14:28'! importIcons: icons fromFolder: aString inClass: aClass category: aCategory icons do: [:each | | method form | form := PNGReadWriter formFromFileNamed: aString, '/', each , '.png'. method := each , Character cr asString , (aClass methodStart: each), form storeString, aClass methodEnd. aClass class compile: method classified: aCategory ]. aClass initialize! ! !GLMUITheme class methodsFor: 'testing' stamp: 'TudorGirba 4/7/2011 23:45'! isAbstract "Answer whether the receiver is considered to be abstract." ^false! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:35'! lightBaseColor ^ Color r: 230 g: 230 b: 230 range: 255! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'tg 9/7/2010 13:51'! lightSelectionColor ^ Color r: 175 g: 213 b: 250 range: 255! ! !GLMUITheme class methodsFor: 'settings' stamp: 'TudorGirba 4/2/2013 23:18'! newDefaultSettings self setPreferredPreferences. BalloonMorph setBalloonColorTo: self lightSelectionColor. ^super newDefaultSettings menuColor: self baseColor; menuTitleColor: self baseColor; windowColor: self baseColor; selectionColor: self lightSelectionColor; menuSelectionColor: self baseSelectionColor; progressBarColor: self baseColor; standardColorsOnly: true; autoSelectionColor: false; preferRoundCorner: false; fadedBackgroundWindows: false; secondarySelectionColor: self veryLightSelectionColor; flatMenu: true! ! !GLMUITheme class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/23/2013 20:21'! setPreferredPreferences "NECPreferences expandPrefixes: true; popupShowWithShortcut: Character tab asShortcut."! ! !GLMUITheme class methodsFor: 'settings' stamp: 'TudorGirba 2/16/2011 20:56'! setPreferredShoutColors "self setPreferredShoutColors" SHTextStylerST80 styleTable: #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment (gray darker)) (unfinishedComment (red muchDarker)) (#'$' (red muchDarker)) (character (red muchDarker)) (integer (red muchDarker)) (number (red muchDarker)) (#- (red muchDarker)) (symbol (magenta muchDarker)) (stringSymbol (magenta muchDarker)) (literalArray (magenta muchDarker)) (string (magenta muchDarker) normal) (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal nil italic) (keyword (black)) (binary (black)) (unary (black)) (incompleteKeyword red) (incompleteBinary red) (incompleteUnary red ) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (#self (cyan muchDarker )) (#super (cyan muchDarker )) (#true (red muchDarker)) (#false (red muchDarker)) (#nil (red muchDarker)) (#thisContext (cyan muchDarker )) (#return (cyan muchDarker ) bold) (patternArg (blue muchDarker)) (methodArg (blue muchDarker)) (blockPatternArg (blue muchDarker)) (blockArg (blue muchDarker)) (argument (blue muchDarker)) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (methodTempBar (black)) (blockTempBar (black)) (blockArgsBar (black)) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold) (blockTempVar (blue muchDarker)) (blockPatternTempVar (blue muchDarker)) (instVar (blue muchDarker)) (workspaceVar (blue muchDarker)) (undefinedIdentifier red) (incompleteIdentifier red) (tempVar (blue muchDarker)) (patternTempVar (blue muchDarker)) (poolConstant (blue muchDarker)) (classVar (blue muchDarker)) (globalVar (blue muchDarker))) ! ! !GLMUITheme class methodsFor: 'settings' stamp: 'TudorGirba 4/8/2011 00:13'! setPreferredWorldBackground "self setPreferredWorldBackground" World color: Color white! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'tg 1/14/2010 03:12'! themeName ^ 'Glamorous'! ! !GLMUITheme class methodsFor: 'accessing' stamp: 'TudorGirba 11/29/2012 09:19'! veryLightSelectionColor ^ self lightSelectionColor muchLighter! ! !GLMUITheme methodsFor: 'border-styles-buttons' stamp: 'tg 9/4/2010 23:06'! buttonCornerStyleIn: aThemedMorph "If asked, we only allow square corners" ^ #square! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'tg 8/31/2010 08:32'! buttonLabelForText: aTextOrString "Answer the label to use for the given text." ^aTextOrString isString ifTrue: [(LabelMorph contents: aTextOrString) color: Color black] ifFalse: [super buttonLabelForText: aTextOrString]! ! !GLMUITheme methodsFor: 'defaults' stamp: 'tg 9/6/2010 14:04'! buttonMinHeight "Answer the minumum height of a button for this theme." ^24! ! !GLMUITheme methodsFor: 'defaults' stamp: 'tg 9/6/2010 14:04'! buttonMinWidth "Answer the minumum width of a button for this theme." ^24! ! !GLMUITheme methodsFor: 'border-styles-buttons' stamp: 'TudorGirba 4/12/2011 08:18'! buttonNormalBorderStyleFor: aButton "Return the normal button borderStyle for the given button." | outerColor innerColor | (aButton valueOfProperty: #noBorder ifAbsent: [false]) ifTrue: [ ^ SimpleBorder new width: 0; baseColor: Color transparent ]. outerColor := self glamorousDarkBaseColorFor: aButton. ^SimpleBorder new width: 1; baseColor: outerColor! ! !GLMUITheme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/3/2010 12:21'! buttonNormalFillStyleFor: aButton "Return the normal button fillStyle for the given button." (aButton valueOfProperty: #noFill ifAbsent: [false]) ifTrue: [^ SolidFillStyle color: Color transparent ]. ^ self glamorousNormalFillStyleFor: aButton height: aButton height! ! !GLMUITheme methodsFor: 'border-styles-buttons' stamp: 'tg 8/31/2010 11:09'! buttonSelectedBorderStyleFor: aButton ^ self buttonNormalBorderStyleFor: aButton! ! !GLMUITheme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/13/2010 10:37'! buttonSelectedFillStyleFor: aButton "Return the normal button fillStyle for the given button." | top bottom | top := self glamorousLightSelectionColorFor: aButton. bottom := self glamorousLightColorFor: aButton. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aButton bounds origin; direction: 0 @ aButton height; radial: false! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 09:08'! checkboxForm "Answer the form to use for a normal checkbox." ^self checkboxUnselectedForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:10'! checkboxSelectedForm "Answer the form to use for a selected checkbox." ^GLMUIThemeIcons checkboxSelectedForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:54'! checkboxUnselectedForm "Answer the form to use for a selected checkbox." ^ GLMUIThemeIcons checkboxUnselectedForm! ! !GLMUITheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:26'! configureWatcherWindowLabelAreaFor: aWindow "Configure the label area for the given Watcher window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. " aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. " aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. " aWindow hasMenuBox ifTrue: [aWindow addMenuControl]." aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'TudorGirba 6/1/2012 19:40'! configureWindowBorderFor: aWindow " super configureWindowBorderFor: aWindow. aWindow roundedCorners: #()" | aStyle | aStyle := SimpleBorder new color: (Color lightGray); width: 1. aWindow borderStyle: aStyle.! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/23/2012 14:24'! configureWindowDropShadowFor: aWindow aWindow hasDropShadow: false! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 00:12'! configureWindowLabelAreaFor: aWindow "Configure the label area for the given window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow hasMenuBox ifTrue: [aWindow addMenuControl]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:17'! createCollapseBoxFor: aSystemWindow "Answer a button for minimising the window." |form msb| form := self windowMinimizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow collapseBoxHit]; setBalloonText: 'Collapse this window' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:17'! createExpandBoxFor: aSystemWindow "Answer a button for maximising/restoring the window." |form msb| form := self windowMaximizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow expandBoxHit]; setBalloonText: 'Expand to full screen' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'tg 9/3/2010 11:34'! createMenuBoxFor: aSystemWindow "Answer a button for the window menu." " ^aSystemWindow createBox labelGraphic: (self windowMenuIconFor: aSystemWindow); extent: aSystemWindow boxExtent; actWhen: #buttonDown; actionSelector: #offerWindowMenu; setBalloonText: 'window menu' translated" |form msb| form := self windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow offerWindowMenu]; setBalloonText: 'window menu' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMUITheme methodsFor: 'defaults' stamp: 'TudorGirba 7/26/2011 12:08'! dialogWindowPreferredCornerStyleFor: aDialogWindow "Answer the preferred corner style for the given dialog." ^#square! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/3/2010 12:30'! dockingBarNormalFillStyleFor: aToolDockingBar ^ SolidFillStyle color: Color transparent! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:47'! dropListDisabledFillStyleFor: aDropList "Return the disabled fillStyle for the given drop list." ^ self textEditorDisabledFillStyleFor: aDropList! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 22:55'! dropListNormalBorderStyleFor: aDropList "Return the normal borderStyle for the given drop list" ^ self buttonNormalBorderStyleFor: aDropList! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/4/2010 23:04'! dropListNormalFillStyleFor: aDropList "Return the normal fillStyle for the given drop list." ^ SolidFillStyle color: Color white! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 1/25/2011 15:39'! expanderTitleNormalFillStyleFor: anExpanderTitle "Return the normal expander title fillStyle for the given expander title." ^ self buttonNormalFillStyleFor: anExpanderTitle! ! !GLMUITheme methodsFor: 'private' stamp: 'tg 9/3/2010 12:32'! glamorousBaseColorFor: aButton ^ self class baseColor "unfortunately, it looks like paneColor does not always return the wanted color" "aButton paneColorOrNil ifNil: [Color r: 200 g: 200 b: 200 range: 255]"! ! !GLMUITheme methodsFor: 'private' stamp: 'tg 9/5/2010 20:40'! glamorousBasePassiveBackgroundColorFor: aButton ^ self class basePassiveBackgroundColor! ! !GLMUITheme methodsFor: 'private' stamp: 'tg 9/5/2010 20:40'! glamorousBaseSelectionColorFor: aButton ^ self class baseSelectionColor! ! !GLMUITheme methodsFor: 'private' stamp: 'tg 9/9/2010 22:50'! glamorousDarkBaseColorFor: aButton ^ self class darkBaseColor! ! !GLMUITheme methodsFor: 'private' stamp: 'tg 9/9/2010 22:02'! glamorousLightColorFor: aButton ^ self class lightBaseColor! ! !GLMUITheme methodsFor: 'private' stamp: 'TudorGirba 4/12/2011 08:24'! glamorousLightSelectionColorFor: aMorph ^ self class lightSelectionColor! ! !GLMUITheme methodsFor: 'private' stamp: 'TudorGirba 4/11/2011 21:25'! glamorousNormalFillStyleFor: aMorph height: anInteger "Return the normal button fillStyle for the given button." " | baseColor | baseColor := self glamorousBaseColorFor: aMorph. ^ self glamorousNormalFillStyleWithBaseColor: baseColor for: aMorph height: anInteger " ^ SolidFillStyle color: (self glamorousLightColorFor: aMorph)! ! !GLMUITheme methodsFor: 'private' stamp: 'TudorGirba 4/11/2011 01:37'! glamorousNormalFillStyleWithBaseColor: aColor for: aMorph height: anInteger | top bottom | top := aColor darker. bottom := aColor. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aMorph bounds origin; direction: 0 @ anInteger; radial: false! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/9/2010 23:51'! groupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a group panel." ^ SimpleBorder new width: 1; baseColor: ((self glamorousBaseColorFor: aGroupPanel))! ! !GLMUITheme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:32'! growlBorderColorFor: aGrowlMorph ^ Color white alpha: 0.5! ! !GLMUITheme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/17/2012 15:00'! growlContentsColorFor: aGrowlMorph ^ Color white! ! !GLMUITheme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:16'! growlDismissHandleFor: aGrowlMorph | form image | form := self windowCloseForm. image := ImageMorph new. image image: form. image color: Color yellow. ^ image! ! !GLMUITheme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:30'! growlFillColorFor: aGrowlMorph ^ Color darkGray alpha: 0.5! ! !GLMUITheme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:12'! growlLabelColorFor: aGrowlMorph ^ Color white twiceDarker! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/23/2012 14:22'! initialize "self beCurrent" super initialize. self windowActiveDropShadowStyle: #diffuse! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:09'! initializeForms "Initialize the receiver's image forms." |inactiveForm| super initializeForms. inactiveForm := self newWindowInactiveControlForm. self forms at: #windowCloseOver put: self newWindowCloseOverForm; at: #windowMinimizeOver put: self newWindowMinimizeOverForm; at: #windowMaximizeOver put: self newWindowMaximizeOverForm; at: #windowClosePassive put: inactiveForm; at: #windowMinimizePassive put: inactiveForm; at: #windowMaximizePassive put: inactiveForm! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:48'! listDisabledFillStyleFor: aList "Return the disabled fillStyle for the given list." ^ self textEditorDisabledFillStyleFor: aList! ! !GLMUITheme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/10/2010 08:12'! menuItemInDockingBarSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item that is in a docking bar." ^ self buttonSelectedFillStyleFor: aMenuItem! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 09:09'! menuPinForm "Answer the form to use for the pin button of a menu." ^ GLMUIThemeIcons menuPinForm! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:47'! morphTreeSplitterNormalFillStyleFor: aSplitter ^ self splitterNormalFillStyleFor: aSplitter! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:49'! morphTreeSplitterPressedFillStyleFor: aSplitter ^ self splitterPressedFillStyleFor: aSplitter! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 09:09'! newCheckboxMarkerForm "Answer a new checkbox marker form." ^GLMUIThemeIcons checkboxMarkerForm! ! !GLMUITheme methodsFor: 'morph creation' stamp: 'TudorGirba 4/8/2011 01:15'! newCloseControlIn: aThemedMorph for: aModel action: aValuable help: helpText "Answer a button for closing things." |form msb| form := self windowCloseForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowCloseOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: aValuable; setBalloonText: helpText. ^msb! ! !GLMUITheme methodsFor: 'morph creation' stamp: 'tg 9/5/2010 21:28'! newFocusIndicatorMorphFor: aMorph "Answer a new focus indicator for the given morph." |radius| radius := aMorph focusIndicatorCornerRadius. ^ BorderedMorph new fillStyle: Color transparent; borderStyle: (SimpleBorder new width: 1; baseColor: (self glamorousBaseSelectionColorFor: aMorph)); bounds: aMorph focusBounds! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 09:46'! newRadioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^GLMUIThemeIcons radioButtonMarkerForm ! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'tg 9/6/2010 14:38'! newRadioMarkerForm "Answer a new checkbox marker form." ^Form extent: 12@12 depth: 32! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:06'! newTreeExpandedForm "Answer a new form for an expanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 1200130184 478709896 4169697416 4287137928 4287137928 4287137928 4287137928 4287137928 4236806280 646482056 16777215 2508753032 4287137928 4287137928 4287137928 4287137928 4287137928 2726856840 16777215 16777215 495487112 4186474632 4287137928 4287137928 4287137928 4236806280 612927624 16777215 16777215 16777215 2542307464 4287137928 4287137928 4287137928 2676525192 16777215 16777215 16777215 16777215 478709896 4169697416 4287137928 4220029064 579373192 16777215 16777215 16777215 16777215 16777215 2424866952 4287137928 2626193544 16777215 16777215 16777215 16777215 16777215 16777215 394823816 4018702472 529041544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 864585864 16777215 16777215 16777215 16777215) offset: 0@0)! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:06'! newTreeUnexpandedForm "Answer a new form for an unexpanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 461932680 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2324203656 4152920200 2458421384 428378248 16777215 16777215 16777215 16777215 16777215 2357758088 4287137928 4287137928 4152920200 2408089736 394823816 16777215 16777215 16777215 2391312520 4287137928 4287137928 4287137928 4287137928 4119365768 2324203656 344492168 16777215 2408089736 4287137928 4287137928 4287137928 4287137928 4287137928 4287137928 3968370824 780699784 2391312520 4287137928 4287137928 4287137928 4287137928 4236806280 2659747976 529041544 16777215 2357758088 4287137928 4287137928 4253583496 2810742920 646482056 16777215 16777215 16777215 2324203656 4253583496 2777188488 696813704 16777215 16777215 16777215 16777215 16777215 1200130184 663259272 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:05'! newWindowCloseForm "Answer a new form for a window close box." ^ GLMUIThemeIcons windowCloseForm ! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:18'! newWindowCloseOverForm "Answer a new form for a window menu box." ^ self newWindowCloseForm! ! !GLMUITheme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:08'! newWindowInactiveControlForm "Answer a new form for an inactive window control box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291677645 4288585374 4286085240 4284243036 4284243036 4286085240 4288585374 4291677645 0 0 0 0 0 0 0 4289572269 4285756275 4286479998 4288716960 4289835441 4289835441 4288716960 4286479998 4285756275 4289572269 0 0 0 0 0 4289506476 4284835173 4287335307 4290559164 4292598747 4293322470 4293322470 4292598747 4290559164 4287335307 4284703587 4289506476 0 0 0 4291546059 4285493103 4286414205 4288980132 4291217094 4292335575 4292598747 4292598747 4292335575 4291282887 4288980132 4286282619 4285493103 4291546059 0 0 4288980132 4285361517 4287466893 4288782753 4289835441 4290295992 4290295992 4290427578 4290164406 4289835441 4288782753 4287466893 4285361517 4288980132 0 0 4286282619 4286611584 4288059030 4288716960 4289177511 4289572269 4289835441 4289835441 4289703855 4289374890 4288782753 4288059030 4286611584 4286282619 0 0 4285164138 4287664272 4288782753 4289374890 4289835441 4290427578 4290624957 4290624957 4290559164 4290032820 4289374890 4288914339 4287664272 4285164138 0 0 4285361517 4288322202 4289703855 4290295992 4290822336 4291414473 4291677645 4291677645 4291414473 4291085508 4290427578 4289703855 4288453788 4285624689 0 0 4287072135 4288716960 4290427578 4291217094 4291677645 4292203989 4292598747 4292598747 4292335575 4291809231 4291217094 4290427578 4288716960 4287203721 0 0 4288980132 4288256409 4290624957 4291677645 4292335575 4292927712 4293256677 4293256677 4293059298 4292598747 4291809231 4290822336 4288256409 4289177511 0 0 4291677645 4287664272 4290295992 4292006610 4293059298 4293454056 4293585642 4293585642 4293454056 4293125091 4292203989 4290427578 4287730065 4291677645 0 0 4293256677 4290032820 4288124823 4291217094 4292796126 4293322470 4293717228 4293717228 4293454056 4292927712 4291677645 4288256409 4290032820 4293256677 0 0 0 4293454056 4290032820 4288322202 4289967027 4291546059 4292598747 4292664540 4291677645 4290295992 4288716960 4290032820 4293454056 0 0 0 0 0 4293322470 4292203989 4289835441 4288782753 4288322202 4288453788 4288980132 4289835441 4292335575 4293322470 0 0 0 0 0 0 0 4293059298 4293585642 4293717228 4293585642 4293585642 4293585642 4293585642 4293059298 0 0 0 0) offset: 0@0)! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:06'! newWindowMaximizeForm "Answer a new form for a window maximize box." ^ GLMUIThemeIcons windowMaximizeForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:18'! newWindowMaximizeOverForm "Answer a new form for a window menu box." ^ self newWindowMaximizeForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:08'! newWindowMenuForm "Answer a new form for a window menu box." ^ GLMUIThemeIcons windowMenuForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:15'! newWindowMenuPassiveForm "Answer a new form for a window menu box." ^ GLMUIThemeIcons windowMenuInactiveForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:10'! newWindowMinimizeForm "Answer a new form for a window minimize box." ^ GLMUIThemeIcons windowMinimizeForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 15:09'! newWindowMinimizeOverForm "Answer a new form for a window menu box." ^ self newWindowMinimizeForm! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/3/2010 14:50'! plainGroupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a plain group panel." ^SimpleBorder new width: 1; baseColor: Color transparent! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:51'! progressBarFillStyleFor: aProgressBar ^ self glamorousBasePassiveBackgroundColorFor: aProgressBar! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/7/2010 13:52'! progressBarProgressFillStyleFor: aProgressBar ^ (self glamorousLightSelectionColorFor: aProgressBar)! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 4/14/2011 10:28'! progressFillStyleFor: aProgress "Return the progress fillStyle for the given progress morph." ^ self windowActiveFillStyleFor: aProgress ! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:11'! radioButtonForm "Answer the form to use for a normal radio button." ^ GLMUIThemeIcons radioButtonUnselectedForm! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:11'! radioButtonSelectedForm "Answer the form to use for a selected radio button." ^ GLMUIThemeIcons radioButtonSelectedForm ! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 1/14/2010 03:10'! resizerGripNormalFillStyleFor: aResizer "Return the normal fillStyle for the given resizer. For the moment, answer a transparent colour for no drawing, non transparent to draw as normal." ^Color transparent! ! !GLMUITheme methodsFor: 'scrollbars' stamp: 'TudorGirba 5/19/2013 14:46'! scrollBarButtonArrowVertices: aRectangle ^ self verticesForSimpleArrow: aRectangle! ! !GLMUITheme methodsFor: 'fill-styles-scrollbars' stamp: 'tg 9/13/2010 10:52'! scrollbarNormalButtonFillStyleFor: aScrollbar "Return the normal scrollbar button fillStyle for the given scrollbar." ^ self scrollbarNormalThumbFillStyleFor: aScrollbar! ! !GLMUITheme methodsFor: 'fill-styles-scrollbars' stamp: 'tg 9/4/2010 21:03'! scrollbarNormalFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." ^ "(self glamorousBaseColorFor: aScrollbar) muchLighter" Color r: 245 g: 245 b: 245 range: 255! ! !GLMUITheme methodsFor: 'border-styles-scrollbars' stamp: 'TudorGirba 4/8/2011 00:01'! scrollbarNormalThumbBorderStyleFor: aScrollbar "Return the normal thumb borderStyle for the given scrollbar." ^ BorderStyle simple width: 0; baseColor: Color transparent! ! !GLMUITheme methodsFor: 'fill-styles-scrollbars' stamp: 'TudorGirba 4/11/2011 01:38'! scrollbarNormalThumbFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." "^ (self glamorousNormalFillStyleWithBaseColor: aScrollbar paneColor for: aScrollbar height: aScrollbar height) direction: (aScrollbar bounds isWide ifTrue: [0 @ aScrollbar height] ifFalse: [aScrollbar width @ 0])" ^ self glamorousNormalFillStyleFor: aScrollbar height: aScrollbar height! ! !GLMUITheme methodsFor: 'border-styles-scrollbars' stamp: 'tg 8/31/2010 13:27'! scrollbarPagingAreaCornerStyleIn: aThemedMorph ^#square! ! !GLMUITheme methodsFor: 'border-styles-scrollbars' stamp: 'tg 8/31/2010 13:27'! scrollbarThumbCornerStyleIn: aThemedMorph ^#square! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/4/2010 23:14'! separatorFillStyleFor: aSeparator "Return the separator fillStyle for the given separator." ^ SolidFillStyle color: (self glamorousBaseColorFor: aSeparator) darker! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:48'! sliderDisabledFillStyleFor: aSlider "Return the disabled fillStyle for the given slider." ^ self textEditorDisabledFillStyleFor: aSlider! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:41'! splitterNormalFillStyleFor: aSplitter "Return the normal splitter fillStyle for the given splitter." ^ SolidFillStyle color: Color transparent! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:46'! splitterPressedFillStyleFor: aSplitter "Return the pressed splitter fillStyle for the given splitter." |aColor| aColor := self glamorousBaseColorFor: aSplitter. ^ (GradientFillStyle ramp: {0.0->aColor lighter. 0.9-> aColor}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !GLMUITheme methodsFor: 'basic-colors' stamp: 'tg 9/13/2010 10:36'! subgroupColorFrom: paneColor "Answer the colour for a subgroup given the pane colour." ^ self glamorousLightColorFor: paneColor" self class baseColor"! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 8/31/2010 15:28'! tabLabelNormalBorderStyleFor: aTabLabel " ^SimpleBorder new width: 0; baseColor: (self buttonBaseColorFor: aTabLabel) darker " ^ self buttonNormalBorderStyleFor: aTabLabel! ! !GLMUITheme methodsFor: 'fill-styles-buttons' stamp: 'tg 8/31/2010 11:13'! tabLabelNormalFillStyleFor: aTabLabel ^ self buttonNormalFillStyleFor: aTabLabel ! ! !GLMUITheme methodsFor: 'fill-styles-buttons' stamp: 'tg 8/31/2010 11:13'! tabLabelSelectedFillStyleFor: aTabLabel ^ self buttonSelectedFillStyleFor: aTabLabel ! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/13/2010 10:38'! tabPanelBorderStyleFor: aTabGroup ^ GLMTabPanelBorder new width: 1; baseColor: ((self glamorousDarkBaseColorFor: aTabGroup)); tabSelector: aTabGroup tabSelectorMorph! ! !GLMUITheme methodsFor: 'basic-colors' stamp: 'tg 9/6/2010 15:03'! taskbarButtonLabelColorFor: aButton "Answer the colour for the label of the given taskbar button." ^aButton model ifNil: [super taskbarButtonLabelColorFor: aButton] ifNotNil: [:win | win isActive ifTrue: [Color black] ifFalse: [Color gray darker]]! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/23/2012 15:32'! taskbarFillStyleFor: aTaskbar ^ "self buttonNormalFillStyleFor: aTaskbar" SolidFillStyle color: Color transparent ! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 20:23'! taskbarThumbnailCornerStyleFor: aMorph "Answer the corner style for the taskbar thumbnail/tasklist." ^#square! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 20:56'! taskbarThumbnailNormalBorderStyleFor: aWindow ^ self buttonNormalBorderStyleFor: aWindow! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:46'! textEditorDisabledFillStyleFor: aTextEditor "Return the disabled fillStyle for the given text editor." ^self glamorousBasePassiveBackgroundColorFor: aTextEditor! ! !GLMUITheme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 23:09'! textEditorNormalBorderStyleFor: aTextEditor "Return the normal text editor borderStyle for the given text editor." ^self buttonNormalBorderStyleFor: aTextEditor! ! !GLMUITheme methodsFor: 'basic-colors' stamp: 'TudorGirba 4/8/2011 00:02'! treeLineWidth "Answer the width of the tree lines." ^0! ! !GLMUITheme methodsFor: 'scrollbars' stamp: 'tg 9/4/2010 20:16'! verticesForSimpleArrow: aRectangle "PRIVATE - answer a collection of vertices to draw a simple arrow" | vertices | vertices := OrderedCollection new. "" vertices add: aRectangle bottomLeft. vertices add: aRectangle center x @ (aRectangle top + (aRectangle width / 8)). vertices add: aRectangle bottomRight. vertices add: aRectangle bottomRight + (0@0.01). "" ^ vertices " | vertices | vertices := OrderedCollection new. vertices add: (aRectangle center x - (aRectangle width / 4)) @ (aRectangle bottom - 8). vertices add: aRectangle center x @ (aRectangle top). vertices add: (aRectangle center x + (aRectangle width / 4)) @ (aRectangle bottom - 8). vertices add: (aRectangle center x + (aRectangle width / 4)) @ (aRectangle bottom - 8) + (0@0.01). ^ vertices" " ^ super verticesForSimpleArrow: aRectangle "! ! !GLMUITheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:09'! watcherWindowActiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !GLMUITheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:10'! watcherWindowInactiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !GLMUITheme methodsFor: 'accessing' stamp: 'TudorGirba 4/7/2011 23:46'! windowActiveDropShadowStyle: anObject "Set the value of windowActiveDropShadowStyle" windowActiveDropShadowStyle := anObject! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:28'! windowActiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^SolidFillStyle color: self class baseColor! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:51'! windowActiveTitleFillStyleFor: aWindow ^ "self glamorousNormalFillStyleFor: aWindow height: aWindow labelHeight" SolidFillStyle color: Color transparent! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:13'! windowCloseOverForm "Answer the form to use for mouse over window close buttons" ^self forms at: #windowCloseOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:17'! windowClosePassiveForm "Answer the form to use for passive (background) window close buttons" ^GLMUIThemeIcons windowCloseInactiveForm! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'tg 9/2/2010 13:52'! windowInactiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^self windowActiveFillStyleFor: aWindow! ! !GLMUITheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:51'! windowInactiveTitleFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^ SolidFillStyle color: Color transparent! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:14'! windowMaximizeOverForm "Answer the form to use for mouse over window maximize buttons" ^self forms at: #windowMaximizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:18'! windowMaximizePassiveForm "Answer the form to use for passive (background) window maximize/restore buttons" ^GLMUIThemeIcons windowMaximizeInactiveForm! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'tg 9/3/2010 10:52'! windowMenuPassiveForm "Answer the form to use for passive (background) window menu buttons" ^self newWindowMenuPassiveForm! ! !GLMUITheme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:14'! windowMinimizeOverForm "Answer the form to use for mouse over window minimize buttons" ^self forms at: #windowMinimizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMUITheme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 13:18'! windowMinimizePassiveForm "Answer the form to use for passive (background) window minimize buttons" ^GLMUIThemeIcons windowMinimizeInactiveForm! ! !GLMUITheme methodsFor: 'defaults' stamp: 'TudorGirba 5/19/2013 21:26'! windowShadowColor "Answer the window shadow color to use." ^ Color gray! ! !GLMWhitespaceTheme commentStamp: '' prior: 42888857! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. - maximizes whitespace. - is fast. PolymorphSystemSettings desktopColor: Color white. self defaultSettings: nil. self beCurrent.! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! baseColor ^ Color white"Color r: 210 g: 210 b: 210 range: 255"! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! basePassiveBackgroundColor ^ Color r: 245 g: 245 b: 245 range: 255! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! baseSelectionColor ^ Color r: 97 g: 163 b: 225 range: 255! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/20/2013 06:30'! darkBaseColor ^ Color r: 210 g: 210 b: 210 range: 255! ! !GLMWhitespaceTheme class methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! importGlamorousIcons "utility method to import the icons necessary for the theme from the file system" "self importGlamorousIcons" | icons | icons := #( 'glamorousMax' 'glamorousMin' 'glamorousClose' 'glamorousMenu' 'glamorousMaxInactive' 'glamorousMinInactive' 'glamorousCloseInactive' 'glamorousMenuInactive' 'glamorousMenuPin' 'glamorousCheckboxSelected' 'glamorousCheckboxUnselected' 'glamorousRadioSelected' 'glamorousRadioUnselected'). self importIcons: icons fromFolder: 'icons' inClass: GLMUIThemeIcons category: '*glamour-morphic-theme'! ! !GLMWhitespaceTheme class methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! importIcons: icons fromFolder: aString inClass: aClass category: aCategory icons do: [:each | | method form | form := PNGReadWriter formFromFileNamed: aString, '/', each , '.png'. method := each , Character cr asString , (aClass methodStart: each), form storeString, aClass methodEnd. aClass class compile: method classified: aCategory ]. aClass initialize! ! !GLMWhitespaceTheme class methodsFor: 'testing' stamp: 'TudorGirba 5/16/2013 22:10'! isAbstract "Answer whether the receiver is considered to be abstract." ^false! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! lightBaseColor ^ Color r: 240 g: 240 b: 240 range: 255! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! lightSelectionColor ^ Color r: 175 g: 213 b: 250 range: 255! ! !GLMWhitespaceTheme class methodsFor: 'settings' stamp: 'TudorGirba 5/20/2013 06:34'! newDefaultSettings self setPreferredPreferences. BalloonMorph setBalloonColorTo: self veryLightSelectionColor. ^super newDefaultSettings menuColor: self baseColor; menuTitleColor: self baseColor; windowColor: self baseColor; selectionColor: self lightSelectionColor; menuSelectionColor: self baseSelectionColor; progressBarColor: self baseColor; standardColorsOnly: true; autoSelectionColor: false; preferRoundCorner: false; fadedBackgroundWindows: false; secondarySelectionColor: self veryLightSelectionColor; flatMenu: true! ! !GLMWhitespaceTheme class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/23/2013 20:20'! setPreferredPreferences "NECPreferences expandPrefixes: true; popupShowWithShortcut: Character tab asShortcut."! ! !GLMWhitespaceTheme class methodsFor: 'settings' stamp: 'TudorGirba 5/16/2013 22:10'! setPreferredShoutColors "self setPreferredShoutColors" SHTextStylerST80 styleTable: #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment (gray darker)) (unfinishedComment (red muchDarker)) (#'$' (red muchDarker)) (character (red muchDarker)) (integer (red muchDarker)) (number (red muchDarker)) (#- (red muchDarker)) (symbol (magenta muchDarker)) (stringSymbol (magenta muchDarker)) (literalArray (magenta muchDarker)) (string (magenta muchDarker) normal) (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal nil italic) (keyword (black)) (binary (black)) (unary (black)) (incompleteKeyword red) (incompleteBinary red) (incompleteUnary red ) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (#self (cyan muchDarker )) (#super (cyan muchDarker )) (#true (red muchDarker)) (#false (red muchDarker)) (#nil (red muchDarker)) (#thisContext (cyan muchDarker )) (#return (cyan muchDarker ) bold) (patternArg (blue muchDarker)) (methodArg (blue muchDarker)) (blockPatternArg (blue muchDarker)) (blockArg (blue muchDarker)) (argument (blue muchDarker)) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (methodTempBar (black)) (blockTempBar (black)) (blockArgsBar (black)) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold) (blockTempVar (blue muchDarker)) (blockPatternTempVar (blue muchDarker)) (instVar (blue muchDarker)) (workspaceVar (blue muchDarker)) (undefinedIdentifier red) (incompleteIdentifier red) (tempVar (blue muchDarker)) (patternTempVar (blue muchDarker)) (poolConstant (blue muchDarker)) (classVar (blue muchDarker)) (globalVar (blue muchDarker))) ! ! !GLMWhitespaceTheme class methodsFor: 'settings' stamp: 'TudorGirba 5/16/2013 22:10'! setPreferredWorldBackground "self setPreferredWorldBackground" World color: Color white! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! themeName ^ 'Glamorous'! ! !GLMWhitespaceTheme class methodsFor: 'accessing' stamp: 'TudorGirba 5/19/2013 21:49'! veryLightSelectionColor ^ Color white darker! ! !GLMWhitespaceTheme methodsFor: 'border-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! buttonCornerStyleIn: aThemedMorph "If asked, we only allow square corners" ^ #square! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! buttonLabelForText: aTextOrString "Answer the label to use for the given text." ^aTextOrString isString ifTrue: [(LabelMorph contents: aTextOrString) color: Color black] ifFalse: [super buttonLabelForText: aTextOrString]! ! !GLMWhitespaceTheme methodsFor: 'defaults' stamp: 'TudorGirba 5/16/2013 22:10'! buttonMinHeight "Answer the minumum height of a button for this theme." ^24! ! !GLMWhitespaceTheme methodsFor: 'defaults' stamp: 'TudorGirba 5/16/2013 22:10'! buttonMinWidth "Answer the minumum width of a button for this theme." ^24! ! !GLMWhitespaceTheme methodsFor: 'border-styles-buttons' stamp: 'TudorGirba 5/19/2013 22:44'! buttonNormalBorderStyleFor: aButton "Return the normal button borderStyle for the given button." (aButton valueOfProperty: #noBorder ifAbsent: [false]) ifTrue: [ ^ SimpleBorder new width: 0; baseColor: Color transparent ]. ^ self glamorousLightBorderFor: aButton! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! buttonNormalFillStyleFor: aButton "Return the normal button fillStyle for the given button." (aButton valueOfProperty: #noFill ifAbsent: [false]) ifTrue: [^ SolidFillStyle color: Color transparent ]. ^ self glamorousNormalFillStyleFor: aButton height: aButton height! ! !GLMWhitespaceTheme methodsFor: 'border-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! buttonSelectedBorderStyleFor: aButton ^ self buttonNormalBorderStyleFor: aButton! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-buttons' stamp: 'TudorGirba 5/19/2013 14:06'! buttonSelectedFillStyleFor: aButton "Return the normal button fillStyle for the given button." | top bottom | top := self glamorousLightSelectionColorFor: aButton. bottom := self glamorousBaseColorFor: aButton. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aButton bounds origin; direction: 0 @ aButton height; radial: false! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! checkboxForm "Answer the form to use for a normal checkbox." ^self checkboxUnselectedForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! checkboxSelectedForm "Answer the form to use for a selected checkbox." ^GLMUIThemeIcons checkboxSelectedForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! checkboxUnselectedForm "Answer the form to use for a selected checkbox." ^ GLMUIThemeIcons checkboxUnselectedForm! ! !GLMWhitespaceTheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/19/2013 21:18'! configureWatcherWindowLabelAreaFor: aWindow "Configure the label area for the given Watcher window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/21/2013 20:57'! configureWindowBorderFor: aWindow ^ self glamorousThickBorderFor: aWindow! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/19/2013 14:14'! configureWindowDropShadowFor: aWindow aWindow hasDropShadow: false! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! configureWindowLabelAreaFor: aWindow "Configure the label area for the given window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow hasMenuBox ifTrue: [aWindow addMenuControl]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! createCollapseBoxFor: aSystemWindow "Answer a button for minimising the window." |form msb| form := self windowMinimizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow collapseBoxHit]; setBalloonText: 'Collapse this window' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! createExpandBoxFor: aSystemWindow "Answer a button for maximising/restoring the window." |form msb| form := self windowMaximizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow expandBoxHit]; setBalloonText: 'Expand to full screen' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! createMenuBoxFor: aSystemWindow "Answer a button for the window menu." " ^aSystemWindow createBox labelGraphic: (self windowMenuIconFor: aSystemWindow); extent: aSystemWindow boxExtent; actWhen: #buttonDown; actionSelector: #offerWindowMenu; setBalloonText: 'window menu' translated" |form msb| form := self windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow offerWindowMenu]; setBalloonText: 'window menu' translated; extent: aSystemWindow boxExtent. ^msb! ! !GLMWhitespaceTheme methodsFor: 'defaults' stamp: 'TudorGirba 5/16/2013 22:10'! dialogWindowPreferredCornerStyleFor: aDialogWindow "Answer the preferred corner style for the given dialog." ^#square! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! dockingBarNormalFillStyleFor: aToolDockingBar ^ SolidFillStyle color: Color transparent! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! dropListDisabledFillStyleFor: aDropList "Return the disabled fillStyle for the given drop list." ^ self textEditorDisabledFillStyleFor: aDropList! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/16/2013 22:10'! dropListNormalBorderStyleFor: aDropList "Return the normal borderStyle for the given drop list" ^ self buttonNormalBorderStyleFor: aDropList! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! dropListNormalFillStyleFor: aDropList "Return the normal fillStyle for the given drop list." ^ SolidFillStyle color: Color white! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! expanderTitleNormalFillStyleFor: anExpanderTitle "Return the normal expander title fillStyle for the given expander title." ^ self buttonNormalFillStyleFor: anExpanderTitle! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousBaseColorFor: aButton ^ self class baseColor "unfortunately, it looks like paneColor does not always return the wanted color" "aButton paneColorOrNil ifNil: [Color r: 200 g: 200 b: 200 range: 255]"! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousBasePassiveBackgroundColorFor: aButton ^ self class basePassiveBackgroundColor! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousBaseSelectionColorFor: aButton ^ self class baseSelectionColor! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousDarkBaseColorFor: aButton ^ self class darkBaseColor! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/23/2013 06:24'! glamorousLightBorderFor: aMorph | aStyle | " aMorph roundedCorners: #(1 2 3 4). " aStyle := SimpleBorder new baseColor: (self glamorousLightColorFor: aMorph); width: 0. ^ aStyle! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousLightColorFor: aButton ^ self class lightBaseColor! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/16/2013 22:10'! glamorousLightSelectionColorFor: aMorph ^ self class lightSelectionColor! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/20/2013 22:36'! glamorousNormalFillStyleFor: aMorph height: anInteger "Return the normal button fillStyle for the given morph." ^ SolidFillStyle color: (self glamorousLightColorFor: aMorph)! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/10/2013 21:28'! glamorousNormalFillStyleWithBaseColor: aColor for: aMorph height: anInteger | top bottom | top := aColor "darker". bottom := aColor. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aMorph bounds origin; direction: 0 @ anInteger; radial: false! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/21/2013 20:52'! glamorousThickBorderFor: aWindow | aStyle | aStyle := SimpleBorder new baseColor: (self glamorousDarkBaseColorFor: aWindow); width: 5. aWindow borderStyle: aStyle. ^ aStyle! ! !GLMWhitespaceTheme methodsFor: 'private' stamp: 'TudorGirba 5/19/2013 14:39'! glamorousVisibleFillStyleFor: aMorph height: anInteger "Return the normal button fillStyle for the given morph." ^ SolidFillStyle color: (self glamorousLightColorFor: aMorph)! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/19/2013 22:49'! groupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a group panel." ^ self glamorousLightBorderFor: aGroupPanel! ! !GLMWhitespaceTheme methodsFor: 'growl - specific' stamp: 'TudorGirba 5/19/2013 14:15'! growlBorderColorFor: aGrowlMorph ^ self glamorousThickBorderFor: aGrowlMorph ! ! !GLMWhitespaceTheme methodsFor: 'growl - specific' stamp: 'TudorGirba 5/19/2013 14:09'! growlContentsColorFor: aGrowlMorph ^ Color black! ! !GLMWhitespaceTheme methodsFor: 'growl - specific' stamp: 'TudorGirba 5/16/2013 22:10'! growlDismissHandleFor: aGrowlMorph | form image | form := self windowCloseForm. image := ImageMorph new. image image: form. image color: Color yellow. ^ image! ! !GLMWhitespaceTheme methodsFor: 'growl - specific' stamp: 'TudorGirba 5/16/2013 22:10'! growlFillColorFor: aGrowlMorph ^ Color darkGray alpha: 0.5! ! !GLMWhitespaceTheme methodsFor: 'growl - specific' stamp: 'TudorGirba 5/19/2013 14:09'! growlLabelColorFor: aGrowlMorph ^ Color black! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! initialize "self beCurrent" super initialize. self windowActiveDropShadowStyle: #diffuse! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! initializeForms "Initialize the receiver's image forms." |inactiveForm| super initializeForms. inactiveForm := self newWindowInactiveControlForm. self forms at: #windowCloseOver put: self newWindowCloseOverForm; at: #windowMinimizeOver put: self newWindowMinimizeOverForm; at: #windowMaximizeOver put: self newWindowMaximizeOverForm; at: #windowClosePassive put: inactiveForm; at: #windowMinimizePassive put: inactiveForm; at: #windowMaximizePassive put: inactiveForm! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! listDisabledFillStyleFor: aList "Return the disabled fillStyle for the given list." ^ self textEditorDisabledFillStyleFor: aList! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/19/2013 22:49'! listNormalBorderStyleFor: aList "Return the normal borderStyle for the given list" ^ self glamorousLightBorderFor: aList! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! menuItemInDockingBarSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item that is in a docking bar." ^ self buttonSelectedFillStyleFor: aMenuItem! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! menuPinForm "Answer the form to use for the pin button of a menu." ^ GLMUIThemeIcons menuPinForm! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! morphTreeSplitterNormalFillStyleFor: aSplitter ^ self splitterNormalFillStyleFor: aSplitter! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! morphTreeSplitterPressedFillStyleFor: aSplitter ^ self splitterPressedFillStyleFor: aSplitter! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newCheckboxMarkerForm "Answer a new checkbox marker form." ^GLMUIThemeIcons checkboxMarkerForm! ! !GLMWhitespaceTheme methodsFor: 'morph creation' stamp: 'TudorGirba 5/16/2013 22:10'! newCloseControlIn: aThemedMorph for: aModel action: aValuable help: helpText "Answer a button for closing things." |form msb| form := self windowCloseForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowCloseOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: aValuable; setBalloonText: helpText. ^msb! ! !GLMWhitespaceTheme methodsFor: 'morph creation' stamp: 'TudorGirba 5/16/2013 22:10'! newFocusIndicatorMorphFor: aMorph "Answer a new focus indicator for the given morph." |radius| radius := aMorph focusIndicatorCornerRadius. ^ BorderedMorph new fillStyle: Color transparent; borderStyle: (SimpleBorder new width: 1; baseColor: (self glamorousBaseSelectionColorFor: aMorph)); bounds: aMorph focusBounds! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newRadioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^GLMUIThemeIcons radioButtonMarkerForm ! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! newRadioMarkerForm "Answer a new checkbox marker form." ^Form extent: 12@12 depth: 32! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! newTreeExpandedForm "Answer a new form for an expanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 1200130184 478709896 4169697416 4287137928 4287137928 4287137928 4287137928 4287137928 4236806280 646482056 16777215 2508753032 4287137928 4287137928 4287137928 4287137928 4287137928 2726856840 16777215 16777215 495487112 4186474632 4287137928 4287137928 4287137928 4236806280 612927624 16777215 16777215 16777215 2542307464 4287137928 4287137928 4287137928 2676525192 16777215 16777215 16777215 16777215 478709896 4169697416 4287137928 4220029064 579373192 16777215 16777215 16777215 16777215 16777215 2424866952 4287137928 2626193544 16777215 16777215 16777215 16777215 16777215 16777215 394823816 4018702472 529041544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 864585864 16777215 16777215 16777215 16777215) offset: 0@0)! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! newTreeUnexpandedForm "Answer a new form for an unexpanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 461932680 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2324203656 4152920200 2458421384 428378248 16777215 16777215 16777215 16777215 16777215 2357758088 4287137928 4287137928 4152920200 2408089736 394823816 16777215 16777215 16777215 2391312520 4287137928 4287137928 4287137928 4287137928 4119365768 2324203656 344492168 16777215 2408089736 4287137928 4287137928 4287137928 4287137928 4287137928 4287137928 3968370824 780699784 2391312520 4287137928 4287137928 4287137928 4287137928 4236806280 2659747976 529041544 16777215 2357758088 4287137928 4287137928 4253583496 2810742920 646482056 16777215 16777215 16777215 2324203656 4253583496 2777188488 696813704 16777215 16777215 16777215 16777215 16777215 1200130184 663259272 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowCloseForm "Answer a new form for a window close box." ^ GLMUIThemeIcons windowCloseForm ! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowCloseOverForm "Answer a new form for a window menu box." ^ self newWindowCloseForm! ! !GLMWhitespaceTheme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowInactiveControlForm "Answer a new form for an inactive window control box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291677645 4288585374 4286085240 4284243036 4284243036 4286085240 4288585374 4291677645 0 0 0 0 0 0 0 4289572269 4285756275 4286479998 4288716960 4289835441 4289835441 4288716960 4286479998 4285756275 4289572269 0 0 0 0 0 4289506476 4284835173 4287335307 4290559164 4292598747 4293322470 4293322470 4292598747 4290559164 4287335307 4284703587 4289506476 0 0 0 4291546059 4285493103 4286414205 4288980132 4291217094 4292335575 4292598747 4292598747 4292335575 4291282887 4288980132 4286282619 4285493103 4291546059 0 0 4288980132 4285361517 4287466893 4288782753 4289835441 4290295992 4290295992 4290427578 4290164406 4289835441 4288782753 4287466893 4285361517 4288980132 0 0 4286282619 4286611584 4288059030 4288716960 4289177511 4289572269 4289835441 4289835441 4289703855 4289374890 4288782753 4288059030 4286611584 4286282619 0 0 4285164138 4287664272 4288782753 4289374890 4289835441 4290427578 4290624957 4290624957 4290559164 4290032820 4289374890 4288914339 4287664272 4285164138 0 0 4285361517 4288322202 4289703855 4290295992 4290822336 4291414473 4291677645 4291677645 4291414473 4291085508 4290427578 4289703855 4288453788 4285624689 0 0 4287072135 4288716960 4290427578 4291217094 4291677645 4292203989 4292598747 4292598747 4292335575 4291809231 4291217094 4290427578 4288716960 4287203721 0 0 4288980132 4288256409 4290624957 4291677645 4292335575 4292927712 4293256677 4293256677 4293059298 4292598747 4291809231 4290822336 4288256409 4289177511 0 0 4291677645 4287664272 4290295992 4292006610 4293059298 4293454056 4293585642 4293585642 4293454056 4293125091 4292203989 4290427578 4287730065 4291677645 0 0 4293256677 4290032820 4288124823 4291217094 4292796126 4293322470 4293717228 4293717228 4293454056 4292927712 4291677645 4288256409 4290032820 4293256677 0 0 0 4293454056 4290032820 4288322202 4289967027 4291546059 4292598747 4292664540 4291677645 4290295992 4288716960 4290032820 4293454056 0 0 0 0 0 4293322470 4292203989 4289835441 4288782753 4288322202 4288453788 4288980132 4289835441 4292335575 4293322470 0 0 0 0 0 0 0 4293059298 4293585642 4293717228 4293585642 4293585642 4293585642 4293585642 4293059298 0 0 0 0) offset: 0@0)! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMaximizeForm "Answer a new form for a window maximize box." ^ GLMUIThemeIcons windowMaximizeForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMaximizeOverForm "Answer a new form for a window menu box." ^ self newWindowMaximizeForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMenuForm "Answer a new form for a window menu box." ^ GLMUIThemeIcons windowMenuForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMenuPassiveForm "Answer a new form for a window menu box." ^ GLMUIThemeIcons windowMenuInactiveForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMinimizeForm "Answer a new form for a window minimize box." ^ GLMUIThemeIcons windowMinimizeForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! newWindowMinimizeOverForm "Answer a new form for a window menu box." ^ self newWindowMinimizeForm! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/19/2013 16:32'! plainGroupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a plain group panel." ^SimpleBorder new width: 1; baseColor: Color transparent! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! progressBarFillStyleFor: aProgressBar ^ self glamorousBasePassiveBackgroundColorFor: aProgressBar! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! progressBarProgressFillStyleFor: aProgressBar ^ (self glamorousLightSelectionColorFor: aProgressBar)! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! progressFillStyleFor: aProgress "Return the progress fillStyle for the given progress morph." ^ self windowActiveFillStyleFor: aProgress ! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! radioButtonForm "Answer the form to use for a normal radio button." ^ GLMUIThemeIcons radioButtonUnselectedForm! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! radioButtonSelectedForm "Answer the form to use for a selected radio button." ^ GLMUIThemeIcons radioButtonSelectedForm ! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/21/2013 21:19'! resizerGripNormalFillStyleFor: aResizer "Return the normal fillStyle for the given resizer. For the moment, answer a transparent colour for no drawing, non transparent to draw as normal." self flag: 'this is used for the edge grip'. ^ super resizerGripNormalFillStyleFor: aResizer " aResizer instVarNamed: #handleColor put: (self glamorousDarkBaseColorFor: aResizer); instVarNamed: #dotColor put: Color transparent. ^SolidFillStyle color: Color red"! ! !GLMWhitespaceTheme methodsFor: 'scrollbars' stamp: 'TudorGirba 5/19/2013 14:46'! scrollbarArrowOfDirection: aSymbol size: finalSizeInteger color: aColor ^ Form extent: 1@1! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-scrollbars' stamp: 'TudorGirba 5/19/2013 14:41'! scrollbarNormalButtonFillStyleFor: aScrollbar "Return the normal scrollbar button fillStyle for the given scrollbar." ^ self glamorousNormalFillStyleFor: aScrollbar height: aScrollbar height! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-scrollbars' stamp: 'TudorGirba 5/16/2013 22:10'! scrollbarNormalFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." ^ Color transparent! ! !GLMWhitespaceTheme methodsFor: 'border-styles-scrollbars' stamp: 'TudorGirba 5/16/2013 22:10'! scrollbarNormalThumbBorderStyleFor: aScrollbar "Return the normal thumb borderStyle for the given scrollbar." ^ BorderStyle simple width: 0; baseColor: Color transparent! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-scrollbars' stamp: 'TudorGirba 5/19/2013 14:41'! scrollbarNormalThumbFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." ^ self glamorousVisibleFillStyleFor: aScrollbar height: aScrollbar height! ! !GLMWhitespaceTheme methodsFor: 'border-styles-scrollbars' stamp: 'TudorGirba 5/16/2013 22:10'! scrollbarPagingAreaCornerStyleIn: aThemedMorph ^#square! ! !GLMWhitespaceTheme methodsFor: 'border-styles-scrollbars' stamp: 'TudorGirba 5/16/2013 22:10'! scrollbarThumbCornerStyleIn: aThemedMorph ^#square! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! separatorFillStyleFor: aSeparator "Return the separator fillStyle for the given separator." ^ SolidFillStyle color: (self glamorousBaseColorFor: aSeparator) darker! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! sliderDisabledFillStyleFor: aSlider "Return the disabled fillStyle for the given slider." ^ self textEditorDisabledFillStyleFor: aSlider! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! splitterNormalFillStyleFor: aSplitter "Return the normal splitter fillStyle for the given splitter." ^ SolidFillStyle color: Color transparent! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! splitterPressedFillStyleFor: aSplitter "Return the pressed splitter fillStyle for the given splitter." |aColor| aColor := self glamorousBaseColorFor: aSplitter. ^ (GradientFillStyle ramp: {0.0->aColor lighter. 0.9-> aColor}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !GLMWhitespaceTheme methodsFor: 'basic-colors' stamp: 'TudorGirba 5/19/2013 14:31'! subgroupColorFrom: paneColor "Answer the colour for a subgroup given the pane colour." ^ self glamorousBaseColorFor: paneColor! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/16/2013 22:10'! tabLabelNormalBorderStyleFor: aTabLabel " ^SimpleBorder new width: 0; baseColor: (self buttonBaseColorFor: aTabLabel) darker " ^ self buttonNormalBorderStyleFor: aTabLabel! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! tabLabelNormalFillStyleFor: aTabLabel ^ self buttonNormalFillStyleFor: aTabLabel ! ! !GLMWhitespaceTheme methodsFor: 'fill-styles-buttons' stamp: 'TudorGirba 5/16/2013 22:10'! tabLabelSelectedFillStyleFor: aTabLabel ^ self buttonSelectedFillStyleFor: aTabLabel ! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/19/2013 22:07'! tabPanelBorderStyleFor: aTabGroup ^ GLMTabPanelBorder new width: 1; baseColor: ((self glamorousLightColorFor: aTabGroup)); tabSelector: aTabGroup tabSelectorMorph! ! !GLMWhitespaceTheme methodsFor: 'basic-colors' stamp: 'TudorGirba 5/16/2013 22:10'! taskbarButtonLabelColorFor: aButton "Answer the colour for the label of the given taskbar button." ^aButton model ifNil: [super taskbarButtonLabelColorFor: aButton] ifNotNil: [:win | win isActive ifTrue: [Color black] ifFalse: [Color gray darker]]! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! taskbarFillStyleFor: aTaskbar ^ "self buttonNormalFillStyleFor: aTaskbar" SolidFillStyle color: Color transparent ! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/16/2013 22:10'! taskbarThumbnailCornerStyleFor: aMorph "Answer the corner style for the taskbar thumbnail/tasklist." ^#square! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/16/2013 22:10'! taskbarThumbnailNormalBorderStyleFor: aWindow ^ self buttonNormalBorderStyleFor: aWindow! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! textEditorDisabledFillStyleFor: aTextEditor "Return the disabled fillStyle for the given text editor." ^self glamorousBasePassiveBackgroundColorFor: aTextEditor! ! !GLMWhitespaceTheme methodsFor: 'border-styles' stamp: 'TudorGirba 5/16/2013 22:10'! textEditorNormalBorderStyleFor: aTextEditor "Return the normal text editor borderStyle for the given text editor." ^self buttonNormalBorderStyleFor: aTextEditor! ! !GLMWhitespaceTheme methodsFor: 'basic-colors' stamp: 'TudorGirba 5/16/2013 22:10'! treeLineWidth "Answer the width of the tree lines." ^0! ! !GLMWhitespaceTheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/16/2013 22:10'! watcherWindowActiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !GLMWhitespaceTheme methodsFor: 'watcher window' stamp: 'TudorGirba 5/16/2013 22:10'! watcherWindowInactiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !GLMWhitespaceTheme methodsFor: 'accessing' stamp: 'TudorGirba 5/16/2013 22:10'! windowActiveDropShadowStyle: anObject "Set the value of windowActiveDropShadowStyle" windowActiveDropShadowStyle := anObject! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/19/2013 21:42'! windowActiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^ SolidFillStyle color: (self glamorousBaseColorFor: aWindow)! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/19/2013 21:45'! windowActiveTitleFillStyleFor: aWindow ^ SolidFillStyle color: (self glamorousDarkBaseColorFor: aWindow)! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowCloseOverForm "Answer the form to use for mouse over window close buttons" ^self forms at: #windowCloseOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! windowClosePassiveForm "Answer the form to use for passive (background) window close buttons" ^GLMUIThemeIcons windowCloseInactiveForm! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/21/2013 21:20'! windowEdgeNormalFillStyleFor: anEdgeGrip "Return the normal window edge fillStyle for the given edge grip." self flag: 'this is used for the long edges'. ^ super windowEdgeNormalFillStyleFor: anEdgeGrip "self glamorousDarkBaseColorFor: anEdgeGrip"! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowInactiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^self windowActiveFillStyleFor: aWindow! ! !GLMWhitespaceTheme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowInactiveTitleFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^ SolidFillStyle color: Color transparent! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowMaximizeOverForm "Answer the form to use for mouse over window maximize buttons" ^self forms at: #windowMaximizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! windowMaximizePassiveForm "Answer the form to use for passive (background) window maximize/restore buttons" ^GLMUIThemeIcons windowMaximizeInactiveForm! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowMenuPassiveForm "Answer the form to use for passive (background) window menu buttons" ^self newWindowMenuPassiveForm! ! !GLMWhitespaceTheme methodsFor: 'label-styles' stamp: 'TudorGirba 5/16/2013 22:10'! windowMinimizeOverForm "Answer the form to use for mouse over window minimize buttons" ^self forms at: #windowMinimizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !GLMWhitespaceTheme methodsFor: 'forms' stamp: 'TudorGirba 5/16/2013 22:10'! windowMinimizePassiveForm "Answer the form to use for passive (background) window minimize buttons" ^GLMUIThemeIcons windowMinimizeInactiveForm! ! !GLMWhitespaceTheme methodsFor: 'defaults' stamp: 'TudorGirba 5/19/2013 21:33'! windowShadowColor "Answer the window shadow color to use." ^ Color transparent! ! "EclipsePack"! "Glamour-Morphic-Theme"! ----End fileIn----! ----End fileIn----! ----QUIT/NOSAVE----an Array(2 July 2013 10:42:11 am) Pharo-30237.image priorSource: 9333070! ----STARTUP----an Array(2 July 2013 10:42:34 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! ----QUIT----an Array(2 July 2013 10:42:39 am) Pharo-30237.image priorSource: 9333070! ----STARTUP----an Array(2 July 2013 10:42:41 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! ----QUIT----an Array(2 July 2013 10:42:54 am) Pharo-30237.image priorSource: 9611342! ----STARTUP----an Array(2 July 2013 10:55:35 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! ----QUIT/NOSAVE----an Array(2 July 2013 10:58:07 am) Pharo-30237.image priorSource: 9611539! ----STARTUP----an Array(2 July 2013 10:58:25 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! World! World! ----QUIT/NOSAVE----an Array(2 July 2013 11:01:12 am) Pharo-30237.image priorSource: 9611539! ----STARTUP----an Array(2 July 2013 11:01:15 am) as /Users/MAC/Desktop/latest.zip Folder/Pharo-30237.image! ----QUIT----an Array(2 July 2013 11:01:49 am) Pharo-30237.image priorSource: 9611539! ----STARTUP----an Array(2 July 2013 1:02:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/2/2013 12:54' prior: 42874012! commentForCurrentUpdate ^ '10220 Debugger-generated accessors send #shouldBeImplemented https://pharo.fogbugz.com/f/cases/10220 10967 flattened added to collection https://pharo.fogbugz.com/f/cases/10967 7096 RectangleMorph is empty --> subclasses should use superclass https://pharo.fogbugz.com/f/cases/7096 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/2/2013 12:57'! script337 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.485.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/2/2013 12:57'! update30238 "self new update30238" self withUpdateLog: '10220 Debugger-generated accessors send #shouldBeImplemented https://pharo.fogbugz.com/f/cases/10220 10967 flattened added to collection https://pharo.fogbugz.com/f/cases/10967 7096 RectangleMorph is empty --> subclasses should use superclass https://pharo.fogbugz.com/f/cases/7096 '. self loadTogether: self script337 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TEnumeratingTest commentStamp: '' prior: 0! Test of basic functions in Collections that are in the protocol enumerating ! !DynamicMessageImplementor commentStamp: '' prior: 0! Called in the debugger to generate methods when you click on the create button! !Trait method! testAtPutOutOfBounds "self debug: #testAtPutOutOfBounds" self should: [self empty at: self anIndex put: self aValue] raise: Error ! ! !Trait method! testReplaceFromToWithStartingAt | result repStart collection replacementCollec firstInd secondInd | collection := self nonEmpty . result := collection copy. replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . repStart := replacementCollec size - ( secondInd - firstInd + 1 ) + 1. result replaceFrom: firstInd to: secondInd with: replacementCollec startingAt: repStart . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: ( collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( replacementCollec size - repStart +1 ) do: [:i| self assert: (result at: i)=( replacementCollec at: ( repStart + ( i - firstInd ) ) ) ]. " end part :" ( firstInd + replacementCollec size ) to: ( result size ) do: [ :i | self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ].! ! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsIdentitySetWithIdentityEqualsElements | result | result := self collectionWithIdentical asIdentitySet. " Only one element should have been removed as two elements are equals with Identity equality" self assert: result size = (self collectionWithIdentical size - 1). self collectionWithIdentical do: [ :each | (self collectionWithIdentical occurrencesOf: each) > 1 ifTrue: [ "the two elements equals only with classic equality shouldn't 'have been removed" self assert: (result asOrderedCollection occurrencesOf: each) = 1 " the other elements are still here" ] ifFalse: [ self assert: (result asOrderedCollection occurrencesOf: each) = 1 ] ]. self assert: result class = IdentitySet! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! testShuffled | result | result := self nonEmpty shuffled . "verify content of 'result: '" result do: [:each | self assert: (self nonEmpty occurrencesOf: each)=(result occurrencesOf: each)]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! testReplaceAllWith | result collection oldElement newElement oldOccurrences | collection := self nonEmpty . result := collection copy. oldElement := self elementInForReplacement . newElement := self newElement . oldOccurrences := (result occurrencesOf: oldElement) + (result occurrencesOf: newElement). result replaceAll: oldElement with: newElement . self assert: oldOccurrences = (result occurrencesOf: newElement)! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testFromToPut | collection index | index := self indexArray anyOne. collection := self nonEmpty copy. collection from: 1 to: index put: self aValue.. 1 to: index do: [:i | self assert: (collection at: i)= self aValue]. (index +1) to: collection size do: [:i | self assert: (collection at:i)= (self nonEmpty at:i)].! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testAtPutTwoValues "self debug: #testAtPutTwoValues" self nonEmpty at: self anIndex put: self aValue. self nonEmpty at: self anIndex put: self anotherValue. self assert: (self nonEmpty at: self anIndex) = self anotherValue.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testSequenceAbleIfEmptyifNotEmptyDo "self debug: #testSequenceAbleIfEmptyifNotEmptyDo" self assert: (self nonEmpty ifEmpty: [false] ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn]).! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testSort | result tmp | result := self unsortedCollection sort. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testSequenceIfEmptyifNotEmptyDo "self debug #testSequenceIfEmptyifNotEmptyDo" self assert: (self nonEmpty ifEmpty: [false] ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn]).! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self shouldnt: self aValue raise: Error. self shouldnt: self indexArray raise: Error. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testSorted | result tmp | result := self unsortedCollection sorted. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutTest self shouldnt: self aValue raise: Error. self shouldnt: self anotherValue raise: Error. self shouldnt: self anIndex raise: Error. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testSequenceIfNotEmpty self assert: (self nonEmpty ifNotEmpty: [:s | self accessValuePutInOn: s]) = self valuePutIn! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self shouldnt: [self collectionWithNonIdentitySameAtEndAndBegining ] raise: Error. collection := self collectionWithNonIdentitySameAtEndAndBegining . self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testAtWrapPut "self debug: #testAtWrapPut" | index | index := self indexArray anyOne. self nonEmpty atWrap: 0 put: self aValue. self assert: (self nonEmpty at:(self nonEmpty size))=self aValue. self nonEmpty atWrap: (self nonEmpty size+1) put: self aValue. self assert: (self nonEmpty at:(1))=self aValue. self nonEmpty atWrap: (index ) put: self aValue. self assert: (self nonEmpty at: index ) = self aValue. self nonEmpty atWrap: (self nonEmpty size+index ) put: self aValue . self assert: (self nonEmpty at:(index ))=self aValue .! ! !Trait method! testSequenceIfNotEmptyifEmpty self assert: (self nonEmpty ifEmpty: [false] ifNotEmpty: [:s | (self accessValuePutInOn: s) = self valuePutIn])! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testAtPut "self debug: #testAtPut" self nonEmpty at: self anIndex put: self aValue. self assert: (self nonEmpty at: self anIndex) = self aValue. ! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testOFixtureReplacementSequencedTest self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: self elementInForReplacement raise: Error. self assert: (self nonEmpty includes: self elementInForReplacement ) . self shouldnt: self newElement raise: Error. self shouldnt: self firstIndex raise: Error. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self shouldnt: self secondIndex raise: Error. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self shouldnt: self replacementCollection raise: Error. self shouldnt: self replacementCollectionSameSize raise: Error. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! accessValuePutIn "return access the element put in the non-empty collection" ^ self perform: self selectorToAccessValuePutIn! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testSortUsingSortBlock | result tmp | result := self unsortedCollection sort: [:a :b | a>b]. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! test0FixtureEmptySequenceableTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIdentityIndexOfIAbsentDuplicate "self debug: #testIdentityIndexOfIfAbsent" | collection element elementCopy | collection := self collectionWithNonIdentitySameAtEndAndBegining . element := collection last. elementCopy := element copy. self deny: element == elementCopy . self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = collection size. self assert: (collection identityIndexOf: elementCopy ifAbsent: [ 55 ]) = 55! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! testSequenceIfNotEmptyDo self empty ifNotEmptyDo: [:s | self assert: false]. self assert: (self nonEmpty ifNotEmptyDo: [:s | self accessValuePutInOn: s]) = self valuePutIn ! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! accessValuePutInOn: s "return access the element put in the non-empty collection" ^ s perform: self selectorToAccessValuePutIn! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testSequenceIfNotEmptyDoifNotEmpty self assert: (self nonEmpty ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn] ifEmpty: [false])! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! testAtAllIndexesPut self nonEmpty atAllPut: self aValue. self nonEmpty do:[ :each| self assert: each = self aValue]. ! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testAtLastPut | result index | index := self indexArray anyOne. result := self nonEmpty atLast: index put: self aValue. self assert: (self nonEmpty at: (self nonEmpty size +1 - index)) = self aValue .! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAtAllPut | | self nonEmpty atAll: self indexArray put: self aValue.. self indexArray do: [:i | self assert: (self nonEmpty at: i)=self aValue ]. ! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! testReplaceFromToWith | result collection replacementCollec firstInd secondInd | collection := self nonEmpty . replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . result := collection copy. result replaceFrom: firstInd to: secondInd with: replacementCollec . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: (collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( firstInd + replacementCollec size - 1 ) do: [ :i | self assert: ( result at: i ) = ( replacementCollec at: ( i - firstInd +1 ) ) ]. " end part :" ( firstInd + replacementCollec size) to: (result size) do: [:i| self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ]. ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! testAtAllPutAll | aValueArray | aValueArray := self valueArray . self nonEmpty atAll: self indexArray putAll: aValueArray . 1 to: self indexArray size do: [:i | self assert: (self nonEmpty at:(self indexArray at: i))= (aValueArray at:i) ]! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !Trait method! valueArray " return a collection (with the same size than 'indexArray' )of values to be put in 'nonEmpty' at indexes in 'indexArray' " | result | result := Array new: self indexArray size. 1 to: result size do: [:i | result at:i put: (self aValue ). ]. ^ result.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !ArrayTest commentStamp: '' prior: 42108835! This is the unit test for the class Array. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !Trait method! testAtPutOutOfBounds "self debug: #testAtPutOutOfBounds" self should: [self empty at: self anIndex put: self aValue] raise: Error ! ! !Trait method! testReplaceFromToWithStartingAt | result repStart collection replacementCollec firstInd secondInd | collection := self nonEmpty . result := collection copy. replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . repStart := replacementCollec size - ( secondInd - firstInd + 1 ) + 1. result replaceFrom: firstInd to: secondInd with: replacementCollec startingAt: repStart . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: ( collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( replacementCollec size - repStart +1 ) do: [:i| self assert: (result at: i)=( replacementCollec at: ( repStart + ( i - firstInd ) ) ) ]. " end part :" ( firstInd + replacementCollec size ) to: ( result size ) do: [ :i | self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ].! ! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsIdentitySetWithIdentityEqualsElements | result | result := self collectionWithIdentical asIdentitySet. " Only one element should have been removed as two elements are equals with Identity equality" self assert: result size = (self collectionWithIdentical size - 1). self collectionWithIdentical do: [ :each | (self collectionWithIdentical occurrencesOf: each) > 1 ifTrue: [ "the two elements equals only with classic equality shouldn't 'have been removed" self assert: (result asOrderedCollection occurrencesOf: each) = 1 " the other elements are still here" ] ifFalse: [ self assert: (result asOrderedCollection occurrencesOf: each) = 1 ] ]. self assert: result class = IdentitySet! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! testDo! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testTAdd | added collection | collection :=self otherCollection . added := collection add: self element. self assert: added == self element. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: self element) . self assert: (self collectionWithElement includes: self element). ! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testShuffled | result | result := self nonEmpty shuffled . "verify content of 'result: '" result do: [:each | self assert: (self nonEmpty occurrencesOf: each)=(result occurrencesOf: each)]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testRemoveElementThatExistsTwice "self debug: #testRemoveElementThatDoesExistsTwice" | size | size := self nonEmpty size. self assert: (self nonEmpty includes: self elementTwiceIn). self nonEmpty remove: self elementTwiceIn. self assert: size - 1 = self nonEmpty size. self assert: (self nonEmpty includes: self elementTwiceIn). self nonEmpty remove: self elementTwiceIn. self assert: size - 2 = self nonEmpty size! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! testReplaceAllWith | result collection oldElement newElement oldOccurrences | collection := self nonEmpty . result := collection copy. oldElement := self elementInForReplacement . newElement := self newElement . oldOccurrences := (result occurrencesOf: oldElement) + (result occurrencesOf: newElement). result replaceAll: oldElement with: newElement . self assert: oldOccurrences = (result occurrencesOf: newElement)! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testTAddIfNotPresentWithNewElement | added oldSize collection elem | collection := self otherCollection . oldSize := collection size. elem := self element . self deny: (collection includes: elem ). added := collection addIfNotPresent: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection size = (oldSize + 1)). ! ! !Trait method! testFromToPut | collection index | index := self indexArray anyOne. collection := self nonEmpty copy. collection from: 1 to: index put: self aValue.. 1 to: index do: [:i | self assert: (collection at: i)= self aValue]. (index +1) to: collection size do: [:i | self assert: (collection at:i)= (self nonEmpty at:i)].! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testAtPutTwoValues "self debug: #testAtPutTwoValues" self nonEmpty at: self anIndex put: self aValue. self nonEmpty at: self anIndex put: self anotherValue. self assert: (self nonEmpty at: self anIndex) = self anotherValue.! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testSequenceAbleIfEmptyifNotEmptyDo "self debug: #testSequenceAbleIfEmptyifNotEmptyDo" self assert: (self nonEmpty ifEmpty: [false] ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn]).! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize collection anElement | collection := self collectionWithElement . oldSize := collection size. anElement := self element . self assert: (collection includes: anElement ). added := collection addIfNotPresent: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: collection size = oldSize! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testSequenceIfEmptyifNotEmptyDo "self debug #testSequenceIfEmptyifNotEmptyDo" self assert: (self nonEmpty ifEmpty: [false] ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn]).! ! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixtureRequirementsOfTAddTest self shouldnt: [ self collectionWithElement ] raise: Exception. self shouldnt: [ self otherCollection ] raise: Exception. self shouldnt: [ self element ] raise: Exception. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixturePutOneOrMoreElementsTest self shouldnt: self aValue raise: Error. self shouldnt: self indexArray raise: Error. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! elementInForReplacement " return an element included in 'nonEmpty' " ^ self nonEmpty anyOne.! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixturePutTest self shouldnt: self aValue raise: Error. self shouldnt: self anotherValue raise: Error. self shouldnt: self anIndex raise: Error. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testSequenceIfNotEmpty self assert: (self nonEmpty ifNotEmpty: [:s | self accessValuePutInOn: s]) = self valuePutIn! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self shouldnt: [self collectionWithNonIdentitySameAtEndAndBegining ] raise: Error. collection := self collectionWithNonIdentitySameAtEndAndBegining . self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testTAddTwice | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement ; add: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement ). self assert: collection size = (oldSize + 2)! ! !Trait method! testTWrite | added collection elem | collection := self otherCollection . elem := self element . added := collection write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ) . self assert: (collection includes: elem ). ! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testAtWrapPut "self debug: #testAtWrapPut" | index | index := self indexArray anyOne. self nonEmpty atWrap: 0 put: self aValue. self assert: (self nonEmpty at:(self nonEmpty size))=self aValue. self nonEmpty atWrap: (self nonEmpty size+1) put: self aValue. self assert: (self nonEmpty at:(1))=self aValue. self nonEmpty atWrap: (index ) put: self aValue. self assert: (self nonEmpty at: index ) = self aValue. self nonEmpty atWrap: (self nonEmpty size+index ) put: self aValue . self assert: (self nonEmpty at:(index ))=self aValue .! ! !Trait method! testSequenceIfNotEmptyifEmpty self assert: (self nonEmpty ifEmpty: [false] ifNotEmpty: [:s | (self accessValuePutInOn: s) = self valuePutIn])! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testTAddAll | added collection toBeAdded | collection := self collectionWithElement . toBeAdded := self otherCollection . added := collection addAll: toBeAdded . self assert: added == toBeAdded . "test for identiy because #addAll: has not reason to copy its parameter." self assert: (collection includesAll: toBeAdded )! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! testTWriteTwice | added oldSize collection elem | collection := self collectionWithElement . elem := self element . oldSize := collection size. added := collection write: elem ; write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ). self assert: collection size = (oldSize + 2)! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testTAddWithOccurences | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement withOccurrences: 5. self assert: added == anElement. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement). self assert: collection size = (oldSize + 5)! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testOFixtureReplacementSequencedTest self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: self elementInForReplacement raise: Error. self assert: (self nonEmpty includes: self elementInForReplacement ) . self shouldnt: self newElement raise: Error. self shouldnt: self firstIndex raise: Error. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self shouldnt: self secondIndex raise: Error. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self shouldnt: self replacementCollection raise: Error. self shouldnt: self replacementCollectionSameSize raise: Error. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! accessValuePutIn "return access the element put in the non-empty collection" ^ self perform: self selectorToAccessValuePutIn! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! test0FixtureEmptySequenceableTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIdentityIndexOfIAbsentDuplicate "self debug: #testIdentityIndexOfIfAbsent" | collection element elementCopy | collection := self collectionWithNonIdentitySameAtEndAndBegining . element := collection last. elementCopy := element copy. self deny: element == elementCopy . self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = collection size. self assert: (collection identityIndexOf: elementCopy ifAbsent: [ 55 ]) = 55! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! testSequenceIfNotEmptyDo self empty ifNotEmptyDo: [:s | self assert: false]. self assert: (self nonEmpty ifNotEmptyDo: [:s | self accessValuePutInOn: s]) = self valuePutIn ! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! accessValuePutInOn: s "return access the element put in the non-empty collection" ^ s perform: self selectorToAccessValuePutIn! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testSequenceIfNotEmptyDoifNotEmpty self assert: (self nonEmpty ifNotEmptyDo: [:s | (self accessValuePutInOn: s) = self valuePutIn] ifEmpty: [false])! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testAtAllIndexesPut self nonEmpty atAllPut: self aValue. self nonEmpty do:[ :each| self assert: each = self aValue]. ! ! !Trait method! valuePutIn "the value that we will put in the non empty collection" ^ #x! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testAtLastPut | result index | index := self indexArray anyOne. result := self nonEmpty atLast: index put: self aValue. self assert: (self nonEmpty at: (self nonEmpty size +1 - index)) = self aValue .! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAtAllPut | | self nonEmpty atAll: self indexArray put: self aValue.. self indexArray do: [:i | self assert: (self nonEmpty at: i)=self aValue ]. ! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! testReplaceFromToWith | result collection replacementCollec firstInd secondInd | collection := self nonEmpty . replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . result := collection copy. result replaceFrom: firstInd to: secondInd with: replacementCollec . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: (collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( firstInd + replacementCollec size - 1 ) do: [ :i | self assert: ( result at: i ) = ( replacementCollec at: ( i - firstInd +1 ) ) ]. " end part :" ( firstInd + replacementCollec size) to: (result size) do: [:i| self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ]. ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testAtAllPutAll | aValueArray | aValueArray := self valueArray . self nonEmpty atAll: self indexArray putAll: aValueArray . 1 to: self indexArray size do: [:i | self assert: (self nonEmpty at:(self indexArray at: i))= (aValueArray at:i) ]! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! valueArray " return a collection (with the same size than 'indexArray' )of values to be put in 'nonEmpty' at indexes in 'indexArray' " | result | result := Array new: self indexArray size. 1 to: result size do: [:i | result at:i put: (self aValue ). ]. ^ result.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !OrderedCollectionTest commentStamp: 'BG 1/10/2004 22:07' prior: 42523591! These test cases demonstrate addition of items into an OrderedCollection as well as item removal. Some of the assertions are quite complicated and use a lot of collection protocol. Such methods do not test one single method, but protocol in general.! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !AlignmentMorph commentStamp: 'kfr 10/27/2003 10:25' prior: 42099618! Used for layout. Since all morphs now support layoutPolicy the main use of this class is no longer needed. Kept around for compability. Supports a few methods not found elsewhere that can be convenient, eg. newRow ! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !IconicListItem commentStamp: '' prior: 42345849! I am a wrapper used to display a morph with ahead an icon. Here is the way to use me IconicListItem new icon: UITheme current smallOkIcon asMorph; morph: 'Accept' asMorph; yourself! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !ProgressBarMorph commentStamp: '' prior: 42566271! Instances of this morph get used by SystemProgressMorph or a JobProgressBar to display a bar (i.e., the rectangular part of a progress bar). Here is an example of how to use it. | p | p := ProgressBarMorph from: 0 to: 200. p extent: 200@20. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 10) wait ]. p delete ] fork | p | p := ProgressBarMorph from: 0 to: 200. p extent: 600@7. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 5) wait ]. p delete ] fork! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !SimpleButtonMorph commentStamp: 'StephaneDucasse 8/8/2010 17:34' prior: 42677480! I am labeled, rectangular morph which allows the user to click me. I can be configured to send my "target" the message "actionSelector" with "arguments" when I am clicked. I may have a label, implemented as a StringMorph. Example: SimpleButtonMorph new target: Beeper; label: 'Beep!!'; actionSelector: #beep; openInWorld Structure: instance var Type Description target Object The Object to notify upon a click actionSelector Symbol The message to send to Target (#messageName) arguments Array Arguments to send with #actionSelection (optional) actWhen Symbol When to take action: may be #buttonUp (default), #buttonDown, #whilePressed, or #startDrag oldColor Color Used to restore color after click Another example: a button which quits the image without saving it. SimpleButtonMorph new target: Smalltalk; label: 'quit'; actionSelector: #snapshot:andQuit:; arguments: (Array with: false with: true); openInWorld ! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !SystemProgressMorph commentStamp: '' prior: 42719454! I display a set of progress indicator in a list. Special care is taken to update the view while the rest of the UI process is blocked. Reset. SystemProgressMorph reset. Examples. self show: 'Doing...' from: 500 to: 600 during: [ :bar | 500 to: 600 do: [ :x | bar current: x. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ]. self show: 'Doing...' from: 0 to: 50 during: [ :bar | 0 to: 50 do: [ :x | bar increment. bar label: x asString. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ].! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !TextMorph commentStamp: 'MarcusDenker 2/14/2010 22:24' prior: 42746375! TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text. Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color. Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter. If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape. The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except... If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property. Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph. Still a TextMorph can be composed of several texts of different fonts | font1 font2 t1 t2 tMorph| tMorph := TextMorph new. font1 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)). font2 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)). t1 := 'this is font1' asText addAttribute: font1. t2 := ' and this is font2' asText addAttribute: font2. tMorph contents: (t1,t2). tMorph openInHand. Yet to do: Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !ThumbnailMorph commentStamp: 'sw 1/6/2005 03:47' prior: 42757496! A Morph that views another morph, its objectToView.! !TEnumeratingTest commentStamp: '' prior: 43177744! Test of basic functions in Collections that are in the protocol enumerating ! !TEnumeratingTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:15'! collectionOfCollectionsOfInts ^self explicitRequirement.! ! !TEnumeratingTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:01'! collectionOfCollectionsOfStrings ^self explicitRequirement.! ! !TEnumeratingTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:05'! collectionWithCharacters ^self explicitRequirement.! ! !TEnumeratingTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/28/2013 14:35'! simpleCollection ^self explicitRequirement.! ! !TEnumeratingTest methodsFor: 'tests - enumerating' stamp: 'SebastianTleye 6/28/2013 14:35'! testFlattened self assert: self simpleCollection flattened equals: #(1 8 3). self assert: self collectionOfCollectionsOfInts flattened equals: #( 1 2 3 4 5 6 ). self assert: self collectionWithCharacters flattened equals: #($a $x $d $c $m). self assert: self collectionOfCollectionsOfStrings flattened equals: #('foo' 'bar' 'zorg').! ! !DynamicMessageImplementor commentStamp: '' prior: 43177888! Called in the debugger to generate methods when you click on the create button! !DynamicMessageImplementor methodsFor: 'testing' stamp: 'ClementBera 6/28/2013 14:29'! messageShouldBeImplemented ^ (self isMessageAGetter | self isMessageASetter) not! ! !DynamicMessageImplementor methodsFor: 'evaluating-private' stamp: 'ClementBera 6/28/2013 14:28'! writeShouldBeImplementedIfNecessary self messageShouldBeImplemented ifTrue: [ self writeShouldBeImplemented ]! ! !DynamicMessageImplementor methodsFor: 'evaluating-private' stamp: 'ClementBera 6/28/2013 14:27' prior: 21075211! writeSourceCode self writeMethodName. self writeShouldBeImplementedIfNecessary. self writeGetterSourceCodeIfNecessary. self writeSetterSourceCodeIfNecessary! ! !ArrayTest commentStamp: '' prior: 43259634! This is the unit test for the class Array. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !ArrayTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:15'! collectionOfCollectionsOfInts ^collectionOfCollectionsOfInts.! ! !ArrayTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:00'! collectionOfCollectionsOfStrings ^ collectionOfCollectionsOfStrings.! ! !ArrayTest methodsFor: 'initialization' stamp: 'SebastianTleye 6/28/2013 14:46' prior: 17619660! setUp literalArray := #(1 true 3 #four). selfEvaluatingArray := { 1. true. (3/4). Color black. (2 to: 4) . 5 }. nonSEArray1 := { 1 . Set with: 1 }. nonSEarray2 := { Smalltalk globals associationAt: #Array }. example1 := #(1 2 3 4 5) copy. indexArray:= {2. 3. 4.}. valueArray:={0. 0. 0.}. oldSubCollection:= {2. 3. 4.}. nonEmptyMoreThan1Element:= example1. subCollectionNotIn:= {1. 8. 3.}. collectionNotIncluded:= {7. 8. 9.}. removedCollection:= { 2. 4. }. example2 := {1. 2. 3/4. 4. 5}. collectionWith4Elements := #(1 -2 3 1). collectionWithoutNil := #( 1 2 3 4). simpleCollection := #( 1 8 3). collectionOfCollectionsOfInts := { 1. { 2. 3 }. { 4. { 5. 6} } }. collectionOfCollectionsOfStrings:= {{{'foo'}. {'bar'}}. 'zorg'}. collectResult := {SmallInteger. SmallInteger. SmallInteger. SmallInteger.}. empty := #(). duplicateElement := 5.2. withEqualElements := {1.5. duplicateElement . 6.1. 2.0. duplicateElement .} . withoutEqualElements := {1.1. 4.4. 6.5. 2.4. 3.1.}. withCharacters := {$a. $x. $d. $c. $m.}. unsortedCollection := {1. 2. 8. 5. 6. 7.}. sortedInAscendingOrderCollection := {1. 2. 3. 4. 5. 6.}. elementInForCopy:= 2. elementNotInForCopy:= 9. firstIndex:= 2. secondIndex:= 4. replacementCollection:= {4. 3. 2. 1.}. replacementCollectionSameSize := {5. 4. 3.}. nonEmpty1Element:={ 5.}. collectionOfCollection:={1.5. 5.5. 6.5.}. collectionOfFloatWithEqualElements:={1.5. 5.5. 6.5. 1.5}. floatCollectionWithSameBeginingAnEnd := {1.5. 5.5. 1.5 copy}. collection5Elements := { 1. 2. 5. 3. 4.}.! ! !ArrayTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/28/2013 14:36'! simpleCollection ^simpleCollection.! ! !OrderedCollectionTest commentStamp: 'BG 1/10/2004 22:07' prior: 43344277! These test cases demonstrate addition of items into an OrderedCollection as well as item removal. Some of the assertions are quite complicated and use a lot of collection protocol. Such methods do not test one single method, but protocol in general.! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 11:23'! collectionOfCollectionsOfInts ^collectionOfCollectionsOfInts.! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 12:43'! collectionOfCollectionsOfStrings ^collectionOfCollectionsOfStrings.! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/26/2013 12:45'! collectionWithCharacters ^withCharacters.! ! !OrderedCollectionTest methodsFor: 'setup' stamp: 'SebastianTleye 6/28/2013 14:38' prior: 28746807! setUp nonEmpty := OrderedCollection new add: self valuePutIn; add: self elementTwiceIn; add: self elementTwiceIn; yourself. empty := OrderedCollection new. elementNotIn := 99. collectionWith4Elements := OrderedCollection new add: 1; add: -2; add: 3; add: 1; yourself. indexArray := { 3. 1.}. indexCollection := OrderedCollection new add: 1; add: 2;add: 3; add: 4; add:5; yourself. otherCollection := OrderedCollection new add: 1;add: 20; add: 30; yourself. withoutEqualElements := OrderedCollection new add: 1;add: 20; add: 30; yourself. collectResult := OrderedCollection new add: SmallInteger; add: SmallInteger; add: SmallInteger; yourself. collectionOfCollectionsOfStrings:= OrderedCollection new add: (OrderedCollection new add: (OrderedCollection new add: 'foo'; yourself); add: (OrderedCollection new add: 'bar'; yourself); yourself); add: 'zorg'; yourself. simpleCollection := OrderedCollection new add: 1; add: 8; add: 3; yourself. collectionOfCollectionsOfInts := OrderedCollection new add: 1; add: (OrderedCollection new add: 2; add: 3; yourself); add: (OrderedCollection new add: 4; add: (OrderedCollection new add: 5; add: 6; yourself); yourself); yourself. withCharacters := OrderedCollection new add: $a; add: $x; add: $d; add: $c; add: $m; yourself. emptyButAllocatedWith20 := OrderedCollection new: 20. collectionWithElement := OrderedCollection new add: self element; yourself. collectionOfFloat := OrderedCollection new add: 4.1; add: 7.2; add: 2.5; yourself. floatCollectionWithSameBeginingEnd := OrderedCollection new add: 4.1; add: 7.2; add: 4.1 copy ; yourself. duplicateElement := 2. collectionWithDuplicateElement := OrderedCollection new add: duplicateElement ; add: duplicateElement ; add:4 ; yourself. collection5Elements := OrderedCollection new add: 1; add: 2; add: 3; add: 4; add: 5; yourself.! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'SebastianTleye 6/28/2013 14:37'! simpleCollection ^simpleCollection.! ! !AlignmentMorph commentStamp: 'kfr 10/27/2003 10:25' prior: 43345663! Used for layout. Since all morphs now support layoutPolicy the main use of this class is no longer needed. Kept around for compability. Supports a few methods not found elsewhere that can be convenient, eg. newRow ! !IconicListItem commentStamp: '' prior: 43347006! I am a wrapper used to display a morph with ahead an icon. Here is the way to use me IconicListItem new icon: UITheme current smallOkIcon asMorph; morph: 'Accept' asMorph; yourself! !ProgressBarMorph commentStamp: '' prior: 43348321! Instances of this morph get used by SystemProgressMorph or a JobProgressBar to display a bar (i.e., the rectangular part of a progress bar). Here is an example of how to use it. | p | p := ProgressBarMorph from: 0 to: 200. p extent: 200@20. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 10) wait ]. p delete ] fork | p | p := ProgressBarMorph from: 0 to: 200. p extent: 600@7. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 5) wait ]. p delete ] fork! !SimpleButtonMorph commentStamp: 'StephaneDucasse 8/8/2010 17:34' prior: 43349992! I am labeled, rectangular morph which allows the user to click me. I can be configured to send my "target" the message "actionSelector" with "arguments" when I am clicked. I may have a label, implemented as a StringMorph. Example: SimpleButtonMorph new target: Beeper; label: 'Beep!!'; actionSelector: #beep; openInWorld Structure: instance var Type Description target Object The Object to notify upon a click actionSelector Symbol The message to send to Target (#messageName) arguments Array Arguments to send with #actionSelection (optional) actWhen Symbol When to take action: may be #buttonUp (default), #buttonDown, #whilePressed, or #startDrag oldColor Color Used to restore color after click Another example: a button which quits the image without saving it. SimpleButtonMorph new target: Smalltalk; label: 'quit'; actionSelector: #snapshot:andQuit:; arguments: (Array with: false with: true); openInWorld ! !SystemProgressMorph commentStamp: '' prior: 43352102! I display a set of progress indicator in a list. Special care is taken to update the view while the rest of the UI process is blocked. Reset. SystemProgressMorph reset. Examples. self show: 'Doing...' from: 500 to: 600 during: [ :bar | 500 to: 600 do: [ :x | bar current: x. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ]. self show: 'Doing...' from: 0 to: 50 during: [ :bar | 0 to: 50 do: [ :x | bar increment. bar label: x asString. (Delay forMilliseconds: 20) wait "Just to slow it down so we can see what's going on" ] ].! !TextMorph commentStamp: 'MarcusDenker 2/14/2010 22:24' prior: 43353829! TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text. Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color. Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter. If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape. The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except... If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property. Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph. Still a TextMorph can be composed of several texts of different fonts | font1 font2 t1 t2 tMorph| tMorph := TextMorph new. font1 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)). font2 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)). t1 := 'this is font1' asText addAttribute: font1. t2 := ' and this is font2' asText addAttribute: font2. tMorph contents: (t1,t2). tMorph openInHand. Yet to do: Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.! !ThumbnailMorph commentStamp: 'sw 1/6/2005 03:47' prior: 43357859! A Morph that views another morph, its objectToView.! !Collection methodsFor: 'enumerating' stamp: 'ST 6/19/2013 18:29'! flattenOn: aStream self do: [ :each | (each isCollection and: [each isString not]) ifTrue: [each flattenOn: aStream] ifFalse: [aStream nextPut: each]].! ! !Collection methodsFor: 'enumerating' stamp: 'SebastianTleye 6/25/2013 18:41'! flattened "Flattens a collection of collections (no matter how many levels of collections exist). Strings are considered atoms and, as such, won't be flattened Examples: #(1 #(2 3) #(4 (#5))) flattened returns #(1 2 3 4 5) #('string1' #('string2' 'string3')) flattened returns #('string1' 'string2' 'string3')" ^ Array streamContents: [ :stream | self flattenOn: stream].! ! RectangleMorph removeSelector: #wantsToBeCachedByHand! RectangleMorph removeSelector: #defaultColor! Smalltalk globals removeClassNamed: #RectangleMorph! !Trait method! collectionOfCollectionsOfInts ^self explicitRequirement.! ! !Trait method! collectionOfCollectionsOfInts ^self explicitRequirement.! ! !Trait method! collectionOfCollectionsOfStrings ^self explicitRequirement.! ! !Trait method! collectionOfCollectionsOfStrings ^self explicitRequirement.! ! !Trait method! collectionWithCharacters ^self explicitRequirement.! ! !Trait method! simpleCollection ^self explicitRequirement.! ! !Trait method! simpleCollection ^self explicitRequirement.! ! !Trait method! testFlattened self assert: self simpleCollection flattened equals: #(1 8 3). self assert: self collectionOfCollectionsOfInts flattened equals: #( 1 2 3 4 5 6 ). self assert: self collectionWithCharacters flattened equals: #($a $x $d $c $m). self assert: self collectionOfCollectionsOfStrings flattened equals: #('foo' 'bar' 'zorg').! ! !Trait method! testFlattened self assert: self simpleCollection flattened equals: #(1 8 3). self assert: self collectionOfCollectionsOfInts flattened equals: #( 1 2 3 4 5 6 ). self assert: self collectionWithCharacters flattened equals: #($a $x $d $c $m). self assert: self collectionOfCollectionsOfStrings flattened equals: #('foo' 'bar' 'zorg').! ! "Collections-Abstract"! "CollectionsTests"! "Morphic-Base"! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(2 July 2013 1:02:45 pm) Pharo.image priorSource: 9612160! ----STARTUP----an Array(2 July 2013 1:11:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 1:11:25 pm) Pharo-30238.image priorSource: 9818968! ----STARTUP----an Array(2 July 2013 1:30:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/2/2013 13:25' prior: 43166889! commentForCurrentUpdate ^ '10829 ConfigurationOfSmartSuggestions should not be in the image https://pharo.fogbugz.com/f/cases/10829 11093 remove empty package HistoryCollection https://pharo.fogbugz.com/f/cases/11093 11098 notifyRepackage:method:oldProtocol:newProtocol: is uncategorized https://pharo.fogbugz.com/f/cases/11098 11104 Remove useless menu entry https://pharo.fogbugz.com/f/cases/11104'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/2/2013 13:25'! script338 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz AndreasProfiler-MarcusDenker.8.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HistoryCollection-MarcusDenker.16.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1508.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.44.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.524.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/2/2013 13:26'! update30239 "self new update30239" self withUpdateLog: '10829 ConfigurationOfSmartSuggestions should not be in the image https://pharo.fogbugz.com/f/cases/10829 11093 remove empty package HistoryCollection https://pharo.fogbugz.com/f/cases/11093 11098 notifyRepackage:method:oldProtocol:newProtocol: is uncategorized https://pharo.fogbugz.com/f/cases/11098 11104 Remove useless menu entry https://pharo.fogbugz.com/f/cases/11104'. self loadTogether: self script338 merge: false. ScriptLoader new unloadPackageNamed: 'ConfigurationOfNodeNavigation'; unloadPackageNamed: 'ConfigurationOfSmartSuggestions'; unloadPackageNamed: 'HistoryCollection'; unloadPackageNamed: 'AndreasProfiler'. (ClassDescription >> #notifyRepackage:method:oldProtocol:newProtocol:) protocol: 'private' . self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 7/2/2013 13:00' prior: 17377207! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. (aBuilder item: #'Inst var references...') action: [target browseInstVarRefs]; parent: #Analyze; order: 0. (aBuilder item: #'Inst var assignments...') action: [target browseInstVarDefs]; parent: #Analyze; order: 100. (aBuilder item: #'Create inst var accessors') action: [target createInstVarAccessors]; parent: #Analyze; enabledBlock: [ target selectedClass instVarNames isEmpty not ]; order: 200; withSeparatorAfter. (aBuilder item: #'Create initializer with inst vars...') action: [ target createInitializerWithInstVars ]; parent: #Analyze; order: 300; enabledBlock: [ target showInstance ]. (aBuilder item: #'Generate initialize method') keyText: 'h, i' if: Nautilus useOldStyleKeys not; keyText: 'I' if: Nautilus useOldStyleKeys; action: [ target generateInitialize ]; parent: #Analyze; order: 350. (aBuilder item: #'Force the generaton of the initialize method') keyText: 'h, k' if: Nautilus useOldStyleKeys not; keyText: 'K' if: Nautilus useOldStyleKeys; action: [ target forceGenerateInitialize ]; parent: #Analyze; order: 375; enabledBlock: [ target showInstance ]; withSeparatorAfter. (aBuilder item: #'Class var refs...') action: [target browseClassVarRefs]; parent: #Analyze; order: 400. (aBuilder item: #'Class refs...') keyText: 'b, N' if: Nautilus useOldStyleKeys not; keyText: 'N' if: Nautilus useOldStyleKeys; action: [target browseClassRefs]; parent: #Analyze; order: 500. (target selectedClass inheritsFrom: SharedPool ) ifTrue: [ (aBuilder item: #'Shared Pool Users') action: [ target systemNavigation browseSharedPoolUsersOf: target selectedClass ]; parent: #Analyze; enabledBlock: [ target enableSingleClassSelection ]; order: 700]. (aBuilder item: #'Unsent methods...') action: [target browseUnusedMethods.]; parent: #Analyze; order: 800. (aBuilder item: #'Unreferenced inst vars...') action: [target showUnreferencedInstVars.]; parent: #Analyze; order: 900. (aBuilder item: #'Unreferenced class vars...') action: [target showUnreferencedClassVars.]; parent: #Analyze; order: 1000.! ! "Nautilus"! ConfigurationOfNodeNavigation removeSelector: #version11:! ConfigurationOfNodeNavigation removeSelector: #version10:! ConfigurationOfNodeNavigation removeSelector: #project! ConfigurationOfNodeNavigation removeSelector: #development:! ConfigurationOfNodeNavigation removeSelector: #customProjectAttributes! ConfigurationOfNodeNavigation removeSelector: #baseline12:! ConfigurationOfNodeNavigation removeSelector: #baseline11:! ConfigurationOfNodeNavigation removeSelector: #baseline01:! ConfigurationOfNodeNavigation class removeSelector: #validate! ConfigurationOfNodeNavigation class removeSelector: #project! ConfigurationOfNodeNavigation class removeSelector: #loadDevelopment! ConfigurationOfNodeNavigation class removeSelector: #loadBleedingEdge! ConfigurationOfNodeNavigation class removeSelector: #load! ConfigurationOfNodeNavigation class removeSelector: #isMetacelloConfig! ConfigurationOfNodeNavigation class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfNodeNavigation class removeSelector: #ensureMetacello! ConfigurationOfNodeNavigation class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfNodeNavigation class removeSelector: #DevelopmentSupport! Smalltalk globals removeClassNamed: #ConfigurationOfNodeNavigation! ConfigurationOfSmartSuggestions removeSelector: #version11:! ConfigurationOfSmartSuggestions removeSelector: #version10:! ConfigurationOfSmartSuggestions removeSelector: #project! ConfigurationOfSmartSuggestions removeSelector: #development:! ConfigurationOfSmartSuggestions removeSelector: #customProjectAttributes! ConfigurationOfSmartSuggestions removeSelector: #baseline12:! ConfigurationOfSmartSuggestions removeSelector: #baseline11:! ConfigurationOfSmartSuggestions class removeSelector: #validate! ConfigurationOfSmartSuggestions class removeSelector: #project! ConfigurationOfSmartSuggestions class removeSelector: #loadDevelopment! ConfigurationOfSmartSuggestions class removeSelector: #loadBleedingEdge! ConfigurationOfSmartSuggestions class removeSelector: #load! ConfigurationOfSmartSuggestions class removeSelector: #isMetacelloConfig! ConfigurationOfSmartSuggestions class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfSmartSuggestions class removeSelector: #ensureMetacello! ConfigurationOfSmartSuggestions class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfSmartSuggestions class removeSelector: #DevelopmentSupport! Smalltalk globals removeClassNamed: #ConfigurationOfSmartSuggestions! ----End fileIn----! ----QUIT----an Array(2 July 2013 1:30:16 pm) Pharo.image priorSource: 9819164! ----STARTUP----an Array(2 July 2013 1:38:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 1:38:33 pm) Pharo-30239.image priorSource: 9835754! ----STARTUP----an Array(2 July 2013 3:06:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/2/2013 14:57' prior: 43373892! commentForCurrentUpdate ^ '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 1) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/2/2013 14:58'! script339 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1510.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.526.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/2/2013 14:58'! update30240 "self new update30240" RPackageOrganizer allInstances do: [ :each| SystemAnnouncer uniqueInstance unsubscribe: each ]. . self withUpdateLog: '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 1) '. self loadTogether: self script339 merge: false. RPackageOrganizer registerDefault. RPackageOrganizer initialize. self flushCaches. ! ! "ScriptLoader30"! !Trait method! superclass: sup methodDict: md format: ft name: nm organization: org instVarNames: nilOrArray classPool: pool sharedPools: poolSet "Answer an instance of me, a new class, using the arguments of the message as the needed information. Must only be sent to a new instance; else we would need Object flushCache." self superclass: sup. self methodDict: md. self setFormat: ft. self setName: nm. self instanceVariables: nilOrArray. self classPool: pool. self sharedPools: poolSet. self organization: org.! ! !Trait method! usesLocalPoolVarNamed: aString "Return whether the receiver uses a pool variable named: aString which is defined locally" self hasSharedPools ifTrue: [ self sharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [ ^true ]]] ifFalse: [ ^false ]. ^false! ! !Trait method! hasSharedPools "Returns whether the receiver uses shared pools directly (Does not take into account that it may inherit shared pool uses." ^ self sharedPools notEmpty! ! !Trait method! variableSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !Trait method! declare: varString "Declare class variables common to all instances. Answer whether recompilation is advisable." | newVars conflicts | newVars := (varString subStrings: ' ') collect: [:x | x asSymbol]. conflicts := false. (self classPool keys reject: [:x | newVars includes: x]) do: [:var | self removeClassVarNamed: var]. (newVars reject: [:var | self classPool includesKey: var]) do: [:var | "adding" "check if new vars defined elsewhere" (self innerBindingOf: var) ifNotNil: [(DuplicatedVariableError new) variable: var; signal: var , ' is defined elsewhere'. conflicts := true]]. newVars notEmpty ifTrue: [self classPool: self classPool. "in case it was nil" newVars do: [:var | self classPool declare: var from: Undeclared]]. ^conflicts! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^self classBuilder superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !Trait method! removeFromChanges "References to the receiver, a class, and its metaclass should no longer be included in the system ChangeSet." ChangeSet current removeClassAndMetaClassChanges: self! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! removeSubclass: aSubclass "If the argument, aSubclass, is one of the receiver's subclasses, remove it." self subclasses == nil ifFalse: [self subclasses: (self subclasses copyWithout: aSubclass). self subclasses isEmpty ifTrue: [self subclasses: nil]].! ! !Trait method! fileOut "Create a file whose name is the name of the receiver with '.st' as the extension, and file a description of the receiver onto it." | internalStream | internalStream := (String new: 100) writeStream. internalStream header; timeStamp. self hasSharedPools ifTrue: [ self shouldFileOutPools ifTrue: [self fileOutSharedPoolsOn: internalStream]]. self fileOutOn: internalStream moveSource: false toFile: 0. internalStream trailer. FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true! ! !Trait method! usesPoolVarNamed: aString "Return whether the receiver has a pool variable named: aString, taking into account superclasses too" self allSharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [^true]]. ^false! ! !Trait method! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! !Trait method! subclass: t uses: aTraitComposition | cls | cls := self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified'. cls setTraitComposition: aTraitComposition asTraitComposition. ^ cls! ! !Trait method! hasMethods "Answer a Boolean according to whether any methods are defined for the receiver (includes whether there are methods defined in the receiver's metaclass)." ^super hasMethods or: [self class hasMethods]! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^self classBuilder superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self subclasses: nil. ! ! !Trait method! addSharedPool: aSharedPool "Add the argument, aSharedPool, as one of the receiver's shared pools. Create an error if the shared pool is already one of the pools. This method will work with shared pools that are plain Dictionaries or thenewer SharedPool subclasses" (self sharedPools includes: aSharedPool) ifTrue: [^self error: 'This is already in my shared pool list']. self sharedPools == nil ifTrue: [self sharedPools: (OrderedCollection with: aSharedPool)] ifFalse: [self sharedPools add: aSharedPool]! ! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses size == 0 ifFalse:[self subclasses do: aBlock]! ! !Trait method! fileOutInitializerOn: aStream ^self class fileOutInitializerOn: aStream! ! !Trait method! newSubclass | i className | i := 1. [className := (self name , i printString) asSymbol. self environment includesKey: className] whileTrue: [i := i + 1]. ^ self subclass: className instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' "Point newSubclass new"! ! !Trait method! isAnonymous ^self name isNil! ! !Trait method! unload "Sent when a the class is removed. Does nothing, but may be overridden by (class-side) subclasses."! ! !Trait method! subclass: t ^ self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! !Trait method! hasClassVarNamed: aString "Return whether the receiver has a class variables (shared variables among its class and subclasses) named: aString" ^ self classVarNames includes: aString! ! !Trait method! addClassVarNamed: aString "Add the argument, aString, as a class variable of the receiver. Signal an error if the first character of aString is not capitalized, or if it is already a variable named in the class." | symbol oldState | oldState := self copy. aString first canBeGlobalVarInitial ifFalse: [^self error: aString, ' class variable name should be capitalized; proceed to include anyway.']. symbol := aString asSymbol. self withAllSubclasses do: [:subclass | (subclass bindingOf: symbol) ifNotNil:[ ^ self error: aString , ' is already used as a variable name in class ' , subclass name]]. (self classPool includesKey: symbol) ifFalse: ["Pick up any refs in Undeclared" self classPool declare: symbol from: Undeclared. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: oldState to: self]! ! !Trait method! weakSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !Trait method! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^self classBuilder superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !Trait method! addSubclass: aSubclass "Make the argument, aSubclass, be one of the subclasses of the receiver. Create an error notification if the argument's superclass is not the receiver." aSubclass superclass ~~ self ifTrue: [^self error: aSubclass name , ' is not my subclass']. self subclasses == nil ifTrue: [self subclasses: (Array with: aSubclass). ^self]. self subclasses do:[:cl| cl == aSubclass ifTrue:[^self]]. "Already my subclass" self subclasses: (self subclasses copyWith: aSubclass).! ! !Trait method! classPoolFrom: aClass "share the classPool with aClass." self classPool: aClass classPool.! ! !Trait method! fileOutPool: aPool onFileStream: aFileStream | aPoolName | (aPool isKindOf: SharedPool class) ifTrue:[^self notify: 'we do not fileout SharedPool type shared pools for now']. aPoolName := self environment keyAtIdentityValue: aPool. self crTrace: aPoolName. aFileStream nextPutAll: 'Transcript show: ''' , aPoolName , '''; cr!!'; cr. aFileStream nextPutAll: 'Smalltalk at: #' , aPoolName , ' put: Dictionary new!!'; cr. aPool keys asSortedCollection do: [ :aKey | | aValue | aValue := aPool at: aKey. aFileStream nextPutAll: aPoolName , ' at: #''' , aKey asString , '''', ' put: '. (aValue isKindOf: Number) ifTrue: [aValue printOn: aFileStream] ifFalse: [aFileStream nextPutAll: '('. aValue printOn: aFileStream. aFileStream nextPutAll: ')']. aFileStream nextPutAll: '!!'; cr]. aFileStream cr! ! !Trait method! classVarNamed: aString "Answer the content of the Class Variable" ^self classPool at: aString asSymbol ifAbsent: [self error: 'no such lass var']! ! !Trait method! fileOutSharedPoolsOn: aFileStream "file out the shared pools of this class after prompting the user about each pool" | poolsToFileOut | poolsToFileOut := self sharedPools select: [:aPool | (self shouldFileOutPool: (self environment keyAtIdentityValue: aPool))]. poolsToFileOut do: [:aPool | self fileOutPool: aPool onFileStream: aFileStream]. ! ! !Trait method! classVarNames "Answer a collection of the names of the class variables defined in the receiver." ^self classPool keys asArray sort! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !Trait method! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [^self error: aString, ' is not a class variable']. self withAllSubclasses do:[:subclass | (Array with: subclass with: subclass class) do:[:classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name, ' (' , aString , ' is Undeclared) '. ^Undeclared declare: aSymbol from: self classPool]. (self confirm: (aString,' is still used in code of class ', classOrMeta name, '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [^Undeclared declare: aSymbol from: self classPool] ifFalse: [^self]]]]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [self classPool: nil]. ! ! !Trait method! externalName "Answer a name by which the receiver can be known." ^ self name! ! !Trait method! subclass: t instanceVariableNames: ins ^ self subclass: t instanceVariableNames: ins classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! !Trait method! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! !Trait method! withClassVersion: aVersion aVersion = self classVersion ifTrue:[^self]. ^self error: 'Invalid class version'! ! !Trait method! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" | binding | "First look in classVar dictionary." binding := self classPool bindingOf: aSymbol. binding ifNotNil: [^binding]. "Next look in shared pools." self sharedPools do: [:pool | | aBinding | aBinding := pool bindingOf: aSymbol. aBinding ifNotNil: [^aBinding ]. ]. self superclass ifNotNil: [ ^ self superclass innerBindingOf: aSymbol. ]. ^ nil! ! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver, or nil if variable with such name is not defined" "The lookup recurses up to superclasses looking inside their class and shared pools, but not the environment, since two classes, even if they have ancestry relationship, could use different environments. That's why we doing an environment lookup only as a last step of symbol lookup and taking only the environment of receiver only, not any of it's superclass(es) " | aSymbol | aSymbol := varName asSymbol. ^ (self innerBindingOf: aSymbol) ifNil: [ self environment bindingOf: aSymbol ]! ! !Trait method! shouldFileOutPools "respond with true if the user wants to file out the shared pools" ^self confirm: 'FileOut selected sharedPools?'! ! !Trait method! compileAll super compileAll. self class compileAll.! ! !Trait method! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^self classBuilder superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! !Trait method! classBuilder "Answer the object responsible of creating subclasses of myself in the system." ^ Smalltalk classBuilder! ! !Trait method! variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !Trait method! compileAllFrom: oldClass "Recompile all the methods in the receiver's method dictionary (not the subclasses). Also recompile the methods in the metaclass." super compileAllFrom: oldClass. self class compileAllFrom: oldClass class! ! !Trait method! reformatAll "Reformat all methods in this class. Leaves old code accessible to version browsing" super reformatAll. "me..." self class reformatAll "...and my metaclass"! ! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! !Trait method! shouldFileOutPool: aPoolName "respond with true if the user wants to file out aPoolName" ^self confirm: ('FileOut the sharedPool ', aPoolName, '?')! ! !Trait method! allSharedPools "Answer an ordered collection of the pools the receiver shares, including those defined in the superclasses of the receiver." | aSet | ^self superclass == nil ifTrue: [self sharedPools copy] ifFalse: [aSet := self superclass allSharedPools. aSet addAll: self sharedPools. aSet]! ! !Trait method! sharing: poolString "Set up sharedPools. Answer whether recompilation is advisable." | oldPools | oldPools := self sharedPools. self sharedPools: OrderedCollection new. (poolString subStrings: ' ') do: [:poolName | self sharedPools add: (self environment at: poolName asSymbol ifAbsent:[ (self confirm: 'The pool dictionary ', poolName,' does not exist.', '\Do you want it automatically created?' withCRs) ifTrue:[self environment at: poolName asSymbol put: Dictionary new] ifFalse:[^self error: poolName,' does not exist']])]. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. oldPools do: [:pool | | found | found := self sharedPools anySatisfy: [:p | p == pool]. found ifFalse: [^ true "A pool got deleted"]]. ^ false! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !Trait method! removeFromSystemUnlogged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver. Do not log the removal either to the current change set nor to the system changes log" ^self removeFromSystem: false! ! !Trait method! sharedPoolOfVarNamed: aString "Returns the SharedPool or nil from which the pool variable named aString is coming from." ^ self sharedPools detect: [:each | each usesClassVarNamed: aString ] ifNone: [ self superclass == nil ifTrue: [nil] ifFalse: [self superclass sharedPoolOfVarNamed: aString] ]! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! ensureClassPool ^self classPool.! ! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! !Trait method! removeSharedPool: aDictionary "Remove the pool dictionary, aDictionary, as one of the receiver's pool dictionaries. Create an error notification if the dictionary is not one of the pools. : Note that it removes the wrong one if there are two empty Dictionaries in the list." | satisfiedSet workingSet aSubclass | (self sharedPools includes: aDictionary) ifFalse: [^self error: 'the dictionary is not in my pool']. "first see if it is declared in a superclass in which case we can remove it." (self selectSuperclasses: [:class | class sharedPools includes: aDictionary]) isEmpty ifFalse: [self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. ^self]. "second get all the subclasses that reference aDictionary through me rather than a superclass that is one of my subclasses." workingSet := self subclasses asOrderedCollection. satisfiedSet := Set new. [workingSet isEmpty] whileFalse: [aSubclass := workingSet removeFirst. (aSubclass sharedPools includes: aDictionary) ifFalse: [satisfiedSet add: aSubclass. workingSet addAll: aSubclass subclasses]]. "for each of these, see if they refer to any of the variables in aDictionary because if they do, we can not remove the dictionary." satisfiedSet add: self. satisfiedSet do: [:sub | aDictionary associationsDo: [:aGlobal | (sub whichSelectorsReferTo: aGlobal) isEmpty ifFalse: [^self error: aGlobal key , ' is still used in code of class ' , sub name]]]. self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]! ! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's class variables, including those defined in the superclasses of the receiver." | aSet | self superclass == nil ifTrue: [^self classVarNames asSet] "This is the keys so it is a new Set." ifFalse: [aSet := self superclass allClassVarNames. aSet addAll: self classVarNames. ^aSet]! ! !Trait method! subclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !Trait method! classVarNamed: aString put: anObject "Store anObject in the class variable." | symbol | symbol := aString asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! !Trait method! usesClassVarNamed: aString "Return whether the receiver or its superclasses have a class variable named: aString" ^ self allClassVarNames includes: aString! ! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ super hasAbstractMethods or: [self class hasAbstractMethods] ! ! !Trait method! variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! superclassOrder: classes "Arrange the classes in the collection, classes, in superclass order so the classes can be properly filed in. Do it in sets instead of ordered collections." | all unprocessedClasses cache | unprocessedClasses := classes asSet. cache := Dictionary new. all := OrderedCollection new: unprocessedClasses size. unprocessedClasses size timesRepeat: [ |nextClass| nextClass := unprocessedClasses detect: [:aClass | self hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache]. all add: nextClass. unprocessedClasses remove: nextClass]. ^all! ! !Trait method! template: aSystemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class." ^ self templateForSubclassOf: Object name category: aSystemCategoryName ! ! !Trait method! templateForSubclassOf: priorClassName category: systemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class, given that the class previously looked at was as given" ^priorClassName asString, ' subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategoryName asString , ''''! ! !Trait method! allSuperclassesFor: aClass cache: cache ^ cache at: aClass ifAbsentPut: [aClass allSuperclasses asArray]! ! !Trait method! hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache ^ (self hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache) and: [ aClass isMeta not or: [ self hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache]] ! ! !Trait method! hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache ^ (unprocessedClasses includesAnyOf: (self allSuperclassesFor: aClass cache: cache)) not ! ! !Trait method! fileOutPool: aString "file out the global pool named aString" | internalStream | internalStream := (String new: 1000) writeStream. self new fileOutPool: (self environment at: aString asSymbol) onFileStream: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: aString isSt: true.! ! !Trait method! rootsOfTheWorld "return all classes that have a nil superclass" ^(Smalltalk globals select: [:each | each isBehavior and: [each superclass isNil]]) asOrderedCollection! ! !Trait method! doesNotIncludeInstanceOrSuperclassesFor: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! !Trait method! hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! !Trait commentStamp: '' prior: 42762828! Each trait in the system is represented as an instance of me. Like Class, I concretize my superclass by providing instance variables for the name and the environment. Since traits do not define variables, I not provide facilities for pool variables. However, I declare an instance variable to hold the associated classtrait, which is an instance of the class ClassTrait. ! !RGTraitDefinitionTest methodsFor: 'testing' stamp: 'ST 6/20/2013 16:55' prior: 31762189! testAsTraitDefinition2 | newTrait newClass newSlice | newClass := Trait asRingDefinitionWithMethods: false withSuperclasses: false withSubclasses: true withPackages: false. newSlice := newClass environment. self assert: (newClass allSubclasses size = Smalltalk globals environment allTraits size). self assert: newClass traitNames size = 1. self assert: newClass traits first = (newSlice traitNamed: #TClass). newTrait := TBehaviorCategorization asRingDefinitionWithMethods: true withSuperclasses: true withSubclasses: false withPackages: true. newSlice := newTrait environment. self assert: newTrait superclass = (newSlice classNamed: #Trait). self assert: newTrait methods size < newSlice methods size. self assert: newTrait category = #'Traits-Kernel-Traits'. self assert: newTrait package = (newSlice packageNamed: #Traits). self assert: newTrait subclasses isEmpty.! ! !TClass methodsFor: 'copying' stamp: 'SebastianTleye 6/24/2013 11:07' prior: 40980721! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! !Trait commentStamp: '' prior: 43430589! Each trait in the system is represented as an instance of me. Like Class, I concretize my superclass by providing instance variables for the name and the environment. Since traits do not define variables, I not provide facilities for pool variables. However, I declare an instance variable to hold the associated classtrait, which is an instance of the class ClassTrait. ! !Trait class methodsFor: 'cleanup' stamp: 'EstebanLorenzano 7/2/2013 14:57' prior: 43427547! cleanUp ! ! !Trait methodsFor: 'traits' stamp: '' prior: 53287298! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self classSide noteNewBaseTraitCompositionApplied: self traitComposition. ^ changedSelectors! ! !Trait methodsFor: 'compiling' stamp: '' prior: 53281767! binding "Answer a binding for the receiver, sharing if possible" | binding | binding := self environment associationAt: self name ifAbsent: [nil -> self]. ^binding value == self ifTrue: [binding] ifFalse: [nil -> self]! ! !Trait methodsFor: 'fileIn/Out' stamp: '' prior: 53283861! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." ^self fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: true! ! !Trait methodsFor: 'testing' stamp: '' prior: 53286939! isObsolete "Return true if the receiver is obsolete." ^(self environment at: self name ifAbsent: [nil]) ~~ self! ! !Trait methodsFor: 'self evaluating' stamp: '' prior: 53287112! isSelfEvaluating ^self isObsolete not! ! !Trait methodsFor: 'private' stamp: '' prior: 53287657! isValidTraitName: aSymbol ^(aSymbol isEmptyOrNil or: [aSymbol first isLetter not or: [aSymbol anySatisfy: [:character | character isAlphaNumeric not]]]) not! ! !Trait methodsFor: 'initialize-release' stamp: '' prior: 53285000! name: aString traitComposition: aComposition methodDict: aMethodDict localSelectors: aSet organization: aClassOrganization "Used by copy" self name: aString. self localSelectors: aSet. self methodDict: aMethodDict. self traitComposition: aComposition. self organization: aClassOrganization! ! !Trait methodsFor: 'compiling' stamp: '' prior: 53281905! possibleVariablesFor: misspelled continuedFrom: oldResults | results | results := misspelled correctAgainstDictionary: self classPool continuedFrom: oldResults. self sharedPools do: [:pool | results := misspelled correctAgainstDictionary: pool continuedFrom: results ]. self superclass == nil ifTrue: [ ^ misspelled correctAgainstDictionary: self environment continuedFrom: results ] ifFalse: [ ^ self superclass possibleVariablesFor: misspelled continuedFrom: results ]! ! !Trait methodsFor: 'initialize-release' stamp: '' prior: 53285565! removeFromSystem "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." self removeFromSystem: true.! ! !Trait methodsFor: 'initialize-release' stamp: '' prior: 53285691! removeFromSystem: logged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." "keep the class name and category for triggering the system change message. If we wait to long, then we get obsolete information which is not what we want." "tell class to deactivate and unload itself-- two separate events in the module system" self unload. self users do: [ :user | user removeFromComposition: self ]. self superclass ifNotNil: ["If we have no superclass there's nothing to be remembered" self superclass addObsoleteSubclass: self]. self environment forgetClass: self logged: logged. self obsolete.! ! !Trait methodsFor: 'class name' stamp: '' prior: 53287881! rename: aString "The new name of the receiver is the argument, aString." | oldName newName | (newName := aString asSymbol) = (oldName := self name) ifTrue: [^ self]. (self environment includesKey: newName) ifTrue: [^ self error: newName , ' already exists']. self setName: newName. self environment renameClass: self from: oldName. (Undeclared includesKey: newName) ifTrue: [self inform: 'There are references to, ' , aString printString , ' from Undeclared. Check them after this change.'].! ! !Trait methodsFor: 'private' stamp: '' prior: 53288422! setName: aSymbol andRegisterInCategory: categorySymbol environment: aSystemDictionary (self isValidTraitName: aSymbol) ifFalse: [TraitException signal: 'Invalid trait name']. (self environment == aSystemDictionary and: [self name = aSymbol and: [self category = categorySymbol]]) ifTrue: [^self]. ((aSystemDictionary includes: aSymbol) and: [(aSystemDictionary at: aSymbol) ~~ self]) ifTrue: [TraitException signal: 'The name ''' , aSymbol , ''' is already used']. (self environment notNil and: [self name notNil and: [self name ~= aSymbol]]) ifTrue: [ self environment renameClass: self as: aSymbol]. self name: aSymbol. self environment: aSystemDictionary. self environment at: self name put: self. self environment organization classify: self name under: categorySymbol. ^ true! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'ST 6/20/2013 17:06' prior: 31603355! testAsClassDefinition2 | newClass | newClass:= Trait asRingDefinition. self assert: (newClass isRingObject). self assert: (newClass isClass). self assert: (newClass name == #Trait). self assert: (newClass category notNil). self assert: (newClass superclassName notNil). self assert: (newClass traitCompositionSource = 'TClass'). self assert: (newClass theMetaClass isRingObject). self assert: (newClass theMetaClass isClass). self assert: (newClass theMetaClass traitCompositionSource = 'TClass classTrait'). ! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'ST 6/20/2013 16:50' prior: 31604012! testAsClassDefinitionSourceDefinition | newClass | newClass:= Trait asRingDefinition. self assert: (newClass definitionSource = 'TraitDescription subclass: #Trait uses: TClass instanceVariableNames: ''name environment classTrait category'' classVariableNames: '''' poolDictionaries: '''' category: ''Traits-Kernel'''). self assert: (newClass theMetaClass definitionSource = 'Trait class uses: TClass classTrait instanceVariableNames: '''''). ! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! "Ring-Tests-Kernel"! "Traits"! ----End fileIn----! ----QUIT----an Array(2 July 2013 3:09:12 pm) Pharo.image priorSource: 9835950! ----STARTUP----an Array(2 July 2013 3:20:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 3:20:07 pm) Pharo-30240.image priorSource: 9885518! ----STARTUP----an Array(2 July 2013 3:39:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/2/2013 15:33' prior: 43390682! commentForCurrentUpdate ^ '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 2) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/2/2013 15:33'! script340 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.527.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/2/2013 15:33'! update30241 "self new update30241" self withUpdateLog: '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 2) '. self loadTogether: self script340 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 6/24/2013 16:04' prior: 41266475! theMetaClass "Sent to a class or metaclass, always return the metaclass" ^self class! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 6/24/2013 16:04' prior: 41266324! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(2 July 2013 3:39:55 pm) Pharo.image priorSource: 9885714! ----STARTUP----an Array(2 July 2013 3:56:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 3:56:27 pm) Pharo-30241.image priorSource: 9896807! ----STARTUP----an Array(2 July 2013 4:28:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/2/2013 16:05' prior: 43440446! commentForCurrentUpdate ^ '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 3) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/2/2013 16:05'! script341 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.122.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.317.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.136.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.38.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.204.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.528.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/2/2013 16:05'! update30242 "self new update30242" self withUpdateLog: '11010 The class Trait must use the trait TClass https://pharo.fogbugz.com/f/cases/11010/ (pass 3) '. self loadTogether: self script341 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'EstebanLorenzano 7/2/2013 16:04'! baseTrait ^ self! ! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 6/25/2013 12:50'! hasClassTrait ^self classTrait notNil.! ! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 6/25/2013 12:52'! isBaseTrait ^true! ! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 6/25/2013 12:52'! isClassTrait ^false! ! Trait removeSelector: #isClassTrait! Trait removeSelector: #isBaseTrait! Trait removeSelector: #hasClassTrait! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! Trait removeSelector: #duplicateClassWithNewName:! Trait removeSelector: #baseTrait! !Trait method! baseTrait ^ self! ! !Trait method! baseTrait ^ self! ! !Trait method! hasClassTrait ^self classTrait notNil.! ! !Trait method! hasClassTrait ^self classTrait notNil.! ! !Trait method! isBaseTrait ^true! ! !Trait method! isBaseTrait ^true! ! !Trait method! isClassTrait ^false! ! !Trait method! isClassTrait ^false! ! "Traits"! ----End fileIn----! ----QUIT----an Array(2 July 2013 4:28:54 pm) Pharo.image priorSource: 9897003! ----STARTUP----an Array(2 July 2013 4:37:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 4:37:43 pm) Pharo-30242.image priorSource: 9909321! ----STARTUP----an Array(2 July 2013 5:39:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/2/2013 17:36' prior: 43451735! commentForCurrentUpdate ^ '11111 Backport m4te bytearray inspector fix on pharo https://pharo.fogbugz.com/f/cases/11111 11099 Update SlotClassBuilder https://pharo.fogbugz.com/f/cases/11099 11103 expandRoots and expandAll to AlainTreeModel https://pharo.fogbugz.com/f/cases/11103 11011 Using anonymousSubclassOf: for creating anonymous subclasses https://pharo.fogbugz.com/f/cases/11011'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/2/2013 17:36'! script342 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.40.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.528.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/2/2013 17:36'! update30243 "self new update30243" self withUpdateLog: '11111 Backport m4te bytearray inspector fix on pharo https://pharo.fogbugz.com/f/cases/11111 11099 Update SlotClassBuilder https://pharo.fogbugz.com/f/cases/11099 11103 expandRoots and expandAll to AlainTreeModel https://pharo.fogbugz.com/f/cases/11103 11011 Using anonymousSubclassOf: for creating anonymous subclasses https://pharo.fogbugz.com/f/cases/11011'. self loadTogether: self script342 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PharoClassInstaller commentStamp: '' prior: 42536311! I am the default class installer. I install a new or modified class in the globals dictionary and announce this change publicly. The default environment can be changed to any SystemDictionary. Example: PharoClassInstaller example! !SlotClassBuilder commentStamp: '' prior: 42681073! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Example: see PharoClassInstaller! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'MartinDias 6/25/2013 13:53' prior: 41553912! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBExternalTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " | newSubclass | newSubclass := self classBuilder anonymousSubclassOf: NBExternalTypeValue. newSubclass valueType: aTypeName. ^ newSubclass! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/2/2013 14:27'! owner ^ owner! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 7/2/2013 15:28'! save: aValue saveBlock value: aValue! ! !DynamicEyeElement methodsFor: 'accessing' stamp: 'ClementBera 7/2/2013 15:29'! saveBlock: anObject saveBlock := anObject! ! !OldClassBuilderAdapter methodsFor: 'accessing' stamp: 'MartinDias 7/1/2013 18:36'! anonymousClassInstaller ^ AnonymousClassInstaller! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 7/1/2013 18:36' prior: 41797805! anonymousSubclassOf: superClass "Answer an anonymous subclass of the given superclass." ^ self anonymousClassInstaller make: [ :builder | builder superclass: superClass; layoutClass: superClass layout class ]. ! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'CamilloBruni 6/28/2013 14:47' prior: 41798082! class: oldClass instanceVariableNames: instVarString "This is the basic initialization message to change the definition of an existing Metaclass" | theClass | theClass := oldClass theNonMetaClass. theClass := self slotClassInstaller make: [ :builder | builder superclass: theClass superclass; name: theClass name; layoutClass: theClass layout class; slots: (theClass instVarNames collect: [:n | n asSlot ]); sharedVariables: theClass classVariablesString; sharedPools: theClass sharedPoolsString; traitComposition: theClass traitComposition; category: theClass category asString; classSlots: instVarString asSlotCollection ]. ^ theClass theMetaClass! ! !OldClassBuilderAdapter methodsFor: 'accessing' stamp: 'CamilloBruni 6/28/2013 13:56'! layoutForType: typeSymbol typeSymbol = #compiledMethod ifTrue: [ ^ CompiledMethodLayout ]. typeSymbol = #bytes ifTrue: [ ^ ByteLayout ]. typeSymbol = #words ifTrue: [ ^ WordLayout ]. typeSymbol = #weak ifTrue: [ ^ WeakLayout ]. typeSymbol = #variable ifTrue: [ ^ VariableLayout ]. typeSymbol = #normal ifTrue: [ ^ PointerLayout ]. Error signal: 'Invalid layout type: ', typeSymbol asString.! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 7/1/2013 16:03' prior: 41798826! name: name inEnvironment: environment subclassOf: superClass type: type instanceVariableNames: instanceVariablesString classVariableNames: classVariablesString poolDictionaries: sharedPoolsString category: category "Define a new class in the given environment" ^ self slotClassInstaller make: [ :builder | builder superclass: superClass; name: name; layoutClass: (self layoutForType: type); slots: instanceVariablesString asSlotCollection; sharedVariables: classVariablesString; sharedPools: sharedPoolsString; category: category; environment: environment; copyTraitCompositionFromExistingClass ]. ! ! !AbstractClassInstaller methodsFor: 'traits' stamp: 'MartinDias 7/1/2013 14:54' prior: 41742175! copyTraitCompositionFrom: oldClass to: newClass self installTraitComposition: oldClass traitComposition copyTraitExpression on: newClass. "We have to manually unsubcribe the newClass from its traits. Later in the class-building phase newClass becomeForward: oldClass and hence we can no longer distinguish the two. Which would leave `newClass trait users`, an IdetitySet, in an invalid state, as it's elements have been modified (the becomeForward:) without a proper rehash." newClass traitComposition traits do: [ :trait | trait removeUser: newClass ]. ! ! !AbstractClassInstaller methodsFor: 'accessing' stamp: 'CamilloBruni 6/28/2013 14:03'! environment self subclassResponsibility! ! !PharoClassInstaller commentStamp: '' prior: 43475191! I am the default class installer. I install a new or modified class in the globals dictionary and announce this change publicly. The default environment can be changed to any SystemDictionary. Example: PharoClassInstaller example! !PharoClassInstaller class methodsFor: 'example' stamp: 'MartinDias 7/1/2013 16:10'! example ^ PharoClassInstaller make: [ :aSlotClassBuilder | aSlotClassBuilder superclass: Object; name: #MyClass; slots: #(varA varB); category: 'My-Category' ].! ! !PharoClassInstaller methodsFor: 'private' stamp: 'MartinDias 6/28/2013 17:45'! basicClassDefinitionChangedFrom: oldClass to: newClass " Copy over the trait composition " self copyTraitCompositionFrom: oldClass to: newClass. " Copy over the method organization " newClass organization: oldClass organization. " Update the superclass links " oldClass superclass == newClass superclass ifFalse: [ oldClass superclass removeSubclass: oldClass. newClass superclass addSubclass: newClass ]. self systemAnnouncer classDefinitionChangedFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 6/28/2013 12:50' prior: 41745415! classAdded: aClass inCategory: aCategory " Install the new class in the system " environment at: aClass name put: aClass. environment flushClassNameCache. " Update the system's organization " environment organization classify: aClass name under: aCategory. aClass environment: environment. self systemAnnouncer classAdded: aClass inCategory: aCategory. " Inform superclass of new subclass " aClass superclass addSubclass: aClass.! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:55' prior: 41746088! classDefinitionChangedFrom: oldClass to: newClass by: classModification ^ self copyMethodsFrom: oldClass to: newClass using: classModification; basicClassDefinitionChangedFrom: oldClass to: newClass.! ! !PharoClassInstaller methodsFor: 'accessing' stamp: 'CamilloBruni 6/28/2013 14:03'! environment ^ environment! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:56'! formatChangedFrom: oldClass to: newClass by: classModification self classDefinitionChangedFrom: oldClass to: newClass by: classModification ! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'MartinDias 7/1/2013 15:58' prior: 41748025! migrateClasses: old to: new using: anInstanceModification instanceModification := anInstanceModification. old ifEmpty: [ ^ self ]. [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index)]. old elementsForwardIdentityTo: new. " Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: " " If we don't clean up this garbage, a second update would revive them with a wrong layout!! " " (newClass rather than oldClass, since they are now both newClass) " Smalltalk garbageCollect. ] valueUnpreemptively! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:56' prior: 41748712! recategorize: aClass to: newCategory | oldCategory | oldCategory := aClass category. oldCategory == newCategory ifTrue: [ ^ self ]. environment organization classify: aClass name under: newCategory. self systemAnnouncer class: aClass recategorizedFrom: oldCategory to: newCategory! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:55' prior: 41749101! shallowClassDefinitionChangedFrom: oldClass to: newClass by: classModification " Copy over the method organization " " Update the superclass links " self shallowCopyMethodsFrom: oldClass to: newClass using: classModification; basicClassDefinitionChangedFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:55'! slotsChangedFrom: oldClass to: newClass by: classModification self classDefinitionChangedFrom: oldClass to: newClass by: classModification.! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 7/1/2013 15:55'! superclassChangedFrom: oldClass to: newClass by: classModification self shallowClassDefinitionChangedFrom: oldClass to: newClass by: classModification ! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'MartinDias 7/1/2013 15:59' prior: 41750477! updateClass: oldClass to: newClass | compactClassIndex | compactClassIndex := oldClass indexIfCompact. compactClassIndex > 0 ifTrue: [ newClass layout compactClassIndex: compactClassIndex ]. self updateInstancesFrom: oldClass to: newClass! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'MartinDias 7/1/2013 15:59' prior: 41750807! updateInstancesFrom: old to: new | oldInstances variable instSize newInstances map | oldInstances := old allInstances asArray. variable := new isVariable. instSize := new instSize. newInstances := Array new: oldInstances size. map := new instVarMappingFrom: old. 1 to: oldInstances size do: [ :i | newInstances at: i put: ( new newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map) ]. oldInstances elementsForwardIdentityTo: newInstances.! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/19/2013 17:56'! expandAll self treeModel changed: #(rootNodes expandAll)! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/19/2013 17:56'! expandRoots self treeModel changed: #(rootNodes expandRoots)! ! !AlainTreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/25/2013 18:02' prior: 35353799! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ treeModel selectedItems ifEmpty: [ nil ] ifNotEmpty: [ :collection | collection last ]! ! !EyeByteArrayInspector methodsFor: 'list' stamp: 'ClementBera 7/2/2013 17:11' prior: 36482032! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex' value: [ String streamContents: [ :s | s nextPutAll: '['. self object do: [ :each | s << (each printPaddedWith: $0 to: 2 base: 16) ] separatedBy: [ s nextPut: $ ]. s nextPut: $] ] limitedTo: 5000. ] ). elements add: (DynamicEyeElement host: self object label: 'string' value: [ | str width | str := String new: (width := self object size < 5000 ifTrue: [ self object size ] ifFalse: [ 5000 ] ). str replaceFrom: 1 to: str size with: (self object copyFrom: 1 to: width). str ] ).! ! !FilteringTreeNode methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/2/2013 14:13' prior: 37051780! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self contents do: [ :n | n updateAccordingTo: aFilter ]. self contents removeAllSuchThat: [ :n | (aFilter keepTreeNode: n) not and: [ n isEmpty] ] ]! ! !SlotClassBuilder commentStamp: '' prior: 43475489! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Example: see PharoClassInstaller! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:20' prior: 41808424! apply: classModification classModification modifiesSlots ifTrue: [self applySlotChange: classModification] ifFalse: [ classModification modifiesFormat ifTrue: [ self applyFormatChange: classModification] ifFalse: [ classModification modifiesSuperclass ifTrue: [ self applySuperclassChange: classModification ] ifFalse: [ ^ self installTraitComposition: classModification ]]]. self migrateClasses: classModification; cleanUp! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:49' prior: 41809547! applyAndUpdateFormat: classModification ^ self track: classModification during: [ :old :new | client formatChangedFrom: old to: new by: classModification ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:51'! applyAndUpdateSlots: classModification ^ self track: classModification during: [ :old :new | client slotsChangedFrom: old to: new by: classModification ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:48'! applyAndUpdateSuperclass: classModification ^ self track: classModification during: [ :old :new | client superclassChangedFrom: old to: new by: classModification ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:45' prior: 41810849! applySlotChange: classModification result := self applyAndUpdateSlots: classModification. classModification propagationsDo: [ :propagation | self applyAndUpdateSlots: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:45' prior: 41811120! applySuperclassChange: classModification result := self applyAndUpdateSuperclass: classModification. classModification propagationsDo: [ :propagation | self applyAndUpdateSuperclass: propagation ]! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 7/1/2013 16:02' prior: 41811392! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: PointerLayout slots: classSlots traitComposition: classTraitComposition. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: layoutClass slots: slots traitComposition: traitComposition. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 7/1/2013 16:02' prior: 41812271! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: PointerLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. client classAdded: newClass inCategory: category. ^ newClass! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:20'! cleanUp oldClasses removeAll. newClasses removeAll.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 7/1/2013 16:03'! copyTraitCompositionFromExistingClass "Ugly Helper method: I copy over the trait compisition of the class in my builder environment." | oldClass | oldClass := self environment at: name ifAbsent: [ ^ self ]. oldClass hasTraitComposition ifTrue: [ self traitComposition: oldClass traitComposition copyTraitExpression ]. oldClass class hasTraitComposition ifTrue: [ self classTraitComposition: oldClass class traitComposition copyTraitExpression ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'CamilloBruni 6/28/2013 15:34' prior: 41814191! installTraitComposition: classModification client installTraitComposition: classModification traitComposition on: classModification target. ! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:20'! migrateClasses: classModification. client migrateClasses: oldClasses asArray to: newClasses asArray using: classModification instanceModification.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 7/1/2013 16:09' prior: 41814925! name: aName [ name := aName asSymbol ] on: Error do: [ :error| self invalidGlobalNameError: aName ]. self validateClassName.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 7/1/2013 16:02'! superMetaclass ^ superclass ifNil: [ Class ] ifNotNil: [ superclass class ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/1/2013 15:27'! track: classModification during: aBlock | old new | old := classModification target. new := classModification apply. aBlock value: old value: new. " Store the modification for updateClasses " oldClasses add: old. newClasses add: new. ^ new! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'ToonVerwaest 3/28/2011 00:29' prior: 41815837! validateClass: aClass aClass isBehavior ifFalse: [ self error: 'Trying to build classes from non-class objects' ]. aClass isMeta ifTrue: [ self error: 'Metaclasses cannot be used for building classes' ].! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'MartinDias 10/25/2012 01:54' prior: 41816131! validateClassName "Validate the new class name. Raise an error if invalid." name isSymbol ifFalse: [ self invalidGlobalNameError: 'Class name should be a symbol.' ]. (name detect: [ :c | (c isAlphaNumeric or: [ c = $_ ]) not ] ifNone: []) ifNotNil: [ :c | self invalidGlobalNameError: 'Invalid character: ''', c printString, '''' ]. name first canBeGlobalVarInitial ifFalse: [ self invalidGlobalNameError: 'Class name does not start with a valid Global Var Initial.' ]. ! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'MartinDias 8/6/2012 11:23' prior: 41816698! validateSuperChain: oldClass superclass ifNil: [ ^ nil ]. superclass withAllSuperclassesDo: [ :class | class == oldClass ifTrue: [ CircularHierarchyConflict signal: 'Trying to build a circular hierarchy' ]].! ! !NBExternalArray class methodsFor: 'private' stamp: 'MartinDias 6/25/2013 13:52' prior: 41564364! anonymousSubclassInitElementType: aTypeName "create and initialize the anonymous subclass of me" | newSubclass | newSubclass := self classBuilder anonymousSubclassOf: NBExternalArray. newSubclass initElementType: aTypeName. ^ newSubclass! ! AbstractClassInstaller removeSelector: #superclassChangedOf:to:by:! PharoClassInstaller removeSelector: #superclassChangedOf:to:by:! PharoClassInstaller removeSelector: #classFormatChangedFrom:to:by:! SlotClassBuilder removeSelector: #metaOfSuper! SlotClassBuilder removeSelector: #applyPropagations:! SlotClassBuilder removeSelector: #applyAndUpdateMethods:! SlotClassBuilder removeSelector: #applyAndNotify:! DynamicEyeElement removeSelector: #save! AnonymousClassInstaller removeSelector: #superclassChangedOf:to:by:! "NativeBoost-Core"! "Slot"! "Spec-Core"! "Spec-Inspector"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(2 July 2013 5:39:20 pm) Pharo.image priorSource: 9909517! ----STARTUP----an Array(2 July 2013 5:47:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 5:47:57 pm) Pharo-30243.image priorSource: 9941024! ----STARTUP----an Array(2 July 2013 6:35:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/2/2013 18:32' prior: 43464245! commentForCurrentUpdate ^ '11114 Missing methods after make Trait use TClass https://pharo.fogbugz.com/f/cases/11114/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/2/2013 18:32'! script343 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.37.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.40.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.534.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/2/2013 18:32'! update30244 "self new update30244" self withUpdateLog: '11114 Missing methods after make Trait use TClass https://pharo.fogbugz.com/f/cases/11114/ '. self loadTogether: self script343 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait methodsFor: 'private' stamp: 'SebastianTleye 7/2/2013 18:22'! localSelectors: aSet localSelectors := aSet.! ! !Trait methodsFor: 'accessing' stamp: 'SebastianTleye 7/2/2013 18:21'! setName: aSymbol self name: aSymbol.! ! "Traits"! ----End fileIn----! ----QUIT----an Array(2 July 2013 6:35:15 pm) Pharo.image priorSource: 9941220! ----STARTUP----an Array(2 July 2013 6:43:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 6:43:53 pm) Pharo-30244.image priorSource: 9952113! ----STARTUP----an Array(2 July 2013 10:31:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 7/2/2013 22:22' prior: 43495952! commentForCurrentUpdate ^ '11110 Install could kill the system onPrimitiveError: https://pharo.fogbugz.com/default.asp?11110 11116 cleaning PasteUp again https://pharo.fogbugz.com/default.asp?11116'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 7/2/2013 22:22'! script344 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.91.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-StephaneDucasse.53.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.40.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-EstebanLorenzano.18.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.40.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.18.mcz Tabs-Support-MarcusDenker.5.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.534.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 7/2/2013 22:25'! update30245 "self new update30245" self withUpdateLog: '11110 Install could kill the system onPrimitiveError: https://pharo.fogbugz.com/default.asp?11110 11116 cleaning PasteUp again https://pharo.fogbugz.com/default.asp?11116'. self loadTogether: self script344 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SelectionMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 7/2/2013 17:50' prior: 32912891! extent: newExtent super extent: newExtent. self selectSubmorphsOf: self world! ! !HaloMorph methodsFor: 'events' stamp: 'StephaneDucasse 7/2/2013 17:50' prior: 23161298! popUpFor: aMorph event: evt "This message is sent by morphs that explicitly request the halo on a button click. Note: anEvent is in aMorphs coordinate frame." | hand anEvent | self flag: #workAround. "We should really have some event/hand here..." anEvent := evt isNil ifTrue: [hand := aMorph world ifNotNilDo: [:w | w activeHand]. hand ifNil: [hand := aMorph world primaryHand]. hand lastEvent transformedBy: (aMorph transformedFrom: nil)] ifFalse: [hand := evt hand. evt]. self target: aMorph. hand halo: self. hand world addMorphFront: self. positionOffset := anEvent position - (aMorph point: aMorph position in: owner). self startStepping. ! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 7/2/2013 17:26' prior: 41377502! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. super acceptDroppingMorph: aMorph event: evt. aMorph submorphsDo: [ :m | (m isKindOf: HaloMorph) ifTrue: [ m delete ] ]. self bringTopmostsToFront! ! !PasteUpMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:29'! dispatchKeystroke: anEvent anEvent keyCharacter == Character tab ifTrue: [ self tabAmongFields ifTrue: [ ^ self tabHitWithEvent: anEvent ] ]! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:27' prior: 29198734! handlesKeyboard: evt ^ evt keyCharacter == Character tab and: [ self tabAmongFields ]! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:28' prior: 29199039! keyStroke: anEvent "A keystroke has been made. Service event handlers and, if it's a keystroke presented to the world, dispatch it to #unfocusedKeystroke:" super keyStroke: anEvent. "Give event handlers a chance" self selectedObject ifNotNil: [ :selected | selected moveOrResizeFromKeystroke: anEvent ]. self dispatchKeystroke: anEvent! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 7/2/2013 17:40' prior: 42852018! mouseDown: evt "Handle a mouse down event." | grabbedMorph handHadHalos | (self defaultYellowButtonMenuEnabled and: [evt yellowButtonPressed]) ifTrue: [ (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ self ]]. grabbedMorph := self morphToGrab: evt. grabbedMorph ifNotNil: [ grabbedMorph isSticky ifTrue: [^self]. ^evt hand grabMorph: grabbedMorph]. (super handlesMouseDown: evt) ifTrue: [^super mouseDown: evt]. handHadHalos := evt hand halo notNil. evt hand removeHalo. "shake off halos" self isWorldMorph ifTrue: [ self currentWindow ifNotNil: [:topWindow | SystemWindow passivateTopWindow]]. "since pasteup will release keyboard focus now" evt hand releaseKeyboardFocus. "shake of keyboard foci" (evt shiftPressed not and: [ self isWorldMorph not and: [ self wantsEasySelection not ]]) ifTrue: [ "explicitly ignore the event if we're not the world and we'll not select, so that we could be picked up if need be" evt wasHandled: false. ^ self. ]. ( evt shiftPressed or: [ self wantsEasySelection ] ) ifTrue: [ "We'll select on drag, let's decide what to do on click" | clickSelector | clickSelector := nil. evt shiftPressed ifTrue: [ clickSelector := #findWindow:.] ifFalse: [self isWorldMorph ifTrue: [clickSelector := handHadHalos ifTrue: [ #delayedInvokeWorldMenu: ] ifFalse: [ #invokeWorldMenu: ]]]. evt hand waitForClicksOrDrag: self event: evt selectors: { clickSelector. nil. nil. #dragThroughOnDesktop: } threshold: 5. ] ifFalse: [ "We wont select, just bring world menu if I'm the world" self isWorldMorph ifTrue: [ handHadHalos ifTrue: [ self delayedInvokeWorldMenu: evt ] ifFalse: [ self invokeWorldMenu: evt ] ] ]. ! ! !PasteUpMorph methodsFor: 'caching' stamp: 'StephaneDucasse 7/2/2013 17:33' prior: 29192414! releaseCachedState super releaseCachedState. self removeModalWindow. ! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:28' prior: 29200632! wantsWindowEvent: anEvent ^ self windowEventHandler notNil! ! !Morph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 16:26' prior: 26680524! moveOrResizeFromKeystroke: anEvent "move or resize the receiver based on a keystroke" | dir | anEvent keyValue = 28 ifTrue: [ dir := -1 @ 0 ]. anEvent keyValue = 29 ifTrue: [ dir := 1 @ 0 ]. anEvent keyValue = 30 ifTrue: [ dir := 0 @ -1 ]. anEvent keyValue = 31 ifTrue: [ dir := 0 @ 1 ]. dir notNil ifTrue: [ anEvent controlKeyPressed ifTrue: [ dir := dir * 10 ]. anEvent shiftPressed ifTrue: [ self extent: self extent + dir ] ifFalse: [ self position: self position + dir ] ]! ! !HandMorph class methodsFor: 'utilities' stamp: 'StephaneDucasse 7/2/2013 16:54' prior: 23263923! showEvents: aBool "HandMorph showEvents: true" "HandMorph showEvents: false" ShowEvents := aBool. aBool ifFalse: [ World invalidRect: (0@0 extent: 250@120) ].! ! !WorldMorph class methodsFor: 'world creation' stamp: 'StephaneDucasse 7/2/2013 16:07' prior: 42869555! installNewWorld "let us play God." [ | man | man := MorphicUIManager new. "we do not use UIManager default because in headless mode there is not such process." man uiProcess ifNotNil: [ man terminateUIProcess ]. self new installForUIProcessReinstall. man spawnNewProcess. ] forkAt: Processor userInterruptPriority! ! !WorldMorph methodsFor: 'submorphs-add/remove' stamp: 'StephaneDucasse 7/2/2013 17:25'! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. "Add the given morph to this world and start stepping it if it wants to be." self addMorphFront: aMorph. (aMorph fullBounds intersects: self viewBox) ifFalse: [ Beeper beep. aMorph position: self bounds center ]. aMorph submorphsDo: [ :m | (m isKindOf: HaloMorph) ifTrue: [ m delete ] ]. self bringTopmostsToFront! ! !WorldMorph methodsFor: 'submorphs-add/remove' stamp: 'StephaneDucasse 7/2/2013 16:30'! addAllMorphs: array super addAllMorphs: array. array do: [:m | self startSteppingSubmorphsOf: m]. ! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:29'! dispatchKeystroke: anEvent "A keystroke was hit when no keyboard focus was set, so it is sent here to the world instead." | aChar ascii | aChar := anEvent keyCharacter. (ascii := aChar asciiValue) = 27 ifTrue: "escape key" [^ self invokeWorldMenuFromEscapeKey]. (self navigationKey: anEvent) ifTrue: [^self]. (anEvent controlKeyPressed not and: [(#(1 4 8 28 29 30 31 32) includes: ascii) "home, end, backspace, arrow keys, space" and: [self keyboardNavigationHandler notNil]]) ifTrue: [self keyboardNavigationHandler navigateFromKeystroke: aChar]. (anEvent commandKeyPressed and: [Editor cmdKeysInText]) ifTrue: [^ self dispatchCommandKeyInWorld: aChar event: anEvent]. "It was unhandled. Remember the keystroke." self lastKeystroke: anEvent keyString. self triggerEvent: #keyStroke. super dispatchKeystroke: anEvent! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/2/2013 16:10' prior: 42870020! install "this method was used to be invoked from onPrimitiveError: the problem is that it cannot be used to recreate the world instance. For this have a look class side installNewWorld." owner := nil. "since we may have been inside another world previously" ActiveWorld := self. World := self. ActiveHand := self hands first. "default" ActiveEvent := nil. submorphs do: [:ss | ss owner isNil ifTrue: [ss privateOwner: self]]. "Transcript that was in outPointers and then got deleted." self viewBox: Display boundingBox. Sensor flushAllButDandDEvents. worldState handsDo: [:h | h initForEvents]. self borderWidth: 0. "default" SystemWindow noteTopWindowIn: self. self displayWorldSafely! ! !WorldMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 7/2/2013 16:07'! installForUIProcessReinstall "This method should be changed because it cannot be invoked from onPrimitiveError: as the previous PasteUpMorph method was used to." | morphs | owner := nil. morphs := World submorphs. "we should decide if we get morph or not. Now submorphs returns an array and this is strange that this is not an OrderedCollection" Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [ :h | h releaseCachedState ]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !WorldMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 7/2/2013 16:40'! position: aPoint "Prevent moving a world (e.g. via HandMorph>>specialGesture:)" super position: aPoint. self viewBox ifNotNil: [self viewBox: (aPoint extent: self viewBox extent)]. ! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:33'! releaseCachedState super releaseCachedState. self cleanseStepList.! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/2/2013 17:21'! startSteppingSubmorphsOf: aMorph "Ensure that all submorphs of the given morph that want to be stepped are added to the step list. Typically used after adding a morph to the world." aMorph allMorphsDo: [:m | m wantsSteps ifTrue: [m arrangeToStartSteppingIn: m world]. ] ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 7/2/2013 16:50'! step owner ifNotNil: [ ^ self runLocalStepMethods ]. ^ super step! ! !WorldMorph methodsFor: 'halos and balloon help' stamp: 'StephaneDucasse 7/2/2013 17:19'! wantsDirectionHandles ^ false! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:13'! wantsDropFiles: anEvent ^ true! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:30'! wantsWindowEvent: anEvent ^ true! ! !WorldState methodsFor: 'initialization' stamp: 'StephaneDucasse 7/2/2013 16:48' prior: 54967948! initialize super initialize. hands := Array new. damageRecorder:= DamageRecorder new. stepList := Heap sortBlock: self stepListSortBlock. lastStepTime := 0. lastAlarmTime := 0. self viewBox: Display boundingBox! ! PasteUpMorph removeSelector: #wantsDropFiles:! PasteUpMorph removeSelector: #wantsDirectionHandles! PasteUpMorph removeSelector: #stepTime! PasteUpMorph removeSelector: #step! PasteUpMorph removeSelector: #startSteppingSubmorphsOf:! PasteUpMorph removeSelector: #processEvent:using:! PasteUpMorph removeSelector: #position:! PasteUpMorph removeSelector: #addAllMorphs:! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(2 July 2013 10:31:20 pm) Pharo.image priorSource: 9952309! ----STARTUP----an Array(2 July 2013 10:39:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 July 2013 10:39:52 pm) Pharo-30245.image priorSource: 9974603! ----STARTUP----an Array(3 July 2013 10:22:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/3/2013 10:20' prior: 43507041! commentForCurrentUpdate ^ '11109 Add a hook in tree morph so one can differenciate clicks from keyboard navigation https://pharo.fogbugz.com/f/cases/11109 11118 TabExample in Pharo3.0 uses deprecated messages https://pharo.fogbugz.com/f/cases/11118 11117 RBEnvironments add Better class-side instance creation methods https://pharo.fogbugz.com/f/cases/11117 11072 No cache directory defined https://pharo.fogbugz.com/f/cases/11072'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/3/2013 10:20'! script345 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.825.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.40.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.534.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/3/2013 10:20'! update30246 "self new update30246" self withUpdateLog: '11109 Add a hook in tree morph so one can differenciate clicks from keyboard navigation https://pharo.fogbugz.com/f/cases/11109 11118 TabExample in Pharo3.0 uses deprecated messages https://pharo.fogbugz.com/f/cases/11118 11117 RBEnvironments add Better class-side instance creation methods https://pharo.fogbugz.com/f/cases/11117 11072 No cache directory defined https://pharo.fogbugz.com/f/cases/11072'. self loadTogether: self script345 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:28'! implementorsMatching: aString ^ self implementorsMatching: aString in: self default! ! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:29'! implementorsOf: aSelector ^ self implementorsOf: aSelector in: self default ! ! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:29'! matches: aString ^ self matches: aString in: self default! ! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:29'! onMethods: selectorCollection forClass: aClass ^ self onMethods: selectorCollection forClass: aClass in: self default ! ! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:30'! referencesTo: aLiteral ^ self referencesTo: aLiteral in: self default ! ! !TextMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 7/2/2013 14:11' prior: 52815523! setDefaultContentsIfNil "Set the default contents" | toUse | text ifNil: [toUse := self valueOfProperty: #defaultContents. toUse ifNil: [toUse :='' asText "allBold"]. "try it plain for a while" text := toUse]! ! !RBClassEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:20'! class: aClass ^ self classes: { aClass }! ! !RBClassEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:22'! classes: aCollection ^ self onEnvironment: self default classes: aCollection! ! !MorphTreeNodeMorph methodsFor: 'mouse events' stamp: 'BenjaminVanRyseghem 7/2/2013 14:24'! mouseDown: event complexContents mouseDown: event! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 6/28/2013 14:52'! cache "http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" ^ [ self resolveString: (self nbGetEnv: 'XDG_CACHE_HOME') ] on: Error do: [ self home / '.cache' ]! ! !PlatformResolverTest methodsFor: 'tests' stamp: 'DamienCassou 6/28/2013 14:38'! testCache | cache | cache := self assertOriginResolves: #cache! ! !PlatformResolverTest methodsFor: 'tests' stamp: 'DamienCassou 6/28/2013 14:35' prior: 29357201! testHome | home | home := self assertOriginResolves: #home. self assert: home isDirectory! ! !FileSystemResolverTest methodsFor: 'asserting' stamp: 'DamienCassou 6/28/2013 14:35' prior: 22059041! assertOriginResolves: aSymbol | reference | reference := resolver resolve: aSymbol. self assert: (reference isKindOf: FileReference). self assert: reference isAbsolute. self assert: reference exists. ^ reference! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 7/2/2013 14:22' prior: 26916690! mouseDown: event on: aTargetMorph "Changed to take keybaord focus." ((self autoMultiSelection) and: [event shiftPressed not]) ifTrue: [ firstClickedMorph := aTargetMorph. lastClickedMorph := aTargetMorph. aTargetMorph selected ifTrue: [self removeFromSelection: aTargetMorph] ifFalse: [self addToSelection: aTargetMorph]]. (event shiftPressed not or: [firstClickedMorph isNil]) ifTrue: [firstClickedMorph := aTargetMorph]. aTargetMorph mouseDown: event ! ! !Tab methodsFor: 'protocol' stamp: 'TorstenBergmann 7/3/2013 08:43' prior: 39850344! softRetrieveMorph | rotating oldIcon | "Like retrieveMorph but done in a separated process" morph ifNotNil: [ ^ self ]. retrievingProcess ifNotNil: [ "The retrieving process is already running, let's wait for its result" retrievingProcess isTerminated ifFalse: [ ^ self ] ]. oldIcon := self icon ifNotNil: [ :i | i form ]. retrievingProcess := [ [ "set rotating icon" self icon: self class refreshIcon1. rotating := [ | i | i := 1. [ true ] whileTrue:[ i := (i \\ 10)+1. 100 milliSeconds asDelay wait. self icon: (self class perform: ('refreshIcon', i asString) asSymbol) ] ] fork. "compute time consuming data" self morph: retrievingBlock value ] ensure: [ rotating terminate. self icon: oldIcon. retrievingSemaphore signal ] ] fork.! ! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 6/28/2013 14:47'! cache ^ self home / 'Library' / 'Caches'! ! !RBCategoryEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:23'! categories: aCollection ^ self onEnvironment: self default categories: aCollection! ! !RBCategoryEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:24'! category: aCategory ^ self categories: { aCategory }! ! !RBCategoryEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:23' prior: 30373840! onEnvironment: anEnvironment categories: aCollection ^(self onEnvironment: anEnvironment) categories: aCollection; yourself! ! !MorphTreeNodeModel methodsFor: 'events' stamp: 'BenjaminVanRyseghem 7/2/2013 14:25'! mouseDown: event "Do not do anything"! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 6/28/2013 16:33'! cache "Because Windows does not define any location for putting cache files, we chose to use the preference directory. http://libertyboy.free.fr/computing/reference/envariables/" ^ self preferences! ! !TabActionButton methodsFor: 'drawing' stamp: 'TorstenBergmann 7/3/2013 08:44' prior: 39796838! drawOn: aCanvas super drawOn: aCanvas. icon ifNil: [ ^ self ]. icon form ifNil: [ ^ self ]. aCanvas translucentImage: icon form at: self topLeft! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:21' prior: 30891233! onEnvironment: anEnvironment packageNames: aCollection ^ self onEnvironment: anEnvironment packages: (aCollection collect: [ :each | PackageInfo named: each ])! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:24'! package: aPackage ^ self packages: { aPackage }! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:24'! packageName: aName ^ self packageNames: { aName }! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:22'! packageNames: aCollection ^ self onEnvironment: self default packageNames: aCollection! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:22'! packages: aCollection ^ self onEnvironment: self default packages: aCollection! ! !RBOrEnvironment class methodsFor: 'instance creation' stamp: 'lr 11/25/2009 00:51' prior: 30883092! onEnvironment: anEnvironment or: anotherEnvironment ^ (self onEnvironment: anEnvironment) orEnvironment: anotherEnvironment; yourself! ! !PlatformResolver methodsFor: 'origins' stamp: 'DamienCassou 6/28/2013 14:40'! cache "Operating Systems often define standard locations for a personal cache directory. The cache directory is a user-specific non-essential (cached) place where data should be written." self subclassResponsibility! ! !PlatformResolver methodsFor: 'resolving' stamp: 'DamienCassou 6/28/2013 14:37' prior: 29355993! supportedOrigins ^ #(home desktop documents preferences cache)! ! !RBBrowserEnvironment class methodsFor: 'accessing' stamp: 'CamilloBruni 7/2/2013 23:23'! default ^ RBBrowserEnvironment new! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 7/2/2013 23:18' prior: 30329800! numberSelectors | total | total := 0. self selectorsDo: [:sel | total := total + 1 ]. ^total! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 7/2/2013 23:18'! selectors ^ Array streamContents: [ :stream | self selectorsDo: [ :selector | stream nextPut: selector ]]! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 7/2/2013 23:17'! selectorsDo: aBlock self allClassesDo: [ :each | self selectorsForClass: each do: aBlock ].! ! !RBProtocolEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:25'! class: aClass protocols: aCollection ^ self onEnvironment: self default class: aClass protocols: aCollection! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:33' prior: 31545221! readersOfInstanceVariable: aString in: aClass ^ self on: self default readersOfInstanceVariable: aString in: aClass! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:31' prior: 31545451! referencesToClassVariable: aSymbol in: aClass ^ self on: self default referencesToClassVariable: aSymbol in: aClass ! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:32' prior: 31545681! referencesToInstanceVariable: aString in: aClass ^ self on: self default referencesToInstanceVariable: aString in: aClass ! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:32' prior: 31545916! writersOfInstanceVariable: aString in: aClass ^ self on: self default writersOfInstanceVariable: aString in: aClass ! ! !RBPragmaEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/2/2013 23:26'! keywords: aKeywordCollection ^ self onEnvironment: self default keywords: aKeywordCollection! ! "FileSystem-Core"! "FileSystem-Tests-Core"! "Morphic-Base"! "Refactoring-Environment"! "Tabs"! "Tabs-Support"! ----End fileIn----! ----QUIT----an Array(3 July 2013 10:22:23 am) Pharo.image priorSource: 9974801! ----STARTUP----an Array(3 July 2013 10:31:30 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 July 2013 10:31:30 am) Pharo-30246.image priorSource: 9995505! ----STARTUP----an Array(3 July 2013 10:53:09 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/3/2013 10:51' prior: 43529531! commentForCurrentUpdate ^ '11046 Recategorization is not tracked https://pharo.fogbugz.com/f/cases/11046'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/3/2013 10:51'! script346 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.157.mcz Collections-Weak-MarcusDenker.68.mcz CollectionsTests-EstebanLorenzano.615.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.493.mcz CompilerTests-MarcusDenker.166.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1511.mcz KernelTests-EstebanLorenzano.526.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.347.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.21.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.46.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.96.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.61.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.40.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.565.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1165.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-EstebanLorenzano.534.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/3/2013 10:51'! update30247 "self new update30247" self withUpdateLog: '11046 Recategorization is not tracked https://pharo.fogbugz.com/f/cases/11046'. self loadTogether: self script346 merge: false. MCWorkingCopy registerForNotifications. . self flushCaches. ! ! "ScriptLoader30"! !MCPackageManager class methodsFor: 'event registration' stamp: 'GuillermoPolito 6/28/2013 11:39' prior: 24909369! registerInterestOnSystemChangesOnAnnouncer: anAnnouncer anAnnouncer on: ClassAdded, ClassModifiedClassDefinition, ClassRenamed, ClassCommented send: #classModified: to: self. anAnnouncer on: ClassRepackaged send: #classMoved: to: self. anAnnouncer on: ClassRemoved send: #classRemoved: to: self. anAnnouncer on: MethodAdded, MethodModified, MethodRecategorized send: #methodModified: to: self. anAnnouncer on: MethodRepackaged send: #methodMoved: to: self. anAnnouncer on: MethodRemoved send: #methodRemoved: to: self.! ! "Monticello"! ----End fileIn----! ----QUIT----an Array(3 July 2013 10:53:17 am) Pharo.image priorSource: 9995703! ----STARTUP----an Array(3 July 2013 11:20:25 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 July 2013 11:20:25 am) Pharo-30247.image priorSource: 10006999! ----STARTUP----an Array(3 July 2013 2:11:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/3/2013 14:08' prior: 43550433! commentForCurrentUpdate ^ '11121 Missing Set isHealthy test https://pharo.fogbugz.com/f/cases/11121 10865 Remove old compiler API from Pharo image Part 1 https://pharo.fogbugz.com/f/cases/10865 11123 Eye inspector does not focus automatically on the list https://pharo.fogbugz.com/f/cases/11123 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/3/2013 14:08'! script347 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-StephaneDucasse.866.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.566.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1166.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/3/2013 14:08'! update30248 "self new update30248" self withUpdateLog: '11121 Missing Set isHealthy test https://pharo.fogbugz.com/f/cases/11121 10865 Remove old compiler API from Pharo image Part 1 https://pharo.fogbugz.com/f/cases/10865 11123 Eye inspector does not focus automatically on the list https://pharo.fogbugz.com/f/cases/11123 '. self loadTogether: self script347 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SetTest commentStamp: '' prior: 42660726! This is the unit test for the class Set. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !OCKeyedSet methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 13:20'! isHealthy "Opal developers plan to remove this class so for the moment we just return true/" ^ true! ! !PluggableSetTest methodsFor: 'requirements' stamp: 'CamilloBruni 7/3/2013 12:58' prior: 29498285! classToBeTested ^ PluggableSet! ! !IdentitySetTest methodsFor: 'requirements' stamp: 'CamilloBruni 7/3/2013 12:59' prior: 23519060! classToBeTested ^ IdentitySet! ! !CollectionRootTest methodsFor: 'accessing' stamp: 'CamilloBruni 7/3/2013 13:03'! collectionClass " return the class to be used to create instances of the class tested" ^ self classToBeTested! ! !SetTest commentStamp: '' prior: 43572627! This is the unit test for the class Set. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !SetTest methodsFor: 'coverage' stamp: 'CamilloBruni 7/3/2013 13:04' prior: 33068866! classToBeTested ^ Set.! ! !SetTest methodsFor: 'some tests' stamp: 'CamilloBruni 7/3/2013 13:12' prior: 33072503! testAllSetsAreHealthy | badSets | "Only run for Set" self collectionClass = Set ifFalse: [ ^ self ]. badSets := Set allSubInstances select: [:badSet | badSet isHealthy not ]. self assert: badSets isEmpty.! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'ClementBera 7/3/2013 13:18' prior: 36505894! inspector: anEyeInspector inspector contents ifNotNil: [ :inspect | inspect owner: nil ]. inspector contents: anEyeInspector. anEyeInspector owner: self. anEyeInspector customMenuActions: self customMenuActions. anEyeInspector takeKeyboardFocus. anEyeInspector initializeAutoRefresh. self pushHistory.! ! !InspectorWrapper methodsFor: 'updating' stamp: 'ClementBera 7/3/2013 13:04'! takeKeyboardFocus ^ self inspector takeKeyboardFocus! ! !BreakpointManager class methodsFor: 'private' stamp: 'ClementBera 6/28/2013 10:59' prior: 40178461! breakpointMethodSourceFor: aSymbol in: aClass "Compose new source containing a break statement (currently it will be the first, later we want to insert it in any place)" | oldSource methodNode breakOnlyMethodNode sendBreakMessageNode ast | OpalCompiler isActive ifFalse: [ oldSource := aClass sourceCodeAt: aSymbol. methodNode := aClass compiler source: oldSource; class: aClass; failBlock: [self error: '[breakpoint] unable to install breakpoint']; translate. breakOnlyMethodNode := aClass compiler source: 'temporaryMethodSelectorForBreakpoint self break. ^self'; class: aClass; failBlock: [self error: '[breakpoint] unable to install breakpoint']; translate. sendBreakMessageNode := breakOnlyMethodNode block statements first. methodNode block statements addFirst: sendBreakMessageNode. ^methodNode printString ]. sendBreakMessageNode := RBMessageNode receiver: (RBVariableNode named: 'self') selector: #break. ast := (aClass>>aSymbol) ast copy. ast body addNodeFirst: sendBreakMessageNode. ^ast formattedCode.! ! !BreakpointManager class methodsFor: 'private' stamp: 'ClementBera 6/28/2013 11:01' prior: 36284461! compilePrototype: aSymbol in: aClass "Compile and return a new method containing a break statement" | source method | source := self breakpointMethodSourceFor: aSymbol in: aClass. method := aClass compiler source: source; class: aClass; failBlock: [self error: '[breakpoint] unable to install breakpoint']; compiledMethodTrailer: (aClass>>aSymbol) trailer; compile. ^method! ! !MethodNodeTest methodsFor: 'testing' stamp: 'ClementBera 6/28/2013 11:05' prior: 26486360! testGenerateWithSource | source ast method | source := 'testMethod |hello| ^hello. ' . ast := Compiler new source: source; class: self class; failBlock: [self error: 'compilation error']; translate. method := ast generateWithSource. self assert: (method isKindOf: CompiledMethod). self assert: method trailer hasSourcePointer not. self assert: method trailer hasSource. self assert: (method sourceCode = source). ! ! !TBehavior methodsFor: 'testing' stamp: 'ClementBera 6/28/2013 11:07' prior: 40951113! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! !WeakSet methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 13:25'! isHealthy "Test that object hashes match their positions stored in set's array, answer true if everything ok, false otherwise WeakSet allSubInstances select: [:badSet | badSet isHealthy not ] " array withIndexDo: [ :element :index | (element isNotNil and: [ element ~~ flag ]) ifTrue: [ (self scanFor: element) == index ifFalse: [ ^ false ]]]. ^ true! ! !TraitMethodDescription methodsFor: 'private' stamp: 'ClementBera 6/28/2013 11:08' prior: 36294223! generateMethod: aSelector withMarker: aSymbol forArgs: aNumber binary: aBoolean | source node | source := String streamContents: [:stream | aNumber < 1 ifTrue: [stream nextPutAll: 'selector'] ifFalse: [aBoolean ifTrue: [ stream nextPutAll: '* anObject'] ifFalse: [ 1 to: aNumber do: [:argumentNumber | stream nextPutAll: 'with:'; space; nextPutAll: 'arg'; nextPutAll: argumentNumber asString; space]]]. stream cr; tab; nextPutAll: 'self '; nextPutAll: aSymbol]. node := self class compiler source: source; class: self class; failBlock: []; translate. ^(node generateWithSource) selector: aSelector; yourself! ! !Set methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 13:09' prior: 33057061! integrityCheck self deprecated: 'User #isHealthy' on: '7/3/2013 13:09' in: 'Pharo 3.0'. ^ self isHealthy! ! !Set methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 13:14' prior: 33057472! isHealthy "Test that object hashes match their positions stored in set's array, answer true if everything ok, false otherwise Set allSubInstances select: [:badSet | badSet isHealthy not ] " array withIndexDo: [ :element :index | element ifNotNil: [ (self scanFor: element) == index ifFalse: [ ^ false ]]]. ^ true! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 7/3/2013 13:18' prior: 41610627! inspect: anObject InspectorWrapper openInspector: (self inspector: anObject). ^ anObject! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'ClementBera 7/3/2013 12:52' prior: 41610812! inspector: anObject ^ anObject class inspectorClass new inspect: anObject; yourself! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 7/3/2013 12:45' prior: 41611683! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged:" object := nil asValueHolder. super initialize. self whenWindowChanged: [ :myWindow | myWindow whenClosedDo: [ self close ] ].! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 7/3/2013 13:08' prior: 36492777! initializePresenter "initialize the event handlings" object whenChangedDo: [ self objectChanged ]. list whenSelectedItemChanged: [ :item | self printDescription: item ]. description whenTextIsAccepted: [ :newText | self saveElement: newText. self printDescription ]. self initializeShortcuts. ! ! !EyeInspector methodsFor: 'private' stamp: 'ClementBera 7/3/2013 12:55'! takeKeyboardFocus ^ list takeKeyboardFocus! ! !EyeInspectorTest methodsFor: 'tests' stamp: 'ClementBera 7/3/2013 12:50' prior: 41628750! testErrorRaised | inspector | self instancesToTry do: [ :each | self shouldnt: [ inspector := each inspector ] raise: Error ] ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 7/3/2013 13:14' prior: 36026488! initializePresenter super initializePresenter. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ] ]. self stack whenSelectedItemChanged: [:aContext | self updateToolbarFromContext: aContext. self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext ]. self contextInspector initializeAutoRefresh.! ! !TPureBehavior methodsFor: '*Compiler-Kernel' stamp: 'ClementBera 6/28/2013 11:08' prior: 36075870! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! SetTest removeSelector: #collectionClass! !Trait method! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! "Collections-Unordered"! "Collections-Weak"! "CollectionsTests"! "Compiler"! "CompilerTests"! "OpalCompiler-Core"! "Spec-Debugger"! "Spec-Inspector"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(3 July 2013 2:11:30 pm) Pharo.image priorSource: 10007197! ----STARTUP----an Array(3 July 2013 2:19:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 July 2013 2:19:53 pm) Pharo-30248.image priorSource: 10031042! ----STARTUP----an Array(3 July 2013 3:14:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/3/2013 15:11' prior: 43561927! commentForCurrentUpdate ^ '11047 Integrate new class builder step 2 https://pharo.fogbugz.com/f/cases/11047 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/3/2013 15:11'! script348 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SlotTests-MarcusDenker.37.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.127.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.566.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1166.mcz ToolsTest-MarcusDenker.denker.41.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/3/2013 15:11'! update30249 "self new update30249" self withUpdateLog: '11047 Integrate new class builder step 2 https://pharo.fogbugz.com/f/cases/11047 '. self loadTogether: self script348 merge: false. SlotVirus spread. . self flushCaches. ! ! "ScriptLoader30"! !TOne classTrait methodsFor: 'testing' stamp: 'MartinDias 7/1/2013 12:39'! classOne ^ 1! ! !TOne methodsFor: 'testing' stamp: 'MartinDias 8/1/2012 00:06'! one ^ 1! ! !TTwo methodsFor: 'as yet unclassified' stamp: 'MartinDias 8/1/2012 00:11'! two ^ 2! ! !TestSharedPool class methodsFor: 'class initialization' stamp: 'MartinDias 8/7/2012 02:06'! initialize One := 1! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:01'! assertOnlyOneAnnouncementOf: anAnnouncement within: aBlock SystemAnnouncer uniqueInstance weak on: anAnnouncement send: #countAnnouncements: to: self. aBlock value. self assert: announcementsCount <= 1! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! countAnnouncements: anAnnouncement announcementsCount := announcementsCount + 1! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! saveAnnouncement: anAnnouncement announcement := anAnnouncement! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! saveAnnouncementOnce: anAnnouncement announcement ifNotNil: [ ^self ]. announcement := anAnnouncement! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'running' stamp: 'MartinDias 6/3/2013 17:19'! setUp super setUp. announcementsCount := 0.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassAddedAnnounced | classAdded | SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. classAdded := self buildClassWithLayout: PointerLayout. self assert: announcement classAdded equals: classAdded.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self buildClassWithLayout: PointerLayout. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self buildClassWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests-announcements' stamp: 'MartinDias 6/3/2013 16:55'! testClassRecategorizedAnnounced SystemAnnouncer uniqueInstance weak on: ClassRecategorized send: #saveAnnouncementOnce: to: self. aClass := self buildClassWith: [:builder| builder category: self aCategory ]. anotherClass := self buildClassWith: [:builder| builder category: self anotherCategory ]. self assert: announcement oldCategory equals: self aCategory. self assert: announcement newCategory equals: self anotherCategory. self assert: announcement classRecategorized == anotherClass.! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:07'! assertClassBuiltWith: blockToBuildAClass isEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self buildClassWith: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self buildClassWith: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout equals: aClass layout. self assert: aClass layout equals: anotherClass layout. self assert: aClass layout hash equals: anotherClass layout hash.! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:07'! assertClassBuiltWith: blockToBuildAClass isNotEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self buildClassWith: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self buildClassWith: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout ~= anotherClass layout. self assert: aClass layout hash ~= anotherClass layout hash.! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:07'! assertInvalidClassName: aName self should: [ self buildClassWith: [ :builder | builder name: aName ] ] raise: InvalidGlobalNameConflict. self flag: 'should remove class if not raised'. self should: [ PharoClassInstaller validateClassName: aName ] raise: InvalidGlobalNameConflict! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:06'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ] ! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:07'! should: superclassBlock extendWith: subclassBlock | superclass | superclass := self buildClassWith: superclassBlock. self buildClassWith: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ]! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:07'! shouldnt: superclassBlock extendWith: subclassBlock | superclass | superclass := self buildClassWith: superclassBlock. self should: [ self buildClassWith: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ] ] raise: PrimitiveTypeConflict! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 14:25'! testAddAndAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass addInstVarNamed: #z. self assert: aClass instVarNames equals: #(x y z). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 14:23'! testAddAndRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass removeInstVarNamed: #x. self assert: aClass instVarNames equals: #(y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 6/3/2013 17:07'! testAddClassSlotAndMigrate | classAdded classModified | classAdded := self buildClassWith: [ :builder | builder classSlots: #(a) ]. classAdded instVarNamed: #a put: $A. classModified := self buildClassWith: [ :builder | builder classSlots: #(a b) ]. self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) isNil.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'CamilloBruni 6/28/2013 14:45'! testAddInstVarNamed "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #( x ) ]. self assert: aClass instVarNames = #(x). anotherClass := self buildClassWith: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: #( y ) ]. self assert: anotherClass instVarNames = #(y).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'CamilloBruni 6/28/2013 14:45'! testAddInstVarNamedClassInterface "Add instance variables using the class interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName ]. aClass addInstVarNamed: 'x'. self assert: aClass instVarNames = #(x). anotherClass := self buildClassWith: [ :builder | builder superclass: aClass; name: self anotherClassName. ]. anotherClass addInstVarNamed: 'y'. self assert: anotherClass instVarNames = #(y).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 14:41'! testAddInstVarNamedWithTrait "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x y )]. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 14:24'! testAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 6/3/2013 17:07'! testAddSharedPool self buildClassWith: [ :builder | builder sharedPools: '' ]. aClass := self buildClassWith: [ :builder | builder sharedPools: 'TestSharedPool' ]. self assert: (aClass sharedPools includes: TestSharedPool). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 6/3/2013 17:07'! testAddSharedVariable self buildClassWith: [ :builder | builder sharedVariables: '' ]. aClass := self buildClassWith: [ :builder | builder sharedVariables: 'Var' ]. self assert: aClass classVarNames equals: #(Var). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:08'! testAddSlotAndMigrate "We create a class without slots and create an instance; then we add a slot and check the instance can hold a value." | classAdded | classAdded := self buildClassWithLayout: PointerLayout. instance := classAdded new. "now we extend it with slots. The class definition should've changed" self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarAt: 1 put: 125.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:08'! testAddSlotPropagateAndMigrate "We create a class without slots and a subclass, and create an instance of the latter; then we add a slot to superclass and check the instance can hold a value." | superclass subclass | superclass := self buildClassWithLayout: PointerLayout. subclass := self buildClassWith: [ :builder | builder superclass: superclass; name: self anotherClassName. ]. instance := subclass new. "now we extend it with slots. The class definition should've changed" superclass := self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarNamed: 'aSlot' put: 42. self assert: (instance instVarNamed: 'aSlot') = 42.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 18:38'! testAnonymousSubclass aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #(x) ]. anotherClass := aClass classBuilder anonymousSubclassOf: aClass. self deny: anotherClass == aClass. self assert: anotherClass isBehavior. self assert: anotherClass superclass == aClass. self deny: anotherClass name = aClass name. self assert: anotherClass allInstVarNames = #(x)! ! !SlotClassBuilderSilentTest methodsFor: 'tests-environment' stamp: 'MartinDias 6/28/2013 12:33'! testBasicEnvironment | environment | environment := SystemDictionary new. environment at: #SystemOrganization put: SystemOrganizer new. aClass := self buildClassWith: [ :builder | builder environment: environment ]. self assert: (aClass environment == environment). self assert: (environment includesKey: aClass name). self assert: (environment at: aClass name) == aClass. self deny: (Smalltalk globals includesKey: aClass name).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testByteCanExtendByte self should: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testByteCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: PointerLayout; slots: { #a }. ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testByteCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testCannotBeRecompiled | superclass | superclass := self buildClassWith: [ :builder | builder superclass: Object; name: self aClassName ]. self buildClassWith: [ :builder | builder superclass: superclass; name: self anotherClassName ]. self should: [ self buildClassWith: [ :builder | builder layoutClass: VariableLayout; name: self aClassName ] ] raise: Error description: 'Old class builder raises: X cannot be recompiled' ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:12'! testChangingFormatKeepsMethod aClass := self buildClassWith: [ :builder | builder name: self aClassName; layoutClass: PointerLayout ]. aClass compile: 'a ^self'. self assert: (aClass methodDictionary includesKey: #a). anotherClass := self buildClassWith: [ :builder | builder name: self aClassName; layoutClass: VariableLayout . ]. self assert: (anotherClass methodDictionary includesKey: #a).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 16:59'! testCheckAllLayouts self shouldnt: [SlotVirus checkAllLayouts] raise: Error! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 16:58'! testClassNameMustBeCapitalized self assertInvalidClassName: #aNotCapitalizedClassName! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/1/2013 16:08'! testClassNameMustBeSymbol self assertInvalidClassName: 1! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 16:58'! testClassNameWithInvalidCharacter self assertInvalidClassName: #'Invalid-ClassName'! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testClassSlotDuplicationConflict aClass := self buildClassWith: [ :builder | builder classSlots: { #a } ]. self should: [ self buildClassWith: [ :builder | builder superclass: aClass; name: self anotherClassName; classSlots: { #a } ] ] raise: SlotDuplicationConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testClassSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self buildClassWith: [ :builder | builder classSlots: { reservedName } ] ] raise: InvalidSlotNameConflict ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/1/2013 12:38'! testClassWithClassTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self buildClassWith: [ :builder | builder classTraitComposition: TOne ]. self assert: TOne users asArray equals: { aClass class }. self assert: TOne classTrait users isEmpty. self assert: (aClass class canUnderstand: #one). self assert: aClass one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/1/2013 12:37'! testClassWithTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self buildClassWith: [ :builder | builder traitComposition: TOne ]. self assert: TOne users asArray equals: { aClass }. self assert: TOne classTrait users isEmpty. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/1/2013 12:40'! testClassWithTrait2 self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self buildClassWith: [ :builder | builder traitComposition: TOne classTrait ]. self assert: TOne users isEmpty. self assert: TOne classTrait users asArray equals: { aClass }. self deny: (aClass canUnderstand: #one). self assert: (aClass canUnderstand: #classOne). self assert: aClass new classOne equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 16:59'! testCompiledMethodLayout self assert: (CompiledMethod layout isKindOf: CompiledMethodLayout).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testDirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-A" | classA classB | classA := self buildClassWith: [ :builder | builder superclass: Object; name: self aClassName ]. self should: [ self buildClassWith: [ :builder | builder superclass: classA; name: self aClassName ] ] raise: CircularHierarchyConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testIndirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-B<-A" | classA classB | classA := self buildClassWith: [ :builder | builder superclass: Object; name: self aClassName ]. classB := self buildClassWith: [ :builder | builder superclass: classA; name: self anotherClassName ]. self should: [ self buildClassWith: [ :builder | builder superclass: classB; name: self aClassName ] ] raise: CircularHierarchyConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layout equality' stamp: 'MartinDias 6/3/2013 16:59'! testLayoutEquals self layoutClasses do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] isEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layout equality' stamp: 'MartinDias 6/3/2013 16:59'! testLayoutNotEquals self layoutClasses do: [:aLayoutClass | (self layoutClasses copyWithout: aLayoutClass) do: [:anotherLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] isNotEqualToClassBuiltWith: [:builder | builder layoutClass: anotherLayoutClass ]]]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layout equality' stamp: 'MartinDias 6/3/2013 16:59'! testLayoutWithSlotsEquals self layoutClassesWithSlots do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ] isEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ].]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layout equality' stamp: 'MartinDias 6/3/2013 16:59'! testLayoutWithSlotsNotEquals self layoutClassesWithSlots do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ] isNotEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field2} ]]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/1/2013 12:47'! testModifyClassTraitComposition "Tests that when modifing the trait composition on class-side, the old methods are removed from the method dictionary, and the new ones are added." self buildClassWith: [ :builder | builder classTraitComposition: TOne ]. aClass := self buildClassWith: [ :builder | builder classTraitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass class }. self assert: TTwo classTrait users isEmpty. self deny: (aClass class canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass class canUnderstand: #two). aClass := self buildClassWith: [ :builder | builder classTraitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/1/2013 14:42'! testModifyTraitComposition "Tests that when modifing the trait composition, the old methods are removed from the method dictionary, and the new ones are added." self buildClassWith: [ :builder | builder traitComposition: TOne ]. aClass := self buildClassWith: [ :builder | builder traitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass }. "self assert: TTwo classTrait users isEmpty." self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass canUnderstand: #two). aClass := self buildClassWith: [ :builder | builder traitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testNewPointerClass aClass := self buildClassWithLayout: PointerLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testNewPointerClassWithVariables aClass := self buildClassWithLayout: PointerLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testNewVariableByteClass aClass := self buildClassWithLayout: ByteLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testNewVariableWordClass aClass := self buildClassWithLayout: WordLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testNewWeakClass aClass := self buildClassWithLayout: WeakLayout. self deny: aClass isCompact. self assert: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isWeak.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-example' stamp: 'MartinDias 7/1/2013 16:13'! testPharoClassInstallerExample | newClass | [ newClass := PharoClassInstaller example. self assert: newClass isBehavior. ] ensure: [ newClass removeFromSystem ].! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testPointerCanExtendPointer self should: [ :builder | builder layoutClass: PointerLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testPointerCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testPointerCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testPointerCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 17:07'! testPointerWithVariableExtensionIsNowVariable "This test case reproduces a real bug." | superclass subclass | superclass := self buildClassWith: [ :builder | builder superclass: Object; name: self aClassName ]. subclass := self buildClassWith: [ :builder | builder superclass: superclass; layoutClass: VariableLayout; name: self anotherClassName ]. superclass := self buildClassWith: [ :builder | builder layoutClass: VariableLayout ]. self assert: superclass isVariable. self assert: subclass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:08'! testRedefineSuperclass "This case reproduces a MNU found loading Moose." | superclass | superclass := self buildClassWithLayout: PointerLayout. self buildClassWith: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. self buildClassWithLayout: PointerLayout.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 6/3/2013 17:07'! testRemoveClassSlotAndMigrate | classAdded classModified | classAdded := self buildClassWith: [ :builder | builder classSlots: #(a b) ]. classAdded instVarNamed: #a put: $A. classModified := self buildClassWith: [ :builder | builder classSlots: #(a) ]. self assert: (classModified instVarNamed: #a) equals: $A. self should: [ classModified instVarNamed: #b ] raise: Error ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'CamilloBruni 6/29/2013 16:42'! testRemoveClassTrait "Tests that when removing a trait from class-side, its methods are removed from the method dictionary." aClass := self buildClassWith: [ :builder | builder classTraitComposition: TOne ]. aClass := self buildClassWith: [ :builder | builder classTraitComposition: {} ]. self deny: (aClass class canUnderstand: #one). self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'CamilloBruni 6/28/2013 14:46'! testRemoveInstVarNamed aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #(x z) ]. self assert: aClass instVarNames = #(x z).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'CamilloBruni 6/28/2013 14:46'! testRemoveInstVarNamedClassInterface aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass removeInstVarNamed: #y. self assert: aClass instVarNames = #(x z).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/1/2013 14:15'! testRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self buildClassWith: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass removeInstVarNamed: #x. self assert: aClass instVarNames isEmpty. self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 6/3/2013 17:07'! testRemoveSharedPool self buildClassWith: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass := self buildClassWith: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 6/3/2013 17:07'! testRemoveSharedVariable self buildClassWith: [ :builder | builder sharedVariables: 'Var' ]. aClass := self buildClassWith: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:08'! testRemoveSlotAndMigrate "We create a class with a slot and create an instance; then we remove the slot and check the instance doesn't hold the value." | classAdded | classAdded := self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. instance := classAdded new. "it should have an instance variable" instance instVarAt: 1 put: 125. "now we extend it with slots. The class definition should've changed" self buildClassWithLayout: PointerLayout. self should: [ instance instVarAt: 1 ] raise: Error.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'CamilloBruni 6/29/2013 16:45'! testRemoveTrait "Tests that when removing a trait from a class, its methods are removed from the method dictionary." self buildClassWith: [ :builder | builder traitComposition: TOne ]. aClass := self buildClassWith: [ :builder | builder traitComposition: {} ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self deny: (aClass canUnderstand: #one). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:13'! testShiftSlotAndMigrate aClass := self buildClassWithLayout: PointerLayout andSlots: { #a. #c }. aClass compile: 'a ^a'. aClass compile: 'c ^c'. instance := aClass new. instance instVarNamed: #a put: 1. instance instVarNamed: #c put: 3. "now we extend it with slots. The class definition should've changed" self buildClassWithLayout: PointerLayout andSlots: { #a. #b. #c }. "it should have added an instance variable with nil in the middle" self assert: (instance instVarAt: 1) equals: 1. self assert: (instance instVarAt: 2) equals: nil. self assert: (instance instVarAt: 3) equals: 3. self assert: (instance instVarNamed: #a) equals: 1. self assert: (instance instVarNamed: #b) equals: nil. self assert: (instance instVarNamed: #c) equals: 3. "it should have migrated methods" self assert: instance a equals: 1. self assert: instance c equals: 3.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 17:08'! testSlotBuilderBuildsClass aClass := self buildClassWithLayout: PointerLayout. self assert: (Smalltalk classNamed: self aClassName) == aClass. self assert: aClass name = self aClassName. self deny: aClass layout isNil.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testSlotDuplicationConflict aClass := self buildClassWith: [ :builder | builder slots: { #a } ]. self should: [ self buildClassWith: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: { #a } ] ] raise: SlotDuplicationConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 17:07'! testSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self buildClassWith: [ :builder | builder slots: { reservedName } ] ] raise: InvalidSlotNameConflict ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-layouts' stamp: 'MartinDias 6/3/2013 16:59'! testSmallIntegerLayout self assert: (SmallInteger layout isKindOf: SmallIntegerLayout).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 6/3/2013 17:14'! testSwitchClassSlotAndMigrate | classAdded classModified | classAdded := self buildClassWith: [ :builder | builder classSlots: #(a b) ]. "Add methods" classAdded class compile: 'a ^a'; compile: 'b ^b'. "Put values" classAdded instVarNamed: #a put: $A. classAdded instVarNamed: #b put: $B. "Modify the class" classModified := self buildClassWith: [ :builder | builder classSlots: #(b a) ]. "The instance was migrated" self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) equals: $B. "The methods were migrated" self assert: classModified a equals: $A. self assert: classModified b equals: $B. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 6/3/2013 17:15'! testSwitchSlotsAndMigrate aClass := self buildClassWithLayout: PointerLayout andSlots: { #a. #b }. aClass compile: 'a ^a'; compile: 'b ^b'. instance := aClass new. instance instVarNamed: #a put: $A. instance instVarNamed: #b put: $B. "now we switch the slots. The class definition should've changed" self buildClassWithLayout: PointerLayout andSlots: { #b. #a }. self assert: (instance instVarAt: 1) equals: $B. self assert: (instance instVarAt: 2) equals: $A. self assert: (instance instVarNamed: #a) equals: $A. self assert: (instance instVarNamed: #b) equals: $B. "it should have migrated methods" self assert: instance a equals: $A. self assert: instance b equals: $B.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'CamilloBruni 6/28/2013 23:39'! testTraitUsersAfterClassReshape aClass := self buildClassWith: [ :builder | builder name: self aClassName ]. anotherClass := self buildClassWith: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self buildClassWith: [ :builder | builder name: self aClassName; slots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'CamilloBruni 6/28/2013 23:38'! testTraitUsersAfterMetaclassReshape aClass := self buildClassWith: [ :builder | builder name: self aClassName ]. anotherClass := self buildClassWith: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self buildClassWith: [ :builder | builder name: self aClassName; classSlots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 6/3/2013 16:58'! testValidateClassName PharoClassInstaller validateClassName: #GoodClassNameThatShouldNotExist! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testVariableCanExtendPointer self should: [ :builder | builder layoutClass: PointerLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testVariableCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testVariableCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testVariableCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 6/3/2013 17:07'! testWithClassSlots aClass := self buildClassWith: [ :builder | builder classSlots: #(a) ]. self assert: aClass class instVarNames equals: #(a). aClass instVarNamed: #a put: $A. self assert: (aClass instVarNamed: #a) equals: $A.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 6/3/2013 17:15'! testWithSharedPool aClass := self buildClassWith: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass class compile: 'one ^One'. self assert: (aClass sharedPools includes: TestSharedPool). self assert: aClass one = 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 6/3/2013 17:15'! testWithSharedVariable aClass := self buildClassWith: [ :builder | builder sharedVariables: 'Var' ]. aClass class compile: 'var:x Var:=x'; compile: 'var ^Var'. aClass var: true. self assert: aClass classVarNames equals: #(Var). self assert: aClass var.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 6/3/2013 17:07'! testWithoutClassSlots aClass := self buildClassWith: [ :builder | builder classSlots: #() ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 6/3/2013 17:07'! testWithoutSharedPools aClass := self buildClassWith: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 6/3/2013 17:07'! testWithoutSharedVariables aClass := self buildClassWith: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testWordCanExtendWord self should: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testWordCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 6/3/2013 16:59'! testWordCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: PointerLayout; slots: { #a } ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 5/23/2013 13:19'! aCategory ^ 'SlotTestTmp'! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/31/2012 01:45'! aClassName ^ #NewSlotTestObject! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 5/23/2013 13:19'! anotherCategory ^ 'SlotTestTmp-Another'! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/31/2012 01:48'! anotherClassName ^ #NewSlotTestObject2! ! !SlotClassBuilderTest methodsFor: 'helper' stamp: 'MartinDias 7/3/2013 15:08'! assertTraitIntegrity self assert: TOne users isHealthy. self assert: TOne classTrait users isHealthy. self assert: TTwo users isHealthy. self assert: TTwo classTrait users isHealthy.! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 5/23/2013 13:19'! buildClassWith: anUnaryBlock "I build a class for testing, providing basic default values, but eventually customized by the received unary block." ^PharoClassInstaller make: [:builder| builder superclass: Object; name: self aClassName; layoutClass: PointerLayout; category: self aCategory. anUnaryBlock value: builder ].! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'GuillermoPolito 7/30/2012 22:11'! buildClassWithLayout: aClassLayout ^self buildClassWithLayout: aClassLayout andSlots: {}! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/31/2012 01:39'! buildClassWithLayout: aClassLayout andSlots: someSlots " I create a class using the Slot class builder given a class layout and a collection of slots. " ^self buildClassWith: [:builder| builder layoutClass: aClassLayout; slots: someSlots ].! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'CamilloBruni 6/28/2013 23:27'! cleanUpTrait: trait "During development some tests might invalidate the trait internal state. To avoid follow-up failures we reset the trait state here as good as possible." trait users removeAll. trait classTrait users removeAll.! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 3/28/2013 12:03'! expectedFailures ^ #( testCannotBeRecompiled )! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 4/12/2013 16:08'! layoutClasses ^ { ByteLayout. WordLayout. PointerLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 4/12/2013 16:09'! layoutClassesWithSlots ^ { PointerLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'CamilloBruni 6/28/2013 23:16'! tearDown "We remove the classes that could have been created during test run" super tearDown. SystemAnnouncer uniqueInstance suspendAllWhile: [ { self aClassName. self anotherClassName } do: [ :each | Smalltalk globals at: each ifPresent: [ :class | class removeFromSystem ]]]. SystemAnnouncer uniqueInstance unsubscribe: self. self cleanUpTrait: TOne; cleanUpTrait: TTwo.! ! !SmalltalkImage methodsFor: 'accessing' stamp: 'MartinDias 7/1/2013 19:12' prior: 41564158! classBuilder "Answer the object responsible of creating classes in the system." ^ OldClassBuilderAdapter new! ! "SlotTests"! "System-Support"! ----End fileIn----! ----QUIT----an Array(3 July 2013 3:14:19 pm) Pharo.image priorSource: 10031239! ----STARTUP----an Array(3 July 2013 3:23:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 July 2013 3:23:21 pm) Pharo-30249.image priorSource: 10088925! ----STARTUP----an Array(3 July 2013 5:22:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/3/2013 17:19' prior: 43585968! commentForCurrentUpdate ^ '11106 DynamicMessageImplementorTest tests failing https://pharo.fogbugz.com/f/cases/11106 11008 BasicCodeLoader should be renamed and have a decent help comment https://pharo.fogbugz.com/f/cases/11008 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/3/2013 17:20'! script349 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.212.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.136.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.13.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SlotTests-MarcusDenker.37.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1166.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/3/2013 17:20'! update30250 "self new update30250" self withUpdateLog: '11106 DynamicMessageImplementorTest tests failing https://pharo.fogbugz.com/f/cases/11106 11008 BasicCodeLoader should be renamed and have a decent help comment https://pharo.fogbugz.com/f/cases/11008 '. self loadTogether: self script349 merge: false. self flushCaches. ! ! "ScriptLoader30"! !STCommandLineHandler commentStamp: '' prior: 0! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !EvaluateCommandLineHandler commentStamp: '' prior: 42252529! Usage: eval [--help] [--save] [ --no-quit ] --help list this help message --save save the image after evaluation of the expression --no-quit if specified, the image continues runing after evaluating the a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45' prior: 39084150! testResponsibilityDefault | args | args := self argumentsWith: #('--help'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (STCommandLineHandler isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45' prior: 39084517! testResponsibilityEval | args | args := self argumentsWith: #('eval' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (STCommandLineHandler isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('-e' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (STCommandLineHandler isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('--evaluate' '1+2'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self deny: (STCommandLineHandler isResponsibleFor: args). self assert: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45' prior: 39085357! testResponsibilitySt | args | args := self argumentsWith: #('/foo/bar/myScript.st'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self assert: (STCommandLineHandler isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args). args := self argumentsWith: #('st' '/foo/bar/myScript.st'). self assert: (PharoCommandLineHandler isResponsibleFor: args). self assert: (STCommandLineHandler isResponsibleFor: args). self deny: (EvaluateCommandLineHandler isResponsibleFor: args).! ! !CommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45' prior: 19741690! testSelectHandlersCodeLoader | args handlers | args := self argumentsWith: #('/foo/bar/myScript.st'). handlers := CommandLineHandler selectHandlersFor: args. self assert: handlers first = STCommandLineHandler. args := self argumentsWith: #('/foo/bar/myScript.st' '--verbose'). handlers := CommandLineHandler selectHandlersFor: args. self assert: handlers first = STCommandLineHandler.! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 16:01' prior: 39551089! testGenerateGetter | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #instVar) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'instVar ^ instVar' withSeparatorsCompacted! ! !DynamicMessageImplementorTest methodsFor: 'testing' stamp: 'CamilloBruni 7/3/2013 16:02' prior: 39551512! testGenerateSetter | messageImplementor sourceCode | messageImplementor := DynamicMessageImplementor for: (Message selector: #instVar: argument: 1) in: self class. sourceCode := messageImplementor value. self assert: sourceCode withSeparatorsCompacted equals: 'instVar: anInteger instVar := anInteger' withSeparatorsCompacted! ! !STCommandLineHandler commentStamp: '' prior: 43654448! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !EvaluateCommandLineHandler commentStamp: '' prior: 43654952! Usage: eval [--help] [--save] [ --no-quit ] --help list this help message --save save the image after evaluation of the expression --no-quit if specified, the image continues runing after evaluating the a valid Smalltalk expression which is evaluated and the result is printed on stdout Documentation: A CommandLineHandler that reads a string from the command line, outputs the evaluated result and quits the image. This handler either evaluates the arguments passed to the image: pharo Pharo.image eval 1 + 2 or it can read directly from stdin: echo "1+2" | $PHARO_VM my.image eval Important: don't manually save the image at the end of the expression by calling something like 'Smalltalk snapshot: true andSave: true'!! Instead, use the safer --save option.! !STCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2012 11:35'! commandName ^ 'st'! ! !STCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 2/6/2013 18:18'! description ^ 'Loads and executes .st source files'! ! !STCommandLineHandler class methodsFor: 'handler selection' stamp: 'CamilloBruni 5/2/2012 11:31'! isResponsibleFor: aCommandLine "This handler is reponsible only for .st files" (aCommandLine hasFileWithExtension: '.st') ifTrue: [ ^ true ]. ^ super isResponsibleFor: aCommandLine! ! !STCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 5/9/2013 19:54'! activate self activateHelp ifTrue: [ ^ self ]. self loadSourceFiles: (self commandLine allFilesWithExtension: 'st'). self installSourceFiles. (self commandLine hasOption: 'quit') ifTrue: [ self exitSuccess ].! ! !STCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 4/28/2012 21:48'! handleError: error "for syntax errors we can used the default action" "otherwise resignal it" (error isKindOf: SyntaxErrorNotification) ifTrue: [ error defaultAction ] ifFalse: [ error pass ]! ! !STCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 11/2/2012 15:25'! handleError: error reference: aReference "Print a header before failing on an errro / syntax notification from the the script loaded by the given request" "spit out a warning if in headless mode, otherwise a debugger will popup" Smalltalk isHeadless ifTrue: [ self inform: 'Errors in script loaded from ', aReference fullName ]. (error isKindOf: SyntaxErrorNotification) "for syntax errors we can used the default action" ifTrue: [ error defaultAction ] "otherwise resignal it" ifFalse: [ error pass ]! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'MarcusDenker 5/21/2013 16:31'! handleErrorsDuring: aBlock reference: aReference | exceptionClassToUse | "workaround to make old Compiler unloadable" exceptionClassToUse := (Smalltalk compilerClass == OpalCompiler) ifTrue: [OCSemanticWarning] ifFalse: [Smalltalk globals at: #ParserNotification]. aBlock on: Error, exceptionClassToUse do: [ :e| self handleError: e reference: aReference ]. ! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 3/23/2013 11:48'! installSourceFile: aReference "Install the the source file given by aFileReference" | codeImporter | " parse the code given in the source file" aReference readStreamDo: [ :stream | self handleErrorsDuring: [ codeImporter := CodeImporter fileStream: stream. codeImporter skipShebang parseDeclarations ] reference: aReference]. "evaluate the declarations in a second step to allow for properly closing the source file stream" self handleErrorsDuring: [ codeImporter evaluate ] reference: aReference.! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'EstebanLorenzano 4/4/2012 10:31'! installSourceFiles "Install the previously loaded source files" sourceFiles ifNil: [ ^self ]. [ sourceFiles do: [ :reference | self installSourceFile: reference ] ] ensure: [ sourceFiles := nil ]. ! ! !STCommandLineHandler methodsFor: 'loading' stamp: 'CamilloBruni 5/1/2012 20:51'! loadSourceFiles: anArray "Load all the source files in the given array." sourceFiles := anArray collect: [ :each | (FileSystem disk resolve: each) asFileReference ]. ! ! !STCommandLineHandlerTest methodsFor: 'coverage' stamp: 'CamilloBruni 7/3/2013 15:46'! classToBeTested ^ STCommandLineHandler! ! !STCommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45'! testCommandLineHandlerCondition | commandLine reference | commandLine := CommandLineArguments withArguments: {'/non/existing/file.st'}. "the reponsibility is transfered tot the BasicCodeLoader as soon as there is a .st file in the arguments" self assert: (STCommandLineHandler isResponsibleFor: commandLine). [ reference := FileSystem disk workingDirectory / 'codeLoad1.st'. reference writeStreamDo: [ :stream | stream nextPutAll: '42' ]. commandLine := CommandLineArguments withArguments: {reference fullName}. self assert: (STCommandLineHandler isResponsibleFor: commandLine) ] ensure: [ reference delete ] ! ! !STCommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45'! testInstallSourceFilesFail | codeLoader | codeLoader := STCommandLineHandler new. codeLoader loadSourceFiles: {'codeLoad1.st'}. "Ensure file is not there" (FileSystem disk workingDirectory / 'codeLoad1.st') asFileReference ensureDelete. "Trying non existing file" self should: [ codeLoader installSourceFiles ] raise: Error.! ! !STCommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 7/3/2013 15:45'! testLoadSourceFiles | codeLoader | codeLoader := STCommandLineHandler new. codeLoader loadSourceFiles: { '/not/existing/codeLoad1.st'. '/not/existing/codeLoad2.st'}. self assert: (codeLoader instVarNamed: 'sourceFiles') notNil. self assert: (codeLoader instVarNamed: 'sourceFiles') size = 2. self assert: ((codeLoader instVarNamed: 'sourceFiles') allSatisfy: [ :each | each isKindOf: FileReference ]).! ! BasicCodeLoaderTest removeSelector: #testLoadSourceFiles! BasicCodeLoaderTest removeSelector: #testInstallSourceFilesFail! BasicCodeLoaderTest removeSelector: #testCommandLineHandlerCondition! Smalltalk globals removeClassNamed: #BasicCodeLoaderTest! BasicCodeLoader removeSelector: #loadSourceFiles:! BasicCodeLoader removeSelector: #installSourceFiles! BasicCodeLoader removeSelector: #installSourceFile:! BasicCodeLoader removeSelector: #handleErrorsDuring:reference:! BasicCodeLoader removeSelector: #handleError:reference:! BasicCodeLoader removeSelector: #handleError:! BasicCodeLoader removeSelector: #activate! BasicCodeLoader class removeSelector: #isResponsibleFor:! BasicCodeLoader class removeSelector: #description! BasicCodeLoader class removeSelector: #commandName! Smalltalk globals removeClassNamed: #BasicCodeLoader! "System-CommandLine"! "Tests"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(3 July 2013 5:22:21 pm) Pharo.image priorSource: 10089122! ----STARTUP----an Array(3 July 2013 5:31:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 July 2013 5:31:12 pm) Pharo-30250.image priorSource: 10112333! ----STARTUP----an Array(4 July 2013 10:43:11 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/4/2013 10:39' prior: 43643851! commentForCurrentUpdate ^ '2302 sorted and sorted: should be moved to TSortable https://pharo.fogbugz.com/f/cases/2302'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/4/2013 10:39'! script350 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-IgorStasenko.9.mcz Athens-Cairo-EstebanLorenzano.41.mcz Athens-CairoPools-IgorStasenko.5.mcz Athens-Core-EstebanLorenzano.32.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-IgorStasenko.16.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.213.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.138.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SlotTests-MarcusDenker.37.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1166.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/4/2013 10:40'! update30251 "self new update30251" self withUpdateLog: '2302 sorted and sorted: should be moved to TSortable https://pharo.fogbugz.com/f/cases/2302'. self loadTogether: self script350 merge: false. {LinkedList . ArrayedCollection . OrderedCollection } do: [ :class | [ class setTraitComposition: #() asTraitComposition ] on: Exception do: [ :ex | ]. TSortable removeUser: class ]. . self flushCaches. ! ! "ScriptLoader30"! !TSortable methodsFor: 'sorting' stamp: 'LucFabresse 6/28/2013 10:36'! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !TSortable methodsFor: 'sorting' stamp: 'LucFabresse 6/28/2013 10:36'! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! !Collection methodsFor: 'sorting' stamp: 'LucFabresse 6/28/2013 12:58' prior: 19536069! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted" ^self asArray sorted! ! !Collection methodsFor: 'sorting' stamp: 'StephaneDucasse 3/28/2010 22:42' prior: 19536350! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self asArray sort: aSortBlockOrNil! ! !Trait method! mergeSortFrom: startIndex to: stopIndex by: aBlock "Sort the given range of indices using the mergesort algorithm. Mergesort is a worst-case O(N log N) sorting algorithm that usually does only half as many comparisons as heapsort or quicksort." "Details: recursively split the range to be sorted into two halves, mergesort each half, then merge the two halves together. An extra copy of the data is used as temporary storage and successive merge phases copy data back and forth between the receiver and this copy. The recursion is set up so that the final merge is performed into the receiver, resulting in the receiver being completely sorted." self size <= 1 ifTrue: [^ self]. "nothing to do" startIndex = stopIndex ifTrue: [^ self]. [startIndex >= 1 and: [startIndex < stopIndex]] assert. "bad start index" [stopIndex <= self size] assert. "bad stop index" self mergeSortFrom: startIndex to: stopIndex src: self copy dst: self by: aBlock! ! SequenceableCollection removeSelector: #mergeSortFrom:to:by:! !Trait method! mergeSortFrom: startIndex to: stopIndex by: aBlock "Sort the given range of indices using the mergesort algorithm. Mergesort is a worst-case O(N log N) sorting algorithm that usually does only half as many comparisons as heapsort or quicksort." "Details: recursively split the range to be sorted into two halves, mergesort each half, then merge the two halves together. An extra copy of the data is used as temporary storage and successive merge phases copy data back and forth between the receiver and this copy. The recursion is set up so that the final merge is performed into the receiver, resulting in the receiver being completely sorted." self size <= 1 ifTrue: [^ self]. "nothing to do" startIndex = stopIndex ifTrue: [^ self]. [startIndex >= 1 and: [startIndex < stopIndex]] assert. "bad start index" [stopIndex <= self size] assert. "bad stop index" self mergeSortFrom: startIndex to: stopIndex src: self copy dst: self by: aBlock! ! ArrayedCollection removeSelector: #mergeSortFrom:to:by:! !Trait method! mergeFirst: first middle: middle last: last into: dst by: aBlock "Private. Merge the sorted ranges [first..middle] and [middle+1..last] of the receiver into the range [first..last] of dst." | i1 i2 val1 val2 out | i1 := first. i2 := middle + 1. val1 := self at: i1. val2 := self at: i2. out := first - 1. "will be pre-incremented" "select 'lower' half of the elements based on comparator" [(i1 <= middle) and: [i2 <= last]] whileTrue: [(aBlock value: val1 value: val2) ifTrue: [dst at: (out := out + 1) put: val1. val1 := self at: (i1 := i1 + 1)] ifFalse: [dst at: (out := out + 1) put: val2. i2 := i2 + 1. i2 <= last ifTrue: [val2 := self at: i2]]]. "copy the remaining elements" i1 <= middle ifTrue: [dst replaceFrom: out + 1 to: last with: self startingAt: i1] ifFalse: [dst replaceFrom: out + 1 to: last with: self startingAt: i2]! ! ArrayedCollection removeSelector: #mergeFirst:middle:last:into:by:! OrderedCollection removeSelector: #sorted:! !Trait method! sort "Sort this collection into ascending order using the '<=' operator." self sort: [:a :b | a <= b]! ! OrderedCollection removeSelector: #sort! !Trait method! mergeSortFrom: startIndex to: stopIndex by: aBlock "Sort the given range of indices using the mergesort algorithm. Mergesort is a worst-case O(N log N) sorting algorithm that usually does only half as many comparisons as heapsort or quicksort." "Details: recursively split the range to be sorted into two halves, mergesort each half, then merge the two halves together. An extra copy of the data is used as temporary storage and successive merge phases copy data back and forth between the receiver and this copy. The recursion is set up so that the final merge is performed into the receiver, resulting in the receiver being completely sorted." self size <= 1 ifTrue: [^ self]. "nothing to do" startIndex = stopIndex ifTrue: [^ self]. [startIndex >= 1 and: [startIndex < stopIndex]] assert. "bad start index" [stopIndex <= self size] assert. "bad stop index" self mergeSortFrom: startIndex to: stopIndex src: self copy dst: self by: aBlock! ! OrderedCollection removeSelector: #mergeSortFrom:to:by:! Array removeSelector: #sorted:! !Trait method! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !Trait method! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !Trait method! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !Trait method! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !Trait method! sorted "Return a new sequenceable collection which contains the same elements as self but its elements are sorted in ascending order using the #'<=' operator." ^self sorted: [ :a :b| a <= b ]! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self sort: aSortBlockOrNil! ! "Collections-Abstract"! "Collections-Sequenceable"! "Collections-Traits"! ArrayedCollection removeSelector: #sorted:! ----End fileIn----! ----QUIT----an Array(4 July 2013 10:43:20 am) Pharo.image priorSource: 10112530! ----STARTUP----an Array(4 July 2013 10:52:35 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 10:52:35 am) Pharo-30251.image priorSource: 10132079! ----STARTUP----an Array(4 July 2013 12:47:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Collections-Abstract"! "Collections-Sequenceable"! ----End fileIn----! ----QUIT----an Array(4 July 2013 12:47:15 pm) Pharo.image priorSource: 10132278! ----STARTUP----an Array(4 July 2013 12:56:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 12:56:26 pm) Pharo-30252.image priorSource: 10132562! ----STARTUP----an Array(4 July 2013 1:42:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/4/2013 13:40' prior: 43667260! commentForCurrentUpdate ^ '10936 Athens update (was: As yet unclassified) https://pharo.fogbugz.com/f/cases/10936 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/4/2013 13:40'! script351 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.44.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.33.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.139.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SlotTests-MarcusDenker.37.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1166.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/4/2013 13:36'! update30252! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/4/2013 13:40'! update30253 "self new update30253" self withUpdateLog: '10936 Athens update (was: As yet unclassified) https://pharo.fogbugz.com/f/cases/10936 '. self loadTogether: self script351 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TCairoLibrary commentStamp: '' prior: 0! a simple trait used for NB callouts to cairo library functions! !AthensBalloonStrokePaint commentStamp: '' prior: 0! i represent stroke paint for balloon backend! !FT2GlyphRenderer commentStamp: '' prior: 0! i am used to render freetype glyphs using balloon primitives.! !AthensTextMorph commentStamp: '' prior: 0! this class is subject of changes/removal. do not use it.! !AthensBalloonImagePaint commentStamp: '' prior: 0! i representing an image (form) paint ! !AthensBalloonPaint commentStamp: '' prior: 0! i am an abstract root of many balloon-specific paints! !AthensBalloonGradientPaint commentStamp: '' prior: 0! my subclasses used internally in balloon backend for Athens to represenet gradient paints.! !AthensBalloonLinearGradient commentStamp: '' prior: 0! i represent a linear gradient paint in balloon backend.! !AthensBalloonRadialGradient commentStamp: '' prior: 42111235! i represent a radial gradient paint in balloon backend.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoSolidPaint commentStamp: '' prior: 0! i represent solid color paint in cairo backend! !AthensCompositePaint commentStamp: '' prior: 0! i am used to convert CompositeFillStyle into paint, used in Morphic.! !AthensMorphicGradientPaint commentStamp: '' prior: 0! i am used to convert gradient fill style(s) used in Morphic to appropriate paint(s) in Athens.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoTransform commentStamp: '' prior: 0! i implement AthensTransform protocol using cairo-specific functions.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPathBuilder commentStamp: '' prior: 0! i implement cairo-specific path builder. see my superclass for more details.! !AthensSimplePathBuilder commentStamp: '' prior: 0! i building path containing from AthensPathSegment. the resulting path is backend neutral (while different backend may implement own builder which is more efficient)! !AthensCairoDefs commentStamp: '' prior: 0! i hold a lot of different constants needed to work with cairo library! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoStrokePaint commentStamp: '' prior: 0! i represent stroke paint in cairo backend! !AthensPluggableTextMorph commentStamp: '' prior: 0! this class is subject of changes/removal. do not use it.! !AthensBalloonPath commentStamp: '' prior: 0! i represent a path shape in balloon backend! !AthensBezier3Scene commentStamp: '' prior: 0! I just a helper class used to debug & visualize rendering of bezier segment. This class is subject of changes or complete removal! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoText commentStamp: '' prior: 0! do not use this class. this is subject of change or removal! !AthensCubicBezier commentStamp: '' prior: 0! Cubic bezier with 4 control points encapsulation. Main purpose of this class is to keep subdivision logic in clean and separate place! !AthensParagraph commentStamp: '' prior: 0! this class is subject of changes/removal. do not use it.! !AthensPathSegmentConverter commentStamp: '' prior: 0! this class is subject of changes/removal. do not use it.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFreetypeFontRenderer commentStamp: '' prior: 0! i am used to render freetype font(s) with cairo library.! !CairoLibraryLoader commentStamp: '' prior: 0! i am a service class, which responsible to finding and loading cairo dynamic library! !CairoUTF8Converter commentStamp: '' prior: 0! i use persistent buffer to convert strings to utf-8 strings (an input neede by cairo)! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPath commentStamp: '' prior: 0! i used to hold shapes built by path builder in cairo backend! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPatternPaint commentStamp: '' prior: 0! i am abstract class for different kinds of paints in cairo backend.! !AthensCairoGradientPaint commentStamp: '' prior: 0! i used to represent gradient paints (both radial and linear) in cairo backend! !AthensCairoPatternSurfacePaint commentStamp: '' prior: 0! i represent texture/image/form/surface paints in cairo backend.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontOptions commentStamp: '' prior: 0! i represent various font options exposed by cairo library! !TCairoLibrary commentStamp: '' prior: 43697931! a simple trait used for NB callouts to cairo library functions! !AthensBalloonSurface methodsFor: 'accessing' stamp: 'IgorStasenko 11/21/2011 16:33' prior: 40349085! clipRect ^ engine clipRect! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 4/12/2013 10:00' prior: 40349867! createLinearGradient: colorRamp start: pt1 stop: pt2 ^ AthensBalloonLinearGradient new colorRamp: colorRamp; start: pt1; stop: pt2; yourself! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 9/14/2011 15:08' prior: 40351705! fillBezierShape: anArray color: aColor width: aSmallInteger self shouldBeImplemented.! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 9/14/2011 15:12' prior: 40354109! strokeBezierShape: contours color: aColor width: aWidth engine prepareForRendering; registerColorFill: aColor ; strokeBezierShape: contours width: aWidth! ! !AthensBalloonSurface methodsFor: 'drawing' stamp: 'IgorStasenko 9/14/2011 15:24' prior: 40354371! strokeRectangle: rect color: aColor width: aWidth engine prepareForRendering; registerColorFill: aColor ; strokeRectangle: rect width: aWidth! ! !AthensCairoSurface methodsFor: 'paints' stamp: 'BenjaminVanRyseghem 7/3/2013 13:29' prior: 40458291! createFormPaint: aForm "here we should convert form to cairo surface" | newSurface | newSurface := self class fromForm: (aForm asFormOfDepth: 32). ^ newSurface asAthensPaintOn: context ! ! !AthensBalloonStrokePaint commentStamp: '' prior: 43698060! i represent stroke paint for balloon backend! !FT2GlyphRenderer commentStamp: '' prior: 43698163! i am used to render freetype glyphs using balloon primitives.! !FT2GlyphRenderer methodsFor: 'private' stamp: 'IgorStasenko 10/19/2011 15:31' prior: 40369709! clearBitmap form bits atAllPut: 0. ! ! !FT2GlyphRenderer methodsFor: 'accessing' stamp: 'IgorStasenko 10/19/2011 15:37' prior: 40369843! form ^ form! ! !FT2GlyphRenderer methodsFor: 'accessing' stamp: 'IgorStasenko 10/25/2011 18:29' prior: 40369951! getAdvance "aPoint is a text origin in user's coordinate system, and anvance is accumulated advance came from another renderer instance, expressed in surface's coordinate system" | pt | pt := (penX/64.0) @ (penY/64.0) - origin. ^ pt! ! !FT2GlyphRenderer methodsFor: 'initailize-release' stamp: 'IgorStasenko 11/21/2011 16:32' prior: 40370286! initForFont: aFont surface: aSurface self assert: (aFont class == FreeTypeFont). surface := aSurface. font := aFont. slot := SimpleTextGlyphInfo new. pixelSize := font pixelSize rounded. blt := BitBlt toForm: surface form. self loadSurfaceTransform. colorMap := Bitmap new: 256. blt sourceForm: form; sourceX: 0; sourceY: 0; destOrigin: 0@0; sourceOrigin: 0@0; halftoneForm: nil; combinationRule: 24; width: form width; height: form height; colorMap: colorMap; clipRect: surface clipRect. translation := IntegerArray new: 2. ! ! !FT2GlyphRenderer methodsFor: 'private' stamp: 'IgorStasenko 7/12/2011 20:11' prior: 40370951! loadSlotInfo slot loadFrom: font face.! ! !FT2GlyphRenderer methodsFor: 'private' stamp: 'IgorStasenko 11/7/2011 14:25' prior: 40371085! loadSurfaceTransform | m mt org xaxis yaxis sum xmin xmax ymin ymax formW formH fix face bbox | face := font face. face setPixelWidth: pixelSize height: pixelSize. bbox := face bbox. m := surface pathTransform copy transposed. org := m transform: 0@0. xaxis := (m transform: bbox right - bbox left * pixelSize / face unitsPerEm @ 0) - org. yaxis := (m transform: 0 @ (bbox bottom - bbox top * pixelSize / face unitsPerEm)) - org. sum := xaxis + yaxis. xmin := 0 min: ((xaxis x min: yaxis x) min: sum x). ymin := 0 min: ((xaxis y min: yaxis y) min: sum y). xmax := 0 max: ((xaxis x max: yaxis x) max: sum x). ymax := 0 max: ((xaxis y max: yaxis y) max: sum y). formW := (xmax - xmin) ceiling + 1. formH := (ymax - ymin) ceiling + 1. " freetype 'zero' points to bottom-left point on form" "calculate bitmap translation relative to top-left corner of glyph" bitmapX := (yaxis x negated + xmin * 64.0) rounded. bitmapY := (xaxis y negated + ymin * 64.0) rounded. descend := 0 @ ((face bbox height - face bbox bottom * pixelSize / face unitsPerEm) +1). descend := (m transform: descend) - org. descend := descend + (xmin negated@(ymin negated)). descend := (descend * 64 ) rounded. form := Form extent: formW @ formH depth: 8. blt sourceForm: form; width: form width; height: form height. "prepare transformation matrix for freetype" matrix := IntegerArray new: 4. "values in matrix are 16.16 fixed point floating values" fix := 65536. "(2 raisedTo: 16)." matrix at: 1 put: (m sx * fix) rounded; at: 2 put: (m shx * fix) rounded; at: 3 put: (m shy * fix) rounded; at: 4 put: (m sy * fix) rounded. ! ! !FT2GlyphRenderer methodsFor: 'private' stamp: 'IgorStasenko 10/25/2011 18:40' prior: 40372848! loadUnicode: unicode | ext hintingFlags flags arr face | face := font face. " hintingFlags := FreeTypeSettings current hintingFlags." flags := LoadNoBitmap bitOr: 2 "hintingFlags". " bitOr:( LoadIgnoreTransform bitOr: 2 ). " face primLoadCharacter: unicode flags: flags. self loadSlotInfo. ! ! !FT2GlyphRenderer methodsFor: 'rendering' stamp: 'IgorStasenko 11/7/2011 13:45' prior: 40373245! renderGlyphsIn: text from: start to: stop | face | face := font face. " face setPixelWidth: pixelSize height: pixelSize. " start to: stop do: [:i | | bx by | bx := penX + bitmapX. by := penY + bitmapY. "add a small shift, to incorporate subpixel position" translation at: 1 put: descend x + (bx bitAnd: 2r111111). translation at: 2 put: descend y - (by bitAnd: 2r111111). face primSetTransform: matrix delta: translation. self loadUnicode: (text at: i) asUnicode. self clearBitmap. face renderGlyphIntoForm: form. blt destX: bx >> 6; destY: by >> 6; copyBits. "increment x by horizontal advance" penX := penX + slot advanceX. penY := penY - slot advanceY. ]. ! ! !FT2GlyphRenderer methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 13:59' prior: 40374055! setColor: color "Set the color which will be used to render glyphs." | clr rgb alpha | currentColor = color ifTrue: [ ^ self ]. currentColor := color. clr := color pixelValue32. rgb := clr bitAnd: 16rFFFFFF. alpha := clr >> 24. 0 to: 255 do:[:i | | a | a := (i+1) * alpha bitAnd: 16rFF00. colorMap at: i+1 put: ( (a<<16) + rgb ). ]. " colorMap at: 1 put: (Color red alpha: 0.1) pixelValue32." ! ! !FT2GlyphRenderer methodsFor: 'private' stamp: 'IgorStasenko 11/7/2011 13:45' prior: 40374564! setPosition: aPoint advance: advancePt baseline: baselineOffset "aPoint is a text origin in user's coordinate system, and andvance is accumulated advance came from another renderer instance, expressed in surface's coordinate system" | pt offset | offset := baselineOffset - font getPreciseAscent "(font face ascender * pixelSize / font face unitsPerEm)". pt := aPoint + (0@offset). pt := surface pathTransform transform: pt. origin := pt. pt := pt + advancePt. "remember the origin, so on #getAdvance , we will answer the current advance for renderer in surface coordinate system" " 2 raisedTo: 6 " penX := (pt x * 64) rounded. penY := (pt y * 64) rounded. ! ! !AthensTextMorph commentStamp: '' prior: 43698282! this class is subject of changes/removal. do not use it.! !AthensCanvas methodsFor: 'drawing' stamp: 'IgorStasenko 7/3/2013 16:28' prior: 40243015! draw "Fill the currently selected shape with currently selected paint" ^ shape paintFillsUsing: paint on: self ! ! !AthensBalloonImagePaint commentStamp: '' prior: 43698404! i representing an image (form) paint ! !AthensBalloonPaint commentStamp: '' prior: 43698503! i am an abstract root of many balloon-specific paints! !AthensBalloonGradientPaint commentStamp: '' prior: 43698625! my subclasses used internally in balloon backend for Athens to represenet gradient paints.! !AthensBalloonLinearGradient commentStamp: '' prior: 43698785! i represent a linear gradient paint in balloon backend.! !AthensBalloonRadialGradient commentStamp: '' prior: 43698917! i represent a radial gradient paint in balloon backend.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoSolidPaint commentStamp: '' prior: 43699115! i represent solid color paint in cairo backend! !AthensCompositePaint commentStamp: '' prior: 43699224! i am used to convert CompositeFillStyle into paint, used in Morphic.! !AthensMorphicGradientPaint commentStamp: '' prior: 43699361! i am used to convert gradient fill style(s) used in Morphic to appropriate paint(s) in Athens.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoTransform commentStamp: '' prior: 43699597! i implement AthensTransform protocol using cairo-specific functions.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPathBuilder commentStamp: '' prior: 43699809! i implement cairo-specific path builder. see my superclass for more details.! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 6/3/2013 17:09' prior: 40500651! arcTo: newEndPoint angle: angle cw: aBool " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " | start end center v radius startAngle endAngle cwAngle | angle isZero ifTrue: [ ^ self lineTo: newEndPoint ]. start := endPoint. endPoint := end := self toAbsolute: newEndPoint. "we have to transform the input. because Cario expects the center , radius, starting and ending angle, and we have the starting point, the ending point , and the angle. " aBool ifTrue: [cwAngle := angle] ifFalse: [cwAngle := angle negated]. center := self calcCenter: start end: end angle: cwAngle. v := (start - center). radius := v r. startAngle := self angleOfVector: v. endAngle := self angleOfVector: (end-center). aBool ifTrue: [ self arcCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ifFalse: [ self arcNegativeCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ! ! !AthensSimplePathBuilder commentStamp: '' prior: 43699951! i building path containing from AthensPathSegment. the resulting path is backend neutral (while different backend may implement own builder which is more efficient)! !AthensCairoDefs commentStamp: '' prior: 43700174! i hold a lot of different constants needed to work with cairo library! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoStrokePaint commentStamp: '' prior: 43700387! i represent stroke paint in cairo backend! !AthensCairoPDFSurface methodsFor: 'private' stamp: 'IgorStasenko 5/4/2012 18:22' prior: 40440844! newCanvas ^ self primCreateCanvas surface: self! ! !AthensCairoPDFSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 5/4/2012 18:15' prior: 40440992! resourceData ^ handle value ! ! !AthensCairoPDFSurface methodsFor: 'private' stamp: 'IgorStasenko 5/4/2012 18:29' prior: 40441120! showPage ^self nbCall: #( void cairo_surface_show_page (self) )! ! !ImageMorph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 7/3/2013 15:51' prior: 40404763! drawOnAthensCanvas: aCanvas | cached | cached := aCanvas cacheAt: image ifAbsentPut: [ image asAthensPaintOn: aCanvas. ]. aCanvas setPaint: cached. aCanvas paintTransform restoreAfter: [ aCanvas paintTransform translateBy: self innerBounds origin "negated". aCanvas drawShape: self innerBounds. ]. ! ! !AthensPluggableTextMorph commentStamp: '' prior: 43700495! this class is subject of changes/removal. do not use it.! !AthensBalloonEngine methodsFor: 'private' stamp: 'IgorStasenko 9/19/2011 16:37' prior: 40364030! fastReset workBuffer ifNil: [ ^ self reset ]. workBuffer at: (1+GWState) put: GEStateUnlocked; at: (1+GWObjUsed) put: 4; at: (1+GWNeedsFlush) put: 0; at: (1+GWCurrentZ) put: 0; at: (1+GWGETStart) put: 0"; at: (1+GWGETUsed) put: 0; at: (1+GWAETStart) put: 0; at: (1+GWAETUsed) put: 0". self primSetEdgeTransform: edgeTransform. self primSetClipRect: clipRect. self primSetColorTransform: colorTransform. self primSetDepth: self primGetDepth + 1. postFlushNeeded := false. forms := #(). " - self magicNumberPut: GWMagicNumber. - self wbSizePut: size. + self wbTopPut: size. + self statePut: GEStateUnlocked. - self objStartPut: GWHeaderSize. + self objUsedPut: 4. - self objectTypeOf: 0 put: GEPrimitiveFill. - self objectLengthOf: 0 put: 4. - self objectIndexOf: 0 put: 0. self getStartPut: 0. self getUsedPut: 0. self aetStartPut: 0. self aetUsedPut: 0. self stopReasonPut: 0. + self needsFlushPut: 0. - self clipMinXPut: 0. - self clipMaxXPut: 0. - self clipMinYPut: 0. - self clipMaxYPut: 0. + self currentZPut: 0. self resetGraphicsEngineStats. self initEdgeTransform. self initColorTransform. "! ! !AthensBalloonEngine methodsFor: 'private' stamp: 'IgorStasenko 4/13/2011 12:15' prior: 40365979! prepareForRendering self fastReset! ! !AthensBalloonEngine methodsFor: 'initialize' stamp: 'IgorStasenko 4/22/2011 14:00' prior: 40367900! reset workBuffer ifNil:[workBuffer := self class allocateOrRecycleBuffer: 10000]. self primInitializeBuffer: workBuffer. self primSetAALevel: 4. self primSetOffset: 0@0. self primSetClipRect: clipRect. self primSetEdgeTransform: edgeTransform. self primSetColorTransform: colorTransform. forms := #().! ! !AthensBalloonEngine methodsFor: 'accessing' stamp: 'IgorStasenko 4/1/2011 09:03' prior: 40368306! setFill: aFill currentFill := aFill! ! !AthensBalloonEngine methodsFor: 'private' stamp: 'IgorStasenko 9/14/2011 15:12' prior: 40368440! strokeBezierShape: contours width: aWidth contours do:[ :points | self primAddBezierShape: points segments: (points size // 3) fill: 0 lineWidth: aWidth lineFill: currentFill. "Note: To avoid premature flushing of the pipeline we need to reset the flush bit within the engine." self primFlushNeeded: false. ]. self copyBits. ! ! !AthensCairoPaintMode methodsFor: 'capabilities' stamp: 'IgorStasenko 9/1/2012 17:18' prior: 40433695! availableModes ^ #( clear source over in out atop dest destOver destIn destOut destAtop xor add saturate multiply screen overlay darken lighten colorDodge colorBurn hardLight softLight difference exclusion hslHue hslSaturation hslColor hslLuminosity )! ! !GradientPaint methodsFor: 'testing' stamp: 'FernandoOlivero 1/13/2012 21:36'! is: aSymbol ^ aSymbol = #pattern or:[ super is: aSymbol] ! ! !AthensBalloonPath commentStamp: '' prior: 43700611! i represent a path shape in balloon backend! !AthensBalloonPath methodsFor: 'accessing' stamp: 'IgorStasenko 3/27/2011 00:23' prior: 40345181! contours ^ contours! ! !AthensBalloonPath methodsFor: 'private' stamp: 'IgorStasenko 3/27/2011 17:40' prior: 40346372! duplicateLastPoint contours last size < 2 ifFalse: [ "duplicate last contour point" contours last add: (contours last last). ]. ! ! !AthensBalloonPath methodsFor: 'drawing' stamp: 'IgorStasenko 3/27/2011 00:15' prior: 40346719! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint fillPath: self on: anAthensCanvas! ! !AthensBalloonPath methodsFor: 'drawing' stamp: 'IgorStasenko 9/13/2011 16:21' prior: 40346978! paintStrokeUsing: paint on: anAthensCanvas ^ paint strokePath: self on: anAthensCanvas ! ! !AthensBezier3Scene commentStamp: '' prior: 43700715! I just a helper class used to debug & visualize rendering of bezier segment. This class is subject of changes or complete removal! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoText commentStamp: '' prior: 43700981! do not use this class. this is subject of change or removal! !AthensCubicBezier commentStamp: '' prior: 43701100! Cubic bezier with 4 control points encapsulation. Main purpose of this class is to keep subdivision logic in clean and separate place! !AthensParagraph commentStamp: '' prior: 43701292! this class is subject of changes/removal. do not use it.! !AthensPathSegmentConverter commentStamp: '' prior: 43701417! this class is subject of changes/removal. do not use it.! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFreetypeFontRenderer commentStamp: '' prior: 43701620! i am used to render freetype font(s) with cairo library.! !CairoLibraryLoader commentStamp: '' prior: 43701737! i am a service class, which responsible to finding and loading cairo dynamic library! !CairoUTF8Converter commentStamp: '' prior: 43701882! i use persistent buffer to convert strings to utf-8 strings (an input neede by cairo)! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPath commentStamp: '' prior: 43702104! i used to hold shapes built by path builder in cairo backend! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPatternPaint commentStamp: '' prior: 43702309! i am abstract class for different kinds of paints in cairo backend.! !AthensCairoGradientPaint commentStamp: '' prior: 43702443! i used to represent gradient paints (both radial and linear) in cairo backend! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 7/3/2013 13:47' prior: 40473222! fillPath: path on: anAthensCanvas anAthensCanvas newPath; loadPath: path. self setMatrix: anAthensCanvas paintTransform inverted. self loadOn: anAthensCanvas. self fillOn: anAthensCanvas! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 7/3/2013 15:38' prior: 40473512! fillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " anAthensCanvas rectangleX: aRect left y: aRect top width: aRect width height: aRect height. self setMatrix: anAthensCanvas paintTransform inverted. self loadOn: anAthensCanvas . self fillOn: anAthensCanvas. ! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 7/3/2013 14:35' prior: 40474668! loadOn: anAthensCanvas " Note: The pattern's transformation matrix will be locked to the user space in effect at the time of cairo_set_source(). This means that further modifications of the current transformation matrix will not affect the source pattern. See cairo_pattern_set_matrix(). " self isSuccess ifTrue:[ self primSetSourceOn: anAthensCanvas.] ifFalse:[ anAthensCanvas setSourceR: 1.0 g: 0.0 b: 0.0 a: 1.0]. ! ! !AthensCairoPatternSurfacePaint commentStamp: '' prior: 43702594! i represent texture/image/form/surface paints in cairo backend.! !AthensCairoPatternSurfacePaint methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/3/2013 16:17' prior: 40478953! setMatrix: aMatrix aMatrix restoreAfter: [ origin ifNotNil: [ aMatrix translateBy: origin negated ]. super setMatrix: aMatrix. ]! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontOptions commentStamp: '' prior: 43702795! i represent various font options exposed by cairo library! !SQSurfaceDispatch methodsFor: 'initialize-release' stamp: 'IgorStasenko 12/30/2011 12:35' prior: 40524094! initialize self majorVersion: 1; minorVersion: 0! ! !CairoBackendCache methodsFor: 'accessing' stamp: 'IgorStasenko 9/2/2012 19:15' prior: 40535302! at: anObject ^ cache at: anObject ifAbsent: nil! ! !CairoBackendCache methodsFor: 'accessing' stamp: 'IgorStasenko 9/2/2012 00:31' prior: 40535448! at: anObject ifAbsentPut: aBlock ^ cache at: anObject ifAbsentPut: aBlock! ! !CairoBackendCache methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/3/2013 13:26'! flush cache := WeakIdentityKeyDictionary new! ! !CairoBackendCache methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/3/2013 13:25' prior: 40535619! for: anObject at: key ifAbsentPut: aBlock | subCache | subCache := cache at: anObject ifAbsentPut: [ WeakIdentityKeyDictionary new ]. ^ subCache at: key ifAbsentPut: aBlock! ! !CairoBackendCache methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 7/3/2013 13:26' prior: 40535897! initialize self flush! ! !CairoBackendCache methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/2/2012 01:54' prior: 40536043! nbSessionChanged self initialize. ! ! !CairoBackendCache methodsFor: 'removing' stamp: 'IgorStasenko 10/12/2012 03:54' prior: 40536177! removeAt: anObject ^ cache removeKey: anObject ifAbsent: nil! ! AthensCairoPatternColorPaint removeSelector: #initializeColor:! AthensCairoPatternColorPaint class removeSelector: #primCreateForR:G:B:A:! AthensCairoPatternColorPaint class removeSelector: #createForColor:! Smalltalk globals removeClassNamed: #AthensCairoPatternColorPaint! AthensBalloonMaskPaint removeSelector: #fillRectangle:on:! Smalltalk globals removeClassNamed: #AthensBalloonMaskPaint! Smalltalk globals removeClassNamed: #AthensVisualInfo! AthensGeometricalHierarchy removeSelector: #withMorph:do:! AthensGeometricalHierarchy removeSelector: #registerShape:canvas:! AthensGeometricalHierarchy removeSelector: #push:! AthensGeometricalHierarchy removeSelector: #pop! AthensGeometricalHierarchy removeSelector: #newStory! AthensGeometricalHierarchy removeSelector: #initialize! Smalltalk globals removeClassNamed: #AthensGeometricalHierarchy! AthensBasicScene removeSelector: #renderOn:! Smalltalk globals removeClassNamed: #AthensBasicScene! "Athens-Balloon"! "Athens-Cairo"! "Athens-Core"! "Athens-Morphic"! ----End fileIn----! ----QUIT----an Array(4 July 2013 1:42:21 pm) Pharo.image priorSource: 10132761! ----STARTUP----an Array(4 July 2013 1:51:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 1:51:15 pm) Pharo-30253.image priorSource: 10170806! ----STARTUP----an Array(4 July 2013 2:11:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/4/2013 14:02' prior: 43687491! commentForCurrentUpdate ^ '7492 Convert MetacelloConfigurationBrowser to Spec https://pharo.fogbugz.com/f/cases/7492 11056 Traits in _UnpackagedPackage https://pharo.fogbugz.com/f/cases/11056'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/4/2013 14:02'! script352 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.44.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.33.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.139.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.97.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.335.mcz SlotTests-MarcusDenker.37.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1168.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/4/2013 14:02'! update30254 "self new update30254" self withUpdateLog: '7492 Convert MetacelloConfigurationBrowser to Spec https://pharo.fogbugz.com/f/cases/7492 11056 Traits in _UnpackagedPackage https://pharo.fogbugz.com/f/cases/11056'. self loadTogether: self script352 merge: false. RPackageOrganizer initialize. . self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 42422613! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !ThemeIcons methodsFor: '*Tools-ConfigurationBrowser' stamp: 'tbn 6/19/2013 22:30'! configIcon ^ icons at: #'configIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self configIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Tools-ConfigurationBrowser' stamp: 'tbn 6/19/2013 22:30'! configIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALnSURBVDjLfZNLaFx1HIW/e2fu zJ00w0ymkpQpiUKfMT7SblzU4kayELEptRChUEFEqKALUaRUV2YhlCLYjYq4FBeuiqZgC6FI QzBpEGpDkzHNs5PMTJtmHnfu6//7uSh2IYNnffg23zmWqtIpd395YwiRL1Q0qyIfD56cmOvU s/4LWJg40auiH6jI+7v3ncybdo2Hy9ebKvqNGrn03Nj1+x0Bi1dHHVV9W0U+ye4d2d83+Ca2 GJrlGZx0gkppkkfrsysqclFFvh8++3v7CWDh6ugIohfSPcPH+w6fwu05ABoSby9yb3Kc/meP YXc9TdCqslWapVGdn1Zjxo++O33Fujtx4gdEzj61f8xyC8/jN2rsVOcxYZOoVSZtBewZOAT+ NonuAWw3S728wFZpFm975cekGjlz8NXLVtSo0SxPImGdtFfFq5epr21wdOxrnMwuaC2jrRJW fYHdxRfIFeDWr0unkyrSUqxcyk2TLQzQrt6hqydPvidDBg/8VTAp8DegvYa3OU1z+SbuM6dQ I62kioAAVgondwAnncWvzCDNCk4CLO9vsJVw8xqN+iPiTB5SaTSKURGSaoTHHgxoAMlduL1H iFMZXP8BsvkbO1GD2O3GpLOIF0KsSBijxmCrMY+FqgGJQDzQgGT3XrJ7DuI5EKZd4iDG+CHG 84m8AIki1Ai2imRsx4FEBtQHCUB8MG1wi8QKGhjEC4mbAVHTx8kNYSuoiGurkRtLN76ivb0K 6SIkusCEoBEgaCQYPyT2QhKpAXKHTiMmQ2lmChWZTrw32v9TsLOyVlu8Nhi2G4Vs32HsTC9I A2KPRuU2Erp097+O5RRYvz3H1r3JldivfY7IR0+mfOu7l3pV5EM1cq744mi+OPwaRD71tSk0 Vsp3/uLB6s2minyrIpeOf7a00fFMf1w+MqRGzqvIW/teecdqV5a5P/8ncXv9ZxUdf/lCae5/ 3/hvpi4OjajIp4ikVOTLY+cXr3Tq/QPcssKNXib9yAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Tools-ConfigurationBrowser' stamp: 'tbn 6/19/2013 22:31'! configIconLoaded ^ icons at: #'configIconLoaded' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self configIconLoadedContents readStream) ].! ! !ThemeIcons methodsFor: '*Tools-ConfigurationBrowser' stamp: 'tbn 6/19/2013 22:33'! configIconLoadedContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAM9SURBVDjLdZPrS1NhHMcPREH/ QC96nxURWS+iktC8bEt3skHoi95EbYk5KStqdtPGLKcuczSELnYhK0bzhpfK5nSZed1MPZtz zpq3pnN5tOY2p+fbsxMEUj3wgx9fvr8Pz+X7UACof9VwPb1juC6l2l6T/N5WJdr9P99fgqPx yCYyrLLXpczPMg/xrbcQzOukH0P6xJLBl/Gb/wsYaUpdT4Zlw/Vi55RVi5XgNLilCSy6qhGY rIO79Tw+P4/92v/soNz6JGbjGoCjKVXgaDhi/tpxA4Hvn4m0BHAswr4ejBiOImAvRsitx6JN B2fdSVge7e/su7+X5gFk+LGjgeZ8jkr4vQPwjbVgrIsYP6hhe3MOrreZ8Nvvwm/NQ9D5CMsT esx1q8C8kKBHt+dF5LLCXNCNkLcPvgEtvL0qTJnOwlmbhs57MVieswB+BzD7FtwXHcBcBiYr ER5VoUu7K0yRy2JXg+PAjyEsT9ZgwXoL/v48UgpM1op5DTONgPsBOJsCfmMcZhoOYoG5i87S nSxlqznMri4RwM8RAmEArxEBRg1/VyZm6sUIj2iA0RKE2kWYa9wHj0kET3Mq2P4SfNLsYCnG IGRXeIAdWCTbne8kkHcIO7VYaEtDyCwCa4zB3EchZoxJmG6Ix3StEN+7C9FRtI2lyPv+BpAj gO1CYOoNmqu10JQUoqKiAkUFl2AlRxltFKJIdZHXim/no+aBAibV1gVq8FV8iAt/Iy/nwrK3 BRW66ygrK4PH44HL5UJbWxvuqHOhU8vhGGZ4rb29nfcoTx9YoQYq45pHjZexNGVC67uXuHpF AcvgIArz5aBpMWQyGbRaLXJzc/meFouRf/4ED7l08VyYIsnaQJIlI+FwKi8cw60CFQ8IjldC JEyA0WiExWKB2WyGwWCAICEOLcot7ghAqVQG/kSZJGtTzvHopuwzUi4CuHnjApISEyEQCCCR SPiK9Anxh1bTjh1tjQAyMjLm13yM7WRJUsVjpRp16PWrp6iqqkJ5eTlycnKgUCj4PqLp9Xqf RqOZp2navgYQFRW1LjY2Njo5OfmLTHoqkC3PXM2Wn+GuZQhK09PTE7KyshZJBaRS6c+IJ+L9 BchY24ysm0a5AAAAAElFTkSuQmCC' ! ! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 43736306! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !MetacelloConfigurationBrowser class methodsFor: 'specs' stamp: 'TorstenBergmann 7/3/2013 21:00'! defaultSpec | delta | delta := 25. ^ SpecLayout composed add: #configBrowserModel origin: 0@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@(delta negated); add: #toolbarModel origin: 0@1 corner: 1@1 offsetOrigin: 0@(delta negated) offsetCorner: 0@0; "add: #textModel origin: 0@0.5 corner: 1@1 offsetOrigin: 0@delta offsetCorner: 0@0;" yourself! ! !MetacelloConfigurationBrowser class methodsFor: 'registration' stamp: 'TorstenBergmann 7/4/2013 08:51' prior: 37818381! menuCommandOn: aBuilder (aBuilder item: 'Configuration Browser') parent: #Tools; order: 0.5; action: [self new openWithSpec]; icon: Smalltalk ui icons smallLoadProjectIcon! ! !MetacelloConfigurationBrowser class methodsFor: 'accessing' stamp: 'tbn 6/20/2013 08:13'! title ^'Configuration browser'! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'TorstenBergmann 7/3/2013 20:59'! configBrowserModel ^ configBrowserModel! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/7/2012 11:19' prior: 25813200! configurationMenu: aMenu selectedConfiguration ifNil: [^aMenu add: 'Refresh' action: #refresh]. ^aMenu addList: #( ('Install configuration (Stable version)' loadStableFromSelectedConfiguration) ('Load configuration (Do not install)' loadSelectedConfiguration) - ('Refresh' refresh))! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'tbn 6/19/2013 21:47'! initialExtent ^ (400 min: (World extent x)) @ (350 min: (World extent y))! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'TorstenBergmann 7/3/2013 20:58' prior: 25811914! initialize "Initialization code for MessageBrowser" super initialize. self windowIcon: self taskbarIcon. ! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'TorstenBergmann 7/4/2013 08:44'! initializeWidgets self instantiateModels: #( configBrowserModel #MetacelloConfigurationBrowserPane toolbarModel #MetacelloConfigurationBrowserToolbar). ! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'tbn 2/28/2013 08:08' prior: 25812086! initializeWindow "Create the window" | leftPanel tabs | window := StandardWindow new. window title: 'Browser on ', self pharoDistribution. leftPanel := PanelMorph new changeTableLayout. tabs := TabGroupMorph new hResizing: #spaceFill; vResizing: #spaceFill. leftPanel addMorph: tabs. window addMorph: leftPanel fullFrame: LayoutFrame identity. trustedTree := PluggableTreeMorph new. tabs addPage: trustedTree label: 'Verified'. trustedTree model: self; setSelectedSelector: #onTrustedSelected:; getMenuSelector: #configurationMenu:. window addMorph: trustedTree fullFrame: (0@0 corner: 0@1) asLayoutFrame. tabs selectedPageIndex: 1. untrustedTree := PluggableTreeMorph new. tabs addPage: untrustedTree label: 'Unverified'. untrustedTree model: self; setSelectedSelector: #onUntrustedSelected:; getMenuSelector: #configurationMenu:. window addMorph: untrustedTree fullFrame: (0@0 corner: 0@1) asLayoutFrame. tabs selectedPageIndex: 1. ! ! !MetacelloConfigurationBrowser methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 21:28'! installConfiguration configBrowserModel installConfiguration! ! !MetacelloConfigurationBrowser methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 21:29'! loadConfiguration configBrowserModel loadConfiguration! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 6/20/2012 11:06' prior: 25810101! loadSelectedConfiguration self loadConfigurationWithStable: false! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'tbn 4/2/2012 19:10' prior: 25810255! loadStableFromSelectedConfiguration self loadConfigurationWithStable: true! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 6/20/2012 11:21' prior: 25811487! onTrustedSelected: aString selectedRepository := self pharoDistribution. selectedConfiguration := aString! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 6/20/2012 11:21' prior: 25811695! onUntrustedSelected: aString selectedRepository := self untrustedDistribution. selectedConfiguration := aString! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'tbn 8/4/2010 11:06' prior: 25810417! open self refresh. window openInWorld! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'tbn 3/27/2013 00:47' prior: 34070562! pharoDistribution "Returns the correct pharo distribution url" ^'http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo', SystemVersion current major asString, SystemVersion current minor asString, '/main'! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 6/20/2012 11:03' prior: 25810557! refresh |repo reductionMap split configName author version last topMostItems item | "Set as list contents" trustedTree list: (self retrieveConfigurationMorphsFrom: self pharoDistribution). untrustedTree list: (self retrieveConfigurationMorphsFrom: self untrustedDistribution). window title: self pharoDistribution.! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'SeanDeNigris 8/26/2012 11:35' prior: 25814108! retrieveConfigurationMorphsFrom: locationString | repo reductionMap split configName author version last topMostItems item | repo := MCHttpRepository location: locationString. "Reduce to display only the latest" reductionMap := Dictionary new. (repo allVersionNames reverse select: [ :each | each beginsWith: 'ConfigurationOf' ]) do: [:each | split := each findTokens: '-.'. configName := split first. author := split second. version := Integer readFrom: split last. last := reductionMap at: configName ifAbsentPut: [ author -> version]. version > last value ifTrue: [ reductionMap at: configName put: (author -> version) ] ]. topMostItems := SortedCollection sortBlock: [:e1 :e2 | e1 asString <= e2 asString ]. reductionMap keysAndValuesDo: [:key :val | topMostItems add: ((PluggableListItemWrapper with: (key, '-', val key, '.', val value asString)) string: (key allButFirst: 15), ' (', val key, '.', val value asString, ')'; yourself)]. ^topMostItems! ! !MetacelloConfigurationBrowser methodsFor: 'icons' stamp: 'tbn 6/19/2013 21:43'! taskbarIcon ^ Smalltalk ui icons smallLoadProjectIcon! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'tbn 6/20/2013 08:13'! title ^self class title! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'tbn 6/20/2013 08:14'! toolbarModel ^ toolbarModel! ! !MetacelloConfigurationBrowser methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 6/20/2012 11:06' prior: 25811260! untrustedDistribution "Returns the untrusted pharo distribution url" ^'http://www.squeaksource.com/MetacelloRepository'. ! ! !MetacelloConfigurationBrowserPane class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 5/14/2013 18:07'! defaultSpec ^ SpecLayout composed add: #configurationList; yourself! ! !MetacelloConfigurationBrowserPane class methodsFor: 'example' stamp: 'tbn 2/18/2013 21:33'! example " self example " ^self new openWithSpec; repository: self pharoDistribution; yourself! ! !MetacelloConfigurationBrowserPane class methodsFor: 'accessing' stamp: 'TorstenBergmann 7/4/2013 08:46'! pharoDistributionRepository "Returns the correct pharo distribution url" ^'http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo', SystemVersion current major asString, SystemVersion current minor asString, '/main'! ! !MetacelloConfigurationBrowserPane class methodsFor: 'accessing' stamp: 'tbn 2/18/2013 20:42'! retrieveConfigurationsFrom: locationString " self retrieveConfigurationsFrom: self pharoDistribution " | repo reductionMap split configName author version last topMostItems item | repo := MCHttpRepository location: locationString. "Reduce to display only the latest" reductionMap := Dictionary new. (repo allVersionNames reverse select: [ :each | each beginsWith: 'ConfigurationOf' ]) do: [:each | split := each findTokens: '-.'. configName := split first. author := split second. version := Integer readFrom: split last. last := reductionMap at: configName ifAbsentPut: [ author -> version]. version > last value ifTrue: [ reductionMap at: configName put: (author -> version) ] ]. topMostItems := SortedCollection sortBlock: [:e1 :e2 | e1 asString <= e2 asString ]. reductionMap keysAndValuesDo: [:key :val | topMostItems add: (key, '-', val key, '.', val value asString) ]. ^topMostItems! ! !MetacelloConfigurationBrowserPane class methodsFor: 'accessing' stamp: 'tbn 2/18/2013 21:30'! title ^'Configurations'! ! !MetacelloConfigurationBrowserPane methodsFor: 'private accessing' stamp: 'TorstenBergmann 7/4/2013 08:47'! availableRepositories ^Array with: self class pharoDistributionRepository with: 'http://ss3.gemtalksystems.com/ss/MetaRepoForPharo20' with: 'http://www.squeaksource.com/MetacelloRepository' ! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 21:37'! browseConfiguration self hasSelection ifFalse: [ ^self ]. self selectedConfigurationClass browse! ! !MetacelloConfigurationBrowserPane methodsFor: 'private accessing' stamp: 'tbn 6/19/2013 21:29'! configurationList ^configurationList ! ! !MetacelloConfigurationBrowserPane methodsFor: 'private accessing' stamp: 'tbn 2/18/2013 20:20'! configurationList: aList configurationList := aList! ! !MetacelloConfigurationBrowserPane methodsFor: 'menu' stamp: 'TorstenBergmann 7/4/2013 08:24'! configurationListMenu: aMenu aMenu target: self. aMenu title: 'Configuration'. self selectedConfiguration ifNotNil: [ aMenu add: 'Install configuration' action: #installConfiguration. self selectedConfigurationClass isNil ifTrue: [ aMenu add: 'Load configuration' action: #loadConfiguration ] ifFalse: [ aMenu add: 'Browse configuration class' action: #browseConfiguration ]. aMenu addLine ]. aMenu add: 'Switch Repository' action: #switchRepository; add: 'Refresh' action: #updateList. ^aMenu! ! !MetacelloConfigurationBrowserPane methodsFor: 'private testing' stamp: 'TorstenBergmann 7/3/2013 21:36'! hasSelection ^self selectedConfiguration notNil! ! !MetacelloConfigurationBrowserPane methodsFor: 'initialization' stamp: 'tbn 6/19/2013 22:31'! initConfigurationList "Display in format name (author.version)" configurationList displayBlock: [:item | |tokens| tokens := (item findTokens: '-.'). (tokens first allButFirst: 15), ' (',tokens second ,'.', tokens third, ')' ]. "Display loaded with a special icon (assuming the mcz is named like the class" configurationList icons: [:e | (Smalltalk includesKey: (e findTokens: '-.') first asSymbol) ifTrue: [ Smalltalk ui icons configIconLoaded ] ifFalse: [ Smalltalk ui icons configIcon ]]. ! ! !MetacelloConfigurationBrowserPane methodsFor: 'initialization' stamp: 'TorstenBergmann 7/4/2013 08:49'! initializeWidgets self instantiateModels: #(configurationList IconListModel). self focusOrder add: configurationList. configurationList menu: [ :aMenu | self configurationListMenu: aMenu ]. self initConfigurationList. self repository: self availableRepositories first ! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 21:28'! installConfiguration self loadConfigurationWithStable: true. self updateList! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 21:28'! loadConfiguration self loadConfigurationWithStable: false. self updateList! ! !MetacelloConfigurationBrowserPane methodsFor: 'private' stamp: 'TorstenBergmann 7/3/2013 21:37'! loadConfigurationWithStable: loadStable "Load the configuration and (depending on the flag) load the latest stable version" | configName | self hasSelection ifFalse: [ ^self ]. configName := self selectedConfigurationName. Gofer new url: self repository; package: configName; load. loadStable ifFalse: [^self]. "Now load the latest stable version" self selectedConfigurationClass project stableVersion load.! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/3/2013 20:47'! repository ^repository! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/4/2013 08:49'! repository: aRepositoryUrl repository := aRepositoryUrl. self configurationList items: (self class retrieveConfigurationsFrom: aRepositoryUrl). self window ifNotNil: [:w | w title: aRepositoryUrl ]! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/3/2013 21:31'! selectedConfiguration ^self configurationList selectedItem! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/3/2013 21:38'! selectedConfigurationClass ^Smalltalk at: self selectedConfigurationName asSymbol ifAbsent: [ nil ]! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/3/2013 21:44'! selectedConfigurationName self selectedConfiguration ifNil: [ ^String empty ]. ^self selectedConfiguration readStream upTo: $-.! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 7/4/2013 08:41'! switchRepository | dialog | dialog := ListDialogWindow new getList: [ :r| self availableRepositories ]; displayBlock: [:e | e ]; title: 'Repository Search'; yourself. dialog browseBlock: [ :el | el ifNotNil: [ NBWin32Shell shellBrowse: el ]]. (dialog openModal) cancelled ifFalse: [ dialog listIndex > 0 ifTrue: [ self repository: (self availableRepositories at: dialog listIndex) ]]! ! !MetacelloConfigurationBrowserPane methodsFor: 'updating' stamp: 'TorstenBergmann 7/3/2013 21:10'! updateList |selected| selected := self configurationList selectedIndex. self configurationList updateList. self configurationList setSelectedIndex: selected.! ! !MetacelloConfigurationBrowserToolbar class methodsFor: 'specs' stamp: 'TorstenBergmann 7/3/2013 20:50'! defaultSpec ^ { #Panel. #changeTableLayout. #listDirection:. #rightToLeft. #addMorph:. {#model. #installModel.}. #addMorph:. {#model. #loadModel.}. #hResizing:. #spaceFill. #vResizing:. #shrinkWrap. }! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'tbn 6/20/2013 08:25'! initializeWidgets self instantiateModels: #( loadModel ButtonModel installModel ButtonModel). self setLoadModel. self setInstallModel . self focusOrder add: loadModel; add: installModel! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 20:50'! installConfiguration self owner installConfiguration ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'tbn 6/20/2013 08:23'! installModel ^installModel ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'actions' stamp: 'TorstenBergmann 7/3/2013 20:38'! loadConfiguration self owner loadConfiguration ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'tbn 6/20/2013 08:23'! loadModel ^loadModel! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'tbn 6/20/2013 08:22'! setInstallModel installModel state: false; label: 'Install'; action: [ self installConfiguration ]. ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'tbn 6/20/2013 08:22'! setLoadModel loadModel state: false; label: 'Load'; action: [ self loadConfiguration ]. ! ! MetacelloConfigurationBrowser removeSelector: #loadConfigurationWithStable:! "Tools"! ----End fileIn----! ----QUIT----an Array(4 July 2013 2:13:53 pm) Pharo.image priorSource: 10171003! ----STARTUP----an Array(4 July 2013 2:22:55 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 2:22:55 pm) Pharo-30254.image priorSource: 10202471! ----STARTUP----an Array(4 July 2013 2:37:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/4/2013 14:34' prior: 43725732! commentForCurrentUpdate ^ '11078 preferences directory not properly set on Windows https://pharo.fogbugz.com/f/cases/11078 11129 Support compiler method class creation in new class builder https://pharo.fogbugz.com/f/cases/11129 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/4/2013 14:34'! script353 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.44.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.33.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.139.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.496.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.181.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.67.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.341.mcz SlotTests-MarcusDenker.38.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.138.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-EstebanLorenzano.112.mcz Spec-Widgets-MarcusDenker.206.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1168.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/4/2013 14:34'! update30255 "self new update30255" self withUpdateLog: '11078 preferences directory not properly set on Windows https://pharo.fogbugz.com/f/cases/11078 11129 Support compiler method class creation in new class builder https://pharo.fogbugz.com/f/cases/11129 '. self loadTogether: self script353 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SlotClassBuilderTest methodsFor: 'helper' stamp: 'MartinDias 7/3/2013 17:15' prior: 43640603! assertTraitIntegrity self assert: TOne users isHealthy. self assert: TOne classTrait users isHealthy. self assert: TTwo users isHealthy. self assert: TTwo classTrait users isHealthy.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/3/2013 16:38'! testBasicClassBuilding aClass := self buildClassWith: [ :builder | builder name: self aClassName ]. self deny: aClass layout isNil. self assert: aClass name = self aClassName. self assert: (self class environment at: self aClassName) == aClass. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 6/3/2013 16:59' prior: 43613208! testCheckAllLayouts self shouldnt: [SlotVirus checkAllLayouts] raise: Error! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 7/3/2013 16:42'! testCompiledMethodCanBeExtended self should: [ :builder | builder layoutClass: CompiledMethodLayout ] extendWith: [ :builder | builder layoutClass: CompiledMethodLayout ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 6/3/2013 16:59' prior: 43616088! testCompiledMethodLayout self assert: (CompiledMethod layout isKindOf: CompiledMethodLayout).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/3/2013 16:57'! testNewCompiledMethodClass aClass := self buildClassWithLayout: CompiledMethodLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self deny: aClass isWeak.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 6/3/2013 17:08' prior: 43621214! testNewPointerClass aClass := self buildClassWithLayout: PointerLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/3/2013 17:12'! testNewPointerClassWithSlots aClass := self buildClassWithLayout: PointerLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 6/3/2013 17:08' prior: 43621841! testNewVariableByteClass aClass := self buildClassWithLayout: ByteLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 6/3/2013 17:08' prior: 43622166! testNewVariableWordClass aClass := self buildClassWithLayout: WordLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 6/3/2013 17:08' prior: 43622491! testNewWeakClass aClass := self buildClassWithLayout: WeakLayout. self deny: aClass isCompact. self assert: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isWeak.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 6/3/2013 16:59' prior: 43631449! testSmallIntegerLayout self assert: (SmallInteger layout isKindOf: SmallIntegerLayout).! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/3/2013 17:23'! extendCompiledMethod self hasFields ifTrue: [ PrimitiveTypeConflict new layout: self; subType: #compiledMethod; signal ]. ^ CompiledMethodLayout new! ! !ObjectLayout methodsFor: 'format' stamp: 'MartinDias 7/3/2013 18:00' prior: 41781785! format "Answer an Integer that encodes this layout in the way that VM expects it." | fieldSize sizeHiBits format | fieldSize := self fieldSize + 1. sizeHiBits := fieldSize // 64. format := sizeHiBits. format := (format bitShift: 5) + compactClassIndex. format := (format bitShift: 4) + self instanceSpecification. format := (format bitShift: 6) + (fieldSize \\ 64). format := (format bitShift: 1). ^ format! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/3/2013 16:51' prior: 43597739! testClassAddedAnnounced SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. aClass := self buildClassWithLayout: PointerLayout. self assert: announcement classAdded equals: aClass.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 6/3/2013 16:55' prior: 43598093! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self buildClassWithLayout: PointerLayout. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 6/3/2013 16:55' prior: 43598376! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self buildClassWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 6/3/2013 16:55' prior: 43599118! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 6/3/2013 16:55' prior: 43599814! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self buildClassWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" self buildClassWithLayout: PointerLayout andSlots: { #aSlot }. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 6/3/2013 16:55' prior: 43600264! testClassRecategorizedAnnounced SystemAnnouncer uniqueInstance weak on: ClassRecategorized send: #saveAnnouncementOnce: to: self. aClass := self buildClassWith: [:builder| builder category: self aCategory ]. anotherClass := self buildClassWith: [:builder| builder category: self anotherCategory ]. self assert: announcement oldCategory equals: self aCategory. self assert: announcement newCategory equals: self anotherCategory. self assert: announcement classRecategorized == anotherClass.! ! !CompiledMethodLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/3/2013 17:25'! buildFrom: superLayout scope: aScope host: aClass ^ superLayout extendCompiledMethod host: aClass; yourself! ! !CompiledMethodLayout methodsFor: 'format' stamp: 'MartinDias 7/4/2013 12:52' prior: 41771543! format ^ 1538 bitOr: (compactClassIndex bitShift: 11)! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 12:22' prior: 54925458! preferences ^ [ self resolveString: (Smalltalk os env at: 'APPDATA') ] on: Error do: [ self home ]! ! !SlotVirus class methodsFor: 'installing' stamp: 'MartinDias 7/3/2013 19:09' prior: 41817257! basicLayoutFor: aClass aClass typeOfClass = #compiledMethod ifTrue: [ ^ aClass superclass layout extendCompiledMethod ]. aClass isBits ifTrue: [ aClass isBytes ifTrue: [ ^ aClass superclass layout extendByte ] ifFalse: [ ^ aClass superclass layout extendWord ] ]. aClass isWeak ifTrue: [ ^ self basicWeakLayoutFor: aClass ]. aClass isVariable ifTrue: [ ^ self basicVariableLayoutFor: aClass ]. ^ aClass superclass layout extend: (self layoutScopeFor: aClass).! ! !SlotVirus class methodsFor: 'installing' stamp: 'MartinDias 7/3/2013 18:53' prior: 41820972! installNewLayouts ProtoObject instVarNamed: #layout put: ((EmptyLayout instance extend: #()) host: ProtoObject). " self flag: 'I do not like PseudoContext'. PseudoContext instVarNamed: #layout put: ((NilLayout instance extend: #()) host: ProtoObject)." ProtoObject allSubclassesDo: [ :aSubclass | aSubclass instVarNamed: #layout put: (self newLayoutFor: aSubclass) ]. SmallInteger instVarNamed: #layout put: (SmallIntegerLayout new). CompiledMethod instVarNamed: #layout put: (self newLayoutFor: CompiledMethod).! ! SlotClassBuilderSilentTest removeSelector: #testSlotBuilderBuildsClass! SlotClassBuilderSilentTest removeSelector: #testNewPointerClassWithVariables! CompiledMethodLayout removeSelector: #initialize! "FileSystem-Core"! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----an Array(4 July 2013 2:37:20 pm) Pharo.image priorSource: 10202668! ----STARTUP----an Array(4 July 2013 2:45:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 2:45:58 pm) Pharo-30255.image priorSource: 10222939! ----STARTUP----an Array(4 July 2013 4:56:28 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(4 July 2013 4:56:33 pm) Pharo.image priorSource: 10223136! ----STARTUP----an Array(4 July 2013 5:05:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 July 2013 5:05:44 pm) Pharo-30255.image priorSource: 10223343! ----STARTUP----an Array(5 July 2013 11:02:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/5/2013 10:59' prior: 43757397! commentForCurrentUpdate ^ '11139 Undeclared varis #selectedConfiguration->nil #selectedRepository->nil #trustedTree->nil #untrustedTree->nil https://pharo.fogbugz.com/f/cases/11139 10945 Shadowed vars and args... https://pharo.fogbugz.com/f/cases/10945 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/5/2013 11:00'! script354 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.139.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.349.mcz OpalCompiler-Tests-MarcusDenker.184.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.341.mcz SlotTests-MarcusDenker.38.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/5/2013 11:00'! update30256 "self new update30256" self withUpdateLog: '11139 Undeclared varis #selectedConfiguration->nil #selectedRepository->nil #trustedTree->nil #untrustedTree->nil https://pharo.fogbugz.com/f/cases/11139 10945 Shadowed vars and args... https://pharo.fogbugz.com/f/cases/10945 '. self loadTogether: self script354 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Compiler methodsFor: 'public - old' stamp: 'ClementBera 6/28/2013 10:32' prior: 37254829! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: failBlock ^ self evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: failBlock logged: false.! ! !Compiler methodsFor: 'public - old' stamp: 'ClementBera 6/28/2013 10:32' prior: 37255129! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: failBlock logged: logFlag "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value toLog itsSelection itsSelectionString | class := aContext == nil ifTrue: [aReceiver class ] ifFalse: [aContext method methodClass]. self from: textOrStream class: class context: aContext notifying: aRequestor. methodNode := self translate: sourceStream noPattern: true ifFail: [^failBlock value]. method := self interactive ifTrue: [methodNode generateWithSource] ifFalse: [methodNode generate]. value := aReceiver withArgs: (context ifNil: [#()] ifNotNil: [{context}]) executeMethod: method. logFlag ifTrue: [toLog := ((requestor respondsTo: #selection) and:[(itsSelection := requestor selection) notNil and:[(itsSelectionString := itsSelection asString) isEmptyOrNil not]]) ifTrue:[itsSelectionString] ifFalse:[sourceStream contents]. SystemAnnouncer uniqueInstance evaluated: toLog context: aContext]. ^ value! ! !NewVersionBrowser methodsFor: 'copy and paste' stamp: 'ClementBera 6/28/2013 10:35' prior: 28448384! scanVersionsOf: method class: aClass meta: meta category: cat selector: aSelector ^ ChangeSet scanVersionsOf: method class: aClass meta: meta category: cat selector: aSelector! ! !QSystemTally methodsFor: 'tallying' stamp: 'ClementBera 6/28/2013 10:37' prior: 38601108! tallyPath: context by: count "Tally the context chain" | aMethod aTally | aMethod := context method. aTally := receivers. [aTally == nil] whileFalse:[ aTally method == aMethod ifTrue:[^aTally bumpBy: count]. aTally := aTally nextLink. ]. aTally := QSystemTally new class: context receiver class method: aMethod. aTally nextLink: receivers. receivers := aTally. ^aTally bumpBy: count! ! !DateModel methodsFor: 'protocol-events' stamp: 'ClementBera 6/28/2013 10:33' prior: 20454313! whenDateChanged: aBlock dateModel whenTextChanged: [:newText :oldText :announcement :anAnnouncer || newDate oldDate | newDate := Date readFrom: newText readStream. oldDate := Date readFrom: oldText readStream. aBlock cull: newDate cull: oldDate cull: announcement cull: anAnnouncer ]! ! !MorphWrapper class methodsFor: 'instance creation' stamp: 'ClementBera 6/28/2013 10:33' prior: 27073749! morph: morph layout: aLayout ^ self new layout: aLayout; morph: morph; yourself! ! !AthensCurveFlattener methodsFor: 'public API' stamp: 'ClementBera 6/28/2013 10:29' prior: 40282940! flattenPath: aPath transform: aTransformation "This is an entry point for flattening path. An additional argument, transform is an Affine matrix, used to map path geometry to screen, and therefore used to calculate the error tolerance for path subdivisions" ^ self flattenPath: aPath transform: aTransformation toleranceMultiplier: 1 ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'ClementBera 6/28/2013 10:31' prior: 40541130! convertByteString: aByteString ^ NBFFICallout cdecl: #( void (void * aByteString)) emitCall: [:gen :proxy :anAsm | ]! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'ClementBera 6/28/2013 10:30' prior: 40541441! convertUnicode: anAsm " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanOne moreThanTwo moreThanThree end | moreThanOne := anAsm uniqueLabelName: 'moreThanOne'. moreThanTwo := anAsm uniqueLabelName: 'moreThanTwo'. moreThanThree := anAsm uniqueLabelName: 'moreThanThree'. end := anAsm uniqueLabelName: 'end'. anAsm cmp: anAsm EAX with: 16r7F; jg: moreThanOne; "one byte" mov: 1 to: anAsm EDX; jmp: end; label: moreThanOne; cmp: anAsm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: anAsm EAX with: 2; shl: anAsm AL with: 2; or: anAsm AX with: 2r1100000010000000; xchg: anAsm AL with: anAsm AH; mov: 2 to: anAsm EDX; jmp: end; label: moreThanTwo; cmp: anAsm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: anAsm EAX with: 2r111000001000000010000000; "16rE08080" shl: anAsm EAX with: 8; bswap: anAsm EAX; mov: 3 to: anAsm EDX; jmp: end; "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: anAsm EAX to: anAsm EDX; shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: anAsm EAX with: 16r3F3F3F; bswap: anAsm EAX; shr: anAsm EDX with: 18; "6*3" or: anAsm DL with: 16r11110000; mov: anAsm DL to: anAsm AL; mov: 4 to: anAsm EDX; label: end ! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'ClementBera 6/28/2013 10:30' prior: 40543289! convertUnicode: anAsm conversionLabels: convLabels " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanTwo moreThanThree | moreThanTwo := anAsm uniqueLabelName: 'moreThanTwo'. moreThanThree := anAsm uniqueLabelName: 'moreThanThree'. anAsm cmp: anAsm EAX with: 16r7F; jle: (convLabels at: 1); "one byte" cmp: anAsm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: anAsm EAX with: 2; shl: anAsm AL with: 2; or: anAsm AX with: 2r1100000010000000; xchg: anAsm AL with: anAsm AH; jmp: (convLabels at: 2); label: moreThanTwo; cmp: anAsm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: anAsm EAX with: 2r111000001000000010000000; "16rE08080" shl: anAsm EAX with: 8; bswap: anAsm EAX; jmp: (convLabels at: 3); "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: anAsm EAX to: anAsm EDX; shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: anAsm EAX with: 16r3F3F3F; or: anAsm EAX with: 16r808080; bswap: anAsm EAX; shr: anAsm EDX with: 18; "6*3" or: anAsm DL with: 16r11110000; mov: anAsm DL to: anAsm AL; jmp: (convLabels at: 4)! ! !MetacelloConfigurationBrowser class methodsFor: 'specs' stamp: 'TorstenBergmann 7/4/2013 18:33' prior: 43740875! defaultSpec | delta | delta := 25. ^SpecLayout composed add: #configBrowserModel origin: 0@0 corner: 1@1 offsetOrigin: 0@0 offsetCorner: 0@(delta negated); add: #toolbarModel origin: 0@1 corner: 1@1 offsetOrigin: 0@(delta negated) offsetCorner: 0@0; yourself! ! !MetacelloConfigurationBrowser class methodsFor: 'registration' stamp: 'TorstenBergmann 7/4/2013 18:36' prior: 43741370! menuCommandOn: aBuilder (aBuilder item: 'Configuration Browser') parent: #Tools; order: 0.5; action: [self new openWithSpec]; icon: Smalltalk ui icons smallLoadProjectIcon! ! !MetacelloConfigurationBrowser class methodsFor: 'instance creation' stamp: 'TorstenBergmann 7/4/2013 18:36' prior: 25815355! open ^(self new) open; yourself ! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'ClementBera 6/28/2013 10:40' prior: 33766122! retrieveSpecToProvideToChildren | aSpecForChildren | "First element is a symbol describing the spec type" (spec isKindOf: RawSpec) ifTrue: [ aSpecForChildren := superSpec ] ifFalse: [ aSpecForChildren := spec ]. ^ aSpecForChildren! ! !SyntaxError methodsFor: 'other' stamp: 'ClementBera 6/28/2013 10:40' prior: 51474594! notify: anError at: aLocation in: source "Open a syntax error view, inserting the given error message into the given source at the given location. This message is sent to the 'requestor' when the parser or compiler finds a syntax error." | aClass aString | aClass := thisContext sender receiver encoder classEncoding. self setClass: aClass code: source error: anError location: aLocation debugger: (Smalltalk tools debugContext: thisContext) doitFlag: false. self class open: self. ! ! GradientPaint removeSelector: #is:! MetacelloConfigurationBrowser removeSelector: #untrustedDistribution! MetacelloConfigurationBrowser removeSelector: #retrieveConfigurationMorphsFrom:! MetacelloConfigurationBrowser removeSelector: #refresh! MetacelloConfigurationBrowser removeSelector: #pharoDistribution! MetacelloConfigurationBrowser removeSelector: #open! MetacelloConfigurationBrowser removeSelector: #onUntrustedSelected:! MetacelloConfigurationBrowser removeSelector: #onTrustedSelected:! MetacelloConfigurationBrowser removeSelector: #loadStableFromSelectedConfiguration! MetacelloConfigurationBrowser removeSelector: #loadSelectedConfiguration! MetacelloConfigurationBrowser removeSelector: #initializeWindow! MetacelloConfigurationBrowser removeSelector: #configurationMenu:! MetacelloConfigurationBrowser class removeSelector: #theme! "Athens-Cairo"! "Athens-Core"! "Compiler"! "Spec-Core"! "Spec-Tools"! "Spec-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(5 July 2013 11:02:27 am) Pharo.image priorSource: 10223540! ----STARTUP----an Array(5 July 2013 11:14:51 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 July 2013 11:14:51 am) Pharo-30256.image priorSource: 10244931! ----STARTUP----an Array(5 July 2013 3:55:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/5/2013 15:53' prior: 43778270! commentForCurrentUpdate ^ '11143 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11143'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/5/2013 15:53'! script355 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.139.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1512.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.184.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.341.mcz SlotTests-MarcusDenker.38.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.568.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/5/2013 15:53'! update30257 "self new update30257" self withUpdateLog: '11143 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11143'. self loadTogether: self script355 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OpalCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/5/2013 15:41' prior: 39239488! class: aClass self compilationContext class: aClass.! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 6/27/2013 16:24' prior: 38890222! decompileMethod: aCompiledMethod | sourceCode | sourceCode := aCompiledMethod getSourceFromFile. ^sourceCode ifNil: [Decompiler new decompile: aCompiledMethod selector in: aCompiledMethod methodClass method: aCompiledMethod ] ifNotNil: [self parse: sourceCode class: aCompiledMethod methodClass ]! ! !OCClassScope methodsFor: 'printing' stamp: 'MarcusDenker 6/18/2013 10:00' prior: 34917140! printOn: stream class printOn: stream.! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'ClementBera 6/28/2013 14:09' prior: 39474872! closureFrom: fromSeqId to: toSeqId copyNumCopiedValues: numCopied numArgs: numArgs2 | distance from to | (numCopied < 0 or: [numCopied > 15]) ifTrue: [^self error: 'too many copied vars']. from := seqOrder at: fromSeqId. to := seqOrder at: toSeqId ifAbsent: [^ self]. "not done yet" distance := (from + 1 to: to -1 ) inject: 0 into: [:size :i | size + (seqBytes at: (orderSeq at: i)) size]. distance > 65535 ifTrue: [self error: 'forward jump too big']. self nextPut: (Bytecodes at: #PushClosureCopyNumCopiedValuesNuumArgsJumpSize); nextPut: numArgs2 + (numCopied bitShift: 4); nextPut: (distance bitShift: -8); nextPut: (distance bitAnd: 16rFF). ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 6/28/2013 10:04' prior: 39026832! emitToByDo: aMessageNode | limit step block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. step := aMessageNode arguments second. step isLiteral ifFalse: [self error: 'should not have been inlined']. step := step value. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral | limit isSelf | limit isSuper ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. "loop" methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: (step > 0 ifTrue: [#<=] ifFalse: [#>=]). methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: step. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'cb 6/27/2013 16:40' prior: 39028256! emitToDo: aMessageNode | limit block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral | limit isSelf | limit isSuper ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: #<=. methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: 1. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 6/28/2013 13:18' prior: 40079513! visitArrayNode: anArrayNode | elementNodes | anArrayNode statements size > 127 ifTrue: [^ self visitLargeArrayNode: anArrayNode ]. elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 6/28/2013 13:36'! visitLargeArrayNode: aRBArrayNode "Long form: generates (Array braceStream: N) nextPut: a; nextPut: b; ...; braceArray" methodBuilder pushLiteralVariable: Array binding. methodBuilder pushLiteral: aRBArrayNode statements size. methodBuilder send: #braceStream:. aRBArrayNode statements do: [ :each | methodBuilder pushDup. valueTranslator visitNode: each. methodBuilder send: #nextPut:. methodBuilder popTop. ]. methodBuilder pushDup. methodBuilder send: #braceArray. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'cb 6/27/2013 16:53' prior: 38901345! visitMethodNode: aMethodNode aMethodNode arguments size > 15 ifTrue: [self backendError: 'Too many arguments' forNode: aMethodNode ]. methodBuilder compilationContext: aMethodNode compilationContext. methodBuilder addTemps: aMethodNode scope tempVarNames. methodBuilder properties: aMethodNode properties. methodBuilder irPrimitive: aMethodNode primitiveFromPragma. aMethodNode pragmas do: [:each | self visitPragmaNode: each]. methodBuilder numArgs: aMethodNode arguments size. aMethodNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aMethodNode scope tempVectorName withVars: (aMethodNode scope tempVector collect: [:each| each name]) asArray. ]. effectTranslator visitNode: aMethodNode body. aMethodNode body lastIsReturn ifFalse: [methodBuilder pushReceiver; returnTop]! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'cb 6/27/2013 16:55'! startWithoutParentheses ^ 1! ! !OCAbstractScope methodsFor: 'lookup' stamp: 'MarcusDenker 6/5/2013 13:53' prior: 40074771! lookupVarForDeclaration: name "subclass responsibility" ^ self outerScope lookupVarForDeclaration: name! ! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(5 July 2013 3:55:13 pm) Pharo.image priorSource: 10245130! ----STARTUP----an Array(5 July 2013 4:04:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 July 2013 4:04:24 pm) Pharo-30257.image priorSource: 10262131! ----STARTUP----an Array(5 July 2013 4:29:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/5/2013 16:08' prior: 43799860! commentForCurrentUpdate ^ '11143 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11143 11095 Array >> #elementsForwardIdentityTo:copyHash: More explicit tests and comments https://pharo.fogbugz.com/f/cases/11095 11007 Pharo 3 now uses mustBeBooleanInMagic: by default https://pharo.fogbugz.com/f/cases/11007 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/5/2013 16:09'! script356 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1513.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.826.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.109.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.341.mcz SlotTests-MarcusDenker.38.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.569.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.535.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/5/2013 16:09'! update30258 "self new update30258" self withUpdateLog: '11143 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11143 11095 Array >> #elementsForwardIdentityTo:copyHash: More explicit tests and comments https://pharo.fogbugz.com/f/cases/11095 11007 Pharo 3 now uses mustBeBooleanInMagic: by default https://pharo.fogbugz.com/f/cases/11007 '. self loadTogether: self script356 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NonBooleanReceiver commentStamp: '' prior: 0! Some constructs are optimized in the compiler : #whileTrue: #whileFalse: #ifTrue: #ifFalse: #ifTrue:ifFalse: #ifFalse:ifTrue: So you cannot by default use them on non boolean objects. If you really need to use optimized constructs, you can enable Opal compiler and do one of the following : - recompile your method with the pragma : - recompile your class with the method : MyClass class>>compiler ^ super compiler options: #(+ optIlineNone) - call from this method by Object>>#mustBeBooleanInMagic:"! !OCASTTranslatorTest methodsFor: 'testing - misc' stamp: 'ClementBera 6/28/2013 13:38'! testPushBigArray | ast ir aCompiledMethod instance | ast := (OCOpalExamples>>#examplePushBigArray) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new . aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance examplePushBigArray.! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'ClementBera 6/28/2013 13:02' prior: 39210700! testIfTrueEffect | temp fakeBool | self skip. fakeBool := MyBooleanObject new. temp := 1. fakeBool ifTrue: [ temp := 5 + 3 + 1 ]. self assert: temp equals: 9. fakeBool ifTrue: [ [ ] ]. "fakeBool ifTrue: [ 1+ 2. [ :a | a ] value: 5. 7 ]."! ! !MustBeBooleanTests methodsFor: 'as yet unclassified' stamp: 'ClementBera 6/28/2013 13:02' prior: 39211100! testIfTrueValue | myBooleanObject | self skip. self assert: (MyBooleanObject new ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'. myBooleanObject := MyBooleanObject new. self assert: (myBooleanObject ifTrue: [ 1 + 2 ]) equals: '3 sent from my boolean object'.! ! !NonBooleanReceiver commentStamp: '' prior: 43827833! Some constructs are optimized in the compiler : #whileTrue: #whileFalse: #ifTrue: #ifFalse: #ifTrue:ifFalse: #ifFalse:ifTrue: So you cannot by default use them on non boolean objects. If you really need to use optimized constructs, you can enable Opal compiler and do one of the following : - recompile your method with the pragma : - recompile your class with the method : MyClass class>>compiler ^ super compiler options: #(+ optIlineNone) - call from this method by Object>>#mustBeBooleanInMagic:"! !Array methodsFor: 'converting' stamp: 'MartinDias 7/1/2013 15:11' prior: 17605819! elementsForwardIdentityTo: otherArray copyHash: copyHash "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray. If copyHash is true, the identityHashes remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation. That means that the identityHashes of the elements in otherArray are modified to be the ones of the corresponding elements in this array. If copyHash is false, then identityHashes stay with the objects and thus the elements in otherArray are not modified. In this case only the pointers to the elements in this array are forwarded." self primitiveFailed! ! !OCOpalExamples methodsFor: 'examples-misc' stamp: 'ClementBera 6/28/2013 13:39'! examplePushBigArray "This array should have a size more than 127 elements" { 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 . 255 }. ^ 1! ! !Object methodsFor: 'system primitives' stamp: 'MartinDias 7/1/2013 14:55' prior: 28634495! becomeForward: otherObject copyHash: copyHash "Primitive. All variables in the entire system that used to point to the receiver now point to the argument. If copyHash is true, the argument's identity hash bits will be set to those of the receiver. Fails if either argument is a SmallInteger." (Array with: self) elementsForwardIdentityTo: (Array with: otherObject) copyHash: copyHash! ! !Object methodsFor: 'converting' stamp: 'ClementBera 6/28/2013 10:20' prior: 38949863! mustBeBooleanIn: context "context is the where the non-boolean error occurred. Rewind context to before jump then raise error." "Some constructs are optimized in the compiler : #whileTrue: #whileFalse: #ifTrue: #ifFalse: #ifTrue:ifFalse: #ifFalse:ifTrue: So you cannot by default use them on non boolean objects." "If you really need to use optimized constructs, you can enable Opal compiler and do one of the following : - recompile your method with the pragma : - recompile your class with the method : MyClass class>>compiler ^ super compiler options: #(+ optIlineNone) - call from this method by Object>>#mustBeBooleanInMagic:" | proceedValue | context skipBackBeforeJump. proceedValue := NonBooleanReceiver new object: self; signal: 'proceed for truth.'. ^ proceedValue ~~ false! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 7/5/2013 15:41' prior: 35006298! testLiteralInteger | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !BecomeTest methodsFor: 'testing' stamp: 'MartinDias 7/1/2013 15:09'! testBecomeForwardCopyIdentityHash "Check that 1. the argument to becomeForward: IS modified to have the sender's identity hash. 2. the sender's identity hash is unchanged." | a b identityHashOfA | a := 'ab' copy. b := 'cd' copy. identityHashOfA := a identityHash. a becomeForward: b copyHash: true. self assert: a == b; assert: a identityHash = identityHashOfA; assert: b identityHash = identityHashOfA. ! ! !BecomeTest methodsFor: 'testing' stamp: 'MartinDias 7/1/2013 15:09' prior: 17997775! testBecomeForwardDontCopyIdentityHash "Check that 1. the argument to becomeForward: is NOT modified to have the receiver's identity hash. 2. the receiver's identity hash is unchanged." | a b identityHashOfB | a := 'ab' copy. b := 'cd' copy. identityHashOfB := b identityHash. a becomeForward: b copyHash: false. self assert: a == b; assert: a identityHash = identityHashOfB; assert: b identityHash = identityHashOfB. ! ! "Collections-Sequenceable"! "Kernel"! "OpalCompiler-Tests"! "Tests"! ----End fileIn----! ----QUIT----an Array(5 July 2013 4:29:57 pm) Pharo.image priorSource: 10262328! ----STARTUP----an Array(5 July 2013 4:38:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 July 2013 4:38:45 pm) Pharo-30258.image priorSource: 10281195! ----STARTUP----an Array(9 July 2013 12:18:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/9/2013 12:16' prior: 43817057! commentForCurrentUpdate ^ '10848 Problems with parenthesis in TraitComposition https://pharo.fogbugz.com/f/cases/10848 10859 Monticello freezing the image https://pharo.fogbugz.com/f/cases/10859'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/9/2013 12:16'! script357 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1513.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.119.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.341.mcz SlotTests-MarcusDenker.38.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.580.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.539.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/9/2013 12:16'! update30259 "self new update30259" self withUpdateLog: '10848 Problems with parenthesis in TraitComposition https://pharo.fogbugz.com/f/cases/10848 10859 Monticello freezing the image https://pharo.fogbugz.com/f/cases/10859'. self loadTogether: self script357 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RGBehaviorDefinition methodsFor: 'accessing' stamp: 'ST 6/19/2013 15:53' prior: 38638457! traitNames "Assuming that traits in a composition can be identified by testing for the first character being an uppercase character (and thus not a special character such as {, # etc.)" | tokens | tokens := self traitCompositionSource parseLiterals flattened. ^tokens select: [:each | each first isUppercase].! ! !MCSmalltalkhubRepository methodsFor: 'interface' stamp: 'CamilloBruni 6/15/2013 10:14' prior: 24993181! loadAllFileNames | client | client := self httpClient. client ifFail: [ :exception | self error: 'Could not access ', self location, ': ', exception printString ]; url: self locationWithTrailingSlash; queryAt: 'format' put: 'raw'; get. self assertNonBinaryResponse: client response. ^ self parseFileNamesFromStream: client contents! ! !TraitTest methodsFor: 'testing' stamp: 'ST 6/5/2013 17:17' prior: 53444182! testPrinting self assertPrints: self t6 definition like: 'Trait named: #T6 uses: T1 + (T2 @ {#m22Alias->#m22}) category: ''Tests-Traits'''! ! !TraitTest methodsFor: 'testing' stamp: 'SebastianTleye 7/2/2013 16:16'! testTraitCompositionRespectsParenthesis self t1 compile: 'method ^1234'. self t2 compile: 'method ^4'. self c1 setTraitComposition: self t1 + self t2 - #method. self should: [self c1 new method] raise: MessageNotUnderstood. self c1 setTraitComposition: self t1 + (self t2 - #method). self shouldnt: [ self c1 new method ] raise: MessageNotUnderstood. self assert: (self c1 new method = 1234).! ! !TraitsResource methodsFor: 'as yet unclassified' stamp: 'ST 6/5/2013 17:18' prior: 53458673! setUp "Please note, that most tests rely on this setup of traits and classes - and that especially the order of the definitions matters." "SetUpCount := SetUpCount + 1." dirty := false. SystemAnnouncer uniqueInstance suspendAllWhile: [self t1: (self createTraitNamed: #T1 uses: { }). self t1 comment: 'I am the trait T1'. self t1 compile: 'm11 ^11' classified: #cat1. self t1 compile: 'm12 ^12' classified: #cat2. self t1 compile: 'm13 ^self m12' classified: #cat3. self t2: (self createTraitNamed: #T2 uses: { }). self t2 compile: 'm21 ^21' classified: #cat1. self t2 compile: 'm22 ^22' classified: #cat2. self t2 classSide compile: 'm2ClassSide: a ^a'. self t3: (self createTraitNamed: #T3 uses: { }). self t3 compile: 'm31 ^31' classified: #cat1. self t3 compile: 'm32 ^32' classified: #cat2. self t3 compile: 'm33 ^33' classified: #cat3. self t4: (self createTraitNamed: #T4 uses: { (self t1). (self t2) }). self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11" self t4 compile: 'm42 ^42' classified: #cat2. self t5: (self createTraitNamed: #T5 uses: self t1 + self t2). self t5 compile: 'm51 ^super foo' classified: #cat1. self t5 compile: 'm52 ^ self class bar' classified: #cat1. self t5 compile: 'm53 ^ self class bar' classified: #cat1. self t6: (self createTraitNamed: #T6 uses: self t1 + (self t2 @ { (#m22Alias -> #m22) })). self c1: (self createClassNamed: #C1 superclass: Object uses: { }). self c1 compile: 'foo ^true' classified: #accessing. self c2: (self createClassNamed: #C2 superclass: self c1 uses: self t5 - { #m11 }). self c2 compile: 'foo ^false' classified: #private. self c2 compile: 'bar ^self foo' classified: #private. self setUpTrivialRequiresFixture. self setUpTwoLevelRequiresFixture. self setUpTranslatingRequiresFixture].! ! !TraitPureBehaviorTest methodsFor: 'testing-applying trait composition' stamp: 'SebastianTleye 6/28/2013 17:36' prior: 53427708! testChangeSuperclass "self run: #testChangeSuperclass" "Test that when the superclass of a class is changed the non-local methods of the class sending super are recompiled to correctly store the new superclass." | aC2 newSuperclass | aC2 := self c2 new. "C1 is current superclass of C2" self assert: aC2 m51. self assert: self c2 superclass == self c1. self deny: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo). "change superclass of C2 from C1 to X" newSuperclass := self createClassNamed: #X superclass: Object uses: {}. newSuperclass subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: self c2 superclass == newSuperclass. newSuperclass compile: 'foo ^17'. self assert: aC2 m51 = 17. self deny: (self c2 localSelectors includes: #m51). self c2 compile: 'm51 ^19'. self assert: aC2 m51 = 19. self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51). "change superclass of C2 back to C1" self c1 subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: (aC2 m51 = 19). self assert: self c2 superclass == self c1. self assert: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51).! ! !TraitPureBehaviorTest methodsFor: 'testing-applying trait composition' stamp: 'SebastianTleye 6/28/2013 17:36' prior: 53434523! testReshapeClass "self run: #testReshapeClass" "Ensure that reshaping a class has no impact on its traits" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo). self c2 addInstVarNamed: 'foobar'. self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo). self c2 removeInstVarNamed: 'foobar'. self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo).! ! !ClassTraitTest methodsFor: 'testing' stamp: 'ST 6/5/2013 17:16' prior: 19358534! testConflictsAliasesAndExclusions "conflict" self t1 classTrait compile: 'm2ClassSide: x ^99' classified: 'mycategory'. self assert: (self t1 classTrait includesLocalSelector: #m2ClassSide:). self assert: (self t5 classTrait >> #m2ClassSide:) isConflict. self assert: (self c2 class >> #m2ClassSide:) isConflict. "exclusion and alias" self assert: self t5 classSide traitComposition asString = 'T1 classTrait + T2 classTrait'. self t5 classSide setTraitCompositionFrom: (self t1 classTrait @ { (#m2ClassSideAlias1: -> #m2ClassSide:) } + ((self t2 classTrait) @ { (#m2ClassSideAlias2: -> #m2ClassSide:) } - { #m2ClassSide: })). self deny: (self t5 classTrait >> #m2ClassSide:) isConflict. self deny: (self c2 class >> #m2ClassSide:) isConflict. self assert: (self c2 m2ClassSideAlias1: 13) = 99. self assert: (self c2 m2ClassSideAlias2: 13) = 13! ! !TraitExclusion methodsFor: 'composition' stamp: 'ST 6/5/2013 17:12'! - anArrayOfSelectors ^TraitExclusion with: subject exclusions: (anArrayOfSelectors, exclusions asArray)! ! !TraitFileOutTest methodsFor: 'testing' stamp: 'SebastianTleye 6/28/2013 17:35' prior: 37145361! testFileOutCategory "File out whole system category, delete all classes and traits and then file them in again." "self run: #testFileOutCategory" | file | self class environment organization fileOutCategory: self categoryName. self class environment organization removeSystemCategory: self categoryName. self deny: (Smalltalk globals keys asSet includesAnyOf: #(#CA #CB #TA #TB #TC #TD)). [ file := FileStream readOnlyFileNamed: self categoryName , '.st'. file fileIn ] ensure: [ file close ]. self assert: (Smalltalk globals keys asSet includesAllOf: #(#CA #CB #TA #TB #TC #TD)). ta := Smalltalk globals at: #TA. self assert: ta traitComposition asString = 'TB @ {#cc->#c} - {#c} + (TC @ {#cc->#c} - {#c})'. self assert: (ta selectors asSet includesAllOf: #(#a #b #cc)). cb := Smalltalk globals at: #CB. self assert: cb traitComposition asString = 'TA'. self assert: (cb selectors asSet includesAllOf: #(#cb #a #b #cc)). "test classSide traitComposition of CB" self assert: cb classSide traitComposition asString = 'TA classTrait + TC'. self assert: (cb classSide selectors asSet includesAllOf: #(#d #c))! ! !TraitFileOutTest methodsFor: 'testing' stamp: 'ST 6/5/2013 17:14' prior: 53407550! testFileOutTrait "fileOut trait T6, remove it from system and then file it in again" "self run: #testFileOutTrait" | fileName file | self t6 compile: 'localMethod: argument ^argument'. self t6 classSide compile: 'localClassSideMethod: argument ^argument'. self t6 fileOut. fileName := self t6 asString , '.st'. self resourceClassesAndTraits remove: self t6. self t6 removeFromSystem. [ file := FileStream readOnlyFileNamed: fileName. file fileIn ] ensure: [ file close ]. self assert: (Smalltalk globals includesKey: #T6). TraitsResource current t6: (Smalltalk globals at: #T6). self resourceClassesAndTraits add: self t6. self assert: self t6 traitComposition asString = 'T1 + (T2 @ {#m22Alias->#m22})'. self assert: (self t6 selectors asSet includesAllOf: #(#localMethod: #m11 #m12 #m13 #m21 #m22 #m22Alias)). self assert: self t6 classSide methodDict size = 2. self assert: (self t6 classSide selectors asSet includesAllOf: #(#localClassSideMethod: #m2ClassSide:))! ! !MCHttpRepository methodsFor: 'i/o' stamp: 'CamilloBruni 6/15/2013 10:13' prior: 24805703! loadAllFileNames | client | self displayProgress: 'Loading all file names from ', self description during: [ client := self httpClient. client ifFail: [ :exception | (exception className beginsWith: 'Zn') ifTrue: [ MCRepositoryError signal: 'Could not access ', self location, ': ', exception printString ] ifFalse: [ exception pass ] ]; url: self locationWithTrailingSlash; queryAt: 'C' put: 'M;O=D'; "legacy that some servers maybe expect" get. self assertNonBinaryResponse: client response ]. ^ self parseFileNamesFromStream: client contents readStream! ! !TraitComposition methodsFor: 'composition' stamp: 'ST 6/5/2013 17:11' prior: 53342191! - anArray "the modifier operators #@ and #- bind stronger than +" self transformations: (self transformations collect: [ :t | t - anArray ])! ! !TraitComposition methodsFor: 'composition' stamp: 'ST 6/5/2013 17:12' prior: 53342486! @ anArrayOfAssociations "the modifier operators #@ and #- bind stronger than +" self transformations: (self transformations collect: [ :t | t @ anArrayOfAssociations ]).! ! !TraitComposition methodsFor: 'printing' stamp: 'SebastianTleye 7/2/2013 16:13' prior: 53347280! printOn: aStream self transformations isEmptyOrNil ifFalse: [ "The first element does not need parenthesis" aStream nextPutAll: (self transformations at: 1) asString. (self transformations size > 1) ifTrue: [ aStream nextPutAll: ' + ']. "The rest of the elements either need or not parenthesis depending if they are trait compositions or traits" (self transformations allButFirst) do: [:each | aStream nextPutAll: (each isTrait ifTrue: [ each asString] ifFalse: [ '(', each asString, ')' ])] separatedBy: [aStream nextPutAll: ' + '] ] ifTrue: [aStream nextPutAll: '{}']! ! !TraitCompositionTest methodsFor: 'testing-basic' stamp: 'ST 6/5/2013 17:13' prior: 53353316! testInvalidComposition self shouldnt: [self t1 @ { (#a -> #b) } @ { (#x -> #y) }] raise: TraitCompositionException. self shouldnt: [(self t1 + self t2) @ { (#a -> #b) } @ { (#x -> #y) }] raise: TraitCompositionException. self shouldnt: [self t1 - { #a } - { #b }] raise: TraitCompositionException. self shouldnt: [self t1 + self t2 - { #a } - { #b }] raise: TraitCompositionException. self should: [(self t1 - { #x }) @ { (#a -> #b) }] raise: TraitCompositionException. self should: [(self t1 + self t2 - { #x }) @ { (#a -> #b) }] raise: TraitCompositionException. self should: [self t1 + self t1] raise: TraitCompositionException. self should: [(self t1 + self t2) @ { (#a -> #b) } + self t1] raise: TraitCompositionException. self should: [self t1 @ { (#a -> #m11). (#a -> #m12) }] raise: TraitCompositionException. self should: [self t1 @ { (#a -> #m11). (#b -> #a) }] raise: TraitCompositionException! ! !TraitCompositionTest methodsFor: 'testing-basic' stamp: 'SebastianTleye 6/28/2013 17:34' prior: 53354756! testPrinting | composition1 composition2 | composition1 := ((self t2 + self t1) @ { (#z -> #c) } - {#a. #b. #c } + self t3 - { #d. #e } + self t4). composition2 := self t4 @ { (#x -> #a). (#y -> #b) } + self t1 - { #a } + self t3 - { #d. #e } + self t2 - { #b. #c }. self assertPrints: composition1 printString like: 'T2 @ {#z->#c} - {#d. #e. #a. #b. #c} + (T1 @ {#z->#c} - {#d. #e. #a. #b. #c}) + (T3 - {#d. #e}) + T4'. self assertPrints: composition2 printString like: 'T4 @ {#x->#a. #y->#b} - {#b. #c. #d. #e. #a} + (T1 - {#b. #c. #d. #e. #a}) + (T3 - {#b. #c. #d. #e}) + (T2 - {#b. #c})' ! ! !TraitAlias methodsFor: 'composition' stamp: 'ST 6/5/2013 17:11'! @ anArrayOfAssociations ^TraitAlias with: subject aliases: (anArrayOfAssociations, self aliases)! ! "Monticello"! "Ring-Core-Kernel"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----an Array(9 July 2013 12:18:18 pm) Pharo.image priorSource: 10281392! ----STARTUP----an Array(9 July 2013 12:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 July 2013 12:31 pm) Pharo-30259.image priorSource: 10306327! ----STARTUP----an Array(9 July 2013 4:28:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/9/2013 16:26' prior: 43836122! commentForCurrentUpdate ^ '11150 Reshaping a class does not properly propagate the modification to the subclasses of its subclasses https://pharo.fogbugz.com/f/cases/11150 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/9/2013 16:26'! script358 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.99.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1513.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.119.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.344.mcz SlotTests-MarcusDenker.41.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.580.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.539.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/9/2013 16:26'! update30260 "self new update30260" self withUpdateLog: '11150 Reshaping a class does not properly propagate the modification to the subclasses of its subclasses https://pharo.fogbugz.com/f/cases/11150 '. self loadTogether: self script358 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/8/2013 16:05' prior: 43600868! assertClassBuiltWith: blockToBuildAClass isEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self make: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout equals: aClass layout. self assert: aClass layout equals: anotherClass layout. self assert: aClass layout hash equals: anotherClass layout hash.! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/8/2013 16:05' prior: 43601473! assertClassBuiltWith: blockToBuildAClass isNotEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self make: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout ~= anotherClass layout. self assert: aClass layout hash ~= anotherClass layout hash.! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/8/2013 16:05' prior: 43602020! assertInvalidClassName: aName self should: [ self make: [ :builder | builder name: aName ] ] raise: InvalidGlobalNameConflict. self flag: 'should remove class if not raised'. self should: [ PharoClassInstaller validateClassName: aName ] raise: InvalidGlobalNameConflict! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/8/2013 16:05' prior: 43602578! should: superclassBlock extendWith: subclassBlock | superclass | superclass := self make: superclassBlock. self make: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ]! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/8/2013 16:05' prior: 43602917! shouldnt: superclassBlock extendWith: subclassBlock | superclass | superclass := self make: superclassBlock. self should: [ self make: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ] ] raise: PrimitiveTypeConflict! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43603322! testAddAndAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass addInstVarNamed: #z. self assert: aClass instVarNames equals: #(x y z). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43604144! testAddAndRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass removeInstVarNamed: #x. self assert: aClass instVarNames equals: #(y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05' prior: 43604969! testAddClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a) ]. classAdded instVarNamed: #a put: $A. classModified := self make: [ :builder | builder classSlots: #(a b) ]. self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) isNil.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43605458! testAddInstVarNamed "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; slots: #( x ) ]. self assert: aClass instVarNames = #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: #( y ) ]. self assert: anotherClass instVarNames = #(y).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43605975! testAddInstVarNamedClassInterface "Add instance variables using the class interface" aClass := self make: [ :builder | builder name: self aClassName ]. aClass addInstVarNamed: 'x'. self assert: aClass instVarNames = #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName. ]. anotherClass addInstVarNamed: 'y'. self assert: anotherClass instVarNames = #(y).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43606530! testAddInstVarNamedWithTrait "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x y )]. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43607410! testAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05' prior: 43608190! testAddSharedPool self make: [ :builder | builder sharedPools: '' ]. aClass := self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. self assert: (aClass sharedPools includes: TestSharedPool). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05' prior: 43608532! testAddSharedVariable self make: [ :builder | builder sharedVariables: '' ]. aClass := self make: [ :builder | builder sharedVariables: 'Var' ]. self assert: aClass classVarNames equals: #(Var). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:06' prior: 43608859! testAddSlotAndMigrate "We create a class without slots and create an instance; then we add a slot and check the instance can hold a value." aClass := self makeWithLayout: PointerLayout. instance := aClass new. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarAt: 1 put: 125. aClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:07' prior: 43609414! testAddSlotPropagateAndMigrate "We create a class without slots and a subclass, and create an instance of the latter; then we add a slot to superclass and check the instance can hold a value." | superclass subclass | superclass := self makeWithLayout: PointerLayout. subclass := self make: [ :builder | builder superclass: superclass; name: self anotherClassName. ]. superclass layout checkIntegrity. subclass layout checkIntegrity. instance := subclass new. "now we extend it with slots. The class definition should've changed" superclass := self makeWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarNamed: 'aSlot' put: 42. self assert: (instance instVarNamed: 'aSlot') equals: 42. superclass layout checkIntegrity. subclass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43610229! testAnonymousSubclass aClass := self make: [ :builder | builder name: self aClassName; slots: #(x) ]. anotherClass := aClass classBuilder anonymousSubclassOf: aClass. self deny: anotherClass == aClass. self assert: anotherClass isBehavior. self assert: anotherClass superclass == aClass. self deny: anotherClass name = aClass name. self assert: anotherClass allInstVarNames = #(x)! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43768293! testBasicClassBuilding aClass := self make: [ :builder | builder name: self aClassName ]. self deny: aClass layout isNil. self assert: aClass name = self aClassName. self assert: (self class environment at: self aClassName) == aClass. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-environment' stamp: 'MartinDias 7/8/2013 16:05' prior: 43610742! testBasicEnvironment | environment | environment := SystemDictionary new. environment at: #SystemOrganization put: SystemOrganizer new. aClass := self make: [ :builder | builder environment: environment ]. self assert: (aClass environment == environment). self assert: (environment includesKey: aClass name). self assert: (environment at: aClass name) == aClass. self deny: (Smalltalk globals includesKey: aClass name).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43612108! testCannotBeRecompiled | superclass | superclass := self make: [ :builder | builder superclass: Object; name: self aClassName ]. self make: [ :builder | builder superclass: superclass; name: self anotherClassName ]. self should: [ self make: [ :builder | builder layoutClass: VariableLayout; name: self aClassName ] ] raise: Error description: 'Old class builder raises: X cannot be recompiled' ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:05' prior: 43612686! testChangingFormatKeepsMethod aClass := self make: [ :builder | builder name: self aClassName; layoutClass: PointerLayout ]. aClass compile: 'a ^self'. self assert: (aClass methodDictionary includesKey: #a). anotherClass := self make: [ :builder | builder name: self aClassName; layoutClass: VariableLayout . ]. self assert: (anotherClass methodDictionary includesKey: #a). aClass layout checkIntegrity. anotherClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43613894! testClassSlotDuplicationConflict aClass := self make: [ :builder | builder classSlots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; classSlots: { #a } ] ] raise: SlotDuplicationConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43614285! testClassSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder classSlots: { reservedName } ] ] raise: InvalidSlotNameConflict ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43614616! testClassWithClassTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder classTraitComposition: TOne ]. self assert: TOne users asArray equals: { aClass class }. self assert: TOne classTrait users isEmpty. self assert: (aClass class canUnderstand: #one). self assert: aClass one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43615097! testClassWithTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder traitComposition: TOne ]. self assert: TOne users asArray equals: { aClass }. self assert: TOne classTrait users isEmpty. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43615560! testClassWithTrait2 self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder traitComposition: TOne classTrait ]. self assert: TOne users isEmpty. self assert: TOne classTrait users asArray equals: { aClass }. self deny: (aClass canUnderstand: #one). self assert: (aClass canUnderstand: #classOne). self assert: aClass new classOne equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43616277! testDirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. self should: [ self make: [ :builder | builder superclass: classA; name: self aClassName ] ] raise: CircularHierarchyConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43616759! testIndirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-B<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. classB := self make: [ :builder | builder superclass: classA; name: self anotherClassName ]. self should: [ self make: [ :builder | builder superclass: classB; name: self aClassName ] ] raise: CircularHierarchyConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43618926! testModifyClassTraitComposition "Tests that when modifing the trait composition on class-side, the old methods are removed from the method dictionary, and the new ones are added." self make: [ :builder | builder classTraitComposition: TOne ]. aClass := self make: [ :builder | builder classTraitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass class }. self assert: TTwo classTrait users isEmpty. self deny: (aClass class canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass class canUnderstand: #two). aClass layout checkIntegrity. aClass := self make: [ :builder | builder classTraitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43620092! testModifyTraitComposition "Tests that when modifing the trait composition, the old methods are removed from the method dictionary, and the new ones are added." self make: [ :builder | builder traitComposition: TOne ]. aClass := self make: [ :builder | builder traitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass }. "self assert: TTwo classTrait users isEmpty." aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass canUnderstand: #two). aClass := self make: [ :builder | builder traitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43769330! testNewCompiledMethodClass aClass := self makeWithLayout: CompiledMethodLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self deny: aClass isWeak.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43769674! testNewPointerClass aClass := self makeWithLayout: PointerLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:06' prior: 43769979! testNewPointerClassWithSlots aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43770309! testNewVariableByteClass aClass := self makeWithLayout: ByteLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43770648! testNewVariableWordClass aClass := self makeWithLayout: WordLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05' prior: 43770987! testNewWeakClass aClass := self makeWithLayout: WeakLayout. self deny: aClass isCompact. self assert: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isWeak.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 7/8/2013 16:05' prior: 43624163! testPointerWithVariableExtensionIsNowVariable "This test case reproduces a real bug." | superclass subclass | superclass := self make: [ :builder | builder superclass: Object; name: self aClassName ]. subclass := self make: [ :builder | builder superclass: superclass; layoutClass: VariableLayout; name: self anotherClassName ]. superclass := self make: [ :builder | builder layoutClass: VariableLayout ]. self assert: superclass isVariable. self assert: subclass isVariable.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:05' prior: 43624804! testRedefineSuperclass "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: PointerLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. self makeWithLayout: PointerLayout. superclass layout checkIntegrity. class layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05' prior: 43625234! testRemoveClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a b) ]. classAdded instVarNamed: #a put: $A. classModified := self make: [ :builder | builder classSlots: #(a) ]. self assert: (classModified instVarNamed: #a) equals: $A. self should: [ classModified instVarNamed: #b ] raise: Error ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43625730! testRemoveClassTrait "Tests that when removing a trait from class-side, its methods are removed from the method dictionary." aClass := self make: [ :builder | builder classTraitComposition: TOne ]. aClass := self make: [ :builder | builder classTraitComposition: {} ]. self deny: (aClass class canUnderstand: #one). self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43626262! testRemoveInstVarNamed aClass := self make: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass := self make: [ :builder | builder name: self aClassName; slots: #(x z) ]. self assert: aClass instVarNames = #(x z).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43626648! testRemoveInstVarNamedClassInterface aClass := self make: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass removeInstVarNamed: #y. self assert: aClass instVarNames = #(x z).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/8/2013 16:05' prior: 43626969! testRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass removeInstVarNamed: #x. self assert: aClass instVarNames isEmpty. self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05' prior: 43627698! testRemoveSharedPool self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass := self make: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05' prior: 43628023! testRemoveSharedVariable self make: [ :builder | builder sharedVariables: 'Var' ]. aClass := self make: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:06' prior: 43628344! testRemoveSlotAndMigrate "We create a class with a slot and create an instance; then we remove the slot and check the instance doesn't hold the value." aClass := self makeWithLayout: PointerLayout andSlots: { #aSlot }. instance := aClass new. "it should have an instance variable" instance instVarAt: 1 put: 125. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout. self should: [ instance instVarAt: 1 ] raise: Error. aClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43628963! testRemoveTrait "Tests that when removing a trait from a class, its methods are removed from the method dictionary." self make: [ :builder | builder traitComposition: TOne ]. aClass := self make: [ :builder | builder traitComposition: {} ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self deny: (aClass canUnderstand: #one). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:59'! testReshapeSuperSuperClass | supersuperclass superclass subclass | supersuperclass := self make: [ :builder | builder superclass: Object; name: self aClassName; slots: #(a b). ]. self assert: supersuperclass subclasses isEmpty. supersuperclass layout checkIntegrity. superclass := self make: [ :builder | builder superclass: supersuperclass; name: self anotherClassName. ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses isEmpty. superclass layout checkIntegrity. supersuperclass layout checkIntegrity. subclass := self make: [ :builder | builder superclass: superclass; name: self yetAnotherClassName; slots:#(c d). ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses equals: { subclass }. self assert: subclass subclasses isEmpty. subclass layout checkIntegrity. superclass layout checkIntegrity. supersuperclass layout checkIntegrity. "reshape the super super class" supersuperclass := self make: [ :builder | builder superclass: Object; name: self aClassName; slots: #(a b a2). ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses equals: { subclass }. self assert: subclass subclasses isEmpty. subclass layout checkIntegrity. superclass layout checkIntegrity. supersuperclass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:06' prior: 43629459! testShiftSlotAndMigrate aClass := self makeWithLayout: PointerLayout andSlots: { #a. #c }. aClass compile: 'a ^a'. aClass compile: 'c ^c'. instance := aClass new. instance instVarNamed: #a put: 1. instance instVarNamed: #c put: 3. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #a. #b. #c }. "it should have added an instance variable with nil in the middle" self assert: (instance instVarAt: 1) equals: 1. self assert: (instance instVarAt: 2) equals: nil. self assert: (instance instVarAt: 3) equals: 3. self assert: (instance instVarNamed: #a) equals: 1. self assert: (instance instVarNamed: #b) equals: nil. self assert: (instance instVarNamed: #c) equals: 3. "it should have migrated methods" self assert: instance a equals: 1. self assert: instance c equals: 3. aClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43630751! testSlotDuplicationConflict aClass := self make: [ :builder | builder slots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: { #a } ] ] raise: SlotDuplicationConflict ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/8/2013 16:05' prior: 43631127! testSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder slots: { reservedName } ] ] raise: InvalidSlotNameConflict ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05' prior: 43631637! testSwitchClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a b) ]. "Add methods" classAdded class compile: 'a ^a'; compile: 'b ^b'. "Put values" classAdded instVarNamed: #a put: $A. classAdded instVarNamed: #b put: $B. "Modify the class" classModified := self make: [ :builder | builder classSlots: #(b a) ]. "The instance was migrated" self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) equals: $B. "The methods were migrated" self assert: classModified a equals: $A. self assert: classModified b equals: $B. ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/8/2013 16:06' prior: 43632424! testSwitchSlotsAndMigrate aClass := self makeWithLayout: PointerLayout andSlots: { #a. #b }. aClass compile: 'a ^a'; compile: 'b ^b'. instance := aClass new. instance instVarNamed: #a put: $A. instance instVarNamed: #b put: $B. "now we switch the slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #b. #a }. self assert: (instance instVarAt: 1) equals: $B. self assert: (instance instVarAt: 2) equals: $A. self assert: (instance instVarNamed: #a) equals: $A. self assert: (instance instVarNamed: #b) equals: $B. "it should have migrated methods" self assert: instance a equals: $A. self assert: instance b equals: $B. aClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43633220! testTraitUsersAfterClassReshape aClass := self make: [ :builder | builder name: self aClassName ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self make: [ :builder | builder name: self aClassName; slots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-traits' stamp: 'MartinDias 7/8/2013 16:05' prior: 43634685! testTraitUsersAfterMetaclassReshape aClass := self make: [ :builder | builder name: self aClassName ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self make: [ :builder | builder name: self aClassName; classSlots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05' prior: 43637492! testWithClassSlots aClass := self make: [ :builder | builder classSlots: #(a) ]. self assert: aClass class instVarNames equals: #(a). aClass instVarNamed: #a put: $A. self assert: (aClass instVarNamed: #a) equals: $A.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05' prior: 43637831! testWithSharedPool aClass := self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass class compile: 'one ^One'. self assert: (aClass sharedPools includes: TestSharedPool). self assert: aClass one = 1.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05' prior: 43638172! testWithSharedVariable aClass := self make: [ :builder | builder sharedVariables: 'Var' ]. aClass class compile: 'var:x Var:=x'; compile: 'var ^Var'. aClass var: true. self assert: aClass classVarNames equals: #(Var). self assert: aClass var.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05' prior: 43638544! testWithoutClassSlots aClass := self make: [ :builder | builder classSlots: #() ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05' prior: 43638787! testWithoutSharedPools aClass := self make: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty! ! !SlotClassBuilderSilentTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05' prior: 43639033! testWithoutSharedVariables aClass := self make: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/8/2013 17:03' prior: 43488002! apply: classModification classModification modifiesSlots ifTrue: [self applySlotChange: classModification] ifFalse: [ classModification modifiesFormat ifTrue: [ self applyFormatChange: classModification] ifFalse: [ classModification modifiesSuperclass ifTrue: [ self applySuperclassChange: classModification ] ifFalse: [ ^ self installTraitComposition: classModification ]]]. self migrateClasses: classModification; cleanUp! ! !AbstractLayout methodsFor: 'validation' stamp: 'MartinDias 7/8/2013 17:22'! checkIntegrity self checkSanity! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05' prior: 43772269! testClassAddedAnnounced SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. aClass := self makeWithLayout: PointerLayout. self assert: announcement classAdded equals: aClass.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05' prior: 43772601! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self makeWithLayout: PointerLayout. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05' prior: 43772886! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:06' prior: 43773630! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: PointerLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:06' prior: 43774328! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #aSlot }. ]! ! !SlotClassBuilderAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05' prior: 43774780! testClassRecategorizedAnnounced SystemAnnouncer uniqueInstance weak on: ClassRecategorized send: #saveAnnouncementOnce: to: self. aClass := self make: [:builder| builder category: self aCategory ]. anotherClass := self make: [:builder| builder category: self anotherCategory ]. self assert: announcement oldCategory equals: self aCategory. self assert: announcement newCategory equals: self anotherCategory. self assert: announcement classRecategorized == anotherClass.! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'MartinDias 7/8/2013 16:40'! checkInheritedSlots self host superclass ifNil: [ ^ self ]. self host layout ifNil: [ ^ self ]. self assert: (self host superclass layout size <= self host layout size) description: [ (self host name, ' does not inherit all slots from ', self host superclass name) ]. "check that the we have the same slots at the same indices as in the superclass" self host superclass layout allSlots withIndexDo: [ :slot :index| | localSlot | localSlot := (self host layout slotAt: index). self assert: slot = localSlot description: [ 'Slot "', localSlot name, '" index at position ', index asString, ' conflicts with slot "', slot name, '" in ', self host superclass asString ]].! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'MartinDias 7/8/2013 17:21'! checkIntegrity self checkSanity; checkParentScopes; checkInheritedSlots! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'MartinDias 7/8/2013 17:21'! checkParentScopes | parentScope superclassScope | parentScope := self slotScope parentScope. superclassScope := self host superclass layout slotScope. self assert: parentScope = superclassScope description: 'Parent slot scope is out of sync'! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'MartinDias 7/8/2013 15:52' prior: 41772611! checkSanity super checkSanity. self checkSlotNames; checkSlotIndices! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/8/2013 16:05'! make: anUnaryBlock "I build a class for testing, providing basic default values, but eventually customized by the received unary block." ^PharoClassInstaller make: [:builder| builder superclass: Object; name: self aClassName; layoutClass: PointerLayout; category: self aCategory. anUnaryBlock value: builder ].! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/8/2013 16:06'! makeWithLayout: aClassLayout ^self makeWithLayout: aClassLayout andSlots: {}! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/8/2013 16:06'! makeWithLayout: aClassLayout andSlots: someSlots " I create a class using the Slot class builder given a class layout and a collection of slots. " ^self make: [:builder| builder layoutClass: aClassLayout; slots: someSlots ].! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 7/5/2013 17:24' prior: 43642690! tearDown "We remove the classes that could have been created during test run" super tearDown. SystemAnnouncer uniqueInstance suspendAllWhile: [ { self aClassName. self anotherClassName. self yetAnotherClassName } do: [ :each | Smalltalk globals at: each ifPresent: [ :class | class removeFromSystem ]]]. SystemAnnouncer uniqueInstance unsubscribe: self. self cleanUpTrait: TOne; cleanUpTrait: TTwo.! ! !SlotClassBuilderTest methodsFor: 'helpers-test class names' stamp: 'MartinDias 7/5/2013 17:24'! yetAnotherClassName ^ #NewSlotTestObject3! ! !AbstractClassModification methodsFor: 'private' stamp: 'MartinDias 7/8/2013 17:03' prior: 41752790! propagate target subclassesDo: [ :subclass | propagations add: (ClassModificationPropagation propagate: self to: subclass) ]. "recursively propagate this change down" self propagationsDo: [ :propagation | propagation propagate ] ! ! SlotClassBuilderTest removeSelector: #buildClassWithLayout:andSlots:! SlotClassBuilderTest removeSelector: #buildClassWithLayout:! SlotClassBuilderTest removeSelector: #buildClassWith:! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----an Array(9 July 2013 4:28:20 pm) Pharo.image priorSource: 10306523! ----STARTUP----an Array(9 July 2013 4:46:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 July 2013 4:46:49 pm) Pharo-30260.image priorSource: 10359126! ----STARTUP----an Array(10 July 2013 10:23:05 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/10/2013 10:20' prior: 43861250! commentForCurrentUpdate ^ '11138 Implementation of user directories is a mess https://pharo.fogbugz.com/f/cases/11138 11152 Monticello not creating proper changes when moving trait methods to/from class https://pharo.fogbugz.com/f/cases/11152 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/10/2013 10:20'! script359 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1513.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.119.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.344.mcz SlotTests-MarcusDenker.41.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.580.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.542.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-MarcusDenker.20.mcz Zinc-Character-Encoding-Tests-StephaneDucasse.9.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.366.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.15.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.10.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-StephaneDucasse.188.mcz Zinc-Zodiac-StephaneDucasse.28.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-NorbertHartl.6.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/10/2013 10:20'! update30261 "self new update30261" self withUpdateLog: '11138 Implementation of user directories is a mess https://pharo.fogbugz.com/f/cases/11138 11152 Monticello not creating proper changes when moving trait methods to/from class https://pharo.fogbugz.com/f/cases/11152 '. self loadTogether: self script359 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 15:45' prior: 43544717! cache ^ self library / 'Caches'! ! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 15:47' prior: 25263933! home ^ self directoryFromEnvVariableNamed: 'HOME'! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 7/9/2013 17:24' prior: 53362182! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil priorOriginOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: []. priorMethodOrNil ifNotNil: [ priorOriginOrNil := priorMethodOrNil origin ]. "We categorize first, so the users can use the categorization at the add moment" oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: category ]. self addSelectorSilently: selector withMethod: compiledMethod. newProtocol := self organization categoryOfElement: selector. (priorMethodOrNil isNil or: [ priorOriginOrNil ~= compiledMethod origin ]) ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor] ifFalse: [ SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor]! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'EstebanLorenzano 7/9/2013 17:23' prior: 42017362! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil priorOriginOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. priorMethodOrNil ifNotNil: [ priorOriginOrNil := priorMethodOrNil origin ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. (priorMethodOrNil isNil or: [ priorOriginOrNil ~= compiledMethod origin ]) ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! !PlatformResolver methodsFor: 'private' stamp: 'DamienCassou 7/4/2013 15:44'! cantFindOriginError ^ Error signal: 'Can''t find the requested origin' ! ! !PlatformResolver methodsFor: 'private' stamp: 'DamienCassou 7/4/2013 15:47'! directoryFromEnvVariableNamed: aString ^ self directoryFromEnvVariableNamed: aString or: [ self cantFindOriginError ]! ! !PlatformResolver methodsFor: 'private' stamp: 'DamienCassou 7/4/2013 16:25'! directoryFromEnvVariableNamed: aString or: aBlock | envValue | envValue := [ Smalltalk os env at: aString ] on: Error do: [ ^ aBlock value ]. ^ envValue isEmptyOrNil ifTrue: [ aBlock value ] ifFalse: [ self resolveString: envValue ]! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 15:46' prior: 43542290! cache "http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" ^ self directoryFromEnvVariableNamed: 'XDG_CACHE_HOME' or: [ self home / '.cache' ]! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 16:11' prior: 34587988! home ^ self directoryFromEnvVariableNamed: 'HOME'! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 16:18' prior: 34588728! preferences "http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html" ^ self directoryFromEnvVariableNamed: 'XDG_CONFIG_HOME' or: [ self home / '.config' ]! ! !UnixResolver methodsFor: 'helpers' stamp: 'DamienCassou 7/4/2013 16:31' prior: 34589075! xdgParseUserDirLine: aStream "Format is XDG_xxx_DIR=""$HOME/yyy"", where yyy is a shell-escaped homedir-relative path, or XDG_xxx_DIR=""/yyy"", where /yyy is an absolute path. No other format is supported." | path firstChar | (aStream next = $") ifFalse: [ ^ nil ]. firstChar := aStream next. (#($$ $/) includes: firstChar) ifFalse: [ ^ nil ]. path := firstChar = $$ ifTrue: [ (aStream next: 5) = 'HOME/' ifFalse: [ ^ nil ]. self home / (aStream upTo: $") ] ifFalse: [ self resolveString: '/', (aStream upTo: $") ]. ^ path! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 16:49' prior: 54925121! documents ^ self home / 'Documents'! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 16:21' prior: 54925243! home "Value of the $USERPROFILE environment variable." ^ self directoryFromEnvVariableNamed: 'USERPROFILE'! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 7/4/2013 16:21' prior: 43775756! preferences ^ self directoryFromEnvVariableNamed: 'APPDATA' or: [ self home ]! ! UnixResolver removeSelector: #privNbGetEnv:! UnixResolver removeSelector: #nbGetEnv:! !Trait method! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil priorOriginOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. priorMethodOrNil ifNotNil: [ priorOriginOrNil := priorMethodOrNil origin ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. (priorMethodOrNil isNil or: [ priorOriginOrNil ~= compiledMethod origin ]) ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! "FileSystem-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(10 July 2013 10:23:14 am) Pharo.image priorSource: 10359323! ----STARTUP----an Array(10 July 2013 10:44:56 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 July 2013 10:44:57 am) Pharo-30261.image priorSource: 10377398! !ZnByteStringBecameWideString commentStamp: '' prior: 0! I am ZnByteStringBecameWideString, a Notification signalled to indicate that some byteString was changed to a wideString. Used by ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid a #becomeForward: when a ByteString automagically changes into a WideString. Part of Zinc HTTP Components.! !ZnInvalidUTF8 commentStamp: '' prior: 42815858! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! !ZnByteStringBecameWideString commentStamp: '' prior: 43932194! I am ZnByteStringBecameWideString, a Notification signalled to indicate that some byteString was changed to a wideString. Used by ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid a #becomeForward: when a ByteString automagically changes into a WideString. Part of Zinc HTTP Components.! ----STARTUP----an Array(10 July 2013 11:00:02 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ZnByteStringBecameWideString class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 6/11/2013 15:00'! convert: byteString "Convert byteString to a wideString, signalling a notification" | wideString | wideString := WideString from: byteString. self new byteString: byteString; wideString: wideString; signal. ^ wideString! ! !ZnByteStringBecameWideString methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 14:44'! byteString ^ byteString! ! !ZnByteStringBecameWideString methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 14:44'! byteString: anObject byteString := anObject! ! !ZnByteStringBecameWideString methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 14:44'! wideString ^ wideString! ! !ZnByteStringBecameWideString methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 14:44'! wideString: anObject wideString := anObject! ! !ZnUTF8Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 6/10/2013 20:52'! decodeBytes: bytes "Overridden to prevent the automagic switch from ByteString to WideString and the slow #becomeForward: in there. See also #decodeBytesIntoWideString:" | byteStream | byteStream := bytes readStream. ^ String streamContents: [ :stream | [ byteStream atEnd ] whileFalse: [ | char | char := self nextFromStream: byteStream. (char isOctetCharacter not and: [ stream originalContents isWideString not ]) ifTrue: [ | wideString position | position := stream position. wideString := WideString from: stream originalContents. stream on: wideString; setFrom: position + 1 to: position ]. stream nextPut: char ] ] ! ! !ZnUTF8Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 6/10/2013 20:53'! decodeBytesIntoWideString: bytes "Variant of #decodeBytes: that is faster when you know upfront that a WideString is probably needed" | byteStream | byteStream := bytes readStream. ^ WideString streamContents: [ :stream | [ byteStream atEnd ] whileFalse: [ stream nextPut: (self nextFromStream: byteStream) ] ] ! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 6/4/2013 16:58'! errorOverlong self error: 'Overlong encoding (non-shortest form)'! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 6/4/2013 17:21' prior: 39586435! nextFromStream: stream | code byte next | (byte := stream next) < 128 ifTrue: [ ^ Character codePoint: byte ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ code := byte bitAnd: 2r00011111. ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ]. code < 128 ifTrue: [ self errorOverlong ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ code := byte bitAnd: 2r00001111. 2 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ] ]. code < 2048 ifTrue: [ self errorOverlong ]. code = 65279 "Unicode Byte Order Mark" ifTrue: [ stream atEnd ifTrue: [ self errorIncomplete ]. ^ self nextFromStream: stream ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ code := byte bitAnd: 2r00000111. 3 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self error ] ]. code < 65535 ifTrue: [ self errorOverlong ]. ^ Character codePoint: code ]. self error! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/11/2013 16:13' prior: 39588549! optimizedReadInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd. Optimized based on the assumption that most decoded characters will be ASCII. I signal a ZnByteStringBecameWideString notification if necessary." | stringBuffer byteBuffer bytesRead read last next count readStream bytesLeft char | stringBuffer := string. "Start by reading the minimum amount of bytes for decoding requestedCount characters" byteBuffer := ByteArray new: requestedCount. bytesRead := stream readInto: byteBuffer startingAt: 1 count: requestedCount. readStream := byteBuffer readStream. read := 0. last := offset. next := self findFirstNonASCIIIn: byteBuffer startingAt: last. (next = 0 or: [ bytesRead < next ]) ifTrue: [ "The whole input is ASCII" self replace: stringBuffer from: offset to: offset + bytesRead - 1 with: byteBuffer startingAt: 1. ^ bytesRead ]. [ next > last ifTrue: [ "Copy the ASCII run from last to next" count := next - last. self replace: stringBuffer from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Read one UTF-8 encoded non ASCII character" readStream position: next - 1. count := self encodingLengthFor: readStream peek. bytesLeft := bytesRead - next + 1. count <= bytesLeft ifTrue: [ char := self nextFromStream: readStream. (char isOctetCharacter not and: [ stringBuffer isWideString not ]) ifTrue: [ stringBuffer := ZnByteStringBecameWideString convert: stringBuffer ]. stringBuffer at: offset + read put: char ] ifFalse: [ | tmpBuffer extraRead | tmpBuffer := ByteArray new: count. readStream readInto: tmpBuffer startingAt: 1 count: bytesLeft. extraRead := stream readInto: tmpBuffer startingAt: bytesLeft + 1 count: count - bytesLeft. extraRead = (count - bytesLeft) ifFalse: [ self error: 'incomplete utf-8 encoding' ]. char := self nextFromStream: tmpBuffer readStream. (char isOctetCharacter not and: [ stringBuffer isWideString not ]) ifTrue: [ stringBuffer := ZnByteStringBecameWideString convert: stringBuffer ]. stringBuffer at: offset + read put: char ]. last := next + count. read := read + 1. "Iterate" next := self findFirstNonASCIIIn: byteBuffer startingAt: last. next = 0 or: [ bytesRead < next ] ] whileFalse. bytesRead < last ifFalse: [ "There is a last ASCII run left" count := bytesRead - last + 1. self replace: stringBuffer from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Try consuming enough input to reach requestedCount since we probably read too little" count := requestedCount - read. ^ read + (self originalReadInto: stringBuffer startingAt: offset + read count: count fromStream: stream)! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/11/2013 15:04'! originalReadInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd. I signal a ZnByteStringBecameWideString notification if necessary" | stringBuffer | stringBuffer := string. 0 to: requestedCount - 1 do: [ :count | | char | stream atEnd ifTrue: [ ^ count ]. char := self nextFromStream: stream. (char isOctetCharacter not and: [ stringBuffer isWideString not ]) ifTrue: [ stringBuffer := ZnByteStringBecameWideString convert: stringBuffer ]. stringBuffer at: offset + count put: char ]. ^ requestedCount! ! !ZnUTF8Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 6/11/2013 15:18' prior: 39591104! readInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd. The clean code is in my superclass" ^ self optimizedReadInto: string startingAt: offset count: requestedCount fromStream: stream! ! !ZnInvalidUTF8 commentStamp: '' prior: 43932558! I am ZnInvalidUTF8. I am a ZnCharacterEncodingError. I am an Error. I signal when something goes wrong while encoding or decoding UTF8. Part of Zinc HTTP Components! ZnInvalidUTF8 removeSelector: #string:! ZnInvalidUTF8 removeSelector: #messageText! ZnInvalidUTF8 removeSelector: #isResumable! "Zinc-Character-Encoding-Core"! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 16:17'! testReadIntoStartingAtCountFromStreamWide | encoder | encoder := ZnUTF8Encoder new. { 'abc', (WideString withAll: { 300 asCharacter. 400 asCharacter. 500 asCharacter}), 'xyz' } do: [ :each | | bytes buffer notified | bytes := encoder encodeString: each. buffer := String new: each size. notified := false. [ encoder readInto: buffer startingAt: 1 count: each size fromStream: bytes readStream ] on: ZnByteStringBecameWideString do: [ :notification | self deny: notified. notified := true. buffer := notification wideString. notification resume ]. self assert: notified. self assert: buffer equals: each ] ! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 17:19'! testUTF8ByteOrderMark "The Unicode Byte Order Mark (BOM) should be skipped." | bom string bytes encoder | encoder := ZnUTF8Encoder new. bom := #(239 187 191). string := 'élève en Français'. bytes := encoder encodeString: string. self assert: (encoder decodeBytes: bom, bytes) equals: string. self should: [ encoder decodeBytes: bom ] raise: ZnInvalidUTF8 ! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/10/2013 23:12'! testUTF8EncoderWide | encoder | encoder := ZnUTF8Encoder new. { 'abc'. 'élève en Français'. 'Pra-ská' copy at: 4 put: (Character value: 382); yourself. '' } do: [ :each | | bytes | bytes := self encodeString: each with: encoder. self assert: (encoder decodeBytesIntoWideString: bytes) equals: each ]! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 16:56'! testUTF8Overlong "Overlong encoding, aka Non shortest form characters should be rejected. See http://en.wikipedia.org/wiki/UTF-8#Overlong_encodings" self should: [ ZnUTF8Encoder new decodeBytes: #[ 16rF0 16r82 16r82 16rAC ] ] raise: ZnInvalidUTF8. self should: [ ZnUTF8Encoder new decodeBytes: #(193 129 193 130 193 131 ) ] raise: ZnInvalidUTF8. ! ! "Zinc-Character-Encoding-Tests"! !ZnMimeType methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 6/7/2013 11:54' prior: 39638038! = other "#matches should be used instead of #= to ignore parameters." ^ (self class == other class) and: [ self main = other main and: [ self sub = other sub and: [ self hasParameters not & other hasParameters not or: [ self parameters = other parameters ] ] ] ] ! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/7/2013 11:02' prior: 55565383! isBinary "answers whether the contents of a document of the receiving mime type are binary" | subTypes | self main = 'text' ifTrue: [ ^ false ]. (self matches: self class applicationJson) ifTrue: [ ^ false ]. self main = 'application' ifFalse: [ ^ true ]. subTypes := self sub subStrings: '+'. ^ subTypes noneSatisfy: [ :each | #('x-javascript' 'xml') includes: each ]! ! !ZnMimeType methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:51' prior: 55562553! main: aString main := aString asLowercase! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/7/2013 11:53' prior: 55566515! matches: aMimeType "Compare the receiver to aMimeType, which is the pattern to match, it is a normal instance where main or sub can be wildcards. Matches should be used instead of #= to ignore parameters." ^ (aMimeType main = '*' or: [ aMimeType main = self main ]) and: [ aMimeType sub = '*' or: [ aMimeType sub = self sub ] ]! ! !ZnMimeType methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:51' prior: 55563077! sub: aString sub := aString asLowercase! ! "Zinc-Resource-Meta-Core"! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/7/2013 11:46'! testIsBinary self assert: ZnMimeType applicationOctetStream isBinary. self assert: ZnMimeType imagePng isBinary. self deny: ZnMimeType textPlain isBinary. self deny: ZnMimeType textHtml isBinary. self deny: ZnMimeType textJavascript isBinary. self deny: ZnMimeType applicationJson isBinary. #( 'text/plain;charset=ascii' 'application/json;charset=utf-8' ) do: [ :each | self deny: each asZnMimeType isBinary ]! ! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 7/8/2013 14:31'! testMatches #( ( 'text/plain' 'text/*' ) ( 'text/plain' '*/*' ) ( 'text/plain;charset=utf-8' 'text/*' ) ( 'text/plain;charset=utf-8' 'text/plain' ) ( 'text/plain' 'text/plain;charset=utf-8' ) ( 'text/plain;charset=utf-8' 'text/plain;charset=ascii' ) ) do: [ :each | self deny: each first asZnMimeType = each second asZnMimeType. self assert: (each first asZnMimeType matches: each second asZnMimeType) ]! ! "Zinc-Resource-Meta-Tests"! !ZnDefaultServerDelegate commentStamp: '' prior: 42811837! I am ZnDefaultServerDelegate. I function as a delegate for ZnServer, implementing #handleRequest: I implement responses to the following prefixes: /echo - an echo text of request information for debugging purposes /dw-bench - a dynamic html page for benchmarking purposes /unicode - a unicode test page /random - a random string (/random/32 for a specific size) /bytes - bytes according to a pattern (/bytes/32 for a specific size) /favicon.ico - a Zn favicon /status - a server status page /error - force server errors /session - a simpler session based counter /help - lists all page prefixes / - an html welcome page Without any matches, I respond with a page not found. Part of Zinc HTTP Components.! !ZnEasy commentStamp: '' prior: 42813308! I am ZnEasy, a simplified HTTP client for occasional use. My class side implements a number of convenience methods to do common HTTP client operations. ZnEasy get: 'http://zn.stfx.eu/zn/small.html'. For most requests, I return a response object. For a couple of message, I return an image Form. ZnEasy getPng: 'http://www.pharo-project.org/images/pharo.png'. For my implementation I use ZnClient, a full featured HTTP client. Part of Zinc HTTP Components.! !ZnImageExampleDelegate commentStamp: '' prior: 0! I am ZnImageExampleDelegate. I am a implementation of the web app in 'Building and deploying your first web app in Pharo'. I serve an image that web clients can change by uploading a new one. ZnServer startDefaultOn: 1701. ZnImageExampleDelegate installInDefaultServer. ZnServer stopDefault. I implement the following API or resources GET /image - returns an HTML page showing our image and a form to upload a new image GET /image?raw=true - directly serves the last uploaded image POST /image - handler accepting a multipart form data entity with a file part containing GIF, JPEG or PNG bytes Part of Zinc HTTP Components.! !ZnServer commentStamp: '' prior: 42825718! I am ZnServer, an abstract superclass of HTTP Servers. I am a facade for controlling a default server implementation. I delegate my public class protocol methods to #defaultServerClass. ZnServer startDefaultOn: 1701. ZnClient new get: 'http://localhost:1701'. Subclasses can register with me to have start/stop sent to them on System startUp/shutDown. The default server instance will be registered automatically when it is started. Part of Zinc HTTP Components.! !ZnSingleThreadedServer commentStamp: '' prior: 42826840! I am ZnSingleThreadedServer. I can be customized with a delegate (#handleRequest:) and an authenticator (#authenticateRequest:do:). ZnSingleThreadedServer startDefaultOn: 1701. ZnSingleThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient new username: 'foo' password: 'secret'; get: 'http://localhost:1701'. I use ZnDefaultServerDelegate when no other delegate is set. I am single threaded, I run in a single process. I close connections after each request/response cycle. Part of Zinc HTTP Components.! !ZnMultiThreadedServer commentStamp: '' prior: 42820544! I am ZnMultiThreadedServer. I inherit most features from ZnSingleThreadedServer. ZnMultiThreadedServer startDefaultOn: 1701. ZnMultiThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient new username: 'foo' password: 'secret'; get: 'http://localhost:1701'. I am multi threaded, I fork a new process for each incoming request. I try to keep connections alive in each process. Part of Zinc HTTP Components.! !ZnManagingMultiThreadedServer commentStamp: '' prior: 42817718! ZnManagingMultiThreadedServer is a ZnMultiThreadedServer that manages the socket stream connections used by the worker threads that are spawned. ZnManagingMultiThreadedServer startDefaultOn: 1701. I keep track of all the connections that I spawn so that I can close them when I am stopped. Part of Zinc HTTP Components.! !ZnUtils class methodsFor: 'streaming' stamp: 'SvenVanCaekenberghe 6/11/2013 14:04' prior: 55782231! readUpToEnd: inputStream limit: limit | species bufferSize buffer totalRead outputStream | bufferSize := limit ifNil: [ self streamingBufferSize ] ifNotNil: [ self streamingBufferSize min: limit ]. species := inputStream isBinary ifTrue: [ ByteArray ] ifFalse: [ String ]. buffer := species new: bufferSize. totalRead := 0. outputStream := nil. [ inputStream atEnd ] whileFalse: [ | readCount | readCount := inputStream readInto: buffer startingAt: 1 count: bufferSize. totalRead := totalRead + readCount. (limit notNil and: [ totalRead > limit ]) ifTrue: [ ZnEntityTooLarge signal ]. outputStream ifNil: [ inputStream atEnd ifTrue: [ ^ buffer copyFrom: 1 to: readCount ] ifFalse: [ outputStream := (species new: bufferSize) writeStream ] ]. outputStream next: readCount putAll: buffer startingAt: 1. self signalProgress: totalRead total: limit ]. ^ outputStream ifNil: [ species new ] ifNotNil: [ outputStream contents ]! ! !ZnStreamingEntity class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 14:43'! matches: mimeType "I have no designated mime type, I can handle all content. See #concreteSubclassForType: " ^ false! ! !ZnMimePart methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 6/11/2013 11:24'! printOn: stream super printOn: stream. stream nextPut: $(. self hasEntity ifTrue: [ self entity printContentTypeAndLengthOn: stream ]. stream nextPut: $) ! ! !ZnEntity class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/4/2013 15:27' prior: 55456724! concreteSubclassForType: mimeType binary: forceBinary "Answer the concrete ZnEntity subclass that handles mimeType" ^ self allSubclasses detect: [ :each | each matches: mimeType ] ifNone: [ (mimeType isBinary or: [ forceBinary ]) ifTrue: [ self byteArrayEntityClass ] ifFalse: [ self stringEntityClass ] ] ! ! !ZnEntity class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 14:43'! matches: mimeType "Return whether a given mimeType can be handled by instances of the receiver" ^ mimeType matches: self designatedMimeType ! ! !ZnEntity methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/4/2013 15:25' prior: 39577970! contentType: object "We only allow assignment compatible with our designated mime type" | newType | newType := object asZnMimeType. contentType = newType ifTrue: [ ^ self ] ifFalse: [ (self class designatedMimeType isNil or: [ self class matches: newType ]) ifTrue: [ contentType := newType ] ]! ! !ZnDefaultServerDelegate commentStamp: '' prior: 43946517! I am ZnDefaultServerDelegate. I function as a delegate for ZnServer, implementing #handleRequest: I implement responses to the following prefixes: /echo - an echo text of request information for debugging purposes /dw-bench - a dynamic html page for benchmarking purposes /unicode - a unicode test page /random - a random string (/random/32 for a specific size) /bytes - bytes according to a pattern (/bytes/32 for a specific size) /favicon.ico - a Zn favicon /status - a server status page /error - force server errors /session - a simpler session based counter /help - lists all page prefixes / - an html welcome page Without any matches, I respond with a page not found. Part of Zinc HTTP Components.! !ZnEasy commentStamp: '' prior: 43947280! I am ZnEasy, a simplified HTTP client for occasional use. My class side implements a number of convenience methods to do common HTTP client operations. ZnEasy get: 'http://zn.stfx.eu/zn/small.html'. For most requests, I return a response object. For a couple of message, I return an image Form. ZnEasy getPng: 'http://www.pharo-project.org/images/pharo.png'. For my implementation I use ZnClient, a full featured HTTP client. Part of Zinc HTTP Components.! !ZnImageExampleDelegate commentStamp: '' prior: 43947810! I am ZnImageExampleDelegate. I am a implementation of the web app in 'Building and deploying your first web app in Pharo'. I serve an image that web clients can change by uploading a new one. ZnServer startDefaultOn: 1701. ZnImageExampleDelegate installInDefaultServer. ZnServer stopDefault. I implement the following API or resources GET /image - returns an HTML page showing our image and a form to upload a new image GET /image?raw=true - directly serves the last uploaded image POST /image - handler accepting a multipart form data entity with a file part containing GIF, JPEG or PNG bytes Part of Zinc HTTP Components.! !ZnImageExampleDelegate class methodsFor: 'public' stamp: 'SvenVanCaekenberghe 7/6/2013 00:12'! installInDefaultServer "Assuming the default server has the default delegate, install ourself under /image" ZnServer default delegate map: 'image' to: self new! ! !ZnImageExampleDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/5/2013 23:34'! downloadPharoLogo ^ ZnClient new beOneShot get: 'http://www.pharo-project.org/images/pharo.png'; entity! ! !ZnImageExampleDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/6/2013 00:01'! form ^ self formForImageEntity: self image ! ! !ZnImageExampleDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/6/2013 00:10'! formForImageEntity: imageEntity "Parse the actual bytes of imageEntity and return a Form." | imageType parserClassName parserClass parser | imageType := imageEntity contentType sub. parserClassName := imageType asUppercase, #ReadWriter. parserClass := Smalltalk globals at: parserClassName asSymbol. parser := parserClass on: imageEntity readStream. ^ parser nextImage ! ! !ZnImageExampleDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 7/6/2013 00:07'! handleGetRequest: request "GET /image - Serve an HTML page showing our image and a form to upload a new one. GET /image?raw=true - Serve the last image directly" ^ (request uri queryAt: #raw ifAbsent: [ nil ]) ifNil: [ ZnResponse ok: (ZnEntity html: self html) ] ifNotNil: [ ZnResponse ok: self image ]! ! !ZnImageExampleDelegate methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 7/6/2013 11:42'! handlePostRequest: request "POST /image - change the image and show the result. Do full error checking before accepting the newly uploaded image" | part newImage badRequest | badRequest := [ ^ ZnResponse badRequest: request ]. (request hasEntity and: [ request contentType matches: ZnMimeType multiPartFormData ]) ifFalse: badRequest. part := request entity partNamed: #file ifNone: badRequest. newImage := part entity. (newImage notNil and: [ newImage contentType matches: 'image/*' asZnMimeType ]) ifFalse: badRequest. [ self formForImageEntity: newImage ] on: Error do: badRequest. image := newImage. ^ ZnResponse redirect: #image ! ! !ZnImageExampleDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 7/6/2013 11:43'! handleRequest: request "Dispatch between GET and POST on /image" request uri path = #image ifTrue: [ request method = #GET ifTrue: [ ^ self handleGetRequest: request ]. request method = #POST ifTrue: [ ^ self handlePostRequest: request ] ]. ^ ZnResponse notFound: request uri! ! !ZnImageExampleDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/6/2013 11:43'! html ^ 'Image

Image


Change the image:

'! ! !ZnImageExampleDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/6/2013 00:09'! image "Return the current image entity. Use a default when not yet set." ^ image ifNil: [ image := self downloadPharoLogo ]! ! !ZnImageExampleDelegate methodsFor: 'public' stamp: 'SvenVanCaekenberghe 7/5/2013 14:28'! value: request "I implement the generic #value: message as equivalent to #handleRequest:" ^ self handleRequest: request! ! !ZnServer commentStamp: '' prior: 43948506! I am ZnServer, an abstract superclass of HTTP Servers. I am a facade for controlling a default server implementation. I delegate my public class protocol methods to #defaultServerClass. ZnServer startDefaultOn: 1701. ZnClient new get: 'http://localhost:1701'. Subclasses can register with me to have start/stop sent to them on System startUp/shutDown. The default server instance will be registered automatically when it is started. Part of Zinc HTTP Components.! !ZnSingleThreadedServer commentStamp: '' prior: 43949048! I am ZnSingleThreadedServer. I can be customized with a delegate (#handleRequest:) and an authenticator (#authenticateRequest:do:). ZnSingleThreadedServer startDefaultOn: 1701. ZnSingleThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient new username: 'foo' password: 'secret'; get: 'http://localhost:1701'. I use ZnDefaultServerDelegate when no other delegate is set. I am single threaded, I run in a single process. I close connections after each request/response cycle. Part of Zinc HTTP Components.! !ZnMultiThreadedServer commentStamp: '' prior: 43949683! I am ZnMultiThreadedServer. I inherit most features from ZnSingleThreadedServer. ZnMultiThreadedServer startDefaultOn: 1701. ZnMultiThreadedServer default authenticator: (ZnBasicAuthenticator username: 'foo' password: 'secret'). ZnClient new username: 'foo' password: 'secret'; get: 'http://localhost:1701'. I am multi threaded, I fork a new process for each incoming request. I try to keep connections alive in each process. Part of Zinc HTTP Components.! !ZnManagingMultiThreadedServer commentStamp: '' prior: 43950226! ZnManagingMultiThreadedServer is a ZnMultiThreadedServer that manages the socket stream connections used by the worker threads that are spawned. ZnManagingMultiThreadedServer startDefaultOn: 1701. I keep track of all the connections that I spawn so that I can close them when I am stopped. Part of Zinc HTTP Components.! !ZnMultiPartFormDataEntity class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 09:25'! matches: mimeType ^ mimeType matches: 'multipart/*' asZnMimeType! ! !ZnMultiPartFormDataEntity methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:43' prior: 39592031! contentType: object "We only allow assignment compatible with our designated mime type. The main/sub must be equal but the parameters must be allowed to be different" | newType | newType := object asZnMimeType. (self class matches: newType) ifTrue: [ contentType := newType ]! ! !ZnMultiPartFormDataEntity methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/11/2013 11:32' prior: 55586241! parse: bytes boundary: boundary | next start fullBoundary | fullBoundary := '--' asByteArray, boundary. "Sometimes there is whitespace in front of the first boundary" start := (bytes indexOfSubCollection: fullBoundary startingAt: 1) + 1. next := bytes indexOfSubCollection: fullBoundary startingAt: start ifAbsent: [ bytes size ]. [ next < (bytes size - 2) ] whileTrue: [ | partReadStream | partReadStream := ReadStream on: bytes from: start + 2 to: next - 3. self addPart: (ZnMimePart readFrom: partReadStream). start := next + fullBoundary size. next := bytes indexOfSubCollection: fullBoundary startingAt: start ifAbsent: [ bytes size ] ]! ! !ZnStringEntity class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 14:44'! matches: mimeType "I have no designated mime type, I can handle all non-binary content. See #concreteSubclassForType: " ^ false! ! !ZnStringEntity methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/30/2013 20:49' prior: 39579484! readFrom: stream | buffer totalRead read readStream stringStream total | total := self contentLength. readStream := total ifNotNil: [ ZnLimitedReadStream on: stream limit: total ] ifNil: [ stream ]. buffer := String new: (ZnUtils streamingBufferSize min: (total ifNil: [ ZnUtils streamingBufferSize ])). stringStream := nil. totalRead := 0. self initializeEncoder. [ readStream atEnd ] whileFalse: [ [ read := encoder readInto: buffer startingAt: 1 count: buffer size fromStream: readStream ] on: ZnByteStringBecameWideString do: [ :notification | buffer := notification wideString. stringStream ifNotNil: [ | wideString position | position := stringStream position. wideString := WideString from: stringStream originalContents. stringStream on: wideString; setFrom: position + 1 to: position ]. notification pass ]. totalRead := totalRead + read. totalRead > ZnConstants maximumEntitySize ifTrue: [ ZnEntityTooLarge signal ]. stringStream ifNil: [ readStream atEnd ifTrue: [ ^ self string: (buffer copyFrom: 1 to: read) ] ifFalse: [ stringStream := (total ifNil: [ buffer species new ] ifNotNil: [ buffer species new: total ]) writeStream ] ]. stringStream next: read putAll: buffer startingAt: 1. ZnUtils signalProgress: totalRead total: total ]. self string: (stringStream ifNil: [ String new ] ifNotNil: [ stringStream contents ])! ! !ZnHeaders methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/11/2013 10:03' prior: 55508238! extendHeaderAt: key from: line "The value of a continuation header line is concatenated, keeping the whitespace, but without the CRLF" | existingValue newValue | existingValue := self at: key. newValue := existingValue isArray ifTrue: [ | last | last := existingValue size. existingValue at: last put: ((existingValue at: last) , line). existingValue ] ifFalse: [ existingValue , line ]. self at: key put: newValue! ! !ZnHeaders methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/11/2013 09:48' prior: 55506390! readFrom: stream | line reader | reader := ZnLineReader on: stream. [ (line := reader nextLine) isEmpty ] whileFalse: [ | key | key := self readOneHeaderFrom: line readStream. "Continuation header lines start with a space or tab" [ stream atEnd not and: [ #[ 32 9 ] includes: stream peek ] ] whileTrue: [ self extendHeaderAt: key from: reader nextLine ] ] ! ! !ZnByteArrayEntity class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/4/2013 14:43'! matches: mimeType "I have no designated mime type, I can handle all binary content. See #concreteSubclassForType: " ^ false! ! "Zinc-HTTP"! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:13' prior: 55681500! port ^ 1700 + 10 atRandom! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:13' prior: 55681614! withServerDo: block | server | server := ZnServer on: self port. [ server start. self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnDispatcherDelegateTest methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:08' prior: 55441556! withServerDo: block | server | server := ZnServer on: 1700 + 10 atRandom. [ server start. self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:34' prior: 55510542! testMergeValued | headers | headers := ZnHeaders new. headers at: 'Set-Cookie' put: 'foo=1'. headers at: 'Set-Cookie' put: 'bar=1' ifPresentMerge: [ :old :new | old, ';', new ]. self assert: (headers at: 'Set-Cookie') equals: 'foo=1;bar=1' ! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:34' prior: 55510873! testMultiValued | headers | headers := ZnHeaders new. headers at: 'Set-Cookie' put: 'foo=1'. headers at: 'Set-Cookie' add: 'bar=1'. self assert: (headers at: 'Set-Cookie') equals: #('foo=1' 'bar=1') ! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:34' prior: 55511163! testMultiValuedStreaming | headers keysAndValues | headers := ZnHeaders new. headers at: 'Set-Cookie' put: 'foo=1'. headers at: 'Set-Cookie' add: 'bar=1'. keysAndValues := OrderedCollection streamContents: [ : stream | headers headersDo: [ :key :value | stream nextPut: key; nextPut: value ] ]. self assert: keysAndValues equals: #('Set-Cookie' 'foo=1' 'Set-Cookie' 'bar=1') asOrderedCollection ! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:35' prior: 55511657! testNormalization | headers | headers := ZnHeaders new. headers at: 'content-TYPE' put: 'text/plain'. self assert: (headers includesKey: 'content-type'). self assert: (headers includesKey: 'content-TYPE'). self assert: (headers at: 'Content-Type') equals: 'text/plain'. headers at: 'CONTENT-type' put: 'text/html'. self assert: (headers at: 'Content-Type') equals: 'text/html'. ! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:35' prior: 55512121! testReading | string headers | string := 'Content-Type: text/plain', String crlf, 'Content-Length: 128', String crlf. headers := ZnHeaders readFrom: string asByteArray readStream. self assert: (headers includesKey: 'Content-Type'). self assert: (headers includesKey: 'Content-Length'). self assert: (headers at: 'Content-Type') equals: 'text/plain'. self assert: (headers at: 'Content-Length') equals: '128'.! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:35' prior: 55512601! testReadingMultiline | string headers | string := 'Content-Type: text/plain', String crlf, 'Long: foo', String crlf, ' bar', String crlf, String tab, 'baz', String crlf, 'Content-Length: 128', String crlf. headers := ZnHeaders readFrom: string asByteArray readStream. self assert: (headers includesKey: 'Content-Type'). self assert: (headers includesKey: 'Content-Length'). self assert: (headers at: 'Content-Type') equals: 'text/plain'. self assert: (headers at: 'Content-Length') equals: '128'. self assert: (headers includesKey: #Long). self assert: (headers at: #long) equals: 'foo bar baz'.! ! !ZnHeadersTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:38'! testReadingMultilineMultiValue | string headers | string := 'Content-Type: text/plain', String crlf, 'Long: foo', String crlf, ' bar', String crlf, String tab, 'baz', String crlf, 'Content-Length: 128', String crlf, 'Long: more', String crlf. headers := ZnHeaders readFrom: string asByteArray readStream. self assert: (headers at: #long) equals: #( 'foo bar baz' 'more').! ! !ZnStaticFileServerDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:08' prior: 55710525! withServerDo: block | server staticFileServerDelegate | server := ZnServer on: 1700 + 10 atRandom. [ (staticFileServerDelegate := ZnStaticFileServerDelegate new) prefixFromString: 'local-files'; directory: ZnFileSystemUtils defaultDirectory; mimeTypeExpirations: ZnStaticFileServerDelegate defaultMimeTypeExpirations. server delegate: staticFileServerDelegate. server start. self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnMessageBenchmark class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/11/2013 13:25' prior: 39648784! responses ^ #( simpleResponse textResponse8k textResponse64k textResponse256k textResponseWide8k textResponseWide64k textResponseWide256k asciiResponse8k asciiResponse64k asciiResponse256k binaryResponse8k binaryResponse64k binaryResponse256k )! ! !ZnMessageBenchmark methodsFor: 'private' stamp: 'SvenVanCaekenberghe 6/11/2013 13:23'! randomUnicodeWideString: count | alphabet | "This is about 6% non-ASCII characters, 6% non-octet characters, always a WideString" alphabet := '0123456789ABCDEF-élève en Français-0123456789ABCDEF', (WideString withAll: (#(300 400 500) collect: [ :each | each asCharacter ])). ^ WideString new: count streamContents: [ :stream | count timesRepeat: [ stream nextPut: alphabet atRandom ] ]! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/11/2013 13:24'! textResponseWide256k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeWideString: 256 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/11/2013 13:24'! textResponseWide64k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeWideString: 64 * 1024))! ! !ZnMessageBenchmark methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 6/11/2013 13:25'! textResponseWide8k message := ZnResponse ok: (ZnEntity with: (self randomUnicodeWideString: 8 * 1024))! ! !ZnEasyTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:08' prior: 55450160! withServerDo: block | server | server := ZnServer on: 1700 + 10 atRandom. [ server start. self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnImageExampleDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/5/2013 17:02'! image ^ ZnClient new beOneShot; get: 'http://zn.stfx.eu/zn/Hot-Air-Balloon.gif'; entity! ! !ZnImageExampleDelegateTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 7/7/2013 20:20'! testDefaultImage self withServerDo: [ :server | | client | client := ZnClient new. client url: server localUrl; addPath: #image; queryAt: #raw put: #true. client get. self assert: client isSuccess. self assert: (client entity contentType matches: 'image/*' asZnMimeType). self assert: client entity equals: server delegate image. client close ]! ! !ZnImageExampleDelegateTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 7/7/2013 20:21'! testMainPage self withServerDo: [ :server | | client | client := ZnClient new. client url: server localUrl; addPath: #image. client get. self assert: client isSuccess. self assert: (client entity contentType matches: ZnMimeType textHtml). self assert: (client contents includesSubstring: 'Image'). client close ]! ! !ZnImageExampleDelegateTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 7/7/2013 20:21'! testUpload self withServerDo: [ :server | | image client | image := self image. client := ZnClient new. client url: server localUrl; addPath: #image. client addPart: (ZnMimePart fieldName: #file entity: image). client post. self assert: client isSuccess. client resetEntity; queryAt: #raw put: #true. client get. self assert: client isSuccess. self assert: client entity equals: image. client close ]! ! !ZnImageExampleDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:08'! withServerDo: block | server | server := ZnServer on: 1700 + 10 atRandom. [ server start. self assert: server isRunning & server isListening. server delegate: ZnImageExampleDelegate new. block cull: server ] ensure: [ server stop ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/11/2013 10:33' prior: 55381338! testGetGeoIP | result client | result := (client := ZnClient new) systemPolicy; url: 'http://easy.t3-platform.net/rest/geo-ip'; queryAt: 'address' put: '81.83.7.35'; accept: ZnMimeType applicationJson; contentReader: [ :entity | Smalltalk globals at: #NeoJSONReader ifPresent: [ :parserClass | parserClass fromString: entity contents ] ifAbsent: [ ^ self ] ]; ifFail: [ ^ self fail ]; get. self assert: result isDictionary. self assert: (result at: #country) = 'BE'. client close.! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/30/2013 20:48'! testGetLargeWideStringHTML | client text | text := '{1}

Czech is in Czech {2}e{2}tina.

{3}' format: { String new: ZnUtils streamingBufferSize withAll: $X. 269 asCharacter. 353 asCharacter }. self assert: text isWideString. self withServerDo: [ :server | server onRequestRespond: [ :request | ZnResponse ok: (ZnEntity html: text) ]. (client := ZnClient new) get: server localUrl. self assert: client isSuccess. self assert: client response contents equals: text. client close ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 6/30/2013 20:42'! testGetWideStringHTML | client text | text := '

Czech is in Czech {1}e{2}tina.

' format: { 269 asCharacter. 353 asCharacter}. self assert: text isWideString. self withServerDo: [ :server | server onRequestRespond: [ :request | ZnResponse ok: (ZnEntity html: text) ]. (client := ZnClient new) get: server localUrl. self assert: client isSuccess. self assert: client response contents equals: text. client close ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/10/2013 11:54' prior: 38264303! testRedirect | client response target | target := 'http://zn.stfx.eu'. client := ZnClient new url: target. client get. self assert: client isSuccess. client close; maxNumberOfRedirects: 0; url: target. self should: [ client get ] raise: ZnTooManyRedirects. client close. response := [ ZnClient new beOneShot; maxNumberOfRedirects: 0; get: target; response ] on: ZnTooManyRedirects do: [ :exception | exception resume ]. self assert: response isRedirect! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 5/10/2013 11:55' prior: 38264880! testRedirectDontFollow | client target | target := 'http://zn.stfx.eu'. (client := ZnClient new) dontFollowRedirects; get: target. self assert: client response isRedirect. client enforceHttpSuccess: true; get: target. self assert: client response isRedirect. client close! ! !ZnClientTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/8/2013 10:08' prior: 55395874! withServerDo: block | server | server := ZnServer on: 1700 + 10 atRandom. [ server start. self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! ZnStaticFileServerDelegateTests removeSelector: #port! ZnEasyTests removeSelector: #port! ZnDispatcherDelegateTest removeSelector: #port! ZnClientTests removeSelector: #port! "Zinc-Tests"! !ZdcSecureSMTPClient methodsFor: 'private protocol' stamp: 'SvenVanCaekenberghe 4/19/2013 12:37' prior: 55090253! requireStartTLS (self lastResponse includesSubstring: 'STARTTLS') ifFalse: [ ^ self error: 'Server does not seem to support STARTTLS' ]. ! ! "Zodiac-Extra"! ZnZodiacNetworkingUtils removeSelector: #initialize! Smalltalk globals removeClassNamed: #ZnZodiacNetworkingUtils! "Zinc-Zodiac"! ----End fileIn----! ----QUIT----an Array(10 July 2013 11:00:14 am) Pharo.image priorSource: 10377599! ----STARTUP----an Array(10 July 2013 11:09:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 July 2013 11:09:21 am) Pharo-30262.image priorSource: 10422897! ----STARTUP----an Array(10 July 2013 2:26:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(10 July 2013 2:26:27 pm) Pharo.image priorSource: 10423098! ----STARTUP----an Array(10 July 2013 2:36:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 July 2013 2:36:17 pm) Pharo-30262.image priorSource: 10423308! ----STARTUP----an Array(11 July 2013 10:18:23 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(11 July 2013 10:18:28 am) Pharo.image priorSource: 10423507! ----STARTUP----an Array(11 July 2013 10:27:36 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 10:27:36 am) Pharo-30262.image priorSource: 10423717! ----STARTUP----an Array(11 July 2013 10:54:23 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/11/2013 10:52' prior: 43914055! commentForCurrentUpdate ^ '10466 Better interruption https://pharo.fogbugz.com/f/cases/10466 10304 FileStreamTest should cleanup test files created https://pharo.fogbugz.com/f/cases/10304'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/11/2013 10:52' prior: 33701562! script100 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-MarcusDenker.497.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.323.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1516.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.148.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.236.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.119.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.344.mcz SlotTests-MarcusDenker.41.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.584.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-MarcusDenker.542.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/10/2013 13:57'! update30262! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/11/2013 10:52'! update30263 "self new update30263" self withUpdateLog: '10466 Better interruption https://pharo.fogbugz.com/f/cases/10466 10304 FileStreamTest should cleanup test files created https://pharo.fogbugz.com/f/cases/10304'. self loadTogether: self script100 merge: false. UserInterruptHandler allInstances first setInterruptKeyValue: $. asciiValue. . self flushCaches. ! ! ScriptLoader removeSelector: #update30261! ScriptLoader removeSelector: #update30260! ScriptLoader removeSelector: #update30259! ScriptLoader removeSelector: #update30258! ScriptLoader removeSelector: #update30257! ScriptLoader removeSelector: #update30256! ScriptLoader removeSelector: #update30255! ScriptLoader removeSelector: #update30254! ScriptLoader removeSelector: #update30253! ScriptLoader removeSelector: #update30252! ScriptLoader removeSelector: #update30251! ScriptLoader removeSelector: #update30250! ScriptLoader removeSelector: #update30249! ScriptLoader removeSelector: #update30248! ScriptLoader removeSelector: #update30247! ScriptLoader removeSelector: #update30246! ScriptLoader removeSelector: #update30245! ScriptLoader removeSelector: #update30244! ScriptLoader removeSelector: #update30243! ScriptLoader removeSelector: #update30242! ScriptLoader removeSelector: #update30241! ScriptLoader removeSelector: #update30240! ScriptLoader removeSelector: #update30239! ScriptLoader removeSelector: #update30238! ScriptLoader removeSelector: #update30237! ScriptLoader removeSelector: #update30236! ScriptLoader removeSelector: #update30235! ScriptLoader removeSelector: #update30234! ScriptLoader removeSelector: #update30233! ScriptLoader removeSelector: #update30232! ScriptLoader removeSelector: #update30231! ScriptLoader removeSelector: #update30230! ScriptLoader removeSelector: #update30229! ScriptLoader removeSelector: #update30228! ScriptLoader removeSelector: #update30227! ScriptLoader removeSelector: #update30226! ScriptLoader removeSelector: #update30225! ScriptLoader removeSelector: #update30224! ScriptLoader removeSelector: #update30223! ScriptLoader removeSelector: #update30222! ScriptLoader removeSelector: #update30221! ScriptLoader removeSelector: #update30220! ScriptLoader removeSelector: #update30219! ScriptLoader removeSelector: #update30218! ScriptLoader removeSelector: #update30217! ScriptLoader removeSelector: #update30216! ScriptLoader removeSelector: #update30215! ScriptLoader removeSelector: #update30214! ScriptLoader removeSelector: #update30213! ScriptLoader removeSelector: #update30212! ScriptLoader removeSelector: #update30211! ScriptLoader removeSelector: #update30210! ScriptLoader removeSelector: #update30209! ScriptLoader removeSelector: #update30208! ScriptLoader removeSelector: #update30207! ScriptLoader removeSelector: #update30206! ScriptLoader removeSelector: #update30205! ScriptLoader removeSelector: #update30204! ScriptLoader removeSelector: #update30203! ScriptLoader removeSelector: #update30202! ScriptLoader removeSelector: #update30201! ScriptLoader removeSelector: #update30200! ScriptLoader removeSelector: #update30199! ScriptLoader removeSelector: #update30198! ScriptLoader removeSelector: #update30197! ScriptLoader removeSelector: #update30196! ScriptLoader removeSelector: #update30195! ScriptLoader removeSelector: #update30194! ScriptLoader removeSelector: #update30193! ScriptLoader removeSelector: #update30192! ScriptLoader removeSelector: #update30191! ScriptLoader removeSelector: #update30190! ScriptLoader removeSelector: #update30189! ScriptLoader removeSelector: #update30188! ScriptLoader removeSelector: #update30187! ScriptLoader removeSelector: #update30186! ScriptLoader removeSelector: #update30185! ScriptLoader removeSelector: #update30184! ScriptLoader removeSelector: #update30183! ScriptLoader removeSelector: #update30182! ScriptLoader removeSelector: #update30181! ScriptLoader removeSelector: #update30180! ScriptLoader removeSelector: #update30179! ScriptLoader removeSelector: #update30178! ScriptLoader removeSelector: #update30177! ScriptLoader removeSelector: #update30176! ScriptLoader removeSelector: #update30175! ScriptLoader removeSelector: #update30174! ScriptLoader removeSelector: #update30173! ScriptLoader removeSelector: #update30172! ScriptLoader removeSelector: #update30171! ScriptLoader removeSelector: #update30170! ScriptLoader removeSelector: #update30169! ScriptLoader removeSelector: #update30168! ScriptLoader removeSelector: #update30167! ScriptLoader removeSelector: #update30166! ScriptLoader removeSelector: #update30165! ScriptLoader removeSelector: #update30164! ScriptLoader removeSelector: #update30163! ScriptLoader removeSelector: #update30162! ScriptLoader removeSelector: #update30161! ScriptLoader removeSelector: #update30160! ScriptLoader removeSelector: #update30159! ScriptLoader removeSelector: #update30158! ScriptLoader removeSelector: #update30157! ScriptLoader removeSelector: #update30156! ScriptLoader removeSelector: #update30155! ScriptLoader removeSelector: #update30154! ScriptLoader removeSelector: #update30153! ScriptLoader removeSelector: #update30152! ScriptLoader removeSelector: #update30151! ScriptLoader removeSelector: #update30150! ScriptLoader removeSelector: #update30149! ScriptLoader removeSelector: #update30148! ScriptLoader removeSelector: #update30147! ScriptLoader removeSelector: #update30146! ScriptLoader removeSelector: #update30145! ScriptLoader removeSelector: #update30144! ScriptLoader removeSelector: #update30143! ScriptLoader removeSelector: #update30142! ScriptLoader removeSelector: #update30141! ScriptLoader removeSelector: #update30140! ScriptLoader removeSelector: #update30139! ScriptLoader removeSelector: #update30138! ScriptLoader removeSelector: #update30137! ScriptLoader removeSelector: #update30136! ScriptLoader removeSelector: #update30135! ScriptLoader removeSelector: #update30134! ScriptLoader removeSelector: #update30133! ScriptLoader removeSelector: #update30132! ScriptLoader removeSelector: #update30131! ScriptLoader removeSelector: #update30130! ScriptLoader removeSelector: #update30129! ScriptLoader removeSelector: #update30128! ScriptLoader removeSelector: #update30127! ScriptLoader removeSelector: #update30126! ScriptLoader removeSelector: #update30125! ScriptLoader removeSelector: #update30124! ScriptLoader removeSelector: #update30123! ScriptLoader removeSelector: #update30122! ScriptLoader removeSelector: #update30121! ScriptLoader removeSelector: #update30120! ScriptLoader removeSelector: #update30119! ScriptLoader removeSelector: #update30118! ScriptLoader removeSelector: #update30117! ScriptLoader removeSelector: #update30116! ScriptLoader removeSelector: #update30115! ScriptLoader removeSelector: #update30114! ScriptLoader removeSelector: #update30113! ScriptLoader removeSelector: #update30112! ScriptLoader removeSelector: #update30111! ScriptLoader removeSelector: #update30110! ScriptLoader removeSelector: #update30109! ScriptLoader removeSelector: #update30108! ScriptLoader removeSelector: #update30107! ScriptLoader removeSelector: #update30106! ScriptLoader removeSelector: #update30105! ScriptLoader removeSelector: #update30104! ScriptLoader removeSelector: #update30103! ScriptLoader removeSelector: #update30102! ScriptLoader removeSelector: #update30101! ScriptLoader removeSelector: #update30100! ScriptLoader removeSelector: #update30099! ScriptLoader removeSelector: #update30098! ScriptLoader removeSelector: #update30097! ScriptLoader removeSelector: #update30096! ScriptLoader removeSelector: #update30095! ScriptLoader removeSelector: #update30094! ScriptLoader removeSelector: #update30093! ScriptLoader removeSelector: #update30092! ScriptLoader removeSelector: #update30091! ScriptLoader removeSelector: #update30090! ScriptLoader removeSelector: #update30089! ScriptLoader removeSelector: #update30088! ScriptLoader removeSelector: #update30087! ScriptLoader removeSelector: #update30086! ScriptLoader removeSelector: #update30085! ScriptLoader removeSelector: #update30084! ScriptLoader removeSelector: #update30083! ScriptLoader removeSelector: #update30082! ScriptLoader removeSelector: #update30081! ScriptLoader removeSelector: #update30080! ScriptLoader removeSelector: #update30079! ScriptLoader removeSelector: #update30078! ScriptLoader removeSelector: #update30077! ScriptLoader removeSelector: #update30076! ScriptLoader removeSelector: #update30075! ScriptLoader removeSelector: #update30074! ScriptLoader removeSelector: #update30073! ScriptLoader removeSelector: #update30072! ScriptLoader removeSelector: #update30071! ScriptLoader removeSelector: #update30070! ScriptLoader removeSelector: #update30069! ScriptLoader removeSelector: #update30068! ScriptLoader removeSelector: #update30067! ScriptLoader removeSelector: #update30066! ScriptLoader removeSelector: #update30065! ScriptLoader removeSelector: #update30064! ScriptLoader removeSelector: #update30063! ScriptLoader removeSelector: #update30062! ScriptLoader removeSelector: #update30061! ScriptLoader removeSelector: #update30060! ScriptLoader removeSelector: #update30059! ScriptLoader removeSelector: #update30058! ScriptLoader removeSelector: #update30057! ScriptLoader removeSelector: #update30056! ScriptLoader removeSelector: #update30055! ScriptLoader removeSelector: #update30054! ScriptLoader removeSelector: #update30053! ScriptLoader removeSelector: #update30052! ScriptLoader removeSelector: #update30051! ScriptLoader removeSelector: #update30050! ScriptLoader removeSelector: #update30049! ScriptLoader removeSelector: #update30048! ScriptLoader removeSelector: #update30047! ScriptLoader removeSelector: #update30046! ScriptLoader removeSelector: #update30045! ScriptLoader removeSelector: #update30044! ScriptLoader removeSelector: #update30043! ScriptLoader removeSelector: #update30042! ScriptLoader removeSelector: #update30041! ScriptLoader removeSelector: #update30040! ScriptLoader removeSelector: #update30039! ScriptLoader removeSelector: #update30038! ScriptLoader removeSelector: #update30037! ScriptLoader removeSelector: #update30036! ScriptLoader removeSelector: #update30035! ScriptLoader removeSelector: #update30034! ScriptLoader removeSelector: #update30033! ScriptLoader removeSelector: #update30032! ScriptLoader removeSelector: #update30031! ScriptLoader removeSelector: #update30030! ScriptLoader removeSelector: #update30029! ScriptLoader removeSelector: #update30028! ScriptLoader removeSelector: #update30027! ScriptLoader removeSelector: #update30026! ScriptLoader removeSelector: #update30025! ScriptLoader removeSelector: #update30024! ScriptLoader removeSelector: #update30023! ScriptLoader removeSelector: #update30022! ScriptLoader removeSelector: #update30021! ScriptLoader removeSelector: #update30020! ScriptLoader removeSelector: #update30019! ScriptLoader removeSelector: #update30018! ScriptLoader removeSelector: #update30017! ScriptLoader removeSelector: #update30016! ScriptLoader removeSelector: #update30015! ScriptLoader removeSelector: #update30014! ScriptLoader removeSelector: #update30013! ScriptLoader removeSelector: #update30012! ScriptLoader removeSelector: #update30011! ScriptLoader removeSelector: #update30010! ScriptLoader removeSelector: #update30009! ScriptLoader removeSelector: #update30008! ScriptLoader removeSelector: #update30007! ScriptLoader removeSelector: #update30006! ScriptLoader removeSelector: #update30005! ScriptLoader removeSelector: #update30004! ScriptLoader removeSelector: #update30003! ScriptLoader removeSelector: #update30002! ScriptLoader removeSelector: #update30001! ScriptLoader removeSelector: #update30000! ScriptLoader removeSelector: #update20588! ScriptLoader removeSelector: #script359! ScriptLoader removeSelector: #script358! ScriptLoader removeSelector: #script357! ScriptLoader removeSelector: #script356! ScriptLoader removeSelector: #script355! ScriptLoader removeSelector: #script354! ScriptLoader removeSelector: #script353! ScriptLoader removeSelector: #script352! ScriptLoader removeSelector: #script351! ScriptLoader removeSelector: #script350! ScriptLoader removeSelector: #script349! ScriptLoader removeSelector: #script348! ScriptLoader removeSelector: #script347! ScriptLoader removeSelector: #script346! ScriptLoader removeSelector: #script345! ScriptLoader removeSelector: #script344! ScriptLoader removeSelector: #script343! ScriptLoader removeSelector: #script342! ScriptLoader removeSelector: #script341! ScriptLoader removeSelector: #script340! ScriptLoader removeSelector: #script339! ScriptLoader removeSelector: #script338! ScriptLoader removeSelector: #script337! ScriptLoader removeSelector: #script336! ScriptLoader removeSelector: #script335! ScriptLoader removeSelector: #script334! ScriptLoader removeSelector: #script333! ScriptLoader removeSelector: #script332! ScriptLoader removeSelector: #script331! ScriptLoader removeSelector: #script330! ScriptLoader removeSelector: #script329! ScriptLoader removeSelector: #script328! ScriptLoader removeSelector: #script327! ScriptLoader removeSelector: #script326! ScriptLoader removeSelector: #script325! ScriptLoader removeSelector: #script324! ScriptLoader removeSelector: #script323! ScriptLoader removeSelector: #script322! ScriptLoader removeSelector: #script321! ScriptLoader removeSelector: #script320! ScriptLoader removeSelector: #script319! ScriptLoader removeSelector: #script318! ScriptLoader removeSelector: #script317! ScriptLoader removeSelector: #script316! ScriptLoader removeSelector: #script315! ScriptLoader removeSelector: #script314! ScriptLoader removeSelector: #script313! ScriptLoader removeSelector: #script312! ScriptLoader removeSelector: #script311! ScriptLoader removeSelector: #script310! ScriptLoader removeSelector: #script309! ScriptLoader removeSelector: #script308! ScriptLoader removeSelector: #script307! ScriptLoader removeSelector: #script306! ScriptLoader removeSelector: #script305! ScriptLoader removeSelector: #script304! ScriptLoader removeSelector: #script303! ScriptLoader removeSelector: #script302! ScriptLoader removeSelector: #script301! ScriptLoader removeSelector: #script300! ScriptLoader removeSelector: #script299! ScriptLoader removeSelector: #script298! ScriptLoader removeSelector: #script297! ScriptLoader removeSelector: #script296! ScriptLoader removeSelector: #script295! ScriptLoader removeSelector: #script294! ScriptLoader removeSelector: #script293! ScriptLoader removeSelector: #script292! ScriptLoader removeSelector: #script291! ScriptLoader removeSelector: #script290! ScriptLoader removeSelector: #script289! ScriptLoader removeSelector: #script288! ScriptLoader removeSelector: #script287! ScriptLoader removeSelector: #script286! ScriptLoader removeSelector: #script285! ScriptLoader removeSelector: #script284! ScriptLoader removeSelector: #script283! ScriptLoader removeSelector: #script282! ScriptLoader removeSelector: #script281! ScriptLoader removeSelector: #script280! ScriptLoader removeSelector: #script279! ScriptLoader removeSelector: #script278! ScriptLoader removeSelector: #script277! ScriptLoader removeSelector: #script276! ScriptLoader removeSelector: #script275! ScriptLoader removeSelector: #script274! ScriptLoader removeSelector: #script273! ScriptLoader removeSelector: #script272! ScriptLoader removeSelector: #script271! ScriptLoader removeSelector: #script270! ScriptLoader removeSelector: #script269! ScriptLoader removeSelector: #script268! ScriptLoader removeSelector: #script267! ScriptLoader removeSelector: #script266! ScriptLoader removeSelector: #script265! ScriptLoader removeSelector: #script264! ScriptLoader removeSelector: #script263! ScriptLoader removeSelector: #script262! ScriptLoader removeSelector: #script261! ScriptLoader removeSelector: #script260! ScriptLoader removeSelector: #script259! ScriptLoader removeSelector: #script258! ScriptLoader removeSelector: #script257! ScriptLoader removeSelector: #script256! ScriptLoader removeSelector: #script255! ScriptLoader removeSelector: #script254! ScriptLoader removeSelector: #script253! ScriptLoader removeSelector: #script252! ScriptLoader removeSelector: #script251! ScriptLoader removeSelector: #script250! ScriptLoader removeSelector: #script249! ScriptLoader removeSelector: #script248! ScriptLoader removeSelector: #script247! ScriptLoader removeSelector: #script246! ScriptLoader removeSelector: #script245! ScriptLoader removeSelector: #script244! ScriptLoader removeSelector: #script243! ScriptLoader removeSelector: #script242! ScriptLoader removeSelector: #script241! ScriptLoader removeSelector: #script240! ScriptLoader removeSelector: #script239! ScriptLoader removeSelector: #script238! ScriptLoader removeSelector: #script237! ScriptLoader removeSelector: #script236! ScriptLoader removeSelector: #script235! ScriptLoader removeSelector: #script234! ScriptLoader removeSelector: #script233! ScriptLoader removeSelector: #script232! ScriptLoader removeSelector: #script231! ScriptLoader removeSelector: #script230! ScriptLoader removeSelector: #script229! ScriptLoader removeSelector: #script228! ScriptLoader removeSelector: #script227! ScriptLoader removeSelector: #script226! ScriptLoader removeSelector: #script225! ScriptLoader removeSelector: #script224! ScriptLoader removeSelector: #script223! ScriptLoader removeSelector: #script222! ScriptLoader removeSelector: #script221! ScriptLoader removeSelector: #script220! ScriptLoader removeSelector: #script219! ScriptLoader removeSelector: #script218! ScriptLoader removeSelector: #script217! ScriptLoader removeSelector: #script216! ScriptLoader removeSelector: #script215! ScriptLoader removeSelector: #script214! ScriptLoader removeSelector: #script213! ScriptLoader removeSelector: #script212! ScriptLoader removeSelector: #script211! ScriptLoader removeSelector: #script210! ScriptLoader removeSelector: #script209! ScriptLoader removeSelector: #script208! ScriptLoader removeSelector: #script207! ScriptLoader removeSelector: #script206! ScriptLoader removeSelector: #script205! ScriptLoader removeSelector: #script204! ScriptLoader removeSelector: #script203! ScriptLoader removeSelector: #script202! ScriptLoader removeSelector: #script201! ScriptLoader removeSelector: #script200! ScriptLoader removeSelector: #script199! ScriptLoader removeSelector: #script198! ScriptLoader removeSelector: #script197! ScriptLoader removeSelector: #script196! ScriptLoader removeSelector: #script195! ScriptLoader removeSelector: #script194! ScriptLoader removeSelector: #script193! ScriptLoader removeSelector: #script192! ScriptLoader removeSelector: #script191! ScriptLoader removeSelector: #script190! ScriptLoader removeSelector: #script189! ScriptLoader removeSelector: #script188! ScriptLoader removeSelector: #script187! ScriptLoader removeSelector: #script186! ScriptLoader removeSelector: #script185! ScriptLoader removeSelector: #script184! ScriptLoader removeSelector: #script183! ScriptLoader removeSelector: #script182! ScriptLoader removeSelector: #script181! ScriptLoader removeSelector: #script180! ScriptLoader removeSelector: #script179! ScriptLoader removeSelector: #script178! ScriptLoader removeSelector: #script177! ScriptLoader removeSelector: #script176! ScriptLoader removeSelector: #script175! ScriptLoader removeSelector: #script174! ScriptLoader removeSelector: #script173! ScriptLoader removeSelector: #script172! ScriptLoader removeSelector: #script171! ScriptLoader removeSelector: #script170! ScriptLoader removeSelector: #script169! ScriptLoader removeSelector: #script168! ScriptLoader removeSelector: #script167! ScriptLoader removeSelector: #script166! ScriptLoader removeSelector: #script165! ScriptLoader removeSelector: #script164! ScriptLoader removeSelector: #script163! ScriptLoader removeSelector: #script162! ScriptLoader removeSelector: #script161! ScriptLoader removeSelector: #script160! ScriptLoader removeSelector: #script159! ScriptLoader removeSelector: #script158! ScriptLoader removeSelector: #script157! ScriptLoader removeSelector: #script156! ScriptLoader removeSelector: #script155! ScriptLoader removeSelector: #script154! ScriptLoader removeSelector: #script153! ScriptLoader removeSelector: #script152! ScriptLoader removeSelector: #script151! ScriptLoader removeSelector: #script150! ScriptLoader removeSelector: #script149! ScriptLoader removeSelector: #script148! ScriptLoader removeSelector: #script147! ScriptLoader removeSelector: #script146! ScriptLoader removeSelector: #script145! ScriptLoader removeSelector: #script144! ScriptLoader removeSelector: #script143! ScriptLoader removeSelector: #script142! ScriptLoader removeSelector: #script141! ScriptLoader removeSelector: #script140! ScriptLoader removeSelector: #script139! ScriptLoader removeSelector: #script138! ScriptLoader removeSelector: #script137! ScriptLoader removeSelector: #script136! ScriptLoader removeSelector: #script135! ScriptLoader removeSelector: #script134! ScriptLoader removeSelector: #script133! ScriptLoader removeSelector: #script132! ScriptLoader removeSelector: #script131! ScriptLoader removeSelector: #script130! ScriptLoader removeSelector: #script129! ScriptLoader removeSelector: #script128! ScriptLoader removeSelector: #script127! ScriptLoader removeSelector: #script126! ScriptLoader removeSelector: #script125! ScriptLoader removeSelector: #script124! ScriptLoader removeSelector: #script123! ScriptLoader removeSelector: #script122! ScriptLoader removeSelector: #script121! ScriptLoader removeSelector: #script120! ScriptLoader removeSelector: #script119! ScriptLoader removeSelector: #script118! ScriptLoader removeSelector: #script117! ScriptLoader removeSelector: #script116! ScriptLoader removeSelector: #script115! ScriptLoader removeSelector: #script114! ScriptLoader removeSelector: #script113! ScriptLoader removeSelector: #script112! ScriptLoader removeSelector: #script111! ScriptLoader removeSelector: #script110! ScriptLoader removeSelector: #script109! ScriptLoader removeSelector: #script108! ScriptLoader removeSelector: #script107! ScriptLoader removeSelector: #script106! ScriptLoader removeSelector: #script105! ScriptLoader removeSelector: #script104! ScriptLoader removeSelector: #script103! ScriptLoader removeSelector: #script102! ScriptLoader removeSelector: #script101! "ScriptLoader30"! !FileStreamTest methodsFor: 'testing' stamp: 'CamilloBruni 7/10/2013 17:23' prior: 40044310! testCachingNextChunkPut "Ensure that nextChunkPut:/nextChunk works properly on a caching file" | file text read filename | filename := 'testCachingNextChunkPut'. [file := FileStream forceNewFileNamed: filename. text := 'this is a chunkful of text'. file nextChunkPut: text. read := [file position: 0; nextChunkText] valueWithin: 1 seconds onTimeout:['']. self assert: read = text. ] ensure:[ file close. (FileSystem disk workingDirectory / filename) ensureDelete ].! ! !FileStreamTest methodsFor: 'testing' stamp: 'CamilloBruni 7/10/2013 15:24' prior: 40045810! testNextChunkOutOfBounds "self debug: #testNextChunkOutOfBounds" "Ensure that nextChunkPut:/nextChunk works properly on a caching file" | file text read filename | filename := 'testNextChunkOutOfBounds'. [file := FileStream forceNewFileNamed: filename. text := 'this is a chunkful of text'. file nextChunkPut: text. read := [file position: 999999; nextChunkText] valueWithin: 1 seconds onTimeout:[nil]. self assert: read = ''. ] ensure: [ file close. (FileSystem disk workingDirectory / filename) ensureDelete ].! ! !InputEventHandler methodsFor: 'events' stamp: 'ThierryGoubier 7/5/2013 16:17'! isKbdEvent: bufEvt ^ bufEvt first = EventTypeKeyboard and: [ bufEvt fourth = EventKeyChar ]! ! !UserInterruptHandler class methodsFor: 'instance creation' stamp: 'ThierryGoubier 6/28/2013 14:57' prior: 54599909! new ^ super new setInterruptKeyValue: $. asciiValue! ! !UserInterruptHandler methodsFor: 'events' stamp: 'ThierryGoubier 6/28/2013 14:49' prior: 54597490! handleEvent: evt "Interrupt event... evt is shared, so make a copy of it." | buf | buf := evt shallowCopy. (self isKbdEvent: evt) ifTrue: [ | keycode modifiers | "Check if the event is a user interrupt" keycode := buf sixth. modifiers := buf fifth. (keycode = interruptKey and: [ modifiers anyMask: 16r0E ]) ifTrue: [ Display deferUpdates: false. (Smalltalk hasClassNamed: #SoundService) ifTrue: [ (Smalltalk classNamed: #SoundService) default shutDown ]. self handleUserInterrupt ]. ^ self ]! ! InputEventSensor removeSelector: #isKbdEvent:! "Kernel"! "Tests"! ----End fileIn----! ----QUIT----an Array(11 July 2013 10:54:45 am) Pharo.image priorSource: 10423918! ----STARTUP----an Array(11 July 2013 11:03:46 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 11:03:46 am) Pharo-30263.image priorSource: 10459625! ----STARTUP----an Array(11 July 2013 3:01:28 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/11/2013 14:58' prior: 43978652! commentForCurrentUpdate ^ '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 1)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/11/2013 14:58'! script101 ^ 'AST-Core-MarcusDenker.174.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.499.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.325.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1516.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.138.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-MarcusDenker.126.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.487.mcz NautilusCommon-EstebanLorenzano.150.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.238.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.176.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.119.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.48.mcz Ring-Tests-Monticello-MarcusDenker.10.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.344.mcz SlotTests-MarcusDenker.41.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.869.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.584.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1170.mcz ToolsTest-MarcusDenker.denker.43.mcz Traits-EstebanLorenzano.544.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/11/2013 14:58'! update30264 "self new update30264" self withUpdateLog: '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 1)'. self loadTogether: self script101 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53314350! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53329532! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53314671! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53314851! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53329702! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36136529! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self basicAddSelector: aSymbol withMethod: method! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53330908! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53315660! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache.! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53298087! binding ^ nil -> self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36775616! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53325864! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53325528! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53304401! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53304922! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in this class/trait. If it is found, binaryBlock is evaluated with this class/trait and the associated method. Otherwise absentBlock is evaluated. Note that this implementation is very simple because PureBehavior does not know about inheritance (cf. implementation in Behavior)" ^ binaryBlock value: self value: (self compiledMethodAt: aSymbol ifAbsent: [^ absentBlock value]).! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53298454! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TraitBehavior methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36118951! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36137185! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53300175! compileAll ^ self compileAllFrom: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53300266! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53305465! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53305801! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 38265460! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53300585! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53306171! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53321617! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36368450! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53321760! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53301345! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53306317! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53322014! emptyMethodDictionary ^ MethodDictionary new! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53331432! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53322670! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36294908! evaluate: aString ^self compiler evaluate: aString! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36352848! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53306512! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 35923864! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53331798! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53332147! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53326123! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53325671! includesBehavior: aBehavior ^self == aBehavior! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53326296! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53326514! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53326758! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53327127! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53327297! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53322879! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53316047! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53324358! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53316371! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53310333! methodDictionary "Convenience" ^self methodDict! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53310445! methodDictionary: aDictionary self methodDict: aDictionary! ! !TraitBehavior methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53318477! methodNamed: aSelector ^ self methodDict at: aSelector! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36972994! methods ^ self methodDict values! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53311208! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TraitBehavior methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53318678! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53332521! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53333309! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53333225! notifyUsersOfChangedSelectors: aCollection! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53322110! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TraitBehavior methodsFor: '*Rpackage-Core' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53302711! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 36061370! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 37307733! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TraitBehavior methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53318863! protocols ^ self organization categories copy! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53316556! pureAddSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53316787! pureRemoveSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53333451! purgeLocalSelectors self basicLocalSelectors: nil! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53301885! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 43583610! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler compile: (oldClass sourceCodeAt: selector) in: self notifying: nil ifFail: [^ self]. "Assume OK after proceed from SyntaxError" selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53302078! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53311578! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53333543! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53333707! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53318086! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53334046! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53311952! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53312143! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53312420! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53334489! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53334341! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53313139! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53313271! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53302416! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53338322! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53324632! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53327614! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53335161! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53335346! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53335643! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53336857! traitTransformations ^ self traitComposition transformations ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53336279! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53313880! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector" ^self sourceCodeAt: selector ifAbsent: aBlock! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 42082165! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53329029! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53303075! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 53303232! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TraitDescription methodsFor: 'composition' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53373531! + aTraitOrTraitComposition "Use double dispatch to avoid having nested composition in cases where parenthesis are used, such as T1 + (T2 + T3)" ^aTraitOrTraitComposition addOnTheLeft: self! ! !TraitDescription methodsFor: 'composition' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53374036! @ anArrayOfAssociations ^ TraitAlias with: self aliases: anArrayOfAssociations! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53368111! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 37111359! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !TraitDescription methodsFor: 'private' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53400514! addCompositionOnLeft: aTraitComposition ^ aTraitComposition add: self! ! !TraitDescription methodsFor: 'private' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53400630! addOnTheLeft: aTraitExpression ^TraitComposition with: aTraitExpression with: self! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53363543! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53363290! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !TraitDescription methodsFor: 'enquiries' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53377711! aliasesForSelector: aSelector ^ OrderedCollection new ! ! !TraitDescription methodsFor: 'enquiries' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53377815! allAliasesDict ^IdentityDictionary new ! ! !TraitDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53395510! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !TraitDescription methodsFor: 'converting' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53374166! asTraitComposition ^TraitComposition with: self! ! !TraitDescription methodsFor: 'enquiries' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53377903! changedSelectorsComparedTo: aTraitTransformation | selectors otherSelectors changedSelectors aliases otherAliases | selectors := self allSelectors asIdentitySet. otherSelectors := aTraitTransformation allSelectors asIdentitySet. changedSelectors := IdentitySet withAll: ( (selectors difference: otherSelectors) union: (otherSelectors difference: selectors)). aliases := self allAliasesDict. otherAliases := aTraitTransformation allAliasesDict. aliases keysAndValuesDo: [:key :value | (value ~~ (otherAliases at: key ifAbsent: [nil])) ifTrue: [changedSelectors add: key]]. otherAliases keysAndValuesDo: [:key :value | (value ~~ (aliases at: key ifAbsent: [nil])) ifTrue: [changedSelectors add: key]]. ^ changedSelectors. ! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53382689! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36889865! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !TraitDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53361231! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !TraitDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53361495! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !TraitDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53361687! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53382973! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53383136! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53369783! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36891679! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36892187! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36135748! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42077268! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53368493! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53368881! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53369296! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53376540! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53376894! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53374678! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53374984! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53374261! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53375371! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53375653! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53376034! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !TraitDescription methodsFor: '*NautilusCommon' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53357905! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53383371! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53371986! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !TraitDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53357336! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !TraitDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53357593! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !TraitDescription methodsFor: 'private' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53400759! errorCategoryName self error: 'Category name must be a String'! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53383770! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36893148! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53384156! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36171216! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 40002741! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !TraitDescription methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 40003505! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53386000! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53386188! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53386844! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !TraitDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53361907! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !TraitDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53367207! isClassSide ^self == self classSide! ! !TraitDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53367446! isInstanceSide ^self isClassSide not! ! !TraitDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53367550! isMeta ^self isClassSide! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53387152! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36308109! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53387556! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42077924! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36894276! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53365085! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53372235! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !TraitDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53397668! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53389138! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36971449! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TraitDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53399727! printOn: aStream aStream nextPutAll: self name! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 36885751! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 35903779! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53365264! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53365686! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53394502! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42078363! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !TraitDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53399822! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !TraitDescription methodsFor: 'enquiries' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53378943! subject "for compatibility with TraitTransformations" ^ self ! ! !TraitDescription methodsFor: 'enquiries' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53379054! trait "for compatibility with TraitTransformations" ^ self ! ! !TraitDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42078643! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !TraitDescription methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42080651! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !TraitDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 42081611! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories ]. ^ changedCategories! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53373032! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !TraitDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53373209! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53394781! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/1/2013 17:53' prior: 53395141! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! "Compiler"! "FuelTests"! "NautilusCommon"! "RPackage-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(11 July 2013 3:01:41 pm) Pharo.image priorSource: 10459826! ----STARTUP----an Array(11 July 2013 3:11:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 3:11:04 pm) Pharo-30264.image priorSource: 10539166! ----STARTUP----an Array(11 July 2013 4:52:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----End fileIn----! TraitBehavior removeSelector: #name! !Trait method! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! !Trait method! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! !Trait method! numberOfInstanceVariables ^ self instVarNames size ! ! !Trait method! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! !Trait method! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !Trait method! isBehavior "Return true if the receiver is a behavior" ^true! ! !Trait method! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! !Trait method! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! !Trait method! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! !Trait method! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! !Trait method! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! !Trait method! startUp "This message is sent to registered classes when the system is coming up." ! ! !Trait method! isCompact ^self indexIfCompact ~= 0! ! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! !Trait method! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! !Trait method! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! !Trait method! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! !Trait method! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! !Trait method! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! !Trait method! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! !Trait method! isMeta ^ false! ! !Trait method! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! !Trait method! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! !Trait method! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! !Trait method! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! !Trait method! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! !Trait method! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! !Trait method! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !Trait method! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !Trait method! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! !Trait method! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! !Trait method! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! !Trait method! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! !Trait method! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! !Trait method! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! !Trait method! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! !Trait method! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! !Trait method! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! !Trait method! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !Trait method! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! !Trait method! isAnonymous ^true! ! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! !Trait method! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! !Trait method! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! !Trait method! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! !Trait method! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! !Trait method! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! !Trait method! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! !Trait method! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! !Trait method! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! !Trait method! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! !Trait method! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! !Trait method! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! !Trait method! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! !Trait method! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! !Trait method! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! !Trait method! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! !Trait method! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! !Trait method! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! !Trait method! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! !Trait method! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! !Trait method! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! !Trait method! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! !Trait method! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! !Trait method! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! !Trait method! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! !Trait method! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! !Trait method! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! !Trait method! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! !Trait method! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! !Trait method! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! !Trait method! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! !Trait method! name "Answer a String that is the name of the receiver." ^'a subclass of ', self superclass name.! ! !Trait method! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! !Trait method! shutDown "This message is sent on system shutdown to registered classes" ! ! !Trait method! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! !Trait method! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! !Trait method! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! !Trait method! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !Trait method! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! !Trait method! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! !Trait method! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! !Trait method! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! !Trait method! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! !Trait method! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !Trait method! classVariablesString "Answer a string of my class variable names separated by spaces." ^String streamContents: [ :stream | self classVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! !Trait method! usesLocalPoolVarNamed: aString ^ false! ! !Trait method! hasSharedPools "Only a class may have shared pools" ^ false! ! !Trait method! addAuthorsTo: result "private method that to store the result in the argument." self methodsDo: [:each | result add: each author ]! ! !Trait method! notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol | oldPackage newPackage | (newProtocol = oldProtocol) ifTrue: [ ^ self ]. "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. "Announce recategorization" newPackage = oldPackage ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self! ! !Trait method! setInstVarNames: instVarArray "Private - for class initialization only" | required | required := self instSize. self superclass notNil ifTrue:[required := required - self superclass instSize]. instVarArray size = required ifFalse:[^self error: required printString, ' instvar names are required']. instVarArray isEmpty ifTrue:[self instanceVariables: nil] ifFalse:[self instanceVariables: instVarArray asArray].! ! !Trait method! classThatDefinesClassVariable: classVarName "Answer the class that defines the given class variable" (self classPool includesKey: classVarName asSymbol) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesClassVariable: classVarName]! ! !Trait method! usesPoolVarNamed: aString "Only classes may use a pool variable named: aString" ^ false! ! !Trait method! instVarMappingFrom: oldClass "Return the mapping from instVars of oldClass to new class that is used for converting old instances of oldClass." | oldInstVarNames | oldInstVarNames := oldClass allInstVarNames. ^self allInstVarNames collect: [:instVarName | oldInstVarNames indexOf: instVarName].! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. method properties at: #traitSource put: aCompiledMethod. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! classThatDefinesInstanceVariable: instVarName (self instVarNames notNil and: [self instVarNames includes: instVarName asString]) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesInstanceVariable: instVarName]! ! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self instanceVariables: nil. self organization: nil.! ! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." ^self subclasses do: aBlock! ! !Trait method! subclasses ^ Array new! ! !Trait method! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass isNil ifTrue: [0] ifFalse: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass isNil ifTrue: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! !Trait method! checkForInstVarsOK: instVarString "Return true if instVarString does no include any names used in a subclass" | instVarArray | instVarArray := instVarString subStrings: ' '. self allSubclasses do: [:cl | cl instVarNames do: [:n | (instVarArray includes: n) ifTrue: [self error: n , ' is already used in ' , cl name. ^ false]]]. ^ true! ! !Trait method! instVarIndexFor: instVarName "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName]. index = 0 ifTrue: [^self superclass == nil ifTrue: [0] ifFalse: [self superclass instVarIndexFor: instVarName]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! !Trait method! instanceVariablesString "Answer a string of my instance variable names separated by spaces." ^String streamContents: [ :stream | self instVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! !Trait method! newInstanceFrom: oldInstance variable: variable size: instSize map: map "Create a new instance of the receiver based on the given old instance. The supplied map contains a mapping of the old instVar names into the receiver's instVars" | new | variable ifTrue: [new := self basicNew: oldInstance basicSize] ifFalse: [new := self basicNew]. 1 to: instSize do: [:offset | (map at: offset) > 0 ifTrue: [new instVarAt: offset put: (oldInstance instVarAt: (map at: offset))]]. variable ifTrue: [1 to: oldInstance basicSize do: [:offset | new basicAt: offset put: (oldInstance basicAt: offset)]]. ^new! ! !Trait method! printSubclassesOn: aStream level: level "As part of the algorithm for printing a description of the receiver, print the subclass on the file stream, aStream, indenting level times." | subclassNames | aStream crtab: level. aStream nextPutAll: self name. aStream space; print: self instVarNames. self == Class ifTrue: [aStream crtab: level + 1; nextPutAll: '[ ... all the Metaclasses ... ]'. ^self]. subclassNames := self subclasses asSortedCollection:[:c1 :c2| c1 name <= c2 name]. "Print subclasses in alphabetical order" subclassNames do: [:subclass | subclass printSubclassesOn: aStream level: level + 1]! ! !Trait method! updateInstances: oldInstances from: oldClass isMeta: isMeta "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "If there are any contexts having an old instance as receiver it might crash the system because the layout has changed, and the method only knows about the old layout." | map variable instSize newInstances | oldInstances isEmpty ifTrue:[^#()]. "no instances to convert" isMeta ifTrue: [ oldInstances size = 1 ifFalse:[^self error:'Metaclasses can only have one instance']. self soleInstance class == self ifTrue:[ ^self error:'Metaclasses can only have one instance']]. map := self instVarMappingFrom: oldClass. variable := self isVariable. instSize := self instSize. newInstances := Array new: oldInstances size. 1 to: oldInstances size do:[:i| newInstances at: i put: ( self newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)]. "Now perform a bulk mutation of old instances into new ones" oldInstances elementsExchangeIdentityWith: newInstances. ^newInstances "which are now old"! ! !Trait method! hasInstVarNamed: aString "Return true whether the receiver defines an instance variable named aString." ^ self instVarNames includes: aString! ! !Trait method! allInstVarNamesEverywhere "Answer the set of inst var names used by the receiver, all superclasses, and all subclasses" | aList | aList := OrderedCollection new. (self allSuperclasses , self withAllSubclasses asOrderedCollection) do: [:cls | aList addAll: cls instVarNames]. ^ aList asSet "BorderedMorph allInstVarNamesEverywhere"! ! !Trait method! instVarNames "Answer an Array of the receiver's instance variable names." self instanceVariables == nil ifTrue: [^#()] ifFalse: [^self instanceVariables]! ! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instVarNamesAndOffsetsDo: aBinaryBlock]. 1 to: self instSize - superInstSize do: [:i| aBinaryBlock value: (self instanceVariables at: i) value: i + superInstSize]! ! !Trait method! forceNewFrom: anArray "Create a new instance of the class and fill its instance variables up with the array." | object max | object := self new. max := self instSize. anArray doWithIndex: [:each :index | index > max ifFalse: [object instVarAt: index put: each]]. ^ object! ! !Trait method! commentInventory "Answer a string with a count of the classes with and without comments for all the classes in the package of which this class is a member." "Morph commentInventory" ^ self environment organization commentInventory: (self category copyUpTo: $-), '*'! ! !Trait method! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." "self new authorsgather: Date" | br result selectors | result := Bag new. self addAuthorsTo: result. self class addAuthorsTo: result. ^ result! ! !Trait method! allSharedPools "Answer an ordered collection of the shared pools the receiver shares, including those defined in the superclasses of the receiver." ^ OrderedCollection new! ! !Trait method! sharedPoolOfVarNamed: aString "Only classes may have shared pools" ^ nil! ! !Trait method! classesThatImplementAllOf: selectorSet "Return an array of any classes that implement all the messages in selectorSet." | found remaining | found := OrderedCollection new. selectorSet do: [:sel | (self includesSelector: sel) ifTrue: [found add: sel]]. found isEmpty ifTrue: [^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: selectorSet)]] ifFalse: [remaining := selectorSet copyWithoutAll: found. remaining isEmpty ifTrue: [^ Array with: self]. ^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: remaining)]]! ! !Trait method! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! !Trait method! updateInstancesFrom: oldClass "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "ar 7/15/1999: The updating below is possibly dangerous. If there are any contexts having an old instance as receiver it might crash the system if the new receiver in which the context is executed has a different layout. See bottom below for a simple example:" | oldInstances | oldInstances := oldClass allInstances asArray. oldInstances := self updateInstances: oldInstances from: oldClass isMeta: self isMeta. ^oldInstances " | crashingBlock class | class := Object subclass: #CrashTestDummy instanceVariableNames: 'instVar' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. class compile:'instVar: value instVar := value'. class compile:'crashingBlock ^[instVar]'. crashingBlock := (class new) instVar: 42; crashingBlock. Object subclass: #CrashTestDummy instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. crashingBlock. crashingBlock value. " ! ! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock combinedClassCategories | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! !Trait method! sharedPoolsString "Answer a string of my shared pool names separated by spaces." ^String streamContents: [ :stream | self sharedPools do: [ :each | stream nextPutAll: (self environment keyAtIdentityValue: each ifAbsent: [ 'private' ]) ] separatedBy: [ stream space ] ]! ! !Trait method! instVarIndexFor: instVarName ifAbsent: aBlock "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName ifAbsent: [0]]. index = 0 ifTrue: [^self superclass == nil ifTrue: [aBlock value] ifFalse: [self superclass instVarIndexFor: instVarName ifAbsent: aBlock]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! !Trait method! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/3/2013 17:23' prior: 44116667! name ^ self explicitRequirement! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/3/2013 17:23' prior: 44137473! name ^ self explicitRequirement! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! TraitDescription class removeSelector: #canZapMethodDictionary! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! TraitDescription class removeSelector: #cleanUp! !Trait method! addAuthorsTo: result "private method that to store the result in the argument." self methodsDo: [:each | result add: each author ]! ! TraitDescription removeSelector: #addAuthorsTo:! !Trait method! allInstVarNamesEverywhere "Answer the set of inst var names used by the receiver, all superclasses, and all subclasses" | aList | aList := OrderedCollection new. (self allSuperclasses , self withAllSubclasses asOrderedCollection) do: [:cls | aList addAll: cls instVarNames]. ^ aList asSet "BorderedMorph allInstVarNamesEverywhere"! ! TraitDescription removeSelector: #allInstVarNamesEverywhere! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock combinedClassCategories | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! TraitDescription removeSelector: #allMethodCategoriesIntegratedThrough:! !Trait method! allSharedPools "Answer an ordered collection of the shared pools the receiver shares, including those defined in the superclasses of the receiver." ^ OrderedCollection new! ! TraitDescription removeSelector: #allSharedPools! !Trait method! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." "self new authorsgather: Date" | br result selectors | result := Bag new. self addAuthorsTo: result. self class addAuthorsTo: result. ^ result! ! TraitDescription removeSelector: #authors! !Trait method! checkForInstVarsOK: instVarString "Return true if instVarString does no include any names used in a subclass" | instVarArray | instVarArray := instVarString subStrings: ' '. self allSubclasses do: [:cl | cl instVarNames do: [:n | (instVarArray includes: n) ifTrue: [self error: n , ' is already used in ' , cl name. ^ false]]]. ^ true! ! TraitDescription removeSelector: #checkForInstVarsOK:! !Trait method! classThatDefinesClassVariable: classVarName "Answer the class that defines the given class variable" (self classPool includesKey: classVarName asSymbol) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesClassVariable: classVarName]! ! TraitDescription removeSelector: #classThatDefinesClassVariable:! !Trait method! classThatDefinesInstanceVariable: instVarName (self instVarNames notNil and: [self instVarNames includes: instVarName asString]) ifTrue: [^ self]. ^self superclass ifNotNil: [self superclass classThatDefinesInstanceVariable: instVarName]! ! TraitDescription removeSelector: #classThatDefinesInstanceVariable:! !Trait method! classVariablesString "Answer a string of my class variable names separated by spaces." ^String streamContents: [ :stream | self classVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! TraitDescription removeSelector: #classVariablesString! !Trait method! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! TraitDescription removeSelector: #classVersion! !Trait method! classesThatImplementAllOf: selectorSet "Return an array of any classes that implement all the messages in selectorSet." | found remaining | found := OrderedCollection new. selectorSet do: [:sel | (self includesSelector: sel) ifTrue: [found add: sel]]. found isEmpty ifTrue: [^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: selectorSet)]] ifFalse: [remaining := selectorSet copyWithoutAll: found. remaining isEmpty ifTrue: [^ Array with: self]. ^ self subclasses inject: Array new into: [:subsThatDo :sub | subsThatDo , (sub classesThatImplementAllOf: remaining)]]! ! TraitDescription removeSelector: #classesThatImplementAllOf:! !Trait method! commentInventory "Answer a string with a count of the classes with and without comments for all the classes in the package of which this class is a member." "Morph commentInventory" ^ self environment organization commentInventory: (self category copyUpTo: $-), '*'! ! TraitDescription removeSelector: #commentInventory! !Trait method! forceNewFrom: anArray "Create a new instance of the class and fill its instance variables up with the array." | object max | object := self new. max := self instSize. anArray doWithIndex: [:each :index | index > max ifFalse: [object instVarAt: index put: each]]. ^ object! ! TraitDescription removeSelector: #forceNewFrom:! !Trait method! hasInstVarNamed: aString "Return true whether the receiver defines an instance variable named aString." ^ self instVarNames includes: aString! ! TraitDescription removeSelector: #hasInstVarNamed:! !Trait method! hasSharedPools "Only a class may have shared pools" ^ false! ! TraitDescription removeSelector: #hasSharedPools! !Trait method! instVarIndexFor: instVarName "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName]. index = 0 ifTrue: [^self superclass == nil ifTrue: [0] ifFalse: [self superclass instVarIndexFor: instVarName]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! TraitDescription removeSelector: #instVarIndexFor:! !Trait method! instVarIndexFor: instVarName ifAbsent: aBlock "Answer the index of the named instance variable." | index | index := self instanceVariables == nil ifTrue: [0] ifFalse: [self instanceVariables indexOf: instVarName ifAbsent: [0]]. index = 0 ifTrue: [^self superclass == nil ifTrue: [aBlock value] ifFalse: [self superclass instVarIndexFor: instVarName ifAbsent: aBlock]]. ^self superclass == nil ifTrue: [index] ifFalse: [index + self superclass instSize]! ! TraitDescription removeSelector: #instVarIndexFor:ifAbsent:! !Trait method! instVarMappingFrom: oldClass "Return the mapping from instVars of oldClass to new class that is used for converting old instances of oldClass." | oldInstVarNames | oldInstVarNames := oldClass allInstVarNames. ^self allInstVarNames collect: [:instVarName | oldInstVarNames indexOf: instVarName].! ! TraitDescription removeSelector: #instVarMappingFrom:! !Trait method! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass isNil ifTrue: [0] ifFalse: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass isNil ifTrue: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! TraitDescription removeSelector: #instVarNameForIndex:! !Trait method! instVarNames "Answer an Array of the receiver's instance variable names." self instanceVariables == nil ifTrue: [^#()] ifFalse: [^self instanceVariables]! ! TraitDescription removeSelector: #instVarNames! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instVarNamesAndOffsetsDo: aBinaryBlock]. 1 to: self instSize - superInstSize do: [:i| aBinaryBlock value: (self instanceVariables at: i) value: i + superInstSize]! ! TraitDescription removeSelector: #instVarNamesAndOffsetsDo:! !Trait method! instanceVariablesString "Answer a string of my instance variable names separated by spaces." ^String streamContents: [ :stream | self instVarNames do: [ :each | stream nextPutAll: each ] separatedBy: [ stream space ] ]! ! TraitDescription removeSelector: #instanceVariablesString! !Trait method! newInstanceFrom: oldInstance variable: variable size: instSize map: map "Create a new instance of the receiver based on the given old instance. The supplied map contains a mapping of the old instVar names into the receiver's instVars" | new | variable ifTrue: [new := self basicNew: oldInstance basicSize] ifFalse: [new := self basicNew]. 1 to: instSize do: [:offset | (map at: offset) > 0 ifTrue: [new instVarAt: offset put: (oldInstance instVarAt: (map at: offset))]]. variable ifTrue: [1 to: oldInstance basicSize do: [:offset | new basicAt: offset put: (oldInstance basicAt: offset)]]. ^new! ! TraitDescription removeSelector: #newInstanceFrom:variable:size:map:! !Trait method! notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol | oldPackage newPackage | (newProtocol = oldProtocol) ifTrue: [ ^ self ]. "This indirection is because we need to abstract RPackage from the kernel" #RPackage asClassIfPresent: [ :rPackageClass | newPackage := rPackageClass organizer packageForProtocol: newProtocol inClass: self. oldPackage := rPackageClass organizer packageForProtocol: oldProtocol inClass: self. "Announce recategorization" newPackage = oldPackage ifFalse: [ SystemAnnouncer uniqueInstance methodRepackaged: compiledMethod from: oldPackage to: newPackage ] ]. SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: oldProtocol to: newProtocol inClass: self! ! TraitDescription removeSelector: #notifyRepackage:method:oldProtocol:newProtocol:! !Trait method! printSubclassesOn: aStream level: level "As part of the algorithm for printing a description of the receiver, print the subclass on the file stream, aStream, indenting level times." | subclassNames | aStream crtab: level. aStream nextPutAll: self name. aStream space; print: self instVarNames. self == Class ifTrue: [aStream crtab: level + 1; nextPutAll: '[ ... all the Metaclasses ... ]'. ^self]. subclassNames := self subclasses asSortedCollection:[:c1 :c2| c1 name <= c2 name]. "Print subclasses in alphabetical order" subclassNames do: [:subclass | subclass printSubclassesOn: aStream level: level + 1]! ! TraitDescription removeSelector: #printSubclassesOn:level:! !Trait method! setInstVarNames: instVarArray "Private - for class initialization only" | required | required := self instSize. self superclass notNil ifTrue:[required := required - self superclass instSize]. instVarArray size = required ifFalse:[^self error: required printString, ' instvar names are required']. instVarArray isEmpty ifTrue:[self instanceVariables: nil] ifFalse:[self instanceVariables: instVarArray asArray].! ! TraitDescription removeSelector: #setInstVarNames:! !Trait method! sharedPoolOfVarNamed: aString "Only classes may have shared pools" ^ nil! ! TraitDescription removeSelector: #sharedPoolOfVarNamed:! !Trait method! sharedPoolsString "Answer a string of my shared pool names separated by spaces." ^String streamContents: [ :stream | self sharedPools do: [ :each | stream nextPutAll: (self environment keyAtIdentityValue: each ifAbsent: [ 'private' ]) ] separatedBy: [ stream space ] ]! ! TraitDescription removeSelector: #sharedPoolsString! !Trait method! subclasses ^ Array new! ! TraitDescription removeSelector: #subclasses! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." ^self subclasses do: aBlock! ! TraitDescription removeSelector: #subclassesDo:! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self instanceVariables: nil. self organization: nil.! ! TraitDescription removeSelector: #superclass:methodDictionary:format:! !Trait method! updateInstances: oldInstances from: oldClass isMeta: isMeta "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "If there are any contexts having an old instance as receiver it might crash the system because the layout has changed, and the method only knows about the old layout." | map variable instSize newInstances | oldInstances isEmpty ifTrue:[^#()]. "no instances to convert" isMeta ifTrue: [ oldInstances size = 1 ifFalse:[^self error:'Metaclasses can only have one instance']. self soleInstance class == self ifTrue:[ ^self error:'Metaclasses can only have one instance']]. map := self instVarMappingFrom: oldClass. variable := self isVariable. instSize := self instSize. newInstances := Array new: oldInstances size. 1 to: oldInstances size do:[:i| newInstances at: i put: ( self newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)]. "Now perform a bulk mutation of old instances into new ones" oldInstances elementsExchangeIdentityWith: newInstances. ^newInstances "which are now old"! ! TraitDescription removeSelector: #updateInstances:from:isMeta:! !Trait method! updateInstancesFrom: oldClass "Recreate any existing instances of the argument, oldClass, as instances of the receiver, which is a newly changed class. Permute variables as necessary. Return the array of old instances (none of which should be pointed to legally by anyone but the array)." "ar 7/15/1999: The updating below is possibly dangerous. If there are any contexts having an old instance as receiver it might crash the system if the new receiver in which the context is executed has a different layout. See bottom below for a simple example:" | oldInstances | oldInstances := oldClass allInstances asArray. oldInstances := self updateInstances: oldInstances from: oldClass isMeta: self isMeta. ^oldInstances " | crashingBlock class | class := Object subclass: #CrashTestDummy instanceVariableNames: 'instVar' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. class compile:'instVar: value instVar := value'. class compile:'crashingBlock ^[instVar]'. crashingBlock := (class new) instVar: 42; crashingBlock. Object subclass: #CrashTestDummy instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Crash-Test'. crashingBlock. crashingBlock value. " ! ! TraitDescription removeSelector: #updateInstancesFrom:! !Trait method! updateOrganizationDescription: aTraitMethodDescription oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories | sel effectiveCategory currentCategory | sel := aTraitMethodDescription selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := aTraitMethodDescription effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. ^ self organization removeElement: sel ]. ((currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) and: [ currentCategory ~~ effectiveCategory ]) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! TraitDescription removeSelector: #updateOrganizationDescription:oldCategory:newCategory:changedCategories:! !Trait method! usesLocalPoolVarNamed: aString ^ false! ! TraitDescription removeSelector: #usesLocalPoolVarNamed:! !Trait method! usesPoolVarNamed: aString "Only classes may use a pool variable named: aString" ^ false! ! TraitDescription removeSelector: #usesPoolVarNamed:! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! TraitBehavior class removeSelector: #canZapMethodDictionary! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! TraitBehavior class removeSelector: #cleanUp! !Trait method! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! TraitBehavior removeSelector: #addObsoleteSubclass:! !Trait method! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! TraitBehavior removeSelector: #adoptInstance:! !Trait method! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! TraitBehavior removeSelector: #allInstances! !Trait method! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! TraitBehavior removeSelector: #allInstancesDo:! !Trait method! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! TraitBehavior removeSelector: #allLocalCallsOn:! !Trait method! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! TraitBehavior removeSelector: #allMethods! !Trait method! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! TraitBehavior removeSelector: #allSelectorsAbove! !Trait method! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! TraitBehavior removeSelector: #allSelectorsAboveUntil:! !Trait method! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! TraitBehavior removeSelector: #allSelectorsBelow:! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! TraitBehavior removeSelector: #allSelectorsWithout:! !Trait method! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! TraitBehavior removeSelector: #allSharedPools! !Trait method! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! TraitBehavior removeSelector: #allSubInstances! !Trait method! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! TraitBehavior removeSelector: #allSubInstancesDo:! !Trait method! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! TraitBehavior removeSelector: #allSubclassesWithLevelDo:startingLevel:! !Trait method! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! TraitBehavior removeSelector: #allSuperclassesIncluding:! !Trait method! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! TraitBehavior removeSelector: #allUnreferencedInstanceVariables! !Trait method! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! TraitBehavior removeSelector: #allowsSubInstVars! !Trait method! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! TraitBehavior removeSelector: #basicNew! !Trait method! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! TraitBehavior removeSelector: #basicNew:! !Trait method! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! TraitBehavior removeSelector: #becomeCompact! !Trait method! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! TraitBehavior removeSelector: #becomeCompactSimplyAt:! !Trait method! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! TraitBehavior removeSelector: #becomeUncompact! !Trait method! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! TraitBehavior removeSelector: #canPerform:! !Trait method! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! TraitBehavior removeSelector: #checkCanBeUncompact! !Trait method! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! TraitBehavior removeSelector: #classBindingOf:! !Trait method! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! TraitBehavior removeSelector: #classDepth! !Trait method! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! TraitBehavior removeSelector: #cleanUp! !Trait method! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! TraitBehavior removeSelector: #cleanUp:! !Trait method! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! TraitBehavior removeSelector: #commentsAt:! !Trait method! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! TraitBehavior removeSelector: #commentsIn:! !Trait method! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! TraitBehavior removeSelector: #copiedFromSuperclass:! !Trait method! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! TraitBehavior removeSelector: #copiedMethodsFromSuperclass! !Trait method! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! TraitBehavior removeSelector: #copiesFromSuperclass:! !Trait method! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! TraitBehavior removeSelector: #copiesMethodsFromSuperclass! !Trait method! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! TraitBehavior removeSelector: #flushCache! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! TraitBehavior removeSelector: #hasAbstractMethods! !Trait method! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! TraitBehavior removeSelector: #includesSharedPoolNamed:! !Trait method! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! TraitBehavior removeSelector: #indexIfCompact! !Trait method! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! TraitBehavior removeSelector: #instSpec! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! TraitBehavior removeSelector: #instVarNamesAndOffsetsDo:! !Trait method! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! TraitBehavior removeSelector: #instanceCount! !Trait method! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! TraitBehavior removeSelector: #instancesSizeInMemory! !Trait method! isAnonymous ^true! ! TraitBehavior removeSelector: #isAnonymous! !Trait method! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! TraitBehavior removeSelector: #isBits! !Trait method! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! TraitBehavior removeSelector: #isBytes! !Trait method! isCompact ^self indexIfCompact ~= 0! ! TraitBehavior removeSelector: #isCompact! !Trait method! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! TraitBehavior removeSelector: #isFixed! !Trait method! isMeta ^ false! ! TraitBehavior removeSelector: #isMeta! !Trait method! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! TraitBehavior removeSelector: #isObsolete! !Trait method! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! TraitBehavior removeSelector: #isPointers! !Trait method! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! TraitBehavior removeSelector: #isVariable! !Trait method! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! TraitBehavior removeSelector: #isWeak! !Trait method! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! TraitBehavior removeSelector: #isWords! !Trait method! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! TraitBehavior removeSelector: #kindOfSubclass! !Trait method! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! TraitBehavior removeSelector: #new! !Trait method! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! TraitBehavior removeSelector: #new:! !Trait method! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! TraitBehavior removeSelector: #nextQuotePosIn:startingFrom:! !Trait method! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! TraitBehavior removeSelector: #nonObsoleteClass! !Trait method! numberOfInstanceVariables ^ self instVarNames size ! ! TraitBehavior removeSelector: #numberOfInstanceVariables! !Trait method! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! TraitBehavior removeSelector: #obsoleteSubclasses! !Trait method! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! TraitBehavior removeSelector: #printHierarchy! !Trait method! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! TraitBehavior removeSelector: #printOn:! !Trait method! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! TraitBehavior removeSelector: #removeAllObsoleteSubclasses! !Trait method! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! TraitBehavior removeSelector: #removeObsoleteSubclass:! !Trait method! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! TraitBehavior removeSelector: #selectSubclasses:! !Trait method! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! TraitBehavior removeSelector: #selectSuperclasses:! !Trait method! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! TraitBehavior removeSelector: #shouldNotBeRedefined! !Trait method! shutDown "This message is sent on system shutdown to registered classes" ! ! TraitBehavior removeSelector: #shutDown! !Trait method! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! TraitBehavior removeSelector: #shutDown:! !Trait method! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! TraitBehavior removeSelector: #someInstance! !Trait method! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! TraitBehavior removeSelector: #sourceMatchesBytecodeAt:! !Trait method! startUp "This message is sent to registered classes when the system is coming up." ! ! TraitBehavior removeSelector: #startUp! !Trait method! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! TraitBehavior removeSelector: #startUp:! !Trait method! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! TraitBehavior removeSelector: #subclassInstVarNames! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! TraitBehavior removeSelector: #subclassesDo:! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! TraitBehavior removeSelector: #superclass:methodDictionary:format:! !Trait method! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! TraitBehavior removeSelector: #supermostPrecodeCommentFor:! !Trait method! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! TraitBehavior removeSelector: #typeOfClass! !Trait method! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! TraitBehavior removeSelector: #unreferencedInstanceVariables! !Trait method! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! TraitBehavior removeSelector: #variablesAndOffsetsDo:! !Trait method! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! TraitBehavior removeSelector: #whichClassDefinesClassVar:! !Trait method! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! TraitBehavior removeSelector: #whichClassDefinesInstVar:! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! TraitBehavior removeSelector: #whichSelectorsAccess:! !Trait method! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! TraitBehavior removeSelector: #whichSelectorsAssign:! !Trait method! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! TraitBehavior removeSelector: #whichSelectorsRead:! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! TraitBehavior removeSelector: #whichSelectorsStoreInto:! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! TraitBehavior removeSelector: #whichSuperclassSatisfies:! !Trait method! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! TraitBehavior removeSelector: #withAllSubAndSuperclassesDo:! !Trait method! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! TraitBehavior removeSelector: #withAllSuperAndSubclassesDo:! !Trait method! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! TraitBehavior removeSelector: #withAllSuperclassesDo:! ----End fileIn----! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 21:36'! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !Trait method! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 21:32'! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !Trait method! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 21:36' prior: 44187061! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !Trait method! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 21:32' prior: 44187264! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !Trait method! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !TraitBehavior methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:12'! superclass "For compatibility with classes" ^ nil! ! !TraitBehavior methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:12' prior: 53320326! subclasses "for compatibility with classes" ^ #()! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/3/2013 18:40' prior: 53325788! isTrait ^true! ! !TraitBehavior methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:12' prior: 44187988! superclass "For compatibility with classes" ^ nil! ! !TraitBehavior methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:12' prior: 44188143! subclasses "for compatibility with classes" ^ #()! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/3/2013 18:40' prior: 44188293! isTrait ^true! ! !TraitDescription methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:27'! instanceVariables ^#().! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/3/2013 18:37' prior: 53376323! copyTraitExpression "When recursively copying a trait expression, the primitive traits should NOT be copied because they are globally named 'well-known' objects" ^ self ! ! !TraitDescription methodsFor: 'compatibility' stamp: 'SebastianTleye 7/3/2013 19:27' prior: 44188819! instanceVariables ^#().! ! !TraitDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/3/2013 18:37' prior: 44188943! copyTraitExpression "When recursively copying a trait expression, the primitive traits should NOT be copied because they are globally named 'well-known' objects" ^ self ! ! Trait removeSelector: #subclasses! Trait removeSelector: #superclass! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! TraitDescription removeSelector: #acceptsLoggingOfCompilation! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! TraitDescription removeSelector: #addCategory:before:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! TraitDescription removeSelector: #addSelector:withMethod:notifying:! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! TraitDescription removeSelector: #addSelectorSilently:withMethod:! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! TraitDescription removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! TraitDescription removeSelector: #classComment:! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! TraitDescription removeSelector: #classComment:stamp:! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! TraitDescription removeSelector: #comment! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! TraitDescription removeSelector: #comment:! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! TraitDescription removeSelector: #comment:stamp:! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! TraitDescription removeSelector: #commentStamp:! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! TraitDescription removeSelector: #commentStamp:prior:! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! TraitDescription removeSelector: #compile:classified:! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! TraitDescription removeSelector: #compile:classified:notifying:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! TraitDescription removeSelector: #compile:classified:withStamp:notifying:! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! TraitDescription removeSelector: #compile:classified:withStamp:notifying:logSource:! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! TraitDescription removeSelector: #compile:notifying:! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! TraitDescription removeSelector: #compileSilently:! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! TraitDescription removeSelector: #compileSilently:classified:! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! TraitDescription removeSelector: #compileSilently:classified:notifying:! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! TraitDescription removeSelector: #copy:from:! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! TraitDescription removeSelector: #copy:from:classified:! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! TraitDescription removeSelector: #copyAll:from:! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! TraitDescription removeSelector: #copyAll:from:classified:! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! TraitDescription removeSelector: #copyAllCategoriesFrom:! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! TraitDescription removeSelector: #copyCategory:from:! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! TraitDescription removeSelector: #copyCategory:from:classified:! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! TraitDescription removeSelector: #copyMethodDictionaryFrom:! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! TraitDescription removeSelector: #correspondingForTest! !Trait method! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! TraitDescription removeSelector: #definition! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! TraitDescription removeSelector: #doneCompiling! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! TraitDescription removeSelector: #duringTestCompileSilently:! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! TraitDescription removeSelector: #duringTestCompileSilently:classified:! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! TraitDescription removeSelector: #errorCategoryName! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! TraitDescription removeSelector: #fileOutCategory:! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! TraitDescription removeSelector: #fileOutCategory:on:moveSource:toFile:! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! TraitDescription removeSelector: #fileOutChangedMessages:on:! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! TraitDescription removeSelector: #fileOutChangedMessages:on:moveSource:toFile:! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! TraitDescription removeSelector: #fileOutMethod:! !Trait method! fileOutMethod: selector on: aStream (selector == #Comment) ifTrue: [^ self inform: 'Sorry, cannot file out class comment in isolation.']. (self includesSelector: selector) ifFalse: [^ self error: 'Selector ', selector asString, ' not found']. aStream header; timeStamp. self printMethodChunk: selector withPreamble: true on: aStream moveSource: false toFile: 0.! ! TraitDescription removeSelector: #fileOutMethod:on:! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! TraitDescription removeSelector: #fileOutOn:! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! TraitDescription removeSelector: #fileOutOn:moveSource:toFile:! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! TraitDescription removeSelector: #fileOutOrganizationOn:! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! TraitDescription removeSelector: #hasComment! !Trait method! isClassSide ^self == self classSide! ! TraitDescription removeSelector: #isClassSide! !Trait method! isInstanceSide ^self isClassSide not! ! TraitDescription removeSelector: #isInstanceSide! !Trait method! isMeta ^self isClassSide! ! TraitDescription removeSelector: #isMeta! !Trait method! linesOfCode "An approximate measure of lines of code. Includes comments, but excludes blank lines." | lines | lines := self localMethods inject: 0 into: [:sum :each | sum + each linesOfCode]. ^ self isMeta ifTrue: [lines] ifFalse: [lines + self class linesOfCode]! ! TraitDescription removeSelector: #linesOfCode! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! TraitDescription removeSelector: #localMethods! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! TraitDescription removeSelector: #logMethodSource:forMethod:inCategory:withStamp:! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! TraitDescription removeSelector: #methodsFor:! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! TraitDescription removeSelector: #methodsInCategory:! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! TraitDescription removeSelector: #moveChangesTo:! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! TraitDescription removeSelector: #noteAddedSelector:meta:! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! TraitDescription removeSelector: #noteCompilationOf:meta:! !Trait method! noteMethodAdded: aMethod SystemAnnouncer uniqueInstance methodAdded: aMethod! ! TraitDescription removeSelector: #noteMethodAdded:! !Trait method! noteMethodChanged: oldMethod to: newMethod SystemAnnouncer uniqueInstance methodChangedFrom: oldMethod to: newMethod ! ! TraitDescription removeSelector: #noteMethodChanged:to:! !Trait method! noteMethodRemoved: oldMethod SystemAnnouncer uniqueInstance methodRemoved: oldMethod! ! TraitDescription removeSelector: #noteMethodRemoved:! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! TraitDescription removeSelector: #noteRecategorizedSelector:from:to:! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! TraitDescription removeSelector: #noteRecategorizedSelectors:oldComposition:! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! TraitDescription removeSelector: #printCategoryChunk:on:withStamp:priorMethod:! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! TraitDescription removeSelector: #printMethodChunk:withPreamble:on:moveSource:toFile:! !Trait method! printOn: aStream aStream nextPutAll: self name! ! TraitDescription removeSelector: #printOn:! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! TraitDescription removeSelector: #putClassCommentToCondensedChangesFile:! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! TraitDescription removeSelector: #reformatAll! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! TraitDescription removeSelector: #removeCategory:! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! TraitDescription removeSelector: #reorganize! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! TraitDescription removeSelector: #selectorsToFileOutCategory:! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! TraitDescription removeSelector: #storeOn:! !Trait method! subclasses ^ Array new! ! TraitDescription removeSelector: #subclasses! !Trait method! subject "for compatibility with TraitTransformations" ^ self ! ! TraitDescription removeSelector: #subject! !Trait method! trait "for compatibility with TraitTransformations" ^ self ! ! TraitDescription removeSelector: #trait! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! TraitDescription removeSelector: #uncategorizedMethods! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! TraitDescription removeSelector: #updateOrganizationDescription:oldCategory:newCategory:changed:! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! TraitDescription removeSelector: #wantsChangeSetLogging! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! TraitDescription removeSelector: #wantsRecompilationProgressReported! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! TraitDescription removeSelector: #whichCategoryIncludesSelector:! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! TraitDescription removeSelector: #zapOrganization! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! TraitBehavior removeSelector: #>>! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! TraitBehavior removeSelector: #addExclusionOf:to:! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! TraitBehavior removeSelector: #addSelector:withMethod:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! TraitBehavior removeSelector: #addSelector:withMethod:notifying:! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! TraitBehavior removeSelector: #addToComposition:! !Trait method! addUser: aClassOrTrait self users add: aClassOrTrait.! ! TraitBehavior removeSelector: #addUser:! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! TraitBehavior removeSelector: #allClassVarNames! !Trait method! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! TraitBehavior removeSelector: #allInstVarNames! !Trait method! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! TraitBehavior removeSelector: #allSelectors! !Trait method! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! TraitBehavior removeSelector: #allSubclasses! !Trait method! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! TraitBehavior removeSelector: #allSubclassesDo:! !Trait method! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! TraitBehavior removeSelector: #allSuperclasses! !Trait method! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! TraitBehavior removeSelector: #allSuperclassesDo:! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! TraitBehavior removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! basicAddSelector: arg1 withMethod: arg2 self traitConflict ! ! TraitBehavior removeSelector: #basicAddSelector:withMethod:! !Trait method! binding ^ nil -> self! ! TraitBehavior removeSelector: #binding! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! TraitBehavior removeSelector: #canZapMethodDictionary! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! TraitBehavior removeSelector: #changeRecordsAt:! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! TraitBehavior removeSelector: #compile:! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! TraitBehavior removeSelector: #compile:classified:notifying:trailer:ifFail:! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! TraitBehavior removeSelector: #compile:notifying:! !Trait method! compileAll ^ self compileAllFrom: self! ! TraitBehavior removeSelector: #compileAll! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! TraitBehavior removeSelector: #compileAllFrom:! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! TraitBehavior removeSelector: #compiledMethodAt:! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! TraitBehavior removeSelector: #compiledMethodAt:ifAbsent:! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! TraitBehavior removeSelector: #compiler! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! TraitBehavior removeSelector: #compilerClass! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! TraitBehavior removeSelector: #compress! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! TraitBehavior removeSelector: #copyOfMethodDictionary! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! TraitBehavior removeSelector: #decompilerClass! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! TraitBehavior removeSelector: #deepCopy! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! TraitBehavior removeSelector: #defaultMethodTrailer! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! TraitBehavior removeSelector: #deregisterLocalSelector:! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! TraitBehavior removeSelector: #emptyMethodDictionary! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! TraitBehavior removeSelector: #ensureLocalSelectors! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! TraitBehavior removeSelector: #environment! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! TraitBehavior removeSelector: #evaluate:! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! TraitBehavior removeSelector: #evaluatorClass! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! TraitBehavior removeSelector: #firstCommentAt:! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! TraitBehavior removeSelector: #firstPrecodeCommentFor:! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! TraitBehavior removeSelector: #flattenDown:! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! TraitBehavior removeSelector: #flattenDownAllTraits! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! TraitBehavior removeSelector: #hasMethods! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! TraitBehavior removeSelector: #includesLocalSelector:! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! TraitBehavior removeSelector: #includesSelector:! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! TraitBehavior removeSelector: #isAliasSelector:! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! TraitBehavior removeSelector: #isDisabledSelector:! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! TraitBehavior removeSelector: #isLocalAliasSelector:! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! TraitBehavior removeSelector: #literalScannedAs:notifying:! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! TraitBehavior removeSelector: #localSelectors! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! TraitBehavior removeSelector: #longPrintOn:! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! TraitBehavior removeSelector: #methodDictAddSelectorSilently:withMethod:! !Trait method! methodDictionary "Convenience" ^self methodDict! ! TraitBehavior removeSelector: #methodDictionary! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! TraitBehavior removeSelector: #methodDictionary:! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! TraitBehavior removeSelector: #methodNamed:! !Trait method! methods ^ self methodDict values! ! TraitBehavior removeSelector: #methods! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! TraitBehavior removeSelector: #methodsDo:! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! TraitBehavior removeSelector: #methodsInProtocol:! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! TraitBehavior removeSelector: #noteChangedSelectors:! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! TraitBehavior removeSelector: #notifyUsersOfChangedSelector:! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! TraitBehavior removeSelector: #notifyUsersOfChangedSelectors:! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! TraitBehavior removeSelector: #obsolete! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! TraitBehavior removeSelector: #originalName! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! TraitBehavior removeSelector: #parserClass! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! TraitBehavior removeSelector: #postCopy! !Trait method! protocols ^ self organization categories copy! ! TraitBehavior removeSelector: #protocols! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! TraitBehavior removeSelector: #purgeLocalSelectors! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! TraitBehavior removeSelector: #recompile:! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! TraitBehavior removeSelector: #recompileChanges! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! TraitBehavior removeSelector: #registerLocalSelector:! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! TraitBehavior removeSelector: #removeAlias:of:! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! TraitBehavior removeSelector: #removeFromComposition:! TraitBehavior removeSelector: #removeFromTraitCompositionOfUsers! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! TraitBehavior removeSelector: #removeSelectorSilently:! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! TraitBehavior removeSelector: #removeTraitSelector:! !Trait method! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! TraitBehavior removeSelector: #removeUser:! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! TraitBehavior removeSelector: #selectors! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! TraitBehavior removeSelector: #selectorsAndMethodsDo:! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! TraitBehavior removeSelector: #selectorsDo:! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! TraitBehavior removeSelector: #setTraitComposition:! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! TraitBehavior removeSelector: #setTraitCompositionFrom:! !Trait method! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! TraitBehavior removeSelector: #sharedPools! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! TraitBehavior removeSelector: #sourceCodeAt:! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! TraitBehavior removeSelector: #sourceCodeAt:ifAbsent:! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! TraitBehavior removeSelector: #sourceCodeTemplate! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! TraitBehavior removeSelector: #spaceUsed! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! TraitBehavior removeSelector: #storeLiteral:on:! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! TraitBehavior removeSelector: #thoroughHasSelectorReferringTo:special:byte:! !Trait method! thoroughWhichSelectorsReferTo: arg1 special: arg2 byte: arg3 self traitConflict! ! TraitBehavior removeSelector: #thoroughWhichSelectorsReferTo:special:byte:! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! TraitBehavior removeSelector: #traitCompositionIncludes:! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! TraitBehavior removeSelector: #traitCompositionString! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! TraitBehavior removeSelector: #traitOrClassOfSelector:! !Trait method! traitTransformations ^ self traitComposition transformations ! ! TraitBehavior removeSelector: #traitTransformations! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! TraitBehavior removeSelector: #traits! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! TraitBehavior removeSelector: #traitsProvidingSelector:! !Trait method! ultimateSourceCodeAt: arg1 ifAbsent: arg2 self traitConflict ! ! TraitBehavior removeSelector: #ultimateSourceCodeAt:ifAbsent:! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! TraitBehavior removeSelector: #updateMethodDictionarySelector:! !Trait method! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! TraitBehavior removeSelector: #whichClassIncludesSelector:! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! TraitBehavior removeSelector: #whichSelectorsReferTo:! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! TraitBehavior removeSelector: #whichSelectorsReferTo:special:byte:! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! TraitBehavior removeSelector: #withAllSubclasses! !Trait method! withAllSubclassesDo: arg1 self traitConflict! ! TraitBehavior removeSelector: #withAllSubclassesDo:! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! TraitBehavior removeSelector: #withAllSuperclasses! !Trait method! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! TraitBehavior removeSelector: #zapAllMethods! !Trait method! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! !Trait method! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! TPureBehavior removeSelector: #basicAddSelector:withMethod:! TPureBehavior removeSelector: #classAndMethodFor:do:ifAbsent:! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! TClassDescription removeSelector: #removeSelector:! ----End fileIn----! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:02' prior: 40961681! users ^self explicitRequirement.! ! !Trait method! users ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 10:53' prior: 40918332! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !Trait method! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:07'! users: aCollection ^self explicitRequirement.! ! !Trait method! users: aCollection ^self explicitRequirement.! ! !Trait method! users: aCollection ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 22:31' prior: 41198439! hasTraitComposition ^ self traitComposition notEmpty.! ! !TBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/4/2013 11:27' prior: 40928470! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 11:22'! setFormat: aFormatInstanceDescription ^self explicitRequirement.! ! !Trait method! setFormat: aFormatInstanceDescription ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:18'! superclass: aClass ^self explicitRequirement.! ! !Trait method! superclass: aClass ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:18'! superclass ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/3/2013 22:48'! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 10:37'! classPool ^ Dictionary new! ! !Trait method! classPool ^ Dictionary new! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:02' prior: 44254441! users ^self explicitRequirement.! ! !Trait method! users ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 10:53' prior: 44254618! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !Trait method! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:07' prior: 44254961! users: aCollection ^self explicitRequirement.! ! !Trait method! users: aCollection ^self explicitRequirement.! ! !Trait method! users: aCollection ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/3/2013 22:31' prior: 44255229! hasTraitComposition ^ self traitComposition notEmpty.! ! !TBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/4/2013 11:27' prior: 44255388! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 11:22' prior: 44256072! setFormat: aFormatInstanceDescription ^self explicitRequirement.! ! !Trait method! setFormat: aFormatInstanceDescription ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:18' prior: 44256316! superclass: aClass ^self explicitRequirement.! ! !Trait method! superclass: aClass ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:18' prior: 44256522! superclass ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/3/2013 22:48' prior: 44256639! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 10:37' prior: 44256929! classPool ^ Dictionary new! ! !Trait method! classPool ^ Dictionary new! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/3/2013 22:40' prior: 53319880! instSize ^0! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 11:21' prior: 44258841! setFormat: aFormatInstanceDescription "Compatibility purposes"! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:07' prior: 44257695! users: aCollection users := aCollection.! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:17' prior: 44259082! superclass: aClass "Compatibility purposes"! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/3/2013 22:40' prior: 44259848! instSize ^0! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 11:21' prior: 44259957! setFormat: aFormatInstanceDescription "Compatibility purposes"! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:07' prior: 44260116! users: aCollection users := aCollection.! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/4/2013 11:17' prior: 44260272! superclass: aClass "Compatibility purposes"! ! !Behavior methodsFor: 'testing' stamp: 'SebastianTleye 7/4/2013 13:06' prior: 41307277! isBehavior "Return true if the receiver is a behavior" ^true! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:37' prior: 18077016! traitComposition: aTraitComposition "Compatibility purposes"! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:04' prior: 44257146! users "Compatibility purposes" ^IdentitySet new.! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:06' prior: 44257760! users: aCollection "Compatibility purposes"! ! !Behavior methodsFor: 'testing' stamp: 'SebastianTleye 7/4/2013 13:06' prior: 44260975! isBehavior "Return true if the receiver is a behavior" ^true! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:37' prior: 44261128! traitComposition: aTraitComposition "Compatibility purposes"! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:04' prior: 44261280! users "Compatibility purposes" ^IdentitySet new.! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/4/2013 11:06' prior: 44261421! users: aCollection "Compatibility purposes"! ! !Trait method! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! Behavior removeSelector: #classesComposedWithMe! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! Behavior removeSelector: #hasTraitComposition! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! Behavior removeSelector: #poolDictionaryNames! !Trait method! canUnderstand: arg1 self traitConflict! ! TraitBehavior removeSelector: #canUnderstand:! !Trait method! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! TraitBehavior removeSelector: #classAndMethodFor:do:ifAbsent:! !Trait method! classPool ^ Dictionary new! ! TraitBehavior removeSelector: #classPool! !Trait method! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! TraitBehavior removeSelector: #classVarNames! !Trait method! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! TraitBehavior removeSelector: #classesComposedWithMe! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! TraitBehavior removeSelector: #hasTraitComposition! !Trait method! includesBehavior: arg1 self traitConflict! ! TraitBehavior removeSelector: #includesBehavior:! !Trait method! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! TraitBehavior removeSelector: #inheritsFrom:! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! TraitBehavior removeSelector: #initialize! !Trait method! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! TraitBehavior removeSelector: #instVarNames! !Trait method! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! TraitBehavior removeSelector: #isComposedBy:! !Trait method! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! TraitBehavior removeSelector: #lookupSelector:! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! TraitBehavior removeSelector: #poolDictionaryNames! !Trait method! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! TraitBehavior removeSelector: #precodeCommentOrInheritedCommentFor:! !Trait method! selectorsWithArgs: arg1 self traitConflict! ! TraitBehavior removeSelector: #selectorsWithArgs:! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! TBehavior removeSelector: #canUnderstand:! TBehavior removeSelector: #isBehavior! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! TPureBehavior removeSelector: #hasTraitComposition! TClass removeSelector: #hasTraitComposition! TClass removeSelector: #poolDictionaryNames! ----End fileIn----! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 17:19'! setName: aSymbol self name: aSymbol.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 17:19' prior: 44268535! setName: aSymbol self name: aSymbol.! ! !TClassDescription methodsFor: 'users notification' stamp: 'SebastianTleye 7/4/2013 14:53'! notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory self users do: [:each | each noteRecategorizedSelector: element from: oldCategory to: newCategory]! ! !Trait method! notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory self users do: [:each | each noteRecategorizedSelector: element from: oldCategory to: newCategory]! ! !TClassAndTraitDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/4/2013 14:54' prior: 51857950! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !TClassAndTraitDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/4/2013 14:54' prior: 44269297! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:04'! basicOrganization: aClassOrg ^self explicitRequirement.! ! !Trait method! basicOrganization: aClassOrg ^self explicitRequirement.! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:01' prior: 42020128! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ClassOrganization new] ifFalse: [ClassOrganization forClass: self]) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ClassOrganization new] ifFalse: [ClassOrganization forClass: self]) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:03'! basicOrganization ^self explicitRequirement.! ! !Trait method! basicOrganization ^self explicitRequirement.! ! !TClassDescription methodsFor: 'users notification' stamp: 'SebastianTleye 7/4/2013 14:53'! notifyUsersOfChangedSelectors: aCollection self users do: [:each | each noteChangedSelectors: aCollection]! ! !Trait method! notifyUsersOfChangedSelectors: aCollection self users do: [:each | each noteChangedSelectors: aCollection]! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 13:56'! instanceVariables ^self explicitRequirement.! ! !TClassDescription methodsFor: 'testing' stamp: 'SebastianTleye 7/4/2013 14:02'! isTestCase ^false! ! !Trait method! isTestCase ^false! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:28' prior: 41344833! classSide ^self theMetaClass.! ! !Trait method! classSide ^self theMetaClass.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:28' prior: 40870837! instanceSide ^ self theNonMetaClass! ! !Trait method! instanceSide ^ self theNonMetaClass! ! !TClassDescription methodsFor: 'pool variable' stamp: 'SebastianTleye 7/4/2013 15:23' prior: 40892148! usesLocalPoolVarNamed: aString ^false.! ! !Trait method! usesLocalPoolVarNamed: aString ^false.! ! !Trait method! usesLocalPoolVarNamed: aString ^false.! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:04' prior: 44271518! basicOrganization: aClassOrg ^self explicitRequirement.! ! !Trait method! basicOrganization: aClassOrg ^self explicitRequirement.! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:01' prior: 44271755! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ClassOrganization new] ifFalse: [ClassOrganization forClass: self]) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ClassOrganization new] ifFalse: [ClassOrganization forClass: self]) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 15:03' prior: 44272796! basicOrganization ^self explicitRequirement.! ! !Trait method! basicOrganization ^self explicitRequirement.! ! !TClassDescription methodsFor: 'users notification' stamp: 'SebastianTleye 7/4/2013 14:53' prior: 44268797! notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory self users do: [:each | each noteRecategorizedSelector: element from: oldCategory to: newCategory]! ! !Trait method! notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory self users do: [:each | each noteRecategorizedSelector: element from: oldCategory to: newCategory]! ! !TClassDescription methodsFor: 'users notification' stamp: 'SebastianTleye 7/4/2013 14:53' prior: 44273001! notifyUsersOfChangedSelectors: aCollection self users do: [:each | each noteChangedSelectors: aCollection]! ! !Trait method! notifyUsersOfChangedSelectors: aCollection self users do: [:each | each noteChangedSelectors: aCollection]! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/4/2013 13:56' prior: 44273325! instanceVariables ^self explicitRequirement.! ! !TClassDescription methodsFor: 'testing' stamp: 'SebastianTleye 7/4/2013 14:02' prior: 44273455! isTestCase ^false! ! !Trait method! isTestCase ^false! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:28' prior: 44273632! classSide ^self theMetaClass.! ! !Trait method! classSide ^self theMetaClass.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:28' prior: 44273833! instanceSide ^ self theNonMetaClass! ! !Trait method! instanceSide ^ self theNonMetaClass! ! !TClassDescription methodsFor: 'pool variable' stamp: 'SebastianTleye 7/4/2013 15:23' prior: 44274031! usesLocalPoolVarNamed: aString ^false.! ! !Trait method! usesLocalPoolVarNamed: aString ^false.! ! !Trait method! usesLocalPoolVarNamed: aString ^false.! ! !TPureBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/4/2013 17:20'! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TPureBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/4/2013 17:20' prior: 44277610! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Class methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 17:18'! name: aSymbol name := aSymbol! ! !Class methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 17:18' prior: 44278488! name: aSymbol name := aSymbol! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 14:59' prior: 44275650! basicOrganization ^ organization ! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 14:59' prior: 44274367! basicOrganization: aClassOrg organization := aClassOrg! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 14:59' prior: 44278742! basicOrganization ^ organization ! ! !TraitDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/4/2013 14:59' prior: 44278881! basicOrganization: aClassOrg organization := aClassOrg! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 43463698! isClassTrait ^false! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 43463433! baseTrait ^ self! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 43463527! hasClassTrait ^self classTrait notNil.! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 43463622! isBaseTrait ^true! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 44279345! isClassTrait ^false! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 44279475! baseTrait ^ self! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 44279602! hasClassTrait ^self classTrait notNil.! ! !Trait methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/4/2013 14:46' prior: 44279751! isBaseTrait ^true! ! !Trait method! allSuperclassesFor: aClass cache: cache ^ cache at: aClass ifAbsentPut: [aClass allSuperclasses asArray]! ! Trait class removeSelector: #allSuperclassesFor:cache:! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! Trait class removeSelector: #canZapMethodDictionary! !Trait method! doesNotIncludeInstanceOrSuperclassesFor: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! Trait class removeSelector: #doesNotIncludeInstanceOrSuperclassesFor:in:cache:! !Trait method! fileOutPool: aString "file out the global pool named aString" | internalStream | internalStream := (String new: 1000) writeStream. self new fileOutPool: (self environment at: aString asSymbol) onFileStream: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: aString isSt: true.! ! Trait class removeSelector: #fileOutPool:! !Trait method! hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache ^ (self hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache) and: [ aClass isMeta not or: [ self hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache]] ! ! Trait class removeSelector: #hasNoDependenciesFor:in:cache:! !Trait method! hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! Trait class removeSelector: #hasNoDependenciesForMetaclass:in:cache:! !Trait method! hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache ^ (unprocessedClasses includesAnyOf: (self allSuperclassesFor: aClass cache: cache)) not ! ! Trait class removeSelector: #hasNoSuperclassesOf:in:cache:! !Trait method! rootsOfTheWorld "return all classes that have a nil superclass" ^(Smalltalk globals select: [:each | each isBehavior and: [each superclass isNil]]) asOrderedCollection! ! Trait class removeSelector: #rootsOfTheWorld! !Trait method! superclassOrder: classes "Arrange the classes in the collection, classes, in superclass order so the classes can be properly filed in. Do it in sets instead of ordered collections." | all unprocessedClasses cache | unprocessedClasses := classes asSet. cache := Dictionary new. all := OrderedCollection new: unprocessedClasses size. unprocessedClasses size timesRepeat: [ |nextClass| nextClass := unprocessedClasses detect: [:aClass | self hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache]. all add: nextClass. unprocessedClasses remove: nextClass]. ^all! ! Trait class removeSelector: #superclassOrder:! !Trait method! template: aSystemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class." ^ self templateForSubclassOf: Object name category: aSystemCategoryName ! ! Trait class removeSelector: #template:! !Trait method! templateForSubclassOf: priorClassName category: systemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class, given that the class previously looked at was as given" ^priorClassName asString, ' subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategoryName asString , ''''! ! Trait class removeSelector: #templateForSubclassOf:category:! !Trait method! addClassVarNamed: aString "Add the argument, aString, as a class variable of the receiver. Signal an error if the first character of aString is not capitalized, or if it is already a variable named in the class." | symbol oldState | oldState := self copy. aString first canBeGlobalVarInitial ifFalse: [^self error: aString, ' class variable name should be capitalized; proceed to include anyway.']. symbol := aString asSymbol. self withAllSubclasses do: [:subclass | (subclass bindingOf: symbol) ifNotNil:[ ^ self error: aString , ' is already used as a variable name in class ' , subclass name]]. (self classPool includesKey: symbol) ifFalse: ["Pick up any refs in Undeclared" self classPool declare: symbol from: Undeclared. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: oldState to: self]! ! Trait removeSelector: #addClassVarNamed:! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! Trait removeSelector: #addInstVarNamed:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! Trait removeSelector: #addSelector:withMethod:notifying:! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! Trait removeSelector: #addSelectorSilently:withMethod:! !Trait method! addSharedPool: aSharedPool "Add the argument, aSharedPool, as one of the receiver's shared pools. Create an error if the shared pool is already one of the pools. This method will work with shared pools that are plain Dictionaries or thenewer SharedPool subclasses" (self sharedPools includes: aSharedPool) ifTrue: [^self error: 'This is already in my shared pool list']. self sharedPools == nil ifTrue: [self sharedPools: (OrderedCollection with: aSharedPool)] ifFalse: [self sharedPools add: aSharedPool]! ! Trait removeSelector: #addSharedPool:! !Trait method! addSubclass: aSubclass "Make the argument, aSubclass, be one of the subclasses of the receiver. Create an error notification if the argument's superclass is not the receiver." aSubclass superclass ~~ self ifTrue: [^self error: aSubclass name , ' is not my subclass']. self subclasses == nil ifTrue: [self subclasses: (Array with: aSubclass). ^self]. self subclasses do:[:cl| cl == aSubclass ifTrue:[^self]]. "Already my subclass" self subclasses: (self subclasses copyWith: aSubclass).! ! Trait removeSelector: #addSubclass:! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's class variables, including those defined in the superclasses of the receiver." | aSet | self superclass == nil ifTrue: [^self classVarNames asSet] "This is the keys so it is a new Set." ifFalse: [aSet := self superclass allClassVarNames. aSet addAll: self classVarNames. ^aSet]! ! Trait removeSelector: #allClassVarNames! !Trait method! allSharedPools "Answer an ordered collection of the pools the receiver shares, including those defined in the superclasses of the receiver." | aSet | ^self superclass == nil ifTrue: [self sharedPools copy] ifFalse: [aSet := self superclass allSharedPools. aSet addAll: self sharedPools. aSet]! ! Trait removeSelector: #allSharedPools! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self classSide noteNewBaseTraitCompositionApplied: self traitComposition. ^ changedSelectors! ! Trait removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! binding "Answer a binding for the receiver, sharing if possible" | binding | binding := self environment associationAt: self name ifAbsent: [nil -> self]. ^binding value == self ifTrue: [binding] ifFalse: [nil -> self]! ! Trait removeSelector: #binding! !Trait method! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver, or nil if variable with such name is not defined" "The lookup recurses up to superclasses looking inside their class and shared pools, but not the environment, since two classes, even if they have ancestry relationship, could use different environments. That's why we doing an environment lookup only as a last step of symbol lookup and taking only the environment of receiver only, not any of it's superclass(es) " | aSymbol | aSymbol := varName asSymbol. ^ (self innerBindingOf: aSymbol) ifNil: [ self environment bindingOf: aSymbol ]! ! Trait removeSelector: #bindingOf:! !Trait method! category "Answer the system organization category for the receiver. First check whether the category name stored in the ivar is still correct and only if this fails look it up (latter is much more expensive)" | result | self basicCategory ifNotNil: [ :symbol | ((self environment organization listAtCategoryNamed: symbol) includes: self name) ifTrue: [ ^symbol ] ]. self basicCategory: (result := self environment organization categoryOfElement: self name). ^result! ! Trait removeSelector: #category! !Trait method! category: aString "Categorize the receiver under the system category, aString, removing it from any previous categorization." | oldCategory | oldCategory := self basicCategory. aString isString ifTrue: [ self basicCategory: aString asSymbol. self environment organization classify: self name under: self basicCategory ] ifFalse: [self errorCategoryName]. SystemAnnouncer uniqueInstance class: self recategorizedFrom: oldCategory to: self basicCategory! ! Trait removeSelector: #category:! !Trait method! classBuilder "Answer the object responsible of creating subclasses of myself in the system." ^ Smalltalk classBuilder! ! Trait removeSelector: #classBuilder! !Trait method! classPoolFrom: aClass "share the classPool with aClass." self classPool: aClass classPool.! ! Trait removeSelector: #classPoolFrom:! !Trait method! classVarNamed: aString "Answer the content of the Class Variable" ^self classPool at: aString asSymbol ifAbsent: [self error: 'no such lass var']! ! Trait removeSelector: #classVarNamed:! !Trait method! classVarNamed: aString put: anObject "Store anObject in the class variable." | symbol | symbol := aString asSymbol. (self classPool includesKey: symbol) ifFalse: [^self error: 'no such lass var']. self classPool at: symbol put: anObject.! ! Trait removeSelector: #classVarNamed:put:! !Trait method! classVarNames "Answer a collection of the names of the class variables defined in the receiver." ^self classPool keys asArray sort! ! Trait removeSelector: #classVarNames! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! Trait removeSelector: #compile:notifying:! !Trait method! compileAll super compileAll. self class compileAll.! ! Trait removeSelector: #compileAll! !Trait method! compileAllFrom: oldClass "Recompile all the methods in the receiver's method dictionary (not the subclasses). Also recompile the methods in the metaclass." super compileAllFrom: oldClass. self class compileAllFrom: oldClass class! ! Trait removeSelector: #compileAllFrom:! !Trait method! declare: varString "Declare class variables common to all instances. Answer whether recompilation is advisable." | newVars conflicts | newVars := (varString subStrings: ' ') collect: [:x | x asSymbol]. conflicts := false. (self classPool keys reject: [:x | newVars includes: x]) do: [:var | self removeClassVarNamed: var]. (newVars reject: [:var | self classPool includesKey: var]) do: [:var | "adding" "check if new vars defined elsewhere" (self innerBindingOf: var) ifNotNil: [(DuplicatedVariableError new) variable: var; signal: var , ' is defined elsewhere'. conflicts := true]]. newVars notEmpty ifTrue: [self classPool: self classPool. "in case it was nil" newVars do: [:var | self classPool declare: var from: Undeclared]]. ^conflicts! ! Trait removeSelector: #declare:! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler evaluate: newDefinition logged: true. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! Trait removeSelector: #duplicateClassWithNewName:! !Trait method! ensureClassPool ^self classPool.! ! Trait removeSelector: #ensureClassPool! !Trait method! externalName "Answer a name by which the receiver can be known." ^ self name! ! Trait removeSelector: #externalName! !Trait method! fileOut "Create a file whose name is the name of the receiver with '.st' as the extension, and file a description of the receiver onto it." | internalStream | internalStream := (String new: 100) writeStream. internalStream header; timeStamp. self hasSharedPools ifTrue: [ self shouldFileOutPools ifTrue: [self fileOutSharedPoolsOn: internalStream]]. self fileOutOn: internalStream moveSource: false toFile: 0. internalStream trailer. FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true! ! Trait removeSelector: #fileOut! !Trait method! fileOutInitializerOn: aStream ^self class fileOutInitializerOn: aStream! ! Trait removeSelector: #fileOutInitializerOn:! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." ^self fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: true! ! Trait removeSelector: #fileOutOn:moveSource:toFile:! !Trait method! fileOutPool: aPool onFileStream: aFileStream | aPoolName | (aPool isKindOf: SharedPool class) ifTrue:[^self notify: 'we do not fileout SharedPool type shared pools for now']. aPoolName := self environment keyAtIdentityValue: aPool. self crTrace: aPoolName. aFileStream nextPutAll: 'Transcript show: ''' , aPoolName , '''; cr!!'; cr. aFileStream nextPutAll: 'Smalltalk at: #' , aPoolName , ' put: Dictionary new!!'; cr. aPool keys asSortedCollection do: [ :aKey | | aValue | aValue := aPool at: aKey. aFileStream nextPutAll: aPoolName , ' at: #''' , aKey asString , '''', ' put: '. (aValue isKindOf: Number) ifTrue: [aValue printOn: aFileStream] ifFalse: [aFileStream nextPutAll: '('. aValue printOn: aFileStream. aFileStream nextPutAll: ')']. aFileStream nextPutAll: '!!'; cr]. aFileStream cr! ! Trait removeSelector: #fileOutPool:onFileStream:! !Trait method! fileOutSharedPoolsOn: aFileStream "file out the shared pools of this class after prompting the user about each pool" | poolsToFileOut | poolsToFileOut := self sharedPools select: [:aPool | (self shouldFileOutPool: (self environment keyAtIdentityValue: aPool))]. poolsToFileOut do: [:aPool | self fileOutPool: aPool onFileStream: aFileStream]. ! ! Trait removeSelector: #fileOutSharedPoolsOn:! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ super hasAbstractMethods or: [self class hasAbstractMethods] ! ! Trait removeSelector: #hasAbstractMethods! !Trait method! hasClassVarNamed: aString "Return whether the receiver has a class variables (shared variables among its class and subclasses) named: aString" ^ self classVarNames includes: aString! ! Trait removeSelector: #hasClassVarNamed:! !Trait method! hasMethods "Answer a Boolean according to whether any methods are defined for the receiver (includes whether there are methods defined in the receiver's metaclass)." ^super hasMethods or: [self class hasMethods]! ! Trait removeSelector: #hasMethods! !Trait method! hasSharedPools "Returns whether the receiver uses shared pools directly (Does not take into account that it may inherit shared pool uses." ^ self sharedPools notEmpty! ! Trait removeSelector: #hasSharedPools! !Trait method! isAnonymous ^self name isNil! ! Trait removeSelector: #isAnonymous! !Trait method! isMeta ^self isClassSide! ! Trait removeSelector: #isMeta! !Trait method! isObsolete "Return true if the receiver is obsolete." ^(self environment at: self name ifAbsent: [nil]) ~~ self! ! Trait removeSelector: #isObsolete! !Trait method! isSelfEvaluating ^self isObsolete not! ! Trait removeSelector: #isSelfEvaluating! !Trait method! isValidTraitName: aSymbol ^(aSymbol isEmptyOrNil or: [aSymbol first isLetter not or: [aSymbol anySatisfy: [:character | character isAlphaNumeric not]]]) not! ! Trait removeSelector: #isValidTraitName:! !Trait method! name: aString traitComposition: aComposition methodDict: aMethodDict localSelectors: aSet organization: aClassOrganization "Used by copy" self name: aString. self localSelectors: aSet. self methodDict: aMethodDict. self traitComposition: aComposition. self organization: aClassOrganization! ! Trait removeSelector: #name:traitComposition:methodDict:localSelectors:organization:! !Trait method! newSubclass | i className | i := 1. [className := (self name , i printString) asSymbol. self environment includesKey: className] whileTrue: [i := i + 1]. ^ self subclass: className instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' "Point newSubclass new"! ! Trait removeSelector: #newSubclass! !Trait method! possibleVariablesFor: misspelled continuedFrom: oldResults | results | results := misspelled correctAgainstDictionary: self classPool continuedFrom: oldResults. self sharedPools do: [:pool | results := misspelled correctAgainstDictionary: pool continuedFrom: results ]. self superclass == nil ifTrue: [ ^ misspelled correctAgainstDictionary: self environment continuedFrom: results ] ifFalse: [ ^ self superclass possibleVariablesFor: misspelled continuedFrom: results ]! ! Trait removeSelector: #possibleVariablesFor:continuedFrom:! !Trait method! reformatAll "Reformat all methods in this class. Leaves old code accessible to version browsing" super reformatAll. "me..." self class reformatAll "...and my metaclass"! ! Trait removeSelector: #reformatAll! !Trait method! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [^self error: aString, ' is not a class variable']. self withAllSubclasses do:[:subclass | (Array with: subclass with: subclass class) do:[:classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name, ' (' , aString , ' is Undeclared) '. ^Undeclared declare: aSymbol from: self classPool]. (self confirm: (aString,' is still used in code of class ', classOrMeta name, '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [^Undeclared declare: aSymbol from: self classPool] ifFalse: [^self]]]]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [self classPool: nil]. ! ! Trait removeSelector: #removeClassVarNamed:! !Trait method! removeFromChanges "References to the receiver, a class, and its metaclass should no longer be included in the system ChangeSet." ChangeSet current removeClassAndMetaClassChanges: self! ! Trait removeSelector: #removeFromChanges! !Trait method! removeFromSystem "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." self removeFromSystem: true.! ! Trait removeSelector: #removeFromSystem! !Trait method! removeFromSystem: logged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver." "keep the class name and category for triggering the system change message. If we wait to long, then we get obsolete information which is not what we want." "tell class to deactivate and unload itself-- two separate events in the module system" self unload. self users do: [ :user | user removeFromComposition: self ]. self superclass ifNotNil: ["If we have no superclass there's nothing to be remembered" self superclass addObsoleteSubclass: self]. self environment forgetClass: self logged: logged. self obsolete.! ! Trait removeSelector: #removeFromSystem:! !Trait method! removeFromSystemUnlogged "Forget the receiver from the Smalltalk global dictionary. Any existing instances will refer to an obsolete version of the receiver. Do not log the removal either to the current change set nor to the system changes log" ^self removeFromSystem: false! ! Trait removeSelector: #removeFromSystemUnlogged! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newInstVarString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newInstVarString := ''. (self instVarNames copyWithout: aString) do: [:varName | newInstVarString := newInstVarString , ' ' , varName]. ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: newInstVarString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! Trait removeSelector: #removeInstVarNamed:! !Trait method! removeSharedPool: aDictionary "Remove the pool dictionary, aDictionary, as one of the receiver's pool dictionaries. Create an error notification if the dictionary is not one of the pools. : Note that it removes the wrong one if there are two empty Dictionaries in the list." | satisfiedSet workingSet aSubclass | (self sharedPools includes: aDictionary) ifFalse: [^self error: 'the dictionary is not in my pool']. "first see if it is declared in a superclass in which case we can remove it." (self selectSuperclasses: [:class | class sharedPools includes: aDictionary]) isEmpty ifFalse: [self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. ^self]. "second get all the subclasses that reference aDictionary through me rather than a superclass that is one of my subclasses." workingSet := self subclasses asOrderedCollection. satisfiedSet := Set new. [workingSet isEmpty] whileFalse: [aSubclass := workingSet removeFirst. (aSubclass sharedPools includes: aDictionary) ifFalse: [satisfiedSet add: aSubclass. workingSet addAll: aSubclass subclasses]]. "for each of these, see if they refer to any of the variables in aDictionary because if they do, we can not remove the dictionary." satisfiedSet add: self. satisfiedSet do: [:sub | aDictionary associationsDo: [:aGlobal | (sub whichSelectorsReferTo: aGlobal) isEmpty ifFalse: [^self error: aGlobal key , ' is still used in code of class ' , sub name]]]. self sharedPools remove: aDictionary. self sharedPools isEmpty ifTrue: [self sharedPools: nil]! ! Trait removeSelector: #removeSharedPool:! !Trait method! removeSubclass: aSubclass "If the argument, aSubclass, is one of the receiver's subclasses, remove it." self subclasses == nil ifFalse: [self subclasses: (self subclasses copyWithout: aSubclass). self subclasses isEmpty ifTrue: [self subclasses: nil]].! ! Trait removeSelector: #removeSubclass:! !Trait method! rename: aString "The new name of the receiver is the argument, aString." | oldName newName | (newName := aString asSymbol) = (oldName := self name) ifTrue: [^ self]. (self environment includesKey: newName) ifTrue: [^ self error: newName , ' already exists']. self setName: newName. self environment renameClass: self from: oldName. (Undeclared includesKey: newName) ifTrue: [self inform: 'There are references to, ' , aString printString , ' from Undeclared. Check them after this change.'].! ! Trait removeSelector: #rename:! !Trait method! setName: aSymbol self name: aSymbol.! ! Trait removeSelector: #setName:! !Trait method! setName: aSymbol andRegisterInCategory: categorySymbol environment: aSystemDictionary (self isValidTraitName: aSymbol) ifFalse: [TraitException signal: 'Invalid trait name']. (self environment == aSystemDictionary and: [self name = aSymbol and: [self category = categorySymbol]]) ifTrue: [^self]. ((aSystemDictionary includes: aSymbol) and: [(aSystemDictionary at: aSymbol) ~~ self]) ifTrue: [TraitException signal: 'The name ''' , aSymbol , ''' is already used']. (self environment notNil and: [self name notNil and: [self name ~= aSymbol]]) ifTrue: [ self environment renameClass: self as: aSymbol]. self name: aSymbol. self environment: aSystemDictionary. self environment at: self name put: self. self environment organization classify: self name under: categorySymbol. ^ true! ! Trait removeSelector: #setName:andRegisterInCategory:environment:! !Trait method! sharedPoolOfVarNamed: aString "Returns the SharedPool or nil from which the pool variable named aString is coming from." ^ self sharedPools detect: [:each | each usesClassVarNamed: aString ] ifNone: [ self superclass == nil ifTrue: [nil] ifFalse: [self superclass sharedPoolOfVarNamed: aString] ]! ! Trait removeSelector: #sharedPoolOfVarNamed:! !Trait method! sharing: poolString "Set up sharedPools. Answer whether recompilation is advisable." | oldPools | oldPools := self sharedPools. self sharedPools: OrderedCollection new. (poolString subStrings: ' ') do: [:poolName | self sharedPools add: (self environment at: poolName asSymbol ifAbsent:[ (self confirm: 'The pool dictionary ', poolName,' does not exist.', '\Do you want it automatically created?' withCRs) ifTrue:[self environment at: poolName asSymbol put: Dictionary new] ifFalse:[^self error: poolName,' does not exist']])]. self sharedPools isEmpty ifTrue: [self sharedPools: nil]. oldPools do: [:pool | | found | found := self sharedPools anySatisfy: [:p | p == pool]. found ifFalse: [^ true "A pool got deleted"]]. ^ false! ! Trait removeSelector: #sharing:! !Trait method! shouldFileOutPool: aPoolName "respond with true if the user wants to file out aPoolName" ^self confirm: ('FileOut the sharedPool ', aPoolName, '?')! ! Trait removeSelector: #shouldFileOutPool:! !Trait method! shouldFileOutPools "respond with true if the user wants to file out the shared pools" ^self confirm: 'FileOut selected sharedPools?'! ! Trait removeSelector: #shouldFileOutPools! !Trait method! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! Trait removeSelector: #spaceUsed! !Trait method! subclass: t ^ self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! Trait removeSelector: #subclass:! !Trait method! subclass: t instanceVariableNames: ins ^ self subclass: t instanceVariableNames: ins classVariableNames: '' poolDictionaries: '' category: 'Unclassified' ! ! Trait removeSelector: #subclass:instanceVariableNames:! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! Trait removeSelector: #subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! subclass: t uses: aTraitComposition | cls | cls := self subclass: t instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Unclassified'. cls setTraitComposition: aTraitComposition asTraitComposition. ^ cls! ! Trait removeSelector: #subclass:uses:! !Trait method! subclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! Trait removeSelector: #subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses size == 0 ifFalse:[self subclasses do: aBlock]! ! Trait removeSelector: #subclassesDo:! !Trait method! superclass: sup methodDict: md format: ft name: nm organization: org instVarNames: nilOrArray classPool: pool sharedPools: poolSet "Answer an instance of me, a new class, using the arguments of the message as the needed information. Must only be sent to a new instance; else we would need Object flushCache." self superclass: sup. self methodDict: md. self setFormat: ft. self setName: nm. self instanceVariables: nilOrArray. self classPool: pool. self sharedPools: poolSet. self organization: org.! ! Trait removeSelector: #superclass:methodDict:format:name:organization:instVarNames:classPool:sharedPools:! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver" super superclass: aClass methodDictionary: mDict format: fmt. self subclasses: nil. ! ! Trait removeSelector: #superclass:methodDictionary:format:! !Trait method! unload "Sent when a the class is removed. Does nothing, but may be overridden by (class-side) subclasses."! ! Trait removeSelector: #unload! !Trait method! usesClassVarNamed: aString "Return whether the receiver or its superclasses have a class variable named: aString" ^ self allClassVarNames includes: aString! ! Trait removeSelector: #usesClassVarNamed:! !Trait method! usesLocalPoolVarNamed: aString "Return whether the receiver uses a pool variable named: aString which is defined locally" self hasSharedPools ifTrue: [ self sharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [ ^true ]]] ifFalse: [ ^false ]. ^false! ! Trait removeSelector: #usesLocalPoolVarNamed:! !Trait method! usesPoolVarNamed: aString "Return whether the receiver has a pool variable named: aString, taking into account superclasses too" self allSharedPools do: [:each | (each usesClassVarNamed: aString) ifTrue: [^true]]. ^false! ! Trait removeSelector: #usesPoolVarNamed:! !Trait method! variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^self classBuilder superclass: self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! Trait removeSelector: #variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableByteSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableByteSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Trait removeSelector: #variableByteSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^self classBuilder superclass: self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! Trait removeSelector: #variableSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Trait removeSelector: #variableSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^self classBuilder superclass: self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ! ! Trait removeSelector: #variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! variableWordSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self variableWordSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Trait removeSelector: #variableWordSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! Trait removeSelector: #variablesAndOffsetsDo:! !Trait method! weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^self classBuilder superclass: self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat! ! Trait removeSelector: #weakSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! weakSubclass: t uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self weakSubclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass ! ! Trait removeSelector: #weakSubclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category:! !Trait method! withAllSubclassesDo: aBlock | temp | temp := self allSubclassesDo: aBlock. aBlock value: self! ! Trait removeSelector: #withAllSubclassesDo:! !Trait method! withClassVersion: aVersion aVersion = self classVersion ifTrue:[^self]. ^self error: 'Invalid class version'! ! Trait removeSelector: #withClassVersion:! !Trait method! + aTraitOrTraitComposition "Use double dispatch to avoid having nested composition in cases where parenthesis are used, such as T1 + (T2 + T3)" ^aTraitOrTraitComposition addOnTheLeft: self! ! TraitDescription removeSelector: #+! !Trait method! @ anArrayOfAssociations ^ TraitAlias with: self aliases: anArrayOfAssociations! ! TraitDescription removeSelector: #@! !Trait method! addCompositionOnLeft: aTraitComposition ^ aTraitComposition add: self! ! TraitDescription removeSelector: #addCompositionOnLeft:! !Trait method! addOnTheLeft: aTraitExpression ^TraitComposition with: aTraitExpression with: self! ! TraitDescription removeSelector: #addOnTheLeft:! !Trait method! aliasesForSelector: aSelector ^ OrderedCollection new ! ! TraitDescription removeSelector: #aliasesForSelector:! !Trait method! allAliasesDict ^IdentityDictionary new ! ! TraitDescription removeSelector: #allAliasesDict! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! TraitDescription removeSelector: #allMethodsInCategory:! TraitDescription removeSelector: #allSelectorsWithout:! !Trait method! asTraitComposition ^TraitComposition with: self! ! TraitDescription removeSelector: #asTraitComposition! !Trait method! changedSelectorsComparedTo: aTraitTransformation | selectors otherSelectors changedSelectors aliases otherAliases | selectors := self allSelectors asIdentitySet. otherSelectors := aTraitTransformation allSelectors asIdentitySet. changedSelectors := IdentitySet withAll: ( (selectors difference: otherSelectors) union: (otherSelectors difference: selectors)). aliases := self allAliasesDict. otherAliases := aTraitTransformation allAliasesDict. aliases keysAndValuesDo: [:key :value | (value ~~ (otherAliases at: key ifAbsent: [nil])) ifTrue: [changedSelectors add: key]]. otherAliases keysAndValuesDo: [:key :value | (value ~~ (aliases at: key ifAbsent: [nil])) ifTrue: [changedSelectors add: key]]. ^ changedSelectors. ! ! TraitDescription removeSelector: #changedSelectorsComparedTo:! !Trait method! classSide ^self theMetaClass.! ! TraitDescription removeSelector: #classSide! !Trait method! collectMethodsFor: aSelector into: methodDescription (self includesSelector: aSelector) ifTrue: [ methodDescription addLocatedMethod: (self compiledMethodAt: aSelector) ]! ! TraitDescription removeSelector: #collectMethodsFor:into:! TraitDescription removeSelector: #fileOut! !Trait method! instanceSide ^ self theNonMetaClass! ! TraitDescription removeSelector: #instanceSide! !Trait method! isTestCase ^false! ! TraitDescription removeSelector: #isTestCase! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! TraitDescription removeSelector: #notifyOfRecategorizedSelector:from:to:! !Trait method! notifyUsersOfChangedSelectors: aCollection self users do: [:each | each noteChangedSelectors: aCollection]! ! TraitDescription removeSelector: #notifyUsersOfChangedSelectors:! !Trait method! notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory self users do: [:each | each noteRecategorizedSelector: element from: oldCategory to: newCategory]! ! TraitDescription removeSelector: #notifyUsersOfRecategorizedSelector:from:to:! !Trait method! numberOfMethods "count all methods that are local (not comming from a trait)" | num | num := self localMethods size. ^ self isMeta ifTrue: [ num ] ifFalse: [ num + self class numberOfMethods ] ! ! TraitDescription removeSelector: #numberOfMethods! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ClassOrganization new] ifFalse: [ClassOrganization forClass: self]) ]. "Making sure that subject is set correctly. It should not be necessary." self basicOrganization ifNotNil: [ self basicOrganization setSubject: self ]. ^ self basicOrganization! ! TraitDescription removeSelector: #organization! !Trait method! organization: aClassOrg "Install an instance of ClassOrganizer that represents the organization of the messages of the receiver." aClassOrg ifNotNil: [aClassOrg setSubject: self]. self basicOrganization: aClassOrg.! ! TraitDescription removeSelector: #organization:! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! TraitDescription removeSelector: #removeSelector:! TraitDescription removeSelector: #variablesAndOffsetsDo:! !Trait method! setName: aSymbol self name: aSymbol.! ! Class removeSelector: #setName:! !Trait method! classSide ^self theMetaClass.! ! ClassDescription removeSelector: #classSide! !Trait method! instanceSide ^ self theNonMetaClass! ! ClassDescription removeSelector: #instanceSide! TClass removeSelector: #baseTrait! TClass removeSelector: #hasClassTrait! TClass removeSelector: #isBaseTrait! TClass removeSelector: #isClassTrait! TClass removeSelector: #isMeta! ----End fileIn----! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 14:29' prior: 40887220! theMetaClass ^self explicitRequirement.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 14:30' prior: 41083538! theNonMetaClass ^self explicitRequirement.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 14:29' prior: 44325014! theMetaClass ^self explicitRequirement.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 14:30' prior: 44325176! theNonMetaClass ^self explicitRequirement.! ! !TPureBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/5/2013 12:47' prior: 52100219! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: arg1 self traitConflict! ! !TPureBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/5/2013 12:52'! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses self traitConflict ! ! !TPureBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/5/2013 15:59' prior: 52109502! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: arg1 self traitConflict! ! !TPureBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/5/2013 11:18' prior: 52112736! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TPureBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/5/2013 17:02' prior: 52121879! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: arg1 special: arg2 byte: arg3 self traitConflict! ! !TPureBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/5/2013 10:25' prior: 36133447! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TPureBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/5/2013 12:47' prior: 44325661! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: arg1 self traitConflict! ! !TPureBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/5/2013 12:52' prior: 44326001! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses self traitConflict ! ! !TPureBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/5/2013 15:59' prior: 44326347! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: arg1 self traitConflict! ! !TPureBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/5/2013 11:18' prior: 44326708! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TPureBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/5/2013 17:02' prior: 44327173! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: arg1 special: arg2 byte: arg3 self traitConflict! ! !TPureBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/5/2013 10:25' prior: 44327909! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TBehavior methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/9/2013 11:05'! isManifest ^ self name beginsWith: 'Manifest'! ! !Trait method! isManifest ^ self name beginsWith: 'Manifest'! ! !TBehavior methodsFor: '*ast-core' stamp: 'SebastianTleye 7/9/2013 11:05'! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! !Trait method! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! !TBehavior methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/9/2013 11:06'! realClass ^ self! ! !Trait method! realClass ^ self! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06'! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !Trait method! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06'! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !Trait method! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06'! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !Trait method! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/5/2013 17:17' prior: 41361439! bindingOf: varName ^self explicitRequirement.! ! !Trait method! bindingOf: varName ^self explicitRequirement.! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/5/2013 17:47'! basicObsoleteSubclasses ^self explicitRequirement.! ! !Trait method! basicObsoleteSubclasses ^self explicitRequirement.! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07'! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !Trait method! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07'! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !Trait method! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:06'! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !Trait method! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07'! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !Trait method! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07'! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !Trait method! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !TBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/5/2013 16:12' prior: 40926561! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !Trait method! includesBehavior: arg1 self traitConflict! ! !Trait method! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !TBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 11:07'! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !TBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 11:07'! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !TBehavior methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/9/2013 11:05' prior: 44331812! isManifest ^ self name beginsWith: 'Manifest'! ! !Trait method! isManifest ^ self name beginsWith: 'Manifest'! ! !TBehavior methodsFor: '*ast-core' stamp: 'SebastianTleye 7/9/2013 11:05' prior: 44332004! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! !Trait method! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! !TBehavior methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44332316! realClass ^ self! ! !Trait method! realClass ^ self! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44332458! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !Trait method! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44332804! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !Trait method! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !TBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44333208! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !Trait method! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/5/2013 17:17' prior: 44333749! bindingOf: varName ^self explicitRequirement.! ! !Trait method! bindingOf: varName ^self explicitRequirement.! ! !TBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/5/2013 17:47' prior: 44333949! basicObsoleteSubclasses ^self explicitRequirement.! ! !Trait method! basicObsoleteSubclasses ^self explicitRequirement.! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44334155! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !Trait method! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44334895! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !Trait method! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44335365! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !Trait method! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44335825! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !Trait method! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !TBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44336453! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !Trait method! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !TBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/5/2013 16:12' prior: 44336883! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !Trait method! includesBehavior: arg1 self traitConflict! ! !Trait method! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !TBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44337266! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !TBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44338139! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/5/2013 17:46' prior: 44341605! basicObsoleteSubclasses ^WeakKeyToCollectionDictionary new.! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/5/2013 17:46' prior: 44347009! basicObsoleteSubclasses ^WeakKeyToCollectionDictionary new.! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/5/2013 17:16' prior: 44341384! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^self superclass bindingOf: varName! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/5/2013 17:16' prior: 44347339! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^self superclass bindingOf: varName! ! !Class methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 18:29' prior: 41238647! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! !Class methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 18:29' prior: 44347793! spaceUsed "Object spaceUsed" ^ super spaceUsed + self class spaceUsed! ! Trait removeSelector: #includesBehavior:! Trait removeSelector: #localSelectors:! !Trait method! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! Behavior removeSelector: #allCallsOn! !Trait method! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! Behavior removeSelector: #allCallsOn:! !Trait method! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! Behavior removeSelector: #allCallsOnIn:! !Trait method! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! Behavior removeSelector: #allUnsentMessages! !Trait method! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! Behavior removeSelector: #externalTypeAlias:! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! Behavior removeSelector: #inspectAllInstances! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! Behavior removeSelector: #inspectSubInstances! !Trait method! isManifest ^ self name beginsWith: 'Manifest'! ! Behavior removeSelector: #isManifest! !Trait method! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! Behavior removeSelector: #nbBindingOf:! !Trait method! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! Behavior removeSelector: #nbFnArgument:generator:! !Trait method! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! Behavior removeSelector: #parseTreeFor:! !Trait method! realClass ^ self! ! Behavior removeSelector: #realClass! !Trait method! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! Behavior removeSelector: #referencedClasses! !Trait method! addTraitSelector: arg1 withMethod: arg2 self traitConflict ! ! TraitBehavior removeSelector: #addTraitSelector:withMethod:! !Trait method! basicRemoveSelector: arg1 self traitConflict! ! TraitBehavior removeSelector: #basicRemoveSelector:! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! TBehavior removeSelector: #addTraitSelector:withMethod:! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! TBehavior removeSelector: #basicRemoveSelector:! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! TBehavior removeSelector: #selectorsWithArgs:! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! TBehavior removeSelector: #thoroughWhichSelectorsReferTo:special:byte:! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! TBehavior removeSelector: #withAllSubclasses! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! TBehavior removeSelector: #withAllSubclassesDo:! TPureBehavior removeSelector: #bindingOf:! !Trait method! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !Trait method! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! TPureBehavior removeSelector: #includesBehavior:! !Trait method! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! !Trait method! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! TPureBehavior removeSelector: #ultimateSourceCodeAt:ifAbsent:! TClassDescription removeSelector: #addTraitSelector:withMethod:! TClass removeSelector: #spaceUsed! TClass removeSelector: #withAllSubclassesDo:! ----End fileIn----! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41110140! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41142351! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41142862! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41141750! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41086955! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41093868! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41141300! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41111640! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41119652! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41116471! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41117408! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41114106! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41090429! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41121786! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !Trait method! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41108883! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41140628! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41148277! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 42078155! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41094115! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41110746! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41143588! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41098839! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41361674! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41106985! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41104672! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41113584! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41083637! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41152716! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41084671! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41088071! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !TClassDescription methodsFor: '*NautilusCommon' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 40785472! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41120774! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44270765! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41102076! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41102540! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41149090! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 42078731! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41127287! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41126145! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41122203! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41130595! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41122965! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41128175! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41124094! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41124915! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41109530! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41109706! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41109926! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 40788007! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 40807490! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41090038! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41107871! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41103737! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 42076880! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41121075! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41137367! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41086305! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41153130! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41085723! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41139035! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41133073! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41131624! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41134937! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41138158! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41362854! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41088860! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44252233! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 42078467! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41150317! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41151004! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 41104215! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 42077462! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44364772! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !Trait method! hasComment "return whether this class truly has a comment other than the default" | org | org := self instanceSide organization. ^org classComment isEmptyOrNil not! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44365422! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !Trait method! comment: aStringOrText "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText.! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44365979! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !Trait method! comment "Answer the receiver's comment. (If missing, supply a template) " | aString | aString := self instanceSide organization classComment. aString isEmpty ifFalse: [^ aString]. ^self classCommentBlank! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44366752! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !Trait method! comment: aStringOrText stamp: aStamp "Set the receiver's comment to be the argument, aStringOrText." self instanceSide classComment: aStringOrText stamp: aStamp.! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44367384! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !Trait method! storeOn: aStream "Classes and Metaclasses have global names." aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44367806! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !Trait method! printOn: aStream aStream nextPutAll: self name! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44368092! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !Trait method! commentStamp: changeStamp self organization commentStamp: changeStamp. ^ self commentStamp: changeStamp prior: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44368576! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." aFileStream nextChunkPut: self definition. self organization putCommentOnFile: aFileStream numbered: fileIndex moveSource: moveSource forClass: self. self organization categories do: [:heading | self fileOutCategory: heading on: aFileStream moveSource: moveSource toFile: fileIndex]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44370539! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !Trait method! fileOutCategory: catName | internalStream | internalStream := (String new: 1000) writeStream. internalStream header; timeStamp. self fileOutCategory: catName on: internalStream moveSource: false toFile: 0. internalStream trailer. ^ FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , catName) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44371692! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream "File a description of the messages of the receiver that have been changed (i.e., are entered into the argument, aSet) onto aFileStream." self fileOutChangedMessages: aSet on: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44372650! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !Trait method! fileOutCategory: aSymbol on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the receiver's category, aString, onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .sources file, and should only write one preamble per method category." | selectors | aFileStream cr. selectors := self selectorsToFileOutCategory: aSymbol. "Overridden to preserve author stamps in sources file regardless" selectors do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]. ^ self! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44374904! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !Trait method! fileOutChangedMessages: aSet on: aFileStream moveSource: moveSource toFile: fileIndex "File a description of the messages of this class that have been changed (i.e., are entered into the argument, aSet) onto aFileStream. If moveSource, is true, then set the method source pointer to the new file position. Note when this method is called with moveSource=true, it is condensing the .changes file, and should only write a preamble for every method." | org | (org := self organization) categories do: [:cat | | sels | sels := (org listAtCategoryNamed: cat) select: [:sel | aSet includes: sel]. sels do: [:sel | self printMethodChunk: sel withPreamble: true on: aFileStream moveSource: moveSource toFile: fileIndex]]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44377272! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !Trait method! putClassCommentToCondensedChangesFile: aFileStream "Called when condensing changes. If the receiver has a class comment, and if that class comment does not reside in the .sources file, then write it to the given filestream, with the resulting RemoteString being reachable from the source file #2. Note that any existing backpointer into the .sources file is lost by this process -- a situation that maybe should be fixed someday." | header aStamp aCommentRemoteStr | self isMeta ifTrue: [^ self]. "bulletproofing only" ((aCommentRemoteStr := self organization commentRemoteStr) isNil or: [aCommentRemoteStr sourceFileNumber = 1]) ifTrue: [^ self]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. (aStamp := self organization commentStamp ifNil: ['']) storeOn: strm. strm nextPutAll: ' prior: 0']. aFileStream nextChunkPut: header. aFileStream cr. self organization classComment: (RemoteString newString: self organization classComment onFileNumber: 2 toFile: aFileStream) stamp: aStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44380720! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !Trait method! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44381543! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !Trait method! localMethods "returns the methods of classes including the ones of the traits that the class uses" ^ self methods select: [:each | self includesLocalSelector: each selector].! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44382225! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !Trait method! commentStamp: changeStamp prior: indexAndOffset "Prior source link ignored when filing in." ^ ClassCommentReader new setClass: self category: #Comment changeStamp: changeStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44382925! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !Trait method! classComment: aString "Store the comment, aString or Text or RemoteString, associated with the class we are orgainzing. Empty string gets stored only if had a non-empty one before." ^ self classComment: aString stamp: ''! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44383772! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !Trait method! selectorsToFileOutCategory: aSymbol ^ self organization listAtCategoryNamed: aSymbol! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44384169! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !Trait method! printMethodChunk: selector withPreamble: doPreamble on: outStream moveSource: moveSource toFile: fileIndex "Copy the source code for the method associated with selector onto the fileStream. If moveSource true, then also set the source code pointer of the method." | preamble method oldPos newPos sourceFile endPos | doPreamble ifTrue: [ preamble := self name , ' methodsFor: ' , (self organization categoryOfElement: selector) asString printString ] ifFalse: [ preamble := '' ]. method := self methodDict at: selector ifAbsent: [ outStream nextPutAll: selector; cr. outStream tab; nextPutAll: '** ERROR!! THIS SCRIPT IS MISSING ** ' translated; cr; cr. outStream nextPutAll: ' '. ^ outStream ]. oldPos := method filePosition. sourceFile := SourceFiles at: method fileIndex. preamble size > 0 ifTrue: [ "Copy the preamble" outStream copyPreamble: preamble from: sourceFile at: oldPos ] ifFalse: [ sourceFile position: oldPos ]. "Copy the method chunk" newPos := outStream position. outStream copyMethodChunkFrom: sourceFile. sourceFile skipSeparators. "The following chunk may have ]style[" sourceFile peek == $] ifTrue: [ outStream cr; copyMethodChunkFrom: sourceFile ]. moveSource ifTrue: [ "Set the new method source pointer" endPos := outStream position. method setSourcePosition: newPos inFile: fileIndex ]. preamble size > 0 ifTrue: [ outStream nextChunkPut: ' ' ]. ^ outStream cr! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44388889! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !Trait method! fileOutOrganizationOn: aFileStream "File a description of the receiver's organization on aFileStream." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: self name, ' reorganize'; cr. aFileStream nextChunkPut: self organization stringForFileOut ; cr! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44389808! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | ptr header file oldCommentRemoteStr oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteStr := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer]. SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil: [file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: ptr printString]. file nextChunkPut: header]]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44394525! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !Trait method! printCategoryChunk: category on: aFileStream withStamp: changeStamp priorMethod: priorMethod "Print a method category preamble. This must have a category name. It may have an author/date stamp, and it may have a prior source link. If it has a prior source link, it MUST have a stamp, even if it is empty." "The current design is that changeStamps and prior source links are preserved in the changes file. All fileOuts include changeStamps. Condensing sources, however, eliminates all stamps (and links, natch)." aFileStream cr; nextPut: $!!. aFileStream nextChunkPut: (String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' methodsFor: '; print: category asString. (changeStamp ~~ nil and: [changeStamp size > 0 or: [priorMethod ~~ nil]]) ifTrue: [strm nextPutAll: ' stamp: '; print: changeStamp]. priorMethod ~~ nil ifTrue: [strm nextPutAll: ' prior: '; print: priorMethod sourcePointer]]). ! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44397487! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !Trait method! fileOutMethod: selector "Write source code of a single method on a file. Make up a name for the file." | internalStream | internalStream := (String new: 1000) writeStream. self fileOutMethod: selector on: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: (self name , '-' , (selector copyReplaceAll: ':' with: '')) isSt: true.! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44398700! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !Trait method! methodsFor: categoryName "Answer a ClassCategoryReader for compiling the messages in the category, categoryName, of the receiver." ^ ClassCategoryReader new setClass: self category: categoryName asSymbol "(False methodsFor: 'logical operations') inspect"! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44399622! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !Trait method! moveChangesTo: newFile "Used in the process of condensing changes, this message requests that the source code of all methods of the receiver that have been changed should be moved to newFile." | changes | changes := self selectors select: [:sel | (self compiledMethodAt: sel) fileIndex > 1 ]. self fileOutChangedMessages: changes on: newFile moveSource: true toFile: 2! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44400922! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !Trait method! fileOutOn: aFileStream "File a description of the receiver on aFileStream." self fileOutOn: aFileStream moveSource: false toFile: 0! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44401483! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !Trait method! zapOrganization "Remove the organization of this class by message categories. This is typically done to save space in small systems. Classes and methods created or filed in subsequently will, nonetheless, be organized" self organization: nil. self isClassSide ifFalse: [self classSide zapOrganization]! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44402551! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !Trait method! addCategory: newName before: aCategory ^ self organization addCategory: newName before: aCategory ! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44402995! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !Trait method! whichCategoryIncludesSelector: aSelector "Answer the category of the argument, aSelector, in the organization of the receiver, or answer nil if the receiver does not inlcude this selector." (self includesSelector: aSelector) ifTrue: [^ self organization categoryOfElement: aSelector] ifFalse: [^nil]! ! !TClassDescription methodsFor: 'organization' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44404066! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !Trait method! reorganize "During fileIn, !!Rectangle reorganize!! allows Rectangle to seize control and treat the next chunk as its organization. See the transfer of control where ReadWriteStream fileIn calls scanFrom:" ^self organization! ! !TClassDescription methodsFor: '*NautilusCommon' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44404897! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !Trait method! correspondingForTest "Return the unit test that correspond to me. If it does not exist, it returns myself. Return the tested class if sent to a class" | className | className := (self inheritsFrom: TestCase) ifTrue: [ self name copyReplaceAll: 'Test' with: '' ] ifFalse: [ self name, 'Test' ]. ^ Smalltalk at: className asSymbol ifAbsent: [ self ] ! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44406140! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !Trait method! errorCategoryName self error: 'Category name must be a String'! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44406482! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !Trait method! notifyOfRecategorizedSelector: element from: oldCategory to: newCategory SystemAnnouncer uniqueInstance selector: element recategorizedFrom: oldCategory to: newCategory inClass: self. SystemAnnouncer uniqueInstance suspendAllWhile: [self notifyUsersOfRecategorizedSelector: element from: oldCategory to: newCategory].! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44407601! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !Trait method! noteRecategorizedSelectors: aCollection oldComposition: aTraitComposition aCollection do: [:each | | oldCategory newCategory | oldCategory := self organization categoryOfElement: each. newCategory := (self traitComposition methodDescriptionForSelector: each) effectiveMethodCategory. self noteRecategorizedSelector: each from: oldCategory to: newCategory]! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44408849! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !Trait method! noteRecategorizedSelector: aSymbol from: oldCategoryOrNil to: newCategoryOrNil | changedCategories | changedCategories := self updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil. changedCategories do: [:each | (self organization isEmptyCategoryNamed: each) ifTrue: [self organization removeCategory: each]]! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44410070! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors oldMethodDict | oldMethodDict := self methodDict copy. changedSelectors := super applyChangesOfNewTraitCompositionReplacing: oldComposition. self noteRecategorizedSelectors: changedSelectors oldComposition: oldComposition. self noteChangesFrom: oldMethodDict. ^ changedSelectors.! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44411312! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory isNil ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44414274! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !Trait method! copyAll: selArray from: class "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under -As yet not classified-." self copyAll: selArray from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44415193! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !Trait method! copyAll: selArray from: class classified: cat "Install all the methods found in the method dictionary of the second argument, class, as the receiver's methods. Classify the messages under the third argument, cat." selArray do: [:s | (class includesLocalSelector: s) ifTrue: [ self copy: s from: class classified: cat ] ]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44416355! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !Trait method! copyMethodDictionaryFrom: donorClass "Copy the method dictionary of the donor class over to the receiver" self methodDict: donorClass copyOfMethodDictionary. self organization: donorClass organization deepCopy.! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44417136! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !Trait method! copy: sel from: class "Install the method associated with the first argument, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under -As yet not classified-." self copy: sel from: class classified: nil! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44418199! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !Trait method! copyCategory: cat from: aClass classified: newCat "Specify that one of the categories of messages for the receiver is the third argument, newCat. Copy each message found in the category cat in class aClass into this new category." self copyAll: (aClass organization listAtCategoryNamed: cat) from: aClass classified: newCat! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44419343! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !Trait method! copy: sel from: class classified: cat "Install the method associated with the first arugment, sel, a message selector, found in the method dictionary of the second argument, class, as one of the receiver's methods. Classify the message under the third argument, cat." | code category | "Useful when modifying an existing class" code := class sourceCodeAt: sel. code ifNotNil: [cat ifNil: [category := class organization categoryOfElement: sel] ifNotNil: [category := cat]. (self includesLocalSelector: sel) ifTrue: [code asString = (self sourceCodeAt: sel) asString ifFalse: [self error: self name , ' ' , sel , ' will be redefined if you proceed.']]. self compile: code classified: category]! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44421786! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !Trait method! copyCategory: cat from: class "Specify that one of the categories of messages for the receiver is cat, as found in the class, class. Copy each message found in this category." self copyCategory: cat from: class classified: cat! ! !TClassDescription methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44422633! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !Trait method! copyAllCategoriesFrom: aClass "Specify that the categories of messages for the receiver include all of those found in the class, aClass. Install each of the messages found in these categories into the method dictionary of the receiver, classified under the appropriate categories." aClass organization categories do: [:cat | self copyCategory: cat from: aClass]! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44423906! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! !Trait method! isMeta ^self isClassSide! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44424141! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! !Trait method! isInstanceSide ^self isClassSide not! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44424412! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! !Trait method! isClassSide ^self == self classSide! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44424662! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: aCategory withStamp: nil notifying: nil logSource: true]. ]! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44425575! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !Trait method! duringTestCompileSilently: code ^ Author useAuthor: 'TestsAuthor' during: [ [self compile: code classified: '' withStamp: nil notifying: nil logSource: true] fuelValueWithoutNotifications ]! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44426340! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !Trait method! reformatAll "Reformat all methods in this class" self methods do: [:method | method reformat]! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44426766! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !Trait method! logMethodSource: aText forMethod: aCompiledMethod inCategory: category withStamp: changeStamp aCompiledMethod putSource: aText class: self category: category withStamp: changeStamp inFile: 2 priorMethod: (self compiledMethodAt: aCompiledMethod selector ifAbsent: [])! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44427777! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !Trait method! noteCompilationOf: aSelector meta: isMeta "A hook allowing some classes to react to recompilation of certain selectors"! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44428278! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !Trait method! compile: code notifying: requestor "Refer to the comment in Behavior|compile:notifying:." ^self compile: code classified: Protocol unclassified notifying: requestor! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44428944! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !Trait method! doneCompiling "A ClassBuilder has finished the compilation of the receiver. This message is a notification for a class that needs to do some cleanup / reinitialization after it has been recompiled."! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44429688! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor ^ self compile: text classified: category withStamp: changeStamp notifying: requestor logSource: self acceptsLoggingOfCompilation! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44430486! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44431014! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself Weird name is so that it will come lexically before #compile, so that a clean build can make it through." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44432157! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !Trait method! wantsRecompilationProgressReported "Answer whether the receiver would like progress of its recompilation reported interactively to the user." ^ true! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44432751! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !Trait method! compile: code classified: heading "Compile the argument, code, as source code in the context of the receiver and install the result in the receiver's method dictionary under the classification indicated by the second argument, heading. nil is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code classified: heading notifying: nil! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44434371! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !Trait method! compileSilently: code classified: category "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: category notifying: nil.! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44435613! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !Trait method! compileSilently: code classified: category notifying: requestor "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self compile: code classified: category notifying: requestor].! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44437071! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compile: text classified: category notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44439498! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !Trait method! compile: text classified: category notifying: requestor | stamp | stamp := self acceptsLoggingOfCompilation ifTrue: [ Author changeStamp ] ifFalse: [ nil ]. ^ self compile: text classified: category withStamp: stamp notifying: requestor! ! !TClassDescription methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44440392! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: '' notifying: nil.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44441212! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44442439! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !Trait method! removeSelector: selector "Remove the message whose selector is given from the method dictionary of the receiver, if it is there. Answer nil otherwise." | priorMethod priorProtocol origin | priorMethod := self compiledMethodAt: selector ifAbsent: [^ nil]. origin := priorMethod origin. priorProtocol := self whichCategoryIncludesSelector: selector. super removeSelector: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [self updateOrganizationSelector: selector oldCategory: priorProtocol newCategory: nil]. SystemAnnouncer uniqueInstance methodRemoved: priorMethod selector: selector inProtocol: priorProtocol class: self origin: origin.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44444602! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !Trait method! uncategorizedMethods ^ self methodsInCategory: Protocol unclassified! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44444968! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod super addSelectorSilently: selector withMethod: compiledMethod. self instanceSide noteAddedSelector: selector meta: self isMeta.! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44445688! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil isNil ifTrue: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifFalse: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44447431! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !Trait method! noteAddedSelector: aSelector meta: isMeta "A hook allowing some classes to react to adding of certain selectors"! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 16:24' prior: 44447929! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! Smalltalk globals removeClassNamed: #TClassAndTraitDescription! ----End fileIn----! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44364130! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44227760! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44157745! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44229300! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44240983! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44228534! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236175! methodDictionary "Convenience" ^self methodDict! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44158181! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44242566! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44158455! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44239748! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44265447! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44175271! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44158044! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236293! methodDictionary: aDictionary self methodDict: aDictionary! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44358114! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44182072! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44224818! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44220528! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44250717! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44158752! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236543! methods ^ self methodDict values! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44230569! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44241173! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44242701! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44227417! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44262651! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44231158! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44167661! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44266119! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44168169! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236638! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44241462! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44222430! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44264227! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44175657! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44181712! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44157465! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44155873! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44177155! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44177377! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44176143! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44340135! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44340526! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44341007! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44179712! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44170776! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221766! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44263290! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44264584! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44172229! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44159169! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44161714! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44159390! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44156652! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44242387! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44181230! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221983! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44228853! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44224561! binding ^ nil -> self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44238653! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44225345! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44225738! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44228146! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44229176! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44230293! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44226150! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44226980! compileAll ^ self compileAllFrom: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44230180! evaluate: aString ^self compiler evaluate: aString! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44227082! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44228355! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44239393! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44242889! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44239189! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TraitBehavior methodsFor: 'memory usage' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44172469! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44238957! protocols ^ self organization categories copy! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236422! methodNamed: aSelector ^ self methodDict at: aSelector! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44236828! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !TraitBehavior methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44171728! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !TraitBehavior methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44183496! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44175017! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44162394! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44161985! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44174795! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44176402! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44233813! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44243994! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44235660! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44176956! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44265149! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44265951! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44166786! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44182721! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44176013! numberOfInstanceVariables ^ self instVarNames size ! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44263201! classPool ^ Dictionary new! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44243204! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44164136! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44166097! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44163112! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44170231! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44165144! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44171049! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! !TraitBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44174239! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! !TraitBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44263877! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44178371! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44181515! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44177773! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44186699! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44222981! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44186499! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44159712! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44161208! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44223693! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44157005! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! !TraitBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44345351! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !TraitBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44346378! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44244678! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44233483! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44166584! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44249470! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44233302! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44232265! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44267646! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44360247! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44232440! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44248611! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44165789! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44249078! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44184582! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44185611! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44232925! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44232672! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44230026! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44344289! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44342715! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44343196! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44343756! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44342094! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44222603! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44362011! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44250379! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44160639! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44363025! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44160009! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44223229! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! !TraitBehavior methodsFor: '*Rpackage-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44238431! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !TraitBehavior methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44339368! isManifest ^ self name beginsWith: 'Manifest'! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44156286! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44235328! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44356714! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221240! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44235955! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44251536! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221043! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44278288! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44240401! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44179550! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44179415! shutDown "This message is sent on system shutdown to registered classes" ! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44180916! startUp "This message is sent to registered classes when the system is coming up." ! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44181061! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173484! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44363636! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44172996! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44172760! isAnonymous ^true! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44172842! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44170492! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44224643! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173147! isCompact ^self indexIfCompact ~= 0! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173936! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173626! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44179015! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173410! isMeta ^ false! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44174083! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173784! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44179989! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44173246! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44171616! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44185092! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44169288! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44184384! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44186060! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44169608! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44185357! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44168886! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44184100! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44169954! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! !TraitBehavior methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44339875! realClass ^ self! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44354071! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44232029! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44246541! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44231657! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44263439! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44246697! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44245735! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44240847! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44237765! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44245329! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44247288! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44239067! purgeLocalSelectors self basicLocalSelectors: nil! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44237029! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44240127! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44268238! hasTraitComposition ^ self traitComposition notEmpty.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44246405! traitTransformations ^ self traitComposition transformations ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44242204! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44245550! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44241676! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44237947! notifyUsersOfChangedSelectors: aCollection! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44240658! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44223980! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44229629! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221651! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44221460! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44220844! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44239937! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44229509! emptyMethodDictionary ^ MethodDictionary new! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44238072! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44229032! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44228678! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44238825! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TraitBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44166925! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! !TraitBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44167184! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! !TraitBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44186313! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! !TraitBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44183116! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! !TraitBehavior methodsFor: '*ast-core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44339636! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44532748! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44533162! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44533586! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44533939! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44534188! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44534433! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44534633! methodDictionary "Convenience" ^self methodDict! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44534799! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44535114! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44535300! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44535643! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44535874! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44536427! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44536849! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44537033! methodDictionary: aDictionary self methodDict: aDictionary! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44537209! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44537511! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44538197! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44538772! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44539150! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44539449! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44539910! methods ^ self methodDict values! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44540062! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44540700! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44541031! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44541261! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44541651! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44542235! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44542775! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44543336! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44544125! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44544895! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44545139! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TraitBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44545405! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44545621! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44546023! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! !TraitBehavior methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44546418! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44546799! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44547119! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44547568! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44547819! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! !TraitBehavior methodsFor: 'obsolete subclasses' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44548248! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44548543! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44548770! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !TraitBehavior methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44549026! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44549359! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44549694! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44550013! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44550284! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44550490! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44551113! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44551410! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44551687! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44552011! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44552388! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44552799! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44553037! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44553372! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44553857! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44554074! binding ^ nil -> self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44554202! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44554416! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44554854! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44555275! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44555529! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44555686! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44556001! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44556866! compileAll ^ self compileAllFrom: self! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44557011! evaluate: aString ^self compiler evaluate: aString! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44557168! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44557541! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44557760! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44558152! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44558502! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TraitBehavior methodsFor: 'memory usage' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44558745! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44559069! protocols ^ self organization categories copy! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44559224! methodNamed: aSelector ^ self methodDict at: aSelector! ! !TraitBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44559387! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !TraitBehavior methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44559616! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! !TraitBehavior methodsFor: 'compiling' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44560138! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44560774! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44561078! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44561841! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44562296! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44562560! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44563145! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44564678! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44565391! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TraitBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44565719! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44565956! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44566287! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44566482! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44566657! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44567087! numberOfInstanceVariables ^ self instVarNames size ! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44567238! classPool ^ Dictionary new! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44567362! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44568187! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44569217! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44569729! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44570784! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44571079! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! !TraitBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44571753! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! !TraitBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44572366! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! !TraitBehavior methodsFor: 'testing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44572968! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44573353! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44574026! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44574258! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44574887! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44575197! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44575477! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44575697! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44576024! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44576546! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! !TraitBehavior methodsFor: 'enumerating' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44576863! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! !TraitBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44577361! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !TraitBehavior methodsFor: '*Tools-Inspector' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44577851! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44578488! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44578980! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44579351! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44579600! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44580175! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44580399! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44580626! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44580939! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44581594! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44581866! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44582368! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44582727! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44583159! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44583710! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44584197! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TraitBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44584620! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44584899! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44585094! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44585350! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44585638! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44585921! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! !TraitBehavior methodsFor: '*System-Support' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44586288! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44586721! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44587148! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44587435! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44587816! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44588422! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44588713! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! !TraitBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44589366! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! !TraitBehavior methodsFor: '*Rpackage-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44589866! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !TraitBehavior methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44590127! isManifest ^ self name beginsWith: 'Manifest'! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44590287! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44590699! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44591077! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44591540! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44591787! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44592026! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44592691! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44592925! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44593092! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44593377! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44593581! shutDown "This message is sent on system shutdown to registered classes" ! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44593759! startUp "This message is sent to registered classes when the system is coming up." ! ! !TraitBehavior methodsFor: 'system startup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44593948! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44594153! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44594329! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44594534! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44594722! isAnonymous ^true! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44594837! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44595029! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44595339! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44595536! isCompact ^self indexIfCompact ~= 0! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44595670! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44595855! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44596047! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44596471! isMeta ^ false! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44596583! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44596776! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44596962! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44597909! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! !TraitBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44598110! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44598258! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44598546! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44598883! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44599100! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44599372! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44599741! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44600020! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44600445! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! !TraitBehavior methodsFor: 'queries' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44600747! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! !TraitBehavior methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44601043! realClass ^ self! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44601157! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44601973! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44602232! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44602425! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44602828! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44603048! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44603512! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44604202! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44604370! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44604566! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44604805! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44606140! purgeLocalSelectors self basicLocalSelectors: nil! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44606286! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607044! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607272! hasTraitComposition ^ self traitComposition notEmpty.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607423! traitTransformations ^ self traitComposition transformations ! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607582! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607784! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44607990! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44608541! notifyUsersOfChangedSelectors: aCollection! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44608679! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44608891! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44609330! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44609750! addUser: aClassOrTrait self users add: aClassOrTrait.! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44609900! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44610117! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TraitBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44610341! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44610567! emptyMethodDictionary ^ MethodDictionary new! ! !TraitBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44610717! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44611112! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44611292! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TraitBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44611489! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TraitBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44611657! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! !TraitBehavior methodsFor: 'cleanup' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44611953! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! !TraitBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44612473! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! !TraitBehavior methodsFor: 'user interface' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44612682! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! !TraitBehavior methodsFor: '*ast-core' stamp: 'SebastianTleye 7/9/2013 17:48' prior: 44613079! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! ----End fileIn----! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40831630! protocols ^ self organization categories copy! ! !Trait method! protocols ^ self organization categories copy! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40833914! methodNamed: aSelector ^ self methodDict at: aSelector! ! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40831204! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41169113! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41195524! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41158193! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41196400! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41198552! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44266995! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44358570! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41197859! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41159695! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41196833! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41197206! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41202629! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TBehavior methodsFor: '*Rpackage-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40833989! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41191105! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41170375! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41189988! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41178526! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41178273! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44278215! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41190777! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41211302! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41189274! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41212446! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44355607! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41211924! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41205708! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41204104! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41177608! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41189024! methodDictionary "Convenience" ^self methodDict! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41205364! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41175051! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41183309! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41213408! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41188743! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44357502! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41207665! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41188544! methods ^ self methodDict values! ! !Trait method! methods ^ self methodDict values! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41200964! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41176857! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41174603! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41206742! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41199585! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41188066! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41176311! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41172323! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41204955! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41184016! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41204611! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44361438! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41157289! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44362440! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !TBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41203858! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !TBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41184324! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40834297! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40814881! binding ^ nil -> self! ! !Trait method! binding ^ nil -> self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40808710! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40808837! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40824115! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40825492! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40821057! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40834427! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40813819! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40827064! compileAll ^ self compileAllFrom: self! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40824449! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40828195! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40834165! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40813514! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40812976! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 43584170! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 40831044! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44351854! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41198985! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41165013! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41199217! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41164572! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41165693! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41185556! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41168024! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 42083423! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41183760! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41185972! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41182336! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41165397! traitTransformations ^ self traitComposition transformations ! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41175358! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41167585! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41175787! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41185313! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41178088! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41209676! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41202779! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41210835! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41212919! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41182841! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 41209142! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44693865! protocols ^ self organization categories copy! ! !Trait method! protocols ^ self organization categories copy! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44694083! methodNamed: aSelector ^ self methodDict at: aSelector! ! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44694317! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44694707! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44695591! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44696233! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44697283! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44697631! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44697985! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44698511! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44699721! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44700165! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44700929! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44701675! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! !TBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44702152! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! !TBehavior methodsFor: '*Rpackage-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44702451! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44702878! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44705861! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! !TBehavior methodsFor: 'printing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44707204! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44707792! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TPureBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44710392! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44710882! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44711118! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44711776! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44712240! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44712620! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44712990! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44713818! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44714218! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44714964! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44715360! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44715748! methodDictionary "Convenience" ^self methodDict! ! !Trait method! methodDictionary "Convenience" ^self methodDict! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44715978! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44716276! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44716546! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44716906! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44717560! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44717810! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44718312! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44719360! methods ^ self methodDict values! ! !Trait method! methods ^ self methodDict values! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44719562! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44720736! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44721296! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44721654! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44722332! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44723310! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44723696! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! !TBehavior methodsFor: 'private' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44724106! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44725674! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44725986! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! !TBehavior methodsFor: 'copying' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44726240! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44726536! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44727010! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44727672! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! !TBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44728143! emptyMethodDictionary ^ MethodDictionary new! ! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! !TBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44728354! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44729071! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44729414! binding ^ nil -> self! ! !Trait method! binding ^ nil -> self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44729579! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44729916! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44730701! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44731452! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44731869! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44732092! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44732631! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44734270! compileAll ^ self compileAllFrom: self! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44734469! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44734692! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44735347! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44735694! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44736387! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44736996! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !Trait method! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod. ! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44738199! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44738592! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44740143! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44740580! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44740885! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44741610! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44742457! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44743756! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44744067! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44744464! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44747053! purgeLocalSelectors self basicLocalSelectors: nil! ! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44747264! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44748699! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44749074! traitTransformations ^ self traitComposition transformations ! ! !Trait method! traitTransformations ^ self traitComposition transformations ! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44749311! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44749634! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44749965! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44750986! notifyUsersOfChangedSelectors: aCollection! ! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44751181! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44751524! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44752321! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44753080! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44753433! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44753800! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44754156! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! ----End fileIn----! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 18:04' prior: 41209551! basicLocalSelectors: aSetOrNil ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:59' prior: 41189780! methodDict: aDictionary ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:59' prior: 41189891! methodDict ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 18:00' prior: 41168694! traitComposition ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 18:00' prior: 41168565! traitComposition: aTraitComposition ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 18:04' prior: 44815122! basicLocalSelectors: aSetOrNil ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:59' prior: 44815293! methodDict: aDictionary ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/9/2013 17:59' prior: 44815457! methodDict ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 18:00' prior: 44815587! traitComposition ^self explicitRequirement.! ! !TBehavior methodsFor: 'traits' stamp: 'SebastianTleye 7/9/2013 18:00' prior: 44815723! traitComposition: aTraitComposition ^self explicitRequirement.! ! Smalltalk globals removeClassNamed: #TPureBehavior! ----End fileIn----! !Trait method! >> selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^self compiledMethodAt: selector ! ! TraitBehavior removeSelector: #>>! !Trait method! addExclusionOf: aSymbol to: aTrait self setTraitComposition: ( self traitComposition copyWithExclusionOf: aSymbol to: aTrait)! ! TraitBehavior removeSelector: #addExclusionOf:to:! !Trait method! addObsoleteSubclass: aClass "Weakly remember that aClass was a subclass of the receiver and is now obsolete" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[WeakArray new]. (obs includes: aClass) ifTrue:[^self]. obs := obs copyWithout: nil. obs := obs copyWith: aClass. self basicObsoleteSubclasses at: self put: obs.! ! TraitBehavior removeSelector: #addObsoleteSubclass:! !Trait method! addSelector: selector withMethod: compiledMethod ^ self addSelector: selector withMethod: compiledMethod notifying: nil! ! TraitBehavior removeSelector: #addSelector:withMethod:! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor ^ self addSelectorSilently: selector withMethod: compiledMethod! ! TraitBehavior removeSelector: #addSelector:withMethod:notifying:! !Trait method! addToComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression add: aTrait; yourself)! ! TraitBehavior removeSelector: #addToComposition:! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compile: source classified: aCompiledMethod category notifying: nil trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! TraitBehavior removeSelector: #addTraitSelector:withMethod:! !Trait method! addUser: aClassOrTrait self users add: aClassOrTrait.! ! TraitBehavior removeSelector: #addUser:! !Trait method! adoptInstance: anInstance "Change the class of anInstance to me. Primitive (found in Cog and new VMs) follows the same rules as primitiveChangeClassTo:, but returns the class rather than the modified instance" anInstance primitiveChangeClassTo: self basicNew. ^self! ! TraitBehavior removeSelector: #adoptInstance:! !Trait method! allCallsOn "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (self allCallsOnIn: self systemNavigation)! ! TraitBehavior removeSelector: #allCallsOn! !Trait method! allCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol." ^ self systemNavigation allCallsOn: aSymbol from: self . ! ! TraitBehavior removeSelector: #allCallsOn:! !Trait method! allCallsOnIn: aSystemNavigation "Answer a SortedCollection of all the methods that refer to me by name or as part of an association in a global dict." ^ (aSystemNavigation allReferencesTo: (self environment associationAt: self theNonMetaClass name)), (aSystemNavigation allCallsOn: self theNonMetaClass name) ! ! TraitBehavior removeSelector: #allCallsOnIn:! !Trait method! allClassVarNames "Answer a Set of the names of the receiver's and the receiver's ancestor's class variables." ^self superclass allClassVarNames! ! TraitBehavior removeSelector: #allClassVarNames! !Trait method! allInstVarNames "Answer an Array of the names of the receiver's instance variables. The Array ordering is the order in which the variables are stored and accessed by the interpreter." | vars | self superclass == nil ifTrue: [vars := self instVarNames copy] "Guarantee a copy is answered." ifFalse: [vars := self superclass allInstVarNames , self instVarNames]. ^vars! ! TraitBehavior removeSelector: #allInstVarNames! !Trait method! allInstances "Answer a collection of all current instances of the receiver." | all inst next | all := OrderedCollection new. inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. inst == all ifFalse: [all add: inst]. inst := next]. ^ all asArray! ! TraitBehavior removeSelector: #allInstances! !Trait method! allInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver. Because aBlock might change the class of inst (for example, using become:), it is essential to compute next before aBlock value: inst." | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]! ! TraitBehavior removeSelector: #allInstancesDo:! !Trait method! allLocalCallsOn: aSymbol "Answer a SortedCollection of all the methods that call on aSymbol, anywhere in my class hierarchy." ^(SystemNavigation new allLocalCallsOn: aSymbol ofClass: (self theNonMetaClass)). ! ! TraitBehavior removeSelector: #allLocalCallsOn:! !Trait method! allMethods "Return the collection of compiled method I and my superclasses are defining" "asArray is used to not bump into a bug when comparing compiled methods." ^ self allSelectors asArray collect: [ :s | self lookupSelector: s ]! ! TraitBehavior removeSelector: #allMethods! !Trait method! allSelectors "Answer all selectors understood by instances of the receiver" ^ self allSelectorsBelow: nil! ! TraitBehavior removeSelector: #allSelectors! !Trait method! allSelectorsAbove ^ self allSelectorsAboveUntil: ProtoObject ! ! TraitBehavior removeSelector: #allSelectorsAbove! !Trait method! allSelectorsAboveUntil: aRootClass | coll | coll := IdentitySet new. (self allSuperclassesIncluding: aRootClass) do: [:aClass | aClass selectorsDo: [ :sel | coll add: sel ]]. ^ coll ! ! TraitBehavior removeSelector: #allSelectorsAboveUntil:! !Trait method! allSelectorsBelow: topClass | coll | coll := IdentitySet new. self withAllSuperclassesDo: [:aClass | aClass = topClass ifTrue: [^ coll ] ifFalse: [aClass selectorsDo: [ :sel | coll add: sel ]]]. ^ coll ! ! TraitBehavior removeSelector: #allSelectorsBelow:! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [:class | (behaviors includes: class) ifFalse: [selectors addAll: class selectors.]]. ^ selectors asOrderedCollection ! ! TraitBehavior removeSelector: #allSelectorsWithout:! !Trait method! allSharedPools "Answer an ordered collection of the shared pools that the receiver and the receiver's ancestors share." ^self superclass allSharedPools! ! TraitBehavior removeSelector: #allSharedPools! !Trait method! allSubInstances "Answer a list of all current instances of the receiver and all of its subclasses." | aCollection | aCollection := OrderedCollection new. self allSubInstancesDo: [:x | x == aCollection ifFalse: [aCollection add: x]]. ^ aCollection! ! TraitBehavior removeSelector: #allSubInstances! !Trait method! allSubInstancesDo: aBlock "Evaluate the argument, aBlock, for each of the current instances of the receiver and all its subclasses." self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]! ! TraitBehavior removeSelector: #allSubInstancesDo:! !Trait method! allSubclasses "Answer an orderedCollection of the receiver's and the receiver's descendent's subclasses. " | scan scanTop | scan := OrderedCollection withAll: self subclasses. scanTop := 1. [scanTop > scan size] whileFalse: [scan addAll: (scan at: scanTop) subclasses. scanTop := scanTop + 1]. ^ scan! ! TraitBehavior removeSelector: #allSubclasses! !Trait method! allSubclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's subclasses." self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]! ! TraitBehavior removeSelector: #allSubclassesDo:! !Trait method! allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level "Walk the tree of subclasses, giving the class and its level" | subclassNames | classAndLevelBlock value: self value: level. self == Class ifTrue: [^ self]. "Don't visit all the metaclasses" "Visit subclasses in alphabetical order" subclassNames := SortedCollection new. self subclassesDo: [:subC | subclassNames add: subC name]. subclassNames do: [:name | (self environment at: name) allSubclassesWithLevelDo: classAndLevelBlock startingLevel: level+1]! ! TraitBehavior removeSelector: #allSubclassesWithLevelDo:startingLevel:! !Trait method! allSuperclasses "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses. The first element is the receiver's immediate superclass, followed by its superclass; the last element is Object." | temp | ^ self superclass == nil ifTrue: [ OrderedCollection new] ifFalse: [temp := self superclass allSuperclasses. temp addFirst: self superclass. temp]! ! TraitBehavior removeSelector: #allSuperclasses! !Trait method! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass == nil ifFalse: [aBlock value: self superclass. self superclass allSuperclassesDo: aBlock]! ! TraitBehavior removeSelector: #allSuperclassesDo:! !Trait method! allSuperclassesIncluding: aClass "Answer an OrderedCollection of the receiver's and the receiver's ancestor's superclasses up to aClass included. If aClass is not part of the receiver's superclass, returns up to the root." | temp | self class == ProtoObject class ifTrue: [ ^ OrderedCollection new]. ^ self superclass == aClass ifTrue: [ OrderedCollection with: aClass] ifFalse: [temp := self superclass allSuperclassesIncluding: aClass. temp addFirst: self superclass. temp]! ! TraitBehavior removeSelector: #allSuperclassesIncluding:! !Trait method! allUnreferencedInstanceVariables "Return a list of the instance variables known to the receiver which are not referenced in the receiver or any of its subclasses OR superclasses" ^ self allInstVarNames reject: [:ivn | | definingClass | definingClass := self classThatDefinesInstanceVariable: ivn. definingClass withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn asSymbol) notEmpty]]! ! TraitBehavior removeSelector: #allUnreferencedInstanceVariables! !Trait method! allUnsentMessages "Answer an array of all the messages defined by the receiver that are not sent anywhere in the system." ^ SystemNavigation new allUnsentMessagesIn: self selectors! ! TraitBehavior removeSelector: #allUnsentMessages! !Trait method! allowsSubInstVars "Classes that allow instances to change classes among its subclasses will want to override this and return false, so inst vars are not accidentally added to its subclasses." ^ true! ! TraitBehavior removeSelector: #allowsSubInstVars! !Trait method! applyChangesOfNewTraitCompositionReplacing: oldComposition | changedSelectors | changedSelectors := self traitComposition changedSelectorsComparedTo: oldComposition. changedSelectors isEmpty ifFalse: [ self noteChangedSelectors: changedSelectors]. self traitComposition isEmpty ifTrue: [ self purgeLocalSelectors]. ^changedSelectors! ! TraitBehavior removeSelector: #applyChangesOfNewTraitCompositionReplacing:! !Trait method! basicAddSelector: selector withMethod: compiledMethod "Add the message selector with the corresponding compiled method to the receiver's method dictionary. Do this without sending system change notifications" | oldMethodOrNil | oldMethodOrNil := self lookupSelector: selector. self methodDict at: selector put: compiledMethod. compiledMethod methodClass: self. compiledMethod selector: selector. "Now flush Pharo's method cache, either by selector or by method" oldMethodOrNil ifNotNil: [oldMethodOrNil flushCache]. selector flushCache.! ! TraitBehavior removeSelector: #basicAddSelector:withMethod:! !Trait method! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds" ! ! TraitBehavior removeSelector: #basicNew! !Trait method! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! TraitBehavior removeSelector: #basicNew:! !Trait method! basicRemoveSelector: selector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method." | oldMethod | oldMethod := self methodDict at: selector ifAbsent: [^ self]. self methodDict removeKey: selector. "Now flush the method cache" oldMethod flushCache. selector flushCache.! ! TraitBehavior removeSelector: #basicRemoveSelector:! !Trait method! becomeCompact "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct index | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. index := cct indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Purge any old instances" Smalltalk garbageCollect.! ! TraitBehavior removeSelector: #becomeCompact! !Trait method! becomeCompactSimplyAt: index "Make me compact, but don't update the instances. For importing segments." "Here are the restrictions on compact classes in order for export segments to work: A compact class index may not be reused. If a class was compact in a release of Pharo, no other class may use that index. The class might not be compact later, and there should be nil in its place in the array." | cct | self isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. cct := Smalltalk compactClassesArray. (self isCompact or: [cct includes: self]) ifTrue: [^ self halt: self name , 'is already compact']. (cct at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" cct at: index put: self. "Update instspec so future instances will be compact" self setFormat: self format + (index bitShift: 11). "Caller must convert the instances" ! ! TraitBehavior removeSelector: #becomeCompactSimplyAt:! !Trait method! becomeUncompact | cct index | cct := Smalltalk compactClassesArray. (index := self indexIfCompact) = 0 ifTrue: [^ self]. (cct includes: self) ifFalse: [^ self halt "inconsistent state"]. self checkCanBeUncompact. "Update instspec so future instances will not be compact" self setFormat: self format - (index bitShift: 11). "Make up new instances and become old ones into them" self updateInstancesFrom: self. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" cct at: index put: nil. ! ! TraitBehavior removeSelector: #becomeUncompact! !Trait method! binding ^ nil -> self! ! TraitBehavior removeSelector: #binding! !Trait method! canPerform: selector "Answer whether the receiver can safely perform to the message whose selector is the argument: it is not an abstract or cancelled method" ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! TraitBehavior removeSelector: #canPerform:! !Trait method! canUnderstand: selector "Answer whether the receiver can respond to the message whose selector is the argument." ^ self classAndMethodFor: selector do: [:c :m | m isProvided] ifAbsent: [false].! ! TraitBehavior removeSelector: #canUnderstand:! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" ^true! ! TraitBehavior removeSelector: #canZapMethodDictionary! !Trait method! changeRecordsAt: selector "Return a list of ChangeRecords for all versions of the method at selector. Source code can be retrieved by sending string to any one. Return nil if the method is absent." "(Pen changeRecordsAt: #go:) collect: [:cRec | cRec string]" ^ChangeSet scanVersionsOf: (self compiledMethodAt: selector ifAbsent: [^ nil]) class: self meta: self isMeta category: (self whichCategoryIncludesSelector: selector) selector: selector.! ! TraitBehavior removeSelector: #changeRecordsAt:! !Trait method! checkCanBeUncompact "Certain classes cannot be uncompacted in CogVM.  If you download VMMaker and see the VM code, these are as defined by StackInterpreter>>#checkAssumedCompactClasses and the ones that can't be uncompacted are the following: " ({ Array. LargeNegativeInteger. LargePositiveInteger. Float. MethodContext } includes: self) ifTrue: [ self error: 'Class ', self name, ' cannot be uncompact. ' ] ! ! TraitBehavior removeSelector: #checkCanBeUncompact! !Trait method! classAndMethodFor: aSymbol do: binaryBlock ifAbsent: absentBlock "Looks up the selector aSymbol in the class chain. If it is found, binaryBlock is evaluated with the class that defines the selector and the associated method. Otherwise absentBlock is evaluated." self withAllSuperclassesDo: [:class | | method | method := class compiledMethodAt: aSymbol ifAbsent: [nil]. method ifNotNil: [^ binaryBlock value: class value: method]. ]. ^ absentBlock value.! ! TraitBehavior removeSelector: #classAndMethodFor:do:ifAbsent:! !Trait method! classBindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver's class" ^self bindingOf: varName! ! TraitBehavior removeSelector: #classBindingOf:! !Trait method! classDepth self superclass ifNil: [^ 1]. ^ self superclass classDepth + 1! ! TraitBehavior removeSelector: #classDepth! !Trait method! classPool ^ Dictionary new! ! TraitBehavior removeSelector: #classPool! !Trait method! classVarNames "Answer a collection of the receiver's class variable names." ^#()! ! TraitBehavior removeSelector: #classVarNames! !Trait method! classesComposedWithMe self isTrait ifTrue: [ ^self users gather: [:u | u classesComposedWithMe]] ifFalse: [ ^{self} ].! ! TraitBehavior removeSelector: #classesComposedWithMe! !Trait method! cleanUp "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. Subclasses may override #cleanUp: to provide different levels of cleanliness" ! ! TraitBehavior removeSelector: #cleanUp! !Trait method! cleanUp: aggressive "Clean out any caches and other state that should be flushed when trying to get an image into a pristine state. The argument should be used to indicate how aggressive the cleanup should be. Some subclasses may act differently depending on its value - for example, ChangeSet will only delete all unused and reinitialize the current change set if we're asking it to be aggressive." ^self cleanUp! ! TraitBehavior removeSelector: #cleanUp:! !Trait method! commentsAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." ^self commentsIn: (self sourceCodeAt: selector) asString. "Behavior commentsAt: #commentsAt:"! ! TraitBehavior removeSelector: #commentsAt:! !Trait method! commentsIn: sourceString | commentStart nextQuotePos someComments aPos | ('*"*' match: sourceString) ifFalse: [^#()]. someComments:= OrderedCollection new. sourceString size = 0 ifTrue: [^ someComments]. aPos:=1. nextQuotePos:= 0. [commentStart := sourceString findString: '"' startingAt: aPos. nextQuotePos:= self nextQuotePosIn: sourceString startingFrom: commentStart. (commentStart ~= 0 and: [nextQuotePos >commentStart])] whileTrue: [ commentStart ~= nextQuotePos ifTrue: [ someComments add: ((sourceString copyFrom: commentStart + 1 to: nextQuotePos - 1) copyReplaceAll: '""' with: '"').]. aPos := nextQuotePos+1]. ^someComments! ! TraitBehavior removeSelector: #commentsIn:! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! TraitBehavior removeSelector: #compile:! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" | methodNode | methodNode := self compiler compile: code in: self classified: category notifying: requestor ifFail: aBlock. ^ methodNode generate: bytes! ! TraitBehavior removeSelector: #compile:classified:notifying:trailer:ifFail:! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compile: code "a Text" classified: nil notifying: requestor trailer: self defaultMethodTrailer ifFail: [ ^nil ]. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! TraitBehavior removeSelector: #compile:notifying:! !Trait method! compileAll ^ self compileAllFrom: self! ! TraitBehavior removeSelector: #compileAll! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! TraitBehavior removeSelector: #compileAllFrom:! !Trait method! compiledMethodAt: selector "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, create an error notification." ^ self methodDict at: selector! ! TraitBehavior removeSelector: #compiledMethodAt:! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: [aBlock value]! ! TraitBehavior removeSelector: #compiledMethodAt:ifAbsent:! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! TraitBehavior removeSelector: #compiler! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! TraitBehavior removeSelector: #compilerClass! !Trait method! compress "Compact the method dictionary of the receiver." self methodDict rehash! ! TraitBehavior removeSelector: #compress! !Trait method! copiedFromSuperclass: method "Returns the methods that the receiver copied with its ancestors" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ((cls >> method selector) sourceCode = method sourceCode) ifTrue: [ ^ {cls >> method selector}] ifFalse: [ ^ #()]]]. ^ #(). ! ! TraitBehavior removeSelector: #copiedFromSuperclass:! !Trait method! copiedMethodsFromSuperclass "Returns the methods that the receiver copied with its ancestors" | methods | methods := OrderedCollection new. self methodsDo: [ :method| methods addAll: (self copiedFromSuperclass: method)]. ^ methods! ! TraitBehavior removeSelector: #copiedMethodsFromSuperclass! !Trait method! copiesFromSuperclass: method "Checks whether the receiver copied the argument, method, from its superclasses" self allSuperclassesDo: [ :cls| (cls includesSelector: method selector) ifTrue: [ ^ (cls >> method selector) sourceCode = method sourceCode]]. ^ false! ! TraitBehavior removeSelector: #copiesFromSuperclass:! !Trait method! copiesMethodsFromSuperclass "Checks whether the receiver copied some method from its superclass" self methodsDo: [ :method| (self copiesFromSuperclass: method) ifTrue: [ ^ true ]]. ^ false! ! TraitBehavior removeSelector: #copiesMethodsFromSuperclass! !Trait method! copyOfMethodDictionary "Return a copy of the receiver's method dictionary" ^ self methodDict copy! ! TraitBehavior removeSelector: #copyOfMethodDictionary! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! TraitBehavior removeSelector: #decompilerClass! !Trait method! deepCopy "Classes should only be shallowCopied or made anew." ^ self shallowCopy! ! TraitBehavior removeSelector: #deepCopy! !Trait method! defaultMethodTrailer ^ CompiledMethodTrailer empty! ! TraitBehavior removeSelector: #defaultMethodTrailer! !Trait method! deregisterLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors remove: aSymbol ifAbsent: []]! ! TraitBehavior removeSelector: #deregisterLocalSelector:! !Trait method! emptyMethodDictionary ^ MethodDictionary new! ! TraitBehavior removeSelector: #emptyMethodDictionary! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors isNil ifTrue: [self basicLocalSelectors: self selectors asSet]! ! TraitBehavior removeSelector: #ensureLocalSelectors! !Trait method! environment "Return the environment in which the receiver is visible" ^Smalltalk globals! ! TraitBehavior removeSelector: #environment! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! TraitBehavior removeSelector: #evaluate:! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! TraitBehavior removeSelector: #evaluatorClass! !Trait method! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! TraitBehavior removeSelector: #externalTypeAlias:! !Trait method! firstCommentAt: selector "Answer a string representing the first comment in the method associated with selector. Return an empty string if the relevant source file is not available, or if the method's source code does not contain a comment. Not smart enough to bypass quotes in string constants, but does map doubled quote into a single quote." |someComments| someComments := self commentsAt: selector. ^someComments isEmpty ifTrue: [''] ifFalse: [someComments first] "Behavior firstCommentAt: #firstCommentAt:"! ! TraitBehavior removeSelector: #firstCommentAt:! !Trait method! firstPrecodeCommentFor: selector "If there is a comment in the source code at the given selector that preceeds the body of the method, return it here, else return nil" | method | "Behavior firstPrecodeCommentFor: #firstPrecodeCommentFor:" (#(Comment Definition Hierarchy) includes: selector) ifTrue: [^ nil]. method := self compiledMethodAt: selector asSymbol ifAbsent: [^ nil]. ^method ast firstPrecodeComment. ! ! TraitBehavior removeSelector: #firstPrecodeCommentFor:! !Trait method! flattenDown: aTrait | selectors | [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]] assert. selectors := (self traitComposition transformationOfTrait: aTrait) selectors. self basicLocalSelectors: self basicLocalSelectors , selectors. self removeFromComposition: aTrait.! ! TraitBehavior removeSelector: #flattenDown:! !Trait method! flattenDownAllTraits self traitComposition allTraits do: [:each | self flattenDown: each]. [ self traitComposition isEmpty ] assert. self traitComposition: nil.! ! TraitBehavior removeSelector: #flattenDownAllTraits! !Trait method! flushCache "Tell the interpreter to remove the contents of its method lookup cache, if it has one. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! TraitBehavior removeSelector: #flushCache! !Trait method! hasAbstractMethods "Tells whether the receiver locally defines an abstract method, i.e., a method sending subclassResponsibility" ^ (self methods anySatisfy: [:cm | cm sendsSelector: #subclassResponsibility ])! ! TraitBehavior removeSelector: #hasAbstractMethods! !Trait method! hasMethods "Answer whether the receiver has any methods in its method dictionary." ^ self methodDict notEmpty! ! TraitBehavior removeSelector: #hasMethods! !Trait method! hasTraitComposition ^ self traitComposition notEmpty.! ! TraitBehavior removeSelector: #hasTraitComposition! !Trait method! includesBehavior: aClass self isTrait ifTrue: [ ^false ]. ^self == aClass or:[self inheritsFrom: aClass]! ! TraitBehavior removeSelector: #includesBehavior:! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors isNil ifTrue: [self includesSelector: aSymbol] ifFalse: [self localSelectors includes: aSymbol]! ! TraitBehavior removeSelector: #includesLocalSelector:! !Trait method! includesSelector: aSymbol "Answer whether the message whose selector is the argument is in the method dictionary of the receiver's class." ^ self methodDict includesKey: aSymbol! ! TraitBehavior removeSelector: #includesSelector:! !Trait method! includesSharedPoolNamed: aSharedPoolString "Answer whether the receiver uses the shared pool named aSharedPoolString" ^ (self sharedPools anySatisfy: [:each | each name = aSharedPoolString])! ! TraitBehavior removeSelector: #includesSharedPoolNamed:! !Trait method! indexIfCompact "If these 5 bits are non-zero, then instances of this class will be compact. It is crucial that there be an entry in Smalltalk compactClassesArray for any class so optimized. See the msgs becomeCompact and becomeUncompact." ^ (self format bitShift: -11) bitAnd: 16r1F " Array indexIfCompact Verify if the compactClassesArray and indexIfCompact are coheren Smalltalk compactClassesArray doWithIndex: [:c :i | c == nil ifFalse: [c indexIfCompact = i ifFalse: [self halt]]] "! ! TraitBehavior removeSelector: #indexIfCompact! !Trait method! inheritsFrom: aClass "Answer whether the argument, aClass, is on the receiver's superclass chain." | aSuperclass | aSuperclass := self superclass. [aSuperclass == nil] whileFalse: [aSuperclass == aClass ifTrue: [^true]. aSuperclass := aSuperclass superclass]. ^false! ! TraitBehavior removeSelector: #inheritsFrom:! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! TraitBehavior removeSelector: #initialize! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! TraitBehavior removeSelector: #inspectAllInstances! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! TraitBehavior removeSelector: #inspectSubInstances! !Trait method! instSpec ^ (self format bitShift: -7) bitAnd: 16rF! ! TraitBehavior removeSelector: #instSpec! !Trait method! instVarNames "Answer an Array of the instance variable names. Behaviors must make up fake local instance variable names because Behaviors have instance variables for the purpose of compiling methods, but these are not named instance variables." | mySize superSize | mySize := self instSize. superSize := self superclass == nil ifTrue: [0] ifFalse: [self superclass instSize]. mySize = superSize ifTrue: [^#()]. ^(superSize + 1 to: mySize) collect: [:i | 'inst' , i printString]! ! TraitBehavior removeSelector: #instVarNames! !Trait method! instVarNamesAndOffsetsDo: aBinaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the instance variable name strings and their integer offsets. The order is important. Names evaluated later will override the same names occurring earlier." "Nothing to do here; ClassDescription introduces named instance variables" ^self! ! TraitBehavior removeSelector: #instVarNamesAndOffsetsDo:! !Trait method! instanceCount "Answer the number of instances of the receiver that are currently in use." | count | count := 0. self allInstancesDo: [:x | count := count + 1]. ^count! ! TraitBehavior removeSelector: #instanceCount! !Trait method! instancesSizeInMemory "Answers the number of bytes consumed by all its instances including their object header" | bytes | bytes := 0. self allInstancesDo: [:each | bytes := bytes + each sizeInMemory ]. ^ bytes! ! TraitBehavior removeSelector: #instancesSizeInMemory! !Trait method! isAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my or in another composition somewhere deeper in the tree of traits compositions." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isAliasSelector: aSymbol]]! ! TraitBehavior removeSelector: #isAliasSelector:! !Trait method! isAnonymous ^true! ! TraitBehavior removeSelector: #isAnonymous! !Trait method! isBits "Answer whether the receiver contains just bits (not pointers)." ^ self instSpec >= 6! ! TraitBehavior removeSelector: #isBits! !Trait method! isBytes "Answer whether the receiver has 8-bit instance variables." ^ self instSpec >= 8! ! TraitBehavior removeSelector: #isBytes! !Trait method! isCompact ^self indexIfCompact ~= 0! ! TraitBehavior removeSelector: #isCompact! !Trait method! isComposedBy: aTrait "Answers if this object includes trait aTrait into its composition" aTrait isTrait ifFalse: [ ^false]. ^self hasTraitComposition ifTrue: [ self traitComposition includesTrait: aTrait ] ifFalse: [ false ]! ! TraitBehavior removeSelector: #isComposedBy:! !Trait method! isDisabledSelector: selector ^ self classAndMethodFor: selector do: [:c :m | m isDisabled] ifAbsent: [false]! ! TraitBehavior removeSelector: #isDisabledSelector:! !Trait method! isFixed "Answer whether the receiver does not have a variable (indexable) part." ^self isVariable not! ! TraitBehavior removeSelector: #isFixed! !Trait method! isLocalAliasSelector: aSymbol "Return true if the selector aSymbol is an alias defined in my trait composition." ^(self includesLocalSelector: aSymbol) not and: [self hasTraitComposition and: [self traitComposition isLocalAliasSelector: aSymbol]]! ! TraitBehavior removeSelector: #isLocalAliasSelector:! !Trait method! isManifest ^ self name beginsWith: 'Manifest'! ! TraitBehavior removeSelector: #isManifest! !Trait method! isMeta ^ false! ! TraitBehavior removeSelector: #isMeta! !Trait method! isObsolete "Return true if the receiver is obsolete." ^self instanceCount = 0! ! TraitBehavior removeSelector: #isObsolete! !Trait method! isPointers "Answer whether the receiver contains just pointers (not bits)." ^self isBits not! ! TraitBehavior removeSelector: #isPointers! !Trait method! isVariable "Answer whether the receiver has indexable variables." ^ self instSpec >= 2! ! TraitBehavior removeSelector: #isVariable! !Trait method! isWeak "Answer whether the receiver has contains weak references." ^ self instSpec = 4! ! TraitBehavior removeSelector: #isWeak! !Trait method! isWords "Answer true if the receiver is made of 32-bit instance variables." ^self isBytes not! ! TraitBehavior removeSelector: #isWords! !Trait method! kindOfSubclass "Answer a String that is the keyword that describes the receiver's kind of subclass, either a regular subclass, a variableSubclass, a variableByteSubclass, a variableWordSubclass, or a weakSubclass." self isWeak ifTrue: [^ ' weakSubclass: ']. ^ self isVariable ifTrue: [self isBits ifTrue: [self isBytes ifTrue: [ ' variableByteSubclass: '] ifFalse: [ ' variableWordSubclass: ']] ifFalse: [ ' variableSubclass: ']] ifFalse: [ ' subclass: ']! ! TraitBehavior removeSelector: #kindOfSubclass! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key isNil ifTrue: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! TraitBehavior removeSelector: #literalScannedAs:notifying:! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! TraitBehavior removeSelector: #localSelectors! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet.! ! TraitBehavior removeSelector: #localSelectors:! !Trait method! longPrintOn: aStream "Append to the argument, aStream, the names and values of all of the receiver's instance variables. But, not useful for a class with a method dictionary." aStream nextPutAll: '<>'; cr.! ! TraitBehavior removeSelector: #longPrintOn:! !Trait method! lookupSelector: selector "Look up the given selector in my methodDictionary. Return the corresponding method if found. Otherwise chase the superclass chain and try again. Return nil if no method is found." | lookupClass | lookupClass := self. [lookupClass == nil] whileFalse: [(lookupClass includesSelector: selector) ifTrue: [^ lookupClass compiledMethodAt: selector]. lookupClass := lookupClass superclass]. ^ nil! ! TraitBehavior removeSelector: #lookupSelector:! !Trait method! methodDictAddSelectorSilently: selector withMethod: compiledMethod self basicAddSelector: selector withMethod: compiledMethod! ! TraitBehavior removeSelector: #methodDictAddSelectorSilently:withMethod:! !Trait method! methodDictionary "Convenience" ^self methodDict! ! TraitBehavior removeSelector: #methodDictionary! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! TraitBehavior removeSelector: #methodDictionary:! !Trait method! methodNamed: aSelector ^ self methodDict at: aSelector! ! TraitBehavior removeSelector: #methodNamed:! !Trait method! methods ^ self methodDict values! ! TraitBehavior removeSelector: #methods! !Trait method! methodsDo: aBlock "Evaluate aBlock for all the compiled methods in my method dictionary." ^ self methodDict valuesDo: aBlock! ! TraitBehavior removeSelector: #methodsDo:! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [:each | (self methodDict at: each) ]! ! TraitBehavior removeSelector: #methodsInProtocol:! !Trait method! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! TraitBehavior removeSelector: #nbBindingOf:! !Trait method! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! TraitBehavior removeSelector: #nbFnArgument:generator:! !Trait method! new "Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable." ^ self basicNew initialize ! ! TraitBehavior removeSelector: #new! !Trait method! new: sizeRequested "Answer an initialized instance of this class with the number of indexable variables specified by the argument, sizeRequested." ^ (self basicNew: sizeRequested) initialize ! ! TraitBehavior removeSelector: #new:! !Trait method! nextQuotePosIn: sourceString startingFrom: commentStart | pos nextQuotePos | pos := commentStart + 1. [((nextQuotePos := sourceString findString: '"' startingAt: pos) == (sourceString findString: '""' startingAt: pos)) and: [nextQuotePos ~= 0]] whileTrue: [pos := nextQuotePos + 2]. ^nextQuotePos! ! TraitBehavior removeSelector: #nextQuotePosIn:startingFrom:! !Trait method! nonObsoleteClass "Attempt to find and return the current version of this obsolete class" | obsName | obsName := self name. [obsName beginsWith: 'AnObsolete'] whileTrue: [obsName := obsName copyFrom: 'AnObsolete' size + 1 to: obsName size]. ^ self environment at: obsName asSymbol! ! TraitBehavior removeSelector: #nonObsoleteClass! !Trait method! noteChangedSelectors: aCollection "Start update of my methodDict (after changes to traits in traitComposition or after a local method was removed from my methodDict). The argument is a collection of method selectors that may have been changed. Most of the time aCollection only holds one selector. But when there are aliases involved there may be several method changes that have to be propagated to users." | affectedSelectors | affectedSelectors := IdentitySet new. aCollection do: [:selector | affectedSelectors addAll: (self updateMethodDictionarySelector: selector)]. self notifyUsersOfChangedSelectors: affectedSelectors. ^ affectedSelectors! ! TraitBehavior removeSelector: #noteChangedSelectors:! !Trait method! notifyUsersOfChangedSelector: aSelector self notifyUsersOfChangedSelectors: (Array with: aSelector)! ! TraitBehavior removeSelector: #notifyUsersOfChangedSelector:! !Trait method! notifyUsersOfChangedSelectors: aCollection! ! TraitBehavior removeSelector: #notifyUsersOfChangedSelectors:! !Trait method! numberOfInstanceVariables ^ self instVarNames size ! ! TraitBehavior removeSelector: #numberOfInstanceVariables! !Trait method! obsolete "Invalidate and recycle local methods, e.g., zap the method dictionary if can be done safely." self canZapMethodDictionary ifTrue: [self methodDict: self emptyMethodDictionary]. self hasTraitComposition ifTrue: [ self traitComposition traits do: [:each | each removeUser: self]]! ! TraitBehavior removeSelector: #obsolete! !Trait method! obsoleteSubclasses "Return all the weakly remembered obsolete subclasses of the receiver" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent: [^ #()]. ^ obs copyWithout: nil! ! TraitBehavior removeSelector: #obsoleteSubclasses! !Trait method! originalName ^self isObsolete ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) asSymbol ] ifFalse: [ self name asSymbol ].! ! TraitBehavior removeSelector: #originalName! !Trait method! parseTreeFor: aSymbol ^ RBParser parseMethod: (self sourceCodeAt: aSymbol) onError: [ :msg :pos | ^ nil ]! ! TraitBehavior removeSelector: #parseTreeFor:! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! TraitBehavior removeSelector: #parserClass! !Trait method! poolDictionaryNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! TraitBehavior removeSelector: #poolDictionaryNames! !Trait method! postCopy super postCopy. self methodDict: self copyOfMethodDictionary! ! TraitBehavior removeSelector: #postCopy! !Trait method! precodeCommentOrInheritedCommentFor: selector "Answer a string representing the first comment in the method associated with selector, considering however only comments that occur before the beginning of the actual code. If the version recorded in the receiver is uncommented, look up the inheritance chain. Return nil if none found." | aSuper aComment | ^ (aComment := self firstPrecodeCommentFor: selector) isEmptyOrNil ifTrue: [(self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: [aSuper precodeCommentOrInheritedCommentFor: selector]] ifFalse: [aComment]! ! TraitBehavior removeSelector: #precodeCommentOrInheritedCommentFor:! !Trait method! printHierarchy "Answer a description containing the names and instance variable names of all of the subclasses and superclasses of the receiver." | aStream index | index := 0. aStream := (String new: 16) writeStream. self allSuperclasses reverseDo: [:aClass | aStream crtab: index. index := index + 1. aStream nextPutAll: aClass name. aStream space. aStream print: aClass instVarNames]. aStream cr. self printSubclassesOn: aStream level: index. ^aStream contents! ! TraitBehavior removeSelector: #printHierarchy! !Trait method! printOn: aStream "Refer to the comment in Object|printOn:." aStream nextPutAll: 'a descendent of '. self superclass printOn: aStream! ! TraitBehavior removeSelector: #printOn:! !Trait method! protocols ^ self organization categories copy! ! TraitBehavior removeSelector: #protocols! !Trait method! purgeLocalSelectors self basicLocalSelectors: nil! ! TraitBehavior removeSelector: #purgeLocalSelectors! !Trait method! realClass ^ self! ! TraitBehavior removeSelector: #realClass! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! TraitBehavior removeSelector: #recompile:! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! TraitBehavior removeSelector: #recompileChanges! !Trait method! referencedClasses "Return the set of classes that are directly referenced by my methods" | answer | answer := Set new. self methods do: [ :cm | answer addAll: ( cm literals select: [ :l | l isKindOf: Association ] thenCollect: #value ) ]. ^ answer! ! TraitBehavior removeSelector: #referencedClasses! !Trait method! registerLocalSelector: aSymbol self basicLocalSelectors notNil ifTrue: [ self basicLocalSelectors add: aSymbol]! ! TraitBehavior removeSelector: #registerLocalSelector:! !Trait method! removeAlias: aSymbol of: aTrait self setTraitComposition: ( self traitComposition copyWithoutAlias: aSymbol of: aTrait)! ! TraitBehavior removeSelector: #removeAlias:of:! !Trait method! removeAllObsoleteSubclasses "Remove all the obsolete subclasses of the receiver" self basicObsoleteSubclasses removeKey: self ifAbsent: []. ! ! TraitBehavior removeSelector: #removeAllObsoleteSubclasses! !Trait method! removeFromComposition: aTrait self setTraitComposition: (self traitComposition copyTraitExpression removeFromComposition: aTrait)! ! TraitBehavior removeSelector: #removeFromComposition:! !Trait method! removeObsoleteSubclass: aClass "Remove aClass from the weakly remembered obsolete subclasses" | obs | obs := self basicObsoleteSubclasses at: self ifAbsent:[^ self]. (obs includes: aClass) ifFalse:[^self]. obs := obs copyWithout: aClass. obs := obs copyWithout: nil. self basicObsoleteSubclasses at: self put: obs! ! TraitBehavior removeSelector: #removeObsoleteSubclass:! !Trait method! removeSelectorSilently: selector "Remove selector without sending system change notifications" ^ SystemAnnouncer uniqueInstance suspendAllWhile: [self removeSelector: selector].! ! TraitBehavior removeSelector: #removeSelectorSilently:! !Trait method! removeTraitSelector: aSymbol [(self includesLocalSelector: aSymbol) not] assert. self basicRemoveSelector: aSymbol! ! TraitBehavior removeSelector: #removeTraitSelector:! !Trait method! removeUser: aClassOrTrait self users remove: aClassOrTrait ifAbsent: []! ! TraitBehavior removeSelector: #removeUser:! !Trait method! selectSubclasses: aBlock "Evaluate the argument, aBlock, with each of the receiver's (next level) subclasses as its argument. Collect into a Set only those subclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the subclasses of each of these successful subclasses and collect into the set those for which aBlock evaluates true. Answer the resulting set." | aSet | aSet := Set new. self allSubclasses do: [:aSubclass | (aBlock value: aSubclass) ifTrue: [aSet add: aSubclass]]. ^aSet! ! TraitBehavior removeSelector: #selectSubclasses:! !Trait method! selectSuperclasses: aBlock "Evaluate the argument, aBlock, with the receiver's superclasses as the argument. Collect into an OrderedCollection only those superclasses for which aBlock evaluates to true. In addition, evaluate aBlock for the superclasses of each of these successful superclasses and collect into the OrderedCollection ones for which aBlock evaluates to true. Answer the resulting OrderedCollection." | aSet | aSet := Set new. self allSuperclasses do: [:aSuperclass | (aBlock value: aSuperclass) ifTrue: [aSet add: aSuperclass]]. ^aSet! ! TraitBehavior removeSelector: #selectSuperclasses:! !Trait method! selectors "Answer a Set of all the message selectors specified in the receiver's method dictionary." ^ self methodDict keys! ! TraitBehavior removeSelector: #selectors! !Trait method! selectorsAndMethodsDo: selectorAndMethodBlock "Evaluate selectorAndMethodBlock with two arguments for each selector/method pair in my method dictionary." ^ self methodDict keysAndValuesDo: selectorAndMethodBlock! ! TraitBehavior removeSelector: #selectorsAndMethodsDo:! !Trait method! selectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors in my method dictionary." ^ self methodDict keysDo: selectorBlock! ! TraitBehavior removeSelector: #selectorsDo:! !Trait method! selectorsWithArgs: numberOfArgs "Return all selectors defined in this class that take this number of arguments" ^ self selectors select: [:selector | selector numArgs = numberOfArgs]! ! TraitBehavior removeSelector: #selectorsWithArgs:! !Trait method! setTraitComposition: aTraitComposition | oldComposition | (self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self]. aTraitComposition assertValidUser: self. oldComposition := self traitComposition. self traitComposition: aTraitComposition. self applyChangesOfNewTraitCompositionReplacing: oldComposition. oldComposition traits do: [:each | each removeUser: self]. aTraitComposition traits do: [:each | each addUser: self]! ! TraitBehavior removeSelector: #setTraitComposition:! !Trait method! setTraitCompositionFrom: aTraitExpression ^ self setTraitComposition: aTraitExpression asTraitComposition! ! TraitBehavior removeSelector: #setTraitCompositionFrom:! !Trait method! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! TraitBehavior removeSelector: #sharedPools! !Trait method! shouldNotBeRedefined "Return true if the receiver should not be redefined. The assumption is that compact classes, classes in Smalltalk specialObjects and Behaviors should not be redefined" ^(Smalltalk compactClassesArray includes: self) or:[(Smalltalk specialObjectsArray includes: self) or: [self isKindOf: self]]! ! TraitBehavior removeSelector: #shouldNotBeRedefined! !Trait method! shutDown "This message is sent on system shutdown to registered classes" ! ! TraitBehavior removeSelector: #shutDown! !Trait method! shutDown: quitting "This message is sent on system shutdown to registered classes" ^self shutDown.! ! TraitBehavior removeSelector: #shutDown:! !Trait method! someInstance "Primitive. Answer the first instance in the enumeration of all instances of the receiver. Fails if there are none. Essential. See Object documentation whatIsAPrimitive." ^nil! ! TraitBehavior removeSelector: #someInstance! !Trait method! sourceCodeAt: selector ^ (self methodDict at: selector) sourceCode.! ! TraitBehavior removeSelector: #sourceCodeAt:! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self methodDict at: selector ifAbsent: [^ aBlock value]) sourceCode.! ! TraitBehavior removeSelector: #sourceCodeAt:ifAbsent:! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! TraitBehavior removeSelector: #sourceCodeTemplate! !Trait method! sourceMatchesBytecodeAt: selector "Answers true if the source code at the selector compiles to the bytecode at the selector, and false otherwise. Implemented to detect an error where Monticello did not recompile sources when the class shape changed" "This code was copied from #recompile:from:, with few changes. Several methods would benefit from a method which turned a selector and class into a CompiledMethod, without installing it into the methodDictionary" | method newMethod | method := self compiledMethodAt: selector. newMethod := self compiler source: (self sourceCodeAt: selector); class: self; failBlock: [^ false]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!!!']. ^ newMethod = method! ! TraitBehavior removeSelector: #sourceMatchesBytecodeAt:! !Trait method! spaceUsed "Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables." | space | space := 0. self methodsDo: [:method | space := space + 16. "dict and org'n space" space := space + (method size + 6 "hdr + avg pad"). method literalsDo: [:lit | (lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: Float) ifTrue: [space := space + 12]. (lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)]. (lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)]. (lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]]. ^ space! ! TraitBehavior removeSelector: #spaceUsed! !Trait method! startUp "This message is sent to registered classes when the system is coming up." ! ! TraitBehavior removeSelector: #startUp! !Trait method! startUp: resuming "This message is sent to registered classes when the system is coming up." ^self startUp! ! TraitBehavior removeSelector: #startUp:! !Trait method! storeLiteral: aCodeLiteral on: aStream "Store aCodeLiteral on aStream, changing an Association to ##GlobalName or ###MetaclassSoleInstanceName format if appropriate" | key value | (aCodeLiteral isVariableBinding) ifFalse: [aCodeLiteral storeOn: aStream. ^self]. key := aCodeLiteral key. (key isNil and: [(value := aCodeLiteral value) isMemberOf: Metaclass]) ifTrue: [aStream nextPutAll: '###'; nextPutAll: value soleInstance name. ^self]. (key isSymbol and: [(self bindingOf: key) notNil]) ifTrue: [aStream nextPutAll: '##'; nextPutAll: key. ^self]. aCodeLiteral storeOn: aStream! ! TraitBehavior removeSelector: #storeLiteral:on:! !Trait method! subclassInstVarNames "Answer a Set of the names of the receiver's subclasses' instance variables." | vars | vars := Set new. self allSubclasses do: [:aSubclass | vars addAll: aSubclass instVarNames]. ^vars! ! TraitBehavior removeSelector: #subclassInstVarNames! !Trait method! subclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's immediate subclasses." self subclasses do: aBlock! ! TraitBehavior removeSelector: #subclassesDo:! !Trait method! superclass: aClass methodDictionary: mDict format: fmt "Basic initialization of the receiver. Must only be sent to a new instance; else we would need Object flushCache." self superclass: aClass. self setFormat: fmt. self methodDict: mDict. self traitComposition: nil! ! TraitBehavior removeSelector: #superclass:methodDictionary:format:! !Trait method! supermostPrecodeCommentFor: selector "Answer a string representing the precode comment in the most distant superclass's implementation of the selector. Return nil if none found." | aSuper superComment | (self == Behavior or: [self superclass == nil or: [(aSuper := self superclass whichClassIncludesSelector: selector) == nil]]) ifFalse: ["There is a super implementor" superComment := aSuper supermostPrecodeCommentFor: selector]. ^ superComment ifNil: [self firstPrecodeCommentFor: selector "ActorState supermostPrecodeCommentFor: #printOn:"]! ! TraitBehavior removeSelector: #supermostPrecodeCommentFor:! !Trait method! thoroughHasSelectorReferringTo: literal special: specialFlag byte: specialByte "Answer true if any of my methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " self methodsDo: [ :method | ((method hasLiteralThorough: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [^true]]. ^false! ! TraitBehavior removeSelector: #thoroughHasSelectorReferringTo:special:byte:! !Trait method! thoroughWhichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal. Dives into the compact literal notation, making it slow but thorough " | selectors | selectors := IdentitySet new. self selectorsAndMethodsDo: [ :sel :method | ((self isTrait ifTrue: [method hasLiteralThorough: literal] ifFalse: [method refersToLiteral: literal]) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [selectors add: sel]]. ^ selectors! ! TraitBehavior removeSelector: #thoroughWhichSelectorsReferTo:special:byte:! !Trait method! traitCompositionIncludes: aTrait ^self == aTrait or: [self hasTraitComposition and: [self traitComposition allTraits includes: aTrait]]! ! TraitBehavior removeSelector: #traitCompositionIncludes:! !Trait method! traitCompositionString ^self hasTraitComposition ifTrue: [self traitComposition asString] ifFalse: ['{}']! ! TraitBehavior removeSelector: #traitCompositionString! !Trait method! traitOrClassOfSelector: aSymbol "Return the trait or the class which originally defines the method aSymbol or return self if locally defined or if it is a conflict marker method. This is primarly used by Debugger to determin the behavior in which a recompiled method should be put. If a conflict method is recompiled it should be put into the class, thus return self. Also see TraitComposition>>traitProvidingSelector:" ((self includesLocalSelector: aSymbol) or: [ self hasTraitComposition not]) ifTrue: [^self]. ^(self traitComposition traitProvidingSelector: aSymbol) ifNil: [self]! ! TraitBehavior removeSelector: #traitOrClassOfSelector:! !Trait method! traitTransformations ^ self traitComposition transformations ! ! TraitBehavior removeSelector: #traitTransformations! !Trait method! traits "Returns a collection of all traits used by the receiver" ^ self traitComposition traits! ! TraitBehavior removeSelector: #traits! !Trait method! traitsProvidingSelector: aSymbol | result | result := OrderedCollection new. self hasTraitComposition ifFalse: [^result]. (self traitComposition methodDescriptionsForSelector: aSymbol) do: [:methodDescription | methodDescription selector = aSymbol ifTrue: [ result addAll: (methodDescription locatedMethods collect: [:each | each methodClass])]]. ^result! ! TraitBehavior removeSelector: #traitsProvidingSelector:! !Trait method! typeOfClass "Answer a symbol uniquely describing the type of the receiver" self instSpec = CompiledMethod instSpec ifTrue:[^#compiledMethod]. "Very special!!" self isBytes ifTrue:[^#bytes]. (self isWords and:[self isPointers not]) ifTrue:[^#words]. self isWeak ifTrue:[^#weak]. self isVariable ifTrue:[^#variable]. ^#normal.! ! TraitBehavior removeSelector: #typeOfClass! !Trait method! ultimateSourceCodeAt: selector ifAbsent: aBlock "Return the source code at selector, deferring to superclass if necessary" ^ self sourceCodeAt: selector ifAbsent: [self superclass ifNil: [aBlock value] ifNotNil: [self superclass ultimateSourceCodeAt: selector ifAbsent: aBlock]]! ! TraitBehavior removeSelector: #ultimateSourceCodeAt:ifAbsent:! !Trait method! unreferencedInstanceVariables "Return a list of the instance variables defined in the receiver which are not referenced in the receiver or any of its subclasses." ^ self instVarNames reject: [:ivn | self withAllSubclasses anySatisfy: [:class | (class whichSelectorsAccess: ivn) notEmpty]]! ! TraitBehavior removeSelector: #unreferencedInstanceVariables! !Trait method! updateMethodDictionarySelector: aSymbol "A method with selector aSymbol in myself or my traitComposition has been changed. Do the appropriate update to my methodDict (remove or update method) and return all affected selectors of me so that my useres get notified." | modifiedSelectors descriptions oldProtocol | modifiedSelectors := IdentitySet new. descriptions := self traitComposition methodDescriptionsForSelector: aSymbol. descriptions do: [:methodDescription | | effectiveMethod selector | selector := methodDescription selector. (self includesLocalSelector: selector) ifFalse: [ methodDescription isEmpty ifTrue: [ self removeTraitSelector: selector. modifiedSelectors add: selector] ifFalse: [ effectiveMethod := methodDescription effectiveMethod. self addTraitSelector: selector withMethod: effectiveMethod. "If the method was not categorized yet, we categorize it " oldProtocol := self organization categoryOfElement: selector. (oldProtocol isNil or: [ oldProtocol = Protocol unclassified ]) ifTrue: [ self organization classify: selector under: methodDescription effectiveMethodCategory. ]. modifiedSelectors add: selector]]]. ^modifiedSelectors! ! TraitBehavior removeSelector: #updateMethodDictionarySelector:! !Trait method! variablesAndOffsetsDo: aBinaryBlock "This is the interface between the compiler and a class's instance or field names. The class should enumerate aBinaryBlock with the field definitions (with nil offsets) followed by the instance variable name strings and their integer offsets (1-relative). The order is important; names evaluated later will override the same names occurring earlier." "Only need to do instance variables here. CProtoObject introduces field definitions." self instVarNamesAndOffsetsDo: aBinaryBlock! ! TraitBehavior removeSelector: #variablesAndOffsetsDo:! !Trait method! whichClassDefinesClassVar: aString Symbol hasInterned: aString ifTrue: [ :aSymbol | ^self whichSuperclassSatisfies: [:aClass | aClass classVarNames anySatisfy: [:each | each = aSymbol]]]. ^#()! ! TraitBehavior removeSelector: #whichClassDefinesClassVar:! !Trait method! whichClassDefinesInstVar: aString ^self whichSuperclassSatisfies: [:aClass | aClass instVarNames includes: aString]! ! TraitBehavior removeSelector: #whichClassDefinesInstVar:! !Trait method! whichClassIncludesSelector: aSymbol "Answer the class on the receiver's superclass chain where the argument, aSymbol (a message selector), will be found. Answer nil if none found." "Rectangle whichClassIncludesSelector: #inspect." (self includesSelector: aSymbol) ifTrue: [^ self]. self superclass == nil ifTrue: [^ nil]. ^ self superclass whichClassIncludesSelector: aSymbol! ! TraitBehavior removeSelector: #whichClassIncludesSelector:! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self methodDict at: sel) readsField: instVarIndex) or: [(self methodDict at: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! TraitBehavior removeSelector: #whichSelectorsAccess:! !Trait method! whichSelectorsAssign: instVarName "Answer a Set of selectors whose methods store into the argument, instVarName, as a named instance variable." ^self whichSelectorsStoreInto: instVarName! ! TraitBehavior removeSelector: #whichSelectorsAssign:! !Trait method! whichSelectorsRead: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." ^self whichSelectorsAccess: instVarName! ! TraitBehavior removeSelector: #whichSelectorsRead:! !Trait method! whichSelectorsReferTo: literal "Answer a Set of selectors whose methods access the argument as a literal." | special byte | special := Smalltalk hasSpecialSelector: literal ifTrueSetByte: [:b | byte := b]. ^self whichSelectorsReferTo: literal special: special byte: byte "Rectangle whichSelectorsReferTo: #+."! ! TraitBehavior removeSelector: #whichSelectorsReferTo:! !Trait method! whichSelectorsReferTo: literal special: specialFlag byte: specialByte "Answer a set of selectors whose methods access the argument as a literal." | who | who := IdentitySet new. self selectorsAndMethodsDo: [:sel :method | ((method hasLiteral: literal) or: [specialFlag and: [method scanFor: specialByte]]) ifTrue: [((literal isVariableBinding) not or: [method literals allButLast includes: literal]) ifTrue: [who add: sel]]]. ^ who! ! TraitBehavior removeSelector: #whichSelectorsReferTo:special:byte:! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self methodDict at: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! TraitBehavior removeSelector: #whichSelectorsStoreInto:! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass isNil ifTrue: [nil] ifFalse: [self superclass whichSuperclassSatisfies: aBlock]! ! TraitBehavior removeSelector: #whichSuperclassSatisfies:! !Trait method! withAllSubAndSuperclassesDo: aBlock self withAllSubclassesDo: aBlock. self allSuperclassesDo: aBlock. ! ! TraitBehavior removeSelector: #withAllSubAndSuperclassesDo:! !Trait method! withAllSubclasses "Answer a Set of the receiver, the receiver's descendent's, and the receiver's descendent's subclasses." ^ self allSubclasses add: self; yourself! ! TraitBehavior removeSelector: #withAllSubclasses! !Trait method! withAllSubclassesDo: aBlock "Evaluate the argument, aBlock, for the receiver and each of its subclasses." self withAllSubclasses do: [ :subclass | aBlock value: subclass ].! ! TraitBehavior removeSelector: #withAllSubclassesDo:! !Trait method! withAllSuperAndSubclassesDo: aBlock self allSuperclassesDo: aBlock. aBlock value: self. self allSubclassesDo: aBlock! ! TraitBehavior removeSelector: #withAllSuperAndSubclassesDo:! !Trait method! withAllSuperclasses "Answer an OrderedCollection of the receiver and the receiver's superclasses. The first element is the receiver, followed by its superclass; the last element is Object." | temp | temp := self allSuperclasses. temp addFirst: self. ^ temp! ! TraitBehavior removeSelector: #withAllSuperclasses! !Trait method! withAllSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." aBlock value: self. self superclass == nil ifFalse: [self superclass withAllSuperclassesDo: aBlock]! ! TraitBehavior removeSelector: #withAllSuperclassesDo:! !Trait method! zapAllMethods "Remove all methods in this class which is assumed to be obsolete" self methodDict: self emptyMethodDictionary. self class isMeta ifTrue: [self class zapAllMethods]! ! TraitBehavior removeSelector: #zapAllMethods! ----End fileIn----! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 18:44' prior: 44768405! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 18:44' prior: 44889251! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 41886441! testInspectTraitClass | inspector | inspector := TBehavior inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 28695078! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#localSelectors) browse. browser changed. browser close.! ! !OpenToolTest methodsFor: 'test inspect' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44894427! testInspectTraitClass | inspector | inspector := TBehavior inspector. inspector changed. inspector close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44894636! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#localSelectors) browse. browser changed. browser close.! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 18:44' prior: 44045979! pureRemoveSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !TraitBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/9/2013 18:44' prior: 44895305! pureRemoveSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector) ! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:42' prior: 37147485! testValidTraitComposition2 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 37148401! testValidTraitComposition3 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior + TClassDescription' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: (cls includesSelector: #comment). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TClassDescription).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 24650016! testValidTraitComposition4 "Related to http://code.google.com/p/pharo/issues/detail?id=2598" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior - {#>> . #withAllSubclassesDo:}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls selectors includesAllOf: {#withAllSuperclasses . #traits}). self deny: (cls selectors includesAnyOf: {#>> . #withAllSubclassesDo:}).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:42' prior: 37146568! testValidTraitComposition "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: '{TBehavior}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:42' prior: 44897993! testValidTraitComposition2 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44898903! testValidTraitComposition3 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior + TClassDescription' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: (cls includesSelector: #comment). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TClassDescription).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44899984! testValidTraitComposition4 "Related to http://code.google.com/p/pharo/issues/detail?id=2598" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'TBehavior - {#>> . #withAllSubclassesDo:}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls selectors includesAllOf: {#withAllSuperclasses . #traits}). self deny: (cls selectors includesAnyOf: {#>> . #withAllSubclassesDo:}).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/9/2013 18:42' prior: 44900940! testValidTraitComposition "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: '{TBehavior}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #>>). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: TBehavior).! ! !RGTraitDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 31759370! testAsFullTraitDefinition "self debug: #testAsFullTraitDefinition" | rgClass | rgClass := TBehavior asRingDefinition. self assert: rgClass methods isEmpty. self assert: rgClass superclass isNil. self assert: rgClass subclasses isEmpty. self assert: rgClass package isNil. rgClass := TBehavior asFullRingDefinition. self assert: rgClass methods notEmpty. self assert: (rgClass methodNamed: #allSelectors) package notNil. self assert: rgClass superclass notNil. self assert: rgClass superclass name = #Trait. self assert: rgClass subclasses isEmpty. self assert: rgClass package notNil. self assert: rgClass package = rgClass theNonMetaClass package. self assert: rgClass package name = #Traits. self assert: rgClass category = #'Traits-Kernel-Traits'. self assert: rgClass superclass superclass isNil. self assert: rgClass superclass package isNil. rgClass := TBehavior theMetaClass asFullRingDefinition. self assert: rgClass package = rgClass theNonMetaClass package.! ! !RGTraitDefinitionTest methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 31761628! testAsTraitDefinition | newTrait | newTrait:= TBehavior asRingDefinition. self assert: (newTrait isRingObject). self assert: (newTrait isTrait). self assert: (newTrait name == #TBehavior). self assert: (newTrait category notNil). self assert: (newTrait superclassName notNil). self assert: (newTrait theMetaClass isRingObject). self assert: (newTrait theMetaClass isTrait). self assert: (newTrait theMetaClass traitCompositionSource = '{}').! ! !RGTraitDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44905726! testAsFullTraitDefinition "self debug: #testAsFullTraitDefinition" | rgClass | rgClass := TBehavior asRingDefinition. self assert: rgClass methods isEmpty. self assert: rgClass superclass isNil. self assert: rgClass subclasses isEmpty. self assert: rgClass package isNil. rgClass := TBehavior asFullRingDefinition. self assert: rgClass methods notEmpty. self assert: (rgClass methodNamed: #allSelectors) package notNil. self assert: rgClass superclass notNil. self assert: rgClass superclass name = #Trait. self assert: rgClass subclasses isEmpty. self assert: rgClass package notNil. self assert: rgClass package = rgClass theNonMetaClass package. self assert: rgClass package name = #Traits. self assert: rgClass category = #'Traits-Kernel-Traits'. self assert: rgClass superclass superclass isNil. self assert: rgClass superclass package isNil. rgClass := TBehavior theMetaClass asFullRingDefinition. self assert: rgClass package = rgClass theNonMetaClass package.! ! !RGTraitDefinitionTest methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44906826! testAsTraitDefinition | newTrait | newTrait:= TBehavior asRingDefinition. self assert: (newTrait isRingObject). self assert: (newTrait isTrait). self assert: (newTrait name == #TBehavior). self assert: (newTrait category notNil). self assert: (newTrait superclassName notNil). self assert: (newTrait theMetaClass isRingObject). self assert: (newTrait theMetaClass isTrait). self assert: (newTrait theMetaClass traitCompositionSource = '{}').! ! !RGMonticelloTest methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 31729295! testConvertingMCTraitDefinition | mcClass ringClass | mcClass := TSortable asClassDefinition. ringClass := mcClass asRingDefinition. self assert: (ringClass isTrait). self assert: (ringClass theMetaClass realClass = TSortable theMetaClass). self assert: (ringClass isSameRevisionAs: TSortable asRingDefinition). self deny: (ringClass isSameRevisionAs: TBehavior asRingDefinition)! ! !RGMonticelloTest methodsFor: 'testing' stamp: 'SebastianTleye 7/9/2013 18:43' prior: 44909066! testConvertingMCTraitDefinition | mcClass ringClass | mcClass := TSortable asClassDefinition. ringClass := mcClass asRingDefinition. self assert: (ringClass isTrait). self assert: (ringClass theMetaClass realClass = TSortable theMetaClass). self assert: (ringClass isSameRevisionAs: TSortable asRingDefinition). self deny: (ringClass isSameRevisionAs: TBehavior asRingDefinition)! ! TBehavior classTrait removeSelector: #canZapMethodDictionary! TBehavior classTrait removeSelector: #cleanUp! ----End fileIn----! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/11/2013 11:15'! addSubclass: aClass "Do nothing."! ! !Trait method! addSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/11/2013 11:01'! asFullRingDefinition ^ self theNonMetaClass asFullRingDefinition theMetaClass! ! !TApplyingOnClassSide methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/11/2013 11:01'! asRingDefinition ^ self theNonMetaClass asRingDefinition theMetaClass! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/11/2013 11:15' prior: 44910175! addSubclass: aClass "Do nothing."! ! !Trait method! addSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/11/2013 11:01' prior: 44910361! asFullRingDefinition ^ self theNonMetaClass asFullRingDefinition theMetaClass! ! !TApplyingOnClassSide methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/11/2013 11:01' prior: 44910539! asRingDefinition ^ self theNonMetaClass asRingDefinition theMetaClass! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10'! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10'! theMetaClass "Sent to a class or metaclass, always return the metaclass" ^self class! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44911285! theNonMetaClass "Sent to a class or metaclass, always return the class" ^self! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44911460! theMetaClass "Sent to a class or metaclass, always return the metaclass" ^self class! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 43451124! theNonMetaClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 43450915! theMetaClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44912058! theNonMetaClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44912226! theMetaClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44912559! theMetaClass ^self subclassResponsibility.! ! !TraitDescription class methodsFor: 'cleanup' stamp: 'SebastianTleye 7/11/2013 11:10' prior: 44137885! cleanUp "Do nothing" ! ! !Trait method! addSubclass: aClass "Do nothing."! ! Metaclass removeSelector: #addSubclass:! !Trait method! asFullRingDefinition ^ self theNonMetaClass asFullRingDefinition theMetaClass! ! Metaclass removeSelector: #asFullRingDefinition! !Trait method! asRingDefinition ^ self theNonMetaClass asRingDefinition theMetaClass! ! Metaclass removeSelector: #asRingDefinition! !Trait method! asFullRingDefinition ^ self theNonMetaClass asFullRingDefinition theMetaClass! ! ClassTrait removeSelector: #asFullRingDefinition! !Trait method! asRingDefinition ^ self theNonMetaClass asRingDefinition theMetaClass! ! ClassTrait removeSelector: #asRingDefinition! ----End fileIn----! ----End fileIn----! ----QUIT----an Array(11 July 2013 4:56:21 pm) Pharo.image priorSource: 10539365! ----STARTUP----an Array(11 July 2013 5:06:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 5:06:34 pm) Pharo-30265.image priorSource: 11359174! ----STARTUP----an Array(11 July 2013 5:32:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/11/2013 15:18' prior: 44014563! commentForCurrentUpdate ^ '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 2)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/11/2013 17:19'! script102 ^ 'Traits-EstebanLorenzano.546.mcz ToolsTest-EstebanLorenzano.denker.44.mcz Tools-EstebanLorenzano.1171.mcz Tests-EstebanLorenzano.585.mcz System-Support-EstebanLorenzano.870.mcz Ring-Tests-Monticello-EstebanLorenzano.11.mcz Ring-Tests-Kernel-EstebanLorenzano.49.mcz Ring-Core-Kernel-EstebanLorenzano.120.mcz Refactoring-Core-EstebanLorenzano.177.mcz RPackage-Core-EstebanLorenzano.239.mcz NautilusCommon-EstebanLorenzano.151.mcz Nautilus-EstebanLorenzano.488.mcz NativeBoost-Core-EstebanLorenzano.127.mcz Manifest-Core-EstebanLorenzano.139.mcz Kernel-EstebanLorenzano.1517.mcz FuelTests-EstebanLorenzano.326.mcz Compiler-EstebanLorenzano.500.mcz AST-Core-EstebanLorenzano.175.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/11/2013 15:36'! update30265 "self new update30265" self withUpdateLog: '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 2)'. self flushCaches.! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/11/2013 17:17'! update30266 "self new update30264" self withUpdateLog: '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 3)'. self loadTogether: self script102 merge: false. self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(11 July 2013 5:33:30 pm) Pharo.image priorSource: 11359373! ----STARTUP----an Array(11 July 2013 5:42:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 5:42:59 pm) Pharo-30266.image priorSource: 11361278! ----STARTUP----an Array(11 July 2013 5:56:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/11/2013 17:49' prior: 44914109! commentForCurrentUpdate ^ '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 4)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/11/2013 17:49'! script103 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1518.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.41.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.489.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.344.mcz SlotTests-MarcusDenker.41.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.586.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1172.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/11/2013 17:50'! update30267 "self new update30267" self withUpdateLog: '11151 More changes needed to trait/classes polymorphism https://pharo.fogbugz.com/f/cases/11151/ (pass 4)'. self loadTogether: self script103 merge: false. self flushCaches. ! ! "ScriptLoader30"! "AST-Core"! "Compiler"! "FuelTests"! "Kernel"! "Manifest-Core"! "NativeBoost-Core"! "Nautilus"! "NautilusCommon"! "RPackage-Core"! "Refactoring-Core"! "Ring-Core-Kernel"! "Ring-Tests-Kernel"! "Ring-Tests-Monticello"! "System-Support"! "Tests"! "Tools"! "ToolsTest"! "Traits"! ----End fileIn----! ----QUIT----an Array(11 July 2013 5:57:01 pm) Pharo.image priorSource: 11361477! ----STARTUP----an Array(11 July 2013 6:06:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 July 2013 6:06:25 pm) Pharo-30267.image priorSource: 11372516! ----STARTUP----an Array(12 July 2013 1:23:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/12/2013 13:21' prior: 44916213! commentForCurrentUpdate ^ '11022 MorphicEvent>>readFrom: aStream is unused https://pharo.fogbugz.com/f/cases/11022 11155 Cannot load some package with new class builder https://pharo.fogbugz.com/f/cases/11155 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/12/2013 13:21'! script104 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1518.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.44.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.489.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.360.mcz OpalCompiler-Tests-MarcusDenker.187.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.586.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1172.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/12/2013 13:21'! update30268 "self new update30268" self withUpdateLog: '11022 MorphicEvent>>readFrom: aStream is unused https://pharo.fogbugz.com/f/cases/11022 11155 Cannot load some package with new class builder https://pharo.fogbugz.com/f/cases/11155 '. self loadTogether: self script104 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PointerLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass ^ (superLayout extend: aScope) host: aClass; yourself! ! !ObjectLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass self subclassResponsibility! ! !ObjectLayout methodsFor: 'reshaping' stamp: 'MartinDias 7/11/2013 16:01' prior: 41782846! reshapeTo: aModification ^ self class extending: aModification layout scope: LayoutEmptyScope instance host: self host! ! !SlotVirus class methodsFor: 'installing' stamp: 'MartinDias 7/11/2013 16:31' prior: 41822014! newLayoutFor: aClass |aLayout| aLayout := self basicLayoutFor: aClass. "fill in the instvars without triggering any slots" ^ aLayout instVarNamed: #host put: aClass; instVarNamed: #compactClassIndex put: aClass indexIfCompact; yourself! ! !ByteLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:14'! extending: superLayout scope: aScope host: aClass ^ superLayout extendByte host: aClass; yourself! ! !VariableLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass ^ (superLayout extendVariable: aScope) host: aClass; yourself! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/11/2013 15:39' prior: 41810363! applyFormatChange: classModification result := self applyAndUpdateFormat: classModification. classModification allPropagationsDo: [ :propagation | self applyAndUpdateFormat: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/11/2013 15:39' prior: 43489303! applySlotChange: classModification result := self applyAndUpdateSlots: classModification. classModification allPropagationsDo: [ :propagation | self applyAndUpdateSlots: propagation ]! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 7/11/2013 15:39' prior: 43489584! applySuperclassChange: classModification result := self applyAndUpdateSuperclass: classModification. classModification allPropagationsDo: [ :propagation | self applyAndUpdateSuperclass: propagation ]! ! !WeakLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass ^ (superLayout extendWeak: aScope) host: aClass; yourself! ! !WordLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass self flag: #todo. "Seems that #extendByte already checks for #hasFields, so next code shouldnt be needed, right?" " aScope hasFields ifTrue: [ self error: 'No fields expected!!' ]. " ^ superLayout extendWord host: aClass; yourself! ! !CompiledMethodLayout class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:01'! extending: superLayout scope: aScope host: aClass ^ superLayout extendCompiledMethod host: aClass; yourself! ! !SlotClassBuilderSilentTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 7/11/2013 14:12'! testInstanceVariableNamesMetaclassInterface "Add instance variables using the Metaclass interface" aClass := self make: [ :builder | builder name: self aClassName ]. aClass class instanceVariableNames: 'x'. self assert: aClass class instVarNames equals: #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName ]. anotherClass class instanceVariableNames: 'y'. self assert: anotherClass class instVarNames equals: #(y). self assert: (anotherClass class allInstVarNames includesAll: #(x y)).! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'MartinDias 7/11/2013 15:33'! testReshapeClassPropagatesToDeepHierarchy "Test reshaping a class which is head of a hierarchy of 4 levels" "level 1" aClass := self make: [ :builder | builder name: self aClassName ]. self assert: aClass subclasses isEmpty. aClass layout checkIntegrity. "level 2" anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. "level 3" yetAnotherClass := self make: [ :builder | builder superclass: anotherClass; name: self yetAnotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. "level 4" yetYetAnotherClass := self make: [ :builder | builder superclass: yetAnotherClass; name: self yetYetAnotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses equals: { yetYetAnotherClass }. self assert: yetYetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity. "reshape level 1" aClass := self make: [ :builder | builder name: self aClassName; slots:#(x) ]. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-integration' stamp: 'MartinDias 7/11/2013 15:33'! testReshapeClassPropagatesToDeepHierarchyClassInterface "Test reshaping a class which is head of a hierarchy of 4 levels" "level 1" aClass := Object subclass: self aClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses isEmpty. aClass layout checkIntegrity. "level 2" anotherClass := aClass subclass: self anotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. "level 3" yetAnotherClass := anotherClass subclass: self yetAnotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. "level 4" yetYetAnotherClass := yetAnotherClass subclass: self yetYetAnotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses equals: { yetYetAnotherClass }. self assert: yetYetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity. "reshape level 1" aClass := Object subclass: self aClassName instanceVariableNames: 'x' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass instVarNames equals: #(x). aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity.! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:02' prior: 43640094! aCategory ^ 'SlotTestsTmp'! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:01' prior: 43640222! aClassName ^ #SlotTestsClassA! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:02' prior: 43640339! anotherCategory ^ 'SlotTestsTmp-Another'! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:01' prior: 43640481! anotherClassName ^ #SlotTestsClassB! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 7/3/2013 17:15' prior: 43768013! assertTraitIntegrity self assert: TOne users isHealthy. self assert: TOne classTrait users isHealthy. self assert: TTwo users isHealthy. self assert: TTwo classTrait users isHealthy.! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 4/12/2013 16:08' prior: 43642344! layoutClasses ^ { ByteLayout. WordLayout. PointerLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 4/12/2013 16:09' prior: 43642532! layoutClassesWithSlots ^ { PointerLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-building' stamp: 'MartinDias 7/8/2013 16:05' prior: 43911448! make: anUnaryBlock "I build a class for testing, providing basic default values, but eventually customized by the received unary block." ^PharoClassInstaller make: [:builder| builder superclass: Object; name: self aClassName; layoutClass: PointerLayout; category: self aCategory. anUnaryBlock value: builder ].! ! !SlotClassBuilderTest methodsFor: 'helpers-building' stamp: 'MartinDias 7/8/2013 16:06' prior: 43911880! makeWithLayout: aClassLayout ^self makeWithLayout: aClassLayout andSlots: {}! ! !SlotClassBuilderTest methodsFor: 'helpers-building' stamp: 'MartinDias 7/8/2013 16:06' prior: 43912058! makeWithLayout: aClassLayout andSlots: someSlots " I create a class using the Slot class builder given a class layout and a collection of slots. " ^self make: [:builder| builder layoutClass: aClassLayout; slots: someSlots ].! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 7/11/2013 14:16' prior: 43912397! tearDown "We remove the classes that could have been created during test run" super tearDown. SystemAnnouncer uniqueInstance suspendAllWhile: [ { self aClassName. self anotherClassName. self yetAnotherClassName. self yetYetAnotherClassName } do: [ :each | Smalltalk globals at: each ifPresent: [ :class | class removeFromSystem ]]]. SystemAnnouncer uniqueInstance unsubscribe: self. self cleanUpTrait: TOne; cleanUpTrait: TTwo.! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:01' prior: 43912926! yetAnotherClassName ^ #SlotTestsClassC! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 7/11/2013 15:01'! yetYetAnotherClassName ^ #SlotTestsClassD! ! !LayoutWithSlots methodsFor: 'forking' stamp: 'MartinDias 7/11/2013 16:01' prior: 41774899! forkLayout: aLayout | forkScope | forkScope := slotScope forkScope: aLayout slotScope. ^ aLayout species extending: self scope: forkScope host: self host! ! !ClassModification class methodsFor: 'instance creation' stamp: 'MartinDias 7/11/2013 16:05' prior: 41753706! modify: aClass extend: aSuperclass withLayoutType: layoutClass slots: someSlots traitComposition: aTraitComposition ^ self new target: aClass; superclass: aSuperclass; traitComposition: aTraitComposition; layoutClass: layoutClass slots: someSlots; yourself! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 7/11/2013 16:30'! layoutClass: layoutClass slots: slotArray | parentLayout newScope | parentLayout := self superLayout. newScope := parentLayout slotScope extend: slotArray. self layout: (layoutClass extending: parentLayout scope: newScope host: self target)! ! !AbstractClassModification methodsFor: 'accessing' stamp: 'MartinDias 7/11/2013 15:39'! allPropagationsDo: aBlock propagations do: [ :aPropagation | aBlock value: aPropagation. aPropagation allPropagationsDo: aBlock ]! ! !AbstractClassModification methodsFor: 'private' stamp: 'MartinDias 7/11/2013 15:30' prior: 43913073! propagate target subclassesDo: [ :subclass | propagations add: (ClassModificationPropagation propagate: self to: subclass) ]. "recursively propagate this change down" propagations do: [ :propagation | propagation propagate ] ! ! !ClassDescription methodsFor: '*Slot' stamp: 'MartinDias 7/11/2013 16:01' prior: 41825411! superclass: aSuperclass withLayoutType: layoutType slots: slotArray | superLayout newScope newLayout | superLayout := aSuperclass ifNil: [ EmptyLayout instance ] ifNotNil: [ aSuperclass layout ]. newScope := superLayout slotScope extend: slotArray. newLayout := layoutType extending: superLayout scope: newScope host: self. newLayout checkSanity. self superclass: aSuperclass layout: newLayout! ! KeyboardEvent removeSelector: #type:readFrom:! TraitDescription removeSelector: #composeWithLayout:! TraitComposition removeSelector: #composeWithLayout:! AbstractClassModification removeSelector: #propagationsDo:! MorphicUnknownEvent removeSelector: #type:readFrom:! MouseButtonEvent removeSelector: #type:readFrom:! ClassModification removeSelector: #parentLayout! ClassModification removeSelector: #layoutType:slots:! ClassModification removeSelector: #formatChange! MouseEvent removeSelector: #type:readFrom:! MouseMoveEvent removeSelector: #type:readFrom:! MorphicEvent removeSelector: #type:readFrom:! MorphicEvent class removeSelector: #type:readFrom:! MorphicEvent class removeSelector: #readFrom:! WordLayout class removeSelector: #buildFrom:scope:host:! CompiledMethodLayout class removeSelector: #buildFrom:scope:host:! WeakLayout class removeSelector: #buildFrom:scope:host:! VariableLayout class removeSelector: #buildFrom:scope:host:! ByteLayout class removeSelector: #buildFrom:scope:host:! PointerLayout class removeSelector: #buildFrom:scope:host:! TraitTransformation removeSelector: #composeWithLayout:! ObjectLayout class removeSelector: #buildFrom:scope:host:! "Morphic-Base"! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----an Array(12 July 2013 1:23:35 pm) Pharo.image priorSource: 11372715! ----STARTUP----an Array(12 July 2013 1:33:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 July 2013 1:33:24 pm) Pharo-30268.image priorSource: 11397759! ----STARTUP----an Array(12 July 2013 2:55:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/12/2013 14:49' prior: 44927447! commentForCurrentUpdate ^ '11154 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11154 This update includes: 11035 VMMaker compiling error 10942 OCASTClosureAnalyzer should be referenced just in OCASTSemanticAnalyzer 10964 Temp vars shown multiple times in debugger context inspector 11122 Temp mapping not working sometimes 11134 Undeclared class not shown in Transcript 11137 add IRBuilder buildMethod: 11133 AdditionalMethodState only when needed We recompile the whole image in the postscript, mostly for 11133.'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/12/2013 14:49'! script105 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.13.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1518.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.88.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-EstebanLorenzano.240.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.44.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-EstebanLorenzano.118.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-EstebanLorenzano.489.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.372.mcz OpalCompiler-Tests-MarcusDenker.190.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-EstebanLorenzano.854.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.29.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.113.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.130.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.586.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1172.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/12/2013 14:50'! update30269 "self new update30269" self withUpdateLog: '11154 Update Opal to latest version https://pharo.fogbugz.com/f/cases/11154 This update includes: 11035 VMMaker compiling error 10942 OCASTClosureAnalyzer should be referenced just in OCASTSemanticAnalyzer 10964 Temp vars shown multiple times in debugger context inspector 11122 Temp mapping not working sometimes 11134 Undeclared class not shown in Transcript 11137 add IRBuilder buildMethod: 11133 AdditionalMethodState only when needed We recompile the whole image in the postscript, mostly for 11133.'. self loadTogether: self script105 merge: false. OpalCompiler recompileAll. . self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer methodsFor: 'api' stamp: 'MarcusDenker 7/10/2013 15:55'! analyze: aNode self visitNode: aNode. OCASTClosureAnalyzer new visitNode: aNode! ! !IRBuilder class methodsFor: 'builder api' stamp: 'MarcusDenker 7/9/2013 16:09'! buildIR: aBlock ^(aBlock value: self new) ir.! ! !IRBuilder class methodsFor: 'builder api' stamp: 'MarcusDenker 7/9/2013 16:07'! buildMethod: aBlock ^(self buildIR: aBlock) compiledMethod! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'MarcusDenker 7/5/2013 17:04' prior: 34808886! addPragma: aPragma properties ifNil: [ properties := AdditionalMethodState new ]. properties := properties copyWith: aPragma. ! ! !IRBytecodeGenerator methodsFor: 'accessing' stamp: 'MarcusDenker 7/5/2013 17:01' prior: 34818854! properties ^ properties! ! !OCCaseOfTest methodsFor: 'helper' stamp: 'ClementBera 7/10/2013 15:08'! compile: source ^OpalCompiler new class: self class; source: source; compile! ! !OCCaseOfTest methodsFor: 'tests' stamp: 'ClementBera 7/10/2013 15:02'! testCaseOfEffect | temp | #case1 caseOf: { [#case1]->[ temp := 1 ]. [#case2]->[ temp := 2 ] }. self assert: temp equals: 1. #case2 caseOf: { [#case1]->[ temp := 1 ]. [#case2]->[ temp := 2 ] }. self assert: temp equals: 2. self should: [ #case3 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] } ] raise: Error! ! !OCCaseOfTest methodsFor: 'tests' stamp: 'ClementBera 7/10/2013 15:01'! testCaseOfOtherwiseEffect | temp | #case1 caseOf: { [#case1]->[ temp := 1 ]. [#case2]->[ temp := 2 ] } otherwise: [ temp := 3 ]. self assert: temp equals: 1. #case2 caseOf: { [#case1]->[ temp := 1 ]. [#case2]->[ temp := 2 ] } otherwise: [ temp := 3 ]. self assert: temp equals: 2. #case3 caseOf: { [#case1]->[ temp := 1 ]. [#case2]->[ temp := 2 ] } otherwise: [ temp := 3 ]. self assert: temp equals: 3 ! ! !OCCaseOfTest methodsFor: 'tests' stamp: 'ClementBera 7/10/2013 15:00'! testCaseOfOtherwiseValue | temp | temp := #case1 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] } otherwise: [ 3 ]. self assert: temp equals: 1. temp := #case2 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] } otherwise: [ 3 ]. self assert: temp equals: 2. temp := #case3 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] } otherwise: [ 3 ]. self assert: temp equals: 3 ! ! !OCCaseOfTest methodsFor: 'tests' stamp: 'ClementBera 7/10/2013 15:02'! testCaseOfValue | temp | temp := #case1 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] }. self assert: temp equals: 1. temp := #case2 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] }. self assert: temp equals: 2. self should: [ temp := #case3 caseOf: { [#case1]->[ 1 ]. [#case2]->[ 2 ] } ] raise: Error ! ! !OCCaseOfTest methodsFor: 'tests' stamp: 'ClementBera 7/10/2013 15:09'! testCompilationError self should: [ self compile: 'methodPattern 1 caseOf: { }' ] raise: SyntaxErrorNotification. self should: [ self compile: 'methodPattern 1 caseOf: { } otherwise: [ 42 ]' ] raise: SyntaxErrorNotification.! ! !OCTempVariable methodsFor: 'debugging' stamp: 'ClementBera 7/9/2013 17:32' prior: 34926534! readFromContext: aContext scope: contextScope "Usually the loop is useless, the first case with i = offset returns the correct result. However, the loop is required for specific case as Debugger restart feature." | offset contextForRead | offset := contextScope outerOffsetTo: scope. offset to: 0 by: -1 do: [ :i | contextForRead := aContext. i timesRepeat: [contextForRead := contextForRead outerContext ]. contextForRead ifNotNil: [ :ctx | ^ ctx tempAt: self indexFromIR ] ]. self error: 'temporary variable not found' ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 15:04'! emitAllButLastCases: cases | assocMessageNode | 1 to: cases size - 1 do: [:i | methodBuilder pushDup. assocMessageNode := cases at: i. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. ]! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 15:04' prior: 35965680! emitCaseOf: aMessageNode | cases assocMessageNode | cases := aMessageNode arguments first statements. cases ifEmpty: [ self backendError: 'At least one case required' forNode: aMessageNode ]. valueTranslator visitNode: aMessageNode receiver. self emitAllButLastCases: cases. "last case without otherwise" methodBuilder pushDup. assocMessageNode := cases last. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. methodBuilder popTop. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. methodBuilder send: #caseError. aMessageNode lastIsReturn ifTrue: [ (aMessageNode owningScope) isBlockScope ifTrue: [methodBuilder blockReturnTop] ifFalse: [methodBuilder returnTop]] ifFalse: [self isEffectTranslator ifTrue: [methodBuilder popTop]]. cases size timesRepeat: [methodBuilder jumpAheadTarget: #end].! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 15:04' prior: 34756943! emitCaseOfOtherwise: aMessageNode | cases assocMessageNode | cases := aMessageNode arguments first statements. cases ifEmpty: [ self backendError: 'At least one case required' forNode: aMessageNode ]. valueTranslator visitNode: aMessageNode receiver. self emitAllButLastCases: cases. "last case with otherwise" assocMessageNode := cases last. valueTranslator visitInlinedBlockNode: assocMessageNode receiver. methodBuilder send: #=. methodBuilder jumpAheadTo: #next if: false. self visitInlinedBlockNode: assocMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #next. self visitInlinedBlockNode: aMessageNode arguments last. cases size timesRepeat: [methodBuilder jumpAheadTarget: #end].! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:32'! emitIf: aMessageNode boolean: aBoolean valueTranslator visitNode: aMessageNode receiver. methodBuilder jumpAheadTo: #else if: aBoolean. self visitInlinedBlockNode: aMessageNode arguments first. methodBuilder jumpAheadTo: #end. methodBuilder jumpAheadTarget: #else. self visitInlinedBlockNode: aMessageNode arguments last. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:13'! emitIfFalse: aMessageNode self shouldBeSentToValueOrEffectTranslator! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:33' prior: 40076803! emitIfFalseIfTrue: aMessageNode self emitIf: aMessageNode boolean: true! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:13'! emitIfTrue: aMessageNode self shouldBeSentToValueOrEffectTranslator! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:33' prior: 40078690! emitIfTrueIfFalse: aMessageNode self emitIf: aMessageNode boolean: false! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:08' prior: 43811694! emitToByDo: aMessageNode | step | step := aMessageNode arguments second. step isLiteral ifFalse: [self error: 'should not have been inlined']. step := step value. self emitToDo: aMessageNode step: step! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:08' prior: 43813139! emitToDo: aMessageNode self emitToDo: aMessageNode step: 1! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:09'! emitToDo: aMessageNode step: step | limit block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral | limit isSelf | limit isSuper ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: (step > 0 ifTrue: [#<=] ifFalse: [#>=]). methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: step. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:10'! emitWhile: aMessageNode boolean: aBoolean methodBuilder jumpBackTarget: #begin. valueTranslator visitInlinedBlockNode: aMessageNode receiver. methodBuilder jumpAheadTo: #end if: aBoolean. aMessageNode arguments ifNotEmpty: [ effectTranslator visitInlinedBlockNode: aMessageNode arguments first]. methodBuilder jumpBackTo: #begin. methodBuilder jumpAheadTarget: #end.! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:11' prior: 34764831! emitWhileFalse: aMessageNode self emitWhile: aMessageNode boolean: true! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/10/2013 14:11' prior: 34765281! emitWhileTrue: aMessageNode self emitWhile: aMessageNode boolean: false! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'MarcusDenker 7/10/2013 16:20' prior: 43814415! visitArrayNode: anArrayNode | elementNodes | anArrayNode statements size > 32 ifTrue: [^ self visitLargeArrayNode: anArrayNode ]. elementNodes := anArrayNode children. elementNodes do: [:node | valueTranslator visitNode: node]. methodBuilder pushConsArray: elementNodes size.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 7/10/2013 15:55' prior: 39477208! doSemanticAnalysis self compilationContext ifNil: [ self methodClass: nil class ]. self compilationContext semanticAnalyzerClass new compilationContext: self compilationContext; analyze: self! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 7/5/2013 17:03' prior: 36057683! properties ^self propertyAt: #methodProperties ifAbsent: nil! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ClementBera 7/9/2013 18:05' prior: 34907863! allTemps "return all temps defined, even the ones in the outer scope that are not used in the current. This includes the arguments We do not need to care about shadowed temps as temp shadowing is not allowed." | temps | temps := OrderedCollection new. self outerScope allTemps do: [ :var | (self localTempNames includes: var name) ifFalse: [ temps add: var.] ]. temps addAll: self localTemps. ^temps asArray. ! ! !OCAbstractMethodScope methodsFor: 'temp vars' stamp: 'ClementBera 7/9/2013 18:10' prior: 34909598! localTemps "all temps accessed in the context... for tempVectors, it takes all the vars even those not used here" | localVars | localVars := OrderedCollection new. self copiedVars do: [:var | var isStoringTempVector ifTrue: [var tempVectorForTempStoringIt do: [:tempVectorVars | localVars add: tempVectorVars]] ]. self tempVars do: [:var | localVars add: var]. ^localVars asArray! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'MarcusDenker 7/9/2013 13:27' prior: 40084302! defaultAction | varName className selector | className := self methodClass name . selector := self methodNode selector. varName := node name. self methodNode selector ifNotNil: [self crTrace: className, '>>', selector, ' '] ifNil: [self traceCr:'']. self traceCr: '(' , varName , ' is Undeclared) '. ^super defaultAction ifNil: [ Undeclared at: varName asSymbol put: nil. OCUndeclaredVariable new name: varName asSymbol]! ! !IRBuilderTest methodsFor: 'testing - builder' stamp: 'MarcusDenker 7/9/2013 16:10'! testBuildMethod | aCompiledMethod | aCompiledMethod := IRBuilder buildMethod: [ : builder | builder pushLiteral: 3; pushDup; send: #=; returnTop]. self assert: (aCompiledMethod isKindOf: CompiledMethod).! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 7/9/2013 16:08' prior: 35002368! testDup | iRMethod aCompiledMethod | iRMethod := IRBuilder buildIR: [ : builder | builder pushLiteral: 3; pushDup; send: #=; returnTop]. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: (aCompiledMethod valueWithReceiver: nil arguments: #() ). ^iRMethod ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 8/18/2010 18:59' prior: 43834186! testLiteralInteger | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(12 July 2013 2:56:48 pm) Pharo.image priorSource: 11397958! ----STARTUP----an Array(12 July 2013 3:06:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 July 2013 3:06:31 pm) Pharo-30269.image priorSource: 11423148! ----STARTUP----an Array(13 July 2013 3:19:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/13/2013 15:14' prior: 44952690! commentForCurrentUpdate ^ '11140 #addDeferredUIMessage: is always sent directly to WorldState https://pharo.fogbugz.com/f/cases/11140 11159 NautilusMonticello new returns the NautilusMonticello class https://pharo.fogbugz.com/f/cases/11159 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/13/2013 15:15'! script106 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-EstebanLorenzano.1518.mcz KernelTests-MarcusDenker.527.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.242.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.372.mcz OpalCompiler-Tests-MarcusDenker.190.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.132.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.586.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1173.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/13/2013 15:15'! update30270 "self new update30270" self withUpdateLog: '11140 #addDeferredUIMessage: is always sent directly to WorldState https://pharo.fogbugz.com/f/cases/11140 11159 NautilusMonticello new returns the NautilusMonticello class https://pharo.fogbugz.com/f/cases/11159 '. self loadTogether: self script106 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OverflowRowMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 7/9/2013 12:38' prior: 28881132! extent: aPoint "Refit the base morphs and potential 'more' button'" super extent: aPoint. self fitBaseMorphs. self defer: [self layoutChanged] "since possibly changing actual submorphs during layout processing"! ! !OverflowRowMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 7/9/2013 12:39' prior: 28882512! hideMore "Hide the morphs that don't fit." self moreVisible ifTrue: [ self moreMorph delete. self defer: [self world ifNotNil: [:w | w invalidRect: self moreMorph bounds]]]! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'AlainPlantec 7/9/2013 12:37' prior: 28304354! runTestForAMethod: aMethod notifying: aBoolean priority: aPriority | testMethod testSemaphoreForMethod blockToEvaluate shouldAnnounce | testMethod := aMethod correspondingTestMethod. testSemaphoreForMethod := Semaphore new. shouldAnnounce := aBoolean. testMethod ifNil: [ ^ self ]. blockToEvaluate := [ | vScroll testClass testResult | vScroll := methodWidget vScrollValue. testClass := testMethod methodClass. testResult := [ testClass run: testMethod selector ] on: Halt do: [ :e | aBoolean ifTrue: [ [ self runTestForAMethodWithAnHalt: aMethod ] fork. shouldAnnounce := false. TestAsserter classForTestResult new ] ifFalse: [ TestAsserter classForTestResult new addFailure: (testClass selector: testMethod selector); yourself ]]. testResult updateResultsInHistory. testSemaphoreForMethod signal. (aBoolean and: [testResult failures isEmpty not or: [ testResult errors isEmpty not ]]) ifTrue: [ testClass debug: testMethod selector ]. ClassesIconsCache removeKey: aMethod methodClass ifAbsent: []. UIManager default defer: [ methodWidget vScrollValue: vScroll ]]. aBoolean ifTrue: [ blockToEvaluate forkAt: aPriority. ] ifFalse: [ blockToEvaluate value ]. testSemaphoreForMethod wait. shouldAnnounce ifTrue: [| color | testMethod hasPassedTest ifTrue: [ color := Color green ]. testMethod hasFailedTest ifTrue: [ color := Color yellow ]. testMethod hasErrorTest ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: 'Method: ',testMethod methodClass asString, '>>#',testMethod selector asString color: color ]. aBoolean ifFalse: [ testSemaphore signal ]! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'AlainPlantec 7/9/2013 12:38' prior: 28306234! runTestForAMethodWithAnHalt: aMethod | testMethod color vScroll testClass testResult | testMethod := aMethod correspondingTestMethod. testMethod ifNil: [ ^ self ]. vScroll := methodWidget vScrollValue. testClass := testMethod methodClass. testResult := testClass run: testMethod selector. testResult updateResultsInHistory. (testResult failures isEmpty not or: [ testResult errors isEmpty not ]) ifTrue: [ testClass debug: testMethod selector ]. ClassesIconsCache removeKey: aMethod methodClass ifAbsent: []. UIManager default defer: [ methodWidget vScrollValue: vScroll ]. aMethod hasPassedTest ifTrue: [ color := Color green ]. aMethod hasFailedTest ifTrue: [ color := Color yellow ]. aMethod hasErrorTest ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: 'Method: ',testMethod methodClass asString, '>>#',testMethod selector asString color: color! ! !ProcessBrowser class methodsFor: 'cpu utilization' stamp: 'AlainPlantec 7/9/2013 12:40' prior: 29999608! tallyCPUUsageFor: seconds every: msec "Compute CPU usage using a msec millisecond sample for the given number of seconds, then dump the usage statistics on the Transcript. The UI is free to continue, meanwhile" "ProcessBrowser tallyCPUUsageFor: 10 every: 100" | promise | promise := Processor tallyCPUUsageFor: seconds every: msec. [ | tally | tally := promise value. UIManager default defer: [ self dumpTallyOnTranscript: tally ]. ] fork.! ! !ProcessBrowser methodsFor: 'updating' stamp: 'AlainPlantec 7/9/2013 12:40' prior: 29993803! setUpdateCallbackAfter: seconds deferredMessageRecipient ifNotNil: [ | d | d := Delay forSeconds: seconds. [ d wait. d := nil. deferredMessageRecipient defer: [self updateProcessList] ] fork ]! ! !ProcessBrowser methodsFor: 'updating' stamp: 'AlainPlantec 7/9/2013 12:40' prior: 29994107! startAutoUpdate self isAutoUpdatingPaused ifTrue: [ ^autoUpdateProcess resume ]. self isAutoUpdating ifFalse: [| delay | delay := Delay forSeconds: 2. autoUpdateProcess := [[self hasView] whileTrue: [delay wait. deferredMessageRecipient ifNotNil: [ deferredMessageRecipient defer: [self updateProcessList]] ifNil: [ self updateProcessList ]]. autoUpdateProcess := nil] fork]. self updateProcessList! ! !MorphicUIManager methodsFor: 'ui process' stamp: 'AlainPlantec 7/9/2013 12:49' prior: 27165075! defer: aBlock " Evaluate the given Block in the UI thread as soon as there is nothing scheduled." WorldState defer: aBlock! ! !WorldState class methodsFor: 'deferred message' stamp: 'RAA 7/15/2000 12:58' prior: 54987169! addDeferredUIMessage: valuableObject self deferredUIMessages nextPut: valuableObject. ! ! !WorldState class methodsFor: 'testing os' stamp: 'RAA 8/14/2000 16:40' prior: 54986912! canSurrenderToOS: aBoolean CanSurrenderToOS := aBoolean! ! !WorldState class methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 12:48'! defer: valuableObject self addDeferredUIMessage: valuableObject. ! ! !WorldState class methodsFor: 'deferred message' stamp: 'IgorStasenko 6/22/2012 01:42' prior: 54987349! deferredUIMessages ^DeferredUIMessages ifNil: [DeferredUIMessages := WaitfreeQueue new]. ! ! !WorldState class methodsFor: 'accessing' stamp: 'RAA 7/23/2000 17:28' prior: 54987056! lastCycleTime ^LastCycleTime! ! !WorldState methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 12:49'! defer: aValuable self class defer: aValuable! ! !ListDialogWindow methodsFor: 'morphic protocol' stamp: 'AlainPlantec 7/9/2013 11:19' prior: 24526078! updateList "update the displayed list in a separate thread to avoid UI blocking" "if there is already a background thread running for the new list discard it" listCreationProcess ifNotNil: [ listCreationProcess terminate]. "no pattern given => empty list" pattern ifNil: [ ^ list :=#() ]. "fork off a possibly costly list calculation" listCreationProcess := [ list := listBlock value: pattern. "make sure the ui is updated in a synchronized manner" self defer: [self listChanged]] fork.! ! !CPUWatcher methodsFor: 'porcine capture' stamp: 'AlainPlantec 7/9/2013 11:09' prior: 18649309! openWindowForSuspendedProcess: aProcess UIManager default defer: [ self openMorphicWindowForSuspendedProcess: aProcess ] ! ! !WorldMorph methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 13:40'! defer: aValuable worldState defer: aValuable! ! !ProportionalSplitterMorph methodsFor: '*Polymorph-Widgets' stamp: 'AlainPlantec 7/9/2013 12:41' prior: 30045221! noteNewOwner: o "Update the fill style." super noteNewOwner: o. self defer: [self adoptPaneColor: self paneColor]! ! !ListSelectionModel methodsFor: 'update' stamp: 'AlainPlantec 7/9/2013 11:19' prior: 24534802! updateText "update the displayed list in a separate thread to avoid UI blocking" "if there is already a background thread running for the new list discard it" textRefreshingProcess ifNotNil: [ textRefreshingProcess terminate]. "fork off a possibly costly list calculation" textRefreshingProcess := [ | indexes items | indexes := listModel selectedIndexes sort collect: [:i | i printString ]. indexes := (indexes joinUsing: '; '). items := listModel selectedItems collect: [:i | i printString ]. items := (items sort joinUsing: '; '). UIManager default defer: [ textModel1 text: indexes. textModel2 text: items]] fork.! ! !PharoCommandLineHandler class methodsFor: 'instance creation' stamp: 'AlainPlantec 7/9/2013 12:39' prior: 39093639! activateWith: aCommandLine Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. "Make sure that the PharoCommandLineHandler starts at the top of the stack in the main UI thread." UIManager default defer: [ super activateWith: aCommandLine ]! ! !TaskbarMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 7/9/2013 12:41' prior: 52283716! updateTaskButtons "Make buttons for the ordered tasks." | oldButtons| oldButtons := self submorphs copy. self removeAllMorphs. self defer: [oldButtons do: [:b | b model: nil]]. "release dependency after event handling" self orderedTasks do: [:t | | button | button := t taskbarButtonFor: self. button ifNotNil: [self addMorphBack: button]]! ! !TaskbarMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 7/9/2013 12:41' prior: 52284181! updateTasks "Check for changes in the world's submorphs. Note that if the task attributes change then a task will be considered dead along with a new replacement." |wm deadTasks newTasks| wm := self worldMorphs. self tasks: ((wm collect: [:m | m taskbarTask]) select: [:m | m notNil]) asOrderedCollection. deadTasks := self orderedTasks difference: self tasks. newTasks := self tasks difference: self orderedTasks. (newTasks isEmpty and: [deadTasks isEmpty]) ifTrue: [^self]. "no changes" newTasks copy do: [:t | (self orderedTasks detect: [:ot | ot morph = t morph] ifNone: []) ifNotNil: [:ot | self orderedTasks replaceAll: ot with: t. deadTasks remove: ot. newTasks remove: t]]. "replace in order any changed tasks." self orderedTasks removeAll: deadTasks; addAll: newTasks reversed. self updateTaskButtons. self defer: [self layoutChanged] "may have a different number of rows"! ! !NECController methodsFor: 'private' stamp: 'AlainPlantec 7/9/2013 12:38' prior: 27797368! resetCompletionDelay "Open the popup after 100ms and only after certain characters" self stopCompletionDelay. self isMenuOpen ifTrue: [ ^ self ]. editor atCompletionPosition ifFalse: [ ^ self ]. completionDelay := [ (Delay forMilliseconds: NECPreferences popupAutomaticDelay) wait. UIManager default defer: [ editor atCompletionPosition ifTrue: [ self openMenu ]] ] fork. ! ! !PasteUpMorph methodsFor: 'world state' stamp: 'AlainPlantec 7/9/2013 12:39' prior: 38359805! restoreMorphicDisplay DisplayScreen startUp. ThumbnailMorph recursionReset. self extent: Display extent; viewBox: Display boundingBox; handsDo: [:h | h visible: true; showTemporaryCursor: nil]; resizeBackgroundMorph; restoreMainDockingBarDisplay; fullRepaintNeeded. self defer: [Cursor normal show]. self layoutChanged. ! ! !MessageBrowser methodsFor: 'announcements' stamp: 'AlainPlantec 7/9/2013 12:36' prior: 25570133! methodAdded: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement method. (refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. UIManager default defer: [ | sel text boolean | boolean := textModel hasUnacceptedEdits. boolean ifTrue: [ text := textModel pendingText ]. sel := listModel selectedItem. self messages: (listModel listItems add: item; yourself). listModel setSelectedItem: sel. boolean ifTrue: [ textModel pendingText: text ] ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'AlainPlantec 7/9/2013 12:37' prior: 25570811! methodModified: anAnnouncement | item oldItem sel index | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement newMethod. oldItem := anAnnouncement oldMethod. sel := listModel selectedItem. sel ifNil: [ ^ self ]. (sel notNil and: [(sel methodClass = oldItem methodClass and: [ sel selector = oldItem selector ])]) ifFalse: [ ^ self ]. (refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. index := listModel selectedIndex . UIManager default defer: [ | text list edits | edits := textModel hasUnacceptedEdits. edits ifTrue: [ text := textModel pendingText ]. list := listModel listItems remove: sel ifAbsent: []; add: item asRingDefinition; "to ensure it's still as RGMethod" yourself. self messages: list. listModel setSelectedIndex: index. edits ifTrue: [ textModel pendingText: text. textModel hasEditingConflicts: true ]. ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'AlainPlantec 7/9/2013 12:37' prior: 36576453! methodRemoved: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement methodRemoved. "Item is a compiled methed, where the list is populated with RGMethod" "(refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]." self okToChange ifFalse: [ ^ self ]. UIManager default defer: [ | sel itm | sel := listModel selectedIndex. itm := listModel selectedItem. (itm notNil and: [ itm methodClass = item methodClass and: [ itm selector = item selector ] ]) ifTrue: [ textModel hasUnacceptedEdits: false ]. self messages: (listModel listItems remove: item asRingDefinition ifAbsent: [ nil ]; yourself). listModel setSelectedIndex: sel ]! ! !SelectionMorph methodsFor: 'dropping/grabbing' stamp: 'AlainPlantec 7/9/2013 12:41' prior: 32911914! justDroppedInto: newOwner event: evt selectedItems isEmpty ifTrue: ["Hand just clicked down to draw out a new selection" ^ self extendByHand: evt hand]. dupLoc ifNotNil: [dupDelta := self position - dupLoc]. selectedItems reverseDo: [:m | self defer: [m referencePosition: (newOwner localPointToGlobal: m referencePosition). newOwner handleDropMorph: (DropEvent new setPosition: evt cursorPoint contents: m hand: evt hand)]]. evt wasHandled: true! ! !AnnouncementSpy methodsFor: 'private' stamp: 'AlainPlantec 7/9/2013 11:07' prior: 17562808! changed: aSymbol UIManager default defer: [ super changed: aSymbol ]! ! !CodeAnnotationMorph methodsFor: 'updating' stamp: 'AlainPlantec 7/9/2013 12:35' prior: 19408287! syncContents | ch | process ifNotNil: [ process terminate ]. process := nil. ch := codeHolder ifNil: [ ^ self contents: '' ]. process := [ | ann | ann := ch annotation ifNil: ['']. self defer: [ self contents: ann ]. ] newProcess. process priority: Processor userBackgroundPriority. process resume. ! ! !SingleRuleCriticBrowser methodsFor: 'thread' stamp: 'AlainPlantec 7/9/2013 12:41' prior: 33888527! updateList self criticsOf: rule. thread ifNotNil: [ thread terminate ]. thread := [ UIManager default defer: [ criticsModel updateList ]] fork.! ! !NautilusMonticello class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 7/12/2013 17:34' prior: 28187632! new ^ self default! ! !Morph methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 11:26'! defer: aValuable self owner ifNotNil: [:o | o defer: aValuable] ifNil: [ UIManager default defer: aValuable ]! ! !CriticBrowser methodsFor: 'thread' stamp: 'AlainPlantec 7/9/2013 11:11' prior: 34159554! updateTree thread ifNotNil: [ thread terminate ]. thread := [ UIManager default defer: [ criticModel updateList. rulesModel updateTree ]] fork.! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'AlainPlantec 7/9/2013 12:44' prior: 34691035! basicSaveVersionIn: aRepository | newVersion waitForVersion | waitForVersion := Semaphore new. UIManager default defer: [ newVersion := workingCopy newVersion. waitForVersion signal ]. Processor activeProcess == UIManager default uiProcess ifFalse: [ waitForVersion wait ]. newVersion ifNil: [ ^ self ]. Cursor wait showWhile: [[ self storeVersion: newVersion in: aRepository; storeDependencies: newVersion in: aRepository.] ensure: [ (MCVersionInspector new version: newVersion) show ]]! ! !ExpanderMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 7/9/2013 11:22' prior: 21363764! fixLayout "Fix the owner layout, nasty!!" self owner ifNil: [ ^ self ]. self owner allMorphsDo: [ :m | (m respondsTo: #resetExtent) ifTrue: [ self defer: (MessageSend receiver: m selector: #resetExtent). self defer: (MessageSend receiver: m selector: #setScrollDeltas) ]. (m isKindOf: self class) ifTrue: [ self defer: (MessageSend receiver: m selector: #adoptPaneColor) ] ]. self defer: (MessageSend receiver: self owner selector: #changed)! ! "Announcements-View"! "Manifest-CriticBrowser"! "MonticelloGUI"! "Morphic-Base"! "NECompletion"! "Nautilus"! "Polymorph-Widgets"! "Spec-Examples"! "Spec-Tools"! "System-CommandLine"! "Tools"! ----End fileIn----! ----QUIT----an Array(13 July 2013 3:19:42 pm) Pharo.image priorSource: 11423347! ----STARTUP----an Array(13 July 2013 3:29:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 July 2013 3:29:06 pm) Pharo-30270.image priorSource: 11451192! ----STARTUP----an Array(15 July 2013 9:03:27 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/15/2013 09:00' prior: 44978079! commentForCurrentUpdate ^ '11160 add #classBuilder to nil https://pharo.fogbugz.com/f/cases/11160 11153 Introduce Exception >> #signalIn: https://pharo.fogbugz.com/f/cases/11153 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/15/2013 09:01'! script107 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.82.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1520.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.242.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.372.mcz OpalCompiler-Tests-MarcusDenker.190.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.132.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.586.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1173.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/15/2013 09:01'! update30271 "self new update30271" self withUpdateLog: '11160 add #classBuilder to nil https://pharo.fogbugz.com/f/cases/11160 11153 Introduce Exception >> #signalIn: https://pharo.fogbugz.com/f/cases/11153 '. self loadTogether: self script107 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Object methodsFor: '*Kernel-Exceptions-debugging' stamp: 'CamilloBruni 7/12/2013 13:19' prior: 35888452! halt "This is the typical message to use for inserting breakpoints during debugging." Halt signalIn: thisContext sender! ! !Exception class methodsFor: 'exceptioninstantiator' stamp: 'CamilloBruni 7/12/2013 13:16' prior: 21336364! signal: message "Signal the occurrence of an exceptional condition with a specified textual description." ^ self new signal: message! ! !Exception class methodsFor: 'exceptioninstantiator' stamp: 'CamilloBruni 7/12/2013 13:17'! signal: message in: context "Signal the occurrence of an exceptional condition with a specified textual description in the given context." ^ self new messageText: message; signalIn: context! ! !Exception class methodsFor: 'exceptioninstantiator' stamp: 'CamilloBruni 7/12/2013 13:16'! signalIn: context "Signal the occurrence of an exceptional condition in the given context." ^ self new signalIn: context! ! !Exception methodsFor: 'handling' stamp: 'CamilloBruni 7/12/2013 13:26' prior: 21331961! resignalAs: replacementException "Signal an alternative exception in place of the receiver." ^ replacementException signalIn: signalContext! ! !Exception methodsFor: 'signaling' stamp: 'CamilloBruni 7/12/2013 13:15'! signalIn: context "Ask ContextHandlers in the sender chain starting at the given context to handle this signal. The default is to execute and return my defaultAction." signalContext := context. signaler ifNil: [ signaler := self receiver ]. ^ signalContext nextHandlerContext handleSignal: self! ! !UndefinedObject methodsFor: 'class hierarchy' stamp: 'MarcusDenker 7/15/2013 08:57'! classBuilder "Answer the object responsible of creating classes in the system." ^ OldClassBuilderAdapter new! ! !ExceptionTester methodsFor: 'signaledexception tests' stamp: 'CamilloBruni 7/12/2013 13:21' prior: 37160871! simpleIsNestedTest "uses resignalAs:" [ self doSomething. MyTestError signal. self doSomethingElse ] on: MyTestError do: [ :exception | "expecting to detect handler in #runTest:" exception isNested ifTrue: [ self doYetAnotherThing. exception resignalAs: MyTestNotification new ]]! ! "Kernel"! "KernelTests"! ----End fileIn----! ----QUIT----an Array(15 July 2013 9:03:36 am) Pharo.image priorSource: 11451391! ----STARTUP----an Array(15 July 2013 9:12:56 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 July 2013 9:12:56 am) Pharo-30271.image priorSource: 11464445! ----STARTUP----an Array(16 July 2013 8:58:19 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/16/2013 08:56' prior: 45006123! commentForCurrentUpdate ^ '11164 ASTInterpreterTest >> #testSignalHalt failing https://pharo.fogbugz.com/f/cases/11164 11086 Failing MCSnapshotBrowserTest >> #testClassSelected, #testMethodSelected and #testProtocolSelected https://pharo.fogbugz.com/f/cases/11086'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/16/2013 08:56'! script108 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1520.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.372.mcz OpalCompiler-Tests-MarcusDenker.190.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.207.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.216.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.132.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1173.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/16/2013 08:56'! update30272 "self new update30272" self withUpdateLog: '11164 ASTInterpreterTest >> #testSignalHalt failing https://pharo.fogbugz.com/f/cases/11164 11086 Failing MCSnapshotBrowserTest >> #testClassSelected, #testMethodSelected and #testProtocolSelected https://pharo.fogbugz.com/f/cases/11086'. self loadTogether: self script108 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCSnapshotBrowser methodsFor: 'listing' stamp: 'CamilloBruni 7/15/2013 22:26' prior: 25002960! visibleCategories ^ ((self packageOrganizations gather: [ :ea | ea categories ]), (self packageClasses collect: [ :ea | ea category ]), (self hasExtensions ifTrue: [{ self extensionsCategory }] ifFalse: [#()])) asSet asSortedCollection! ! !MCSnapshotBrowser methodsFor: 'listing' stamp: 'CamilloBruni 7/16/2013 06:55' prior: 25003755! visibleProtocols | methods protocols | self switchIsComment ifTrue: [^ Array new]. methods := self methodsForSelectedClass. protocols := (methods collect: [:ea | ea category]) asSet asSortedCollection. protocols add: AllProtocol defaultName. ^ protocols ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'CamilloBruni 7/15/2013 21:49' prior: 35445025! testSignalHalt [ self interpret: '[1 halt] value' ] on: InterpretationError do: [ :error | self assert: error cause class equals: Halt. ^ self ]. self fail.! ! !MCSnapshotBrowserTest methodsFor: 'asserting' stamp: 'CamilloBruni 7/16/2013 06:52' prior: 25013839! assertAListMatches: strings | lists | lists := self listMorphs collect: #getList. lists detect: [ :list| (list size = strings size) and: [list includesAllOf: strings]] ifNone: [ self fail: 'Could not find all "', strings asArray asString, '" ', 'in any of "', (lists collect: #asArray) asArray asString, '"' ].! ! !MCSnapshotBrowserTest methodsFor: 'private' stamp: 'CamilloBruni 7/15/2013 22:17' prior: 42012016! protocolsForClass: aClass ^ aClass organization categories ! ! !MCSnapshotBrowserTest methodsFor: 'testing' stamp: 'CamilloBruni 7/15/2013 22:29' prior: 25019753! testMethodIsCleared self clickOnListItem: self mockCategoryName. self clickOnListItem: 'MCMockClassA'. self clickOnListItem: 'boolean'. self clickOnListItem: 'falsehood'. self clickOnListItem: AllProtocol defaultName. self denyAListHasSelection: 'falsehood'.! ! "AST-Interpreter-Test"! "MonticelloGUI"! "Tests"! ----End fileIn----! ----QUIT----an Array(16 July 2013 8:58:27 am) Pharo.image priorSource: 11464644! ----STARTUP----an Array(16 July 2013 9:07:46 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 July 2013 9:07:46 am) Pharo-30272.image priorSource: 11477625! ----STARTUP----an Array(16 July 2013 11:41:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/16/2013 11:39' prior: 45019376! commentForCurrentUpdate ^ '11167 Changeset>>#current needs to check for nil https://pharo.fogbugz.com/f/cases/11167 11165 MethodMapTests: two tests fail due to code change in #halt https://pharo.fogbugz.com/f/cases/11165 11166 Enable drag and drop on AlainTreeModel https://pharo.fogbugz.com/f/cases/11166'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/16/2013 11:39'! script109 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.21.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.266.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-StephaneDucasse.126.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.766.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1520.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.828.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.372.mcz OpalCompiler-Tests-MarcusDenker.192.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.219.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.132.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.22.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.871.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1173.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.103.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/16/2013 11:39'! update30273 "self new update30273" self withUpdateLog: '11167 Changeset>>#current needs to check for nil https://pharo.fogbugz.com/f/cases/11167 11165 MethodMapTests: two tests fail due to code change in #halt https://pharo.fogbugz.com/f/cases/11165 11166 Enable drag and drop on AlainTreeModel https://pharo.fogbugz.com/f/cases/11166'. self loadTogether: self script109 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07'! acceptDroppingMorph: draggedMorph event: event inMorph: source ^ self model acceptDroppingMorph: draggedMorph event: event inMorph: source! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07'! dragPassengerFor: item inMorph: dragSource ^ self model dragPassengerFor: item inMorph: dragSource! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07'! dragPassengersFor: item inMorph: dragSource ^ self model dragPassengersFor: item inMorph: dragSource! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07'! transferFor: passenger from: source ^ self model transferFor: passenger from: source! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07'! wantsDroppedMorph: draggedMorph event: anEvent inMorph: source ^ self model wantsDroppedMorph: draggedMorph event: anEvent inMorph: source! ! !AlainTreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 7/16/2013 11:29'! example | m | m := self new. m openWithSpec. m roots: #(a b c d). m childrenBlock: [:it | it = #c ifTrue: [ {1. 2. 3} ] ifFalse: [ {} ]]. m displayBlock: [:item | item isSymbol ifTrue: [ item asUppercase , ' symbol' ] ifFalse: [ item printString ]]. m dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]! ! !AlainTreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/16/2013 11:18'! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w scrollerSubMorphFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !AlainTreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2013 11:13' prior: 41475303! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item copy ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !ChangeSet class methodsFor: 'current changeset' stamp: 'MarcusDenker 7/16/2013 11:32' prior: 18844431! current "return the current changeset assure first that we have a named changeset." (current isNil or: [current isMoribund]) ifTrue: [self newChanges: (self assuredChangeSetNamed: 'Unnamed') withOld: current] . ^ current! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 7/16/2013 10:42' prior: 36051202! testMethodSourceNodeAtPC self assert: (((Object>>#halt) sourceNodeForPC: 28) isKindOf: RBMessageNode). ! ! !MethodMapTests methodsFor: 'testing - source mapping' stamp: 'MarcusDenker 7/16/2013 10:41' prior: 35042560! testSimpleSourceMapping | method range highlight | method := Object>>('ha', 'lt') asSymbol. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 28. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'sender'. ! ! "OpalCompiler-Tests"! "Spec-Widgets"! "System-Changes"! ----End fileIn----! ----QUIT----an Array(16 July 2013 11:41:24 am) Pharo.image priorSource: 11477824! ----STARTUP----an Array(16 July 2013 11:51:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 July 2013 11:51:12 am) Pharo-30273.image priorSource: 11493389! ----STARTUP----an Array(16 July 2013 1:25:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/16/2013 13:21' prior: 45032557! commentForCurrentUpdate ^ '11158 Remove spread occurrences of ImageSegment in comments https://pharo.fogbugz.com/f/cases/11158 11141 OCUndeclaredVariableWarning is not handled properly in the STComandLineHandler https://pharo.fogbugz.com/f/cases/11141 5468 Extract CRC from Zip implementation https://pharo.fogbugz.com/f/cases/5468'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/16/2013 13:22'! script110 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.24.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.34.mcz Kernel-MarcusDenker.1521.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.830.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.373.mcz OpalCompiler-Tests-MarcusDenker.192.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.42.mcz Spec-Layout-MarcusDenker.48.mcz Spec-Tests-MarcusDenker.27.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.133.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.873.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1174.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/16/2013 13:22'! update30274 "self new update30274" self withUpdateLog: '11158 Remove spread occurrences of ImageSegment in comments https://pharo.fogbugz.com/f/cases/11158 11141 OCUndeclaredVariableWarning is not handled properly in the STComandLineHandler https://pharo.fogbugz.com/f/cases/11141 5468 Extract CRC from Zip implementation https://pharo.fogbugz.com/f/cases/5468'. self loadTogether: self script110 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ProtoObject commentStamp: '' prior: 42567149! ProtoObject establishes minimal behavior required of any object in Pharo, even objects that should balk at normal object behavior. Generally these are proxy objects designed to read themselves in from the disk, or to perform some wrapper behavior, before responding to a message. ProtoObject has no instance variables, nor should any be added.! !STCommandLineHandler commentStamp: '' prior: 43659192! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !ClassDescription commentStamp: '' prior: 42170308! I add a number of facilities to basic Behaviors: Named instance variables Category organization for methods The notion of a name of this class (implemented as subclass responsibility) The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. I am an abstract class, in particular, my facilities are intended for inheritance by two subclasses, Class and Metaclass.! !ChangeSet commentStamp: '' prior: 42156659! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes. superclasses - Dictionary {#Rectangle -> #Object}. Of all classes in classChanges, and all of their superclasses.! !Checksum commentStamp: '' prior: 0! I represent the abstact superclass of all checksum algorithms.! !Adler32 commentStamp: '' prior: 0! The Adler32 checksum algorithm was developed by Mark Adler for his ZLib algorithm. It is defined in IETF RFC 1950: http://tools.ietf.org/html/rfc1950#page-10. The purpose of this class is mainly grouping as the ZipPlugin already implements Adler32. See also the comment in #update:from:to:in: Note that Adler32 is not a CRC, strictly speaking.! !CRC commentStamp: '' prior: 0! Parameterized implementation of the cyclic redundancy check (CRC) algorithm. INTRODUCTION ================= This implementation is based on the (awesome) paper "A Painless Guide to CRC Error Detection Algorithms" by Ross Williams. You should find a copy of the paper here: http://www.ross.net/crc/. In this paper Ross describes a parameterized implementation that enables the different variations of the CRC algorithm to be used in a consistent way, simply by adjusting the parameters. If you don't have a clue about CRC (like me) then I strongly suggest reading the paper. It will also help you to understand how to make the best use of this implementation. The "CRC RevEng" project on sourceforge implements Williams's "RockSoft" parameterized CRC program (as does this class) and comes with a handy list of parameters for various CRC algorithm: http://reveng.sourceforge.net/crc-catalogue/. For ease of use and better performance, the two defacto standard variations "CRC16" and "CRC32" have been predefined. The lookup tables for these implementations are included on the class side. For all other variations the lookup table will be generated at runtime before the first run. If you want to define your own algorithm you can do so by using the methods in the "accessing-parameters" protocol. Note that there are no default values. Here's a short overview: #width: defines the width of the register (usually 16 or 32) #polynome: defines the polynome to use for polynome division / lookup table creation #registerFill: defines the start content of the working register (usually all ones or all zeros) #reflectInput: if true every byte will be reflected before processing (e.g. 100101 -> 101001) #reflectOutpu: if true the entire register will be reflected before the final XOR stage #finallyXorWith: defines the final XOR for the entire register #lookupTable: the only OPTIONAL parameter. The lookup table will be generated at runtime if none has been supplied #message: the message to calculate the CRC on EXAMPLES ================= The simplest possible snippet uses the class side methods for "CRC16" and "CRC32": CRC crc16FromCollection: 'some message'. --> 55709 CRC crc32FromCollection: 'some message'. --> 191312361 Let's assume, you wanted to use "CRC16 reversed" (neither input nor output reflected). Then you would have to change the parameters like so (the reversed form uses a different polynome and a different start register content): crc := CRC new beCrc16; polynome: 16r1021; registerFill: 16rFFFF; reflectInput: false; reflectOutput: false; message: 'some message'; yourself. crc run. --> 46785 Using a single instance as in the code above will of course be faster than using the class side methods when performing multiple runs. But if you are really concerned about performance (see PERFORMANCE) you should use the "raw" methods (no checks!! If you forget to set parameters there will be errors....): crc := CRC new beCrc16; message: 'some message'; yourself. crc runRefInRefOut. --> 55709 crc := CRC new beCrc16; polynome: 16r1021; registerFill: 16rFFFF; message: 'some message'; yourself. crc runNonRefInNonRefOut. --> 46785 PERFORMANCE ================= The performance of this implementation (tested for crc16) is equal to the performance of String>>crc16 if executed "raw" (see EXAMPLES). For the users sake however, the implementation does a few extra checks to improve ease of use. The cost is a loss of performance of about factor 1.15 (single instance) and 1.42 (one instance per run) (note that although I took an average of 10, the results will vary quite a bit each time you run the code): crc := CRC new beCrc16; message: 'this is a test message'; yourself. "String>>crc16" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ 'this is a test message' crc16 ] ] timeToRun ]. times average floor. --> 530 "raw" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ crc runRefInRefOut ] ] timeToRun ]. times average floor. --> 535 "user friendly, one instance" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ crc run ] ] timeToRun ]. times average floor. --> 616 "user friendly, one instance per run" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ CRC crc16FromCollection: 'this is a test message' ] ] timeToRun ]. times average floor. --> 759! !CodeImporter commentStamp: '' prior: 42178294! I'm an object in charge of import source files. I know a format object that knows how to parse the files, and I import the parsed results into the image. I handle doIts normally, but some special cases like class organization, class comment or methods are handled via a double dispatch (See my method extensions for that). =-=-=- How to use me -=-=-= If you want to fileIn the code -aka compile/evaluate it: CodeImporter evaluateReadStream: '2+2!!' readStream. or CodeImporter evaluateString: '2+2!!' or CodeImporter evaluateFileNamed: 'something.st' or CodeImporter evaluateFileStream: (FileStream readOnlyFileNamed: 'something.st') Now, you can also generate a model of code declarations inside a file by just creating an instance: CodeImporter fileStream: (FileStream readOnlyFileNamed: 'something.st'). And then query me sending the message #codeDeclarations Instances of me can be created through #fromString: #readStream: #fileNamed: #fileStream:! !STCommandLineRequestor commentStamp: '' prior: 0! I am an Object used to interact with the OpalCompiler.! !ProtoObject commentStamp: '' prior: 45059168! ProtoObject establishes minimal behavior required of any object in Pharo, even objects that should balk at normal object behavior. Generally these are proxy objects designed to read themselves in from the disk, or to perform some wrapper behavior, before responding to a message. ProtoObject has no instance variables, nor should any be added.! !CommandLineUIManager methodsFor: 'ui requests' stamp: 'CamilloBruni 7/10/2013 15:41' prior: 19754835! syntaxErrorNotificationDefaultAction: aSyntaxErrorNotification "log the syntax notificaiton and print a nicely formatted and colored syntax error on stderr" Smalltalk logDuring: [ :logger | logger print: aSyntaxErrorNotification; cr. aSyntaxErrorNotification signalerContext errorReportOn: logger ]. STCommandLineHandler printCompilerWarning: aSyntaxErrorNotification. "in noninteractive mode simply quit" ^ self exitFailure! ! !OCSemanticWarning methodsFor: 'accessing - compatibility' stamp: 'CamilloBruni 7/10/2013 16:17'! errorCode ^ self requestor contents! ! !OCSemanticWarning methodsFor: 'accessing - compatibility' stamp: 'CamilloBruni 7/10/2013 16:19'! errorMessage ^ self messageText! ! !OCSemanticWarning methodsFor: 'accessing - compatibility' stamp: 'CamilloBruni 7/10/2013 16:18'! location ^ self node sourceInterval first! ! !OpalCompiler methodsFor: 'public access' stamp: 'CamilloBruni 7/10/2013 16:48' prior: 39482994! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate: self compilationContext compiledMethodTrailer ] on: SyntaxErrorNotification do: [ :exception | self compilationContext requestor ifNotNil: [ self compilationContext requestor notify: exception errorMessage , ' ->' at: exception location in: exception errorCode. ^ self compilationContext failBlock value ] ifNil: [ exception pass ]]. ^cm! ! !CompiledMethod methodsFor: '*Fuel' stamp: 'MaxLeske 7/8/2013 21:17' prior: 19771484! bytecodesHash "Answer a 16-bit checksum of the bytecodes." ^ CRC crc16FromCollection: (ByteArray new: self size streamContents: [ :stream | self from: self initialPC to: self endPC do: [ :byte | stream nextPut: byte ] ])! ! !MethodFinder methodsFor: 'initialize' stamp: 'MaxLeske 7/8/2013 19:39' prior: 33944192! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" colorNames indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !DoItDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/10/2013 16:00' prior: 35773830! import ^ self importFor: nil! ! !DoItDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/10/2013 16:00'! importFor: requestor self flag: #fixme. "Ugly hack to parse preamble and postcript as a do it." ((contents beginsWith: '"Change Set:') and: [ ChangeSet current preambleString isNil ]) ifTrue: [ ChangeSet current preambleString: contents ]. ((contents beginsWith: '"Postscript:') and: [ ChangeSet current postscriptString isNil ]) ifTrue: [ ChangeSet current postscriptString: contents ]. ^Smalltalk compiler class new source: contents; requestor: requestor; evaluate.! ! !STCommandLineHandler commentStamp: '' prior: 45059585! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !STCommandLineHandler class methodsFor: 'printing' stamp: 'CamilloBruni 7/10/2013 16:28'! printCompilerWarning: aSyntaxErrorNotification | stderr position contents errorLine errorMessage maxLineNumberSize lineNumber | "format the error" position := aSyntaxErrorNotification location. contents := aSyntaxErrorNotification errorCode. errorLine := contents lineNumberCorrespondingToIndex: position. stderr := VTermOutputDriver stderr. "first gather the error title to be able to underline it properly" errorMessage := String streamContents: [ :s| s nextPutAll: 'Syntax Error on line '; print: errorLine; nextPutAll: ': '; print: aSyntaxErrorNotification errorMessage]. stderr red; nextPutAll: errorMessage; lf; nextPutAll: ('' padLeftTo: errorMessage size with: $=); lf. "print each source line and mark the found syntax error" maxLineNumberSize := contents lines size asString size. lineNumber := 0. contents lineIndicesDo: [:start :endWithoutDelimiters :end | lineNumber := lineNumber + 1. lineNumber == errorLine ifTrue: [ stderr red ] ifFalse:[ stderr white ]. "0 pad the line numbers to the same size" stderr nextPutAll: (lineNumber asString padLeftTo: maxLineNumberSize with: $0); nextPutAll: ': '. stderr white; nextPutAll: (contents copyFrom: start to: endWithoutDelimiters); lf. "print the marker under the error line" (lineNumber == errorLine) ifTrue: [ stderr red nextPutAll:( '_^_' padLeftTo: position - start + maxLineNumberSize + 4); lf ]]! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/10/2013 15:29'! compilerExpectionClass ^ Smalltalk compilerClass == OpalCompiler ifTrue: [ OCSemanticWarning ] ifFalse: [ Smalltalk globals at: #ParserNotification ]! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/10/2013 16:10'! createCompileRequestor: aFileReference compileRequestor := STCommandLineRequestor fileReference: aFileReference! ! !STCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 7/10/2013 16:42' prior: 43661872! handleError: error reference: aReference "Print a header before failing on an errro / syntax notification from the the script loaded by the given request" "spit out a warning if in headless mode, otherwise a debugger will popup" Smalltalk isHeadless ifTrue: [ self inform: 'Errors in script loaded from ', aReference fullName ]. (error isKindOf: SyntaxErrorNotification) "for syntax errors we can used the default action" ifTrue: [ ^ error defaultAction ]. (error isKindOf: self compilerExpectionClass) ifTrue: [ self class printCompilerWarning: error. ^ error resume: error defaultAction ]. "otherwise resignal it" error pass.! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/10/2013 16:38' prior: 43662511! handleErrorsDuring: aBlock reference: aReference aBlock on: Error, self compilerExpectionClass do: [ :e | self handleError: e reference: aReference ]! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/10/2013 16:38' prior: 43662980! installSourceFile: aReference "Install the the source file given by aFileReference" | codeImporter | self createCompileRequestor: aReference. " parse the code given in the source file" aReference readStreamDo: [ :stream | self handleErrorsDuring: [ codeImporter := CodeImporter fileStream: stream. codeImporter requestor: compileRequestor. codeImporter skipShebang parseDeclarations ] reference: aReference ]. "evaluate the declarations in a second step to allow for properly closing the source file stream" self handleErrorsDuring: [ codeImporter evaluate ] reference: aReference.! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/10/2013 16:09' prior: 43663602! installSourceFiles "Install the previously loaded source files" sourceFiles ifNil: [ ^ self ]. [ sourceFiles do: [ :reference | self installSourceFile: reference ] ] ensure: [ sourceFiles := nil ]. ! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! !Trait method! canZapMethodDictionary "Return false since zapping the method dictionary of Behavior class or its subclasses will cause the system to fail." ^false! ! !ClassDescription commentStamp: '' prior: 45060338! I add a number of facilities to basic Behaviors: Named instance variables Category organization for methods The notion of a name of this class (implemented as subclass responsibility) The maintenance of a ChangeSet, and logging changes on a file Most of the mechanism for fileOut. I am an abstract class, in particular, my facilities are intended for inheritance by two subclasses, Class and Metaclass.! !UIManager methodsFor: 'settings' stamp: 'CamilloBruni 7/10/2013 16:34' prior: 36074804! interactiveParserFor: requestor requestor ifNil: [^ false ]. (requestor respondsTo: #interactive) ifTrue: [ ^requestor interactive ]. ^true! ! !ZLibReadStream methodsFor: 'crc' stamp: 'MaxLeske 7/8/2013 21:20' prior: 55021633! updateCrc: oldCrc from: start to: stop in: aCollection "Answer an updated CRC for the range of bytes in aCollection" ^ Adler32 update: oldCrc from: start to: stop in: aCollection! ! !ZLibWriteStream methodsFor: 'initialization' stamp: 'MaxLeske 7/8/2013 21:21' prior: 55023723! updateCrc: adler from: start to: stop in: aCollection "Update crc using the Adler32 checksum technique from RFC1950" ^ Adler32 update: adler from: start to: stop in: aCollection! ! !ZipWriteStream class methodsFor: 'initialization' stamp: 'MaxLeske 7/8/2013 21:28' prior: 55237035! initialize "ZipWriteStream initialize" VerboseLevel := 0! ! !ZipWriteStream class methodsFor: 'crc' stamp: 'MaxLeske 7/8/2013 21:34' prior: 55236644! updateCrc: oldCrc from: start to: stop in: aCollection ^ CRC update: oldCrc from: start to: stop in: aCollection! ! !CodeDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/10/2013 20:58'! import self subclassResponsibility! ! !CodeDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/10/2013 20:58'! importFor: aRequestor self import! ! !ChangeSet commentStamp: '' prior: 45060806! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes. superclasses - Dictionary {#Rectangle -> #Object}. Of all classes in classChanges, and all of their superclasses.! !Checksum commentStamp: '' prior: 45061380! I represent the abstact superclass of all checksum algorithms.! !Adler32 commentStamp: '' prior: 45061492! The Adler32 checksum algorithm was developed by Mark Adler for his ZLib algorithm. It is defined in IETF RFC 1950: http://tools.ietf.org/html/rfc1950#page-10. The purpose of this class is mainly grouping as the ZipPlugin already implements Adler32. See also the comment in #update:from:to:in: Note that Adler32 is not a CRC, strictly speaking.! !Adler32 class methodsFor: 'primitives' stamp: 'MaxLeske 7/8/2013 21:20'! update: adler from: start to: stop in: aCollection "Update crc using the Adler32 checksum technique from RFC1950" " unsigned long s1 = adler & 0xffff; unsigned long s2 = (adler >> 16) & 0xffff; int n; for (n = 0; n < len; n++) { s1 = (s1 + buf[n]) % BASE; s2 = (s2 + s1) % BASE; } return (s2 << 16) + s1; " | s1 s2 | s1 := adler bitAnd: 16rFFFF. s2 := (adler bitShift: -16) bitAnd: 16rFFFF. start to: stop do: [ :n | | b | b := aCollection byteAt: n. s1 := (s1 + b) \\ 65521. s2 := (s2 + s1) \\ 65521. ]. ^(s2 bitShift: 16) + s1! ! !CRC commentStamp: '' prior: 45061883! Parameterized implementation of the cyclic redundancy check (CRC) algorithm. INTRODUCTION ================= This implementation is based on the (awesome) paper "A Painless Guide to CRC Error Detection Algorithms" by Ross Williams. You should find a copy of the paper here: http://www.ross.net/crc/. In this paper Ross describes a parameterized implementation that enables the different variations of the CRC algorithm to be used in a consistent way, simply by adjusting the parameters. If you don't have a clue about CRC (like me) then I strongly suggest reading the paper. It will also help you to understand how to make the best use of this implementation. The "CRC RevEng" project on sourceforge implements Williams's "RockSoft" parameterized CRC program (as does this class) and comes with a handy list of parameters for various CRC algorithm: http://reveng.sourceforge.net/crc-catalogue/. For ease of use and better performance, the two defacto standard variations "CRC16" and "CRC32" have been predefined. The lookup tables for these implementations are included on the class side. For all other variations the lookup table will be generated at runtime before the first run. If you want to define your own algorithm you can do so by using the methods in the "accessing-parameters" protocol. Note that there are no default values. Here's a short overview: #width: defines the width of the register (usually 16 or 32) #polynome: defines the polynome to use for polynome division / lookup table creation #registerFill: defines the start content of the working register (usually all ones or all zeros) #reflectInput: if true every byte will be reflected before processing (e.g. 100101 -> 101001) #reflectOutpu: if true the entire register will be reflected before the final XOR stage #finallyXorWith: defines the final XOR for the entire register #lookupTable: the only OPTIONAL parameter. The lookup table will be generated at runtime if none has been supplied #message: the message to calculate the CRC on EXAMPLES ================= The simplest possible snippet uses the class side methods for "CRC16" and "CRC32": CRC crc16FromCollection: 'some message'. --> 55709 CRC crc32FromCollection: 'some message'. --> 191312361 Let's assume, you wanted to use "CRC16 reversed" (neither input nor output reflected). Then you would have to change the parameters like so (the reversed form uses a different polynome and a different start register content): crc := CRC new beCrc16; polynome: 16r1021; registerFill: 16rFFFF; reflectInput: false; reflectOutput: false; message: 'some message'; yourself. crc run. --> 46785 Using a single instance as in the code above will of course be faster than using the class side methods when performing multiple runs. But if you are really concerned about performance (see PERFORMANCE) you should use the "raw" methods (no checks!! If you forget to set parameters there will be errors....): crc := CRC new beCrc16; message: 'some message'; yourself. crc runRefInRefOut. --> 55709 crc := CRC new beCrc16; polynome: 16r1021; registerFill: 16rFFFF; message: 'some message'; yourself. crc runNonRefInNonRefOut. --> 46785 PERFORMANCE ================= The performance of this implementation (tested for crc16) is equal to the performance of String>>crc16 if executed "raw" (see EXAMPLES). For the users sake however, the implementation does a few extra checks to improve ease of use. The cost is a loss of performance of about factor 1.15 (single instance) and 1.42 (one instance per run) (note that although I took an average of 10, the results will vary quite a bit each time you run the code): crc := CRC new beCrc16; message: 'this is a test message'; yourself. "String>>crc16" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ 'this is a test message' crc16 ] ] timeToRun ]. times average floor. --> 530 "raw" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ crc runRefInRefOut ] ] timeToRun ]. times average floor. --> 535 "user friendly, one instance" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ crc run ] ] timeToRun ]. times average floor. --> 616 "user friendly, one instance per run" times := OrderedCollection new. 10 timesRepeat: [ times add: [ 1000000 timesRepeat: [ CRC crc16FromCollection: 'this is a test message' ] ] timeToRun ]. times average floor. --> 759! !CRC class methodsFor: 'instance creation' stamp: 'MaxLeske 7/8/2013 21:33'! crc16FromCollection: aCollection | instance | instance := self new beCrc16; message: aCollection; yourself. ^ instance runRefInRefOut! ! !CRC class methodsFor: 'accessing-tables' stamp: 'MaxLeske 3/6/2012 08:22'! crc16Table ^ #( 16r0000 16rC0C1 16rC181 16r0140 16rC301 16r03C0 16r0280 16rC241 16rC601 16r06C0 16r0780 16rC741 16r0500 16rC5C1 16rC481 16r0440 16rCC01 16r0CC0 16r0D80 16rCD41 16r0F00 16rCFC1 16rCE81 16r0E40 16r0A00 16rCAC1 16rCB81 16r0B40 16rC901 16r09C0 16r0880 16rC841 16rD801 16r18C0 16r1980 16rD941 16r1B00 16rDBC1 16rDA81 16r1A40 16r1E00 16rDEC1 16rDF81 16r1F40 16rDD01 16r1DC0 16r1C80 16rDC41 16r1400 16rD4C1 16rD581 16r1540 16rD701 16r17C0 16r1680 16rD641 16rD201 16r12C0 16r1380 16rD341 16r1100 16rD1C1 16rD081 16r1040 16rF001 16r30C0 16r3180 16rF141 16r3300 16rF3C1 16rF281 16r3240 16r3600 16rF6C1 16rF781 16r3740 16rF501 16r35C0 16r3480 16rF441 16r3C00 16rFCC1 16rFD81 16r3D40 16rFF01 16r3FC0 16r3E80 16rFE41 16rFA01 16r3AC0 16r3B80 16rFB41 16r3900 16rF9C1 16rF881 16r3840 16r2800 16rE8C1 16rE981 16r2940 16rEB01 16r2BC0 16r2A80 16rEA41 16rEE01 16r2EC0 16r2F80 16rEF41 16r2D00 16rEDC1 16rEC81 16r2C40 16rE401 16r24C0 16r2580 16rE541 16r2700 16rE7C1 16rE681 16r2640 16r2200 16rE2C1 16rE381 16r2340 16rE101 16r21C0 16r2080 16rE041 16rA001 16r60C0 16r6180 16rA141 16r6300 16rA3C1 16rA281 16r6240 16r6600 16rA6C1 16rA781 16r6740 16rA501 16r65C0 16r6480 16rA441 16r6C00 16rACC1 16rAD81 16r6D40 16rAF01 16r6FC0 16r6E80 16rAE41 16rAA01 16r6AC0 16r6B80 16rAB41 16r6900 16rA9C1 16rA881 16r6840 16r7800 16rB8C1 16rB981 16r7940 16rBB01 16r7BC0 16r7A80 16rBA41 16rBE01 16r7EC0 16r7F80 16rBF41 16r7D00 16rBDC1 16rBC81 16r7C40 16rB401 16r74C0 16r7580 16rB541 16r7700 16rB7C1 16rB681 16r7640 16r7200 16rB2C1 16rB381 16r7340 16rB101 16r71C0 16r7080 16rB041 16r5000 16r90C1 16r9181 16r5140 16r9301 16r53C0 16r5280 16r9241 16r9601 16r56C0 16r5780 16r9741 16r5500 16r95C1 16r9481 16r5440 16r9C01 16r5CC0 16r5D80 16r9D41 16r5F00 16r9FC1 16r9E81 16r5E40 16r5A00 16r9AC1 16r9B81 16r5B40 16r9901 16r59C0 16r5880 16r9841 16r8801 16r48C0 16r4980 16r8941 16r4B00 16r8BC1 16r8A81 16r4A40 16r4E00 16r8EC1 16r8F81 16r4F40 16r8D01 16r4DC0 16r4C80 16r8C41 16r4400 16r84C1 16r8581 16r4540 16r8701 16r47C0 16r4680 16r8641 16r8201 16r42C0 16r4380 16r8341 16r4100 16r81C1 16r8081 16r4040)! ! !CRC class methodsFor: 'instance creation' stamp: 'MaxLeske 3/18/2012 10:16'! crc32FromCollection: aCollection | instance | instance := self new beCrc32; message: aCollection; yourself. ^ instance runRefInRefOut! ! !CRC class methodsFor: 'accessing-tables' stamp: 'MaxLeske 3/6/2012 10:03'! crc32Table ^ #( 16r00000000 16r77073096 16rEE0E612C 16r990951BA 16r076DC419 16r706AF48F 16rE963A535 16r9E6495A3 16r0EDB8832 16r79DCB8A4 16rE0D5E91E 16r97D2D988 16r09B64C2B 16r7EB17CBD 16rE7B82D07 16r90BF1D91 16r1DB71064 16r6AB020F2 16rF3B97148 16r84BE41DE 16r1ADAD47D 16r6DDDE4EB 16rF4D4B551 16r83D385C7 16r136C9856 16r646BA8C0 16rFD62F97A 16r8A65C9EC 16r14015C4F 16r63066CD9 16rFA0F3D63 16r8D080DF5 16r3B6E20C8 16r4C69105E 16rD56041E4 16rA2677172 16r3C03E4D1 16r4B04D447 16rD20D85FD 16rA50AB56B 16r35B5A8FA 16r42B2986C 16rDBBBC9D6 16rACBCF940 16r32D86CE3 16r45DF5C75 16rDCD60DCF 16rABD13D59 16r26D930AC 16r51DE003A 16rC8D75180 16rBFD06116 16r21B4F4B5 16r56B3C423 16rCFBA9599 16rB8BDA50F 16r2802B89E 16r5F058808 16rC60CD9B2 16rB10BE924 16r2F6F7C87 16r58684C11 16rC1611DAB 16rB6662D3D 16r76DC4190 16r01DB7106 16r98D220BC 16rEFD5102A 16r71B18589 16r06B6B51F 16r9FBFE4A5 16rE8B8D433 16r7807C9A2 16r0F00F934 16r9609A88E 16rE10E9818 16r7F6A0DBB 16r086D3D2D 16r91646C97 16rE6635C01 16r6B6B51F4 16r1C6C6162 16r856530D8 16rF262004E 16r6C0695ED 16r1B01A57B 16r8208F4C1 16rF50FC457 16r65B0D9C6 16r12B7E950 16r8BBEB8EA 16rFCB9887C 16r62DD1DDF 16r15DA2D49 16r8CD37CF3 16rFBD44C65 16r4DB26158 16r3AB551CE 16rA3BC0074 16rD4BB30E2 16r4ADFA541 16r3DD895D7 16rA4D1C46D 16rD3D6F4FB 16r4369E96A 16r346ED9FC 16rAD678846 16rDA60B8D0 16r44042D73 16r33031DE5 16rAA0A4C5F 16rDD0D7CC9 16r5005713C 16r270241AA 16rBE0B1010 16rC90C2086 16r5768B525 16r206F85B3 16rB966D409 16rCE61E49F 16r5EDEF90E 16r29D9C998 16rB0D09822 16rC7D7A8B4 16r59B33D17 16r2EB40D81 16rB7BD5C3B 16rC0BA6CAD 16rEDB88320 16r9ABFB3B6 16r03B6E20C 16r74B1D29A 16rEAD54739 16r9DD277AF 16r04DB2615 16r73DC1683 16rE3630B12 16r94643B84 16r0D6D6A3E 16r7A6A5AA8 16rE40ECF0B 16r9309FF9D 16r0A00AE27 16r7D079EB1 16rF00F9344 16r8708A3D2 16r1E01F268 16r6906C2FE 16rF762575D 16r806567CB 16r196C3671 16r6E6B06E7 16rFED41B76 16r89D32BE0 16r10DA7A5A 16r67DD4ACC 16rF9B9DF6F 16r8EBEEFF9 16r17B7BE43 16r60B08ED5 16rD6D6A3E8 16rA1D1937E 16r38D8C2C4 16r4FDFF252 16rD1BB67F1 16rA6BC5767 16r3FB506DD 16r48B2364B 16rD80D2BDA 16rAF0A1B4C 16r36034AF6 16r41047A60 16rDF60EFC3 16rA867DF55 16r316E8EEF 16r4669BE79 16rCB61B38C 16rBC66831A 16r256FD2A0 16r5268E236 16rCC0C7795 16rBB0B4703 16r220216B9 16r5505262F 16rC5BA3BBE 16rB2BD0B28 16r2BB45A92 16r5CB36A04 16rC2D7FFA7 16rB5D0CF31 16r2CD99E8B 16r5BDEAE1D 16r9B64C2B0 16rEC63F226 16r756AA39C 16r026D930A 16r9C0906A9 16rEB0E363F 16r72076785 16r05005713 16r95BF4A82 16rE2B87A14 16r7BB12BAE 16r0CB61B38 16r92D28E9B 16rE5D5BE0D 16r7CDCEFB7 16r0BDBDF21 16r86D3D2D4 16rF1D4E242 16r68DDB3F8 16r1FDA836E 16r81BE16CD 16rF6B9265B 16r6FB077E1 16r18B74777 16r88085AE6 16rFF0F6A70 16r66063BCA 16r11010B5C 16r8F659EFF 16rF862AE69 16r616BFFD3 16r166CCF45 16rA00AE278 16rD70DD2EE 16r4E048354 16r3903B3C2 16rA7672661 16rD06016F7 16r4969474D 16r3E6E77DB 16rAED16A4A 16rD9D65ADC 16r40DF0B66 16r37D83BF0 16rA9BCAE53 16rDEBB9EC5 16r47B2CF7F 16r30B5FFE9 16rBDBDF21C 16rCABAC28A 16r53B39330 16r24B4A3A6 16rBAD03605 16rCDD70693 16r54DE5729 16r23D967BF 16rB3667A2E 16rC4614AB8 16r5D681B02 16r2A6F2B94 16rB40BBE37 16rC30C8EA1 16r5A05DF1B 16r2D02EF8D)! ! !CRC class methodsFor: 'primitives' stamp: 'MaxLeske 7/8/2013 21:41'! update: oldCrc from: start to: stop in: aCollection | newCrc | newCrc := oldCrc. start to: stop do: [ :i | newCrc := (self crc32Table at: ((newCrc bitXor: (aCollection byteAt: i)) bitAnd: 255) + 1) bitXor: (newCrc bitShift: -8) ]. ^newCrc! ! !CRC methodsFor: 'accessing-implementations' stamp: 'MaxLeske 3/17/2012 21:04'! beCrc16 self width: 16; lookupTable: self class crc16Table; polynome: 16r8005; registerFill: 16r0; reflectInput: true; reflectOutput: true; finallyXorWith: 16r0! ! !CRC methodsFor: 'accessing-implementations' stamp: 'MaxLeske 3/17/2012 21:05'! beCrc32 self width: 32; lookupTable: self class crc32Table; polynome: 16r04C11DB7; registerFill: 16rFFFFFFFF; reflectInput: true; reflectOutput: true; finallyXorWith: 16rFFFFFFFF! ! !CRC methodsFor: 'private-bit-manipulation' stamp: 'MaxLeske 3/4/2012 19:37'! bitMaskAt: anInteger ^ 0 bitAt: anInteger put: 1! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/3/2012 22:50'! finallyXorWith: anInteger "The final XOR of the output will be performed with this value" finalXorBytes := anInteger! ! !CRC methodsFor: 'private-tables' stamp: 'MaxLeske 3/18/2012 10:01'! generateLookupTable "lookup tables have 256 entries" ^ Array new: 256 streamContents: [ :aStream | self printLookupTableOn: aStream ]! ! !CRC methodsFor: 'private-bit-manipulation' stamp: 'MaxLeske 3/18/2012 09:31'! invertedBitMaskAt: anInteger anInteger < 1 ifTrue: [ ^ 16rFFFFFFFF ]. ^ 16rFFFFFFFF bitAt: anInteger put: 0! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/6/2012 08:25'! lookupTable: anArray lookupTable := anArray! ! !CRC methodsFor: 'private-bit-manipulation' stamp: 'MaxLeske 3/18/2012 10:07'! lowestByteShift ^ lowestByteShift ifNil: [ lowestByteShift := width - 8 ]! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/16/2012 16:50'! message: anObject message := anObject asByteArray! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/18/2012 09:59'! polynome: anInteger "The polynome used for polynomial division. It should be of the same length as the register width (see #width:)." polynome := anInteger! ! !CRC methodsFor: 'private-tables' stamp: 'MaxLeske 3/18/2012 10:06'! printLookupTableOn: aStream | topBit | topBit := self bitMaskAt: width. 0 to: 255 do: [ :index || register indexByte | indexByte := index. shouldReflectInput ifTrue: [ indexByte := self reflect: indexByte onLowerBits: 8 ]. register := indexByte << self lowestByteShift. 1 to: 8 do: [ : byteIndex | register := (register bitAnd: topBit) > 0 ifTrue: [ (register << 1) bitXor: polynome ] ifFalse: [ register << 1 ] ]. shouldReflectInput ifTrue: [ register := self reflect: register onLowerBits: width ]. register := (register bitAnd: self widthMask). aStream nextPut: register ]! ! !CRC methodsFor: 'private-bit-manipulation' stamp: 'MaxLeske 3/16/2012 16:02'! reflect: anInteger onLowerBits: anotherInteger | register test | register := anInteger. test := anInteger. 0 to: anotherInteger - 1 do: [ :index | register := (test bitAnd: 1) = 1 ifTrue: [ register bitOr: (self bitMaskAt: anotherInteger - index) ] ifFalse: [ register bitAnd: (self invertedBitMaskAt: anotherInteger - index) ]. test := test bitShift: -1 ]. ^ register! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/18/2012 10:11'! reflectInput: aBoolean "Determines if each byte should be reflected before processing. If false, bit 7 will be treated as most significant bit. If true, each byte will be reflected (bit 0 will be most significant)." shouldReflectInput := aBoolean! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/18/2012 10:11'! reflectOutput: aBoolean "Determines if the output is reflected before the final XOR." shouldReflectOutput := aBoolean! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/18/2012 10:11'! registerFill: anInteger "The initial value of the CRC register" registerFill := anInteger! ! !CRC methodsFor: 'public' stamp: 'MaxLeske 3/17/2012 21:13'! run lookupTable ifNil: [ lookupTable := self generateLookupTable ]. ^ self perform: self runMethodSelector! ! !CRC methodsFor: 'private-run-methods' stamp: 'MaxLeske 3/18/2012 09:27'! runMethodSelector ^ runMethodSelector ifNil: [ runMethodSelector := shouldReflectInput ifTrue: [ shouldReflectOutput ifTrue: [ #runRefInRefOut ] ifFalse: [ #runRefInNonRefOut ] ] ifFalse: [ shouldReflectOutput ifTrue: [ #runNonRefInRefOut ] ifFalse: [ #runNonRefInNonRefOut ] ] ]! ! !CRC methodsFor: 'private-run-methods' stamp: 'MaxLeske 3/18/2012 10:28'! runNonRefInNonRefOut theRegister := registerFill. 1 to: message size do: [ :byteIndex | theRegister := (lookupTable at: (((theRegister bitShift: 0 - self lowestByteShift) bitXor: (message byteAt: byteIndex)) bitAnd: 255) + 1) bitXor: ((theRegister bitShift: 8) bitAnd: self widthMask) ]. ^ finalXorBytes bitXor: theRegister! ! !CRC methodsFor: 'private-run-methods' stamp: 'MaxLeske 3/18/2012 10:57'! runNonRefInRefOut Warning signal: 'unverified implementation'. theRegister := registerFill. 1 to: message size do: [ :byteIndex | theRegister := (lookupTable at: (((theRegister bitShift: 0 - self lowestByteShift) bitXor: (message byteAt: byteIndex)) bitAnd: 255) + 1) bitXor: (theRegister bitShift: -8) ]. ^ finalXorBytes bitXor: theRegister! ! !CRC methodsFor: 'private-run-methods' stamp: 'MaxLeske 3/18/2012 10:57'! runRefInNonRefOut Warning signal: 'unverified implementation'. theRegister := registerFill. 1 to: message size do: [ :byteIndex | theRegister := (lookupTable at: ((theRegister bitXor: (message byteAt: byteIndex)) bitAnd: 255) + 1) bitXor: ((theRegister bitShift: 8) bitAnd: self widthMask) ]. ^ finalXorBytes bitXor: theRegister! ! !CRC methodsFor: 'private-run-methods' stamp: 'MaxLeske 3/18/2012 10:27'! runRefInRefOut theRegister := registerFill. 1 to: message size do: [ :byteIndex | theRegister := (lookupTable at: ((theRegister bitXor: (message byteAt: byteIndex)) bitAnd: 255) + 1) bitXor: (theRegister bitShift: -8) ]. ^ finalXorBytes bitXor: theRegister! ! !CRC methodsFor: 'accessing-parameters' stamp: 'MaxLeske 3/18/2012 10:15'! width: anInteger "width of the register (on how many bits the CRC is calculated). usually 16 or 32" width := anInteger! ! !CRC methodsFor: 'private-bit-manipulation' stamp: 'MaxLeske 3/18/2012 10:14'! widthMask "bit mask (all ones)" ^ widthMask ifNil: [ widthMask := (2 raisedTo: width) - 1 ]! ! !CodeImporter commentStamp: '' prior: 45066479! I'm an object in charge of import source files. I know a format object that knows how to parse the files, and I import the parsed results into the image. I handle doIts normally, but some special cases like class organization, class comment or methods are handled via a double dispatch (See my method extensions for that). =-=-=- How to use me -=-=-= If you want to fileIn the code -aka compile/evaluate it: CodeImporter evaluateReadStream: '2+2!!' readStream. or CodeImporter evaluateString: '2+2!!' or CodeImporter evaluateFileNamed: 'something.st' or CodeImporter evaluateFileStream: (FileStream readOnlyFileNamed: 'something.st') Now, you can also generate a model of code declarations inside a file by just creating an instance: CodeImporter fileStream: (FileStream readOnlyFileNamed: 'something.st'). And then query me sending the message #codeDeclarations Instances of me can be created through #fromString: #readStream: #fileNamed: #fileStream:! !CodeImporter methodsFor: '*System-CommandLine' stamp: 'CamilloBruni 7/10/2013 16:16' prior: 19485183! evaluate " stripped down version of evaluateDeclarations" | value | self codeDeclarations do: [ :declaration | requestor ifNotNil: [ requestor contents: declaration contents ]. value := declaration importFor: requestor ]. self flushChangesFile. ^value! ! !CodeImporter methodsFor: 'evaluating' stamp: 'CamilloBruni 7/10/2013 18:44' prior: 19485856! evaluateDeclarations "Evaluates the declarations from the text in the file and answers the last result" | value | self parseDeclarations. self codeDeclarations do: [ :declaration | requestor ifNotNil: [ requestor contents: declaration contents ]. value := declaration importFor: requestor ]. self flushChangesFile. ^value! ! !CodeImporter methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:13'! requestor ^ requestor! ! !CodeImporter methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:13'! requestor: anObject requestor := anObject! ! !STCommandLineRequestor commentStamp: '' prior: 45067513! I am an Object used to interact with the OpalCompiler.! !STCommandLineRequestor class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference: aFileReference ^ self new fileReference: aFileReference; yourself! ! !STCommandLineRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! contents ^ contents! ! !STCommandLineRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! contents: anObject contents := anObject! ! !STCommandLineRequestor methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 7/10/2013 16:45'! failBlock ^ [ :exception | exception pass ]! ! !STCommandLineRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference ^ fileReference! ! !STCommandLineRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference: anObject fileReference := anObject! ! !STCommandLineRequestor methodsFor: 'testing' stamp: 'CamilloBruni 7/10/2013 16:35'! interactive ^ false! ! !STCommandLineRequestor methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 7/10/2013 18:46'! notify: message at: location in: code self flag: #hack. "Should use the new OPalWarnings directly instead of recreating a SyntaxErrorNotification" SyntaxErrorNotification inClass: STCommandLineHandler category: nil withCode: code doitFlag: nil errorMessage: message location: location.! ! ZipWriteStream class removeSelector: #initializeCrcTable! ZipWriteStream class removeSelector: #crcTable! String removeSelector: #crc16! SmalltalkImage removeSelector: #associationOrUndeclaredAt:! MCDataStream removeSelector: #replace:with:! ByteArray removeSelector: #crc16from:to:! SystemDictionary removeSelector: #associationOrUndeclaredAt:! ZLibWriteStream class removeSelector: #updateAdler32:from:to:in:! "CodeImport"! "Collections-Strings"! "Compression"! "Fuel"! "Monticello"! "OpalCompiler-Core"! "System-Changes"! "System-CommandLine"! "System-Hashing"! "System-Support"! "Tools"! "UIManager"! ----End fileIn----! ----QUIT----an Array(16 July 2013 1:25:39 pm) Pharo.image priorSource: 11493590! ----STARTUP----an Array(16 July 2013 1:35:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 July 2013 1:35:08 pm) Pharo-30274.image priorSource: 11558770! ----STARTUP----an Array(16 July 2013 5:05:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/16/2013 17:03' prior: 45048323! commentForCurrentUpdate ^ '11170 Inspector should close even if unaccepted edits https://pharo.fogbugz.com/f/cases/11170 11168 Rename TestRunnerCommandLineHandler to TestCommandLineHandler https://pharo.fogbugz.com/f/cases/11168 11169 Manage top/bottom in SpecColumn and left/right in SpecRow https://pharo.fogbugz.com/f/cases/11169 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/16/2013 17:03'! script111 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.24.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.214.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.41.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1521.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.830.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.490.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.373.mcz OpalCompiler-Tests-MarcusDenker.192.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.133.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.873.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1174.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/16/2013 17:03'! update30275 "self new update30275" self withUpdateLog: '11170 Inspector should close even if unaccepted edits https://pharo.fogbugz.com/f/cases/11170 11168 Rename TestRunnerCommandLineHandler to TestCommandLineHandler https://pharo.fogbugz.com/f/cases/11168 11169 Manage top/bottom in SpecColumn and left/right in SpecRow https://pharo.fogbugz.com/f/cases/11169 '. self loadTogether: self script111 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TestCommandLineHandler commentStamp: '' prior: 0! Usage: test [--junit-xml-output] [ ...] --junit-xml-output output the test results in a junit compatible format a String matching a package name Examples: #Run all the tests in the Tests-Exceptions package pharo Pharo.image test Tests-Exceptions #Run all the tests in packages matching Test-.* and KernelTests pharo Pharo.image test "Tests-.*" "KernelTests-.*" # Run test on a Hudson/Jenkins server pharo Pharo.image test --junit-xml-output "Tests-.*" "KernelTests-.*" ! !TestAutoFractionComputation commentStamp: '' prior: 0! I am a widget used to verify that the mechanism used to compute rows and columns are still working.! !TestCommandLineHandler commentStamp: '' prior: 45124553! Usage: test [--junit-xml-output] [ ...] --junit-xml-output output the test results in a junit compatible format a String matching a package name Examples: #Run all the tests in the Tests-Exceptions package pharo Pharo.image test Tests-Exceptions #Run all the tests in packages matching Test-.* and KernelTests pharo Pharo.image test "Tests-.*" "KernelTests-.*" # Run test on a Hudson/Jenkins server pharo Pharo.image test --junit-xml-output "Tests-.*" "KernelTests-.*" ! !TestCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 10/18/2012 12:52'! commandName ^ 'test'! ! !TestCommandLineHandler class methodsFor: 'accessing' stamp: 'CamilloBruni 10/18/2012 12:52'! description ^ 'A command line test runner'! ! !TestCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 3/22/2013 21:44'! activate self activateHelp ifTrue: [ ^ self ]. self runPackages.! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 1/24/2013 17:35'! addPackagesMatching: aString to: aSet | regex | [ regex := aString asRegex ] on: Error do: [ ]. regex ifNotNil: [ ^ self addPackagesMatchingRegex: regex to: aSet ]. (aString includes: $*) ifTrue: [ ^ self addPackagesMatchingGlob: aString to: aSet ]. "exact match, and just those who actually have classes inside (to avoid super-package duplications)" ((RPackage organizer includesPackageNamed: aString) and: [ (RPackage organizer packageNamed: aString) definedClasses notEmpty ]) ifTrue: [ aSet add: aString ]! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 10/18/2012 13:18'! addPackagesMatchingGlob: aGlobString to: aSet RPackage organizer packageNames do: [ :packageName| (aGlobString match: packageName) ifTrue: [ aSet add: packageName ]]! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 10/18/2012 13:16'! addPackagesMatchingRegex: aRegex to: aSet RPackage organizer packageNames do: [ :packageName| (aRegex matches: packageName) ifTrue: [ aSet add: packageName ]]! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 10/18/2012 13:10'! packages | packages | packages := Set new. self arguments reject: [ :arg| arg beginsWith: '-'] thenDo: [ :arg| self addPackagesMatching: arg to: packages ]. ^ packages! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 1/18/2013 15:46'! runPackages | packages | packages := self packages. self inform: 'Running tests in ', packages size asString, ' Packages'. self testRunner runPackages: self packages. (self hasOption: 'save') ifTrue: [Smalltalk saveSession]. self exitSuccess.! ! !TestCommandLineHandler methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 10/22/2012 23:29'! testRunner ^ (self hasOption: 'junit-xml-output') ifTrue: [ HDTestReport ] ifFalse: [ CommandLineTestRunner ]! ! !SpecColumnLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 7/16/2013 13:59' prior: 34124288! privateAsArray | size result currentOffset numberOfProportionals currentProportional delta lastFractionIndex height autoFractionComputation | self flag: #toFix. "This method is a giant: strange name, huge logic" currentOffset := 0. currentProportional := 0. result := OrderedCollection new. size := self commands size. numberOfProportionals := 0. lastFractionIndex := 0. autoFractionComputation := true. self commands do: [:e | e layoutFrame hasNoOffsets ifTrue: [ (e layoutFrame topFraction == 0 and: [ e layoutFrame bottomFraction == 1 ]) ifFalse: [ autoFractionComputation := false ]. numberOfProportionals := numberOfProportionals +1 ]]. autoFractionComputation not ifTrue: [ self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ "fractions" delta := e layoutFrame bottomFraction - e layoutFrame topFraction. e layoutFrame: ((0@currentProportional corner: 1@(currentProportional +delta)) asLayoutFrame topOffset: currentOffset ). currentOffset := 0. currentProportional := currentProportional + delta. lastFractionIndex := idx ] ifFalse: [ "offsets" height := e bottomOffset - e topOffset. idx = size ifTrue: [ e layoutFrame: ((0@1 corner: 1@1) asLayoutFrame topLeftOffset: e leftOffset @ height negated; bottomRightOffset: e rightOffset@0)] ifFalse: [ e layoutFrame: ((0@currentProportional corner: 1@currentProportional) asLayoutFrame topLeftOffset: e leftOffset@currentOffset ; bottomRightOffset: e rightOffset@ (currentOffset + height)). currentOffset := (currentOffset + height) ] ] ] ] ifFalse: [ numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1/numberOfProportionals ]. self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ "fractions" e layoutFrame: ((0@currentProportional corner: 1@(currentProportional +delta)) asLayoutFrame topOffset: currentOffset ). currentOffset := 0. currentProportional := currentProportional + delta. lastFractionIndex := idx ] ifFalse: [ "offsets" height := e bottomOffset - e topOffset. idx = size ifTrue: [ e layoutFrame: ((0@1 corner: 1@1) asLayoutFrame topLeftOffset: e leftOffset @ height negated; bottomRightOffset: e rightOffset@0)] ifFalse: [ e layoutFrame: ((0@currentProportional corner: 1@currentProportional) asLayoutFrame topLeftOffset: e leftOffset@currentOffset ; bottomRightOffset: e rightOffset@ (currentOffset + height)). currentOffset := (currentOffset + height) ] ] ] ]. (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifTrue: [ | index ante | index := size - 1. [ index > lastFractionIndex ] whileTrue: [ | myHeight | ante := self commands at: index. index := index -1. myHeight := ante bottomOffset - ante topOffset. ante topOffset: (height+myHeight) negated; bottomOffset: height negated. height := height+myHeight ]. self assert: (index = lastFractionIndex). ante := self commands at: index. ante bottomOffset: height negated ]. result addAll: super privateAsArray. ^ result asArray! ! !EyeInspector methodsFor: 'private' stamp: 'CamilloBruni 7/16/2013 15:01'! canDiscardEdits ^ true! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 7/16/2013 14:55' prior: 36493493! initializeWidgets self instantiateModels: #( list NewListModel text TextModel description TextModel ). text aboutToStyle: true. ! ! !TestAutoFractionComputation commentStamp: '' prior: 45125141! I am a widget used to verify that the mechanism used to compute rows and columns are still working.! !TestAutoFractionComputation class methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/16/2013 14:04'! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #list left: 0.8; newColumn: [ :c | c add: #button bottom: 0.7; add: #text top: 0.3 ] right: 0.2 ]; yourself! ! !TestAutoFractionComputation methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/16/2013 13:27'! button ^ button! ! !TestAutoFractionComputation methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/16/2013 13:48'! initializeWidgets self instantiateModels: #( button ButtonModel list ListComposableModel text TextModel ).! ! !TestAutoFractionComputation methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/16/2013 13:27'! list ^ list! ! !TestAutoFractionComputation methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/16/2013 13:27'! text ^ text! ! !SpecRowLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 7/16/2013 14:00' prior: 34126434! privateAsArray | result currentOffset numberOfProportionals currentProportional delta size lastFractionIndex width autoFractionComputation | currentOffset := 0. currentProportional := 0. result := OrderedCollection new. numberOfProportionals := 0. lastFractionIndex := 0. autoFractionComputation := true. size := self commands size. self commands do: [:e | e layoutFrame hasNoOffsets ifTrue: [ (e layoutFrame leftFraction == 0 and: [ e layoutFrame rightFraction == 1 ]) ifFalse: [ autoFractionComputation := false ]. numberOfProportionals := numberOfProportionals +1 ] ]. autoFractionComputation not ifTrue: [ self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ delta := e layoutFrame rightFraction - e layoutFrame leftFraction. e layoutFrame: ((currentProportional@0 corner: (currentProportional +delta)@1) asLayoutFrame leftOffset: currentOffset). currentOffset := 0. currentProportional := currentProportional +delta. lastFractionIndex := idx ] ifFalse: [| y0 y1 | width := e offsets width. y0 := e offsets top. y1 := e offsets bottom. idx = size ifTrue: [ e layoutFrame: ((1@0 corner: 1@1) asLayoutFrame topLeftOffset: width negated @y0; bottomRightOffset: 0@y1)] ifFalse: [ e layoutFrame: ((currentProportional@0 corner: currentProportional@1) asLayoutFrame topLeftOffset: currentOffset@y0 ; bottomRightOffset: (currentOffset + width)@y1). currentOffset := (currentOffset + width) ] ] ] ] ifFalse: [ numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1/numberOfProportionals ]. self commands doWithIndex: [:e :idx | e layoutFrame hasNoOffsets ifTrue: [ e layoutFrame: ((currentProportional@0 corner: (currentProportional +delta)@1) asLayoutFrame leftOffset: currentOffset). currentOffset := 0. currentProportional := currentProportional +delta. lastFractionIndex := idx ] ifFalse: [| y0 y1 | width := e offsets width. y0 := e offsets top. y1 := e offsets bottom. idx = size ifTrue: [ e layoutFrame: ((1@0 corner: 1@1) asLayoutFrame topLeftOffset: width negated @y0; bottomRightOffset: 0@y1)] ifFalse: [ e layoutFrame: ((currentProportional@0 corner: currentProportional@1) asLayoutFrame topLeftOffset: currentOffset@y0 ; bottomRightOffset: (currentOffset + width)@y1). currentOffset := (currentOffset + width) ] ] ] ]. (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifTrue: [ | index ante | index := size-1. [ index > lastFractionIndex ] whileTrue: [ | myWidth | ante := self commands at: index. index := index -1. myWidth := ante rightOffset - ante leftOffset. ante leftOffset: (width+myWidth) negated; rightOffset: width negated. width := width+myWidth ]. self assert: (index = lastFractionIndex). ante := self commands at: index. ante layoutFrame rightOffset: width negated ]. result addAll: super privateAsArray. ^ result asArray! ! TestRunnerCommandLineHandler removeSelector: #testRunner! TestRunnerCommandLineHandler removeSelector: #runPackages! TestRunnerCommandLineHandler removeSelector: #packages! TestRunnerCommandLineHandler removeSelector: #addPackagesMatchingRegex:to:! TestRunnerCommandLineHandler removeSelector: #addPackagesMatchingGlob:to:! TestRunnerCommandLineHandler removeSelector: #addPackagesMatching:to:! TestRunnerCommandLineHandler removeSelector: #activate! TestRunnerCommandLineHandler class removeSelector: #description! TestRunnerCommandLineHandler class removeSelector: #commandName! Smalltalk globals removeClassNamed: #TestRunnerCommandLineHandler! EyeInspector removeSelector: #okToChange! "HudsonBuildTools20"! "Spec-Inspector"! "Spec-Layout"! "Spec-Tests"! ----End fileIn----! ----QUIT----an Array(16 July 2013 5:05:25 pm) Pharo.image priorSource: 11558969! ----STARTUP----an Array(16 July 2013 5:15:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 July 2013 5:15:58 pm) Pharo-30275.image priorSource: 11582834! ----STARTUP----an Array(17 July 2013 7:44:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/17/2013 19:40' prior: 45113701! commentForCurrentUpdate ^ '7300 Finder raise an error on asking for implementors https://pharo.fogbugz.com/f/cases/7300 10348 GroupAlreadyExists vs. GroupsAlreadyExists confusion https://pharo.fogbugz.com/f/cases/10348 11180 Add a filter to the config browser https://pharo.fogbugz.com/f/cases/11180 11172 notEmpty should be isNotEmpty https://pharo.fogbugz.com/f/cases/11172 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/17/2013 19:41'! script112 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.24.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1521.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.830.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-StephaneDucasse.36.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.373.mcz OpalCompiler-Tests-MarcusDenker.192.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.133.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.873.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1177.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/17/2013 19:41'! update30276 "self new update30276" self withUpdateLog: '7300 Finder raise an error on asking for implementors https://pharo.fogbugz.com/f/cases/7300 10348 GroupAlreadyExists vs. GroupsAlreadyExists confusion https://pharo.fogbugz.com/f/cases/10348 11180 Add a filter to the config browser https://pharo.fogbugz.com/f/cases/11180 11172 notEmpty should be isNotEmpty https://pharo.fogbugz.com/f/cases/11172 '. self loadTogether: self script112 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GroupsAlreadyExist commentStamp: '' prior: 0! A GroupsAlreadyExists is fired when a set of groups already exists firstGroup points to a correct group which was part of the set! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 43740206! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !FinderMethodNode methodsFor: 'private' stamp: 'MarcusDenker 7/17/2013 11:35' prior: 22138076! browseImplementors SystemNavigation new browseAllImplementorsOf: self item selector.! ! !GroupsAlreadyExist commentStamp: '' prior: 45148703! A GroupsAlreadyExists is fired when a set of groups already exists firstGroup points to a correct group which was part of the set! !GroupsAlreadyExist class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 1/24/2013 18:11'! groupName: groupName ^ self new groupName: groupName; yourself! ! !GroupsAlreadyExist methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/24/2013 18:11'! groupName ^ groupName! ! !GroupsAlreadyExist methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/24/2013 18:11'! groupName: anObject groupName := anObject! ! !Collection methodsFor: 'testing' stamp: 'MarcusDenker 7/17/2013 13:15'! isNotEmpty "Answer whether the receiver contains any elements." ^ self isEmpty not! ! !Collection methodsFor: 'testing' stamp: 'MarcusDenker 7/17/2013 13:16' prior: 19549524! notEmpty "Answer whether the receiver contains any elements." "use isNotEmpty for consistency with isEmpty" ^ self isEmpty not! ! !AbstractTool methodsFor: 'package' stamp: 'MarcusDenker 7/17/2013 15:08' prior: 17471698! addPackagesAsGroups: aCollection | name | name := WriteStream on: ''. aCollection ifNotEmpty: [| packages firstGroup | packages := aCollection sort: [:a :b | a name <= b name ]. packages do: [:package || group | [ group := self addPackagesAsGroup: {package}. ] on: GroupAlreadyExists do: [:ex | name nextPutAll: ex groupName; nextPut: Character cr. group := nil ]. firstGroup ifNil: [ group ifNotNil: [ firstGroup := group ]]]. name := name contents. name isEmpty ifFalse: [ (GroupsAlreadyExist groupName: name) signal ]. ^ firstGroup ]. ^ nil ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'actions' stamp: 'TorstenBergmann 7/17/2013 14:17' prior: 43755917! installConfiguration owner installConfiguration ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'actions' stamp: 'TorstenBergmann 7/17/2013 14:17' prior: 43756206! loadConfiguration owner loadConfiguration ! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'MarcusDenker 7/17/2013 15:08' prior: 17284222! addMatchingPackagesInGroups self selectedPackage ifNotNil: [:package || separatorIndex firstPartOfTheName packages | separatorIndex := package name indexOf: $- ifAbsent: [ package name size + 1]. firstPartOfTheName := package name copyFrom: 1 to: (separatorIndex - 1) . packages := self model packages select: [:each | each name beginsWith: firstPartOfTheName ]. [ ^ self addPackagesAsGroups: packages ] on: GroupsAlreadyExist do: [:ex | self alertGroupExisting: ex groupName. ^ nil ]]. ^ nil! ! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 45148931! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !MetacelloConfigurationBrowser class methodsFor: 'private accessing' stamp: 'TorstenBergmann 7/17/2013 13:44'! configurationSearchList ^ configurationSearchList ifNil: [ configurationSearchList := OrderedCollection new ].! ! !MetacelloConfigurationBrowser class methodsFor: 'specs' stamp: 'TorstenBergmann 7/17/2013 13:37' prior: 43796660! defaultSpec | delta searchBarOffset | searchBarOffset := 5 + StandardFonts defaultFont height + 10. delta := 25. ^ SpecLayout composed add: #configBrowserModel origin: 0@0 corner: 1@1 offsetOrigin: 0@searchBarOffset offsetCorner: 0@(delta negated); add: #toolbarModel origin: 0@1 corner: 1@1 offsetOrigin: 0@(delta negated) offsetCorner: 0@0; add: #configurationSearchField origin: 0@0 corner: 1@0 offsetOrigin: 0@0 offsetCorner: 0@searchBarOffset; yourself! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'TorstenBergmann 7/17/2013 14:18'! configurationSearchAccept: aString aString isEmptyOrNil ifTrue: [ self configBrowserModel configurationPattern: nil ] ifFalse: [ self configBrowserModel configurationPattern: ([ aString asRegexIgnoringCase ] on: RegexSyntaxError do: [ aString ])]. ! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'TorstenBergmann 7/17/2013 13:45'! configurationSearchField ^ SearchMorph new model: self; setIndexSelector: #configurationSearchAccept:; updateSelector: #configurationSearchAccept:; searchList: self class configurationSearchList; yourself! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/17/2013 14:18'! configurationPattern: aPattern "Sets a filter pattern" configurationPattern := aPattern. self configurationList items: (aPattern isNil ifTrue: [self configurations] ifFalse: [self configurations select: [ :each| configurationPattern search: each ]]). self updateList ! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/17/2013 13:58'! configurations configurations ifNil: [ configurations := self class retrieveConfigurationsFrom: self repository ]. ^configurations! ! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/17/2013 13:55' prior: 43753583! repository: aRepositoryUrl repository := aRepositoryUrl. self configurationList items: self configurations. self window ifNotNil: [:w | w title: aRepositoryUrl ]! ! GroupsAlreadyExists removeSelector: #groupName:! GroupsAlreadyExists removeSelector: #groupName! GroupsAlreadyExists class removeSelector: #groupName:! Smalltalk globals removeClassNamed: #GroupsAlreadyExists! "Collections-Abstract"! "GroupManager"! "Nautilus"! "Tools"! ----End fileIn----! ----QUIT----an Array(17 July 2013 7:44:58 pm) Pharo.image priorSource: 11583033! ----STARTUP----an Array(17 July 2013 7:55:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 July 2013 7:55:22 pm) Pharo-30276.image priorSource: 11601323! ----STARTUP----an Array(18 July 2013 10:50:29 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/18/2013 10:47' prior: 45137765! commentForCurrentUpdate ^ '11184 ReleaseTest testUndeclaredFailed: for configurationSearchList https://pharo.fogbugz.com/f/cases/11184 11178 OCUnknownSelectorWarning(OCSemanticWarning)>>errorCode raises a DNU https://pharo.fogbugz.com/f/cases/11178 11171 ClassOrganization >> #hasComment is wrong https://pharo.fogbugz.com/f/cases/11171 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/18/2013 10:48'! script113 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.31.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1521.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.38.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.830.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.376.mcz OpalCompiler-Tests-MarcusDenker.192.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.873.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1179.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/18/2013 10:48'! update30277 "self new update30277" self withUpdateLog: '11184 ReleaseTest testUndeclaredFailed: for configurationSearchList https://pharo.fogbugz.com/f/cases/11184 11178 OCUnknownSelectorWarning(OCSemanticWarning)>>errorCode raises a DNU https://pharo.fogbugz.com/f/cases/11178 11171 ClassOrganization >> #hasComment is wrong https://pharo.fogbugz.com/f/cases/11171 '. self loadTogether: self script113 merge: false. self flushCaches. ! ! "ScriptLoader30"! !STCommandLineHandler commentStamp: '' prior: 45082814! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !FileCompilerRequestor commentStamp: '' prior: 0! I am an Object used to interact with the OpalCompiler. I keep a reference to the original input so that error messages can be properly analyzed later-on.! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 45152445! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !ClassOrganization methodsFor: 'testing' stamp: 'MarcusDenker 7/17/2013 14:29' prior: 42047693! hasComment ^ self comment isEmptyOrNil not ! ! !STCommandLineHandler commentStamp: '' prior: 45167115! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !STCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 16:20' prior: 45085329! handleError: error reference: aReference "Print a header before failing on an errro / syntax notification from the the script loaded by the given request" | fileReference | "We ignore warnings for now" (error isKindOf: OCSemanticWarning) ifTrue: [ ^ error pass ]. "try to get the proper file" fileReference := aReference. ((error isKindOf: OCSemanticError) and: [ error requestor isNotNil ]) ifTrue: [ fileReference := error requestor fileReference ]. "spit out a warning if in headless mode, otherwise a debugger will popup" Smalltalk isHeadless ifTrue: [ self inform: 'Errors in script loaded from ', fileReference fullName ]. "for syntax errors we can use the default action" (error isKindOf: SyntaxErrorNotification) ifTrue: [ ^ error defaultAction ]. (error isKindOf: OCSemanticError) ifTrue: [ self class printCompilerWarning: error. ^ error resume: error defaultAction ]. "otherwise resignal it" error pass.! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/17/2013 16:21' prior: 45086122! handleErrorsDuring: aBlock reference: aReference aBlock on: Error, OCSemanticWarning, OCSemanticError do: [ :e | self handleError: e reference: aReference ]! ! !STCommandLineHandler methodsFor: 'installing' stamp: 'CamilloBruni 7/17/2013 15:08' prior: 45086382! installSourceFile: aReference "Install the the source file given by aFileReference" | codeImporter | " parse the code given in the source file" aReference readStreamDo: [ :stream | self handleErrorsDuring: [ codeImporter := CodeImporter fileStream: stream. codeImporter skipShebang parseDeclarations ] reference: aReference ]. "evaluate the declarations in a second step to allow for properly closing the source file stream" self handleErrorsDuring: [ codeImporter evaluate ] reference: aReference.! ! !OCSemanticWarning methodsFor: 'accessing - compatibility' stamp: 'CamilloBruni 7/17/2013 15:37' prior: 45068621! errorCode self requestor ifNil: [ ^ self node methodNode asString ]. ^ self requestor contents! ! !FileCompilerRequestor commentStamp: '' prior: 45167607! I am an Object used to interact with the OpalCompiler. I keep a reference to the original input so that error messages can be properly analyzed later-on.! !FileCompilerRequestor class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference: aFileReference ^ self new fileReference: aFileReference; yourself! ! !FileCompilerRequestor class methodsFor: 'instance creation' stamp: 'CamilloBruni 7/17/2013 15:08'! fileStream: fileStream ^ self fileReference: fileStream name asFileReference! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! contents ^ contents! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! contents: anObject contents := anObject! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:45'! failBlock ^ [ :exception | exception pass ]! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference ^ fileReference! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/10/2013 16:12'! fileReference: anObject fileReference := anObject! ! !FileCompilerRequestor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 15:38'! initialize interactive := false.! ! !FileCompilerRequestor methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 15:38'! interactive ^ interactive! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 15:38'! interactive: aBoolean interactive := aBoolean! ! !FileCompilerRequestor methodsFor: 'interactive error protocol' stamp: 'CamilloBruni 7/10/2013 18:46'! notify: message at: location in: code self flag: #hack. "Should use the new OPalWarnings directly instead of recreating a SyntaxErrorNotification" SyntaxErrorNotification inClass: STCommandLineHandler category: nil withCode: code doitFlag: nil errorMessage: message location: location.! ! !FileCompilerRequestor methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 15:29'! text "compatibility method for the method installer" ^ self contents! ! !CodeImporter methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 16:03' prior: 19485553! file: aFileStream self readStream: aFileStream. self selectTextConverterForCode. self requestor: (FileCompilerRequestor fileStream: aFileStream).! ! !MethodDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/17/2013 15:23' prior: 26371432! import ^ self importFor: nil! ! !MethodDeclaration methodsFor: 'importing' stamp: 'CamilloBruni 7/17/2013 15:30'! importFor: requestor (self existsBehavior) ifFalse: [ self error: ('Cannot install method in unexistent behavior {1}' format: { behaviorName asString } ) ]. requestor ifNotNil: [ requestor contents ifNil: [ requestor contents: contents ]]. ^self targetClass compile: contents classified: categoryName withStamp: stamp notifying: requestor! ! !MetacelloConfigurationBrowser commentStamp: 'StephaneDucasse 8/10/2010 21:09' prior: 45167858! A MetacelloConfigurationBrowser is simple tool to browse Metacello configurations published at http://www.squeaksource.com/MetaRepoForPharoXX where XX denotes different pharo versions. MetaRepoForPharo1.0 acts as a distribution of all the packages/projects that can be loaded in Pharo1.0. We are sorry for the name but the source limits the length of the project name: The full name is MetacelloRepositoriesForPharoXX. Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. ! !MetacelloConfigurationBrowser class methodsFor: 'private accessing' stamp: 'CamilloBruni 7/17/2013 22:21' prior: 45153127! configurationSearchList ^ configurationSearchList ifNil: [ configurationSearchList := OrderedCollection new ].! ! STCommandLineRequestor removeSelector: #notify:at:in:! STCommandLineRequestor removeSelector: #interactive! STCommandLineRequestor removeSelector: #fileReference:! STCommandLineRequestor removeSelector: #fileReference! STCommandLineRequestor removeSelector: #failBlock! STCommandLineRequestor removeSelector: #contents:! STCommandLineRequestor removeSelector: #contents! STCommandLineRequestor class removeSelector: #fileReference:! Smalltalk globals removeClassNamed: #STCommandLineRequestor! STCommandLineHandler removeSelector: #createCompileRequestor:! STCommandLineHandler removeSelector: #compilerExpectionClass! "CodeImport"! "NewClassOrganizer"! "OpalCompiler-Core"! "System-CommandLine"! "Tools"! ----End fileIn----! ----QUIT----an Array(18 July 2013 10:51:11 am) Pharo.image priorSource: 11601522! ----STARTUP----an Array(18 July 2013 11:02:27 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 11:02:27 am) Pharo-30277.image priorSource: 11621491! ----STARTUP----an Array(18 July 2013 11:36:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/18/2013 11:28' prior: 45156255! commentForCurrentUpdate ^ '11029 #testUnknownProcesses failing on build server https://pharo.fogbugz.com/f/cases/11029 11181 Clean up some dead code in Categorizer and subclass + ClassCategoreader https://pharo.fogbugz.com/f/cases/11181 11183 #halt cannot be properly debugged inside #ensure: blocks https://pharo.fogbugz.com/f/cases/11183 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/18/2013 11:28'! script114 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1523.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.833.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.376.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.347.mcz SlotTests-MarcusDenker.44.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.875.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.588.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1179.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/18/2013 11:29'! update30278 "self new update30278" self withUpdateLog: '11029 #testUnknownProcesses failing on build server https://pharo.fogbugz.com/f/cases/11029 11181 Clean up some dead code in Categorizer and subclass + ClassCategoreader https://pharo.fogbugz.com/f/cases/11181 11183 #halt cannot be properly debugged inside #ensure: blocks https://pharo.fogbugz.com/f/cases/11183 '. self loadTogether: self script114 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KeyChain commentStamp: '' prior: 42371671! A KeyChain is a holder for username/password. It can be queried by the system to prevent the user to be forced to set his or her password each time. keys have this structure: |- group1 (by example squeaksource) -> (username -> password) |- group2 (by example smalltalkhub) -> (username -> password)! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'MarcusDenker 4/29/2013 15:03' prior: 45047217! testMethodSourceNodeAtPC self assert: (((Object>>#halt) sourceNodeForPC: 22) isKindOf: RBMessageNode). ! ! !MethodMapTests methodsFor: 'testing - source mapping' stamp: 'md 1/17/2013 16:47' prior: 45047436! testSimpleSourceMapping | method range highlight | method := Object>>('ha', 'lt') asSymbol. range := (DebuggerMethodMapOpal forMethod: (self compileMethod: method)) rangeForPC: 23. highlight := method sourceCode copyFrom: range first to: range last. self assert: highlight equals: 'now'. ! ! !Exception methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 21:24' prior: 21330115! signalerContext "Find the first sender of signal(:), the first context which is neither for an instance method nor for a class side method of Exception (or subclass). This will make sure that the same context is found for both, `Error signal` and `Error new signal`" ^ signalContext findContextSuchThat: [ :context | (context receiver == self or: [ context receiver == self class ]) not ]! ! !InstructionStream methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 22:02' prior: 23729041! nextPc: currentByte "Answer the pc of the next bytecode following the current one, given the current bytecode.." | type | type := currentByte // 16. "extensions" ^ type = 8 ifTrue: [pc + (#(2 2 2 2 3 2 2 1 1 1 2 1 3 3 3 4) at: currentByte \\ 16 + 1)] ifFalse: [ "long jumps" type = 10 ifTrue: [pc + 2] ifFalse: [pc + 1]]! ! !InstructionStream methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 22:02' prior: 23729461! pc: anInteger pc := anInteger! ! !InstructionStream methodsFor: 'scanning' stamp: 'CamilloBruni 7/17/2013 22:03' prior: 23720543! peekInstruction "Return the next bytecode instruction as a message that an InstructionClient would understand. The pc remains unchanged." | currentPc instruction | currentPc := self pc. instruction := self nextInstruction. self pc: currentPc. ^ instruction! ! !InstructionStream methodsFor: 'scanning' stamp: 'CamilloBruni 7/17/2013 22:03' prior: 23721562! selectorToSendOrSelf "If this instruction is a send, answer the selector, otherwise answer self." | byte byte2 | byte := self method at: pc. byte < 131 ifTrue: [^self]. byte >= 176 ifTrue: [ "special byte or short send" byte >= 208 ifTrue: [^self method literalAt: (byte bitAnd: 15) + 1] ifFalse: [^Smalltalk specialSelectorAt: byte - 176 + 1]] ifFalse: [ byte <= 134 ifTrue: [ byte2 := self method at: pc + 1. byte = 131 ifTrue: [^self method literalAt: byte2 \\ 32 + 1]. byte = 132 ifTrue: [ byte2 < 64 ifTrue: [^self method literalAt: (self method at: pc + 2) + 1]] . byte = 133 ifTrue: [^self method literalAt: byte2 \\ 32 + 1]. byte = 134 ifTrue: [^self method literalAt: byte2 \\ 64 + 1]]]! ! !InstructionStream methodsFor: 'scanning' stamp: 'CamilloBruni 7/17/2013 22:04' prior: 23722383! skipBackBeforeJump "Assuming that the receiver is positioned jast after a jump, skip back one or two bytes, depending on the size of the previous jump instruction." | strm short | strm := InstructionStream on: self method. (strm scanFor: [ :byte | ((short := byte between: 152 and: 159) or: [byte between: 168 and: 175]) and: [strm pc = (short ifTrue: [pc-1] ifFalse: [pc-2])]]) ifFalse: [self error: 'Where''s the jump??']. self jump: (short ifTrue: [-1] ifFalse: [-2]). ! ! !InstructionStream methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 22:04' prior: 23724160! willSend "Answer whether the next bytecode is a message-send." | byte | byte := self method at: pc. ^byte >= 131 and: [ "special send or short send" byte >= 176 or: [ "long sends" byte <= 134]]! ! !InstructionStream methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 22:07' prior: 23724436! willStore "Answer whether the next bytecode is a store or store-pop" | byte | byte := self method at: pc. ^(byte between: 96 and: 142) and: [ "96 103 storeAndPopReceiverVariableBytecode" "104 111 storeAndPopTemporaryVariableBytecode" byte <= 111 or: [ "129 extendedStoreBytecode" byte >= 129 and: [ "130 extendedStoreAndPopBytecode" byte <= 130 or: [( "132 doubleExtendedDoAnythingBytecode" byte = 132 and: [ (self method at: pc+1) >= 160 ]) or: [ "141 storeRemoteTempLongBytecode" byte = 141 or: [ "142 storeAndPopRemoteTempLongBytecode" byte = 142]]]]]]! ! !InstructionStream methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 22:08' prior: 23725111! willStorePop "Answer whether the next bytecode is a store-pop." | byte | byte := self method at: pc. "130 extendedStoreAndPopBytecode" ^ byte = 130 or: [ "142 storeAndPopRemoteTempLongBytecode" byte = 142 or: [ "96 103 storeAndPopReceiverVariableBytecode" "104 111 storeAndPopTemporaryVariableBytecode" byte between: 96 and: 111 ]]! ! !Halt methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 21:24'! signalerContext "specialized version to find the proper context to open the debugger on. This will find the first context whose method is no longer on Halt or Halt class nor is #halt method iteself." ^ signalContext findContextSuchThat: [ :context | (context receiver == self or: [ (context receiver == self class) or: [ context method selector = #halt ]]) not ]! ! !MethodContext methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:57' prior: 26361610! instVarAt: index put: value index = 3 ifTrue: [ self stackp: value. ^ value]. ^ super instVarAt: index put: value! ! !MethodContext methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:58' prior: 26362905! isHandlerContext "is this context for method that is marked?" ^method primitive = 199! ! !MethodContext methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:58' prior: 26363075! isUnwindContext "is this context for method that is marked?" ^method primitive = 198! ! !MethodContext methodsFor: 'printing' stamp: 'CamilloBruni 7/17/2013 21:58' prior: 26359252! printDetails: stream "Put my class>>selector and instance variables and arguments and temporaries on the stream. Protect against errors during printing." | errorMessage string position | self printOn: stream. stream cr. stream tab; nextPutAll: 'Receiver: '. errorMessage := '<>'. stream nextPutAll: ([receiver printStringLimitedTo: 90] ifError: [errorMessage]). stream cr; tab; nextPutAll: 'Arguments and temporary variables: '; cr. string := [(self tempsAndValuesLimitedTo: 80 indent: 2) padRightTo:1 with: $x] ifError: [errorMessage]. stream nextPutAll: (string allButLast). stream cr; tab; nextPutAll: 'Receiver''s instance variables: '; cr. position := stream position. [receiver longPrintOn: stream limitedTo: 80 indent: 2] ifError: [ stream nextPutAll: errorMessage]. position = stream position ifTrue: ["normal printString for an Array (it has no inst vars)" stream nextPutAll: ([receiver printStringLimitedTo: 90] ifError: [errorMessage])]. stream peekLast == Character cr ifFalse: [stream cr].! ! !MethodContext methodsFor: 'printing' stamp: 'CamilloBruni 7/17/2013 21:59' prior: 26360265! printOn: aStream self outerContext ifNil: [super printOn: aStream] ifNotNil: [ :outerContext | aStream nextPutAll: closureOrNil printString,' in '. outerContext printOn: aStream ]! ! !MethodContext methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 22:00' prior: 26360538! pushArgs: arguments from: senderContext "Helps simulate action of the value primitive for closures. This is used by ContextPart>>runSimulated:contextAtEachStep:" closureOrNil ifNil: [self error: 'context needs a closure!!'] ifNotNil: [ "See BlockClosure>>asContextWithSender:" stackp ~= (closureOrNil numArgs + closureOrNil numCopiedValues) ifTrue: [ self error: 'stack pointer is incorrect!!' ]]. 1 to: closureOrNil numArgs do: [:i | self at: i put: (arguments at: i)]. sender := senderContext! ! !MethodContext methodsFor: 'instruction decoding (closures)' stamp: 'CamilloBruni 7/17/2013 22:00' prior: 26358353! pushConsArrayWithElements: numElements | array | array := Array new: numElements. numElements to: 1 by: -1 do: [ :i | array at: i put: self pop ]. self push: array! ! !MethodContext methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 22:00' prior: 26363245! receiver: anObject receiver := anObject! ! !MethodContext methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 22:01' prior: 26361796! setSender: newSender receiver: newReceiver method: newMethod arguments: arguments "Create the receiver's initial state." sender := newSender. receiver := newReceiver. method := newMethod. closureOrNil := nil. pc := method initialPC. self stackp: method numTemps. 1 to: arguments size do: [ :i | self at: i put: (arguments at: i)]! ! !MethodContext methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 22:01' prior: 26362139! setSender: newSender receiver: newReceiver method: newMethod closure: newClosure startpc: startpc "Create the receiver's initial state." sender := newSender. receiver := newReceiver. method := newMethod. closureOrNil := newClosure. pc := startpc. stackp := 0! ! !MethodContext methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 22:01' prior: 26363502! swapReceiver: newReceiver receiver := newReceiver! ! !Cookie methodsFor: 'initialize' stamp: 'MarcusDenker 7/18/2013 11:23' prior: 20222925! initialize "Initialization code for Cookie" super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !MCHttpRepository methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 23:21' prior: 36413271! user self userAndPasswordFromSettingsDo: [:usr :pwd | ^usr]. "not in settings" user isEmptyOrNil ifFalse: [ ^user ]. #UserManager asClassIfPresent: [ :userManager | (userManager default currentUser userNamePasswordFor: self keyChainGroupSelector) ifNotNil: [ :usr | ^ usr username ]]. ^ ''! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 23:20' prior: 38838975! fullName: aString fullName := aString. #UserManager asClassIfPresent: [ :userManager | userManager default currentUser setUserName: aString forGroup: #author ].! ! !Author methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 23:20' prior: 38839233! fullNamePerSe "Answer the currently-prevailing author full name, such as it is, empty or not" #UserManager asClassIfPresent: [ :userManager | ^ userManager default currentUser userNameFor: #author ]. ^ fullName! ! !ContextPart methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 21:51' prior: 20149694! arguments "returns the arguments of a message invocation" | arguments numargs | numargs := self method numArgs. arguments := Array new: numargs. 1 to: numargs do: [ :i | arguments at: i put: (self tempAt: i) ]. ^ arguments! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:29' prior: 20184930! bottomContext "Return the last context (the first context invoked) in my sender chain" ^ self findContextSuchThat: [ :context | context sender isNil]! ! !ContextPart methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:31' prior: 20204649! canHandleSignal: exception "Sent to handler (on:do:) contexts only. If my exception class (first arg) handles exception then return true, otherwise forward this message to the next handler context. If none left, return false (see nil>>canHandleSignal:)" ^ ((self exceptionClass handles: exception) and: [ self exceptionHandlerIsActive ]) or: [ self nextHandlerContext canHandleSignal: exception ]. ! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:47' prior: 20155262! closureCopy: numArgs copiedValues: anArray "Distinguish a block of code from its enclosing method by creating a BlockClosure for that block. The compiler inserts into all methods that contain blocks the bytecodes to send the message closureCopy:copiedValues:. Do not use closureCopy:copiedValues: in code that you write!! Only the compiler can decide to send the message closureCopy:copiedValues:. Fail if numArgs is not a SmallInteger. Optional. No Lookup. See Object documentation whatIsAPrimitive." ^BlockClosure outerContext: self startpc: pc + 2 numArgs: numArgs copiedValues: anArray! ! !ContextPart methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 21:27' prior: 20189247! completeCallee: aContext "Simulate the execution of bytecodes until a return to the receiver." | context current nextContext | context := aContext. [ context == current or: [ context hasSender: self ]] whileTrue: [ current := context. nextContext := context quickStep. nextContext ifNil: [ self halt ]. context := nextContext ]. ^self stepToSendOrReturn! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:51' prior: 20192374! copyTo: aContext blocks: dict "Copy self and my sender chain down to, but not including, aContext. End of copied chain will have nil sender. BlockContexts whose home is also copied will point to the copy. However, blockContexts that are not on the stack but may be later will not have their home pointing in the new copied thread. So an error will be raised if one of these tries to return directly to its home." | copy | self == aContext ifTrue: [^ nil]. copy := self copy. dict at: self ifPresent: [ :blocks | blocks do: [ :block | block privHome: copy ]]. self sender ifNotNil: [ copy privSender: (self sender copyTo: aContext blocks: dict)]. ^ copy! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:34' prior: 20193099! cut: aContext "Cut aContext and its senders from my sender chain" | context callee | context := self. [ context == aContext ] whileFalse: [ callee := context. context := context sender. context ifNil: [ aContext ifNotNil: [ self error: 'aContext not a sender' ]]]. callee privSender: nil. ! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:42' prior: 20166808! depthBelow: aContext "Answer how many calls there are between this and aContext." | context depth | context := self. depth := 0. [ context == aContext or: [ context == nil ]] whileFalse: [ context := context sender. depth := depth + 1 ]. ^ depth! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:52' prior: 20193455! doPrimitive: primitiveIndex method: method receiver: receiver args: arguments "Simulate a primitive method whose index is primitiveIndex. The simulated receiver and arguments are given as arguments to this message. Any primitive which provikes execution needs to be intercepted and simulated to avoid execution running away." | value | "Simulation guard" "If successful, push result and return resuming context, else ^ PrimitiveFailToken" " (primitiveIndex = 19) ifTrue: [Smalltalk tools debugger openContext: self label:'Code simulation error' contents: nil]. " primitiveIndex = 83 "Object>>perform:[with:...]" ifTrue: [^self send: arguments first to: receiver with: arguments allButFirst super: false]. primitiveIndex = 84 "Object>>perform:withArguments:" ifTrue: [^self send: arguments first to: receiver with: (arguments at: 2) super: false]. primitiveIndex = 188 ifTrue: [ arguments size = 2 ifTrue: [ "Object>>withArgs:executeMethod:" ^MethodContext sender: self receiver: receiver method: (arguments at: 2) arguments: (arguments at: 1) ]. arguments size = 3 ifTrue: [ "CompiledMethod class >> #receiver:withArguments:executeMethod:" ^MethodContext sender: self receiver: (arguments at: 1) method: (arguments at: 3) arguments: (arguments at: 2) ] ]. primitiveIndex = 189 ifTrue: [ "Object >> (#with:)*executeMethod" ^MethodContext sender: self receiver: receiver method: arguments last arguments: arguments allButLast ]. "Closure primitives" (primitiveIndex = 200 and: [receiver == self]) ifTrue: "ContextPart>>closureCopy:copiedValues:; simulated to get startpc right" [^self push: (BlockClosure outerContext: receiver startpc: pc + 2 numArgs: arguments first copiedValues: arguments last)]. ((primitiveIndex between: 201 and: 205) "BlockClosure>>value[:value:...]" or: [primitiveIndex between: 221 and: 222]) ifTrue: "BlockClosure>>valueNoContextSwitch[:]" [^receiver simulateValueWithArguments: arguments caller: self]. primitiveIndex = 206 ifTrue: "BlockClosure>>valueWithArguments:" [^receiver simulateValueWithArguments: arguments first caller: self]. primitiveIndex = 120 ifTrue:[ "FFI method" value := method literals first tryInvokeWithArguments: arguments. ] ifFalse:[ value := self simulatePrimitive: primitiveIndex in: method receiver: receiver arguments: arguments ]. ^ (self isFailToken: value) ifTrue: [value] ifFalse: [self push: value] ! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:44' prior: 20167131! errorReportOn: stream "Write a detailed error report on the stack (above me) on a stream. For both the error file, and emailing a bug report. Suppress any errors while getting printStrings. Limit the length." | stackDepth aContext startPos | stream print: Date today; space; print: Time now; cr. stream cr. stream nextPutAll: 'VM: '; nextPutAll: Smalltalk platform platformName asString; nextPutAll: ' - '; nextPutAll: Smalltalk platform platformSubtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk os version asString; nextPutAll: ' - '; nextPutAll: Smalltalk vm version asString; cr. stream nextPutAll: 'Image: '; nextPutAll: SystemVersion current version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'; cr. stream cr. "Note: The following is an open-coded version of ContextPart>>stackOfSize: since this method may be called during a low space condition and we might run out of space for allocating the full stack." stackDepth := 0. startPos := stream position. aContext := self. [ aContext notNil and: [ (stackDepth := stackDepth + 1) < 40 ]] whileTrue: [ "variable values" aContext printDetails: stream. stream cr. aContext := aContext sender ]. stream cr; nextPutAll: '--- The full stack ---'; cr. aContext := self. stackDepth := 0. [ aContext == nil ] whileFalse: [ stackDepth := stackDepth + 1. stackDepth = 40 ifTrue: [ stream nextPutAll: ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'; cr ]. "just class>>selector" stream print: aContext; cr. stream position > (startPos+150000) ifTrue: [ stream nextPutAll: '...etc...'. "exit early" ^ self]. stackDepth > 200 ifTrue: [ stream nextPutAll: '-- and more not shown --'. ^ self ]. aContext := aContext sender ].! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:28' prior: 20187794! exceptionClass "handlercontext only. access temporaries from BlockClosure>>#on:do:" ^self tempAt: 1 ! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:28' prior: 20187990! exceptionHandlerBlock "handlercontext only. access temporaries from BlockClosure>>#on:do:" ^self tempAt: 2 ! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:28' prior: 20188193! exceptionHandlerIsActive "handlercontext only. access temporaries from BlockClosure>>#on:do:" ^self tempAt: 3 ! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:52' prior: 20188399! exceptionHandlerIsActive: aBoolean "handlercontext only. access temporaries from BlockClosure>>#on:do:" self tempAt: 3 put: aBoolean ! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:29' prior: 20185897! findContextSuchThat: testBlock "Search self and my sender chain for first one that satisfies testBlock. Return nil if none satisfy" | context | context := self. [ context isNil ] whileFalse: [ (testBlock value: context) ifTrue: [ ^ context ]. context := context sender ]. ^ nil! ! !ContextPart methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:31' prior: 20205131! findNextHandlerContextStarting "Return the next handler marked context, returning nil if there is none. Search starts with self and proceeds up to nil." | context | context := self. [ context isHandlerContext ifTrue: [ ^ context ]. (context := context sender) == nil ] whileFalse. ^ nil! ! !ContextPart methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:32' prior: 20205496! findNextUnwindContextUpTo: aContext "Return the next unwind marked above the receiver, returning nil if there is none. Search proceeds up to but not including aContext." | context | context := self. [ (context := context sender) == nil or: [ context == aContext ] ] whileFalse: [ context isUnwindContext ifTrue: [ ^context ]]. ^nil! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:30' prior: 20186229! findSecondToOldestSimilarSender "Search the stack for the second-to-oldest occurance of self's method. Very useful for an infinite recursion. Gets back to the second call so you can see one complete recursion cycle, and how it was called at the beginning." | secondContext context lastContext | secondContext := self. context := self. [ lastContext := context findSimilarSender. lastContext isNil ] whileFalse: [ secondContext := context. context := lastContext. ]. ^ secondContext ! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:30' prior: 20186708! findSimilarSender "Return the closest sender with the same method, return nil if none found" | method | method := self method. ^ self sender findContextSuchThat: [ :context | context method == method ]! ! !ContextPart methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:33' prior: 20205911! handleSignal: exception "Sent to handler (on:do:) contexts only. If my exception class (first arg) handles exception then execute my handle block (second arg), otherwise forward this message to the next handler context. If none left, execute exception's defaultAction (see nil>>handleSignal:)." | value | ((self exceptionClass handles: exception) and: [self exceptionHandlerIsActive]) ifFalse: [ ^ self nextHandlerContext handleSignal: exception ]. exception privHandlerContext: self contextTag. "disable self while executing handle block" self exceptionHandlerIsActive: false. value := [ self exceptionHandlerBlock cull: exception ] ensure: [ self exceptionHandlerIsActive: true ]. "return from self if not otherwise directed in handle block" self return: value. ! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:31' prior: 20186962! hasContext: aContext "Answer whether aContext is me or one of my senders" ^ (self findContextSuchThat: [ :context | context == aContext ]) notNil! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:47' prior: 20155929! hasSender: context "Answer whether the receiver is strictly above context on the stack." | senderContext | self == context ifTrue: [^false]. senderContext := sender. [senderContext == nil] whileFalse: [ senderContext == context ifTrue: [^true]. senderContext := senderContext sender]. ^false! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:34' prior: 20196122! insertSender: aContext "Insert aContext and its sender chain between me and my sender. Return new callee of my original sender." | context | context := aContext bottomContext. context privSender: self sender. self privSender: aContext. ^ context! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:45' prior: 20168960! longStack "Answer a String showing the top 100 contexts on my sender chain." ^ String streamContents: [ :stream | (self stackOfSize: 100) do: [ :item | stream print: item; cr ]]! ! !ContextPart methodsFor: 'mirror primitives' stamp: 'CamilloBruni 7/17/2013 21:40' prior: 20182394! objectSize: anObject "Answer the number of indexable variables in the argument anObject without sending it a message. This mimics the action of the VM when it fetches an object's variable size. Used to simulate the execution machinery by, for example, the debugger. Primitive. See Object documentation whatIsAPrimitive." "The number of indexable fields of fixed-length objects is 0" ^ 0! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:47' prior: 20157243! pop "Answer the top of the receiver's stack and remove the top of the stack." | value | value := self at: stackp. self stackp: stackp - 1. ^ value! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:45' prior: 20170030! print: anObject on: aStream "Safely print anObject in the face of direct ProtoObject subclasses" | title | (anObject class canUnderstand: #printOn:) ifTrue: [ ^ anObject printOn: aStream ]. title := anObject class name. aStream nextPutAll: (title first isVowel ifTrue: ['an '] ifFalse: ['a ']); nextPutAll: title! ! !ContextPart methodsFor: 'printing' stamp: 'CamilloBruni 7/17/2013 21:53' prior: 20183644! printDetails: stream "Put my class>>selector and arguments and temporaries on the stream. Protect against errors during printing." | string | self printOn: stream. stream cr; tab; nextPutAll: 'Arguments and temporary variables: '; cr. string := [ self tempsAndValuesLimitedTo: 80 indent: 2] ifError: [ '<>' ]. stream nextPutAll: string. stream peekLast == Character cr ifFalse: [ stream cr ].! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:48' prior: 20157461! push: value "Push value on the receiver's stack." self stackp: stackp + 1. self at: stackp put: value! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:35' prior: 20196705! push: numObjects fromIndexable: anIndexableCollection "Push the elements of anIndexableCollection onto the receiver's stack. Do not call directly. Called indirectly by {1. 2. 3} constructs." 1 to: numObjects do: [ :i | self push: (anIndexableCollection at: i)]! ! !ContextPart methodsFor: 'instruction decoding' stamp: 'CamilloBruni 7/17/2013 21:41' prior: 20177244! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize "Simulate the action of a 'closure copy' bytecode whose result is the new BlockClosure for the following code" | copiedValues | numCopied > 0 ifTrue: [ copiedValues := Array new: numCopied. numCopied to: 1 by: -1 do: [ :i | copiedValues at: i put: self pop ]] ifFalse: [ copiedValues := nil ]. self push: (BlockClosure outerContext: self startpc: pc numArgs: numArgs copiedValues: copiedValues). self jump: blockSize! ! !ContextPart methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 21:27' prior: 20189657! quickStep "If the next instruction is a send, just perform it. Otherwise, do a normal step." self willSend ifTrue: [ QuickStep := self ]. ^self step! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:46' prior: 20170595! releaseTo: caller "Remove information from the receiver and the contexts on its sender chain up to caller in order to break circularities." | contex senderContext | contex := self. [ contex == nil or: [ contex == caller ]] whileFalse: [ senderContext := contex sender. contex singleRelease. contex := senderContext ]! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:48' prior: 20158983! restart "Unwind thisContext to self and resume from beginning. Execute unwind blocks when unwinding. ASSUMES self is a sender of thisContext" | context unwindBlock | self isDead ifTrue: [self cannotReturn: nil to: self]. self privRefresh. context := thisContext. [ context := context findNextUnwindContextUpTo: self. context isNil ] whileFalse: [ (context tempAt: 2) ifNil:[ context tempAt: 2 put: true. unwindBlock := context tempAt: 1. thisContext terminateTo: context. unwindBlock value ]]. thisContext terminateTo: self. self jump. ! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:48' prior: 20159821! resume: value "Unwind thisContext to self and resume with value as result of last send. Execute unwind blocks when unwinding. ASSUMES self is a sender of thisContext" | context unwindBlock | self isDead ifTrue: [self cannotReturn: value to: self]. context := thisContext. [ context := context findNextUnwindContextUpTo: self. context isNil ] whileFalse: [ (context tempAt: 2) ifNil: [ context tempAt: 2 put: true. unwindBlock := context tempAt: 1. thisContext terminateTo: context. unwindBlock value ]]. thisContext terminateTo: self. ^ value ! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:49' prior: 20160439! resume: value through: firstUnwindContext "Unwind thisContext to self and resume with value as result of last send. Execute any unwind blocks while unwinding. ASSUMES self is a sender of thisContext." | context unwindBlock | self isDead ifTrue: [ self cannotReturn: value to: self ]. context := firstUnwindContext. [ context isNil ] whileFalse: [ (context tempAt: 2) ifNil: [ context tempAt: 2 put: true. unwindBlock := context tempAt: 1. thisContext terminateTo: context. unwindBlock value]. context := context findNextUnwindContextUpTo: self]. thisContext terminateTo: self. ^value ! ! !ContextPart methodsFor: 'instruction decoding' stamp: 'CamilloBruni 7/17/2013 21:41' prior: 20179604! return: value from: aSender "For simulation. Roll back self to aSender and return value from it. Execute any unwind blocks on the way. ASSUMES aSender is a sender of self" | newTop context | aSender isDead ifTrue: [ ^ self send: #cannotReturn: to: self with: {value} super: false ]. newTop := aSender sender. context := self findNextUnwindContextUpTo: newTop. context ifNotNil: [ ^ self send: #aboutToReturn:through: to: self with: {value. context} super: false] . self releaseTo: newTop. newTop ifNotNil: [ newTop push: value ]. ^ newTop ! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:54' prior: 20161922! return: value to: aSender "Simulate the return of value to aSender." self releaseTo: aSender. aSender ifNil: [^ nil]. ^ aSender push: value! ! !ContextPart methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 21:26' prior: 20189888! runSimulated: aBlock contextAtEachStep: block2 "Simulate the execution of the argument, aBlock, until it ends. aBlock MUST NOT contain an '^'. Evaluate block2 with the current context prior to each instruction executed. Answer the simulated value of aBlock." | current returnContext exception | aBlock hasMethodReturn ifTrue: [ self error: 'simulation of blocks with ^ can run loose' ]. current := [ aBlock on: Exception do: [ :ex | SimulationExceptionWrapper signalForException: ex ] ] asContext. returnContext := MethodContext sender: nil receiver: self home receiver method: self home method arguments: self home arguments. current pushArgs: Array new from: returnContext. [current == returnContext] whileFalse: [ block2 value: current. current := current step ]. exception := returnContext pop. exception class == SimulationExceptionWrapper ifTrue: [ ^ exception exception signal ]. ^ exception ! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:49' prior: 20162140! runUntilErrorOrReturnFrom: aSender "ASSUMES aSender is a sender of self. Execute self's stack until aSender returns or an unhandled exception is raised. Return a pair containing the new top context and a possibly nil exception. The exception is not nil if it was raised before aSender returned and it was not handled. The exception is returned rather than openning the debugger, giving the caller the choice of how to handle it." "Self is run by jumping directly to it (the active process abandons thisContext and executes self). However, before jumping to self we insert an ensure block under aSender that jumps back to thisContext when evaluated. We also insert an exception handler under aSender that jumps back to thisContext when an unhandled exception is raised. In either case, the inserted ensure and exception handler are removed once control jumps back to thisContext." | error context here topContext | here := thisContext. "Insert ensure and exception handler contexts under aSender" error := nil. context := aSender insertSender: (ContextPart contextOn: UnhandledError, Halt do: [:ex | error ifNil: [ "this is ugly but it fixes the side-effects of not sending an Unhandled error on Halt" error := (ex isKindOf: Halt) ifTrue: [ ex ] ifFalse: [ ex exception ]. topContext := thisContext. ex resumeUnchecked: here jump ] ifNotNil: [ ex pass ]]). context := context insertSender: (ContextPart contextEnsure: [ error ifNil: [ topContext := thisContext. here jump ]]). "Control jumps to self" self jump. "Control resumes here once above ensure block or exception handler is executed" ^ error ifNil: [ "No error was raised, remove ensure context by stepping until popped" [ context isDead ] whileFalse: [ topContext := topContext stepToCallee ]. {topContext. nil}] ifNotNil: [ "Error was raised, remove inserted above contexts then return signaler context" "remove above ensure and handler contexts" aSender terminateTo: context sender. {topContext. error}]. ! ! !ContextPart methodsFor: 'query' stamp: 'CamilloBruni 7/17/2013 21:31' prior: 20187543! secondFromBottom "Return the second from bottom of my sender chain" self sender ifNil: [ ^ nil ]. ^ self findContextSuchThat: [ :context | context sender sender isNil]! ! !ContextPart methodsFor: 'instruction decoding' stamp: 'CamilloBruni 7/17/2013 21:41' prior: 20180237! send: selector super: superFlag numArgs: numArgs "Simulate the action of bytecodes that send a message with selector, selector. The argument, superFlag, tells whether the receiver of the message was specified with 'super' in the source method. The arguments of the message are found in the top numArgs locations on the stack and the receiver just below them." | receiver arguments | arguments := Array new: numArgs. numArgs to: 1 by: -1 do: [ :i | arguments at: i put: self pop ]. receiver := self pop. " selector == #doPrimitive:method:receiver:args: ifTrue: [answer := receiver doPrimitive: (arguments at: 1) method: (arguments at: 2) receiver: (arguments at: 3) args: (arguments at: 4). self push: answer. ^self]. " QuickStep == self ifTrue: [ QuickStep := nil. ^ self quickSend: selector to: receiver with: arguments super: superFlag]. ^ self send: selector to: receiver with: arguments super: superFlag! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:54' prior: 20164247! send: selector to: receiver with: arguments super: superFlag "Simulate the action of sending a message with selector, selector, and arguments, args, to receiver. The argument, superFlag, tells whether the receiver of the message was specified with 'super' in the source method." | class method value context | class := superFlag ifTrue: [(self method literalAt: self method numLiterals) value superclass] ifFalse: [receiver class]. method := class lookupSelector: selector. method == nil ifTrue: [ ^ self send: #doesNotUnderstand: to: receiver with: (Array with: (Message selector: selector arguments: arguments)) super: superFlag ]. value := self tryPrimitiveFor: method receiver: receiver args: arguments. "primitive runs without failure?" (self isFailToken: value) ifFalse: [^ value]. (selector == #doesNotUnderstand: and: [ (class canUnderstand: #doesNotUnderstand: ) not ]) ifTrue: [ ^self error: 'Simulated message ', (arguments at: 1) selector, ' not understood']. "failure.. lets activate the method" context := self activateMethod: method withArgs: arguments receiver: receiver class: class. "check if activated method handles the error code (a first bytecode will be store into temp)" "long store temp" (context method at: context pc ) = 129 ifTrue: [ context at: context stackPtr put: value last ]. ^ context! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:36' prior: 20197611! setNumArgs: numArgs toMethod: theMethod "All that line is to change the argument count of a CompiledMethod header. The argument count is 4 bits starting in the 24 and finishign in 27. 16r787FFFFF is the hexa representation of a number that is all 1 and only those 4 bits in 0. Hence, when doing (theMethod header bitAnd: 16r787FFFFF) what we do is just to put zeros in those 4 bits. Now with the new argument size, we do bitShift: 24 and we obtain a 32 bits number with all zeros and just our 4 bits with the value we want. Since in the previous step we cleaned those 4 bits doing now a bitOr: with the second step, we have the result. " | xpc | theMethod objectAt: 1 put: (((theMethod header bitAnd: 2r01110000000000111111111111111111) bitOr: (numArgs bitShift: 24)) bitOr: (numArgs + 1 bitShift: 18)). xpc := theMethod initialPC. "long store temp" (theMethod at: xpc) = 129 ifTrue: [ theMethod at: xpc + 1 put: (16r40 + numArgs). theMethod at: xpc + 3 put: (16r10 + numArgs)]! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:46' prior: 20171279! shortStack "Answer a String showing the top ten contexts on my sender chain." ^ String streamContents: [ :stream | (self stackOfSize: 10) do: [ :item | stream print: item; cr]]! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:37' prior: 20198652! simulatePrimitive: primitiveIndex in: method receiver: receiver arguments: arguments | key simulator | key := primitiveIndex = 117 ifTrue: [ | literal | literal := method literalAt: 1. "primitive name, module name" {literal second. literal first}] ifFalse: [ primitiveIndex ]. simulator := self class specialPrimitiveSimulators at: key ifAbsent: [ "named primitives" ^ primitiveIndex = 117 ifTrue:[ self withoutPrimitiveTryNamedPrimitiveIn: method for: receiver withArgs: arguments. "this uses primitive 218, which doesn't works as expected... self tryNamedPrimitiveIn: method for: receiver withArgs: arguments " ] ifFalse:[ receiver tryPrimitive: primitiveIndex withArgs: arguments ]]. ^ simulator simulatePrimitiveFor: method receiver: receiver arguments: arguments context: self! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:46' prior: 20171537! singleRelease "Remove information from the receiver in order to break circularities." stackp == nil ifFalse: [ 1 to: stackp do: [ :i | self at: i put: nil ]]. sender := nil. pc := nil. ! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:46' prior: 20172073! stackOfSize: limit "Answer an OrderedCollection of the top 'limit' contexts on the receiver's sender chain." | stack context | stack := OrderedCollection new. stack addLast: (context := self). [(context := context sender) ~~ nil and: [stack size < limit]] whileTrue: [ stack addLast: context ]. ^ stack! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:37' prior: 20199534! stackPtr "For use only by the SystemTracer and the Debugger, Inspectors etc" ^ stackp! ! !ContextPart methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 21:25' prior: 20191155! stepToCallee "Step to callee or sender" | context | context := self. [ (context := context step) == self ] whileTrue. ^ context! ! !ContextPart methodsFor: 'system simulation' stamp: 'CamilloBruni 7/17/2013 21:25' prior: 20191360! stepToSendOrReturn "Simulate the execution of bytecodes until either sending a message or returning a value to the receiver (that is, until switching contexts)." | context | [ self willSend | self willReturn | self willStore ] whileFalse: [ context := self step. context == self ifFalse: [ self halt. "Caused by mustBeBoolean handling" ^context ]]! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:56' prior: 20172962! tempsAndValues "Return a string of the temporary variabls and their current values" ^ String streamContents: [ :aStream | self tempNames doWithIndex: [ :title :index | aStream nextPutAll: title; nextPut: $:; space; tab. self print: (self namedTempAt: index) on: aStream. aStream cr ]].! ! !ContextPart methodsFor: 'debugger access' stamp: 'CamilloBruni 7/17/2013 21:56' prior: 20173383! tempsAndValuesLimitedTo: sizeLimit indent: indent "Return a string of the temporary variabls and their current values" ^ String streamContents: [ :aStream | self tempNames doWithIndex: [ :title :index | indent timesRepeat: [ aStream tab ]. aStream nextPutAll: title; nextPut: $:; space; tab. aStream nextPutAll: ((self namedTempAt: index) printStringLimitedTo: (sizeLimit -3 -title size max: 1)). aStream cr ]].! ! !ContextPart methodsFor: 'controlling' stamp: 'CamilloBruni 7/17/2013 21:51' prior: 20165979! terminateTo: previousContext "Terminate all the Contexts between me and previousContext, if previousContext is on my Context stack. Make previousContext my sender." | currentContext sendingContext | (self hasSender: previousContext) ifTrue: [ currentContext := sender. [currentContext == previousContext] whileFalse: [ sendingContext := currentContext sender. currentContext terminate. currentContext := sendingContext ]]. sender := previousContext! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:39' prior: 20200404! tryNamedPrimitiveIn: aCompiledMethod for: aReceiver withArgs: arguments errorCode ifNotNil: [ "If errorCode is an integer other than -1 there was a problem with primitive 218, not with the external primitive itself. -1 indicates a generic failure (where errorCode should be nil) but errorCode = nil means primitive 218 is not implemented. So interpret -1 to mean the external primitive failed with a nil error code." errorCode isInteger ifTrue: [ errorCode = -1 ifTrue: [ errorCode := nil ] ifFalse: [ self primitiveFailed ]]. ^ self class primitiveFailTokenFor: errorCode ]. "Assume a nil error code implies the primitive is not implemented and fall back on the old code." "The primitive doesn't exist or there was an error. Hence, we follow another solution without the primitive" ^ self withoutPrimitiveTryNamedPrimitiveIn: aCompiledMethod for: aReceiver withArgs: arguments ! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:39' prior: 20201362! tryPrimitiveFor: method receiver: receiver args: arguments "If this method has a primitive index, then run the primitive and return its result. Otherwise (and also if the primitive fails) return PrimitiveFailToken, as an indication that the method should be activated and run as bytecodes." | primIndex | (primIndex := method primitive) = 0 ifTrue: [ ^ self class primitiveFailToken ]. ^ self doPrimitive: primIndex method: method receiver: receiver args: arguments! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:28' prior: 20188622! unwindBlock "unwindContext only. access temporaries from BlockClosure>>#ensure: and BlockClosure>>#ifCurtailed:" ^self tempAt: 1 ! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:28' prior: 20188827! unwindComplete "unwindContext only. access temporaries from BlockClosure>>#ensure: and BlockClosure>>#ifCurtailed:" ^self tempAt: 2 ! ! !ContextPart methodsFor: 'special context access' stamp: 'CamilloBruni 7/17/2013 21:56' prior: 20189035! unwindComplete: aBoolean "unwindContext only. access temporaries from BlockClosure>>#ensure: and BlockClosure>>#ifCurtailed:" self tempAt: 2 put: aBoolean ! ! !ContextPart methodsFor: 'private-exceptions' stamp: 'CamilloBruni 7/17/2013 21:34' prior: 20207126! unwindTo: aContext | context unwindBlock | context := self. [ (context := context findNextUnwindContextUpTo: aContext) isNil ] whileFalse: [ (context unwindComplete) ifNil: [ context unwindComplete: true. unwindBlock := context unwindBlock. unwindBlock value ]]. ! ! !ContextPart methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 21:39' prior: 20201903! withoutPrimitiveTryNamedPrimitiveIn: aCompiledMethod for: aReceiver withArgs: arguments "When using the debugger we want to run a method step by step. What what happens when we do a step into a CompiledMethod which has a primitive? If such a method is executed form outside the Debugger (normal scenario) the VM knows that such CompiledMethod has a primitive declaration and hence executes it. If it fails then it continues executing all the bytecode of the method. Otherwise, it just returns. Now, what is the problem with the Debugger? The problem is that if the primitive fail, we don't want that the VM directly executes all the remaining bytecodes of the method. Instead, we would like to go step by step witht he Debugger, just as happens with normal methods. To solve the mentioned problem, we use the following trick: We have the orignal compiled method (the one that has a primitive invokation), the receiver and the arguments. So the idea is to use a template compiled method that ONLY contains the primitive delcaration (it doesn't include all the smalltalk code after the primitive). #tryNamedPrimitiveTemplateMethod answers such a template method which looks like: tryNamedPrimitive ^ ContextPart primitiveFailToken' Since this method does not change its bytecodes for every invokation, we can reuse it for all methods with primitives. There are only 2 things we have to change in the template: the number of arguments and the primitive declaration (to use the correct primitive name and module name). Then what we do is to run that compiled method with the receiver and arguments we have. The result is that we will be invoking almost the same original method but a slighly different version that does not have the smalltalk part after the primitive and that in contrast is sends #primitiveFailToken. If this method invokation does not fail, then the Debugger continues debugging the sender of the primitive method. In this case, the step in is the same as step over. If the primitive fails, then the debugger continues executing the smalltalk part after the primitive method. In this case, step in is a real step in. " | theMethod | arguments size > 8 ifTrue: [ ^ self class primitiveFailToken ]. theMethod := self class tryNamedPrimitiveTemplateMethod. self setNumArgs: arguments size toMethod: theMethod. theMethod == nil ifTrue: [ ^ self class primitiveFailToken ]. self setNamedPrimitiveInformationFrom: aCompiledMethod toMethod: theMethod. theMethod flushCache. ^ theMethod valueWithReceiver: aReceiver arguments: arguments! ! !KeyChain commentStamp: '' prior: 45187280! A KeyChain is a holder for username/password. It can be queried by the system to prevent the user to be forced to set his or her password each time. keys have this structure: |- group1 (by example squeaksource) -> (username -> password) |- group2 (by example smalltalkhub) -> (username -> password)! !KeyChain methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 23:37' prior: 37907172! askPasswordForKeyChain: attempt | string | password ifNil: [ ^ nextLockTime := DateAndTime new + self timeBetweenUnlocks ]. string := (Smalltalk ui theme passwordEntryIn: StandardWindow new text: 'Password for the keychain for ', username asString ,' (', (self maxAttemptsNumber - attempt) asString ,' tries left)' title: 'Password request' entryText: ''). string ifNil: [ ^ self ]. (encryptor encrypt: string) = password ifFalse: [ self logCr: (encryptor encrypt: string). self logCr: password. ^ self ]. nextLockTime := DateAndTime new + self timeBetweenUnlocks.! ! !KeyChain methodsFor: 'private-UI' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24203804! bindings ^ groups! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24199226! groups ^ groups keys! ! !KeyChain methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24198815! initialize super initialize. groups := IdentityDictionary new. encryptor := SHA1Ecryptor new. encryptorDecryptor := DummyEcryptorDecryptor new. self lock. ! ! !KeyChain methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 23:38' prior: 24202946! isUnlocked: attempt nextLockTime > DateAndTime now ifTrue: [ ^ true ]. attempt = self maxAttemptsNumber ifTrue: [ ^ false ]. self askPasswordForKeyChain: attempt. ^ self isUnlocked: (attempt + 1).! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:36' prior: 24199435! lock nextLockTime := DateAndTime new! ! !KeyChain methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24203342! passwordFor: aUserName ^ self isUnlocked ifTrue: [ self decryptPassword: (groups at: aUserName) ]! ! !KeyChain methodsFor: 'encryption' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24198355! reEncryptKeysBased: aFormerBase groups associations do: [:assoc || oldUsernamePassword string | oldUsernamePassword := groups at: assoc key. string := encryptorDecryptor decrypt: oldUsernamePassword password base: aFormerBase. groups at: assoc key put: ( UsernamePassword username: oldUsernamePassword username password: (self encryptPassword: string) )]! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24199553! removeUserNamePasswordFor: aGroup ^ self isUnlocked ifTrue: [ groups removeKey: aGroup ]! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24199730! setEncryptorDecryptor: anEncryptorDecryptor self isUnlocked ifTrue: [ | oldDecryptor | oldDecryptor := encryptorDecryptor. encryptorDecryptor := anEncryptorDecryptor . groups associations do: [:assoc || oldUsernamePassword string | oldUsernamePassword := groups at: assoc key. string := oldDecryptor decrypt: oldUsernamePassword password base: password. groups at: assoc key put: ( UsernamePassword username: oldUsernamePassword username password: (self encryptPassword: string) )]]! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24200741! setUserName: user password: pass forGroup: group self isUnlocked ifTrue: [ groups at: group put: (UsernamePassword username: user password: (self encryptPassword: pass)). ^ true ]. ^ false! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24201052! setUserName: user password: pass forGroup: group withUnlockPassword: aString (encryptor encrypt: aString) = password ifTrue: [ groups at: group put: (UsernamePassword username: user password: (self encryptPassword: pass)). ^ true ]. ^ false! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24201428! setUserNamePassword: usernamePassword forGroup: group self isUnlocked ifTrue: [ groups at: group put: usernamePassword. ^ true ]. ^ false! ! !KeyChain methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 23:37' prior: 24203527! timeBetweenUnlocks ^ timeBetweenUnlocks ifNil: [ self defaultTimeBetweenUnlocks ]! ! !KeyChain methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 23:37' prior: 24203653! timeBetweenUnlocks: aDuration timeBetweenUnlocks := aDuration! ! !KeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 24201783! userNamePasswordFor: aGroup ^ self isUnlocked ifTrue: [ | oldUsernamePassword | oldUsernamePassword := groups at: aGroup ifAbsent: [ ^ nil ]. UsernamePassword username: oldUsernamePassword username password: (self decryptPassword: (oldUsernamePassword password)) ]! ! !Object methodsFor: '*Kernel-Exceptions-debugging' stamp: 'CamilloBruni 7/17/2013 20:08' prior: 45016714! halt "This is the typical message to use for inserting breakpoints during debugging." Halt now! ! !UnlockedKeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 54518478! setUserName: user password: pass forGroup: group self isUnlocked ifTrue: [ groups at: group put: (UsernamePassword username: user password: nil). ^ true ]. ^ false! ! !UnlockedKeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 54518773! setUserName: user password: pass forGroup: group withUnlockPassword: aString (encryptor encrypt: aString) = password ifTrue: [ groups at: group put: (UsernamePassword username: user password:nil). ^ true ]. ^ false! ! !UnlockedKeyChain methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 54519114! userNameFor: aGroup ^ self isUnlocked ifTrue: [ (groups at: aGroup ifAbsent: [ ^ nil ]) username ]! ! ClassCommentReader removeSelector: #setClassComment:! ClassCommentReader removeSelector: #scanFromNoCompile:! ClassCommentReader removeSelector: #importCodeFrom:! ClassBuilder removeSelector: #moveInstVarNamed:from:to:after:! ClassCategoryReader removeSelector: #importCodeFrom:! ClassCategoryReader removeSelector: #compileSourceCode:! Categorizer removeSelector: #moveCategory:to:! Categorizer removeSelector: #importCodeFrom:! BasicClassOrganizer removeSelector: #dateCommentLastSubmitted! "CodeImport"! "Kernel"! "KeyChain"! "Monticello"! "OpalCompiler-Tests"! "System-Support"! ----End fileIn----! ----QUIT----an Array(18 July 2013 11:37:10 am) Pharo.image priorSource: 11621692! ----STARTUP----an Array(18 July 2013 11:47:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 11:47:22 am) Pharo-30278.image priorSource: 11687913! ----STARTUP----an Array(18 July 2013 1:24:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/18/2013 13:21' prior: 45176426! commentForCurrentUpdate ^ '11173 Monticello class migrations do not work well with the new ClassBuilder https://pharo.fogbugz.com/f/cases/11173 11187 printing [self] shows source of Doit https://pharo.fogbugz.com/f/cases/11187 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/18/2013 13:22'! script115 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.501.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.768.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.327.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-MarcusDenker.16.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.93.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1523.mcz KernelTests-MarcusDenker.529.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.140.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.834.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.128.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.240.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.178.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.121.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.355.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-MarcusDenker.27.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.875.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.590.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1179.mcz ToolsTest-EstebanLorenzano.denker.45.mcz Traits-EstebanLorenzano.547.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/18/2013 13:22'! update30279 "self new update30279" self withUpdateLog: '11173 Monticello class migrations do not work well with the new ClassBuilder https://pharo.fogbugz.com/f/cases/11173 11187 printing [self] shows source of Doit https://pharo.fogbugz.com/f/cases/11187 '. self loadTogether: self script115 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SlotClassBuilderConflict commentStamp: '' prior: 42682064! I represent an error raised while building a class.! !ObjectLayout methodsFor: 'reshaping' stamp: 'CamilloBruni 7/17/2013 13:41' prior: 41782601! reshapeFrom: oldScope to: newParentLayout | newScope | newScope := self slotScope rebase: oldScope to: newParentLayout slotScope. ^ newParentLayout extendAgain: self with: newScope.! ! !ObjectLayout methodsFor: 'reshaping' stamp: 'CamilloBruni 7/17/2013 13:42' prior: 44938482! reshapeTo: aModification ^ self class extending: aModification layout scope: LayoutEmptyScope instance host: self host! ! !OCRequestorScope methodsFor: 'lookup' stamp: 'MarcusDenker 7/18/2013 13:16' prior: 38906450! lookupVar: name name = 'self' ifTrue: [ ^outerScope lookupVar: name]. name = 'super' ifTrue: [ ^outerScope lookupVar: name]. name first isUppercase ifTrue: [ ^outerScope lookupVar: name ]. (requestor bindingOf: name asSymbol) ifNotNilDo: [:assoc | ^ OCLiteralVariable new assoc: assoc; scope: self; yourself]. ^ super lookupVar: name. ! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 14:32'! testLayoutIntegrity SystemNavigation default allClassesDo: [ :class | class theNonMetaClass layout checkIntegrity. class theMetaClass layout checkIntegrity ]! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'CamilloBruni 7/17/2013 14:29' prior: 43910924! checkParentScopes | parentScope superclassScope | parentScope := self slotScope parentScope. self host superclass ifNil: [ ^ self ]. superclassScope := self host superclass layout slotScope. self assert: parentScope = superclassScope description: 'Parent slot scope is out of sync'! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'CamilloBruni 7/17/2013 14:02'! testChangeLayoutTypeFromByte aClass := self makeWithLayout: ByteLayout. "Change the layout of the class from bytes to pointer" aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. aClass layout checkIntegrity. self deny: aClass layout isBits. self assert: aClass instVarNames equals: { #id. #name }.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'CamilloBruni 7/17/2013 14:02'! testChangeLayoutTypeToByte aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. "Change the layout of the class from pointer to bytes" aClass := self makeWithLayout: ByteLayout. aClass layout checkIntegrity. self assert: aClass layout isBits. self assert: aClass instVarNames isEmpty.! ! !SlotClassBuilderSilentTest methodsFor: 'tests-migrations' stamp: 'CamilloBruni 7/17/2013 13:51'! testSuperclassChangeLayoutType "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: ByteLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. "Change the layout of the superclass from bytes to pointer" self makeWithLayout: PointerLayout. superclass layout checkIntegrity. class layout checkIntegrity. self deny: superclass layout isBits. self assert: class layout isBits.! ! !LayoutAbstractScope methodsFor: 'extending' stamp: 'CamilloBruni 7/17/2013 13:49'! extend ^ self extend: { }! ! !BitsLayout methodsFor: 'reshaping' stamp: 'CamilloBruni 7/17/2013 14:16'! reshapeFrom: oldScope to: newParentLayout "Bits layout do not have slots and thus no scopes we can directly return the new layout" ^ self copy! ! !ClassModificationPropagation methodsFor: 'public' stamp: 'CamilloBruni 7/17/2013 13:46' prior: 41760078! propagate: aModification to: aTarget origin := aModification. target := aTarget. self layout: (target layout reshapeFrom: origin oldLayout slotScope to: origin newLayout).! ! !SlotClassBuilderConflict commentStamp: '' prior: 45253487! I represent an error raised while building a class.! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:13' prior: 24899211! basicLoad errorDefinitions := OrderedCollection new. [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] ensure: [ self flushChangesFile ]! ! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:22'! basicLoadDefinitions "FIXME. Do a separate pass on loading class definitions as the very first thing. This is a workaround for a problem with the so-called 'atomic' loading (you wish!!) which isn't atomic at all but mixes compilation of methods with reshapes of classes. Since the method is not installed until later, any class reshape in the middle *will* affect methods in subclasses that have been compiled before. There is probably a better way of dealing with this by ensuring that the sort order of the definition lists superclass definitions before methods for subclasses but I need this NOW, and adding an extra pass ensures that methods are compiled against their new class definitions." additions do: [ :each | self loadClassDefinition: each ] displayingProgress: 'Loading classes...'. additions do: [ :each | self tryToLoad: each ] displayingProgress: 'Compiling methods...'. removals do: [ :each | each unload ] displayingProgress: 'Cleaning up...'. self shouldWarnAboutErrors ifTrue: [ self warnAboutErrors ]. errorDefinitions do: [ :each | each addMethodAdditionTo: methodAdditions ] displayingProgress: 'Reloading erroneous definitions...'. methodAdditions do: [ :each | each installMethod ]. methodAdditions do: [ :each | each notifyObservers ]. additions do: [ :each | each postloadOver: (self obsoletionFor: each) ] displayingProgress: 'Initializing...'. ! ! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:15'! handleLoadErrorsDuring: aBlock [aBlock on: InMidstOfFileinNotification do: [ :notification | notification resume: true ]] on: SlotClassBuilderConflict do: [ :error | error resume. ] ! ! !MCPackageLoader methodsFor: 'public' stamp: 'CamilloBruni 7/17/2013 11:08' prior: 24897482! load self validate. self useNewChangeSetDuring: [self basicLoad]. MCMethodDefinition cachedDefinitions finalizeValues.! ! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:20' prior: 24902042! loadClassDefinition: aDefinition [ aDefinition isClassDefinition ifTrue: [ aDefinition load ] ] on: Error do: [ errorDefinitions add: aDefinition ].! ! !MCPackageLoader methodsFor: 'public' stamp: 'CamilloBruni 7/17/2013 11:08' prior: 24897993! loadWithName: baseName self validate. self useChangeSetNamed: baseName during: [self basicLoad]! ! !MCPackageLoader methodsFor: 'public' stamp: 'CamilloBruni 7/17/2013 11:08' prior: 24897744! loadWithNameLike: baseName self validate. self useNewChangeSetNamedLike: baseName during: [self basicLoad]! ! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:06' prior: 24903464! useChangeSetNamed: baseName during: aBlock "Use the named change set, or create one with the given name." | oldChanges newChanges | oldChanges := ChangeSet current. newChanges := (ChangeSet named: baseName) ifNil: [ ChangeSet new name: baseName ]. ChangeSet newChanges: newChanges. aBlock ensure: [ ChangeSet newChanges: oldChanges ]. ! ! !MCPackageLoader methodsFor: 'private' stamp: 'CamilloBruni 7/17/2013 11:08'! validate self analyze. unloadableDefinitions isEmpty ifFalse: [self warnAboutDependencies].! ! SlotClassBuilderSilentTest removeSelector: #testCheckAllLayouts! "Monticello"! "OpalCompiler-Core"! "Slot"! "SlotTests"! "Tests"! ----End fileIn----! ----QUIT----an Array(18 July 2013 1:25:04 pm) Pharo.image priorSource: 11688114! ----STARTUP----an Array(18 July 2013 1:35:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 1:35:42 pm) Pharo-30279.image priorSource: 11706623! ----STARTUP----an Array(18 July 2013 3:10:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !TClass methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/11/2013 17:40'! renameSilently: aName [ self rename: aName] fuelValueWithoutNotifications! ! !TClass methodsFor: '*FuelTests' stamp: 'SebastianTleye 7/11/2013 17:40' prior: 45261538! renameSilently: aName [ self rename: aName] fuelValueWithoutNotifications! ! !Trait method! renameSilently: aName [ self rename: aName] fuelValueWithoutNotifications! ! Trait removeSelector: #renameSilently:! !Trait method! renameSilently: aName [ self rename: aName] fuelValueWithoutNotifications! ! Class removeSelector: #renameSilently:! !TClass methodsFor: '*GroupManagerUI' stamp: 'SebastianTleye 7/11/2013 17:40'! prettyName ^ self printString! ! !Trait method! prettyName ^ self printString! ! !TClass methodsFor: '*GroupManagerUI' stamp: 'SebastianTleye 7/11/2013 17:40' prior: 45262135! prettyName ^ self printString! ! !Trait method! prettyName ^ self printString! ! !TClass methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/11/2013 17:40'! criticTheNonMetaclassClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self ! ! !Trait method! criticTheNonMetaclassClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self ! ! !Trait method! prettyName ^ self printString! ! Class removeSelector: #prettyName! !Trait method! criticTheNonMetaclassClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self ! ! Class removeSelector: #criticTheNonMetaclassClass! !TClass methodsFor: '*HelpSystem-Core' stamp: 'SebastianTleye 7/11/2013 17:41'! asHelpTopic ^SystemReference forClass: self! ! !Trait method! asHelpTopic ^SystemReference forClass: self! ! !TClass methodsFor: '*HelpSystem-Core' stamp: 'SebastianTleye 7/11/2013 17:41' prior: 45263308! asHelpTopic ^SystemReference forClass: self! ! !Trait method! asHelpTopic ^SystemReference forClass: self! ! !Trait method! asHelpTopic ^SystemReference forClass: self! ! Class removeSelector: #asHelpTopic! !MCClassTraitDefinition methodsFor: 'comparing' stamp: 'SebastianTleye 7/12/2013 13:48' prior: 41502091! = aDefinition ^ (super = aDefinition) and: [baseTrait = aDefinition baseTrait and: [self classTraitCompositionString = aDefinition classTraitCompositionString]] ! ! !MCClassTraitDefinition methodsFor: 'comparing' stamp: 'SebastianTleye 7/12/2013 13:48' prior: 45263831! = aDefinition ^ (super = aDefinition) and: [baseTrait = aDefinition baseTrait and: [self classTraitCompositionString = aDefinition classTraitCompositionString]] ! ! !Trait methodsFor: '*Monticello' stamp: 'SebastianTleye 7/12/2013 13:59' prior: 53275565! classDefinitions | definitions | definitions := OrderedCollection with: self asClassDefinition. (self hasClassSide and: [self classTrait hasTraitComposition]) ifTrue: [definitions add: self classTrait asMCDefinition]. ^definitions asArray! ! !Trait methodsFor: '*Monticello' stamp: 'SebastianTleye 7/12/2013 13:59' prior: 45264368! classDefinitions | definitions | definitions := OrderedCollection with: self asClassDefinition. (self hasClassSide and: [self classTrait hasTraitComposition]) ifTrue: [definitions add: self classTrait asMCDefinition]. ^definitions asArray! ! Class removeSelector: #subclass:layoutClass:slots:sharedVariableNames:sharedPoolNames:category:! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:51'! subclass: newName category: newCategory | result | result := self subclass: newName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: newCategory. ^ result ifNil: [ Smalltalk at: self name ifAbsent: [ nil ]] ifNotNil: [ result ]! ! !Trait method! subclass: newName category: newCategory | result | result := self subclass: newName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: newCategory. ^ result ifNil: [ Smalltalk at: self name ifAbsent: [ nil ]] ifNotNil: [ result ]! ! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:47'! addSourceCode: source into: selector | method newSource | method := self methodDict at: selector asSymbol ifAbsent: [ ^ self ]. newSource := String streamContents: [:s | s << method sourceCode << '.' ; cr ; tab ;<< source ]. self compileWithoutReturn: newSource classified: method category! ! !Trait method! addSourceCode: source into: selector | method newSource | method := self methodDict at: selector asSymbol ifAbsent: [ ^ self ]. newSource := String streamContents: [:s | s << method sourceCode << '.' ; cr ; tab ;<< source ]. self compileWithoutReturn: newSource classified: method category! ! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:47'! addInstVarNamed: aName type: aClass ^ self addInstVarNamed: aName! ! !Trait method! addInstVarNamed: aName type: aClass ^ self addInstVarNamed: aName! ! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:51' prior: 45265139! subclass: newName category: newCategory | result | result := self subclass: newName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: newCategory. ^ result ifNil: [ Smalltalk at: self name ifAbsent: [ nil ]] ifNotNil: [ result ]! ! !Trait method! subclass: newName category: newCategory | result | result := self subclass: newName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: newCategory. ^ result ifNil: [ Smalltalk at: self name ifAbsent: [ nil ]] ifNotNil: [ result ]! ! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:47' prior: 45265813! addSourceCode: source into: selector | method newSource | method := self methodDict at: selector asSymbol ifAbsent: [ ^ self ]. newSource := String streamContents: [:s | s << method sourceCode << '.' ; cr ; tab ;<< source ]. self compileWithoutReturn: newSource classified: method category! ! !Trait method! addSourceCode: source into: selector | method newSource | method := self methodDict at: selector asSymbol ifAbsent: [ ^ self ]. newSource := String streamContents: [:s | s << method sourceCode << '.' ; cr ; tab ;<< source ]. self compileWithoutReturn: newSource classified: method category! ! !TClass methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/11/2013 17:47' prior: 45266503! addInstVarNamed: aName type: aClass ^ self addInstVarNamed: aName! ! !Trait method! addInstVarNamed: aName type: aClass ^ self addInstVarNamed: aName! ! !Trait method! addInstVarNamed: aName type: aClass ^ self addInstVarNamed: aName! ! Class removeSelector: #addInstVarNamed:type:! !Trait method! addSourceCode: source into: selector | method newSource | method := self methodDict at: selector asSymbol ifAbsent: [ ^ self ]. newSource := String streamContents: [:s | s << method sourceCode << '.' ; cr ; tab ;<< source ]. self compileWithoutReturn: newSource classified: method category! ! Class removeSelector: #addSourceCode:into:! !Trait method! subclass: newName category: newCategory | result | result := self subclass: newName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: newCategory. ^ result ifNil: [ Smalltalk at: self name ifAbsent: [ nil ]] ifNotNil: [ result ]! ! Class removeSelector: #subclass:category:! ----End fileIn----! !TClass methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 41559616! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:21'! hasClassSide ^self classSide notNil.! ! !Trait method! hasClassSide ^self classSide notNil.! ! !Trait method! hasClassSide ^self classSide notNil.! ! !TClass methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 45269266! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !Trait method! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat ^self explicitRequirement.! ! !TClass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:21' prior: 45269763! hasClassSide ^self classSide notNil.! ! !Trait method! hasClassSide ^self classSide notNil.! ! !Trait method! hasClassSide ^self classSide notNil.! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:23'! hasClassSide ^self explicitRequirement.! ! !Trait method! hasClassSide ^self explicitRequirement.! ! !Trait method! hasClassSide ^self explicitRequirement.! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 7/12/2013 14:16'! spaceUsed ^super spaceUsed + (self hasClassSide ifTrue: [self classSide spaceUsed] ifFalse: [0])! ! !Trait method! spaceUsed ^super spaceUsed + (self hasClassSide ifTrue: [self classSide spaceUsed] ifFalse: [0])! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:23' prior: 45270782! hasClassSide ^self explicitRequirement.! ! !Trait method! hasClassSide ^self explicitRequirement.! ! !Trait method! hasClassSide ^self explicitRequirement.! ! !TClassDescription methodsFor: 'private' stamp: 'SebastianTleye 7/12/2013 14:16' prior: 45271026! spaceUsed ^super spaceUsed + (self hasClassSide ifTrue: [self classSide spaceUsed] ifFalse: [0])! ! !Trait method! spaceUsed ^super spaceUsed + (self hasClassSide ifTrue: [self classSide spaceUsed] ifFalse: [0])! ! !TApplyingOnClassSide methodsFor: 'accessing hierarchy protocol' stamp: 'SebastianTleye 7/12/2013 14:22'! hasClassSide ^false! ! !Trait method! hasClassSide ^false! ! !Trait method! hasClassSide ^false! ! !TApplyingOnClassSide methodsFor: 'accessing hierarchy protocol' stamp: 'SebastianTleye 7/12/2013 14:22' prior: 45271965! hasClassSide ^false! ! !Trait method! hasClassSide ^false! ! !Trait method! hasClassSide ^false! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:22' prior: 45271431! hasClassSide ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:22' prior: 45272409! hasClassSide ^self subclassResponsibility.! ! !Class methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 45270153! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !Class methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 45272717! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "This is the standard initialization message for creating a new class as a subclass of an existing class (the receiver)." | class | class := self classBuilder superclass: self subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. class ifNotNil: [ class setTraitComposition: {} asTraitComposition ]. ^ class ! ! !TraitDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:23' prior: 45271490! hasClassSide ^self subclassResponsibility.! ! !TraitDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:23' prior: 45273863! hasClassSide ^self subclassResponsibility.! ! !Trait methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 45270293! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "Compatibility purposes" ^self error: 'Traits cannot have subclasses'.! ! !Trait methodsFor: 'subclass creation' stamp: 'SebastianTleye 7/12/2013 14:19' prior: 45274171! subclass: t instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat "Compatibility purposes" ^self error: 'Traits cannot have subclasses'.! ! Trait removeSelector: #hasClassTrait! ClassTrait removeSelector: #hasClassTrait! TraitDescription removeSelector: #hasClassTrait! !Trait method! spaceUsed ^super spaceUsed + (self hasClassSide ifTrue: [self classSide spaceUsed] ifFalse: [0])! ! TraitDescription removeSelector: #spaceUsed! Class removeSelector: #spaceUsed! !Trait methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 16:19' prior: 53284159! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self hasClassSide ifTrue: [ aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self classTrait fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex]! ! !Trait methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 16:19' prior: 45275031! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self hasClassSide ifTrue: [ aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self classTrait fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex]! ! !ClassTraitTest methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 16:18' prior: 37144495! testInitialization "self run: #testInitialization" | classTrait | classTrait := self t1 classTrait. self assert: self t1 hasClassSide. self assert: self t1 classTrait == classTrait. self assert: classTrait isClassTrait. self assert: classTrait classSide == classTrait. self deny: classTrait isBaseTrait. self assert: classTrait baseTrait == self t1. "assert classtrait methods are propagated to users when setting traitComposition" self assert: self t4 hasClassSide. self assert: self t5 hasClassSide. self assert: (self t2 classSide includesLocalSelector: #m2ClassSide:). self assert: (self t4 classSide includesSelector: #m2ClassSide:). self assert: (self t5 classSide includesSelector: #m2ClassSide:). self assert: (self c2 m2ClassSide: 17) = 17! ! !ClassTraitTest methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 16:18' prior: 45276491! testInitialization "self run: #testInitialization" | classTrait | classTrait := self t1 classTrait. self assert: self t1 hasClassSide. self assert: self t1 classTrait == classTrait. self assert: classTrait isClassTrait. self assert: classTrait classSide == classTrait. self deny: classTrait isBaseTrait. self assert: classTrait baseTrait == self t1. "assert classtrait methods are propagated to users when setting traitComposition" self assert: self t4 hasClassSide. self assert: self t5 hasClassSide. self assert: (self t2 classSide includesLocalSelector: #m2ClassSide:). self assert: (self t4 classSide includesSelector: #m2ClassSide:). self assert: (self t5 classSide includesSelector: #m2ClassSide:). self assert: (self c2 m2ClassSide: 17) = 17! ! ----End fileIn----! !TClass methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 15:04' prior: 40988167! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self classSide instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self hasClassSide ifTrue: [ self theMetaClass obsolete]. super obsolete.! ! !Trait method! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self classSide instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self hasClassSide ifTrue: [ self theMetaClass obsolete]. super obsolete.! ! !TClass methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 15:04' prior: 45278243! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self classSide instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self hasClassSide ifTrue: [ self theMetaClass obsolete]. super obsolete.! ! !Trait method! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self classSide instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self hasClassSide ifTrue: [ self theMetaClass obsolete]. super obsolete.! ! !TClass methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 15:20' prior: 40982799! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool ^self explicitRequirement.! ! !Trait method! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:37' prior: 40954423! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self classSide allInstances select: [:each | each superclass = self ]! ! !Trait method! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self classSide allInstances select: [:each | each superclass = self ]! ! !TBehavior methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:37' prior: 45280582! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self classSide allInstances select: [:each | each superclass = self ]! ! !Trait method! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self classSide allInstances select: [:each | each superclass = self ]! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:45' prior: 44912391! theNonMetaClass ^self baseClass! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:44' prior: 44912724! theMetaClass ^self classClass! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:45' prior: 45281486! theNonMetaClass ^self baseClass! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:44' prior: 45281640! theMetaClass ^self classClass! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42'! classClass ^self class.! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42'! baseClass ^ self! ! !Class methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 15:20' prior: 45280359! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: self name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self class nonTrivial ifTrue: [aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self class fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool]! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42' prior: 45282071! classClass ^self class.! ! !Class methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42' prior: 45282190! baseClass ^ self! ! !Class methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 15:20' prior: 45282300! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool "File a description of the receiver on aFileStream. If the boolean argument, moveSource, is true, then set the trailing bytes to the position of aFileStream and to fileIndex in order to indicate where to find the source code." self crTrace: self name. super fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex. self class nonTrivial ifTrue: [aFileStream cr; nextPutAll: '"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!!'; cr; cr. self class fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool]! ! !Metaclass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42'! classClass ^self! ! !Metaclass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42'! baseClass ^thisClass.! ! !Metaclass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42' prior: 45284091! classClass ^self! ! !Metaclass methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/12/2013 14:42' prior: 45284207! baseClass ^thisClass.! ! !Trait methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:34'! classPool: aDictionary "Compatibility purposes"! ! !Trait methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:33'! classPool ^ Dictionary new! ! !Trait methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:40'! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! !Trait methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:00'! sharedPools: aCollection "Compatibilty purposes"! ! !Trait methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:35'! subclasses "for compatibility with classes" ^ #()! ! !Trait methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:38'! subclasses: aCollection "Compatibility purposes"! ! !Trait methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:34' prior: 45284574! classPool: aDictionary "Compatibility purposes"! ! !Trait methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:33' prior: 45284698! classPool ^ Dictionary new! ! !Trait methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:40' prior: 45284806! sharedPools "Answer an ordered collection of the shared pools that the receiver shares" ^ OrderedCollection new! ! !Trait methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:00' prior: 45285002! sharedPools: aCollection "Compatibilty purposes"! ! !Trait methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:35' prior: 45285143! subclasses "for compatibility with classes" ^ #()! ! !Trait methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:38' prior: 45285288! subclasses: aCollection "Compatibility purposes"! ! Trait removeSelector: #allSubclassesWithLevelDo:startingLevel:! !Trait method! obsolete "Change the receiver and all of its subclasses to an obsolete class." self == Object ifTrue: [^self error: 'Object is NOT obsolete']. self setName: 'AnObsolete' , self name. Object class instSize + 1 to: self classSide instSize do: [:i | self instVarAt: i put: nil]. "Store nil over class instVars." self classPool: nil. self sharedPools: nil. self hasClassSide ifTrue: [ self theMetaClass obsolete]. super obsolete.! ! Trait removeSelector: #obsolete! !Trait method! obsolete "Make the receiver obsolete." self superclass removeSubclass: self. self organization: nil. super obsolete.! ! TraitDescription removeSelector: #obsolete! !Trait method! subclasses "slow implementation since Behavior does not keep trace of subclasses" ^ self classSide allInstances select: [:each | each superclass = self ]! ! TraitBehavior removeSelector: #subclasses! Metaclass removeSelector: #theMetaClass! Metaclass removeSelector: #theNonMetaClass! Class removeSelector: #theMetaClass! Class removeSelector: #theNonMetaClass! TClassDescription removeSelector: #subclasses! !TClass methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:41'! sharedPools ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:33'! classPool ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:34'! classPool: aDictionary ^self explicitRequirement.! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:36'! subclasses ^self explicitRequirement.! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:38'! subclasses: aCollection ^self explicitRequirement.! ! !TClass methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 15:20' prior: 45280229! fileOutOn: aFileStream moveSource: moveSource toFile: fileIndex initializing: aBool ^self explicitRequirement.! ! !TClass methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 15:41' prior: 45287529! sharedPools ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:33' prior: 45287645! classPool ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 14:34' prior: 45287759! classPool: aDictionary ^self explicitRequirement.! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:36' prior: 45287902! subclasses ^self explicitRequirement.! ! !TClass methodsFor: 'accessing class hierarchy' stamp: 'SebastianTleye 7/12/2013 14:38' prior: 45288033! subclasses: aCollection ^self explicitRequirement.! ! ----End fileIn----! !TClassDescription methodsFor: '*System-Support' stamp: 'SebastianTleye 7/12/2013 15:59'! allUnreferencedClassVariables "Answer a list of the names of all the receiver's unreferenced class vars, including those defined in superclasses" ^ self systemNavigation allUnreferencedClassVariablesOf: self! ! !Trait method! allUnreferencedClassVariables "Answer a list of the names of all the receiver's unreferenced class vars, including those defined in superclasses" ^ self systemNavigation allUnreferencedClassVariablesOf: self! ! !TClassDescription methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/12/2013 15:50'! compileWithoutReturn: code classified: heading self compile: code classified: heading! ! !Trait method! compileWithoutReturn: code classified: heading self compile: code classified: heading! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:08'! addInstVarNamed: aString ^self explicitRequirement.! ! !Trait method! addInstVarNamed: aString ^self explicitRequirement.! ! !TClassDescription methodsFor: '*Fuel' stamp: 'SebastianTleye 7/12/2013 15:51'! instanceVariableNamesDo: anUnaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate anUnaryBlock with the instance variable name strings. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instanceVariableNamesDo: anUnaryBlock]. 1 to: self instSize - superInstSize do: [:i| anUnaryBlock value: (self instanceVariables at: i)]! ! !Trait method! instanceVariableNamesDo: anUnaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate anUnaryBlock with the instance variable name strings. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instanceVariableNamesDo: anUnaryBlock]. 1 to: self instSize - superInstSize do: [:i| anUnaryBlock value: (self instanceVariables at: i)]! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53'! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! !Trait method! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:52'! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !Trait method! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53'! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! !Trait method! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:52'! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! !Trait method! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53'! textBehavior ^ nil! ! !Trait method! textBehavior ^ nil! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 16:10'! instanceVariables: anObject ^self explicitRequirement.! ! !Trait method! instanceVariables: anObject ^self explicitRequirement.! ! !TClassDescription methodsFor: '*refactoring-core-fixes' stamp: 'SebastianTleye 7/12/2013 15:54'! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !Trait method! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/12/2013 16:11' prior: 44464662! definition ^self explicitRequirement.! ! !Trait method! definition ^self explicitRequirement.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56'! packages "the extending packages of a class are the packages that extend it." ^ self extendingPackages asSet copy add: self package; yourself! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56'! packageOrganizer "Returns the organizer of this class" ^ RPackage organizer ! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:57'! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56'! package ^ RPackage organizer packageOf: self. ! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55'! extendingPackages "the extending packages of a class are the packages that extend it." ^ RPackage organizer extendingPackagesOf: self! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55'! isExtended ^ self extendingPackages isEmpty! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55'! isExtendedInPackage: aPackage "returns true if aPackage defines an extension to this class" ^ aPackage extendsClass: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56'! packageFromOrganizer: anOrganizer "returns the package that defines this class" ^ anOrganizer packageOf: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55'! isDefinedInPackage: aPackage "returns true if aPackage contains the definitino of this class" ^ aPackage includesClass: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 44524334! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !TClassDescription methodsFor: '*System-Support' stamp: 'SebastianTleye 7/12/2013 15:59' prior: 45289121! allUnreferencedClassVariables "Answer a list of the names of all the receiver's unreferenced class vars, including those defined in superclasses" ^ self systemNavigation allUnreferencedClassVariablesOf: self! ! !Trait method! allUnreferencedClassVariables "Answer a list of the names of all the receiver's unreferenced class vars, including those defined in superclasses" ^ self systemNavigation allUnreferencedClassVariablesOf: self! ! !TClassDescription methodsFor: '*Spec-Builder' stamp: 'SebastianTleye 7/12/2013 15:50' prior: 45289652! compileWithoutReturn: code classified: heading self compile: code classified: heading! ! !Trait method! compileWithoutReturn: code classified: heading self compile: code classified: heading! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:08' prior: 45289942! addInstVarNamed: aString ^self explicitRequirement.! ! !Trait method! addInstVarNamed: aString ^self explicitRequirement.! ! !TClassDescription methodsFor: '*Fuel' stamp: 'SebastianTleye 7/12/2013 15:51' prior: 45290149! instanceVariableNamesDo: anUnaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate anUnaryBlock with the instance variable name strings. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instanceVariableNamesDo: anUnaryBlock]. 1 to: self instSize - superInstSize do: [:i| anUnaryBlock value: (self instanceVariables at: i)]! ! !Trait method! instanceVariableNamesDo: anUnaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate anUnaryBlock with the instance variable name strings. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instanceVariableNamesDo: anUnaryBlock]. 1 to: self instSize - superInstSize do: [:i| anUnaryBlock value: (self instanceVariables at: i)]! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53' prior: 45291445! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! !Trait method! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:52' prior: 45291893! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !Trait method! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53' prior: 45292351! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! !Trait method! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:52' prior: 45292625! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! !Trait method! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! !TClassDescription methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 15:53' prior: 45293107! textBehavior ^ nil! ! !Trait method! textBehavior ^ nil! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 16:10' prior: 45293252! instanceVariables: anObject ^self explicitRequirement.! ! !Trait method! instanceVariables: anObject ^self explicitRequirement.! ! !TClassDescription methodsFor: '*refactoring-core-fixes' stamp: 'SebastianTleye 7/12/2013 15:54' prior: 45293483! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !Trait method! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !TClassDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/12/2013 16:11' prior: 45294205! definition ^self explicitRequirement.! ! !Trait method! definition ^self explicitRequirement.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56' prior: 45294393! packages "the extending packages of a class are the packages that extend it." ^ self extendingPackages asSet copy add: self package; yourself! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56' prior: 45294632! packageOrganizer "Returns the organizer of this class" ^ RPackage organizer ! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:57' prior: 45294803! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56' prior: 45294961! package ^ RPackage organizer packageOf: self. ! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 45295101! extendingPackages "the extending packages of a class are the packages that extend it." ^ RPackage organizer extendingPackagesOf: self! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 45295329! isExtended ^ self extendingPackages isEmpty! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 45295467! isExtendedInPackage: aPackage "returns true if aPackage defines an extension to this class" ^ aPackage extendsClass: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:56' prior: 45295684! packageFromOrganizer: anOrganizer "returns the package that defines this class" ^ anOrganizer packageOf: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 45295889! isDefinedInPackage: aPackage "returns true if aPackage contains the definitino of this class" ^ aPackage includesClass: self.! ! !TClassDescription methodsFor: '*rpackage-core' stamp: 'SebastianTleye 7/12/2013 15:55' prior: 45296127! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! !Class methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:03' prior: 41566458! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !Class methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:03' prior: 45305130! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." ^self classBuilder name: self name inEnvironment: self environment subclassOf: self superclass type: self typeOfClass instanceVariableNames: self instanceVariablesString, ' ', aString classVariableNames: self classVariablesString poolDictionaries: self sharedPoolsString category: self category! ! !TraitDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 16:09' prior: 45301327! instanceVariables: anObject "Compatibility purposes"! ! !TraitDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:06' prior: 45297902! addInstVarNamed: aString "Compatibility purposes"! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/12/2013 16:11' prior: 45302279! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !TraitDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 16:09' prior: 45306156! instanceVariables: anObject "Compatibility purposes"! ! !TraitDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 16:06' prior: 45306321! addInstVarNamed: aString "Compatibility purposes"! ! !TraitDescription methodsFor: 'filein/out' stamp: 'SebastianTleye 7/12/2013 16:11' prior: 45306475! definition "Answer a String that defines the receiver" ^String streamContents: [:stream | stream nextPutAll: self class name. stream nextPutAll: ' named: '; store: self name. stream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString. stream cr; tab; nextPutAll: 'category: '; store: self category asString].! ! !Trait method! allUnreferencedClassVariables "Answer a list of the names of all the receiver's unreferenced class vars, including those defined in superclasses" ^ self systemNavigation allUnreferencedClassVariablesOf: self! ! ClassDescription removeSelector: #allUnreferencedClassVariables! !Trait method! compileSilently: code "Compile the code and classify the resulting method in the given category, leaving no trail in the system log, nor in any change set, nor in the 'recent submissions' list. This should only be used when you know for sure that the compilation will succeed." ^ self compileSilently: code classified: 'not defined category' notifying: nil.! ! ClassDescription removeSelector: #compileSilently:! !Trait method! compileWithoutReturn: code classified: heading self compile: code classified: heading! ! ClassDescription removeSelector: #compileWithoutReturn:classified:! !Trait method! criticClass "Return the class of the receiver for the critic browser. This behavior may be folded later by changing the name of this method or using another one." ^ self! ! ClassDescription removeSelector: #criticClass! !Trait method! criticNameOn: aStream "This behavior may be folded later by changing the name of this method or using another one." aStream << self name << ' (' << self category << ')' ! ! ClassDescription removeSelector: #criticNameOn:! !Trait method! extendingPackages "the extending packages of a class are the packages that extend it." ^ RPackage organizer extendingPackagesOf: self! ! ClassDescription removeSelector: #extendingPackages! !Trait method! instanceVariableNamesDo: anUnaryBlock "This is part of the interface between the compiler and a class's instance or field names. The class should enumerate anUnaryBlock with the instance variable name strings. The order is important. Names evaluated later will override the same names occurring earlier." | superInstSize | (superInstSize := self superclass notNil ifTrue: [self superclass instSize] ifFalse: [0]) > 0 ifTrue: [self superclass instanceVariableNamesDo: anUnaryBlock]. 1 to: self instSize - superInstSize do: [:i| anUnaryBlock value: (self instanceVariables at: i)]! ! ClassDescription removeSelector: #instanceVariableNamesDo:! !Trait method! isDefinedInPackage: aPackage "returns true if aPackage contains the definitino of this class" ^ aPackage includesClass: self.! ! ClassDescription removeSelector: #isDefinedInPackage:! !Trait method! isExtended ^ self extendingPackages isEmpty! ! ClassDescription removeSelector: #isExtended! !Trait method! isExtendedInPackage: aPackage "returns true if aPackage defines an extension to this class" ^ aPackage extendsClass: self.! ! ClassDescription removeSelector: #isExtendedInPackage:! !Trait method! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfClass: self! ! ClassDescription removeSelector: #manifestBuilderForRuleChecker:! !Trait method! mcWorkingCopy MCWorkingCopy managersForClass: self do: [: package | ^ package ]! ! ClassDescription removeSelector: #mcWorkingCopy! !Trait method! package ^ RPackage organizer packageOf: self. ! ! ClassDescription removeSelector: #package! !Trait method! packageFromOrganizer: anOrganizer "returns the package that defines this class" ^ anOrganizer packageOf: self.! ! ClassDescription removeSelector: #packageFromOrganizer:! !Trait method! packageOrganizer "Returns the organizer of this class" ^ RPackage organizer ! ! ClassDescription removeSelector: #packageOrganizer! !Trait method! packages "the extending packages of a class are the packages that extend it." ^ self extendingPackages asSet copy add: self package; yourself! ! ClassDescription removeSelector: #packages! !Trait method! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! ClassDescription removeSelector: #packagesWithoutExtensions! !Trait method! textBehavior ^ nil! ! ClassDescription removeSelector: #textBehavior! !Trait method! whichSelectorsReallyRead: aString "This is a modified version of #whichSelectorsRead: that does exclude the writers." | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! ClassDescription removeSelector: #whichSelectorsReallyRead:! TClass removeSelector: #addInstVarNamed:! ----End fileIn----! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/12/2013 16:38' prior: 40848962! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'. (self instVarNames size > 0) ifTrue: [stream cr; cr; nextPutAll: 'Instance Variables'. ]. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! !Trait method! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'. (self instVarNames size > 0) ifTrue: [stream cr; cr; nextPutAll: 'Instance Variables'. ]. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! !TClassDescription methodsFor: 'accessing comment' stamp: 'SebastianTleye 7/12/2013 16:38' prior: 45312241! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'. (self instVarNames size > 0) ifTrue: [stream cr; cr; nextPutAll: 'Instance Variables'. ]. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! !Trait method! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'. (self instVarNames size > 0) ifTrue: [stream cr; cr; nextPutAll: 'Instance Variables'. ]. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! !ClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:46' prior: 41261781! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories ]. ^ changedCategories! ! !ClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:49' prior: 41272271! noteChangesFrom: oldMethodDict "create notifications about the changes made to the method dictionary" "additions have already been notified in #addTraitSelector:withMethod:" " deal with removal / updates relative to the old method dictionary" oldMethodDict keysAndValuesDo: [ :selector :oldMethod| self methodDict at: selector ifPresent: [ :currentMethod| currentMethod == oldMethod ifFalse: [ self noteMethodChanged: oldMethod to: currentMethod]] ifAbsent: [ self noteMethodRemoved: oldMethod ]]. ! ! !ClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/12/2013 16:47' prior: 43930342! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil priorOriginOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. priorMethodOrNil ifNotNil: [ priorOriginOrNil := priorMethodOrNil origin ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. (priorMethodOrNil isNil or: [ priorOriginOrNil ~= compiledMethod origin ]) ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! !ClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:46' prior: 45315598! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil | changedCategories composition | changedCategories := IdentitySet new. composition := self hasTraitComposition ifTrue: [ self traitComposition ] ifFalse: [ TraitComposition new ]. (composition methodDescriptionsForSelector: aSymbol) do: [ :each | self updateOrganizationDescription: each oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil changedCategories: changedCategories ]. ^ changedCategories! ! !ClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:49' prior: 45316253! noteChangesFrom: oldMethodDict "create notifications about the changes made to the method dictionary" "additions have already been notified in #addTraitSelector:withMethod:" " deal with removal / updates relative to the old method dictionary" oldMethodDict keysAndValuesDo: [ :selector :oldMethod| self methodDict at: selector ifPresent: [ :currentMethod| currentMethod == oldMethod ifFalse: [ self noteMethodChanged: oldMethod to: currentMethod]] ifAbsent: [ self noteMethodRemoved: oldMethod ]]. ! ! !ClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/12/2013 16:47' prior: 45316901! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor | priorMethodOrNil priorOriginOrNil oldProtocol newProtocol | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [ nil ]. priorMethodOrNil ifNotNil: [ priorOriginOrNil := priorMethodOrNil origin ]. self addSelectorSilently: selector withMethod: compiledMethod. oldProtocol := self organization categoryOfElement: selector. SystemAnnouncer uniqueInstance suspendAllWhile: [ self organization classify: selector under: (category = Protocol unclassified ifTrue: [ oldProtocol ] ifFalse: [ category ]) ]. newProtocol := self organization categoryOfElement: selector. (priorMethodOrNil isNil or: [ priorOriginOrNil ~= compiledMethod origin ]) ifTrue: [ SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: self requestor: requestor ] ifFalse: [ "If protocol changed and someone is from different package, I need to throw a method recategorized" self notifyRepackage: selector method: compiledMethod oldProtocol: oldProtocol newProtocol: newProtocol. SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self oldProtocol: oldProtocol newProtocol: newProtocol requestor: requestor ]! ! !Trait method! classCommentBlank | existingComment stream | existingComment := self theNonMetaClass organization classComment. existingComment isEmpty ifFalse: [^existingComment]. stream := (String new: 100) writeStream. stream nextPutAll: 'A'; nextPutAll: (self name first isVowel ifTrue: ['n '] ifFalse: [' ']); nextPutAll: self name; nextPutAll: ' is xxxxxxxxx.'. (self instVarNames size > 0) ifTrue: [stream cr; cr; nextPutAll: 'Instance Variables'. ]. self instVarNames asSortedCollection do: [:each | stream cr; tab; nextPutAll: each; nextPut: $:; tab; tab; nextPutAll: '']. stream cr. self instVarNames asSortedCollection do: [:each | stream cr; nextPutAll: each; cr; tab; nextPutAll: '- xxxxx'; cr]. ^stream contents! ! TraitDescription removeSelector: #classCommentBlank! !Trait method! extendingPackages "the extending packages of a class are the packages that extend it." ^ RPackage organizer extendingPackagesOf: self! ! TraitDescription removeSelector: #extendingPackages! !Trait method! isDefinedInPackage: aPackage "returns true if aPackage contains the definitino of this class" ^ aPackage includesClass: self.! ! TraitDescription removeSelector: #isDefinedInPackage:! !Trait method! isExtended ^ self extendingPackages isEmpty! ! TraitDescription removeSelector: #isExtended! !Trait method! isExtendedInPackage: aPackage "returns true if aPackage defines an extension to this class" ^ aPackage extendsClass: self.! ! TraitDescription removeSelector: #isExtendedInPackage:! !Trait method! package ^ RPackage organizer packageOf: self. ! ! TraitDescription removeSelector: #package! !Trait method! packageFromOrganizer: anOrganizer "returns the package that defines this class" ^ anOrganizer packageOf: self.! ! TraitDescription removeSelector: #packageFromOrganizer:! !Trait method! packageOrganizer "Returns the organizer of this class" ^ RPackage organizer ! ! TraitDescription removeSelector: #packageOrganizer! !Trait method! packages "the extending packages of a class are the packages that extend it." ^ self extendingPackages asSet copy add: self package; yourself! ! TraitDescription removeSelector: #packages! !Trait method! packagesWithoutExtensions ^ Set new add: self package; yourself.! ! TraitDescription removeSelector: #packagesWithoutExtensions! BehaviorTest removeSelector: #testBehaviorSubclasses! TBehavior removeSelector: #subclasses! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:46' prior: 40891516! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil ^self explicitRequirement.! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:50' prior: 40874787! noteChangesFrom: oldMethodDict ^self explicitRequirement. ! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/12/2013 16:47' prior: 43926296! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor ^self explicitRequirement.! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:46' prior: 45323770! updateOrganizationSelector: aSymbol oldCategory: oldCategoryOrNil newCategory: newCategoryOrNil ^self explicitRequirement.! ! !TClassDescription methodsFor: 'organization updating' stamp: 'SebastianTleye 7/12/2013 16:50' prior: 45324009! noteChangesFrom: oldMethodDict ^self explicitRequirement. ! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/12/2013 16:47' prior: 45324191! addAndClassifySelector: selector withMethod: compiledMethod inProtocol: category notifying: requestor ^self explicitRequirement.! ! ----End fileIn----! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 11:18'! asFullRingDefinition "A behavior is converted to a ring class including its variables, methods, direct superclass, direct subclasses and the package in which is loaded. Active methods are generated and each knows its package as well. Note that for its direct superclass and subclasses no full definitions are requested. If you need to traverse hierarchies use #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:" | rgClass rgSuper rgSub rgMethod packageKeys | rgClass:= self asRingDefinition. rgClass package: (RGContainer packageOfClass: rgClass). self superclass notNil ifTrue: [ rgSuper := self superclass asRingDefinition. rgClass superclass: rgSuper ] ifFalse: [ self isTrait ifTrue: [ rgSuper := Trait asRingDefinition. rgClass superclass: rgSuper. ] ]. self subclasses do:[ :each | rgSub := each asRingDefinition. rgSub superclass: rgClass ]. packageKeys := RGContainer packageKeys. self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass theMetaClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. ^ rgClass! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 11:23'! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackages: packsBoolean "Retrieves a ring class/trait based on the receiver. The data loaded in the class/trait (active methods, superclasses, subclasses and packages) is requested by the users. As it may need to traverse hierarchies for retrieving super and subclasses a ring slice is created as the container for every class, method and package. To retrieve the slice: aRGClass environment " | rgClass rgSlice rgPackageKeys | rgSlice := RGSlice named: #fromImage. packsBoolean ifTrue: [ rgPackageKeys := rgSlice loadPackagesFromImage ]. rgClass := self asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: rgPackageKeys in: rgSlice. rgSlice cleanEmptyPackages. rgSlice loadTraitUsers. ^ rgClass! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 11:18' prior: 45325092! asFullRingDefinition "A behavior is converted to a ring class including its variables, methods, direct superclass, direct subclasses and the package in which is loaded. Active methods are generated and each knows its package as well. Note that for its direct superclass and subclasses no full definitions are requested. If you need to traverse hierarchies use #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:" | rgClass rgSuper rgSub rgMethod packageKeys | rgClass:= self asRingDefinition. rgClass package: (RGContainer packageOfClass: rgClass). self superclass notNil ifTrue: [ rgSuper := self superclass asRingDefinition. rgClass superclass: rgSuper ] ifFalse: [ self isTrait ifTrue: [ rgSuper := Trait asRingDefinition. rgClass superclass: rgSuper. ] ]. self subclasses do:[ :each | rgSub := each asRingDefinition. rgSub superclass: rgClass ]. packageKeys := RGContainer packageKeys. self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass theMetaClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. ^ rgClass! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 11:23' prior: 45326545! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackages: packsBoolean "Retrieves a ring class/trait based on the receiver. The data loaded in the class/trait (active methods, superclasses, subclasses and packages) is requested by the users. As it may need to traverse hierarchies for retrieving super and subclasses a ring slice is created as the container for every class, method and package. To retrieve the slice: aRGClass environment " | rgClass rgSlice rgPackageKeys | rgSlice := RGSlice named: #fromImage. packsBoolean ifTrue: [ rgPackageKeys := rgSlice loadPackagesFromImage ]. rgClass := self asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: rgPackageKeys in: rgSlice. rgSlice cleanEmptyPackages. rgSlice loadTraitUsers. ^ rgClass! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 20:57'! definition ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 17:40'! criticTheNonMetaclassClass ^self theNonMetaClass ! ! !Trait method! criticTheNonMetaclassClass ^self theNonMetaClass ! ! !TApplyingOnClassSide methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 18:06'! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newArray newString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newArray := self instVarNames copyWithout: aString. newString := ''. newArray do: [:aString2 | newString := aString2 , ' ' , newString]. self instanceVariableNames: newString! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newArray newString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newArray := self instVarNames copyWithout: aString. newString := ''. newArray do: [:aString2 | newString := aString2 , ' ' , newString]. self instanceVariableNames: newString! ! !TApplyingOnClassSide methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 17:21'! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." | fullString | fullString := String streamContents: [:strm | self instVarNames do: [:aString2 | strm nextPutAll: aString2; space]. strm nextPutAll: aString]. self instanceVariableNames: fullString! ! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." | fullString | fullString := String streamContents: [:strm | self instVarNames do: [:aString2 | strm nextPutAll: aString2; space]. strm nextPutAll: aString]. self instanceVariableNames: fullString! ! !TApplyingOnClassSide methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 17:37'! classPool "Answer the dictionary of class variables." ^self theNonMetaClass classPool! ! !Trait method! classPool "Answer the dictionary of class variables." ^self theNonMetaClass classPool! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 17:25'! instanceVariableNames: instVarString ^self explicitRequirement.! ! !Trait method! instanceVariableNames: instVarString ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:08'! obsoleteSubclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass obsoleteSubclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !Trait method! obsoleteSubclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass obsoleteSubclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:05'! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! !Trait method! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:04'! subclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass subclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !Trait method! subclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass subclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:06'! removeObsoleteSubclass: aClass "Do nothing."! ! !Trait method! removeObsoleteSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 17:25'! addObsoleteSubclass: aClass "Do nothing."! ! !Trait method! addObsoleteSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:06'! removeSubclass: aClass "Do nothing."! ! !Trait method! removeSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/12/2013 17:39'! classVarNames "Answer a set of the names of the class variables defined in the receiver's instance." self theNonMetaClass ifNil: [ ^ Set new ]. ^self theNonMetaClass classVarNames! ! !Trait method! classVarNames "Answer a set of the names of the class variables defined in the receiver's instance." self theNonMetaClass ifNil: [ ^ Set new ]. ^self theNonMetaClass classVarNames! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:33'! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! !Trait method! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:12'! possibleVariablesFor: misspelled continuedFrom: oldResults ^ self theNonMetaClass possibleVariablesFor: misspelled continuedFrom: oldResults ! ! !Trait method! possibleVariablesFor: misspelled continuedFrom: oldResults ^ self theNonMetaClass possibleVariablesFor: misspelled continuedFrom: oldResults ! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:34'! bindingOf: varName ^self theNonMetaClass classBindingOf: varName! ! !Trait method! bindingOf: varName ^self theNonMetaClass classBindingOf: varName! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:02'! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism.The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsChangeSetLogging! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism.The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsChangeSetLogging! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:21'! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself." ^ self theNonMetaClass acceptsLoggingOfCompilation! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself." ^ self theNonMetaClass acceptsLoggingOfCompilation! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:01'! wantsRecompilationProgressReported "The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsRecompilationProgressReported! ! !Trait method! wantsRecompilationProgressReported "The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsRecompilationProgressReported! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 20:49'! category ^ self theNonMetaClass category! ! !Trait method! category ^ self theNonMetaClass category! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 18:09'! name ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 18:11'! isMeta ^ true! ! !Trait method! isMeta ^ true! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 18:10'! isSelfEvaluating ^self isObsolete not! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/12/2013 20:57' prior: 45329991! definition ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/12/2013 17:40' prior: 45330125! criticTheNonMetaclassClass ^self theNonMetaClass ! ! !Trait method! criticTheNonMetaclassClass ^self theNonMetaClass ! ! !TApplyingOnClassSide methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 18:06' prior: 45330346! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newArray newString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newArray := self instVarNames copyWithout: aString. newString := ''. newArray do: [:aString2 | newString := aString2 , ' ' , newString]. self instanceVariableNames: newString! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newArray newString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newArray := self instVarNames copyWithout: aString. newString := ''. newArray do: [:aString2 | newString := aString2 , ' ' , newString]. self instanceVariableNames: newString! ! !TApplyingOnClassSide methodsFor: 'instance variables' stamp: 'SebastianTleye 7/12/2013 17:21' prior: 45331313! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." | fullString | fullString := String streamContents: [:strm | self instVarNames do: [:aString2 | strm nextPutAll: aString2; space]. strm nextPutAll: aString]. self instanceVariableNames: fullString! ! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." | fullString | fullString := String streamContents: [:strm | self instVarNames do: [:aString2 | strm nextPutAll: aString2; space]. strm nextPutAll: aString]. self instanceVariableNames: fullString! ! !TApplyingOnClassSide methodsFor: 'pool variables' stamp: 'SebastianTleye 7/12/2013 17:37' prior: 45332038! classPool "Answer the dictionary of class variables." ^self theNonMetaClass classPool! ! !Trait method! classPool "Answer the dictionary of class variables." ^self theNonMetaClass classPool! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 17:25' prior: 45332333! instanceVariableNames: instVarString ^self explicitRequirement.! ! !Trait method! instanceVariableNames: instVarString ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:08' prior: 45332577! obsoleteSubclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass obsoleteSubclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !Trait method! obsoleteSubclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass obsoleteSubclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:05' prior: 45333349! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! !Trait method! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:04' prior: 45334075! subclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass subclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !Trait method! subclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass subclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:06' prior: 45334815! removeObsoleteSubclass: aClass "Do nothing."! ! !Trait method! removeObsoleteSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 17:25' prior: 45335021! addObsoleteSubclass: aClass "Do nothing."! ! !Trait method! addObsoleteSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'class hierarchy' stamp: 'SebastianTleye 7/12/2013 18:06' prior: 45335221! removeSubclass: aClass "Do nothing."! ! !Trait method! removeSubclass: aClass "Do nothing."! ! !TApplyingOnClassSide methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/12/2013 17:39' prior: 45335429! classVarNames "Answer a set of the names of the class variables defined in the receiver's instance." self theNonMetaClass ifNil: [ ^ Set new ]. ^self theNonMetaClass classVarNames! ! !Trait method! classVarNames "Answer a set of the names of the class variables defined in the receiver's instance." self theNonMetaClass ifNil: [ ^ Set new ]. ^self theNonMetaClass classVarNames! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:33' prior: 45335907! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! !Trait method! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:12' prior: 45336461! possibleVariablesFor: misspelled continuedFrom: oldResults ^ self theNonMetaClass possibleVariablesFor: misspelled continuedFrom: oldResults ! ! !Trait method! possibleVariablesFor: misspelled continuedFrom: oldResults ^ self theNonMetaClass possibleVariablesFor: misspelled continuedFrom: oldResults ! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:34' prior: 45336857! bindingOf: varName ^self theNonMetaClass classBindingOf: varName! ! !Trait method! bindingOf: varName ^self theNonMetaClass classBindingOf: varName! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:02' prior: 45337099! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism.The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsChangeSetLogging! ! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism.The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsChangeSetLogging! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 17:21' prior: 45337645! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself." ^ self theNonMetaClass acceptsLoggingOfCompilation! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself." ^ self theNonMetaClass acceptsLoggingOfCompilation! ! !TApplyingOnClassSide methodsFor: 'compiling' stamp: 'SebastianTleye 7/12/2013 18:01' prior: 45338301! wantsRecompilationProgressReported "The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsRecompilationProgressReported! ! !Trait method! wantsRecompilationProgressReported "The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsRecompilationProgressReported! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 20:49' prior: 45338709! category ^ self theNonMetaClass category! ! !Trait method! category ^ self theNonMetaClass category! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/12/2013 18:09' prior: 45338901! name ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 18:11' prior: 45339022! isMeta ^ true! ! !Trait method! isMeta ^ true! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/12/2013 18:10' prior: 45339158! isSelfEvaluating ^self isObsolete not! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33' prior: 44857692! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33' prior: 44858024! localSelectors: aSet self basicLocalSelectors: aSet.! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33' prior: 45348961! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !TraitBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33' prior: 45349326! localSelectors: aSet self basicLocalSelectors: aSet.! ! !ClassTrait methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 17:23' prior: 45341809! instanceVariableNames: instVarString "Compatibility purposes"! ! !ClassTrait methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/12/2013 17:23' prior: 45350005! instanceVariableNames: instVarString "Compatibility purposes"! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/16/2013 10:46' prior: 28694674! testOpenBrowseOnInstalledTraitMethod | browser | browser := (Class>>#localSelectors) browse. browser changed. browser close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/16/2013 10:47' prior: 44895069! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#classPool) browse. browser changed. browser close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/16/2013 10:46' prior: 45350336! testOpenBrowseOnInstalledTraitMethod | browser | browser := (Class>>#localSelectors) browse. browser changed. browser close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/16/2013 10:47' prior: 45350565! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#classPool) browse. browser changed. browser close.! ! !Class methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:32'! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Class methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33'! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Class methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:32' prior: 45351207! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Class methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:33' prior: 45351548! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Metaclass methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:34'! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Metaclass methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:34'! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Metaclass methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:34' prior: 45352185! localSelectors: aSet self basicLocalSelectors: aSet.! ! !Metaclass methodsFor: 'accessing' stamp: 'SebastianTleye 7/15/2013 17:34' prior: 45352319! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors isNil ifTrue: [self selectors asSet] ifFalse: [self basicLocalSelectors].! ! !Trait method! acceptsLoggingOfCompilation "Answer whether the receiver's method submisions and class defintions should be logged to the changes file and to the current change set. The metaclass follows the rule of the class itself." ^ self theNonMetaClass acceptsLoggingOfCompilation! ! Metaclass removeSelector: #acceptsLoggingOfCompilation! !Trait method! addInstVarNamed: aString "Add the argument, aString, as one of the receiver's instance variables." | fullString | fullString := String streamContents: [:strm | self instVarNames do: [:aString2 | strm nextPutAll: aString2; space]. strm nextPutAll: aString]. self instanceVariableNames: fullString! ! Metaclass removeSelector: #addInstVarNamed:! !Trait method! addObsoleteSubclass: aClass "Do nothing."! ! Metaclass removeSelector: #addObsoleteSubclass:! !Trait method! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! Metaclass removeSelector: #binding! !Trait method! bindingOf: varName ^self theNonMetaClass classBindingOf: varName! ! Metaclass removeSelector: #bindingOf:! !Trait method! classPool "Answer the dictionary of class variables." ^self theNonMetaClass classPool! ! Metaclass removeSelector: #classPool! !Trait method! classVarNames "Answer a set of the names of the class variables defined in the receiver's instance." self theNonMetaClass ifNil: [ ^ Set new ]. ^self theNonMetaClass classVarNames! ! Metaclass removeSelector: #classVarNames! !Trait method! criticTheNonMetaclassClass ^self theNonMetaClass ! ! Metaclass removeSelector: #criticTheNonMetaclassClass! Metaclass removeSelector: #hasTraitComposition! !Trait method! isMeta ^ true! ! Metaclass removeSelector: #isMeta! !Trait method! isSelfEvaluating ^self isObsolete not! ! Metaclass removeSelector: #isSelfEvaluating! !Trait method! obsoleteSubclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass obsoleteSubclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! Metaclass removeSelector: #obsoleteSubclasses! !Trait method! possibleVariablesFor: misspelled continuedFrom: oldResults ^ self theNonMetaClass possibleVariablesFor: misspelled continuedFrom: oldResults ! ! Metaclass removeSelector: #possibleVariablesFor:continuedFrom:! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables." | newArray newString | (self instVarNames includes: aString) ifFalse: [self error: aString , ' is not one of my instance variables']. newArray := self instVarNames copyWithout: aString. newString := ''. newArray do: [:aString2 | newString := aString2 , ' ' , newString]. self instanceVariableNames: newString! ! Metaclass removeSelector: #removeInstVarNamed:! !Trait method! removeObsoleteSubclass: aClass "Do nothing."! ! Metaclass removeSelector: #removeObsoleteSubclass:! !Trait method! removeSubclass: aClass "Do nothing."! ! Metaclass removeSelector: #removeSubclass:! !Trait method! subclasses "Answer the receiver's subclasses." self theNonMetaClass == nil ifTrue:[^#()]. ^self theNonMetaClass subclasses select:[:aSubclass| aSubclass isMeta not] thenCollect:[:aSubclass| aSubclass class] "Metaclass allInstancesDo: [:m | Compiler evaluate: 'subclasses:=nil' for: m logged: false]"! ! Metaclass removeSelector: #subclasses! !Trait method! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! Metaclass removeSelector: #subclassesDo:! !Trait method! wantsChangeSetLogging "Answer whether code submitted for the receiver should be remembered by the changeSet mechanism.The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsChangeSetLogging! ! Metaclass removeSelector: #wantsChangeSetLogging! !Trait method! wantsRecompilationProgressReported "The metaclass follows the rule of the class itself." ^ self theNonMetaClass wantsRecompilationProgressReported! ! Metaclass removeSelector: #wantsRecompilationProgressReported! !Trait method! asFullRingDefinition "A behavior is converted to a ring class including its variables, methods, direct superclass, direct subclasses and the package in which is loaded. Active methods are generated and each knows its package as well. Note that for its direct superclass and subclasses no full definitions are requested. If you need to traverse hierarchies use #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:" | rgClass rgSuper rgSub rgMethod packageKeys | rgClass:= self asRingDefinition. rgClass package: (RGContainer packageOfClass: rgClass). self superclass notNil ifTrue: [ rgSuper := self superclass asRingDefinition. rgClass superclass: rgSuper ] ifFalse: [ self isTrait ifTrue: [ rgSuper := Trait asRingDefinition. rgClass superclass: rgSuper. ] ]. self subclasses do:[ :each | rgSub := each asRingDefinition. rgSub superclass: rgClass ]. packageKeys := RGContainer packageKeys. self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass theMetaClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. ^ rgClass! ! Class removeSelector: #asFullRingDefinition! !Trait method! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackages: packsBoolean "Retrieves a ring class/trait based on the receiver. The data loaded in the class/trait (active methods, superclasses, subclasses and packages) is requested by the users. As it may need to traverse hierarchies for retrieving super and subclasses a ring slice is created as the container for every class, method and package. To retrieve the slice: aRGClass environment " | rgClass rgSlice rgPackageKeys | rgSlice := RGSlice named: #fromImage. packsBoolean ifTrue: [ rgPackageKeys := rgSlice loadPackagesFromImage ]. rgClass := self asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: rgPackageKeys in: rgSlice. rgSlice cleanEmptyPackages. rgSlice loadTraitUsers. ^ rgClass! ! Class removeSelector: #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:! !Trait method! basicLocalSelectors: aSetOrNil ^self explicitRequirement.! ! Behavior removeSelector: #basicLocalSelectors:! ClassTrait removeSelector: #baseClass:traitComposition:methodDict:localSelectors:organization:! !Trait method! binding "return an association that can be used as the binding To share it between methods, reuse an existing one if possible" ^self methodDict ifEmpty: [nil -> self] ifNotEmpty: [:dict | dict anyOne classBinding]! ! ClassTrait removeSelector: #binding! !Trait method! category ^ self theNonMetaClass category! ! ClassTrait removeSelector: #category! ClassTrait removeSelector: #includesBehavior:! !Trait method! isMeta ^ true! ! ClassTrait removeSelector: #isMeta! !Trait method! isSelfEvaluating ^self isObsolete not! ! ClassTrait removeSelector: #isSelfEvaluating! !Trait method! subclassesDo: aBlock "Evaluate aBlock for each of the receiver's immediate subclasses." self theNonMetaClass subclassesDo:[:aSubclass| "The following test is for Class class which has to exclude the Metaclasses being subclasses of Class." aSubclass isMeta ifFalse:[aBlock value: aSubclass class]].! ! ClassTrait removeSelector: #subclassesDo:! ClassTrait removeSelector: #traitComposition:methodDict:localSelectors:organization:! !Trait method! asFullRingDefinition "A behavior is converted to a ring class including its variables, methods, direct superclass, direct subclasses and the package in which is loaded. Active methods are generated and each knows its package as well. Note that for its direct superclass and subclasses no full definitions are requested. If you need to traverse hierarchies use #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:" | rgClass rgSuper rgSub rgMethod packageKeys | rgClass:= self asRingDefinition. rgClass package: (RGContainer packageOfClass: rgClass). self superclass notNil ifTrue: [ rgSuper := self superclass asRingDefinition. rgClass superclass: rgSuper ] ifFalse: [ self isTrait ifTrue: [ rgSuper := Trait asRingDefinition. rgClass superclass: rgSuper. ] ]. self subclasses do:[ :each | rgSub := each asRingDefinition. rgSub superclass: rgClass ]. packageKeys := RGContainer packageKeys. self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. rgClass theMetaClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod using: packageKeys) ]. ^ rgClass! ! Trait removeSelector: #asFullRingDefinition! !Trait method! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackages: packsBoolean "Retrieves a ring class/trait based on the receiver. The data loaded in the class/trait (active methods, superclasses, subclasses and packages) is requested by the users. As it may need to traverse hierarchies for retrieving super and subclasses a ring slice is created as the container for every class, method and package. To retrieve the slice: aRGClass environment " | rgClass rgSlice rgPackageKeys | rgSlice := RGSlice named: #fromImage. packsBoolean ifTrue: [ rgPackageKeys := rgSlice loadPackagesFromImage ]. rgClass := self asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: rgPackageKeys in: rgSlice. rgSlice cleanEmptyPackages. rgSlice loadTraitUsers. ^ rgClass! ! Trait removeSelector: #asRingDefinitionWithMethods:withSuperclasses:withSubclasses:withPackages:! BehaviorTest removeSelector: #testChange! TBehavior removeSelector: #basicLocalSelectors! TBehavior removeSelector: #basicLocalSelectors:! TBehavior removeSelector: #localSelectors! TBehavior removeSelector: #localSelectors:! ----End fileIn----! !TBehavior methodsFor: '*Fuel' stamp: 'SebastianTleye 7/16/2013 17:02'! fuelIgnoredInstanceVariableNames "Indicates which variables have to be ignored during serialization." ^#()! ! !Trait method! fuelIgnoredInstanceVariableNames "Indicates which variables have to be ignored during serialization." ^#()! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/16/2013 17:05' prior: 44798169! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod.! ! !Behavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:04' prior: 41295584! subclassDefinerClass "Answer an evaluator class appropriate for evaluating definitions of new subclasses of this class." ^self compilerClass! ! !Behavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/16/2013 17:05' prior: 45364488! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod.! ! !Behavior methodsFor: 'testing' stamp: 'SebastianTleye 7/16/2013 17:04' prior: 41309493! instSize "Answer the number of named instance variables (as opposed to indexed variables) of the receiver." self flag: #instSizeChange. "Smalltalk browseAllCallsOn: #instSizeChange" " NOTE: This code supports the backward-compatible extension to 8 bits of instSize. When we revise the image format, it should become... ^ ((format bitShift: -1) bitAnd: 16rFF) - 1 Note also that every other method in this category will require 2 bits more of right shift after the change. " ^ ((self format bitShift: -10) bitAnd: 16rC0) + ((self format bitShift: -1) bitAnd: 16r3F) - 1! ! !Behavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:04' prior: 45365123! subclassDefinerClass "Answer an evaluator class appropriate for evaluating definitions of new subclasses of this class." ^self compilerClass! ! !Trait method! fuelIgnoredInstanceVariableNames "Indicates which variables have to be ignored during serialization." ^#()! ! Behavior removeSelector: #fuelIgnoredInstanceVariableNames! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'SebastianTleye 7/16/2013 17:05' prior: 44797609! recompile: selector from: oldClass ^self explicitRequirement.! ! !TBehavior methodsFor: 'testing' stamp: 'SebastianTleye 7/16/2013 17:04' prior: 40928782! instSize ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:04' prior: 40953866! subclassDefinerClass ^self explicitRequirement.! ! ----End fileIn----! !TApplyingOnClassSide methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/17/2013 14:28'! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! !Trait method! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! !TApplyingOnClassSide methodsFor: 'composition' stamp: 'SebastianTleye 7/17/2013 15:01'! uses: aTraitCompositionOrArray | copyOfOldTrait newComposition | copyOfOldTrait := self copy. newComposition := aTraitCompositionOrArray asTraitComposition. self assertConsistantCompositionsForNew: newComposition. self setTraitComposition: newComposition. SystemAnnouncer uniqueInstance traitDefinitionChangedFrom: copyOfOldTrait to: self.! ! !Trait method! uses: aTraitCompositionOrArray | copyOfOldTrait newComposition | copyOfOldTrait := self copy. newComposition := aTraitCompositionOrArray asTraitComposition. self assertConsistantCompositionsForNew: newComposition. self setTraitComposition: newComposition. SystemAnnouncer uniqueInstance traitDefinitionChangedFrom: copyOfOldTrait to: self.! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 13:50'! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! !Trait method! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 14:14'! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" self soleInstance == nil ifTrue:[^true] ifFalse:[^self soleInstance canZapMethodDictionary]! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" self soleInstance == nil ifTrue:[^true] ifFalse:[^self soleInstance canZapMethodDictionary]! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 13:53'! isAnonymous ^self soleInstance isAnonymous ! ! !Trait method! isAnonymous ^self soleInstance isAnonymous ! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/17/2013 14:33'! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: self soleInstance name , ' initialize'].! ! !Trait method! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: self soleInstance name , ' initialize'].! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/17/2013 14:40'! nonTrivial "Answer whether the receiver has any methods or instance variables." ^ self instVarNames notEmpty or: [self hasMethods or: [self hasTraitComposition]]! ! !Trait method! nonTrivial "Answer whether the receiver has any methods or instance variables." ^ self instVarNames notEmpty or: [self hasMethods or: [self hasTraitComposition]]! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 14:48'! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! !Trait method! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! !TApplyingOnClassSide methodsFor: 'initialize' stamp: 'SebastianTleye 7/17/2013 15:08'! initializeFrom: anotherClassTrait self traitComposition: self traitComposition copyTraitExpression. self methodDict: self methodDict copy. self localSelectors: self localSelectors copy. self basicOrganization: self organization copy.! ! !Trait method! initializeFrom: anotherClassTrait self traitComposition: self traitComposition copyTraitExpression. self methodDict: self methodDict copy. self localSelectors: self localSelectors copy. self basicOrganization: self organization copy.! ! !TApplyingOnClassSide methodsFor: '*NativeBoost-Core' stamp: 'SebastianTleye 7/17/2013 14:28' prior: 45367570! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! !Trait method! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! !TApplyingOnClassSide methodsFor: 'composition' stamp: 'SebastianTleye 7/17/2013 15:01' prior: 45367902! uses: aTraitCompositionOrArray | copyOfOldTrait newComposition | copyOfOldTrait := self copy. newComposition := aTraitCompositionOrArray asTraitComposition. self assertConsistantCompositionsForNew: newComposition. self setTraitComposition: newComposition. SystemAnnouncer uniqueInstance traitDefinitionChangedFrom: copyOfOldTrait to: self.! ! !Trait method! uses: aTraitCompositionOrArray | copyOfOldTrait newComposition | copyOfOldTrait := self copy. newComposition := aTraitCompositionOrArray asTraitComposition. self assertConsistantCompositionsForNew: newComposition. self setTraitComposition: newComposition. SystemAnnouncer uniqueInstance traitDefinitionChangedFrom: copyOfOldTrait to: self.! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 13:50' prior: 45368704! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! !Trait method! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 14:14' prior: 45369308! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" self soleInstance == nil ifTrue:[^true] ifFalse:[^self soleInstance canZapMethodDictionary]! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" self soleInstance == nil ifTrue:[^true] ifFalse:[^self soleInstance canZapMethodDictionary]! ! !TApplyingOnClassSide methodsFor: 'testing' stamp: 'SebastianTleye 7/17/2013 13:53' prior: 45369796! isAnonymous ^self soleInstance isAnonymous ! ! !Trait method! isAnonymous ^self soleInstance isAnonymous ! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/17/2013 14:33' prior: 45369995! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: self soleInstance name , ' initialize'].! ! !Trait method! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: self soleInstance name , ' initialize'].! ! !TApplyingOnClassSide methodsFor: 'fileIn/Out' stamp: 'SebastianTleye 7/17/2013 14:40' prior: 45370418! nonTrivial "Answer whether the receiver has any methods or instance variables." ^ self instVarNames notEmpty or: [self hasMethods or: [self hasTraitComposition]]! ! !Trait method! nonTrivial "Answer whether the receiver has any methods or instance variables." ^ self instVarNames notEmpty or: [self hasMethods or: [self hasTraitComposition]]! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 14:48' prior: 45370867! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! !Trait method! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! !TApplyingOnClassSide methodsFor: 'initialize' stamp: 'SebastianTleye 7/17/2013 15:08' prior: 45371976! initializeFrom: anotherClassTrait self traitComposition: self traitComposition copyTraitExpression. self methodDict: self methodDict copy. self localSelectors: self localSelectors copy. self basicOrganization: self organization copy.! ! !Trait method! initializeFrom: anotherClassTrait self traitComposition: self traitComposition copyTraitExpression. self methodDict: self methodDict copy. self localSelectors: self localSelectors copy. self basicOrganization: self organization copy.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/17/2013 11:21' prior: 44891843! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/17/2013 11:23' prior: 44772389! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector. self isTrait ifTrue: [ self notifyUsersOfChangedSelector: selector].! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector. self isTrait ifTrue: [ self notifyUsersOfChangedSelector: selector].! ! !TBehavior methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 10:09'! fuelNew "Answer an instance of mine in which serialized references will be injected." ^ self basicNew! ! !Trait method! fuelNew "Answer an instance of mine in which serialized references will be injected." ^ self basicNew! ! !TBehavior methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 10:09'! fuelNew: sizeRequested "Answer an instance of mine in which serialized references will be injected." ^ self basicNew: sizeRequested! ! !Trait method! fuelNew: sizeRequested "Answer an instance of mine in which serialized references will be injected." ^ self basicNew: sizeRequested! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'SebastianTleye 7/17/2013 11:21' prior: 45377725! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! !TBehavior methodsFor: 'adding/removing methods' stamp: 'SebastianTleye 7/17/2013 11:23' prior: 45380460! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector. self isTrait ifTrue: [ self notifyUsersOfChangedSelector: selector].! ! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector. self isTrait ifTrue: [ self notifyUsersOfChangedSelector: selector].! ! !TBehavior methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 10:09' prior: 45381033! fuelNew "Answer an instance of mine in which serialized references will be injected." ^ self basicNew! ! !Trait method! fuelNew "Answer an instance of mine in which serialized references will be injected." ^ self basicNew! ! !TBehavior methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 10:09' prior: 45381336! fuelNew: sizeRequested "Answer an instance of mine in which serialized references will be injected." ^ self basicNew: sizeRequested! ! !Trait method! fuelNew: sizeRequested "Answer an instance of mine in which serialized references will be injected." ^ self basicNew: sizeRequested! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 44829595! basicNew: sizeRequested self error: 'Traits cannot create instances'.! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 44829186! basicNew self error: 'Traits cannot create instances'.! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/17/2013 11:32' prior: 44137601! name ^ self subclassResponsability.! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 45385779! basicNew: sizeRequested self error: 'Traits cannot create instances'.! ! !TraitBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 45385958! basicNew self error: 'Traits cannot create instances'.! ! !TraitBehavior methodsFor: 'naming' stamp: 'SebastianTleye 7/17/2013 11:32' prior: 45386110! name ^ self subclassResponsability.! ! !ClassTrait methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 13:39'! adoptInstance: oldInstance from: oldMetaClass ^self error: 'Traits cannot adopt instances'.! ! !ClassTrait methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 14:39'! new self error: 'Traits have no instances'! ! !ClassTrait methodsFor: '*Tools-Debugger' stamp: 'SebastianTleye 7/17/2013 14:19'! canonicalArgumentName ^ 'aTrait'.! ! !ClassTrait methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 13:39' prior: 45386711! adoptInstance: oldInstance from: oldMetaClass ^self error: 'Traits cannot adopt instances'.! ! !ClassTrait methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 14:39' prior: 45386893! new self error: 'Traits have no instances'! ! !ClassTrait methodsFor: '*Tools-Debugger' stamp: 'SebastianTleye 7/17/2013 14:19' prior: 45387023! canonicalArgumentName ^ 'aTrait'.! ! !Behavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 11:31' prior: 41303797! name "Answer a String that is the name of the receiver." ^'a subclass of ', self superclass name.! ! !Behavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:06' prior: 41322656! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !Behavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:06' prior: 41323369! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds"! ! !Behavior methodsFor: '*Slot' stamp: 'SebastianTleye 7/17/2013 11:42'! layout ^ layout! ! !Behavior methodsFor: 'traits' stamp: 'SebastianTleye 7/17/2013 13:13' prior: 44261710! traitComposition: aTraitComposition "Compatibility purposes"! ! !Behavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 11:31' prior: 45387638! name "Answer a String that is the name of the receiver." ^'a subclass of ', self superclass name.! ! !Behavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:06' prior: 45387840! basicNew: sizeRequested "Primitive. Answer an instance of this class with the number of indexable variables specified by the argument, sizeRequested. Fail if this class is not indexable or if the argument is not a positive Integer, or if there is not enough memory available. Essential. See Object documentation whatIsAPrimitive." self isVariable ifFalse: [self error: self printString, ' cannot have variable sized instances']. (sizeRequested isInteger and: [sizeRequested >= 0]) ifTrue: ["arg okay; space must be low." OutOfMemory signal. ^ self basicNew: sizeRequested "retry if user proceeds"]. self primitiveFailed! ! !Behavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:06' prior: 45388599! basicNew "Primitive. Answer an instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable. Essential. See Object documentation whatIsAPrimitive." self isVariable ifTrue: [ ^ self basicNew: 0 ]. "space must be low" OutOfMemory signal. ^ self basicNew "retry if user proceeds"! ! !Behavior methodsFor: '*Slot' stamp: 'SebastianTleye 7/17/2013 11:42' prior: 45389021! layout ^ layout! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/17/2013 13:15'! baseClass ^self subclassResponsability.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/17/2013 13:16'! classClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 41279771! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! !ClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 41261354! version "Allows polymorphism with TraitDescription>>version" ^ self classVersion! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/17/2013 13:15' prior: 45390806! baseClass ^self subclassResponsability.! ! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/17/2013 13:16' prior: 45390952! classClass ^self subclassResponsibility.! ! !ClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 45391096! classVersion "Default. Any class may return a later version to inform readers that use ReferenceStream. This method allows you to distinguish between class versions when the shape of the class hasn't changed (when there's no change in the instVar names). In the conversion methods you usually can tell by the inst var names what old version you have. In a few cases, though, the same inst var names were kept but their interpretation changed (like in the layoutFrame). By changing the class version when you keep the same instVars you can warn older and newer images that they have to convert." ^ 0! ! !ClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 45391812! version "Allows polymorphism with TraitDescription>>version" ^ self classVersion! ! !Trait method! canZapMethodDictionary "Return true if it is safe to zap the method dictionary on #obsolete" self soleInstance == nil ifTrue:[^true] ifFalse:[^self soleInstance canZapMethodDictionary]! ! Metaclass removeSelector: #canZapMethodDictionary! !Trait method! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! Metaclass removeSelector: #externalTypeAlias:! !Trait method! fileOutInitializerOn: aStream (self includesSelector: #initialize) ifTrue: [aStream cr. aStream nextChunkPut: self soleInstance name , ' initialize'].! ! Metaclass removeSelector: #fileOutInitializerOn:! !Trait method! isAnonymous ^self soleInstance isAnonymous ! ! Metaclass removeSelector: #isAnonymous! !Trait method! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! Metaclass removeSelector: #isObsolete! !Trait method! nonTrivial "Answer whether the receiver has any methods or instance variables." ^ self instVarNames notEmpty or: [self hasMethods or: [self hasTraitComposition]]! ! Metaclass removeSelector: #nonTrivial! !Trait method! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! Metaclass removeSelector: #uses:instanceVariableNames:! !Trait method! hasClassSide ^self explicitRequirement.! ! ClassDescription removeSelector: #hasClassSide! ClassDescription removeSelector: #layout! ClassDescription removeSelector: #removeInstVarNamed:! !Trait method! fuelNew "Answer an instance of mine in which serialized references will be injected." ^ self basicNew! ! Behavior removeSelector: #fuelNew! !Trait method! fuelNew: sizeRequested "Answer an instance of mine in which serialized references will be injected." ^ self basicNew: sizeRequested! ! Behavior removeSelector: #fuelNew:! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! Behavior removeSelector: #removeSelector:! !Trait method! initializeFrom: anotherClassTrait self traitComposition: self traitComposition copyTraitExpression. self methodDict: self methodDict copy. self localSelectors: self localSelectors copy. self basicOrganization: self organization copy.! ! ClassTrait removeSelector: #initializeFrom:! !Trait method! isObsolete "Return true if the receiver is obsolete" ^self soleInstance == nil "Either no thisClass" or:[self soleInstance classSide ~~ self "or I am not the class of thisClass" or:[self soleInstance isObsolete]] "or my instance is obsolete"! ! ClassTrait removeSelector: #isObsolete! !Trait method! uses: aTraitCompositionOrArray | copyOfOldTrait newComposition | copyOfOldTrait := self copy. newComposition := aTraitCompositionOrArray asTraitComposition. self assertConsistantCompositionsForNew: newComposition. self setTraitComposition: newComposition. SystemAnnouncer uniqueInstance traitDefinitionChangedFrom: copyOfOldTrait to: self.! ! ClassTrait removeSelector: #uses:! !Trait method! uses: aTraitCompositionOrArray instanceVariableNames: instVarString | newComposition newMetaClass copyOfOldMetaClass | copyOfOldMetaClass := self copy. newMetaClass := self instanceVariableNames: instVarString. newComposition := aTraitCompositionOrArray asTraitComposition. newMetaClass assertConsistantCompositionsForNew: newComposition. newMetaClass setTraitComposition: newComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldMetaClass to: newMetaClass! ! ClassTrait removeSelector: #uses:instanceVariableNames:! TraitDescription removeSelector: #category! TraitDescription removeSelector: #category:! !Trait method! hasClassSide ^self explicitRequirement.! ! TraitDescription removeSelector: #hasClassSide! !Trait method! addSelectorSilently: selector withMethod: compiledMethod self methodDictAddSelectorSilently: selector withMethod: compiledMethod. self registerLocalSelector: selector. self isTrait ifTrue: [ self notifyUsersOfChangedSelector: selector].! ! TraitBehavior removeSelector: #addSelectorSilently:withMethod:! TraitBehavior removeSelector: #pureAddSelectorSilently:withMethod:! TraitBehavior removeSelector: #pureRemoveSelector:! !Trait method! removeSelector: aSelector "Assuming that the argument, selector (a Symbol), is a message selector in my method dictionary, remove it and its method. If the method to remove will be replaced by a method from my trait composition, the current method does not have to be removed because we mark it as non-local. If it is not identical to the actual method from the trait it will be replaced automatically by #noteChangedSelectors:. This is useful to avoid bootstrapping problems when moving methods to a trait (e.g., from TBehavior to TMethodDictionaryBehavior). Manual moving (implementing the method in the trait and then remove it from the class) does not work if the methods themselves are used for this process (such as compiledMethodAt:, includesLocalSelector: or addTraitSelector:withMethod:)" | changeFromLocalToTraitMethod | changeFromLocalToTraitMethod := (self includesLocalSelector: aSelector) and: [self hasTraitComposition and: [self traitComposition includesMethod: aSelector]]. changeFromLocalToTraitMethod ifFalse: [self basicRemoveSelector: aSelector] ifTrue: [self ensureLocalSelectors]. self deregisterLocalSelector: aSelector. self noteChangedSelectors: (Array with: aSelector). self isTrait ifTrue: [ self notifyUsersOfChangedSelector: aSelector].! ! TraitBehavior removeSelector: #removeSelector:! TClassDescription removeSelector: #classVersion! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:31'! name: aString ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:31'! name ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:24'! environment ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:25'! environment: anEnvironment ^self explicitRequirement.! ! !TClass methodsFor: 'pool variables' stamp: 'SebastianTleye 7/16/2013 17:29'! sharedPools: aCollection ^self explicitRequirement.! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 17:33'! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice ^self explicitRequirement.! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 17:33'! asRingDefinition ^self explicitRequirement.! ! !TClass methodsFor: '*Monticello' stamp: 'SebastianTleye 7/16/2013 17:27'! asClassDefinition ^self explicitRequirement.! ! !TClass methodsFor: '*Monticello' stamp: 'SebastianTleye 7/16/2013 17:34'! classDefinitions ^self explicitRequirement.! ! !TClass methodsFor: 'copying' stamp: 'SebastianTleye 7/16/2013 17:28'! copy ^self explicitRequirement.! ! !TClass methodsFor: '*Fuel' stamp: 'SebastianTleye 7/16/2013 17:35'! fuelAccept: aGeneralMapper ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:31' prior: 45400649! name: aString ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:31' prior: 45400767! name ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:24' prior: 45400876! environment ^self explicitRequirement.! ! !TClass methodsFor: 'accessing' stamp: 'SebastianTleye 7/16/2013 17:25' prior: 45400992! environment: anEnvironment ^self explicitRequirement.! ! !TClass methodsFor: 'pool variables' stamp: 'SebastianTleye 7/16/2013 17:29' prior: 45401128! sharedPools: aCollection ^self explicitRequirement.! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 17:33' prior: 45401265! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice ^self explicitRequirement.! ! !TClass methodsFor: '*Ring-Core-Kernel' stamp: 'SebastianTleye 7/16/2013 17:33' prior: 45401523! asRingDefinition ^self explicitRequirement.! ! !TClass methodsFor: '*Monticello' stamp: 'SebastianTleye 7/16/2013 17:27' prior: 45401646! asClassDefinition ^self explicitRequirement.! ! !TClass methodsFor: '*Monticello' stamp: 'SebastianTleye 7/16/2013 17:34' prior: 45401770! classDefinitions ^self explicitRequirement.! ! !TClass methodsFor: 'copying' stamp: 'SebastianTleye 7/16/2013 17:28' prior: 45401889! copy ^self explicitRequirement.! ! !TClass methodsFor: '*Fuel' stamp: 'SebastianTleye 7/16/2013 17:35' prior: 45401994! fuelAccept: aGeneralMapper ^self explicitRequirement.! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 40892458! version ^self explicitRequirement.! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/17/2013 11:46'! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/16/2013 17:16' prior: 45271372! hasClassSide ^self subclassResponsibility.! ! !Trait method! hasClassSide ^self subclassResponsibility.! ! !Trait method! hasClassSide ^self subclassResponsibility.! ! !TClassDescription methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:06' prior: 45403804! version ^self explicitRequirement.! ! !TClassDescription methodsFor: 'instance variables' stamp: 'SebastianTleye 7/17/2013 11:46' prior: 45403936! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !Trait method! removeInstVarNamed: aString "Remove the argument, aString, as one of the receiver's instance variables. Create an error notification if the argument is not found." ^self subclassResponsibility! ! !TClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'SebastianTleye 7/16/2013 17:16' prior: 45404691! hasClassSide ^self subclassResponsibility.! ! !Trait method! hasClassSide ^self subclassResponsibility.! ! !Trait method! hasClassSide ^self subclassResponsibility.! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:32'! soleInstance ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Tools-Debugger' stamp: 'SebastianTleye 7/17/2013 14:19'! canonicalArgumentName ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 13:39'! adoptInstance: oldInstance from: oldMetaClass ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 13:34'! fuelAccept: aGeneralMapper ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 14:39'! new ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 13:32' prior: 45406123! soleInstance ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Tools-Debugger' stamp: 'SebastianTleye 7/17/2013 14:19' prior: 45406260! canonicalArgumentName ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'initialize-release' stamp: 'SebastianTleye 7/17/2013 13:39' prior: 45406409! adoptInstance: oldInstance from: oldMetaClass ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: '*Fuel' stamp: 'SebastianTleye 7/17/2013 13:34' prior: 45406570! fuelAccept: aGeneralMapper ^self explicitRequirement.! ! !TApplyingOnClassSide methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 14:39' prior: 45406723! new ^self explicitRequirement.! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 40911284! basicNew: sizeRequested ^self explicitRequirement.! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 40910848! basicNew ^self explicitRequirement.! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 11:31' prior: 40938505! name ^self explicitRequirement.! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 45407660! basicNew: sizeRequested ^self explicitRequirement.! ! !TBehavior methodsFor: 'instance creation' stamp: 'SebastianTleye 7/17/2013 10:08' prior: 45407816! basicNew ^self explicitRequirement. ! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/17/2013 11:31' prior: 45407948! name ^self explicitRequirement.! ! ----End fileIn----! ----QUIT----an Array(18 July 2013 3:11:11 pm) Pharo.image priorSource: 11706822! ----STARTUP----an Array(18 July 2013 3:21:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 3:21:05 pm) Pharo-30280.image priorSource: 11853997! ----STARTUP----an Array(18 July 2013 3:33:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/18/2013 15:25' prior: 45242847! commentForCurrentUpdate ^ '10992 Some methods in Class could be moved to TClass https://pharo.fogbugz.com/f/cases/10992/ (pass 2) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/18/2013 15:26'! script116 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.502.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.769.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.328.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-EstebanLorenzano.17.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.94.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-EstebanLorenzano.1524.mcz KernelTests-EstebanLorenzano.530.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.141.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.835.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.129.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.241.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.179.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.122.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.356.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-EstebanLorenzano.28.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.876.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.591.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1180.mcz ToolsTest-EstebanLorenzano.denker.46.mcz Traits-EstebanLorenzano.548.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/18/2013 15:04'! update30280 "self new update30279" self withUpdateLog: '10992 Some methods in Class could be moved to TClass https://pharo.fogbugz.com/f/cases/10992/ (pass 1) '. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/18/2013 15:26'! update30281 "self new update30281" self withUpdateLog: '10992 Some methods in Class could be moved to TClass https://pharo.fogbugz.com/f/cases/10992/ (pass 2) '. self loadTogether: self script116 merge: false. self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(18 July 2013 3:35:36 pm) Pharo.image priorSource: 11854196! ----STARTUP----an Array(18 July 2013 3:45:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 3:45:02 pm) Pharo-30281.image priorSource: 11865216! ----STARTUP----an Array(18 July 2013 4:05:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 7/18/2013 16:01' prior: 45408932! commentForCurrentUpdate ^ '10889 ExplicitRequirement methods bug https://pharo.fogbugz.com/f/cases/10889/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 7/18/2013 16:02'! script117 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-EstebanLorenzano.1526.mcz KernelTests-EstebanLorenzano.532.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-EstebanLorenzano.30.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.593.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1182.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 7/18/2013 16:02'! update30282 "self new update30282" self withUpdateLog: '10889 ExplicitRequirement methods bug https://pharo.fogbugz.com/f/cases/10889/'. self loadTogether: self script117 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:51'! testExplicitRequirementDoesNotTakePrecedenceEvenWhenAddingTraits "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation, even if he trait is created later." | tempClass tempTrait | self c9 compile: 'm ^100'. tempTrait := self createTraitNamed: #TTempTrait uses: {}. tempTrait compile: 'm ^self explicitRequirement.'. tempClass := self createClassNamed: #TempClass superclass: self c9 uses: {tempTrait}. self assert: tempClass new m equals: 100! ! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:55'! testExplicitRequirementDoesNotTakePrecedenceInDeepHierarchy "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation, even if the superclass implementation is not just in the direct superclass." "C9 inherits from Object. C10 inherits from C9. C11 inherits from C10. Each Ci uses the trait Ti." self t11 compile: 'm ^self explicitRequirement'. self should: [ self c11 new m ] raise: Error. self t9 compile: 'm ^2'. self shouldnt: [ self c9 new m ] raise: Error. self shouldnt: [ self c10 new m ] raise: Error. self shouldnt: [ self c11 new m ] raise: Error. self assert: self c9 new m equals: 2. self assert: self c10 new m equals: 2. self assert: self c11 new m equals: 2! ! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:55'! testExplicitRequirementInClassAlwaysTakesPrecedence "If i create an explicit requirement method on a class, and the superclass already have the method (non explicit requirement), the class should raise an exception" self c10 compile: 'm ^111'. self c11 compile: 'm ^self explicitRequirement'. self should: [ self c11 new m ] raise: Error! ! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:55'! testExplicitRequirementTakesPrecedenceOverTraitImplementation "If i create an explicit requirement method on a trait, the method has to be explicit requirement " self t12 compile: 'm ^11'. self t11 compile: 'm ^self explicitRequirement'. self should: [ self c11 new m ] raise: Error. "If i create an explicit requirement method on a class, and the superclass already have the method (non explicit requirement), the class should raise an exception" self c10 compile: 'm ^111'. self c11 compile: 'm ^self explicitRequirement'. self should: [ self c11 new m ] raise: Error. ! ! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:54'! testExplicitRequirementWithSuperclassImplementation "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation." self t10 compile: 'm ^self explicitRequirement'. self should: [ self c10 new m ] raise: Error. self c9 compile: 'm ^123'. self assert: self c10 new m equals: 123. self c9 removeSelector: #m. self t10 removeSelector: #m. "The previous is still true even if we compile the superclass method before the trait method." self c9 compile: 'm ^123'. self t10 compile: 'm ^self explicitRequirement'. self shouldnt: [ self c10 new m ] raise: Error. self c9 removeSelector: #m. self should: [ self c10 new m ] raise: Error. self t10 removeSelector: #m! ! !TraitTest methodsFor: 'testing' stamp: 'DamienCassou 7/4/2013 18:54'! testExplicitRequirementWithSuperclassImplementationAndAnotherTrait "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation." "The previous should still be true even in the presence of a superclass importing another explicitRequirement method." "C9 inherits from Object. C10 inherits from C9. C11 inherits from C10. Each Ci uses the trait Ti." self t10 compile: 'm ^self explicitRequirement'. self t11 compile: 'm ^self explicitRequirement'. self should: [ self c10 new m ] raise: Error. self should: [ self c11 new m ] raise: Error. self t9 compile: 'm ^2'. self assert: self c9 new m equals: 2. self assert: self c10 new m equals: 2. self assert: self c11 new m equals: 2! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:24'! c10 ^c10.! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:24'! c10: anObject ^c10 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:54'! c11 ^c11.! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:55'! c11: anObject ^c11 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:34'! c9 ^c9! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:34'! c9: anObject ^c9 := anObject! ! !TraitsResource methodsFor: 'as yet unclassified' stamp: 'DamienCassou 7/4/2013 17:39' prior: 43848225! setUp "Please note, that most tests rely on this setup of traits and classes - and that especially the order of the definitions matters." "SetUpCount := SetUpCount + 1." dirty := false. SystemAnnouncer uniqueInstance suspendAllWhile: [self t1: (self createTraitNamed: #T1 uses: { }). self t1 comment: 'I am the trait T1'. self t1 compile: 'm11 ^11' classified: #cat1. self t1 compile: 'm12 ^12' classified: #cat2. self t1 compile: 'm13 ^self m12' classified: #cat3. self t2: (self createTraitNamed: #T2 uses: { }). self t2 compile: 'm21 ^21' classified: #cat1. self t2 compile: 'm22 ^22' classified: #cat2. self t2 classSide compile: 'm2ClassSide: a ^a'. self t3: (self createTraitNamed: #T3 uses: { }). self t3 compile: 'm31 ^31' classified: #cat1. self t3 compile: 'm32 ^32' classified: #cat2. self t3 compile: 'm33 ^33' classified: #cat3. self t4: (self createTraitNamed: #T4 uses: { (self t1). (self t2) }). self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11" self t4 compile: 'm42 ^42' classified: #cat2. self t5: (self createTraitNamed: #T5 uses: self t1 + self t2). self t5 compile: 'm51 ^super foo' classified: #cat1. self t5 compile: 'm52 ^ self class bar' classified: #cat1. self t5 compile: 'm53 ^ self class bar' classified: #cat1. self t6: (self createTraitNamed: #T6 uses: (self t1 + self t2) @ { (#m22Alias -> #m22) }). self t9: (self createTraitNamed: #T9 uses: { }). self t10: (self createTraitNamed: #T10 uses: { }). self t12: (self createTraitNamed: #T12 uses: {}). self t11: (self createTraitNamed: #T11 uses: { self t12}). self c1: (self createClassNamed: #C1 superclass: Object uses: { }). self c1 compile: 'foo ^true' classified: #accessing. self c2: (self createClassNamed: #C2 superclass: self c1 uses: self t5 - { #m11 }). self c2 compile: 'foo ^false' classified: #private. self c2 compile: 'bar ^self foo' classified: #private. self c9: (self createClassNamed: #C9 superclass: Object uses: self t9 ). self c10: (self createClassNamed: #C10 superclass: self c9 uses: self t10 ). self c11: (self createClassNamed: #C11 superclass: self c10 uses: self t11 ). self setUpTrivialRequiresFixture. self setUpTwoLevelRequiresFixture. self setUpTranslatingRequiresFixture].! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:25'! t10 ^t10.! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:25'! t10: anObject ^t10 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:54'! t11 ^t11.! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 16:54'! t11: anObject ^t11 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 7/1/2013 14:15'! t12 ^t12.! ! !TraitsResource methodsFor: 'accessing' stamp: 'SebastianTleye 7/1/2013 14:15'! t12: anObject ^t12 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:40'! t8 ^t8! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:40'! t8: anObject ^t8 := anObject! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:38'! t9 ^t9! ! !TraitsResource methodsFor: 'accessing' stamp: 'ST 6/11/2013 16:38'! t9: anObject ^t9 := anObject! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 17:04'! c10 ^TraitsResource current c10! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 17:04'! c11 ^TraitsResource current c11! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'ST 6/11/2013 17:06'! c9 ^TraitsResource current c9! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 17:04'! t10 ^TraitsResource current t10! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 6/27/2013 17:04'! t11 ^TraitsResource current t11! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 7/1/2013 14:17'! t12 ^TraitsResource current t12! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'ST 6/11/2013 17:06'! t8 ^TraitsResource current t8! ! !TraitsTestCase methodsFor: 'accessing' stamp: 'ST 6/11/2013 17:06'! t9 ^TraitsResource current t9! ! !Object methodsFor: 'error handling' stamp: 'DamienCassou 7/5/2013 10:14' prior: 28608775! explicitRequirement "If one of the superclasses can perform the selector, we execute the method of that class, otherwise, the explicit requirement error is thrown" | originalMethod originalSelector originalClass originalArguments errorBlock originalReceiver | originalClass := thisContext sender receiver class. originalReceiver := thisContext sender receiver. originalMethod := thisContext sender method. originalSelector := originalMethod selector. originalArguments := thisContext sender arguments. errorBlock := [ ^ self error: 'Explicitly required method' ]. originalMethod isFromTrait ifFalse: errorBlock. originalClass superclass withAllSuperclassesDo: [ :superCl | superCl methodDict at: originalSelector ifPresent: [ :method | (method isProvided or: [ method isFromTrait not ]) ifTrue: [ ^ method valueWithReceiver: originalReceiver arguments: originalArguments ] ] ifAbsent: [ ] ]. ^ errorBlock value! ! "Compiler"! "Fuel"! "FuelTests"! "GroupManagerUI"! "HelpSystem-Core"! "Kernel"! "KernelTests"! "Manifest-Core"! "Monticello"! "NativeBoost-Core"! "RPackage-Core"! "Refactoring-Core"! "Ring-Core-Kernel"! "Slot"! "Spec-Builder"! "System-Support"! "Tests"! "Tools"! "ToolsTest"! "Traits"! ----End fileIn----! ----QUIT----an Array(18 July 2013 4:08:30 pm) Pharo.image priorSource: 11865415! ----STARTUP----an Array(18 July 2013 4:19:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 July 2013 4:19:03 pm) Pharo-30282.image priorSource: 11886713! ----STARTUP----an Array(19 July 2013 8:51:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/19/2013 08:47' prior: 45420151! commentForCurrentUpdate ^ '11193 add a #bytecode method to CompiledMethod https://pharo.fogbugz.com/f/cases/11193 11127 Tests.CodeImport.ChunkImportTestCase.testImportAClassCategory failing https://pharo.fogbugz.com/f/cases/11127 11191 Tests failing in traits https://pharo.fogbugz.com/f/cases/11191'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/19/2013 08:47'! script118 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.43.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1528.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.45.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.492.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.47.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.856.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.24.mcz Spec-Builder-EstebanLorenzano.30.mcz Spec-Core-MarcusDenker.139.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.29.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.209.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1182.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/19/2013 08:47'! update30283 "self new update30283" self withUpdateLog: '11193 add a #bytecode method to CompiledMethod https://pharo.fogbugz.com/f/cases/11193 11127 Tests.CodeImport.ChunkImportTestCase.testImportAClassCategory failing https://pharo.fogbugz.com/f/cases/11127 11191 Tests failing in traits https://pharo.fogbugz.com/f/cases/11191'. self loadTogether: self script118 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ChunkImportTestCase methodsFor: 'importing-code' stamp: 'CamilloBruni 7/18/2013 15:59' prior: 42009923! testImportAClassCategory | class classOrganizationString chunk | classOrganizationString := '(#testing testImportAMethod testImportAClass) (#auxiliar importAClass)'. chunk := '!!{1} reorganize!!'. SystemAnnouncer uniqueInstance suspendAllWhile: [ [ class := self importAClass. "we write the methods we will categorize" class compileSilently: 'testImportAClass'. class compileSilently: 'testImportAMethod'. class compileSilently: 'importAClass'. CodeImporter evaluateString: (chunk format: { class name asString }), classOrganizationString. "we do not care about the order of the output just that all the elements are present" self assert: (classOrganizationString trimBoth findTokens: String cr, ' ') sorted equals: (class organization stringForFileOut findTokens: String cr, ' ') sorted. ] ensure: [ class ifNotNil: [ class removeFromSystem ] ] ]! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'MarcusDenker 7/18/2013 17:13'! testBytecode self assert: (Object>>#halt) bytecode equals: #[64 209 135 120]! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 7/18/2013 17:10'! bytecode "Answer an ByteArray of the btyecode of the method." | start stop bytecode | start := self initialPC. stop := self endPC. bytecode := ByteArray new: (stop - start + 1). start to: stop do: [:index | bytecode byteAt: index - start + 1 put: (self byteAt: index)]. ^bytecode! ! !TraitsResource methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 7/18/2013 16:32' prior: 45435330! setUp "Please note, that most tests rely on this setup of traits and classes - and that especially the order of the definitions matters." "SetUpCount := SetUpCount + 1." dirty := false. SystemAnnouncer uniqueInstance suspendAllWhile: [self t1: (self createTraitNamed: #T1 uses: { }). self t1 comment: 'I am the trait T1'. self t1 compile: 'm11 ^11' classified: #cat1. self t1 compile: 'm12 ^12' classified: #cat2. self t1 compile: 'm13 ^self m12' classified: #cat3. self t2: (self createTraitNamed: #T2 uses: { }). self t2 compile: 'm21 ^21' classified: #cat1. self t2 compile: 'm22 ^22' classified: #cat2. self t2 classSide compile: 'm2ClassSide: a ^a'. self t3: (self createTraitNamed: #T3 uses: { }). self t3 compile: 'm31 ^31' classified: #cat1. self t3 compile: 'm32 ^32' classified: #cat2. self t3 compile: 'm33 ^33' classified: #cat3. self t4: (self createTraitNamed: #T4 uses: { (self t1). (self t2) }). self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11" self t4 compile: 'm42 ^42' classified: #cat2. self t5: (self createTraitNamed: #T5 uses: self t1 + self t2). self t5 compile: 'm51 ^super foo' classified: #cat1. self t5 compile: 'm52 ^ self class bar' classified: #cat1. self t5 compile: 'm53 ^ self class bar' classified: #cat1. self t6: (self createTraitNamed: #T6 uses: self t1 + (self t2 @ { (#m22Alias -> #m22) })). self t9: (self createTraitNamed: #T9 uses: { }). self t10: (self createTraitNamed: #T10 uses: { }). self t12: (self createTraitNamed: #T12 uses: {}). self t11: (self createTraitNamed: #T11 uses: { self t12}). self c1: (self createClassNamed: #C1 superclass: Object uses: { }). self c1 compile: 'foo ^true' classified: #accessing. self c2: (self createClassNamed: #C2 superclass: self c1 uses: self t5 - { #m11 }). self c2 compile: 'foo ^false' classified: #private. self c2 compile: 'bar ^self foo' classified: #private. self c9: (self createClassNamed: #C9 superclass: Object uses: self t9 ). self c10: (self createClassNamed: #C10 superclass: self c9 uses: self t10 ). self c11: (self createClassNamed: #C11 superclass: self c10 uses: self t11 ). self setUpTrivialRequiresFixture. self setUpTwoLevelRequiresFixture. self setUpTranslatingRequiresFixture].! ! "Kernel"! "KernelTests"! "Tests"! ----End fileIn----! ----QUIT----an Array(19 July 2013 8:51:34 am) Pharo.image priorSource: 11886912! ----STARTUP----an Array(19 July 2013 9:05:38 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 July 2013 9:05:38 am) Pharo-30283.image priorSource: 11902209! ----STARTUP----an Array(19 July 2013 1:38:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/19/2013 13:34' prior: 45441644! commentForCurrentUpdate ^ '10349 GroupsManager, GroupsHolder use strange plural https://pharo.fogbugz.com/f/cases/10349 11190 Implement missing update parameters https://pharo.fogbugz.com/f/cases/11190 11194 Config browser does not update in Pharo 3.0 when switching repos https://pharo.fogbugz.com/f/cases/11194'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/19/2013 13:34'! script119 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1528.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.47.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.494.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.49.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.858.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.26.mcz Spec-Builder-EstebanLorenzano.30.mcz Spec-Core-MarcusDenker.141.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.31.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.211.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1184.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/19/2013 13:35'! update30284 "self new update30284" self withUpdateLog: '10349 GroupsManager, GroupsHolder use strange plural https://pharo.fogbugz.com/f/cases/10349 11190 Implement missing update parameters https://pharo.fogbugz.com/f/cases/11190 11194 Config browser does not update in Pharo 3.0 when switching repos https://pharo.fogbugz.com/f/cases/11194'. self loadTogether: self script119 merge: false. SpecBinder initialize. SpecInterpreter hardResetBindings. . self flushCaches. ! ! "ScriptLoader30"! !TreeModel commentStamp: '' prior: 42768958! I am the Spec model of a MorphTreeMorph tree.! !GroupHolder commentStamp: '' prior: 0! A GroupsHolder is a simple object which manage a collection of groups! !GroupManager commentStamp: '' prior: 0! A GroupsManager should be a singleton. It manages all the groups of the system, to be able to share groups among tools! !MetacelloConfigurationBrowserPane methodsFor: 'accessing' stamp: 'TorstenBergmann 7/19/2013 09:47' prior: 45155284! repository: aRepositoryUrl "clear config cache for new repositories" repository = aRepositoryUrl ifFalse: [ configurations := nil ]. repository := aRepositoryUrl. self configurationList items: self configurations. self window ifNotNil: [:w | w title: aRepositoryUrl ]! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 7/19/2013 09:47' prior: 43754492! switchRepository | dialog | dialog := ListDialogWindow new getList: [ :r| self availableRepositories ]; displayBlock: [:e | e ]; title: 'Repository Search'; yourself. dialog browseBlock: [ :el | el ifNotNil: [ "only available onWin until other platforms can open a URL too" OSPlatform isWin32 ifTrue: [ NBWin32Shell shellBrowse: el ] ]]. (dialog openModal) cancelled ifFalse: [ dialog listIndex > 0 ifTrue: [ self repository: (self availableRepositories at: dialog listIndex) ]]! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:17' prior: 18989679! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !MorphicBindings methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 15:11' prior: 38038773! initializeClassesDictionary ^ IdentityDictionary new at: #List put: #PluggableListMorph; at: #IconList put: #PluggableIconListMorph; at: #Text put: #PluggableTextMorph; at: #Button put: #PluggableButtonMorph; at: #Panel put: #PanelMorph; at: #Checkbox put: #CheckboxMorph; at: #DropList put: #DropListMorph; at: #TextField put: #PluggableTextFieldMorph; at: #Label put: #LabelMorph; at: #MultiColumnList put: #PluggableMultiColumnListMorph; at: #Tree put: #MorphTreeMorph; at: #Slider put: #PluggableSliderMorph; at: #FrameLayout put: #LayoutFrame; at: #Window put: #SpecWindow; at: #DialogWindow put: #SpecDialogWindow; yourself! ! !PluggableListMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/18/2013 14:20' prior: 29471539! update: aParameter "Refer to the comment in View|update:." (aParameter == getListSelector or: [ aParameter == getListElementSelector ]) ifTrue: [self updateList. ^ self]. aParameter == getIndexSelector ifTrue: [self selectionIndex: self getCurrentSelectionIndex. ^ self]. aParameter == #allSelections ifTrue: [self selectionIndex: self getCurrentSelectionIndex. ^ self changed]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #setMultipleSelection: ifTrue: [ self setMultipleSelection: aParameter second ]! ! !TreeModel commentStamp: '' prior: 45468024! I am the Spec model of a MorphTreeMorph tree.! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 7/18/2013 15:11' prior: 33988395! defaultSpec ^ {#TreeSpec. #model:. #(model treeModel). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 7/16/2013 11:29' prior: 53522132! example | m | m := self new. m openWithSpec. m roots: #(a b c d). m childrenBlock: [:it | it = #c ifTrue: [ {1. 2. 3} ] ifFalse: [ {} ]]. m displayBlock: [:item | item isSymbol ifTrue: [ item asUppercase , ' symbol' ] ifFalse: [ item printString ]]. m dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]! ! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 4/17/2013 19:47'! exampleOfOldAPI | m | m := self new. m openWithSpec. m roots: #(a b c d). m childrenBlock: [:it | it = #c ifTrue: [ {1. 2. 3} ] ifFalse: [ {} ]]. m displayBlock: [:item | item isSymbol ifTrue: [ item asUppercase , ' symbol' ] ifFalse: [ item printString ]].! ! !TreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/18/2013 14:00' prior: 33989090! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := source scrollerSubMorphFromPoint: event position. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42'! allowMenuOnNoItem ^ allowMenuOnNoItem contents! ! !TreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42'! allowMenuOnNoItem: aBoolean allowMenuOnNoItem contents: aBoolean! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27'! autoDeselection ^ autoDeselection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27'! autoDeselection: aBoolean autoDeselection contents: aBoolean! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:55'! autoMultiSelection ^ autoMultiSelection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:03'! autoMultiSelection: aBoolean autoMultiSelection contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2013 23:11'! beCheckList self isCheckList: true! ! !TreeModel methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 4/20/2013 02:43'! changed: aSymbol treeModel changed: aSymbol! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 53518402! childrenBlock < api: #inspect> "Return the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" ^ childrenBlockHolder contents! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 53518673! childrenBlock: aBlock < api: #block getter: #childrenBlock registration: #whenChildrenBlockChanged:> "Set the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" childrenBlockHolder contents: aBlock! ! !TreeModel methodsFor: 'private-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34'! childrenFor: anItem ^ childrenBlockHolder contents cull: anItem cull: self! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:56'! columnInset ^ columnInset contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! columnInset: anInteger columnInset contents: anInteger! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 21:07'! columns ^ columns contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 21:11'! columns: aCollection columns contents: aCollection! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 53519017! displayBlock < api: #inspect> "Return the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" ^ displayBlock contents! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 53519285! displayBlock: aBlock < api: #block getter: #displayBlock registration: #whenDisplayBlockChanged:> "Set the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" displayBlock contents: aBlock! ! !TreeModel methodsFor: 'error handling' stamp: 'BenjaminVanRyseghem 4/17/2013 20:24'! doesNotUnderstand: aMessage (self treeModel respondsTo: aMessage selector) ifFalse: [ ^ super doesNotUnderstand: aMessage ]. ^ self treeModel perform: aMessage selector withArguments: aMessage arguments! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! doubleClick doubleClick contents value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! doubleClick: aBlock doubleClick contents: aBlock! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! evenRowColor ^ evenRowColor contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! evenRowColor: aColor evenRowColor contents: aColor! ! !TreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character tab asKeyCombination }! ! !TreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character tab shift asKeyCombination }! ! !TreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/19/2013 17:56'! expandAll self treeModel changed: #(rootNodes expandAll)! ! !TreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/19/2013 17:56'! expandRoots self treeModel changed: #(rootNodes expandRoots)! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 14:13'! iconBlock ^ [:each | self iconFor: each ]! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:35'! iconBlock: aBlock iconBlock contents: aBlock! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 5/21/2013 14:14'! iconFor: aNode ^ iconBlock contents cull: aNode! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2013 11:13' prior: 53516975! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item copy ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58'! isCheckList ^ isCheckList contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04'! isCheckList: aBoolean isCheckList contents: aBoolean! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 18:59'! keyStroke: aKeyStroke keyStroke contents cull: aKeyStroke! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06'! keyStrokeAction: aBlock keyStroke contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 53519624! menu "Return the block used to generate the tree menu" ^ menuBlockHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 53519810! menu: aBlock < api: #block getter: #menu registration: #whenMenuChanged:> "Set the block used to generate the tree menu" menuBlockHolder contents: aBlock! ! !TreeModel methodsFor: 'morphic' stamp: 'DamienCassou 6/6/2013 16:41'! menu: aMenu shifted: aBoolean (self allowMenuOnNoItem not and: [ self selectedItems isEmpty ]) ifTrue: [ ^ nil ]. menuBlockHolder contents cull: aMenu cull: aBoolean. ^ aMenu! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! multiSelection ^ multiSelection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06'! multiSelection: aBoolean multiSelection contents: aBoolean! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! oddRowColor ^ oddRowColor contents! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! oddRowColor: aColor oddRowColor contents: aColor! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00'! preferedPaneColor ^ preferedPaneColor contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! preferedPaneColor: aColor preferedPaneColor contents: aColor! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/21/2013 16:35' prior: 53517376! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged do: [ :ann | selectionHolder contents: ann selection selectedItems ]. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo:[ self updateTree ]. autoDeselection whenChangedDo: [:boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt do: [ self selectedItems: selectionHolder contents ].! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:35'! resetSelection self selectedItems: {}! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01'! resizerWidth ^ resizerWidth contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! resizerWidth: anInteger resizerWidth contents: anInteger! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:28'! rootNodeFromItem: item ^ rootNodeHolder contents cull:item! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:29'! rootNodeHolder ^ rootNodeHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:29'! rootNodeHolder: aBlock rootNodeHolder contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:44' prior: 53520052! roots < api: #inspect> "Return the tree roots" ^ rootsHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:47' prior: 53520210! roots: aCollection < api: #st getter: #roots registration: #whenRootsChanged:> "Set the tree roots" rootsHolder contents: aCollection. treeModel rootItems: aCollection! ! !TreeModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01'! rowInset ^ rowInset contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07'! rowInset: anInteger rowInset contents: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 16:20'! secondSelection: anItem self widget ifNotNil: [ :w | w listManager secondSelection: anItem ]! ! !TreeModel methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/25/2013 18:02' prior: 53520432! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ treeModel selectedItems ifEmpty: [ nil ] ifNotEmpty: [ :collection | collection last ]! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:46' prior: 53520684! selectedItem: anItem < api: #st getter: #selectedItem registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" self selectedItems: { anItem }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/7/2013 21:15'! selectedItems < api: #inspect> "Return the selected items" ^ selectionHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 17:03'! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" "treeModel selectNodePath: aCollection." selectionHolder contents: aCollection. ! ! !TreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 17:55'! treeModel ^ treeModel! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/20/2013 02:59' prior: 53521004! updateTree < api: #do> "Force the tree to refresh" self treeModel resetRootNodes. self treeModel changed: #rootNodes. treeUpdated contents: nil.! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23' prior: 53521175! whenChildrenBlockChanged: aBlock "Set a block to perform when a new childrenBlock is set" childrenBlockHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24' prior: 53521401! whenDisplayBlockChanged: aBlock "Set a block to perform when a new displayBlock is set" displayBlock whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23' prior: 53521621! whenMenuChanged: aBlock "Set a block to perform when a new menuBlock is set" menuBlockHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 17:42'! whenRootsChanged: aBlock rootsHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24'! whenSelectedItemsChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/20/2013 02:58'! whenTreeUpdated: aBlock treeUpdated whenChangedDo: aBlock! ! !TreeModel methodsFor: 'private-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 53518247! wrapItem: anItem ^ displayBlock contents cull: anItem cull: self! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:27' prior: 32103090! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:15' prior: 36996265! initialize "Initialization code for ButtonComposableModel" super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self on: Character space asKeyCombination do: [ self action ].! ! !ListComposableModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/18/2013 14:19' prior: 34015768! acceptDroppingMorph: draggedMorph event: event inMorph: source | item index | index := source rowAtLocation: event position. item := listHolder contents at: index ifAbsent: [ nil ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item. index }! ! !ListComposableModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:20' prior: 24500852! registerEvents listHolder whenChangedDo: [ self refreshListItems ]. filteringBlockHolder whenChangedDo: [ self refreshListItems ]. selectionHolder index whenChangedDo: [ self changed: #getIndex ]. multiSelection whenChangedDo: [ :b | self changed: { #setMultipleSelection: . b } ]. wrapBlockHolder whenChangedDo:[ self changed: #listElementAt: ]. sortingBlockHolder whenChangedDo: [ listHolder contents: (listHolder contents sorted: sortingBlockHolder contents). self changed: #listElementAt: ]. ! ! !ButtonModelTest methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/18/2013 13:48' prior: 18560076! testAskBeforeChanging |buttonModel window state| buttonModel := ButtonModel new. self assert: buttonModel askBeforeChanging not. window := buttonModel openWithSpec. state := buttonModel widget askBeforeChanging. self assert: state not. buttonModel askBeforeChanging: true. state := buttonModel widget askBeforeChanging. window close. self assert: state ! ! !PluggableSliderMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 14:34' prior: 29508208! update: aParameter aParameter = getEnabledSelector ifTrue: [ ^ self updateEnabled ]. aParameter = getValueSelector ifTrue: [ ^ self updateValue ]. aParameter = getLabelSelector ifTrue: [ ^ self updateLabel ]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #max: ifTrue: [ self max: aParameter second ]. aParameter first = #min: ifTrue: [ self min: aParameter second ]. aParameter first = #quantum: ifTrue: [ self quantum: aParameter second ]. aParameter first = #scaledValue: ifTrue: [ self scaledValue: aParameter second ]. aParameter first = #value: ifTrue: [ self value: aParameter second ].! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/18/2013 14:25' prior: 36217206! update: aParameter aParameter == #getItems ifTrue: [ ^ self updateItems ]. aParameter == #getListSize ifTrue: [ ^ self updateListSize ]. aParameter == #getHeaderTitle ifTrue: [ ^ self updateHeaderTitle ]. aParameter == #iconMaxSize ifTrue: [ ^ self updateIconMaxSize ]. aParameter == #iconForItem:at: ifTrue: [ ^ self updateIconCache ]. aParameter == #resetSelectedIndexes ifTrue: [ ^ self deselectAll ]. aParameter == #allowToSelect ifTrue: [ ^ self updateAllowToSelect ]. aParameter == #invalidateIcons ifTrue: [ ^ self invalidateIconCache ]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #deSelectOnReclick: ifTrue: [ self deSelectOnReclick: aParameter second ]. aParameter first = #isMultipleSelection: ifTrue: [ self isMultipleSelection: aParameter second ]. aParameter first = #unselectOnChange: ifTrue: [ self unselectOnChange: aParameter second ]. aParameter first = #hasHeader: ifTrue: [ self hasHeader: aParameter second ]. aParameter first = #setIndex: ifTrue: [ self setIndex: aParameter second ].! ! !CheckboxMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/18/2013 14:16' prior: 19016725! update: aParameter "Refer to the comment in View|update:." aParameter == self getStateSelector ifTrue: [self updateSelection. ^ self]. aParameter == self getEnabledSelector ifTrue: [self updateEnabled. ^ self]. aParameter == self getLabelSelector ifTrue: [self updateLabel. ^ self]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #labelClickable: ifTrue: [ self labelClickable: aParameter second ]. aParameter first = #label: ifTrue: [ self label: aParameter second ]! ! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2012 14:45' prior: 50705062! bindings ^ bindings ifNil: [ bindings := self defaultBindings ]! ! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2012 15:17' prior: 50705225! bindings: aBinding self bindings bindings: aBinding! ! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2012 14:56' prior: 50706050! defaultBindings ^ BindingsHolder new! ! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/18/2013 15:22'! hardResetBindings bindings := nil! ! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/15/2013 11:02' prior: 50706712! resetBindings self bindings resetBinding! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/18/2013 14:14' prior: 29391337! update: aParameter |state| aParameter ifNil: [^self]. getLabelSelector ifNotNil: [ aParameter == getLabelSelector ifTrue: [ (self labelMorph respondsTo: #font) ifTrue: [self label: (model perform: getLabelSelector) font: self labelMorph font] ifFalse: [self label: (model perform: getLabelSelector)]]]. state := self getModelState. (state ~= (self valueOfProperty: #lastState) or: [ getStateSelector isNil and: [aParameter == #onOffColor]]) ifTrue: [self color: self colorToUse. self setProperty: #lastState toValue: state]. aParameter == getEnabledSelector ifTrue: [^self enabled: (model perform: getEnabledSelector)]. getColorSelector ifNotNil: [ | cc | color = (cc := model perform: getColorSelector) ifFalse: [ color := cc. self onColor: color offColor: color. self changed ]]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #askBeforeChanging: ifTrue: [ self askBeforeChanging: aParameter second ]! ! !TabManagerModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50'! addDependent: aMorph self myDependents add: aMorph! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50' prior: 40133455! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 15:06' prior: 37816157! initializeWidgets self instantiateModels: #( tree #TreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'search'; entryCompletion: nil; acceptOnCR: true! ! !AbstractGroup methodsFor: 'protocol' stamp: 'MarcusDenker 7/19/2013 10:59' prior: 17230817! unregister GroupManager unregister: self! ! !Nautilus class methodsFor: 'private' stamp: 'MarcusDenker 7/19/2013 10:59' prior: 27982318! buildGroupManagerFor: anInstance | holder | holder := GroupHolder new. (holder addADynamicClassGroupSilentlyNamed: 'Most Viewed Classes' block: [ anInstance recentClassesElements ]) removable: false. (holder addADynamicClassGroupSilentlyNamed: 'Last Modified Classes' block: [ self lastModifiedClasses ]) removable: false. (holder addADynamicGroupSilentlyNamed: 'Work' block: [ {} ]) removable: true; isFillable: true. ^ holder ! ! !GroupHolder commentStamp: '' prior: 45468123! A GroupsHolder is a simple object which manage a collection of groups! !GroupHolder methodsFor: 'adding' stamp: 'BenjaminVanRyseghem 3/28/2011 14:04'! add: aCollection into: aGroup aGroup ifAllowed: [ aGroup addAll: aCollection ] ifNot: [ self openReadOnlyError ]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 1/24/2013 14:32'! addADynamicClassGroupNamed: entry block: aBlock (self includesAGroupNamed: entry) ifTrue: [ self openError: entry. ^ nil] ifFalse: [ | group | group := self groups add: (DynamicClassGroup named: entry block: aBlock). GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenAdded group: group into: self ). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 1/24/2013 14:32'! addADynamicClassGroupNamed: entry blocks: aCollection (self includesAGroupNamed: entry) ifTrue: [ self openError: entry. ^ nil] ifFalse: [ | group | group := self groups add: (DynamicClassGroup named: entry blocks: aCollection). GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenAdded group: group into: self ). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 2/27/2012 23:34'! addADynamicClassGroupSilentlyNamed: entry block: aBlock (self includesAGroupNamed: entry) ifTrue: [ ^ nil ] ifFalse: [ | group | group := self groups add: (DynamicClassGroup named: entry block: aBlock). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 2/27/2012 23:35'! addADynamicClassGroupSilentlyNamed: entry blocks: aCollection (self includesAGroupNamed: entry) ifTrue: [ ^ nil ] ifFalse: [ | group | group := self groups add: (DynamicClassGroup named: entry blocks: aCollection). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 1/24/2013 14:32'! addADynamicGroupNamed: entry block: aBlock (self includesAGroupNamed: entry) ifTrue: [ self openError: entry. ^ nil] ifFalse: [ | group | group := self groups add: (DynamicGroup named: entry block: aBlock). GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenAdded group: group into: self ). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 1/24/2013 14:33'! addADynamicGroupNamed: entry blocks: aCollection (self includesAGroupNamed: entry) ifTrue: [ self openError: entry. ^ nil] ifFalse: [ | group | group := self groups add: (DynamicGroup named: entry blocks: aCollection). GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenAdded group: group into: self ). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 2/27/2012 23:35'! addADynamicGroupSilentlyNamed: entry block: aBlock (self includesAGroupNamed: entry) ifTrue: [ ^ nil ] ifFalse: [ | group | group := self groups add: (DynamicGroup named: entry block: aBlock). ^ group]! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 2/27/2012 23:35'! addADynamicGroupSilentlyNamed: entry blocks: aCollection (self includesAGroupNamed: entry) ifTrue: [ ^ nil ] ifFalse: [ | group | group := self groups add: (DynamicGroup named: entry blocks: aCollection). ^ group]! ! !GroupHolder methodsFor: 'adding' stamp: 'BenjaminVanRyseghem 1/24/2013 14:33'! addAGroup: aGroup (self includesAGroupNamed: aGroup name) ifTrue: [ self openError: aGroup name. ^ nil]. self groups add: aGroup. GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenAdded group: aGroup into: self ).! ! !GroupHolder methodsFor: 'dynamic group' stamp: 'BenjaminVanRyseghem 3/2/2012 17:32'! addAnEmptyDynamicGroupNamed: aName ^ (self addADynamicGroupNamed: aName block: [ {} ]) isFillable: true; yourself! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/2/2012 17:24'! addClasses: aCollection into: aGroup aGroup addClasses: aCollection! ! !GroupHolder methodsFor: 'adding' stamp: 'BenjaminVanRyseghem 3/21/2011 15:26'! createADynamicGroup | entry aClass aSelector | entry := UIManager default textEntry: 'Name of the new group:' title: 'Create a new group' entryText: 'MyNewGroupName'. aClass := nil. aSelector := nil. ^ entry ifNotNil: [ self addADynamicGroupSilentlyNamed: entry model: aClass selector: aSelector ].! ! !GroupHolder methodsFor: 'adding' stamp: 'BenjaminVanRyseghem 3/2/2012 17:16'! createAnEmptyStaticGroup | entry | entry := UIManager default request: 'Name of the new group:' initialAnswer: '' title: 'Create a new group'. ^ (entry isNil or: [entry isEmpty]) ifFalse: [ self addAnEmptyDynamicGroupNamed: entry ]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 14:40'! groupNamed: aString ^ self groups detect: [:each | each name = aString]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 15:04'! groups ^ groups ifNil: [ groups := OrderedCollection new ]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 14:32'! groupsNames ^ self groups collect: [:group | group name ]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/14/2011 16:00'! includes: aGroup ^ self groups includes: aGroup! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 14:37'! includesAGroupNamed: aName ^ self groupsNames includes: aName! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/21/2011 11:06'! isEmpty ^ self groups isEmpty.! ! !GroupHolder methodsFor: 'windows' stamp: 'BenjaminVanRyseghem 1/24/2013 14:40'! openError: name (GroupAlreadyExists groupName: name) signal! ! !GroupHolder methodsFor: 'windows' stamp: 'BenjaminVanRyseghem 3/22/2011 18:14'! openReadOnlyError UIManager default alert: 'This group is read only' title: 'Access error'! ! !GroupHolder methodsFor: 'windows' stamp: 'BenjaminVanRyseghem 3/22/2011 18:15'! openRemoveDialogOn: aGroup ^UIManager default confirm: ('Dou you really want to delete the group named ', aGroup name)! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 16:58'! remove: aClass from: aGroup ^ aGroup ifAllowed: [ aGroup remove: aClass ] ifNot: [ self openReadOnlyError ]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/28/2011 17:22'! removeAGroup: aGroup | yesIWantToRemoveTheGroup | yesIWantToRemoveTheGroup := self openRemoveDialogOn: aGroup. yesIWantToRemoveTheGroup ifFalse: [ ^ nil ]. ^ self removeAGroupSilently: aGroup ! ! !GroupHolder methodsFor: 'protocol' stamp: 'MarianoMartinezPeck 8/5/2012 15:56'! removeAGroupSilently: aGroup | group | aGroup ifNil: [ ^ self ]. aGroup removable ifFalse: [ ^ self openReadOnlyError ]. group := self groups remove: aGroup ifAbsent: []. GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenRemoved group: aGroup from: self ). ^ group! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/1/2012 00:55'! removeClass: aClass from: aStaticGroup ^ aStaticGroup ifAllowed: [ aStaticGroup removeClass: aClass ] ifNot: [ self openReadOnlyError ]! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2013 14:33'! renameAGroup: aGroup | entry | entry := UIManager default request: 'New name of the group' initialAnswer: aGroup name title: 'Rename a group'. (entry isNil or: [entry isEmpty]) ifTrue: [^ aGroup]. (self includesAGroupNamed: entry) ifTrue: [ ^ self openError: entry ]. aGroup isReadOnly ifTrue: [ ^ self openReadOnlyError ]. aGroup name: entry. GroupAnnouncer uniqueInstance announce: ( AGroupHasBeenRenamed group: aGroup from: self ). ^ aGroup ! ! !GroupHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 14:54'! sort: aBlock ^ groups := self groups sort: aBlock! ! !GroupManager commentStamp: '' prior: 45468247! A GroupsManager should be a singleton. It manages all the groups of the system, to be able to share groups among tools! !GroupManager class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/21/2011 16:08'! current ^ CurrentManager ifNil: [ CurrentManager := self new ]! ! !GroupManager class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/21/2011 16:09'! register: aGroup self current register: aGroup! ! !GroupManager class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/21/2011 16:08'! setCurrentManager: aManager CurrentManager := aManager! ! !GroupManager class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/21/2011 16:09'! unregister: aGroup self current unregister: aGroup! ! !GroupManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 3/21/2011 16:11'! initialize super initialize. groups := OrderedCollection new! ! !GroupManager methodsFor: 'protocol' stamp: 'MarianoMartinezPeck 8/5/2012 15:56'! register: aGroup groups add: aGroup. GroupAnnouncer uniqueInstance announce: (AGroupHasBeenRegistered with: aGroup)! ! !GroupManager methodsFor: 'protocol' stamp: 'MarianoMartinezPeck 8/5/2012 15:56'! unregister: aGroup groups remove: aGroup. GroupAnnouncer uniqueInstance announce: (AGroupHasBeenUnregistered with: aGroup)! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 14:28' prior: 38419720! color: aColor "Hack because during the interpretation, the state is slightly inconistent" self widget ifNotNil: [:w | w == self ifFalse: [ super color: aColor ]]! ! !SliderModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:34' prior: 38419911! initialize "Initialization code for SliderModel" super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:24' prior: 36250169! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self changed: { #hasHeader: . title notNil } ]. deSelectOnReclick whenChangedDo: [ :bool | self changed: { #deSelectOnReclick: . bool } ]. isMultipleSelection whenChangedDo: [ :bool | self changed: { #isMultipleSelection: . bool } ]. unselectOnChange whenChangedDo: [ :bool | self changed: { #unselectOnChange: . bool } ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 14:25' prior: 36252407! setSelectedIndex: anIndex "Set the index of the item you want to be selected" self widget ifNil: [ selectedIndex contents: anIndex ] ifNotNil: [ self changed: { #setIndex: .anIndex } ]! ! GroupsManager removeSelector: #unregister:! GroupsManager removeSelector: #register:! GroupsManager removeSelector: #initialize! GroupsManager class removeSelector: #unregister:! GroupsManager class removeSelector: #setCurrentManager:! GroupsManager class removeSelector: #register:! GroupsManager class removeSelector: #current! Smalltalk globals removeClassNamed: #GroupsManager! GroupsHolder removeSelector: #sort:! GroupsHolder removeSelector: #renameAGroup:! GroupsHolder removeSelector: #removeClass:from:! GroupsHolder removeSelector: #removeAGroupSilently:! GroupsHolder removeSelector: #removeAGroup:! GroupsHolder removeSelector: #remove:from:! GroupsHolder removeSelector: #openRemoveDialogOn:! GroupsHolder removeSelector: #openReadOnlyError! GroupsHolder removeSelector: #openError:! GroupsHolder removeSelector: #isEmpty! GroupsHolder removeSelector: #includesAGroupNamed:! GroupsHolder removeSelector: #includes:! GroupsHolder removeSelector: #groupsNames! GroupsHolder removeSelector: #groups! GroupsHolder removeSelector: #groupNamed:! GroupsHolder removeSelector: #createAnEmptyStaticGroup! GroupsHolder removeSelector: #createADynamicGroup! GroupsHolder removeSelector: #addClasses:into:! GroupsHolder removeSelector: #addAnEmptyDynamicGroupNamed:! GroupsHolder removeSelector: #addAGroup:! GroupsHolder removeSelector: #addADynamicGroupSilentlyNamed:blocks:! GroupsHolder removeSelector: #addADynamicGroupSilentlyNamed:block:! GroupsHolder removeSelector: #addADynamicGroupNamed:blocks:! GroupsHolder removeSelector: #addADynamicGroupNamed:block:! GroupsHolder removeSelector: #addADynamicClassGroupSilentlyNamed:blocks:! GroupsHolder removeSelector: #addADynamicClassGroupSilentlyNamed:block:! GroupsHolder removeSelector: #addADynamicClassGroupNamed:blocks:! GroupsHolder removeSelector: #addADynamicClassGroupNamed:block:! GroupsHolder removeSelector: #add:into:! Smalltalk globals removeClassNamed: #GroupsHolder! AlainTreeModel removeSelector: #wrapItem:! AlainTreeModel removeSelector: #whenTreeUpdated:! AlainTreeModel removeSelector: #whenSelectedItemsChanged:! AlainTreeModel removeSelector: #whenRootsChanged:! AlainTreeModel removeSelector: #whenMenuChanged:! AlainTreeModel removeSelector: #whenDisplayBlockChanged:! AlainTreeModel removeSelector: #whenChildrenBlockChanged:! AlainTreeModel removeSelector: #updateTree! AlainTreeModel removeSelector: #treeModel! AlainTreeModel removeSelector: #selectedItems:! AlainTreeModel removeSelector: #selectedItems! AlainTreeModel removeSelector: #selectedItem:! AlainTreeModel removeSelector: #selectedItem! AlainTreeModel removeSelector: #secondSelection:! AlainTreeModel removeSelector: #rowInset:! AlainTreeModel removeSelector: #rowInset! AlainTreeModel removeSelector: #roots:! AlainTreeModel removeSelector: #roots! AlainTreeModel removeSelector: #rootNodeHolder:! AlainTreeModel removeSelector: #rootNodeHolder! AlainTreeModel removeSelector: #rootNodeFromItem:! AlainTreeModel removeSelector: #resizerWidth:! AlainTreeModel removeSelector: #resizerWidth! AlainTreeModel removeSelector: #resetSelection! AlainTreeModel removeSelector: #registerEvents! AlainTreeModel removeSelector: #preferedPaneColor:! AlainTreeModel removeSelector: #preferedPaneColor! AlainTreeModel removeSelector: #oddRowColor:! AlainTreeModel removeSelector: #oddRowColor! AlainTreeModel removeSelector: #multiSelection:! AlainTreeModel removeSelector: #multiSelection! AlainTreeModel removeSelector: #menu:shifted:! AlainTreeModel removeSelector: #menu:! AlainTreeModel removeSelector: #menu! AlainTreeModel removeSelector: #keyStrokeAction:! AlainTreeModel removeSelector: #keyStroke:! AlainTreeModel removeSelector: #isCheckList:! AlainTreeModel removeSelector: #isCheckList! AlainTreeModel removeSelector: #initialize! AlainTreeModel removeSelector: #iconFor:! AlainTreeModel removeSelector: #iconBlock:! AlainTreeModel removeSelector: #iconBlock! AlainTreeModel removeSelector: #expandRoots! AlainTreeModel removeSelector: #expandAll! AlainTreeModel removeSelector: #eventKeyStrokesForPreviousFocus! AlainTreeModel removeSelector: #eventKeyStrokesForNextFocus! AlainTreeModel removeSelector: #evenRowColor:! AlainTreeModel removeSelector: #evenRowColor! AlainTreeModel removeSelector: #doubleClick:! AlainTreeModel removeSelector: #doubleClick! AlainTreeModel removeSelector: #doesNotUnderstand:! AlainTreeModel removeSelector: #displayBlock:! AlainTreeModel removeSelector: #displayBlock! AlainTreeModel removeSelector: #columns:! AlainTreeModel removeSelector: #columns! AlainTreeModel removeSelector: #columnInset:! AlainTreeModel removeSelector: #columnInset! AlainTreeModel removeSelector: #childrenFor:! AlainTreeModel removeSelector: #childrenBlock:! AlainTreeModel removeSelector: #childrenBlock! AlainTreeModel removeSelector: #changed:! AlainTreeModel removeSelector: #beCheckList! AlainTreeModel removeSelector: #autoMultiSelection:! AlainTreeModel removeSelector: #autoMultiSelection! AlainTreeModel removeSelector: #autoDeselection:! AlainTreeModel removeSelector: #autoDeselection! AlainTreeModel removeSelector: #allowMenuOnNoItem:! AlainTreeModel removeSelector: #allowMenuOnNoItem! AlainTreeModel removeSelector: #acceptDroppingMorph:event:inMorph:! AlainTreeModel class removeSelector: #exampleOfOldAPI! AlainTreeModel class removeSelector: #example! AlainTreeModel class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #AlainTreeModel! TreeModel removeSelector: #whenSelectedItemChanged:! TreeModel removeSelector: #setSelectedItem:! TreeModel removeSelector: #getRoots! TreeModel removeSelector: #getMenu:! TreeModel removeSelector: #getChildrenFor:! TreeModel class removeSelector: #title! "GroupManager"! "Morphic-Base"! "Nautilus"! "NewList"! "Polymorph-Widgets"! "Spec-Bindings"! "Spec-Core"! "Spec-Tests"! "Spec-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(19 July 2013 1:39:21 pm) Pharo.image priorSource: 11902408! ----STARTUP----an Array(19 July 2013 1:49:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 July 2013 1:49:46 pm) Pharo-30284.image priorSource: 11960727! ----STARTUP----an Array(19 July 2013 2:42:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/19/2013 14:25' prior: 45457140! commentForCurrentUpdate ^ '10823 Kill old list model https://pharo.fogbugz.com/f/cases/10823 11136 RadioButtonGroupExample new openWithSpec is not working https://pharo.fogbugz.com/f/cases/11136 11174 Add support for sync position of multiple widgets with just one scroll bar https://pharo.fogbugz.com/f/cases/11174'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/19/2013 14:25'! script120 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1528.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.48.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.494.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.49.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.859.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.26.mcz Spec-Builder-EstebanLorenzano.30.mcz Spec-Core-MarcusDenker.141.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.33.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.211.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1184.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/19/2013 14:25'! update30285 "self new update30285" self withUpdateLog: '10823 Kill old list model https://pharo.fogbugz.com/f/cases/10823 11136 RadioButtonGroupExample new openWithSpec is not working https://pharo.fogbugz.com/f/cases/11136 11174 Add support for sync position of multiple widgets with just one scroll bar https://pharo.fogbugz.com/f/cases/11174'. self loadTogether: self script120 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PaneScrolling commentStamp: '' prior: 0! I am an announcement raised when a scroll pane is scrolled. My two attributes are - step: a point representing the scrollbar movement - scrollPane: a pointer to the widget raising the announcement! !ScrollSyncExample commentStamp: '' prior: 0! I am an example that exposes to the world how to use a ScrollPane announcement to have a nice morph being in sync with the current vertical scrollbar position. Invoke me with: ScrollSyncExample new openWithSpec! !UITheme class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 7/19/2013 13:51' prior: 54096241! exampleBasicControls "Open a window with examples of each of the basic controls." "self exampleBasicControls" |dialog builder radioModel treeModel| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example basic controls') useDefaultOKButton. radioModel := ExampleRadioButtonModel new. treeModel := ValueHolder new contents: TextStyle actualTextStyles explorerContents. dialog contentMorph: ((dialog newRow: { dialog newLabelGroup: { 'Normal Label'->(dialog newLabel: 'A Label'). 'Disabled Label'->(dialog newLabel: 'A Disabled Label') disable. 'Normal Button'->(dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'). 'Default Button'->((dialog newButtonFor: nil action: nil label: 'Default Button' help: 'This is a default button') isDefault: true). 'Disabled Button'->(dialog newButtonFor: nil action: nil label: 'Disabled Button' help: 'This is a disabled button') disable. 'Selected Button'->(dialog newButtonFor: (ValueHolder new contents: true) getState: #contents action: nil arguments: #() getEnabled: nil label: 'A Button' help: 'This is a selected button'). 'Selected Disabled Button'->(dialog newButtonFor: (ValueHolder new contents: true) getState: #contents action: nil arguments: #() getEnabled: nil label: 'Disabled Button' help: 'This is a selected disabled button') disable. 'Checkbox'->(dialog newCheckboxFor: (ValueHolder new contents: true) getSelected: #contents setSelected: #contents: label: 'A Checkbox' help: 'This is a checkbox'). 'Disabled Checkbox'->(dialog newCheckboxFor: (ValueHolder new contents: true) getSelected: #contents setSelected: #contents: label: 'A Disabled Checkbox' help: 'This is a disabled checkbox') disable. 'Radio Buttons'->((dialog newColumn: { (dialog newRadioButtonFor: radioModel getSelected: #isLeft setSelected: #beLeft label: 'Left' help: 'This is a radio buton'). (dialog newRadioButtonFor: radioModel getSelected: #isCenter setSelected: #beCenter label: 'Center' help: 'This is a radio buton'). (dialog newRadioButtonFor: radioModel getSelected: #isRight setSelected: #beRight label: 'Right' help: 'This is a radio buton')}) vResizing: #shrinkWrap). 'Disabled Radio Button'->(dialog newRadioButtonFor: radioModel getSelected: #isRight setSelected: #beRight label: 'Right' help: 'This is a disabled radio buton') disable. 'Text Entry'->(dialog newTextEntryFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents: help: 'This is a text entry'). 'Disabled Text Entry'->(dialog newTextEntryFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents: help: 'This is a disabled text entry') disable. 'Slider'->(dialog newSliderFor: (ValueHolder new contents: 0.5) getValue: #contents setValue: #contents: help: 'This is a slider'). 'Disabled Slider'->(dialog newSliderFor: (ValueHolder new contents: 0.75) getValue: #contents setValue: #contents: help: 'This is a disabled slider') disable}. dialog newVerticalSeparator. dialog newLabelGroup: { 'Tree'->((dialog newTreeFor: treeModel list: #contents selected: nil changeSelected: nil) minHeight: 100; minWidth: 150; yourself) }. dialog newVerticalSeparator. dialog newColumn: { dialog newTitle: 'Text Editor' for: ( (dialog newTextEditorFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents:) minWidth: 100). dialog newTitle: 'Disabled Text Editor' for: ( (dialog newTextEditorFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents:) disable)}}) vResizing: #spaceFill); model: nil. builder openModal: dialog! ! !UITheme class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 7/19/2013 13:54' prior: 54105759! exampleOtherControls "Open a window with examples of each of the other controls." "self exampleOtherControls" |dialog builder image emboss fuzzy| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example other controls') useDefaultOKButton. emboss := (dialog newString: 'Hello there') trackPaneColor: false. fuzzy := (dialog newFuzzyLabel: 'A Fuzzy Label') minHeight: 40; minWidth: 160. dialog contentMorph: (dialog newRow: { dialog newTitle: 'Alpha Image' for: ( dialog newColumn: { ((image := dialog newAlphaImage: nil help: 'This is an alpha image') borderWidth: 1; extent: 160@160). dialog newLabelGroup: { 'Scale'->(dialog newSliderFor: image getValue: #scale setValue: #scale: min: 0 max: 4 quantum: nil getEnabled: nil help: 'The image scale 0..1'). 'Alpha'->((dialog newAlphaSelector: image getAlpha: #alpha setAlpha: #alpha: help: 'The image alpha') vResizing: #shrinkWrap; minHeight: 16). 'Layout'->(dialog newDropListFor: image list: #layoutSymbols getSelected: #layout setSelected: #layout: getEnabled: nil useIndex: false help: 'The image layout')}}). dialog newVerticalSeparator. dialog newLabelGroup: { 'Color presenter'->((dialog newColorPresenterFor: (ValueHolder new contents: (Color blue alpha: 0.6)) getColor: #contents help: 'This is a color presenter') vResizing: #shrinkWrap). 'Color chooser'->(dialog newColorChooserFor: emboss getColor: #color setColor: #color: help: 'This is a color chooser'). 'Row with dashed border'->((dialog newRow: {dialog newLabel: 'I have a dashed border!!'}) borderStyle: (DashedBorder width: 3 dashColors: {Color red. Color green. Color blue} dashLengths: #(1 2 3))). 'Embossed string'->emboss. 'Style'->(dialog newDropListFor: emboss list: #styleSymbols getSelected: #style setSelected: #style: getEnabled: nil useIndex: false help: 'The embossed string style'). 'Fuzzy label'->fuzzy. 'Offset'->(dialog newSliderFor: fuzzy getValue: #offset setValue: #offset: min: 0 max: 5 quantum: 1 getEnabled: nil help: 'The fuzzy label offset'). 'Alpha'->((dialog newAlphaSelector: fuzzy getAlpha: #alpha setAlpha: #alpha: help: 'The fuzzy label alpha') vResizing: #shrinkWrap; minHeight: 16) } } ); model: nil. builder openModal: dialog! ! !PaneScrolling commentStamp: '' prior: 45526484! I am an announcement raised when a scroll pane is scrolled. My two attributes are - step: a point representing the scrollbar movement - scrollPane: a pointer to the widget raising the announcement! !PaneScrolling methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 17:53'! scrollPane ^ scrollPane! ! !PaneScrolling methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 17:53'! scrollPane: anObject scrollPane := anObject! ! !PaneScrolling methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 17:52'! step ^ step! ! !PaneScrolling methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 17:52'! step: anObject step := anObject! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MartinDias 7/16/2013 17:54' prior: 32860344! hScrollBarValue: scrollValue | x systemWindow | self hIsScrollbarShowing ifFalse: [ ^ scroller offset: (0 - self hMargin)@scroller offset y ]. ((x := self hLeftoverScrollRange * scrollValue) <= 0) ifTrue:[ x := 0 - self hMargin ]. scroller offset: (x@scroller offset y). owner ifNil: [ ^ self ]. systemWindow := self window. systemWindow ifNotNil: [ systemWindow announce: (WindowScrolling new step: scrollValue@0; window: systemWindow) ]. self announcer announce: (PaneScrolling new step: scrollValue@0; scrollPane: self; yourself)! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MartinDias 7/16/2013 17:54' prior: 32863435! vScrollBarValue: scrollValue | systemWindow | scroller hasSubmorphs ifFalse: [^ self]. scroller offset: (scroller offset x @ (self vLeftoverScrollRange * scrollValue) rounded). owner ifNil: [ ^ self ]. systemWindow := self window. systemWindow ifNotNil: [ systemWindow announce: (WindowScrolling new step: 0@scrollValue; window: systemWindow) ]. self announcer announce: (PaneScrolling new step: 0@scrollValue; scrollPane: self; yourself) ! ! !RadioButtonGroupExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 7/19/2013 14:07' prior: 32100252! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #button1; add: #button2; add: #button3 ]; yourself! ! !ScrollSyncExample commentStamp: '' prior: 45526743! I am an example that exposes to the world how to use a ScrollPane announcement to have a nice morph being in sync with the current vertical scrollbar position. Invoke me with: ScrollSyncExample new openWithSpec! !ScrollSyncExample class methodsFor: 'specs' stamp: 'MartinDias 7/16/2013 19:48'! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #sideRuler width: 50; add: #text ]; yourself! ! !ScrollSyncExample class methodsFor: 'specs' stamp: 'MartinDias 7/16/2013 18:35'! title ^ self name! ! !ScrollSyncExample methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 19:55'! currentVerticalScrollPosition ^ currentVerticalScrollPosition! ! !ScrollSyncExample methodsFor: 'layouts' stamp: 'MartinDias 7/16/2013 19:55'! defaultSpecLayout ^ SpecLayout composed add: #sideRuler origin: 0@(1 - self currentVerticalScrollPosition) corner: 0@(1 - self currentVerticalScrollPosition) offsetOrigin: 0@(-250) offsetCorner: 50@250; add: #text origin: 0@0 corner: 1@1 offsetOrigin: 50@0 offsetCorner: 0@0; yourself! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'MartinDias 7/16/2013 19:55'! initialize "Initialization code for ScrollSyncExample" super initialize. sideRuler := Morph new color: Color yellow; extent: 50@500; useGradientFill; hResizing: #spaceFill; vResizing: #spaceFill; yourself. currentVerticalScrollPosition := 0.! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'MartinDias 7/16/2013 19:20'! initializeWidgets self instantiateModels: #( text TextModel ). text announcer when: WidgetBuilt do: [ :builtAnnouncement | builtAnnouncement widget announcer on: PaneScrolling do: [ :scrollAnnouncement | self syncMorphPosition ] ]. text text: self loremIpsum.! ! !ScrollSyncExample methodsFor: 'private' stamp: 'MartinDias 7/16/2013 18:43'! loremIpsum ^ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam posuere leo imperdiet justo ornare, ut laoreet ipsum gravida. Pellentesque placerat eget lacus eget dignissim. Proin sed felis justo. Proin dapibus eu nisl eget pretium. Sed ac ligula at mauris tristique ornare. Pellentesque aliquam purus placerat risus vehicula, ut consectetur massa dignissim. Duis velit arcu, ultricies nec nunc id, lacinia hendrerit dolor. Donec varius sapien ac magna fermentum vehicula. Ut volutpat nisi mi, et gravida lacus accumsan feugiat. In id sem ut ante viverra porttitor vitae nec est. Pellentesque eget felis erat. Fusce ac dapibus purus, eu dictum odio. Etiam id odio fringilla, pretium leo sed, varius nisi. Proin varius nunc nisi, quis laoreet nunc scelerisque quis. Pellentesque viverra mi non lacinia condimentum. Sed sodales molestie nisl quis fringilla. Cras lorem magna, lobortis a varius ut, sodales vel eros. Aliquam vel viverra ligula. Aliquam neque quam, adipiscing sit amet consequat eget, ultricies vel nibh. Nullam porta quis urna ut sodales. Nulla quis tincidunt elit. Sed sagittis, purus vel tempor dignissim, diam orci dapibus lorem, at laoreet est enim nec diam. Praesent eu eleifend nisl. Mauris iaculis nulla ac turpis eleifend, at rutrum ligula ultrices. Phasellus mollis massa non mauris euismod, ac pellentesque erat aliquam. Duis venenatis enim vel augue suscipit, quis pharetra ante pellentesque. Curabitur fringilla mi elit, vel tincidunt mi euismod eget. Morbi erat nisl, rhoncus ac tincidunt sed, aliquam ut nulla. Maecenas molestie porta orci, eget vehicula neque varius in. Duis urna est, fringilla sit amet nunc nec, semper laoreet urna. Nunc faucibus felis risus, quis molestie nisi euismod at. Praesent in pellentesque mauris. Proin placerat quam sed mauris laoreet consequat. Proin tempor magna lacinia, convallis leo quis, posuere elit. Curabitur bibendum sit amet ligula vel porta. Nulla et dictum mauris. Quisque placerat arcu vitae quam commodo, non luctus mauris luctus. Sed volutpat eu nulla vel luctus. Fusce elementum pharetra diam at placerat. Pellentesque dignissim feugiat massa vitae laoreet. Sed semper diam quam, non fermentum nisl fringilla ac. Ut sit amet lorem dolor. Phasellus augue mi, tristique quis metus eget, gravida euismod magna. Duis dignissim, lacus eget rhoncus tincidunt, nibh metus pellentesque dui, malesuada interdum lorem est et sem. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin laoreet, leo non dignissim pretium, metus diam aliquet metus, nec consectetur est neque ornare nisi. Quisque scelerisque massa in mollis euismod. Praesent ullamcorper dolor ac erat fermentum mollis eu non turpis. Praesent at justo ac risus lacinia ultricies. Ut tempor nibh velit, et euismod mi varius ac. Praesent in molestie ligula. Praesent lobortis orci vitae orci mollis laoreet.'! ! !ScrollSyncExample methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 19:48'! sideRuler ^ sideRuler! ! !ScrollSyncExample methodsFor: 'private' stamp: 'MartinDias 7/16/2013 19:55'! syncMorphPosition currentVerticalScrollPosition = text widget scrollValue y ifTrue: [ ^ self ]. currentVerticalScrollPosition := text widget scrollValue y. self needRebuild: false. text needRebuild: false. self buildWithSpecLayout: self defaultSpecLayout.! ! !ScrollSyncExample methodsFor: 'accessing' stamp: 'MartinDias 7/16/2013 18:01'! text ^ text! ! RadioButtonGroupExample class removeSelector: #topSpec! RadioButtonGroupExample class removeSelector: #defaultSpec2! ListModel removeSelector: #selectionIndex:! ListModel removeSelector: #selectionIndex! ListModel removeSelector: #selectedItem! ListModel removeSelector: #list:! ListModel removeSelector: #list! ListModel removeSelector: #initialize! ListModel removeSelector: #dropWanted:! ListModel removeSelector: #dropItem:at:! ListModel removeSelector: #dragItem:! ListModel removeSelector: #add:! Smalltalk globals removeClassNamed: #ListModel! "Morphic-Base"! "Polymorph-Widgets"! "Spec-Examples"! ----End fileIn----! ----QUIT----an Array(19 July 2013 2:43 pm) Pharo.image priorSource: 11960926! ----STARTUP----an Array(19 July 2013 2:52:44 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 July 2013 2:52:44 pm) Pharo-30285.image priorSource: 11987148! ----STARTUP----an Array(20 July 2013 11:06:20 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/20/2013 11:03' prior: 45515658! commentForCurrentUpdate ^ '11188 Be able to set an initial Filter in ListDialogWindow https://pharo.fogbugz.com/f/cases/11188 11196 Drag not working on AlainTreeModel https://pharo.fogbugz.com/f/cases/11196'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/20/2013 11:04'! script121 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-EstebanLorenzano.74.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.140.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1528.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.41.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.16.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.90.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.56.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.48.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.494.mcz NautilusCommon-EstebanLorenzano.152.mcz NautilusRefactoring-StephaneDucasse.100.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.38.mcz NewList-MarcusDenker.49.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.860.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.189.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.26.mcz Spec-Builder-EstebanLorenzano.30.mcz Spec-Core-MarcusDenker.141.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.33.mcz Spec-Inspector-MarcusDenker.44.mcz Spec-Layout-MarcusDenker.50.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.115.mcz Spec-Widgets-MarcusDenker.213.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.20.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1184.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/20/2013 11:04'! update30286 "self new update30286" self withUpdateLog: '11188 Be able to set an initial Filter in ListDialogWindow https://pharo.fogbugz.com/f/cases/11188 11196 Drag not working on AlainTreeModel https://pharo.fogbugz.com/f/cases/11196'. self loadTogether: self script121 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/17/2013 15:03'! initialFilter: aString searchMorph content: aString.! ! !TreeModel class methodsFor: 'specs' stamp: 'ChristopheDemarey 7/19/2013 17:30' prior: 45471883! defaultSpec ^ {#TreeSpec. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !TreeModel methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 7/19/2013 17:34' prior: 45473639! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w scrollerSubMorphFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'initialize' stamp: 'ChristopheDemarey 7/19/2013 17:36' prior: 45478982! initialize "Initialization code for TreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! "Polymorph-Widgets"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(20 July 2013 11:06:34 am) Pharo.image priorSource: 11987344! ----STARTUP----an Array(20 July 2013 11:16:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 July 2013 11:16:22 am) Pharo-30286.image priorSource: 12001260! ----STARTUP----an Array(20 July 2013 9:10:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/20/2013 21:02' prior: 45542077! commentForCurrentUpdate ^ '11202 PluggableTreeMorph(Object)>>doesNotUnderstand: #initializeColumsFrom: https://pharo.fogbugz.com/f/cases/11202 11185 Remove comment from #initialization template in Nautilus https://pharo.fogbugz.com/f/cases/11185 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/20/2013 21:03'! script122 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1528.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.861.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.79.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1186.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/20/2013 21:06'! update30287 "self new update30287" self withUpdateLog: '11202 PluggableTreeMorph(Object)>>doesNotUnderstand: #initializeColumsFrom: https://pharo.fogbugz.com/f/cases/11202 11185 Remove comment from #initialization template in Nautilus https://pharo.fogbugz.com/f/cases/11185 '. self loadTogether: self script122 merge: false. SpecBinder initializeBindings. SpecInterpreter hardResetBindings. BindingsHolder classVarNamed: #Bindings put: nil. self flushCaches. ! ! "ScriptLoader30"! !DropListItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 39157164! initialize super initialize. actionHolder := [] asValueHolder. displayBlock := [ :e | e printString ].! ! !RadioButtonGroup methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 32095986! initialize super initialize. buttons := OrderedCollection new.! ! !BlocEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 18205834! initialize super initialize. block := nil asValueHolder! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 52715615! initialize super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. autoAccept := false asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. autoAccept whenChangedDo: [:bool | self widget ifNotNil: [:w | w autoAccept: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !ComposableModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 38739863! initialize super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. windowIcon := nil asValueHolder. window := nil asValueHolder. askOkToClose := false asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ].! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 28873161! initialize "This method is not used since new is overriden to use initalize:" keys := OrderedCollection new. super initialize. ! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 28873449! initialize: aNumber keys := OrderedCollection new. super initialize: aNumber! ! !DynamicComposableModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 21066277! initialize widgets := OrderedIdentityDictionary new asValueHolder. super initialize. ! ! !ProtocolOrganizer methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 30088674! initialize super initialize. protocols := IdentitySet new. allProtocol := AllProtocol protocolOrganizer: self.! ! !BindingsHolder methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 18128606! initialize super initialize. bindings := MorphicBindings new asValueHolder.! ! !PermissionsEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 29277470! initialize lock := false. user := nil asValueHolder. super initialize.! ! !IconListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 23478648! initialize super initialize. iconHolder := [:item | nil ] asValueHolder.! ! !ButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45488781! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self on: Character space asKeyCombination do: [ self action ].! ! !STEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 32629334! initialize super initialize. object := nil asValueHolder! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 51338308! initialize super initialize. model := nil asValueHolder. initialExtent := 400@25. validated := false asValueHolder.! ! !UserEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 54583735! initialize usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 39273591! initialize super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt do: [ canBeRefreshed := true ]. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !MethodNameEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 26464691! initialize super initialize. self beResizeable! ! !PharoUserPermissions methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 38057726! initialize super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !JobProgressMorph methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 24083305! initialize super initialize. self addDependent: SystemProgressMorph uniqueInstance.! ! !GoogleIssue methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 22970337! initialize super initialize. attachements := nil. changeLoader := nil. comments := nil. description := nil. id := nil. labels := {}. published := nil. relatedPackages := nil. slice := nil. state := nil. status := nil. title := nil. tracker := nil. updated := nil.! ! !PragmaMenuAndShortcutRegistrationItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 29917717! initialize super initialize. withSeparatorAfter := false.! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 20813310! initialize super initialize. self contents: Dictionary new.! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45536799! initialize super initialize. sideRuler := Morph new color: Color yellow; extent: 50@500; useGradientFill; hResizing: #spaceFill; vResizing: #spaceFill; yourself. currentVerticalScrollPosition := 0.! ! !KeychainEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 24219570! initialize keychainEditingWrapper := nil asValueHolder. super initialize.! ! !NewList methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 36215446! initialize renderer := nil asValueHolder. super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. drawColor := Color white asValueHolder. model := nil asValueHolder. isInitialized := false asValueHolder. isMultipleSelection := false asValueHolder. listCache := OrderedCollection new asValueHolder. selectedIndex := 0 asValueHolder. selectedIndexes := Dictionary new asValueHolder. listSize := nil asValueHolder. headerHeight := 0 asValueHolder. headerTitle := '' asValueHolder. clickOnHeader := nil asValueHolder. secondSelection := nil asValueHolder. displayListCache := OrderedCollection new asValueHolder. runningProcesses := Array new asValueHolder. deSelectOnReclick := false asValueHolder. selectionWithKeys := true asValueHolder. selectedItem := nil asValueHolder. selectedItems := OrderedCollection new asValueHolder. unselectOnChange := false asValueHolder. iconCache := Dictionary new asValueHolder. iconMaxSize := nil asValueHolder. enabled := true asValueHolder. allowToSelect := true asValueHolder.! ! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 20237370! initialize super initialize. cache := CriticsCache new. checker := SmalllintManifestChecker new. cache checker: checker. cache browser: self. criticModel cache: cache. ! ! !SpecSetter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 50737249! initialize descriptionHolder := nil asValueHolder. super initialize.! ! !InstVarAdder methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 23677378! initialize description := nil asValueHolder. selectedClass := nil asValueHolder. super initialize.! ! !NewListAdapter methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 28405433! initialize super initialize. doubleClickSelector := nil asValueHolder. dragItemSelector := nil asValueHolder. dropItemSelector := nil asValueHolder. getDisplaySelector := nil asValueHolder. getHeaderTitleSelector := nil asValueHolder. getMenuSelector := nil asValueHolder. getIndexSelector := nil asValueHolder. getItemAtIndexSelector := nil asValueHolder. getItemsSelector := nil asValueHolder. getListSizeSelector := nil asValueHolder. keyStrokeSelector := nil asValueHolder. lastKeystrokeTime := nil asValueHolder. lastKeystrokes := nil asValueHolder. model := nil asValueHolder. list := nil asValueHolder. setIndexSelector := nil asValueHolder. wantsDropSelector := nil asValueHolder. getMenuTitleSelector := nil asValueHolder. getIconSelector := nil asValueHolder. getIconMaxSizeSelector := nil asValueHolder. getIndexesSelector := nil asValueHolder.! ! !NautilusUI methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 28294374! initialize super initialize. categoryWidget := CategoryWidget model: self. methodWidget := MethodWidget model: self.! ! !TreeModel methodsFor: 'initialize' stamp: 'MarcusDenker 7/20/2013 21:01' prior: 45554184! initialize super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !DynamicWidgetChange methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 36167263! initialize super initialize. boolean := true! ! !TabContainerMorph methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 52204303! initialize super initialize. self changeProportionalLayout. container := PanelMorph new changeTableLayout; listDirection: #bottomToTop; color: Color white; yourself. tab := PluggableTabBarMorph on: self. tab width: 150. tab color: Color white darker darker. self addAll.! ! !AbstractMethodReferenceConverter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:52' prior: 17241695! initialize super initialize. referencesList := #()! ! !PharoUser methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:49' prior: 29338844! initialize super initialize. avatar := self defaultAvatar. self updateGravatarFor: ''. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !SpecSplitterVertical methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 50742353! initialize super initialize. selector := #newVSplitterAt:. layoutFrame := ((0@0 corner: 0@0) asLayoutFrame rightOffset: 1). commands := nil.! ! !SearchableTree methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 35375846! initialize super initialize. roots := OrderedCollection new asValueHolder! ! !LabelModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 24252709! initialize super initialize. textHolder := '' asValueHolder. enabledHolder := true asValueHolder. textHolder whenChangedDo: [ self changed: #getText ].! ! !DropListExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 20972155! initialize container := PanelMorph new. self instantiateMorphs. container changeTableLayout; listDirection: #bottomToLeft. super initialize.! ! !MessageBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 38516720! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak on: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 43742562! initialize super initialize. self windowIcon: self taskbarIcon. ! ! !Authentifier methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 17778095! initialize super initialize. result := nil asValueHolder.! ! !Tab class methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 39815499! initialize Icons := Dictionary new.! ! !Tab methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 39845104! initialize super initialize. self changeProportionalLayout. state := TabEnabled tab: self. closeable := true. label := self buildLabel: 'tab' withIcon: self defaultIcon. closeIcon := AlphaImageMorph withForm: self class closeIcon. morph := nil. actions := OrderedCollection new. retrievingSemaphore := Semaphore new. self addLabel. self addIcon. self addActionsToIcon.! ! !KMDescription methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 24130507! initialize categories := nil asValueHolder. super initialize. updatingBlock := [:col || dropListItems | dropListItems := col collect: [:cat | DropListItem named: cat name do: [| items | items := (cat entriesAt: #all) keymaps collect: [:e | collectingBlock value: e ]. list items: (items sorted: sortingBlock) ]]. dropList items: dropListItems ].! ! !DropListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 39151771! initialize super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !SliceSubmitter methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 33369513! initialize super initialize. issue := GoogleIssue new status: PharoTrackerLabels accepted; tracker: self tracker; yourself. receiver := World. mcPackage := nil.! ! !PickListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 29345293! initialize wrapHolder := [ :i | i printString ] asValueHolder. pickedItemsHolder := OrderedCollection new asValueHolder. associationsWrapperToItem := Dictionary new asValueHolder. associationsItemToWrapper := Dictionary new asValueHolder. associationsIndexToWrapper := Dictionary new asValueHolder. labelClickableHolder := true asValueHolder. defaultValueHolder := false asValueHolder. blockToPerformOnWrappers := [:wrapper | ] asValueHolder. super initialize.! ! !NewListModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 36624905! initialize super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !WindowModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 38731445! initialize super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !TabExample methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 39801210! initialize super initialize. manager := TabManager new. manager when: #tabManagerDeleted send: #delete to: self. listModel := ListComposableModel new. listModel items: ((1 to: 1000) asOrderedCollection)! ! !SpecDescription methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 50687576! initialize super initialize. adds := OrderedCollection new asValueHolder. selector := #defaultSpec. extra := ''.! ! !RadioButtonGroupExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 32097439! initialize super initialize. container := PanelMorph new. container changeTableLayout; listDirection: #bottomToLeft. self instantiateMorphs.! ! !RadioButtonGroupExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 32097892! initializeWidgets self instantiateModels: #( button1 RadioButtonModel button2 RadioButtonModel button3 RadioButtonModel ). button1 label: 'Button 1'. button2 label: 'Button 2'. button3 label: 'Button 3'. self setFocus. self setGroup. ! ! !TextModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 35886719! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. self registerEvents. self registerEventsForShout! ! !AbstractApiSetter methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 17167419! initialize method := nil asValueHolder. model := nil asValueHolder. retrievingMethod := nil asValueHolder. isSetting := false. super initialize. self registerEvents! ! !UserManager methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 36418191! initialize super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 35356564! initialize super initialize. item := nil asValueHolder.! ! !PluggableTextFieldMorph methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 29537307! initialize super initialize. textMorphClass := TextMorphForFieldView. self beDecrypted! ! !PragmaMenuAndShortcutRegistration methodsFor: 'keymapping' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 29908384! initialize super initialize. items := OrderedCollection new.! ! !MultipleMethodsEditorButtonModel methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 27320089! initialize super initialize. state := false! ! !TabBar methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 39778987! initialize super initialize. tabs := OrderedCollection new. selectionHistory := OrderedCollection new. menuButton := self createMenuButton. numberOfSelectedTabs := 1. self changeProportionalLayout. self addMenuButton. ! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 35373442! initialize super initialize. token := ''.! ! !InputWidget methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 35883516! initialize okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !PasswordInitializationDialogWindow methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 37852076! initialize super initialize. self textFont: Smalltalk ui theme textFont.! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 37105022! initialize cancelled := false asValueHolder. cancelAction := [ true ] asValueHolder. super initialize.! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45488008! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !WidgetSetter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 38519519! initialize model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer weak on: WidgetBuilt do: [ self registerEvents ]! ! !ComposableSpec methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 20042532! initialize super initialize. subSpecs := Set new.! ! !SpecSplitterHorizontal methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 50740884! initialize super initialize. selector := #newHSplitterAt:. layoutFrame := (0@0 corner: 0@0) asLayoutFrame bottomOffset: 1. commands := nil.! ! !MethodToolbar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 26510715! initialize methodHolder := nil asValueHolder. model := AbstractTool new. super initialize.! ! !TabAction methodsFor: 'accessing' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 39799211! initialize super initialize. icon := ImageMorph new! ! !SliderModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45507244! initialize super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !PluggableTextMorphWithLimits methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 29599705! initialize super initialize. locked := false. lockIcon := self defaultOpenMorph. self addIcon. lockIcon on: #mouseEnter send: #colorize to: self. lockIcon on: #mouseLeave send: #decolorize to: self. lockIcon on: #click send: #toggleLock to: self! ! !Cookie methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45197217! initialize super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !AbstractSpec methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 17437784! initialize super initialize. bindings := BindingsHolder new.! ! !CheckBoxExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 18984972! initialize container := PanelMorph new. container changeTableLayout; listDirection: #bottomToLeft. self instantiateMorphs. super initialize.! ! !SpecLayoutAdd methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 50720136! initialize super initialize. self selector: #add:. layoutFrame := LayoutFrame identity. subwidget := nil.! ! !SwitchUsers methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 51344601! initialize usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !ColorEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 19662859! initialize super initialize. color := Color black asValueHolder. morph := Morph new color: self color; extent: 25@25; yourself! ! !AddMethodDescription methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 17481191! initialize super initialize. category := ''. selector := ''. source := ''.! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 21007933! initialize super initialize. model := ChangeSorterModel new. isRefreshing := false. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 21008589! initializeWidgets self instantiateModels: #( changeSorterLeft ChangeSorterApplication changeSorterRight ChangeSorterApplication ). self menusRegistration. self shortcutsRegistration. self setFocusOrder! ! !MorphEmbedder methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 26854754! initialize morph := nil asValueHolder. title := self class title. super initialize. ! ! !InstVarSetter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 38511910! initialize descriptionHolder := nil asValueHolder. textBindings := Dictionary new. super initialize. self announcer weak on: WidgetBuilt do: [ text widget ifNotNil: [:m | m styler workspace: self ] ]! ! !DynamicSpecExample methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 36151865! initialize super initialize. object := nil asValueHolder.! ! !SpecAdder methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 50674925! initialize descriptionHolder := nil asValueHolder. selectedInstVar := nil. selectedSpec := nil. super initialize.! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 17312312! buildInitializeCodeFor: aClass ^ String streamContents: [:str | str << 'initialize';cr. str cr tab << 'super initialize.';cr. aClass instVarNames sort do: [ :name | str cr tab << name << ' := nil.' ]]. ! ! !TabModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 40135975! initialize super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !TabClassical methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 52202381! initialize super initialize. container := PanelMorph new changeTableLayout; listDirection: #bottomToTop; color: Color white; yourself. tab := PluggableTabBarMorph on: self. tab width: 150.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 24204834! initialize keychain := nil asValueHolder. super initialize.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 24205616! initializeWidgets self instantiateModels: #( add ButtonModel edit ButtonModel list MultiColumnListModel ok OkToolbar remove ButtonModel ). self initializeAdd. self initializeEdit. self initializeRemove. ok okButton label: 'Close'. list displayBlock: [ :item | self wrapItem: item ]. keychain whenChangedDo: [:kc | add enabled: kc notNil. list resetSelection. self updateTitle. list items: kc bindings associations ]. list whenSelectedItemChanged: [:it | edit enabled: it notNil. remove enabled: it notNil ]. self focusOrder add: list; add: add; add: edit; add: remove; add: ok.! ! !AddInstVarDescription methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 17477972! initialize super initialize. name := ''.! ! !SpecImporter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 50695053! initialize super initialize. desc := self defaultDescription. order := 0! ! !ComposableModelDescription methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 19996555! initialize super initialize. addClassDescription := AddClassDescription new. addInstVarDescriptions := OrderedCollection new. addIntoMethodDescriptions := OrderedCollection new. addMethodDescriptions := OrderedCollection new. specDescription := SpecDescription new. superclass := ComposableModel.! ! !IssueCreator methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 24014413! initialize issue := nil asValueHolder. super initialize.! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45469500! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !OkToolbar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 37107058! initialize super initialize. okAction := [ true ] asValueHolder.! ! !IntegerEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 23816053! initialize super initialize. integer := 0 asValueHolder! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 18875689! initialize prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]. super initialize. self initializeAnnouncements. ! ! !AbstractBindings methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:52' prior: 17176804! initialize super initialize. classSymbols := self initializeClassesDictionary. selectorSymbols := self initializeSelectorsDictionary! ! !RotatingStringMorph methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 32282718! initialize super initialize. initialContents := self contents. rotating := false. self on: #mouseEnter send: #mouseEnter: to: self. self on: #mouseLeave send: #mouseLeave: to: self.! ! !MultipleMethodsEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 27307215! initialize super initialize. self changeProportionalLayout. self color: Color white. lock := false. buttonsContainer := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #spaceFill; yourself. editors := OrderedCollection new. container := self newProportionalPanelMorph. self updateLayoutForSingle! ! !NautilusMCBindings class methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 28182812! initialize super initialize. RPackageOrganizer default packages do: [:p | self default mcPackageFor: p ]! ! !NautilusMCBindings methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 28181041! initialize super initialize. bindingsRtoMC := IdentityDictionary new. bindingsMCtoR := IdentityDictionary new. self registerToMCAnnouncements.! ! !MonticelloRepositoryBrowser methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 26576790! initialize super initialize. order := self class order! ! !NewListExample methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 36224974! initialize super initialize. pluggable := false. index := 0. toggleTitle := true. rawList := (1 to: 10) asOrderedCollection. textMorph := self buildTextMorph! ! !NewListRenderer methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 36209047! initialize super initialize. wantsSteps := false. listSource := nil asValueHolder. itemHeight := nil asValueHolder. maxWidth := 0 asValueHolder. hasHeader := false asValueHolder. potentialDropIndex := 0 asValueHolder. steppingTime := 100. mouseDownIndex := 0 asValueHolder. listSource whenChangedDo: [:e | itemHeight contents: e itemHeight. e whenItemsChangedDo: [ maxWidth contents: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !IconicListItem methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 36987280! initialize super initialize. self changeTableLayout; listDirection: #leftToRight; cellPositioning: #center; cellInset: 2; borderWidth: 0; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 20@16.! ! !PanelMorphWithSplitters methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 29053593! initialize super initialize. paneMorphs := OrderedCollection new.! ! !MultipleMethodsEditorAllButtonModel methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 27317788! initialize super initialize. state := true.! ! !FinderUI methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 22155009! initialize super initialize. finder := nil. forceSearch := nil. searchingTextArea := nil. sourceTextArea := nil. useRegExCheckbox := nil. wrapBlockOrSelector := [: i | i asString ].! ! !WorkingCopyToolBar methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 54938479! initialize super initialize. workingCopyHolder := nil asValueHolder! ! !NautilusBreadcrumbsPlugin methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 27989166! initialize super initialize. classButton := nil. container := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #rigid; addMorph: self hFill; height: 25. methodButton := nil. packageButton := nil. protocolButton := nil.! ! !Protocol methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 30074441! initialize super initialize. methods := IdentitySet new.. name := self class defaultName.! ! !TabManagerModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 45495889! initialize super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 38702350! initialize super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !TabManager methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 39791343! initialize super initialize. toolbar := TabBar new. processes := OrderedCollection new. self registerBarActions. self registerShortcuts. container := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. contentsWrapper := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. self changeProportionalLayout. self addMorphs! ! "CI-Core"! "Collections-Sequenceable"! "KeyChain"! "Keymapping-Tools-Spec"! "Manifest-CriticBrowser"! "MenuRegistration"! "Morphic-Base"! "Nautilus"! "NautilusCommon"! "NautilusRefactoring"! "NewClassOrganizer"! "NewList"! "Polymorph-Widgets"! "RecentSubmissions"! "Spec-Bindings"! "Spec-Builder"! "Spec-Core"! "Spec-Examples"! "Spec-Inspector"! "Spec-Layout"! "Spec-Tools"! "Spec-Widgets"! "Tabs"! "Tools"! ----End fileIn----! ----QUIT----an Array(20 July 2013 9:11:52 pm) Pharo.image priorSource: 12001461! ----STARTUP----an Array(20 July 2013 9:21:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 July 2013 9:21:59 pm) Pharo-30287.image priorSource: 12053445! ----STARTUP----an Array(21 July 2013 10:06:53 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/21/2013 10:03' prior: 45556194! commentForCurrentUpdate ^ '11201 InvalidArgument + a few exceptions comments https://pharo.fogbugz.com/f/cases/11201 11163 TestCase class>run convenience method https://pharo.fogbugz.com/f/cases/11163'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/21/2013 10:03'! script123 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.377.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.861.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-EstebanLorenzano.878.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1186.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/21/2013 10:03'! update30288 "self new update30288" self withUpdateLog: '11201 InvalidArgument + a few exceptions comments https://pharo.fogbugz.com/f/cases/11201 11163 TestCase class>run convenience method https://pharo.fogbugz.com/f/cases/11163'. self loadTogether: self script123 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ArithmeticError commentStamp: '' prior: 42108695! I am ArithmeticError, the superclass of all exceptions related to arithmetic.! !DomainError commentStamp: '' prior: 42237600! I am DomainError, an ArithmeticException indicating that some argument falls outside an expected domain, [from, to] When my valid interval is left- or right-open, use signal: creation protocol to provide a custom messageText rather than the default [from, to] notation.! !InvalidArgument commentStamp: '' prior: 0! I am InvalidArgument, an Error indicating that some argument does not fit the method's preconditions. For numeric arguments and range checking, consider using DomainError instead.! !TestCase class methodsFor: 'instance creation' stamp: 'IgorStasenko 7/15/2013 14:43'! run ^ self suite run! ! !BlockCannotReturn methodsFor: 'accessing' stamp: 'tfei 3/30/1999 12:55' prior: 18209182! defaultAction self messageText: 'Block cannot return'. ^super defaultAction! ! !BlockCannotReturn methodsFor: 'testing' stamp: 'tfei 4/2/1999 15:49' prior: 18209349! isResumable ^true! ! !ArithmeticError commentStamp: '' prior: 45618955! I am ArithmeticError, the superclass of all exceptions related to arithmetic.! !DomainError commentStamp: '' prior: 45619093! I am DomainError, an ArithmeticException indicating that some argument falls outside an expected domain, [from, to] When my valid interval is left- or right-open, use signal: creation protocol to provide a custom messageText rather than the default [from, to] notation.! !InvalidArgument commentStamp: '' prior: 45619421! I am InvalidArgument, an Error indicating that some argument does not fit the method's preconditions. For numeric arguments and range checking, consider using DomainError instead.! !InvalidArgument class methodsFor: 'signalling' stamp: 'DamienPollet 7/19/2013 16:29'! signal: signallerText for: argument ^ self new argument: argument; signal: signallerText! ! !InvalidArgument class methodsFor: 'signalling' stamp: 'DamienPollet 7/19/2013 16:29'! signal: signallerText for: argument in: object ^ self new signaler: object; argument: argument; signal: signallerText! ! !InvalidArgument class methodsFor: 'signalling' stamp: 'DamienPollet 7/19/2013 16:25'! signalFor: argument ^ self signal: 'Illegal argument' for: argument! ! !InvalidArgument class methodsFor: 'signalling' stamp: 'DamienPollet 7/19/2013 16:27'! signalFor: argument in: object ^ self signal: 'Illegal argument' for: argument in: object! ! !InvalidArgument methodsFor: 'accessing' stamp: 'DamienPollet 7/19/2013 16:30'! argument: anObject argument := anObject! ! !NonBooleanReceiver methodsFor: 'testing' stamp: 'hmm 7/29/2001 21:37' prior: 28452114! isResumable ^true! ! "Kernel"! "SUnit-Core"! ----End fileIn----! ----QUIT----an Array(21 July 2013 10:07:02 am) Pharo.image priorSource: 12053644! ----STARTUP----an Array(21 July 2013 10:17:23 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 July 2013 10:17:23 am) Pharo-30288.image priorSource: 12067313! ----STARTUP----an Array(22 July 2013 7:27:04 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/22/2013 07:23' prior: 45608377! commentForCurrentUpdate ^ '11204 Crash if changes file is not writable https://pharo.fogbugz.com/f/cases/11204 11198 Update Pharo with latest Opal https://pharo.fogbugz.com/f/cases/11198 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/22/2013 07:23'! script124 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.31.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.837.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.861.mcz RPackage-Core-EstebanLorenzano.243.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1186.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/22/2013 07:23'! update30289 "self new update30289" self withUpdateLog: '11204 Crash if changes file is not writable https://pharo.fogbugz.com/f/cases/11204 11198 Update Pharo with latest Opal https://pharo.fogbugz.com/f/cases/11198 '. self loadTogether: self script124 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 7/19/2013 14:24' prior: 43814802! visitLargeArrayNode: aRBArrayNode "Long form: generates (Array braceStream: N) nextPut: a; nextPut: b; ...; braceArray" methodBuilder pushLiteralVariable: Array binding. methodBuilder pushLiteral: aRBArrayNode statements size. methodBuilder send: #braceStream:. aRBArrayNode statements do: [ :each | methodBuilder pushDup. valueTranslator visitNode: each. methodBuilder send: #nextPut:. methodBuilder popTop. ]. methodBuilder send: #braceArray. ! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'DamienCassou 7/21/2013 09:51' prior: 34634923! openChanges: changesPath forImage: imageName "find the changes file by looking in a) the directory derived from the image name b) the DefaultDirectory (which will normally be the directory derived from the image name or the SecurityManager's choice) If an old file is not found in either place, check for a read-only file in the same places. If that fails, return nil" | changesFile changesName | changesFile := changesPath asFileReference. changesName := changesFile basename. "look for the changes file or an alias to it in the image directory" (changesFile exists and: [ changesFile isWritable ]) ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the changes in the default directory" ((changesFile := FileSystem workingDirectory / changesName) exists and: [ changesFile isWritable ]) ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the image directory" (((changesFile := changesPath asFileReference) exists) and: [ changesFile isReadable ]) ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the default directory" ((changesFile := FileSystem workingDirectory / changesName) exists and: [ changesFile isReadable ]) ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "failed to open a changes file" ^ nil ! ! "OpalCompiler-Core"! "System-Support"! ----End fileIn----! ----QUIT----an Array(22 July 2013 7:27:22 am) Pharo.image priorSource: 12067514! ----STARTUP----an Array(22 July 2013 7:37:14 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 July 2013 7:37:14 am) Pharo-30289.image priorSource: 12080448! ----STARTUP----an Array(22 July 2013 9:43:26 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/22/2013 09:40' prior: 45622247! commentForCurrentUpdate ^ '10393 Add RPackageSet cache https://pharo.fogbugz.com/f/cases/10393'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/22/2013 09:40'! script125 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.861.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1186.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/22/2013 09:40'! update30290 "self new update30290" self withUpdateLog: '10393 Add RPackageSet cache https://pharo.fogbugz.com/f/cases/10393'. self loadTogether: self script125 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageSet commentStamp: '' prior: 42618600! I'm a set who can be instantiated by pattern matching RPackages ("name" and "name-*"). My purpose is to provide a bridge between monticello and system packages, to allow backward compatibility with old packaging. ! !MetacelloPharoPlatform methodsFor: 'notification' stamp: 'EstebanLorenzano 7/19/2013 15:58' prior: 26003629! do: aBlock displaying: aString self bypassProgressBars ifTrue: [ ^super do: aBlock displaying: aString ]. aString displayProgressFrom: 0 to: 2 during: [ :bar | bar current: 1. RPackageSet withCacheDo: [ aBlock value ]. bar current: 2 ]! ! !MCVersionLoader methodsFor: 'loading' stamp: 'EstebanLorenzano 7/19/2013 15:58' prior: 25120407! load RPackageSet withCacheDo: [ self loadWithNameLike: versions first info name ].! ! !RPackageSet commentStamp: '' prior: 45645725! I'm a set who can be instantiated by pattern matching RPackages ("name" and "name-*"). My purpose is to provide a bridge between monticello and system packages, to allow backward compatibility with old packaging. ! !RPackageSet class methodsFor: 'private' stamp: 'EstebanLorenzano 7/19/2013 15:05'! basicNamed: aString self flag: #hack. "We force the creation of a PackageInfo to keep backward compatibility of tools" PackageInfo named: aString. ^ self basicNew initialize: aString; yourself! ! !RPackageSet class methodsFor: 'private' stamp: 'EstebanLorenzano 7/19/2013 16:01'! cacheActive: aBoolean cacheActive := aBoolean! ! !RPackageSet class methodsFor: 'private' stamp: 'EstebanLorenzano 7/19/2013 16:01'! cachePackageAt: aString ifAbsentPut: aBlock "self addCount: aString." ^ self cachePackages at: aString asSymbol ifAbsentPut: aBlock! ! !RPackageSet class methodsFor: 'private' stamp: 'EstebanLorenzano 7/19/2013 16:01'! cachePackages ^ cachePackages ifNil: [ cachePackages := IdentityDictionary new ]! ! !RPackageSet class methodsFor: 'testing' stamp: 'EstebanLorenzano 7/19/2013 16:00'! isCacheActive ^ cacheActive ifNil: [ cacheActive := false ].! ! !RPackageSet class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 7/19/2013 16:09' prior: 32067592! named: aString ^ self isCacheActive ifTrue: [ self cachePackageAt: aString ifAbsentPut: [ self basicNamed: aString ] ] ifFalse: [ self basicNamed: aString ]. ! ! !RPackageSet class methodsFor: 'private' stamp: 'EstebanLorenzano 7/19/2013 16:02'! resetCache cachePackages := nil.! ! !RPackageSet class methodsFor: 'accessing' stamp: 'EstebanLorenzano 7/19/2013 16:12'! withCacheDo: aBlock | oldActive | oldActive := self isCacheActive. self cacheActive: true. aBlock ensure: [ self cacheActive: oldActive. self isCacheActive ifFalse: [ self resetCache ] ].! ! "Metacello-Platform"! "Monticello"! "RPackage-Core"! ----End fileIn----! ----QUIT----an Array(22 July 2013 9:43:35 am) Pharo.image priorSource: 12080647! ----STARTUP----an Array(22 July 2013 9:53:09 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 July 2013 9:53:10 am) Pharo-30290.image priorSource: 12094092! ----STARTUP----an Array(22 July 2013 2:11:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/22/2013 14:08' prior: 45635379! commentForCurrentUpdate ^ '4533 UIThemeWatery and UIThemeWatery2 should be merged... https://pharo.fogbugz.com/f/cases/4533 11207 clean up some dead code in FileContentsBrowser https://pharo.fogbugz.com/f/cases/11207 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/22/2013 14:09'! script126 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.863.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1189.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/22/2013 14:09'! update30291 "self new update30291" self withUpdateLog: '4533 UIThemeWatery and UIThemeWatery2 should be merged... https://pharo.fogbugz.com/f/cases/4533 11207 clean up some dead code in FileContentsBrowser https://pharo.fogbugz.com/f/cases/11207 '. self loadTogether: self script126 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FileContentsBrowser commentStamp: '' prior: 42297385! I am a class browser view on a fileout (either a source file (.st) or change set (.cs)). I do not actually load the code into to the system, nor do I alter the classes in the image. Use me to vet code in a comfortable way before loading it into your image. From a FileList, I can be invoked by selecting a source file and selecting the "browse code" menu item from the yellow button menu. I use PseudoClass, PseudoClassOrganizers, and PseudoMetaclass to model the class structure of the source file.! !FileContentsBrowser commentStamp: '' prior: 45659631! I am a class browser view on a fileout (either a source file (.st) or change set (.cs)). I do not actually load the code into to the system, nor do I alter the classes in the image. Use me to vet code in a comfortable way before loading it into your image. From a FileList, I can be invoked by selecting a source file and selecting the "browse code" menu item from the yellow button menu. I use PseudoClass, PseudoClassOrganizers, and PseudoMetaclass to model the class structure of the source file.! !UIThemeWatery2 methodsFor: 'border-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonCornerStyleIn: aThemedMorph "Allow for themes to override default behaviour." ^aThemedMorph ifNil: [#rounded] ifNotNil: [:tm | tm preferredButtonCornerStyle ifNil: [#rounded] ifNotNil: [:bcs | bcs]]! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonFocusBoundsFor: aButton "Answer the bounds for drawing the focus indication for the given button." ^aButton bounds! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonLabelForText: aTextOrString "Answer the label to use for the given text." ^aTextOrString isString ifTrue: [(FuzzyLabelMorph contents: aTextOrString) alpha: 0.3] ifFalse: [super buttonLabelForText: aTextOrString]! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonPressedFillStyleFor: aButton "Return the button pressed fillStyle for the given button." ^self buttonSelectedFillStyleFor: aButton! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonSelectedPressedFillStyleFor: aButton "Return the button selected pressed fillStyle for the given color." ^self buttonNormalFillStyleFor: aButton! ! !UIThemeWatery2 methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! configureWindowBorderFor: aWindow "Configure the border for the given window." super configureWindowBorderFor: aWindow. aWindow roundedCorners: #(1 4) "just top"! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! configureWindowLabelAreaFor: aWindow "Configure the label area for the given window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow hasMenuBox ifTrue: [aWindow addMenuControl]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! controlButtonMouseOverFillStyleFor: aButton "Return the mouse over control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonNormalFillStyleFor: aButton! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createCollapseBoxFor: aSystemWindow "Answer a button for minimising the window." |form msb| form := self windowMinimizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow collapseBoxHit]; setBalloonText: 'Collapse this window' translated; extent: aSystemWindow boxExtent. ^msb! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createExpandBoxFor: aSystemWindow "Answer a button for maximising/restoring the window." |form msb| form := self windowMaximizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow expandBoxHit]; setBalloonText: 'Expand to full screen' translated; extent: aSystemWindow boxExtent. ^msb! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createMenuBoxFor: aSystemWindow "Answer a button for the window menu." |form msb| form := self windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow offerWindowMenu]; setBalloonText: 'Window menu' translated; extent: form extent. ^msb! ! !UIThemeWatery2 methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! drawTextAdornmentFor: aPluggableTextMorph color: aColor on: aCanvas "Indicate edit status for the given morph." |bounds size fillStyle| bounds := aPluggableTextMorph innerBounds. size := 25. fillStyle := (GradientFillStyle ramp: { 0.0->(Color white alpha: 0.01). 0.8->aColor. 1.0->aColor}) origin: bounds topRight - (size@0); direction: (size @ size negated) // 4; radial: false. aCanvas drawPolygon: {bounds topRight. bounds topRight + (0@size). bounds topRight - (size@0)} fillStyle: fillStyle! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! dropListFocusBoundsFor: aDropList "Answer the bounds for drawing the focus indication for the given drop list." ^aDropList bounds! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! expanderTitleNormalFillStyleFor: anExpanderTitle "Return the normal expander title fillStyle for the given expander title." |aColor| aColor := anExpanderTitle paneColor. ^(GradientFillStyle ramp: { 0.0->Color white. 0.05-> aColor lighter. 1.0->aColor darker}) origin: anExpanderTitle topLeft; direction: 0 @ anExpanderTitle height; radial: false! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! menuItemInDockingBarSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item that is in a docking bar." | fill baseColor | Display depth <= 2 ifTrue: [^ Color gray]. baseColor := self settings derivedMenuColor. self preferGradientFill ifFalse: [^baseColor]. fill := GradientFillStyle ramp: {0.0 -> baseColor twiceDarker . 1 -> baseColor twiceLighter}. fill origin: aMenuItem topLeft; direction: 0@aMenuItem height. ^ fill! ! !UIThemeWatery2 methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! menuItemSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item." | fill baseColor preferenced | Display depth <= 2 ifTrue: [^ Color gray]. preferenced := self settings menuSelectionColor. baseColor := preferenced isNil ifTrue: [aMenuItem owner color negated] ifFalse: [preferenced]. self preferGradientFill ifFalse: [^baseColor]. fill := GradientFillStyle ramp: {0.0 -> baseColor twiceLighter . 1 -> baseColor twiceDarker}. fill origin: aMenuItem topLeft; direction: 0@aMenuItem height. ^ fill! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newCheckboxMarkerForm "Answer a new checkbox marker form." ^(Form extent: 12@14 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1342177280 1610612736 134217728 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278190080 1476395008 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 671088640 4278190080 4009754624 134217728 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2147483648 4278190080 2533359616 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3607101440 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 3875536896 16777215 16777215 16777215 16777215 16777215 1207959552 3204448256 134217728 16777215 2801795072 4278190080 2147483648 16777215 16777215 16777215 16777215 134217728 3607101440 4278190080 2936012800 268435456 4143972352 4278190080 536870912 16777215 16777215 16777215 16777215 16777215 536870912 4009754624 4278190080 3607101440 4278190080 3070230528 16777215 16777215 16777215 16777215 16777215 16777215 16777215 805306368 4009754624 4278190080 4278190080 1342177280 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 671088640 2936012800 2801795072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newCloseControlIn: aThemedMorph for: aModel action: aValuable help: helpText "Answer a button for closing things." |form msb| form := self windowCloseForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowCloseOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: aValuable; setBalloonText: helpText. ^msb! ! !UIThemeWatery2 methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newDialogPanelIn: aThemedMorph "Answer a new (main) dialog panel." ^(super newDialogPanelIn: aThemedMorph) fillStyle: (SolidFillStyle color: Color transparent) "no pane colour tracking"! ! !UIThemeWatery2 methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newFocusIndicatorMorphFor: aMorph "Answer a new focus indicator for the given morph." |radius| radius := aMorph focusIndicatorCornerRadius. ^BorderedMorph new fillStyle: Color transparent; borderStyle: ((CompositeBorder new width: radius) borders: {RoundedBorder new cornerRadius: radius; width: 1; baseColor: self settings scrollbarColor. RoundedBorder new cornerRadius: radius - 1; width: 1; baseColor: (self settings scrollbarColor alpha: 0.4)}); bounds: aMorph focusBounds! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newRadioButtonMarkerForm "Answer a new radio button marker form." ^(Form extent: 12@12 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 0 0 0 0 0 0 0 16777215 16777215 16777215 16777215 0 0 268435456 1392508928 1392508928 268435456 0 0 16777215 16777215 16777215 16777215 0 268435456 3439329280 4278190080 4211081216 3355443200 268435456 0 16777215 16777215 16777215 16777215 0 1392508928 4278190080 4278190080 4278190080 4244635648 1392508928 0 16777215 16777215 16777215 16777215 0 1392508928 4278190080 4278190080 4261412864 4261412864 1308622848 0 16777215 16777215 16777215 16777215 0 268435456 3439329280 4278190080 4261412864 3422552064 234881024 0 16777215 16777215 16777215 16777215 0 0 268435456 1392508928 1392508928 268435456 0 0 16777215 16777215 16777215 16777215 0 0 0 0 0 0 0 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newStripesForm "Answer the form for the stripes in panels etc." ^(Form extent: 32@32 depth: 32 fromArray: #( 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newTaskbarThumbnailIn: aThemedMorph for: aWindow "Answer a taskbar thumbnail morph for the given window." |answer thumb| thumb := aWindow taskbarThumbnail. answer := PanelMorph new hResizing: #shrinkWrap; vResizing: #shrinkWrap; changeTableLayout; layoutInset: 8; cellInset: 4; addMorphBack: thumb; addMorphBack: ((self buttonLabelForText: (aWindow labelString truncateWithElipsisTo: 50)) color: Color white). answer extent: answer minExtent; fillStyle: (self tasklistFillStyleFor: answer); borderStyle: (self taskbarThumbnailNormalBorderStyleFor: aWindow); cornerStyle: (self taskbarThumbnailCornerStyleFor: answer). ^answer ! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newTreeExpandedForm "Answer a new form for an expanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 1200130184 478709896 4169697416 4287137928 4287137928 4287137928 4287137928 4287137928 4236806280 646482056 16777215 2508753032 4287137928 4287137928 4287137928 4287137928 4287137928 2726856840 16777215 16777215 495487112 4186474632 4287137928 4287137928 4287137928 4236806280 612927624 16777215 16777215 16777215 2542307464 4287137928 4287137928 4287137928 2676525192 16777215 16777215 16777215 16777215 478709896 4169697416 4287137928 4220029064 579373192 16777215 16777215 16777215 16777215 16777215 2424866952 4287137928 2626193544 16777215 16777215 16777215 16777215 16777215 16777215 394823816 4018702472 529041544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 864585864 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newTreeUnexpandedForm "Answer a new form for an unexpanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 461932680 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2324203656 4152920200 2458421384 428378248 16777215 16777215 16777215 16777215 16777215 2357758088 4287137928 4287137928 4152920200 2408089736 394823816 16777215 16777215 16777215 2391312520 4287137928 4287137928 4287137928 4287137928 4119365768 2324203656 344492168 16777215 2408089736 4287137928 4287137928 4287137928 4287137928 4287137928 4287137928 3968370824 780699784 2391312520 4287137928 4287137928 4287137928 4287137928 4236806280 2659747976 529041544 16777215 2357758088 4287137928 4287137928 4253583496 2810742920 646482056 16777215 16777215 16777215 2324203656 4253583496 2777188488 696813704 16777215 16777215 16777215 16777215 16777215 1200130184 663259272 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowCloseForm "Answer a new form for a window close box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290361785 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290361785 0 0 0 0 0 0 0 4287335307 4281808438 4283254086 4286543478 4288254096 4288188560 4286543478 4283254086 4281808438 4287335307 0 0 0 0 0 4287138185 4280425243 4285027670 4289633180 4292135884 4293254878 4293320928 4292267469 4289567644 4285093206 4280490779 4287203978 0 0 0 4290164406 4282134834 4284233271 4288637549 4291401881 4292653234 4292850869 4292785333 4292653234 4291467161 4288637549 4284364600 4282266163 4290230199 0 0 4286545534 4283178015 4287182138 4289281086 4290597711 4290995037 4291126110 4291126109 4290929244 4290662991 4289281086 4287182394 4283309344 4286611327 0 0 4283383359 4285867306 4288685092 4289799715 4290590512 4290856252 4290988611 4291054147 4290922044 4290590256 4289930531 4288619300 4285867562 4283711040 0 0 4282782229 4287833644 4289996837 4290787376 4291381825 4291909968 4292173910 4292239446 4292106833 4291578692 4290984239 4290193702 4287833644 4283044630 0 0 4284026900 4289014315 4291051835 4291973448 4292633434 4293226345 4293556336 4293622129 4293358699 4292896092 4292236105 4291445307 4289014058 4284092436 0 0 4285414719 4289343786 4291712331 4293027933 4293949038 4294280317 4294479236 4294479236 4294346110 4294015086 4293224799 4291974475 4289343785 4285545791 0 0 4287264888 4288555300 4292239449 4293818479 4294542716 4294546314 4294614419 4294614676 4294546828 4294543230 4293884271 4292501850 4288751652 4287330424 0 0 4290558650 4286658615 4291253841 4293951868 4294481292 4294615447 4294617247 4294618017 4294616217 4294481550 4294214781 4291779154 4286789430 4290493114 0 0 4292664540 4288385426 4287573545 4292374633 4293892240 4294289824 4294555050 4294555308 4294356387 4293958547 4292835183 4287836460 4288385426 4292664540 0 0 0 4292993505 4288320403 4286993487 4289421400 4291463295 4292845463 4293043354 4291660419 4289684573 4287256400 4288254867 4292993505 0 0 0 0 0 4292927712 4291282630 4287858566 4286996058 4286533190 4286598726 4287324509 4287858309 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowCloseOverForm "Answer a new form for a window close box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290361785 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290361785 0 0 0 0 0 0 0 4287335307 4281808438 4283254086 4286543478 4288254096 4288188560 4286543478 4283254086 4281808438 4287335307 0 0 0 0 0 4287138185 4280425243 4285027670 4289633180 4292135884 4293254878 4293320928 4292267469 4289567644 4285093206 4280490779 4287203978 0 0 0 4290164406 4282134834 4284233271 4287126365 4286603617 4292192940 4292850869 4292785333 4292192940 4286011738 4286666328 4284364600 4282266163 4290230199 0 0 4286545534 4283178015 4286985273 4284555811 4284360999 4285741623 4291126110 4290272343 4285676086 4284360743 4284555811 4287182394 4283309344 4286611327 0 0 4283383359 4285867306 4288685092 4289012512 4285079066 4284293404 4285344037 4285803560 4284293404 4285472540 4289340193 4288619300 4285867562 4283711040 0 0 4282782229 4287833644 4289996837 4290787376 4291381825 4285870380 4284886569 4284952105 4286395695 4291578692 4290984239 4290193702 4287833644 4283044630 0 0 4284026900 4289014315 4291051835 4291973448 4292502105 4286988605 4285544758 4285610550 4287054910 4292830299 4292236105 4291445307 4289014058 4284092436 0 0 4285414719 4289343786 4291712331 4292502618 4287513921 4285808187 4287779662 4287713869 4285808443 4287514433 4292699484 4291974475 4289343785 4285545791 0 0 4287264888 4288555300 4292239449 4288171078 4286333501 4287320653 4294614419 4294351761 4287846482 4286333758 4287448897 4292501850 4288751652 4287330424 0 0 4290558650 4286658615 4291253841 4291718762 4287518032 4293564045 4294617247 4294618017 4293827729 4287518289 4291193701 4291779154 4286789430 4290493114 0 0 4292664540 4288385426 4287573545 4292374633 4293629325 4294289824 4294555050 4294555308 4294356387 4293958547 4292835183 4287836460 4288385426 4292664540 0 0 0 4292993505 4288320403 4286993487 4289421400 4291463295 4292845463 4293043354 4291660419 4289684573 4287256400 4288254867 4292993505 0 0 0 0 0 4292927712 4291282630 4287858566 4286996058 4286533190 4286598726 4287324509 4287858309 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowInactiveControlForm "Answer a new form for an inactive window control box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291677645 4288585374 4286085240 4284243036 4284243036 4286085240 4288585374 4291677645 0 0 0 0 0 0 0 4289572269 4285756275 4286479998 4288716960 4289835441 4289835441 4288716960 4286479998 4285756275 4289572269 0 0 0 0 0 4289506476 4284835173 4287335307 4290559164 4292598747 4293322470 4293322470 4292598747 4290559164 4287335307 4284703587 4289506476 0 0 0 4291546059 4285493103 4286414205 4288980132 4291217094 4292335575 4292598747 4292598747 4292335575 4291282887 4288980132 4286282619 4285493103 4291546059 0 0 4288980132 4285361517 4287466893 4288782753 4289835441 4290295992 4290295992 4290427578 4290164406 4289835441 4288782753 4287466893 4285361517 4288980132 0 0 4286282619 4286611584 4288059030 4288716960 4289177511 4289572269 4289835441 4289835441 4289703855 4289374890 4288782753 4288059030 4286611584 4286282619 0 0 4285164138 4287664272 4288782753 4289374890 4289835441 4290427578 4290624957 4290624957 4290559164 4290032820 4289374890 4288914339 4287664272 4285164138 0 0 4285361517 4288322202 4289703855 4290295992 4290822336 4291414473 4291677645 4291677645 4291414473 4291085508 4290427578 4289703855 4288453788 4285624689 0 0 4287072135 4288716960 4290427578 4291217094 4291677645 4292203989 4292598747 4292598747 4292335575 4291809231 4291217094 4290427578 4288716960 4287203721 0 0 4288980132 4288256409 4290624957 4291677645 4292335575 4292927712 4293256677 4293256677 4293059298 4292598747 4291809231 4290822336 4288256409 4289177511 0 0 4291677645 4287664272 4290295992 4292006610 4293059298 4293454056 4293585642 4293585642 4293454056 4293125091 4292203989 4290427578 4287730065 4291677645 0 0 4293256677 4290032820 4288124823 4291217094 4292796126 4293322470 4293717228 4293717228 4293454056 4292927712 4291677645 4288256409 4290032820 4293256677 0 0 0 4293454056 4290032820 4288322202 4289967027 4291546059 4292598747 4292664540 4291677645 4290295992 4288716960 4290032820 4293454056 0 0 0 0 0 4293322470 4292203989 4289835441 4288782753 4288322202 4288453788 4288980132 4289835441 4292335575 4293322470 0 0 0 0 0 0 0 4293059298 4293585642 4293717228 4293585642 4293585642 4293585642 4293585642 4293059298 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMaximizeForm "Answer a new form for a window minimize box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290295992 0 0 0 0 0 0 0 4287269514 4281611316 4282795590 4285953654 4287664528 4287730320 4285953654 4282861383 4281611316 4287269514 0 0 0 0 0 4287137928 4280360481 4283914839 4288455580 4291547084 4292731360 4292796894 4291547341 4288390044 4283980376 4280294689 4287203721 0 0 0 4290164406 4281348144 4282010170 4285369453 4288527772 4290565299 4291025080 4291025080 4290630835 4288593820 4285303917 4282009913 4281348144 4290164406 0 0 4286479998 4280431648 4282282296 4283995198 4286033222 4286821198 4286952786 4287018578 4286755662 4285967429 4284060735 4282216504 4280497696 4286545791 0 0 4282402111 4281097769 4282549797 4283800345 4284982554 4285771048 4285903149 4285837356 4285771304 4285114397 4283866393 4282484773 4281097769 4282402111 0 0 4279972116 4282219307 4283997212 4285114906 4285969451 4286824254 4287152961 4287218498 4286890301 4286167084 4285246490 4284260124 4282219308 4280037908 0 0 4279975186 4283600171 4285640744 4286561842 4287547718 4288336981 4288731227 4288731228 4288402775 4287614279 4286627889 4285772072 4283600683 4280172817 0 0 4282736189 4284126245 4286692666 4287877449 4288797275 4289586536 4290112367 4290112368 4289718377 4288863579 4287877448 4286758970 4284126756 4282803005 0 0 4286284920 4283533850 4287283524 4288731993 4289718632 4290507893 4291099774 4291165055 4290705785 4289850729 4288797788 4287415878 4283599642 4286350968 0 0 4290362041 4283331374 4286560575 4289322854 4290770809 4291559299 4291952522 4292083595 4291690372 4290903163 4289455464 4286889281 4283462959 4290362040 0 0 4292664540 4287928465 4283793702 4288007509 4290572412 4291689100 4292607381 4292607382 4291885710 4290900861 4288666201 4284122406 4287928465 4292664540 0 0 0 4292993505 4288059538 4284842051 4286688328 4289384043 4290962050 4291224710 4289646450 4287083084 4285171781 4287928466 4292993505 0 0 0 0 0 4292927712 4291217093 4287402885 4285630033 4284907832 4284973881 4285893715 4287468677 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMaximizeOverForm "Answer a new form for a window maximize box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290295992 0 0 0 0 0 0 0 4287269514 4281611316 4282795590 4285953654 4287664528 4287730320 4285953654 4282861383 4281611316 4287269514 0 0 0 0 0 4287137928 4280360481 4283914839 4288455580 4291547084 4288980902 4289046437 4291547341 4288390044 4283980376 4280294689 4287203721 0 0 0 4290164406 4281348144 4282010170 4285369453 4288527772 4287405445 4284113749 4284113749 4287405445 4288593820 4285303917 4282009913 4281348144 4290164406 0 0 4286479998 4280431648 4282282296 4283995198 4286033222 4284581178 4282209061 4282274853 4284515642 4285967429 4284060735 4282216504 4280497696 4286545791 0 0 4282402111 4281097769 4282549797 4282216466 4283070226 4283793437 4281749780 4281684244 4283661853 4283201813 4282282258 4282484773 4281097769 4282402111 0 0 4279972116 4282219307 4282347796 4281355787 4281750291 4282210588 4282276125 4282144028 4282210588 4281881876 4281421323 4282544916 4282219308 4280037908 0 0 4279975186 4283600171 4283531037 4281815829 4282473504 4282604837 4282999593 4282999594 4282736679 4282539552 4281881621 4283662365 4283600683 4280172817 0 0 4282736189 4284126245 4286692666 4285175604 4285832770 4286424651 4283657010 4283657267 4286490700 4285898818 4285175604 4286758970 4284126756 4282803005 0 0 4286284920 4283533850 4287283524 4288731993 4289718632 4287346007 4284118074 4284183610 4287478106 4289850729 4288797788 4287415878 4283599642 4286350968 0 0 4290362041 4283331374 4286560575 4289322854 4290770809 4288134753 4284511807 4284577344 4288200290 4290903163 4289455464 4286889281 4283462959 4290362040 0 0 4292664540 4287928465 4283793702 4288007509 4290572412 4291689100 4288920687 4288920687 4291885710 4290900861 4288666201 4284122406 4287928465 4292664540 0 0 0 4292993505 4288059538 4284842051 4286688328 4289384043 4290962050 4291224710 4289646450 4287083084 4285171781 4287928466 4292993505 0 0 0 0 0 4292927712 4291217093 4287402885 4285630033 4284907832 4284973881 4285893715 4287468677 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMenuForm "Answer a new form for a window menu box." ^(Form extent: 24@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4293125091 4287335307 4283453520 4281150765 4280690214 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280690214 4281150765 4283453520 4287335307 4293125091 0 0 0 0 0 4293059298 4285493103 4282795590 4287072135 4289638062 4290493371 4290822336 4290756543 4290756543 4290822336 4290822336 4290756543 4290756543 4290822336 4290493371 4289638062 4287072135 4282795590 4285493103 4293059298 0 0 0 0 4287335307 4282598211 4288322202 4291875024 4292927712 4293322470 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293322470 4292927712 4291875024 4288322202 4282598211 4287401100 0 0 0 0 4283585106 4285953654 4289967027 4291677645 4292269782 4292401368 4292401368 4292401368 4292335575 4292335575 4292335575 4292335575 4292401368 4292401368 4292401368 4292269782 4291677645 4289967027 4285953654 4283585106 0 0 0 0 4281742902 4287861651 4290493371 4291085508 4291480266 4291546059 4291611852 4291611852 4291546059 4291480266 4291480266 4291546059 4291611852 4291611852 4291546059 4291480266 4291085508 4290493371 4287861651 4281742902 0 0 0 0 4281940281 4288782753 4291414473 4292203989 4292664540 4292796126 4292927712 4292796126 4292861919 4292927712 4292927712 4292861919 4292796126 4292927712 4292796126 4292664540 4292203989 4291414473 4288782753 4281874488 0 0 0 0 4284045657 4288256409 4291546059 4293190884 4294177779 4294572537 4294440951 4294572537 4294506744 4294572537 4294572537 4294506744 4294572537 4294440951 4294572537 4294177779 4293190884 4291546059 4288256409 4284045657 0 0 0 0 4287269514 4283914071 4290624957 4293190884 4294638330 4294769916 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294769916 4294638330 4293190884 4290624957 4283914071 4287269514 0 0 0 0 4292467161 4286414205 4283387727 4287993237 4291019715 4292269782 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292598747 4291611852 4287993237 4283387727 4286414205 4292467161 0 0 0 0 4292401368 4292467161 4288124823 4284177243 4281150765 4280229663 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280229663 4281282351 4284177243 4288124823 4292467161 4292401368 0 0 0 0 0 4292203989 4292203989 4292335575 4292401368 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292664540 4292401368 4292335575 4292269782 4292203989 0 0 0 0 0 0 0 4292006610 4292401368 4292467161 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292796126 4292467161 4292401368 4292006610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMenuOverForm "Answer a new form for a window menu box when the mouse is over it." ^(Form extent: 24@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4293257970 4287735753 4284054189 4281884573 4281490073 4281555866 4281555866 4281555866 4281555866 4281555866 4281555866 4281555866 4281555866 4281490073 4281884573 4284054189 4287735753 4293257970 0 0 0 0 0 4293192178 4286026172 4283462312 4287538375 4289970905 4290759648 4291088354 4291022817 4291022817 4291088354 4291088354 4291022817 4291022817 4291088354 4290759648 4289970905 4287538375 4283462312 4286026172 4293192178 0 0 0 0 4287735753 4283265191 4288721616 4292074729 4293060849 4293455092 4293652469 4293652469 4293652469 4293652469 4293652469 4293652469 4293652469 4293652469 4293455092 4293060849 4292074729 4288721616 4283265191 4287801545 0 0 0 0 4284185518 4286420927 4290233820 4291877352 4292468972 4292535021 4292535021 4292535021 4292534765 4292534765 4292534765 4292534765 4292535021 4292535021 4292535021 4292468972 4291877352 4290233820 4286420927 4284185518 0 0 0 0 4282476193 4288261581 4290759648 4291351268 4291680231 4291746023 4291811559 4291811559 4291746023 4291680231 4291680231 4291746023 4291811559 4291811559 4291746023 4291680231 4291351268 4290759648 4288261581 4282476193 0 0 0 0 4282673314 4289116371 4291614438 4292403180 4292797935 4292929264 4293060849 4292929264 4292995056 4293060849 4293060849 4292995056 4292929264 4293060849 4292929264 4292797935 4292403180 4291614438 4289116371 4282607522 0 0 0 0 4284645809 4288655823 4291746023 4293323763 4294244090 4294638589 4294507004 4294638589 4294572796 4294638589 4294638589 4294572796 4294638589 4294507004 4294638589 4294244090 4293323763 4291746023 4288655823 4284645809 0 0 0 0 4287669960 4284514224 4290891232 4293323763 4294704381 4294835710 4294901503 4294901503 4294901503 4294901503 4294901503 4294901503 4294901503 4294901503 4294835710 4294704381 4293323763 4290891232 4284514224 4287669960 0 0 0 0 4292600558 4286880962 4283988397 4288392910 4291285731 4292468972 4292600558 4292600558 4292600558 4292600558 4292600558 4292600558 4292600558 4292600558 4292732143 4291811559 4288392910 4283988397 4286880962 4292600558 0 0 0 0 4292535021 4292600558 4288524495 4284777138 4281884573 4281029782 4281161367 4281161367 4281161367 4281161367 4281161367 4281161367 4281161367 4281161367 4281029782 4282015902 4284777138 4288524495 4292600558 4292535021 0 0 0 0 0 4292403180 4292403180 4292534765 4292535021 4293060849 4293060849 4293060849 4293060849 4293060849 4293060849 4293060849 4293060849 4293060849 4292797935 4292535021 4292534765 4292468972 4292403180 0 0 0 0 0 0 0 4292206058 4292535021 4292600558 4292863472 4292863472 4292863472 4292863472 4292863472 4292863472 4292863472 4292863472 4292863472 4292929264 4292600558 4292535021 4292206058 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMenuPassiveForm "Answer a new form for a window menu box when inactive." ^(Form extent: 24@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294046193 4291085508 4289111718 4287927444 4287664272 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287664272 4287927444 4289111718 4291085508 4294046193 0 0 0 0 0 4293980400 4290164406 4288782753 4290953922 4292269782 4292664540 4292861919 4292796126 4292796126 4292861919 4292861919 4292796126 4292796126 4292861919 4292664540 4292269782 4290953922 4288782753 4290164406 4293980400 0 0 0 0 4291085508 4288651167 4291546059 4293388263 4293914607 4294111986 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294111986 4293914607 4293388263 4291546059 4288651167 4291085508 0 0 0 0 4289177511 4290361785 4292401368 4293322470 4293585642 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293585642 4293322470 4292401368 4290361785 4289177511 0 0 0 0 4288190616 4291348680 4292664540 4292993505 4293190884 4293190884 4293256677 4293256677 4293190884 4293190884 4293190884 4293190884 4293256677 4293256677 4293190884 4293190884 4292993505 4292664540 4291348680 4288190616 0 0 0 0 4288322202 4291809231 4293125091 4293585642 4293783021 4293848814 4293914607 4293848814 4293914607 4293914607 4293914607 4293914607 4293848814 4293914607 4293848814 4293783021 4293585642 4293125091 4291809231 4288322202 0 0 0 0 4289374890 4291546059 4293190884 4294046193 4294572537 4294769916 4294704123 4294769916 4294704123 4294769916 4294769916 4294704123 4294769916 4294704123 4294769916 4294572537 4294046193 4293190884 4291546059 4289374890 0 0 0 0 4291019715 4289309097 4292730333 4294046193 4294769916 4294835709 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294835709 4294769916 4294046193 4292730333 4289309097 4291019715 0 0 0 0 4293717228 4290624957 4289045925 4291414473 4292927712 4293585642 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293783021 4293256677 4291414473 4289045925 4290624957 4293717228 0 0 0 0 4293651435 4293717228 4291480266 4289440683 4287927444 4287466893 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287466893 4287993237 4289440683 4291480266 4293717228 4293651435 0 0 0 0 0 4293585642 4293585642 4293651435 4293651435 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293783021 4293651435 4293651435 4293585642 4293585642 0 0 0 0 0 0 0 4293454056 4293651435 4293717228 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293717228 4293651435 4293454056 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMinimizeForm "Answer a new form for a window minimize box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285953140 4282726971 4280619283 4280619283 4282661434 4285953140 4290295992 0 0 0 0 0 0 0 4287400586 4282921779 4284629572 4287526262 4288909456 4288974992 4287591798 4284761414 4282856243 4287400586 0 0 0 0 0 4287334536 4282588703 4286796631 4290682268 4292529868 4293385950 4293385950 4292529612 4290682268 4286731095 4282654242 4287400329 0 0 0 4290164406 4283247407 4286332215 4290281068 4292457116 4293447349 4293579448 4293579447 4293447349 4292457116 4290346605 4286660409 4283771952 4290164406 0 0 4287004286 4284555291 4289551160 4291461439 4292647750 4292978252 4292978510 4292978510 4292912459 4292516422 4291461695 4289485625 4285736224 4287004543 0 0 4284694079 4287316261 4291129383 4292379927 4292907543 4293237538 4293434920 4293369896 4293303330 4293104407 4292380439 4291130151 4288301098 4284694078 0 0 4285013269 4289947179 4292577049 4293498387 4293959974 4294159159 4294291774 4294357567 4294291256 4294091813 4293695508 4292774682 4290144044 4285013782 0 0 4286197779 4291263275 4293565218 4294486826 4294752322 4294754384 4294624599 4294756183 4294755663 4294753345 4294618155 4293828129 4291395115 4286263315 0 0 4286797373 4291592487 4294093364 4294753602 4294822482 4294825059 4294826346 4294826603 4294825828 4294822740 4294753602 4294225462 4291855399 4286928446 0 0 4287791736 4290870043 4294029633 4294691156 4294826081 4294894447 4294962297 4294963066 4294895474 4294892130 4294691669 4294096449 4291001115 4287857272 0 0 4290558649 4287916079 4292847677 4294431071 4294829938 4294964349 4294965892 4294966661 4294964606 4294896499 4294563169 4292980029 4287981872 4290558648 0 0 4292664540 4288452497 4288312611 4292590416 4294239351 4294636933 4294835601 4294835346 4294637704 4294306681 4293052245 4288576291 4288452497 4292664540 0 0 0 4292993505 4288321426 4287199810 4289700930 4291873639 4293321856 4293387137 4292005738 4290096709 4287463236 4288321426 4292993505 0 0 0 0 0 4292927712 4291282629 4287861124 4287137103 4286939445 4286939701 4287532112 4287926916 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMinimizeOverForm "Answer a new form for a window maximize box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285953140 4282726971 4280619283 4280619283 4282661434 4285953140 4290295992 0 0 0 0 0 0 0 4287400586 4282921779 4284629572 4287526262 4288909456 4288974992 4287591798 4284761414 4282856243 4287400586 0 0 0 0 0 4287334536 4282588703 4286796631 4290682268 4292529868 4293385950 4293385950 4292529612 4290682268 4286731095 4282654242 4287400329 0 0 0 4290164406 4283247407 4286332215 4290281068 4292457116 4293447349 4293579448 4293579447 4293447349 4292457116 4290346605 4286660409 4283771952 4290164406 0 0 4287004286 4284555291 4289551160 4291461439 4292647750 4292978252 4292978510 4292978510 4292912459 4292516422 4291461695 4289485625 4285736224 4287004543 0 0 4284694079 4287316261 4291129383 4288438288 4288833808 4289097752 4289229341 4289164317 4289098008 4288965136 4288438544 4291130151 4288301098 4284694078 0 0 4285013269 4289947179 4288569618 4285154312 4285483537 4285615897 4285616412 4285616669 4285616153 4285549585 4285285641 4288766994 4290144044 4285013782 0 0 4286197779 4291263275 4289294360 4285287186 4285748254 4285420579 4285487142 4285618471 4285618211 4285814302 4285352722 4289491479 4291395115 4286263315 0 0 4286797373 4291592487 4294093364 4290152751 4290220603 4290222407 4290223436 4290223693 4290222920 4290220860 4290152751 4294225462 4291855399 4286928446 0 0 4287791736 4290870043 4294029633 4294691156 4294826081 4294894447 4294962297 4294963066 4294895474 4294892130 4294691669 4294096449 4291001115 4287857272 0 0 4290558649 4287916079 4292847677 4294431071 4294829938 4294964349 4294965892 4294966661 4294964606 4294896499 4294563169 4292980029 4287981872 4290558648 0 0 4292664540 4288452497 4288312611 4292590416 4294239351 4294636933 4294835601 4294835346 4294637704 4294306681 4293052245 4288576291 4288452497 4292664540 0 0 0 4292993505 4288321426 4287199810 4289700930 4291873639 4293321856 4293387137 4292005738 4290096709 4287463236 4288321426 4292993505 0 0 0 0 0 4292927712 4291282629 4287861124 4287137103 4286939445 4286939701 4287532112 4287926916 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! progressBarFillStyleFor: aProgressBar "Return the progress bar fillStyle for the given progress bar." |area c| c := self progressBarColorFor: aProgressBar. area := aProgressBar bounds. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.2->c twiceLighter lighter. 0.3->c twiceLighter lighter. 0.4->c darker. 0.6->c twiceLighter lighter. 1.0->Color white}) origin: area origin; direction: 0@area height; radial: false! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! progressBarProgressFillStyleFor: aProgressBar "Return the progress bar progress fillStyle for the given progress bar." |area c| c := self progressBarProgressColorFor: aProgressBar. area := aProgressBar bounds. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.2->c twiceLighter lighter. 0.3->c twiceLighter lighter. 0.4->c darker. 0.6->c twiceLighter lighter. 1.0->Color white}) origin: area origin; direction: 0@area height; radial: false! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! resizerGripNormalFillStyleFor: aResizer "Return the normal fillStyle for the given resizer. For the moment, answer a transparent colour for no drawing, non transparent to draw as normal." ^Color transparent! ! !UIThemeWatery2 methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarMinimumThumbThickness "Answer the minumum width or height of a scrollbar thumb as appropriate to its orientation." ^15! ! !UIThemeWatery2 methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarNormalButtonBorderStyleFor: aScrollbar "Return the normal button borderStyle for the given scrollbar." ^BorderStyle simple width: 0! ! !UIThemeWatery2 methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarPagingAreaCornerStyleIn: aThemedMorph "Allow for themes to override default behaviour." ^#rounded! ! !UIThemeWatery2 methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarPressedButtonBorderStyleFor: aScrollbar "Return the pressed button borderStyle for the given scrollbar." ^self scrollbarNormalButtonBorderStyleFor: aScrollbar! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! splitterNormalFillStyleFor: aSplitter "Return the normal splitter fillStyle for the given splitter." |aColor| aColor := aSplitter paneColor. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor darker}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! splitterPressedFillStyleFor: aSplitter "Return the pressed splitter fillStyle for the given splitter." |aColor| aColor := aSplitter paneColor duller. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor twiceDarker}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! stripesForm "Answer the form to use for the stripes of various elements." ^self forms at: #stripes ifAbsent: [Form extent: 32@32 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! tabLabelInsetFor: aButton "Answer the inset to use for a tab label." ^8@2 corner: 8@2! ! !UIThemeWatery2 methodsFor: 'basic-colors' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarActiveButtonColorFor: aButton "Answer the colour for the given active taskbar button." ^self settings scrollbarColor alphaMixed: 0.7 with: Color white! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarFillStyleFor: aTaskbar "Return the taskbar fillStyle for the given taskbar." |aColor c cm cd cb| aColor := self settings scrollbarColor alphaMixed: 0.5 with: aTaskbar color. c := aColor alphaMixed: 0.3 with: Color white. cm := aColor alphaMixed: 0.8 with: Color white. cd := aColor alphaMixed: 0.6 with: Color black. cb := aColor alphaMixed: 0.7 with: Color white. ^(GradientFillStyle ramp: {0.0->c. 0.1->cm. 0.9->cd. 1.0->cb}) origin: aTaskbar position; direction: 0@27; radial: false! ! !UIThemeWatery2 methodsFor: 'basic-colors' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarMinimizedButtonColorFor: aButton "Answer the colour for the given minimized taskbar button." ^Color transparent! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! textEditorDisabledFillStyleFor: aTextEditor "Return the disabled fillStyle for the given text editor." ^self windowColor lighter! ! !UIThemeWatery2 methodsFor: 'border-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! textEntryCornerStyleIn: aThemedMorph "Answer the corner style to use for text entry morphs." ^#square! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! textFieldNormalFillStyleFor: aTextField "Return the normal fillStyle for the given text field." |c| c := self windowColor. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.05-> c lighter. 0.15-> Color white. 1.0->Color white}) origin: aTextField topLeft; direction: 0 @ aTextField height; radial: false! ! !UIThemeWatery2 methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! treeLineWidth "Answer the width of the tree lines." ^0! ! !UIThemeWatery2 methodsFor: 'fill-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! useScrollbarThumbShadow "Answer whether a shadow morph should be displayed when dragging a scrollbar thumb." ^false! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowActiveFillStyleFor: aWindow "Return the window active fillStyle for the given window." ^self windowColor! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowCloseOverForm "Answer the form to use for mouse over window close buttons" ^self forms at: #windowCloseOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowClosePassiveForm "Answer the form to use for passive (background) window close buttons" ^self forms at: #windowClosePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMaximizeOverForm "Answer the form to use for mouse over window maximize buttons" ^self forms at: #windowMaximizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMaximizePassiveForm "Answer the form to use for passive (background) window maximize/restore buttons" ^self forms at: #windowMaximizePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuIconFor: aWindow "Answer the menu icon for the given window." ^ self windowMenuForm! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuOverForm "Answer the form to use for mouse over window menu buttons" ^self forms at: #windowMenuOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuPassiveForm "Answer the form to use for inactive window menu buttons" ^self forms at: #windowMenuPassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMinimizeOverForm "Answer the form to use for mouse over window minimize buttons" ^self forms at: #windowMinimizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMinimizePassiveForm "Answer the form to use for passive (background) window minimize buttons" ^self forms at: #windowMinimizePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery2 methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowPaneBorderStyleFor: aMorph in: aSystemWindow "Answer the border style for a morph that is to be added as a pane in the given system window," ^BorderStyle simple color: aSystemWindow paneColor; width: (aMorph borderWidth = 0 ifTrue: [0] ifFalse: [1])! ! !UIThemeWatery2 methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! worldMainDockingBarBorderStyleFor: aDockingBar "Return the world main docking bar borderStyle for the given docking bar." ^BorderStyle simple width: 0; color: Color transparent! ! !UIThemeWatery2 methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! worldMainDockingBarNormalFillStyleFor: aDockingBar "Return the world main docking bar fillStyle for the given docking bar." |aColor| aColor := aDockingBar originalColor alpha: 0.7. ^(GradientFillStyle ramp: { 0.0->(aColor alphaMixed: 0.3 with: (Color white alpha: aColor alpha)). 0.8->aColor darker. 1.0->aColor darker duller}) origin: aDockingBar topLeft; direction: (aDockingBar isVertical ifTrue: [aDockingBar width @ 0] ifFalse: [0 @ aDockingBar height]); radial: false! ! FileContentsBrowser removeSelector: #removeUnmodifiedClasses! FileContentsBrowser removeSelector: #fileIntoNewChangeSet! FileContentsBrowser removeSelector: #fileInPackage! UIThemeWatery removeSelector: #worldMainDockingBarNormalFillStyleFor:! UIThemeWatery removeSelector: #worldMainDockingBarBorderStyleFor:! UIThemeWatery removeSelector: #windowPaneBorderStyleFor:in:! UIThemeWatery removeSelector: #windowMinimizePassiveForm! UIThemeWatery removeSelector: #windowMinimizeOverForm! UIThemeWatery removeSelector: #windowMenuPassiveForm! UIThemeWatery removeSelector: #windowMenuOverForm! UIThemeWatery removeSelector: #windowMenuIconFor:! UIThemeWatery removeSelector: #windowMaximizePassiveForm! UIThemeWatery removeSelector: #windowMaximizeOverForm! UIThemeWatery removeSelector: #windowInactiveTitleFillStyleFor:! UIThemeWatery removeSelector: #windowInactiveFillStyleFor:! UIThemeWatery removeSelector: #windowClosePassiveForm! UIThemeWatery removeSelector: #windowCloseOverForm! UIThemeWatery removeSelector: #windowActiveTitleFillStyleFor:! UIThemeWatery removeSelector: #windowActiveFillStyleFor:! UIThemeWatery removeSelector: #useScrollbarThumbShadow! UIThemeWatery removeSelector: #treeLineWidth! UIThemeWatery removeSelector: #textFieldNormalFillStyleFor:! UIThemeWatery removeSelector: #textEntryCornerStyleIn:! UIThemeWatery removeSelector: #textEditorDisabledFillStyleFor:! UIThemeWatery removeSelector: #taskbarMinimizedButtonColorFor:! UIThemeWatery removeSelector: #taskbarFillStyleFor:! UIThemeWatery removeSelector: #taskbarActiveButtonColorFor:! UIThemeWatery removeSelector: #tabLabelSelectedFillStyleFor:! UIThemeWatery removeSelector: #tabLabelNormalFillStyleFor:! UIThemeWatery removeSelector: #tabLabelInsetFor:! UIThemeWatery removeSelector: #stripesForm! UIThemeWatery removeSelector: #splitterPressedFillStyleFor:! UIThemeWatery removeSelector: #splitterNormalFillStyleFor:! UIThemeWatery removeSelector: #scrollbarThumbCornerStyleIn:! UIThemeWatery removeSelector: #scrollbarPressedButtonBorderStyleFor:! UIThemeWatery removeSelector: #scrollbarPagingAreaCornerStyleIn:! UIThemeWatery removeSelector: #scrollbarNormalThumbFillStyleFor:! UIThemeWatery removeSelector: #scrollbarNormalThumbBorderStyleFor:! UIThemeWatery removeSelector: #scrollbarNormalFillStyleFor:! UIThemeWatery removeSelector: #scrollbarNormalButtonFillStyleFor:! UIThemeWatery removeSelector: #scrollbarNormalButtonBorderStyleFor:! UIThemeWatery removeSelector: #scrollbarMinimumThumbThickness! UIThemeWatery removeSelector: #scrollbarImageColorFor:! UIThemeWatery removeSelector: #resizerGripNormalFillStyleFor:! UIThemeWatery removeSelector: #progressBarProgressFillStyleFor:! UIThemeWatery removeSelector: #progressBarFillStyleFor:! UIThemeWatery removeSelector: #paneColorFor:! UIThemeWatery removeSelector: #newWindowMinimizeOverForm! UIThemeWatery removeSelector: #newWindowMinimizeForm! UIThemeWatery removeSelector: #newWindowMenuPassiveForm! UIThemeWatery removeSelector: #newWindowMenuOverForm! UIThemeWatery removeSelector: #newWindowMenuForm! UIThemeWatery removeSelector: #newWindowMaximizeOverForm! UIThemeWatery removeSelector: #newWindowMaximizeForm! UIThemeWatery removeSelector: #newWindowInactiveControlForm! UIThemeWatery removeSelector: #newWindowCloseOverForm! UIThemeWatery removeSelector: #newWindowCloseForm! UIThemeWatery removeSelector: #newTreeUnexpandedForm! UIThemeWatery removeSelector: #newTreeExpandedForm! UIThemeWatery removeSelector: #newTaskbarThumbnailIn:for:! UIThemeWatery removeSelector: #newStripesForm! UIThemeWatery removeSelector: #newRadioButtonMarkerForm! UIThemeWatery removeSelector: #newFocusIndicatorMorphFor:! UIThemeWatery removeSelector: #newDialogPanelIn:! UIThemeWatery removeSelector: #newCloseControlIn:for:action:help:! UIThemeWatery removeSelector: #newCheckboxMarkerForm! UIThemeWatery removeSelector: #menuItemSelectedFillStyleFor:! UIThemeWatery removeSelector: #menuItemInDockingBarSelectedFillStyleFor:! UIThemeWatery removeSelector: #initializeForms! UIThemeWatery removeSelector: #expanderTitleNormalFillStyleFor:! UIThemeWatery removeSelector: #dropListNormalFillStyleFor:! UIThemeWatery removeSelector: #dropListFocusBoundsFor:! UIThemeWatery removeSelector: #drawTextAdornmentFor:color:on:! UIThemeWatery removeSelector: #dockingBarNormalFillStyleFor:! UIThemeWatery removeSelector: #dialogWindowInactiveFillStyleFor:! UIThemeWatery removeSelector: #dialogWindowActiveFillStyleFor:! UIThemeWatery removeSelector: #createMenuBoxFor:! UIThemeWatery removeSelector: #createExpandBoxFor:! UIThemeWatery removeSelector: #createCollapseBoxFor:! UIThemeWatery removeSelector: #controlButtonPressedFillStyleFor:! UIThemeWatery removeSelector: #controlButtonNormalFillStyleFor:! UIThemeWatery removeSelector: #controlButtonMouseOverFillStyleFor:! UIThemeWatery removeSelector: #configureWindowLabelAreaFor:! UIThemeWatery removeSelector: #configureWindowBorderFor:! UIThemeWatery removeSelector: #checkboxButtonSelectedFillStyleFor:! UIThemeWatery removeSelector: #checkboxButtonSelectedBorderStyleFor:! UIThemeWatery removeSelector: #checkboxButtonNormalFillStyleFor:! UIThemeWatery removeSelector: #checkboxButtonNormalBorderStyleFor:! UIThemeWatery removeSelector: #buttonSelectedPressedFillStyleFor:! UIThemeWatery removeSelector: #buttonSelectedFillStyleFor:! UIThemeWatery removeSelector: #buttonPressedFillStyleFor:! UIThemeWatery removeSelector: #buttonPanelNormalFillStyleFor:! UIThemeWatery removeSelector: #buttonNormalFillStyleFor:! UIThemeWatery removeSelector: #buttonNormalBorderStyleFor:! UIThemeWatery removeSelector: #buttonLabelForText:! UIThemeWatery removeSelector: #buttonFocusBoundsFor:! UIThemeWatery removeSelector: #buttonCornerStyleIn:! UIThemeWatery class removeSelector: #themeName! UIThemeWatery class removeSelector: #newDefaultSettings! UIThemeWatery class removeSelector: #isAbstract! Smalltalk globals removeClassNamed: #UIThemeWatery! Browser removeSelector: #openMessageEditString:! Browser removeSelector: #openAsMorphMessageEditing:! Browser removeSelector: #messageListSingleton! Browser class removeSelector: #newOnCategory:! Browser class removeSelector: #addGroupForPackage:! Browser class removeSelector: #addGroupForClasses:named:! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(22 July 2013 2:12:05 pm) Pharo.image priorSource: 12094291! ----STARTUP----an Array(22 July 2013 2:27:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 July 2013 2:27:34 pm) Pharo-30291.image priorSource: 12176575! ----STARTUP----an Array(22 July 2013 3:05:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/22/2013 14:57' prior: 45649023! commentForCurrentUpdate ^ '11211 clean up Watery2 theme https://pharo.fogbugz.com/f/cases/11211 11206 clean up externalInterrupt in old Debugger https://pharo.fogbugz.com/f/cases/11206'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/22/2013 14:57'! script127 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.92.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.865.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.46.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.214.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1190.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/22/2013 14:57'! update30292 "self new update30292" self withUpdateLog: '11211 clean up Watery2 theme https://pharo.fogbugz.com/f/cases/11211 11206 clean up externalInterrupt in old Debugger https://pharo.fogbugz.com/f/cases/11206'. self loadTogether: self script127 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30290! ScriptLoader removeSelector: #update30289! ScriptLoader removeSelector: #update30288! ScriptLoader removeSelector: #update30287! ScriptLoader removeSelector: #update30286! ScriptLoader removeSelector: #update30285! ScriptLoader removeSelector: #update30284! ScriptLoader removeSelector: #update30283! ScriptLoader removeSelector: #update30282! ScriptLoader removeSelector: #update30281! ScriptLoader removeSelector: #update30280! ScriptLoader removeSelector: #update30279! ScriptLoader removeSelector: #update30278! ScriptLoader removeSelector: #update30277! ScriptLoader removeSelector: #update30276! ScriptLoader removeSelector: #update30275! ScriptLoader removeSelector: #update30274! ScriptLoader removeSelector: #update30273! ScriptLoader removeSelector: #update30272! ScriptLoader removeSelector: #update30271! ScriptLoader removeSelector: #update30270! ScriptLoader removeSelector: #update30269! ScriptLoader removeSelector: #update30268! ScriptLoader removeSelector: #update30267! ScriptLoader removeSelector: #update30266! ScriptLoader removeSelector: #update30265! ScriptLoader removeSelector: #update30264! ScriptLoader removeSelector: #update30263! ScriptLoader removeSelector: #update30262! ScriptLoader removeSelector: #script126! ScriptLoader removeSelector: #script125! ScriptLoader removeSelector: #script124! ScriptLoader removeSelector: #script123! ScriptLoader removeSelector: #script122! ScriptLoader removeSelector: #script121! ScriptLoader removeSelector: #script120! ScriptLoader removeSelector: #script119! ScriptLoader removeSelector: #script118! ScriptLoader removeSelector: #script117! ScriptLoader removeSelector: #script116! ScriptLoader removeSelector: #script115! ScriptLoader removeSelector: #script114! ScriptLoader removeSelector: #script113! ScriptLoader removeSelector: #script112! ScriptLoader removeSelector: #script111! ScriptLoader removeSelector: #script110! ScriptLoader removeSelector: #script109! ScriptLoader removeSelector: #script108! ScriptLoader removeSelector: #script107! ScriptLoader removeSelector: #script106! ScriptLoader removeSelector: #script105! ScriptLoader removeSelector: #script104! ScriptLoader removeSelector: #script103! ScriptLoader removeSelector: #script102! ScriptLoader removeSelector: #script101! ScriptLoader removeSelector: #script100! "ScriptLoader30"! !PharoTheme commentStamp: '' prior: 42537390! self defaultSettings: nil. self beCurrent. ! !PharoTheme commentStamp: '' prior: 45744447! self defaultSettings: nil. self beCurrent. ! !UIThemeWatery class methodsFor: 'accessing' stamp: 'MarcusDenker 9/27/2010 15:32'! newDefaultSettings "Answer a new original default settings." "self defaultSettings: nil" ^super newDefaultSettings windowColor: (Color r: 170 g: 170 b: 170 range: 255); menuColor: (Color r: 200 g: 200 b: 200 range: 255); menuTitleColor: (Color r: 190 g: 190 b: 190 range: 255); yourself! ! !UIThemeWatery class methodsFor: 'accessing' stamp: 'MarcusDenker 7/22/2013 14:43'! themeName "Answer the friendly name of the theme." ^'Watery'! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 2/3/2009 14:28'! baseScrollbarColorFor: aScrollbar "Return the scrollbar last pane colour or that of our settings if unavailable" ^(aScrollbar valueOfProperty: #lastPaneColor) ifNil: [self settings scrollbarColor]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 13:59'! buttonBottomLeftForm "Answer the form to use for the bottom left of a button." ^self forms at: #buttonBottomLeft ifAbsent: [Form extent: 11@11 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonBottomMiddleForm "Answer the form to use for the bottom middle of a button." ^self forms at: #buttonBottomMiddle ifAbsent: [Form extent: 1@11 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonBottomRightForm "Answer the form to use for the bottom right of a button." ^self forms at: #buttonBottomRight ifAbsent: [Form extent: 11@11 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/16/2011 16:36'! buttonColouredFillStyleFor: aButton "Return the coloured button fillStyle for the given button." |round roundCorners tl t tr l m r bl b br| round := aButton wantsRoundedCorners. roundCorners := aButton roundedCorners. tl := (round and: [roundCorners includes: 1]) ifTrue: [self buttonSelectedTopLeftForm] ifFalse: [self buttonSquareSelectedTopLeftForm]. t := self buttonSelectedTopMiddleForm. tr:= (round and: [roundCorners includes: 4]) ifTrue: [self buttonSelectedTopRightForm] ifFalse: [self buttonSquareSelectedTopRightForm]. l := self buttonSelectedMiddleLeftForm. m := self buttonColouredMiddleColor. r := self buttonSelectedMiddleRightForm. bl := (round and: [roundCorners includes: 2]) ifTrue: [self buttonSelectedBottomLeftForm] ifFalse: [self buttonSquareSelectedBottomLeftForm]. b := self buttonSelectedBottomMiddleForm. br := (round and: [roundCorners includes: 3]) ifTrue: [self buttonSelectedBottomRightForm] ifFalse: [self buttonSquareSelectedBottomRightForm]. ^self multiFormFillStyleFrom: {tl. t. tr. l. m. r. bl. b. br} in: aButton bounds! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/16/2011 16:35'! buttonColouredMiddleColor "Return the middle area colour for a coloured button fillStyle." ^Color r: 102 g: 127 b: 168 range: 255! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonCornerStyleIn: aThemedMorph "Allow for themes to override default behaviour." ^aThemedMorph ifNil: [#rounded] ifNotNil: [:tm | tm preferredButtonCornerStyle ifNil: [#rounded] ifNotNil: [:bcs | bcs]]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonFocusBoundsFor: aButton "Answer the bounds for drawing the focus indication for the given button." ^aButton bounds! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 1/9/2009 17:52'! buttonFocusIndicatorCornerRadiusFor: aButton "Answer the default corner radius preferred for the focus indicator for the button for themes that support this." ^aButton wantsRoundedCorners ifTrue: [7] ifFalse: [2]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonLabelForText: aTextOrString "Answer the label to use for the given text." ^aTextOrString isString ifTrue: [(FuzzyLabelMorph contents: aTextOrString) alpha: 0.3] ifFalse: [super buttonLabelForText: aTextOrString]! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 2/19/2009 11:34'! buttonLabelInsetFor: aButton "Answer the inset to use for a button's label." |left right| ^aButton wantsRoundedCorners ifTrue: [left := ((aButton roundedCorners includesAnyOf: #(1 2)) ifTrue: [8] ifFalse: [4]). right := ((aButton roundedCorners includesAnyOf: #(3 4)) ifTrue: [8] ifFalse: [4]). left@2 corner: right@2] ifFalse: [3@2]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonMiddleLeftForm "Answer the form to use for the middle left of a button." ^self forms at: #buttonMiddleLeft ifAbsent: [Form extent: 11@1 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonMiddleRightForm "Answer the form to use for the middle right of a button." ^self forms at: #buttonMiddleRight ifAbsent: [Form extent: 11@1 depth: Display depth]! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 12/3/2008 17:23'! buttonMinHeight "Answer the minumum height of a button for this theme." ^24! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 1/23/2009 12:23'! buttonMinWidth "Answer the minumum width of a button for this theme." ^24! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 12/5/2008 14:33'! buttonNormalBorderStyleFor: aButton "Return the normal button borderStyle for the given button." ^BorderStyle simple width: 0; baseColor: Color transparent! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 8/17/2010 14:08'! buttonNormalFillStyleFor: aButton "Return the normal button fillStyle for the given button." ^aButton isDefault ifTrue: [self buttonColouredFillStyleFor: aButton] ifFalse: [self buttonPlainFillStyleFor: aButton]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/16/2011 16:36'! buttonPlainFillStyleFor: aButton "Return the plain button fillStyle for the given button." |round roundCorners tl t tr l m r bl b br| round := aButton wantsRoundedCorners. roundCorners := aButton roundedCorners. tl := (round and: [roundCorners includes: 1]) ifTrue: [self buttonTopLeftForm] ifFalse: [self buttonSquareTopLeftForm]. t := self buttonTopMiddleForm. tr:= (round and: [roundCorners includes: 4]) ifTrue: [self buttonTopRightForm] ifFalse: [self buttonSquareTopRightForm]. l := self buttonMiddleLeftForm. m := self buttonPlainMiddleColor. r := self buttonMiddleRightForm. bl := (round and: [roundCorners includes: 2]) ifTrue: [self buttonBottomLeftForm] ifFalse: [self buttonSquareBottomLeftForm]. b := self buttonBottomMiddleForm. br := (round and: [roundCorners includes: 3]) ifTrue: [self buttonBottomRightForm] ifFalse: [self buttonSquareBottomRightForm]. ^self multiFormFillStyleFrom: {tl. t. tr. l. m. r. bl. b. br} in: aButton bounds! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/16/2011 16:36'! buttonPlainMiddleColor "Return the middle area colour for a plain button fillStyle." ^Color r: 211 g: 211 b: 211 range: 255! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonPressedFillStyleFor: aButton "Return the button pressed fillStyle for the given button." ^self buttonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedBottomLeftForm "Answer the form to use for the bottom left of a selected button." ^self forms at: #buttonSelectedBottomLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedBottomMiddleForm "Answer the form to use for the bottom middle of a selected button." ^self forms at: #buttonSelectedBottomMiddle ifAbsent: [Form extent: 1@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedBottomRightForm "Answer the form to use for the bottom right of a selected button." ^self forms at: #buttonSelectedBottomRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 8/17/2010 14:08'! buttonSelectedFillStyleFor: aButton "Return the selected button fillStyle for the given button." ^aButton isDefault ifTrue: [self buttonPlainFillStyleFor: aButton] ifFalse: [self buttonColouredFillStyleFor: aButton]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedMiddleLeftForm "Answer the form to use for the middle left of a selected button." ^self forms at: #buttonSelectedMiddleLeft ifAbsent: [Form extent: 12@1 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedMiddleRightForm "Answer the form to use for the middle right of a selected button." ^self forms at: #buttonSelectedMiddleRight ifAbsent: [Form extent: 12@1 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! buttonSelectedPressedFillStyleFor: aButton "Return the button selected pressed fillStyle for the given color." ^self buttonNormalFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:30'! buttonSelectedTopLeftForm "Answer the form to use for the top left of a selected button." ^self forms at: #buttonSelectedTopLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 12:41'! buttonSelectedTopMiddleForm "Answer the form to use for the top middle of a selected button." ^self forms at: #buttonSelectedTopMiddle ifAbsent: [Form extent: 1@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:31'! buttonSelectedTopRightForm "Answer the form to use for the top right of a selected button." ^self forms at: #buttonSelectedTopRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 15:22'! buttonSquareBottomLeftForm "Answer the form to use for the bottom left of a square button." ^self forms at: #buttonSquareBottomLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 15:23'! buttonSquareBottomRightForm "Answer the form to use for the bottom right of a square button." ^self forms at: #buttonSquareBottomRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:37'! buttonSquareSelectedBottomLeftForm "Answer the form to use for the bottom left of a selected square button." ^self forms at: #buttonSquareSelectedBottomLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:38'! buttonSquareSelectedBottomRightForm "Answer the form to use for the bottom right of a selected square button." ^self forms at: #buttonSquareSelectedBottomRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:38'! buttonSquareSelectedTopLeftForm "Answer the form to use for the top left of a selected square button." ^self forms at: #buttonSquareSelectedTopLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 14:38'! buttonSquareSelectedTopRightForm "Answer the form to use for the top right of a selected square button." ^self forms at: #buttonSquareSelectedTopRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 15:24'! buttonSquareTopLeftForm "Answer the form to use for the top left of a square button." ^self forms at: #buttonSquareTopLeft ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 1/22/2009 15:24'! buttonSquareTopRightForm "Answer the form to use for the top right of a square button." ^self forms at: #buttonSquareTopRight ifAbsent: [Form extent: 12@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonTopLeftForm "Answer the form to use for the top left of a button." ^self forms at: #buttonTopLeft ifAbsent: [Form extent: 11@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:00'! buttonTopMiddleForm "Answer the form to use for the top middle of a button." ^self forms at: #buttonTopMiddle ifAbsent: [Form extent: 1@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 14:01'! buttonTopRightForm "Answer the form to use for the top right of a button." ^self forms at: #buttonTopRight ifAbsent: [Form extent: 11@12 depth: Display depth]! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 12/9/2008 13:06'! checkboxButtonDisabledBorderStyleFor: aCheckboxButton "Return the disabled checkbox button borderStyle for the given button." ^self checkboxButtonNormalBorderStyleFor: aCheckboxButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/9/2008 13:08'! checkboxButtonDisabledFillStyleFor: aCheckboxButton "Return the disabled checkbox button fillStyle for the given button." ^self checkboxButtonNormalFillStyleFor: aCheckboxButton! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 12/9/2008 12:46'! checkboxButtonNormalBorderStyleFor: aChecboxButton "Return the normal checkbox button borderStyle for the given button." ^BorderStyle simple width: 1; baseColor: Color transparent! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/9/2008 12:45'! checkboxButtonNormalFillStyleFor: aCheckboxButton "Return the normal checkbox button fillStyle for the given checkbox button." ^(ImageFillStyle form: self checkboxForm) origin: aCheckboxButton topLeft! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 12/9/2008 13:06'! checkboxButtonSelectedBorderStyleFor: aCheckboxButton "Return the selected checkbox button borderStyle for the given button." ^self checkboxButtonNormalBorderStyleFor: aCheckboxButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/9/2008 12:45'! checkboxButtonSelectedFillStyleFor: aCheckboxButton "Return the selected checkbox button fillStyle for the given checkbox button." ^(ImageFillStyle form: self checkboxSelectedForm) origin: aCheckboxButton topLeft! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/9/2008 12:43'! checkboxForm "Answer the form to use for a normal checkbox." ^self forms at: #checkbox ifAbsent: [Form extent: 14@14 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/9/2008 12:43'! checkboxSelectedForm "Answer the form to use for a selected checkbox." ^self forms at: #checkboxSelected ifAbsent: [Form extent: 14@14 depth: Display depth]! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! configureWindowBorderFor: aWindow "Configure the border for the given window." super configureWindowBorderFor: aWindow. aWindow roundedCorners: #(1 4) "just top"! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! configureWindowLabelAreaFor: aWindow "Configure the label area for the given window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow hasMenuBox ifTrue: [aWindow addMenuControl]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 8/17/2010 14:38'! controlButtonDisabledFillStyleFor: aButton "Return the disabled control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 12/5/2008 14:58'! controlButtonLabelInsetFor: aButton "Answer the inset to use for a control button's label." ^2! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! controlButtonMouseOverFillStyleFor: aButton "Return the mouse over control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonNormalFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/20/2010 12:02'! controlButtonNormalFillStyleFor: aButton "Return the normal control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self buttonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/28/2009 17:55'! controlButtonPressedFillStyleFor: aButton "Return the pressed button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/28/2009 17:53'! controlButtonSelectedDisabledFillStyleFor: aButton "Return the selected disabled control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/20/2010 12:02'! controlButtonSelectedFillStyleFor: aButton "Return the selected control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self buttonNormalFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/28/2009 17:54'! controlButtonSelectedMouseOverFillStyleFor: aButton "Return the selected mouse over control button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonSelectedFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 1/20/2010 12:02'! controlButtonSelectedPressedFillStyleFor: aButton "Return the selected pressed button fillStyle for the given button. Control buttons are generally used for drop-lists and expanders." ^self controlButtonNormalFillStyleFor: aButton! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createCollapseBoxFor: aSystemWindow "Answer a button for minimising the window." |form msb| form := self windowMinimizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow collapseBoxHit]; setBalloonText: 'Collapse this window' translated; extent: aSystemWindow boxExtent. ^msb! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createExpandBoxFor: aSystemWindow "Answer a button for maximising/restoring the window." |form msb| form := self windowMaximizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow expandBoxHit]; setBalloonText: 'Expand to full screen' translated; extent: aSystemWindow boxExtent. ^msb! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! createMenuBoxFor: aSystemWindow "Answer a button for the window menu." |form msb| form := self windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow offerWindowMenu]; setBalloonText: 'Window menu' translated; extent: form extent. ^msb! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/9/2008 17:25'! dialogWindowActiveFillStyleFor: aWindow "Return the window active fillStyle for the given window." ^self windowActiveFillStyleFor: aWindow! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/9/2008 17:25'! dialogWindowInactiveFillStyleFor: aWindow "Return the window active fillStyle for the given window." ^self windowInactiveFillStyleFor: aWindow! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/9/2008 13:26'! dockingBarNormalFillStyleFor: aToolDockingBar "Return the normal docking bar fillStyle for the given color." ^aToolDockingBar paneColor! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! drawTextAdornmentFor: aPluggableTextMorph color: aColor on: aCanvas "Indicate edit status for the given morph." |bounds size fillStyle| bounds := aPluggableTextMorph innerBounds. size := 25. fillStyle := (GradientFillStyle ramp: { 0.0->(Color white alpha: 0.01). 0.8->aColor. 1.0->aColor}) origin: bounds topRight - (size@0); direction: (size @ size negated) // 4; radial: false. aCanvas drawPolygon: {bounds topRight. bounds topRight + (0@size). bounds topRight - (size@0)} fillStyle: fillStyle! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 1/28/2009 17:09'! dropListControlButtonWidth "Answer the width of a drop list control button for this theme." ^20! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'GaryChambers 8/17/2010 14:37'! dropListDisabledFillStyleFor: aDropList "Return the disabled fillStyle for the given drop list." ^self dropListNormalFillStyleFor: aDropList! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! dropListFocusBoundsFor: aDropList "Answer the bounds for drawing the focus indication for the given drop list." ^aDropList bounds! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'GaryChambers 8/18/2010 17:16'! dropListFocusIndicatorCornerRadiusFor: aDropList "Answer the default corner radius preferred for the focus indicator for the drop list for themes that support this." ^aDropList wantsRoundedCorners ifTrue: [7] ifFalse: [2]! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'GaryChambers 8/18/2010 17:36'! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^6 @ 0 corner: 0 @ 0! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'GaryChambers 8/18/2010 17:14'! dropListNormalBorderStyleFor: aDropList "Return the normal borderStyle for the given drop list" ^BorderStyle simple width: 0; baseColor: Color transparent! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'GaryChambers 11/16/2011 17:17'! dropListNormalFillStyleFor: aDropList "Return the normal fillStyle for the given drop list." |round roundCorners tl t tr l m r bl b br| round := aDropList wantsRoundedCorners. roundCorners := aDropList roundedCorners. tl := (round and: [roundCorners includes: 1]) ifTrue: [self buttonTopLeftForm] ifFalse: [self buttonSquareTopLeftForm]. t := self buttonTopMiddleForm. tr:= (round and: [roundCorners includes: 4]) ifTrue: [self buttonTopRightForm] ifFalse: [self buttonSquareTopRightForm]. l := self buttonMiddleLeftForm. m := self buttonPlainMiddleColor. r := self buttonMiddleRightForm. bl := (round and: [roundCorners includes: 2]) ifTrue: [self buttonBottomLeftForm] ifFalse: [self buttonSquareBottomLeftForm]. b := self buttonBottomMiddleForm. br := (round and: [roundCorners includes: 3]) ifTrue: [self buttonBottomRightForm] ifFalse: [self buttonSquareBottomRightForm]. ^self multiFormFillStyleFrom: {tl. t. tr. l. m. r. bl. b. br} in: aDropList bounds! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'GaryChambers 8/18/2010 17:32'! editableDropListMargins "Answer the text margins for an editable drop list for this theme." ^0 @ 3 corner: 2 @ 1! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 1/28/2009 17:11'! expanderTitleControlButtonWidth "Answer the width of an expander title control button for this theme." ^20! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 1/23/2009 12:35'! expanderTitleInsetFor: aDropList "Answer the inset to use for expander title layout." ^0! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! expanderTitleNormalFillStyleFor: anExpanderTitle "Return the normal expander title fillStyle for the given expander title." |aColor| aColor := anExpanderTitle paneColor. ^(GradientFillStyle ramp: { 0.0->Color white. 0.05-> aColor lighter. 1.0->aColor darker}) origin: anExpanderTitle topLeft; direction: 0 @ anExpanderTitle height; radial: false! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 2/16/2009 17:22'! initialize "Initialize the receiver." super initialize. self windowActiveDropShadowStyle: #diffuse! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:22'! initializeForms "Initialize the receiver's image forms." super initializeForms. self forms at: #sbHThumbLeft put: self newScrollbarThumbLeftForm; at: #sbHThumbMiddle put: self newScrollbarThumbHorizontalMiddleForm; at: #sbHThumbRight put: self newScrollbarThumbRightForm; at: #sbVThumbTop put: self newScrollbarThumbTopForm; at: #sbVThumbMiddle put: self newScrollbarThumbVerticalMiddleForm; at: #sbVThumbBottom put: self newScrollbarThumbBottomForm; at: #buttonTopLeft put: self newButtonTopLeftForm; at: #buttonTopMiddle put: self newButtonTopMiddleForm; at: #buttonTopRight put: self newButtonTopRightForm; at: #buttonMiddleLeft put: self newButtonMiddleLeftForm; at: #buttonMiddleRight put: self newButtonMiddleRightForm; at: #buttonBottomLeft put: self newButtonBottomLeftForm; at: #buttonBottomMiddle put: self newButtonBottomMiddleForm; at: #buttonBottomRight put: self newButtonBottomRightForm; at: #buttonSquareTopLeft put: self newButtonSquareTopLeftForm; at: #buttonSquareTopRight put: self newButtonSquareTopRightForm; at: #buttonSquareBottomLeft put: self newButtonSquareBottomLeftForm; at: #buttonSquareBottomRight put: self newButtonSquareBottomRightForm; at: #buttonSelectedTopLeft put: self newButtonSelectedTopLeftForm; at: #buttonSelectedTopMiddle put: self newButtonSelectedTopMiddleForm; at: #buttonSelectedTopRight put: self newButtonSelectedTopRightForm; at: #buttonSelectedMiddleLeft put: self newButtonSelectedMiddleLeftForm; at: #buttonSelectedMiddleRight put: self newButtonSelectedMiddleRightForm; at: #buttonSelectedBottomLeft put: self newButtonSelectedBottomLeftForm; at: #buttonSelectedBottomMiddle put: self newButtonSelectedBottomMiddleForm; at: #buttonSelectedBottomRight put: self newButtonSelectedBottomRightForm; at: #buttonSquareSelectedTopLeft put: self newButtonSquareSelectedTopLeftForm; at: #buttonSquareSelectedTopRight put: self newButtonSquareSelectedTopRightForm; at: #buttonSquareSelectedBottomLeft put: self newButtonSquareSelectedBottomLeftForm; at: #buttonSquareSelectedBottomRight put: self newButtonSquareSelectedBottomRightForm; at: #radioButton put: self newRadioButtonForm; at: #radioButtonSelected put: self newRadioButtonSelectedForm; at: #checkbox put: self newCheckboxForm; at: #checkboxSelected put: self newCheckboxSelectedForm! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'gvc 12/9/2008 12:08'! listNormalBorderStyleFor: aList "Return the normal borderStyle for the given list" ^BorderStyle simple width: 1; baseColor: aList paneColor! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! menuItemInDockingBarSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item that is in a docking bar." | fill baseColor | Display depth <= 2 ifTrue: [^ Color gray]. baseColor := self settings derivedMenuColor. self preferGradientFill ifFalse: [^baseColor]. fill := GradientFillStyle ramp: {0.0 -> baseColor twiceDarker . 1 -> baseColor twiceLighter}. fill origin: aMenuItem topLeft; direction: 0@aMenuItem height. ^ fill! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! menuItemSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item." | fill baseColor preferenced | Display depth <= 2 ifTrue: [^ Color gray]. preferenced := self settings menuSelectionColor. baseColor := preferenced isNil ifTrue: [aMenuItem owner color negated] ifFalse: [preferenced]. self preferGradientFill ifFalse: [^baseColor]. fill := GradientFillStyle ramp: {0.0 -> baseColor twiceLighter . 1 -> baseColor twiceDarker}. fill origin: aMenuItem topLeft; direction: 0@aMenuItem height. ^ fill! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:17'! newButtonBottomLeftForm "Answer the form for the bottom left of a button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3716317826 4291743438 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 2842718320 4290953922 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 1784635231 4255886251 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 978802519 4170157967 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 374427985 3815599469 4291611852 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 41975936 1699499084 4168973693 4293190884 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 0 154745145 2891010385 4271873951 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 0 16777216 675299392 3764280926 4290098613 4293980400 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 0 0 33554432 1295332661 3595850836 4253583496 4292993505 4294309365 4294309365 4294309365 4294309365 4294309365 0 0 0 33554432 640626479 2688433726 4083574374 4289835441 4293125091 4294506744 4294572537 4294572537 0 0 0 0 16777216 138428480 1546267178 3510780482 3981989976 4184895600 4270360712 4288651167 0 0 0 0 0 0 33554432 338044454 941629472 1511989023 2268016431 3124575549) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:17'! newButtonBottomMiddleForm "Answer the form for the bottom middle of a button." ^(Form extent: 1@12 depth: 32 fromArray: #( 4292072403 4292401368 4292664540 4292927712 4293190884 4293454056 4293717228 4294046193 4294309365 4294572537 4289506476 3443342653) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:18'! newButtonBottomRightForm "Answer the form for the bottom right of a button." ^(Form extent: 12@12 depth: 32 fromArray: #( 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4291282887 3548216701 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4290230199 2607574124 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4238187933 1616731485 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4119365768 962156889 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4290756543 3697895785 374427985 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4292730333 4118378873 1666010445 41975936 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4254175633 2790215503 154745145 0 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4293848814 4289177511 3663288665 675299392 16777216 0 4294309365 4294309365 4294309365 4294309365 4294309365 4292467161 4253188738 3545453395 1295332661 33554432 0 0 4294572537 4294572537 4294440951 4292861919 4289309097 4066797158 2655010880 640626479 33554432 0 0 0 4288519581 4270294919 4168052591 3965081174 3477291843 1546267178 138428480 16777216 0 0 0 0 3107864126 2268016431 1511989023 941629472 338044454 33554432 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:18'! newButtonMiddleLeftForm "Answer the form for the middle left of a button." ^(Form extent: 12@1 depth: 32 fromArray: #( 3968305031 4292138196 4292138196 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:18'! newButtonMiddleRightForm "Answer the form for the middle right of a button." ^(Form extent: 12@1 depth: 32 fromArray: #( 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 3934750599) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:28'! newButtonSelectedBottomLeftForm "Answer the form for the bottom left of a selected button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3713688967 4284841382 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 2840812155 4284841122 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 1783452780 4251022487 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 977750885 4166608772 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 373704285 3813365101 4285499564 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 33554560 1698382676 4166082166 4286224317 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 0 154745173 2889761365 4267668108 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 0 16777216 674444102 3762375258 4285103772 4286948554 4286948554 4286948554 4286948554 4286948554 4286948554 4286948554 0 0 33554432 1294675516 3594273360 4250231929 4286619071 4287277775 4287277775 4287277775 4287277775 4287277775 0 0 0 33554432 640165935 2687513663 4081274461 4285169818 4286882243 4287606740 4287606740 4287606740 0 0 0 0 16777216 134234176 1545872426 3509597758 3980150095 4182267235 4267009399 4284642698 0 0 0 0 0 0 33554432 338044454 941629472 1511791647 2267424813 3123524408) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:28'! newButtonSelectedBottomMiddleForm "Answer the form for the bottom middle of a selected button." ^(Form extent: 1@12 depth: 32 fromArray: #( 4284907432 4285171117 4285500082 4285763767 4286092732 4286356417 4286685381 4286948810 4287278031 4287606996 4285038229 3442226232) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:28'! newButtonSelectedBottomRightForm "Answer the form for the bottom right of a selected button." ^(Form extent: 12@12 depth: 32 fromArray: #( 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284775331 3545850757 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4285170861 4284643228 2605931385 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4285499826 4233915791 1615745901 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4116079488 961039463 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4286092476 4285169827 3695858538 373704285 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286092472 4115618674 1664828245 33554560 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 4286685125 4250495363 2789098069 154745173 0 4286948554 4286948554 4286948554 4286948554 4286948554 4286948554 4286882504 4284642962 3661580376 674444102 16777216 0 4287277775 4287277775 4287277775 4287277775 4287277775 4286421177 4250034292 3543876175 1294675516 33554432 0 0 4287606740 4287606740 4287540947 4286750399 4284906131 4064496988 2654025280 640165935 33554432 0 0 0 4284445576 4266943863 4165424226 3963307086 3476109119 1545872426 134234176 16777216 0 0 0 0 3106812728 2267424813 1511791647 941629472 338044454 33554432 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:28'! newButtonSelectedMiddleLeftForm "Answer the form for the middle left of a selected button." ^(Form extent: 12@1 depth: 32 fromArray: #( 3965347464 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:28'! newButtonSelectedMiddleRightForm "Answer the form for the middle right of a selected button." ^(Form extent: 12@1 depth: 32 fromArray: #( 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 3931727240) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:29'! newButtonSelectedTopLeftForm "Answer the form for the top left of a selected button." ^(Form extent: 12@12 depth: 32 fromArray: #( 0 0 0 0 0 0 33554431 362719975 1268031205 2541850575 3279521477 3765271736 0 0 0 0 0 111848191 2407633100 4049957547 4266548622 4284838039 4287271854 4290099916 0 0 0 16777471 814060743 3581116602 4266877583 4288982209 4292730856 4292994026 4292994026 4292994026 0 0 16777471 1903987394 4099960739 4285430685 4291349978 4292270819 4292270819 4292270819 4292270819 4292270819 0 0 713067455 4083709352 4288259003 4291547356 4291547356 4291547356 4291547356 4291547356 4291547356 4291547356 0 75464703 3580787373 4287535542 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 33554431 2389802158 4251744930 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 258373546 4016337568 4286878386 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 1097823911 4200558234 4287207349 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 2070376603 4284182168 4286155693 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 3160435603 4284314525 4284577696 4287668413 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 3780930190 4284578211 4284578211 4285301417 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:29'! newButtonSelectedTopMiddleForm "Answer the form for the top middle of a selected button." ^(Form extent: 1@12 depth: 32 fromArray: #( 3966269361 4291941599 4292994026 4292205027 4291547356 4290889943 4290297809 4289640652 4289114568 4288588740 4288128705 4286353587) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:29'! newButtonSelectedTopRightForm "Answer the form for the top right of a selected button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3748625849 3262810310 2441121744 1184342758 295085538 33554431 0 0 0 0 0 0 4290099916 4287271854 4284904087 4266680208 4016534958 2156237519 75464703 0 0 0 0 0 4292994026 4292994026 4292994026 4292730856 4288981953 4250297491 3463873727 646616786 16777471 0 0 0 4292270819 4292270819 4292270819 4292270819 4292270819 4291284185 4285233565 4066800809 1551994565 16777471 0 0 4291547356 4291547356 4291547356 4291547356 4291547356 4291547356 4291547356 4287929784 4016798124 545033153 0 0 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4287009457 3379658160 61516543 0 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290297809 4290166480 4234639009 2003992240 33554431 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4286286508 3949425826 258373546 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4286747057 4167135387 896300710 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4288654276 4285760937 4250693017 1785229980 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4287471035 4284446367 4284314268 2841668498 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4285038503 4284578211 4284578211 3663554701) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:19'! newButtonSquareBottomLeftForm "Answer the form for the bottom left of a square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3968305031 4292138196 4292138196 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 3967976066 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 3967778687 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 3967449722 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 3967252343 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 3966923378 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 3966660206 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293717228 4293717228 4293717228 3966397034 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 3966133862 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 3830929239 4293783021 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 2502963248 4252596601 4289309097 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 622599196 2352034097 3409854014 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:20'! newButtonSquareBottomRightForm "Answer the form for the bottom right of a square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 4292072403 3934750599 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292401368 4292335575 3934421634 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 3934158462 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 3933895290 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 3933632118 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 4293454056 3933368946 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 3933039981 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 4294046193 3932776809 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 3932447844 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4294572537 4293388263 3780400212 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289506476 4289243304 4235556213 2452565807 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3443342653 3393076798 2352034097 622599196) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:35'! newButtonSquareSelectedBottomLeftForm "Answer the form for the bottom left of a selected square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3965347464 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 3965215874 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 3964952703 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 3964821113 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 4285763767 3964623476 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 3964426350 4286421953 4286421953 4286421953 4286421953 4286356417 4286356417 4286356417 4286356417 4286356417 4286356417 4286356417 3964294248 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685381 4286685381 4286685381 3964097124 4287014602 4287014602 4287014602 4287014346 4287014346 4287014346 4287014346 4287014346 4287014346 4287014346 4287014346 3963833950 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 3829154896 4287211978 4287607252 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 2502502958 4249705579 4284972435 4285038229 4285038229 4285038229 4285038229 4285038229 4285038229 4285038229 4285038229 4285038229 622599196 2351311407 3408802615 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:35'! newButtonSquareSelectedBottomRightForm "Answer the form for the bottom right of a selected square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 4284907432 3931727240 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285171117 4285170861 3931595651 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 3931464061 4285763767 4285763767 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 4285763511 3931200888 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 3931003251 4286356417 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 4286356160 3930871661 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 4286685381 3930674280 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 4286948810 3930476899 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 3930345054 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 4287606996 4287541460 4287541460 4287541460 4286948549 3778691918 4285038229 4285038229 4285038229 4285038485 4285038485 4285038485 4285038485 4285038485 4285038485 4284841105 4232796519 2452040237 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3442226232 3392025400 2351311407 622599196) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:36'! newButtonSquareSelectedTopLeftForm "Answer the form for the top left of a selected square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 630892779 3329853638 3949492146 3966269361 3966269361 3966269361 3966269361 3966269361 3966269361 3966269361 3966269361 3966269361 3028455632 4282141565 4285561500 4291744478 4291876062 4291876062 4291876062 4291876062 4291876062 4291876062 4291876062 4291876062 3916792766 4281944439 4289771209 4292928234 4292928234 4292928234 4292928234 4292928234 4292994026 4292994026 4292994026 4292994026 3966992312 4282207868 4289705673 4292139234 4292205027 4292205027 4292205027 4292205027 4292205027 4292205027 4292205027 4292205027 3966860723 4282537089 4289311174 4291481564 4291481564 4291481564 4291481564 4291481564 4291481564 4291547356 4291547356 4291547356 3966598062 4282800518 4288785346 4290889686 4290889686 4290889686 4290889686 4290889686 4290889686 4290889686 4290889686 4290889686 3966334888 4283129739 4288456639 4290232273 4290232273 4290232273 4290232273 4290232273 4290297809 4290297809 4290297809 4290297809 3966268835 4283393168 4288062397 4289640396 4289640652 4289640652 4289640652 4289640652 4289640652 4289640652 4289640652 4289640652 3966071197 4283722133 4287799227 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 3965874072 4283985818 4287405242 4288523204 4288523204 4288588740 4288588740 4288588740 4288588740 4288588740 4288588740 4288588740 3965741971 4284314782 4287208120 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 3965544845 4284578467 4285893551 4286288050 4286288050 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 14:36'! newButtonSquareSelectedTopRightForm "Answer the form for the top right of a selected square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3966269361 3966269361 3966269361 3966269361 3966269361 3966269105 3966269105 3966269105 3966269105 3949492146 3246098890 547072752 4291941599 4291941599 4291941599 4291941599 4291941599 4291941599 4291941599 4291941599 4291810270 4285298585 4282338943 2927923665 4292994026 4292994026 4292994026 4292994026 4292994026 4292994283 4292994283 4292994283 4292994283 4289442502 4281878647 3883238334 4292205027 4292270819 4292270819 4292270819 4292270819 4292270819 4292270819 4292270819 4292270819 4289442758 4282207868 3933503928 4291547356 4291547356 4291547356 4291547356 4291547356 4291547356 4291612893 4291612893 4291612893 4289048003 4282471297 3933240756 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4290889943 4288653760 4282800518 3933043629 4290297809 4290297809 4290297809 4290297809 4290297809 4290298066 4290298066 4290298066 4290298066 4288325054 4283063947 3932911528 4289640652 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4289706189 4287930812 4283393168 3932714660 4289114568 4289114568 4289114568 4289114568 4289114568 4289114568 4289180360 4289180360 4289180360 4287602105 4283656596 3932516765 4288588740 4288588740 4288654532 4288654532 4288654532 4288654532 4288654532 4288654532 4288654532 4287339448 4283985817 3932319385 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288128705 4288194497 4288194497 4287142327 4284314782 3932187795 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4286353587 4285827758 4284578467 3931924878) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:21'! newButtonSquareTopLeftForm "Answer the form for the top left of a square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 633520834 3333994680 3954422707 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3032004792 4289243304 4290822336 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 3920736689 4289374890 4292730333 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 3970805165 4289638062 4292796126 4293783021 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 3970476200 4289901234 4292664540 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 3970278821 4290164406 4292532954 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 3970015649 4290493371 4292532954 4293190884 4293190884 4293190884 4293125091 4293125091 4293190884 4293190884 4293190884 4293190884 3969686684 4290756543 4292467161 4292993505 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 3969423512 4291019715 4292467161 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 3969160340 4291282887 4292467161 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 3968831375 4291546059 4292467161 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 3968568203 4291809231 4292203989 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:21'! newButtonSquareTopRightForm "Answer the form for the top right of a square button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3971199923 3954422707 3250240186 549042617 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293585642 4290690750 4289243304 2931341496 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4292598747 4289374890 3887182257 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4292664540 4289638062 3937184940 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4292532954 4289901234 3936987561 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4292467161 4290164406 3936658596 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4292401368 4290427578 3936329631 4293059298 4293059298 4293059298 4293059298 4293059298 4292993505 4292993505 4292993505 4292993505 4292335575 4290690750 3936132252 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292401368 4291019715 3935803287 4292796126 4292796126 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292401368 4291282887 3935540115 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292467161 4291546059 3935276943 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292203989 4291809231 3935013771) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:19'! newButtonTopLeftForm "Answer the form for the top left of a button." ^(Form extent: 12@12 depth: 32 fromArray: #( 0 0 0 0 0 0 33554431 365151171 1270791870 2545662907 3283663032 3770004917 0 0 0 0 0 111848106 2411247800 4054954417 4272729260 4290427578 4291546059 4292796126 0 0 0 33554431 817083315 3585192369 4273058225 4292401368 4293980400 4294111986 4294111986 4294111986 0 0 33554431 1907076011 4105022893 4290953922 4293454056 4293848814 4293848814 4293848814 4293848814 4293848814 0 0 715696296 4088179884 4292269782 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 0 79675327 3584402853 4291940817 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 33554431 2392628380 4256938939 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 261724569 4020281504 4292006610 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 1099795853 4205488810 4292269782 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 2072413830 4290361785 4292006610 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 3163196042 4291217094 4291611852 4292664540 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 3784150413 4291809231 4291809231 4292006610 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:19'! newButtonTopMiddleForm "Answer the form for the top middle of a button." ^(Form extent: 1@12 depth: 32 fromArray: #( 3971199923 4293585642 4294111986 4293848814 4293585642 4293322470 4293190884 4293059298 4292927712 4292796126 4292796126 4292335575) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 1/22/2009 15:19'! newButtonTopRightForm "Answer the form for the top right of a button." ^(Form extent: 12@12 depth: 32 fromArray: #( 3753227701 3266885816 2445065404 1187103169 298042307 33554431 0 0 0 0 0 0 4292796126 4291546059 4290427578 4272729260 4021334192 2159655353 75464575 0 0 0 0 0 4294111986 4294111986 4294111986 4293980400 4292401368 4256346802 3467817650 649113776 33554431 0 0 0 4293848814 4293848814 4293848814 4293848814 4293848814 4293388263 4290822336 4071534254 1554886061 33554431 0 0 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4292072403 4020873641 548055722 0 0 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4293388263 4291611852 3382944675 67108863 0 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293125091 4239701172 2006686619 33554431 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4291809231 3953041054 261724569 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292072403 4171473827 898206089 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4291875024 4256215216 1787069572 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292796126 4292532954 4291611852 4290822336 2843968387 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4292335575 4291940817 4291809231 4291677645 3666380936) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 12/11/2008 16:38'! newCheckboxForm "Answer the form for a normal checkbox." ^(Form extent: 14@14 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 594242411 3918960278 4138774704 4138774704 4138774704 4138774704 4138774704 4138774704 4138774704 4138774704 4138774704 4138774704 3919026071 594242411 2575072380 4292467161 4294177779 4294177779 4294177779 4294177779 4294177779 4294177779 4294177779 4294177779 4294177779 4294177779 4292467161 2524806525 2658695288 4292664540 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4292664540 2608429433 2658432116 4292532954 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4293322470 4292532954 2608232054 2658366323 4292467161 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4293059298 4292467161 2608100468 2658037358 4292532954 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292532954 2607771503 2657839979 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 4292138196 2607639917 2657642600 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 2607442538 2657313635 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 4293190884 2607113573 2657116256 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 2606850401 2606455643 4294046193 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294309365 4294046193 2556255581 1311978291 4237003659 4289967027 4289967027 4289967027 4289967027 4289967027 4289967027 4289967027 4289967027 4289967027 4289967027 4237003659 1278555445 50331648 1210986030 1647917369 1647917369 1647917369 1647917369 1647917369 1647917369 1647917369 1647917369 1647917369 1647917369 1210986030 50331648) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newCheckboxMarkerForm "Answer a new checkbox marker form." ^(Form extent: 12@14 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1342177280 1610612736 134217728 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3338665984 4278190080 1476395008 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 671088640 4278190080 4009754624 134217728 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2147483648 4278190080 2533359616 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3607101440 4278190080 1207959552 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1073741824 4278190080 3875536896 16777215 16777215 16777215 16777215 16777215 1207959552 3204448256 134217728 16777215 2801795072 4278190080 2147483648 16777215 16777215 16777215 16777215 134217728 3607101440 4278190080 2936012800 268435456 4143972352 4278190080 536870912 16777215 16777215 16777215 16777215 16777215 536870912 4009754624 4278190080 3607101440 4278190080 3070230528 16777215 16777215 16777215 16777215 16777215 16777215 16777215 805306368 4009754624 4278190080 4278190080 1342177280 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 671088640 2936012800 2801795072 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 12/11/2008 16:38'! newCheckboxSelectedForm "Answer the form for a selected checkbox." ^(Form extent: 14@14 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 591416973 3914425236 4134435746 4134435746 4134435746 4134435746 4134435746 4134435746 4134435746 4134435746 4134435746 4134435746 3914425236 591416973 2571195527 4289245124 4293125612 4293125612 4293125612 4293125612 4293125612 4293125612 4293125612 4293125612 4293125612 4293125612 4289245124 2520929417 2655015551 4289114053 4291744479 4291744479 4291744479 4291744479 4291744479 4291744479 4291744479 4291744479 4291744479 4291744479 4289114053 2604684160 2654949242 4288456640 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4288456640 2604748668 2654817654 4287799485 4289443276 4289443276 4289443276 4289443276 4289443276 4289443276 4289443276 4289443276 4289443276 4289443276 4287799485 2604486007 2654686063 4287273914 4288457669 4288457669 4288457669 4288457669 4288457669 4288457669 4288457669 4288457669 4288457669 4288457669 4287273914 2604420207 2654816618 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 4284907433 2604484971 2654619492 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 2604353637 2654684509 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 4286092732 2604352863 2654487128 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 4286685382 2604221017 2603892560 4287146187 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287278031 4287146187 2553626706 1310531626 4232599666 4284512149 4284512149 4284512149 4284512149 4284512149 4284512149 4284512149 4284512149 4284512149 4284512149 4232599666 1276977451 50331648 1210064935 1646208047 1646208047 1646208047 1646208047 1646208047 1646208047 1646208047 1646208047 1646208047 1646208047 1210064935 50331648) offset: 0@0)! ! !UIThemeWatery methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newCloseControlIn: aThemedMorph for: aModel action: aValuable help: helpText "Answer a button for closing things." |form msb| form := self windowCloseForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowCloseOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: aValuable; setBalloonText: helpText. ^msb! ! !UIThemeWatery methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newDialogPanelIn: aThemedMorph "Answer a new (main) dialog panel." ^(super newDialogPanelIn: aThemedMorph) fillStyle: (SolidFillStyle color: Color transparent) "no pane colour tracking"! ! !UIThemeWatery methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newFocusIndicatorMorphFor: aMorph "Answer a new focus indicator for the given morph." |radius| radius := aMorph focusIndicatorCornerRadius. ^BorderedMorph new fillStyle: Color transparent; borderStyle: ((CompositeBorder new width: radius) borders: {RoundedBorder new cornerRadius: radius; width: 1; baseColor: self settings scrollbarColor. RoundedBorder new cornerRadius: radius - 1; width: 1; baseColor: (self settings scrollbarColor alpha: 0.4)}); bounds: aMorph focusBounds! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 12/8/2008 18:37'! newRadioButtonForm "Answer the form for a normal radio button." ^(Form extent: 14@14 depth: 32 fromArray: #( 16777215 16777215 16777215 198234320 2645865652 3568415153 4072521149 4055875519 3551637937 2578756788 164021958 16777215 16777215 16777215 16777215 16777215 1437906100 4038506166 4292598747 4293914607 4294111986 4294111986 4293914607 4292598747 4021728950 1303556786 16777215 16777215 16777215 1386916522 4257465283 4293388263 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293388263 4240556481 1219144362 16777215 195207842 4038177201 4293125091 4293256677 4293256677 4293256677 4293256677 4293256677 4293256677 4293256677 4293256677 4293059298 3987713967 144678815 2627640990 4291875024 4292993505 4292993505 4292993505 4292993505 4292993505 4292993505 4292993505 4292993505 4292993505 4292993505 4291743438 2459803037 3584139681 4292072403 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292861919 4292006610 3500056222 3970476200 4291809231 4292467161 4292532954 4292532954 4292532954 4292532954 4292532954 4292532954 4292532954 4292532954 4292467161 4291809231 3919947173 3919749794 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 4292203989 3869154974 3515846543 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 3431697291 2289333364 4291480266 4293125091 4293125091 4293125091 4293125091 4293125091 4293125091 4293125091 4293125091 4293125091 4293125091 4291151301 2154918257 189154886 3817178501 4293256677 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293059298 3766583681 189154886 16777215 960906822 4120221077 4293322470 4294111986 4294111986 4294111986 4294111986 4294111986 4294111986 4293256677 4103180689 927549769 16777215 16777215 16777215 910048830 3682039671 4290756543 4293256677 4294572537 4294506744 4293190884 4273847741 3648287860 893337407 16777215 16777215 16777215 16777215 16777215 169482778 1799570243 3042202708 3681710706 3664867697 3025359699 1799636036 169482778 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newRadioButtonMarkerForm "Answer a new radio button marker form." ^(Form extent: 12@12 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 0 0 0 0 0 0 0 16777215 16777215 16777215 16777215 0 0 268435456 1392508928 1392508928 268435456 0 0 16777215 16777215 16777215 16777215 0 268435456 3439329280 4278190080 4211081216 3355443200 268435456 0 16777215 16777215 16777215 16777215 0 1392508928 4278190080 4278190080 4278190080 4244635648 1392508928 0 16777215 16777215 16777215 16777215 0 1392508928 4278190080 4278190080 4261412864 4261412864 1308622848 0 16777215 16777215 16777215 16777215 0 268435456 3439329280 4278190080 4261412864 3422552064 234881024 0 16777215 16777215 16777215 16777215 0 0 268435456 1392508928 1392508928 268435456 0 0 16777215 16777215 16777215 16777215 0 0 0 0 0 0 0 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 12/8/2008 18:38'! newRadioButtonSelectedForm "Answer the form for a selected radio button." ^(Form extent: 14@14 depth: 32 fromArray: #( 16777215 16777215 16777215 195273727 2641329849 3563221416 4067918510 4051207088 3546444457 2574352313 160337634 16777215 16777215 16777215 16777215 16777215 1433764797 4033509543 4289442502 4292467941 4292928234 4292928234 4292467941 4289442502 4016797863 1299613120 16777215 16777215 16777215 1383498170 4252665514 4291152600 4291744478 4291744478 4291744478 4291744478 4291744478 4291744478 4291087064 4235822507 1216120505 16777215 192187321 4033181089 4290232016 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290560980 4290100687 3982914979 140541887 2623959968 4286746800 4289574859 4289574859 4289574859 4289574859 4289574859 4289574859 4289574859 4289574859 4289574859 4289574859 4286549679 2456319395 3579801242 4286353071 4288654533 4288654533 4288654533 4288654533 4288654533 4288654533 4288654533 4288654533 4288654533 4288654533 4286089901 3495980954 3965612183 4284709539 4286944951 4287011000 4287011000 4287011000 4287011000 4287011000 4287011000 4287011000 4287011000 4286813622 4284643746 3915280279 3915345555 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 4284973226 3864947858 3512362887 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 4285500082 3428345476 2286835828 4285433514 4286026683 4286026683 4286026683 4286026683 4286026683 4286026683 4286026683 4286026683 4286026683 4286026683 4285235879 2152552048 187582022 3813958010 4286421439 4286553283 4286553283 4286553283 4286553283 4286553283 4286553283 4286553283 4286553283 4286355645 3763494776 187582022 16777215 959790667 4116343939 4286685122 4287014603 4287014603 4287014603 4287014603 4287014603 4287014603 4286619329 4099500930 926039117 16777215 16777215 16777215 908735550 3679148137 4285630628 4286882500 4287541204 4287541204 4286816707 4268787875 3645527655 892024127 16777215 16777215 16777215 16777215 16777215 169482778 1798387264 3040494156 3679082084 3662239075 3023716940 1798452800 169482778 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbBottomForm "Answer the form for the bottom of a scrollbar thumb." ^(Form extent: 13@7 depth: 32 fromArray: #( 4284182411 4287142063 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4284577427 4282669690 4284182411 4286287012 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4284182670 4282669690 2906411633 4284445326 4287536820 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4283261825 3023720303 2033601901 4284182411 4285037205 4287339698 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4283919242 4282801275 2503363949 1149473452 2755548019 4284050825 4284248204 4285958562 4286681770 4286484649 4286155685 4285037464 4283656069 4282998397 3023720559 1262704758 0 422725477 2083867754 2671004523 4283787654 4283656068 4283656325 4283392897 4283195776 3023786609 2688176497 926700403 73298833 0 0 0 1345735788 1999981163 2671004523 2671004523 2671004523 2167753578 1580616556 171134054 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbHorizontalMiddleForm "Answer the form for the middle of a horizontal scrollbar thumb." ^(Form extent: 1@13 depth: 32 fromArray: #( 4284182411 4288326078 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4284709013 4282669690) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbLeftForm "Answer the form for the left hand side of a scrollbar thumb." ^(Form extent: 7@13 depth: 32 fromArray: #( 0 0 1149473452 2033601901 2906411633 4284182411 4284182411 0 422725477 2755548019 4284182411 4284445326 4286287012 4287142063 0 2083867754 4284050825 4285037205 4287536820 4287931577 4287931577 1345735788 2671004523 4284248204 4287339698 4287602613 4287602613 4287602613 1999981163 4283787654 4285958562 4287208113 4287208113 4287208113 4287208113 2671004523 4283656068 4286681770 4286879149 4286879149 4286879149 4286879149 2671004523 4283656325 4286484649 4286484649 4286484649 4286484649 4286484649 2671004523 4283392897 4286155685 4286155685 4286155685 4286155685 4286155685 2167753578 4283195776 4285037464 4285761185 4285761185 4285761185 4285761185 1580616556 3023786609 4283656069 4285432221 4285432221 4285432221 4285432221 171134054 2688176497 4282998397 4283919242 4285103257 4285103257 4285103257 0 926700403 3023720559 4282801275 4283261825 4284182670 4284577427 0 73298833 1262704758 2503363949 3023720303 4282669690 4282669690) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbRightForm "Answer the form for the right hand side of a scrollbar thumb." ^(Form extent: 7@13 depth: 32 fromArray: #( 4284182411 4284182411 2587118699 1396330353 211462590 0 0 4287010734 4285629341 4284182411 4284182411 2033601901 0 0 4287931577 4287931577 4286682026 4284313740 4284050825 1261587049 0 4287602613 4287602613 4287602613 4286418855 4283919239 2587118699 422725477 4287208113 4287208113 4287208113 4287208113 4284971669 4283787654 1345735788 4286879149 4286879149 4286879149 4286879149 4285629597 4283656068 1832209003 4286484649 4286484649 4286484649 4286484649 4285695391 4283458947 1999981163 4286155685 4286155685 4286155685 4286155685 4285169048 4283392897 1916095595 4285761185 4285761185 4285761185 4285761185 4284379535 4283195776 1345735788 4285432221 4285432221 4285432221 4285037464 4283195775 2671004523 758270315 4285103257 4285103257 4284905878 4283327362 4282998397 1664502380 0 4284380048 4283853961 4282932861 4282801275 2419477869 171134054 0 4282669690 4282669690 2755021932 2436846708 322261099 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbTopForm "Answer the form for the top of a scrollbar thumb." ^(Form extent: 13@7 depth: 32 fromArray: #( 0 0 0 422725477 1345735788 1832209003 1999981163 1916095595 1345735788 758270315 0 0 0 0 0 1261587049 2587118699 4283787654 4283656068 4283458947 4283392897 4283195776 2671004523 1664502380 171134054 0 211462590 2033601901 4284050825 4283919239 4284971669 4285629597 4285695391 4285169048 4284379535 4283195775 4282998397 2419477869 322261099 1396330353 4284182411 4284313740 4286418855 4287208113 4286879149 4286484649 4286155685 4285761185 4285037464 4283327362 4282801275 2436846708 2587118699 4284182411 4286682026 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4284905878 4282932861 2755021932 4284182411 4285629341 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4283853961 4282669690 4284182411 4287010734 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4284380048 4282669690) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'gvc 10/3/2008 13:22'! newScrollbarThumbVerticalMiddleForm "Answer the form for the middle of a vertical scrollbar thumb." ^(Form extent: 13@1 depth: 32 fromArray: #( 4284182411 4288326078 4287931577 4287602613 4287208113 4286879149 4286484649 4286155685 4285761185 4285432221 4285103257 4284709013 4282669690) offset: 0@0)! ! !UIThemeWatery methodsFor: 'morph creation' stamp: 'MarcusDenker 7/22/2013 13:50'! newTaskbarThumbnailIn: aThemedMorph for: aWindow "Answer a taskbar thumbnail morph for the given window." |answer thumb| thumb := aWindow taskbarThumbnail. answer := PanelMorph new hResizing: #shrinkWrap; vResizing: #shrinkWrap; changeTableLayout; layoutInset: 8; cellInset: 4; addMorphBack: thumb; addMorphBack: ((self buttonLabelForText: (aWindow labelString truncateWithElipsisTo: 50)) color: Color white). answer extent: answer minExtent; fillStyle: (self tasklistFillStyleFor: answer); borderStyle: (self taskbarThumbnailNormalBorderStyleFor: aWindow); cornerStyle: (self taskbarThumbnailCornerStyleFor: answer). ^answer ! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newTreeExpandedForm "Answer a new form for an expanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 1200130184 478709896 4169697416 4287137928 4287137928 4287137928 4287137928 4287137928 4236806280 646482056 16777215 2508753032 4287137928 4287137928 4287137928 4287137928 4287137928 2726856840 16777215 16777215 495487112 4186474632 4287137928 4287137928 4287137928 4236806280 612927624 16777215 16777215 16777215 2542307464 4287137928 4287137928 4287137928 2676525192 16777215 16777215 16777215 16777215 478709896 4169697416 4287137928 4220029064 579373192 16777215 16777215 16777215 16777215 16777215 2424866952 4287137928 2626193544 16777215 16777215 16777215 16777215 16777215 16777215 394823816 4018702472 529041544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 864585864 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newTreeUnexpandedForm "Answer a new form for an unexpanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 461932680 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2324203656 4152920200 2458421384 428378248 16777215 16777215 16777215 16777215 16777215 2357758088 4287137928 4287137928 4152920200 2408089736 394823816 16777215 16777215 16777215 2391312520 4287137928 4287137928 4287137928 4287137928 4119365768 2324203656 344492168 16777215 2408089736 4287137928 4287137928 4287137928 4287137928 4287137928 4287137928 3968370824 780699784 2391312520 4287137928 4287137928 4287137928 4287137928 4236806280 2659747976 529041544 16777215 2357758088 4287137928 4287137928 4253583496 2810742920 646482056 16777215 16777215 16777215 2324203656 4253583496 2777188488 696813704 16777215 16777215 16777215 16777215 16777215 1200130184 663259272 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowCloseForm "Answer a new form for a window close box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290361785 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290361785 0 0 0 0 0 0 0 4287335307 4281808438 4283254086 4286543478 4288254096 4288188560 4286543478 4283254086 4281808438 4287335307 0 0 0 0 0 4287138185 4280425243 4285027670 4289633180 4292135884 4293254878 4293320928 4292267469 4289567644 4285093206 4280490779 4287203978 0 0 0 4290164406 4282134834 4284233271 4288637549 4291401881 4292653234 4292850869 4292785333 4292653234 4291467161 4288637549 4284364600 4282266163 4290230199 0 0 4286545534 4283178015 4287182138 4289281086 4290597711 4290995037 4291126110 4291126109 4290929244 4290662991 4289281086 4287182394 4283309344 4286611327 0 0 4283383359 4285867306 4288685092 4289799715 4290590512 4290856252 4290988611 4291054147 4290922044 4290590256 4289930531 4288619300 4285867562 4283711040 0 0 4282782229 4287833644 4289996837 4290787376 4291381825 4291909968 4292173910 4292239446 4292106833 4291578692 4290984239 4290193702 4287833644 4283044630 0 0 4284026900 4289014315 4291051835 4291973448 4292633434 4293226345 4293556336 4293622129 4293358699 4292896092 4292236105 4291445307 4289014058 4284092436 0 0 4285414719 4289343786 4291712331 4293027933 4293949038 4294280317 4294479236 4294479236 4294346110 4294015086 4293224799 4291974475 4289343785 4285545791 0 0 4287264888 4288555300 4292239449 4293818479 4294542716 4294546314 4294614419 4294614676 4294546828 4294543230 4293884271 4292501850 4288751652 4287330424 0 0 4290558650 4286658615 4291253841 4293951868 4294481292 4294615447 4294617247 4294618017 4294616217 4294481550 4294214781 4291779154 4286789430 4290493114 0 0 4292664540 4288385426 4287573545 4292374633 4293892240 4294289824 4294555050 4294555308 4294356387 4293958547 4292835183 4287836460 4288385426 4292664540 0 0 0 4292993505 4288320403 4286993487 4289421400 4291463295 4292845463 4293043354 4291660419 4289684573 4287256400 4288254867 4292993505 0 0 0 0 0 4292927712 4291282630 4287858566 4286996058 4286533190 4286598726 4287324509 4287858309 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowCloseOverForm "Answer a new form for a window close box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290361785 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290361785 0 0 0 0 0 0 0 4287335307 4281808438 4283254086 4286543478 4288254096 4288188560 4286543478 4283254086 4281808438 4287335307 0 0 0 0 0 4287138185 4280425243 4285027670 4289633180 4292135884 4293254878 4293320928 4292267469 4289567644 4285093206 4280490779 4287203978 0 0 0 4290164406 4282134834 4284233271 4287126365 4286603617 4292192940 4292850869 4292785333 4292192940 4286011738 4286666328 4284364600 4282266163 4290230199 0 0 4286545534 4283178015 4286985273 4284555811 4284360999 4285741623 4291126110 4290272343 4285676086 4284360743 4284555811 4287182394 4283309344 4286611327 0 0 4283383359 4285867306 4288685092 4289012512 4285079066 4284293404 4285344037 4285803560 4284293404 4285472540 4289340193 4288619300 4285867562 4283711040 0 0 4282782229 4287833644 4289996837 4290787376 4291381825 4285870380 4284886569 4284952105 4286395695 4291578692 4290984239 4290193702 4287833644 4283044630 0 0 4284026900 4289014315 4291051835 4291973448 4292502105 4286988605 4285544758 4285610550 4287054910 4292830299 4292236105 4291445307 4289014058 4284092436 0 0 4285414719 4289343786 4291712331 4292502618 4287513921 4285808187 4287779662 4287713869 4285808443 4287514433 4292699484 4291974475 4289343785 4285545791 0 0 4287264888 4288555300 4292239449 4288171078 4286333501 4287320653 4294614419 4294351761 4287846482 4286333758 4287448897 4292501850 4288751652 4287330424 0 0 4290558650 4286658615 4291253841 4291718762 4287518032 4293564045 4294617247 4294618017 4293827729 4287518289 4291193701 4291779154 4286789430 4290493114 0 0 4292664540 4288385426 4287573545 4292374633 4293629325 4294289824 4294555050 4294555308 4294356387 4293958547 4292835183 4287836460 4288385426 4292664540 0 0 0 4292993505 4288320403 4286993487 4289421400 4291463295 4292845463 4293043354 4291660419 4289684573 4287256400 4288254867 4292993505 0 0 0 0 0 4292927712 4291282630 4287858566 4286996058 4286533190 4286598726 4287324509 4287858309 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowInactiveControlForm "Answer a new form for an inactive window control box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291677645 4288585374 4286085240 4284243036 4284243036 4286085240 4288585374 4291677645 0 0 0 0 0 0 0 4289572269 4285756275 4286479998 4288716960 4289835441 4289835441 4288716960 4286479998 4285756275 4289572269 0 0 0 0 0 4289506476 4284835173 4287335307 4290559164 4292598747 4293322470 4293322470 4292598747 4290559164 4287335307 4284703587 4289506476 0 0 0 4291546059 4285493103 4286414205 4288980132 4291217094 4292335575 4292598747 4292598747 4292335575 4291282887 4288980132 4286282619 4285493103 4291546059 0 0 4288980132 4285361517 4287466893 4288782753 4289835441 4290295992 4290295992 4290427578 4290164406 4289835441 4288782753 4287466893 4285361517 4288980132 0 0 4286282619 4286611584 4288059030 4288716960 4289177511 4289572269 4289835441 4289835441 4289703855 4289374890 4288782753 4288059030 4286611584 4286282619 0 0 4285164138 4287664272 4288782753 4289374890 4289835441 4290427578 4290624957 4290624957 4290559164 4290032820 4289374890 4288914339 4287664272 4285164138 0 0 4285361517 4288322202 4289703855 4290295992 4290822336 4291414473 4291677645 4291677645 4291414473 4291085508 4290427578 4289703855 4288453788 4285624689 0 0 4287072135 4288716960 4290427578 4291217094 4291677645 4292203989 4292598747 4292598747 4292335575 4291809231 4291217094 4290427578 4288716960 4287203721 0 0 4288980132 4288256409 4290624957 4291677645 4292335575 4292927712 4293256677 4293256677 4293059298 4292598747 4291809231 4290822336 4288256409 4289177511 0 0 4291677645 4287664272 4290295992 4292006610 4293059298 4293454056 4293585642 4293585642 4293454056 4293125091 4292203989 4290427578 4287730065 4291677645 0 0 4293256677 4290032820 4288124823 4291217094 4292796126 4293322470 4293717228 4293717228 4293454056 4292927712 4291677645 4288256409 4290032820 4293256677 0 0 0 4293454056 4290032820 4288322202 4289967027 4291546059 4292598747 4292664540 4291677645 4290295992 4288716960 4290032820 4293454056 0 0 0 0 0 4293322470 4292203989 4289835441 4288782753 4288322202 4288453788 4288980132 4289835441 4292335575 4293322470 0 0 0 0 0 0 0 4293059298 4293585642 4293717228 4293585642 4293585642 4293585642 4293585642 4293059298 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMaximizeForm "Answer a new form for a window minimize box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290295992 0 0 0 0 0 0 0 4287269514 4281611316 4282795590 4285953654 4287664528 4287730320 4285953654 4282861383 4281611316 4287269514 0 0 0 0 0 4287137928 4280360481 4283914839 4288455580 4291547084 4292731360 4292796894 4291547341 4288390044 4283980376 4280294689 4287203721 0 0 0 4290164406 4281348144 4282010170 4285369453 4288527772 4290565299 4291025080 4291025080 4290630835 4288593820 4285303917 4282009913 4281348144 4290164406 0 0 4286479998 4280431648 4282282296 4283995198 4286033222 4286821198 4286952786 4287018578 4286755662 4285967429 4284060735 4282216504 4280497696 4286545791 0 0 4282402111 4281097769 4282549797 4283800345 4284982554 4285771048 4285903149 4285837356 4285771304 4285114397 4283866393 4282484773 4281097769 4282402111 0 0 4279972116 4282219307 4283997212 4285114906 4285969451 4286824254 4287152961 4287218498 4286890301 4286167084 4285246490 4284260124 4282219308 4280037908 0 0 4279975186 4283600171 4285640744 4286561842 4287547718 4288336981 4288731227 4288731228 4288402775 4287614279 4286627889 4285772072 4283600683 4280172817 0 0 4282736189 4284126245 4286692666 4287877449 4288797275 4289586536 4290112367 4290112368 4289718377 4288863579 4287877448 4286758970 4284126756 4282803005 0 0 4286284920 4283533850 4287283524 4288731993 4289718632 4290507893 4291099774 4291165055 4290705785 4289850729 4288797788 4287415878 4283599642 4286350968 0 0 4290362041 4283331374 4286560575 4289322854 4290770809 4291559299 4291952522 4292083595 4291690372 4290903163 4289455464 4286889281 4283462959 4290362040 0 0 4292664540 4287928465 4283793702 4288007509 4290572412 4291689100 4292607381 4292607382 4291885710 4290900861 4288666201 4284122406 4287928465 4292664540 0 0 0 4292993505 4288059538 4284842051 4286688328 4289384043 4290962050 4291224710 4289646450 4287083084 4285171781 4287928466 4292993505 0 0 0 0 0 4292927712 4291217093 4287402885 4285630033 4284907832 4284973881 4285893715 4287468677 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMaximizeOverForm "Answer a new form for a window maximize box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285822068 4282071867 4279440147 4279440147 4282071867 4285822068 4290295992 0 0 0 0 0 0 0 4287269514 4281611316 4282795590 4285953654 4287664528 4287730320 4285953654 4282861383 4281611316 4287269514 0 0 0 0 0 4287137928 4280360481 4283914839 4288455580 4291547084 4288980902 4289046437 4291547341 4288390044 4283980376 4280294689 4287203721 0 0 0 4290164406 4281348144 4282010170 4285369453 4288527772 4287405445 4284113749 4284113749 4287405445 4288593820 4285303917 4282009913 4281348144 4290164406 0 0 4286479998 4280431648 4282282296 4283995198 4286033222 4284581178 4282209061 4282274853 4284515642 4285967429 4284060735 4282216504 4280497696 4286545791 0 0 4282402111 4281097769 4282549797 4282216466 4283070226 4283793437 4281749780 4281684244 4283661853 4283201813 4282282258 4282484773 4281097769 4282402111 0 0 4279972116 4282219307 4282347796 4281355787 4281750291 4282210588 4282276125 4282144028 4282210588 4281881876 4281421323 4282544916 4282219308 4280037908 0 0 4279975186 4283600171 4283531037 4281815829 4282473504 4282604837 4282999593 4282999594 4282736679 4282539552 4281881621 4283662365 4283600683 4280172817 0 0 4282736189 4284126245 4286692666 4285175604 4285832770 4286424651 4283657010 4283657267 4286490700 4285898818 4285175604 4286758970 4284126756 4282803005 0 0 4286284920 4283533850 4287283524 4288731993 4289718632 4287346007 4284118074 4284183610 4287478106 4289850729 4288797788 4287415878 4283599642 4286350968 0 0 4290362041 4283331374 4286560575 4289322854 4290770809 4288134753 4284511807 4284577344 4288200290 4290903163 4289455464 4286889281 4283462959 4290362040 0 0 4292664540 4287928465 4283793702 4288007509 4290572412 4291689100 4288920687 4288920687 4291885710 4290900861 4288666201 4284122406 4287928465 4292664540 0 0 0 4292993505 4288059538 4284842051 4286688328 4289384043 4290962050 4291224710 4289646450 4287083084 4285171781 4287928466 4292993505 0 0 0 0 0 4292927712 4291217093 4287402885 4285630033 4284907832 4284973881 4285893715 4287468677 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMenuForm "Answer a new form for a window menu box." ^(Form extent: 24@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4293125091 4287335307 4283453520 4281150765 4280690214 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280821800 4280690214 4281150765 4283453520 4287335307 4293125091 0 0 0 0 0 4293059298 4285493103 4282795590 4287072135 4289638062 4290493371 4290822336 4290756543 4290756543 4290822336 4290822336 4290756543 4290756543 4290822336 4290493371 4289638062 4287072135 4282795590 4285493103 4293059298 0 0 0 0 4287335307 4282598211 4288322202 4291875024 4292927712 4293322470 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293519849 4293322470 4292927712 4291875024 4288322202 4282598211 4287401100 0 0 0 0 4283585106 4285953654 4289967027 4291677645 4292269782 4292401368 4292401368 4292401368 4292335575 4292335575 4292335575 4292335575 4292401368 4292401368 4292401368 4292269782 4291677645 4289967027 4285953654 4283585106 0 0 0 0 4281742902 4287861651 4290493371 4291085508 4291480266 4291546059 4291611852 4291611852 4291546059 4291480266 4291480266 4291546059 4291611852 4291611852 4291546059 4291480266 4291085508 4290493371 4287861651 4281742902 0 0 0 0 4281940281 4288782753 4291414473 4292203989 4292664540 4292796126 4292927712 4292796126 4292861919 4292927712 4292927712 4292861919 4292796126 4292927712 4292796126 4292664540 4292203989 4291414473 4288782753 4281874488 0 0 0 0 4284045657 4288256409 4291546059 4293190884 4294177779 4294572537 4294440951 4294572537 4294506744 4294572537 4294572537 4294506744 4294572537 4294440951 4294572537 4294177779 4293190884 4291546059 4288256409 4284045657 0 0 0 0 4287269514 4283914071 4290624957 4293190884 4294638330 4294769916 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294835709 4294769916 4294638330 4293190884 4290624957 4283914071 4287269514 0 0 0 0 4292467161 4286414205 4283387727 4287993237 4291019715 4292269782 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292467161 4292598747 4291611852 4287993237 4283387727 4286414205 4292467161 0 0 0 0 4292401368 4292467161 4288124823 4284177243 4281150765 4280229663 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280361249 4280229663 4281282351 4284177243 4288124823 4292467161 4292401368 0 0 0 0 0 4292203989 4292203989 4292335575 4292401368 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292927712 4292664540 4292401368 4292335575 4292269782 4292203989 0 0 0 0 0 0 0 4292006610 4292401368 4292467161 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292730333 4292796126 4292467161 4292401368 4292006610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMenuPassiveForm "Answer a new form for a window menu box when inactive." ^(Form extent: 24@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294046193 4291085508 4289111718 4287927444 4287664272 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287730065 4287664272 4287927444 4289111718 4291085508 4294046193 0 0 0 0 0 4293980400 4290164406 4288782753 4290953922 4292269782 4292664540 4292861919 4292796126 4292796126 4292861919 4292861919 4292796126 4292796126 4292861919 4292664540 4292269782 4290953922 4288782753 4290164406 4293980400 0 0 0 0 4291085508 4288651167 4291546059 4293388263 4293914607 4294111986 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294243572 4294111986 4293914607 4293388263 4291546059 4288651167 4291085508 0 0 0 0 4289177511 4290361785 4292401368 4293322470 4293585642 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293585642 4293322470 4292401368 4290361785 4289177511 0 0 0 0 4288190616 4291348680 4292664540 4292993505 4293190884 4293190884 4293256677 4293256677 4293190884 4293190884 4293190884 4293190884 4293256677 4293256677 4293190884 4293190884 4292993505 4292664540 4291348680 4288190616 0 0 0 0 4288322202 4291809231 4293125091 4293585642 4293783021 4293848814 4293914607 4293848814 4293914607 4293914607 4293914607 4293914607 4293848814 4293914607 4293848814 4293783021 4293585642 4293125091 4291809231 4288322202 0 0 0 0 4289374890 4291546059 4293190884 4294046193 4294572537 4294769916 4294704123 4294769916 4294704123 4294769916 4294769916 4294704123 4294769916 4294704123 4294769916 4294572537 4294046193 4293190884 4291546059 4289374890 0 0 0 0 4291019715 4289309097 4292730333 4294046193 4294769916 4294835709 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294835709 4294769916 4294046193 4292730333 4289309097 4291019715 0 0 0 0 4293717228 4290624957 4289045925 4291414473 4292927712 4293585642 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293717228 4293783021 4293256677 4291414473 4289045925 4290624957 4293717228 0 0 0 0 4293651435 4293717228 4291480266 4289440683 4287927444 4287466893 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287532686 4287466893 4287993237 4289440683 4291480266 4293717228 4293651435 0 0 0 0 0 4293585642 4293585642 4293651435 4293651435 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293914607 4293783021 4293651435 4293651435 4293585642 4293585642 0 0 0 0 0 0 0 4293454056 4293651435 4293717228 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293717228 4293651435 4293454056 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMinimizeForm "Answer a new form for a window minimize box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285953140 4282726971 4280619283 4280619283 4282661434 4285953140 4290295992 0 0 0 0 0 0 0 4287400586 4282921779 4284629572 4287526262 4288909456 4288974992 4287591798 4284761414 4282856243 4287400586 0 0 0 0 0 4287334536 4282588703 4286796631 4290682268 4292529868 4293385950 4293385950 4292529612 4290682268 4286731095 4282654242 4287400329 0 0 0 4290164406 4283247407 4286332215 4290281068 4292457116 4293447349 4293579448 4293579447 4293447349 4292457116 4290346605 4286660409 4283771952 4290164406 0 0 4287004286 4284555291 4289551160 4291461439 4292647750 4292978252 4292978510 4292978510 4292912459 4292516422 4291461695 4289485625 4285736224 4287004543 0 0 4284694079 4287316261 4291129383 4292379927 4292907543 4293237538 4293434920 4293369896 4293303330 4293104407 4292380439 4291130151 4288301098 4284694078 0 0 4285013269 4289947179 4292577049 4293498387 4293959974 4294159159 4294291774 4294357567 4294291256 4294091813 4293695508 4292774682 4290144044 4285013782 0 0 4286197779 4291263275 4293565218 4294486826 4294752322 4294754384 4294624599 4294756183 4294755663 4294753345 4294618155 4293828129 4291395115 4286263315 0 0 4286797373 4291592487 4294093364 4294753602 4294822482 4294825059 4294826346 4294826603 4294825828 4294822740 4294753602 4294225462 4291855399 4286928446 0 0 4287791736 4290870043 4294029633 4294691156 4294826081 4294894447 4294962297 4294963066 4294895474 4294892130 4294691669 4294096449 4291001115 4287857272 0 0 4290558649 4287916079 4292847677 4294431071 4294829938 4294964349 4294965892 4294966661 4294964606 4294896499 4294563169 4292980029 4287981872 4290558648 0 0 4292664540 4288452497 4288312611 4292590416 4294239351 4294636933 4294835601 4294835346 4294637704 4294306681 4293052245 4288576291 4288452497 4292664540 0 0 0 4292993505 4288321426 4287199810 4289700930 4291873639 4293321856 4293387137 4292005738 4290096709 4287463236 4288321426 4292993505 0 0 0 0 0 4292927712 4291282629 4287861124 4287137103 4286939445 4286939701 4287532112 4287926916 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'initialize-release' stamp: 'MarcusDenker 7/22/2013 13:50'! newWindowMinimizeOverForm "Answer a new form for a window maximize box for use when the mouse is over it." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290295992 4285953140 4282726971 4280619283 4280619283 4282661434 4285953140 4290295992 0 0 0 0 0 0 0 4287400586 4282921779 4284629572 4287526262 4288909456 4288974992 4287591798 4284761414 4282856243 4287400586 0 0 0 0 0 4287334536 4282588703 4286796631 4290682268 4292529868 4293385950 4293385950 4292529612 4290682268 4286731095 4282654242 4287400329 0 0 0 4290164406 4283247407 4286332215 4290281068 4292457116 4293447349 4293579448 4293579447 4293447349 4292457116 4290346605 4286660409 4283771952 4290164406 0 0 4287004286 4284555291 4289551160 4291461439 4292647750 4292978252 4292978510 4292978510 4292912459 4292516422 4291461695 4289485625 4285736224 4287004543 0 0 4284694079 4287316261 4291129383 4288438288 4288833808 4289097752 4289229341 4289164317 4289098008 4288965136 4288438544 4291130151 4288301098 4284694078 0 0 4285013269 4289947179 4288569618 4285154312 4285483537 4285615897 4285616412 4285616669 4285616153 4285549585 4285285641 4288766994 4290144044 4285013782 0 0 4286197779 4291263275 4289294360 4285287186 4285748254 4285420579 4285487142 4285618471 4285618211 4285814302 4285352722 4289491479 4291395115 4286263315 0 0 4286797373 4291592487 4294093364 4290152751 4290220603 4290222407 4290223436 4290223693 4290222920 4290220860 4290152751 4294225462 4291855399 4286928446 0 0 4287791736 4290870043 4294029633 4294691156 4294826081 4294894447 4294962297 4294963066 4294895474 4294892130 4294691669 4294096449 4291001115 4287857272 0 0 4290558649 4287916079 4292847677 4294431071 4294829938 4294964349 4294965892 4294966661 4294964606 4294896499 4294563169 4292980029 4287981872 4290558648 0 0 4292664540 4288452497 4288312611 4292590416 4294239351 4294636933 4294835601 4294835346 4294637704 4294306681 4293052245 4288576291 4288452497 4292664540 0 0 0 4292993505 4288321426 4287199810 4289700930 4291873639 4293321856 4293387137 4292005738 4290096709 4287463236 4288321426 4292993505 0 0 0 0 0 4292927712 4291282629 4287861124 4287137103 4286939445 4286939701 4287532112 4287926916 4291348680 4292927712 0 0 0 0 0 0 0 4292401368 4293125091 4293454056 4293190884 4293190884 4293190884 4293125091 4292401368 0 0 0 0) offset: 0@0)! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'GaryChambers 2/15/2011 12:52'! paneColorFor: aWindow "Answer the pane color that should be used." ^self settings fadedBackgroundWindows ifTrue: [aWindow fillStyleToUse asColor] ifFalse: [(self windowActiveFillStyleFor: aWindow) asColor]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! progressBarFillStyleFor: aProgressBar "Return the progress bar fillStyle for the given progress bar." |area c| c := self progressBarColorFor: aProgressBar. area := aProgressBar bounds. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.2->c twiceLighter lighter. 0.3->c twiceLighter lighter. 0.4->c darker. 0.6->c twiceLighter lighter. 1.0->Color white}) origin: area origin; direction: 0@area height; radial: false! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! progressBarProgressFillStyleFor: aProgressBar "Return the progress bar progress fillStyle for the given progress bar." |area c| c := self progressBarProgressColorFor: aProgressBar. area := aProgressBar bounds. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.2->c twiceLighter lighter. 0.3->c twiceLighter lighter. 0.4->c darker. 0.6->c twiceLighter lighter. 1.0->Color white}) origin: area origin; direction: 0@area height; radial: false! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'gvc 12/8/2008 19:15'! radioButtonCornerStyleFor: aRadioButton "Answer the corner style for radio buttons. Answer square when not disabled since the form is rounded." ^aRadioButton enabled ifTrue: [#square] ifFalse: [#rounded]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/9/2008 13:10'! radioButtonDisabledFillStyleFor: aRadioButton "Return the disabled radio button fillStyle for the given button." ^self radioButtonNormalFillStyleFor: aRadioButton! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 18:40'! radioButtonForm "Answer the form to use for a normal radio button." ^self forms at: #radioButton ifAbsent: [Form extent: 14@14 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/8/2008 18:41'! radioButtonNormalFillStyleFor: aRadioButton "Return the normal radio button fillStyle for the given button." ^(ImageFillStyle form: self radioButtonForm) origin: aRadioButton topLeft! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/9/2008 13:11'! radioButtonSelectedDisabledFillStyleFor: aRadioButton "Return the selected disabled radio button fillStyle for the given button." ^self radioButtonNormalFillStyleFor: aRadioButton! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'gvc 12/8/2008 18:42'! radioButtonSelectedFillStyleFor: aRadioButton "Return the selected radio button fillStyle for the given button." ^(ImageFillStyle form: self radioButtonSelectedForm) origin: aRadioButton topLeft! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 12/8/2008 18:40'! radioButtonSelectedForm "Answer the form to use for a selected radio button." ^self forms at: #radioButtonSelected ifAbsent: [Form extent: 14@14 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! resizerGripNormalFillStyleFor: aResizer "Return the normal fillStyle for the given resizer. For the moment, answer a transparent colour for no drawing, non transparent to draw as normal." ^Color transparent! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'gvc 1/27/2009 16:44'! scrollPaneNormalBorderStyleFor: aScrollPane "Return the normal borderStyle for the given scroll pane." ^BorderStyle simple width: 1; baseColor: aScrollPane paneColor! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 2/3/2009 14:28'! scrollbarImageColorFor: aScrollbar "Return the scrollbar image colour (on buttons) for the given scrollbar." ^(self baseScrollbarColorFor: aScrollbar) darker! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarMinimumThumbThickness "Answer the minumum width or height of a scrollbar thumb as appropriate to its orientation." ^15! ! !UIThemeWatery methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarNormalButtonBorderStyleFor: aScrollbar "Return the normal button borderStyle for the given scrollbar." ^BorderStyle simple width: 0! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 2/3/2009 14:28'! scrollbarNormalButtonFillStyleFor: aScrollbar "Return the normal scrollbar button fillStyle for the given scrollbar." |c| c := self baseScrollbarColorFor: aScrollbar. ^(GradientFillStyle ramp: {0.0->c twiceLighter. 1.0->c darker}) origin: aScrollbar topLeft; direction: (aScrollbar bounds isWide ifTrue: [0 @ aScrollbar height] ifFalse: [aScrollbar width @ 0]); radial: false! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 2/3/2009 14:29'! scrollbarNormalFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." |aColor c| aColor := (self baseScrollbarColorFor: aScrollbar) muchLighter. c := aColor alphaMixed: 0.9 with: Color black. ^(GradientFillStyle ramp: {0.0->c. 0.15->aColor. 0.75-> aColor lighter. 1.0->c}) origin: aScrollbar topLeft; direction: (aScrollbar bounds isWide ifTrue: [0 @ aScrollbar height] ifFalse: [aScrollbar width @ 0]); radial: false! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 10/3/2008 13:32'! scrollbarNormalHorizontalThumbFillStyleFor: aScrollbar "Return the normal scrollbar horizontal thumb fillStyle for the given scrollbar." |s l m r| s := aScrollbar slider. l := self scrollbarThumbLeftForm. m := self scrollbarThumbHorizontalMiddleForm. r := self scrollbarThumbRightForm. ^CompositeFillStyle fillStyles: { (ImageFillStyle form: l) origin: s topLeft. (AlphaInfiniteForm with: m) origin: s topLeft + (l width@0); extent: (s width - l width - r width)@m height. (ImageFillStyle form: r) origin: s topRight - (r width@0)}! ! !UIThemeWatery methodsFor: 'border-styles-scrollbars' stamp: 'gvc 10/3/2008 11:45'! scrollbarNormalThumbBorderStyleFor: aScrollbar "Return the normal thumb borderStyle for the given scrollbar." ^BorderStyle simple width: 0! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 10/3/2008 13:33'! scrollbarNormalThumbFillStyleFor: aScrollbar "Return the normal scrollbar thumb fillStyle for the given scrollbar." ^aScrollbar bounds isWide ifTrue: [self scrollbarNormalHorizontalThumbFillStyleFor: aScrollbar] ifFalse: [self scrollbarNormalVerticalThumbFillStyleFor: aScrollbar]! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'gvc 10/3/2008 13:30'! scrollbarNormalVerticalThumbFillStyleFor: aScrollbar "Return the normal scrollbar vertical thumb fillStyle for the given scrollbar." |s t m b| s := aScrollbar slider. t := self scrollbarThumbTopForm. m := self scrollbarThumbVerticalMiddleForm. b := self scrollbarThumbBottomForm. ^CompositeFillStyle fillStyles: { (ImageFillStyle form: t) origin: s topLeft. (AlphaInfiniteForm with: m) origin: s topLeft + (0@t height); extent: m width@(s height - t height - b height). (ImageFillStyle form: b) origin: s bottomLeft - (0@b height)}! ! !UIThemeWatery methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarPagingAreaCornerStyleIn: aThemedMorph "Allow for themes to override default behaviour." ^#rounded! ! !UIThemeWatery methodsFor: 'border-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! scrollbarPressedButtonBorderStyleFor: aScrollbar "Return the pressed button borderStyle for the given scrollbar." ^self scrollbarNormalButtonBorderStyleFor: aScrollbar! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 10/3/2008 13:05'! scrollbarThickness "Answer the width or height of a scrollbar as appropriate to its orientation." ^13! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:28'! scrollbarThumbBottomForm "Answer the form to use for the bottom of a vertical scrollbar." ^self forms at: #sbVThumbBottom ifAbsent: [Form extent: 13@7 depth: Display depth]! ! !UIThemeWatery methodsFor: 'border-styles-scrollbars' stamp: 'gvc 10/3/2008 12:30'! scrollbarThumbCornerStyleIn: aThemedMorph "Allow for themes to override default behaviour." ^#square! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:28'! scrollbarThumbHorizontalMiddleForm "Answer the form to use for the middle of a horizontal scrollbar." ^self forms at: #sbHThumbMiddle ifAbsent: [Form extent: 1@13 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:26'! scrollbarThumbLeftForm "Answer the form to use for the left of a horizontal scrollbar." ^self forms at: #sbHThumbLeft ifAbsent: [Form extent: 7@13 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:27'! scrollbarThumbRightForm "Answer the form to use for the right of a horizontal scrollbar." ^self forms at: #sbHThumbRight ifAbsent: [Form extent: 7@13 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:28'! scrollbarThumbTopForm "Answer the form to use for the top of a vertical scrollbar." ^self forms at: #sbVThumbTop ifAbsent: [Form extent: 13@7 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/3/2008 13:28'! scrollbarThumbVerticalMiddleForm "Answer the form to use for the middle of a vertical scrollbar." ^self forms at: #sbVThumbMiddle ifAbsent: [Form extent: 13@1 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! splitterNormalFillStyleFor: aSplitter "Return the normal splitter fillStyle for the given splitter." |aColor| aColor := aSplitter paneColor. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor darker}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! splitterPressedFillStyleFor: aSplitter "Return the pressed splitter fillStyle for the given splitter." |aColor| aColor := aSplitter paneColor duller. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor twiceDarker}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! tabLabelInsetFor: aButton "Answer the inset to use for a tab label." ^8@2 corner: 8@2! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/23/2011 14:15'! tabLabelNormalFillStyleFor: aTabLabel "Return the normal fillStyle for the given tab label." |round roundCorners tl t tr l m r| round := aTabLabel wantsRoundedCorners. roundCorners := aTabLabel roundedCorners. tl := (round and: [roundCorners includes: 1]) ifTrue: [self buttonTopLeftForm] ifFalse: [self buttonSquareTopLeftForm]. t := self buttonTopMiddleForm. tr := (round and: [roundCorners includes: 4]) ifTrue: [self buttonTopRightForm] ifFalse: [self buttonSquareTopRightForm]. l := self buttonMiddleLeftForm. m := self buttonPlainMiddleColor. r := self buttonMiddleRightForm. ^self multiFormTopFillStyleFrom: {tl. t. tr. l. m. r} in: aTabLabel bounds! ! !UIThemeWatery methodsFor: 'fill-styles-buttons' stamp: 'GaryChambers 11/23/2011 14:15'! tabLabelSelectedFillStyleFor: aTabLabel "Return the selected fillStyle for the given tab label." |round roundCorners tl t tr l m r| round := aTabLabel wantsRoundedCorners. roundCorners := aTabLabel roundedCorners. tl := (round and: [roundCorners includes: 1]) ifTrue: [self buttonSelectedTopLeftForm] ifFalse: [self buttonSquareSelectedTopLeftForm]. t := self buttonSelectedTopMiddleForm. tr := (round and: [roundCorners includes: 4]) ifTrue: [self buttonSelectedTopRightForm] ifFalse: [self buttonSquareSelectedTopRightForm]. l := self buttonSelectedMiddleLeftForm. m := self buttonColouredMiddleColor. r := self buttonSelectedMiddleRightForm. ^self multiFormTopFillStyleFrom: {tl. t. tr. l. m. r} in: aTabLabel bounds! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'gvc 1/12/2009 18:28'! tabPanelBorderStyleFor: aTabGroup "Answer the normal border style for a tab group." ^TabPanelBorder new width: 1; baseColor: (aTabGroup paneColor alphaMixed: 0.8 with: Color black); tabSelector: aTabGroup tabSelectorMorph! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'gvc 1/14/2009 15:32'! tabSelectorCellInsetFor: aTabSelector "Answer the cell inset to use for the given tab selector." ^0! ! !UIThemeWatery methodsFor: 'basic-colors' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarActiveButtonColorFor: aButton "Answer the colour for the given active taskbar button." ^self settings scrollbarColor alphaMixed: 0.7 with: Color white! ! !UIThemeWatery methodsFor: 'basic-colors' stamp: 'MarcusDenker 12/11/2009 09:36'! taskbarButtonLabelColorFor: aButton "Answer the colour for the label of the given taskbar button." ^aButton model ifNil: [super taskbarButtonLabelColorFor: aButton] ifNotNil: [:win | win isActive ifTrue: [self selectionColor darker] ifFalse: [super taskbarButtonLabelColorFor: aButton]]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarFillStyleFor: aTaskbar "Return the taskbar fillStyle for the given taskbar." |aColor c cm cd cb| aColor := self settings scrollbarColor alphaMixed: 0.5 with: aTaskbar color. c := aColor alphaMixed: 0.3 with: Color white. cm := aColor alphaMixed: 0.8 with: Color white. cd := aColor alphaMixed: 0.6 with: Color black. cb := aColor alphaMixed: 0.7 with: Color white. ^(GradientFillStyle ramp: {0.0->c. 0.1->cm. 0.9->cd. 1.0->cb}) origin: aTaskbar position; direction: 0@27; radial: false! ! !UIThemeWatery methodsFor: 'basic-colors' stamp: 'MarcusDenker 7/22/2013 13:50'! taskbarMinimizedButtonColorFor: aButton "Answer the colour for the given minimized taskbar button." ^Color transparent! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! textEditorDisabledFillStyleFor: aTextEditor "Return the disabled fillStyle for the given text editor." ^self windowColor lighter! ! !UIThemeWatery methodsFor: 'border-styles-buttons' stamp: 'MarcusDenker 7/22/2013 13:50'! textEntryCornerStyleIn: aThemedMorph "Answer the corner style to use for text entry morphs." ^#square! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! textFieldNormalFillStyleFor: aTextField "Return the normal fillStyle for the given text field." |c| c := self windowColor. ^(GradientFillStyle ramp: { 0.0->c twiceDarker. 0.05-> c lighter. 0.15-> Color white. 1.0->Color white}) origin: aTextField topLeft; direction: 0 @ aTextField height; radial: false! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'MarcusDenker 7/22/2013 13:50'! treeLineWidth "Answer the width of the tree lines." ^0! ! !UIThemeWatery methodsFor: 'fill-styles-scrollbars' stamp: 'MarcusDenker 7/22/2013 13:50'! useScrollbarThumbShadow "Answer whether a shadow morph should be displayed when dragging a scrollbar thumb." ^false! ! !UIThemeWatery methodsFor: 'accessing' stamp: 'gvc 2/16/2009 17:24'! windowActiveDropShadowStyle "Answer the style of drop shadow to use for active windows." ^windowActiveDropShadowStyle! ! !UIThemeWatery methodsFor: 'accessing' stamp: 'gvc 2/16/2009 17:22'! windowActiveDropShadowStyle: anObject "Set the value of windowActiveDropShadowStyle" windowActiveDropShadowStyle := anObject! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowActiveFillStyleFor: aWindow "Return the window active fillStyle for the given window." ^self windowColor! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'gvc 10/7/2008 12:26'! windowActiveTitleFillStyleFor: aWindow "Return the window active title fillStyle for the given window." |aColor| aColor := self windowColor. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor}) origin: aWindow labelArea topLeft; direction: 0 @ aWindow labelHeight; radial: false! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowCloseOverForm "Answer the form to use for mouse over window close buttons" ^self forms at: #windowCloseOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowClosePassiveForm "Answer the form to use for passive (background) window close buttons" ^self forms at: #windowClosePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'GaryChambers 2/15/2011 12:47'! windowInactiveFillStyleFor: aWindow "Return the window inactive fillStyle for the given window." ^self settings fadedBackgroundWindows ifTrue: [self windowColor muchLighter] ifFalse: [self windowColor] ! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'AlainPlantec 10/23/2010 17:44'! windowInactiveTitleFillStyleFor: aWindow "Return the window inactive title fillStyle for the given window." |aColor| aColor := self windowInactiveFillStyleFor: aWindow. ^(GradientFillStyle ramp: { 0.0->aColor twiceLighter. 1.0->aColor}) origin: aWindow labelArea topLeft; direction: 0 @ aWindow labelHeight; radial: false! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMaximizeOverForm "Answer the form to use for mouse over window maximize buttons" ^self forms at: #windowMaximizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMaximizePassiveForm "Answer the form to use for passive (background) window maximize/restore buttons" ^self forms at: #windowMaximizePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuIconFor: aWindow "Answer the menu icon for the given window." ^ self windowMenuForm! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuOverForm "Answer the form to use for mouse over window menu buttons" ^self forms at: #windowMenuOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMenuPassiveForm "Answer the form to use for inactive window menu buttons" ^self forms at: #windowMenuPassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMinimizeOverForm "Answer the form to use for mouse over window minimize buttons" ^self forms at: #windowMinimizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'label-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowMinimizePassiveForm "Answer the form to use for passive (background) window minimize buttons" ^self forms at: #windowMinimizePassive ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! windowPaneBorderStyleFor: aMorph in: aSystemWindow "Answer the border style for a morph that is to be added as a pane in the given system window," ^BorderStyle simple color: aSystemWindow paneColor; width: (aMorph borderWidth = 0 ifTrue: [0] ifFalse: [1])! ! !UIThemeWatery methodsFor: 'border-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! worldMainDockingBarBorderStyleFor: aDockingBar "Return the world main docking bar borderStyle for the given docking bar." ^BorderStyle simple width: 0; color: Color transparent! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'MarcusDenker 7/22/2013 13:50'! worldMainDockingBarNormalFillStyleFor: aDockingBar "Return the world main docking bar fillStyle for the given docking bar." |aColor| aColor := aDockingBar originalColor alpha: 0.7. ^(GradientFillStyle ramp: { 0.0->(aColor alphaMixed: 0.3 with: (Color white alpha: aColor alpha)). 0.8->aColor darker. 1.0->aColor darker duller}) origin: aDockingBar topLeft; direction: (aDockingBar isVertical ifTrue: [aDockingBar width @ 0] ifFalse: [0 @ aDockingBar height]); radial: false! ! !Debugger class methodsFor: 'instance creation' stamp: 'MarcusDenker 7/22/2013 10:40' prior: 20539756! informExistingDebugger: aContext label: aString "Walking the context chain, we try to find out if we're in a debugger stepping situation. If we find the relevant contexts, we must rearrange them so they look just like they would if the methods were excuted outside of the debugger." | ctx quickStepMethod oldSender baseContext | ctx := thisContext. quickStepMethod := ContextPart compiledMethodAt: #quickSend:to:with:super:. [ctx sender == nil or: [ctx sender method == quickStepMethod]] whileFalse: [ctx := ctx sender]. ctx sender == nil ifTrue: [^self]. baseContext := ctx. "baseContext is now the context created by the #quickSend... method." oldSender := ctx := ctx sender home sender. "oldSender is the context which originally sent the #quickSend... method" [ctx isNil or: [ctx receiver isKindOf: self]] whileFalse: [ctx := ctx sender]. ctx ifNil: [^self]. "ctx is the context of the Debugger method #doStep" ctx receiver labelString: aString. ctx receiver proceedValue: aContext receiver. baseContext swapSender: baseContext sender sender sender. "remove intervening contexts" thisContext swapSender: oldSender. "make myself return to debugger" ErrorRecursion := false. ^aContext! ! !Debugger class methodsFor: 'opening' stamp: 'MarcusDenker 7/22/2013 10:39' prior: 20545376! openInterrupt: aString onProcess: interruptedProcess "Open a notifier in response to an interrupt. An interrupt occurs when the user types the interrupt key (cmd-. on Macs, ctrl-c or alt-. on other systems) or when the low-space watcher detects that memory is low." | debugger | "Simulation guard" debugger := self new. debugger process: interruptedProcess controller: nil context: interruptedProcess suspendedContext. self logDebuggerStackToFile ifTrue: [(aString includesSubstring: 'Space') & (aString includesSubstring: 'low') ifTrue: [Smalltalk logError: aString inContext: debugger interruptedContext ]]. ^ debugger openNotifierContents: nil label: aString! ! !Debugger methodsFor: 'private' stamp: 'MarcusDenker 7/22/2013 10:39' prior: 20534010! process: aProcess controller: aController context: aContext super initialize. Smalltalk globals at: #MessageTally ifPresent: [ :c | c new close ]. contents := nil. interruptedProcess := aProcess. interruptedController := aController. contextStackTop := aContext. self newStack: (contextStackTop stackOfSize: 1). contextStackIndex := 1. selectingPC := true. errorWasInUIProcess := false! ! Debugger removeSelector: #externalInterrupt:! Debugger removeSelector: #contextStackListWithMultiColumn! UIThemeWatery2 removeSelector: #worldMainDockingBarNormalFillStyleFor:! UIThemeWatery2 removeSelector: #worldMainDockingBarBorderStyleFor:! UIThemeWatery2 removeSelector: #windowPaneBorderStyleFor:in:! UIThemeWatery2 removeSelector: #windowMinimizePassiveForm! UIThemeWatery2 removeSelector: #windowMinimizeOverForm! UIThemeWatery2 removeSelector: #windowMenuPassiveForm! UIThemeWatery2 removeSelector: #windowMenuOverForm! UIThemeWatery2 removeSelector: #windowMenuIconFor:! UIThemeWatery2 removeSelector: #windowMaximizePassiveForm! UIThemeWatery2 removeSelector: #windowMaximizeOverForm! UIThemeWatery2 removeSelector: #windowInactiveTitleFillStyleFor:! UIThemeWatery2 removeSelector: #windowInactiveFillStyleFor:! UIThemeWatery2 removeSelector: #windowClosePassiveForm! UIThemeWatery2 removeSelector: #windowCloseOverForm! UIThemeWatery2 removeSelector: #windowActiveTitleFillStyleFor:! UIThemeWatery2 removeSelector: #windowActiveFillStyleFor:! UIThemeWatery2 removeSelector: #windowActiveDropShadowStyle:! UIThemeWatery2 removeSelector: #windowActiveDropShadowStyle! UIThemeWatery2 removeSelector: #useScrollbarThumbShadow! UIThemeWatery2 removeSelector: #treeLineWidth! UIThemeWatery2 removeSelector: #textFieldNormalFillStyleFor:! UIThemeWatery2 removeSelector: #textEntryCornerStyleIn:! UIThemeWatery2 removeSelector: #textEditorDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #taskbarMinimizedButtonColorFor:! UIThemeWatery2 removeSelector: #taskbarFillStyleFor:! UIThemeWatery2 removeSelector: #taskbarButtonLabelColorFor:! UIThemeWatery2 removeSelector: #taskbarActiveButtonColorFor:! UIThemeWatery2 removeSelector: #tabSelectorCellInsetFor:! UIThemeWatery2 removeSelector: #tabPanelBorderStyleFor:! UIThemeWatery2 removeSelector: #tabLabelSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #tabLabelNormalFillStyleFor:! UIThemeWatery2 removeSelector: #tabLabelInsetFor:! UIThemeWatery2 removeSelector: #stripesForm! UIThemeWatery2 removeSelector: #splitterPressedFillStyleFor:! UIThemeWatery2 removeSelector: #splitterNormalFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarThumbVerticalMiddleForm! UIThemeWatery2 removeSelector: #scrollbarThumbTopForm! UIThemeWatery2 removeSelector: #scrollbarThumbRightForm! UIThemeWatery2 removeSelector: #scrollbarThumbLeftForm! UIThemeWatery2 removeSelector: #scrollbarThumbHorizontalMiddleForm! UIThemeWatery2 removeSelector: #scrollbarThumbCornerStyleIn:! UIThemeWatery2 removeSelector: #scrollbarThumbBottomForm! UIThemeWatery2 removeSelector: #scrollbarThickness! UIThemeWatery2 removeSelector: #scrollbarPressedButtonBorderStyleFor:! UIThemeWatery2 removeSelector: #scrollbarPagingAreaCornerStyleIn:! UIThemeWatery2 removeSelector: #scrollbarNormalVerticalThumbFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalThumbFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalThumbBorderStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalHorizontalThumbFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalButtonFillStyleFor:! UIThemeWatery2 removeSelector: #scrollbarNormalButtonBorderStyleFor:! UIThemeWatery2 removeSelector: #scrollbarMinimumThumbThickness! UIThemeWatery2 removeSelector: #scrollbarImageColorFor:! UIThemeWatery2 removeSelector: #scrollPaneNormalBorderStyleFor:! UIThemeWatery2 removeSelector: #resizerGripNormalFillStyleFor:! UIThemeWatery2 removeSelector: #radioButtonSelectedForm! UIThemeWatery2 removeSelector: #radioButtonSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #radioButtonSelectedDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #radioButtonNormalFillStyleFor:! UIThemeWatery2 removeSelector: #radioButtonForm! UIThemeWatery2 removeSelector: #radioButtonDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #radioButtonCornerStyleFor:! UIThemeWatery2 removeSelector: #progressBarProgressFillStyleFor:! UIThemeWatery2 removeSelector: #progressBarFillStyleFor:! UIThemeWatery2 removeSelector: #paneColorFor:! UIThemeWatery2 removeSelector: #newWindowMinimizeOverForm! UIThemeWatery2 removeSelector: #newWindowMinimizeForm! UIThemeWatery2 removeSelector: #newWindowMenuPassiveForm! UIThemeWatery2 removeSelector: #newWindowMenuOverForm! UIThemeWatery2 removeSelector: #newWindowMenuForm! UIThemeWatery2 removeSelector: #newWindowMaximizeOverForm! UIThemeWatery2 removeSelector: #newWindowMaximizeForm! UIThemeWatery2 removeSelector: #newWindowInactiveControlForm! UIThemeWatery2 removeSelector: #newWindowCloseOverForm! UIThemeWatery2 removeSelector: #newWindowCloseForm! UIThemeWatery2 removeSelector: #newTreeUnexpandedForm! UIThemeWatery2 removeSelector: #newTreeExpandedForm! UIThemeWatery2 removeSelector: #newTaskbarThumbnailIn:for:! UIThemeWatery2 removeSelector: #newStripesForm! UIThemeWatery2 removeSelector: #newScrollbarThumbVerticalMiddleForm! UIThemeWatery2 removeSelector: #newScrollbarThumbTopForm! UIThemeWatery2 removeSelector: #newScrollbarThumbRightForm! UIThemeWatery2 removeSelector: #newScrollbarThumbLeftForm! UIThemeWatery2 removeSelector: #newScrollbarThumbHorizontalMiddleForm! UIThemeWatery2 removeSelector: #newScrollbarThumbBottomForm! UIThemeWatery2 removeSelector: #newRadioButtonSelectedForm! UIThemeWatery2 removeSelector: #newRadioButtonMarkerForm! UIThemeWatery2 removeSelector: #newRadioButtonForm! UIThemeWatery2 removeSelector: #newFocusIndicatorMorphFor:! UIThemeWatery2 removeSelector: #newDialogPanelIn:! UIThemeWatery2 removeSelector: #newCloseControlIn:for:action:help:! UIThemeWatery2 removeSelector: #newCheckboxSelectedForm! UIThemeWatery2 removeSelector: #newCheckboxMarkerForm! UIThemeWatery2 removeSelector: #newCheckboxForm! UIThemeWatery2 removeSelector: #newButtonTopRightForm! UIThemeWatery2 removeSelector: #newButtonTopMiddleForm! UIThemeWatery2 removeSelector: #newButtonTopLeftForm! UIThemeWatery2 removeSelector: #newButtonSquareTopRightForm! UIThemeWatery2 removeSelector: #newButtonSquareTopLeftForm! UIThemeWatery2 removeSelector: #newButtonSquareSelectedTopRightForm! UIThemeWatery2 removeSelector: #newButtonSquareSelectedTopLeftForm! UIThemeWatery2 removeSelector: #newButtonSquareSelectedBottomRightForm! UIThemeWatery2 removeSelector: #newButtonSquareSelectedBottomLeftForm! UIThemeWatery2 removeSelector: #newButtonSquareBottomRightForm! UIThemeWatery2 removeSelector: #newButtonSquareBottomLeftForm! UIThemeWatery2 removeSelector: #newButtonSelectedTopRightForm! UIThemeWatery2 removeSelector: #newButtonSelectedTopMiddleForm! UIThemeWatery2 removeSelector: #newButtonSelectedTopLeftForm! UIThemeWatery2 removeSelector: #newButtonSelectedMiddleRightForm! UIThemeWatery2 removeSelector: #newButtonSelectedMiddleLeftForm! UIThemeWatery2 removeSelector: #newButtonSelectedBottomRightForm! UIThemeWatery2 removeSelector: #newButtonSelectedBottomMiddleForm! UIThemeWatery2 removeSelector: #newButtonSelectedBottomLeftForm! UIThemeWatery2 removeSelector: #newButtonMiddleRightForm! UIThemeWatery2 removeSelector: #newButtonMiddleLeftForm! UIThemeWatery2 removeSelector: #newButtonBottomRightForm! UIThemeWatery2 removeSelector: #newButtonBottomMiddleForm! UIThemeWatery2 removeSelector: #newButtonBottomLeftForm! UIThemeWatery2 removeSelector: #menuItemSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #menuItemInDockingBarSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #listNormalBorderStyleFor:! UIThemeWatery2 removeSelector: #initializeForms! UIThemeWatery2 removeSelector: #initialize! UIThemeWatery2 removeSelector: #expanderTitleNormalFillStyleFor:! UIThemeWatery2 removeSelector: #expanderTitleInsetFor:! UIThemeWatery2 removeSelector: #expanderTitleControlButtonWidth! UIThemeWatery2 removeSelector: #editableDropListMargins! UIThemeWatery2 removeSelector: #editableDropListInsetFor:! UIThemeWatery2 removeSelector: #dropListNormalFillStyleFor:! UIThemeWatery2 removeSelector: #dropListNormalBorderStyleFor:! UIThemeWatery2 removeSelector: #dropListInsetFor:! UIThemeWatery2 removeSelector: #dropListFocusIndicatorCornerRadiusFor:! UIThemeWatery2 removeSelector: #dropListFocusBoundsFor:! UIThemeWatery2 removeSelector: #dropListDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #dropListControlButtonWidth! UIThemeWatery2 removeSelector: #drawTextAdornmentFor:color:on:! UIThemeWatery2 removeSelector: #dockingBarNormalFillStyleFor:! UIThemeWatery2 removeSelector: #dialogWindowInactiveFillStyleFor:! UIThemeWatery2 removeSelector: #dialogWindowActiveFillStyleFor:! UIThemeWatery2 removeSelector: #createMenuBoxFor:! UIThemeWatery2 removeSelector: #createExpandBoxFor:! UIThemeWatery2 removeSelector: #createCollapseBoxFor:! UIThemeWatery2 removeSelector: #controlButtonSelectedPressedFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonSelectedMouseOverFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonSelectedDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonPressedFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonNormalFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonMouseOverFillStyleFor:! UIThemeWatery2 removeSelector: #controlButtonLabelInsetFor:! UIThemeWatery2 removeSelector: #controlButtonDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #configureWindowLabelAreaFor:! UIThemeWatery2 removeSelector: #configureWindowBorderFor:! UIThemeWatery2 removeSelector: #checkboxSelectedForm! UIThemeWatery2 removeSelector: #checkboxForm! UIThemeWatery2 removeSelector: #checkboxButtonSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #checkboxButtonSelectedBorderStyleFor:! UIThemeWatery2 removeSelector: #checkboxButtonNormalFillStyleFor:! UIThemeWatery2 removeSelector: #checkboxButtonNormalBorderStyleFor:! UIThemeWatery2 removeSelector: #checkboxButtonDisabledFillStyleFor:! UIThemeWatery2 removeSelector: #checkboxButtonDisabledBorderStyleFor:! UIThemeWatery2 removeSelector: #buttonTopRightForm! UIThemeWatery2 removeSelector: #buttonTopMiddleForm! UIThemeWatery2 removeSelector: #buttonTopLeftForm! UIThemeWatery2 removeSelector: #buttonSquareTopRightForm! UIThemeWatery2 removeSelector: #buttonSquareTopLeftForm! UIThemeWatery2 removeSelector: #buttonSquareSelectedTopRightForm! UIThemeWatery2 removeSelector: #buttonSquareSelectedTopLeftForm! UIThemeWatery2 removeSelector: #buttonSquareSelectedBottomRightForm! UIThemeWatery2 removeSelector: #buttonSquareSelectedBottomLeftForm! UIThemeWatery2 removeSelector: #buttonSquareBottomRightForm! UIThemeWatery2 removeSelector: #buttonSquareBottomLeftForm! UIThemeWatery2 removeSelector: #buttonSelectedTopRightForm! UIThemeWatery2 removeSelector: #buttonSelectedTopMiddleForm! UIThemeWatery2 removeSelector: #buttonSelectedTopLeftForm! UIThemeWatery2 removeSelector: #buttonSelectedPressedFillStyleFor:! UIThemeWatery2 removeSelector: #buttonSelectedMiddleRightForm! UIThemeWatery2 removeSelector: #buttonSelectedMiddleLeftForm! UIThemeWatery2 removeSelector: #buttonSelectedFillStyleFor:! UIThemeWatery2 removeSelector: #buttonSelectedBottomRightForm! UIThemeWatery2 removeSelector: #buttonSelectedBottomMiddleForm! UIThemeWatery2 removeSelector: #buttonSelectedBottomLeftForm! UIThemeWatery2 removeSelector: #buttonPressedFillStyleFor:! UIThemeWatery2 removeSelector: #buttonPlainMiddleColor! UIThemeWatery2 removeSelector: #buttonPlainFillStyleFor:! UIThemeWatery2 removeSelector: #buttonPanelNormalFillStyleFor:! UIThemeWatery2 removeSelector: #buttonNormalFillStyleFor:! UIThemeWatery2 removeSelector: #buttonNormalBorderStyleFor:! UIThemeWatery2 removeSelector: #buttonMinWidth! UIThemeWatery2 removeSelector: #buttonMinHeight! UIThemeWatery2 removeSelector: #buttonMiddleRightForm! UIThemeWatery2 removeSelector: #buttonMiddleLeftForm! UIThemeWatery2 removeSelector: #buttonLabelInsetFor:! UIThemeWatery2 removeSelector: #buttonLabelForText:! UIThemeWatery2 removeSelector: #buttonFocusIndicatorCornerRadiusFor:! UIThemeWatery2 removeSelector: #buttonFocusBoundsFor:! UIThemeWatery2 removeSelector: #buttonCornerStyleIn:! UIThemeWatery2 removeSelector: #buttonColouredMiddleColor! UIThemeWatery2 removeSelector: #buttonColouredFillStyleFor:! UIThemeWatery2 removeSelector: #buttonBottomRightForm! UIThemeWatery2 removeSelector: #buttonBottomMiddleForm! UIThemeWatery2 removeSelector: #buttonBottomLeftForm! UIThemeWatery2 removeSelector: #baseScrollbarColorFor:! UIThemeWatery2 class removeSelector: #themeName! UIThemeWatery2 class removeSelector: #newDefaultSettings! Smalltalk globals removeClassNamed: #UIThemeWatery2! UITheme removeSelector: #editableDropListInsetFor:! UITheme removeSelector: #buttonPanelNormalFillStyleFor:! UIThemeVistary removeSelector: #editableDropListInsetFor:! UIThemeVistary removeSelector: #buttonPanelNormalFillStyleFor:! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(22 July 2013 3:05:33 pm) Pharo.image priorSource: 12176774! ----STARTUP----an Array(22 July 2013 3:15:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 July 2013 3:15:53 pm) Pharo-30292.image priorSource: 12333922! ----STARTUP----an Array(22 July 2013 5:16:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/22/2013 17:14' prior: 45731506! commentForCurrentUpdate ^ '11215 EyeInspector>>selectedElement fails when selectedIndex=0 and the list is empty https://pharo.fogbugz.com/f/cases/11215 11199 CodeCritics browser cannot be opened any more. https://pharo.fogbugz.com/f/cases/11199 11214 Fix for Theme Watery https://pharo.fogbugz.com/f/cases/11214'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/22/2013 17:14'! script128 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.42.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.534.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.94.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.63.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.48.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1190.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/22/2013 17:14'! update30293 "self new update30293" self withUpdateLog: '11215 EyeInspector>>selectedElement fails when selectedIndex=0 and the list is empty https://pharo.fogbugz.com/f/cases/11215 11199 CodeCritics browser cannot be opened any more. https://pharo.fogbugz.com/f/cases/11199 11214 Fix for Theme Watery https://pharo.fogbugz.com/f/cases/11214'. self loadTogether: self script128 merge: false. PharoTheme addSubclass: PharoOrangeTheme. self flushCaches. ! ! "ScriptLoader30"! !CriticBrowser methodsFor: 'private' stamp: 'BenjaminVanRyseghem 7/22/2013 16:33' prior: 33893875! applyRules | packageCount nbPackage process rules | rules := rulesModel roots first. rules resetResult. nbPackage := rbEnvironment packages size. packageCount := 0. self updateTree. process := [ rbEnvironment packages do: [ :package | | windowTitle | packageCount := packageCount + 1. windowTitle := String streamContents: [ :s | s << 'run rules on ' << package packageName << ' (' << packageCount asString << '/' << nbPackage asString << ')' ]. self setTitle: windowTitle. package packageSet packages do: [ :RPa | checker runRules: rules onPackage: RPa withoutTestCase: removeTestCase] ]. checker rule: rules. self setTitle: 'Critics Browser'. cache packages: rbEnvironment. cache initCache. self updateTree. self registerToAnnouncements ] newProcess. process name: 'SmallLint'. process resume. ! ! !UIThemeWatery class methodsFor: 'testing' stamp: 'MarcusDenker 7/22/2013 17:13'! isAbstract ^false! ! !TreeModel methodsFor: 'drag and drop - private' stamp: 'ChristopheDemarey 7/19/2013 17:34' prior: 45553819! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w scrollerSubMorphFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 7/22/2013 16:34'! whenSelectedItemChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: [ :col | col ifNil: [ aBlock value: nil ] ifNotNil: [ col isEmpty ifTrue: [ aBlock value: nil ] ifFalse: [ aBlock value: col first ] ] ]! ! !EyeInspector methodsFor: 'accessing' stamp: 'AndreiChis 7/22/2013 16:28' prior: 41635818! selectedElement ^ list selectedItem ifNil: [ "sometimes the new list model desynchronize its selected index from its selected element, this mean that the inspector evaluates 'list setSelectedIndex: 1' but 'list selectedItem' still returns nil. This code fixes this case, that is triggered for example when you do Cmd+c in an ObjectExplorer." list selectedIndex ifNotNil: [ :currentIndex | list listItems ifNotEmpty: [ :aList | aList at: currentIndex ] ] ]! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/22/2013 16:30' prior: 33876494! nextAction | rules rbRule | self delete. rules := selectedModel roots. rules do: [ :each | each leaves do: [ :leave | (selectRule anySatisfy: [ :r | r = leave ]) ifFalse: [ each removeRule: leave ] ] ]. rules := rules reject: [ :each | each rules isEmpty ]. rbRule := RBCompositeLintRule new name: self defaultRulesRootName; rules: rules. CriticWorkingConfiguration current rule: rbRule; environment: environment; removeTestCase: removeTestCase. CriticBrowser openOnWorkspace: CriticWorkingConfiguration current! ! "Manifest-CriticBrowser"! "Polymorph-Widgets"! "Spec-Inspector"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(22 July 2013 5:17:12 pm) Pharo.image priorSource: 12334121! ----STARTUP----an Array(22 July 2013 5:26:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 July 2013 5:26:38 pm) Pharo-30293.image priorSource: 12348389! ----STARTUP----an Array(23 July 2013 1:28:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(23 July 2013 1:28:20 pm) Pharo.image priorSource: 12348588! ----STARTUP----an Array(23 July 2013 1:41:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 July 2013 1:41:16 pm) Pharo-30293.image priorSource: 12348797! ----STARTUP----an Array(23 July 2013 3:07:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(23 July 2013 3:07:19 pm) Pharo.image priorSource: 12348996! ----STARTUP----an Array(23 July 2013 3:17:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 July 2013 3:17:25 pm) Pharo-30293.image priorSource: 12349205! ----STARTUP----an Array(24 July 2013 10:40:20 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(24 July 2013 10:40:25 am) Pharo.image priorSource: 12349404! ----STARTUP----an Array(24 July 2013 10:49:49 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 July 2013 10:49:50 am) Pharo-30293.image priorSource: 12349614! ----STARTUP----an Array(24 July 2013 10:59:13 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/24/2013 10:55' prior: 45888853! commentForCurrentUpdate ^ '11216 Integrate the new version of the debugger https://pharo.fogbugz.com/f/cases/11216 11212 wrong method used to create a debugger in SyntaxError>>notify:at:in: https://pharo.fogbugz.com/f/cases/11212 11220 Speed up test run: remove #testClassDescriptionAllSubInstances https://pharo.fogbugz.com/f/cases/11220'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/24/2013 10:55'! script129 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.536.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.94.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.24.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.96.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.48.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1193.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/24/2013 10:55'! update30294 "self new update30294" self withUpdateLog: '11216 Integrate the new version of the debugger https://pharo.fogbugz.com/f/cases/11216 11212 wrong method used to create a debugger in SyntaxError>>notify:at:in: https://pharo.fogbugz.com/f/cases/11212 11220 Speed up test run: remove #testClassDescriptionAllSubInstances https://pharo.fogbugz.com/f/cases/11220'. self loadTogether: self script129 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DebugSession commentStamp: '' prior: 42216004! A DebugSession models a debuggeing session. It contains the interrupted context and process. Its main goal is to handle debugger actions such as restart or stepInto, as well as recomplilation of methods. It is the model used as an input to a ui. As it is just a model it does now contain any information related to the ui. For example, it does not know what a selection in the ui is. It is the job on the ui to maintain the selection and call this session with the propper context. To create sessions use the mehod 'process: aProcess context: aContext'. aContext must be a context belonging to aProcess, and aProcess must be an interrupted process. Instance Variables context: errorWasInUIProcess: process: context - xxxxx errorWasInUIProcess - xxxxx process - xxxxx ! !SpecDebuggerToolbar commentStamp: '' prior: 42698749! I maintain a list of buttons for the most important debugging actions. The execution of all actions is delegated to the session. When I'm created I do not have any buttons. To update the buttons users should send me the message 'update'. The session can be set before or after opening the toolbar. ! !SpecPreDebugWindow commentStamp: '' prior: 0! I am the window that shows up when the debugger is launched. I show you the first lines of the stack trace that caused my apparition, and buttons to allow you to: - resume the execution - abandon the execution - debug this error - create the method if it is MessageNotUnderstood exception To see me, evaluate: 2/0. Some details about my implementation. - I hold a reference to the debugger than created my; - changing the debuger retriggers the construction of this window; - before doing this users should set the attribute 'message' as my structure depens on it; - changing the debugger should be done only after this window was open. E.g.: SpecPreDebugWindow new setTitle: aTitle; message: aMessage; openWithSpec; debugger: aDebugger. - an example of manually opening this window: [ | context process debugger | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := SpecDebugger new process: process controller: nil context: context. SpecPreDebugWindow new setTitle: 'A simulated error'; message: nil; openWithSpec; debugger: debugger ] fork.! !SpecDebugger commentStamp: '' prior: 42698352! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecProxyDebugger class methodsFor: 'class initialization' stamp: 'AndreiChis 7/24/2013 10:17' prior: 34281892! initialize "Add ourselves to registry. See [Smalltalk tools]" "Smalltalk tools register: self as: #debugger"! ! !SpecProxyDebugger methodsFor: 'notifier menu' stamp: 'AndreiChis 7/18/2013 16:22' prior: 34282780! spawnSpecDebugger | topView | topView := self topView. topView model: nil. "so close won't release me." self breakDependents. topView delete. (self debuggerClass debugSession: ((self debuggerClass spanNewSessionForContext: self interruptedContext fromProcess: self interruptedProcess) errorWasInUIProcess: errorWasInUIProcess)) updateToolbar! ! !SyntaxError methodsFor: 'other' stamp: 'AndreiChis 7/24/2013 09:56' prior: 43797878! notify: anError at: aLocation in: source "Open a syntax error view, inserting the given error message into the given source at the given location. This message is sent to the 'requestor' when the parser or compiler finds a syntax error." | aClass | aClass := thisContext sender receiver encoder classEncoding. self setClass: aClass code: source error: anError location: aLocation debugger: (Smalltalk tools debugger context: thisContext) doitFlag: false. self class open: self. ! ! !DebugSession commentStamp: '' prior: 45915396! A DebugSession models a debuggeing session. It contains the interrupted context and process. Its main goal is to handle debugger actions such as restart or stepInto, as well as recomplilation of methods. It is the model used as an input to a ui. As it is just a model it does now contain any information related to the ui. For example, it does not know what a selection in the ui is. It is the job on the ui to maintain the selection and call this session with the propper context. To create sessions use the mehod 'process: aProcess context: aContext'. aContext must be a context belonging to aProcess, and aProcess must be an interrupted process. Instance Variables context: errorWasInUIProcess: process: context - xxxxx errorWasInUIProcess - xxxxx process - xxxxx ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 7/19/2013 17:52' prior: 34290270! activePC: aContext ^ (self isLatestContext: aContext) ifTrue: [ interruptedContext pc ] ifFalse: [ self previousPC: aContext ].! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:54' prior: 34291410! clear "If after resuming the process the user does plan to reuse this session with the same process, it should call this method." interruptedProcess := nil. self updateContextTo: nil! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/19/2013 17:53' prior: 34291663! context ^ interruptedContext! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/22/2013 14:27' prior: 34291896! createMethodInContext: aContext "Should only be called when the debugger was created in response to a MessageNotUnderstood exception. Create a stub for the method that was missing and proceed into it." | msg chosenClass | "Added due to error 3011 - Hernan" aContext = self interruptedContext ifFalse: [ ^ UIManager default inform: 'Please select the #doesNotUnderstand: context']. msg := self interruptedContext tempAt: 1. chosenClass := self askForSuperclassOf: self interruptedContext receiver class toImplement: msg selector ifCancel: [^self]. self implement: msg inClass: chosenClass.! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/19/2013 17:53' prior: 34292563! createModelForContext: aContext ^ (DebugContext forContext: aContext) topContext: interruptedContext! ! !DebugSession methodsFor: 'initialization' stamp: 'AndreiChis 7/19/2013 17:53' prior: 34293115! errorWasInUIProcess: aBoolean errorWasInUIProcess := aBoolean! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 7/22/2013 14:27' prior: 41653453! implement: aMessage inClass: aClass aClass compile: (DynamicMessageImplementor for: aMessage in: aClass) value classified: (self askForCategoryIn: aClass default: 'as yet unclassified'). self interruptedContext privRefreshWith: (aClass lookupSelector: aMessage selector). self interruptedContext method numArgs > 0 ifTrue: [(self interruptedContext tempAt: 1) arguments withIndexDo: [:arg :index| self interruptedContext tempAt: index put: arg]]. self contextChanged ! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/22/2013 14:14'! interruptedContext ^ interruptedContext! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/22/2013 14:14'! interruptedProcess ^ interruptedProcess! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 7/19/2013 17:54' prior: 34294072! isContextPostMortem: selectedContext "return whether we're inspecting a frozen exception without a process attached" | suspendedContext | suspendedContext := interruptedProcess suspendedContext. suspendedContext ifNil: [ ^ false ]. (suspendedContext == selectedContext) ifTrue: [ ^ false ]. ^ (suspendedContext findContextSuchThat: [:c | c sender == selectedContext]) isNil! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34294518! isInterruptedContextATest ^ (self isTestObject: self interruptedContext receiver) and: [ self isTestMethod: self interruptedContext method of: self interruptedContext receiver ]! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34294741! isInterruptedContextDoesNotUnderstand ^ self interruptedContext selector == #doesNotUnderstand:! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 7/19/2013 17:58' prior: 34294905! isLatestContext: aContext ^ interruptedProcess suspendedContext == aContext! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:55'! peelToFirstLike: aContext "Peel the stack back to the second occurance of the currently selected message. Very useful for an infinite recursion. Gets back to the second call so you can see one complete recursion cycle, and how it was called at the beginning. Also frees a lot of space!!" | ctxt | self flag: 'should be called only on the selected context'. (self isContextPostMortem: aContext) ifTrue: [^ self]. ctxt := interruptedProcess popTo: aContext findSecondToOldestSimilarSender. self updateContextTo: ctxt. self contextChanged ! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34295877! prepareTestToRunAgain self interruptedContext receiver prepareToRunAgain! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/19/2013 17:55' prior: 34296186! process ^ interruptedProcess! ! !DebugSession methodsFor: 'initialization' stamp: 'AndreiChis 7/22/2013 13:27' prior: 34296287! process: aProcess context: aContext "aProcess stepToSendOrReturn ." "aProcess isSuspended ifTrue: [ aProcess stepToSendOrReturn ]." interruptedProcess := aProcess. interruptedContext := self filterTopContext: aContext. interruptedContext isNil ifTrue: [interruptedContext := aContext]. ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:48' prior: 41654357! recompileMethodTo: text inContext: aContext notifying: aNotifyer "The retrieved information has changed and its source must now be updated. In this case, the retrieved information is the method of the given context." | newMethod recompilationContext | (recompilationContext := (self createModelForContext: aContext) locateClosureHomeWithContent: text) ifNil: [ ^ false ]. newMethod := (self createModelForContext: recompilationContext) recompileCurrentMethodTo: text notifying: aNotifyer. newMethod ifNil: [ ^ false ]. newMethod isQuick ifTrue: [ recompilationContext := self downInContext: recompilationContext. recompilationContext jump: (recompilationContext previousPc - recompilationContext pc) ]. self rewindContextToMethod: newMethod fromContext: recompilationContext. "Use an alarm instead of triggering the notification directly, as the content of the editor can still be unaccepted. " self installAlarm: #contextChanged. ^ true! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:48' prior: 34297439! restart: aContext "Proceed from the initial state of selectedContext." "Closing now depends on a setting (RestartAlsoProceeds class variable) --> not supported in this version" (self isContextPostMortem: aContext) ifTrue: [^ self]. self unwindAndRestartToContext: aContext. "Issue 3015 - Hernan" self isInterruptedContextATest ifTrue: [ self prepareTestToRunAgain ]. self triggerEvent: #restart ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34297958! resume "Proceed execution of the receiver's model, starting after the expression at which an interruption occurred." "If the user of this session does not plan to reuse it, it should call 'self clean' " Smalltalk okayToProceedEvenIfSpaceIsLow ifTrue: [ (self isContextPostMortem: self interruptedContext) ifTrue: [^ self]. self resumeProcess. self triggerEvent: #resume]. ! ! !DebugSession methodsFor: 'private' stamp: 'AndreiChis 7/19/2013 17:56' prior: 34298412! resumeProcess "Make sure the interrupted process is restored properly and restart the low space handler" interruptedProcess isTerminated ifFalse: [errorWasInUIProcess ifTrue: [UIManager default resumeUIProcess: interruptedProcess] ifFalse: [interruptedProcess resume]]. Smalltalk installLowSpaceWatcher. "restart low space handler". ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:56'! returnValueFrom: aContext "Force a return of a given value to the previous context!!" | previous expression value | self flag: 'should be called only on the selected context'. (self isContextPostMortem: aContext) ifTrue: [^ self]. expression := UIManager default request: 'Enter expression for return value:'. value := self class compiler evaluate: expression in: aContext to: aContext receiver. previous := aContext sender. " self resetContext: previous." interruptedProcess popTo: previous value: value. self updateContextTo: previous. self contextChanged ! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 7/19/2013 17:56' prior: 34298812! rewindContextToMethod: aMethod fromContext: aContext "this method is typically to be used after a hot compilation of a method from the stack. in order to return to the context containg the compiled method." | ctxt | ctxt := interruptedProcess popTo: aContext. ctxt == aContext ifFalse: [ self inform: 'Method saved, but current context unchanged\because of unwind error. Click OK to see error' withCRs ] ifTrue: [ aMethod isQuick ifFalse: [ interruptedProcess restartTopWith: aMethod; stepToSendOrReturn ] ]. self updateContextTo: ctxt. "Issue 3015 - Hernan" self isInterruptedContextATest ifTrue: [ self prepareTestToRunAgain ].! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34299544! runToSelection: selectionInterval inContext: aContext "Attempt to step over instructions in selectedContext until the execution reaches the selected instruction. This happens when the program counter passes the begining of selectionInterval. A not nill and valid interval is expected." (self pcRangeForContext: aContext) first >= selectionInterval first ifTrue: [ ^self ]. self stepOver: aContext. [ aContext == self interruptedContext and: [ (self pcRangeForContext: aContext) first < selectionInterval first ] ] whileTrue: [ self stepOver: aContext ]! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/19/2013 17:56' prior: 34300541! stack ^ interruptedContext stack! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 7/19/2013 17:56' prior: 34300641! stackOfSize: size ^ interruptedContext stackOfSize: size! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:56' prior: 34300773! stepInto self stepInto: interruptedContext! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34300892! stepInto: aContext "Send the selected message in selectedContext, and take control in the method invoked to allow further step or send." (self isContextPostMortem: aContext) ifTrue: [^ self]. interruptedProcess step: aContext. self updateContextTo: interruptedProcess stepToSendOrReturn. self triggerEvent: #stepInto! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34301302! stepOver self stepOver: interruptedContext! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34301421! stepOver: aContext "Send the selected message in selectedContext, and regain control after the invoked method returns." | newContext | (self isContextPostMortem: aContext) ifTrue: [^ self]. newContext := interruptedProcess completeStep: aContext. self updateContextTo: (newContext == aContext ifTrue: [ interruptedProcess stepToSendOrReturn ] ifFalse: [ newContext ]). self triggerEvent: #stepOver ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34301933! stepThrough self stepThrough: interruptedContext! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34302058! stepThrough: aContext "Send messages until you return to selectedContext. Used to step into a block in the method." (self isContextPostMortem: aContext) ifTrue: [^ self]. interruptedProcess stepToHome: aContext. self updateContextTo: interruptedProcess stepToSendOrReturn. self triggerEvent: #stepThrough ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/22/2013 14:28' prior: 34302462! terminate "Action that needs to be executed after the window containing this debug session is closed, in order to terminate the right process." self interruptedProcess isNil ifFalse: [ "Assume the user closed the debugger. Simply kill the interrupted process." self interruptedProcess terminate. self clear. Smalltalk installLowSpaceWatcher. "restart low space handler" ] ifTrue: [ "Assume the interrupted process was resumed." "Kill the active process if the error was in the UI as there should be only one UI process." errorWasInUIProcess == false ifFalse: [Processor terminateActive] ] ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 7/20/2013 09:26'! toggleBreakOnEntryFor: aContext "Install or uninstall a halt-on-entry breakpoint" | selectedMethod | self flag: 'should be called only on the selected context'. selectedMethod := aContext classOrMetaClass >> aContext messageName. selectedMethod hasBreakpoint ifTrue: [BreakpointManager unInstall: selectedMethod] ifFalse: [BreakpointManager installInClass: aContext classOrMetaClass selector: aContext messageName].! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34303149! unwindAndRestartToContext: aContext |ctx| ctx := interruptedProcess popTo: aContext. ctx == aContext ifTrue: [ "Only restart the process if the stack was unwind" interruptedProcess restartTop; stepToSendOrReturn ]. self flag: 'Should a warning be displayed if the the unwind failed?'. self updateContextTo: aContext! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34303537! updateContextTo: aContext interruptedContext := aContext! ! !DebugSession methodsFor: 'updating' stamp: 'AndreiChis 7/19/2013 17:57' prior: 34303661! updateWithContext: newContext fromProcess: aProcess self process: aProcess context: newContext! ! !MethodContext methodsFor: '*DebuggerModel' stamp: 'AndreiChis 7/20/2013 09:22'! classOrMetaClass ^ self methodClass! ! !MethodContext methodsFor: '*DebuggerModel' stamp: 'AndreiChis 7/20/2013 09:18'! messageName "Answer the message selector of this context. If the method is unbound we can still usefully answer its old selector." | selector | selector := self methodSelector. ^(selector ~~ self method selector and: [selector beginsWith: 'DoIt']) ifTrue: [self method selector] ifFalse: [selector]! ! !SpecDebuggerToolbar commentStamp: '' prior: 45916274! I maintain a list of buttons for the most important debugging actions. The execution of all actions is delegated to the session. When I'm created I do not have any buttons. To update the buttons users should send me the message 'update'. The session can be set before or after opening the toolbar. ! !SpecDebuggerToolbar class methodsFor: 'specs' stamp: 'AndreiChis 7/18/2013 14:36' prior: 34273898! spec ^ SpecLayout composed! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 15:03'! browseClassRefs self currentContext ifNotNil: [ :aContext || class| class := aContext methodClass theNonMetaClass. class isTrait ifTrue: [ self systemNavigation browseAllUsersOfTrait: class ] ifFalse: [ self systemNavigation browseAllCallsOnClass: class ] ] ! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:39'! browseClassVarRefs "1/17/96 sw: devolve responsibility to the class, so that the code that does the real work can be shared" | cls | cls := self currentClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseClassVarRefs: cls]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:38'! browseClassVariables "Browse the class variables of the selected class." | cls | cls := self currentClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseClassVariables: cls] ! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:41'! browseInstVarRefs "1/26/96 sw: real work moved to class, so it can be shared" | cls | cls := self currentClassOrMetaClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseInstVarRefs: cls]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 17:16'! browseMessages "Present a menu of all messages sent by the current message. Open a message set browser of all implementors of the message chosen." self currentMessageName ifNotNil: [ self systemNavigation browseAllImplementorsOf: self currentMessageName ]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 15:01'! browseMethodFull "Create and schedule a full Browser and then select the current class and message." self currentClassOrMetaClass ifNotNil: [ Smalltalk tools browser fullOnClass: self currentClassOrMetaClass selector: self currentMessageName ]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 17:19'! browseSendersOfMessages "Present a menu of the current message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self currentMessageName ifNotNil: [ self systemNavigation browseAllCallsOn: self currentMessageName ]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:42'! browseVersions "Create and schedule a message set browser on all versions of the currently selected message selector." | class selector | class := self currentClassOrMetaClass. selector := self currentMessageName. Smalltalk tools versionBrowser browseVersionsOf: (class compiledMethodAt: selector) class: self currentClass theNonMetaClass meta: class isMeta category: self currentMessageCategoryName selector: selector! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 15:08'! buildButtonWidgetsSpec ^ self validButtonIds inject: OrderedCollection new into: [ :specs :id | specs add: id; add: #ButtonModel; yourself ] ! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 17:15'! clearToolbar self widgets removeAll. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self emptyLayout ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/23/2013 14:31'! copyToClipboard Clipboard clipboardText: (String streamContents: [ :s| self debugger interruptedContext shortDebugStackOn: s ]).! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 14:51'! createWidgets self instantiateModels: self buildButtonWidgetsSpec. self widgets keysDo: [ :key | (self perform: ('initialize', key capitalized) asSymbol) ]. self setFocusOrder! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:38'! currentClass ^ self currentContext methodClass! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 14:51'! currentClassOrMetaClass ^ self currentContext classOrMetaClass! ! !SpecDebuggerToolbar methodsFor: 'accessing' stamp: 'AndreiChis 7/17/2013 11:02' prior: 34274588! currentContext ^ self debugger currentContext! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:43'! currentMessageCategoryName "Answer the name of the message category of the message of the currently selected context." ^ self currentClass organization categoryOfElement: self currentMessageName! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 14:58'! currentMessageName ^ self currentContext messageName! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 16:25'! dynamicLayout ^ SpecLayout composed newRow: [ :r | self validButtonIds do: [ :id | r add: id ] ]! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 17:15'! emptyLayout ^ SpecLayout composed ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/23/2013 14:02'! expandStackBy: anInteger | selectionIndex | selectionIndex := self debugger stack selectedIndex. self debugger stack items: (self session stackOfSize: anInteger + self debugger stack listSize). self debugger stack setSelectedIndex: selectionIndex. self updateFullStackButton ! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 15:00'! fileOutMessage "Put a description of the selected message on a file" self currentMessageName ifNotNil: [ Cursor write showWhile: [ self currentClassOrMetaClass fileOutMethod: self currentMessageName ] ]! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/23/2013 10:27'! fullStackAction self expandStackBy: self debugger class expandedStackSize ! ! !SpecDebuggerToolbar methodsFor: 'testing' stamp: 'AndreiChis 7/18/2013 16:31'! hasCreateMethodAction ^ self widgets keys includes: #createMethodButton! ! !SpecDebuggerToolbar methodsFor: 'testing' stamp: 'AndreiChis 7/23/2013 13:50'! hasFullStackAction ^ self widgets keys includes: #fullStackButton! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:38' prior: 34275427! initializeCreateMethodButton self createMethodButton label: 'Create'; state: false; enabled: self shouldEnableCreateMethodButton; askBeforeChanging: true; action: [ self createMethodAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 7/23/2013 12:51'! initializeFullStackButton self fullStackButton label: 'Full Stack'; state: false; enabled: self shouldEnableFullStackButton; askBeforeChanging: true; action: [ self fullStackAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 7/23/2013 14:01' prior: 34275721! initializePresenter super initializePresenter. "session whenChangedDo: [ self update ]." selectedContext whenChangedDo: [ self updateCreateMethodButton ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:38' prior: 34275929! initializeRestartButton self restartButton label: 'Restart'; state: false; askBeforeChanging: true; action: [ self restartAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:38' prior: 34276159! initializeResumeButton self resumeButton label: 'Proceed'; state: false; askBeforeChanging: true; action: [ self resumeAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:39' prior: 34276388! initializeRunToSelectionButton self runToSelectionButton label: 'Run to Here'; state: false; askBeforeChanging: true; action: [ self runToSelectionAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:39' prior: 34276645! initializeStepIntoButton self stepIntoButton label: 'Into'; state: false; askBeforeChanging: true; action: [ self stepIntoAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:39' prior: 34276875! initializeStepOverButton self stepOverButton label: 'Over'; state: false; askBeforeChanging: true; action: [ self stepOverAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 4/2/2013 09:39' prior: 34277105! initializeStepThroughButton self stepThroughButton label: 'Through'; state: false; askBeforeChanging: true; action: [ self stepThroughAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 2/4/2013 14:51' prior: 34277349! initializeWhereIsButton self whereIsButton label: 'Where'; state: false; action: [ self whereIsAction ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 7/18/2013 16:08' prior: 34277552! initializeWidgets ! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 14:52'! inspectInstances "Inspect all instances of the selected class." self currentClassOrMetaClass ifNotNil: [ :aClass | aClass theNonMetaClass inspectAllInstances ]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/22/2013 14:51'! inspectSubInstances "Inspect all instances of the selected class and all its subclasses" self currentClassOrMetaClass ifNotNil: [ :aClass | aClass theNonMetaClass inspectSubInstances ]! ! !SpecDebuggerToolbar methodsFor: 'actions browsing' stamp: 'AndreiChis 7/23/2013 14:44'! methodHierarchy "Create and schedule a method browser on the hierarchy of implementors." self systemNavigation methodHierarchyBrowserForClass: self currentClassOrMetaClass selector: self currentMessageName ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/22/2013 19:16'! peelToFirst self okToChange ifTrue: [ self session peelToFirstLike: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/18/2013 16:08'! rebuildToolbar self widgets removeAll. self createWidgets. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self dynamicLayout! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/22/2013 19:16'! returnValue self okToChange ifTrue: [ self session returnValueFrom: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'initialization' stamp: 'AndreiChis 7/18/2013 15:03'! setFocusOrder self focusOrder removeAll. self validButtonIds do: [ :id | self focusOrder add: (self perform: id) ]! ! !SpecDebuggerToolbar methodsFor: 'testing' stamp: 'AndreiChis 7/22/2013 14:26' prior: 34279756! shouldEnableCreateMethodButton ^ self session ifNil: [false] ifNotNil: [:aSession | aSession isInterruptedContextDoesNotUnderstand and: [aSession interruptedContext = self currentContext] ] ! ! !SpecDebuggerToolbar methodsFor: 'testing' stamp: 'AndreiChis 7/23/2013 13:04'! shouldEnableFullStackButton self debugger ifNil: [ ^ false ]. ^ self debugger stack listItems ifEmpty: [ false ] ifNotEmpty: [ :aList | aList last sender notNil ] ! ! !SpecDebuggerToolbar methodsFor: 'actions' stamp: 'AndreiChis 7/22/2013 19:17'! toggleBreakOnEntry self okToChange ifTrue: [ self session toggleBreakOnEntryFor: self currentContext ]! ! !SpecDebuggerToolbar methodsFor: 'updating' stamp: 'AndreiChis 7/18/2013 17:15'! update self session ifNil: [ self clearToolbar ] ifNotNil: [ self rebuildToolbar ] ! ! !SpecDebuggerToolbar methodsFor: 'updating' stamp: 'AndreiChis 7/18/2013 16:28' prior: 34281152! updateCreateMethodButton self hasCreateMethodAction ifTrue: [ self createMethodButton enabled: self shouldEnableCreateMethodButton ]! ! !SpecDebuggerToolbar methodsFor: 'updating' stamp: 'AndreiChis 7/23/2013 13:55'! updateFullStackButton self hasFullStackAction ifTrue: [ self fullStackButton enabled: self shouldEnableFullStackButton ]! ! !SpecDebuggerToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 7/22/2013 18:58'! validButtonIds ^ (self session isContextPostMortem: self currentContext) ifFalse: [ #( #resumeButton #restartButton #stepIntoButton #stepOverButton #stepThroughButton #fullStackButton #runToSelectionButton #whereIsButton #createMethodButton) ] ifTrue: [ #( #fullStackButton #whereIsButton #createMethodButton) ] ! ! !SpecPreDebugWindow commentStamp: '' prior: 45916634! I am the window that shows up when the debugger is launched. I show you the first lines of the stack trace that caused my apparition, and buttons to allow you to: - resume the execution - abandon the execution - debug this error - create the method if it is MessageNotUnderstood exception To see me, evaluate: 2/0. Some details about my implementation. - I hold a reference to the debugger than created my; - changing the debuger retriggers the construction of this window; - before doing this users should set the attribute 'message' as my structure depens on it; - changing the debugger should be done only after this window was open. E.g.: SpecPreDebugWindow new setTitle: aTitle; message: aMessage; openWithSpec; debugger: aDebugger. - an example of manually opening this window: [ | context process debugger | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := SpecDebugger new process: process controller: nil context: context. SpecPreDebugWindow new setTitle: 'A simulated error'; message: nil; openWithSpec; debugger: debugger ] fork.! !SpecPreDebugWindow class methodsFor: 'accessing' stamp: 'AndreiChis 7/14/2013 13:00'! debuggerClass ^ SpecDebugger! ! !SpecPreDebugWindow class methodsFor: 'specs' stamp: 'AndreiChis 7/13/2013 20:12'! spec ^ SpecLayout composed yourself! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 7/14/2013 15:32'! abandonAction self window delete! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/16/2013 16:39'! buildButtonWidgetsSpec | specs | specs := OrderedCollection new. (self session isContextPostMortem: self debugger interruptedContext) ifFalse: [ specs addAll: {#resumeButton. #ButtonModel}. ]. "Only proceed if there is a process available." specs addAll: {#abandonButton. #ButtonModel}. specs addAll: {#debugButton. #ButtonModel}. self session isInterruptedContextDoesNotUnderstand ifTrue: [ specs addAll: {#createMethodButton. #ButtonModel}]. ^ specs ! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 19:58'! buildNotifierPaneWidgetsSpec ^ self message ifNil: [ {#stackPane. #MultiColumnListModel} ] ifNotNil: [ {#codePane. #TextModel} ]! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 19:42'! buttonWidgetsAssociations "Return the associations containing all button subwidgets. Assume the key of a button widget ends with 'Button'. " ^ self widgets associationsSelect: [ :anAssociation | anAssociation key asString endsWith: 'Button' ] ! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 15:44'! clearWidget self widgets removeAll. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self emptyLayout ! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 7/14/2013 15:31'! close self debugger ifNotNil: [ :aDebugger | aDebugger close ]! ! !SpecPreDebugWindow methodsFor: 'printing' stamp: 'AndreiChis 7/23/2013 17:41'! columnsFor: anEntry ^ self class debuggerClass columnsFor: anEntry! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 7/16/2013 16:51'! createMethodAction "The create method from the session will trigger #contextChanged, which will make the debgger update the stack. Sof it safe to just open the debugger." self session createMethodInContext: self debugger interruptedContext. self debugAction! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/16/2013 16:17'! createWidgets self instantiateModels: self buildNotifierPaneWidgetsSpec. self instantiateModels: self buildButtonWidgetsSpec. self widgets keysDo: [ :key | (self perform: ('initialize', key asString capitalized) asSymbol) ]. self setFocusOrder! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 7/18/2013 16:36'! debugAction | currentDebugger | currentDebugger := self debugger. self debugger: nil. self abandonAction. currentDebugger openWithSpec; updateToolbar; label: title! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'AndreiChis 7/14/2013 14:43'! debugger ^ debugger contents! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'AndreiChis 7/14/2013 14:43'! debugger: anOnject debugger contents: anOnject! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 19:43'! dynamicLayout "Create a two column layout for the subwidgets. Assume there is just one subwidget that is not a button." | notifierPaneKey buttonKeys | buttonKeys := self buttonWidgetsAssociations keys. notifierPaneKey := self notifierPaneWidgetAssociation key. ^ SpecLayout composed newColumn: [ :c | c newRow: [ :row | buttonKeys do: [ :aKey | row add: aKey ] ] height: self class toolbarHeight. c newRow: [ :row | row add: notifierPaneKey] ]! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 15:44'! emptyLayout ^ SpecLayout composed ! ! !SpecPreDebugWindow methodsFor: 'protocol' stamp: 'AndreiChis 7/13/2013 23:04'! initialExtent ^ 450 @ 156! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'AndreiChis 7/14/2013 15:28'! initialize debugger := nil asValueHolder. super initialize. self whenWindowChanged: [:w | w whenClosedDo: [ self close ] ].! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/14/2013 19:15'! initializeAbandonButton self abandonButton label: 'Abandon'; state: false; "setBalloonText: 'Abandon this execution by closing this window' translated;" "useSquareCorners;" action: [ self abandonAction ]! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/13/2013 22:44'! initializeCodePane self codePane text: self message ! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/14/2013 19:15'! initializeCreateMethodButton self createMethodButton label: 'Create'; state: false; "setBalloonText: 'create the missing method' translated;" "useSquareCorners;" action: [ self createMethodAction ]! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/14/2013 19:15'! initializeDebugButton self debugButton label: 'Debug'; state: false; "setBalloonText: 'Bring up a debugger' translated;" "useSquareCorners;" action: [ self debugAction ]! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'AndreiChis 7/14/2013 15:44'! initializePresenter super initializePresenter. debugger whenChangedDo: [ :aDebugger | aDebugger ifNil: [ self clearWidget ] ifNotNil: [ self rebuildWidget ] ] ! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/14/2013 19:54'! initializeResumeButton self resumeButton label: 'Proceed'; state: false; "setBalloonText: 'Continue execution' translated;" "useSquareCorners;" action: [ self resumeAction ]! ! !SpecPreDebugWindow methodsFor: 'initialize-widgets' stamp: 'AndreiChis 7/22/2013 18:47'! initializeStackPane self stackPane displayBlock: [ :aContext | self columnsFor: aContext ]; items: (self session stackOfSize: self debugger class defaultStackSize) ; whenSelectedItemChanged: [ :aContext | "Set the selection before, as debugAction removes the link with the debugger. " self debugger stack setSelectedItem: aContext. self debugAction ] ! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'AndreiChis 7/16/2013 16:21'! initializeWidgets "Only create the widgets if the debugger of not nil. It it's nil they will be create when the debugger is changed." self debugger ifNotNil: [ self createWidgets ]! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'AndreiChis 7/13/2013 19:02'! message ^ message! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'AndreiChis 7/13/2013 18:52'! message: messageString message := messageString! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 19:41'! notifierPaneWidgetAssociation "Return the association containing the only subwidget that is not a button. Assume there is only one such widget." ^ (self widgets associationsSelect: [ :anAssociation | (anAssociation key asString endsWith: 'Button') not ]) associations first! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/16/2013 16:17'! rebuildWidget self widgets removeAll. self createWidgets. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self dynamicLayout ! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 7/14/2013 15:37'! resumeAction self session resume; clear. self abandonAction! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'AndreiChis 7/14/2013 15:28'! session ^ self debugger session! ! !SpecPreDebugWindow methodsFor: 'layout' stamp: 'AndreiChis 7/14/2013 20:26'! setFocusOrder self focusOrder removeAll. "The focus order of the buttons should be the one in which they are added to the window." self buildButtonWidgetsSpec pairsDo: [ :k :v | self focusOrder add: (self perform: k) ]. self focusOrder add: self notifierPaneWidgetAssociation value! ! !SpecPreDebugWindow methodsFor: 'protocol' stamp: 'AndreiChis 7/13/2013 19:32'! setTitle: aString title := aString. self updateTitle ! ! !SpecPreDebugWindow methodsFor: 'protocol' stamp: 'AndreiChis 7/13/2013 18:47'! title ^ title ! ! !DebugContext methodsFor: 'accessing' stamp: 'AndreiChis 7/20/2013 09:34' prior: 34288387! selectedMessageName "Answer the message selector of the current context. If the method is unbound we can still usefully answer its old selector." ^ context messageName! ! !SpecDebugger commentStamp: '' prior: 45917866! A SpecDebugger a ui build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the logic debugging is in DebugSession. SpecDebugger only provides an graphical interface to access that functionality. Instance Variables code: session: stack: toolbar: code - xxxxx session - xxxxx stack - xxxxx toolbar - xxxxx ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/13/2013 18:12'! alwaysOpenFullDebugger ^ AlwaysOpenFullDebugger ifNil: [AlwaysOpenFullDebugger := false]! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/13/2013 18:12'! alwaysOpenFullDebugger: aBoolean AlwaysOpenFullDebugger := aBoolean.! ! !SpecDebugger class methodsFor: 'printing' stamp: 'AndreiChis 7/23/2013 17:36'! buildClassNameFor: aString "shrink the name shown in the debugger " aString first = $[ ifTrue: [ ^ '[...] in ', (aString splitOn: ' in ') last ]. ^ aString ! ! !SpecDebugger class methodsFor: 'printing' stamp: 'AndreiChis 7/23/2013 17:36'! columnsFor: anEntry "Answer the array of contexts." | first second index stringRepresentation | stringRepresentation := anEntry printString. index := stringRepresentation findString: '>>'. first := stringRepresentation copyFrom: 1 to: index-1. second := stringRepresentation copyFrom: index+2 to: stringRepresentation size. ^ {(self buildClassNameFor: first). second}! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 7/22/2013 11:27'! context: aContext "Answer an instance of me for debugging the active process starting with the given context." ^ self new process: Processor activeProcess controller: nil context: aContext ! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:20'! defaultLogFileName ^ 'PharoDebug.log'! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 7/23/2013 13:06'! defaultStackSize ^ 20! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 7/22/2013 18:45'! expandedStackSize ^ 100000! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:24'! filterCommonMessageSends ^ FilterCommonMessageSends ifNil: [FilterCommonMessageSends := false]! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:25'! filterCommonMessageSends: aBoolean FilterCommonMessageSends := aBoolean! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'AndreiChis 7/23/2013 16:22'! informExistingDebugger: aContext label: aString "Walking the context chain, we try to find out if we're in a debugger stepping situation. If we find the relevant contexts, we must rearrange them so they look just like they would if the methods were excuted outside of the debugger." | ctx quickStepMethod oldSender baseContext | ctx := thisContext. quickStepMethod := ContextPart compiledMethodAt: #quickSend:to:with:super:. [ctx sender == nil or: [ctx sender method == quickStepMethod]] whileFalse: [ctx := ctx sender]. ctx sender == nil ifTrue: [^self]. baseContext := ctx. "baseContext is now the context created by the #quickSend... method." oldSender := ctx := ctx sender home sender. "oldSender is the context which originally sent the #quickSend... method" [ctx isNil or: [ctx receiver isKindOf: self]] whileFalse: [ctx := ctx sender]. ctx ifNil: [^self]. "ctx is the context of the Debugger method #doStep" self flag: 'this is not true any more'. ctx receiver label: aString. baseContext swapSender: baseContext sender sender sender. "remove intervening contexts" thisContext swapSender: oldSender. "make myself return to debugger" ErrorRecursion := false. ^aContext! ! !SpecDebugger class methodsFor: 'class initialization' stamp: 'AndreiChis 7/22/2013 12:54' prior: 34263575! initialize ErrorRecursion := false. "Ungly check to make sure the debugger will work until everything is in the image" (Smalltalk tools respondsTo: #registerDebugger:withRank:) ifFalse: [ ^ self ]. "Add ourselves to registry. See [Smalltalk tools]" Smalltalk tools registerDebugger: self withRank: 2.! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:18'! logDebuggerStackToFile ^ LogDebuggerStackToFile ifNil: [LogDebuggerStackToFile := true]! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:18'! logDebuggerStackToFile: aBoolean LogDebuggerStackToFile := aBoolean! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:20'! logFileName ^ LogFileName ifNil: [ self defaultLogFileName ] ! ! !SpecDebugger class methodsFor: 'settings' stamp: 'AndreiChis 7/20/2013 12:20'! logFileName: newName LogFileName := newName! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 7/23/2013 17:24'! menuStack: aBuilder (aBuilder item: #'Senders of...') "keyText: 'n';" selector: #browseSendersOfMessages. (aBuilder item: #'Implementors of...') "keyText: 'm';" selector: #browseMessages. (aBuilder item: #'Inheritance') "keyText: 'i';" selector: #methodHierarchy. (aBuilder item: #'Versions') "keyText: 'v';" selector: #browseVersions. (aBuilder item: #'Inst var refs...') selector: #browseInstVarRefs. (aBuilder item: #'Class var refs...') selector: #browseClassVarRefs. (aBuilder item: #'Class variables') selector: #browseClassVariables; withSeparatorAfter. (aBuilder item: #'Class refs') "keyText: 'N';" selector: #browseClassRefs. (aBuilder item: #'Browse full') "keyText: 'b';" selector: #browseMethodFull. (aBuilder item: #'File out') selector: #fileOutMessage. (aBuilder item: #'Inspect instances') selector: #inspectInstances. (aBuilder item: #'Inspect subinstances') selector: #inspectSubInstances; withSeparatorAfter. (aBuilder item: #'Copy to clipboard') selector: #copyToClipboard. "(aBuilder item: #'Fuel out Stack') selector: #serializeStack. "! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 7/23/2013 17:09' prior: 34263956! menuStackAction: aBuilder (aBuilder item: #'Restart') "keyText: 'r';" selector: #restartAction. (aBuilder item: #'Proceed') "keyText: 'p';" selector: #resumeAction. (aBuilder item: #'Step Over') "keyText: 't';" selector: #stepOverAction. (aBuilder item: #'Step Through') "keyText: 'T';" selector: #stepThroughAction. (aBuilder item: #'Step Into') "keyText: 'e';" selector: #stepIntoAction. (aBuilder item: #'Where') "keyText: 'w';" selector: #whereIsAction. (aBuilder item: #'Peel to first like this') selector: #peelToFirst; withSeparatorAfter. (aBuilder item: #'Return entered value') selector: #returnValue; withSeparatorAfter. (aBuilder item: #'Toggle break on entry') selector: #toggleBreakOnEntry.! ! !SpecDebugger class methodsFor: 'opening' stamp: 'AndreiChis 7/22/2013 13:22'! openContext: aContext label: aString contents: contentsStringOrNil "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." "Simulation guard" ErrorRecursion not & self logDebuggerStackToFile ifTrue: [Smalltalk logError: aString inContext: aContext]. ErrorRecursion ifTrue:[ ErrorRecursion := false. self primitiveError: aString]. ErrorRecursion := true. self informExistingDebugger: aContext label: aString. (self context: aContext) openNotifierContents: contentsStringOrNil label: aString. ErrorRecursion := false. Processor activeProcess suspend. ! ! !SpecDebugger class methodsFor: 'opening' stamp: 'AndreiChis 7/23/2013 16:21'! openInterrupt: aString onProcess: interruptedProcess "Open a notifier in response to an interrupt. An interrupt occurs when the user types the interrupt key (cmd-. on Macs, ctrl-c or alt-. on other systems) or when the low-space watcher detects that memory is low." | debugger | "Simulation guard" debugger := self new. debugger process: interruptedProcess controller: nil context: interruptedProcess suspendedContext. self logDebuggerStackToFile ifTrue: [(aString includesSubstring: 'Space') & (aString includesSubstring: 'low') ifTrue: [Smalltalk logError: aString inContext: debugger interruptedContext ]]. ^ debugger openNotifierContents: nil label: aString! ! !SpecDebugger class methodsFor: 'opening' stamp: 'AndreiChis 7/13/2013 18:10'! openOn: process context: context label: title contents: contentsStringOrNil fullView: bool "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | fullView | fullView := (bool or: [self alwaysOpenFullDebugger]). Smalltalk tools userManager canDebug ifFalse: [ UIManager default spawnNewProcessIfThisIsUI: process. process suspend. ^ self ]. ^ UIManager default openDebuggerOn: process context: context label: title contents: contentsStringOrNil fullView: fullView! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 1/7/2013 10:38' prior: 34265481! sessionClass ^ DebugSession ! ! !SpecDebugger class methodsFor: 'private' stamp: 'AndreiChis 1/28/2013 11:29' prior: 34265596! spanNewSessionForContext: aContext fromProcess: aProcess ^ self sessionClass process: aProcess context: aContext ! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 7/14/2013 15:27' prior: 38523126! close self removeActionsForSession: self session. self session ifNotNil: [ :aSession | aSession terminate]. contextInspector close. receiverInspector inspector close.! ! !SpecDebugger methodsFor: 'private' stamp: 'AndreiChis 7/23/2013 17:36' prior: 34266768! columnsFor: anEntry ^ self class columnsFor: anEntry! ! !SpecDebugger methodsFor: 'accessing contex' stamp: 'AndreiChis 7/22/2013 14:26' prior: 34267222! context ^ self interruptedContext! ! !SpecDebugger methodsFor: 'intialization menu' stamp: 'AndreiChis 7/23/2013 14:33'! contextStackMenu: aMenu self flag: 'add action receive as target the toolbar. might not be the best idea.'. (self session isContextPostMortem: self currentContext) ifTrue: [ self postMortemStackActionMenu: aMenu] ifFalse: [ self stackActionMenu: aMenu ]. aMenu addAllFromPragma: 'specDebuggerStackMenu' target: self toolbar. self flag: 'remove this from here'. ^ aMenu addAllFromPragma:'specDebuggerStackExtensionMenu' target: self toolbar! ! !SpecDebugger methodsFor: 'accessing contex' stamp: 'AndreiChis 7/17/2013 11:00'! currentContext "I answer the context on which an action should be executed. This is either the selected context or if nothing is selected the interrupted context." ^ self selectedContext isNil ifTrue: [ self interruptedContext ] ifFalse: [ self selectedContext ]! ! !SpecDebugger methodsFor: 'old - public' stamp: 'AndreiChis 7/14/2013 20:24'! errorWasInUIProcess: aBoolean "The debugger must have a session instaled for this method to work. Only added it to match the API of the old debugger." self session errorWasInUIProcess: aBoolean! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 7/23/2013 10:43'! expandStack "If the last element of the visible stack is selected, expand the stack, if more elements are available." self stack selectedItem ifNil: [ ^ self ]. self stack listItems ifNotNil: [ :aList | (self stack selectedIndex = self stack listSize and: [ self stack selectedItem sender notNil ]) ifTrue: [ self toolbar expandStackBy: self class defaultStackSize ] ] ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/16/2013 17:30' prior: 38523406! initialize session := nil asValueHolder. label := nil asValueHolder. super initialize. needRefresh := false. self announcer weak on: WidgetBuilt do:[ needRefresh:= true ]. self whenWindowChanged: [:w | w whenClosedDo: [ self close ] ]. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ]. label whenChangedDo: [ self updateTitle ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/23/2013 11:49' prior: 43581643! initializePresenter super initializePresenter. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ] ]. self stack whenSelectedItemChanged: [:aContext | self updateToolbarFromContext: aContext. self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext. self updateStackFromSelectedContext ]. self contextInspector initializeAutoRefresh.! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/23/2013 17:44' prior: 41658628! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorWrapper). (#contextInspector -> #EyeDebuggerContextInspector)}. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self setStackMenu. self setStackShortcuts. self setFocusOrder! ! !SpecDebugger methodsFor: 'accessing contex' stamp: 'AndreiChis 7/22/2013 14:13'! interruptedContext ^ self session interruptedContext! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 7/22/2013 14:14'! interruptedProcess ^ self session interruptedProcess! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 7/16/2013 17:34'! label ^ label contents! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 7/16/2013 17:34'! label: aString label contents: aString! ! !SpecDebugger methodsFor: 'private' stamp: 'AndreiChis 7/13/2013 18:27'! lowSpaceChoices "Return a notifier message string to be presented when space is running low." ^ 'Warning!! Pharo is almost out of memory!! Low space detection is now disabled. It will be restored when you close or proceed from this error notifier. Don''t panic, but do proceed with caution. Here are some suggestions: If you suspect an infinite recursion (the same methods calling each other again and again), then close this debugger, and fix the problem. If you want this computation to finish, then make more space available (read on) and choose "proceed" in this debugger. Here are some ways to make more space available... > Close any windows that are not needed. > Get rid of some large objects (e.g., images). > Leave this window on the screen, choose "save as..." from the screen menu, quit, restart the Pharo VM with a larger memory allocation, then restart the image you just saved, and choose "proceed" in this window. If you want to investigate further, choose "debug" in this window. Do not use the debugger "fullStack" command unless you are certain that the stack is not very deep. (Trying to show the full stack will definitely use up all remaining memory if the low-space problem is caused by an infinite recursion!!). ' ! ! !SpecDebugger methodsFor: 'opening' stamp: 'AndreiChis 7/22/2013 13:48'! openFullNoSuspendLabel: aString "Create and schedule a full debugger with the given label. Do not terminate the current active process." self openWithSpec; updateToolbar; label: aString. self flag: 'Would ne better to move this into the session'. self session errorWasInUIProcess: (UIManager default spawnNewProcessIfThisIsUI: self interruptedProcess) "errorWasInUIProcess := UIManager default spawnNewProcessIfThisIsUI: interruptedProcess"! ! !SpecDebugger methodsFor: 'opening' stamp: 'AndreiChis 7/14/2013 19:59'! openNotifierContents: msgString label: label "Create and schedule a notifier view with the given label and message. A notifier view shows just the message or the first several lines of the stack, with a menu that allows the user to open a full debugger if so desired. " "NOTE: When this method returns, a new process has been scheduled to run the windows, and thus this notifier, but the previous active porcess has not been suspended. The sender will do this." | msg | msg := (label beginsWith: 'Space is low') ifTrue: [ self lowSpaceChoices , (msgString ifNil: [ '' ]) ] ifFalse: [ msgString ]. SpecPreDebugWindow new setTitle: label; message: msg; openWithSpec; debugger: self. self session errorWasInUIProcess: (UIManager default spawnNewProcessIfThisIsUI: self interruptedProcess)! ! !SpecDebugger methodsFor: 'intialization menu' stamp: 'AndreiChis 7/19/2013 17:44'! postMortemStackActionMenu: aMenu ^ aMenu addAllFromPragma: 'specDebuggerStackPostMortemActionMenu' target: self toolbar! ! !SpecDebugger methodsFor: 'old - public' stamp: 'AndreiChis 7/22/2013 14:23'! proceed: aTopView self flag: 'move the actions from the toolbar to the debugger'. self toolbar resume ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/13/2013 17:49'! process: aProcess controller: aController context: aContext self flag: 'Do not ignore the controller parameter'. self session: (self class spanNewSessionForContext: aContext fromProcess: aProcess)! ! !SpecDebugger methodsFor: 'accessing contex' stamp: 'AndreiChis 7/17/2013 11:04'! selectedContext ^ self stack selectedItem! ! !SpecDebugger methodsFor: 'old - public' stamp: 'AndreiChis 7/22/2013 14:03'! send self flag: 'move the actions from the toolbar to the debugger'. self toolbar stepIntoAction. ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/19/2013 17:36' prior: 34270332! setStackMenu self stack menu: [ :aMenu | self contextStackMenu: aMenu]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/23/2013 17:43'! setStackShortcuts "initialize the debuggers' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | self stack on: key do: value ] ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 7/23/2013 17:23'! shortCuts "Answers a dictionary of the shortcuts usable in debugger" |shortCuts| shortCuts := Dictionary new. shortCuts at: $r command put: [self toolbar restartAction]. shortCuts at: $p command put: [self toolbar resumeAction]. shortCuts at: $t command put: [self toolbar stepOverAction]. shortCuts at: $t command shift put: [self toolbar stepThroughAction]. shortCuts at: $e command put: [self toolbar stepIntoAction]. shortCuts at: $w command put: [self toolbar whereIsAction]. shortCuts at: $n command put: [self toolbar browseSendersOfMessages]. shortCuts at: $m command put: [self toolbar browseMessages]. shortCuts at: $i command put: [self toolbar methodHierarchy]. shortCuts at: $v command put: [self toolbar browseVersions]. shortCuts at: $n command shift put: [self toolbar browseClassRefs]. shortCuts at: $b command put: [self toolbar browseMethodFull]. ^shortCuts! ! !SpecDebugger methodsFor: 'intialization menu' stamp: 'AndreiChis 7/19/2013 17:44'! stackActionMenu: aMenu ^ aMenu addAllFromPragma: 'specDebuggerStackActionMenu' target: self toolbar! ! !SpecDebugger methodsFor: 'protocol' stamp: 'AndreiChis 7/16/2013 17:41' prior: 34271030! title ^ ((self session isContextPostMortem: self interruptedContext) ifTrue: [ 'PostMortem: ' ] ifFalse: [ '' ]), (self label ifNil: [ '' ])! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 7/23/2013 11:37' prior: 41604118! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver inspector. receiverInspector owner: self.! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 7/23/2013 13:02'! updateStackFromSelectedContext "The selection of the stack changed. Expand the stack if necessary ang give it the focus." self expandStack. self stack takeKeyboardFocus "This is needed, as otherwise, the inspectors will take the focus"! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 7/22/2013 18:49' prior: 34272073! updateStackFromSession: aSession self stack items: (aSession ifNil: [ OrderedCollection new ] ifNotNil: [ aSession stackOfSize: self class defaultStackSize ] ) "self stack setSelectedItem: aStack first"! ! !SpecDebugger methodsFor: 'opening' stamp: 'AndreiChis 7/18/2013 16:24'! updateToolbar self toolbar update! ! SpecDebugger removeSelector: #spanNewDebugger:forContext:! SpecDebugger removeSelector: #detachSession! SpecDebugger removeSelector: #buildClassNameFor:! SpecDebugger class removeSelector: #spanNewSessionForProcess:! SpecDebugger class removeSelector: #menuStackChangeDebuggerAction:! SpecDebugger class removeSelector: #handlesContext:! SpecDebugger class removeSelector: #debugProcess:! SpecDebugger class removeSelector: #debugBasedOnSession:! SpecDebuggerToolbar removeSelector: #whereIsButton! SpecDebuggerToolbar removeSelector: #stepThroughButton! SpecDebuggerToolbar removeSelector: #stepOverButton! SpecDebuggerToolbar removeSelector: #stepIntoButton! SpecDebuggerToolbar removeSelector: #spanNewDebugger:forContext:! SpecDebuggerToolbar removeSelector: #runToSelectionButton! SpecDebuggerToolbar removeSelector: #resumeButton! SpecDebuggerToolbar removeSelector: #restartButton! SpecDebuggerToolbar removeSelector: #debuggerClass! SpecDebuggerToolbar removeSelector: #createMethodButton! BasicBehaviorClassMetaclassTest removeSelector: #testClassDescriptionAllSubInstances! "DebuggerModel"! "KernelTests"! "Spec-Debugger"! "Tools"! ----End fileIn----! ----QUIT----an Array(24 July 2013 10:59:24 am) Pharo.image priorSource: 12349815! ----STARTUP----an Array(24 July 2013 11:07:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 July 2013 11:07:24 am) Pharo-30294.image priorSource: 12425102! ----STARTUP----an Array(24 July 2013 1:06:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/24/2013 13:03' prior: 45904549! commentForCurrentUpdate ^ '11219 Speed up test run: #testAddMetaclassPattern in RBRefactoringChangeTests https://pharo.fogbugz.com/f/cases/11219 11224 Enable the new debugger https://pharo.fogbugz.com/f/cases/11224 10780 Inspecting self in SpecDebugger inspects nil https://pharo.fogbugz.com/f/cases/10780'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/24/2013 13:03'! script130 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.16.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.101.mcz FileSystem-Disk-StephaneDucasse.60.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.298.mcz FreeType-MarcusDenker.619.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1529.mcz KernelTests-MarcusDenker.536.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.152.mcz Keymapping-KeyCombinations-MarcusDenker.14.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.7.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.94.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.50.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.30.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.87.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-EstebanLorenzano.50.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.99.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.48.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.98.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-StephaneDucasse.23.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.23.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.67.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.40.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.880.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.595.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1193.mcz ToolsTest-EstebanLorenzano.denker.48.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/24/2013 13:03'! update30295 "self new update30295" self withUpdateLog: '11219 Speed up test run: #testAddMetaclassPattern in RBRefactoringChangeTests https://pharo.fogbugz.com/f/cases/11219 11224 Enable the new debugger https://pharo.fogbugz.com/f/cases/11224 10780 Inspecting self in SpecDebugger inspects nil https://pharo.fogbugz.com/f/cases/10780'. self loadTogether: self script130 merge: false. SpecDebugger register. self flushCaches. ! ! "ScriptLoader30"! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'MarcusDenker 7/23/2013 14:32' prior: 31133742! testAddMetaclassPattern "Make sure that all metaclass definitions can be parsed." self class environment allClassesDo: [ :class | (class isObsolete or: [ class superclass notNil and: [ class superclass isObsolete ] ]) ifFalse: [ | change | change := changes defineClass: class class definition. self assert: (change isKindOf: RBAddMetaclassChange). self assert: (change changeClassName = class name). self assert: (change classInstanceVariableNames = class class instVarNames). self universalTestFor: change ]]! ! !SpecDebugger class methodsFor: 'tools registry' stamp: 'AndreiChis 7/24/2013 11:32'! register self registerToolsOn: Smalltalk tools! ! !SpecDebugger class methodsFor: 'tools registry' stamp: 'AndreiChis 7/24/2013 11:31'! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self as: #debugger ! ! !SpecDebugger methodsFor: 'updating' stamp: 'ClementBera 5/28/2013 16:02' prior: 36509853! updateCodeFromContext: aContext aContext ifNil: [ self code aboutToStyle: false; text: ''; behavior: nil; setSelection: (1 to: 0) ] ifNotNil: [ |selectionInterval| selectionInterval := self session selectedCodeRangeForContext: aContext. self logCr: aContext receiver class. self code aboutToStyle: true; text: aContext sourceCode; doItReceiver: aContext home receiver; doItContext: aContext; behavior: aContext home receiver class; setSelection: selectionInterval ]! ! "Refactoring-Tests-Changes"! "Spec-Debugger"! ----End fileIn----! ----QUIT----an Array(24 July 2013 1:06:19 pm) Pharo.image priorSource: 12425303! ----STARTUP----an Array(24 July 2013 1:14:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 July 2013 1:14:49 pm) Pharo-30295.image priorSource: 12438029! ----STARTUP----an Array(24 July 2013 2:47:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/24/2013 14:42' prior: 45980036! commentForCurrentUpdate ^ '10448 Smalltalk os should use instance of OSPlatform https://pharo.fogbugz.com/f/cases/10448 11225 fix DebuggerTest>>testBasic for the new debugger https://pharo.fogbugz.com/f/cases/11225 11218 SettingDeclaration>>exportAction not send and returns self https://pharo.fogbugz.com/f/cases/11218 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/24/2013 14:43'! script131 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.100.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1532.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.94.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.99.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.48.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/24/2013 14:44'! update30296 "self new update30296" self withUpdateLog: '10448 Smalltalk os should use instance of OSPlatform https://pharo.fogbugz.com/f/cases/10448 11225 fix DebuggerTest>>testBasic for the new debugger https://pharo.fogbugz.com/f/cases/11225 11218 SettingDeclaration>>exportAction not send and returns self https://pharo.fogbugz.com/f/cases/11218 '. self loadTogether: self script131 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OSPlatform commentStamp: 'michael.rueger 2/25/2009 18:29' prior: 42518170! An OSPlatform is an abstract representation of a 'OS platform'. Platforms can be hierarchical, e.g., a "general" platform as superclass and more specific platforms as subclasses as long as the subclasses provide sufficient means to identify themselves. The original implementation was for Tweak. Current holds the current OSPlatform subclass Architectural considerations: most platform specific methods that need to be added to the platform class should be in the form of extensions rather then adding them directly to this package. Otherwise the platform class will degenerate very quickly into a dependence hub for all kinds of sub systems.! !MacOSPlatform commentStamp: '' prior: 0! I am a an object representing a Mac OS (pre OSX) platform. Use myself to access platform specific features. ! !MacOSXPlatform commentStamp: '' prior: 42400023! I am a an object representing a MacOSX platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !UnixPlatform class methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:39' prior: 54514326! isActivePlatform ^ self currentPlatformName = 'unix'! ! !UnixPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:33'! family ^#Unix! ! !UnixPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:28'! isUnix ^ true! ! !SystemReporter methodsFor: 'reporting' stamp: 'cami 7/22/2013 18:37' prior: 51659644! reportOSEnvironment: aStream | env | self header: 'Operating System Environment' on: aStream. env := [Smalltalk os environment] on: Error do: [^self]. env keys asSortedCollection do: [:name | aStream nextPutAll: name; nextPut: $=; nextPutAll: (env at: name); cr] ! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'cami 7/22/2013 18:28' prior: 45468880! switchRepository | dialog | dialog := ListDialogWindow new getList: [ :r| self availableRepositories ]; displayBlock: [:e | e ]; title: 'Repository Search'; yourself. dialog browseBlock: [ :el | el ifNotNil: [ "only available onWin until other platforms can open a URL too" Smalltalk os isWin32 ifTrue: [ NBWin32Shell shellBrowse: el ] ]]. (dialog openModal) cancelled ifFalse: [ dialog listIndex > 0 ifTrue: [ self repository: (self availableRepositories at: dialog listIndex) ]]! ! !GreekEnvironment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:26' prior: 23029419! systemConverterClass Smalltalk os isWin32 ifTrue: [^CP1253TextConverter ]. ^ ISO88597TextConverter. ! ! !JapaneseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:25' prior: 24065823! systemConverterClass | encoding | Smalltalk os isWin32 ifTrue: [^ShiftJISTextConverter]. Smalltalk os isMacOS ifTrue: [^UTF8TextConverter]. Smalltalk os isUnix ifTrue: [encoding := X11Encoding encoding. encoding ifNil: [^EUCJPTextConverter]. (encoding = 'utf-8') ifTrue: [^UTF8TextConverter]. (encoding = 'shiftjis' or: [ encoding = 'sjis' ]) ifTrue: [^ShiftJISTextConverter]. ^EUCJPTextConverter]. ^UTF8TextConverter! ! !Clipboard class methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:26' prior: 19370000! default ^Default ifNil: [Default := Smalltalk os clipboardClass new].! ! !UnixStore class methodsFor: 'public' stamp: 'cami 7/22/2013 18:26' prior: 54516500! isCaseSensitive "except for OSX the default is case sensitive" ^ Smalltalk os isMacOSX not! ! !Latin2Environment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:28' prior: 24301803! systemConverterClass Smalltalk os isWin32 ifTrue: [^CP1250TextConverter ]. ^ ISO88592TextConverter. ! ! !Latin1Environment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:25' prior: 24297436! systemConverterClass Smalltalk os isWin32 ifTrue: [^ UTF8TextConverter]. Smalltalk os isMacOSX ifTrue: [ ^ UTF8TextConverter ]. Smalltalk os isMacOS ifTrue: [^MacRomanTextConverter]. Smalltalk os isUnix ifTrue: [^ UTF8TextConverter]. ^ Latin1TextConverter ! ! !DigitalSignatureAlgorithm methodsFor: 'initialization' stamp: 'cami 7/22/2013 18:26' prior: 20858612! initRandomNonInteractively [self initRandom: (SoundService default randomBitsFromSoundInput: 512)] ifError: [self initRandomFromString: Time millisecondClockValue printString, Date today printString, Smalltalk os platformName printString].! ! !KMCategory methodsFor: 'associating' stamp: 'cami 7/22/2013 18:33' prior: 24114215! platformEntries ^self entriesAt: Smalltalk os platformFamily! ! !Win32Platform class methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:39' prior: 54905630! isActivePlatform "Answer whether the receiver is the active platform" ^ self currentPlatformName = 'Win32' ! ! !Win32Platform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:45' prior: 54905137! virtualKey: virtualKeyCode self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os` instead' on: '2013-07-22' in: #Pharo30. "Win32Platform virtualKey: $C charCode" (virtualKeyCode <= 90 "$Z charCode" and: [virtualKeyCode >= 65 "$A "]) ifFalse: [^nil]. "#($a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z)" ^(#($a nil $c $d nil $f $g nil nil nil nil $l $m $n nil $p nil nil $s nil nil $v nil $x nil $z) at: virtualKeyCode-64) ifNotNil: [:char | char charCode]! ! !Win32Platform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:18'! environment ^ environment ifNil: [ environment := Win32Environment new ]! ! !Win32Platform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:34'! family ^#Windows! ! !Win32Platform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:28'! isWin32 ^ true! ! !Win32Platform methodsFor: 'testing' stamp: 'cami 7/22/2013 18:27'! isWindows ^ true! ! !Win32Platform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:32'! virtualKey: virtualKeyCode "Win32Platform virtualKey: $C charCode" (virtualKeyCode <= 90 "$Z charCode" and: [virtualKeyCode >= 65 "$A "]) ifFalse: [^nil]. "#($a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z)" ^(#($a nil $c $d nil $f $g nil nil nil nil $l $m $n nil $p nil nil $s nil nil $v nil $x nil $z) at: virtualKeyCode-64) ifNotNil: [:char | char charCode]! ! !KeyboardEvent methodsFor: '*Keys' stamp: 'cami 7/22/2013 18:27' prior: 36916095! key ^Smalltalk os keyForValue: keyValue! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'cami 7/22/2013 18:33' prior: 33995628! modifiedCharacter self flag: #hack. "Hack me. When Ctrl is pressed, the key ascii value is not right and we have to do something ugly" ^(self controlKeyPressed and: [ (#(MacOSX Windows) includes: Smalltalk os platformFamily) and: [ keyValue <= 26 ]]) ifTrue: [ (self keyValue + $a asciiValue - 1) asCharacter ] ifFalse: [ self keyCharacter ]! ! !InternetConfiguration class methodsFor: 'system startup' stamp: 'cami 7/22/2013 18:24' prior: 23911013! shutDown Smalltalk os isMacOS ifTrue: [ NetworkSystemSettings useHTTPProxy: false ] ! ! !InternetConfiguration class methodsFor: 'system startup' stamp: 'cami 7/22/2013 18:24' prior: 23911209! startUp Smalltalk os isMacOS ifTrue: [ self useHTTPProxy ifTrue: [ (self getHTTPProxyHost findTokens: ':') ifNotEmpty: [ :p | NetworkSystemSettings httpProxyServer: p first; httpProxyPort: p second asInteger; useHTTPProxy: true ] ] ifFalse: [ NetworkSystemSettings useHTTPProxy: false ] ]! ! !KMCommandModifier methodsFor: 'matching' stamp: 'cami 7/22/2013 18:28' prior: 34026323! matchesEvent: aKeyboardEvent self flag: #todo. "Command in windows and linux platforms is 'meta' key and do not have any sense (for the environment, right now). In the future we need to create a KMMetaModifier to handle properly this, and keep command as a mac-specific key" (Smalltalk os isUnix or: [ Smalltalk os isWin32 ]) ifTrue: [ ^ aKeyboardEvent controlKeyPressed ]. ^ aKeyboardEvent commandKeyPressed! ! !Locale class methodsFor: 'platform specific' stamp: 'cami 7/22/2013 18:28' prior: 24559763! defaultEncodingName: languageSymbol | encodings platformName osVersion | platformName := Smalltalk os platformName. osVersion := Smalltalk os version. encodings := self platformEncodings at: languageSymbol ifAbsent: [self platformEncodings at: #default]. encodings at: platformName ifPresent: [:encoding | ^encoding]. encodings at: platformName , ' ' , osVersion ifPresent: [:encoding | ^encoding]. ^encodings at: #default! ! !DebuggerTest methodsFor: 'testing' stamp: 'AndreiChis 7/24/2013 14:36' prior: 39402515! testBasic | context process debugger printedString | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := Smalltalk tools debugger new process: process controller: nil context: context. debugger expandStack. self assert: debugger stack selectedIndex = 1. printedString := OpalCompiler isActive ifTrue: [ '[ 20 factorial ] in DebuggerTest>>testBasic'] ifFalse: [ '[...] in DebuggerTest>>testBasic' ]. self assert: debugger stack selectedItem printString = printedString. debugger send. debugger send. self assert: debugger code getText = (Integer>>#factorial) sourceCode. self assert: debugger stack selectedItem printString = 'SmallInteger(Integer)>>factorial'.! ! !FreeTypeFontProvider methodsFor: 'file paths' stamp: 'cami 7/22/2013 18:29' prior: 22746049! platformAbsoluteDirectories Smalltalk os isWin32 ifTrue: [ ^ self winFontDirectories ]. Smalltalk os isUnix ifTrue: [ ^ self unixFontDirectories ]. Smalltalk os isMacOSX ifTrue: [ ^ self macOSXFolderDirectories ]. ^ {}! ! !OSPlatformTest methodsFor: 'testing' stamp: 'cami 7/22/2013 18:35'! testAPI "A test to make sure the full API will work" Smalltalk os isMacOS; isMacOSX; isWin32; isWindows; isX11; name; subtype; family.! ! !RGMethodDefinitionTest methodsFor: 'as yet unclassified' stamp: 'cami 7/22/2013 18:07' prior: 31715771! foo ^ 'second version'! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'cami 7/22/2013 18:28' prior: 36683441! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups." "Note: SourcesName and imageName are full paths; changesName is a local name." | sources changes msg wmsg | msg := 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'. wmsg := 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'. (sources := self openSources: self sourcesName forImage: LastImagePath) ifNil: [ [ self downloadSources ] on: MessageNotUnderstood do: [ :exception | "ignore" ]. sources := self openSources: self sourcesName forImage: LastImagePath ]. changes := self openChanges: self changesName forImage: LastImagePath. ((sources isNil or: [ sources atEnd ])) ifTrue: [ Smalltalk os isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , self sourcesName) ]. changes isNil ifTrue: [ self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. changes notNil ifTrue: [ changes isReadOnly ifTrue: [ self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self inform: 'The changes file named ' , self changesName , ' has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.' ] ]. SourceFiles := Array with: sources with: changes! ! !SmalltalkImage methodsFor: 'os' stamp: 'cami 7/22/2013 18:17' prior: 33541505! os "Answer the object to query about os." ^ OSPlatform current! ! !SmalltalkImage methodsFor: 'os' stamp: 'cami 7/22/2013 18:30' prior: 33541602! platform "Answer the object to query about os." ^ self os! ! !Workspace methodsFor: 'initialization' stamp: 'cami 7/22/2013 18:29' prior: 54952855! initialize super initialize. contents := ''. acceptDroppedMorphs := false. mustDeclareVariables := false. lineEnding := #cr. "try to guess default line ending" Smalltalk os isWindows ifTrue: [lineEnding := #crlf]. Smalltalk os isUnix ifTrue: [lineEnding := #lf]. encoding := TextConverter default class encodingNames first.! ! !KoreanEnvironment class methodsFor: 'as yet unclassified' stamp: 'cami 7/22/2013 18:25' prior: 24242300! systemConverterClass | encoding | Smalltalk os isWin32 ifTrue: [^EUCKRTextConverter]. Smalltalk os isMacOS ifTrue: [^UTF8TextConverter]. Smalltalk os isUnix ifTrue: [encoding := X11Encoding encoding. encoding ifNil: [^EUCKRTextConverter]. (encoding = 'utf-8') ifTrue: [^UTF8TextConverter]. ^EUCKRTextConverter]. ^UTF8TextConverter! ! !FileStream class methodsFor: 'stdio' stamp: 'cami 7/22/2013 18:26' prior: 22004470! standardIOStreamNamed: moniker forWrite: forWrite "Create if necessary and store default stdin, stdout and other files based on the their names" | index | self flag: #todo. "This is an ugly hack, while waiting for a real fix for windows. There several problems with this approach, but it allow us to run tests, etc." Smalltalk os isWin32 ifTrue: [ [ ^ MultiByteFileStream forceNewFileNamed: moniker asString ] on: CannotDeleteFileException do: [ "HACK: if the image is opened a second time windows barks about the already opened locked file" ^ MultiByteFileStream forceNewFileNamed: moniker asString, '_', (Random new nextInt: SmallInteger maxVal) asString ]]. index := #(stdin stdout stderr) identityIndexOf: moniker. ^((StdioFiles ifNil: [ StdioFiles := Array new: 3 ]) at: index) ifNil: [ StdioFiles at: index put: ( (TheStdioHandles at: index) ifNil: [ ^self error: moniker, ' is unavailable' ] ifNotNil: [ :handle | MultiByteFileStream newForStdio openOnHandle: handle name: moniker forWrite: forWrite ]) ] ! ! !Latin9Environment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:28' prior: 24302898! systemConverterClass Smalltalk os isWin32 ifTrue: [^CP1252TextConverter ]. ^ ISO885915TextConverter. ! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'cami 7/22/2013 18:28' prior: 26966331! commandOrCrontrolKeyPressed: anEvent ^ (Smalltalk os isMacOS) ifTrue: [anEvent controlKeyPressed] ifFalse: [anEvent commandKeyPressed]! ! !MultiByteFileStream class methodsFor: 'class initialization' stamp: 'cami 7/22/2013 18:26' prior: 27241052! guessDefaultLineEndConvention "Lets try to guess the line end convention from what we know about the path name delimiter from FileDirectory." FileSystem disk delimiter = $: ifTrue: [^ self defaultToCR]. FileSystem disk delimiter = $/ ifTrue: [^ (Smalltalk os isMacOSX or: [Smalltalk os isUnix]) ifTrue: [ self defaultToLF] ifFalse: [ self defaultToCR]]. FileSystem disk delimiter = $\ ifTrue: [^ self defaultToCRLF]. "in case we don't know" ^ self defaultToCR! ! !OSEnvironmentTest methodsFor: 'helper' stamp: 'cami 7/22/2013 18:17' prior: 36759626! instance ^ Smalltalk os environment! ! !PlatformResolver methodsFor: 'private' stamp: 'cami 7/22/2013 18:17' prior: 43928165! directoryFromEnvVariableNamed: aString or: aBlock | envValue | envValue := [ Smalltalk os environment at: aString ] on: Error do: [ ^ aBlock value ]. ^ envValue isEmptyOrNil ifTrue: [ aBlock value ] ifFalse: [ self resolveString: envValue ]! ! !InputEventSensor class methodsFor: 'settings' stamp: 'cami 7/22/2013 18:27' prior: 23648831! swapMouseButtons ^ Smalltalk os isWindows! ! !OSPlatform commentStamp: 'michael.rueger 2/25/2009 18:29' prior: 46003777! An OSPlatform is an abstract representation of a 'OS platform'. Platforms can be hierarchical, e.g., a "general" platform as superclass and more specific platforms as subclasses as long as the subclasses provide sufficient means to identify themselves. The original implementation was for Tweak. Current holds the current OSPlatform subclass Architectural considerations: most platform specific methods that need to be added to the platform class should be in the form of extensions rather then adding them directly to this package. Otherwise the platform class will degenerate very quickly into a dependence hub for all kinds of sub systems.! !MacOSPlatform commentStamp: '' prior: 46004478! I am a an object representing a Mac OS (pre OSX) platform. Use myself to access platform specific features. ! !MacOSPlatform class methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:38'! isActivePlatform ^ self isMacOS and: [ self currentVersion asNumber < 1000 ]! ! !MacOSPlatform class methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:38'! isMacOS ^ self currentPlatformName = 'Mac OS'! ! !MacOSPlatform methodsFor: '*System-Clipboard' stamp: 'CamilloBruni 5/9/2013 22:27'! clipboardClass ^MacOSClipboard! ! !MacOSPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:33'! family ^#MacOS! ! !MacOSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:28'! isMacOS ^ true! ! !MacOSPlatform methodsFor: '*Keys' stamp: 'CamilloBruni 5/9/2013 22:27'! keyForValue: aKeyValue ^Key valueForMacOSXPlatform: aKeyValue.! ! !MacOSXPlatform commentStamp: '' prior: 46004650! I am a an object representing a MacOSX platform. Use myself to access platform specific features. Please keep me polymorphic to the the other platform objects. To get the current platform, you can evaluate: OSPlatform current.! !MacOSXPlatform class methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:39' prior: 25265212! isActivePlatform ^ self isMacOS and: [ self currentVersion asNumber >= 1000 ]! ! !MacOSXPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:33'! family ^#MacOSX! ! !MacOSXPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:28'! isMacOSX ^ true! ! !OSPlatform class methodsFor: 'system attributes' stamp: 'CamilloBruni 5/9/2013 22:37'! currentPlatformName "Return the name of the platform we're running on" ^ Smalltalk vm getSystemAttribute: 1001! ! !OSPlatform class methodsFor: 'system attributes' stamp: 'CamilloBruni 5/9/2013 22:38'! currentVersion "Return the version number string of the platform we're running on" ^ (Smalltalk vm getSystemAttribute: 1002) asString! ! !OSPlatform class methodsFor: 'private' stamp: 'CamilloBruni 5/9/2013 22:24' prior: 28553873! determineActivePlatformStartingAt: parentClass "Determine the current platform starting at parentClass. This is a potentially recursive process as we want to determine the most specific (in terms of subclasses) platform available." "OSPlatform determineActivePlatformStartingAt: OSPlatform" | platformClass | parentClass subclasses ifEmpty: [ ^ parentClass ]. "Look for the matching platform class" platformClass := parentClass allSubclasses detect: [ :any | any isActivePlatform ] ifNone:[ nil ]. "Check if there is a more specific subclass" ^self determineActivePlatformStartingAt: platformClass! ! !OSPlatform class methodsFor: 'class initialization' stamp: 'CamilloBruni 5/9/2013 22:40' prior: 28551258! initialize "Initialize the receiver" "OSPlatform initialize" Smalltalk removeFromStartUpList: self; addToStartUpList: self after: Delay; removeFromShutDownList: self; addToShutDownList: self after: DisplayScreen. self startUp: true.! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:42' prior: 28553231! isMacOS self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isMacOS` instead' on: '2013-07-22' in: #Pharo30. ^ self current isMacOS! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:42' prior: 28553355! isMacOSX self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isMacOSX` instead' on: '2013-07-22' in: #Pharo30. ^ self current isMacOSX! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28553493! isUnix self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isUnix` instead' on: '2013-07-22' in: #Pharo30. ^ self current isUnix! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28553609! isWin32 self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isWin32` instead' on: '2013-07-22' in: #Pharo30. ^ self current isWin32! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28553728! isX11 self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isX11` instead' on: '2013-07-22' in: #Pharo30. ^ self current isX11! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28550585! osVersion self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os version` instead' on: '2013-07-22' in: #Pharo30. ^ self current version! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28552202! platformName self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os name` instead' on: '2013-07-22' in: #Pharo30. ^ self current name! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28552364! platformSubtype self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os subtype` instead' on: '2013-07-22' in: #Pharo30. ^ self current subtype! ! !OSPlatform class methodsFor: 'class initialization' stamp: 'CamilloBruni 5/9/2013 22:41' prior: 28551810! startUp: resuming "Determine the current platform. Use the most specific (in terms of subclasses) platform available." | platformClass | "Look for the matching platform class" platformClass := self determineActivePlatformStartingAt: self. platformClass ifNil: [ ^ self ]. Current := platformClass new. Current startUp: resuming! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28552507! subtype self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os subtype` instead' on: '2013-07-22' in: #Pharo30. ^ self current subtype! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:43' prior: 28552736! version self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os version` instead' on: '2013-07-22' in: #Pharo30. ^ self current version! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:44' prior: 28551075! virtualKey: virtualKeyCode self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os` instead' on: '2013-07-22' in: #Pharo30. "Subclass responsibility to override if necessary" ^self current virtualKey: virtualKeyCode! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:41' prior: 28550764! vmVersion self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk vm version` instead' on: '2013-07-22' in: #Pharo30. ^Smalltalk vm version! ! !OSPlatform class methodsFor: 'deprecated' stamp: 'cami 7/22/2013 18:44' prior: 28552985! windowSystemName self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os windowSystemName` instead' on: '2013-07-22' in: #Pharo30. ^ self current windowSystemName! ! !OSPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:17'! current ^ self! ! !OSPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:17'! environment ^ environment ifNil: [ environment := NixEnvironment new ]! ! !OSPlatform methodsFor: 'accessing' stamp: 'cami 7/22/2013 18:33'! family "Returns a symbol specific to the platform family (MacOSX, Windows, Unix, RiscOS). This may need to be extended if there are new platforms added or significant differences within a platform family arise (as was the case between MacOS 9 and X)." self subclassResponsibility! ! !OSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:25'! isMacOS ^ false! ! !OSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:25'! isMacOSX ^ false! ! !OSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:25'! isUnix ^ false! ! !OSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:25'! isWin32 ^ false! ! !OSPlatform methodsFor: 'testing' stamp: 'cami 7/22/2013 18:27'! isWindows ^ false! ! !OSPlatform methodsFor: 'testing' stamp: 'CamilloBruni 5/9/2013 22:30'! isX11 ^ self windowSystemName = 'X11'! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:37'! name "Return the name of the platform we're running on" ^ self class currentPlatformName! ! !OSPlatform methodsFor: 'compatbility' stamp: 'cami 7/22/2013 18:33' prior: 28549524! platformFamily ^ self family! ! !OSPlatform methodsFor: 'compatbility' stamp: 'cami 7/22/2013 18:37'! platformName ^ self name! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:22'! subtype "Return the subType of the platform we're running on" ^ (Smalltalk vm getSystemAttribute: 1003)! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:40'! version "Return the version number string of the platform we're running on" ^ self class currentVersion! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:32' prior: 28549897! virtualKey: virtualKeyCode "Subclass responsibility to override if necessary" ^nil! ! !OSPlatform methodsFor: 'accessing' stamp: 'CamilloBruni 5/9/2013 22:30'! windowSystemName "Return the name of the window system currently being used for display." ^ Smalltalk vm getSystemAttribute: 1005! ! OSPlatform removeSelector: #env! OSPlatform class removeSelector: #env! MacOSXPlatform removeSelector: #platformFamily! MacOSXPlatform removeSelector: #keyForValue:! MacOSXPlatform removeSelector: #clipboardClass! SettingDeclaration removeSelector: #exportAction! UnixPlatform removeSelector: #platformFamily! Win32Platform removeSelector: #platformFamily! Win32Platform removeSelector: #environ! Win32Platform removeSelector: #env! "Compatibility"! "FileSystem-Core"! "FileSystem-Disk"! "Files"! "FreeType"! "Kernel"! "Keymapping-Core"! "Keymapping-KeyCombinations"! "Keys"! "Morphic-Base"! "Multilingual-Languages"! "Network-Kernel"! "Ring-Tests-Kernel"! "StartupPreferences"! "System-Clipboard"! "System-Hashing"! "System-Localization"! "System-Platforms"! "System-Support"! "Tests"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(24 July 2013 2:47:38 pm) Pharo.image priorSource: 12438228! ----STARTUP----an Array(24 July 2013 2:56:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 July 2013 2:56:30 pm) Pharo-30296.image priorSource: 12476504! ----STARTUP----an Array(24 July 2013 4:33:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/24/2013 16:31' prior: 45992960! commentForCurrentUpdate ^ '11230 Cannot use self in SpecDebugger inspector panel https://pharo.fogbugz.com/f/cases/11230 11233 ASTInterpreterTest>>#testAssert is failing https://pharo.fogbugz.com/f/cases/11233 11228 Fix CriticBrowser more... https://pharo.fogbugz.com/f/cases/11228 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/24/2013 16:31'! script132 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1532.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.41.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.99.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/24/2013 16:31'! update30297 "self new update30297" self withUpdateLog: '11230 Cannot use self in SpecDebugger inspector panel https://pharo.fogbugz.com/f/cases/11230 11233 ASTInterpreterTest>>#testAssert is failing https://pharo.fogbugz.com/f/cases/11233 11228 Fix CriticBrowser more... https://pharo.fogbugz.com/f/cases/11228 '. self loadTogether: self script132 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CriticBrowser methodsFor: 'private' stamp: 'MarcusDenker 7/24/2013 15:07' prior: 34159052! reapplyAllRules | ruleCount total rule | ruleCount := 0. rule := rulesModel roots first. total := rule leaves size. rule leaves do: [ :r | ruleCount := ruleCount + 1. self setTitle: (String streamContents: [:s | s << 'run rules: ' << r name << ' (' << ruleCount asString << '/' << total asString <<')']). self reapplyRule: r ]. self setTitle: 'Critics Browser'. rulesModel updateTree! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 7/24/2013 15:33' prior: 36495891! objectChanged "triggered when the inspected object is changed" self updateList. text doItReceiver: self object. description doItReceiver: self object. ! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'MarcusDenker 7/24/2013 15:08' prior: 33875014! addAllItems toSelectModel roots do: [ :item | selectRule addAll: item leaves]. self updateTree. ! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'MarcusDenker 7/24/2013 15:08' prior: 33877161! removeAllItems selectedModel roots do: [ :item | selectRule removeAllFoundIn: item leaves]. self updateTree ! ! !OCLiteralVariable methodsFor: '*AST-Interpreter-Core' stamp: 'MarcusDenker 7/24/2013 15:55' prior: 38927512! accept: aVisitor assign: aValue inNode: aVariableNode ^self assoc value: aValue! ! "AST-Interpreter-Core"! "Manifest-CriticBrowser"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(24 July 2013 4:33:21 pm) Pharo.image priorSource: 12476703! ----STARTUP----an Array(24 July 2013 4:42:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 July 2013 4:42:28 pm) Pharo-30297.image priorSource: 12489141! ----STARTUP----an Array(25 July 2013 10:06:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/25/2013 10:04' prior: 46031435! commentForCurrentUpdate ^ '11236 Proceed action does not close the refresh processes https://pharo.fogbugz.com/f/cases/11236 11235 The new debugger is missing some utilities methods https://pharo.fogbugz.com/f/cases/11235 11231 Predebugger window too small & not skipped to full debugger https://pharo.fogbugz.com/f/cases/11231 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/25/2013 10:04'! script133 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-EstebanLorenzano.2.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1532.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.102.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/25/2013 10:04'! update30298 "self new update30298" self withUpdateLog: '11236 Proceed action does not close the refresh processes https://pharo.fogbugz.com/f/cases/11236 11235 The new debugger is missing some utilities methods https://pharo.fogbugz.com/f/cases/11235 11231 Predebugger window too small & not skipped to full debugger https://pharo.fogbugz.com/f/cases/11231 '. self loadTogether: self script133 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecPreDebugWindow methodsFor: 'protocol' stamp: 'DamienPollet 7/24/2013 15:05' prior: 45952985! initialExtent ^ 700 @ 156! ! !DebugSystemSettings class methodsFor: 'settings' stamp: 'AndreiChis 7/24/2013 16:40' prior: 20481682! debugSettingsOn: aBuilder (aBuilder group: #debugging) label: 'Debugging'; with: [ (aBuilder group: #deprecationHandling) label: 'Deprecation handling' translated; description: 'How deprecation are handled' translated; target: Deprecation; with: [ (aBuilder setting: #raiseWarning) label: 'Raise a blocking dialog' translated; description: 'If true, then a dialog is popup for each deprecated method invocation' translated. (aBuilder setting: #showWarning) label: 'Transcript message' translated; description: 'If true, then a message is send to the Transcript for each deprecated method invocation' translated]. (aBuilder setting: #cmdDotEnabled) label: 'Enable cmd-dot interrupt key' translated; target: UserInterruptHandler; description: 'If true, it allows the user to stop currently running process by opening-up a debugger' translated. (aBuilder setting: #cpuWatcherEnabled) label: 'Process browser monitors CPU usage' translated; target: CPUWatcher; description: 'If true, Pharo processes will be monitored for CPU usage. If they take too much CPU, you will get a notification menu that will allow you to debug, resume, or terminate the process' translated. (aBuilder setting: #debugShowDamage) label: 'Flash damaged morphic region' translated; target: WorldState; description: 'If true, every changed region of the morphic display will be flashed black before updating.' translated. (aBuilder setting: #logDebuggerStackToFile) label: 'Write message to debug log file when fall into debugger' translated; target: Smalltalk tools debugger; description: 'If true, whenever you fall into a debugger a summary of its stack will be written to a file named' translated. "(aBuilder setting: #restartAlsoProceeds) label: 'Restart also proceeds' translated; target: Debugger; description: 'If this preference is set, the debugger''s restart button and menu item will also proceed. If the preference is not set, the selected context will just be reset to its initial condition, so you may step through it again.' translated." (aBuilder setting: #alwaysOpenFullDebugger) label: 'Directly open the full Debugger' translated; target: Smalltalk tools debugger; description: 'When true, always directly open the full Debugger view when debugging instead of showing only a small popup' translated. (aBuilder setting: #filterCommonMessageSends) label: 'Filter out common message sends' translated; target: Smalltalk tools debugger; description: 'When true, filter out uninteresting message sends in the Debugger view while debugging' translated. (aBuilder setting: #ObjectExplorerShowIcons) label: 'Icons in explorer' translated; selector: #showIcons; target: ObjectExplorer; description: 'When possible, show icon in explorer.' translated. (aBuilder setting: #logFileName) label: 'Log file name' translated; target: Smalltalk tools debugger; description: 'A name of the file, which will be used for logging all errors and notifications' ]! ! !SpecDebugger class methodsFor: 'utilities' stamp: 'AndreiChis 7/24/2013 17:11'! closeAllDebuggers "SpecDebugger closeAllDebuggers" (SystemWindow allSubInstances select: [:w | (w model isKindOf: WindowModel) and: [ w model model isKindOf: self ] ]) do: [:w | w delete ]! ! !SpecDebugger class methodsFor: 'window color' stamp: 'AndreiChis 7/24/2013 17:11'! patchworkUIThemeColor "Answer a default color for UI themes that make use of different colors for Browser, MessageList etc..." ^ Color lightRed ! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 7/24/2013 17:36' prior: 45967251! close self removeActionsForSession: self session. contextInspector close. receiverInspector inspector close. "No more code should follow after this, as the session might terminate this process." self session ifNotNil: [ :aSession | aSession terminate]! ! "Settings-Tools"! "Spec-Debugger"! ----End fileIn----! ----QUIT----an Array(25 July 2013 10:06:24 am) Pharo.image priorSource: 12489340! ----STARTUP----an Array(25 July 2013 10:15:09 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 July 2013 10:15:09 am) Pharo-30298.image priorSource: 12504749! ----STARTUP----an Array(25 July 2013 11:28:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/25/2013 11:26' prior: 46044073! commentForCurrentUpdate ^ '11239 ContextPart>>errorReportOn: uses deprecated methods https://pharo.fogbugz.com/f/cases/11239 11232 Fuel out stack menu entry is missing https://pharo.fogbugz.com/f/cases/11232'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/25/2013 11:26'! script134 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.142.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.4.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1534.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.839.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.358.mcz SlotTests-MarcusDenker.48.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/25/2013 11:26'! update30299 "self new update30299" self withUpdateLog: '11239 ContextPart>>errorReportOn: uses deprecated methods https://pharo.fogbugz.com/f/cases/11239 11232 Fuel out stack menu entry is missing https://pharo.fogbugz.com/f/cases/11232'. self loadTogether: self script134 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDebugger class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:24'! menuFuelStackAction: aBuilder (aBuilder item: #'Fuel out Stack') selector: #serializeStack. ! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 7/25/2013 10:43' prior: 45962427! menuStack: aBuilder (aBuilder item: #'Senders of... (n)') "keyText: 'n';" selector: #browseSendersOfMessages. (aBuilder item: #'Implementors of... (m)') "keyText: 'm';" selector: #browseMessages. (aBuilder item: #'Inheritance (i)') "keyText: 'i';" selector: #methodHierarchy. (aBuilder item: #'Versions (v)') "keyText: 'v';" selector: #browseVersions. (aBuilder item: #'Inst var refs...') selector: #browseInstVarRefs. (aBuilder item: #'Class var refs...') selector: #browseClassVarRefs. (aBuilder item: #'Class variables') selector: #browseClassVariables; withSeparatorAfter. (aBuilder item: #'Class refs (N)') "keyText: 'N';" selector: #browseClassRefs. (aBuilder item: #'Browse full (b)') "keyText: 'b';" selector: #browseMethodFull. (aBuilder item: #'File out') selector: #fileOutMessage. (aBuilder item: #'Inspect instances') selector: #inspectInstances. (aBuilder item: #'Inspect subinstances') selector: #inspectSubInstances; withSeparatorAfter. (aBuilder item: #'Copy to clipboard') selector: #copyToClipboard.! ! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 7/25/2013 10:42' prior: 45963685! menuStackAction: aBuilder (aBuilder item: #'Restart (r)') "keyText: 'r';" selector: #restartAction. (aBuilder item: #'Proceed (p)') "keyText: 'p';" selector: #resumeAction. (aBuilder item: #'Step Over (t)') "keyText: 't';" selector: #stepOverAction. (aBuilder item: #'Step Through (T)') "keyText: 'T';" selector: #stepThroughAction. (aBuilder item: #'Step Into (e)') "keyText: 'e';" selector: #stepIntoAction. (aBuilder item: #'Where (w)') "keyText: 'w';" selector: #whereIsAction. (aBuilder item: #'Peel to first like this') selector: #peelToFirst; withSeparatorAfter. (aBuilder item: #'Return entered value') selector: #returnValue; withSeparatorAfter. (aBuilder item: #'Toggle break on entry') selector: #toggleBreakOnEntry.! ! !DebugSession class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:28'! encodeDebugInformationOn: aSerializer | str | str := String new writeStream. str print: Date today; space; print: Time now. aSerializer at: #Timestamp putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'VM: '; nextPutAll: Smalltalk os name asString; nextPutAll: ' - '; nextPutAll: Smalltalk os subtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk os version asString; nextPutAll: ' - '; nextPutAll: Smalltalk vm version asString. aSerializer at: #VM putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'Image: '; nextPutAll: SystemVersion current version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'. aSerializer at: #Image putAdditionalObject: str contents.! ! !DebugSession class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:21'! serializeTestFailureContext: aContext toFileNamed: aFilename | serializer | serializer := FLSerializer newDefault. self encodeDebugInformationOn: serializer. serializer addPostMaterializationAction: [ :materialization | Smalltalk tools debugger openContext: materialization root label: 'External stack' contents: nil ]. serializer " use the sender context, generally the current context is not interesting" serialize: aContext toFileNamed: aFilename! ! !DebugSession methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:44'! serializeStack | date fileName | "Serialize a portion of the current stack trace using fuel.." date := DateAndTime now. fileName := String streamContents: [ :s| s << 'Debugger-Stack-'; << self interruptedContext receiver class theNonMetaClass name; << '-'. date printYMDOn: s. s << '-'; print: date hour24; print: date minute; print: date second; << '.fuel']. [ self class serializeTestFailureContext: self interruptedContext copyStack toFileNamed: fileName ] on: Error do: [:err| "simply continue..." ].! ! !Debugger class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:32' prior: 20537381! encodeDebugInformationOn: aSerializer | str | str := String new writeStream. str print: Date today; space; print: Time now. aSerializer at: #Timestamp putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'VM: '; nextPutAll: Smalltalk os name asString; nextPutAll: ' - '; nextPutAll: Smalltalk os subtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk os version asString; nextPutAll: ' - '; nextPutAll: Smalltalk vm version asString. aSerializer at: #VM putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'Image: '; nextPutAll: SystemVersion current version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'. aSerializer at: #Image putAdditionalObject: str contents.! ! !ContextPart methodsFor: 'debugger access' stamp: 'AndreiChis 7/25/2013 11:10' prior: 45204959! errorReportOn: stream "Write a detailed error report on the stack (above me) on a stream. For both the error file, and emailing a bug report. Suppress any errors while getting printStrings. Limit the length." | stackDepth aContext startPos | stream print: Date today; space; print: Time now; cr. stream cr. stream nextPutAll: 'VM: '; nextPutAll: Smalltalk os name asString; nextPutAll: ' - '; nextPutAll: Smalltalk os subtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk os version asString; nextPutAll: ' - '; nextPutAll: Smalltalk vm version asString; cr. stream nextPutAll: 'Image: '; nextPutAll: SystemVersion current version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'; cr. stream cr. "Note: The following is an open-coded version of ContextPart>>stackOfSize: since this method may be called during a low space condition and we might run out of space for allocating the full stack." stackDepth := 0. startPos := stream position. aContext := self. [ aContext notNil and: [ (stackDepth := stackDepth + 1) < 40 ]] whileTrue: [ "variable values" aContext printDetails: stream. stream cr. aContext := aContext sender ]. stream cr; nextPutAll: '--- The full stack ---'; cr. aContext := self. stackDepth := 0. [ aContext == nil ] whileFalse: [ stackDepth := stackDepth + 1. stackDepth = 40 ifTrue: [ stream nextPutAll: ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'; cr ]. "just class>>selector" stream print: aContext; cr. stream position > (startPos+150000) ifTrue: [ stream nextPutAll: '...etc...'. "exit early" ^ self]. stackDepth > 200 ifTrue: [ stream nextPutAll: '-- and more not shown --'. ^ self ]. aContext := aContext sender ].! ! !SpecDebuggerToolbar methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 10:23'! serializeStack self flag: 'Move this to the debugger class'. self session serializeStack! ! "FuelTools-Debugger"! "Kernel"! "Spec-Debugger"! ----End fileIn----! ----QUIT----an Array(25 July 2013 11:28:23 am) Pharo.image priorSource: 12504950! ----STARTUP----an Array(25 July 2013 11:37:28 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 July 2013 11:37:28 am) Pharo-30299.image priorSource: 12523374! ----STARTUP----an Array(26 July 2013 10:01:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 09:59' prior: 46059684! commentForCurrentUpdate ^ '11203 Dont try resuming an exception that you have made non-resumable https://pharo.fogbugz.com/f/cases/11203 11240 PreDebugWindow allows to proceed for post mortem contexts https://pharo.fogbugz.com/f/cases/11240 11237 #sorted no longer copies Arrays https://pharo.fogbugz.com/f/cases/11237'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 09:59'! script135 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1534.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 09:59'! update30300 "self new update30300" self withUpdateLog: '11203 Dont try resuming an exception that you have made non-resumable https://pharo.fogbugz.com/f/cases/11203 11240 PreDebugWindow allows to proceed for post mortem contexts https://pharo.fogbugz.com/f/cases/11240 11237 #sorted no longer copies Arrays https://pharo.fogbugz.com/f/cases/11237'. self loadTogether: self script135 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LayoutAbstractScope commentStamp: '' prior: 42376867! Layout scopes reify how classes extend the layout of their superclass.! !LayoutClassScope commentStamp: '' prior: 42377439! I am layout scope for classes.! !Slot commentStamp: '' prior: 42680482! I'm a meta-object for accessing a field in an Object. By default each Slot corresponds to an instance variable and vice versa. Hence there is a Slot for each instance variable. I define a protocol to read (#read:) and to write (#write:to:) values to a field inside an Object. For customizing a subclass can override the meta-obejct-protocol methods. See subclasses for examples. Vocabulary: - variable: named accessor for a Slot - Slot: class-side meta-object, mapping of names to values using a MOP to fields - field: space occupied in an object, used to hold values accessed via Slots! !SlotClassBuilderError commentStamp: '' prior: 0! I represent an error raised while building a class. ! !CircularHierarchyError commentStamp: '' prior: 0! I am signaled if a new class introduces a circular class hierarchy.! !IncompatibleLayoutConflict commentStamp: '' prior: 0! I am an error raised when extending a class with an incompatible layout.! !SlotNotFound commentStamp: '' prior: 42682174! I am an exception to indicate that a slot is found in a layout.! !SlotClassBuilderWarning commentStamp: '' prior: 0! I represent a warning signaled while building a class.! !DuplicatedSlotName commentStamp: '' prior: 0! I am signaled when trying to build a class with a duplicated slot.! !InvalidGlobalName commentStamp: '' prior: 0! I am a warning signaled when trying to build a class with invalid name.! !InvalidSlotName commentStamp: '' prior: 0! I am signaled when the name of a Slot is an invalid variable name.! !InvalidSuperclass commentStamp: '' prior: 0! I am a warning signaled when trying to build a class with an invalid superclass.! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41781026! extend: aScope IncompatibleLayoutConflict new layout: self; subType: #slot; signal! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41781190! extendByte self hasFields ifTrue: [ IncompatibleLayoutConflict new layout: self; subType: #byte; signal ]. ^ ByteLayout new! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 43771488! extendCompiledMethod self hasFields ifTrue: [ IncompatibleLayoutConflict new layout: self; subType: #compiledMethod; signal ]. ^ CompiledMethodLayout new! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41781401! extendVariable: aScope IncompatibleLayoutConflict new layout: self; subType: #variable; signal! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41781577! extendWord self hasFields ifTrue: [ IncompatibleLayoutConflict new layout: self; subType: #word; signal ]. ^ WordLayout new! ! !LayoutAbstractScope commentStamp: '' prior: 46089104! Layout scopes reify how classes extend the layout of their superclass.! !LayoutClassScope commentStamp: '' prior: 46089240! I am layout scope for classes.! !Slot commentStamp: '' prior: 46089324! I'm a meta-object for accessing a field in an Object. By default each Slot corresponds to an instance variable and vice versa. Hence there is a Slot for each instance variable. I define a protocol to read (#read:) and to write (#write:to:) values to a field inside an Object. For customizing a subclass can override the meta-obejct-protocol methods. See subclasses for examples. Vocabulary: - variable: named accessor for a Slot - Slot: class-side meta-object, mapping of names to values using a MOP to fields - field: space occupied in an object, used to hold values accessed via Slots! !Slot class methodsFor: 'validating' stamp: 'MartinDias 7/24/2013 13:39' prior: 41804663! checkValidName: aSymbol aSymbol isPseudovariableName ifTrue: [ ^ InvalidSlotName signalFor: aSymbol ]! ! !SlotClassBuilderError commentStamp: '' prior: 46089977! I represent an error raised while building a class. ! !CircularHierarchyError commentStamp: '' prior: 46090094! I am signaled if a new class introduces a circular class hierarchy.! !CircularHierarchyError class methodsFor: 'signalling' stamp: 'MartinDias 7/25/2013 14:12'! signalFor: aClass self signal: aClass name asString, ': Trying to build a circular hierarchy'! ! !IncompatibleLayoutConflict commentStamp: '' prior: 46090230! I am an error raised when extending a class with an incompatible layout.! !IncompatibleLayoutConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! layout ^ layout! ! !IncompatibleLayoutConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! layout: anObject layout := anObject! ! !IncompatibleLayoutConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:30'! messageText ^ 'Class with ', layout class name, ' cannot be extended as ', subType! ! !IncompatibleLayoutConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! subType ^ subType! ! !IncompatibleLayoutConflict methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:28'! subType: anObject subType := anObject! ! !SlotNotFound commentStamp: '' prior: 46090364! I am an exception to indicate that a slot is found in a layout.! !ByteLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41770225! extendWord IncompatibleLayoutConflict new layout: self; subType: #word; signal! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 7/24/2013 13:48' prior: 43492623! name: aName [ name := aName asSymbol ] on: Error do: [ InvalidGlobalName signal: 'Global names should be symbols' for: aName ]. self validateClassName.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 7/25/2013 14:00' prior: 41815464! superclass: aSuperclass superclass := aSuperclass. superclass ifNotNil: [ self validateSuperclass: superclass ].! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'MartinDias 7/24/2013 13:51' prior: 43493672! validateClassName "Validate the new class name. Raise warning if invalid." (name detect: [ :c | (c isAlphaNumeric or: [ c = $_ ]) not ] ifNone: []) ifNotNil: [ :c | InvalidGlobalName signal: 'Invalid character: ''', c printString, '''' for: name ]. name first canBeGlobalVarInitial ifFalse: [ InvalidGlobalName signal: 'Class name does not start with a valid Global Var Initial' for: name ]. ! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'MartinDias 7/25/2013 14:15' prior: 43494263! validateSuperChain: oldClass superclass ifNil: [ ^ nil ]. superclass withAllSuperclassesDo: [ :class | class == oldClass ifTrue: [ CircularHierarchyError signalFor: oldClass ]].! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'MartinDias 7/25/2013 14:17'! validateSuperclass: anObject anObject isBehavior ifFalse: [ InvalidSuperclass signal: 'Trying to build classes from non-class objects' for: anObject ]. anObject isMeta ifTrue: [ InvalidSuperclass signal: 'Metaclasses cannot be used for building classes' for: anObject ].! ! !DebugSession class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 23:49' prior: 46073555! serializeTestFailureContext: aContext toFileNamed: aFilename | serializer | serializer := FLSerializer newDefault. self encodeDebugInformationOn: serializer. serializer addPostMaterializationAction: [ :materialization | Smalltalk tools debugger openOn: Processor activeProcess context: materialization root label: 'External stack' contents: nil fullView: false ]. serializer " use the sender context, generally the current context is not interesting" serialize: aContext toFileNamed: aFilename! ! !WordLayout methodsFor: 'extending' stamp: 'MartinDias 7/24/2013 13:21' prior: 41771000! extendByte IncompatibleLayoutConflict new layout: self; subType: #byte; signal! ! !LayoutWithSlots methodsFor: 'validation' stamp: 'MartinDias 7/24/2013 14:07' prior: 41773053! checkSlotNames | slots current | slots := slotScope allVisibleSlots. [ slots isEmpty ] whileFalse: [ current := slots removeLast. slots do: [ :other | other name = current name ifTrue: [ DuplicatedSlotName new oldSlot: current; newSlot: other; host: host; signal ]]]! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/24/2013 13:34' prior: 43872891! assertInvalidClassName: aName self should: [ self make: [ :builder | builder name: aName ] ] raise: InvalidGlobalName. self flag: 'should remove class if not raised'. self should: [ PharoClassInstaller validateClassName: aName ] raise: InvalidGlobalName! ! !SlotClassBuilderSilentTest methodsFor: 'helpers' stamp: 'MartinDias 7/24/2013 13:21' prior: 43873624! shouldnt: superclassBlock extendWith: subclassBlock | superclass | superclass := self make: superclassBlock. self should: [ self make: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ] ] raise: IncompatibleLayoutConflict! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 14:07' prior: 43883636! testClassSlotDuplicationConflict aClass := self make: [ :builder | builder classSlots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; classSlots: { #a } ] ] raise: DuplicatedSlotName ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 13:38' prior: 43884023! testClassSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder classSlots: { reservedName } ] ] raise: InvalidSlotName ]! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 13:10' prior: 43885849! testDirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. self should: [ self make: [ :builder | builder superclass: classA; name: self aClassName ] ] raise: CircularHierarchyError ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 13:10' prior: 43886327! testIndirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-B<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. classB := self make: [ :builder | builder superclass: classA; name: self anotherClassName ]. self should: [ self make: [ :builder | builder superclass: classB; name: self aClassName ] ] raise: CircularHierarchyError ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 14:07' prior: 43899174! testSlotDuplicationConflict aClass := self make: [ :builder | builder slots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: { #a } ] ] raise: DuplicatedSlotName ! ! !SlotClassBuilderSilentTest methodsFor: 'tests-errors' stamp: 'MartinDias 7/24/2013 13:38' prior: 43899546! testSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder slots: { reservedName } ] ] raise: InvalidSlotName ]! ! !SlotClassBuilderWarning commentStamp: '' prior: 46090493! I represent a warning signaled while building a class.! !DuplicatedSlotName commentStamp: '' prior: 46090608! I am signaled when trying to build a class with a duplicated slot.! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:15'! host ^ host! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:15'! host: anObject host := anObject! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:17'! messageText ^ 'Slot #''', oldSlot name, ''' appeared twice in ', host name! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! newSlot ^ newSlot! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! newSlot: anObject newSlot := anObject! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! oldSlot ^ oldSlot! ! !DuplicatedSlotName methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:10'! oldSlot: anObject oldSlot := anObject! ! !InvalidGlobalName commentStamp: '' prior: 46090734! I am a warning signaled when trying to build a class with invalid name.! !InvalidGlobalName class methodsFor: 'signalling' stamp: 'MartinDias 7/24/2013 13:56'! signal: aMessage for: aName self signal: aName asString, ': ', aMessage ! ! !InvalidSlotName commentStamp: '' prior: 46090863! I am signaled when the name of a Slot is an invalid variable name.! !InvalidSlotName class methodsFor: 'signalling' stamp: 'MartinDias 7/24/2013 13:40'! signalFor: aSymbol self signal: aSymbol asString, ' is an invalid name for a slot'! ! !InvalidSuperclass commentStamp: '' prior: 46090989! I am a warning signaled when trying to build a class with an invalid superclass.! !InvalidSuperclass class methodsFor: 'signalling' stamp: 'MartinDias 7/25/2013 14:16'! signal: aMessage for: anObject self signal: anObject asString, ': ', aMessage ! ! !SlotClassBuilderWarning methodsFor: 'accessing' stamp: 'ToonVerwaest 3/21/2011 01:12'! defaultAction "No one has handled this error, but now give them a chance to decide how to debug it. If none handle this either then open debugger (see UnhandedError-defaultAction)" UnhandledError signalForException: self! ! !MCPackageLoader methodsFor: 'private' stamp: 'MartinDias 7/25/2013 14:36' prior: 45259212! handleLoadErrorsDuring: aBlock [aBlock on: InMidstOfFileinNotification do: [ :notification | notification resume: true ]] on: SlotClassBuilderWarning do: [ :error | error resume ]! ! !Debugger class methodsFor: '*FuelTools-Debugger' stamp: 'AndreiChis 7/25/2013 23:49' prior: 20538326! serializeTestFailureContext: aContext toFileNamed: aFilename | serializer | serializer := FLSerializer newDefault. self encodeDebugInformationOn: serializer. serializer addPostMaterializationAction: [ :materialization | Smalltalk tools debugger openOn: Processor activeProcess context: materialization root label: 'External stack' contents: nil fullView: false ]. serializer " use the sender context, generally the current context is not interesting" serialize: aContext toFileNamed: aFilename! ! !Array methodsFor: 'sorting' stamp: 'MarcusDenker 7/25/2013 10:45'! sorted: aSortBlockOrNil "sorted should return a copy" ^self copy sort: aSortBlockOrNil! ! SlotDuplicationConflict removeSelector: #oldSlot:! SlotDuplicationConflict removeSelector: #oldSlot! SlotDuplicationConflict removeSelector: #newSlot:! SlotDuplicationConflict removeSelector: #newSlot! SlotDuplicationConflict removeSelector: #messageText! SlotDuplicationConflict removeSelector: #host:! SlotDuplicationConflict removeSelector: #host! Smalltalk globals removeClassNamed: #SlotDuplicationConflict! SlotClassBuilderConflict removeSelector: #isResumable! SlotClassBuilderConflict removeSelector: #defaultAction! PrimitiveTypeConflict removeSelector: #subType:! PrimitiveTypeConflict removeSelector: #subType! PrimitiveTypeConflict removeSelector: #messageText! PrimitiveTypeConflict removeSelector: #layout:! PrimitiveTypeConflict removeSelector: #layout! Smalltalk globals removeClassNamed: #PrimitiveTypeConflict! Smalltalk globals removeClassNamed: #InvalidSlotNameConflict! Smalltalk globals removeClassNamed: #InvalidGlobalNameConflict! Smalltalk globals removeClassNamed: #CircularHierarchyConflict! Smalltalk globals removeClassNamed: #SlotClassBuilderConflict! SlotClassBuilder removeSelector: #validateClass:! SlotClassBuilder removeSelector: #invalidGlobalNameError:! "Collections-Sequenceable"! "FuelTools-Debugger"! "Monticello"! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----an Array(26 July 2013 10:01:27 am) Pharo.image priorSource: 12523575! ----STARTUP----an Array(26 July 2013 10:10:07 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 10:10:07 am) Pharo-30300.image priorSource: 12551298! ----STARTUP----an Array(26 July 2013 11:35:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 11:34' prior: 46078309! commentForCurrentUpdate ^ '11248 right click not handled https://pharo.fogbugz.com/f/cases/11248 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 11:34'! script136 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1536.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.378.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 11:34'! update30301 "self new update30301" self withUpdateLog: '11248 right click not handled https://pharo.fogbugz.com/f/cases/11248 '. self loadTogether: self script136 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InputEventSensor class methodsFor: 'settings' stamp: 'MarcusDenker 7/26/2013 11:21' prior: 46020136! swapMouseButtons ^ Smalltalk os isWindows not! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(26 July 2013 11:35:22 am) Pharo.image priorSource: 12551499! ----STARTUP----an Array(26 July 2013 11:44:16 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 11:44:16 am) Pharo-30301.image priorSource: 12562260! ----STARTUP----an Array(26 July 2013 12:59:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 12:56' prior: 46106233! commentForCurrentUpdate ^ '11036 Compiler options for Opal with intention revealing names https://pharo.fogbugz.com/f/cases/11036'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 12:56'! script137 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1537.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 12:56'! update30302 "self new update30302" SmalltalkImage compilerClass: Compiler. . self withUpdateLog: '11036 Compiler options for Opal with intention revealing names https://pharo.fogbugz.com/f/cases/11036'. self loadTogether: self script137 merge: false. SmalltalkImage compilerClass: OpalCompiler. self flushCaches. ! ! "ScriptLoader30"! !IRMethod methodsFor: 'accessing' stamp: 'MarcusDenker 7/22/2013 16:09' prior: 38336056! forceLongForm compilationContext ifNil: [ ^ false ]. ^compilationContext optionLongIvarAccessBytecodes ! ! !IRMethod methodsFor: 'optimizing' stamp: 'MarcusDenker 7/22/2013 16:10' prior: 38903621! optimize self removeEmptyStart. self compilationContext optionOptimizeIR ifFalse: [^self]. self absorbJumpsToSingleInstrs. self absorbConstantConditionalJumps. self absorbJumpsToSingleInstrs! ! !InstructionStream class methodsFor: 'compiler' stamp: 'MarcusDenker 7/22/2013 16:09' prior: 37299419! compiler "The JIT compiler needs to trap all reads to instance variables of contexts. As this check is costly, it is only done in the long form of the bytecodes, which are not used often. In this hierarchy we force the compiler to alwasy generate long bytecodes" ^super compiler options: #(+ optionLongIvarAccessBytecodes)! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionIlineNone ^ options includes: #optionIlineNone ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionInlineAndOr ^ options includes: #optionInlineAndOr ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionInlineCase ^ options includes: #optionInlineCase ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionInlineIf ^ options includes: #optionInlineIf ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionInlineIfNil ^ options includes: #optionInlineIfNil ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:11'! optionInlineToDo ^ options includes: #optionInlineToDo ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:12'! optionInlineWhile ^ options includes: #optionInlineWhile ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:12'! optionLongIvarAccessBytecodes ^ options includes: #optionLongIvarAccessBytecodes ! ! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:12'! optionOptimizeIR ^ options includes: #optionOptimizeIR ! ! !OpalCompiler class methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:10' prior: 38889794! defaultOptions ^ #( "by default we inline all optimized constructs" + optionInlineIf + optionInlineIfNil + optionInlineAndOr + optionInlineWhile + optionInlineToDo + optionInlineCase - optionIlineNone "to turn off all. Overrides the others" - optionLongIvarAccessBytecodes "special for Contexts" + optionOptimizeIR "disabled for now" )! ! !Object methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 7/22/2013 16:07' prior: 38340551! mustBeBooleanInMagic: context "Permits to redefine methods inlined by compiler. Take the ast node corresponding to the mustBeBoolean error, compile it on the fly with Opal and executes it as a DoIt. Then resume the execution of the context." | proceedValue sendNode selector expression arguments methodNode method offset position | context skipBackBeforeJump. sendNode := context sourceNode sourceNodeForPC: context pc. position := sendNode irInstruction bytecodeOffset. offset := sendNode irInstruction nextBytecodeOffsetAfterJump - position. expression := sendNode copy asSequenceNode transformLastToReturn. selector := #ExecuteUnOptimzedIn:. arguments := {(RBVariableNode named:'ThisContext')}. methodNode := RBMethodNode selector: selector arguments: arguments body: expression. context tempNames do: [:tempName | methodNode :=methodNode rewriteTempNamedWrite: tempName forContext: context. methodNode :=methodNode rewriteTempNamedRead: tempName forContext: context. ]. methodNode compilationContext: sendNode methodNode compilationContext. methodNode compilationContext class: UndefinedObject; compilerOptions: #(+ optionIlineNone). method := methodNode generateWithSource. context jump: offset. proceedValue := self withArgs: {context} executeMethod: method. ^proceedValue! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:12'! optionIlineNone ^ options includes: #optionIlineNone ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:12'! optionInlineAndOr ^ options includes: #optionInlineAndOr ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionInlineCase ^ options includes: #optionInlineCase ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionInlineIf ^ options includes: #optionInlineIf ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionInlineIfNil ^ options includes: #optionInlineIfNil ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionInlineToDo ^ options includes: #optionInlineToDo ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionInlineWhile ^ options includes: #optionInlineWhile ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionLongIvarAccessBytecodes ^ options includes: #optionLongIvarAccessBytecodes ! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 7/22/2013 16:13'! optionOptimizeIR ^ options includes: #optionOptimizeIR ! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:04' prior: 38322339! isInlineAndOr self methodNode compilationContext optionInlineAndOr ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(and: or:) includes: self selector) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each isBlock ]) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each arguments isEmpty ]) ifFalse: [ self notify: 'and: (or:) takes zero-arg block'. ^ false ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:06' prior: 38322906! isInlineCase self methodNode compilationContext optionInlineCase ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(caseOf: caseOf:otherwise:) includes: self selector) ifFalse: [^ false]. self arguments size = 2 ifTrue: [ "otherwise block" self arguments last isBlock ifFalse: [^ false]]. self arguments first isArray ifFalse: [^ false]. self arguments first statements do: [:assoc | (assoc isMessage and: [assoc selector == #->]) ifFalse: [^ false]. assoc receiver isBlock ifFalse: [^ false]. assoc receiver arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks'. ^ false]. assoc arguments first isBlock ifFalse: [^ false]. assoc arguments first arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks']. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:03' prior: 39177361! isInlineIf self methodNode compilationContext optionInlineIf ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ OCSemanticError new node: self; compilationContext: self methodNode compilationContext; messageText: 'ifTrue:ifFalse: takes zero-arg blocks'; signal. ^ false ] ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:03' prior: 38324381! isInlineIfNil | assertNone assertOneOrNone | self methodNode compilationContext optionInlineIfNil ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifNil: ifNotNil: ifNil:ifNotNil: ifNotNil:ifNil:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. assertNone := [:block | block arguments isEmpty ifFalse: [self notify: 'ifNil: takes zero-arg block'. ^ false] ]. assertOneOrNone := [:block | block arguments size > 1 ifTrue: [self notify: 'ifNotNil: takes zero- or one-arg block'. ^ false] ]. self selector == #ifNil: ifTrue: [assertNone value: self arguments first]. self selector == #ifNil:ifNotNil: ifTrue: [assertNone value: self arguments first. assertOneOrNone value: self arguments last]. self selector == #ifNotNil: ifTrue: [assertOneOrNone value: self arguments first]. self selector ==#ifNotNilDo: ifTrue: [assertOneOrNone value: self arguments first]. self selector == #ifNotNil:ifNil: ifTrue: [assertOneOrNone value: self arguments first. assertNone value: self arguments last]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:05' prior: 38325638! isInlineToDo | block step | self methodNode compilationContext optionInlineToDo ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(to:do: to:by:do:) includes: self selector) ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size = 1 ifFalse: [ self notify: 'to:do: block must take one arg'. ^ false]. self arguments first isVariable ifTrue: [ (RBParseTreeSearcher new matches: self arguments first name , ' := `@object' do: [:n :a | true]; executeTree: block initialAnswer: false) ifTrue: [^ false]. ]. self arguments size = 3 "to:by:do:" ifTrue: [ step := self arguments second. step isLiteral ifFalse: [^ false]. step value = 0 ifTrue: [^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:04' prior: 38326539! isInlineWhile self methodNode compilationContext optionInlineWhile ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(whileFalse: whileTrue: whileFalse whileTrue) includes: self selector) ifFalse: [^ false]. self receiver isBlock ifFalse: [^ false]. self receiver arguments isEmpty ifFalse: [self notify: 'while receiver block must have no arguments'. ^ false]. self arguments isEmpty ifFalse: [ self arguments first isBlock ifFalse: [^ false]. self arguments first arguments isEmpty ifFalse: [self notify: 'while takes a zero-arg block as its argument'. ^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 7/22/2013 16:08' prior: 38327247! isInlined self methodNode compilationContext optionIlineNone ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineCase ifTrue: [^true]. ^false.! ! CCompilationContext removeSelector: #optOptimizeIR! CCompilationContext removeSelector: #optLongIvarAccessBytecodes! CCompilationContext removeSelector: #optInlineWhile! CCompilationContext removeSelector: #optInlineToDo! CCompilationContext removeSelector: #optInlineIfNil! CCompilationContext removeSelector: #optInlineIf! CCompilationContext removeSelector: #optInlineCase! CCompilationContext removeSelector: #optInlineAndOr! CCompilationContext removeSelector: #optIlineNone! CompilationContext removeSelector: #optOptimizeIR! CompilationContext removeSelector: #optLongIvarAccessBytecodes! CompilationContext removeSelector: #optInlineWhile! CompilationContext removeSelector: #optInlineToDo! CompilationContext removeSelector: #optInlineIfNil! CompilationContext removeSelector: #optInlineIf! CompilationContext removeSelector: #optInlineCase! CompilationContext removeSelector: #optInlineAndOr! CompilationContext removeSelector: #optIlineNone! "Kernel"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(26 July 2013 12:59:27 pm) Pharo.image priorSource: 12562461! ----STARTUP----an Array(26 July 2013 1:07:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 1:07:52 pm) Pharo-30302.image priorSource: 12585077! ----STARTUP----an Array(26 July 2013 1:28:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 13:26' prior: 46117195! commentForCurrentUpdate ^ '11234 LargeNegativeInteger inherits from LargePositiveInteger (part 1) https://pharo.fogbugz.com/f/cases/11234 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 13:26'! script138 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-EstebanLorenzano.771.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1538.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 13:26'! update30303 "self new update30303" self withUpdateLog: '11234 LargeNegativeInteger inherits from LargePositiveInteger (part 1) https://pharo.fogbugz.com/f/cases/11234 '. self loadTogether: self script138 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LargeInteger commentStamp: '' prior: 0! I represent integers of more than 30 bits. These values are beyond the range of SmallInteger, and are encoded here as an array of 8-bit digits. ! !LargeInteger commentStamp: '' prior: 46150420! I represent integers of more than 30 bits. These values are beyond the range of SmallInteger, and are encoded here as an array of 8-bit digits. ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! * anInteger "Primitive. Multiply the receiver by the argument and answer with an Integer result. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive. " ^super * anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! + anInteger "Primitive. Add the receiver to the argument and answer with an Integer result. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super + anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! - anInteger "Primitive. Subtract the argument from the receiver and answer with an Integer result. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super - anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! / anInteger "Primitive. Divide the receiver by the argument and answer with the result if the division is exact. Fail if the result is not a whole integer. Fail if the argument is 0. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive. " ^super / anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! // anInteger "Primitive. Divide the receiver by the argument and return the result. Round the result down towards negative infinity to make it a whole integer. Fail if the argument is 0. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive. " ^super // anInteger! ! !LargeInteger methodsFor: 'comparing' stamp: 'ClementBera 7/24/2013 17:03'! < anInteger "Primitive. Compare the receiver with the argument and answer true if the receiver is less than the argument. Otherwise answer false. Fail if the argument is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super < anInteger! ! !LargeInteger methodsFor: 'comparing' stamp: 'ClementBera 7/24/2013 17:03'! <= anInteger "Primitive. Compare the receiver with the argument and answer true if the receiver is less than or equal to the argument. Otherwise answer false. Fail if the argument is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super <= anInteger! ! !LargeInteger methodsFor: 'comparing' stamp: 'ClementBera 7/24/2013 17:03'! > anInteger "Primitive. Compare the receiver with the argument and answer true if the receiver is greater than the argument. Otherwise answer false. Fail if the argument is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super > anInteger! ! !LargeInteger methodsFor: 'comparing' stamp: 'ClementBera 7/24/2013 17:03'! >= anInteger "Primitive. Compare the receiver with the argument and answer true if the receiver is greater than or equal to the argument. Otherwise answer false. Fail if the argument is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super >= anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! \\ aNumber "Primitive. Take the receiver modulo the argument. The result is the remainder rounded towards negative infinity, of the receiver divided by the argument. Fail if the argument is 0. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." aNumber isInteger ifTrue: [| neg qr q r | neg := self negative == aNumber negative == false. qr := self digitDiv: aNumber neg: neg. q := qr first normalize. r := qr last normalize. ^(q negative ifTrue: [r isZero not] ifFalse: [q isZero and: [neg]]) ifTrue: [r + aNumber] ifFalse: [r]]. ^super \\ aNumber ! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:03'! \\\ anInteger "a faster modulo method for use in DSA. Be careful if you try to use this elsewhere" ^(self digitDiv: anInteger neg: false) second! ! !LargeInteger methodsFor: 'converting' stamp: 'ClementBera 7/24/2013 17:04'! as31BitSmallInt "This is only for 31 bit numbers. Keep my 31 bits the same, but put them in a small int. The small int will be negative since my 31st bit is 1. We know my 31st bit is 1 because otherwise I would already be a positive small int." self highBit = 31 ifFalse: [self error: 'more than 31 bits can not fit in a SmallInteger']. ^ self - 16r80000000! ! !LargeInteger methodsFor: 'converting' stamp: 'ClementBera 7/24/2013 17:09'! asFloat "Answer a Float that best approximates the value of the receiver. This algorithm is optimized to process only the significant digits of a LargeInteger. And it does honour IEEE 754 round to nearest even mode in case of excess precision (see details below)." "How numbers are rounded in IEEE 754 default rounding mode: A shift is applied so that the highest 53 bits are placed before the floating point to form a mantissa. The trailing bits form the fraction part placed after the floating point. This fractional number must be rounded to the nearest integer. If fraction part is 2r0.1, exactly between two consecutive integers, there is a tie. The nearest even integer is chosen in this case. Examples (First 52bits of mantissa are omitted for brevity): 2r0.00001 is rounded downward to 2r0 2r1.00001 is rounded downward to 2r1 2r0.1 is a tie and rounded to 2r0 (nearest even) 2r1.1 is a tie and rounded to 2r10 (nearest even) 2r0.10001 is rounded upward to 2r1 2r1.10001 is rounded upward to 2r10 Thus, if the next bit after floating point is 0, the mantissa is left unchanged. If next bit after floating point is 1, an odd mantissa is always rounded upper. An even mantissa is rounded upper only if the fraction part is not a tie." "Algorihm details: The floating point hardware can perform the rounding correctly with several excess bits as long as there is a single inexact operation. This can be obtained by splitting the mantissa plus excess bits in two part with less bits than Float precision. Note 1: the inexact flag in floating point hardware must not be trusted because in some cases the operations would be exact but would not take into account some bits that were truncated before the Floating point operations. Note 2: the floating point hardware is presumed configured in default rounding mode." | mantissa shift excess result n | "Check how many bits excess the maximum precision of a Float mantissa." excess := self highBitOfMagnitude - Float precision. excess > 7 ifTrue: ["Remove the excess bits but seven." mantissa := self bitShiftMagnitude: 7 - excess. shift := excess - 7. "An even mantissa with a single excess bit immediately following would be truncated. But this would not be correct if above shift has truncated some extra bits. Check this case, and round excess bits upper manually." ((mantissa digitAt: 1) = 2r01000000 and: [self anyBitOfMagnitudeFrom: 1 to: shift]) ifTrue: [mantissa := mantissa + 1]] ifFalse: [mantissa := self. shift := 0]. "There will be a single inexact round off at last iteration" result := (mantissa digitAt: (n := mantissa digitLength)) asFloat. [(n := n - 1) > 0] whileTrue: [ result := 256.0 * result + (mantissa digitAt: n) asFloat]. ^result timesTwoPower: shift.! ! !LargeInteger methodsFor: 'system primitives' stamp: 'ClementBera 7/24/2013 17:04'! digitAt: index "Primitive. Answer the value of an indexable field in the receiver. LargePositiveInteger uses bytes of base two number, and each is a 'digit' base 256. Fail if the argument (the index) is not an Integer or is out of bounds. Essential. See Object documentation whatIsAPrimitive." self digitLength < index ifTrue: [^0] ifFalse: [^super at: index]! ! !LargeInteger methodsFor: 'system primitives' stamp: 'ClementBera 7/24/2013 17:04'! digitAt: index put: value "Primitive. Store the second argument (value) in the indexable field of the receiver indicated by index. Fail if the value is negative or is larger than 255. Fail if the index is not an Integer or is out of bounds. Answer the value that was stored. Essential. See Object documentation whatIsAPrimitive." ^super at: index put: value! ! !LargeInteger methodsFor: 'system primitives' stamp: 'ClementBera 7/24/2013 17:04'! digitLength "Primitive. Answer the number of indexable fields in the receiver. This value is the same as the largest legal subscript. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed! ! !LargeInteger methodsFor: 'comparing' stamp: 'ClementBera 7/24/2013 17:04'! hash ^ByteArray hashBytes: self startingWith: self species hash! ! !LargeInteger methodsFor: 'bit manipulation' stamp: 'ClementBera 7/24/2013 17:04'! hashMultiply "Truncate to 28 bits and try again" ^(self bitAnd: 16rFFFFFFF) hashMultiply! ! !LargeInteger methodsFor: 'bit manipulation' stamp: 'ClementBera 7/24/2013 17:04'! highBitOfMagnitude "Answer the index of the high order bit of the magnitude of the receiver, or zero if the receiver is zero. This method is used for LargeNegativeIntegers as well, since LargeIntegers are sign/magnitude." | realLength lastDigit | realLength := self digitLength. [(lastDigit := self digitAt: realLength) = 0] whileTrue: [(realLength := realLength - 1) = 0 ifTrue: [^ 0]]. ^ lastDigit highBitOfPositiveReceiver + (8 * (realLength - 1))! ! !LargeInteger methodsFor: 'testing' stamp: 'ClementBera 7/24/2013 17:04'! isLarge ^true! ! !LargeInteger methodsFor: 'testing' stamp: 'ClementBera 7/24/2013 17:04'! isPrime "Answer true if the receiver is a prime number. Use a probabilistic implementation that is much faster for large integers, and that is correct to an extremely high statistical level of confidence (effectively deterministic)." ^ self isProbablyPrime! ! !LargeInteger methodsFor: 'mathematical functions' stamp: 'ClementBera 7/24/2013 17:04'! mightBeASquare "In base 16, a square number can end only with 0,1,4 or 9 and - in case 0, only 0,1,4,9 can precede it, - in case 4, only even numbers can precede it. See http://en.wikipedia.org/wiki/Square_number So, in hex, the last byte must be one of: 00 10 40 90 x1 e4 x9 where x is any hex digit and e is any even digit Also, the receiver must be an aven power of two." | lsb | lsb := self digitAt: 1. ^(lsb = 0 and: [ self lowBit odd ]) "00 (and even power of 2)" or: [ lsb = 16r40 "40" or: [ (lsb bitAnd: 16r7) = 1 "any|1 or any|9" or: [ (lsb bitAnd: 16r1F) = 4 "even|4" or: [ (lsb bitAnd: 16r7F) = 16 ]]]] "10 or 90"! ! !LargeInteger methodsFor: 'printing' stamp: 'ClementBera 7/24/2013 17:04'! printOn: aStream base: b nDigits: n "Append a representation of this number in base b on aStream using n digits. In order to reduce cost of LargePositiveInteger ops, split the number of digts approximatily in two Should be invoked with: 0 <= self < (b raisedToInteger: n)" | halfPower half head tail | n <= 1 ifTrue: [ n <= 0 ifTrue: [self error: 'Number of digits n should be > 0']. "Note: this is to stop an infinite loop if one ever attempts to print with a huge base This can happen because choice was to not hardcode any limit for base b We let Character>>#digitValue: fail" ^aStream nextPut: (Character digitValue: self)]. halfPower := n bitShift: -1. half := b raisedToInteger: halfPower. head := self quo: half. tail := self - (head * half). head printOn: aStream base: b nDigits: n - halfPower. tail printOn: aStream base: b nDigits: halfPower! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:04'! quo: anInteger "Primitive. Divide the receiver by the argument and return the result. Round the result down towards zero to make it a whole integer. Fail if the argument is 0. Fail if either the argument or the result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive." ^super quo: anInteger! ! !LargeInteger methodsFor: 'arithmetic' stamp: 'ClementBera 7/24/2013 17:04'! rem: aNumber "Remainder defined in terms of quo:. See super rem:. This is defined only to speed up case of large integers." aNumber isInteger ifTrue: [| ng rem | ng := self negative == aNumber negative == false. rem := (self digitDiv: aNumber neg: ng) at: 2. ^ rem normalize]. ^super rem: aNumber! ! !LargeInteger methodsFor: 'system primitives' stamp: 'ClementBera 7/24/2013 17:04'! replaceFrom: start to: stop with: replacement startingAt: repStart "Primitive. This destructively replaces elements from start to stop in the receiver starting at index, repStart, in the collection, replacement. Answer the receiver. Range checks are performed in the primitive only. Optional. See Object documentation whatIsAPrimitive." ^ super replaceFrom: start to: stop with: replacement startingAt: repStart! ! !LargeInteger methodsFor: 'mathematical functions' stamp: 'ClementBera 7/24/2013 17:04'! sqrtFloor "Return the integer part of the square root of self" | powerOfTwo | (powerOfTwo := self lowBit - 1 // 2) > 1 ifFalse: [^super sqrtFloor]. ^(self bitShift: -2 * powerOfTwo) sqrtFloor bitShift: powerOfTwo! ! !LargeInteger methodsFor: 'converting' stamp: 'ClementBera 7/24/2013 17:04'! withAtLeastNDigits: desiredLength | new | self size >= desiredLength ifTrue: [^self]. new := self class new: desiredLength. new replaceFrom: 1 to: self size with: self startingAt: 1. ^new! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(26 July 2013 1:28:22 pm) Pharo.image priorSource: 12585277! ----STARTUP----an Array(26 July 2013 1:38:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 1:38:06 pm) Pharo-30303.image priorSource: 12611012! ----STARTUP----an Array(26 July 2013 1:50:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 13:47' prior: 46140009! commentForCurrentUpdate ^ '11234 LargeNegativeInteger inherits from LargePositiveInteger (part 2) https://pharo.fogbugz.com/f/cases/11234'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 13:47'! script139 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1539.mcz KernelTests-MarcusDenker.537.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.81.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 13:47'! update30304 "self new update30304" self withUpdateLog: '11234 LargeNegativeInteger inherits from LargePositiveInteger (part 2) https://pharo.fogbugz.com/f/cases/11234'. self loadTogether: self script139 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LargeNegativeInteger commentStamp: '' prior: 42374975! Just like LargePositiveInteger, but represents a negative number.! !LargePositiveInteger commentStamp: '' prior: 42375042! I represent positive integers of more than 30 bits (ie, >= 1073741824). These values are beyond the range of SmallInteger, and are encoded here as an array of 8-bit digits. Care must be taken, when new values are computed, that any result that COULD BE a SmallInteger IS a SmallInteger (see normalize). Note that the bit manipulation primitives, bitAnd:, bitShift:, etc., = and ~= run without failure (and therefore fast) if the value fits in 32 bits. This is a great help to the simulator.! !LargeNegativeInteger commentStamp: '' prior: 46176361! Just like LargePositiveInteger, but represents a negative number.! !LargePositiveInteger commentStamp: '' prior: 46176496! I represent positive integers of more than 30 bits (ie, >= 1073741824). These values are beyond the range of SmallInteger, and are encoded here as an array of 8-bit digits. Care must be taken, when new values are computed, that any result that COULD BE a SmallInteger IS a SmallInteger (see normalize). Note that the bit manipulation primitives, bitAnd:, bitShift:, etc., = and ~= run without failure (and therefore fast) if the value fits in 32 bits. This is a great help to the simulator.! "Kernel"! ----End fileIn----! ----QUIT----an Array(26 July 2013 1:50:23 pm) Pharo.image priorSource: 12611211! ----STARTUP----an Array(26 July 2013 1:59:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 1:59:23 pm) Pharo-30304.image priorSource: 12623290! ----STARTUP----an Array(26 July 2013 4:17:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/26/2013 16:09' prior: 46165943! commentForCurrentUpdate ^ '11208 Uncategorized method in Class https://pharo.fogbugz.com/f/cases/11208 10993 A rule or test must make sure we don not add methods to Class https://pharo.fogbugz.com/f/cases/10993 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/26/2013 16:09'! script140 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1539.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.83.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.97.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.100.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.882.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1194.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/26/2013 16:09'! update30305 "self new update30305" self withUpdateLog: '11208 Uncategorized method in Class https://pharo.fogbugz.com/f/cases/11208 10993 A rule or test must make sure we don not add methods to Class https://pharo.fogbugz.com/f/cases/10993 '. self loadTogether: self script140 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BehaviorTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:16'! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TBehavior>>selector) sourceCode ] raise: Error. self assert: (TBehavior>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#format #isBehavior layout) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #localSelectors #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet.! ! !ClassTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 15:21'! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClass>>selector) sourceCode ] raise: Error. self assert: (TClass>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "traitComposition traitComposition: localSelectors localSelectors: basicLocalSelectors basicLocalSelectors -> accessors to instance variables that do not belong to Trait" "baseClass classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names" "addInstVarNamed: for traits is implemeted in TraitDescription" self assert: (Class localSelectors difference: Trait localSelectors) equals: #(#traitComposition: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: #basicLocalSelectors: #traitComposition #addInstVarNamed:) asSet. "classTrait: isClassTrait classTrait isBaseTrait baseTrait -> they have their equivalent for classes but with different name" "nautilusIcon initialize is implemented differently for traits, classes have their implentation in Object" self assert: (Trait localSelectors difference: Class localSelectors) equals: #(#classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait) asSet. ! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:29'! differentMethodsWithSameSelectorBetween: firstClass and: secondClass | repeatedSelectors differentMethodsWithSameSelector | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. differentMethodsWithSameSelector := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. m1 sourceCode ~= m2 sourceCode]. ^differentMethodsWithSameSelector.! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:30'! repeatedMethodsThatDoNotAccessInstanceVariablesBetween: firstClass and: secondClass | repeatedSelectors repeatedMethodsThatDoNotAccessInstanceVariables | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. repeatedMethodsThatDoNotAccessInstanceVariables := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. ((m1 sourceCode = m2 sourceCode) and: [ m1 hasInstVarRef not ]) and: [ m2 hasInstVarRef not ]]. ^repeatedMethodsThatDoNotAccessInstanceVariables.! ! !MetaclassTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:24'! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TApplyingOnClassSide>>selector) sourceCode ] raise: Error. self assert: (TApplyingOnClassSide>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:.} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:.} asSet. ! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:18'! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClassDescription>>selector) sourceCode ] raise: Error. self assert: (TClassDescription>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "superclass:layout, initializeLayout, initializeLayoutWithSlots:, layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) baseClass classClass classVersion -> they have their equivalens in TraitDescription (baseTrait classTrait traitVersion)" self assert: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: #classVersion) asSet. "isClassTrait, baseTrait, traitVersion, isBaseTrait, classTrait -> They have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names copyTraitExpresion addExclusionOf: have no equivalent in classes" self assert: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #traitVersion #isBaseTrait #classTrait) asSet. ! ! "KernelTests"! "SUnit-Core"! ----End fileIn----! ----QUIT----an Array(26 July 2013 4:17:23 pm) Pharo.image priorSource: 12623489! ----STARTUP----an Array(26 July 2013 4:25:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 July 2013 4:25:43 pm) Pharo-30305.image priorSource: 12645294! ----STARTUP----an Array(27 July 2013 2:24:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Kernel"! ----End fileIn----! ----QUIT----an Array(27 July 2013 2:24:25 pm) Pharo.image priorSource: 12645493! ----STARTUP----an Array(27 July 2013 2:32:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 July 2013 2:32:56 pm) Pharo-30306.image priorSource: 12645734! ----STARTUP----an Array(27 July 2013 4:32:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(27 July 2013 4:32:17 pm) Pharo.image priorSource: 12645933! ----STARTUP----an Array(27 July 2013 4:40:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 July 2013 4:40:42 pm) Pharo-30306.image priorSource: 12646142! ----STARTUP----an Array(27 July 2013 5:02:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/27/2013 16:59' prior: 46178221! commentForCurrentUpdate ^ '2173 ExternalDropHandler initialize https://pharo.fogbugz.com/f/cases/2173 11241 There are still some references to the old debugger https://pharo.fogbugz.com/f/cases/11241'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/27/2013 17:00'! script100 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.83.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.220.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.885.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1197.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/27/2013 16:08'! update30306 "sync" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/27/2013 17:00'! update30307 "self new update30307" self withUpdateLog: '2173 ExternalDropHandler initialize https://pharo.fogbugz.com/f/cases/2173 11241 There are still some references to the old debugger https://pharo.fogbugz.com/f/cases/11241'. self loadTogether: self script100 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30304! ScriptLoader removeSelector: #update30303! ScriptLoader removeSelector: #update30302! ScriptLoader removeSelector: #update30301! ScriptLoader removeSelector: #update30300! ScriptLoader removeSelector: #update30299! ScriptLoader removeSelector: #update30298! ScriptLoader removeSelector: #update30297! ScriptLoader removeSelector: #update30296! ScriptLoader removeSelector: #update30295! ScriptLoader removeSelector: #update30294! ScriptLoader removeSelector: #update30293! ScriptLoader removeSelector: #update30292! ScriptLoader removeSelector: #update30291! ScriptLoader removeSelector: #script140! ScriptLoader removeSelector: #script139! ScriptLoader removeSelector: #script138! ScriptLoader removeSelector: #script137! ScriptLoader removeSelector: #script136! ScriptLoader removeSelector: #script135! ScriptLoader removeSelector: #script134! ScriptLoader removeSelector: #script133! ScriptLoader removeSelector: #script132! ScriptLoader removeSelector: #script131! ScriptLoader removeSelector: #script130! ScriptLoader removeSelector: #script129! ScriptLoader removeSelector: #script128! ScriptLoader removeSelector: #script127! "ScriptLoader30"! !SpecDebugger methodsFor: '*SmartSuggestions' stamp: 'MarcusDenker 7/26/2013 15:15'! sugsContext ^SugsDebuggerContext model: self! ! !StartupLoader class methodsFor: 'example' stamp: 'MarcusDenker 7/26/2013 15:13' prior: 33794359! example2 " it's my personal script provided as example" "self example2" | items | items := OrderedCollection new. items add: (StartupAction name: 'Set the Author' code: [ Author fullName: Author fullName printString ]). "replace it by your name" StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'author.st'. items removeAll. items add: (StartupAction name: 'Debugger option' code: [ Smalltalk tools debugger alwaysOpenFullDebugger: true ]). items add: (StartupAction name: 'Dragging Option' code: [ UITheme defaultSettings fastDragging: true ]). items add: (StartupAction name: 'Dialog Auto Accept' code: [ TextEditorDialogWindow autoAccept: true ]). StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'settings.st'. items removeAll. items add: (StartupAction name: 'Fonts option' code: [ FreeTypeSystemSettings loadFt2Library: true. FreeTypeFontProvider current updateFromSystem. StandardFonts defaultFont: (LogicalFont familyName: 'Lucida Grande' pointSize: 10) forceNotBold. GraphicFontSettings resetAllFontToDefault. StandardFonts codeFont: (LogicalFont familyName: 'Consolas' pointSize: 10).] runOnce: true). StartupLoader default addAtStartupInPreferenceVersionFolder: items named: 'fonts.st'. items removeAll. StartupLoader default addAtStartupInImageDirectory: items. StartupLoader default loadStartupScript.! ! !ExternalDropHandler class methodsFor: 'cleanup' stamp: 'MarcusDenker 7/26/2013 17:00'! cleanUp self resetRegisteredHandlers.! ! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 7/26/2013 17:00' prior: 33956537! cleanUpForRelease "self new cleanUpForRelease" Author fullName: 'Mr.Cleaner'. self cleanUpMethods. FreeTypeFontProvider current initialize. SystemNavigation new allObjectsDo: [ :each | (each respondsTo: #releaseCachedState) ifTrue: [ each releaseCachedState ] ]. "Remove empty categories, which are not in MC packages, because MC does not do this (this script does not make packages dirty)" Smalltalk organization removeEmptyCategories. Smalltalk allClassesAndTraitsDo: [ :class | [ :each | each removeEmptyCategories; sortCategories ] value: class organization; value: class class organization ]. Smalltalk organization sortCategories. Smalltalk garbageCollect. Smalltalk cleanOutUndeclared. Smalltalk fixObsoleteReferences. Smalltalk cleanUp: true except: #() confirming: false. Author reset! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 7/26/2013 17:00' prior: 23532696! cleanUpMethods "Make sure that all methods in use are restarted" "ScriptLoader new cleanUpMethods" WeakArray restartFinalizationProcess. WorldState allInstancesDo: [ :ws | ws convertAlarms; convertStepList; resetWorldMenu]. WorldState allInstancesDo: [ :ws | ws instVarNamed: 'menuBuilder' put: nil ]. ProcessBrowser initialize. Smalltalk garbageCollect. Delay startTimerEventLoop! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'MarcusDenker 7/26/2013 15:13' prior: 36711361! testDebuggerIsAValidContext | debugger | debugger := Smalltalk tools debugger new. self assert: (SugsAbstractContext contextFor: debugger) class equals: SugsDebuggerContext .! ! "SmartSuggestions"! "StartupPreferences"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(27 July 2013 5:02:25 pm) Pharo.image priorSource: 12646341! ----STARTUP----an Array(27 July 2013 5:10:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 July 2013 5:10:48 pm) Pharo-30307.image priorSource: 12661999! ----STARTUP----an Array(28 July 2013 11:21:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/28/2013 11:19' prior: 46201073! commentForCurrentUpdate ^ '11162 clean up #noteClassStructure: in Changeset https://pharo.fogbugz.com/f/cases/11162/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/28/2013 11:19'! script101 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.52.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.83.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.223.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.885.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1197.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/28/2013 11:19'! update30308 "self new update30308" self withUpdateLog: '11162 clean up #noteClassStructure: in Changeset https://pharo.fogbugz.com/f/cases/11162/'. self loadTogether: self script101 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ChangeSet commentStamp: '' prior: 45089504! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes. superclasses - Dictionary {#Rectangle -> #Object}. Of all classes in classChanges, and all of their superclasses.! !ChangeSet commentStamp: '' prior: 46227297! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes. superclasses - Dictionary {#Rectangle -> #Object}. Of all classes in classChanges, and all of their superclasses.! !ChangeSet methodsFor: 'moving changes' stamp: 'MarcusDenker 7/22/2013 13:11' prior: 18831253! absorbClass: className from: otherChangeSet "Absorb into the receiver all the changes found in the class in the other change set. *** Classes renamed in otherChangeSet may have problems" (self changeRecorderFor: className) assimilateAllChangesIn: (otherChangeSet changeRecorderFor: className). ! ! !ChangeSet methodsFor: 'change logging' stamp: 'MarcusDenker 7/22/2013 13:12' prior: 18804975! changeClass: class from: oldClass "Remember that a class definition has been changed. Record the original structure, so that a conversion method can be built." class wantsChangeSetLogging ifFalse: [^ self]. class isMeta ifFalse: [self atClass: class add: #change] "normal" ifTrue: [((self classChangeAt: class theNonMetaClass name) includes: #add) ifTrue: [self atClass: class add: #add] "When a class is defined, the metaclass is not recorded, even though it was added. A further change is really just part of the original add." ifFalse: [self atClass: class add: #change]]. self addCoherency: class name. (self changeRecorderFor: class) notePriorDefinition: oldClass.! ! !ChangeSet methodsFor: 'moving changes' stamp: 'MarcusDenker 7/22/2013 13:12' prior: 18835392! forgetChangesForClass: className in: otherChangeSet "See forgetAllChangesFoundIn:. Used in culling changeSets." (self changeRecorderFor: className) forgetChangesIn: (otherChangeSet changeRecorderFor: className). ! ! !ChangeSet methodsFor: 'moving changes' stamp: 'MarcusDenker 7/22/2013 13:12' prior: 18838453! removeClassChanges: class "Remove all memory of changes associated with this class" | cname | (class isString) ifTrue: [ cname := class ] ifFalse: [ cname := class name ]. changeRecords removeKey: cname ifAbsent: [].! ! !ChangeSet methodsFor: 'change logging' stamp: 'MarcusDenker 7/22/2013 13:12' prior: 18808683! renameClass: class from: oldName to: newName "Include indication that a class has been renamed." | recorder oldMetaClassName newMetaClassName | (recorder := self changeRecorderFor: oldName) noteChangeType: #rename; noteNewName: newName asSymbol. "store under new name (metaclass too)" changeRecords at: newName put: recorder. changeRecords removeKey: oldName. newMetaClassName := newName, ' class'. oldMetaClassName := oldName, ' class'. recorder := changeRecords at: oldMetaClassName ifAbsent: [^ nil]. changeRecords at: newMetaClassName put: recorder. changeRecords removeKey: oldMetaClassName. recorder noteNewName: newMetaClassName! ! ChangeSet removeSelector: #structures! ChangeSet removeSelector: #noteClassStructure:! ChangeSet removeSelector: #noteClassForgotten:! ChangeSet removeSelector: #methodsWithAnyInitialsOtherThan:! ChangeSet removeSelector: #messageListForChangesWhich:ifNone:! ChangeSet removeSelector: #absorbStructureOfClass:from:! ChangeRecord removeSelector: #prior! "System-Changes"! ----End fileIn----! ----QUIT----an Array(28 July 2013 11:21:22 am) Pharo.image priorSource: 12662198! ----STARTUP----an Array(28 July 2013 11:29:46 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 July 2013 11:29:46 am) Pharo-30308.image priorSource: 12676965! ----STARTUP----an Array(28 July 2013 8:10:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/28/2013 20:08' prior: 46216931! commentForCurrentUpdate ^ '11258 update 30308 lost class instance variable in ChangeSet https://pharo.fogbugz.com/f/cases/11258 10097 HandMorph>>showDebugEvents:true --> too small a rectangle with bigger fonts https://pharo.fogbugz.com/f/cases/10097 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/28/2013 20:08'! script102 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.43.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.54.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.83.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.225.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.25.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.885.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.597.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1197.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/28/2013 20:08'! update30309 "self new update30309" self withUpdateLog: '11258 update 30308 lost class instance variable in ChangeSet https://pharo.fogbugz.com/f/cases/11258 10097 HandMorph>>showDebugEvents:true --> too small a rectangle with bigger fonts https://pharo.fogbugz.com/f/cases/10097 '. self loadTogether: self script102 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ChangeSet commentStamp: '' prior: 46227879! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes.! !ChangeSet commentStamp: '' prior: 46242541! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes.! !ChangeSet class methodsFor: 'services' stamp: 'MarcusDenker 7/28/2013 11:54' prior: 18864373! newChangesFromStream: aStream named: aName "File in the code from the stream into a new change set whose name is derived from aName. Leave the 'current change set' unchanged. Return the new change set or nil on failure." | oldChanges newName newSet | oldChanges := ChangeSet current. PreviousSet := oldChanges name. "so a Bumper update can find it" newName := aName withoutPeriodSuffix. newSet := self basicNewChangeSet: newName. [ | newStream | newSet ifNotNil:[ (aStream respondsTo: #converter:) ifFalse: [ newStream := MultiByteBinaryOrTextStream with: (aStream contentsOfEntireFile). newStream reset.] ifTrue: [newStream := aStream]. self newChanges: newSet. newStream setConverterForCode. CodeImporter evaluateReadStream: newStream readStream]. aStream close] ensure: [self newChanges: oldChanges]. PreviousSet := nil. ^ newSet! ! !HandMorph class methodsFor: 'utilities' stamp: 'MarcusDenker 7/28/2013 13:03' prior: 43522792! showEvents: aBool "HandMorph showEvents: true" "HandMorph showEvents: false" ShowEvents := aBool. aBool ifFalse: [ World invalidRect: (0@0 extent: 500@120) ].! ! !HandMorph methodsFor: 'events-processing' stamp: 'MarcusDenker 7/28/2013 13:03' prior: 23237668! showDebugEvent: evt ShowEvents == true ifTrue: [ | ofs| Display fill: (0@0 extent: 500@120) rule: Form over fillColor: Color white. ofs := (owner hands indexOf: self) - 1 * 60. evt printString displayAt: (0@ofs) + (evt isKeyboard ifTrue: [0@30] ifFalse: [0@0]). self keyboardFocus printString displayAt: (0@ofs)+(0@45). ].! ! ChangeSet removeSelector: #superclasses! "Morphic-Base"! "System-Changes"! ----End fileIn----! ----QUIT----an Array(28 July 2013 8:10:25 pm) Pharo.image priorSource: 12677166! ----STARTUP----an Array(28 July 2013 8:18:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 July 2013 8:18:56 pm) Pharo-30309.image priorSource: 12690752! ----STARTUP----an Array(29 July 2013 10:07:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/29/2013 10:03' prior: 46231899! commentForCurrentUpdate ^ '5469 SHA1 duplicated implementations https://pharo.fogbugz.com/f/cases/5469'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/29/2013 10:03'! script103 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.15.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-EstebanLorenzano.19.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-EstebanLorenzano.96.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-EstebanLorenzano.75.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.842.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.244.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.54.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.154.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.101.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-EstebanLorenzano.93.mcz Polymorph-Widgets-MarcusDenker.866.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.191.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.181.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.83.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.68.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.143.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.216.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.225.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-EstebanLorenzano.275.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.885.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-EstebanLorenzano.2.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1197.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.6.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/29/2013 10:05'! update30310 "self new update30310" self withUpdateLog: '5469 SHA1 duplicated implementations https://pharo.fogbugz.com/f/cases/5469'. self loadTogether: self script103 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SHA1Test commentStamp: '' prior: 0! This is the unit test for the class SecureHashAlgorithm. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! !SHA1Ecryptor methodsFor: 'protocol' stamp: 'MaxLeske 7/28/2013 17:27' prior: 32513061! encrypt: aString ^ SHA1 new hashMessage: aString! ! !SHA1 methodsFor: 'public' stamp: 'MaxLeske 7/28/2013 17:39' prior: 32504364! hashStream: aPositionableStream "Hash the contents of the given stream from the current position to the end using the Secure Hash Algorithm. The SHA algorithm is defined in FIPS PUB 180-1. It is also described on p. 442 of 'Applied Cryptography: Protocols, Algorithms, and Source Code in C' by Bruce Scheier, Wiley, 1996." "SecureHashAlgorithm new hashStream: (ReadStream on: 'foo')" "(SecureHashAlgorithm new hashMessage: '') radix: 16 => 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'" | startPosition buf bitLength | self initializeTotals. aPositionableStream atEnd ifTrue: [self processFinalBuffer: #() bitLength: 0]. startPosition := aPositionableStream position. [aPositionableStream atEnd] whileFalse: [ buf := aPositionableStream next: 64. (aPositionableStream atEnd not and: [buf size = 64]) ifTrue: [self processBuffer: buf] ifFalse: [ bitLength := (aPositionableStream position - startPosition) * 8. self processFinalBuffer: buf bitLength: bitLength]]. ^ self finalHash ! ! !DigitalSignatureAlgorithm class methodsFor: 'public' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20876078! sign: aStringOrStream privateKey: privateKey "Sign the given message (a stream or string) and answer a signature string." "Note: Unguessable random numbers are needed for message signing. The user will be prompted to type a really long random string (two or three lines) to initialize the random number generator before signing a message. A different random string should be typed for every session; it is not a password and we wish to produce different random number streams." | dsa hasher h sig | dsa := self new. dsa initRandomFromUser. hasher := SHA1 new. h := aStringOrStream class isBytes ifTrue: [ hasher hashMessage: aStringOrStream ] ifFalse: [ hasher hashStream: aStringOrStream ]. sig := dsa computeSignatureForMessageHash: h privateKey: privateKey. ^ dsa signatureToString: sig! ! !DigitalSignatureAlgorithm class methodsFor: 'public' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20877004! sign: aStringOrStream privateKey: privateKey dsa: dsa "Sign the given message (a stream or string) and answer a signature string." "Note: Unguessable random numbers are needed for message signing. The user will be prompted to type a really long random string (two or three lines) to initialize the random number generator before signing a message. A different random string should be typed for every session; it is not a password and we wish to produce different random number streams." | hasher h sig | hasher := SHA1 new. h := aStringOrStream class isBytes ifTrue: [ hasher hashMessage: aStringOrStream ] ifFalse: [ hasher hashStream: aStringOrStream ]. sig := dsa computeSignatureForMessageHash: h privateKey: privateKey. ^ dsa signatureToString: sig! ! !DigitalSignatureAlgorithm class methodsFor: 'public' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20877878! verify: signatureString isSignatureOf: aStringOrStream publicKey: publicKey "Answer true if the given signature string signs the given message (a stream or string)." "Note: Random numbers are not needed for signature verification; thus, there is no need to call initRandomFromUser before verifying a signature." | dsa hasher h sig | dsa := self new. hasher := SHA1 new. h := aStringOrStream class isBytes ifTrue: [ hasher hashMessage: aStringOrStream ] ifFalse: [ hasher hashStream: aStringOrStream ]. sig := dsa stringToSignature: signatureString. ^ dsa verifySignature: sig ofMessageHash: h publicKey: publicKey! ! !DigitalSignatureAlgorithm methodsFor: 'private' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20867099! generateRandomLength: bitLength s: s n: n "Answer a random number of bitLength bits generated using the secure hash algorithm." | sha out count extraBits v | sha := SHA1 new. out := 0. count := (bitLength // 160). extraBits := bitLength - (count * 160). 0 to: count do: [:k | v := sha hashInteger: (s + n + k). k = count ifTrue: [ v := v - ((v >> extraBits) << extraBits)]. out := out bitOr: (v bitShift: (160 * k))]. ^ out ! ! !DigitalSignatureAlgorithm methodsFor: 'private' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20867640! generateSandQ "Generate a 160-bit random seed s and an industrial grade prime q." | hasher s sPlusOne u q | hasher := SHA1 new. [true] whileTrue: [ s := self nextRandom160. sPlusOne := s + 1. sPlusOne highBit > 160 ifTrue: [sPlusOne := sPlusOne \\ (2 raisedTo: 160)]. u := (hasher hashInteger: s) bitXor: (hasher hashInteger: sPlusOne). q := u bitOr: ((1 bitShift: 159) bitOr: 1). (self isProbablyPrime: q) ifTrue: [^ Array with: s with: q]]. ! ! !DigitalSignatureAlgorithm methodsFor: 'private' stamp: 'MaxLeske 7/28/2013 17:26' prior: 20868710! nextRandom160 "Answer a newly generated 160-bit random number in the range [1..(2^160 - 1)]." "Details: Try again in the extremely unlikely chance that zero is encountered." | result | result := 0. [result = 0] whileTrue: [ result := SHA1 new hashInteger: randKey seed: randSeed. randKey := randKey + result + 1]. ^ result ! ! !SHA1Test commentStamp: '' prior: 46256014! This is the unit test for the class SecureHashAlgorithm. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org) - the sunit class category! !SHA1Test methodsFor: 'testing - examples' stamp: 'MaxLeske 7/28/2013 17:27'! testEmptyInput "self run: #testEmptyInput" self assert: ((SHA1 new hashMessage: '') radix: 16) = 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'MaxLeske 7/28/2013 17:27'! testExample1 "This is the first example from the specification document (FIPS PUB 180-1)" hash := SHA1 new hashMessage: 'abc'. self assert: (hash = 16rA9993E364706816ABA3E25717850C26C9CD0D89D). ! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'MaxLeske 7/28/2013 17:27'! testExample2 "This is the second example from the specification document (FIPS PUB 180-1)" hash := SHA1 new hashMessage: 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'. self assert: (hash = 16r84983E441C3BD26EBAAE4AA1F95129E5E54670F1).! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'MaxLeske 7/28/2013 17:27'! testExample3 "This is the third example from the specification document (FIPS PUB 180-1). This example may take several minutes." hash := SHA1 new hashMessage: (String new: 1000000 withAll: $a). self assert: (hash = 16r34AA973CD4C4DAA4F61EEB2BDBAD27316534016F).! ! SecureHashAlgorithm removeSelector: #storeLength:in:! SecureHashAlgorithm removeSelector: #processFinalBuffer:bitLength:! SecureHashAlgorithm removeSelector: #processBufferUsingPrimitives:! SecureHashAlgorithm removeSelector: #processBuffer:! SecureHashAlgorithm removeSelector: #primHashBlock:using:! SecureHashAlgorithm removeSelector: #primHasSecureHashPrimitive! SecureHashAlgorithm removeSelector: #primExpandBlock:into:! SecureHashAlgorithm removeSelector: #initializeTotalsArray! SecureHashAlgorithm removeSelector: #initializeTotals! SecureHashAlgorithm removeSelector: #hashStream:! SecureHashAlgorithm removeSelector: #hashMessage:! SecureHashAlgorithm removeSelector: #hashInteger:seed:! SecureHashAlgorithm removeSelector: #hashInteger:! SecureHashAlgorithm removeSelector: #hashFunction:of:with:with:! SecureHashAlgorithm removeSelector: #finalHash! SecureHashAlgorithm removeSelector: #expandedBlock:! SecureHashAlgorithm removeSelector: #constantForStep:! SecureHashAlgorithm class removeSelector: #initialize! Smalltalk globals removeClassNamed: #SecureHashAlgorithm! SecureHashAlgorithmTest removeSelector: #testExample3! SecureHashAlgorithmTest removeSelector: #testExample2! SecureHashAlgorithmTest removeSelector: #testExample1! SecureHashAlgorithmTest removeSelector: #testEmptyInput! Smalltalk globals removeClassNamed: #SecureHashAlgorithmTest! "KeyChain"! "System-Hashing"! "Tests"! ----End fileIn----! ----QUIT----an Array(29 July 2013 10:07:25 am) Pharo.image priorSource: 12690951! ----STARTUP----an Array(29 July 2013 10:15:57 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 July 2013 10:15:57 am) Pharo-30310.image priorSource: 12710418! ----STARTUP----an Array(29 July 2013 11:19:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/29/2013 11:14' prior: 46245684! commentForCurrentUpdate ^ '11213 Kill changed from Object https://pharo.fogbugz.com/f/cases/11213 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/29/2013 11:15'! script104 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.98.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.55.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.95.mcz Polymorph-Widgets-MarcusDenker.867.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.193.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.84.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.225.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.886.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1198.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/29/2013 11:16'! update30311 "self new update30311" self withUpdateLog: '11213 Kill changed from Object https://pharo.fogbugz.com/f/cases/11213 '. self loadTogether: self script104 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphChanged commentStamp: '' prior: 0! I am raised when a morph property changed, and should be propagated to dependents! !MorphChangedWithArguments commentStamp: '' prior: 0! I am an announcement raised when a Morph changed and need to propagate the information to dependents. In addition, I also propagate a value! !AbstractNautilusPlugin commentStamp: '' prior: 42096018! AbstractNautilusPlugin is an abstraction of what a plugin for Nautilus is. Mainly, it defines the protocol! !AnnouncementSpy commentStamp: '' prior: 42105531! I am a tool to inspect live events . If you want to inspect events generated by an announcer without a priori knowledge about the kind and frequency of events, you can always open a spy on an announcer to track its events. announcer open or AnnouncementSpy openOn: announcer This opens a window which displays the sequence of events emitted by the announcer (after the spy has been launched). You can open/inspect each event individually using the contextual menu. you can also clear the list view. Try it on World announcer open (in Pharo 1.1 or later), then add and close windows to see events generated.! !ExampleRadioButtonModel commentStamp: 'gvc 9/23/2008 11:58' prior: 42255996! Model used for radio buttons in example of basic controls (see "UITheme exampleBasicControls").! !ListItemWrapper commentStamp: '' prior: 42383536! Contributed by Bob Arning as part of the ObjectExplorer package. ! !MessageList commentStamp: 'BenjaminVanRyseghem 11/29/2010 11:31' prior: 42415635! MessageList is a simple object that holds a set of ordered method definitions. See MessageList example for an example. MessageList example Instance Variables: methodReferenceList ! !MethodFinder commentStamp: 'sd 4/21/2011 17:22' prior: 42434125! Find a method in the system from a set of examples. Done by brute force, trying every possible selector. Errors are skipped over using ( [3 + 'xyz'] ifError: [^ false] ). Submit an array of the form ((data1 data2) answer (data1 data2) answer). MethodFinder methodFor: #( (4 3) 7 (0 5) 5 (5 5) 10). answer: 'data1 + data2' More generally, use the brace notation to construct live examples. The program tries data1 as the receiver, and tries all other permutations of the data for the receiver and args, and tries leaving out one argument, and uses all selectors data understands, and uses all selectors in all od data's superclasses. Floating point values must be precise to 0.01 percent, or (X * 0.0001). If you get an error, you have probably discovered a selector that needs to be removed from the Approved list. See MethodFinder.initialize. Please email the Pharo Team. Only considers 0, 1, 2, and 3 argument messages. The argument data may have 1 to 5 entries, but only a max of 4 used at a time. For now, we only test messages that use given number of args or one fewer. For example, this data (100 true 0.6) would test the receiver plus two args, and the receiver plus one arg, but not any other patterns. Three sets of selectors: Approved, AddAndRemove, and Blocks selectors. When testing a selector in AddAndRemove, deepCopy the receiver. We do not handle selectors that modify an argument (printOn: etc.). Blocks is a set of (selector argNumber) where that argument must be a block. For perform, the selector is tested. It must be in the Approved list. do: is not on the Approved list. It does not produce a result that can be tested. Type 'do' into the upper pane of the Selector Finder to find messages list that. Implementation Notes arguments of the load: method are structured as follows: - Odd list entries are data for it, even ones are the answers. nil input means data and answers were supplied already." "(MethodFinder new) load: #( (4 3) 7 (-10 5) -5 (-3 11) 8) ! !PragmaSetting commentStamp: 'AlainPlantec 1/3/2011 10:54' prior: 42560351! A PragmaSetting is a holder for a setting. A setting is declared in a class method which contains a pragma (as examples, or ). Settings can be collected on the fly by a PragmaCollector and browsed by a SettingBrowser. Settings are organized in trees. Instance Variables allowedInStyle: description: dialog: icon: label: name: order: ordering: precondition: target: targetSelector: allowedInStyle - xxxxx description - xxxxx dialog - xxxxx icon - xxxxx label - xxxxx name - xxxxx order - xxxxx ordering - xxxxx precondition - xxxxx target - xxxxx targetSelector - xxxxx ! !SystemReporter commentStamp: 'laza 1/18/2011 12:04' prior: 42720191! SystemReporter offers a window where information about the system is gathered. This can be easily copied to the clipboard and be attached to a bug report for better identification of the context the bug occured in. To extend the SystemReporter: - add a method reportXYZ: aStream to the reporting category - insert a line add: #XYZ method: #reportXYZ to the initialize method ! !TestRunner commentStamp: '' prior: 42736918! Although tests can be most easily be run from a browser, I provide the ability to: * select sets of test suites to run. I am designed to make it easy to execute groups of tests * obtain a more detailed log of the results UI Description ___________ My left-most pane lists all of the categories that contain test classes (i.e., subclasses of TestCase); when some of these categories are selected, the test classes that they contain appear in the pane to the right. Abstract classes are italicized, and the test class hierarchy is shown by indentation, so subclasses of ClassTestCase are indented more than subclasses of TestCase. The tests that did not pass (if any) are listed in the right-hand panes of the Test Runner; if you want to debug one, to see why it failed, just click on the name. ! !TestSuite commentStamp: '' prior: 42738318! This is a Composite of Tests, either TestCases or other TestSuites. The top-level protocol is #run. This creates aTestResult and sends self run: aTestResult. then ensures that any TestResources made available during the run are reset. These, and the dependencies protocol, are common between this and TestCase.! !ThreadSafeTranscript commentStamp: 'stephane.ducasse 4/1/2009 21:25' prior: 42754899! I'm an output device. Ultimately I can replace TranscripterStream since I'm thread safe and TranscripterStream. ThreadSafeTranscript can be installed as the default transcript using ThreadSafeTranscript installThreadSafeAsTranscript It can be installed as another Transcript accessible using STranscript ThreadSafeTranscript installThreadSafeAsSTranscript ! !Workspace commentStamp: 'ls 10/14/2003 12:13' prior: 42791641! A Workspace is a text area plus a lot of support for executable code. It is a great place to execute top-level commands to compute something useful, and it is a great place to develop bits of a program before those bits get put into class methods. To open a new workspace, execute: Workspace open A workspace can have its own variables, called "workspace variables", to hold intermediate results. For example, if you type into a workspace "x := 5" and do-it, then later you could type in "y := x * 2" and y would become 10. Additionally, in Morphic, a workspace can gain access to morphs that are on the screen. If acceptDroppedMorphss is turned on, then whenever a morph is dropped on the workspace, a variable will be created which references that morph. This functionality is toggled with the window-wide menu of a workspace. The instance variables of this class are: bindings - holds the workspace variables for this workspace acceptDroppedMorphss - whether dropped morphs should create new variables! !TextStyle commentStamp: '' prior: 42753448! A textStyle comprises the formatting information for composing and displaying a unit (usually a paragraph) of text. Typically one makes a copy of a master textStyle (such as TextStyle default), and then that copy may get altered in the process of editing. Bad things can happen if you do not copy first. Each of my instances consists of... fontArray An array of StrikeFonts fontFamilySize unused lineGrid An integer; default line spacing for paragraphs baseline An integer; default baseline (dist from line top to bottom of an 'a') alignment An integer; text alignment, see TextStyle alignment: firstIndent An integer; indent of first line in pixels restIndent An integer; indent of remaining lines in pixels rightIndent An integer; indent of right margin rel to section tabsArray An array of integers giving tab offsets in pixels marginTabsArray An array of margin tabs leading An integer giving default vertical line separation For a concrete example, look at TextStyle default copy inspect! !SoundTheme class methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/22/2013 14:59' prior: 50627816! current: aSoundTheme "Set the current sound theme." Current := aSoundTheme! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/23/2013 12:34'! addDependent: anObject self announcer on: MorphChanged do: [ :ann | anObject update: ann selector ]. self announcer on: MorphChangedWithArguments do: [ :ann | anObject update: ann selector with: ann arguments ]. ^ anObject! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 15:32'! changed: anAspect self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super changed: anAspect ] on: Exception do: []. self announcer announce: (MorphChanged new morph: self; selector: anAspect)! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/23/2013 12:33'! changed: anAspect with: anObject self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super changed: anAspect ] on: Exception do: []. self announcer announce: (MorphChangedWithArguments new morph: self; selector: anAspect; arguments: anObject)! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 15:23'! removeDependent: anObject self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" super removeDependent: anObject. self announcer unsubscribe: anObject! ! !MorphChanged commentStamp: '' prior: 46275651! I am raised when a morph property changed, and should be propagated to dependents! !MorphChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 15:05'! selector ^ selector! ! !MorphChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 15:05'! selector: anObject selector := anObject! ! !MorphChangedWithArguments commentStamp: '' prior: 46275800! I am an announcement raised when a Morph changed and need to propagate the information to dependents. In addition, I also propagate a value! !MorphChangedWithArguments methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/23/2013 12:32'! arguments ^ arguments! ! !MorphChangedWithArguments methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/23/2013 12:32'! arguments: anObject arguments := anObject! ! !AbstractNautilusPlugin commentStamp: '' prior: 46276011! AbstractNautilusPlugin is an abstraction of what a plugin for Nautilus is. Mainly, it defines the protocol! !AnnouncementSpy commentStamp: '' prior: 46276183! I am a tool to inspect live events . If you want to inspect events generated by an announcer without a priori knowledge about the kind and frequency of events, you can always open a spy on an announcer to track its events. announcer open or AnnouncementSpy openOn: announcer This opens a window which displays the sequence of events emitted by the announcer (after the spy has been launched). You can open/inspect each event individually using the contextual menu. you can also clear the list view. Try it on World announcer open (in Pharo 1.1 or later), then add and close windows to see events generated.! !ExampleRadioButtonModel commentStamp: 'gvc 9/23/2008 11:58' prior: 46276880! Model used for radio buttons in example of basic controls (see "UITheme exampleBasicControls").! !ListItemWrapper commentStamp: '' prior: 46277040! Contributed by Bob Arning as part of the ObjectExplorer package. ! !MessageList commentStamp: 'BenjaminVanRyseghem 11/29/2010 11:31' prior: 46277190! MessageList is a simple object that holds a set of ordered method definitions. See MessageList example for an example. MessageList example Instance Variables: methodReferenceList ! !MethodFinder commentStamp: 'sd 4/21/2011 17:22' prior: 46277452! Find a method in the system from a set of examples. Done by brute force, trying every possible selector. Errors are skipped over using ( [3 + 'xyz'] ifError: [^ false] ). Submit an array of the form ((data1 data2) answer (data1 data2) answer). MethodFinder methodFor: #( (4 3) 7 (0 5) 5 (5 5) 10). answer: 'data1 + data2' More generally, use the brace notation to construct live examples. The program tries data1 as the receiver, and tries all other permutations of the data for the receiver and args, and tries leaving out one argument, and uses all selectors data understands, and uses all selectors in all od data's superclasses. Floating point values must be precise to 0.01 percent, or (X * 0.0001). If you get an error, you have probably discovered a selector that needs to be removed from the Approved list. See MethodFinder.initialize. Please email the Pharo Team. Only considers 0, 1, 2, and 3 argument messages. The argument data may have 1 to 5 entries, but only a max of 4 used at a time. For now, we only test messages that use given number of args or one fewer. For example, this data (100 true 0.6) would test the receiver plus two args, and the receiver plus one arg, but not any other patterns. Three sets of selectors: Approved, AddAndRemove, and Blocks selectors. When testing a selector in AddAndRemove, deepCopy the receiver. We do not handle selectors that modify an argument (printOn: etc.). Blocks is a set of (selector argNumber) where that argument must be a block. For perform, the selector is tested. It must be in the Approved list. do: is not on the Approved list. It does not produce a result that can be tested. Type 'do' into the upper pane of the Selector Finder to find messages list that. Implementation Notes arguments of the load: method are structured as follows: - Odd list entries are data for it, even ones are the answers. nil input means data and answers were supplied already." "(MethodFinder new) load: #( (4 3) 7 (-10 5) -5 (-3 11) 8) ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 14:07'! changed "Receiver changed in a general way; inform all the dependents by sending each dependent an update: message." self changed: self! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 14:07'! changed: aParameter "Receiver changed. The change is denoted by the argument aParameter. Usually the argument is a Symbol that is part of the dependent's change protocol. Inform all of the dependents." self dependents do: [:aDependent | aDependent update: aParameter]! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 14:07'! changed: anAspect with: anObject "Receiver changed. The change is denoted by the argument anAspect. Usually the argument is a Symbol that is part of the dependent's change protocol. Inform all of the dependents. Also pass anObject for additional information." self dependents do: [:aDependent | aDependent update: anAspect with: anObject]! ! !PragmaSetting commentStamp: 'AlainPlantec 1/3/2011 10:54' prior: 46279562! A PragmaSetting is a holder for a setting. A setting is declared in a class method which contains a pragma (as examples, or ). Settings can be collected on the fly by a PragmaCollector and browsed by a SettingBrowser. Settings are organized in trees. Instance Variables allowedInStyle: description: dialog: icon: label: name: order: ordering: precondition: target: targetSelector: allowedInStyle - xxxxx description - xxxxx dialog - xxxxx icon - xxxxx label - xxxxx name - xxxxx order - xxxxx ordering - xxxxx precondition - xxxxx target - xxxxx targetSelector - xxxxx ! !SystemReporter commentStamp: 'laza 1/18/2011 12:04' prior: 46280364! SystemReporter offers a window where information about the system is gathered. This can be easily copied to the clipboard and be attached to a bug report for better identification of the context the bug occured in. To extend the SystemReporter: - add a method reportXYZ: aStream to the reporting category - insert a line add: #XYZ method: #reportXYZ to the initialize method ! !TestRunner commentStamp: '' prior: 46280812! Although tests can be most easily be run from a browser, I provide the ability to: * select sets of test suites to run. I am designed to make it easy to execute groups of tests * obtain a more detailed log of the results UI Description ___________ My left-most pane lists all of the categories that contain test classes (i.e., subclasses of TestCase); when some of these categories are selected, the test classes that they contain appear in the pane to the right. Abstract classes are italicized, and the test class hierarchy is shown by indentation, so subclasses of ClassTestCase are indented more than subclasses of TestCase. The tests that did not pass (if any) are listed in the right-hand panes of the Test Runner; if you want to debug one, to see why it failed, just click on the name. ! !TestSuite commentStamp: '' prior: 46281766! This is a Composite of Tests, either TestCases or other TestSuites. The top-level protocol is #run. This creates aTestResult and sends self run: aTestResult. then ensures that any TestResources made available during the run are reset. These, and the dependencies protocol, are common between this and TestCase.! !ThreadSafeTranscript commentStamp: 'stephane.ducasse 4/1/2009 21:25' prior: 46282168! I'm an output device. Ultimately I can replace TranscripterStream since I'm thread safe and TranscripterStream. ThreadSafeTranscript can be installed as the default transcript using ThreadSafeTranscript installThreadSafeAsTranscript It can be installed as another Transcript accessible using STranscript ThreadSafeTranscript installThreadSafeAsSTranscript ! !Workspace commentStamp: 'ls 10/14/2003 12:13' prior: 46282593! A Workspace is a text area plus a lot of support for executable code. It is a great place to execute top-level commands to compute something useful, and it is a great place to develop bits of a program before those bits get put into class methods. To open a new workspace, execute: Workspace open A workspace can have its own variables, called "workspace variables", to hold intermediate results. For example, if you type into a workspace "x := 5" and do-it, then later you could type in "y := x * 2" and y would become 10. Additionally, in Morphic, a workspace can gain access to morphs that are on the screen. If acceptDroppedMorphss is turned on, then whenever a morph is dropped on the workspace, a variable will be created which references that morph. This functionality is toggled with the window-wide menu of a workspace. The instance variables of this class are: bindings - holds the workspace variables for this workspace acceptDroppedMorphss - whether dropped morphs should create new variables! !MCPackageManager class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:50' prior: 24908388! forPackage: aPackage ^ self registry at: aPackage ifAbsent: [|mgr| mgr := self new initializeWithPackage: aPackage. self registry at: aPackage put: mgr. self announcer announce: (MCWorkingCopyCreated workingCopy: mgr package: aPackage). mgr ]! ! !MCPackageManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 15:33' prior: 24905794! modified: aBoolean modified = aBoolean ifTrue: [ ^ self ]. modified := aBoolean. self changed: #modified. modified ifFalse: [ Smalltalk logChange: '"' , self packageName , '"' ]. self announcer announce: (MCPackageModified package: self package) ! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'BenjaminVanRyseghem 7/22/2013 14:51' prior: 41430959! addRepository: aRepository ((repositories includes: aRepository) or: [aRepository == MCCacheRepository uniqueInstance]) ifFalse: [repositories add: aRepository. self class default addRepository: aRepository]. ^ aRepository! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:51' prior: 41432363! removeHTTPRepositoryLocationNamed: aRepositoryString | httpRepo others | httpRepo := repositories select: [:each | each isKindOf: MCHttpRepository]. others := repositories reject: [:each | each isKindOf: MCHttpRepository]. repositories := others, (httpRepo reject: [:each | each locationWithTrailingSlash = aRepositoryString])! ! !MCRepositoryGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:51' prior: 41432817! removeRepository: aRepository repositories remove: aRepository ifAbsent: []! ! !PackageOrganizer methodsFor: 'cleaning' stamp: 'BenjaminVanRyseghem 7/22/2013 14:54' prior: 29029508! flushObsoletePackages: aBlock "Flush all packages considered obsolete by evaluating the argument block." packages keys do: [ :key | (aBlock value: (packages at: key)) ifTrue:[packages removeKey: key]. ]! ! !PackageOrganizer methodsFor: 'registering' stamp: 'BenjaminVanRyseghem 7/22/2013 14:54' prior: 29029996! registerPackage: aPackageInfo packages at: aPackageInfo packageName put: aPackageInfo! ! !PackageOrganizer methodsFor: 'registering' stamp: 'BenjaminVanRyseghem 7/22/2013 14:54' prior: 29030377! unregisterPackage: aPackageInfo packages removeKey: aPackageInfo packageName ifAbsent: []! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:57' prior: 32927831! index: anIndex index := anIndex. self contentsChanged: index! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:57' prior: 32928264! selection: aSelection selection := aSelection. self contentsChanged: selection! ! !UITheme class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:31' prior: 37943895! current: aUITheme "Set the current ui theme." Current := aUITheme. SystemProgressMorph reset. "reset to use new fill styles" ScrollBar initializeImagesCache. "reset to use new arrows" aUITheme updateWorldDockingBars. World themeChanged.! ! !TextMorphForEditView methodsFor: 'private' stamp: 'BenjaminVanRyseghem 7/22/2013 14:19' prior: 52832703! selectionChanged self sharesFindReplace ifTrue: [self editor findReplaceService changed: #findReplaceSelection]. self useExtraSelection ifTrue: [self refreshExtraSelection]. super selectionChanged! ! !TextStyle commentStamp: '' prior: 46283674! A textStyle comprises the formatting information for composing and displaying a unit (usually a paragraph) of text. Typically one makes a copy of a master textStyle (such as TextStyle default), and then that copy may get altered in the process of editing. Bad things can happen if you do not copy first. Each of my instances consists of... fontArray An array of StrikeFonts fontFamilySize unused lineGrid An integer; default line spacing for paragraphs baseline An integer; default baseline (dist from line top to bottom of an 'a') alignment An integer; text alignment, see TextStyle alignment: firstIndent An integer; indent of first line in pixels restIndent An integer; indent of remaining lines in pixels rightIndent An integer; indent of right margin rel to section tabsArray An array of integers giving tab offsets in pixels marginTabsArray An array of margin tabs leading An integer giving default vertical line separation For a concrete example, look at TextStyle default copy inspect! !TextStyle class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:43'! addDependent: anObject self notifier addDependent: anObject! ! !TextStyle class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:43'! changed: anAspect self notifier changed: anAspect! ! !TextStyle class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:42'! notifier ^ notifier ifNil: [ notifier := Model new ]! ! !LabelMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 14:12' prior: 24254612! disabledStyle: anObject "Set the value of disabledStyle" disabledStyle := anObject. self changed! ! ThreadSafeTranscript removeSelector: #codePaneMenu:shifted:! ThreadSafeTranscript class removeSelector: #examplesHighlyConcurrent! "Announcements-View"! "GroupManagerUI"! "HelpSystem-Core"! "Keymapping-Settings"! "Monticello"! "MonticelloGUI"! "Morphic-Base"! "NautilusCommon"! "PackageInfo"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "RecentSubmissions"! "Refactoring-Core"! "SUnit-Core"! "SUnit-UI"! "Spec-Core"! "Spec-Widgets"! "System-Settings"! "System-Support"! "Text-Core"! "Tools"! "Transcript"! ----End fileIn----! ----QUIT----an Array(29 July 2013 11:19:48 am) Pharo.image priorSource: 12710619! ----STARTUP----an Array(29 July 2013 11:28:19 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 July 2013 11:28:19 am) Pharo-30311.image priorSource: 12747090! ----STARTUP----an Array(29 July 2013 2:03:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/29/2013 14:00' prior: 46265353! commentForCurrentUpdate ^ '11226 Kill update: from Object https://pharo.fogbugz.com/f/cases/11226'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/29/2013 14:01'! script105 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.102.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.95.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.135.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.300.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.772.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.101.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.98.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.56.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.95.mcz Polymorph-Widgets-MarcusDenker.867.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.193.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.84.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.44.mcz System-Changes-MarcusDenker.225.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.887.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1198.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/29/2013 14:01'! update30312 "self new update30312" self withUpdateLog: '11226 Kill update: from Object https://pharo.fogbugz.com/f/cases/11226'. self loadTogether: self script105 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/24/2013 13:35'! update: anAspect ^ self! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/24/2013 13:36'! update: anAspect ^ self! ! "Morphic-Base"! "System-Support"! ----End fileIn----! ----QUIT----an Array(29 July 2013 2:03:26 pm) Pharo.image priorSource: 12747291! ----STARTUP----an Array(29 July 2013 2:12:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 July 2013 2:12:48 pm) Pharo-30312.image priorSource: 12758097! ----STARTUP----an Array(29 July 2013 3:40:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/29/2013 15:37' prior: 46302024! commentForCurrentUpdate ^ '4142 Suggestions: move examples from UIThemes class to ExampleBuilderMorph class https://pharo.fogbugz.com/f/cases/4142 11261 isNil ifTrue: to ifNil: part 1 https://pharo.fogbugz.com/f/cases/11261 11262 isNil ifTrue: to ifNil: part 2 https://pharo.fogbugz.com/f/cases/11262'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/29/2013 15:37'! script106 ^ 'AST-Core-EstebanLorenzano.176.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.268.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.193.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.98.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.58.mcz Morphic-Examples-MarcusDenker.2.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.95.mcz Polymorph-Widgets-MarcusDenker.869.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.193.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.124.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.84.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.117.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.887.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1198.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/29/2013 15:38'! update30313 "self new update30313" self withUpdateLog: '4142 Suggestions: move examples from UIThemes class to ExampleBuilderMorph class https://pharo.fogbugz.com/f/cases/4142 11261 isNil ifTrue: to ifNil: part 1 https://pharo.fogbugz.com/f/cases/11261 11262 isNil ifTrue: to ifNil: part 2 https://pharo.fogbugz.com/f/cases/11262'. self loadTogether: self script106 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. . self flushCaches. ! ! "ScriptLoader30"! !ClassListExample commentStamp: 'AlainPlantec 1/22/2010 15:10' prior: 42172160! ClassListExample new openOn: Object ! !LazyClassListExample commentStamp: 'AlainPlantec 1/17/2010 08:28' prior: 42378242! LazyClassListExample new openOn: Object ! !ClassTreeExample commentStamp: 'AlainPlantec 1/18/2010 16:20' prior: 42175996! ClassTreeExample new openOn: Object ! !PackageTreeExample commentStamp: '' prior: 42526027! PackageTreeExample new open! !SimpleGridExample commentStamp: 'AlainPlantec 2/1/2010 11:58' prior: 42678482! SimpleGridExample new open! !SimplestClassListExample commentStamp: 'AlainPlantec 2/18/2010 19:37' prior: 42679636! SimplestClassListExample new openOn: Object! !SimplestClassListWithChunkExample commentStamp: 'AlainPlantec 1/30/2010 09:16' prior: 42679681! SimplestClassListWithChunkExample new openOn: Object! !SimplestClassListWithPagerExample commentStamp: 'AlainPlantec 1/31/2010 21:13' prior: 42679735! SimplestClassListWithPagerExample new openOn: Object! !ClassChangeRecord methodsFor: 'removal' stamp: 'ClementBera 7/26/2013 16:08' prior: 19176057! forgetChangesIn: otherRecord "See forgetAllChangesFoundIn:. Used in culling changeSets." | cls otherMethodChanges | (cls := self realClass) ifNil: [ ^ self ]. "We can do better now, though..." otherMethodChanges := otherRecord methodChangeTypes. otherMethodChanges associationsDo: [ :assoc | | selector actionToSubtract | selector := assoc key. actionToSubtract := assoc value. (cls includesSelector: selector) ifTrue: [ (#(#add #change) includes: actionToSubtract) ifTrue: [ methodChanges removeKey: selector ifAbsent: [ ] ] ] ifFalse: [ (#(#remove #addedThenRemoved) includes: actionToSubtract) ifTrue: [ methodChanges removeKey: selector ifAbsent: [ ] ] ] ]. changeTypes isEmpty ifFalse: [ changeTypes removeAllFoundIn: otherRecord allChangeTypes. (changeTypes includes: #rename) ifFalse: [ changeTypes removeAllSuchThat: [ :x | x beginsWith: 'oldName: ' ] ] ]! ! !ClassChangeRecord methodsFor: 'method changes' stamp: 'ClementBera 7/26/2013 16:09' prior: 19174783! noteNewMethod: newMethod selector: selector priorMethod: methodOrNil | methodChange | methodChange := self findOrMakeMethodChangeAt: selector priorMethod: methodOrNil. methodOrNil ifNil: [ methodChange noteChangeType: #add ] ifNotNil: [ methodChange noteChangeType: #change ].! ! !FLSerializer methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:40' prior: 21656454! analyzer ^ analyzer ifNil: [ analyzer := self defaultAnalyzer ]! ! !ClassListNodeExample methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2011 20:53' prior: 19289549! browseItem Smalltalk tools browser fullOnClass: self item selector: nil ! ! !ClassListNodeExample methodsFor: 'menu' stamp: 'FernandoOlivero 4/12/2011 10:10' prior: 19290596! classButton ^ ( self theme newButtonIn: World for: self getState: nil action: #browseItem arguments: {} getEnabled: #enabled getLabel: nil help: 'Open a browser on ' translated , self item name) label: (self theme windowLabelForText: (self item name) , '...'); yourself! ! !ClassListNodeExample methodsFor: 'menu' stamp: 'FernandoOlivero 4/12/2011 09:41' prior: 19290995! commentText ^ ( self theme newTextIn: World text: self item comment) unlock; wrapFlag: true; yourself! ! !ClassListNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19289712! exploreItem self explore! ! !ClassListNodeExample methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37866607! icon ^ Smalltalk ui icons smallExpertIcon! ! !ClassListNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19289827! inspectItem self inspect! ! !ClassListNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/25/2011 17:04' prior: 19289942! keyStroke: anEvent from: aTreeMorph | c | c := anEvent keyCharacter. c = $b ifTrue: [self browseItem. ^ true]. c = $i ifTrue: [self inspectItem. ^ true]. c = $I ifTrue: [self exploreItem. ^ true]. ^ false ! ! !ClassListNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19290249! menu: menu shifted: b menu add: 'Browse (b)' translated target: self selector: #browseItem. menu add: 'Inspect (i)' translated target: self selector: #inspectItem. menu add: 'Explore (I)' translated target: self selector: #exploreItem. ! ! !ClassTreeNodeExample methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2011 20:54' prior: 19364009! browseItem Smalltalk tools browser fullOnClass: self item selector: nil ! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 1/15/2010 13:44' prior: 19365055! childrenItems ^ (self item subclasses asArray sort: [:a :b | a name < b name]) asOrderedCollection ! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'FernandoOlivero 4/12/2011 10:10' prior: 19365243! classButton ^ ( self theme newButtonIn: World for: self getState: nil action: #browseItem arguments: {} getEnabled: #enabled getLabel: nil help: 'Open a browser on ' translated , self item name) label: (self theme windowLabelForText: (self item name) , '...'); yourself! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'FernandoOlivero 4/12/2011 09:41' prior: 19365643! commentText ^ ( self theme newTextIn: World text: self item comment) unlock; wrapFlag: true; yourself! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 1/15/2010 13:43' prior: 19365831! contents ^ contents ifNil: [contents := super contents]! ! !ClassTreeNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:51' prior: 19364172! exploreItem self explore! ! !ClassTreeNodeExample methodsFor: 'menu' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37851659! icon ^ Smalltalk ui icons smallExpertIcon! ! !ClassTreeNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:51' prior: 19364287! inspectItem self inspect! ! !ClassTreeNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/25/2011 17:05' prior: 19364402! keyStroke: anEvent from: aTreeMorph | c | c := anEvent keyCharacter. c = $b ifTrue: [self browseItem. ^ true]. c = $i ifTrue: [self inspectItem. ^ true]. c = $I ifTrue: [self exploreItem. ^ true]. ^ false ! ! !ClassTreeNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:51' prior: 19364711! menu: menu shifted: b menu add: 'Browse (b)' translated target: self selector: #browseItem. menu add: 'Inspect (i)' translated target: self selector: #inspectItem. menu add: 'Explore (I)' translated target: self selector: #exploreItem. ! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:52' prior: 28990564! browseItem ! ! !PackageAbstractNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 1/15/2010 14:53' prior: 28991777! contents ^ contents ifNil: [contents := super contents]! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:52' prior: 28990672! doubleClick self browseItem! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:52' prior: 28990796! exploreItem self explore! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:52' prior: 28990917! inspectItem self inspect! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/25/2011 17:06' prior: 28991038! keyStroke: anEvent from: aTreeMorph | c | c := anEvent keyCharacter. c = $b ifTrue: [self browseItem. ^ true]. c = $i ifTrue: [self inspectItem. ^ true]. c = $I ifTrue: [self exploreItem. ^ true]. ^ false ! ! !PackageAbstractNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/3/2011 01:02' prior: 28991351! menu: menu shifted: b menu add: 'Expand all' translated target: self selector: #expandAll. menu add: 'Browse (b)' translated target: self selector: #browseItem. menu add: 'Inspect (i)' translated target: self selector: #inspectItem. menu add: 'Explore (I)' translated target: self selector: #exploreItem. ! ! !PackageClassNodeExample methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2011 20:57' prior: 28992979! browseItem Smalltalk tools browser fullOnClass: self item selector: nil! ! !PackageClassNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 2/8/2010 09:39' prior: 28993142! childNodeClassFromItem: anItem ^PackageMethodCategoryNodeExample! ! !PackageClassNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 1/29/2010 12:16' prior: 28993295! childrenItems ^ self item organization categories ! ! !PackageClassNodeExample methodsFor: 'menu' stamp: 'AlainPlantec 1/19/2010 15:44' prior: 28993435! methodsInCategory: aCat ^ self item methodsInCategory: aCat! ! !PackageMethodCategoryNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/8/2010 09:39' prior: 29027237! childNodeClassFromItem: anItem ^ PackageMethodNodeExample! ! !PackageMethodCategoryNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/29/2010 12:16' prior: 29027397! childrenItems ^ self parentNode item methodsInCategory: self item! ! !PackageMethodNodeExample methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2011 20:57' prior: 29027754! browseItem Smalltalk tools browser fullOnClass: self itemClass selector: self selector ! ! !PackageMethodNodeExample methodsFor: 'results' stamp: 'AlainPlantec 1/26/2010 14:03' prior: 29027949! compiledMethod ^ self itemClass compiledMethodAt: self selector ifAbsent: [self itemClass class compiledMethodAt: self selector ifAbsent: []]! ! !PackageMethodNodeExample methodsFor: 'private' stamp: 'AlainPlantec 1/26/2010 13:49' prior: 29028207! itemClass ^ self parentNode parentNode item. ! ! !PackageMethodNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/26/2010 13:49' prior: 29028357! selector ^ self item! ! !PackageNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2010 15:15' prior: 29028643! asString ^ self item packageName! ! !PackageNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/8/2010 09:39' prior: 29028758! childNodeClassFromItem: anItem ^ PackageClassNodeExample ! ! !PackageNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/29/2010 12:17' prior: 29028899! childrenItems ^ self item classes ! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:48' prior: 33272017! age ^ self item age! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:49' prior: 33272137! age: anInteger self item age: anInteger. self changed: #age! ! !SimpleGridNodeExample methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/12/2011 10:18' prior: 33272302! ageMorph ^ ( self theme newTextEntryIn: World for: self get: #age set: #age: class: Integer getEnabled: nil help: nil) color: Color transparent! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:51' prior: 33272577! firstName ^ self item firstName! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:49' prior: 33272709! firstName: aString self item firstName: aString. self changed: #firstName! ! !SimpleGridNodeExample methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/12/2011 10:19' prior: 33272888! firstNameMorph ^ ( self theme newTextEntryIn: World for: self get: #firstName set: #firstName: class: String getEnabled: nil help: nil) color: Color transparent! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:50' prior: 33273180! married ^ self item married! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:50' prior: 33273308! married: aBoolean self item married: aBoolean. self changed: #married! ! !SimpleGridNodeExample methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/12/2011 10:17' prior: 33273483! marriedMorph ^ ( self theme newCheckboxIn: World for: self getSelected: #married setSelected: #married: getEnabled: nil label: '' help: nil) color: Color transparent! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:51' prior: 33273774! secondName ^ self item secondName! ! !SimpleGridNodeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/2/2010 07:50' prior: 33273908! secondName: aString self item secondName: aString. self changed: #secondName! ! !SimpleGridNodeExample methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 4/12/2011 10:18' prior: 33274090! secondNameMorph ^ ( self theme newTextEntryIn: World for: self get: #secondName set: #secondName: class: String getEnabled: nil help: nil) color: Color transparent! ! !ChangeSet class methodsFor: 'initialization' stamp: 'ClementBera 7/26/2013 16:13' prior: 18856348! initialize "ChangeSet initialize" AllChangeSets ifNil: [ AllChangeSets := OrderedCollection new ]. self gatherChangeSets. FileServices registerFileReader: self! ! !ChangeSet methodsFor: 'filein/out' stamp: 'ClementBera 7/26/2013 16:07' prior: 18815028! assurePostscriptExists "Make sure there is a StringHolder holding the postscript. " "NOTE: FileIn recognizes the postscript by the line with Postscript: on it" postscript ifNil: [ postscript := '"Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." ' ]! ! !ChangeSet methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:07' prior: 18803792! name "The name of this changeSet. If name is nil, we've got garbage. Help to identify." ^ name ifNil: [ '' ] ifNotNil: [ name ]! ! !AIBlockContext class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:11' prior: 35469731! fromVMContext: aBlockContext |sender| sender := aBlockContext sender. ^ self new initializeContext: aBlockContext; homeContext: aBlockContext home asASTInterpreterContext ; closure: aBlockContext closure asASTBlockClosure; exceptionHandler: (sender ifNotNil: [ sender isHandlerContext ifTrue: [ (ExceptionHandler on: (sender tempAt: 1) do: (sender tempAt: 2)) enabled: (sender tempAt: 1)] ]) ; yourself! ! !ClassListExample commentStamp: 'AlainPlantec 1/22/2010 15:10' prior: 46323855! ClassListExample new openOn: Object ! !ClassListExample methodsFor: 't - accessing' stamp: 'AlainPlantec 10/1/2011 09:44' prior: 19286273! defaultChunkSize ^ nil! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/25/2011 17:03' prior: 19286392! keyStroke: anEvent from: aTreeMorph self selectedNode ifNotNil: [:current | current keyStroke: anEvent from: aTreeMorph]! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/18/2010 16:43' prior: 19286611! menu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" super menu: menu shifted: b. menu addLine. self selectedNode ifNotNil: [:current | current menu: menu shifted: b]. ^ menu! ! !ClassListExample methodsFor: 'instance creation' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19286934! open ^ self openOn: Object ! ! !ClassListExample methodsFor: 'instance creation' stamp: 'StephaneDucasse 12/19/2012 16:12' prior: 19287062! openOn: aClass | window | self rootClass: aClass. window := StandardWindow new model: self. window title: aClass name, ' hierarchy'. window addMorph: self treeMorph fullFrame: LayoutFrame identity. window themeChanged. window openInWorld. ^ window! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19287424! rootClass ^ rootClass ifNil: [rootClass := Object]! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19287571! rootClass: aClass rootClass := aClass! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2010 13:56' prior: 19287706! rootItems ^ self rootClass allSubclasses asArray sort: [:a :b | a name < b name ]! ! !ClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/7/2010 22:44' prior: 19287883! rootNodeClassFromItem: anItem ^ClassListNodeExample! ! !ClassListExample methodsFor: 'user interface' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37802363! treeMorph | treeMorph baseColor oddColor evenColor | baseColor := Color lightBlue lighter. oddColor := (GradientFillStyle ramp: { 0.0->baseColor whiter. 0.2->baseColor. 0.8->baseColor darker. 1.0->baseColor blacker}) radial: false. baseColor := Color veryLightGray muchLighter. evenColor := (GradientFillStyle ramp: { 0.0->baseColor lighter lighter. 0.2->baseColor lighter. 0.8->baseColor. 1.0->baseColor blacker}) radial: false. treeMorph := self treeMorphClass new model: self; beMultiple; columns: {MorphTreeColumn new startWidth: 100; rowMorphGetSelector: #classButton; headerButtonLabel: 'Class' font: nil icon: Smalltalk ui icons smallOpenIcon target: nil actionSelector: nil arguments: #(). MorphTreeColumn new rowMorphGetSelector: #commentText; headerButtonLabel: 'Comments' font: nil icon: Smalltalk ui icons smallPrintIcon target: nil actionSelector: nil arguments: #()}; makeLastColumnUnbounded; withHLines: true; allowColumnDrop; useSquareCorners; hResizing: #spaceFill; vResizing: #spaceFill; rowInset: 5; columnInset: 5; resizerWidth: 2; preferedPaneColor: Color white; getMenuSelector: #menu:shifted:; columnColorForEven: evenColor odd: oddColor. ^ treeMorph buildContents! ! !LazyClassListExample commentStamp: 'AlainPlantec 1/17/2010 08:28' prior: 46323977! LazyClassListExample new openOn: Object ! !LazyClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2010 13:59' prior: 24322527! treeMorphClass ^ LazyMorphTreeMorph ! ! !ClassTreeExample commentStamp: 'AlainPlantec 1/18/2010 16:20' prior: 46324099! ClassTreeExample new openOn: Object ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/13/2010 08:39' prior: 19361302! expandAllFromNode: aNode self changed: {#rootNodes. #expandAllFromNode:. aNode}! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/25/2011 17:04' prior: 19361478! keyStroke: anEvent from: aTreeMorph self selectedNode ifNotNil: [:current | current keyStroke: anEvent from: aTreeMorph]! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/13/2010 08:38' prior: 19361698! menu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" super menu: menu shifted: b. menu addLine. self selectedNode ifNotNil: [:current | current menu: menu shifted: b. menu addLine. menu add: 'Expand all from here' translated target: self selector: #expandAllFromNode: argument: current]. ^ menu! ! !ClassTreeExample methodsFor: 'instance creation' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19362157! open ^ self openOn: Object ! ! !ClassTreeExample methodsFor: 'instance creation' stamp: 'StephaneDucasse 12/19/2012 16:13' prior: 19362285! openOn: aClass | window | self rootClass: aClass. window := StandardWindow new model: self. window title: aClass name, ' hierarchy'. window addMorph: self treeMorph fullFrame: LayoutFrame identity. window themeChanged. window openInWorld. ^ window! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19362647! rootClass ^ rootClass ifNil: [rootClass := Object]! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/16/2010 09:50' prior: 19362794! rootClass: aClass rootClass := aClass! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2010 13:53' prior: 19362929! rootItems ^ OrderedCollection with: self rootClass! ! !ClassTreeExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/7/2010 22:44' prior: 19363075! rootNodeClassFromItem: anItem ^ ClassTreeNodeExample! ! !ClassTreeExample methodsFor: 'user interface' stamp: 'AlainPlantec 10/3/2011 01:26' prior: 19363224! treeMorph | treeMorph | treeMorph := (LazyMorphTreeMorph on: self) beMultiple; columns: { MorphTreeColumn new startWidth: 300; rowMorphGetSelector: #classButton; headerButtonLabel: 'Class' font: nil. MorphTreeColumn new startWidth: 500; rowMorphGetSelector: #commentText; headerButtonLabel: 'Comment' font: nil }; rowInset: 4; treeLineWidth: 1; columnInset: 4; getMenuSelector: #menu:shifted:; rowColorForEven: Color lightGray muchLighter. ^ treeMorph buildContents! ! !PackageTreeExample commentStamp: '' prior: 46324203! PackageTreeExample new open! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/11/2011 14:57' prior: 29037590! defaultTreeMorph ^ super defaultTreeMorph doubleClickSelector: #doubleClick; nodeStringGetter: #asString; getMenuSelector: #menu:shifted:. ! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 12/15/2009 20:11' prior: 29037838! doubleClick self selectedNode ifNotNil: [:n | n doubleClick]! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 2/25/2011 17:06' prior: 29037997! keyStroke: anEvent from: aTreeMorph self selectedNode ifNotNil: [:current | current keyStroke: anEvent from: aTreeMorph]! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 12/15/2009 15:10' prior: 29038220! menu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" self selectedNode ifNotNil: [:current | current menu: menu shifted: b]. ^ menu! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/7/2011 11:39' prior: 29038500! open ^ self openDialogWindowIn: World title: 'Packages'. ! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 1/29/2010 12:14' prior: 29038656! rootItems ^ PackageOrganizer default packages ! ! !PackageTreeExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 2/7/2010 22:44' prior: 29038800! rootNodeClassFromItem: anItem ^ PackageNodeExample! ! !SimpleGridExample commentStamp: 'AlainPlantec 2/1/2010 11:58' prior: 46324312! SimpleGridExample new open! !SimpleGridExample methodsFor: 'instance creation' stamp: 'AlainPlantec 2/1/2010 11:58' prior: 33270276! open (self treeMorph buildContents; embeddedInMorphicWindowLabeled: 'Simple grid example') openInWorld! ! !SimpleGridExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/9/2011 11:12' prior: 33270478! rootItems ^ rootItems ifNil: [rootItems := (1 to: 1000) collect: [:i | PersonDataExample firstName: 'Person' , i asString secondName: 'Person' , i asString , ' second name' age: i married: false] ]! ! !SimpleGridExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/7/2010 22:47' prior: 33270790! rootNodeClassFromItem: anItem ^ SimpleGridNodeExample! ! !SimpleGridExample methodsFor: 'user interface' stamp: 'AlainPlantec 10/10/2011 11:32' prior: 33270942! treeMorph | treeMorph oddColor evenColor | treeMorph := (self treeMorphClass on: self) beCheckList; beMultiple; columns: {MorphTreeColumn new startWidth: 100; rowMorphGetSelector: #firstNameMorph; headerButtonLabel: 'First name' font: nil. MorphTreeColumn new startWidth: 150; rowMorphGetSelector: #secondNameMorph; headerButtonLabel: 'Second name' font: nil. MorphTreeColumn new startWidth: 50; rowMorphGetSelector: #ageMorph; headerButtonLabel: 'Age' font: nil. MorphTreeColumn new startWidth: 50; rowMorphGetSelector: #marriedMorph; headerButtonLabel: 'Married' font: nil}; columnInset: 3; rowInset: 1; preferedPaneColor: Color white; rowColorForEven: Color veryLightGray muchLighter odd: Color white . ^ treeMorph ! ! !SimplestClassListExample commentStamp: 'AlainPlantec 2/18/2010 19:37' prior: 46324428! SimplestClassListExample new openOn: Object! !SimplestClassListExample methodsFor: 'view' stamp: 'AlainPlantec 10/8/2011 14:34' prior: 33334142! defaultTreeMorph ^ super defaultTreeMorph "beCheckList;" "autoDeselection: true;" multiSelection: true; autoMultiSelection: true; yourself! ! !SimplestClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/7/2011 14:10' prior: 33334395! openDialogOn: aClass rootClass := aClass. ^ self openDialogWindowIn: World title: 'All Object subclasses' ! ! !SimplestClassListExample methodsFor: 'instance creation' stamp: 'AlainPlantec 10/10/2011 11:55' prior: 33334609! openOn: aClass rootClass := aClass. (self defaultTreeMorph buildContents embeddedInMorphicWindowLabeled: 'test') openInWorld "(self dialogWindowIn: World title: 'All Object subclasses') openInWorld" ! ! !SimplestClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/8/2011 18:48' prior: 33334916! plugOne | l | rootClass := Object. l := PluggableListMorph on: self list: #rootItems selected: #selected changeSelected: #selected:. (l embeddedInMorphicWindowLabeled: 'test') openInWorld! ! !SimplestClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/10/2011 22:46' prior: 33335221! rootItems ^ rootClass allSubclasses asArray sort: [:a :b | a name < b name]! ! !SimplestClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/6/2011 17:24' prior: 33335401! rootItemsOrig ^ rootClass allSubclasses asArray sort: [:a :b | a name < b name]! ! !SimplestClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/6/2011 17:24' prior: 33335585! rootItemsTest ^ (rootClass allSubclasses asArray sort: [:a :b | a name < b name]), (rootClass allSubclasses asArray sort: [:a :b | a name < b name]),(rootClass allSubclasses asArray sort: [:a :b | a name < b name]),(rootClass allSubclasses asArray sort: [:a :b | a name < b name]),(rootClass allSubclasses asArray sort: [:a :b | a name < b name]), (rootClass allSubclasses asArray sort: [:a :b | a name < b name]), (rootClass allSubclasses asArray sort: [:a :b | a name < b name])! ! !SimplestClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/8/2011 18:49' prior: 33336171! selected ^ selected ifNil: [selected := 1]! ! !SimplestClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/8/2011 18:48' prior: 33336318! selected: x selected := x. self changed: #selected! ! !NullStream methodsFor: 'testing' stamp: 'ClementBera 7/29/2013 14:37' prior: 28484623! isBinary "Return true if the receiver is a binary byte stream" ^binary ! ! !SimplestClassListWithChunkExample commentStamp: 'AlainPlantec 1/30/2010 09:16' prior: 46324570! SimplestClassListWithChunkExample new openOn: Object! !SimplestClassListWithChunkExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/7/2011 11:31' prior: 33336827! defaultTreeMorph ^ super defaultTreeMorph chunkSize: 100; yourself! ! !SimplestClassListWithPagerExample commentStamp: 'AlainPlantec 1/31/2010 21:13' prior: 46324721! SimplestClassListWithPagerExample new openOn: Object! !SimplestClassListWithPagerExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/7/2011 11:47' prior: 33337351! defaultTreeMorph ^ super defaultTreeMorph pageSize: 100; yourself ! ! !SimplestPaginatedClassListExample methodsFor: 'view' stamp: 'AlainPlantec 10/10/2011 11:34' prior: 33337730! defaultTreeMorph ^ super defaultTreeMorph multiSelection: true; autoMultiSelection: true; yourself! ! !SimplestPaginatedClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/10/2011 11:41' prior: 33337949! itemsForTest ^ rootClass allSubclasses! ! !SimplestPaginatedClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/10/2011 11:33' prior: 33338102! openDialogOn: aClass rootClass := aClass. ^ self openDialogWindowIn: World title: 'All Object subclasses' ! ! !SimplestPaginatedClassListExample methodsFor: 'instance creation' stamp: 'AlainPlantec 10/10/2011 11:33' prior: 33338325! openOn: aClass rootClass := aClass. (self dialogWindowIn: World title: 'All Object subclasses') openInWorld ! ! !SimplestPaginatedClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/10/2011 11:41' prior: 33338550! rootItems ^ (self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest, self itemsForTest) asArray sort: [:a :b | a name < b name]! ! !MultiByteBinaryOrTextStream class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:18' prior: 27221174! on: aCollection encoding: encodingName | aTextConverter | encodingName ifNil: [aTextConverter := TextConverter default] ifNotNil: [aTextConverter := TextConverter newForEncoding: encodingName]. ^ (self on: aCollection) converter: aTextConverter! ! !MultiByteBinaryOrTextStream class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:27' prior: 27221536! with: aCollection encoding: encodingName | aTextConverter | encodingName ifNil: [aTextConverter := TextConverter default] ifNotNil: [aTextConverter := TextConverter newForEncoding: encodingName]. ^ (self with: aCollection) converter: aTextConverter! ! !BitBlt methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:03' prior: 18166368! colorConvertingMap: targetColor from: sourceDepth to: destDepth keepSubPixelAA: keepSubPix | srcIndex map mapsForSource mapsForSourceAndDest | ColorConvertingMaps class == Array ifFalse: [ ColorConvertingMaps := (1 to: 10) collect: [ :i | Array new: 32 ] ]. srcIndex := sourceDepth. sourceDepth > 8 ifTrue: [ srcIndex := keepSubPix ifTrue: [ 9 ] ifFalse: [ 10 ] ]. mapsForSource := ColorConvertingMaps at: srcIndex. (mapsForSourceAndDest := mapsForSource at: destDepth) ifNil: [ mapsForSourceAndDest := mapsForSource at: destDepth put: Dictionary new ]. map := mapsForSourceAndDest at: targetColor ifAbsentPut: [ Color computeColorConvertingMap: targetColor from: sourceDepth to: destDepth keepSubPixelAA: keepSubPix ]. ^ map! ! !StandardFileStream class methodsFor: 'error handling' stamp: 'ClementBera 7/26/2013 16:33' prior: 50818691! fileExistsUserHandling: fullFileName | file localName choice newName newFullFileName | file := fullFileName asFileReference. localName := file basename. choice := UIManager default chooseFrom:{ 'overwrite that file'. 'choose another name'. 'cancel' } title: localName, ' already exists.'. choice = 1 ifTrue: [ file delete. file exists ifTrue: [self error: 'Could not delete the old version of that file']. ^ self new open: fullFileName forWrite: true]. choice = 2 ifTrue: [ newName := UIManager default request: 'Enter a new file name' initialAnswer: fullFileName. newName ifNil: [Abort signal]. newFullFileName := self fullName: newName. ^ self newFileNamed: newFullFileName]. Abort signal: 'Please close this to abort file opening'! ! !MailSender class methodsFor: 'settings' stamp: 'ClementBera 7/26/2013 16:17' prior: 25329555! setUserName "Change the user's email name for use in composing messages." UserName ifNil: [UserName := '']. UserName := UIManager default request: 'What is your email address?\(This is the address other people will reply to you)' withCRs initialAnswer: UserName. UserName ifNotNil: [UserName := UserName]! ! !MailSender class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:18' prior: 25328658! userName "Answer the user name to be used in composing messages." (UserName isNil or: [UserName isEmpty]) ifTrue: [self setUserName]. UserName ifEmpty: [ self error: 'no user name specified' ]. ^UserName! ! !LimitingLineStreamWrapper methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:48' prior: 24353793! next "Provide character-based access" position ifNil: [^nil]. position < line size ifTrue: [^line at: (position := position + 1)]. line := stream nextLine. self updatePosition. ^ Character cr! ! !FLMapper methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:39' prior: 21581758! analysis: anAnalysis analysis := anAnalysis. next ifNotNil: [ next analysis: anAnalysis ]! ! !BalloonEngine methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:03' prior: 17909392! bitBlt: aBitBlt bitBlt := aBitBlt. bitBlt ifNil: [^self]. self class primitiveSetBitBltPlugin: bitBlt getPluginName. self clipRect: bitBlt clipRect. bitBlt sourceForm: (Form extent: span size @ 1 depth: 32 bits: span); sourceRect: (0@0 extent: 1@span size); colorMap: (Color colorMapIfNeededFrom: 32 to: bitBlt destForm depth); combinationRule: (bitBlt destForm depth >= 8 ifTrue:[34] ifFalse:[Form paint]).! ! !PersonDataExample class methodsFor: 'instance creation' stamp: 'AlainPlantec 2/1/2010 11:53' prior: 29286690! firstName: fname secondName: sname age: age married: married ^ (self new) firstName: fname; secondName: sname; age: age; married: married; yourself! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29285402! age "Answer the value of age" ^ age! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29285526! age: anObject "Set the value of age" age := anObject! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29285667! firstName "Answer the value of firstName" ^ firstName! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29285809! firstName: anObject "Set the value of firstName" firstName := anObject! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29285968! married "Answer the value of married" ^ married! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29286104! married: anObject "Set the value of married" married := anObject! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29286257! secondName "Answer the value of secondName" ^ secondName! ! !PersonDataExample methodsFor: 'accessing' stamp: 'AlainPlantec 2/1/2010 11:51' prior: 29286402! secondName: anObject "Set the value of secondName" secondName := anObject! ! !WidgetExamples methodsFor: 'cleanup' stamp: 'MarcusDenker 7/29/2013 15:13'! closeExampleDialogs "Close the example dialogs." "self closeExampleDialogs" DialogWindow allSubInstances do: [:d | d cancel]! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:16'! exampleBasicControls "Open a window with examples of each of the basic controls." "self new exampleBasicControls" |dialog builder radioModel treeModel| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example basic controls') useDefaultOKButton. radioModel := ExampleRadioButtonModel new. treeModel := ValueHolder new contents: TextStyle actualTextStyles explorerContents. dialog contentMorph: ((dialog newRow: { dialog newLabelGroup: { 'Normal Label'->(dialog newLabel: 'A Label'). 'Disabled Label'->(dialog newLabel: 'A Disabled Label') disable. 'Normal Button'->(dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'). 'Default Button'->((dialog newButtonFor: nil action: nil label: 'Default Button' help: 'This is a default button') isDefault: true). 'Disabled Button'->(dialog newButtonFor: nil action: nil label: 'Disabled Button' help: 'This is a disabled button') disable. 'Selected Button'->(dialog newButtonFor: (ValueHolder new contents: true) getState: #contents action: nil arguments: #() getEnabled: nil label: 'A Button' help: 'This is a selected button'). 'Selected Disabled Button'->(dialog newButtonFor: (ValueHolder new contents: true) getState: #contents action: nil arguments: #() getEnabled: nil label: 'Disabled Button' help: 'This is a selected disabled button') disable. 'Checkbox'->(dialog newCheckboxFor: (ValueHolder new contents: true) getSelected: #contents setSelected: #contents: label: 'A Checkbox' help: 'This is a checkbox'). 'Disabled Checkbox'->(dialog newCheckboxFor: (ValueHolder new contents: true) getSelected: #contents setSelected: #contents: label: 'A Disabled Checkbox' help: 'This is a disabled checkbox') disable. 'Radio Buttons'->((dialog newColumn: { (dialog newRadioButtonFor: radioModel getSelected: #isLeft setSelected: #beLeft label: 'Left' help: 'This is a radio buton'). (dialog newRadioButtonFor: radioModel getSelected: #isCenter setSelected: #beCenter label: 'Center' help: 'This is a radio buton'). (dialog newRadioButtonFor: radioModel getSelected: #isRight setSelected: #beRight label: 'Right' help: 'This is a radio buton')}) vResizing: #shrinkWrap). 'Disabled Radio Button'->(dialog newRadioButtonFor: radioModel getSelected: #isRight setSelected: #beRight label: 'Right' help: 'This is a disabled radio buton') disable. 'Text Entry'->(dialog newTextEntryFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents: help: 'This is a text entry'). 'Disabled Text Entry'->(dialog newTextEntryFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents: help: 'This is a disabled text entry') disable. 'Slider'->(dialog newSliderFor: (ValueHolder new contents: 0.5) getValue: #contents setValue: #contents: help: 'This is a slider'). 'Disabled Slider'->(dialog newSliderFor: (ValueHolder new contents: 0.75) getValue: #contents setValue: #contents: help: 'This is a disabled slider') disable}. dialog newVerticalSeparator. dialog newLabelGroup: { 'Tree'->((dialog newTreeFor: treeModel list: #contents selected: nil changeSelected: nil) minHeight: 100; minWidth: 150; yourself) }. dialog newVerticalSeparator. dialog newColumn: { dialog newTitle: 'Text Editor' for: ( (dialog newTextEditorFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents:) minWidth: 100). dialog newTitle: 'Disabled Text Editor' for: ( (dialog newTextEditorFor: (ValueHolder new contents: 'Hello') getText: #contents setText: #contents:) disable)}}) vResizing: #spaceFill); model: nil. builder openModal: dialog! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:16'! exampleBuilder "Answer a morph that implements TEasilyThemed but without honouring modality for the example dialogs." "self new exampleBuilder" ^ExampleBuilderMorph new! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:17'! exampleColorControls "Open a window with examples of each of the color controls." "self new exampleColorControls" |dialog builder| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example color controls') useDefaultOKButton. dialog contentMorph: (dialog newRow: { dialog newLabelGroup: { 'Alpha Selector'->(dialog newAlphaSelector: (ValueHolder new contents: 0) getAlpha: #contents setAlpha: #contents: help: 'This is an alpha channel selector'). 'Hue Selector'->(dialog newHueSelector: (ValueHolder new contents: 0) getHue: #contents setHue: #contents: help: 'This is a hue selector'). 'SV Color Selector'->((dialog newSVSelector: Color yellow help: 'This is a saturation-volume selector') minHeight: 80). 'HSV Color Selector'->((dialog newHSVSelector: Color green help: 'This is a hue-saturation-volume selector') minHeight: 80; minWidth: 120)}. dialog newVerticalSeparator. dialog newTitle: 'HSVA Color Selector' for: ((dialog newHSVASelector: Color cyan help: 'This is a hue-saturation-volume-alpha selector') minHeight: 184; minWidth: 184)}); model: nil. builder openModal: dialog! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:17'! exampleDialogs "Open an example of each services dialog" "self new exampleDialogs" self exampleBuilder chooseFont: TextStyle default defaultFont; chooseColor: (Color r: 0.529 g: 0.611 b: 0.004); chooseDirectory: 'Choose folder'; chooseFileName: 'Pick a file name' extensions: nil path: nil preview: nil; textEntry: 'Choose a name for the project' title: 'Save project' entryText: 'My Project'; chooseDropList: 'Pick one!!' list: #('One' 'Two' 'Three' 'Four'); deny: 'Opening the safe is not possible!!'; message: 'Hello!!'; proceed: 'Save image?'; alert: 'Danger!!'; abort: 'Something has gone wrong...'; question: 'Save the file?' title: 'Exiting application'; questionWithoutCancel: 'Save image as well?' title: 'Exiting application'! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:19'! exampleGroups "Open a window with examples of each of the group type morphs." "self new exampleGroups" |dialog builder| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example groups') useDefaultOKButton. dialog contentMorph: ((dialog newRow: { dialog newLabelGroup: { 'Plain Groupbox'->(dialog newGroupboxForAll: { dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'. dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'}). 'Groupbox'->(dialog newGroupbox: 'A groupbox' forAll: { dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'. dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'})}. dialog newLabelGroup: { 'Tab Group'->(dialog newTabGroup: { (dialog newRow: {dialog newImage: Smalltalk ui icons smallLeftFlushIcon. dialog newLabel: 'Page 1'})-> (dialog newGroupbox: 'A groupbox' forAll: { dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'. dialog newButtonFor: nil action: nil label: 'A Button' help: 'This is a button'}). 'Page 2'->(dialog newCheckboxFor: (ValueHolder new contents: true) getSelected: #contents setSelected: #contents: label: 'A Checkbox' help: 'This is a checkbox')})}}) vResizing: #spaceFill); model: nil. builder openModal: dialog! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:19'! exampleOtherControls "Open a window with examples of each of the other controls." "self new exampleOtherControls" |dialog builder image emboss fuzzy| builder := self exampleBuilder. dialog := (builder newPluggableDialogWindow: 'Example other controls') useDefaultOKButton. emboss := (dialog newString: 'Hello there') trackPaneColor: false. fuzzy := (dialog newFuzzyLabel: 'A Fuzzy Label') minHeight: 40; minWidth: 160. dialog contentMorph: (dialog newRow: { dialog newTitle: 'Alpha Image' for: ( dialog newColumn: { ((image := dialog newAlphaImage: nil help: 'This is an alpha image') borderWidth: 1; extent: 160@160). dialog newLabelGroup: { 'Scale'->(dialog newSliderFor: image getValue: #scale setValue: #scale: min: 0 max: 4 quantum: nil getEnabled: nil help: 'The image scale 0..1'). 'Alpha'->((dialog newAlphaSelector: image getAlpha: #alpha setAlpha: #alpha: help: 'The image alpha') vResizing: #shrinkWrap; minHeight: 16). 'Layout'->(dialog newDropListFor: image list: #layoutSymbols getSelected: #layout setSelected: #layout: getEnabled: nil useIndex: false help: 'The image layout')}}). dialog newVerticalSeparator. dialog newLabelGroup: { 'Color presenter'->((dialog newColorPresenterFor: (ValueHolder new contents: (Color blue alpha: 0.6)) getColor: #contents help: 'This is a color presenter') vResizing: #shrinkWrap). 'Color chooser'->(dialog newColorChooserFor: emboss getColor: #color setColor: #color: help: 'This is a color chooser'). 'Row with dashed border'->((dialog newRow: {dialog newLabel: 'I have a dashed border!!'}) borderStyle: (DashedBorder width: 3 dashColors: {Color red. Color green. Color blue} dashLengths: #(1 2 3))). 'Embossed string'->emboss. 'Style'->(dialog newDropListFor: emboss list: #styleSymbols getSelected: #style setSelected: #style: getEnabled: nil useIndex: false help: 'The embossed string style'). 'Fuzzy label'->fuzzy. 'Offset'->(dialog newSliderFor: fuzzy getValue: #offset setValue: #offset: min: 0 max: 5 quantum: 1 getEnabled: nil help: 'The fuzzy label offset'). 'Alpha'->((dialog newAlphaSelector: fuzzy getAlpha: #alpha setAlpha: #alpha: help: 'The fuzzy label alpha') vResizing: #shrinkWrap; minHeight: 16) } } ); model: nil. builder openModal: dialog! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:19'! exampleTextEntryWithCompletionDialog "self new exampleTextEntryWithCompletionDialog" | applicants entryCompletion | applicants := (Array streamContents: [:strm | Symbol allSymbolTablesDo: [:each | (each notEmpty and: [each first canBeGlobalVarInitial and: [Smalltalk globals includesKey: each]]) ifTrue: [strm nextPut: each]]]) sort. entryCompletion := EntryCompletion new dataSourceBlock: [:currText | applicants]; filterBlock: [:currApplicant :currText | currText size > 3 and: [currApplicant asUppercase includesSubstring: currText asString asUppercase]]. UIManager default request: 'Enter a class name fragment (at least 4 characters)' initialAnswer: '' title: 'Text entry with completion example: simple find a class' entryCompletion: entryCompletion! ! !WidgetExamples methodsFor: 'examples' stamp: 'MarcusDenker 7/29/2013 15:19'! exampleWindowWithToolbars "Open an example window with toolbars." "self new exampleWindowWithToolbars" |win fileMenu tools dock text holder| win := StandardWindow new. fileMenu := win newMenu. fileMenu addToggle: 'Open' translated target: nil "would be model" selector: #openFile. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallOpenIcon; keyText: 'Ctrl+O'. fileMenu addToggle: 'Save' translated target: nil selector: #saveFile getStateSelector: nil enablementSelector: nil. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallSaveIcon; keyText: 'Ctrl+S'. fileMenu addToggle: 'Print...' translated target: nil selector: #print. fileMenu lastItem font: win theme menuFont; icon: Smalltalk ui icons smallPrintIcon; keyText: 'Ctrl+P'. tools := win newToolbar: {win newButtonFor: nil "if we had a model it would go here" getState: nil action: #openFile arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallOpenIcon help: 'Open file' translated. win newButtonFor: nil getState: nil action: #saveFile arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallSaveIcon help: 'Save file' translated. win newButtonFor: nil getState: nil action: #print arguments: nil getEnabled: nil labelForm: Smalltalk ui icons smallPrintIcon help: 'Print' translated}. holder := StringHolder new. text := win newTextEditorFor: holder getText: #contents setText: #contents: getEnabled: nil. dock := win newToolDockingBar. dock add: 'File' translated font: win theme menuBarFont icon: Smalltalk ui icons smallOpenIcon help: 'File operations' translated subMenu: fileMenu; addMorphBack: tools. win addMorph: dock fullFrame: ((0@0 corner: 1@0) asLayoutFrame bottomOffset: dock minExtent y); addMorph: text fullFrame: ((0@0 corner: 1@1) asLayoutFrame topOffset: dock minExtent y). win themeChanged; openInWorld! ! UITheme class removeSelector: #exampleWindowWithToolbars! UITheme class removeSelector: #exampleTextEntryWithCompletionDialog! UITheme class removeSelector: #exampleOtherControls! UITheme class removeSelector: #exampleGroups! UITheme class removeSelector: #exampleDialogs! UITheme class removeSelector: #exampleColorControls! UITheme class removeSelector: #exampleBuilder! UITheme class removeSelector: #exampleBasicControls! UITheme class removeSelector: #closeExampleDialogs! "AST-Interpreter-Core"! "Balloon"! "Collections-Streams"! "Files"! "Fuel"! "Graphics-Primitives"! "Morphic-Base"! "Morphic-Examples"! "Polymorph-Widgets"! "System-Applications"! "System-Changes"! ----End fileIn----! ----QUIT----an Array(29 July 2013 3:40:31 pm) Pharo.image priorSource: 12758296! ----STARTUP----an Array(29 July 2013 3:49:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 July 2013 3:49:20 pm) Pharo-30313.image priorSource: 12818118! ----STARTUP----an Array(29 July 2013 4:05:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader class methodsFor: 'menu' stamp: 'ClementBera 7/26/2013 16:31' prior: 32789159! currentlyIntegratingChanges CurrentlyIntegratingChanges ifNil: [self hideIntegrationMenu]. ^ CurrentlyIntegratingChanges! ! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/29/2013 16:02' prior: 46313028! commentForCurrentUpdate ^ '11263 isNil ifTrue: to ifNil: part 3 https://pharo.fogbugz.com/f/cases/11263 11264 isNil ifTrue: to ifNil: part 4 https://pharo.fogbugz.com/f/cases/11264/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/29/2013 16:03'! script107 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.144.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.504.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.128.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.98.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.58.mcz Morphic-Examples-MarcusDenker.2.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.48.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.89.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.14.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.95.mcz Polymorph-Widgets-MarcusDenker.870.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.193.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.84.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.887.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1198.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/29/2013 16:03'! update30314 "self new update30314" self withUpdateLog: '11263 isNil ifTrue: to ifNil: part 3 https://pharo.fogbugz.com/f/cases/11263 11264 isNil ifTrue: to ifNil: part 4 https://pharo.fogbugz.com/f/cases/11264/ '. self loadTogether: self script107 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Gofer methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:44' prior: 22901123! execute: anOperationClass do: aBlock | operation | operation := anOperationClass on: self copy. aBlock ifNotNil: [ aBlock value: operation ]. ^ operation execute! ! !Gofer methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:45' prior: 22890205! repositories "Answer the configured monticello repositories." | result | result := OrderedCollection withAll: repositories. packageCacheRepository ifNotNil: [ result addFirst: packageCacheRepository ]. ^ result asArray! ! !RBSequenceNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:14' prior: 31359465! start ^ leftBar ifNil: [statements isEmpty ifTrue: [1] ifFalse: [statements first start]]! ! !Class methodsFor: '*Ring-Core-Kernel' stamp: 'ClementBera 7/26/2013 16:10' prior: 19047341! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice | rgClass rgMethod rgSuper rgSub subs | rgClass := self asRingDefinition. aRGSlice loadClass: rgClass using: packageKeys. methodsBoolean ifTrue: [ self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. aRGSlice loadMethod: rgMethod inClass: rgClass using: packageKeys ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. aRGSlice loadMethod: rgMethod inClass: rgClass theMetaClass using: packageKeys ] ]. supersBoolean ifTrue: [ self superclass ifNotNil:[ rgSuper := aRGSlice classNamed: self superclass name. rgSuper ifNil: [ rgSuper := self superclass asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice ]. rgClass superclass: rgSuper ] ]. subsBoolean ifTrue: [ subs := self subclasses select:[ :sub| sub isMeta not ]. rgClass name = #Trait ifTrue: [ subs := aRGSlice environment allTraits ]. subs do:[ :each| rgSub := aRGSlice classNamed: each name. rgSub ifNil: [ rgSub := each asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice ]. rgSub superclass: rgClass ] ]. ^rgClass! ! !RBParser methodsFor: 'private' stamp: 'ClementBera 7/26/2013 17:09' prior: 30922277! addPragma: aPragma pragmas ifNil: [ pragmas := OrderedCollection new ]. pragmas addLast: aPragma! ! !RBParser methodsFor: 'error handling' stamp: 'ClementBera 7/26/2013 17:09' prior: 30920728! errorBlock ^errorBlock ifNil: [[:message :position | ]] ifNotNil: [errorBlock]! ! !RBParser methodsFor: 'private' stamp: 'ClementBera 7/26/2013 17:09' prior: 30922422! nextToken ^nextToken ifNil: [nextToken := scanner next] ifNotNil: [nextToken]! ! !RBParser methodsFor: 'private-parsing' stamp: 'ClementBera 7/26/2013 17:10' prior: 30936458! parseMethod | methodNode | methodNode := self parseMessagePattern. self parsePragmas. self addCommentsTo: methodNode. methodNode body: self sequenceNodeClass new. (self parseStatements: false into: methodNode body). pragmas ifNotNil: [ methodNode pragmas: pragmas ]. ^methodNode! ! !RBProgramNode class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:30' prior: 31037073! formatterClass ^ FormatterClass ifNil: [ RBConfigurableFormatter ] ifNotNil: [ FormatterClass ]! ! !RBProgramNode methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 17:10' prior: 31031161! addReplacement: aStringReplacement parent ifNil: [^self]. parent addReplacement: aStringReplacement! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:10' prior: 31019616! asReturn "Change the current node to a return node." parent ifNil: [self error: 'Cannot change to a return without a parent node.']. parent isSequence ifFalse: [self error: 'Parent node must be a sequence node.']. (parent isLast: self) ifFalse: [self error: 'Return node must be last.']. ^parent addReturn! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:10' prior: 31019985! blockVariables ^parent ifNil: [#()] ifNotNil: [parent blockVariables]! ! !RBProgramNode methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 17:10' prior: 31031314! clearReplacements parent ifNil: [^self]. parent clearReplacements! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:11' prior: 31020193! comments "Answer the comments of the receiving parse tree node as intervals of starting and ending indices." ^ comments ifNil: [ #() ] ifNotNil: [ comments ]! ! !RBProgramNode methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:11' prior: 31033706! isDirectlyUsed "This node is directly used as an argument, receiver, or part of an assignment." ^parent ifNil: [false] ifNotNil: [parent directlyUses: self]! ! !RBProgramNode methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:11' prior: 31034982! isUsed "Answer true if this node could be used as part of another expression. For example, you could use the result of this node as a receiver of a message, an argument, the right part of an assignment, or the return value of a block. This differs from isDirectlyUsed in that it is conservative since it also includes return values of blocks." ^parent ifNil: [false] ifNotNil: [parent uses: self]! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:11' prior: 31020738! mappingFor: aNode | method | method := self methodNode. method ifNil: [^aNode]. ^method mappingFor: aNode! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:12' prior: 31020974! methodNode ^parent ifNotNil: [parent methodNode]! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:12' prior: 31021345! parents ^ parent ifNil: [ OrderedCollection with: self ] ifNotNil: [ parent parents addLast: self; yourself ]! ! !RBProgramNode methodsFor: 'properties' stamp: 'ClementBera 7/26/2013 17:12' prior: 31027726! propertyAt: aKey ifAbsent: aBlock "Answer the property value associated with aKey or, if aKey isn't found, answer the result of evaluating aBlock." ^ properties ifNil: [ aBlock value ] ifNotNil: [ properties at: aKey ifAbsent: aBlock ]! ! !RBProgramNode methodsFor: 'properties' stamp: 'ClementBera 7/26/2013 17:12' prior: 31028966! removeProperty: aKey ifAbsent: aBlock "Remove the property with aKey. Answer the value or, if aKey isn't found, answer the result of evaluating aBlock." | answer | properties ifNil: [ ^ aBlock value ]. answer := properties removeKey: aKey ifAbsent: aBlock. properties isEmpty ifTrue: [ properties := nil ]. ^ answer! ! !RBProgramNode methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 17:13' prior: 31032063! replaceWith: aNode parent ifNil: [self error: 'This node doesn''t have a parent']. self replaceMethodSource: aNode. parent replaceNode: self withNode: aNode! ! !RBProgramNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:13' prior: 31022433! temporaryVariables ^parent ifNil: [#()] ifNotNil: [parent temporaryVariables]! ! !RBPatternBlockNode methodsFor: 'matching' stamp: 'ClementBera 7/26/2013 17:16' prior: 30977428! matchingBlock ^ valueBlock ifNil: [valueBlock := self createMatchingBlock]! ! !RBPatternBlockNode methodsFor: 'matching' stamp: 'ClementBera 7/26/2013 17:16' prior: 30977864! replacingBlock ^ valueBlock ifNil: [valueBlock := self createReplacingBlock]! ! !GoferCommit methodsFor: 'running' stamp: 'ClementBera 7/26/2013 16:45' prior: 22914083! execute: aWorkingCopy | repositories version | repositories := self gofer repositories reject: [ :repository | (aWorkingCopy changesRelativeToRepository: repository) isEmpty ]. repositories isEmpty ifTrue: [ ^ self ]. version := [ aWorkingCopy newVersion ] on: MCVersionNameAndMessageRequest do: [ :notifcation | self message ifNil: [ message := notifcation outer last ]. notifcation resume: (Array with: notifcation suggestedName with: self message) ]. self gofer repositories do: [ :repository | repository storeVersion: version ]! ! !RBCascadeNode methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:15' prior: 30369117! needsParenthesis ^parent ifNil: [false] ifNotNil: [self precedence > parent precedence]! ! !RBExplicitVariableParser methodsFor: 'private-parsing' stamp: 'ClementBera 7/26/2013 17:10' prior: 30558493! parseMethod | methodNode | self useVariable: RBArgumentNode during: [methodNode := self parseMessagePattern]. self pushScope: methodNode. self parsePragmas. self addCommentsTo: methodNode. methodNode body: self sequenceNodeClass new. (self parseStatements: false into: methodNode body). pragmas ifNotNil: [ methodNode pragmas: pragmas ]. ^methodNode! ! !RBMessageNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:15' prior: 30747340! arguments ^arguments ifNil: [#()] ifNotNil: [arguments]! ! !RBMessageNode methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:16' prior: 30753740! needsParenthesis ^parent ifNil: [false] ifNotNil: [self precedence > parent precedence or: [self precedence = parent precedence and: [self isUnary not]]]! ! !RBMessageNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:16' prior: 30748280! selector ^ selector ifNil: [selector := self buildSelector]! ! !RBScanner class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:31' prior: 31298456! classificationTable classificationTable ifNil: [ self initializeClassificationTable ]. ^ classificationTable! ! !String methodsFor: 'converting' stamp: 'ClementBera 7/26/2013 16:58' prior: 51091570! correctAgainst: wordList continuedFrom: oldCollection "Like correctAgainst:. Use when you want to correct against several lists, give nil as the first oldCollection, and nil as the last wordList." ^ wordList ifNil: [ self correctAgainstEnumerator: nil continuedFrom: oldCollection ] ifNotNil: [ self correctAgainstEnumerator: [ :action | wordList do: action without: nil] continuedFrom: oldCollection ]! ! !String methodsFor: 'converting' stamp: 'ClementBera 7/26/2013 16:58' prior: 51092063! correctAgainstDictionary: wordDict continuedFrom: oldCollection "Like correctAgainst:continuedFrom:. Use when you want to correct against a dictionary." ^ wordDict ifNil: [ self correctAgainstEnumerator: nil continuedFrom: oldCollection ] ifNotNil: [ self correctAgainstEnumerator: [ :action | wordDict keysDo: action ] continuedFrom: oldCollection ]! ! !String methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:59' prior: 51127653! correctAgainstEnumerator: wordBlock continuedFrom: oldCollection "The guts of correction, instead of a wordList, there is a block that should take another block and enumerate over some list with it." | choices results maxChoices scoreMin | scoreMin := self size // 2 min: 3. maxChoices := 10. oldCollection ifNil: [ choices := SortedCollection sortBlock: [ :x :y | x value > y value ] ] ifNotNil: [ choices := oldCollection ]. wordBlock isNil ifTrue: [ results := OrderedCollection new. 1 to: (maxChoices min: choices size) do: [ :i | results add: (choices at: i) key ] ] ifFalse: [ wordBlock value: [ :word | | score | (score := self alike: word) >= scoreMin ifTrue: [ choices add: (Association key: word value: score). (choices size >= maxChoices) ifTrue: [ scoreMin := (choices at: maxChoices) value] ] ]. results := choices ]. ^ results! ! !String methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:00' prior: 51055312! findTokens: delimiters escapedBy: quoteDelimiters "Answer a collection of Strings separated by the delimiters, where delimiters is a Character or collection of characters. Two delimiters in a row produce an empty string (compare this to #findTokens, which treats sequential delimiters as one). The characters in quoteDelimiters are treated as quote characters, such that any delimiter within a pair of matching quoteDelimiter characters is treated literally, rather than as a delimiter. The quoteDelimiter characters may be escaped within a quoted string. Two sequential quote characters within a quoted string are treated as a single character. This method is useful for parsing comma separated variable strings for spreadsheet import and export." | tokens rs activeEscapeCharacter ts char token delimiterChars quoteChars | delimiterChars := (delimiters ifNil: [ '' ] ifNotNil: [ delimiters ]) asString. quoteChars := (quoteDelimiters ifNil: [ '' ] ifNotNil: [ quoteDelimiters ]) asString. tokens := OrderedCollection new. rs := self readStream. activeEscapeCharacter := nil. ts := String new writeStream. [ rs atEnd ] whileFalse: [ char := rs next. activeEscapeCharacter ifNil: [ (quoteChars includes: char) ifTrue: [ activeEscapeCharacter := char ] ifFalse: [ (delimiterChars includes: char) ifTrue: [ token := ts contents. tokens add: token. ts := String new writeStream ] ifFalse: [ ts nextPut: char ] ] ] ifNotNil: [ char == activeEscapeCharacter ifTrue: [ rs peek == activeEscapeCharacter ifTrue: [ ts nextPut: rs next ] ifFalse: [ activeEscapeCharacter := nil ] ] ifFalse: [ ts nextPut: char ] ] ]. token := ts contents. (tokens isEmpty and: [ token isEmpty ]) ifFalse: [ tokens add: token ]. ^ tokens! ! !String methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:02' prior: 51123897! isAsciiString ^ self anySatisfy: [ :each | each asciiValue > 127 ] ! ! !RBToken methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:17' prior: 31469553! stop ^ sourcePointer ifNil: [ -1 ] ifNotNil: [ self start + self length - 1 ]! ! !RBAssignmentNode methodsFor: 'querying' stamp: 'ClementBera 7/26/2013 17:15' prior: 30248672! bestNodeFor: anInterval (self intersectsInterval: anInterval) ifFalse: [^nil]. (self containedBy: anInterval) ifTrue: [^self]. assignment ifNil: [^super bestNodeFor: anInterval]. ((anInterval first between: assignment and: assignment + 1) or: [assignment between: anInterval first and: anInterval last]) ifTrue: [^self]. self children do: [:each | | node | node := each bestNodeFor: anInterval. node notNil ifTrue: [^node]]! ! !RBAssignmentNode methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 17:15' prior: 30251193! needsParenthesis ^parent ifNil: [false] ifNotNil: [self precedence > parent precedence]! ! !RBMethodNode methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 17:13' prior: 30784058! addReplacement: aStringReplacement replacements ifNil: [^self]. replacements add: aStringReplacement! ! !RBMethodNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:13' prior: 30777698! newSource replacements ifNil: [^self formattedCode]. ^[self reformatSource] on: Error do: [:ex | ex return: self formattedCode]! ! !RBMethodNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:13' prior: 30778954! selector ^ selector ifNil: [selector := self buildSelector]! ! !EntryCompletion methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:38' prior: 21236378! chooserWith: aToken | applicants | applicants := self filteredValuesWith: aToken. aToken ifNil: [applicants isEmpty ifFalse: [self setChooserWith: nil labels: applicants]] ifNotNil: [ | meaningfulApplicants | meaningfulApplicants := (applicants copyWithout: nil) asSet. meaningfulApplicants isEmpty ifFalse: [(meaningfulApplicants size = 1 and: [aToken = meaningfulApplicants anyOne]) ifFalse: [(previousToken isNil or: [previousToken size ~= aToken size]) ifTrue: [self setChooserWith: aToken labels: applicants]]]. previousToken := aToken]. ^ chooser! ! !ChangeSorterModel methodsFor: 'text' stamp: 'ClementBera 7/26/2013 16:01' prior: 18906982! setContentsOfChangeSet: changeSet forClass: class andSelector: selector prettyPrint: prettyPrint showDiff: showDiff "return the source code that shows in the bottom pane" class ifNil: [ "Only the change set is currently selected" ^ self buildChangeSetDescriptionFor: changeSet ]. selector ifNil: [ "class is selected but not the selector" ^ self buildClassDescriptionFor: changeSet class: class ] ifNotNil: [ "a class and a selector are selected" ^ self buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff ]! ! !RBValueNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:14' prior: 31521170! addParenthesis: anInterval parentheses ifNil: [parentheses := OrderedCollection new: 1]. parentheses add: anInterval! ! !RBValueNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:14' prior: 31521339! parentheses ^parentheses ifNil: [#()] ifNotNil: [parentheses]! ! !RBValueNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:14' prior: 31521450! start ^parentheses ifNil: [self startWithoutParentheses] ifNotNil: [parentheses last first]! ! !RBValueNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:15' prior: 31521692! stop ^parentheses ifNil: [self stopWithoutParentheses] ifNotNil: [parentheses last last]! ! "AST-Core"! "Collections-Strings"! "Gofer-Core"! "Polymorph-Widgets"! "Ring-Core-Kernel"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(29 July 2013 4:06:02 pm) Pharo.image priorSource: 12818317! ----STARTUP----an Array(29 July 2013 4:15:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 July 2013 4:15:10 pm) Pharo-30314.image priorSource: 12846699! ----STARTUP----an Array(30 July 2013 10:34:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/30/2013 10:30' prior: 46373269! commentForCurrentUpdate ^ '11273 ExampleBuilder should only be used by the examples https://pharo.fogbugz.com/f/cases/11273 11265 isNil ifTrue: to ifNil: part 5 https://pharo.fogbugz.com/f/cases/11265 11266 isNil ifTrue: to ifNil: part 6 https://pharo.fogbugz.com/f/cases/11266'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/30/2013 10:30'! script108 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.55.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.98.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.96.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.58.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.120.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.872.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.195.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.84.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.887.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1198.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/30/2013 10:30'! update30315 "self new update30315" self withUpdateLog: '11273 ExampleBuilder should only be used by the examples https://pharo.fogbugz.com/f/cases/11273 11265 isNil ifTrue: to ifNil: part 5 https://pharo.fogbugz.com/f/cases/11265 11266 isNil ifTrue: to ifNil: part 6 https://pharo.fogbugz.com/f/cases/11266'. self loadTogether: self script108 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ExampleBuilderMorph commentStamp: 'gvc 7/19/2007 16:49' prior: 42255862! Morph with an inset border by default and theme access. Overrides openModal: to allow multiple free example dialogs to be presented.! !ExampleRadioButtonModel commentStamp: 'gvc 9/23/2008 11:58' prior: 46288068! Model used for radio buttons in example of basic controls (see "UITheme exampleBasicControls").! !LiteralNode methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:48' prior: 24540796! printOn: aStream indent: level key isVariableBinding ifTrue: [key key ifNil: [aStream nextPutAll: '###'; nextPutAll: key value soleInstance name] ifNotNil: [aStream nextPutAll: '##'; nextPutAll: key key]] ifFalse: [key storeOn: aStream]! ! !LeafNode methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:48' prior: 41649110! code: argIndex type: type argIndex ifNil: [^type negated]. (CodeLimits at: type) > argIndex ifTrue: [^(CodeBases at: type) + argIndex]. ^type * 256 + argIndex! ! !BytecodeEncoder methodsFor: 'temps' stamp: 'ClementBera 7/26/2013 16:06' prior: 18634725! bindBlockArg: name within: aBlockNode "Read the comment in the superclass's method. If we have closures we should check the argument count against the block, not the method. (Note that this isn't entirely adequate either since optimized blocks will slip through the cracks (their arguments (i.e. ifNotNil: [:expr|) are charged against their enclosing block, not themselves))." | nArgs | self supportsClosureOpcodes ifFalse: [^super bindBlockArg: name within: aBlockNode]. (nArgs := aBlockNode nArgsSlot) ifNil: [aBlockNode nArgsSlot: (nArgs := 0)]. nArgs >= 15 ifTrue: [^self notify: 'Too many arguments']. aBlockNode nArgsSlot: nArgs + 1. ^(self bindTemp: name) beBlockArg; nowHasDef; nowHasRef; yourself! ! !BytecodeEncoder methodsFor: 'temps' stamp: 'ClementBera 7/26/2013 16:06' prior: 18635541! bindBlockTemp: name within: aBlockNode "Read the comment in the superclass's bindBlockArg:within: method. If we have closures we should check the argument count against the block, not the method. (Note that this isn't entirely adequate either since optimized blocks will slip through the cracks (their arguments (i.e. ifNotNil: [:expr|) are charged against their enclosing block, not themselves))." | nArgs | self supportsClosureOpcodes ifFalse: [^super bindBlockTemp: name within: aBlockNode]. (nArgs := aBlockNode nArgsSlot) ifNil: [aBlockNode nArgsSlot: (nArgs := 0)]. nArgs >= (CompiledMethod fullFrameSize - 1) ifTrue: [^self notify: 'Too many temporaries']. aBlockNode nArgsSlot: nArgs + 1. ^self bindTemp: name! ! !ExampleBuilderMorph commentStamp: 'gvc 7/19/2007 16:49' prior: 46412337! Morph with an inset border by default and theme access. Overrides openModal: to allow multiple free example dialogs to be presented.! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21314917! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21315067! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21315246! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21315396! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21315575! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21315865! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21316171! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21316315! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !ExampleBuilderMorph methodsFor: 'services' stamp: 'FernandoOlivero 3/2/2011 09:35' prior: 21316585! chooseColor: aColor title: label "Answer the user choice of a colour." ^ self theme chooseColorIn: self modalMorph title: (label ifNil: ['Choose Color' translated]) color: aColor! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21316824! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21317022! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21317253! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21317463! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21317697! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318035! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318167! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318396! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318552! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318729! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21318903! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21319130! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21319391! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21319708! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21319894! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21320098! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21320365! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21320568! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21320767! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21320928! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21282284! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21282471! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21282766! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21283073! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21283449! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21283897! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21284247! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21284669! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21285040! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21285483! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21285827! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21286243! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21286529! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21286837! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21287087! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21287379! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21287716! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21288149! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21288536! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21288855! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21289144! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21289517! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21289892! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21290286! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21290462! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21290705! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21290834! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21290995! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21291364! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21291735! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21292076! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21292203! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21292361! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21292592! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21292926! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21293230! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21293486! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21293659! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21293797! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21294173! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21294572! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21294901! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21295484! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21295999! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21296138! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21296319! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21296533! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21296749! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21296959! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21297219! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21297514! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21297639! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21297805! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21298011! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21298226! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21298401! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21298585! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21298811! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21299035! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21299307! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21299442! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21299605! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21299823! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21300248! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21300405! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21300637! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21300861! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21301212! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21301630! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21302006! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21302335! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21302751! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21302874! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21303010! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21303386! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21303801! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21304147! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21304539! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21304884! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305144! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305261! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305410! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305527! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305677! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21305874! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21306155! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21306269! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21306422! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21306613! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21306853! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21307256! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21307612! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21307747! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21307911! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21308129! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21308317! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21308451! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21308799! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21309117! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21309508! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21309649! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21309819! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21310028! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21310248! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21310471! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21310677! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21310825! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21311065! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21311349! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21311676! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21312007! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21312332! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21312730! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313008! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313208! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313347! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313473! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313589! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313755! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21313890! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21314177! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21314324! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21314513! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21314644! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !ExampleBuilderMorph methodsFor: 'controls' stamp: '' prior: 21314764! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !ExampleBuilderMorph methodsFor: 'as yet unclassified' stamp: 'gvc 3/6/2010 17:08' prior: 21281461! openModal: aSystemWindow "Open the given window an available position without modality. Answer the system window." |baseArea areas searching foundRect| aSystemWindow extent: aSystemWindow initialExtent. areas := World submorphs select: [:m | m isKindOf: DialogWindow] thenCollect: [:m | m bounds expandBy: 8]. baseArea := RealEstateAgent maximumUsableArea insetBy: 8. searching := true. baseArea allAreasOutsideList: areas do: [:rect | searching ifTrue: [ aSystemWindow extent <= (rect insetBy: 8) extent ifTrue: [foundRect := rect. searching := false]]]. searching ifTrue: [foundRect := baseArea]. aSystemWindow setWindowColor: self theme windowColor. aSystemWindow position: foundRect topLeft + 8. aSystemWindow openAsIs. ^aSystemWindow! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21321112! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21321269! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21321503! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21321664! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21321909! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21322096! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21322367! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21322529! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !ExampleBuilderMorph methodsFor: 'services' stamp: '' prior: 21322715! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !ExampleBuilderMorph methodsFor: 'theme' stamp: '' prior: 37987991! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! !SortedCollection methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:58' prior: 50501629! indexForInserting: newObject | index low high | low := firstIndex. high := lastIndex. sortBlock ifNil: [[index := high + low // 2. low > high] whileFalse: [((array at: index) <= newObject) ifTrue: [low := index + 1] ifFalse: [high := index - 1]]] ifNotNil: [[index := high + low // 2. low > high] whileFalse: [(sortBlock value: (array at: index) value: newObject) ifTrue: [low := index + 1] ifFalse: [high := index - 1]]]. ^low! ! !RemoteTempVectorNode methodsFor: 'code generation (closures)' stamp: 'ClementBera 7/26/2013 16:48' prior: 32260220! addRemoteTemp: aTempVariableNode encoder: encoder remoteTemps ifNil: [remoteTemps := OrderedCollection new]. remoteTemps addLast: aTempVariableNode. aTempVariableNode referenceScopesAndIndicesDo: [:scopeBlock "" :location ""| self addReadWithin: scopeBlock at: location]. encoder supportsClosureOpcodes ifFalse: [encoder encodeLiteral: remoteTemps size. readNode := encoder encodeSelector: #at:. writeNode := encoder encodeSelector: #at:put:]! ! !MethodNode methodsFor: 'code generation (closures)' stamp: 'ClementBera 7/26/2013 17:18' prior: 26474153! addLocalsToPool: locals "" localsPool ifNil: [localsPool := IdentitySet new]. localsPool addAll: locals! ! !MethodNode methodsFor: 'code generation (closures)' stamp: 'ClementBera 7/26/2013 17:18' prior: 26474734! noteBlockEntry: aBlock "Evaluate aBlock with the numbering for the block entry." locationCounter ifNil: [locationCounter := -1]. aBlock value: locationCounter + 1. locationCounter := locationCounter + 2! ! !ZipWriteStream class methodsFor: 'regression test' stamp: 'ClementBera 7/26/2013 16:34' prior: 55243223! regressionDecompress: aFile from: tempFile notifying: progressBar stats: stats "Validate aFile as decompressed from tempFile" | unzip rawSize compressedSize buffer1 buffer2 | rawSize := aFile size. compressedSize := tempFile size. aFile ascii. aFile position: 0. tempFile ascii. tempFile position: 0. buffer1 := ByteArray new: 4096. buffer2 := buffer1 copy. unzip := FastInflateStream on: tempFile. [ aFile atEnd ] whileFalse: [ progressBar current: aFile position. buffer1 := aFile nextInto: buffer1. buffer2 := unzip nextInto: buffer2. buffer1 = buffer2 ifFalse: [ ^ self logProblem: 'contents ' for: aFile ] ]. unzip next ifNotNil: [ ^ self logProblem: 'EOF' for: aFile ]. stats at: #rawSize put: (stats at: #rawSize ifAbsent: [ 0 ]) + rawSize. stats at: #compressedSize put: (stats at: #compressedSize ifAbsent: [ 0 ]) + compressedSize. ^ compressedSize asFloat / rawSize asFloat! ! !ExampleRadioButtonModel commentStamp: 'gvc 9/23/2008 11:58' prior: 46412549! Model used for radio buttons in example of basic controls (see "UITheme exampleBasicControls").! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:17' prior: 21324688! beCenter "Set the option to #center." self option: #center! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:17' prior: 21324842! beLeft "Set the option to #left." self option: #left! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:17' prior: 21324990! beRight "Set the option to #right." self option: #right! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:17' prior: 21325141! initialize "Initialize the receiver." super initialize. self option: #left! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:16' prior: 21325314! isCenter "Answer whether the option if #center." ^self option == #center! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:16' prior: 21325482! isLeft "Answer whether the option if #left." ^self option == #left! ! !ExampleRadioButtonModel methodsFor: 'as yet unclassified' stamp: 'gvc 8/7/2007 13:16' prior: 21325644! isRight "Answer whether the option if #right." ^self option == #right! ! !ExampleRadioButtonModel methodsFor: 'accessing' stamp: 'gvc 8/7/2007 13:13' prior: 21324333! option "Answer the value of option" ^ option! ! !ExampleRadioButtonModel methodsFor: 'accessing' stamp: 'gvc 8/7/2007 13:15' prior: 21324463! option: aSymbol "Set the value of option" option := aSymbol. self changed: #isLeft; changed: #isCenter; changed: #isRight! ! !SocksSocket methodsFor: 'socks5' stamp: 'ClementBera 7/26/2013 17:05' prior: 50490082! sendSocks5ConnectionRequest "Once the method-dependent subnegotiation has completed, the client sends the request details." | requestString | requestString := ByteArray new writeStream. requestString nextPut: 5; nextPut: self connectCommandCode; nextPut: 0. "Reserved slot" dstName ifNil: [ requestString nextPutAll: self hostIPCode; nextPutAll: dstIP] ifNotNil: [ requestString nextPut: self qualifiedHostNameCode; nextPut: dstName size; nextPutAll: dstName asByteArray]. requestString nextWordPut: dstPort. self sendData: requestString contents! ! !LinkedList methodsFor: 'copying' stamp: 'ClementBera 7/26/2013 16:58' prior: 24380566! postCopy | aLink | super postCopy. firstLink ifNotNil: [ aLink := firstLink := firstLink copy. [aLink nextLink isNil] whileFalse: [aLink nextLink: (aLink := aLink nextLink copy)]. lastLink := aLink].! ! !MessageListBrowser methodsFor: 'buttons behavior' stamp: 'MarcusDenker 7/29/2013 16:38' prior: 25622397! revertButtonAction (self revertButtonState not and: [self textArea hasUnacceptedEdits not]) ifTrue: [self compileMethod: self textArea getText asString.] ifFalse: [UIManager default alert: 'The source code must have not been modified']! ! !MailMessage methodsFor: 'parsing' stamp: 'ClementBera 7/26/2013 16:49' prior: 25307735! readDateFrom: aStream "Parse a date from the given stream and answer nil if the date can't be parsed. The date may be in any of the following forms: (5 April 1982; 5-APR-82) (April 5, 1982) (4/5/82) In addition, the date may be preceded by the day of the week and an optional comma, such as: Tue, November 14, 1989" | day month year | self skipWeekdayName: aStream. aStream peek isDigit ifTrue: [day := Integer readFrom: aStream]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isLetter ifTrue: "month name or weekday name" [month := (String new: 10) writeStream. [aStream peek isLetter] whileTrue: [month nextPut: aStream next]. month := month contents. day ifNil: "name/number..." [[aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. (aStream peek isDigit) ifFalse: [^nil]. day := Integer readFrom: aStream]] ifFalse: "number/number..." [month := Date nameOfMonth: day. day := Integer readFrom: aStream]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. (aStream peek isDigit) ifFalse: [^nil]. year := Integer readFrom: aStream. ^Date newDay: day month: month year: year! ! !NetNameResolver class methodsFor: 'lookups' stamp: 'ClementBera 7/26/2013 16:27' prior: 28340355! addressForName: hostName timeout: secs "Look up the given host name and return its address. Return nil if the address is not found in the given number of seconds." "NetNameResolver addressForName: 'create.ucsb.edu' timeout: 30" "NetNameResolver addressForName: '100000jobs.de' timeout: 30" "NetNameResolver addressForName: '1.7.6.4' timeout: 30" "NetNameResolver addressForName: '' timeout: 30" | deadline result | self initializeNetwork. "check if this is a valid numeric host address (e.g. 1.2.3.4)" result := self addressFromString: hostName. result ifNotNil: [ ^ result asSocketAddress ]. "Look up a host name, including ones that start with a digit (e.g. 100000jobs.de or www.pharo-project.org)" deadline := Time millisecondClockValue -> (secs * 1000). "Protect the execution of this block, as the ResolverSemaphore is used for both parts of the transaction." self resolverMutex critical: [ (self waitForResolverReadyUntil: deadline) ifTrue: [ self primStartLookupOfName: hostName. (self waitForCompletionUntil: deadline) ifTrue: [ result := self primNameLookupResult ] ifFalse: [ ^ NameLookupFailure signalFor: hostName ] ] ifFalse: [ ^ NameLookupFailure signalFor: hostName ] ]. ^ result asSocketAddress! ! !NetNameResolver class methodsFor: 'address string utils' stamp: 'ClementBera 7/26/2013 16:27' prior: 28338049! addressFromString: addressString "Return the internet address represented by the given string. The string should contain four positive decimal integers delimited by periods, commas, or spaces, where each integer represents one address byte. Return nil if the string is not a host address in an acceptable format." "NetNameResolver addressFromString: '1.2.3.4'" "NetNameResolver addressFromString: '1,2,3,4'" "NetNameResolver addressFromString: '1 2 3 4'" | newAddr s byte delimiter | newAddr := ByteArray new: 4. s := addressString readStream. s skipSeparators. 1 to: 4 do: [ :i | byte := self readDecimalByteFrom: s. byte ifNil: [ ^ nil ]. newAddr at: i put: byte. i < 4 ifTrue: [ delimiter := s next. (delimiter = $. or: [ delimiter = $, or: [ delimiter = $ ] ]) ifFalse: [ ^ nil ] ] ]. ^ newAddr! ! !Socket class methodsFor: 'utilities' stamp: 'ClementBera 7/26/2013 16:32' prior: 50436203! ping: hostName "Ping the given host. Useful for checking network connectivity. The host must be running a TCP echo server." "Socket ping: 'pharo-project.org'" | tcpPort sock serverAddr startTime echoTime | tcpPort := 7. "7 = echo port, 13 = time port, 19 = character generator port" serverAddr := NetNameResolver addressForName: hostName timeout: 10. serverAddr ifNil: [ ^ self inform: 'Could not find an address for ' , hostName ]. sock := Socket new. sock connectNonBlockingTo: serverAddr port: tcpPort. [ sock waitForConnectionFor: 10 ] on: ConnectionTimedOut do: [ :ex | (self confirm: 'Continue to wait for connection to ' , hostName , '?') ifTrue: [ ex retry ] ifFalse: [ sock destroy. ^ self ] ]. sock sendData: 'echo!!'. startTime := Time millisecondClockValue. [ sock waitForDataFor: 15 ] on: ConnectionTimedOut do: [ :ex | (self confirm: 'Packet sent but no echo yet; keep waiting?') ifTrue: [ ex retry ] ]. echoTime := Time millisecondsSince: startTime. sock destroy. self inform: hostName , ' responded in ' , echoTime printString , ' milliseconds'! ! !Socket class methodsFor: 'utilities' stamp: 'ClementBera 7/26/2013 16:32' prior: 50437414! pingPorts: portList on: hostName timeOutSecs: timeOutSecs "Attempt to connect to each of the given sockets on the given host. Wait at most timeOutSecs for the connections to be established. Answer an array of strings indicating the available ports." "Socket pingPorts: #(7 13 19 21 23 25 80 110 119) on: 'pharo-project.org' timeOutSecs: 15" | serverAddr sockets startTime timeoutMsecs done result unconnectedCount connectedCount waitingCount | serverAddr := NetNameResolver addressForName: hostName timeout: 10. serverAddr ifNil: [ self inform: 'Could not find an address for ' , hostName. ^ #() ]. sockets := portList collect: [ :portNum | | sock | sock := Socket new. sock connectTo: serverAddr port: portNum ]. startTime := Time millisecondClockValue. timeoutMsecs := (1000 * timeOutSecs) truncated. done := false. [ done ] whileFalse: [ unconnectedCount := 0. connectedCount := 0. waitingCount := 0. sockets do: [ :s | s isUnconnectedOrInvalid ifTrue: [ unconnectedCount := unconnectedCount + 1 ] ifFalse: [ s isConnected ifTrue: [ connectedCount := connectedCount + 1 ]. s isWaitingForConnection ifTrue: [ waitingCount := waitingCount + 1 ] ] ]. waitingCount = 0 ifTrue: [ done := true ]. connectedCount = sockets size ifTrue: [ done := true ]. (Time millisecondsSince: startTime) >= timeoutMsecs ifTrue: [ done := true ] ]. result := (sockets select: [ :s | s isConnected ]) collect: [ :s | self nameForWellKnownTCPPort: s remotePort ]. sockets do: [ :s | s destroy ]. ^ result! ! !Socket class methodsFor: 'tests' stamp: 'ClementBera 7/26/2013 16:32' prior: 50433745! sendTest "Send data to the 'discard' socket of the given host. Tests the speed of one-way data transfers across the network to the given host. Note that most hosts do not run a discard server." "Socket sendTest" | sock bytesToSend sendBuf bytesSent t serverName serverAddr | Transcript cr; show: 'starting send test'; cr. self initializeNetwork. serverName := UIManager default request: 'What is the destination server?' initialAnswer: 'create.ucsb.edu'. serverAddr := NetNameResolver addressForName: serverName timeout: 10. serverAddr ifNil: [ ^ self inform: 'Could not find an address for ' , serverName ]. sock := self new. Transcript show: '---------- Connecting ----------'; cr. sock connectTo: serverAddr port: 9. sock isConnected ifFalse: [ sock destroy. ^ self inform: 'could not connect' ]. Transcript show: 'connection established; sending data'; cr. bytesToSend := 1000000. sendBuf := String new: 64 * 1024 withAll: $x. bytesSent := 0. t := Time millisecondsToRun: [ [ bytesSent < bytesToSend ] whileTrue: [ sock sendDone ifTrue: [ bytesSent := bytesSent + (sock sendSomeData: sendBuf) ] ] ]. sock waitForSendDoneFor: self standardTimeout. sock destroy. Transcript show: '---------- Connection Closed ----------'; cr; show: 'send test done; time = ' , t printString; cr; show: (bytesToSend asFloat / t roundTo: 0.01) printString , ' * 1000 bytes/sec'; cr; endEntry! ! !Socket class methodsFor: 'examples' stamp: 'ClementBera 7/26/2013 16:32' prior: 50424673! timeTest "Socket timeTest" | serverName serverAddr s | Transcript show: 'initializing network ... '. self initializeNetwork. Transcript show: 'ok'; cr. serverName := UIManager default request: 'What is your time server?' initialAnswer: 'localhost'. serverName isEmptyOrNil ifTrue: [ ^ Transcript show: 'never mind'; cr ]. serverAddr := NetNameResolver addressForName: serverName timeout: 10. serverAddr ifNil: [ self error: 'Could not find the address for ' , serverName ]. s := self new. Transcript show: '---------- Connecting ----------'; cr. s connectTo: serverAddr port: 13. "13 is the 'daytime' port number" s waitForConnectionFor: 1. Transcript show: 'the time server reports: ' , s receiveData. s closeAndDestroy. Transcript show: '---------- Connection Closed ----------'; cr! ! !Socket class methodsFor: 'examples' stamp: 'ClementBera 7/26/2013 16:32' prior: 50425596! timeTestUDP "Socket timeTestUDP" | serverName serverAddr s | Transcript show: 'initializing network ... '. self initializeNetwork. Transcript show: 'ok'; cr. serverName := UIManager default request: 'What is your time server?' initialAnswer: 'localhost'. serverName isEmptyOrNil ifTrue: [ ^ Transcript show: 'never mind'; cr ]. serverAddr := NetNameResolver addressForName: serverName timeout: 10. serverAddr ifNil: [ self error: 'Could not find the address for ' , serverName ]. s := self newUDP. "a 'random' port number will be allocated by the system" "Send a packet to the daytime port and it will reply with the current date." Transcript show: '---------- Sending datagram from port ' , s port printString , ' ----------'; cr. s sendData: '!!' toHost: serverAddr port: 13. "13 is the daytime service" Transcript show: 'the time server reports: ' , s receiveData. s closeAndDestroy. Transcript show: '---------- Socket closed ----------'; cr! ! !Socket methodsFor: 'initialize-destroy' stamp: 'ClementBera 7/26/2013 17:05' prior: 50383674! acceptFrom: aSocket "Initialize a new socket handle from an accept call" | semaIndex readSemaIndex writeSemaIndex | semaphore := Semaphore new. readSemaphore := Semaphore new. writeSemaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: semaphore. readSemaIndex := Smalltalk registerExternalObject: readSemaphore. writeSemaIndex := Smalltalk registerExternalObject: writeSemaphore. socketHandle := self primAcceptFrom: aSocket socketHandle receiveBufferSize: 8000 sendBufSize: 8000 semaIndex: semaIndex readSemaIndex: readSemaIndex writeSemaIndex: writeSemaIndex. socketHandle ifNil: [ "socket creation failed" Smalltalk unregisterExternalObject: semaphore. Smalltalk unregisterExternalObject: readSemaphore. Smalltalk unregisterExternalObject: writeSemaphore. readSemaphore := writeSemaphore := semaphore := nil ] ifNotNil: [ self register ]! ! !Socket methodsFor: 'initialize-destroy' stamp: 'ClementBera 7/26/2013 17:05' prior: 50384675! destroy "Destroy this socket. Its connection, if any, is aborted and its resources are freed. Do nothing if the socket has already been destroyed (i.e., if its socketHandle is nil)." socketHandle ifNotNil: [ self isValid ifTrue: [ self primSocketDestroy: socketHandle ]. Smalltalk unregisterExternalObject: semaphore. Smalltalk unregisterExternalObject: readSemaphore. Smalltalk unregisterExternalObject: writeSemaphore. socketHandle := nil. readSemaphore := writeSemaphore := semaphore := nil. self unregister ]! ! !Socket methodsFor: 'initialize-destroy' stamp: 'ClementBera 7/26/2013 17:05' prior: 50385315! initialize: socketType "Initialize a new socket handle. If socket creation fails, socketHandle will be set to nil." | semaIndex readSemaIndex writeSemaIndex | semaphore := Semaphore new. readSemaphore := Semaphore new. writeSemaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: semaphore. readSemaIndex := Smalltalk registerExternalObject: readSemaphore. writeSemaIndex := Smalltalk registerExternalObject: writeSemaphore. socketHandle := self primSocketCreateNetwork: 0 type: socketType receiveBufferSize: 8000 sendBufSize: 8000 semaIndex: semaIndex readSemaIndex: readSemaIndex writeSemaIndex: writeSemaIndex. socketHandle ifNil: [ "socket creation failed" Smalltalk unregisterExternalObject: semaphore. Smalltalk unregisterExternalObject: readSemaphore. Smalltalk unregisterExternalObject: writeSemaphore. readSemaphore := writeSemaphore := semaphore := nil ] ifNotNil: [ self register ]! ! !InflateStream methodsFor: 'huffman trees' stamp: 'ClementBera 7/26/2013 16:47' prior: 23611250! mapValues: values by: valueMap | oldValue | valueMap ifNil: [^values]. 1 to: values size do:[:i| oldValue := values at: i. "Note: there may be nil values if not all values are used" oldValue ifNil: [^values] ifNotNil: [values at: i put: (valueMap at: oldValue+1)]]. ! ! !MessageNode methodsFor: 'initialize-release' stamp: 'ClementBera 7/26/2013 16:52' prior: 25662731! receiver: rcvr selector: aSelector arguments: args precedence: p from: encoder "Compile." self receiver: rcvr arguments: args precedence: p. originalSelector := aSelector. self noteSpecialSelector: aSelector. (self transform: encoder) ifTrue: [selector ifNil: [selector := SelectorNode new key: (MacroSelectors at: special) code: #macro]] ifFalse: [selector := encoder encodeSelector: aSelector. rcvr == NodeSuper ifTrue: [encoder noteSuper]]. ! ! !TextConverter class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:33' prior: 52575637! newForEncoding: aString | class encoding | aString ifNil: [^ Latin1TextConverter new]. encoding := aString asLowercase. class := self allSubclasses detect: [:each | each encodingNames includes: encoding] ifNone: []. class ifNil: [^ nil]. ^ class new! ! !MCWorkingCopyBrowser methodsFor: '*Polymorph-Tools-Diff' stamp: 'ClementBera 7/26/2013 16:50' prior: 25157623! viewChanges "View the changes made in the working copy." | patch | 'Finding changes' displayProgressFrom: 0 to: 10 during:[:bar| self canSave ifTrue:[ bar current: 1. patch := workingCopy changesRelativeToRepository: self repository]. patch ifNil: [^ self]. bar current: 3. patch isEmpty ifTrue: [ workingCopy modified: false. bar current: 10. self inform: 'No changes' ] ifFalse: [ workingCopy modified: true. bar current: 5. self viewChanges: patch from: workingCopy packageName, ' (', workingCopy ancestry ancestorString, ')' to: ('Modified {1}' translated format: {workingCopy description})]]! ! !GZipReadStream class methodsFor: 'unzipping' stamp: 'ClementBera 7/26/2013 16:16' prior: 40052779! unzip: fullFileName to: pathString "Unzip the contents of the file specified by the full path name fullFileName to the location given by pathString." | zipped buffer unzipped newName | newName := fullFileName copyUpToLast: FileSystem disk extensionDelimiter. pathString asFileReference ensureCreateDirectory. unzipped := FileStream newFileNamed: (pathString asFileReference / newName) fullName. unzipped ifNil: [self error: pathString, ' looks incorrect']. [ unzipped binary. zipped := self on: (FileStream readOnlyFileNamed: fullFileName). buffer := ByteArray new: 50000. [zipped atEnd] whileFalse: [unzipped nextPutAll: (zipped nextInto: buffer)]] ensure: [ zipped close. unzipped close]. ^ newName! ! !RBInternalSpellChecker class methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:30' prior: 30703346! createWordList: aString "The input of the wordlist can be something from ." "self createWordList: '/Users/renggli/Desktop/words.txt'" | words input output zipped | words := Set new. input := FileStream fileNamed: aString. input converter: Latin1TextConverter new. [ input atEnd ] whileFalse: [ | word | word := input upTo: Character lf. word ifNotNil: [ word := word trimBoth. word size > 1 ifTrue: [ words add: word asLowercase ] ] ]. output := self basicNew directory forceNewFileNamed: self basicNew filename. zipped := ZLibWriteStream on: output binary. zipped nextInt32Put: words size. words asArray sort do: [ :each | zipped nextPut: each size; nextPutAll: (ByteArray withAll: each) ]. zipped close. output close! ! "Collections-Sequenceable"! "Compiler"! "Compression"! "Morphic-Examples"! "Multilingual-TextConversion"! "Network-Kernel"! "Network-Mail"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "RecentSubmissions"! "Refactoring-Spelling"! ----End fileIn----! ----QUIT----an Array(30 July 2013 10:34:31 am) Pharo.image priorSource: 12846898! ----STARTUP----an Array(30 July 2013 10:43:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 July 2013 10:43:11 am) Pharo-30315.image priorSource: 12929340! ----STARTUP----an Array(30 July 2013 11:09:17 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/30/2013 11:05' prior: 46401631! commentForCurrentUpdate ^ '11267 isNil ifTrue: to ifNil: part 7 https://pharo.fogbugz.com/f/cases/11267 11268 isNil ifTrue: to ifNil: part 8 https://pharo.fogbugz.com/f/cases/11268 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/30/2013 11:06'! script109 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.108.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.36.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.59.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.156.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.86.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.40.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.872.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.195.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.185.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.363.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.27.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.888.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-EstebanLorenzano.550.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/30/2013 11:06'! update30316 "self new update30316" self withUpdateLog: '11267 isNil ifTrue: to ifNil: part 7 https://pharo.fogbugz.com/f/cases/11267 11268 isNil ifTrue: to ifNil: part 8 https://pharo.fogbugz.com/f/cases/11268 '. self loadTogether: self script109 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CriticsCache methodsFor: 'protocol' stamp: 'ClementBera 7/26/2013 16:36' prior: 33861756! criticsOf: aRule aRule ifNil: [ ^ {} ]. ^ aRule isComposite ifTrue: [ aRule leaves gather: [ :rule | self criticsOf: rule ]] ifFalse: [ critics at: aRule ifAbsent: [{}]]! ! !HelpBrowser class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:17' prior: 23366241! defaultHelpBrowser ^ DefaultHelpBrowser ifNil: [DefaultHelpBrowser := self] ! ! !HelpBrowser methodsFor: 'events' stamp: 'ClementBera 7/26/2013 16:45' prior: 23364288! onItemClicked: anItem anItem ifNil: [^contentMorph setText: rootTopic asHelpTopic contents]. contentMorph setText: anItem contents! ! !DebugContext methodsFor: 'evaluating actions' stamp: 'ClementBera 7/26/2013 16:37' prior: 41652276! recompileCurrentMethodTo: aText notifying: aNotifyer | classOfMethod selector | classOfMethod := self selectedClass. selector := classOfMethod compiler parseSelector: aText. (selector == self selectedMessageName or: [(self selectedMessageName isDoIt) and: [selector numArgs = self selectedMessageName numArgs]]) ifFalse: [ self inform: 'can''t change selector'. ^ nil]. selector := classOfMethod compile: aText classified: self selectedMessageCategoryName notifying: aNotifyer. ^ selector ifNotNil: [ classOfMethod compiledMethodAt: selector ] ! ! !FileList methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:38' prior: 21856000! reference: dir | tmpReference | "Set the path of the volume to be displayed." self okToChange ifFalse: [^ self]. tmpReference := dir ifNotNilDo: [ :d| d asFileReference] ifNil: [ FileSystem disk workingDirectory ]. tmpReference isReadable ifFalse: [ ^ self inform: ('Cannot read {1}' translated format: { tmpReference})]. reference := tmpReference. sortMode ifNil: [sortMode := #date]. volumeList := ((Array with: '[]'), reference pathSegments) withIndexCollect: [:each :i | ( String new: i-1 withAll: $ ), each]. volumeListIndex := volumeList size. self changed: #relabel. self changed: #volumeList. self updateFileList.! ! !WorldState methodsFor: 'canvas' stamp: 'ClementBera 7/26/2013 17:06' prior: 54965687! canvas: x canvas := x. damageRecorder ifNil: [damageRecorder := DamageRecorder new] ifNotNil: [damageRecorder doFullRepaint]! ! !WorldState methodsFor: 'alarms' stamp: 'ClementBera 7/26/2013 17:07' prior: 54964421! removeAlarm: aSelector for: aTarget "Remove the alarm with the given selector" | alarm | alarm := self alarms detect: [:any | any receiver == aTarget and: [any selector == aSelector]] ifNone: [nil]. alarm ifNotNil: [self alarms remove: alarm]! ! !FinderUI methodsFor: 'text areas behavior' stamp: 'ClementBera 7/26/2013 16:39' prior: 22166060! sourceCode ^ self selectedClass ifNil: [ self isExamplesSymbol ifTrue: [ self class methodFinderExplanation ] ifFalse: [ self defaultExplanation]] ifNotNil:[ self selectedMethod ifNil: [ self buildDescriptionOf: self selectedClass] ifNotNil:[ | method | method := self isExamplesSymbol ifTrue: [self finder findSelector: self selectedMethod] ifFalse: [self selectedMethod]. (self selectedClass >> method) sourceCode]]! ! !AndreasSystemProfiler methodsFor: 'reporting' stamp: 'ClementBera 7/26/2013 16:01' prior: 38611000! report: strm cutoff: threshold tallyRoot ifNil: [ strm nextPutAll: 'The profiler has not been run'. ^ self ]. tallyRoot tally isZero ifTrue: [ strm nextPutAll: ' - no tallies obtained' ] ifFalse: [ strm nextPutAll: 'Reporting - ', totalTally asStringWithCommas,' tallies, ', totalTime asStringWithCommas, ' msec.'; cr; cr. tallyRoot fullPrintOn: strm tallyExact: false orThreshold: threshold time: totalTime. ]. totalTime isZero ifFalse: [ self reportGCStatsOn: strm. self reportProcessStatsOn: strm. ].! ! !Beeper class methodsFor: 'customize' stamp: 'ClementBera 7/26/2013 16:12' prior: 18002274! default "When the default is not defined it is initialized using #newDefault." ^ default ifNil: [default := self newDefault ] ! ! !DebugSession methodsFor: 'initialization' stamp: 'ClementBera 7/26/2013 16:37' prior: 45925077! process: aProcess context: aContext "aProcess stepToSendOrReturn ." "aProcess isSuspended ifTrue: [ aProcess stepToSendOrReturn ]." interruptedProcess := aProcess. interruptedContext := self filterTopContext: aContext. interruptedContext ifNil: [interruptedContext := aContext]. ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'ClementBera 7/26/2013 16:37' prior: 45932225! terminate "Action that needs to be executed after the window containing this debug session is closed, in order to terminate the right process." self interruptedProcess ifNotNil: [ "Assume the user closed the debugger. Simply kill the interrupted process." self interruptedProcess terminate. self clear. Smalltalk installLowSpaceWatcher. "restart low space handler" ] ifNil: [ "Assume the interrupted process was resumed." "Kill the active process if the error was in the UI as there should be only one UI process." errorWasInUIProcess == false ifFalse: [Processor terminateActive] ] ! ! !HelpTopic methodsFor: 'accessing' stamp: 'ClementBera 7/29/2013 15:06' prior: 23393013! subtopics "Returns the receivers list of subtopics" ^ subtopics ifNil: [subtopics := OrderedCollection new]! ! !DictionaryInspector methodsFor: 'menu' stamp: 'ClementBera 7/26/2013 16:38' prior: 36347761! renameEntry | newKey aKey value | value := object at: (keyArray at: selectionIndex - self numberOfFixedFields). newKey := UIManager default request: 'Enter new key, then type RETURN. (Expression will be evaluated for value.) Examples: #Fred ''a string'' 3+4' initialAnswer: (keyArray at: selectionIndex - self numberOfFixedFields) printString. newKey ifNotNil: [ aKey := self class compiler evaluate: newKey. object removeKey: (keyArray at: selectionIndex - self numberOfFixedFields). object at: aKey put: value. self calculateKeyArray. selectionIndex := self numberOfFixedFields + (keyArray indexOf: aKey). self changed: #selectionIndex. self changed: #inspectObject. self changed: #fieldList. self update ]! ! !HelpIcons class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:17' prior: 23382455! icons ^ Icons ifNil: [Icons := Dictionary new]! ! !BreakpointManager class methodsFor: 'install-uninstall' stamp: 'ClementBera 7/26/2013 16:12' prior: 18414827! installInClass: aClass selector: aSymbol "Install a new method containing a breakpoint. The receiver will remember this for unstalling it later" | breakMethod | breakMethod := self compilePrototype: aSymbol in: aClass. breakMethod ifNil: [^ nil]. self installed at: breakMethod put: aClass >> aSymbol. "old method" aClass basicAddSelector: aSymbol withMethod: breakMethod.! ! !BreakpointManager class methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:12' prior: 18417505! installed ^ Installed ifNil: [Installed := IdentityDictionary new]! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'ClementBera 7/26/2013 17:07' prior: 34625694! removeClassNamed: aName "Invoked from fileouts: if there is currently a class in the system named aName, then remove it. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: aName asSymbol ifAbsent: [ nil ]) ifNil: [ self crTrace: 'Removal of class named ' , aName , ' ignored because ' , aName , ' does not exist.'. ^ self ]. oldClass removeFromSystem! ! !SystemDictionary methodsFor: 'renaming' stamp: 'ClementBera 7/26/2013 17:07' prior: 34626212! renameClassNamed: oldName as: newName "Invoked from fileouts: if there is currently a class in the system named oldName, then rename it to newName. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: oldName asSymbol ifAbsent: [ nil ]) ifNil: [ self crTrace: 'Class-rename for ' , oldName , ' ignored because ' , oldName , ' does not exist.'. ^ self ]. oldClass rename: newName! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'ClementBera 7/26/2013 17:03' prior: 46014192! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups." "Note: SourcesName and imageName are full paths; changesName is a local name." | sources changes msg wmsg | msg := 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'. wmsg := 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'. (sources := self openSources: self sourcesName forImage: LastImagePath) ifNil: [ [ self downloadSources ] on: MessageNotUnderstood do: [ :exception | "ignore" ]. sources := self openSources: self sourcesName forImage: LastImagePath ]. changes := self openChanges: self changesName forImage: LastImagePath. ((sources isNil or: [ sources atEnd ])) ifTrue: [ Smalltalk os isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , self sourcesName) ]. changes ifNil: [ self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ] ifNotNil: [ changes isReadOnly ifTrue: [ self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , self changesName) ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self inform: 'The changes file named ' , self changesName , ' has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.' ] ]. SourceFiles := Array with: sources with: changes! ! !SmalltalkImage methodsFor: 'memory space' stamp: 'ClementBera 7/26/2013 17:04' prior: 34633098! installLowSpaceWatcher "Start a process to watch for low-space conditions." "Smalltalk installLowSpaceWatcher" self primSignalAtBytesLeft: 0. "disable low-space interrupts" LowSpaceProcess ifNotNil: [ LowSpaceProcess terminate ]. LowSpaceProcess := [ self lowSpaceWatcher ] newProcess. LowSpaceProcess priority: Processor lowIOPriority. LowSpaceProcess resume! ! !SmalltalkImage methodsFor: 'class and trait names' stamp: 'ClementBera 7/26/2013 17:04' prior: 34641243! renameClassNamed: oldName as: newName "Invoked from fileouts: if there is currently a class in the system named oldName, then rename it to newName. If anything untoward happens, report it in the Transcript. " | oldClass | (oldClass := self at: oldName asSymbol ifAbsent: [ nil ]) ifNil: [ self crTrace: 'Class-rename for ' , oldName , ' ignored because ' , oldName , ' does not exist.'. ^ self ]. oldClass rename: newName! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'ClementBera 7/26/2013 17:04' prior: 33554329! send: startUpOrShutDown toClassesNamedIn: startUpOrShutDownList with: argument "Send the message #startUp: or #shutDown: to each class named in the list. The argument indicates if the system is about to quit (for #shutDown:) or if the image is resuming (for #startUp:). If any name cannot be found, then remove it from the list." | removals errors | removals := OrderedCollection new. errors := OrderedCollection new. startUpOrShutDownList do: [ :name | | class | class := self at: name ifAbsent: [ nil ]. class ifNil: [ removals add: name ] ifNotNil: [ self logStartUpErrorDuring: [ class perform: startUpOrShutDown with: argument ] into: errors tryDebugger: false]]. "Remove any obsolete entries, but after the iteration" startUpOrShutDownList removeAll: removals. ^ errors! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'ClementBera 7/26/2013 17:05' prior: 34643503! startupImage: isNewImage snapshotWorked: snapshotResult | startupErrors | self vm setGCParameters. deferredStartupActions := nil. isNewImage ifTrue: [ Smalltalk clearExternalObjects ]. startupErrors := OrderedCollection new. UIManager default boot: isNewImage during: [ startupErrors addAll: (self processStartUpList: isNewImage). isNewImage ifTrue: [ self recordStartupStamp ] ]. startupErrors addAll: (self executeDeferredStartupActions: isNewImage). startupErrors isEmpty ifFalse: [ self handleStartupErrors: startupErrors ]. snapshotResult ifNil: [ self error: 'Failed to write image file (disk full?)' ]! ! !Workspace methodsFor: 'binding' stamp: 'ClementBera 7/26/2013 17:06' prior: 54946920! bindingOf: aString mustDeclareVariables ifTrue: [^ nil]. "I want to have workspace that force the user to declare variables. Still subclasses may want to do something else" bindings ifNil: [self initializeBindings]. (bindings includesKey: aString) ifFalse: [bindings at: aString put: nil]. ^ bindings associationAt: aString! ! !Workspace methodsFor: '*necompletion' stamp: 'ClementBera 7/26/2013 17:06' prior: 54943599! guessTypeForName: aString | binding | bindings ifNotNil: [ binding := bindings at: aString ifAbsent: [ nil ]. binding isNil ifFalse: [ ^ binding class ] ]. ^ nil! ! !MessageTally class methodsFor: 'spying' stamp: 'ClementBera 7/26/2013 16:18' prior: 25737406! tallySendsTo: receiver inBlock: aBlock showTree: treeOption closeAfter: closeAfter openResultWindow: openResultWindow " MessageTally tallySends: [3.14159 printString] " "This method uses the simulator to count the number of calls on each method invoked in evaluating aBlock. If receiver is not nil, then only sends to that receiver are tallied. Results are presented as leaves, sorted by frequency, preceded, optionally, by the whole tree." | prev tallies startTime totalTime | startTime := Time millisecondClockValue. tallies := self new class: aBlock receiver class method: aBlock method. tallies reportOtherProcesses: true. "Do NOT filter nodes with nil process" prev := aBlock. thisContext sender runSimulated: aBlock contextAtEachStep: [:current | current == prev ifFalse: ["call or return" prev sender ifNotNil: ["call only" (receiver isNil or: [current receiver == receiver]) ifTrue: [tallies tally: current by: 1]]. prev := current]]. totalTime := Time millisecondClockValue - startTime // 1000.0 roundTo: 0.01. openResultWindow ifTrue: [ (CodeHolder new contents: (String streamContents: [:s | s nextPutAll: 'This simulation took ' , totalTime printString , ' seconds.'; cr. treeOption ifTrue: [ tallies fullPrintExactOn: s ] ifFalse: [ tallies leavesPrintExactOn: s ]. ])) openLabel: 'Spy Results' wrap: false ]. closeAfter ifTrue: [ tallies close ]. ^ tallies! ! !MessageTally methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:52' prior: 25719666! printOn: aStream total: total totalTime: totalTime tallyExact: isExact isExact ifTrue: [ | myTally | myTally := tally. receivers == nil ifFalse: [receivers do: [:r | myTally := myTally - r tally]]. aStream print: myTally; space] ifFalse: [ | percentage | percentage := tally asFloat / total * 100.0. aStream nextPutAll: (percentage printShowingDecimalPlaces: 1); nextPutAll: '% {'; print: (percentage * totalTime / 100) rounded; nextPutAll: 'ms} ']. receivers ifNil: [ aStream nextPutAll: 'primitives'; cr] ifNotNil: [ | className aSelector aClass | aSelector := method selector. aClass := method methodClass. className := aClass name contractTo: self maxClassNameSize. aStream nextPutAll: class name; nextPutAll: (aClass = class ifTrue: ['>>'] ifFalse: ['(' , aClass name , ')>>']); nextPutAll: (aSelector contractTo: self maxClassPlusSelectorSize - className size); cr]! ! !CriticBrowser methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:36' prior: 33901374! reapplyThisRule | rule | rulesModel selectedItem ifNil: [ ^ self ]. rule := rulesModel selectedItem. rule leaves do: [ :each | self reapplyRule: each ]. ! ! !ChangeList class methodsFor: 'public access' stamp: 'ClementBera 7/26/2013 16:13' prior: 18786686! browseRecentLogOn: origChangesFile startingFrom: initialPos "Prompt with a menu of how far back to go when browsing a changes file." | end banners positions pos chunk i changesFile | changesFile := origChangesFile readOnlyCopy. banners := OrderedCollection new. positions := OrderedCollection new. end := changesFile size. changesFile setConverterForCode. pos := initialPos. [pos = 0 or: [banners size > 20]] whileFalse: [changesFile position: pos. chunk := changesFile nextChunk. i := chunk indexOfSubCollection: 'priorSource: ' startingAt: 1. i > 0 ifTrue: [positions addLast: pos. banners addLast: (chunk copyFrom: 5 to: i - 2). pos := Number readFrom: (chunk copyFrom: i + 13 to: chunk size)] ifFalse: [pos := 0]]. changesFile close. banners size = 0 ifTrue: [^ self inform: 'this image has never been saved since changes were compressed' translated]. pos := UIManager default chooseFrom: banners values: positions title: 'Browse as far back as...' translated. pos ifNil: [^ self]. self browseRecent: end - pos on: origChangesFile! ! !DialogItemsChooser methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:37' prior: 20672243! choicesList ^ choicesList ifNil: [ choicesList := OrderedCollection new ]! ! !TestResource class methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 16:33' prior: 52370280! isAvailable "This is (and must be) a lazy method. If my current has a value, an attempt to make me available has already been made: trust its result. If not, try to make me available." current ifNil: [self makeAvailable]. ^self isAlreadyAvailable! ! !TestResource class methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:33' prior: 52371488! resetOrAddResourcesTo: aCollection "Add correctly set-up resources to the collection unless already there. Reset any imperfectly-set-up resources, so current isNil will return true if they are re-encountered via an indirectly self-prerequing resource; circular references cannot be set up so will never reply true to isAlreadyAvailable, but may have correctly-set-up prereqs to add and/or imperfectly-set-up ones to reset, so do not abort the loop first time round." current ifNil: [^self]. self isAlreadyAvailable ifFalse: [self reset. self resources do: [:each | each resetOrAddResourcesTo: aCollection]] ifTrue: [(aCollection includes: self) ifFalse: [self resources do: [:each | each resetOrAddResourcesTo: aCollection]. aCollection add: self]] "The cloned 'self resources do: ...' line in both blocks is, I think, the best way to write this method so that its logic is clear. The first loop resets this resource immediately, before traversing its resources; the second traverses before adding"! ! !TestResource methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 17:07' prior: 52365747! name name ifNil: [^self printString]. ^name! ! "DebuggerModel"! "HelpSystem-Core"! "Manifest-CriticBrowser"! "Morphic-Base"! "NECompletion"! "SUnit-Core"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(30 July 2013 11:09:32 am) Pharo.image priorSource: 12929541! ----STARTUP----an Array(30 July 2013 11:18:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 July 2013 11:18:20 am) Pharo-30316.image priorSource: 12959940! ----STARTUP----an Array(30 July 2013 12:58:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/30/2013 12:54' prior: 46484275! commentForCurrentUpdate ^ '11269 isNil ifTrue: to ifNil: part 9 https://pharo.fogbugz.com/f/cases/11269 11277 isNil ifTrue: to: ifNil: Morphic Kernel https://pharo.fogbugz.com/f/cases/11277 11272 isNil ifTrue: to ifNil: part 12 (last before morphic) https://pharo.fogbugz.com/f/cases/resolve/11272 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/30/2013 12:55'! script110 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.621.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.39.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1543.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.143.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.843.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.246.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.60.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.496.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.874.mcz RPackage-Core-MarcusDenker.247.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.195.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.188.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.28.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.888.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.4.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/30/2013 12:55'! update30317 "self new update30317" self withUpdateLog: '11269 isNil ifTrue: to ifNil: part 9 https://pharo.fogbugz.com/f/cases/11269 11277 isNil ifTrue: to: ifNil: Morphic Kernel https://pharo.fogbugz.com/f/cases/11277 11272 isNil ifTrue: to ifNil: part 12 (last before morphic) https://pharo.fogbugz.com/f/cases/resolve/11272 '. self loadTogether: self script110 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HandMorph methodsFor: 'drawing' stamp: 'ClementBera 7/30/2013 11:06' prior: 23226983! drawOn: aCanvas "Draw the hand itself (i.e., the cursor)." temporaryCursor ifNil: [aCanvas paintImage: NormalCursor at: bounds topLeft] ifNotNil: [aCanvas paintImage: temporaryCursor at: bounds topLeft]. ! ! !HandMorph methodsFor: 'focus handling' stamp: 'ClementBera 7/30/2013 11:06' prior: 23239764! newMouseFocus: aMorph event: event aMorph ifNotNil: [targetOffset := event cursorPoint - aMorph position]. ^self newMouseFocus: aMorph! ! !HandMorph methodsFor: 'selected object' stamp: 'ClementBera 7/30/2013 11:06' prior: 23252187! selectedObject "answer the selected object for the hand or nil is none" | halo | halo := self halo. halo ifNil: [^ nil]. ^ halo target renderedMorph! ! !HandMorph methodsFor: 'cursor' stamp: 'ClementBera 7/30/2013 11:06' prior: 23223529! showTemporaryCursor: cursorOrNil hotSpotOffset: hotSpotOffset "Set the temporary cursor to the given Form. If the argument is nil, revert to the normal hardware cursor." self changed. temporaryCursorOffset ifNotNil: [bounds := bounds translateBy: temporaryCursorOffset negated]. cursorOrNil ifNil: [temporaryCursor := temporaryCursorOffset := hardwareCursor := nil] ifNotNil: [temporaryCursor := cursorOrNil asCursorForm. temporaryCursorOffset := temporaryCursor offset - hotSpotOffset. (cursorOrNil isKindOf: Cursor) ifTrue: [hardwareCursor := cursorOrNil]]. bounds := self cursorBounds. self layoutChanged; changed! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:46' prior: 23412917! fullPath | ans | ans := String new writeStream. path do: [ :pathElem | ans nextPut: $/. ans nextPutAll: pathElem encodeForHTTP. ]. self query ifNotNil: [ ans nextPut: $?. ans nextPutAll: self query. ]. self fragment ifNotNil: [ ans nextPut: $#. ans nextPutAll: self fragment encodeForHTTP. ]. ^ans contents! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:46' prior: 23413340! printOn: aStream aStream nextPutAll: self schemeName. aStream nextPutAll: '://'. self username ifNotNil: [ aStream nextPutAll: self username encodeForHTTP. self password ifNotNil: [ aStream nextPutAll: ':'. aStream nextPutAll: self password encodeForHTTP]. aStream nextPutAll: '@' ]. aStream nextPutAll: self authority. port ifNotNil: [aStream nextPut: $:; print: port]. path do: [ :pathElem | aStream nextPut: $/. aStream nextPutAll: pathElem encodeForHTTP. ]. self query ifNotNil: [ aStream nextPut: $?. aStream nextPutAll: self query. ]. self fragment ifNotNil: [ aStream nextPut: $#. aStream nextPutAll: self fragment encodeForHTTP. ].! ! !Authorizer methodsFor: 'authentication' stamp: 'ClementBera 7/26/2013 16:02' prior: 17787056! mapFrom: aKey to: aPerson "Establish a mapping from a RFC 1421 key to a user." users ifNil: [ users := Dictionary new ]. aPerson ifNil: [ users removeKey: aKey ] ifNotNil: [ users removeKey: (users keyAtValue: aPerson ifAbsent: []) ifAbsent: []. users at: aKey put: aPerson ] ! ! !ClassDescription methodsFor: '*Slot' stamp: 'ClementBera 7/26/2013 16:09' prior: 41823451! initializeLayout (self allInstVarNames includes: #layout) ifFalse: [ ^ self ]. layout ifNotNil: [ ^ self ]. self superclass ifNotNil: [ self superclass initializeLayout ]. layout := SlotVirus newLayoutFor: self! ! !AnnotationRequest methodsFor: 'requests' stamp: 'ClementBera 7/26/2013 16:02' prior: 17553010! priorTimeStamp "The time stamp of the penultimate submission of the method, if any." | stamp | ^ (stamp := VersionsBrowser timeStampFor: selector class: class reverseOrdinal: 2) ifNotNil: [ 'prior time stamp: ' , stamp ]! ! !AnnotationRequest methodsFor: 'requests' stamp: 'ClementBera 7/26/2013 16:02' prior: 17554330! timeStamp "The time stamp of the last submission of the method." ^ self method ifNotNil: [ self method timeStamp ]! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'ClementBera 7/30/2013 11:09' prior: 44529630! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !TClassDescription methodsFor: 'instance variables' stamp: 'ClementBera 7/30/2013 11:09' prior: 40869091! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass ifNil: [0] ifNotNil: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass ifNil: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! !TClassDescription methodsFor: 'organization updating' stamp: 'ClementBera 7/30/2013 11:10' prior: 44495254! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !FinderUI methodsFor: '*Shout-Styling' stamp: 'ClementBera 7/26/2013 16:39' prior: 22145795! shoutAboutToStyle: aPluggableShoutMorphOrView aPluggableShoutMorphOrView classOrMetaClass: self selectedClass. self selectedClass ifNil: [^ false]. self selectedMethod ifNil: [^ false]. ^ true! ! !Morph methodsFor: 'geometry' stamp: 'ClementBera 7/30/2013 11:03' prior: 26703987! goHome | box fb | owner ifNil: [^ self]. self visible ifFalse: [^ self]. box := owner visibleClearArea. fb := self fullBounds. fb left < box left ifTrue: [self left: box left - fb left + self left]. fb right > box right ifTrue: [self right: box right - fb right + self right]. fb top < box top ifTrue: [self top: box top - fb top + self top]. fb bottom > box bottom ifTrue: [self bottom: box bottom - fb bottom + self bottom]. ! ! !Morph methodsFor: '*Polymorph-Widgets' stamp: 'ClementBera 7/30/2013 11:04' prior: 26597308! minExtent "Layout specific. Return the minimum size the receiver can be represented in. Implementation note: When this message is sent from an owner trying to lay out its children it will traverse down the morph tree and recompute the minimal arrangement of the morphs based on which the minimal extent is returned. When a morph with some layout strategy is encountered, the morph will ask its strategy to compute the new arrangement. However, since the final size given to the receiver is unknown at the point of the query, the assumption is made that the current bounds of the receiver are the base on which the layout should be computed. This scheme prevents strange layout changes when for instance, a table is contained in another table. Unless the inner table has been resized manually (which means its bounds are already enlarged) the arrangement of the inner table will not change here. Thus the entire layout computation is basically an iterative process which may have different results depending on the incremental changes applied. Fixed for shrinkWrap." | layout minExtent extra hFit vFit | hFit := self hResizing. vFit := self vResizing. (hFit == #rigid and: [vFit == #rigid]) ifTrue: ["The receiver will not adjust to parents layout by growing or shrinking, which means that an accurate layout defines the minimum size." ^self fullBounds extent max: self minWidth @ self minHeight]. "An exception -- a receiver with #shrinkWrap constraints but no children is being treated #rigid (the equivalent to a #spaceFill receiver in a non-layouting owner)" self hasSubmorphs ifFalse: [hFit == #shrinkWrap ifTrue: [hFit := #rigid]. vFit == #shrinkWrap ifTrue: [vFit := #rigid]]. layout := self layoutPolicy. layout ifNil: [minExtent := 0 @ 0] ifNotNil: [minExtent := layout minExtentOf: self in: self layoutBounds]. hFit == #rigid ifTrue: [minExtent := self fullBounds extent x @ minExtent y] ifFalse: [extra := self bounds width - self layoutBounds width. minExtent := (minExtent x + extra) @ minExtent y]. minExtent := vFit == #rigid ifTrue: [minExtent x @ self fullBounds extent y] ifFalse: [extra := self bounds height - self layoutBounds height. minExtent x @ (minExtent y + extra)]. minExtent := minExtent max: self minWidth @ self minHeight. ^minExtent! ! !Morph methodsFor: 'layout' stamp: 'ClementBera 7/30/2013 11:04' prior: 26735533! minHeight: aNumber aNumber ifNil: [self removeProperty: #minHeight] ifNotNil: [self setProperty: #minHeight toValue: aNumber]. self layoutChanged! ! !Morph methodsFor: 'layout' stamp: 'ClementBera 7/30/2013 11:04' prior: 26735913! minWidth: aNumber aNumber ifNil: [self removeProperty: #minWidth] ifNotNil: [self setProperty: #minWidth toValue: aNumber]. self layoutChanged! ! !Morph methodsFor: '*Polymorph-Widgets' stamp: 'ClementBera 7/30/2013 11:04' prior: 26600717! myDependents: aCollectionOrNil "Improved performance dependents." aCollectionOrNil ifNil: [self removeProperty: #myDependents] ifNotNil: [self setProperty: #myDependents toValue: aCollectionOrNil]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ClementBera 7/30/2013 11:04' prior: 26723771! removeHalo "remove the surrounding halo (if any)" self halo ifNotNil: [self primaryHand removeHalo]! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'ClementBera 7/30/2013 11:05' prior: 26799616! rotationCenter: aPointOrNil "Set the new rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." aPointOrNil ifNil: [self removeProperty: #rotationCenter] ifNotNil:[self setProperty: #rotationCenter toValue: aPointOrNil] ! ! !Morph methodsFor: 'structure' stamp: 'ClementBera 7/30/2013 11:05' prior: 26810769! world ^owner ifNotNil: [owner world]! ! !HDCoverageReport methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:45' prior: 23117754! methodsIn: aPackage aPackage ifNil: [ ^ #() ]. ^ aPackage methods reject: [ :method | (self ignoredSelectors includes: method methodSymbol) or: [ method compiledMethod isAbstract or: [ method compiledMethod refersToLiteral: #ignoreForCoverage ] ] ]! ! !DigitalSignatureAlgorithm methodsFor: 'initialization' stamp: 'ClementBera 7/26/2013 16:38' prior: 20858225! initRandomFromUser "Ask the user to type a long random string and use the result to seed the secure random number generator." | s | s := UIManager default request: 'Enter a long random string to seed the random generator.'. s ifNil: [s := '']. ^self initRandomFromString: s! ! !TBehavior methodsFor: 'traits' stamp: 'ClementBera 7/30/2013 11:08' prior: 44812934! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors ifNil: [self basicLocalSelectors: self selectors asSet]! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'ClementBera 7/30/2013 11:08' prior: 44760334! includesLocalSelector: aSymbol ^self basicLocalSelectors ifNil: [self includesSelector: aSymbol] ifNotNil: [self localSelectors includes: aSymbol]! ! !TBehavior methodsFor: 'printing' stamp: 'ClementBera 7/30/2013 11:08' prior: 44763491! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key ifNil: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !TBehavior methodsFor: 'queries' stamp: 'ClementBera 7/30/2013 11:08' prior: 40965826! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass ifNotNil: [self superclass whichSuperclassSatisfies: aBlock]! ! !TClass methodsFor: 'accessing method dictionary' stamp: 'ClementBera 7/30/2013 11:09' prior: 40973080! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !SystemNavigation methodsFor: '*NautilusCommon' stamp: 'ClementBera 7/26/2013 17:08' prior: 51514108! browseSharedPoolUsersOf: aClass | pattern list | self okToChange ifFalse: [^ self ]. list := self allClassesUsingSharedPool: aClass name. list isEmpty ifTrue: [ ^ self ] ifFalse: [pattern := UIManager default enterOrRequestFrom: list lines: #() title: 'Class name or fragment?']. pattern ifNil: [^ self ]. pattern browse! ! !ClassOrganization methodsFor: 'notifications' stamp: 'ClementBera 7/26/2013 16:35' prior: 19311152! notifyOfChangedSelectorsOldDict: oldDictionaryOrNil newDict: newDictionaryOrNil (oldDictionaryOrNil isNil and: [newDictionaryOrNil isNil]) ifTrue: [^ self]. oldDictionaryOrNil ifNil: [ newDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: nil to: cat]. ^ self. ]. newDictionaryOrNil ifNil: [ oldDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: cat to: nil]. ^ self. ]. oldDictionaryOrNil keysAndValuesDo: [:el :cat | | newCat | newCat := newDictionaryOrNil at: el. self notifyOfChangedSelector: el from: cat to: newCat. ].! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'ClementBera 7/30/2013 11:07' prior: 26864855! hasProperty: aSymbol "Answer whether the receiver has the property named aSymbol" | property | otherProperties ifNil: [^ false]. property := otherProperties at: aSymbol ifAbsent: []. property ifNil: [^ false]. property == false ifTrue: [^ false]. ^ true! ! !MorphExtension methodsFor: 'other' stamp: 'ClementBera 7/30/2013 11:07' prior: 26872080! isDefault "Return true if the receiver is a default and can be omitted" locked == true ifTrue: [^ false]. visible == false ifTrue: [^ false]. sticky == true ifTrue: [^ false]. balloonText ifNotNil: [^ false]. externalName ifNotNil: [^ false]. eventHandler ifNotNil: [^ false]. otherProperties ifNotNil: [otherProperties isEmpty ifFalse: [^ false]]. ^ true! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'ClementBera 7/30/2013 11:07' prior: 26866360! sortedPropertyNames "answer the receiver's property names in a sorted way" | props | props := (Array new: 10) writeStream. locked == true ifTrue: [props nextPut: #locked]. visible == false ifTrue: [props nextPut: #visible]. sticky == true ifTrue: [props nextPut: #sticky]. balloonText ifNotNil: [props nextPut: #balloonText]. externalName ifNotNil: [props nextPut: #externalName]. eventHandler ifNotNil: [props nextPut: #eventHandler]. otherProperties ifNotNil: [otherProperties associationsDo: [:a | props nextPut: a key]]. ^props contents sort: [:s1 :s2 | s1 <= s2]! ! !Form methodsFor: 'converting' stamp: 'ClementBera 7/26/2013 16:40' prior: 22481717! colorReduced "Return a color-reduced ColorForm version of the receiver, if possible, or the receiver itself if not." | tally tallyDepth colorCount newForm cm oldPixelValues newFormColors nextColorIndex c | tally := self tallyPixelValues asArray. tallyDepth := (tally size log: 2) asInteger. colorCount := 0. tally do: [:n | n > 0 ifTrue: [colorCount := colorCount + 1]]. (tally at: 1) = 0 ifTrue: [colorCount := colorCount + 1]. "include transparent" colorCount > 256 ifTrue: [^ self]. "cannot reduce" newForm := self formForColorCount: colorCount. "build an array of just the colors used, and a color map to translate old pixel values to their indices into this color array" cm := Bitmap new: tally size. oldPixelValues := self colormapIfNeededForDepth: 32. newFormColors := Array new: colorCount. newFormColors at: 1 put: Color transparent. nextColorIndex := 2. 2 to: cm size do: [:i | (tally at: i) > 0 ifTrue: [ oldPixelValues ifNil: [c := Color colorFromPixelValue: i - 1 depth: tallyDepth] ifNotNil: [c := Color colorFromPixelValue: (oldPixelValues at: i) depth: 32]. newFormColors at: nextColorIndex put: c. cm at: i put: nextColorIndex - 1. "pixel values are zero-based indices" nextColorIndex := nextColorIndex + 1]]. "copy pixels into new ColorForm, mapping to new pixel values" newForm copyBits: self boundingBox from: self at: 0@0 clippingBox: self boundingBox rule: Form over fillColor: nil map: cm. newForm colors: newFormColors. newForm offset: offset. ^ newForm ! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass ifNil: [0] ifNotNil: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass ifNil: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! !Trait method! instVarNameForIndex: index "Answer the named instance variable with index index or nil if none." | superInstSize | index > self instSize ifTrue: [^nil]. superInstSize := self superclass ifNil: [0] ifNotNil: [self superclass instSize]. index > superInstSize ifTrue: [^self instanceVariables at: index - superInstSize]. self superclass ifNil: [^nil]. ^self superclass instVarNameForIndex: index "(Object allSubclasses select: [:cls| cls instSize > cls superclass instSize and: [cls subclasses isEmpty and: [cls superclass instSize > 0]]]) collect: [:cls| (1 to: cls instSize) collect: [:i| cls instVarNameForIndex: i]]"! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! updateOrganizationDescription: each oldCategory: newCategoryOrNil newCategory: oldCategoryOrNil changed: changedCategories | sel effectiveCategory currentCategory | sel := each selector. (self includesLocalSelector: sel) ifTrue: [ ^ self ]. currentCategory := self organization categoryOfElement: sel. effectiveCategory := each effectiveMethodCategoryCurrent: currentCategory new: newCategoryOrNil. effectiveCategory ifNil: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization removeElement: sel. ^ self ]. (currentCategory isNil or: [ currentCategory == Protocol ambiguous or: [ currentCategory == oldCategoryOrNil ] ]) ifFalse: [ ^ self ]. (currentCategory ~~ effectiveCategory) ifTrue: [ currentCategory ifNotNil: [ changedCategories add: currentCategory ]. self organization classify: sel under: effectiveCategory suppressIfDefault: false ]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors ifNil: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! ensureLocalSelectors "Ensures that the instance variable localSelectors is effectively used to maintain the set of local selectors. This method must be called before any non-local selectors are added to the method dictionary!!" self basicLocalSelectors ifNil: [self basicLocalSelectors: self selectors asSet]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors ifNil: [self includesSelector: aSymbol] ifNotNil: [self localSelectors includes: aSymbol]! ! !Trait method! includesLocalSelector: aSymbol ^self basicLocalSelectors ifNil: [self includesSelector: aSymbol] ifNotNil: [self localSelectors includes: aSymbol]! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key ifNil: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! literalScannedAs: scannedLiteral notifying: requestor "Postprocesses a literal scanned by Scanner scanToken (esp. xLitQuote). If scannedLiteral is not an association, answer it. Else, if it is of the form: nil->#NameOfMetaclass answer nil->theMetaclass, if any has that name, else report an error. Else, if it is of the form: #NameOfGlobalVariable->anythiEng answer the global, class, or pool association with that nameE, if any, else add it to Undeclared a answer the new Association." | key value | (scannedLiteral isVariableBinding) ifFalse: [^ scannedLiteral]. key := scannedLiteral key. value := scannedLiteral value. key ifNil: "###" [(self bindingOf: value) ifNotNil:[:assoc| (assoc value isKindOf: Behavior) ifTrue: [^ nil->assoc value class]]. requestor notify: 'No such metaclass'. ^false]. (key isSymbol) ifTrue: "##" [(self bindingOf: key) ifNotNil:[:assoc | ^assoc]. Undeclared at: key put: nil. ^Undeclared bindingOf: key]. requestor notify: '## must be followed by a non-local variable name'. ^false " Form literalScannedAs: 14 notifying: nil 14 Form literalScannedAs: #OneBitForm notiEfying: nil OneBitForm Form literalScannedAs: ##OneBitForm notifying: nil OneBitForm->a Form Form literalScannedAs: ##Form notifying: nil Form->Form Form literalScannedAs: ###Form notifying: nil nilE->Form class "! ! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass ifNotNil: [self superclass whichSuperclassSatisfies: aBlock]! ! !Trait method! whichSuperclassSatisfies: aBlock (aBlock value: self) ifTrue: [^self]. ^self superclass ifNotNil: [self superclass whichSuperclassSatisfies: aBlock]! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! !Trait method! addSelector: selector withMethod: compiledMethod notifying: requestor | priorMethodOrNil | priorMethodOrNil := self compiledMethodAt: selector ifAbsent: [nil]. self addSelectorSilently: selector withMethod: compiledMethod. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inClass: self requestor: requestor] ifNotNil: [SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: self requestor: requestor].! ! "Graphics-Display Objects"! "HudsonBuildTools20"! "Morphic-Base"! "NautilusCommon"! "Network-Url"! "NewClassOrganizer"! "Polymorph-Widgets"! "Shout"! "Slot"! "System-Hashing"! "Traits"! ----End fileIn----! ----QUIT----an Array(30 July 2013 12:58:30 pm) Pharo.image priorSource: 12960141! ----STARTUP----an Array(30 July 2013 1:06:55 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 July 2013 1:06:55 pm) Pharo-30317.image priorSource: 13000314! ----STARTUP----an Array(30 July 2013 1:33:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/30/2013 13:30' prior: 46514875! commentForCurrentUpdate ^ '11271 isNil ifTrue: to ifNil: part 11 https://pharo.fogbugz.com/f/cases/11271 11270 isNil ifTrue: to ifNil: part 10 https://pharo.fogbugz.com/f/cases/11270 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/30/2013 13:31'! script111 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1544.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.147.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.845.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.60.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.500.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-MarcusDenker.102.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.874.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.188.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.28.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.888.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/30/2013 13:31'! update30318 "self new update30318" self withUpdateLog: '11271 isNil ifTrue: to ifNil: part 11 https://pharo.fogbugz.com/f/cases/11271 11270 isNil ifTrue: to ifNil: part 10 https://pharo.fogbugz.com/f/cases/11270 '. self loadTogether: self script111 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractFont methodsFor: '*FreeType-addition' stamp: 'ClementBera 7/26/2013 15:55' prior: 17208019! widthAndKernedWidthOfLeft: leftCharacter right: rightCharacterOrNil into: aTwoElementArray "Set the first element of aTwoElementArray to the width of leftCharacter and the second element to the width of left character when kerned with rightCharacterOrNil. Answer aTwoElementArray" | w k | w := self widthOf: leftCharacter. rightCharacterOrNil ifNil: [ aTwoElementArray at: 1 put: w; at: 2 put: w] ifNotNil: [ k := self kerningLeft: leftCharacter right: rightCharacterOrNil. aTwoElementArray at: 1 put: w; at: 2 put: w+k]. ^ aTwoElementArray ! ! !Metaclass methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:35' prior: 45352830! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !Character methodsFor: 'converting' stamp: 'ClementBera 7/26/2013 16:08' prior: 18924988! asUnicode | table charset v | self leadingChar = 0 ifTrue: [^ value]. charset := self characterSet. charset isCharset ifFalse: [^ self charCode]. table := charset ucsTable. table ifNil: [^ 16rFFFD]. v := table at: self charCode + 1. v = -1 ifTrue: [^ 16rFFFD]. ^ v. ! ! !NautilusUI methodsFor: 'source code area' stamp: 'ClementBera 7/26/2013 16:00' prior: 28312771! methodModified: anAnnouncement | collection | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. collection := self getList2. (collection includes: anAnnouncement methodClass) ifTrue: [ | method selectedMethod oldMethod | method := anAnnouncement newMethod. selectedMethod := self selectedMethod. self removeFromMethodsIconsCache: method. method isTestMethod ifTrue: [ "Should update class icon" ClassesIconsCache removeKey: method methodClass ifAbsent: []]. self updateClassView. oldMethod := anAnnouncement oldMethod. (selectedMethod = oldMethod or: [ oldMethod hasBreakpoint and: [ selectedMethod methodClass = oldMethod methodClass and: [ selectedMethod selector = oldMethod selector ]]]) ifTrue: [ sourceTextArea hasUnacceptedEdits ifTrue: [ | sourceCode | sourceCode := sourceTextArea text. self forceSelectedMethod: method. self update. self highlightCategory: method. sourceTextArea setText: sourceCode. sourceTextArea hasEditingConflicts: true. sourceTextArea update: #codeChangedElsewhere ] ifFalse: [ self selectedMethod: method. self update ]]]! ! !ClassOrganizer methodsFor: 'private' stamp: 'ClementBera 7/26/2013 16:07' prior: 19321389! notifyOfChangedSelectorsOldDict: oldDictionaryOrNil newDict: newDictionaryOrNil (oldDictionaryOrNil isNil and: [newDictionaryOrNil isNil]) ifTrue: [^ self]. oldDictionaryOrNil ifNil: [ newDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: nil to: cat]. ^ self. ]. newDictionaryOrNil ifNil: [ oldDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: cat to: nil]. ^ self. ]. oldDictionaryOrNil keysAndValuesDo: [:el :cat | | newCat | newCat := newDictionaryOrNil at: el. self notifyOfChangedSelector: el from: cat to: newCat. ].! ! !Monitor methodsFor: 'private' stamp: 'ClementBera 7/26/2013 17:19' prior: 26561928! exitAndWaitInQueue: anOrderedCollection maxMilliseconds: anIntegerOrNil | lock delay | lock := queuesMutex critical: [anOrderedCollection addLast: Semaphore new]. self exit. anIntegerOrNil ifNil: [ lock wait ] ifNotNil: [ delay := MonitorDelay signalLock: lock afterMSecs: anIntegerOrNil inMonitor: self queue: anOrderedCollection. lock wait. delay unschedule. ]. self enter.! ! !Date class methodsFor: 'importing' stamp: 'ClementBera 7/26/2013 16:15' prior: 20328956! readFrom: aStream "Read a Date from the stream in any of the forms: (15 April 1982; 15-APR-82; 15.4.82; 15APR82) (April 15, 1982; 4/15/82) -- (1982-04-15) (ISO8601)" | day month year parsedNumber prefix | aStream peek = $- ifTrue: [prefix := -1] ifFalse: [prefix := 1]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isDigit ifTrue: [ parsedNumber := (Integer readFrom: aStream) * prefix. (parsedNumber < 0 or: [parsedNumber > 31]) ifTrue: [year := parsedNumber]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isLetter ifTrue: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" month := (String new: 10) writeStream. [aStream peek isLetter] whileTrue: [month nextPut: aStream next]. month := month contents. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. parsedNumber ifNil: ["MM DD YY" day := Integer readFrom: aStream] ifNotNil: [ year ifNil: ["DD MM YY" day := parsedNumber]]] ifFalse: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" year ifNil: ["MM-DD-YY or DD-MM-YY" parsedNumber > 12 ifTrue: ["DD-MM-YY" day := parsedNumber. month := Month nameOfMonth: (Integer readFrom: aStream)] ifFalse: ["MM-DD-YY" month := Month nameOfMonth: parsedNumber. day := Integer readFrom: aStream]] ifNotNil: ["YY-MM-DD" month := Month nameOfMonth: (Integer readFrom: aStream)]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. year ifNil: [year := Integer readFrom: aStream] ifNotNil: [day := Integer readFrom: aStream]. (year < 100 and: [year >= 0]) ifTrue: [ year < 69 ifTrue: [ year := 2000 + year] ifFalse: [year := 1900 + year]]. ^ self year: year month: month day: day ! ! !SortHierarchically class methodsFor: 'actions' stamp: 'ClementBera 7/26/2013 16:33' prior: 36578754! sortNodes: nodes "Roel Wuyts: Reimplements sortHierarchically in a crude and ugly way that is however much more efficient" | classNodes sortedResults supersChain superior result chain1 chain2 i max | classNodes := (nodes collect: [:classNode | classNode element]) asOrderedCollection. sortedResults := SortedCollection sortBlock: [:assoc1 :assoc2 | result := nil. chain1 := assoc1 key. chain2 := assoc2 key. max := chain1 size min: chain2 size. i := 1. [result isNil and: [i <= max]] whileTrue: [ (chain1 at: i) = (chain2 at: i) ifTrue: [i := i + 1] ifFalse: [result := (chain1 at: i) name < (chain2 at: i) name]]. result ifNil: [ chain1 size < chain2 size] ifNotNil: [result] ]. nodes do: [:classNode | supersChain := classNode element withAllSuperclasses reversed. supersChain removeAllSuchThat: [:cl | (classNodes includes: cl) not]. superior := supersChain size > 1 ifTrue: [superior := supersChain atLast: 2. nodes detect: [:e | e element = superior]] ifFalse: [nil]. sortedResults add: supersChain contents -> (classNode ancestor: superior). ]. ^(sortedResults collect: [:assoc | assoc value]) asArray! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'ClementBera 7/26/2013 16:50' prior: 42029433! scanForPreviousVersion | sourceFilesCopy method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x ifNotNil: [ x readOnlyCopy ] ]. [ | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [ tokens := preamble parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x ifNotNil: [ x close ] ] ]! ! !BlockLocalTempCounter methodsFor: 'initialize-release' stamp: 'ClementBera 7/26/2013 16:04' prior: 35818835! tempCountForBlockAt: pc in: method "Compute the number of local temporaries in a block. If the block begins with a sequence of push: nil bytecodes then some of These could be initializing local temps. We can only reliably disambuguate them from other uses of nil by parsing the stack and seeing what the offset of the stack pointer is at the end of the block. There are short-cuts. The ones we take here are - if there is no sequence of push nils there can be no local temps - we follow forward jumps to shorten the amount of scanning" stackPointer := 0. scanner := InstructionStream new method: method pc: pc. scanner interpretNextInstructionFor: self. blockEnd ifNil: [self error: 'pc is not that of a block']. scanner nextByte = Encoder pushNilCode ifTrue: [joinOffsets := Dictionary new. [scanner pc < blockEnd] whileTrue: [scanner interpretNextInstructionFor: self]]. ^stackPointer! ! !BlockLocalTempCounter methodsFor: 'initialize-release' stamp: 'ClementBera 7/26/2013 16:04' prior: 35819868! testTempCountForBlockAt: startPc in: method "Compute the number of local temporaries in a block. If the block begins with a sequence of push: nil bytecodes then some of These could be initializing local temps. We can only reliably disambuguate them from other uses of nil by parsing the stack and seeing what the offset of the stack pointer is at the end of the block.There are short-cuts. The only one we take here is - if there is no sequence of push nils there can be no local temps" | symbolicLines line prior thePc | symbolicLines := Dictionary new. method symbolicLinesDo: [:pc :lineForPC| symbolicLines at: pc put: lineForPC]. stackPointer := 0. scanner := InstructionStream new method: method pc: startPc. scanner interpretNextInstructionFor: self. blockEnd ifNil: [self error: 'pc is not that of a block']. scanner nextByte = Encoder pushNilCode ifTrue: [joinOffsets := Dictionary new. [scanner pc < blockEnd] whileTrue: [line := symbolicLines at: scanner pc. prior := stackPointer. thePc := scanner pc. scanner interpretNextInstructionFor: self. Transcript cr; print: prior; nextPutAll: '->'; print: stackPointer; tab; print: thePc; tab; nextPutAll: line; flush]]. ^stackPointer! ! !GIFReadWriter methodsFor: 'private-decoding' stamp: 'ClementBera 7/26/2013 16:43' prior: 22827471! readBody "Read the GIF blocks. Modified to return a form. " | form extype block blocksize packedFields delay1 | form := nil. [ stream atEnd ] whileFalse: [ block := self next. block = Terminator ifTrue: [ ^ form ]. block = ImageSeparator ifTrue: [ form ifNil: [ form := self readBitData ] ifNotNil: [ self skipBitData ] ] ifFalse: [ block = Extension ifFalse: [ ^ form "^ self error: 'Unknown block type'" ]. "Extension block" extype := self next. "extension type" extype = 249 ifTrue: [ "graphics control" self next = 4 ifFalse: [ ^ form "^ self error: 'corrupt GIF file'" ]. "==== Reserved 3 Bits Disposal Method 3 Bits User Input Flag 1 Bit Transparent Color Flag 1 Bit ===" packedFields := self next. delay1 := self next. "delay time 1" delay := (self next * 256 + delay1) * 10. "delay time 2" transparentIndex := self next. (packedFields bitAnd: 1) = 0 ifTrue: [ transparentIndex := nil ]. self next = 0 ifFalse: [ ^ form "^ self error: 'corrupt GIF file'" ] ] ifFalse: [ "Skip blocks" [ (blocksize := self next) > 0 ] whileTrue: [ "Read the block and ignore it and eat the block terminator" self next: blocksize ] ] ] ]! ! !GIFReadWriter methodsFor: 'private-encoding' stamp: 'ClementBera 7/26/2013 16:44' prior: 22833960! writeHeader | byte | stream position = 0 ifTrue: [ "For first image only" self nextPutAll: 'GIF89a' asByteArray. self writeWord: width. "Screen Width" self writeWord: height. "Screen Height" byte := 128. "has color map" byte := byte bitOr: (bitsPerPixel - 1 bitShift: 5). "color resolution" byte := byte bitOr: bitsPerPixel - 1. "bits per pixel" self nextPut: byte. self nextPut: 0. "background color." self nextPut: 0. "reserved" colorPalette do: [ :pixelValue | self nextPut: ((pixelValue bitShift: -16) bitAnd: 255); nextPut: ((pixelValue bitShift: -8) bitAnd: 255); nextPut: (pixelValue bitAnd: 255) ]. loopCount notNil ifTrue: [ "Write a Netscape loop chunk" self nextPut: Extension. self nextPutAll: #( 255 11 78 69 84 83 67 65 80 69 50 46 48 3 1 ) asByteArray. self writeWord: loopCount. self nextPut: 0 ] ]. delay notNil | transparentIndex notNil ifTrue: [ self nextPut: Extension; nextPutAll: #(249 4 ) asByteArray; nextPut: (transparentIndex ifNil: [ 0 ] ifNotNil: [ 9 ]); writeWord: (delay ifNil: [ 0 ]); nextPut: (transparentIndex ifNil: [ 0 ]); nextPut: 0 ]. self nextPut: ImageSeparator. self writeWord: 0. "Image Left" self writeWord: 0. "Image Top" self writeWord: width. "Image Width" self writeWord: height. "Image Height" byte := interlace ifTrue: [ 64 ] ifFalse: [ 0 ]. self nextPut: byte! ! !Delay class methodsFor: 'testing' stamp: 'ClementBera 7/26/2013 16:15' prior: 41588236! nextWakeUpTime ^ AccessProtect critical: [ ActiveDelay ifNil: [ 0 ] ifNotNil: [ ActiveDelay resumptionTime ]]! ! !MCFileRepositoryInspector class methodsFor: 'as yet unclassified' stamp: 'ClementBera 7/26/2013 16:18' prior: 24787904! order ^ Order ifNil: [ Order := 5 ]! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'ClementBera 7/26/2013 16:49' prior: 24784843! versionList | result sortBlock | result := selectedPackage ifNil: [ versions ifNil: [ ^ #() ]] ifNotNil: [ (versions ifNil: [ ^ #() ]) select: [ :each | selectedPackage = each first ] ]. sortBlock := (self orderSpecs at: order) value. sortBlock ifNotNil: [ result := result asSortedCollection: [:a :b | [sortBlock value: a value: b] on: Error do: [true]]]. versionPattern ifNotNil: [ result := result select: [ :package| versionPattern search: package name ]]. ^ result collect: [ :each | self versionHighlight: each fourth ]! ! !MessageListNonInspectableNode methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:51' prior: 25640697! dictionary dictionary ifNil: [ self parentNode ifNil: [ self model level = 2 ifTrue: [dictionary := self model dictionary]. self model level = 3 ifTrue:[dictionary := self model dictionary at: self item]] ifNotNil: [dictionary := self model dictionary at: (self parentNode item)]]. ^dictionary! ! !ByteTextConverter class methodsFor: '*Unicode-Initialization' stamp: 'ClementBera 7/26/2013 16:34' prior: 18616930! generateByteToUnicodeSpec: url "Return the formatted source code for an array mapping the top 128 byte to unicode values from a Unicode.org url" "self generateByteToUnicodeSpec: 'http://unicode.org/Public/MAPPINGS/ISO8859/8859-2.TXT'." | mapping | mapping := self parseUnicodeOrgSpec: url. ^ String streamContents: [ :stream | stream tab; << '"'; << self name; << ' generateByteToUnicodeSpec: '; print: url; << '"'; cr; cr; tab; << '^ #('. 128 to: 255 do: [ :each | | unicode | each \\ 8 = 0 ifTrue: [ stream cr; tab ]. (unicode := mapping at: each ifAbsent: [ nil ]) ifNil: [ stream print: nil; space ] ifNotNil: [ stream << '16r' << (unicode printPaddedWith: $0 to: 4 base: 16); space ] ]. stream nextPut: $); cr ]! ! !Class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:10' prior: 45351694! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !FreeTypeCache class methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:16' prior: 22629198! current ^ current ifNil: [ current := self new ]! ! !FreeTypeCache methodsFor: 'add-remove' stamp: 'ClementBera 7/26/2013 16:40' prior: 22624863! atFont: aFreeTypeFont charCode: charCodeInteger type: typeFlag put: anObject | charCodeTable typeTable anObjectSize oldEntry oldEntrySize entry | anObjectSize := self sizeOf: anObject. (maximumSize notNil and:[anObjectSize > maximumSize]) ifTrue:[^anObject]. (charCodeTable := fontTable at: aFreeTypeFont ifAbsentPut:[self dictionaryClass new: 60]) ifNotNil:[ (typeTable := charCodeTable at: charCodeInteger ifAbsentPut:[self dictionaryClass new: 10]) ifNotNil:[ oldEntry := typeTable at: typeFlag ifAbsent:[]. oldEntrySize := (oldEntry ifNil:[0] ifNotNil:[self sizeOf: oldEntry object]). entry := (self fifoEntryClass new font: aFreeTypeFont; charCode: charCodeInteger; type: typeFlag; object: anObject; yourself). typeTable at: typeFlag put: entry]]. used := used + anObjectSize - oldEntrySize. oldEntry ifNotNil: [fifo remove: oldEntry]. fifo addLast: entry. maximumSize ifNotNil:[self shrinkTo: maximumSize]. ^anObject ! ! !FreeTypeCache methodsFor: 'public' stamp: 'ClementBera 7/26/2013 16:41' prior: 22627869! report "answer a description of the current state of the cache" | usedPercent | usedPercent := maximumSize ifNil: [0] ifNotNil: [(used * 100 / maximumSize) asFloat rounded]. ^usedPercent asString,'% Full (maximumSize: ', maximumSize asString, ' , used: ', used asString,')'! ! !FT2Face methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:42' prior: 21729755! printOn: aStream super printOn: aStream. handle ifNil: [^self]. "self familyName isNil ifTrue: [ self loadFields ]." aStream nextPut: $[; nextPutAll: (self familyName ifNil: ['?']); space; nextPutAll: (self styleName ifNil: ['?']); nextPut: $]! ! !Categorizer methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:06' prior: 18708351! categories "Answer an Array of categories (names)." categoryArray ifNil: [^ nil]. (categoryArray size = 1 and: [categoryArray first = Default & (elementArray size = 0)]) ifTrue: [^Array with: NullCategory]. ^categoryArray! ! !Categorizer methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:06' prior: 18714535! elementCategoryDict | dict firstIndex lastIndex | elementArray ifNil: [^ nil]. dict := Dictionary new: elementArray size. 1to: categoryStops size do: [:cat | firstIndex := self firstIndexOfCategoryNumber: cat. lastIndex := self lastIndexOfCategoryNumber: cat. firstIndex to: lastIndex do: [:el | dict at: (elementArray at: el) put: (categoryArray at: cat)]. ]. ^ dict.! ! !Number class methodsFor: 'deprecated' stamp: 'ClementBera 7/26/2013 16:28' prior: 28517408! readScaledDecimal: integerPart fractionPart: fractionPart digits: fractionDigits base: base sign: sign from: aStream "Complete creation of a ScaledDecimal, reading scale from aStream. Answer a ScaledDecimal, or nil if parsing fails. s[]" | scale decimalMultiplier decimalFraction | aStream atEnd ifTrue: [^ nil]. (aStream next == $s) ifFalse: [^ nil]. "s" (aStream atEnd not and: [aStream peek digitValue between: 0 and: 9]) ifTrue: [scale := Integer readFrom: aStream] ifFalse: [^ nil]. scale ifNil: ["s" fractionDigits = 0 ifTrue: ["s" scale := 0] ifFalse: [".s" scale := fractionDigits]]. fractionPart ifNil: [^integerPart * sign asScaledDecimal: scale] ifNotNil: [decimalMultiplier := base raisedTo: fractionDigits. decimalFraction := integerPart * decimalMultiplier + fractionPart * sign / decimalMultiplier. ^decimalFraction asScaledDecimal: scale]! ! !RPackageOrganizer class methodsFor: 'singleton' stamp: 'ClementBera 7/26/2013 16:31' prior: 32020812! default "WARNING: Since this component can be changed (i.e. for testing) you should NOT use it directly. Use RPackage class>>#organizer instead" ^ default ifNil: [ default := self new ]! ! !MessageListBrowser methodsFor: 'text' stamp: 'ClementBera 7/26/2013 16:51' prior: 25634733! textToDisplay ^ self selectedNode ifNotNil: [ self selectedNode isInspectable ifTrue: [^self displayInformationFrom: self selectedNode]]! ! !MessageListBrowser methodsFor: 'text' stamp: 'ClementBera 7/26/2013 16:51' prior: 25634983! updateTextArea self textArea ifNil: [^self]. self selectedNode ifNil: [self textArea visible: false] ifNotNil: [ (self selectedNode isInspectable) ifTrue: [self textArea visible: true] ifFalse: [self textArea hide]]! ! !FreeTypeFace methodsFor: 'validation' stamp: 'ClementBera 7/26/2013 16:42' prior: 22657875! create "create me in the FT2Plugin. This gets my handle, and loads the fields" fileContentsExternalMemory ifNil: [ self newFaceFromFile: filename asFileReference index: index ] ifNotNil: [ self newFaceFromExternalMemory: fileContentsExternalMemory index: index ]. self loadFields ! ! !FreeTypeFontProvider methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:41' prior: 22739961! addFromFileContents: bytes baseName: originalFileBaseName | i face numFaces info externalMem cachedInfo cachedNumFaces | i:= 0. [(cachedInfo := self validEmbeddedCachedInfoFor: bytes index: i) notNil] whileTrue:[ i = 0 ifTrue:[cachedNumFaces := cachedInfo numFaces]. self addFirstFileInfo: cachedInfo index: i. i := i + 1.]. (cachedNumFaces notNil and:[i >= cachedNumFaces]) ifTrue:[^self]. [externalMem := FreeTypeExternalMemory bytes: bytes. externalMem validate. face := FreeTypeFace basicNew fileContentsExternalMemory: externalMem . [ "we use the primNewFaceFromFile:index: method because we want to do this as fast as possible and we don't need the face registered because it will be explicitly destroyed later" face primNewFaceFromExternalMemory: externalMem size: bytes size index: i. face loadFields] on: FT2Error do:[:e | self failedToOpen:face index: i. ^externalMem destroyHandle.]. (face height notNil and:[face hasFamilyName and:[face hasStyleName and:[face isValid]]]) ifFalse:[ self failedToOpen:face index: i. ^ externalMem destroyHandle.] ifTrue:[ numFaces ifNil: [numFaces := face numFaces]. info := FreeTypeEmbeddedFileInfo new baseName: originalFileBaseName; fileContents: bytes; index: i; familyName: face familyName; styleName: face styleName; postscriptName: face postscriptName; bold: face isBold; italic: face isItalic; fixedWidth: face isFixedWidth; numFaces: numFaces; extractAttributesFromNames; yourself. self addFirstFileInfo: info index: i. self cacheEmbeddedFileInfo: info index: i. "Transcript show: 'from file : ', info asString." face destroyHandle. externalMem destroyHandle]. i := i + 1. i < numFaces "note, we use < rather than <= , because i is zero based"] whileTrue:[]. ! ! !FreeTypeFontProvider methodsFor: 'loading and updating' stamp: 'ClementBera 7/26/2013 16:42' prior: 22753870! updateFromFile: aFile | i face numFaces cachedInfo info cachedNumFaces path | i:= 0. [(cachedInfo := self validCachedInfoFor: aFile index: i) notNil] whileTrue:[ i = 0 ifTrue: [ cachedNumFaces := cachedInfo numFaces ]. self addFileInfo: cachedInfo index: i. i := i + 1.]. (cachedNumFaces notNil and:[ i >= cachedNumFaces ]) ifTrue:[ ^ self ]. path := aFile fullName . [face := FreeTypeFace basicNew filename: path; index: i. ["we use the primNewFaceFromFile:index: method because we want to do this as fast as possible and we don't need the face registered because it will be explicitly destroyed later" face primNewFaceFromFile: path index: i. face loadFields] on: FT2Error do:[:e | ^self failedToOpen: face from: path index: i ]. (face height notNil and:[face hasFamilyName and:[face hasStyleName and:[face isValid]]]) ifFalse: [ ^self failedToOpen:face from: path index: i ] ifTrue: [ numFaces ifNil: [numFaces := face numFaces]. info :=FreeTypeFileInfo new absoluteOrRelativePath: aFile path isAbsolute; absolutePath: path; "used for quick lookup on same platform" locationType: #default; index: i; fileSize: aFile size; modificationTime: aFile modificationTime; familyName: face familyName; styleName: face styleName; postscriptName: face postscriptName; bold: face isBold; italic: face isItalic; fixedWidth: face isFixedWidth; numFaces: numFaces; extractAttributesFromNames; yourself. self addFileInfo: info index: i. self cacheFileInfo: info index: i. "Transcript show: 'from file : ', info asString." face destroyHandle]. i := i + 1. i < numFaces "note, we use < rather than <= , because i is zero based"] whileTrue:[]. ! ! !CompiledMethod methodsFor: '*rpackage-core' stamp: 'ClementBera 7/26/2013 16:57' prior: 19784203! handleUnpackaged: anRPackageOrganizer | tmpTrait | tmpTrait := self methodClass traitComposition traitProvidingSelector: self selector. tmpTrait ifNotNil: [ (tmpTrait packages select: [ :aRPackage | aRPackage includesSelector: self selector ofClass: tmpTrait ]) isEmpty ifFalse: [ ^ self ]]. self error: 'Yes... method is unpackaged and I don''t know what to do with this.'. " self halt. self category isNil ifTrue: [ Error signal ]. anRPackageOrganizer systemMethodAddedActionFrom: (AddedEvent method: self selector: self selector protocol: self category class: self methodClass) asSystemAnnouncement"! ! !FT2Handle methodsFor: 'printing' stamp: 'ClementBera 7/26/2013 16:42' prior: 21749347! printOn: aStream | handleHex | super printOn: aStream. handle ifNil: [ ^aStream nextPutAll: '' ]. handleHex := (handle unsignedLongAt: 1 bigEndian: Smalltalk isBigEndian) printStringHex. aStream nextPutAll: '<0x'; nextPutAll: handleHex; nextPut: $>.! ! !MethodAddition methodsFor: 'notifying' stamp: 'ClementBera 7/26/2013 16:53' prior: 26332481! notifyObservers SystemAnnouncer uniqueInstance suspendAllWhile: [myClass organization classify: selector under: category]. priorMethodOrNil ifNil: [SystemAnnouncer uniqueInstance methodAdded: compiledMethod selector: selector inProtocol: category class: myClass requestor: requestor] ifNotNil: [ SystemAnnouncer uniqueInstance methodChangedFrom: priorMethodOrNil to: compiledMethod selector: selector inClass: myClass requestor: requestor. priorCategoryOrNil = category ifFalse: [ SystemAnnouncer uniqueInstance selector: selector recategorizedFrom: priorCategoryOrNil to: category inClass: myClass] ]. "The following code doesn't seem to do anything." myClass instanceSide noteCompilationOf: selector meta: myClass isClassSide. ! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'ClementBera 7/26/2013 16:10' prior: 37878024! groupsMenu: aBuilder | target | target := aBuilder model. target selectedGroup ifNil: [ ^ target ]. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; action: [ target restrictedBrowseGroups: target selectedGroups ]; order: 1000; withSeparatorAfter. (aBuilder item: #'Run tests') keyText: 'j, g' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runTestsOfGroups: target selectedGroups notifying: true ]; order: 1100. (aBuilder item: #'Merge groups') action: [target mergeGroups]; enabledBlock: [ target selectedGroups size > 1]; order: 1200. target selectedGroup ifNotNil: [ target selectedGroup isReadOnly ifFalse: [ (aBuilder item: #'Rename...') keyText: 'r, g' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameGroup ]; enabledBlock: [ target selectedGroups size <= 1]; order: 1300 ]. target selectedGroup removable ifTrue: [ (aBuilder item: #'Remove groups') keyText: 'x, g' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; icon: (Smalltalk ui icons iconNamed: #removeIcon); action: [target removeGroups]; order: 1400 ] ]! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'ClementBera 7/26/2013 15:57' prior: 17337554! contentSelectionFor: aTextMorph aTextMorph ifLocked: [ ^ (1 to: 0) ]. self selectedClass ifNotNil: [ self selectedMethod ifNil: [ self selectedCategory ifNotNil: [^ (1 to: self defaultMethodSource size) ]]]. ^ (1 to: 0) ! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'ClementBera 7/26/2013 15:58' prior: 17339560! lockTextArea self selectedMethod ifNil: [ ^ self ]. sourceTextArea lockFrom: self selectedMethod. self buildNewSourceTextArea. multipleMethodsEditor addEditor: sourceTextArea. self changed: #sourceCodeFrom:.! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'ClementBera 7/26/2013 16:00' prior: 17342459! sourceCode self removeSourceTextAreaLimit. ^self selectedClass ifNil: [ self defaultClassDescriptor] ifNotNil: [ self selectedMethod ifNil: [ self selectedCategory ifNotNil: [ self putSourceTextAreaLimit. self defaultMethodSource] ifNil: [ self selectedClassDescription]] ifNotNil: [ self putSourceTextAreaLimit. self selectedMethodSource]]. ! ! !BuilderManifest class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:13' prior: 18537880! of: aItem | mb | mb := self new. (mb manifestOf: aItem) ifNil: [mb createManifestOf: aItem] ifNotNil: [ mb isObsoleteManifest ifTrue: [ mb manifest theNonMetaClass removeFromSystem. mb createManifestOf: aItem]]. ^ mb ! ! !BuilderManifest class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:13' prior: 18538233! ofPackageNamed: aPackageName | mb manifestClass | mb := self new. manifestClass := self allManifestClasses detect: [:each | each category = aPackageName ] ifNone: [ nil ]. manifestClass ifNil: [mb createManifestNamed: aPackageName ] ifNotNil:[ mb manifestClass: manifestClass]. ^ mb ! ! !MCWorkingCopyBrowser methodsFor: 'metacello' stamp: 'ClementBera 7/26/2013 16:50' prior: 25174479! addMetacelloBaseline | baselineNumber existingBaselines msg selectorName addedPackages package stream packagePattern | "0 -- must have a repository selected" repository ifNil: [ UIManager default inform: 'Please select a repository and try again'. ^self ]. "1 -- Selecting baseline name" existingBaselines := self baseLines. existingBaselines size > 0 ifTrue: [msg := 'Current baselines:', String cr, (existingBaselines inject: '' into: [:sum :el | sum, el, String cr]), 'Enter a new baseline number'] ifFalse: [msg := 'Enter a new baseline number ("-baseline" will be automatically added)']. baselineNumber := UIManager default request: msg initialAnswer: '1.0'. baselineNumber ifNil: [ ^ self ]. "2 -- add package names" addedPackages := OrderedCollection new. packagePattern := UIManager default request: 'Please enter a pattern to filter package names' initialAnswer: '*'. [ | packageNames workingCopies | packageNames := OrderedCollection new. workingCopies := OrderedCollection new. self workingCopies do: [:pkg | ((packagePattern match: pkg package name) and: [ (addedPackages includes: pkg package name) not ]) ifTrue: [ packageNames add: pkg package name. workingCopies add: pkg ]]. package := UIManager default chooseFrom: packageNames values: workingCopies title: 'Add dependent package (cancel to stop)'. package ifNotNil: [addedPackages add: package package name ] ] doWhileTrue: [ package notNil ]. "3 -- Creating baseline" selectorName := baselineNumber copyWithoutAll: '.-'. stream := WriteStream on: String new. stream nextPutAll: 'baseline'. stream nextPutAll: selectorName. stream nextPutAll: ': spec spec for: #common do: [ spec blessing: #baseline. spec repository: '''. stream nextPutAll: repository description. stream nextPutAll: '''. "spec package: ''Example-Core''; package: ''Example-Tests'' with: [ spec requires: ''Example-Core'' ]" '. addedPackages do: [:pName | stream nextPutAll: ' spec package: ''', pName, '''.', String cr]. stream nextPutAll: ' ].'. self configurationClass compile: stream contents classified: 'baselines'. ! ! !MCRepositoryInspector methodsFor: 'accessing' stamp: 'ClementBera 7/26/2013 16:50' prior: 41461346! setRepository: aRepository workingCopy: aWorkingCopy repository := aRepository. aWorkingCopy ifNotNil: [ selectedPackage := aWorkingCopy package]. self refresh! ! !Object methodsFor: 'error handling' stamp: 'ClementBera 7/26/2013 15:54' prior: 28606989! dpsTrace: reportObject Transcript myDependents ifNil: [^self]. self dpsTrace: reportObject levels: 1 withContext: thisContext " nil dpsTrace: 'sludder'. "! ! !ClassBuilder methodsFor: 'class definition' stamp: 'ClementBera 7/26/2013 16:08' prior: 19103242! name: className inEnvironment: env subclassOf: newSuper type: type instanceVariableNames: instVarString classVariableNames: classVarString poolDictionaries: poolString category: category unsafe: unsafe "Define a new class in the given environment. If unsafe is true do not run any validation checks. This facility is provided to implement important system changes." | oldClass instVars classVars copyOfOldClass copyOfOldTraitComposition copyOfOldClassTraitComposition newClass | environ := env. instVars := instVarString subStrings: ' '. classVars := (classVarString subStrings: ' ') collect: [ :x | x asSymbol ]. "Validate the proposed name" unsafe ifFalse: [ (self validateClassName: className) ifFalse: [ ^ nil ] ]. oldClass := env at: className ifAbsent: [ nil ]. oldClass isBehavior ifFalse: [ oldClass := nil ] ifTrue: [ copyOfOldClass := oldClass copy. copyOfOldClass superclass addSubclass: copyOfOldClass. copyOfOldClass ifNotNil: [ oldClass hasTraitComposition ifTrue: [ copyOfOldTraitComposition := oldClass traitComposition copyTraitExpression ]. oldClass class hasTraitComposition ifTrue: [ copyOfOldClassTraitComposition := oldClass class traitComposition copyTraitExpression ] ] ]. "Already checked in #validateClassName:" [ | newCategory oldCategory needNew force organization | unsafe ifFalse: [ "Run validation checks so we know that we have a good chance for recompilation" (self validateSuperclass: newSuper forSubclass: oldClass) ifFalse: [ ^ nil ]. (self validateInstvars: instVars from: oldClass forSuper: newSuper) ifFalse: [ ^ nil ]. (self validateClassvars: classVars from: oldClass forSuper: newSuper) ifFalse: [ ^ nil ]. (self validateSubclassFormat: type from: oldClass forSuper: newSuper extra: instVars size) ifFalse: [ ^ nil ] ]. "See if we need a new subclass" needNew := self needsSubclassOf: newSuper type: type instanceVariables: instVars from: oldClass. needNew == nil ifTrue: [ ^ nil ]. "some error" (needNew and: [ unsafe not ]) ifTrue: [ "Make sure we don't redefine any dangerous classes" (self tooDangerousClasses includes: oldClass name) ifTrue: [ self error: oldClass name , ' cannot be changed' ]. "Check if the receiver should not be redefined" (oldClass ~~ nil and: [ oldClass shouldNotBeRedefined ]) ifTrue: [ self notify: oldClass name asText allBold , ' should not be redefined. \Proceed to store over it.' withCRs ] ]. needNew ifTrue: [ "Create the new class" newClass := self newSubclassOf: newSuper type: type instanceVariables: instVars from: oldClass. newClass == nil ifTrue: [ ^ nil ]. "Some error" newClass setName: className ] ifFalse: [ "Reuse the old class" newClass := oldClass ]. "Install the class variables and pool dictionaries... " force := (newClass declare: classVarString) | (newClass sharing: poolString). "... classify ..." newCategory := category asSymbol. organization := environ ifNotNil: [ environ organization ]. oldClass ifNotNil: [ oldCategory := (organization categoryOfElement: oldClass name) asSymbol ]. organization classify: newClass name under: newCategory. newClass environment: environ. "... recompile ..." newClass := self recompile: force from: oldClass to: newClass mutate: false. "... export if not yet done ..." (environ at: newClass name ifAbsent: [ nil ]) == newClass ifFalse: [ environ at: newClass name put: newClass. Smalltalk globals flushClassNameCache ]. "... set trait composition..." copyOfOldTraitComposition ifNotNil: [ newClass setTraitComposition: copyOfOldTraitComposition ]. copyOfOldClassTraitComposition ifNotNil: [ newClass class setTraitComposition: copyOfOldClassTraitComposition ]. newClass doneCompiling. "... notify interested clients ..." oldClass ifNil: [ SystemAnnouncer uniqueInstance classAdded: newClass inCategory: newCategory. ^ newClass ]. newCategory ~= oldCategory ifTrue: [ SystemAnnouncer uniqueInstance class: newClass recategorizedFrom: oldCategory to: category ] ifFalse: [ SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass ] ] ensure: [ copyOfOldClass ifNotNil: [ copyOfOldClass superclass removeSubclass: copyOfOldClass ]. Behavior flushObsoleteSubclasses ]. ^ newClass! ! "FreeType"! "Graphics-Files"! "Kernel"! "Manifest-Core"! "Monticello"! "MonticelloGUI"! "Nautilus"! "RPackage-Core"! "RecentSubmissions"! "Unicode-Initialization"! ----End fileIn----! ----QUIT----an Array(30 July 2013 1:33:28 pm) Pharo.image priorSource: 13000514! ----STARTUP----an Array(30 July 2013 1:42:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 July 2013 1:42:21 pm) Pharo-30318.image priorSource: 13051322! ----STARTUP----an Array(31 July 2013 10:29:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/31/2013 10:26' prior: 46555246! commentForCurrentUpdate ^ '11278 Refactoring menu should not show some items for traits https://pharo.fogbugz.com/f/cases/11278'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/31/2013 10:26'! script112 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1544.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.147.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.845.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.60.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.502.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-MarcusDenker.105.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.874.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.188.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.28.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.889.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.4.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.5.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/31/2013 10:26'! update30319 "self new update30319" self withUpdateLog: '11278 Refactoring menu should not show some items for traits https://pharo.fogbugz.com/f/cases/11278'. self loadTogether: self script112 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemVersion commentStamp: '' prior: 42720698! I am responsible for maintaining what version of Pharo and the VM is running. I also track all of the update items that have been included in the image. I'm invoked at auto start to get the latest plugins, etc. Some queries are SystemVersion current major SystemVersion current minor SystemVersion current suffix SystemVersion current highestUpdate! !Class methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/30/2013 15:03'! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Inst var references...') action: [target browseInstVarRefs]; parent: #Analyze; order: 0. (aBuilder item: #'Inst var assignments...') action: [target browseInstVarDefs]; parent: #Analyze; order: 100. (aBuilder item: #'Create inst var accessors') action: [target createInstVarAccessors]; parent: #Analyze; enabledBlock: [ target selectedClass instVarNames isEmpty not ]; order: 200; withSeparatorAfter. (aBuilder item: #'Create initializer with inst vars...') action: [ target createInitializerWithInstVars ]; parent: #Analyze; order: 300; enabledBlock: [ target showInstance ]. (aBuilder item: #'Generate initialize method') keyText: 'h, i' if: Nautilus useOldStyleKeys not; keyText: 'I' if: Nautilus useOldStyleKeys; action: [ target generateInitialize ]; parent: #Analyze; order: 350. (aBuilder item: #'Force the generaton of the initialize method') keyText: 'h, k' if: Nautilus useOldStyleKeys not; keyText: 'K' if: Nautilus useOldStyleKeys; action: [ target forceGenerateInitialize ]; parent: #Analyze; order: 375; enabledBlock: [ target showInstance ]; withSeparatorAfter. (aBuilder item: #'Class var refs...') action: [target browseClassVarRefs]; parent: #Analyze; order: 400. (aBuilder item: #'Class refs...') keyText: 'b, N' if: Nautilus useOldStyleKeys not; keyText: 'N' if: Nautilus useOldStyleKeys; action: [target browseClassRefs]; parent: #Analyze; order: 500. (target selectedClass inheritsFrom: SharedPool ) ifTrue: [ (aBuilder item: #'Shared Pool Users') action: [ target systemNavigation browseSharedPoolUsersOf: target selectedClass ]; parent: #Analyze; enabledBlock: [ target enableSingleClassSelection ]; order: 700]. (aBuilder item: #'Unsent methods...') action: [target browseUnusedMethods.]; parent: #Analyze; order: 800. (aBuilder item: #'Unreferenced inst vars...') action: [target showUnreferencedInstVars.]; parent: #Analyze; order: 900. (aBuilder item: #'Unreferenced class vars...') action: [target showUnreferencedClassVars.]; parent: #Analyze; order: 1000. ! ! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:13'! instVarRefactoringSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Add') action: [ target refactor addInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeInstVarFrom: self ]; parent: #'Inst Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 600.! ! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:16'! refactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Refactoring') order: -100. (aBuilder item: #'Rename inst var') action: [ target refactor renameInstVarFrom: self ]; order: -98. (aBuilder item: #'Rename class var') action: [ target refactor renameClassVarFrom: self ]; order: -97. (aBuilder item: #'Code Rewriting') order: 0; parent: #'Refactoring'. (aBuilder item: #'Class Refactoring') order: 100; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Class Var Refactoring') order: 200; parent: #'Refactoring'. (aBuilder item: #'Inst Var Refactoring') order: 300; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 400; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 500; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 15:22'! refactoringSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rename...') keyText: 'r, c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClassWithRefactoringEngine: target selectedClass theNonMetaClass ]; parent: #'Class Refactoring'; order: 0. (aBuilder item: #'Remove...') action: [ target removeClassWithRefactoringEngine: target selectedClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); parent: #'Class Refactoring'; order: 100; withSeparatorAfter. (aBuilder item: #'Generate Accessors') keyText: 'h, a' if: Nautilus useOldStyleKeys not; action: [ target refactor generateAccessors ]; parent: #'Class Refactoring'; order: 200. (aBuilder item: #'Generate Superclass...') action: [ target refactor generateSuperClass ]; parent: #'Class Refactoring'; order: 300. (aBuilder item: #'Generate Subclass...') action: [ target refactor generateSubclass ]; parent: #'Class Refactoring'; order: 400. (aBuilder item: #'Realize') action: [ target refactor realizeClass ]; parent: #'Class Refactoring'; order: 500. (aBuilder item: #'Split') action: [ target refactor splitClass: target selectedClass ]; parent: #'Class Refactoring'; order: 600.! ! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:09'! varRefactoringSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Add') action: [ target refactor addClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeClassVarFrom: self ]; parent: #'Class Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 600.! ! !Trait methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/30/2013 15:59'! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Generate initialize method') keyText: 'h, i' if: Nautilus useOldStyleKeys not; keyText: 'I' if: Nautilus useOldStyleKeys; action: [ target generateInitialize ]; parent: #Analyze; order: 350. (aBuilder item: #'Force the generaton of the initialize method') keyText: 'h, k' if: Nautilus useOldStyleKeys not; keyText: 'K' if: Nautilus useOldStyleKeys; action: [ target forceGenerateInitialize ]; parent: #Analyze; order: 375; enabledBlock: [ target showInstance ]; withSeparatorAfter. (target selectedClass inheritsFrom: SharedPool ) ifTrue: [ (aBuilder item: #'Shared Pool Users') action: [ target systemNavigation browseSharedPoolUsersOf: target selectedClass ]; parent: #Analyze; enabledBlock: [ target enableSingleClassSelection ]; order: 700]. (aBuilder item: #'Unsent methods...') action: [target browseUnusedMethods.]; parent: #Analyze; order: 800. ! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:13'! instVarRefactoringSubmenu: aBuilder ! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:16'! refactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Refactoring') order: -100. (aBuilder item: #'Code Rewriting') order: 0; parent: #'Refactoring'. (aBuilder item: #'Trait Refactoring') order: 100; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 400; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 500; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:00'! refactoringSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rename...') keyText: 'r, c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClassWithRefactoringEngine: target selectedClass theNonMetaClass ]; parent: #'Trait Refactoring'; order: 0. (aBuilder item: #'Remove...') action: [ target removeClassWithRefactoringEngine: target selectedClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); parent: #'Trait Refactoring'; order: 100; withSeparatorAfter. (aBuilder item: #'Realize') action: [ target refactor realizeClass ]; parent: #'Trait Refactoring'; order: 500.! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:10'! varRefactoringSubMenu: aBuilder ! ! !TClass methodsFor: '*Nautilus' stamp: 'SebastianTleye 7/30/2013 14:59'! buildAnalyzeSubMenu: aBuilder self explicitRequirement. ! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:13'! instVarRefactoringSubmenu: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 13:31'! refactoringMenu: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 13:38'! refactoringSubmenu: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/30/2013 16:10'! varRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/30/2013 15:22' prior: 37901194! classRefactoringSubmenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass refactoringSubmenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/30/2013 16:10' prior: 37902678! classVarRefactoringSubmenu: aBuilder | target selectedClass | target := aBuilder model. selectedClass := target selectedClass. selectedClass ifNil: [ ^ target ]. selectedClass varRefactoringSubMenu: aBuilder. ! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/30/2013 16:12' prior: 37904080! instVarRefactoringSubmenu: aBuilder | target selectedClass | target := aBuilder model. selectedClass := target selectedClass. selectedClass ifNil: [^target]. selectedClass instVarRefactoringSubmenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/30/2013 13:35' prior: 28265176! refactoringClassMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass refactoringMenu: aBuilder.! ! !SystemVersion commentStamp: '' prior: 46616627! I am responsible for maintaining what version of Pharo and the VM is running. I also track all of the update items that have been included in the image. I'm invoked at auto start to get the latest plugins, etc. Some queries are SystemVersion current major SystemVersion current minor SystemVersion current suffix SystemVersion current highestUpdate! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'SebastianTleye 7/30/2013 15:04' prior: 43385294! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass buildAnalyzeSubMenu: aBuilder.! ! "Nautilus"! "NautilusRefactoring"! ----End fileIn----! ----QUIT----an Array(31 July 2013 10:29:26 am) Pharo.image priorSource: 13051521! ----STARTUP----an Array(31 July 2013 10:39:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 July 2013 10:39:21 am) Pharo-30319.image priorSource: 13075570! ----STARTUP----an Array(31 July 2013 3:16:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/31/2013 15:08' prior: 46606254! commentForCurrentUpdate ^ '11281 Move references to DependentField to proper classes https://pharo.fogbugz.com/f/cases/11281'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/31/2013 15:08'! script113 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1544.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.147.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.845.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.62.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.502.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-MarcusDenker.105.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.876.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.188.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.28.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.891.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/31/2013 15:09'! update30320 "self new update30320" self withUpdateLog: '11281 Move references to DependentField to proper classes https://pharo.fogbugz.com/f/cases/11281'. self loadTogether: self script113 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemWindow methodsFor: 'open/close' stamp: 'BenjaminVanRyseghem 7/31/2013 14:18' prior: 51760054! delete "Should activate window before asking model if okToChange since likely that a confirmation dialog will be requested. Don't if not owned by the world though." | thisWorld animateClose announcement | self mustNotClose ifTrue: [^ self]. (self owner notNil and: [self owner isWorldMorph]) ifTrue: [self activate]. model ifNotNil: [ model okToChange ifFalse: [ ^ self ] ]. animateClose := (self visible and: [self world notNil and: [ self theme settings animationSettings useAnimation and: [ self theme settings animationSettings animateClosing]]]). self removePaneSplitters. "in case we add some panes and reopen!!" thisWorld := self world. self isFlexed ifTrue: [owner delete] ifFalse: [super delete]. model ifNotNil: [ model windowIsClosing; release ]. model := nil. animateClose ifTrue: [self animateClose]. SystemWindow noteTopWindowIn: thisWorld. announcement := (WindowClosed new window: self; yourself). self announce: announcement. World announcer announce: announcement ! ! !TextStyle class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/31/2013 14:15'! removeDependent: anObject self notifier removeDependent: anObject! ! !StandardWindow methodsFor: 'open/close' stamp: 'BenjaminVanRyseghem 7/31/2013 14:16' prior: 39949602! delete "If fullscreen remove the owner too." self mustNotClose ifTrue: [^ self]. self model ifNotNil: [ self model okToChange ifFalse: [ ^ self ]. self model okToClose ifFalse: [ ^ self ] ]. self isFullscreen ifTrue: [self owner delete] ifFalse: [super delete]! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 14:10'! actAsExecutor "Prepare the receiver to act as executor for any resources associated with it" self breakDependents! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 14:09'! breakDependents self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super breakDependents ] on: Error do: []. self announcer subscriptions removeAll! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 13:53'! canDiscardEdits "Answer true if none of the views on this model has unaccepted edits that matter." self dependents do: [:each | each canDiscardEdits ifFalse: [^ false]] without: self. ^ true! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 13:52'! dependents "Answer a collection of objects that are 'dependent' on the receiver; that is, all objects that should be notified if the receiver changes." ^ self myDependents ifNil: [#()]! ! !Morph methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 7/29/2013 14:17' prior: 26600525! myDependents "Improved performance dependents." ^ (self valueOfProperty: #myDependents) ifNil: [ #() ]! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 13:53'! okToChange "Allows a controller to ask this of any model" ^ true! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 14:14' prior: 46286048! removeDependent: anObject self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super removeDependent: anObject ] on: Error do: []. self announcer unsubscribe: anObject! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 13:53'! update: anAspect with: anObject "Receive a change notice from an object of whom the receiver is a dependent. The default behavior is to call update:, which by default does nothing; a subclass might want to change itself in some way." ^ self update: anAspect! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 13:54'! windowIsClosing "This message is used to inform a models that its window is closing. Most models do nothing, but some, such as the Debugger, must do some cleanup. Note that this mechanism must be used with care by models that support multiple views, since one view may be closed while others left open." ! ! !Model methodsFor: 'dependents-private' stamp: 'BenjaminVanRyseghem 7/31/2013 14:12'! actAsExecutor "Prepare the receiver to act as executor for any resources associated with it" self breakDependents! ! !Model methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/29/2013 14:12'! addDependent: anObject "Make the given object one of the receiver's dependents." (self dependents includes: anObject) ifFalse: [self myDependents: (self dependents copyWithDependent: anObject)]. ^ anObject! ! !Model methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/29/2013 14:24'! breakDependents "Remove all of the receiver's dependents." self myDependents: nil! ! !Model methodsFor: '*UI-Basic-edits' stamp: 'BenjaminVanRyseghem 7/29/2013 14:22' prior: 26542910! canDiscardEdits "Answer true if none of the views on this model has unaccepted edits that matter." dependents ifNil: [ ^ true ]. self dependents do: [:each | each canDiscardEdits ifFalse: [ ^ false ] ] without: self. ^ true! ! !Model methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/29/2013 14:21'! dependents "Answer a collection of objects that are 'dependent' on the receiver; that is, all objects that should be notified if the receiver changes." ^ self myDependents ifNil: [ #() ]! ! !Model methodsFor: 'dependents-private' stamp: 'BenjaminVanRyseghem 7/29/2013 14:16' prior: 26545289! myDependents ^ dependents! ! !Model methodsFor: 'dependents-private' stamp: 'BenjaminVanRyseghem 7/29/2013 14:07' prior: 26545382! myDependents: aCollectionOrNil dependents := aCollectionOrNil! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/29/2013 14:27'! okToChange "Allows a controller to ask this of any model" ^ true! ! !Model methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/29/2013 14:21'! removeDependent: anObject "Remove the given object as one of the receiver's dependents." | newDependents | newDependents := self dependents reject: [:each | each == anObject]. self myDependents: (newDependents isEmpty ifFalse: [ newDependents ]). ^ anObject! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/29/2013 14:28'! update: anAspect with: anObject "Receive a change notice from an object of whom the receiver is a dependent. The default behavior is to call update:, which by default does nothing; a subclass might want to change itself in some way." ^ self update: anAspect! ! !Model methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/29/2013 14:28'! windowIsClosing "This message is used to inform a models that its window is closing. Most models do nothing, but some, such as the Debugger, must do some cleanup. Note that this mechanism must be used with care by models that support multiple views, since one view may be closed while others left open." ! ! "Morphic-Base"! "Polymorph-Widgets"! "System-Support"! "Text-Core"! "UI"! ----End fileIn----! ----QUIT----an Array(31 July 2013 3:16:29 pm) Pharo.image priorSource: 13075771! ----STARTUP----an Array(31 July 2013 3:25:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 July 2013 3:25:22 pm) Pharo-30320.image priorSource: 13093438! ----STARTUP----an Array(31 July 2013 3:46:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 7/31/2013 15:44' prior: 46630504! commentForCurrentUpdate ^ '11284 Split the kernel fix in two for integration https://pharo.fogbugz.com/f/cases/11284'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 7/31/2013 15:44'! script114 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.138.mcz Collections-Strings-MarcusDenker.271.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1548.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-MarcusDenker.154.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.147.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.845.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.62.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-MarcusDenker.32.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-MarcusDenker.51.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.502.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-MarcusDenker.105.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-MarcusDenker.22.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-MarcusDenker.379.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.876.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.53.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-MarcusDenker.188.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-MarcusDenker.145.mcz Spec-Debugger-MarcusDenker.104.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-MarcusDenker.51.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.120.mcz Spec-Widgets-MarcusDenker.217.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-MarcusDenker.47.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.28.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-StephaneDucasse.10.mcz System-Support-MarcusDenker.891.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.22.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.600.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1199.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 7/31/2013 15:44'! update30321 "self new update30321" self withUpdateLog: '11284 Split the kernel fix in two for integration https://pharo.fogbugz.com/f/cases/11284'. self loadTogether: self script114 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Object methodsFor: 'finalization' stamp: 'BenjaminVanRyseghem 7/31/2013 15:40' prior: 28619519! actAsExecutor "Do nothing"! ! "Kernel"! ----End fileIn----! ----QUIT----an Array(31 July 2013 3:46:28 pm) Pharo.image priorSource: 13093637! ----STARTUP----an Array(31 July 2013 3:55:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 July 2013 3:55:16 pm) Pharo-30321.image priorSource: 13104386! ----STARTUP----an Array(2 August 2013 4:12:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(2 August 2013 4:12:20 pm) Pharo.image priorSource: 13104585! ----STARTUP----an Array(2 August 2013 4:21:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 August 2013 4:21:21 pm) Pharo-30321.image priorSource: 13104795! ----STARTUP----an Array(5 August 2013 11:55:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/5/2013 11:50' prior: 46648369! commentForCurrentUpdate ^ '11245 Debugger show incorrect variables values https://pharo.fogbugz.com/f/cases/11245 11296 ByteString>>convertFromCompoundText does not work and has no sender. https://pharo.fogbugz.com/f/cases/11296 11299 on:do: for keyMapping should be renamed into something else https://pharo.fogbugz.com/f/cases/11299 11300 In Tango PoolVariable should not be red but the same color as classVariable https://pharo.fogbugz.com/f/cases/11300 6933 SoundSystem cleanup https://pharo.fogbugz.com/f/cases/6933 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/5/2013 11:50'! script115 ^ 'AST-Core-MarcusDenker.180.mcz AST-Interpreter-Core-MarcusDenker.105.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-StephaneDucasse.12.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-CamilloBruni.3.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-CamilloBruni.2.mcz AsmJit-x86-MarcusDenker.5.mcz Athens-Balloon-MarcusDenker.11.mcz Athens-Cairo-MarcusDenker.45.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-IgorStasenko.22.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.216.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.147.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.140.mcz Collections-Strings-EstebanLorenzano.273.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-MarcusDenker.160.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-MarcusDenker.617.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.508.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.104.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-MarcusDenker.196.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-MarcusDenker.104.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.45.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1548.mcz KernelTests-MarcusDenker.538.mcz KeyChain-MarcusDenker.45.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.147.mcz Manifest-CriticBrowser-MarcusDenker.99.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-MarcusDenker.498.mcz Metacello-MC-MarcusDenker.668.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.845.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.62.mcz Morphic-Examples-MarcusDenker.4.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-MarcusDenker.36.mcz NativeBoost-Core-EstebanLorenzano.131.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.35.mcz Nautilus-MarcusDenker.502.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-EstebanLorenzano.107.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-MarcusDenker.103.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.22.mcz Polymorph-Tools-Diff-MarcusDenker.96.mcz Polymorph-Widgets-MarcusDenker.876.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.166.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.48.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-MarcusDenker.69.mcz Refactoring-Tests-Critics-MarcusDenker.12.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-MarcusDenker.22.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-MarcusDenker.128.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.85.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.10.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.190.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.366.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-MarcusDenker.100.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-EstebanLorenzano.106.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-EstebanLorenzano.53.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.122.mcz Spec-Widgets-EstebanLorenzano.219.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.893.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.602.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.2.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1201.mcz ToolsTest-MarcusDenker.denker.51.mcz Traits-MarcusDenker.552.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/5/2013 11:51'! update30322 "self new update30322" self withUpdateLog: '11245 Debugger show incorrect variables values https://pharo.fogbugz.com/f/cases/11245 11296 ByteString>>convertFromCompoundText does not work and has no sender. https://pharo.fogbugz.com/f/cases/11296 11299 on:do: for keyMapping should be renamed into something else https://pharo.fogbugz.com/f/cases/11299 11300 In Tango PoolVariable should not be red but the same color as classVariable https://pharo.fogbugz.com/f/cases/11300 6933 SoundSystem cleanup https://pharo.fogbugz.com/f/cases/6933 '. self loadTogether: self script115 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SoundService commentStamp: '' prior: 42694144! This is class is deprecated.! !ContextTempEyeElement commentStamp: '' prior: 42207904! I am an eye element for temporaries in context! !SoundSystem commentStamp: '' prior: 0! This is the base class for a sound system. A sound system offers a small protocol for playing sounds and making beeps. While SoundSystem is an abstract class, it acts as a facade to the actual SoundSystem. When the SoundPackage is not loaded, SoundSystem current refers to DummySoundSystem. SoundSystem current gives access to the currently installed SoundSystem. When no SoundSystem is available, a dummy one is installed as current. SoundSystem soundEnabled: true. SoundSystem current beep SoundSystem current: BaseSoundSystem new ! !DummySoundSystem commentStamp: '' prior: 42240231! A BeepingSoundSystem is a simple sound system just doing beep and niling everything else. ! !SoundService commentStamp: '' prior: 46671005! This is class is deprecated.! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 11:26' prior: 50620894! soundEnabled self deprecated: 'Use SoundSystem current soundEnabled' on: '$ August 2013' in: 'Pharo30'. ^ SoundSystem current soundEnabled! ! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 11:26' prior: 50621024! soundEnabled: aBoolean self deprecated: 'Use SoundSystem current soundEnabled: aBoolean' on: '$ August 2013' in: 'Pharo30'. SoundSystem current soundEnabled: aBoolean! ! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 12:03' prior: 50621174! toggleSoundEnabling self deprecated: 'Use SoundSystem current instaed' on: '$ August 2013' in: 'Pharo30'. self soundEnabled: self soundEnabled not! ! !Spotlight methodsFor: 'initialize' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 37832225! initialize super initialize. self beSticky. self layoutPolicy: TableLayout new; listDirection: #leftToRight; wrapCentering: #center; hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: self defaultLayoutInset ; cellInset: 5. self addMorphBack: Smalltalk ui icons smallFindIcon asMorph. search := self createSearchMorph crAction: [ :text | self accepted ]; yourself. self addMorphBack: search. self bindKeyCombination: Character escape toAction: [ self close ].! ! !ContextTempEyeElement commentStamp: '' prior: 46671104! I am an eye element for temporaries in context! !ContextTempEyeElement class methodsFor: 'as yet unclassified' stamp: 'ClementBera 8/5/2013 10:45'! host: anObject tempName: aString tempIndex: int ^ (self host: anObject) tempName: aString; tempIndex: int; yourself! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/5/2013 10:45' prior: 36472510! accessorCode ^ '(self namedTempAt: ', self tempIndex printString, ')'! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/5/2013 10:46' prior: 36472777! save: aValue self host namedTempAt: self tempIndex put: aValue! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/5/2013 10:45'! tempIndex ^ tempIndex! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/5/2013 10:45'! tempIndex: anObject tempIndex := anObject! ! !ContextTempEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/5/2013 10:46' prior: 36473164! value ^ self host namedTempAt: self tempIndex! ! !ButtonModel methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 45570479! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !ClassQueryTest methodsFor: 'dependencies' stamp: 'StephaneDucasse 8/4/2013 11:20' prior: 40111966! testReferencedClasses "self debug: #testReferencedClasses" | refs | refs := Metaclass referencedClasses. self assert: (refs includes: SystemAnnouncer). refs := self class referencedClasses. self assert: (refs includesAllOf: {SystemAnnouncer . Metaclass})! ! !ListComposableModel methodsFor: 'initialize' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 34016696! initialize super initialize. selectionHolder := SelectionValueHolder new. listHolder := Array new asValueHolder. sortingBlockHolder := self defaultSortingBlock asValueHolder. filteringBlockHolder := self defaultFilteringBlock asValueHolder. wrapBlockHolder := [ :object | object asStringOrText ] asValueHolder. menuHolder := [ :menu :shifted | nil ] asValueHolder. multiSelectionHolder := IdentityDictionary new asValueHolder. multiSelection := false asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !DigitalSignatureAlgorithm methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 11:19' prior: 46008075! initRandomNonInteractively "This logic only works when the sound package is loaded and in the future we should propose a simple random generator to be for the DummySoundSystem." [self initRandom: (SoundSystem current randomBitsFromSoundInput: 512)] ifError: [self initRandomFromString: Time millisecondClockValue printString, Date today printString, Smalltalk os platformName printString].! ! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'ClementBera 8/5/2013 10:44' prior: 36562498! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'all temp vars' value: [ String streamContents: [ :s | self object tempNames withIndexDo: [ :name :index | s nextPutAll: name ; nextPut: Character space ; nextPut: $: ; nextPut: Character space ; nextPutAll: (self object namedTempAt: index) asString ; nextPut: Character lf ] ] ]).! ! !UUIDGenerator methodsFor: 'random seed' stamp: 'StephaneDucasse 8/4/2013 11:18' prior: 54451698! makeSeedFromSound | answer | "This logic only works when the sound package is loaded and in the future we should propose a simple random generator to be for the DummySoundSystem." [answer := SoundSystem current randomBitsFromSoundInput: 32 ] ifError: [answer := nil]. ^answer! ! !LanguageEnvironment class methodsFor: 'public query' stamp: 'StephaneDucasse 8/2/2013 22:36' prior: 24264584! defaultSystemConverter SystemConverter ifNil: [ SystemConverter := self currentPlatform class systemConverterClass new ]. ^ SystemConverter! ! !EyeContextInspector methodsFor: 'list' stamp: 'ClementBera 8/5/2013 10:44' prior: 41603629! addVariableFields: elements self tempNames withIndexDo: [ :name :index | elements add: (ContextTempEyeElement host: self object tempName: name tempIndex: index) ]! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18909373! initializeTextArea textArea enabled: false; "make sure we can cycle over the text field" bindKeyCombination: Character tab shift toAction: [ self giveFocusToNextFrom: textArea ]; bindKeyCombination: Character tab toAction: [ self giveFocusToPreviousFrom: textArea ].! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18909694! initializeWidgets self instantiateModels: #( cancelButton ButtonModel acceptButton ButtonModel pickList PickListModel textArea TextModel ). self initializeAcceptButton. self initializeCancelButton. self initializePickList. self initializeTextArea. self setFocus. self bindKeyCombination: $s command toAction: [ self accept ]; bindKeyCombination: Character escape toAction: [ self cancel ]! ! !MessageBrowser methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 25575366! registerListShortcutsFor: aWidget aWidget bindKeyCombination: $b command toAction: [ self browseMethod ]. aWidget bindKeyCombination: $i command toAction: [ self inspectMethod ]. aWidget bindKeyCombination: $m command toAction: [ self browseMessages ]. aWidget bindKeyCombination: $n command toAction: [ self browseSendersOfMessage ]. aWidget bindKeyCombination: $n shift command toAction: [ self browseClassRefs ]. aWidget bindKeyCombination: $v command toAction: [ self browseVersions ]. aWidget bindKeyCombination: $x command toAction: [ self removeMethods ].! ! !SpecDebugger methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 45975672! setStackShortcuts "initialize the debuggers' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | self stack bindKeyCombination: key toAction: value ] ! ! !SmalltalkImage methodsFor: 'PharoKernel-private' stamp: 'StephaneDucasse 8/4/2013 12:04' prior: 39031134! privShrinkingProcessWith: additionalPackageNames [ | | 10 timesRepeat: [ (Delay forMilliseconds: 100) wait. Processor yield ]. Author fullName: 'Mr.Shrinker'. self privCleanMonticello. UIManager default: DummyUIManager new. UIManager default progressBarEnabled: false. self privCleanProcesses. self privCleanGlobals. 5 timesRepeat: [Smalltalk garbageCollect]. (Smalltalk classNamed: #MCDataStream) initialize. Beeper instVarNamed: #default put: nil. Smalltalk cleanOutUndeclared. 5 timesRepeat: [Smalltalk garbageCollect]. Author reset. (Smalltalk classNamed: #KMPragmaKeymapBuilder) release. "self privShrinkUnicodeTables." Display newDepth: 1. self privCleanStartUpList. self privCleanShutDownList. "CommandLine removeRegistrationNamed: #BasicCodeLoader. SimpleCodeLoader register. " "move class Model to different category" Object subclass: #Model instanceVariableNames: 'dependents' classVariableNames: '' poolDictionaries: '' category: 'Kernel-Objects'. self privCleanTextConstants. ThreadSafeTranscript install. self privCleanUnloadMethods. (Smalltalk classNamed: #RPackageOrganizer) unregisterInterestToSystemAnnouncement. SystemNavigation new removeAllButPackages: self kernelPackageNames, additionalPackageNames. Smalltalk flushClassNameCache. 3 timesRepeat: [ Smalltalk garbageCollect. Symbol compactSymbolTable.]. Undeclared removeUnreferencedKeys. self privRecompileAll. self privCleanChangeSets. FileServices removeObsolete. Object flushEvents. (Smalltalk classNamed: #MCDataStream) initialize. Locale classPool at: #LocaleChangeListeners put: nil. SmalltalkImage classPool at: #Tools put: nil. Behavior flushObsoleteSubclasses. Smalltalk flushClassNameCache. Smalltalk organization removeEmptyCategories. WeakArray restartFinalizationProcess. SmalltalkImage current fixObsoleteReferences. "UIManager default progressBarEnabled: true." "Smalltalk condenseChanges." Smalltalk saveImageInNewContext. ] ifError: [:e | | rep | rep := FileStream forceNewFileNamed: 'PharoDebug.log'. rep nextPutAll: 'PharoKernel shrinking report'; cr. rep nextPutAll: 'Error:'; cr. rep nextPutAll: e asString; cr. rep nextPutAll: thisContext stack size asString. thisContext stack copy withIndexDo: [:stck :i | [ rep nextPutAll: i asString; space; nextPutAll: stck asString; cr] ifError: []]. rep close. Smalltalk exitFailure ] ! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 36504746! initializeShortcuts self bindKeyCombination: $[ command toAction: [ self inspectPrevious ]. self bindKeyCombination: $] command toAction: [ self inspectNext ]. self bindKeyCombination: $d command toAction: [ self dive ].! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 8/5/2013 10:21'! bindKeyCombination: aShortcut toAction: anAction self kmDispatcher bindKeyCombination: aShortcut asKeyCombination toAction: anAction! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 8/5/2013 10:27' prior: 33984168! on: aShortcut do: anAction ^ self bindKeyCombination: aShortcut toAction: anAction ! ! !KMDispatcher methodsFor: 'building' stamp: 'GuillermoPolito 8/5/2013 10:21'! bindKeyCombination: aShortcut toAction: anAction self directKeymaps addKeymapEntry: (KMKeymap shortcut: aShortcut action: anAction)! ! !KMDispatcher methodsFor: 'building' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 24135940! on: aShortcut do: anAction Transcript show: 'You have an on:do: instead of a onKey: do: in ',thisContext sender method printString; cr. self deprecated: 'Use onKey: do: instead' on: '4 August 2013' in: 'Pharo30'. ^ self bindKeyCombination: aShortcut toAction: anAction! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'ClementBera 8/5/2013 10:47' prior: 34911210! outerOffsetTo: aScope "return how many scopes up from me aScope is. We ignore optimized scopes so the resulting offset maps to contexts" | offset scope | offset := 0. scope := self. [scope == aScope] whileFalse: [ scope isOptimizedBlockScope ifTrue: [scope := scope outerNotOptimizedScope] ifFalse: [ offset := offset + 1. scope isInstanceScope ifTrue: [^0]. scope := scope outerScope ] ]. ^offset. ! ! !ByteString methodsFor: 'converting' stamp: 'StephaneDucasse 8/2/2013 22:39' prior: 18601158! convertFromSystemString | readStream | readStream := self readStream. ^ self class new: self size streamContents: [ :writeStream | | converter | converter := LanguageEnvironment defaultSystemConverter. [readStream atEnd] whileFalse: [ writeStream nextPut: (converter nextFromStream: readStream)]]. ! ! !PolymorphSystemSettings class methodsFor: 'sound' stamp: 'StephaneDucasse 8/3/2013 22:55' prior: 29824164! soundSettingsOn: aBuilder (aBuilder setting: #soundEnabled) label: 'Sound'; target: SoundSystem; noOrdering; with: [ (aBuilder setting: #useThemeSounds) label: 'Use theme sounds'; target: SoundTheme; with: [ (aBuilder pickOne: #soundThemeClass) label: 'Sound theme' translated; target: self; domainValues: self soundThemeClassChoices]]! ! !SHTextStylerST80 class methodsFor: 'style table' stamp: 'Anonymous 8/4/2013 16:46' prior: 36196625! tangoStyleTable "color can be a valid argument to Color class>>colorFrom: , or nil to use the editor text color. Multiple emphases can be specified using an array e.g. #(bold italic). If emphasis is not specified, #normal will be used. if pixel height is not specified , then the editor font size will be used. This is a syntax coloring scheme based on the tango desktop icon scheme: http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines " ^ #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment '888a85') (unfinishedComment (red muchDarker)) (#'$' 'ce5c00') (character 'ce5c00') (integer '8f5902') (number '8f5902') (#- '8f5902') (symbol 'c4a000') (stringSymbol 'c4a000') (literalArray black) (string 'ce5c00') (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal '8F5902') (keyword (black)) (binary (black)) (unary (black)) (#true '8F5902') (#false '8F5902') (#nil '8F5902') (#self '4d9a06') (#super '4d9a06') (#thisContext '4d9a06') (#return black bold) (patternArg '2e3426' italic) (methodArg '555753' italic) (blockPatternArg '888a85' bold) (blockArg '555753' italic) (argument '555753' italic) (blockTempVar '555753' italic) (blockPatternTempVar '888a85' italic) (instVar '204a87') (workspaceVar '204a87') (tempVar '555753' italic) (patternTempVar '888a85' italic) (poolConstant 'ad7fa8' bold) (classVar 'ad7fa8' bold) (globalVar '5c3566' bold) (incompleteIdentifier blue italic) (incompleteKeyword blue italic) (incompleteBinary blue italic) (incompleteUnary blue italic) (undefinedIdentifier red) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (methodTempBar black) (blockTempBar black) (blockArgsBar black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold))! ! !TabManager methodsFor: 'initialize' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 39792486! registerShortcuts self bindKeyCombination: $] command shift | $] control shift toAction: [ self selectNext ]; bindKeyCombination: $[ command shift | $[ control shift toAction: [ self selectPrevious ]; bindKeyCombination: $w command | $w control toAction: [ self deleteSelectedTabs ]; bindKeyCombination: $w command shift | $w control shift toAction: [ self closeAllTabs ]. 1 to: 9 do: [ :index | self bindKeyCombination: index asString first command | index asString first control toAction: [ self selectTabAt: index ] ]. self bindKeyCombination: $0 command | $0 control toAction: [ self selectLastTab ]! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 36493207! initializeShortcuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | list bindKeyCombination: key toAction: value ] ! ! !SoundSystem commentStamp: '' prior: 46671204! This is the base class for a sound system. A sound system offers a small protocol for playing sounds and making beeps. While SoundSystem is an abstract class, it acts as a facade to the actual SoundSystem. When the SoundPackage is not loaded, SoundSystem current refers to DummySoundSystem. SoundSystem current gives access to the currently installed SoundSystem. When no SoundSystem is available, a dummy one is installed as current. SoundSystem soundEnabled: true. SoundSystem current beep SoundSystem current: BaseSoundSystem new ! !DummySoundSystem commentStamp: '' prior: 46671821! A BeepingSoundSystem is a simple sound system just doing beep and niling everything else. ! !DummySoundSystem methodsFor: 'beep' stamp: 'StephaneDucasse 8/3/2013 22:48' prior: 21024540! beep "Make a primitive beep if possible." self soundEnabled ifTrue: [ self beepPrimitive ]! ! !DummySoundSystem methodsFor: 'private' stamp: 'StephaneDucasse 8/3/2013 22:22'! beepPrimitive "Make a primitive beep. Not to be called directly. It is much better to use SoundSystem current beep since this method does not if sound is enabled" self primitiveFailed! ! !DummySoundSystem methodsFor: 'playing' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21024667! playSampledSound: samples rate: rate "Do nothing." ! ! !DummySoundSystem methodsFor: 'playing' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21024794! playSoundNamed: soundName "Do nothing."! ! !DummySoundSystem methodsFor: 'playing' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21024908! playSoundNamed: soundName ifAbsentReadFrom: aifFileName "Do nothing."! ! !DummySoundSystem methodsFor: 'playing' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21025051! playSoundNamedOrBeep: soundName "There is no sound support, so we make the beep." self beep! ! !DummySoundSystem methodsFor: 'misc' stamp: 'StephaneDucasse 8/4/2013 11:21' prior: 21024059! randomBitsFromSoundInput: bitCount "I'm not sure what the right thing to do here is." self error: 'Can not provide random data.' "in the future we should propose a simple random generator to be for the DummySoundSystem."! ! !DummySoundSystem methodsFor: 'misc' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21024263! sampledSoundChoices "No choices other than this." ^ #('silence')! ! !DummySoundSystem methodsFor: 'query' stamp: 'StephaneDucasse 8/3/2013 22:22' prior: 21024401! soundNamed: soundName "There are no sounds to look up." ^ nil! ! !SoundSystem class methodsFor: 'current ' stamp: 'StephaneDucasse 8/4/2013 13:42'! current ^ Current ifNil: [ Current := DummySoundSystem new ]! ! !SoundSystem class methodsFor: 'current ' stamp: 'StephaneDucasse 8/3/2013 21:28'! current: aSoundSystem Current deactivate. Current := aSoundSystem. Current activate.! ! !SoundSystem class methodsFor: 'current ' stamp: 'StephaneDucasse 8/3/2013 22:54'! resetSoundSystem Current := nil! ! !SoundSystem class methodsFor: 'setting' stamp: 'StephaneDucasse 8/3/2013 21:31'! soundEnabled ^ SoundEnabled ifNil: [SoundEnabled := false]! ! !SoundSystem class methodsFor: 'setting' stamp: 'StephaneDucasse 8/3/2013 21:31'! soundEnabled: aBoolean SoundEnabled := aBoolean! ! !SoundSystem class methodsFor: 'setting' stamp: 'StephaneDucasse 8/3/2013 21:31'! soundQuickStart ^ SoundQuickStart ifNil: [SoundQuickStart := false]! ! !SoundSystem class methodsFor: 'setting' stamp: 'StephaneDucasse 8/3/2013 21:31'! soundQuickStart: aBoolean SoundQuickStart := aBoolean! ! !SoundSystem methodsFor: 'activation hooks' stamp: 'StephaneDucasse 8/3/2013 21:30'! activate "Hook for possible specialization when activating a sound system"! ! !SoundSystem methodsFor: 'beep' stamp: 'StephaneDucasse 8/3/2013 22:11'! beep "Make a primitive beep." self subclassResponsibility! ! !SoundSystem methodsFor: 'activation hooks' stamp: 'StephaneDucasse 8/3/2013 21:30'! deactivate "Hook for possible specialization when activating a sound system"! ! !SoundSystem methodsFor: 'sounds' stamp: 'StephaneDucasse 8/3/2013 22:10'! playSampledSound: samples rate: rate self subclassResponsibility! ! !SoundSystem methodsFor: 'sounds' stamp: 'StephaneDucasse 8/3/2013 22:10'! playSoundNamed: soundName self subclassResponsibility! ! !SoundSystem methodsFor: 'sounds' stamp: 'StephaneDucasse 8/3/2013 22:10'! playSoundNamed: soundName ifAbsentReadFrom: aifFileName self subclassResponsibility! ! !SoundSystem methodsFor: 'sounds' stamp: 'StephaneDucasse 8/3/2013 22:10'! playSoundNamedOrBeep: soundName self subclassResponsibility! ! !SoundSystem methodsFor: 'to deprecate' stamp: 'StephaneDucasse 8/3/2013 22:10'! randomBitsFromSoundInput: bitCount self subclassResponsibility! ! !SoundSystem methodsFor: 'to deprecate' stamp: 'StephaneDucasse 8/3/2013 22:10'! sampledSoundChoices self subclassResponsibility! ! !SoundSystem methodsFor: 'activation hooks' stamp: 'StephaneDucasse 8/3/2013 22:09'! shutDown "by default do nothing"! ! !SoundSystem methodsFor: 'accessing' stamp: 'StephaneDucasse 8/3/2013 22:39'! soundEnabled ^ self class soundEnabled! ! !SoundSystem methodsFor: 'query' stamp: 'StephaneDucasse 8/3/2013 22:09'! soundNamed: soundName self subclassResponsibility! ! !ChangeSorterApplication methodsFor: 'protocol' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18886493! changesModelOn: aShortcut do: aBlock changesListModel bindKeyCombination: aShortcut toAction: aBlock! ! !ChangeSorterApplication methodsFor: 'protocol' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18886776! classesOn: aShortcut do: aBlock classesListModel bindKeyCombination: aShortcut toAction: aBlock! ! !ChangeSorterApplication methodsFor: 'protocol' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18887141! methodsOn: aShortcut do: aBlock methodsListModel bindKeyCombination: aShortcut toAction: aBlock! ! !ChangeSorterApplication methodsFor: 'shortcuts' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18891921! registerChangeSetShortcuts: aWidget aWidget bindKeyCombination: $b command toAction: [ self selectedChangeSet ifNotNil:[ self browseChangeSet ]]. aWidget bindKeyCombination: $b shift command toAction: [ self selectedChangeSet ifNotNil:[ self openChangeSetBrowser ]]. aWidget bindKeyCombination: $m command toAction: [ self selectedChangeSet ifNotNil:[ self setCurrentChangeSet ]]. aWidget bindKeyCombination: $n command toAction: [ self selectedChangeSet ifNotNil:[ self newSet ]]. aWidget bindKeyCombination: $o command toAction: [ self selectedChangeSet ifNotNil:[ self fileOut ]]. aWidget bindKeyCombination: $r command toAction: [ self selectedChangeSet ifNotNil:[ self rename ]]. aWidget bindKeyCombination: $p command toAction: [ self selectedChangeSet ifNotNil:[ self addPreamble ]]. aWidget bindKeyCombination: $x command toAction: [ self selectedChangeSet ifNotNil:[ self remove ]]. aWidget bindKeyCombination: $f command toAction: [ self findChangeSet ]. ! ! !ChangeSorterApplication methodsFor: 'shortcuts' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18892801! registerClassShortcuts: aWidget aWidget bindKeyCombination: $b command toAction: [ self selectedClass ifNotNil:[ self browseMethodFull ]]. aWidget bindKeyCombination: $d command toAction: [ self selectedClass ifNotNil:[ self forgetClass ]]. aWidget bindKeyCombination: $x command toAction: [ self selectedClass ifNotNil:[ self removeClass ]].! ! !ChangeSorterApplication methodsFor: 'shortcuts' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 18893180! registerMethodShortcuts: aWidget aWidget bindKeyCombination: $b command toAction: [ self selectedSelector ifNotNil:[ self browseMethodFull ]]. aWidget bindKeyCombination: $d command toAction: [ self selectedSelector ifNotNil:[ self forgetMessage ]]. aWidget bindKeyCombination: $m command toAction: [ self selectedSelector ifNotNil:[ self browseImplementorsOfMessages ]]. aWidget bindKeyCombination: $n command toAction: [ self selectedSelector ifNotNil:[ self browseSendersOfMessages ]]. aWidget bindKeyCombination: $v command toAction: [ self selectedSelector ifNotNil:[ self browseVersions ]]. aWidget bindKeyCombination: $x command toAction: [ self selectedSelector ifNotNil:[ self removeMessage ]].! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'GuillermoPolito 8/5/2013 10:21'! bindKeyCombination: aShortcut toAction: aBlock additionalKeyBindings at: aShortcut put: aBlock. self widget ifNotNil:[:w | w bindKeyCombination: aShortcut toAction: aBlock ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 36856049! ensureKeyBindingsFor: aWidget self registerKeyStrokesForNextFor: aWidget. self registerKeyStrokesForPreviousFor: aWidget. additionalKeyBindings associationsDo: [:association | aWidget bindKeyCombination: association key toAction: association value ]! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'GuillermoPolito 8/5/2013 10:22' prior: 19988657! on: aShortcut do: aBlock self bindKeyCombination: aShortcut toAction: aBlock! ! !ComposableModel methodsFor: 'private-focus' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 36858389! registerKeyStrokesForNextFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForNextFocus do: [:each | aWidget bindKeyCombination: each toAction: [ self giveFocusToNextFrom: self widget ] ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 36858665! registerKeyStrokesForPreviousFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForPreviousFocus do: [:each | aWidget bindKeyCombination: each toAction: [ self giveFocusToPreviousFrom: self widget ] ]! ! MultiByteBinaryOrTextStream removeSelector: #guessConverter! DummySoundSystem class removeSelector: #unload! DummySoundSystem class removeSelector: #initialize! ContextTempEyeElement class removeSelector: #host:tempName:! AbstractSoundSystem removeSelector: #soundNamed:! AbstractSoundSystem removeSelector: #shutDown! AbstractSoundSystem removeSelector: #sampledSoundChoices! AbstractSoundSystem removeSelector: #randomBitsFromSoundInput:! AbstractSoundSystem removeSelector: #playSoundNamedOrBeep:! AbstractSoundSystem removeSelector: #playSoundNamed:ifAbsentReadFrom:! AbstractSoundSystem removeSelector: #playSoundNamed:! AbstractSoundSystem removeSelector: #playSampledSound:rate:! AbstractSoundSystem removeSelector: #beep! AbstractSoundSystem class removeSelector: #soundQuickStart:! AbstractSoundSystem class removeSelector: #soundQuickStart! AbstractSoundSystem class removeSelector: #soundEnabled:! AbstractSoundSystem class removeSelector: #soundEnabled! Smalltalk globals removeClassNamed: #AbstractSoundSystem! MailSender class removeSelector: #userName! MailSender class removeSelector: #smtpServer! MailSender class removeSelector: #setUserName! MailSender class removeSelector: #setSmtpServer:! MailSender class removeSelector: #setSmtpServer! MailSender class removeSelector: #sendMessage:! MailSender class removeSelector: #isSmtpServerSet! Smalltalk globals removeClassNamed: #MailSender! CompoundTextConverter removeSelector: #saveStateOf:! CompoundTextConverter removeSelector: #restoreStateOf:with:! CompoundTextConverter removeSelector: #parseShiftSeqFromStream:! CompoundTextConverter removeSelector: #nextPutValue:toStream:withShiftSequenceIfNeededForLeadingChar:! CompoundTextConverter removeSelector: #nextPut:toStream:! CompoundTextConverter removeSelector: #nextFromStream:! CompoundTextConverter removeSelector: #initialize! CompoundTextConverter removeSelector: #emitSequenceToResetStateIfNeededOn:! CompoundTextConverter class removeSelector: #encodingNames! Smalltalk globals removeClassNamed: #CompoundTextConverter! SoundService class removeSelector: #defaultSoundEnabled! ByteString removeSelector: #convertFromCompoundText! "Collections-Streams"! "Collections-Strings"! "Keymapping-Core"! "Multilingual-Languages"! "Multilingual-TextConversion"! "NautilusRefactoring"! "Network-UUID"! "OpalCompiler-Core"! "Settings-Polymorph"! "Shout"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Tools"! "Spec-Widgets"! "System-Applications"! "System-Hashing"! "System-Sound"! "System-Support"! "Tabs"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(5 August 2013 11:55:39 am) Pharo.image priorSource: 13104996! ----STARTUP----an Array(5 August 2013 12:04:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 August 2013 12:04:51 pm) Pharo-30322.image priorSource: 13149350! ----STARTUP----an Array(6 August 2013 1:48:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----End fileIn----! WeakAnnouncerTest removeSelector: #newAnnouncer! AJRoutinePrologue removeSelector: #emitCode:! AJCallCleanup removeSelector: #callInfo! AJCallCleanup removeSelector: #callInfo:! AJx86GPRegister removeSelector: #stackSize! ASTBlockClosure removeSelector: #onDNU:do:! RBProgramNode removeSelector: #isBlock! AthensBalloonStrokePaint removeSelector: #asStrokePaintOn:! AthensBalloonEngine removeSelector: #clipRect:! AthensBalloonSurface removeSelector: #createRectanglePath:! CurveWorkshop removeSelector: #initialize! HashedCollection removeSelector: #copyEmpty! ReadStream removeSelector: #next:into:startingAt:! ByteString removeSelector: #asShortcut! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/10/2012 21:31' prior: 45569101! initialize "Initialization code for OrderedIdentityDictionary" "This method is not used since new is overriden to use initalize:" keys := OrderedCollection new. super initialize. ! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/10/2012 21:25' prior: 45569344! initialize: aNumber "Initialization code for OrderedIdentityDictionary" keys := OrderedCollection new. super initialize: aNumber! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/10/2012 21:31' prior: 46705000! initialize "Initialization code for OrderedIdentityDictionary" "This method is not used since new is overriden to use initalize:" keys := OrderedCollection new. super initialize. ! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/10/2012 21:25' prior: 46705303! initialize: aNumber "Initialization code for OrderedIdentityDictionary" keys := OrderedCollection new. super initialize: aNumber! ! SortedCollection class removeSelector: #new:streamContents:! SortedCollection class removeSelector: #streamSpecies! Heap removeSelector: #select:! SmallDictionary class removeSelector: #new! Matrix removeSelector: #includesAnyOf:! !SortedCollectionTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 50535883! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !SortedCollectionTest methodsFor: 'requirements' stamp: '' prior: 50514709! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !SortedCollectionTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 46706320! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !SortedCollectionTest methodsFor: 'requirements' stamp: '' prior: 46706659! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !FloatArrayTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 22271898! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !FloatArrayTest methodsFor: 'tests - puting with indexes' stamp: '' prior: 22352588! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! !FloatArrayTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 46708096! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !FloatArrayTest methodsFor: 'tests - puting with indexes' stamp: '' prior: 46708444! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! !SetTest methodsFor: 'tests - growable' stamp: '' prior: 33104396! testAddEmptyGrows "self debug: #testAddEmptyGrows" | oldSize | oldSize := self empty size. self empty add: self element. self assert: (self empty size) = (oldSize + 1).! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 33093092! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 33095031! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 33093373! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 33095777! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !SetTest methodsFor: 'tests - adding uniquely' stamp: '' prior: 33082810! testAddNewElementIncrementsSize | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement add: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! !SetTest methodsFor: 'tests - adding uniquely' stamp: '' prior: 33083749! testTAddIfNotPresentWithNewElement | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! !SetTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 33084247! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !SetTest methodsFor: 'tests - growable' stamp: '' prior: 46709493! testAddEmptyGrows "self debug: #testAddEmptyGrows" | oldSize | oldSize := self empty size. self empty add: self element. self assert: (self empty size) = (oldSize + 1).! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 46709735! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 46710007! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 46710631! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !SetTest methodsFor: 'tests - copy' stamp: '' prior: 46710969! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !SetTest methodsFor: 'tests - adding uniquely' stamp: '' prior: 46711439! testAddNewElementIncrementsSize | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement add: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! !SetTest methodsFor: 'tests - adding uniquely' stamp: '' prior: 46711913! testTAddIfNotPresentWithNewElement | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! !SetTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 46712407! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! BagTest removeSelector: #expectedElementByDetect! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! BagTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! BagTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! BagTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! BagTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! BagTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! BagTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! BagTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! BagTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! BagTest removeSelector: #testRemoveAllFoundIn! !Trait method! test0TSizeTest self shouldnt: [self empty] raise: Error. self shouldnt: [self sizeCollection] raise: Error. self assert: self empty isEmpty. self deny: self sizeCollection isEmpty.! ! SetTest removeSelector: #test0TSizeTest! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! OrderedCollectionTest removeSelector: #collectionWithCopy! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! OrderedCollectionTest removeSelector: #collectionWithIdentical! !Trait method! element "Returns an object that can be added to the collection returned by #collection." ^ self explicitRequirement! ! OrderedCollectionTest removeSelector: #element! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! OrderedCollectionTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! OrderedCollectionTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! OrderedCollectionTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! OrderedCollectionTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! OrderedCollectionTest removeSelector: #testIdentityIndexOf! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! OrderedCollectionTest removeSelector: #testIdentityIndexOfIAbsent! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! OrderedCollectionTest removeSelector: #testIndexOf! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! OrderedCollectionTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! OrderedCollectionTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! OrderedCollectionTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! OrderedCollectionTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! OrderedCollectionTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! OrderedCollectionTest removeSelector: #testRemoveAllFoundIn! !Trait method! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! OrderedCollectionTest removeSelector: #testSwapWith! WeakKeyToCollectionDictionaryTest class removeSelector: #shouldInheritSelectors! WeakIdentityKeyDictionaryTest class removeSelector: #shouldInheritSelectors! !Trait method! collectionClass " return the class to be used to create instances of the class tested" ^ self explicitRequirement! ! DictionaryTest removeSelector: #collectionClass! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! DictionaryTest removeSelector: #testAsSortedArray! !Trait method! testDictionaryConcatenationWithoutCommonKeys | dictionary1 dictionary2 result | dictionary1 := self nonEmptyDict. dictionary2 := self nonEmptyDifferentFromNonEmptyDict. result := dictionary1 , dictionary2. self assert: result size = (dictionary1 size + dictionary2 size). dictionary1 associationsDo: [ :assoc | self assert: (result at: assoc key) = assoc value ]. dictionary2 associationsDo: [ :assoc | self assert: (result at: assoc key) = assoc value ]! ! DictionaryTest removeSelector: #testDictionaryConcatenationWithoutCommonKeys! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! LinkedListTest removeSelector: #testIdentityIndexOf! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! LinkedListTest removeSelector: #testIdentityIndexOfIAbsent! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! LinkedListTest removeSelector: #testIndexOf! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! LinkedListTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! LinkedListTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! LinkedListTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! LinkedListTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! LinkedListTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! LinkedListTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! LinkedListTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! LinkedListTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! LinkedListTest removeSelector: #testRemoveAllFoundIn! !Trait method! testIsEmpty self assert: (self empty isEmpty). self deny: (self nonEmpty isEmpty).! ! FloatArrayTest removeSelector: #testIsEmpty! !Trait method! integerCollectionWithoutEqualElements " return a collection of integer without equal elements" ^ self explicitRequirement! ! SymbolTest removeSelector: #integerCollectionWithoutEqualElements! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! SymbolTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! SymbolTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! SymbolTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! SymbolTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! SymbolTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! SymbolTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! SymbolTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! HeapTest removeSelector: #testAsSortedArray! !Trait method! testRemoveAll "self debug: #testRemoveElementThatExists" | el aSubCollection collection | collection := self nonEmptyWithoutEqualElements. el := collection anyOne. aSubCollection := collection copyWithout: el. self shouldnt: [ | res | res := collection removeAll: aSubCollection ] raise: Error. self assert: collection size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! HeapTest removeSelector: #testRemoveAll! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! HeapTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! HeapTest removeSelector: #testRemoveAllFoundIn! IntervalTest removeSelector: #expectedElementByDetect! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! IntervalTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! IntervalTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! IntervalTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! IntervalTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! IntervalTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! IntervalTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! IntervalTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! IntervalTest removeSelector: #testIdentityIndexOf! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! IntervalTest removeSelector: #testIdentityIndexOfIAbsent! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! IntervalTest removeSelector: #testIndexOf! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! IntervalTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! IntervalTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! IntervalTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! IntervalTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! IntervalTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! IntervalTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! StringTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! StringTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! StringTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! StringTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! StringTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! StringTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! StringTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testIsEmpty self assert: (self empty isEmpty). self deny: (self nonEmpty isEmpty).! ! SortedCollectionTest removeSelector: #testIsEmpty! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! ArrayTest removeSelector: #collectionWithCopy! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! ArrayTest removeSelector: #collectionWithIdentical! ArrayTest removeSelector: #element! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! ArrayTest removeSelector: #test0FixtureSequencedConcatenationTest! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! ArrayTest removeSelector: #testAsArray! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! ArrayTest removeSelector: #testAsSortedArray! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! ArrayTest removeSelector: #testAt! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! ArrayTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! ArrayTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! ArrayTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! ArrayTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! ArrayTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! ArrayTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! ArrayTest removeSelector: #testIndexOf! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! ArrayTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! ArrayTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! ArrayTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! ArrayTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! ArrayTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! ArrayTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! ArrayTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! ArrayTest removeSelector: #testSwapWith! !Trait method! testDoSeparatedBy | string expectedString beforeFirst | string := ''. self collectionWithoutNilElements do: [ :each | string := string , each asString ] separatedBy: [ string := string , '|' ]. expectedString := ''. beforeFirst := true. self collectionWithoutNilElements do: [ :each | beforeFirst = true ifTrue: [ beforeFirst := false ] ifFalse: [ expectedString := expectedString , '|' ]. expectedString := expectedString , each asString ]. self assert: expectedString = string! ! CollectionRootTest removeSelector: #testDoSeparatedBy! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoText removeSelector: #nbLibraryNameOrHandle! AthensCairoPDFSurface removeSelector: #newCanvas! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoSurface removeSelector: #nbLibraryNameOrHandle! ParseNode removeSelector: #isLiteral! FileReference removeSelector: #resolve:! Gofer class removeSelector: #new! WarpBlt class removeSelector: #current! AGroupHasBeenRegistered removeSelector: #group! AGroupHasBeenRegistered removeSelector: #group:! DynamicGroup removeSelector: #sortBlock:! AGroupHasBeenUnregistered removeSelector: #group! AGroupHasBeenUnregistered removeSelector: #group:! RBCollectionCopyEmptyRule class removeSelector: #identifierMinorVersionNumber! RBClassInstVarNotInitializedRule class removeSelector: #identifierMinorVersionNumber! RBClassVariableCapitalizationRule class removeSelector: #identifierMinorVersionNumber! RBSearchingLiteralRule class removeSelector: #identifierMinorVersionNumber! RBUnoptimizedAndOrRule class removeSelector: #identifierMinorVersionNumber! RBAssignmentInIfTrueRule class removeSelector: #identifierMinorVersionNumber! RBAssignmentInBlockRule class removeSelector: #identifierMinorVersionNumber! RBToDoRule class removeSelector: #identifierMinorVersionNumber! RBAsOrderedCollectionNotNeededRule class removeSelector: #identifierMinorVersionNumber! RBPlatformDependentUserInteractionRule class removeSelector: #identifierMinorVersionNumber! RBSubclassResponsibilityNotDefinedRule class removeSelector: #identifierMinorVersionNumber! RBMissingYourselfRule class removeSelector: #identifierMinorVersionNumber! RBUnpackagedCodeRule class removeSelector: #identifierMinorVersionNumber! RBDetectContainsRule class removeSelector: #identifierMinorVersionNumber! RBUnnecessaryAssignmentRule class removeSelector: #identifierMinorVersionNumber! RBRefersToClassRule class removeSelector: #identifierMinorVersionNumber! RBDetectIfNoneRule class removeSelector: #identifierMinorVersionNumber! RBBooleanPrecedenceRule class removeSelector: #identifierMinorVersionNumber! RBBetweenAndRule class removeSelector: #identifierMinorVersionNumber! RBTranslateLiteralsInMenusRule class removeSelector: #identifierMinorVersionNumber! RBCodeCruftLeftInMethodsRule class removeSelector: #identifierMinorVersionNumber! RBGuardClauseRule class removeSelector: #identifierMinorVersionNumber! RBUnderscoreAssignmentRule class removeSelector: #identifierMinorVersionNumber! RBCascadedNextPutAllsRule class removeSelector: #identifierMinorVersionNumber! RBThemeAPIUpdateRule class removeSelector: #identifierMinorVersionNumber! RBAtIfAbsentRule class removeSelector: #identifierMinorVersionNumber! RBNotEliminationRule class removeSelector: #identifierMinorVersionNumber! RBUnwindBlocksRule class removeSelector: #identifierMinorVersionNumber! RBSuperSendsRule class removeSelector: #identifierMinorVersionNumber! RBAllAnyNoneSatisfyRule class removeSelector: #identifierMinorVersionNumber! RBMinMaxRule class removeSelector: #identifierMinorVersionNumber! RBEqualNilRule class removeSelector: #identifierMinorVersionNumber! RBTransformationRule class removeSelector: #identifierMinorVersionNumber! RBIfTrueReturnsRule class removeSelector: #identifierMinorVersionNumber! RBExcessiveInheritanceRule class removeSelector: #identifierMinorVersionNumber! RBSendsUnknownMessageToGlobalRule class removeSelector: #identifierMinorVersionNumber! RBVariableNotDefinedRule class removeSelector: #identifierMinorVersionNumber! RBToDoWithIncrementRule class removeSelector: #identifierMinorVersionNumber! RBTemporaryVariableCapitalizationRule class removeSelector: #identifierMinorVersionNumber! RBNoClassCommentRule class removeSelector: #identifierMinorVersionNumber! RBFloatEqualityComparisonRule class removeSelector: #identifierMinorVersionNumber! RBInstanceVariableCapitalizationRule class removeSelector: #identifierMinorVersionNumber! RBWhileTrueRule class removeSelector: #identifierMinorVersionNumber! RBMethodHasNoTimeStampRule class removeSelector: #identifierMinorVersionNumber! RBExcessiveVariablesRule class removeSelector: #identifierMinorVersionNumber! RBOnlyReadOrWrittenVariableRule class removeSelector: #identifierMinorVersionNumber! RBUnconditionalRecursionRule class removeSelector: #identifierMinorVersionNumber! RBMissingSuperSendsRule class removeSelector: #identifierMinorVersionNumber! RBYourselfNotUsedRule class removeSelector: #identifierMinorVersionNumber! RBExcessiveMethodsRule class removeSelector: #identifierMinorVersionNumber! RBEqualsTrueRule class removeSelector: #identifierMinorVersionNumber! RBClassNotReferencedRule class removeSelector: #identifierMinorVersionNumber! RBMissingSubclassResponsibilityRule class removeSelector: #identifierMinorVersionNumber! RBMethodModifierOverrideRule class removeSelector: #identifierMinorVersionNumber! RBAbstractClassRule class removeSelector: #identifierMinorVersionNumber! RBTempVarOverridesInstVarRule class removeSelector: #identifierMinorVersionNumber! RBContainsRule class removeSelector: #identifierMinorVersionNumber! RBMethodModifierFinalRule class removeSelector: #identifierMinorVersionNumber! RBFileBlocksRule class removeSelector: #identifierMinorVersionNumber! RBUnclassifiedMethodsRule class removeSelector: #identifierMinorVersionNumber! RBModifiesCollectionRule class removeSelector: #identifierMinorVersionNumber! RBLiteralArrayContainsSuspiciousTrueFalseOrNilRule class removeSelector: #identifierMinorVersionNumber! RBImplementedNotSentRule class removeSelector: #identifierMinorVersionNumber! RBInstVarInSubclassesRule class removeSelector: #identifierMinorVersionNumber! RBSuperSendsNewRule class removeSelector: #identifierMinorVersionNumber! RBSizeCheckRule class removeSelector: #identifierMinorVersionNumber! RBExcessiveArgumentsRule class removeSelector: #identifierMinorVersionNumber! RBVariableAssignedLiteralRule class removeSelector: #identifierMinorVersionNumber! RBGuardingClauseRule class removeSelector: #identifierMinorVersionNumber! RBEmptyExceptionHandlerRule class removeSelector: #identifierMinorVersionNumber! RBAssignmentWithoutEffectRule class removeSelector: #identifierMinorVersionNumber! RBLiteralArrayCharactersRule class removeSelector: #identifierMinorVersionNumber! RBCollectionMessagesToExternalObjectRule class removeSelector: #identifierMinorVersionNumber! RBCollectionProtocolRule class removeSelector: #identifierMinorVersionNumber! RBUsesAddRule class removeSelector: #identifierMinorVersionNumber! RBCollectSelectNotUsedRule class removeSelector: #identifierMinorVersionNumber! RBPrecedenceRule class removeSelector: #identifierMinorVersionNumber! RBUnoptimizedToDoRule class removeSelector: #identifierMinorVersionNumber! RBMissingTranslationsInMenusRule class removeSelector: #identifierMinorVersionNumber! RBEqualNotUsedRule class removeSelector: #identifierMinorVersionNumber! RBReturnsIfTrueRule class removeSelector: #identifierMinorVersionNumber! RBToDoCollectRule class removeSelector: #identifierMinorVersionNumber! RBReturnInEnsureRule class removeSelector: #identifierMinorVersionNumber! RBExtraBlockRule class removeSelector: #identifierMinorVersionNumber! RBEndTrueFalseRule class removeSelector: #identifierMinorVersionNumber! RBOnlyReadOrWrittenTemporaryRule class removeSelector: #identifierMinorVersionNumber! RBIfTrueBlocksRule class removeSelector: #identifierMinorVersionNumber! RBThreeElementPointRule class removeSelector: #identifierMinorVersionNumber! RBSendsDeprecatedMethodToGlobalRule class removeSelector: #identifierMinorVersionNumber! RBConsistencyCheckRule class removeSelector: #identifierMinorVersionNumber! RBStringConcatenationRule class removeSelector: #identifierMinorVersionNumber! RBParseTreeLintRule class removeSelector: #identifierMinorVersionNumber! RBUnreferencedVariablesRule class removeSelector: #identifierMinorVersionNumber! RBVariableReferencedOnceRule class removeSelector: #identifierMinorVersionNumber! RBOverridesSpecialMessageRule class removeSelector: #identifierMinorVersionNumber! RBJustSendsSuperRule class removeSelector: #identifierMinorVersionNumber! RBDefinesEqualNotHashRule class removeSelector: #identifierMinorVersionNumber! RBLiteralArrayContainsCommaRule class removeSelector: #identifierMinorVersionNumber! RBLongMethodsRule class removeSelector: #identifierMinorVersionNumber! RBReturnsBooleanAndOtherRule class removeSelector: #identifierMinorVersionNumber! RBUndeclaredReferenceRule class removeSelector: #identifierMinorVersionNumber! RBEquivalentSuperclassMethodsRule class removeSelector: #identifierMinorVersionNumber! RBClassNameInSelectorRule class removeSelector: #identifierMinorVersionNumber! RBAddRemoveDependentsRule class removeSelector: #identifierMinorVersionNumber! RBSentNotImplementedRule class removeSelector: #identifierMinorVersionNumber! RBMethodModifierSuperRule class removeSelector: #identifierMinorVersionNumber! RBBadMessageRule class removeSelector: #identifierMinorVersionNumber! RBSendsDifferentSuperRule class removeSelector: #identifierMinorVersionNumber! RBUsesTrueRule class removeSelector: #identifierMinorVersionNumber! RBInconsistentMethodClassificationRule class removeSelector: #identifierMinorVersionNumber! RBTempsReadBeforeWrittenRule class removeSelector: #identifierMinorVersionNumber! RBUtilityMethodsRule class removeSelector: #identifierMinorVersionNumber! RBUncommonMessageSendRule class removeSelector: #identifierMinorVersionNumber! RBMethodSourceContainsLinefeedsRule class removeSelector: #identifierMinorVersionNumber! RBBlockLintRule class removeSelector: #identifierMinorVersionNumber! RBBasicLintRule class removeSelector: #identifierMinorVersionNumber! RBCompositeLintRule class removeSelector: #identifierMinorVersionNumber! !CriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 2/5/2013 11:39' prior: 45575473! initialize "Initialization code for CriticRulesBrowser" super initialize. cache := CriticsCache new. checker := SmalllintManifestChecker new. cache checker: checker. cache browser: self. criticModel cache: cache. ! ! !CriticBrowser methodsFor: 'initialization' stamp: 'SimonAllier 2/5/2013 11:39' prior: 46771199! initialize "Initialization code for CriticRulesBrowser" super initialize. cache := CriticsCache new. checker := SmalllintManifestChecker new. cache checker: checker. cache browser: self. criticModel cache: cache. ! ! SingleRuleCriticBrowser removeSelector: #perform:orSendTo:! SelectRuleBrowser class removeSelector: #defaultSpec! MetacelloProjectSpecLoadError removeSelector: #isResumable! !PharoUser methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/16/2012 15:55' prior: 45579548! initialize "Initialization code for PharoUser" super initialize. avatar := self defaultAvatar. self updateGravatarFor: ''. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !PharoUser methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/16/2012 15:55' prior: 46772039! initialize "Initialization code for PharoUser" super initialize. avatar := self defaultAvatar. self updateGravatarFor: ''. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !SwitchUsers methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:40' prior: 45593956! initialize "Initialization code for SwitchUsers" usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !SwitchUsers methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:40' prior: 46772640! initialize "Initialization code for SwitchUsers" usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !UserManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/16/2012 15:19' prior: 45587609! initialize "Initialization code for UsersManager" super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !UserManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/16/2012 15:19' prior: 46773133! initialize "Initialization code for UsersManager" super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !KeychainEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:21' prior: 45574150! initialize "Initialization code for KeychainEditor" keychainEditingWrapper := nil asValueHolder. super initialize.! ! !KeychainEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:21' prior: 46773831! initialize "Initialization code for KeychainEditor" keychainEditingWrapper := nil asValueHolder. super initialize.! ! !PasswordInitializationDialogWindow methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 45589334! initialize "Initialization code for PasswordInitializationDialogWindow" super initialize. self textFont: Smalltalk ui theme textFont.! ! !PasswordInitializationDialogWindow methodsFor: 'initialize' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 46774297! initialize "Initialization code for PasswordInitializationDialogWindow" super initialize. self textFont: Smalltalk ui theme textFont.! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:24' prior: 45571684! initialize "Initialization code for UserEditor" usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:24' prior: 46774799! initialize "Initialization code for UserEditor" usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !Cookie methodsFor: 'initialize' stamp: 'MarcusDenker 7/18/2013 11:23' prior: 45593110! initialize "Initialization code for Cookie" super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !Cookie methodsFor: 'initialize' stamp: 'MarcusDenker 7/18/2013 11:23' prior: 46775261! initialize "Initialization code for Cookie" super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !PharoUserPermissions methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/7/2013 18:57' prior: 45572518! initialize "Initialization code for PharoUserPermissions" super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !PharoUserPermissions methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/7/2013 18:57' prior: 46775769! initialize "Initialization code for PharoUserPermissions" super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !PermissionsEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 16:23' prior: 45570123! initialize "Initialization code for PermissionsEditor" lock := false. user := nil asValueHolder. super initialize.! ! !PermissionsEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 16:23' prior: 46776636! initialize "Initialization code for PermissionsEditor" lock := false. user := nil asValueHolder. super initialize.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:27' prior: 45597683! initialize "Initialization code for KeyChainViewer" keychain := nil asValueHolder. super initialize.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 16:27' prior: 45597847! initializeWidgets "Initialization code for KeyChainViewer" self instantiateModels: #( add ButtonModel edit ButtonModel list MultiColumnListModel ok OkToolbar remove ButtonModel ). self initializeAdd. self initializeEdit. self initializeRemove. ok okButton label: 'Close'. list displayBlock: [ :item | self wrapItem: item ]. keychain whenChangedDo: [:kc | add enabled: kc notNil. list resetSelection. self updateTitle. list items: kc bindings associations ]. list whenSelectedItemChanged: [:it | edit enabled: it notNil. remove enabled: it notNil ]. self focusOrder add: list; add: add; add: edit; add: remove; add: ok.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 15:27' prior: 46777093! initialize "Initialization code for KeyChainViewer" keychain := nil asValueHolder. super initialize.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/2/2012 16:27' prior: 46777305! initializeWidgets "Initialization code for KeyChainViewer" self instantiateModels: #( add ButtonModel edit ButtonModel list MultiColumnListModel ok OkToolbar remove ButtonModel ). self initializeAdd. self initializeEdit. self initializeRemove. ok okButton label: 'Close'. list displayBlock: [ :item | self wrapItem: item ]. keychain whenChangedDo: [:kc | add enabled: kc notNil. list resetSelection. self updateTitle. list items: kc bindings associations ]. list whenSelectedItemChanged: [:it | edit enabled: it notNil. remove enabled: it notNil ]. self focusOrder add: list; add: add; add: edit; add: remove; add: ok.! ! KeychainEditor removeSelector: #cancelled! !MetaclassTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:24' prior: 46194493! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TApplyingOnClassSide>>selector) sourceCode ] raise: Error. self assert: (TApplyingOnClassSide>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:.} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:.} asSet. ! ! !MetaclassTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:24' prior: 46779105! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TApplyingOnClassSide>>selector) sourceCode ] raise: Error. self assert: (TApplyingOnClassSide>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:.} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:.} asSet. ! ! !BehaviorTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:16' prior: 46188806! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TBehavior>>selector) sourceCode ] raise: Error. self assert: (TBehavior>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#format #isBehavior layout) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #localSelectors #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet.! ! !BehaviorTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:16' prior: 46784706! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TBehavior>>selector) sourceCode ] raise: Error. self assert: (TBehavior>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#format #isBehavior layout) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #localSelectors #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet.! ! !ClassTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 15:21' prior: 46191098! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClass>>selector) sourceCode ] raise: Error. self assert: (TClass>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "traitComposition traitComposition: localSelectors localSelectors: basicLocalSelectors basicLocalSelectors -> accessors to instance variables that do not belong to Trait" "baseClass classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names" "addInstVarNamed: for traits is implemeted in TraitDescription" self assert: (Class localSelectors difference: Trait localSelectors) equals: #(#traitComposition: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: #basicLocalSelectors: #traitComposition #addInstVarNamed:) asSet. "classTrait: isClassTrait classTrait isBaseTrait baseTrait -> they have their equivalent for classes but with different name" "nautilusIcon initialize is implemented differently for traits, classes have their implentation in Object" self assert: (Trait localSelectors difference: Class localSelectors) equals: #(#classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait) asSet. ! ! !ClassTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 15:21' prior: 46789323! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClass>>selector) sourceCode ] raise: Error. self assert: (TClass>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "traitComposition traitComposition: localSelectors localSelectors: basicLocalSelectors basicLocalSelectors -> accessors to instance variables that do not belong to Trait" "baseClass classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names" "addInstVarNamed: for traits is implemeted in TraitDescription" self assert: (Class localSelectors difference: Trait localSelectors) equals: #(#traitComposition: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: #basicLocalSelectors: #traitComposition #addInstVarNamed:) asSet. "classTrait: isClassTrait classTrait isBaseTrait baseTrait -> they have their equivalent for classes but with different name" "nautilusIcon initialize is implemented differently for traits, classes have their implentation in Object" self assert: (Trait localSelectors difference: Class localSelectors) equals: #(#classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait) asSet. ! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:18' prior: 46197285! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClassDescription>>selector) sourceCode ] raise: Error. self assert: (TClassDescription>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "superclass:layout, initializeLayout, initializeLayoutWithSlots:, layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) baseClass classClass classVersion -> they have their equivalens in TraitDescription (baseTrait classTrait traitVersion)" self assert: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: #classVersion) asSet. "isClassTrait, baseTrait, traitVersion, isBaseTrait, classTrait -> They have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names copyTraitExpresion addExclusionOf: have no equivalent in classes" self assert: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #traitVersion #isBaseTrait #classTrait) asSet. ! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 15:18' prior: 46793686! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TClassDescription>>selector) sourceCode ] raise: Error. self assert: (TClassDescription>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "superclass:layout, initializeLayout, initializeLayoutWithSlots:, layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) baseClass classClass classVersion -> they have their equivalens in TraitDescription (baseTrait classTrait traitVersion)" self assert: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: #classVersion) asSet. "isClassTrait, baseTrait, traitVersion, isBaseTrait, classTrait -> They have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names copyTraitExpresion addExclusionOf: have no equivalent in classes" self assert: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #traitVersion #isBaseTrait #classTrait) asSet. ! ! ProcessTest removeSelector: #tearDown! SubclassPoolUser class removeSelector: #author! SubclassPoolUser class removeSelector: #gloups! !Trait method! executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: aString ^[aBlock value. false] on: anExceptionalEvent do: [:ex | ex return: (ex description includesSubstring: aString) ] ! ! DatePrintFormatTester removeSelector: #executeShould:inScopeOf:withDescriptionContaining:! !Trait method! executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: aString ^[aBlock value. false] on: anExceptionalEvent do: [:ex | ex return: (ex description includesSubstring: aString) not ] ! ! DatePrintFormatTester removeSelector: #executeShould:inScopeOf:withDescriptionNotContaining:! !NonBooleanReceiver methodsFor: 'signaledexception' stamp: 'hmm 7/29/2001 21:37' prior: 45621676! isResumable ^true! ! !NonBooleanReceiver methodsFor: 'signaledexception' stamp: 'hmm 7/29/2001 21:37' prior: 46799451! isResumable ^true! ! !BlockCannotReturn methodsFor: 'exceptiondescription' stamp: 'tfei 4/2/1999 15:49' prior: 45619974! isResumable ^true! ! !BlockCannotReturn methodsFor: 'exceptiondescription' stamp: 'tfei 3/30/1999 12:55' prior: 45619805! defaultAction self messageText: 'Block cannot return'. ^super defaultAction! ! !BlockCannotReturn methodsFor: 'exceptiondescription' stamp: 'tfei 4/2/1999 15:49' prior: 46799695! isResumable ^true! ! !BlockCannotReturn methodsFor: 'exceptiondescription' stamp: 'tfei 3/30/1999 12:55' prior: 46799819! defaultAction self messageText: 'Block cannot return'. ^super defaultAction! ! !Trait method! allSuperclassesFor: aClass cache: cache ^ cache at: aClass ifAbsentPut: [aClass allSuperclasses asArray]! ! Class class removeSelector: #allSuperclassesFor:cache:! !Trait method! doesNotIncludeInstanceOrSuperclassesFor: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! Class class removeSelector: #doesNotIncludeInstanceOrSuperclassesFor:in:cache:! !Trait method! fileOutPool: aString "file out the global pool named aString" | internalStream | internalStream := (String new: 1000) writeStream. self new fileOutPool: (self environment at: aString asSymbol) onFileStream: internalStream. FileStream writeSourceCodeFrom: internalStream baseName: aString isSt: true.! ! Class class removeSelector: #fileOutPool:! !Trait method! hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache ^ (self hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache) and: [ aClass isMeta not or: [ self hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache]] ! ! Class class removeSelector: #hasNoDependenciesFor:in:cache:! !Trait method! hasNoDependenciesForMetaclass: aClass in: unprocessedClasses cache: cache | soleInstance | soleInstance := aClass soleInstance. ^ (unprocessedClasses includes: soleInstance) not and: [ self hasNoSuperclassesOf: soleInstance in: unprocessedClasses cache: cache]! ! Class class removeSelector: #hasNoDependenciesForMetaclass:in:cache:! !Trait method! hasNoSuperclassesOf: aClass in: unprocessedClasses cache: cache ^ (unprocessedClasses includesAnyOf: (self allSuperclassesFor: aClass cache: cache)) not ! ! Class class removeSelector: #hasNoSuperclassesOf:in:cache:! !Trait method! rootsOfTheWorld "return all classes that have a nil superclass" ^(Smalltalk globals select: [:each | each isBehavior and: [each superclass isNil]]) asOrderedCollection! ! Class class removeSelector: #rootsOfTheWorld! !Trait method! superclassOrder: classes "Arrange the classes in the collection, classes, in superclass order so the classes can be properly filed in. Do it in sets instead of ordered collections." | all unprocessedClasses cache | unprocessedClasses := classes asSet. cache := Dictionary new. all := OrderedCollection new: unprocessedClasses size. unprocessedClasses size timesRepeat: [ |nextClass| nextClass := unprocessedClasses detect: [:aClass | self hasNoDependenciesFor: aClass in: unprocessedClasses cache: cache]. all add: nextClass. unprocessedClasses remove: nextClass]. ^all! ! Class class removeSelector: #superclassOrder:! !Trait method! template: aSystemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class." ^ self templateForSubclassOf: Object name category: aSystemCategoryName ! ! Class class removeSelector: #template:! !Trait method! templateForSubclassOf: priorClassName category: systemCategoryName "Answer an expression that can be edited and evaluated in order to define a new class, given that the class previously looked at was as given" ^priorClassName asString, ' subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''' , systemCategoryName asString , ''''! ! Class class removeSelector: #templateForSubclassOf:category:! ExtendedNumberParser removeSelector: #nextInteger! Integer removeSelector: #asFloat! Smalltalk globals removeClassNamed: #InvalidArgument! ----End fileIn----! MetacelloNullRecordingMCSpecLoader removeSelector: #resolvePackageSpecReferences:gofer:! MetacelloMCPartiallyLoadedStatus class removeSelector: #new! !MCVersionLoader methodsFor: 'loading' stamp: 'bf 3/16/2006 19:03' prior: 45646404! load self loadWithNameLike: versions first info name. ! ! !MCVersionLoader methodsFor: 'loading' stamp: 'bf 3/16/2006 19:03' prior: 46804094! load self loadWithNameLike: versions first info name. ! ! MCSqueaksourceRepository removeSelector: #asCreationTemplate! !JobProgressMorph methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 2/19/2013 15:27' prior: 45572895! initialize "Initialization code for JobProgressMorph" super initialize. self addDependent: SystemProgressMorph uniqueInstance.! ! !JobProgressMorph methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 2/19/2013 15:27' prior: 46804464! initialize "Initialization code for JobProgressMorph" super initialize. self addDependent: SystemProgressMorph uniqueInstance.! ! !PluggableTextMorphWithLimits methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/6/2012 00:45' prior: 45592765! initialize "Initialization code for PluggableTextMorphWithLimits" super initialize. locked := false. lockIcon := self defaultOpenMorph. self addIcon. lockIcon on: #mouseEnter send: #colorize to: self. lockIcon on: #mouseLeave send: #decolorize to: self. lockIcon on: #click send: #toggleLock to: self! ! !PluggableTextMorphWithLimits methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/6/2012 00:45' prior: 46804955! initialize "Initialization code for PluggableTextMorphWithLimits" super initialize. locked := false. lockIcon := self defaultOpenMorph. self addIcon. lockIcon on: #mouseEnter send: #colorize to: self. lockIcon on: #mouseLeave send: #decolorize to: self. lockIcon on: #click send: #toggleLock to: self! ! PaginatedMorphTreeModel removeSelector: #chunkSize:! PaginatedMorphTreeModel removeSelector: #defaultChunkSize! PaginatedMorphTreeModel removeSelector: #defaultPageSize! PaginatedMorphTreeModel removeSelector: #pageSize:! ClassTreeExample removeSelector: #expandAllFromNode:! BorderedMorph removeSelector: #useRoundedCorners! ClassListExample removeSelector: #defaultChunkSize! Morph removeSelector: #stepTime! NativeBoostMac32 removeSelector: #newAssembler! NBWin32Heap removeSelector: #nbCallingConvention! !MultipleMethodsEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/6/2012 00:56' prior: 45601445! initialize "Initialization code for MultipleMethodsEditor" super initialize. self changeProportionalLayout. self color: Color white. lock := false. buttonsContainer := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #spaceFill; yourself. editors := OrderedCollection new. container := self newProportionalPanelMorph. self updateLayoutForSingle! ! !MultipleMethodsEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 8/6/2012 00:56' prior: 46806325! initialize "Initialization code for MultipleMethodsEditor" super initialize. self changeProportionalLayout. self color: Color white. lock := false. buttonsContainer := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #spaceFill; yourself. editors := OrderedCollection new. container := self newProportionalPanelMorph. self updateLayoutForSingle! ! !MultipleMethodsEditorAllButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/6/2012 18:22' prior: 45604248! initialize "Initialization code for MultipleMethodsEditorAllButtonModel" super initialize. state := true.! ! !MultipleMethodsEditorAllButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/6/2012 18:22' prior: 46807465! initialize "Initialization code for MultipleMethodsEditorAllButtonModel" super initialize. state := true.! ! !MultipleMethodsEditorButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/6/2012 18:18' prior: 45588473! initialize "Initialization code for MultipleMethodsEditorButtonModel" super initialize. state := false! ! !MultipleMethodsEditorButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/6/2012 18:18' prior: 46807932! initialize "Initialization code for MultipleMethodsEditorButtonModel" super initialize. state := false! ! !NautilusMCBindings methodsFor: 'initialization' stamp: '' prior: 45602178! initialize "Initialization code for NautilusMCBindings" super initialize. bindingsRtoMC := IdentityDictionary new. bindingsMCtoR := IdentityDictionary new. self registerToMCAnnouncements.! ! !NautilusMCBindings methodsFor: 'initialization' stamp: '' prior: 46808348! initialize "Initialization code for NautilusMCBindings" super initialize. bindingsRtoMC := IdentityDictionary new. bindingsMCtoR := IdentityDictionary new. self registerToMCAnnouncements.! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: '' prior: 45596120! buildInitializeCodeFor: aClass ^ String streamContents: [:str | str << 'initialize';cr. str tab << '"Initialization code for '< 'enabled' translated! ! ColorChooserMorph removeSelector: #enabledString! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 12:45'! assertValidLintRule: aLintRule | result | result := aLintRule runOnEnvironment: self targetClassEnvironment. self assert: result isEmpty.! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 11:25'! targetClassEnvironment ^RBClassEnvironment class: self targetClass.! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 12:45' prior: 46813986! assertValidLintRule: aLintRule | result | result := aLintRule runOnEnvironment: self targetClassEnvironment. self assert: result isEmpty.! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 11:25' prior: 46814221! targetClassEnvironment ^RBClassEnvironment class: self targetClass.! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 14:54'! checkClass: aContext "The comparison between methods is made using the ast, this is better than comparing source code only since it does not take into account identations, extra parenthesis, etc" | selectedClass | selectedClass := aContext selectedClass. selectedClass methods do: [ :method | | overridedSuperclass | overridedSuperclass := selectedClass allSuperclasses detect: [ :superclass | superclass includesSelector: method selector ] ifNone: [ nil ]. overridedSuperclass ifNotNil: [ (method ast = (overridedSuperclass>>method selector) ast) ifTrue: [result addClass: aContext selectedClass selector: method selector ]]].! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:40'! name ^ 'Repeated method in the superclasses'! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 12:56'! rationale ^ 'If a class is overriding a method, it should use a different code. Is meaningless have a method in a class and in its superclass'! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 14:54' prior: 46814824! checkClass: aContext "The comparison between methods is made using the ast, this is better than comparing source code only since it does not take into account identations, extra parenthesis, etc" | selectedClass | selectedClass := aContext selectedClass. selectedClass methods do: [ :method | | overridedSuperclass | overridedSuperclass := selectedClass allSuperclasses detect: [ :superclass | superclass includesSelector: method selector ] ifNone: [ nil ]. overridedSuperclass ifNotNil: [ (method ast = (overridedSuperclass>>method selector) ast) ifTrue: [result addClass: aContext selectedClass selector: method selector ]]].! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:40' prior: 46815580! name ^ 'Repeated method in the superclasses'! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 12:56' prior: 46815732! rationale ^ 'If a class is overriding a method, it should use a different code. Is meaningless have a method in a class and in its superclass'! ! !RBExplicitRequirementMethodsRule methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 11:10'! checkClass: aContext | selectedClass explicitRequirementMethods | explicitRequirementMethods := Set new. selectedClass := aContext selectedClass. selectedClass traitComposition allSelectors do: [ :selector | | method | method := selectedClass>>selector. (method isRequired and: [ method isSubclassResponsibility not ]) ifTrue: [ explicitRequirementMethods add: method ]]. explicitRequirementMethods do: [ :method | aContext selectedClass withAllSuperclasses detect: [ :superclass | superclass canPerform: method selector ] ifNone: [result addClass: aContext selectedClass selector: method selector]].! ! !RBExplicitRequirementMethodsRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 10:15'! name ^ 'Explicit requirement methods'! ! !RBExplicitRequirementMethodsRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 10:13'! rationale ^ 'Classes that use traits with explicit requirement methods should either implement the method or inherit it.'! ! !RBExplicitRequirementMethodsRule methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 11:10' prior: 46817180! checkClass: aContext | selectedClass explicitRequirementMethods | explicitRequirementMethods := Set new. selectedClass := aContext selectedClass. selectedClass traitComposition allSelectors do: [ :selector | | method | method := selectedClass>>selector. (method isRequired and: [ method isSubclassResponsibility not ]) ifTrue: [ explicitRequirementMethods add: method ]]. explicitRequirementMethods do: [ :method | aContext selectedClass withAllSuperclasses detect: [ :superclass | superclass canPerform: method selector ] ifNone: [result addClass: aContext selectedClass selector: method selector]].! ! !RBExplicitRequirementMethodsRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 10:15' prior: 46817916! name ^ 'Explicit requirement methods'! ! !RBExplicitRequirementMethodsRule methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 10:13' prior: 46818057! rationale ^ 'Classes that use traits with explicit requirement methods should either implement the method or inherit it.'! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 14:30'! checkClass: aContext "The comparison between methods is made using the ast, this is better than comparing source code only since it does not take into account identations, extra parenthesis, etc" | selectedClass | selectedClass := aContext selectedClass. selectedClass hasTraitComposition ifTrue: [ selectedClass localMethods do: [ :method | |traitCompositionMethod | traitCompositionMethod := (selectedClass traitComposition methodDescriptionForSelector: method selector) effectiveMethod. traitCompositionMethod ifNotNil: [ (traitCompositionMethod ast = method ast) ifTrue: [ result addClass: selectedClass selector: method selector ]]]].! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:40'! name ^ 'Repeated methods in the trait composition'! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:41'! rationale ^ 'If a class has a method in its trait composition, the method should not be implemented in the class'! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'running' stamp: 'SebastianTleye 7/19/2013 14:30' prior: 46819442! checkClass: aContext "The comparison between methods is made using the ast, this is better than comparing source code only since it does not take into account identations, extra parenthesis, etc" | selectedClass | selectedClass := aContext selectedClass. selectedClass hasTraitComposition ifTrue: [ selectedClass localMethods do: [ :method | |traitCompositionMethod | traitCompositionMethod := (selectedClass traitComposition methodDescriptionForSelector: method selector) effectiveMethod. traitCompositionMethod ifNotNil: [ (traitCompositionMethod ast = method ast) ifTrue: [ result addClass: selectedClass selector: method selector ]]]].! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:40' prior: 46820232! name ^ 'Repeated methods in the trait composition'! ! !RBLocalMethodsOfAClassNotInItsTraitComposition methodsFor: 'accessing' stamp: 'SebastianTleye 7/19/2013 13:41' prior: 46820400! rationale ^ 'If a class has a method in its trait composition, the method should not be implemented in the class'! ! RBRefactoryTestDataApp removeSelector: #isLiteral! RBSmalllintTestObject removeSelector: #isLiteral! RxsCharacter removeSelector: #isNullable! RxsPredicate removeSelector: #isAtomic! RGVariableDefinition removeSelector: #isGlobalVariable! RGObject removeSelector: #isTrait! RPackageMCSynchronisationTest removeSelector: #allManagers! SHRBTextStyler removeSelector: #addAttributesFrom:satisfying:to:! SHRBTextStyler removeSelector: #attributesFor:! SHRBTextStyler removeSelector: #pixelHeight! SHRBTextStyler removeSelector: #privateFormat:! SHRBTextStyler removeSelector: #unstyledTextFrom:! !TApplyingOnClassSide methodsFor: 'pool variables' stamp: 'SebastianTleye 7/19/2013 18:32'! sharedPools ^OrderedCollection new.! ! !Trait method! sharedPools ^OrderedCollection new.! ! !Trait method! sharedPools ^OrderedCollection new.! ! !TApplyingOnClassSide methodsFor: 'pool variables' stamp: 'SebastianTleye 7/19/2013 18:32' prior: 46822449! sharedPools ^OrderedCollection new.! ! !Trait method! sharedPools ^OrderedCollection new.! ! !Trait method! sharedPools ^OrderedCollection new.! ! !TraitComposition methodsFor: 'enquiries' stamp: 'SebastianTleye 7/19/2013 16:02'! allSelectors ^ Array streamContents: [ :stream | self transformations do: [ :transformation | stream nextPutAll: transformation allSelectors ]]! ! !TraitComposition methodsFor: 'enquiries' stamp: 'SebastianTleye 7/19/2013 16:02' prior: 46822940! allSelectors ^ Array streamContents: [ :stream | self transformations do: [ :transformation | stream nextPutAll: transformation allSelectors ]]! ! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! Trait class removeSelector: #cleanUp! !Trait method! cleanUp "Flush the obsolete subclasses." self flushObsoleteSubclasses! ! TraitDescription class removeSelector: #cleanUp! TClassDescription classTrait removeSelector: #canZapMethodDictionary! TClassDescription classTrait removeSelector: #cleanUp! TBehavior removeSelector: #classPool! TBehavior removeSelector: #sharedPools! TClass classTrait removeSelector: #canZapMethodDictionary! TClass classTrait removeSelector: #cleanUp! TClass removeSelector: #addSelector:withMethod:notifying:! TClass removeSelector: #addSelectorSilently:withMethod:! TClass removeSelector: #compile:notifying:! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'TorstenBergmann 7/3/2013 20:58' prior: 45581341! initialize "Initialization code for MessageBrowser" super initialize. self windowIcon: self taskbarIcon. ! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'TorstenBergmann 7/3/2013 20:58' prior: 46824208! initialize "Initialization code for MessageBrowser" super initialize. self windowIcon: self taskbarIcon. ! ! !FinderUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/21/2012 10:04' prior: 45604393! initialize "Initialization code for FinderUI" super initialize. finder := nil. forceSearch := nil. searchingTextArea := nil. sourceTextArea := nil. useRegExCheckbox := nil. wrapBlockOrSelector := [: i | i asString ].! ! !FinderUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/21/2012 10:04' prior: 46824660! initialize "Initialization code for FinderUI" super initialize. finder := nil. forceSearch := nil. searchingTextArea := nil. sourceTextArea := nil. useRegExCheckbox := nil. wrapBlockOrSelector := [: i | i asString ].! ! Inspector removeSelector: #theme! Inspector removeSelector: #trash! ClassCommentVersionsBrowser removeSelector: #wantsPrettyDiffOption! TimeProfiler removeSelector: #expandAllFromNode:! MetacelloConfigurationBrowser removeSelector: #title! SmalltalkEditor class removeSelector: #initialize! SmalltalkEditor removeSelector: #selectionPosition:! SmalltalkEditor removeSelector: #wordAtCaret! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29'! testExplicitRequirementMethodsShouldBeImplementedInTheirUsers "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBExplicitRequirementMethodsRule new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29'! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBRepeteadMethodsInTheSuperclassRule new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29'! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBLocalMethodsOfAClassNotInItsTraitComposition new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29' prior: 46825695! testExplicitRequirementMethodsShouldBeImplementedInTheirUsers "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBExplicitRequirementMethodsRule new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29' prior: 46826038! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBRepeteadMethodsInTheSuperclassRule new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 7/19/2013 16:29' prior: 46826381! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBLocalMethodsOfAClassNotInItsTraitComposition new run. self assert: result isEmpty.! ! MCPackageTest removeSelector: #setUp! MCChangeNotificationTest removeSelector: #tearDown! ----End fileIn----! !MethodToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:00' prior: 45591390! initialize "Initialization code for MethodToolbar" methodHolder := nil asValueHolder. model := AbstractTool new. super initialize.! ! !MethodToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:00' prior: 46827962! initialize "Initialization code for MethodToolbar" methodHolder := nil asValueHolder. model := AbstractTool new. super initialize.! ! !WorkingCopyToolBar methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/12/2012 18:45' prior: 45604687! initialize "Initialization code for WorkingCopyToolBar" super initialize. workingCopyHolder := nil asValueHolder! ! !WorkingCopyToolBar methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/12/2012 18:45' prior: 46828457! initialize "Initialization code for WorkingCopyToolBar" super initialize. workingCopyHolder := nil asValueHolder! ! !ColorEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2012 19:15' prior: 45594157! initialize "Initialization code for ColorEditor" super initialize. color := Color black asValueHolder. morph := Morph new color: self color; extent: 25@25; yourself! ! !ColorEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2012 19:15' prior: 46828904! initialize "Initialization code for ColorEditor" super initialize. color := Color black asValueHolder. morph := Morph new color: self color; extent: 25@25; yourself! ! !MonticelloRepositoryBrowser methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/12/2012 18:41' prior: 45602439! initialize "Initialization code for MonticelloRepositoryBrowser" super initialize. order := self class order! ! !MonticelloRepositoryBrowser methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/12/2012 18:41' prior: 46829494! initialize "Initialization code for MonticelloRepositoryBrowser" super initialize. order := self class order! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 12/18/2012 17:14' prior: 45600557! initialize "Initialization code for ChangeSorterApplication" prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]. super initialize. self initializeAnnouncements. ! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 12/18/2012 17:14' prior: 46829955! initialize "Initialization code for ChangeSorterApplication" prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]. super initialize. self initializeAnnouncements. ! ! !STEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 18:18' prior: 45571303! initialize "Initialization code for BlocEditor" super initialize. object := nil asValueHolder! ! !STEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 18:18' prior: 46830759! initialize "Initialization code for BlocEditor" super initialize. object := nil asValueHolder! ! !BlocEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/11/2012 18:18' prior: 45567397! initialize "Initialization code for BlocEditor" super initialize. block := nil asValueHolder! ! !BlocEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/11/2012 18:18' prior: 46831159! initialize "Initialization code for BlocEditor" super initialize. block := nil asValueHolder! ! !PickListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/22/2013 00:07' prior: 45583499! initialize "Initialization code for PickList" wrapHolder := [ :i | i printString ] asValueHolder. pickedItemsHolder := OrderedCollection new asValueHolder. associationsWrapperToItem := Dictionary new asValueHolder. associationsItemToWrapper := Dictionary new asValueHolder. associationsIndexToWrapper := Dictionary new asValueHolder. labelClickableHolder := true asValueHolder. defaultValueHolder := false asValueHolder. blockToPerformOnWrappers := [:wrapper | ] asValueHolder. super initialize.! ! !PickListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/22/2013 00:07' prior: 46831566! initialize "Initialization code for PickList" wrapHolder := [ :i | i printString ] asValueHolder. pickedItemsHolder := OrderedCollection new asValueHolder. associationsWrapperToItem := Dictionary new asValueHolder. associationsItemToWrapper := Dictionary new asValueHolder. associationsIndexToWrapper := Dictionary new asValueHolder. labelClickableHolder := true asValueHolder. defaultValueHolder := false asValueHolder. blockToPerformOnWrappers := [:wrapper | ] asValueHolder. super initialize.! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 12/18/2012 17:14' prior: 45594608! initialize "Initialization code for DualChangeSorterApplication" super initialize. model := ChangeSorterModel new. isRefreshing := false. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:22' prior: 45594911! initializeWidgets "Initialization code for DualChangeSorterApplication" self instantiateModels: #( changeSorterLeft ChangeSorterApplication changeSorterRight ChangeSorterApplication ). self menusRegistration. self shortcutsRegistration. self setFocusOrder! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 12/18/2012 17:14' prior: 46832815! initialize "Initialization code for DualChangeSorterApplication" super initialize. model := ChangeSorterModel new. isRefreshing := false. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:22' prior: 46833180! initializeWidgets "Initialization code for DualChangeSorterApplication" self instantiateModels: #( changeSorterLeft ChangeSorterApplication changeSorterRight ChangeSorterApplication ). self menusRegistration. self shortcutsRegistration. self setFocusOrder! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 12:50'! testTraitExplicitRequirementMethodsMustBeImplementedInTheClassOrInASuperclass self assertValidLintRule: RBExplicitRequirementMethodsRule new! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 14:30'! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses self assertValidLintRule: RBRepeteadMethodsInTheSuperclassRule new! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 13:45'! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits self assertValidLintRule: RBLocalMethodsOfAClassNotInItsTraitComposition new! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:29' prior: 46193261! differentMethodsWithSameSelectorBetween: firstClass and: secondClass | repeatedSelectors differentMethodsWithSameSelector | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. differentMethodsWithSameSelector := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. m1 sourceCode ~= m2 sourceCode]. ^differentMethodsWithSameSelector.! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:30' prior: 46193816! repeatedMethodsThatDoNotAccessInstanceVariablesBetween: firstClass and: secondClass | repeatedSelectors repeatedMethodsThatDoNotAccessInstanceVariables | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. repeatedMethodsThatDoNotAccessInstanceVariables := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. ((m1 sourceCode = m2 sourceCode) and: [ m1 hasInstVarRef not ]) and: [ m2 hasInstVarRef not ]]. ^repeatedMethodsThatDoNotAccessInstanceVariables.! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 12:50' prior: 46834286! testTraitExplicitRequirementMethodsMustBeImplementedInTheClassOrInASuperclass self assertValidLintRule: RBExplicitRequirementMethodsRule new! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 14:30' prior: 46834508! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses self assertValidLintRule: RBRepeteadMethodsInTheSuperclassRule new! ! !ClassTestCase methodsFor: 'tests' stamp: 'SebastianTleye 7/19/2013 13:45' prior: 46834716! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits self assertValidLintRule: RBLocalMethodsOfAClassNotInItsTraitComposition new! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:29' prior: 46834948! differentMethodsWithSameSelectorBetween: firstClass and: secondClass | repeatedSelectors differentMethodsWithSameSelector | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. differentMethodsWithSameSelector := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. m1 sourceCode ~= m2 sourceCode]. ^differentMethodsWithSameSelector.! ! !ClassTestCase methodsFor: 'utils' stamp: 'SebastianTleye 7/19/2013 15:30' prior: 46835519! repeatedMethodsThatDoNotAccessInstanceVariablesBetween: firstClass and: secondClass | repeatedSelectors repeatedMethodsThatDoNotAccessInstanceVariables | repeatedSelectors := firstClass localSelectors intersection: secondClass localSelectors. repeatedMethodsThatDoNotAccessInstanceVariables := repeatedSelectors select: [ :selector | | m1 m2| m1 := firstClass>>selector. m2 := secondClass>>selector. ((m1 sourceCode = m2 sourceCode) and: [ m1 hasInstVarRef not ]) and: [ m2 hasInstVarRef not ]]. ^repeatedMethodsThatDoNotAccessInstanceVariables.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/22/2013 13:46' prior: 45351013! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#name) browse. browser changed. browser close.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/22/2013 13:46' prior: 46838175! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#name) browse. browser changed. browser close.! ! !RadioButtonGroup methodsFor: 'initialization' stamp: '' prior: 45567235! initialize "Initialization code for RadioButtonGroup" super initialize. buttons := OrderedCollection new.! ! !RadioButtonGroup methodsFor: 'initialization' stamp: '' prior: 46838580! initialize "Initialization code for RadioButtonGroup" super initialize. buttons := OrderedCollection new.! ! !SearchableTree methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/18/2013 17:39' prior: 45580068! initialize "Initialization code for FilteringTree" super initialize. roots := OrderedCollection new asValueHolder! ! !SearchableTree methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/18/2013 17:39' prior: 46838985! initialize "Initialization code for FilteringTree" super initialize. roots := OrderedCollection new asValueHolder! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:27' prior: 45590458! initialize "Initialization code for WidgetSetter" model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer weak on: WidgetBuilt do: [ self registerEvents ]! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/14/2013 19:27' prior: 46839437! initialize "Initialization code for WidgetSetter" model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer weak on: WidgetBuilt do: [ self registerEvents ]! ! !AbstractApiSetter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 20:35' prior: 45587338! initialize "Initialization code for BooleanApiSetter" method := nil asValueHolder. model := nil asValueHolder. retrievingMethod := nil asValueHolder. isSetting := false. super initialize. self registerEvents! ! !AbstractApiSetter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 20:35' prior: 46840564! initialize "Initialization code for BooleanApiSetter" method := nil asValueHolder. model := nil asValueHolder. retrievingMethod := nil asValueHolder. isSetting := false. super initialize. self registerEvents! ! !InputWidget methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/26/2013 13:58' prior: 45589089! initialize "Initialization code for InputWidget" okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !InputWidget methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/26/2013 13:58' prior: 46841216! initialize "Initialization code for InputWidget" okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 18:14' prior: 45580764! initialize "Initialization code for MessageBrowser" textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak on: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 18:14' prior: 46841759! initialize "Initialization code for MessageBrowser" textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak on: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37' prior: 45605766! initialize "Initialization code for AbstractBasicWidget" super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37' prior: 46842978! initialize "Initialization code for AbstractBasicWidget" super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:27' prior: 45589727! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:27' prior: 46845553! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50' prior: 45605471! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50' prior: 46847104! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !WindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27' prior: 45585231! initialize "Initialization code for WindowModel" super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !WindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/19/2013 13:27' prior: 46847774! initialize "Initialization code for WindowModel" super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 00:53' prior: 45596432! initialize "Initialization code for TabModel" super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/9/2013 00:53' prior: 46848514! initialize "Initialization code for TabModel" super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !NewListModel methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 15:11' prior: 45584070! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !NewListModel methodsFor: 'initialize' stamp: 'ClementBera 5/3/2013 15:11' prior: 46850492! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:15' prior: 46674565! initialize "Initialization code for ButtonComposableModel" super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self on: Character space asKeyCombination do: [ self action ].! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:15' prior: 46852904! initialize "Initialization code for ButtonComposableModel" super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self on: Character space asKeyCombination do: [ self action ].! ! !IconListModel methodsFor: 'initialization' stamp: '' prior: 45570302! initialize "Initialization code for IconListModel" super initialize. iconHolder := [:item | nil ] asValueHolder.! ! !IconListModel methodsFor: 'initialization' stamp: '' prior: 46854645! initialize "Initialization code for IconListModel" super initialize. iconHolder := [:item | nil ] asValueHolder.! ! !DropListModel methodsFor: 'initialization' stamp: 'SeanDeNigris 4/17/2013 22:21' prior: 45582770! initialize "Initialization code for DropListModel" super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !DropListModel methodsFor: 'initialization' stamp: 'SeanDeNigris 4/17/2013 22:21' prior: 46855057! initialize "Initialization code for DropListModel" super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06' prior: 45587912! initialize "Initialization code for TreeNodeModel" super initialize. item := nil asValueHolder.! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 4/17/2013 20:06' prior: 46856040! initialize "Initialization code for TreeNodeModel" super initialize. item := nil asValueHolder.! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 45586719! initialize "Initialization code for TextComposableModel" super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. self registerEvents. self registerEventsForShout! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 46856452! initialize "Initialization code for TextComposableModel" super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. self registerEvents. self registerEventsForShout! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'PavelKrivanek 8/22/2012 17:10' prior: 45567565! initialize "Initialization code for TextComposableModel" super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. autoAccept := false asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. autoAccept whenChangedDo: [:bool | self widget ifNotNil: [:w | w autoAccept: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'PavelKrivanek 8/22/2012 17:10' prior: 46857794! initialize "Initialization code for TextComposableModel" super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. autoAccept := false asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. autoAccept whenChangedDo: [:bool | self widget ifNotNil: [:w | w autoAccept: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !LabelModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/16/2012 18:07' prior: 45580245! initialize "Initialization code for LabelModel" super initialize. textHolder := '' asValueHolder. enabledHolder := true asValueHolder. textHolder whenChangedDo: [ self changed: #getText ].! ! !LabelModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/16/2012 18:07' prior: 46859269! initialize "Initialization code for LabelModel" super initialize. textHolder := '' asValueHolder. enabledHolder := true asValueHolder. textHolder whenChangedDo: [ self changed: #getText ].! ! !SliderModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:34' prior: 45591732! initialize "Initialization code for SliderModel" super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !SliderModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:34' prior: 46859870! initialize "Initialization code for SliderModel" super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:17' prior: 45599493! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/18/2013 14:17' prior: 46862000! initialize "initialization code for CheckBox" super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !PanelMorphWithSplitters methodsFor: 'initialization' stamp: '' prior: 45604060! initialize "Initialization code for PanelMorphWithSplitter" super initialize. paneMorphs := OrderedCollection new.! ! !PanelMorphWithSplitters methodsFor: 'initialization' stamp: '' prior: 46863521! initialize "Initialization code for PanelMorphWithSplitter" super initialize. paneMorphs := OrderedCollection new.! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/18/2013 17:01' prior: 45588947! initialize "Initialization code for TokenTreeFilter" super initialize. token := ''.! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/18/2013 17:01' prior: 46863956! initialize "Initialization code for TokenTreeFilter" super initialize. token := ''.! ! !IntegerEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 19:36' prior: 45600385! initialize "Initialization code for BlocEditor" super initialize. integer := 0 asValueHolder! ! !IntegerEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/12/2012 19:36' prior: 46864350! initialize "Initialization code for BlocEditor" super initialize. integer := 0 asValueHolder! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/11/2012 03:36' prior: 45571466! initialize "Initialization code for SubwidgetItem" super initialize. model := nil asValueHolder. initialExtent := 400@25. validated := false asValueHolder.! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/11/2012 03:36' prior: 46864760! initialize "Initialization code for SubwidgetItem" super initialize. model := nil asValueHolder. initialExtent := 400@25. validated := false asValueHolder.! ! !TreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/18/2013 14:00' prior: 45900838! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := source scrollerSubMorphFromPoint: event position. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2013 11:13' prior: 45577327! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item copy ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 7/18/2013 14:00' prior: 46865307! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := source scrollerSubMorphFromPoint: event position. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/16/2013 11:13' prior: 46865631! initialize "Initialization code for AlainTreeModel" super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item copy ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 7/18/2013 15:11' prior: 45552864! defaultSpec ^ {#TreeSpec. #model:. #(model treeModel). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 7/18/2013 15:11' prior: 46869047! defaultSpec ^ {#TreeSpec. #model:. #(model treeModel). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! IntegerApiSetter class removeSelector: #spec! ColorApiSetter class removeSelector: #spec! TextInputFieldModel class removeSelector: #title! TextModel removeSelector: #owner! MultiColumnListModel removeSelector: #getIndex! StApiSetter class removeSelector: #spec! BlockApiSetter class removeSelector: #spec! BooleanApiSetter class removeSelector: #spec! TestCase class removeSelector: #run! TestResource removeSelector: #initialize! !Trait method! assert: actual equals: expected ^ self assert: expected = actual description: [self comparingStringBetween: actual and: expected]! ! TestAsserter removeSelector: #assert:equals:! !Trait method! deny: aBooleanOrBlock self assert: aBooleanOrBlock value not ! ! TestAsserter removeSelector: #deny:! !Trait method! deny: aBooleanOrBlock description: aString self assert: aBooleanOrBlock value not description: aString ! ! TestAsserter removeSelector: #deny:description:! !Trait method! deny: aBooleanOrBlock description: aString resumable: resumableBoolean self assert: aBooleanOrBlock value not description: aString resumable: resumableBoolean ! ! TestAsserter removeSelector: #deny:description:resumable:! !Trait method! executeShould: aBlock inScopeOf: anExceptionalEvent ^[aBlock value. false] on: anExceptionalEvent do: [:ex | ex return: true] ! ! TestAsserter removeSelector: #executeShould:inScopeOf:! !Trait method! should: aBlock raise: anExceptionalEvent ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) ! ! TestAsserter removeSelector: #should:raise:! !Trait method! should: aBlock raise: anExceptionalEvent description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) description: aString ! ! TestAsserter removeSelector: #should:raise:description:! !Trait method! shouldnt: aBlock raise: anExceptionalEvent ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! TestAsserter removeSelector: #shouldnt:raise:! !Trait method! shouldnt: aBlock raise: anExceptionalEvent description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! TestAsserter removeSelector: #shouldnt:raise:description:! OCAbstractVariable removeSelector: #isLiteral! EmptyLayout removeSelector: #fieldSize! EmptyLayout removeSelector: #hasFields! EmptyLayout removeSelector: #hasSlots! HandMorph removeSelector: #simulateKeyStrokes:! ----End fileIn----! SortedCollectionTest removeSelector: #testAllButLast! SortedCollectionTest removeSelector: #testsEndsWith! SortedCollectionTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! SortedCollectionTest removeSelector: #testRemoveLastNElements! SortedCollectionTest removeSelector: #testFirstNElements! SortedCollectionTest removeSelector: #testTWrite! SortedCollectionTest removeSelector: #test0TStructuralEqualityTest! SortedCollectionTest removeSelector: #testCopyWithoutFirst! SortedCollectionTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SortedCollectionTest removeSelector: #testBefore! SortedCollectionTest removeSelector: #testLastIndexOfDuplicate! SortedCollectionTest removeSelector: #testIncludesAnyNoneThere! SortedCollectionTest removeSelector: #testAsArray! SortedCollectionTest removeSelector: #testWith! SortedCollectionTest removeSelector: #testCopyNotSame! SortedCollectionTest removeSelector: #testUnionOfEmpties! SortedCollectionTest removeSelector: #testTWriteTwice! SortedCollectionTest removeSelector: #testCopyUpToWithDuplicate! SortedCollectionTest removeSelector: #testFindFirst! SortedCollectionTest removeSelector: #testWithIndexCollect! SortedCollectionTest removeSelector: #testTAddAll! SortedCollectionTest removeSelector: #testPrintElementsOn! SortedCollectionTest removeSelector: #testTAddWithOccurences! SortedCollectionTest removeSelector: #testRemoveFirst! SortedCollectionTest removeSelector: #testCopyWithSequenceable! SortedCollectionTest removeSelector: #testsEndsWithEmpty! SortedCollectionTest removeSelector: #testCopyUpToLastWithDuplicate! SortedCollectionTest removeSelector: #test0FixtureIterateSequencedReadableTest! SortedCollectionTest removeSelector: #testRemoveIfAbsent! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastEmpty! SortedCollectionTest removeSelector: #testAtOutOfBounds! SortedCollectionTest removeSelector: #testOccurrencesOfEmpty! SortedCollectionTest removeSelector: #testOfSize! SortedCollectionTest removeSelector: #testIsEmpty! SortedCollectionTest removeSelector: #testWithCollect! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastOne! SortedCollectionTest removeSelector: #testIfEmpty! SortedCollectionTest removeSelector: #test0FixtureSetAritmeticTest! SortedCollectionTest removeSelector: #test0FixtureCopyWithReplacementForSorted! SortedCollectionTest removeSelector: #testPrintOnDelimiter! SortedCollectionTest removeSelector: #test0FixtureTConvertTest! SortedCollectionTest removeSelector: #testTAddTwice! SortedCollectionTest removeSelector: #test0FixtureIncludeWithIdentityTest! SortedCollectionTest removeSelector: #testAsStringOnDelimiterMore! SortedCollectionTest removeSelector: #testRemoveElementThatExists! SortedCollectionTest removeSelector: #testRemoveLastNElementsNElements! SortedCollectionTest removeSelector: #testIdentityIncludesNonSpecificComportement! SortedCollectionTest removeSelector: #testDetectSequenced! SortedCollectionTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SortedCollectionTest removeSelector: #testIncludesAnyAllThere! SortedCollectionTest removeSelector: #testPairsDo! SortedCollectionTest removeSelector: #testLastNElements! SortedCollectionTest removeSelector: #testCollectFromTo! SortedCollectionTest removeSelector: #testPrintNameOn! SortedCollectionTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SortedCollectionTest removeSelector: #testIndexOfStartingAtDuplicate! SortedCollectionTest removeSelector: #testAsCommaStringMore! SortedCollectionTest removeSelector: #testCopyNonEmptyWith! SortedCollectionTest removeSelector: #testCopyAfterLastEmpty! SortedCollectionTest removeSelector: #testCopyEmptyMethod! SortedCollectionTest removeSelector: #testIfNotEmptyDo! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! SortedCollectionTest removeSelector: #testCopyAfterWithDuplicate! SortedCollectionTest removeSelector: #testAsSortedCollectionWithSortBlock! SortedCollectionTest removeSelector: #testWithAll! SortedCollectionTest removeSelector: #test0FixtureOccurrencesTest! SortedCollectionTest removeSelector: #testWithDo! SortedCollectionTest removeSelector: #testAllButFirstDo! SortedCollectionTest removeSelector: #testWithDoError! SortedCollectionTest removeSelector: #testAtWrap! SortedCollectionTest removeSelector: #testCopyNonEmptyWithout! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! SortedCollectionTest removeSelector: #test0FixtureEmptyTest! SortedCollectionTest removeSelector: #testKeysAndValuesDo! SortedCollectionTest removeSelector: #testIntersectionItself! SortedCollectionTest removeSelector: #testAsOrderedCollection! SortedCollectionTest removeSelector: #testOccurrencesOf! SortedCollectionTest removeSelector: #test0CopyTest! SortedCollectionTest removeSelector: #testIfNotEmptyDoifNotEmpty! SortedCollectionTest removeSelector: #testIdentityIndexOfDuplicate! SortedCollectionTest removeSelector: #testsBeginsWithEmpty! SortedCollectionTest removeSelector: #testAsSortedCollection! SortedCollectionTest removeSelector: #testsBeginsWith! SortedCollectionTest removeSelector: #testCopyEmptyWithout! SortedCollectionTest removeSelector: #testHasEqualElements! SortedCollectionTest removeSelector: #testUnion! SortedCollectionTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! SortedCollectionTest removeSelector: #testDo! SortedCollectionTest removeSelector: #testEqualSign! SortedCollectionTest removeSelector: #test0TSequencedStructuralEqualityTest! SortedCollectionTest removeSelector: #testCopySameClass! SortedCollectionTest removeSelector: #testAsIdentitySetWithIdentityEqualsElements! SortedCollectionTest removeSelector: #testAfter! SortedCollectionTest removeSelector: #testAllButFirstNElements! SortedCollectionTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! SortedCollectionTest removeSelector: #testCopyAfter! SortedCollectionTest removeSelector: #test0FixturePrintTest! SortedCollectionTest removeSelector: #testIfEmptyifNotEmpty! SortedCollectionTest removeSelector: #testReverseWithDo! SortedCollectionTest removeSelector: #testCopyFromTo! SortedCollectionTest removeSelector: #testIncludesAllNoneThere! SortedCollectionTest removeSelector: #testKeysAndValuesDoEmpty! SortedCollectionTest removeSelector: #testAsSetWithEqualsElements! SortedCollectionTest removeSelector: #testPrintOnDelimiterLast! SortedCollectionTest removeSelector: #testAsBag! SortedCollectionTest removeSelector: #testCopyAfterLastWithDuplicate! SortedCollectionTest removeSelector: #test0FixtureConverAsSortedTest! SortedCollectionTest removeSelector: #testCopyEmptyWith! SortedCollectionTest removeSelector: #testRemoveAt! SortedCollectionTest removeSelector: #testCopyReplaceAllWithForSorted! SortedCollectionTest removeSelector: #testStoreOn! SortedCollectionTest removeSelector: #numberOfSimilarElementsInIntersection! SortedCollectionTest removeSelector: #testOccurrencesOfForMultipliness! SortedCollectionTest removeSelector: #testRemoveElementReallyRemovesElement! SortedCollectionTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SortedCollectionTest removeSelector: #testShallowCopy! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! SortedCollectionTest removeSelector: #testAsIdentitySet! SortedCollectionTest removeSelector: #testWithWithWith! SortedCollectionTest removeSelector: #testAsByteArray! SortedCollectionTest removeSelector: #testIfNotEmpty! SortedCollectionTest removeSelector: #testAsSet! SortedCollectionTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! SortedCollectionTest removeSelector: #testIsEmptyOrNil! SortedCollectionTest removeSelector: #testIncludesElementIsThere! SortedCollectionTest removeSelector: #testDifferenceWithSeparateCollection! SortedCollectionTest removeSelector: #testAtLastError! SortedCollectionTest removeSelector: #testCopyUpToLastEmpty! SortedCollectionTest removeSelector: #testCopyUpToLast! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! SortedCollectionTest removeSelector: #testPrintOn! SortedCollectionTest removeSelector: #testCopyUpTo! SortedCollectionTest removeSelector: #testRemoveElementFromEmpty! SortedCollectionTest removeSelector: #testReversed! SortedCollectionTest removeSelector: #testLast! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastMore! SortedCollectionTest removeSelector: #testTAdd! SortedCollectionTest removeSelector: #test0FixtureIncludeTest! SortedCollectionTest removeSelector: #test0FixtureIndexAccessFotMultipliness! SortedCollectionTest removeSelector: #testIfNotEmptyifEmpty! SortedCollectionTest removeSelector: #testIncludesElementIsNotThere! SortedCollectionTest removeSelector: #testRemoveLastNotPresent! SortedCollectionTest removeSelector: #testLastIndexOfStartingAtDuplicate! SortedCollectionTest removeSelector: #testCopyAfterEmpty! SortedCollectionTest removeSelector: #testReverseDo! SortedCollectionTest removeSelector: #testCopyEquals! SortedCollectionTest removeSelector: #testIndexOfDuplicate! SortedCollectionTest removeSelector: #testCopyEmptyWithoutAll! SortedCollectionTest removeSelector: #testAtPin! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithNewElement! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAll! SortedCollectionTest removeSelector: #testAtLastIfAbsent! SortedCollectionTest removeSelector: #testAllButLastNElements! SortedCollectionTest removeSelector: #testCopyAfterLast! SortedCollectionTest removeSelector: #testFindFirstNotIn! SortedCollectionTest removeSelector: #testAfterIfAbsent! SortedCollectionTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SortedCollectionTest removeSelector: #testAsCommaStringEmpty! SortedCollectionTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! SortedCollectionTest removeSelector: #testFindLast! SortedCollectionTest removeSelector: #test0FixtureCreationWithTest! SortedCollectionTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! SortedCollectionTest removeSelector: #test0FixtureRequirementsOfTAddTest! SortedCollectionTest removeSelector: #testReverseDoEmpty! SortedCollectionTest removeSelector: #testWithWith! SortedCollectionTest removeSelector: #testFirstSecondThird! SortedCollectionTest removeSelector: #test0FixtureTRemoveTest! SortedCollectionTest removeSelector: #testRemoveAtNotPresent! SortedCollectionTest removeSelector: #testAtLast! SortedCollectionTest removeSelector: #testAsStringOnDelimiterEmpty! SortedCollectionTest removeSelector: #testIntersectionEmpty! SortedCollectionTest removeSelector: #test0FixtureRemoveByIndexTest! SortedCollectionTest removeSelector: #testAtRandom! SortedCollectionTest removeSelector: #testIdentityIndexOfIAbsentDuplicate! SortedCollectionTest removeSelector: #assertSameContents:whenConvertedTo:! SortedCollectionTest removeSelector: #testEqualSignForSequenceableCollections! SortedCollectionTest removeSelector: #testOccurrencesOfNotIn! SortedCollectionTest removeSelector: #test0FixtureBeginsEndsWithTest! SortedCollectionTest removeSelector: #testDifferenceWithNonNullIntersection! SortedCollectionTest removeSelector: #testAtIfAbsent! SortedCollectionTest removeSelector: #testRemoveFirstNElementsNotPresent! SortedCollectionTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SortedCollectionTest removeSelector: #test0FixtureSubcollectionAccessTest! SortedCollectionTest removeSelector: #testLastIndexOfIfAbsentDuplicate! SortedCollectionTest removeSelector: #test0FixtureSequencedElementAccessTest! SortedCollectionTest removeSelector: #testIntersectionBasic! SortedCollectionTest removeSelector: #testDifference! SortedCollectionTest removeSelector: #testAllButFirst! SortedCollectionTest removeSelector: #testAsIdentitySetWithEqualsElements! SortedCollectionTest removeSelector: #testNotEmpty! SortedCollectionTest removeSelector: #testRemoveAllSuchThat! SortedCollectionTest removeSelector: #testAllButLastDo! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfForMultipliness! SortedCollectionTest removeSelector: #testPairsCollect! SortedCollectionTest removeSelector: #testShallowCopyEmpty! SortedCollectionTest removeSelector: #testRemoveLast! SortedCollectionTest removeSelector: #testWithIndexDo! SortedCollectionTest removeSelector: #testReverse! SortedCollectionTest removeSelector: #testBeforeIfAbsent! SortedCollectionTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! SortedCollectionTest removeSelector: #testCopyUpToEmpty! SortedCollectionTest removeSelector: #testWithWithWithWith! SortedCollectionTest removeSelector: #testFindLastNotIn! SortedCollectionTest removeSelector: #containsAll:of:andOf:! SortedCollectionTest removeSelector: #testRemoveFirstNotPresent! SortedCollectionTest removeSelector: #test0FixtureCopySameContentsTest! SortedCollectionTest removeSelector: #testFromToDo! SortedCollectionTest removeSelector: #testAsCommaStringOne! SortedCollectionTest removeSelector: #testMiddle! SortedCollectionTest removeSelector: #testCopyFromToWithForSorted! SortedCollectionTest removeSelector: #testAt! SortedCollectionTest removeSelector: #testIndexOfIfAbsentDuplicate! SortedCollectionTest removeSelector: #testAsStringOnDelimiterOne! SortedCollectionTest removeSelector: #testRemoveFirstNElements! SortedCollectionTest removeSelector: #testWithWithWithWithWith! SortedCollectionTest removeSelector: #testIfEmptyifNotEmptyDo! SortedCollectionTest removeSelector: #testWithCollectError! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsIdentitySetWithIdentityEqualsElements | result | result := self collectionWithIdentical asIdentitySet. " Only one element should have been removed as two elements are equals with Identity equality" self assert: result size = (self collectionWithIdentical size - 1). self collectionWithIdentical do: [ :each | (self collectionWithIdentical occurrencesOf: each) > 1 ifTrue: [ "the two elements equals only with classic equality shouldn't 'have been removed" self assert: (result asOrderedCollection occurrencesOf: each) = 1 " the other elements are still here" ] ifFalse: [ self assert: (result asOrderedCollection occurrencesOf: each) = 1 ] ]. self assert: result class = IdentitySet! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testDo! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testTAdd | added collection | collection :=self otherCollection . added := collection add: self element. self assert: added == self element. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: self element) . self assert: (self collectionWithElement includes: self element). ! ! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testTAddIfNotPresentWithNewElement | added oldSize collection elem | collection := self otherCollection . oldSize := collection size. elem := self element . self deny: (collection includes: elem ). added := collection addIfNotPresent: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection size = (oldSize + 1)). ! ! !Trait method! testRemoveLast | collection element result oldSize | collection := self collectionWith5Elements . element := collection last. oldSize := collection size. result := collection removeLast. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize collection anElement | collection := self collectionWithElement . oldSize := collection size. anElement := self element . self assert: (collection includes: anElement ). added := collection addIfNotPresent: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: collection size = oldSize! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! test0FixtureRequirementsOfTAddTest self shouldnt: [ self collectionWithElement ] raise: Exception. self shouldnt: [ self otherCollection ] raise: Exception. self shouldnt: [ self element ] raise: Exception. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testRemoveLastNElementsNElements self should: [self empty removeLast: 2] raise: Error.! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self shouldnt: [self collectionWithNonIdentitySameAtEndAndBegining ] raise: Error. collection := self collectionWithNonIdentitySameAtEndAndBegining . self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testTWrite | added collection elem | collection := self otherCollection . elem := self element . added := collection write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ) . self assert: (collection includes: elem ). ! ! !Trait method! testTAddTwice | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement ; add: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement ). self assert: collection size = (oldSize + 2)! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testCopyFromToWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureRemoveByIndexTest self shouldnt: [self collectionWith5Elements ] raise: Error. self assert: self collectionWith5Elements size = 5.! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testTAddAll | added collection toBeAdded | collection := self collectionWithElement . toBeAdded := self otherCollection . added := collection addAll: toBeAdded . self assert: added == toBeAdded . "test for identiy because #addAll: has not reason to copy its parameter." self assert: (collection includesAll: toBeAdded )! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testTWriteTwice | added oldSize collection elem | collection := self collectionWithElement . elem := self element . oldSize := collection size. added := collection write: elem ; write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ). self assert: collection size = (oldSize + 2)! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! testRemoveFirst | collection element result oldSize | collection := self collectionWith5Elements . element := collection first. oldSize := collection size. result := collection removeFirst. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testRemoveAtNotPresent | | self should: [self empty removeAt: 2] raise: Error.! ! !Trait method! testTAddWithOccurences | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement withOccurrences: 5. self assert: added == anElement. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement). self assert: collection size = (oldSize + 5)! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! testRemoveFirstNElements | collection elements result oldSize | collection := self collectionWith5Elements . elements := {collection first. collection at:2}. oldSize := collection size. result := collection removeFirst: 2. self assert: result = elements . self assert: collection size = (oldSize - 2).! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testRemoveFirstNotPresent self should: [self empty removeFirst] raise: Error.! ! !Trait method! testRemoveLastNElements | collection result oldSize elements | collection := self collectionWith5Elements . elements := { (collection at: (4)). collection last. }. oldSize := collection size. result := (collection removeLast: 2). self assert: result = elements. self assert: collection size = (oldSize - 2).! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIdentityIndexOfIAbsentDuplicate "self debug: #testIdentityIndexOfIfAbsent" | collection element elementCopy | collection := self collectionWithNonIdentitySameAtEndAndBegining . element := collection last. elementCopy := element copy. self deny: element == elementCopy . self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = collection size. self assert: (collection identityIndexOf: elementCopy ifAbsent: [ 55 ]) = 55! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testCopyReplaceAllWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceAll: collection with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceAll: collection with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testRemoveLastNotPresent self should: [self empty removeLast] raise: Error.! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testRemoveAt | collection element result oldSize | collection := self collectionWith5Elements . element := collection at: 3. oldSize := collection size. result := collection removeAt: 3. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testRemoveFirstNElementsNotPresent self should: [self empty removeFirst: 2] raise: Error.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! test0FixtureCopyWithReplacementForSorted self shouldnt: [self collectionOfSize5 ] raise: Error. self assert: self collectionOfSize5 size = 5. self shouldnt: [self replacementCollection ] raise: Error. self deny: self replacementCollection isEmpty. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty.! ! CircleMorph removeSelector: #forwardDirection:! CircleMorph removeSelector: #heading! CircleMorph removeSelector: #forwardDirection! CircleMorph removeSelector: #setDirectionFrom:! SetTest removeSelector: #numberOfSimilarElementsInIntersection! SetTest removeSelector: #testRemoveElementReallyRemovesElement! SetTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SetTest removeSelector: #testWithWithWith! SetTest removeSelector: #testAsIdentitySet! SetTest removeSelector: #test0TStructuralEqualityTest! SetTest removeSelector: #testAsByteArray! SetTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SetTest removeSelector: #testConcatenationWithDuplicate! SetTest removeSelector: #testIncludesAnyNoneThere! SetTest removeSelector: #testIncludesElementIsThere! SetTest removeSelector: #testWith! SetTest removeSelector: #testDifferenceWithSeparateCollection! SetTest removeSelector: #testUnionOfEmpties! SetTest removeSelector: #testAsArray! SetTest removeSelector: #test0FixtureCloneTest! SetTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! SetTest removeSelector: #testPrintOn! SetTest removeSelector: #testPrintElementsOn! SetTest removeSelector: #testCopyNotSame! SetTest removeSelector: #testConcatenationWithEmpty! SetTest removeSelector: #testRemoveElementFromEmpty! SetTest removeSelector: #testAsStringOnDelimiterLastMore! SetTest removeSelector: #testAsStringOnDelimiterLastEmpty! SetTest removeSelector: #test0FixtureIncludeTest! SetTest removeSelector: #testOccurrencesOfEmpty! SetTest removeSelector: #testCopyEmpty! SetTest removeSelector: #testAsStringOnDelimiterLastOne! SetTest removeSelector: #test0FixtureSetAritmeticTest! SetTest removeSelector: #testPrintOnDelimiter! SetTest removeSelector: #test0FixtureIncludeWithIdentityTest! SetTest removeSelector: #test0FixtureRequirementsOfTGrowableTest! SetTest removeSelector: #test0FixtureTConvertTest! SetTest removeSelector: #test0TSizeTest! SetTest removeSelector: #testCopyEquals! SetTest removeSelector: #testAsStringOnDelimiterMore! SetTest removeSelector: #testRemoveElementThatExists! SetTest removeSelector: #testIdentityIncludesNonSpecificComportement! SetTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SetTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SetTest removeSelector: #testIncludesAnyAllThere! SetTest removeSelector: #testAsCommaStringEmpty! SetTest removeSelector: #test0FixtureCreationWithTest! SetTest removeSelector: #testCopyNonEmpty! SetTest removeSelector: #testPrintNameOn! SetTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SetTest removeSelector: #testWithWith! SetTest removeSelector: #test0FixtureTRemoveTest! SetTest removeSelector: #testAsCommaStringMore! SetTest removeSelector: #testAsStringOnDelimiterEmpty! SetTest removeSelector: #testIntersectionEmpty! SetTest removeSelector: #assertSameContents:whenConvertedTo:! SetTest removeSelector: #testAsSortedCollectionWithSortBlock! SetTest removeSelector: #testOccurrencesOfNotIn! SetTest removeSelector: #testWithAll! SetTest removeSelector: #testDifferenceWithNonNullIntersection! SetTest removeSelector: #testSize! SetTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SetTest removeSelector: #testCopyCreatesNewObject! SetTest removeSelector: #test0FixtureOccurrencesTest! SetTest removeSelector: #testConcatenation! SetTest removeSelector: #testCopyNonEmptyWithout! SetTest removeSelector: #testDifference! SetTest removeSelector: #testIntersectionBasic! SetTest removeSelector: #testIntersectionItself! SetTest removeSelector: #testAsOrderedCollection! SetTest removeSelector: #testOccurrencesOf! SetTest removeSelector: #test0CopyTest! SetTest removeSelector: #testRemoveAllSuchThat! SetTest removeSelector: #testEqualSign! SetTest removeSelector: #testAsSortedCollection! SetTest removeSelector: #test0FixtureConcatenationTest! SetTest removeSelector: #testWithWithWithWith! SetTest removeSelector: #testCopySameClass! SetTest removeSelector: #containsAll:of:andOf:! SetTest removeSelector: #testAsCommaStringOne! SetTest removeSelector: #test0FixturePrintTest! SetTest removeSelector: #testIncludesAllNoneThere! SetTest removeSelector: #testWithWithWithWithWith! SetTest removeSelector: #testPrintOnDelimiterLast! SetTest removeSelector: #testAsBag! SetTest removeSelector: #testAsStringOnDelimiterOne! SetTest removeSelector: #test0FixtureConverAsSortedTest! SetTest removeSelector: #testAddAlreadyThereDoesNotCount! SetTest removeSelector: #testStoreOn! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! !Trait method! testPrintOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)).]. ].! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testAsCommaStringMore | result resultAnd index allElementsAsString tmp | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . tmp :=OrderedCollection new. self nonEmpty do: [ :each | tmp add: each asString]. "verifying result :" index := 1. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ].! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result allElementsAsString tmp | delim := ', '. result:=''. tmp:= self nonEmpty collect:[:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ].! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString tmp | delim := ', '. last := 'and'. result:=''. tmp := self nonEmpty collect: [:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ]. ! ! !Trait method! testAsCommaStringOne self nonEmpty1Element do: [:each | self assert: each asString =self nonEmpty1Element asCommaString. self assert: each asString=self nonEmpty1Element asCommaStringAnd.]. ! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! test0FixtureConcatenationTest self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self empty ]raise: Error. self assert: self empty isEmpty! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testConcatenationWithEmpty | result | result := self firstCollection , self empty. self assert: result = self firstCollection! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)). ].! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)) ].! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testConcatenation | collection1 collection2 result | collection1 := self firstCollection . collection2 := self secondCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. collection2 do:[ :each | self assert: (result includes: each)]. ! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAddAlreadyThereDoesNotCount | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement add: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0FixtureRequirementsOfTGrowableTest self shouldnt: [self empty] raise: Exception. self shouldnt: [self nonEmpty] raise: Exception. self shouldnt: [self element] raise: Exception. self shouldnt: [self elementNotIn] raise: Exception. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotIn).! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testConcatenationWithDuplicate | collection1 collection2 result | collection1 := self firstCollection . collection2 := self firstCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. self assert: result size = collection1 size.! ! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. ].! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! MorphicUIManager removeSelector: #questionWithoutCancel:! MorphicUIManager removeSelector: #newWindowFor:title:! MorphicUIManager removeSelector: #newGroupbox! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:getEnabled:help:! MorphicUIManager removeSelector: #deny:! MorphicUIManager removeSelector: #newGroupbox:! MorphicUIManager removeSelector: #theme! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:getEnabled:help:! MorphicUIManager removeSelector: #fileOpen:extensions:path:! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:labelForm:help:! MorphicUIManager removeSelector: #newPanel! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:help:! MorphicUIManager removeSelector: #centeredAlert:title:configure:! MorphicUIManager removeSelector: #newMenuFor:! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:getEnabled:label:help:! MorphicUIManager removeSelector: #newAlphaImage:help:! MorphicUIManager removeSelector: #newStack:! MorphicUIManager removeSelector: #chooseFont! MorphicUIManager removeSelector: #chooseDirectory:path:! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:menu:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:label:help:! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:label:help:! MorphicUIManager removeSelector: #newPluggableDialogWindow:for:! MorphicUIManager removeSelector: #newGroupbox:for:! MorphicUIManager removeSelector: #newTextEntryFor:get:set:class:getEnabled:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:class:default:ghostText:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:getLabel:help:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #chooseFont:! MorphicUIManager removeSelector: #newVerticalSeparator! MorphicUIManager removeSelector: #proceed:! MorphicUIManager removeSelector: #newHSVASelector:help:! MorphicUIManager removeSelector: #deny:title:! MorphicUIManager removeSelector: #newButtonLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #alert:title:configure:! MorphicUIManager removeSelector: #newCancelButton! MorphicUIManager removeSelector: #newString:style:! MorphicUIManager removeSelector: #newHueSelector:getHue:setHue:help:! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:help:! MorphicUIManager removeSelector: #newEmbeddedMenu! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:getLabel:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:entryCompletion:! MorphicUIManager removeSelector: #fileOpen:! MorphicUIManager removeSelector: #newTabGroup:! MorphicUIManager removeSelector: #newNoButtonFor:! MorphicUIManager removeSelector: #chooseDropList:list:! MorphicUIManager removeSelector: #textEntry:title:entryText:! MorphicUIManager removeSelector: #newImage:! MorphicUIManager removeSelector: #alert:! MorphicUIManager removeSelector: #alert:title:! MorphicUIManager removeSelector: #proceed:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #newBalloonHelp:for:! MorphicUIManager removeSelector: #newTreeFor:list:selected:changeSelected:! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #newButtonFor:action:label:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:! MorphicUIManager removeSelector: #newNoButton! MorphicUIManager removeSelector: #newHSVSelector:help:! MorphicUIManager removeSelector: #newRow:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:! MorphicUIManager removeSelector: #newTitle:for:! MorphicUIManager removeSelector: #newGroupboxForAll:! MorphicUIManager removeSelector: #question:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:entryCompletion:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:help:! MorphicUIManager removeSelector: #newLabelFor:getLabel:getEnabled:! MorphicUIManager removeSelector: #chooseDirectory:! MorphicUIManager removeSelector: #chooseDropList:title:list:! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:getEnabled:help:! MorphicUIManager removeSelector: #newString:! MorphicUIManager removeSelector: #newExpander:forAll:! MorphicUIManager removeSelector: #questionWithoutCancel:title:! MorphicUIManager removeSelector: #newFuzzyLabel:! MorphicUIManager removeSelector: #newRow! MorphicUIManager removeSelector: #newStack! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:offset:alpha:getEnabled:! MorphicUIManager removeSelector: #chooseFileName:extensions:path:preview:! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:label:help:! MorphicUIManager removeSelector: #newYesButtonFor:! MorphicUIManager removeSelector: #abort:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:help:! MorphicUIManager removeSelector: #newIncrementalSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #newLabelGroup:font:labelColor:! MorphicUIManager removeSelector: #newCloseButton! MorphicUIManager removeSelector: #newSVSelector:help:! MorphicUIManager removeSelector: #newPluggableDialogWindow:! MorphicUIManager removeSelector: #newMenu! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:menu:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #newBalloonHelp:for:corner:! MorphicUIManager removeSelector: #newButtonFor:action:getEnabled:label:help:! MorphicUIManager removeSelector: #message:! MorphicUIManager removeSelector: #newAlphaSelector:getAlpha:setAlpha:help:! MorphicUIManager removeSelector: #longMessage:title:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:label:help:! MorphicUIManager removeSelector: #newDialogPanel! MorphicUIManager removeSelector: #chooseColor:title:! MorphicUIManager removeSelector: #newCancelButtonFor:! MorphicUIManager removeSelector: #newOKButton! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #newYesButton! MorphicUIManager removeSelector: #chooseColor! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:icon:getEnabled:help:! MorphicUIManager removeSelector: #newString:font:style:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:! MorphicUIManager removeSelector: #newToolbar! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #fileSave:path:! MorphicUIManager removeSelector: #newCloseButtonFor:! MorphicUIManager removeSelector: #chooseColor:! MorphicUIManager removeSelector: #newScrollPaneFor:! MorphicUIManager removeSelector: #newPluggableDialogWindow! MorphicUIManager removeSelector: #newOKButtonFor:! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:ghostText:getEnabled:help:! MorphicUIManager removeSelector: #newGroupboxFor:! MorphicUIManager removeSelector: #newOverflowRowForAll:! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #message:title:! MorphicUIManager removeSelector: #newImage:size:! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:! MorphicUIManager removeSelector: #newImageFor:get:help:! MorphicUIManager removeSelector: #abort:! MorphicUIManager removeSelector: #newColorPresenterFor:getColor:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #newOKButtonFor:getEnabled:! MorphicUIManager removeSelector: #newText:! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #fileSave:extensions:path:! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #newLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #newLabel:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:! MorphicUIManager removeSelector: #newLabelGroup:! MorphicUIManager removeSelector: #newExpander:! MorphicUIManager removeSelector: #newMultistateButton! MorphicUIManager removeSelector: #newExpander:for:! MorphicUIManager removeSelector: #newWorkArea! MorphicUIManager removeSelector: #fileOpen:extensions:path:preview:! MorphicUIManager removeSelector: #newColumn:! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:help:! MorphicUIManager removeSelector: #newToolDockingBar! MorphicUIManager removeSelector: #textEntry:title:! MorphicUIManager removeSelector: #fileSave:extensions:! MorphicUIManager removeSelector: #fileSave:! MorphicUIManager removeSelector: #newSeparator! MorphicUIManager removeSelector: #newCloseControlFor:action:help:! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #question:! MorphicUIManager removeSelector: #textEntry:! MorphicUIManager removeSelector: #newGroupbox:forAll:! MorphicUIManager removeSelector: #newButtonLabel:! MorphicUIManager removeSelector: #newToolbar:! MorphicUIManager removeSelector: #newToolSpacer! MorphicUIManager removeSelector: #fileOpen:extensions:! MorphicUIManager removeSelector: #newToolbarHandle! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! FloatArrayTest removeSelector: #testAllButLast! FloatArrayTest removeSelector: #testCopyReplaceAllWith1Occurence! FloatArrayTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! FloatArrayTest removeSelector: #testsEndsWith! FloatArrayTest removeSelector: #testLastIndexOf! FloatArrayTest removeSelector: #test0FixtureCopyWithReplacementTest! FloatArrayTest removeSelector: #testFirstNElements! FloatArrayTest removeSelector: #testFromToPut! FloatArrayTest removeSelector: #testCopyWithoutFirst! FloatArrayTest removeSelector: #test0TStructuralEqualityTest! FloatArrayTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! FloatArrayTest removeSelector: #testLastIndexOfDuplicate! FloatArrayTest removeSelector: #testBefore! FloatArrayTest removeSelector: #testWith! FloatArrayTest removeSelector: #testAsArray! FloatArrayTest removeSelector: #testIncludesAnyNoneThere! FloatArrayTest removeSelector: #testCopyNotSame! FloatArrayTest removeSelector: #testUnionOfEmpties! FloatArrayTest removeSelector: #testFindFirst! FloatArrayTest removeSelector: #testCopyUpToWithDuplicate! FloatArrayTest removeSelector: #testOFixtureReplacementSequencedTest! FloatArrayTest removeSelector: #testWithIndexCollect! FloatArrayTest removeSelector: #testPrintElementsOn! FloatArrayTest removeSelector: #testsEndsWithEmpty! FloatArrayTest removeSelector: #test0FixtureIterateSequencedReadableTest! FloatArrayTest removeSelector: #testCopyWithSequenceable! FloatArrayTest removeSelector: #testAtAllIndexesPut! FloatArrayTest removeSelector: #testConcatenationWithEmpty! FloatArrayTest removeSelector: #testCopyUpToLastWithDuplicate! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastEmpty! FloatArrayTest removeSelector: #testAtAllPut! FloatArrayTest removeSelector: #testAtOutOfBounds! FloatArrayTest removeSelector: #testOfSize! FloatArrayTest removeSelector: #testIsEmpty! FloatArrayTest removeSelector: #testCopyEmpty! FloatArrayTest removeSelector: #testWithCollect! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastOne! FloatArrayTest removeSelector: #test0FixtureSetAritmeticTest! FloatArrayTest removeSelector: #test0FixtureIncludeWithIdentityTest! FloatArrayTest removeSelector: #testIfEmpty! FloatArrayTest removeSelector: #test0FixturePutTest! FloatArrayTest removeSelector: #testPrintOnDelimiter! FloatArrayTest removeSelector: #test0FixtureTConvertTest! FloatArrayTest removeSelector: #testReplaceFromToWithStartingAt! FloatArrayTest removeSelector: #valueArray! FloatArrayTest removeSelector: #testAsStringOnDelimiterMore! FloatArrayTest removeSelector: #testDetectSequenced! FloatArrayTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! FloatArrayTest removeSelector: #testSorted! FloatArrayTest removeSelector: #testIncludesAnyAllThere! FloatArrayTest removeSelector: #testPairsDo! FloatArrayTest removeSelector: #collectionWithCopy! FloatArrayTest removeSelector: #testLastNElements! FloatArrayTest removeSelector: #testCollectFromTo! FloatArrayTest removeSelector: #testPrintNameOn! FloatArrayTest removeSelector: #test0SortingArrayedTest! FloatArrayTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! FloatArrayTest removeSelector: #testCopyReplaceAllWithManyOccurence! FloatArrayTest removeSelector: #testReplaceFromToWith! FloatArrayTest removeSelector: #testCopyReplaceFromToWithInsertion! FloatArrayTest removeSelector: #testIndexOfStartingAtDuplicate! FloatArrayTest removeSelector: #testAsCommaStringMore! FloatArrayTest removeSelector: #testCopyNonEmptyWith! FloatArrayTest removeSelector: #testCopyAfterLastEmpty! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! FloatArrayTest removeSelector: #testIfNotEmptyDo! FloatArrayTest removeSelector: #testAtAllPutAll! FloatArrayTest removeSelector: #testCopyEmptyMethod! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAt! FloatArrayTest removeSelector: #testCopyAfterWithDuplicate! FloatArrayTest removeSelector: #testAsSortedCollectionWithSortBlock! FloatArrayTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! FloatArrayTest removeSelector: #testSortedUsingBlock! FloatArrayTest removeSelector: #testWithAll! FloatArrayTest removeSelector: #test0FixtureIndexAccessTest! FloatArrayTest removeSelector: #testWithDo! FloatArrayTest removeSelector: #testCopyCreatesNewObject! FloatArrayTest removeSelector: #testWithDoError! FloatArrayTest removeSelector: #testAllButFirstDo! FloatArrayTest removeSelector: #testAtWrap! FloatArrayTest removeSelector: #testCopyNonEmptyWithout! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! FloatArrayTest removeSelector: #test0FixtureEmptyTest! FloatArrayTest removeSelector: #testConcatenation! FloatArrayTest removeSelector: #testKeysAndValuesDo! FloatArrayTest removeSelector: #testAsOrderedCollection! FloatArrayTest removeSelector: #testIntersectionItself! FloatArrayTest removeSelector: #test0CopyTest! FloatArrayTest removeSelector: #testStreamContentsProtocol! FloatArrayTest removeSelector: #testIfNotEmptyDoifNotEmpty! FloatArrayTest removeSelector: #testHasEqualElements! FloatArrayTest removeSelector: #testsBeginsWithEmpty! FloatArrayTest removeSelector: #testsBeginsWith! FloatArrayTest removeSelector: #testAsSortedCollection! FloatArrayTest removeSelector: #testCopyEmptyWithout! FloatArrayTest removeSelector: #test0TSequencedStructuralEqualityTest! FloatArrayTest removeSelector: #test0FixtureSequencedConcatenationTest! FloatArrayTest removeSelector: #testUnion! FloatArrayTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! FloatArrayTest removeSelector: #testDo! FloatArrayTest removeSelector: #testEqualSign! FloatArrayTest removeSelector: #testCopyReplaceFromToWith! FloatArrayTest removeSelector: #testShuffled! FloatArrayTest removeSelector: #testCopySameClass! FloatArrayTest removeSelector: #testAfter! FloatArrayTest removeSelector: #testCopyAfter! FloatArrayTest removeSelector: #testIsSortedBy! FloatArrayTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! FloatArrayTest removeSelector: #test0FixturePrintTest! FloatArrayTest removeSelector: #testIfEmptyifNotEmpty! FloatArrayTest removeSelector: #testAllButFirstNElements! FloatArrayTest removeSelector: #testReverseWithDo! FloatArrayTest removeSelector: #testCopyFromTo! FloatArrayTest removeSelector: #testIncludesAllNoneThere! FloatArrayTest removeSelector: #testKeysAndValuesDoEmpty! FloatArrayTest removeSelector: #testIndexOfStartingAt! FloatArrayTest removeSelector: #testAsSetWithEqualsElements! FloatArrayTest removeSelector: #testPrintOnDelimiterLast! FloatArrayTest removeSelector: #testAsBag! FloatArrayTest removeSelector: #howMany:in:! FloatArrayTest removeSelector: #testCopyEmptyWith! FloatArrayTest removeSelector: #test0FixtureConverAsSortedTest! FloatArrayTest removeSelector: #testCopyAfterLastWithDuplicate! FloatArrayTest removeSelector: #testStoreOn! FloatArrayTest removeSelector: #testIndexOfStartingAtIfAbsent! FloatArrayTest removeSelector: #testReplaceAllWith! FloatArrayTest removeSelector: #numberOfSimilarElementsInIntersection! FloatArrayTest removeSelector: #testAtAll! FloatArrayTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! FloatArrayTest removeSelector: #testShallowCopy! FloatArrayTest removeSelector: #testIndexOfIfAbsent! FloatArrayTest removeSelector: #testStreamContentsSized! FloatArrayTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! FloatArrayTest removeSelector: #testAsIdentitySet! FloatArrayTest removeSelector: #testWithWithWith! FloatArrayTest removeSelector: #testAsSet! FloatArrayTest removeSelector: #testIfNotEmpty! FloatArrayTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! FloatArrayTest removeSelector: #testSortUsingSortBlock! FloatArrayTest removeSelector: #testIsEmptyOrNil! FloatArrayTest removeSelector: #testDifferenceWithSeparateCollection! FloatArrayTest removeSelector: #testIncludesElementIsThere! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! FloatArrayTest removeSelector: #testAtLastError! FloatArrayTest removeSelector: #testCopyUpToLast! FloatArrayTest removeSelector: #test0FixtureCloneTest! FloatArrayTest removeSelector: #testCopyUpToLastEmpty! FloatArrayTest removeSelector: #testPrintOn! FloatArrayTest removeSelector: #testAtPutTwoValues! FloatArrayTest removeSelector: #testCopyUpTo! FloatArrayTest removeSelector: #testReversed! FloatArrayTest removeSelector: #testLast! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastMore! FloatArrayTest removeSelector: #test0FixtureIncludeTest! FloatArrayTest removeSelector: #test0FixtureIndexAccessFotMultipliness! FloatArrayTest removeSelector: #testIdentityIncludes! FloatArrayTest removeSelector: #testIfNotEmptyifEmpty! FloatArrayTest removeSelector: #testIncludesElementIsNotThere! FloatArrayTest removeSelector: #testCopyWithoutIndex! FloatArrayTest removeSelector: #testLastIndexOfStartingAtDuplicate! FloatArrayTest removeSelector: #testCopyAfterEmpty! FloatArrayTest removeSelector: #testAtWrapPut! FloatArrayTest removeSelector: #testReverseDo! FloatArrayTest removeSelector: #testCopyEquals! FloatArrayTest removeSelector: #testIndexOfDuplicate! FloatArrayTest removeSelector: #testCopyEmptyWithoutAll! FloatArrayTest removeSelector: #testAtPin! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAll! FloatArrayTest removeSelector: #testAtLastIfAbsent! FloatArrayTest removeSelector: #testCopyAfterLast! FloatArrayTest removeSelector: #testAllButLastNElements! FloatArrayTest removeSelector: #testFindFirstNotIn! FloatArrayTest removeSelector: #testAfterIfAbsent! FloatArrayTest removeSelector: #assertNoDuplicates:whenConvertedTo:! FloatArrayTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! FloatArrayTest removeSelector: #testForceToPaddingWith! FloatArrayTest removeSelector: #testAsCommaStringEmpty! FloatArrayTest removeSelector: #testFindLast! FloatArrayTest removeSelector: #test0FixtureCreationWithTest! FloatArrayTest removeSelector: #testCopyNonEmpty! FloatArrayTest removeSelector: #testAtPut! FloatArrayTest removeSelector: #testReverseDoEmpty! FloatArrayTest removeSelector: #testWithWith! FloatArrayTest removeSelector: #testFirstSecondThird! FloatArrayTest removeSelector: #collectionWithIdentical! FloatArrayTest removeSelector: #testForceToPaddingStartWith! FloatArrayTest removeSelector: #testCopyWithFirst! FloatArrayTest removeSelector: #testAtLast! FloatArrayTest removeSelector: #testAsStringOnDelimiterEmpty! FloatArrayTest removeSelector: #testAtLastPut! FloatArrayTest removeSelector: #testSort! FloatArrayTest removeSelector: #testIntersectionEmpty! FloatArrayTest removeSelector: #testIsSorted! FloatArrayTest removeSelector: #testAtRandom! FloatArrayTest removeSelector: #assertSameContents:whenConvertedTo:! FloatArrayTest removeSelector: #testEqualSignForSequenceableCollections! FloatArrayTest removeSelector: #testStreamContents! FloatArrayTest removeSelector: #test0FixtureBeginsEndsWithTest! FloatArrayTest removeSelector: #testDifferenceWithNonNullIntersection! FloatArrayTest removeSelector: #testAtIfAbsent! FloatArrayTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! FloatArrayTest removeSelector: #testIndexOf! FloatArrayTest removeSelector: #test0FixtureSubcollectionAccessTest! FloatArrayTest removeSelector: #test0FixtureSequencedElementAccessTest! FloatArrayTest removeSelector: #testLastIndexOfIfAbsentDuplicate! FloatArrayTest removeSelector: #testIntersectionBasic! FloatArrayTest removeSelector: #testDifference! FloatArrayTest removeSelector: #testAllButFirst! FloatArrayTest removeSelector: #testNotEmpty! FloatArrayTest removeSelector: #testAllButLastDo! FloatArrayTest removeSelector: #test0FixtureCopyPartOfForMultipliness! FloatArrayTest removeSelector: #testPairsCollect! FloatArrayTest removeSelector: #testShallowCopyEmpty! FloatArrayTest removeSelector: #testWithIndexDo! FloatArrayTest removeSelector: #testReverse! FloatArrayTest removeSelector: #testBeforeIfAbsent! FloatArrayTest removeSelector: #testWithWithWithWith! FloatArrayTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! FloatArrayTest removeSelector: #test0FixturePutOneOrMoreElementsTest! FloatArrayTest removeSelector: #testCopyUpToEmpty! FloatArrayTest removeSelector: #containsAll:of:andOf:! FloatArrayTest removeSelector: #testFindLastNotIn! FloatArrayTest removeSelector: #testAsCommaStringOne! FloatArrayTest removeSelector: #testFromToDo! FloatArrayTest removeSelector: #test0FixtureCopySameContentsTest! FloatArrayTest removeSelector: #elementInForReplacement! FloatArrayTest removeSelector: #testWithWithWithWithWith! FloatArrayTest removeSelector: #testAt! FloatArrayTest removeSelector: #testMiddle! FloatArrayTest removeSelector: #testIndexOfIfAbsentDuplicate! FloatArrayTest removeSelector: #testAsStringOnDelimiterOne! FloatArrayTest removeSelector: #testAtPutOutOfBounds! FloatArrayTest removeSelector: #testIfEmptyifNotEmptyDo! FloatArrayTest removeSelector: #testLastIndexOfIfAbsent! FloatArrayTest removeSelector: #testWithCollectError! FloatArrayTest removeSelector: #testLastIndexOfStartingAt! FloatArrayTest removeSelector: #firstIndexesOf:in:! !Trait method! testReplaceFromToWithStartingAt | result repStart collection replacementCollec firstInd secondInd | collection := self nonEmpty . result := collection copy. replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . repStart := replacementCollec size - ( secondInd - firstInd + 1 ) + 1. result replaceFrom: firstInd to: secondInd with: replacementCollec startingAt: repStart . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: ( collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( replacementCollec size - repStart +1 ) do: [:i| self assert: (result at: i)=( replacementCollec at: ( repStart + ( i - firstInd ) ) ) ]. " end part :" ( firstInd + replacementCollec size ) to: ( result size ) do: [ :i | self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ].! ! !Trait method! testAtPutOutOfBounds "self debug: #testAtPutOutOfBounds" self should: [self empty at: self anIndex put: self aValue] raise: Error ! ! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testDo! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testShuffled | result | result := self nonEmpty shuffled . "verify content of 'result: '" result do: [:each | self assert: (self nonEmpty occurrencesOf: each)=(result occurrencesOf: each)]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testReplaceAllWith | result collection oldElement newElement oldOccurrences | collection := self nonEmpty . result := collection copy. oldElement := self elementInForReplacement . newElement := self newElement . oldOccurrences := (result occurrencesOf: oldElement) + (result occurrencesOf: newElement). result replaceAll: oldElement with: newElement . self assert: oldOccurrences = (result occurrencesOf: newElement)! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testFromToPut | collection index | index := self indexArray anyOne. collection := self nonEmpty copy. collection from: 1 to: index put: self aValue.. 1 to: index do: [:i | self assert: (collection at: i)= self aValue]. (index +1) to: collection size do: [:i | self assert: (collection at:i)= (self nonEmpty at:i)].! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testAtPutTwoValues "self debug: #testAtPutTwoValues" self nonEmpty at: self anIndex put: self aValue. self nonEmpty at: self anIndex put: self anotherValue. self assert: (self nonEmpty at: self anIndex) = self anotherValue.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testSort | result tmp | result := self unsortedCollection sort. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection anElement | collection := self collectionWithCopyNonIdentical. anElement := collection anyOne copy. self deny: (collection identityIncludes: anElement)! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self shouldnt: self aValue raise: Error. self shouldnt: self indexArray raise: Error. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! elementInForReplacement " return an element included in 'nonEmpty' " ^ self nonEmpty anyOne.! ! !Trait method! testSorted | result tmp | result := self unsortedCollection sorted. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutTest self shouldnt: self aValue raise: Error. self shouldnt: self anotherValue raise: Error. self shouldnt: self anIndex raise: Error. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testAtWrapPut "self debug: #testAtWrapPut" | index | index := self indexArray anyOne. self nonEmpty atWrap: 0 put: self aValue. self assert: (self nonEmpty at:(self nonEmpty size))=self aValue. self nonEmpty atWrap: (self nonEmpty size+1) put: self aValue. self assert: (self nonEmpty at:(1))=self aValue. self nonEmpty atWrap: (index ) put: self aValue. self assert: (self nonEmpty at: index ) = self aValue. self nonEmpty atWrap: (self nonEmpty size+index ) put: self aValue . self assert: (self nonEmpty at:(index ))=self aValue .! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testAtPut "self debug: #testAtPut" self nonEmpty at: self anIndex put: self aValue. self assert: (self nonEmpty at: self anIndex) = self aValue. ! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testOFixtureReplacementSequencedTest self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: self elementInForReplacement raise: Error. self assert: (self nonEmpty includes: self elementInForReplacement ) . self shouldnt: self newElement raise: Error. self shouldnt: self firstIndex raise: Error. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self shouldnt: self secondIndex raise: Error. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self shouldnt: self replacementCollection raise: Error. self shouldnt: self replacementCollectionSameSize raise: Error. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! testSortUsingSortBlock | result tmp | result := self unsortedCollection sort: [:a :b | a>b]. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testAtAllIndexesPut self nonEmpty atAllPut: self aValue. self nonEmpty do:[ :each| self assert: each = self aValue]. ! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testAtLastPut | result index | index := self indexArray anyOne. result := self nonEmpty atLast: index put: self aValue. self assert: (self nonEmpty at: (self nonEmpty size +1 - index)) = self aValue .! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAtAllPut | | self nonEmpty atAll: self indexArray put: self aValue.. self indexArray do: [:i | self assert: (self nonEmpty at: i)=self aValue ]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! testReplaceFromToWith | result collection replacementCollec firstInd secondInd | collection := self nonEmpty . replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . result := collection copy. result replaceFrom: firstInd to: secondInd with: replacementCollec . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: (collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( firstInd + replacementCollec size - 1 ) do: [ :i | self assert: ( result at: i ) = ( replacementCollec at: ( i - firstInd +1 ) ) ]. " end part :" ( firstInd + replacementCollec size) to: (result size) do: [:i| self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ]. ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! testAtAllPutAll | aValueArray | aValueArray := self valueArray . self nonEmpty atAll: self indexArray putAll: aValueArray . 1 to: self indexArray size do: [:i | self assert: (self nonEmpty at:(self indexArray at: i))= (aValueArray at:i) ]! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !Trait method! valueArray " return a collection (with the same size than 'indexArray' )of values to be put in 'nonEmpty' at indexes in 'indexArray' " | result | result := Array new: self indexArray size. 1 to: result size do: [:i | result at:i put: (self aValue ). ]. ^ result.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! FloatArrayTest removeSelector: #assertNoDuplicates:whenConvertedTo:! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! FloatArrayTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! FloatArrayTest removeSelector: #assertSameContents:whenConvertedTo:! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! FloatArrayTest removeSelector: #collectionWithCopy! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! FloatArrayTest removeSelector: #collectionWithIdentical! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! FloatArrayTest removeSelector: #containsAll:of:andOf:! !Trait method! elementInForReplacement " return an element included in 'nonEmpty' " ^ self nonEmpty anyOne.! ! FloatArrayTest removeSelector: #elementInForReplacement! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! FloatArrayTest removeSelector: #firstIndexesOf:in:! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! FloatArrayTest removeSelector: #howMany:in:! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! FloatArrayTest removeSelector: #numberOfSimilarElementsInIntersection! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! FloatArrayTest removeSelector: #test0CopyTest! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! FloatArrayTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! FloatArrayTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! FloatArrayTest removeSelector: #test0FixtureBeginsEndsWithTest! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! FloatArrayTest removeSelector: #test0FixtureCloneTest! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! FloatArrayTest removeSelector: #test0FixtureConverAsSortedTest! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! FloatArrayTest removeSelector: #test0FixtureCopyPartOfForMultipliness! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! FloatArrayTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! FloatArrayTest removeSelector: #test0FixtureCopySameContentsTest! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! FloatArrayTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! FloatArrayTest removeSelector: #test0FixtureCopyWithReplacementTest! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! FloatArrayTest removeSelector: #test0FixtureCreationWithTest! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! FloatArrayTest removeSelector: #test0FixtureIncludeTest! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! FloatArrayTest removeSelector: #test0FixtureIncludeWithIdentityTest! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! FloatArrayTest removeSelector: #test0FixtureIndexAccessFotMultipliness! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! FloatArrayTest removeSelector: #test0FixtureIndexAccessTest! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! FloatArrayTest removeSelector: #test0FixtureIterateSequencedReadableTest! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! FloatArrayTest removeSelector: #test0FixturePrintTest! !Trait method! test0FixturePutOneOrMoreElementsTest self shouldnt: self aValue raise: Error. self shouldnt: self indexArray raise: Error. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! FloatArrayTest removeSelector: #test0FixturePutOneOrMoreElementsTest! !Trait method! test0FixturePutTest self shouldnt: self aValue raise: Error. self shouldnt: self anotherValue raise: Error. self shouldnt: self anIndex raise: Error. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! FloatArrayTest removeSelector: #test0FixturePutTest! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! FloatArrayTest removeSelector: #test0FixtureSequencedConcatenationTest! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! FloatArrayTest removeSelector: #test0FixtureSequencedElementAccessTest! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! FloatArrayTest removeSelector: #test0FixtureSetAritmeticTest! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! FloatArrayTest removeSelector: #test0FixtureSubcollectionAccessTest! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! FloatArrayTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! FloatArrayTest removeSelector: #test0FixtureTConvertTest! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! FloatArrayTest removeSelector: #test0SortingArrayedTest! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! FloatArrayTest removeSelector: #test0TSequencedStructuralEqualityTest! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! FloatArrayTest removeSelector: #test0TStructuralEqualityTest! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! FloatArrayTest removeSelector: #testAfter! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! FloatArrayTest removeSelector: #testAfterIfAbsent! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! FloatArrayTest removeSelector: #testAllButFirst! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! FloatArrayTest removeSelector: #testAllButFirstDo! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! FloatArrayTest removeSelector: #testAllButFirstNElements! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! FloatArrayTest removeSelector: #testAllButLast! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! FloatArrayTest removeSelector: #testAllButLastDo! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! FloatArrayTest removeSelector: #testAllButLastNElements! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! FloatArrayTest removeSelector: #testAsArray! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! FloatArrayTest removeSelector: #testAsBag! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! FloatArrayTest removeSelector: #testAsCommaStringEmpty! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! FloatArrayTest removeSelector: #testAsCommaStringMore! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! FloatArrayTest removeSelector: #testAsCommaStringOne! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! FloatArrayTest removeSelector: #testAsIdentitySet! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! FloatArrayTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! FloatArrayTest removeSelector: #testAsOrderedCollection! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! FloatArrayTest removeSelector: #testAsSet! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! FloatArrayTest removeSelector: #testAsSetWithEqualsElements! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! FloatArrayTest removeSelector: #testAsSortedCollection! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! FloatArrayTest removeSelector: #testAsSortedCollectionWithSortBlock! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterEmpty! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastEmpty! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastMore! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastOne! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterMore! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! FloatArrayTest removeSelector: #testAsStringOnDelimiterOne! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! FloatArrayTest removeSelector: #testAt! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! FloatArrayTest removeSelector: #testAtAll! !Trait method! testAtAllIndexesPut self nonEmpty atAllPut: self aValue. self nonEmpty do:[ :each| self assert: each = self aValue]. ! ! FloatArrayTest removeSelector: #testAtAllIndexesPut! !Trait method! testAtAllPut | | self nonEmpty atAll: self indexArray put: self aValue.. self indexArray do: [:i | self assert: (self nonEmpty at: i)=self aValue ]. ! ! FloatArrayTest removeSelector: #testAtAllPut! !Trait method! testAtAllPutAll | aValueArray | aValueArray := self valueArray . self nonEmpty atAll: self indexArray putAll: aValueArray . 1 to: self indexArray size do: [:i | self assert: (self nonEmpty at:(self indexArray at: i))= (aValueArray at:i) ]! ! FloatArrayTest removeSelector: #testAtAllPutAll! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! FloatArrayTest removeSelector: #testAtIfAbsent! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! FloatArrayTest removeSelector: #testAtLast! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! FloatArrayTest removeSelector: #testAtLastError! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! FloatArrayTest removeSelector: #testAtLastIfAbsent! !Trait method! testAtLastPut | result index | index := self indexArray anyOne. result := self nonEmpty atLast: index put: self aValue. self assert: (self nonEmpty at: (self nonEmpty size +1 - index)) = self aValue .! ! FloatArrayTest removeSelector: #testAtLastPut! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! FloatArrayTest removeSelector: #testAtOutOfBounds! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! FloatArrayTest removeSelector: #testAtPin! !Trait method! testAtPut "self debug: #testAtPut" self nonEmpty at: self anIndex put: self aValue. self assert: (self nonEmpty at: self anIndex) = self aValue. ! ! FloatArrayTest removeSelector: #testAtPut! !Trait method! testAtPutOutOfBounds "self debug: #testAtPutOutOfBounds" self should: [self empty at: self anIndex put: self aValue] raise: Error ! ! FloatArrayTest removeSelector: #testAtPutOutOfBounds! !Trait method! testAtPutTwoValues "self debug: #testAtPutTwoValues" self nonEmpty at: self anIndex put: self aValue. self nonEmpty at: self anIndex put: self anotherValue. self assert: (self nonEmpty at: self anIndex) = self anotherValue.! ! FloatArrayTest removeSelector: #testAtPutTwoValues! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! FloatArrayTest removeSelector: #testAtRandom! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! FloatArrayTest removeSelector: #testAtWrap! !Trait method! testAtWrapPut "self debug: #testAtWrapPut" | index | index := self indexArray anyOne. self nonEmpty atWrap: 0 put: self aValue. self assert: (self nonEmpty at:(self nonEmpty size))=self aValue. self nonEmpty atWrap: (self nonEmpty size+1) put: self aValue. self assert: (self nonEmpty at:(1))=self aValue. self nonEmpty atWrap: (index ) put: self aValue. self assert: (self nonEmpty at: index ) = self aValue. self nonEmpty atWrap: (self nonEmpty size+index ) put: self aValue . self assert: (self nonEmpty at:(index ))=self aValue .! ! FloatArrayTest removeSelector: #testAtWrapPut! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! FloatArrayTest removeSelector: #testBefore! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! FloatArrayTest removeSelector: #testBeforeIfAbsent! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! FloatArrayTest removeSelector: #testCollectFromTo! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! FloatArrayTest removeSelector: #testConcatenation! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! FloatArrayTest removeSelector: #testConcatenationWithEmpty! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! FloatArrayTest removeSelector: #testCopyAfter! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! FloatArrayTest removeSelector: #testCopyAfterEmpty! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! FloatArrayTest removeSelector: #testCopyAfterLast! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! FloatArrayTest removeSelector: #testCopyAfterLastEmpty! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! FloatArrayTest removeSelector: #testCopyAfterLastWithDuplicate! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! FloatArrayTest removeSelector: #testCopyAfterWithDuplicate! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! FloatArrayTest removeSelector: #testCopyCreatesNewObject! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! FloatArrayTest removeSelector: #testCopyEmpty! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! FloatArrayTest removeSelector: #testCopyEmptyMethod! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! FloatArrayTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! FloatArrayTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! FloatArrayTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! FloatArrayTest removeSelector: #testCopyEquals! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! FloatArrayTest removeSelector: #testCopyFromTo! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! FloatArrayTest removeSelector: #testCopyNonEmpty! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! FloatArrayTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! FloatArrayTest removeSelector: #testCopyNonEmptyWithout! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! FloatArrayTest removeSelector: #testCopyNotSame! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! FloatArrayTest removeSelector: #testCopyReplaceAllWith1Occurence! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! FloatArrayTest removeSelector: #testCopyReplaceAllWithManyOccurence! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! FloatArrayTest removeSelector: #testCopyReplaceFromToWith! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! FloatArrayTest removeSelector: #testCopyReplaceFromToWithInsertion! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! FloatArrayTest removeSelector: #testCopySameClass! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! FloatArrayTest removeSelector: #testCopyUpTo! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! FloatArrayTest removeSelector: #testCopyUpToEmpty! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! FloatArrayTest removeSelector: #testCopyUpToLast! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! FloatArrayTest removeSelector: #testCopyUpToLastEmpty! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! FloatArrayTest removeSelector: #testCopyUpToLastWithDuplicate! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! FloatArrayTest removeSelector: #testCopyUpToWithDuplicate! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! FloatArrayTest removeSelector: #testCopyWithFirst! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! FloatArrayTest removeSelector: #testCopyWithSequenceable! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! FloatArrayTest removeSelector: #testCopyWithoutFirst! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! FloatArrayTest removeSelector: #testCopyWithoutIndex! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! FloatArrayTest removeSelector: #testDetectSequenced! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! FloatArrayTest removeSelector: #testDifference! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! FloatArrayTest removeSelector: #testDifferenceWithNonNullIntersection! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! FloatArrayTest removeSelector: #testDifferenceWithSeparateCollection! !Trait method! testDo! ! FloatArrayTest removeSelector: #testDo! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! FloatArrayTest removeSelector: #testEqualSign! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! FloatArrayTest removeSelector: #testEqualSignForSequenceableCollections! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! FloatArrayTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! FloatArrayTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! FloatArrayTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! FloatArrayTest removeSelector: #testFindFirst! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! FloatArrayTest removeSelector: #testFindFirstNotIn! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! FloatArrayTest removeSelector: #testFindLast! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! FloatArrayTest removeSelector: #testFindLastNotIn! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! FloatArrayTest removeSelector: #testFirstNElements! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! FloatArrayTest removeSelector: #testFirstSecondThird! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! FloatArrayTest removeSelector: #testForceToPaddingStartWith! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! FloatArrayTest removeSelector: #testForceToPaddingWith! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! FloatArrayTest removeSelector: #testFromToDo! !Trait method! testFromToPut | collection index | index := self indexArray anyOne. collection := self nonEmpty copy. collection from: 1 to: index put: self aValue.. 1 to: index do: [:i | self assert: (collection at: i)= self aValue]. (index +1) to: collection size do: [:i | self assert: (collection at:i)= (self nonEmpty at:i)].! ! FloatArrayTest removeSelector: #testFromToPut! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! FloatArrayTest removeSelector: #testHasEqualElements! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! FloatArrayTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! FloatArrayTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! !Trait method! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection anElement | collection := self collectionWithCopyNonIdentical. anElement := collection anyOne copy. self deny: (collection identityIncludes: anElement)! ! FloatArrayTest removeSelector: #testIdentityIncludes! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! FloatArrayTest removeSelector: #testIncludesAllNoneThere! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! FloatArrayTest removeSelector: #testIncludesAnyAllThere! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! FloatArrayTest removeSelector: #testIncludesAnyNoneThere! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! FloatArrayTest removeSelector: #testIncludesElementIsNotThere! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! FloatArrayTest removeSelector: #testIncludesElementIsThere! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! FloatArrayTest removeSelector: #testIndexOf! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! FloatArrayTest removeSelector: #testIndexOfDuplicate! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! FloatArrayTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! FloatArrayTest removeSelector: #testIndexOfIfAbsentDuplicate! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! FloatArrayTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! FloatArrayTest removeSelector: #testIndexOfStartingAtDuplicate! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! FloatArrayTest removeSelector: #testIndexOfStartingAtIfAbsent! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! FloatArrayTest removeSelector: #testIntersectionBasic! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! FloatArrayTest removeSelector: #testIntersectionEmpty! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! FloatArrayTest removeSelector: #testIntersectionItself! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! FloatArrayTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! FloatArrayTest removeSelector: #testIsSorted! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! FloatArrayTest removeSelector: #testIsSortedBy! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! FloatArrayTest removeSelector: #testKeysAndValuesDo! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! FloatArrayTest removeSelector: #testKeysAndValuesDoEmpty! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! FloatArrayTest removeSelector: #testLast! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! FloatArrayTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! FloatArrayTest removeSelector: #testLastIndexOfDuplicate! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! FloatArrayTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! FloatArrayTest removeSelector: #testLastIndexOfIfAbsentDuplicate! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! FloatArrayTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! FloatArrayTest removeSelector: #testLastIndexOfStartingAtDuplicate! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! FloatArrayTest removeSelector: #testLastNElements! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! FloatArrayTest removeSelector: #testMiddle! !Trait method! testOFixtureReplacementSequencedTest self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: self elementInForReplacement raise: Error. self assert: (self nonEmpty includes: self elementInForReplacement ) . self shouldnt: self newElement raise: Error. self shouldnt: self firstIndex raise: Error. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self shouldnt: self secondIndex raise: Error. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self shouldnt: self replacementCollection raise: Error. self shouldnt: self replacementCollectionSameSize raise: Error. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! FloatArrayTest removeSelector: #testOFixtureReplacementSequencedTest! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! FloatArrayTest removeSelector: #testOfSize! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! FloatArrayTest removeSelector: #testPairsCollect! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! FloatArrayTest removeSelector: #testPairsDo! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! FloatArrayTest removeSelector: #testPrintElementsOn! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! FloatArrayTest removeSelector: #testPrintNameOn! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! FloatArrayTest removeSelector: #testPrintOn! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! FloatArrayTest removeSelector: #testPrintOnDelimiter! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! FloatArrayTest removeSelector: #testPrintOnDelimiterLast! !Trait method! testReplaceAllWith | result collection oldElement newElement oldOccurrences | collection := self nonEmpty . result := collection copy. oldElement := self elementInForReplacement . newElement := self newElement . oldOccurrences := (result occurrencesOf: oldElement) + (result occurrencesOf: newElement). result replaceAll: oldElement with: newElement . self assert: oldOccurrences = (result occurrencesOf: newElement)! ! FloatArrayTest removeSelector: #testReplaceAllWith! !Trait method! testReplaceFromToWith | result collection replacementCollec firstInd secondInd | collection := self nonEmpty . replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . result := collection copy. result replaceFrom: firstInd to: secondInd with: replacementCollec . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: (collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( firstInd + replacementCollec size - 1 ) do: [ :i | self assert: ( result at: i ) = ( replacementCollec at: ( i - firstInd +1 ) ) ]. " end part :" ( firstInd + replacementCollec size) to: (result size) do: [:i| self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ]. ! ! FloatArrayTest removeSelector: #testReplaceFromToWith! !Trait method! testReplaceFromToWithStartingAt | result repStart collection replacementCollec firstInd secondInd | collection := self nonEmpty . result := collection copy. replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . repStart := replacementCollec size - ( secondInd - firstInd + 1 ) + 1. result replaceFrom: firstInd to: secondInd with: replacementCollec startingAt: repStart . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: ( collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( replacementCollec size - repStart +1 ) do: [:i| self assert: (result at: i)=( replacementCollec at: ( repStart + ( i - firstInd ) ) ) ]. " end part :" ( firstInd + replacementCollec size ) to: ( result size ) do: [ :i | self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ].! ! FloatArrayTest removeSelector: #testReplaceFromToWithStartingAt! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! FloatArrayTest removeSelector: #testReverse! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! FloatArrayTest removeSelector: #testReverseDo! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! FloatArrayTest removeSelector: #testReverseDoEmpty! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! FloatArrayTest removeSelector: #testReverseWithDo! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! FloatArrayTest removeSelector: #testReversed! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! FloatArrayTest removeSelector: #testShallowCopy! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! FloatArrayTest removeSelector: #testShallowCopyEmpty! !Trait method! testShuffled | result | result := self nonEmpty shuffled . "verify content of 'result: '" result do: [:each | self assert: (self nonEmpty occurrencesOf: each)=(result occurrencesOf: each)]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! FloatArrayTest removeSelector: #testShuffled! !Trait method! testSort | result tmp | result := self unsortedCollection sort. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! FloatArrayTest removeSelector: #testSort! !Trait method! testSortUsingSortBlock | result tmp | result := self unsortedCollection sort: [:a :b | a>b]. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! FloatArrayTest removeSelector: #testSortUsingSortBlock! !Trait method! testSorted | result tmp | result := self unsortedCollection sorted. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! FloatArrayTest removeSelector: #testSorted! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! FloatArrayTest removeSelector: #testSortedUsingBlock! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! FloatArrayTest removeSelector: #testStoreOn! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! FloatArrayTest removeSelector: #testStreamContents! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! FloatArrayTest removeSelector: #testStreamContentsProtocol! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! FloatArrayTest removeSelector: #testStreamContentsSized! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! FloatArrayTest removeSelector: #testUnion! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! FloatArrayTest removeSelector: #testUnionOfEmpties! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! FloatArrayTest removeSelector: #testWith! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! FloatArrayTest removeSelector: #testWithAll! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! FloatArrayTest removeSelector: #testWithCollect! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! FloatArrayTest removeSelector: #testWithCollectError! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! FloatArrayTest removeSelector: #testWithDo! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! FloatArrayTest removeSelector: #testWithDoError! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! FloatArrayTest removeSelector: #testWithIndexCollect! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! FloatArrayTest removeSelector: #testWithIndexDo! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! FloatArrayTest removeSelector: #testWithWith! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! FloatArrayTest removeSelector: #testWithWithWith! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! FloatArrayTest removeSelector: #testWithWithWithWith! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! FloatArrayTest removeSelector: #testWithWithWithWithWith! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! FloatArrayTest removeSelector: #testsBeginsWith! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! FloatArrayTest removeSelector: #testsBeginsWithEmpty! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! FloatArrayTest removeSelector: #testsEndsWith! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! FloatArrayTest removeSelector: #testsEndsWithEmpty! !Trait method! valueArray " return a collection (with the same size than 'indexArray' )of values to be put in 'nonEmpty' at indexes in 'indexArray' " | result | result := Array new: self indexArray size. 1 to: result size do: [:i | result at:i put: (self aValue ). ]. ^ result.! ! FloatArrayTest removeSelector: #valueArray! FloatArrayTest removeSelector: #testAllButLast! FloatArrayTest removeSelector: #testCopyReplaceAllWith1Occurence! FloatArrayTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! FloatArrayTest removeSelector: #testsEndsWith! FloatArrayTest removeSelector: #testLastIndexOf! FloatArrayTest removeSelector: #test0FixtureCopyWithReplacementTest! FloatArrayTest removeSelector: #testFirstNElements! FloatArrayTest removeSelector: #test0TStructuralEqualityTest! FloatArrayTest removeSelector: #testCopyWithoutFirst! FloatArrayTest removeSelector: #testFromToPut! FloatArrayTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! FloatArrayTest removeSelector: #testBefore! FloatArrayTest removeSelector: #testIncludesAnyNoneThere! FloatArrayTest removeSelector: #testAsArray! FloatArrayTest removeSelector: #testLastIndexOfDuplicate! FloatArrayTest removeSelector: #testWith! FloatArrayTest removeSelector: #testCopyNotSame! FloatArrayTest removeSelector: #testUnionOfEmpties! FloatArrayTest removeSelector: #testFindFirst! FloatArrayTest removeSelector: #testCopyUpToWithDuplicate! FloatArrayTest removeSelector: #testOFixtureReplacementSequencedTest! FloatArrayTest removeSelector: #testWithIndexCollect! FloatArrayTest removeSelector: #testPrintElementsOn! FloatArrayTest removeSelector: #testsEndsWithEmpty! FloatArrayTest removeSelector: #test0FixtureIterateSequencedReadableTest! FloatArrayTest removeSelector: #testConcatenationWithEmpty! FloatArrayTest removeSelector: #testAtAllIndexesPut! FloatArrayTest removeSelector: #testCopyUpToLastWithDuplicate! FloatArrayTest removeSelector: #testCopyWithSequenceable! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastEmpty! FloatArrayTest removeSelector: #testAtAllPut! FloatArrayTest removeSelector: #testAtOutOfBounds! FloatArrayTest removeSelector: #testOfSize! FloatArrayTest removeSelector: #testCopyEmpty! FloatArrayTest removeSelector: #testWithCollect! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastOne! FloatArrayTest removeSelector: #test0FixtureIncludeWithIdentityTest! FloatArrayTest removeSelector: #test0FixtureSetAritmeticTest! FloatArrayTest removeSelector: #testPrintOnDelimiter! FloatArrayTest removeSelector: #test0FixturePutTest! FloatArrayTest removeSelector: #test0FixtureTConvertTest! FloatArrayTest removeSelector: #testReplaceFromToWithStartingAt! FloatArrayTest removeSelector: #valueArray! FloatArrayTest removeSelector: #testAsStringOnDelimiterMore! FloatArrayTest removeSelector: #testDetectSequenced! FloatArrayTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! FloatArrayTest removeSelector: #testSorted! FloatArrayTest removeSelector: #testIncludesAnyAllThere! FloatArrayTest removeSelector: #testPairsDo! FloatArrayTest removeSelector: #collectionWithCopy! FloatArrayTest removeSelector: #testLastNElements! FloatArrayTest removeSelector: #testCollectFromTo! FloatArrayTest removeSelector: #testPrintNameOn! FloatArrayTest removeSelector: #test0SortingArrayedTest! FloatArrayTest removeSelector: #testCopyReplaceAllWithManyOccurence! FloatArrayTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! FloatArrayTest removeSelector: #testIndexOfStartingAtDuplicate! FloatArrayTest removeSelector: #testCopyReplaceFromToWithInsertion! FloatArrayTest removeSelector: #testReplaceFromToWith! FloatArrayTest removeSelector: #testAsCommaStringMore! FloatArrayTest removeSelector: #testCopyNonEmptyWith! FloatArrayTest removeSelector: #testCopyAfterLastEmpty! FloatArrayTest removeSelector: #testCopyEmptyMethod! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! FloatArrayTest removeSelector: #testAtAllPutAll! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAt! FloatArrayTest removeSelector: #testAsSortedCollectionWithSortBlock! FloatArrayTest removeSelector: #testCopyAfterWithDuplicate! FloatArrayTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! FloatArrayTest removeSelector: #testSortedUsingBlock! FloatArrayTest removeSelector: #testWithAll! FloatArrayTest removeSelector: #test0FixtureIndexAccessTest! FloatArrayTest removeSelector: #testCopyCreatesNewObject! FloatArrayTest removeSelector: #testAllButFirstDo! FloatArrayTest removeSelector: #testWithDo! FloatArrayTest removeSelector: #testWithDoError! FloatArrayTest removeSelector: #testAtWrap! FloatArrayTest removeSelector: #testConcatenation! FloatArrayTest removeSelector: #testCopyNonEmptyWithout! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! FloatArrayTest removeSelector: #testAsOrderedCollection! FloatArrayTest removeSelector: #testIntersectionItself! FloatArrayTest removeSelector: #testKeysAndValuesDo! FloatArrayTest removeSelector: #test0CopyTest! FloatArrayTest removeSelector: #testStreamContentsProtocol! FloatArrayTest removeSelector: #test0FixtureSequencedConcatenationTest! FloatArrayTest removeSelector: #testHasEqualElements! FloatArrayTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! FloatArrayTest removeSelector: #testAsSortedCollection! FloatArrayTest removeSelector: #testCopyEmptyWithout! FloatArrayTest removeSelector: #test0TSequencedStructuralEqualityTest! FloatArrayTest removeSelector: #testEqualSign! FloatArrayTest removeSelector: #testUnion! FloatArrayTest removeSelector: #testCopyReplaceFromToWith! FloatArrayTest removeSelector: #testDo! FloatArrayTest removeSelector: #testsBeginsWith! FloatArrayTest removeSelector: #testsBeginsWithEmpty! FloatArrayTest removeSelector: #testShuffled! FloatArrayTest removeSelector: #testCopySameClass! FloatArrayTest removeSelector: #testAfter! FloatArrayTest removeSelector: #testAllButFirstNElements! FloatArrayTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! FloatArrayTest removeSelector: #testCopyAfter! FloatArrayTest removeSelector: #test0FixturePrintTest! FloatArrayTest removeSelector: #testIsSortedBy! FloatArrayTest removeSelector: #testReverseWithDo! FloatArrayTest removeSelector: #testCopyFromTo! FloatArrayTest removeSelector: #testIncludesAllNoneThere! FloatArrayTest removeSelector: #testIndexOfStartingAt! FloatArrayTest removeSelector: #testKeysAndValuesDoEmpty! FloatArrayTest removeSelector: #testAsSetWithEqualsElements! FloatArrayTest removeSelector: #testPrintOnDelimiterLast! FloatArrayTest removeSelector: #testAsBag! FloatArrayTest removeSelector: #howMany:in:! FloatArrayTest removeSelector: #test0FixtureConverAsSortedTest! FloatArrayTest removeSelector: #testCopyAfterLastWithDuplicate! FloatArrayTest removeSelector: #testCopyEmptyWith! FloatArrayTest removeSelector: #testStoreOn! FloatArrayTest removeSelector: #testIndexOfStartingAtIfAbsent! FloatArrayTest removeSelector: #testReplaceAllWith! FloatArrayTest removeSelector: #numberOfSimilarElementsInIntersection! FloatArrayTest removeSelector: #testAtAll! FloatArrayTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! FloatArrayTest removeSelector: #testShallowCopy! FloatArrayTest removeSelector: #testIndexOfIfAbsent! FloatArrayTest removeSelector: #testStreamContentsSized! FloatArrayTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! FloatArrayTest removeSelector: #testAsIdentitySet! FloatArrayTest removeSelector: #testWithWithWith! FloatArrayTest removeSelector: #testAsSet! FloatArrayTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! FloatArrayTest removeSelector: #testIncludesElementIsThere! FloatArrayTest removeSelector: #testSortUsingSortBlock! FloatArrayTest removeSelector: #testDifferenceWithSeparateCollection! FloatArrayTest removeSelector: #test0FixtureCloneTest! FloatArrayTest removeSelector: #testAtLastError! FloatArrayTest removeSelector: #testCopyUpToLast! FloatArrayTest removeSelector: #testCopyUpToLastEmpty! FloatArrayTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! FloatArrayTest removeSelector: #testPrintOn! FloatArrayTest removeSelector: #testAtPutTwoValues! FloatArrayTest removeSelector: #testCopyUpTo! FloatArrayTest removeSelector: #testLast! FloatArrayTest removeSelector: #testAsStringOnDelimiterLastMore! FloatArrayTest removeSelector: #testReversed! FloatArrayTest removeSelector: #test0FixtureIncludeTest! FloatArrayTest removeSelector: #test0FixtureIndexAccessFotMultipliness! FloatArrayTest removeSelector: #testIdentityIncludes! FloatArrayTest removeSelector: #testIncludesElementIsNotThere! FloatArrayTest removeSelector: #testCopyAfterEmpty! FloatArrayTest removeSelector: #testCopyWithoutIndex! FloatArrayTest removeSelector: #testLastIndexOfStartingAtDuplicate! FloatArrayTest removeSelector: #testAtWrapPut! FloatArrayTest removeSelector: #testReverseDo! FloatArrayTest removeSelector: #testCopyEquals! FloatArrayTest removeSelector: #testIndexOfDuplicate! FloatArrayTest removeSelector: #testCopyEmptyWithoutAll! FloatArrayTest removeSelector: #testAtPin! FloatArrayTest removeSelector: #testCopyNonEmptyWithoutAll! FloatArrayTest removeSelector: #testAtLastIfAbsent! FloatArrayTest removeSelector: #testAllButLastNElements! FloatArrayTest removeSelector: #testCopyAfterLast! FloatArrayTest removeSelector: #testFindFirstNotIn! FloatArrayTest removeSelector: #assertNoDuplicates:whenConvertedTo:! FloatArrayTest removeSelector: #testAfterIfAbsent! FloatArrayTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! FloatArrayTest removeSelector: #testAsCommaStringEmpty! FloatArrayTest removeSelector: #testForceToPaddingWith! FloatArrayTest removeSelector: #testFindLast! FloatArrayTest removeSelector: #test0FixtureCreationWithTest! FloatArrayTest removeSelector: #testAtPut! FloatArrayTest removeSelector: #testCopyNonEmpty! FloatArrayTest removeSelector: #testReverseDoEmpty! FloatArrayTest removeSelector: #testWithWith! FloatArrayTest removeSelector: #collectionWithIdentical! FloatArrayTest removeSelector: #testFirstSecondThird! FloatArrayTest removeSelector: #testForceToPaddingStartWith! FloatArrayTest removeSelector: #testCopyWithFirst! FloatArrayTest removeSelector: #testAsStringOnDelimiterEmpty! FloatArrayTest removeSelector: #testAtLast! FloatArrayTest removeSelector: #testAtLastPut! FloatArrayTest removeSelector: #testSort! FloatArrayTest removeSelector: #testIntersectionEmpty! FloatArrayTest removeSelector: #testIsSorted! FloatArrayTest removeSelector: #testAtRandom! FloatArrayTest removeSelector: #assertSameContents:whenConvertedTo:! FloatArrayTest removeSelector: #testEqualSignForSequenceableCollections! FloatArrayTest removeSelector: #testStreamContents! FloatArrayTest removeSelector: #test0FixtureBeginsEndsWithTest! FloatArrayTest removeSelector: #testDifferenceWithNonNullIntersection! FloatArrayTest removeSelector: #testAtIfAbsent! FloatArrayTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! FloatArrayTest removeSelector: #test0FixtureSubcollectionAccessTest! FloatArrayTest removeSelector: #testIndexOf! FloatArrayTest removeSelector: #test0FixtureSequencedElementAccessTest! FloatArrayTest removeSelector: #testLastIndexOfIfAbsentDuplicate! FloatArrayTest removeSelector: #testIntersectionBasic! FloatArrayTest removeSelector: #testAllButFirst! FloatArrayTest removeSelector: #testDifference! FloatArrayTest removeSelector: #testAllButLastDo! FloatArrayTest removeSelector: #test0FixtureCopyPartOfForMultipliness! FloatArrayTest removeSelector: #testPairsCollect! FloatArrayTest removeSelector: #testShallowCopyEmpty! FloatArrayTest removeSelector: #testReverse! FloatArrayTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! FloatArrayTest removeSelector: #testBeforeIfAbsent! FloatArrayTest removeSelector: #testCopyUpToEmpty! FloatArrayTest removeSelector: #testWithIndexDo! FloatArrayTest removeSelector: #test0FixturePutOneOrMoreElementsTest! FloatArrayTest removeSelector: #testWithWithWithWith! FloatArrayTest removeSelector: #containsAll:of:andOf:! FloatArrayTest removeSelector: #testAsCommaStringOne! FloatArrayTest removeSelector: #testFindLastNotIn! FloatArrayTest removeSelector: #testFromToDo! FloatArrayTest removeSelector: #test0FixtureCopySameContentsTest! FloatArrayTest removeSelector: #elementInForReplacement! FloatArrayTest removeSelector: #testAt! FloatArrayTest removeSelector: #testIndexOfIfAbsentDuplicate! FloatArrayTest removeSelector: #testMiddle! FloatArrayTest removeSelector: #testWithWithWithWithWith! FloatArrayTest removeSelector: #testAsStringOnDelimiterOne! FloatArrayTest removeSelector: #testAtPutOutOfBounds! FloatArrayTest removeSelector: #firstIndexesOf:in:! FloatArrayTest removeSelector: #testLastIndexOfIfAbsent! FloatArrayTest removeSelector: #testLastIndexOfStartingAt! FloatArrayTest removeSelector: #testWithCollectError! !Trait method! testReplaceFromToWithStartingAt | result repStart collection replacementCollec firstInd secondInd | collection := self nonEmpty . result := collection copy. replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . repStart := replacementCollec size - ( secondInd - firstInd + 1 ) + 1. result replaceFrom: firstInd to: secondInd with: replacementCollec startingAt: repStart . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: ( collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( replacementCollec size - repStart +1 ) do: [:i| self assert: (result at: i)=( replacementCollec at: ( repStart + ( i - firstInd ) ) ) ]. " end part :" ( firstInd + replacementCollec size ) to: ( result size ) do: [ :i | self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ].! ! !Trait method! testAtPutOutOfBounds "self debug: #testAtPutOutOfBounds" self should: [self empty at: self anIndex put: self aValue] raise: Error ! ! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testDo! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testShuffled | result | result := self nonEmpty shuffled . "verify content of 'result: '" result do: [:each | self assert: (self nonEmpty occurrencesOf: each)=(result occurrencesOf: each)]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testReplaceAllWith | result collection oldElement newElement oldOccurrences | collection := self nonEmpty . result := collection copy. oldElement := self elementInForReplacement . newElement := self newElement . oldOccurrences := (result occurrencesOf: oldElement) + (result occurrencesOf: newElement). result replaceAll: oldElement with: newElement . self assert: oldOccurrences = (result occurrencesOf: newElement)! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testFromToPut | collection index | index := self indexArray anyOne. collection := self nonEmpty copy. collection from: 1 to: index put: self aValue.. 1 to: index do: [:i | self assert: (collection at: i)= self aValue]. (index +1) to: collection size do: [:i | self assert: (collection at:i)= (self nonEmpty at:i)].! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testAtPutTwoValues "self debug: #testAtPutTwoValues" self nonEmpty at: self anIndex put: self aValue. self nonEmpty at: self anIndex put: self anotherValue. self assert: (self nonEmpty at: self anIndex) = self anotherValue.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testSort | result tmp | result := self unsortedCollection sort. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection anElement | collection := self collectionWithCopyNonIdentical. anElement := collection anyOne copy. self deny: (collection identityIncludes: anElement)! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self shouldnt: self aValue raise: Error. self shouldnt: self indexArray raise: Error. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! elementInForReplacement " return an element included in 'nonEmpty' " ^ self nonEmpty anyOne.! ! !Trait method! testSorted | result tmp | result := self unsortedCollection sorted. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixturePutTest self shouldnt: self aValue raise: Error. self shouldnt: self anotherValue raise: Error. self shouldnt: self anIndex raise: Error. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testAtWrapPut "self debug: #testAtWrapPut" | index | index := self indexArray anyOne. self nonEmpty atWrap: 0 put: self aValue. self assert: (self nonEmpty at:(self nonEmpty size))=self aValue. self nonEmpty atWrap: (self nonEmpty size+1) put: self aValue. self assert: (self nonEmpty at:(1))=self aValue. self nonEmpty atWrap: (index ) put: self aValue. self assert: (self nonEmpty at: index ) = self aValue. self nonEmpty atWrap: (self nonEmpty size+index ) put: self aValue . self assert: (self nonEmpty at:(index ))=self aValue .! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testAtPut "self debug: #testAtPut" self nonEmpty at: self anIndex put: self aValue. self assert: (self nonEmpty at: self anIndex) = self aValue. ! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testOFixtureReplacementSequencedTest self shouldnt: self nonEmpty raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: self elementInForReplacement raise: Error. self assert: (self nonEmpty includes: self elementInForReplacement ) . self shouldnt: self newElement raise: Error. self shouldnt: self firstIndex raise: Error. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self shouldnt: self secondIndex raise: Error. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self shouldnt: self replacementCollection raise: Error. self shouldnt: self replacementCollectionSameSize raise: Error. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! testSortUsingSortBlock | result tmp | result := self unsortedCollection sort: [:a :b | a>b]. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testAtAllIndexesPut self nonEmpty atAllPut: self aValue. self nonEmpty do:[ :each| self assert: each = self aValue]. ! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testAtLastPut | result index | index := self indexArray anyOne. result := self nonEmpty atLast: index put: self aValue. self assert: (self nonEmpty at: (self nonEmpty size +1 - index)) = self aValue .! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAtAllPut | | self nonEmpty atAll: self indexArray put: self aValue.. self indexArray do: [:i | self assert: (self nonEmpty at: i)=self aValue ]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! testReplaceFromToWith | result collection replacementCollec firstInd secondInd | collection := self nonEmpty . replacementCollec := self replacementCollectionSameSize . firstInd := self firstIndex . secondInd := self secondIndex . result := collection copy. result replaceFrom: firstInd to: secondInd with: replacementCollec . "verify content of 'result' : " "first part of 'result'' : '" 1 to: ( firstInd - 1 ) do: [ :i | self assert: (collection at:i ) = ( result at: i ) ]. " middle part containing replacementCollection : " ( firstInd ) to: ( firstInd + replacementCollec size - 1 ) do: [ :i | self assert: ( result at: i ) = ( replacementCollec at: ( i - firstInd +1 ) ) ]. " end part :" ( firstInd + replacementCollec size) to: (result size) do: [:i| self assert: ( result at: i ) = ( collection at: ( secondInd + 1 - ( firstInd + replacementCollec size ) + i ) ) ]. ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! testAtAllPutAll | aValueArray | aValueArray := self valueArray . self nonEmpty atAll: self indexArray putAll: aValueArray . 1 to: self indexArray size do: [:i | self assert: (self nonEmpty at:(self indexArray at: i))= (aValueArray at:i) ]! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !Trait method! valueArray " return a collection (with the same size than 'indexArray' )of values to be put in 'nonEmpty' at indexes in 'indexArray' " | result | result := Array new: self indexArray size. 1 to: result size do: [:i | result at:i put: (self aValue ). ]. ^ result.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! NBExternalUnionFields removeSelector: #typeOf:! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! MorphicUIManager removeSelector: #abort:! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #abort:title:! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! MorphicUIManager removeSelector: #alert:! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! MorphicUIManager removeSelector: #alert:title:! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! MorphicUIManager removeSelector: #alert:title:configure:! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! MorphicUIManager removeSelector: #centeredAlert:title:configure:! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! MorphicUIManager removeSelector: #chooseColor! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! MorphicUIManager removeSelector: #chooseColor:! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! MorphicUIManager removeSelector: #chooseColor:title:! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! MorphicUIManager removeSelector: #chooseDirectory:! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! MorphicUIManager removeSelector: #chooseDirectory:path:! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! MorphicUIManager removeSelector: #chooseDropList:list:! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! MorphicUIManager removeSelector: #chooseDropList:title:list:! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! MorphicUIManager removeSelector: #chooseFileName:extensions:path:preview:! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! MorphicUIManager removeSelector: #chooseFont! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! MorphicUIManager removeSelector: #chooseFont:! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! MorphicUIManager removeSelector: #deny:! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #deny:title:! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! MorphicUIManager removeSelector: #fileOpen:! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! MorphicUIManager removeSelector: #fileOpen:extensions:! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! MorphicUIManager removeSelector: #fileOpen:extensions:path:! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! MorphicUIManager removeSelector: #fileOpen:extensions:path:preview:! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! MorphicUIManager removeSelector: #fileSave:! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! MorphicUIManager removeSelector: #fileSave:extensions:! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! MorphicUIManager removeSelector: #fileSave:extensions:path:! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! MorphicUIManager removeSelector: #fileSave:path:! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #longMessage:title:! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! MorphicUIManager removeSelector: #message:! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #message:title:! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! MorphicUIManager removeSelector: #newAlphaImage:help:! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! MorphicUIManager removeSelector: #newAlphaSelector:getAlpha:setAlpha:help:! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newAutoAcceptTextEditorFor:getText:setText:getEnabled:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! MorphicUIManager removeSelector: #newBalloonHelp:for:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! MorphicUIManager removeSelector: #newBalloonHelp:for:corner:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:menu:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:help:! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newButtonFor:action:getEnabled:label:help:! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newButtonFor:action:label:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:getLabel:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:label:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:labelForm:help:! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! MorphicUIManager removeSelector: #newButtonLabel:! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newButtonLabelFor:label:getEnabled:! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! MorphicUIManager removeSelector: #newCancelButton! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! MorphicUIManager removeSelector: #newCancelButtonFor:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:getLabel:help:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:label:help:! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! MorphicUIManager removeSelector: #newCloseButton! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! MorphicUIManager removeSelector: #newCloseButtonFor:! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! MorphicUIManager removeSelector: #newCloseControlFor:action:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:getEnabled:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:help:! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! MorphicUIManager removeSelector: #newColorPresenterFor:getColor:help:! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! MorphicUIManager removeSelector: #newColumn:! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! MorphicUIManager removeSelector: #newDialogPanel! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:help:! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:class:default:ghostText:getEnabled:useIndex:help:! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:ghostText:getEnabled:help:! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! MorphicUIManager removeSelector: #newEmbeddedMenu! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! MorphicUIManager removeSelector: #newExpander:! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! MorphicUIManager removeSelector: #newExpander:for:! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! MorphicUIManager removeSelector: #newExpander:forAll:! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! MorphicUIManager removeSelector: #newFuzzyLabel:! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:getEnabled:! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:offset:alpha:getEnabled:! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! MorphicUIManager removeSelector: #newGroupbox! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! MorphicUIManager removeSelector: #newGroupbox:! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! MorphicUIManager removeSelector: #newGroupbox:for:! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! MorphicUIManager removeSelector: #newGroupbox:forAll:! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! MorphicUIManager removeSelector: #newGroupboxFor:! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! MorphicUIManager removeSelector: #newGroupboxForAll:! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! MorphicUIManager removeSelector: #newHSVASelector:help:! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! MorphicUIManager removeSelector: #newHSVSelector:help:! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! MorphicUIManager removeSelector: #newHueSelector:getHue:setHue:help:! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! MorphicUIManager removeSelector: #newImage:! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! MorphicUIManager removeSelector: #newImage:size:! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! MorphicUIManager removeSelector: #newImageFor:get:help:! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newIncrementalSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! MorphicUIManager removeSelector: #newLabel:! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newLabelFor:getLabel:getEnabled:! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newLabelFor:label:getEnabled:! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! MorphicUIManager removeSelector: #newLabelGroup:! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! MorphicUIManager removeSelector: #newLabelGroup:font:labelColor:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:getEnabled:help:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:help:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:icon:getEnabled:help:! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! MorphicUIManager removeSelector: #newMenu! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! MorphicUIManager removeSelector: #newMenuFor:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:help:! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:help:! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! MorphicUIManager removeSelector: #newMultistateButton! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! MorphicUIManager removeSelector: #newNoButton! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! MorphicUIManager removeSelector: #newNoButtonFor:! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! MorphicUIManager removeSelector: #newOKButton! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! MorphicUIManager removeSelector: #newOKButtonFor:! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! MorphicUIManager removeSelector: #newOKButtonFor:getEnabled:! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! MorphicUIManager removeSelector: #newOverflowRowForAll:! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! MorphicUIManager removeSelector: #newPanel! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! MorphicUIManager removeSelector: #newPluggableDialogWindow! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! MorphicUIManager removeSelector: #newPluggableDialogWindow:! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! MorphicUIManager removeSelector: #newPluggableDialogWindow:for:! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:label:help:! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! MorphicUIManager removeSelector: #newRow! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! MorphicUIManager removeSelector: #newRow:! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! MorphicUIManager removeSelector: #newSVSelector:help:! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! MorphicUIManager removeSelector: #newScrollPaneFor:! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! MorphicUIManager removeSelector: #newSeparator! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:getEnabled:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! MorphicUIManager removeSelector: #newStack! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! MorphicUIManager removeSelector: #newStack:! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! MorphicUIManager removeSelector: #newString:! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! MorphicUIManager removeSelector: #newString:font:style:! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! MorphicUIManager removeSelector: #newString:style:! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! MorphicUIManager removeSelector: #newTabGroup:! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! MorphicUIManager removeSelector: #newText:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:menu:! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:help:! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! MorphicUIManager removeSelector: #newTitle:for:! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! MorphicUIManager removeSelector: #newToolDockingBar! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! MorphicUIManager removeSelector: #newToolSpacer! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! MorphicUIManager removeSelector: #newToolbar! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! MorphicUIManager removeSelector: #newToolbar:! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! MorphicUIManager removeSelector: #newToolbarHandle! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! MorphicUIManager removeSelector: #newTreeFor:list:selected:changeSelected:! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! MorphicUIManager removeSelector: #newVerticalSeparator! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! MorphicUIManager removeSelector: #newWindowFor:title:! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! MorphicUIManager removeSelector: #newWorkArea! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! MorphicUIManager removeSelector: #newYesButton! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! MorphicUIManager removeSelector: #newYesButtonFor:! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! MorphicUIManager removeSelector: #proceed:! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #proceed:title:! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! MorphicUIManager removeSelector: #question:! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #question:title:! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! MorphicUIManager removeSelector: #questionWithoutCancel:! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! MorphicUIManager removeSelector: #questionWithoutCancel:title:! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! MorphicUIManager removeSelector: #textEntry:! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! MorphicUIManager removeSelector: #textEntry:title:! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! MorphicUIManager removeSelector: #textEntry:title:entryText:! MorphicUIManager removeSelector: #questionWithoutCancel:! MorphicUIManager removeSelector: #newWindowFor:title:! MorphicUIManager removeSelector: #deny:! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:getEnabled:help:! MorphicUIManager removeSelector: #newGroupbox! MorphicUIManager removeSelector: #newGroupbox:! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:getEnabled:help:! MorphicUIManager removeSelector: #fileOpen:extensions:path:! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:labelForm:help:! MorphicUIManager removeSelector: #newPanel! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:help:! MorphicUIManager removeSelector: #centeredAlert:title:configure:! MorphicUIManager removeSelector: #newMenuFor:! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:getEnabled:label:help:! MorphicUIManager removeSelector: #newAlphaImage:help:! MorphicUIManager removeSelector: #newStack:! MorphicUIManager removeSelector: #chooseFont! MorphicUIManager removeSelector: #chooseDirectory:path:! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:menu:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:label:help:! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:label:help:! MorphicUIManager removeSelector: #newPluggableDialogWindow:for:! MorphicUIManager removeSelector: #newGroupbox:for:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #newTextEntryFor:get:set:class:getEnabled:help:! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:class:default:ghostText:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:getLabel:help:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #chooseFont:! MorphicUIManager removeSelector: #newVerticalSeparator! MorphicUIManager removeSelector: #proceed:! MorphicUIManager removeSelector: #deny:title:! MorphicUIManager removeSelector: #newButtonLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #newHSVASelector:help:! MorphicUIManager removeSelector: #alert:title:configure:! MorphicUIManager removeSelector: #newCancelButton! MorphicUIManager removeSelector: #newString:style:! MorphicUIManager removeSelector: #newHueSelector:getHue:setHue:help:! MorphicUIManager removeSelector: #newEmbeddedMenu! MorphicUIManager removeSelector: #newButtonFor:getState:action:arguments:getEnabled:getLabel:help:! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:help:! MorphicUIManager removeSelector: #fileOpen:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:entryCompletion:! MorphicUIManager removeSelector: #newTabGroup:! MorphicUIManager removeSelector: #newNoButtonFor:! MorphicUIManager removeSelector: #chooseDropList:list:! MorphicUIManager removeSelector: #textEntry:title:entryText:! MorphicUIManager removeSelector: #newImage:! MorphicUIManager removeSelector: #alert:! MorphicUIManager removeSelector: #alert:title:! MorphicUIManager removeSelector: #proceed:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #newBalloonHelp:for:! MorphicUIManager removeSelector: #newTreeFor:list:selected:changeSelected:! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #newButtonFor:action:label:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:! MorphicUIManager removeSelector: #newNoButton! MorphicUIManager removeSelector: #newHSVSelector:help:! MorphicUIManager removeSelector: #newRow:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:! MorphicUIManager removeSelector: #newTitle:for:! MorphicUIManager removeSelector: #newGroupboxForAll:! MorphicUIManager removeSelector: #question:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:entryCompletion:! MorphicUIManager removeSelector: #newTextEditorFor:getText:setText:getEnabled:! MorphicUIManager removeSelector: #chooseDirectory:! MorphicUIManager removeSelector: #newLabelFor:getLabel:getEnabled:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:help:! MorphicUIManager removeSelector: #chooseDropList:title:list:! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:getEnabled:help:! MorphicUIManager removeSelector: #newExpander:forAll:! MorphicUIManager removeSelector: #newString:! MorphicUIManager removeSelector: #questionWithoutCancel:title:! MorphicUIManager removeSelector: #newFuzzyLabel:! MorphicUIManager removeSelector: #newRow! MorphicUIManager removeSelector: #newStack! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:offset:alpha:getEnabled:! MorphicUIManager removeSelector: #chooseFileName:extensions:path:preview:! MorphicUIManager removeSelector: #newRadioButtonFor:getSelected:setSelected:label:help:! MorphicUIManager removeSelector: #newYesButtonFor:! MorphicUIManager removeSelector: #abort:title:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:! MorphicUIManager removeSelector: #newColorChooserFor:getColor:setColor:help:! MorphicUIManager removeSelector: #newIncrementalSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #newLabelGroup:font:labelColor:! MorphicUIManager removeSelector: #newCloseButton! MorphicUIManager removeSelector: #newPluggableDialogWindow:! MorphicUIManager removeSelector: #newSVSelector:help:! MorphicUIManager removeSelector: #newMenu! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:menu:! MorphicUIManager removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! MorphicUIManager removeSelector: #message:! MorphicUIManager removeSelector: #newBalloonHelp:for:corner:! MorphicUIManager removeSelector: #newAlphaSelector:getAlpha:setAlpha:help:! MorphicUIManager removeSelector: #newButtonFor:action:getEnabled:label:help:! MorphicUIManager removeSelector: #longMessage:title:! MorphicUIManager removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:label:help:! MorphicUIManager removeSelector: #newDialogPanel! MorphicUIManager removeSelector: #chooseColor:title:! MorphicUIManager removeSelector: #newCancelButtonFor:! MorphicUIManager removeSelector: #newOKButton! MorphicUIManager removeSelector: #newFuzzyLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #newYesButton! MorphicUIManager removeSelector: #chooseColor! MorphicUIManager removeSelector: #newListFor:list:selected:changeSelected:icon:getEnabled:help:! MorphicUIManager removeSelector: #newString:font:style:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:! MorphicUIManager removeSelector: #newToolbar! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #fileSave:path:! MorphicUIManager removeSelector: #newCloseButtonFor:! MorphicUIManager removeSelector: #chooseColor:! MorphicUIManager removeSelector: #newScrollPaneFor:! MorphicUIManager removeSelector: #newPluggableDialogWindow! MorphicUIManager removeSelector: #newOKButtonFor:! MorphicUIManager removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:ghostText:getEnabled:help:! MorphicUIManager removeSelector: #newGroupboxFor:! MorphicUIManager removeSelector: #newOverflowRowForAll:! MorphicUIManager removeSelector: #message:title:! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #newBasicTextEditorFor:getText:setText:! MorphicUIManager removeSelector: #newImage:size:! MorphicUIManager removeSelector: #newImageFor:get:help:! MorphicUIManager removeSelector: #abort:! MorphicUIManager removeSelector: #newColorPresenterFor:getColor:help:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #newOKButtonFor:getEnabled:! MorphicUIManager removeSelector: #newMorphListFor:list:getSelected:setSelected:help:! MorphicUIManager removeSelector: #newText:! MorphicUIManager removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! MorphicUIManager removeSelector: #fileSave:extensions:path:! MorphicUIManager removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:help:! MorphicUIManager removeSelector: #newLabelFor:label:getEnabled:! MorphicUIManager removeSelector: #newLabel:! MorphicUIManager removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:! MorphicUIManager removeSelector: #newLabelGroup:! MorphicUIManager removeSelector: #newExpander:! MorphicUIManager removeSelector: #fileOpen:extensions:path:preview:! MorphicUIManager removeSelector: #newExpander:for:! MorphicUIManager removeSelector: #newMultistateButton! MorphicUIManager removeSelector: #newColumn:! MorphicUIManager removeSelector: #newWorkArea! MorphicUIManager removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:help:! MorphicUIManager removeSelector: #newToolDockingBar! MorphicUIManager removeSelector: #textEntry:title:! MorphicUIManager removeSelector: #fileSave:extensions:! MorphicUIManager removeSelector: #fileSave:! MorphicUIManager removeSelector: #newSeparator! MorphicUIManager removeSelector: #newCloseControlFor:action:help:! MorphicUIManager removeSelector: #newSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! MorphicUIManager removeSelector: #question:! MorphicUIManager removeSelector: #textEntry:! MorphicUIManager removeSelector: #newGroupbox:forAll:! MorphicUIManager removeSelector: #newButtonLabel:! MorphicUIManager removeSelector: #newToolbar:! MorphicUIManager removeSelector: #newToolSpacer! MorphicUIManager removeSelector: #fileOpen:extensions:! MorphicUIManager removeSelector: #newToolbarHandle! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! SetTest removeSelector: #assertNoDuplicates:whenConvertedTo:! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! SetTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! SetTest removeSelector: #assertSameContents:whenConvertedTo:! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! SetTest removeSelector: #containsAll:of:andOf:! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! SetTest removeSelector: #numberOfSimilarElementsInIntersection! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! SetTest removeSelector: #test0CopyTest! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! SetTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! SetTest removeSelector: #test0FixtureCloneTest! !Trait method! test0FixtureConcatenationTest self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self empty ]raise: Error. self assert: self empty isEmpty! ! SetTest removeSelector: #test0FixtureConcatenationTest! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! SetTest removeSelector: #test0FixtureConverAsSortedTest! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! SetTest removeSelector: #test0FixtureCreationWithTest! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! SetTest removeSelector: #test0FixtureIncludeTest! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! SetTest removeSelector: #test0FixtureIncludeWithIdentityTest! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! SetTest removeSelector: #test0FixtureOccurrencesTest! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty.! ! SetTest removeSelector: #test0FixturePrintTest! !Trait method! test0FixtureRequirementsOfTGrowableTest self shouldnt: [self empty] raise: Exception. self shouldnt: [self nonEmpty] raise: Exception. self shouldnt: [self element] raise: Exception. self shouldnt: [self elementNotIn] raise: Exception. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotIn).! ! SetTest removeSelector: #test0FixtureRequirementsOfTGrowableTest! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! SetTest removeSelector: #test0FixtureSetAritmeticTest! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! SetTest removeSelector: #test0FixtureTConvertTest! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! SetTest removeSelector: #test0FixtureTRemoveTest! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! SetTest removeSelector: #test0TStructuralEqualityTest! !Trait method! testAddAlreadyThereDoesNotCount | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement add: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! SetTest removeSelector: #testAddAlreadyThereDoesNotCount! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! SetTest removeSelector: #testAsArray! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! SetTest removeSelector: #testAsBag! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! SetTest removeSelector: #testAsByteArray! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! SetTest removeSelector: #testAsCommaStringEmpty! !Trait method! testAsCommaStringMore | result resultAnd index allElementsAsString tmp | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . tmp :=OrderedCollection new. self nonEmpty do: [ :each | tmp add: each asString]. "verifying result :" index := 1. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ].! ! SetTest removeSelector: #testAsCommaStringMore! !Trait method! testAsCommaStringOne self nonEmpty1Element do: [:each | self assert: each asString =self nonEmpty1Element asCommaString. self assert: each asString=self nonEmpty1Element asCommaStringAnd.]. ! ! SetTest removeSelector: #testAsCommaStringOne! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! SetTest removeSelector: #testAsIdentitySet! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! SetTest removeSelector: #testAsOrderedCollection! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! SetTest removeSelector: #testAsSortedCollection! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! SetTest removeSelector: #testAsSortedCollectionWithSortBlock! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! SetTest removeSelector: #testAsStringOnDelimiterEmpty! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! SetTest removeSelector: #testAsStringOnDelimiterLastEmpty! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString tmp | delim := ', '. last := 'and'. result:=''. tmp := self nonEmpty collect: [:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ]. ! ! SetTest removeSelector: #testAsStringOnDelimiterLastMore! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! SetTest removeSelector: #testAsStringOnDelimiterLastOne! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result allElementsAsString tmp | delim := ', '. result:=''. tmp:= self nonEmpty collect:[:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ].! ! SetTest removeSelector: #testAsStringOnDelimiterMore! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! SetTest removeSelector: #testAsStringOnDelimiterOne! !Trait method! testConcatenation | collection1 collection2 result | collection1 := self firstCollection . collection2 := self secondCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. collection2 do:[ :each | self assert: (result includes: each)]. ! ! SetTest removeSelector: #testConcatenation! !Trait method! testConcatenationWithDuplicate | collection1 collection2 result | collection1 := self firstCollection . collection2 := self firstCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. self assert: result size = collection1 size.! ! SetTest removeSelector: #testConcatenationWithDuplicate! !Trait method! testConcatenationWithEmpty | result | result := self firstCollection , self empty. self assert: result = self firstCollection! ! SetTest removeSelector: #testConcatenationWithEmpty! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! SetTest removeSelector: #testCopyCreatesNewObject! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! SetTest removeSelector: #testCopyEmpty! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! SetTest removeSelector: #testCopyEquals! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! SetTest removeSelector: #testCopyNonEmpty! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! SetTest removeSelector: #testCopyNonEmptyWithout! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! SetTest removeSelector: #testCopyNotSame! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! SetTest removeSelector: #testCopySameClass! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! SetTest removeSelector: #testDifference! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! SetTest removeSelector: #testDifferenceWithNonNullIntersection! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! SetTest removeSelector: #testDifferenceWithSeparateCollection! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! SetTest removeSelector: #testEqualSign! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! SetTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! SetTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! SetTest removeSelector: #testIdentityIncludesNonSpecificComportement! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! SetTest removeSelector: #testIncludesAllNoneThere! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! SetTest removeSelector: #testIncludesAnyAllThere! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! SetTest removeSelector: #testIncludesAnyNoneThere! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! SetTest removeSelector: #testIncludesElementIsThere! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SetTest removeSelector: #testIntersectionBasic! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! SetTest removeSelector: #testIntersectionEmpty! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! SetTest removeSelector: #testIntersectionItself! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SetTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! SetTest removeSelector: #testOccurrencesOf! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! SetTest removeSelector: #testOccurrencesOfEmpty! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! SetTest removeSelector: #testOccurrencesOfNotIn! !Trait method! testPrintElementsOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)). ].! ! SetTest removeSelector: #testPrintElementsOn! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! SetTest removeSelector: #testPrintNameOn! !Trait method! testPrintOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)).]. ].! ! SetTest removeSelector: #testPrintOn! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)) ].! ! SetTest removeSelector: #testPrintOnDelimiter! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. ].! ! SetTest removeSelector: #testPrintOnDelimiterLast! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! SetTest removeSelector: #testRemoveAllSuchThat! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! SetTest removeSelector: #testRemoveElementFromEmpty! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! SetTest removeSelector: #testRemoveElementReallyRemovesElement! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! SetTest removeSelector: #testRemoveElementThatExists! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! SetTest removeSelector: #testStoreOn! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! SetTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! SetTest removeSelector: #testUnionOfEmpties! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! SetTest removeSelector: #testWith! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! SetTest removeSelector: #testWithAll! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! SetTest removeSelector: #testWithWith! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SetTest removeSelector: #testWithWithWith! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SetTest removeSelector: #testWithWithWithWith! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SetTest removeSelector: #testWithWithWithWithWith! SetTest removeSelector: #numberOfSimilarElementsInIntersection! SetTest removeSelector: #testRemoveElementReallyRemovesElement! SetTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SetTest removeSelector: #testAsIdentitySet! SetTest removeSelector: #testWithWithWith! SetTest removeSelector: #test0TStructuralEqualityTest! SetTest removeSelector: #testAsByteArray! SetTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SetTest removeSelector: #testConcatenationWithDuplicate! SetTest removeSelector: #testIncludesAnyNoneThere! SetTest removeSelector: #test0FixtureCloneTest! SetTest removeSelector: #testAsArray! SetTest removeSelector: #testCopyNotSame! SetTest removeSelector: #testDifferenceWithSeparateCollection! SetTest removeSelector: #testIncludesElementIsThere! SetTest removeSelector: #testUnionOfEmpties! SetTest removeSelector: #testPrintOn! SetTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! SetTest removeSelector: #testPrintElementsOn! SetTest removeSelector: #testWith! SetTest removeSelector: #testConcatenationWithEmpty! SetTest removeSelector: #testRemoveElementFromEmpty! SetTest removeSelector: #testAsStringOnDelimiterLastMore! SetTest removeSelector: #testAsStringOnDelimiterLastEmpty! SetTest removeSelector: #test0FixtureIncludeTest! SetTest removeSelector: #testOccurrencesOfEmpty! SetTest removeSelector: #testCopyEmpty! SetTest removeSelector: #testAsStringOnDelimiterLastOne! SetTest removeSelector: #test0FixtureIncludeWithIdentityTest! SetTest removeSelector: #test0FixtureSetAritmeticTest! SetTest removeSelector: #testPrintOnDelimiter! SetTest removeSelector: #test0FixtureRequirementsOfTGrowableTest! SetTest removeSelector: #test0FixtureTConvertTest! SetTest removeSelector: #testCopyEquals! SetTest removeSelector: #testAsStringOnDelimiterMore! SetTest removeSelector: #testRemoveElementThatExists! SetTest removeSelector: #testIdentityIncludesNonSpecificComportement! SetTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SetTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SetTest removeSelector: #testIncludesAnyAllThere! SetTest removeSelector: #testAsCommaStringEmpty! SetTest removeSelector: #test0FixtureCreationWithTest! SetTest removeSelector: #testCopyNonEmpty! SetTest removeSelector: #testPrintNameOn! SetTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SetTest removeSelector: #testWithWith! SetTest removeSelector: #test0FixtureTRemoveTest! SetTest removeSelector: #testAsCommaStringMore! SetTest removeSelector: #testAsStringOnDelimiterEmpty! SetTest removeSelector: #testIntersectionEmpty! SetTest removeSelector: #assertSameContents:whenConvertedTo:! SetTest removeSelector: #testAsSortedCollectionWithSortBlock! SetTest removeSelector: #testOccurrencesOfNotIn! SetTest removeSelector: #test0FixtureOccurrencesTest! SetTest removeSelector: #testDifferenceWithNonNullIntersection! SetTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SetTest removeSelector: #testCopyCreatesNewObject! SetTest removeSelector: #testWithAll! SetTest removeSelector: #testConcatenation! SetTest removeSelector: #testCopyNonEmptyWithout! SetTest removeSelector: #testDifference! SetTest removeSelector: #testIntersectionBasic! SetTest removeSelector: #testAsOrderedCollection! SetTest removeSelector: #testIntersectionItself! SetTest removeSelector: #testOccurrencesOf! SetTest removeSelector: #test0CopyTest! SetTest removeSelector: #testRemoveAllSuchThat! SetTest removeSelector: #testAsSortedCollection! SetTest removeSelector: #testEqualSign! SetTest removeSelector: #test0FixtureConcatenationTest! SetTest removeSelector: #testCopySameClass! SetTest removeSelector: #testWithWithWithWith! SetTest removeSelector: #containsAll:of:andOf:! SetTest removeSelector: #testAsCommaStringOne! SetTest removeSelector: #test0FixturePrintTest! SetTest removeSelector: #testIncludesAllNoneThere! SetTest removeSelector: #testWithWithWithWithWith! SetTest removeSelector: #testPrintOnDelimiterLast! SetTest removeSelector: #testAsBag! SetTest removeSelector: #testAsStringOnDelimiterOne! SetTest removeSelector: #test0FixtureConverAsSortedTest! SetTest removeSelector: #testAddAlreadyThereDoesNotCount! SetTest removeSelector: #testStoreOn! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testCopyCreatesNewObject "self debug: #testCopyCreatesNewObject" | copy | copy := self nonEmpty copy. self deny: self nonEmpty == copy. ! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! !Trait method! testPrintOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)).]. ].! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty.! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testAsCommaStringMore | result resultAnd index allElementsAsString tmp | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . tmp :=OrderedCollection new. self nonEmpty do: [ :each | tmp add: each asString]. "verifying result :" index := 1. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ].! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result allElementsAsString tmp | delim := ', '. result:=''. tmp:= self nonEmpty collect:[:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. allElementsAsString := (result findBetweenSubStrs: ', ' ). allElementsAsString do: [:each | self assert: (tmp occurrencesOf: each)=(allElementsAsString occurrencesOf: each). ].! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString tmp | delim := ', '. last := 'and'. result:=''. tmp := self nonEmpty collect: [:each | each asString]. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) | i= allElementsAsString size ifTrue: [self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self assert: (allElementsAsString at:i)=('and')]. ]. ! ! !Trait method! testAsCommaStringOne self nonEmpty1Element do: [:each | self assert: each asString =self nonEmpty1Element asCommaString. self assert: each asString=self nonEmpty1Element asCommaStringAnd.]. ! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! test0FixtureConcatenationTest self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self firstCollection ]raise: Error. self deny: self firstCollection isEmpty. self shouldnt: [ self empty ]raise: Error. self assert: self empty isEmpty! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testConcatenationWithEmpty | result | result := self firstCollection , self empty. self assert: result = self firstCollection! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)). ].! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (tmp occurrencesOf:(allElementsAsString at:i))=(allElementsAsString occurrencesOf:(allElementsAsString at:i)) ].! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testConcatenation | collection1 collection2 result | collection1 := self firstCollection . collection2 := self secondCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. collection2 do:[ :each | self assert: (result includes: each)]. ! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAddAlreadyThereDoesNotCount | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement add: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0FixtureRequirementsOfTGrowableTest self shouldnt: [self empty] raise: Exception. self shouldnt: [self nonEmpty] raise: Exception. self shouldnt: [self element] raise: Exception. self shouldnt: [self elementNotIn] raise: Exception. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotIn).! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testConcatenationWithDuplicate | collection1 collection2 result | collection1 := self firstCollection . collection2 := self firstCollection . result := collection1 , collection2. collection1 do:[ :each | self assert: (result includes: each)]. self assert: result size = collection1 size.! ! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString tmp | result:=''. aStream:= ReadWriteStream on: result. tmp:= OrderedCollection new. self nonEmpty do: [:each | tmp add: each asString]. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (tmp occurrencesOf: (allElementsAsString at:i))=(allElementsAsString occurrencesOf: (allElementsAsString at:i))]. ].! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do: [:each1 | self nonEmpty1Element do: [:each2 |self assert: each1 = (each2 asString) ] ]. ! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize | oldSize := self collectionWithElement size. self assert: (self collectionWithElement includes: self element). added := self collectionWithElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithElement includes: self element). self assert: self collectionWithElement size = oldSize.! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! SortedCollectionTest removeSelector: #assertNoDuplicates:whenConvertedTo:! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! SortedCollectionTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! SortedCollectionTest removeSelector: #assertSameContents:whenConvertedTo:! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! SortedCollectionTest removeSelector: #containsAll:of:andOf:! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! SortedCollectionTest removeSelector: #numberOfSimilarElementsInIntersection! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! SortedCollectionTest removeSelector: #test0CopyTest! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! SortedCollectionTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! SortedCollectionTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! SortedCollectionTest removeSelector: #test0FixtureBeginsEndsWithTest! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! SortedCollectionTest removeSelector: #test0FixtureConverAsSortedTest! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfForMultipliness! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! SortedCollectionTest removeSelector: #test0FixtureCopySameContentsTest! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! SortedCollectionTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! !Trait method! test0FixtureCopyWithReplacementForSorted self shouldnt: [self collectionOfSize5 ] raise: Error. self assert: self collectionOfSize5 size = 5. self shouldnt: [self replacementCollection ] raise: Error. self deny: self replacementCollection isEmpty. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty.! ! SortedCollectionTest removeSelector: #test0FixtureCopyWithReplacementForSorted! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! SortedCollectionTest removeSelector: #test0FixtureCreationWithTest! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! SortedCollectionTest removeSelector: #test0FixtureIncludeTest! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! SortedCollectionTest removeSelector: #test0FixtureIncludeWithIdentityTest! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! SortedCollectionTest removeSelector: #test0FixtureIndexAccessFotMultipliness! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! SortedCollectionTest removeSelector: #test0FixtureIterateSequencedReadableTest! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! SortedCollectionTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! SortedCollectionTest removeSelector: #test0FixtureOccurrencesTest! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! SortedCollectionTest removeSelector: #test0FixturePrintTest! !Trait method! test0FixtureRemoveByIndexTest self shouldnt: [self collectionWith5Elements ] raise: Error. self assert: self collectionWith5Elements size = 5.! ! SortedCollectionTest removeSelector: #test0FixtureRemoveByIndexTest! !Trait method! test0FixtureRequirementsOfTAddTest self shouldnt: [ self collectionWithElement ] raise: Exception. self shouldnt: [ self otherCollection ] raise: Exception. self shouldnt: [ self element ] raise: Exception. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! SortedCollectionTest removeSelector: #test0FixtureRequirementsOfTAddTest! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! SortedCollectionTest removeSelector: #test0FixtureSequencedElementAccessTest! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! SortedCollectionTest removeSelector: #test0FixtureSetAritmeticTest! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! SortedCollectionTest removeSelector: #test0FixtureSubcollectionAccessTest! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! SortedCollectionTest removeSelector: #test0FixtureTConvertTest! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! SortedCollectionTest removeSelector: #test0FixtureTRemoveTest! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! SortedCollectionTest removeSelector: #test0TSequencedStructuralEqualityTest! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! SortedCollectionTest removeSelector: #test0TStructuralEqualityTest! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! SortedCollectionTest removeSelector: #testAfter! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! SortedCollectionTest removeSelector: #testAfterIfAbsent! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! SortedCollectionTest removeSelector: #testAllButFirst! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SortedCollectionTest removeSelector: #testAllButFirstDo! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! SortedCollectionTest removeSelector: #testAllButFirstNElements! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! SortedCollectionTest removeSelector: #testAllButLast! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SortedCollectionTest removeSelector: #testAllButLastDo! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! SortedCollectionTest removeSelector: #testAllButLastNElements! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! SortedCollectionTest removeSelector: #testAsArray! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! SortedCollectionTest removeSelector: #testAsBag! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! SortedCollectionTest removeSelector: #testAsByteArray! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! SortedCollectionTest removeSelector: #testAsCommaStringEmpty! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! SortedCollectionTest removeSelector: #testAsCommaStringMore! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! SortedCollectionTest removeSelector: #testAsCommaStringOne! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! SortedCollectionTest removeSelector: #testAsIdentitySet! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! SortedCollectionTest removeSelector: #testAsIdentitySetWithEqualsElements! !Trait method! testAsIdentitySetWithIdentityEqualsElements | result | result := self collectionWithIdentical asIdentitySet. " Only one element should have been removed as two elements are equals with Identity equality" self assert: result size = (self collectionWithIdentical size - 1). self collectionWithIdentical do: [ :each | (self collectionWithIdentical occurrencesOf: each) > 1 ifTrue: [ "the two elements equals only with classic equality shouldn't 'have been removed" self assert: (result asOrderedCollection occurrencesOf: each) = 1 " the other elements are still here" ] ifFalse: [ self assert: (result asOrderedCollection occurrencesOf: each) = 1 ] ]. self assert: result class = IdentitySet! ! SortedCollectionTest removeSelector: #testAsIdentitySetWithIdentityEqualsElements! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! SortedCollectionTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! SortedCollectionTest removeSelector: #testAsOrderedCollection! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! SortedCollectionTest removeSelector: #testAsSet! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! SortedCollectionTest removeSelector: #testAsSetWithEqualsElements! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! SortedCollectionTest removeSelector: #testAsSortedCollection! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! SortedCollectionTest removeSelector: #testAsSortedCollectionWithSortBlock! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterEmpty! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastEmpty! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastMore! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastOne! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterMore! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! SortedCollectionTest removeSelector: #testAsStringOnDelimiterOne! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! SortedCollectionTest removeSelector: #testAt! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! SortedCollectionTest removeSelector: #testAtIfAbsent! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! SortedCollectionTest removeSelector: #testAtLast! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! SortedCollectionTest removeSelector: #testAtLastError! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! SortedCollectionTest removeSelector: #testAtLastIfAbsent! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! SortedCollectionTest removeSelector: #testAtOutOfBounds! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! SortedCollectionTest removeSelector: #testAtPin! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! SortedCollectionTest removeSelector: #testAtRandom! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! SortedCollectionTest removeSelector: #testAtWrap! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! SortedCollectionTest removeSelector: #testBefore! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! SortedCollectionTest removeSelector: #testBeforeIfAbsent! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! SortedCollectionTest removeSelector: #testCollectFromTo! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! SortedCollectionTest removeSelector: #testCopyAfter! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! SortedCollectionTest removeSelector: #testCopyAfterEmpty! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! SortedCollectionTest removeSelector: #testCopyAfterLast! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! SortedCollectionTest removeSelector: #testCopyAfterLastEmpty! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! SortedCollectionTest removeSelector: #testCopyAfterLastWithDuplicate! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! SortedCollectionTest removeSelector: #testCopyAfterWithDuplicate! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! SortedCollectionTest removeSelector: #testCopyEmptyMethod! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! SortedCollectionTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! SortedCollectionTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! SortedCollectionTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! SortedCollectionTest removeSelector: #testCopyEquals! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! SortedCollectionTest removeSelector: #testCopyFromTo! !Trait method! testCopyFromToWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! SortedCollectionTest removeSelector: #testCopyFromToWithForSorted! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! SortedCollectionTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! SortedCollectionTest removeSelector: #testCopyNonEmptyWithout! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! SortedCollectionTest removeSelector: #testCopyNotSame! !Trait method! testCopyReplaceAllWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceAll: collection with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceAll: collection with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! SortedCollectionTest removeSelector: #testCopyReplaceAllWithForSorted! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! SortedCollectionTest removeSelector: #testCopySameClass! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! SortedCollectionTest removeSelector: #testCopyUpTo! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! SortedCollectionTest removeSelector: #testCopyUpToEmpty! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! SortedCollectionTest removeSelector: #testCopyUpToLast! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! SortedCollectionTest removeSelector: #testCopyUpToLastEmpty! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! SortedCollectionTest removeSelector: #testCopyUpToLastWithDuplicate! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! SortedCollectionTest removeSelector: #testCopyUpToWithDuplicate! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! SortedCollectionTest removeSelector: #testCopyWithSequenceable! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! SortedCollectionTest removeSelector: #testCopyWithoutFirst! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! SortedCollectionTest removeSelector: #testDetectSequenced! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! SortedCollectionTest removeSelector: #testDifference! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! SortedCollectionTest removeSelector: #testDifferenceWithNonNullIntersection! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! SortedCollectionTest removeSelector: #testDifferenceWithSeparateCollection! !Trait method! testDo! ! SortedCollectionTest removeSelector: #testDo! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! SortedCollectionTest removeSelector: #testEqualSign! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! SortedCollectionTest removeSelector: #testEqualSignForSequenceableCollections! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! SortedCollectionTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! SortedCollectionTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! SortedCollectionTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! SortedCollectionTest removeSelector: #testFindFirst! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! SortedCollectionTest removeSelector: #testFindFirstNotIn! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! SortedCollectionTest removeSelector: #testFindLast! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! SortedCollectionTest removeSelector: #testFindLastNotIn! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! SortedCollectionTest removeSelector: #testFirstNElements! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! SortedCollectionTest removeSelector: #testFirstSecondThird! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SortedCollectionTest removeSelector: #testFromToDo! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! SortedCollectionTest removeSelector: #testHasEqualElements! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! SortedCollectionTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! SortedCollectionTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! SortedCollectionTest removeSelector: #testIdentityIncludesNonSpecificComportement! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self shouldnt: [self collectionWithNonIdentitySameAtEndAndBegining ] raise: Error. collection := self collectionWithNonIdentitySameAtEndAndBegining . self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! SortedCollectionTest removeSelector: #testIdentityIndexOfDuplicate! !Trait method! testIdentityIndexOfIAbsentDuplicate "self debug: #testIdentityIndexOfIfAbsent" | collection element elementCopy | collection := self collectionWithNonIdentitySameAtEndAndBegining . element := collection last. elementCopy := element copy. self deny: element == elementCopy . self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = collection size. self assert: (collection identityIndexOf: elementCopy ifAbsent: [ 55 ]) = 55! ! SortedCollectionTest removeSelector: #testIdentityIndexOfIAbsentDuplicate! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! SortedCollectionTest removeSelector: #testIncludesAllNoneThere! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! SortedCollectionTest removeSelector: #testIncludesAnyAllThere! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! SortedCollectionTest removeSelector: #testIncludesAnyNoneThere! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! SortedCollectionTest removeSelector: #testIncludesElementIsNotThere! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! SortedCollectionTest removeSelector: #testIncludesElementIsThere! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! SortedCollectionTest removeSelector: #testIndexOfDuplicate! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! SortedCollectionTest removeSelector: #testIndexOfIfAbsentDuplicate! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! SortedCollectionTest removeSelector: #testIndexOfStartingAtDuplicate! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SortedCollectionTest removeSelector: #testIntersectionBasic! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! SortedCollectionTest removeSelector: #testIntersectionEmpty! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! SortedCollectionTest removeSelector: #testIntersectionItself! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SortedCollectionTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! SortedCollectionTest removeSelector: #testKeysAndValuesDo! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! SortedCollectionTest removeSelector: #testKeysAndValuesDoEmpty! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! SortedCollectionTest removeSelector: #testLast! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! SortedCollectionTest removeSelector: #testLastIndexOfDuplicate! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! SortedCollectionTest removeSelector: #testLastIndexOfIfAbsentDuplicate! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! SortedCollectionTest removeSelector: #testLastIndexOfStartingAtDuplicate! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! SortedCollectionTest removeSelector: #testLastNElements! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! SortedCollectionTest removeSelector: #testMiddle! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! SortedCollectionTest removeSelector: #testOccurrencesOf! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! SortedCollectionTest removeSelector: #testOccurrencesOfEmpty! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! SortedCollectionTest removeSelector: #testOccurrencesOfForMultipliness! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! SortedCollectionTest removeSelector: #testOccurrencesOfNotIn! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! SortedCollectionTest removeSelector: #testOfSize! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! SortedCollectionTest removeSelector: #testPairsCollect! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! SortedCollectionTest removeSelector: #testPairsDo! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! SortedCollectionTest removeSelector: #testPrintElementsOn! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! SortedCollectionTest removeSelector: #testPrintNameOn! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! SortedCollectionTest removeSelector: #testPrintOn! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! SortedCollectionTest removeSelector: #testPrintOnDelimiter! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! SortedCollectionTest removeSelector: #testPrintOnDelimiterLast! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! SortedCollectionTest removeSelector: #testRemoveAllSuchThat! !Trait method! testRemoveAt | collection element result oldSize | collection := self collectionWith5Elements . element := collection at: 3. oldSize := collection size. result := collection removeAt: 3. self assert: result = element . self assert: collection size = (oldSize - 1).! ! SortedCollectionTest removeSelector: #testRemoveAt! !Trait method! testRemoveAtNotPresent | | self should: [self empty removeAt: 2] raise: Error.! ! SortedCollectionTest removeSelector: #testRemoveAtNotPresent! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! SortedCollectionTest removeSelector: #testRemoveElementFromEmpty! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! SortedCollectionTest removeSelector: #testRemoveElementReallyRemovesElement! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! SortedCollectionTest removeSelector: #testRemoveElementThatExists! !Trait method! testRemoveFirst | collection element result oldSize | collection := self collectionWith5Elements . element := collection first. oldSize := collection size. result := collection removeFirst. self assert: result = element . self assert: collection size = (oldSize - 1).! ! SortedCollectionTest removeSelector: #testRemoveFirst! !Trait method! testRemoveFirstNElements | collection elements result oldSize | collection := self collectionWith5Elements . elements := {collection first. collection at:2}. oldSize := collection size. result := collection removeFirst: 2. self assert: result = elements . self assert: collection size = (oldSize - 2).! ! SortedCollectionTest removeSelector: #testRemoveFirstNElements! !Trait method! testRemoveFirstNElementsNotPresent self should: [self empty removeFirst: 2] raise: Error.! ! SortedCollectionTest removeSelector: #testRemoveFirstNElementsNotPresent! !Trait method! testRemoveFirstNotPresent self should: [self empty removeFirst] raise: Error.! ! SortedCollectionTest removeSelector: #testRemoveFirstNotPresent! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! SortedCollectionTest removeSelector: #testRemoveIfAbsent! !Trait method! testRemoveLast | collection element result oldSize | collection := self collectionWith5Elements . element := collection last. oldSize := collection size. result := collection removeLast. self assert: result = element . self assert: collection size = (oldSize - 1).! ! SortedCollectionTest removeSelector: #testRemoveLast! !Trait method! testRemoveLastNElements | collection result oldSize elements | collection := self collectionWith5Elements . elements := { (collection at: (4)). collection last. }. oldSize := collection size. result := (collection removeLast: 2). self assert: result = elements. self assert: collection size = (oldSize - 2).! ! SortedCollectionTest removeSelector: #testRemoveLastNElements! !Trait method! testRemoveLastNElementsNElements self should: [self empty removeLast: 2] raise: Error.! ! SortedCollectionTest removeSelector: #testRemoveLastNElementsNElements! !Trait method! testRemoveLastNotPresent self should: [self empty removeLast] raise: Error.! ! SortedCollectionTest removeSelector: #testRemoveLastNotPresent! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SortedCollectionTest removeSelector: #testReverse! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! SortedCollectionTest removeSelector: #testReverseDo! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! SortedCollectionTest removeSelector: #testReverseDoEmpty! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! SortedCollectionTest removeSelector: #testReverseWithDo! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SortedCollectionTest removeSelector: #testReversed! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SortedCollectionTest removeSelector: #testShallowCopy! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! SortedCollectionTest removeSelector: #testShallowCopyEmpty! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! SortedCollectionTest removeSelector: #testStoreOn! !Trait method! testTAdd | added collection | collection :=self otherCollection . added := collection add: self element. self assert: added == self element. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: self element) . self assert: (self collectionWithElement includes: self element). ! ! SortedCollectionTest removeSelector: #testTAdd! !Trait method! testTAddAll | added collection toBeAdded | collection := self collectionWithElement . toBeAdded := self otherCollection . added := collection addAll: toBeAdded . self assert: added == toBeAdded . "test for identiy because #addAll: has not reason to copy its parameter." self assert: (collection includesAll: toBeAdded )! ! SortedCollectionTest removeSelector: #testTAddAll! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize collection anElement | collection := self collectionWithElement . oldSize := collection size. anElement := self element . self assert: (collection includes: anElement ). added := collection addIfNotPresent: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: collection size = oldSize! ! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! !Trait method! testTAddIfNotPresentWithNewElement | added oldSize collection elem | collection := self otherCollection . oldSize := collection size. elem := self element . self deny: (collection includes: elem ). added := collection addIfNotPresent: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection size = (oldSize + 1)). ! ! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithNewElement! !Trait method! testTAddTwice | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement ; add: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement ). self assert: collection size = (oldSize + 2)! ! SortedCollectionTest removeSelector: #testTAddTwice! !Trait method! testTAddWithOccurences | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement withOccurrences: 5. self assert: added == anElement. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement). self assert: collection size = (oldSize + 5)! ! SortedCollectionTest removeSelector: #testTAddWithOccurences! !Trait method! testTWrite | added collection elem | collection := self otherCollection . elem := self element . added := collection write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ) . self assert: (collection includes: elem ). ! ! SortedCollectionTest removeSelector: #testTWrite! !Trait method! testTWriteTwice | added oldSize collection elem | collection := self collectionWithElement . elem := self element . oldSize := collection size. added := collection write: elem ; write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ). self assert: collection size = (oldSize + 2)! ! SortedCollectionTest removeSelector: #testTWriteTwice! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! SortedCollectionTest removeSelector: #testUnion! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! SortedCollectionTest removeSelector: #testUnionOfEmpties! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! SortedCollectionTest removeSelector: #testWith! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! SortedCollectionTest removeSelector: #testWithAll! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! SortedCollectionTest removeSelector: #testWithCollect! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! SortedCollectionTest removeSelector: #testWithCollectError! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! SortedCollectionTest removeSelector: #testWithDo! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! SortedCollectionTest removeSelector: #testWithDoError! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! SortedCollectionTest removeSelector: #testWithIndexCollect! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! SortedCollectionTest removeSelector: #testWithIndexDo! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! SortedCollectionTest removeSelector: #testWithWith! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SortedCollectionTest removeSelector: #testWithWithWith! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SortedCollectionTest removeSelector: #testWithWithWithWith! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! SortedCollectionTest removeSelector: #testWithWithWithWithWith! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! SortedCollectionTest removeSelector: #testsBeginsWith! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! SortedCollectionTest removeSelector: #testsBeginsWithEmpty! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! SortedCollectionTest removeSelector: #testsEndsWith! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! SortedCollectionTest removeSelector: #testsEndsWithEmpty! SortedCollectionTest removeSelector: #testAllButLast! SortedCollectionTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! SortedCollectionTest removeSelector: #testsEndsWith! SortedCollectionTest removeSelector: #testRemoveLastNElements! SortedCollectionTest removeSelector: #testFirstNElements! SortedCollectionTest removeSelector: #testTWrite! SortedCollectionTest removeSelector: #test0TStructuralEqualityTest! SortedCollectionTest removeSelector: #testCopyWithoutFirst! SortedCollectionTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SortedCollectionTest removeSelector: #testBefore! SortedCollectionTest removeSelector: #testLastIndexOfDuplicate! SortedCollectionTest removeSelector: #testIncludesAnyNoneThere! SortedCollectionTest removeSelector: #testAsArray! SortedCollectionTest removeSelector: #testWith! SortedCollectionTest removeSelector: #testCopyNotSame! SortedCollectionTest removeSelector: #testUnionOfEmpties! SortedCollectionTest removeSelector: #testFindFirst! SortedCollectionTest removeSelector: #testCopyUpToWithDuplicate! SortedCollectionTest removeSelector: #testTWriteTwice! SortedCollectionTest removeSelector: #testWithIndexCollect! SortedCollectionTest removeSelector: #testPrintElementsOn! SortedCollectionTest removeSelector: #testTAddAll! SortedCollectionTest removeSelector: #testTAddWithOccurences! SortedCollectionTest removeSelector: #testRemoveFirst! SortedCollectionTest removeSelector: #test0FixtureIterateSequencedReadableTest! SortedCollectionTest removeSelector: #testCopyWithSequenceable! SortedCollectionTest removeSelector: #testCopyUpToLastWithDuplicate! SortedCollectionTest removeSelector: #testRemoveIfAbsent! SortedCollectionTest removeSelector: #testsEndsWithEmpty! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastEmpty! SortedCollectionTest removeSelector: #testAtOutOfBounds! SortedCollectionTest removeSelector: #testOccurrencesOfEmpty! SortedCollectionTest removeSelector: #testOfSize! SortedCollectionTest removeSelector: #testWithCollect! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastOne! SortedCollectionTest removeSelector: #test0FixtureCopyWithReplacementForSorted! SortedCollectionTest removeSelector: #test0FixtureIncludeWithIdentityTest! SortedCollectionTest removeSelector: #test0FixtureSetAritmeticTest! SortedCollectionTest removeSelector: #testPrintOnDelimiter! SortedCollectionTest removeSelector: #test0FixtureTConvertTest! SortedCollectionTest removeSelector: #testTAddTwice! SortedCollectionTest removeSelector: #testAsStringOnDelimiterMore! SortedCollectionTest removeSelector: #testRemoveElementThatExists! SortedCollectionTest removeSelector: #testDetectSequenced! SortedCollectionTest removeSelector: #testIdentityIncludesNonSpecificComportement! SortedCollectionTest removeSelector: #testRemoveLastNElementsNElements! SortedCollectionTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SortedCollectionTest removeSelector: #testIncludesAnyAllThere! SortedCollectionTest removeSelector: #testPairsDo! SortedCollectionTest removeSelector: #testLastNElements! SortedCollectionTest removeSelector: #testCollectFromTo! SortedCollectionTest removeSelector: #testPrintNameOn! SortedCollectionTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SortedCollectionTest removeSelector: #testIndexOfStartingAtDuplicate! SortedCollectionTest removeSelector: #testAsCommaStringMore! SortedCollectionTest removeSelector: #testCopyNonEmptyWith! SortedCollectionTest removeSelector: #testCopyAfterLastEmpty! SortedCollectionTest removeSelector: #testCopyEmptyMethod! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAllNotIncluded! SortedCollectionTest removeSelector: #testAsSortedCollectionWithSortBlock! SortedCollectionTest removeSelector: #testCopyAfterWithDuplicate! SortedCollectionTest removeSelector: #test0FixtureOccurrencesTest! SortedCollectionTest removeSelector: #testWithAll! SortedCollectionTest removeSelector: #testWithDo! SortedCollectionTest removeSelector: #testAllButFirstDo! SortedCollectionTest removeSelector: #testWithDoError! SortedCollectionTest removeSelector: #testAtWrap! SortedCollectionTest removeSelector: #testCopyNonEmptyWithout! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! SortedCollectionTest removeSelector: #testAsOrderedCollection! SortedCollectionTest removeSelector: #testIntersectionItself! SortedCollectionTest removeSelector: #testKeysAndValuesDo! SortedCollectionTest removeSelector: #testOccurrencesOf! SortedCollectionTest removeSelector: #test0CopyTest! SortedCollectionTest removeSelector: #testHasEqualElements! SortedCollectionTest removeSelector: #testIdentityIndexOfDuplicate! SortedCollectionTest removeSelector: #testAsSortedCollection! SortedCollectionTest removeSelector: #testCopyEmptyWithout! SortedCollectionTest removeSelector: #test0TSequencedStructuralEqualityTest! SortedCollectionTest removeSelector: #testEqualSign! SortedCollectionTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! SortedCollectionTest removeSelector: #testUnion! SortedCollectionTest removeSelector: #testDo! SortedCollectionTest removeSelector: #testsBeginsWith! SortedCollectionTest removeSelector: #testsBeginsWithEmpty! SortedCollectionTest removeSelector: #testCopySameClass! SortedCollectionTest removeSelector: #testAsIdentitySetWithIdentityEqualsElements! SortedCollectionTest removeSelector: #testAfter! SortedCollectionTest removeSelector: #testAllButFirstNElements! SortedCollectionTest removeSelector: #test0FixtureAsSetForIdentityMultiplinessTest! SortedCollectionTest removeSelector: #testCopyAfter! SortedCollectionTest removeSelector: #test0FixturePrintTest! SortedCollectionTest removeSelector: #testReverseWithDo! SortedCollectionTest removeSelector: #testCopyFromTo! SortedCollectionTest removeSelector: #testIncludesAllNoneThere! SortedCollectionTest removeSelector: #testKeysAndValuesDoEmpty! SortedCollectionTest removeSelector: #testAsSetWithEqualsElements! SortedCollectionTest removeSelector: #testPrintOnDelimiterLast! SortedCollectionTest removeSelector: #testAsBag! SortedCollectionTest removeSelector: #testCopyAfterLastWithDuplicate! SortedCollectionTest removeSelector: #test0FixtureConverAsSortedTest! SortedCollectionTest removeSelector: #testCopyEmptyWith! SortedCollectionTest removeSelector: #testCopyReplaceAllWithForSorted! SortedCollectionTest removeSelector: #testRemoveAt! SortedCollectionTest removeSelector: #testStoreOn! SortedCollectionTest removeSelector: #numberOfSimilarElementsInIntersection! SortedCollectionTest removeSelector: #testOccurrencesOfForMultipliness! SortedCollectionTest removeSelector: #testRemoveElementReallyRemovesElement! SortedCollectionTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SortedCollectionTest removeSelector: #testShallowCopy! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! SortedCollectionTest removeSelector: #testAsIdentitySet! SortedCollectionTest removeSelector: #testWithWithWith! SortedCollectionTest removeSelector: #testAsByteArray! SortedCollectionTest removeSelector: #testAsSet! SortedCollectionTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! SortedCollectionTest removeSelector: #testIncludesElementIsThere! SortedCollectionTest removeSelector: #testDifferenceWithSeparateCollection! SortedCollectionTest removeSelector: #testAtLastError! SortedCollectionTest removeSelector: #testCopyUpToLast! SortedCollectionTest removeSelector: #testCopyUpToLastEmpty! SortedCollectionTest removeSelector: #testPrintOn! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithElementAlreadyIn! SortedCollectionTest removeSelector: #testCopyUpTo! SortedCollectionTest removeSelector: #testRemoveElementFromEmpty! SortedCollectionTest removeSelector: #testLast! SortedCollectionTest removeSelector: #testAsStringOnDelimiterLastMore! SortedCollectionTest removeSelector: #testReversed! SortedCollectionTest removeSelector: #testTAdd! SortedCollectionTest removeSelector: #test0FixtureIncludeTest! SortedCollectionTest removeSelector: #test0FixtureIndexAccessFotMultipliness! SortedCollectionTest removeSelector: #testIncludesElementIsNotThere! SortedCollectionTest removeSelector: #testCopyAfterEmpty! SortedCollectionTest removeSelector: #testLastIndexOfStartingAtDuplicate! SortedCollectionTest removeSelector: #testRemoveLastNotPresent! SortedCollectionTest removeSelector: #testReverseDo! SortedCollectionTest removeSelector: #testCopyEquals! SortedCollectionTest removeSelector: #testIndexOfDuplicate! SortedCollectionTest removeSelector: #testCopyEmptyWithoutAll! SortedCollectionTest removeSelector: #testAtPin! SortedCollectionTest removeSelector: #testTAddIfNotPresentWithNewElement! SortedCollectionTest removeSelector: #testCopyNonEmptyWithoutAll! SortedCollectionTest removeSelector: #testAtLastIfAbsent! SortedCollectionTest removeSelector: #testAllButLastNElements! SortedCollectionTest removeSelector: #testCopyAfterLast! SortedCollectionTest removeSelector: #testFindFirstNotIn! SortedCollectionTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SortedCollectionTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! SortedCollectionTest removeSelector: #testAfterIfAbsent! SortedCollectionTest removeSelector: #testAsCommaStringEmpty! SortedCollectionTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! SortedCollectionTest removeSelector: #test0FixtureCreationWithTest! SortedCollectionTest removeSelector: #testFindLast! SortedCollectionTest removeSelector: #test0FixtureRequirementsOfTAddTest! SortedCollectionTest removeSelector: #testReverseDoEmpty! SortedCollectionTest removeSelector: #testWithWith! SortedCollectionTest removeSelector: #testFirstSecondThird! SortedCollectionTest removeSelector: #test0FixtureTRemoveTest! SortedCollectionTest removeSelector: #testAsStringOnDelimiterEmpty! SortedCollectionTest removeSelector: #testAtLast! SortedCollectionTest removeSelector: #testRemoveAtNotPresent! SortedCollectionTest removeSelector: #test0FixtureRemoveByIndexTest! SortedCollectionTest removeSelector: #testIntersectionEmpty! SortedCollectionTest removeSelector: #testAtRandom! SortedCollectionTest removeSelector: #assertSameContents:whenConvertedTo:! SortedCollectionTest removeSelector: #testIdentityIndexOfIAbsentDuplicate! SortedCollectionTest removeSelector: #testEqualSignForSequenceableCollections! SortedCollectionTest removeSelector: #testOccurrencesOfNotIn! SortedCollectionTest removeSelector: #test0FixtureBeginsEndsWithTest! SortedCollectionTest removeSelector: #testDifferenceWithNonNullIntersection! SortedCollectionTest removeSelector: #testAtIfAbsent! SortedCollectionTest removeSelector: #testRemoveFirstNElementsNotPresent! SortedCollectionTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SortedCollectionTest removeSelector: #test0FixtureSubcollectionAccessTest! SortedCollectionTest removeSelector: #test0FixtureSequencedElementAccessTest! SortedCollectionTest removeSelector: #testAsIdentitySetWithEqualsElements! SortedCollectionTest removeSelector: #testIntersectionBasic! SortedCollectionTest removeSelector: #testAllButFirst! SortedCollectionTest removeSelector: #testDifference! SortedCollectionTest removeSelector: #testLastIndexOfIfAbsentDuplicate! SortedCollectionTest removeSelector: #testAllButLastDo! SortedCollectionTest removeSelector: #testRemoveAllSuchThat! SortedCollectionTest removeSelector: #test0FixtureCopyPartOfForMultipliness! SortedCollectionTest removeSelector: #testPairsCollect! SortedCollectionTest removeSelector: #testRemoveLast! SortedCollectionTest removeSelector: #testShallowCopyEmpty! SortedCollectionTest removeSelector: #testReverse! SortedCollectionTest removeSelector: #testAsIdentitySetWithoutIdentityEqualsElements! SortedCollectionTest removeSelector: #testBeforeIfAbsent! SortedCollectionTest removeSelector: #testCopyUpToEmpty! SortedCollectionTest removeSelector: #testWithIndexDo! SortedCollectionTest removeSelector: #testWithWithWithWith! SortedCollectionTest removeSelector: #containsAll:of:andOf:! SortedCollectionTest removeSelector: #testAsCommaStringOne! SortedCollectionTest removeSelector: #testFindLastNotIn! SortedCollectionTest removeSelector: #test0FixtureCopySameContentsTest! SortedCollectionTest removeSelector: #testFromToDo! SortedCollectionTest removeSelector: #testRemoveFirstNotPresent! SortedCollectionTest removeSelector: #testAt! SortedCollectionTest removeSelector: #testCopyFromToWithForSorted! SortedCollectionTest removeSelector: #testIndexOfIfAbsentDuplicate! SortedCollectionTest removeSelector: #testMiddle! SortedCollectionTest removeSelector: #testAsStringOnDelimiterOne! SortedCollectionTest removeSelector: #testRemoveFirstNElements! SortedCollectionTest removeSelector: #testWithWithWithWithWith! SortedCollectionTest removeSelector: #testWithCollectError! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testCopyNotSame "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self nonEmpty copy. self deny: copy == self nonEmpty.! ! !Trait method! testWithWithWithWith "self debug: #testWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 4. aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: ( collection at: 4). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testAsIdentitySetWithIdentityEqualsElements | result | result := self collectionWithIdentical asIdentitySet. " Only one element should have been removed as two elements are equals with Identity equality" self assert: result size = (self collectionWithIdentical size - 1). self collectionWithIdentical do: [ :each | (self collectionWithIdentical occurrencesOf: each) > 1 ifTrue: [ "the two elements equals only with classic equality shouldn't 'have been removed" self assert: (result asOrderedCollection occurrencesOf: each) = 1 " the other elements are still here" ] ifFalse: [ self assert: (result asOrderedCollection occurrencesOf: each) = 1 ] ]. self assert: result class = IdentitySet! ! !Trait method! testOfSize "self debug: #testOfSize" | aCol | aCol := self collectionClass ofSize: 3. self assert: (aCol size = 3). ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testDo! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testTAdd | added collection | collection :=self otherCollection . added := collection add: self element. self assert: added == self element. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: self element) . self assert: (self collectionWithElement includes: self element). ! ! !Trait method! testCopyNonEmptyWithoutAllNotIncluded "self debug: #testCopyNonEmptyWithoutAllNotIncluded" | res | res := self nonEmpty copyWithoutAll: self collectionNotIncluded. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testCopyEmptyMethod | result | result := self collectionWithoutEqualElements copyEmpty . self assert: result isEmpty . self assert: result class= self nonEmpty class.! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testWithWithWith "self debug: #testWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom:1 to: 3 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testTAddIfNotPresentWithNewElement | added oldSize collection elem | collection := self otherCollection . oldSize := collection size. elem := self element . self deny: (collection includes: elem ). added := collection addIfNotPresent: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection size = (oldSize + 1)). ! ! !Trait method! testRemoveLast | collection element result oldSize | collection := self collectionWith5Elements . element := collection last. oldSize := collection size. result := collection removeLast. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! test0FixtureCreationWithTest self shouldnt: [ self collectionMoreThan5Elements ] raise: Error. self assert: self collectionMoreThan5Elements size >= 5.! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testTAddIfNotPresentWithElementAlreadyIn | added oldSize collection anElement | collection := self collectionWithElement . oldSize := collection size. anElement := self element . self assert: (collection includes: anElement ). added := collection addIfNotPresent: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: collection size = oldSize! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! testWith "self debug: #testWith" | aCol anElement | anElement := self collectionMoreThan5Elements anyOne. aCol := self collectionClass with: anElement. self assert: (aCol includes: anElement).! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! testRemoveElementFromEmpty "self debug: #testRemoveElementFromEmpty" self should: [ self empty remove: self nonEmptyWithoutEqualElements anyOne ] raise: Error! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! test0FixtureRequirementsOfTAddTest self shouldnt: [ self collectionWithElement ] raise: Exception. self shouldnt: [ self otherCollection ] raise: Exception. self shouldnt: [ self element ] raise: Exception. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testRemoveLastNElementsNElements self should: [self empty removeLast: 2] raise: Error.! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ] raise: Error. self assert: res == el! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testWithWithWithWithWith "self debug: #testWithWithWithWithWith" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 5 . aCol := self collectionClass with: (collection at:1) with: ( collection at:2 ) with: ( collection at: 3) with: (collection at: 4 ) with: ( collection at: 5 ). 1 to: 3 do: [ :i | self assert: ( aCol occurrencesOf: ( collection at: i ) ) = ( collection occurrencesOf: ( collection at: i ) ) ].! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self shouldnt: [self collectionWithNonIdentitySameAtEndAndBegining ] raise: Error. collection := self collectionWithNonIdentitySameAtEndAndBegining . self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testWithAll "self debug: #testWithAll" | aCol collection | collection := self collectionMoreThan5Elements asOrderedCollection . aCol := self collectionClass withAll: collection . collection do: [ :each | self assert: (aCol occurrencesOf: each ) = ( collection occurrencesOf: each ) ]. self assert: (aCol size = collection size ).! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testTWrite | added collection elem | collection := self otherCollection . elem := self element . added := collection write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ) . self assert: (collection includes: elem ). ! ! !Trait method! testTAddTwice | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement ; add: anElement . self assert: added == anElement . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement ). self assert: collection size = (oldSize + 2)! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testCopyFromToWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceFrom: 1 to: collection size with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureRemoveByIndexTest self shouldnt: [self collectionWith5Elements ] raise: Error. self assert: self collectionWith5Elements size = 5.! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testTAddAll | added collection toBeAdded | collection := self collectionWithElement . toBeAdded := self otherCollection . added := collection addAll: toBeAdded . self assert: added == toBeAdded . "test for identiy because #addAll: has not reason to copy its parameter." self assert: (collection includesAll: toBeAdded )! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self shouldnt: [ self collectionWithCopyNonIdentical ]raise: Error. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy.! ! !Trait method! testTWriteTwice | added oldSize collection elem | collection := self collectionWithElement . elem := self element . oldSize := collection size. added := collection write: elem ; write: elem . self assert: added == elem . "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: elem ). self assert: collection size = (oldSize + 2)! ! !Trait method! testWithWith "self debug: #testWithWith" | aCol collection element1 element2 | collection := self collectionMoreThan5Elements asOrderedCollection copyFrom: 1 to: 2 . element1 := collection at: 1. element2 := collection at:2. aCol := self collectionClass with: element1 with: element2 . self assert: (aCol occurrencesOf: element1 ) = ( collection occurrencesOf: element1). self assert: (aCol occurrencesOf: element2 ) = ( collection occurrencesOf: element2). ! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! testRemoveElementReallyRemovesElement "self debug: #testRemoveElementReallyRemovesElement" | size | size := self nonEmptyWithoutEqualElements size. self nonEmptyWithoutEqualElements remove: self nonEmptyWithoutEqualElements anyOne. self assert: size - 1 = self nonEmptyWithoutEqualElements size! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! testRemoveFirst | collection element result oldSize | collection := self collectionWith5Elements . element := collection first. oldSize := collection size. result := collection removeFirst. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testRemoveAtNotPresent | | self should: [self empty removeAt: 2] raise: Error.! ! !Trait method! testTAddWithOccurences | added oldSize collection anElement | collection := self collectionWithElement . anElement := self element . oldSize := collection size. added := collection add: anElement withOccurrences: 5. self assert: added == anElement. "test for identiy because #add: has not reason to copy its parameter." self assert: (collection includes: anElement). self assert: collection size = (oldSize + 5)! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testRemoveAllSuchThat "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := self nonEmptyWithoutEqualElements copyWithout: el. self nonEmptyWithoutEqualElements removeAllSuchThat: [ :each | aSubCollection includes: each ]. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testAsIdentitySetWithoutIdentityEqualsElements | result collection | collection := self collectionWithCopy. result := collection asIdentitySet. " no elements should have been removed as no elements are equels with Identity equality" self assert: result size = collection size. collection do: [ :each | (collection occurrencesOf: each) = (result asOrderedCollection occurrencesOf: each) ]. self assert: result class = IdentitySet! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! test0FixtureTRemoveTest | duplicate | self shouldnt: [ self empty ]raise: Error. self shouldnt: [ self nonEmptyWithoutEqualElements] raise:Error. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [:each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1] ifNone: [duplicate := false]. self assert: duplicate = false. self shouldnt: [ self elementNotIn ] raise: Error. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! testRemoveFirstNElements | collection elements result oldSize | collection := self collectionWith5Elements . elements := {collection first. collection at:2}. oldSize := collection size. result := collection removeFirst: 2. self assert: result = elements . self assert: collection size = (oldSize - 2).! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testRemoveFirstNotPresent self should: [self empty removeFirst] raise: Error.! ! !Trait method! testRemoveLastNElements | collection result oldSize elements | collection := self collectionWith5Elements . elements := { (collection at: (4)). collection last. }. oldSize := collection size. result := (collection removeLast: 2). self assert: result = elements. self assert: collection size = (oldSize - 2).! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIdentityIndexOfIAbsentDuplicate "self debug: #testIdentityIndexOfIfAbsent" | collection element elementCopy | collection := self collectionWithNonIdentitySameAtEndAndBegining . element := collection last. elementCopy := element copy. self deny: element == elementCopy . self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = collection size. self assert: (collection identityIndexOf: elementCopy ifAbsent: [ 55 ]) = 55! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testCopyReplaceAllWithForSorted | collection result | collection := self collectionOfSize5 . " testing that elements to be replaced are removed from the copy :" result := collection copyReplaceAll: collection with: self empty . self assert: result isEmpty. " testing that replacement elements are all put into the copy :" result := collection copyReplaceAll: collection with: self replacementCollection . self replacementCollection do: [:each | self assert: (result occurrencesOf: each) = ( self replacementCollection occurrencesOf: each )]. self assert: result size = self replacementCollection size. ! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testDifferenceWithNonNullIntersection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithNonNullIntersection" " #(1 2 3) difference: #(2 4) -> #(1 3)" | res overlapping | overlapping := self collectionClass with: self anotherElementOrAssociationNotIn with: self anotherElementOrAssociationIn. res := self collection difference: overlapping. self deny: (res includes: self anotherElementOrAssociationIn). overlapping do: [ :each | self deny: (res includes: each) ]! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self shouldnt: [ self elementsCopyNonIdenticalWithoutEqualElements ]raise: Error. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement . res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false ! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testRemoveLastNotPresent self should: [self empty removeLast] raise: Error.! ! !Trait method! testAsByteArray | res | self shouldnt: [self integerCollectionWithoutEqualElements ] raise: Error. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger] . res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testRemoveAt | collection element result oldSize | collection := self collectionWith5Elements . element := collection at: 3. oldSize := collection size. result := collection removeAt: 3. self assert: result = element . self assert: collection size = (oldSize - 1).! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testRemoveFirstNElementsNotPresent self should: [self empty removeFirst: 2] raise: Error.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! test0FixtureCopyWithReplacementForSorted self shouldnt: [self collectionOfSize5 ] raise: Error. self assert: self collectionOfSize5 size = 5. self shouldnt: [self replacementCollection ] raise: Error. self deny: self replacementCollection isEmpty. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty.! ! ----End fileIn----! SymbolTest removeSelector: #testAllButLast! SymbolTest removeSelector: #testsEndsWith! SymbolTest removeSelector: #testCopyReplaceAllWith1Occurence! SymbolTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! SymbolTest removeSelector: #testLastIndexOf! SymbolTest removeSelector: #test0FixtureCopyWithReplacementTest! SymbolTest removeSelector: #testFirstNElements! SymbolTest removeSelector: #test0TStructuralEqualityTest! SymbolTest removeSelector: #testCopyWithoutFirst! SymbolTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SymbolTest removeSelector: #testBefore! SymbolTest removeSelector: #testLastIndexOfDuplicate! SymbolTest removeSelector: #testIncludesAnyNoneThere! SymbolTest removeSelector: #testAsSortedArray! SymbolTest removeSelector: #testAsArray! SymbolTest removeSelector: #testUnionOfEmpties! SymbolTest removeSelector: #testFindFirst! SymbolTest removeSelector: #testCopyUpToWithDuplicate! SymbolTest removeSelector: #testWithIndexCollect! SymbolTest removeSelector: #testPrintElementsOn! SymbolTest removeSelector: #testsEndsWithEmpty! SymbolTest removeSelector: #testConcatenationWithEmpty! SymbolTest removeSelector: #testCopyWithSequenceable! SymbolTest removeSelector: #testCopyUpToLastWithDuplicate! SymbolTest removeSelector: #test0FixtureIterateSequencedReadableTest! SymbolTest removeSelector: #testAsStringOnDelimiterLastEmpty! SymbolTest removeSelector: #testAtOutOfBounds! SymbolTest removeSelector: #testOccurrencesOfEmpty! SymbolTest removeSelector: #testCopyEmpty! SymbolTest removeSelector: #testWithCollect! SymbolTest removeSelector: #testAsStringOnDelimiterLastOne! SymbolTest removeSelector: #test0FixtureSetAritmeticTest! SymbolTest removeSelector: #testPrintOnDelimiter! SymbolTest removeSelector: #test0FixtureTConvertTest! SymbolTest removeSelector: #testCopyReturnsIdentity! SymbolTest removeSelector: #testAsStringOnDelimiterMore! SymbolTest removeSelector: #testDetectSequenced! SymbolTest removeSelector: #testIdentityIncludesNonSpecificComportement! SymbolTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SymbolTest removeSelector: #testIncludesAnyAllThere! SymbolTest removeSelector: #testPairsDo! SymbolTest removeSelector: #testLastNElements! SymbolTest removeSelector: #testCollectFromTo! SymbolTest removeSelector: #testPrintNameOn! SymbolTest removeSelector: #testCopyReplaceAllWithManyOccurence! SymbolTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SymbolTest removeSelector: #testIndexOfStartingAtDuplicate! SymbolTest removeSelector: #testCopyReplaceFromToWithInsertion! SymbolTest removeSelector: #testAsCommaStringMore! SymbolTest removeSelector: #testCopyNonEmptyWith! SymbolTest removeSelector: #testCopyAfterLastEmpty! SymbolTest removeSelector: #testIdentityIndexOfIAbsent! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAt! SymbolTest removeSelector: #testCopyAfterWithDuplicate! SymbolTest removeSelector: #testAsSortedCollectionWithSortBlock! SymbolTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! SymbolTest removeSelector: #testIdentityIndexOf! SymbolTest removeSelector: #test0FixtureOccurrencesTest! SymbolTest removeSelector: #test0FixtureIndexAccessTest! SymbolTest removeSelector: #testWithDo! SymbolTest removeSelector: #testAllButFirstDo! SymbolTest removeSelector: #testWithDoError! SymbolTest removeSelector: #testAtWrap! SymbolTest removeSelector: #testCopyNonEmptyWithout! SymbolTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! SymbolTest removeSelector: #testConcatenation! SymbolTest removeSelector: #testIntersectionItself! SymbolTest removeSelector: #testKeysAndValuesDo! SymbolTest removeSelector: #testAsOrderedCollection! SymbolTest removeSelector: #testOccurrencesOf! SymbolTest removeSelector: #test0CopyTest! SymbolTest removeSelector: #testStreamContentsProtocol! SymbolTest removeSelector: #testsBeginsWithEmpty! SymbolTest removeSelector: #test0FixtureSequencedConcatenationTest! SymbolTest removeSelector: #testsBeginsWith! SymbolTest removeSelector: #testAsSortedCollection! SymbolTest removeSelector: #testCopyEmptyWithout! SymbolTest removeSelector: #testHasEqualElements! SymbolTest removeSelector: #test0TSequencedStructuralEqualityTest! SymbolTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! SymbolTest removeSelector: #testUnion! SymbolTest removeSelector: #testCopyReplaceFromToWith! SymbolTest removeSelector: #testDo! SymbolTest removeSelector: #testEqualSign! SymbolTest removeSelector: #testCopySameClass! SymbolTest removeSelector: #testAfter! SymbolTest removeSelector: #testAllButFirstNElements! SymbolTest removeSelector: #testCopyAfter! SymbolTest removeSelector: #test0FixturePrintTest! SymbolTest removeSelector: #testReverseWithDo! SymbolTest removeSelector: #testCopyFromTo! SymbolTest removeSelector: #testIncludesAllNoneThere! SymbolTest removeSelector: #testKeysAndValuesDoEmpty! SymbolTest removeSelector: #testIndexOfStartingAt! SymbolTest removeSelector: #testAsSetWithEqualsElements! SymbolTest removeSelector: #testPrintOnDelimiterLast! SymbolTest removeSelector: #testAsBag! SymbolTest removeSelector: #howMany:in:! SymbolTest removeSelector: #test0FixtureConverAsSortedTest! SymbolTest removeSelector: #testCopyAfterLastWithDuplicate! SymbolTest removeSelector: #testCopyEmptyWith! SymbolTest removeSelector: #testStoreOn! SymbolTest removeSelector: #testIndexOfStartingAtIfAbsent! SymbolTest removeSelector: #numberOfSimilarElementsInIntersection! SymbolTest removeSelector: #testOccurrencesOfForMultipliness! SymbolTest removeSelector: #testAtAll! SymbolTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SymbolTest removeSelector: #testShallowCopy! SymbolTest removeSelector: #testIndexOfIfAbsent! SymbolTest removeSelector: #testStreamContentsSized! SymbolTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! SymbolTest removeSelector: #testAsIdentitySet! SymbolTest removeSelector: #testAsSet! SymbolTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! SymbolTest removeSelector: #testIncludesElementIsThere! SymbolTest removeSelector: #testDifferenceWithSeparateCollection! SymbolTest removeSelector: #testCopyUpToLast! SymbolTest removeSelector: #testAtLastError! SymbolTest removeSelector: #testCopyUpToLastEmpty! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! SymbolTest removeSelector: #test0FixtureCloneTest! SymbolTest removeSelector: #testPrintOn! SymbolTest removeSelector: #testCopyUpTo! SymbolTest removeSelector: #testReversed! SymbolTest removeSelector: #testLast! SymbolTest removeSelector: #testAsStringOnDelimiterLastMore! SymbolTest removeSelector: #test0FixtureIncludeTest! SymbolTest removeSelector: #test0FixtureIndexAccessFotMultipliness! SymbolTest removeSelector: #testIncludesElementIsNotThere! SymbolTest removeSelector: #testCopyWithoutIndex! SymbolTest removeSelector: #testLastIndexOfStartingAtDuplicate! SymbolTest removeSelector: #testCopyAfterEmpty! SymbolTest removeSelector: #testReverseDo! SymbolTest removeSelector: #integerCollectionWithoutEqualElements! SymbolTest removeSelector: #testCopyEquals! SymbolTest removeSelector: #testIndexOfDuplicate! SymbolTest removeSelector: #testCopyEmptyWithoutAll! SymbolTest removeSelector: #testAtPin! SymbolTest removeSelector: #testCopyNonEmptyWithoutAll! SymbolTest removeSelector: #testAtLastIfAbsent! SymbolTest removeSelector: #testCopyAfterLast! SymbolTest removeSelector: #testAllButLastNElements! SymbolTest removeSelector: #testFindFirstNotIn! SymbolTest removeSelector: #testAfterIfAbsent! SymbolTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SymbolTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! SymbolTest removeSelector: #testForceToPaddingWith! SymbolTest removeSelector: #testAsCommaStringEmpty! SymbolTest removeSelector: #testFindLast! SymbolTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! SymbolTest removeSelector: #testCopyNonEmpty! SymbolTest removeSelector: #testReverseDoEmpty! SymbolTest removeSelector: #testFirstSecondThird! SymbolTest removeSelector: #testForceToPaddingStartWith! SymbolTest removeSelector: #testCopyWithFirst! SymbolTest removeSelector: #testAtLast! SymbolTest removeSelector: #testAsStringOnDelimiterEmpty! SymbolTest removeSelector: #testIntersectionEmpty! SymbolTest removeSelector: #testAtRandom! SymbolTest removeSelector: #assertSameContents:whenConvertedTo:! SymbolTest removeSelector: #testEqualSignForSequenceableCollections! SymbolTest removeSelector: #testStreamContents! SymbolTest removeSelector: #testOccurrencesOfNotIn! SymbolTest removeSelector: #test0FixtureBeginsEndsWithTest! SymbolTest removeSelector: #testAtIfAbsent! SymbolTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SymbolTest removeSelector: #testIndexOf! SymbolTest removeSelector: #test0FixtureSubcollectionAccessTest! SymbolTest removeSelector: #testLastIndexOfIfAbsentDuplicate! SymbolTest removeSelector: #test0FixtureSequencedElementAccessTest! SymbolTest removeSelector: #testIntersectionBasic! SymbolTest removeSelector: #testDifference! SymbolTest removeSelector: #testAllButFirst! SymbolTest removeSelector: #testAsIdentitySetWithEqualsElements! SymbolTest removeSelector: #testAllButLastDo! SymbolTest removeSelector: #test0FixtureCopyPartOfForMultipliness! SymbolTest removeSelector: #testPairsCollect! SymbolTest removeSelector: #testShallowCopyEmpty! SymbolTest removeSelector: #testWithIndexDo! SymbolTest removeSelector: #testReverse! SymbolTest removeSelector: #testBeforeIfAbsent! SymbolTest removeSelector: #testCopyUpToEmpty! SymbolTest removeSelector: #containsAll:of:andOf:! SymbolTest removeSelector: #testFindLastNotIn! SymbolTest removeSelector: #testAsCommaStringOne! SymbolTest removeSelector: #testFromToDo! SymbolTest removeSelector: #test0FixtureCopySameContentsTest! SymbolTest removeSelector: #testMiddle! SymbolTest removeSelector: #testAt! SymbolTest removeSelector: #testIndexOfIfAbsentDuplicate! SymbolTest removeSelector: #testAsStringOnDelimiterOne! SymbolTest removeSelector: #testLastIndexOfIfAbsent! SymbolTest removeSelector: #testWithCollectError! SymbolTest removeSelector: #testLastIndexOfStartingAt! SymbolTest removeSelector: #firstIndexesOf:in:! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testDo! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! testCopyReturnsIdentity "self debug: #testCopyReturnsIdentity" | copy | copy := self nonEmpty copy. self assert: self nonEmpty == copy. ! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! !CollectionRootTest methodsFor: 'requirements' stamp: 'SebastianTleye 7/22/2013 14:37' prior: 19559798! sizeCollection "Answers a collection not empty" ^ self subclassResponsability! ! !CollectionRootTest methodsFor: 'requirements' stamp: 'SebastianTleye 7/22/2013 14:37' prior: 47754700! sizeCollection "Answers a collection not empty" ^ self subclassResponsability! ! !Trait method! testAddEmptyGrows "self debug: #testAddEmptyGrows" | oldSize | oldSize := self empty size. self empty add: self element. self assert: (self empty size) = (oldSize + 1).! ! SetTest removeSelector: #testAddEmptyGrows! !Trait method! testAddNewElementIncrementsSize | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement add: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! SetTest removeSelector: #testAddNewElementIncrementsSize! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! SetTest removeSelector: #testAsSortedArray! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! SetTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! SetTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! SetTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! SetTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! SetTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! SetTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! SetTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! SetTest removeSelector: #testRemoveAllFoundIn! !Trait method! testTAddIfNotPresentWithNewElement | added oldSize | oldSize := self collectionWithoutElement size. self deny: (self collectionWithoutElement includes: self element). added := self collectionWithoutElement addIfNotPresent: self element. self assert: added = self element. self assert: (self collectionWithoutElement includes: self element). self assert: self collectionWithoutElement size = (oldSize + 1)! ! SetTest removeSelector: #testTAddIfNotPresentWithNewElement! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! SortedCollectionTest removeSelector: #collectionWithCopy! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! SortedCollectionTest removeSelector: #collectionWithIdentical! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! SortedCollectionTest removeSelector: #testAsSortedArray! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! SortedCollectionTest removeSelector: #testRemoveAllError! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! SortedCollectionTest removeSelector: #testRemoveAllFoundIn! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! FloatArrayTest removeSelector: #testAsSortedArray! !Trait method! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! FloatArrayTest removeSelector: #testSwapWith! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! SymbolTest removeSelector: #assertNoDuplicates:whenConvertedTo:! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! SymbolTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! SymbolTest removeSelector: #assertSameContents:whenConvertedTo:! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! SymbolTest removeSelector: #containsAll:of:andOf:! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! SymbolTest removeSelector: #firstIndexesOf:in:! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! SymbolTest removeSelector: #howMany:in:! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! SymbolTest removeSelector: #numberOfSimilarElementsInIntersection! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! SymbolTest removeSelector: #test0CopyTest! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! SymbolTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! SymbolTest removeSelector: #test0FixtureBeginsEndsWithTest! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! SymbolTest removeSelector: #test0FixtureCloneTest! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! SymbolTest removeSelector: #test0FixtureConverAsSortedTest! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! SymbolTest removeSelector: #test0FixtureCopyPartOfForMultipliness! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! SymbolTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! SymbolTest removeSelector: #test0FixtureCopySameContentsTest! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! SymbolTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! SymbolTest removeSelector: #test0FixtureCopyWithReplacementTest! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! SymbolTest removeSelector: #test0FixtureIncludeTest! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! SymbolTest removeSelector: #test0FixtureIndexAccessFotMultipliness! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! SymbolTest removeSelector: #test0FixtureIndexAccessTest! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! SymbolTest removeSelector: #test0FixtureIterateSequencedReadableTest! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! SymbolTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! SymbolTest removeSelector: #test0FixtureOccurrencesTest! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! SymbolTest removeSelector: #test0FixturePrintTest! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! SymbolTest removeSelector: #test0FixtureSequencedConcatenationTest! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! SymbolTest removeSelector: #test0FixtureSequencedElementAccessTest! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! SymbolTest removeSelector: #test0FixtureSetAritmeticTest! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! SymbolTest removeSelector: #test0FixtureSubcollectionAccessTest! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! SymbolTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! SymbolTest removeSelector: #test0FixtureTConvertTest! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! SymbolTest removeSelector: #test0TSequencedStructuralEqualityTest! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! SymbolTest removeSelector: #test0TStructuralEqualityTest! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! SymbolTest removeSelector: #testAfter! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! SymbolTest removeSelector: #testAfterIfAbsent! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! SymbolTest removeSelector: #testAllButFirst! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SymbolTest removeSelector: #testAllButFirstDo! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! SymbolTest removeSelector: #testAllButFirstNElements! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! SymbolTest removeSelector: #testAllButLast! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SymbolTest removeSelector: #testAllButLastDo! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! SymbolTest removeSelector: #testAllButLastNElements! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! SymbolTest removeSelector: #testAsArray! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! SymbolTest removeSelector: #testAsBag! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! SymbolTest removeSelector: #testAsCommaStringEmpty! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! SymbolTest removeSelector: #testAsCommaStringMore! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! SymbolTest removeSelector: #testAsCommaStringOne! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! SymbolTest removeSelector: #testAsIdentitySet! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! SymbolTest removeSelector: #testAsIdentitySetWithEqualsElements! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! SymbolTest removeSelector: #testAsOrderedCollection! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! SymbolTest removeSelector: #testAsSet! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! SymbolTest removeSelector: #testAsSetWithEqualsElements! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! SymbolTest removeSelector: #testAsSortedArray! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! SymbolTest removeSelector: #testAsSortedCollection! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! SymbolTest removeSelector: #testAsSortedCollectionWithSortBlock! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! SymbolTest removeSelector: #testAsStringOnDelimiterEmpty! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! SymbolTest removeSelector: #testAsStringOnDelimiterLastEmpty! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! SymbolTest removeSelector: #testAsStringOnDelimiterLastMore! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! SymbolTest removeSelector: #testAsStringOnDelimiterLastOne! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! SymbolTest removeSelector: #testAsStringOnDelimiterMore! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! SymbolTest removeSelector: #testAsStringOnDelimiterOne! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! SymbolTest removeSelector: #testAt! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! SymbolTest removeSelector: #testAtAll! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! SymbolTest removeSelector: #testAtIfAbsent! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! SymbolTest removeSelector: #testAtLast! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! SymbolTest removeSelector: #testAtLastError! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! SymbolTest removeSelector: #testAtLastIfAbsent! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! SymbolTest removeSelector: #testAtOutOfBounds! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! SymbolTest removeSelector: #testAtPin! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! SymbolTest removeSelector: #testAtRandom! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! SymbolTest removeSelector: #testAtWrap! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! SymbolTest removeSelector: #testBefore! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! SymbolTest removeSelector: #testBeforeIfAbsent! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! SymbolTest removeSelector: #testCollectFromTo! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! SymbolTest removeSelector: #testConcatenation! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! SymbolTest removeSelector: #testConcatenationWithEmpty! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! SymbolTest removeSelector: #testCopyAfter! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! SymbolTest removeSelector: #testCopyAfterEmpty! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! SymbolTest removeSelector: #testCopyAfterLast! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! SymbolTest removeSelector: #testCopyAfterLastEmpty! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! SymbolTest removeSelector: #testCopyAfterLastWithDuplicate! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! SymbolTest removeSelector: #testCopyAfterWithDuplicate! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! SymbolTest removeSelector: #testCopyEmpty! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! SymbolTest removeSelector: #testCopyEmptyWith! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! SymbolTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! SymbolTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! SymbolTest removeSelector: #testCopyEquals! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! SymbolTest removeSelector: #testCopyFromTo! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! SymbolTest removeSelector: #testCopyNonEmpty! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! SymbolTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! SymbolTest removeSelector: #testCopyNonEmptyWithout! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! SymbolTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! SymbolTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! SymbolTest removeSelector: #testCopyReplaceAllWith1Occurence! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! SymbolTest removeSelector: #testCopyReplaceAllWithManyOccurence! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! SymbolTest removeSelector: #testCopyReplaceFromToWith! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! SymbolTest removeSelector: #testCopyReplaceFromToWithInsertion! !Trait method! testCopyReturnsIdentity "self debug: #testCopyReturnsIdentity" | copy | copy := self nonEmpty copy. self assert: self nonEmpty == copy. ! ! SymbolTest removeSelector: #testCopyReturnsIdentity! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! SymbolTest removeSelector: #testCopySameClass! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! SymbolTest removeSelector: #testCopyUpTo! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! SymbolTest removeSelector: #testCopyUpToEmpty! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! SymbolTest removeSelector: #testCopyUpToLast! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! SymbolTest removeSelector: #testCopyUpToLastEmpty! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! SymbolTest removeSelector: #testCopyUpToLastWithDuplicate! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! SymbolTest removeSelector: #testCopyUpToWithDuplicate! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! SymbolTest removeSelector: #testCopyWithFirst! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! SymbolTest removeSelector: #testCopyWithSequenceable! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! SymbolTest removeSelector: #testCopyWithoutFirst! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! SymbolTest removeSelector: #testCopyWithoutIndex! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! SymbolTest removeSelector: #testDetectSequenced! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! SymbolTest removeSelector: #testDifference! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! SymbolTest removeSelector: #testDifferenceWithSeparateCollection! !Trait method! testDo! ! SymbolTest removeSelector: #testDo! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! SymbolTest removeSelector: #testEqualSign! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! SymbolTest removeSelector: #testEqualSignForSequenceableCollections! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! SymbolTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! SymbolTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! SymbolTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! SymbolTest removeSelector: #testFindFirst! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! SymbolTest removeSelector: #testFindFirstNotIn! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! SymbolTest removeSelector: #testFindLast! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! SymbolTest removeSelector: #testFindLastNotIn! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! SymbolTest removeSelector: #testFirstNElements! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! SymbolTest removeSelector: #testFirstSecondThird! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! SymbolTest removeSelector: #testForceToPaddingStartWith! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! SymbolTest removeSelector: #testForceToPaddingWith! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! SymbolTest removeSelector: #testFromToDo! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! SymbolTest removeSelector: #testHasEqualElements! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! SymbolTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! SymbolTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! SymbolTest removeSelector: #testIdentityIncludesNonSpecificComportement! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! SymbolTest removeSelector: #testIdentityIndexOf! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! SymbolTest removeSelector: #testIdentityIndexOfIAbsent! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! SymbolTest removeSelector: #testIncludesAllNoneThere! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! SymbolTest removeSelector: #testIncludesAnyAllThere! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! SymbolTest removeSelector: #testIncludesAnyNoneThere! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! SymbolTest removeSelector: #testIncludesElementIsNotThere! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! SymbolTest removeSelector: #testIncludesElementIsThere! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! SymbolTest removeSelector: #testIndexOf! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! SymbolTest removeSelector: #testIndexOfDuplicate! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! SymbolTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! SymbolTest removeSelector: #testIndexOfIfAbsentDuplicate! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! SymbolTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! SymbolTest removeSelector: #testIndexOfStartingAtDuplicate! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! SymbolTest removeSelector: #testIndexOfStartingAtIfAbsent! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SymbolTest removeSelector: #testIntersectionBasic! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! SymbolTest removeSelector: #testIntersectionEmpty! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! SymbolTest removeSelector: #testIntersectionItself! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! SymbolTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! SymbolTest removeSelector: #testKeysAndValuesDo! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! SymbolTest removeSelector: #testKeysAndValuesDoEmpty! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! SymbolTest removeSelector: #testLast! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! SymbolTest removeSelector: #testLastIndexOf! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! SymbolTest removeSelector: #testLastIndexOfDuplicate! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! SymbolTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! SymbolTest removeSelector: #testLastIndexOfIfAbsentDuplicate! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! SymbolTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! SymbolTest removeSelector: #testLastIndexOfStartingAtDuplicate! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! SymbolTest removeSelector: #testLastNElements! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! SymbolTest removeSelector: #testMiddle! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! SymbolTest removeSelector: #testOccurrencesOf! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! SymbolTest removeSelector: #testOccurrencesOfEmpty! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! SymbolTest removeSelector: #testOccurrencesOfForMultipliness! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! SymbolTest removeSelector: #testOccurrencesOfNotIn! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! SymbolTest removeSelector: #testPairsCollect! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! SymbolTest removeSelector: #testPairsDo! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! SymbolTest removeSelector: #testPrintElementsOn! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! SymbolTest removeSelector: #testPrintNameOn! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! SymbolTest removeSelector: #testPrintOn! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! SymbolTest removeSelector: #testPrintOnDelimiter! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! SymbolTest removeSelector: #testPrintOnDelimiterLast! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SymbolTest removeSelector: #testReverse! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! SymbolTest removeSelector: #testReverseDo! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! SymbolTest removeSelector: #testReverseDoEmpty! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! SymbolTest removeSelector: #testReverseWithDo! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SymbolTest removeSelector: #testReversed! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! SymbolTest removeSelector: #testShallowCopy! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! SymbolTest removeSelector: #testShallowCopyEmpty! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! SymbolTest removeSelector: #testStoreOn! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! SymbolTest removeSelector: #testStreamContents! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! SymbolTest removeSelector: #testStreamContentsProtocol! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! SymbolTest removeSelector: #testStreamContentsSized! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! SymbolTest removeSelector: #testUnion! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! SymbolTest removeSelector: #testUnionOfEmpties! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! SymbolTest removeSelector: #testWithCollect! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! SymbolTest removeSelector: #testWithCollectError! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! SymbolTest removeSelector: #testWithDo! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! SymbolTest removeSelector: #testWithDoError! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! SymbolTest removeSelector: #testWithIndexCollect! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! SymbolTest removeSelector: #testWithIndexDo! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! SymbolTest removeSelector: #testsBeginsWith! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! SymbolTest removeSelector: #testsBeginsWithEmpty! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! SymbolTest removeSelector: #testsEndsWith! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! SymbolTest removeSelector: #testsEndsWithEmpty! SymbolTest removeSelector: #testAllButLast! SymbolTest removeSelector: #testCopyReplaceAllWith1Occurence! SymbolTest removeSelector: #testHasEqualElementsOfIdenticalCollectionObjects! SymbolTest removeSelector: #testsEndsWith! SymbolTest removeSelector: #testLastIndexOf! SymbolTest removeSelector: #test0FixtureCopyWithReplacementTest! SymbolTest removeSelector: #testFirstNElements! SymbolTest removeSelector: #test0TStructuralEqualityTest! SymbolTest removeSelector: #testCopyWithoutFirst! SymbolTest removeSelector: #testIntersectionTwoSimilarElementsInIntersection! SymbolTest removeSelector: #testBefore! SymbolTest removeSelector: #testLastIndexOfDuplicate! SymbolTest removeSelector: #testIncludesAnyNoneThere! SymbolTest removeSelector: #testAsSortedArray! SymbolTest removeSelector: #testAsArray! SymbolTest removeSelector: #testUnionOfEmpties! SymbolTest removeSelector: #testFindFirst! SymbolTest removeSelector: #testCopyUpToWithDuplicate! SymbolTest removeSelector: #testWithIndexCollect! SymbolTest removeSelector: #testPrintElementsOn! SymbolTest removeSelector: #testsEndsWithEmpty! SymbolTest removeSelector: #test0FixtureIterateSequencedReadableTest! SymbolTest removeSelector: #testConcatenationWithEmpty! SymbolTest removeSelector: #testCopyUpToLastWithDuplicate! SymbolTest removeSelector: #testCopyWithSequenceable! SymbolTest removeSelector: #testAsStringOnDelimiterLastEmpty! SymbolTest removeSelector: #testAtOutOfBounds! SymbolTest removeSelector: #testOccurrencesOfEmpty! SymbolTest removeSelector: #testCopyEmpty! SymbolTest removeSelector: #testWithCollect! SymbolTest removeSelector: #testAsStringOnDelimiterLastOne! SymbolTest removeSelector: #test0FixtureSetAritmeticTest! SymbolTest removeSelector: #testPrintOnDelimiter! SymbolTest removeSelector: #test0FixtureTConvertTest! SymbolTest removeSelector: #testCopyReturnsIdentity! SymbolTest removeSelector: #testAsStringOnDelimiterMore! SymbolTest removeSelector: #testDetectSequenced! SymbolTest removeSelector: #testIdentityIncludesNonSpecificComportement! SymbolTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! SymbolTest removeSelector: #testIncludesAnyAllThere! SymbolTest removeSelector: #testPairsDo! SymbolTest removeSelector: #testLastNElements! SymbolTest removeSelector: #testCollectFromTo! SymbolTest removeSelector: #testPrintNameOn! SymbolTest removeSelector: #testCopyReplaceAllWithManyOccurence! SymbolTest removeSelector: #testEqualSignIsTrueForNonIdenticalButEqualCollections! SymbolTest removeSelector: #testIndexOfStartingAtDuplicate! SymbolTest removeSelector: #testCopyReplaceFromToWithInsertion! SymbolTest removeSelector: #testAsCommaStringMore! SymbolTest removeSelector: #testCopyNonEmptyWith! SymbolTest removeSelector: #testCopyAfterLastEmpty! SymbolTest removeSelector: #testIdentityIndexOfIAbsent! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAt! SymbolTest removeSelector: #testAsSortedCollectionWithSortBlock! SymbolTest removeSelector: #testCopyAfterWithDuplicate! SymbolTest removeSelector: #test0FixtureTConvertAsSetForMultiplinessTest! SymbolTest removeSelector: #testIdentityIndexOf! SymbolTest removeSelector: #test0FixtureOccurrencesTest! SymbolTest removeSelector: #test0FixtureIndexAccessTest! SymbolTest removeSelector: #testWithDo! SymbolTest removeSelector: #testAllButFirstDo! SymbolTest removeSelector: #testWithDoError! SymbolTest removeSelector: #testAtWrap! SymbolTest removeSelector: #testConcatenation! SymbolTest removeSelector: #testCopyNonEmptyWithout! SymbolTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! SymbolTest removeSelector: #testAsOrderedCollection! SymbolTest removeSelector: #testIntersectionItself! SymbolTest removeSelector: #testKeysAndValuesDo! SymbolTest removeSelector: #testOccurrencesOf! SymbolTest removeSelector: #test0CopyTest! SymbolTest removeSelector: #testStreamContentsProtocol! SymbolTest removeSelector: #test0FixtureSequencedConcatenationTest! SymbolTest removeSelector: #testHasEqualElements! SymbolTest removeSelector: #testAsSortedCollection! SymbolTest removeSelector: #testCopyEmptyWithout! SymbolTest removeSelector: #testEqualSign! SymbolTest removeSelector: #test0TSequencedStructuralEqualityTest! SymbolTest removeSelector: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections! SymbolTest removeSelector: #testUnion! SymbolTest removeSelector: #testCopyReplaceFromToWith! SymbolTest removeSelector: #testDo! SymbolTest removeSelector: #testsBeginsWith! SymbolTest removeSelector: #testsBeginsWithEmpty! SymbolTest removeSelector: #testCopySameClass! SymbolTest removeSelector: #testAfter! SymbolTest removeSelector: #testAllButFirstNElements! SymbolTest removeSelector: #testCopyAfter! SymbolTest removeSelector: #test0FixturePrintTest! SymbolTest removeSelector: #testReverseWithDo! SymbolTest removeSelector: #testCopyFromTo! SymbolTest removeSelector: #testIncludesAllNoneThere! SymbolTest removeSelector: #testIndexOfStartingAt! SymbolTest removeSelector: #testKeysAndValuesDoEmpty! SymbolTest removeSelector: #testAsSetWithEqualsElements! SymbolTest removeSelector: #testPrintOnDelimiterLast! SymbolTest removeSelector: #testAsBag! SymbolTest removeSelector: #howMany:in:! SymbolTest removeSelector: #test0FixtureConverAsSortedTest! SymbolTest removeSelector: #testCopyAfterLastWithDuplicate! SymbolTest removeSelector: #testCopyEmptyWith! SymbolTest removeSelector: #testStoreOn! SymbolTest removeSelector: #testIndexOfStartingAtIfAbsent! SymbolTest removeSelector: #numberOfSimilarElementsInIntersection! SymbolTest removeSelector: #testOccurrencesOfForMultipliness! SymbolTest removeSelector: #testAtAll! SymbolTest removeSelector: #assertNonDuplicatedContents:whenConvertedTo:! SymbolTest removeSelector: #testShallowCopy! SymbolTest removeSelector: #testIndexOfIfAbsent! SymbolTest removeSelector: #testStreamContentsSized! SymbolTest removeSelector: #test0FixtureCopyPartOfSequenceableTest! SymbolTest removeSelector: #testAsIdentitySet! SymbolTest removeSelector: #testAsSet! SymbolTest removeSelector: #test0FixtureCopyWithOrWithoutSpecificElementsTest! SymbolTest removeSelector: #testIncludesElementIsThere! SymbolTest removeSelector: #testDifferenceWithSeparateCollection! SymbolTest removeSelector: #test0FixtureCloneTest! SymbolTest removeSelector: #testAtLastError! SymbolTest removeSelector: #testCopyUpToLast! SymbolTest removeSelector: #testCopyUpToLastEmpty! SymbolTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! SymbolTest removeSelector: #testPrintOn! SymbolTest removeSelector: #testCopyUpTo! SymbolTest removeSelector: #testLast! SymbolTest removeSelector: #testAsStringOnDelimiterLastMore! SymbolTest removeSelector: #testReversed! SymbolTest removeSelector: #test0FixtureIncludeTest! SymbolTest removeSelector: #test0FixtureIndexAccessFotMultipliness! SymbolTest removeSelector: #testIncludesElementIsNotThere! SymbolTest removeSelector: #testCopyAfterEmpty! SymbolTest removeSelector: #testCopyWithoutIndex! SymbolTest removeSelector: #testLastIndexOfStartingAtDuplicate! SymbolTest removeSelector: #testReverseDo! SymbolTest removeSelector: #testCopyEquals! SymbolTest removeSelector: #testIndexOfDuplicate! SymbolTest removeSelector: #testCopyEmptyWithoutAll! SymbolTest removeSelector: #testAtPin! SymbolTest removeSelector: #testCopyNonEmptyWithoutAll! SymbolTest removeSelector: #testAtLastIfAbsent! SymbolTest removeSelector: #testCopyAfterLast! SymbolTest removeSelector: #testAllButLastNElements! SymbolTest removeSelector: #testFindFirstNotIn! SymbolTest removeSelector: #assertNoDuplicates:whenConvertedTo:! SymbolTest removeSelector: #testAfterIfAbsent! SymbolTest removeSelector: #test0FixtureOccurrencesForMultiplinessTest! SymbolTest removeSelector: #testAsCommaStringEmpty! SymbolTest removeSelector: #testEqualSignIsTrueForEmptyButNonIdenticalCollections! SymbolTest removeSelector: #testFindLast! SymbolTest removeSelector: #testForceToPaddingWith! SymbolTest removeSelector: #testCopyNonEmpty! SymbolTest removeSelector: #testReverseDoEmpty! SymbolTest removeSelector: #testFirstSecondThird! SymbolTest removeSelector: #testForceToPaddingStartWith! SymbolTest removeSelector: #testCopyWithFirst! SymbolTest removeSelector: #testAsStringOnDelimiterEmpty! SymbolTest removeSelector: #testAtLast! SymbolTest removeSelector: #testIntersectionEmpty! SymbolTest removeSelector: #testAtRandom! SymbolTest removeSelector: #assertSameContents:whenConvertedTo:! SymbolTest removeSelector: #testEqualSignForSequenceableCollections! SymbolTest removeSelector: #testStreamContents! SymbolTest removeSelector: #testOccurrencesOfNotIn! SymbolTest removeSelector: #test0FixtureBeginsEndsWithTest! SymbolTest removeSelector: #testAtIfAbsent! SymbolTest removeSelector: #testEqualSignOfIdenticalCollectionObjects! SymbolTest removeSelector: #test0FixtureSubcollectionAccessTest! SymbolTest removeSelector: #testIndexOf! SymbolTest removeSelector: #test0FixtureSequencedElementAccessTest! SymbolTest removeSelector: #testAsIdentitySetWithEqualsElements! SymbolTest removeSelector: #testIntersectionBasic! SymbolTest removeSelector: #testAllButFirst! SymbolTest removeSelector: #testDifference! SymbolTest removeSelector: #testLastIndexOfIfAbsentDuplicate! SymbolTest removeSelector: #testAllButLastDo! SymbolTest removeSelector: #test0FixtureCopyPartOfForMultipliness! SymbolTest removeSelector: #testPairsCollect! SymbolTest removeSelector: #testShallowCopyEmpty! SymbolTest removeSelector: #testReverse! SymbolTest removeSelector: #testWithIndexDo! SymbolTest removeSelector: #testBeforeIfAbsent! SymbolTest removeSelector: #testCopyUpToEmpty! SymbolTest removeSelector: #containsAll:of:andOf:! SymbolTest removeSelector: #testAsCommaStringOne! SymbolTest removeSelector: #testFindLastNotIn! SymbolTest removeSelector: #testFromToDo! SymbolTest removeSelector: #test0FixtureCopySameContentsTest! SymbolTest removeSelector: #testAt! SymbolTest removeSelector: #testIndexOfIfAbsentDuplicate! SymbolTest removeSelector: #testMiddle! SymbolTest removeSelector: #testAsStringOnDelimiterOne! SymbolTest removeSelector: #firstIndexesOf:in:! SymbolTest removeSelector: #testLastIndexOfIfAbsent! SymbolTest removeSelector: #testLastIndexOfStartingAt! SymbolTest removeSelector: #testWithCollectError! !Trait method! testsBeginsWithEmpty self deny: (self nonEmpty beginsWith:(self empty)). self deny: (self empty beginsWith:(self nonEmpty )). ! ! !Trait method! testEqualSignForSequenceableCollections "self debug: #testEqualSign" self deny: (self nonEmpty = self nonEmpty asSet). self deny: (self nonEmpty reversed = self nonEmpty). self deny: (self nonEmpty = self nonEmpty reversed).! ! !Trait method! testIntersectionBasic "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self deny: inter isEmpty. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testPairsCollect | index result | index:=0. result:=self nonEmptyMoreThan1Element pairsCollect: [:each1 :each2 | self assert: ( self nonEmptyMoreThan1Element indexOf: each2 ) = (index := index + 2). (self nonEmptyMoreThan1Element indexOf: each2) = ((self nonEmptyMoreThan1Element indexOf: each1) + 1). ]. result do: [:each | self assert: each = true]. ! ! !Trait method! testOccurrencesOfEmpty | result | result := self empty occurrencesOf: (self collectionWithoutEqualElements anyOne). self assert: result = 0! ! !Trait method! testAtAll "self debug: #testAtAll" " self flag: #theCollectionshouldbe102030intheFixture. self assert: (self accessCollection atAll: #(2 1)) first = self accessCollection second. self assert: (self accessCollection atAll: #(2)) first = self accessCollection second." | result | result := self moreThan4Elements atAll: #(2 1 2 ). self assert: (result at: 1) = (self moreThan4Elements at: 2). self assert: (result at: 2) = (self moreThan4Elements at: 1). self assert: (result at: 3) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements atAll: #()) = self moreThan4Elements species new! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAllButLastDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButLastDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i ))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! test0FixtureBeginsEndsWithTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size>1. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty.! ! !Trait method! testAsStringOnDelimiterLastMore | delim multiItemStream result last allElementsAsString | delim := ', '. last := 'and'. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', ' last: last. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=(last)asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ]. ! ! !Trait method! testDo! ! !Trait method! containsAll: union of: one andOf: another self assert: (one allSatisfy: [:each | union includes: each]). self assert: (another allSatisfy: [:each | union includes: each])! ! !Trait method! testAllButFirstNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i + 2) ]. self assert: abf size + 2 = col size! ! !Trait method! testWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. firstCollection with: secondCollection do: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b.] ! ! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !Trait method! testAtRandom | result | result := self nonEmpty atRandom . self assert: (self nonEmpty includes: result).! ! !Trait method! test0FixtureConverAsSortedTest self shouldnt: [self collectionWithSortableElements ] raise: Error. self deny: self collectionWithSortableElements isEmpty .! ! !Trait method! testPrintOnDelimiter | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' . allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! testEqualSignIsTrueForEmptyButNonIdenticalCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). ! ! !Trait method! testForceToPaddingStartWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingStartWith: ( element ). "verify content of 'result' : " 1 to: 2 do: [:i | self assert: ( element ) = ( result at:(i) ) ]. 3 to: result size do: [:i | self assert: ( result at:i ) = ( self nonEmpty at:(i-2) ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testIndexOfStartingAtIfAbsent "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyAfterEmpty | result | result := self empty copyAfter: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testWithCollect | result firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := 0. result := firstCollection with: secondCollection collect: [:a :b | ( index := index + 1). self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. b]. 1 to: result size do:[: i | self assert: (result at:i)= (secondCollection at: i)]. self assert: result size = secondCollection size.! ! !Trait method! testCopyReturnsIdentity "self debug: #testCopyReturnsIdentity" | copy | copy := self nonEmpty copy. self assert: self nonEmpty == copy. ! ! !Trait method! test0FixtureSetAritmeticTest self shouldnt: [ self collection ] raise: Error. self deny: self collection isEmpty. self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self anotherElementOrAssociationNotIn ] raise: Error. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self shouldnt: [ self collectionClass ] raise: Error! ! !Trait method! testFirstSecondThird "self debug: #testFirstSecondThird" self assert: self moreThan4Elements first = (self moreThan4Elements at: 1). self assert: self moreThan4Elements second = (self moreThan4Elements at: 2). self assert: self moreThan4Elements third = (self moreThan4Elements at: 3). self assert: self moreThan4Elements fourth = (self moreThan4Elements at: 4)! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testAsArray "self debug: #testAsArray3" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Array! ! !Trait method! testHasEqualElements "self debug: #testHasEqualElements" self deny: (self empty hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty asSet). self deny: (self nonEmpty reversed hasEqualElements: self nonEmpty). self deny: (self nonEmpty hasEqualElements: self nonEmpty reversed).! ! !Trait method! testCopyWithoutFirst | result | result := self nonEmpty copyWithoutFirst. self assert: result size = (self nonEmpty size - 1). 1 to: result size do: [:i | self assert: (result at: i)= (self nonEmpty at: (i + 1))].! ! !Trait method! test0TSequencedStructuralEqualityTest self shouldnt: [self nonEmpty at: 1] raise: Error. "Ensures #nonEmpty is sequenceable"! ! !Trait method! testBeforeIfAbsent "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 1) ifAbsent: [ 99 ]) = 99. self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2) ifAbsent: [ 99 ]) = (self moreThan4Elements at: 1)! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testEqualSignOfIdenticalCollectionObjects "self debug: #testEqualSignOfIdenticalCollectionObjects" self assert: (self empty = self empty). self assert: (self nonEmpty = self nonEmpty). ! ! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !Trait method! test0FixtureIncludeTest | anElementIn | self shouldnt: [ self nonEmpty ]raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self elementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self anotherElementNotIn ]raise: Error. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self collectionWithEqualElements ] raise: Error. self shouldnt: [ self elementTwiceInForOccurrences ] raise: Error. anElement := self elementTwiceInForOccurrences . collection := self collectionWithEqualElements . cpt := 0 . " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ]]. self assert: cpt = 2.! ! !Trait method! testDetectSequenced " testing that detect keep the first element returning true for sequenceable collections " | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element detect: [:each | each notNil ]. self assert: result = element. ! ! !Trait method! testWithIndexDo "| result | result:=Array new: self nonEmptyMoreThan1Element size. self nonEmptyMoreThan1Element withIndexDo: [:each :i | result at:i put:(each+i)]. 1 to: result size do:[: i | self assert: (result at:i)= ((self nonEmptyMoreThan1Element at: i) + i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element withIndexDo: [:value :i | indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testsEndsWith self assert: (self nonEmpty endsWith: self nonEmpty copyWithoutFirst). self assert: (self nonEmpty endsWith: self nonEmpty). self deny: (self nonEmpty endsWith: (self nonEmpty copyWith: self nonEmpty first)).! ! !Trait method! testIncludesElementIsThere "self debug: #testIncludesElementIsThere" self assert: (self nonEmpty includes: self nonEmpty anyOne).! ! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !Trait method! testCopyUpToWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpTo:' should copy until the first occurence :" result := collection copyUpTo: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! testEqualSignIsTrueForNonIdenticalButEqualCollections "self debug: #testEqualSignIsTrueForNonIdenticalButEqualCollections" self assert: (self empty = self empty copy). self assert: (self empty copy = self empty). self assert: (self empty copy = self empty copy). self assert: (self nonEmpty = self nonEmpty copy). self assert: (self nonEmpty copy = self nonEmpty). self assert: (self nonEmpty copy = self nonEmpty copy).! ! !Trait method! testAtWrap "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index + self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: index - self moreThan4Elements size) = self elementInForElementAccessing. self assert: (self moreThan4Elements atWrap: 1 + self moreThan4Elements size) = (self moreThan4Elements at: 1)! ! !Trait method! testAtIfAbsent "self debug: #testAt" | absent | absent := false. self moreThan4Elements at: self moreThan4Elements size + 1 ifAbsent: [ absent := true ]. self assert: absent = true. absent := false. self moreThan4Elements at: self moreThan4Elements size ifAbsent: [ absent := true ]. self assert: absent = false! ! !Trait method! test0FixturePrintTest self shouldnt: [self nonEmpty ] raise: Error.! ! !Trait method! testIndexOfDuplicate "self debug: #testIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf: should return the position of the first occurrence :'" self assert: (collection indexOf: element) = 1! ! !Trait method! assertNonDuplicatedContents: aCollection whenConvertedTo: aClass | result | result := aCollection perform: ('as' , aClass name) asSymbol. self assert: (result class includesBehavior: aClass). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. ^ result! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self shouldnt: [ self collectionWithoutEqualElements ]raise: Error. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. ! ! !Trait method! testFirstNElements "self debug: #testFirstNElements" | result | result := self moreThan3Elements first: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements first: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testPrintNameOn | aStream result | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printNameOn: aStream . Transcript show: result asString. self nonEmpty class name first isVowel ifTrue:[ self assert: aStream contents =('an ',self nonEmpty class name ) ] ifFalse:[self assert: aStream contents =('a ',self nonEmpty class name)].! ! !Trait method! test0CopyTest self shouldnt: [ self empty ]raise: Error. self assert: self empty size = 0. self shouldnt: [ self nonEmpty ]raise: Error. self assert: (self nonEmpty size = 0) not. self shouldnt: [ self collectionWithElementsToRemove ]raise: Error. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [:each | self assert: ( self nonEmpty includes: each)]. self shouldnt: [ self elementToAdd ]raise: Error. self deny: (self nonEmpty includes: self elementToAdd ). self shouldnt: [ self collectionNotIncluded ]raise: Error. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureSubcollectionAccessTest self shouldnt: [ self moreThan3Elements ] raise: Error. self assert: self moreThan3Elements size > 2! ! !Trait method! testForceToPaddingWith | result element | element := self nonEmpty at: self indexInNonEmpty . result := self nonEmpty forceTo: (self nonEmpty size+2) paddingWith: ( element ). "verify content of 'result' : " 1 to: self nonEmpty size do: [:i | self assert: ( self nonEmpty at: i ) = ( result at:(i) ). ]. (result size - 1) to: result size do: [:i | self assert: ( result at:i ) = ( element ) ]. "verify size of 'result' :" self assert: result size = (self nonEmpty size + 2).! ! !Trait method! testWithDoError self should: [self nonEmptyMoreThan1Element with: self empty do:[:a :b | ]] raise: Error.! ! !Trait method! testIdentityIncludesNonSpecificComportement " test the same comportement than 'includes: ' " | collection | collection := self nonEmpty . self deny: (collection identityIncludes: self elementNotIn ). self assert:(collection identityIncludes: collection anyOne) ! ! !Trait method! testAsIdentitySet "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: IdentitySet. ! ! !Trait method! testAsStringOnDelimiterMore | delim multiItemStream result index | "delim := ', '. multiItemStream := '' readWrite. self oneTwoThreeItemCol asStringOn: multiItemStream delimiter: ', '. self assert: multiItemStream contents = '1, 2, 3'." delim := ', '. result:=''. multiItemStream := ReadWriteStream on:result. self nonEmpty asStringOn: multiItemStream delimiter: ', '. index:=1. (result findBetweenSubStrs: ', ' )do: [:each | self assert: each= ((self nonEmpty at:index)asString). index:=index+1 ].! ! !Trait method! testAsSetWithEqualsElements | result | result := self withEqualElements asSet. self withEqualElements do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = Set! ! !Trait method! testAtLast "self debug: #testAtLast" | index | self assert: (self moreThan4Elements atLast: 1) = self moreThan4Elements last. "tmp:=1. self do: [:each | each =self elementInForIndexAccessing ifTrue:[index:=tmp]. tmp:=tmp+1]." index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements atLast: index) = (self moreThan4Elements at: self moreThan4Elements size - index + 1)! ! !Trait method! testCollectFromTo | result | result:=self nonEmptyMoreThan1Element collect: [ :each | each ] from: 1 to: (self nonEmptyMoreThan1Element size - 1). 1 to: result size do: [ :i | self assert: (self nonEmptyMoreThan1Element at: i) = (result at: i) ]. self assert: result size = (self nonEmptyMoreThan1Element size - 1)! ! !Trait method! assertSameContents: aCollection whenConvertedTo: aClass | result | result := self assertNonDuplicatedContents: aCollection whenConvertedTo: aClass. self assert: result size = aCollection size! ! !Trait method! testLastIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf:ifAbsent:startingAt: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 55 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 55 ]) = 1! ! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! !Trait method! testOccurrencesOfNotIn | result | result := self collectionWithoutEqualElements occurrencesOf: self elementNotInForOccurrences. self assert: result = 0! ! !Trait method! testHasEqualElementsOfIdenticalCollectionObjects "self debug: #testHasEqualElementsOfIdenticalCollectionObjects" self assert: (self empty hasEqualElements: self empty). self assert: (self nonEmpty hasEqualElements: self nonEmpty). ! ! !Trait method! testStreamContentsSized | result | result:= self collectionClass new: 1 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection. result:= self collectionClass new: 1000 streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testAt "self debug: #testAt" " self assert: (self accessCollection at: 1) = 1. self assert: (self accessCollection at: 2) = 2. " | index | index := self moreThan4Elements indexOf: self elementInForElementAccessing. self assert: (self moreThan4Elements at: index) = self elementInForElementAccessing! ! !Trait method! testCopyAfterLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the last occurence of element :" result := collection copyAfterLast: (element ). "verifying content: " self assert: result isEmpty. ! ! !Trait method! test0FixtureCloneTest self shouldnt: [ self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [ self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testDifference "Answer the set theoretic difference of two collections." "self debug: #testDifference" | difference | self assert: (self collectionWithoutEqualElements difference: self collectionWithoutEqualElements) isEmpty. self assert: (self empty difference: self collectionWithoutEqualElements) isEmpty. difference := (self collectionWithoutEqualElements difference: self empty). self assert: difference size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each | self assert: (difference includes: each)]. ! ! !Trait method! testFromToDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element from: 1 to: (self nonEmptyMoreThan1Element size -1) do: [:each | result add: each]. 1 to: (self nonEmptyMoreThan1Element size -1) do: [:i| self assert: (self nonEmptyMoreThan1Element at:i )=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testCopyReplaceFromToWithInsertion | result indexOfSubcollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: ( indexOfSubcollection - 1 ) with: self replacementCollection . "verify content of 'result' : " "first part of 'result'' : '" 1 to: (indexOfSubcollection -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " indexOfSubcollection to: (indexOfSubcollection + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - indexOfSubcollection +1 )) ]. " end part :" (indexOfSubcollection + self replacementCollection size) to: (result size) do: [:i| self assert: (result at: i)=(self collectionWith1TimeSubcollection at: (i-self replacementCollection size))]. " verify size: " self assert: result size=(self collectionWith1TimeSubcollection size + self replacementCollection size). ! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self shouldnt: [ self collectionMoreThan1NoDuplicates ] raise: Error. self assert: self collectionMoreThan1NoDuplicates size >1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self shouldnt: [ self elementInForIndexAccessing ] raise: Error. self assert: ( (collection := self collectionMoreThan1NoDuplicates )includes: (element:= self elementInForIndexAccessing)). self shouldnt: [ self elementNotInForIndexAccessing ] raise: Error. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! testStreamContentsProtocol | result index | result:= self collectionClass << [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! test0FixtureOccurrencesTest | tmp | self shouldnt: [self empty ]raise: Error. self assert: self empty isEmpty. self shouldnt: [ self collectionWithoutEqualElements ] raise: Error. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each. ]. self shouldnt: [ self elementNotInForOccurrences ] raise: Error. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! testLastIndexOfDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element) = collection size! ! !Trait method! testMiddle "self debug: #testMiddle" self assert: self moreThan4Elements middle = (self moreThan4Elements at: self moreThan4Elements size // 2 + 1)! ! !Trait method! testAtLastError "self debug: #testAtLast" self should: [ self moreThan4Elements atLast: self moreThan4Elements size + 1 ] raise: Error! ! !Trait method! testCopyWithoutIndex | result index | index := self indexInNonEmpty . result := self nonEmpty copyWithoutIndex: index . "verify content of 'result:'" 1 to: result size do: [:i | i<( index ) ifTrue: [self assert: ((result at:i )= (self nonEmpty at:i))]. i>=( index ) ifTrue: [self assert: (result at:i )= (self nonEmpty at:(i+1))]]. "verify size of result : " self assert: result size=(self nonEmpty size -1).! ! !Trait method! testConcatenation | result index | result:= self firstCollection,self secondCollection . "first part : " index := 1. self firstCollection do: [:each | self assert: (self firstCollection at: index)=each. index := index+1.]. "second part : " 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:index). index:=index+1]. "size : " self assert: result size = (self firstCollection size + self secondCollection size).! ! !Trait method! testPrintElementsOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printElementsOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString). ].! ! !Trait method! test0FixtureCopyPartOfForMultipliness self shouldnt: [self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [:i | (i > 1 ) & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at:i) = (self collectionWithSameAtEndAndBegining first)]. ]! ! !Trait method! testFindFirst | element result | element := self nonEmptyMoreThan1Element at:1. result:=self nonEmptyMoreThan1Element findFirst: [:each | each =element]. self assert: result=1. ! ! !Trait method! testKeysAndValuesDoEmpty | result | result:= OrderedCollection new. self empty keysAndValuesDo: [:i :value| result add: (value+i)]. self assert: result isEmpty .! ! !Trait method! testStreamContents | result index | result:= self collectionClass streamContents: [ :s| s nextPutAll: self firstCollection; nextPutAll: self secondCollection ]. self assert: result equals: self firstCollection, self secondCollection.! ! !Trait method! testUnionOfEmpties "self debug: #testUnionOfEmpties" self assert: (self empty union: self empty) isEmpty. ! ! !Trait method! testConcatenationWithEmpty | result | result:= self empty,self secondCollection . 1 to: self secondCollection size do: [:i | self assert: (self secondCollection at:i)= (result at:i). ]. "size : " self assert: result size = ( self secondCollection size).! ! !Trait method! testPrintOnDelimiterLast | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream delimiter: ', ' last: 'and'. allElementsAsString:=(result findBetweenSubStrs: ', ' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size-1 ) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString)]. i=(allElementsAsString size-1) ifTrue:[ self deny: (allElementsAsString at:i)=('and')asString]. i=(allElementsAsString size) ifTrue: [self assert: (allElementsAsString at:i)=((self nonEmpty at:(i-1))asString)]. ].! ! !Trait method! testsEndsWithEmpty self deny: (self nonEmpty endsWith: self empty). self deny: (self empty endsWith: self nonEmpty). ! ! !Trait method! testShallowCopyEmpty | result | result := self empty shallowCopy . self assert: result isEmpty .! ! !Trait method! testAtLastIfAbsent "self debug: #testAtLastIfAbsent" self assert: (self moreThan4Elements atLast: 1 ifAbsent: [ nil ]) = self moreThan4Elements last. self assert: (self moreThan4Elements atLast: self moreThan4Elements size + 1 ifAbsent: [ 222 ]) = 222! ! !Trait method! testAllButFirstDo | result | result:= OrderedCollection new. self nonEmptyMoreThan1Element allButFirstDo: [:each | result add: each]. 1 to: (result size) do: [:i| self assert: (self nonEmptyMoreThan1Element at:(i +1))=(result at:i)]. self assert: result size=(self nonEmptyMoreThan1Element size-1).! ! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! !Trait method! testOccurrencesOfForMultipliness | collection elem | collection := self collectionWithEqualElements . elem := self elementTwiceInForOccurrences . self assert: (collection occurrencesOf: elem ) = 2. ! ! !Trait method! testCopyUpToLastEmpty | result | result := self empty copyUpToLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testAsCommaStringMore "self assert: self oneTwoThreeItemCol asCommaString = '1, 2, 3'. self assert: self oneTwoThreeItemCol asCommaStringAnd = '1, 2 and 3' " | result resultAnd index allElementsAsString | result:= self nonEmpty asCommaString . resultAnd:= self nonEmpty asCommaStringAnd . index := 1. (result findBetweenSubStrs: ',' )do: [:each | index = 1 ifTrue: [self assert: each= ((self nonEmpty at:index)asString)] ifFalse: [self assert: each= (' ',(self nonEmpty at:index) asString)]. index:=index+1 ]. "verifying esultAnd :" allElementsAsString:=(resultAnd findBetweenSubStrs: ',' ). 1 to: allElementsAsString size do: [:i | i<(allElementsAsString size ) ifTrue: [ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i) asString)] ifFalse:[self assert: (allElementsAsString at:i)=(' ',(self nonEmpty at:i) asString)] ]. i=(allElementsAsString size) ifTrue:[ i = 1 ifTrue:[self assert: (allElementsAsString at:i)=( (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ifFalse:[self assert: (allElementsAsString at:i)=( ' ' , (self nonEmpty at:i ) asString ,' and ', (self nonEmpty at: ( i + 1) ) asString )] ]. ].! ! !Trait method! testStoreOn " for the moment work only for collection that include simple elements such that Integer" "| string str result cuttedResult index elementsAsStringExpected elementsAsStringObtained tmp | string := ''. str := ReadWriteStream on: string. elementsAsStringExpected := OrderedCollection new. elementsAsStringObtained := OrderedCollection new. self nonEmpty do: [ :each | elementsAsStringExpected add: each asString]. self nonEmpty storeOn: str. result := str contents . cuttedResult := ( result findBetweenSubStrs: ';' ). index := 1. cuttedResult do: [ :each | index = 1 ifTrue: [ self assert: (each beginsWith: ( tmp := '((' , self nonEmpty class asString , ' new) add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1. ] ifFalse: [ index < cuttedResult size ifTrue:[self assert: (each beginsWith: ( tmp:= ' add: ' )). tmp := each copyFrom: ( tmp size + 1) to: ( each size ). elementsAsStringObtained add: tmp. index := index + 1.] ifFalse: [self assert: ( each = ' yourself)' ) ]. ] ]. elementsAsStringExpected do: [ :each | self assert: (elementsAsStringExpected occurrencesOf: each ) = ( elementsAsStringObtained occurrencesOf: each) ]" ! ! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! !Trait method! testCopyUpToLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpToLast: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1).! ! !Trait method! testAsOrderedCollection self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: OrderedCollection! ! !Trait method! testIntersectionItself "self debug: #testIntersectionItself" | result | result := (self collectionWithoutEqualElements intersection: self collectionWithoutEqualElements). self assert: result size = self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (result includes: each) ]. ! ! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! !Trait method! testOccurrencesOf | collection | collection := self collectionWithoutEqualElements . collection do: [ :each | self assert: (collection occurrencesOf: each) = 1 ].! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self shouldnt: self nonEmptyMoreThan1Element raise: Error. self assert: self nonEmptyMoreThan1Element size > 1. self shouldnt: self empty raise: Error. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIndexAccessFotMultipliness self shouldnt: [ self collectionWithSameAtEndAndBegining ] raise: Error. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureSequencedConcatenationTest self shouldnt: self empty raise: Exception. self assert: self empty isEmpty. self shouldnt: self firstCollection raise: Exception. self shouldnt: self secondCollection raise: Exception! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self shouldnt: [self collectionWithoutEqualElements ] raise: Error. self collectionWithoutEqualElements do: [:each | self assert: (self collectionWithoutEqualElements occurrencesOf: each)=1]. self shouldnt: [self indexInForCollectionWithoutDuplicates ] raise: Error. self assert: self indexInForCollectionWithoutDuplicates >0 & self indexInForCollectionWithoutDuplicates < self collectionWithoutEqualElements size. self shouldnt: [self empty] raise: Error. self assert: self empty isEmpty .! ! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !Trait method! testIntersectionTwoSimilarElementsInIntersection "self debug: #testIntersectionBasic" | inter | inter := self collection intersection: (self collectionClass with: self anotherElementOrAssociationIn). self assert: (self collection occurrencesOf: self anotherElementOrAssociationIn) = self numberOfSimilarElementsInIntersection. self assert: (inter includes: self anotherElementOrAssociationIn value)! ! !Trait method! testUnion "self debug: #testUnionOfEmpties" | union | union := self empty union: self nonEmpty. self containsAll: union of: self empty andOf: self nonEmpty. union := self nonEmpty union: self empty. self containsAll: union of: self empty andOf: self nonEmpty. union := self collection union: self nonEmpty. self containsAll: union of: self collection andOf: self nonEmpty.! ! !Trait method! testReverse | result | result := self nonEmpty reversed. "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at: i) = (self nonEmpty at: (self nonEmpty size - i + 1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testAfter "self debug: #testAfter" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1)) = (self moreThan4Elements at: 2). self should: [ self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ] raise: Error. self should: [ self moreThan4Elements after: self elementNotInForElementAccessing ] raise: Error! ! !Trait method! assertNoDuplicates: aCollection whenConvertedTo: aClass | result | result := self collectionWithEqualElements asIdentitySet. self assert: (result class includesBehavior: IdentitySet). self collectionWithEqualElements do: [ :initial | self assert: (result occurrencesOf: initial) = 1 ]! ! !Trait method! testCopySameClass "self debug: #testCopySameClass" "A copy of a collection should always be of the same class as the instance it copies" | copy | copy := self empty copy. self assert: copy class == self empty class.! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self shouldnt: [self collectionWith2TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection ) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection . " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ] ifFalse:[ (each + diff) to: self replacementCollection size do: [ :i | self assert: (result at: i) = ( self replacementCollection at: ( i - each + 1 ) ) ]. ]. ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 " specific comportement for the begining of the collection :" ifTrue: [ 1 to: ((firstIndexesOfOccurrence at: i) - 1 ) do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] " between parts till the end : " ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: (i -1)) + self oldSubCollection size. 1 to: ( firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: (resultBetweenPartIndex + i - 1)) = (self collectionWith2TimeSubcollection at: (collectionBetweenPartIndex +i - 1)) ] ] ]. "final part :" 1 to: (self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size ) ) do: [ :i | self assert: ( result at:(firstIndexesOfOccurrence last + self replacementCollection size -1) + i ) = ( self collectionWith2TimeSubcollection at:(firstIndexesOfOccurrence last + self oldSubCollection size -1) + i ) . ]! ! !Trait method! testAllButLast "self debug: #testAllButLast" | abf col | col := self moreThan3Elements. abf := col allButLast. self deny: abf last = col last. self assert: abf size + 1 = col size! ! !Trait method! testAllButLastNElements "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButLast: 2. 1 to: abf size do: [ :i | self assert: (abf at: i) = (col at: i) ]. self assert: abf size + 2 = col size! ! !Trait method! testCopyNonEmpty "self debug: #testCopyNonEmpty" | copy | copy := self nonEmpty copy. self deny: copy isEmpty. self assert: copy size = self nonEmpty size. self nonEmpty do: [:each | copy includes: each]! ! !Trait method! test0TStructuralEqualityTest self shouldnt: [self empty] raise: Error. self shouldnt: [self nonEmpty] raise: Error. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! testAtPin "self debug: #testAtPin" self assert: (self moreThan4Elements atPin: 2) = self moreThan4Elements second. self assert: (self moreThan4Elements atPin: 99) = self moreThan4Elements last. self assert: (self moreThan4Elements atPin: -99) = self moreThan4Elements first! ! !Trait method! testIncludesAllNoneThere "self debug: #testIncludesAllOfNoneThere'" self deny: (self empty includesAll: self nonEmpty ). self deny: (self nonEmpty includesAll: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testEqualSign "self debug: #testEqualSign" self deny: (self empty = self nonEmpty).! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty . self shouldnt: [self indexInNonEmpty ] raise: Error. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size.! ! !Trait method! numberOfSimilarElementsInIntersection ^ self collection occurrencesOf: self anotherElementOrAssociationIn! ! !Trait method! testIncludesElementIsNotThere "self debug: #testIncludesElementIsNotThere" self deny: (self nonEmpty includes: self elementNotIn). self assert: (self nonEmpty includes: self nonEmpty anyOne). self deny: (self empty includes: self elementNotIn)! ! !Trait method! testPrintOn | aStream result allElementsAsString | result:=''. aStream:= ReadWriteStream on: result. self nonEmpty printOn: aStream . allElementsAsString:=(result findBetweenSubStrs: ' ' ). 1 to: allElementsAsString size do: [:i | i=1 ifTrue:[ self accessCollection class name first isVowel ifTrue:[self assert: (allElementsAsString at:i)='an' ] ifFalse:[self assert: (allElementsAsString at:i)='a'].]. i=2 ifTrue:[self assert: (allElementsAsString at:i)=self accessCollection class name]. i>2 ifTrue:[self assert: (allElementsAsString at:i)=((self nonEmpty at:i)asString).]. ].! ! !Trait method! testAfterIfAbsent "self debug: #testAfterIfAbsent" self assert: (self moreThan4Elements after: (self moreThan4Elements at: 1) ifAbsent: [ 33 ]) = (self moreThan4Elements at: 2). self assert: (self moreThan4Elements after: (self moreThan4Elements at: self moreThan4Elements size) ifAbsent: [ 33 ]) = 33. self assert: (self moreThan4Elements after: self elementNotInForElementAccessing ifAbsent: [ 33 ]) = 33! ! !Trait method! testLastNElements "self debug: #testLastNElements" | result | result := self moreThan3Elements last: self moreThan3Elements size - 1. 1 to: result size do: [ :i | self assert: (result at: i) = (self moreThan3Elements at: i + 1) ]. self assert: result size = (self moreThan3Elements size - 1). self should: [ self moreThan3Elements last: self moreThan3Elements size + 1 ] raise: Error! ! !Trait method! testLast "self debug: #testLast" self assert: self moreThan4Elements last = (self moreThan4Elements at: self moreThan4Elements size)! ! !Trait method! testReverseDo | result | result:= OrderedCollection new. self nonEmpty reverseDo: [: each | result add: each]. 1 to: result size do: [:i| self assert: (result at: i)=(self nonEmpty at:(self nonEmpty size-i+1))].! ! !Trait method! testAsSortedCollection | aCollection result | aCollection := self collectionWithSortableElements . result := aCollection asSortedCollection. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (aCollection occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = aCollection size.! ! !Trait method! testsBeginsWith self assert: (self nonEmpty beginsWith:(self nonEmpty copyUpTo: self nonEmpty last)). self assert: (self nonEmpty beginsWith:(self nonEmpty )). self deny: (self nonEmpty beginsWith:(self nonEmpty copyWith:self nonEmpty first)).! ! !Trait method! testPairsDo | index | index:=1. self nonEmptyMoreThan1Element pairsDo: [:each1 :each2 | self assert:(self nonEmptyMoreThan1Element at:index)=each1. self assert:(self nonEmptyMoreThan1Element at:(index+1))=each2. index:=index+2]. self nonEmptyMoreThan1Element size odd ifTrue:[self assert: index=self nonEmptyMoreThan1Element size] ifFalse:[self assert: index=(self nonEmptyMoreThan1Element size+1)].! ! !Trait method! test0FixtureCopySameContentsTest self shouldnt: [self nonEmpty ] raise: Error. self deny: self nonEmpty isEmpty. self shouldnt: [self empty ] raise: Error. self assert: self empty isEmpty. ! ! !Trait method! testIntersectionEmpty "self debug: #testIntersectionEmpty" | inter | inter := self empty intersection: self empty. self assert: inter isEmpty. inter := self empty intersection: self collection . self assert: inter = self empty. ! ! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testWithIndexCollect | result index collection | index := 0. collection := self nonEmptyMoreThan1Element . result := collection withIndexCollect: [:each :i | self assert: i = (index := index + 1). self assert: i = (collection indexOf: each) . each] . 1 to: result size do:[: i | self assert: (result at:i)= (collection at: i)]. self assert: result size = collection size.! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self shouldnt: [ self withEqualElements] raise: Error. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !Trait method! testWithCollectError self should: [self nonEmptyMoreThan1Element with: self empty collect:[:a :b | ]] raise: Error.! ! !Trait method! testBefore "self debug: #testBefore" self assert: (self moreThan4Elements before: (self moreThan4Elements at: 2)) = (self moreThan4Elements at: 1). self should: [ self moreThan4Elements before: (self moreThan4Elements at: 1) ] raise: Error. self should: [ self moreThan4Elements before: 66 ] raise: Error! ! !Trait method! testHasEqualElementsIsTrueForNonIdenticalButEqualCollections "self debug: #testHasEqualElementsIsTrueForNonIdenticalButEqualCollections" self assert: (self empty hasEqualElements: self empty copy). self assert: (self empty copy hasEqualElements: self empty). self assert: (self empty copy hasEqualElements: self empty copy). self assert: (self nonEmpty hasEqualElements: self nonEmpty copy). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty). self assert: (self nonEmpty copy hasEqualElements: self nonEmpty copy).! ! !Trait method! test0FixtureCopyWithReplacementTest self shouldnt: [self replacementCollection ]raise: Error. self shouldnt: [self oldSubCollection] raise: Error. self shouldnt: [self collectionWith1TimeSubcollection ]raise: Error. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection ) = 1. ! ! !Trait method! testKeysAndValuesDo "| result | result:= OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| result add: (value+i)]. 1 to: result size do: [:i| self assert: (result at:i)=((self nonEmptyMoreThan1Element at:i)+i)]" | indexes elements | indexes:= OrderedCollection new. elements := OrderedCollection new. self nonEmptyMoreThan1Element keysAndValuesDo: [:i :value| indexes add: (i). elements add: value]. (1 to: self nonEmptyMoreThan1Element size )do: [ :i | self assert: (indexes at: i) = i. self assert: (elements at: i) = (self nonEmptyMoreThan1Element at: i). ]. self assert: indexes size = elements size. self assert: indexes size = self nonEmptyMoreThan1Element size . ! ! !Trait method! testFindLast | element result | element := self nonEmptyMoreThan1Element at:self nonEmptyMoreThan1Element size. result:=self nonEmptyMoreThan1Element findLast: [:each | each =element]. self assert: result=self nonEmptyMoreThan1Element size. ! ! !Trait method! testAllButFirst "self debug: #testAllButFirst" | abf col | col := self moreThan3Elements. abf := col allButFirst. self deny: abf first = col first. self assert: abf size + 1 = col size! ! !Trait method! testAsBag self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Bag! ! !Trait method! testCopyUpToEmpty | result | result := self empty copyUpTo: self collectionWithoutEqualElements first. self assert: result isEmpty. ! ! !Trait method! testCopyWithFirst | index element result | index:= self indexInNonEmpty . element:= self nonEmpty at: index. result := self nonEmpty copyWithFirst: element. self assert: result size = (self nonEmpty size + 1). self assert: result first = element . 2 to: result size do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i - 1 ))].! ! !Trait method! testAsIdentitySetWithEqualsElements | result collection | collection := self withEqualElements . result := collection asIdentitySet. collection do: [ :each | self assert: (result occurrencesOf: each) = 1 ]. self assert: result class = IdentitySet.! ! !Trait method! testIndexOfStartingAtDuplicate "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent:startingAt: should return the position of the first occurrence :'" self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 55 ]) = 1. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 55 ]) = collection size! ! !Trait method! testCopyFromTo | result index collection | collection := self collectionWithoutEqualElements . index :=self indexInForCollectionWithoutDuplicates . result := collection copyFrom: index to: collection size . "verify content of 'result' : " 1 to: result size do: [:i | self assert: (result at:i)=(collection at: (i + index - 1))]. "verify size of 'result' : " self assert: result size = (collection size - index + 1).! ! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! !Trait method! testDifferenceWithSeparateCollection "Answer the set theoretic difference of two collections." "self debug: #testDifferenceWithSeparateCollection" | res separateCol | separateCol := self collectionClass with: self anotherElementOrAssociationNotIn. res := self collectionWithoutEqualElements difference: separateCol. self deny: (res includes: self anotherElementOrAssociationNotIn). self assert: res size equals: self collectionWithoutEqualElements size. self collectionWithoutEqualElements do: [ :each| self assert: (res includes: each)]. res := separateCol difference: self collection. self deny: (res includes: self collection anyOne). self assert: res equals: separateCol! ! !Trait method! testAtOutOfBounds "self debug: #testAtOutOfBounds" self should: [ self moreThan4Elements at: self moreThan4Elements size + 1 ] raise: Error. self should: [ self moreThan4Elements at: -1 ] raise: Error! ! !Trait method! testAsStringOnDelimiterOne | delim oneItemStream result | "delim := ', '. oneItemStream := '' readWrite. self oneItemCol asStringOn: oneItemStream delimiter: delim. self assert: oneItemStream contents = '1'." delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testFindLastNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testAsStringOnDelimiterLastOne | delim oneItemStream result | delim := ', '. result:=''. oneItemStream := ReadWriteStream on: result. self nonEmpty1Element asStringOn: oneItemStream delimiter: delim last: 'and'. oneItemStream do:[:each | self assert: each = (self nonEmpty1Element first asString)]. ! ! !Trait method! testCopyReplaceAllWith1Occurence | result firstIndexesOfOccurrence index endPartIndexResult endPartIndexCollection | result := self collectionWith1TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection . "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection . index:= firstIndexesOfOccurrence at: 1. "verify content of 'result' : " "first part of 'result'' : '" 1 to: (index -1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i)=(result at: i) ]. " middle part containing replacementCollection : " index to: (index + self replacementCollection size-1) do: [ :i | self assert: ( result at: i )=(self replacementCollection at: ( i - index + 1 )) ]. " end part :" endPartIndexResult := index + self replacementCollection size . endPartIndexCollection := index + self oldSubCollection size . 1 to: (result size - endPartIndexResult - 1 ) do: [ :i | self assert: (result at: ( endPartIndexResult + i - 1 ) ) = (self collectionWith1TimeSubcollection at: ( endPartIndexCollection + i - 1 ) ). ]. ! ! !Trait method! testLastIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" "self debug: #testLastIndexOf" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection first. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'lastIndexOf: should return the position of the last occurrence :'" self assert: (collection lastIndexOf: element ifAbsent: [ 55 ]) = collection size! ! !Trait method! test0FixtureSequencedElementAccessTest self shouldnt: [ self moreThan4Elements ] raise: Error. self assert: self moreThan4Elements size >= 4. self shouldnt: [ self subCollectionNotIn ] raise: Error. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self shouldnt: [ self elementNotInForElementAccessing ] raise: Error. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self shouldnt: [ self elementInForElementAccessing ] raise: Error. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! firstIndexesOf: aSubCollection in: collection " return an OrderedCollection with the first indexes of the occurrences of subCollection in collection " | tmp result currentIndex | tmp:= collection. result:= OrderedCollection new. currentIndex := 1. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ result add: currentIndex. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst. currentIndex := currentIndex + 1] ] ifFalse: [ tmp := tmp copyWithoutFirst. currentIndex := currentIndex +1. ] ]. ^ result. ! ! !Trait method! testCopyAfter | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfter: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyNonEmptyWithout "self debug: #testCopyNonEmptyWithout" | res anElementOfTheCollection | anElementOfTheCollection := self nonEmpty anyOne. res := (self nonEmpty copyWithout: anElementOfTheCollection). "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self deny: (res includes: anElementOfTheCollection). self nonEmpty do: [:each | (each = anElementOfTheCollection) ifFalse: [self assert: (res includes: each)]]. ! ! !Trait method! howMany: aSubCollection in: collection " return an integer representing how many time 'subCollection' appears in 'collection' " | tmp nTime | tmp := collection. nTime:= 0. [tmp isEmpty ]whileFalse: [ (tmp beginsWith: aSubCollection) ifTrue: [ nTime := nTime + 1. 1 to: aSubCollection size do: [:i | tmp := tmp copyWithoutFirst.] ] ifFalse: [tmp := tmp copyWithoutFirst.] ]. ^ nTime. ! ! !Trait method! testShallowCopy | result | result := self nonEmpty shallowCopy . "verify content of 'result: '" 1 to: self nonEmpty size do: [:i | self assert: ((result at:i)=(self nonEmpty at:i))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testCopyUpToLastWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection first. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyUpToLast:' should copy until the last occurence :" result := collection copyUpToLast: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (result at: i ) = ( collection at: i ) ]. self assert: result size = (collection size - 1). ! ! !Trait method! testReverseDoEmpty | result | result:= OrderedCollection new. self empty reverseDo: [: each | result add: each]. self assert: result isEmpty .! ! !Trait method! testAsSet | | "test with a collection without equal elements :" self assertSameContents: self collectionWithoutEqualElements whenConvertedTo: Set. ! ! !Trait method! testFindFirstNotIn | result | result:=self empty findFirst: [:each | true]. self assert: result=0. ! ! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !Trait method! testCopyAfterWithDuplicate | result element collection | collection := self collectionWithSameAtEndAndBegining . element := collection last. " collectionWithSameAtEndAndBegining first and last elements are equals. 'copyAfter:' should copy after the first occurence :" result := collection copyAfter: (element ). "verifying content: " 1 to: result size do: [:i | self assert: (collection at:(i + 1 )) = (result at: (i)) ]. "verify size: " self assert: result size = (collection size - 1).! ! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! !Trait method! testCopyUpTo | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyUpTo: (collection at:index). "verify content of 'result' :" 1 to: result size do: [:i| self assert: (collection at:i)=(result at:i)]. "verify size of 'result' :" self assert: result size = (index-1). ! ! !Trait method! testAsSortedCollectionWithSortBlock | result tmp | result := self collectionWithSortableElements asSortedCollection: [:a :b | a > b]. self assert: (result class includesBehavior: SortedCollection). result do: [ :each | self assert: (self collectionWithSortableElements occurrencesOf: each) = (result occurrencesOf: each) ]. self assert: result size = self collectionWithSortableElements size. tmp:=result at: 1. result do: [:each| self assert: tmp>=each. tmp:=each]. ! ! !Trait method! testCopyWithSequenceable | result index element | index := self indexInNonEmpty . element := self nonEmpty at: index. result := self nonEmpty copyWith: (element ). self assert: result size = (self nonEmpty size + 1). self assert: result last = element . 1 to: (result size - 1) do: [ :i | self assert: (result at: i) = ( self nonEmpty at: ( i ))].! ! !Trait method! testCopyEquals "self debug: #testCopySameClass" "A copy should be equivalent to the things it's a copy of" | copy | copy := self nonEmpty copy. self assert: copy = self nonEmpty.! ! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !Trait method! testAsCommaStringOne "self assert: self oneItemCol asCommaString = '1'. self assert: self oneItemCol asCommaStringAnd = '1'." self assert: self nonEmpty1Element asCommaString = (self nonEmpty1Element first asString). self assert: self nonEmpty1Element asCommaStringAnd = (self nonEmpty1Element first asString). ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! testCopyAfterLast | result index collection | collection := self collectionWithoutEqualElements . index:= self indexInForCollectionWithoutDuplicates . result := collection copyAfterLast: (collection at:index ). "verifying content: " (1) to: result size do: [:i | self assert: (collection at:(i + index ))=(result at: (i))]. "verify size: " self assert: result size = (collection size - index).! ! !Trait method! testCopyReplaceFromToWith | result indexOfSubcollection lastIndexOfOldSubcollection lastIndexOfReplacementCollection | indexOfSubcollection := (self firstIndexesOf: self oldSubCollection in: self collectionWith1TimeSubcollection) at: 1. lastIndexOfOldSubcollection := indexOfSubcollection + self oldSubCollection size -1. lastIndexOfReplacementCollection := indexOfSubcollection + self replacementCollection size -1. result := self collectionWith1TimeSubcollection copyReplaceFrom: indexOfSubcollection to: lastIndexOfOldSubcollection with: self replacementCollection . "verify content of 'result' : " "first part of 'result' " 1 to: (indexOfSubcollection - 1) do: [ :i | self assert: (self collectionWith1TimeSubcollection at:i) = (result at: i) ]. " middle part containing replacementCollection : " (indexOfSubcollection ) to: ( lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: i)=(self replacementCollection at: (i - indexOfSubcollection +1)) ]. " end part :" 1 to: (result size - lastIndexOfReplacementCollection ) do: [ :i | self assert: (result at: ( lastIndexOfReplacementCollection + i ) ) = (self collectionWith1TimeSubcollection at: ( lastIndexOfOldSubcollection + i ) ). ]. ! ! !Trait method! testReverseWithDo | firstCollection secondCollection index | firstCollection := self nonEmptyMoreThan1Element. secondCollection := firstCollection copy. index := firstCollection size. firstCollection reverseWith: secondCollection do: [:a :b | self assert: (firstCollection at: index) equals: a. self assert: (secondCollection at: index) equals: b. ( index := index - 1).] ! ! !Trait method! testReversed | result | result := self nonEmpty reversed . "verify content of 'result: '" 1 to: result size do: [:i | self assert: ((result at:i)=(self nonEmpty at:(self nonEmpty size-i+1)))]. "verify size of 'result' :" self assert: result size=self nonEmpty size.! ! !Trait method! testIndexOfIfAbsentDuplicate "self debug: #testIndexOfIfAbsent" | collection element | collection := self collectionWithSameAtEndAndBegining. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals 'indexOf:ifAbsent: should return the position of the first occurrence :'" self assert: (collection indexOf: element ifAbsent: [ 55 ]) = 1! ! !Trait method! testCopyAfterLastEmpty | result | result := self empty copyAfterLast: self collectionWithoutEqualElements first. self assert: result isEmpty.! ! !Trait method! testCopyEmpty "self debug: #testCopyEmpty" | copy | copy := self empty copy. self assert: copy isEmpty.! ! NBQSortCallback class removeSelector: #callType! ----End fileIn----! ----End fileIn----! ----QUIT----an Array(6 August 2013 1:53:47 pm) Pharo.image priorSource: 13149553! ----STARTUP----an Array(6 August 2013 2:06:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 August 2013 2:06:11 pm) Pharo-30323.image priorSource: 14376866! ----STARTUP----an Array(6 August 2013 3:05:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/6/2013 14:37' prior: 46659734! commentForCurrentUpdate ^ '11200 Repeated methods in superclasses, explicit requirement no implemented, repeated methods in traits https://pharo.fogbugz.com/f/cases/11200 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/6/2013 14:40'! script116 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-EstebanLorenzano.5.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-EstebanLorenzano.4.mcz AsmJit-x86-EstebanLorenzano.7.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.47.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.149.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.142.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-EstebanLorenzano.198.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-EstebanLorenzano.1550.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-EstebanLorenzano.47.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-EstebanLorenzano.101.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.847.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.64.mcz Morphic-Examples-EstebanLorenzano.6.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-EstebanLorenzano.133.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-EstebanLorenzano.10.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.37.mcz Nautilus-EstebanLorenzano.504.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-EstebanLorenzano.107.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-EstebanLorenzano.98.mcz Polymorph-Widgets-EstebanLorenzano.878.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-MarcusDenker.183.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-MarcusDenker.19.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.368.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-EstebanLorenzano.102.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-EstebanLorenzano.106.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-EstebanLorenzano.53.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.124.mcz Spec-Widgets-EstebanLorenzano.221.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.893.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.604.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1203.mcz ToolsTest-EstebanLorenzano.denker.53.mcz Traits-EstebanLorenzano.554.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/6/2013 13:41'! update30323 "sync" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/6/2013 14:41'! update30324 "self new update30324" self withUpdateLog: '11200 Repeated methods in superclasses, explicit requirement no implemented, repeated methods in traits https://pharo.fogbugz.com/f/cases/11200 '. self loadTogether: self script116 merge: false. self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(6 August 2013 3:07:06 pm) Pharo.image priorSource: 14377067! ----STARTUP----an Array(6 August 2013 3:19:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 August 2013 3:19:17 pm) Pharo-30324.image priorSource: 14388165! ----STARTUP----an Array(6 August 2013 4:14:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/6/2013 16:11' prior: 47931804! commentForCurrentUpdate ^ '11294 Bugs in refactoring when using traits https://pharo.fogbugz.com/f/cases/11294 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/6/2013 16:11'! script117 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-MarcusDenker.42.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-EstebanLorenzano.5.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-EstebanLorenzano.4.mcz AsmJit-x86-EstebanLorenzano.7.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.47.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-EstebanLorenzano.149.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.142.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-EstebanLorenzano.198.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-EstebanLorenzano.1550.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-EstebanLorenzano.47.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-EstebanLorenzano.101.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.847.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.64.mcz Morphic-Examples-EstebanLorenzano.6.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-EstebanLorenzano.133.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-EstebanLorenzano.10.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.37.mcz Nautilus-EstebanLorenzano.506.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-EstebanLorenzano.108.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-EstebanLorenzano.98.mcz Polymorph-Widgets-EstebanLorenzano.878.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.368.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-EstebanLorenzano.102.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-MarcusDenker.32.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-EstebanLorenzano.106.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-EstebanLorenzano.53.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.124.mcz Spec-Widgets-EstebanLorenzano.221.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.893.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.604.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1203.mcz ToolsTest-EstebanLorenzano.denker.53.mcz Traits-EstebanLorenzano.554.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/6/2013 16:12'! update30325 "self new update30325" "Cleaning false dirty packages" (MCWorkingCopy allManagers select: #modified) do: [ :each | each modified: false ]. . self withUpdateLog: '11294 Bugs in refactoring when using traits https://pharo.fogbugz.com/f/cases/11294 '. self loadTogether: self script117 merge: false. self flushCaches. ! ! "ScriptLoader30"! "Graphics-Primitives"! "Collections-Streams"! "Spec-Tools"! "AST-Core"! "Gofer-Core"! "Polymorph-Widgets"! "Polymorph-TaskbarIcons"! "Collections-Strings"! "KeyChain"! "Ring-Core-Kernel"! "Text-Edition"! "SUnit-UITesting"! "Athens-Balloon"! "Polymorph-Tools-Diff"! "Collections-Sequenceable"! "Regex-Core"! "Athens-Examples"! "Compiler"! "Refactoring-Critics"! "Morphic-Base"! "Athens-Cairo"! "Manifest-CriticBrowser"! "GroupManager"! "AsmJit-Instructions"! "Tools"! "Metacello-MC"! "AsmJit-StackManagement"! "ToolsTest"! "CollectionsTests"! "Metacello-Core"! "Refactoring-Tests-Critics"! "RPackage-SystemIntegration"! "KernelTests"! "SmartSuggestions"! "SUnit-Core"! "Shout"! "Announcements-Tests-Core"! "Traits"! "Kernel"! "NOCompletion"! "Nautilus"! "PackageInfo"! "Collections-Abstract"! "Collections-Unordered"! "Monticello"! "Refactoring-Tests-Core"! "NativeBoost-Win32"! "Morphic-Examples"! "AsmJit-x86"! "Manifest-Core"! "Tests"! "FileSystem-Core"! "NativeBoost-Core"! "NativeBoost-Mac"! "Spec-Widgets"! "AST-Interpreter-Core"! "Slot"! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 14:24'! methodRefactoringSubMenu: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Swap') action: [ target refactor swapMethodFor: selectedMethods ]; order: 400; label: (target selectedClass isMeta ifTrue: [ 'Move to instance side' ] ifFalse:[ 'Move to class side']); parent: #'Refactoring'. (aBuilder item: #'Push up') action: [ target refactor pullUpMethodsFor: selectedMethods ]; order: 500; parent: #'Refactoring'. (aBuilder item: #'Push down') action: [ target refactor pushDownMethodsFor: selectedMethods ]; order: 600; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !RBNamespace methodsFor: 'private' stamp: 'SebastianTleye 8/1/2013 16:11' prior: 30854257! privateImplementorsOf: aSelector | classes | classes := Set new. self allClassesDo: [ :class | (class directlyDefinesLocalMethod: aSelector) ifTrue: [ classes add: class ] ]. ^ classes! ! !RBAbstractClass methodsFor: 'testing' stamp: 'SebastianTleye 8/1/2013 16:11'! directlyDefinesLocalMethod: aSelector self isDefined ifTrue: [(self hasRemoved: aSelector) ifTrue: [^false]. (self realClass includesLocalSelector: aSelector) ifTrue: [^true]]. ^newMethods notNil and: [newMethods includesKey: aSelector]! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 13:42' prior: 28259390! codeRewritingClassSubmenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass codeRewritingClassSubmenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 13:46' prior: 28260525! groupRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass groupRefactoringMenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 16:33' prior: 28262386! methodRefactoringSubMenu: aBuilder | target selectedMethod | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethod ifNil:[ ^ target ]. selectedMethod origin instanceSide methodRefactoringSubMenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 14:05' prior: 28264676! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100. ! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 16:33' prior: 28266506! refactoringMethodMenu: aBuilder | target | target := aBuilder model. target selectedMethod ifNil:[ ^ target ]. target selectedMethod origin instanceSide refactoringMethodMenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 13:52' prior: 28266869! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass sourceCodeRefactoringMenu: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 7/31/2013 13:53' prior: 28270653! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. target selectedClass sourceCodeRefactoringMenuHolder: aBuilder.! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'SebastianTleye 7/31/2013 12:58' prior: 28248470! privateAddAParameterFor: aMethod | initializer newSelector initialAnswer oldSelector | oldSelector := aMethod selector. initialAnswer := oldSelector numArgs = 0 ifTrue: [ oldSelector , ':' ] ifFalse: [ oldSelector ]. newSelector := self request: 'Enter new selector:' initialAnswer: initialAnswer. newSelector isEmptyOrNil ifTrue: [ ^ nil ]. initializer := self request: 'Enter default value for parameter:' initialAnswer: 'nil'. initializer isEmpty ifTrue: [ ^ nil ]. ^ RBAddParameterRefactoring model: environment addParameterToMethod: aMethod selector in: aMethod origin newSelector: newSelector asSymbol initializer: initializer ! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'SebastianTleye 7/31/2013 13:34' prior: 28251160! privateRemoveMethodsFor: aCollection | selectors class | selectors := aCollection collect: #selector. class := aCollection first origin. (aCollection allSatisfy: [:e | e origin == class ]) ifFalse: [ ^ nil ]. ^ RBRemoveMethodRefactoring model: environment removeMethods: selectors from: class! ! !NautilusRefactoring methodsFor: 'private-method' stamp: 'SebastianTleye 8/2/2013 10:41' prior: 35685591! privateRemoveParameterMethodFor: aMethod | arguments parameter | arguments := aMethod argumentNames ifEmpty: [ ^ nil ]. parameter := (UIManager default chooseFrom: arguments) ifNil: [ ^ nil ]. ^ RBRemoveParameterRefactoring model: environment removeParameter: (arguments at: parameter ifAbsent: [ ^ nil ]) in: aMethod origin selector: aMethod selector! ! !NautilusUI methodsFor: 'source code area' stamp: 'SebastianTleye 8/1/2013 15:12' prior: 28312245! methodAdded: anAnnouncement | method | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. method := anAnnouncement method. ((method methodClass = self selectedClass) or: [ method methodClass users includes: self selectedClass ]) ifTrue: [ self resetMethodsListSelection. self removeAllFromMethodsIconsCache: method. self update. (method methodClass isMeta and: [ method methodClass methodDict size = 1 ]) ifTrue: [ self changed: #instanceButtonLabel ] ]! ! !NautilusUI methodsFor: 'source code area' stamp: 'SebastianTleye 8/1/2013 15:35' prior: 46567197! methodModified: anAnnouncement | collection | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. collection := self getList2. ((collection includes: anAnnouncement methodClass) or: [ anAnnouncement methodClass users includes: self selectedClass ]) ifTrue: [ | method selectedMethod oldMethod | method := anAnnouncement newMethod. selectedMethod := self selectedMethod. self removeFromMethodsIconsCache: method. method isTestMethod ifTrue: [ "Should update class icon" ClassesIconsCache removeKey: method methodClass ifAbsent: []]. self updateClassView. oldMethod := anAnnouncement oldMethod. (selectedMethod = oldMethod or: [ oldMethod hasBreakpoint and: [ selectedMethod methodClass = oldMethod methodClass and: [ selectedMethod selector = oldMethod selector ]]]) ifTrue: [ sourceTextArea hasUnacceptedEdits ifTrue: [ | sourceCode | sourceCode := sourceTextArea text. self forceSelectedMethod: method. self update. self highlightCategory: method. sourceTextArea setText: sourceCode. sourceTextArea hasEditingConflicts: true. sourceTextArea update: #codeChangedElsewhere ] ifFalse: [ self selectedMethod: method. self update ]]]! ! !NautilusUI methodsFor: 'source code area' stamp: 'SebastianTleye 8/2/2013 10:06' prior: 28314091! methodRecategorized: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. ((anAnnouncement methodClass = self selectedClass) or: [ anAnnouncement methodClass users includes: self selectedClass ]) ifTrue: [self update ]! ! !NautilusUI methodsFor: 'source code area' stamp: 'SebastianTleye 8/1/2013 15:19' prior: 37136287! methodRemoved: anAnnouncement | method | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. method := anAnnouncement methodRemoved. ((method methodClass = self selectedClass) or: [ method methodClass users includes: self selectedClass ]) ifTrue: [ self selectedMethod = anAnnouncement methodRemoved ifTrue: [ self selectedMethod: nil ]. self resetMethodsListSelection. self removeAllFromMethodsIconsCache: method. method isTestMethod ifTrue: [ "Should update class icon" ClassesIconsCache removeKey: method methodClass ifAbsent: []. self updateClassView ]. self update. (method methodClass isMeta and: [ method methodClass hasMethods not ]) ifTrue: [ self changed: #instanceButtonLabel ] ]! ! !RBSelectorEnvironment class methodsFor: 'instance creation' stamp: 'SebastianTleye 8/2/2013 09:52' prior: 31319522! implementorsOf: aSelector in: anEnvironment | classDict metaDict selectors | classDict := IdentityDictionary new. metaDict := IdentityDictionary new. selectors := IdentitySet with: aSelector. anEnvironment classesDo: [ :class | ((class includesLocalSelector: aSelector) and: [ anEnvironment includesSelector: aSelector in: class ]) ifTrue: [ class isMeta ifTrue: [ metaDict at: class soleInstance name put: selectors copy ] ifFalse: [ classDict at: class name put: selectors copy ] ] ]. ^ (self onEnvironment: anEnvironment) classSelectors: classDict metaClassSelectors: metaDict; label: 'Implementors of ' , aSelector; yourself! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:43'! codeRewritingClassSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:44'! groupRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:18'! methodRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:45'! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:48'! refactoringMethodMenu: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/1/2013 10:49'! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:52'! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 13:53'! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 7/31/2013 17:13'! methodRefactoringSubMenu: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'SebastianTleye 8/1/2013 15:38' prior: 36991691! classReorganized: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. (self selectedClass = anAnnouncement classReorganized or: [ anAnnouncement classReorganized users includes: self selectedClass ]) ifTrue: [ self updateBothView ]! ! NautilusRefactoring class removeSelector: #renameMethodAllItem:! !Trait method! codeRewritingClassSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !Trait method! codeRewritingClassSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !Trait method! groupRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! groupRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! methodRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! !Trait method! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! refactoringMethodMenu: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !Trait method! refactoringMethodMenu: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !Trait method! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !Trait method! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! "Nautilus"! "NautilusRefactoring"! "Refactoring-Core"! "Refactoring-Environment"! ----End fileIn----! ----QUIT----an Array(6 August 2013 4:14:49 pm) Pharo.image priorSource: 14388366! ----STARTUP----an Array(6 August 2013 4:26:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 August 2013 4:26:56 pm) Pharo-30325.image priorSource: 14433415! ----STARTUP----an Array(7 August 2013 9:28:42 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/7/2013 09:22' prior: 47943103! commentForCurrentUpdate ^ '- issue 11310 Browser newOnClass: is broken https://pharo.fogbugz.com/default.asp?11310 - issue 11304 squeaksource3 should point to http://ss3.gemtalksystems.com/ss/ https://pharo.fogbugz.com/default.asp?11304 - issue 11315 Bad merged methods in version 30323 https://pharo.fogbugz.com/default.asp?11315 - issue 11291 Announcer for Morphs should be Weak https://pharo.fogbugz.com/default.asp?11291 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/7/2013 09:22'! script118 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-CamilloBruni.2.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-EstebanLorenzano.5.mcz AsmJit-Operands-CamilloBruni.3.mcz AsmJit-StackManagement-EstebanLorenzano.4.mcz AsmJit-x86-EstebanLorenzano.7.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.47.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.142.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-EstebanLorenzano.1550.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.66.mcz Morphic-Examples-EstebanLorenzano.6.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-EstebanLorenzano.133.mcz NativeBoost-Examples-EstebanLorenzano.16.mcz NativeBoost-Mac-EstebanLorenzano.10.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.37.mcz Nautilus-StephaneDucasse.508.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-EstebanLorenzano.108.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-EstebanLorenzano.98.mcz Polymorph-Widgets-StephaneDucasse.880.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.368.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-EstebanLorenzano.102.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.108.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.55.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.223.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.893.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.604.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1205.mcz ToolsTest-StephaneDucasse.denker.55.mcz Traits-EstebanLorenzano.554.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/7/2013 09:23'! update30326 "self new update30326" self withUpdateLog: '- issue 11310 Browser newOnClass: is broken https://pharo.fogbugz.com/default.asp?11310 - issue 11304 squeaksource3 should point to http://ss3.gemtalksystems.com/ss/ https://pharo.fogbugz.com/default.asp?11304 - issue 11315 Bad merged methods in version 30323 https://pharo.fogbugz.com/default.asp?11315 - issue 11291 Announcer for Morphs should be Weak https://pharo.fogbugz.com/default.asp?11291 '. self loadTogether: self script118 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDebugger methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 18:23' prior: 45969463! initialize session := nil asValueHolder. label := nil asValueHolder. super initialize. needRefresh := false. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self. self whenWindowChanged: [:w | w whenClosedDo: [ self close ] ]. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ]. label whenChangedDo: [ self updateTitle ]! ! !SpecDebugger methodsFor: 'private' stamp: 'StephaneDucasse 8/4/2013 18:23'! onWidgetBuilt needRefresh := true! ! !UserManager methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 46773481! initialize super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !PermissionsEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 46776866! initialize lock := false. user := nil asValueHolder. super initialize.! ! !InputWidget methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46841484! initialize okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !MonticelloRepositoryBrowser methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 46829726! initialize super initialize. order := self class order! ! !LabelModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46859571! initialize super initialize. textHolder := '' asValueHolder. enabledHolder := true asValueHolder. textHolder whenChangedDo: [ self changed: #getText ].! ! !IconicListItem methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46811408! initialize super initialize. self changeTableLayout; listDirection: #leftToRight; cellPositioning: #center; cellInset: 2; borderWidth: 0; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 20@16.! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46830365! initialize prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged do: [:each | self updateTitle]. super initialize. self initializeAnnouncements. ! ! !MetacelloConfigurationBrowser methodsFor: 'initialize-release' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 46824444! initialize super initialize. self windowIcon: self taskbarIcon. ! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 16:43' prior: 46833571! initialize super initialize. model := ChangeSorterModel new. isRefreshing := false. SystemAnnouncer uniqueInstance weak on: CurrentChangeSetChanged send: #updateTitle to: self ! ! !DualChangeSorterApplication methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46833936! initializeWidgets self instantiateModels: #( changeSorterLeft ChangeSorterApplication changeSorterRight ChangeSorterApplication ). self menusRegistration. self shortcutsRegistration. self setFocusOrder! ! !PluggableTextMorphWithLimits methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46805384! initialize super initialize. locked := false. lockIcon := self defaultOpenMorph. self addIcon. lockIcon on: #mouseEnter send: #colorize to: self. lockIcon on: #mouseLeave send: #decolorize to: self. lockIcon on: #click send: #toggleLock to: self! ! !PasswordInitializationDialogWindow methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46774559! initialize super initialize. self textFont: Smalltalk ui theme textFont.! ! !MultipleMethodsEditorButtonModel methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46808161! initialize super initialize. state := false! ! !SliderModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 46860932! initialize super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !InstVarSetter methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 16:58' prior: 45595422! initialize descriptionHolder := nil asValueHolder. textBindings := Dictionary new. super initialize. self announcer weak on: WidgetBuilt send: #widgetBuilt to: self! ! !InstVarSetter methodsFor: 'private' stamp: 'StephaneDucasse 8/4/2013 16:57'! widgetBuilt text widget ifNotNil: [:m | m styler workspace: self ]! ! !WindowModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46848146! initialize super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !PluggableTextFieldMorph methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46812084! initialize super initialize. textMorphClass := TextMorphForFieldView. self beDecrypted! ! !SwitchUsers methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 46772886! initialize usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !JobProgressMorph methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46804704! initialize super initialize. self addDependent: SystemProgressMorph uniqueInstance.! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46865033! initialize super initialize. model := nil asValueHolder. initialExtent := 400@25. validated := false asValueHolder.! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 46862773! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !MessageBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 46842366! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak on: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !PanelMorphWithSplitters methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46863725! initialize super initialize. paneMorphs := OrderedCollection new.! ! !PharoUserPermissions methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46776204! initialize super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !TreeModel class methodsFor: 'specs' stamp: 'ChristopheDemarey 7/19/2013 17:30' prior: 46869918! defaultSpec ^ {#TreeSpec. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !TreeModel methodsFor: 'drag and drop - private' stamp: 'ChristopheDemarey 7/19/2013 17:34' prior: 46867181! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w scrollerSubMorphFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !TreeModel methodsFor: 'initialize' stamp: 'MarcusDenker 7/20/2013 21:01' prior: 46867505! initialize super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'initialize' stamp: 'StephaneDucasse 8/4/2013 18:36'! onMorphTreeSelectionChanged: ann ^ selectionHolder contents: ann selection selectedItems! ! !TreeModel methodsFor: 'initialize' stamp: 'StephaneDucasse 8/4/2013 18:35'! onWidgetBuilt ^ self selectedItems: selectionHolder contents! ! !TreeModel methodsFor: 'initialize' stamp: 'StephaneDucasse 8/4/2013 18:36' prior: 45482568! registerEvents treeModel announcer weak on: MorphTreeSelectionChanged send: #onMorphTreeSelectionChanged: to: self. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TabModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46849505! initialize super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !MultipleMethodsEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46806889! initialize super initialize. self changeProportionalLayout. self color: Color white. lock := false. buttonsContainer := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #spaceFill; yourself. editors := OrderedCollection new. container := self newProportionalPanelMorph. self updateLayoutForSingle! ! !Cookie methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 46775505! initialize super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !MethodToolbar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 46828209! initialize methodHolder := nil asValueHolder. model := AbstractTool new. super initialize.! ! !PickListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 46832185! initialize wrapHolder := [ :i | i printString ] asValueHolder. pickedItemsHolder := OrderedCollection new asValueHolder. associationsWrapperToItem := Dictionary new asValueHolder. associationsItemToWrapper := Dictionary new asValueHolder. associationsIndexToWrapper := Dictionary new asValueHolder. labelClickableHolder := true asValueHolder. defaultValueHolder := false asValueHolder. blockToPerformOnWrappers := [:wrapper | ] asValueHolder. super initialize.! ! !ButtonModel methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 46853791! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := true asValueHolder. enabledHolder := true asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !NautilusUI methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 46810389! initialize super initialize. categoryWidget := CategoryWidget model: self. methodWidget := MethodWidget model: self.! ! !TabManagerModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 46847441! initialize super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !DropListItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 46812585! initialize super initialize. actionHolder := [] asValueHolder. displayBlock := [ :e | e printString ].! ! !AbstractBasicWidget methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 46844267! initialize super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w setBalloonText: string ]]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w borderWidth: int ]]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w borderColor: color ]]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w enabled: b ]]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dragEnabled: b ]]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w dropEnabled: b ]].! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 46809249! buildInitializeCodeFor: aClass ^ String streamContents: [:str | str << 'initialize';cr. str cr tab << 'super initialize.';cr. aClass instVarNames sort do: [ :name | str cr tab << name << ' := nil.' ]]. ! ! !GroupWindowMorph methodsFor: 'windows' stamp: 'StephaneDucasse 8/4/2013 17:14' prior: 23074905! addWindow: aSystemWindow "Add an existing window to the pages." |tab| SystemWindow topWindow = aSystemWindow ifTrue: [SystemWindow passivateTopWindow]. self tabGroup addPage: aSystemWindow configureForEmbedding label: (self tabLabelFor: aSystemWindow); selectedPageIndex: self tabGroup pages size. self isActive ifFalse: [self tabGroup selectedTab passivate]. tab := self tabGroup selectedTab. tab on: #startDrag send: #dragTab:event:in: to: self withValue: aSystemWindow. aSystemWindow announcer on: WindowLabelled send: #onWindowLabelChanged: to: self! ! !GroupWindowMorph methodsFor: 'windows' stamp: 'StephaneDucasse 8/4/2013 17:14'! onWindowLabelChanged: ann self tabGroup relabelPage: ann window with: (self tabLabelFor: ann window) ! ! !RadioButtonGroup methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 46838768! initialize super initialize. buttons := OrderedCollection new.! ! !Gofer methodsFor: 'repositories-places' stamp: 'StephaneDucasse 8/5/2013 14:20' prior: 22900250! squeaksource3: aProjectName self repository: (MCGemstoneRepository location: 'http://ss3.gemtalksystems.com/ss/' , aProjectName)! ! !MultipleMethodsEditorAllButtonModel methodsFor: 'protocol' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46807700! initialize super initialize. state := true.! ! !MCVersionLoader methodsFor: 'loading' stamp: 'EstebanLorenzano 7/19/2013 15:58' prior: 46804237! load RPackageSet withCacheDo: [ self loadWithNameLike: versions first info name ].! ! !TextModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46857121! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. self registerEvents. self registerEventsForShout! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 46864156! initialize super initialize. token := ''.! ! !WorkingCopyToolBar methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 46828684! initialize super initialize. workingCopyHolder := nil asValueHolder! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/4/2013 15:45' prior: 54844969! on: anAnnouncementClass do: aValuable "Do not use this message on announcer weak" ^ self subscribe: anAnnouncementClass do: aValuable! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/4/2013 15:50' prior: 54845379! subscribe: anAnnouncementClass do: aValuable "aValuable isBlock ifTrue: [ self error: 'Do not use this message on weak and block because it does not work. We need ephemerons for that']." ^ announcer basicSubscribe: ( WeakAnnouncementSubscription new announcer: announcer; announcementClass: anAnnouncementClass; valuable: aValuable)! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46705553! initialize "This method is not used since new is overriden to use initalize:" keys := OrderedCollection new. super initialize. ! ! !OrderedIdentityDictionary methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46705856! initialize: aNumber keys := OrderedCollection new. super initialize: aNumber! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46858533! initialize super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. autoAccept := false asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. autoAccept whenChangedDo: [:bool | self widget ifNotNil: [:w | w autoAccept: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !BlocEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46831359! initialize super initialize. block := nil asValueHolder! ! !UserEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 46775035! initialize usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !FinderUI methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 46824991! initialize super initialize. finder := nil. forceSearch := nil. searchingTextArea := nil. sourceTextArea := nil. useRegExCheckbox := nil. wrapBlockOrSelector := [: i | i asString ].! ! !KeychainEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 46774055! initialize keychainEditingWrapper := nil asValueHolder. super initialize.! ! !IconListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46854837! initialize super initialize. iconHolder := [:item | nil ] asValueHolder.! ! !NewListModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46851692! initialize super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/16/2013 10:47' prior: 46838389! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#classPool) browse. browser changed. browser close.! ! !Browser methodsFor: 'initialization' stamp: 'StephaneDucasse 8/5/2013 22:39' prior: 18461792! openAsMorphClassEditing: editString "Create a pluggable version a Browser on just a single class." | window dragNDropFlag hSepFrac switchHeight mySingletonClassList | window := (SystemWindow labelled: 'later') model: self. dragNDropFlag := true. hSepFrac := 0.3. switchHeight := 25. mySingletonClassList := PluggableListMorph on: self list: #classListSingleton selected: #indexIsOne changeSelected: #indexIsOne: menu: #classListMenu:shifted: keystroke: #classListKey:from:. mySingletonClassList enableDragNDrop: dragNDropFlag. self addLowerPanesTo: window at: (0@hSepFrac corner: 1@1) with: editString. window addMorph: mySingletonClassList fullFrame: ((0@0 corner: 0.5@0) asLayoutFrame bottomOffset: switchHeight). self addMorphicSwitchesTo: window at: ((0.5@0 corner: 1.0@0) asLayoutFrame bottomOffset: switchHeight). window addMorph: self buildMorphicMessageCatList fullFrame: ((0@0 corner: 0.5@hSepFrac) asLayoutFrame topOffset: switchHeight). window addMorph: self buildMorphicMessageList fullFrame: ((0.5@0 corner: 1.0@hSepFrac) asLayoutFrame topOffset: switchHeight). window setUpdatablePanesFrom: #(messageCategoryList messageList). ^ window! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'StephaneDucasse 8/4/2013 16:54' prior: 45571882! initialize super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt send: #setRefreshedToTrue to: self. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !InspectorWrapper methodsFor: 'private' stamp: 'StephaneDucasse 8/4/2013 16:54'! setRefreshedToTrue "introduced because we should not use weak announcer with on:do:." canBeRefreshed := true! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 46778082! initialize keychain := nil asValueHolder. super initialize.! ! !KeyChainViewer methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 46778294! initializeWidgets self instantiateModels: #( add ButtonModel edit ButtonModel list MultiColumnListModel ok OkToolbar remove ButtonModel ). self initializeAdd. self initializeEdit. self initializeRemove. ok okButton label: 'Close'. list displayBlock: [ :item | self wrapItem: item ]. keychain whenChangedDo: [:kc | add enabled: kc notNil. list resetSelection. self updateTitle. list items: kc bindings associations ]. list whenSelectedItemChanged: [:it | edit enabled: it notNil. remove enabled: it notNil ]. self focusOrder add: list; add: add; add: edit; add: remove; add: ok.! ! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46771530! initialize super initialize. cache := CriticsCache new. checker := SmalllintManifestChecker new. cache checker: checker. cache browser: self. criticModel cache: cache. ! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'StephaneDucasse 8/4/2013 16:42' prior: 33901654! registerToAnnouncements SystemAnnouncer uniqueInstance weak " on: ClassRemoved send: #classRemoved: to: self;" on: ClassModifiedClassDefinition send: #classModified: to: self; " on: MethodAdded send: #methodAdded: to: self;" on: MethodModified send: #methodModified: to: self; on: MethodRemoved send: #methodRemoved: to: self. self window window announcer on: WindowClosed send: #onWindowClosed to: self. ! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 46846331! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !STEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 46830958! initialize super initialize. object := nil asValueHolder! ! !NautilusMCBindings class methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46809855! initialize super initialize. RPackageOrganizer default packages do: [:p | self default mcPackageFor: p ]! ! !NautilusMCBindings methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 46808622! initialize super initialize. bindingsRtoMC := IdentityDictionary new. bindingsMCtoR := IdentityDictionary new. self registerToMCAnnouncements.! ! !WidgetSetter methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 15:46' prior: 46840000! initialize model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer weak on: WidgetBuilt send: #registerEvents to: self.! ! !IntegerEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46864553! initialize super initialize. integer := 0 asValueHolder! ! !DropListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46855547! initialize super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !ColorEditor methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 46829191! initialize super initialize. color := Color black asValueHolder. morph := Morph new color: self color; extent: 25@25; yourself! ! !AbstractApiSetter methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 46840893! initialize method := nil asValueHolder. model := nil asValueHolder. retrievingMethod := nil asValueHolder. isSetting := false. super initialize. self registerEvents! ! !PharoUser methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:49' prior: 46772339! initialize super initialize. avatar := self defaultAvatar. self updateGravatarFor: ''. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !SearchableTree methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 46839210! initialize super initialize. roots := OrderedCollection new asValueHolder! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 46856246! initialize super initialize. item := nil asValueHolder.! ! "Announcements-Core"! "Collections-Sequenceable"! "Gofer-Core"! "KeyChain"! "Manifest-CriticBrowser"! "Monticello"! "Morphic-Base"! "Nautilus"! "Polymorph-Widgets"! "Spec-Builder"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Tools"! "Spec-Widgets"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(7 August 2013 9:29:07 am) Pharo.image priorSource: 14433616! ----STARTUP----an Array(7 August 2013 9:41:16 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 August 2013 9:41:16 am) Pharo-30326.image priorSource: 14477539! ----STARTUP----an Array(8 August 2013 12:10:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/8/2013 12:06' prior: 47988352! commentForCurrentUpdate ^ '11144 Merge Latest NativeBoost with Pharo 3.0 https://pharo.fogbugz.com/f/cases/11144 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/8/2013 12:06'! script119 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.142.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-EstebanLorenzano.1550.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-MarcusDenker.247.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.66.mcz Morphic-Examples-EstebanLorenzano.6.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.508.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-EstebanLorenzano.108.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-EstebanLorenzano.98.mcz Polymorph-Widgets-StephaneDucasse.880.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-MarcusDenker.70.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.368.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-EstebanLorenzano.102.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.108.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.55.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.223.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-MarcusDenker.277.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.893.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.604.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1205.mcz ToolsTest-StephaneDucasse.denker.55.mcz Traits-EstebanLorenzano.554.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/8/2013 12:07'! update30327 "self new update30327" Gofer new smalltalkhubUser: 'Pharo' project: 'NativeBoost'; configuration; load. [ (Smalltalk at: #ConfigurationOfNativeBoost) loadDevelopment ] valueSupplyingAnswer: 'Load' . ScriptLoader new unloadPackageNamed: 'ConfigurationOfNativeBoost'. self withUpdateLog: '11144 Merge Latest NativeBoost with Pharo 3.0 https://pharo.fogbugz.com/f/cases/11144 '. self loadTogether: self script119 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfNativeBoost commentStamp: '' prior: 0! Loading latest stable version: ConfigurationOfNativeBoost loadStable. Loading latest development version: ConfigurationOfNativeBoost loadDevelopment. For loading a user code, use: NBInstaller install. This will install the latest version of NativeBoost. Includes: Core, all platforms, tests and examples. You can use groups to install only necessary parts: "install only core and platforms code" ConfigurationOfNativeBoost project lastVersion load: 'Core-AllPlatforms' ( you could also use Core-Win32 , Core-Unix and Core-Mac for installing code support only for your platform) To load plugin (need VMMaker already loaded), use: NBInstaller installPlugin which is equivalent to: ConfigurationOfNativeBoost project lastVersion load: 'Plugin' ------ MetacelloToolBox updateToLatestPackageVersionsIn: ConfigurationOfNativeBoost description: 'update 2012-1-20' ----- to load a specific version, use (ConfigurationOfNativeBoost project version: '1.8') load ! !ConfigurationOfNativeBoost commentStamp: '' prior: 48043393! Loading latest stable version: ConfigurationOfNativeBoost loadStable. Loading latest development version: ConfigurationOfNativeBoost loadDevelopment. For loading a user code, use: NBInstaller install. This will install the latest version of NativeBoost. Includes: Core, all platforms, tests and examples. You can use groups to install only necessary parts: "install only core and platforms code" ConfigurationOfNativeBoost project lastVersion load: 'Core-AllPlatforms' ( you could also use Core-Win32 , Core-Unix and Core-Mac for installing code support only for your platform) To load plugin (need VMMaker already loaded), use: NBInstaller installPlugin which is equivalent to: ConfigurationOfNativeBoost project lastVersion load: 'Plugin' ------ MetacelloToolBox updateToLatestPackageVersionsIn: ConfigurationOfNativeBoost description: 'update 2012-1-20' ----- to load a specific version, use (ConfigurationOfNativeBoost project version: '1.8') load ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! DevelopmentProcess "DEVELOPMENT Process - load current version: (self project version: #stable) load: 'ALL'. - open new version for development: self createNewDevelopmentVersion - do development and periodically save mcz files and configuration until ready for release self saveModifiedPackagesAndConfiguration: '- fixed a bug' - update the the development version to match mcz file versions self updateToLatestPackageVersions: '- fixed a bug' - save configuration self saveConfiguration: '- checkpoint configuration' RELEASE Process - mark development version as release: self releaseDevelopmentVersion: '- release' " ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:33'! commit: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. self updateConfiguration. self createNewDevelopmentVersion. self saveModifiedPackagesAndConfiguration: commitMessage. (Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: commitMessage. self loadDevelopment. self saveConfiguration: commitMessage.! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! compareVersions "Compare the #stable version to #development version" "self compareVersions" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) compareVersionsIn: self) inspect ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! createNewBaselineVersion "Create a new baseline version based upon the #stable version's baseline. A new baseline should be created if new packages have been added or package dependencies have changed." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewBaselineVersionIn: self description: '' ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! createNewDevelopmentVersion "Create a new development version using the #stable version as model." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewDevelopmentVersionIn: self description: ''! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'CamilloBruni 4/4/2012 18:56'! installPlugin Smalltalk at: #VMMaker ifAbsent: [ self error: 'Thou shall install Cog VMMaker first' ]. ConfigurationOfNativeBoost project lastVersion load: 'Plugin'! ! !ConfigurationOfNativeBoost class methodsFor: 'metacello tool support'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfNativeBoost class methodsFor: 'loading'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'IgorStasenko 12/28/2012 15:14'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project latestVersion: #development) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'IgorStasenko 12/28/2012 15:13'! loadStable "Load the #stable version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadStable" ^(self project latestVersion: #stable) load! ! !ConfigurationOfNativeBoost class methodsFor: 'accessing'! project ^self new project! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! releaseDevelopmentVersion: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) releaseDevelopmentVersionIn: self description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! saveConfiguration: commitMessage "Save mcz file that contains the configuration to it's repository." "self saveConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveConfigurationPackageFor: self name asString description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! saveModifiedPackagesAndConfiguration: commitMessage "Save modified mcz files, update the #development version and then save the configuration." "self saveModifiedPackagesAndConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveModifiedPackagesAndConfigurationIn: self description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 17:42'! updateConfiguration [[ (Smalltalk at: #Gofer) new package: self name; merge ] on: (Smalltalk at: #MCMergeOrLoadWarning ifAbsent: [ nil ]) do: [ :e| e resume: false ] ] on: (Smalltalk at: #MCNoChangesException ifAbsent: [ nil ]) do: [ :e| e resume].! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! updateToLatestPackageVersions: descriptionString "Update the #development version to match currently loaded mcz files." "self updateToLatestPackageVersions: '- fixed a bug'" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: descriptionString) isEmpty ifTrue: [ self inform: 'All specs up to date' ]! ! !ConfigurationOfNativeBoost class methodsFor: 'development support'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'CamilloBruni 8/21/2012 17:24'! baseline10: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; package: 'AsmJit' with: [ spec repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools') ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'CamilloBruni 8/23/2012 17:29'! baseline11: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools') ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'IgorStasenko 9/18/2012 12:54'! baseline12: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools'); postLoadDoIt: #postloadForCore ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'IgorStasenko 1/31/2013 14:57'! baseline13: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.smalltalkhub.com/mc/Pharo/NativeBoost/main'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.smalltalkhub.com/mc/Pharo/AsmJit/main' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools'); postLoadDoIt: #postloadForCore ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'symbolic versions' stamp: 'IgorStasenko 6/27/2013 15:56'! development: spec spec for: #'common' version: '2.2'! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 4/4/2012 18:51'! fileInUrl: anUrl intoChangeset: changesetName ChangeSet newChangesFromStream: (self readUrl: anUrl) named: changesetName ! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 4/4/2012 18:51'! installPrerequisites (CompiledMethodTrailer trailerKinds includes: #NativeCodeTrailer) ifFalse: [ self fileInUrl: 'http://nativeboost.googlecode.com/files/000-NativeCodeTrailers.cs' intoChangeset: 'NativeCodeTrailer' ]. "Make sure an image having this crucial fix " (Object>>#perform:withArguments: ) frameSize > CompiledMethod smallFrameSize ifFalse: [ self fileInUrl: 'http://nativeboost.googlecode.com/files/001-perform-framesize.cs' intoChangeset: 'Perform-framesize-fix' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'post load' stamp: 'GuyHylton 9/12/2012 19:10'! postloadForCore NBFFICallout initialize.! ! !ConfigurationOfNativeBoost methodsFor: 'accessing'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 10/9/2012 19:44'! readUrl: anUrl ^ ZnClient new url: anUrl; streaming: true; get! ! !ConfigurationOfNativeBoost methodsFor: 'symbolic versions' stamp: 'IgorStasenko 12/28/2012 15:02'! stable: spec spec for: #'common' version: '1.8'! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version101: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 19:13'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.13'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-Igor.Stasenko.5'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.32'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.16'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.5'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version102: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 19:13'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.13'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.33'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.17'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version103: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/10/2011 2:41'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.14'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.34'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version104: spec spec for: #common do: [ spec blessing: #development. spec author: 'IgorStasenko'. spec timestamp: '8/10/2011 16:08'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.15'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.36'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version105: spec spec for: #common do: [ spec blessing: #development. spec author: 'IgorStasenko'. spec timestamp: '23/11/2011 10:40'. spec package: 'AsmJit' with: 'AsmJit-HenrikSperreJohansen.18'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.43'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.21'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version106: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'update 2012-1-20'. spec author: 'IgorStasenko'. spec timestamp: '1/20/2012 17:23'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.20'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.48'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.8'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.23'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version107: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Update of 2012-2-09'. spec author: 'IgorStasenko'. spec timestamp: '2012-2-09'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.21'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.50'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.4'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.24'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:38'! version108: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Update of 2012-2-09'. spec author: 'IgorStasenko'. spec timestamp: '2012-2-09'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.21'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.52'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.4'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.24'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:38'! version109: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Restore debugger support due to changes in 1.4 (past version #14402) '. spec author: 'IgorStasenko'. spec timestamp: '2012-3-20'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.35'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.54'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.25'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version10: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 11:49'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.12'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-Igor.Stasenko.5'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.31'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.15'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.5'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:37'! version110: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'added resource manager. some fixes'. spec author: 'IgorStasenko'. spec timestamp: '2012-3-30'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.42'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 4/6/2012 14:15'! version111: spec spec for: #'common' do: [ spec blessing: #release. spec description: 'added resource manager. some fixes'. spec author: 'IgorStasenko'. spec timestamp: '2012-3-30'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.50'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.13'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-sig.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 4/10/2012 18:17'! version112: spec spec for: #'common' do: [ spec blessing: #release. spec description: 'updated to latest asmjit version'. spec author: 'CamilloBruni'. spec timestamp: '4/10/2012 16:50'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.51'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.13'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-sig.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 7/5/2012 09:50'! version121: spec spec for: #common do: [ spec blessing: #release. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.66'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.62'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.14'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.8'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:36'! version122: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-08-21'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.76'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.71'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-CamilloBruni.12'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 10/16/2012 14:51'! version123: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-10-16'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.76'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.80'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.17'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 6/2/2012 15:25'! version12: spec spec for: #common do: [ spec blessing: #release. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.66'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.61'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.14'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.7'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 8/30/2012 18:51'! version13: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-08-23 17:30'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.74'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-CamilloBruni.12'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.31'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'GuyHylton 9/12/2012 19:10'! version14: spec spec for: #common do: [ spec blessing: #development. spec author: 'Igor Stasenko'. spec timestamp: '2012-Sep-03 3:08'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: [ spec file: 'NativeBoost-Core-IgorStasenko.75'; postLoadDoIt: #postloadForCore ]. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.32'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.11'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 10/16/2012 14:54'! version15: spec spec for: #common do: [ spec blessing: #development. spec author: 'Igor Stasenko'. spec timestamp: '2012-Sep-18 12:45'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.10'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.76'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.17'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.12'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'tbn 11/29/2012 08:12'! version16: spec spec for: #common do: [ spec blessing: #release. spec author: 'Camillo Bruni'. spec timestamp: '2012-10-16'. spec project: 'AsmJit' with: '1.1'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.80'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-tbn.28'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'tbn 11/29/2012 08:13'! version17: spec spec for: #common do: [ spec blessing: #stable. spec author: 'Igor Stasenko'. spec timestamp: '2012-11-26'. spec project: 'AsmJit' with: '1.1'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.90'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.38'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.30'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 12/28/2012 15:13'! version18: spec spec for: #common do: [ spec blessing: #stable. spec author: 'Igor Stasenko'. spec timestamp: '2012-12-07'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.94'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.43'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CiprianTeodorov 1/28/2013 21:03'! version19: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'CiprianTeodorov'. spec timestamp: '12/27/2012 14:38'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CiprianTeodorov.106'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-CiprianTeodorov.47'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 5/7/2013 17:57'! version20: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'IgorStasenko'. spec timestamp: '31/01/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CiprianTeodorov.106'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-CiprianTeodorov.47'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'GuillermoPolito 5/31/2013 13:30'! version21: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'CiprianTeodorov'. spec timestamp: '06/02/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-EstebanLorenzano.110'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-GuillermoPolito.19'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.49'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.34'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'EstebanLorenzano 8/8/2013 11:59'! version22: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'code reviewed and ready to be integrated in Pharo 3.0'. spec author: 'IgorStasenko'. spec timestamp: '12/06/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.128'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-EstebanLorenzano.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.63'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-EstebanLorenzano.38'. ]. ! ! "ConfigurationOfNativeBoost"! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! DevelopmentProcess "DEVELOPMENT Process - load current version: (self project version: #stable) load: 'ALL'. - open new version for development: self createNewDevelopmentVersion - do development and periodically save mcz files and configuration until ready for release self saveModifiedPackagesAndConfiguration: '- fixed a bug' - update the the development version to match mcz file versions self updateToLatestPackageVersions: '- fixed a bug' - save configuration self saveConfiguration: '- checkpoint configuration' RELEASE Process - mark development version as release: self releaseDevelopmentVersion: '- release' " ! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:05'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfAsmJit class methodsFor: 'private' stamp: 'CamilloBruni 8/23/2012 16:05'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! commit: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. self updateConfiguration. self createNewDevelopmentVersion. self saveModifiedPackagesAndConfiguration: commitMessage. (Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: commitMessage. self loadDevelopment. self saveConfiguration: commitMessage.! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! compareVersions "Compare the #stable version to #development version" "self compareVersions" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) compareVersionsIn: self) inspect ! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! createNewBaselineVersion "Create a new baseline version based upon the #stable version's baseline. A new baseline should be created if new packages have been added or package dependencies have changed." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewBaselineVersionIn: self description: '' ! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! createNewDevelopmentVersion "Create a new development version using the #stable version as model." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewDevelopmentVersionIn: self description: ''! ! !ConfigurationOfAsmJit class methodsFor: 'private' stamp: 'CamilloBruni 8/23/2012 16:05'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfAsmJit class methodsFor: 'private' stamp: 'CamilloBruni 8/23/2012 16:05'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfAsmJit class methodsFor: 'metacello tool support' stamp: 'CamilloBruni 8/23/2012 16:05'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfAsmJit class methodsFor: 'loading' stamp: 'CamilloBruni 8/23/2012 16:05'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfAsmJit class methodsFor: 'loading' stamp: 'CamilloBruni 8/23/2012 16:05'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfAsmJit class methodsFor: 'loading' stamp: 'CamilloBruni 8/23/2012 16:05'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfAsmJit class methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2012 16:05'! project ^self new project! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! releaseDevelopmentVersion: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) releaseDevelopmentVersionIn: self description: commitMessage! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! saveConfiguration: commitMessage "Save mcz file that contains the configuration to it's repository." "self saveConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveConfigurationPackageFor: self name asString description: commitMessage! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! saveModifiedPackagesAndConfiguration: commitMessage "Save modified mcz files, update the #development version and then save the configuration." "self saveModifiedPackagesAndConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveModifiedPackagesAndConfigurationIn: self description: commitMessage! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! updateConfiguration [[ (Smalltalk at: #Gofer) new package: self name; merge ] on: (Smalltalk at: #MCMergeOrLoadWarning ifAbsent: [ nil ]) do: [ :e| e resume: false ] ] on: (Smalltalk at: #MCNoChangesException ifAbsent: [ nil ]) do: [ :e| e resume].! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:07'! updateToLatestPackageVersions: descriptionString "Update the #development version to match currently loaded mcz files." "self updateToLatestPackageVersions: '- fixed a bug'" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: descriptionString) isEmpty ifTrue: [ self inform: 'All specs up to date' ]! ! !ConfigurationOfAsmJit class methodsFor: 'development support' stamp: 'CamilloBruni 8/23/2012 16:05'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfAsmJit methodsFor: 'baseline' stamp: 'CamilloBruni 7/16/2013 17:58'! baseline10: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.smalltalkhub.com/mc/Pharo/AsmJit/main'; package: 'AsmJit-Core'; package: 'AsmJit-Compiler' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Extension' with: [ spec requires: #( 'AsmJit-Operands')]; package: 'AsmJit-Instructions' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Operands' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Reference' with: [ spec requires: #('AsmJit-x86' 'Soup' 'OSProcess')]; package: 'AsmJit-StackManagement' with: [ spec requires: #('AsmJit-Instructions')]; package: 'AsmJit-Tests' with: [ spec requires: #('AsmJit-x86')]; package: 'AsmJit-x86' with: [ spec requires: #( 'AsmJit-Extension' 'AsmJit-Instructions' 'AsmJit-Operands' 'AsmJit-StackManagement')]. self soup: spec; osProcess: spec. spec group: 'default' with: #('x86' 'Test'); group: 'x86' with: #('AsmJit-x86'); "To make the CI service s bit happier" group: 'ARM' with: #(); group: 'Test' with: #('x86' 'AsmJit-Tests'); group: 'Dev' with: #('Test' 'AsmJit-Reference')].! ! !ConfigurationOfAsmJit methodsFor: 'baseline' stamp: 'CamilloBruni 7/16/2013 17:58'! baseline12: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.smalltalkhub.com/mc/Pharo/AsmJit/main'; package: 'AsmJit-Core'; package: 'AsmJit-Compiler' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Extension' with: [ spec requires: #( 'AsmJit-Operands')]; package: 'AsmJit-Instructions' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Operands' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Reference' with: [ spec requires: #('AsmJit-x86' 'Soup' 'OSProcess')]; package: 'AsmJit-StackManagement' with: [ spec requires: #('AsmJit-Instructions')]; package: 'AsmJit-Tests' with: [ spec requires: #('AsmJit-x86')]; package: 'AsmJit-x86' with: [ spec requires: #( 'AsmJit-Extension' 'AsmJit-Instructions' 'AsmJit-Operands' 'AsmJit-StackManagement')]. self soup: spec; osProcess: spec. spec group: 'default' with: #('x86' 'Test'); group: 'x86' with: #('AsmJit-x86'); group: 'Test' with: #('AsmJit-Tests'); group: 'Dev' with: #('Test' 'AsmJit-Reference')]. spec for: #'pharo1.4.x' do: [ spec package: 'AsmJit-Legacy'; package: 'AsmJit-Extension' with: [ spec requires: 'AsmJit-Legacy' ]]! ! !ConfigurationOfAsmJit methodsFor: 'baseline' stamp: 'CamilloBruni 7/16/2013 18:07'! baselineDEV: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.smalltalkhub.com/mc/Pharo/AsmJit/main'; package: 'AsmJit-Core'; package: 'AsmJit-Compiler' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Extension' with: [ spec requires: #( 'AsmJit-Operands')]; package: 'AsmJit-Instructions' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Operands' with: [ spec requires: #('AsmJit-Core')]; package: 'AsmJit-Reference' with: [ spec requires: #('AsmJit-x86' 'Soup' 'OSProcess')]; package: 'AsmJit-StackManagement' with: [ spec requires: #('AsmJit-Instructions')]; package: 'AsmJit-Tests' with: [ spec requires: #('AsmJit-x86')]; package: 'AsmJit-x86' with: [ spec requires: #( 'AsmJit-Extension' 'AsmJit-Instructions' 'AsmJit-Operands' 'AsmJit-StackManagement')]; package: 'AsmJit-ARM' with: [ spec requires: #( 'AsmJit-Operands' )]; package: 'AsmJit-VirtualCPU' with: [ spec requires: #('AsmJit-x86' 'Pinocchio') ]. self soup: spec; osProcess: spec; pinocchio: spec. spec project: 'Soup' with: '1.2'. spec group: 'default' with: #('x86' 'Test'); group: 'x86' with: #('AsmJit-x86'); group: 'ARM' with: #('AsmJit-ARM'); group: 'Core' with: #('x86' 'ARM'); group: 'VirtualCPU' with: #('AsmJit-VirtualCPU'); group: 'Test' with: #('AsmJit-Tests'); group: 'Dev' with: #('Test' 'AsmJit-Reference') ].! ! !ConfigurationOfAsmJit methodsFor: 'symbolic versions' stamp: 'CamilloBruni 6/17/2013 15:21'! bleedingEdge: spec spec for: #'common' version: 'dev-baseline'. ! ! !ConfigurationOfAsmJit methodsFor: 'symbolic versions' stamp: 'CamilloBruni 6/17/2013 15:21'! development: spec spec for: #'common' version: 'dev'. ! ! !ConfigurationOfAsmJit methodsFor: 'external projects' stamp: 'CamilloBruni 7/16/2013 18:08'! osProcess: spec spec project: 'OSProcess' with: [ spec repository: 'http://squeaksource.com/MetacelloRepository'; className: 'ConfigurationOfOSProcess'; versionString: #stable ].! ! !ConfigurationOfAsmJit methodsFor: 'external projects' stamp: 'CamilloBruni 7/16/2013 17:57'! pinocchio: spec spec project: 'Pinocchio' with: [ spec repository: 'http://smalltalkhub.com/mc/mate/p4/main'; className: 'ConfigurationOfPinocchio'; versionString: #'development' ].! ! !ConfigurationOfAsmJit methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2012 16:05'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfAsmJit methodsFor: 'external projects' stamp: 'CamilloBruni 7/16/2013 17:57'! soup: spec spec project: 'Soup' with: [ spec className: 'ConfigurationOfSoup'; repository: 'http://squeaksource.com/Soup' ].! ! !ConfigurationOfAsmJit methodsFor: 'symbolic versions' stamp: 'GuillermoPolito 6/17/2013 14:27'! stable: spec spec for: #'common' version: '1.2'. ! ! !ConfigurationOfAsmJit methodsFor: 'versions' stamp: 'CamilloBruni 5/21/2013 17:13'! version10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'CamilloBruni'. spec timestamp: '8/23/2012 17:15'. spec project: 'Soup' with: '1.2'. spec package: 'AsmJit-Compiler' with: 'AsmJit-Compiler-CamilloBruni.1'; package: 'AsmJit-Core' with: 'AsmJit-Core-CamilloBruni.2'; package: 'AsmJit-Extension' with: 'AsmJit-Extension-IgorStasenko.3'; package: 'AsmJit-Instructions' with: 'AsmJit-Instructions-CamilloBruni.1'; package: 'AsmJit-Operands' with: 'AsmJit-Operands-CamilloBruni.1'; package: 'AsmJit-Reference' with: 'AsmJit-Reference-CamilloBruni.1'; package: 'AsmJit-StackManagement' with: 'AsmJit-StackManagement-CamilloBruni.1'; package: 'AsmJit-Tests' with: 'AsmJit-Tests-CamilloBruni.1'; package: 'AsmJit-x86' with: 'AsmJit-x86-CamilloBruni.2'. ]. ! ! !ConfigurationOfAsmJit methodsFor: 'versions' stamp: 'CamilloBruni 5/21/2013 17:13'! version11: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'CamilloBruni'. spec timestamp: '8/23/2012 17:15'. spec project: 'Soup' with: '1.2'. spec package: 'AsmJit-Compiler' with: 'AsmJit-Compiler-CamilloBruni.1'; package: 'AsmJit-Core' with: 'AsmJit-Core-CamilloBruni.2'; package: 'AsmJit-Extension' with: 'AsmJit-Extension-IgorStasenko.3'; package: 'AsmJit-Instructions' with: 'AsmJit-Instructions-CamilloBruni.3'; package: 'AsmJit-Operands' with: 'AsmJit-Operands-CamilloBruni.3'; package: 'AsmJit-Reference' with: 'AsmJit-Reference-CamilloBruni.1'; package: 'AsmJit-StackManagement' with: 'AsmJit-StackManagement-CamilloBruni.2'; package: 'AsmJit-Tests' with: 'AsmJit-Tests-CamilloBruni.1'; package: 'AsmJit-x86' with: 'AsmJit-x86-IgorStasenko.3'. ]. ! ! !ConfigurationOfAsmJit methodsFor: 'versions' stamp: 'IgorStasenko 8/7/2013 19:15'! version12: spec "Please note, this version is used by NativeBoost (versions 1.8 + ). So if you change it, please make sure all NB tests are passed and green, before committing. For further development, which may not be compatible with NB yet, please create a new version (1.3) or use dev version. Igor Stasenko " spec for: #'common' do: [ spec blessing: #'stable'. spec description: ''. spec author: 'IgorStasenko'. spec timestamp: '23/12/2012 14:37'. spec project: 'Soup' with: '1.2'. spec package: 'AsmJit-Compiler' with: 'AsmJit-Compiler-CamilloBruni.1'; package: 'AsmJit-Core' with: 'AsmJit-Core-MartinMcClure.3'; package: 'AsmJit-Extension' with: 'AsmJit-Extension-MartinMcClure.6'; package: 'AsmJit-Instructions' with: 'AsmJit-Instructions-MartinMcClure.6'; package: 'AsmJit-Operands' with: 'AsmJit-Operands-CamilloBruni.11'; package: 'AsmJit-Reference' with: 'AsmJit-Reference-CamilloBruni.2'; package: 'AsmJit-StackManagement' with: 'AsmJit-StackManagement-IgorStasenko.5'; package: 'AsmJit-Tests' with: 'AsmJit-Tests-MartinMcClure.13'; package: 'AsmJit-x86' with: 'AsmJit-x86-IgorStasenko.25' ]. spec for: #'pharo1.4.x' do: [ spec package: 'AsmJit-Legacy' with: 'AsmJit-Legacy-IgorStasenko.2'. ]! ! !ConfigurationOfAsmJit methodsFor: 'versions' stamp: 'CamilloBruni 7/16/2013 18:08'! versionDEV: spec spec for: #'common' do: [ spec blessing: #'development'. spec author: 'GuillermoPolito'. spec timestamp: '2013-06-17T14:29:35.695+02:00'. "Authors: CamilloBruni ClementBera DamienPollet GuillermoPolito IgorStasenko" spec package: 'AsmJit-ARM' with: 'AsmJit-ARM-DamienPollet.23'; package: 'AsmJit-Compiler' with: 'AsmJit-Compiler-CamilloBruni.1'; package: 'AsmJit-Core' with: 'AsmJit-Core-DamienPollet.6'; package: 'AsmJit-Extension' with: 'AsmJit-Extension-CamilloBruni.8'; package: 'AsmJit-Instructions' with: 'AsmJit-Instructions-CamilloBruni.22'; package: 'AsmJit-Operands' with: 'AsmJit-Operands-CamilloBruni.46'; package: 'AsmJit-Reference' with: 'AsmJit-Reference-CamilloBruni.2'; package: 'AsmJit-StackManagement' with: 'AsmJit-StackManagement-CamilloBruni.5'; package: 'AsmJit-Tests' with: 'AsmJit-Tests-DamienPollet.50'; package: 'AsmJit-VirtualCPU' with: 'AsmJit-VirtualCPU-CamilloBruni.36'; package: 'AsmJit-x86' with: 'AsmJit-x86-CamilloBruni.84' ].! ! "ConfigurationOfAsmJit"! !AJConstants class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 15:13' prior: 16793565! initialize "AJConstants initialize" "Operand is none, used only internally." OpNONE := 0. "Operand is register" OpREG := 1. "Operand is memory" OpMem := 2. "Operand is immediate." OpImm := 3. "Operand is label. " OpLabel := 4. RegTypeMask := 16rF0. RegCodeMask := 16r0F. RegRequiresRexMask := 16r100. RegProhibitsRexMask := 16r200. RegHighByteMask := 2r111100. "1 byte size." SizeByte := 1. "2 bytes size." SizeWord := 2. "4 bytes size." SizeDWord := 4. "8 bytes size." SizeQWord := 8. "10 bytes size." SizeTWord := 10. "16 bytes size." SizeDQWord := 16. "ID for AX/EAX/RAX registers." RIDEAX := 0. "ID for CX/ECX/RCX registers." RIDECX := 1. "ID for DX/EDX/RDX registers." RIDEDX := 2. "ID for BX/EBX/RBX registers." RIDEBX := 3. "ID for SP/ESP/RSP registers." RIDESP := 4. "ID for BP/EBP/RBP registers." RIDEBP := 5. "ID for SI/ESI/RSI registers." RIDESI := 6. "ID for DI/EDI/RDI registers." RIDEDI := 7. "8 bit general purpose register type." RegGPB := 16r00. "16 bit general purpose register type." RegGPW := 16r10. "32 bit general purpose register type." RegGPD := 16r20. "64 bit general purpose register type. " RegGPQ := 16r30. "X87 (FPU) register type. " RegX87 := 16r50. "64 bit mmx register type." RegMM := 16r60. "128 bit sse register type." RegXMM := 16r70. "Segment override prefixes." "No segment override prefix." SegmentNONE := 0. "Use 'cs' segment override prefix." SegmentCS := 1. "Use 'ss' segment override prefix." SegmentSS := 2. "Use 'ds' segment override prefix." SegmentDS := 3. "Use 'es' segment override prefix." SegmentES := 4. "Use 'fs' segment override prefix." SegmentFS := 5. "Use 'gs' segment override prefix." SegmentGS := 6. self initializePrefetchHints. self initializeConditionCodes. self initOpCodes. ! ! "AsmJit-Core"! !AJInstruction methodsFor: 'helpers' stamp: 'MartinMcClure 1/27/2013 17:40'! checkOperandsForConflict "Subclasses may signal an error here."! ! !AJInstruction methodsFor: 'accessing' stamp: 'MartinMcClure 2/9/2013 14:30' prior: 16807921! operands: anObject operands := anObject! ! !AJInstruction methodsFor: 'printing' stamp: 'MartinMcClure 11/26/2012 18:54' prior: 16811678! printSelfOn: aStream self printAnnotationOn: aStream. aStream nextPutAll: (self name ). "padRightTo: 4)." self printOperandsOn: aStream. self printMachineCodeOn: aStream! ! !AJRoutinePrologue methodsFor: 'emitting code'! emitCode: asm machineCode := #[]! ! "AsmJit-Instructions"! !AJOperand commentStamp: '' prior: 0! I am a generic operand used in the ASMJit assembler. I define the interface for setting the final instruction code and annotations.! !AJBaseReg commentStamp: 'MartinMcClure 1/27/2013 09:59' prior: 0! AJBaseReg -- abstract superclass of all register operands. Instance Variables: size Width in bytes (1, 2, 4, 8...) code Non-negative integer, encoding varies with subclass. For AJx86GPRegisters, ten bits: xyttttnnnn where nnnn is the register number 0-15, tttt is the "type", which encodes size as a power of 2. Higher types are used in other subclasses. If y is 1, REX prefix is required to encode this register. If x is 1, this register cannot be used when any REX prefix is present in the instruction. name Name by which this register may be referenced in instructions! !AJRegister commentStamp: '' prior: 0! I am an abstract superclass for the standard x86 registers.! !AJImmediate commentStamp: '' prior: 42089584! I am an immediate (constant integer) operand used by the assembler. Example: "create an immediate from an integer" 1 asImm. "implicitely use an immediate in an assembly instrution" asm := AJx64Assembler new. asm add: 1 to: asm RAX. ! !AJMem commentStamp: '' prior: 42089825! I am memory operand used in assembly instructions. I can be created from an immedate or a register. Memory operands are used to read values indirectly from memory using certain offsets. Example: asm := AJx86Assembler new. "create an memory operand on the address 1234" 1234 asImm ptr "create a simple memory operand with RAX as base" asm RAX ptr. "the same with a 8 byte offset" asm RAX ptr + 8! !AJOperand commentStamp: '' prior: 48110774! I am a generic operand used in the ASMJit assembler. I define the interface for setting the final instruction code and annotations.! !AJBaseReg commentStamp: 'MartinMcClure 1/27/2013 09:59' prior: 48110974! AJBaseReg -- abstract superclass of all register operands. Instance Variables: size Width in bytes (1, 2, 4, 8...) code Non-negative integer, encoding varies with subclass. For AJx86GPRegisters, ten bits: xyttttnnnn where nnnn is the register number 0-15, tttt is the "type", which encodes size as a power of 2. Higher types are used in other subclasses. If y is 1, REX prefix is required to encode this register. If x is 1, this register cannot be used when any REX prefix is present in the instruction. name Name by which this register may be referenced in instructions! !AJBaseReg methodsFor: 'accessing' stamp: 'CamilloBruni 10/17/2012 15:54'! annotation: anObject "registers gereally are used as single instances, hence putting an annotation on the default register will change the annotation for all the users. To avoid that, the receiver is copied first" ^ self copy basicAnnotation: anObject; yourself! ! !AJBaseReg methodsFor: 'private' stamp: 'CamilloBruni 10/17/2012 15:54'! basicAnnotation: anObject "private setter" annotation := anObject! ! !AJBaseReg methodsFor: 'initialize-release' stamp: 'MartinMcClure 1/27/2013 09:35' prior: 16785876! initializeWithCode: aRegisterCode name: aSymbol super initialize. self code: aRegisterCode. "Also sets size" name := aSymbol! ! !AJBaseReg methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:34' prior: 16786403! isX86 self subclassResponsibility! ! !AJBaseReg methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 16:04'! prohibitsRex "Answer true if this register cannot be used in any instruction that has a REX prefix. Of the general-purpose registers, this is true only of SPL, BPL, SIL, DIL." ^ (code & RegProhibitsRexMask) ~~ 0! ! !AJBaseReg methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 16:04'! requiresRex "Answer true if use of this register requires that the instruction have a REX prefix. This can be because the register cannot be accessed except with REX (high bank or 64-only low byte) or because the register is 64-bits wide" ^(code & RegRequiresRexMask) ~~ 0! ! !AJRegister commentStamp: '' prior: 48111659! I am an abstract superclass for the standard x86 registers.! !AJRegister methodsFor: 'testing' stamp: 'MartinMcClure 1/30/2013 20:52'! isX86 "Return whether this register is available in the standard x86 instruction set" ^ self requiresRex not & (self index < 8)! ! !AJImmediate commentStamp: '' prior: 48111779! I am an immediate (constant integer) operand used by the assembler. Example: "create an immediate from an integer" 1 asImm. "implicitely use an immediate in an assembly instrution" asm := AJx64Assembler new. asm add: 1 to: asm RAX. ! !AJImmediate methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 17:49'! prohibitsRex "Answer true if use of this operand requires that the instruction *not* have a REX prefix." ^ false! ! !AJImmediate methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:53'! requiresRex "Answer true if use of this operand requires that the instruction have a REX prefix." ^ false! ! !AJMem commentStamp: '' prior: 48112073! I am memory operand used in assembly instructions. I can be created from an immedate or a register. Memory operands are used to read values indirectly from memory using certain offsets. Example: asm := AJx86Assembler new. "create an memory operand on the address 1234" 1234 asImm ptr "create a simple memory operand with RAX as base" asm RAX ptr. "the same with a 8 byte offset" asm RAX ptr + 8! !AJMem methodsFor: 'emitting' stamp: 'MartinMcClure 1/4/2013 22:22' prior: 16822426! emitModRM: emitter code: rCode immSize: immSize "Receiver is memory location. rCode is a register number" "[base + displacement]" (self hasBase and: [ self hasIndex not ]) ifTrue: [ ^ self emitBaseDisplacementModRM: emitter code: rCode ]. "[base + index * scale + displacement]" (self hasBase and: [ self hasIndex ]) ifTrue: [ ^ self emitScaledBaseDisplacementModRM: emitter code: rCode ]. " Address | 32-bit mode | 64-bit mode ------------------------------+-------------+--------------- [displacement] | ABSOLUTE | RELATIVE (RIP) [index * scale + displacemnt] | ABSOLUTE | ABSOLUTE (ZERO EXTENDED) In 32 bit mode is used absolute addressing model. In 64 bit mode is used relative addressing model together with absolute addressing one. The main problem is that if the instruction contains a SIB byte then relative addressing (RIP) is not possible. " emitter is32BitMode ifTrue: [ ^ self emit32BitAbsoluteDisplacementModRM: emitter code: rCode ]. emitter is64BitMode ifTrue: [ self shouldBeImplemented ]. self invalidInstruction! ! !AJMem methodsFor: 'testing' stamp: 'MartinMcClure 1/4/2013 22:14'! hasUpperBankIndex "True iff I have an index register, and it is one of r8-r15" ^ self hasIndex and: [ self index isUpperBank ]! ! !AJMem methodsFor: 'printing' stamp: 'MartinMcClure 1/25/2013 22:21' prior: 16824362! printOn: aStream self printAnnotationOn: aStream. aStream nextPutAll: 'mem['. base ifNotNil: [ base printAsMemBaseOn: aStream. (index isNil and: [ displacement isNil ]) ifFalse: [ aStream nextPutAll: ' + ' ] ]. index ifNotNil: [ aStream nextPutAll: index registerName. self printScaleOn: aStream. displacement ifNotNil: [ aStream nextPutAll: ' + ' ] ]. displacement ifNotNil: [ aStream print: displacement ]. aStream nextPut: $]! ! !AJMem methodsFor: 'printing' stamp: 'MartinMcClure 1/25/2013 22:22'! printScaleOn: aStream aStream nextPutAll: ' * '. (2 raisedToInteger: shift) printOn: aStream! ! !AJMem methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 17:49'! prohibitsRex "Answer true if use of this operand requires that the instruction *not* have a REX prefix." ^ false! ! !AJMem methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 16:16'! requiresRex "Answer true if use of this operand requires that the instruction have a REX prefix. For a memory reference, this is true if width of the transfer is 64, or if either the base or index register is in the upper bank -- the use of a 64-bit base or index register is not enough by itself." ^ self is64 or: [ (self hasBase and: [ base isUpperBank ]) or: [ self hasIndex and: [ index isUpperBank ] ] ]! ! !AJMem methodsFor: 'accessing' stamp: 'MartinMcClure 1/3/2013 21:15' prior: 16819847! scale: aScale "a valid scale values is 1 , 2 , 4 and 8" aScale = 1 ifTrue: [ shift := 0. ^ self ]. aScale = 2 ifTrue: [ shift := 1. ^ self ]. aScale = 4 ifTrue: [ shift := 2. ^ self ]. aScale = 8 ifTrue: [ shift := 3. ^ self ]. self error: 'invalid scale value'! ! !AJMem methodsFor: 'accessing' stamp: 'MartinMcClure 1/27/2013 16:23' prior: 16820608! size ^ size! ! !AJOperand methodsFor: 'testing' stamp: 'MartinMcClure 1/4/2013 22:15'! hasUpperBankIndex "True iff I have an index register, and it is one of r8-r15" ^ false "Only can be true for memory references."! ! !AJOperand methodsFor: 'printing' stamp: 'CamilloBruni 10/17/2012 15:57' prior: 16827608! printAsOperandOn: aStream self printAnnotationOn: aStream. ^ self printOn: aStream ! ! !AJOperand methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 17:48'! prohibitsRex "Answer true if use of this operand requires that the instruction *not* have a REX prefix." self subclassResponsibility! ! !AJOperand methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:54'! requiresRex "Answer true if use of this operand requires that the instruction have a REX prefix." self subclassResponsibility! ! "AsmJit-Operands"! !AJRoutineStackManager methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/7/2013 19:06' prior: 16834927! reserveTemp: anAJReserveTemp self stackFrameCheck. temps := temps + 1. maxTemps := maxTemps max: temps . anAJReserveTemp operand: (assembler stackFrameValueAtOffset: extraStackBytes + (temps * assembler wordSize )).! ! "AsmJit-StackManagement"! !AJMMRegister commentStamp: '' prior: 0! I am register used for the MMX integer instructions on IA-32 processors. MMX registers are 64Bit wide, depending on the instructions used the register is used either as 1 x 64bit value, 2 x 32bit values, 4 x 16bit values or 8 x 8bit values. Note that the MMX register overlap with the floating point register and only use the lower 64bits of the 80bits FPU registers.! !AJx87Register commentStamp: '' prior: 42091947! I am an x87 Floating Point register (ST0 - ST7) used in the FPU stack. The lower 64bit of the floating point ST registers are shared with the MMX registers.! !AJxMMRegister commentStamp: '' prior: 0! I am a register used by the SSE (Streaming SIMD Extensions) for the x86 instruction set. The independent XMM registers are 128bit wide and do not overlap with any other existing registers. Depending on the instructions used the XMM registers represent different data types: SSE: 4 x 32bit single precision floats SSE2: 2 x 64bit double prexision floats 2 x 64bit integers 4 x 32bit integers 8 x 16bit short integers 16 x 8bit bytes/characters! !AJx86Registers commentStamp: '' prior: 42091868! I am a SHaredPool which initializes all the registers needed by the Assmbler.! !AJx86Assembler methodsFor: 'instruction list' stamp: 'IgorStasenko 8/7/2013 19:02' prior: 16875732! newInstruction: name description: description operands: operands "check if name is jump " description isJump ifTrue: [ ^ self newJumpInstruction: name description: description operands: operands ]. ^ self newInstruction name: name; description: description; operands: operands "Cannot check that at construction stage. Some operands may not be resolved yet (as AJReserveTemp) checkOperandsForConflict "! ! !AJx86Assembler methodsFor: 'instruction list' stamp: 'MartinMcClure 2/9/2013 14:29' prior: 16876114! newJumpInstruction: name description: description operands: operands | jumpInstruction destination | jumpInstruction := self newJumpInstruction name: name; description: description. operands size ~= 1 ifTrue: [ Error signal: 'Jump instruction only takes one argument!!' ]. destination := operands first. destination isString ifTrue: [ ^ jumpInstruction label: (self labelNamed: destination) ]. destination isLabel ifTrue: [ ^ jumpInstruction label: destination ]. ^ self newInstruction name: name; description: description; operands: operands; checkOperandsForConflict! ! !AJx86Assembler methodsFor: 'stack management' stamp: 'MartinMcClure 2/9/2013 14:25'! stackFrameValueAtOffset: offset ^ EBP ptr32 - offset! ! !AJx86Assembler methodsFor: 'register' stamp: 'CamilloBruni 1/10/2013 18:58' prior: 17053752! stackPointer ^ self is32 ifTrue: [ ESP ] ifFalse: [ RSP ]! ! !AJx86Assembler methodsFor: 'instructions generated' stamp: 'MartinMcClure 12/15/2012 13:37'! syscall "SYSCALL saves the RIP of the instruction following SYSCALL to RCX and loads a new RIP from the IA32_LSTAR (64-bit mode). Upon return, SYSRET copies the value saved in RCX to the RIP. SYSCALL saves RFLAGS (lower 32 bit only) in R11. It then masks RFLAGS with an OS-defined value using the IA32_FMASK (MSR C000_0084). The actual mask value used by the OS is the complement of the value written to the IA32_FMASK MSR. None of the bits in RFLAGS are automatically cleared (except for RF). SYSRET restores RFLAGS from R11 (the lower 32 bits only). Software should not alter the CS or SS descriptors in a manner that violates the following assumptions made by SYSCALL/SYSRET: * The CS and SS base and limit remain the same for all processes, including the operating system (the base is 0H and the limit is 0FFFFFFFFH). * The CS of the SYSCALL target has a privilege level of 0. * The CS of the SYSRET target has a privilege level of 3. SYSCALL/SYSRET do not check for violations of these assumptions. Operation IF (CS.L ~= 1 ) or (IA32_EFER.LMA ~= 1) or (IA32_EFER.SCE ~= 1) (* Not in 64-Bit Mode or SYSCALL/SYSRET not enabled in IA32_EFER *) THEN #UD; FI; RCX := RIP; RIP := LSTAR_MSR; R11 := EFLAGS; EFLAGS := (EFLAGS MASKED BY IA32_FMASK); CPL := 0; CS(SEL) := IA32_STAR_MSR[47:32]; CS(DPL) := 0; CS(BASE) := 0; CS(LIMIT) := 0xFFFFF; CS(GRANULAR) := 1; SS(SEL) := IA32_STAR_MSR[47:32] + 8; SS(DPL) := 0; SS(BASE) := 0; SS(LIMIT) := 0xFFFFF; SS(GRANULAR) := 1; SS(LIMIT) := 0xFFFFF; SS(GRANULAR) := 1; " ^ self addInstruction: #syscall operands: #()! ! !AJx86InstructionDescription class methodsFor: 'initialization' stamp: 'MartinMcClure 12/15/2012 13:35' prior: 17096531! instructionData ^ #( (#adc #alu 0 0 "R" 2 "C1" 16r00000010 "C2" 16r00000080 ) (#add #alu 0 0 "R" 0 0 "C2" 16r00000080 ) (#addpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F58 0 ) (#addps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F58 0 ) (#addsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F58 0 ) (#addss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F58 0 ) (#addsubpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000FD0 0 ) (#addsubps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000FD0 0 ) (#amdprefetch #mem "op1" 2r1000000 0 "R" 0 "C1" 16r00000F0D 0 ) (#amdprefetchw #mem "op1" 2r1000000 0 "R" 1 "C1" 16r00000F0D 0 ) (#and #alu 0 0 "R" 4 "C1" 16r00000020 "C2" 16r00000080 ) (#andnpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F55 0 ) (#andnps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F55 0 ) (#andpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F54 0 ) (#andps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F54 0 ) (#blendpd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A0D 0 ) (#blendps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A0C 0 ) (#blendvpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3815 0 ) (#blendvps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3814 0 ) (#bsf #rrm 0 0 "R" 0 "C1" 16r00000FBC 0 ) (#bsr #rrm 0 0 "R" 0 "C1" 16r00000FBD 0 ) (#bswap #bswap 0 0 "R" 0 0 0 ) (#bt #bt "op1" 2r1001110 "op2" 2r10001110 "R" 4 "C1" 16r00000FA3 "C2" 16r00000FBA ) (#btc #bt "op1" 2r1001110 "op2" 2r10001110 "R" 7 "C1" 16r00000FBB "C2" 16r00000FBA ) (#btr #bt "op1" 2r1001110 "op2" 2r10001110 "R" 6 "C1" 16r00000FB3 "C2" 16r00000FBA ) (#bts #bt "op1" 2r1001110 "op2" 2r10001110 "R" 5 "C1" 16r00000FAB "C2" 16r00000FBA ) (#call #call 0 0 "R" 0 0 0 ) (#clc #emit 0 0 "R" 0 "C1" 16r000000F8 0 ) (#cld #emit 0 0 "R" 0 "C1" 16r000000FC 0 ) (#clflush #mem "op1" 2r1000000 0 "R" 7 "C1" 16r00000FAE 0 ) (#cmc #emit 0 0 "R" 0 "C1" 16r000000F5 0 ) (#cmova #rrm 0 0 "R" 0 "C1" 16r00000F47 0 ) (#cmovae #rrm 0 0 "R" 0 "C1" 16r00000F43 0 ) (#cmovb #rrm 0 0 "R" 0 "C1" 16r00000F42 0 ) (#cmovbe #rrm 0 0 "R" 0 "C1" 16r00000F46 0 ) (#cmovc #rrm 0 0 "R" 0 "C1" 16r00000F42 0 ) (#cmove #rrm 0 0 "R" 0 "C1" 16r00000F44 0 ) (#cmovg #rrm 0 0 "R" 0 "C1" 16r00000F4F 0 ) (#cmovge #rrm 0 0 "R" 0 "C1" 16r00000F4D 0 ) (#cmovl #rrm 0 0 "R" 0 "C1" 16r00000F4C 0 ) (#cmovle #rrm 0 0 "R" 0 "C1" 16r00000F4E 0 ) (#cmovna #rrm 0 0 "R" 0 "C1" 16r00000F46 0 ) (#cmovnae #rrm 0 0 "R" 0 "C1" 16r00000F42 0 ) (#cmovnb #rrm 0 0 "R" 0 "C1" 16r00000F43 0 ) (#cmovnbe #rrm 0 0 "R" 0 "C1" 16r00000F47 0 ) (#cmovnc #rrm 0 0 "R" 0 "C1" 16r00000F43 0 ) (#cmovne #rrm 0 0 "R" 0 "C1" 16r00000F45 0 ) (#cmovng #rrm 0 0 "R" 0 "C1" 16r00000F4E 0 ) (#cmovnge #rrm 0 0 "R" 0 "C1" 16r00000F4C 0 ) (#cmovnl #rrm 0 0 "R" 0 "C1" 16r00000F4D 0 ) (#cmovnle #rrm 0 0 "R" 0 "C1" 16r00000F4F 0 ) (#cmovno #rrm 0 0 "R" 0 "C1" 16r00000F41 0 ) (#cmovnp #rrm 0 0 "R" 0 "C1" 16r00000F4B 0 ) (#cmovns #rrm 0 0 "R" 0 "C1" 16r00000F49 0 ) (#cmovnz #rrm 0 0 "R" 0 "C1" 16r00000F45 0 ) (#cmovo #rrm 0 0 "R" 0 "C1" 16r00000F40 0 ) (#cmovp #rrm 0 0 "R" 0 "C1" 16r00000F4A 0 ) (#cmovpe #rrm 0 0 "R" 0 "C1" 16r00000F4A 0 ) (#cmovpo #rrm 0 0 "R" 0 "C1" 16r00000F4B 0 ) (#cmovs #rrm 0 0 "R" 0 "C1" 16r00000F48 0 ) (#cmovz #rrm 0 0 "R" 0 "C1" 16r00000F44 0 ) (#cmp #alu 0 0 "R" 7 "C1" 16r00000038 "C2" 16r00000080 ) (#cmppd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000FC2 0 ) (#cmpps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000FC2 0 ) (#cmpsd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000FC2 0 ) (#cmpss #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000FC2 0 ) (#cmpxchg #rmr 0 0 "R" 0 "C1" 16r00000FB0 0 ) (#cmpxchg16b #mem "op1" 2r1000000 0 "R" 1 "C1" 16r00000FC7 "C2" 16r00000001 ) (#cmpxchg8b #mem "op1" 2r1000000 0 "R" 1 "C1" 16r00000FC7 0 ) (#comisd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F2F 0 ) (#comiss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F2F 0 ) (#cpuid #emit 0 0 "R" 0 "C1" 16r00000FA2 0 ) (#crc32 #crc32 0 0 "R" 0 "C1" 16rF20F38F0 0 ) (#cvtdq2pd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000FE6 0 ) (#cvtdq2ps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5B 0 ) (#cvtpd2dq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000FE6 0 ) (#cvtpd2pi #mmurmi "op1" 2r10000 "op2" 2r1100000 "R" 0 "C1" 16r66000F2D 0 ) (#cvtpd2ps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5A 0 ) (#cvtpi2pd #mmurmi "op1" 2r100000 "op2" 2r1010000 "R" 0 "C1" 16r66000F2A 0 ) (#cvtpi2ps #mmurmi "op1" 2r100000 "op2" 2r1010000 "R" 0 "C1" 16r00000F2A 0 ) (#cvtps2dq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5B 0 ) (#cvtps2pd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5A 0 ) (#cvtps2pi #mmurmi "op1" 2r10000 "op2" 2r1100000 "R" 0 "C1" 16r00000F2D 0 ) (#cvtsd2si #mmurmi "op1" 2r1100 "op2" 2r1100000 "R" 0 "C1" 16rF2000F2D 0 ) (#cvtsd2ss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F5A 0 ) (#cvtsi2sd #mmurmi "op1" 2r100000 "op2" 2r1001100 "R" 0 "C1" 16rF2000F2A 0 ) (#cvtsi2ss #mmurmi "op1" 2r100000 "op2" 2r1001100 "R" 0 "C1" 16rF3000F2A 0 ) (#cvtss2sd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5A 0 ) (#cvtss2si #mmurmi "op1" 2r1100 "op2" 2r1100000 "R" 0 "C1" 16rF3000F2D 0 ) (#cvttpd2dq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000FE6 0 ) (#cvttpd2pi #mmurmi "op1" 2r10000 "op2" 2r1100000 "R" 0 "C1" 16r66000F2C 0 ) (#cvttps2dq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5B 0 ) (#cvttps2pi #mmurmi "op1" 2r10000 "op2" 2r1100000 "R" 0 "C1" 16r00000F2C 0 ) (#cvttsd2si #mmurmi "op1" 2r1100 "op2" 2r1100000 "R" 0 "C1" 16rF2000F2C 0 ) (#cvttss2si #mmurmi "op1" 2r1100 "op2" 2r1100000 "R" 0 "C1" 16rF3000F2C 0 ) (#daa #emit #x86 0 "R" 0 "C1" 16r00000027 0 ) (#das #emit #x86 0 "R" 0 "C1" 16r0000002F 0 ) (#dec #incdec 0 0 "R" 1 "C1" 16r00000048 "C2" 16r000000FE ) (#div #rm 0 0 "R" 6 "C1" 16r000000F6 0 ) (#divpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5E 0 ) (#divps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5E 0 ) (#divsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F5E 0 ) (#divss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5E 0 ) (#dppd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A41 0 ) (#dpps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A40 0 ) (#emms #emit 0 0 "R" 0 "C1" 16r00000F77 0 ) (#enter #enter 0 0 "R" 0 "C1" 16r000000C8 0 ) (#extractps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A17 0 ) (#f2xm1 #emit 0 0 "R" 0 "C1" 16r0000D9F0 0 ) (#fabs #emit 0 0 "R" 0 "C1" 16r0000D9E1 0 ) (#fadd #x87fpu 0 0 "R" 0 "C1" 16rD8DCC0C0 0 ) (#faddp #x87sti 0 0 "R" 0 "C1" 16r0000DEC0 0 ) (#fbld #mem "op1" 2r1000000 0 "R" 4 "C1" 16r000000DF 0 ) (#fbstp #mem "op1" 2r1000000 0 "R" 6 "C1" 16r000000DF 0 ) (#fchs #emit 0 0 "R" 0 "C1" 16r0000D9E0 0 ) (#fclex #emit 0 0 "R" 0 "C1" 16r9B00DBE2 0 ) (#fcmovb #x87sti 0 0 "R" 0 "C1" 16r0000DAC0 0 ) (#fcmovbe #x87sti 0 0 "R" 0 "C1" 16r0000DAD0 0 ) (#fcmove #x87sti 0 0 "R" 0 "C1" 16r0000DAC8 0 ) (#fcmovnb #x87sti 0 0 "R" 0 "C1" 16r0000DBC0 0 ) (#fcmovnbe #x87sti 0 0 "R" 0 "C1" 16r0000DBD0 0 ) (#fcmovne #x87sti 0 0 "R" 0 "C1" 16r0000DBC8 0 ) (#fcmovnu #x87sti 0 0 "R" 0 "C1" 16r0000DBD8 0 ) (#fcmovu #x87sti 0 0 "R" 0 "C1" 16r0000DAD8 0 ) (#fcom #x87fpu 0 0 "R" 2 "C1" 16rD8DCD0D0 0 ) (#fcomi #x87sti 0 0 "R" 0 "C1" 16r0000DBF0 0 ) (#fcomip #x87sti 0 0 "R" 0 "C1" 16r0000DFF0 0 ) (#fcomp #x87fpu 0 0 "R" 3 "C1" 16rD8DCD8D8 0 ) (#fcompp #emit 0 0 "R" 0 "C1" 16r0000DED9 0 ) (#fcos #emit 0 0 "R" 0 "C1" 16r0000D9FF 0 ) (#fdecstp #emit 0 0 "R" 0 "C1" 16r0000D9F6 0 ) (#fdiv #x87fpu 0 0 "R" 6 "C1" 16rD8DCF0F8 0 ) (#fdivp #x87sti 0 0 "R" 0 "C1" 16r0000DEF8 0 ) (#fdivr #x87fpu 0 0 "R" 7 "C1" 16rD8DCF8F0 0 ) (#fdivrp #x87sti 0 0 "R" 0 "C1" 16r0000DEF0 0 ) (#ffree #x87sti 0 0 "R" 0 "C1" 16r0000DDC0 0 ) (#fiadd #x87mem "op1" 2r110 0 "R" 0 "C1" 16rDEDA0000 0 ) (#ficom #x87mem "op1" 2r110 0 "R" 2 "C1" 16rDEDA0000 0 ) (#ficomp #x87mem "op1" 2r110 0 "R" 3 "C1" 16rDEDA0000 0 ) (#fidiv #x87mem "op1" 2r110 0 "R" 6 "C1" 16rDEDA0000 0 ) (#fidivr #x87mem "op1" 2r110 0 "R" 7 "C1" 16rDEDA0000 0 ) (#fild #x87mem "op1" 2r1110 0 "R" 0 "C1" 16rDFDBDF05 0 ) (#fimul #x87mem "op1" 2r110 0 "R" 1 "C1" 16rDEDA0000 0 ) (#fincstp #emit 0 0 "R" 0 "C1" 16r0000D9F7 0 ) (#finit #emit 0 0 "R" 0 "C1" 16r9B00DBE3 0 ) (#fist #x87mem "op1" 2r110 0 "R" 2 "C1" 16rDFDB0000 0 ) (#fistp #x87mem "op1" 2r1110 0 "R" 3 "C1" 16rDFDBDF07 0 ) (#fisttp #x87mem "op1" 2r1110 0 "R" 1 "C1" 16rDFDBDD01 0 ) (#fisub #x87mem "op1" 2r110 0 "R" 4 "C1" 16rDEDA0000 0 ) (#fisubr #x87mem "op1" 2r110 0 "R" 5 "C1" 16rDEDA0000 0 ) (#fld #x87memSti "op1" 2r11100 0 "R" 0 "C1" 16r00D9DD00 "C2" 16rD9C0DB05 ) (#fld1 #emit 0 0 "R" 0 "C1" 16r0000D9E8 0 ) (#fldcw #mem "op1" 2r1000000 0 "R" 5 "C1" 16r000000D9 0 ) (#fldenv #mem "op1" 2r1000000 0 "R" 4 "C1" 16r000000D9 0 ) (#fldl2e #emit 0 0 "R" 0 "C1" 16r0000D9EA 0 ) (#fldl2t #emit 0 0 "R" 0 "C1" 16r0000D9E9 0 ) (#fldlg2 #emit 0 0 "R" 0 "C1" 16r0000D9EC 0 ) (#fldln2 #emit 0 0 "R" 0 "C1" 16r0000D9ED 0 ) (#fldpi #emit 0 0 "R" 0 "C1" 16r0000D9EB 0 ) (#fldz #emit 0 0 "R" 0 "C1" 16r0000D9EE 0 ) (#fmul #x87fpu 0 0 "R" 1 "C1" 16rD8DCC8C8 0 ) (#fmulp #x87sti 0 0 "R" 0 "C1" 16r0000DEC8 0 ) (#fnclex #emit 0 0 "R" 0 "C1" 16r0000DBE2 0 ) (#fninit #emit 0 0 "R" 0 "C1" 16r0000DBE3 0 ) (#fnop #emit 0 0 "R" 0 "C1" 16r0000D9D0 0 ) (#fnsave #mem "op1" 2r1000000 0 "R" 6 "C1" 16r000000DD 0 ) (#fnstcw #mem "op1" 2r1000000 0 "R" 7 "C1" 16r000000D9 0 ) (#fnstenv #mem "op1" 2r1000000 0 "R" 6 "C1" 16r000000D9 0 ) (#fnstsw #x87fstsw "op1" 2r1000000 0 "R" 7 "C1" 16r000000DD "C2" 16r0000DFE0 ) (#fpatan #emit 0 0 "R" 0 "C1" 16r0000D9F3 0 ) (#fprem #emit 0 0 "R" 0 "C1" 16r0000D9F8 0 ) (#fprem1 #emit 0 0 "R" 0 "C1" 16r0000D9F5 0 ) (#fptan #emit 0 0 "R" 0 "C1" 16r0000D9F2 0 ) (#frndint #emit 0 0 "R" 0 "C1" 16r0000D9FC 0 ) (#frstor #mem "op1" 2r1000000 0 "R" 4 "C1" 16r000000DD 0 ) (#fsave #mem "op1" 2r1000000 0 "R" 6 "C1" 16r9B0000DD 0 ) (#fscale #emit 0 0 "R" 0 "C1" 16r0000D9FD 0 ) (#fsin #emit 0 0 "R" 0 "C1" 16r0000D9FE 0 ) (#fsincos #emit 0 0 "R" 0 "C1" 16r0000D9FB 0 ) (#fsqrt #emit 0 0 "R" 0 "C1" 16r0000D9FA 0 ) (#fst #x87memSti "op1" 2r1100 0 "R" 2 "C1" 16r00D9DD02 "C2" 16rDDD00000 ) (#fstcw #mem "op1" 2r1000000 0 "R" 7 "C1" 16r9B0000D9 0 ) (#fstenv #mem "op1" 2r1000000 0 "R" 6 "C1" 16r9B0000D9 0 ) (#fstp #x87memSti "op1" 2r11100 0 "R" 3 "C1" 16r00D9DD03 "C2" 16rDDD8DB07 ) (#fstsw #x87fstsw "op1" 2r1000000 0 "R" 7 "C1" 16r9B0000DD "C2" 16r9B00DFE0 ) (#fsub #x87fpu 0 0 "R" 4 "C1" 16rD8DCE0E8 0 ) (#fsubp #x87sti 0 0 "R" 0 "C1" 16r0000DEE8 0 ) (#fsubr #x87fpu 0 0 "R" 5 "C1" 16rD8DCE8E0 0 ) (#fsubrp #x87sti 0 0 "R" 0 "C1" 16r0000DEE0 0 ) (#ftst #emit 0 0 "R" 0 "C1" 16r0000D9E4 0 ) (#fucom #x87sti 0 0 "R" 0 "C1" 16r0000DDE0 0 ) (#fucomi #x87sti 0 0 "R" 0 "C1" 16r0000DBE8 0 ) (#fucomip #x87sti 0 0 "R" 0 "C1" 16r0000DFE8 0 ) (#fucomp #x87sti 0 0 "R" 0 "C1" 16r0000DDE8 0 ) (#fucompp #emit 0 0 "R" 0 "C1" 16r0000DAE9 0 ) (#fwait #emit 0 0 "R" 0 "C1" 16r0000009B 0 ) (#fxam #emit 0 0 "R" 0 "C1" 16r0000D9E5 0 ) (#fxch #x87sti 0 0 "R" 0 "C1" 16r0000D9C8 0 ) (#fxrstor #mem 0 0 "R" 1 "C1" 16r00000FAE 0 ) (#fxsave #mem 0 0 "R" 0 "C1" 16r00000FAE 0 ) (#fxtract #emit 0 0 "R" 0 "C1" 16r0000D9F4 0 ) (#fyl2x #emit 0 0 "R" 0 "C1" 16r0000D9F1 0 ) (#fyl2xp1 #emit 0 0 "R" 0 "C1" 16r0000D9F9 0 ) (#haddpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F7C 0 ) (#haddps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F7C 0 ) (#hsubpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F7D 0 ) (#hsubps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F7D 0 ) (#idiv #rm 0 0 "R" 7 "C1" 16r000000F6 0 ) (#imul #imul 0 0 "R" 0 0 0 ) (#inc #incdec 0 0 "R" 0 "C1" 16r00000040 "C2" 16r000000FE ) (#int3 #emit 0 0 "R" 0 "C1" 16r000000CC 0 ) (#ja #cjmp 0 0 "R" 0 "C1" 16r00000007 0 ) (#jae #cjmp 0 0 "R" 0 "C1" 16r00000003 0 ) (#jb #cjmp 0 0 "R" 0 "C1" 16r00000002 0 ) (#jbe #cjmp 0 0 "R" 0 "C1" 16r00000006 0 ) (#jc #cjmp 0 0 "R" 0 "C1" 16r00000002 0 ) (#je #cjmp 0 0 "R" 0 "C1" 16r00000004 0 ) (#jg #cjmp 0 0 "R" 0 "C1" 16r0000000F 0 ) (#jge #cjmp 0 0 "R" 0 "C1" 16r0000000D 0 ) (#jl #cjmp 0 0 "R" 0 "C1" 16r0000000C 0 ) (#jle #cjmp 0 0 "R" 0 "C1" 16r0000000E 0 ) (#jmp #jmp 0 0 "R" 0 0 0 ) (#jna #cjmp 0 0 "R" 0 "C1" 16r00000006 0 ) (#jnae #cjmp 0 0 "R" 0 "C1" 16r00000002 0 ) (#jnb #cjmp 0 0 "R" 0 "C1" 16r00000003 0 ) (#jnbe #cjmp 0 0 "R" 0 "C1" 16r00000007 0 ) (#jnc #cjmp 0 0 "R" 0 "C1" 16r00000003 0 ) (#jne #cjmp 0 0 "R" 0 "C1" 16r00000005 0 ) (#jng #cjmp 0 0 "R" 0 "C1" 16r0000000E 0 ) (#jnge #cjmp 0 0 "R" 0 "C1" 16r0000000C 0 ) (#jnl #cjmp 0 0 "R" 0 "C1" 16r0000000D 0 ) (#jnle #cjmp 0 0 "R" 0 "C1" 16r0000000F 0 ) (#jno #cjmp 0 0 "R" 0 "C1" 16r00000001 0 ) (#jnp #cjmp 0 0 "R" 0 "C1" 16r0000000B 0 ) (#jns #cjmp 0 0 "R" 0 "C1" 16r00000009 0 ) (#jnz #cjmp 0 0 "R" 0 "C1" 16r00000005 0 ) (#jo #cjmp 0 0 "R" 0 0 0 ) (#jp #cjmp 0 0 "R" 0 "C1" 16r0000000A 0 ) (#jpe #cjmp 0 0 "R" 0 "C1" 16r0000000A 0 ) (#jpo #cjmp 0 0 "R" 0 "C1" 16r0000000B 0 ) (#js #cjmp 0 0 "R" 0 "C1" 16r00000008 0 ) (#jz #cjmp 0 0 "R" 0 "C1" 16r00000004 0 ) (#lddqu #mmurmi "op1" 2r100000 "op2" 2r1000000 "R" 0 "C1" 16rF2000FF0 0 ) (#ldmxcsr #mem "op1" 2r1000000 0 "R" 2 "C1" 16r00000FAE 0 ) (#lea #lea 0 0 "R" 0 0 0 ) (#leave #emit 0 0 "R" 0 "C1" 16r000000C9 0 ) (#lfence #emit 0 0 "R" 0 "C1" 16r000FAEE8 0 ) (#lock #emit 0 0 "R" 0 "C1" 16r000000F0 0 ) (#maskmovdqu #mmurmi "op1" 2r100000 "op2" 2r100000 "R" 0 "C1" 16r66000F57 0 ) (#maskmovq #mmurmi "op1" 2r10000 "op2" 2r10000 "R" 0 "C1" 16r00000FF7 0 ) (#maxpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5F 0 ) (#maxps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5F 0 ) (#maxsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F5F 0 ) (#maxss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5F 0 ) (#mfence #emit 0 0 "R" 0 "C1" 16r000FAEF0 0 ) (#minpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5D 0 ) (#minps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5D 0 ) (#minsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F5D 0 ) (#minss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5D 0 ) (#monitor #emit 0 0 "R" 0 "C1" 16r000F01C8 0 ) (#mov #mov 0 0 "R" 0 0 0 ) (#movPtr #movPtr 0 0 "R" 0 0 0 ) (#movapd #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F28 "C2" 16r66000F29 ) (#movaps #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F28 "C2" 16r00000F29 ) (#movbe #movbe "op1" 2r1001110 "op2" 2r1001110 "R" 0 "C1" 16r000F38F0 "C2" 16r000F38F1 ) (#movd #mmuMovD 0 0 "R" 0 0 0 ) (#movddup #mmuMov "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F12 0 ) (#movdq2q #mmuMov "op1" 2r10000 "op2" 2r100000 "R" 0 "C1" 16rF2000FD6 0 ) (#movdqa #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F6F "C2" 16r66000F7F ) (#movdqu #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F6F "C2" 16rF3000F7F ) (#movhlps #mmuMov "op1" 2r100000 "op2" 2r100000 "R" 0 "C1" 16r00000F12 0 ) (#movhpd #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F16 "C2" 16r66000F17 ) (#movhps #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F16 "C2" 16r00000F17 ) (#movlhps #mmuMov "op1" 2r100000 "op2" 2r100000 "R" 0 "C1" 16r00000F16 0 ) (#movlpd #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F12 "C2" 16r66000F13 ) (#movlps #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F12 "C2" 16r00000F13 ) (#movmskpd #mmuMov "op1" 2r1101 "op2" 2r100000 "R" 0 "C1" 16r66000F50 0 ) (#movmskps #mmuMov "op1" 2r1101 "op2" 2r100000 "R" 0 "C1" 16r00000F50 0 ) (#movntdq #mmuMov "op1" 2r1000000 "op2" 2r100000 "R" 0 0 "C2" 16r66000FE7 ) (#movntdqa #mmuMov "op1" 2r100000 "op2" 2r1000000 "R" 0 "C1" 16r660F382A 0 ) (#movnti #mmuMov "op1" 2r1000000 "op2" 2r1100 "R" 0 0 "C2" 16r00000FC3 ) (#movntpd #mmuMov "op1" 2r1000000 "op2" 2r100000 "R" 0 0 "C2" 16r66000F2B ) (#movntps #mmuMov "op1" 2r1000000 "op2" 2r100000 "R" 0 0 "C2" 16r00000F2B ) (#movntq #mmuMov "op1" 2r1000000 "op2" 2r10000 "R" 0 0 "C2" 16r00000FE7 ) (#movq #mmuMovQ 0 0 "R" 0 0 0 ) (#movq2dq #mmurmi "op1" 2r100000 "op2" 2r10000 "R" 0 "C1" 16rF3000FD6 0 ) (#movsd #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F10 "C2" 16rF2000F11 ) (#movshdup #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F16 0 ) (#movsldup #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F12 0 ) (#movss #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F10 "C2" 16rF3000F11 ) (#movsx #movSxZx 0 0 "R" 0 "C1" 16r00000FBE 0 ) (#movsxd #movsxd 0 0 "R" 0 0 0 ) (#movupd #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F10 "C2" 16r66000F11 ) (#movups #mmuMov "op1" 2r1100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F10 "C2" 16r00000F11 ) (#movzx #movSxZx 0 0 "R" 0 "C1" 16r00000FB6 0 ) (#mpsadbw #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A42 0 ) (#mul #rm 0 0 "R" 4 "C1" 16r000000F6 0 ) (#mulpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F59 0 ) (#mulps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F59 0 ) (#mulsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F59 0 ) (#mulss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F59 0 ) (#mwait #emit 0 0 "R" 0 "C1" 16r000F01C9 0 ) (#neg #rm 0 0 "R" 3 "C1" 16r000000F6 0 ) (#nop #emit 0 0 "R" 0 "C1" 16r00000090 0 ) (#not #rm 0 0 "R" 2 "C1" 16r000000F6 0 ) (#or #alu 0 0 "R" 1 "C1" 16r00000008 "C2" 16r00000080 ) (#orpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F56 0 ) (#orps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F56 0 ) (#pabsb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F381C 0 ) (#pabsd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F381E 0 ) (#pabsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F381D 0 ) (#packssdw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F6B 0 ) (#packsswb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F63 0 ) (#packusdw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F382B 0 ) (#packuswb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F67 0 ) (#paddb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FFC 0 ) (#paddd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FFE 0 ) (#paddq #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FD4 0 ) (#paddsb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FEC 0 ) (#paddsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FED 0 ) (#paddusb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDC 0 ) (#paddusw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDD 0 ) (#paddw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FFD 0 ) (#palignr #mmuRmImm8 "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3A0F 0 ) (#pand #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDB 0 ) (#pandn #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDF 0 ) (#pause #emit 0 0 "R" 0 "C1" 16rF3000090 0 ) (#pavgb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE0 0 ) (#pavgw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE3 0 ) (#pblendvb #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3810 0 ) (#pblendw #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A0E 0 ) (#pcmpeqb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F74 0 ) (#pcmpeqd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F76 0 ) (#pcmpeqq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3829 0 ) (#pcmpeqw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F75 0 ) (#pcmpestri #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A61 0 ) (#pcmpestrm #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A60 0 ) (#pcmpgtb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F64 0 ) (#pcmpgtd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F66 0 ) (#pcmpgtq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3837 0 ) (#pcmpgtw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F65 0 ) (#pcmpistri #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A63 0 ) (#pcmpistrm #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A62 0 ) (#pextrb #mmuPextr "op1" 2r1000101 "op2" 2r100000 "R" 0 "C1" 16r000F3A14 0 ) (#pextrd #mmuPextr "op1" 2r1000100 "op2" 2r100000 "R" 0 "C1" 16r000F3A16 0 ) (#pextrq #mmuPextr "op1" 2r1001100 "op2" 2r100000 "R" 1 "C1" 16r000F3A16 0 ) (#pextrw #mmuPextr "op1" 2r1000100 "op2" 2r110000 "R" 0 "C1" 16r000F3A16 0 ) (#pf2id #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000001D ) (#pf2iw #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000001C ) (#pfacc #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000AE ) (#pfadd #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000009E ) (#pfcmpeq #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000B0 ) (#pfcmpge #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r00000090 ) (#pfcmpgt #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000A0 ) (#pfmax #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000A4 ) (#pfmin #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r00000094 ) (#pfmul #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000B4 ) (#pfnacc #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000008A ) (#pfpnacc #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000008E ) (#pfrcp #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r00000096 ) (#pfrcpit1 #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000A6 ) (#pfrcpit2 #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000B6 ) (#pfrsqit1 #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000A7 ) (#pfrsqrt #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r00000097 ) (#pfsub #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000009A ) (#pfsubr #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000AA ) (#phaddd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3802 0 ) (#phaddsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3803 0 ) (#phaddw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3801 0 ) (#phminposuw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3841 0 ) (#phsubd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3806 0 ) (#phsubsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3807 0 ) (#phsubw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3805 0 ) (#pi2fd #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000000D ) (#pi2fw #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r0000000C ) (#pinsrb #mmuRmImm8 "op1" 2r100000 "op2" 2r1000100 "R" 0 "C1" 16r660F3A20 0 ) (#pinsrd #mmuRmImm8 "op1" 2r100000 "op2" 2r1000100 "R" 0 "C1" 16r660F3A22 0 ) (#pinsrq #mmuRmImm8 "op1" 2r100000 "op2" 2r1001000 "R" 0 "C1" 16r660F3A22 0 ) (#pinsrw #mmuRmImm8 "op1" 2r110000 "op2" 2r1000100 "R" 0 "C1" 16r00000FC4 0 ) (#pmaddubsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3804 0 ) (#pmaddwd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FF5 0 ) (#pmaxsb #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383C 0 ) (#pmaxsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383D 0 ) (#pmaxsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FEE 0 ) (#pmaxub #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDE 0 ) (#pmaxud #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383F 0 ) (#pmaxuw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383E 0 ) (#pminsb #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3838 0 ) (#pminsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3839 0 ) (#pminsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FEA 0 ) (#pminub #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FDA 0 ) (#pminud #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383B 0 ) (#pminuw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F383A 0 ) (#pmovmskb #mmurmi "op1" 2r1100 "op2" 2r110000 "R" 0 "C1" 16r00000FD7 0 ) (#pmovsxbd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3821 0 ) (#pmovsxbq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3822 0 ) (#pmovsxbw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3820 0 ) (#pmovsxdq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3825 0 ) (#pmovsxwd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3823 0 ) (#pmovsxwq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3824 0 ) (#pmovzxbd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3831 0 ) (#pmovzxbq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3832 0 ) (#pmovzxbw #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3830 0 ) (#pmovzxdq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3835 0 ) (#pmovzxwd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3833 0 ) (#pmovzxwq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3834 0 ) (#pmuldq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3828 0 ) (#pmulhrsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F380B 0 ) (#pmulhuw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE4 0 ) (#pmulhw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE5 0 ) (#pmulld #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3840 0 ) (#pmullw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FD5 0 ) (#pmuludq #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FF4 0 ) (#pop #pop 0 0 "R" 0 "C1" 16r00000058 "C2" 16r0000008F ) (#popad #emit #x86 0 "R" 0 "C1" 16r00000061 0 ) (#popcnt #rrm 0 0 "R" 0 "C1" 16rF3000FB8 0 ) (#popfd #emit 0 0 "R" 0 "C1" 16r0000009D 0 ) (#popfq #emit 0 0 "R" 0 "C1" 16r4800009D 0 ) (#por #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FEB 0 ) (#prefetch #mmuPrefetch "op1" 2r1000000 "op2" 2r10000000 "R" 0 0 0 ) (#psadbw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FF6 0 ) (#pshufb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3800 0 ) (#pshufd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F70 0 ) (#pshufhw #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F70 0 ) (#pshuflw #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F70 0 ) (#pshufw #mmuRmImm8 "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F70 0 ) (#psignb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3808 0 ) (#psignd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F380A 0 ) (#psignw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r000F3809 0 ) (#pslld #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 6 "C1" 16r00000FF2 "C2" 16r00000F72 ) (#pslldq #mmurmi "op1" 2r100000 "op2" 2r10000000 "R" 7 0 "C2" 16r66000F73 ) (#psllq #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 6 "C1" 16r00000FF3 "C2" 16r00000F73 ) (#psllw #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 6 "C1" 16r00000FF1 "C2" 16r00000F71 ) (#psrad #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 4 "C1" 16r00000FE2 "C2" 16r00000F72 ) (#psraw #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 4 "C1" 16r00000FE1 "C2" 16r00000F71 ) (#psrld #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 2 "C1" 16r00000FD2 "C2" 16r00000F72 ) (#psrldq #mmurmi "op1" 2r100000 "op2" 2r10000000 "R" 3 0 "C2" 16r66000F73 ) (#psrlq #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 2 "C1" 16r00000FD3 "C2" 16r00000F73 ) (#psrlw #mmurmi "op1" 2r110000 "op2" 2r11110000 "R" 2 "C1" 16r00000FD1 "C2" 16r00000F71 ) (#psubb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FF8 0 ) (#psubd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FFA 0 ) (#psubq #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FFB 0 ) (#psubsb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE8 0 ) (#psubsw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FE9 0 ) (#psubusb #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FD8 0 ) (#psubusw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FD9 0 ) (#psubw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FF9 0 ) (#pswapd #mmuRm3DNow "op1" 2r10000 "op2" 2r1010000 "R" 0 "C1" 16r00000F0F "C2" 16r000000BB ) (#ptest #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3817 0 ) (#punpckhbw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F68 0 ) (#punpckhdq #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F6A 0 ) (#punpckhqdq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F6D 0 ) (#punpckhwd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F69 0 ) (#punpcklbw #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F60 0 ) (#punpckldq #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F62 0 ) (#punpcklqdq #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F6C 0 ) (#punpcklwd #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000F61 0 ) (#push #push 0 0 "R" 6 "C1" 16r00000050 "C2" 16r000000FF ) (#pushad #emit #x86 0 "R" 0 "C1" 16r00000060 0 ) (#pushf #emit 0 0 "R" 0 "C1" 16r6600009C 0 ) (#pushfd #emit #x86 0 "R" 0 "C1" 16r0000009C 0 ) (#pushfq #emit #x64 0 "R" 0 "C1" 16r0000009C 0 ) (#pxor #mmurmi "op1" 2r110000 "op2" 2r1110000 "R" 0 "C1" 16r00000FEF 0 ) (#rcl #rot 0 0 "R" 2 0 0 ) (#rcpps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F53 0 ) (#rcpss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F53 0 ) (#rcr #rot 0 0 "R" 3 0 0 ) (#rdtsc #emit 0 0 "R" 0 "C1" 16r00000F31 0 ) (#rdtscp #emit 0 0 "R" 0 "C1" 16r000F01F9 0 ) (#ret #ret 0 0 "R" 0 0 0 ) (#rol #rot 0 0 "R" 0 0 0 ) (#ror #rot 0 0 "R" 1 0 0 ) (#roundpd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A09 0 ) (#roundps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A08 0 ) (#roundsd #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A0B 0 ) (#roundss #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r660F3A0A 0 ) (#rsqrtps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F52 0 ) (#rsqrtss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F52 0 ) (#sahf #emit 0 0 "R" 0 "C1" 16r0000009E 0 ) (#sal #rot 0 0 "R" 4 0 0 ) (#sar #rot 0 0 "R" 7 0 0 ) (#sbb #alu 0 0 "R" 3 "C1" 16r00000018 "C2" 16r00000080 ) (#sfence #emit 0 0 "R" 0 "C1" 16r000FAEF8 0 ) (#shl #rot 0 0 "R" 4 0 0 ) (#shld #shldShrd 0 0 "R" 0 "C1" 16r00000FA4 0 ) (#shr #rot 0 0 "R" 5 0 0 ) (#shrd #shldShrd 0 0 "R" 0 "C1" 16r00000FAC 0 ) (#shufps #mmuRmImm8 "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000FC6 0 ) (#sqrtpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F51 0 ) (#sqrtps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F51 0 ) (#sqrtsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F51 0 ) (#sqrtss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F51 0 ) (#stc #emit 0 0 "R" 0 "C1" 16r000000F9 0 ) (#std #emit 0 0 "R" 0 "C1" 16r000000FD 0 ) (#stmxcsr #mem "op1" 2r1000000 0 "R" 3 "C1" 16r00000FAE 0 ) (#sub #alu 0 0 "R" 5 "C1" 16r00000028 "C2" 16r00000080 ) (#subpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F5C 0 ) (#subps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F5C 0 ) (#subsd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF2000F5C 0 ) (#subss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16rF3000F5C 0 ) (#syscall #emit "op1" 2r100000000 0 "R" 0 "C1" 16r00000F05 0 ) (#test #test 0 0 "R" 0 0 0 ) (#ucomisd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F2E 0 ) (#ucomiss #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F2E 0 ) (#ud2 #emit 0 0 "R" 0 "C1" 16r00000F0B 0 ) (#unpckhpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F15 0 ) (#unpckhps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F15 0 ) (#unpcklpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F14 0 ) (#unpcklps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F14 0 ) (#xadd #rmr 0 0 "R" 0 "C1" 16r00000FC0 0 ) (#xchg #xchg 0 0 "R" 0 0 0 ) (#xor #alu 0 0 "R" 6 "C1" 16r00000030 "C2" 16r00000080 ) (#xorpd #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r66000F57 0 ) (#xorps #mmurmi "op1" 2r100000 "op2" 2r1100000 "R" 0 "C1" 16r00000F57 0 ) ) ! ! !AJx86InstructionDescription methodsFor: 'code emitting' stamp: 'MartinMcClure 1/30/2013 22:13' prior: 17070222! emittest: emitter operand1: op1 operand2: op2 operand3: op3 | immSize | op1 isRegMem & op2 isReg ifTrue: [ op1 size notNil & (op1 size ~= op2 size) ifTrue: [ self error: 'Operands ' , op1 asString , ' and ' , op2 asString , ' don''t match in size: ' , op1 size asString , ' !!= ' , op2 size asString ]. ^ emitter emitX86RM: 16r84 + op2 isRegTypeGPB not asBit size: op2 size regOrCode: op2 rm: op1 ]. (op1 isReg and: [ op1 index = 0 and: [ op2 isImm ] ]) ifTrue: [ immSize := op1 size min: 4. op1 is16 ifTrue: [ emitter emitByte: 16r66 "16bit" ]. emitter emitRexRM: op1 is64 regCode: 0 rm: op1. emitter emitByte: 16rA8 + (op1 size ~= 1) asBit. ^ emitter emitImmediate: op2 size: immSize ]. (op1 isRegMem and: [ op2 isImm ]) ifFalse: [ self invalidInstruction ]. immSize := op1 size min: 4. (op2 fitsInSize: immSize) ifFalse: [ self invalidInstruction ]. emitter emitSegmentPrefix: op1. emitter emitOperandSizeOverridePrefix: op1. emitter emitByte: 16rF6 + (op1 size ~= 1) asBit. op1 emitModRM: emitter code: 0 immSize: immSize. emitter emitImmediate: op2 size: immSize! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:42' prior: 17055948! as16 ^ self isHighByte ifTrue: [ self asLowByte as16 ] ifFalse: [ AJx86Registers generalPurposeWithIndex: self index size: 2 requiresRex: self index > 7 prohibitsRex: false ]! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:43' prior: 17056137! as32 ^ self isHighByte ifTrue: [ self asLowByte as32 ] ifFalse: [ AJx86Registers generalPurposeWithIndex: self index size: 4 requiresRex: self index > 7 prohibitsRex: false ]! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:44' prior: 17056326! as64 ^ self isHighByte ifTrue: [ self asLowByte as64 ] ifFalse: [ AJx86Registers generalPurposeWithIndex: self index size: 8 requiresRex: self index > 7 prohibitsRex: false ]! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:40' prior: 17056515! as8 "8-bit low-byte registers require REX if they have a high index (>7), or if they are one of BPL, SIL, DIL, SPL (indices 4-7). The only way to get AH, BH, CH, or DH out of this method is to send it to one of those registers." ^ self is8 ifTrue: [ self ] ifFalse: [ AJx86Registers generalPurposeWithIndex: self index size: 1 requiresRex: self index > 3 prohibitsRex: false ]! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:53' prior: 17056811! asHighByte self isHighByte ifTrue: [ ^ self ]. self isLowByte ifFalse: [ Error signal: 'Can only convert AH, BH, CH, or DH to high byte' ]. ^ AJx86Registers generalPurposeWithIndex: self index + 2r100 size: 1 requiresRex: false prohibitsRex: true! ! !AJx86GPRegister methodsFor: 'converting' stamp: 'MartinMcClure 1/30/2013 21:46' prior: 17057088! asLowByte self isLowByte ifTrue: [ ^ self ]. self isHighByte ifFalse: [ Error signal: 'Can only convert high byte 8bit register to low byte' ]. ^ AJx86Registers generalPurposeWithIndex: self index - 2r100 size: 1 requiresRex: false prohibitsRex: false! ! !AJx86GPRegister methodsFor: 'testing' stamp: 'MartinMcClure 1/30/2013 21:33' prior: 17057961! isHighByte "return true for 8bit high-byte registers (AH - DH)" ^ self prohibitsRex! ! !AJx86GPRegister methodsFor: 'testing' stamp: 'MartinMcClure 1/30/2013 21:55' prior: 17058173! isLowByte "return true for 8bit low-byte register (AL - DL)" "Note that this does *not* answer true for all byte registers -- send #is8 for that." ^ self code <= 3! ! !AJx86GPRegister methodsFor: 'printing' stamp: 'MartinMcClure 1/1/2013 18:55'! printAsMemBaseOn: aStream aStream nextPutAll: self registerName ! ! !AJx86GPRegister methodsFor: 'accessing'! stackSize ^ self size! ! !AJx64Instruction methodsFor: 'testing' stamp: 'MartinMcClure 1/30/2013 20:59'! requiresRex "Answer true if I absolutely must have a REX prefix." ^ (operands detect: [ :rawOp | | op | op := rawOp asAJOperand. op requiresRex | op is64 ] ifNone: [ #none ]) ~~ #none! ! !AJx64InstructionDescription methodsFor: 'code emitting' stamp: 'MartinMcClure 1/30/2013 22:14' prior: 16848268! emitalu: emitter operand1: op1 operand2: op2 operand3: op3 | opCode opReg | opCode := opCode1. opReg := opCodeR. " Mem <- Reg " (op1 isMem and: [ op2 isReg ]) ifTrue: [ ^ emitter emitX86RM: opCode + op2 isRegTypeGPB not asBit size: op2 size regOrCode: op2 rm: op1 ]. "Reg <- Reg|Mem" (op1 isReg and: [ op2 isRegMem ]) ifTrue: [ (op2 isReg and: [ op1 size ~= op2 size ]) ifTrue: [ self invalidInstruction ]. ^ emitter emitX86RM: opCode + 2 + op1 isRegTypeGPB not asBit size: op1 size regOrCode: op1 rm: op2 ]. op2 isImm ifFalse: [ self invalidInstruction ]. " AL, AX, EAX, RAX register shortcuts" (op1 isRegIndex: 0) ifTrue: [ op1 is16 ifTrue: [ emitter emitByte: 16r66 " 16 bit " ]. op1 is64 ifTrue: [ emitter emitByte: 16r48 " REX.W" ]. emitter emitByte: (opReg << 3 bitOr: 16r04 + op1 isRegTypeGPB not asBit). ^ emitter emitImmediate: op2 size: (op1 size min: 4) ]. "short constant" op2 isInt8 ifTrue: [ | szBits | szBits := op1 size = 1 ifTrue: [ 0 ] ifFalse: [ 3 ]. emitter emitX86RM: opCode2 + szBits size: op1 size regOrCode: opReg rm: op1 immSize: 1. ^ emitter emitImmediate: op2 size: 1 ]. op1 isRegMem ifTrue: [ | immSize szBits | immSize := op2 isInt8 ifTrue: [ 1 ] ifFalse: [ op1 size min: 4 ]. szBits := op1 size ~= 1 ifTrue: [ immSize ~= 1 ifTrue: [ 1 ] ifFalse: [ 3 ] ] ifFalse: [ 0 ]. emitter emitX86RM: opCode2 + szBits size: op1 size regOrCode: opReg rm: op1 immSize: immSize. ^ emitter emitImmediate: op2 size: immSize ]. self invalidInstruction! ! !AJx64InstructionDescription methodsFor: 'code emitting' stamp: 'MartinMcClure 1/30/2013 22:13' prior: 16853825! emitmovSxZx: emitter operand1: dst operand2: src operand3: op3 dst isReg & src isRegMem ifFalse: [ self invalidInstruction ]. src size >= dst size ifTrue: [ self invalidInstruction ]. dst isGeneralPurpose ifFalse: [ self invalidInstruction ]. src is16 ifTrue: [ ^ emitter emitX86RM: opCode1 + 1 size: dst size regOrCode: dst rm: src ]. src is32 ifTrue: [ self invalidInstruction ]. "64 bit source" emitter emitX86RM: opCode1 size: dst size regOrCode: dst rm: src! ! !AJx64Assembler methodsFor: 'accessing registers' stamp: 'MartinMcClure 1/27/2013 20:55'! BPL ^ BPL! ! !AJx64Assembler methodsFor: 'accessing registers' stamp: 'MartinMcClure 1/27/2013 20:55'! DIL ^ DIL! ! !AJx64Assembler methodsFor: 'accessing registers' stamp: 'MartinMcClure 1/27/2013 20:55'! SIL ^ SIL! ! !AJx64Assembler methodsFor: 'accessing registers' stamp: 'MartinMcClure 1/27/2013 20:54'! SPL ^ SPL! ! !AJMMRegister commentStamp: '' prior: 48120873! I am register used for the MMX integer instructions on IA-32 processors. MMX registers are 64Bit wide, depending on the instructions used the register is used either as 1 x 64bit value, 2 x 32bit values, 4 x 16bit values or 8 x 8bit values. Note that the MMX register overlap with the floating point register and only use the lower 64bits of the 80bits FPU registers.! !AJMMRegister methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 11:32'! influencingRegisters "MMX registers overlap with the ST register" self shouldBeImplemented.! ! !AJMMRegister methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:28'! isX86 ^ true! ! !AJx87Register commentStamp: '' prior: 48121305! I am an x87 Floating Point register (ST0 - ST7) used in the FPU stack. The lower 64bit of the floating point ST registers are shared with the MMX registers.! !AJx87Register methodsFor: 'accessing' stamp: 'CamilloBruni 5/7/2013 11:32'! influencingRegisters "ST registers overlap with the MMX register" self shouldBeImplemented.! ! !AJx87Register methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:31'! isX86 ^ true! ! !AJxMMRegister commentStamp: '' prior: 48121519! I am a register used by the SSE (Streaming SIMD Extensions) for the x86 instruction set. The independent XMM registers are 128bit wide and do not overlap with any other existing registers. Depending on the instructions used the XMM registers represent different data types: SSE: 4 x 32bit single precision floats SSE2: 2 x 64bit double prexision floats 2 x 64bit integers 4 x 32bit integers 8 x 16bit short integers 16 x 8bit bytes/characters! !AJxMMRegister methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:33'! isX86 ^ self index < 8! ! !AJx86Instruction methodsFor: 'consistency' stamp: 'MartinMcClure 2/9/2013 14:15'! checkOperandsForConflict "Signal an error if the given operands cannot be used together. Must be sent after operands are set." | prohibited required | required := self requiresRex. prohibited := false. operands do: [ :op | (op isInteger not and: [ op prohibitsRex ]) ifTrue: [ prohibited := true ] ]. prohibited & required ifTrue: [ self error: 'Mix of operands that require and prohibit a REX prefix' ]! ! !AJx86Instruction methodsFor: 'code generation' stamp: 'MartinMcClure 1/4/2013 22:14' prior: 17061242! emitRexForOp1: op1 op2: op2 "op1 is the general-purpose register argument (or a register number). op2 is the reg/mem argument. In 64-bit mode, the instruction's default operation size is 32 bits. Use of the REX.W prefix promotes operation to 64 bits. Use of the REX.R prefix permits access to additional registers (R8-R15) for the op1 (reg) register. Use of the REX.B prefix permits access to additional registers (R8-R15) for the op2 (r/m) register, or the base register of op2 if register indirect. Use of the REX.X prefix permits access to additional registers (R8-R15) for the index register of op2, if indexed. See the summary chart at the beginning of this section for encoding data and limits." | requires64Bit | "no-op in 32 bit mode" self is32BitMode ifTrue: [ ^ self ]. op1 isInteger ifTrue: [ ^ self emitRexForInteger: op1 op2: op2 ]. requires64Bit := op1 is64 or: [ op2 isReg and: [ op2 is64 ] ]. self emitRexPrefixW: requires64Bit R: op1 isUpperBank X: op2 hasUpperBankIndex B: op2 isUpperBank! ! !AJx86Instruction methodsFor: 'code generation' stamp: 'MartinMcClure 1/27/2013 16:24' prior: 17062482! emitRexPrefixW: w R: r X: x B: b " field bit def - 7-4 2r0100 REX prefix identifier W 3 0 = Operand size determined by CS.D 1 = 64 Bit Operand Size R 2 Extension of the ModR/M reg field X 1 Extension of the SIB index field B 0 Extension of the ModR/M r/m field. SIB base field, or Opcode reg field " self requiresRex ifTrue: [ self is32BitMode ifTrue: [ self error: 'Attempt to use a 64-bit-specific instruction or operand in 32-bit mode' ] ifFalse: [ self emitByte: 2r0100 << 4 | (w asBit << 3) | (r asBit << 2) | (x asBit << 1) | b asBit ] ]! ! !AJx86Instruction methodsFor: 'code generation' stamp: 'MartinMcClure 1/4/2013 22:27' prior: 17063523! emitScale: shift index: indexCode base: baseCode self emitByte: ((shift << 3) + (indexCode bitAnd: 7) << 3) + (baseCode bitAnd: 7)! ! !AJx86Instruction methodsFor: 'testing' stamp: 'MartinMcClure 1/27/2013 15:47'! requiresRex ^false! ! !AJx86Registers commentStamp: '' prior: 48122057! I am a SHaredPool which initializes all the registers needed by the Assmbler.! !AJx86Registers class methodsFor: 'accessing' stamp: 'MarcusDenker 5/7/2013 15:27' prior: 17136211! code: registerCode "Access a register by its code. Example: RBP == (self code: RBP code)" | registerName | self flag: 'XXX now this is some ugly code... add an instance variable for the requiresRex boolean instead of encoding it in #code'. registerName := Codes at: registerCode ifAbsent: [ Codes at: registerCode + 16r100 ifAbsent: [ Codes at: registerCode + 16r200 ifAbsent: [ KeyNotFound signalFor: registerCode ] ] ]. ^ self classPool at: registerName! ! !AJx86Registers class methodsFor: 'accessing' stamp: 'MartinMcClure 1/30/2013 21:13'! generalPurposeWithIndex: index size: numBytes requiresRex: requiresRex prohibitsRex: prohibitsRex "Access a register by its properties. Example: RBP == (self generalPurposeWithIndex: RBP index size: RBP size requiresRex: RBP requiresRex prohibitsRex: RBP prohibitsRex )" | type code | type := numBytes = 1 ifTrue: [ 0 ] ifFalse: [ numBytes = 2 ifTrue: [ 16r10 ] ifFalse: [ numBytes = 4 ifTrue: [ 16r20 ] ifFalse: [ numBytes = 8 ifTrue: [ 16r30 ] ifFalse: [ self error: 'Size must be 1, 2, 4, or 8 bytes' ] ] ] ]. code := type + index. requiresRex ifTrue: [ code := code + RegRequiresRexMask ]. prohibitsRex ifTrue: [ code := code + RegProhibitsRexMask ]. ^ self classPool at: (Codes at: code)! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 14:46' prior: 17154952! initialize "AJx86Registers initialize" self classPool at: #Codes put: IdentityDictionary new. self initializeGeneralPurpose8BitRegisters. self initializeGeneralPurpose16BitRegisters. self initializeGeneralPurpose32BitRegisters. self initializeGeneralPurpose64BitRegisters. self initializeInstructionPointerRegisters. self initializeX87Registers. self initializeMMXRegisters. self initializeSSERegisters.! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 09:57' prior: 17155452! initializeGeneralPurpose16BitRegisters "initialize general purpose 16 bit registers " self registerBase: 16r10 class: AJx86GPRegister rex: #dontCare values: #(#AX #CX #DX #BX #SP #BP #SI #DI); registerBase: 16r18 class: AJx86GPRegister rex: #required values: #(#R8W #R9W #R10W #R11W #R12W #R13W #R14W #R15W)! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 09:58' prior: 17155806! initializeGeneralPurpose32BitRegisters "initialize general purpose 32 bit registers " self registerBase: 16r20 class: AJx86GPRegister rex: #dontCare values: #(#EAX #ECX #EDX #EBX #ESP #EBP #ESI #EDI); registerBase: 16r28 class: AJx86GPRegister rex: #required values: #(#R8D #R9D #R10D #R11D #R12D #R13D #R14D #R15D)! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'CamilloBruni 5/21/2013 17:28' prior: 17156162! initializeGeneralPurpose64BitRegisters "initialize general purpose 64 bit registers" self registerBase: 16r30 class: AJx86GPRegister rex: #dontCare values: #(#RAX #RCX #RDX #RBX #RSP #RBP #RSI #RDI); registerBase: 16r38 class: AJx86GPRegister rex: #required values: #(#R8 #R9 #R10 #R11 #R12 #R13 #R14 #R15)! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 10:06' prior: 17156503! initializeGeneralPurpose8BitRegisters "general purpose 8 bit registers " self registerBase: 0 class: AJx86GPRegister rex: #dontCare values: #(#AL #CL #DL #BL); registerBase: 4 class: AJx86GPRegister rex: #prohibited values: #(#AH #CH #DH #BH); registerBase: 4 class: AJx86GPRegister rex: #required values: #(#SPL #BPL #SIL #DIL #R8B #R9B #R10B #R11B #R12B #R13B #R14B #R15B)! ! !AJx86Registers class methodsFor: 'method compilation' stamp: 'CamilloBruni 7/17/2012 11:14' prior: 37032067! installRegisterAccessors "this method creates simple accessors for all registers" | registerAccessorsCategory | registerAccessorsCategory := 'accessing registers'. "remove all methods in the 'accessing register' category" self class methodDict values select: [ :method | method category = registerAccessorsCategory ] thenDo: [ :method | self class removeSelector: method selector ]. self all do: [ :register | | method | "install the direct accessor on this class" self installRegister: register accessorCategory: registerAccessorsCategory. "install the accessor on the assembler" self installRegister: register accessorCategory: registerAccessorsCategory on: (register isX86 ifTrue: [ AJx86Assembler ] ifFalse: [ AJx64Assembler ])] displayingProgress: [ :each| each name ].! ! !AJx86Registers class methodsFor: 'initialization' stamp: 'MartinMcClure 1/27/2013 09:56'! registerBase: base class: regClass rex: rexSymbol values: names | val | val := 0. rexSymbol == #required ifTrue: [ val := 16r100 ]. rexSymbol == #prohibited ifTrue: [ val := 16r200 ]. val := val + base. names do: [ :regName | | reg | reg := regClass code: val name: regName. self classPool at: regName put: reg. Codes at: val put: regName. val := val + 1 ]! ! AJx86GPRegister removeSelector: #printAsMemBase! AJx86Assembler removeSelector: #strackFrameValueAtOffset:! AJx86InstructionDescription removeSelector: #upperBankHighByteGuardOp1:op2:! "AsmJit-x86"! !AJStackAlignmentTests methodsFor: 'utility'! newAssembler ^ AJx86Assembler new! ! !AJStackAlignmentTests methodsFor: 'tests'! testJumps | asm callInfo | asm := self newAssembler. asm noStackFrame. asm jmp: #foo; nop; nop; nop; nop; nop; nop; nop; nop; label: #foo. ^ asm generatedCode.! ! !AJStackAlignmentTests methodsFor: 'tests'! testNewProtocolForAlignedCalls | asm callInfo | asm := self newAssembler. asm cdeclCall: [:call | call push: EAX; push: EAX; push: 4. asm call: EAX. callInfo := call. ] alignment: 32. asm generatedCode. "to analyze instructions" self assert: callInfo stackSize = 12. self assert: callInfo needsAlignment ! ! !AJx64AssemblerTests class methodsFor: 'as yet unclassified'! shouldInheritSelectors ^ true! ! !AJx64AssemblerTests methodsFor: 'utility'! newAssembler ^ AJx64Assembler new noStackFrame; yourself! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:30'! testAssembly0 self assert: [ :a | a mov: 16rfeedface -> RAX ] bytes: #[72 184 206 250 237 254 0 0 0 0]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:30'! testAssembly01 self assert: [ :a | self assert: (a reg: 8 size: 4) = R8D. "mov $0xfeedface,%r8d" a mov: 16rfeedface asUImm to: R8D ] bytes: #[65 184 206 250 237 254]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:31'! testAssembly1 self assert: [ :a| a push: a RBP; mov: a RSP -> a RBP; mov: 1024 -> a RAX; mov: a RBP -> a RSP; pop: a RBP; ret.] bytes: #[ 85 72 139 236 72 199 192 0 4 0 0 72 139 229 93 195]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:31'! testAssembly2 self assert: [ :a| asm push: a BP; mov: a SP -> a BP; mov: 16r400 -> a RAX; mov: a BP -> a SP; pop: a RSP; ret. ] bytes: #[ 102 85 102 139 236 72 199 192 0 4 0 0 102 139 229 92 195] ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:12'! testAssembly3 " instructions without operands. (AJInstructionDescription instructions select: [:each | each group = #emit]) keys asSortedCollection " | str | str := #( #cbw 16r66 16r98 #cdq 16r99 #cdqe 16r48 16r98 #clc 16rF8 #cld 16rFC #cmc 16rF5 #cpuid 16r0F 16rA2 #cqo 16r48 16r99 "64 bit " #cwd 16r66 16r99 #cwde 16r98 "#daa 16r27 32 bit" "#das 16r2F 32 bit" #emms 16r0F 16r77 #f2xm1 16rD9 16rF0 #fabs 16rD9 16rE1 #fchs 16rD9 16rE0 #fclex 16r9B 16rDB 16rE2 #fcompp 16rDE 16rD9 #fcos 16rD9 16rFF #fdecstp 16rD9 16rF6 #fincstp 16rD9 16rF7 #finit 16r9B 16rDB 16rE3 #fld1 16rD9 16rE8 #fldl2e 16rD9 16rEA #fldl2t 16rD9 16rE9 #fldlg2 16rD9 16rEC #fldln2 16rD9 16rED #fldpi 16rD9 16rEB #fldz 16rD9 16rEE #fnclex 16rDB 16rE2 #fninit 16rDB 16rE3 #fnop 16rD9 16rD0 #fpatan 16rD9 16rF3 #fprem 16rD9 16rF8 #fprem1 16rD9 16rF5 #fptan 16rD9 16rF2 #frndint 16rD9 16rFC #fscale 16rD9 16rFD #fsin 16rD9 16rFE #fsincos 16rD9 16rFB #fsqrt 16rD9 16rFA #ftst 16rD9 16rE4 #fucompp 16rDA 16rE9 #fwait 16r9B #fxam 16rD9 16rE5 #fxtract 16rD9 16rF4 #fyl2x 16rD9 16rF1 #fyl2xp1 16rD9 16rF9 #int3 16rCC #leave 16rC9 #lfence 16r0F 16rAE 16rE8 #lock 16rF0 "prefix" #mfence 16r0F 16rAE 16rF0 #monitor 16r0F 16r01 16rC8 #mwait 16r0F 16r01 16rC9 #nop 16r90 #pause 16rF3 16r90 "#popad 16r61 32 bit" #popfd 16r9D #popfq 16r48 16r9D "- 64 bit " "#pushad 16r60 32 bit" #pushf 16r66 16r9C "#pushfd 16r9C 32 bit" #pushfq 16r9c" -64 bit" #rdtsc 16r0F 16r31 #rdtscp 16r0F 16r01 16rF9 #sahf 16r9E #sfence 16r0F 16rAE 16rF8 #stc 16rF9 #std 16rFD #ud2 16r0F 16r0B #std 16rFD "dummy" ) readStream. [ str atEnd ] whileFalse: [ | instr tst bytes | instr := str next. tst := OrderedCollection new. [ str peek isInteger ] whileTrue: [ tst add: str next ]. asm reset noStackFrame. asm perform: instr. bytes := asm bytes. self assert: (bytes = tst asByteArray ) description: instr, ' failed. expected ', tst asByteArray printString, ' but got ', bytes asByteArray printString. ]. ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 20:37'! testAssemblyImmAddr "This is not supported in 64-bit mode -- the ModRM value for this results in RIP-relative addressing." super testAssemblyImmAddr! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:32'! testAssemblyMemBase self assert: [ :a | a mov: a RAX ptr to: a EAX ] bytes: #[ 16r8B 2r00000000 ]. self assert: [ :a | a mov: a RSP ptr to: a EAX] bytes: #[ 16r8B 16r04 16r24 ]. self assert: [ :a | a mov: a RBP ptr to: a EAX ] bytes: #[ 16r8B 16r45 16r00 ].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:14'! testAssemblyMemBaseDisp asm mov: RAX ptr + 1 -> EAX; mov: RBX ptr + ECX -> EAX. self assert: asm bytes = #(16r8B 16r40 16r01 16r8B 16r04 16r0B) asByteArray! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:14'! testAssemblyMemBaseDisp2 asm mov: RAX ptr - 1 -> EAX; mov: (RBX ptr + ECX) * 2 - 5 -> EAX. self assert: asm bytes = #(16r8B 16r40 16rFF 16r8B 16r44 16r4B 16rFB) asByteArray! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:14'! testAssemblyMemBytes asm mov: (RSI ptr + ECX size: 1) -> BL; mov: BL -> (RSI ptr + ECX size: 1). self assert: asm bytes = #(16r8A 16r1C 16r0E 16r88 16r1C 16r0E) asByteArray! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 5/15/2012 14:19'! testBitTest "8 Bit =====================================================" self asmShould: [ :a| a bt: a R8B with: 16r1. ] raise: Error. "16 bit =====================================================" "lower bank 16bit register opcode + ModR/M" self assert: [ :a| a bt: a AX with: 16r01 ] bytes: #[ "16bit mode" 16r66 "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01]. "upper bank 16bit register opcode + ModR/M" self assert: [ :a| a bt: a R8W with: 16r01 ] bytes: #[ "16bit mode" 16r66 "REX" 2r01000001 "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01]. "32 bit =====================================================" "lower bank 32bit register opcode + ModR/M" self assert: [ :a| a bt: a EAX with: 16r01 ] bytes: #[ "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01]. "upper bank 32bit register opcode + ModR/M" self assert: [ :a| a bt: a R8D with: 16r01 ] bytes: #[ "REX" 2r01000001 "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01]. "64 bit =====================================================" "lower bank 32bit register opcode + ModR/M" self assert: [ :a| a bt: a RAX with: 16r01 ] bytes: #[ "REX" 2r01001000 "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01]. "upper bank 32bit register opcode + ModR/M" self assert: [ :a| a bt: a R8 with: 16r01 ] bytes: #[ "REX" 2r01001001 "OP" 16r0f 16rba "ModRM" 2r11100000 "immediate" 16r01].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/27/2013 21:32'! testByteRegs4through7 "Test valid uses of byte registers SPL BPL SIL DIL, only available in 64-bit mode, and when using a REX prefix. Can't be used in the same instruction with AH, CH, DH, or BH -- this is tested in testHighByteRegistersInvalid." | byteRegs op2codes opBothCodes mixedWidthOpCodes byteRMOperands wideRegisters | "byteRegs -- register -> contribution to ModRM byte when used as the reg operand" byteRegs := {(SPL -> 16r20). (BPL -> 16r28). (SIL -> 16r30). (DIL -> 16r38)}. "opBothCodes -- #selector -> #(opcode when byteReg second arg, opcode when byteReg first arg)" opBothCodes := {(#adc:with: -> #(16r10 16r12)). (#add:with: -> #(16r00 16r02)). (#mov:with: -> #(16r88 16r8A)). (#cmp:with: -> #(16r38 16r3A)). (#or:with: -> #(16r08 16r0A)). (#sbb:with: -> #(16r18 16r1A)). (#sub:with -> #(16r28 16r2A)). (#xor:with: -> #(16r30 16r32))}. "op2Codes -- #selector -> multiByteBytecode. ByteReg is always the second arg" op2codes := {(#cmpxchg:with: -> #[16r0F 16rB0]). (#test:with: -> #[16r84]). (#xadd:with: -> #[16r0F 16rC0]) "xchg is not actually supported at this time (#xchg:with: -> #[16r86])"}. "mixedWidthOpCodes -- #selector -> multiByteBytecode. ByteReg is always the second arg" mixedWidthOpCodes := {(#movsx:with: -> #[16r0F 16rBE]). (#movzx:with: -> #[16r0F 16rB6])}. "**** Handle #crc32:with: separately due to its legacy prefix ****" "wideRegisters -- register -> #[REX prefix, contribution to ModRM byte when used as r/m operand]" wideRegisters := {(EAX -> #[16r40 16rC0]). (RAX -> #[16r48 16rC0]). (R8D -> #[16r44 16rC0]). (R8 -> #[16r4C 16rC0])}. "byteRMOperands -- operand -> #(REX prefix, #[modRMContribution, SIB and displacement bytes if any])" byteRMOperands := {(SPL -> #(16r40 #[16rC4])). (BPL -> #(16r40 #[16rC5])). (SIL -> #(16r40 #[16rC6])). (DIL -> #(16r40 #[16rC7])). (R8B -> #(16r41 #[16rC0])). (AL -> #(16r40 #[16rC0])). (R8 ptr -> #(16r41 #[16r00])). (RAX ptr -> #(16r40 #[16r00])). (R8 ptr + 16r12 -> #(16r41 #[16r40 16r12])). (RAX ptr + 16r12 -> #(16r40 #[16r40 16r12])). (R8 ptr + 16r1234 -> #(16r41 #[16r80 16r34 16r12 16r00 16r00])). (RAX ptr + 16r1234 -> #(16r40 #[16r80 16r34 16r12 16r00 16r00])). ((RAX ptr + R8) * 2 -> #(16r42 #[16r04 16r40])). ((RAX ptr + RAX) * 2 -> #(16r40 #[16r04 16r40])). ((RAX ptr + R8) * 4 + 16r12 -> #(16r42 #[16r44 16r80 16r12])). ((RAX ptr + RAX) * 4 + 16r12 -> #(16r40 #[16r44 16r80 16r12])). ((RAX ptr + R8) * 8 + 16r1234 -> #(16r42 #[16r84 16rC0 16r34 16r12 16r00 16r00])). ((RAX ptr + RAX) * 8 + 16r1234 -> #(16r40 #[16r84 16rC0 16r34 16r12 16r00 16r00]))}. byteRegs do: [ :reg | byteRMOperands do: [ :rm | opBothCodes do: [ :opcode | | opcodeByte op1 op2 | op1 := reg key. op2 := rm key. opcodeByte := opcode value last. self assert: [ :a | a perform: opcode key with: op1 with: op2 ] bytes: (ByteArray with: rm value first with: opcodeByte with: reg value | rm value last first) , rm value last allButFirst "REX" "ModRM" "SIB and displacement" "Need to add the necessary data to allow testing the reverse order of operands." ]. op2codes do: [ :opcode | self assert: [ :a | a perform: opcode key with: rm key with: reg key ] bytes: ((ByteArray with: rm value first) , opcode value copyWith: reg value | rm value last first) , rm value last allButFirst "REX" "ModRM" "SIB and displacement" ] ]. mixedWidthOpCodes do: [ :opcode | wideRegisters do: [ :rm | self assert: [ :a | a perform: opcode key with: rm key with: reg key ] bytes: ((ByteArray with: rm value first) , opcode value copyWith: reg value >> 3 | rm value last) "REX" "ModRM" "SIB and displacement" ] ] ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/27/2013 16:46'! testCall "relative calls ===================================================================" "8bit offset" self assert: [:a | a call: 16r12 ] bytes: #[ 16rE8 16r12 0 0 0]. "16bit offset" self assert: [:a | a call: 16r1234 ] bytes: #[ 16rE8 16r34 16r12 0 0 ]. "32bit offset" self assert: [:a | a call: 16r12345678 ] bytes: #[ 16rE8 16r78 16r56 16r34 16r12 ]. "indirect calls ===================================================================" "lower bank register" self assert: [:a | a call: asm RAX ] bytes: #[ 16rFF 2r11010000 ]. self assert: [:a | a call: asm RDI ] bytes: #[ 16rFF 2r11010111 ]. "upper bank register (require REX prefix)" self assert: [:a | a call: asm R8 ] bytes: #[ 2r01001001 16rFF 2r11010000 ]. self assert: [:a | a call: asm R15 ] bytes: #[ 2r01001001 16rFF 2r11010111 ]. "double indirect calls (with ModR/M) ==============================================" "mod = 2r00" "lower bank register" self assert: [:a | a call: a RAX ptr ] bytes: #[ 16rFF 2r00010000 ]. self assert: [:a | a call: a RDI ptr ] bytes: #[ 16rFF 2r00010111 ]. "upper bank register (require REX prefix)" self assert: [:a | a call: a R8 ptr ] bytes: #[ 2r01000001 16rFF 2r00010000 ]. self assert: [:a | a call: a R15 ptr ] bytes: #[ 2r01000001 16rFF 2r00010111 ]. "double indirect calls with offsets ==============================================" "mod = 2r01 hence with a folllwing 8bit offset" "lower bank register" self assert: [:a | a call: a RAX ptr + 8 ] bytes: #[ 16rFF 2r01010000 8]. self assert: [:a | a call: a RDI ptr + 8 ] bytes: #[ 16rFF 2r01010111 8]. "upper bank register (require REX prefix)" self assert: [:a | a call: a R8 ptr + 8] bytes: #[ 2r01000001 16rFF 2r01010000 8]. self assert: [:a | a call: a R15 ptr + 8] bytes: #[ 2r01000001 16rFF 2r01010111 8]. "double indirect calls with offsets ==============================================" "mod = 2r10 hence with a following 32bit offset" "lower bank register" self assert: [:a | a call: a RAX ptr + 16r12345678 ] bytes: #[ 16rFF 2r10010000 16r78 16r56 16r34 16r12]. self assert: [:a | a call: a RDI ptr + 16r12345678 ] bytes: #[ 16rFF 2r10010111 16r78 16r56 16r34 16r12]. "upper bank register (require REX prefix)" self assert: [:a | a call: a R8 ptr + 16r12345678] bytes: #[ 2r01000001 16rFF 2r10010000 16r78 16r56 16r34 16r12]. self assert: [:a | a call: a R15 ptr + 16r12345678] bytes: #[ 2r01000001 16rFF 2r10010111 16r78 16r56 16r34 16r12].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 19:31'! testCallInvalid "on 64 bit .. - only 32bit relative offset are allowed - only 64bit registers for indirect addresses" "relative calls with 64bit addresses are not supported" self asmShould: [ :a | a call: 16r123456789ABCDEF ] raise: Error. AJx86Registers generalPurpose do: [ :register | register is64 ifFalse: [ self asmShould: [ :a | a call: register ] raise: Error ] ifTrue: [ self deny: (self bytes: [ :a | a call: register ]) isEmpty ] ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/26/2013 15:50'! testHighByteRegistersInvalid "Can't access AH, BH, CH, DH if a REX byte is required. This test attempts to test every instruction supported by AsmJit that can access an 8-bit general-purpose register AND also require a REX prefix." | legacyHRegs op2codes opBothCodes mixedWidthOpCodes byteOperandsRequiringRex wideRegistersRequiringRex | legacyHRegs := {AH. CH. DH. BH}. opBothCodes := #(#adc:with: #add:with: #mov:to: #cmp:with: #or:with: #sbb:with: #sub:with #xchg:with: #xor:with:). op2codes := #(#cmpxchg:with: #test:with: #xadd:with:). mixedWidthOpCodes := #(#crc32:with: #movsx:to: #movzx:to:). wideRegistersRequiringRex := {RAX. R8D}. "RAX requires REX.W, R8D requires REX.R or REX.B" byteOperandsRequiringRex := {SPL. BPL. SIL. DIL. R8B. (R8 ptr). (R8 ptr + 16r12). (R8 ptr + 16r1234). ((RAX ptr + R8) * 2). ((RAX ptr + R8) * 4 + 16r12). ((RAX ptr + R8) * 8 + 16r1234)}. legacyHRegs do: [ :hreg | byteOperandsRequiringRex do: [ :operand | opBothCodes do: [ :opcode | self asmShould: [ :a | a perform: opcode with: hreg with: operand ] raise: Error. self asmShould: [ :a | a perform: opcode with: operand with: hreg ] raise: Error ]. op2codes do: [ :opcode | self asmShould: [ :a | a perform: opcode with: operand with: hreg ] raise: Error ] ]. mixedWidthOpCodes do: [ :opcode | wideRegistersRequiringRex do: [ :wideReg | self asmShould: [ :a | a perform: opcode with: wideReg with: hreg ] raise: Error ] ] ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:14'! testImmLabels "test immediates with labels" | code pos | asm mov: RAX ptr -> EAX; mov: (16rFFFFFFFF asUImm label: (asm labelNamed: #foo)) to: EAX. code := asm generatedCode. pos := code offsetAt: #foo. self assert: (code bytes at: pos + 1) = 255. self assert: (code bytes at: pos + 2) = 255. self assert: (code bytes at: pos + 3) = 255. self assert: (code bytes at: pos + 4) = 255! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/3/2013 21:36'! testIndexScales self assert: [ :a | a mov: RAX -> ((RCX ptr + RDX) * 1) ] bytes: #[16r48 16r89 16r04 16r11]; assert: [ :a | a mov: RAX -> ((RCX ptr + RDX) * 2) ] bytes: #[16r48 16r89 16r04 16r51]; assert: [ :a | a mov: RAX -> ((RCX ptr + RDX) * 4) ] bytes: #[16r48 16r89 16r04 16r91]; assert: [ :a | a mov: RAX -> ((RCX ptr + RDX) * 8) ] bytes: #[16r48 16r89 16r04 16rD1]. self assert: [ :a | a mov: (RCX ptr + RDX) * 1 -> RAX ] bytes: #[16r48 16r8B 16r04 16r11]; assert: [ :a | a mov: (RCX ptr + RDX) * 2 -> RAX ] bytes: #[16r48 16r8B 16r04 16r51]; assert: [ :a | a mov: (RCX ptr + RDX) * 4 -> RAX ] bytes: #[16r48 16r8B 16r04 16r91]; assert: [ :a | a mov: (RCX ptr + RDX) * 8 -> RAX ] bytes: #[16r48 16r8B 16r04 16rD1]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 20:53'! testInvalidTest "In 64-bit mode, r/m8 cannot be encoded to access the following byte registers if an REX prefix is used: AH, BH, CH, DH." {AH. CH. DH. BH} do: [ :reg | self deny: (self bytes: [ :a | a test: reg with: AL ]) isEmpty. self deny: (self bytes: [ :a | a test: AL with: reg ]) isEmpty. self deny: (self bytes: [ :a | a test: reg with: 16r12 ]) isEmpty. "with an upper bank byte register => requires REX prefix" self asmShould: [ :a | a test: reg with: R8B ] raise: Error. self asmShould: [ :a | a test: R8B with: reg ] raise: Error. "with a 64bit register requring again an REX prefix" self asmShould: [ :a | a test: reg with: RAX ] raise: Error. self asmShould: [ :a | a test: RAX with: reg ] raise: Error ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:36'! testJumps self assert: [:a| a label: #label1; nop; nop; nop; jz: #label1. ] bytes: #[144 144 144 16r74 251 "-5 asByte"]. asm reset; noStackFrame; label: #label1. 126 timesRepeat: [ asm nop ]. asm jz: #label1. self assert: (asm bytes size = 128). self assert: [:a | a reset; noStackFrame; label: #label1; nop; nop; nop; jmp: #label1. ] bytes: #[144 144 144 235 251 ]. self assert: [:a | a reset; noStackFrame; jmp: #label1; label: #label1. ] bytes: #[ 16rEB 0 ]. ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/4/2013 21:57'! testMovHighIndexRegister "Mov that use r8-r15 as an index register, therefore requiring REX.X" self assert: [ :a | a mov: RAX -> ((RCX ptr + R14) * 1) ] bytes: #[16r4A 16r89 16r04 16r31]; assert: [ :a | a mov: (RCX ptr + R14) * 1 -> RAX ] bytes: #[16r4A 16r8B 16r04 16r31]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:37'! testMovImmediate "8bit immediate to 8bit register" self assert: [:a | a mov: 16r12 to: a AL ] bytes: #[16rB0 16r12]. "16bit immediate to 16bit register (requires 16bit fallback prefix)" self assert: [:a | a mov: 16r1234 to: a AX ] bytes: #[16r66 16rB8 16r34 16r12]. "32bit immediate to 32bit register" self assert: [:a | a mov: 16r12345678 to: a EAX ] bytes: #[16rB8 16r78 16r56 16r34 16r12]. "64bit immediate to 64bit register (requires REX prefix)" self assert: [:a | a mov: 16r123456789ABCDEF0 to: a RAX ] bytes: #[2r01001000 16rB8 16rF0 16rDE 16rBC 16r9A 16r78 16r56 16r34 16r12]. "32bit immediate sign-extended to 64bit register (REX prefix)" self assert: [:a | a mov: 16r12345678 to: a RAX] bytes: #[ 2r01001000 16rc7 "ModR/M"16rc0 16r78 16r56 16r34 16r12 ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:37'! testMovMemory "mov memory to 8bit register ==========================" self assert: [:a | a mov: a RCX ptr to: a AL ] bytes: #[16r8A 16r00000001 "ModR/M"]. ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 21:11'! testMovZX "byte to word ========================================" "lower bank 8bit to lower bank 16bit" self assert: [:a | a movzx: a AL to: a AX ] bytes: #[102 15 182 192 ]. "lower bank 8bit to upper bank 16bit" self assert: [:a | a movzx: a AL to: a R8W ] bytes: #[102 68 15 182 192]. "upper bank 8bit to lower bank 16bit" self assert: [:a | a movzx: a R8B to: a AX ] bytes: #[102 65 15 182 192]. "upper bank 8bit to upper bank 16bit" self assert: [:a | a movzx: a R8B to: a R8W ] bytes: #[102 69 15 182 192]. "byte to doubleword ================================" "lower bank 8bit to lower bank 32bit" self assert: [:a | a movzx: a AL to: a EAX ] bytes: #[15 182 192 ]. "lower bank 8bit to upper bank 32bit" self assert: [:a | a movzx: a AL to: a R8D ] bytes: #[68 15 182 192]. "upper bank 8bit to lower bank 32bit" self assert: [:a | a movzx: a R8B to: a EAX ] bytes: #[65 15 182 192]. "upper bank 8bit to upper bank 32bit" self assert: [:a | a movzx: a R8B to: a R8D ] bytes: #[69 15 182 192]. "byte to quadword ===================" "lower bank 8bit to lower bank 64bit" self assert: [:a | a movzx: a AL to: a RAX ] bytes: #[72 15 182 192 ]. "lower bank 8bit to upper bank 64bit" self assert: [:a | a movzx: a AL to: a R8 ] bytes: #[76 15 182 192]. "upper bank 8bit to lower bank 64bit" self assert: [:a | a movzx: a R8B to: a RAX ] bytes: #[73 15 182 192 ]. "upper bank 8bit to upper bank 64bit" self assert: [:a | a movzx: a R8B to: a R8 ] bytes: #[77 15 182 192]. "word to quadword ===================" "lower bank 16bit to lower bank 64bit" self assert: [:a | a movzx: a AX to: a RAX ] bytes: #[72 15 183 192]. "lower bank 16bit to upper bank 64bit" self assert: [:a | a movzx: a AX to: a R8 ] bytes: #[76 15 183 192]. "upper bank 16bit to lower bank 64bit" self assert: [:a| a movzx: a R8W to: a RAX ] bytes: #[73 15 183 192]. "upper bank 16bit to upper bank 64bit" self assert: [:a | a movzx: a R8W to: a R8 ] bytes: #[77 15 183 192].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 19:34'! testMovZxSxInvalid {AH. CH. DH. BH} do: [ :reg | self deny: (self bytes: [ :a | a movzx: reg to: a EAX ]) isEmpty. self asmShould: [ :a | a movzx: reg to: a RAX ] raise: Error ]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:40'! testMul "8bit unsigned multiplication ==================================" "lower bank register: AX := AL * CL" self assert: [ :a | a mul: a CL] bytes: #[ 16rF6 "ModR/M" 2r11100001 ]. "upper bank register needs an REX prefix: AX := AL * R8B" self assert: [ :a | a mul: a R9B] bytes: #[ 2r01000001 16rF6 2r11100001]. "16bit unsigned multiplication ==================================" "DX:AX := AX * CX" self assert: [ :a | a mul: a CX] bytes: #[ "16bit fallback" 16r66 16rF7 2r11100001]. "32bit unsigned multiplication ==================================" "EDX:EAX := EAX * ECX" self assert: [ :a | a mul: a ECX] bytes: #[ 16rF7 2r11100001 ]. "64bit unsigned multiplication ==================================" "RDX:RAX := RAX * RCX" self assert: [ :a| a mul: a RCX] bytes: #[ 2r01001000 16rF7 2r11100001].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:42'! testNeg "8bit ======================================================" self assert: [ :a | a neg: a AL] bytes: #[ 16rF6 "ModR/M" 2r11011000 ]. "8bit upper bank with REX" self assert: [ :a | a neg: a R8B] bytes: #[ 2r01000001 16rF6 "ModR/M" 2r11011000 ]. "16bit with fallback =======================================" self assert: [ :a | a neg: a AX] bytes: #[ 16r66 16rF7"ModR/M" 2r11011000 ]. "16bit upper bank with REX" self assert: [ :a | a neg: a R8W] bytes: #[ 16r66 2r01000001 16rF7"ModR/M" 2r11011000 ]. "word 16bit IP relative " self assert: [ :a | a neg: a IP ptr16 + 16r12345678] bytes: #[16r66 16rF7 "ModR/M"2r00011101 16r78 16r56 16r34 16r12]. "32bit ====================================================" self assert: [ :a | a neg: a EAX] bytes: #[ 16rF7"ModR/M" 2r11011000 ]. "32bit upper bank with REX" self assert: [ :a | a neg: a R8D] bytes: #[ 2r01000001 16rF7"ModR/M" 2r11011000 ]. "negate double word 32bit EIP relative " self assert: [ :a | a neg: a EIP ptr32 + 16r12345678] bytes: #[16rF7 "ModR/M"2r00011101 16r78 16r56 16r34 16r12]. "64bit with REX ==========================================" self assert: [ :a | a neg: a RAX] bytes: #[ 2r01001000 16rF7 "ModR/M"2r11011000 ]. "64bit upper bank" self assert: [ :a | a neg: a R8] bytes: #[ 2r01001001 16rF7 "ModR/M"2r11011000 ]. "negate quadword 64bit RIP relative " self assert: [ :a | a neg: a RIP ptr64 + 16r12345678] bytes: #["REX"2r01001000 16rF7 "ModR/M"2r00011101 16r78 16r56 16r34 16r12]. ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:42'! testPop "lower bank 64bit register" self assert: [:a | a pop: a RSP ] bytes: #[ 16r5c ].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:42'! testPush "lower bank 64bit register" self assert: [:a | a push: a RSP ] bytes: #[ 16r54 "16r50 + RSP index" ].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 12/15/2012 13:13'! testSyscall self assert: [ :a | a syscall ] bytes: #[16r0F 16r05]! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:44'! testTest "8bit operand and lower bank 8bit register" self assert: [:a | a test: a CL with: 16r12 ] bytes: #[246 193 16r12]. "8bit operand and uppe bank 8bit register" self assert: [:a | a test: a R8B with: 16r12] bytes: #[2r01000001 2r11110110 2r11000000 16r12]. "16bit operand and lower bank 16bit register" self assert: [:a | a test: a CX with: 16r1234] bytes: #[102 247 193 16r34 16r12]. "16bit operand and uppe bank 16bit register" self assert: [:a | a test: a R8W with: 16r1234] bytes: #[102 65 247 192 16r34 16r12]. "32bit operand and lower bank 32bit register" self assert: [:a | a test: a ECX with: 16r12345678] bytes: #[247 193 16r78 16r56 16r34 16r12]. "32bit operand and uppe bank 32bit register" self assert: [:a | a test: a R8D with: 16r12345678] bytes: #[65 247 192 16r78 16r56 16r34 16r12]. "32bit operand and lower bank 64bit register" self assert: [:a| a test: a RCX with: 16r12345678] bytes: #[72 247 193 16r78 16r56 16r34 16r12]. "32bit operand and uppe bank 64bit register" self assert: [:a| a test: a R8 with: 16r12345678] bytes: #[73 247 192 16r78 16r56 16r34 16r12]. ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:44'! testXor "8bit register xor 8bit immediate ==================================" "lower bank 8bit register opcode + ModR/M" self assert: [ :a | a xor: a CL with: 16r12] bytes: #[ 16r80 2r11110001 16r12]. "upper bank 8bit register requiring REX" self assert: [ :a | a xor: a R8B with: 16r12] bytes: #[2r01000001 16r80 2r11110000 16r12]. "16bit register xor 8bit immediate ==================================" "lower bank 16bit register" self assert: [ :a | a xor: a CX with: 16r1234] bytes: #[16r66 16r81 2r11110001 16r34 16r12]. "upper bank 16bit" self assert: [ :a | a xor: a R8W with: 16r1234] bytes: #[16r66 2r01000001 16r81 2r11110000 16r34 16r12]. "32bit register =====================================================" "lower bank 32bit register" self assert: [ :a | a xor: a ECX with: 16r12345678] bytes: #[16r81 2r11110001 16r78 16r56 16r34 16r12]. "upper bank register requiring REX prefix" self assert: [ :a | a xor: a R8D with: 16r12345678] bytes: #[2r01000001 16r81 2r11110000 16r78 16r56 16r34 16r12] ! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/1/2013 22:45'! testXorFastCode self "shortcut for AL + 8bit immedidate" assert: [ :a | a xor: a AL with: 16r12] bytes: #[ 16r34 16r12]. self "shortcut for AX + 16bit immedidate" assert: [ :a | a xor: a AX with: 16r1234] bytes: #[ 16r66 16r35 16r34 16r12]. self "shortcut for EAX + 16bit immedidate" assert: [ :a | a xor: a EAX with: 16r12345678] bytes: #[ 16r35 16r78 16r56 16r34 16r12]. self "shortcut for RAX + 32bit immedidate" assert: [ :a | a xor: a RAX with: 16r12345678] bytes: #[ 2r01001000 16r35 16r78 16r56 16r34 16r12].! ! !AJx64AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 1/25/2013 19:41'! testXorInvalid "xor registers with non-matching sizes" self asmShould: [ :a | a xor: AL to: RAX ] raise: Error. self asmShould: [ :a | a xor: RAX to: AL ] raise: Error. self asmShould: [ :a | a xor: R8B to: RAX ] raise: Error. self asmShould: [ :a | a xor: RAX to: R8B ] raise: Error. "in 64bit mode AH CH DH and BH cannot be encoded when an REX prefix is present" {AH. CH. DH. BH} do: [ :reg | self asmShould: [ :a | a xor: reg to: a R8B ] raise: Error ]! ! !AJx86AssemblerTests methodsFor: 'utility'! asmShould: aBlock raise: anError self should: [self bytes: aBlock] raise: anError.! ! !AJx86AssemblerTests methodsFor: 'utility' stamp: 'CamilloBruni 8/22/2012 14:47'! assert: aBlock bytes: aByteArray self assert: (self bytes: aBlock) equals: aByteArray .! ! !AJx86AssemblerTests methodsFor: 'utility' stamp: 'MartinMcClure 1/1/2013 22:19'! bytes: aBlock asm := self newAssembler. aBlock value: asm. ^ asm bytes! ! !AJx86AssemblerTests methodsFor: 'utility' stamp: 'CamilloBruni 4/3/2012 09:56'! newAssembler ^ AJx86Assembler new noStackFrame; yourself! ! !AJx86AssemblerTests methodsFor: 'running'! setUp super setUp. asm := self newAssembler.! ! !AJx86AssemblerTests methodsFor: 'tests-data' stamp: 'CamilloBruni 4/12/2012 14:25'! setUpDataBytes ^ self setUpDataBytesAlign: 1! ! !AJx86AssemblerTests methodsFor: 'tests-data'! setUpDataBytesAlign: alignToBytes asm nop. asm align: alignToBytes. ^ asm db: 16r12.! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssembly1 asm push: EBP; mov: ESP -> EBP; mov: 1024 -> EAX; mov: EBP -> ESP; pop: EBP; ret. self assert: asm bytes = #(85 139 236 184 0 4 0 0 139 229 93 195) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssembly3 " instructions without operands. (AJInstructionDescription instructions select: [:each | each group = #emit]) keys asSortedCollection " | str | str := #( #cbw 16r66 16r98 #cdq 16r99 "#cdqe 64 bit " #clc 16rF8 #cld 16rFC #cmc 16rF5 #cpuid 16r0F 16rA2 "#cqo 64 bit " #cwd 16r66 16r99 #cwde 16r98 #daa 16r27 #das 16r2F #emms 16r0F 16r77 #f2xm1 16rD9 16rF0 #fabs 16rD9 16rE1 #fchs 16rD9 16rE0 #fclex 16r9B 16rDB 16rE2 #fcompp 16rDE 16rD9 #fcos 16rD9 16rFF #fdecstp 16rD9 16rF6 #fincstp 16rD9 16rF7 #finit 16r9B 16rDB 16rE3 #fld1 16rD9 16rE8 #fldl2e 16rD9 16rEA #fldl2t 16rD9 16rE9 #fldlg2 16rD9 16rEC #fldln2 16rD9 16rED #fldpi 16rD9 16rEB #fldz 16rD9 16rEE #fnclex 16rDB 16rE2 #fninit 16rDB 16rE3 #fnop 16rD9 16rD0 #fpatan 16rD9 16rF3 #fprem 16rD9 16rF8 #fprem1 16rD9 16rF5 #fptan 16rD9 16rF2 #frndint 16rD9 16rFC #fscale 16rD9 16rFD #fsin 16rD9 16rFE #fsincos 16rD9 16rFB #fsqrt 16rD9 16rFA #ftst 16rD9 16rE4 #fucompp 16rDA 16rE9 #fwait 16r9B #fxam 16rD9 16rE5 #fxtract 16rD9 16rF4 #fyl2x 16rD9 16rF1 #fyl2xp1 16rD9 16rF9 #int3 16rCC #leave 16rC9 #lfence 16r0F 16rAE 16rE8 #lock 16rF0 "prefix" #mfence 16r0F 16rAE 16rF0 #monitor 16r0F 16r01 16rC8 #mwait 16r0F 16r01 16rC9 #nop 16r90 #pause 16rF3 16r90 #popad 16r61 #popfd 16r9D " #popfq 16r48 16r9D - 64 bit " #pushad 16r60 #pushf 16r66 16r9C #pushfd 16r9C " #pushfq -64 bit" #rdtsc 16r0F 16r31 #rdtscp 16r0F 16r01 16rF9 #sahf 16r9E #sfence 16r0F 16rAE 16rF8 #stc 16rF9 #std 16rFD #ud2 16r0F 16r0B #std 16rFD "dummy" ) readStream. [ str atEnd ] whileFalse: [ | instr tst | instr := str next. tst := OrderedCollection new. [ str peek isInteger ] whileTrue: [ tst add: str next ]. asm reset noStackFrame. asm perform: instr. self assert: (asm bytes = tst asByteArray ) ]. ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'IgorStasenko 5/28/2012 02:58'! testAssemblyImmAddr "test generating immediate address, note GDB disassembling it to: 0x1fab : 0x8b 0x05 0xef 0xbe 0xad 0xde 0x00001fab : mov 0xdeadbeef,%eax which is WRONG!! " asm mov: 16rdeadbeef asUImm ptr32 to: asm EAX. " 8b05efbeadde mov eax, [deadbeef] " self assert: asm bytes = #[139 5 239 190 173 222] ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssemblyMemBase asm mov: EAX ptr -> EAX; mov: ESP ptr -> EAX; mov: EBP ptr -> EAX. self assert: asm bytes = #(16r8B 0 16r8B 16r04 16r24 16r8B 16r45 16r00) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssemblyMemBaseDisp asm mov: EAX ptr + 1 -> EAX; mov: EBX ptr + ECX -> EAX. self assert: asm bytes = #(16r8B 16r40 16r01 16r8B 16r04 16r0B) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssemblyMemBaseDisp2 asm mov: EAX ptr - 1 -> EAX; mov: EBX ptr + ECX * 2 - 5 -> EAX. self assert: asm bytes = #(16r8B 16r40 16rFF 16r8B 16r44 16r4B 16rFB) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testAssemblyMemBytes asm mov: ((ESI ptr + ECX) size: 1) -> BL; mov: BL -> ((ESI ptr + ECX) size:1). self assert: asm bytes = #(16r8A 16r1C 16r0E 16r88 16r1C 16r0E ) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testBitTest asm bt: EAX with: 0. self assert: asm bytes = #(16r0F 16rBA 16rE0 16r00) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:22'! testCall asm call: EAX; call: EAX ptr - 4; call: EAX ptr. self assert: asm bytes = #(255 208 255 80 252 255 16) asByteArray! ! !AJx86AssemblerTests methodsFor: 'tests-data'! testDataBytes |data| data := self setUpDataBytes. self assert: asm bytes equals: #[144 16r12].! ! !AJx86AssemblerTests methodsFor: 'tests-data' stamp: 'CamilloBruni 4/12/2012 14:24'! testDataBytesAlignDouble |data| data := self setUpDataBytesAlign: 4. self assert: asm bytes equals: #[144 0 0 0 16r12].! ! !AJx86AssemblerTests methodsFor: 'tests-data' stamp: 'CamilloBruni 4/12/2012 14:24'! testDataBytesAlignQuad |data| data := self setUpDataBytesAlign: 8. self assert: asm bytes equals: #[144 0 0 0 0 0 0 0 16r12].! ! !AJx86AssemblerTests methodsFor: 'tests-data' stamp: 'CamilloBruni 4/12/2012 14:25'! testDataBytesAlignWord |data| data := self setUpDataBytesAlign: 2. self assert: asm bytes equals: #[144 0 16r12].! ! !AJx86AssemblerTests methodsFor: 'tests-data' stamp: 'CamilloBruni 4/19/2012 11:51'! testDataDouble | data| asm nop. data := asm dd: #[16r78 16r56 16r34 16r12]. self assert: asm bytes equals: #[144 16r78 16r56 16r34 16r12].! ! !AJx86AssemblerTests methodsFor: 'tests-data'! testDataWord | data| asm nop. data := asm dw: #[16r34 16r12]. self assert: asm bytes equals: #[144 16r34 16r12]. ! ! !AJx86AssemblerTests methodsFor: 'tests-FPU' stamp: 'CamilloBruni 7/23/2012 15:03'! testFXCH self assert: [ :a| a fxch "the same as: asm fxch: asm ST1" ] bytes: #[ 2r11011001 2r11001001 ] ! ! !AJx86AssemblerTests methodsFor: 'tests-FPU' stamp: 'CamilloBruni 7/23/2012 15:15'! testFXCHST1 self assert: [ :a| a fxch: asm ST1 ] bytes: #[ 2r11011001 2r11001001 ] ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:23'! testForwardJumps asm jmp: #label1; label: #label1. self assert: asm bytes = #(16rEB 0 ) asByteArray. ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:23'! testImmLabels "test immediates with labels" | code pos | asm mov: EAX ptr -> EAX; mov: (16rFFFFFFFF asUImm label: (asm labelNamed: #foo) ) to: EAX. code := asm generatedCode. pos := code offsetAt: #foo. self assert: (code bytes at: pos+1) = 255. self assert: (code bytes at: pos+2) = 255. self assert: (code bytes at: pos+3) = 255. self assert: (code bytes at: pos+4) = 255. ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2012 14:50'! testJMPRegister self assert: [ :assembler | assembler jmp: assembler EAX ] bytes: #[ 16rFF 2r11100000 ]. self assert: [ :assembler | assembler jmp: assembler ECX ] bytes: #[ 16rFF 2r11100001 ]. self assert: [ :assembler | assembler jmp: assembler EDX ] bytes: #[ 16rFF 2r11100010 ]! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:23'! testJumps asm label: #label1; nop; nop; nop; jz: #label1. self assert: asm bytes = #(144 144 144 116 251) asByteArray. asm reset; noStackFrame; label: #label1. 126 timesRepeat: [ asm nop ]. asm jz: #label1. self assert: (asm bytes size = 128). asm reset; noStackFrame; label: #label1; nop; nop; nop; jmp: #label1. self assert: asm bytes = #(144 144 144 235 251) asByteArray. asm reset; noStackFrame; jmp: #label1; label: #label1. self assert: asm bytes = #(16rEB 0 ) asByteArray. ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:23'! testMovSxZx asm movsx: asm AX to: asm EAX; movzx: asm AX to: asm EAX; movsx: asm AL to: asm EAX; movzx: asm AH to: asm EAX. self assert: asm bytes = #[ 16r0F 16rBF 16rC0 16r0F 16rB7 16rC0 16r0F 16rBE 16rC0 16r0F 16rB6 16rC4 ] ! ! !AJx86AssemblerTests methodsFor: 'tests'! testRegistersOf: asm | numRegs | numRegs := asm numGPRegisters. 0 to: numRegs-1 do: [:i | self assert: (asm reg8: i) size = 1. self assert: (asm reg8: i) index = i. self assert: (asm reg16: i) size = 2. self assert: (asm reg16: i) index = i. self assert: (asm reg32: i) size = 4. self assert: (asm reg32: i) index = i. self assert: (asm isGPNRegister: (asm nReg: i)). asm is64BitMode ifTrue: [ self assert: (asm reg64: i) size = 8. self assert: (asm reg64: i) index = i. ] ]. ! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'MartinMcClure 12/15/2012 13:39'! testSyscall "Syscall instruction is only valid in 64-bit mode" self asmShould: [ :a | a syscall ] raise: Error! ! !AJx86AssemblerTests methodsFor: 'tests' stamp: 'CamilloBruni 4/3/2012 10:23'! testTest "Special RAX opcodes" "8bit operand opcode" asm test: AL with: 5. self assert: asm bytes = #[16rA8 05]. asm reset; test: AX with: 5. "16bit operand Prefix byte, 16bit immediate (LSB)" self assert: asm bytes = #[16r66 16rA9 05 0]. "32bit operand " asm reset; test: EAX with: 1. self assert: asm bytes = #[16rA9 01 00 00 00]. "Need more assert for non-EAX receiver, non-immediate operands" ! ! !AJx86RegisterTests methodsFor: 'as yet unclassified' stamp: 'MartinMcClure 1/30/2013 21:56'! testAsHighByte | highByteRegs lowByteRegs otherGPRegs | highByteRegs := {AH. CH. DH. BH}. lowByteRegs := {AL. CL. DL. BL}. otherGPRegs := AJx86Registers generalPurpose reject: [ :r | r isHighByte | r isLowByte ]. self assert: (highByteRegs collect: [ :r | r asHighByte ]) equals: highByteRegs. self assert: (lowByteRegs collect: [ :r | r asHighByte ]) equals: highByteRegs. self assert: otherGPRegs size equals: 60. "16 of each size, less the lowByteRegs" otherGPRegs do: [ :r | self should: [ r asHighByte ] raise: Error ]! ! !AJx86RegisterTests methodsFor: 'as yet unclassified' stamp: 'MartinMcClure 1/30/2013 21:57'! testAsLowByte | highByteRegs lowByteRegs otherGPRegs | highByteRegs := {AH. CH. DH. BH}. lowByteRegs := {AL. CL. DL. BL}. otherGPRegs := AJx86Registers generalPurpose reject: [ :r | r isHighByte | r isLowByte ]. self assert: (highByteRegs collect: [ :r | r asLowByte ]) equals: lowByteRegs. self assert: (lowByteRegs collect: [ :r | r asLowByte ]) equals: lowByteRegs. self assert: otherGPRegs size equals: 60. "16 of each size, less the lowByteRegs" otherGPRegs do: [ :r | self should: [ r asLowByte ] raise: Error ]! ! !AJx86RegisterTests methodsFor: 'as yet unclassified' stamp: 'MartinMcClure 1/30/2013 19:40'! testRegisterWidthConversions "Test the generalPurpose register methods #as8, #as16, #as32, #as64. Some resulting registers are not valid except in 64-bit mode, but that is not checked until you try to use the register in an instruction." | regs8 regs16 regs32 regs64 highByteRegs | regs8 := {AL. CL. DL. BL. SPL. BPL. SIL. DIL. R8B. R9B. R10B. R11B. R12B. R13B. R14B. R15B}. regs16 := {AX. CX. DX. BX. SP. BP. SI. DI. R8W. R9W. R10W. R11W. R12W. R13W. R14W. R15W}. regs32 := {EAX. ECX. EDX. EBX. ESP. EBP. ESI. EDI. R8D. R9D. R10D. R11D. R12D. R13D. R14D. R15D}. regs64 := {RAX. RCX. RDX. RBX. RSP. RBP. RSI. RDI. R8. R9. R10. R11. R12. R13. R14. R15}. highByteRegs := {AH. CH. DH. BH}. self assert: (regs8 collect: [ :r | r as8 ]) equals: regs8; assert: (regs16 collect: [ :r | r as8 ]) equals: regs8; assert: (regs32 collect: [ :r | r as8 ]) equals: regs8; assert: (regs64 collect: [ :r | r as8 ]) equals: regs8. self assert: (regs8 collect: [ :r | r as16 ]) equals: regs16; assert: (regs16 collect: [ :r | r as16 ]) equals: regs16; assert: (regs32 collect: [ :r | r as16 ]) equals: regs16; assert: (regs64 collect: [ :r | r as16 ]) equals: regs16. self assert: (regs8 collect: [ :r | r as32 ]) equals: regs32; assert: (regs16 collect: [ :r | r as32 ]) equals: regs32; assert: (regs32 collect: [ :r | r as32 ]) equals: regs32; assert: (regs64 collect: [ :r | r as32 ]) equals: regs32. self assert: (regs8 collect: [ :r | r as64 ]) equals: regs64; assert: (regs16 collect: [ :r | r as64 ]) equals: regs64; assert: (regs32 collect: [ :r | r as64 ]) equals: regs64; assert: (regs64 collect: [ :r | r as64 ]) equals: regs64. self assert: (highByteRegs collect: [ :r | r as8 ]) equals: highByteRegs; assert: (highByteRegs collect: [ :r | r as16 ]) equals: {AX. CX. DX. BX}; assert: (highByteRegs collect: [ :r | r as32 ]) equals: {EAX. ECX. EDX. EBX}; assert: (highByteRegs collect: [ :r | r as64 ]) equals: {RAX. RCX. RDX. RBX}! ! "AsmJit-Tests"! !NBFFICallout commentStamp: '' prior: 42484469! Callout arguments can be either: - an integer constant, boolean or nil - a type name (string or symbol) - a class name - a class variable - any other object, which responds to #asFFICalloutArgument: An object , answered by #asFFICalloutArgument: should implement a public protocol of NBExternalType Todo.... Options: argument coercion options: #coerceBoolToInt - Boolean -> C integer (0/1) #coerceNilToInt - nil -> C integer (0) #coerceFloatToInt - Float -> C integer #coerceCharToInt - Character -> C integer #noTypeChecking - do not perform any type checking for pushed arguments (dangerous, but sometimes can be useful) return value coercion options: #returnBoolAsInt - do not turn a bool(0/1) into Boolean (true/false) cdecl calling convention: 1. Function parameters are pushed on the stack in a right-to-left order. 2. Any local variables declared by the callee are allocated on the stack by subtracting the number of bytes required from esp. That is (sub esp,NUMBER_OF_BYTES). 3. Registers eax, ecx, and edx are available for use in the subprogram. 4. Registers ebx, esi, edi, and ebp must not be modified by the callee. (In fact, they may be used, but their original values must be restored before exiting the callee). 5. When the callee terminates, any local variable must be released by restoring esp to its original value (mov esp,ebp). 6. Function return values are returned in the eax register (except for floating point values, which are returned in the st0 register). 7. After the callee is over, the parameters that were pushed on the stack by the caller must be removed by the caller itself once the callee is terminated. It can be done in two ways : * pop ecx n times, where n is the number of parameters pushed (cons: a useless result is stored in ecx, and ecx's value changes) * add esp,NUMBER_OF_BYTES_PREVIOUSLY_PUSHED (1 parameter pushed = 4 bytes on a 32 bit machine)! !NBExternalArray commentStamp: '' prior: 42465246! I am abstract class which provides a convenient interface to work with arrays which elements are values of some external (C) type. In order to use me with concrete element type, you must create a subclass of me and initialize element type properly. Subclassing using public subclass: - if you want to create a public subclass of me, then you should make sure that in class-side #initialize method, you add self-send #initElementType: and specify the element type name to use. (And of course, initialize the class before attempting to create any instances). Subclassing with anonymous subclass: To create an anonymous subclass of me, use #ofType: protocol, i.e.: floatArrayClass := NBExternalArray ofType: 'float'. Please note that separate #at: / #at:put: methods will be automatically added in each and every subclass. Never remove them, despite they looking identical to superclass methods!! !!!!CAUTION!!!! Currently those methods do not perform any range checking for index. So, please make sure you using sane index values (1<= index <= size). Also, note, that class instance variables: elementType and elementSize, once initialized, is considered read-only. Changing them, once you created at least a single instance of your class may lead to funny consequences. Arrays in external memory vs object memory: My instances can work either with data held in object memory or in external memory. The difference is only at instantiation time: To create a new array in object memory, just use #new: protocol: myArray := floatArrayClass new: 10. "create a new array with 10 floats". To allocate a new array in external memory, use #externalNew: protocol: myArray := floatArrayClass externalNew: 10. .. myArray free. "and sure thing, do not forget to free external memory after use". To check whether array uses object memory or external memory , use #isExternal protocol. Also, you can convert any external address into NBExternalArray subclass instance, i.e. suppose some external function returns a pointer (instance of NBExternalAddress): pointer := self callSomeFunc: 1. So, in order to access memory at given address as array of 100 elements of type 'int', you can use following: myArray := (NBExternalArray ofType: 'int') onAddress: pointer size: 100. myArray at: 1. "read first element" myArray at: 2 put: 50. "write second element" myArray do: [:each | ... ] ... etc (sure thing, in the above example, the "NBExternalArray ofType: 'int' " expression is just to demonstrate the intent. It should be replaced with some variable, which you initialize only once and use many times, because creating an anonymous subclass each time would be highly ineffective ) Supported protocols: Since NBExternalTypeArray inherits from ArrayedCollection, you're free to use any protocols defined there as well as in its superclasses. There's only few additions comparing to ArrayedCollection, like #isExternal and #free . Copying: a #copy behavior is special for external arrays: A copy will always use object memory, even if original used external memory. ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !NBExternalStructure commentStamp: '' prior: 42477570! I representing external structures to closely mimic 'struct' types in C. A C structure has transparent access to its fields: that is, a structure is transparent if you know its fields and can modify them. This is in contrast of opaque structures, which you never manipulate directly but through functions. For each struct type, you define a subclass of me, and implement the #fieldsDesc class method. The #fieldDesc method should answer an array containing enumeration of structure fields in form of type and name, much like in C syntax, for example: fieldDesc ^ #( int field1; float field2; void* field3; ). Once you define the structure fields and initialize the class, you can create the instances of it and access the fields by their name (the accessor methods are generated automatically). An external structure can be allocated in object memory, or in external memory, using #new, or #externalNew correspondingly. To test if given instance is allocated on external heap you can use #isExternal method. For passing (sub)instance of NBExternalStructure as argument to external function, the function argument type must be resolved to refer to corresponding class, e.g. if you defined class MyStructure, the external function signature must use it like 'void foo (MyStructure arg)', or if you want to preserve an original C function signature as much as close to original, use aliases for type (so type with name '_C_struct_type_name_whatever' should resolve to 'MyStructure' at the end). You can use external structure for passing by value (MyStruct param), or passing by pointer (MyStruct* param) both, depending of what external function expecting. In case if you want to pass a pointer to structure, but function signature does not explicitly uses a struct type (like 'void* someParam'), you can use #address accessor and pass it as parameter to function,e.g. someObject callExternalFunctionWith: mystruct address. Using external structure as return type: if external function returns a struct type: MyStruct foo() the marshaller creates an instance of MyStruct on object memory, then lets function modify its fields and aswers the resulting object. If function returns a pointer to structure, like 'MyStruct * foo()', then marshaller will create an instance of MyStruct as return value, and store an address returned by function as instance of NBExternalAddress in its data ivar (effectively making the structure instance external). Please be aware, that #free method can only be used if you allocated an external structure by yourself , using #externalNew , but not for instances which returned by external function or when given memory is controlled by external library or was allocated using other means.! !NBExternalTypeValue commentStamp: '' prior: 42478705! I am a generic meta class for creating a subclasses, which instances will hold a single value of specified C type. To create a new class for some concrete C type use: myClass := NBExternalTypeValue getClassForType: 'float'. Then you can use instances of given anonymous class(es) as a value holders for type you specified: float := myClass new. ... float value: 1.5 float value etc.. By combining this with class/pool variables we have a convenient way of defining a values, which are passed by pointer to a function. For instance, imagine that we need to create a binding to a function: void getFoo( SomeType * value) which is not an unusual situation, when C function using pointer arguments for storing it's output there. And this is what NBExternalTypeValue is done for: To define a binding to this function you can: - declare a pool/class variable, named SomeType - initialize it: SomeType := NBExternalTypeValue ofType: 'SomeType' and then use it in function signature: getFoo: value ^ self nbcall: #(void getFoo ( SomeType * value )) --- and call it like: var := SomeType new. self getFoo: var. var value -> will read the value ! !NBObjectFormat class methodsFor: 'accessing' stamp: 'IgorStasenko 12/21/2011 14:20' prior: 27661567! current "answer an new instance of object format representing an object format of currently running system" ^ NBObjectFormat32 new! ! !NBObjectFormat methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/20/2010 05:54' prior: 27659904! asm: anAsm asm := anAsm! ! !NBObjectFormat methodsFor: 'object formats' stamp: 'Igor.Stasenko 5/20/2010 05:52' prior: 27660023! indexableWordsFormat self subclassResponsibility ! ! !NBObjectFormat methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/19/2010 11:53' prior: 27660168! instVarOffsetAt: ivarIndex "answer an offset of instance variable with given 1-based index, relative to some oop" self subclassResponsibility ! ! !NBObjectFormat methodsFor: 'testing' stamp: 'IgorStasenko 11/23/2011 10:44' prior: 27660408! isCogVM ^ (Smalltalk vm version beginsWith: 'Squeak') not! ! !NBObjectFormat methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/19/2010 11:27' prior: 27660562! oopSize self subclassResponsibility ! ! !NBRecursionDetect class methodsFor: 'helper' stamp: 'IgorStasenko 5/28/2012 07:02' prior: 27675542! in: aMethod during: aBlock (self signalForMethod: aMethod) ifTrue: [ ^ NBCodeGenRecursion signal: aMethod printString ]. ^ aBlock on: self do: [:ex | ex check: aMethod ].! ! !NBRecursionDetect class methodsFor: 'signalling' stamp: 'IgorStasenko 5/28/2012 05:41' prior: 27675823! signalForMethod: aMethod ^ self new signalForMethod: aMethod ! ! !NBRecursionDetect methodsFor: 'public' stamp: 'IgorStasenko 5/28/2012 06:46' prior: 27674787! check: aMethod method == aMethod ifTrue: [ self resume: true "recursion detected" ] ifFalse: [ self pass ]! ! !NBRecursionDetect methodsFor: 'exceptiondescription' stamp: 'IgorStasenko 5/28/2012 06:01' prior: 27675005! defaultAction ^ false "false indicate no recursion"! ! !NBRecursionDetect methodsFor: 'accessing' stamp: 'IgorStasenko 5/28/2012 05:40' prior: 27675155! method ^ method! ! !NBRecursionDetect methodsFor: 'signalling' stamp: 'IgorStasenko 5/28/2012 05:35' prior: 27675268! signalForMethod: aMethod method := aMethod. ^ self signal! ! !NBMemoryBlock methodsFor: 'initialize-release' stamp: 'Igor.Stasenko 9/22/2010 04:38' prior: 27629156! initialize free := true! ! !NBMemoryBlock methodsFor: 'memory operations' stamp: 'Igor.Stasenko 9/24/2010 23:20' prior: 27629274! reserve: numBytes for: heapManager "reserve a given number of bytes of memory if numBytes < length, then create a smaller block with free memory" | leftover | self assert: free. numBytes > length ifTrue: [ self error: 'can''t reserve more than length of block' ]. heapManager removeFreeBlock: self. numBytes = length ifTrue: [ free := false. ^ self ]. leftover := NBMemoryBlock new address: address + numBytes; length: length - numBytes; left: self; right: right. right := leftover. length := numBytes. free := false. heapManager addFreeBlock: leftover. ! ! !NBNativeFunctionArgument methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/3/2010 18:58' prior: 27652928! name ^ name! ! !NBNativeFunctionArgument methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/3/2010 18:58' prior: 27653044! name: aName name := aName! ! !NBExternalEnumerationType methodsFor: 'emitting code' stamp: 'IgorStasenko 6/28/2013 14:19' prior: 27415126! pushAsPointer: gen self error: 'Pointer to enumeration values are not supported'. ! ! !NBBootstrapUlong methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:09' prior: 27357323! coerceReturnValue: gen | args result asm proxy | asm := gen asm. proxy := gen proxy. args := gen methodArgs. result := gen reserveTemp. asm mov: asm EAX to: result. "load a returnValueBuffer method argument oop" (NBSTMethodArgument new stackIndex: (args size - (args indexOf: #returnValueBuffer))) emitLoad: gen. proxy varBytesFirstFieldOf: asm EAX. "EAX - address , where to store result " asm mov: result to: asm ECX. asm mov: asm ECX to: asm EAX ptr32. "primitive will return nil" proxy nilObject ! ! !NBFFICalloutAPI class methodsFor: 'instance creation' stamp: 'IgorStasenko 11/22/2012 14:24' prior: 27530165! inContext: aContext ^ self new context: aContext! ! !NBFnSpec methodsFor: 'adding' stamp: 'IgorStasenko 8/21/2011 02:49' prior: 27543169! addArgument: anArgument ^ arguments add: anArgument! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:02' prior: 27575870! copyBits "This entry point needs to be implemented for the interpreter proxy. Since BitBlt is now a plugin we need to look up BitBltPlugin:=copyBits and call it. This entire mechanism should eventually go away and be replaced with a dynamic lookup from BitBltPlugin itself but for backward compatibility this stub is provided" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27576324! copyBitsFrom: x0 to: x1 at: y "This entry point needs to be implemented for the interpreter proxy. Since BitBlt is now a plugin we need to look up BitBltPlugin:=copyBitsFrom:to:at: and call it. This entire mechanism should eventually go away and be replaced with a dynamic lookup from BitBltPlugin itself but for backward compatibility this stub is provided" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27579649! floatObjectOf: floatValue "istantiate a floating point object and put a floating point value to it. answer that object " "we can't pass the floating point value in general purpose register, see the NBFloat64>>coerceReturnValue: how to do that." self shouldNotUse. ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27583784! ioLoadModule: m OfLength: l "implemented , see NBUtils class>>ioLoadModule: " self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27583983! ioLoadSymbol: sym OfLength: len FromModule: handle "implemented , see NBUtils class>>ioLoadSymbol:fromModule: " self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27584740! loadBitBltFrom: bbOop "This entry point needs to be implemented for the interpreter proxy. Since BitBlt is now a plugin we need to look up BitBltPlugin:=loadBitBltFrom and call it. This entire mechanism should eventually go away and be replaced with a dynamic lookup from BitBltPlugin itself but for backward compatibility this stub is provided" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27586109! obsoleteDontUseThisFetchWord: index ofObject: zap self shouldNotUse! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27586278! pop: nItems "not recommended for use in native code. use #stackValue: " self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:03' prior: 27586474! pop: nItems thenPush: anObject "not recommended for use in native code. use #stackValue: , and return a result oop from native function instead" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27587815! positive64BitIntegerFor: op "use positive64BitIntegerFor instead" self shouldNotUse.! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27588612! push: anObject "not recommended for use in native code" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27588791! pushBool: trueOrFalse "not recommended for use in native code" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27588977! pushFloat: f "not recommended for use in native code" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27589154! pushInteger: int "not recommended for use in native code" self shouldNotUse ! ! !NBInterpreterProxy methodsFor: 'errors' stamp: 'IgorStasenko 8/5/2013 12:02'! shouldNotUse self error: 'This is not recommended for use and therefore banned.'! ! !NBInterpreterProxy methodsFor: 'proxy functions' stamp: 'IgorStasenko 8/5/2013 12:04' prior: 27592231! signed64BitIntegerFor: op "use #signed64BitIntegerFor instead" self shouldNotUse.! ! !NBProxyFunction methodsFor: 'comparing' stamp: 'Igor.Stasenko 4/9/2010 07:14' prior: 27671459! = object ^ self class == object class and: [ selector == object selector ]! ! !NBProxyFunction methodsFor: 'adding' stamp: 'Igor.Stasenko 4/29/2010 03:34' prior: 27671630! address self assert: (index < NBInterpreterProxy functions size). self checkVersion. ^ NBInterpreterProxy fnAddressAt: index! ! !NBProxyFunction methodsFor: 'asserting' stamp: 'Igor.Stasenko 4/29/2010 07:36' prior: 27671855! checkVersion "exclude basic functions, otherwise we enter an endless chicken and egg loop" minorVersion = 0 ifTrue: [ ^ self ]. self assert: (NBInterpreterProxy majorVersion = majorVersion and: [ NBInterpreterProxy minorVersion >= minorVersion]). ! ! !NBProxyFunction methodsFor: 'comparing' stamp: 'Igor.Stasenko 4/9/2010 07:13' prior: 27672207! hash ^ selector hash! ! !NBProxyFunction methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 07:35' prior: 27672323! index ^ index! ! !NBProxyFunction methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 07:34' prior: 27672432! index: anIndex index := anIndex! ! !NBProxyFunction methodsFor: 'parsing' stamp: 'Igor.Stasenko 9/29/2010 09:24' prior: 27672560! parseArguments: args " not userful, lets ignore it" " (args size = 1 and: [ args first == #void ]) ifTrue: [ arguments := #(). ^ self ]. arguments := args collect: [:type | ( #(sqInt sqIntPtr sqLong double charPtr voidPtr) includes: type ) ifFalse: [ self error: 'invalid argument type' ]. type ]"! ! !NBProxyFunction methodsFor: 'printing' stamp: 'IgorStasenko 5/11/2011 16:47' prior: 27672970! printOn: aStream aStream print: selector. arguments ifNotNil: [ aStream space; print: arguments ]! ! !NBProxyFunction methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 07:14' prior: 27673174! selector ^ selector! ! !NBProxyFunction methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 07:22' prior: 27673289! selector: aSelector selector := aSelector! ! !NBFFICallback methodsFor: 'code emitting' stamp: 'IgorStasenko 9/15/2012 14:21' prior: 27490907! primLeave: leaveAddr stackPtr: saveStackPtr contextOop: senderContext returnValue: oop primitiveMethod: aMethod "simply jump to the address, provided in leaveAddr parameter, which should be an unsigned integer value" ^ NBNativeCodeGen methodAssembly: [:gen | | proxy asm | proxy := gen proxy. asm := gen asm. proxy stackValue: 4. "leaveAddr" proxy positive32BitValueOf: EAX. asm push: EAX. proxy ifFailedJumpTo: #failed. asm pop: EAX; jmp: EAX. " jump to callback leave address " asm label: #failed. gen epilogue. ] ! ! !NBFFICallback methodsFor: 'code emitting' stamp: 'IgorStasenko 5/8/2012 16:09' prior: 27491607! pvtEnter: arguments stackPointer: savedStackPtr primitiveMethod: aMethod "Note, this is for internal use only!!!!!! do not touch this method ever!! " | result theSender | result := 0. theSender := thisContext sender. [ result := block valueWithArguments: arguments ] ensure: [ self primLeave: self class callbackLeaveAddress asUnsignedLong stackPtr: savedStackPtr contextOop: theSender returnValue: result primitiveMethod: aMethod ] ! ! !NBFnArgument methodsFor: 'emitting code' stamp: 'Igor.Stasenko 4/30/2010 10:46' prior: 27541091! emitLoad: gen "emit instructions to load a function argument into default register (EAX for integral types, FP(0) for floating point)" self subclassResponsibility ! ! !NBFnArgument methodsFor: 'emitting code' stamp: 'Igor.Stasenko 4/30/2010 12:21' prior: 27541352! emitLoad: gen to: operand "emit instructions to load a function argument into given operand" self subclassResponsibility ! ! !NBNativeFunctionGen methodsFor: 'spec parsing' stamp: 'cipt 10/26/2012 19:19' prior: 27655728! argName: argName indirectIndex: anIndex type: typeName ptrArity: ptrArity | arg | arg := NBNativeFunctionArgument new. arg type: (self typeName: typeName ptrArity: ptrArity). arg name: argName. ^ arg ! ! !CompiledMethod methodsFor: '*NativeBoost-Core' stamp: 'IgorStasenko 7/12/2013 16:39'! hasNativeCallPrimitive "Answer true if receiver has following primitive: " ^ ((self primitive = 117) and: [ | lit | lit := self literalAt: 1. lit first = #NativeBoostPlugin and: [ lit second == #primitiveNativeCall]])! ! !CompiledMethod methodsFor: '*NativeBoost-Core' stamp: 'IgorStasenko 7/12/2013 16:29'! nbArgumentNames "Answer the method's argument names. We using a separate method, to get arg names not from source code directly, but from method properties, collected at compile time. Useful, when there is no source code available (for some reason)" ^ self propertyValueAt: #nbArgumentNames ifAbsent: [ self propertyValueAt: #nbArgumentNames put: self argumentNames ] ! ! !NBMemoryPage class methodsFor: 'instance creation' stamp: 'Igor.Stasenko 9/24/2010 23:42' prior: 27631388! address: addr length: len ^ self basicNew address: addr length: len! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 16:38'! coerceReturnPointer: gen "input: pointer to struct in EAX output: instance of external structure oop pointing to given address" | asm proxy oop | asm := gen asm. proxy := gen proxy. "we only care for 1 arity e.g. 'Struct *', otherwise use generic marshalling." pointerArity > 1 ifTrue: [ ^ super coerceReturnPointer: gen ]. "first create an instance of NBExternalAddress" NBExternalAddressType new createInstanceWithValue: asm EAX generator: gen. proxy pushRemappableOop: asm EAX. oop := gen reserveTemp. proxy createInstanceOf: objectClass. asm mov: asm EAX to: oop. proxy popRemappableOop. proxy storePointer: self dataIvarIndex ofObject: oop withValue: asm EAX. "return an instance of objectClass as result" asm mov: oop to: asm EAX. gen releaseTemps: 1! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/5/2013 15:46' prior: 27459570! coerceReturnValue: gen | asm proxy | asm := gen asm. proxy := gen proxy. self returnViaRegisters ifTrue: [ | temp1 temp2 oop dataOop | "save struct value(s) into temps" temp1 := gen reserveTemp. asm mov: asm EAX to: temp1. objectClass instanceSize > 4 ifTrue: [ temp2 := gen reserveTemp. asm mov: asm EDX to: temp2 ]. "instantiate our struct" oop := gen reserveTemp. dataOop := gen reserveTemp. "create data buf for struct" proxy createInstanceOf: ByteArray size: objectClass instanceSize. asm mov: asm EAX to: dataOop. proxy varBytesFirstFieldOf: asm EAX. "in EAX is pointer to first byte of struct" "copy struct values into newly created instance" asm mov: temp1 to: asm ECX. asm mov: asm ECX to: asm EAX ptr. objectClass instanceSize > 4 ifTrue: [ asm mov: temp2 to: asm ECX. asm mov: asm ECX to: asm EAX ptr + 4. ]. proxy pushRemappableOop: dataOop. "now create instance and set it's data ivar " proxy createInstanceOf: objectClass. asm mov: asm EAX to: oop. proxy popRemappableOop. proxy storePointer: self dataIvarIndex ofObject: oop withValue: asm EAX. "return an instance of objectClass as result" asm mov: oop to: asm EAX ] ifFalse: [ "just return a previously instantiated struct oop" asm mov: returnOop to: asm EAX ]! ! !NBExternalStructureType methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/28/2013 20:24'! dataIvarIndex " return a zero-based index " ^ ( objectClass instVarIndexFor: #data ifAbsent: [ self error: ' should not happen ' ] ) - 1! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 12:24'! fetchAddressFromData: dataOop gen: gen "Input: the oop of data ivar (dataOop) from an instance of NBExternalStructure subclass Output: the address of struct's first field is in EAX. 2 cases: - data is ByteArray, then use address of its first byte - data is NBExternalAddress, then use address value " | oopClass proxy asm notExternalAddress done | proxy := gen proxy. asm := gen asm. oopClass := gen reserveTemp. notExternalAddress := asm uniqueLabelName: 'notExternalAddress'. done := asm uniqueLabelName: 'done'. proxy fetchClassOf: dataOop. asm mov: asm EAX to: oopClass. gen emitFetchClass: NBExternalAddress. asm cmp: asm EAX with: oopClass. asm jne: notExternalAddress. "Data is external address. use its value" proxy fetchPointer: 0 ofObject: dataOop. asm jmp: done. "Here we assume it is var-byte object (bytearray), use address of its first byte" asm label: notExternalAddress. proxy varBytesFirstFieldOf: dataOop. asm label: done. gen releaseTemps: 1. ! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 12:21'! fetchStructAddressFrom: oop gen: gen "Input: an instance of NBExternalStructure subclass in oop Output: the address of struct's first field is in EAX" | asm proxy dataOop | proxy := gen proxy. asm := gen asm. dataOop := gen reserveTemp. proxy fetchPointer: (self dataIvarIndex) ofObject: oop. asm mov: asm EAX to: dataOop. self fetchAddressFromData: dataOop gen: gen. gen releaseTemps: 1.! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 16:25' prior: 27460709! prepareReturnValue: gen for: callinfo | asm proxy temp | asm := gen asm. proxy := gen proxy. (pointerArity = 0 and: [ self returnViaRegisters not ]) ifTrue: [ "we should instantiate a new instance of struct and push a pointer to its first byte on a stack (so C function will know where to store return value(s))" returnOop := gen reserveTemp. temp := gen reserveTemp. proxy createInstanceOf: objectClass. proxy pushRemappableOop: asm EAX. proxy createInstanceOf: ByteArray size: objectClass instanceSize. asm mov: asm EAX to: temp. proxy popRemappableOop. asm mov: asm EAX to: returnOop. proxy storePointer: self dataIvarIndex ofObject: asm EAX withValue: temp. asm mov: temp to: asm EAX. proxy varBytesFirstFieldOf: asm EAX. "in EAX is pointer to first byte of struct" asm noticePush: asm pointerSize forCall: callinfo. asm push: asm EAX. gen releaseTemps: 1. ] ! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/8/2013 17:38' prior: 27461466! pushAsPointer: gen "push a pointer to structure (which should be a subinstance of NBExternalStructure)" | asm oop | asm := gen asm. oop := gen reserveTemp. "we handle only 1-arity pointers here (stuct*) , the others is handled as generic pointer" pointerArity > 1 ifTrue: [ ^ super pushAsPointer: gen]. loader emitLoad: gen to: oop. "do not verify if class is known" loader isReceiver ifFalse: [ self verifyClassOf: oop is: objectClass generator: gen. ]. self fetchStructAddressFrom: oop gen: gen. asm push: asm EAX. gen releaseTemps: 1! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/5/2013 15:43' prior: 27462131! pushAsValue: gen "pass a structure by value on stack" | asm oop bytesToCopy offset | asm := gen asm. oop := gen reserveTemp annotation: 'oop'. loader emitLoad: gen to: oop. loader isReceiver ifFalse: [ "do not check type if argument is receiver, since we already know its class" self verifyClassOf: oop is: objectClass generator: gen. ]. self fetchStructAddressFrom: oop gen: gen. "in EAX the pointer to first byte of struct" "struct size aligned to stack argument alignment" asm sub: asm ESP with: self stackSize. "generate code to copy struct contents on a stack. source is [EAX] destination is [ESP] " bytesToCopy := self valueSize. offset := 0. "first copy by 4 bytes" [ bytesToCopy >= 4 ] whileTrue: [ asm mov: asm EAX ptr32 + offset to: asm EDX; mov: asm EDX to: asm ESP ptr32 + offset. bytesToCopy := bytesToCopy - 4. offset := offset + 4. ]. "copy rest using 1-byte transfer" [ bytesToCopy > 0 ] whileTrue: [ asm mov: asm EAX ptr8 + offset to: asm DL; mov: asm DL to: asm ESP ptr8 + offset. bytesToCopy := bytesToCopy - 1. offset := offset + 1. ]. gen releaseTemps: 1. ! ! !NBExternalStructureType methodsFor: 'emitting code' stamp: 'CiprianTeodorov 4/7/2013 19:32' prior: 27463310! readOop: memoryOperand generator: gen "emit code to read a value from given memory operand and convert it to a corresponding ST object" | asm proxy size offset oop src | asm := gen asm. proxy := gen proxy. pointerArity > 0 ifTrue: [ asm mov: memoryOperand to: asm EAX. ^ self coerceReturn: gen. ]. "read structure from given address, copy it to newly created instance of corresponding struct class" asm lea: asm EAX with: memoryOperand. src := gen reserveTemp. asm mov: asm EAX to: src. "instantiate our struct" oop := gen reserveTemp. gen emitFetchClass: objectClass. proxy instantiateClass: asm EAX indexableSize: 0. asm mov: asm EAX to: oop. gen emitFetchClass: ByteArray. proxy instantiateClass: asm EAX indexableSize: objectClass instanceSize. proxy storePointer: self dataIvarIndex ofObject: oop withValue: asm EAX. proxy varBytesFirstFieldOf: asm EAX. asm mov: src to: asm EDX. "in EAX is pointer to first byte of struct" size := self valueSize. offset := 0. [ size >= 4 ] whileTrue: [ asm mov: asm EDX ptr + offset to: asm ECX; mov: asm ECX to: asm EAX ptr + offset. size := size - 4. offset := offset + 4. ]. size >= 2 ifTrue: [ asm mov: asm EDX ptr16 + offset to: asm CX; mov: asm CX to: asm EAX ptr16 + offset. size := size - 2. offset := offset + 2. ]. size > 0 ifTrue: [ " last byte " asm mov: asm EDX ptr8 + offset to: asm CL; mov: asm CL to: asm EAX ptr8 + offset. ]. "return an instance of objectClass as result" asm mov: oop to: asm EAX ! ! !NBExternalObjectType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:10' prior: 27432709! coerceReturnValue: gen "handle is in EAX. first, create an instance of NBExternalHandle. Place the handle there , then create an instance of receiver and place handle oop in its handle ivar" | asm proxy result handleOop oop done | proxy := gen proxy. asm := gen asm. result := gen reserveTemp. handleOop := gen reserveTemp. oop := gen reserveTemp. done := asm uniqueLabelName: 'done'. asm mov: asm EAX to: result. gen optReturnNullAsNil ifTrue: [ | notnil | notnil := asm uniqueLabelName: 'notNil'. asm or: asm EAX with: asm EAX; jne: notnil. proxy nilObject. asm jmp: done. asm label: notnil. ]. gen emitFetchClass: NBExternalHandle. proxy instantiateClass: asm EAX indexableSize: self pointerSize. asm mov: asm EAX to: handleOop. proxy varBytesFirstFieldOf: asm EAX. asm mov: result to: asm ECX; mov: asm ECX to: asm EAX ptr. proxy pushRemappableOop: handleOop. gen receiver ifNil: [ gen emitFetchClass: objectClass. ] ifNotNil: [proxy receiver]. proxy instantiateClass: asm EAX indexableSize: 0. "EAX <- our instance " asm mov: asm EAX to: oop. proxy popRemappableOop. asm mov: asm EAX to: handleOop. proxy storePointer: self handleIvarIndex ofObject: oop withValue: handleOop. asm mov: oop to: asm EAX. "return the oop" gen releaseTemps: 3. asm label: done. ! ! !NBExternalObjectType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:12' prior: 27434075! pushAsPointer: gen "push a pointer to handle value" | asm proxy oop | proxy := gen proxy. asm := gen asm. oop := gen reserveTemp. loader emitLoad: gen to: oop. "we can skip class verification, if loader loads receiver, since nothing to fear there" loader isReceiver ifFalse: [ self verifyClassOf: oop is: objectClass generator: gen. ]. proxy fetchPointer: (self handleIvarIndex) ofObject: oop. "handle ivar" proxy varBytesFirstFieldOf: asm EAX. "handle value ptr" asm push: asm EAX. gen releaseTemps: 1. ! ! !NBExternalObjectType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:12' prior: 27434609! pushAsValue: gen "push handle value" | asm proxy oop | proxy := gen proxy. asm := gen asm. oop := gen reserveTemp. loader emitLoad: gen to: oop. "Special case: do not emit type checking if argument is receiver" (loader isReceiver and: [ gen requestor includesBehavior: objectClass ]) ifFalse: [ self verifyClassOf: oop is: objectClass generator: gen. ]. proxy fetchPointer: (self handleIvarIndex) ofObject: oop. "handle ivar" proxy varBytesFirstFieldOf: asm EAX. "handle value ptr" asm mov: asm EAX ptr to: asm EAX. "handle value" asm push: asm EAX. gen releaseTemps: 1. ! ! !NBObjectFormat32 class methodsFor: 'helper' stamp: 'IgorStasenko 11/24/2012 17:22' prior: 27668656! headerOf: anObject ^ self nbCallout function: #( ulong (oop anObject) ) emit: [:gen | gen asm pop: gen asm EAX. gen asm mov: gen asm EAX ptr to: gen asm EAX ]! ! !NBObjectFormat32 methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/19/2010 11:53' prior: 27662070! instVarOffsetAt: index "answer an offset of instance variable with given 1-based index, relative to some oop" ^ self baseHeaderSize + (self oopSize*(index-1)).! ! !NBObjectFormat32 methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/19/2010 11:29' prior: 27662329! oopSize ^ 4! ! !NBExternalString methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:12' prior: 27444005! coerceReturnValue: gen " Copy a null-terminated C string into a newly created instance of ByteString input - char* string in EAX output - String oop in EAX " | cPtr strLen oop asm proxy notNull done | asm := gen asm. proxy := gen proxy. cPtr := gen reserveTemp. strLen := gen reserveTemp. oop := gen reserveTemp. notNull := asm uniqueLabelName: 'notNull'. done := asm uniqueLabelName: 'done'. asm mov: EAX to: cPtr. "check if return value is NULL, then answer nil instead" asm or: EAX with: EAX; jnz: notNull. proxy nilObject. asm jmp: done. asm label: notNull. "count a number of characters" asm mov: (self strLen: gen) to: strLen. proxy classString. proxy instantiateClass: EAX indexableSize: strLen. asm mov: EAX to: oop. "oop" "copy the string" proxy varBytesFirstFieldOf: EAX. asm push: ESI; push: EDI; mov: cPtr to: ESI; mov: EAX to: EDI; mov: strLen to: ECX; rep; movsb; pop: EDI; pop: ESI; mov: oop to: EAX. asm label: done. gen releaseTemps: 3. ! ! !NBExternalString methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:13' prior: 27445127! prepareArgumentUsing: gen "prepare the ByteString argument. Allocate a space for string on stack, then copy string contents there and add terminating null character " | asm stringOop len loop done donePreparing notNil | asm := gen asm. loop := asm uniqueLabelName: 'loop'. done := asm uniqueLabelName: 'done'. notNil := asm uniqueLabelName: 'notNil'. donePreparing := asm uniqueLabelName: 'donePreparing'. loader emitLoad: gen. "reserve after emitting load, otherwise, if proxy using stackpointer temp, it will be clobbered" address := gen reserveTemp. stringOop := gen reserveTemp. len := gen reserveTemp. asm mov: EAX to: stringOop. gen optStringOrNull ifTrue: [ "allow passing nil as string, effectively will push null pointer as argument" gen proxy nilObject. asm cmp: EAX with: stringOop; jne: notNil; mov: 0 to: address; "null pointer" jmp: donePreparing. ]. asm label: notNil. gen proxy isBytes: stringOop. asm or: EAX with: EAX. asm jz: gen failedLabel. gen proxy byteSizeOf: stringOop. asm mov: EAX to: len. asm inc: EAX. "add 1 byte for terminating null character" gen reserveStackBytes: EAX andStoreAddrTo: address. gen proxy varBytesFirstFieldOf: stringOop. asm decorateWith: ' copy string contents to the stack ' during: [ asm push: ESI; push: EDI; mov: EAX to: ESI; mov: address to: EDI; mov: len to: ECX; " rep; movsb; -- is flat memory model has ES=DS ? " label: loop; dec: ECX; jl: done; mov: ESI ptr to: AL; mov: AL to: EDI ptr; inc: ESI; inc: EDI; jmp: loop; label: done; mov: 0 to: EDI ptr8; "store null-terminating character" pop: EDI; pop: ESI. ]. gen releaseTemps: 2. "keep the address reserved, otherwise it will be clobbered" asm label: donePreparing ! ! !NBNativeCodeError class methodsFor: 'signalling' stamp: 'IgorStasenko 8/6/2011 17:48' prior: 27632692! signalError: error ^ self new signalError: error! ! !NBExternalLibraryWrapper class methodsFor: 'helper' stamp: 'IgorStasenko 11/24/2012 16:23' prior: 27426823! createArrayedMethodFor: aSpec ^ String streamContents: [:str | str nextPutAll: aSpec asMethodSelectorAndArrayOfArguments ; crtab; nextPutAll: ''; cr; crtab; nextPutAll: 'argsArray size = ', aSpec arguments size printString, ' ifFalse:[^Error signal: ''Incorrect number of arguments''].'; crtab; nextPutAll: '^ self call: '; nextPutAll: aSpec asArraySpecArrayedArgs ; cr ]. ! ! !NBExternalLibraryWrapper class methodsFor: 'helper' stamp: 'cipt 10/21/2012 20:14' prior: 27427418! createMethodFor: aCFunctionDefinition "find the function name" | typeAndName spec source cat | "the parameter list follows the fn name " spec := NBFnSpec namedFunctionFrom: aCFunctionDefinition. spec arguments size > 15 ifTrue: [ source := self createArrayedMethodFor: spec. cat := 'automatically generated arrayed' ] ifFalse: [ source := self createSimpleMethodFor: spec. cat := 'automatically generated' ]. self compile: source classified: cat! ! !NBExternalLibraryWrapper class methodsFor: 'helper' stamp: 'IgorStasenko 11/24/2012 16:23' prior: 27427999! createSimpleMethodFor: aSpec ^ String streamContents: [ :str | str nextPutAll: aSpec asMethodSelectorAndArguments; crtab; nextPutAll: ''; cr; crtab; nextPutAll: '^ self call: '; nextPutAll: aSpec asArraySpec; cr ]! ! !NBSTIvarArgument methodsFor: 'emitting code' stamp: 'Igor.Stasenko 4/30/2010 14:33' prior: 27678951! emitLoad: gen "emit instructions to load a function argument into default register (EAX for integral types, FP(0) for floating point)" | index | index := receiverClass allInstVarNames indexOf: ivarName. gen receiverArgumentLoader emitLoad: gen to: gen asm EAX. "receiver in EAX" gen proxy fetchPointer: index-1 ofObject: gen asm EAX. ^ gen asm EAX! ! !NBSTIvarArgument methodsFor: 'emitting code' stamp: 'Igor.Stasenko 4/30/2010 12:29' prior: 27679410! emitLoad: gen to: operand "emit instructions to load a function argument into given operand" self emitLoad: gen. operand = gen asm EAX ifFalse: [ gen asm mov: gen asm EAX to: operand ] ! ! !NBSTIvarArgument methodsFor: 'testing' stamp: 'Igor.Stasenko 5/18/2010 02:22' prior: 27679699! usesSTStack ^ true " to fetch receiver we accessing the stack"! ! !Behavior methodsFor: '*NativeBoost-Core' stamp: 'Igor.Stasenko 9/28/2010 08:03' prior: 44349202! externalTypeAlias: aTypeName "override, if you want to introduce type aliases. Answering nil means no type alias for given type name exists" ^ nil! ! !Behavior methodsFor: '*NativeBoost-Core' stamp: 'Igor.Stasenko 5/18/2010 13:02' prior: 44350562! nbBindingOf: aName "answer a binding for a type name, by default use smalltalk name bindings" ^ self bindingOf: aName! ! !Behavior methodsFor: '*NativeBoost-Core' stamp: 'Igor.Stasenko 4/30/2010 12:34' prior: 44350742! nbFnArgument: argName generator: gen "Load the instance variable with given name" (self allInstVarNames includes: argName) ifFalse: [ ^ nil ]. ^ NBSTIvarArgument new receiverClass: self; ivarName: argName! ! !NBSTIndirectArgument methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/18/2013 00:05' prior: 27676640! emitLoad: gen | asm | asm := gen asm. argumentLoader emitLoad: gen to: asm EAX. gen optCheckIndirectArgBounds ifTrue: [ | typeOk boundsFailed endLabel oop | typeOk := asm uniqueLabelName: 'typeOk'. boundsFailed := asm uniqueLabelName: 'boundsFailed'. endLabel := asm uniqueLabelName: 'end'. oop := gen reserveTemp. asm mov: asm EAX to: oop. "type checking" gen proxy isPointers: oop. asm cmp: asm EAX with: 0 asImm. asm jne: typeOk. gen failWithMessage: 'Type checking failed on indirect argument loading'. asm label: typeOk. "bounds checking" "bigger than 0" elementIndex <= 0 ifTrue:[ ^self error: 'Bound checking failed on indirect argument loading. index should be bigger that 0.']. "smaller than slot size" gen proxy slotSizeOf: oop. asm cmp: asm EAX with: elementIndex asImm. asm jl: boundsFailed. asm mov: oop to: asm EAX. asm jmp: endLabel . asm label: boundsFailed. gen failWithMessage: 'Bound checking failed on indirect argument loading'. asm label: endLabel . ]. gen proxy fetchPointer: elementIndex - 1 ofObject: asm EAX. ^ asm EAX! ! !NBFFICallout commentStamp: '' prior: 48217957! Callout arguments can be either: - an integer constant, boolean or nil - a type name (string or symbol) - a class name - a class variable - any other object, which responds to #asFFICalloutArgument: An object , answered by #asFFICalloutArgument: should implement a public protocol of NBExternalType Todo.... Options: argument coercion options: #coerceBoolToInt - Boolean -> C integer (0/1) #coerceNilToInt - nil -> C integer (0) #coerceFloatToInt - Float -> C integer #coerceCharToInt - Character -> C integer #noTypeChecking - do not perform any type checking for pushed arguments (dangerous, but sometimes can be useful) return value coercion options: #returnBoolAsInt - do not turn a bool(0/1) into Boolean (true/false) cdecl calling convention: 1. Function parameters are pushed on the stack in a right-to-left order. 2. Any local variables declared by the callee are allocated on the stack by subtracting the number of bytes required from esp. That is (sub esp,NUMBER_OF_BYTES). 3. Registers eax, ecx, and edx are available for use in the subprogram. 4. Registers ebx, esi, edi, and ebp must not be modified by the callee. (In fact, they may be used, but their original values must be restored before exiting the callee). 5. When the callee terminates, any local variable must be released by restoring esp to its original value (mov esp,ebp). 6. Function return values are returned in the eax register (except for floating point values, which are returned in the st0 register). 7. After the callee is over, the parameters that were pushed on the stack by the caller must be removed by the caller itself once the callee is terminated. It can be done in two ways : * pop ecx n times, where n is the number of parameters pushed (cons: a useless result is stored in ecx, and ecx's value changes) * add esp,NUMBER_OF_BYTES_PREVIOUSLY_PUSHED (1 parameter pushed = 4 bytes on a 32 bit machine)! !NBFFICallout methodsFor: 'private' stamp: 'IgorStasenko 7/12/2013 16:31' prior: 27501988! methodArgs: aMethodArgumentNames "Note: avoid setting directly, this method is only for testing purposes" methodArgs := aMethodArgumentNames! ! !NBFFICallout methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/18/2013 20:46'! receiver ^ receiver! ! !NBFFICallout methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/18/2013 20:46'! receiver: anObject receiver := anObject! ! !NBFFICallout methodsFor: 'spec parsing' stamp: 'CiprianTeodorov 5/18/2013 21:59' prior: 27513470! returnType: aType aType first = 'receiver' ifTrue: [ | rcvr rqstr | "check that: 1. method belongs to class side 2. method class is subclass of NBExternalObject 3. receiver is the same or subclass of the requestor -- since the requestor is the implementor" rcvr := self receiver. rqstr := self requestor soleInstance. (rcvr isBehavior and: [ (rcvr == rqstr or: [ rcvr inheritsFrom: rqstr ]) and: [ rcvr inheritsFrom: NBExternalObject ] ]) ifTrue: [ ^ self typeName: rcvr name ptrArity: aType second ] ]. self receiver: nil. "if the type is not 'receiver' then we don't need the receiver of the message so set it to nil" ^ self typeName: aType first ptrArity: aType second! ! !NBFFICallout methodsFor: 'accessing' stamp: 'IgorStasenko 7/12/2013 16:31' prior: 27503664! sender: aSenderContext | nArgs | self requestor: aSenderContext method methodClass. nArgs := aSenderContext method numArgs. methodArgs := aSenderContext method nbArgumentNames. self receiver: aSenderContext receiver. self assert: (methodArgs size = nArgs). ! ! !NBNativeCodeGen class methodsFor: 'error handling' stamp: 'IgorStasenko 7/12/2013 16:38' prior: 27640571! getErrorFrom: aContext lastError: errorCode | lastError method | lastError := errorCode. method := aContext method. "Check that method has a #primitiveNativeCall, since it required by generator, and sometimes you can forget putting primitive pragma" (method primitive = 220 or: [ method hasNativeCallPrimitive]) ifFalse: [ ^ ErrNoNBPrimitive ]. "Check if method using an extended primitive pragma (introduced in Cog), otherwise we just take an errorCode" (method pragmas anySatisfy: [:p | p keyword == #primitive:module:error: ]) ifTrue: [ "A primitive error is always the last temp (ensured by compiler) " lastError := aContext tempAt: method numTemps. ]. lastError = ErrNotEnabled ifTrue: [ "If we cannot enable it, report an error..." NativeBoost enableNativeCode ifFalse: [ ^ NBNativeCodeError signal: 'Cannot enable native code execution' ]. " Fake absence of native code, so then code generator will generate code and retry the call. Note that if you want to keep native code forever (generated once and kept forever as long as method exists), you might want to override this" lastError := ErrNoNativeCodeInMethod ]. ^ lastError ! ! !NBExternalUnionFields methodsFor: 'accessing' stamp: 'CiprianTeodorov 1/19/2013 16:55'! typeOf: fieldName ^ (fields at: fieldName) at: 1! ! !NBExternalArray commentStamp: '' prior: 48219995! I am abstract class which provides a convenient interface to work with arrays which elements are values of some external (C) type. In order to use me with concrete element type, you must create a subclass of me and initialize element type properly. Subclassing using public subclass: - if you want to create a public subclass of me, then you should make sure that in class-side #initialize method, you add self-send #initElementType: and specify the element type name to use. (And of course, initialize the class before attempting to create any instances). Subclassing with anonymous subclass: To create an anonymous subclass of me, use #ofType: protocol, i.e.: floatArrayClass := NBExternalArray ofType: 'float'. Please note that separate #at: / #at:put: methods will be automatically added in each and every subclass. Never remove them, despite they looking identical to superclass methods!! !!!!CAUTION!!!! Currently those methods do not perform any range checking for index. So, please make sure you using sane index values (1<= index <= size). Also, note, that class instance variables: elementType and elementSize, once initialized, is considered read-only. Changing them, once you created at least a single instance of your class may lead to funny consequences. Arrays in external memory vs object memory: My instances can work either with data held in object memory or in external memory. The difference is only at instantiation time: To create a new array in object memory, just use #new: protocol: myArray := floatArrayClass new: 10. "create a new array with 10 floats". To allocate a new array in external memory, use #externalNew: protocol: myArray := floatArrayClass externalNew: 10. .. myArray free. "and sure thing, do not forget to free external memory after use". To check whether array uses object memory or external memory , use #isExternal protocol. Also, you can convert any external address into NBExternalArray subclass instance, i.e. suppose some external function returns a pointer (instance of NBExternalAddress): pointer := self callSomeFunc: 1. So, in order to access memory at given address as array of 100 elements of type 'int', you can use following: myArray := (NBExternalArray ofType: 'int') onAddress: pointer size: 100. myArray at: 1. "read first element" myArray at: 2 put: 50. "write second element" myArray do: [:each | ... ] ... etc (sure thing, in the above example, the "NBExternalArray ofType: 'int' " expression is just to demonstrate the intent. It should be replaced with some variable, which you initialize only once and use many times, because creating an anonymous subclass each time would be highly ineffective ) Supported protocols: Since NBExternalTypeArray inherits from ArrayedCollection, you're free to use any protocols defined there as well as in its superclasses. There's only few additions comparing to ArrayedCollection, like #isExternal and #free . Copying: a #copy behavior is special for external arrays: A copy will always use object memory, even if original used external memory. ! !NBExternalArray class methodsFor: 'private' stamp: 'CiprianTeodorov 12/16/2012 15:49' prior: 43494579! anonymousSubclassInitElementType: aTypeName "create and initialize the anonymous subclass of me" | newSubclass | newSubclass := ClassBuilder new newSubclassOf: NBExternalArray type: NBExternalArray typeOfClass instanceVariables: '' from: nil. "we're not using 'self' to avoid wrong subclassing from anonymous subclass " newSubclass initElementType: aTypeName. ^ newSubclass! ! !NBExternalArray class methodsFor: 'class initialization' stamp: 'IgorStasenko 6/27/2013 16:15' prior: 27405518! initElementType: aTypeName "Initialize the element type and size. If you want to use a public subclass of me, then make sure you call this method in your class #initialize method. " elementType := aTypeName. elementSize := (NBFFICallout new requestor: self; resolveType: elementType) typeSize . self installAccessors.! ! !NBFFICalloutError methodsFor: 'accessing' stamp: 'IgorStasenko 2/20/2012 13:47' prior: 27530718! description ^ NBErrorDescriptions at: errorCode ifAbsent: [ (NBFFICallout messageForCode: errorCode) ifNil: [ 'Error during FFI call: ' , errorCode asString]]. ! ! !NBExternalType class methodsFor: 'public' stamp: 'IgorStasenko 6/27/2013 16:12' prior: 27475207! sizeOf: aTypeName ^ (NBFFICallout new resolveType: aTypeName) typeSize! ! !NBExternalType methodsFor: 'error handling' stamp: 'IgorStasenko 7/12/2013 14:30'! error: aMessage ^ NBCodeGenerationError new signal: aMessage! ! !NBExternalType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 11:07' prior: 27471380! pushAsPointer: gen "by default, push argument as a bytearray ptr" "may accept: - nil - variable bytes oop - external address " | asm proxy notNil done oop notExternalAddress | asm := gen asm. proxy := gen proxy. done := asm uniqueLabelName: 'done'. oop := gen reserveTemp. "load argument oop" loader emitLoad: gen to: oop. "handle nils, if we care" gen optCoerceNilToNull ifTrue: [ notNil := asm uniqueLabelName: 'notNil'. proxy nilObject. asm cmp: asm EAX with: oop; jne: notNil; xor: asm EAX with: asm EAX; jmp: done; label: notNil. ]. "handle ExternalAddress, if we care" gen optAllowExternalAddressPtr ifTrue: [ | oopClass | oopClass := gen reserveTemp. notExternalAddress := asm uniqueLabelName: 'notExternalAddress'. proxy fetchClassOf: oop. asm mov: asm EAX to: oopClass. gen emitFetchClass: NBExternalAddress. asm cmp: asm EAX with: oopClass. asm jne: notExternalAddress. proxy fetchPointer: 0 ofObject: oop. asm jmp: done. asm label: notExternalAddress. gen releaseTemps: 1. ]. "the last case is a byte/word array, simply push a pointer to first indexable field of oop" gen optAllowByteArraysPtr ifTrue: [ proxy isBytesOrWords: oop ifNotJumpTo: gen failedLabel. proxy varBytesFirstFieldOf: oop. asm jmp: done. ]. "if we get here, we fail" asm jmp: gen failedLabel. "and if we get here, we ok to proceed" asm label: done. asm push: asm EAX. gen releaseTemps: 1. ! ! !NBFFIConst methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/30/2010 11:46' prior: 27531994! pointerArity: ptrArity ptrArity > 0 ifTrue: [ self error: 'passing pointer to constant' ]! ! !NBFFIConst methodsFor: 'emitting code' stamp: 'Igor.Stasenko 4/28/2010 13:54' prior: 27532176! prepareArgumentUsing: gen "do nothing"! ! !NBFFIConst methodsFor: 'testing' stamp: 'Igor.Stasenko 5/18/2010 23:08' prior: 27532437! usesSTStack "Test, whether a receiver using an ST method's argument for converting it into a corresponding C value for pushing on stack " ^ false! ! !Boolean methodsFor: '*NativeBoost-Core' stamp: 'Igor.Stasenko 4/28/2010 12:19' prior: 35637027! asNBExternalType: gen "boolean value in argument description array defines a simple 0 or 1 constant #( true false ) - turned into a 1 and 0 " ^ NBFFIConst value: (self ifTrue: [1] ifFalse:[0])! ! !Metaclass methodsFor: '*NativeBoost-Core' stamp: 'Igor.Stasenko 9/28/2010 08:00' prior: 45393402! externalTypeAlias: aName "redirect request to my instance side" ^ self instanceSide externalTypeAlias: aName! ! !NBExternalAddressType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 16:16' prior: 27393669! coerceReturnValue: gen "input: address is in EAX. output: ExternalAddress instance oop in EAX creates an instance of NBExternalAddress and store the address there" | asm result | asm := gen asm. result := self createInstanceWithValue: asm EAX generator: gen. asm mov: result to: asm EAX. ! ! !NBExternalAddressType methodsFor: 'emitting code' stamp: 'IgorStasenko 7/1/2013 16:32'! createInstanceWithValue: address generator: gen "Create an instance of NBExternalAddress with given value. Answer the resulting oop in EAX" | result asm proxy | asm := gen asm. proxy := gen proxy. result := gen reserveTemp. asm mov: address to: result. proxy createInstanceOf: NBExternalAddress size: NBExternalType pointerSize. asm mov: result to: asm ECX. proxy storePointer: asm ECX intoVarbytes: asm EAX at: 0. gen releaseTemps: 1. ^ asm EAX! ! !NBExternalAddressType methodsFor: 'emitting code' stamp: 'IgorStasenko 6/28/2013 14:18' prior: 27394272! pushAsPointer: gen "push a pointer to external address first indexable field (where address value held)" | asm proxy oop | proxy := gen proxy. asm := gen asm. oop := gen reserveTemp. loader emitLoad: gen to: oop. "we can skip class verification, if loader loads receiver, since nothing to fear there" loader isReceiver ifFalse: [ self verifyClassOf: oop is: NBExternalAddress generator: gen. ]. asm decorateWith: 'NBExternalAddressType>>pushAsPointer:' during: [ proxy varBytesFirstFieldOf: oop. asm push: asm EAX ]. gen releaseTemps: 1. ! ! !NBExternalAddress methodsFor: 'string access' stamp: 'CiprianTeodorov 3/18/2013 22:35' prior: 27392013! writeString: aString "write a null-terminated byte string to receiver's address" | str | str := aString copyWith: (Character value: 0). NativeBoost memCopy: str asByteArray to: self size: str size. ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !NBExternalStructure commentStamp: '' prior: 48223407! I representing external structures to closely mimic 'struct' types in C. A C structure has transparent access to its fields: that is, a structure is transparent if you know its fields and can modify them. This is in contrast of opaque structures, which you never manipulate directly but through functions. For each struct type, you define a subclass of me, and implement the #fieldsDesc class method. The #fieldDesc method should answer an array containing enumeration of structure fields in form of type and name, much like in C syntax, for example: fieldDesc ^ #( int field1; float field2; void* field3; ). Once you define the structure fields and initialize the class, you can create the instances of it and access the fields by their name (the accessor methods are generated automatically). An external structure can be allocated in object memory, or in external memory, using #new, or #externalNew correspondingly. To test if given instance is allocated on external heap you can use #isExternal method. For passing (sub)instance of NBExternalStructure as argument to external function, the function argument type must be resolved to refer to corresponding class, e.g. if you defined class MyStructure, the external function signature must use it like 'void foo (MyStructure arg)', or if you want to preserve an original C function signature as much as close to original, use aliases for type (so type with name '_C_struct_type_name_whatever' should resolve to 'MyStructure' at the end). You can use external structure for passing by value (MyStruct param), or passing by pointer (MyStruct* param) both, depending of what external function expecting. In case if you want to pass a pointer to structure, but function signature does not explicitly uses a struct type (like 'void* someParam'), you can use #address accessor and pass it as parameter to function,e.g. someObject callExternalFunctionWith: mystruct address. Using external structure as return type: if external function returns a struct type: MyStruct foo() the marshaller creates an instance of MyStruct on object memory, then lets function modify its fields and aswers the resulting object. If function returns a pointer to structure, like 'MyStruct * foo()', then marshaller will create an instance of MyStruct as return value, and store an address returned by function as instance of NBExternalAddress in its data ivar (effectively making the structure instance external). Please be aware, that #free method can only be used if you allocated an external structure by yourself , using #externalNew , but not for instances which returned by external function or when given memory is controlled by external library or was allocated using other means.! !NBExternalStructure class methodsFor: 'ffi type' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27453179! asNBExternalType: gen ^ NBExternalStructureType objectClass: self! ! !NBExternalStructure class methodsFor: 'alignment' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27452833! byteAlignment "default " ^ NativeBoost forCurrentPlatform pointerSize ! ! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'IgorStasenko 7/1/2013 13:59' prior: 27454062! createAccessorsFor: fieldName "Define read/write accessors for the given field" | code | code := fieldName,' "This method was automatically generated" ^ self fieldAt: ' , fieldName printString. self compileSilently: code classified: '*auto-accessing'. code := fieldName,': anObject "This method was automatically generated" ^ self fieldAt: ' , fieldName printString , ' put: anObject'. self compileSilently: code classified: '*auto-accessing'. ! ! !NBExternalStructure class methodsFor: 'instance creation' stamp: 'IgorStasenko 7/1/2013 14:13'! externalNew "Allocate enough bytes on external heap to hold my instance data, then answer an instance which using external data. Please note, that if you create my instances on external heap, do not forget to free memory after use, e.g. struct address free. " ^ self fromPointer: (NativeBoost allocate: self instanceSize). ! ! !NBExternalStructure class methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27452226! fields ^ currentFields ifNil: [ self rebuildFieldAccessors. currentFields ].! ! !NBExternalStructure class methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27452407! fieldsClass ^NBExternalStructureFields ! ! !NBExternalStructure class methodsFor: 'fields description' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27453351! fieldsDesc "override this method in a subclass to get an automatically generated field accessors. The field description format is following: #( type1 name1; type2 name2; .... ) " ^ #()! ! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27454739! flushNativeFieldAccessors methodDict do: [:method | NBNativeCodeGen removeNativeCodeFrom: method ]! ! !NBExternalStructure class methodsFor: 'instance creation' stamp: 'IgorStasenko 7/1/2013 14:19' prior: 27453657! fromPointer: externalAddress "Create an instance of receiver from given external address. " ^self basicNew initializeWithAddress: externalAddress. ! ! !NBExternalStructure class methodsFor: 'class initialization' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27453013! initializeAccessors initialized := true. self rebuildFieldAccessors.! ! !NBExternalStructure class methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27452543! instanceSize ^ self fields totalSize ! ! !NBExternalStructure class methodsFor: 'testing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27456335! isInitialized ^ initialized == true! ! !NBExternalStructure class methodsFor: 'instance creation' stamp: 'IgorStasenko 7/1/2013 14:14' prior: 27453899! new ^self basicNew initializeInternal! ! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27454944! noteCompilationOf: aSelector meta: isMeta initialized == true ifFalse: [ ^ self ]. isMeta ifTrue: [ "Compilation on a class side , lets get rid of native methods on instance side" (aSelector == #fieldsDesc or: [ aSelector == #byteAlignment ]) ifTrue: [ self flushNativeFieldAccessors. self rebuildFieldAccessors ]. ]. ! ! !NBExternalStructure class methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27452681! offsetOf: aFieldName ^ self fields offsetOf: aFieldName! ! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27455385! rebuildFieldAccessors currentFields ifNotNil: [ currentFields fieldNamesDo: [:field | self removeAccessor: field. self removeAccessor: field asMutator ]]. currentFields := self fieldsClass new parseFields: self fieldsDesc byteAlignment: self byteAlignment structure: self. self fields fieldNamesDo: [:fldName | self createAccessorsFor: fldName ]. ^ currentFields! ! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'CiprianTeodorov 5/19/2013 03:56' prior: 27455869! removeAccessor: aSelector methodDict at: aSelector ifAbsent: [ ^ self ]. self removeSelectorSilently: aSelector. ! ! !NBExternalStructure methodsFor: 'acccessing' stamp: 'IgorStasenko 7/1/2013 14:18'! address "Answer an object which can be used as an address, pointing to first byte of external structure." ^data! ! !NBExternalStructure methodsFor: 'dnu' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27448493! doesNotUnderstand: aMessage self class isInitialized ifFalse: [ "retry send after initialization" self class initializeAccessors. ^ aMessage sentTo: self ]. ^ super doesNotUnderstand: aMessage! ! !NBExternalStructure methodsFor: 'private' stamp: 'CiprianTeodorov 3/28/2013 19:45' prior: 27449552! emitRead: aFieldName generator: gen | offset type asm mem | gen requestor: self class. type := self class fields typeOf: aFieldName. offset := self class fields offsetOf: aFieldName. asm := gen asm. asm pop: asm EAX. "load the value" mem := asm EAX ptr + offset. "read a value from given location and return oop" type readOop: mem generator: gen. ^ gen! ! !NBExternalStructure methodsFor: 'private' stamp: 'IgorStasenko 7/1/2013 14:16' prior: 27450121! emitWrite: aFieldName generator: gen | offset type asm size rcvr fieldAddr | gen requestor: self class. type := self class fields typeOf: aFieldName. offset := self class fields offsetOf: aFieldName. rcvr := gen reserveTemp. fieldAddr := gen reserveTemp. asm := gen asm. type loader: (NBSTMethodArgument new stackIndex: 0). type emitPush: gen. "push value on stack" gen proxy stackValue: 1. "receiver oop" asm mov: asm EAX to: rcvr. NBExternalStructureType new objectClass: self class; fetchStructAddressFrom: rcvr gen: gen. "now, in EAX the address to first byte of external structure" offset > 0 ifTrue: [ asm add: asm EAX with: offset ]. asm mov: asm EAX to: fieldAddr. gen emitFailureTest. "important to check if everything ok, before we write value to receiver" size := type typeSize. "just copy the value from stack to the struct field" asm mov: fieldAddr to: asm EAX. offset := 0. [ size >= 4 ] whileTrue: [ asm mov: asm ESP ptr + offset to: asm ECX; mov: asm ECX to: asm EAX ptr + offset. size := size - 4. offset := offset + 4. ]. size >= 2 ifTrue: [ asm mov: asm ESP ptr16 + offset to: asm CX; mov: asm CX to: asm EAX ptr16 + offset. size := size - 2. offset := offset + 2. ]. size > 0 ifTrue: [ " last byte " asm mov: asm ESP ptr8 + offset to: asm CL; mov: asm CL to: asm EAX ptr8 + offset. ]. "answer the receiver" asm mov: rcvr to: asm EAX. gen epilogue. gen emitFailureHandler. ^ gen ! ! !NBExternalStructure methodsFor: 'private' stamp: 'IgorStasenko 7/1/2013 14:01' prior: 27451592! fieldAt: aFieldName "This method is used by auto-generated accessor method(s) to generate code for accessing field(s) of external structure. Do not override" ^ (self nbCalloutIn: thisContext sender) function: 'oop (void *data)' emit: [:gen | self emitRead: aFieldName generator: gen. ] ! ! !NBExternalStructure methodsFor: 'private' stamp: 'IgorStasenko 7/1/2013 14:01' prior: 27451830! fieldAt: aFieldName put: value "This method is used by auto-generated accessor method(s) to generate code for accessing field(s) of external structure. Do not override" ^ NBFFICallout handleFailureIn: thisContext sender nativeCode: [:gen | self emitWrite: aFieldName generator: gen. gen bytes ] ! ! !NBExternalStructure methodsFor: 'initialize-release' stamp: 'IgorStasenko 7/1/2013 14:12'! free "A convenience method, to explicitly free external memory, symmetrical when using #externalNew protocol for creating receiver. Do nothing if receiver is not pointing to external heap. " self isExternal ifTrue: [ data free. ].! ! !NBExternalStructure methodsFor: 'initialize-release' stamp: 'IgorStasenko 7/1/2013 14:14'! initializeInternal "initialize receiver with data held in object memory heap " data := ByteArray new: self class instanceSize. ! ! !NBExternalStructure methodsFor: 'initialize-release' stamp: 'CiprianTeodorov 4/7/2013 21:38'! initializeWithAddress: anExternalAddress "initialize the receiver with data held in external memory" data := anExternalAddress. ! ! !NBExternalStructure methodsFor: 'testing' stamp: 'IgorStasenko 7/1/2013 14:15'! isExternal "answer true if data referenced by receiver located in external heap, or just in object memory " ^ data class == NBExternalAddress! ! !NBExternalStructure methodsFor: 'printing' stamp: 'CiprianTeodorov 3/27/2013 21:47' prior: 27448785! printOn: aStream "Append to the argument, aStream, the names and values of all the record's variables." Printing == true ifTrue: [ "since we use field accessors for printing values, debugging the code with not-yet nativised accessors leads to infinite loop" ^ aStream nextPutAll: self class name; nextPutAll: '(...)'. ]. Printing := true. [ aStream nextPutAll: self class name; nextPutAll: ' ( '; cr. self class fields namesInDeclarationOrder do: [ :field | aStream nextPutAll: field; nextPut: $:; space; tab. (self perform: field ) printOn: aStream. ] separatedBy: [ aStream cr ]. aStream cr; nextPut: $). ] ensure: [ Printing := false ]. ! ! !NBExternalUnion class methodsFor: 'accessing' stamp: 'CiprianTeodorov 3/28/2013 20:13' prior: 27479183! fieldsClass ^ NBExternalUnionFields! ! !NBExternalTypeValue commentStamp: '' prior: 48226215! I am a generic meta class for creating a subclasses, which instances will hold a single value of specified C type. To create a new class for some concrete C type use: myClass := NBExternalTypeValue getClassForType: 'float'. Then you can use instances of given anonymous class(es) as a value holders for type you specified: float := myClass new. ... float value: 1.5 float value etc.. By combining this with class/pool variables we have a convenient way of defining a values, which are passed by pointer to a function. For instance, imagine that we need to create a binding to a function: void getFoo( SomeType * value) which is not an unusual situation, when C function using pointer arguments for storing it's output there. And this is what NBExternalTypeValue is done for: To define a binding to this function you can: - declare a pool/class variable, named SomeType - initialize it: SomeType := NBExternalTypeValue ofType: 'SomeType' and then use it in function signature: getFoo: value ^ self nbcall: #(void getFoo ( SomeType * value )) --- and call it like: var := SomeType new. self getFoo: var. var value -> will read the value ! !NBExternalTypeValue class methodsFor: 'converting' stamp: 'IgorStasenko 6/27/2013 17:05'! asNBExternalType: gen ^gen resolveType: self valueType! ! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'CiprianTeodorov 4/9/2013 21:50' prior: 43476137! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " | newSubclass | newSubclass := ClassBuilder new newSubclassOf: NBExternalTypeValue type: NBExternalTypeValue typeOfClass instanceVariables: '' from: nil. "we're not using 'self' to avoid wrong subclassing from anonymous subclass " newSubclass initValueType: aTypeName. ^ newSubclass! ! !NBExternalTypeValue class methodsFor: 'class initialization' stamp: 'IgorStasenko 6/27/2013 16:16'! initValueType: aTypeName "Initialize the value type and size. If you want to use a public subclass of me, then make sure you call this method in your class #initialize method. " valueType := aTypeName. valueSize := (NBFFICallout new requestor: self; resolveType: valueType) typeSize . self installAccessors.! ! !NBExternalTypeValue class methodsFor: 'private' stamp: 'CiprianTeodorov 4/9/2013 21:50'! installAccessors "Copy superclass methods, which serve as a template where generated code will be installed. Each subclass of NBTypeValue should implement (override) these key methods " self basicAddSelector: #value withMethod: (NBExternalTypeValue >> #value ) copy. self basicAddSelector: #value: withMethod: (NBExternalTypeValue >> #value: ) copy. ! ! !NBExternalTypeValue class methodsFor: 'instance creation' stamp: 'CiprianTeodorov 4/9/2013 20:50'! new ^ (self basicNew: self valueSize) initialize! ! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'CiprianTeodorov 4/9/2013 19:20' prior: 27478415! ofType: aTypeName ^ self getClassForType: aTypeName ! ! !NBExternalTypeValue class methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:42'! valueSize ^valueSize! ! !NBExternalTypeValue class methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:21' prior: 27477599! valueType ^ valueType! ! !NBExternalTypeValue class methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:21' prior: 27478735! valueType: aTypeName valueType := aTypeName. self rebuildFieldAccessors! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:41'! emitCopy: asm "Emit code to copy elementSize bytes from ESP ptr -> EAX ptr " | toCopy offset | toCopy := self class valueSize. toCopy > 8 ifTrue: [ ^ self emitCopyUsingLoop: asm ]. offset := 0. [ toCopy >= 4 ] whileTrue: [ asm mov: asm ESP ptr + offset to: asm ECX; mov: asm ECX to: asm EAX ptr + offset. toCopy := toCopy - 4. offset := offset + 4. ]. toCopy >= 2 ifTrue: [ asm mov: asm ESP ptr16 + offset to: asm CX; mov: asm CX to: asm EAX ptr16 + offset. toCopy := toCopy - 2. offset := offset + 2. ]. toCopy > 0 ifTrue: [ " last byte " asm mov: asm ESP ptr8 + offset to: asm CL; mov: asm CL to: asm EAX ptr8 + offset. ]. ! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:42'! emitCopyUsingLoop: asm | ssi sdi | "copy the value using loop " ssi := asm reserveTemp. sdi := asm reserveTemp. asm mov: asm ESI to: ssi; mov: asm EDI to: sdi; cld; mov: asm ESP to: asm ESI; mov: asm EAX to: asm EDI; mov: self class valueSize to: asm ECX; rep;movsb; mov: ssi to: asm ESI; mov: sdi to: asm EDI; releaseTemps: 2. ! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'IgorStasenko 7/1/2013 14:29'! emitRead ^ (self nbCalloutIn: thisContext sender) function: 'oop ()' emit: [:gen :proxy :asm | proxy receiver. "receiver oop" proxy varBytesFirstFieldOf: asm EAX. (gen resolveType: self class valueType) readOop: asm EAX ptr generator: gen. ]! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'IgorStasenko 7/1/2013 14:29'! emitWrite ^(self nbCalloutIn: thisContext sender) function: 'oop (oop value, ', self class valueType,' value)' emit: [ :gen :proxy :asm | |oop| oop := gen reserveTemp. asm pop: asm EAX; mov: asm EAX to: oop. proxy receiver. proxy varBytesFirstFieldOf: asm EAX. self emitCopy: asm. asm mov: oop to: asm EAX. ]! ! !NBExternalTypeValue methodsFor: 'printing' stamp: 'CiprianTeodorov 4/9/2013 19:19' prior: 27476795! printOn: aStream "Append to the argument, aStream, the names and values of all the record's variables." Printing == true ifTrue: [ "since we use field accessors for printing values, debugging the code with not-yet nativised accessors leads to infinite loop" ^ aStream nextPutAll: self class name; nextPutAll: '(...)'. ]. Printing := true. [ aStream nextPutAll: self class name; nextPutAll: ' ( '; nextPutAll: self class valueType; nextPutAll: ') ('; cr. self value printOn: aStream. aStream cr; nextPut: $). ] ensure: [ Printing := false ]. ! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:46'! value "Note, this method used as a template for my anonymous subclasses. " ^ self emitRead! ! !NBExternalTypeValue methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 19:46'! value: value "Note, this method used as a template for my anonymous subclasses. " ^ self emitWrite ! ! !NativeBoost class methodsFor: 'production mode support' stamp: 'IgorStasenko 7/12/2013 16:40'! prepareForProduction "make sure all methods in image, which using NB call primitive, having captured method's argument names (so later, image can run NB code without requiring access to source code)" CompiledMethod allInstances do: [ :method | method hasNativeCallPrimitive ifTrue: [ "that will make sure that names are cached" method nbArgumentNames ] ]! ! !NativeBoost class methodsFor: 'debugger support' stamp: 'IgorStasenko 3/19/2012 13:38' prior: 38944508! tryRunNativeCode: aCompiledMethod for: aReceiver withArgs: arguments "run only a native code of given method, and if it fails evaluate aFailBlock instead" | src node m | "self assert: (self isNativeMethod: aCompiledMethod)." src := String streamContents: [:str | str nextPutAll: 'NBDebug_stub'. 1 to: aCompiledMethod numArgs do: [:i | i = 1 ifTrue: [ str nextPutAll: ': ' ] ifFalse: [ str nextPutAll: ' with: ' ]. str nextPutAll: 'arg'. i printOn: str. ]. str cr; nextPutAll: ' '; cr; nextPutAll: ' ^ ContextPart primitiveFailTokenFor: errorCode'. ]. node := Compiler new compile: src in: aCompiledMethod methodClass classified: nil notifying: nil ifFail: [ ^ ContextPart primitiveFailTokenFor: nil ]. m := node generate: aCompiledMethod trailer. m flushCache. m selector flushCache. ^ m valueWithReceiver: aReceiver arguments: arguments. ! ! !NativeBoost methodsFor: 'retrieving symbols' stamp: 'IgorStasenko 7/1/2013 11:04' prior: 27920861! ioLoadModule: aModuleName " call an interpreter proxy function void* ioLoadModuleOfLength(char*, int) to retrieve an external module handle if module can't be loaded, or not found , answer nil " ^ NBNativeCodeGen methodAssembly: [:gen | | fail retHandle proxy asm moduleNameOop end | moduleNameOop := gen reserveTemp. asm := gen asm. proxy := gen proxy. fail := asm uniqueLabelName: 'failed'. retHandle := asm uniqueLabelName: 'retHandle'. end := asm uniqueLabelName: 'end'. proxy stackValue: 0. asm mov: EAX to: moduleNameOop. proxy isBytes: EAX. asm or: EAX with: EAX. asm jz: fail. proxy byteSizeOf: moduleNameOop. asm push: EAX. " push length " proxy varBytesFirstFieldOf: moduleNameOop. asm push: EAX. "push first indexable field address" proxy callFn: #ioLoadModule:OfLength: . asm or: EAX with: EAX; jnz: retHandle. proxy nilObject. asm jmp: end. asm label: retHandle. proxy signed32BitIntegerFor: EAX. asm jmp: end. asm label: fail. proxy primitiveFail. asm label: end. gen epilogue ] ! ! !NativeBoost methodsFor: 'retrieving symbols' stamp: 'CiprianTeodorov 3/18/2013 22:34' prior: 27923132! loadSymbol: aSymbolName fromModule: moduleName "module could be a string (name) or handle " | bytes module handle | bytes := ByteArray new: 8. moduleName isString ifTrue: [ self bootstrapLoadModule: moduleName asByteArray ofLength: moduleName size into: bytes. module := bytes unsignedLongAt: 1 bigEndian: false. module = 0 ifTrue: [ ^ nil ]. ] ifFalse: [ "if value is negative, use 32-bit complement" module := moduleName bitAnd: 16rFFFFFFFF. ]. self bootstrapLoadSymbol: aSymbolName asByteArray ofLength: aSymbolName size fromModule: module into: bytes. handle := bytes unsignedLongAt: 1 bigEndian: false. handle = 0 ifTrue: [ ^ nil ]. ^ NBExternalAddress value: handle ! ! !NativeBoost methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/2/2010 13:52' prior: 27912193! pointerSize self subclassResponsibility ! ! !NativeBoost methodsFor: 'initialize-release' stamp: 'Igor.Stasenko 5/2/2010 13:36' prior: 27912326! primEnableNativeCode "Primitive. Enables the execution of native code, which initially disabled during fresh image boot " ! ! NBExternalStructure class removeSelector: #allocateOnObjectMemory! NBExternalStructure class removeSelector: #allocateOnCHeap! TApplyingOnClassSide removeSelector: #externalTypeAlias:! NBFFIConst removeSelector: #prepareUsing:! TBehavior removeSelector: #nbFnArgument:generator:! TBehavior removeSelector: #nbBindingOf:! TBehavior removeSelector: #externalTypeAlias:! NBExternalType removeSelector: #storageSize! NBExternalType class removeSelector: #prepareArgument:generator:! NBQSortCallback removeSelector: #trunk! NBQSortCallback removeSelector: #index! NBQSortCallback class removeSelector: #fnSpec! Smalltalk globals removeClassNamed: #NBQSortCallback! NBExternalTypeValue class removeSelector: #fieldsDesc! "NativeBoost-Core"! !NativeBoostMac32 methodsFor: 'assembler' stamp: 'IgorStasenko 8/5/2011 08:48'! newAssembler ^ AJx86Assembler new! ! "NativeBoost-Mac"! !NBWin32Heap methodsFor: 'call convention' stamp: 'IgorStasenko 11/24/2012 17:29'! nbCallingConvention ^ #stdcall! ! "NativeBoost-Win32"! !NBTestExternalValue class methodsFor: 'class initialization' stamp: 'CiprianTeodorov 4/9/2013 21:07'! initialize self initValueType: 'int'.! ! !NBTestResources methodsFor: 'running' stamp: 'CiprianTeodorov 5/19/2013 03:36'! setUp {NBTestNestedStructure. NBTestStructure. NBTestStructure1byte. NBTestStructure2. NBTestStructure9bytes. NBTestStructureWithCallback. NBTestUnion1Byte. NBTestUnion2Pointers. NBTestUnionIntSize. NBTestUnionWithCallback. NBTestUnionWithStructure. NBTestUnionWithUnion} do: [ :each | each perform: #rebuildFieldAccessors ]! ! !NBQSortCallback class methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/8/2010 19:17'! callType ^ #cdecl! ! !NBQSortCallback class methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/13/2010 22:54'! fnSpec ^ #(int ( NBExternalAddress a, NBExternalAddress b))! ! !NBQSortCallback methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 15:30'! index ^ index! ! !NBQSortCallback methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 15:30'! trunk ^ trunk! ! !NBTestCallbackReturnEnum class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/11/2012 19:53'! fnSpec ^#(#NBTestEnumeration (NBInt32))! ! !NBTestCallbackReturnEnum1 class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:14'! fnSpec ^#(#NBTestEnumerationFromPairs (NBInt32))! ! !NBTestEnumeration class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/11/2012 19:10'! enumDecl ^ {(#AAA -> 1). (#BBB -> 2). (#CCC -> 3). (#DDD -> 2400)} asDictionary ! ! !NBTestEnumerationFromPairs class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 08:22'! enumDecl ^ #(AAA 1 BBB 2 CCC 3 DDD 2400) ! ! !NBTestUnion1Byte class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:28'! fieldsDesc " self rebuildFieldAccessors " ^#( byte field1 byte field2 )! ! !NBTestUnion2Pointers class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:31'! fieldsDesc " self rebuildFieldAccessors " ^ #( NBExternalAddress addr1 NBExternalAddress addr2 )! ! !NBTestUnionIntSize class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:33'! fieldsDesc " self rebuildFieldAccessors " ^ #( int x; int y; char field )! ! !NBTestUnionWithCallback class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:36'! fieldsDesc " self rebuildFieldAccessors " ^ #( char x; NBQSortCallback callback; )! ! !NBTestUnionWithStructure class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:38'! fieldsDesc " self rebuildFieldAccessors " ^ #( char x; NBTestStructure9bytes struct; int z; )! ! !NBTestUnionWithUnion class methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 17:43'! fieldsDesc " self rebuildFieldAccessors " ^ #( char x; NBTestUnionIntSize union; double z; )! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/8/2013 16:11'! anotherMethodWithPrimitive220 ^ errorCode asString! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/8/2013 15:48'! methodWithPrimitive220 ^errorCode ! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/20/2012 12:01'! nonExistedPrim: aBlock | a b c| ^ aBlock value: thisContext ! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/20/2012 14:08'! return0Code " a simple routine, just return 1 (smallinteger = 0)" | asm | ^ (asm := NativeBoost newAssembler ) noStackFrame; mov: 1 to: asm EAX; ret; bytes ! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/13/2012 13:25'! stub ^ 100! ! !NBCoreTests methodsFor: 'misc' stamp: 'IgorStasenko 2/13/2012 13:42'! stub2 ^ NBNativeCodeGen generateCode: [:gen | self return0Code ] andRetry: thisContext! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 8/24/2012 17:19'! testExternalResourceManagerFinalization | obj count | count := 0. obj := NBMockExternalObject new. obj data: [ count := count + 1 ]. obj registerAsExternalResource. obj := nil. Smalltalk garbageCollect; garbageCollect. self assert: (count = 1)! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 5/31/2012 14:53'! testFinalization | reg objs count | reg := NBFinalizationRegistry new. count := 0. reg freeItemsDo: [:item | count := count + 1]. self assert: count = reg initialSize. objs := OrderedCollection new. 133 timesRepeat: [ reg add: (objs add: Object new) ]. count := 0. reg freeItemsDo: [:item | count := count + 1]. self assert: reg items size - count = 133. objs := nil. Smalltalk garbageCollect. count := 0. reg freeItemsDo: [:item | count := count + 1]. self assert: count = reg items size. reg reset. count := 0. reg freeItemsDo: [:item | count := count + 1]. self assert: count = reg initialSize. ! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 2/20/2012 14:26'! testGenerateAndRetry NBNativeCodeGen removeNativeCodeFrom: (self class>>#stub2). [ self assert: self stub2 = 0. ] ensure: [ NBNativeCodeGen removeNativeCodeFrom: (self class>>#stub2). ]. ! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 2/20/2012 12:13'! testGettingError self nonExistedPrim: [:context | "This error produced by Cog VM, when primitive not found" self assert: (context tempAt: context method numTemps ) == #'not found' ]! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 3/20/2011 04:12'! testHasTrailerInstalled "Make sure compiled methods trailer installed" self assert: (CompiledMethodTrailer trailerKinds includes: #NativeCodeTrailer )! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 2/13/2012 14:04'! testInstallingNativeCode " Test a protocol for installing/removing native code directly. " NBNativeCodeGen removeNativeCodeFrom: (self class>>#stub). self assert: (self class>>#stub) hasNativeCode not. self assert: self stub = 100. [ NBNativeCodeGen installNativeCode: self return0Code into: (self class>>#stub). self assert: (self class>>#stub) hasNativeCode. self assert: (self stub = 0). ] ensure: [ NBNativeCodeGen removeNativeCodeFrom: (self class>>#stub). ]. self assert: (self class>>#stub) hasNativeCode not. ! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 3/20/2011 04:05'! testPlatformId "sometimes i forget to set platform ID, when building plugin" self assert: NativeBoost platformId ~= 0! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 2/8/2013 17:10'! testPrimitive220 " Test a protocol for installing/removing native code directly. " | asm label method gen | [ ^ self ] value. " this code will crash your VM " method := self class>>#anotherMethodWithPrimitive220. NBNativeCodeGen removeNativeCodeFrom: method. method := self class>>#anotherMethodWithPrimitive220. self assert: method hasNativeCode not. asm := NativeBoost forCurrentPlatform newAssembler noStackFrame. label := asm uniqueLabelName: 'done'. gen := NBNativeCodeGen newForMethod: method. asm := gen asm. asm noStackFrame. asm push: 999. gen proxy callFn: (gen proxy functions at:#primitiveFailFor: ). asm int3; jmp: label; mov: 1 to: asm EDX; label: label. NBNativeCodeGen installNativeCode: asm bytes into: method. ( self class>>#anotherMethodWithPrimitive220 ) forceJIT. ^ self anotherMethodWithPrimitive220 ! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 2/8/2013 15:51'! testPrimitive220ErrorCode " Test a protocol for installing/removing native code directly. " NBNativeCodeGen removeNativeCodeFrom: (self class>>#methodWithPrimitive220). self assert: (self class>>#methodWithPrimitive220) hasNativeCode not. "502 is error code = ErrNoNativeCodeInMethod " self methodWithPrimitive220 = 502. ! ! !NBCoreTests methodsFor: 'tests' stamp: 'IgorStasenko 5/28/2012 07:00'! testRecursionDetection | result | result := false. NBRecursionDetect in: #abc during: [ result := (NBRecursionDetect signalForMethod: #abc ) ]. self assert: result == true. result := (NBRecursionDetect signalForMethod: #abc ). self assert: result == false. ! ! !NBExternalAddressTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/4/2011 08:25'! testAddressAndStruct | struct addr string | struct := NBTestStructure2 new. self assert: struct addr class == NBExternalAddress . addr := NativeBoost allocate: 10. [ addr writeString: 'abcde'. struct addr: addr. self assert: addr = struct addr. string := struct addr readString . ] ensure: [ NativeBoost free: addr ]. self assert: string = 'abcde' ! ! !NBExternalAddressTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/13/2010 22:51'! testMemoryAccess | addr | addr := NativeBoost allocate: 10. [ 1 to: 10 do: [:i | addr byteAt: i-1 put: i ]. 1 to: 10 do: [:i | self assert: (addr byteAt: i-1) = i ]. ] ensure: [ NativeBoost free: addr ] ! ! !NBExternalAddressTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/4/2011 07:29'! testStringAccess | addr string | addr := NativeBoost allocate: 10. [ addr writeString: 'abcde'. string := addr readString. ] ensure: [ NativeBoost free: addr ]. self assert: string = 'abcde' ! ! !NBExternalAddressTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/15/2013 15:47'! testStructCopy | struct addr struct2 | [ struct := NBTestStructure new. struct byte: 5; long: 10; short: 20. addr := NativeBoost allocate: NBTestStructure instanceSize. NativeBoost memCopy: struct address to: addr size: NBTestStructure instanceSize. struct2 := NBTestStructure fromPointer: addr. self assert: struct2 byte = 5. self assert: struct2 long = 10. self assert: struct2 short = 20. ] ensure: [ NativeBoost free: addr ] ! ! !NBExternalArrayTest methodsFor: 'misc' stamp: 'IgorStasenko 12/7/2012 16:06'! apiClass ^ NBExternalArray ! ! !NBExternalArrayTest methodsFor: 'testing - class protocols' stamp: 'IgorStasenko 12/7/2012 01:22'! testAccessors "make sure a generated class has accessors installed " | cls m_at m_atput | cls := self apiClass ofType: 'int32' . self assert: (cls methodDict includesKey: #at: ). self assert: (cls methodDict includesKey: #at:put: ). m_at := cls compiledMethodAt: #at: . m_atput := cls compiledMethodAt: #at:put: . "make sure they are properly installed" self assert: m_at methodClass == cls. self assert: m_atput methodClass == cls. "make sure they are not same as in superclass " self assert: m_at ~~ (self apiClass compiledMethodAt: #at: ). self assert: m_atput ~~ (self apiClass compiledMethodAt: #at:put: ). ! ! !NBExternalArrayTest methodsFor: 'testing - class protocols' stamp: 'IgorStasenko 12/7/2012 02:22'! testAnonymousClassCreation | cls | cls := self apiClass ofType: 'int32' . "should get an anonymous subclass" self assert: (cls inheritsFrom: self apiClass). ".. with properly initialized values" self assert: cls elementType equals: 'int32'. self assert: cls elementSize = 4 . " and, of course, they should not be the same object" self assert: cls ~~ self apiClass. ! ! !NBExternalArrayTest methodsFor: 'testing - instances' stamp: 'IgorStasenko 12/7/2012 02:22'! testBasicProtocol | cls array | cls := self apiClass ofType: 'int32' . array := cls new: 10. self assert: array size equals: 10. "instantiating with #new: should create an array in object memory " self assert: array isExternal equals: false. self assert: (array at: 1 put: 42) equals: 42. self assert: (array at: 1) equals: 42. self assert: (array at: 10 put: 420) equals: 420. self assert: (array at: 10) = 420. ! ! !NBExternalArrayTest methodsFor: 'testing - instances' stamp: 'IgorStasenko 12/7/2012 02:45'! testExternalArray | cls array | cls := self apiClass ofType: 'int32' . [ array := cls externalNew: 10. self assert: array size equals: 10. "instantiating with #externalNew: should create an array in external memory " self assert: array isExternal equals: true. self assert: (array at: 1 put: 42) equals: 42. self assert: (array at: 1) equals: 42. self assert: (array at: 10 put: 420) equals: 420. self assert: (array at: 10) = 420. ] ensure: [ array free ] ! ! !NBExternalArrayTest methodsFor: 'testing - instances' stamp: 'IgorStasenko 12/7/2012 02:44'! testExternalCopy | cls array copy | cls := self apiClass ofType: 'int32' . [ array := cls externalNew: 10. array at: 1 put: 2. array at: 2 put: 3. copy := array copy. "#copy of external array should create a copy in object memory heap " self assert: copy isExternal equals: false. "and , of course, copies should be equal " self assert: array = copy. ] ensure: [ array free ] ! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:14'! cbClass ^NBTestCallbackReturnEnum1 ! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:01'! enumClass ^NBTestEnumerationFromPairs ! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:27'! enumToInt: anEnum ^self primEnumToInt1: anEnum ! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:25'! executeCb: anEnumCb ^self primExecuteCallbackEnumReturn1: anEnumCb ! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:26'! primEnumToInt1: aMyEnumInst ^ NBFFICallout cdecl: {NBInt32. {self enumClass. #aMyEnumInst}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX ]! ! !NBExternalEnumFromPairsTest methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:25'! primExecuteCallbackEnumReturn1: anEnumCb ^ NBFFICallout cdecl: {self enumClass. {self cbClass. #anEnumCb}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. asm push: 2400 asImm. asm call: asm EAX ] options: #(#optMayGC)! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:06'! callback ^ self cbClass on: [ :anInt | self enumClass at: (self enumClass itemAt: anInt) ]! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:06'! callbackAAA ^ self cbClass on: [ :anInt | self enumClass AAA ]! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:06'! callbackWrongReturn ^ self cbClass on: [ :anInt | "this callback will return a plain integer" self enumClass itemAt: anInt ]! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:06'! cbClass ^NBTestCallbackReturnEnum! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/11/2012 19:53'! enumClass ^NBTestEnumeration ! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:27'! enumToInt: anEnum ^self primEnumToInt: anEnum ! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:24'! executeCb: anEnumCb ^self primExecuteCallbackEnumReturn: anEnumCb ! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:02'! initialize super initialize. self enumClass initialize! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:04'! primEnumToInt: aMyEnumInst ^ NBFFICallout cdecl: {NBInt32. {self enumClass. #aMyEnumInst}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX ]! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:05'! primExecuteCallbackEnumReturn: anEnumCb ^ NBFFICallout cdecl: {self enumClass. {self cbClass. #anEnumCb}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. asm push: 2400 asImm. asm call: asm EAX ] options: #(#optMayGC)! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:05'! primIntToEnum: anInteger ^ NBFFICallout cdecl: {self enumClass. {#NBInt32. #anInteger}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. ]! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 2/27/2013 08:58'! testCallbackAAA |result| self skip. "workaround: this crashes the VM sometimes" result := (self executeCb: self callbackAAA ). self assert: (result isKindOf: self enumClass ). self assert: result value = 1. self assert: result item = #AAA.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:25'! testCallbackEnumFromInt |result| result := (self executeCb: self callback ). self assert: (result isKindOf: self enumClass ). self assert: result value = 2400. self assert: result item = #DDD. ! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 2/27/2013 09:00'! testCallbackWrongReturn "there is an issue with callback return. If it fails I cannot see how we can catch the exception and continue" "so this test is supposed to fail for now." "In the future we might accept enumeration representation values (int/uint) and fix this" self skip. self should: [Error signal. self primExecuteCallbackEnumReturn: self callbackWrongReturn ] raise: NBNativeCodeError! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/10/2012 20:11'! testEnumIdents self assert: self enumClass AAA value = 1. self assert: self enumClass DDD value = 2400! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/10/2012 19:58'! testEnumIncludes self assert: (self enumClass includes: #DDD). self deny: (self enumClass includes: #EEE)! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:27'! testEnumToInt self assert: (self enumToInt: self enumClass AAA) = 1. self assert: (self enumToInt: self enumClass BBB) = 2. self assert: (self enumToInt: self enumClass CCC) = 3. self assert: (self enumToInt: self enumClass DDD) = 2400.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 19:59'! testFromIntegerFailure self should: [ self enumClass fromInteger: 234 ] raise: Error! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 19:59'! testFromIntegerOk self assert: (self enumClass fromInteger: 1) value = 1 . self assert: (self enumClass fromInteger: 2) value = 2. self assert: (self enumClass fromInteger: 3) value = 3. self assert: (self enumClass fromInteger: 2400) value = 2400.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/10/2012 19:57'! testIntToEnum self assert: (self primIntToEnum: 1) value = 1 . self assert: (self primIntToEnum: 2) value = 2. self assert: (self primIntToEnum: 3) value = 3. self assert: (self primIntToEnum: 2400) value = 2400.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/10/2012 19:57'! testIntToEnumNotIncluded self assert: (self primIntToEnum: 7) value = 7. self assert: (self primIntToEnum: 3) value = 3. self assert: (self primIntToEnum: 7) item isNil. self assert: (self primIntToEnum: 256) item isNil.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/10/2012 21:04'! testNewError self should: [ self enumClass new ] raise: ShouldNotImplement! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 12/13/2012 20:07'! testNotEnumMember self should: [ self enumClass TTT ] raise: MessageNotUnderstood ! ! !NBExternalHeapManagerTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/5/2011 07:20'! newHeap ^ NBMockExternalHeapManager new! ! !NBExternalHeapManagerTests methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2010 20:47'! testAllocate " self new testAllocate " | heap address size | size := 100. heap := self newHeap. address := heap allocate: size. self assert: ( heap isValidAddress: address size: size ) . self assert: heap totalAllocatedMemory = size. self assert: heap numPages = 1 . self assert: heap numAllocatedBlocks = 1. heap free: address. self assert: heap numAllocatedBlocks = 0. self assert: heap numPages = 0 . self assert: heap numBlocks = 0 . self assert: (heap isValidAddress: address size: size) not . self assert: heap totalAllocatedMemory = 0. ! ! !NBExternalHeapManagerTests methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 10/5/2010 20:45'! testAllocate2 " self new testAllocate2 " | heap addr1 addr2 | heap := self newHeap. addr1 := heap allocate: 1. addr2 := heap allocate: 2. self assert: heap totalAllocatedMemory = 3 . self assert: heap numAllocatedBlocks = 2 . heap free: addr1. self assert: heap numAllocatedBlocks = 1. self assert: heap totalAllocatedMemory = 2 . heap free: addr2. self assert: heap numPages = 0 . self assert: heap numBlocks = 0 . self assert: heap totalAllocatedMemory = 0 . ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 9/26/2010 05:38'! benchQSort | bytes memBytes callback callback2 times | bytes := #[ 2 5 3 10 39 4 80 203 94 215 30 60 80 20 1 4 0 ]. memBytes := NativeBoost allocate: bytes size. callback := self createNativeCallback. callback2 := NBQSortCallback on: [:a :b | (a byteAt: 0) - (b byteAt: 0) ]. [ callback install. times := { [ bytes copy sort ]. [ self primNativeQSort: bytes copy compare: callback address ]. [ NativeBoost memCopy: bytes to: memBytes size: bytes size. self primStQSort: memBytes len: bytes size compare: callback2 ]. } collect: [:block | [ 100000 timesRepeat: block ] timeToRun ]. ] ensure: [ callback uninstall. NativeBoost free: memBytes ]. ^ times ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 16:26'! checkCallback: arr1 with: arr2 compare: nativeCallback ^ self nbCallout function: #(long (NBExternalAddress nativeCallback, byte* arr1, byte* arr2 )) emit: [:gen | gen asm pop: EAX; call: EAX ] ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 16:26'! checkCallbackAddress: nativeCallbackAddr ^ self nbCallout function: #(ulong (NBExternalAddress nativeCallbackAddr)) emit: [:gen | gen asm pop: EAX ] " options: #( - optAllowByteArraysPtr +optAllowExternalAddressPtr ) "! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 16:26'! checkEmitFetchClass " checker for fetching the class code emitting " ^ self nbCallout function: #(oop ()) emit: [:gen | gen emitFetchClass: NBExternalAddress ]! ! !NBFFICallbackTests methodsFor: 'language-side callback' stamp: 'IgorStasenko 11/24/2012 16:26'! checkSTCallbackAddress: callback ^ self nbCallout function: #(void * (NBQSortCallback callback)) emit: [:gen | gen asm pop: EAX ] ! ! !NBFFICallbackTests methodsFor: 'native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:36'! createNativeCallback " The routine must compare the elements, then return one of the following values: < 0 elem1 less than elem2 0 elem1 equivalent to elem2 > 0 elem1 greater than elem2 " ^ NBNativeFunctionGen cdecl: #( int (byte* a, byte * b) ) emit: [:gen | | asm | asm := gen asm. asm mov: (gen arg: #b) to: EAX; mov: EAX ptr8 to: CL; mov: (gen arg: #a) to: EAX; mov: EAX ptr8 to: AL; sub: AL with: CL; movsx: EAX with: AL "sign-extend the result" ] ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/5/2010 16:55'! dummyMethod: aParam ^ aParam! ! !NBFFICallbackTests methodsFor: 'qsort callouts' stamp: 'IgorStasenko 11/24/2012 16:27'! primNativeQSort: base compare: nativeCallback "Here, the base must be a ByteArray instance num, the number of elements in it width = 4 Call qsort function: void qsort( void *base, - array ptr size_t num, - number of elements size_t width, - size of element int (__cdecl *compare )(const void *, const void *) ); " ^ self nbCallout function: #(void qsort (byte* base, NBByteArraySize base, 1, NBExternalAddress nativeCallback)) module: NativeBoost CLibrary ! ! !NBFFICallbackTests methodsFor: 'qsort callouts' stamp: 'IgorStasenko 11/24/2012 16:27'! primStQSort: base len: size compare: qsortCallback ^ self nbCallout options: #( optMayGC ); function: #(void qsort (NBExternalAddress base, ulong size, 1, NBQSortCallback qsortCallback)) module: NativeBoost CLibrary! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 16:28'! readByte: array ^ self nbCallout function: #(byte (byte * array)) emit: [:gen | gen asm pop: EAX; mov: EAX ptr8 to: AL ] ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 16:28'! readByte: array at: index ^ self nbCallout function: #(byte (byte * array, ulong index)) emit: [:gen | gen asm pop: EAX; pop: ECX; add: EAX with: ECX; mov: EAX ptr8 to: AL ] ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/27/2013 17:17'! testCBGeneratedCode | addr trunk | addr := NBQSortCallback callbackEnterAddress asUnsignedLong. trunk := NBQSortCallback trunkCode. self assert: (trunk bytes unsignedLongAt: 1+ (trunk offsetAt: #cbEnterAddress) bigEndian: false) = addr. ! ! !NBFFICallbackTests methodsFor: 'language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17'! testCallbackCounter | callback orig bytes result ctr | "There was a bug in callback code, which crashed VM due to override of callgate saved method oop and return address, and GC, happened during callback" orig := #[ 2 5 55 23 67 23 ] copy. bytes := NativeBoost allocate: orig size. NativeBoost memCopy: orig to: bytes size: orig size. ctr := 0. callback := NBQSortCallback on: [:a :b | NativeBoost insideCallback ifTrue: [ ctr := ctr+ 1]. "this involves using callgate" Smalltalk garbageCollect. "this involves GC" (a byteAt: 0) - (b byteAt: 0) ]. self primStQSort: bytes len: orig size compare: callback. result := ByteArray new: orig size. NativeBoost memCopy: bytes to: result size: orig size. NativeBoost free: bytes. self assert: (ctr > 0). self assert: (orig sort = result) ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/5/2010 17:00'! testCreateContext | context | context := MethodContext sender: nil receiver: 1 method: (self class compiledMethodAt: #dummyMethod: ) arguments: #( 55 ). ^ context! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/4/2010 00:14'! testEmitFetchClass self assert: (self checkEmitFetchClass == NBExternalAddress)! ! !NBFFICallbackTests methodsFor: 'native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:38'! testInstallCallback | callback | callback := self createNativeCallback. callback install. self assert:(callback address notNil). callback uninstall.! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/14/2010 01:03'! testMemCopy | mem bytes | bytes := #[ 1 2 3 4 5 6 7 8 9 10 ]. mem := NativeBoost allocate: bytes size. [ NativeBoost memCopy: bytes to: mem size: bytes size. 1 to: bytes size do: [:i | self assert: (bytes at:i) = (mem byteAt: i-1) ]. ] ensure: [ NativeBoost free: mem ]! ! !NBFFICallbackTests methodsFor: 'native callbacks' stamp: 'sig 3/30/2012 14:55'! testNativeCallback | orig bytes callback | orig := #[ 2 5 3 10 39 4 80 ] copy. bytes := orig copy. callback := self createNativeCallback. [ callback install. self primNativeQSort: bytes compare: callback address. ] ensure: [ callback uninstall ]. self assert: (orig sort = bytes) ! ! !NBFFICallbackTests methodsFor: 'language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17'! testQSortCallbackST | callback orig bytes result | orig := #[ 2 5 3 10 39 4 80 ] copy. bytes := NativeBoost allocate: orig size. NativeBoost memCopy: orig to: bytes size: orig size. callback := NBQSortCallback on: [:a :b | (a byteAt: 0) - (b byteAt: 0) ]. self primStQSort: bytes len: orig size compare: callback. result := ByteArray new: orig size. NativeBoost memCopy: bytes to: result size: orig size. NativeBoost free: bytes. self assert: (orig sort = result) ! ! !NBFFICallbackTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/4/2010 00:33'! testReadByte | arr | arr := #(240 2 3 4 ) asByteArray. self assert: (self readByte: arr) == 240! ! !NBFFICallbackTests methodsFor: 'language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17'! testSTCallbackInstalled | callback trunk index | callback := NBQSortCallback on: [:x :y | ]. trunk := callback trunk. index := callback index. self assert: ((NativeBoost extraRootsRegistry at: #callbacks) at: index +1) == callback. self assert: (self checkSTCallbackAddress: callback) = trunk ! ! !NBFFICallbackTests methodsFor: 'native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:38'! testcallbackAddress | callback addr1 addr2 | callback := self createNativeCallback. [ callback install. addr1 := callback address value. addr2 := self checkCallbackAddress: callback address. ] ensure: [ callback uninstall ]. self assert: (addr1 = addr2)! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'error messages' stamp: 'cipt 10/26/2012 21:05'! boundsError ^'Bound checking failed on indirect argument loading'! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:11'! primIsPointers: anObject ^ self nbCallout function: #(NBBool (oop anObject)) emit: [ :gen :proxy :asm | asm pop: asm EAX. proxy isPointers: asm EAX ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'CiprianTeodorov 5/18/2013 00:12'! returnOop0Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@0) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:12'! returnOop1Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@1) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:13'! returnOop2Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@2) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:13'! returnOop5Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@5) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:14'! returnOopMinus1Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@ -1) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'nativeboost-primitives' stamp: 'IgorStasenko 11/24/2012 17:15'! returnOopMinus3Of: anArg ^ self nbCallout options: #( + optUseStackPointer optNoAlignment +optCheckIndirectArgBounds - optDirectProxyFnAddress ); function: #( oop (oop anArg@ -3) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/18/2013 00:12'! testIndirectArgumentArray0Indirect | array | array := {1. 2. 3. 4. 5}. self should: [ self returnOop0Of: array ] raise: Error withExceptionDo: [ :anEx | self assert: (anEx messageText beginsWith: self boundsError) ].! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/18/2013 00:10'! testIndirectArgumentArrayNegativeIndirect | array | array := {1. 2. 3. 4. 5}. self should: [ self returnOopMinus1Of: array ] raise: Error withExceptionDo: [ :anEx | self assert: (anEx messageText beginsWith: self boundsError) ]. self should: [ self returnOopMinus3Of: array ] raise: Error withExceptionDo: [ :anEx | self assert: (anEx messageText beginsWith: self boundsError) ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 20:43'! testIndirectArgumentArrayOk | array | array := {1. 2. 3. 4. 5}. self assert: (self returnOop1Of: array) == 1. self assert: (self returnOop2Of: array) == 2. self assert: (self returnOop5Of: array) == 5! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/27/2012 12:21'! testIndirectArgumentDictionayFailure | array | array := {(1 -> 2). (3 -> 3)} asDictionary. self assert: (self returnOop1Of: array) = 2. "tally" self assert: (self returnOop2Of: array) = {nil. 1->2. nil. 3->3. nil}. "array" self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self boundsError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 21:08'! testIndirectArgumentFloatFailure | array | array := 2.0. self should: [ self returnOop1Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop2Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/27/2012 12:16'! testIndirectArgumentLargePositiveIntegerFailure | array | array := 100 factorial. self should: [ self returnOop1Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop2Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 21:08'! testIndirectArgumentObjectBoundsFailure | array | array := Object new. self should: [ self returnOop2Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self boundsError ]. self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self boundsError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 20:53'! testIndirectArgumentObjectFirstBoundsFailure | array | array := Object new. self should: [ self returnOop1Of: array ] raise: NBFFICalloutError. ! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 21:08'! testIndirectArgumentPointFailure | array | array := 2 @ 5. self assert: (self returnOop1Of: array) == 2. self assert: (self returnOop2Of: array) == 5. self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self boundsError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 21:08'! testIndirectArgumentSmallIntegerFailure | array | array := 2. self should: [ self returnOop1Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop2Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]. self should: [ self returnOop5Of: array ] raise: NBFFICalloutError withExceptionDo: [ :anEx | self assert: anEx messageText = self typeError ]! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/27/2012 12:41'! testIndirectableObjects |ok | ok := { Object new. {1. 2}. {1->2. 2->3} asDictionary. 2@3. }. ok do:[:each | self assert: (self primIsPointers: each)].! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'tests' stamp: 'cipt 10/27/2012 12:43'! testNotIndirectableObjects |ok | ok := { 2. "small integer" 100 factorial. "large positive integer" 3.4. "float" 'abcd'. "bytestring" 'abcd' asByteArray. "bytearray" }. ok do:[:each | self deny: (self primIsPointers: each)].! ! !NBFFICalloutIndirectArgumentTests methodsFor: 'error messages' stamp: 'cipt 10/26/2012 21:04'! typeError ^'Type checking failed on indirect argument loading'! ! !NBFFICalloutTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:15'! arraySize2: array with: param2 ^ self nbCallout function: #(ulong (NBByteArraySize array, long param2)) emit: [:gen | "pop the array size" gen asm pop: gen asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:15'! arraySize: array ^ self nbCallout function: #(ulong (NBByteArraySize array)) emit: [:gen | "pop the array size" gen asm pop: gen asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'generator callbacks' stamp: 'IgorStasenko 9/3/2012 00:12'! asNBExternalType: gen self assert: (gen respondsTo: #asm). self assert: (gen respondsTo: #proxy). self assert: (gen requestor == self). ^ NBUInt32 new! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'Igor.Stasenko 4/30/2010 12:02'! checkType: type class: typeClass arity: ptrArity stackIndex: stackIndex self assert: type class == typeClass. self assert: type pointerArity = ptrArity. self assert: type loader class == NBSTMethodArgument. self assert: type loader stackIndex = stackIndex ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'cipt 10/26/2012 19:32'! checkType: type class: typeClass arity: ptrArity stackIndex: stackIndex elementIndex: anIndex self assert: type class == typeClass. self assert: type pointerArity = ptrArity. self assert: type loader class == NBSTIndirectArgument. self assert: type loader argumentLoader stackIndex = stackIndex. self assert: type loader elementIndex = anIndex ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'Igor.Stasenko 4/30/2010 12:03'! checkType: type class: typeClass value: const self assert: type class == typeClass. self assert: type value = const! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 11/24/2012 17:15'! nativeFailWithCode: aCode ^ self nbCallout function: #(void (uint aCode) ) emit: [:gen :proxy :asm | asm pop: asm EAX. gen failWithCode: asm EAX. ] ! ! !NBFFICalloutTests methodsFor: 'generator callbacks' stamp: 'IgorStasenko 3/27/2012 18:19'! nbBindingOf: aName ^ self class bindingOf: aName! ! !NBFFICalloutTests methodsFor: 'generator callbacks' stamp: 'IgorStasenko 2/24/2012 17:53'! nbFnArgument: argName generator: gen self assert: argName = 'testIvar'. ^ 'testIvar loader'! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 11/24/2012 17:16'! returnParamUsingStackPtr: aParam ^ self nbCallout options: #( + optUseStackPointer optNoAlignment - optDirectProxyFnAddress ); function: #( oop (oop aParam) ) emit: [:gen | gen asm mov: gen asm ESP ptr to: gen asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:16'! returnReceiver: x arg2: y ^ self nbCallout function: #( oop (oop self , oop x, oop y)) emit: [ :gen :proxy :asm | proxy receiver ] ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/3/2010 23:31'! testArraySize | arr | arr := ByteArray new: 100. self assert: (self arraySize: arr) = 100. self assert: (self arraySize2: arr with: 20) = 100.! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 9/3/2012 00:03'! testBuildingFnSpec | generator type s | generator := NBFFICallout new. CLASSVAR := 100. TYPEVAR := 'long'. generator requestor: self; methodArgs: #( 'arg1' 'arg2' 'arg3' ); cdecl; anonSpec: #( long* (int self , String arg1, void**arg2, TYPEVAR arg1, char arg3, 0, nil, true, false , CLASSVAR ) ). type := generator fnSpec returnType. self assert: (type class == NBInt32). self assert: (type pointerArity = 1). self assert: (generator fnSpec arguments size = 10). s := generator fnSpec arguments readStream. "int self" self checkType: s next class: NBInt32 arity: 0 stackIndex: 3 . "String arg1" self checkType: s next class: NBExternalString arity: 0 stackIndex: 2 . "void**arg2" self checkType: s next class: NBVoid arity: 2 stackIndex: 1. "TYPEVAR arg1" self checkType: s next class: NBInt32 arity: 0 stackIndex: 2. "char arg3" self checkType: s next class: NBCharacterType arity: 0 stackIndex: 0. "0" self checkType: s next class: NBFFIConst value: 0. "nil" self checkType: s next class: NBFFIConst value: 0. "true" self checkType: s next class: NBFFIConst value: 1. "false" self checkType: s next class: NBFFIConst value: 0. "CLASSVAR" self checkType: s next class: NBFFIConst value: 100. ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'cipt 10/24/2012 19:32'! testBuildingFnSpecWithQueries | generator type s | generator := NBFFICallout new. CLASSVAR := 100. TYPEVAR := 'long'. generator requestor: self; methodArgs: #( 'arg1' 'arg2' 'arg3' ); cdecl; anonSpec: #( long* (int self , int arg3@2, String arg1, void**arg2, TYPEVAR arg1, long **arg1@1, char arg3, 0, nil, true, false , CLASSVAR ) ). type := generator fnSpec returnType. self assert: (type class == NBInt32). self assert: (type pointerArity = 1). self assert: (generator fnSpec arguments size = 12). s := generator fnSpec arguments readStream. "int self" self checkType: s next class: NBInt32 arity: 0 stackIndex: 3 . "int arg3@2" self checkType: s next class: NBInt32 arity: 0 stackIndex: 0 elementIndex: 2. "String arg1" self checkType: s next class: NBExternalString arity: 0 stackIndex: 2 . "void**arg2" self checkType: s next class: NBVoid arity: 2 stackIndex: 1. "TYPEVAR arg1" self checkType: s next class: NBInt32 arity: 0 stackIndex: 2. "long ** arg1@1" self checkType: s next class: NBInt32 arity: 2 stackIndex: 2 elementIndex: 1. "char arg3" self checkType: s next class: NBCharacterType arity: 0 stackIndex: 0. "0" self checkType: s next class: NBFFIConst value: 0. "nil" self checkType: s next class: NBFFIConst value: 0. "true" self checkType: s next class: NBFFIConst value: 1. "false" self checkType: s next class: NBFFIConst value: 0. "CLASSVAR" self checkType: s next class: NBFFIConst value: 100. ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 8/6/2011 18:36'! testFailCode self assert: ( [ self nativeFailWithCode: 1234. false ] on: NBNativeCodeError do: [:ex | ex return: ex errorCode = 1234 ] ) ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 8/10/2011 18:27'! testProxyReceiver self assert: (self returnReceiver: 10 arg2: 20) == self! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 9/3/2012 00:12'! testSupportedProtocols | gen spec arg | gen := NBFFICallout new requestor: self. CLASSVAR := self. "so we will receive #asNBExternalType: " gen anonSpec: #(CLASSVAR (CLASSVAR testIvar)). spec := gen fnSpec. self assert: spec returnType class == NBUInt32. arg := spec arguments first. self assert: arg class == NBUInt32. self assert: arg loader ='testIvar loader'. ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/1/2010 12:02'! testUseStackPointer self assert: (self returnParamUsingStackPtr: 100) = 100. ! ! !NBFFIExternalStructTests class methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/19/2013 03:41'! resources ^{NBTestResources}! ! !NBFFIExternalStructTests methodsFor: 'util' stamp: 'CiprianTeodorov 1/29/2013 19:21'! returnStruct1Byte ^ self nbCallout function: #(NBTestStructure1byte () ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm mov: 42 to: asm EAX] ifFalse:[ asm mov: asm ESP ptr to: asm EAX; mov: 42 to: asm EAX ptr] ] ! ! !NBFFIExternalStructTests methodsFor: 'util' stamp: 'IgorStasenko 6/27/2013 15:52'! returnStruct9Bytes ^ self nbCallout function: #(NBTestStructure9bytes () ) emit: [:gen :proxy :asm | "the implicit pointer to return value should be pushed on stack , hence we just using ESP ptr" asm mov: asm ESP ptr to: asm EAX; "fill struct with 1, 2, 3 values" mov: 1 to: asm EAX ptr32; mov: 2 to: asm EAX ptr32+4; mov: 3 to: asm EAX ptr8+8 ] ! ! !NBFFIExternalStructTests methodsFor: 'util' stamp: 'IgorStasenko 6/27/2013 15:54'! returnStructWithCallback: aCallback ^ self nbCallout function: #(NBTestStructureWithCallback (NBQSortCallback aCallback) ) emit: [:gen :proxy :asm | asm "mov: asm ESP ptr to: asm EAX;" pop: asm EAX; pop: asm EDX; "fill struct with 1, 2, 3 values" mov: 1 to: asm EAX ptr32; mov: asm EDX to: asm EAX ptr32+4; mov: 3 to: asm EAX ptr8+8; push: asm EAX ] ! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'IgorStasenko 7/12/2013 15:01'! testExternallyAllocatedStructure | struct struct2 | struct := NBTestStructure externalNew. self assert: struct isExternal. [ struct byte: 10. struct short: -20. struct long: 100. struct float: 1.0. struct double: 2.0. struct int64: 123456789101112. struct2 := NBTestStructure fromPointer: struct address. self assert: (struct2 byte = 10). self assert: (struct2 short = -20). self assert: (struct2 long = 100). self assert: (struct2 float = 1.0). self assert: (struct2 double = 2.0). self assert: (struct2 int64 = 123456789101112). ] ensure: [ struct free ].! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:41'! testNestedStructure | s1 s2 | s1 := NBTestNestedStructure new. s2 := NBTestStructure1byte new. s2 field: 42. self assert: s1 oneByte field = 0. s1 oneByte: s2. self assert: s1 oneByte field = 42. ! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:42'! testReturnStruct1Byte | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnStruct1Byte. s := self returnStruct1Byte. self assert: s field = 42.! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:42'! testReturnStruct9Bytes | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnStruct9Bytes. s := self returnStruct9Bytes. self assert: s x = 1. self assert: s y = 2. self assert: s field asciiValue = 3.! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:42'! testReturnStructWithCallback | s callback| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnStructWithCallback:. callback := NBQSortCallback on: [:a :b | a < b]. s := self returnStructWithCallback: callback. self assert: s x = 1. self assert: s callback trunk = callback trunk. self assert: s y = 3.! ! !NBFFIExternalStructTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/12/2013 15:00'! testStructAccess | struct | struct := NBTestStructure new. self assert: struct isExternal not. struct byte: 10. struct short: -20. struct long: 100. struct float: 1.0. struct double: 2.0. struct int64: 123456789101112. self assert: (struct byte = 10). self assert: (struct short = -20). self assert: (struct long = 100). self assert: (struct float = 1.0). self assert: (struct double = 2.0). self assert: (struct int64 = 123456789101112). ! ! !NBFFIExternalUnionTests class methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/19/2013 03:44'! resources ^{NBTestResources}! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:39'! return4Bytes: asm NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm pop: asm EAX] ifFalse:[ asm pop: asm EAX; pop: asm EDX; mov: asm EDX to: asm EAX ptr; push: asm EAX]! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:22'! returnUnion1Byte ^ self nbCallout function: #(NBTestUnion1Byte () ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm mov: 42 to: asm EAX] ifFalse:[ asm mov: asm ESP ptr to: asm EAX; mov: 42 to: asm EAX ptr] ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:39'! returnUnionPointer: aPointer ^ self nbCallout function: #(NBTestUnion2Pointers (void * aPointer) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:39'! returnUnionUnionChar: aChar ^ self nbCallout function: #(NBTestUnionWithUnion (char aChar) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:34'! returnUnionUnionDouble: aN ^ self nbCallout function: #(NBTestUnionWithUnion (double aN) ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm pop: asm EAX; pop: asm EDX.] ifFalse:[ asm pop: asm EAX; pop: asm ECX; pop: asm EDX; mov: asm ECX to: asm EAX ptr; mov: asm EDX to: asm EAX ptr + 4; push: asm EAX. ] ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:39'! returnUnionUnionInt: aN ^ self nbCallout function: #(NBTestUnionWithUnion (int aN) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/29/2013 19:39'! returnUnionWithCallback: aCallback ^ self nbCallout function: #(NBTestUnionWithCallback (NBQSortCallback aCallback) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 18:20'! returnUnionWithStructChar: aChar ^ self nbCallout function: #(NBTestUnionWithStructure (char aChar) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with int" mov: asm DL to: asm EAX ptr8; push: asm EAX ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 18:15'! returnUnionWithStructInt: anInt ^ self nbCallout function: #(NBTestUnionWithStructure (int anInt) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with int" mov: asm EDX to: asm EAX ptr; push: asm EAX ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 1/19/2013 18:51'! returnUnionWithStructStruct: aStructure ^ self nbCallout function: #(NBTestUnionWithStructure (NBTestStructure9bytes aStructure) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with structure" mov: asm EDX to: asm EAX ptr; pop: asm EDX; mov: asm EDX to: asm EAX ptr + 4; pop: asm EDX; mov: asm EDX to: asm EAX ptr + 8; push: asm EAX. ] ! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:42'! testReturnUnion1Byte | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnion1Byte. s := self returnUnion1Byte. self assert: s field1 = 42. self assert: s field2 = 42! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:42'! testReturnUnion2Pointers | s ptr| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionPointer:. ptr := NBExternalAddress fromString: 'abcd'. s := self returnUnionPointer: ptr. self assert: s addr1 = ptr . self assert: s addr2 = ptr . self assert: s addr1 readString = 'abcd'.! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionUnionChar | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionChar:. s := self returnUnionUnionChar: $,. self assert: s x = $,! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionUnionDouble | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionDouble:. s := self returnUnionUnionDouble: 2.3. self assert: (s z closeTo: 2.3)! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionUnionInt | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionInt:. s := self returnUnionUnionInt: 2344. self assert: s union x = 2344! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionWithCallback | s callback| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithCallback:. callback := NBQSortCallback on: [:a :b | a < b]. s := self returnUnionWithCallback: callback. self assert: s callback trunk = callback trunk.! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionWithStructChar | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructChar:. s := self returnUnionWithStructChar: $,. self assert: s x = $,! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:43'! testReturnUnionWithStructInt |s| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructInt:. s := self returnUnionWithStructInt: 300. self assert: s z = 300! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:44'! testReturnUnionWithStructStruct | s struct| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructStruct:. struct := NBTestStructure9bytes new. struct x: 2345. struct y: 6789. struct field: $+. s := self returnUnionWithStructStruct: struct. self assert: s struct x = struct x. self assert: s struct y = struct y. self assert: s struct field = struct field.! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CiprianTeodorov 5/19/2013 03:44'! testUnionWithUnion |u1 u2| u1 := NBTestUnionWithUnion new. u2 := NBTestUnionIntSize new. u2 y: 300. self assert: u1 union x = 0. self assert: u1 union y = 0. self assert: u1 union field = Character null. u1 union: u2. self assert: u1 union x = 300. self assert: u1 union y = 300. self assert: u1 union field = $,.! ! !NBFFIExternalValueTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 4/9/2013 21:22'! outputIntArg: x value: value ^ self nbCallout function: #(void (int* x, int value) ) emit: [:gen :proxy :asm | asm pop: asm EAX. asm pop: asm ECX. asm mov: asm ECX to: asm EAX ptr32. ] ! ! !NBFFIExternalValueTests methodsFor: 'primitives' stamp: 'IgorStasenko 6/27/2013 17:14'! outputValueArg: x value: value ^ self nbCallout function: #(void (NBTestExternalValue * x, int value) ) emit: [:gen :proxy :asm | asm pop: asm EAX. asm pop: asm ECX. asm mov: asm ECX to: asm EAX ptr32. ] ! ! !NBFFIExternalValueTests methodsFor: 'primitives' stamp: 'IgorStasenko 6/27/2013 17:33'! outputVoidArg: x value: value ^ self nbCallout function: #(void (void * x, int value) ) emit: [:gen :proxy :asm | asm pop: asm EAX. asm pop: asm ECX. asm mov: asm ECX to: asm EAX ptr32. ] ! ! !NBFFIExternalValueTests methodsFor: 'tests' stamp: 'IgorStasenko 6/27/2013 17:33'! testOutIntArg |x value| NBTestExternalValue initialize. value := 12345678. x := NBTestExternalValue new. self outputIntArg: x value: value. self assert: x value = value.! ! !NBFFIExternalValueTests methodsFor: 'tests' stamp: 'IgorStasenko 6/27/2013 17:38'! testOutIntoByteArray |x value| NBTestExternalValue initialize. value := 12345678. x := ByteArray new: 4. self outputVoidArg: x value: value. self assert: (x nbUInt32AtOffset: 0) = value.! ! !NBFFIExternalValueTests methodsFor: 'tests' stamp: 'IgorStasenko 6/27/2013 17:33'! testOutValueArg |x value| NBTestExternalValue initialize. value := 12345678. x := NBTestExternalValue new. self outputValueArg: x value: value. self assert: x value = value.! ! !NBFFIExternalValueTests methodsFor: 'tests' stamp: 'IgorStasenko 6/27/2013 17:32'! testOutVoidArg |x value| NBTestExternalValue initialize. value := 12345678. x := NBTestExternalValue new. self outputVoidArg: x value: value. self assert: x value = value.! ! !NBFFIExternalValueTests methodsFor: 'tests' stamp: 'CiprianTeodorov 4/9/2013 21:11'! testValue |x value| NBTestExternalValue initialize. value := 12345678. x := NBTestExternalValue new. x value: value. self assert: x value = value.! ! !NBFnSpecParserTest methodsFor: 'as yet unclassified' stamp: 'cipt 10/26/2012 19:19'! argName: argName indirectIndex: anIndex type: typeName ptrArity: ptrArity ^ #argument! ! !NBFnSpecParserTest methodsFor: 'callbacks' stamp: 'IgorStasenko 2/13/2012 13:03'! integerConstantArgument: int ^ #integerConstant! ! !NBFnSpecParserTest methodsFor: 'parser' stamp: 'IgorStasenko 2/13/2012 13:01'! newParser ^ NBFnSpecParser new! ! !NBFnSpecParserTest methodsFor: 'callbacks' stamp: 'IgorStasenko 2/13/2012 13:04'! returnType: aType ^ #returnType! ! !NBFnSpecParserTest methodsFor: 'tests' stamp: 'cipt 10/26/2012 19:30'! testParseAnonFn | parser args | #( #(int * * ( 0, nil, -10, FOO_BAR , int a, int* _b, char** c, void* * * d_)) 'int * * ( 0, nil, -10, FOO_BAR , int a, int* _b, char** c, void* * * d_)' ) do: [:spec | parser := self newParser parseAnonFunction: spec. self assert: parser returnType = #('int' 2). args := parser arguments. self assert: args size = 8. self assert: (args at: 1) = 0. self assert: (args at: 2) = #(nil nil 'nil' 0). self assert: (args at: 3) = -10. self assert: (args at: 4) = #(nil nil 'FOO_BAR' 0). self assert: (args at: 5) = #('a' nil 'int' 0). self assert: (args at: 6) = #('_b' nil 'int' 1). self assert: (args at: 7) = #('c' nil 'char' 2). self assert: (args at: 8) = #('d_' nil 'void' 3 ). ]! ! !NBFnSpecParserTest methodsFor: 'tests' stamp: 'cipt 10/26/2012 19:30'! testParseNamedFn | parser args | #( (int * * #'function_n$a$m$e' ( 0, nil, -10, FOO_BAR , int a, int* _b, char** c, void* * * d_)) ' int * * function_n$a$m$e (0, nil, -10, FOO_BAR , int a, int* _b, char** c, void* * * d_ ' ) do: [:spec | parser := self newParser parseNamedFunction: spec. self assert: parser functionName = 'function_n$a$m$e'. self assert: parser returnType = #('int' 2). args := parser arguments. self assert: args size = 8. self assert: (args at: 1) = 0. self assert: (args at: 2) = #(nil nil 'nil' 0). self assert: (args at: 3) = -10. self assert: (args at: 4) = #(nil nil 'FOO_BAR' 0). self assert: (args at: 5) = #('a' nil 'int' 0). self assert: (args at: 6) = #('_b' nil 'int' 1). self assert: (args at: 7) = #('c' nil 'char' 2). self assert: (args at: 8) = #('d_' nil 'void' 3 ). ]. ! ! !NBFnSpecParserTest methodsFor: 'tests' stamp: 'IgorStasenko 2/9/2012 12:44'! testParseNoArgsFn | parser args | #( #(int * * function_name ( void ) ) ' int * * function_name ( void ) ' ) do: [:spec | parser := self newParser parseNamedFunction: spec. self assert: parser functionName = 'function_name'. self assert: parser returnType = #('int' 2). args := parser arguments. self assert: args size = 0. ]! ! !NBFnSpecParserTest methodsFor: 'tests' stamp: 'IgorStasenko 2/13/2012 13:16'! testParserCallbacks | parser spec parsedSpec args | parser := self newParser requestor: self. spec := #(int * * function_name ( 0, nil, -10, FOO_BAR , int a, int* _b, char** c, void* * * d_)). parsedSpec := parser parseNamedFunction: spec. self assert: parsedSpec returnType equals: #returnType. args := parsedSpec arguments. self assert: args first = #integerConstant. self assert: args third = #integerConstant. args := args reject: [:each | each = #integerConstant ]. self assert: args size = 6. self assert: args asSet size = 1. self assert: args first = #argument! ! !NBInterpreterProxyTest methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:20'! primCheckStackPointer "should answer 0" ^ self nbCallout function: #(uint () ) emit: [:gen :proxy :asm | | get | proxy getStackPointer. asm mov: NBInterpreterProxy stackPointerAddress asUImm32 to: asm ECX; mov: asm ECX ptr to: asm ECX; sub: asm EAX with: asm ECX ] ! ! !NBInterpreterProxyTest methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:21'! primCheckStackPointer2 "should answer 0" ^ self nbCallout function: #(uint () ) emit: [:gen :proxy :asm | | get | proxy getStackPointer. asm mov: NBInterpreterProxy stackPointerAddress asUImm32 ptr32 to: asm ECX; sub: asm EAX with: asm ECX ] ! ! !NBInterpreterProxyTest methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/28/2012 04:42'! testStackPointer self assert: self primCheckStackPointer=0 ! ! !NBInterpreterProxyTest methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/28/2012 05:22'! testStackPointer2 self assert: self primCheckStackPointer2=0 ! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:23'! getFloatPtrOffset: aFloat "return the difference between float oop and pointer to its stored floating-point value , must be base header size" ^ self nbCallout function: #( ulong (oop aFloat, NBFloatPtr aFloat)) emit: [:gen | | asm | asm := gen asm. asm pop: asm ECX. "oop" asm pop: asm EAX. "float ptr" asm sub: asm EAX with: asm ECX ]! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:23'! pushDouble: aFloat ^ self nbCallout function: #( double (double aFloat)) emit: [:gen | | asm | asm := gen asm. asm fld: asm ESP ptr64 ]! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/24/2012 17:24'! pushFloat: aFloat ^ self nbCallout function: #( double (float aFloat)) emit: [:gen | | asm | asm := gen asm. asm fld: asm ESP ptr32 ]! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/23/2011 10:46'! testCompactFloats | idx format | format := NBObjectFormat32 new. idx := Smalltalk compactClassesArray indexOf: Float ifAbsent: [ ^ nil ]. idx := idx bitShift: format compactClassIndexShift. NativeBoost enableNativeCode. Float allInstances do: [:each | | oopIdx | oopIdx := (NBObjectFormat32 headerOf: each) bitAnd: format compactClassMask. self assert: (oopIdx = idx) ]! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/21/2011 14:21'! testPushingFloatPointers self assert: (self getFloatPtrOffset: 10.0) = NBObjectFormat current baseHeaderSize. ! ! !NBObjectFormat32Tests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/20/2010 09:19'! testPushingFloats self assert: (self pushFloat: 100.0) = 100.0. self assert: (self pushDouble: 100.0) = 100.0.! ! !NBPointerArgumentsTests class methodsFor: 'array types' stamp: 'CiprianTeodorov 3/17/2013 00:29'! enumArrayType ^EnumArrayType isNil ifTrue: [EnumArrayType := NBExternalArray ofType: self enumType] ifFalse:[EnumArrayType]! ! !NBPointerArgumentsTests class methodsFor: 'type classes' stamp: 'CiprianTeodorov 3/17/2013 00:30'! enumClass ^NBTestEnumeration ! ! !NBPointerArgumentsTests class methodsFor: 'type classes' stamp: 'CiprianTeodorov 3/17/2013 00:29'! enumType ^self enumClass name ! ! !NBPointerArgumentsTests class methodsFor: 'initialize - event' stamp: 'CiprianTeodorov 4/9/2013 21:54'! initialize self reset.! ! !NBPointerArgumentsTests class methodsFor: 'array types' stamp: 'CiprianTeodorov 3/17/2013 00:19'! intArrayType ^IntArrayType isNil ifTrue: [IntArrayType := NBExternalArray ofType: #NBInt32] ifFalse:[IntArrayType]! ! !NBPointerArgumentsTests class methodsFor: 'array types' stamp: 'CiprianTeodorov 3/17/2013 15:01'! ptrArrayType ^PtrArrayType isNil ifTrue: [PtrArrayType := NBExternalArray ofType: 'void *'] ifFalse:[PtrArrayType]! ! !NBPointerArgumentsTests class methodsFor: 'accessing' stamp: 'CiprianTeodorov 4/9/2013 21:54'! reset EnumArrayType := nil. IntArrayType := nil. PtrArrayType := nil. StructArrayType := nil.! ! !NBPointerArgumentsTests class methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/19/2013 03:45'! resources ^{NBTestResources}! ! !NBPointerArgumentsTests class methodsFor: 'array types' stamp: 'CiprianTeodorov 3/17/2013 00:25'! structArrayType ^StructArrayType isNil ifTrue: [StructArrayType := NBExternalArray ofType: self structType] ifFalse:[StructArrayType]! ! !NBPointerArgumentsTests class methodsFor: 'type classes' stamp: 'CiprianTeodorov 3/17/2013 00:18'! structClass ^NBTestStructure ! ! !NBPointerArgumentsTests class methodsFor: 'type classes' stamp: 'CiprianTeodorov 3/17/2013 00:18'! structType ^self structClass name ! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 14:15'! arity2StructPtrCase1: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveArity2Struct: arg case: self case1.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 14:55'! arity2StructPtrCase2: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveArity2Struct: arg case: self case2.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 22:29'! arity2StructPtrCase3: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveArity2Struct: arg case: self case3.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 22:29'! arity2StructPtrCase4: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveArity2Struct: arg case: self case4.! ! !NBPointerArgumentsTests methodsFor: 'generation options' stamp: 'CiprianTeodorov 3/16/2013 22:53'! case1 ^#( +optAllowByteArraysPtr +optAllowExternalAddressPtr )! ! !NBPointerArgumentsTests methodsFor: 'generation options' stamp: 'CiprianTeodorov 3/16/2013 22:53'! case2 ^#( -optAllowByteArraysPtr +optAllowExternalAddressPtr )! ! !NBPointerArgumentsTests methodsFor: 'generation options' stamp: 'CiprianTeodorov 3/16/2013 22:53'! case3 ^#( -optAllowByteArraysPtr -optAllowExternalAddressPtr )! ! !NBPointerArgumentsTests methodsFor: 'generation options' stamp: 'IgorStasenko 7/5/2013 16:12'! case4 "allow only var-byte objects as pointer arguments. by turning off optAllowExternalAddressPtr this means that external address will be treated as any other var-byte object and therefore an address of memory where address value is held will be passed to function instead of address value " ^#( +optAllowByteArraysPtr -optAllowExternalAddressPtr )! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:37'! enumByteArray: aValue ^(self class enumArrayType with: aValue) address! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'CiprianTeodorov 3/17/2013 09:28'! enumExternalAddress: aValue ^(toBeFreed := self class enumArrayType externalNew: 1) at: 1 put: aValue; address. ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:36'! intByteArray: aValue ^(self class intArrayType with: aValue) address.! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 09:29'! intExternalAddress: aValue ^(toBeFreed := self class intArrayType externalNew: 1) at: 1 put: aValue; address. ! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 14:59'! primitiveArity2Struct: arg case: aCase ^ (self nbCalloutIn: thisContext sender) options: aCase; function: {#long. {self class structType. #*. #*. #arg} } emit: [:gen :proxy :asm | asm pop: asm ECX; "pointer to the structure *" mov: asm ECX ptr32 to: asm ECX; mov: asm ECX ptr + 4 to: asm EAX. "read the long value from NBTestStructure" ]! ! !NBPointerArgumentsTests methodsFor: 'enum primitives' stamp: 'CiprianTeodorov 3/17/2013 00:33'! primitiveEnum: arg case: aCase ^ (self nbCalloutIn: thisContext sender) options: aCase; function: {#NBInt32. {self class enumType. #*. #arg} } emit: [:gen :proxy :asm | asm pop: asm ECX; "pointer to the enum" mov: asm ECX ptr to: asm EAX. "read the enum value" ]! ! !NBPointerArgumentsTests methodsFor: 'integer primitives' stamp: 'CiprianTeodorov 3/16/2013 23:21'! primitiveInt: anInt case: aCase ^ (self nbCalloutIn: thisContext sender) options: aCase; function: #(int (int * anInt) ) emit: [:gen :proxy :asm | asm pop: asm ECX; mov: asm ECX ptr to: asm EAX. ] ! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/17/2013 00:30'! primitiveStruct: aStruct case: aCase ^ (self nbCalloutIn: thisContext sender) options: aCase; function: {#long. {self class structType. #*. #aStruct} } emit: [:gen :proxy :asm | asm pop: asm ECX; "pointer to the structure" mov: asm ECX ptr + 4 to: asm EAX. "read the long value from NBTestStructure" ]! ! !NBPointerArgumentsTests methodsFor: 'enum primitives' stamp: 'CiprianTeodorov 3/17/2013 00:33'! readEnumPtrCase1: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveEnum: arg case: self case1.! ! !NBPointerArgumentsTests methodsFor: 'enum primitives' stamp: 'CiprianTeodorov 3/17/2013 00:34'! readEnumPtrCase2: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveEnum: arg case: self case2.! ! !NBPointerArgumentsTests methodsFor: 'enum primitives' stamp: 'CiprianTeodorov 3/17/2013 00:34'! readEnumPtrCase3: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveEnum: arg case: self case3.! ! !NBPointerArgumentsTests methodsFor: 'enum primitives' stamp: 'CiprianTeodorov 3/17/2013 00:34'! readEnumPtrCase4: arg "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveEnum: arg case: self case4.! ! !NBPointerArgumentsTests methodsFor: 'integer primitives' stamp: 'CiprianTeodorov 3/16/2013 23:19'! readIntPtrCase1: anInt "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveInt: anInt case: self case1.! ! !NBPointerArgumentsTests methodsFor: 'integer primitives' stamp: 'CiprianTeodorov 3/16/2013 23:18'! readIntPtrCase2: anInt ^self primitiveInt: anInt case: self case2 ! ! !NBPointerArgumentsTests methodsFor: 'integer primitives' stamp: 'CiprianTeodorov 3/16/2013 23:18'! readIntPtrCase3: anInt ^self primitiveInt: anInt case: self case3 ! ! !NBPointerArgumentsTests methodsFor: 'integer primitives' stamp: 'CiprianTeodorov 3/16/2013 23:18'! readIntPtrCase4: anInt ^self primitiveInt: anInt case: self case4. ! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/16/2013 23:41'! readStructPtrCase1: aStruct "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveStruct: aStruct case: self case1.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/16/2013 23:41'! readStructPtrCase2: aStruct "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveStruct: aStruct case: self case2.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/16/2013 23:42'! readStructPtrCase3: aStruct "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveStruct: aStruct case: self case3.! ! !NBPointerArgumentsTests methodsFor: 'struct primitives' stamp: 'CiprianTeodorov 3/16/2013 23:42'! readStructPtrCase4: aStruct "this is the default case where both optAllowByteArraysPtr optAllowExternalAddressPtr are enabled" ^self primitiveStruct: aStruct case: self case4.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/17/2013 00:38'! structByteArray: aValue ^(self class structArrayType with: (self structValue: aValue)) address. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/17/2013 09:30'! structExternalAddress: aValue ^(toBeFreed := self class structArrayType externalNew: 1) at: 1 put: (self structValue: aValue); address. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 5/19/2013 03:45'! structValue: aValue ^(self class structClass new) long: aValue; yourself ! ! !NBPointerArgumentsTests methodsFor: 'running' stamp: 'CiprianTeodorov 3/17/2013 09:43'! tearDown toBeFreed ifNotNil: [ toBeFreed free. toBeFreed := nil ]! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests arity 2' stamp: 'IgorStasenko 7/8/2013 17:38'! testArity2StructCase1Struct "normally this test should fail, but it crashes the VM, because NBExternalStructure is variable byte class that gets captured by +optAllowByteArraysPtr" self should: [(self arity2StructPtrCase1: (self structValue: 12345678)).] raise: NBFFICalloutError. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests arity 2' stamp: 'IgorStasenko 7/8/2013 17:38'! testArity2StructCase2Struct self should: [self arity2StructPtrCase2: (self structValue: 12345678)] raise: NBFFICalloutError. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests arity 2' stamp: 'IgorStasenko 7/8/2013 17:38'! testArity2StructCase3Struct self should: [self arity2StructPtrCase3: (self structValue: 12345678)] raise: NBFFICalloutError. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests arity 2' stamp: 'IgorStasenko 7/8/2013 17:38'! testArity2StructCase4Struct "normally this test should fail, but it crashes the VM, because NBExternalStructure is variable byte class that gets captured by +optAllowByteArraysPtr" self should: [(self arity2StructPtrCase4: (self structValue: 12345678))] raise: NBFFICalloutError. ! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:33'! testEnumCase1ByteArray |item| item := self class enumClass BBB. self should: [ self readEnumPtrCase1: (self enumByteArray: item) ] raise: NBCodeGenerationError.! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:33'! testEnumCase1ExternalAddress | item | item := self class enumClass DDD. self should: [self readEnumPtrCase1: (self enumExternalAddress: item)] raise: NBCodeGenerationError.! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:33'! testEnumCase2ByteArray self should: [self readEnumPtrCase2: (self enumByteArray: self class enumClass BBB)] raise: NBCodeGenerationError. ! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:33'! testEnumCase2ExternalAddress | item | item := self class enumClass DDD. self should: [self readEnumPtrCase2: (self enumExternalAddress: item)] raise: NBCodeGenerationError! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:32'! testEnumCase3ByteArray self should: [self readEnumPtrCase3: (self enumByteArray: self class enumClass BBB)] raise: NBCodeGenerationError. ! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:32'! testEnumCase3ExternalAddress self should: [self readEnumPtrCase3: (self enumExternalAddress: self class enumClass BBB)] raise: NBCodeGenerationError. ! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:32'! testEnumCase4ByteArray |item| item := self class enumClass BBB. self should: [ self readEnumPtrCase4: (self enumByteArray: item) ] raise: NBCodeGenerationError! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:30'! testEnumCase4ExternalAddress self should: [self readEnumPtrCase4: (self enumExternalAddress: self class enumClass BBB)] raise: NBCodeGenerationError. ! ! !NBPointerArgumentsTests methodsFor: 'enum pointers tests' stamp: 'IgorStasenko 7/12/2013 14:30'! testEnumDirectly self should: [self readEnumPtrCase1: self class enumClass BBB] raise: NBCodeGenerationError ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:07'! testIntCase1ByteArray |value| value := 12345. self assert: (self readIntPtrCase1: (self intByteArray: value)) = value. ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:07'! testIntCase1ExternalAddress | value | value := 12345. self assert: (self readIntPtrCase1: (self intExternalAddress: value)) = value. ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:07'! testIntCase2ByteArray self should: [self readIntPtrCase2: (self intByteArray: 12345)] raise: NBFFICalloutError ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:08'! testIntCase2ExternalAddress | value | value := 12345. self assert: (self readIntPtrCase2: (self intExternalAddress: value)) = value.! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:08'! testIntCase3ByteArray self should: [ self readIntPtrCase3: (self intByteArray: 12345)] raise: NBFFICalloutError . ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:08'! testIntCase3ExternalAddress self should: [self readIntPtrCase3: (self intExternalAddress: 12345)] raise: NBFFICalloutError.! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:08'! testIntCase4ByteArray |value| value := 12345. self assert: (self readIntPtrCase4: (self intByteArray: value)) = value.! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'IgorStasenko 7/5/2013 16:17'! testIntCase4ExternalAddress " see case4 for details " | address | address := NBExternalAddress value: 12345. self assert: (self readIntPtrCase4: address ) equals: address value ! ! !NBPointerArgumentsTests methodsFor: 'integer pointers tests' stamp: 'CiprianTeodorov 3/17/2013 00:10'! testIntDirectly self should: [self readIntPtrCase1: 12345] raise: NBFFICalloutError ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'IgorStasenko 7/12/2013 14:53'! testStructCase1ByteArray |value| value := 12345678. self should: [ self readStructPtrCase1: (self structByteArray: value)] raise: NBFFICalloutError. ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'IgorStasenko 7/12/2013 14:53'! testStructCase1ExternalAddress | value | value := 12345678. self should: [ self readStructPtrCase1: (self structExternalAddress: value) ] raise: NBFFICalloutError ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:55'! testStructCase1Struct |value| value := 12345678. self assert: (self readStructPtrCase1: (self structValue: value)) = value.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:43'! testStructCase2ByteArray self should: [self readStructPtrCase2: (self structByteArray: 12345678)] raise: NBFFICalloutError ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'IgorStasenko 7/12/2013 14:54'! testStructCase2ExternalAddress | value | value := 12345678. self should: [ self readStructPtrCase2: (self structExternalAddress: value) ] raise: NBFFICalloutError . ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:55'! testStructCase2Struct |value| value := 12345678. self assert: (self readStructPtrCase2: (self structValue: value)) = value.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:44'! testStructCase3ByteArray self should: [self readStructPtrCase3: (self structByteArray: 12345678)] raise: NBFFICalloutError ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:52'! testStructCase3ExternalAddress self should: [self readStructPtrCase3: (self structExternalAddress: 12345)] raise: NBFFICalloutError.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:56'! testStructCase3Struct |value| value := 12345678. self assert: (self readStructPtrCase3: (self structValue: value)) = value.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'IgorStasenko 7/12/2013 14:54'! testStructCase4ByteArray |value| value := 12345678. self should: [self readStructPtrCase4: (self structByteArray: value) ] raise: NBFFICalloutError . ! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:52'! testStructCase4ExternalAddress self should: [self readStructPtrCase4: (self structExternalAddress: 12345)] raise: NBFFICalloutError.! ! !NBPointerArgumentsTests methodsFor: 'struct ptr tests' stamp: 'CiprianTeodorov 3/16/2013 23:56'! testStructCase4Struct |value| value := 12345678. self assert: (self readStructPtrCase4: (self structValue: value)) = value.! ! !NativeCodeTests class methodsFor: 'accessing' stamp: 'CiprianTeodorov 5/19/2013 03:46'! resources ^{NBTestResources}! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/5/2011 08:22'! createMoveTestCode ^ NBFFICallout new anonSpec: #( int ()); cdecl; generate: [:gen :proxy :asm | | methodOop | methodOop := gen reserveTemp. proxy primitiveMethod. asm mov: asm EAX to: methodOop. "call fullGC to trigger memory compaction" proxy fullGC. "return the difference between old primitiveMethod oop value and new one" proxy primitiveMethod. asm sub: asm EAX with: methodOop. ].! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 5/2/2010 10:56'! install: nativeCode into: method | trailer newMethod | trailer := CompiledMethodTrailer new. trailer nativeCode: nativeCode platformId: NativeBoost platformId sourcePointer: method trailer sourcePointer. newMethod := method copyWithTrailerBytes: trailer. method methodClass methodDict at: method selector put: newMethod. ! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 4/11/2010 18:21'! movableStub ^ 999! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/27/2012 18:20'! testArgumentOffsets "cdecl arguments placed in reverse order, push c; push b; push a.. so, c is most closer to stack frame and having smallest offset. " NBNativeFunctionGen cdecl: #( int (byte a, void * b, double c) ) emit: [:gen | | arg | arg := gen arg: #a. self assert: (arg isMem). self assert: (arg displacement value = 8). arg := gen arg: #b. self assert: (arg isMem). self assert: (arg displacement value = 12). arg := gen arg: #c. self assert: (arg isMem). self assert: (arg displacement value = 16). ]! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/5/2011 08:24'! testMovableStuff "test that if native code calls a VM function which triggers a full gc and relocates a native code, it will survive the move, a native code should return a difference between old and new primitive method, in case if its moved, the difference will be nonzero" | code | code := self createMoveTestCode. " we should not crash here ;) " ^ (1 to: 10) collect: [:each| Array new: (Random new nextInt: 100). self install: code into: (self class methodDict at: #movableStub). self movableStub ] ! ! !NativeCodeTests methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 4/30/2010 20:03'! testProxyFunctions | functions | functions := NBInterpreterProxy functions. functions valuesDo: [:fn | self assert: (NBInterpreterProxy canUnderstand: fn selector ). ]! ! !NBMockExternalHeapManager methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 9/25/2010 00:20'! primAllocatePage: numBytes ^ 0! ! !NBMockExternalHeapManager methodsFor: 'as yet unclassified' stamp: 'Igor.Stasenko 9/25/2010 00:21'! primFreePage: aMemoryPage ^ 0! ! !NBMockExternalObject class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/24/2012 17:18'! finalizeResourceData: object object value! ! !NBMockExternalObject methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/24/2012 17:05'! data: anObject data := anObject! ! !NBMockExternalObject methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/24/2012 17:05'! resourceData ^ data! ! !NBTestNestedStructure class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/26/2012 19:45'! fieldsDesc " self createAccessors " ^ #( NBTestStructure1byte oneByte; int otherField )! ! !NBTestStructure class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/3/2012 01:44'! fieldsDesc " self rebuildFieldAccessors " ^ #( byte byte; short short; long long; float float; double double; int64 int64; )! ! !NBTestStructure1byte class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/3/2012 02:36'! fieldsDesc " self rebuildFieldAccessors " ^ #( byte field )! ! !NBTestStructure2 class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/3/2012 02:36'! fieldsDesc " self rebuildFieldAccessors " ^ #( NBExternalAddress addr )! ! !NBTestStructure9bytes class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/3/2012 02:36'! fieldsDesc " self rebuildFieldAccessors" ^ #( int x; int y; char field )! ! !NBTestStructureWithCallback class methodsFor: 'as yet unclassified' stamp: 'cipt 11/28/2012 19:10'! fieldsDesc " self rebuildFieldAccessors " ^ #( int x; NBQSortCallback callback; int y; )! ! "NativeBoost-Tests"! ConfigurationOfNativeBoost removeSelector: #version22:! ConfigurationOfNativeBoost removeSelector: #version21:! ConfigurationOfNativeBoost removeSelector: #version20:! ConfigurationOfNativeBoost removeSelector: #version19:! ConfigurationOfNativeBoost removeSelector: #version18:! ConfigurationOfNativeBoost removeSelector: #version17:! ConfigurationOfNativeBoost removeSelector: #version16:! ConfigurationOfNativeBoost removeSelector: #version15:! ConfigurationOfNativeBoost removeSelector: #version14:! ConfigurationOfNativeBoost removeSelector: #version13:! ConfigurationOfNativeBoost removeSelector: #version12:! ConfigurationOfNativeBoost removeSelector: #version123:! ConfigurationOfNativeBoost removeSelector: #version122:! ConfigurationOfNativeBoost removeSelector: #version121:! ConfigurationOfNativeBoost removeSelector: #version112:! ConfigurationOfNativeBoost removeSelector: #version111:! ConfigurationOfNativeBoost removeSelector: #version110:! ConfigurationOfNativeBoost removeSelector: #version10:! ConfigurationOfNativeBoost removeSelector: #version109:! ConfigurationOfNativeBoost removeSelector: #version108:! ConfigurationOfNativeBoost removeSelector: #version107:! ConfigurationOfNativeBoost removeSelector: #version106:! ConfigurationOfNativeBoost removeSelector: #version105:! ConfigurationOfNativeBoost removeSelector: #version104:! ConfigurationOfNativeBoost removeSelector: #version103:! ConfigurationOfNativeBoost removeSelector: #version102:! ConfigurationOfNativeBoost removeSelector: #version101:! ConfigurationOfNativeBoost removeSelector: #stable:! ConfigurationOfNativeBoost removeSelector: #readUrl:! ConfigurationOfNativeBoost removeSelector: #project! ConfigurationOfNativeBoost removeSelector: #postloadForCore! ConfigurationOfNativeBoost removeSelector: #installPrerequisites! ConfigurationOfNativeBoost removeSelector: #fileInUrl:intoChangeset:! ConfigurationOfNativeBoost removeSelector: #development:! ConfigurationOfNativeBoost removeSelector: #baseline13:! ConfigurationOfNativeBoost removeSelector: #baseline12:! ConfigurationOfNativeBoost removeSelector: #baseline11:! ConfigurationOfNativeBoost removeSelector: #baseline10:! ConfigurationOfNativeBoost class removeSelector: #validate! ConfigurationOfNativeBoost class removeSelector: #updateToLatestPackageVersions:! ConfigurationOfNativeBoost class removeSelector: #updateConfiguration! ConfigurationOfNativeBoost class removeSelector: #saveModifiedPackagesAndConfiguration:! ConfigurationOfNativeBoost class removeSelector: #saveConfiguration:! ConfigurationOfNativeBoost class removeSelector: #releaseDevelopmentVersion:! ConfigurationOfNativeBoost class removeSelector: #project! ConfigurationOfNativeBoost class removeSelector: #loadStable! ConfigurationOfNativeBoost class removeSelector: #loadDevelopment! ConfigurationOfNativeBoost class removeSelector: #loadBleedingEdge! ConfigurationOfNativeBoost class removeSelector: #load! ConfigurationOfNativeBoost class removeSelector: #isMetacelloConfig! ConfigurationOfNativeBoost class removeSelector: #installPlugin! ConfigurationOfNativeBoost class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfNativeBoost class removeSelector: #ensureMetacello! ConfigurationOfNativeBoost class removeSelector: #createNewDevelopmentVersion! ConfigurationOfNativeBoost class removeSelector: #createNewBaselineVersion! ConfigurationOfNativeBoost class removeSelector: #compareVersions! ConfigurationOfNativeBoost class removeSelector: #commit:! ConfigurationOfNativeBoost class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfNativeBoost class removeSelector: #DevelopmentSupport! ConfigurationOfNativeBoost class removeSelector: #DevelopmentProcess! Smalltalk globals removeClassNamed: #ConfigurationOfNativeBoost! "Athens-Cairo"! ----End fileIn----! ----QUIT----an Array(8 August 2013 12:11:04 pm) Pharo.image priorSource: 14477740! ----STARTUP----an Array(8 August 2013 12:23:36 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 August 2013 12:23:36 pm) Pharo-30327.image priorSource: 14842518! ----STARTUP----an Array(8 August 2013 9:21:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/8/2013 21:10' prior: 48032478! commentForCurrentUpdate ^ '11391 Break dependents for real https://pharo.fogbugz.com/default.asp?11391 11390 bug when right clicking on a method in the class NautilusRefactoring https://pharo.fogbugz.com/default.asp?11390 11317 failing tests https://pharo.fogbugz.com/default.asp?11317 11306 Nautilus does not handle well all inline refactorings https://pharo.fogbugz.com/default.asp?11306 11309 More robust installSystemNotifications for PragmaCollector https://pharo.fogbugz.com/default.asp?11309'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/8/2013 21:11'! script120 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-MarcusDenker.98.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-EstebanLorenzano.142.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.303.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-MarcusDenker.111.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.72.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1552.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-EstebanLorenzano.156.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.68.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-EstebanLorenzano.53.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.508.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.116.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-MarcusDenker.17.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-MarcusDenker.43.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-EstebanLorenzano.382.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.368.mcz SlotTests-MarcusDenker.50.mcz SmartSuggestions-EstebanLorenzano.102.mcz Spec-Bindings-MarcusDenker.28.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.110.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.55.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.223.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-MarcusDenker.226.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-MarcusDenker.69.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-StephaneDucasse.895.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.604.mcz Text-Core-MarcusDenker.6.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1207.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.554.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/8/2013 21:11'! update30328 "self new update30328" self withUpdateLog: '11391 Break dependents for real https://pharo.fogbugz.com/default.asp?11391 11390 bug when right clicking on a method in the class NautilusRefactoring https://pharo.fogbugz.com/default.asp?11390 11317 failing tests https://pharo.fogbugz.com/default.asp?11317 11306 Nautilus does not handle well all inline refactorings https://pharo.fogbugz.com/default.asp?11306 11309 More robust installSystemNotifications for PragmaCollector https://pharo.fogbugz.com/default.asp?11309'. self loadTogether: self script120 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:54'! instVarRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Add') action: [ target refactor addInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeInstVarFrom: self ]; parent: #'Inst Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 600.! ! !Class methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:55'! methodRefactoring: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Swap') action: [ target refactor swapMethodFor: selectedMethods ]; order: 400; label: (target selectedClass isMeta ifTrue: [ 'Move to instance side' ] ifFalse:[ 'Move to class side']); parent: #'Refactoring'. (aBuilder item: #'Push up') action: [ target refactor pullUpMethodsFor: selectedMethods ]; order: 500; parent: #'Refactoring'. (aBuilder item: #'Push down') action: [ target refactor pushDownMethodsFor: selectedMethods ]; order: 600; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:54'! instVarRefactoring: aBuilder ! ! !Trait methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:55'! methodRefactoring: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:52'! codeRewritingClass: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:52'! groupRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:54'! instVarRefactoring: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:55'! methodRefactoring: aBuilder ^self explicitRequirement.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 18:00'! refactoringMethod: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 17:58'! sourceCodeRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !TClass methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/8/2013 18:01' prior: 47968736! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 17:52' prior: 47957854! codeRewritingClassSubmenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass codeRewritingClass: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 17:52' prior: 47958163! groupRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass groupRefactoring: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 17:54' prior: 46628676! instVarRefactoringSubmenu: aBuilder | target selectedClass | target := aBuilder model. selectedClass := target selectedClass. selectedClass ifNil: [^target]. selectedClass instVarRefactoring: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 17:55' prior: 47958422! methodRefactoringSubMenu: aBuilder | target selectedMethod | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethod ifNil:[ ^ target ]. selectedMethod origin instanceSide methodRefactoring: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 18:00' prior: 47959315! refactoringMethodMenu: aBuilder | target | target := aBuilder model. target selectedMethod ifNil:[ ^ target ]. target selectedMethod origin instanceSide refactoringMethod: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 17:58' prior: 47959642! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass sourceCodeRefactoring: aBuilder.! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'SebastianTleye 8/8/2013 18:01' prior: 47959916! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. target selectedClass sourceCodeRefactoringMenu: aBuilder.! ! !NautilusRefactoring methodsFor: 'option' stamp: 'GuillermoPolito 8/5/2013 16:15'! shouldInlineExpression: aString ^ self confirm: ('Do you want to inline the expression ''<1s>'' in the current method?' expandMacrosWith: aString)! ! !OpenToolTest methodsFor: 'test browse' stamp: 'SebastianTleye 7/22/2013 13:46' prior: 48024242! testOpenBrowseOnTraitMethod | browser | browser := (TBehavior>>#name) browse. browser changed. browser close.! ! !Morph methodsFor: 'updating' stamp: 'StephaneDucasse 8/8/2013 21:03' prior: 46642764! breakDependents self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super breakDependents ] on: Error do: []. self removeProperty: #announcer! ! !PragmaCollector methodsFor: 'system changes' stamp: 'StephaneDucasse 8/5/2013 22:24' prior: 29901419! installSystemNotifications "Allows myself to be kept up-to-date regarding system changes" SystemAnnouncer uniqueInstance unsubscribe: self. SystemAnnouncer uniqueInstance weak on: ClassRemoved send: #classRemovedEventOccurs: to: self; on: MethodRemoved send: #removedEventOccurs: to: self; on: MethodAdded send: #addedEventOccurs: to: self; on: MethodModified send: #modifiedEventOccurs: to: self! ! !Trait method! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! ExampleBuilderMorph removeSelector: #theme! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! ExampleBuilderMorph removeSelector: #textEntry:title:entryText:! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! ExampleBuilderMorph removeSelector: #textEntry:title:! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! ExampleBuilderMorph removeSelector: #textEntry:! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #questionWithoutCancel:title:! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! ExampleBuilderMorph removeSelector: #questionWithoutCancel:! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #question:title:! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! ExampleBuilderMorph removeSelector: #question:! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #proceed:title:! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! ExampleBuilderMorph removeSelector: #proceed:! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! ExampleBuilderMorph removeSelector: #newYesButtonFor:! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! ExampleBuilderMorph removeSelector: #newYesButton! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! ExampleBuilderMorph removeSelector: #newWorkArea! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! ExampleBuilderMorph removeSelector: #newWindowFor:title:! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! ExampleBuilderMorph removeSelector: #newVerticalSeparator! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! ExampleBuilderMorph removeSelector: #newTreeFor:list:selected:changeSelected:! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! ExampleBuilderMorph removeSelector: #newToolbarHandle! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! ExampleBuilderMorph removeSelector: #newToolbar:! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! ExampleBuilderMorph removeSelector: #newToolbar! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! ExampleBuilderMorph removeSelector: #newToolSpacer! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! ExampleBuilderMorph removeSelector: #newToolDockingBar! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! ExampleBuilderMorph removeSelector: #newTitle:for:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newTextEntryFor:getText:setText:help:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! ExampleBuilderMorph removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! ExampleBuilderMorph removeSelector: #newTextEditorFor:getText:setText:getEnabled:menu:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! ExampleBuilderMorph removeSelector: #newTextEditorFor:getText:setText:getEnabled:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newTextEditorFor:getText:setText:! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! ExampleBuilderMorph removeSelector: #newText:! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! ExampleBuilderMorph removeSelector: #newTabGroup:! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! ExampleBuilderMorph removeSelector: #newString:style:! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! ExampleBuilderMorph removeSelector: #newString:font:style:! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! ExampleBuilderMorph removeSelector: #newString:! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! ExampleBuilderMorph removeSelector: #newStack:! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! ExampleBuilderMorph removeSelector: #newStack! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newSliderFor:getValue:setValue:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newSliderFor:getValue:setValue:getEnabled:help:! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! ExampleBuilderMorph removeSelector: #newSeparator! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! ExampleBuilderMorph removeSelector: #newScrollPaneFor:! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! ExampleBuilderMorph removeSelector: #newSVSelector:help:! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! ExampleBuilderMorph removeSelector: #newRow:! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! ExampleBuilderMorph removeSelector: #newRow! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newRadioButtonFor:getSelected:setSelected:label:help:! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newRadioButtonFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! ExampleBuilderMorph removeSelector: #newPluggableDialogWindow:for:! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! ExampleBuilderMorph removeSelector: #newPluggableDialogWindow:! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! ExampleBuilderMorph removeSelector: #newPluggableDialogWindow! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! ExampleBuilderMorph removeSelector: #newPanel! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! ExampleBuilderMorph removeSelector: #newOverflowRowForAll:! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newOKButtonFor:getEnabled:! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newOKButtonFor:! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! ExampleBuilderMorph removeSelector: #newOKButton! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! ExampleBuilderMorph removeSelector: #newNoButtonFor:! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! ExampleBuilderMorph removeSelector: #newNoButton! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! ExampleBuilderMorph removeSelector: #newMultistateButton! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newMorphListFor:list:getSelected:setSelected:help:! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newMorphListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! ExampleBuilderMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! ExampleBuilderMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! ExampleBuilderMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! ExampleBuilderMorph removeSelector: #newMenuFor:! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! ExampleBuilderMorph removeSelector: #newMenu! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newListFor:list:selected:changeSelected:icon:getEnabled:help:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newListFor:list:selected:changeSelected:help:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newListFor:list:selected:changeSelected:getEnabled:help:! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! ExampleBuilderMorph removeSelector: #newLabelGroup:font:labelColor:! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! ExampleBuilderMorph removeSelector: #newLabelGroup:! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newLabelFor:label:getEnabled:! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newLabelFor:getLabel:getEnabled:! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newLabel:! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newIncrementalSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! ExampleBuilderMorph removeSelector: #newImageFor:get:help:! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! ExampleBuilderMorph removeSelector: #newImage:size:! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! ExampleBuilderMorph removeSelector: #newImage:! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! ExampleBuilderMorph removeSelector: #newHueSelector:getHue:setHue:help:! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! ExampleBuilderMorph removeSelector: #newHSVSelector:help:! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! ExampleBuilderMorph removeSelector: #newHSVASelector:help:! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! ExampleBuilderMorph removeSelector: #newGroupboxForAll:! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! ExampleBuilderMorph removeSelector: #newGroupboxFor:! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! ExampleBuilderMorph removeSelector: #newGroupbox:forAll:! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! ExampleBuilderMorph removeSelector: #newGroupbox:for:! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! ExampleBuilderMorph removeSelector: #newGroupbox:! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! ExampleBuilderMorph removeSelector: #newGroupbox! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newFuzzyLabelFor:label:offset:alpha:getEnabled:! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newFuzzyLabelFor:label:getEnabled:! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newFuzzyLabel:! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! ExampleBuilderMorph removeSelector: #newExpander:forAll:! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! ExampleBuilderMorph removeSelector: #newExpander:for:! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! ExampleBuilderMorph removeSelector: #newExpander:! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! ExampleBuilderMorph removeSelector: #newEmbeddedMenu! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! ExampleBuilderMorph removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:ghostText:getEnabled:help:! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! ExampleBuilderMorph removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:class:default:ghostText:getEnabled:useIndex:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! ExampleBuilderMorph removeSelector: #newDropListFor:list:getSelected:setSelected:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! ExampleBuilderMorph removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! ExampleBuilderMorph removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! ExampleBuilderMorph removeSelector: #newDialogPanel! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! ExampleBuilderMorph removeSelector: #newColumn:! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! ExampleBuilderMorph removeSelector: #newColorPresenterFor:getColor:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newColorChooserFor:getColor:setColor:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newColorChooserFor:getColor:setColor:getEnabled:help:! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! ExampleBuilderMorph removeSelector: #newCloseControlFor:action:help:! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! ExampleBuilderMorph removeSelector: #newCloseButtonFor:! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! ExampleBuilderMorph removeSelector: #newCloseButton! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newCheckboxFor:getSelected:setSelected:label:help:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! ExampleBuilderMorph removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:getLabel:help:! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! ExampleBuilderMorph removeSelector: #newCancelButtonFor:! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! ExampleBuilderMorph removeSelector: #newCancelButton! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newButtonLabelFor:label:getEnabled:! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newButtonLabel:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! ExampleBuilderMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:labelForm:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:label:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! ExampleBuilderMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:getLabel:help:! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newButtonFor:action:label:help:! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! ExampleBuilderMorph removeSelector: #newButtonFor:action:getEnabled:label:help:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! ExampleBuilderMorph removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:help:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! ExampleBuilderMorph removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:menu:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! ExampleBuilderMorph removeSelector: #newBasicTextEditorFor:getText:setText:getEnabled:! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! ExampleBuilderMorph removeSelector: #newBasicTextEditorFor:getText:setText:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! ExampleBuilderMorph removeSelector: #newBalloonHelp:for:corner:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! ExampleBuilderMorph removeSelector: #newBalloonHelp:for:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! ExampleBuilderMorph removeSelector: #newAutoAcceptTextEditorFor:getText:setText:getEnabled:! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! ExampleBuilderMorph removeSelector: #newAlphaSelector:getAlpha:setAlpha:help:! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! ExampleBuilderMorph removeSelector: #newAlphaImage:help:! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #message:title:! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! ExampleBuilderMorph removeSelector: #message:! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #longMessage:title:! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! ExampleBuilderMorph removeSelector: #fileSave:path:! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! ExampleBuilderMorph removeSelector: #fileSave:extensions:path:! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! ExampleBuilderMorph removeSelector: #fileSave:extensions:! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! ExampleBuilderMorph removeSelector: #fileSave:! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! ExampleBuilderMorph removeSelector: #fileOpen:extensions:path:preview:! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! ExampleBuilderMorph removeSelector: #fileOpen:extensions:path:! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! ExampleBuilderMorph removeSelector: #fileOpen:extensions:! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! ExampleBuilderMorph removeSelector: #fileOpen:! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #deny:title:! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! ExampleBuilderMorph removeSelector: #deny:! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! ExampleBuilderMorph removeSelector: #chooseFont:! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! ExampleBuilderMorph removeSelector: #chooseFont! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! ExampleBuilderMorph removeSelector: #chooseFileName:extensions:path:preview:! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! ExampleBuilderMorph removeSelector: #chooseDropList:title:list:! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! ExampleBuilderMorph removeSelector: #chooseDropList:list:! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! ExampleBuilderMorph removeSelector: #chooseDirectory:path:! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! ExampleBuilderMorph removeSelector: #chooseDirectory:! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! ExampleBuilderMorph removeSelector: #chooseColor:! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! ExampleBuilderMorph removeSelector: #chooseColor! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! ExampleBuilderMorph removeSelector: #centeredAlert:title:configure:! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! ExampleBuilderMorph removeSelector: #alert:title:configure:! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! ExampleBuilderMorph removeSelector: #alert:title:! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! ExampleBuilderMorph removeSelector: #alert:! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! ExampleBuilderMorph removeSelector: #abort:title:! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! ExampleBuilderMorph removeSelector: #abort:! Workspace removeSelector: #theme! Workspace removeSelector: #containingWindow! LargePositiveInteger removeSelector: #withAtLeastNDigits:! LargePositiveInteger removeSelector: #sqrtFloor! LargePositiveInteger removeSelector: #replaceFrom:to:with:startingAt:! LargePositiveInteger removeSelector: #rem:! LargePositiveInteger removeSelector: #quo:! LargePositiveInteger removeSelector: #printOn:base:nDigits:! LargePositiveInteger removeSelector: #mightBeASquare! LargePositiveInteger removeSelector: #isPrime! LargePositiveInteger removeSelector: #isLarge! LargePositiveInteger removeSelector: #highBitOfMagnitude! LargePositiveInteger removeSelector: #hashMultiply! LargePositiveInteger removeSelector: #hash! LargePositiveInteger removeSelector: #digitLength! LargePositiveInteger removeSelector: #digitAt:put:! LargePositiveInteger removeSelector: #digitAt:! LargePositiveInteger removeSelector: #asFloat! LargePositiveInteger removeSelector: #as31BitSmallInt! LargePositiveInteger removeSelector: #\\\! LargePositiveInteger removeSelector: #\\! LargePositiveInteger removeSelector: #>=! LargePositiveInteger removeSelector: #>! LargePositiveInteger removeSelector: #<=! LargePositiveInteger removeSelector: #' prior: 0! I'm a test case of SlotClassBuilder integration in the system. Tipically, my tests assert over Class API.! !ProtocolRemovalException commentStamp: '' prior: 42569179! A ProtocolRemovalException is an error raised when someone try to remove a protocol that should not be removed! !ClassOrganization commentStamp: '' prior: 42172791! A ClassOrganization is a new implementation of ClassOrganizer with - cleaner API - better object management - better categorization This object is in charge of system notifications. It manages the class comment, the class comment stamp and a protocol organizer! !Protocol commentStamp: '' prior: 42568023! A Protocol is a simple value holder representing a protocol. It's composed of a name and a set of method selectors! !AllProtocol commentStamp: '' prior: 42099967! An AllProtocol is a special protocol to hanlde the "all" case! !ProtocolOrganizer commentStamp: '' prior: 42569077! A ProtocolOrganizer is part of a ClassOrganizer. It manages the protocols of the class that owns it! !ClassDescription methodsFor: '*Slot' stamp: 'EstebanLorenzano 8/9/2013 15:48' prior: 46528749! initializeLayout (self class allInstVarNames includes: #layout) ifFalse: [ ^ self ]. layout ifNotNil: [ ^ self ]. self superclass ifNotNil: [ self superclass initializeLayout ]. layout := SlotVirus newLayoutFor: self! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 8/7/2013 18:04' prior: 43489892! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: PointerLayout slots: classSlots traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: layoutClass slots: slots traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 8/7/2013 14:18'! copyClassSlotsFromExistingClass "Ugly helper method: I copy over the class slots of the class in my builder environment." | oldClass | oldClass := self environment at: name ifAbsent: [ ^ self ]. self classSlots: oldClass class layout slotScope visibleSlotNames.! ! !WordLayout class methodsFor: 'instance creation' stamp: 'MartinDias 8/7/2013 17:46' prior: 44940522! extending: superLayout scope: aScope host: aClass ^ superLayout extendWord host: aClass; yourself! ! !ClassOrganizationTest methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/21/2013 15:06' prior: 42064513! organization ^ organization! ! !ClassOrganizationTest methodsFor: 'running' stamp: 'EstebanLorenzano 6/21/2013 14:47' prior: 42064634! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! !ClassOrganizationTest methodsFor: 'running' stamp: 'PavelKrivanek 8/5/2013 13:40' prior: 42064804! setUp organization := ClassOrganization new. organization addCategory: 'empty'. organization addCategory: 'one'. organization classify: #one under: 'one' suppressIfDefault: true. ! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06' prior: 42065081! testAddCategory self organization addCategory: 'test-protocol'. self assert: (self organization categories includes: 'test-protocol')! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06' prior: 42065310! testCategories | categories | categories := self organization categories. self assert: categories notEmpty.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/21/2013 15:06' prior: 42065512! testListAtCategoryNamed | methods | methods := self organization listAtCategoryNamed: 'empty'. self assert: methods isEmpty. methods := self organization listAtCategoryNamed: 'one'. self assert: methods size = 1. self assert: methods first = #one.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/27/2013 17:11' prior: 42065859! testRemoveCategory self assert: self organization categories size = 3. self should: [ self organization removeCategory: 'one' ] raise: Error. self shouldnt: [ self organization removeCategory: 'empty' ] raise: Error. self assert: self organization categories size = 2. self assert: self organization categories first = AllProtocol defaultName. self assert: self organization categories second = 'one'.! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'EstebanLorenzano 6/26/2013 16:39' prior: 42066360! testRemoveNonExistingProtocol self shouldnt: [ self organization removeCategory: 'non-existent' ] raise: Error. ! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:01'! assertOnlyOneAnnouncementOf: anAnnouncement within: aBlock SystemAnnouncer uniqueInstance weak on: anAnnouncement send: #countAnnouncements: to: self. aBlock value. self assert: announcementsCount <= 1! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! countAnnouncements: anAnnouncement announcementsCount := announcementsCount + 1! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! saveAnnouncement: anAnnouncement announcement := anAnnouncement! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 6/3/2013 17:00'! saveAnnouncementOnce: anAnnouncement announcement ifNotNil: [ ^self ]. announcement := anAnnouncement! ! !SlotAnnouncementsTest methodsFor: 'running' stamp: 'MartinDias 6/3/2013 17:19'! setUp super setUp. announcementsCount := 0.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05'! testClassAddedAnnounced SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. aClass := self makeWithLayout: PointerLayout. self assert: announcement classAdded equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05'! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self makeWithLayout: PointerLayout. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05'! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:06'! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: PointerLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:06'! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self makeWithLayout: PointerLayout. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #aSlot }. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 7/8/2013 16:05'! testClassRecategorizedAnnounced SystemAnnouncer uniqueInstance weak on: ClassRecategorized send: #saveAnnouncementOnce: to: self. aClass := self make: [:builder| builder category: self aCategory ]. anotherClass := self make: [:builder| builder category: self anotherCategory ]. self assert: announcement oldCategory equals: self aCategory. self assert: announcement newCategory equals: self anotherCategory. self assert: announcement classRecategorized == anotherClass.! ! !SlotBasicTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05'! testAddClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a) ]. classAdded instVarNamed: #a put: $A. classModified := self make: [ :builder | builder classSlots: #(a b) ]. self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) isNil.! ! !SlotBasicTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05'! testAddSharedPool self make: [ :builder | builder sharedPools: '' ]. aClass := self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. self assert: (aClass sharedPools includes: TestSharedPool). ! ! !SlotBasicTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05'! testAddSharedVariable self make: [ :builder | builder sharedVariables: '' ]. aClass := self make: [ :builder | builder sharedVariables: 'Var' ]. self assert: aClass classVarNames equals: #(Var). ! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testBasicClassBuilding aClass := self make: [ :builder | builder name: self aClassName ]. self deny: aClass layout isNil. self assert: aClass name = self aClassName. self assert: (self class environment at: self aClassName) == aClass. ! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testNewCompiledMethodClass aClass := self makeWithLayout: CompiledMethodLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self deny: aClass isWeak.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testNewPointerClass aClass := self makeWithLayout: PointerLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:06'! testNewPointerClassWithSlots aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testNewVariableByteClass aClass := self makeWithLayout: ByteLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isBytes. self assert: aClass isVariable.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testNewVariableWordClass aClass := self makeWithLayout: WordLayout. self deny: aClass isCompact. self deny: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isVariable.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 7/8/2013 16:05'! testNewWeakClass aClass := self makeWithLayout: WeakLayout. self deny: aClass isCompact. self assert: aClass isPointers. self deny: aClass isFixed. self assert: aClass isWords. self assert: aClass isWeak.! ! !SlotBasicTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05'! testRemoveClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a b) ]. classAdded instVarNamed: #a put: $A. classModified := self make: [ :builder | builder classSlots: #(a) ]. self assert: (classModified instVarNamed: #a) equals: $A. self should: [ classModified instVarNamed: #b ] raise: Error ! ! !SlotBasicTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05'! testRemoveSharedPool self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass := self make: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty ! ! !SlotBasicTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05'! testRemoveSharedVariable self make: [ :builder | builder sharedVariables: 'Var' ]. aClass := self make: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotBasicTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05'! testSwitchClassSlotAndMigrate | classAdded classModified | classAdded := self make: [ :builder | builder classSlots: #(a b) ]. "Add methods" classAdded class compile: 'a ^a'; compile: 'b ^b'. "Put values" classAdded instVarNamed: #a put: $A. classAdded instVarNamed: #b put: $B. "Modify the class" classModified := self make: [ :builder | builder classSlots: #(b a) ]. "The instance was migrated" self assert: (classModified instVarNamed: #a) equals: $A. self assert: (classModified instVarNamed: #b) equals: $B. "The methods were migrated" self assert: classModified a equals: $A. self assert: classModified b equals: $B. ! ! !SlotBasicTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05'! testWithClassSlots aClass := self make: [ :builder | builder classSlots: #(a) ]. self assert: aClass class instVarNames equals: #(a). aClass instVarNamed: #a put: $A. self assert: (aClass instVarNamed: #a) equals: $A.! ! !SlotBasicTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05'! testWithSharedPool aClass := self make: [ :builder | builder sharedPools: 'TestSharedPool' ]. aClass class compile: 'one ^One'. self assert: (aClass sharedPools includes: TestSharedPool). self assert: aClass one = 1.! ! !SlotBasicTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05'! testWithSharedVariable aClass := self make: [ :builder | builder sharedVariables: 'Var' ]. aClass class compile: 'var:x Var:=x'; compile: 'var ^Var'. aClass var: true. self assert: aClass classVarNames equals: #(Var). self assert: aClass var.! ! !SlotBasicTest methodsFor: 'tests-class slots' stamp: 'MartinDias 7/8/2013 16:05'! testWithoutClassSlots aClass := self make: [ :builder | builder classSlots: #() ]. self assert: aClass classVarNames isEmpty! ! !SlotBasicTest methodsFor: 'tests-shared pools' stamp: 'MartinDias 7/8/2013 16:05'! testWithoutSharedPools aClass := self make: [ :builder | builder sharedPools: '' ]. self assert: aClass sharedPools isEmpty! ! !SlotBasicTest methodsFor: 'tests-shared variables' stamp: 'MartinDias 7/8/2013 16:05'! testWithoutSharedVariables aClass := self make: [ :builder | builder sharedVariables: '' ]. self assert: aClass classVarNames isEmpty! ! !SlotEnvironmentTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:46'! testBasicEnvironment | environment | environment := SystemDictionary new. environment at: #SystemOrganization put: SystemOrganizer new. aClass := self make: [ :builder | builder environment: environment ]. self assert: (aClass environment == environment). self assert: (environment includesKey: aClass name). self assert: (environment at: aClass name) == aClass. self deny: (Smalltalk globals includesKey: aClass name).! ! !SlotErrorsTest methodsFor: 'helpers' stamp: 'MartinDias 8/7/2013 11:54'! assertInvalidClassName: aName self should: [ self make: [ :builder | builder name: aName ] ] raise: InvalidGlobalName. self flag: 'should remove class if not raised'. self should: [ PharoClassInstaller validateClassName: aName ] raise: InvalidGlobalName! ! !SlotErrorsTest methodsFor: 'running' stamp: 'MartinDias 8/7/2013 12:11'! expectedFailures ^ #(testCannotBeRecompiled)! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testCannotBeRecompiled | superclass | superclass := self make: [ :builder | builder superclass: Object; name: self aClassName ]. self make: [ :builder | builder superclass: superclass; name: self anotherClassName ]. self should: [ self make: [ :builder | builder layoutClass: VariableLayout; name: self aClassName ] ] raise: Error description: 'Old class builder raises: X cannot be recompiled' ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testClassNameMustBeCapitalized self assertInvalidClassName: #aNotCapitalizedClassName! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testClassNameMustBeSymbol self assertInvalidClassName: 1! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:27'! testClassNameWithInvalidCharacter self assertInvalidClassName: #'Invalid-ClassName'! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testClassSlotDuplicationConflict aClass := self make: [ :builder | builder classSlots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; classSlots: { #a } ] ] raise: DuplicatedSlotName ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:27'! testClassSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder classSlots: { reservedName } ] ] raise: InvalidSlotName ]! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testDirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. self should: [ self make: [ :builder | builder superclass: classA; name: self aClassName ] ] raise: CircularHierarchyError ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:27'! testIndirectCircularHierarchyError "Tests an error is raised when trying to create a heirarchy A<-B<-A" | classA classB | classA := self make: [ :builder | builder superclass: Object; name: self aClassName ]. classB := self make: [ :builder | builder superclass: classA; name: self anotherClassName ]. self should: [ self make: [ :builder | builder superclass: classB; name: self aClassName ] ] raise: CircularHierarchyError ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testSlotDuplicationConflict aClass := self make: [ :builder | builder slots: { #a } ]. self should: [ self make: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: { #a } ] ] raise: DuplicatedSlotName ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testSlotWithReservedName #(#self #super #thisContext #true #false #nil) do: [:reservedName | self should: [ self make: [ :builder | builder slots: { reservedName } ] ] raise: InvalidSlotName ]! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:28'! testValidateClassName PharoClassInstaller validateClassName: #GoodClassNameThatShouldNotExist! ! !SlotExampleTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:46'! testPharoClassInstallerExample | newClass | [ newClass := PharoClassInstaller example. self assert: newClass isBehavior. ] ensure: [ newClass removeFromSystem ].! ! !SlotIntegrationTest commentStamp: '' prior: 48496096! I'm a test case of SlotClassBuilder integration in the system. Tipically, my tests assert over Class API.! !SlotIntegrationTest methodsFor: 'running' stamp: 'MartinDias 8/7/2013 12:12'! expectedFailures ^ #( testCopyPreservesLayout "https://pharo.fogbugz.com/f/cases/11243/Class-copy-does-not-preserve-layout" )! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddAndAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass addInstVarNamed: #z. self assert: aClass instVarNames equals: #(x y z). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddAndRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. aClass removeInstVarNamed: #x. self assert: aClass instVarNames equals: #(y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddInstVarNamed "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; slots: #( x ) ]. self assert: aClass instVarNames = #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName; slots: #( y ) ]. self assert: anotherClass instVarNames = #(y).! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddInstVarNamedClassInterface "Add instance variables using the class interface" aClass := self make: [ :builder | builder name: self aClassName ]. aClass addInstVarNamed: 'x'. self assert: aClass instVarNames = #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName. ]. anotherClass addInstVarNamed: 'y'. self assert: anotherClass instVarNames = #(y).! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddInstVarNamedWithTrait "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x y )]. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAddInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assertTraitIntegrity. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass addInstVarNamed: #y. self assertTraitIntegrity. self assert: aClass instVarNames = #(x y). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testAnonymousSubclass aClass := self make: [ :builder | builder name: self aClassName; slots: #(x) ]. anotherClass := aClass classBuilder anonymousSubclassOf: aClass. self deny: anotherClass == aClass. self assert: anotherClass isBehavior. self assert: anotherClass superclass == aClass. self deny: anotherClass name = aClass name. self assert: anotherClass allInstVarNames = #(x)! ! !SlotIntegrationTest methodsFor: 'tests-compact index' stamp: 'MartinDias 8/7/2013 15:46'! testBecomeCompactAndUncompact | originalCompactClassesArray | aClass := self makeWithLayout: PointerLayout. self assert: aClass indexIfCompact equals: 0. originalCompactClassesArray := Smalltalk compactClassesArray copy. [ "The class becomes compact, so we are not in the original state." aClass becomeCompact. self assert: aClass indexIfCompact > 0. self deny: Smalltalk compactClassesArray = originalCompactClassesArray. ] ensure: [ "The class becomes uncompact, so we are back in the original state." aClass becomeUncompact. self assert: aClass indexIfCompact equals: 0. self assert: Smalltalk compactClassesArray equals: originalCompactClassesArray. ]. ! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testCompiledMethodLayout self assert: (CompiledMethod layout isKindOf: CompiledMethodLayout).! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testCopyPreservesLayout aClass := self makeWithLayout: PointerLayout. anotherClass := aClass copy. self deny: anotherClass layout isNil. self assert: aClass layout host == aClass. self assert: anotherClass layout host == anotherClass.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testRemoveInstVarNamed aClass := self make: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass := self make: [ :builder | builder name: self aClassName; slots: #(x z) ]. self assert: aClass instVarNames = #(x z).! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testRemoveInstVarNamedClassInterface aClass := self make: [ :builder | builder name: self aClassName; slots: #(x y z) ]. aClass removeInstVarNamed: #y. self assert: aClass instVarNames = #(x z).! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testRemoveInstVarNamedWithTrait2 "Add instance variables using the builder interface" aClass := self make: [ :builder | builder name: self aClassName; traitComposition: TOne; slots: #( x ) ]. self assert: aClass instVarNames equals: #(x). self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1. aClass removeInstVarNamed: #x. self assert: aClass instVarNames isEmpty. self assert: TOne users asArray equals: { aClass }. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testReshapeClassPropagatesToDeepHierarchyClassInterface "Test reshaping a class which is head of a hierarchy of 4 levels" "level 1" aClass := Object subclass: self aClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses isEmpty. aClass layout checkIntegrity. "level 2" anotherClass := aClass subclass: self anotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. "level 3" yetAnotherClass := anotherClass subclass: self yetAnotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. "level 4" yetYetAnotherClass := yetAnotherClass subclass: self yetYetAnotherClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses equals: { yetYetAnotherClass }. self assert: yetYetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity. "reshape level 1" aClass := Object subclass: self aClassName instanceVariableNames: 'x' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass instVarNames equals: #(x). aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity.! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 14:05'! testReshapeClassWithClassSlot aClass := Object subclass: self aClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. aClass class instanceVariableNames: #x. self assert: aClass class instVarNames equals: #(x). aClass := Object subclass: self aClassName instanceVariableNames: 'a' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: aClass class instVarNames equals: #(x).! ! !SlotIntegrationTest methodsFor: 'tests-compact index' stamp: 'MartinDias 8/7/2013 15:48'! testReshapeCompactClass aClass := self make: [ :builder | builder name: self aClassName ]. self assert: aClass indexIfCompact equals: 0. [ aClass becomeCompact. self assert: aClass indexIfCompact > 0. aClass := self make: [ :builder | builder name: self aClassName; slots:#(x) ]. self assert: aClass indexIfCompact > 0 ] ensure: [ aClass becomeUncompact ]. self assert: aClass indexIfCompact equals: 0. ! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:24'! testSmallIntegerLayout self assert: (SmallInteger layout isKindOf: SmallIntegerLayout).! ! !SlotLayoutEqualityTest methodsFor: 'helpers' stamp: 'MartinDias 8/7/2013 11:54'! assertClassBuiltWith: blockToBuildAClass isEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self make: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout equals: aClass layout. self assert: aClass layout equals: anotherClass layout. self assert: aClass layout hash equals: anotherClass layout hash.! ! !SlotLayoutEqualityTest methodsFor: 'helpers' stamp: 'MartinDias 8/7/2013 11:54'! assertClassBuiltWith: blockToBuildAClass isNotEqualToClassBuiltWith: blockToBuildAnotherClass aClass := self make: [ :builder | builder name: self aClassName; in: blockToBuildAClass ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; in: blockToBuildAnotherClass ]. self assert: aClass layout ~= anotherClass layout. self assert: aClass layout hash ~= anotherClass layout hash.! ! !SlotLayoutEqualityTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testLayoutEquals self layoutClasses do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] isEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] ]! ! !SlotLayoutEqualityTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testLayoutNotEquals self layoutClasses do: [:aLayoutClass | (self layoutClasses copyWithout: aLayoutClass) do: [:anotherLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass ] isNotEqualToClassBuiltWith: [:builder | builder layoutClass: anotherLayoutClass ]]]! ! !SlotLayoutEqualityTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testLayoutWithSlotsEquals self layoutClassesWithSlots do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ] isEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ].]! ! !SlotLayoutEqualityTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testLayoutWithSlotsNotEquals self layoutClassesWithSlots do: [:aLayoutClass | self assertClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field1} ] isNotEqualToClassBuiltWith: [:builder | builder layoutClass: aLayoutClass; slots: { #field2} ]]! ! !SlotLayoutExtensionTest methodsFor: 'helpers' stamp: 'MartinDias 8/7/2013 11:55'! should: superclassBlock extendWith: subclassBlock | superclass | superclass := self make: superclassBlock. self make: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ]! ! !SlotLayoutExtensionTest methodsFor: 'helpers' stamp: 'MartinDias 8/7/2013 11:54'! shouldnt: superclassBlock extendWith: subclassBlock | superclass | superclass := self make: superclassBlock. self should: [ self make: [ :builder | builder superclass: superclass; name: self anotherClassName; in: subclassBlock ] ] raise: IncompatibleLayoutConflict! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testByteCanExtendByte self should: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testByteCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: PointerLayout; slots: { #a }. ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testByteCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testCompiledMethodCanBeExtended self should: [ :builder | builder layoutClass: CompiledMethodLayout ] extendWith: [ :builder | builder layoutClass: CompiledMethodLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testInstanceVariableNamesMetaclassInterface "Add instance variables using the Metaclass interface" aClass := self make: [ :builder | builder name: self aClassName ]. aClass class instanceVariableNames: 'x'. self assert: aClass class instVarNames equals: #(x). anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName ]. anotherClass class instanceVariableNames: 'y'. self assert: anotherClass class instVarNames equals: #(y). self assert: (anotherClass class allInstVarNames includesAll: #(x y)).! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testPointerCanExtendPointer self should: [ :builder | builder layoutClass: PointerLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testPointerCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testPointerCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testPointerCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: PointerLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testPointerWithVariableExtensionIsNowVariable "This test case reproduces a real bug." | superclass subclass | superclass := self make: [ :builder | builder superclass: Object; name: self aClassName ]. subclass := self make: [ :builder | builder superclass: superclass; layoutClass: VariableLayout; name: self anotherClassName ]. superclass := self make: [ :builder | builder layoutClass: VariableLayout ]. self assert: superclass isVariable. self assert: subclass isVariable.! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testVariableCanExtendPointer self should: [ :builder | builder layoutClass: PointerLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testVariableCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testVariableCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testVariableCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testWordCanExtendWord self should: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testWordCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 8/7/2013 11:36'! testWordCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: PointerLayout; slots: { #a } ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testAddSlotAndMigrate "We create a class without slots and create an instance; then we add a slot and check the instance can hold a value." aClass := self makeWithLayout: PointerLayout. instance := aClass new. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarAt: 1 put: 125. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testAddSlotPropagateAndMigrate "We create a class without slots and a subclass, and create an instance of the latter; then we add a slot to superclass and check the instance can hold a value." | superclass subclass | superclass := self makeWithLayout: PointerLayout. subclass := self make: [ :builder | builder superclass: superclass; name: self anotherClassName. ]. superclass layout checkIntegrity. subclass layout checkIntegrity. instance := subclass new. "now we extend it with slots. The class definition should've changed" superclass := self makeWithLayout: PointerLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarNamed: 'aSlot' put: 42. self assert: (instance instVarNamed: 'aSlot') equals: 42. superclass layout checkIntegrity. subclass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testChangeLayoutTypeFromByte aClass := self makeWithLayout: ByteLayout. "Change the layout of the class from bytes to pointer" aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. aClass layout checkIntegrity. self deny: aClass layout isBits. self assert: aClass instVarNames equals: { #id. #name }.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testChangeLayoutTypeToByte aClass := self makeWithLayout: PointerLayout andSlots: { #id. #name }. "Change the layout of the class from pointer to bytes" aClass := self makeWithLayout: ByteLayout. aClass layout checkIntegrity. self assert: aClass layout isBits. self assert: aClass instVarNames isEmpty.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testChangingFormatKeepsMethod aClass := self make: [ :builder | builder name: self aClassName; layoutClass: PointerLayout ]. aClass compile: 'a ^self'. self assert: (aClass methodDictionary includesKey: #a). anotherClass := self make: [ :builder | builder name: self aClassName; layoutClass: VariableLayout . ]. self assert: (anotherClass methodDictionary includesKey: #a). aClass layout checkIntegrity. anotherClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testRedefineSuperclass "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: PointerLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. self makeWithLayout: PointerLayout. superclass layout checkIntegrity. class layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testRemoveSlotAndMigrate "We create a class with a slot and create an instance; then we remove the slot and check the instance doesn't hold the value." aClass := self makeWithLayout: PointerLayout andSlots: { #aSlot }. instance := aClass new. "it should have an instance variable" instance instVarAt: 1 put: 125. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout. self should: [ instance instVarAt: 1 ] raise: Error. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testReshapeClassPropagatesToDeepHierarchy "Test reshaping a class which is head of a hierarchy of 4 levels" "level 1" aClass := self make: [ :builder | builder name: self aClassName ]. self assert: aClass subclasses isEmpty. aClass layout checkIntegrity. "level 2" anotherClass := self make: [ :builder | builder superclass: aClass; name: self anotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. "level 3" yetAnotherClass := self make: [ :builder | builder superclass: anotherClass; name: self yetAnotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. "level 4" yetYetAnotherClass := self make: [ :builder | builder superclass: yetAnotherClass; name: self yetYetAnotherClassName ]. self assert: aClass subclasses equals: { anotherClass }. self assert: anotherClass subclasses equals: { yetAnotherClass }. self assert: yetAnotherClass subclasses equals: { yetYetAnotherClass }. self assert: yetYetAnotherClass subclasses isEmpty. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity. "reshape level 1" aClass := self make: [ :builder | builder name: self aClassName; slots:#(x) ]. aClass layout checkIntegrity. anotherClass layout checkIntegrity. yetAnotherClass layout checkIntegrity. yetYetAnotherClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testReshapeSuperSuperClass | supersuperclass superclass subclass | supersuperclass := self make: [ :builder | builder superclass: Object; name: self aClassName; slots: #(a b). ]. self assert: supersuperclass subclasses isEmpty. supersuperclass layout checkIntegrity. superclass := self make: [ :builder | builder superclass: supersuperclass; name: self anotherClassName. ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses isEmpty. superclass layout checkIntegrity. supersuperclass layout checkIntegrity. subclass := self make: [ :builder | builder superclass: superclass; name: self yetAnotherClassName; slots:#(c d). ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses equals: { subclass }. self assert: subclass subclasses isEmpty. subclass layout checkIntegrity. superclass layout checkIntegrity. supersuperclass layout checkIntegrity. "reshape the super super class" supersuperclass := self make: [ :builder | builder superclass: Object; name: self aClassName; slots: #(a b a2). ]. self assert: supersuperclass subclasses equals: { superclass }. self assert: superclass subclasses equals: { subclass }. self assert: subclass subclasses isEmpty. subclass layout checkIntegrity. superclass layout checkIntegrity. supersuperclass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testShiftSlotAndMigrate aClass := self makeWithLayout: PointerLayout andSlots: { #a. #c }. aClass compile: 'a ^a'. aClass compile: 'c ^c'. instance := aClass new. instance instVarNamed: #a put: 1. instance instVarNamed: #c put: 3. "now we extend it with slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #a. #b. #c }. "it should have added an instance variable with nil in the middle" self assert: (instance instVarAt: 1) equals: 1. self assert: (instance instVarAt: 2) equals: nil. self assert: (instance instVarAt: 3) equals: 3. self assert: (instance instVarNamed: #a) equals: 1. self assert: (instance instVarNamed: #b) equals: nil. self assert: (instance instVarNamed: #c) equals: 3. "it should have migrated methods" self assert: instance a equals: 1. self assert: instance c equals: 3. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testSuperclassChangeLayoutType "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: ByteLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. "Change the layout of the superclass from bytes to pointer" self makeWithLayout: PointerLayout. superclass layout checkIntegrity. class layout checkIntegrity. self deny: superclass layout isBits. self assert: class layout isBits.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:30'! testSwitchSlotsAndMigrate aClass := self makeWithLayout: PointerLayout andSlots: { #a. #b }. aClass compile: 'a ^a'; compile: 'b ^b'. instance := aClass new. instance instVarNamed: #a put: $A. instance instVarNamed: #b put: $B. "now we switch the slots. The class definition should've changed" self makeWithLayout: PointerLayout andSlots: { #b. #a }. self assert: (instance instVarAt: 1) equals: $B. self assert: (instance instVarAt: 2) equals: $A. self assert: (instance instVarNamed: #a) equals: $A. self assert: (instance instVarNamed: #b) equals: $B. "it should have migrated methods" self assert: instance a equals: $A. self assert: instance b equals: $B. aClass layout checkIntegrity.! ! !SlotSilentTest methodsFor: 'running' stamp: 'MartinDias 8/7/2013 11:57'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ] ! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testClassWithClassTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder classTraitComposition: TOne ]. self assert: TOne users asArray equals: { aClass class }. self assert: TOne classTrait users isEmpty. self assert: (aClass class canUnderstand: #one). self assert: aClass one equals: 1.! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testClassWithTrait self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder traitComposition: TOne ]. self assert: TOne users asArray equals: { aClass }. self assert: TOne classTrait users isEmpty. self assert: (aClass canUnderstand: #one). self assert: aClass new one equals: 1.! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testClassWithTrait2 self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. aClass := self make: [ :builder | builder traitComposition: TOne classTrait ]. self assert: TOne users isEmpty. self assert: TOne classTrait users asArray equals: { aClass }. self deny: (aClass canUnderstand: #one). self assert: (aClass canUnderstand: #classOne). self assert: aClass new classOne equals: 1.! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testModifyClassTraitComposition "Tests that when modifing the trait composition on class-side, the old methods are removed from the method dictionary, and the new ones are added." self make: [ :builder | builder classTraitComposition: TOne ]. aClass := self make: [ :builder | builder classTraitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass class }. self assert: TTwo classTrait users isEmpty. self deny: (aClass class canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass class canUnderstand: #two). aClass layout checkIntegrity. aClass := self make: [ :builder | builder classTraitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two).! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testModifyTraitComposition "Tests that when modifing the trait composition, the old methods are removed from the method dictionary, and the new ones are added." self make: [ :builder | builder traitComposition: TOne ]. aClass := self make: [ :builder | builder traitComposition: TTwo ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users asArray equals: { aClass }. "self assert: TTwo classTrait users isEmpty." aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self assert: (aClass canUnderstand: #two). aClass := self make: [ :builder | builder traitComposition: { } ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self assert: TTwo users isEmpty. self assert: TTwo classTrait users isEmpty. aClass layout checkIntegrity. self deny: (aClass canUnderstand: #one). self deny: (aClass class canUnderstand: #classOne). self deny: (aClass canUnderstand: #two). ! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testRemoveClassTrait "Tests that when removing a trait from class-side, its methods are removed from the method dictionary." aClass := self make: [ :builder | builder classTraitComposition: TOne ]. aClass := self make: [ :builder | builder classTraitComposition: {} ]. self deny: (aClass class canUnderstand: #one). self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. ! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testRemoveTrait "Tests that when removing a trait from a class, its methods are removed from the method dictionary." self make: [ :builder | builder traitComposition: TOne ]. aClass := self make: [ :builder | builder traitComposition: {} ]. self assert: TOne users isEmpty. self assert: TOne classTrait users isEmpty. self deny: (aClass canUnderstand: #one). ! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testTraitUsersAfterClassReshape aClass := self make: [ :builder | builder name: self aClassName ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self make: [ :builder | builder name: self aClassName; slots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !SlotTraitsTest methodsFor: 'tests' stamp: 'MartinDias 8/7/2013 11:31'! testTraitUsersAfterMetaclassReshape aClass := self make: [ :builder | builder name: self aClassName ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; superclass: aClass; traitComposition: TOne; classTraitComposition: TOne classTrait + TTwo ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). "reshape the super class" aClass := self make: [ :builder | builder name: self aClassName; classSlots: #( x y z ) ]. self assert: TOne users asArray equals: { anotherClass }. self assert: TOne classTrait users asArray equals: { anotherClass class }. self assert: TTwo users asArray equals: { anotherClass class }. self assert: TTwo classTrait users asArray equals: { }. self deny: (aClass canUnderstand: #one). self assert: (anotherClass canUnderstand: #one). self deny: (aClass class canUnderstand: #two). self assert: (anotherClass class canUnderstand: #two). ! ! !TBehavior methodsFor: 'private' stamp: 'MartinDias 8/7/2013 17:35' prior: 40912498! becomeCompact "Make me compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add me in that array - update my format with the index - update my instances " self classBuilder becomeCompact: self! ! !TBehavior methodsFor: 'private' stamp: 'MartinDias 8/7/2013 17:21' prior: 40913522! becomeCompactSimplyAt: index "The same as #becomeCompact but without updating my instances." self classBuilder becomeCompact: self simplyAt: index! ! !TBehavior methodsFor: 'private' stamp: 'MartinDias 8/7/2013 17:27' prior: 40914521! becomeUncompact "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." self classBuilder becomeUncompact: self! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MartinDias 8/7/2013 17:30'! becomeCompact: aClass "Make the class compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MartinDias 8/7/2013 17:31'! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Caller must convert the instances" ! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MartinDias 8/7/2013 17:31'! becomeUncompact: aClass "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." | compactClassesArray index | compactClassesArray := Smalltalk compactClassesArray. (index := aClass indexIfCompact) = 0 ifTrue: [^ self]. (compactClassesArray includes: aClass) ifFalse: [^ self halt "inconsistent state"]. aClass checkCanBeUncompact. "Update instspec so future instances will not be compact" aClass setFormat: aClass format - (index bitShift: 11). "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" compactClassesArray at: index put: nil. ! ! !ClassModification class methodsFor: 'instance creation' stamp: 'MartinDias 8/7/2013 18:03'! modify: aClass extend: aSuperclass withLayoutType: layoutClass slots: someSlots traitComposition: aTraitComposition compactClassIndex: compactClassIndex ^ self new target: aClass; superclass: aSuperclass; traitComposition: aTraitComposition; layoutClass: layoutClass slots: someSlots compactClassIndex: compactClassIndex; yourself! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 8/7/2013 18:06'! layoutClass: layoutClass slots: slotArray compactClassIndex: compactClassIndex | parentLayout newScope newLayout | parentLayout := self superLayout. newScope := parentLayout slotScope extend: slotArray. newLayout := layoutClass extending: parentLayout scope: newScope host: self target. newLayout compactClassIndex: compactClassIndex. self layout: newLayout! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 8/7/2013 17:24'! becomeCompact: aClass "Make the class compact. This means: - to find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index. "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 8/7/2013 17:24'! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ Halt halt: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index.! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 8/7/2013 17:27'! becomeUncompact: aClass "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." | compactClassesArray index | compactClassesArray := Smalltalk compactClassesArray. (index := aClass indexIfCompact) = 0 ifTrue: [^ self]. (compactClassesArray includes: aClass) ifFalse: [^ self halt "inconsistent state"]. aClass checkCanBeUncompact. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: 0. "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" compactClassesArray at: index put: nil. ! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MartinDias 8/7/2013 14:10' prior: 43478804! name: name inEnvironment: environment subclassOf: superClass type: type instanceVariableNames: instanceVariablesString classVariableNames: classVariablesString poolDictionaries: sharedPoolsString category: category "Define a new class in the given environment" ^ self slotClassInstaller make: [ :builder | builder superclass: superClass; name: name; layoutClass: (self layoutForType: type); slots: instanceVariablesString asSlotCollection; sharedVariables: classVariablesString; sharedPools: sharedPoolsString; category: category; environment: environment; copyTraitCompositionFromExistingClass; copyClassSlotsFromExistingClass ]. ! ! !SystemNavigationTest methodsFor: 'testing' stamp: 'MartinDias 8/7/2013 18:44' prior: 51607510! testAllSendersOfASelectorInAClass | senders selector inClass | selector := #nextPutAll:. inClass := True. senders := self systemNavigationToTest allSendersOf: selector inClass: inClass. self assert: senders size = 1. senders do: [ :methodRef | self assert: methodRef className = inClass name ]. #(1 #printOn:) pairsDo: [ :index :selectorRef | self assert: ((senders at: index) selector = selectorRef) ]! ! !SmalltalkImage methodsFor: 'PharoKernel' stamp: 'PavelKrivanek 8/5/2013 13:41' prior: 39029919! kernelPackageNames ^ #('AST-Core' 'AST-Semantic' 'Announcements-Core' 'Announcements-Core' 'Collections-Abstract' 'Collections-Arithmetic' 'Collections-Arrayed' 'Collections-Atomic' 'Collections-Native' 'Collections-Sequenceable' 'Collections-Stack' 'Collections-Streams' 'Collections-Strings' 'Collections-Support' 'Collections-Text' 'Collections-Traits' 'Collections-Unordered' 'Collections-Weak' 'Compiler' 'Compression' 'Files' 'Graphics-Display Objects' 'Graphics-Primitives' 'Graphics-Transformations' 'Kernel' 'Multilingual-Encodings' 'Multilingual-Languages' 'Multilingual-TextConversion' 'System-Changes' 'System-CommandLine' 'System-Clipboard' 'System-FileRegistry' 'System-Finalization' 'System-Localization' 'System-Object Events' 'System-Platforms' 'System-Support' 'Text-Core' 'Traits' 'UIManager' 'Transcript' 'FileSystem-AnsiStreams' 'FileSystem-Core' 'FileSystem-Disk' 'FileSystem-Memory' 'CodeImport' 'Regex-Core' 'SystemProgress' 'System-Announcements' 'Ring-Core-Kernel' 'Ring-Core-Containers' 'Kernel-Pragmas' 'Kernel-Pragmas' 'System-PragmaCollector' 'OpalCompiler-Core' 'ClassOrganizer-Core')! ! !ProtocolRemovalException commentStamp: '' prior: 48496275! A ProtocolRemovalException is an error raised when someone try to remove a protocol that should not be removed! !AbstractLayout methodsFor: 'accessing' stamp: 'MartinDias 8/7/2013 17:56' prior: 41767039! host: aClass host := aClass! ! !ClassOrganization commentStamp: '' prior: 48496452! A ClassOrganization is a new implementation of ClassOrganizer with - cleaner API - better object management - better categorization This object is in charge of system notifications. It manages the class comment, the class comment stamp and a protocol organizer! !ClassOrganization class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/28/2013 16:35' prior: 42045627! forClass: aClass ^ self basicNew initializeClass: aClass; yourself! ! !ClassOrganization class methodsFor: 'import' stamp: 'BenjaminVanRyseghem 4/24/2012 14:11' prior: 19312509! importFrom: aClassOrganizer aClassOrganizer class = self ifTrue: [ ^ aClassOrganizer ]. ^ self new importFrom: aClassOrganizer; yourself! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 16:57' prior: 42045788! addCategory: aString | oldCategories | (self protocolOrganizer hasProtocolNamed: aString) ifTrue: [ ^self ]. oldCategories := self categories copy. self protocolOrganizer addProtocolNamed: aString. self notifyOfAddedCategory: aString. self notifyOfChangedCategoriesFrom: oldCategories to: self categories.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:38' prior: 42046229! addCategory: aProtocolName before: aUselessArgument self addCategory: aProtocolName! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/24/2012 14:17' prior: 19304643! allMethodSelectors ^ protocolOrganizer allMethods! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:01' prior: 42046419! categories ^ self protocolOrganizer allProtocolsNames! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:45' prior: 42046583! categoriesSorted ^ self protocolOrganizer protocolsSorted! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 5/28/2013 14:09' prior: 42046761! categoryOfElement: aSelector ^ (self protocolOrganizer protocolsOfSelector: aSelector) ifEmpty: [ Protocol unclassified ] ifNotEmpty: [:col | col first name ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'BenjaminVanRyseghem 4/12/2012 18:11' prior: 19308335! changeFromCategorySpecs: categorySpecs "notification" self internalChangeFromString: categorySpecs! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'MarcusDenker 5/18/2013 15:44' prior: 38647117! changeFromString: aString "Parse the argument, aString, and make this be the receiver's structure." | categorySpecs | categorySpecs := aString parseLiterals. "If nothing was scanned and I had no elements before, then default me" (categorySpecs isEmpty and: [ self protocolOrganizer isEmpty ]) ifTrue: [ ^ self protocolOrganizer reset ]. ^ self changeFromCategorySpecs: categorySpecs! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 15:02' prior: 19305072! classComment ^ self comment! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 15:03' prior: 19305208! classComment: aString self comment: aString! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 18:36' prior: 19305360! classComment: aString stamp: aStamp self comment: aString; commentStamp: aStamp! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 15:51' prior: 19305552! classify: aSymbol under: aProtocolName ^ self classify: aSymbol under: aProtocolName suppressIfDefault: true! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/28/2013 16:18' prior: 42047044! classify: selector under: aProtocolName suppressIfDefault: aBoolean | oldProtocol forceNotify | forceNotify := (self protocolOrganizer includesSelector: selector) not. oldProtocol := self categoryOfElement: selector. (forceNotify or: [ oldProtocol ~= aProtocolName or: [ aBoolean not or: [ aProtocolName ~= Protocol unclassified ] ] ]) ifTrue: [ self protocolOrganizer classify: selector inProtocolNamed: aProtocolName suppressIfDefault: aBoolean. self notifyOfChangedSelector: selector from: oldProtocol to: aProtocolName ].! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 18:39' prior: 19303274! comment comment ifNil: [^ '']. ^ comment string ifNil: ['']! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 18:37' prior: 19303430! comment: aString "Store the comment, aString, associated with the object that refers to the receiver." (aString isKindOf: RemoteString) ifTrue: [ comment := aString] ifFalse: [aString isEmptyOrNil ifTrue: [ comment := nil] ifFalse: [ comment := RemoteString newString: aString onFileNumber: 2]] "Later add priorSource and date and initials?"! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 18:41' prior: 19306065! commentRemoteStr ^ comment! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:04' prior: 19303890! commentStamp ^ commentStamp! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:04' prior: 19304012! commentStamp: anObject commentStamp := anObject! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'CamilloBruni 6/29/2013 20:23' prior: 42885777! fileOutCommentOn: aFileStream moveSource: moveSource toFile: fileIndex "Copy the class comment to aFileStream. If moveSource is true (as in compressChanges or compressSources, then update classComment to point to the new file." | fileComment | self classComment ifNil: [ ^ self ]. aFileStream cr. fileComment := RemoteString newString: self classComment string onFileNumber: fileIndex toFile: aFileStream. moveSource ifTrue: [ self classComment: fileComment ]! ! !ClassOrganization methodsFor: 'testing' stamp: 'MarcusDenker 7/17/2013 14:29' prior: 45168525! hasComment ^ self comment isEmptyOrNil not ! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 16:15' prior: 19306200! hasSubject ^ organizedClass notNil! ! !ClassOrganization methodsFor: 'importing' stamp: 'BenjaminVanRyseghem 4/12/2012 18:29' prior: 19309904! importFrom: aClassOrganizer organizedClass := aClassOrganizer subject. self comment: aClassOrganizer classComment. self commentStamp: aClassOrganizer commentStamp. protocolOrganizer := (ProtocolOrganizer importFrom: aClassOrganizer)! ! !ClassOrganization methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 16:34' prior: 42047821! initialize super initialize. protocolOrganizer := ProtocolOrganizer new.! ! !ClassOrganization methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 16:35' prior: 42047991! initializeClass: aClass self initialize. organizedClass := aClass. organizedClass selectors do: [ :each | self classify: each under: Protocol unclassified ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'BenjaminVanRyseghem 4/13/2012 13:46' prior: 19309083! internalChangeFromString: categorySpecs "Parse the argument, aString, and make this be the receiver's structure." protocolOrganizer := ProtocolOrganizer fromSpec: categorySpecs! ! !ClassOrganization methodsFor: 'testing' stamp: 'EstebanLorenzano 5/28/2013 17:16' prior: 42048241! isEmptyCategoryNamed: categoryName ^ (self protocolOrganizer getProtocolNamed: categoryName) isEmpty! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:52' prior: 42048448! listAtCategoryNamed: aName ^ (self protocolOrganizer methodsInProtocolNamed: aName) asArray! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/24/2012 14:18' prior: 19306343! listAtCategoryNumber: aSmallInteger ^ (protocolOrganizer allProtocols at: aSmallInteger ifAbsent: [ ^ {} ]) methods asArray! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/26/2013 16:59' prior: 42048636! notifyOfAddedCategory: protocolName self hasSubject ifFalse: [ ^ self ]. SystemAnnouncer uniqueInstance protocolAdded: protocolName inClass: self subject! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/21/2013 14:35' prior: 42048911! notifyOfChangedCategoriesFrom: oldCollectionOrNil to: newCollectionOrNil (self hasSubject and: [ oldCollectionOrNil ~= newCollectionOrNil ]) ifTrue: [ SystemAnnouncer uniqueInstance classReorganized: self subject ].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'MarcusDenker 9/18/2012 13:50' prior: 19310543! notifyOfChangedCategoryFrom: oldNameOrNil to: newNameOrNil (self hasSubject and: [oldNameOrNil ~= newNameOrNil]) ifTrue: [SystemAnnouncer uniqueInstance classReorganized: self subject].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/21/2013 14:20' prior: 42049240! notifyOfChangedSelector: element from: oldCategory to: newCategory (self hasSubject and: [(oldCategory ~= newCategory)]) ifTrue: [ self subject notifyOfRecategorizedSelector: element from: oldCategory to: newCategory ].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'ClementBera 7/26/2013 16:35' prior: 46541117! notifyOfChangedSelectorsOldDict: oldDictionaryOrNil newDict: newDictionaryOrNil (oldDictionaryOrNil isNil and: [newDictionaryOrNil isNil]) ifTrue: [^ self]. oldDictionaryOrNil ifNil: [ newDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: nil to: cat]. ^ self. ]. newDictionaryOrNil ifNil: [ oldDictionaryOrNil keysAndValuesDo: [:el :cat | self notifyOfChangedSelector: el from: cat to: nil]. ^ self. ]. oldDictionaryOrNil keysAndValuesDo: [:el :cat | | newCat | newCat := newDictionaryOrNil at: el. self notifyOfChangedSelector: el from: cat to: newCat. ].! ! !ClassOrganization methodsFor: 'notifications' stamp: 'EstebanLorenzano 6/26/2013 16:59' prior: 42049575! notifyOfRemovedCategory: protocolName self hasSubject ifFalse: [ ^ self ]. SystemAnnouncer uniqueInstance protocolRemoved: protocolName inClass: self subject! ! !ClassOrganization methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:52' prior: 19304154! organizedClass ^ organizedClass! ! !ClassOrganization methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/12/2012 15:01' prior: 42049851! protocolOrganizer ^ protocolOrganizer! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'CamilloBruni 6/29/2013 20:27' prior: 42886381! putCommentOnFile: aFileStream numbered: sourceIndex moveSource: moveSource forClass: aClass "Store the comment about the class onto file, aFileStream." | header | self classComment ifNil: [ ^ self ]. aFileStream cr; nextPut: $!!. header := String streamContents: [:strm | strm nextPutAll: aClass name; nextPutAll: ' commentStamp: '. commentStamp ifNil: [commentStamp := '']. commentStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: '0']. aFileStream nextChunkPut: header. aClass organization fileOutCommentOn: aFileStream moveSource: moveSource toFile: sourceIndex. aFileStream cr! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:01' prior: 42049981! realCategories ^ self protocolOrganizer protocolsNames ! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 16:59' prior: 42050143! removeCategory: protocolName | oldCategories | (self protocolOrganizer hasProtocolNamed: protocolName) ifFalse: [ ^ self ]. oldCategories := self protocolOrganizer allProtocolsNames copy. self protocolOrganizer removeProtocolNamed: protocolName. self notifyOfRemovedCategory: protocolName. self notifyOfChangedCategoriesFrom: oldCategories to: self protocolOrganizer allProtocolsNames.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:41' prior: 42050659! removeElement: aSymbol | oldProtocol | oldProtocol := self categoryOfElement: aSymbol. self protocolOrganizer removeMethod: aSymbol. self notifyOfChangedSelector: aSymbol from: oldProtocol to: (self categoryOfElement: aSymbol).! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/24/2012 14:38' prior: 19307281! removeEmptyCategories | oldCategories | oldCategories := self protocolOrganizer allProtocolsNames copy. self protocolOrganizer removeEmptyProtocols. self notifyOfChangedCategoriesFrom: oldCategories to: self protocolOrganizer allProtocolsNames.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/26/2013 18:32' prior: 42051011! renameCategory: oldName toBe: newName self silentlyRenameCategory: oldName toBe: newName. self notifyOfChangedCategoryFrom: oldName to: newName. "I need to notify also the selector changes, otherwise RPackage will not notice" (self protocolOrganizer getProtocolNamed: newName) methods do: [ :each | self notifyOfChangedSelector: each from: oldName to: newName ]! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'BenjaminVanRyseghem 4/12/2012 18:29' prior: 19309384! scanFrom: aStream "Reads in the organization from the next chunk on aStream. Categories or elements not found in the definition are not affected. New elements are ignored." self changeFromString: aStream nextChunk. aStream skipStyleChunk.! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 16:15' prior: 19307910! setSubject: anObject organizedClass := anObject! ! !ClassOrganization methodsFor: 'private' stamp: 'EstebanLorenzano 5/28/2013 18:05' prior: 42051476! silentlyRenameCategory: oldName toBe: newName self protocolOrganizer renameProtocol: oldName into: newName. ! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 6/21/2013 14:42' prior: 42051710! sortCategories "Do nothing"! ! !ClassOrganization methodsFor: 'backward compatibility - file in/out' stamp: 'BenjaminVanRyseghem 4/12/2012 18:10' prior: 19309749! stringForFileOut ^ self protocolOrganizer stringForFileOut! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 16:18' prior: 19308188! subject ^organizedClass! ! !Protocol commentStamp: '' prior: 48496776! A Protocol is a simple value holder representing a protocol. It's composed of a name and a set of method selectors! !AllProtocol commentStamp: '' prior: 48496951! An AllProtocol is a special protocol to hanlde the "all" case! !AllProtocol class methodsFor: 'data' stamp: 'EstebanLorenzano 6/21/2013 13:07' prior: 42024590! defaultName ^ '--- all ---'! ! !AllProtocol class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/12/2012 14:14' prior: 17509087! protocolOrganizer: protocolOrganizer ^ self new protocolOrganizer: protocolOrganizer; yourself! ! !AllProtocol methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:05' prior: 42024720! canBeRemoved ^ false! ! !AllProtocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 15:53' prior: 42024825! isVirtualProtocol ^ true! ! !AllProtocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:15' prior: 17507990! methods ^ self protocolOrganizer allMethods! ! !AllProtocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/24/2012 14:50' prior: 17508123! name ^ (self methods isEmpty and: [ protocolOrganizer protocols isEmpty]) ifTrue: [ self class nullCategory ] ifFalse: [ name ]! ! !AllProtocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:15' prior: 17508344! protocolOrganizer ^ protocolOrganizer! ! !AllProtocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:15' prior: 17508472! protocolOrganizer: anObject protocolOrganizer := anObject.! ! !Protocol class methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 5/28/2013 13:21' prior: 42026663! ambiguous ^ #ambiguous! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:16' prior: 42026789! defaultName ^ self unclassified! ! !Protocol class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/28/2013 14:57' prior: 42026918! empty ^ self name: ''! ! !Protocol class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/12/2012 14:06' prior: 30075931! name: nm ^ self new name: nm; yourself! ! !Protocol class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/12/2012 14:02' prior: 30076074! name: nm methods: methods ^ self new methods: methods; name: nm; yourself! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/26/2013 17:57' prior: 42027029! nullCategory ^ 'no messages'! ! !Protocol class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:15' prior: 42027146! unclassified ^ #'as yet unclassified'! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:11' prior: 42027284! addMethod: aSymbol ^ methods add: aSymbol! ! !Protocol methodsFor: 'private' stamp: 'EstebanLorenzano 6/17/2013 12:51' prior: 42027422! canBeRemoved ^ self isEmpty ! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/28/2013 16:04' prior: 42027530! includesSelector: selector ^ methods includes: selector! ! !Protocol methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45605276! initialize super initialize. methods := IdentitySet new.. name := self class defaultName.! ! !Protocol methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:27' prior: 42027685! isEmpty ^ self methods isEmpty! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 15:53' prior: 42027796! isVirtualProtocol "A virtual protocol is a calculated one (it does not have any methods by it self)" ^ false! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:21' prior: 30073989! methods ^ methods! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:02' prior: 30074093! methods: anObject methods := anObject! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:21' prior: 30074218! name ^ name! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:02' prior: 30074316! name: anObject name := anObject! ! !Protocol methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:28' prior: 30074656! printOn: aStream aStream nextPutAll: (self class name); nextPutAll: ' ('; nextPutAll: (self name); nextPutAll: ') - '; nextPutAll: (self methods size asString); nextPutAll: ' selector(s)'.! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:11' prior: 42028006! removeMethod: aSymbol ^ methods remove: aSymbol! ! !Protocol methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:12' prior: 42028155! rename: newName self name: newName! ! !ProtocolOrganizer commentStamp: '' prior: 48497079! A ProtocolOrganizer is part of a ClassOrganizer. It manages the protocols of the class that owns it! !ProtocolOrganizer class methodsFor: 'import' stamp: 'BenjaminVanRyseghem 4/13/2012 13:45' prior: 30092669! fromSpec: aSpec ^ self new fromSpec: aSpec; yourself! ! !ProtocolOrganizer class methodsFor: 'import' stamp: 'BenjaminVanRyseghem 4/12/2012 14:35' prior: 30092825! importFrom: aClassOrganizer ^ self new importFrom: aClassOrganizer; yourself! ! !ProtocolOrganizer methodsFor: 'protocol - adding' stamp: 'BenjaminVanRyseghem 4/12/2012 14:11' prior: 30091527! addProtocol: aProtocol ^ protocols add: aProtocol! ! !ProtocolOrganizer methodsFor: 'protocol - adding' stamp: 'EstebanLorenzano 6/21/2013 14:37' prior: 42012194! addProtocolNamed: aName ^ protocols add: (Protocol name: aName)! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/12/2012 14:17' prior: 30088928! allMethods ^ self protocols gather: [:p | p methods ].! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:19' prior: 30087079! allProtocol ^ allProtocol! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/12/2012 15:10' prior: 30089077! allProtocols ^ { allProtocol }, protocols asArray! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:12' prior: 42012367! allProtocolsNames ^ self allProtocols collect: #name! ! !ProtocolOrganizer methodsFor: 'protocol - adding' stamp: 'EstebanLorenzano 5/28/2013 14:11' prior: 42012535! classify: aSymbol inProtocolNamed: aProtocolName | name protocol | name := aProtocolName. name = allProtocol name ifTrue: [ name := Protocol unclassified ]. "maybe here we should check if this method already belong to another protocol" (self protocolsOfSelector: aSymbol) do: [:p | p removeMethod: aSymbol ]. protocol := self getProtocolNamed: name ifNone: [ self addProtocolNamed: name ]. protocol addMethod: aSymbol ! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/21/2013 15:31' prior: 42013076! classify: aSymbol inProtocolNamed: aProtocolName suppressIfDefault: aBoolean | oldProtocols | oldProtocols := self protocolsOfSelector: aSymbol. self classify: aSymbol inProtocolNamed: aProtocolName. aBoolean ifTrue: [ (oldProtocols select: #canBeRemoved) do: [:e | self removeProtocol: e ] ].! ! !ProtocolOrganizer methodsFor: 'importing' stamp: 'BenjaminVanRyseghem 4/13/2012 13:45' prior: 30087975! fromSpec: aSpec aSpec do: [:spec || name methods | name := spec first asSymbol. methods := spec allButFirst asSet. self addProtocol: (Protocol name: name methods: methods) ]! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/28/2013 14:56' prior: 42013500! getProtocolNamed: aName ^ self allProtocols detect: [ :e | e name = aName ] ifNone: [ Protocol empty ]! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/24/2012 14:16' prior: 30090371! getProtocolNamed: aByteString ifNone: aBlockClosure ^ protocols detect: [:e | e name = aByteString ] ifNone: aBlockClosure ! ! !ProtocolOrganizer methodsFor: 'testing' stamp: 'EstebanLorenzano 6/27/2013 16:08' prior: 42013698! hasProtocolNamed: aString ^ self allProtocols anySatisfy: [ :each | each name = aString ]! ! !ProtocolOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 6/26/2013 18:01' prior: 42013900! importFrom: aClassOrganizer aClassOrganizer categories do: [:cat || protocol methods | cat = Protocol nullCategory ifFalse: [ methods := aClassOrganizer listAtCategoryNamed: cat. protocol := self addProtocolNamed: cat asString. methods do: [:m | protocol addMethod: m ]]].! ! !ProtocolOrganizer methodsFor: 'testing' stamp: 'EstebanLorenzano 6/28/2013 16:03' prior: 42014288! includesSelector: selector ^ protocols anySatisfy: [ :each | each includesSelector: selector ]! ! !ProtocolOrganizer methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45569726! initialize super initialize. protocols := IdentitySet new. allProtocol := AllProtocol protocolOrganizer: self.! ! !ProtocolOrganizer methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 5/28/2013 14:52' prior: 42014503! methodsInProtocolNamed: aName aName = AllProtocol defaultName ifTrue: [ ^ self allMethods ]. ^ (self getProtocolNamed: aName) methods! ! !ProtocolOrganizer methodsFor: 'backward compatibility' stamp: 'BenjaminVanRyseghem 4/12/2012 16:55' prior: 30087375! protocols ^ protocols! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 6/27/2013 18:03' prior: 42014748! protocolsNames ^ protocols collect: #name as: Array! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/28/2013 16:05' prior: 42014912! protocolsOfSelector: aSelector ^ (self protocols select: [:each | each includesSelector: aSelector ]) asArray! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'EstebanLorenzano 6/21/2013 14:51' prior: 42015128! protocolsSorted ^ (self protocols collect: #name as: Array) sort copyWithFirst: allProtocol name! ! !ProtocolOrganizer methodsFor: 'protocol - removing' stamp: 'BenjaminVanRyseghem 4/24/2012 14:38' prior: 30091850! removeEmptyProtocols (self protocols select: [:e | e isEmpty and: [ e canBeRemoved ] ]) do: [:p | self removeProtocol: p ]! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/24/2012 14:38' prior: 30091131! removeMethod: aSymbol (self protocolsOfSelector: aSymbol) do: [ :p | p removeMethod: aSymbol ]! ! !ProtocolOrganizer methodsFor: 'protocol - removing' stamp: 'EstebanLorenzano 6/27/2013 16:10' prior: 42015343! removeProtocol: aProtocol aProtocol canBeRemoved ifFalse: [ "Virtual protocols who cannot be removed should not raise an error" aProtocol isVirtualProtocol ifTrue: [ ^ self ]. ProtocolRemovalException signal ]. ^ protocols remove: aProtocol ifAbsent: [ ]! ! !ProtocolOrganizer methodsFor: 'protocol - removing' stamp: 'BenjaminVanRyseghem 4/24/2012 14:38' prior: 30092318! removeProtocolNamed: aName | protocolToRemove | protocolToRemove := self getProtocolNamed: aName. ^ self removeProtocol: protocolToRemove! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/12/2012 16:17' prior: 30091320! renameProtocol: oldName into: newName ^ (self getProtocolNamed: oldName) name: newName; yourself! ! !ProtocolOrganizer methodsFor: 'backward compatibility - file in/out' stamp: 'BenjaminVanRyseghem 4/12/2012 18:10' prior: 30087668! stringForFileOut ^ String streamContents: [:aStream | self protocols do: [:p | aStream << $( << p name printString. p methods do: [:m | aStream << ' ' << m asString ]. aStream << $); cr ]]! ! ClassModification removeSelector: #layoutClass:slots:! ClassModification class removeSelector: #modify:extend:withLayoutType:slots:traitComposition:! SlotClassBuilderTest removeSelector: #expectedFailures! SlotClassBuilderSilentTest removeSelector: #testWordCannotExtendPointerWithFields! SlotClassBuilderSilentTest removeSelector: #testWordCannotExtendByte! SlotClassBuilderSilentTest removeSelector: #testWordCanExtendWord! SlotClassBuilderSilentTest removeSelector: #testWithoutSharedVariables! SlotClassBuilderSilentTest removeSelector: #testWithoutSharedPools! SlotClassBuilderSilentTest removeSelector: #testWithoutClassSlots! SlotClassBuilderSilentTest removeSelector: #testWithSharedVariable! SlotClassBuilderSilentTest removeSelector: #testWithSharedPool! SlotClassBuilderSilentTest removeSelector: #testWithClassSlots! SlotClassBuilderSilentTest removeSelector: #testVariableCannotExtendWord! SlotClassBuilderSilentTest removeSelector: #testVariableCannotExtendByte! SlotClassBuilderSilentTest removeSelector: #testVariableCanExtendVariable! SlotClassBuilderSilentTest removeSelector: #testVariableCanExtendPointer! SlotClassBuilderSilentTest removeSelector: #testValidateClassName! SlotClassBuilderSilentTest removeSelector: #testTraitUsersAfterMetaclassReshape! SlotClassBuilderSilentTest removeSelector: #testTraitUsersAfterClassReshape! SlotClassBuilderSilentTest removeSelector: #testSwitchSlotsAndMigrate! SlotClassBuilderSilentTest removeSelector: #testSwitchClassSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testSuperclassChangeLayoutType! SlotClassBuilderSilentTest removeSelector: #testSmallIntegerLayout! SlotClassBuilderSilentTest removeSelector: #testSlotWithReservedName! SlotClassBuilderSilentTest removeSelector: #testSlotDuplicationConflict! SlotClassBuilderSilentTest removeSelector: #testShiftSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testReshapeSuperSuperClass! SlotClassBuilderSilentTest removeSelector: #testReshapeClassPropagatesToDeepHierarchyClassInterface! SlotClassBuilderSilentTest removeSelector: #testReshapeClassPropagatesToDeepHierarchy! SlotClassBuilderSilentTest removeSelector: #testRemoveTrait! SlotClassBuilderSilentTest removeSelector: #testRemoveSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testRemoveSharedVariable! SlotClassBuilderSilentTest removeSelector: #testRemoveSharedPool! SlotClassBuilderSilentTest removeSelector: #testRemoveInstVarNamedWithTrait2! SlotClassBuilderSilentTest removeSelector: #testRemoveInstVarNamedClassInterface! SlotClassBuilderSilentTest removeSelector: #testRemoveInstVarNamed! SlotClassBuilderSilentTest removeSelector: #testRemoveClassTrait! SlotClassBuilderSilentTest removeSelector: #testRemoveClassSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testRedefineSuperclass! SlotClassBuilderSilentTest removeSelector: #testPointerWithVariableExtensionIsNowVariable! SlotClassBuilderSilentTest removeSelector: #testPointerCannotExtendWord! SlotClassBuilderSilentTest removeSelector: #testPointerCannotExtendByte! SlotClassBuilderSilentTest removeSelector: #testPointerCanExtendVariable! SlotClassBuilderSilentTest removeSelector: #testPointerCanExtendPointer! SlotClassBuilderSilentTest removeSelector: #testPharoClassInstallerExample! SlotClassBuilderSilentTest removeSelector: #testNewWeakClass! SlotClassBuilderSilentTest removeSelector: #testNewVariableWordClass! SlotClassBuilderSilentTest removeSelector: #testNewVariableByteClass! SlotClassBuilderSilentTest removeSelector: #testNewPointerClassWithSlots! SlotClassBuilderSilentTest removeSelector: #testNewPointerClass! SlotClassBuilderSilentTest removeSelector: #testNewCompiledMethodClass! SlotClassBuilderSilentTest removeSelector: #testModifyTraitComposition! SlotClassBuilderSilentTest removeSelector: #testModifyClassTraitComposition! SlotClassBuilderSilentTest removeSelector: #testLayoutWithSlotsNotEquals! SlotClassBuilderSilentTest removeSelector: #testLayoutWithSlotsEquals! SlotClassBuilderSilentTest removeSelector: #testLayoutNotEquals! SlotClassBuilderSilentTest removeSelector: #testLayoutEquals! SlotClassBuilderSilentTest removeSelector: #testInstanceVariableNamesMetaclassInterface! SlotClassBuilderSilentTest removeSelector: #testIndirectCircularHierarchyError! SlotClassBuilderSilentTest removeSelector: #testDirectCircularHierarchyError! SlotClassBuilderSilentTest removeSelector: #testCompiledMethodLayout! SlotClassBuilderSilentTest removeSelector: #testCompiledMethodCanBeExtended! SlotClassBuilderSilentTest removeSelector: #testClassWithTrait2! SlotClassBuilderSilentTest removeSelector: #testClassWithTrait! SlotClassBuilderSilentTest removeSelector: #testClassWithClassTrait! SlotClassBuilderSilentTest removeSelector: #testClassSlotWithReservedName! SlotClassBuilderSilentTest removeSelector: #testClassSlotDuplicationConflict! SlotClassBuilderSilentTest removeSelector: #testClassNameWithInvalidCharacter! SlotClassBuilderSilentTest removeSelector: #testClassNameMustBeSymbol! SlotClassBuilderSilentTest removeSelector: #testClassNameMustBeCapitalized! SlotClassBuilderSilentTest removeSelector: #testChangingFormatKeepsMethod! SlotClassBuilderSilentTest removeSelector: #testChangeLayoutTypeToByte! SlotClassBuilderSilentTest removeSelector: #testChangeLayoutTypeFromByte! SlotClassBuilderSilentTest removeSelector: #testCannotBeRecompiled! SlotClassBuilderSilentTest removeSelector: #testByteCannotExtendWord! SlotClassBuilderSilentTest removeSelector: #testByteCannotExtendPointerWithFields! SlotClassBuilderSilentTest removeSelector: #testByteCanExtendByte! SlotClassBuilderSilentTest removeSelector: #testBasicEnvironment! SlotClassBuilderSilentTest removeSelector: #testBasicClassBuilding! SlotClassBuilderSilentTest removeSelector: #testAnonymousSubclass! SlotClassBuilderSilentTest removeSelector: #testAddSlotPropagateAndMigrate! SlotClassBuilderSilentTest removeSelector: #testAddSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testAddSharedVariable! SlotClassBuilderSilentTest removeSelector: #testAddSharedPool! SlotClassBuilderSilentTest removeSelector: #testAddInstVarNamedWithTrait2! SlotClassBuilderSilentTest removeSelector: #testAddInstVarNamedWithTrait! SlotClassBuilderSilentTest removeSelector: #testAddInstVarNamedClassInterface! SlotClassBuilderSilentTest removeSelector: #testAddInstVarNamed! SlotClassBuilderSilentTest removeSelector: #testAddClassSlotAndMigrate! SlotClassBuilderSilentTest removeSelector: #testAddAndRemoveInstVarNamedWithTrait2! SlotClassBuilderSilentTest removeSelector: #testAddAndAddInstVarNamedWithTrait2! SlotClassBuilderSilentTest removeSelector: #shouldnt:extendWith:! SlotClassBuilderSilentTest removeSelector: #should:extendWith:! SlotClassBuilderSilentTest removeSelector: #runCase! SlotClassBuilderSilentTest removeSelector: #assertInvalidClassName:! SlotClassBuilderSilentTest removeSelector: #assertClassBuiltWith:isNotEqualToClassBuiltWith:! SlotClassBuilderSilentTest removeSelector: #assertClassBuiltWith:isEqualToClassBuiltWith:! Smalltalk globals removeClassNamed: #SlotClassBuilderSilentTest! SlotClassBuilderAnnouncementsTest removeSelector: #testClassRecategorizedAnnounced! SlotClassBuilderAnnouncementsTest removeSelector: #testClassModifiedAnnouncedOnlyOnce! SlotClassBuilderAnnouncementsTest removeSelector: #testClassModifiedAnnounced! SlotClassBuilderAnnouncementsTest removeSelector: #testClassFormatChangedAnnounced! SlotClassBuilderAnnouncementsTest removeSelector: #testClassAddedAnnouncedOnlyOnce! SlotClassBuilderAnnouncementsTest removeSelector: #testClassAddedAnnounced! SlotClassBuilderAnnouncementsTest removeSelector: #setUp! SlotClassBuilderAnnouncementsTest removeSelector: #saveAnnouncementOnce:! SlotClassBuilderAnnouncementsTest removeSelector: #saveAnnouncement:! SlotClassBuilderAnnouncementsTest removeSelector: #countAnnouncements:! SlotClassBuilderAnnouncementsTest removeSelector: #assertOnlyOneAnnouncementOf:within:! Smalltalk globals removeClassNamed: #SlotClassBuilderAnnouncementsTest! LayoutWithSlots removeSelector: #forkLayout:! !Trait method! becomeCompact "Make me compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add me in that array - update my format with the index - update my instances " self classBuilder becomeCompact: self! ! !Trait method! becomeCompact "Make me compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add me in that array - update my format with the index - update my instances " self classBuilder becomeCompact: self! ! !Trait method! becomeCompactSimplyAt: index "The same as #becomeCompact but without updating my instances." self classBuilder becomeCompact: self simplyAt: index! ! !Trait method! becomeCompactSimplyAt: index "The same as #becomeCompact but without updating my instances." self classBuilder becomeCompact: self simplyAt: index! ! !Trait method! becomeUncompact "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." self classBuilder becomeUncompact: self! ! !Trait method! becomeUncompact "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." self classBuilder becomeUncompact: self! ! "ClassOrganizer-Core"! "ClassOrganizer-Tests"! "Kernel"! "NewClassOrganizer"! "Slot"! "SlotTests"! "System-Support"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----an Array(9 August 2013 3:53:57 pm) Pharo.image priorSource: 14930468! ----STARTUP----an Array(9 August 2013 4:06:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 August 2013 4:06:10 pm) Pharo-30329.image priorSource: 15044875! ----STARTUP----an Array(12 August 2013 10:32:41 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/12/2013 10:28' prior: 48485205! commentForCurrentUpdate ^ '- Issue 11223 Blockclosure has no comment https://pharo.fogbugz.com/default.asp?11223 - Issue 11400 printOn: protocol inconsistencies https://pharo.fogbugz.com/default.asp?11400 - 11398 remove dps* from Object https://pharo.fogbugz.com/default.asp?11398 - 11314 allow one to disable keymappings for a single instance https://pharo.fogbugz.com/default.asp?11314'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/12/2013 10:29'! script122 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-MarcusDenker.10.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-EstebanLorenzano.162.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-EstebanLorenzano.619.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.305.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1557.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-MarcusDenker.16.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.70.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.508.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.116.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-MarcusDenker.52.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-EstebanLorenzano.105.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-MarcusDenker.19.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.110.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.55.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.223.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-EstebanLorenzano.49.mcz System-Changes-StephaneDucasse.228.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-EstebanLorenzano.12.mcz System-Support-EstebanLorenzano.896.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.606.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.105.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/12/2013 10:29'! update30330 "self new update30330" self withUpdateLog: '- Issue 11223 Blockclosure has no comment https://pharo.fogbugz.com/default.asp?11223 - Issue 11400 printOn: protocol inconsistencies https://pharo.fogbugz.com/default.asp?11400 - 11398 remove dps* from Object https://pharo.fogbugz.com/default.asp?11398 - 11314 allow one to disable keymappings for a single instance https://pharo.fogbugz.com/default.asp?11314'. self loadTogether: self script122 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure commentStamp: '' prior: 42140236! I contain a sequence of operations. I am defined by Smalltalk expressions inside square brackets. I permit to defer the enclosed operations until I execute a variant of #value. I can have my own arguments and temporaries as a regular method, but I am also able to use external variables: my enclosing method or block temporaries, arguments and receiver. examples : [ 1 + 2 ] value [ :arg | | temp | temp := arg. temp ] value: 5 [ ^ 5 ] value My return value corresponds to my final expression. A non local return (^) has the same effect as if I did not exist: it returns from my enclosing method, even if I'm nested in other blocks. Implementation: Instance variables: outerContext context that defined me startpc: (pc = program counter) offset of my first bytecode instruction in the compiledMethod bytecode numArgs: my number of arguments I am created at runtime through a special bytecode: closureNumCopied: x numArgs: y bytes z1 to z2 On creation, the currently executed context is set to my outerContext, z1 is set as my startpc and y is set as my numArgs. After my creation, the current execution flow jumps to my last bytecode, z2, to skip the execution of my bytecode which is deferred until I execute a variant of #value. I am executed when I receive a variant of the message value. This message creates a new context, a block context , which reference me in its variable closureOrNil. This new context executes my bytecode, which correspond to a subset of the bytecode of my enclosing method, starting at startpc and ending in blockReturn/return bytecode. Accessing variables of the my enclosing context is different depending on variables because of various optimizations: - self: I access the receiver of my enclosing method by accessing my context's receiver, which is always set to the enclosing method receiver. - copied variables: If I read a variable from an outerContext but I don't write into it and the variable is not modified after the BlockClosure creation, then the variable is copied in the blockClosure to be more efficient. - full variable: If I access and edit a variable from an outerContext, then the variable is stored in an external heap allocated array (named tempVector). The tempVector is known by the method and the block so they can both read and write these variables. Optimized block closures: Common blocks (2/3 of the blocks) are optimized directly in the compiler and have special behaviors. These blocks are the arguments/receiver of control structures: #ifNil:, #ifNotNil:, #ifTrue:, #ifFalse:, #whileTrue:, #whileFalse:, #to:do:, #to:by:do: . ! !InstructionStream commentStamp: '' prior: 42360288! Instance variables: sender: context that invoked this context pc: (pc = program counter) offset of the bytecode instruction currently executed My instances can interpret the byte-encoded Smalltalk instruction set. They maintain a program counter (pc) for streaming through CompiledMethods. My subclasses are Contexts, which inherit this capability. They store the return pointer in the instance variable sender, and the current position in their method in the instance variable pc. For other users, sender can hold a method to be similarly interpreted. The unclean re-use of sender to hold the method was to avoid a trivial subclass for the stand-alone scanning function.! !ContextPart commentStamp: '' prior: 42206037! Instance variables: stackp: amount of stack that is occupied To the instruction parsing ability of InstructionStream I add the actual semantics for execution. The execution state is stored in the indexable fields of my subclasses. This includes temporary variables and a stack of values used in evaluating expressions. The actual semantics of execution can be found in my category "system simulation" and "instruction decode". These methods exactly parallel the operation of the Smalltalk machine itself. The simulator is a group of my methods that do what the Smalltalk interpreter does: execute Smalltalk bytecodes. By adding code to the simulator, you may take statistics on the running of Smalltalk methods. For example, Transcript show: (ContextPart runSimulated: [3 factorial]) printString. --------------------- A mechanism for registering a custom primitive simulators added. To register own simulator use: #simulatePrimitiveNumber: num with: simulator for numbered primitives , and #simulatePrimitive: primName module: moduleName with: simulator for named primitives. During (re)initialization, a ContextPart class sends a #registerPrimitiveSimulators to all classes in system, which implementing it (but not to implementor's subclasses). This can be used to make sure that your custom simulator is present. Hence, it is recommended to place registration code in #registerPrimitiveSimulators implementation for one of your classes. In order to make sure that simulator(s) registered during package loading, make sure that one of your classes registering them (via class initialization mechanism). A simulator can be any object which implements the: #simulatePrimitiveFor:receiver:arguments:context: and should simulate the invocation of corresponding primitive. If simulated primitive fails, a simulator should answer PrimitiveFailToken. If primitive succeeds, it should answer a primitive return value. ! !MethodContext commentStamp: '' prior: 42431483! Instance variables: receiver: (self) closureOrNil: nil if I'm a method context the blockClosure being executed if I'm a block context method method being executed if I'm a method context method holding the block if I'm a block context variable fields: temporary variables (including arguments) My instances hold all the dynamic state associated with the execution of either a method activation resulting from a message send or a block activation resulting from a block evaluation. MethodContexts, though normal in their variable size, are actually only used in two sizes, small and large, which are determined by the temporary space required by the method being executed. MethodContexts must only be created using the method newForMethod:. Note that it is impossible to determine the real object size of a MethodContext except by asking for the frameSize of its method. Any fields above the stack pointer (stackp) are truly invisible -- even (and especially!!) to the garbage collector. Any store into stackp other than by the primitive method stackp: is potentially fatal.! !CompoundTextConverterState methodsFor: 'printing' stamp: 'yo 11/4/2002 12:31' prior: 20068876! printOn: aStream aStream nextPut: $(; nextPutAll: g0Size printString; space; nextPutAll: g1Size printString; space; nextPutAll: g0Leading printString; space; nextPutAll: g1Leading printString; space; nextPutAll: charSize printString; space; nextPutAll: streamPosition printString. aStream nextPut: $). ! ! !TextFontChange methodsFor: 'printing' stamp: '' prior: 52697451! printOn: strm super printOn: strm. strm nextPutAll: ' font: '; print: fontNumber! ! !FilePath methodsFor: 'printing' stamp: 'yo 12/19/2003 21:07' prior: 21934848! printOn: aStream aStream nextPutAll: 'FilePath('''. aStream nextPutAll: squeakPathName. aStream nextPutAll: ''')'. ! ! !TextFontReference methodsFor: 'printing' stamp: 'nk 9/3/2004 15:24' prior: 52701609! printOn: aStream aStream nextPutAll: 'a TextFontReference('; print: font; nextPut: $)! ! !MouseClickState methodsFor: 'printing' stamp: 'nk 7/26/2004 09:13' prior: 27192459! printOn: aStream super printOn: aStream. aStream nextPut: $[; print: clickState; nextPut: $] ! ! !TimeZone methodsFor: 'printing' stamp: 'brp 9/4/2003 06:37' prior: 53208238! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self abbreviation; nextPut: $).! ! !SugsSuggestion methodsFor: 'printing' stamp: 'GiselaDecuzzi 4/24/2013 14:34' prior: 35740326! printOn: aStream aStream nextPutAll: 'aSugsSuggestion ('; nextPutAll: self label; nextPutAll: ')'.! ! !StrikeFont methodsFor: 'printing' stamp: 'sma 6/1/2000 09:32' prior: 50958098! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self name; space; print: self height; nextPut: $)! ! !Week methodsFor: 'printing' stamp: 'brp 5/13/2003 09:37' prior: 54849664! printOn: aStream aStream nextPutAll: 'a Week starting: '. self start printOn: aStream. ! ! !Duration methodsFor: 'printing' stamp: 'CamilloBruni 5/26/2012 13:09' prior: 21038884! printOn: aStream "Format as per ANSI 5.8.2.16: [-]D:HH:MM:SS[.S]" | d h m s n | d := self days abs. h := self hours abs. m := self minutes abs. s := self seconds abs truncated. n := self nanoSeconds abs. self negative ifTrue: [ aStream nextPut: $- ]. d printOn: aStream. aStream nextPut: $:. h < 10 ifTrue: [ aStream nextPut: $0. ]. h printOn: aStream. aStream nextPut: $:. m < 10 ifTrue: [ aStream nextPut: $0. ]. m printOn: aStream. aStream nextPut: $:. s < 10 ifTrue: [ aStream nextPut: $0. ]. s printOn: aStream. n = 0 ifFalse: [ | z ps | aStream nextPut: $.. ps := n printString padLeftTo: 9 with: $0. z := ps findLast: [ :c | c asciiValue > $0 asciiValue ]. ps from: 1 to: z do: [ :c | aStream nextPut: c ] ]. ! ! !TextStyle methodsFor: 'printing' stamp: 'MarcusDenker 7/9/2012 21:44' prior: 52856948! printOn: aStream super printOn: aStream. fontArray first isFontSet ifTrue: [ aStream space; nextPutAll: self defaultFont familySizeFace first; nextPutAll: '(FontSet)' ] ifFalse: [ aStream space; nextPutAll: self defaultFont familySizeFace first ] ! ! !Form methodsFor: 'printing' stamp: 'di 3/15/1999 14:50' prior: 22494857! printOn: aStream aStream nextPutAll: self class name; nextPut: $(; print: width; nextPut: $x; print: height; nextPut: $x; print: depth; nextPut: $). ! ! !Locale methodsFor: 'printing' stamp: 'tak 8/4/2005 15:18' prior: 24551525! printOn: aStream super printOn: aStream. aStream nextPutAll: '(' , id printString , ')'! ! !ChangeSet methodsFor: 'printing' stamp: 'StephaneDucasse 5/13/2010 11:33' prior: 18804209! printOn: aStream super printOn: aStream. aStream nextPutAll: ' named ', self name! ! !FontSubstitutionDuringLoading methodsFor: 'printing' stamp: 'nk 11/8/2004 16:55' prior: 22444657! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: familyName; nextPut: $-; print: pixelSize; nextPut: $).! ! !TimeStamp methodsFor: 'printing' stamp: 'brp 7/27/2003 17:17' prior: 53184924! printOn: aStream "Print receiver's date and time on aStream." aStream nextPutAll: self date printString; space; nextPutAll: self time printString.! ! !MailMessage methodsFor: 'printing' stamp: 'ls 11/11/2001 13:27' prior: 25317640! printOn: aStream "For text parts with no filename show: 'text/plain: first line of text...' for attachments/filenamed parts show: 'attachment: filename.ext'" | name | aStream nextPutAll: ((name := self name) ifNil: ['Text: ' , self excerpt] ifNotNil: ['File: ' , name])! ! !QSystemTally methodsFor: 'printing' stamp: 'MarcusDenker 4/21/2013 18:02' prior: 38598631! printOn: aStream aStream print: class; nextPutAll: '>>'; print: (method ifNotNil:[method selector]). aStream nextPutAll: ' -- '; print: tally.! ! !KMKeymap methodsFor: 'printing' stamp: 'GuillermoPolito 5/31/2011 12:50' prior: 24147528! printOn: aStream aStream nextPutAll: self name printString; nextPutAll: ' on '; nextPutAll: self shortcut printString; nextPutAll: ' do ' ; nextPutAll: self action printString; cr. ! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 8/6/2013 16:23' prior: 26583815! allowsKeymapping ^ self valueOfProperty: #allowsKeymapping ifAbsent: [ true]! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 8/6/2013 16:23'! allowsKeymapping: aBoolean ^ self setProperty: #allowsKeymapping toValue: aBoolean! ! !NullStream methodsFor: 'printing' stamp: 'MilanMimica 11/4/2011 21:22' prior: 28480978! printOn: aStream aStream nextPutAll: 'a '; nextPutAll: self class name.! ! !MouseWheelEvent methodsFor: 'printing' stamp: 'GaryChambers 9/5/2011 13:44' prior: 27210709! printOn: aStream aStream nextPut: $[. aStream nextPutAll: self cursorPoint printString; space. aStream nextPutAll: type; space. aStream nextPutAll: self direction; space. aStream nextPutAll: self modifierString. aStream nextPutAll: self buttonString. aStream nextPutAll: timeStamp printString; space. aStream nextPutAll: self windowIndex printString. aStream nextPut: $].! ! !BalloonBezierSimulation methodsFor: 'printing' stamp: 'ar 10/30/1998 00:35' prior: 17886288! printOn: aStream aStream nextPutAll: self class name; nextPut:$(; print: start; nextPutAll:' - '; print: via; nextPutAll:' - '; print: end; nextPut:$)! ! !OCAbstractVariable methodsFor: 'printing' stamp: 'ajh 2/27/2003 00:38' prior: 34930753! printOn: stream stream nextPutAll: self name! ! !Stopwatch methodsFor: 'printing' stamp: 'brp 9/25/2003 13:25' prior: 50907410! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self state; nextPut: $:; print: self duration; nextPut: $). ! ! !BlockClosure commentStamp: '' prior: 48611162! I contain a sequence of operations. I am defined by Smalltalk expressions inside square brackets. I permit to defer the enclosed operations until I execute a variant of #value. I can have my own arguments and temporaries as a regular method, but I am also able to use external variables: my enclosing method or block temporaries, arguments and receiver. examples : [ 1 + 2 ] value [ :arg | | temp | temp := arg. temp ] value: 5 [ ^ 5 ] value My return value corresponds to my final expression. A non local return (^) has the same effect as if I did not exist: it returns from my enclosing method, even if I'm nested in other blocks. Implementation: Instance variables: outerContext context that defined me startpc: (pc = program counter) offset of my first bytecode instruction in the compiledMethod bytecode numArgs: my number of arguments I am created at runtime through a special bytecode: closureNumCopied: x numArgs: y bytes z1 to z2 On creation, the currently executed context is set to my outerContext, z1 is set as my startpc and y is set as my numArgs. After my creation, the current execution flow jumps to my last bytecode, z2, to skip the execution of my bytecode which is deferred until I execute a variant of #value. I am executed when I receive a variant of the message value. This message creates a new context, a block context , which reference me in its variable closureOrNil. This new context executes my bytecode, which correspond to a subset of the bytecode of my enclosing method, starting at startpc and ending in blockReturn/return bytecode. Accessing variables of the my enclosing context is different depending on variables because of various optimizations: - self: I access the receiver of my enclosing method by accessing my context's receiver, which is always set to the enclosing method receiver. - copied variables: If I read a variable from an outerContext but I don't write into it and the variable is not modified after the BlockClosure creation, then the variable is copied in the blockClosure to be more efficient. - full variable: If I access and edit a variable from an outerContext, then the variable is stored in an external heap allocated array (named tempVector). The tempVector is known by the method and the block so they can both read and write these variables. Optimized block closures: Common blocks (2/3 of the blocks) are optimized directly in the compiler and have special behaviors. These blocks are the arguments/receiver of control structures: #ifNil:, #ifNotNil:, #ifTrue:, #ifFalse:, #whileTrue:, #whileFalse:, #to:do:, #to:by:do: . ! !InstructionStream commentStamp: '' prior: 48613898! Instance variables: sender: context that invoked this context pc: (pc = program counter) offset of the bytecode instruction currently executed My instances can interpret the byte-encoded Smalltalk instruction set. They maintain a program counter (pc) for streaming through CompiledMethods. My subclasses are Contexts, which inherit this capability. They store the return pointer in the instance variable sender, and the current position in their method in the instance variable pc. For other users, sender can hold a method to be similarly interpreted. The unclean re-use of sender to hold the method was to avoid a trivial subclass for the stand-alone scanning function.! !ContextPart commentStamp: '' prior: 48614662! Instance variables: stackp: amount of stack that is occupied To the instruction parsing ability of InstructionStream I add the actual semantics for execution. The execution state is stored in the indexable fields of my subclasses. This includes temporary variables and a stack of values used in evaluating expressions. The actual semantics of execution can be found in my category "system simulation" and "instruction decode". These methods exactly parallel the operation of the Smalltalk machine itself. The simulator is a group of my methods that do what the Smalltalk interpreter does: execute Smalltalk bytecodes. By adding code to the simulator, you may take statistics on the running of Smalltalk methods. For example, Transcript show: (ContextPart runSimulated: [3 factorial]) printString. --------------------- A mechanism for registering a custom primitive simulators added. To register own simulator use: #simulatePrimitiveNumber: num with: simulator for numbered primitives , and #simulatePrimitive: primName module: moduleName with: simulator for named primitives. During (re)initialization, a ContextPart class sends a #registerPrimitiveSimulators to all classes in system, which implementing it (but not to implementor's subclasses). This can be used to make sure that your custom simulator is present. Hence, it is recommended to place registration code in #registerPrimitiveSimulators implementation for one of your classes. In order to make sure that simulator(s) registered during package loading, make sure that one of your classes registering them (via class initialization mechanism). A simulator can be any object which implements the: #simulatePrimitiveFor:receiver:arguments:context: and should simulate the invocation of corresponding primitive. If simulated primitive fails, a simulator should answer PrimitiveFailToken. If primitive succeeds, it should answer a primitive return value. ! !MethodContext commentStamp: '' prior: 48616669! Instance variables: receiver: (self) closureOrNil: nil if I'm a method context the blockClosure being executed if I'm a block context method method being executed if I'm a method context method holding the block if I'm a block context variable fields: temporary variables (including arguments) My instances hold all the dynamic state associated with the execution of either a method activation resulting from a message send or a block activation resulting from a block evaluation. MethodContexts, though normal in their variable size, are actually only used in two sizes, small and large, which are determined by the temporary space required by the method being executed. MethodContexts must only be created using the method newForMethod:. Note that it is impossible to determine the real object size of a MethodContext except by asking for the frameSize of its method. Any fields above the stack pointer (stackp) are truly invisible -- even (and especially!!) to the garbage collector. Any store into stackp other than by the primitive method stackp: is potentially fatal.! !StandardFileStream methodsFor: 'printing' stamp: 'CamilloBruni 8/1/2012 16:13' prior: 50794057! printOn: aStream "Put a printed version of the receiver onto aStream." aStream nextPutAll: self class name; nextPutAll: ': '; print: name! ! !Month methodsFor: 'printing' stamp: 'brp 5/13/2003 09:05' prior: 26569322! printOn: aStream aStream nextPutAll: self monthName, ' ', self year printString.! ! !BindingsHolder methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 12/12/2012 15:22' prior: 18128417! printOn: s super printOn: s. s nextPutAll: '('. self bindings printOn: s. s nextPutAll: ')'! ! Object removeSelector: #dpsTrace:levels:withContext:! Object removeSelector: #dpsTrace:levels:! Object removeSelector: #dpsTrace:! "Balloon"! "Collections-Streams"! "Files"! "Graphics-Display Objects"! "Graphics-Fonts"! "Kernel"! "Keymapping-Core"! "Morphic-Base"! "Multilingual-TextConversion"! "Network-Mail"! "OpalCompiler-Core"! "SmartSuggestions"! "Spec-Bindings"! "System-Changes"! "System-Localization"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 August 2013 10:33:03 am) Pharo.image priorSource: 15045076! ----STARTUP----an Array(12 August 2013 10:45:29 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 August 2013 10:45:29 am) Pharo-30330.image priorSource: 15077929! ----STARTUP----an Array(12 August 2013 3:54:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/12/2013 15:42' prior: 48599815! commentForCurrentUpdate ^ '- issue 11312 Kernel packages are extending non-kernel packages https://pharo.fogbugz.com/default.asp?11312 - issue 11182 Button should have default state to false https://pharo.fogbugz.com/default.asp?11182 - issue 10016 Pharo and scaled decimals https://pharo.fogbugz.com/default.asp?10016 - issue 10427 Shortcuts like Character end ctrl or Character home ctrl not work https://pharo.fogbugz.com/default.asp?10427 - issue 11260 ChangeSet: class var PreviousSet is not needed https://pharo.fogbugz.com/default.asp?11260 - issue 11404 Analyze menu does not work on class side a part. https://pharo.fogbugz.com/default.asp?11404 - issue 11401 Spec inspector bug with bags https://pharo.fogbugz.com/default.asp?11401 - issue 11276 New inspector toolbar https://pharo.fogbugz.com/default.asp?11276 - issue 11399 Better enumeration API for Bag https://pharo.fogbugz.com/default.asp?11399 - issue 11402 SoundSystem bug https://pharo.fogbugz.com/default.asp?11402'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/12/2013 15:43'! script123 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.163.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.306.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1558.mcz KernelTests-EstebanLorenzano.540.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.71.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.509.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.116.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-StephaneDucasse.54.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-StephaneDucasse.106.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.21.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.57.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.224.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.897.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.607.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.107.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/12/2013 15:50'! update30331 "self new update30331" self withUpdateLog: '- issue 11312 Kernel packages are extending non-kernel packages https://pharo.fogbugz.com/default.asp?11312 - issue 11182 Button should have default state to false https://pharo.fogbugz.com/default.asp?11182 - issue 10016 Pharo and scaled decimals https://pharo.fogbugz.com/default.asp?10016 - issue 10427 Shortcuts like Character end ctrl or Character home ctrl not work https://pharo.fogbugz.com/default.asp?10427 - issue 11260 ChangeSet: class var PreviousSet is not needed https://pharo.fogbugz.com/default.asp?11260 - issue 11404 Analyze menu does not work on class side a part. https://pharo.fogbugz.com/default.asp?11404 - issue 11401 Spec inspector bug with bags https://pharo.fogbugz.com/default.asp?11401 - issue 11276 New inspector toolbar https://pharo.fogbugz.com/default.asp?11276 - issue 11399 Better enumeration API for Bag https://pharo.fogbugz.com/default.asp?11399 - issue 11402 SoundSystem bug https://pharo.fogbugz.com/default.asp?11402'. self loadTogether: self script123 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeBagInspector commentStamp: '' prior: 0! Specialized version of inspector showing occurrences of items of the bag! !EyeInspector commentStamp: '' prior: 42261631! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeInspectorToolBar commentStamp: '' prior: 0! Toolbar to explore previous or next inpected elements! !BagEyeElement commentStamp: '' prior: 0! I am an eye element for bags, showing appropriate thing with occurrences! !ChangeSet commentStamp: '' prior: 46243005! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes.! !AppRegistry class methodsFor: 'ui' stamp: 'BenjaminVanRyseghem 2/22/2012 14:41' prior: 17584895! chooseAppWithUI default := UIManager default chooseFrom: (self registeredClasses collect: [:c | c name]) values: self registeredClasses title: ('Which ' , self appName, ' would you prefer?') translated. default ifNil: [default := self registeredClasses first]. WorldState defaultWorldMenu. ^ default.! ! !EyeBagInspector commentStamp: '' prior: 48645457! Specialized version of inspector showing occurrences of items of the bag! !EyeBagInspector methodsFor: 'list' stamp: 'ClementBera 8/12/2013 10:35'! addVariableFields: elements self sortedKeys do: [ :key | elements add: (BagEyeElement host: self object index: key)]! ! !EyeBagInspector methodsFor: 'list' stamp: 'ClementBera 8/12/2013 10:33'! sortedKeys ^ [ [ self object valuesAndCounts keys sorted ] on: Error do: [ "case of non sortable keys" self object valuesAndCounts keys ] ] on: Error do: [ #() ]! ! !StringTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:34' prior: 38837138! testAsClass self assert: 'String' asClass equals: String! ! !StringTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:36' prior: 38837284! testAsClassIfAbsent self assert: ('String' asClassIfAbsent: [ self fail ]) equals: String. '+' asClassIfAbsent: [ ^ self "success" ]. self fail.! ! !StringTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:56' prior: 38837523! testAsClassIfPresent 'String' asClassIfPresent: [ :class | self assert: class equals: String ]. '+' asClassIfPresent: [ ^ self fail ].! ! !EyeInspector commentStamp: '' prior: 48645591! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeInspector class methodsFor: 'spec' stamp: 'ErwanDouaille 7/29/2013 15:30' prior: 38712189! inspectorSpec ^ SpecLayout composed newColumn: [ :c | c add: #toolbar height: 18; newRow: [ :r | r newColumn: #list right: 0.6; addSplitter; newColumn: #description left: 0.4 ] bottom: 0.3; addHSplitter; newRow: #text top: 0.7]; yourself! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ErwanDouaille 7/29/2013 15:44' prior: 45131898! initializeWidgets self instantiateModels: #( toolbar EyeInspectorToolBar list NewListModel text TextModel description TextModel ). text aboutToStyle: true. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'ErwanDouaille 7/29/2013 15:28'! toolbar ^ toolbar! ! !EyeInspector methodsFor: 'accessing' stamp: 'ErwanDouaille 7/29/2013 15:29'! toolbar: anObject toolbar := anObject ! ! !EyeInspectorToolBar commentStamp: '' prior: 48645899! Toolbar to explore previous or next inpected elements! !EyeInspectorToolBar class methodsFor: 'specs' stamp: 'ErwanDouaille 7/29/2013 15:27'! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #previousButton; add: #nextButton ]; yourself.! ! !EyeInspectorToolBar methodsFor: 'initialization' stamp: 'ErwanDouaille 7/29/2013 15:24'! initializeWidgets "nothing here, done when calling load, new, saveButton, update .."! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'ErwanDouaille 7/29/2013 15:47'! inspectorWrapper ^ self owner owner! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'ErwanDouaille 7/29/2013 15:46'! nextButton nextButton ifNil: [ nextButton := self instantiate: ButtonModel. nextButton label: '>'. nextButton action: [ self inspectorWrapper inspectNext ]]. ^ nextButton! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'ErwanDouaille 7/29/2013 15:47'! previousButton previousButton ifNil: [ previousButton := self instantiate: ButtonModel. previousButton label: '<'. previousButton action: [ self inspectorWrapper inspectPrevious ] ]. ^ previousButton! ! !FloatArrayTest methodsFor: 'tests - arithmetic' stamp: 'nice 11/23/2007 23:53' prior: 22248154! testArithmeticCoercion "This test is related to http://bugs.squeak.org/view.php?id=6782" self should: [3.0 / (FloatArray with: 2.0) = (FloatArray with: 1.5)]. self should: [3.0 * (FloatArray with: 2.0) = (FloatArray with: 6.0)]. self should: [3.0 + (FloatArray with: 2.0) = (FloatArray with: 5.0)]. self should: [3.0 - (FloatArray with: 2.0) = (FloatArray with: 1.0)].! ! !PackageInfo methodsFor: 'Ring extensions' stamp: 'VeronicaUquillas 7/28/2011 16:33' prior: 29002165! asRingDefinition "Creates a RGPackage containing all its classes and methods. Including extension methods" | rgPackage rgClasses rgMethods rgCls | self flag: 'Should be removed when RPackage is integrated'. rgPackage := RGFactory current createPackageNamed: self packageName. rgClasses := self classes collect:[ :cls| cls asRingDefinition ]. rgMethods := self methods collect: [ :mth| mth asRingDefinition ]. rgClasses do:[ :cls| rgPackage addClass: cls ]. rgClasses do:[ :cls| | scls | scls:= rgPackage classOrTraitNamed: cls superclassName. scls notNil ifTrue:[ cls superclass: scls. cls theMetaClass superclass: scls theMetaClass ] ]. rgMethods do:[ :mth | rgCls:= rgPackage classOrTraitNamed: mth parentName. rgCls notNil ifTrue: [ mth isExtension: false. rgCls addMethod: mth ] ifFalse:[ mth isExtension: true ]. rgPackage addMethod: mth ]. ^rgPackage! ! !SymbolTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:34' prior: 38835267! testAsClass self assert: #Symbol asClass equals: Symbol! ! !SymbolTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:56' prior: 38835412! testAsClassIfAbsent self assert: (#Symbol asClassIfAbsent: [ self fail ]) equals: Symbol. #+ asClassIfAbsent: [ ^ self "success" ]. self fail.! ! !SymbolTest methodsFor: 'tests - as class' stamp: 'CamilloBruni 5/8/2013 11:57' prior: 38835650! testAsClassIfPresent #Symbol asClassIfPresent: [ :class | self assert: class equals: Symbol ]. #'+' asClassIfPresent: [ ^ self fail ].! ! !EyeDictionaryInspector methodsFor: 'accessing' stamp: 'ClementBera 8/12/2013 10:33' prior: 41585062! sortedKeys ^ [ [ self object keys sorted ] on: Error do: [ "case of non sortable keys" self object keys ] ] on: Error do: [ #() ]! ! !ButtonModel methodsFor: 'initialization' stamp: 'StephaneDucasse 8/12/2013 15:18' prior: 48014551! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := false asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !KeyboardEvent methodsFor: 'testing' stamp: 'DenisKudryashov 7/20/2013 17:29'! hasSpecialCTRLKeyValue " 4 - Character end 1 - Character home " ^ self controlKeyPressed and: [ keyValue <= 26 & (keyValue ~= 4) & (keyValue ~= 1) ]! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'DenisKudryashov 7/20/2013 17:28' prior: 46010452! modifiedCharacter self flag: #hack. "Hack me. When Ctrl is pressed, the key ascii value is not right and we have to do something ugly" ^(self hasSpecialCTRLKeyValue and: [ (#(MacOSX Windows) includes: Smalltalk os current platformFamily) ]) ifTrue: [ (self keyValue + $a asciiValue - 1) asCharacter ] ifFalse: [ self keyCharacter ]! ! !KeyboardEvent methodsFor: 'printing' stamp: 'DenisKudryashov 7/20/2013 17:32' prior: 24213381! printKeyStringOn: aStream "Print a readable string representing the receiver on a given stream" | kc inBrackets firstBracket keyString | kc := self keyCharacter. inBrackets := false. firstBracket := [ inBrackets ifFalse: [ aStream nextPut: $<. inBrackets := true ]]. self controlKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Ctrl-' ]. self commandKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Cmd-' ]. (buttons anyMask: 32) ifTrue: [ firstBracket value. aStream nextPutAll: 'Opt-' ]. (self shiftPressed and: [ keyValue between: 1 and: 31 ]) ifTrue: [ firstBracket value. aStream nextPutAll: 'Shift-' ]. self hasSpecialCTRLKeyValue ifTrue: [aStream nextPut: (keyValue + $a asciiValue - 1) asCharacter] ifFalse: [keyString := (kc caseOf: { [ Character space ] -> [ ' ' ]. [ Character tab ] -> [ 'tab' ]. [ Character cr ] -> [ 'cr' ]. [ Character lf ] -> [ 'lf' ]. [ Character enter ] -> [ 'enter' ]. [ Character backspace ] -> [ 'backspace' ]. [ Character delete ] -> [ 'delete' ]. [ Character escape ] -> [ 'escape' ]. [ Character arrowDown ] -> [ 'down' ]. [ Character arrowUp ] -> [ 'up' ]. [ Character arrowLeft ] -> [ 'left' ]. [ Character arrowRight ] -> [ 'right' ]. [ Character end ] -> [ 'end' ]. [ Character home ] -> [ 'home' ]. [ Character pageDown ] -> [ 'pageDown' ]. [ Character pageUp ] -> [ 'pageUp' ]. [ Character euro ] -> [ 'euro' ]. [ Character insert ] -> [ 'insert' ]. } otherwise: [ String with: kc ]). keyString size > 1 ifTrue: [ firstBracket value ]. aStream nextPutAll: keyString]. inBrackets ifTrue: [aStream nextPut: $> ]! ! !ReleaseTest methodsFor: 'testing' stamp: 'PavelKrivanek 8/6/2013 14:01'! testKernelExtensions "test if kernel packages have extensions in non-kernel classes" | kernelClasses extendedClasses | kernelClasses := Smalltalk kernelPackageNames gather: [ :packageName | (RPackageSet named: packageName) definedClasses ]. extendedClasses := Smalltalk kernelPackageNames gather:[ :packageName | (RPackageSet named: packageName) extensionClasses ]. self assert: (extendedClasses copyWithoutAll: (kernelClasses, (kernelClasses collect:[:c | c class]))) isEmpty ! ! !SoundSystem class methodsFor: 'current ' stamp: 'StephaneDucasse 8/12/2013 13:10' prior: 46694218! current: aSoundSystem Current ifNotNil: [Current deactivate]. Current := aSoundSystem. Current activate.! ! !BagEyeElement commentStamp: '' prior: 48646008! I am an eye element for bags, showing appropriate thing with occurrences! !BagEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/12/2013 10:24'! accessorCode ^ '(self occurrencesOf: ', self label, ')'! ! !BagEyeElement methodsFor: 'actions' stamp: 'ClementBera 8/12/2013 10:36'! save: aValue self host valuesAndCounts at: self index put: aValue! ! !BagEyeElement methodsFor: 'accessing' stamp: 'ClementBera 8/12/2013 10:35'! value ^ self host valuesAndCounts at: self index! ! !ArrayTest methodsFor: 'tests - arithmetic' stamp: 'stephane.ducasse 10/6/2008 16:53' prior: 17617652! testPremultiply self assert: example1 +* #(2 ) = #(2 4 6 8 10 ) ! ! !Bag class methodsFor: '*Spec-Inspector' stamp: 'ClementBera 8/12/2013 10:28'! inspectorClass ^ EyeBagInspector! ! !Bag methodsFor: 'enumerating' stamp: 'StephaneDucasse 8/12/2013 15:39' prior: 17814172! do: aBlock "Evaluate aBlock with each of the receiver's elements as the argument." contents associationsDo: [:assoc | assoc value timesRepeat: [aBlock value: assoc key]]! ! !Bag methodsFor: 'enumerating' stamp: 'StephaneDucasse 8/12/2013 15:38'! doWithOccurrences: aTwoArgBlock "Iterate over the receiver and apply a two argument block on the element and its occurrences." contents associationsDo: [:assoc | aTwoArgBlock value: assoc key value: assoc value ]! ! !Bag methodsFor: 'enumerating' stamp: 'StephaneDucasse 8/12/2013 15:39'! keysAndValuesDo: aTwoArgBlock "Iterate over the receiver and apply a two argument block on the element and its occurrences." contents associationsDo: [:assoc | aTwoArgBlock value: assoc key value: assoc value ]! ! !ChangeSet commentStamp: '' prior: 48646139! ChangeSets keep track of the changes made to a system, so they can be written on a file as source code (a "fileOut"). --- preamble and postscript: two strings that serve as prefix (useful for documentation) and suffix (useful for doits) to the fileout of the changeSet. changeRecords - Dictionary {class name -> a ClassChangeRecord}. These classChangeRecords (qv) remember all of the system changes.! !ChangeSet class methodsFor: 'services' stamp: 'StephaneDucasse 8/12/2013 15:25' prior: 46243507! newChangesFromStream: aStream named: aName "File in the code from the stream into a new change set whose name is derived from aName. Leave the 'current change set' unchanged. Return the new change set or nil on failure." | oldChanges newName newSet | oldChanges := ChangeSet current. newName := aName withoutPeriodSuffix. newSet := self basicNewChangeSet: newName. [ | newStream | newSet ifNotNil:[ (aStream respondsTo: #converter:) ifFalse: [ newStream := MultiByteBinaryOrTextStream with: (aStream contentsOfEntireFile). newStream reset.] ifTrue: [newStream := aStream]. self newChanges: newSet. newStream setConverterForCode. CodeImporter evaluateReadStream: newStream readStream]. aStream close] ensure: [self newChanges: oldChanges]. ^ newSet! ! !MIMEDocument methodsFor: 'files' stamp: 'MarcusDenker 3/21/2011 14:34' prior: 25223790! saveToFile: anAbsolutePathString FileStream forceNewFileNamed: anAbsolutePathString do: [ :str | str binary. str nextPutAll: (self contents) ].! ! !SqNumberParser methodsFor: 'parsing-private' stamp: 'MarcusDenker 7/24/2013 09:08' prior: 50766073! readScale "read the scale if any (stored in instVar). Answer true if found, answer false if none. If scale letter is not followed by a digit, this is not considered as an error. Scales are always read in base 10, though i do not see why..." scale := 0. sourceStream atEnd ifTrue: [ ^ false ]. (sourceStream peekFor: $s) ifFalse: [ ^ false ]. scale := self nextUnsignedIntegerOrNilBase: 10. scale ifNil: [ scale := 0. (sourceStream peek ifNil: [ false ] ifNotNil: [ :nextChar | nextChar isLetter ]) ifTrue: [ sourceStream skip: -1. "ungobble the s" ^ false ] ifFalse: [ ^ true ] ]. ^ true! ! !MatrixTest methodsFor: 'tests - arithmetic' stamp: 'dc 3/3/2007 17:50' prior: 25386665! testMultiply | result | self should: [matrix1 preMultiplyByMatrix: (Matrix new: 3)]raise: Error. result := matrix2 preMultiplyByMatrix: matrix1. self assert: (result at: 1 at: 1) = 15. self assert: (result at: 1 at: 2) = 31. self assert: (result at: 2 at: 1) = 22. self assert: (result at: 2 at: 2) = 46! ! !ClassDescription methodsFor: '*Nautilus' stamp: 'StephaneDucasse 8/12/2013 15:28'! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Inst var references...') action: [target browseInstVarRefs]; parent: #Analyze; order: 0. (aBuilder item: #'Inst var assignments...') action: [target browseInstVarDefs]; parent: #Analyze; order: 100. (aBuilder item: #'Create inst var accessors') action: [target createInstVarAccessors]; parent: #Analyze; enabledBlock: [ target selectedClass instVarNames isEmpty not ]; order: 200; withSeparatorAfter. (aBuilder item: #'Create initializer with inst vars...') action: [ target createInitializerWithInstVars ]; parent: #Analyze; order: 300; enabledBlock: [ target showInstance ]. (aBuilder item: #'Generate initialize method') keyText: 'h, i' if: Nautilus useOldStyleKeys not; keyText: 'I' if: Nautilus useOldStyleKeys; action: [ target generateInitialize ]; parent: #Analyze; order: 350. (aBuilder item: #'Force the generaton of the initialize method') keyText: 'h, k' if: Nautilus useOldStyleKeys not; keyText: 'K' if: Nautilus useOldStyleKeys; action: [ target forceGenerateInitialize ]; parent: #Analyze; order: 375; enabledBlock: [ target showInstance ]; withSeparatorAfter. (aBuilder item: #'Class var refs...') action: [target browseClassVarRefs]; parent: #Analyze; order: 400. (aBuilder item: #'Class refs...') keyText: 'b, N' if: Nautilus useOldStyleKeys not; keyText: 'N' if: Nautilus useOldStyleKeys; action: [target browseClassRefs]; parent: #Analyze; order: 500. (target selectedClass inheritsFrom: SharedPool ) ifTrue: [ (aBuilder item: #'Shared Pool Users') action: [ target systemNavigation browseSharedPoolUsersOf: target selectedClass ]; parent: #Analyze; enabledBlock: [ target enableSingleClassSelection ]; order: 700]. (aBuilder item: #'Unsent methods...') action: [target browseUnusedMethods.]; parent: #Analyze; order: 800. (aBuilder item: #'Unreferenced inst vars...') action: [target showUnreferencedInstVars.]; parent: #Analyze; order: 900. (aBuilder item: #'Unreferenced class vars...') action: [target showUnreferencedClassVars.]; parent: #Analyze; order: 1000. ! ! !Trait method! buildAnalyzeSubMenu: aBuilder self explicitRequirement. ! ! Class removeSelector: #buildAnalyzeSubMenu:! "Collections-Arithmetic"! "Collections-Unordered"! "CollectionsTests"! "Files"! "Kernel"! "Keymapping-KeyCombinations"! "Morphic-Base"! "Nautilus"! "Network-MIME"! "PackageInfo"! "Ring-Core-Containers"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Widgets"! "System-Applications"! "System-Changes"! "System-Sound"! "System-Support"! "Tests"! "UIManager"! ----End fileIn----! ----QUIT----an Array(12 August 2013 3:55:04 pm) Pharo.image priorSource: 15078134! ----STARTUP----an Array(12 August 2013 4:07:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 August 2013 4:07:17 pm) Pharo-30331.image priorSource: 15110019! ----STARTUP----an Array(13 August 2013 3:36:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/13/2013 15:26' prior: 48632874! commentForCurrentUpdate ^ '- issue 11414 Fixing s1 change parsing https://pharo.fogbugz.com/default.asp?11414 - issue 11409 EyeInspector class-side slot #useAutoRefresh is missing https://pharo.fogbugz.com/default.asp?11409 - issue 11411 Cannot resize inspector window per inspector class https://pharo.fogbugz.com/default.asp?11411 - 11410 failing test (Polymorphism between classes and traits) https://pharo.fogbugz.com/default.asp?11410 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/13/2013 15:26'! script124 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.163.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.306.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1558.mcz KernelTests-StephaneDucasse.543.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.71.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.511.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.119.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-StephaneDucasse.54.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-StephaneDucasse.106.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.21.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.59.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.224.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.897.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.607.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.107.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/13/2013 15:26'! update30332 "self new update30332" self withUpdateLog: '- issue 11414 Fixing s1 change parsing https://pharo.fogbugz.com/default.asp?11414 - issue 11409 EyeInspector class-side slot #useAutoRefresh is missing https://pharo.fogbugz.com/default.asp?11409 - issue 11411 Cannot resize inspector window per inspector class https://pharo.fogbugz.com/default.asp?11411 - 11410 failing test (Polymorphism between classes and traits) https://pharo.fogbugz.com/default.asp?11410 '. self loadTogether: self script124 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeInspector commentStamp: '' prior: 48648272! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !ClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:17'! instVarRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Add') action: [ target refactor addInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeInstVarFrom: self ]; parent: #'Inst Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownInstVarFrom: self ]; parent: #'Inst Var Refactoring'; order: 600.! ! !ClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:25'! methodRefactoring: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Swap') action: [ target refactor swapMethodFor: selectedMethods ]; order: 400; label: (target selectedClass isMeta ifTrue: [ 'Move to instance side' ] ifFalse:[ 'Move to class side']); parent: #'Refactoring'. (aBuilder item: #'Push up') action: [ target refactor pullUpMethodsFor: selectedMethods ]; order: 500; parent: #'Refactoring'. (aBuilder item: #'Push down') action: [ target refactor pushDownMethodsFor: selectedMethods ]; order: 600; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !ClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:25'! refactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Refactoring') order: -100. (aBuilder item: #'Rename inst var') action: [ target refactor renameInstVarFrom: self ]; order: -98. (aBuilder item: #'Rename class var') action: [ target refactor renameClassVarFrom: self ]; order: -97. (aBuilder item: #'Code Rewriting') order: 0; parent: #'Refactoring'. (aBuilder item: #'Class Refactoring') order: 100; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Class Var Refactoring') order: 200; parent: #'Refactoring'. (aBuilder item: #'Inst Var Refactoring') order: 300; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 400; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 500; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !ClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:25'! refactoringSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rename...') keyText: 'r, c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClassWithRefactoringEngine: target selectedClass theNonMetaClass ]; parent: #'Class Refactoring'; order: 0. (aBuilder item: #'Remove...') action: [ target removeClassWithRefactoringEngine: target selectedClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); parent: #'Class Refactoring'; order: 100; withSeparatorAfter. (aBuilder item: #'Generate Accessors') keyText: 'h, a' if: Nautilus useOldStyleKeys not; action: [ target refactor generateAccessors ]; parent: #'Class Refactoring'; order: 200. (aBuilder item: #'Generate Superclass...') action: [ target refactor generateSuperClass ]; parent: #'Class Refactoring'; order: 300. (aBuilder item: #'Generate Subclass...') action: [ target refactor generateSubclass ]; parent: #'Class Refactoring'; order: 400. (aBuilder item: #'Realize') action: [ target refactor realizeClass ]; parent: #'Class Refactoring'; order: 500. (aBuilder item: #'Split') action: [ target refactor splitClass: target selectedClass ]; parent: #'Class Refactoring'; order: 600.! ! !ClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:20'! varRefactoringSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Add') action: [ target refactor addClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 0. (aBuilder item: #'Rename') action: [ target refactor renameClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 100. (aBuilder item: #'Remove') action: [ target refactor removeClassVarFrom: self ]; parent: #'Class Var Refactoring'; icon: (Smalltalk ui icons iconNamed: #removeIcon); order: 200; withSeparatorAfter. (aBuilder item: #'Abstract') action: [ target refactor abstractClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 300. (aBuilder item: #'Accessors') action: [ target refactor accessorsClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 400. (aBuilder item: #'Pull up') action: [ target refactor pullUpClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 500. (aBuilder item: #'Push down') action: [ target refactor pushDownClassVarFrom: self ]; parent: #'Class Var Refactoring'; order: 600.! ! !TraitDescription methodsFor: '*Nautilus' stamp: 'ST 8/13/2013 10:33'! buildAnalyzeSubMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Generate initialize method') keyText: 'h, i' if: Nautilus useOldStyleKeys not; keyText: 'I' if: Nautilus useOldStyleKeys; action: [ target generateInitialize ]; parent: #Analyze; order: 350. (aBuilder item: #'Force the generaton of the initialize method') keyText: 'h, k' if: Nautilus useOldStyleKeys not; keyText: 'K' if: Nautilus useOldStyleKeys; action: [ target forceGenerateInitialize ]; parent: #Analyze; order: 375; enabledBlock: [ target showInstance ]; withSeparatorAfter. (target selectedClass inheritsFrom: SharedPool ) ifTrue: [ (aBuilder item: #'Shared Pool Users') action: [ target systemNavigation browseSharedPoolUsersOf: target selectedClass ]; parent: #Analyze; enabledBlock: [ target enableSingleClassSelection ]; order: 700]. (aBuilder item: #'Unsent methods...') action: [target browseUnusedMethods.]; parent: #Analyze; order: 800. ! ! !TraitDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:18'! instVarRefactoring: aBuilder ! ! !TraitDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:26'! methodRefactoring: aBuilder | target selectedMethod selectedMethods | target := aBuilder model. selectedMethod := target selectedMethod. selectedMethods := target selectedMethods. selectedMethod ifNil:[ ^ target ]. (aBuilder item: #'Add a parameter') action: [ target refactor addAParameterFor: selectedMethod ]; order: 50; parent: #'Refactoring'. (aBuilder item: #'Inline parameter') action: [ target refactor inlineParameterFor: selectedMethod ]; order: 100; parent: #'Refactoring'. (aBuilder item: #'Inline target sends') action: [ target refactor inlineAllSendersFor: selectedMethod ]; order: 200; parent: #'Refactoring'. (aBuilder item: #'Move') action: [ target refactor moveMethodFor: selectedMethod ]; order: 300; parent: #'Refactoring'. (aBuilder item: #'Remove') action: [ target refactor removeMethodsFor: selectedMethods ]; order: 700; parent: #'Refactoring'. (aBuilder item: #'Remove parameter') action: [ target refactor removeParameterFor: selectedMethod ]; order: 800; enabledBlock: [ selectedMethods size < 2 ]; parent: #'Refactoring'. (self renameMethodAllItem: aBuilder) order: 850; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 900; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 1000; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !TraitDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:26'! refactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Refactoring') order: -100. (aBuilder item: #'Code Rewriting') order: 0; parent: #'Refactoring'. (aBuilder item: #'Trait Refactoring') order: 100; parent: #'Refactoring'; withSeparatorAfter. (aBuilder item: #'Undo') order: 400; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Refactoring'. (aBuilder item: #'Redo') order: 500; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Refactoring'; withSeparatorAfter.! ! !TraitDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:26'! refactoringSubmenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rename...') keyText: 'r, c' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameClassWithRefactoringEngine: target selectedClass theNonMetaClass ]; parent: #'Trait Refactoring'; order: 0. (aBuilder item: #'Remove...') action: [ target removeClassWithRefactoringEngine: target selectedClasses ]; icon: (Smalltalk ui icons iconNamed: #removeIcon); parent: #'Trait Refactoring'; order: 100; withSeparatorAfter. (aBuilder item: #'Realize') action: [ target refactor realizeClass ]; parent: #'Trait Refactoring'; order: 500.! ! !TraitDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:21'! varRefactoringSubMenu: aBuilder ! ! !TClassDescription methodsFor: '*Nautilus' stamp: 'ST 8/13/2013 10:32'! buildAnalyzeSubMenu: aBuilder self explicitRequirement.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:23'! codeRewritingClass: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:23'! groupRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:17'! instVarRefactoring: aBuilder ^self explicitRequirement.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! methodRefactoring: aBuilder ^self explicitRequirement.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:23'! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! refactoringMenu: aBuilder ^self explicitRequirement.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:23'! refactoringMethod: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! refactoringSubmenu: aBuilder ^self explicitRequirement.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! sourceCodeRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:24'! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'SebastianTleye 8/13/2013 14:21'! varRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'ClementBera 8/13/2013 11:11'! initialExtent ^ self inspector initialExtent ! ! !SqNumberParserTest methodsFor: 'tests - Float' stamp: 'StephaneDucasse 8/13/2013 14:58' prior: 50776176! testFloatReadError "This covers parsing in Number>>readFrom:" | rs num | rs := '1e' readStream. num := SqNumberParser parse: rs. self assert: 1 = num. self assert: rs upToEnd = 'e'. rs := '1s' readStream. num := SqNumberParser parse: rs. self assert: 1 = num. self assert: rs upToEnd = ''. rs := '1.' readStream. num := SqNumberParser parse: rs. self assert: 1 = num. self assert: num isInteger. self assert: rs upToEnd = '.'. rs := '' readStream. self should: [SqNumberParser parse: rs] raise: Error. rs := 'foo' readStream. self should: [SqNumberParser parse: rs] raise: Error. rs := 'radix' readStream. self should: [SqNumberParser parse: rs] raise: Error. rs := '.e0' readStream. self should: [SqNumberParser parse: rs] raise: Error. rs := '-.e0' readStream. self should: [SqNumberParser parse: rs] raise: Error. rs := '--1' readStream. self should: [SqNumberParser parse: rs] raise: Error.! ! !SqNumberParserTest methodsFor: 'tests - Integer' stamp: 'StephaneDucasse 8/13/2013 14:51' prior: 50777924! testIntegerReadFrom "Ensure remaining characters in a stream are not lost when parsing an integer." | rs i s | rs := '123s could be confused with a ScaledDecimal' readStream. i := SqNumberParser parse: rs. self assert: i = 123. s := rs upToEnd. self assert: ' could be confused with a ScaledDecimal' = s. rs := '123.s could be confused with a ScaledDecimal' readStream. i := SqNumberParser parse: rs. self assert: i = 123. s := rs upToEnd. self assert: '.s could be confused with a ScaledDecimal' = s! ! !NumberParsingTest methodsFor: 'tests - Float' stamp: 'StephaneDucasse 8/13/2013 15:02' prior: 28539514! testNumberReadOnlyDigit "This covers parsing in Number>>readFrom:" | rs num | rs := '1e' readStream. num := Number readSmalltalkSyntaxFrom: rs. self assert: 1 = num. self assert: rs upToEnd = 'e'. rs := '1s' readStream. num := Number readSmalltalkSyntaxFrom: rs. self assert: 1 = num. self assert: rs upToEnd = ''. rs := '1.' readStream. num := Number readSmalltalkSyntaxFrom: rs. self assert: 1 = num. self assert: num isInteger. self assert: rs upToEnd = '.'.! ! !EyeInspector commentStamp: '' prior: 48676421! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !Trait method! varRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! Class removeSelector: #varRefactoringSubMenu:! !Trait method! refactoringSubmenu: aBuilder ^self explicitRequirement.! ! Class removeSelector: #refactoringSubmenu:! !Trait method! refactoringMenu: aBuilder ^self explicitRequirement.! ! Class removeSelector: #refactoringMenu:! !Trait method! methodRefactoring: aBuilder ^self explicitRequirement.! ! Class removeSelector: #methodRefactoring:! !Trait method! instVarRefactoring: aBuilder ^self explicitRequirement.! ! Class removeSelector: #instVarRefactoring:! !Trait method! varRefactoringSubMenu: aBuilder ^self explicitRequirement.! ! Trait removeSelector: #varRefactoringSubMenu:! !Trait method! refactoringSubmenu: aBuilder ^self explicitRequirement.! ! Trait removeSelector: #refactoringSubmenu:! !Trait method! refactoringMenu: aBuilder ^self explicitRequirement.! ! Trait removeSelector: #refactoringMenu:! !Trait method! methodRefactoring: aBuilder ^self explicitRequirement.! ! Trait removeSelector: #methodRefactoring:! !Trait method! instVarRefactoring: aBuilder ^self explicitRequirement.! ! Trait removeSelector: #instVarRefactoring:! !Trait method! buildAnalyzeSubMenu: aBuilder self explicitRequirement. ! ! Trait removeSelector: #buildAnalyzeSubMenu:! TClass removeSelector: #varRefactoringSubMenu:! TClass removeSelector: #sourceCodeRefactoringMenu:! TClass removeSelector: #sourceCodeRefactoring:! TClass removeSelector: #renameMethodAllItem:! TClass removeSelector: #refactoringSubmenu:! TClass removeSelector: #refactoringMethod:! TClass removeSelector: #refactoringMenu:! TClass removeSelector: #packageRefactoringMenu:! TClass removeSelector: #methodRefactoring:! TClass removeSelector: #instVarRefactoring:! TClass removeSelector: #groupRefactoring:! TClass removeSelector: #codeRewritingClass:! TClass removeSelector: #buildAnalyzeSubMenu:! !Trait method! codeRewritingClass: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !Trait method! codeRewritingClass: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Code Rewriting'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Code Rewriting'; order: 100. (aBuilder item: #'Type class') action: [ target refactor typeClass ]; parent: #'Code Rewriting'; order: 200; withSeparatorAfter. (aBuilder item: #'Category Regex') action: [ target refactor categoryRegex ]; parent: #'Code Rewriting'; order: 300. (aBuilder item: #'Class Regex') action: [ target refactor classRegex ]; parent: #'Code Rewriting'; order: 400. (aBuilder item: #'Protocol Regex') action: [ target refactor protocolRegex ]; parent: #'Code Rewriting'; order: 500. (aBuilder item: #'Source Regex') action: [ target refactor sourceRegex ]; parent: #'Code Rewriting'; order: 600; withSeparatorAfter.! ! !Trait method! groupRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! groupRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100.! ! !Trait method! refactoringMethod: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !Trait method! refactoringMethod: aBuilder (aBuilder item: #'Refactoring') order: -100. (self renameMethodAllItem: aBuilder) order: -90; withSeparatorAfter! ! !Trait method! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !Trait method! renameMethodAllItem: aBuilder ^ (aBuilder item: #'Rename method (all)') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ | scroll target | target := aBuilder model. scroll := target methodWidget vScrollValue. target refactor renameMethodFor: target selectedMethod originMethod. target methodWidget vScrollValue: scroll ].! ! !Trait method! sourceCodeRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoring: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor createCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 0. (aBuilder item: #'Extract method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 100. (aBuilder item: #'Extract method to component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 200. (aBuilder item: #'Extract to temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor extractToTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 300. (aBuilder item: #'Inline method') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 400. (aBuilder item: #'Inline method from component') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineMethodFromComponentBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 500. (aBuilder item: #'Inline temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor inlineTemporaryBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 600. (aBuilder item: #'Move variable definition') action: [ target okToChange ifFalse: [ ^ target ]. target refactor moveVariableDefinitionBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 700. (aBuilder item: #'Rename temporary') action: [ target okToChange ifFalse: [ ^ target ]. target refactor renameTemporaryNamed: target sourceTextArea selectedContents Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 800. (aBuilder item: #'Split cascade') action: [ target okToChange ifFalse: [ ^ target ]. target refactor splitCascadeBetween: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 900. (aBuilder item: #'Temporary to instvar') action: [ target okToChange ifFalse: [ ^ target ]. target refactor temporaryToInstanceVariableNamed: target sourceTextArea selectedContents asString Between: target sourceTextArea selectionInterval from: target selectedMethod ]; parent: #'Source code refactoring'; order: 1000; withSeparatorAfter. (aBuilder item: #'Undo') order: 1100; label: target refactor undoLabel; action: [ target refactor undoOperation ]; enabled: target refactor undoEnabled; parent: #'Source code refactoring'. (aBuilder item: #'Redo') order: 1200; label: target refactor redoLabel; action: [ target refactor redoOperation ]; enabled: target refactor redoEnabled; parent: #'Source code refactoring'; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! "KernelTests"! "Nautilus"! "NautilusRefactoring"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(13 August 2013 3:36:51 pm) Pharo.image priorSource: 15110222! ----STARTUP----an Array(13 August 2013 3:48:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 August 2013 3:48:58 pm) Pharo-30332.image priorSource: 15159400! ----STARTUP----an Array(13 August 2013 7:04:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/13/2013 19:00' prior: 48664961! commentForCurrentUpdate ^ '- 11416 Integrate latest changes to NB https://pharo.fogbugz.com/default.asp?11416 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/13/2013 19:00'! script125 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.5.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.25.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.163.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.306.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1558.mcz KernelTests-StephaneDucasse.543.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.71.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-IgorStasenko.128.mcz NativeBoost-Examples-IgorStasenko.15.mcz NativeBoost-Mac-IgorStasenko.8.mcz NativeBoost-Pools-IgorStasenko.12.mcz NativeBoost-Tests-IgorStasenko.63.mcz NativeBoost-Unix-IgorStasenko.12.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.511.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.119.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-StephaneDucasse.54.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-StephaneDucasse.106.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.21.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.59.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.224.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.897.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.607.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.107.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/13/2013 19:01'! update30333 "self new update30333" self withUpdateLog: '- 11416 Integrate latest changes to NB https://pharo.fogbugz.com/default.asp?11416 '. self loadTogether: self script125 merge: false. Gofer new smalltalkhubUser: 'Pharo' project: 'NativeBoost'; configuration; load. [ (Smalltalk globals at: #ConfigurationOfNativeBoost) loadDevelopment ] valueSupplyingAnswer: 'Load' . self unloadPackageNamed: 'ConfigurationOfNativeBoost'. self unloadPackageNamed: 'ConfigurationOfAsmJit'. self cleanRepositories. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfNativeBoost commentStamp: '' prior: 0! Loading latest stable version: ConfigurationOfNativeBoost loadStable. Loading latest development version: ConfigurationOfNativeBoost loadDevelopment. For loading a user code, use: NBInstaller install. This will install the latest version of NativeBoost. Includes: Core, all platforms, tests and examples. You can use groups to install only necessary parts: "install only core and platforms code" ConfigurationOfNativeBoost project lastVersion load: 'Core-AllPlatforms' ( you could also use Core-Win32 , Core-Unix and Core-Mac for installing code support only for your platform) To load plugin (need VMMaker already loaded), use: NBInstaller installPlugin which is equivalent to: ConfigurationOfNativeBoost project lastVersion load: 'Plugin' ------ MetacelloToolBox updateToLatestPackageVersionsIn: ConfigurationOfNativeBoost description: 'update 2012-1-20' ----- to load a specific version, use (ConfigurationOfNativeBoost project version: '1.8') load ! !ConfigurationOfNativeBoost commentStamp: '' prior: 48725455! Loading latest stable version: ConfigurationOfNativeBoost loadStable. Loading latest development version: ConfigurationOfNativeBoost loadDevelopment. For loading a user code, use: NBInstaller install. This will install the latest version of NativeBoost. Includes: Core, all platforms, tests and examples. You can use groups to install only necessary parts: "install only core and platforms code" ConfigurationOfNativeBoost project lastVersion load: 'Core-AllPlatforms' ( you could also use Core-Win32 , Core-Unix and Core-Mac for installing code support only for your platform) To load plugin (need VMMaker already loaded), use: NBInstaller installPlugin which is equivalent to: ConfigurationOfNativeBoost project lastVersion load: 'Plugin' ------ MetacelloToolBox updateToLatestPackageVersionsIn: ConfigurationOfNativeBoost description: 'update 2012-1-20' ----- to load a specific version, use (ConfigurationOfNativeBoost project version: '1.8') load ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! DevelopmentProcess "DEVELOPMENT Process - load current version: (self project version: #stable) load: 'ALL'. - open new version for development: self createNewDevelopmentVersion - do development and periodically save mcz files and configuration until ready for release self saveModifiedPackagesAndConfiguration: '- fixed a bug' - update the the development version to match mcz file versions self updateToLatestPackageVersions: '- fixed a bug' - save configuration self saveConfiguration: '- checkpoint configuration' RELEASE Process - mark development version as release: self releaseDevelopmentVersion: '- release' " ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:33'! commit: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. self updateConfiguration. self createNewDevelopmentVersion. self saveModifiedPackagesAndConfiguration: commitMessage. (Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: commitMessage. self loadDevelopment. self saveConfiguration: commitMessage.! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! compareVersions "Compare the #stable version to #development version" "self compareVersions" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) compareVersionsIn: self) inspect ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! createNewBaselineVersion "Create a new baseline version based upon the #stable version's baseline. A new baseline should be created if new packages have been added or package dependencies have changed." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewBaselineVersionIn: self description: '' ! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! createNewDevelopmentVersion "Create a new development version using the #stable version as model." "self createNewDevelopmentVersion" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) createNewDevelopmentVersionIn: self description: ''! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfNativeBoost class methodsFor: 'private'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'CamilloBruni 4/4/2012 18:56'! installPlugin Smalltalk at: #VMMaker ifAbsent: [ self error: 'Thou shall install Cog VMMaker first' ]. ConfigurationOfNativeBoost project lastVersion load: 'Plugin'! ! !ConfigurationOfNativeBoost class methodsFor: 'metacello tool support'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfNativeBoost class methodsFor: 'loading'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'IgorStasenko 12/28/2012 15:14'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project latestVersion: #development) load! ! !ConfigurationOfNativeBoost class methodsFor: 'loading' stamp: 'IgorStasenko 12/28/2012 15:13'! loadStable "Load the #stable version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadStable" ^(self project latestVersion: #stable) load! ! !ConfigurationOfNativeBoost class methodsFor: 'accessing'! project ^self new project! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! releaseDevelopmentVersion: commitMessage "Release #development version: set version blessing to #release, update the #development and #stable symbolic version methods and save the configuration." "self releaseDevelopmentVersion: '- release version 1.0.2'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) releaseDevelopmentVersionIn: self description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! saveConfiguration: commitMessage "Save mcz file that contains the configuration to it's repository." "self saveConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveConfigurationPackageFor: self name asString description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! saveModifiedPackagesAndConfiguration: commitMessage "Save modified mcz files, update the #development version and then save the configuration." "self saveModifiedPackagesAndConfiguration: '- fixed bug'" self ensureMetacello. (Smalltalk at: #MetacelloToolBox) saveModifiedPackagesAndConfigurationIn: self description: commitMessage! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 17:42'! updateConfiguration [[ (Smalltalk at: #Gofer) new package: self name; merge ] on: (Smalltalk at: #MCMergeOrLoadWarning ifAbsent: [ nil ]) do: [ :e| e resume: false ] ] on: (Smalltalk at: #MCNoChangesException ifAbsent: [ nil ]) do: [ :e| e resume].! ! !ConfigurationOfNativeBoost class methodsFor: 'development support' stamp: 'CamilloBruni 8/21/2012 18:32'! updateToLatestPackageVersions: descriptionString "Update the #development version to match currently loaded mcz files." "self updateToLatestPackageVersions: '- fixed a bug'" self ensureMetacello. ((Smalltalk at: #MetacelloToolBox) updateToLatestPackageVersionsIn: self description: descriptionString) isEmpty ifTrue: [ self inform: 'All specs up to date' ]! ! !ConfigurationOfNativeBoost class methodsFor: 'development support'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'CamilloBruni 8/21/2012 17:24'! baseline10: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; package: 'AsmJit' with: [ spec repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools') ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'CamilloBruni 8/23/2012 17:29'! baseline11: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools') ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'IgorStasenko 9/18/2012 12:54'! baseline12: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.squeaksource.com/NativeBoost'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.squeaksource.com/AsmJit' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools'); postLoadDoIt: #postloadForCore ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'baselines' stamp: 'IgorStasenko 1/31/2013 14:57'! baseline13: spec spec for: #common do: [ spec blessing: #baseline; preLoadDoIt: #installPrerequisites; repository: 'http://www.smalltalkhub.com/mc/Pharo/NativeBoost/main'; project: 'AsmJit' with: [ spec className: 'ConfigurationOfAsmJit'; repository: 'http://www.smalltalkhub.com/mc/Pharo/AsmJit/main' ]; package: 'NativeBoost-Pools'; package: 'NativeBoost-Core' with: [ spec requires: #('AsmJit' 'NativeBoost-Pools'); postLoadDoIt: #postloadForCore ]; package: 'NativeBoost-Unix' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Mac' with: [ spec requires: #('NativeBoost-Unix') ]; package: 'NativeBoost-Win32' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Tests' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-Examples' with: [ spec requires: #('NativeBoost-Core') ]; package: 'NativeBoost-CogPlugin' with: [ spec requires: #('NativeBoost-Pools') ]. "image-side groups" spec group: 'Core' with: #('NativeBoost-Core'); group: 'Core-Win32' with: #('Core' 'NativeBoost-Win32'); group: 'Core-Unix' with: #('Core' 'NativeBoost-Unix'); group: 'Core-Mac' with: #('Core' 'NativeBoost-Mac'); group: 'Core-AllPlatforms' with: #('Core' 'NativeBoost-Win32' 'NativeBoost-Unix' 'NativeBoost-Mac'); group: 'Tests' with: #('Core-AllPlatforms' 'NativeBoost-Tests'); group: 'Examples' with: #('Core-AllPlatforms' 'NativeBoost-Examples'); group: 'All' with: #('Core-AllPlatforms' 'Tests' 'Examples'); group: 'default' with: #('All'); "group for building plugin with VMMaker" group: 'Plugin' with: #('NativeBoost-CogPlugin'). ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'symbolic versions' stamp: 'IgorStasenko 6/27/2013 15:56'! development: spec spec for: #'common' version: '2.2'! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 4/4/2012 18:51'! fileInUrl: anUrl intoChangeset: changesetName ChangeSet newChangesFromStream: (self readUrl: anUrl) named: changesetName ! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 4/4/2012 18:51'! installPrerequisites (CompiledMethodTrailer trailerKinds includes: #NativeCodeTrailer) ifFalse: [ self fileInUrl: 'http://nativeboost.googlecode.com/files/000-NativeCodeTrailers.cs' intoChangeset: 'NativeCodeTrailer' ]. "Make sure an image having this crucial fix " (Object>>#perform:withArguments: ) frameSize > CompiledMethod smallFrameSize ifFalse: [ self fileInUrl: 'http://nativeboost.googlecode.com/files/001-perform-framesize.cs' intoChangeset: 'Perform-framesize-fix' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'post load' stamp: 'GuyHylton 9/12/2012 19:10'! postloadForCore NBFFICallout initialize.! ! !ConfigurationOfNativeBoost methodsFor: 'accessing'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfNativeBoost methodsFor: 'preinstall' stamp: 'CamilloBruni 10/9/2012 19:44'! readUrl: anUrl ^ ZnClient new url: anUrl; streaming: true; get! ! !ConfigurationOfNativeBoost methodsFor: 'symbolic versions' stamp: 'IgorStasenko 12/28/2012 15:02'! stable: spec spec for: #'common' version: '1.8'! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version101: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 19:13'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.13'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-Igor.Stasenko.5'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.32'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.16'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.5'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version102: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 19:13'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.13'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.33'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.17'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version103: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/10/2011 2:41'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.14'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.34'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version104: spec spec for: #common do: [ spec blessing: #development. spec author: 'IgorStasenko'. spec timestamp: '8/10/2011 16:08'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.15'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.36'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version105: spec spec for: #common do: [ spec blessing: #development. spec author: 'IgorStasenko'. spec timestamp: '23/11/2011 10:40'. spec package: 'AsmJit' with: 'AsmJit-HenrikSperreJohansen.18'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.7'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.43'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.21'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version106: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'update 2012-1-20'. spec author: 'IgorStasenko'. spec timestamp: '1/20/2012 17:23'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.20'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.48'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.8'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.23'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version107: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Update of 2012-2-09'. spec author: 'IgorStasenko'. spec timestamp: '2012-2-09'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.21'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.50'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.4'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.24'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:38'! version108: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Update of 2012-2-09'. spec author: 'IgorStasenko'. spec timestamp: '2012-2-09'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.21'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.8'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.52'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.4'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.24'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:38'! version109: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'Restore debugger support due to changes in 1.4 (past version #14402) '. spec author: 'IgorStasenko'. spec timestamp: '2012-3-20'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.35'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.54'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.25'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions'! version10: spec spec for: #common do: [ spec blessing: #release. spec author: 'IgorStasenko'. spec timestamp: '8/5/2011 11:49'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.12'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-Igor.Stasenko.5'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.31'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.7'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.3'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.15'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.5'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.8' ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:37'! version110: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'added resource manager. some fixes'. spec author: 'IgorStasenko'. spec timestamp: '2012-3-30'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.42'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 4/6/2012 14:15'! version111: spec spec for: #'common' do: [ spec blessing: #release. spec description: 'added resource manager. some fixes'. spec author: 'IgorStasenko'. spec timestamp: '2012-3-30'. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.50'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.13'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-sig.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 4/10/2012 18:17'! version112: spec spec for: #'common' do: [ spec blessing: #release. spec description: 'updated to latest asmjit version'. spec author: 'CamilloBruni'. spec timestamp: '4/10/2012 16:50'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.51'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'; package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.56'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.10'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.5'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.13'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-sig.27'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.6'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.9'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 7/5/2012 09:50'! version121: spec spec for: #common do: [ spec blessing: #release. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.66'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.62'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.14'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.8'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 8/21/2012 17:36'! version122: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-08-21'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.76'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.71'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-CamilloBruni.12'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 10/16/2012 14:51'! version123: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-10-16'. spec package: 'AsmJit' with: 'AsmJit-CamilloBruni.76'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.80'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.17'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 6/2/2012 15:25'! version12: spec spec for: #common do: [ spec blessing: #release. spec package: 'AsmJit' with: 'AsmJit-IgorStasenko.66'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.61'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.14'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.30'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.7'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 8/30/2012 18:51'! version13: spec spec for: #common do: [ spec blessing: #development. spec author: 'Camillo Bruni'. spec timestamp: '2012-08-23 17:30'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.74'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-CamilloBruni.12'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.31'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'GuyHylton 9/12/2012 19:10'! version14: spec spec for: #common do: [ spec blessing: #development. spec author: 'Igor Stasenko'. spec timestamp: '2012-Sep-03 3:08'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.9'. spec package: 'NativeBoost-Core' with: [ spec file: 'NativeBoost-Core-IgorStasenko.75'; postLoadDoIt: #postloadForCore ]. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-CamilloBruni.16'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.32'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.11'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 10/16/2012 14:54'! version15: spec spec for: #common do: [ spec blessing: #development. spec author: 'Igor Stasenko'. spec timestamp: '2012-Sep-18 12:45'. spec project: 'AsmJit' with: '1.0'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.10'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.76'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.17'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.12'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'tbn 11/29/2012 08:12'! version16: spec spec for: #common do: [ spec blessing: #release. spec author: 'Camillo Bruni'. spec timestamp: '2012-10-16'. spec project: 'AsmJit' with: '1.1'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CamilloBruni.80'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.14'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.6'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.33'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.11'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-tbn.28'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'tbn 11/29/2012 08:13'! version17: spec spec for: #common do: [ spec blessing: #stable. spec author: 'Igor Stasenko'. spec timestamp: '2012-11-26'. spec project: 'AsmJit' with: '1.1'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.90'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.38'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.30'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'IgorStasenko 12/28/2012 15:13'! version18: spec spec for: #common do: [ spec blessing: #stable. spec author: 'Igor Stasenko'. spec timestamp: '2012-12-07'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-IgorStasenko.94'. spec package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-IgorStasenko.15'. spec package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'. spec package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'. spec package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'. spec package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.43'. spec package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'. spec package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ].! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CiprianTeodorov 1/28/2013 21:03'! version19: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'CiprianTeodorov'. spec timestamp: '12/27/2012 14:38'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CiprianTeodorov.106'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-CiprianTeodorov.47'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'CamilloBruni 5/7/2013 17:57'! version20: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'IgorStasenko'. spec timestamp: '31/01/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-CiprianTeodorov.106'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-CiprianTeodorov.47'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.31'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'GuillermoPolito 5/31/2013 13:30'! version21: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'included enumerations'. spec author: 'CiprianTeodorov'. spec timestamp: '06/02/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-EstebanLorenzano.110'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-GuillermoPolito.19'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-IgorStasenko.15'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-IgorStasenko.8'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-IgorStasenko.12'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.49'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-IgorStasenko.12'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-IgorStasenko.34'. ]. ! ! !ConfigurationOfNativeBoost methodsFor: 'versions' stamp: 'StephaneDucasse 8/13/2013 17:44'! version22: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'more fixes and cleanups'. spec author: 'IgorStasenko'. spec timestamp: '13/08/2013'. spec project: 'AsmJit' with: '1.2'. spec package: 'NativeBoost-Core' with: 'NativeBoost-Core-StephaneDucasse.133'; package: 'NativeBoost-CogPlugin' with: 'NativeBoost-CogPlugin-EstebanLorenzano.18'; package: 'NativeBoost-Examples' with: 'NativeBoost-Examples-CamilloBruni.16'; package: 'NativeBoost-Mac' with: 'NativeBoost-Mac-CamilloBruni.9'; package: 'NativeBoost-Pools' with: 'NativeBoost-Pools-CamilloBruni.13'; package: 'NativeBoost-Tests' with: 'NativeBoost-Tests-IgorStasenko.63'; package: 'NativeBoost-Unix' with: 'NativeBoost-Unix-CamilloBruni.13'; package: 'NativeBoost-Win32' with: 'NativeBoost-Win32-EstebanLorenzano.38'. ]. ! ! "ConfigurationOfNativeBoost"! !ConfigurationOfAsmJit methodsFor: 'versions' stamp: 'IgorStasenko 8/13/2013 13:53' prior: 48105536! version12: spec "Please note, this version is used by NativeBoost (versions 1.8 + ). So if you change it, please make sure all NB tests are passed and green, before committing. For further development, which may not be compatible with NB yet, please create a new version (1.3) or use dev version. Igor Stasenko " spec for: #'common' do: [ spec blessing: #'stable'. spec description: ''. spec author: 'IgorStasenko'. spec timestamp: '23/12/2012 14:37'. spec project: 'Soup' with: '1.2'. spec package: 'AsmJit-Compiler' with: 'AsmJit-Compiler-CamilloBruni.1'; package: 'AsmJit-Core' with: 'AsmJit-Core-MartinMcClure.3'; package: 'AsmJit-Extension' with: 'AsmJit-Extension-MartinMcClure.6'; package: 'AsmJit-Instructions' with: 'AsmJit-Instructions-MartinMcClure.6'; package: 'AsmJit-Operands' with: 'AsmJit-Operands-CamilloBruni.11'; package: 'AsmJit-Reference' with: 'AsmJit-Reference-CamilloBruni.2'; package: 'AsmJit-StackManagement' with: 'AsmJit-StackManagement-IgorStasenko.6'; package: 'AsmJit-Tests' with: 'AsmJit-Tests-MartinMcClure.13'; package: 'AsmJit-x86' with: 'AsmJit-x86-IgorStasenko.26' ]. spec for: #'pharo1.4.x' do: [ spec package: 'AsmJit-Legacy' with: 'AsmJit-Legacy-IgorStasenko.2'. ]! ! "ConfigurationOfAsmJit"! !AJReserveTemp methodsFor: 'testing' stamp: 'IgorStasenko 8/13/2013 13:45'! prohibitsRex "This test is used to validate if operand(s) is valid.. but reserve temp could not have an operand assigned yet and validation can be only performed at instruction analyzis stage (right before emitting the code), but not at instruction creation time" self flag: #todo. ^ false! ! "AsmJit-StackManagement"! !AJx86Assembler methodsFor: 'instruction list' stamp: 'IgorStasenko 8/13/2013 13:39' prior: 48122237! newInstruction: name description: description operands: operands "check if name is jump " description isJump ifTrue: [ ^ self newJumpInstruction: name description: description operands: operands ]. ^ self newInstruction name: name; description: description; operands: operands; checkOperandsForConflict "Cannot check that at construction stage. Some operands may not be resolved yet (as AJReserveTemp) checkOperandsForConflict "! ! "AsmJit-x86"! !NativeBoostConstants class methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 11:00' prior: 27934519! currentPlatformId self primitiveFailed! ! !NativeBoostConstants class methodsFor: 'initialization' stamp: 'IgorStasenko 8/6/2011 18:10' prior: 27934729! initialize "self initialize" " Here the platform codes, defined to identify a platform on which VM runs. A compiled method which contain native code using this id to indicate for what platform the native code is generated. A primitive, which responsible for running native code, checks that platform id in method matching the platform id, specified by plugin, and if not, then primitive fails without attempt to run native code" "x86 platform codes" Linux32PlatformId := 1. Mac32PlatformId := 2. Win32PlatformId := 3. self initErrorCodes; initVMErrorCodes; initErrorDescriptions. ! ! !NativeBoostConstants class methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/14/2010 15:03' prior: 27935440! linux32PlatformId ^ Linux32PlatformId! ! !NativeBoostConstants class methodsFor: 'accessing' stamp: 'IgorStasenko 9/10/2012 12:07' prior: 27935584! mac32PlatformId ^ Mac32PlatformId! ! !NativeBoostConstants class methodsFor: 'accessing' stamp: 'Igor.Stasenko 4/9/2010 11:03' prior: 27935724! win32PlatformId ^ Win32PlatformId! ! "NativeBoost-Pools"! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'IgorStasenko 8/13/2013 14:53' prior: 48279126! createAccessorsFor: fieldName "Define read/write accessors for the given field" | code | code := fieldName,' "This method was automatically generated" ^ self fieldAt: ' , fieldName printString. self compileSilently: code classified: NativeBoost automaticallyGeneratedCodeCategory. code := fieldName,': anObject "This method was automatically generated" ^ self fieldAt: ' , fieldName printString , ' put: anObject'. self compileSilently: code classified: NativeBoost automaticallyGeneratedCodeCategory. ! ! !NBExternalStructure methodsFor: 'initialize-release' stamp: 'jb 8/9/2013 16:08' prior: 48287194! initializeInternal "initialize receiver with data held in object memory heap " data := ByteArray new: self class instanceSize. self initialize.! ! !NBExternalStructure methodsFor: 'copying' stamp: 'jb 8/9/2013 17:00'! postCopy "Copy is always internal, e.g, when making copy of structure with external address, a copy will hold same data in its bytearray (in object memory) " self isExternal ifFalse: [ data := data copy ] ifTrue: [ | newData | newData := ByteArray new: self class instanceSize. NativeBoost memCopy: data to: newData size: self class instanceSize. data := newData ]! ! !NativeBoost class methodsFor: 'accessing' stamp: 'IgorStasenko 8/13/2013 14:59'! automaticallyGeneratedCodeCategory "answer the name of non-existing package extension category which will be used for auto-generated code to categorize under" ^ '*generated-code-non-existing-package'! ! !NBExternalTypeValue class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/13/2013 17:41'! initialize NBExternalTypeValue allSubclassesDo: #installAccessors. "like that methods are correctly regenerated"! ! !NBExternalTypeValue class methodsFor: 'private' stamp: 'IgorStasenko 8/13/2013 14:52' prior: 48291341! installAccessors "Copy superclass methods, which serve as a template where generated code will be installed. Each subclass of NBTypeValue should implement (override) these key methods " self basicAddSelector: #value withMethod: (NBExternalTypeValue >> #value ) copy. self basicAddSelector: #value: withMethod: (NBExternalTypeValue >> #value: ) copy. self organization classify: #value under: NativeBoost automaticallyGeneratedCodeCategory. self organization classify: #value: under: NativeBoost automaticallyGeneratedCodeCategory.! ! !NBExternalArray class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/13/2013 17:42'! initialize NBExternalArray allSubclassesDo: #installAccessors.! ! !NBExternalArray class methodsFor: 'private' stamp: 'IgorStasenko 8/13/2013 14:55' prior: 27407119! installAccessors "Copy superclass methods, which serve as a template where generated code will be installed. Each subclass of NBExternalArray should implement (override) these key methods " self basicAddSelector: #at: withMethod: (NBExternalArray >> #at: ) copy. self basicAddSelector: #at:put: withMethod: (NBExternalArray >> #at:put: ) copy. self organization classify: #at: under: NativeBoost automaticallyGeneratedCodeCategory. self organization classify: #at:put: under: NativeBoost automaticallyGeneratedCodeCategory.! ! "NativeBoost-Core"! !NBUnixConstants class methodsFor: 'initialization' stamp: 'Igor.Stasenko 9/25/2010 08:37' prior: 27693284! initDlopenFlags "From " " The MODE argument to `dlopen' contains one of the following: " RTLD_LAZY := 16r00001. "Lazy function call binding." RTLD_NOW := 16r00002. " Immediate function call binding. " RTLD_BINDING_MASK := 16r3. " Mask of binding time value. " RTLD_NOLOAD := 16r00004. " Do not load the object." RTLD_DEEPBIND := 16r00008. " Use deep binding. " " If the following bit is set in the MODE argument to `dlopen', the symbols of the loaded object and its dependencies are made visible as if the object were linked directly into the program. " RTLD_GLOBAL := 16r00100. " Unix98 demands the following flag which is the inverse to RTLD_GLOBAL. The implementation does this by default and so we can define the value to zero. " RTLD_LOCAL := 0. " Do not delete object when closed. " RTLD_NODELETE := 16r01000. " From " " If the first argument of `dlsym' or `dlvsym' is set to RTLD_NEXT the run-time address of the symbol called NAME in the next shared object is returned. The 'next' relation is defined by the order the shared objects were loaded. " RTLD_NEXT := 16rFFFFFFFF. " ((void *) -1l) " " If the first argument to `dlsym' or `dlvsym' is set to RTLD_DEFAULT the run-time address of the symbol called NAME in the global scope is returned. " RTLD_DEFAULT := 0. ! ! !NBUnixConstants class methodsFor: 'initialization' stamp: 'Igor.Stasenko 9/25/2010 09:12' prior: 27694746! initMmapFlags "From " " Memory protection flags, can be bitored " PROT_READ := 16r1. " Page can be read. " PROT_WRITE := 16r2. " Page can be written. " PROT_EXEC := 16r4. " Page can be executed. " PROT_NONE := 16r0. " Page can not be accessed. " PROT_GROWSDOWN := 16r01000000. " Extend change to start of growsdown vma (mprotect only). " PROT_GROWSUP := 16r02000000. "Extend change to start of growsup vma (mprotect only). " " Sharing types (must choose one and only one of these). " MAP_SHARED := 16r01. "Share changes." MAP_PRIVATE := 16r02. "Changes are private." MAP_TYPE := 16r0f. "Mask for type of mapping. " " Other flags. " MAP_FIXED := 16r10. "Interpret addr exactly. " MAP_FILE := 0. MAP_ANONYMOUS := 16r20. "Don't use a file." MAP_ANON := MAP_ANONYMOUS. MAP_32BIT := 16r40. "Only give out 32-bit addresses." "These are Linux-specific." MAP_GROWSDOWN := 16r00100. "Stack-like segment." MAP_DENYWRITE := 16r00800. " ETXTBSY " MAP_EXECUTABLE := 16r01000. " Mark it as an executable." MAP_LOCKED := 16r02000. " Lock the mapping. " MAP_NORESERVE := 16r04000. " Don't check for reservations. " MAP_POPULATE := 16r08000. " Populate (prefault) pagetables. " MAP_NONBLOCK := 16r10000. " Do not block on IO." MAP_STACK := 16r20000. " Allocation is for a stack. " MAP_FAILED := 16rFFFFFFFF. "-1"! ! !NBUnixConstants class methodsFor: 'initialization' stamp: 'Igor.Stasenko 9/25/2010 06:57' prior: 27696216! initialize " self initialize " "from " self initDlopenFlags; initMmapFlags! ! "NativeBoost-Unix"! !NBMacConstants class methodsFor: 'initialization' stamp: 'Igor.Stasenko 12/5/2010 19:18' prior: 27623360! initMmapflags PROT_READ := 16r1. " Page can be read. " PROT_WRITE := 16r2. " Page can be written. " PROT_EXEC := 16r4. " Page can be executed. " PROT_NONE := 16r0. " Page can not be accessed. " MAP_FILE := 0. " map from file (default) " MAP_ANON := 16r1000. " allocated from memory, swap space " " Flags contain sharing type and options. Sharing types; choose one." MAP_SHARED := 16r0001. " [MF|SHM] share changes" MAP_PRIVATE := 16r0002. " [MF|SHM] changes are private" MAP_COPY := MAP_PRIVATE. MAP_FIXED := 16r0010. " [MF|SHM] interpret addr exactly " MAP_RENAME := 16r0020. " Sun: rename private pages to file " MAP_NORESERVE := 16r0040. " Sun: don't reserve needed swap area " MAP_RESERVED0080 := 16r0080. " previously unimplemented MAP_INHERIT " MAP_NOEXTEND := 16r0100. " for MAP_FILE, don't change file size " MAP_HASSEMAPHORE := 16r0200. " region may contain semaphores " MAP_NOCACHE := 16r0400. " don't cache pages for this mapping " MAP_FAILED := -1 asImm asDWord.! ! !NBMacConstants class methodsFor: 'initialization' stamp: 'IgorStasenko 11/18/2012 17:08' prior: 27624468! initialize RTLD_LAZY := 16r1. RTLD_NOW := 16r2. RTLD_LOCAL := 16r4. RTLD_GLOBAL := 16r8. RTLD_NOLOAD := 16r10. RTLD_NODELETE := 16r80. RTLD_FIRST := 16r100. " Mac OS X 10.5 and later " RTLD_NEXT := -1 . " ((void *) -1) Search subsequent objects. " RTLD_DEFAULT := -2. " ((void *) -2) Use default search algorithm. " RTLD_SELF := -3. " ((void *) -3) Search this and subsequent objects (Mac OS X 10.5 and later) " RTLD_MAIN_ONLY := -5. " ((void *) -5) Search main executable only (Mac OS X 10.5 and later)" self initMmapflags. ! ! !NBMacExternalHeapManager methodsFor: 'flags' stamp: 'Igor.Stasenko 12/5/2010 19:13' prior: 27625296! mapFlags ^ MAP_ANON bitOr: MAP_PRIVATE! ! !NBMacExternalHeapManager methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 17:22' prior: 27625441! mmapLength: bytesToAllocate prot: protFlags flags: mapFlags into: returnValueBuffer "Note: mmap using 32-bit offset, while mmap64 - 64bit one" ^ self nbCallout options: #( - optDirectProxyFnAddress ); function: #( NBBootstrapUlong ( 0, uint bytesToAllocate, int protFlags, int mapFlags, -1, 0 "offset" )) emit: [:gen | | mmap | mmap := NativeBoost forCurrentPlatform getGlobalSymbolPointer: 'mmap'. gen asm mov: mmap asUImm32 to: gen asm EAX. gen asm call: gen asm EAX ] ! ! !NBMacExternalHeapManager methodsFor: 'memory management' stamp: 'Igor.Stasenko 12/5/2010 19:19' prior: 27626132! primAllocatePage: bytesToAllocate | ptr buf | buf := ByteArray new: 4. self mmapLength: bytesToAllocate prot: self protFlags flags: self mapFlags into: buf. ptr := buf unsignedLongAt: 1 bigEndian: false. ptr = MAP_FAILED ifTrue: [ self error: 'Unable to map virtual memory' ]. ^ ptr ! ! !NBMacExternalHeapManager methodsFor: 'memory management' stamp: 'Igor.Stasenko 12/5/2010 19:19' prior: 27626545! primFreePage: aMemoryPage "call munmap()" | res | res := self unmap: aMemoryPage address length: aMemoryPage length. res = 0 ifFalse: [ self error: 'error during unmapping virtual memory page' ]! ! !NBMacExternalHeapManager methodsFor: 'flags' stamp: 'Igor.Stasenko 12/5/2010 18:36' prior: 27626850! protFlags "since NativeBoost using heap for placing executable code there, it is important that all allocated memory should be executable" ^ (PROT_READ bitOr: PROT_WRITE) bitOr: PROT_EXEC! ! !NBMacExternalHeapManager methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 17:22' prior: 27627146! unmap: addr length: len "unmap memory page" ^ self nbCallout function: #( int munmap (uint addr, ulong len) ) module: RTLD_DEFAULT ! ! !NativeBoostMac32 class methodsFor: 'accessing' stamp: 'Igor.Stasenko 12/4/2010 22:21' prior: 27945128! targetPlatformId ^ Mac32PlatformId ! ! "NativeBoost-Mac"! ConfigurationOfNativeBoost removeSelector: #version22:! ConfigurationOfNativeBoost removeSelector: #version21:! ConfigurationOfNativeBoost removeSelector: #version20:! ConfigurationOfNativeBoost removeSelector: #version19:! ConfigurationOfNativeBoost removeSelector: #version18:! ConfigurationOfNativeBoost removeSelector: #version17:! ConfigurationOfNativeBoost removeSelector: #version16:! ConfigurationOfNativeBoost removeSelector: #version15:! ConfigurationOfNativeBoost removeSelector: #version14:! ConfigurationOfNativeBoost removeSelector: #version13:! ConfigurationOfNativeBoost removeSelector: #version12:! ConfigurationOfNativeBoost removeSelector: #version123:! ConfigurationOfNativeBoost removeSelector: #version122:! ConfigurationOfNativeBoost removeSelector: #version121:! ConfigurationOfNativeBoost removeSelector: #version112:! ConfigurationOfNativeBoost removeSelector: #version111:! ConfigurationOfNativeBoost removeSelector: #version110:! ConfigurationOfNativeBoost removeSelector: #version10:! ConfigurationOfNativeBoost removeSelector: #version109:! ConfigurationOfNativeBoost removeSelector: #version108:! ConfigurationOfNativeBoost removeSelector: #version107:! ConfigurationOfNativeBoost removeSelector: #version106:! ConfigurationOfNativeBoost removeSelector: #version105:! ConfigurationOfNativeBoost removeSelector: #version104:! ConfigurationOfNativeBoost removeSelector: #version103:! ConfigurationOfNativeBoost removeSelector: #version102:! ConfigurationOfNativeBoost removeSelector: #version101:! ConfigurationOfNativeBoost removeSelector: #stable:! ConfigurationOfNativeBoost removeSelector: #readUrl:! ConfigurationOfNativeBoost removeSelector: #project! ConfigurationOfNativeBoost removeSelector: #postloadForCore! ConfigurationOfNativeBoost removeSelector: #installPrerequisites! ConfigurationOfNativeBoost removeSelector: #fileInUrl:intoChangeset:! ConfigurationOfNativeBoost removeSelector: #development:! ConfigurationOfNativeBoost removeSelector: #baseline13:! ConfigurationOfNativeBoost removeSelector: #baseline12:! ConfigurationOfNativeBoost removeSelector: #baseline11:! ConfigurationOfNativeBoost removeSelector: #baseline10:! ConfigurationOfNativeBoost class removeSelector: #validate! ConfigurationOfNativeBoost class removeSelector: #updateToLatestPackageVersions:! ConfigurationOfNativeBoost class removeSelector: #updateConfiguration! ConfigurationOfNativeBoost class removeSelector: #saveModifiedPackagesAndConfiguration:! ConfigurationOfNativeBoost class removeSelector: #saveConfiguration:! ConfigurationOfNativeBoost class removeSelector: #releaseDevelopmentVersion:! ConfigurationOfNativeBoost class removeSelector: #project! ConfigurationOfNativeBoost class removeSelector: #loadStable! ConfigurationOfNativeBoost class removeSelector: #loadDevelopment! ConfigurationOfNativeBoost class removeSelector: #loadBleedingEdge! ConfigurationOfNativeBoost class removeSelector: #load! ConfigurationOfNativeBoost class removeSelector: #isMetacelloConfig! ConfigurationOfNativeBoost class removeSelector: #installPlugin! ConfigurationOfNativeBoost class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfNativeBoost class removeSelector: #ensureMetacello! ConfigurationOfNativeBoost class removeSelector: #createNewDevelopmentVersion! ConfigurationOfNativeBoost class removeSelector: #createNewBaselineVersion! ConfigurationOfNativeBoost class removeSelector: #compareVersions! ConfigurationOfNativeBoost class removeSelector: #commit:! ConfigurationOfNativeBoost class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfNativeBoost class removeSelector: #DevelopmentSupport! ConfigurationOfNativeBoost class removeSelector: #DevelopmentProcess! Smalltalk globals removeClassNamed: #ConfigurationOfNativeBoost! ConfigurationOfAsmJit removeSelector: #versionDEV:! ConfigurationOfAsmJit removeSelector: #version12:! ConfigurationOfAsmJit removeSelector: #version11:! ConfigurationOfAsmJit removeSelector: #version10:! ConfigurationOfAsmJit removeSelector: #stable:! ConfigurationOfAsmJit removeSelector: #soup:! ConfigurationOfAsmJit removeSelector: #project! ConfigurationOfAsmJit removeSelector: #pinocchio:! ConfigurationOfAsmJit removeSelector: #osProcess:! ConfigurationOfAsmJit removeSelector: #development:! ConfigurationOfAsmJit removeSelector: #bleedingEdge:! ConfigurationOfAsmJit removeSelector: #baselineDEV:! ConfigurationOfAsmJit removeSelector: #baseline12:! ConfigurationOfAsmJit removeSelector: #baseline10:! ConfigurationOfAsmJit class removeSelector: #validate! ConfigurationOfAsmJit class removeSelector: #updateToLatestPackageVersions:! ConfigurationOfAsmJit class removeSelector: #updateConfiguration! ConfigurationOfAsmJit class removeSelector: #saveModifiedPackagesAndConfiguration:! ConfigurationOfAsmJit class removeSelector: #saveConfiguration:! ConfigurationOfAsmJit class removeSelector: #releaseDevelopmentVersion:! ConfigurationOfAsmJit class removeSelector: #project! ConfigurationOfAsmJit class removeSelector: #loadDevelopment! ConfigurationOfAsmJit class removeSelector: #loadBleedingEdge! ConfigurationOfAsmJit class removeSelector: #load! ConfigurationOfAsmJit class removeSelector: #isMetacelloConfig! ConfigurationOfAsmJit class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfAsmJit class removeSelector: #ensureMetacello! ConfigurationOfAsmJit class removeSelector: #createNewDevelopmentVersion! ConfigurationOfAsmJit class removeSelector: #createNewBaselineVersion! ConfigurationOfAsmJit class removeSelector: #compareVersions! ConfigurationOfAsmJit class removeSelector: #commit:! ConfigurationOfAsmJit class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfAsmJit class removeSelector: #DevelopmentSupport! ConfigurationOfAsmJit class removeSelector: #DevelopmentProcess! Smalltalk globals removeClassNamed: #ConfigurationOfAsmJit! ----End fileIn----! ----QUIT----an Array(13 August 2013 7:04:53 pm) Pharo.image priorSource: 15159603! ----STARTUP----an Array(13 August 2013 7:17:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 August 2013 7:17:09 pm) Pharo-30333.image priorSource: 15237181! ----STARTUP----an Array(13 August 2013 10:43:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/13/2013 22:26' prior: 48714343! commentForCurrentUpdate ^ '- issue 11418 RBBrowserEnvironment definesClass: is unfinished https://pharo.fogbugz.com/default.asp?11418 - issue 11417 Test for checking repeated code in superclasses must not watch in nativeBoost classes https://pharo.fogbugz.com/default.asp?11417 - issue 11415 More green tests for BehaviorTest and MetaclassTest https://pharo.fogbugz.com/default.asp?11415'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/13/2013 22:26'! script126 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.6.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.26.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.163.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.306.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-StephaneDucasse.41.mcz Kernel-StephaneDucasse.1558.mcz KernelTests-StephaneDucasse.546.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.71.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-StephaneDucasse.133.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.64.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.511.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.119.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-StephaneDucasse.54.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-StephaneDucasse.106.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.882.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-StephaneDucasse.52.mcz Refactoring-Environment-StephaneDucasse.23.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.21.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.59.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.224.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.897.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.609.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.107.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/13/2013 22:26'! update30334 "self new update30334" self withUpdateLog: '- issue 11418 RBBrowserEnvironment definesClass: is unfinished https://pharo.fogbugz.com/default.asp?11418 - issue 11417 Test for checking repeated code in superclasses must not watch in nativeBoost classes https://pharo.fogbugz.com/default.asp?11417 - issue 11415 More green tests for BehaviorTest and MetaclassTest https://pharo.fogbugz.com/default.asp?11415'. self loadTogether: self script126 merge: false. (MCWorkingCopy allManagers select: #modified) do: [ :each | each modified: false ]. . self flushCaches. ! ! "ScriptLoader30"! "NativeBoost-Tests"! "Generated-code-non-existing-package"! ----End fileIn----! ----QUIT----an Array(13 August 2013 10:43:11 pm) Pharo.image priorSource: 15237384! ----STARTUP----an Array(13 August 2013 10:55:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 August 2013 10:55:27 pm) Pharo-30334.image priorSource: 15249213! ----STARTUP----an Array(14 August 2013 10:50:39 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/14/2013 10:21' prior: 48792124! commentForCurrentUpdate ^ '- issue 11415 More green tests for BehaviorTest and MetaclassTest https://pharo.fogbugz.com/default.asp?11415 - issue 11406 Cleaning categories: Object https://pharo.fogbugz.com/default.asp?11406 - issue 11251 Add coherent icons set for up/down/top/bottom actions https://pharo.fogbugz.com/default.asp?11251 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/14/2013 10:21'! script127 ^ 'AST-Core-EstebanLorenzano.182.mcz AST-Interpreter-Core-EstebanLorenzano.107.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.44.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-MartinMcClure.3.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-MartinMcClure.6.mcz AsmJit-Operands-CamilloBruni.11.mcz AsmJit-StackManagement-IgorStasenko.6.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-IgorStasenko.26.mcz Athens-Balloon-EstebanLorenzano.13.mcz Athens-Cairo-EstebanLorenzano.48.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-MarcusDenker.34.mcz Athens-Examples-EstebanLorenzano.24.mcz Athens-Morphic-MarcusDenker.19.mcz Athens-PangoCairo-FernandoOlivero.11.mcz Athens-Text-IgorStasenko.5.mcz Balloon-StephaneDucasse.100.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-MarcusDenker.76.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-MarcusDenker.32.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.218.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.5.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.151.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.144.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-MarcusDenker.49.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.163.mcz Collections-Weak-MarcusDenker.71.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-EstebanLorenzano.510.mcz CompilerTests-MarcusDenker.170.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.106.mcz FileSystem-Disk-MarcusDenker.63.mcz FileSystem-Memory-StephaneDucasse.35.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.306.mcz FreeType-MarcusDenker.624.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.776.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.74.mcz Graphics-Primitives-EstebanLorenzano.106.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.47.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-EstebanLorenzano.19.mcz HelpSystem-Core-MarcusDenker.99.mcz HelpSystem-Tests-StephaneDucasse.19.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1560.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.49.mcz Keymapping-Core-StephaneDucasse.158.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-MarcusDenker.41.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-EstebanLorenzano.149.mcz Manifest-CriticBrowser-StephaneDucasse.103.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-MarcusDenker.59.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.670.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.849.mcz MonticelloConfigurations-StephaneDucasse.61.mcz MonticelloGUI-StephaneDucasse.249.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.71.mcz Morphic-Examples-StephaneDucasse.8.mcz MorphicTests-MarcusDenker.69.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.55.mcz NECompletion-MarcusDenker.123.mcz NOCompletion-EstebanLorenzano.38.mcz NativeBoost-Core-StephaneDucasse.133.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.64.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-EstebanLorenzano.38.mcz Nautilus-StephaneDucasse.512.mcz NautilusCommon-MarcusDenker.158.mcz NautilusRefactoring-StephaneDucasse.119.mcz Network-Kernel-MarcusDenker.92.mcz Network-MIME-StephaneDucasse.54.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.4.mcz Network-UUID-EstebanLorenzano.24.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.51.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.5.mcz OpalCompiler-Core-StephaneDucasse.384.mcz OpalCompiler-Tests-MarcusDenker.194.mcz PackageInfo-StephaneDucasse.106.mcz Polymorph-EventEnhancements-MarcusDenker.13.mcz Polymorph-Geometry-LaurentLaffont.8.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.100.mcz Polymorph-Widgets-StephaneDucasse.883.mcz RPackage-Core-MarcusDenker.251.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-MarcusDenker.196.mcz Refactoring-Changes-EstebanLorenzano.41.mcz Refactoring-Core-EstebanLorenzano.185.mcz Refactoring-Critics-EstebanLorenzano.50.mcz Refactoring-Environment-EstebanLorenzano.21.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-EstebanLorenzano.71.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-EstebanLorenzano.24.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.21.mcz Ring-Core-Kernel-EstebanLorenzano.130.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-EstebanLorenzano.87.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.72.mcz SUnit-UITesting-EstebanLorenzano.12.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-EstebanLorenzano.192.mcz ShoutTests-MarcusDenker.17.mcz Slot-EstebanLorenzano.370.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.30.mcz Spec-Builder-StephaneDucasse.34.mcz Spec-Core-EstebanLorenzano.147.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-MarcusDenker.35.mcz Spec-Inspector-StephaneDucasse.59.mcz Spec-Layout-MarcusDenker.52.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.126.mcz Spec-Widgets-StephaneDucasse.224.mcz StartupPreferences-MarcusDenker.103.mcz System-Announcements-MarcusDenker.48.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-MarcusDenker.27.mcz System-CommandLine-MarcusDenker.136.mcz System-FilePackage-MarcusDenker.90.mcz System-FileRegistry-MarcusDenker.24.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-MarcusDenker.20.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.897.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-EstebanLorenzano.101.mcz SystemProgress-MarcusDenker.5.mcz Tabs-EstebanLorenzano.24.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.607.mcz Text-Core-StephaneDucasse.8.mcz Text-Edition-EstebanLorenzano.4.mcz Text-Scanning-EstebanLorenzano.2.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1209.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-EstebanLorenzano.556.mcz Transcript-MarcusDenker.8.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.107.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.21.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-SvenVanCaekenberghe.374.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.31.mcz Zodiac-Extra-SvenVanCaekenberghe.7.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/14/2013 10:21'! update30335 "self new update30335" self withUpdateLog: '- issue 11415 More green tests for BehaviorTest and MetaclassTest https://pharo.fogbugz.com/default.asp?11415 - issue 11406 Cleaning categories: Object https://pharo.fogbugz.com/default.asp?11406 - issue 11251 Add coherent icons set for up/down/top/bottom actions https://pharo.fogbugz.com/default.asp?11251 '. self loadTogether: self script127 merge: false. ThemeIcons initialize. self flushCaches. ! ! "ScriptLoader30"! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'ChristopheDemarey 7/26/2013 12:59'! bottomIcon ^ icons at: #'bottomIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self bottomIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'ChristopheDemarey 7/26/2013 13:17'! bottomIconContents "Private - Method generated" "Icon from http://tango.freedesktop.org/Tango_Icon_Library, public domain" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIpSURBVDiNlVI7aFNhGD3/fSQ3 UixETTokRamvRbB2Mq0IHQQlHYqIi0MdRbCI1sFdEHpHB6FLpg5SUQlthEw+roVQSzQ0QotC h5SkNVoxTe+9/+NziMTUpGIP/Mvh43z/Od9hRIRWDE6YZRCi6ASGijPJe1opo22IELVvPoFQ AkL5kIpDKA4uPTxM3W4TbhcAwJiG3GoantiGK7bg8S2cPTLa8VNaRxYMjP1+YABjkIrvRaCR CxGBQADRrgLG0D3TIYVEc7cOl4gspSSIFIgUfLkNrnwwHe7gXbOZOtPwziCFVCzS13/r8oOQ oQdApCxJAopJQBcABMqby2D6Jdy4et8CAZz7mMmm6t9/fE0xIsLQhDlz7vTF5PDAaLBYeQPJ fEj4+OaWsFb7BK58gAhEGs73XsNiYcErLufTbyf5Fa3hFWOv85nKl/ISxcLHQRrHureCkvsR LCgQCGkwQzr6Y8OoblapuJKvEOF6M0TH5jUQktMvH7sGs2CaJjb8zzAtHQFLQyCkIx4+hkio D9lXsy4pJB2b13ZcwbF5QQhvfDrzqH5wXxxdoW6Ywcbm/V3dOBW5gHT2aZ1zf9yxeaHjGR2b T5U2VjO5D44/0DMCzWAwAhrOREeQez/vr1fX5hybT+04Y1sDFMYWCvNLvbHD8aPhBNMNDdXS T8otOmUlG77/WSTH5jWSSM5mX7iHcBIH1Ak8n3vmKvnHdytY4o5Bf5N7wS5V/n/8AqomDSpi zBsRAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'ChristopheDemarey 7/26/2013 12:58' prior: 37507444! downIcon ^ icons at: #'downIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self downIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'ChristopheDemarey 7/26/2013 13:18' prior: 37507615! downIconContents "Private - Method generated" "Icon from http://tango.freedesktop.org/Tango_Icon_Library, public domain" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI9SURBVDiNhZNNaBNBGIbfmezm D2vAYNJD/MGq9SIaj0m04MGL8SIULx4q4kEU6qFV8SoI0hU8qVCEnBQholJTW3Kx1lUItS0U e6hVtFTNmq79C+kms7Ofh9Yamxjf4zffPPO+880wIkK14t1qHoQw6onB0HtEc3VJqWkihG9d SMN2BGxHYMkqYMkyAQB3H92oAdcCADDGkJt5jrJdQqE4g49zY2g/eLWuKV6vWB3Ko/jrbmwI ABGIHBARFO5uCFASl1WdHMTW7btgOSS9kmxIsrFcNlG9Fu9S1w0yjjcKOUhFQi3Riyev+xSX CiLHK0mCmAS4RFEWoHo5uMJw/tQ1LwgQooJ0NlWaX5xLMSJColtNt0WPJ49Ek573+VeQXECi jBV7EdPzORBoLRZH2/bTGJ0YKU9Ojfe97hHtfC1yx8uxjPHFmKJIcC+IVwCXjUJlGqqPwe3j UH0uRCNHYS6YNPlh3CDCmfVL1DVRBCH5cPCe5eVNCPiDKNFPlF2LcHs53D4Xtm3Zg5CvBdmh jEUOkromin9NQdfEREWsdD4YvFPaETgAm5WgelZP3rwpgP2hY+jLPi4JUenUNTFRd4y6Jnpn jU8vhscGRGswAa4wKG6OQ+ETyL17W/lhfuvXNdHb8B2Qg46hkYHvprFAu5ti2OWPwfy6TLlR Pe/I1dwNAbomiiSRzGSfWVuxD0GnFU/7n1iO/JO7Wmzjb/yteJd6LtK88zYAzOY/X9po/b8A ADh8Rb0PAMM3xdl/9fwCc0oSKoZoHMsAAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'ChristopheDemarey 7/26/2013 12:59'! topIcon ^ icons at: #'topIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self topIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'ChristopheDemarey 7/26/2013 13:18'! topIconContents "Private - Method generated" "Icon from http://tango.freedesktop.org/Tango_Icon_Library, public domain" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVDiNpZNPSFRRFId/5/55 vWeCbmzUKCoM3AyYUIIPclGGORTIROsBG2hRkPhqEW3a1kAIQbQI27QKksBNtIsMXAUJBWIY SY0yTDOMwzjvvfvecTFKZIMWXribw7kfv+/ce2lwUjH2scR+DgMAMf8dwPV08oB1cP56+q7j mxqmXz/a8IPawFwuXNgzgevpVhBmr56/Zq8HBVTDIoYHL9sgzLqebt0TQITnQ/2prsOHjtFK +QtWSp/R3tZGfb0DnSBM7wpwPZ09kjg5eq4/rb8WPkKSgiCJD99m0Nd7xupo7xp1PZ1tCnA9 nbS0M5W5eNv5WVmE4QBSKdTjCjb4Fz4V3mJkaKxFKWvK9XTyD8C29/ilO3ZMIdb9IpSS0JZE OfoB7QgUzTJKvIwLZ1M2id/zENvew6fTnT3dScpXliAkQWpCNSrAF2VYjoTlCCxW3iHR3UHJ 3lMJEo150OCkyh7t7JmauPLQUdJCDIMYBvP5V1govoERNUhJSB33AADMjCAI8GLmWa1YKtxS JJD5vrrkTDweazgp1HM3XtqVYBVG1KAtAakbiXJP79eNz/aWfgtJZNT7B6G74yaYOUY5yEMI 2tJpQIzP9lwupF3fAQDEbFD1i2Dmxo4ZcdT8y6hmRRMZ+KEPZoYRDOYYUfgfgCg2GDlxEyQA IQAShMj8K4Cwdu/JeKJZMwms7axtAsq9zOyrhI9uAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'ChristopheDemarey 7/26/2013 11:43' prior: 37743484! upIcon ^ icons at: #'upIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self upIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'ChristopheDemarey 7/26/2013 13:18' prior: 37743649! upIconContents "Private - Method generated" "Icon from http://tango.freedesktop.org/Tango_Icon_Library, public domain" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0 RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIeSURBVDiNlZNPaBNBFMa/N7sz 2Y2FemhM/9GCBO3BQCqo0NWKaERiRS0UcmtKyUmQYhbBq8dSkaAXD0VPHqVC8eJNKl5EUNBD KbQqlZQ0iaaaJtnZGQ9RrCGp9h3f++bHfN+bIa012tXJm3weAJZmvel2GtZu4Lg83d8VSfZ1 HUw6Lk/vCeC4PBoQ+7JXzkwGx0aTwYAIZh2XR/8L4Li8A4TFiXPT1paXx5a3ifjIJQuERcfl Hf8EEOHR6HCipzc0SJ9LH/Cx9B6dnZ0UGzrRDcLDXQGOy9P9ByKJs0fH+Ur+DQzGYTKOV2sL iA0dF6H9PYnmPNiOw1HB7Wwq4drr5WVo8iCEiTp9xzYV8S7/HBdOXw2apvgrD7bT99RYxlLk oSJLEAEBHuAoy3UI20BBrqKoVnH+1EWL2J882G/f8WPj3Yf6YpSvrMHkBjg3UFEFVI2vEDaD sBmWv71AuDdERw4Ph4k18qCRjJke6I5kb0zcsQUPQEHCh4fXuQW8LTyDZBUQIyQGMtBaQymg Xq/h8dP5SrG0OWMSQ+pTbsWeuXe54Ymjevf6E6ssc/CNbXDBwEyCwQlzD25XZU1bv+wHiSFl Ls16TtMmtNYKpfoXMINgcAYeaEBkTVsv5zza9R0AgNI+ftSLjSv7GrKuoFXrP2O2avpKolrb hjI1oBV8SfC9PQCkLxEfvAZiADECEfYAIGzcuj8ZbiUmwkZz7ycw98XbttCaIgAAAABJRU5E rkJggg=='! ! !ProtoObject methodsFor: 'reflective operations' stamp: 'MartinMcClure 1/12/2010 21:10' prior: 30065047! basicIdentityHash "Answer a SmallInteger whose value is related to the receiver's identity. This method must not be overridden, except by SmallInteger. Primitive. Fails if the receiver is a SmallInteger. Essential. See Object documentation whatIsAPrimitive. Do not override. Use #identityHash unless you really know what you're doing.'" self primitiveFailed! ! !ProtoObject methodsFor: 'reflective operations' stamp: 'md 11/24/1999 19:30' prior: 30065509! become: otherObject "Primitive. Swap the object pointers of the receiver and the argument. All variables in the entire system that used to point to the receiver now point to the argument, and vice-versa. Fails if either object is a SmallInteger" (Array with: self) elementsExchangeIdentityWith: (Array with: otherObject)! ! !ProtoObject methodsFor: 'reflective operations' stamp: 'ajh 1/13/2002 17:02' prior: 30065922! cannotInterpret: aMessage "Handle the fact that there was an attempt to send the given message to the receiver but a null methodDictionary was encountered while looking up the message selector. Hopefully this is the result of encountering a stub for a swapped out class which induces this exception on purpose." "If this is the result of encountering a swap-out stub, then simulating the lookup in Smalltalk should suffice to install the class properly, and the message may be resent." (self class lookupSelector: aMessage selector) == nil ifFalse: ["Simulated lookup succeeded -- resend the message." ^ aMessage sentTo: self]. "Could not recover by simulated lookup -- it's an error" Error signal: 'MethodDictionary fault'. "Try again in case an error handler fixed things" ^ aMessage sentTo: self! ! !ProtoObject methodsFor: 'reflective operations' stamp: 'ajh 10/9/2001 17:20' prior: 30066817! doesNotUnderstand: aMessage ^ MessageNotUnderstood new message: aMessage; receiver: self; signal! ! !ProtoObject methodsFor: 'flagging' stamp: 'marcus.denker 8/25/2008 09:12' prior: 30062429! flag: aSymbol "Send this message, with a relevant symbol as argument, to flag a message for subsequent retrieval. For example, you might put the following line in a number of messages: self flag: #returnHereUrgently Then, to retrieve all such messages, browse all senders of #returnHereUrgently."! ! !ProtoObject methodsFor: 'instropection' stamp: 'MarianoMartinezPeck 12/22/2011 21:04' prior: 30067019! instVarsInclude: anObject "Answers true if anObject is among my named or indexed instance variables, and false otherwise" 1 to: self class instSize do: [:i | (self instVarAt: i) == anObject ifTrue: [^ true]]. 1 to: self basicSize do: [:i | (self basicAt: i) == anObject ifTrue: [^ true]]. ^ false! ! !ProtoObject methodsFor: 'memory scanning' stamp: 'md 11/24/1999 19:58' prior: 30067421! nextInstance "Primitive. Answer the next instance after the receiver in the enumeration of all instances of this class. Fails if all instances have been enumerated. Essential. See Object documentation whatIsAPrimitive." ^nil! ! !ProtoObject methodsFor: 'memory scanning' stamp: 'md 11/24/1999 19:58' prior: 30067749! nextObject "Primitive. Answer the next object after the receiver in the enumeration of all objects. Return 0 when all objects have been enumerated." self primitiveFailed.! ! !ProtoObject methodsFor: 'pointing to' stamp: 'AndyKellens 6/11/2010 14:14' prior: 30063520! pointersTo ^self pointersToExcept: #()! ! !ProtoObject methodsFor: 'pointing to' stamp: 'PavelKrivanek 2/18/2012 23:47' prior: 30063640! pointersToExcept: objectsToExclude "Find all objects in the system that hold a pointer to me, excluding those listed" | c pointers object objectsToAlwaysExclude | Smalltalk garbageCollect. pointers := OrderedCollection new. "SystemNavigation >> #allObjectsDo: is inlined here with a slight modification: the marker object is pointers. This gives better results, because the value of pointers, it's inner objects and transient method contexts will not be iterated over." object := self someObject. [ object == pointers ] whileFalse: [ ( object pointsTo: self ) ifTrue: [ pointers add: object ]. object := object nextObject ]. objectsToAlwaysExclude := { thisContext. thisContext sender. thisContext sender sender. objectsToExclude. }. c := thisContext. ^(pointers removeAllSuchThat: [ :ea | (ea == thisContext sender) or: [ "warning: this expression is dependent on closure structure of this method" (objectsToAlwaysExclude identityIncludes: ea) or: [objectsToExclude identityIncludes: ea ]] ]) asArray! ! !ProtoObject methodsFor: 'pointing to' stamp: 'MarianoMartinezPeck 1/18/2012 22:53' prior: 30064763! pointsTo: anObject "Answers true if I hold a reference to anObject, or false otherwise" ^ (self instVarsInclude: anObject) or: [ ^self class == anObject and: [ self class isCompact not ] ]! ! !ProtoObject methodsFor: 'executing' stamp: 'eem 4/8/2009 19:10' prior: 30063084! withArgs: argArray executeMethod: compiledMethod "Execute compiledMethod against the receiver and args in argArray" self primitiveFailed! ! !MetaclassTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/13/2013 16:20' prior: 46781906! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TApplyingOnClassSide>>selector) sourceCode ] raise: Error. self assert: (TApplyingOnClassSide>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#externalTypeAlias: . #baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:.} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:.} asSet. ! ! !Object methodsFor: 'dependencies' stamp: 'ar 2/11/2001 01:55' prior: 28601801! addDependent: anObject "Make the given object one of the receiver's dependents." | dependents | dependents := self dependents. (dependents includes: anObject) ifFalse: [self myDependents: (dependents copyWithDependent: anObject)]. ^ anObject! ! !Object methodsFor: 'asserting' stamp: 'jannik.laval 5/2/2010 16:34' prior: 28604440! assert: aBlock "Throw an assertion error if aBlock does not evaluates to true." aBlock value ifFalse: [AssertionFailure signal: 'Assertion failed']! ! !Object methodsFor: 'asserting' stamp: 'CamilloBruni 5/27/2013 16:20' prior: 39274107! assert: aBlock description: aStringOrBlock "Throw an assertion error if aBlock does not evaluates to true." aBlock value ifFalse: [ AssertionFailure signal: aStringOrBlock value ]! ! !Object methodsFor: 'asserting' stamp: 'jannik.laval 5/2/2010 16:59' prior: 28604671! assert: aBlock descriptionBlock: descriptionBlock "Throw an assertion error if aBlock does not evaluate to true." aBlock value ifFalse: [AssertionFailure signal: descriptionBlock value asString ]! ! !Object methodsFor: 'reflective operations' stamp: 'di 1/9/1999 15:19' prior: 28634159! becomeForward: otherObject "Primitive. All variables in the entire system that used to point to the receiver now point to the argument. Fails if either argument is a SmallInteger." (Array with: self) elementsForwardIdentityTo: (Array with: otherObject)! ! !Object methodsFor: 'reflective operations' stamp: 'MartinDias 7/1/2013 14:55' prior: 43832753! becomeForward: otherObject copyHash: copyHash "Primitive. All variables in the entire system that used to point to the receiver now point to the argument. If copyHash is true, the argument's identity hash bits will be set to those of the receiver. Fails if either argument is a SmallInteger." (Array with: self) elementsForwardIdentityTo: (Array with: otherObject) copyHash: copyHash! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 19:53' prior: 28602125! breakDependents "Remove all of the receiver's dependents." self myDependents: nil! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 19:26' prior: 28602284! canDiscardEdits "Answer true if none of the views on this model has unaccepted edits that matter." self dependents do: [:each | each canDiscardEdits ifFalse: [^ false]] without: self. ^ true! ! !Object methodsFor: 'casing-To be deprecated' stamp: 'StephaneDucasse 8/12/2013 21:27' prior: 28605184! caseError "DO NOT USE THIS METHOD!! It will be removed from Pharo." "Report an error from an in-line or explicit case statement." self error: 'Case not found (', self printString, '), and no otherwise clause'! ! !Object methodsFor: 'casing-To be deprecated' stamp: 'StephaneDucasse 8/12/2013 21:27' prior: 28587772! caseOf: aBlockAssociationCollection "DO NOT USE THIS METHOD!! It will be removed from Pharo." "The elements of aBlockAssociationCollection are associations between blocks. Answer the evaluated value of the first association in aBlockAssociationCollection whose evaluated key equals the receiver. If no match is found, report an error." ^ self caseOf: aBlockAssociationCollection otherwise: [self caseError] "| z | z := {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z" "| z | z := {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z" "The following are compiled in-line:" "#b caseOf: {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}" "#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}"! ! !Object methodsFor: 'casing-To be deprecated' stamp: 'StephaneDucasse 8/12/2013 21:27' prior: 28588482! caseOf: aBlockAssociationCollection otherwise: aBlock "DO NOT USE THIS METHOD!! It will be removed from Pharo." "The elements of aBlockAssociationCollection are associations between blocks. Answer the evaluated value of the first association in aBlockAssociationCollection whose evaluated key equals the receiver. If no match is found, answer the result of evaluating aBlock." aBlockAssociationCollection associationsDo: [:assoc | (assoc key value = self) ifTrue: [^assoc value value]]. ^ aBlock value "| z | z := {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]" "| z | z := {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]}. #b caseOf: z otherwise: [0]" "The following are compiled in-line:" "#b caseOf: {[#a]->[1+1]. ['b' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]" "#b caseOf: {[#a]->[1+1]. ['d' asSymbol]->[2+2]. [#c]->[3+3]} otherwise: [0]"! ! !Object methodsFor: 'introspection' stamp: 'sw 10/16/2000 10:59' prior: 28634967! className "Answer a string characterizing the receiver's class, for use in list views for example" ^ self class name asString! ! !Object methodsFor: 'user interface' stamp: 'RAA 8/2/1999 12:41' prior: 28594110! complexContents ^self! ! !Object methodsFor: 'user interface' stamp: 'rbb 3/1/2005 09:27' prior: 28605408! confirm: aString orCancel: cancelBlock "Put up a yes/no/cancel menu with caption aString. Answer true if the response is yes, false if no. If cancel is chosen, evaluate cancelBlock. This is a modal question--the user must respond yes or no." ^ UIManager default confirm: aString orCancel: cancelBlock! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 19:58' prior: 28602557! dependents "Answer a collection of objects that are 'dependent' on the receiver; that is, all objects that should be notified if the receiver changes." ^ self myDependents ifNil: [#()]! ! !Object methodsFor: 'deprecation' stamp: 'MarcusDenker 3/26/2013 13:17' prior: 34193448! deprecated: anExplanationString "this is not itself deprecated, but a compatibility method for old-style deprecation" (Deprecation method: thisContext sender method explanation: anExplanationString on: 'unknown' in: 'unknown') signal! ! !Object methodsFor: 'deprecation' stamp: 'AndrewBlack 9/6/2009 08:58' prior: 28606062! deprecated: anExplanationString on: date in: version "Warn that the sending method has been deprecated" (Deprecation method: thisContext sender method explanation: anExplanationString on: date in: version) signal! ! !Object methodsFor: 'reflective operations' stamp: 'CamilloBruni 8/1/2012 16:26' prior: 28606366! doesNotUnderstand: aMessage "Handle the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message (typically sent from the machine when a message is sent to the receiver and no method is defined for that selector)." "Testing: (3 activeProcess)" | exception resumeValue | (exception := MessageNotUnderstood new) message: aMessage; receiver: self. resumeValue := exception signal. ^exception reachedDefaultHandler ifTrue: [aMessage sentTo: self] ifFalse: [resumeValue]! ! !Object methodsFor: 'set implementation' stamp: 'Igor.Stasenko 11/13/2009 07:19' prior: 28585804! enclosedSetElement "The receiver is included into a set as an element. Since some objects require wrappers (see SetElement) to be able to be included into a Set, a set sends this message to its element to make sure it getting real object, instead of its wrapper. Only SetElement instance or its subclasses allowed to answer something different than receiver itself" ! ! !Object methodsFor: 'literal testing' stamp: 'md 1/20/2006 17:09' prior: 28638535! hasLiteralSuchThat: testBlock "This is the end of the imbedded structure path so return false." ^ false! ! !Object methodsFor: 'nil testing' stamp: 'md 10/7/2004 15:43' prior: 28586244! ifNil: nilBlock ifNotNilDo: aBlock "Evaluate aBlock with the receiver as its argument." ^ aBlock value: self ! ! !Object methodsFor: 'nil testing' stamp: 'di 11/8/2000 21:04' prior: 28586423! ifNotNilDo: aBlock "Evaluate the given block with the receiver as its argument." ^ aBlock value: self ! ! !Object methodsFor: 'nil testing' stamp: 'md 10/7/2004 15:43' prior: 28586594! ifNotNilDo: aBlock ifNil: nilBlock "Evaluate aBlock with the receiver as its argument." ^ aBlock value: self ! ! !Object methodsFor: 'evaluating' stamp: 'ajh 1/21/2003 12:59' prior: 28586773! in: aBlock "Evaluate the given block with the receiver as its argument." ^ aBlock value: self ! ! !Object methodsFor: 'introspection' stamp: '' prior: 28635141! instVarAt: index "Primitive. Answer a fixed variable in an object. The numbering of the variables corresponds to the named instance variables. Fail if the index is not an Integer or is not the index of a fixed variable. Essential. See Object documentation whatIsAPrimitive." "Access beyond fixed variables." ^self basicAt: index - self class instSize ! ! !Object methodsFor: 'introspection' stamp: '' prior: 28635567! instVarAt: anInteger put: anObject "Primitive. Store a value into a fixed variable in the receiver. The numbering of the variables corresponds to the named instance variables. Fail if the index is not an Integer or is not the index of a fixed variable. Answer the value stored as the result. Using this message violates the principle that each object has sovereign control over the storing of values into its instance variables. Essential. See Object documentation whatIsAPrimitive." "Access beyond fixed fields" ^self basicAt: anInteger - self class instSize put: anObject! ! !Object methodsFor: 'introspection' stamp: 'eem 5/14/2008 13:20' prior: 28636249! instVarNamed: aString "Return the value of the instance variable in me with that name. Slow and unclean, but very useful. " ^ self instVarAt: (self class instVarIndexFor: aString asString ifAbsent: [self error: 'no such inst var']) ! ! !Object methodsFor: 'introspection' stamp: 'eem 5/14/2008 13:20' prior: 28636574! instVarNamed: aString put: aValue "Store into the value of the instance variable in me of that name. Slow and unclean, but very useful. " ^self instVarAt: (self class instVarIndexFor: aString asString ifAbsent: [self error: 'no such inst var']) put: aValue ! ! !Object methodsFor: 'block support' stamp: 'ajh 7/6/2003 20:37' prior: 28594200! mustBeBoolean "Catches attempts to test truth of non-Booleans. This message is sent from the VM. The sending context is rewound to just before the jump causing this exception." ^ self mustBeBooleanIn: thisContext sender! ! !Object methodsFor: 'block support' stamp: 'ClementBera 6/28/2013 10:20' prior: 43833236! mustBeBooleanIn: context "context is the where the non-boolean error occurred. Rewind context to before jump then raise error." "Some constructs are optimized in the compiler : #whileTrue: #whileFalse: #ifTrue: #ifFalse: #ifTrue:ifFalse: #ifFalse:ifTrue: So you cannot by default use them on non boolean objects." "If you really need to use optimized constructs, you can enable Opal compiler and do one of the following : - recompile your method with the pragma : - recompile your class with the method : MyClass class>>compiler ^ super compiler options: #(+ optIlineNone) - call from this method by Object>>#mustBeBooleanInMagic:" | proceedValue | context skipBackBeforeJump. proceedValue := NonBooleanReceiver new object: self; signal: 'proceed for truth.'. ^ proceedValue ~~ false! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 19:55' prior: 28602821! myDependents "Private. Answer a list of all the receiver's dependents." ^ DependentsFields at: self ifAbsent: []! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 19:52' prior: 28603011! myDependents: aCollectionOrNil "Private. Set (or remove) the receiver's dependents list." aCollectionOrNil ifNil: [DependentsFields removeKey: self ifAbsent: []] ifNotNil: [DependentsFields at: self put: aCollectionOrNil]! ! !Object methodsFor: 'flagging' stamp: 'sw 3/7/2001 13:14' prior: 28630930! nominallyUnsent: aSelectorSymbol "From within the body of a method which is not formally sent within the system, but which you intend to have remain in the system (for potential manual invocation, or for documentation, or perhaps because it's sent by commented-out-code that you anticipate uncommenting out someday, send this message, with the selector itself as the argument. This will serve two purposes: (1) The method will not be returned by searches for unsent selectors (because it, in a manner of speaking, sends itself). (2) You can locate all such methods by browsing senders of #nominallyUnsent:" false ifTrue: [self flag: #nominallyUnsent:] "So that this method itself will appear to be sent" ! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:53' prior: 35510443! perform: aSymbol "Send the unary selector, aSymbol, to the receiver. Fail if the number of arguments expected by the selector is not zero. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array new: 0)! ! !Object methodsFor: 'message performing' stamp: 'st 11/5/2004 16:19' prior: 28625452! perform: selector orSendTo: otherTarget "If I wish to intercept and handle selector myself, do it; else send it to otherTarget" ^ (self respondsTo: selector) ifTrue: [self perform: selector] ifFalse: [otherTarget perform: selector]! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:53' prior: 35510864! perform: aSymbol with: anObject "Send the selector, aSymbol, to the receiver with anObject as its argument. Fail if the number of arguments expected by the selector is not one. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: anObject)! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:53' prior: 35511331! perform: aSymbol with: firstObject with: secondObject "Send the selector, aSymbol, to the receiver with the given arguments. Fail if the number of arguments expected by the selector is not two. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: firstObject with: secondObject)! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:53' prior: 35511836! perform: aSymbol with: firstObject with: secondObject with: thirdObject "Send the selector, aSymbol, to the receiver with the given arguments. Fail if the number of arguments expected by the selector is not three. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: aSymbol withArguments: (Array with: firstObject with: secondObject with: thirdObject)! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:49' prior: 35512382! perform: selector withArguments: argArray "Send the selector, aSymbol, to the receiver with arguments in argArray. Fail if the number of arguments expected by the selector does not match the size of argArray. Primitive. Optional. See Object documentation whatIsAPrimitive." ^ self perform: selector withArguments: argArray inSuperclass: self class! ! !Object methodsFor: 'message performing' stamp: 'ClementBera 4/21/2013 14:41' prior: 35512899! perform: selector withArguments: argArray inSuperclass: lookupClass "NOTE: This is just like perform:withArguments:, except that the message lookup process begins, not with the receivers's class, but with the supplied superclass instead. It will fail if lookupClass cannot be found among the receiver's superclasses. Primitive. Essential. See Object documentation whatIsAPrimitive." (selector isSymbol) ifFalse: [^ self error: 'selector argument must be a Symbol']. (selector numArgs = argArray size) ifFalse: [^ self error: 'incorrect number of arguments']. (self class == lookupClass or: [self class inheritsFrom: lookupClass]) ifFalse: [^ self error: 'lookupClass is not in my inheritance chain']. self primitiveFailed! ! !Object methodsFor: 'message performing' stamp: 'nk 4/11/2002 14:13' prior: 28627033! perform: selector withEnoughArguments: anArray "Send the selector, aSymbol, to the receiver with arguments in argArray. Only use enough arguments for the arity of the selector; supply nils for missing ones." | numArgs args | numArgs := selector numArgs. anArray size == numArgs ifTrue: [ ^self perform: selector withArguments: anArray asArray ]. args := Array new: numArgs. args replaceFrom: 1 to: (anArray size min: args size) with: anArray startingAt: 1. ^ self perform: selector withArguments: args! ! !Object methodsFor: 'pointing to' stamp: 'IgorStasenko 9/2/2012 02:24' prior: 28643090! pointsOnlyWeaklyTo: anObject "Assume, we already know that receiver points to an object, answer true if receiver points only weakly to it " self class isWeak ifFalse: [ ^ false ]. 1 to: self class instSize do: [:i | (self instVarAt: i) == anObject ifTrue: [^ false]]. ^ true! ! !Object methodsFor: 'reflective operations' stamp: 'ar 3/2/2001 01:34' prior: 28636924! primitiveChangeClassTo: anObject "Primitive. Change the class of the receiver into the class of the argument given that the format of the receiver matches the format of the argument's class. Fail if receiver or argument are SmallIntegers, or the receiver is an instance of a compact class and the argument isn't, or when the argument's class is compact and the receiver isn't, or when the format of the receiver is different from the format of the argument's class, or when the arguments class is fixed and the receiver's size differs from the size that an instance of the argument's class should have. Note: The primitive will fail in most cases that you think might work. This is mostly because of a) the difference between compact and non-compact classes, and b) because of differences in the format. As an example, '(Array new: 3) primitiveChangeClassTo: Morph basicNew' would fail for three of the reasons mentioned above. Array is compact, Morph is not (failure #1). Array is variable and Morph is fixed (different format - failure #2). Morph is a fixed-field-only object and the array is too short (failure #3). The facility is really provided for certain, very specific applications (mostly related to classes changing shape) and not for casual use." self primitiveFailed! ! !Object methodsFor: 'primitive failure' stamp: 'StephaneDucasse 12/5/2009 21:06' prior: 28610163! primitiveFail "primitiveFail may be invoked by certain methods whose code is translated in C. In such a case primitiveFail and not primitiveFailed should be invoked. The reason is that this code is translated to C by VMMaker. #primitiveFail is implemented in Interpreter of VMMaker." ^ self primitiveFailed! ! !Object methodsFor: 'primitive failure' stamp: 'StephaneDucasse 3/27/2010 23:07' prior: 28610560! primitiveFailed "Announce that a primitive has failed and there is no appropriate Smalltalk code to run." self primitiveFailed: thisContext sender selector! ! !Object methodsFor: 'primitive failure' stamp: 'SvenVanCaekenberghe 4/20/2011 13:26' prior: 28610806! primitiveFailed: selector "Announce that a primitive has failed and there is no appropriate Smalltalk code to run." PrimitiveFailed signalFor: selector! ! !Object methodsFor: 'streaming' stamp: 'MPW 1/1/1901 00:49' prior: 28619413! putOn:aStream ^aStream nextPut:self. ! ! !Object methodsFor: 'reading' stamp: 'damiencassou 5/30/2008 10:56' prior: 28586946! readFromString: aString "Create an object based on the contents of aString." ^ self readFrom: aString readStream! ! !Object methodsFor: 'pointing to' stamp: 'G.C 10/22/2008 09:59' prior: 28643439! refersToLiteral: literal "Answer true if literal is identical to any literal in this array, even if imbedded in further structures. This is the end of the imbedded structure path so return false." ^ false! ! !Object methodsFor: 'dependencies' stamp: '' prior: 28603285! release "Remove references to objects that may refer to the receiver. This message should be overridden by subclasses with any cycles, in which case the subclass should also include the expression super release." self releaseActionMap! ! !Object methodsFor: 'dependencies' stamp: 'sma 2/29/2000 20:23' prior: 28603601! removeDependent: anObject "Remove the given object as one of the receiver's dependents." | dependents | dependents := self dependents reject: [:each | each == anObject]. self myDependents: (dependents isEmpty ifFalse: [dependents]). ^ anObject! ! !Object methodsFor: 'literal testing' stamp: 'ul 11/23/2010 13:28' prior: 28643712! shouldBePrintedAsLiteral ^self isLiteral! ! !Object methodsFor: 'reflective operations' stamp: '' prior: 28638272! someObject "Primitive. Answer the first object in the enumeration of all objects." self primitiveFailed.! ! !Object methodsFor: 'stepping' stamp: 'sw 10/20/1999 14:52' prior: 28643819! stepAt: millisecondClockValue in: aWindow ^ self stepIn: aWindow! ! !Object methodsFor: 'stepping' stamp: 'sw 10/19/1999 08:16' prior: 28643950! stepIn: aWindow ^ self step! ! !Object methodsFor: 'stepping' stamp: 'sw 10/19/1999 08:21' prior: 28644044! stepTime ^ 1000 "milliseconds -- default backstop for objects serving as models of system windows"! ! !Object methodsFor: 'stepping' stamp: 'sw 10/19/1999 08:22' prior: 28644210! stepTimeIn: aSystemWindow ^ 1000 "milliseconds -- default backstop for objects serving as models of system windows"! ! !Object methodsFor: 'stepping' stamp: 'di 1/8/1999 15:04' prior: 28644624! wantsSteps "Overridden by morphic classes whose instances want to be stepped, or by model classes who want their morphic views to be stepped." ^ false! ! !Object methodsFor: 'stepping' stamp: 'sw 10/19/1999 08:26' prior: 28644843! wantsStepsIn: aSystemWindow ^ self wantsSteps! ! !Object methodsFor: 'user interface' stamp: 'RAA 3/31/1999 12:13' prior: 28594848! withoutListWrapper ^self! ! !BehaviorTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/13/2013 16:22' prior: 46787015! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | self shouldnt: [ (TBehavior>>selector) sourceCode ] raise: Error. self assert: (TBehavior>>selector) isRequired. ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#externalTypeAlias: #nbBindingOf: #format #nbFnArgument:generator: #layout #isBehavior) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #localSelectors #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet.! ! UIThemeWatery class removeSelector: #isAbstract! "Kernel"! "KernelTests"! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(14 August 2013 10:50:52 am) Pharo.image priorSource: 15249418! ----STARTUP----an Array(14 August 2013 11:03:19 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 August 2013 11:03:19 am) Pharo-30335.image priorSource: 15299554! ----STARTUP----an Array(14 August 2013 3:21:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/14/2013 15:08' prior: 48804159! commentForCurrentUpdate ^ '- issue 11420 Monticello is looking for all ancestors even when there are none https://pharo.fogbugz.com/default.asp?11420 - issue 11408 https://pharo.fogbugz.com/default.asp?11408 https://pharo.fogbugz.com/default.asp?11408'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/14/2013 15:13'! script128 ^ 'AST-Core-StephaneDucasse.185.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.109.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1563.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.852.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-StephaneDucasse.252.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.67.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.515.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-StephaneDucasse.57.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-StephaneDucasse.387.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.886.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-StephaneDucasse.55.mcz Refactoring-Environment-StephaneDucasse.26.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.90.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.21.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-StephaneDucasse.93.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.611.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1212.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/14/2013 15:13'! update30336 "self new update30336" self withUpdateLog: '- issue 11420 Monticello is looking for all ancestors even when there are none https://pharo.fogbugz.com/default.asp?11420 - issue 11408 https://pharo.fogbugz.com/default.asp?11408 https://pharo.fogbugz.com/default.asp?11408'. self loadTogether: self script128 merge: false. self flushCaches. ! ! !Loader methodsFor: 'initialization' stamp: 'StephaneDucasse 9/10/2010 17:49' prior: 24547763! initialize super initialize. PackagesBeforeLastLoad ifNil: [ PackagesBeforeLastLoad := Set new ]! ! "ScriptLoader30"! !AthensCairoText methodsFor: 'initialization' stamp: 'FernandoOlivero 3/30/2012 14:49' prior: 40527351! initialize super initialize. self beNormal; beSlantNormal. fontSize := 10.! ! !MCFileRepositoryInspector methodsFor: 'initialization' stamp: 'StephaneDucasse 1/23/2013 21:39' prior: 24779363! initialize super initialize. loaded := Set new.! ! !FullscreenMorph methodsFor: 'initialization' stamp: 'gvc 9/19/2006 12:57' prior: 22810734! initialize "Initialize the receiver." super initialize. self changeProportionalLayout; bounds: World clearArea; beSticky! ! !NBExternalResourceExecutor methodsFor: 'initialization' stamp: 'IgorStasenko 3/23/2012 13:06' prior: 27438700! initialize session := NativeBoost uniqueSessionObject ! ! !FreeTypeFontProvider methodsFor: 'initialization' stamp: 'DamienCassou 8/22/2009 15:14' prior: 22750152! initialize super initialize. fileInfos := OrderedCollection new: 100. fileInfoCache := Dictionary new: 100. "keyed by file size" embeddedFileInfoCache := Dictionary new: 10. "keyed by file size" families := Dictionary new. ! ! !KeyChainViewer methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 48026449! initialize keychain := nil asValueHolder. super initialize.! ! !AthensBackgroundChange methodsFor: 'initialization' stamp: 'IgorStasenko 10/28/2011 14:45' prior: 40315492! initialize width :=0. color := Color transparent.! ! !DiffChangeMorph methodsFor: 'initialization' stamp: 'IgorStasenko 12/19/2012 17:26' prior: 20819648! initialize "Initialize the receiver." |descriptionHeight| super initialize. self diffMorph: self newDiffMorph; descriptionMorph: self newDescriptionMorph. descriptionHeight := self descriptionMorph minExtent y. self changeProportionalLayout; addMorph: self descriptionMorph fullFrame: ((0@0 corner: 1@0) asLayoutFrame bottomOffset: descriptionHeight); addMorph: self diffMorph fullFrame: (LayoutFrame identity topOffset: descriptionHeight). self extent: self initialExtent; updateDescriptionFillStyle: self paneColor! ! !Spotlight methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 46672876! initialize super initialize. self beSticky. self layoutPolicy: TableLayout new; listDirection: #leftToRight; wrapCentering: #center; hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: self defaultLayoutInset ; cellInset: 5. self addMorphBack: Smalltalk ui icons smallFindIcon asMorph. search := self createSearchMorph crAction: [ :text | self accepted ]; yourself. self addMorphBack: search. self bindKeyCombination: Character escape toAction: [ self close ].! ! !AthensCairoStrokePaint methodsFor: 'initialization' stamp: 'IgorStasenko 3/8/2012 17:24' prior: 40509340! initialize super initialize. width := 1. capStyle := joinStyle := nil. ! ! !ExampleRadioButtonModel methodsFor: 'initialization' stamp: 'gvc 8/7/2007 13:17' prior: 46464449! initialize "Initialize the receiver." super initialize. self option: #left! ! !BindingsHolder methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 45569941! initialize super initialize. bindings := MorphicBindings new asValueHolder.! ! !TaskbarMorph methodsFor: 'initialization' stamp: 'gvc 4/13/2007 14:51' prior: 52279209! initialize "Initialize the receiver." super initialize. self initializeLayout; initializeAppearance; tasks: #(); orderedTasks: OrderedCollection new! ! !NBFFICallback methodsFor: 'initialization' stamp: 'IgorStasenko 9/15/2012 20:07' prior: 27492164! initialize enterMethod := self class callbackEnterMethod. index := NativeBoost extraRootsRegistry registerCallback: self. self installTrunk. NBExternalResourceManager addResource: self data: {trunk. index }.! ! !CairoScaledFont methodsFor: 'initialization' stamp: 'IgorStasenko 8/28/2012 12:34' prior: 40488867! initialize self status ~= CAIRO_STATUS_SUCCESS ifTrue: [ self error: 'Something is wrong!!' ]. self registerAsExternalResource ! ! !ZnByteEncoder methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 12/17/2012 14:46' prior: 55291112! initialize super initialize. strict := true! ! !VTermInputDriver methodsFor: 'initialization' stamp: 'CamilloBruni 9/29/2011 18:32' prior: 54607597! initialize normal := Dictionary new. self initializeNormal: normal. ss3 := Dictionary new. self initializeSS3: ss3. csi := Dictionary new. self initializeCSI: csi! ! !TextMethodLink methodsFor: 'initialization' stamp: 'CamilloBruni 3/9/2012 16:24' prior: 52741841! initialize super initialize. browseSenders := false.! ! !Socket methodsFor: 'initialization' stamp: 'ClementBera 7/26/2013 17:05' prior: 46478698! initialize: socketType "Initialize a new socket handle. If socket creation fails, socketHandle will be set to nil." | semaIndex readSemaIndex writeSemaIndex | semaphore := Semaphore new. readSemaphore := Semaphore new. writeSemaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: semaphore. readSemaIndex := Smalltalk registerExternalObject: readSemaphore. writeSemaIndex := Smalltalk registerExternalObject: writeSemaphore. socketHandle := self primSocketCreateNetwork: 0 type: socketType receiveBufferSize: 8000 sendBufSize: 8000 semaIndex: semaIndex readSemaIndex: readSemaIndex writeSemaIndex: writeSemaIndex. socketHandle ifNil: [ "socket creation failed" Smalltalk unregisterExternalObject: semaphore. Smalltalk unregisterExternalObject: readSemaphore. Smalltalk unregisterExternalObject: writeSemaphore. readSemaphore := writeSemaphore := semaphore := nil ] ifNotNil: [ self register ]! ! !RGBehaviorDefinition methodsFor: 'initialization' stamp: 'VeronicaUquillas 5/12/2011 10:33' prior: 31580882! initialize super initialize. methods:= IdentityDictionary new. protocols:= Set new.! ! !Duration methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:51' prior: 21038076! initialize super initialize. self seconds: 0 nanoSeconds: 0. ! ! !FLLargeIdentityDictionary methodsFor: 'initialization' stamp: 'ul 12/18/2011 11:31' prior: 21565417! initialize super initialize. keys := Array new: 4096. values := Array new: 4096! ! !OCOptimizedBlockScope methodsFor: 'initialization' stamp: 'JorgeRessia 9/23/2010 13:16' prior: 34913444! initialize super initialize. isInlinedLoop := false! ! !RGClassDefinition methodsFor: 'initialization' stamp: 'VeronicaUquillas 4/28/2011 21:30' prior: 31591775! initialize super initialize. classVariables:= OrderedCollection new. poolDictionaries:= OrderedCollection new.! ! !NBExternalObject methodsFor: 'initialization' stamp: 'Igor.Stasenko 4/29/2010 12:25' prior: 27430721! initialize handle := NBExternalHandle new! ! !TextStopConditions methodsFor: 'initialization' stamp: 'nice 3/8/2010 14:31' prior: 52849989! initialize "Initialize the default stop conditions." stops := Array new: 258. self endOfRun: #endOfRun. self crossedX: #crossedX.! ! !InputEventSensor methodsFor: 'initialization' stamp: 'StephaneDucasse 3/16/2012 20:27' prior: 23633863! initialize "Initialize the receiver" super initialize. eventQueue := WaitfreeQueue new. mouseButtons := 0. mousePosition := 0 @ 0. modifiers := 0! ! !CalendarMorph methodsFor: 'initialization' stamp: 'Jon 11/3/2011 10:16' prior: 18670005! initialize super initialize. touchPoints := Dictionary new. ! ! !AthensSceneView methodsFor: 'initialization' stamp: 'IgorStasenko 6/3/2013 14:28' prior: 40397491! initialize super initialize. transform := AthensAffineTransform new. self hResizing: #spaceFill. self vResizing: #spaceFill. color := Color transparent. state := Dictionary new. self extent: self minimumExtent. ! ! !NECTestSuperClass methodsFor: 'initialization' stamp: '' prior: 27865516! initialize superInstVar := Dictionary new! ! !FLSerializer methodsFor: 'initialization' stamp: 'MarianoMartinezPeck 7/28/2012 11:37' prior: 21658256! initialize super initialize. self signature: self class defaultSignature. self version: self class currentVersion. header := FLHeader new.! ! !KMBuffer methodsFor: 'initialization' stamp: 'GuillermoPolito 6/24/2012 12:03' prior: 24104273! initialize buffer := OrderedCollection new.! ! !ThemeSettings methodsFor: 'initialization' stamp: 'AlainPlantec 12/20/2009 21:54' prior: 53077125! initialize "Initialize the receiver." super initialize. self autoSelectionColor: true; windowColor: self defaultWindowColor; selectionColor: self defaultSelectionColor; buttonColor: self defaultButtonColor; scrollbarColor: self defaultScrollbarColor; standardColorsOnly: false! ! !TreeModel methodsFor: 'initialization' stamp: 'MarcusDenker 7/20/2013 21:01' prior: 48009544! initialize super initialize. treeModel := SpecTreeModel model: self. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TextHighlight methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/22/2012 15:57' prior: 52705792! initialize "Initialize the receiver." super initialize. lineHighligths := #(). self color: Color yellow; lineRange: (1 to: 0); borderWidth: 0; borderColor: Color transparent; borderSides: #(top right bottom left); fillWidth: false! ! !KMStorage methodsFor: 'initialization' stamp: 'GuillermoPolito 1/21/2012 20:49' prior: 24191423! initialize annonimousRegistry := Set new. namedRegistry := Dictionary new.! ! !TextConverter methodsFor: 'initialization' stamp: 'HenrikSperreJohansen 2/5/2010 20:24' prior: 52571597! initialize latin1Map := self class latin1Map. latin1Encodings := self class latin1Encodings.! ! !TabExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 45585556! initialize super initialize. manager := TabManager new. manager when: #tabManagerDeleted send: #delete to: self. listModel := ListComposableModel new. listModel items: ((1 to: 1000) asOrderedCollection)! ! !BrowserCommentTextMorph methodsFor: 'initialization' stamp: 'AlainPlantec 8/26/2011 17:53' prior: 18514341! initialize super initialize. self styled: false ! ! !ProtoObject methodsFor: 'initialization' stamp: 'MarianoMartinezPeck 8/24/2012 15:59' prior: 30063339! initialize "Subclasses should redefine this method to perform initializations on instance creation" ! ! !BlocEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48022085! initialize super initialize. block := nil asValueHolder! ! !NewValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 8/20/2012 11:38' prior: 28447027! initialize super initialize. announcer := Announcer new. lock := false.! ! !RGOrganization methodsFor: 'initialization' stamp: 'VeronicaUquillas 5/12/2011 11:01' prior: 31742970! initialize super initialize. self categories: OrderedCollection new.! ! !IRTempVector methodsFor: 'initialization' stamp: 'MarcusDenker 8/19/2010 01:09' prior: 34859207! initialize vars := Dictionary new! ! !JoinSide methodsFor: 'initialization' stamp: 'gvc 11/1/2006 11:09' prior: 24103022! initialize "Initialize the receiver." super initialize. self highlights: #(); offset: 0@0; range: (1 to: 1); lineRange: (1 to: 0); color: Color yellow; text: ''! ! !RBLintRuleTest methodsFor: 'initialization' stamp: '' prior: 30716926! initialize name := ''! ! !MethodWidget methodsFor: 'initialization' stamp: 'NorbertHartl 3/28/2013 12:46' prior: 34206272! initialize super initialize. methodsSelection := IdentityDictionary new.! ! !SelectionValueHolder methodsFor: 'initialization' stamp: '' prior: 32927939! initialize super initialize. index := 0 asValueHolder. selection := nil asValueHolder. index whenChangedSend: #contentsChanged to: self. selection whenChangedSend: #contentsChanged to: self.! ! !MockTranscript methodsFor: 'initialization' stamp: 'JorgeRessia 3/4/2010 21:19' prior: 38340234! initialize super initialize. stream := String new writeStream.! ! !MonticelloRepositoryBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48001107! initialize super initialize. order := self class order! ! !NBSTMethodArgument methodsFor: 'initialization' stamp: 'IgorStasenko 8/5/2011 18:00' prior: 27681143! initialize isReceiver := false! ! !PragmaMenuAndShortcutRegistration methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 45588293! initialize super initialize. items := OrderedCollection new.! ! !DeepCopier methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:50' prior: 20610365! initialize super initialize. self initialize: 4096. ! ! !DeepCopier methodsFor: 'initialization' stamp: 'stephane.ducasse 9/25/2008 17:46' prior: 20610508! initialize: size references := IdentityDictionary new: size. ! ! !PermissionsEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48000696! initialize lock := false. user := nil asValueHolder. super initialize.! ! !AthensTextRenderer methodsFor: 'initialization' stamp: 'IgorStasenko 10/20/2011 13:07' prior: 40333595! initialize color := Color black.! ! !RGAbstractContainer methodsFor: 'initialization' stamp: 'VeronicaUquillas 4/14/2011 10:20' prior: 31567548! initialize super initialize. elements:= IdentityDictionary new.! ! !WeakRegistry methodsFor: 'initialization' stamp: 'Igor.Stasenko 5/28/2010 05:12' prior: 54818399! initialize valueDictionary := WeakIdentityKeyDictionary new. list := WeakFinalizationList new. sema := Semaphore forMutualExclusion. self installFinalizer.! ! !IntegerEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 48030047! initialize super initialize. integer := 0 asValueHolder! ! !NBNativeCodeGen methodsFor: 'initialization' stamp: 'IgorStasenko 5/9/2011 13:12' prior: 27637054! initialize asm := self newAssembler. options := Set new. proxy := NBInterpreterProxy forGenerator: self. self parseOptions: self defaultOptions. ! ! !LogicalFontManager methodsFor: 'initialization' stamp: 'tween 3/14/2007 22:56' prior: 24593615! initialize super initialize. fontProviders := OrderedCollection new: 10 ! ! !AbstractApiSetter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 48030899! initialize method := nil asValueHolder. model := nil asValueHolder. retrievingMethod := nil asValueHolder. isSetting := false. super initialize. self registerEvents! ! !UIThemeWatery methodsFor: 'initialization' stamp: 'gvc 2/16/2009 17:22' prior: 45771485! initialize "Initialize the receiver." super initialize. self windowActiveDropShadowStyle: #diffuse! ! !BasicCommandLineHandler methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/23/2013 14:27' prior: 39090192! initialize super initialize. commandLine := CommandLineArguments new! ! !MetacelloVisitedPackages methodsFor: 'initialization' stamp: 'dkh 10/21/2009 15:17' prior: 26311903! initialize groups := Set new. packages := Set new. projects := Set new.! ! !MCThreeWayMerger methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:04' prior: 25068441! initialize super initialize. index := MCDefinitionIndex new. provisions := Set new! ! !AJAlignmentInstruction methodsFor: 'initialization' stamp: '' prior: 16783899! initialize super initialize. self alignByte.! ! !CodeImporter methodsFor: 'initialization' stamp: 'GuillermoPolito 5/5/2012 17:06' prior: 19487157! initialize codeDeclarations := OrderedCollection new. parserClass := ChunkFileFormatParser.! ! !CCompilationContext methodsFor: 'initialization' stamp: 'MarcusDenker 5/26/2013 09:29' prior: 39234340! initialize options := Set new! ! !MCPatchOperation methodsFor: 'initialization' stamp: 'StephaneDucasse 6/24/2011 15:13' prior: 24930174! initialize super initialize. "set default values" self beNonConflict! ! !AthensCairoPath methodsFor: 'initialization' stamp: 'FernandoOlivero 3/28/2012 19:10' prior: 40467122! initialize handle value = 0 ifTrue: [ self error: 'Error creating new path' ]. NBExternalResourceManager addResource: self data: handle! ! !BalloonCanvas methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:42' prior: 17901855! initialize super initialize. aaLevel := 1. deferred := false.! ! !Tab methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45581790! initialize super initialize. self changeProportionalLayout. state := TabEnabled tab: self. closeable := true. label := self buildLabel: 'tab' withIcon: self defaultIcon. closeIcon := AlphaImageMorph withForm: self class closeIcon. morph := nil. actions := OrderedCollection new. retrievingSemaphore := Semaphore new. self addLabel. self addIcon. self addActionsToIcon.! ! !EyeInspector methodsFor: 'initialization' stamp: 'ClementBera 7/3/2013 12:45' prior: 43580540! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged:" object := nil asValueHolder. super initialize. self whenWindowChanged: [ :myWindow | myWindow whenClosedDo: [ self close ] ].! ! !OCOpalExamples methodsFor: 'initialization' stamp: 'MarcusDenker 8/25/2010 15:49' prior: 34997288! initialize collection := OrderedCollection new! ! !EdgeGripMorph methodsFor: 'initialization' stamp: 'GaryChambers 1/25/2011 13:12' prior: 21097525! initialize "Initialize the receiver." super initialize. self fitTargetOwner: false; edgeName: #right; extent: self defaultWidth @ self defaultHeight; hResizing: #spaceFill; vResizing: #spaceFill! ! !MCConfiguration methodsFor: 'initialization' stamp: 'ar 5/27/2005 17:28' prior: 24670575! initialize super initialize. log := DefaultLog.! ! !AbstractSpec methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 45593328! initialize super initialize. bindings := BindingsHolder new.! ! !AbstractClassInstaller methodsFor: 'initialization' stamp: 'ToonVerwaest 3/22/2011 17:43' prior: 41742542! initialize builder := SlotClassBuilder new. builder client: self! ! !RBPackageEnvironment methodsFor: 'initialization' stamp: 'lr 4/12/2010 15:25' prior: 30889227! initialize super initialize. packages := Set new! ! !MCPackageCache methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:03' prior: 41430127! initialize super initialize. sorter := MCVersionSorter new. fileNames := Dictionary new.! ! !FLAnalyzer methodsFor: 'initialization' stamp: 'MartinDias 2/21/2013 23:35' prior: 21420534! initialize super initialize. self setDefaultAnalysis. self useLightMappers. pluggableSubstitutions := OrderedCollection new. internalClasses := IdentitySet new. internalMethods := IdentitySet new. globalEnvironment := self class environment. globalSymbols := self class defaultGlobalSymbols asIdentitySet. ! ! !DiffMapMorph methodsFor: 'initialization' stamp: 'gvc 10/26/2006 14:08' prior: 20828372! initialize "Initialize the receiver." super initialize. self mappings: #()! ! !AthensTigerShape methodsFor: 'initialization' stamp: '' prior: 40636440! initialize fill := stroke := false.! ! !RGClassDescriptionDefinition methodsFor: 'initialization' stamp: 'VeronicaUquillas 11/24/2010 14:00' prior: 31616407! initialize super initialize. instanceVariables:= OrderedCollection new.! ! !AIContext methodsFor: 'initialization' stamp: 'ClementBera 10/22/2012 20:39' prior: 35478335! initialize self flag: 'for now the easies solution'.! ! !AbstractResizerMorph methodsFor: 'initialization' stamp: 'md 2/24/2006 23:01' prior: 17433465! initialize super initialize. self color: Color transparent! ! !MethodModification methodsFor: 'initialization' stamp: 'ToonVerwaest 3/28/2011 19:47' prior: 41787791! initialize addedSlots := Dictionary new! ! !RBClassEnvironment methodsFor: 'initialization' stamp: 'lr 2/26/2009 13:35' prior: 30400681! initialize super initialize. classes := IdentitySet new. metaClasses := IdentitySet new! ! !TranslucentColor methodsFor: 'initialization' stamp: 'AlexandreBergel 1/29/2013 12:57' prior: 53511841! initialize super initialize. alpha := 1.0! ! !CairoBackendCache methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/3/2013 13:26' prior: 43723841! initialize self flush! ! !FileCompilerRequestor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 15:38' prior: 45172596! initialize interactive := false.! ! !ExpanderMorph methodsFor: 'initialization' stamp: 'GaryChambers 12/8/2011 14:42' prior: 21364698! initialize "Initialize the receiver." super initialize. self changeTableLayout; listDirection: #topToBottom; hResizing: #spaceFill; vResizing: #spaceFill; titleMorph: self defaultTitleMorph; expanded: false! ! !SoundTheme methodsFor: 'initialization' stamp: 'gvc 9/12/2007 14:38' prior: 50623941! initialize "Initialize the receiver." super initialize. self initializeSounds! ! !GeneralScrollPane methodsFor: 'initialization' stamp: 'gvc 9/7/2006 10:54' prior: 22869843! initialize "Initialize the receiver." super initialize. self scroller: self newScroller; hScrollbar: self newHScrollbar; vScrollbar: self newVScrollbar; scrollTarget: self defaultScrollTarget. self addMorph: self scroller; resizeScroller! ! !MetacelloLoaderPolicy methodsFor: 'initialization' stamp: 'DaleHenrichs 03/08/2010 14:47' prior: 25848067! initialize self repositoryMap; cacheRepository; ensuredMap. ignoreImage := false ! ! !ColorPresenterMorph methodsFor: 'initialization' stamp: 'gvc 9/22/2006 09:34' prior: 19702389! initialize "Initialize the receiver." super initialize. self borderWidth: 0; changeTableLayout; labelMorph: self newLabelMorph; solidLabelMorph: self newLabelMorph; contentMorph: self newContentMorph; addMorphBack: self contentMorph! ! !MessageList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/29/2010 11:27' prior: 25608785! initialize "Initialization" super initialize. useAsASet := false. methodReferenceList := OrderedCollection new. self clearAll. environment := self environment. versionsHistoryList := SortedCollection new sortBlock: [:a :b | a value < b value]. self addFirstVersion. sortedMethodReferencesList := OrderedCollection new.! ! !DashedBorder methodsFor: 'initialization' stamp: 'gvc 4/24/2007 15:50' prior: 41413384! initialize "Initialize the receiver." super initialize. self dashColors: {Color black. Color white}; dashLengths: #(1 1)! ! !SVColorSelectorMorph methodsFor: 'initialization' stamp: 'gvc 9/22/2006 10:22' prior: 32667146! initialize "Initialize the receiver." super initialize. self locationMorph: self newLocationMorph. self clipSubmorphs: true; color: Color blue; borderStyle: (BorderStyle inset width: 1); addMorphBack: self locationMorph; addMorphBack: self blackGradientMorph! ! !SpecLayoutAdd methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45593749! initialize super initialize. self selector: #add:. layoutFrame := LayoutFrame identity. subwidget := nil.! ! !CalendarDayMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 1/27/2013 12:42' prior: 18660159! initialize super initialize. self highlighted: false! ! !UUIDGenerator methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:15' prior: 54450049! initialize super initialize. self setupRandom. semaphoreForGenerator := Semaphore forMutualExclusion. ! ! !RBSmalllintContext methodsFor: 'initialization' stamp: '' prior: 31387132! initialize self computeLiterals! ! !GeneralScrollBar methodsFor: 'initialization' stamp: 'GaryChambers 11/16/2011 13:29' prior: 22853336! initialize "Initialize the receiver." super initialize. self showWhenNeeded! ! !SmallIntegerLayout methodsFor: 'initialization' stamp: 'CamilloBruni 10/16/2011 20:21' prior: 41783504! initialize super initialize. self host: SmallInteger.! ! !ZnMultiPartFormDataEntity methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 10/5/2010 17:17' prior: 55583273! initialize super initialize. self contentType: self mimeTypeWithBoundary ! ! !AJx86Assembler methodsFor: 'initialization' stamp: 'CamilloBruni 3/30/2012 16:20' prior: 16873422! initialize is64 := false. self reset.! ! !TabAction methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 45591580! initialize super initialize. icon := ImageMorph new! ! !WeakKeyDictionary methodsFor: 'initialization' stamp: 'mvl 3/11/2007 21:40' prior: 54789470! initialize: n expired := 0. ^super initialize: n! ! !ZdcSecureSocketStream methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 5/18/2011 16:00' prior: 55093463! initialize super initialize. connecting := false! ! !MethodClassifier methodsFor: 'initialization' stamp: 'CamilloBruni 1/30/2013 21:02' prior: 26344038! initialize self buildPrefixDictionary.! ! !StringMorphEditor methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:08' prior: 51180571! initialize "Initialize the receiver. Give it a white background" super initialize. self backgroundColor: Color white. self color: Color red! ! !ZnChunkedReadStream methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 5/18/2013 00:36' prior: 39593719! initialize atEnd := false. chunkCount := 0. totalSize := 0! ! !InspectorWrapper methodsFor: 'initialization' stamp: 'StephaneDucasse 8/4/2013 16:54' prior: 48025770! initialize super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer weak on: WidgetBuilt send: #setRefreshedToTrue to: self. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !AbstractFontSelectorDialogWindow methodsFor: 'initialization' stamp: 'gvc 4/21/2009 17:22' prior: 17221478! initialize "Initialize the receiver." self isBold: false; isItalic: false; isUnderlined: false; isStruckOut: false; previewText: self defaultPreviewText; fontFamilyIndex: 0; fontSizeIndex: 0. super initialize! ! !ImagePreviewMorph methodsFor: 'initialization' stamp: 'gvc 10/9/2006 14:42' prior: 23548371! initialize "Initialize the receiver." super initialize. self changeTableLayout; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; cellInset: 16; imageMorph: self newImageMorph; textMorph: self newTextMorph; addMorphBack: self imageMorph; addMorphBack: self textMorph! ! !AJCallInfo methodsFor: 'initialization' stamp: '' prior: 16789428! initialize arguments := OrderedCollection new. stackSize := 0. stackAlignment := 1. noCleanup := false.! ! !UserManager methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 48000389! initialize super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !KMPragmaKeymapBuilder methodsFor: 'initialization' stamp: 'GuillermoPolito 12/17/2010 00:58' prior: 24167488! initialize super initialize. pragmaKeywords := OrderedCollection new. ! ! !MCServerRegistry methodsFor: 'initialization' stamp: 'SeanDeNigris 8/26/2012 18:18' prior: 24979685! initialize super initialize. registry := Dictionary new.! ! !IdentifierChooserMorph methodsFor: 'initialization' stamp: 'AlainPlantec 11/29/2010 09:27' prior: 23503282! initialize super initialize. self borderWidth: 1. self layoutInset: 0@0. self changeTableLayout. self hResizing: #shrinkWrap. self vResizing: #shrinkWrap. self color: self defaultBaseColor. ! ! !BlockStartLocator methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:43' prior: 18320638! initialize super initialize. nextJumpIsAroundBlock := false! ! !OCInstanceScope methodsFor: 'initialization' stamp: 'MarcusDenker 5/18/2013 10:44' prior: 38912299! initialize vars := OCKeyedSet keyBlock: [:var | var name]. selfVar := OCSpecialVariable new name: 'self'; scope: self; yourself. superVar := OCSpecialVariable new name: 'super'; scope: self; yourself.! ! !ZnDefaultServerDelegate methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 12/23/2012 17:52' prior: 55418172! initialize self map: 'welcome' to: #welcome:; map: 'help' to: #help:; map: 'echo' to: #echoRequest:; map: 'dw-bench' to: #dwbench:; map: 'favicon.ico' to: #favicon:; map: 'random' to: #random:; map: 'bytes' to: #bytes:; map: 'status' to: #status:; map: 'unicode' to: #unicode:; map: 'session' to: #sessionRequest:; map: 'error' to: #errorResponse:; map: '/' to: 'welcome'! ! !CircleMorph methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:46' prior: 19039255! initialize super initialize. self extent: 40@40; color: Color green lighter; yourself! ! !TabBar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45588612! initialize super initialize. tabs := OrderedCollection new. selectionHistory := OrderedCollection new. menuButton := self createMenuButton. numberOfSelectedTabs := 1. self changeProportionalLayout. self addMenuButton. ! ! !WindowModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48005226! initialize super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !SimpleEditor methodsFor: 'initialization' stamp: 'jmv 11/4/2008 13:42' prior: 33257989! initialize "Initialize the state of the receiver. Subclasses should include 'super initialize' when redefining this message to insure proper initialization." super initialize. self changeString: ''! ! !ColorSelectorDialogWindow methodsFor: 'initialization' stamp: 'gvc 9/22/2006 10:06' prior: 19710126! initialize "Initialize the receiver." self basicSelectedColor: Color blue. super initialize. self selectedColor: self selectedColor! ! !ChunkFileFormatParser methodsFor: 'initialization' stamp: 'GuillermoPolito 5/5/2012 22:06' prior: 19030074! initialize parsedDeclarations := OrderedCollection new.! ! !SharedQueue methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:22' prior: 33209477! initialize super initialize. monitor := Monitor new. items := OrderedCollection new. ! ! !ToolRegistry methodsFor: 'initialization' stamp: 'cb 6/25/2013 13:32' prior: 41609613! initialize "symbols used as keys " tools := IdentityDictionary new. self initDefaultToolSet! ! !ScrollBar methodsFor: 'initialization' stamp: 'AlainPlantec 12/17/2009 11:18' prior: 32818461! initialize super initialize. scrollDelta := 0.02. pageDelta := 0.2. ! ! !NBExternalUnionFields methodsFor: 'initialization' stamp: 'CiprianTeodorov 1/19/2013 17:05' prior: 27479763! initialize super initialize. nbFields := 0.! ! !SliderModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48003782! initialize super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !AthensCurveFlattener methodsFor: 'initialization' stamp: 'IgorStasenko 4/18/2013 17:58' prior: 40285327! initialize super initialize. transform := AthensAffineTransform new. "identity" self toleranceMultiplier: self defaultTolerance! ! !PasswordInitializationDialogWindow methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48003446! initialize super initialize. self textFont: Smalltalk ui theme textFont.! ! !ColorEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 48030652! initialize super initialize. color := Color black asValueHolder. morph := Morph new color: self color; extent: 25@25; yourself! ! !ZdcSecureSMTPClient methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 12/5/2011 20:13' prior: 55086582! initialize super initialize. self useSSL! ! !JoinSection methodsFor: 'initialization' stamp: 'gvc 11/1/2006 14:20' prior: 24100873! initialize "Initialize the receiver." super initialize. self src: JoinSide new; dst: JoinSide new; shape: Polygon new; width: 0; borderWidth: 0; borderColor: Color transparent; type: #modification! ! !NativeBoost methodsFor: 'initialization' stamp: 'cipt 11/3/2012 18:28' prior: 27916368! initialize "once we have call gate function, we can turn bootstrapping mode off" bootstrapping := true. "first, wipe out all native code from image" self class clearNativeCode. "now, we can enable the native code" self primEnableNativeCode. Current := self. "set the class var" "Init basic stuff" self initializeExternalHeap. "callback counter" callbackCounterAddr := self allocate: 4. callbackCounterAddr nbInt32AtOffset: 0 put: 0. " finally, generate callgate function to finish bootstrap procedure" self callgateFunctionAddress. "notify any observers about session change" self class announcer announce: NBSessionChangeAnnouncement ! ! !NewListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48023077! initialize super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. self registerEvents! ! !MultistateLabelMorph methodsFor: 'initialization' stamp: 'gvc 3/4/2010 15:20' prior: 27337103! initialize "Set up a default colour map." colorMap := self defaultColorMap. super initialize! ! !NOCModel methodsFor: 'initialization' stamp: 'CamilloBruni 8/3/2012 21:26' prior: 27905365! initialize super initialize. self contract. table := NOCCompletionTable default. classTable := NOCCompletionTable classes.! ! !NewListRenderer methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 45602862! initialize super initialize. wantsSteps := false. listSource := nil asValueHolder. itemHeight := nil asValueHolder. maxWidth := 0 asValueHolder. hasHeader := false asValueHolder. potentialDropIndex := 0 asValueHolder. steppingTime := 100. mouseDownIndex := 0 asValueHolder. listSource whenChangedDo: [:e | itemHeight contents: e itemHeight. e whenItemsChangedDo: [ maxWidth contents: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !Termcap methodsFor: 'initialization' stamp: 'CamilloBruni 10/19/2012 14:45' prior: 52317437! initialize cache := Dictionary new. self initializeDefaultSequences.! ! !WorldMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 7/1/2013 10:09' prior: 42869860! initialize worldState := WorldState new. super initialize! ! !NBExternalResourceManager methodsFor: 'initialization' stamp: 'IgorStasenko 6/2/2012 14:43' prior: 27442227! initialize registry := NBFinalizationRegistry new! ! !Announcer methodsFor: 'initialization' stamp: 'IgorStasenko 3/12/2011 16:50' prior: 17576075! initialize super initialize. registry := SubscriptionRegistry new.! ! !CommandLineTestRunner methodsFor: 'initialization' stamp: 'CamilloBruni 2/10/2013 14:48' prior: 19744788! initialize super initialize. shouldSerializeError := false.! ! !RBSelectorEnvironment methodsFor: 'initialization' stamp: '' prior: 31315164! initialize super initialize. classSelectors := IdentityDictionary new. metaClassSelectors := IdentityDictionary new! ! !SystemAnnouncement methodsFor: 'initialization' stamp: 'GuillermoPolito 8/3/2012 13:20' prior: 51480593! initialize super initialize. self setTimeStamp.! ! !PharoTheme methodsFor: 'initialization' stamp: 'tg 8/31/2010 13:51' prior: 29305825! initialize "self beCurrent" super initialize. self windowActiveDropShadowStyle: #nodiffuse! ! !AthensFontDescription methodsFor: 'initialization' stamp: 'FernandoOlivero 1/14/2012 20:08' prior: 40533557! initialize super initialize. family := 'monospace'. options := Dictionary new. options at:#weight put: #normal; at:#slant put: #normal. size := 14. ! ! !Monitor methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:08' prior: 26553274! initialize super initialize. mutex := Semaphore forMutualExclusion. queuesMutex := Semaphore forMutualExclusion. nestingLevel := 0.! ! !NautilusPluginManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/11/2011 13:39' prior: 28205443! initialize super initialize. pluginClassesSelected := Dictionary new. pluginsSelected := Dictionary new.! ! !LIFOQueue methodsFor: 'initialization' stamp: 'Igor.Stasenko 10/16/2010 03:37' prior: 24245814! initialize | dummy | dummy := self newItem. dummy next: nil; object: dummy. head := dummy.! ! !TextHighlightByBounds methodsFor: 'initialization' stamp: 'gvc 10/31/2006 11:16' prior: 52712579! initialize "Initialize the receiver." super initialize. self color: Color yellow; lineRange: (1 to: 0); borderWidth: 0; borderColor: Color transparent; borderSides: #(top right bottom left); fillWidth: false! ! !IRPushClosureCopy methodsFor: 'initialization' stamp: 'MarcusDenker 5/19/2011 14:55' prior: 34852847! initialize super initialize. tempMap := Dictionary new. ! ! !MorphTreeChunkPager methodsFor: 'initialization' stamp: 'AlainPlantec 1/22/2010 16:17' prior: 26891257! initialize super initialize. nextPageAllowed := true! ! !PlainGroupboxMorph methodsFor: 'initialization' stamp: 'gvc 1/17/2008 11:44' prior: 29354662! initialize "Initialize the receiver." super initialize. self borderStyle: (self theme plainGroupPanelBorderStyleFor: self); changeTableLayout; layoutInset: (4@4 corner: 4@4); cellInset: 8; vResizing: #spaceFill; hResizing: #spaceFill! ! !InteractiveResolver methodsFor: 'initialization' stamp: 'cwp 10/27/2009 10:29' prior: 23900629! initialize self flushLocalCache! ! !DummyKeyPressedPlugin methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/10/2011 17:55' prior: 21021122! initialize super initialize. counter := 0. self stringMorph contents: 'Keys pressed: ', counter printString; openInWorld. ! ! !AbstractMethodWidget methodsFor: 'initialization' stamp: '' prior: 17246371! initialize super initialize. MethodsIconsCache ifNil: [ MethodsIconsCache := WeakIdentityKeyDictionary new ]! ! !MCCacheRepository methodsFor: 'initialization' stamp: 'CamilloBruni 7/6/2012 16:20' prior: 24615879! initialize cacheEnabled := true. super initialize.! ! !ASTInterpreter methodsFor: 'initialization' stamp: 'ClementBera 10/22/2012 10:57' prior: 35494439! initialize super initialize. gotoContext := false.! ! !CairoFreetypeFontRenderer methodsFor: 'initialization' stamp: 'IgorStasenko 9/2/2012 00:24' prior: 40537175! initialize utfConverter := CairoUTF8Converter new. advance := 0@0. cache := CairoBackendCache soleInstance.! ! !RBConfigurableFormatter methodsFor: 'initialization' stamp: '' prior: 30468954! initialize super initialize. lineStart := 0. indent := 0. lookaheadCode := IdentityDictionary new. codeStream := WriteStream on: (String new: 256)! ! !PathShape methodsFor: 'initialization' stamp: 'gvc 10/31/2006 10:35' prior: 29257835! initialize "Initialize the receiver." super initialize. self vertices: OrderedCollection new! ! !RxmSubstring methodsFor: 'initialization' stamp: 'lr 11/4/2009 22:38' prior: 32475145! initialize super initialize. self beCaseSensitive! ! !ImageFillStyle methodsFor: 'initialization' stamp: 'gvc 1/28/2009 17:40' prior: 23537044! initialize "Initialize the receiver." super initialize. self origin: 0@0; offset: 0@0! ! !JobProgressBarMorph methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37943033! initialize super initialize. progressBar := ProgressBarMorph new. progressBar hResizing: #spaceFill. button := Smalltalk ui icons smallErrorIcon asMorph. self extent: 200@20. self color: Color transparent; layoutPolicy: TableLayout new; listDirection: #leftToRight; cellPositioning: #leftCenter; cellInset: 3; listCentering: #center; hResizing: #spaceFill; vResizing: #shrinkWrap. self addMorphBack: progressBar; addMorphBack: button.! ! !MenuRegistration methodsFor: 'initialization' stamp: 'AlainPlantec 2/11/2010 16:35' prior: 25544033! initialize super initialize. isGroup := false! ! !TabModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48012097! initialize super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !MultistateButtonMorph methodsFor: 'initialization' stamp: 'gvc 10/21/2008 16:07' prior: 27328497! initialize "Initialize the receiver." self stateMap: KeyedTree new. enabled := true. active := true. over := false. down := false. super initialize! ! !RBRegexRefactoring methodsFor: 'initialization' stamp: '' prior: 31209552! initialize super initialize. matchers := OrderedCollection new! ! !SimpleBalloonMorph methodsFor: 'initialization' stamp: 'AlainPlantec 2/22/2011 17:57' prior: 33239890! initialize "Initialize the the receiver." super initialize. self beStraightSegments! ! !SimpleBorder methodsFor: 'initialization' stamp: 'sd 11/25/2008 14:47' prior: 33242684! initialize super initialize. color := Color transparent ! ! !MultipleMethodsEditorButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 48003638! initialize super initialize. state := false! ! !ComposableSpec methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:53' prior: 45590972! initialize super initialize. subSpecs := Set new.! ! !MemoryFileSystemEntry methodsFor: 'initialization' stamp: 'CamilloBruni 6/22/2012 20:27' prior: 25425676! initialize creationTime := modificationTime := DateAndTime now. super initialize! ! !TabManagerModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48015608! initialize super initialize. tabs := OrderedCollection new asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: new ] ].! ! !AJx64Assembler methodsFor: 'initialization' stamp: 'CamilloBruni 4/17/2012 18:16' prior: 16847015! initialize super initialize. is64 := true.! ! !UserEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 48022240! initialize usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !OverflowRowMorph methodsFor: 'initialization' stamp: 'gvc 7/1/2010 15:01' prior: 28882802! initialize "Initialize the receiver." super initialize. self baseMorphs: #(); moreButton: self newMoreButton; changeTableLayout; listDirection: #leftToRight; vResizing: #shrinkWrap! ! !RGClassInstanceVariableDefinition methodsFor: 'initialization' stamp: 'VeronicaUquillas 2/15/2011 15:47' prior: 31620473! initialize super initialize. self isMetaSide: true.! ! !SQSurfaceDispatch methodsFor: 'initialization' stamp: 'IgorStasenko 12/30/2011 12:35' prior: 43722914! initialize self majorVersion: 1; minorVersion: 0! ! !RBVariableEnvironment methodsFor: 'initialization' stamp: '' prior: 31537038! initialize super initialize. instanceVariables := Dictionary new. classVariables := Dictionary new. instanceVariableReaders := Dictionary new. instanceVariableWriters := Dictionary new! ! !RBArrayNode methodsFor: 'initialization' stamp: 'lr 8/14/2011 12:01' prior: 30236851! initialize super initialize. statements := periods := #()! ! !LazyMorphListMorph methodsFor: 'initialization' stamp: 'gvc 6/13/2006 10:44' prior: 24338301! initialize "Initialize the receiver." super initialize. self changeTableLayout; cellPositioning: #topLeft; cellInset: 2; vResizing: #shrinkWrap; hResizing: #rigid! ! !Authentifier methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 45581508! initialize super initialize. result := nil asValueHolder.! ! !TBehavior methodsFor: 'initialization' stamp: 'SebastianTleye 7/4/2013 11:27' prior: 44258057! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !ClassNameSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 19:08' prior: 19297218! initialize descriptionHolder := nil asValueHolder. super initialize. ! ! !AthensFlakeDemo methodsFor: 'initialization' stamp: 'IgorStasenko 7/2/2012 19:31' prior: 40612752! initialize super initialize. self extent: self defaultExtent. surface := AthensCairoSurface extent: self extent. circle := surface createPath: [:builder | builder absolute; moveTo: -1 @ 0 ; ccwArcTo: 0@ 1 angle: 90 degreesToRadians ; ccwArcTo: 1@0 angle: 90 degreesToRadians ; ccwArcTo: 0@ -1 angle: 90 degreesToRadians ; ccwArcTo: -1@0 angle: 90 degreesToRadians ]. spike := surface createPath: [:builder | builder absolute; moveTo: -0.1 @ 0; lineTo: -0.05 @ 1; lineTo: 0.05 @ 1; lineTo: 0.1 @ 0 ]. frame := 1. self startStepping. ! ! !ZnBasicAuthenticator methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 9/30/2010 15:37' prior: 55262360! initialize credentials := Dictionary new! ! !SystemReporter methodsFor: 'initialization' stamp: 'MarcusDenker 2/14/2013 09:34' prior: 51656011! initialize self add: #Image method: #reportImage; add: #'Image Parameters' method: #reportImageParameters; add: #'Image Sources' method: #reportSources; add: #'MC Repositories' method: #reportRepositories; add: #'MC Working Copies' method: #reportWorkingCopies; add: #'VM General' method: #reportVM; add: #'VM Options' method: #reportVMOptions; add: #'VM Modules' method: #reportModules; add: #'VM Parameters' method: #reportVMParameters; add: #'VM Stats' method: #reportVMStats. Smalltalk os platformName = 'Win32' ifTrue: [ self add: #'VM Configuration' method: #reportWin32VMConfig. ]. self add: #'OS General' method: #reportOS. Smalltalk os platformName = 'Win32' ifTrue: [ self add: #'OS Details' method: #reportWin32OSDetails; add: #'Hardware Details' method: #reportWin32HardwareDetails; add: #'GFX Hardware Details' method: #reportWin32GFXDetails. ]. Smalltalk os version = 'linux' ifTrue: [ self add: #'OS Details' method: #reportLinuxOSDetails ]. self add: #'OS Environment' method: #reportOSEnvironment. categoriesSelected := Set with: #Image with: #'VM General'. self updateReport ! ! !NECModel methodsFor: 'initialization' stamp: '' prior: 27840806! initialize self reset! ! !MCVersionMerger methodsFor: 'initialization' stamp: 'CamilloBruni 8/4/2011 14:03' prior: 41497251! initialize super initialize. records := OrderedCollection new. merger := MCThreeWayMerger new.! ! !MorphTreeMorph methodsFor: 'initialization' stamp: 'AlainPlantec 10/10/2011 23:16' prior: 26982698! initialize "initialize the state of the receiver" super initialize. columnColors := Array with: Color transparent with: Color transparent. rowColors := Array with: Color transparent with: Color transparent. self borderWidth: 0. ! ! !FontChooser methodsFor: 'initialization' stamp: 'tween 8/4/2007 10:27' prior: 22408214! initialize super initialize. title := 'Choose A Font'.! ! !OCAbstractMethodScope methodsFor: 'initialization' stamp: 'MarcusDenker 7/2/2012 10:16' prior: 34908777! initialize tempVars := OCKeyedSet keyBlock: [:var | var name]. copiedVars := OCKeyedSet keyBlock: [:var | var name]. tempVector := OCKeyedSet keyBlock: [:var | var name]. id := 0. thisContextVar := OCSpecialVariable new name: 'thisContext'; scope: self; yourself. ! ! !RGContainer methodsFor: 'initialization' stamp: 'VeronicaUquillas 9/7/2011 13:53' prior: 31644533! initialize super initialize. self definedClasses: IdentityDictionary new. self methods: IdentityDictionary new. self packages: IdentityDictionary new.! ! !KeyChain methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:40' prior: 45236977! initialize super initialize. groups := IdentityDictionary new. encryptor := SHA1Ecryptor new. encryptorDecryptor := DummyEcryptorDecryptor new. self lock. ! ! !EmbossedStringMorph methodsFor: 'initialization' stamp: 'gvc 8/9/2007 11:52' prior: 21161671! initialize "Initialize the receiver." super initialize. self style: #inset; trackPaneColor: true! ! !MCPackageLoader methodsFor: 'initialization' stamp: 'StephaneDucasse 9/13/2009 18:15' prior: 24901777! initialize super initialize. additions := OrderedCollection new. removals := OrderedCollection new. obsoletions := Dictionary new. methodAdditions := OrderedCollection new. ! ! !PackageTasksPlugin methodsFor: 'initialization' stamp: 'GuillermoPolito 5/2/2012 13:46' prior: 29035464! initialize tasks := OrderedCollection new. index := 0. panel := PanelMorph new changeTableLayout; listDirection: #leftToRight; addMorph: self buildTaskList; addMorph: ((StringMorph contents: 'Tasks:') width: 50; height: 50; yourself); hResizing: #spaceFill; vResizing: #shrinkWrap; yourself. ! ! !OCScopesCollector methodsFor: 'initialization' stamp: 'JorgeRessia 9/7/2010 16:20' prior: 34981432! initialize scopes := OrderedCollection new. super initialize! ! !ProportionalSplitterMorph methodsFor: 'initialization' stamp: 'jrp 7/5/2005 21:46' prior: 30057337! initialize super initialize. self hResizing: #spaceFill. self vResizing: #spaceFill. splitsTopAndBottom := false. leftOrTop := OrderedCollection new. rightOrBottom := OrderedCollection new! ! !SpecInterpreter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/12/2012 15:02' prior: 50700413! initialize super initialize. bindings := self class bindings! ! !AthensBezierConverter methodsFor: 'initialization' stamp: 'IgorStasenko 4/29/2011 18:11' prior: 40268198! initialize distanceTolerance := 0.5. angleTolerance := 0.1 . ! ! !NewListExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 45602596! initialize super initialize. pluggable := false. index := 0. toggleTitle := true. rawList := (1 to: 10) asOrderedCollection. textMorph := self buildTextMorph! ! !DynamicComposableModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 45569531! initialize widgets := OrderedIdentityDictionary new asValueHolder. super initialize. ! ! !CriticsCache methodsFor: 'initialization' stamp: 'StephaneDucasse 3/20/2013 22:41' prior: 33862939! initialize super initialize. falsePositives := Dictionary new. toDos := Dictionary new. critics := Dictionary new. falsePositiveRules := Dictionary new. falsePositiveClasses := IdentitySet new. change := false ! ! !MCDefinitionIndex methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:02' prior: 41478548! initialize super initialize. definitions := Dictionary new! ! !NECVarTypeGuesser methodsFor: 'initialization' stamp: '' prior: 27886664! initialize super initialize. types := OrderedCollection new. hasSend := false. contextCount := 0! ! !WeakAnnouncementSubscription methodsFor: 'initialization' stamp: 'IgorStasenko 3/12/2011 19:48' prior: 54759929! initialize list := self class finalizationList! ! !NewList methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 45574319! initialize renderer := nil asValueHolder. super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. drawColor := Color white asValueHolder. model := nil asValueHolder. isInitialized := false asValueHolder. isMultipleSelection := false asValueHolder. listCache := OrderedCollection new asValueHolder. selectedIndex := 0 asValueHolder. selectedIndexes := Dictionary new asValueHolder. listSize := nil asValueHolder. headerHeight := 0 asValueHolder. headerTitle := '' asValueHolder. clickOnHeader := nil asValueHolder. secondSelection := nil asValueHolder. displayListCache := OrderedCollection new asValueHolder. runningProcesses := Array new asValueHolder. deSelectOnReclick := false asValueHolder. selectionWithKeys := true asValueHolder. selectedItem := nil asValueHolder. selectedItems := OrderedCollection new asValueHolder. unselectOnChange := false asValueHolder. iconCache := Dictionary new asValueHolder. iconMaxSize := nil asValueHolder. enabled := true asValueHolder. allowToSelect := true asValueHolder.! ! !NECDetailMorph methodsFor: 'initialization' stamp: 'CamilloBruni 8/7/2012 11:41' prior: 27804569! initialize | childBounds | super initialize. self borderStyle: (BorderStyle color: Color gray width: 1). childBounds := self contentBounds. label := StringMorph contents: '' font: self messageFont. label bounds: childBounds. self addMorph: label. title := StringMorph contents: '' font: NECMenuMorph titleFont. title bounds: self titleBounds. self addMorph: title. description := TextMorph new. description autoFit: false. description bounds: self descriptionBounds. description borderWidth: 0. self addMorph: description! ! !RBBasicLintRuleTest methodsFor: 'initialization' stamp: 'lr 9/8/2011 20:32' prior: 30264553! initialize super initialize. classBlock := [:context :aResult | ]. methodBlock := [:context :aResult | ]. self resultClass: RBSelectorEnvironment! ! !MCDictionaryRepository methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:02' prior: 41436072! initialize super initialize. dict := Dictionary new. ! ! !IRPushArray methodsFor: 'initialization' stamp: 'MarcusDenker 8/13/2010 13:31' prior: 34855260! initialize size := 0. cons := false. ! ! !IssueCreator methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 45599331! initialize issue := nil asValueHolder. super initialize.! ! !BalloonEngine methodsFor: 'initialization' stamp: 'stephane.ducasse 6/14/2009 22:37' prior: 17921165! initialize | w | super initialize. w := Display width > 2048 ifTrue: [ 4096 ] ifFalse: [ 2048 ]. externals := OrderedCollection new: 100. span := Bitmap new: w. bitBlt := nil. self bitBlt: ((BitBlt toForm: Display) destRect: Display boundingBox; yourself). forms := #(). deferred := false.! ! !RoundedBorder methodsFor: 'initialization' stamp: 'gvc 3/14/2007 12:16' prior: 41412644! initialize "Initialize the receiver." super initialize. self cornerRadius: 0! ! !AJInstruction methodsFor: 'initialization' stamp: '' prior: 16808645! initialize level := 0! ! !UTF16TextConverter methodsFor: 'initialization' stamp: 'HenrikSperreJohansen 8/9/2010 15:02' prior: 54428278! initialize super initialize. byteOrderMarkDone := false. useByteOrderMark := false. useLittleEndian := false.! ! !RBReplaceRule methodsFor: 'initialization' stamp: '' prior: 31275727! initialize super initialize. verificationBlock := [:aNode | true]! ! !RBRefactoryTyper methodsFor: 'initialization' stamp: '' prior: 31198286! initialize model := RBNamespace new. class := model classFor: Object. variableTypes := Dictionary new. variableMessages := Dictionary new. selectorLookup := IdentityDictionary new. bestGuesses := Dictionary new! ! !HelpBuilder methodsFor: 'initialization' stamp: 'tbn 3/5/2010 23:12' prior: 23369848! initialize "Initializes the receiver" super initialize. topicToBuild := self topicClass new. ! ! !GroupboxMorph methodsFor: 'initialization' stamp: 'gvc 3/19/2010 16:21' prior: 23080847! initialize "Initialize the receiver." super initialize. self roundedCorners: #(2 3 4); borderWidth: 0; changeTableLayout; cellPositioning: #topLeft; cellInset: 0 @ -1; reverseTableCells: true; labelMorph: self newLabelMorph; contentMorph: self newContentMorph; addMorphBack: self contentMorph; addMorphBack: self labelMorph! ! !SpecSplitterHorizontal methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45591133! initialize super initialize. selector := #newHSplitterAt:. layoutFrame := (0@0 corner: 0@0) asLayoutFrame bottomOffset: 1. commands := nil.! ! !SystemNavigation methodsFor: 'initialization' stamp: 'StephaneDucasse 10/23/2010 15:14' prior: 51563877! initialize super initialize. self environment: Smalltalk globals! ! !DynamicSpecExample methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 45595734! initialize super initialize. object := nil asValueHolder.! ! !NECContext methodsFor: 'initialization' stamp: '' prior: 27763613! initialize super initialize. source := String new. position := 0. recurseCount := 0. variables := true. selectors := true. ranges := OrderedCollection new. completionIndex := 0. completionToken := nil! ! !VGTigerDemo methodsFor: 'initialization' stamp: 'IgorStasenko 6/10/2012 09:42' prior: 40766553! initialize surface := AthensCairoSurface extent: 400@400. ! ! !IconicListItem methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 48001521! initialize super initialize. self changeTableLayout; listDirection: #leftToRight; cellPositioning: #center; cellInset: 2; borderWidth: 0; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 20@16.! ! !RBSequenceNode methodsFor: 'initialization' stamp: 'lr 2/19/2010 14:44' prior: 31365161! initialize super initialize. periods := statements := temporaries := #()! ! !IRBytecodeGenerator methodsFor: 'initialization' stamp: 'MarcusDenker 6/13/2012 12:55' prior: 34813625! initialize literals := OCLiteralList new. "The following dicts are keyed by sequence id given by client in label: (and gotos)." seqOrder := IdentityDictionary new. "seqId -> seq order num" seqBytes := IdentityDictionary new. "seqId -> seq bytecodes" jumps := IdentityDictionary new. "seqId -> last jump instr" instrMaps := IdentityDictionary new. "seqId -> (clientInstr -> bytecode pos)" stacks := IdentityDictionary new. "seqId -> stackCount" primNum := 0. numArgs := 0. currentSeqNum := 0. orderSeq := OrderedCollection new. "reverse map of seqOrder" additionalLiterals := OCLiteralSet new. forceLongForm := false. "starting label in case one is not provided by client" self label: self newDummySeqId. ! ! !SearchableTree methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48031428! initialize super initialize. roots := OrderedCollection new asValueHolder! ! !AthensTextScanner methodsFor: 'initialization' stamp: 'IgorStasenko 11/10/2011 11:54' prior: 40337889! initialize lines := OrderedCollection new. currentAttributes := #().! ! !FilePackage methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:54' prior: 21930632! initialize super initialize. classes := Dictionary new. classOrder := OrderedCollection new. sourceSystem := ''. doIts := OrderedCollection new.! ! !Morph methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:09' prior: 26728998! initialize "initialize the state of the receiver" super initialize. owner := nil. submorphs := EmptyArray. bounds := self defaultBounds. color := self defaultColor! ! !FreeTypeFontFamily methodsFor: 'initialization' stamp: 'tween 8/16/2007 20:44' prior: 22731621! initialize super initialize. members := OrderedCollection new.! ! !Mutex methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:11' prior: 27339485! initialize super initialize. semaphore := Semaphore forMutualExclusion.! ! !NullStream methodsFor: 'initialization' stamp: 'StephaneDucasse 3/13/2010 11:06' prior: 28481143! initialize "Initialize the receiver" binary := false. position := 0.! ! !TextEditorDialogWindow methodsFor: 'initialization' stamp: 'CamilloBruni 10/7/2012 22:17' prior: 52682145! initialize "Initialize the receiver." super initialize. self beResizeable. entryText := ''. self changed: #entryText. self textEditorMorph selectAll.! ! !FLLargeIdentityHashedCollection methodsFor: 'initialization' stamp: 'ul 12/18/2011 11:31' prior: 21567735! initialize tally := 0. tallies := Array new: 4096 withAll: 0! ! !Refactor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/24/2011 13:02' prior: 32208164! initialize super initialize. toMoveInSuperClass := OrderedCollection new. addAnAbstractMethodNamed := OrderedCollection new.! ! !ZnChunkedWriteStream methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 5/18/2013 00:35' prior: 39640769! initialize super initialize. totalSize := 0. chunkCount := 0! ! !ObjectLayout methodsFor: 'initialization' stamp: 'ToonVerwaest 4/1/2011 01:34' prior: 41782341! initialize compactClassIndex := 0! ! !RBParseTreeSearcher methodsFor: 'initialization' stamp: 'MarcusDenker 3/25/2013 21:02' prior: 36463530! initialize super initialize. context := SmallDictionary new. searches := OrderedCollection new. argumentSearches := OrderedCollection new: 0. answer := nil! ! !HelpBrowser methodsFor: 'initialization' stamp: 'tbn 3/5/2010 23:39' prior: 23364508! initialize super initialize. self initWindow. ! ! !MultipleMethodsEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 48013059! initialize super initialize. self changeProportionalLayout. self color: Color white. lock := false. buttonsContainer := PanelMorph new changeTableLayout; listDirection: #rightToLeft; hResizing: #spaceFill; vResizing: #spaceFill; yourself. editors := OrderedCollection new. container := self newProportionalPanelMorph. self updateLayoutForSingle! ! !PackageOrganizer methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:13' prior: 29029858! initialize super initialize. packages := Dictionary new! ! !MergeJoinSection methodsFor: 'initialization' stamp: 'gvc 1/8/2009 18:05' prior: 25559223! initialize "Initialize the receiver." self allowClick: true; selected: false; selectionState: #dst; stateIcons: self defaultStateIcons; selectedBorderColor: Color black. super initialize! ! !PharoClassInstaller methodsFor: 'initialization' stamp: 'MartinDias 7/30/2012 00:03' prior: 41747821! initialize super initialize. environment := nil environment. methodUpdateStrategy := MethodRecompileStrategy new.! ! !ZnStandardOutputLogger methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 3/4/2012 20:02' prior: 55699432! initialize super initialize. ! ! !TreeNodeModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48031604! initialize super initialize. item := nil asValueHolder.! ! !NBMemoryBlock methodsFor: 'initialization' stamp: 'Igor.Stasenko 9/22/2010 04:38' prior: 48229687! initialize free := true! ! !NBFFICalloutAPI methodsFor: 'initialization' stamp: 'IgorStasenko 11/22/2012 18:18' prior: 27529760! initialize conv := #cdecl. options := #().! ! !CommandLineHandler methodsFor: 'initialization' stamp: 'CamilloBruni 5/9/2013 19:44' prior: 38470744! initialize super initialize. session := Smalltalk session. self initializeStdout; initializeStderr. ! ! !SubscriptionRegistry methodsFor: 'initialization' stamp: 'IgorStasenko 1/2/2012 15:13' prior: 51336282! initialize monitor := Semaphore forMutualExclusion. self reset ! ! !ControlButtonMorph methodsFor: 'initialization' stamp: 'gvc 12/5/2008 14:58' prior: 20218368! initialize "Initialize the receiver." super initialize. self layoutInset: (self theme controlButtonLabelInsetFor: self)! ! !AlexPlugin methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 8/21/2011 12:08' prior: 17499033! initialize text := ''. container := PanelMorph new color: Color transparent; changeTableLayout; cellInset: 8; listDirection: #topToBottom; cellPositioning: #topLeft; hResizing: #shrinkWrap; vResizing: #shrinkWrap. self buildTextMorph! ! !IRBytecodeScope methodsFor: 'initialization' stamp: 'ToonVerwaest 3/27/2011 14:49' prior: 34833927! initialize temps := 0. ownTempVectors := OrderedCollection new! ! !AdvancedHelpBrowserDummy methodsFor: 'initialization' stamp: 'tbn 5/3/2010 19:34' prior: 17496525! initialize isOpen := false! ! !NECUntypedModel methodsFor: 'initialization' stamp: 'CamilloBruni 2/3/2013 21:39' prior: 27872821! initialize super initialize. localVars := SortedCollection new. instVars := SortedCollection new. classVars := SortedCollection new. includeSelectors := true. includeVariables := true. listLimit := 100.! ! !RBAbstractClass methodsFor: 'initialization' stamp: '' prior: 30138161! initialize name := #'Unknown Class'! ! !RBMethodNode methodsFor: 'initialization' stamp: '' prior: 30782064! initialize replacements := SortedCollection sortBlock: [:a :b | a startPosition < b startPosition or: [a startPosition = b startPosition and: [a stopPosition < b stopPosition]]]. nodeReplacements := IdentityDictionary new! ! !ClassBuilder methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:47' prior: 19124932! initialize super initialize. environ := Smalltalk. instVarMap := IdentityDictionary new.! ! !AJMem methodsFor: 'initialization' stamp: '' prior: 16824230! initialize displacement := AJImmediate new. shift := 0.! ! !InputWidget methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 48000869! initialize okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !RBParser methodsFor: 'initialization' stamp: 'lr 11/1/2009 19:17' prior: 30921778! initialize comments := OrderedCollection new! ! !MorphFrameGhost methodsFor: 'initialization' stamp: 'AlainPlantec 2/22/2012 23:31' prior: 26876970! initialize super initialize. self color: (Color gray alpha: 0.15). self borderWidth: 2. self borderColor: Color gray. ! ! !RBPragmaEnvironment methodsFor: 'initialization' stamp: 'lr 2/26/2009 13:35' prior: 31005133! initialize super initialize. keywords := IdentitySet new. condition := [ :pragma | true ]! ! !CairoFontFace methodsFor: 'initialization' stamp: 'IgorStasenko 6/11/2012 06:00' prior: 40498671! initialize self registerAsExternalResource ! ! !MorphTreeNavigationBar methodsFor: 'initialization' stamp: 'AlainPlantec 1/22/2010 09:02' prior: 27012310! initialize super initialize. self hResizing: #spaceFill; vResizing: #rigid; changeTableLayout; listDirection: #leftToRight; cellInset: 2 @ 0; layoutInset: 3 @ 0; listCentering: #center; clipSubmorphs: true; borderWidth: 0; borderColor: Color lightGray! ! !PluggableTextMorphWithLimits methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48003073! initialize super initialize. locked := false. lockIcon := self defaultOpenMorph. self addIcon. lockIcon on: #mouseEnter send: #colorize to: self. lockIcon on: #mouseLeave send: #decolorize to: self. lockIcon on: #click send: #toggleLock to: self! ! !DialogItemsChooserUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/2/2010 18:14' prior: 20693531! initialize unselectedItemsSearchingString := String new. selectedItemsSearchingString := String new. selectedSelectionList := Dictionary new. unselectedSelectionList := Dictionary new. super initialize. self vResizing: #shrinkWrap. self hResizing: #shrinkWrap.! ! !CommandLineUIManager methodsFor: 'initialization' stamp: 'CamilloBruni 2/9/2012 00:22' prior: 19749045! initialize doNotQuitOnRestart := false.! ! !RBRefactoryChangeManager methodsFor: 'initialization' stamp: '' prior: 31170508! initialize undo := OrderedCollection new. redo := OrderedCollection new. isPerformingRefactoring := false. self connectToChanges! ! !ThreadSafeTranscript methodsFor: 'initialization' stamp: 'stephane.ducasse 4/1/2009 20:20' prior: 53086887! initialize super initialize. accessSemaphore := Mutex new. stream := String new writeStream.! ! !SimpleServiceEntry methodsFor: 'initialization' stamp: 'StephaneDucasse 3/5/2010 14:36' prior: 33318515! initialize super initialize. self useLineAfter! ! !FileDialogWindow methodsFor: 'initialization' stamp: 'SeanDeNigris 6/21/2012 20:27' prior: 21827253! initialize "Initialize the receiver." selectedFileIndex := 0. fileNameText := ''. self answerPathName; directories: self initialDirectories; showDirectoriesInFileList: true; fileSelectionBlock: self defaultFileSelectionBlock; fileSortBlock: self defaultFileSortBlock. super initialize. "Must be at end or signals error. No idea why - SeanDeNigris"! ! !FileSystemGuide methodsFor: 'initialization' stamp: 'StephaneDucasse 1/27/2011 10:37' prior: 22044179! initialize super initialize. work := OrderedCollection new! ! !GroupManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/21/2011 16:11' prior: 45506396! initialize super initialize. groups := OrderedCollection new! ! !RxmBranch methodsFor: 'initialization' stamp: 'lr 11/4/2009 22:38' prior: 32466561! initialize "See class comment for instance variable description." super initialize. loopback := false! ! !ChangeList methodsFor: 'initialization' stamp: 'StephaneDucasse 7/23/2010 21:09' prior: 18743229! initialize "Initialize a blank ChangeList. Set the contentsSymbol to reflect whether diffs will initally be shown or not" contentsSymbol := CodeHolder diffsInChangeList ifTrue: [self defaultDiffsSymbol] ifFalse: [#source]. changeList := OrderedCollection new. list := OrderedCollection new. listIndex := 0. super initialize! ! !UITheme methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/10/2013 09:54' prior: 37954549! initialize "Initialize the receiver." super initialize. self initializeForms; settings: self defaultSettings. ThemeIcons current: self class defaultThemeIconsClass new.! ! !SliceSubmitter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45583216! initialize super initialize. issue := GoogleIssue new status: PharoTrackerLabels accepted; tracker: self tracker; yourself. receiver := World. mcPackage := nil.! ! !SlotClassBuilder methodsFor: 'initialization' stamp: 'MartinDias 6/24/2013 18:25' prior: 41813770! initialize super initialize. oldClasses := OrderedCollection new. newClasses := OrderedCollection new. sharedPoolsString := ''. sharedVariablesString := ''. classSlots := {}. slots := {}. layoutClass := PointerLayout. superclass := Object. classTraitComposition := {} asTraitComposition. traitComposition := {} asTraitComposition.! ! !SyntaxError methodsFor: 'initialization' stamp: 'GuillermoPolito 8/13/2010 01:10' prior: 51466354! initialize dependents := Set new.! ! !AJRoutineStackManager methodsFor: 'initialization' stamp: '' prior: 16835995! initialize self reset. noStackFrame := false.! ! !NBWndClassEx methodsFor: 'initialization' stamp: 'Igor.Stasenko 4/29/2010 14:05' prior: 27757431! initialize self cbSize: (self basicSize).! ! !NBInterpreterProxy methodsFor: 'initialization' stamp: 'CamilloBruni 8/3/2012 18:24' prior: 27570549! initialize "actually, this should be determined by querying NativeBoost platformId" objectFormat := NBObjectFormat32 new. "set it to nil, if there is recursion" stackPtrAddress := [self class stackPointerAddress] on: NBCodeGenRecursion do: [ nil ]. framePtrAddress := [self class framePointerAddress] on: NBCodeGenRecursion do: [ nil ]. cStackPtrAddress := [self class cStackPointerAddress] on: NBCodeGenRecursion do: [ nil ]. cFramePtrAddress := [self class cFramePointerAddress] on: NBCodeGenRecursion do: [ nil ].! ! !ZnCookie methodsFor: 'initialization' stamp: 'MattKennedy 9/27/2010 20:21' prior: 55408480! initialize attributes := Dictionary new.! ! !IRMethod methodsFor: 'initialization' stamp: 'MarcusDenker 5/15/2013 11:12' prior: 38336822! initialize irPrimitive := IRPrimitive null. tempMap := Dictionary new. pragmas := OrderedCollection new. additionalLiterals := OCLiteralSet new. numArgs := 0.! ! !SocketStream methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:05' prior: 50453023! initialize super initialize. autoFlush := true. shouldSignal := true. recentlyRead := 0. bufferSize := 4096. self ascii! ! !MorphTreeListManager methodsFor: 'initialization' stamp: 'AlainPlantec 10/7/2011 17:40' prior: 26911152! initialize super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. lastSelection := 0! ! !NewListAdapter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 45576132! initialize super initialize. doubleClickSelector := nil asValueHolder. dragItemSelector := nil asValueHolder. dropItemSelector := nil asValueHolder. getDisplaySelector := nil asValueHolder. getHeaderTitleSelector := nil asValueHolder. getMenuSelector := nil asValueHolder. getIndexSelector := nil asValueHolder. getItemAtIndexSelector := nil asValueHolder. getItemsSelector := nil asValueHolder. getListSizeSelector := nil asValueHolder. keyStrokeSelector := nil asValueHolder. lastKeystrokeTime := nil asValueHolder. lastKeystrokes := nil asValueHolder. model := nil asValueHolder. list := nil asValueHolder. setIndexSelector := nil asValueHolder. wantsDropSelector := nil asValueHolder. getMenuTitleSelector := nil asValueHolder. getIconSelector := nil asValueHolder. getIconMaxSizeSelector := nil asValueHolder. getIndexesSelector := nil asValueHolder.! ! !KeychainEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 48022724! initialize keychainEditingWrapper := nil asValueHolder. super initialize.! ! !AthensTextLine methodsFor: 'initialization' stamp: 'IgorStasenko 11/10/2011 10:15' prior: 40321285! initialize commands := tail := nil. width := height := maxAscent := maxDescent := 0.! ! !RBClass methodsFor: 'initialization' stamp: 'lr 7/1/2008 10:58' prior: 30393491! initialize super initialize. comment := LookupComment! ! !CommandLineArguments methodsFor: 'initialization' stamp: 'CamilloBruni 5/13/2012 19:47' prior: 19726140! initialize | documentPath | arguments := OrderedCollection withAll: Smalltalk arguments. documentPath := Smalltalk vm documentPath. documentPath isEmptyOrNil ifFalse: [ arguments addFirst: documentPath ].! ! !HSVColorSelectorMorph methodsFor: 'initialization' stamp: 'gvc 9/26/2006 12:25' prior: 23141040! initialize "Initialize the receiver." super initialize. self borderWidth: 0; changeTableLayout; cellInset: 4; listDirection: #leftToRight; cellPositioning: #topLeft; svMorph: self newSVColorMorph; hMorph: self newHColorMorph; addMorphBack: self svMorph; addMorphBack: self hMorph; extent: 192@152; hue: 0.5! ! !PragmaMenuBuilder methodsFor: 'initialization' stamp: 'AlainPlantec 11/16/2010 19:55' prior: 29926734! initialize super initialize. isGroup := true. currentRoot := self. pragmaKeywords := OrderedCollection new. ! ! !NonInteractiveTranscript methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 9/28/2011 21:22' prior: 28454028! initialize super initialize. accessSemaphore := Mutex new! ! !MCWorkingCopy methodsFor: 'private' stamp: 'StephaneDucasse 8/14/2013 14:57' prior: 25152501! findSnapshotWithVersionInfo: aVersionInfo "when an ancestor inside the ancestor chain is not found, does not pass nil instead. With this change we can now browse history and delta between them without having to have the complete history" "instead of asking for the user to add a new repository, or copy the the missing package we simply return an empty Snapshot by returning nil" ^ aVersionInfo ifNil: [MCSnapshot empty] ifNotNil: [(self repositoryGroup versionWithInfo: aVersionInfo ifNone: [nil]) ifNil: [MCSnapshot empty] ifNotNil: [:aVersion | aVersion snapshot]]! ! !MCWorkingCopy methodsFor: 'initialization' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25153012! initialize super initialize. ancestry := MCWorkingAncestry new! ! !CategoryWidget methodsFor: 'initialization' stamp: '' prior: 18728089! initialize super initialize. categoriesSelection := Dictionary new.! ! !KonamiCodePlugin methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 5/12/2011 17:22' prior: 24240788! initialize super initialize. lastKeystrokeTime := 0. ! ! !WorkingCopyToolBar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 48020067! initialize super initialize. workingCopyHolder := nil asValueHolder! ! !NBExternalType methodsFor: 'initialization' stamp: 'Igor.Stasenko 4/28/2010 11:34' prior: 27473841! initialize pointerArity := 0.! ! !MockSourceEditor methodsFor: 'initialization' stamp: 'PavelKrivanek 11/8/2012 13:22' prior: 26539409! initialize super initialize. selectionStart := selectionEnd := 0.! ! !SystemVersion methodsFor: 'initialization' stamp: '' prior: 51677866! initialize super initialize. date := Date today. updates := Set new. ! ! !LayoutProperties methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:00' prior: 24320226! initialize super initialize. hResizing := vResizing := #rigid. disableLayout := false.! ! !TasklistMorph methodsFor: 'initialization' stamp: 'gvc 4/20/2007 11:12' prior: 52293974! initialize "Initialize the receiver." super initialize. self initializeTasks; initializeLayout; initializeAppearance; addMorphs; updateButtonsAndPreview; adoptPaneColor: self color! ! !UlysseTheMonkey methodsFor: 'initialization' stamp: 'CamilloBruni 2/15/2013 00:16' prior: 54459805! initialize verbose := true. debug := false. self reset.! ! !ZnNetworkingUtils methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 5/20/2013 15:31' prior: 39655382! initialize super initialize. self socketStreamClass: (Smalltalk globals at: #ZdcSocketStream ifAbsent: [ SocketStream ]). self secureSocketStreamClass: (Smalltalk globals at: #ZdcSecureSocketStream ifAbsent: [ nil ])! ! !RGNamespace methodsFor: 'initialization' stamp: 'VeronicaUquillas 4/20/2011 16:40' prior: 31734166! initialize super initialize. self globalVariables: IdentityDictionary new. self pools: IdentityDictionary new.! ! !LayoutFrame methodsFor: 'initialization' stamp: 'IgorStasenko 12/18/2012 16:58' prior: 24312425! initialize "initialize defaults: - all offsets are zero - fraction frame is maximum" leftOffset := rightOffset := topOffset := bottomOffset := 0. leftFraction := topFraction := 0. rightFraction := bottomFraction := 1.! ! !FLClusterization methodsFor: 'initialization' stamp: 'MarianoMartinezPeck 7/26/2012 17:36' prior: 21477328! initialize super initialize. primitivesBucket := IdentityDictionary new. baselevelBucket := IdentityDictionary new. globalsBucket := IdentityDictionary new. metalevelInstanceSideBucket := IdentityDictionary new. metalevelClassSideBucket := IdentityDictionary new. substitutionsBucket := IdentityDictionary new. postBaselevelBucket := IdentityDictionary new. ! ! !WaitfreeQueue methodsFor: 'initialization' stamp: 'Igor.Stasenko 10/16/2010 07:27' prior: 54740616! initialize dummy := AtomicQueueItem new. dummy object: dummy. tail := dummy. ! ! !AtomicSharedQueue methodsFor: 'initialization' stamp: 'Igor.Stasenko 10/15/2010 16:59' prior: 17775108! initialize super initialize. availSema := Semaphore new. ! ! !MCVersionSorter methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:04' prior: 41488652! initialize super initialize. stepparents := Dictionary new. roots := OrderedCollection new.! ! !AJImmediate methodsFor: 'initialization' stamp: '' prior: 16804965! initialize value := 0. isUnsigned := false.! ! !NBExternalEnumTests methodsFor: 'initialization' stamp: 'CiprianTeodorov 12/13/2012 20:02' prior: 48316524! initialize super initialize. self enumClass initialize! ! !RBSmalllintChecker methodsFor: 'initialization' stamp: 'CamilloBruni 5/7/2013 17:38' prior: 37052792! initialize methodBlock := []. environment := RBBrowserEnvironment new. context := RBSmalllintContext newNoCache! ! !SpecLayout methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/18/2012 06:40' prior: 50715990! initialize super initialize. type := #ComposableSpec. self commands: OrderedCollection new.! ! !ZnApplicationFormUrlEncodedEntity methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/31/2011 12:15' prior: 55248527! initialize super initialize. fields := ZnMultiValueDictionary new. self contentType: self class designatedMimeType ! ! !AbstractNautilusUI methodsFor: 'initialization' stamp: 'MarcusDenker 5/7/2013 10:41' prior: 37015523! initialize super initialize. cachedHierarchy := SortHierarchically new. groupsSelection := Dictionary new. packagesSelection := Dictionary new. classesSelection := Dictionary new. shouldUpdateTitle := true. testSemaphore := Semaphore new. sourceTextAreas := OrderedCollection new. contentSelection := nil. acceptor := ClassDefinitionAcceptor model: self.! ! !MenuCaptureMorph methodsFor: 'initialization' stamp: 'SeanDeNigris 12/9/2011 21:20' prior: 25439874! initialize worldBefore := World submorphs. timer := Stopwatch new activate.! ! !MemoryStore methodsFor: 'initialization' stamp: 'CamilloBruni 6/22/2012 20:16' prior: 25434119! initialize root := MemoryFileSystemDirectory new! ! !MemoryFileSystemFile methodsFor: 'initialization' stamp: 'CamilloBruni 6/22/2012 20:53' prior: 25427789! initialize super initialize. bytes := #[]. size := 0! ! !CharacterScanner methodsFor: 'initialization' stamp: 'MarcusDenker 11/20/2012 10:04' prior: 18955394! initialize super initialize. destX := destY := leftMargin := 0. wantsColumnBreaks := false.! ! !CompiledMethodTrailer methodsFor: 'initialization' stamp: 'Igor.Stasenko 12/13/2009 11:51' prior: 19893955! initialize self clear! ! !DiffJoinMorph methodsFor: 'initialization' stamp: 'gvc 10/31/2006 11:44' prior: 20826470! initialize "Initialize the receiver." super initialize. self mappings: OrderedCollection new; srcOffset: 0@0; dstOffset: 0@0! ! !FloatPrintPolicy methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 2/8/2013 11:20' prior: 22367051! initialize default := ExactFloatPrintPolicy new! ! !DiskStore methodsFor: 'initialization' stamp: 'CamilloBruni 5/13/2012 19:18' prior: 20883766! initialize super initialize. maxFileNameLength := Smalltalk vm maxFilenameLength ifNil: [ 255 ].! ! !ListComposableModel methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 46675773! initialize super initialize. selectionHolder := SelectionValueHolder new. listHolder := Array new asValueHolder. sortingBlockHolder := self defaultSortingBlock asValueHolder. filteringBlockHolder := self defaultFilteringBlock asValueHolder. wrapBlockHolder := [ :object | object asStringOrText ] asValueHolder. menuHolder := [ :menu :shifted | nil ] asValueHolder. multiSelectionHolder := IdentityDictionary new asValueHolder. multiSelection := false asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !CharacterSet methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:44' prior: 18972051! initialize super initialize. map := ByteArray new: 256 withAll: 0.! ! !MemoryFileSystemDirectory methodsFor: 'initialization' stamp: 'CamilloBruni 6/22/2012 20:00' prior: 25424265! initialize super initialize. entries := Dictionary new.! ! !PSMCPatchMorph methodsFor: 'initialization' stamp: 'IgorStasenko 12/19/2012 17:29' prior: 28984767! initialize "Initialize the receiver." |descriptionHeight| super initialize. self diffMorph: self newDiffMorph; changeTree: self newChangeTreeMorph; descriptionMorph: self newDescriptionMorph. descriptionHeight := self descriptionMorph minExtent y. self changeProportionalLayout; addMorph: self descriptionMorph fullFrame: ((0.3@0 corner: 1@0) asLayoutFrame leftOffset: ProportionalSplitterMorph splitterWidth; bottomOffset: descriptionHeight); addMorph: self changeTree fullFrame: (0@0 corner: 0.3@1) asLayoutFrame; addMorph: self diffMorph fullFrame: ((0.3@0 corner: 1@1) asLayoutFrame topLeftOffset: ProportionalSplitterMorph splitterWidth @ descriptionHeight); addPaneSplitters. self updateDescriptionFillStyle: self paneColor. self splitters first delete. self onAnnouncement: MorphOpened do: [self changeTree expandAll] ! ! !OrderedIdentityDictionary methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48020976! initialize "This method is not used since new is overriden to use initalize:" keys := OrderedCollection new. super initialize. ! ! !OrderedIdentityDictionary methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48021219! initialize: aNumber keys := OrderedCollection new. super initialize: aNumber! ! !GrowlMorph methodsFor: 'initialization' stamp: 'tbn 7/10/2012 09:29' prior: 23098458! initialize super initialize. self borderStyle: BorderStyle thinGray. self setProperty: #autoFitContents toValue: false. self initializeLabelAttributes. self initializeContentsAttributes. self vanishDelay: self defaultVanishDelay. self label: 'A cool title' contents: 'Here an important message'. dismissHandle := self createDismissHandle. self addMorph: dismissHandle! ! !RBReadBeforeWrittenTester methodsFor: 'initialization' stamp: '' prior: 31102029! initialize super initialize. scopeStack := OrderedCollection with: Dictionary new. read := Set new. checkNewTemps := true! ! !RPackage methodsFor: 'initialization' stamp: 'StephaneDucasse 7/25/2011 21:47' prior: 31791887! initialize super initialize. classes := Set new. metaclassExtensionSelectors := Dictionary new. classExtensionSelectors := Dictionary new. classDefinedSelectors := Dictionary new. metaclassDefinedSelectors := Dictionary new. classTags := Dictionary new.! ! !MethodNameEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 45572362! initialize super initialize. self beResizeable! ! !TabLabelMorph methodsFor: 'initialization' stamp: 'gvc 1/7/2008 11:16' prior: 52218987! initialize "Initialize the receiver." super initialize. self fillStyle: self fillStyleToUse. self borderStyle: self borderStyleToUse! ! !AthensStrokePaint methodsFor: 'initialization' stamp: 'FernandoOlivero 1/13/2012 00:35' prior: 40231628! initialize super initialize. width := 1. capStyle := #butt. joinStyle := #bevel. innerJoinStyle := #bevel. miterLimit := 4.0. ! ! !RGPackage methodsFor: 'initialization' stamp: 'VeronicaUquillas 9/6/2011 15:14' prior: 31748083! initialize super initialize. self withoutPackages. "By default the receiver has no child packages" self extensionMethods: IdentityDictionary new. self categories: OrderedCollection new.! ! !AthensCairoMatrix methodsFor: 'initialization' stamp: '' prior: 40513291! initialize self loadIdentity.! ! !ExceptionSet methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:52' prior: 21338172! initialize super initialize. exceptions := OrderedCollection new! ! !ZnLogSupport methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 10/4/2011 12:28' prior: 55538228! initialize self disable! ! !FT2Handle methodsFor: 'initialization' stamp: 'nk 3/11/2005 18:44' prior: 21749088! initialize self shouldNotImplement.! ! !Base64MimeConverter methodsFor: 'initialization' stamp: 'dik 9/22/2010 18:09' prior: 17973908! initialize super initialize. multiLine := true.! ! !HSVAColorSelectorMorph methodsFor: 'initialization' stamp: 'gvc 9/21/2006 16:47' prior: 23137798! initialize "Initialize the receiver." super initialize. self extent: 180@168; changeTableLayout; cellInset: 4; aMorph: self newAColorMorph; hsvMorph: self newHSVColorMorph; addMorphBack: self hsvMorph; addMorphBack: self aMorph. self aMorph color: self hsvMorph selectedColor! ! !AJGeneratedCode methodsFor: 'initialization' stamp: '' prior: 16800118! initialize labels := Dictionary new. ! ! !SystemOrganizer methodsFor: 'initialization' stamp: 'LucFabresse 10/24/2010 19:57' prior: 51625651! initialize super initialize. categoryArray := Array new. categoryStops := Array new. elementArray := Array new! ! !SwitchUsers methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 48005755! initialize usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !GroupWindowMorph methodsFor: 'initialization' stamp: 'IgorStasenko 12/19/2012 17:58' prior: 23064904! initialize "Add the tab group with an inital workspace." super initialize. self changeProportionalLayout. self tabGroup: self newTabGroup. self tabGroup tabSelectorMorph addDependent: self. self dropEnabled: true; addMorph: self tabGroup fullFrame: LayoutFrame identity. self tabGroup color: Color transparent. ! ! !PharoUser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:49' prior: 48031168! initialize super initialize. avatar := self defaultAvatar. self updateGravatarFor: ''. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !NBFinalizationRegistry methodsFor: 'initialization' stamp: 'IgorStasenko 5/31/2012 14:51' prior: 27535315! initialize super initialize. sema := Semaphore forMutualExclusion. self reset. WeakArray addWeakDependent: self! ! !HashTableSizes methodsFor: 'initialization' stamp: 'MartinMcClure 1/17/2010 09:44' prior: 23272696! initialize "Can't use any hashed collections, if sizes is being initialized might get infinite recursion" goodPrimes := OrderedCollection new. "Must contain a value less than any prime to avoid extra work in binary search" goodPrimes add: 0. valuesNotToDivide := OrderedCollection new. 1 to: 8 do: [ :k | | n | n := 256 raisedToInteger: k. -32 to: 32 do: [ :a | valuesNotToDivide add: n + a ] ]. primesToAvoid := self primeAlmostFactorsOf: 1 hashMultiply! ! !ZnBufferedReadStream methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 11/30/2012 20:15' prior: 55275211! initialize super initialize. position := 1. limit := 0! ! !SmalllintManifestChecker methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 10:43' prior: 33929278! initialize super initialize. manifestClassCache := Dictionary new. ! ! !DynamicWidgetChange methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 45578839! initialize super initialize. boolean := true! ! !AbstractClassModification methodsFor: 'initialization' stamp: 'ToonVerwaest 4/1/2011 03:31' prior: 41751969! initialize propagations := OrderedCollection new.! ! !RBCompositeRefactoryChange methodsFor: 'initialization' stamp: '' prior: 30450069! initialize super initialize. changes := OrderedCollection new! ! !IRReconstructor methodsFor: 'initialization' stamp: 'ToonVerwaest 3/28/2011 00:05' prior: 34798923! initialize temps := Dictionary new. remoteTemps := Dictionary new. closureCopiedValues := Dictionary new. sourceMapByteIndex := 0. super initialize.! ! !FuzzyLabelMorph methodsFor: 'initialization' stamp: 'gvc 8/9/2007 12:52' prior: 22815519! initialize "Initialize the receiver." offset := 1. alpha := 0.5. super initialize! ! !ZnLogEvent methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 3/29/2011 12:51' prior: 55532056! initialize self timeStamp: TimeStamp now. self category: #info. self processId: ZnUtils currentProcessID ! ! !ZnClient methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 7/27/2011 14:58' prior: 55354276! initialize request := ZnRequest empty! ! !PluggableDialogWindow methodsFor: 'initialization' stamp: 'gvc 8/8/2007 14:03' prior: 29406510! initialize "Initialize the receiver." super initialize. self buttons: super newButtons! ! !DialogItemsChooser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/16/2010 00:26' prior: 20675235! initialize super initialize. selection := OrderedCollection new.! ! !MergeDiffMorph methodsFor: 'initialization' stamp: 'gvc 1/8/2009 18:17' prior: 25555011! initialize "Initialize the receiver." super initialize. self allowJoinClicks: true! ! !RBNamespace methodsFor: 'initialization' stamp: 'lr 9/8/2011 20:25' prior: 30853135! initialize changes := RBCompositeRefactoryChange new. environment := RBBrowserEnvironment new. newClasses := IdentityDictionary new. changedClasses := IdentityDictionary new. removedClasses := Set new. implementorsCache := IdentityDictionary new. sendersCache := IdentityDictionary new! ! !FLMaterializer methodsFor: 'initialization' stamp: 'MartinDias 2/21/2013 23:48' prior: 21589965! initialize super initialize. self setDefaultMaterialization. self signature: self class defaultSignature. self version: self class currentVersion. migrations := Dictionary new. globalEnvironment := self class environment.! ! !NECTestClass methodsFor: 'initialization' stamp: '' prior: 27864264! initialize: aRectangle constantInteger := 15. constantString := 'Ruben'. constantSymbol := #Symbol. constantArray := #(15 16 17 28 ). constantBoolean := true. typeSuggestingParameter := aRectangle. messageSend := Dictionary new. messageSend2 := aRectangle origin. globalVarKeyword := SortedCollection sortBlock: [:a :b | a <= b]. globalVarKeyword2 := SortedCollection new: 15. constantNil := nil. typeSuggestingParameter2 := nil. complexInit := 15 > 16 ifTrue: [#Symbol] ifFalse: ['String']. complexInit2 := Dictionary new: aRectangle origin x. ! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: '' prior: 20814739! initialize: n contents initialize: n. self contentsChanged.! ! !SpecSplitterVertical methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 45579814! initialize super initialize. selector := #newVSplitterAt:. layoutFrame := ((0@0 corner: 0@0) asLayoutFrame rightOffset: 1). commands := nil.! ! !ColorChooserMorph methodsFor: 'initialization' stamp: 'gvc 5/22/2007 11:44' prior: 19658332! initialize "Initialize the receiver." enabled := true. super initialize! ! !TimeMeasuringTest methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:13' prior: 53155625! initialize super initialize. shouldProfile := false.! ! !ZdcPluginSSLSession methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 6/28/2012 09:27' prior: 55075293! initialize "Initialize the receiver" [ handle := self primitiveSSLCreate ] on: PrimitiveFailed do: [ :exception | "Give a more human friendly error message" ZdcPluginMissing signal ] ! ! !ChooseDropListDialogWindow methodsFor: 'initialization' stamp: 'gvc 1/12/2007 14:35' prior: 19021726! initialize "Initialize the receiver." self list: #(). super initialize! ! !RowScrollerMorph methodsFor: 'initialization' stamp: 'gvc 1/8/2010 13:56' prior: 32303176! initialize "Initialize the receiver." super initialize. self leftButton: self newLeftButton; rightButton: self newRightButton; scroller: self newScroller; changeTableLayout; listDirection: #leftToRight; cellInset: 2; addMorphBack: self leftButton; addMorphBack: self scroller; addMorphBack: self rightButton! ! !TabManager methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 45606988! initialize super initialize. toolbar := TabBar new. processes := OrderedCollection new. self registerBarActions. self registerShortcuts. container := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. contentsWrapper := Morph new color: Smalltalk ui theme class lightBaseColor; changeProportionalLayout; yourself. self changeProportionalLayout. self addMorphs! ! !ClassAPIHelpBuilder methodsFor: 'initialization' stamp: 'tbn 3/8/2010 16:37' prior: 19094104! initialize "Initializes the receiver" super initialize. addSubclasses := false. addMethods := true. subclassesAsSeparateTopic := true.! ! !OCTempVariable methodsFor: 'initialization' stamp: 'MarcusDenker 9/5/2010 20:18' prior: 34924994! initialize super initialize. escaping := false.! ! !AthensDemoMorph methodsFor: 'initialization' stamp: 'IgorStasenko 8/29/2012 10:22' prior: 40609242! initialize | ref | super initialize. self extent: self defaultExtent. self color: self backColor. surface := AthensCairoSurface extent: self extent. current := 1. frame := 0. ref := 'Pharo.png' asFileReference. pharoLogo := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. ref := 'esug-balloon.png' asFileReference. esugBallon := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. self startStepping. ! ! !FreeTypeNameParser methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:55' prior: 22772022! initialize super initialize. delimiters := ',.-:='. Character separators do:[:c | delimiters := delimiters , c asString]. ! ! !AthensCairoSurface methodsFor: 'initialization' stamp: 'IgorStasenko 4/26/2013 15:19' prior: 40461983! initialize "the handle should be set already since we using an NB callout to create an instance" handle value = 0 ifTrue: [ self error: 'Error creating new surface' ]. session := Smalltalk session. id := self class registerSurface: self. context := self newCanvas. builder := AthensCairoPathBuilder new. builder context: context. ftFontRenderer := CairoFreetypeFontRenderer new canvas: context. NBExternalResourceManager addResource: self.! ! !OCKeyedSet methodsFor: 'initialization' stamp: 'MarcusDenker 8/20/2010 11:22' prior: 34972071! initialize: n super initialize: n. keyBlock := [:element | element key]. ! ! !TestInWorldMorph methodsFor: 'initialization' stamp: 'ar 8/4/2003 00:06' prior: 52359638! initialize super initialize. outOfWorldCount := intoWorldCount := 0.! ! !ClassModification methodsFor: 'initialization' stamp: 'ToonVerwaest 4/1/2011 03:31' prior: 41755448! initialize super initialize. changes := IdentityDictionary new. copies := IdentityDictionary new. removals := {}. additions := {}.! ! !MCRepositoryGroup methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:03' prior: 41432203! initialize super initialize. repositories := OrderedCollection new! ! !RBBlockReplaceRule methodsFor: 'initialization' stamp: '' prior: 30321441! initialize super initialize. replaceBlock := [:aNode | aNode]! ! !MCWorkingCopyBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 5/15/2012 17:02' prior: 25184833! initialize super initialize. order := self class order. self registerToAnnouncer. ! ! !NBFFICallout methodsFor: 'initialization' stamp: 'IgorStasenko 8/3/2011 06:33' prior: 27512419! initialize super initialize. coercionMayFail := false! ! !MethodFinder methodsFor: 'initialization' stamp: 'cb 6/25/2013 13:24' prior: 41592483! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: newDay:month:year: newDay:year: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: leapYear: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !RBRefactoringManager methodsFor: 'initialization' stamp: '' prior: 31146219! initialize refactorings := Bag new! ! !Clipboard methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:47' prior: 19368428! initialize super initialize. contents := '' asText. recent := OrderedCollection new! ! !PragmaCollector methodsFor: 'initialization' stamp: 'alain.plantec 9/18/2009 15:26' prior: 29898421! initialize super initialize. announcer := Announcer new. self installSystemNotifications! ! !QSystemTally methodsFor: 'initialization' stamp: 'AlexandreBergel 1/29/2013 11:02' prior: 38595941! initialize super initialize. ! ! !MetacelloConfigurationBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:56' prior: 48002249! initialize super initialize. self windowIcon: self taskbarIcon. ! ! !CompositeFillStyle methodsFor: 'initialization' stamp: 'gvc 3/20/2008 23:02' prior: 20049285! initialize "Initialize the receiver." super initialize. self fillStyles: OrderedCollection new! ! !DynamicGroup methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/14/2012 12:41' prior: 21067735! initialize super initialize. readOnly := false. blocks ifNil: [ blocks := OrderedCollection with: [{}] ]! ! !NonReentrantWeakMessageSend methodsFor: 'initialization' stamp: 'gvc 10/25/2006 18:04' prior: 28472863! initialize "Initialize the receiver." super initialize. self executing: false! ! !ZdcAbstractSocketStream methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 5/18/2011 15:59' prior: 55031611! initialize timeout := 5. debug := false. self initializeBuffers ! ! !ZnBase64Encoder methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 12/15/2012 13:48' prior: 55255562! initialize super initialize. alphabet := DefaultAlphabet. inverse := DefaultInverse ! ! !CornerGripMorph methodsFor: 'initialization' stamp: 'gvc 4/26/2007 12:08' prior: 20228599! initialize super initialize. self extent: self defaultWidth @ self defaultHeight. self layoutFrame: self gripLayoutFrame! ! !FLHeader methodsFor: 'initialization' stamp: 'MarianoMartinezPeck 7/28/2012 12:33' prior: 21540418! initialize additionalObjects := IdentityDictionary new. preMaterializationActions := OrderedCollection new. postMaterializationActions := OrderedCollection new.! ! !OptimizedBlockLocalTempReadBeforeWrittenVisitor methodsFor: 'initialization' stamp: 'eem 9/5/2009 21:03' prior: 28697288! initialize inOptimizedBlock := false! ! !MetacelloCommonMCSpecLoader methodsFor: 'initialization' stamp: 'DaleHenrichs 3/10/2010 14:41' prior: 25797219! initialize self loaderPolicy! ! !CairoFontOptions methodsFor: 'initialization' stamp: 'IgorStasenko 9/2/2012 01:16' prior: 40482418! initialize self registerAsExternalResource. self setDefaults! ! !RBCategoryEnvironment methodsFor: 'initialization' stamp: 'lr 2/26/2009 14:25' prior: 30372758! initialize super initialize. categories := IdentitySet new! ! !MultiCharacterScanner methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:11' prior: 27264788! initialize super initialize. destX := destY := leftMargin := 0.! ! !Finder methodsFor: 'initialization' stamp: 'sd 4/21/2011 15:50' prior: 22119061! initialize super initialize. searchingString := self defaultString. environment := self defaultEnvironment. packagesSelection := self defaultPackagesSelection. resultDictionary := Dictionary new. currentSearchMode := #Selectors. useRegEx := false. ! ! !IRTranslator methodsFor: 'initialization' stamp: 'MarcusDenker 5/27/2013 16:04' prior: 39476929! initialize gen := self compilationContext bytecodeGeneratorClass new . trailer := CompiledMethodTrailer empty. currentScope := Stack new. tempVectorStack := Stack new. ! ! !NBFnSpecParser methodsFor: 'initialization' stamp: 'IgorStasenko 8/21/2011 02:50' prior: 27546478! initialize requestor := self. ! ! !ObjectStringConverter methodsFor: 'initialization' stamp: 'GaryChambers 3/9/2011 13:33' prior: 28681726! initialize "Initialize the receiver." super initialize. self objectTransformBlock: [:obj | obj]; stringTransformBlock: [:string | string]! ! !NavigationHistory methodsFor: 'initialization' stamp: 'CamilloBruni 10/4/2012 11:29' prior: 28334259! initialize storage := OrderedCollection new. index := 0. paused := false.! ! !ExternalClipboard methodsFor: 'initialization' stamp: 'StephaneDucasse 8/30/2009 14:55' prior: 21392958! initialize super initialize. clipboard := [self createClipboard] on: Error do: [:ex | clipboard := 0]! ! !NBExternalHeapManager methodsFor: 'initialization' stamp: 'Igor.Stasenko 9/24/2010 23:57' prior: 27423184! initialize sema := Semaphore forMutualExclusion. pages := Dictionary new. freeBlocks := IdentitySet new. reservedBlocks := Dictionary new.! ! !STEditor methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:04' prior: 48028885! initialize super initialize. object := nil asValueHolder! ! !ZnLogListener methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 3/29/2011 11:45' prior: 55535625! initialize lock := Monitor new. self enabled: true ! ! !WeakSet methodsFor: 'initialization' stamp: 'nice 4/4/2006 22:09' prior: 54832720! initialize: n "Initialize array to an array size of n" flag := Object new. array := WeakArray new: n. array atAllPut: flag. tally := 0! ! !ZnServerSessionManager methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 11/10/2012 19:06' prior: 55671719! initialize super initialize. sessions := Dictionary new! ! !AtomicQueueItem methodsFor: 'initialization' stamp: 'IgorStasenko 2/28/2011 16:00' prior: 17774142! initialize "make circular" super initialize. next := self.! ! !AthensBalloonSurface methodsFor: 'initialization' stamp: 'IgorStasenko 3/21/2012 19:12' prior: 40353157! initialize pathTransform := AthensAffineTransform new. paintTransform := AthensAffineTransform new. imageTransform := AthensAffineTransform new " AthensGenericTransform new". fillTransform := AthensAffineTransform new. strokeTransform := AthensAffineTransform new. maskEnabled := false.! ! !RBMultiEnvironment methodsFor: 'initialization' stamp: 'lr 9/8/2011 20:32' prior: 30843713! initialize super initialize. environmentDictionaries := Dictionary new. environment := RBSelectorEnvironment new! ! !IncrementalSliderMorph methodsFor: 'initialization' stamp: 'gvc 9/2/2009 14:22' prior: 23567521! initialize "Initialize the receiver." super initialize. self sliderMorph: self newSliderMorph. self changeTableLayout; listDirection: #leftToRight; cellInset: 0; borderWidth: 0; hResizing: #spaceFill; vResizing: #spaceFill; borderColor: Color transparent; addMorphBack: self newDecrementButton; addMorphBack: self sliderMorph; addMorphBack: self newIncrementButton! ! !MultipleMethodsEditorAllButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 48018961! initialize super initialize. state := true.! ! !FileList methodsFor: 'initialization' stamp: 'MarcusDenker 8/15/2010 15:05' prior: 21869592! initialize super initialize. ok := false. dirSelectionBlock := [ :dirName | true].! ! !Job methodsFor: 'initialization' stamp: 'CamilloBruni 8/31/2012 09:32' prior: 24069978! initialize super initialize. min := 0. max := 100. currentValue := 0. title := ''. isRunning := false. children := OrderedCollection new.! ! !BlueUITheme methodsFor: 'initialization' stamp: 'tg 8/31/2010 13:51' prior: 18336354! initialize "self beCurrent" super initialize. self windowActiveDropShadowStyle: #nodiffuse! ! !StartupLoader methodsFor: 'initialization' stamp: 'IgorStasenko 2/4/2012 19:11' prior: 50892817! initialize super initialize. actions := Dictionary new. errors := OrderedCollection new. ! ! !SHParserST80 methodsFor: 'initialization' stamp: '' prior: 32521953! initialize environment := Smalltalk! ! !MailAddressParser methodsFor: 'initialization' stamp: 'ls 9/13/1998 01:25' prior: 25276784! initialize: tokenList tokens := tokenList asOrderedCollection copy. addresses := OrderedCollection new.! ! !CompilationContext methodsFor: 'initialization' stamp: 'MarcusDenker 5/10/2013 10:59' prior: 37352121! initialize options := Set new! ! !SHTextStyler methodsFor: 'initialization' stamp: '' prior: 32588058! initialize stylingEnabled := true! ! !TableLayoutProperties methodsFor: 'initialization' stamp: 'ar 11/14/2000 17:45' prior: 52273631! initialize super initialize. cellSpacing := listSpacing := wrapDirection := #none. cellPositioning := #center. listCentering := wrapCentering := #topLeft. listDirection := #topToBottom. reverseTableCells := rubberBandCells := false. layoutInset := cellInset := minCellSize := 0. maxCellSize := 1073741823. "SmallInteger maxVal" ! ! !ExclusiveWeakMessageSend methodsFor: 'initialization' stamp: 'gvc 10/25/2006 18:13' prior: 21360810! initialize "Initialize the receiver." executing := self class newSharedState. super initialize.! ! !GradientPaint methodsFor: 'initialization' stamp: 'IgorStasenko 4/12/2013 09:51' prior: 40234629! initialize super initialize. colorRamp := OrderedCollection new.! ! !CustomQuestionDialogWindow methodsFor: 'initialization' stamp: 'GaryChambers 8/23/2010 11:36' prior: 20315977! initialize "Initialize the receiver." self yesButton: self defaultYesButton; noButton: self defaultNoButton; cancelButton: self defaultCancelButton. super initialize! ! !AthensAffineTransform methodsFor: 'initialization' stamp: 'IgorStasenko 3/26/2011 02:09' prior: 40299876! initialize self loadIdentity! ! !AthensCairoPatternPaint methodsFor: 'initialization' stamp: '' prior: 40474137! initialize handle value = 0 ifTrue: [ self error: 'Error creating new paint' ]. "register to be finalized" NBExternalResourceManager addResource: self data: handle.! ! !MCDirectoryRepository methodsFor: 'initialization' stamp: 'CamilloBruni 5/4/2012 21:35' prior: 41474222! initialize super initialize. directory := FileSystem workingDirectory! ! !HashedCollection methodsFor: 'initialization' stamp: 'TristanBourgois 4/30/2010 16:13' prior: 23284434! initialize: n "Initialize array to an array size of n" array := Array new: n. tally := 0! ! !IRSequence methodsFor: 'initialization' stamp: 'jb 4/1/2010 13:48' prior: 34891729! initialize sequence := OrderedCollection new.! ! !Cookie methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48013553! initialize super initialize. timeToLive := self defaultTimeToLive. defaultValue := nil. contents := defaultValue.! ! !StrikeFontFixer methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:06' prior: 50986004! initialize super initialize. charForms := Array new: 256. ! ! !IRBuilder methodsFor: 'initialization' stamp: 'MarcusDenker 6/13/2012 14:12' prior: 34788708! initialize ir := IRMethod new. jumpAheadStacks := IdentityDictionary new. jumpBackTargetStacks := IdentityDictionary new. sourceMapNodes := OrderedCollection new. "stack" currentScope := Stack new. self pushScope: ir. "Leave an empty sequence up front (guaranteed not to be in loop)" ir startSequence: ((IRSequence orderNumber: 0) method:ir). currentSequence := (IRSequence orderNumber: 1) method:ir. ir startSequence add: (IRJump new destination: currentSequence; bytecodeIndex: sourceMapByteIndex; yourself). ! ! !OCASTTranslator methodsFor: 'initialization' stamp: 'ClementBera 12/11/2012 11:35' prior: 34765726! initialize methodBuilder := IRBuilder new. effectTranslator := self as: OCASTTranslatorForEffect. valueTranslator := self as: OCASTTranslatorForValue. effectTranslator instVarNamed: #effectTranslator put: effectTranslator. effectTranslator instVarNamed: #valueTranslator put: valueTranslator. valueTranslator instVarNamed: #valueTranslator put: valueTranslator. ! ! !RBThemeAPIUpdateRule methodsFor: 'initialization' stamp: 'DamienCassou 5/14/2013 16:23' prior: 39205757! initialize super initialize. self rewriteRule replace: 'UITheme current' with: 'Smalltalk ui theme'; replace: 'ThemeIcons current' with: 'Smalltalk ui icons'! ! !ZnServerSession methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 11/11/2012 08:01' prior: 55669470! initialize super initialize. attributes := SmallDictionary new. created := modified := DateAndTime now! ! !HistoryCollection methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/17/2011 13:47' prior: 23424469! initialize super initialize. maxSize := 5. storage := OrderedCollection new: maxSize.! ! !AthensSimplePathBuilder methodsFor: 'initialization' stamp: 'IgorStasenko 4/18/2013 14:26' prior: 40264312! initialize "A new path always starts from implicit (moveTo:0@0) segment. If next segment is moveTo: , the point of already existing move segment will be changed, avoiding creating extra move segments. " absolute := false. contourStartPt := ZeroPoint. pathStart := lastSegment := (AthensMoveSegment new point: ZeroPoint).! ! !NECTypedModel methodsFor: 'initialization' stamp: '' prior: 27868551! initialize super initialize. expanded := true! ! !MCSliceMaker methodsFor: 'initialization' stamp: 'AlainPlantec 10/11/2011 11:56' prior: 24985970! initialize super initialize. info := MCSliceInfo new. info addDependent: self. ! ! !NBFnSpec methodsFor: 'initialization' stamp: 'IgorStasenko 8/19/2011 17:53' prior: 27545607! initialize arguments := OrderedCollection new! ! !MarginBorder methodsFor: 'initialization' stamp: 'gvc 10/17/2006 11:05' prior: 25361979! initialize "Initialize the receiver." super initialize. self margin: 0! ! !SerialPort methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:21' prior: 33043502! initialize "Default port settings." super initialize. port := nil. "set when opened" baudRate := 9600. "9600 baud" stopBitsType := 1. "one stop bit" parityType := 0. "no parity" dataBits := 8. "8 bits" outputFlowControlType := 0. "none" inputFlowControlType := 0. "none" xOnByte := 19. "ctrl-S" xOffByte := 24. "ctrl-X" ! ! !FLLargeIdentitySet methodsFor: 'initialization' stamp: 'ul 12/18/2011 11:31' prior: 21571983! initialize super initialize. array := Array new: 4096. includesNil := false! ! !HelpTopic methodsFor: 'initialization' stamp: 'tbn 3/8/2010 08:44' prior: 23394080! initialize "Initializes the receiver" super initialize. self title: self defaultTitle. self contents: ''. self key: '' ! ! !AthensPangoRectangle methodsFor: 'initialization' stamp: 'FernandoOlivero 2/5/2012 17:34' prior: 40553784! initialize x := y := width := height := 0.! ! !AbstractGroup methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/14/2012 12:17' prior: 17232145! initialize super initialize. readOnly := false. self registerToAnnouncements.! ! !MCMczWriter methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:03' prior: 24824551! initialize super initialize. zip := ZipArchive new. ! ! !ExpanderTitleMorph methodsFor: 'initialization' stamp: 'gvc 1/22/2009 15:37' prior: 21372287! initialize "Initialize the receiver." super initialize. self expanded: false; changeTableLayout; borderStyle: self defaultBorderStyle; layoutInset: (self theme expanderTitleInsetFor: self); listDirection: #leftToRight; listCentering: #center; wrapCentering: #center; buttonMorph: self newExpandButtonMorph; addMorph: self buttonMorph; labelMorph: self newLabelMorph; on: #mouseUp send: #toggleExpanded to: self! ! !UUID methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 11:15' prior: 54445521! initialize super initialize. self primMakeUUID.! ! !PharoUserPermissions methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48007849! initialize super initialize. canBrowse := false. canDebug := false. canDropOSFile := false. canEditCode := false. canEvaluateCode := false. canInspect := false. canRunStartupScript := false. canShowMorphHalo := false. canEditUser := false. canSaveImage := false.! ! !SourceFileArray methodsFor: 'initialization' stamp: 'MarcusDenker 5/3/2012 13:27' prior: 50635271! initialize files := Array new: 2. files at: 1 put: (SourceFiles at: 1). files at: 2 put: (SourceFiles at: 2)! ! !ClassFactoryForTestCase methodsFor: 'initialization' stamp: 'Noury 10/26/2008 14:01' prior: 19266266! initialize super initialize. self createdClasses: IdentitySet new! ! !JobProgressMorph methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:05' prior: 48005961! initialize super initialize. self addDependent: SystemProgressMorph uniqueInstance.! ! !MCAncestry methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:02' prior: 24609193! initialize super initialize. ancestors := #(). stepChildren := #()! ! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! !Trait method! initialize "moved here from the class side's #new" super initialize. self superclass: Object. "no longer sending any messages, some of them crash the VM" self methodDict: self emptyMethodDictionary. self setFormat: Object format. self traitComposition: nil. self users: IdentitySet new.! ! "AST-Core"! "AST-Interpreter-Core"! "Announcements-Core"! "AsmJit-Core"! "AsmJit-Instructions"! "AsmJit-Operands"! "AsmJit-StackManagement"! "AsmJit-x86"! "Athens-Balloon"! "Athens-Cairo"! "Athens-Core"! "Athens-Examples"! "Athens-Morphic"! "Athens-PangoCairo"! "Athens-Text"! "Balloon"! "CI-Core"! "CodeImport"! "Collections-Abstract"! "Collections-Atomic"! "Collections-Sequenceable"! "Collections-Streams"! "Collections-Support"! "Collections-Unordered"! "Collections-Weak"! "Compiler"! "CompilerTests"! "FileSystem-Core"! "FileSystem-Disk"! "FileSystem-Memory"! "Files"! "FreeType"! "Fuel"! "Graphics-Fonts"! "Graphics-Primitives"! "GroupManager"! "Growl"! "HelpSystem-Core"! "HelpSystem-Tests"! "Kernel"! "KeyChain"! "Keymapping-Core"! "Keymapping-Pragmas"! "Manifest-Core"! "Manifest-CriticBrowser"! "MenuRegistration"! "Metacello-MC"! "Monticello"! "MonticelloConfigurations"! "MonticelloGUI"! "Morphic-Base"! "Morphic-Examples"! "MorphicTests"! "Multilingual-TextConversion"! "NECompletion"! "NOCompletion"! "NativeBoost-Core"! "NativeBoost-Tests"! "NativeBoost-Win32"! "Nautilus"! "NautilusCommon"! "NautilusRefactoring"! "Network-Kernel"! "Network-MIME"! "Network-RFC822"! "Network-UUID"! "NewList"! "NonInteractiveTranscript"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "PackageInfo"! "Polymorph-EventEnhancements"! "Polymorph-Geometry"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "RPackage-Core"! "RecentSubmissions"! "Refactoring-Changes"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Environment"! "Refactoring-Tests-Core"! "Regex-Core"! "Ring-Core-Containers"! "Ring-Core-Kernel"! "SUnit-Core"! "SUnit-UI"! "SUnit-UITesting"! "Shout"! "Slot"! "Spec-Bindings"! "Spec-Builder"! "Spec-Core"! "Spec-Examples"! "Spec-Inspector"! "Spec-Layout"! "Spec-Tools"! "Spec-Widgets"! "StartupPreferences"! "System-Announcements"! "System-Clipboard"! "System-CommandLine"! "System-FilePackage"! "System-FileRegistry"! "System-Serial Port"! "System-Support"! "System-Tools"! "Tabs"! "Tests"! "Text-Core"! "Text-Edition"! "Text-Scanning"! "Tools"! "Traits"! "Transcript"! "UIManager"! "Zinc-Character-Encoding-Core"! "Zinc-HTTP"! "Zodiac-Core"! "Zodiac-Extra"! ----End fileIn----! ----QUIT----an Array(14 August 2013 3:23:02 pm) Pharo.image priorSource: 15299759! ----STARTUP----an Array(14 August 2013 3:35:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 August 2013 3:35:12 pm) Pharo-30336.image priorSource: 15444383! ----STARTUP----an Array(19 August 2013 2:44:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/19/2013 10:47' prior: 48854499! commentForCurrentUpdate ^ '11394 Needed support for traits in ClassFactoryForTestCase https://pharo.fogbugz.com/f/cases/11394 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/19/2013 10:47'! script129 ^ 'AST-Core-StephaneDucasse.185.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.109.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-EstebanLorenzano.330.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1563.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.852.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-StephaneDucasse.252.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.67.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.515.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-StephaneDucasse.57.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-StephaneDucasse.387.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.886.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-StephaneDucasse.55.mcz Refactoring-Environment-StephaneDucasse.26.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-StephaneDucasse.93.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.611.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1212.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/19/2013 10:47'! update30337 "self new update30337" self withUpdateLog: '11394 Needed support for traits in ClassFactoryForTestCase https://pharo.fogbugz.com/f/cases/11394 '. self loadTogether: self script129 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassFactoryForTestCase commentStamp: 'LaurentLaffont 4/15/2011 20:20' prior: 42171438! I'm useful when classes needs to be created during the execution of the test. This avoid polluting your unit tests with dummy and mock classes. A typical usage of it is: TestCase subclass: #YourTest instanceVariableNames: 'classFactory' YourTest>>setUp classFactory := ClassFactoryForTestCase new YourTest>>tearDown classFactory deleteClasses. YourTest>>testIsBehavior | cls | cls := classFactory newClass. self assert: cls isBehavior ! !ClassFactoryWithOrganization methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:04' prior: 41555475! newSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | newClass := self class classBuilder name: self newClassName inEnvironment: self organization environment subclassOf: aClass type: aClass typeOfClass instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: category asSymbol. self createdClasses add: newClass. ^newClass! ! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'SebastianTleye 8/9/2013 13:49' prior: 19271978! testDefaultCategoryCleanUp | createdClassNames createdTraitNames allClasses allTraits | 3 timesRepeat: [ factory newClass. factory newTrait]. createdClassNames := factory createdClassNames. createdTraitNames := factory createdTraitNames. factory cleanUp. self assert: (factory createdClasses allSatisfy: [:class| class isObsolete]). self assert: (factory createdTraits allSatisfy: [:trait| trait isObsolete]). allClasses := SystemNavigation new allClasses. allTraits := Smalltalk globals allTraits. self assert: (factory createdClasses noneSatisfy: [:class| allClasses includes: class]). self assert: (factory createdTraits noneSatisfy: [:trait| allTraits includes: trait]). self deny: (SystemOrganization categories includes: factory defaultCategory). self deny: (ChangeSet current changedClassNames includesAnyOf: createdClassNames) ! ! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'SebastianTleye 8/9/2013 13:37'! testSingleTraitCreation |trait | trait := factory newTrait. self assert: (Smalltalk globals allTraits includes: trait). self assert: trait users size = 0. self assert: trait traits size = 0.! ! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'SebastianTleye 8/9/2013 13:43'! testTraitCreationInDifferentCategories | firstThreeTraits lastTwoTraits | 3 timesRepeat: [ factory newTraitInCategory: #One]. firstThreeTraits := factory createdTraits copy. 2 timesRepeat: [ factory newTraitInCategory: #Two]. lastTwoTraits := factory createdTraits copyWithoutAll: firstThreeTraits. self assert: (firstThreeTraits allSatisfy: [:trait| trait category = (factory packageName, '-', #One) asSymbol]). self assert: (lastTwoTraits allSatisfy: [:trait| trait category = (factory packageName, '-', #Two) asSymbol]).! ! !ClassFactoryForTestCase commentStamp: 'LaurentLaffont 4/15/2011 20:20' prior: 49010304! I'm useful when classes needs to be created during the execution of the test. This avoid polluting your unit tests with dummy and mock classes. A typical usage of it is: TestCase subclass: #YourTest instanceVariableNames: 'classFactory' YourTest>>setUp classFactory := ClassFactoryForTestCase new YourTest>>tearDown classFactory deleteClasses. YourTest>>testIsBehavior | cls | cls := classFactory newClass. self assert: cls isBehavior ! !ClassFactoryForTestCase methodsFor: 'cleaning' stamp: 'SebastianTleye 8/9/2013 12:06' prior: 19265127! cleanUp | createdClassNames createdTraitNames | createdClassNames := self createdClassNames. createdTraitNames := self createdTraitNames. self deleteClasses. self deleteTraits. self deletePackage. self cleanUpChangeSetForClassNames: createdClassNames. self cleanUpChangeSetForClassNames: createdTraitNames! ! !ClassFactoryForTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 8/9/2013 11:14'! createdTraitNames ^self createdTraits collect: [:trait | trait name]! ! !ClassFactoryForTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 8/9/2013 11:14'! createdTraits ^createdTraits! ! !ClassFactoryForTestCase methodsFor: 'accessing' stamp: 'SebastianTleye 8/9/2013 11:14'! createdTraits: traits createdTraits := traits asIdentitySet ! ! !ClassFactoryForTestCase methodsFor: 'cleaning' stamp: 'SebastianTleye 8/9/2013 11:16' prior: 19265670! delete: aBehavior aBehavior isObsolete ifTrue: [^self]. aBehavior removeFromChanges. aBehavior removeFromSystemUnlogged ! ! !ClassFactoryForTestCase methodsFor: 'cleaning' stamp: 'SebastianTleye 8/9/2013 11:15'! deleteTraits self createdTraits do: [:trait| self delete: trait]! ! !ClassFactoryForTestCase methodsFor: 'cleaning' stamp: 'SebastianTleye 8/9/2013 11:15' prior: 48995444! initialize super initialize. self createdClasses: IdentitySet new. self createdTraits: IdentitySet new! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:03'! newClassName | postFix | postFix := (self createdClasses size + 1) printString. ^(#ClassForTestToBeDeleted, postFix) asSymbol! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:46'! newClassUsing: aTraitComposition ^self newSubclassOf: self defaultSuperclass uses: aTraitComposition instanceVariableNames: '' classVariableNames: '' category: self defaultCategoryPostfix.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:42' prior: 19267062! newSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString ^self newSubclassOf: aClass uses: { } instanceVariableNames: ivNamesString classVariableNames: classVarsString category: self defaultCategoryPostfix! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:42' prior: 19267396! newSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category ^self newSubclassOf: aClass uses: { } instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:40'! newSubclassOf: aClass uses: aTraitComposition instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | newClass := aClass subclass: self newClassName uses: aTraitComposition instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: (self packageName, '-', category) asSymbol. self createdClasses add: newClass. ^newClass! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 12:47'! newSubclassOf: aClass using: aTraitComposition ^self newSubclassOf: aClass uses: aTraitComposition instanceVariableNames: '' classVariableNames: '' category: self defaultCategoryPostfix.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:37'! newTrait ^self newTraitNamed: self newTraitName uses: Array new category: self defaultCategoryPostfix.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:38'! newTraitInCategory: category ^self newTraitNamed: self newTraitName uses: Array new category: category asSymbol.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:50'! newTraitName | postFix | postFix := (self createdTraits size + 1) printString. ^(#TraitForTestToBeDeleted, postFix) asSymbol! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 13:47'! newTraitNamed: aTraitName uses: aTraitComposition category: aCategory | newTrait | newTrait := Trait named: aTraitName uses: aTraitComposition category: (self packageName, '-', aCategory) asSymbol.. self createdTraits add: newTrait. ^newTrait.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'SebastianTleye 8/9/2013 11:48'! newTraitUsing: aTraitComposition. ^self newTraitNamed: self newTraitName uses: aTraitComposition category: self defaultCategoryPostfix.! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'SebastianTleye 8/9/2013 11:04' prior: 19268515! silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | SystemAnnouncer uniqueInstance suspendAllWhile: [ newClass := aClass subclass: self newClassName instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: (self packageName, '-', category) asSymbol. ]. self createdClasses add: newClass. ^newClass ! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'SebastianTleye 8/9/2013 11:04' prior: 19269083! silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString package: packageName | newClass | SystemAnnouncer uniqueInstance suspendAllWhile: [ newClass := aClass subclass: self newClassName instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: packageName asSymbol. ]. self createdClasses add: newClass. ^newClass ! ! ClassFactoryForTestCase removeSelector: #newName! "SUnit-Core"! "SUnit-Tests"! ----End fileIn----! ----QUIT----an Array(19 August 2013 2:44:45 pm) Pharo.image priorSource: 15444586! ----STARTUP----an Array(19 August 2013 2:56:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 August 2013 2:56:58 pm) Pharo-30337.image priorSource: 15465398! ----STARTUP----an Array(21 August 2013 6:11:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/21/2013 09:34' prior: 48999322! commentForCurrentUpdate ^ '11428 Remove a buggy redundant test in FuelTests https://pharo.fogbugz.com/f/cases/11428 11417 Test for checking repeated code in superclasses must not watch in nativeBoost classes https://pharo.fogbugz.com/f/cases/11417 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/21/2013 09:34'! script130 ^ 'AST-Core-StephaneDucasse.185.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-StephaneDucasse.109.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.55.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1563.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.852.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-StephaneDucasse.252.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.67.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.515.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-StephaneDucasse.57.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-StephaneDucasse.387.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.886.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-StephaneDucasse.26.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-StephaneDucasse.93.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.612.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1212.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/21/2013 09:35'! update30338 "self new update30338" self withUpdateLog: '11428 Remove a buggy redundant test in FuelTests https://pharo.fogbugz.com/f/cases/11428 11417 Test for checking repeated code in superclasses must not watch in nativeBoost classes https://pharo.fogbugz.com/f/cases/11417 '. self loadTogether: self script130 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBSmalllintChecker methodsFor: 'private' stamp: 'SebastianTleye 8/13/2013 17:27' prior: 31383775! checkClass: aClass context selectedClass: aClass. (environment includesClass: aClass) ifTrue: [rule checkClass: context]! ! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 8/13/2013 17:16' prior: 46827108! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses "The test is run for all the classes except for NativeBoost" | result | result := RBRepeteadMethodsInTheSuperclassRule new runOnEnvironment: (RBBrowserEnvironment new & (RBPackageEnvironment packageName: 'NativeBoost') not). self assert: result isEmpty.! ! FLBasicSerializationTest removeSelector: #testClasses! "FuelTests"! "Refactoring-Critics"! "Tests"! ----End fileIn----! ----QUIT----an Array(21 August 2013 6:11:23 pm) Pharo.image priorSource: 15465601! ----STARTUP----an Array(21 August 2013 6:23:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 August 2013 6:23:51 pm) Pharo-30338.image priorSource: 15477809! ----STARTUP----an Array(22 August 2013 6:47:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 8/22/2013 18:44' prior: 49020337! commentForCurrentUpdate ^ '11443 Icon for explicitRequirement methods https://pharo.fogbugz.com/f/cases/11443 11147 FileReference(Object)>>doesNotUnderstand: #other https://pharo.fogbugz.com/f/cases/11147 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 8/22/2013 18:44'! script131 ^ 'AST-Core-StephaneDucasse.185.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1563.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-StephaneDucasse.852.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-StephaneDucasse.252.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-StephaneDucasse.67.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-StephaneDucasse.57.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-StephaneDucasse.387.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-StephaneDucasse.26.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-StephaneDucasse.93.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.612.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1212.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 8/22/2013 18:44'! update30339 "self new update30339" self withUpdateLog: '11443 Icon for explicitRequirement methods https://pharo.fogbugz.com/f/cases/11443 11147 FileReference(Object)>>doesNotUnderstand: #other https://pharo.fogbugz.com/f/cases/11147 '. self loadTogether: self script131 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodIsATraitExplicitRequirementAction commentStamp: '' prior: 0! Action when the method is a explicitRequired! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'SebastianTleye 8/22/2013 13:50'! traitRequiredMethodIcon ^ icons at: #'traitRequiredMethodIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self traitRequiredMethodIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'SebastianTleye 8/22/2013 13:48'! traitRequiredMethodIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAEJGlDQ1BJQ0MgUHJvZmlsZQAA OBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baq T3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7 517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu /k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1O IT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY +5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4F e9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW 5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gp bbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJi tqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJR pTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q 8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0 /HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl 6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRd lb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbN DP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noon SInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8Ookmr dtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/ wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydE Ox83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAAHhJREFUKBWVkYsNwCAIREvThWQPh3IlB2Gl tme8BLSalMTw8R4YlPu144dJSikAZrbFxU9Q1SbeQadvRyFBf8c4ACgSomD011hgvpqyBEop ZIOfAN855xzELcGWaFgxTq2VpclP/4CnfHbuswTd/NydGLrwcR5cxQ/k/k4ULuy+OgAAAABJ RU5ErkJggg=='! ! !AbstractFileReference methodsFor: 'comparing' stamp: 'CamilloBruni 8/21/2013 17:51' prior: 17189868! <= other ^ self path <= other path! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 8/21/2013 17:55'! testChildrenSorting | directory sorted | directory := Path * 'plonk'. filesystem createDirectory: directory. filesystem createDirectory: directory / 'alfa'. filesystem createDirectory: directory / 'beta'. self markForCleanup: directory / 'alfa'. self markForCleanup: directory / 'beta'. self markForCleanup: directory. sorted := (filesystem childrenAt: directory) sorted. self assert: sorted size = 2. self assert: (sorted at: 1) basename = 'alfa'. self assert: (sorted at: 2) basename = 'beta'.! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 8/21/2013 17:54'! testChildrenSortingRoot | directory1 directory2 | "self skip." directory1 := Path * 'plonk1'. directory2 := Path * 'plonk2'. filesystem createDirectory: directory1. filesystem createDirectory: directory2. self markForCleanup: directory1. self markForCleanup: directory2. self assert: filesystem workingDirectory children sorted size = filesystem workingDirectory children size! ! !Path methodsFor: 'comparing' stamp: 'CamilloBruni 8/21/2013 17:51'! <= other ^ self fullName <= other fullName! ! !MethodIsATraitExplicitRequirementAction commentStamp: '' prior: 49043890! Action when the method is a explicitRequired! !MethodIsATraitExplicitRequirementAction methodsFor: 'order' stamp: 'SebastianTleye 8/22/2013 11:14'! actionOrder ^150.! ! !MethodIsATraitExplicitRequirementAction methodsFor: 'order' stamp: 'SebastianTleye 8/22/2013 14:00'! isActionHandled ^method isRequired and: [ method methodClass ~= method origin ]! ! !MethodIsATraitExplicitRequirementAction methodsFor: 'order' stamp: 'SebastianTleye 8/22/2013 13:50'! privateActionIcon "Return the icon for this action" "^ Smalltalk ui icons iconNamed: #traitRequiredMethodIcon" ^ IconicButton new target: method originMethod; actionSelector: #browse; labelGraphic: (Smalltalk ui icons iconNamed: #traitRequiredMethodIcon) ; color: Color transparent; extent: 12 @ 12; helpText: 'Browse the trait'; borderWidth: 0! ! "FileSystem-Core"! "FileSystem-Tests-Core"! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(22 August 2013 6:47:25 pm) Pharo.image priorSource: 15478012! ----STARTUP----an Array(22 August 2013 7:00:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 August 2013 7:00:35 pm) Pharo-30339.image priorSource: 15493981! ----STARTUP----an Array(25 August 2013 11:57:34 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(25 August 2013 11:57:38 am) Pharo.image priorSource: 15494184! ----STARTUP----an Array(25 August 2013 12:10:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 August 2013 12:10:14 pm) Pharo-30339.image priorSource: 15494398! !ScriptLoader commentStamp: '' prior: 42648390! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./integrated.sh scripts and before that once did a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: '' prior: 49049191! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./integrated.sh scripts and before that once did a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----an Array(25 August 2013 2:15:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/25/2013 14:13' prior: 49032752! commentForCurrentUpdate ^ '11453 Disable some shady tests in NB https://pharo.fogbugz.com/f/cases/11453 11445 Monticello refactoring to allow better FileTree support https://pharo.fogbugz.com/f/cases/11445 '! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'StephaneDucasse 8/22/2013 21:55' prior: 32759899! prepareNewUpdate self launchUpdate. self loadLatestScriptloader. self markPackagesBeforeNewCodeIsLoaded. self checkImageIsUptodate ifFalse: [self loadLatestUpdateList]. self checkImageIsUptodate ifFalse: [ ^ self inform: 'Your update.staged file and your image are not in sync!! Do not stress!! Normally it should be easy to fix. If the integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. ' ]. self setUpdateAndScriptVersionNumbers. self saveAsNewImageWithCurrentReleaseName. self inform: 'The new version number is ' , self currentUpdateVersionNumber asString , '. Ready to apply changes now.', String cr, 'You are now running in image ', (Smalltalk imageFile basename).! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/25/2013 14:13'! script132 ^ 'AST-Core-StephaneDucasse.185.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-StephaneDucasse.1563.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-StephaneDucasse.57.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-StephaneDucasse.387.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-StephaneDucasse.26.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-StephaneDucasse.93.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.612.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1212.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/25/2013 14:13'! update30340 "self new update30340" self withUpdateLog: '11453 Disable some shady tests in NB https://pharo.fogbugz.com/f/cases/11453 11445 Monticello refactoring to allow better FileTree support https://pharo.fogbugz.com/f/cases/11445 '. self loadTogether: self script132 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/23/2013 12:46' prior: 48316999! primExecuteCallbackEnumReturn: anEnumCb "This code misssing the stack alignment before doing callback. most probably is the reason of crashing VM." self halt. ^ NBFFICallout cdecl: {self enumClass. {self cbClass. #anEnumCb}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. asm push: 2400 asImm. asm call: asm EAX ] options: #(#optMayGC)! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 8/24/2013 14:06' prior: 48317709! testCallbackAAA |result| self skip: 'workaround: this crashes the VM sometimes'. result := (self executeCb: self callbackAAA ). self assert: (result isKindOf: self enumClass ). self assert: result value = 1. self assert: result item = #AAA.! ! !NBExternalEnumTests methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/23/2013 12:44' prior: 48318057! testCallbackEnumFromInt |result| self skip. result := (self executeCb: self callback ). self assert: (result isKindOf: self enumClass ). self assert: result value = 2400. self assert: result item = #DDD. ! ! !MCFileBasedRepository methodsFor: 'adding' stamp: 'ChristopheDemarey 8/22/2013 15:26'! addVersionInformationExtractedFrom: readableFileName to: versions | name | name := (readableFileName copyUpToLast: $.) copyUpTo: $(. name last isDigit ifTrue: [ versions add: {(name copyUpToLast: $-). "pkg name" ((name copyAfterLast: $-) copyUpTo: $.). "user" (((name copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ]). "version" readableFileName }]! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/22/2013 15:24'! versionsWithPackageNames | versions | versions := OrderedCollection new. self readableFileNames do: [ :each | self addVersionInformationExtractedFrom: each to: versions ]. ^ versions! ! !MCFileRepositoryInspector methodsFor: 'actions' stamp: 'ChristopheDemarey 8/22/2013 15:27' prior: 41459084! refresh packageList := nil. versions := repository versionsWithPackageNames. versions := versions select: [ :each | (each at: 3) isNumber ]. newer := Set new. inherited := Set new. loaded := Set new. self allManagers do: [ :each | | latest | self computeLoadedAndInheritedFromManager: each. latest := (versions select: [ :v | v first = each package name ]) detectMax: [ :v | v third ]. (latest notNil and: [ each ancestors allSatisfy: [ :ancestor | | av | av := ((ancestor name copyAfterLast: $-) copyAfter: $.) asInteger. av < latest third or: [ av = latest third and: [ ((ancestor name copyAfterLast: $-) copyUpTo: $.) ~= latest second ] ] ] ]) ifTrue: [ newer add: each package name ] ]. self changed: #packageList; changed: #packageSelection; changed: #versionList! ! MCFileRepositoryInspector removeSelector: #addVersionInformationExtractedFrom:to:! "Monticello"! "MonticelloGUI"! "NativeBoost-Tests"! ----End fileIn----! ----QUIT----an Array(25 August 2013 2:15:23 pm) Pharo.image priorSource: 15494603! ----STARTUP----an Array(25 August 2013 2:27:36 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 August 2013 2:27:36 pm) Pharo-30340.image priorSource: 15527723! ----STARTUP----an Array(26 August 2013 10:42:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/26/2013 10:38' prior: 49066402! commentForCurrentUpdate ^ '11425 Improve assert description of #testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses https://pharo.fogbugz.com/f/cases/11425 11424 Add #methods accessor to RBBrowserEnvironment https://pharo.fogbugz.com/f/cases/11424 10481 Cleanup method categories: do not use the same name with different cases https://pharo.fogbugz.com/f/cases/10481'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/26/2013 10:38'! script133 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-StephaneDucasse.16.mcz Athens-Cairo-StephaneDucasse.51.mcz Athens-CairoPools-MarcusDenker.7.mcz Athens-Core-StephaneDucasse.37.mcz Athens-Examples-StephaneDucasse.27.mcz Athens-Morphic-StephaneDucasse.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-StephaneDucasse.8.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1573.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.613.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1217.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/26/2013 10:39'! update30341 "self new update30341" self withUpdateLog: '11425 Improve assert description of #testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses https://pharo.fogbugz.com/f/cases/11425 11424 Add #methods accessor to RBBrowserEnvironment https://pharo.fogbugz.com/f/cases/11424 10481 Cleanup method categories: do not use the same name with different cases https://pharo.fogbugz.com/f/cases/10481'. self loadTogether: self script133 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*AST-Core' stamp: 'MarcusDenker 5/17/2013 15:39' prior: 38561130! parseTree ^(RBExplicitVariableParser parseMethod: self sourceCode onError: [ :msg :pos | ^ nil ]) methodClass: self methodClass. ! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 12/17/2012 15:53' prior: 34734958! debugHighlightRange ^ self debugHighlightStart to: self debugHighlightStop .! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: '' prior: 34735089! debugHighlightStart ^ self start ! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: '' prior: 34735177! debugHighlightStop ^ self stop ! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 12/18/2012 14:08' prior: 34735302! irInstruction "search for the first ir instruction that I generate" self methodNode ir sourceNode == self ifTrue: [^self methodNode ir]. ^self methodNode ir firstInstructionMatching: [:instr | instr sourceNode == self ] ! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/17/2013 16:55' prior: 35546111! methodOrBlockNode ^parent isNil ifTrue: [nil] ifFalse: [parent methodOrBlockNode]! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: '' prior: 34735581! owningScope ^ parent owningScope ! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/19/2013 12:54' prior: 35546284! printAsIfCompiledOn: aStream aStream nextPutAll: self formattedCode! ! !RBProgramNode methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 4/17/2013 16:56' prior: 35546445! scope ^self methodOrBlockNode scope! ! !RBBrowserEnvironment methodsFor: 'private' stamp: 'CamilloBruni 8/17/2013 22:27' prior: 39288910! allClassesDo: aBlock self systemDictionary allClassesDo: [ :each | aBlock value: each; value: each theMetaClass ]! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 8/17/2013 22:32' prior: 30329417! classesAndSelectorsDo: aBlock self classesDo: [ :class | self selectorsForClass: class do: [ :sel | aBlock value: class value: sel ]]! ! !RBBrowserEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 8/17/2013 22:15'! includesMethod: aMethod ^ self includesSelector: aMethod selector in: aMethod methodClass! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 8/17/2013 22:29'! methods | methods | methods := IdentitySet new: 4096. self methodsDo: [ :each | methods add: each ]. ^ methods! ! !RBBrowserEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 8/17/2013 22:29'! methodsDo: aBlock self classesDo: [ :aClass| self selectorsForClass: aClass do: [ :selector | aBlock value: (aClass >> selector) ]]! ! !PseudoClass methodsFor: 'filein/fileout' stamp: 'mir 9/25/2008 15:04' prior: 30100612! fileOutDefinitionOn: aStream self hasDefinition ifFalse:[^self]. aStream nextChunkPut: self definition; cr. self hasComment ifTrue: [ aStream cr. self organization commentRemoteStr fileOutOn: aStream]! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'stephane.ducasse 12/22/2008 13:50' prior: 25697711! defaultAction reachedDefaultHandler := true. super defaultAction.! ! !MessageNotUnderstood methodsFor: 'private' stamp: 'tfei 6/4/1999 18:30' prior: 25697871! isResumable "Determine whether an exception is resumable." ^true! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'tfei 6/4/1999 18:27' prior: 25698030! message "Answer the selector and arguments of the message that failed." ^message! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'pnm 8/16/2000 15:03' prior: 25697446! message: aMessage message := aMessage! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'bf 6/17/2009 13:44' prior: 25696965! messageText "Return an exception's message text." ^messageText == nil ifTrue: [message == nil ifTrue: [super messageText] ifFalse: [ message lookupClass == UndefinedObject ifTrue: ['receiver of "{1}" is nil' translated format: {message selector asString}] ifFalse: [message lookupClass printString, '>>', message selector asString]]] ifFalse: [messageText]! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'ajh 10/9/2001 16:39' prior: 25698205! receiver "Answer the receiver that did not understand the message" ^ receiver! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'ajh 10/9/2001 16:38' prior: 25697573! receiver: obj receiver := obj! ! !DeepCopier methodsFor: 'like fullCopy' stamp: 'StephaneDucasse 10/15/2011 20:59' prior: 20611328! warnIverNotCopiedIn: aClass sel: sel "Warn the user to update veryDeepCopyWith: or veryDeepInner:" self inform: ('An instance variable was added to to class ', aClass name, ',\and it is not copied in the method ', sel, '.\Please rewrite it to handle all instance variables.\See DeepCopier class comment.') withCRs. (Smalltalk respondsTo: #tools) ifTrue: [Smalltalk tools browser fullOnClass: aClass selector: sel].! ! !ProcessBrowser class methodsFor: 'CPU utilization' stamp: 'nk 3/8/2001 12:49' prior: 29999239! tallyCPUUsageFor: seconds "Compute CPU usage using a 10-msec sample for the given number of seconds, then dump the usage statistics on the Transcript. The UI is free to continue, meanwhile" "ProcessBrowser tallyCPUUsageFor: 10" ^self tallyCPUUsageFor: seconds every: 10! ! !ProcessBrowser class methodsFor: 'CPU utilization' stamp: 'AlainPlantec 7/9/2013 12:40' prior: 44992317! tallyCPUUsageFor: seconds every: msec "Compute CPU usage using a msec millisecond sample for the given number of seconds, then dump the usage statistics on the Transcript. The UI is free to continue, meanwhile" "ProcessBrowser tallyCPUUsageFor: 10 every: 100" | promise | promise := Processor tallyCPUUsageFor: seconds every: msec. [ | tally | tally := promise value. UIManager default defer: [ self dumpTallyOnTranscript: tally ]. ] fork.! ! !String methodsFor: '*Network-MIME' stamp: 'mir 2/16/2006 23:21' prior: 51041803! asMIMEType ^MIMEType fromMIMEString: self! ! !String methodsFor: '*Network-MIME' stamp: 'StephaneDucasse 9/1/2009 15:50' prior: 51041927! base64Encoded "Encode the receiver as base64" "'Hello World' base64Encoded" ^(Base64MimeConverter mimeEncode: self readStream) contents! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 8/17/2013 22:36' prior: 49031788! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBRepeteadMethodsInTheSuperclassRule new run. self assert: result isEmpty description: [ String streamContents: [ :stream | stream print: result; space; cr; print: (result result methods asSortedCollection: CompiledMethod sortBlock) ]]! ! "AST-Core"! "Kernel"! "Network-MIME"! "OpalCompiler-Core"! "Refactoring-Environment"! "System-FilePackage"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(26 August 2013 10:42:31 am) Pharo.image priorSource: 15527926! ----STARTUP----an Array(26 August 2013 10:54:48 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 August 2013 10:54:48 am) Pharo-30341.image priorSource: 15546551! ----STARTUP----an Array(26 August 2013 11:42:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/26/2013 11:24' prior: 49082663! commentForCurrentUpdate ^ ' 11421 Update Athens from config https://pharo.fogbugz.com/f/cases/11421'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/26/2013 11:24'! script134 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.49.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1573.mcz KernelTests-StephaneDucasse.547.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.74.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.19.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.900.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.613.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1217.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/26/2013 11:24'! update30342 "self new update30342" self withUpdateLog: ' 11421 Update Athens from config https://pharo.fogbugz.com/f/cases/11421'. self loadTogether: self script134 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CairoFontExtents commentStamp: '' prior: 42147937! I represent the cairo_font_extents_t structure type The cairo_font_extents_t structure stores metric information for a font. Values are given in the current user-space coordinate system. Because font metrics are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double ascent; the distance that the font extends above the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements above it. double descent; the distance that the font extends below the baseline. This value is positive for typical fonts that include portions below the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements below it. double height; the recommended vertical distance between baselines when setting consecutive lines of text with the font. This is greater than ascent+descent by a quantity known as the line spacing or external leading. When space is at a premium, most fonts can be set with only a distance of ascent+descent between lines. double max_x_advance; the maximum distance in the X direction that the origin is advanced for any glyph in the font. double max_y_advance; the maximum distance in the Y direction that the origin is advanced for any glyph in the font. This will be zero for normal fonts used for horizontal writing. (The scripts of East Asia are sometimes written vertically.)! !CairoTextExtents commentStamp: '' prior: 42150447! I represent the cairo_text_extents_t structure type The cairo_text_extents_t structure stores the extents of a single glyph or a string of glyphs in user-space coordinates. Because text extents are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double x_bearing; the horizontal distance from the origin to the leftmost part of the glyphs as drawn. Positive if the glyphs lie entirely to the right of the origin. double y_bearing; the vertical distance from the origin to the topmost part of the glyphs as drawn. Positive only if the glyphs lie completely below the origin; will usually be negative. double width; width of the glyphs as drawn double height; height of the glyphs as drawn double x_advance; distance to advance in the X direction after drawing these glyphs double y_advance; distance to advance in the Y direction after drawing these glyphs. Will typically be zero except for vertical text layout as found in East-Asian languages.! !SQSurfaceDispatch commentStamp: 'IgorStasenko 12/30/2011 12:35' prior: 42645442! A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoMatrix commentStamp: '' prior: 42111937! I implement an AthensAffineTransform interface.! !CairoFontExtents commentStamp: '' prior: 49112342! I represent the cairo_font_extents_t structure type The cairo_font_extents_t structure stores metric information for a font. Values are given in the current user-space coordinate system. Because font metrics are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double ascent; the distance that the font extends above the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements above it. double descent; the distance that the font extends below the baseline. This value is positive for typical fonts that include portions below the baseline. Note that this is not always exactly equal to the maximum of the extents of all the glyphs in the font, but rather is picked to express the font designer's intent as to how the font should align with elements below it. double height; the recommended vertical distance between baselines when setting consecutive lines of text with the font. This is greater than ascent+descent by a quantity known as the line spacing or external leading. When space is at a premium, most fonts can be set with only a distance of ascent+descent between lines. double max_x_advance; the maximum distance in the X direction that the origin is advanced for any glyph in the font. double max_y_advance; the maximum distance in the Y direction that the origin is advanced for any glyph in the font. This will be zero for normal fonts used for horizontal writing. (The scripts of East Asia are sometimes written vertically.)! !CairoTextExtents commentStamp: '' prior: 49114368! I represent the cairo_text_extents_t structure type The cairo_text_extents_t structure stores the extents of a single glyph or a string of glyphs in user-space coordinates. Because text extents are in user-space coordinates, they are mostly, but not entirely, independent of the current transformation matrix. If you call cairo_scale(cr, 2.0, 2.0), text will be drawn twice as big, but the reported text extents will not be doubled. They will change slightly due to hinting (so you can't assume that metrics are independent of the transformation matrix), but otherwise will remain unchanged. double x_bearing; the horizontal distance from the origin to the leftmost part of the glyphs as drawn. Positive if the glyphs lie entirely to the right of the origin. double y_bearing; the vertical distance from the origin to the topmost part of the glyphs as drawn. Positive only if the glyphs lie completely below the origin; will usually be negative. double width; width of the glyphs as drawn double height; height of the glyphs as drawn double x_advance; distance to advance in the X direction after drawing these glyphs double y_advance; distance to advance in the Y direction after drawing these glyphs. Will typically be zero except for vertical text layout as found in East-Asian languages.! !SQSurfaceDispatch commentStamp: 'IgorStasenko 12/30/2011 12:35' prior: 49115756! A structure from SurfacePlugin.h typedef struct sqSurfaceDispatch { /* Version information. Must be provided by the client so the surface manager can check if certain operations are supported. */ int majorVersion; int minorVersion; /* Version 1.0 */ fn_getSurfaceFormat getSurfaceFormat; fn_lockSurface lockSurface; fn_unlockSurface unlockSurface; fn_showSurface showSurface; } sqSurfaceDispatch; ! !SQSurfaceDispatch methodsFor: 'initialize-release' stamp: 'IgorStasenko 12/30/2011 12:35' prior: 48912775! initialize self majorVersion: 1; minorVersion: 0! ! !CairoFontFace class methodsFor: 'instance creation' stamp: 'IgorStasenko 8/13/2013 13:01' prior: 40496807! fromFreetypeFace: aFace | handle cairoFace | handle := aFace handle nbUlongAt: 1. cairoFace := self primFtFace: handle loadFlags: (LoadNoHinting). ^ cairoFace initializeWithFreetypeFace: aFace! ! !CairoFontFace methodsFor: 'initialize-release' stamp: 'IgorStasenko 6/11/2012 06:00' prior: 48935837! initialize self registerAsExternalResource ! ! !AthensColorChange methodsFor: 'rendering' stamp: 'IgorStasenko 10/17/2011 12:51' prior: 40317902! renderOn: renderer renderer setCurrentColor: color! ! !AthensTextLine methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 10:15' prior: 48943386! initialize commands := tail := nil. width := height := maxAscent := maxDescent := 0.! ! !AthensCairoPatternPaint methodsFor: 'initialize-release' stamp: '' prior: 48988761! initialize handle value = 0 ifTrue: [ self error: 'Error creating new paint' ]. "register to be finalized" NBExternalResourceManager addResource: self data: handle.! ! !AthensSimplePathBuilder methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/18/2013 14:26' prior: 48991754! initialize "A new path always starts from implicit (moveTo:0@0) segment. If next segment is moveTo: , the point of already existing move segment will be changed, avoiding creating extra move segments. " absolute := false. contourStartPt := ZeroPoint. pathStart := lastSegment := (AthensMoveSegment new point: ZeroPoint).! ! !AthensCairoSurface class methodsFor: 'surface plugin callbacks' stamp: 'jb 8/9/2013 16:03' prior: 40442207! createGetSurfaceFormatFn " int getSurfaceFormat(int handle, int* width, int* height, int* depth, int* isMSB); Return general information about the OS drawing surface. Return true if successful, false otherwise. The returned values describe the basic properties such as width, height, depth and LSB vs. MSB pixels. " | fn | fn := NBNativeFunctionGen cdecl: #( int (int handle, int* width, int* height, int* depth, int* isMSB) ) emit: [:gen :proxy :asm | | callInfo fnPtr | " the handle is a handle to cairo image surface (cairo_surface_t *) " "*width = cairo_image_surface_get_width ( handle )" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_width') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment; mov: (gen arg: #width) to: asm EDX; mov: asm EAX to: asm EDX ptr. "*height = cairo_image_surface_get_height ( handle )" asm cdeclCall: [:call | call push: (gen arg: #handle). asm mov: (self fnPtr: 'cairo_image_surface_get_height') asUImm32 to: asm EAX; call: asm EAX ] alignment: gen stackAlignment; mov: (gen arg: #height) to: asm EDX; "work around the bitblt bug which tries to access past the buffer size designated by width*height*depth " dec: asm EAX; mov: asm EAX to: asm EDX ptr. "*depth = 32" asm mov: (gen arg: #depth) to: asm EAX; mov: 32 to: asm EAX ptr32. " *isMSB = false " asm mov: (gen arg: #isMSB) to: asm EAX; mov: 0 to: asm EAX ptr32; "return true" mov: 1 to: asm EAX ]. fn install. ^ fn address! ! !AthensCairoSurface class methodsFor: 'session management' stamp: 'jb 8/9/2013 16:11' prior: 40450324! initializeForNewSession | ptr | uniqueSession := NativeBoost uniqueSessionObject. "create a dispatch structure" dispatchStruct := dispatch := SQSurfaceDispatch new. dispatch getSurfaceFormatFn: self createGetSurfaceFormatFn; lockSurfaceFn: self createLockSurfaceFn; unlockSurfaceFn: self createUnlockSurfaceFn; showSurfaceFn: self createShowSurfaceFn. "now we should place this structure to external memory" ptr := NativeBoost allocate: (SQSurfaceDispatch instanceSize). NativeBoost memCopy: dispatch address to: ptr size: (SQSurfaceDispatch instanceSize). dispatch := ptr.! ! !AthensCairoSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/26/2013 15:19' prior: 48966703! initialize "the handle should be set already since we using an NB callout to create an instance" handle value = 0 ifTrue: [ self error: 'Error creating new surface' ]. session := Smalltalk session. id := self class registerSurface: self. context := self newCanvas. builder := AthensCairoPathBuilder new. builder context: context. ftFontRenderer := CairoFreetypeFontRenderer new canvas: context. NBExternalResourceManager addResource: self.! ! !AthensCairoSurface methodsFor: 'nb helper' stamp: 'IgorStasenko 12/16/2011 11:38' prior: 46761345! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'IgorStasenko 8/7/2013 14:01' prior: 43712352! arcTo: newEndPoint angle: angle cw: aBool " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " | start end center v radius startAngle endAngle cwAngle | angle isZero ifTrue: [ ^ self lineTo: newEndPoint ]. start := endPoint. endPoint := end := self toAbsolute: newEndPoint. start = end ifTrue: [ ^ self ]. "we have to transform the input. because Cario expects the center , radius, starting and ending angle, and we have the starting point, the ending point , and the angle. " aBool ifTrue: [cwAngle := angle] ifFalse: [cwAngle := angle negated]. center := self calcCenter: start end: end angle: cwAngle. v := (start - center). radius := v r. startAngle := self angleOfVector: v. endAngle := self angleOfVector: (end-center). aBool ifTrue: [ self arcCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ifFalse: [ self arcNegativeCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ! ! !AthensTextScanner methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 11/10/2011 11:54' prior: 48928321! initialize lines := OrderedCollection new. currentAttributes := #().! ! !AthensSceneView methodsFor: 'drawing' stamp: 'IgorStasenko 8/12/2013 15:18' prior: 40395981! drawOn: canvas | px py | canvas fillRectangle: bounds color: self backgroundColor. self renderScene. canvas translucentImage: surface asForm at: bounds origin. self showDebugInfo ifTrue: [ px := transform x printShowingDecimalPlaces: 3. py := transform y printShowingDecimalPlaces: 3. canvas drawString: 'zoom: ' , (transform sx printShowingDecimalPlaces: 3) , ' pan: ' , px , ' @ ' , py at: bounds origin font: nil color: Color white ]! ! !AthensSceneView methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/8/2013 18:37' prior: 48873423! initialize super initialize. keepRefreshing := false. transform := AthensAffineTransform new. self hResizing: #spaceFill. self vResizing: #spaceFill. color := Color transparent. state := Dictionary new. self extent: self minimumExtent. ! ! !AthensSceneView methodsFor: 'drawing' stamp: 'IgorStasenko 8/12/2013 15:18'! renderScene self checkSession. scene ifNotNil: [ surface drawDuring: [ :acanvas | surface clear. acanvas pathTransform loadAffineTransform: transform. scene isBlock ifTrue: [ scene cull: acanvas cull: self ] ifFalse: [ scene renderOn: acanvas ] ] ]! ! !AthensStrokePaint methodsFor: 'initialize-release' stamp: 'FernandoOlivero 1/13/2012 00:35' prior: 48956102! initialize super initialize. width := 1. capStyle := #butt. joinStyle := #bevel. innerJoinStyle := #bevel. miterLimit := 4.0. ! ! !AthensCairoPath methodsFor: 'initialize-release' stamp: 'FernandoOlivero 3/28/2012 19:10' prior: 48883122! initialize handle value = 0 ifTrue: [ self error: 'Error creating new path' ]. NBExternalResourceManager addResource: self data: handle! ! !AthensTextRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/20/2011 13:07' prior: 48880259! initialize color := Color black.! ! !AthensAffineTransform methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/26/2011 02:09' prior: 48988647! initialize self loadIdentity! ! !AthensBalloonSurface methodsFor: 'paths' stamp: 'IgorStasenko 4/1/2011 15:08'! createRectanglePath: aRectangle "In balloon implementation, rectangles don't require conversion and can be used directly" ^ aRectangle! ! !AthensBalloonSurface methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/21/2012 19:12' prior: 48984904! initialize pathTransform := AthensAffineTransform new. paintTransform := AthensAffineTransform new. imageTransform := AthensAffineTransform new " AthensGenericTransform new". fillTransform := AthensAffineTransform new. strokeTransform := AthensAffineTransform new. maskEnabled := false.! ! !AthensTigerShape methodsFor: 'as yet unclassified' stamp: '' prior: 48886218! initialize fill := stroke := false.! ! !AthensBezierConverter methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/29/2011 18:11' prior: 48919754! initialize distanceTolerance := 0.5. angleTolerance := 0.1 . ! ! !AthensCurveFlattener methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/18/2013 17:58' prior: 48899200! initialize super initialize. transform := AthensAffineTransform new. "identity" self toleranceMultiplier: self defaultTolerance! ! !AthensTextRenderTest class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/8/2013 18:35' prior: 40323530! test1 | t c | t := ' AthensTextRenderTest test1 leftFlush p := MultiNewParagraph new. p compose: t style: TextStyle default from: 1 in: (0@0 corner: 100@100). p MultiNewParagraph TextStyle default alignment globalBounds: toLocal: ' asText . t addAttribute: (TextColor new color: Color red) from: 3 to: 10. t addAttribute: (TextEmphasis italic) from: 5 to: 13. c := AthensTextComposer scan: t for: AthensTextScanner new. AthensSceneView new scene: [:canvas | canvas pathTransform scaleBy: 0.8. c renderOn: canvas ]; openInWindow ! ! !CairoFontOptions methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/2/2012 01:16' prior: 48981841! initialize self registerAsExternalResource. self setDefaults! ! !AthensBackgroundChange methodsFor: 'adding' stamp: 'IgorStasenko 10/28/2011 14:44' prior: 40315115! addWidth: aWidth width := width + aWidth! ! !AthensBackgroundChange methodsFor: 'initialize-release' stamp: 'IgorStasenko 10/28/2011 14:45' prior: 48867222! initialize width :=0. color := Color transparent.! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoMatrix commentStamp: '' prior: 49116398! I implement an AthensAffineTransform interface.! !AthensCairoMatrix methodsFor: 'private' stamp: 'jb 8/9/2013 16:16' prior: 40512934! copyFromMatrix: m NativeBoost memCopy: m address to: self address size: self class instanceSize.! ! !AthensCairoMatrix methodsFor: 'initialize-release' stamp: '' prior: 48956608! initialize self loadIdentity.! ! !AthensCairoMatrix methodsFor: 'private' stamp: 'IgorStasenko 8/14/2013 13:39' prior: 40513405! initx: x y: y sx: sx sy: sy shx: shx shy: shy ^self nbCall: #( void cairo_matrix_init (AthensCairoMatrix * self, double sx, double shy, double shx, double sy, double x, double y)) ! ! !AthensCairoMatrix methodsFor: 'transformations' stamp: 'IgorStasenko 8/14/2013 13:38' prior: 40514375! loadAffineTransform: m self initx: m x y: m y sx: m sx sy: m sy shx: m shx shy: m shy! ! !AthensCairoMatrix methodsFor: 'library path' stamp: '' prior: 49116192! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensBalloonStrokePaint methodsFor: 'converting' stamp: 'IgorStasenko 4/27/2012 11:29'! asStrokePaintOn: aCanvas "already stroke paint" ^ self! ! !CairoLibraryLoader class methodsFor: 'linux' stamp: 'IgorStasenko 7/29/2013 10:41' prior: 40539905! pathToCairoOnLinux "On different flavors of linux the path to library may differ depending on OS distro or whether system is 32 or 64 bit. " #( '/usr/lib/i386-linux-gnu/libcairo.so.2' '/usr/lib32/libcairo.so.2' '/usr/lib/libcairo.so.2' ) do: [ :path | path asFileReference exists ifTrue: [ ^ path ] ]. ^ self cantFindCairoOnLinux ! ! !AthensCairoPDFSurface methodsFor: 'private' stamp: 'IgorStasenko 5/4/2012 18:22'! newCanvas ^ self primCreateCanvas surface: self! ! !VGTigerDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 6/10/2012 09:42' prior: 48926612! initialize surface := AthensCairoSurface extent: 400@400. ! ! !GradientPaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/12/2013 09:51' prior: 48988179! initialize super initialize. colorRamp := OrderedCollection new.! ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 7/2/2012 19:31' prior: 48914373! initialize super initialize. self extent: self defaultExtent. surface := AthensCairoSurface extent: self extent. circle := surface createPath: [:builder | builder absolute; moveTo: -1 @ 0 ; ccwArcTo: 0@ 1 angle: 90 degreesToRadians ; ccwArcTo: 1@0 angle: 90 degreesToRadians ; ccwArcTo: 0@ -1 angle: 90 degreesToRadians ; ccwArcTo: -1@0 angle: 90 degreesToRadians ]. spike := surface createPath: [:builder | builder absolute; moveTo: -0.1 @ 0; lineTo: -0.05 @ 1; lineTo: 0.05 @ 1; lineTo: 0.1 @ 0 ]. frame := 1. self startStepping. ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/2/2012 00:24' prior: 48907739! initialize utfConverter := CairoUTF8Converter new. advance := 0@0. cache := CairoBackendCache soleInstance.! ! !AthensCairoStrokePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 3/8/2012 17:24' prior: 48868644! initialize super initialize. width := 1. capStyle := joinStyle := nil. ! ! !AthensCairoText methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 3/30/2012 14:49' prior: 48865954! initialize super initialize. self beNormal; beSlantNormal. fontSize := 10.! ! !AthensCairoText methodsFor: 'as yet unclassified' stamp: '' prior: 46761160! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensBalloonEngine methodsFor: 'accessing' stamp: 'IgorStasenko 9/19/2011 16:15'! clipRect: aRect clipRect := aRect truncated. ! ! !AthensFontDescription methodsFor: 'initialize-release' stamp: 'FernandoOlivero 1/14/2012 20:08' prior: 48904919! initialize super initialize. family := 'monospace'. options := Dictionary new. options at:#weight put: #normal; at:#slant put: #normal. size := 14. ! ! !AthensDemoMorph methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/29/2012 10:22' prior: 48965901! initialize | ref | super initialize. self extent: self defaultExtent. self color: self backColor. surface := AthensCairoSurface extent: self extent. current := 1. frame := 0. ref := 'Pharo.png' asFileReference. pharoLogo := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. ref := 'esug-balloon.png' asFileReference. esugBallon := AthensCairoSurface createFromFile: ref fullName ifFailed: [ nil ]. self startStepping. ! ! !CairoScaledFont methodsFor: 'initialize-release' stamp: 'IgorStasenko 8/28/2012 12:34' prior: 48869760! initialize self status ~= CAIRO_STATUS_SUCCESS ifTrue: [ self error: 'Something is wrong!!' ]. self registerAsExternalResource ! ! !CairoBackendCache class methodsFor: 'flushing' stamp: 'IgorStasenko 8/12/2013 16:20'! flush self soleInstance flush! ! !CairoBackendCache methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 7/3/2013 13:26' prior: 48887366! initialize self flush! ! CairoFontFace class removeSelector: #ftFace:loadFlags:! "Athens-Balloon"! "Athens-Cairo"! "Athens-Core"! "Athens-Examples"! "Athens-Morphic"! "Athens-Text"! ----End fileIn----! ----QUIT----an Array(26 August 2013 11:42:26 am) Pharo.image priorSource: 15546756! ----STARTUP----an Array(26 August 2013 11:56:14 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 August 2013 11:56:14 am) Pharo-30342.image priorSource: 15582047! ----STARTUP----an Array(26 August 2013 1:43:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/26/2013 13:38' prior: 49101494! commentForCurrentUpdate ^ '11447 Improve Chronology https://pharo.fogbugz.com/f/cases/11447 11456 RBLiteralValueNode does not Understand shortPrintOn: https://pharo.fogbugz.com/f/cases/11456'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/26/2013 13:39'! script135 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.49.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.154.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.15.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.620.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1574.mcz KernelTests-MarcusDenker.552.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.76.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.904.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-StephaneDucasse.27.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.613.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1219.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/26/2013 13:39'! update30343 "self new update30343" self withUpdateLog: '11447 Improve Chronology https://pharo.fogbugz.com/f/cases/11447 11456 RBLiteralValueNode does not Understand shortPrintOn: https://pharo.fogbugz.com/f/cases/11456'. self loadTogether: self script135 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WeekTest methodsFor: 'coverage' stamp: 'brp 7/27/2003 12:42' prior: 54851305! classToBeTested ^ Week! ! !WeekTest methodsFor: 'coverage' stamp: 'brp 1/30/2005 09:21' prior: 54851397! selectorsToBeIgnored | deprecated private special | deprecated := #(). private := #( #printOn: ). special := #( #next #do: ). ^ super selectorsToBeIgnored, deprecated, private, special.! ! !WeekTest methodsFor: 'running' stamp: 'brp 9/26/2004 18:52' prior: 54851658! setUp "June 1998, 5th week" super setUp. restoredStartDay := Week startDay. Week startDay: #Sunday. week := Week starting: '4 July 1998' asDate! ! !WeekTest methodsFor: 'running' stamp: 'brp 9/26/2004 18:53' prior: 54851874! tearDown super tearDown. Week startDay: restoredStartDay. week := nil. ! ! !WeekTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 22:42'! testByWeekNumber "Check some week dates, assuming that the week starts on Sunday" week := Week year: 2013 week: 1. self assert: week start equals: (DateAndTime year: 2012 month: 12 day: 30). week := Week year: 2013 week: 32. self assert: week start equals: (DateAndTime year: 2013 month: 8 day: 4). week := Week year: 2013 week: 52. self assert: week start equals: (DateAndTime year: 2013 month: 12 day: 22). week := Week year: 2014 week: 1. self assert: week start equals: (DateAndTime year: 2013 month: 12 day: 29).! ! !WeekTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 22:43'! testByWeekNumberInCurrentYear week := Week week: 2. self assert: week year asYear equals: Year current.! ! !WeekTest methodsFor: 'tests' stamp: 'it 7/14/2009 19:47' prior: 54852015! testDayNames self assert: (Week dayNames) = #(#Sunday #Monday #Tuesday #Wednesday #Thursday #Friday #Saturday).! ! !WeekTest methodsFor: 'tests' stamp: 'brp 1/30/2005 09:32' prior: 54852192! testEnumerating | days | days := OrderedCollection new. 0 to: 6 do: [ :i | days add: ('28 June 1998' asDate addDays: i) ]. week datesDo: [ :d | days remove: d ]. self assert: days isEmpty. ! ! !WeekTest methodsFor: 'tests' stamp: 'it 7/14/2009 19:52' prior: 54852454! testIndexOfDay | days | days := #(#Sunday #Monday #Tuesday #Wednesday #Thursday #Friday #Saturday). days withIndexDo: [:item :index | self assert: (Week indexOfDay: item) = index]. "This should probably raise an error rather than returning 0." self assert: (Week indexOfDay: 0) = 0. self assert: (Week indexOfDay: 1) = 0. self assert: (Week indexOfDay: 7) = 0. self assert: (Week indexOfDay: 8) = 0. self assert: (Week indexOfDay: #Sunnyday) = 0.! ! !WeekTest methodsFor: 'tests' stamp: 'brp 1/30/2005 09:30' prior: 54852978! testInquiries self assert: week start asDate = '28 June 1998' asDate; assert: week end asDate = '4 July 1998' asDate; assert: week index = 5; assert: week duration = (7 days). ! ! !WeekTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/9/2012 22:53' prior: 54853240! testNameOfDay | days | days := #(#Sunday #Monday #Tuesday #Wednesday #Thursday #Friday #Saturday). days withIndexDo: [:item :index | self assert: (Week nameOfDay: index) = item]. self should: [Week nameOfDay: 0] raise: self defaultTestError. self should: [Week nameOfDay: 8] raise: self defaultTestError. self should: [Week nameOfDay: #Sunday] raise: self defaultTestError.! ! !WeekTest methodsFor: 'tests' stamp: 'nk 7/30/2004 17:52' prior: 54853687! testPreviousNext self assert: week next = (Week starting: '6 July 1998' asDate); assert: week previous = (Week starting: '22 June 1998' asDate)! ! !DurationTest methodsFor: 'running' stamp: 'brp 1/21/2004 18:36' prior: 21045638! setUp aDuration := Duration days: 1 hours: 2 minutes: 3 seconds: 4 nanoSeconds: 5 ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21045793! testAbs self assert: aDuration abs = aDuration. self assert: (Duration nanoSeconds: -5) abs = (Duration nanoSeconds: 5). ! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 15:55' prior: 21045992! testAsDay |full half quarter| full := (Duration minutes: 60*24). half := (Duration minutes: 60*12). quarter := (Duration minutes: 60*6). self assert: 1 day = full; assert: 1.0 day = full; assert: 0.5 day = half; assert: (1/2) day = half; assert: (1/4) day = quarter. self assert: 0.4 day + 0.6 day = 1 day ! ! !DurationTest methodsFor: 'tests' stamp: 'CamilloBruni 12/13/2011 17:36' prior: 21046401! testAsDays self assert: (Duration days: 2) asDays = 2. self assert: (Duration weeks: 1) asDays = 7. self assert: (aDuration asDays closeTo: 1.08546).! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21046625! testAsDelay self deny: aDuration asDelay = aDuration. "want to come up with a more meaningful test" ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21046800! testAsDuration self assert: aDuration asDuration = aDuration ! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/24/2012 15:31' prior: 21046937! testAsHour |full half quarter| full := (Duration minutes: 60). half := (Duration minutes: 30). quarter := (Duration minutes: 15). self assert: 1 hour = full; assert: 1.0 hour = full; assert: 0.5 hour = half; assert: (1/2) hour = half; assert: (1/4) hour = quarter! ! !DurationTest methodsFor: 'tests' stamp: 'CamilloBruni 12/13/2011 17:35' prior: 21047299! testAsHours self assert: (Duration hours: 2) asHours = 2. self assert: (Duration days: 1) asHours = 24. self assert: (aDuration asHours closeTo: 26.0511).! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 16:11' prior: 21047529! testAsMilliSecond self assert: 1 milliSecond = (1/1000) second; assert: (1/2) milliSecond = (1/2000) second; assert: 0.5 milliSecond = (1/2000) second; assert: 500 milliSecond = (1/2) second! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/28/2010 22:16' prior: 21047818! testAsMilliSeconds "self debug:#testAsMilliSeconds" self assert: (Duration nanoSeconds: 1000000) asMilliSeconds = 1. self assert: (Duration seconds: 1) asMilliSeconds = 1000. self assert: (Duration nanoSeconds: 1000000) asMilliSeconds = 1. self assert: (Duration nanoSeconds: 1000000) asMilliSeconds = 1. self assert: aDuration asMilliSeconds = 93784000. self assert: (Duration milliSeconds: 3775) asSeconds = 3. self assert: (Duration milliSeconds: 3775) nanoSeconds = 775000000. self assert: (Duration milliSeconds: -3775) asSeconds = -3. self assert: (Duration milliSeconds: -3775) nanoSeconds = -775000000! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 16:07' prior: 21048518! testAsMinute |full half quarter| full := (Duration seconds: 60). half := (Duration seconds: 30). quarter := (Duration seconds: 15). self assert: 1 minute = full; assert: 1.0 minute = full; assert: 0.5 minute = half; assert: (1/2) minute = half; assert: (1/4) minute = quarter. self assert: 0.4 minute + 0.6 minute = 1 minute ! ! !DurationTest methodsFor: 'tests' stamp: 'CamilloBruni 12/13/2011 17:36' prior: 21048944! testAsMinutes self assert: (Duration seconds: 60) asMinutes = 1. self assert: (Duration hours: 1) asMinutes = 60. self assert: (aDuration asMinutes closeTo: 1563.0666).! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21049188! testAsNanoSeconds self assert: (Duration nanoSeconds: 1) asNanoSeconds = 1. self assert: (Duration seconds: 1) asNanoSeconds = 1000000000. self assert: aDuration asNanoSeconds = 93784000000005.! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 15:12' prior: 21049461! testAsSecond |full half quarter| full := (Duration seconds: 1). half := (Duration seconds: 0.5). quarter := (Duration seconds: 0.25). self assert: 1 second = full; assert: 1.0 second = full; assert: 0.5 second = half; assert: (1/2) second = half; assert: (1/4) second = quarter. self assert: 0.4 second + 0.6 second = 1 second ! ! !DurationTest methodsFor: 'tests' stamp: 'CamilloBruni 6/22/2012 21:47' prior: 21049888! testAsSeconds self assert: (Duration nanoSeconds: 1000000000) asSeconds = 1. self assert: (Duration seconds: 1) asSeconds = 1. self assert: aDuration asSeconds = 93784. self assert: 1 asSeconds equals: (Duration seconds: 1). self assert: (1/2) asSeconds equals: (Duration milliSeconds: 500).! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 15:15' prior: 21050259! testAsWeek |full half quarter| full := (Duration days: 7). half := (Duration weeks: 0.5). quarter := (Duration weeks: 0.25). self assert: 1 week = full; assert: 1.0 week = full; assert: 0.5 week = half; assert: (1/2) week = half; assert: (1/4) week = quarter. self assert: 0.4 week + 0.6 week = 1 week ! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 15:16' prior: 21050659! testAsWeeks |full half quarter| full := (Duration days: 7). half := (Duration weeks: 0.5). quarter := (Duration weeks: 0.25). self assert: 1 weeks = full; assert: 1.0 weeks = full; assert: 0.5 weeks = half; assert: (1/2) weeks = half; assert: (1/4) weeks = quarter. self assert: 1.4 weeks + 1.6 weeks = 3 weeks ! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 16:19' prior: 21051068! testAsYear self assert: 1 year days = 365; assert: 0.5 year asHours = ((364 / 2) * 24 + 12)! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 16:19' prior: 21051238! testAsYears self assert: 2 years days = 730; assert: 0.5 year asHours = ((364 / 2) * 24 + 12)! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21051409! testDays self assert: aDuration days = 1. self assert: (Duration days: 1) days= 1. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21051569! testDivide self assert: aDuration / aDuration = 1. self assert: aDuration / 2 = (Duration days: 0 hours: 13 minutes: 1 seconds: 32 nanoSeconds: 2). self assert: aDuration / (1/2) = (Duration days: 2 hours: 4 minutes: 6 seconds: 8 nanoSeconds: 10). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21051893! testFromString self assert: aDuration = (Duration fromString: '1:02:03:04.000000005'). ! ! !DurationTest methodsFor: 'tests' stamp: 'al 6/12/2008 21:57' prior: 21052051! testHash self assert: aDuration hash = (Duration days: 1 hours: 2 minutes: 3 seconds: 4 nanoSeconds: 5) hash! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21052231! testHours self assert: aDuration hours = 2. self assert: (Duration hours: 2) hours = 2. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21052396! testIntegerDivision self assert: aDuration // aDuration = 1. self assert: aDuration // 2 = (aDuration / 2). "is there ever a case where this is not true, since precision is always to the nano second?"! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21052673! testLessThan self assert: aDuration < (aDuration + 1 day ). self deny: aDuration < aDuration. ! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 5/5/2010 22:06' prior: 21052853! testMilliSeconds #( "argument (milliseconds) seconds nanoseconds" (5 0 5000000) (1005 1 5000000) (-5 0 -5000000) (-1005 -1 -5000000) (1234567 1234 567000000) (-1234567 -1234 -567000000)) do: [ :each | | duration | duration := Duration milliSeconds: each first. self assert: duration asSeconds = each second. self assert: duration nanoSeconds = each third ]! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21053682! testMinus self assert: aDuration - aDuration = (Duration seconds: 0). self assert: aDuration - (Duration days: -1 hours: -2 minutes: -3 seconds: -4 nanoSeconds: -5) = (Duration days: 2 hours: 4 minutes: 6 seconds: 8 nanoSeconds: 10). self assert: aDuration - (Duration days: 0 hours: 1 minutes: 2 seconds: 3 nanoSeconds: 4) = (Duration days: 1 hours: 1 minutes: 1 seconds: 1 nanoSeconds: 1). self assert: aDuration - (Duration days: 0 hours: 3 minutes: 0 seconds: 5 nanoSeconds: 0) = (Duration days: 0 hours: 23 minutes: 2 seconds: 59 nanoSeconds: 5). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21054365! testMinutes self assert: aDuration minutes = 3. self assert: (Duration minutes: 3) minutes = 3. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21054536! testMultiply self assert: aDuration * 2 = (Duration days: 2 hours: 4 minutes: 6 seconds: 8 nanoSeconds: 10). ! ! !DurationTest methodsFor: 'tests' stamp: 'tbn 10/29/2012 16:34' prior: 21054718! testNanoSecond self assert: (Duration nanoSeconds: 5) = 5 nanoSecond; assert: 0.5 nanoSecond = (Duration nanoSeconds: 0.5); assert: (1/2) nanoSecond = (Duration nanoSeconds: 0.5). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21054986! testNanoSeconds self assert: aDuration nanoSeconds = 5. self assert: (Duration nanoSeconds: 5) nanoSeconds = 5. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21055171! testNegated self assert: aDuration + aDuration negated = (Duration seconds: 0). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21055324! testNegative self deny: aDuration negative. self assert: aDuration negated negative ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21055481! testNew "self assert: Duration new = (Duration seconds: 0)." "new is not valid as a creation method: MessageNotUnderstood: UndefinedObject>>quo:, where Duration seconds is nil"! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21055734! testPlus self assert: (aDuration + 0 hours) = aDuration. self assert: (aDuration + aDuration) = (Duration days: 2 hours: 4 minutes: 6 seconds: 8 nanoSeconds: 10). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21055970! testPositive self assert: (Duration nanoSeconds: 0) positive. self assert: aDuration positive. self deny: aDuration negated positive ! ! !DurationTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 21056186! testPrintOn | cs rw | cs := '1:02:03:04.000000005' readStream. rw := ReadWriteStream on: ''. aDuration printOn: rw. self assert: rw contents = cs contents! ! !DurationTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 21056425! testReadFrom self assert: aDuration = (Duration readFrom: '1:02:03:04.000000005' readStream)! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/24/2010 10:52' prior: 21056601! testReadFromBogus self should: [Duration readFrom: '+0:01:02' readStream] raise: Error. "Seconds should be supplied as per ANSI 5.8.2.16: [-]D:HH:MM:SS[.S]"! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/23/2010 21:55' prior: 21056843! testReadFromMillisecond self assert: (Duration readFrom: '0:00:00:00.001 ' readStream) nanoSeconds = 1000000! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/24/2010 10:53' prior: 21057036! testReadFromNoException "self debug: #testReadFromNoException" #( '0:00:00:00' '0:00:00:00.000000001' '0:00:00:00.999999999' '0:00:00:00.100000000' '0:00:00:00.10' '0:00:00:00.1' '0:00:00:01' '0:12:45:45' '1:00:00:00' '365:00:00:00' '-7:09:12:06.10' '+0:01:02:55' '+0:01:02:3') do: [:each | each asDuration printString = each]! ! !DurationTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/24/2010 19:50' prior: 21057484! testSeconds self assert: aDuration seconds = 4. self assert: (Duration nanoSeconds: 2) seconds = 0. self assert: (Duration seconds: 2) seconds = 2. self assert: (Duration days: 1 hours: 2 minutes: 3 seconds:4) seconds = (4). self deny: (Duration days: 1 hours: 2 minutes: 3 seconds:4) seconds = (1*24*60*60+(2*60*60)+(3*60)+4). ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21057894! testSecondsNanoSeconds self assert: (Duration seconds: 0 nanoSeconds: 5) = (Duration nanoSeconds: 5). "not sure I should include in sunit since its Private " self assert: (aDuration seconds: 0 nanoSeconds: 1) = (Duration nanoSeconds: 1). ! ! !DurationTest methodsFor: 'tests' stamp: 'PeterHugossonMiller 9/3/2009 16:02' prior: 21058228! testStoreOn | stream | aDuration storeOn: (stream := (String new: 20) writeStream). self assert: stream contents = '(Duration seconds: 93784 nanoSeconds: 5)'. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21058462! testTicks self assert: aDuration ticks = #(1 7384 5)! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21058587! testWeeks self assert: (Duration weeks: 1) days= 7. ! ! !DurationTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:38' prior: 21058712! testZero self assert: (Duration zero) = (Duration seconds: 0). ! ! !Timespan class methodsFor: 'instance creation' stamp: 'brp 5/21/2003 08:35' prior: 53221011! current ^ self starting: DateAndTime now ! ! !Timespan class methodsFor: 'instance creation' stamp: 'brp 7/27/2003 18:49' prior: 53221136! new "Answer a Timespan starting on the Squeak epoch: 1 January 1901" ^ self starting: DateAndTime new ! ! !Timespan class methodsFor: 'instance creation' stamp: 'brp 5/13/2003 08:42' prior: 53221322! starting: aDateAndTime ^ self starting: aDateAndTime duration: Duration zero ! ! !Timespan class methodsFor: 'instance creation' stamp: 'brp 7/27/2003 18:48' prior: 53221483! starting: aDateAndTime duration: aDuration ^ self basicNew start: aDateAndTime asDateAndTime; duration: aDuration; yourself.! ! !Timespan class methodsFor: 'instance creation' stamp: 'brp 7/27/2003 16:16' prior: 53221699! starting: startDateAndTime ending: endDateAndTime ^ self starting: startDateAndTime duration: (endDateAndTime asDateAndTime - startDateAndTime). ! ! !Timespan methodsFor: 'testing' stamp: 'CamilloBruni 8/22/2013 18:24' prior: 53219477! includes: aDateAndTime ^ (aDateAndTime isKindOf: Timespan) ifTrue: [ (self includes: aDateAndTime start) and: [ self includes: aDateAndTime end ] ] ifFalse: [ aDateAndTime asDateAndTime between: start and: self end ] ! ! !Timespan methodsFor: 'conversion' stamp: 'CamilloBruni 8/22/2013 18:40' prior: 53216482! to: anEnd "Answer an Timespan. anEnd must be aDateAndTime or a Timespan" | end | end := (anEnd isKindOf: Timespan) ifTrue: [ anEnd end ] ifFalse: [ anEnd asDateAndTime ]. ^ Timespan starting: (self start) ending: end. ! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 18:00' prior: 53225477! testDatesDo | dateArray | dateArray := OrderedCollection new. 7 to: 97 do: [:each | dateArray addLast: (Date year: 2003 day: each)]. dateArray := dateArray asArray. self assert: aTimespan dates = dateArray! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 16:36' prior: 53225767! testDoWith | count | count := 0. aTimespan do: [:each | count := count + 1] with: (Timespan starting: aDate duration: 7 days). self assert: count = 13! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 16:39' prior: 53226005! testDoWithWhen | count | count := 0. aTimespan do: [:each | count := count + 1] with: (Timespan starting: aDate duration: 7 days) when: [:each | count < 5]. self assert: count = 5 ! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 15:39' prior: 53226268! testEveryDo |count duration | count := 0. duration := 7 days. (aTimespan every: duration do: [:each | count := count + 1]). self assert: count = 13 ! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 13:05' prior: 53226503! testMonthsDo | monthArray | monthArray := Array with: (Month starting: (DateAndTime year: 2003 day: 1) duration: 31 days) with: (Month starting: (DateAndTime year: 2003 day: 32) duration: 28 days) with: (Month starting: (DateAndTime year: 2003 day: 60) duration: 31 days) with: (Month starting: (DateAndTime year: 2003 day: 91) duration: 30 days). self assert: aTimespan months = monthArray! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 16:09' prior: 53227034! testNext self assert: aTimespan next = (Timespan starting: (DateAndTime year: 2003 month: 4 day: 8 hour: 0 minute: 0 second: 0) duration: aDuration)! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 13:07' prior: 53227311! testWeeksDo | weekArray | weekArray := OrderedCollection new. 7 to: 98 by: 7 do: [:each | weekArray addLast: (Week starting: (DateAndTime year: 2003 day: each) duration: 7 days)]. weekArray := weekArray asArray. self assert: aTimespan weeks = weekArray ! ! !TimespanDoTest methodsFor: 'tests' stamp: 'tlk 1/5/2004 13:09' prior: 53227663! testYearsDo | yearArray | yearArray := Array with: (Year starting: (DateAndTime year: 2003 day: 7) duration: 365 days). self assert: aTimespan years contents = yearArray contents! ! !Year class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:52' prior: 55015527! daysInYear: yearInteger ^ 365 + ((self isLeapYear: yearInteger) ifTrue: [1] ifFalse: [0]). ! ! !Year class methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:00' prior: 55015981! isLeapYear: aYearInteger | adjustedYear | adjustedYear := aYearInteger > 0 ifTrue: [aYearInteger] ifFalse: [(aYearInteger + 1) negated]. "There was no year 0" ^ ((adjustedYear \\ 4 ~= 0) or: [(adjustedYear \\ 100 = 0) and: [adjustedYear \\ 400 ~= 0]]) not.! ! !Year class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 18:54' prior: 55016324! starting: aDateAndTime duration: aDuration "Return a new year, starting from the beginning the year the given DateAndTime is in." | aYear | aYear := aDateAndTime asDateAndTime year. ^ super starting: (DateAndTime year: aYear month: 1 day: 1) duration: (Duration days: (self daysInYear: aYear)).! ! !Year class methodsFor: 'instance creation' stamp: 'brp 5/13/2003 09:00' prior: 55016636! year: aYear ^ self starting: (DateAndTime year: aYear month: 1 day: 1).! ! !Year methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 19:21'! firstThursday "Return the years first Thursday. According to the ISO 8601 definition, the first week starts with the years first Thursday (week day number 5)" ^ self start + (5 - self start dayOfWeek) days! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:35' prior: 20334988! dayOfWeek: dayName ^ Week indexOfDay: dayName! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:59' prior: 20335111! daysInMonth: monthName forYear: yearInteger ^ Month daysInMonth: monthName forYear: yearInteger. ! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:53' prior: 20335286! daysInYear: yearInteger ^ Year daysInYear: yearInteger.! ! !Date class methodsFor: 'specific inquiries' stamp: 'CamilloBruni 8/22/2013 19:48' prior: 20336186! easterDateFor: year " compute the easter date. source: Physikalisch-Technische Bundesanstalt Braunschweig. Lichtenberg, H.: Zur Interpretation der Gaussschen Osterformel und ihrer Ausnahmeregeln, Historia Mathematica 24 (1997), pp. 441-444 http://www.ptb.de/de/org/4/44/441/oste.htm " | k m s a d r og sz oe day | k := year // 100. m := 15 + (3*k + 3//4) - (8*k + 13//25). s := 2 - (3*k + 3// 4). a := year \\ 19. d := 19*a + m \\ 30. r := d//29 + ((d//28) - (d//29)* (a// 11)). og := 21 + d - r. sz := 7 - (year//4 + year + s\\7). oe := 7 - (og - sz\\7). day := og + oe. ^day <= 31 ifTrue: [ Date year: year month: 3 day: day ] ifFalse: [ Date year: year month: 4 day: day - 31 ].! ! !Date class methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 19:47' prior: 20335420! firstWeekdayOfMonth: month year: year "Answer the weekday index of the first day in in the ." ^ (self year: year month: month day: 1) weekdayIndex ! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:39' prior: 20335662! indexOfMonth: aMonthName ^ Month indexOfMonth: aMonthName. ! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:37' prior: 20335927! nameOfDay: dayIndex ^ Week nameOfDay: dayIndex ! ! !Date class methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:40' prior: 20336052! nameOfMonth: anIndex ^ Month nameOfMonth: anIndex. ! ! !Date class methodsFor: 'specific inquiries' stamp: 'CamilloBruni 8/22/2013 19:47' prior: 20337047! orthodoxEasterDateFor: year " compute the easter date according to the rules of the orthodox calendar. source: http://www.smart.net/~mmontes/ortheast.html " | r1 r2 r3 r4 ra rb r5 rc date | r1 := year \\ 19. r2 := year \\ 4. r3 := year \\ 7. ra := 19*r1 + 16. r4 := ra \\ 30. rb := r2 + r2 + (4*r3) + (6*r4). r5 := rb \\ 7. rc := r4 + r5. date := Date year: year month: 4 day: 3. ^date addDays: rc.! ! !Date class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:32'! week: week day: dayOfWeek ^ self starting: (Week week: week) start + (dayOfWeek - 1) days! ! !Date class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:32'! year: year week: week day: dayOfWeek ^ self starting: (Week year: year week: week) start + (dayOfWeek - 1) days! ! !Date methodsFor: 'utils' stamp: 'CamilloBruni 8/22/2013 19:48' prior: 20327797! addMonths: monthCount |year month maxDaysInMonth day | year := self year + (monthCount + self monthIndex - 1 // 12). month := self monthIndex + monthCount - 1 \\ 12 + 1. maxDaysInMonth := Month daysInMonth: month forYear: year. day := self dayOfMonth > maxDaysInMonth ifTrue: [maxDaysInMonth] ifFalse: [self dayOfMonth]. ^ Date year: year month: month day: day! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 21:08' prior: 20407782! testAsDate self assert: aDateAndTime asDate equals: ('February 29, 2004' asDate translateTo: 2 hours).! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:25' prior: 20407973! testAsDuration self assert: aDateAndTime asDuration equals: aDuration ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20408133! testAsLocal self assert: aDateAndTime asLocal = aDateAndTime. self assert: aDateAndTime asLocal = (aDateAndTime offset: aDateAndTime class localOffset) ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:44' prior: 20408368! testAsMonth self assert: aDateAndTime asMonth equals: (Month year: 2004 month: 'February'). ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 21:59' prior: 20408532! testAsNanoSeconds self assert: aDateAndTime asNanoSeconds = aDuration asNanoSeconds. self assert: aDateAndTime asNanoSeconds = 48780000000000 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/17/2012 17:09' prior: 20408766! testAsSeconds self assert: aDuration asSeconds = 48780. self assert: aDateAndTime asSeconds = 3255507180. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:26' prior: 20408964! testAsTime self assert: aDateAndTime asTime equals: (Time hour: 13 minute: 33 second: 0) ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/16/2012 19:22' prior: 20409141! testAsTimeStamp self assert: aDateAndTime asTimeStamp "note that the timestamp string is written in UTC" equals: ((TimeStamp readFrom: '2-29-2004 1:33 pm' readStream) translateTo: 2 hours) ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:59' prior: 20409416! testAsUTC self assert: aDateAndTime asUTC = aDateAndTime ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 21:09' prior: 20409573! testAsWeek self assert: aDateAndTime asWeek equals: ((Week starting: '02-29-2004' asDate) translateTo: 2 hours). ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 20:05' prior: 20409774! testAsYear "A year always starts at January 1" self assert: aDateAndTime asYear equals: ((Year starting: '02-29-2004' asDate) translateTo: 2 hours ). self assert: aDateAndTime asYear equals: ((Year starting: '01-01-2004' asDate) translateTo: 2 hours) ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:23' prior: 20410064! testDay self assert: aDateAndTime day = 60. self deny: aDateAndTime day = 29 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 22:16' prior: 20410225! testDayMonthYearDo self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachYear]) = 2004. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachMonth]) = 2. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachDay]) = 29. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 22:17' prior: 20410608! testDayOfMonth self assert: aDateAndTime dayOfMonth = 29. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:34' prior: 20410745! testDayOfWeek self assert: aDateAndTime dayOfWeek = 1. self assert: aDateAndTime dayOfWeekAbbreviation = 'Sun'. self assert: aDateAndTime dayOfWeekName = 'Sunday'. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:59' prior: 20410990! testDayOfYear self assert: aDateAndTime dayOfYear = 60. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:58' prior: 20411126! testDaysInMonth self assert: aDateAndTime daysInMonth = 29. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:58' prior: 20411266! testDaysInYear self assert: aDateAndTime daysInYear = 366. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:58' prior: 20411405! testDaysLeftInYear self assert: aDateAndTime daysLeftInYear = 306. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:38' prior: 20411552! testFirstDayOfMonth self deny: aDateAndTime firstDayOfMonth = 1. self assert: aDateAndTime firstDayOfMonth = 32 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 10:43' prior: 20411744! testFromString self assert: aDateAndTime = (DateAndTime fromString: ' 2004-02-29T13:33:00+02:00'). ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:53' prior: 20411933! testHour self assert: aDateAndTime hour equals: aDateAndTime hour24. self assert: aDateAndTime hour equals: 13. self assert: aDateAndTime hour equals: aDateAndTime hours ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'brp 3/12/2004 15:19' prior: 20412184! testHour12 self assert: aDateAndTime hour12 = 1. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:35' prior: 20412314! testIsLeapYear self assert: aDateAndTime isLeapYear ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 21:30' prior: 20412444! testLessThan self assert: aDateAndTime < (aDateAndTime + '1:00:00:00'). self assert: aDateAndTime + -1 < aDateAndTime. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 10:42' prior: 20412644! testMeridianAbbreviation self assert: aDateAndTime meridianAbbreviation = 'PM'. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:12' prior: 20412804! testMiddleOf self assert: (aDateAndTime middleOf: aDuration) = (Timespan starting: (DateAndTime year: 2004 month: 2 day: 29 hour: 6 minute: 46 second: 30 offset: 2 hours) duration: (Duration days: 0 hours: 13 minutes: 33 seconds: 0 nanoSeconds: 0 )) ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 20:56' prior: 20413148! testMidnight self assert: aDateAndTime midnight equals: '2004-02-29T00:00:00+02:00' asDateAndTime. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:00' prior: 20413325! testMinute self assert: aDateAndTime minute = 33 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'brp 1/16/2004 13:44' prior: 20413455! testMinutes self assert: aDateAndTime minutes = 33 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:02' prior: 20413584! testMonth self assert: aDateAndTime month = 2. self assert: aDateAndTime monthAbbreviation = 'Feb'. self assert: aDateAndTime monthName = 'February'. self assert: aDateAndTime monthIndex = 2.! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 21:30' prior: 20413857! testNanoSecond self assert: aDateAndTime nanoSecond = 0 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/16/2012 19:22' prior: 20414003! testNoon self assert: aDateAndTime noon equals: '2004-02-29T12:00:00+02:00' asDateAndTime! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:24' prior: 20414181! testOffset self assert: aDateAndTime offset = '0:02:00:00' asDuration. self assert: (aDateAndTime offset: '-0:12:00:00') equals: '2004-02-28T23:33:00-12:00' asDateAndTime. self assert: (aDateAndTime offset: '0:12:00:00') equals: '2004-02-29T23:33:00+12:00' asDateAndTime! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 20414544! testPrintOn | cs rw | cs := '2004-02-29T13:33:00+02:00' readStream. rw := ReadWriteStream on: ''. aDateAndTime printOn: rw. self assert: rw contents = cs contents. cs := 'a TimeZone(UTC)' readStream. rw := ReadWriteStream on: ''. aTimeZone printOn: rw. self assert: rw contents = cs contents! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 21:30' prior: 20414921! testSecond self assert: aDateAndTime second = 0 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 21:30' prior: 20415049! testSeconds self assert: aDateAndTime seconds = 0 ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/17/2012 17:05' prior: 20415189! testTicks self assert: aDateAndTime ticks equals: ((DateAndTime julianDayNumber: 2453065) + 41580 seconds) ticks. self assert: aDateAndTime ticks equals: #(2453065 41580 0)! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 13:52' prior: 20415454! testTicksOffset self assert: aDateAndTime = (aDateAndTime ticks: #(2453065 48780 0) offset: DateAndTime localOffset). ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 20:59' prior: 20415663! testTimeZone aDateAndTime := '2004-02-29T13:33:00+00:00' asDateAndTime. self assert: aDateAndTime timeZone name equals: 'Universal Time'. self assert: aDateAndTime timeZone abbreviation equals: 'UTC' ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20415955! testUtcOffset self assert: (aDateAndTime offset: '0:02:00:00') = '2004-02-29T13:33:00+02:00' asDateAndTime! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:17' prior: 20416144! testYear self assert: aDateAndTime year = 2004. ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:36' prior: 20416282! testYearDayHourMinuteSecond self assert: aDateAndTime equals: (DateAndTime year: 2004 day: 60 hour: 13 minute: 33 second: 0 offset: 2 hours). ! ! !DateAndTimeLeapTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:36' prior: 20416513! testYearMonthDayHourMinuteSecond self assert: aDateAndTime equals: (DateAndTime year: 2004 month: 2 day: 29 hour: 13 minute: 33 second: 0 offset: 2 hours). ! ! !MonthTest methodsFor: 'coverage' stamp: 'brp 7/27/2003 12:42' prior: 26571812! classToBeTested ^ Month! ! !MonthTest methodsFor: 'coverage' stamp: 'brp 7/26/2003 23:29' prior: 26571906! selectorsToBeIgnored | deprecated private special | deprecated := #(). private := #( #printOn: ). special := #( #next ). ^ super selectorsToBeIgnored, deprecated, private, special.! ! !MonthTest methodsFor: 'running' stamp: 'CamilloBruni 8/22/2013 19:42' prior: 26572161! setUp super setUp. month := Month year: 1998 month: 7.! ! !MonthTest methodsFor: 'running' stamp: 'brp 8/6/2003 19:37' prior: 26572285! tearDown super tearDown. month := nil.! ! !MonthTest methodsFor: 'tests' stamp: 'brp 7/26/2003 22:52' prior: 26572393! testConverting self assert: month asDate = '1 July 1998' asDate! ! !MonthTest methodsFor: 'tests' stamp: 'brp 1/30/2005 09:35' prior: 26572524! testEnumerating | weeks | weeks := OrderedCollection new. month weeksDo: [ :w | weeks add: w start ]. 0 to: 4 do: [ :i | weeks remove: (Week starting: ('29 June 1998' asDate addDays: i * 7)) start ]. self assert: weeks isEmpty! ! !MonthTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/9/2012 22:57' prior: 26572833! testIndexOfMonth "self debug: #testIndexOfMonth" | m | m := #(#January #February #March #April #May #June #July #August #September #October #November #December). m withIndexDo: [:item :index | self assert: (Month indexOfMonth: item) = index]. self should: [Month indexOfMonth: 1] raise: self defaultTestError. self should: [Month indexOfMonth: #Marsh] raise: self defaultTestError. "notice the misspell!!!!" self should: [Month indexOfMonth: #UnexistingMonth] raise: self defaultTestError.! ! !MonthTest methodsFor: 'tests' stamp: 'brp 8/23/2003 16:08' prior: 26573434! testInquiries self assert: month index = 7; assert: month name = #July; assert: month duration = (31 days). ! ! !MonthTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:42' prior: 26573616! testInstanceCreation | m1 m2 | m1 := Month starting: '4 July 1998' asDate. m2 := Month year: 1998 month: #July . self assert: month = m1; assert: month = m2! ! !MonthTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/9/2012 22:56' prior: 26573857! testNameOfMonth | m | m := #(#January #February #March #April #May #June #July #August #September #October #November #December). m withIndexDo: [:item :index | self assert: (Month nameOfMonth: index) = item]. self should: [Month nameOfMonth: 0] raise: self defaultTestError. self should: [Month nameOfMonth: 13] raise: self defaultTestError. self should: [Month nameOfMonth: #January] raise: self defaultTestError.! ! !MonthTest methodsFor: 'tests' stamp: 'brp 7/26/2003 23:02' prior: 26574382! testPreviousNext | n p | n := month next. p := month previous. self assert: n year = 1998; assert: n index = 8; assert: p year = 1998; assert: p index = 6. ! ! !MonthTest methodsFor: 'tests' stamp: 'brp 7/26/2003 22:50' prior: 26574618! testPrinting self assert: month printString = 'July 1998'. ! ! !MonthTest methodsFor: 'tests' stamp: 'brp 7/26/2003 22:46' prior: 26574748! testReadFrom | m | m := Month readFrom: 'July 1998' readStream. self assert: m = month! ! !StopwatchTest methodsFor: 'coverage' stamp: 'brp 9/24/2003 22:49' prior: 50908744! classToBeTested ^ Stopwatch ! ! !StopwatchTest methodsFor: 'coverage' stamp: 'brp 9/24/2003 23:01' prior: 50908848! selectorsToBeIgnored | private | private := #( #printOn: #state: ). ^ super selectorsToBeIgnored, private ! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:49' prior: 50910597! testChangingStatus aStopwatch activate. self assert: aStopwatch isActive. self assert: aStopwatch timespans size = 1. aStopwatch suspend. self assert: aStopwatch isSuspended. self assert: aStopwatch timespans size = 1. aStopwatch activate. aStopwatch reActivate. self assert: aStopwatch isActive. self assert: aStopwatch timespans size = 3. aStopwatch reset. self assert: aStopwatch isSuspended. self assert: aStopwatch timespans size = 0.! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:49' prior: 50911121! testInitialStatus self assert: aStopwatch isSuspended. self deny: aStopwatch isActive. self assert: aStopwatch duration = 0 seconds! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/26/2004 19:32' prior: 50911327! testMultipleTimings aStopwatch activate. aDelay wait. aStopwatch suspend. aStopwatch activate. aDelay wait. aStopwatch suspend. self assert: aStopwatch timespans size = 2. self assert: aStopwatch timespans first asDateAndTime <= aStopwatch timespans last asDateAndTime. ! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/24/2003 22:56' prior: 50909031! testNew | sw | sw := Stopwatch new. self assert: (sw isSuspended); assert: (sw state = #suspended); deny: (sw isActive); assert: (sw timespans isEmpty) ! ! !StopwatchTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 50911693! testPrintOn | cs rw | cs := 'a Stopwatch(suspended:0:00:00:00)' readStream. rw := ReadWriteStream on: ''. aStopwatch printOn: rw. self assert: rw contents = cs contents! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/25/2003 12:02' prior: 50909269! testReActivate | sw | sw := Stopwatch new. sw activate; suspend; reActivate. self assert: (sw isActive). ! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/25/2003 11:56' prior: 50909461! testReset | sw | sw := Stopwatch new. sw activate. sw reset. self assert: (sw isSuspended); assert: (sw timespans isEmpty) ! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/26/2004 19:32' prior: 50911938! testSingleTiming | timeBefore | timeBefore := DateAndTime now. aStopwatch activate. aDelay wait. aStopwatch suspend. self assert: aStopwatch timespans size = 1. self assert: aStopwatch timespans first asDateAndTime >= timeBefore. self assert: aStopwatch timespans first asDateAndTime <= aStopwatch end. ! ! !StopwatchTest methodsFor: 'tests' stamp: 'brp 9/26/2004 19:36' prior: 50909667! testStartStop | sw t1 t2 t3 t4 | sw := Stopwatch new. t1 := DateAndTime now. (Delay forMilliseconds: 10) wait. sw activate; activate. (Delay forMilliseconds: 10) wait. t2 := DateAndTime now. self deny: (sw isSuspended); assert: (sw isActive); assert: (sw timespans size = 1); assert: (t1 <= sw start); assert: (sw start <= t2). (Delay forMilliseconds: 10) wait. t3 := DateAndTime now. (Delay forMilliseconds: 10) wait. sw suspend; suspend. (Delay forMilliseconds: 10) wait. t4 := DateAndTime now. self assert: (sw isSuspended); deny: (sw isActive); assert: (sw timespans size = 1); assert: (sw end between: t3 and: t4); assert: (t3 <= sw end); assert: (sw end <= t4). ! ! !Week class methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:34' prior: 54850049! dayNames ^ DayNames ! ! !Week class methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:34' prior: 54850148! indexOfDay: aSymbol ^ DayNames indexOf: aSymbol ! ! !Week class methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:34' prior: 54849927! nameOfDay: anIndex ^ DayNames at: anIndex ! ! !Week class methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 18:47' prior: 54850275! startDay ^ StartDay ifNil: [ StartDay := DayNames first ]! ! !Week class methodsFor: 'accessing' stamp: 'brp 8/23/2003 09:30' prior: 54850412! startDay: aSymbol (DayNames includes: aSymbol) ifTrue: [ StartDay := aSymbol ] ifFalse: [ self error: aSymbol, ' is not a recognised day name' ] ! ! !Week class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 18:53' prior: 54850651! starting: aDateAndTime duration: aDuration "Override - the duration is always one week. Week will start from the Week class>>startDay" | midnight delta adjusted | midnight := aDateAndTime asDateAndTime midnight. delta := ((midnight dayOfWeek + 7 - (DayNames indexOf: self startDay)) rem: 7) abs. adjusted := midnight - (Duration days: delta seconds: 0). ^ super starting: adjusted duration: (Duration weeks: 1).! ! !Week class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:36'! week: weekNumber "Return a week in this year" ^ self year: Year current week: weekNumber! ! !Week class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:36'! year: aYear week: weekNumber "Return the ISO week for the given week number and the given year. Week 1 contains the year's first Thursday (weekday = 5)" ^ self starting: aYear asYear firstThursday + (weekNumber * 7 - 5"adjust for firstThursday") days! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 12:51' prior: 55017740! testDaysInMonth self assert: (Month daysInMonth: 2 forYear: 2000) = 29. self assert: (Month daysInMonth: 2 forYear: 2001) = 28. self assert: (Month daysInMonth: 2 forYear: 2004) = 29. self assert: (Month daysInMonth: 2 forYear: 2100) = 28. self assert: (Month daysInMonth: 'January' forYear: 2003) = 31. self assert: (Month daysInMonth: 'February' forYear: 2003) = 28. self assert: (Month daysInMonth: 'March' forYear: 2003) = 31. self assert: (Month daysInMonth: 'April' forYear: 2003) = 30. self assert: (Month daysInMonth: 'May' forYear: 2003) = 31. self assert: (Month daysInMonth: 'June' forYear: 2003) = 30. self assert: (Month daysInMonth: 'July' forYear: 2003) = 31. self assert: (Month daysInMonth: 'August' forYear: 2003) = 31. self assert: (Month daysInMonth: 'September' forYear: 2003) = 30. self assert: (Month daysInMonth: 'October' forYear: 2003) = 31. self assert: (Month daysInMonth: 'November' forYear: 2003) = 30. self assert: (Month daysInMonth: 'December' forYear: 2003) = 31.! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 12:37' prior: 55018844! testDaysInYear self assert: (Year daysInYear: 2000) = 366. self assert: (Year daysInYear: 2001) = 365. self assert: (Year daysInYear: 2004) = 366. self assert: (Year daysInYear: 2100) = 365. self assert: (Year daysInYear: 2003) = 365.! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 13:37' prior: 55019158! testIndexOfDay self assert: (Week indexOfDay: 'Friday') = 6. ! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 12:33' prior: 55019296! testIsLeapYear self assert: (Year isLeapYear: 2000). self deny: (Year isLeapYear: 2001). self assert: (Year isLeapYear: 2004). self deny: (Year isLeapYear: 2100). self deny: (Year isLeapYear: 2002).! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 55019584! testMonthPrintOn | aMonth cs rw | aMonth := Month starting: DateAndTime new duration: 31 days. cs := 'January 1901' readStream. rw := ReadWriteStream on: ''. aMonth printOn: rw. self assert: rw contents = cs contents! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 13:34' prior: 55019886! testStartDay Week startDay: 'Wednesday'. self assert: Week startDay = 'Wednesday'. Week startDay: 'Thursday'. self assert: Week startDay = 'Thursday'. ! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'PeterHugossonMiller 9/3/2009 11:51' prior: 55020133! testWeekPrintOn | aWeek cs rw | aWeek := Week starting: (DateAndTime year: 1900 month: 12 day: 31). cs := 'a Week starting: 1900-12-30T00:00:00+00:00'. rw := String new writeStream. aWeek printOn: rw. self assert: rw contents = cs! ! !YearMonthWeekTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 55020454! testYearPrintOn | aYear cs rw | aYear := Year starting: DateAndTime new duration: 365 days. cs := 'a Year (1901)' readStream. rw := ReadWriteStream on: ''. aYear printOn: rw. self assert: rw contents = cs contents! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/31/2006 01:25' prior: 21043380! days: aNumber ^ self seconds: aNumber * SecondsInDay nanoSeconds: 0! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/31/2006 01:26' prior: 21043538! hours: aNumber ^ self seconds: aNumber * SecondsInHour nanoSeconds: 0! ! !Duration class methodsFor: 'instance creation simple' stamp: 'StephaneDucasse 5/5/2010 22:01' prior: 21043710! milliSeconds: milliCount ^ self seconds: (milliCount quo: 1000) nanoSeconds: (milliCount rem: 1000) * NanosInMillisecond! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/31/2006 01:27' prior: 21043930! minutes: aNumber ^ self seconds: aNumber * SecondsInMinute nanoSeconds: 0! ! !Duration class methodsFor: 'instance creation simple' stamp: 'CamilloBruni 8/22/2013 19:43' prior: 21044094! month: aMonth "aMonth is an Integer or a String" ^ (Month month: aMonth) duration ! ! !Duration class methodsFor: 'instance creation simple' stamp: 'adrian_lienhard 1/7/2009 18:22' prior: 21044305! nanoSeconds: nanos "This method is slow. If you have nanos less than 10^6 you should use #seconds:nanoSeconds: instead." | quo | quo := nanos quo: NanosInSecond. ^ self basicNew seconds: quo nanoSeconds: nanos - (quo * NanosInSecond)! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/31/2006 01:34' prior: 21044636! seconds: seconds ^ self seconds: seconds nanoSeconds: 0 ! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/30/2006 23:20' prior: 21044783! weeks: aNumber ^ self days: (aNumber * 7) seconds: 0 ! ! !Duration class methodsFor: 'instance creation simple' stamp: 'CamilloBruni 9/22/2012 10:49' prior: 21044937! years: aNumber ^ self days: (aNumber * 365) seconds: 0 ! ! !Duration class methodsFor: 'instance creation simple' stamp: 'gk 8/31/2006 00:09' prior: 21045083! zero ^ self basicNew seconds: 0 nanoSeconds: 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:01' prior: 20393253! testAsDate self assert: aDateAndTime asDate = 'January 1, 1901' asDate. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 13:31' prior: 20393407! testAsDateAndTime self assert: aDateAndTime asDateAndTime = aDateAndTime ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 13:34' prior: 20393562! testAsDuration self assert: aDateAndTime asDuration = 0 asDuration ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20393721! testAsLocal self assert: aDateAndTime asLocal = aDateAndTime. self assert: aDateAndTime asLocal = (aDateAndTime offset: aDateAndTime class localOffset) ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:44' prior: 20393956! testAsMonth self assert: aDateAndTime asMonth equals: (Month year: 1901 month: 'January'). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 13:59' prior: 20394121! testAsNanoSeconds self assert: aDateAndTime asNanoSeconds = 0 asDuration asNanoSeconds ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 14:01' prior: 20394290! testAsSeconds self assert: aDateAndTime asSeconds = 0 asDuration asSeconds ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 09:32' prior: 20394447! testAsTime self assert: aDateAndTime asTime = Time midnight. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 14:51' prior: 20394588! testAsTimeStamp self assert: aDateAndTime asTimeStamp = TimeStamp new. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 11:07' prior: 20394739! testAsUTC self assert: aDateAndTime asUTC = aDateAndTime ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'brp 1/16/2004 13:43' prior: 20394887! testAsWeek self assert: aDateAndTime asWeek = (Week starting: '12-31-1900' asDate). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 09:43' prior: 20395052! testAsYear self assert: aDateAndTime asYear = (Year starting: '01-01-1901' asDate). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:28' prior: 20395218! testCurrent self deny: aDateAndTime = (DateAndTime current). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 09:46' prior: 20395359! testDateTime self assert: aDateAndTime = (DateAndTime date: '01-01-1901' asDate time: '00:00:00' asTime) ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:01' prior: 20395544! testDay self assert: aDateAndTime day = DateAndTime new day ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/2/2004 11:08' prior: 20395685! testDayMonthYearDo |iterations| iterations := 0. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | iterations := iterations + 1]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachYear]) = 1901. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachMonth]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachDay]) = 1. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 15:45' prior: 20396215! testDayOfMonth self assert: aDateAndTime dayOfMonth = 1. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 10:47' prior: 20396352! testDayOfWeek self assert: aDateAndTime dayOfWeek = 3. self assert: aDateAndTime dayOfWeekAbbreviation = 'Tue'. self assert: aDateAndTime dayOfWeekName = 'Tuesday'. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:01' prior: 20396599! testDayOfYear self assert: aDateAndTime dayOfYear = 1. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:02' prior: 20396735! testDaysInMonth self assert: aDateAndTime daysInMonth = 31. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:02' prior: 20396876! testDaysInYear self assert: aDateAndTime daysInYear = 365. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:02' prior: 20397016! testDaysLeftInYear self assert: aDateAndTime daysLeftInYear = 364. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 16:24' prior: 20397164! testDuration self assert: aDateAndTime duration = 0 asDuration. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'cmm 6/14/2010 17:19' prior: 20397310! testEpoch self assert: aDateAndTime = '1901-01-01T00:00:00+00:00' asDateAndTime ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 10:44' prior: 20397470! testFirstDayOfMonth self assert: aDateAndTime firstDayOfMonth = 1 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:25' prior: 20397617! testFromSeconds self assert: aDateAndTime = (DateAndTime fromSeconds: 0). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:26' prior: 20397771! testFromString self assert: aDateAndTime = (DateAndTime fromString: ' 1901-01-01T00:00:00+00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1901-01-01T00:00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1901-01-01T00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1901-01-01T00:00:00+00:00'). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'al 6/12/2008 21:56' prior: 20398193! testHash self assert: aDateAndTime hash = DateAndTime new hash! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 16:59' prior: 20398334! testHour self assert: aDateAndTime hour = aDateAndTime hour24. self assert: aDateAndTime hour = 0. self assert: aDateAndTime hour = aDateAndTime hours ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'brp 3/12/2004 15:21' prior: 20398576! testHour12 self assert: aDateAndTime hour12 = DateAndTime new hour12. self assert: aDateAndTime hour12 = 12 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:02' prior: 20398766! testIsLeapYear self deny: aDateAndTime isLeapYear ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 17:18' prior: 20398895! testJulianDayNumber self assert: aDateAndTime = (DateAndTime julianDayNumber: 2415386). self assert: aDateAndTime julianDayNumber = 2415386.! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 13:20' prior: 20399116! testLessThan self assert: aDateAndTime < (aDateAndTime + '1:00:00:00'). self assert: aDateAndTime + -1 < aDateAndTime. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 10:40' prior: 20399317! testMeridianAbbreviation self assert: aDateAndTime meridianAbbreviation = 'AM'. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 12:37' prior: 20399478! testMiddleOf self assert: (aDateAndTime middleOf: '2:00:00:00' asDuration) = (Timespan starting: '12-31-1900' asDate duration: 2 days). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 17:39' prior: 20399698! testMidnight self assert: aDateAndTime midnight = aDateAndTime ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 14:03' prior: 20399841! testMinus self assert: aDateAndTime - aDateAndTime = '0:00:00:00' asDuration. self assert: aDateAndTime - '0:00:00:00' asDuration = aDateAndTime. self assert: aDateAndTime - aDuration = (DateAndTime year: 1900 month: 12 day: 30 hour: 21 minute: 56 second: 55 nanoSecond: 999999995 offset: 0 hours ). " I believe this Failure is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 19:35' prior: 20400356! testMinute self assert: aDateAndTime minute = 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'brp 1/16/2004 13:41' prior: 20400486! testMinutes self assert: aDateAndTime minutes = 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 19:46' prior: 20400615! testMonth self assert: aDateAndTime month = 1. self assert: aDateAndTime monthAbbreviation = 'Jan'. self assert: aDateAndTime monthName = 'January'. self assert: aDateAndTime monthIndex = 1.! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 19:47' prior: 20400888! testNanoSecond self assert: aDateAndTime nanoSecond = 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:27' prior: 20401025! testNew self assert: aDateAndTime = (DateAndTime new). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'cmm 6/14/2010 17:19' prior: 20401161! testNoon self assert: aDateAndTime noon = '1901-01-01T12:00:00+00:00' asDateAndTime! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:28' prior: 20401323! testNow self deny: aDateAndTime = (DateAndTime now). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:21' prior: 20401466! testOffset self assert: aDateAndTime offset = '0:00:00:00' asDuration. self assert: (aDateAndTime offset: '-0:12:00:00') equals: '1900-12-31T12:00:00-12:00' asDateAndTime. self assert: (aDateAndTime offset: '0:12:00:00') equals: '1901-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 11:03' prior: 20401821! testPlus self assert: aDateAndTime + '0:00:00:00' = aDateAndTime. self assert: aDateAndTime + 0 = aDateAndTime. self assert: aDateAndTime + aDuration = (DateAndTime year: 1901 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 20402290! testPrintOn | cs rw | cs := '1901-01-01T00:00:00+00:00' readStream. rw := ReadWriteStream on: ''. aDateAndTime printOn: rw. self assert: rw contents = cs contents. cs := 'a TimeZone(ETZ)' readStream. rw := ReadWriteStream on: ''. aTimeZone printOn: rw. self assert: rw contents = cs contents! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 20:22' prior: 20402668! testSecond self assert: aDateAndTime second = 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 20:22' prior: 20402797! testSeconds self assert: aDateAndTime seconds = 0 ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 20:25' prior: 20402928! testTicks self assert: aDateAndTime ticks = (DateAndTime julianDayNumber: 2415386) ticks. self assert: aDateAndTime ticks = #(2415386 0 0)! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 20:31' prior: 20403147! testTicksOffset self assert: aDateAndTime = (aDateAndTime ticks: #(2415386 0 0) offset: DateAndTime localOffset). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:52' prior: 20403352! testTimeZone self assert: aDateAndTime timeZoneName = 'Universal Time'. self assert: aDateAndTime timeZoneAbbreviation = 'UTC' ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:42' prior: 20403561! testTo self assert: (aDateAndTime to: aDateAndTime) = (DateAndTime new to: DateAndTime new) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:43' prior: 20403827! testToBy self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days) = (DateAndTime new to: DateAndTime new + 10 days by: 5 days ) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 20:53' prior: 20404143! testToByDo "self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days do: []) = " "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 17:35' prior: 20404406! testToday self deny: aDateAndTime = (DateAndTime today). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/3/2004 11:45' prior: 20404543! testTommorrow self assert: (DateAndTime today + 24 hours) = (DateAndTime tomorrow). self deny: aDateAndTime = (DateAndTime tomorrow). "MessageNotUnderstood: Date class>>starting:"! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20404819! testUtcOffset self assert: (aDateAndTime offset: '0:12:00:00') = '1901-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 21:00' prior: 20405009! testYear self assert: aDateAndTime year = 1901. ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:30' prior: 20405138! testYearDay self assert: aDateAndTime = (DateAndTime year: 1901 day: 1). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:31' prior: 20405291! testYearDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1901 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:31' prior: 20405488! testYearMonthDay self assert: aDateAndTime = (DateAndTime year: 1901 month: 1 day: 1). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/1/2004 12:31' prior: 20405655! testYearMonthDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1901 month: 1 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 12:23' prior: 20405866! testYearMonthDayHourMinuteSecondNanosSecondOffset self assert: aDateAndTime = (DateAndTime year: 1901 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset:0 hours ). self assert: ((DateAndTime year: 1 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset: 0 hours ) + (Duration days: 1 hours: 2 minutes: 3 seconds: 4 nanoSeconds: 5) ) = (DateAndTime year: 1 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)"" I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeEpochTest methodsFor: 'tests' stamp: 'tlk 1/4/2004 09:47' prior: 20406666! testYesterday self deny: aDateAndTime = (DateAndTime yesterday). ! ! !MethodFinder methodsFor: 'initialization' stamp: 'CamilloBruni 8/22/2013 22:03' prior: 48968517! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" classVersion isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !TimespanTest methodsFor: 'coverage' stamp: 'brp 9/15/2003 14:15' prior: 53228209! classToBeTested ^ Timespan ! ! !TimespanTest methodsFor: 'running' stamp: 'nk 3/30/2004 09:21' prior: 53228309! setUp localTimeZoneToRestore := DateAndTime localTimeZone. DateAndTime localTimeZone: TimeZone default. "100 hours starting noon 22 March 2003" timespan := Timespan starting: (DateAndTime year: 2003 month: 03 day: 22 hour: 12 minute: 0 second: 0) duration: (Duration hours: 100). dec31 := (DateAndTime year: 2004 month: 12 day: 31 hour: 0 minute: 0 second: 0). jan01 := (DateAndTime year: 2005 month: 1 day: 1 hour: 0 minute: 0 second: 0). jan08 := (DateAndTime year: 2005 month: 1 day: 8 hour: 0 minute: 0 second:0). aDay := Duration days: 1 hours: 0 minutes: 0 seconds: 0 nanoSeconds: 0. aWeek := Duration days: 7 hours: 0 minutes: 0 seconds: 0 nanoSeconds: 0. aTimespan := Timespan starting: jan01 duration: aWeek. anOverlappingTimespan := Timespan starting: dec31 duration: aWeek. anIncludedTimespan := Timespan starting: jan01 duration: aDay. aDisjointTimespan := Timespan starting: jan08 duration: aWeek. ! ! !TimespanTest methodsFor: 'running' stamp: 'nk 3/30/2004 09:22' prior: 53229320! tearDown DateAndTime localTimeZone: localTimeZoneToRestore. timespan := nil ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/7/2004 16:25' prior: 53229467! testAccessing self assert: (timespan start = (DateAndTime year: 2003 month: 03 day: 22 hour: 12 minute: 0 second: 0)); assert: timespan duration = (Duration hours: 100); assert: timespan month = 3; assert: timespan monthName = 'March'; assert: timespan monthAbbreviation = 'Mar' ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 9/15/2003 14:29' prior: 53229837! testArithmetic | ts1 ts2 d | ts1 := timespan + 2 days. ts2 := ts1 - 2 days. d := ts1 - (DateAndTime year: 2003 month: 03 day: 20). self assert: (ts1 start = (DateAndTime year: 2003 month: 03 day: 24 hour: 12 minute: 0 second: 0)); assert: (ts1 duration = timespan duration); assert: (ts2 start = timespan start); assert: (ts2 duration = timespan duration). self assert: d = (Duration days: 4 hours: 12 minutes: 0 seconds: 0) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53231370! testAsDate self assert: aTimespan asDate = jan01 asDate. "MessageNotUnderstood: Date class>>starting:" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53231548! testAsDateAndTime self assert: aTimespan asDateAndTime = jan01. "MessageNotUnderstood: Date class>>starting:" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53231735! testAsDuration self assert: aTimespan asDuration = aWeek. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53231871! testAsMonth self assert: aTimespan asMonth = jan01 asMonth. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53232005! testAsTime self assert: aTimespan asTime = jan01 asTime "MessageNotUnderstood: Time class>>seconds:nanoSeconds:" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53232193! testAsTimeStamp self assert: aTimespan asTimeStamp = ((TimeStamp readFrom: '1-01-2005 0:00 am' readStream) offset: 0 hours). ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53232391! testAsWeek self assert: aTimespan asWeek = jan01 asWeek. "DateAndTime new asWeek MessageNotUnderstood: Week class>>starting:" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53232594! testAsYear self assert: aTimespan asYear = jan01 asYear. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 9/23/2004 09:58' prior: 53232726! testClockPrecisionDuration | ts | ts := Timespan starting: Date today duration: DateAndTime clockPrecision. self assert: ts start = ts end! ! !TimespanTest methodsFor: 'tests' stamp: 'nk 3/30/2004 09:26' prior: 53232939! testCurrent self assert: (Timespan starting: DateAndTime current) <= Timespan current. self assert: Timespan current <= (Timespan starting: DateAndTime current)! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233179! testDay self assert: aTimespan day = jan01 day ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233300! testDayOfMonth self assert: aTimespan dayOfMonth = 1. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233427! testDayOfWeek self assert: aTimespan dayOfWeek = 7. self assert: aTimespan dayOfWeekName = 'Saturday'. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233606! testDayOfYear self assert: aTimespan dayOfYear = 1. "MessageNotUnderstood: UndefinedObject>>year:, Undefined object is Year class" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233812! testDaysInMonth self assert: aTimespan daysInMonth = 31. "MessageNotUnderstood: Month class>>starting:" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53233991! testDaysInYear self assert: aTimespan daysInYear = 365. "MessageNotUnderstood: UndefinedObject>>starting: UndefinedObject is Year class" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53234204! testDaysLeftInYear self assert: aTimespan daysLeftInYear = 364. "MessageNotUnderstood: UndefinedObject>>starting: UndefinedObject is Year class" ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53234425! testDoWith | count | count := 0. aTimespan do: [:each | count := count + 1] with: (Timespan starting: jan01 duration: aDay). self assert: count = 7! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53234651! testDoWithWhen | count | count := 0. aTimespan do: [:each | count := count + 1] with: (Timespan starting: jan01 duration: aDay) when: [:each | count < 5]. self assert: count = 5! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53234909! testDuration self assert: aTimespan duration = aWeek. aTimespan duration: aDay. self assert: aTimespan duration = aDay. ! ! !TimespanTest methodsFor: 'tests' stamp: 'StephaneDucasse 9/18/2010 21:38' prior: 53235118! testEnd "self debug: #testEnd" self assert: aTimespan end + (Duration nanoSeconds: 1) = aDisjointTimespan start. self assert: aTimespan end = (DateAndTime year: 2005 month: 1 day: 7 hour: 23 minute: 59 second: 59 nanoSecond: 999999999 offset: 0 hours). ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53235450! testEveryDo | count duration | count := 0. duration := 7 days. aTimespan every: duration do: [:each | count := count + 1]. self assert: count = 1! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53235675! testFirstDayOfMonth self assert: aTimespan firstDayOfMonth = 1. self assert: aDisjointTimespan firstDayOfMonth = 1 ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53235868! testIncludes self assert: (aTimespan includes: jan01). self deny: (aTimespan includes: jan08) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53236035! testIncludesAllOf self assert: (aTimespan includesAllOf: (Bag with: jan01)). self deny: (aTimespan includesAllOf: (Bag with: jan01 with: jan08)) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53236253! testIncludesAnyOf self deny: (aTimespan includesAnyOf: (Bag with: dec31)). self assert: (aTimespan includesAnyOf: (Bag with: jan01 with: jan08)) "Error is due to bug in Timespan includesAnyOf: aCollection " "Answer whether any element of aCollection is included in the receiver" "aCollection do: [ :elem | (self includes: elem) ifTrue: [^ true]]. Shouldn't this return false if none are included? " ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/9/2004 06:43' prior: 53230357! testInclusion | t1 t2 t3 t4 | t1 := timespan start. t2 := timespan start + (timespan duration / 2). t3 := timespan end. t4 := timespan start + (timespan duration). self assert: (timespan includes: t1); assert: (timespan includes: t2); assert: (timespan includes: t3)"; deny: (timespan includes: t4). self assert: (timespan includes: (t1 to: t2)); assert: (timespan includes: (t1 to: t4)); deny: (timespan includes: (Timespan starting: t2 duration: (timespan duration * 2))). self assert: (timespan includesAllOf: { t1. t2. t3 } ); deny: (timespan includesAllOf: { t1. t2. t3. t4} ). self assert: (timespan includesAnyOf: { t1. t2. t3 } ); deny: (timespan includesAnyOf: { t4 } ). "! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53236729! testIntersectionWithDisjoint self assert: (aTimespan intersection: aDisjointTimespan) isNil. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53236894! testIntersectionWithIncluded self assert: (aTimespan intersection: anIncludedTimespan) = (Timespan starting: jan01 duration: (Duration days: 0 hours: 23 minutes: 59 seconds: 59 nanoSeconds: 999999999)). self deny: (aTimespan intersection: anIncludedTimespan) = anIncludedTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53237252! testIntersectionWithOverlapping self assert: (aTimespan intersection: anOverlappingTimespan) = (Timespan starting: jan01 duration: (Duration days: 5 hours: 23 minutes: 59 seconds: 59 nanoSeconds: 999999999)). ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53237539! testIntersectionWithSelf self assert: (aTimespan intersection: aTimespan) = (Timespan starting: jan01 duration: (Duration days: 6 hours: 23 minutes: 59 seconds: 59 nanoSeconds: 999999999)). self deny: (aTimespan intersection: anIncludedTimespan) = aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53237875! testIntersectionWithSeparate self assert: (aTimespan intersection: aDisjointTimespan) isNil. self deny: (aTimespan intersection: anOverlappingTimespan) isNil. self assert: (aTimespan intersection: anIncludedTimespan) = (Timespan starting: jan01 duration: (Duration days: 0 hours: 23 minutes: 59 seconds: 59 nanoSeconds: 999999999)). self deny: (aTimespan intersection: anIncludedTimespan) = anIncludedTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53238365! testIsLeapYear "self assert: anOverlappingTimespan isLeapYear." "not sure why this fails" self deny: aTimespan isLeapYear ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53238561! testJulianDayNumber self assert: aTimespan julianDayNumber = (jan01 julianDayNumber). ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53238720! testLessThan self assert: aTimespan < aDisjointTimespan. self deny: anIncludedTimespan < aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53238894! testMinusADateAndTime "It appears that subtracting a date from a Timespan gives you a duration = to the difference between the start of the timespan and the date " self assert: aTimespan - dec31 = aDay. self assert: aDisjointTimespan - jan01 = aWeek. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53239223! testMinusADuration "It appears that subtracting a duration from a Timespan gives you a Timespan shifted by the duration" self assert: aTimespan - aDay = anOverlappingTimespan. self assert: aDisjointTimespan - aWeek = aTimespan. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53239530! testMonth self assert: aTimespan month = 1. self assert: aTimespan monthName = 'January'. self assert: aTimespan monthIndex = 1.! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53239733! testNew self assert: Timespan new = (Timespan starting: '01-01-1901' asDate)! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53239881! testNext self assert: aTimespan next = aDisjointTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53240010! testPlus self assert: aTimespan + aWeek = aDisjointTimespan. self assert: anOverlappingTimespan + aDay = aTimespan. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53240199! testPrevious self assert: aTimespan = aDisjointTimespan previous. self assert: aTimespan next previous = aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53240398! testPrintOn | cs rw | cs := 'a Timespan(2005-01-01T00:00:00+00:00D7:00:00:00)' readStream. rw := ReadWriteStream on: ''. aTimespan printOn: rw. self assert: rw contents = cs contents! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53240656! testStart self assert: aTimespan start = jan01. aTimespan start: jan08. self assert: aTimespan start = jan08.! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53240843! testStartingEnding self assert: aTimespan = (Timespan starting: jan01 ending: jan08) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241001! testTo self assert: (anIncludedTimespan to: jan08) = aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/9/2004 16:49' prior: 53231142! testUnion | union | union := timespan union: timespan. self assert: (union start = timespan start); assert: (union duration = timespan duration) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241137! testUnionWithDisjoint self assert: (aTimespan union: aDisjointTimespan) = (Timespan starting: jan01 duration: (14 days)). ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241341! testUnionWithIncluded self assert: (aTimespan union: anIncludedTimespan) = aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241503! testUnionWithOverlapping self assert: (aTimespan union: anOverlappingTimespan) = (Timespan starting: dec31 duration: (8 days))! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241711! testUnionWithSelf self assert: (aTimespan union: aTimespan) = aTimespan ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53241856! testUnionWithSeparate self assert: (anOverlappingTimespan union: aDisjointTimespan) = (Timespan starting: anOverlappingTimespan start ending: (aDisjointTimespan end + DateAndTime clockPrecision)) ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53242146! testWorkDatesDo | count | count := 0. aTimespan workDatesDo: [:each | count := count + 1]. self assert: count = 5! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:31' prior: 53242336! testYear self assert: aTimespan year = 2005. ! ! !TimespanTest methodsFor: 'tests' stamp: 'brp 9/23/2004 09:57' prior: 53242455! testZeroDuration | ts | ts := Timespan starting: Date today duration: Duration zero. self assert: ts start = ts end! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20377062! testAsDate self assert: aDateAndTime asDate = 'January 1, 1980' asDate. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20377231! testAsDateAndTime self assert: aDateAndTime asDateAndTime = aDateAndTime ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20377401! testAsDuration self assert: aDateAndTime asDuration = 0 asDuration ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20377563! testAsLocal self assert: aDateAndTime asLocal = aDateAndTime. self assert: aDateAndTime asLocal = (aDateAndTime offset: aDateAndTime class localOffset) ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:44' prior: 20377813! testAsMonth self assert: aDateAndTime asMonth equals: (Month year: 1980 month: 'January'). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20377993! testAsNanoSeconds self assert: aDateAndTime asNanoSeconds = 0 asDuration asNanoSeconds ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:32' prior: 20378177! testAsSeconds self assert: aDateAndTime asSeconds = 2492985600 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20378336! testAsTime self assert: aDateAndTime asTime = Time midnight. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:32' prior: 20378492! testAsTimeStamp self assert: aDateAndTime asTimeStamp = (TimeStamp fromString: '1 January 1980 12:00 am').! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20378693! testAsUTC self assert: aDateAndTime asUTC = aDateAndTime ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:32' prior: 20378855! testAsWeek self assert: aDateAndTime asWeek = (Week starting: '12-31-1979' asDate). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:33' prior: 20379035! testAsYear self assert: aDateAndTime asYear = (Year starting: '01-01-1980' asDate). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20379216! testCurrent self deny: aDateAndTime = (DateAndTime current). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:33' prior: 20379372! testDateTime self assert: aDateAndTime = (DateAndTime date: '01-01-1980' asDate time: '00:00:00' asTime) ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20379572! testDay self assert: aDateAndTime day = DateAndTime new day ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:33' prior: 20379728! testDayMonthYearDo |iterations| iterations := 0. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | iterations := iterations + 1]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachYear]) = 1980. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachMonth]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachDay]) = 1. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20380273! testDayOfMonth self assert: aDateAndTime dayOfMonth = 1. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:33' prior: 20380425! testDayOfWeek self assert: aDateAndTime dayOfWeek = 3. self assert: aDateAndTime dayOfWeekAbbreviation = 'Tue'. self assert: aDateAndTime dayOfWeekName = 'Tuesday'. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20380687! testDayOfYear self assert: aDateAndTime dayOfYear = 1. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20380838! testDaysInMonth self assert: aDateAndTime daysInMonth = 31. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:33' prior: 20380994! testDaysInYear self assert: aDateAndTime daysInYear = 366. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:34' prior: 20381149! testDaysLeftInYear self assert: aDateAndTime daysLeftInYear = 365. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20381312! testDuration self assert: aDateAndTime duration = 0 asDuration. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:34' prior: 20381472! testEpoch self assert: aDateAndTime = '1980-01-01T00:00:00+00:00' asDateAndTime ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20381647! testFirstDayOfMonth self assert: aDateAndTime firstDayOfMonth = 1 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:34' prior: 20381809! testFromSeconds self assert: aDateAndTime = (DateAndTime fromSeconds: 2492985600). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:34' prior: 20381987! testFromString self assert: aDateAndTime = (DateAndTime fromString: ' 1980-01-01T00:00:00+00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1980-01-01T00:00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1980-01-01T00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1980-01-01T00:00:00+00:00'). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:34' prior: 20382424! testHash self assert: aDateAndTime hash = (DateAndTime year: 1980 month: 1 day: 1) hash! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20382605! testHour self assert: aDateAndTime hour = aDateAndTime hour24. self assert: aDateAndTime hour = 0. self assert: aDateAndTime hour = aDateAndTime hours ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20382861! testHour12 self assert: aDateAndTime hour12 = DateAndTime new hour12. self assert: aDateAndTime hour12 = 12 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:35' prior: 20383066! testIsLeapYear self assert: aDateAndTime isLeapYear ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:35' prior: 20383212! testJulianDayNumber self assert: aDateAndTime = (DateAndTime julianDayNumber: 2444240). self assert: aDateAndTime julianDayNumber = 2444240.! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20383448! testLessThan self assert: aDateAndTime < (aDateAndTime + '1:00:00:00'). self assert: aDateAndTime + -1 < aDateAndTime. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20383664! testMeridianAbbreviation self assert: aDateAndTime meridianAbbreviation = 'AM'. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:35' prior: 20383840! testMiddleOf self assert: (aDateAndTime middleOf: '2:00:00:00' asDuration) = (Timespan starting: '12-31-1979' asDate duration: 2 days). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20384075! testMidnight self assert: aDateAndTime midnight = aDateAndTime ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:36' prior: 20384233! testMinus self assert: aDateAndTime - aDateAndTime = '0:00:00:00' asDuration. self assert: aDateAndTime - '0:00:00:00' asDuration = aDateAndTime. self assert: aDateAndTime - aDuration = (DateAndTime year: 1979 month: 12 day: 30 hour: 21 minute: 56 second: 55 nanoSecond: 999999995 offset: 0 hours ). " I believe this Failure is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20384763! testMinute self assert: aDateAndTime minute = 0 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20384907! testMinutes self assert: aDateAndTime minutes = 0 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20385051! testMonth self assert: aDateAndTime month = 1. self assert: aDateAndTime monthAbbreviation = 'Jan'. self assert: aDateAndTime monthName = 'January'. self assert: aDateAndTime monthIndex = 1.! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20385339! testNanoSecond self assert: aDateAndTime nanoSecond = 0 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:36' prior: 20385491! testNoon self assert: aDateAndTime noon = '1980-01-01T12:00:00+00:00' asDateAndTime! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20385668! testNow self deny: aDateAndTime = (DateAndTime now). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:19' prior: 20385814! testOffset self assert: aDateAndTime offset = '0:00:00:00' asDuration. self assert: (aDateAndTime offset: '-0:12:00:00') equals: '1979-12-31T12:00:00-12:00' asDateAndTime. self assert: (aDateAndTime offset: '0:12:00:00') equals: '1980-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:36' prior: 20386184! testPlus self assert: aDateAndTime + '0:00:00:00' = aDateAndTime. self assert: aDateAndTime + 0 = aDateAndTime. self assert: aDateAndTime + aDuration = (DateAndTime year: 1980 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:36' prior: 20386658! testPrintOn | cs rw | cs := '1980-01-01T00:00:00+00:00' readStream. rw := ReadWriteStream on: ''. aDateAndTime printOn: rw. self assert: rw contents = cs contents. cs := 'a TimeZone(DTZ)' readStream. rw := ReadWriteStream on: ''. aTimeZone printOn: rw. self assert: rw contents = cs contents! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20387051! testSecond self assert: aDateAndTime second = 0 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20387195! testSeconds self assert: aDateAndTime seconds = 0 ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20387341! testTicks self assert: aDateAndTime ticks = (DateAndTime julianDayNumber: 2444240) ticks. self assert: aDateAndTime ticks = #(2444240 0 0)! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:37' prior: 20387575! testTicksOffset self assert: aDateAndTime = (aDateAndTime ticks: #(2444240 0 0) offset: DateAndTime localOffset). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:53' prior: 20387783! testTimeZone self assert: aDateAndTime timeZoneName = 'Universal Time'. self assert: aDateAndTime timeZoneAbbreviation = 'UTC' ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:37' prior: 20388007! testTo self assert: (aDateAndTime to: aDateAndTime) = ((DateAndTime year: 1980 month: 1 day: 1) to: (DateAndTime year: 1980 month: 1 day: 1)) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:37' prior: 20388338! testToBy self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days) = ((DateAndTime year: 1980 month: 1 day: 1) to: (DateAndTime year: 1980 month: 1 day: 1) + 10 days by: 5 days ) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20388724! testToByDo "self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days do: []) = " "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20389002! testToday self deny: aDateAndTime = (DateAndTime today). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20389154! testTommorrow self assert: (DateAndTime today + 24 hours) = (DateAndTime tomorrow). self deny: aDateAndTime = (DateAndTime tomorrow). "MessageNotUnderstood: Date class>>starting:"! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 19:15' prior: 20389433! testUtcOffset self assert: (aDateAndTime offset: '0:12:00:00') equals: '1980-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:37' prior: 20389644! testYear self assert: aDateAndTime year = 1980. ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20389788! testYearDay self assert: aDateAndTime = (DateAndTime year: 1980 day: 1). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20389956! testYearDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1980 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20390168! testYearMonthDay self assert: aDateAndTime = (DateAndTime year: 1980 month: 1 day: 1). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20390350! testYearMonthDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1980 month: 1 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:38' prior: 20390576! testYearMonthDayHourMinuteSecondNanosSecondOffset self assert: aDateAndTime = (DateAndTime year: 1980 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset:0 hours ). self assert: ((DateAndTime year: 1 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset: 0 hours ) + (Duration days: 1 hours: 2 minutes: 3 seconds: 4 nanoSeconds: 5) ) = (DateAndTime year: 1 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)"" I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeDosEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20391391! testYesterday self deny: aDateAndTime = (DateAndTime yesterday). ! ! !TimeStamp class methodsFor: 'instance creation' stamp: 'fbs 4/20/2004 14:21' prior: 53186322! current | ts ticks | ts := super now. ticks := ts ticks. ticks at: 3 put: 0. ts ticks: ticks offset: ts offset. ^ ts ! ! !TimeStamp class methodsFor: 'instance creation' stamp: 'fbs 4/20/2004 14:22' prior: 53185654! now "Answer the current date and time as a TimeStamp." ^self current! ! !MailMessage methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 19:50' prior: 25292256! date "Answer a date string for this message." ^(Date fromSeconds: self time + (Date year: 1980 day: 1 ) asSeconds) printFormat: #(2 1 3 47 1 2)! ! !MailMessage methodsFor: 'parsing' stamp: 'CamilloBruni 8/22/2013 19:46' prior: 46466874! readDateFrom: aStream "Parse a date from the given stream and answer nil if the date can't be parsed. The date may be in any of the following forms: (5 April 1982; 5-APR-82) (April 5, 1982) (4/5/82) In addition, the date may be preceded by the day of the week and an optional comma, such as: Tue, November 14, 1989" | day month year | self skipWeekdayName: aStream. aStream peek isDigit ifTrue: [day := Integer readFrom: aStream]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isLetter ifTrue: "month name or weekday name" [month := (String new: 10) writeStream. [aStream peek isLetter] whileTrue: [month nextPut: aStream next]. month := month contents. day ifNil: "name/number..." [[aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. (aStream peek isDigit) ifFalse: [^nil]. day := Integer readFrom: aStream]] ifFalse: "number/number..." [month := Date nameOfMonth: day. day := Integer readFrom: aStream]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. (aStream peek isDigit) ifFalse: [^nil]. year := Integer readFrom: aStream. ^Date year: year month: month day: day! ! !MailMessage methodsFor: 'parsing' stamp: 'CamilloBruni 8/22/2013 19:50' prior: 25310815! timeFrom: aString "Parse the date and time (rfc822) and answer the result as the number of seconds since the start of 1980." | s t rawDelta delta plusOrMinus | s := aString readStream. "date part" t := ((self readDateFrom: s) ifNil: [ Date today ]) asSeconds. [ s atEnd or: [ s peek isAlphaNumeric ] ] whileFalse: [ s next ]. "time part" s atEnd ifFalse: [ "read time part (interpreted as local, regardless of sender's timezone)" s peek isDigit ifTrue: [ t := t + (Time readFrom: s) asSeconds ] ]. s skipSeparators. "Check for a numeric time zone offset" ('+-' includes: s peek) ifTrue: [ plusOrMinus := s next. rawDelta := s peek isDigit ifTrue: [ Integer readFrom: s ] ifFalse: [ 0 ]. delta := (rawDelta // 100 * 60 + (rawDelta \\ 100)) * 60. t := plusOrMinus = $+ ifTrue: [ t - delta ] ifFalse: [ t + delta ] ]. "We ignore text time zone offsets like EST, GMT, etc..." ^ t - (Date year: 1980 day: 1) asSeconds "MailMessage new timeFrom: 'Thu, 22 Jun 2000 14:17:47 -500'" "MailMessage new timeFrom: 'Thu, 22 Jun 2000 14:17:47 --500'" "MailMessage new timeFrom: 'on, 04 apr 2001 14:57:32'"! ! !DateTest methodsFor: 'coverage' stamp: 'brp 7/27/2003 13:01' prior: 20465667! classToBeTested ^ self dateClass! ! !DateTest methodsFor: 'private' stamp: 'brp 8/24/2003 00:10' prior: 20481181! dateClass ^ Date! ! !DateTest methodsFor: 'coverage' stamp: 'brp 1/30/2005 09:03' prior: 20465769! selectorsToBeIgnored | deprecated private special | deprecated := #(). private := #(). special := #( #< #= #new #next #previous #printOn: #printOn:format: #storeOn: #fromString: ). ^ super selectorsToBeIgnored, deprecated, private, special! ! !DateTest methodsFor: 'running' stamp: 'CamilloBruni 8/22/2013 19:49' prior: 20466093! setUp june2nd1973 := self dateClass year: 1973 day: 153. january23rd2004 := Date readFrom: '01-23-2004' readStream. aTime := Time readFrom: '12:34:56 pm' readStream! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 01:43' prior: 20466339! testAccessing self assert: june2nd1973 day = 153; assert: june2nd1973 julianDayNumber = 2441836; assert: june2nd1973 leap = 0; assert: june2nd1973 monthIndex = 6; assert: june2nd1973 monthName = #June; assert: june2nd1973 weekday = #Saturday; assert: june2nd1973 weekdayIndex = 7; assert: june2nd1973 year = 1973. ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 01:46' prior: 20466746! testArithmetic | laterDate | laterDate := june2nd1973 addDays: 32. self assert: (laterDate subtractDate: june2nd1973) equals: 32; assert: (june2nd1973 subtractDate: laterDate) equals: -32; assert: (laterDate subtractDays: 32) equals: june2nd1973. ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 01:46' prior: 20467079! testComparing | sameDate laterDate earlierDate | sameDate := june2nd1973 asString asDate. laterDate := june2nd1973 + 1 day. earlierDate := june2nd1973 - 1 day. self assert: june2nd1973 equals: sameDate; assert: june2nd1973 equals: june2nd1973 copy; assert: june2nd1973 hash equals: sameDate hash. self assert: june2nd1973 < laterDate; assert: june2nd1973 > earlierDate. ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:27' prior: 20467542! testDayOfWeek | dayNames sundayIndex | sundayIndex := self dateClass dayOfWeek: #Sunday. self assert: sundayIndex equals: 1. dayNames := #(#Sunday #Monday #Tuesday #Wednesday #Thursday #Friday #Saturday). dayNames doWithIndex: [ :e :i | | dayIndex | dayIndex := self dateClass dayOfWeek: e. self assert: dayIndex equals: i ].! ! !DateTest methodsFor: 'tests' stamp: 'CamilloBruni 7/17/2012 17:22' prior: 20467955! testFromDays | march18th1627 epochFromDays june2nd1973FromDays march18th1627FromDays january23rd2004FromDays | epochFromDays := self dateClass fromDays: 0. self assert: epochFromDays equals: (self epoch translateTo: 0). june2nd1973FromDays := self dateClass fromDays: (june2nd1973 - self epoch) asDays. self assert: june2nd1973FromDays equals: (june2nd1973 translateTo: 0). march18th1627 := '18 March 1627' asDate. march18th1627FromDays := self dateClass fromDays: (march18th1627 - self epoch) asDays. self assert: march18th1627FromDays equals: (march18th1627 translateTo: 0). january23rd2004FromDays := self dateClass fromDays: 103*365 "years" + 22 "days since Jan 1" + 25 "leap days". self assert: january23rd2004FromDays equals: (january23rd2004 translateTo: 0). ! ! !DateTest methodsFor: 'tests' stamp: 'CamilloBruni 7/17/2012 08:32' prior: 20468811! testFromSeconds | d | d := self dateClass fromSeconds: june2nd1973 asSeconds. self assert: d equals: june2nd1973. ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:40' prior: 20469004! testInquiries self assert: june2nd1973 dayOfMonth equals: 2; assert: june2nd1973 dayOfYear equals: 153; assert: june2nd1973 daysInMonth equals: 30; assert: june2nd1973 daysInYear equals: 365; assert: june2nd1973 daysLeftInYear equals: (365 - 153); assert: june2nd1973 firstDayOfMonth equals: 152. ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:29' prior: 20469589! testNameOfDay | dayNames firstDayName | firstDayName := self dateClass nameOfDay: 1. self assert: firstDayName equals: #Sunday. dayNames := #(#Sunday #Monday #Tuesday #Wednesday #Thursday #Friday #Saturday). (1 to: 7) do: [ :i | | dayName | dayName := self dateClass nameOfDay: i. self assert: dayName equals: (dayNames at: i) ].! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:43' prior: 20470006! testNew self assert: self dateClass new equals: self epoch.! ! !DateTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:46' prior: 20476958! testNewDayMonthYear self assert: (Date year: 2004 month: 1 day: 23) equals: january23rd2004. ! ! !DateTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:49' prior: 20477131! testNewDayYear self assert: (Date year: 2004 day: 23) equals: january23rd2004 ! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:46' prior: 20470141! testNext | nextDay | nextDay := june2nd1973 next. self assert: nextDay equals: '3 June, 1973' asDate.! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 02:47' prior: 20470320! testPrevious | previousDay | previousDay := june2nd1973 previous. self assert: previousDay equals: '1 June, 1973' asDate.! ! !DateTest methodsFor: 'tests' stamp: 'SeanDeNigris 6/20/2012 03:58' prior: 20470519! testReadFrom | s1 s2 s3 s4 s5 | s1 := '2 June 1973' readStream. s2 := '2-JUN-73' readStream. s3 := 'June 2, 1973' readStream. s4 := '6/2/73' readStream. s5 := '2JUN73' readStream. self assert: (self dateClass readFrom: s1) equals: june2nd1973; assert: (self dateClass readFrom: s2) equals: june2nd1973; assert: (self dateClass readFrom: s3) equals: june2nd1973; assert: (self dateClass readFrom: s4) equals: june2nd1973.! ! !DateTest methodsFor: 'tests' stamp: 'MarcusDenker 4/25/2013 15:08' prior: 35770696! testStoring | expected actual | expected := '''2 June 1973'' asDate'. actual := june2nd1973 storeString. self assert: actual equals: expected; assert: (Smalltalk evaluate: expected) equals: june2nd1973. "Evaluating expected to avoid surprises when evaluating" ! ! !DateAndTime class methodsFor: 'primitives' stamp: 'kph 12/11/2006 21:13' prior: 20372874! millisecondClockValue ^ self clock millisecondClockValue! ! !DateAndTime methodsFor: 'arithmetic' stamp: 'CamilloBruni 8/22/2013 18:44' prior: 20346172! - operand "operand conforms to protocol DateAndTime or protocol Duration" ^ (operand respondsTo: #asDateAndTime) ifTrue: [ | lticks rticks | lticks := self asLocal ticks. rticks := operand asDateAndTime asLocal ticks. Duration seconds: (SecondsInDay *(lticks first - rticks first)) + (lticks second - rticks second) nanoSeconds: (lticks third - rticks third) ] ifFalse: [ self + (operand negated) ].! ! !CalendarMorph methodsFor: 'event handling' stamp: 'CamilloBruni 8/22/2013 19:49' prior: 18666979! handleMonthNameTouched | newMonthName dayCount dialog | newMonthName := UIManager default chooseDropList: 'Choose a month:' list: #('January' 'February' 'March' 'April' 'May' 'June' 'July' 'August' 'September' 'October' 'November' 'December'). newMonthName isNil ifTrue: [^self]. dayCount := (Month year: date year month: newMonthName) daysInMonth. self date: (Date year: date year month: newMonthName day: (date dayOfMonth min: dayCount)). self changed. ! ! !CalendarMorph methodsFor: 'event handling' stamp: 'CamilloBruni 8/22/2013 19:49' prior: 18668004! handleYearTouched | newYear dayCount | newYear := UIManager default chooseOrRequestFrom: (2000 to: 2020) lines: #() title: 'Choose a year:'. newYear isNil ifTrue: [^self]. newYear := newYear asNumber. dayCount := (Month year: newYear month: date monthIndex) daysInMonth. self date: (Date year: newYear month: date monthIndex day: (date dayOfMonth min: dayCount)). self changed.! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'CamilloBruni 8/22/2013 19:58' prior: 33548619! addSnapshotRecord: save andQuit: quit "Originally this code were in #snapshot:andQuit: . Just moved it to separate method to make caller more readable and don't look like swiss army knife which tries to do everything by own " | msg | (SourceFiles at: 2) ifNotNil: [ msg := String streamContents: [ :s | s nextPutAll: '----'; nextPutAll: (save ifTrue: [ quit ifTrue: [ 'QUIT' ] ifFalse: [ 'SNAPSHOT' ] ] ifFalse: [ quit ifTrue: [ 'QUIT/NOSAVE' ] ifFalse: [ 'NOP' ] ]); nextPutAll: '----'; print: Time dateAndTimeNow; space; nextPutAll: (self imageFile basename); nextPutAll: ' priorSource: '; print: LastQuitLogPosition ]. self assureStartupStampLogged. save ifTrue: [ LastQuitLogPosition := (SourceFiles at: 2) setToEnd; position ]. self logChange: msg. self traceCr: msg ]. ! ! !Time class methodsFor: 'instance creation' stamp: 'brp 8/23/2003 19:46' prior: 53153156! current ^ self now! ! !Time class methodsFor: 'accessing' stamp: 'nice 4/28/2013 00:44' prior: 36380565! dateAndTimeFromSeconds: secondCountSinceEpoch | dateAndTime | dateAndTime := DateAndTime fromSeconds: secondCountSinceEpoch. ^ Array with: dateAndTime asDate with: dateAndTime asTime! ! !Time class methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:50' prior: 53150414! dateAndTimeNow "Answer a two-element Array of (Date today, Time now)." ^ self dateAndTimeFromSeconds: self totalSeconds! ! !Time class methodsFor: 'instance creation' stamp: 'dtl 6/25/2009 07:43' prior: 53150613! fromSeconds: secondCount "Answer an instance of me that is secondCount number of seconds since midnight." | integerSeconds nanos | integerSeconds := secondCount truncated. integerSeconds = secondCount ifTrue: [nanos := 0] ifFalse: [nanos := (secondCount - integerSeconds * NanosInSecond) asInteger]. ^ self seconds: integerSeconds nanoSeconds: nanos ! ! !Time class methodsFor: 'instance creation' stamp: 'PeterHugossonMiller 9/2/2009 16:01' prior: 53153269! fromString: aString ^ self readFrom: aString readStream. ! ! !Time class methodsFor: 'instance creation' stamp: 'brp 8/23/2003 20:05' prior: 53153404! hour: hour minute: minute second: second "Answer a Time" ^ self hour: hour minute: minute second: second nanoSecond: 0! ! !Time class methodsFor: 'instance creation' stamp: 'brp` 8/24/2003 19:26' prior: 53153605! hour: hour minute: minute second: second nanoSecond: nanoCount "Answer a Time - only second precision for now" ^ self seconds: (hour * SecondsInHour) + (minute * SecondsInMinute) + second nanoSeconds: nanoCount! ! !Time class methodsFor: 'primitives' stamp: 'nice 4/28/2013 01:19' prior: 36380838! microsecondClockValue "Answer the number of microseconds since Squeak Epoch" ^self primUTCMicrosecondsClock ! ! !Time class methodsFor: 'accessing' stamp: 'nice 4/27/2013 23:13' prior: 36381026! microsecondsSince: lastTimeInMicroSeconds "Answer the elapsed time since last recorded in microseconds" ^self microsecondClockValue - lastTimeInMicroSeconds! ! !Time class methodsFor: 'instance creation' stamp: 'brp 8/23/2003 20:01' prior: 53153904! midnight ^ self seconds: 0 ! ! !Time class methodsFor: 'primitives' stamp: 'nk 3/8/2004 12:05' prior: 53148332! millisecondClockValue "Answer the number of milliseconds since the millisecond clock was last reset or rolled over. Answer 0 if the primitive fails." ^ 0! ! !Time class methodsFor: 'accessing' stamp: 'brp 8/23/2003 18:58' prior: 53154010! milliseconds: currentTime since: lastTime "Answer the elapsed time since last recorded in milliseconds. Compensate for rollover." | delta | delta := currentTime - lastTime. ^ delta < 0 ifTrue: [SmallInteger maxVal + delta] ifFalse: [delta] ! ! !Time class methodsFor: 'accessing' stamp: 'BP 3/30/2001 15:25' prior: 53154336! millisecondsSince: lastTime "Answer the elapsed time since last recorded in milliseconds. Compensate for rollover." ^self milliseconds: self millisecondClockValue since: lastTime! ! !Time class methodsFor: 'instance creation' stamp: 'brp 8/23/2003 20:01' prior: 53151048! new "Answer a Time representing midnight" ^ self midnight! ! !Time class methodsFor: 'instance creation' stamp: 'brp` 8/24/2003 19:26' prior: 53154600! noon ^ self seconds: (SecondsInDay / 2) ! ! !Time class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/3/2013 14:44' prior: 36637852! now "Answer a Time representing the time right now - this is a 24 hour clock." ^ self nowLocal! ! !Time class methodsFor: 'instance creation' stamp: 'nice 5/4/2013 00:42' prior: 36740879! nowLocal "Answer the time since midnight in local timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock. ^ self seconds: microSecondsToday // 1000000 + DateAndTime localTimeZone offset asSeconds \\ SecondsInDay nanoSeconds: microSecondsToday \\ 1000000 * 1000! ! !Time class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 5/3/2013 15:36' prior: 36664002! nowUTC "Answer the time since midnight in UTC timezone" | microSecondsToday | microSecondsToday := self primUTCMicrosecondsClock \\ MicrosecondsInDay. ^ self seconds: microSecondsToday // 1000000 nanoSeconds: microSecondsToday \\ 1000000 * 1000! ! !Time class methodsFor: 'primitives' stamp: 'brp 8/23/2003 22:01' prior: 53151182! primMillisecondClock "Primitive. Answer the number of milliseconds since the millisecond clock was last reset or rolled over. Answer zero if the primitive fails. Optional. See Object documentation whatIsAPrimitive." ^ 0! ! !Time class methodsFor: 'primitives' stamp: 'nice 4/28/2013 01:12' prior: 36382055! primSecondsClock "Answer the number of whole seconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC" ^self primUTCMicrosecondsClock // 1e6! ! !Time class methodsFor: 'primitives' stamp: 'nice 4/28/2013 01:22' prior: 36382311! primUTCMicrosecondsClock "Answer the number of micro-seconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC. At least a 60-bit unsigned integer is used internally which is enough for dates up to year 38435. Essential. See Object documentation whatIsAPrimitive. " self primitiveFailed! ! !Time class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 3/4/2013 23:43' prior: 33592097! readFrom: aStream "Read a Time from the stream in the form: ::. , or may be omitted. e.g. 1:59:30 pm; 8AM; 15:30" | hour minute second ampm nanos power | hour := Integer readFrom: aStream. minute := second := nanos := 0. (aStream peekFor: $:) ifTrue: [ minute := Integer readFrom: aStream. (aStream peekFor: $:) ifTrue: [ second := Integer readFrom: aStream. (aStream peekFor: $.) ifTrue: [ power := 1. [ aStream atEnd not and: [ aStream peek isDigit ] ] whileTrue: [ nanos := nanos * 10 + aStream next digitValue. power := power * 10 ]. nanos := nanos / power * 1000000000 ] ] ]. aStream skipSeparators. (aStream atEnd not and: [ 'APap' includes: aStream peek ]) ifTrue: [ ampm := aStream next asLowercase. (ampm = $p and: [ hour < 12 ]) ifTrue: [ hour := hour + 12 ]. (ampm = $a and: [ hour = 12 ]) ifTrue: [ hour := 0 ]. (aStream peekFor: $m) ifFalse: [ aStream peekFor: $M ] ]. ^ self hour: hour minute: minute second: second nanoSecond: nanos! ! !Time class methodsFor: 'instance creation' stamp: 'gk 8/31/2006 00:39' prior: 53154718! seconds: seconds "Answer a Time from midnight." ^ self basicNew ticks: (Duration seconds: seconds) ticks! ! !Time class methodsFor: 'instance creation' stamp: 'adrian_lienhard 1/7/2009 18:19' prior: 53154913! seconds: seconds nanoSeconds: nanoCount "Answer a Time from midnight." ^ self basicNew ticks: (Duration seconds: seconds nanoSeconds: nanoCount) ticks! ! !Time class methodsFor: 'accessing' stamp: 'nice 4/28/2013 01:21' prior: 36382748! totalSeconds "Answer the total seconds ellapsed since the Squeak epoch: 1 January 1901 00:00 UTC" ^ self primSecondsClock! ! !ScheduleTest methodsFor: 'coverage' stamp: 'brp 9/25/2003 16:03' prior: 32717024! classToBeTested ^ Schedule ! ! !ScheduleTest methodsFor: 'coverage' stamp: 'brp 9/25/2003 16:03' prior: 32717126! selectorsToBeIgnored | private | private := #( #printOn: ). ^ super selectorsToBeIgnored, private ! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32719227! testBetweenAndDoDisjointWithSchedule | count | count := 0. aSchedule between: (DateAndTime year: 2004 month: 4 day: 1) and: (DateAndTime year: 2004 month: 4 day: 30) do: [:each | count := count + 1]. self assert: count = 0! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32719554! testBetweenAndDoIncludedInSchedule | count | count := 0. aSchedule between: (DateAndTime year: 2003 month: 4 day: 1) and: (DateAndTime year: 2003 month: 4 day: 30) do: [:each | count := count + 1]. self assert: count = 8! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32719879! testBetweenAndDoOverlappingSchedule | count | count := 0. aSchedule between: (DateAndTime year: 2002 month: 12 day: 1) and: (DateAndTime year: 2003 month: 1 day: 31) do: [:each | count := count + 1]. self assert: count = 8! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32720206! testDateAndTimes | answer | self assert: aSchedule dateAndTimes size = 104. self assert: aSchedule dateAndTimes first = firstEvent. answer := true. aSchedule dateAndTimes do: [:each | (each dayOfWeekName = 'Saturday' or: [each dayOfWeekName = 'Sunday']) ifFalse: [^false]]. self assert: answer ! ! !ScheduleTest methodsFor: 'tests' stamp: 'PaulDeBruicker 10/27/2011 10:18' prior: 32720592! testDaysOfWeekAreConsistent | originalDayOfWeekSet modifiedDayOfWeekSet start end | originalDayOfWeekSet := (aSchedule dateAndTimes collect: [ :each | each dayOfWeek ]) asSet. start := DateAndTime year: 2003 month: 1 day: 5 hour: 20 minute: 30. end := DateAndTime year: 2003 month: 6 day: 4 hour: 20 minute: 30. modifiedDayOfWeekSet := OrderedCollection new. aSchedule between: start and: end do: [ :eachStart | modifiedDayOfWeekSet add: eachStart dayOfWeek ]. self assert: originalDayOfWeekSet equals: modifiedDayOfWeekSet asSet! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32721219! testExampleFromSwikiPage "It is often neccessary to schedule repeated events, like airline flight schedules, TV programmes, and file backups. Schedule is a Timespan which maintains an array of Durations. The durations specify the offset to the next scheduled DateAndTime. " "Consider a TV programme scheduled for 8:30pm every Saturday and Sunday for the current year. " "Find the first Saturday and set its time to 20h30" | sat shows | sat := Year current asMonth dates detect: [ :d | d dayOfWeekName = #Saturday ]. sat := sat start + (Duration hours: 20.5). "Create a schedule" shows := Schedule starting: sat ending: Year current end. shows schedule: { Duration days: 1. Duration days: 6 }. "To inspect:" shows dateAndTimes. shows dateAndTimes collect: [ :dt | dt dayOfWeekName ]. ! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 9/25/2003 16:08' prior: 32717300! testFromDateAndTime | oc1 oc2 | oc1 := OrderedCollection new. DateAndTime today to: DateAndTime tomorrow by: 10 hours do: [ :dt | oc1 add: dt ]. oc2 := { DateAndTime today. (DateAndTime today + 10 hours). (DateAndTime today + 20 hours) }. self assert: (oc1 asArray = oc2)! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32722091! testIncludes self assert: (aSchedule includes: (DateAndTime year: 2003 month: 6 day: 15 hour: 20 minute: 30 second: 0 offset: 0 hours)) ! ! !ScheduleTest methodsFor: 'tests' stamp: 'nk 3/30/2004 10:34' prior: 32717656! testMonotonicity | t1 t2 t3 t4 | t1 := DateAndTime now. t2 := DateAndTime now. t3 := DateAndTime now. t4 := DateAndTime now. self assert: ( t1 <= t2); assert: ( t2 <= t3); assert: ( t3 <= t4). ! ! !ScheduleTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:44' prior: 32722301! testSchedule self assert: aSchedule schedule size = 2. self assert: aSchedule schedule first = 1 days. self assert: aSchedule schedule second = 6 days. ! ! !DosTimestamp class methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 22:22' prior: 20965940! epoch ^ DateAndTime dosEpoch! ! !TimeTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53198699! testAddSeconds self assert: (aTime addSeconds: 1) = (Time readFrom: '12:34:57' readStream). self assert: (aTime addSeconds: 60) = (Time readFrom: '12:35:56' readStream). self assert: (aTime addSeconds: 3600) = (Time readFrom: '13:34:56' readStream). self assert: (aTime addSeconds: 24 * 60 * 60) = (Time readFrom: '12:34:56' readStream)! ! !TimeTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53199115! testAddTime self assert: (aTime addTime: aTime) = (Time readFrom: '01:09:52' readStream)! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199271! testAsDate self assert: (aTime asDate) = (Date current) ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199395! testAsDateAndTime self assert: (aTime asDateAndTime) = (DateAndTime current midnight + aTime) ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199557! testAsDuration self assert: (aTime asDuration) = (Duration days: 0 hours: 12 minutes: 34 seconds: 56) ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199727! testAsNanoSeconds self assert: (aTime asNanoSeconds) = 45296000000000 ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199866! testAsSeconds self assert: (aTime asSeconds) = 45296 ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53199987! testAsTime self assert: (aTime asTime) = aTime ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53200103! testAsTimeStamp self assert: (aTime asTimeStamp) = (DateAndTime current midnight + aTime) asTimeStamp ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53200273! testAsWeek self assert: aTime asWeek = (DateAndTime current midnight + aTime) asWeek ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53200426! testAsYear self assert: aTime asYear = (DateAndTime current midnight + aTime) asYear ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53200579! testDuration self assert: aTime duration = 0 seconds! ! !TimeTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/24/2010 12:24' prior: 53200711! testEqual "self debug: #testEqual" self assert: aTime = (Time readFrom: '12:34:56' readStream). self assert: aTime = (Time readFrom: '12:34:56.00' readStream). self assert: aTime = (Time readFrom: '12:34:56.0000' readStream)! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53201008! testHhmm24 self assert: aTime hhmm24 = '1234'! ! !TimeTest methodsFor: 'tests' stamp: 'nk 3/30/2004 09:42' prior: 53201120! testHour self assert: aTime hour = 12. self assert: aTime hour12 = 12. self assert: aTime hour24 = 12. self assert: aTime hours = 12.! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53201328! testHumanWordsForSecondsAgo self assert: (Time humanWordsForSecondsAgo: 0.999999999) = 'a second ago'. self assert: (Time humanWordsForSecondsAgo: 44.99999999) = '44.99999999 seconds ago'. self assert: (Time humanWordsForSecondsAgo: 89.999999999) = 'a minute ago'. self assert: (Time humanWordsForSecondsAgo: 2699.999999999) = '44 minutes ago'. self assert: (Time humanWordsForSecondsAgo: 5399.999999999) = 'an hour ago'. self assert: (Time humanWordsForSecondsAgo: 64799.999999999) = '17 hours ago'. ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53201921! testHumanWordsForSecondsAgoWithDays self assert: (Time humanWordsForSecondsAgo: 18 * 60 * 60) = 'yesterday'. self assert: (Time humanWordsForSecondsAgo: 24 * 60 * 60) = 'yesterday'. ! ! !TimeTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53202192! testLessThan self assert: aTime < (Time readFrom: '12:34:57' readStream)! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53202332! testMeridianAbbreviation self assert: aTime meridianAbbreviation = 'PM'. ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53202474! testMinute self assert: aTime minute = 34. self assert: aTime minutes = 34 ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53202620! testNanoSecond self assert: aTime nanoSecond = 0 "Right now all times all seconds" ! ! !TimeTest methodsFor: 'tests printing' stamp: 'brp 1/21/2004 18:52' prior: 53197126! testPrint24 self assert: aTime print24 = '12:34:56'! ! !TimeTest methodsFor: 'tests printing' stamp: 'damiencassou 5/30/2008 11:09' prior: 53197260! testPrint24On | cs rw | cs := '12:34:56' readStream. rw := ReadWriteStream on: ''. aTime print24: true on: rw. self assert: rw contents = cs contents! ! !TimeTest methodsFor: 'tests printing' stamp: 'damiencassou 5/30/2008 11:09' prior: 53197501! testPrint24OnWithPM | cs rw | cs := '12:34:56 pm' readStream. rw := ReadWriteStream on: ''. aTime print24: false on: rw. ^ self assert: rw contents = cs contents! ! !TimeTest methodsFor: 'tests printing' stamp: 'damiencassou 5/30/2008 11:09' prior: 53197754! testPrint24OnWithoutSeconds | cs rw | cs := '12:34:56' readStream. rw := ReadWriteStream on: ''. aTime print24: true showSeconds: true on: rw. self assert: rw contents = cs contents! ! !TimeTest methodsFor: 'tests printing' stamp: 'brp 1/21/2004 18:52' prior: 53198020! testPrintMinutes self assert: aTime printMinutes = '12:34 pm'! ! !TimeTest methodsFor: 'tests printing' stamp: 'damiencassou 5/30/2008 11:09' prior: 53198164! testPrintOn | cs rw | cs := '12:34:56 pm' readStream. rw := ReadWriteStream on: ''. aTime printOn: rw. self assert: rw contents = cs contents! ! !TimeTest methodsFor: 'tests' stamp: 'GabrielCalero 11/21/2009 12:20' prior: 53202783! testPrintStringNanos self assert: (Time hour: 15 minute: 15 second: 15 nanoSecond: (150 * 1000000)) printString = '3:15:15.15 pm'! ! !TimeTest methodsFor: 'tests printing' stamp: 'brp 8/23/2003 22:27' prior: 53198383! testPrinting self assert: time printString = '4:02:47 am'; assert: time intervalString = '4 hours 2 minutes 47 seconds'; assert: time print24 = '04:02:47'; assert: time printMinutes = '4:02 am'; assert: time hhmm24 = '0402'. ! ! !TimeTest methodsFor: 'tests input' stamp: 'StephaneDucasse 4/24/2010 12:33' prior: 53196188! testReadFrom "self debug: #testReadFrom" | string t | string := '4:02:47 am'. t := self timeClass readFrom: string readStream. self assert: time printString = t printString. ! ! !TimeTest methodsFor: 'tests input' stamp: 'JohanBrichau 8/26/2010 14:16' prior: 53196448! testReadFromWithError "self debug: #testReadFromWithError" | string | string := 'invalid'. self should: [self timeClass readFrom: string readStream] raise: Error. string := '0:invalid'. self should: [self timeClass readFrom: string readStream] raise: Error ! ! !TimeTest methodsFor: 'tests input' stamp: 'StephaneDucasse 4/24/2010 12:48' prior: 53196795! testReadFromWithNanos "self debug: #testReadFromWithNanos" #('4:02:47.5 am' '4:02:55.521 pm' "there is a bug with 520 instead of 521" ) do: [:each | | t | t := self timeClass readFrom: each readStream. self assert: t printString = each] ! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53202981! testSecond self assert: aTime second = 56. self assert: aTime seconds = 56 ! ! !TimeTest methodsFor: 'tests' stamp: 'StephaneDucasse 4/24/2010 19:39' prior: 53203139! testSeconds self assert: (Time readFrom: '20:33:14.321-05:00' readStream) asDuration seconds = 14! ! !TimeTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53203315! testStoreOn | cs rw | cs := '''12:34:56 pm'' asTime' readStream. rw := ReadWriteStream on: ''. aTime storeOn: rw. self assert: rw contents = cs contents! ! !TimeTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53203548! testSubtractTime self assert: (aTime subtractTime: aTime) = (Time readFrom: '00:00:00' readStream)! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53203714! testTicks self assert: aTime ticks = #(0 45296 0). self assert: aTime = (Time new ticks: #(0 45296 0))! ! !TimeTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:52' prior: 53203886! testTimeStamp self assert: aTime = aTime asTimeStamp asTime! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 8/26/2013 13:12' prior: 38764956! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [^#()]. "delete trailing period. This should be fixed in the Parser!!" data := aString trimRight: [ :char| char isSeparator or: [ char = $. ]]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [dataObjects := self class compiler evaluate: '{', data, '}'] on: SyntaxErrorNotification do: [:e | self inform: 'Syntax Error: ', e errorMessage. self contents: (e errorCode allButFirst allButLast). ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data in: Object notifying: nil) body statements select: [:each | each isReturn not]. dataStrings := statements collect:[:node | String streamContents: [:strm | (node isMessage) ifTrue: [strm nextPut: $(]. node formattedCode printOn: strm. (node isMessage) ifTrue: [strm nextPut: $)]]]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #()]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [resultArray := resultArray collect: [:expression | | newExp | newExp := expression. dataObjects first withIndexDo: [:lit :i | newExp := newExp copyReplaceAll: 'data', i printString with: (dataStrings at: i)]. newExp, ' --> ', dataStrings last ]]. ^ resultArray! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:14' prior: 20438306! testAsDate self assert: aDateAndTime asDate = 'January 1, 1970' asDate. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20438476! testAsDateAndTime self assert: aDateAndTime asDateAndTime = aDateAndTime ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20438647! testAsDuration self assert: aDateAndTime asDuration = 0 asDuration ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20438810! testAsLocal self assert: aDateAndTime asLocal = aDateAndTime. self assert: aDateAndTime asLocal = (aDateAndTime offset: aDateAndTime class localOffset) ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 19:43' prior: 20439061! testAsMonth self assert: aDateAndTime asMonth equals: (Month year: 1970 month: 'January'). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20439242! testAsNanoSeconds self assert: aDateAndTime asNanoSeconds = 0 asDuration asNanoSeconds ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:29' prior: 20439427! testAsSeconds self assert: aDateAndTime asSeconds = 2177452800 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20439587! testAsTime self assert: aDateAndTime asTime = Time midnight. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:16' prior: 20439744! testAsTimeStamp self assert: aDateAndTime asTimeStamp = (TimeStamp fromString: '1 January 1970 12:00 am').! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20439946! testAsUTC self assert: aDateAndTime asUTC = aDateAndTime ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:17' prior: 20440109! testAsWeek self assert: aDateAndTime asWeek = (Week starting: '12-31-1969' asDate). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:17' prior: 20440290! testAsYear self assert: aDateAndTime asYear = (Year starting: '01-01-1970' asDate). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20440472! testCurrent self deny: aDateAndTime = (DateAndTime current). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:17' prior: 20440629! testDateTime self assert: aDateAndTime = (DateAndTime date: '01-01-1970' asDate time: '00:00:00' asTime) ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20440830! testDay self assert: aDateAndTime day = DateAndTime new day ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:18' prior: 20440987! testDayMonthYearDo |iterations| iterations := 0. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | iterations := iterations + 1]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachYear]) = 1970. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachMonth]) = 1. self assert: (aDateAndTime dayMonthYearDo: [:eachDay :eachMonth :eachYear | eachDay]) = 1. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20441533! testDayOfMonth self assert: aDateAndTime dayOfMonth = 1. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:18' prior: 20441686! testDayOfWeek self assert: aDateAndTime dayOfWeek = 5. self assert: aDateAndTime dayOfWeekAbbreviation = 'Thu'. self assert: aDateAndTime dayOfWeekName = 'Thursday'. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20441950! testDayOfYear self assert: aDateAndTime dayOfYear = 1. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20442102! testDaysInMonth self assert: aDateAndTime daysInMonth = 31. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20442259! testDaysInYear self assert: aDateAndTime daysInYear = 365. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20442415! testDaysLeftInYear self assert: aDateAndTime daysLeftInYear = 364. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20442579! testDuration self assert: aDateAndTime duration = 0 asDuration. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:18' prior: 20442740! testEpoch self assert: aDateAndTime = '1970-01-01T00:00:00+00:00' asDateAndTime ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20442916! testFirstDayOfMonth self assert: aDateAndTime firstDayOfMonth = 1 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:19' prior: 20443079! testFromSeconds self assert: aDateAndTime = (DateAndTime fromSeconds: 2177452800). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:19' prior: 20443258! testFromString self assert: aDateAndTime = (DateAndTime fromString: ' 1970-01-01T00:00:00+00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1970-01-01T00:00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1970-01-01T00:00'). self assert: aDateAndTime = (DateAndTime fromString: ' 1970-01-01T00:00:00+00:00'). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:20' prior: 20443696! testHash self assert: aDateAndTime hash = (DateAndTime year: 1970 month: 1 day: 1) hash! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20443878! testHour self assert: aDateAndTime hour = aDateAndTime hour24. self assert: aDateAndTime hour = 0. self assert: aDateAndTime hour = aDateAndTime hours ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20444135! testHour12 self assert: aDateAndTime hour12 = DateAndTime new hour12. self assert: aDateAndTime hour12 = 12 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20444341! testIsLeapYear self deny: aDateAndTime isLeapYear ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:21' prior: 20444486! testJulianDayNumber self assert: aDateAndTime = (DateAndTime julianDayNumber: 2440588). self assert: aDateAndTime julianDayNumber = 2440588.! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20444723! testLessThan self assert: aDateAndTime < (aDateAndTime + '1:00:00:00'). self assert: aDateAndTime + -1 < aDateAndTime. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20444940! testMeridianAbbreviation self assert: aDateAndTime meridianAbbreviation = 'AM'. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:22' prior: 20445117! testMiddleOf self assert: (aDateAndTime middleOf: '2:00:00:00' asDuration) = (Timespan starting: '12-31-1969' asDate duration: 2 days). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20445353! testMidnight self assert: aDateAndTime midnight = aDateAndTime ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:30' prior: 20445512! testMinus self assert: aDateAndTime - aDateAndTime = '0:00:00:00' asDuration. self assert: aDateAndTime - '0:00:00:00' asDuration = aDateAndTime. self assert: aDateAndTime - aDuration = (DateAndTime year: 1969 month: 12 day: 30 hour: 21 minute: 56 second: 55 nanoSecond: 999999995 offset: 0 hours ). " I believe this Failure is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20446043! testMinute self assert: aDateAndTime minute = 0 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20446188! testMinutes self assert: aDateAndTime minutes = 0 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20446333! testMonth self assert: aDateAndTime month = 1. self assert: aDateAndTime monthAbbreviation = 'Jan'. self assert: aDateAndTime monthName = 'January'. self assert: aDateAndTime monthIndex = 1.! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20446622! testNanoSecond self assert: aDateAndTime nanoSecond = 0 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:23' prior: 20446775! testNoon self assert: aDateAndTime noon = '1970-01-01T12:00:00+00:00' asDateAndTime! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20446953! testNow self deny: aDateAndTime = (DateAndTime now). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 20:30' prior: 20447100! testOffset self assert: aDateAndTime offset = '0:00:00:00' asDuration. self assert: (aDateAndTime offset: '0:12:00:00') equals: '1970-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:23' prior: 20447371! testPlus self assert: aDateAndTime + '0:00:00:00' = aDateAndTime. self assert: aDateAndTime + 0 = aDateAndTime. self assert: aDateAndTime + aDuration = (DateAndTime year: 1970 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:23' prior: 20447846! testPrintOn | cs rw | cs := '1970-01-01T00:00:00+00:00' readStream. rw := ReadWriteStream on: ''. aDateAndTime printOn: rw. self assert: rw contents = cs contents. cs := 'a TimeZone(UTZ)' readStream. rw := ReadWriteStream on: ''. aTimeZone printOn: rw. self assert: rw contents = cs contents! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20448240! testSecond self assert: aDateAndTime second = 0 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20448385! testSeconds self assert: aDateAndTime seconds = 0 ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:24' prior: 20448532! testTicks self assert: aDateAndTime ticks = (DateAndTime julianDayNumber: 2440588) ticks. self assert: aDateAndTime ticks = #(2440588 0 0)! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20448767! testTicksOffset self assert: aDateAndTime = (aDateAndTime ticks: #(2415386 0 0) offset: DateAndTime localOffset). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:51' prior: 20448976! testTimeZone self assert: aDateAndTime timeZoneName = 'Universal Time'. self assert: aDateAndTime timeZoneAbbreviation = 'UTC' ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:31' prior: 20449201! testTo self assert: (aDateAndTime to: aDateAndTime) = ((DateAndTime year: 1970 month: 1 day: 1) to: (DateAndTime year: 1970 month: 1 day: 1)) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:27' prior: 20449533! testToBy self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days) = ((DateAndTime year: 1970 month: 1 day: 1) to: (DateAndTime year: 1970 month: 1 day: 1) + 10 days by: 5 days ) "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20449920! testToByDo "self assert: (aDateAndTime to: aDateAndTime + 10 days by: 5 days do: []) = " "MessageNotUnderstood: UndefinedObject>>starting:ending: where UndefinedObject is Timespan "! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20450199! testToday self deny: aDateAndTime = (DateAndTime today). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20450352! testTommorrow self assert: (DateAndTime today + 24 hours) = (DateAndTime tomorrow). self deny: aDateAndTime = (DateAndTime tomorrow). "MessageNotUnderstood: Date class>>starting:"! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'CamilloBruni 7/13/2012 16:36' prior: 20450632! testUtcOffset self assert: (aDateAndTime offset: '0:12:00:00') = '1970-01-01T12:00:00+12:00' asDateAndTime! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20450838! testYear self assert: aDateAndTime year = 1970. ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20450983! testYearDay self assert: aDateAndTime = (DateAndTime year: 1970 day: 1). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20451152! testYearDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1970 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20451365! testYearMonthDay self assert: aDateAndTime = (DateAndTime year: 1970 month: 1 day: 1). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20451548! testYearMonthDayHourMinuteSecond self assert: aDateAndTime = (DateAndTime year: 1970 month: 1 day: 1 hour: 0 minute: 0 second: 0). ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:28' prior: 20451775! testYearMonthDayHourMinuteSecondNanosSecondOffset self assert: aDateAndTime = (DateAndTime year: 1970 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset:0 hours ). self assert: ((DateAndTime year: 1 month: 1 day: 1 hour: 0 minute: 0 second: 0 nanoSecond: 0 offset: 0 hours ) + (Duration days: 1 hours: 2 minutes: 3 seconds: 4 nanoSeconds: 5) ) = (DateAndTime year: 1 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 0 hours ) " I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)"" I believe this is a bug in the nanosecond part of (DateAndTime >> year:month:day:hour:minute:second:nanoSecond:offset:)" ! ! !DateAndTimeUnixEpochTest methodsFor: 'tests' stamp: 'GabrielBarbuto 9/27/2010 10:13' prior: 20452591! testYesterday self deny: aDateAndTime = (DateAndTime yesterday). ! ! !TimeStampTest methodsFor: 'coverage' stamp: 'brp 7/27/2003 13:50' prior: 53187703! classToBeTested ^ self timestampClass! ! !TimeStampTest methodsFor: 'coverage' stamp: 'brp 1/30/2005 09:13' prior: 53187815! selectorsToBeIgnored | deprecated private special | deprecated := #(). private := #( #printOn: ). special := #(). ^ super selectorsToBeIgnored, deprecated, private, special.! ! !TimeStampTest methodsFor: 'running' stamp: 'brp 1/21/2004 18:41' prior: 53188069! setUp timestamp := self timestampClass date: ('1-10-2000' asDate) time: ('11:55:00 am' asTime). aTimeStamp := TimeStamp readFrom: '1-02-2004 12:34:56 am' readStream! ! !TimeStampTest methodsFor: 'running' stamp: 'brp 7/26/2003 21:53' prior: 53188309! tearDown timestamp := nil.! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:31' prior: 53188420! testAccessing | d t | d := '1-10-2000' asDate. t := '11:55:00 am' asTime. self assert: timestamp date asString = d asString; assert: timestamp time asString = t asString. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 7/26/2003 22:05' prior: 53188671! testArithmetic | ts | ts := timestamp minusDays: 123. "9 September 1999, 11:55 am" ts := ts minusSeconds: 1056. "9 September 1999, 11:37:24 am" ts := ts plusDays: 123. "10 January 2000, 11:37:24 am" ts := ts plusSeconds: 1056. "10 January 2000, 11:55 am" self assert: ts = timestamp. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 1/9/2004 06:34' prior: 53189045! testArithmeticAcrossDateBoundary | ts | ts := timestamp minusSeconds: ((11*3600) + (55*60) + 1). self assert: ts = ('1-9-2000 11:59:59 pm' asTimeStamp). ! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 3/12/2004 15:54' prior: 53189276! testComparing | ts1 ts2 ts3 c1 c2 le | ts1 := self timestampClass date: ('01-10-2000' asDate) time: ('11:55:00 am' asTime). ts2 := self timestampClass date: ('07-26-2003' asDate) time: ('22:09:45 am' asTime). ts3 := self timestampClass date: ('05-28-1972' asDate) time: ('04:31:14 pm' asTime). self assert: ts1 = timestamp; assert: ts1 hash = timestamp hash; assert: timestamp = timestamp copy; assert: ts1 < ts2; deny: ts1 < ts3. c1 := self timestampClass current. c2 := self timestampClass current. le := (c1 <= c2). self assert: le. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:33' prior: 53189917! testConverting | d t | d := '1-10-2000' asDate. t := '11:55:00 am' asTime. self assert: timestamp asSeconds = (d asSeconds + t asSeconds); assert: timestamp asDate asString = d asString; assert: timestamp asTime = t; assert: timestamp asTimeStamp == timestamp; assert: timestamp dateAndTime first asString = d asString; assert: timestamp dateAndTime second asString = t asString. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:33' prior: 53191315! testDate self assert: aTimeStamp date asString = '01-02-2004' asDate asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:34' prior: 53191477! testDateAndTime self assert: aTimeStamp dateAndTime first asString = '01-02-2004' asDate asString. self assert: aTimeStamp dateAndTime second asString = '00:34:56' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 8/23/2003 15:02' prior: 53190387! testFromString "This should signal an exception in 3.6beta as Time>>fromString: does not exist." self should: [ timestamp = (self timestampClass fromString: '1-10-2000 11:55:00 am') ] ! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 1/30/2005 09:12' prior: 53190646! testInstanceCreation self should: [ self timestampClass midnight asDuration = (0 hours) ]; should: [ self timestampClass noon asDuration = (12 hours) ]. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:35' prior: 53191745! testMinusDays self assert: (aTimeStamp minusDays: 5) dateAndTime first asString = '12-28-2003' asDate asString. self assert: (aTimeStamp minusDays: 5) dateAndTime second asString = '00:34:56' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:37' prior: 53192046! testMinusSeconds | dAndt | dAndt := (aTimeStamp minusSeconds: 34 * 60 + 56) dateAndTime. self assert: dAndt first asString = '01-02-2004' asDate asString. self assert: dAndt second asString = '00:00:00' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:39' prior: 53192355! testMinusSecondsOverMidnight | dAndt | dAndt := (aTimeStamp minusSeconds: 34 * 60 + 57) dateAndTime. self assert: dAndt first asString = '01-01-2004' asDate asString. self assert: dAndt second asString = '23:59:59' asTime asString "Bug The results are actual results are: #(1 January 2005 11:25:03 pm)"! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:40' prior: 53192750! testPlusDays | dAndt | dAndt := (aTimeStamp plusDays: 366) dateAndTime. self assert: dAndt first asString = '01-02-2005' asDate asString. self assert: dAndt second asString = '00:34:56' asTime asString ! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:41' prior: 53193047! testPlusSeconds | dAndt | dAndt := (aTimeStamp plusSeconds: 60 * 60) dateAndTime. self assert: dAndt first asString = '01-02-2004' asDate asString. self assert: dAndt second asString = '01:34:56' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/6/2010 20:44' prior: 53193352! testPlusSecondsOverMidnight | dAndt | dAndt := (aTimeStamp plusSeconds: 24 * 60 * 60 + 1) dateAndTime. self assert: dAndt first asString = '01-03-2004' asDate asString. self assert: dAndt second asString = '00:34:57' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53193675! testPrintOn | cs rw | cs := '2 January 2004 12:34:56 am' readStream. rw := ReadWriteStream on: ''. aTimeStamp printOn: rw. self assert: rw contents = cs contents! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 8/23/2003 15:02' prior: 53190876! testPrinting self assert: timestamp printString = '10 January 2000 11:55 am'. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'cbc 2/4/2004 21:18' prior: 53193912! testReadFromA1 |ts| ts := TimeStamp current. self assert: (ts = (TimeStamp fromString: ts asString)).! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 8/23/2003 17:47' prior: 53191029! testSorting | c1 c2 | c1 := self timestampClass current. c2 := self timestampClass current. self assert: (self timestampClass current) <= (self timestampClass current); assert: (c1 <= c2). ! ! !TimeStampTest methodsFor: 'tests' stamp: 'damiencassou 5/30/2008 11:09' prior: 53194098! testStoreOn | cs rw | cs := '''2 January 2004 12:34:56 am'' asTimeStamp' readStream. rw := ReadWriteStream on: ''. aTimeStamp storeOn: rw. self assert: rw contents = cs contents! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:41' prior: 53194352! testTime self assert: aTimeStamp time = '00:34:56' asTime! ! !TimeStampTest methodsFor: 'tests' stamp: 'brp 1/21/2004 18:41' prior: 53194483! testTimeStamp self assert: aTimeStamp = aTimeStamp asTimeStamp ! ! !TimeStampTest methodsFor: 'private' stamp: 'brp 7/27/2003 13:50' prior: 53194620! timestampClass ^ TimeStamp! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 18:50'! current ^ self starting: DateAndTime now! ! !Month class methodsFor: 'accessing' stamp: 'brp 7/27/2003 16:27' prior: 26569580! daysInMonth: indexOrName forYear: yearInteger | index | index := indexOrName isInteger ifTrue: [indexOrName] ifFalse: [self indexOfMonth: indexOrName]. ^ (DaysInMonth at: index) + ((index = 2 and: [Year isLeapYear: yearInteger]) ifTrue: [1] ifFalse: [0])! ! !Month class methodsFor: 'accessing' stamp: 'brp 8/23/2003 09:29' prior: 26569937! indexOfMonth: aMonthName 1 to: 12 do: [ :i | (aMonthName, '*' match: (MonthNames at: i)) ifTrue: [^i] ]. self error: aMonthName , ' is not a recognized month name'.! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:41'! month: month "Create a Month in the current year for the given . may be a number or a String with the name of the month." ^ self year: DateAndTime now year month: month ! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:37' prior: 26570309! month: month year: year ^ self year: year month: month! ! !Month class methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:02' prior: 26570182! nameOfMonth: anIndex ^ MonthNames at: anIndex.! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:42' prior: 26570634! readFrom: aStream | m y c | m := (ReadWriteStream with: '') reset. [(c := aStream next) isSeparator] whileFalse: [m nextPut: c]. [(c := aStream next) isSeparator] whileTrue. y := (ReadWriteStream with: '') reset. y nextPut: c. [aStream atEnd] whileFalse: [y nextPut: aStream next]. ^ self year: y contents asNumber month: (Month indexOfMonth: m contents) "Month readFrom: 'July 1998' readStream" ! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 18:53' prior: 26571123! starting: aDateAndTime duration: aDuration "Override - a each month has a defined duration" | start adjusted days | start := aDateAndTime asDateAndTime. adjusted := DateAndTime year: start year month: start month day: 1. days := self daysInMonth: adjusted month forYear: adjusted year. ^ super starting: adjusted duration: (Duration days: days)! ! !Month class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/22/2013 19:37'! year: year month: month "Create a Month for the given and . may be a number or a String with the name of the month. should be with 4 digits." ^ self starting: (DateAndTime year: year month: month day: 1) ! ! !TimespanDoSpanAYearTest methodsFor: 'tests' stamp: 'brp 1/16/2004 13:55' prior: 53222871! testMonthsDo | monthArray | monthArray := Array with: (Month starting: (DateAndTime year: 2004 day: 355) duration: 31 days) with: (Month starting: (DateAndTime year: 2005 day: 1) duration: 31 days) with: (Month starting: (DateAndTime year: 2005 day: 32) duration: 29 days) with: (Month starting: (DateAndTime year: 2005 day: 61) duration: 31 days). self assert: aTimespan months = monthArray! ! !TimespanDoSpanAYearTest methodsFor: 'tests' stamp: 'brp 1/16/2004 13:55' prior: 53223370! testNext self assert: aTimespan next = (Timespan starting: (DateAndTime year: 2005 month: 3 day: 26 hour: 0 minute: 0 second: 0) duration: aDuration)! ! !TimespanDoSpanAYearTest methodsFor: 'tests' stamp: 'brp 9/26/2004 19:06' prior: 53223658! testWeeksDo | weeks weekArray | weeks := aTimespan weeks. self assert: weeks size = ((aDuration days / 7.0) ceiling + 1). weekArray := OrderedCollection new. weekArray addLast: (Week starting: (DateAndTime year: 2004 month: 12 day: 19) duration: 7 days); addLast: (Week starting: (DateAndTime year: 2004 month: 12 day: 26) duration: 7 days). 2 to: 79 by: 7 do: [ :i | weekArray addLast: (Week starting: (DateAndTime year: 2005 day: i) duration: 7 days) ]. weekArray := weekArray asArray. self assert: aTimespan weeks = weekArray ! ! !TimespanDoSpanAYearTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 20:04' prior: 53224289! testYearsDo | yearArray | yearArray := Array with: (Year year: 2004) with: (Year year: 2005). self assert: aTimespan years equals: yearArray ! ! !YearTest methodsFor: 'coverage' stamp: 'brp 9/11/2003 14:31' prior: 55020890! classToBeTested ^ Year! ! DateTest removeSelector: #testLeapYear! DateTest removeSelector: #testDateAndTimeNow! Year class removeSelector: #leapYear:! Year class removeSelector: #current! Date class removeSelector: #leapYear:! Date class removeSelector: #dateAndTimeNow! "Kernel"! "KernelTests"! "Morphic-Base"! "Network-Mail"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(26 August 2013 1:43:35 pm) Pharo.image priorSource: 15582252! ----STARTUP----an Array(26 August 2013 1:59:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 August 2013 1:59:39 pm) Pharo-30343.image priorSource: 15761330! ----STARTUP----an Array(26 August 2013 4:06:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/26/2013 16:03' prior: 49136989! commentForCurrentUpdate ^ '6821 Inconsistent String>>asDate behaviour https://pharo.fogbugz.com/f/cases/6821 11446 recategorize compareWith:ifLesser:ifEqual:ifGreater: https://pharo.fogbugz.com/f/cases/11446 11431 #sorted: is broken for some collections https://pharo.fogbugz.com/f/cases/11431'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/26/2013 16:03'! script136 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.156.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.623.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1575.mcz KernelTests-MarcusDenker.552.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.76.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.26.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-StephaneDucasse.227.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.904.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.613.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1219.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/26/2013 16:03'! update30344 "self new update30344" self withUpdateLog: '6821 Inconsistent String>>asDate behaviour https://pharo.fogbugz.com/f/cases/6821 11446 recategorize compareWith:ifLesser:ifEqual:ifGreater: https://pharo.fogbugz.com/f/cases/11446 11431 #sorted: is broken for some collections https://pharo.fogbugz.com/f/cases/11431'. self loadTogether: self script136 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^self explicitRequirement ! ! !Trait method! unsortedCollection " retur a collection that is not yat sorted" ^self explicitRequirement! ! !Trait method! testSortUsingSortBlock | result tmp | result := self unsortedCollection sort: [:a :b | a>b]. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testSorted | result tmp | result := self unsortedCollection sorted. tmp := result at: 1. result do: [:each | self assert: each>=tmp. tmp:= each. ].! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !OrderedCollectionTest commentStamp: 'BG 1/10/2004 22:07' prior: 43362470! These test cases demonstrate addition of items into an OrderedCollection as well as item removal. Some of the assertions are quite complicated and use a lot of collection protocol. Such methods do not test one single method, but protocol in general.! !Magnitude methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 6/10/2013 17:49' prior: 39795734! compareWith: anotherMagnitude ifLesser: lesserBlock ifEqual: equalBlock ifGreater: greaterBlock self < anotherMagnitude ifTrue: lesserBlock ifFalse: [ self = anotherMagnitude ifTrue: equalBlock ifFalse: greaterBlock ]! ! !Date class methodsFor: 'importing' stamp: 'CamilloBruni 8/24/2013 13:36' prior: 46569713! readFrom: aStream "Read a Date from the stream in any of the forms: (15 April 1982; 15-APR-82; 15.4.82; 15APR82) (April 15, 1982; 4/15/82) -- (1982-04-15) (ISO8601)" | day month year parsedNumber prefix | aStream peek = $- ifTrue: [prefix := -1] ifFalse: [prefix := 1]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isDigit ifTrue: [ parsedNumber := (Integer readFrom: aStream) * prefix. (parsedNumber < 0 or: [parsedNumber > 31]) ifTrue: [year := parsedNumber]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isLetter ifTrue: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" month := (String new: 10) writeStream. [aStream peek isLetter] whileTrue: [month nextPut: aStream next]. month := month contents. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. parsedNumber ifNil: ["MM DD YY" day := Integer readFrom: aStream] ifNotNil: [ year ifNil: ["DD MM YY" day := parsedNumber]]] ifFalse: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" year ifNil: ["MM-DD-YY or DD-MM-YY" parsedNumber > 12 ifTrue: ["DD-MM-YY" Error signal: 'Month out of bounds: ', parsedNumber asString, '.'. day := parsedNumber. month := Month nameOfMonth: (Integer readFrom: aStream) ] ifFalse: ["MM-DD-YY" month := Month nameOfMonth: parsedNumber. day := Integer readFrom: aStream]] ifNotNil: ["YY-MM-DD" month := Month nameOfMonth: (Integer readFrom: aStream)]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. year ifNil: [year := Integer readFrom: aStream] ifNotNil: [day := Integer readFrom: aStream]. (year < 100 and: [year >= 0]) ifTrue: [ year < 69 ifTrue: [ year := 2000 + year] ifFalse: [year := 1900 + year]]. ^ self year: year month: month day: day ! ! !TSortTest methodsFor: 'as yet unclassified' stamp: 'DamienCassou 8/23/2013 10:27' prior: 52189179! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !OrderedCollectionTest commentStamp: 'BG 1/10/2004 22:07' prior: 49329360! These test cases demonstrate addition of items into an OrderedCollection as well as item removal. Some of the assertions are quite complicated and use a lot of collection protocol. Such methods do not test one single method, but protocol in general.! !OrderedCollectionTest methodsFor: 'requirements' stamp: '' prior: 46719974! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: '' prior: 46720509! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'DamienCassou 8/26/2013 15:59' prior: 46721035! element "Returns an object that can be added to the collection returned by #collection." ^ 5! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'DamienCassou 8/23/2013 10:28' prior: 49327641! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^ OrderedCollection new add: 1; add: 2; add: 3; add: 4; add: 5; yourself! ! !OrderedCollectionTest methodsFor: 'tests - as sorted collection' stamp: '' prior: 46721220! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46721557! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46721869! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46722155! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46722510! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46723022! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! !OrderedCollectionTest methodsFor: 'tests - copy' stamp: '' prior: 46723666! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46724153! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46724479! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46724887! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46725302! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46725688! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46726228! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46726741! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46727384! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46727746! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! !OrderedCollectionTest methodsFor: 'tests - index access' stamp: '' prior: 46728177! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! !OrderedCollectionTest methodsFor: 'tests - remove' stamp: '' prior: 46728796! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! !OrderedCollectionTest methodsFor: 'tests - remove' stamp: '' prior: 46729164! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !OrderedCollectionTest methodsFor: 'tests - puting with indexes' stamp: '' prior: 46729738! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! !OrderedCollectionTest methodsFor: 'requirements' stamp: 'DamienCassou 8/23/2013 10:30' prior: 49327773! unsortedCollection ^ OrderedCollection new add: 3; add: 1; add: 20; add: 4; add: 2; yourself! ! !AthensCairoText methodsFor: 'initialization' stamp: 'FernandoOlivero 3/30/2012 14:49' prior: 49134585! initialize super initialize. self beNormal; beSlantNormal. fontSize := 10.! ! !TSortable methodsFor: 'sorting' stamp: 'DamienCassou 8/23/2013 10:22' prior: 43678097! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self copy sort: aSortBlockOrNil! ! !AthensCairoMatrix methodsFor: 'private' stamp: 'IgorStasenko 5/31/2012 01:42' prior: 40514903! primLoadIdentity "initialize with identity transform" ^ self nbCall: #( void cairo_matrix_init_identity (AthensCairoMatrix * self ) )! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoText removeSelector: #nbLibraryNameOrHandle! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoMatrix removeSelector: #nbLibraryNameOrHandle! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoSurface removeSelector: #nbLibraryNameOrHandle! Array removeSelector: #sorted:! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self copy sort: aSortBlockOrNil! ! !Trait method! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison." ^self copy sort: aSortBlockOrNil! ! "Athens-Cairo"! "Collections-Sequenceable"! "Collections-Traits"! "CollectionsTests"! "Kernel"! "Tabs"! ----End fileIn----! ----QUIT----an Array(26 August 2013 4:06:27 pm) Pharo.image priorSource: 15761533! ----STARTUP----an Array(26 August 2013 4:18:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 August 2013 4:18:49 pm) Pharo-30344.image priorSource: 15792141! ----STARTUP----an Array(27 August 2013 10:06:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/27/2013 10:04' prior: 49316269! commentForCurrentUpdate ^ '11462 Wrong comment in testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses https://pharo.fogbugz.com/f/cases/11462 11463 RBRefactoringChangeTests >> #testAddMetaclassPattern takes too much time https://pharo.fogbugz.com/f/cases/11463 11460 TabModel>>closeable: is not working https://pharo.fogbugz.com/f/cases/11460'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/27/2013 10:04'! script137 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.156.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.623.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1575.mcz KernelTests-MarcusDenker.552.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.76.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-StephaneDucasse.373.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-MarcusDenker.229.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.904.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.615.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1219.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/27/2013 10:04'! update30345 "self new update30345" self withUpdateLog: '11462 Wrong comment in testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses https://pharo.fogbugz.com/f/cases/11462 11463 RBRefactoringChangeTests >> #testAddMetaclassPattern takes too much time https://pharo.fogbugz.com/f/cases/11463 11460 TabModel>>closeable: is not working https://pharo.fogbugz.com/f/cases/11460'. self loadTogether: self script137 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ReleaseTest methodsFor: 'testing' stamp: 'SebastianTleye 8/26/2013 17:21' prior: 49100372! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses "A class should not implement a method which it is already in one of its superclasses" | result | result := RBRepeteadMethodsInTheSuperclassRule new run. self assert: result isEmpty description: [ String streamContents: [ :stream | stream print: result; space; cr; print: (result result methods asSortedCollection: CompiledMethod sortBlock) ]]! ! !RBRefactoringChangeTests methodsFor: 'accessing' stamp: 'CamilloBruni 8/27/2013 02:41'! exampleClasses ^ { "Standard Classes" ProtoObject. Object. Class. Metaclass. Behavior. ClassDescription. Dictionary. Trait. "Lots of class vars" SmalltalkImage "" }! ! !RBRefactoringChangeTests methodsFor: 'accessing' stamp: 'CamilloBruni 8/27/2013 02:43'! exampleTraits ^ { TBehavior. TClass. TAssertable }! ! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'CamilloBruni 8/27/2013 02:40' prior: 31132337! testAddClassPattern "Make sure that all class definitions can be parsed." self exampleClasses do: [ :class | (class isObsolete or: [ class superclass notNil and: [ class superclass isObsolete ] ]) ifFalse: [ | change | change := changes defineClass: class definition. self assert: (change isKindOf: RBAddClassChange). self assert: (change changeClassName = class name). self assert: (class superclass isNil ifTrue: [ change definitionClass = ProtoObject ] ifFalse: [ change definitionClass = class superclass ]). self assert: (change instanceVariableNames = class instVarNames asArray). self assert: (change classVariableNames = class classVarNames asArray). self assert: (change poolDictionaryNames = class poolDictionaryNames asArray). self assert: (change category = class category). self universalTestFor: change ] ]! ! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'CamilloBruni 8/27/2013 02:41' prior: 31133300! testAddClassTraitPattern "Make sure that all class trait definitions can be parsed." self exampleTraits do: [ :trait | | change | change := changes defineClass: trait classTrait definition. self assert: (change isKindOf: RBAddClassTraitChange). self assert: (change changeClassName = trait name). self universalTestFor: change ]! ! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'CamilloBruni 8/27/2013 02:41' prior: 45990890! testAddMetaclassPattern "Make sure that metaclass definitions can be parsed." self exampleClasses do: [ :class | (class isObsolete or: [ class superclass notNil and: [ class superclass isObsolete ] ]) ifFalse: [ | change | change := changes defineClass: class class definition. self assert: (change isKindOf: RBAddMetaclassChange). self assert: change changeClassName equals: class name. self assert: change classInstanceVariableNames equals: class class instVarNames. self universalTestFor: change ]]! ! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'CamilloBruni 8/27/2013 02:42' prior: 31134255! testAddTraitPattern "Make sure that all trait definitions can be parsed." self exampleTraits do: [ :trait | | change | change := changes defineClass: trait definition. self assert: (change isKindOf: RBAddTraitChange). self assert: (change changeClassName = trait name). self assert: (change category = trait category). self universalTestFor: change ]! ! !TabModel class methodsFor: 'specs' stamp: 'MartinDias 8/26/2013 16:26' prior: 40134554! defaultSpec ^ SpecLayout new type: #Tab; send: #label: withArguments: #(#(model label)); send: #icon: withArguments: #(#(model icon)); send: #retrievingBlock: withArguments: #(#(model retrievingBlock)); send: #closeable: withArguments: #(#(model closeable)); send: #morph: withArguments: #(#(model morph)); send: #menu: withArguments: #(#(model menu)); send: #setActionsFrom: withArguments: #(#(model actionsBlock)); yourself! ! !TabModel methodsFor: 'morphic' stamp: 'MartinDias 8/26/2013 16:27'! closeable ^ closeable contents! ! "Refactoring-Tests-Changes"! "Spec-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(27 August 2013 10:06:28 am) Pharo.image priorSource: 15792344! ----STARTUP----an Array(27 August 2013 10:17:51 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 10:17:51 am) Pharo-30345.image priorSource: 15808135! ----STARTUP----an Array(27 August 2013 12:52:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/27/2013 12:50' prior: 49347081! commentForCurrentUpdate ^ '11452 Adding a trait to a composition makes too many changes to a class https://pharo.fogbugz.com/f/cases/11452 11426 Extract the logic that opens the .sources and .changes files https://pharo.fogbugz.com/f/cases/11426'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/27/2013 12:50'! script138 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.156.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.623.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.39.mcz Kernel-MarcusDenker.1575.mcz KernelTests-MarcusDenker.552.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.76.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-StephaneDucasse.126.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-StephaneDucasse.254.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.28.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.7.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-MarcusDenker.229.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.615.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1219.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/27/2013 12:50'! update30346 "self new update30346" self withUpdateLog: '11452 Adding a trait to a composition makes too many changes to a class https://pharo.fogbugz.com/f/cases/11452 11426 Extract the logic that opens the .sources and .changes files https://pharo.fogbugz.com/f/cases/11426'. self loadTogether: self script138 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PharoFilesOpener commentStamp: '' prior: 0! My role is to open the .sources and .changes files. My only public methods are in the 'public' protocol. The most important method is #checkAndOpenSourcesAndChanges.! !PharoFilesOpener commentStamp: '' prior: 49374190! My role is to open the .sources and .changes files. My only public methods are in the 'public' protocol. The most important method is #checkAndOpenSourcesAndChanges.! !PharoFilesOpener class methodsFor: 'singleton' stamp: 'DamienCassou 8/16/2013 10:04'! default ^ Default ifNil: [ Default := PharoFilesOpener new ]! ! !PharoFilesOpener class methodsFor: 'singleton' stamp: 'DamienCassou 8/16/2013 10:04'! reset Default := nil! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 11:28'! badContentMsg ^ '&fileRef has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.'! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 10:15'! cannotLocateMsg ^ 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 10:16'! cannotWriteMsg ^ 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:05'! changesName ^ Smalltalk changesName! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/18/2013 17:00'! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in the SourceFiles global variable." SourceFiles := Array with: self tryToOpenSources with: self tryToOpenChanges! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30'! inform: msg withChangesRef: fileRef self inform: msg withRef: 'the changes file named ' , fileRef! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 10:19'! inform: msg withRef: fileRef self inform: (msg copyReplaceAll: '&fileRef' with: fileRef)! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30'! inform: msg withSourceRef: fileRef self inform: msg withRef: 'the sources file named ' , fileRef! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 11:18'! informCannotLocateSources | msg | msg := self cannotLocateMsg. Smalltalk os isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: msg withSourceRef: self sourcesName! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30'! informProblemInChanges: msg self inform: msg withChangesRef: self changesName! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:06'! lastImagePath ^ Smalltalk lastImagePath! ! !PharoFilesOpener methodsFor: 'open changes' stamp: 'DamienCassou 8/16/2013 09:49'! openChanges: changesPath "find the changes file by looking in a) the directory derived from the image name b) the DefaultDirectory (which will normally be the directory derived from the image name or the SecurityManager's choice) If an old file is not found in either place, check for a read-only file in the same places. If that fails, return nil" | changesFile changesName | changesFile := changesPath asFileReference. changesName := changesFile basename. "look for the changes file or an alias to it in the image directory" (changesFile exists and: [ changesFile isWritable ]) ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the changes in the default directory" ((changesFile := FileSystem workingDirectory / changesName) exists and: [ changesFile isWritable ]) ifTrue: [ changesFile writeStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the image directory" (((changesFile := changesPath asFileReference) exists) and: [ changesFile isReadable ]) ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for read-only changes in the default directory" ((changesFile := FileSystem workingDirectory / changesName) exists and: [ changesFile isReadable ]) ifTrue: [ changesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "failed to open a changes file" ^ nil ! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:44'! openOrDownloadSources | sources | (sources := self openSources) ifNil: [ [ Smalltalk downloadSources "this method only exists when Zinc is loaded" ] on: MessageNotUnderstood do: [ ^ nil ]. sources := self openSources ]. ^ sources! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:38'! openSources ^ self openSources: self sourcesName forImage: self lastImagePath! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:10'! openSources: fullSourcesName forImage: imagePath "We first do a check to see if a compressed version ofthe sources file is present. Open the .sources file read-only after searching in: a) the directory where the VM lives b) the directory where the image came from c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it). " | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" (sourcesFile := Smalltalk vmDirectory / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. ^ nil ! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:34'! setInformAboutReadOnlyChanges "Make sure the user is informed when the .changes file can not be written to." shouldInformAboutReadOnlyChanges := true! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:33'! shouldInformAboutReadOnlyChanges "Answer true if and only if the user must be informed when the .changes file can not be written to." ^ shouldInformAboutReadOnlyChanges ifNil: [ shouldInformAboutReadOnlyChanges := true ]! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:07'! sourcesName ^ Smalltalk sourcesName! ! !PharoFilesOpener methodsFor: 'open changes' stamp: 'DamienCassou 8/16/2013 10:10'! tryToOpenChanges | changes | changes := self openChanges: self changesName. changes ifNil: [ self informProblemInChanges: self cannotLocateMsg. ^ nil ]. (changes isReadOnly and: [ self shouldInformAboutReadOnlyChanges ]) ifTrue: [ self informProblemInChanges: self cannotWriteMsg ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self informProblemInChanges: self badContentMsg ]. ^ changes! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 11:17'! tryToOpenSources | sources | sources := self openOrDownloadSources. ^ (sources isNil or: [ sources atEnd ]) ifTrue: [ self informCannotLocateSources. nil ] ifFalse: [ sources ]! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:34'! unsetInformAboutReadOnlyChanges "Make sure the user is *not* informed when the .changes file can not be written to." shouldInformAboutReadOnlyChanges := false! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'SebastianTleye 8/26/2013 16:23' prior: 43483439! recategorize: aClass to: newCategory | oldCategory | oldCategory := aClass category. oldCategory asSymbol == newCategory asSymbol ifTrue: [ ^ self ]. environment organization classify: aClass name under: newCategory. self systemAnnouncer class: aClass recategorizedFrom: oldCategory to: newCategory! ! !SmalltalkImage methodsFor: 'accessing' stamp: 'DamienCassou 8/15/2013 10:06'! lastImagePath ^ LastImagePath! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'DamienCassou 8/16/2013 10:05' prior: 50342351! openSourceFiles self imagePath = LastImagePath ifFalse: ["Reset the author full name to blank when the image gets moved" LastImagePath := self imagePath. Author fullName: '']. PharoFilesOpener default checkAndOpenSourcesAndChanges. SourceFileArray install! ! SmalltalkImage removeSelector: #openSources:forImage:! SmalltalkImage removeSelector: #openChanges:forImage:! SmalltalkImage removeSelector: #checkAndOpenSourcesAndChanges! "Slot"! "System-Support"! ----End fileIn----! ----QUIT----an Array(27 August 2013 12:52:23 pm) Pharo.image priorSource: 15808340! ----STARTUP----an Array(27 August 2013 1:03:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 1:03:37 pm) Pharo-30346.image priorSource: 15828767! ----STARTUP----an Array(27 August 2013 1:29:32 pm) as /Users/denker/Desktop/30346/Pharo-30346.image! ----End fileIn----! ----QUIT----an Array(27 August 2013 1:29:34 pm) Pharo-30346.image priorSource: 15828971! ----STARTUP----an Array(27 August 2013 1:35:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(27 August 2013 1:35:42 pm) Pharo.image priorSource: 15829189! ----STARTUP----an Array(27 August 2013 1:46:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 1:46:59 pm) Pharo-30346.image priorSource: 15829398! ----STARTUP----an Array(27 August 2013 3:30:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/27/2013 15:27' prior: 49363078! commentForCurrentUpdate ^ '11464 Switch RBPackageEnvironment to RPackage https://pharo.fogbugz.com/f/cases/11464 11449 Remove Time class >> #namesForTimes: https://pharo.fogbugz.com/f/cases/11449'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/27/2013 15:27'! script139 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.47.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.156.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.623.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.76.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.72.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.517.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-EstebanLorenzano.888.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.150.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.38.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.129.mcz Spec-Widgets-MarcusDenker.229.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.139.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.615.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1219.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.22.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/27/2013 15:27'! update30347 "self new update30347" self withUpdateLog: '11464 Switch RBPackageEnvironment to RPackage https://pharo.fogbugz.com/f/cases/11464 11449 Remove Time class >> #namesForTimes: https://pharo.fogbugz.com/f/cases/11449'. self loadTogether: self script139 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'system compatibility' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 42040801! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !RPackage methodsFor: 'system compatibility' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 31808653! includesMethodReference: aMethodRef self flag: 'includesMethod:ofClass: is not implemented for RPackage. Should fine fine a corresponding one '. self flag: #stef. "We can inline this one and replace it by selector and others." ^ self includesMethod: aMethodRef selector ofClass: aMethodRef actualClass "^ self includesDefinedSelector: aMethodRef selector ofClass: aMethodRef actualClass"! ! !RBBrowserEnvironmentTest methodsFor: 'testing-environments' stamp: 'CamilloBruni 8/27/2013 01:55' prior: 30352139! testCategoryEnvironment | aCategoryEnvironment | self skip: 'Use RBPackageEnvironment instead.'. aCategoryEnvironment := RBCategoryEnvironment onEnvironment: RBBrowserEnvironment new categories: #(#'Kernel-Objects'). self universalTestFor: aCategoryEnvironment. self assert: (aCategoryEnvironment implementorsOf: #printString) numberSelectors equals: 1! ! !RBBrowserEnvironmentTest methodsFor: 'testing-environments' stamp: 'CamilloBruni 8/27/2013 01:47' prior: 30355090! testPackageEnvironment | aPackageEnvironment | aPackageEnvironment := universalEnvironment forPackageNames: (Array with: 'Refactoring-Tests-Environment' with: 'Refactoring-Tests-Critics'). self universalTestFor: aPackageEnvironment. self assert: (aPackageEnvironment implementorsOf: #testPackageEnvironment) numberSelectors equals: 1! ! !HDTestCoverage methodsFor: 'private' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 23127059! flushCache reference selector flushCache. method flushCache! ! !HDTestCoverage methodsFor: 'actions' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 37299027! install reference actualClass methodDict at: reference selector put: self. self flushCache! ! !HDTestCoverage methodsFor: 'actions' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 37299224! uninstall reference actualClass methodDict at: reference selector put: method. self flushCache! ! !RBNotEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 8/27/2013 02:19' prior: 30873234! includesProtocol: aProtocol in: aClass ^(aClass organization protocolOrganizer getProtocolNamed: aProtocol ifNone: [ ^ false ]) methods anySatisfy: [ :selector | self includesSelector: selector in: aClass ]! ! !NECSelectorEntry methodsFor: 'private' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 27857308! findMethodWith: anECContext do: foundBlock ifAbsent: notfoundBlock | theClass result implementors | theClass := anECContext model theClass. result := theClass ifNil: [implementors := self systemNavigation allImplementorsOf: contents. implementors size == 1 ifTrue: [| ref | ref := implementors first. self lookupSelector: ref selector class: ref realClass] ifFalse: [^ notfoundBlock value: contents]] ifNotNil: [self lookupSelector: contents class: theClass]. ^ foundBlock value: result first value: result second! ! !HDCoverageReport methodsFor: 'private' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 46536850! methodsIn: aPackage aPackage ifNil: [ ^ #() ]. ^ aPackage methods reject: [ :method | (self ignoredSelectors includes: method selector) or: [ method compiledMethod isAbstract or: [ method compiledMethod refersToLiteral: #ignoreForCoverage ] ] ]! ! !RBCategoryEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 8/27/2013 01:54' prior: 30371886! numberSelectors | total | total := 0. self classesDo: [:each | self selectorsForClass: each do: [ :sel | total := total + 1 ]]. ^total! ! !RBPackageEnvironment class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/27/2013 01:39' prior: 43546131! onEnvironment: anEnvironment packageNames: aCollection ^ self onEnvironment: anEnvironment packages: (aCollection collect: [ :each | RPackageOrganizer default packageNamed: each ])! ! !RBPackageEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 8/27/2013 01:42' prior: 30887823! classesAndSelectorsDo: aBlock packages do: [ :package | package methods do: [ :method | (environment includesSelector: method selector in: method methodClass) ifTrue: [ aBlock value: method methodClass value: method selector ] ] ]! ! !RBPackageEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 8/27/2013 01:49' prior: 30890829! includesSelector: aSelector in: aClass ^ (environment includesSelector: aSelector in: aClass) and: [ self packages anySatisfy: [ :package | package includesSelector: aSelector ofClass: aClass ] ]! ! !RBPackageEnvironment methodsFor: 'printing' stamp: 'CamilloBruni 8/27/2013 01:36'! printOn: aStream self storeOn: aStream! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'CamilloBruni 8/27/2013 01:40' prior: 42006014! changeRecordForOverriddenMethod: aMethodReference | sourceFilesCopy method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. sourceFilesCopy := SourceFiles collect: [ :x | x isNil ifTrue: [ nil ] ifFalse: [ x readOnlyCopy ] ]. [ | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ] ensure: [ sourceFilesCopy do: [ :x | x notNil ifTrue: [ x close ] ] ]! ! !RBAndEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 8/27/2013 02:09' prior: 30229365! includesProtocol: aProtocol in: aClass ^ (environment includesProtocol: aProtocol in: aClass) and: [ andedEnvironment includesProtocol: aProtocol in: aClass ]! ! !RBAndEnvironment methodsFor: 'printing' stamp: 'CamilloBruni 8/27/2013 02:29'! printOn: aStream environment printOn: aStream. aStream nextPutAll: ' & '. andedEnvironment printOn: aStream.! ! Time class removeSelector: #namesForTimes:! Time class removeSelector: #humanWordsForSecondsAgo:! Time class removeSelector: #condenseBunches:! TimeTest removeSelector: #testSqueakInquiries! TimeTest removeSelector: #testHumanWordsForSecondsAgoWithDays! TimeTest removeSelector: #testHumanWordsForSecondsAgo! "HudsonBuildTools20"! "Kernel"! "KernelTests"! "NECompletion"! "RPackage-Core"! "Refactoring-Environment"! "Refactoring-Tests-Environment"! ----End fileIn----! ----QUIT----an Array(27 August 2013 3:30:27 pm) Pharo.image priorSource: 15829601! ----STARTUP----an Array(27 August 2013 3:41:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 3:41:11 pm) Pharo-30347.image priorSource: 15852186! ----STARTUP----an Array(27 August 2013 9:08:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/27/2013 21:02' prior: 49384337! commentForCurrentUpdate ^ '-issue 11467 Morph>>addDependent: bug fix. Thanks Igor Stasenko Address inspect too. https://pharo.fogbugz.com/default.asp?11467 - issue 11316 Add when:send:to: and deprecate on:do: https://pharo.fogbugz.com/default.asp?11316 - issue 11451 migrate on:do: users to when:do: https://pharo.fogbugz.com/default.asp?11'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/27/2013 21:02'! script140 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.49.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-MarcusDenker.156.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-EstebanLorenzano.275.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.623.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.77.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.519.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.74.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.131.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.615.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1220.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/27/2013 21:02'! update30348 "self new update30348" self withUpdateLog: '-issue 11467 Morph>>addDependent: bug fix. Thanks Igor Stasenko Address inspect too. https://pharo.fogbugz.com/default.asp?11467 - issue 11316 Add when:send:to: and deprecate on:do: https://pharo.fogbugz.com/default.asp?11316 - issue 11451 migrate on:do: users to when:do: https://pharo.fogbugz.com/default.asp?11'. self loadTogether: self script140 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'StephaneDucasse 8/22/2013 23:23' prior: 48001884! initialize prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak when: CurrentChangeSetChanged do: [:each | self updateTitle]. super initialize. self initializeAnnouncements. ! ! !Morph methodsFor: 'updating' stamp: 'IgorStasenko 8/27/2013 16:29' prior: 46284966! addDependent: anObject self announcer weak on: MorphChanged , MorphChangedWithArguments send: #handleUpdate: to: anObject. ^ anObject! ! !Morph methodsFor: 'updating' stamp: 'IgorStasenko 8/27/2013 16:25'! handleUpdate: aMorphChangedAnnouncement ^ aMorphChangedAnnouncement deliverTo: self! ! !Morph methodsFor: 'menus' stamp: 'IgorStasenko 8/26/2013 22:49' prior: 26780213! inspectInMorphic: evt Smalltalk tools inspect: self! ! !Morph methodsFor: 'announcements' stamp: 'StephaneDucasse 8/22/2013 23:38' prior: 26631999! onAnnouncement: anAnnouncement do: aValuable self announcer when: anAnnouncement do: aValuable.! ! !MessageBrowser methodsFor: 'initialization' stamp: 'StephaneDucasse 8/22/2013 23:30' prior: 48007107! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer weak when: WidgetBuilt do: [ self updateTitle. textModel text: textModel getText. ]! ! !UpdateStreamer methodsFor: 'public' stamp: 'StephaneDucasse 8/22/2013 23:35' prior: 54524188! updateWith: anUpdateBlock "Scan the update server for unassimilated updates. If upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point. If saveLocally is true, then save local copies of the update files on disc. If shouldApplyChanges is true, then absorb the updates into the current image. A file on the server called updates.list has the names of the last N update files. We look backwards for the first one we do not have, and start there" "* To add a new update: Name it starting with a new two-digit code. * Do not use %, /, *, space, or more than one period in the name of an update file. * The update name does not need to have any relation to the version name. * Figure out which versions of the system the update makes sense for. * Add the name of the file to each version's category below. * Put this file and the update file on all of the servers. * * To make a new version of the system: Pick a name for it (no restrictions) * Put # and exactly that name on a new line at the end of this file. * During the release process, fill in exactly that name in the dialog box. * Put this file on the server." "When two sets of updates need to use the same directory, one of them has a * in its serverUrls description. When that is true, the first word of the description is put on the front of 'updates.list', and that is the index file used." [[[ | pair failed loaded | pair := anUpdateBlock value. failed := pair first. loaded := pair second. failed ifNil: ["is OK" self feedback: (loaded printString ,' new update file(s) processed.')]] on: (Smalltalk globals at: #MCMergeOrLoadWarning ifAbsent: [ nil ]) do: [ :e| e resume: false ]] on: (Smalltalk globals at: #MCNoChangesException ifAbsent: [ nil ]) do: [ :e| e resume]] on: MCMergeResolutionRequest do: [ :request | request merger conflicts isEmpty ifTrue: [ request resume: true ] ifFalse: [ request pass ]].! ! !NewValueHolder methodsFor: 'announcements' stamp: 'StephaneDucasse 8/22/2013 23:31' prior: 28447320! whenChangedDo: aBlock | block | block := [:announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. announcer weak when: ValueChanged do: block! ! !Spotlight methodsFor: 'initialize' stamp: 'StephaneDucasse 8/22/2013 23:39' prior: 37830796! createSearchMorph | morph | morph := PluggableTextFieldMorph new on: self model text: #contents accept: #contents: readSelection: nil menu: nil; convertTo: String; alwaysAccept: true; acceptOnCR: true; autoAccept: true; getEnabledSelector: nil; font: Smalltalk ui theme textFont; cornerStyle: (Smalltalk ui theme textEntryCornerStyleIn: self); hResizing: #spaceFill; vResizing: #rigid; borderStyle: (BorderStyle inset width: 0); color: Color white ; selectionColor: Smalltalk ui theme selectionColor ; hideScrollBarsIndefinitely; extent: 24@(Smalltalk ui theme textFont height + 8); setBalloonText: nil. morph textMorph: (SpotlightTextMorphForFieldView new contents: ''; yourself). morph ghostText: 'Search class or method...'. morph on: #keyStroke send: #localHandleKeystroke: to: self. morph textMorph onAnnouncement: MorphLostFocus do: [ self delete ]. morph textMorph autoFit: true; wrapFlag: false; margins: (2@1 corner: 2@1). ^morph! ! !MorphChanged methodsFor: 'delivering' stamp: 'IgorStasenko 8/27/2013 16:27'! deliverTo: aHandler ^ aHandler update: selector ! ! !NewListModel methodsFor: 'protocol-events' stamp: 'StephaneDucasse 8/22/2013 23:31' prior: 36254743! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer weak when: ValueChanged do: block! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'StephaneDucasse 8/22/2013 23:21' prior: 17285038! addNewGroup [ self groupsManager createAnEmptyStaticGroup ] on: GroupAlreadyExists do:[ :ex | self alertGroupExisting: ex ]! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'StephaneDucasse 8/22/2013 23:21' prior: 17285918! addPackagesAsGroups [ self addPackagesAsGroups: self selectedPackages ] on: GroupAlreadyExists do: [:ex | self alertGroupExisting: ex groupName ]! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'StephaneDucasse 8/22/2013 23:32' prior: 45537150! initializeWidgets self instantiateModels: #( text TextModel ). text announcer when: WidgetBuilt do: [ :builtAnnouncement | builtAnnouncement widget announcer when: PaneScrolling do: [ :scrollAnnouncement | self syncMorphPosition ] ]. text text: self loremIpsum.! ! !UITheme methodsFor: 'services' stamp: 'StephaneDucasse 8/22/2013 23:34' prior: 54075968! chooseColorIn: aThemedMorph title: aString color: aColor for: aBlock "execute block with result of a color selector dialog with the given title and initial color." |d newColor| d := (ColorSelectorDialogWindow newWithTheme: aThemedMorph theme) title: aString; selectedColor: aColor. d extent: d initialExtent. d announcer when: ColorChanged do: [:ann | aBlock value: ann newColor]. d openInHand. self runModal: d. newColor := d cancelled ifTrue: [aColor] ifFalse: [d selectedColor]. aBlock value: newColor.! ! !WindowAnnouncementTest methodsFor: 'window change' stamp: 'StephaneDucasse 8/22/2013 23:33' prior: 54907805! testCollapsing | t | window := SystemWindow labelled: 'foo'. t := 0. window openInWorld. window announcer when: WindowCollapsed do: [:ann | t := t + 1]. self assert: (t = 0). window collapse. self assert: (t = 1). ! ! !WindowAnnouncementTest methodsFor: 'window change' stamp: 'StephaneDucasse 8/22/2013 23:33' prior: 54908125! testMoving | t oldBounds event | window := SystemWindow labelled: 'foo'. t := 0. event := nil. window openInWorld. oldBounds := window bounds. window announcer when: WindowMoved do: [:ann | t := t + 1. event := ann]. self assert: (t = 0). self assert: (event isNil). "We move the window" window position: 50@50. self assert: (t = 1). self assert: (event oldPosition = oldBounds origin). self assert: (event newPosition = (50@50 )). "We call position: without moving it actually, nothing should happen" window position: 50@50. self assert: (t = 1). "If we simply resize the window, nothing should happen as well" window extent: 50@60. self assert: (t = 1). ! ! !WindowAnnouncementTest methodsFor: 'window change' stamp: 'StephaneDucasse 8/22/2013 23:33' prior: 54908916! testResizing | t oldBounds newBounds | window := SystemWindow labelled: 'foo'. t := 0. window openInWorld. oldBounds := window bounds. window announcer when: WindowResizing do: [:ann | t := t + 1]. self assert: (t = 0). window extent: 50@60. newBounds := window bounds. self assert: (t = 1). ! ! !WindowAnnouncementTest methodsFor: 'window creation and deletion' stamp: 'StephaneDucasse 8/22/2013 23:33' prior: 54909897! testResizingClosing | coll | window := SystemWindow labelled: 'foo'. coll := OrderedCollection new. window openInWorld. window announcer when: WindowAnnouncement do: [:ann | coll add: ann]. self assert: (coll isEmpty). window minimizeOrRestore. "Resizing, moving, collapsing " self assert: (coll size = 3). self assert: (coll first isResized). self assert: (coll second isMoved). self assert: (coll third isCollapsed). window delete. self assert: (coll size = 4). self assert: (coll fourth isClosed). window := nil! ! !WindowAnnouncementTest methodsFor: 'window change' stamp: 'StephaneDucasse 8/22/2013 23:33' prior: 36440072! testScrolling "This test tests the scrolling values of a scrollpane. We create a reeeeeally big (enormous) morph, to be sure its size is bigger than the screen and therefore its enclosing window has scrollbars. When screen sizes become bigger, you should increase the value, or fix morphic, what happens first :). " | myMorph pane t | window := SystemWindow labelled: 'foo'. myMorph := Morph new. myMorph extent: 10000000000@1000000000. pane := ScrollPane new. pane scroller addMorph: myMorph. window addMorph: pane fullFrame: LayoutFrame identity. t := 0 @ 0. window openInWorld. window announcer when: WindowScrolling do: [:ann | t := t + ann step ]. pane hScrollBarValue: 10. pane vScrollBarValue: 5. window delete. self assert: (t = (10 @ 5)). window := nil! ! !WindowAnnouncementTest methodsFor: 'window creation and deletion' stamp: 'StephaneDucasse 8/22/2013 23:34' prior: 54910544! testWindowCreation | t oldBounds newBounds | t := 0. World announcer when: WindowResizing do: [:ann | t := t + 1]. window := SystemWindow labelled: 'foo'. window openInWorld. oldBounds := window bounds. window announcer when: WindowResizing do: [:ann | t := t + 1]. self assert: (t = 0). window extent: 50@60. newBounds := window bounds. self assert: (t = 1). ! ! !WindowAnnouncementTest methodsFor: 'window creation and deletion' stamp: 'StephaneDucasse 8/22/2013 23:34' prior: 54911026! testWindowCreationAndDeletion | t newWindowCreated | t := 0. World announcer when: WindowOpened do: [:ann | t := t + 1. newWindowCreated := ann window]. World announcer when: WindowClosed do: [:ann | t := t + 10. newWindowCreated := ann window]. window := SystemWindow labelled: 'foo'. window openInWorld. self assert: (t = 1). self assert: (window == newWindowCreated). window delete. self assert: (t = 11). self assert: (window == newWindowCreated). ! ! !WindowAnnouncementTest methodsFor: 'window creation and deletion' stamp: 'StephaneDucasse 8/22/2013 23:34' prior: 54911602! testWindowLabelling "Test change of label for a window." | labels win | labels := #(). World announcer when: WindowLabelled do: [:ann | win := ann window. labels := labels copyWith: ann label]. window := SystemWindow labelled: 'foo'. window openInWorld. self assert: win = window. self assert: labels = #('foo'). window setLabel: 'bar'. self assert: win = window. self assert: labels = #('foo' 'bar')! ! !ListComposableModel methodsFor: 'protocol-events' stamp: 'StephaneDucasse 8/22/2013 23:29' prior: 24509919! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer weak when: ValueChanged do: block! ! !Announcer methodsFor: 'deprecated' stamp: 'StephaneDucasse 8/22/2013 23:00' prior: 17575262! on: anAnnouncementClass do: aValuable "This method is deprecated!! Declare that when anAnnouncementClass is raised, aValuable is executed." ^ self when: anAnnouncementClass do: aValuable! ! !Announcer methodsFor: 'deprecated' stamp: 'StephaneDucasse 8/22/2013 23:01' prior: 39347830! on: anAnnouncementClass send: aSelector to: anObject "This method is deprecated!! Use when:send:to:. Declare that when anAnnouncementClass is raised, anObject should receive the message aSelector. When the message expects one argument (eg #fooAnnouncement:) the announcement is passed as argument. When the message expects two arguments (eg #fooAnnouncement:announcer:) both the announcement and the announcer are passed as argument" ^ self when: anAnnouncementClass send: aSelector to: anObject! ! !Announcer methodsFor: 'convenience' stamp: 'StephaneDucasse 8/22/2013 22:59'! when: anAnnouncementClass send: aSelector to: anObject "Declare that when anAnnouncementClass is raised, anObject should receive the message aSelector. When the message expects one argument (eg #fooAnnouncement:) the announcement is passed as argument. When the message expects two arguments (eg #fooAnnouncement:announcer:) both the announcement and the announcer are passed as argument" ^ self subscribe: anAnnouncementClass send: aSelector to: anObject! ! !BasicCommandLineHandler methodsFor: 'activation' stamp: 'StephaneDucasse 8/22/2013 23:21' prior: 39317594! activate [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments| arguments first ])] on: Exit do: [ :exit | ^ self handleExit: exit ]! ! !MorphChangedWithArguments methodsFor: 'delivering' stamp: 'IgorStasenko 8/27/2013 16:28'! deliverTo: aHandler ^ aHandler update: selector with: arguments ! ! "Announcements-Core"! "Morphic-Base"! "MorphicTests"! "Nautilus"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Examples"! "Spec-Tools"! "Spec-Widgets"! "System-CommandLine"! "Tools"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(27 August 2013 9:08:36 pm) Pharo.image priorSource: 15852389! ----STARTUP----an Array(27 August 2013 9:18:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 9:18:54 pm) Pharo-30348.image priorSource: 15878628! ----STARTUP----an Array(27 August 2013 10:13:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/27/2013 22:04' prior: 49407128! commentForCurrentUpdate ^ '- issue 11316 Add when:send:to: and deprecate on:do: Added more comments and when:do:for: as suggested by Henrik. https://pharo.fogbugz.com/default.asp?11316 - issue 11466 Speed up Refactoring-Tests-Core. Thanks Camillo Bruni. https://pharo.fogbugz.com/default.asp?11466 - issue 5331 MorphThreeModel>>#setPageSize: https://pharo.fogbugz.com/default.asp?5331 - issue 11469 2 small sorting fixes needed https://pharo.fogbugz.com/default.asp?11469'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/27/2013 22:05'! script141 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-StephaneDucasse.513.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.78.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.519.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.389.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.56.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.17.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.131.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.615.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1220.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/27/2013 22:06'! update30349 "self new update30349" self withUpdateLog: '- issue 11316 Add when:send:to: and deprecate on:do: Added more comments and when:do:for: as suggested by Henrik. https://pharo.fogbugz.com/default.asp?11316 - issue 11466 Speed up Refactoring-Tests-Core. Thanks Camillo Bruni. https://pharo.fogbugz.com/default.asp?11466 - issue 5331 MorphThreeModel>>#setPageSize: https://pharo.fogbugz.com/default.asp?5331 - issue 11469 2 small sorting fixes needed https://pharo.fogbugz.com/default.asp?11469'. self loadTogether: self script141 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^self explicitRequirement ! ! !Trait method! unsortedCollection " retur a collection that is not yat sorted" ^self explicitRequirement! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !Trait method! testIsSortedBy self assert: (self sortedInAscendingOrderCollection isSortedBy: [:a :b | ab]). ! ! !Trait method! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^self explicitRequirement ! ! !Trait method! unsortedCollection " retur a collection that is not yat sorted" ^self explicitRequirement! ! !Trait method! testSortedUsingBlock | result tmp | result := self unsortedCollection sorted: [:a :b | a>b].. tmp := result at: 1. result do: [:each | self assert: each<=tmp. tmp:= each. ].! ! !Trait method! testSorted | result tmp unsorted | unsorted := self unsortedCollection. result := unsorted sorted. self deny: unsorted == result. tmp := result at: 1. result do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self shouldnt: [ self unsortedCollection ]raise: Error. self unsortedCollection do:[:each | each isNumber]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false]. ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self shouldnt: [ self sortedInAscendingOrderCollection ]raise: Error. self sortedInAscendingOrderCollection do:[:each | each isNumber]. tmp:= self sortedInAscendingOrderCollection at:1. self sortedInAscendingOrderCollection do: [: each | self assert: (each>= tmp). tmp:=each] ! ! !Trait method! testIsSorted self assert: self sortedInAscendingOrderCollection isSorted. self deny: self unsortedCollection isSorted! ! !SymbolTest commentStamp: '' prior: 42717038! This is the unit test for the class Symbol. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !RBAbstractClassVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35767686! setUp super setUp. model := self abstractVariableTestData.! ! !RBAddMethodTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35771981! setUp super setUp. model := self abstractVariableTestData.! ! !RBTemporaryToInstanceVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:06' prior: 38945608! setUp super setUp. model := self abstractVariableTestData.! ! !RBAddParameterTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:06' prior: 35768387! setUp super setUp. model := self abstractVariableTestData.! ! !RBRefactoringTest methodsFor: 'private' stamp: 'StephaneDucasse 8/27/2013 21:56' prior: 31151533! abstractVariableTestData | newModel classEnvironment classes | classes := #(#Bar #Foo) inject: OrderedCollection new into: [ :sum :each | Smalltalk globals at: each ifPresent: [ :class | sum add: class; add: class class ]. sum ]. classEnvironment := RBClassEnvironment classes: classes. newModel := RBNamespace onEnvironment: classEnvironment not. newModel name: 'Test'. #('Object subclass: #Foo instanceVariableNames: ''instVarName1 instVarName2'' classVariableNames: ''ClassVarName1 ClassVarName2 '' poolDictionaries: '''' category: ''Testing'' ' 'Foo subclass: #Bar instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''Testing'' ' ) do: [ :each | newModel defineClass: each ]. #(#(#Bar #( #('instVarName1 ^1242321' #tests) #('foo instVarName1 := instVarName1 + instVarName2 + ClassVarName1' #tests))) #(#Foo #( #('foo ^instVarName2 := 3' #tests) #('bar "Add one to instVarName1" instVarName1 := instVarName1 + 1' #tests) #('classVarName1 ^ClassVarName1' #tests) #('instVarName1: anObject ^anObject' #tests) #('asdf ^self classVarName1: (ClassVarName1 := ClassVarName1 + 1)' #tests) #('instVarName2 ^instVarName2' #tests) #('instVarName2: anObject instVarName2 := anObject' #tests) #('classVarName1: anObject ^ClassVarName1 := anObject' #tests))) #('Bar class' #( #('classVarName2: anObject ClassVarName2 := anObject' #tests) #('classVarName2 ^ClassVarName2' #tests))) #('Foo class' #( #('foo ^ClassVarName1 := ClassVarName1 * ClassVarName1 * ClassVarName1' #tests)))) do: [:each | | class | class := newModel classNamed: each first. each last do: [ :methodPair | class compile: methodPair first classified: methodPair last]]. ^ newModel! ! !RBAddClassVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35769807! setUp super setUp. model := self abstractVariableTestData.! ! !Interval methodsFor: 'sorting' stamp: 'DamienCassou 8/27/2013 21:00'! sorted ^ self increment >= 0 ifTrue: [ self copy ] ifFalse: [ self last to: self first by: self increment negated ]! ! !Interval methodsFor: 'sorting' stamp: 'DamienCassou 8/27/2013 21:00'! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison. We convert the interval to an array because intervals can't be changed." ^self asArray sort: aSortBlockOrNil! ! !Symbol methodsFor: 'sorting' stamp: 'DamienCassou 8/27/2013 21:06'! sorted: aSortBlockOrNil "Return a new sequenceable collection which contains the same elements as self but its elements are sorted by aSortBlockOrNil. The block should take two arguments and return true if the first element should preceed the second one. If aSortBlock is nil then <= is used for comparison. We convert the symbol to an array because symbols can't be changed." ^self asArray sort: aSortBlockOrNil! ! !RBAbstractInstanceVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35771078! setUp super setUp. model := self abstractVariableTestData.! ! !IntervalTest methodsFor: 'requirements' stamp: 'DamienCassou 8/27/2013 20:58' prior: 49445333! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^ anotherCollection! ! !IntervalTest methodsFor: 'requirements' stamp: 'DamienCassou 8/27/2013 20:58' prior: 49445465! unsortedCollection " retur a collection that is not yat sorted" ^ (10 to: 1 by: -2)! ! !SymbolTest commentStamp: '' prior: 49448640! This is the unit test for the class Symbol. Unit tests are a good way to exercise the functionality of your system in a repeatable and automatic manner. They are therefore recommended if you plan to release anything. For more information, see: - http://www.c2.com/cgi/wiki?UnitTest - there is a chapter in the PharoByExample book (http://pharobyexample.org/) - the sunit class category! !SymbolTest methodsFor: 'requirements' stamp: 'DamienCassou 8/27/2013 21:05' prior: 49447062! sortedInAscendingOrderCollection " return a collection sorted in an acsending order" ^ collectionSize4 ! ! !SymbolTest methodsFor: 'requirements' stamp: 'DamienCassou 8/27/2013 21:05' prior: 49447194! unsortedCollection " retur a collection that is not yat sorted" ^ with2timeSubcollection! ! !PaginatedMorphTreeModel methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2013 16:20'! chunkSize: anIntegerOrNil self setPageSize: anIntegerOrNil. self changed: #chunkSize ! ! !PaginatedMorphTreeModel methodsFor: 'accessing' stamp: 'MarcusDenker 8/27/2013 16:20'! pageSize: anIntegerOrNil self setPageSize: anIntegerOrNil. self changed: #pageSize ! ! !RBAddClassTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35773023! setUp super setUp. model := self abstractVariableTestData.! ! !RBCreateAccessorsForVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:06' prior: 35770001! setUp super setUp. model := self abstractVariableTestData.! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/27/2013 21:49' prior: 48020256! on: anAnnouncementClass do: aValuable "Do not use this message on announcer weak. We did not deprecated this method because it may break some behavior." ^ self subscribe: anAnnouncementClass do: aValuable! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/27/2013 21:50' prior: 48020510! subscribe: anAnnouncementClass do: aValuable "Do not use this message on weak announcer because it does not work. The block will hold strongly the receiver and more. We need ephemerons for that'" "aValuable isBlock ifTrue: [ self error: 'Do not use this message on weak and block because it does not work. We need ephemerons for that']." ^ announcer basicSubscribe: ( WeakAnnouncementSubscription new announcer: announcer; announcementClass: anAnnouncementClass; valuable: aValuable)! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/27/2013 21:49' prior: 54846076! when: anAnnouncementClass do: aValuable "Do not use this message on announcer weak. We did not deprecated this method because it may break some behavior." ^ self subscribe: anAnnouncementClass do: aValuable! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'StephaneDucasse 8/27/2013 21:51'! when: anAnnouncementClass send: aSelector to: anObject ^ self subscribe: anAnnouncementClass send: aSelector to: anObject! ! !Announcer methodsFor: 'deprecated' stamp: 'StephaneDucasse 8/27/2013 21:52' prior: 49431018! on: anAnnouncementClass do: aValuable "This method is deprecated!! Declare that when anAnnouncementClass is raised, aValuable is executed. In addition pay attention that ushc method as well as when:do: should not be used on weak announcer since the block holds the receiver and more strongly." ^ self when: anAnnouncementClass do: aValuable! ! !Announcer methodsFor: 'convenience' stamp: 'StephaneDucasse 8/27/2013 21:52' prior: 17575817! when: anAnnouncementClass do: aValuable "Declare that when anAnnouncementClass is raised, aValuable is executed. Pay attention that ushc method as well as when:do: should not be used on weak announcer since the block holds the receiver and more strongly." ^ self subscribe: anAnnouncementClass do: aValuable! ! !Announcer methodsFor: 'convenience' stamp: 'StephaneDucasse 8/27/2013 21:47'! when: anAnnouncementClass do: aValuable for: aSubscriber "Declare that when anAnnouncementClass is raised, aValuable is executed and define the subscriber." ^ (self subscribe: anAnnouncementClass do: aValuable) subscriber: aSubscriber; yourself! ! !RBPushDownMethodTest methodsFor: 'failure tests' stamp: 'CamilloBruni 8/27/2013 15:18' prior: 31099439! testPushDownMethodOnNonAbstractClass | refactoring | refactoring := RBPushDownMethodRefactoring pushDown: #(#isArray) from: Array. self shouldFail: refactoring! ! !RBAddInstanceVariableTest methodsFor: 'set up' stamp: 'CamilloBruni 8/27/2013 15:05' prior: 35770188! setUp super setUp. model := self abstractVariableTestData.! ! MorphTreeModel removeSelector: #pageSize:! MorphTreeModel removeSelector: #chunkSize:! "Announcements-Core"! "Collections-Sequenceable"! "Collections-Strings"! "CollectionsTests"! "Morphic-Base"! "Refactoring-Tests-Core"! ----End fileIn----! ----QUIT----an Array(27 August 2013 10:13:29 pm) Pharo.image priorSource: 15878831! ----STARTUP----an Array(27 August 2013 10:23:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 August 2013 10:23:46 pm) Pharo-30349.image priorSource: 15904008! ----STARTUP----an Array(28 August 2013 11:09:19 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 11:06' prior: 49433571! commentForCurrentUpdate ^ '11477 RBRepeteadMethodsInTheSuperclassRule Minor Improvement https://pharo.fogbugz.com/f/cases/11477 11472 Optimize MCClassDefinitionTest https://pharo.fogbugz.com/f/cases/11472 11474 Optimize SHParserST80Test https://pharo.fogbugz.com/f/cases/11474 11479 Removing unused temps in source code is broken https://pharo.fogbugz.com/f/cases/11479'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 11:06'! script142 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.166.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.515.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.78.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.519.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.392.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-StephaneDucasse.27.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.5.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.131.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1220.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 11:06'! update30350 "self new update30350" self withUpdateLog: '11477 RBRepeteadMethodsInTheSuperclassRule Minor Improvement https://pharo.fogbugz.com/f/cases/11477 11472 Optimize MCClassDefinitionTest https://pharo.fogbugz.com/f/cases/11472 11474 Optimize SHParserST80Test https://pharo.fogbugz.com/f/cases/11474 11479 Removing unused temps in source code is broken https://pharo.fogbugz.com/f/cases/11479'. self loadTogether: self script142 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBRepeteadMethodsInTheSuperclassRule commentStamp: '' prior: 0! See my #rationale.! !ReparseAfterSourceEditing class methodsFor: 'signaling' stamp: 'IgorStasenko 8/28/2013 10:32'! signalWithNewSource: aSourceCode ^ self new newSource: aSourceCode; signal! ! !ReparseAfterSourceEditing methodsFor: 'accessing' stamp: 'IgorStasenko 8/28/2013 10:31'! newSource ^ newSource! ! !ReparseAfterSourceEditing methodsFor: 'accessing' stamp: 'IgorStasenko 8/28/2013 10:31'! newSource: anObject newSource := anObject! ! !SHParserST80Test methodsFor: 'tests-smoke' stamp: 'CamilloBruni 8/28/2013 02:23' prior: 32562527! testCollectionHierarchy self skip: 'Too slow for too little value added'. self verifyHierarchy: Collection! ! !OCUnusedVariableWarning methodsFor: 'correcting' stamp: 'IgorStasenko 8/28/2013 10:37' prior: 40070198! defaultAction | answer | self errorNotification ifFalse: [ ^nil ]. answer := UIManager default chooseFrom: #('yes' 'no') lines: #() title: node name asWideString, ' appears to be unused in this method. OK to remove it?' withCRs. (answer = 2 ) ifTrue: [ ^self]. self methodNode body removeTemporaryNamed: node name. self requestor correctFrom: node start to: node stop with: ''. ReparseAfterSourceEditing signalWithNewSource: self requestor text. ! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/28/2013 01:50' prior: 44904798! testValidTraitComposition "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: '{Trait1}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/28/2013 01:50' prior: 44901851! testValidTraitComposition2 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/28/2013 01:51' prior: 44902761! testValidTraitComposition3 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1 + Trait2' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: (cls includesSelector: #c2). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait2).! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/28/2013 01:49' prior: 44903842! testValidTraitComposition4 "Related to http://code.google.com/p/pharo/issues/detail?id=2598" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1 - {#c1}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). self shouldnt: [d load] raise: Error. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls selectors includesAllOf: {#c}). self deny: (cls selectors includesAnyOf: {#c1}).! ! !OpalCompiler methodsFor: 'public access' stamp: 'IgorStasenko 8/28/2013 10:36' prior: 38564996! translate [ self compile ] on: ReparseAfterSourceEditing do: [ :ex | self source: ex newSource readStream. self compile ] . ^ ast! ! !RBRepeteadMethodsInTheSuperclassRule commentStamp: '' prior: 49470346! See my #rationale.! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'running' stamp: 'CamilloBruni 8/28/2013 03:21' prior: 46815996! checkClass: aContext "The comparison between methods is made using the ast, this is better than comparing source code only since it does not take into account identations, extra parenthesis, etc" | selectedClass | selectedClass := aContext selectedClass. selectedClass methodsDo: [ :method | | selector | selector := method selector. self find: selector inSuperclassesOf: selectedClass do: [ :overriddenSuperclass | method ast = (overriddenSuperclass >> selector) ast ifTrue: [ result addClass: selectedClass selector: selector ] ] ]! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'running' stamp: 'CamilloBruni 8/28/2013 03:12'! find: selector inSuperclassesOf: selectedClass do: aBlock selectedClass allSuperclassesDo: [ :superclass | (superclass includesSelector: selector) ifTrue: [ ^ aBlock value: superclass ]]! ! !RBRepeteadMethodsInTheSuperclassRule methodsFor: 'accessing' stamp: 'CamilloBruni 8/28/2013 03:00' prior: 46816936! rationale ^ 'If a class is overriding a method, it should use a different code. Is meaningless to have a method in a class and in its superclass'! ! "Compiler"! "OpalCompiler-Core"! "Refactoring-Critics"! "ShoutTests"! "Tests"! ----End fileIn----! ----QUIT----an Array(28 August 2013 11:09:30 am) Pharo.image priorSource: 15904213! ----STARTUP----an Array(28 August 2013 11:19:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 11:19:21 am) Pharo-30350.image priorSource: 15922605! ----STARTUP----an Array(28 August 2013 11:35:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 11:33' prior: 49458951! commentForCurrentUpdate ^ '11473 Optimize Dictionary >> #valuesDo: https://pharo.fogbugz.com/f/cases/11473 11422 Support quantifiers in regular expressions https://pharo.fogbugz.com/f/cases/11422 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 11:33'! script143 ^ 'AST-Core-MarcusDenker.187.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.168.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.515.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.78.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.519.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.392.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.28.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.7.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-StephaneDucasse.62.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.131.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.229.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.95.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1220.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 11:33'! update30351 "self new update30351" self withUpdateLog: '11473 Optimize Dictionary >> #valuesDo: https://pharo.fogbugz.com/f/cases/11473 11422 Support quantifiers in regular expressions https://pharo.fogbugz.com/f/cases/11422 '. self loadTogether: self script143 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RxsPiece commentStamp: '' prior: 42637355! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A piece is an atom, possibly optional or repeated a number of times. Instance variables: atom min max nil means infinity! !RxmLink methodsFor: 'accessing' stamp: 'vb 4/11/09 21:56' prior: 32469408! next ^next! ! !RxmLink methodsFor: 'accessing' stamp: 'vb 4/11/09 21:56' prior: 32469005! next: aLink "Set the next link, either an RxmLink or an RxmTerminator." next := aLink! ! !RxmLink methodsFor: 'copying' stamp: 'CamilloBruni 8/14/2013 14:33'! postCopy super postCopy. next := next copy! ! !RxmBranch methodsFor: 'building' stamp: 'CamilloBruni 8/14/2013 12:53' prior: 32465646! pointTailTo: aNode "See superclass for explanations." loopback ifTrue: [ alternative == nil ifTrue: [alternative := aNode] ifFalse: [alternative pointTailTo: aNode]] ifFalse: [super pointTailTo: aNode]! ! !RxParserTest methodsFor: 'tests' stamp: 'CamilloBruni 8/14/2013 16:42'! testQuantifier self deny: ('' matchesRegex: 'a{2}'). self deny: ('a' matchesRegex: 'a{2}'). self assert: ('aa' matchesRegex: 'a{2}'). self deny: ('aaa' matchesRegex: 'a{2}'). self deny: ('' matchesRegex: 'a{2,3}'). self deny: ('a' matchesRegex: 'a{2,3}'). self assert: ('aa' matchesRegex: 'a{2,3}'). self assert: ('aaa' matchesRegex: 'a{2,3}'). self deny: ('aaaa' matchesRegex: 'a{2,3}'). self deny: ('' matchesRegex: 'a{2,}'). self deny: ('a' matchesRegex: 'a{2,}'). self assert: ('aa' matchesRegex: 'a{2,}'). self assert: ('aaa' matchesRegex: 'a{2,}'). self assert: ('aaaa' matchesRegex: 'a{2,}'). self assert: ('' matchesRegex: 'a{,3}'). self assert: ('a' matchesRegex: 'a{,3}'). self assert: ('aa' matchesRegex: 'a{,3}'). self assert: ('aaa' matchesRegex: 'a{,3}'). self deny: ('aaaa' matchesRegex: 'a{,3}').! ! !RxParserTest methodsFor: 'tests' stamp: 'CamilloBruni 8/14/2013 12:51'! testQuantifierSimple "Test quantifier expressions that can be expressed with + or *" self assert: ('a' matchesRegex: 'a{1}'). self deny: ('aa' matchesRegex: 'a{1}'). self assert: ('a' matchesRegex: 'a{1,1}'). self deny: ('aa' matchesRegex: 'a{1,1}'). self assert: ('ab' matchesRegex: '(ab){1,}'). self assert: ('abab' matchesRegex: '(ab){1,}'). self deny: ('' matchesRegex: '(ab){1,}'). self assert: ('ab' matchesRegex: '(ab){,1}'). self assert: ('' matchesRegex: '(ab){,1}'). self deny: ('abab' matchesRegex: '(ab){,1}').! ! !RxsPiece commentStamp: '' prior: 49488560! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A piece is an atom, possibly optional or repeated a number of times. Instance variables: atom min max nil means infinity! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:22' prior: 32412169! atom "An atom is one of a lot of possibilities, see below." | atom | (lookahead = #epsilon or: [ lookahead = $| or: [ lookahead = $) or: [ lookahead = $* or: [ lookahead = $+ or: [ lookahead = $? ]]]]]) ifTrue: [ ^RxsEpsilon new ]. lookahead = $( ifTrue: [ " ::= '(' ')' " self match: $(. atom := self regex. self match: $). ^atom ]. lookahead = $[ ifTrue: [ " ::= '[' ']' " self match: $[. atom := self characterSet. self match: $]. ^atom ]. lookahead = $: ifTrue: [ " ::= ':' ':' " self match: $:. atom := self messagePredicate. self match: $:. ^atom ]. lookahead = $. ifTrue: [ "any non-whitespace character" self next. ^RxsContextCondition new beAny]. lookahead = $^ ifTrue: [ "beginning of line condition" self next. ^RxsContextCondition new beBeginningOfLine]. lookahead = $$ ifTrue: [ "end of line condition" self next. ^RxsContextCondition new beEndOfLine]. lookahead = $\ ifTrue: [ " ::= '\' " self next. lookahead = #epsilon ifTrue: [ self signalParseError: 'bad quotation' ]. (BackslashConstants includesKey: lookahead) ifTrue: [ atom := RxsCharacter with: (BackslashConstants at: lookahead). self next. ^atom]. self ifSpecial: lookahead then: [:node | self next. ^node]]. "If passed through the above, the following is a regular character." atom := RxsCharacter with: lookahead. self next. ^atom! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:18' prior: 32413760! branch " ::= e | " | piece branch | piece := self piece. (lookahead = #epsilon or: [ lookahead = $| or: [ lookahead = $) ]]) ifTrue: [ branch := nil ] ifFalse: [ branch := self branch ]. ^RxsBranch new initializePiece: piece branch: branch! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:19' prior: 32414107! characterSet "Match a range of characters: something between `[' and `]'. Opening bracked has already been seen, and closing should not be consumed as well. Set spec is as usual for sets in regexes." | spec errorMessage | errorMessage := ' no terminating "]"'. spec := self inputUpTo: $] nestedOn: $[ errorMessage: errorMessage. (spec isEmpty or: [spec = '^']) ifTrue: [ "This ']' was literal." self next. spec := spec, ']', (self inputUpTo: $] nestedOn: $[ errorMessage: errorMessage)]. ^self characterSetFrom: spec! ! !RxParser methodsFor: 'private' stamp: 'CamilloBruni 8/14/2013 09:46' prior: 32417145! inputUpTo: aCharacter errorMessage: aString "Accumulate input stream until is encountered and answer the accumulated chars as String, not including . Signal error if end of stream is encountered, passing as the error description." | accumulator | accumulator := WriteStream on: (String new: 20). [lookahead ~= aCharacter and: [lookahead ~= #epsilon]] whileTrue: [ accumulator nextPut: lookahead. self next]. lookahead = #epsilon ifTrue: [ self signalParseError: aString ]. ^accumulator contents! ! !RxParser methodsFor: 'private' stamp: 'CamilloBruni 8/14/2013 09:46'! inputUpToAny: aDelimiterString errorMessage: aString "Accumulate input stream until any character from is encountered and answer the accumulated chars as String, not including the matched characters from the . Signal error if end of stream is encountered, passing as the error description." | accumulator | accumulator := WriteStream on: (String new: 20). [(aDelimiterString includes: lookahead) not and: [lookahead ~= #epsilon]] whileTrue: [ accumulator nextPut: lookahead. self next ]. lookahead = #epsilon ifTrue: [ self signalParseError: aString ]. ^accumulator contents! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:44' prior: 32414710! messagePredicate "Match a message predicate specification: a selector (presumably understood by a Character) enclosed in :'s ." | spec negated | spec := self inputUpTo: $: errorMessage: ' no terminating ":"'. negated := false. spec first = $^ ifTrue: [ negated := true. spec := spec copyFrom: 2 to: spec size]. ^RxsMessagePredicate new initializeSelector: spec asSymbol negated: negated! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:40' prior: 32415188! piece " ::= | * | + | ? | {,}" | atom | atom := self atom. lookahead = $* ifTrue: [ self next. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. ^ RxsPiece new initializeStarAtom: atom ]. lookahead = $+ ifTrue: [ self next. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. ^ RxsPiece new initializePlusAtom: atom ]. lookahead = $? ifTrue: [ self next. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. ^ RxsPiece new initializeOptionalAtom: atom ]. lookahead = ${ ifTrue: [ ^ self quantifiedAtom: atom ]. ^ RxsPiece new initializeAtom: atom! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 12:13'! quantifiedAtom: atom "Parse a quanitifer expression which can have one of the following forms {,} match to occurences {} which is the same as with repeated limits: {,} {,} match at least occurences {,} match maximally occurences, which is the same as {0,}" | min max | self next. lookahead = $, ifTrue: [ min := 0 ] ifFalse: [ max := min := (self inputUpToAny: ',}' errorMessage: ' no terminating "}"') asUnsignedInteger ]. lookahead = $, ifTrue: [ self next. max := (self inputUpToAny: ',}' errorMessage: ' no terminating "}"') asUnsignedInteger ]. self match: $}. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. (max isNotNil and: [ max < min ]) ifTrue: [ self signalParseError: ('wrong quantifier, expected ', min asString, ' <= ', max asString) ]. ^ RxsPiece new initializeAtom: atom min: min max: max! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/14/2013 09:21' prior: 32415882! regex " ::= e | `|' " | branch regex | branch := self branch. (lookahead = #epsilon or: [ lookahead = $) ]) ifTrue: [ regex := nil ] ifFalse: [ self match: $|. regex := self regex ]. ^RxsRegex new initializeBranch: branch regex: regex! ! !RxParser methodsFor: 'private' stamp: 'CamilloBruni 8/14/2013 09:39'! signalNullableClosureParserError self signalParseError: ' nullable closure'.! ! !RxMatcher methodsFor: 'private' stamp: 'CamilloBruni 8/14/2013 16:41'! makeQuantified: anRxmLink min: min max: max "Perform recursive poor-man's transformation of the {,} quantifiers." | aMatcher | "{,} ==> ({1,})?" min = 0 ifTrue: [ ^ self makeOptional: (self makeQuantified: anRxmLink min: 1 max: max) ]. "{,} ==> {-1, -1}+" max ifNil: [ ^ (self makeQuantified: anRxmLink min: 1 max: min-1) pointTailTo: (self makePlus: anRxmLink copy) ]. "{,} ==> ... " min = max ifTrue: [ aMatcher := anRxmLink copy. (min-1) timesRepeat: [ aMatcher pointTailTo: anRxmLink copy ]. ^ aMatcher ]. "{,} ==> {,}({1,-1})?" aMatcher := self makeOptional: anRxmLink copy. (max - min - 1) timesRepeat: [ aMatcher := self makeOptional: (anRxmLink copy pointTailTo: aMatcher) ]. ^ (self makeQuantified: anRxmLink min: min max: min) pointTailTo: aMatcher! ! !RxMatcher methodsFor: 'double dispatch' stamp: 'CamilloBruni 8/14/2013 13:01' prior: 32360728! syntaxPiece: pieceNode "Double dispatch from the syntax tree. Piece is an atom repeated a few times. Take care of a special case when the atom is repeated just once." | atom | atom := pieceNode atom dispatchTo: self. ^pieceNode isSingular ifTrue: [atom] ifFalse: [pieceNode isStar ifTrue: [self makeStar: atom] ifFalse: [pieceNode isPlus ifTrue: [self makePlus: atom] ifFalse: [pieceNode isOptional ifTrue: [self makeOptional: atom] ifFalse: [self makeQuantified: atom min: pieceNode min max: pieceNode max]]]]! ! !Dictionary methodsFor: 'enumerating' stamp: 'CamilloBruni 8/28/2013 01:54' prior: 20725186! keysAndValuesDo: aBlock "Optimized version of: ^ self associationsDo: [ :association | aBlock value: association key value: association value ]" tally = 0 ifTrue: [^ self]. array do: [ :association | association == nil ifFalse: [ aBlock value: association key value: association value ]]! ! !Dictionary methodsFor: 'enumerating' stamp: 'CamilloBruni 8/28/2013 01:53' prior: 20725331! keysDo: aBlock "Evaluate aBlock for each of the receiver's keys. Optimized version of: ^ self associationsDo: [:association | aBlock value: association key ]" tally = 0 ifTrue: [^ self]. array do: [:each | each == nil ifFalse: [ aBlock value: each key ]]! ! !Dictionary methodsFor: 'enumerating' stamp: 'CamilloBruni 8/28/2013 01:53' prior: 20725958! valuesDo: aBlock "Evaluate aBlock for each of the receiver's values. Optimized version of: ^ self associationsDo: [:association | aBlock value: association value]" tally = 0 ifTrue: [^ self]. array do: [:each | each == nil ifFalse: [ aBlock value: each value ]]! ! "Collections-Unordered"! "Regex-Core"! "Regex-Tests-Core"! ----End fileIn----! ----QUIT----an Array(28 August 2013 11:35:24 am) Pharo.image priorSource: 15922810! ----STARTUP----an Array(28 August 2013 11:42:43 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 11:42:43 am) Pharo-30351.image priorSource: 15946920! ----STARTUP----an Array(28 August 2013 1:49:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 13:45' prior: 49477548! commentForCurrentUpdate ^ '10608 ShortCut for browse scope does not work https://pharo.fogbugz.com/f/cases/10608 11480 refactor old compiler api evaluate:for:logged: https://pharo.fogbugz.com/f/cases/11480 11482 [Fix] broken pointer explorer menu https://pharo.fogbugz.com/f/cases/11482 - undo 11473 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 13:46'! script144 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.515.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1577.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.33.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.128.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.393.mcz OpalCompiler-Tests-StephaneDucasse.197.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-StephaneDucasse.103.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-StephaneDucasse.44.mcz Refactoring-Core-StephaneDucasse.188.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.28.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.7.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-StephaneDucasse.131.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.98.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-StephaneDucasse.7.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1222.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.559.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 13:47'! update30352 "self new update30352" self withUpdateLog: '10608 ShortCut for browse scope does not work https://pharo.fogbugz.com/f/cases/10608 11480 refactor old compiler api evaluate:for:logged: https://pharo.fogbugz.com/f/cases/11480 11482 [Fix] broken pointer explorer menu https://pharo.fogbugz.com/f/cases/11482 - undo 11473 '. self loadTogether: self script144 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ObjectExplorer commentStamp: '' prior: 42522141! ObjectExplorer provides a hierarchical alternative to #inspect. Simply evaluate an expression like: World explore and enjoy.! !Dictionary methodsFor: 'enumerating' stamp: 'MarianoMartinezPeck 8/24/2012 15:26' prior: 49500208! keysAndValuesDo: aBlock ^self associationsDo:[:assoc| aBlock value: assoc key value: assoc value].! ! !Dictionary methodsFor: 'enumerating' stamp: '' prior: 49500628! keysDo: aBlock "Evaluate aBlock for each of the receiver's keys." self associationsDo: [:association | aBlock value: association key]! ! !Dictionary methodsFor: 'enumerating' stamp: 'dtl 2/17/2003 09:48' prior: 49500992! valuesDo: aBlock "Evaluate aBlock for each of the receiver's values." self associationsDo: [:association | aBlock value: association value]! ! !PseudoClass methodsFor: 'private' stamp: 'MarcusDenker 8/28/2013 10:18' prior: 36348954! evaluate: aString ^self compiler source: aString; logged: true; evaluate ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/30/2013 10:28' prior: 36530458! evaluate: textOrString for: anObject logged: logFlag ^self source: textOrString; logged: logFlag; receiver: anObject; evaluate! ! !CategoryWidget class methodsFor: 'menu' stamp: 'SebastianTleue 8/28/2013 11:40' prior: 37907799! categoriesMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [ target findMethod ]; order: 0; help: 'Search for a method by name'. (aBuilder item: #'Add protocol...') keyText: 'n, t' if: Nautilus useOldStyleKeys not; action: [ target addCategory ]; order: 100; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [ target fullBrowse ]; order: 200; withSeparatorAfter. (aBuilder item: #'Categorize all uncategorized') keyText: 'h, C' if: Nautilus useOldStyleKeys not; action: [ target categorizeAllUncategorizedMethods ]; order: 1100. (aBuilder item: #'Remove empty protocols') action: [ target removeEmptyCategories ]; order: 1200; withSeparatorAfter. target selectedCategory ifNil: [ ^ target ]. (aBuilder item: #'Rename...') keyText: 'r, m' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameCategory ]; order: 1300; enabledBlock: [ target enableCategorySingleSelection ]. (aBuilder item: #'Remove...') keyText: 'x, t' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeCategories ]; order: 1400; icon: (Smalltalk ui icons iconNamed: #removeIcon); withSeparatorAfter. (aBuilder item: #'Add in group...') action: [ target addProtocolsInGroup ]; order: 1500. (aBuilder item: #'File Out') action: [ target fileOutCategories ]; order: 1600.! ! !RBPatternBlockNode methodsFor: 'matching' stamp: 'MarcusDenker 8/28/2013 10:20' prior: 38945998! createBlockFor: aRBBlockNode self replacePatternNodesIn: aRBBlockNode. ^Smalltalk compiler source: aRBBlockNode formattedCode; receiver: self; evaluate! ! !ObjectExplorer commentStamp: '' prior: 49513085! ObjectExplorer provides a hierarchical alternative to #inspect. Simply evaluate an expression like: World explore and enjoy.! !ObjectExplorer methodsFor: 'menus' stamp: 'IgorStasenko 8/28/2013 11:23'! buildMenuForNoSelection: aMenu ^ aMenu add: '*nothing selected*' target: self selector: #yourself ! ! !ObjectExplorer methodsFor: 'menus' stamp: 'IgorStasenko 8/28/2013 12:11'! buildMenuForSelection: aMenu "Borrow a menu from my inspector" | element | aMenu defaultTarget: self. element := SelfEyeElement host: self object. element mainInspectSubMenu: aMenu. element inspectionMenu: aMenu. aMenu addLine; add: 'monitor changes' target: self selector: #monitor: argument: currentSelection. monitorList isEmptyOrNil ifFalse: [aMenu addLine; add: 'stop monitoring all' target: self selector: #stopMonitoring]. ! ! !ObjectExplorer methodsFor: 'menus' stamp: 'IgorStasenko 8/28/2013 11:43' prior: 41629329! explorerKey: aChar from: view currentSelection ifNotNil: [ aChar == $i ifTrue: [^ self inspectSelection]. aChar == $I ifTrue: [^ self exploreSelection]. aChar == $b ifTrue: [^ self object browse]. aChar == $h ifTrue: [^ self systemNavigation browseHierarchy: self object class]. ]. ^ self arrowKey: aChar from: view! ! !ObjectExplorer methodsFor: 'menus' stamp: 'IgorStasenko 8/28/2013 11:28' prior: 41629881! genericMenu: aMenu currentSelection isNil ifTrue: [ self buildMenuForNoSelection: aMenu ] ifFalse: [ self buildMenuForSelection: aMenu ]. ^ aMenu! ! !SimpleButtonMorph methodsFor: 'menu' stamp: 'MarcusDenker 8/28/2013 10:22' prior: 36342179! setArguments | s newArgs newArgsArray | s := WriteStream on: ''. arguments do: [:arg | arg printOn: s. s nextPutAll: '. ']. newArgs := UIManager default request: 'Please type the arguments to be sent to the target when this button is pressed separated by periods' translated initialAnswer: s contents. newArgs isEmptyOrNil ifFalse: [ newArgsArray := self class compiler source: '{', newArgs, '}' ; receiver: self; evaluate. self arguments: newArgsArray]. ! ! !AbstractEyeElement methodsFor: 'action' stamp: 'IgorStasenko 8/28/2013 12:12'! inspectValue "Bring up a non-special inspector" ^ EyeInspector inspect: self value! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'IgorStasenko 8/28/2013 12:02'! mainInspectSubMenu: aMenu aMenu add: 'Inspect (i)' translated target: self selector: #inspectValue. aMenu add: 'Explore (I)' translated target: self selector: #exploreValue.! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'SebastianTleue 8/28/2013 11:40' prior: 17404887! buildAddGroupsShortcutsOn: aBuilder (aBuilder shortcut: #newGroupAndBrowseForPackage) category: #NautilusGlobalShortcuts default: $n command ,$g command do: [ :target | target addPackagesAsGroupsAndBrowse ] description: 'Create a new group and browse'. (aBuilder shortcut: #newGroupForPackage) category: #NautilusGlobalShortcuts default: $n command , $g shift command do: [ :target | target addPackagesAsGroups ] description: 'Create a new group'. (aBuilder shortcut: #addInGroupPackage) category: #NautilusGlobalShortcuts default: $n command , $e command, $p command do: [ :target | target addPackagesInGroup ] description: 'Add the selected packages in a group'. (aBuilder shortcut: #addMethodsInGroup) category: #NautilusGlobalShortcuts default: $n command , $e command, $m command do: [ :target | target addMethodsInGroup ] description: 'Add the selected methods in a group'. "This shortcut was removed because this shortcut is the same for packages" "(aBuilder shortcut: #addProtocolsInGroup) category: #NautilusGlobalShortcuts default: $n command , $e command, $p command do: [ :target | target addProtocolsInGroup ] description: 'Add the selected protocols in a group'." (aBuilder shortcut: #addInGroupClass) category: #NautilusGlobalShortcuts default: $n command , $e command, $c command do: [ :target | target addClassesInGroup ] description: 'Add the selected classes in a group'. (aBuilder shortcut: #addMatchingAndBrowse) category: #NautilusGlobalShortcuts default: $n command , $m command do: [ :target | target addMatchingPackagesInGroupsAndBrowse ] description: 'Add packages matching the selected package as groups and browse'. (aBuilder shortcut: #addInGroupMethod) category: #NautilusGlobalShortcuts default: $n command , $m command shift do: [ :target | target addMatchingPackagesInGroups ] description: 'Add packages matching the selected package as groups'.! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'SebastianTleue 8/28/2013 10:53' prior: 17407730! buildBrowseShortcutsOn: aBuilder (aBuilder shortcut: #browseSenders) category: #NautilusGlobalShortcuts default: $b command , $n command do: [:target | target browseSendersOfMessages ] description: 'Browse senders of the selected method'. (aBuilder shortcut: #browseClassRefs) category: #NautilusGlobalShortcuts default: $b command, $n command shift do: [ :target | target browseClassRefs ] description: 'Browse class references'. (aBuilder shortcut: #browseImplementors) category: #NautilusGlobalShortcuts default: $b command , $m command do: [:target | target browseMessages ] description: 'Browse implementors of the selected method'. (aBuilder shortcut: #browseRestricted) category: #NautilusGlobalShortcuts default: $b command , $s command do: [:target | target restrictedBrowse ] description: 'Open a restricted browser'. (aBuilder shortcut: #browseRestrictedClass) category: #NautilusGlobalShortcuts default: $b command , $r command , $c command do: [:target | target restrictedBrowseClass ] description: 'Open a restricted browser on the selected class'. (aBuilder shortcut: #browseSuperclass) category: #NautilusGlobalShortcuts default: $b command , $s command shift do: [:target | target browseSuperclass ] description: 'Open a browser on the superclass of the selected class'. (aBuilder shortcut: #browseRestrictedPackage) category: #NautilusGlobalShortcuts default: $b command , $r command , $p command do: [:target | target restrictedBrowsePackage ] description: 'Open a restricted browser on the selected package'. (aBuilder shortcut: #browseRestrictedRegex) category: #NautilusGlobalShortcuts default: $b command , $r command , $r command do: [:target | target restrictedBrowsePackageRegex ] description: 'Open a restricted browser on a package regex'. (aBuilder shortcut: #browseRestrictedSuperclasses) category: #NautilusGlobalShortcuts default: $b command , $r command , $S shift command do: [:target | target restrictedBrowseSuperclasses ] description: 'Open a restricted browser the superclasses'. (aBuilder shortcut: #browseRestrictedSubclasses) category: #NautilusGlobalShortcuts default: $b command , $r command , $s command do: [:target | target restrictedBrowseSubclasses ] description: 'Open a restricted browser the subclasses'. (aBuilder shortcut: #browseInheritance) category: #NautilusGlobalShortcuts default: $b command , $i command do: [:target | target methodHierarchy ] description: 'Open a restricted browser'. (aBuilder shortcut: #browseFull) category: #NautilusGlobalShortcuts default: $b command , $f command do: [:target | target fullBrowse ] description: 'Open the same browser'. (aBuilder shortcut: #browseVersion) category: #NautilusGlobalShortcuts default: $b command , $v command do: [:target | target browseVersions ] description: 'Browse senders of the selected method'. ! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'SebastianTleue 8/28/2013 11:03' prior: 17425645! buildRenameShortcutsOn: aBuilder (aBuilder shortcut: #renameClass) category: #NautilusGlobalShortcuts default: $r command ,$c command do: [ :target | target renameClass ] description: 'Rename the selected class'. (aBuilder shortcut: #renamePackage) category: #NautilusGlobalShortcuts default: $r command , $p command do: [ :target | target renamePackage ] description: 'Rename the selected package'. (aBuilder shortcut: #renameProtocol) category: #NautilusGlobalShortcuts default: $r command , $m command do: [ :target | target renameCategory ] description: 'Rename the selected protocol'. (aBuilder shortcut: #renameGroup) category: #NautilusGlobalShortcuts default: $r command , $g command do: [ :target | target renameGroup ] description: 'Rename the selected group'.! ! !EyeInspector methodsFor: 'menu' stamp: 'IgorStasenko 8/28/2013 12:04' prior: 36494515! inspectionSubMenu: aMenu |selectedObject| selectedObject := self selectedElement value. aMenu add: 'Inspect (i)' translated target: self selector: #inspectInNewWindow: argumentList: {selectedObject}. self customMenuActions cull: aMenu. aMenu add: 'Explore (I)' translated target: self selector: #explore: argumentList: {selectedObject}. aMenu addLine.! ! PositionableStream removeSelector: #fileInFor:announcing:! ObjectExplorer removeSelector: #updateInspector! ObjectExplorer removeSelector: #doesNotUnderstand:! "AST-Core"! "Collections-Unordered"! "Morphic-Base"! "Nautilus"! "OpalCompiler-Core"! "Spec-Inspector"! "System-Changes"! "System-FilePackage"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 August 2013 1:49:33 pm) Pharo.image priorSource: 15947125! ----STARTUP----an Array(28 August 2013 2:01:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 2:01:12 pm) Pharo-30352.image priorSource: 15971520! ----STARTUP----an Array(28 August 2013 2:20:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 14:17' prior: 49501862! commentForCurrentUpdate ^ '11177 Inst var push down refactoring is buggy https://pharo.fogbugz.com/f/cases/11177 11481 More compiler API refactorings https://pharo.fogbugz.com/f/cases/11481 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 14:17'! script145 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.516.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1579.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-StephaneDucasse.106.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.130.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.394.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.28.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.7.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1223.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 14:17'! update30353 "self new update30353" self withUpdateLog: '11177 Inst var push down refactoring is buggy https://pharo.fogbugz.com/f/cases/11177 11481 More compiler API refactorings https://pharo.fogbugz.com/f/cases/11481 '. self loadTogether: self script145 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NECVarTypeGuesser methodsFor: 'bytecode decoding' stamp: 'MarcusDenker 8/28/2013 10:55' prior: 36289498! computeVarType | info tempNames name | types ifEmpty: [ ^ nil ]. info := types first. (hasSend and: [ info isDefinedByMessageSend not ]) ifTrue: [ info type: nil. ^ info ]. info isDefinedByTemporary not ifTrue: [ ^ info ]. tempNames := (receiverClass compiler parse: currentMethod sourceCode) tempNames. name := tempNames at: info temporaryOffset + 1. info type: (self class getClassFromTypeSuggestingName: name). ^ info! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 8/28/2013 10:54' prior: 49286074! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [^#()]. "delete trailing period. This should be fixed in the Parser!!" data := aString trimRight: [ :char| char isSeparator or: [ char = $. ]]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [dataObjects := Smalltalk compiler evaluate: '{', data, '}'] on: SyntaxErrorNotification do: [:e | self inform: 'Syntax Error: ', e errorMessage. self contents: (e errorCode allButFirst allButLast). ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data) body statements select: [:each | each isReturn not]. dataStrings := statements collect:[:node | String streamContents: [:strm | (node isMessage) ifTrue: [strm nextPut: $(]. node formattedCode printOn: strm. (node isMessage) ifTrue: [strm nextPut: $)]]]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #()]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [resultArray := resultArray collect: [:expression | | newExp | newExp := expression. dataObjects first withIndexDo: [:lit :i | newExp := newExp copyReplaceAll: 'data', i printString with: (dataStrings at: i)]. newExp, ' --> ', dataStrings last ]]. ^ resultArray! ! !CompiledMethod methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 8/28/2013 10:45' prior: 35984300! methodNode "Return the parse tree that represents self" | aClass source methodNode | aClass := self methodClass. source := self sourceCode. methodNode := aClass compiler parse: source. methodNode source: source. ^methodNode. ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/30/2013 10:29' prior: 36530956! evaluate: textOrString logged: logFlag ^ self source: textOrString; logged: logFlag; evaluate ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/30/2013 10:29' prior: 36531148! evaluate: textOrString notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; requestor: aController; evaluate ! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 8/28/2013 10:31'! format: textOrString ^self source: textOrString; format! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/30/2013 10:30' prior: 36531401! format: textOrStream in: aClass notifying: aRequestor ^self source: textOrStream; class: aClass; requestor: aRequestor; format ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/29/2013 10:37' prior: 36006641! parse: aString class: aClass ^self source: aString; class: aClass; parse! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 8/28/2013 10:53' prior: 36336667! selectedBytecodes "Compile the source code for the selected message selector and extract and return the bytecode listing." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. contents := self class compiler parse: contents. contents := contents generate. ^ contents symbolic asText! ! !FileContentsBrowser methodsFor: 'edit pane' stamp: 'MarcusDenker 8/28/2013 10:32' prior: 36290747! selectedMessage "Answer a copy of the source code for the selected message selector." | class selector | class := self selectedClassOrMetaClass. selector := self selectedMessageName. contents := class sourceCodeAt: selector. self browseWithPrettyPrint ifTrue: [ contents := class compiler format: contents ]. self showingAnyKindOfDiffs ifTrue: [ contents := self methodDiffFor: contents class: self selectedClass selector: self selectedMessageName meta: self metaClassIndicated ]. ^ contents! ! !SmalltalkEditor methodsFor: 'menu messages' stamp: 'MarcusDenker 8/28/2013 10:29' prior: 36286274! prettyPrint "Reformat the contents of the receiver's view (a Browser)." | selectedClass newText | model selectedMessageName ifNil: [^ morph flash]. selectedClass := self modelCurrentSelectedClass. newText := selectedClass compiler source: self text; class: selectedClass; requestor: self; format. newText ifNotNil: [ self selectInvisiblyFrom: 1 to: self paragraph text size. self replaceSelectionWith: newText. self selectAt: 1]! ! !MetacelloPharoPlatform methodsFor: 'reflection' stamp: 'MarcusDenker 8/28/2013 10:46' prior: 38946473! copyClass: oldClass as: newName inCategory: newCategoryName | copysName class newDefinition | copysName := newName asSymbol. copysName = oldClass name ifTrue: [ ^ oldClass ]. (Smalltalk includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := oldClass definition copyReplaceAll: '#' , oldClass name asString with: '#' , copysName asString printString. newDefinition := newDefinition copyReplaceAll: 'category: ' , (SystemOrganization categoryOfElement: oldClass name) asString printString with: 'category: ' , newCategoryName printString. class := Smalltalk compiler source: newDefinition; logged: true; evaluate. class class instanceVariableNames: oldClass class instanceVariablesString. class copyAllCategoriesFrom: oldClass. class class copyAllCategoriesFrom: oldClass class. class category: newCategoryName. ^ class! ! !CodeHolder methodsFor: 'message list' stamp: 'MarcusDenker 8/28/2013 10:34' prior: 36288486! sourceStringPrettifiedAndDiffed "Answer a copy of the source code for the selected message, transformed by diffing and pretty-printing exigencies" | class selector sourceString | class := self selectedClassOrMetaClass. selector := self selectedMessageName. (class isNil or: [selector isNil]) ifTrue: [^'missing']. sourceString := class ultimateSourceCodeAt: selector ifAbsent: [^'error']. self validateMessageSource: sourceString forSelector: selector. (#(#prettyPrint #prettyDiffs) includes: contentsSymbol) ifTrue: [sourceString := class compiler format: sourceString]. self showingAnyKindOfDiffs ifTrue: [sourceString := self diffFromPriorSourceFor: sourceString]. ^sourceString! ! !PrettyTextDiffBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 8/28/2013 10:29' prior: 36282930! split: aString | formatted trimmed | trimmed := aString asString trimBoth. trimmed isEmpty ifTrue: [ ^super split: '' ]. formatted := [ sourceClass source: trimmed; class: sourceClass; format] on: Error do: [ :ex | trimmed ]. ^ super split: formatted! ! !MethodNode methodsFor: 'initialize-release' stamp: 'MarcusDenker 8/28/2013 10:44'! source: stringOrText sourceText := stringOrText! ! !DiffMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 8/28/2013 10:31' prior: 36293119! setText "Set the src and dst text in the morphs applying prettyPrint if required." |src dst ctx| src := self srcText. dst := self dstText. ctx := self contextClass. (self prettyPrint and: [ctx notNil]) ifTrue: [src isEmpty ifFalse: [ src := ctx compiler source: src; class: ctx; format]. dst isEmpty ifFalse: [ dst := ctx compiler source: dst; class: ctx; format]]. self srcMorph setText: src; font: self theme textFont. self dstMorph setText: dst; font: self theme textFont! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 8/28/2013 10:51' prior: 17447051! compileANewClassFrom: aString notifying: aController startingFrom: aClass " Copied from Browser " "The receiver's textual content is a request to define a new class. The source code is defString. If any errors occur in compilation, notify aController." | oldClass class newClassName defTokens keywdIx envt | oldClass := aClass. defTokens := aString findTokens: Character separators. ((defTokens first = 'Trait' and: [defTokens second = 'named:']) or: [defTokens second = 'classTrait']) ifTrue: [^ self defineTrait: aString notifying: aController ]. keywdIx := defTokens findFirst: [:x | x beginsWith: 'category']. envt := Smalltalk globals. keywdIx := defTokens findFirst: [:x | '*subclass*' match: x]. newClassName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldClass isNil or: [oldClass theNonMetaClass name asString ~= newClassName]) and: [envt includesKey: newClassName asSymbol]) ifTrue: ["Attempting to define new class over existing one when not looking at the original one in this browser..." (self confirm: ((newClassName , ' is an existing class in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newClassName size)) ifFalse: [^ nil]]. "ar 8/29/1999: Use oldClass superclass for defining oldClass since oldClass superclass knows the definerClass of oldClass." oldClass ifNotNil:[oldClass := oldClass superclass]. class := oldClass subclassDefinerClass source: aString; requestor: aController; logged: true; evaluate. ^ (class isKindOf: Behavior) ifTrue: [ class ] ifFalse: [ nil ]! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 8/28/2013 10:51' prior: 36334121! defineTrait: defString notifying: aController | defTokens keywdIx envt oldTrait newTraitName trait | self selectedClassOrMetaClass isTrait ifTrue:[oldTrait := self selectedClassOrMetaClass]. defTokens := defString findTokens: Character separators. keywdIx := defTokens findFirst: [:x | x = 'category']. envt := self class environment. keywdIx := defTokens findFirst: [:x | x = 'named:']. newTraitName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldTrait isNil or: [oldTrait baseTrait name asString ~= newTraitName]) and: [envt includesKey: newTraitName asSymbol]) ifTrue: ["Attempting to define new class/trait over existing one when not looking at the original one in this browser..." (self confirm: ((newTraitName , ' is an existing class/trait in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newTraitName size)) ifFalse: [^ nil ]]. trait := self class compiler source: defString; requestor: aController; logged: true; evaluate. ^ trait! ! !NumberParser class methodsFor: 'instance creation' stamp: 'MarcusDenker 8/28/2013 10:44' prior: 28532461! parse: aStringOrStream ^self new on: aStringOrStream; nextNumber! ! !RBPushDownInstanceVariableRefactoring methodsFor: 'transforming' stamp: 'SebastianTleye 8/28/2013 13:47' prior: 31092939! transform class removeInstanceVariable: variableName. class subclasses do: [:each | each addInstanceVariable: variableName]! ! !Browser methodsFor: 'class functions' stamp: 'MarcusDenker 8/28/2013 10:51' prior: 18429687! defineClass: defString notifying: aController "The receiver's textual content is a request to define a new class. The source code is defString. If any errors occur in compilation, notify aController." | oldClass class newClassName defTokens keywdIx envt | oldClass := self selectedClassOrMetaClass. defTokens := defString findTokens: Character separators. ((defTokens first = 'Trait' and: [defTokens second = 'named:']) or: [defTokens second = 'classTrait']) ifTrue: [^self defineTrait: defString notifying: aController]. keywdIx := defTokens findFirst: [:x | x beginsWith: 'category']. envt := Smalltalk globals. keywdIx := defTokens findFirst: [:x | '*subclass*' match: x]. newClassName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldClass isNil or: [oldClass theNonMetaClass name asString ~= newClassName]) and: [envt includesKey: newClassName asSymbol]) ifTrue: ["Attempting to define new class over existing one when not looking at the original one in this browser..." (self confirm: ((newClassName , ' is an existing class in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newClassName size)) ifFalse: [^ false]]. "ar 8/29/1999: Use oldClass superclass for defining oldClass since oldClass superclass knows the definerClass of oldClass." oldClass ifNotNil:[oldClass := oldClass superclass]. class := oldClass subclassDefinerClass source: defString; requestor: aController; logged: true; evaluate. (class isKindOf: Behavior) ifTrue: [self changed: #systemCategoryList. self changed: #classList. self clearUserEditFlag. self setClass: class selector: nil. "self clearUserEditFlag; editClass." ^ true] ifFalse: [^ false]! ! !Browser methodsFor: 'traits' stamp: 'MarcusDenker 8/28/2013 10:52' prior: 36343836! defineTrait: defString notifying: aController | defTokens keywdIx envt oldTrait newTraitName trait | oldTrait := self selectedClassOrMetaClass. defTokens := defString findTokens: Character separators. keywdIx := defTokens findFirst: [:x | x = 'category']. envt := self selectedEnvironment. keywdIx := defTokens findFirst: [:x | x = 'named:']. newTraitName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldTrait isNil or: [oldTrait baseTrait name asString ~= newTraitName]) and: [envt includesKey: newTraitName asSymbol]) ifTrue: ["Attempting to define new class/trait over existing one when not looking at the original one in this browser..." (self confirm: ((newTraitName , ' is an existing class/trait in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newTraitName size)) ifFalse: [^ false]]. trait := self class compiler source: defString; requestor: aController; logged: true; evaluate. ^(trait isKindOf: TraitBehavior) ifTrue: [ self changed: #classList. self classListIndex: (self classList indexOf: trait baseTrait name). self clearUserEditFlag; editClass. true] ifFalse: [ false ] ! ! !ChangeSorterModel methodsFor: 'text' stamp: 'MarcusDenker 8/28/2013 10:33' prior: 36281489! buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff | changeType code | changeType := changeSet atSelector: selector class: class name. changeType == #remove ifTrue: [^ 'Method has been removed (see versions)']. changeType == #addedThenRemoved ifTrue: [^ 'Added then removed (see versions)']. class ifNil: [^ 'Method was added, but cannot be found!!']. (class includesSelector: selector) ifFalse: [^ 'Method was added, but cannot be found!!']. code := class sourceCodeAt: selector. prettyPrint ifTrue: [ code := class compiler format: code]. showDiff ifTrue: [ code := self diffFromPriorSourceFor: code ]. ^ code asText! ! !RBRefactoryDefinitionChange methodsFor: 'private' stamp: 'MarcusDenker 8/28/2013 10:52' prior: 36283311! primitiveExecute definedClass := self definitionClass compiler source: self definition; requestor: self controller; logged: true; evaluate! ! !TClass methodsFor: 'copying' stamp: 'MarcusDenker 8/28/2013 10:47' prior: 43432029! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! OCClosureCompilerTest removeSelector: #testTempNameAccessForInjectInto! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. ^ class! ! "Compiler"! "Kernel"! "Metacello-Platform"! "NECompletion"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Polymorph-Tools-Diff"! "Refactoring-Changes"! "Refactoring-Core"! "Spec-Tools"! "System-FilePackage"! "Text-Edition"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(28 August 2013 2:20:34 pm) Pharo.image priorSource: 15971723! ----STARTUP----an Array(28 August 2013 2:31:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 2:31:32 pm) Pharo-30353.image priorSource: 16001591! ----STARTUP----an Array(28 August 2013 4:15:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 16:12' prior: 49526459! commentForCurrentUpdate ^ '11478 Critics Browser cannot run anymore https://pharo.fogbugz.com/f/cases/11478 11489 fix for #subclassDefinerClass https://pharo.fogbugz.com/f/cases/11489 11486 add method parse: to Compiler and OpalCompiler https://pharo.fogbugz.com/f/cases/11486'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 16:13'! script146 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1579.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.130.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-StephaneDucasse.76.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.28.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.7.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1225.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 16:13'! update30354 "self new update30354" self withUpdateLog: '11478 Critics Browser cannot run anymore https://pharo.fogbugz.com/f/cases/11478 11489 fix for #subclassDefinerClass https://pharo.fogbugz.com/f/cases/11489 11486 add method parse: to Compiler and OpalCompiler https://pharo.fogbugz.com/f/cases/11486'. self loadTogether: self script146 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CriticBrowser methodsFor: 'private' stamp: 'CamilleTeruel 8/28/2013 15:18'! colorForRule: aRule | total | ^ (total := cache criticsOf: aRule) ifEmpty: [ Color black ] ifNotEmpty: [ (cache falsePositiveOf: aRule) = total ifTrue: [ criticModel falsePositiveColor ] ifFalse: [ criticModel defaultColor ] ]! ! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilleTeruel 8/28/2013 15:13' prior: 34158453! initializeWidgets title := 'Critic Browser'. self instantiateModels: #( rulesModel TreeModel resetButton ButtonModel logButton ButtonModel ). self setLogButton. self setResetButton. criticModel := SingleRuleCriticBrowser new. rulesModel childrenBlock: [ :rule | rule isComposite ifTrue: [ rule rules ] ifFalse: [ #() ]]. rulesModel displayBlock: [ :rule | self stringMorphForRule: rule ]. rulesModel menu: [:a :b | self menu: a shifted: b ]. self focusOrder add: rulesModel; add: criticModel! ! !CriticBrowser methodsFor: 'private' stamp: 'CamilleTeruel 8/28/2013 15:20'! stringMorphForRule: rule | unclassified falsePositives toDos text total | falsePositives := (cache falsePositiveOf: rule) size. toDos := (cache toDosOf: rule) size. total := (cache criticsOf: rule) size. unclassified := total - falsePositives - toDos. text := String streamContents: [ :s | s << rule name; << ' (Unclassified: '; print: unclassified; << ', ToDo: '; print: toDos; << ', FP: '; print: falsePositives; << ')' ]. ^ text asMorph color: (self colorForRule: rule); yourself ! ! !CriticBrowser methodsFor: 'thread' stamp: 'CamilleTeruel 8/28/2013 13:58' prior: 45004040! updateTree criticModel updateList. rulesModel updateTree! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 8/28/2013 15:31'! parse: textOrString ^self source: textOrString; parse! ! !Browser methodsFor: 'class functions' stamp: 'MarcusDenker 8/28/2013 16:05' prior: 49549556! defineClass: defString notifying: aController "The receiver's textual content is a request to define a new class. The source code is defString. If any errors occur in compilation, notify aController." | oldClass class newClassName defTokens keywdIx envt | oldClass := self selectedClassOrMetaClass. defTokens := defString findTokens: Character separators. ((defTokens first = 'Trait' and: [defTokens second = 'named:']) or: [defTokens second = 'classTrait']) ifTrue: [^self defineTrait: defString notifying: aController]. keywdIx := defTokens findFirst: [:x | x beginsWith: 'category']. envt := Smalltalk globals. keywdIx := defTokens findFirst: [:x | '*subclass*' match: x]. newClassName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldClass isNil or: [oldClass theNonMetaClass name asString ~= newClassName]) and: [envt includesKey: newClassName asSymbol]) ifTrue: ["Attempting to define new class over existing one when not looking at the original one in this browser..." (self confirm: ((newClassName , ' is an existing class in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newClassName size)) ifFalse: [^ false]]. "ar 8/29/1999: Use oldClass superclass for defining oldClass since oldClass superclass knows the definerClass of oldClass." oldClass ifNotNil:[oldClass := oldClass superclass]. class := oldClass subclassDefinerClass new source: defString; requestor: aController; logged: true; evaluate. (class isKindOf: Behavior) ifTrue: [self changed: #systemCategoryList. self changed: #classList. self clearUserEditFlag. self setClass: class selector: nil. "self clearUserEditFlag; editClass." ^ true] ifFalse: [^ false]! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 8/28/2013 16:05' prior: 49546236! compileANewClassFrom: aString notifying: aController startingFrom: aClass " Copied from Browser " "The receiver's textual content is a request to define a new class. The source code is defString. If any errors occur in compilation, notify aController." | oldClass class newClassName defTokens keywdIx envt | oldClass := aClass. defTokens := aString findTokens: Character separators. ((defTokens first = 'Trait' and: [defTokens second = 'named:']) or: [defTokens second = 'classTrait']) ifTrue: [^ self defineTrait: aString notifying: aController ]. keywdIx := defTokens findFirst: [:x | x beginsWith: 'category']. envt := Smalltalk globals. keywdIx := defTokens findFirst: [:x | '*subclass*' match: x]. newClassName := (defTokens at: keywdIx+1) copyWithoutAll: '#()'. ((oldClass isNil or: [oldClass theNonMetaClass name asString ~= newClassName]) and: [envt includesKey: newClassName asSymbol]) ifTrue: ["Attempting to define new class over existing one when not looking at the original one in this browser..." (self confirm: ((newClassName , ' is an existing class in this system. Redefining it might cause serious problems. Is this really what you want to do?') asText makeBoldFrom: 1 to: newClassName size)) ifFalse: [^ nil]]. "ar 8/29/1999: Use oldClass superclass for defining oldClass since oldClass superclass knows the definerClass of oldClass." oldClass ifNotNil:[oldClass := oldClass superclass]. class := oldClass subclassDefinerClass new source: aString; requestor: aController; logged: true; evaluate. ^ (class isKindOf: Behavior) ifTrue: [ class ] ifFalse: [ nil ]! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 8/28/2013 15:31'! format: aString ^ self format: aString in: class notifying: requestor! ! !Compiler methodsFor: 'public access' stamp: 'MarcusDenker 8/28/2013 15:31'! parse: aString ^self parse: aString class: class! ! CriticBrowser removeSelector: #initializeDisplayBlockForRules! "Compiler"! "Manifest-CriticBrowser"! "OpalCompiler-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 August 2013 4:15:28 pm) Pharo.image priorSource: 16001794! ----STARTUP----an Array(28 August 2013 4:26:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 4:26:23 pm) Pharo-30354.image priorSource: 16019130! ----STARTUP----an Array(28 August 2013 4:38:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 16:36' prior: 49556530! commentForCurrentUpdate ^ '11484 Strong pointer explorer showing weak references https://pharo.fogbugz.com/f/cases/11484 11490 Failing tests in RBPushDownInstanceVariables https://pharo.fogbugz.com/f/cases/11490 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 16:36'! script147 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1579.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.130.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.28.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.7.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1226.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 16:36'! update30355 "self new update30355" self withUpdateLog: '11484 Strong pointer explorer showing weak references https://pharo.fogbugz.com/f/cases/11484 11490 Failing tests in RBPushDownInstanceVariables https://pharo.fogbugz.com/f/cases/11490 '. self loadTogether: self script147 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBPushDownInstanceVariableTest methodsFor: 'tests' stamp: 'SebastianTleye 8/28/2013 16:10' prior: 31095820! testModelRemoveUnusedVariable model defineClass: 'Object subclass: #SomeClass instanceVariableNames: ''foo'' classVariableNames: '''' poolDictionaries: '''' category: #''Refactory-Test data'''. model defineClass: 'SomeClass subclass: #Subclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: #''Refactory-Test data'''. self executeRefactoring: (RBPushDownInstanceVariableRefactoring model: model variable: 'foo' class: (model classNamed: #SomeClass)). self deny: ((model classNamed: #SomeClass) directlyDefinesVariable: 'foo'). self assert: ((model classNamed: #Subclass) directlyDefinesVariable: 'foo')! ! !RBPushDownInstanceVariableTest methodsFor: 'tests' stamp: 'SebastianTleye 8/28/2013 16:12' prior: 31096568! testPushDownInstanceVariable | refactoring | refactoring := RBPushDownInstanceVariableRefactoring variable: 'foo1' class: RBLintRuleTest. self executeRefactoring: refactoring. (refactoring model classNamed: #RBLintRuleTest) subclasses do: [ :each | self assert: (each directlyDefinesInstanceVariable: 'foo1') ]! ! !StrongPointerExplorerWrapper methodsFor: 'accessing' stamp: 'IgorStasenko 8/28/2013 13:50' prior: 51328729! contents | objects | objects := item pointersToExcept: (Array with: self with: model). "filter out all wrappers and all those who pointing only weakly to subject" ^(objects reject: [:ea | ea class == self class or: [ea pointsOnlyWeaklyTo: item]]) collect: [:ea| self class with: ea name: ea identityHash asString model: item]! ! "Refactoring-Tests-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 August 2013 4:38:51 pm) Pharo.image priorSource: 16019333! ----STARTUP----an Array(28 August 2013 4:46:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 4:46:50 pm) Pharo-30355.image priorSource: 16032299! ----STARTUP----an Array(28 August 2013 5:29:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/28/2013 17:27' prior: 49574069! commentForCurrentUpdate ^ '11493 Support negative lookahead in Regex https://pharo.fogbugz.com/f/cases/11493 11491 unsubscribe from editor in NECController https://pharo.fogbugz.com/f/cases/11491'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/28/2013 17:27'! script148 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz CI-Core-StephaneDucasse.79.mcz CI-Loader-MarcusDenker.1.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1579.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1226.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/28/2013 17:27'! update30356 "self new update30356" self withUpdateLog: '11493 Support negative lookahead in Regex https://pharo.fogbugz.com/f/cases/11493 11491 unsubscribe from editor in NECController https://pharo.fogbugz.com/f/cases/11491'. self loadTogether: self script148 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RxmLookahaed commentStamp: '' prior: 0! Instance holds onto a lookead which matches but does not consume anything. Instance variables: predicate ! !RxMatchOptimizer commentStamp: 'Tbn 11/12/2010 23:13' prior: 42629964! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A match start optimizer, handy for searching a string. Takes a regex syntax tree and sets itself up so that prefix characters or matcher states that cannot start a match are later recognized with #canStartMatch:in: method. Used by RxMatcher, but can be used by other matchers (if implemented) as well.! !RxsLookaround commentStamp: '' prior: 0! I lookaround is used for lookaheads and lookbehinds. They are used to check if the input matches a certain subexpression without consuming any characters (e.g. not advancing the match position). Lookarounds can be positive or negative. If they are positive the condition fails if the subexpression fails, if they are negative it is inverse.! !RxmLookahaed commentStamp: '' prior: 49598201! Instance holds onto a lookead which matches but does not consume anything. Instance variables: predicate ! !RxmLookahaed class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/28/2013 16:44'! with: aPiece ^self new lookahead: aPiece! ! !RxmLookahaed methodsFor: 'initialization' stamp: 'CamilloBruni 8/28/2013 16:52'! initialize super initialize. positive := true.! ! !RxmLookahaed methodsFor: 'accessing' stamp: 'CamilloBruni 8/28/2013 16:43'! lookahead ^ lookahead! ! !RxmLookahaed methodsFor: 'accessing' stamp: 'CamilloBruni 8/28/2013 16:43'! lookahead: anRxmLink lookahead := anRxmLink! ! !RxmLookahaed methodsFor: 'matching' stamp: 'CamilloBruni 8/28/2013 17:02'! matchAgainst: aMatcher "Match if the predicate block evaluates to true when given the current stream character as the argument." | original result | original := aMatcher currentState. result := lookahead matchAgainst: aMatcher. aMatcher restoreState: original. ^ result not and: [ next matchAgainst: aMatcher ]! ! !RxmLookahaed methodsFor: 'building' stamp: 'CamilloBruni 8/28/2013 17:09'! terminateWith: aNode lookahead terminateWith: aNode. super terminateWith: aNode.! ! !NECController methodsFor: 'private' stamp: 'IgorStasenko 8/28/2013 15:21' prior: 27797857! setEditor: anObject editor ifNotNil: [ "make sure we unsubscribe from old editor" editor morph announcer unsubscribe: self. ]. editor := anObject. editor morph onAnnouncement: MorphLostFocus send: #closeMenu to: self.! ! !RxMatchOptimizer commentStamp: 'Tbn 11/12/2010 23:13' prior: 49598392! -- Regular Expression Matcher v 1.1 (C) 1996, 1999 Vassili Bykov -- A match start optimizer, handy for searching a string. Takes a regex syntax tree and sets itself up so that prefix characters or matcher states that cannot start a match are later recognized with #canStartMatch:in: method. Used by RxMatcher, but can be used by other matchers (if implemented) as well.! !RxMatchOptimizer methodsFor: 'initialize-release' stamp: 'CamilloBruni 8/28/2013 16:49' prior: 32347009! initialize: aRegex ignoreCase: aBoolean "Set `testMethod' variable to a can-match predicate block: two-argument block which accepts a lookahead character and a matcher (presumably built from aRegex) and answers a boolean indicating whether a match could start at the given lookahead. " ignoreCase := aBoolean. prefixes := Set new: 10. nonPrefixes := Set new: 10. conditions := Set new: 3. methodPredicates := Set new: 3. nonMethodPredicates := Set new: 3. predicates := Set new: 3. nonPredicates := Set new: 3. lookarounds := Set new: 3. aRegex dispatchTo: self. "If the whole expression is nullable, end-of-line is an implicit can-match condition!!" aRegex isNullable ifTrue: [conditions add: #atEndOfLine]. testBlock := self determineTestMethod! ! !RxMatchOptimizer methodsFor: 'private' stamp: 'CamilloBruni 8/28/2013 16:47' prior: 32349687! predicateTester | p pred | predicates isEmpty ifTrue: [^nil]. p := self optimizeSet: predicates. "also allows copying closures" ^p size = 1 ifTrue: [ pred := p first. [:char :matcher | pred value: char ]] ifFalse: [ [:char :matcher | p contains: [:some | some value: char ]]]! ! !RxMatchOptimizer methodsFor: 'double dispatch' stamp: 'CamilloBruni 8/28/2013 16:48'! syntaxLookaround: lookaroundNode lookarounds add: lookaroundNode! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/28/2013 17:01'! lookAround "Parse a lookaround expression after: (?) ::= !! | =" | lookaround | (lookahead = $!! or: [ lookahead = $=]) ifFalse: [ ^ self signalParseError: 'Invalid lookaround expression ?', lookahead asString ]. self next. lookaround := RxsLookaround with: self regex. lookahead = $!! ifTrue: [ lookaround beNegative ]. ^ lookaround ! ! !RxParser methodsFor: 'recursive descent' stamp: 'CamilloBruni 8/28/2013 15:19' prior: 49496127! piece " ::= | * | + | ? | {,}" | atom | atom := self atom. lookahead = $* ifTrue: [ self next. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. ^ RxsPiece new initializeStarAtom: atom ]. lookahead = $+ ifTrue: [ self next. atom isNullable ifTrue: [ self signalNullableClosureParserError ]. ^ RxsPiece new initializePlusAtom: atom ]. lookahead = $? ifTrue: [ self next. atom isNullable ifTrue: [ ^ self lookAround ]. ^ RxsPiece new initializeOptionalAtom: atom ]. lookahead = ${ ifTrue: [ ^ self quantifiedAtom: atom ]. ^ RxsPiece new initializeAtom: atom! ! !RxParserTest methodsFor: 'tests' stamp: 'CamilloBruni 8/28/2013 17:18'! testLookaround self assert: ('A' matchesRegex: '(?!!ABC).*'). self assert: ('AB' matchesRegex: '(?!!ABC).*'). self deny: ('ABC' matchesRegex: '(?!!ABC).*').! ! !RxsLookaround commentStamp: '' prior: 49598818! I lookaround is used for lookaheads and lookbehinds. They are used to check if the input matches a certain subexpression without consuming any characters (e.g. not advancing the match position). Lookarounds can be positive or negative. If they are positive the condition fails if the subexpression fails, if they are negative it is inverse.! !RxsLookaround class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/28/2013 16:05'! with: anRsxPiece ^ self new initializePiece: anRsxPiece! ! !RxsLookaround methodsFor: 'initailize-release' stamp: 'CamilloBruni 8/28/2013 16:08'! beNegative positive := false! ! !RxsLookaround methodsFor: 'initailize-release' stamp: 'CamilloBruni 8/28/2013 16:08'! bePositive positive := true! ! !RxsLookaround methodsFor: 'accessing' stamp: 'CamilloBruni 8/28/2013 17:01'! dispatchTo: aBuilder "Inform the matcher of the kind of the node, and it will do whatever it has to." ^aBuilder syntaxLookaround: self! ! !RxsLookaround methodsFor: 'initailize-release' stamp: 'CamilloBruni 8/28/2013 17:01'! initializePiece: anRsxPiece super initialize. piece := anRsxPiece.! ! !RxsLookaround methodsFor: 'accessing' stamp: 'CamilloBruni 8/28/2013 16:04'! piece ^ piece! ! !RxMatcher methodsFor: 'double dispatch' stamp: 'CamilloBruni 8/28/2013 17:07'! syntaxLookaround: lookaroundNode "Double dispatch from the syntax tree. Special link can handle lookarounds (look ahead, positive and negative)." | piece | piece := lookaroundNode piece dispatchTo: self. ^ RxmLookahaed with: piece! ! "NECompletion"! "Regex-Core"! "Regex-Tests-Core"! ----End fileIn----! ----QUIT----an Array(28 August 2013 5:29:24 pm) Pharo.image priorSource: 16032502! ----STARTUP----an Array(28 August 2013 5:37:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 August 2013 5:37:20 pm) Pharo-30356.image priorSource: 16051359! ----STARTUP----an Array(29 August 2013 10:41:20 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/29/2013 10:38' prior: 49587238! commentForCurrentUpdate ^ '11126 Unused CI packages load by default in pharo https://pharo.fogbugz.com/f/cases/11126 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/29/2013 10:38'! script149 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-MarcusDenker.1579.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.152.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-MarcusDenker.34.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.59.mcz Refactoring-Environment-MarcusDenker.30.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.92.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.617.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1226.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/29/2013 10:38'! update30357 "self new update30357" self withUpdateLog: '11126 Unused CI packages load by default in pharo https://pharo.fogbugz.com/f/cases/11126 '. self loadTogether: self script149 merge: false. ScriptLoader new unloadPackageNamed: 'CI-Loader'. ScriptLoader new unloadPackageNamed: 'CI-Core'. self flushCaches. ! ! "ScriptLoader30"! GoferResolvedReference removeSelector: #load! MorphEmbedder removeSelector: #title:! MorphEmbedder removeSelector: #title! MorphEmbedder removeSelector: #result! MorphEmbedder removeSelector: #morph:! MorphEmbedder removeSelector: #morph! MorphEmbedder removeSelector: #initializeWidgets! MorphEmbedder removeSelector: #initialize! MorphEmbedder removeSelector: #initialExtent! MorphEmbedder removeSelector: #container! MorphEmbedder class removeSelector: #spec! Smalltalk globals removeClassNamed: #MorphEmbedder! IssueCreator removeSelector: #type! IssueCreator removeSelector: #title! IssueCreator removeSelector: #issueTitle! IssueCreator removeSelector: #issue:! IssueCreator removeSelector: #issue! IssueCreator removeSelector: #initializeWidgets! IssueCreator removeSelector: #initializeDialogWindow:! IssueCreator removeSelector: #initialize! IssueCreator removeSelector: #initialExtent! IssueCreator removeSelector: #description! IssueCreator removeSelector: #createTypes! IssueCreator removeSelector: #cancelled! IssueCreator class removeSelector: #spec! Smalltalk globals removeClassNamed: #IssueCreator! Authentifier removeSelector: #userLabel! Authentifier removeSelector: #userField! Authentifier removeSelector: #title! Authentifier removeSelector: #result! Authentifier removeSelector: #passwordLabel! Authentifier removeSelector: #passwordField! Authentifier removeSelector: #initializeWidgets! Authentifier removeSelector: #initializeDialogWindow:! Authentifier removeSelector: #initialize! Authentifier removeSelector: #initialExtent! Authentifier removeSelector: #gmail! Authentifier class removeSelector: #spec! Smalltalk globals removeClassNamed: #Authentifier! String removeSelector: #asGoogleIssueDescription! String removeSelector: #asGoogleIssueComment! Collection removeSelector: #select:inParallel:! Collection removeSelector: #doWithIndex:inParallel:! Collection removeSelector: #do:inParallel:! UlysseTheMonkey removeSelector: #verbose! UlysseTheMonkey removeSelector: #tracker:! UlysseTheMonkey removeSelector: #tracker! UlysseTheMonkey removeSelector: #testResult:! UlysseTheMonkey removeSelector: #testResult! UlysseTheMonkey removeSelector: #testChangeImpact:! UlysseTheMonkey removeSelector: #slice! UlysseTheMonkey removeSelector: #runAllTests! UlysseTheMonkey removeSelector: #reset! UlysseTheMonkey removeSelector: #removeFalseErrors! UlysseTheMonkey removeSelector: #removeCriticalTestsFrom:! UlysseTheMonkey removeSelector: #quiet! UlysseTheMonkey removeSelector: #preRunTests! UlysseTheMonkey removeSelector: #notifyTracker! UlysseTheMonkey removeSelector: #loadSlice! UlysseTheMonkey removeSelector: #loadChangeSet! UlysseTheMonkey removeSelector: #loadAndTestSlice! UlysseTheMonkey removeSelector: #loadAndTestChangeSet! UlysseTheMonkey removeSelector: #loadAndTest! UlysseTheMonkey removeSelector: #load! UlysseTheMonkey removeSelector: #issue:! UlysseTheMonkey removeSelector: #issue! UlysseTheMonkey removeSelector: #isVerbose! UlysseTheMonkey removeSelector: #isGreen! UlysseTheMonkey removeSelector: #isCog! UlysseTheMonkey removeSelector: #isAllGreen! UlysseTheMonkey removeSelector: #initialize! UlysseTheMonkey removeSelector: #impactedPackagesTests! UlysseTheMonkey removeSelector: #ifGreen:ifErrors:ifTestFailing:! UlysseTheMonkey removeSelector: #foundIssuesToCheck! UlysseTheMonkey removeSelector: #extraTests! UlysseTheMonkey removeSelector: #errorNoLoadableSources! UlysseTheMonkey removeSelector: #dirtyPackagesTests! UlysseTheMonkey removeSelector: #debug:! UlysseTheMonkey removeSelector: #debug! UlysseTheMonkey removeSelector: #coreTests! UlysseTheMonkey removeSelector: #buildTestsReportOn:! UlysseTheMonkey removeSelector: #buildSetupDescriptionOn:! UlysseTheMonkey removeSelector: #buildRedReportOn:! UlysseTheMonkey removeSelector: #buildRedReport! UlysseTheMonkey removeSelector: #buildGreenTitleOn:! UlysseTheMonkey removeSelector: #buildGreenTestResultsOn:! UlysseTheMonkey removeSelector: #buildGreenReportOn:! UlysseTheMonkey removeSelector: #buildGreenReport! UlysseTheMonkey removeSelector: #buildGreenChangesOn:! UlysseTheMonkey removeSelector: #buildErrorReportOn:! UlysseTheMonkey removeSelector: #addError:forFile:! UlysseTheMonkey removeSelector: #addError:! UlysseTheMonkey class removeSelector: #tracker:! UlysseTheMonkey class removeSelector: #issue:! UlysseTheMonkey class removeSelector: #example! Smalltalk globals removeClassNamed: #UlysseTheMonkey! SliceSubmitter removeSelector: #viewChangesFor:! SliceSubmitter removeSelector: #viewChanges:for:from:to:! SliceSubmitter removeSelector: #tracker! SliceSubmitter removeSelector: #submitNewSlice! SliceSubmitter removeSelector: #retrieveUserPassword! SliceSubmitter removeSelector: #repository! SliceSubmitter removeSelector: #receiver:! SliceSubmitter removeSelector: #receiver! SliceSubmitter removeSelector: #postNewSlice:message:! SliceSubmitter removeSelector: #mcPackage:! SliceSubmitter removeSelector: #mcPackage! SliceSubmitter removeSelector: #issue! SliceSubmitter removeSelector: #initializeTracker! SliceSubmitter removeSelector: #initialize! SliceSubmitter removeSelector: #commit:in:message:! SliceSubmitter class removeSelector: #buildNautilusMenu:! SliceSubmitter class removeSelector: #authenticate:with:! Smalltalk globals removeClassNamed: #SliceSubmitter! PharoTrackerLabels class removeSelector: #workNeeded! PharoTrackerLabels class removeSelector: #testFailure! PharoTrackerLabels class removeSelector: #reviewNeeded! PharoTrackerLabels class removeSelector: #noSourcesAvailable! PharoTrackerLabels class removeSelector: #issueChecked! PharoTrackerLabels class removeSelector: #accepted! Smalltalk globals removeClassNamed: #PharoTrackerLabels! GoogleUser removeSelector: #email:! GoogleUser removeSelector: #email! GoogleUser removeSelector: #authenticateService:with:! GoogleUser removeSelector: #authenticateSerivce:with:! GoogleUser class removeSelector: #fromXML:! GoogleUser class removeSelector: #email:! Smalltalk globals removeClassNamed: #GoogleUser! GoogleToken removeSelector: #user:! GoogleToken removeSelector: #user! GoogleToken removeSelector: #token! GoogleToken removeSelector: #service:! GoogleToken removeSelector: #service! GoogleToken removeSelector: #login:! GoogleToken removeSelector: #id! GoogleToken removeSelector: #handleLoginResult:! GoogleToken class removeSelector: #service:user:password:! Smalltalk globals removeClassNamed: #GoogleToken! GoogleIssueTracker removeSelector: #viewUrl! GoogleIssueTracker removeSelector: #user! GoogleIssueTracker removeSelector: #token! GoogleIssueTracker removeSelector: #readyForIntegrationIssues! GoogleIssueTracker removeSelector: #project! GoogleIssueTracker removeSelector: #openIssues! GoogleIssueTracker removeSelector: #nextIssueParams! GoogleIssueTracker removeSelector: #nextIssueId! GoogleIssueTracker removeSelector: #nextIssue! GoogleIssueTracker removeSelector: #nextAlreadyCheckedButInAPreviousPharoVersionIssue! GoogleIssueTracker removeSelector: #newIssueNamed:description:! GoogleIssueTracker removeSelector: #issuesWithParams:! GoogleIssueTracker removeSelector: #issuesURL! GoogleIssueTracker removeSelector: #issuesToCheck! GoogleIssueTracker removeSelector: #issuesFromXML:! GoogleIssueTracker removeSelector: #issue:! GoogleIssueTracker removeSelector: #isAuthenticated! GoogleIssueTracker removeSelector: #initializeWith:! GoogleIssueTracker removeSelector: #googleServiceName! GoogleIssueTracker removeSelector: #get:! GoogleIssueTracker removeSelector: #closedIssues! GoogleIssueTracker removeSelector: #client! GoogleIssueTracker removeSelector: #checkedInLabel! GoogleIssueTracker removeSelector: #authenticate:with:! GoogleIssueTracker class removeSelector: #pharo! GoogleIssueTracker class removeSelector: #for:! GoogleIssueTracker class removeSelector: #example! GoogleIssueTracker class removeSelector: #checkedInLabel! Smalltalk globals removeClassNamed: #GoogleIssueTracker! GoogleIssueDescription removeSelector: #initializeWith:! GoogleIssueDescription removeSelector: #id! GoogleIssueDescription removeSelector: #asGoogleIssueDescription! GoogleIssueDescription removeSelector: #asDescription! GoogleIssueDescription removeSelector: #asComment! Smalltalk globals removeClassNamed: #GoogleIssueDescription! GoogleIssueComment removeSelector: #updated:! GoogleIssueComment removeSelector: #updated! GoogleIssueComment removeSelector: #title:! GoogleIssueComment removeSelector: #title! GoogleIssueComment removeSelector: #published:! GoogleIssueComment removeSelector: #published! GoogleIssueComment removeSelector: #issue:! GoogleIssueComment removeSelector: #issue! GoogleIssueComment removeSelector: #initializeWith:! GoogleIssueComment removeSelector: #id! GoogleIssueComment removeSelector: #content:! GoogleIssueComment removeSelector: #content! GoogleIssueComment removeSelector: #author:! GoogleIssueComment removeSelector: #author! GoogleIssueComment removeSelector: #attachments:! GoogleIssueComment removeSelector: #attachments! GoogleIssueComment removeSelector: #asGoogleIssueComment! GoogleIssueComment removeSelector: #asDescription! GoogleIssueComment removeSelector: #asComment! GoogleIssueComment removeSelector: #addAttachment:! GoogleIssueComment class removeSelector: #id:! GoogleIssueComment class removeSelector: #fromXML:! Smalltalk globals removeClassNamed: #GoogleIssueComment! GoogleIssue removeSelector: #xmlEscape:on:! GoogleIssue removeSelector: #viewUrl! GoogleIssue removeSelector: #url:! GoogleIssue removeSelector: #url! GoogleIssue removeSelector: #updated:! GoogleIssue removeSelector: #updated! GoogleIssue removeSelector: #tracker:! GoogleIssue removeSelector: #tracker! GoogleIssue removeSelector: #title:! GoogleIssue removeSelector: #title! GoogleIssue removeSelector: #testClassesToBeChecked! GoogleIssue removeSelector: #submitStatusChange:! GoogleIssue removeSelector: #submitStatusChange! GoogleIssue removeSelector: #submitAsNewEntry! GoogleIssue removeSelector: #submit! GoogleIssue removeSelector: #statusUpdateXML:on:! GoogleIssue removeSelector: #statusUpdateXML:! GoogleIssue removeSelector: #status:! GoogleIssue removeSelector: #status! GoogleIssue removeSelector: #state! GoogleIssue removeSelector: #sliceScript! GoogleIssue removeSelector: #slice! GoogleIssue removeSelector: #script! GoogleIssue removeSelector: #reviewNeeded:! GoogleIssue removeSelector: #relatedPackages! GoogleIssue removeSelector: #published:! GoogleIssue removeSelector: #published! GoogleIssue removeSelector: #project! GoogleIssue removeSelector: #printOn:! GoogleIssue removeSelector: #postXML:to:! GoogleIssue removeSelector: #newestCommentFrom:! GoogleIssue removeSelector: #newestComment! GoogleIssue removeSelector: #newIssueXML:! GoogleIssue removeSelector: #newIssueXML! GoogleIssue removeSelector: #newEntryURL! GoogleIssue removeSelector: #name! GoogleIssue removeSelector: #monkeyIsChecking! GoogleIssue removeSelector: #loadSource! GoogleIssue removeSelector: #loadSliceFrom:! GoogleIssue removeSelector: #loadSlice! GoogleIssue removeSelector: #loadRelatedPackages! GoogleIssue removeSelector: #loadComments! GoogleIssue removeSelector: #loadAttachments! GoogleIssue removeSelector: #loadAndTest! GoogleIssue removeSelector: #load! GoogleIssue removeSelector: #lastComment! GoogleIssue removeSelector: #labels:! GoogleIssue removeSelector: #labels! GoogleIssue removeSelector: #issueXMLUpdatesOn:! GoogleIssue removeSelector: #issueXMLTitleOn:! GoogleIssue removeSelector: #issueXMLStatusOn:! GoogleIssue removeSelector: #issueXMLOwnerOn:! GoogleIssue removeSelector: #issueXMLLabelsOn:! GoogleIssue removeSelector: #issueXMLHeaderOn:! GoogleIssue removeSelector: #issueXMLHeader! GoogleIssue removeSelector: #issueXMLFooterOn:! GoogleIssue removeSelector: #issueXMLDescriptionOn:! GoogleIssue removeSelector: #issueXMLDescription:on:! GoogleIssue removeSelector: #issueXMLDescription:! GoogleIssue removeSelector: #issueXMLAuthorOn:! GoogleIssue removeSelector: #issueUrl! GoogleIssue removeSelector: #issueCreateXMLOn:! GoogleIssue removeSelector: #issueCreateXML! GoogleIssue removeSelector: #isGreen! GoogleIssue removeSelector: #integratedInVersion:! GoogleIssue removeSelector: #initializeWith:! GoogleIssue removeSelector: #initialize! GoogleIssue removeSelector: #impactedPackagesTests! GoogleIssue removeSelector: #id! GoogleIssue removeSelector: #hash! GoogleIssue removeSelector: #hasToBeChecked! GoogleIssue removeSelector: #hasSlice! GoogleIssue removeSelector: #hasFix! GoogleIssue removeSelector: #hasChangeSet! GoogleIssue removeSelector: #hasAttachment! GoogleIssue removeSelector: #fixToInclude:! GoogleIssue removeSelector: #fixToInclude! GoogleIssue removeSelector: #failingTest:! GoogleIssue removeSelector: #errorNoSources:! GoogleIssue removeSelector: #errorNoSources! GoogleIssue removeSelector: #ensureFix! GoogleIssue removeSelector: #dirtyPackagesTests! GoogleIssue removeSelector: #description:! GoogleIssue removeSelector: #description! GoogleIssue removeSelector: #commentsUrl! GoogleIssue removeSelector: #comments! GoogleIssue removeSelector: #commentById:! GoogleIssue removeSelector: #checkedInLabel! GoogleIssue removeSelector: #changed! GoogleIssue removeSelector: #changeSets! GoogleIssue removeSelector: #changeLoader! GoogleIssue removeSelector: #attachmentsScript! GoogleIssue removeSelector: #attachments! GoogleIssue removeSelector: #allAttachments! GoogleIssue removeSelector: #addComment:! GoogleIssue removeSelector: #=! GoogleIssue class removeSelector: #id:! GoogleIssue class removeSelector: #fromXML:tracker:! Smalltalk globals removeClassNamed: #GoogleIssue! GoogleAttachment removeSelector: #url! GoogleAttachment removeSelector: #published! GoogleAttachment removeSelector: #printOn:! GoogleAttachment removeSelector: #load! GoogleAttachment removeSelector: #issue:! GoogleAttachment removeSelector: #issue! GoogleAttachment removeSelector: #isSource! GoogleAttachment removeSelector: #initializeWith:! GoogleAttachment removeSelector: #hash! GoogleAttachment removeSelector: #filename! GoogleAttachment removeSelector: #description! GoogleAttachment removeSelector: #contents! GoogleAttachment removeSelector: #comment:! GoogleAttachment removeSelector: #comment! GoogleAttachment removeSelector: #=! GoogleAttachment class removeSelector: #fromURL:! Smalltalk globals removeClassNamed: #GoogleAttachment! ErrorWhileCreationException removeSelector: #response:! ErrorWhileCreationException removeSelector: #response! ErrorWhileCreationException class removeSelector: #response:! Smalltalk globals removeClassNamed: #ErrorWhileCreationException! ----End fileIn----! ----QUIT----an Array(29 August 2013 10:41:34 am) Pharo.image priorSource: 16051562! ----STARTUP----an Array(29 August 2013 10:49:58 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 August 2013 10:49:59 am) Pharo-30357.image priorSource: 16077595! ----STARTUP----an Array(29 August 2013 5:14:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/29/2013 17:09' prior: 49606299! commentForCurrentUpdate ^ '- issue 2489 Strange behavior of Rectangle (first part) https://pharo.fogbugz.com/default.asp?2489 - issue 11441 Use SmalllintManifestChecker in assertValidLintRule: https://pharo.fogbugz.com/default.asp?11441'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/29/2013 17:10'! script150 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.34.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-StephaneDucasse.1582.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.79.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.521.mcz NautilusCommon-StephaneDucasse.161.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.890.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.94.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1226.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/29/2013 17:10'! update30358 "self new update30358" self withUpdateLog: '- issue 2489 Strange behavior of Rectangle (first part) https://pharo.fogbugz.com/default.asp?2489 - issue 11441 Use SmalllintManifestChecker in assertValidLintRule: https://pharo.fogbugz.com/default.asp?11441'. self loadTogether: self script150 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PointPair commentStamp: '' prior: 0! A PointPair class is pair of points. The astute reader can wonder why this class exists when we have Rectangle. A rectangle can be defined using different ways and not only a pair of points and in addition a rectangle has a strong invariant: its height and width must not be negative: the top-left point is always less or equals than bottom right one. A pair of points can be used to specify situations that could not be with rectangles. For example if you want to inset a rectangle corners by different offsets, without pair of points you may be forced to use a rectangle violating the invariant. rec1 insetBy: (0@50 corner: 10@10) is not correct while rec1 insetBy: (0@50 pair: 10@10) is correct. ! !Number methodsFor: 'geometry' stamp: 'StephaneDucasse 8/15/2013 18:40'! insetRectangle: aRectangle "Answer a rectangle whose size has been reduced by the receiver from all sides" | newOrigin newCorner | newOrigin := aRectangle origin + self. newCorner := aRectangle corner - self. ^ Rectangle origin: newOrigin extent: (newCorner - newOrigin) ! ! !RPackage methodsFor: '*Refactoring-Environment' stamp: 'CamilloBruni 8/22/2013 11:48'! asEnvironment ^ RBPackageEnvironment package: self! ! !TBehavior methodsFor: '*Refactoring-Environment' stamp: 'CamilloBruni 8/22/2013 12:02'! asEnvironment ^ RBClassEnvironment class: self! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/22/2013 11:36'! run rule resetResult. environment classesDo: [ :class | (class isTrait or: [ class isManifest ]) ifFalse: [ self checkClass: class. self checkMethodsForClass: class ]]! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/22/2013 11:49' prior: 33932240! runRules: aCompositeRule onPackage: aPackage rule := aCompositeRule. environment := RBPackageEnvironment package: aPackage. self run.! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/22/2013 11:50' prior: 33932641! runRules: aCompositeRule onPackage: aPackage withoutTestCase: aBoolean rule := aCompositeRule. environment := RBPackageEnvironment package: aPackage. self flag: 'Instead of manually avoiding the testcases and traits? we should just modify the environment and subtract the testscases from the built package environment.'. environment classesDo: [ :class | (class isTrait or: [class isManifest or: [aBoolean and: [class allSuperclasses includes: TestCase ]]]) ifFalse: [ self checkClass: class. self checkMethodsForClass: class ] ]! ! !PointPair commentStamp: '' prior: 49643546! A PointPair class is pair of points. The astute reader can wonder why this class exists when we have Rectangle. A rectangle can be defined using different ways and not only a pair of points and in addition a rectangle has a strong invariant: its height and width must not be negative: the top-left point is always less or equals than bottom right one. A pair of points can be used to specify situations that could not be with rectangles. For example if you want to inset a rectangle corners by different offsets, without pair of points you may be forced to use a rectangle violating the invariant. rec1 insetBy: (0@50 corner: 10@10) is not correct while rec1 insetBy: (0@50 pair: 10@10) is correct. ! !PointPair class methodsFor: 'instance creation' stamp: 'StephaneDucasse 8/15/2013 18:16'! point1: pt1 point2: pt2 ^ self basicNew point1: pt1; point2: pt2; yourself! ! !PointPair methodsFor: 'geometry' stamp: 'StephaneDucasse 8/15/2013 18:59'! insetRectangle: aRectangle "Answer a rectangle with sides, offset by receiver. " | left right top bottom | left := aRectangle left + point1 x. right :=aRectangle right - point2 x. top := aRectangle top + point1 y. bottom := aRectangle bottom - point2 y. ^ Rectangle origin: left@top extent: (right-left@(bottom-top)) ! ! !PointPair methodsFor: 'testing' stamp: 'StephaneDucasse 8/15/2013 19:18'! isZero ^ point1 isZero and: [ point2 isZero ]! ! !PointPair methodsFor: 'accessing' stamp: 'StephaneDucasse 8/15/2013 18:16'! point1 ^ point1! ! !PointPair methodsFor: 'accessing' stamp: 'StephaneDucasse 8/15/2013 18:16'! point1: anObject point1 := anObject! ! !PointPair methodsFor: 'accessing' stamp: 'StephaneDucasse 8/15/2013 18:16'! point2 ^ point2! ! !PointPair methodsFor: 'accessing' stamp: 'StephaneDucasse 8/15/2013 18:16'! point2: anObject point2 := anObject! ! !ClassTestCase methodsFor: '*Manifest-Core' stamp: 'CamilloBruni 8/22/2013 11:58' prior: 46814400! assertValidLintRule: aLintRule | checker | checker := SmalllintManifestChecker new rule: aLintRule; environment: self targetClassEnvironment; run. self assert: aLintRule result isEmpty description: [ aLintRule rationale ]! ! !ClassTestCase methodsFor: '*Manifest-Core' stamp: 'SebastianTleye 7/19/2013 11:25' prior: 46814651! targetClassEnvironment ^RBClassEnvironment class: self targetClass.! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 13:45' prior: 46836674! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits self assertValidLintRule: RBLocalMethodsOfAClassNotInItsTraitComposition new! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 14:30' prior: 46836450! testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses self assertValidLintRule: RBRepeteadMethodsInTheSuperclassRule new! ! !ClassTestCase methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 12:50' prior: 46836212! testTraitExplicitRequirementMethodsMustBeImplementedInTheClassOrInASuperclass self assertValidLintRule: RBExplicitRequirementMethodsRule new! ! !Point methodsFor: 'geometry' stamp: 'StephaneDucasse 8/15/2013 18:41'! insetRectangle: aRectangle "Answer a rectangle whose size has been reduced by the receiver which represents the x and y amount to shrink from both sides." | newOrigin newCorner | newOrigin := aRectangle origin + self. newCorner := aRectangle corner - self. ^ Rectangle origin: newOrigin extent: (newCorner - newOrigin) ! ! !Point methodsFor: 'point functions' stamp: 'StephaneDucasse 8/15/2013 18:28' prior: 29647420! nearestPointOnLineFrom: p1 to: p2 "This will not give points beyond the endpoints" ^ (self nearestPointAlongLineFrom: p1 to: p2) adhereTo: (p1 rectangle: p2)! ! !Point methodsFor: 'converting' stamp: 'StephaneDucasse 8/15/2013 18:26'! pair: anotherPoint "Answers a pair of points composed by the receiver and the argument, anotherPoint" ^ PointPair point1: self point2: anotherPoint! ! !Point methodsFor: 'converting' stamp: 'StephaneDucasse 8/15/2013 18:30' prior: 29639090! rect: aPoint "Answer a Rectangle that encompasses the receiver and aPoint. This is the most general infix way to create a rectangle." self deprecated: 'Use rectangle: instead' on: '15 August 2013' in: #Pharo30. ^ self rectangle: aPoint! ! !Point methodsFor: 'converting' stamp: 'StephaneDucasse 8/15/2013 18:26'! rectangle: aPoint "Answer a Rectangle that encompasses the receiver and aPoint. This is the most general infix way to create a rectangle." ^ Rectangle origin: (self min: aPoint) corner: (self max: aPoint)! ! !SmalllintManifestCheckerTest methodsFor: 'running' stamp: 'CamilloBruni 8/22/2013 11:45' prior: 33870498! setUp | bm | self cleaningResources. bm := BuilderManifest of: MFClassA. bm installFalsePositiveOf: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm addFalsePositive: MFClassB >> #method3 of: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm installToDoOf: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. bm addAllToDo: {(MFClassB >> #method3). (MFClassA >> #method)} of: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. checker := SmalllintManifestChecker new! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 11:46' prior: 33871300! testCriticsOf | rule | rule := RBCompositeLintRule allGoodRules. checker rule: rule; environment: self package asEnvironment; run. self assert: (checker criticsOf: RBOnlyReadOrWrittenTemporaryRule new) size = 3. self assert: (( checker criticsOf: RBOnlyReadOrWrittenTemporaryRule new ) anySatisfy: [:each| each = (MFClassB>>#method3)]). self assert: (( checker criticsOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassA>>#method)]).! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 11:46' prior: 33872332! testIsFalsePositive | rule | rule := RBCompositeLintRule allGoodRules. checker rule: rule; environment: self package asEnvironment; run. self assert: (checker isFalsePositive: (MFClassB>>#method3) forRuleId: (RBCodeCruftLeftInMethodsRule uniqueIdentifierName) versionId: 1). self deny: (checker isFalsePositive: (MFClassA>>#method) forRuleId: (RBCodeCruftLeftInMethodsRule uniqueIdentifierName) versionId: 1). ! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 11:46' prior: 33872841! testIsToDo | rule | rule := RBCompositeLintRule allGoodRules. checker rule: rule; environment: self package asEnvironment; run. self assert: (checker isToDo: (MFClassB>>#method3) forRuleId: (RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName) versionId: 1). self deny: (checker isToDo: (MFClassB>>#method2) forRuleId: (RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName) versionId: 1). ! ! !SmalllintManifestCheckerTest methodsFor: 'tests' stamp: 'CamilloBruni 8/22/2013 11:46' prior: 34154927! testToDoOf | rule | rule := RBCompositeLintRule allGoodRules. checker rule: rule; environment: self package asEnvironment; run. self assert: (( checker toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method3)]). self deny: (( checker toDoOf: RBOnlyReadOrWrittenTemporaryRule new) anySatisfy: [:each| each = (MFClassB>>#method2)]).! ! !ReleaseTest methodsFor: '*Manifest-Core' stamp: 'CamilloBruni 8/22/2013 11:58'! assertValidLintRule: aLintRule | checker | checker := SmalllintManifestChecker new rule: aLintRule; run. self assert: aLintRule result isEmpty description: [ aLintRule rationale ]! ! !ReleaseTest methodsFor: '*Refactoring-Critics' stamp: 'SebastianTleye 7/19/2013 16:29' prior: 46826749! testExplicitRequirementMethodsShouldBeImplementedInTheirUsers "If a class is using a trait with an explicit requirement method, this class should implement the method" | result | result := RBExplicitRequirementMethodsRule new run. self assert: result isEmpty.! ! !ReleaseTest methodsFor: '*Refactoring-Critics' stamp: 'CamilloBruni 8/22/2013 11:55' prior: 46827467! testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits "If a class is using a trait with an explicit requirement method, this class should implement the method" self assertValidLintRule: RBLocalMethodsOfAClassNotInItsTraitComposition new! ! ReleaseTest removeSelector: #testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses! !Trait method! asEnvironment ^ RBClassEnvironment class: self! ! !Trait method! asEnvironment ^ RBClassEnvironment class: self! ! "Kernel"! "Manifest-Core"! "Manifest-Tests"! "Refactoring-Critics"! "Refactoring-Environment"! "SUnit-Core"! "Tests"! ----End fileIn----! ----QUIT----an Array(29 August 2013 5:14:34 pm) Pharo.image priorSource: 16077800! ----STARTUP----an Array(29 August 2013 5:20:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 August 2013 5:20:39 pm) Pharo-30358.image priorSource: 16100484! ----STARTUP----an Array(29 August 2013 10:10:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/29/2013 21:39' prior: 49632540! commentForCurrentUpdate ^ '- issue 2489 Strange Behavior of Rectangle Part Two https://pharo.fogbugz.com/default.asp?2489 - issue 11502 Override Class >> #setName: https://pharo.fogbugz.com/default.asp?11502 - issue 11505 Remove obsolete icons https://pharo.fogbugz.com/default.asp?11505'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/29/2013 21:40'! script151 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.173.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.200.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.37.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-StephaneDucasse.1585.mcz KernelTests-MarcusDenker.554.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.82.mcz Morphic-Examples-StephaneDucasse.11.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.524.mcz NautilusCommon-StephaneDucasse.164.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.199.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.893.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.168.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-MarcusDenker.9.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.133.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.94.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.905.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1230.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-MarcusDenker.561.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/29/2013 21:41'! update30359 "self new update30359" self withUpdateLog: '- issue 2489 Strange Behavior of Rectangle Part Two https://pharo.fogbugz.com/default.asp?2489 - issue 11502 Override Class >> #setName: https://pharo.fogbugz.com/default.asp?11502 - issue 11505 Remove obsolete icons https://pharo.fogbugz.com/default.asp?11505'. self loadTogether: self script151 merge: false. Smalltalk ui theme icons initializeIcons. self flushCaches. ! ! "ScriptLoader30"! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 19:03'! testInsettingByNumberShouldWork | rec1 rec2 | rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: 30. self assert: rec2 height = 140. self assert: rec2 width = 40. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: 50. self assert: rec2 height = 100. self assert: rec2 width = 0. ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 19:13'! testInsettingByPointPairShouldNotProduceNegativeRectangle | rec1 rec2 | rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (1@2 pair: 5@10). self assert: rec2 left = 1. self assert: rec2 right = 95. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (5@10 pair: 1@2). self assert: rec2 left = 5. self assert: rec2 right = 99. self assert: rec2 top = 10. self assert: rec2 bottom = 198. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (46@2 pair: 55@10). self assert: rec2 left = 46. self assert: rec2 right = 46. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (46@2 pair: 55@10). self assert: rec2 left = 46. self assert: rec2 right = 46. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (1@102 pair: 5@105). self assert: rec2 left = 1. self assert: rec2 right = 95. self assert: rec2 top = 102. self assert: rec2 bottom = 102. ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 19:09'! testInsettingByRectangleShouldNotProduceNegativeRectangle | rec1 rec2 | rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (1@2 rectangle: 5@10). self assert: rec2 left = 1. self assert: rec2 right = 95. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (46@2 rectangle: 55@10). self assert: rec2 left = 46. self assert: rec2 right = 46. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (46@2 rectangle: 55@10). self assert: rec2 left = 46. self assert: rec2 right = 46. self assert: rec2 top = 2. self assert: rec2 bottom = 190. rec1 := 0@0 extent: 100@200. rec2 := rec1 insetBy: (1@102 rectangle: 5@105). self assert: rec2 left = 1. self assert: rec2 right = 95. self assert: rec2 top = 102. self assert: rec2 bottom = 102. ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 17:34'! testInsettingLargerThanRectangleExtentShouldNotProduceNegativeExtent | rec1 rec2 | rec1 := 0@0 extent: 100@100. rec2 := rec1 insetBy: 200@200. self assert: rec2 height >= 0. self assert: rec2 width >= 0. rec1 := 0@0 extent: 100@100. rec2 := rec1 insetBy: 50@50. "because insetBy: reduces from both sides" self assert: rec2 height = 0. self assert: rec2 width = 0. ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 17:33'! testInsettingSmallerThanRectangleExtentShouldProduceCorrectExtent | rec1 rec2 | rec1 := 0@0 extent: 100@100. rec2 := rec1 insetBy: 40@40. self assert: rec2 height = 20. self assert: rec2 width = 20. ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 17:24'! testRectangleWithNegativeExtentShouldHaveZeroExtent self assert: (Rectangle origin: 10@10 extent: -5@ -5) extent = (0@0). self assert: (Rectangle origin: 10@10 extent: -5@ -5) origin = (10@10). self assert: (Rectangle origin: 10@10 extent: 50@ 60) extent = (50@60).! ! !PolygonMorph methodsFor: 'private' stamp: 'StephaneDucasse 8/15/2013 18:28' prior: 29728730! computeArrowFormAt: endPoint from: priorPoint "Compute a triangle oriented along the line from priorPoint to endPoint. Then draw those lines in a form and return that form, with appropriate offset" | p1 pts box arrowForm bb origin | pts := self arrowBoundsAt: endPoint from: priorPoint. box := ((pts first rectangle: pts last) encompass: (pts second)) expandBy: 1. arrowForm := Form extent: box extent asIntegerPoint. bb := (BitBlt current toForm: arrowForm) sourceForm: nil; fillColor: Color black; combinationRule: Form over; width: 1; height: 1. origin := box topLeft. p1 := pts last - origin. pts do: [:p | bb drawFrom: p1 to: p - origin. p1 := p - origin]. arrowForm convexShapeFill: Color black. ^arrowForm offset: box topLeft! ! !RowLayout methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 8/15/2013 16:47' prior: 32297265! layout: aMorph in: layoutBounds "Compute the layout for the given morph based on the new bounds. Supports submorph hResizing, vResizing, cellInset, cellPositioning (top, *center, bottom*) and listCentering." | props spare extra height inset newBounds minExt fillCount x width| aMorph submorphs ifEmpty: [^self]. props := aMorph assureTableProperties. minExt := (aMorph minWidth@aMorph minHeight - aMorph extent + aMorph layoutBounds extent) max: 0@0. newBounds := layoutBounds origin extent: (layoutBounds extent max: minExt). width := 0. width := (self minExtentOf: aMorph in: newBounds) x. spare := newBounds width - width max: 0. fillCount := 0. spare > 0 ifTrue: [fillCount := aMorph submorphs inject: 0 into: [:tot :m | tot + (m hResizing == #spaceFill ifTrue: [1] ifFalse: [0])]. extra := fillCount = 0 ifTrue: [0] ifFalse: [spare // fillCount]. spare := spare - (fillCount - 1 * extra)] ifFalse: [extra := 0]. x := fillCount > 0 ifTrue: [newBounds left] ifFalse: [props listCentering == #center ifTrue: [newBounds center x - (width // 2)] ifFalse: [props listCentering == #bottomRight ifTrue: [newBounds right - width] ifFalse: [newBounds left]]]. height := newBounds height. inset := props cellInset isPoint ifTrue: [props cellInset x] ifFalse: [props cellInset]. aMorph submorphs with: cachedMinExtents do: [:m :ext | | pos vr box cell | width := m hResizing == #spaceFill ifTrue: [fillCount := fillCount - 1. ext x + (fillCount > 0 ifTrue: [spare] ifFalse: [extra])] ifFalse: [ext x]. cell := x@newBounds top extent: width@height. ((vr := m vResizing) == #shrinkWrap or: [m bounds ~= cell]) ifTrue: [((vr == #shrinkWrap) not and: [m extent = cell extent]) ifTrue: [m position: cell origin] ifFalse: [box := m bounds. m hResizing == #spaceFill ifTrue: [box := cell origin extent: cell width @ box height]. vr == #spaceFill ifTrue: [box := box origin extent: box width @ cell height]. vr == #shrinkWrap ifTrue:[box := box origin extent: box width @ ext y]. pos := props cellPositioning. box := box align: (box perform: pos) with: (cell perform: pos). m bounds: box]]. x := x + width + inset]! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 8/15/2013 19:46' prior: 45768990! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^6 @ 0 pair: 0 @ 0! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 8/15/2013 19:48' prior: 45770479! editableDropListMargins "Answer the text margins for an editable drop list for this theme." ^0 @ 3 pair: 2 @ 1! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'ChristopheDemarey 8/29/2013 17:26' prior: 38162256! buildFullDownButton ^ IconicButton new target: self; actionSelector: #fullDown; labelGraphic: (Smalltalk ui icons iconNamed: #bottomIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'ChristopheDemarey 8/29/2013 17:26' prior: 38162584! buildFullUpButton ^ IconicButton new target: self; actionSelector: #fullUp; labelGraphic: (Smalltalk ui icons iconNamed: #topIcon); color: Color transparent; extent: 24 @ 24; borderWidth: 0! ! !UIThemeVistary methodsFor: 'defaults' stamp: 'StephaneDucasse 8/15/2013 19:46' prior: 54128044! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^(1@0 pair: 0@0)! ! !MethodFinder methodsFor: 'initialize' stamp: 'StephaneDucasse 8/15/2013 18:27' prior: 45069971! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rectangle: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" colorNames indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !MethodFinder methodsFor: 'tests' stamp: 'StephaneDucasse 8/15/2013 18:27' prior: 26446836! testFromTuple: nth "verify that the methods allowed don't crash the system. Try N of each of the fundamental types. up to 4 of each kind." | objects nonRepeating even other aa cnt | objects := #((1 4 17 42) ($a $b $c $d) ('one' 'two' 'three' 'four') (x + rectangle: new) ((a b 1 4) (c 1 5) ($a 3 d) ()) (4.5 0.0 3.2 100.3) ). objects := objects, {{true. false. true. false}. {Point. SmallInteger. Association. Array}. {Point class. SmallInteger class. Association class. Array class}. "{ 4 blocks }." {Date today. '1 Jan 1950' asDate. '25 Aug 1987' asDate. '1 Jan 2000' asDate}. {'15:16' asTime. '1:56' asTime. '4:01' asTime. '6:23' asTime}. {Dictionary new. Dictionary new. Dictionary new. Dictionary new}. {#(a b 1 4) asOrderedCollection. #(c 1 5) asOrderedCollection. #($a 3 d) asOrderedCollection. #() asOrderedCollection}. {3->true. 5.6->$a. #x->2. 'abcd'->false}. {9 @ 3 extent: 5 @ 4. 0 @ 0 extent: 45 @ 9. -3 @ -7 extent: 2 @ 2. 4 @ 4 extent: 16 @ 16}. {Color red. Color blue. Color black. Color gray}}. self test2: objects. "rec+0, rec+1, rec+2, rec+3 need to be tested. " cnt := 0. nth to: 4 do: [:take | nonRepeating := OrderedCollection new. objects do: [:each | nonRepeating addAll: (each copyFrom: 1 to: take)]. "all combinations of take, from nonRepeating" even := true. nonRepeating combinations: take atATimeDo: [:tuple | even ifTrue: [other := tuple shallowCopy] ifFalse: [self load: (aa := Array with: tuple with: 1 with: other with: 7). (cnt := cnt+1) \\ 50 = 0 ifTrue: [ Transcript cr; show: aa first printString]. self search: true. self test2: aa. self test2: nonRepeating. "self test2: objects"]. even := even not]. ].! ! !MethodFinder methodsFor: 'debugging it' stamp: 'StephaneDucasse 8/15/2013 18:28' prior: 26407707! testRandom "verify that the methods allowed don't crash the system. Pick 3 or 4 from a mixed list of the fundamental types." "MethodFinder new testRandom" | objects other aa cnt take tuple fName sss | objects := #( #(1 4 17 42) #($a $b $c $d) #('one' 'two' 'three' 'four') #(#x #+ #rectangle: #new) #(#(#a #b 1 4) #(#c 1 5) #($a 3 #d) #()) #(4.5 0.0 3.2 100.3)). objects := objects , {{true. false. true. false}. {Point. SmallInteger. Association. Array}. {"{ 4 blocks }." (Point class). (SmallInteger class). (Association class). (Array class)}. "{ 4 blocks }." {(Date today). ('1 Jan 1950' asDate). ('25 Aug 1987' asDate). ('1 Jan 2000' asDate)}. {('15:16' asTime). ('1:56' asTime). ('4:01' asTime). ('6:23' asTime)}. {(Dictionary new). (Dictionary new). (Dictionary new). (Dictionary new)}. {(#(#a #b 1 4) asOrderedCollection). (#(#c 1 5) asOrderedCollection). (#($a 3 #d) asOrderedCollection). (#() asOrderedCollection)}. {(3 -> true). (5.6 -> $a). (#x -> 2). ('abcd' -> false)}. {(9 @ 3 extent: 5 @ 4). (0 @ 0 extent: 45 @ 9). (-3 @ -7 extent: 2 @ 2). (4 @ 4 extent: 16 @ 16)}. {(Color red). (Color blue). (Color black). (Color gray)}}. self test2: objects. "rec+0, rec+1, rec+2, rec+3 need to be tested. " fName := (FileSystem workingDirectory filesMatching: '*.ran') first basename. sss := fName splitInteger first. (Collection classPool at: #RandomForPicking) seed: sss. cnt := 0. [ take := #(3 4) atRandom. tuple := (1 to: take) collect: [ :ind | objects atRandom atRandom ]. other := (1 to: take) collect: [ :ind | objects atRandom atRandom ]. self load: (aa := Array with: tuple with: 1 with: other with: 7). (cnt := cnt + 1) \\ 10 = 0 ifTrue: [ Transcript cr; show: cnt printString; tab; tab; show: aa first printString ]. " | (cnt > Skip)" cnt > (Smalltalk globals at: #StopHere) ifTrue: [ self halt ]. "stop just before crash" cnt > (Smalltalk globals at: #Skip) ifTrue: [ "skip this many at start" self search: true. self test2: aa first. self test2: (aa at: 3) "self test2: objects" ]. true ] whileTrue! ! !SelectionMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 8/15/2013 18:29' prior: 32921649! extendByHand: aHand "Assumes selection has just been created and added to some pasteUp or world" | startPoint handle | startPoint := self position. handle := NewHandleMorph new followHand: aHand forEachPointDo: [:newPoint | | localPt | localPt := (self transformFrom: self world) globalPointToLocal: newPoint. self bounds: (startPoint rectangle: localPt) ] lastPointDo: [:newPoint | selectedItems isEmpty ifTrue: [self delete] ifFalse: [ selectedItems size = 1 ifTrue:[self delete. selectedItems anyOne addHalo] ifFalse:[self doneExtending] ] ]. aHand attachMorph: handle. handle startStepping.! ! !BalloonCanvas methodsFor: 'drawing' stamp: 'StephaneDucasse 8/15/2013 18:27' prior: 17900392! line: pt1 to: pt2 width: w color: c "Draw a line from pt1 to: pt2" (aaLevel = 1 and: [self ifNoTransformWithIn:(pt1 rectangle: pt2)]) ifTrue:[^super line: pt1 to: pt2 width: w color: c]. ^self drawPolygon: (Array with: pt1 with: pt2) color: c borderWidth: w borderColor: c! ! !Rectangle class methodsFor: 'instance creation' stamp: 'StephaneDucasse 8/15/2013 17:20' prior: 32193771! origin: originPoint extent: extentPoint "Answer an instance of me whose top left corner is originPoint and width by height is extentPoint. Note that extentPoint should be non negative since it represents the size of the rectangle" ^self basicNew setOrigin: originPoint corner: (originPoint x+ (extentPoint x max: 0)) @ (originPoint y + (extentPoint y max: 0)).! ! !Rectangle methodsFor: 'transforming' stamp: 'StephaneDucasse 8/15/2013 18:28' prior: 32182839! flipBy: direction centerAt: aPoint "Return a copy flipped #vertical or #horizontal, about aPoint." ^ (origin flipBy: direction centerAt: aPoint) rectangle: (corner flipBy: direction centerAt: aPoint)! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 8/15/2013 18:59' prior: 32172370! insetBy: delta "Answer a Rectangle that is inset from the receiver by delta. delta is a Rectangle, Point, or scalar." ^ delta insetRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 8/15/2013 18:51'! insetRectangle: aRectangle "Answer a rectangle whose size has been reduced by the receiver which represents each rectangle corner. The limitation is that since a rectangle topleft is always less than its bottomright you may have a some cases that are not possible to express. For that you should use a pointpair object instead of a rectangle." | left right top bottom | left := aRectangle left + self left. right :=aRectangle right - self right. top := aRectangle top + self top. bottom := aRectangle bottom - self bottom. ^ Rectangle origin: left@top extent: (right-left@(bottom-top)) ! ! !Rectangle methodsFor: 'transforming' stamp: 'StephaneDucasse 8/15/2013 18:28' prior: 32184119! rotateBy: direction centerAt: aPoint "Return a copy rotated #right, #left, or #pi about aPoint" ^ (origin rotateBy: direction centerAt: aPoint) rectangle: (corner rotateBy: direction centerAt: aPoint)! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 8/15/2013 18:29' prior: 32179566! withSideOrCorner: side setToPoint: newPoint minExtent: minExtent limit: limit "Return a copy with side set to newPoint" side = #top ifTrue: [^ self withTop: (newPoint y min: corner y - minExtent y max: limit + minExtent y)]. side = #bottom ifTrue: [^ self withBottom: (newPoint y min: limit - minExtent y max: origin y + minExtent y)]. side = #left ifTrue: [^ self withLeft: (newPoint x min: corner x - minExtent x max: limit + minExtent x)]. side = #right ifTrue: [^ self withRight: (newPoint x min: limit - minExtent x max: origin x + minExtent x)]. side = #topLeft ifTrue: [^ (newPoint min: corner - minExtent) corner: self bottomRight]. side = #bottomRight ifTrue: [^ self topLeft corner: (newPoint max: origin + minExtent)]. side = #bottomLeft ifTrue: [^ self topRight rectangle: ((newPoint x min: corner x - minExtent x) @ (newPoint y max: origin y + minExtent y))]. side = #topRight ifTrue: [^ self bottomLeft rectangle: ((newPoint x max: origin x + minExtent x) @ (newPoint y min: corner y - minExtent y))].! ! !UITheme methodsFor: 'label-styles' stamp: 'StephaneDucasse 8/15/2013 19:14' prior: 54021779! configureWindowLabelAreaFrameFor: aWindow "Configure the layout frame for the label area for the given window." |frame windowBorderWidth| aWindow labelArea ifNil: [^ self]. windowBorderWidth := aWindow class borderWidth. aWindow labelArea layoutPolicy: RowLayout new; cellPositioning: #topCenter; hResizing: #spaceFill; wrapCentering: #topLeft; layoutInset: (0@windowBorderWidth pair: 0@1). frame := (0@0 corner: 1@0) asLayoutFrame topOffset: aWindow labelHeight negated. aWindow labelArea layoutFrame: frame! ! !UITheme methodsFor: 'defaults' stamp: 'StephaneDucasse 8/15/2013 19:46' prior: 53956731! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^(1@0 pair: -1@0)! ! !UITheme methodsFor: 'defaults' stamp: 'StephaneDucasse 8/15/2013 19:48' prior: 53957099! editableDropListMargins "Answer the text margins for an editable drop list for this theme." ^0 @ 1 pair: 2 @ 1! ! !ScrollPane methodsFor: 'initialization' stamp: 'StephaneDucasse 8/15/2013 19:45' prior: 32853098! initializeScrollBars "initialize the receiver's scrollBar" (scrollBar := ScrollBar new model: self accessor: #vScrollBarValue) borderWidth: 1; borderColor: Color black. (hScrollBar := ScrollBar new model: self accessor: #hScrollBarValue) borderWidth: 1; borderColor: Color black. self initializeScroller. retractableScrollBar ifFalse: [ self addMorph: scrollBar; addMorph: hScrollBar ]. self alwaysShowVScrollbar ifTrue: [ self alwaysShowVScrollBar: true ]. self alwaysHideHScrollbar ifTrue: [ self hideHScrollBarIndefinitely: true ] ifFalse: [ self alwaysShowHScrollbar ifTrue: [ self alwaysShowHScrollBar: true ] ]! ! !ScrollPane methodsFor: 'geometry' stamp: 'StephaneDucasse 8/15/2013 19:42' prior: 32844735! innerBounds | inner | inner := super innerBounds. retractableScrollBar | (submorphs includes: scrollBar) not ifFalse:[ inner := (scrollBarOnLeft ifTrue: [ (inner left + scrollBar width) @ inner top corner: inner bottomRight] ifFalse: [inner topLeft corner: (inner right - scrollBar width) @ inner bottom]) ]. (retractableScrollBar | self hIsScrollbarShowing not) ifTrue: [^ inner] ifFalse: [^ inner topLeft extent: (inner extent - (0@self scrollBarThickness))]. ! ! ScrollBar removeSelector: #initializeEmbedded:! ThemeIcons removeSelector: #upFullIconContents! ThemeIcons removeSelector: #upFullIcon! ThemeIcons removeSelector: #downFullIconContents! ThemeIcons removeSelector: #downFullIcon! "Graphics-Tests"! "Kernel"! "Morphic-Base"! "Nautilus"! "NautilusCommon"! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(29 August 2013 10:10:48 pm) Pharo.image priorSource: 16100687! ----STARTUP----an Array(29 August 2013 10:16:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 August 2013 10:16:51 pm) Pharo-30359.image priorSource: 16143715! ----STARTUP----an Array(30 August 2013 9:56:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 8/30/2013 09:32' prior: 49655427! commentForCurrentUpdate ^ '- issue 11508 Fixing expandBy: to take into account PointPair (issue 2489 part three) https://pharo.fogbugz.com/default.asp?11508 - issue 11507 NautilusAbstractUI should be accept different classifiers https://pharo.fogbugz.com/default.asp?11507 - issue 11503 rename Methods into selectors https://pharo.fogbugz.com/default.asp?11503'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 8/30/2013 09:33'! script152 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.175.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.39.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.41.mcz Kernel-StephaneDucasse.1587.mcz KernelTests-StephaneDucasse.556.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.526.mcz NautilusCommon-StephaneDucasse.164.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-StephaneDucasse.201.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-StephaneDucasse.895.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.95.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1232.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-StephaneDucasse.110.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 8/30/2013 09:33'! update30360 "self new update30360" self withUpdateLog: '- issue 11508 Fixing expandBy: to take into account PointPair (issue 2489 part three) https://pharo.fogbugz.com/default.asp?11508 - issue 11507 NautilusAbstractUI should be accept different classifiers https://pharo.fogbugz.com/default.asp?11507 - issue 11503 rename Methods into selectors https://pharo.fogbugz.com/default.asp?11503'. self loadTogether: self script152 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI commentStamp: '' prior: 42096127! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !RGBehaviorDefinition methodsFor: 'accessing methods' stamp: 'StephaneDucasse 8/29/2013 21:02' prior: 31576684! methodsInProtocol: aString "Retrieves the methods classified in protocol named aString" ^methods select: [ :each | each protocol = aString ]! ! !ClassTestCase methodsFor: 'tests' stamp: 'StephaneDucasse 8/29/2013 20:54' prior: 42032177! testUnCategorizedMethods | uncategorizedMethods | uncategorizedMethods := self targetClass selectorsInProtocol: Protocol unclassified. self assert: uncategorizedMethods isEmpty description: uncategorizedMethods asString ! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 8/30/2013 08:54' prior: 32170317! expandBy: delta "Answer a Rectangle that is outset from the receiver by delta. delta is a Rectangle, Point, or scalar." "delta class = PointPair ifTrue: [^Rectangle origin: origin + delta point1 corner: corner - delta point2 ] ifFalse:[ (delta isRectangle) ifTrue: [^Rectangle origin: origin - delta origin corner: corner + delta corner] ifFalse: [^Rectangle origin: origin - delta corner: corner + delta]]" ^ delta expandRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 8/30/2013 08:35'! expandRectangle: aRectangle "Answer a rectangle whose size has been expanded by the receiver which represents each rectangle corner. The limitation is that since a rectangle topleft is always less than its bottomright you may have a some cases that are not possible to express. For that you should use a pointpair object instead of a rectangle." | left right top bottom | left := aRectangle left - self left. right :=aRectangle right + self right. top := aRectangle top - self top. bottom := aRectangle bottom + self bottom. ^ Rectangle origin: left@top extent: ((right-left) @ (bottom-top)) ! ! !PluggableTextFieldMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 8/30/2013 08:48' prior: 29533309! textMarginsWidth | tm | "hack to get the margins width because textMorph margins can be an integer, a point or a rectangle" tm := self textMorph margins. ^ tm class = PointPair ifTrue: [ tm point1 x] ifFalse: [ tm isRectangle ifTrue: [tm left] ifFalse: [tm isPoint ifTrue: [tm x] ifFalse: [tm]]]! ! !PointPair methodsFor: 'geometry' stamp: 'StephaneDucasse 8/30/2013 08:51'! expandRectangle: aRectangle "Answer a rectangle with sides, expanded by receiver. " | left right top bottom | left := aRectangle left - point1 x. right :=aRectangle right + point2 x. top := aRectangle top - point1 y. bottom := aRectangle bottom + point2 y. ^ Rectangle origin: left@top extent: ((right-left) @ (bottom-top)) ! ! !PointPair methodsFor: 'printing' stamp: 'StephaneDucasse 8/30/2013 08:43'! printOn: aStream aStream << point1 printString. aStream << ' pair: '. aStream << point2 printString. ! ! !AbstractNautilusUI commentStamp: '' prior: 49709965! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'StephaneDucasse 8/29/2013 22:17' prior: 42036334! categorizeAllUncategorizedMethods "Categorize methods by looking in parent classes for a method category." self selectedClass ifNotNil: [ :aClass | | methods | self flag: 'TODO: why the heck do all the methods.* methods return selectors??'. methods := aClass uncategorizedMethods collect: [ :selector| aClass >> selector ]. self classifier classifyAll: methods ]! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'StephaneDucasse 8/29/2013 22:15'! classifier ^ classifier! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'StephaneDucasse 8/29/2013 22:17'! classifier: aClassifier classifier := aClassifier! ! !AbstractNautilusUI methodsFor: 'initialization' stamp: 'StephaneDucasse 8/29/2013 22:18' prior: 48950259! initialize super initialize. cachedHierarchy := SortHierarchically new. groupsSelection := Dictionary new. packagesSelection := Dictionary new. classesSelection := Dictionary new. shouldUpdateTitle := true. testSemaphore := Semaphore new. sourceTextAreas := OrderedCollection new. contentSelection := nil. acceptor := ClassDefinitionAcceptor model: self. classifier := MethodClassifier new. ! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'StephaneDucasse 8/29/2013 20:58' prior: 17363113! moveCategory: anObject toTheClass: aClass | originClass methods | originClass := self selectedClass. methods := originClass methodsInProtocol: anObject. methods do: [:meth | self moveMethod: meth toTheClass: aClass autoRemove: true ]. (originClass methodsInProtocol: anObject) ifEmpty: [ originClass removeProtocol: anObject. self selectedCategory: nil ].! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'StephaneDucasse 8/29/2013 21:04' prior: 17363534! moveMethod: aMethod toTheClass: aClass autoRemove: autoRemove | newMethod shouldBeInstall | aMethod realClass = aClass ifTrue: [ ^ self ]. shouldBeInstall := aClass methodDict at: aMethod selector ifPresent: [:sel | " here I have to fork to release the drag & drop " [ (self openDialogWouldYouInstall: sel into: aClass) ifTrue: [ | originClass oldCategory | oldCategory := aMethod category. originClass := aMethod realClass. newMethod := aClass compile: aMethod sourceCode classified: oldCategory. self selectedMethod: nil. originClass removeSelector: aMethod selector. autoRemove ifTrue: [ (originClass selectorsInProtocol: oldCategory ) ifEmpty: [ originClass removeProtocol: oldCategory ]]]] fork] ifAbsent: [ | originClass oldCategory | oldCategory := aMethod category. originClass := aMethod realClass. newMethod := aClass compile: aMethod sourceCode classified: oldCategory. self selectedMethod: nil. originClass removeSelector: aMethod selector. autoRemove ifTrue: [ ( originClass selectorsInProtocol: oldCategory ) ifEmpty: [ originClass removeProtocol: oldCategory ]]]! ! !AbstractTool methodsFor: 'category' stamp: 'StephaneDucasse 8/29/2013 20:58' prior: 17441118! removeCategory: aCategory inClass: aClass aCategory ifNil: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. (aClass organization listAtCategoryNamed: aCategory) isEmpty ifTrue: [ aClass removeProtocol: aCategory. ^ true ]. (self confirm: 'Are you sure you want to remove the protocol ', aCategory,' and all its methods?') ifTrue: [ aClass removeProtocol: aCategory. ^ true ]. ^ false! ! !Browser methodsFor: 'message category functions' stamp: 'StephaneDucasse 8/29/2013 21:04' prior: 18477030! removeMessageCategory "If a message category is selected, create a Confirmer so the user can verify that the currently selected message category should be removed from the system. If so, remove it." | messageCategoryName | messageCategoryListIndex = 0 ifTrue: [^ self]. self okToChange ifFalse: [^ self]. messageCategoryName := self selectedMessageCategoryName. (self messageList isEmpty or: [self confirm: 'Are you sure you want to remove this method category and all its methods?']) ifTrue: [self selectedClassOrMetaClass removeProtocol: messageCategoryName. self messageCategoryListIndex: 0. self changed: #classSelectionChanged]. self changed: #messageCategoryList. ! ! !Number methodsFor: 'geometry' stamp: 'StephaneDucasse 8/30/2013 08:54'! expandRectangle: aRectangle "Answer a rectangle whose size has been expanded by the receiver from all sides" | newOrigin newCorner | newOrigin := aRectangle origin - self. newCorner := aRectangle corner + self. ^ Rectangle origin: newOrigin extent: (newCorner - newOrigin) ! ! !RBBrowserEnvironmentTest methodsFor: 'testing-environments' stamp: 'StephaneDucasse 8/29/2013 20:52' prior: 30354146! testOrEnvironment | env1 env2 orEnvironment | env2 := #printOn:. env2 := universalEnvironment forClass: Object selectors: #(#fullPrintString). env1 := universalEnvironment forClass: Object selectors: #(#printOn:). self assert: (env1 | env2) numberSelectors = 2. self assert: (env2 | env1) numberSelectors = 2. self universalTestFor: env1 | env2. self assert: (env1 | env1) numberSelectors = 1. orEnvironment := env1 | env1 not. self universalTestFor: orEnvironment. self assert: orEnvironment numberSelectors = universalEnvironment numberSelectors. self assert: orEnvironment classNames asSortedCollection = universalEnvironment classNames asSortedCollection. self assert: (orEnvironment protocolsFor: Object) = ((universalEnvironment protocolsFor: Object) reject: [:each| (Object allSelectorsInProtocol: each) isEmpty ]) ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'StephaneDucasse 8/29/2013 20:57' prior: 31976334! systemClassReorganizedActionFromBis: ann "only to keep old code somewhere" "when a class is reorganized, we have to check if an extension has not been added" |class| self flag: 'Not sure this method is usefull. If we remove a category, it seems that we will remove the methods inside, therefore the remove method announcement will do the job. Then all other modifications does not impact the packages'. "The event ReorganizedEvent is lauched for several cases: - we rename a protocol (see 'renameCategory:toBe: '). if The category is not empty, SystemMethodRecategorizedAnnouncement will also be emitted // THE WORK WILL BE DONE BY SystemMethodRecategorizedAnnouncement - we sort (modify the order of) protocols (see 'sortCategories') // WE DON'T CARE HERE - we add a protocol (see 'addCategory:before:') // WE DON'T CARE HERE' - we remove a protocol (see 'removeCategory:' 'removeEmptyCategories') // THE WORK SHOULD BE DONE BY SystemMethodRemovedAnnouncement So the work here is quite big :) The event only provide a reference to the class that has been modified. So I guess we have to: => we check that each extending rPackage contain all methods from the corresponding extension category (as extension methods) => the parentPackage of the class includes all methods defined in classic categories ". class := ann methodClass. class organization categories do: [:aString | (aString beginsWith: '*') ifTrue: [ "here we deal with extension-categories" |extendingPackageName extendingPackage| extendingPackageName := aString copyWithout: $*. extendingPackage := self packageMatchingExtensionName: extendingPackageName. extendingPackage ifNotNil: [ "we check that all extension method for this classs in the rpackage correspond to all methods in the extension category" (class selectorsInProtocol: aString) do: [ :aSelector | "If the method origin is not the one of the event, we do not care about that method" (class >> aSelector) origin = ann methodClass ifFalse: [^self]. ((extendingPackage extensionMethodsForClass: class) includes: (class methodDict at: aSelector)) ifFalse: [ "if a method has not been yet registered in the rPackage, we add it" ((class methodDict at: aSelector) packageFromOrganizer: self ) removeMethod: (class methodDict at: aSelector). extendingPackage addMethod: (class methodDict at: aSelector). ] ] ] ] ifFalse: [ "here we deal with classic categories" (class selectorsInProtocol: aString) do: [ :aMethodSelector | "aMethodSelector can come from a trait used by class. Such a method should always belong to to the trait and therefore to the parent package of the trait" (class traitOrClassOfSelector: aMethodSelector) = class ifFalse: [^self]. ((class package definedMethodsForClass: class) includes: (class methodDict at: aMethodSelector ) ) ifFalse: [ ((class methodDict at: aMethodSelector) packageFromOrganizer: self) removeMethod: (class methodDict at: aMethodSelector). class package addMethod: (class methodDict at: aMethodSelector) ] ] ] ]. ! ! !PackageClassNodeExample methodsFor: 'menu' stamp: 'StephaneDucasse 8/29/2013 20:55' prior: 46332580! methodsInCategory: aCat ^ self item selectorsInProtocol: aCat! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'StephaneDucasse 8/29/2013 20:55' prior: 19261221! testAllMethodCategoriesIntegratedThrough "If this test fails, it may be because method protocols are sorted in #allMethodCategoriesIntegratedThrough. Take care that if the protocols of the class under test are already sorted, you won't see any problem." self assert: ((CompiledMethod selectorsInProtocol: 'testing') includes: #isAbstract). CompiledMethod allProtocolsUpTo: Object. self assert: ((CompiledMethod selectorsInProtocol: 'testing') includes: #isAbstract)! ! !PackageMethodCategoryNodeExample methodsFor: 'accessing' stamp: 'StephaneDucasse 8/29/2013 20:55' prior: 46332932! childrenItems ^ self parentNode item selectorsInProtocol: self item! ! !MethodClassifier class methodsFor: 'classification' stamp: 'StephaneDucasse 8/29/2013 22:03' prior: 26344429! classifyAll: aCollectionOfMethods ^ self new classifyAll: aCollectionOfMethods! ! !MethodClassifier methodsFor: 'classification' stamp: 'StephaneDucasse 8/29/2013 22:03'! classifyAll: aCollectionOfMethods aCollectionOfMethods do: [ :method | self classify: method ]! ! !Point methodsFor: 'geometry' stamp: 'StephaneDucasse 8/30/2013 08:27'! expandRectangle: aRectangle "Answer a rectangle whose size has been expanded by the receiver which represents the x and y amount to expand from both sides." | newOrigin newCorner | newOrigin := aRectangle origin - self. newCorner := aRectangle corner + self. ^ Rectangle origin: newOrigin extent: (newCorner - newOrigin) ! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'StephaneDucasse 8/29/2013 21:02' prior: 44754930! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self methodDict at: each) ]! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'StephaneDucasse 8/29/2013 21:07' prior: 31849821! testReorganizeClassByRemovingClassicCategoryRemoveMethodsFromTheParentPackage "test that when we reoganized a class by removing a classic category (a category not beginning with '*'), the methods from this category are removed from the parent RPackage of the class" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: 'XXXXX'. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class removeProtocol: 'classic category'. self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'StephaneDucasse 8/29/2013 21:07' prior: 31850592! testReorganizeClassByRemovingExtensionCategoryRemoveMethodsFromTheExtendingPackage "test that when we reoganized a class by removing an extension category (a category beginning with '*'), all the methods that were inside are removed from the extending package" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class removeProtocol: '*yyyyy'. self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class).! ! !CompilerExceptionsTest methodsFor: 'compiling' stamp: 'StephaneDucasse 8/29/2013 21:06' prior: 19921290! removeGeneratedMethods self class removeProtocol: 'generated'! ! !FileContentsBrowser methodsFor: 'removing' stamp: 'StephaneDucasse 8/29/2013 21:05' prior: 21805316! removeMessageCategory "If a message category is selected, create a Confirmer so the user can verify that the currently selected message category should be removed from the system. If so, remove it." | messageCategoryName | messageCategoryListIndex = 0 ifTrue: [^ self]. self okToChange ifFalse: [^ self]. messageCategoryName := self selectedMessageCategoryName. (self messageList size = 0 or: [self confirm: 'Are you sure you want to remove this method category and all its methods?']) ifFalse: [^ self]. self selectedClassOrMetaClass removeProtocol: messageCategoryName. self messageCategoryListIndex: 0. self changed: #messageCategoryList.! ! !FileContentsBrowser methodsFor: 'removing' stamp: 'StephaneDucasse 8/29/2013 21:05' prior: 21806053! removePackage systemCategoryListIndex = 0 ifTrue: [^ self]. self okToChange ifFalse: [^ self]. (self confirm: 'Are you sure you want to remove this package and all its classes?') ifFalse:[^self]. (systemOrganizer listAtCategoryNamed: self selectedSystemCategoryName) do:[:el| systemOrganizer removeElement: el]. self packages removeKey: self selectedPackage packageName. systemOrganizer removeProtocol: self selectedSystemCategoryName. self systemCategoryListIndex: 0. self changed: #systemCategoryList! ! !TClassDescription methodsFor: 'deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:38' prior: 40844043! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !TClassDescription methodsFor: 'deprecated30' stamp: 'StephaneDucasse 8/29/2013 20:39' prior: 42018773! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 19:37'! allProtocolsUpTo: mostGenericClass "Answer a list of all the method protocols of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 20:39'! allSelectorsInProtocol: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the protocol named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! !TClassDescription methodsFor: 'deprecated30' stamp: 'StephaneDucasse 8/29/2013 17:25' prior: 44531871! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !TClassDescription methodsFor: 'deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:26' prior: 44525154! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 19:26'! removeProtocol: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 17:21'! selectorsInCategory: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 17:24'! selectorsInProtocol: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !TClassDescription methodsFor: 'deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:25' prior: 44528544! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !TClassDescription methodsFor: 'accessing method dictionary' stamp: 'StephaneDucasse 8/29/2013 19:24'! uncategorizedSelectors ^ self selectorsInProtocol: Protocol unclassified! ! !OCCompilerExceptionsTest methodsFor: 'compiling' stamp: 'StephaneDucasse 8/29/2013 21:06' prior: 39227307! removeGeneratedMethods self class removeProtocol: 'generated'! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self methodDict at: each) ]! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self methodDict at: each) ]! ! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !Trait method! allProtocolsUpTo: mostGenericClass "Answer a list of all the method protocols of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! !Trait method! allProtocolsUpTo: mostGenericClass "Answer a list of all the method protocols of the receiver and all its superclasses, up through mostGenericClass" | otherClassCategories thisClassCategories lowercaseSortBlock | otherClassCategories := OrderedCollection new. lowercaseSortBlock := [ :a :b | a asLowercase <= b asLowercase ]. (self allSuperclassesIncluding: mostGenericClass) do: [ :aClass | otherClassCategories addAll: aClass organization categories ]. otherClassCategories remove: 'no messages' ifAbsent: [ ]. thisClassCategories := self organization categories sorted: lowercaseSortBlock. ^ thisClassCategories , ((otherClassCategories asSet removeAllSuchThat: [ :each | thisClassCategories includes: each ]) sorted: lowercaseSortBlock)! ! !Trait method! allSelectorsInProtocol: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the protocol named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! !Trait method! allSelectorsInProtocol: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the protocol named aName" | aColl | aColl := OrderedCollection new. self withAllSuperclasses do: [:aClass | aColl addAll: (aClass organization listAtCategoryNamed: aName) ]. ^ aColl asSet asArray sort! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !Trait method! removeProtocol: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! removeProtocol: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." | categoryName | categoryName := aString asSymbol. (self organization listAtCategoryNamed: categoryName) do: [:sel | self removeSelector: sel]. self organization removeCategory: categoryName! ! !Trait method! selectorsInCategory: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! selectorsInCategory: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! selectorsInProtocol: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! selectorsInProtocol: aName "Answer a list of the selectors of the receiver that are in category named aName" | aColl | aColl := Set withAll: (self organization listAtCategoryNamed: aName). ^ aColl asArray sort! ! !Trait method! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !Trait method! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !Trait method! uncategorizedSelectors ^ self selectorsInProtocol: Protocol unclassified! ! !Trait method! uncategorizedSelectors ^ self selectorsInProtocol: Protocol unclassified! ! "CompilerTests"! "Kernel"! "KernelTests"! "Morphic-Examples"! "Nautilus"! "OpalCompiler-Tests"! "Polymorph-Widgets"! "RPackage-SystemIntegration"! "Refactoring-Tests-Environment"! "Ring-Core-Kernel"! "SUnit-Core"! "System-Support"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(30 August 2013 9:56:44 am) Pharo.image priorSource: 16143920! ----STARTUP----an Array(30 August 2013 10:02:49 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 August 2013 10:02:50 am) Pharo-30360.image priorSource: 16185809! ----STARTUP----an Array(31 August 2013 1:29:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/31/2013 13:27' prior: 49698660! commentForCurrentUpdate ^ '11512 CI: Release tests are being run multiple times https://pharo.fogbugz.com/f/cases/11512 11500 Wrong use of #defer: causes growing stack in CommandLineHandler https://pharo.fogbugz.com/f/cases/11500 11499 CMD-Click is very slow in Nautilus https://pharo.fogbugz.com/f/cases/11499/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/31/2013 13:27'! script153 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-StephaneDucasse.625.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.175.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.39.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1587.mcz KernelTests-StephaneDucasse.556.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.526.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-StephaneDucasse.201.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.896.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.95.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1232.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/31/2013 13:27'! update30361 "self new update30361" self withUpdateLog: '11512 CI: Release tests are being run multiple times https://pharo.fogbugz.com/f/cases/11512 11500 Wrong use of #defer: causes growing stack in CommandLineHandler https://pharo.fogbugz.com/f/cases/11500 11499 CMD-Click is very slow in Nautilus https://pharo.fogbugz.com/f/cases/11499/ '. self loadTogether: self script153 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HDTestReport class methodsFor: 'running' stamp: 'CamilloBruni 8/30/2013 13:37' prior: 23134215! runPackage: aString ^ self runClasses: (RPackage organizer packageNamed: aString) definedClasses named: aString! ! !UIManager methodsFor: 'ui process' stamp: 'CamilloBruni 8/29/2013 16:30' prior: 53901034! defer: aBlock " Evaluate the given Block in the UI thread as soon as there is nothing scheduled." WorldState defer: aBlock! ! !RBBrowserEnvironment methodsFor: '*NautilusCommon' stamp: 'CamilloBruni 8/29/2013 15:53' prior: 30326801! asSystemNavigationEnvironment | env globalsNames | "Optimization for the default environment AKA Smalltalk" self class == RBBrowserEnvironment ifTrue: [ ^ Smalltalk globals ]. env := SystemDictionary new. self classesDo: [:each | env add: ( Smalltalk globals associationAt: each theNonMetaClass name )]. self traitsDo: [:each | env add: ( Smalltalk globals associationAt: each name )]. globalsNames := Smalltalk globals keys asOrderedCollection. globalsNames removeAll: ( Smalltalk globals classNames ). globalsNames removeAll: ( Smalltalk globals traitNames ). globalsNames do: [:each | env add: ( Smalltalk globals associationAt: each )]. ^ env! ! MorphicUIManager removeSelector: #defer:! "HudsonBuildTools20"! "NautilusCommon"! "Polymorph-Widgets"! "UIManager"! ----End fileIn----! ----QUIT----an Array(31 August 2013 1:29:27 pm) Pharo.image priorSource: 16186013! ----STARTUP----an Array(31 August 2013 1:35:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 August 2013 1:35:23 pm) Pharo-30361.image priorSource: 16198805! ----STARTUP----an Array(31 August 2013 5:32:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 8/31/2013 17:30' prior: 49740750! commentForCurrentUpdate ^ '11510 Endless loop trying to get a menu on AbstractNautilusUI https://pharo.fogbugz.com/f/cases/11510 11518 Failing test: .testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/11518 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 8/31/2013 17:30'! script154 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.627.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.175.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.39.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1587.mcz KernelTests-StephaneDucasse.556.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.528.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-StephaneDucasse.54.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-StephaneDucasse.201.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.896.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.95.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.132.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1232.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 8/31/2013 17:30'! update30362 "self new update30362" self withUpdateLog: '11510 Endless loop trying to get a menu on AbstractNautilusUI https://pharo.fogbugz.com/f/cases/11510 11518 Failing test: .testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/11518 '. self loadTogether: self script154 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'SebastianTleye 8/30/2013 10:43'! analyzeSubMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNil: [^target]. target selectedClass buildAnalyzeSubMenu: aBuilder.! ! !Trait method! testSwapWith "self debug: #testSwapWith" | result index | index := self indexArray anyOne. result:= self nonEmpty copy . result swap: index with: 1. self assert: (result at: index) = (self nonEmpty at:1). self assert: (result at: 1) = (self nonEmpty at: index). ! ! OrderedCollectionTest removeSelector: #testSwapWith! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. self shouldnt: [ | res | res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection ] raise: Error. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! OrderedCollectionTest removeSelector: #testRemoveAllFoundIn! !Trait method! testRemoveAllError "self debug: #testRemoveElementThatExists" | el aSubCollection | el := self elementNotIn. aSubCollection := self nonEmptyWithoutEqualElements copyWith: el. self should: [ | res | res := self nonEmptyWithoutEqualElements removeAll: aSubCollection ] raise: Error! ! OrderedCollectionTest removeSelector: #testRemoveAllError! !Trait method! testLastIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection last. self assert: (collection lastIndexOf: element startingAt: collection size ifAbsent: [ 99 ]) = collection size. self assert: (collection lastIndexOf: element startingAt: collection size - 1 ifAbsent: [ 99 ]) = 99. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing startingAt: collection size ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testLastIndexOfStartingAt! !Trait method! testLastIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element ifAbsent: [ 99 ]) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testLastIndexOfIfAbsent! !Trait method! testLastIndexOf "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection lastIndexOf: element) = 1. self assert: (collection lastIndexOf: self elementNotInForIndexAccessing) = 0! ! OrderedCollectionTest removeSelector: #testLastIndexOf! !Trait method! testIndexOfSubCollectionStartingAtIfAbsent "self debug: #testIndexOfIfAbsent" | index absent subcollection collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 1 ifAbsent: [ absent := true ]. self assert: absent = false. absent := false. index := collection indexOfSubCollection: subcollection startingAt: 2 ifAbsent: [ absent := true ]. self assert: absent = true! ! OrderedCollectionTest removeSelector: #testIndexOfSubCollectionStartingAtIfAbsent! !Trait method! testIndexOfSubCollectionStartingAt "self debug: #testIndexOfIfAbsent" | subcollection index collection | collection := self collectionMoreThan1NoDuplicates. subcollection := self collectionMoreThan1NoDuplicates. index := collection indexOfSubCollection: subcollection startingAt: 1. self assert: index = 1. index := collection indexOfSubCollection: subcollection startingAt: 2. self assert: index = 0! ! OrderedCollectionTest removeSelector: #testIndexOfSubCollectionStartingAt! !Trait method! testIndexOfStartingAt "self debug: #testLastIndexOf" | element collection | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection indexOf: element startingAt: 2 ifAbsent: [ 99 ]) = 99. self assert: (collection indexOf: element startingAt: 1 ifAbsent: [ 99 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing startingAt: 1 ifAbsent: [ 99 ]) = 99! ! OrderedCollectionTest removeSelector: #testIndexOfStartingAt! !Trait method! testIndexOfIfAbsent "self debug: #testIndexOfIfAbsent" | collection | collection := self collectionMoreThan1NoDuplicates. self assert: (collection indexOf: collection first ifAbsent: [ 33 ]) = 1. self assert: (collection indexOf: self elementNotInForIndexAccessing ifAbsent: [ 33 ]) = 33! ! OrderedCollectionTest removeSelector: #testIndexOfIfAbsent! !Trait method! testIndexOf "self debug: #testIndexOf" | tmp index collection | collection := self collectionMoreThan1NoDuplicates. tmp := collection size. collection reverseDo: [ :each | each = self elementInForIndexAccessing ifTrue: [ index := tmp ]. tmp := tmp - 1 ]. self assert: (collection indexOf: self elementInForIndexAccessing) = index! ! OrderedCollectionTest removeSelector: #testIndexOf! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! OrderedCollectionTest removeSelector: #testIdentityIndexOfIAbsent! !Trait method! testIdentityIndexOf "self debug: #testIdentityIndexOf" | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element) = (collection indexOf: element)! ! OrderedCollectionTest removeSelector: #testIdentityIndexOf! !Trait method! testCopyNonEmptyWithoutNotIncluded "self debug: #testCopyNonEmptyWithoutNotIncluded" | res | res := self nonEmpty copyWithout: self elementToAdd. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self nonEmpty do: [ :each | self assert: (res includes: each) ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWithoutNotIncluded! !Trait method! testCopyNonEmptyWithoutAll "self debug: #testCopyNonEmptyWithoutAll" | res | res := self nonEmpty copyWithoutAll: self collectionWithElementsToRemove. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self collectionWithElementsToRemove do: [ :each | self deny: (res includes: (each)) ]. self nonEmpty do: [ :each | (self collectionWithElementsToRemove includes: each) ifFalse: [ self assert: (res includes: each) ] ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWithoutAll! !Trait method! testCopyNonEmptyWith "self debug: #testCopyNonEmptyWith" | res anElement | anElement := self elementToAdd . res := self nonEmpty copyWith: anElement. "here we do not test the size since for a non empty set we would get a problem. Then in addition copy is not about duplicate management. The element should be in at the end." self assert: (res includes: (anElement value)). self nonEmpty do: [ :each | res includes: each ]! ! OrderedCollectionTest removeSelector: #testCopyNonEmptyWith! !Trait method! testCopyEmptyWithoutAll "self debug: #testCopyEmptyWithoutAll" | res | res := self empty copyWithoutAll: self collectionWithElementsToRemove. self assert: res size = self empty size. self collectionWithElementsToRemove do: [ :each | self deny: (res includes: each) ]! ! OrderedCollectionTest removeSelector: #testCopyEmptyWithoutAll! !Trait method! testCopyEmptyWithout "self debug: #testCopyEmptyWithout" | res | res := self empty copyWithout: self elementToAdd. self assert: res size = self empty size. self deny: (res includes: self elementToAdd)! ! OrderedCollectionTest removeSelector: #testCopyEmptyWithout! !Trait method! testCopyEmptyWith "self debug: #testCopyWith" | res anElement | anElement := self elementToAdd. res := self empty copyWith: anElement. self assert: res size = (self empty size + 1). self assert: (res includes: (anElement value))! ! OrderedCollectionTest removeSelector: #testCopyEmptyWith! !Trait method! testAsSortedArray | result collection | collection := self collectionWithSortableElements . result := collection asArray sort. self assert: (result class includesBehavior: Array). self assert: result isSorted. self assert: result size = collection size! ! OrderedCollectionTest removeSelector: #testAsSortedArray! !Trait method! collectionWithIdentical "return a collection of type : 'self collectionWIithoutEqualsElements class containing two elements equals ( with identity equality)" | result collection anElement | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. anElement := collection first. collection add: anElement. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! OrderedCollectionTest removeSelector: #collectionWithIdentical! !Trait method! collectionWithCopy "return a collection of type 'self collectionWIithoutEqualsElements class' containing no elements equals ( with identity equality) but 2 elements only equals with classic equality" | result collection | collection := OrderedCollection withAll: self elementsCopyNonIdenticalWithoutEqualElements. collection add: collection first copy. result := self elementsCopyNonIdenticalWithoutEqualElements class withAll: collection. ^ result! ! OrderedCollectionTest removeSelector: #collectionWithCopy! !Trait method! testIdentityIndexOfIAbsent | collection element | collection := self collectionMoreThan1NoDuplicates. element := collection first. self assert: (collection identityIndexOf: element ifAbsent: [ 0 ]) = 1. self assert: (collection identityIndexOf: self elementNotInForIndexAccessing ifAbsent: [ 55 ]) = 55! ! ArrayTest removeSelector: #testIdentityIndexOfIAbsent! AbstractNautilusUI class removeSelector: #buildAnalyzeSubMenu:! SortedCollectionTest removeSelector: #testLastIndexOfIfAbsent! "CollectionsTests"! "Nautilus"! ----End fileIn----! ----QUIT----an Array(31 August 2013 5:32:24 pm) Pharo.image priorSource: 16199008! ----STARTUP----an Array(31 August 2013 5:38:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 August 2013 5:38:12 pm) Pharo-30362.image priorSource: 16221089! ----STARTUP----an Array(2 September 2013 2:36:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(2 September 2013 2:36:18 pm) Pharo.image priorSource: 16221292! ----STARTUP----an Array(2 September 2013 2:44:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 September 2013 2:44:11 pm) Pharo-30362.image priorSource: 16221507! ----STARTUP----an Array(2 September 2013 4:31:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/2/2013 16:28' prior: 49753744! commentForCurrentUpdate ^ '11524 MessageBrowser new protocol method https://pharo.fogbugz.com/f/cases/11524 11523 SystemNavigation small refactoring https://pharo.fogbugz.com/f/cases/11523 11498 Be able to set an initial filter in ListDialogWindow https://pharo.fogbugz.com/f/cases/11498 11522 NewList separator support https://pharo.fogbugz.com/f/cases/11522'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/2/2013 16:28'! script155 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.627.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.175.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.39.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1587.mcz KernelTests-StephaneDucasse.556.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.528.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-StephaneDucasse.201.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.898.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.95.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-StephaneDucasse.230.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.29.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1233.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/2/2013 16:28'! update30363 "self new update30363" self withUpdateLog: '11524 MessageBrowser new protocol method https://pharo.fogbugz.com/f/cases/11524 11523 SystemNavigation small refactoring https://pharo.fogbugz.com/f/cases/11523 11498 Be able to set an initial filter in ListDialogWindow https://pharo.fogbugz.com/f/cases/11498 11522 NewList separator support https://pharo.fogbugz.com/f/cases/11522'. self loadTogether: self script155 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewListAdapter commentStamp: '' prior: 42505194! NewListAdapter is used to link the model and the list. It holds the "pluggable" part of the widget, aka the definition of the API! !MessageBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:00'! resetSelection listModel resetSelection! ! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 6/21/2013 00:07'! separatorAfter: item at: index ^ self model separatorAfter: item at: index! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'BenjaminVanRyseghem 6/20/2013 23:52'! allAccessesTo: instVarName from: aClass | coll | coll := OrderedCollection new. aClass withAllSubAndSuperclassesDo: [ :class | (class whichSelectorsAccess: instVarName) do: [ :sel | coll add: (self createMethodNamed: sel realParent: class) ] ]. ^ coll! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'BenjaminVanRyseghem 6/20/2013 23:52' prior: 51526255! browseAllAccessesTo: instVarName from: aClass "Create and schedule a Message Set browser for all the receiver's methods or any methods of a subclass/superclass that refer to the instance variable name." "self new browseAllAccessesTo: 'contents' from: Collection." | coll | coll := self allAccessesTo: instVarName from: aClass. ^ self browseMessageList: coll name: 'Accesses to ' , instVarName autoSelect: instVarName! ! !ListDialogWindow methodsFor: 'protocol' stamp: 'ChristopheDemarey 8/29/2013 13:15'! initialFilter: aString searchMorph content: aString.! ! !NewListRenderer methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 6/21/2013 00:06' prior: 39399439! drawOn: aCanvas | first last | aCanvas fillRectangle: self fullBounds color: self drawColor. first := self topVisibleIndexForCanvas: aCanvas. last := self bottomVisibleIndexForCanvas: aCanvas. self listSize isZero ifTrue: [ last := 0 ]. first to: last do: [ :index || item | item := self itemAtIndex: index. self drawBackgroundForItem: item at: index on: aCanvas. self drawItem: item at: index on: aCanvas. (self separatorAfter: item at: index) ifTrue: [ self drawSeparatorForItem: item at: index on: aCanvas ]]. self hasHeader ifTrue: [ self drawHeaderOn: aCanvas ].! ! !NewListRenderer methodsFor: 'drawing - item' stamp: 'BenjaminVanRyseghem 6/21/2013 00:18'! drawSeparatorForItem: item at: index on: aCanvas | frame rectangle height separatorColor | height := self separatorSize. separatorColor := self separatorColor. frame := self selectionFrameForItem: item at: index. rectangle := (frame left@(frame bottom - height)) corner: (frame right@frame bottom). aCanvas fillRectangle: rectangle color: separatorColor! ! !NewListRenderer methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 6/21/2013 00:07'! separatorAfter: item at: index ^ self listSource separatorAfter: item at: index! ! !NewListRenderer methodsFor: 'drawing - private' stamp: 'BenjaminVanRyseghem 6/21/2013 00:17'! separatorColor ^ Color black! ! !NewListRenderer methodsFor: 'drawing - private' stamp: 'BenjaminVanRyseghem 6/21/2013 00:17'! separatorSize ^ 1! ! !NewListAdapter commentStamp: '' prior: 49787727! NewListAdapter is used to link the model and the list. It holds the "pluggable" part of the widget, aka the definition of the API! !NewListAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/21/2013 00:09' prior: 48942222! initialize "Initialization code for NewListAdapter" super initialize. doubleClickSelector := nil asValueHolder. dragItemSelector := nil asValueHolder. dropItemSelector := nil asValueHolder. getDisplaySelector := nil asValueHolder. getHeaderTitleSelector := nil asValueHolder. getMenuSelector := nil asValueHolder. getIndexSelector := nil asValueHolder. getItemAtIndexSelector := nil asValueHolder. getItemsSelector := nil asValueHolder. getListSizeSelector := nil asValueHolder. keyStrokeSelector := nil asValueHolder. lastKeystrokeTime := nil asValueHolder. lastKeystrokes := nil asValueHolder. model := nil asValueHolder. list := nil asValueHolder. setIndexSelector := nil asValueHolder. wantsDropSelector := nil asValueHolder. getMenuTitleSelector := nil asValueHolder. getIconSelector := nil asValueHolder. getIconMaxSizeSelector := nil asValueHolder. getIndexesSelector := nil asValueHolder. separatorSelector := nil asValueHolder! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:08'! separatorAfter: item at: index ^ separatorSelector ifNotNil: [ self model perform: separatorSelector with: item with: index ]! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/21/2013 00:09'! separatorSelector ^ separatorSelector contents! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/21/2013 00:08'! separatorSelector: anObject separatorSelector contents: anObject! ! "NewList"! "Polymorph-Widgets"! "Spec-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(2 September 2013 4:31:30 pm) Pharo.image priorSource: 16221714! ----STARTUP----an Array(2 September 2013 4:37:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 September 2013 4:37:19 pm) Pharo-30363.image priorSource: 16238228! ----STARTUP----an Array(3 September 2013 10:40:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/3/2013 10:38' prior: 49776453! commentForCurrentUpdate ^ '11525 TabModel improved https://pharo.fogbugz.com/f/cases/11525 11527 Inspector List Broken due to changes in NewListModel https://pharo.fogbugz.com/f/cases/11527 11526 Improve Tabs https://pharo.fogbugz.com/f/cases/11526'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/3/2013 10:38'! script156 ^ 'AST-Core-MarcusDenker.189.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.84.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-EstebanLorenzano.14.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-EstebanLorenzano.2.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-StephaneDucasse.277.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.627.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-StephaneDucasse.175.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-EstebanLorenzano.58.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.333.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.157.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.39.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-StephaneDucasse.22.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1587.mcz KernelTests-StephaneDucasse.556.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-StephaneDucasse.154.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-EstebanLorenzano.9.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-StephaneDucasse.74.mcz Multilingual-Encodings-MarcusDenker.39.mcz Multilingual-Languages-EstebanLorenzano.34.mcz Multilingual-Tests-MarcusDenker.29.mcz Multilingual-TextConversion-StephaneDucasse.58.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.528.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.81.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-StephaneDucasse.201.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.898.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.114.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-StephaneDucasse.60.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.29.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.52.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-StephaneDucasse.95.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.23.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-StephaneDucasse.104.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.64.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-StephaneDucasse.618.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1233.mcz ToolsTest-StephaneDucasse.denker.57.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/3/2013 10:38'! update30364 "self new update30364" self withUpdateLog: '11525 TabModel improved https://pharo.fogbugz.com/f/cases/11525 11527 Inspector List Broken due to changes in NewListModel https://pharo.fogbugz.com/f/cases/11527 11526 Improve Tabs https://pharo.fogbugz.com/f/cases/11526'. self loadTogether: self script156 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewListModel commentStamp: '' prior: 42505533! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !NewListModel commentStamp: '' prior: 49804216! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10' prior: 48901103! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. separatorBlock := [ false ] asValueHolder. self registerEvents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10'! separatorAfter: item at: index ^ self separatorBlock cull: item cull: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10'! separatorBlock ^ separatorBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10'! separatorBlock: aBlock separatorBlock contents: aBlock! ! !TabManagerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/20/2013 00:15' prior: 40132612! defaultSpec ^ SpecLayout new type: #TabManager; send: #setTabs: withArguments: #(#(model getTabs)); send: #when:send:to: withArguments: #(tabSelected tabSelected: model); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !TabManagerModel methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50' prior: 45495729! addDependent: aMorph self myDependents add: aMorph! ! !TabManagerModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 6/20/2013 01:38' prior: 40133276! getTabs ^ [ self tabs collect: [ :each | each ensureWidget ] ]! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/2/2013 12:50' prior: 48911665! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. tabSelectedAction := [] asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: self getTabs value ] ].! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 01:48'! selectTabModel: tabModel tabSelectedAction contents cull: tabModel cull: self! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:17'! selectedTab ^ self widget ifNil: [ nil ] ifNotNil: [ :w || tab | tab := w selectedTab. self tabModelFor: tab ]! ! !TabManagerModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/20/2013 00:17'! tabModelFor: tab ^ tabs detect: [ :e | e widget = tab ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:18'! tabSelected: aTab tabSelectedAction contents cull: (self tabModelFor: aTab) cull: self! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:13'! tabSelectedAction ^ tabSelectedAction contents! ! !TabManagerModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 6/20/2013 00:13'! whenTabSelected: aBlock tabSelectedAction contents: aBlock! ! !TabModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/19/2013 23:59' prior: 49361927! defaultSpec ^ SpecLayout new type: #Tab; send: #label: withArguments: #(#(model label)); send: #icon: withArguments: #(#(model icon)); send: #retrievingBlock: withArguments: #(#(model retrievingBlock)); send: #morph: withArguments: #(#(model morph)); send: #menu: withArguments: #(#(model menu)); send: #closeable: withArguments: #(#(model closeable)); send: #setActionsFrom: withArguments: #(#(model actionsBlock)); send: #when:send:to: withArguments: #(tabSelected tabSelected model); yourself! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/19/2013 15:20' prior: 49362454! closeable ^ closeable contents! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00' prior: 48909434! initialize "Initialization code for TabModel" super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. tabSelectedAction := [] asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 01:53'! selected: aBoolean self widget ifNotNil: [ :w | w selected: aBoolean ]! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00'! tabSelected tabSelectedAction contents cull: self! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00'! tabSelectedAction ^ tabSelectedAction contents! ! !TabModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 6/20/2013 00:07'! whenTabSelected: aBlock tabSelectedAction contents: aBlock! ! !TabManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/19/2013 16:52'! selectedTab ^ toolbar selectedTab! ! !TabManager methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/20/2013 00:14' prior: 39795357! tabSelected: aTab self setTabContentFrom: aTab. self triggerEvent: #tabSelected with: aTab! ! !TabBar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/20/2013 17:08' prior: 39776126! computeLength | width size length | size := tabs size. size isZero ifTrue: [ ^ 0 ]. width := self width - self extraSpace + ((size-1) * self overlap). length := width / size. length := length min: 150. length := length max: 33. ^ length ! ! !TabBar methodsFor: 'private-actions' stamp: 'BenjaminVanRyseghem 6/21/2013 00:35' prior: 39784824! tabResetSelection: aTab "Clicked on an already clicked tab, since it can happened after a multi selection, I have to clear the selection except for this tab" selectionHistory ifNotEmpty: [ (selectionHistory last: numberOfSelectedTabs) do: [ :each | each == aTab ifFalse: [ each silentlySelected: false ] ] ]. numberOfSelectedTabs := 1. self addInHistory: aTab. self adjustLayout. self triggerEvent: #tabResetSelection with: aTab! ! !TabBar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 01:44' prior: 39786368! tabs: aCollection tabs do: [ :e | e silentlySelected: false ]. tabs := aCollection. selectionHistory removeAll. aCollection do: [ :aTab | self registerActionsFor: aTab. self selectedTab ifNil: [ aTab selected: true ]. self addFirstInHistory: aTab ]. self adjustLayout. self changed. self triggerEvent: #tabsChanged! ! !Tab methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/19/2013 15:18' prior: 39842750! delete super delete. retrievingProcess ifNotNil: [ retrievingProcess terminate ]. self triggerEvent: #tabDeleted with: self! ! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/19/2013 15:24' prior: 37054544! defaultSpec ^ SpecLayout composed newRow: [:r | r "add: #label width: 50;" add: #inputField; add: #button width: 25 ] height: 25; newRow: #tree top: 25; yourself! ! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/19/2013 15:26' prior: 37339803! searchAtBottom ^ SpecLayout composed newColumn: [:c | c add: #tree; newRow: [:r | r "add: #label width: 50;" add: #inputField; add: #button width: 25 ] height: 25 ]; yourself! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/2/2013 12:50' prior: 45496229! initializeWidgets self instantiateModels: #( tree TreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'Search'; entryCompletion: nil; acceptOnCR: true. self focusOrder add: tree; add: inputField! ! "Spec-Widgets"! "Tabs"! ----End fileIn----! ----QUIT----an Array(3 September 2013 10:40:27 am) Pharo.image priorSource: 16238435! ----STARTUP----an Array(3 September 2013 10:46:27 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 September 2013 10:46:27 am) Pharo-30364.image priorSource: 16259457! ----STARTUP----an Array(3 September 2013 11:22:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/3/2013 11:16' prior: 49793175! commentForCurrentUpdate ^ '11444 Improving MiniKernel https://pharo.fogbugz.com/f/cases/11444 11507 NautilusAbstractUI should be accept different classifiers https://pharo.fogbugz.com/f/cases/11507 (This was alreay in, at least I did not see any changes when merging) 11148 shouldnt:raise: should not be used https://pharo.fogbugz.com/f/cases/11148'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/3/2013 11:18'! script157 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.2.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-MarcusDenker.177.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1590.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.528.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.203.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.898.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.66.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.620.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1233.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/3/2013 11:18'! update30365 "self new update30365" self withUpdateLog: '11444 Improving MiniKernel https://pharo.fogbugz.com/f/cases/11444 11507 NautilusAbstractUI should be accept different classifiers https://pharo.fogbugz.com/f/cases/11507 (This was alreay in, at least I did not see any changes when merging) 11148 shouldnt:raise: should not be used https://pharo.fogbugz.com/f/cases/11148'. self loadTogether: self script157 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EUCTextConverter commentStamp: '' prior: 42242018! Text converter for Extended Unix Character. This is an abstract class. The CJK variations are implemented as subclasses.! !CNGBTextConverter commentStamp: '' prior: 42146386! Text converter for Simplified Chinese variation of EUC. (Even though the name doesn't look so, it is what it is.)! !EUCJPTextConverter commentStamp: '' prior: 42241926! Text converter for Japanese variation of EUC.! !EUCKRTextConverter commentStamp: '' prior: 42241973! Text converter for Korean variation of EUC.! !ShiftJISTextConverter commentStamp: '' prior: 42676194! Text converter for Shift-JIS. Mac and Windows in Japanese mode use this encoding.! !KOI8RTextConverter commentStamp: '' prior: 0! A KOI8RTextConverter class is used to convert cyrillic inputs.! !LanguageEnvironment commentStamp: '' prior: 42373678! The name multilingualized suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same. Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well. When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical. Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least. ! !GreekEnvironment commentStamp: '' prior: 42325740! This class provides the support for Greek. It is here, but most of the methods are not implemented yet. ! !JapaneseEnvironment commentStamp: '' prior: 42364072! This class provides the Japanese support. Since it has been used most other than default 'latin-1' languages, this tends to be a good place to look at when you want to know what a typical subclass of LanguageEnvironment should do. ! !KoreanEnvironment commentStamp: '' prior: 42372896! This class provides the Korean support. Unfortunately, we haven't tested this yet. We did have a working version in previous implementations, but not this new implementation. But as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! !RussianEnvironment commentStamp: 'StephaneDucasse 11/29/2011 22:25' prior: 42629331! EncodedCharSet initialize. LanguageEnvironment resetKnownEnvironments. Locale switchToID: (LocaleID isoLanguage: 'ru'). ! !SimplifiedChineseEnvironment commentStamp: '' prior: 42679789! This class provides the Simplified Chinese support (Used mainly in Mainland China). Unfortunately, we haven't tested this yet, but as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! !GB2312 commentStamp: 'yo 10/19/2004 19:52' prior: 42314968! This class represents the domestic character encoding called GB 2312 used for simplified Chinese. ! !JISX0208 commentStamp: 'yo 10/19/2004 19:52' prior: 42362420! This class represents the domestic character encoding called JIS X 0208 used for Japanese.! !KSX1001 commentStamp: 'yo 10/19/2004 19:53' prior: 42371445! This class represents the domestic character encoding called KS X 1001 used for Korean.! !TDictionaryAddingTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51925431! test0FixtureDictionaryAddingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self associationWithKeyNotInToAdd. self deny: (self nonEmptyDict keys includes: self associationWithKeyNotInToAdd key). self associationWithKeyAlreadyInToAdd. self assert: (self nonEmptyDict keys includes: self associationWithKeyAlreadyInToAdd key)! ! !CompiledMethodTest methodsFor: 'tests - conversion' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19868482! testCompiledMethodAsString "self debug: #testCompiledMethodAsString" thisContext method asString! ! !HelpBrowserTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:33' prior: 23368881! testOpen |browser| browser := self defaultTestClass open. World doOneCycleNow. browser close ! ! !TSortTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52187449! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 48500628! testRemoveCategory self assert: self organization categories size = 3. self should: [ self organization removeCategory: 'one' ] raise: Error. self organization removeCategory: 'empty'. self assert: self organization categories size = 2. self assert: self organization categories first = AllProtocol defaultName. self assert: self organization categories second = 'one'! ! !ClassOrganizationTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 48501145! testRemoveNonExistingProtocol self organization removeCategory: 'non-existent'! ! !TCreationWithTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51921077! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !TCopySequenceableWithOrWithoutSpecificElements methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51898105! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !OCPragmaTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35227150! testNoPragma "self debug: #testDoublePrimitive" OpalCompiler new parse: self methodNoPragma in: self class notifying: nil! ! !AndreasSystemProfilerTest methodsFor: 'tests profiler' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 38626072! testSimple AndreasSystemProfiler new spyOn: [ 200 timesRepeat: [ 1.23 printString ] ]! ! !AndreasSystemProfilerTest methodsFor: 'tests profiler' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 38626310! testSimpleReport AndreasSystemProfiler new report! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35429459! testAssert self should: [ self interpret: 'ASTInterpreterTest new assert: false ' ] raise: InterpretationError. self interpret: 'ASTInterpreterTest new assert: true '! ! !ASTInterpreterTest methodsFor: 'testing - blocks' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35431969! testBlockCannotReturn self should: [ self interpret: 'ASTInterpreterTest new returningBlock value' ] raise: InterpretationError. self should: [ self interpret: 'ASTInterpreterTest new returningBlockArg value: 1' ] raise: InterpretationError. self interpret: 'ASTInterpreterTest new returningBlockNonRootContext2 '. self interpret: 'ASTInterpreterTest new returningBlockNonRootContext '! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 35438416! testExceptionCull (self interpret: 'ASTInterpreterTest new should: [ [:x :y | ] cull: 1] raise: Error'). ! ! !ASTInterpreterTest methodsFor: 'testing - exceptions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35443166! testNotification self interpret: 'Notification signal'! ! !ASTInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35443965! testProtoObjectMethod "This test works in you move Object>>#class to ProtoObject>>#class I proposed the fix in the bug issue tracker " self interpret: 'ProtoObject new flag: #hallo'! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/31/2013 20:42' prior: 49644984! run rule resetResult. environment allClassesAndTraitsDo: [ :class | class isManifest ifFalse: [ self checkClass: class. self checkMethodsForClass: class ]]! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/31/2013 20:42' prior: 49645518! runRules: aCompositeRule onPackage: aPackage withoutTestCase: aBoolean rule := aCompositeRule. environment := RBPackageEnvironment package: aPackage. self flag: 'Instead of manually avoiding the testcases and traits? we should just modify the environment and subtract the testscases from the built package environment.'. environment allClassesAndTraitsDo: [ :class | (class isManifest or: [aBoolean and: [class allSuperclasses includes: TestCase ]]) ifFalse: [ self checkClass: class. self checkMethodsForClass: class ] ]! ! !IVsAndClassVarNamesConflictTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23477553! testOneCanProceedWhenIntroducingCapitalizedInstanceVariables [ Object subclass: className instanceVariableNames: 'X Y' classVariableNames: '' poolDictionaries: '' category: self class category ] on: Exception do: [ :ex | ex resume ]. self assert: (Smalltalk keys includes: className)! ! !IVsAndClassVarNamesConflictTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23477981! testOneCanProceedWhenIntroducingClasseVariablesBeginingWithLowerCaseCharacters [ Object subclass: className instanceVariableNames: '' classVariableNames: 'a BVariableName' poolDictionaries: '' category: self class category ] on: Exception do: [ :ex | ex resume ]. self assert: (Smalltalk keys includes: className)! ! !TConvertAsSetForMultiplinessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51875762! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !TDictionaryCopyingTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51931972! test0FixtureDictionaryCopyingTest | duplicateKey | self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self nonEmptyDifferentFromNonEmptyDict. self deny: self nonEmptyDifferentFromNonEmptyDict isEmpty. duplicateKey := true. self nonEmptyDict keys detect: [ :key | self nonEmptyDifferentFromNonEmptyDict includes: key ] ifNone: [ duplicateKey := false ]. self assert: duplicateKey = false! ! !TOccurrencesForIdentityCollectionsTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52075966! test0FixtureOccurrencesForIdentityCollectionsTest self identityCollectionWithElementsCopyNotIdentical. self identityCollectionWithElementsCopyNotIdentical do: [ :each | self deny: each copy == each ]! ! !TDictionaryImplementationTest methodsFor: 'test - implementation' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51937360! testAtNil "(self run: #testAtNil)" "nil is a valid key in Pharo. In VW nil is not a valid key" "Ansi 1.9 p, 168 5.7.2.5 Message: at: key put: newElement Synopsis Store newElement at key in the receiver. Answer newElement. Definition: If lookup succeeds for key, then newElement replaces the element previously stored at key. Otherwise, the newElement is stored at the new key. In either case, subsequent successful lookups for key will answer newElement. Answer newElement. The result is undefined if the key is nil. This clearly indicates that different smalltalks where doing different assumptions." | dict1 | dict1 := self emptyDict. dict1 at: nil put: #none. self assert: (dict1 at: nil) = #none! ! !TDictionaryImplementationTest methodsFor: 'test - implementation' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51939169! testPseudo "(self run: #testPseudo)" "true and false are valid keys" | dict1 | dict1 := self emptyDict. dict1 at: true put: #true. self assert: (dict1 at: true) = #true. dict1 at: false put: #false. self assert: (dict1 at: false) = #false! ! !TDictionaryImplementationTest methodsFor: 'test - implementation' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51939595! testPseudoVariablesAreValidKeys "(self run: #testPseudoVariablesAreValidKeys)" "true and false are valid keys" | dict1 | dict1 := self emptyDict. dict1 at: true put: #true. self assert: (dict1 at: true) = #true. dict1 at: false put: #false. self assert: (dict1 at: false) = #false! ! !ArrayTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 17684064! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self elementToAdd! ! !ArrayTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17688798! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self collection. self empty. self assert: self empty isEmpty. self collectionOfFloat. self collectionOfFloat do: [ :each | self assert: each class = Float ]. self elementInForIncludesTest. anElementIn := true. self nonEmpty detect: [ :each | each = self elementInForIncludesTest ] ifNone: [ anElementIn := false ]. self assert: anElementIn = true! ! !ArrayTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 17692766! test0FixtureOccurrencesTest self empty. self assert: self empty isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForOccurrences. self assert: (self nonEmpty includes: self elementInForOccurrences). self elementNotInForOccurrences. self deny: (self nonEmpty includes: self elementNotInForOccurrences)! ! !ArrayTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17696278! test0FixtureTConvertAsSetForMultiplinessTest "a collection ofFloat with equal elements:" | res | self withEqualElements. self withEqualElements do: [ :each | self assert: each class = Float ]. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. "a collection of Float without equal elements:" self elementsCopyNonIdenticalWithoutEqualElements. self elementsCopyNonIdenticalWithoutEqualElements do: [ :each | self assert: each class = Float ]. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !ArrayTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 36338632! testComplexIsSelfEvaluating "self run: #testComplexIsSelfEvaluating" | complexArray restoredArray | complexArray := {1. true. false. nil. #a. 'a'. $a. (Float pi). (Float halfPi). (4 / 5). (Float infinity negated). (Color red). (1 @ 2). (0 @ 0 extent: 1 @ 1). ('hola' -> 0). Object. (Object class)}. complexArray := complexArray copyWith: complexArray. self assert: complexArray isSelfEvaluating. restoredArray := self class evaluate: complexArray printString. self assert: restoredArray = complexArray! ! !ArrayTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17699737! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !SocketStreamTest methodsFor: 'stream protocol' stamp: 'CamilloBruni 9/1/2013 03:08' prior: 50479211! testUpToAfterCloseNonSignaling "Tests correct behavior of #upToAll" | resp | clientStream nextPutAll: 'A line of text'. clientStream close. serverStream shouldSignal: false. resp := serverStream upTo: Character cr. self assert: resp = 'A line of text'.! ! !SocketStreamTest methodsFor: 'stream protocol' stamp: 'CamilloBruni 9/1/2013 03:08' prior: 50480313! testUpToAllAfterCloseNonSignaling "Tests correct behavior of #upToAll" | resp | clientStream nextPutAll: 'A line of text'. clientStream close. serverStream shouldSignal: false. resp := serverStream upToAll: String crlf. self assert: resp = 'A line of text'.! ! !TSetArithmetic methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52180432! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !RPackageReadOnlyCompleteSetupTest methodsFor: 'test accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 32039733! testExtensionMethods "a package can extend several classes, either the class or the meta-class side. 'extensionMethods' should list all the methods involved in shuch extensions. P3 extend a2 and a2 class" "self debug: #testExtendingPackagesOfClass" | package extensionMethods cpt | package := p3. extensionMethods := package extensionMethods. "self assert: (extensionMethods size = 2)." self assert: (extensionMethods includes: a2 >> #methodDefinedInP3). self assert: (extensionMethods includes: a2 class >> #classSideMethodDefinedInP3). cpt := 0. package metaclassExtensionSlicesDo: [ :className :listOfSelectors | (className = a2 name and: [ listOfSelectors includes: #classSideMethodDefinedInP3 ]) ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 1. cpt := 0. package classExtensionSlicesDo: [ :className :listOfSelectors | (className = a2 name and: [ listOfSelectors includes: #methodDefinedInP3 ]) ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 1! ! !RPackageReadOnlyCompleteSetupTest methodsFor: 'test tag class' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 32052962! testRemoveTag "self debug: #testRemoveTag" self assert: p1 classTags isEmpty. p1 addClassDefinitionName: #A1DefinedInP1 toClassTag: #foo. self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 1. p1 addClassDefinitionName: #B1DefinedInP1 toClassTag: #foo. self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 2. p1 removeClassTag: #bar. self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 2. p1 removeClassTag: #foo. self deny: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 0! ! !RPackageReadOnlyCompleteSetupTest methodsFor: 'test tag class' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 32053945! testRemoveTaggedClasses "self debug: #testRemoveTaggedClasses" p1 addClassDefinitionName: #A1DefinedInP1 toClassTag: #foo. p1 addClassDefinitionName: #B1DefinedInP1 toClassTag: #foo. p1 addClassDefinitionName: #B1DefinedInP1 toClassTag: #zork. self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 2. self deny: (((p1 classesForClassTag: #zork) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #zork) collect: #name) includes: #B1DefinedInP1). "now when we remove a class" "from an existing tags list" p1 removeClassDefinitionName: #A1DefinedInP1 fromClassTag: #foo. self deny: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 1. "from a nonexisting tag list" p1 removeClassDefinitionName: #B1DefinedInP1 fromClassTag: #taz. self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (((p1 classesForClassTag: #zork) collect: #name) includes: #B1DefinedInP1). "with a class not registered to a tag list" p1 removeClassDefinitionName: #Tagada fromClassTag: #foo. self deny: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: (p1 classesForClassTag: #foo) size = 1! ! !InstructionPrinterTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23711448! testInstructions "just print all of methods of Object and see if no error accours" | printer | printer := InstructionPrinter. Object methods do: [ :method | String streamContents: [ :stream | (printer on: method) printInstructionsOn: stream ] ]! ! !PerformTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 29275027! testPerformWithArgsLargeFrame self doPerformOldLargeFrame! ! !PerformTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 29275209! testPerformWithArgsSmallFrame self doPerformOldSmallFrame! ! !TIncludesForIdentityCollectionsTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52018498! test0FixtureInludesForIdentityCollectionsTest self identityCollectionWithElementsCopyNotIdentical. self identityCollectionWithElementsCopyNotIdentical do: [ :each | self deny: each == each copy ]! ! !MorphTest methodsFor: 'testing - initialization' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 26881950! testOpenInWorld morph openInWorld! ! !TPrintOnSequencedTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52083650! test0FixturePrintTest self nonEmpty! ! !TGrowableTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52015896! test0FixtureRequirementsOfTGrowableTest self empty. self nonEmpty. self element. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotIn)! ! !SUnitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 32644635! errorShouldntRaise self someMessageThatIsntUnderstood! ! !TIncludesTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52021807! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !TPutTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 52136220! test0FixturePutOneOrMoreElementsTest self aValue. self indexArray. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !TraitCompositionTest methodsFor: 'testing-basic' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 53350278! testAliasCompositions "unary" self t2 setTraitCompositionFrom: self t1 @ {(#aliasM11 -> #m11)}. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#alias: -> #m11)} ] raise: TraitCompositionException. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#alias:x:y: -> #m11)} ] raise: TraitCompositionException. "binary" self t1 compile: '= anObject'. self t2 setTraitCompositionFrom: self t1 @ {(#equals: -> #=)}. self t2 setTraitCompositionFrom: self t1 @ {(#% -> #=)}. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#equals -> #=)} ] raise: TraitCompositionException. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#equals:x: -> #=)} ] raise: TraitCompositionException. "keyword" self t1 compile: 'x: a y: b z: c'. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#== -> #x:y:z:)} ] raise: TraitCompositionException. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#x -> #x:y:z:)} ] raise: TraitCompositionException. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#x: -> #x:y:z:)} ] raise: TraitCompositionException. self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#x:y: -> #x:y:z:)} ] raise: TraitCompositionException. self t2 setTraitCompositionFrom: self t1 @ {(#myX:y:z: -> #x:y:z:)}. "alias same as selector" self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#m11 -> #m11)} ] raise: TraitCompositionException. "same alias name used twice" self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#alias -> #m11). (#alias -> #m12)} ] raise: TraitCompositionException. "aliasing an alias" self should: [ self t2 setTraitCompositionFrom: self t1 @ {(#alias -> #m11). (#alias2 -> #alias)} ] raise: TraitCompositionException! ! !TraitCompositionTest methodsFor: 'testing-basic' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 43858838! testInvalidComposition self t1 @ {(#a -> #b)} @ {(#x -> #y)}. (self t1 + self t2) @ {(#a -> #b)} @ {(#x -> #y)}. self t1 - {#a} - {#b}. self t1 + self t2 - {#a} - {#b}. self should: [ (self t1 - {#x}) @ {(#a -> #b)} ] raise: TraitCompositionException. self should: [ (self t1 + self t2 - {#x}) @ {(#a -> #b)} ] raise: TraitCompositionException. self should: [ self t1 + self t1 ] raise: TraitCompositionException. self should: [ (self t1 + self t2) @ {(#a -> #b)} + self t1 ] raise: TraitCompositionException. self should: [ self t1 @ {(#a -> #m11). (#a -> #m12)} ] raise: TraitCompositionException. self should: [ self t1 @ {(#a -> #m11). (#b -> #a)} ] raise: TraitCompositionException! ! !TOccurrencesForMultiplinessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52077798! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !NumberTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 28545037! testPrintShowingDecimalPlaces2 "This tests problems related to Float>>rounded and Float>>roundTo:: - Float>>#rounded is inexact - Float>>#roundTo: might overflow" "5000000000000001.0 asTrueFraction = 5000000000000001. 5000000000000001 highBit = 53. This number is represented exactly asFloat, it should print exactly" self assert: (5000000000000001.0 printShowingDecimalPlaces: 0) = '5000000000000001'. "50000000000001.25 asTrueFraction = (200000000000005/4). 200000000000005 highBit = 48, 4 isPowerOfTwo, So this number is also represented exactly as Float, it should print exactly. Beware: (50000000000001.25 / 0.01) rounded exhibit the same problem as above." self assert: (50000000000001.25 printShowingDecimalPlaces: 2) = '50000000000001.25'. "This number is close to maximum float value" 1.0e306 printShowingDecimalPlaces: 3! ! !TDictionaryAssociationAccessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51927675! test0FixtureDictionaryAssocitionAccess self nonEmpty. self deny: self nonEmpty isEmpty. self keyNotIn. self deny: (self nonEmpty keys includes: self keyNotIn)! ! !Latin2Environment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:32'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 14+1.! ! !TReplacementSequencedTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 52159214! testOFixtureReplacementSequencedTest self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForReplacement. self assert: (self nonEmpty includes: self elementInForReplacement ) . self newElement. self firstIndex. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self secondIndex. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self replacementCollection. self replacementCollectionSameSize. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !TextEditorTest methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 52685889! testCursorEnd | editor | " self debug: #testCursorEnd. " editor := TextMorph new editor. editor cursorEnd: self keyboardEvent! ! !TextEditorTest methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 52686148! testSetSearchString | editor | " self debug: #testSetSearchString. " editor := TextMorph new editor. editor setSearchString! ! !IntegerTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23848704! testDegreeCos "self run: #testDegreeCos" 45 degreeCos. "Following tests use approximate equality, because cosine are generally evaluated using inexact Floating point arithmetic" self assert: (45 degreeCos squared - (1 / 2)) abs <= Float epsilon. self assert: (60 degreeCos - (1 / 2)) abs <= Float epsilon. self assert: (120 degreeCos + (1 / 2)) abs <= Float epsilon. -360 to: 360 do: [ :i | self assert: (i degreeCos closeTo: i degreesToRadians cos) ]. "Following tests use strict equality which is a requested property of degreeCos" -10 to: 10 do: [ :k | self assert: (k * 360 + 90) degreeCos = 0. self assert: (k * 360 - 90) degreeCos = 0. self assert: (k * 360 + 180) degreeCos + 1 = 0. self assert: (k * 360) degreeCos - 1 = 0 ]! ! !IntegerTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23849569! testDegreeSin "self run: #testDegreeSin" 45 degreeSin. "Following tests use approximate equality, because sine are generally evaluated using inexact Floating point arithmetic" self assert: (45 degreeSin squared - (1 / 2)) abs <= Float epsilon. self assert: (30 degreeSin - (1 / 2)) abs <= Float epsilon. self assert: (-30 degreeSin + (1 / 2)) abs <= Float epsilon. -360 to: 360 do: [ :i | self assert: (i degreeSin closeTo: i degreesToRadians sin) ]. "Following tests use strict equality which is a requested property of degreeSin" -10 to: 10 do: [ :k | self assert: (k * 360 + 90) degreeSin - 1 = 0. self assert: (k * 360 - 90) degreeSin + 1 = 0. self assert: (k * 360 + 180) degreeSin = 0. self assert: (k * 360) degreeSin = 0 ]! ! !IntegerTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23854750! testNthRoot 1 << 2000 nthRoot: 100. self assert: (1 << 2000 nthRoot: 100) equals: 1 << 20! ! !TAsStringCommaAndDelimiterTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51812090! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !BitBltTest methodsFor: 'bugs' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18181634! testPeekerUnhibernateBug "self run: #testPeekerUnhibernateBug" | bitBlt | bitBlt := BitBlt bitPeekerFromForm: Display. bitBlt destForm hibernate. bitBlt pixelAt: 1 @ 1! ! !BitBltTest methodsFor: 'bugs' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18181899! testPokerUnhibernateBug "self run: #testPokerUnhibernateBug" | bitBlt | bitBlt := BitBlt bitPokerToForm: Display. bitBlt sourceForm hibernate. bitBlt pixelAt: 1 @ 1 put: 0! ! !WeakSetTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 54838842! testAddNil | ws | ws := WeakSet new. ws add: nil. self assert: (ws includes: nil)! ! !TOccurrencesTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52080838! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !MethodPragmaTest methodsFor: 'testing-compiler' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 26496000! testCompileTemps "Pragmas should be placeable before and after temps." self assert: (self compile: '| temps | ' selector: #zork) pragmas notEmpty. self assert: (self compile: ' | temps |' selector: #zork) pragmas notEmpty! ! !ScannerTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 38664788! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" '1@-1' parseLiterals. self assert: ('1@-1' parseLiterals at: 2) asString = '@-'! ! !StringTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 51273210! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self elementToAdd! ! !StringTest methodsFor: '*Multilingual-OtherLanguages' stamp: 'ky 7/8/2006 15:28' prior: 51239293! testUnescapePercents self assert: '' unescapePercents = ''. self assert: 'x' unescapePercents = 'x'. self assert: '+' unescapePercents = ' '. self assert: 'x+' unescapePercents = 'x '. self assert: '+x' unescapePercents = ' x'. self assert: 'x+x' unescapePercents = 'x x'. self assert: '%' unescapePercents = '%'. self assert: '%3' unescapePercents = '%3'. self assert: '%3C' unescapePercents = '<'. self assert: '%3Cx%3E4%3C%2Fx%3E' unescapePercents = '4'. self assert: '!!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+''%22' unescapePercents = '!!@#$%^&*(){}[]=:/;? ''"'. self assert: '!!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B''%22' unescapePercents = '!!@#$%^&*(){}[]=:/;?+''"'. self assert: '%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22' unescapePercents = '!!@#$%^&*(){}[]=:/;? ''"'! ! !StringTest methodsFor: 'tests - converting' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 51241651! testWithNoLineLongerThan "self run: #testWithNoLineLongerThan" self assert: ('Hello World' withNoLineLongerThan: 5) = ('Hello' , String cr , 'World'). String crlf withNoLineLongerThan: 5. 'Hello' , String cr , String cr , 'World' withNoLineLongerThan: 5. self assert: ('Sample text to line break at some point' withNoLineLongerThan: 28) = ('Sample text to line break at' , String cr , 'some point'). self assert: ('Sample text' , String cr , 'to line break' , String cr , 'at some point' withNoLineLongerThan: 28) = ('Sample text' , String cr , 'to line break' , String cr , 'at some point')! ! !RBSmalllintChecker methodsFor: 'private' stamp: 'CamilloBruni 8/31/2013 20:50' prior: 31383945! checkMethodsForClass: aClass ^environment selectorsForClass: aClass do: [:each | context selector: each. rule checkMethod: context. methodBlock value]! ! !RBSmalllintChecker methodsFor: 'actions' stamp: 'CamilloBruni 8/31/2013 20:42' prior: 31383274! run rule resetResult. environment allClassesAndTraitsDo: [ :class | self checkClass: class. self checkMethodsForClass: class ]! ! !TStructuralEqualityTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52195586! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !TPrintTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52088226! test0FixturePrintTest self nonEmpty. self deny: self nonEmpty isEmpty! ! !OCASTCheckerTest methodsFor: 'testing - simple' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 40066716! testSemanticAnalysisOnNonMethodNode | ast | {[ 1 + 2 ]. thisContext. (OCOpalExamples >> #exampleReturn1)} do: [ :object | ast := object sourceNode. ast doSemanticAnalysis ]. #('1' 'true' 'nil' '1 + 2' '^1' '1 + 2. 2 + 3' '#(1 true)' '{ #foo . 1 }' '1+2;+3') do: [ :source | ast := RBExplicitVariableParser parseExpression: source. ast doSemanticAnalysis ]. ast := RBExplicitVariableParser parseMethod: 'foo 1 + 2'. ast doSemanticAnalysis! ! !FileReferenceTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 40031496! testEnsureDeleted | reference | reference := filesystem / 'plonk'. "Deletes the file if it exists" reference ensureCreateFile. self assert: reference exists. reference ensureDelete. self deny: reference exists. "No-op if file does not exist" reference ensureDelete! ! !FLIndexStreamTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 21556729! testCreation self indexStreamOn: #() writeStream digits: 2! ! !TBeginsEndsWith methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51822806! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !CharacterTest methodsFor: 'tests - various' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18982751! testCharacterSeparators "Regression test" | result | result := '/' , Character separators. self assert: result size = (Character separators size + 1)! ! !CharacterTest methodsFor: 'tests instance creation' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18983753! testInstanceCreation self should: [ Character value: -1 ] raise: Error. Character value: 0. Character value: 256! ! !TCopySequenceableSameContents methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51894068! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !SourceFileArrayTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 50645454! testSourcePointerFromFileIndexAndPosition "Test valid input ranges" | sf | sf := SourceFileArray new. self should: [ sf sourcePointerFromFileIndex: 0 andPosition: 0 ] raise: Error. sf sourcePointerFromFileIndex: 1 andPosition: 0. sf sourcePointerFromFileIndex: 2 andPosition: 0. self should: [ sf sourcePointerFromFileIndex: 0 andPosition: 3 ] raise: Error. self should: [ sf sourcePointerFromFileIndex: 1 andPosition: -1 ] raise: Error. sf sourcePointerFromFileIndex: 1 andPosition: 16r1FFFFFF. sf sourcePointerFromFileIndex: 1 andPosition: 16r2000000. self should: [ sf sourcePointerFromFileIndex: 3 andPosition: 0 ] raise: Error. self should: [ sf sourcePointerFromFileIndex: 4 andPosition: 0 ] raise: Error. self assert: 16r1000000 = (sf sourcePointerFromFileIndex: 1 andPosition: 0). self assert: 16r1000013 = (sf sourcePointerFromFileIndex: 1 andPosition: 16r13). self assert: 16r1FFFFFF = (sf sourcePointerFromFileIndex: 1 andPosition: 16rFFFFFF). self assert: 16r2000000 = (sf sourcePointerFromFileIndex: 2 andPosition: 0). self assert: 16r2000013 = (sf sourcePointerFromFileIndex: 2 andPosition: 16r13). self assert: 16r2FFFFFF = (sf sourcePointerFromFileIndex: 2 andPosition: 16rFFFFFF). self assert: 16r3000000 = (sf sourcePointerFromFileIndex: 1 andPosition: 16r1000000). self assert: 16r3000013 = (sf sourcePointerFromFileIndex: 1 andPosition: 16r1000013). self assert: 16r3FFFFFF = (sf sourcePointerFromFileIndex: 1 andPosition: 16r1FFFFFF). self assert: 16r4000000 = (sf sourcePointerFromFileIndex: 2 andPosition: 16r1000000). self assert: 16r4000013 = (sf sourcePointerFromFileIndex: 2 andPosition: 16r1000013). self assert: 16r4FFFFFF = (sf sourcePointerFromFileIndex: 2 andPosition: 16r1FFFFFF)! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35024867! testDup | ir | ir := IRBuilderTest new testDup. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35025064! testInstVar | ir | ir := IRBuilderTest new testInstVar. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35025269! testJumpAheadTo | ir | ir := IRBuilderTest new testJumpAheadTo. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35025482! testJumpAheadToIf | ir | ir := IRBuilderTest new testJumpAheadToIf. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35025699! testJumpBackTo | ir | ir := IRBuilderTest new testJumpBackTo. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35025910! testLiteralArray | ir | ir := IRBuilderTest new testLiteralArray. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35026125! testLiteralVariableClass | ir | ir := IRBuilderTest new testLiteralVariableClass. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35026356! testPopTop | ir | ir := IRBuilderTest new testPopTop. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35026559! testPushClosureCopyNoCopied | ir | ir := IRBuilderTest new testPushClosureCopyNoCopied. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35026796! testPushConsArray | ir | ir := IRBuilderTest new testPushConsArray. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35027013! testPushNewArray | ir | ir := IRBuilderTest new testPushNewArray. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35027228! testPushSelf | ir | ir := IRBuilderTest new testPushSelf. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35027435! testPushTempArgument | ir | ir := IRBuilderTest new testPushTempArgument. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35027658! testPushTempTemp | ir | ir := IRBuilderTest new testPushTempTemp. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35027873! testPushThisContext | ir | ir := IRBuilderTest new testPushThisContext. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35028094! testRemoteTemp | ir | ir := IRBuilderTest new testRemoteTemp. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35028305! testRemoteTempNested | ir | ir := IRBuilderTest new testRemoteTempNested. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35028528! testReturnTop | ir | ir := IRBuilderTest new testReturnTop. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35028737! testSendSuper | ir | ir := IRBuilderTest new testSendSuper. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35028946! testStoreIntoVariable | ir | ir := IRBuilderTest new testStoreIntoVariable. IRInterpreter new interpret: ir! ! !IRInterpreterTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35029171! testStoreTemp | ir | ir := IRBuilderTest new testStoreTemp. IRInterpreter new interpret: ir! ! !TCopySequenceableWithReplacement methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51907704! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !TCopySequenceableWithReplacement methodsFor: 'tests - copying with replacement' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51901819! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !UndefinedObjectTest methodsFor: 'tests - testing' stamp: 'CamilloBruni 9/1/2013 03:09' prior: 54487474! testIfNotNil nil ifNotNil: [ self fail: 'should not get here' ]. ! ! !UndefinedObjectTest methodsFor: 'tests - testing' stamp: 'CamilloBruni 9/1/2013 03:09' prior: 54487645! testIfNotNilDo nil ifNotNil: [ self fail: 'should not get here' ]. ! ! !EUCTextConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/27/2013 20:57' prior: 21086050! testEUCJP | encodingName halfwidthKatakanaLetterKa cjkUnifiedIdeograph6CB4 cjkUnifiedIdeograph50BA encodedHalfwidthKatakanaLetterKa encodedCJKUnifiedIdeograph6CB4 encodedCJKUnifiedIdeograph50BA japaneseInJapanese | encodingName := 'euc-jp'. "Example characters taken from: http://www.sljfaq.org/afaq/encodings.html#encodings-EUC-JP" halfwidthKatakanaLetterKa := Character codePoint: 16rFF76. cjkUnifiedIdeograph6CB4 := Character codePoint: 16r6CB3. cjkUnifiedIdeograph50BA := Character codePoint: 16r50BA. encodedHalfwidthKatakanaLetterKa := #[16r8E 16rB6]. encodedCJKUnifiedIdeograph6CB4 := #[16rB2 16rCF]. encodedCJKUnifiedIdeograph50BA := #[16r8F 16rB2 16rB0]. self assert: ((String with: cjkUnifiedIdeograph6CB4) convertToEncoding: encodingName) asByteArray = encodedCJKUnifiedIdeograph6CB4. "EUCJPTextConverter does not currently support encoding the characters defined in the JIS-X-0201 and JIS-X-0212 standards:" self assert: ((String with: halfwidthKatakanaLetterKa) convertToEncoding: encodingName) asByteArray = #[]. self assert: ((String with: cjkUnifiedIdeograph50BA) convertToEncoding: encodingName) asByteArray = #[]. self assert: (encodedCJKUnifiedIdeograph6CB4 asString convertFromEncoding: encodingName) = (String with: cjkUnifiedIdeograph6CB4). "EUCJPTextConverter does not currently support decoding the representations that start with the 8E and 8F markers:" self assert: (encodedHalfwidthKatakanaLetterKa asString convertFromEncoding: encodingName) = (String new). self assert: (encodedCJKUnifiedIdeograph50BA asString convertFromEncoding: encodingName) = (String new). japaneseInJapanese := #(16r65E5 16r672C 16r8A9E) collect: [ :codePoint | Character codePoint: codePoint ] as: String. ((japaneseInJapanese convertToEncoding: encodingName) convertFromEncoding: encodingName) = japaneseInJapanese.! ! !AnnouncerTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17579298! testNoArgBlock "we are supposed to accept zero-argument blocks as actions " | announcement counter | counter := nil. announcer subscribe: AnnouncementMockA do: [ counter := 1 ]. announcer announce: AnnouncementMockA new. self assert: counter = 1! ! !AnnouncerTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17581661! testTwoArgBlock "we are supposed to accept two-argument blocks as actions " | announcement flag | announcer subscribe: AnnouncementMockA do: [ :ann :announcer2 | flag := announcer2 == announcer ]. announcer announce: AnnouncementMockA new. self assert: flag! ! !TAddForIdentityCollectionsTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:34' prior: 51789277! test0FixtureAddForIdentityCollectionsTest self identityCollectionWithElementsCopyNotIdentical. self identityCollectionWithElementsCopyNotIdentical do: [ : each | self deny: each == each copy ].! ! !EUCTextConverter commentStamp: '' prior: 49825637! Text converter for Extended Unix Character. This is an abstract class. The CJK variations are implemented as subclasses.! !CNGBTextConverter commentStamp: '' prior: 49825826! Text converter for Simplified Chinese variation of EUC. (Even though the name doesn't look so, it is what it is.)! !CNGBTextConverter class methodsFor: 'utilities' stamp: 'yo 10/23/2002 14:42' prior: 18639391! encodingNames ^ #('gb2312' ) copy ! ! !CNGBTextConverter methodsFor: 'private' stamp: 'yo 3/17/2004 00:41' prior: 18639030! languageEnvironment ^ SimplifiedChineseEnvironment. ! ! !CNGBTextConverter methodsFor: 'private' stamp: 'yo 10/23/2002 14:42' prior: 18639160! leadingChar ^ GB2312 leadingChar ! ! !EUCJPTextConverter commentStamp: '' prior: 49826008! Text converter for Japanese variation of EUC.! !EUCJPTextConverter class methodsFor: 'utilities' stamp: 'yo 12/19/2003 22:00' prior: 21082751! encodingNames ^ #('euc-jp' 'eucjp') copy ! ! !EUCJPTextConverter methodsFor: 'private' stamp: 'yo 3/17/2004 00:41' prior: 21082394! languageEnvironment ^ JapaneseEnvironment. ! ! !EUCJPTextConverter methodsFor: 'private' stamp: 'yo 10/23/2002 10:09' prior: 21082516! leadingChar ^ JISX0208 leadingChar ! ! !EUCKRTextConverter commentStamp: '' prior: 49826121! Text converter for Korean variation of EUC.! !EUCKRTextConverter class methodsFor: 'utilities' stamp: 'yo 2/17/2004 18:45' prior: 21083491! encodingNames ^ #('euc-kr' 'ks-c-5601-1987' 'euckr') copy ! ! !EUCKRTextConverter methodsFor: 'private' stamp: 'yo 3/17/2004 00:41' prior: 21083138! languageEnvironment ^ KoreanEnvironment. ! ! !EUCKRTextConverter methodsFor: 'private' stamp: 'yo 10/23/2002 15:19' prior: 21083258! leadingChar ^ KSX1001 leadingChar ! ! !EUCTextConverter methodsFor: 'private' stamp: 'yo 3/17/2004 00:40' prior: 21085484! languageEnvironment self subclassResponsibility ! ! !EUCTextConverter methodsFor: 'private' stamp: 'yo 10/23/2002 10:09' prior: 21085609! leadingChar ^ self subclassResponsibility ! ! !EUCTextConverter methodsFor: 'conversion' stamp: 'SvenVanCaekenberghe 2/27/2013 20:57' prior: 21083985! nextFromStream: aStream | character1 character2 offset value1 value2 nonUnicodeChar | aStream isBinary ifTrue: [^ aStream basicNext]. (character1 := aStream basicNext) ifNil: [^ nil]. character1 asciiValue <= 127 ifTrue: [^ character1]. (character2 := aStream basicNext) ifNil: [^ nil]. offset := 16rA1. value1 := character1 asciiValue - offset. value2 := character2 asciiValue - offset. (value1 < 0 or: [value1 > 93]) ifTrue: [^ nil]. (value2 < 0 or: [value2 > 93]) ifTrue: [^ nil]. nonUnicodeChar := Character leadingChar: self leadingChar code: value1 * 94 + value2. ^ Character codePoint: nonUnicodeChar asUnicode. ! ! !EUCTextConverter methodsFor: 'conversion' stamp: 'MarcusDenker 3/28/2011 22:15' prior: 21084705! nextPut: aCharacter toStream: aStream | value leadingChar nonUnicodeChar value1 value2 | aStream isBinary ifTrue: [^aCharacter storeBinaryOn: aStream]. value := aCharacter charCode. leadingChar := aCharacter leadingChar. (leadingChar = 0 and: [value < 128]) ifTrue: [ aStream basicNextPut: (Character value: value). ^ aStream ]. (128 <= value and: [value < 256]) ifTrue: [^ aStream]. nonUnicodeChar := self nonUnicodeClass charFromUnicode: value. nonUnicodeChar ifNotNil: [ value := nonUnicodeChar charCode. value1 := value // 94 + 161. value2 := value \\ 94 + 161. aStream basicNextPut: (Character value: value1). aStream basicNextPut: (Character value: value2). ^ aStream ] ! ! !EUCTextConverter methodsFor: 'private' stamp: 'yo 10/4/2003 15:48' prior: 21085727! nonUnicodeClass ^ (EncodedCharSet charsetAt: self leadingChar). ! ! !ShiftJISTextConverter commentStamp: '' prior: 49826235! Text converter for Shift-JIS. Mac and Windows in Japanese mode use this encoding.! !ShiftJISTextConverter class methodsFor: 'utilities' stamp: 'yo 12/25/2003 21:33' prior: 33215680! encodingNames ^ #('shift-jis' 'shift_jis' 'sjis') copy ! ! !ShiftJISTextConverter methodsFor: 'private' stamp: 'ar 4/9/2005 22:31' prior: 33214115! katakanaValue: code ^ Character leadingChar: JapaneseEnvironment leadingChar code: (#( 16rFFFD 16rFF61 16rFF62 16rFF63 16rFF64 16rFF65 16rFF66 16rFF67 16rFF68 16rFF69 16rFF6A 16rFF6B 16rFF6C 16rFF6D 16rFF6E 16rFF6F 16rFF70 16rFF71 16rFF72 16rFF73 16rFF74 16rFF75 16rFF76 16rFF77 16rFF78 16rFF79 16rFF7A 16rFF7B 16rFF7C 16rFF7D 16rFF7E 16rFF7F 16rFF80 16rFF81 16rFF82 16rFF83 16rFF84 16rFF85 16rFF86 16rFF87 16rFF88 16rFF89 16rFF8A 16rFF8B 16rFF8C 16rFF8D 16rFF8E 16rFF8F 16rFF90 16rFF91 16rFF92 16rFF93 16rFF94 16rFF95 16rFF96 16rFF97 16rFF98 16rFF99 16rFF9A 16rFF9B 16rFF9C 16rFF9D 16rFF9E 16rFF9F ) at: (code - 16r9F)). ! ! !ShiftJISTextConverter methodsFor: 'friend' stamp: 'yo 10/23/2002 15:28' prior: 33213999! leadingChar ^ JISX0208 leadingChar ! ! !ShiftJISTextConverter methodsFor: 'conversion' stamp: 'GabrielOmarCotelli 5/25/2010 21:22' prior: 33211861! nextFromStream: aStream | character1 character2 value1 value2 char1Value result | aStream isBinary ifTrue: [ ^ aStream basicNext ]. character1 := aStream basicNext. character1 isNil ifTrue: [ ^ nil ]. char1Value := character1 asciiValue. char1Value < 16r81 ifTrue: [ ^ character1 ]. (char1Value > 16rA0 and: [ char1Value < 16rE0 ]) ifTrue: [ ^ self katakanaValue: char1Value ]. character2 := aStream basicNext. character2 isNil ifTrue: [ ^ nil "self errorMalformedInput" ]. value1 := character1 asciiValue. character1 asciiValue >= 224 ifTrue: [ value1 := value1 - 64 ]. value1 := value1 - 129 bitShift: 1. value2 := character2 asciiValue. character2 asciiValue >= 128 ifTrue: [ value2 := value2 - 1 ]. character2 asciiValue >= 158 ifTrue: [ value1 := value1 + 1. value2 := value2 - 158 ] ifFalse: [ value2 := value2 - 64 ]. result := Character leadingChar: self leadingChar code: value1 * 94 + value2. ^ self toUnicode: result! ! !ShiftJISTextConverter methodsFor: 'conversion' stamp: 'StephaneDucasse 5/28/2011 13:41' prior: 33212925! nextPut: aCharacter toStream: aStream | value leadingChar aChar | aStream isBinary ifTrue: [^aCharacter storeBinaryOn: aStream]. value := aCharacter charCode. (16rFF61 <= value and: [value <= 16rFF9F]) ifTrue: [ aStream basicNextPut: (self sjisKatakanaFor: value). ^ aStream]. aChar := JISX0208 charFromUnicode: value. aChar ifNil: [^ aStream]. value := aChar charCode. leadingChar := aChar leadingChar. leadingChar = 0 ifTrue: [ aStream basicNextPut: (Character value: value). ^ aStream. ]. leadingChar == self leadingChar ifTrue: [ | upper lower | upper := value // 94 + 33. lower := value \\ 94 + 33. upper \\ 2 = 1 ifTrue: [ upper := upper + 1 / 2 + 112. lower := lower + 31 ] ifFalse: [ upper := upper / 2 + 112. lower := lower + 125 ]. upper >= 160 ifTrue: [upper := upper + 64]. lower >= 127 ifTrue: [lower := lower + 1]. aStream basicNextPut: (Character value: upper). aStream basicNextPut: (Character value: lower). ^ aStream ]. ! ! !ShiftJISTextConverter methodsFor: 'private' stamp: 'yo 3/1/2004 22:05' prior: 33214825! sjisKatakanaFor: value ^ Character value: (#( 16rA0 16rA1 16rA2 16rA3 16rA4 16rA5 16rA6 16rA7 16rA8 16rA9 16rAA 16rAB 16rAC 16rAD 16rAE 16rAF 16rB0 16rB1 16rB2 16rB3 16rB4 16rB5 16rB6 16rB7 16rB8 16rB9 16rBA 16rBB 16rBC 16rBD 16rBE 16rBF 16rC0 16rC1 16rC2 16rC3 16rC4 16rC5 16rC6 16rC7 16rC8 16rC9 16rCA 16rCB 16rCC 16rCD 16rCE 16rCF 16rD0 16rD1 16rD2 16rD3 16rD4 16rD5 16rD6 16rD7 16rD8 16rD9 16rDA 16rDB 16rDC 16rDD 16rDE 16rDF ) at: value - 16rFF5F). ! ! !ShiftJISTextConverter methodsFor: 'private' stamp: 'ar 4/9/2005 22:31' prior: 33215377! toUnicode: aChar ^ Character leadingChar: JapaneseEnvironment leadingChar code: aChar asUnicode. ! ! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 53437178! testAddAndRemoveMethodsFromSubtraits | aC2 | aC2 := self c2 new. self assert: aC2 m51. self t5 removeSelector: #m51. self should: [ aC2 m51 ] raise: MessageNotUnderstood. self t1 compile: 'foo ^true'. self deny: aC2 foo. self t1 compile: 'm51 ^self'. aC2 m51. self assert: aC2 m51 == aC2! ! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 37125117! testAddAndRemoveMethodsInClassOrTrait | aC2 | aC2 := self c2 new. self assert: aC2 m51. self c2 compile: 'm51 ^123'. self assert: aC2 m51 = 123. self c2 removeSelector: #m51. aC2 m51. self assert: aC2 m51. self t4 removeSelector: #m11. self assert: (self t4 includesSelector: #m11)! ! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 45431174! testExplicitRequirementDoesNotTakePrecedenceInDeepHierarchy "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation, even if the superclass implementation is not just in the direct superclass." "C9 inherits from Object. C10 inherits from C9. C11 inherits from C10. Each Ci uses the trait Ti." self t11 compile: 'm ^self explicitRequirement'. self should: [ self c11 new m ] raise: Error. self t9 compile: 'm ^2'. self c9 new m. self c10 new m. self c11 new m. self assert: self c9 new m equals: 2. self assert: self c10 new m equals: 2. self assert: self c11 new m equals: 2! ! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 45433071! testExplicitRequirementWithSuperclassImplementation "Make sure that an explicitRequirement method from a trait does not take precedence over a superclass implementation." self t10 compile: 'm ^self explicitRequirement'. self should: [ self c10 new m ] raise: Error. self c9 compile: 'm ^123'. self assert: self c10 new m equals: 123. self c9 removeSelector: #m. self t10 removeSelector: #m. "The previous is still true even if we compile the superclass method before the trait method." self c9 compile: 'm ^123'. self t10 compile: 'm ^self explicitRequirement'. self c10 new m. self c9 removeSelector: #m. self should: [ self c10 new m ] raise: Error. self t10 removeSelector: #m! ! !TraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 43847727! testTraitCompositionRespectsParenthesis self t1 compile: 'method ^1234'. self t2 compile: 'method ^4'. self c1 setTraitComposition: self t1 + self t2 - #method. self should: [ self c1 new method ] raise: MessageNotUnderstood. self c1 setTraitComposition: self t1 + (self t2 - #method). self c1 new method. self assert: self c1 new method = 1234! ! !KOI8RTextConverter commentStamp: '' prior: 49826378! A KOI8RTextConverter class is used to convert cyrillic inputs.! !KOI8RTextConverter class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 3/7/2012 21:40' prior: 24194150! byteToUnicodeSpec "ByteTextConverter generateByteToUnicodeSpec: 'http://unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT'" ^ #( 16r2500 16r2502 16r250C 16r2510 16r2514 16r2518 16r251C 16r2524 16r252C 16r2534 16r253C 16r2580 16r2584 16r2588 16r258C 16r2590 16r2591 16r2592 16r2593 16r2320 16r25A0 16r2219 16r221A 16r2248 16r2264 16r2265 16r00A0 16r2321 16r00B0 16r00B2 16r00B7 16r00F7 16r2550 16r2551 16r2552 16r0451 16r2553 16r2554 16r2555 16r2556 16r2557 16r2558 16r2559 16r255A 16r255B 16r255C 16r255D 16r255E 16r255F 16r2560 16r2561 16r0401 16r2562 16r2563 16r2564 16r2565 16r2566 16r2567 16r2568 16r2569 16r256A 16r256B 16r256C 16r00A9 16r044E 16r0430 16r0431 16r0446 16r0434 16r0435 16r0444 16r0433 16r0445 16r0438 16r0439 16r043A 16r043B 16r043C 16r043D 16r043E 16r043F 16r044F 16r0440 16r0441 16r0442 16r0443 16r0436 16r0432 16r044C 16r044B 16r0437 16r0448 16r044D 16r0449 16r0447 16r044A 16r042E 16r0410 16r0411 16r0426 16r0414 16r0415 16r0424 16r0413 16r0425 16r0418 16r0419 16r041A 16r041B 16r041C 16r041D 16r041E 16r041F 16r042F 16r0420 16r0421 16r0422 16r0423 16r0416 16r0412 16r042C 16r042B 16r0417 16r0428 16r042D 16r0429 16r0427 16r042A )! ! !KOI8RTextConverter class methodsFor: 'accessing' stamp: 'yo 12/11/2007 10:59' prior: 24193773! encodingNames ^ #('koi8-r') copy ! ! !KOI8RTextConverter class methodsFor: 'as yet unclassified' stamp: '' prior: 24194011! initialize self initializeTables! ! !KOI8RTextConverter class methodsFor: 'accessing' stamp: 'michael.rueger 2/2/2009 18:53' prior: 24193904! languageEnvironment ^RussianEnvironment! ! !BlockClosureTest methodsFor: 'tests - evaluating' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18253314! testCull [ ] cull: 1. [ :x | ] cull: 1. self should: [ [ :x :y | ] cull: 1 ] raise: Error. self should: [ [ :x :y :z | ] cull: 1 ] raise: Error. self should: [ [ :x :y :z :a | ] cull: 1 ] raise: Error. self should: [ [ :x :y :z :a :b | ] cull: 1 ] raise: Error. self assert: ([ 0 ] cull: 1) = 0. self assert: ([ :x | x ] cull: 1) = 1! ! !BlockClosureTest methodsFor: 'tests - evaluating' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18253863! testCullCull [ ] cull: 1 cull: 2. [ :x | ] cull: 1 cull: 2. [ :x :y | ] cull: 1 cull: 2. self should: [ [ :x :y :z | ] cull: 1 cull: 2 ] raise: Error. self should: [ [ :x :y :z :a | ] cull: 1 cull: 2 ] raise: Error. self should: [ [ :x :y :z :a :b | ] cull: 1 cull: 2 ] raise: Error. self assert: ([ 0 ] cull: 1 cull: 2) = 0. self assert: ([ :x | x ] cull: 1 cull: 2) = 1. self assert: ([ :x :y | y ] cull: 1 cull: 2) = 2! ! !BlockClosureTest methodsFor: 'tests - evaluating' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18254540! testCullCullCull [ ] cull: 1 cull: 2 cull: 3. [ :x | ] cull: 1 cull: 2 cull: 3. [ :x :y | ] cull: 1 cull: 2 cull: 3. [ :x :y :z | ] cull: 1 cull: 2 cull: 3. self should: [ [ :x :y :z :a | ] cull: 1 cull: 2 cull: 3 ] raise: Error. self should: [ [ :x :y :z :a :b | ] cull: 1 cull: 2 cull: 3 ] raise: Error. self assert: ([ 0 ] cull: 1 cull: 2 cull: 3) = 0. self assert: ([ :x | x ] cull: 1 cull: 2 cull: 3) = 1. self assert: ([ :x :y | y ] cull: 1 cull: 2 cull: 3) = 2. self assert: ([ :x :y :z | z ] cull: 1 cull: 2 cull: 3) = 3! ! !BlockClosureTest methodsFor: 'tests - evaluating' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18255363! testCullCullCullCull [ ] cull: 1 cull: 2 cull: 3 cull: 4. [ :x | ] cull: 1 cull: 2 cull: 3 cull: 4. [ :x :y | ] cull: 1 cull: 2 cull: 3 cull: 4. [ :x :y :z | ] cull: 1 cull: 2 cull: 3 cull: 4. [ :x :y :z :a | ] cull: 1 cull: 2 cull: 3 cull: 4. self should: [ [ :x :y :z :a :b | ] cull: 1 cull: 2 cull: 3 cull: 4 ] raise: Error. self assert: ([ 0 ] cull: 1 cull: 2 cull: 3 cull: 4) = 0. self assert: ([ :x | x ] cull: 1 cull: 2 cull: 3 cull: 4) = 1. self assert: ([ :x :y | y ] cull: 1 cull: 2 cull: 3 cull: 4) = 2. self assert: ([ :x :y :z | z ] cull: 1 cull: 2 cull: 3 cull: 4) = 3. self assert: ([ :x :y :z :a | a ] cull: 1 cull: 2 cull: 3 cull: 4) = 4! ! !BlockClosureTest methodsFor: 'tests - evaluating' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18256359! testValueWithArguments self should: [ aBlockContext valueWithArguments: #(1) ] raise: Error. aBlockContext valueWithArguments: #(). [ aBlockContext valueWithArguments: #(1) ] ifError: [ :err | self assert: err = 'Error: This block accepts 0 arguments, but was called with 1 argument.' ]. [ [ :i | 3 + 4 ] valueWithArguments: #(1 2) ] ifError: [ :err | self assert: err = 'Error: This block accepts 1 argument, but was called with 2 arguments.' ]! ! !TEmptyTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52013635! test0FixtureEmptyTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !TSequencedConcatenationTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 52164593! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !ZipCrcTests methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 55178895! testMissingZipCrc "See that the lack of a CRC does not raise an error" | reader writer bytes readBytes | writer := ZipWriteStream on: String new. writer nextPutAll: 'Hello World'. writer close. bytes := writer encodedStream contents. reader := ZipReadStream on: bytes. readBytes := reader upToEnd. self assert: readBytes = 'Hello World'. reader := ZipReadStream on: bytes. reader contents. reader := ZipReadStream on: bytes. reader next: 100! ! !ZipCrcTests methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 55180298! testValidZipCrc "See that a correct CRC does not raise an error and that we can read what we wrote." | reader writer bytes readBytes | writer := ZipWriteStream on: String new. writer nextPutAll: 'Hello World'. writer close. bytes := writer encodedStream contents. reader := ZipReadStream on: bytes. reader expectedCrc: writer crc. readBytes := reader upToEnd. self assert: readBytes = 'Hello World'. reader := ZipReadStream on: bytes. reader expectedCrc: writer crc. readBytes := reader contents. self assert: readBytes = 'Hello World'. reader := ZipReadStream on: bytes. reader expectedCrc: writer crc. readBytes := reader next: 11. self assert: readBytes = 'Hello World'. reader := ZipReadStream on: bytes. reader expectedCrc: writer crc. readBytes := reader next: 100. self assert: readBytes = 'Hello World'! ! !TSequencedStructuralEqualityTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52178831! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !MCWorkingCopyTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 25205075! testDoubleRepeatedMerge | base motherA1 motherA2 motherB1 motherB2 inst | base := self snapshot. self change: #a toReturn: 'a1'. motherA1 := self snapshot. self change: #c toReturn: 'c1'. motherA2 := self snapshot. self load: base. self change: #b toReturn: 'b1'. motherB1 := self snapshot. self change: #d toReturn: 'd1'. motherB2 := self snapshot. self load: base. self merge: motherA1. self merge: motherB1. self change: #a toReturn: 'a2'. self change: #b toReturn: 'b2'. self snapshot. self merge: motherA2. self merge: motherB2. inst := self mockInstanceA. self assert: inst a = 'a2'. self assert: inst b = 'b2'. self assert: inst c = 'c1'. self assert: inst d = 'd1'! ! !MCWorkingCopyTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 25208171! testRedundantMerge | base | base := self snapshot. self merge: base. self merge: base! ! !MCWorkingCopyTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 25208377! testRepeatedMerge | base mother1 mother2 inst | base := self snapshot. self change: #one toReturn: 2. mother1 := self snapshot. self change: #two toReturn: 3. mother2 := self snapshot. self load: base. self change: #truth toReturn: false. self snapshot. inst := self mockInstanceA. self assert: inst one = 1. self assert: inst two = 2. self merge: mother1. self assert: inst one = 2. self assert: inst two = 2. self change: #one toReturn: 7. self assert: inst one = 7. self assert: inst two = 2. self merge: mother2. self assert: inst one = 7. self assert: inst two = 3! ! !SortedCollectionTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 50578993! test0FixtureTConvertAsSetForMultiplinessTest "a collection ofFloat with equal elements:" | res | self withEqualElements. self withEqualElements do: [ :each | self assert: each class = Float ]. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. "a collection of Float without equal elements:" self elementsCopyNonIdenticalWithoutEqualElements. self elementsCopyNonIdenticalWithoutEqualElements do: [ :each | self assert: each class = Float ]. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !SortedCollectionTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 50581556! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !BagTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 17851153! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self elementToAdd! ! !BagTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 17858224! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection anElement | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. anElement := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: anElement)! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 40027390! testEnsureDirectoryCreatesParent | path | path := Path * 'plonk' / 'griffle'. self markForCleanup: path. self markForCleanup: path parent. filesystem ensureCreateDirectory: path. self assert: (filesystem isDirectory: Path * 'plonk'). self assert: (filesystem isDirectory: path)! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 40027812! testEnsureDirectoryExists | path | path := Path * 'plonk'. self markForCleanup: path. filesystem createDirectory: path. filesystem ensureCreateDirectory: path! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 39133383! testReadStream | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self should: [ reference readStream ] raise: FileDoesNotExist. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. stream := reference readStream. self assert: stream contents asString equals: 'griffle'. stream close! ! !TDictionaryKeysValuesAssociationsAccess methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51953584! test0FixtureDictionaryKeysValuesAssociationsAccess self nonEmpty. self deny: self nonEmpty isEmpty! ! !TDictionaryKeysValuesAssociationsAccess methodsFor: 'tests - Dictionary keys values associations access' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51952259! testKeys | collection result | collection := self nonEmpty. result := collection keys. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error! ! !TDictionaryKeysValuesAssociationsAccess methodsFor: 'tests - Dictionary keys values associations access' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51952712! testKeysSortedSafely | collection result | collection := self nonEmpty. result := collection keysSortedSafely. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error. self assert: result asArray isSorted! ! !ClassTraitTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 37143169! testChanges "Test the most important features to ensure that general functionality of class traits are working." "self run: #testChanges" | classTrait | classTrait := self t1 classTrait. self deny: (self t5 classSide includesSelector: #m1ClassSide). classTrait compile: 'm1ClassSide ^17' classified: 'mycategory'. "local selectors" self assert: (classTrait includesLocalSelector: #m1ClassSide). self deny: (classTrait includesLocalSelector: #otherSelector). "propagation" self assert: (self t5 classSide methodDict includesKey: #m1ClassSide). self assert: (self c2 class methodDict includesKey: #m1ClassSide). self c2 m1ClassSide. self assert: self c2 m1ClassSide equals: 17. "category" self assert: (self c2 class organization categoryOfElement: #m1ClassSide) equals: 'mycategory'. "conflicts" self t2 classSide compile: 'm1ClassSide' classified: 'mycategory'. self assert: (self c2 class methodDict includesKey: #m1ClassSide). self deny: (self c2 class includesLocalSelector: #m1ClassSide). self should: [ self c2 m1ClassSide ] raise: Error. "conflict category" self assert: (self c2 class organization categoryOfElement: #m1ClassSide) equals: #mycategory! ! !TCopySequenceableWithReplacementForSorted methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51910461! test0FixtureCopyWithReplacementForSorted self collectionOfSize5. self assert: self collectionOfSize5 size = 5. self replacementCollection. self deny: self replacementCollection isEmpty. self empty. self assert: self empty isEmpty! ! !HeapTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23347838! test0FixtureRequirementsOfTGrowableTest self empty. self nonEmpty. self element. self elementNotInForOccurrences. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotInForOccurrences)! ! !HeapTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23329668! testExamples self heapExample. self heapSortExample! ! !HeapTest methodsFor: 'basic tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23310325! testRemove "self run: #testRemove" | heap | heap := Heap new. self should: [ heap removeFirst ] raise: Error. heap add: 5. heap removeFirst. self assert: heap size = 0. heap add: 5. self should: [ heap removeAt: 2 ] raise: Error! ! !RBExplicitRequirementMethodsRule methodsFor: 'running' stamp: 'CamilloBruni 8/31/2013 22:01' prior: 46818296! checkClass: aContext | selectedClass explicitRequirementMethods | explicitRequirementMethods := Set new. selectedClass := aContext selectedClass. selectedClass isTrait ifTrue: [ ^ self ]. selectedClass traitComposition allSelectors do: [ :selector | | method | method := selectedClass>>selector. (method isRequired and: [ method isSubclassResponsibility not ]) ifTrue: [ explicitRequirementMethods add: method ]]. explicitRequirementMethods do: [ :method | aContext selectedClass withAllSuperclasses detect: [ :superclass | superclass canPerform: method selector ] ifNone: [result addClass: aContext selectedClass selector: method selector]].! ! !GoferApiTest methodsFor: 'testing-repositories-options' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22908084! testRepositoryErrors gofer url: 'http://pharo-project.org/page-that-will-never-ever-exist'; repository: self monticelloRepository. gofer package: 'GoferFoo'. gofer enableRepositoryErrors. self should: [ gofer resolved ] raise: GoferRepositoryError. gofer disableRepositoryErrors. gofer resolved! ! !TDictionaryIncludesWithIdentityCheckTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51948104! test0FixtureDictionaryIncludesIdentity self nonEmptyWithCopyNonIdentical. self deny: self nonEmptyWithCopyNonIdentical isEmpty. self nonEmptyWithCopyNonIdentical do: [ :each | self deny: each == each copy ]! ! !TIterateTest methodsFor: 'test - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52054285! test0FixtureIterateTest | res | self collectionWithoutNilElements. self assert: (self collectionWithoutNilElements occurrencesOf: nil) = 0. res := true. self collectionWithoutNilElements detect: [ :each | (self collectionWithoutNilElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !EyeInspectorTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 43581413! testErrorRaised | inspector | self instancesToTry do: [ :each | inspector := each inspector ]! ! !SetTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 33098312! test0FixtureAddForUniquenessTest self element. self collectionWithElement. self assert: (self collectionWithElement includes: self element). self collectionWithoutElement. self assert: (self collectionWithElement includes: self element)! ! !SetTest methodsFor: 'tests - with nil' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 33119493! testAllowInclusionOfNils | set | set := self classToBeTested new. set add: nil. self assert: (set includes: nil). set remove: nil. self deny: (set includes: nil)! ! !SetTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 33105252! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !InstVarRefLocatorTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23682847! testInstructions Object methods do: [ :method | | scanner printer end | scanner := InstructionStream on: method. printer := InstVarRefLocator new. end := scanner method endPC. [ scanner pc <= end ] whileTrue: [ printer interpretNextInstructionUsing: scanner ] ]! ! !TCopyTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51916724! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !CompiledMethod methodsFor: 'initialize-release' stamp: 'CamilloBruni 8/31/2013 20:55'! removeFromSystem ^ self methodClass removeSelector: self selector! ! !TAddForUniquenessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51792340! test0FixtureAddForUniquenessTest self element. self collectionWithElement. self assert: (self collectionWithElement includes: self element). self collectionWithoutElement. self deny: (self collectionWithoutElement includes: self element)! ! !StreamBugz methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 50918902! testReadWriteStreamNextNBug | aStream | aStream := ReadWriteStream on: String new. aStream nextPutAll: 'Hello World'. aStream next: 5! ! !GeneratorTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22877250! testErrorPropagation "Ensure that errors in the generator block are properly propagated" | generator | generator := Generator on: [ :g | g yield: 1. g error: 'yo' ]. self should: [ generator next ] raise: Error! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18174828! testDrawingWayOutside | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: 100; height: 100. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18175218! testDrawingWayOutside2 | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: 0 @ 0. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18175624! testDrawingWayOutside3 | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18176063! testDrawingWayOutside4 | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: 100; height: 100. bb sourceOrigin: SmallInteger maxVal squared asPoint. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18176509! testDrawingWayOutside5 | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: 0 @ 0. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb sourceOrigin: SmallInteger maxVal squared asPoint. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18176970! testDrawingWayOutside6 | f1 bb f2 | f1 := Form extent: 100 @ 100 depth: 1. f2 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb sourceForm: f2. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb sourceOrigin: SmallInteger maxVal squared asPoint. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18177464! testFillingWayOutside | f1 bb | f1 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb fillColor: Color black. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: 100; height: 100. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18177821! testFillingWayOutside2 | f1 bb | f1 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb fillColor: Color black. bb destOrigin: 0 @ 0. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb copyBits! ! !BitBltClipBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 18178194! testFillingWayOutside3 | f1 bb | f1 := Form extent: 100 @ 100 depth: 1. bb := BitBlt toForm: f1. bb combinationRule: 3. bb fillColor: Color black. bb destOrigin: SmallInteger maxVal squared asPoint. bb width: SmallInteger maxVal squared; height: SmallInteger maxVal squared. bb copyBits! ! !FractionTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22607544! testDegreeCos "self run: #testDegreeCos" (4 / 3) degreeCos. -361 / 3 to: 359 / 3 do: [ :i | self assert: (i degreeCos closeTo: i degreesToRadians cos) ]! ! !FractionTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22607823! testDegreeSin "self run: #testDegreeSin" (4 / 3) degreeSin. -361 / 3 to: 359 / 3 do: [ :i | self assert: (i degreeSin closeTo: i degreesToRadians sin) ]! ! !InteractiveResolverTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23901640! testCached [ resolver resolve: #home ] on: ResolutionRequest do: [ :req | req resume: self home ]. self assertOriginResolves: #home! ! !CustomHelpTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:26' prior: 20312278! testOpenBrowserOnThisHelpType |browser| browser := HelpBrowser openOn: CustomHelp. World doOneCycleNow. browser close! ! !TCloneTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51861115! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49471707! testValidTraitComposition "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: '{Trait1}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). d load. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1)! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49472610! testValidTraitComposition2 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). d load. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1)! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49473512! testValidTraitComposition3 "Related to http://code.google.com/p/pharo/issues/detail?id=2148" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1 + Trait2' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). d load. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls includesSelector: #c1). self assert: (cls includesSelector: #c2). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait1). self assert: ((Smalltalk at: #MCMockClassC) traitComposition allTraits includes: Trait2)! ! !MCClassDefinitionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49474557! testValidTraitComposition4 "Related to http://code.google.com/p/pharo/issues/detail?id=2598" | d className cls | className := 'MCMockClassC'. d := MCClassDefinition name: className superclassName: 'Object' traitComposition: 'Trait1 - {#c1}' classTraitComposition: '{}' category: self mockCategoryName instVarNames: #() classVarNames: #() poolDictionaryNames: #() classInstVarNames: #() type: #normal comment: (self commentForClass: className) commentStamp: (self commentStampForClass: className). d load. self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). cls := Smalltalk at: #MCMockClassC. self assert: (cls selectors includesAllOf: {#c}). self deny: (cls selectors includesAnyOf: {#c1})! ! !InstructionClientTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23699705! testInstructions "just interpret all of methods of Object" | client | client := InstructionClient new. Object methods do: [ :method | | scanner | scanner := InstructionStream on: method. [ scanner pc <= method endPC ] whileTrue: [ scanner interpretNextInstructionFor: client ] ]! ! !OCPerformTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35222648! testPerformWithArgsLargeFrame self doPerformOldLargeFrame! ! !OCPerformTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35222831! testPerformWithArgsSmallFrame self doPerformOldSmallFrame! ! !MCSerializationTest methodsFor: 'asserting' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 24975298! assertExtensionProvidedBy: aClass aClass readerClass extension! ! !StackTest methodsFor: 'test' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 50785490! testEmptyError | aStack | aStack := Stack new. self should: [ aStack top ] raise: Error. self should: [ aStack pop ] raise: Error. aStack push: 'element'. aStack top. aStack pop. "The stack is empty again due to previous pop" self should: [ aStack top ] raise: Error. self should: [ aStack pop ] raise: Error! ! !LanguageEnvironment commentStamp: '' prior: 49826509! The name multilingualized suggests that you can use multiple language at one time. This is true, of course, but the system still how to manage the primary language; that provides the interpretation of data going out or coming in from outside world. It also provides how to render strings, as there rendering rule could be different in one language to another, even if the code points in a string is the same. Originally, LanguageEnvironment and its subclasses only has class side methods. After merged with Diego's Babel work, it now has instance side methods. Since this historical reason, the class side and instance side are not related well. When we talk about the interface with the outside of the Squeak world, there are three different "channels"; the keyboard input, clipboard output and input, and filename. On a not-to-uncommon system such as a Unix system localized to Japan, all of these three can have (and does have) different encodings. So we need to manage them separately. Note that the encoding in a file can be anything. While it is nice to provide a suggested guess for this 'default system file content encoding', it is not critical. Rendering support is limited basic L-to-R rendering so far. But you can provide different line-wrap rule, at least. ! !GreekEnvironment commentStamp: '' prior: 49827863! This class provides the support for Greek. It is here, but most of the methods are not implemented yet. ! !GreekEnvironment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:32'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 13+1.! ! !GreekEnvironment class methodsFor: 'subclass responsibilities' stamp: 'nice 5/1/2011 19:22' prior: 23029035! leadingChar ^0! ! !GreekEnvironment class methodsFor: 'subclass responsibilities' stamp: 'mir 7/1/2004 18:23' prior: 23029149! supportedLanguages "Return the languages that this class supports. Any translations for those languages will use this class as their environment." ^#('el' )! ! !GreekEnvironment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:26' prior: 46006305! systemConverterClass Smalltalk os isWin32 ifTrue: [^CP1253TextConverter ]. ^ ISO88597TextConverter. ! ! !JapaneseEnvironment commentStamp: '' prior: 49828037! This class provides the Japanese support. Since it has been used most other than default 'latin-1' languages, this tends to be a good place to look at when you want to know what a typical subclass of LanguageEnvironment should do. ! !JapaneseEnvironment class methodsFor: 'language methods' stamp: 'ar 4/9/2005 22:31' prior: 24064311! fromJISX0208String: aString ^ aString collect: [:each | Character leadingChar: JapaneseEnvironment leadingChar code: (each asUnicode)]. ! ! !JapaneseEnvironment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:29'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 5+1.! ! !JapaneseEnvironment class methodsFor: 'rendering support' stamp: 'yo 3/18/2005 08:00' prior: 24064844! isBreakableAt: index in: text | prev | index = 1 ifTrue: [^ false]. prev := text at: index - 1. prev leadingChar ~= JapaneseEnvironment leadingChar ifTrue: [^ true]. ^ (('、。,.・:;?!゛゜´`¨^―‐/\〜‖|…‥’”)〕]}〉》」』】°′″℃' includes: (text at: index)) or: ['‘“(〔[{〈《「『【°′″℃@§' includes: prev]) not. !]lang[(177 11 1 1 1 4 1 16 1 3 36 11 1 4 25)0,5,0,5,0,5,0,5,0,5,0,5,0,5,0! ! !JapaneseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'yo 3/17/2004 21:55' prior: 24065418! leadingChar ^ 5. ! ! !JapaneseEnvironment class methodsFor: 'language methods' stamp: 'yo 3/17/2004 21:54' prior: 24064541! scanSelector ^ #scanJapaneseCharactersFrom:to:in:rightX:stopConditions:kern: ! ! !JapaneseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'mir 7/21/2004 19:09' prior: 24065539! supportedLanguages "Return the languages that this class supports. Any translations for those languages will use this class as their environment." ^#('ja' 'ja-etoys' )! ! !JapaneseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:25' prior: 46006528! systemConverterClass | encoding | Smalltalk os isWin32 ifTrue: [^ShiftJISTextConverter]. Smalltalk os isMacOS ifTrue: [^UTF8TextConverter]. Smalltalk os isUnix ifTrue: [encoding := X11Encoding encoding. encoding ifNil: [^EUCJPTextConverter]. (encoding = 'utf-8') ifTrue: [^UTF8TextConverter]. (encoding = 'shiftjis' or: [ encoding = 'sjis' ]) ifTrue: [^ShiftJISTextConverter]. ^EUCJPTextConverter]. ^UTF8TextConverter! ! !JapaneseEnvironment class methodsFor: 'language methods' stamp: 'yo 3/16/2004 14:49' prior: 24064712! traditionalCharsetClass ^ JISX0208. ! ! !KoreanEnvironment commentStamp: '' prior: 49828336! This class provides the Korean support. Unfortunately, we haven't tested this yet. We did have a working version in previous implementations, but not this new implementation. But as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! !KoreanEnvironment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:30'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 7+1.! ! !KoreanEnvironment class methodsFor: 'subclass responsibilities' stamp: 'janggoon 11/4/2008 22:11' prior: 24242179! leadingChar ^ 7! ! !KoreanEnvironment class methodsFor: 'subclass responsibilities' stamp: 'mir 7/1/2004 18:42' prior: 24242888! supportedLanguages "Return the languages that this class supports. Any translations for those languages will use this class as their environment." ^#('ko' )! ! !KoreanEnvironment class methodsFor: 'subclass responsibilities' stamp: 'cami 7/22/2013 18:25' prior: 46016939! systemConverterClass | encoding | Smalltalk os isWin32 ifTrue: [^EUCKRTextConverter]. Smalltalk os isMacOS ifTrue: [^UTF8TextConverter]. Smalltalk os isUnix ifTrue: [encoding := X11Encoding encoding. encoding ifNil: [^EUCKRTextConverter]. (encoding = 'utf-8') ifTrue: [^UTF8TextConverter]. ^EUCKRTextConverter]. ^UTF8TextConverter! ! !KoreanEnvironment class methodsFor: 'language methods' stamp: 'yo 3/16/2004 14:50' prior: 24242751! traditionalCharsetClass ^ KSX1001. ! ! !RussianEnvironment commentStamp: 'StephaneDucasse 11/29/2011 22:25' prior: 49828744! EncodedCharSet initialize. LanguageEnvironment resetKnownEnvironments. Locale switchToID: (LocaleID isoLanguage: 'ru'). ! !RussianEnvironment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:32'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 15+1.! ! !RussianEnvironment class methodsFor: 'subclass responsibilities' stamp: 'nice 5/1/2011 19:22' prior: 32336444! leadingChar ^0! ! !RussianEnvironment class methodsFor: 'subclass responsibilities' stamp: 'yo 12/11/2007 11:22' prior: 32336555! supportedLanguages "Return the languages that this class supports. Any translations for those languages will use this class as their environment." ^#('ru' )! ! !RussianEnvironment class methodsFor: 'subclass responsibilities' stamp: 'yo 8/29/2008 14:11' prior: 32336811! systemConverterClass ^ UTF8TextConverter! ! !SimplifiedChineseEnvironment commentStamp: '' prior: 49828942! This class provides the Simplified Chinese support (Used mainly in Mainland China). Unfortunately, we haven't tested this yet, but as soon as we find somebody who understand the language, probably we can make it work in two days or so, as we have done for Czech support.! !SimplifiedChineseEnvironment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:30'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 6+1.! ! !SimplifiedChineseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'DrGeoUser 6/21/2012 16:29' prior: 33339664! leadingChar ^0! ! !SimplifiedChineseEnvironment class methodsFor: 'subclass responsibilities' stamp: 'mir 7/1/2004 18:22' prior: 33339790! supportedLanguages "Return the languages that this class supports. Any translations for those languages will use this class as their environment." ^#('zh' )! ! !SimplifiedChineseEnvironment class methodsFor: 'language methods' stamp: 'yo 3/16/2004 14:55' prior: 33339511! traditionalCharsetClass ^ GB2312 ! ! !TIterateSequencedReadableTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 52042700! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !HTTPEncodingTest methodsFor: '*Multilingual-OtherLanguages' stamp: 'PavelKrivanek 11/8/2012 12:13' prior: 23142768! testPercentEncodingJa | leading hiraA hiraO hiraAO encodedHiraA encodedHiraO encodedHiraAO | "Make Japanese String from unicode. see http://www.unicode.org/charts/PDF/U3040.pdf" leading := JapaneseEnvironment leadingChar. hiraA := (Character leadingChar: leading code: 16r3042) asString. "HIRAGANA LETTER A" hiraO := (Character leadingChar: leading code: 16r304A) asString. "HIRAGANA LETTER O" hiraAO := hiraA, hiraO. "Percent Encoded Japanese String" encodedHiraA := hiraA encodeForHTTP. self assert: encodedHiraA = '%E3%81%82'. encodedHiraO := hiraO encodeForHTTP. self assert: encodedHiraO = '%E3%81%8A'. encodedHiraAO := hiraAO encodeForHTTP. self assert: encodedHiraAO = '%E3%81%82%E3%81%8A'. "without percent encoded string" self assert: '' unescapePercents = ''. self assert: 'abc' unescapePercents = 'abc'. "latin1 character" self assert: hiraAO unescapePercents = hiraAO. "multibyte character" "encoded latin1 string" self assert: '%61' unescapePercents = 'a'. self assert: '%61%62%63' unescapePercents = 'abc'. "encoded multibyte string" Locale currentPlatform: (Locale isoLanguage: 'ja') during: [ self assert: encodedHiraA unescapePercents = hiraA. self assert: encodedHiraAO unescapePercents = hiraAO]. "mixed string" Locale currentPlatform: (Locale isoLanguage: 'ja') during: [ self assert: (encodedHiraAO,'a') unescapePercents = (hiraAO, 'a'). self assert: ('a', encodedHiraA) unescapePercents = ('a', hiraA). self assert: ('a', encodedHiraA, 'b') unescapePercents = ('a', hiraA, 'b'). self assert: ('a', encodedHiraA, 'b', encodedHiraO) unescapePercents = ('a', hiraA, 'b', hiraO). self assert: (encodedHiraA, encodedHiraO, 'b', encodedHiraA) unescapePercents = (hiraA, hiraO, 'b', hiraA)]. "for Seaside" Locale currentPlatform: (Locale isoLanguage: 'ja') during: [ self assert: (encodedHiraA, '+', encodedHiraO) unescapePercents = (hiraA, ' ', hiraO)]. ! ! !TIncludesWithIdentityCheckTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52026166! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !WideSymbol methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 7/29/2005 21:53' prior: 54888106! mutateJISX0208StringToUnicode | c | 1 to: self size do: [:i | c := self at: i. (c leadingChar = JISX0208 leadingChar or: [ c leadingChar = (JISX0208 leadingChar bitShift: 2)]) ifTrue: [ self basicAt: i put: (Character leadingChar: JapaneseEnvironment leadingChar code: (c asUnicode)) asciiValue. ] ]. ! ! !HandBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23211617! testTargetPoint "self new testTargetPoint" "self run: #testTargetPoint" ActiveHand targetPoint! ! !TAddTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51797302! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !BehaviorTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 48851576! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | (TBehavior >> selector) sourceCode. self assert: (TBehavior >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#externalTypeAlias: #nbBindingOf: #format #nbFnArgument:generator: #layout #isBehavior) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #localSelectors #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet! ! !TRemoveByIndexTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52144776! test0FixtureRemoveByIndexTest self collectionWith5Elements. self assert: self collectionWith5Elements size = 5! ! !TIndexAccessForMultipliness methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52036549! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !TIndexAccessForMultipliness methodsFor: 'tests - index accessing for multipliness' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52037221! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self collectionWithNonIdentitySameAtEndAndBegining. collection := self collectionWithNonIdentitySameAtEndAndBegining. self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !OCScannerTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 38892326! testAmbiguousSelector "Non regression test. See http://code.google.com/p/pharo/issues/detail?id=2271 and http://bugs.squeak.org/view.php?id=7491" '1@-1' parseLiterals. self assert: ('1@-1' parseLiterals at: 2) asString = '@-'! ! !ObjectTest methodsFor: 'tests - debugging' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 28685331! testHaltOnce | anObject | anObject := Object new. Halt enableHaltOnce. self should: [ anObject haltOnce ] raise: Halt. Halt disableHaltOnce. anObject haltOnce! ! !TSubCollectionAccess methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52196241! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 46796175! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | (TClassDescription >> selector) sourceCode. self assert: (TClassDescription >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "superclass:layout, initializeLayout, initializeLayoutWithSlots:, layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) baseClass classClass classVersion -> they have their equivalens in TraitDescription (baseTrait classTrait traitVersion)" self assert: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: #classVersion) asSet. "isClassTrait, baseTrait, traitVersion, isBaseTrait, classTrait -> They have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names copyTraitExpresion addExclusionOf: have no equivalent in classes" self assert: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #traitVersion #isBaseTrait #classTrait) asSet! ! !TCopyPartOfSequenceableForMultipliness methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51890340! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !MetaclassTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 48826324! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | (TApplyingOnClassSide >> selector) sourceCode. self assert: (TApplyingOnClassSide >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#externalTypeAlias:. #baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:} asSet! ! !MCMethodDefinitionTest methodsFor: 'mocks' stamp: 'CamilloBruni 8/31/2013 21:20' prior: 42005636! override ^ 1! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35136738! testDecompileBytecodeDecompilerTestClass | decompiledIR aCompiledMethod | self class methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. aCompiledMethod := decompiledIR compiledMethod ]! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35137100! testDecompileBytecodeGeneratorTest | decompiledIR aCompiledMethod | OCBytecodeGeneratorTest methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. aCompiledMethod := decompiledIR compiledMethod ]! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35137466! testDecompileIRBuilderTestClass | decompiledIR aCompiledMethod | IRBuilderTest methodDict do: [ :each | decompiledIR := IRBytecodeDecompiler new decompile: each. aCompiledMethod := decompiledIR compiledMethod ]! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35137821! testDecompilerOrderedCollectionDo | cm decompiledIR | cm := OrderedCollection >> #do:. decompiledIR := IRBytecodeDecompiler new decompile: cm. decompiledIR compiledMethod! ! !OCBytecodeDecompilerTest methodsFor: 'tests - examples' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 35151586! testWhileTrue | cm decompiledIR aCompiledMethod | cm := self class >> #testWhileTrue. decompiledIR := IRBytecodeDecompiler new decompile: cm. aCompiledMethod := decompiledIR compiledMethod! ! !TranslucentColorTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 53513955! testInitialization (TranslucentColor r: 1.0 g: 0.0 b: 0.0) printString! ! !TPutBasicTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:53' prior: 52134741! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !OrderedCollectionTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 28823205! test0FixtureTConvertAsSetForMultiplinessTest "a collection ofFloat with equal elements:" | res | self withEqualElements. self withEqualElements do: [ :each | self assert: each class = Float ]. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true. "a collection of Float without equal elements:" self elementsCopyNonIdenticalWithoutEqualElements. self elementsCopyNonIdenticalWithoutEqualElements do: [ :each | self assert: each class = Float ]. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !OrderedCollectionTest methodsFor: 'tests - adding' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 28761919! testAtIfAbsentPut "Allows one to add an element at an index if no element exist at this index" "self run:#testAtIfAbsentPut" | c | c := #(1 2 3 4) asOrderedCollection. c at: 2 ifAbsentPut: [ 5 ]. self assert: c = #(1 2 3 4) asOrderedCollection. c at: 5 ifAbsentPut: [ 5 ]. self assert: c = #(1 2 3 4 5) asOrderedCollection. c at: 7 ifAbsentPut: [ 7 ]. self assert: c = #(1 2 3 4 5 nil 7) asOrderedCollection! ! !OrderedCollectionTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 28826927! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !UrlTest methodsFor: 'tests' stamp: 'CamilloBruni 9/1/2013 03:09' prior: 54574493! testAbsolutePortErrorFix Url absoluteFromText: 'http://swikis.ddo.jp:8823/'. self should: [Url absoluteFromText: 'http://swikis.ddo.jp:-1/'] raise: Error. self should: [Url absoluteFromText: 'http://swikis.ddo.jp:65536/'] raise: Error. self should: [Url absoluteFromText: 'http://swikis.ddo.jp:auau/'] raise: Error.! ! !FontTest methodsFor: '*Multilingual-OtherLanguages' stamp: 'AlainPlantec 9/15/2011 17:26' prior: 22446112! testMultistringFont "self debug: #testMultistringFont" | text p style height width | [(TextStyle default fontArray at: JapaneseEnvironment leadingChar) ifNil: [^ self]] ifError: [ ^ self]. text := ((#(20983874 20983876 20983878 ) collect: [:e | e asCharacter]) as: String) asText. p := Paragraph new. style := TextStyle default. p compose: text style: style from: 1 in: (0 @ 0 corner: 100 @ 100). "See CompositionScanner>>setActualFont: & CompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:" height := style defaultFont height + style leading. width := text inject: 0 into: [:tally :next | tally + (style defaultFont widthOf: next)]. p adjustRightX. self assert: p extent = (width @ height). "Display getCanvas paragraph: p bounds: (10 @ 10 extent: 100 @ 100) color: Color black"! ! !RBTransformationRule methodsFor: 'running' stamp: 'CamilloBruni 8/31/2013 20:51' prior: 31472046! checkMethod: aContext aContext compiledMethod isFromTrait ifTrue: [ ^ self ]. (self rewriteRule canMatchMethod: aContext compiledMethod) ifFalse: [ ^ self ]. class := aContext selectedClass. (self rewriteRule executeTree: aContext parseTree) ifTrue: [ (self class recursiveSelfRule executeTree: rewriteRule tree initialAnswer: false) ifFalse: [ builder compile: rewriteRule tree newSource in: class classified: aContext protocol ] ]! ! !Latin9Environment class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:33'! initialize EncodedCharSet declareEncodedCharSet: self atIndex: 17+1.! ! !ClassTestCase methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19347306! testNew self targetClass new! ! !TDictionaryIncludesTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51943533! test0FixtureDictionaryIncludes | in | self nonEmpty. self deny: self nonEmpty isEmpty. self valueNotInNonEmpty. in := false. self nonEmpty valuesDo: [ :assoc | assoc = self valueNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false. self keyNotInNonEmpty. in := false. self nonEmpty keysDo: [ :assoc | assoc = self keyNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false! ! !WideString methodsFor: '*Multilingual-OtherLanguages' stamp: 'ar 4/9/2005 22:31' prior: 54871269! mutateJISX0208StringToUnicode | c | 1 to: self size do: [:i | c := self at: i. (c leadingChar = JISX0208 leadingChar or: [ c leadingChar = (JISX0208 leadingChar bitShift: 2)]) ifTrue: [ self basicAt: i put: (Character leadingChar: JapaneseEnvironment leadingChar code: (c asUnicode)) asciiValue. ] ]. ! ! !LinkedListTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 24452978! test0FixtureIndexAccessTest | res | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size = 5. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: (self collectionMoreThan1NoDuplicates includes: self elementInForIndexAccessing). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !LinkedListTest methodsFor: 'tests - sequenceable' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 34584455! testAtPut | ll | ll := LinkedList new. ll add: 1. ll at: 1 put: 2. self assert: (ll at: 1) equals: 2! ! !LinkedListTest methodsFor: 'tests - sequenceable' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 34584753! testAtPutOutsideBounds | ll | ll := LinkedList new. self should: [ ll at: 1 put: 1 ] raise: SubscriptOutOfBounds! ! !LinkedListTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 24458272! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !Unicode class methodsFor: 'class initialization' stamp: 'StephaneDucasse 8/22/2013 14:34' prior: 54497361! initialize "This class should be initialized using the textual unicode definitions that can be found in http://www.unicode.org/Public/UNIDATA/UnicodeData.txt http://www.unicode.org/Public/UNIDATA/CaseFolding.txt To do that, this class posesses the class side methods: #parseCaseMappingFrom: #parseUnicodeDataFrom: The initialization order is: 1) tag constants 2) unicode data 3) case mappings " "If you are in a full image, you can try the following Zinc scripts to download the file automatically: UIManager default informUserDuring: [ :bar| | result | bar label: 'Downloading Unicode data'. (result := ZnEasy get: 'http://www.unicode.org/Public/UNIDATA/UnicodeData.txt') isSuccess ifFalse: [ ^ self error: 'Download failed' ]. bar label: 'Updating Case Mappings'. self parseUnicodeDataFrom: result contents readStream ]. UIManager default informUserDuring: [ :bar| | result | bar label: 'Downloading Unicode case mappings data'. (result := ZnEasy get: 'http://www.unicode.org/Public/UNIDATA/CaseFolding.txt') isSuccess ifFalse: [ ^ self error: 'Download failed' ]. bar label: 'Updating Case Mappings'. self parseCaseMappingFrom: result contents readStream ]. " EncodedCharSet declareEncodedCharSet: self atIndex: 0+1. EncodedCharSet declareEncodedCharSet: self atIndex: 256. ! ! !Unicode class methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 1/12/2004 18:11' prior: 54512124! isJapanese: code ^ code > 255 and: [(JISX0208 charFromUnicode: code) notNil]. ! ! !Unicode class methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 1/12/2004 18:11' prior: 54512280! isKorean: code ^ code > 255 and: [(KSX1001 charFromUnicode: code) notNil] ! ! !Unicode class methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 1/12/2004 18:11' prior: 54512433! isSimplifiedChinese: code ^ code > 255 and: [(GB2312 charFromUnicode: code) notNil] ! ! !Unicode class methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 1/12/2004 18:00' prior: 54512597! isTraditionalChinese: code ^ false. ! ! !Unicode class methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 1/12/2004 17:55' prior: 54512711! isUnifiedKanji: code ^ ((((16r2E80 <= code and: [code <= 16rA4CF]) or: [16rF900 <= code and: [code <= 16rFAFF]]) or: [16rFE30 <= code and: [code <= 16rFE4F]]) or: [16rFF00 <= code and: [code <= 16rFFEF]]) or: [16r20000 <= code and: [code <= 16r2FA1F]]. ! ! !UUIDPrimitivesTest methodsFor: 'tests' stamp: 'CamilloBruni 9/1/2013 03:09' prior: 54455084! testCreationFromString36WithNillUUID UUID fromString36: (UUID nilUUID asString36).! ! !RBParseTreeRewriter methodsFor: 'private' stamp: 'CamilloBruni 8/31/2013 20:51' prior: 30903399! lookForMoreMatchesInContext: oldContext oldContext keysAndValuesDo: [:key :value | (key isString not and: [key recurseInto]) ifTrue: [oldContext at: key put: (value collect: [:each | self visitNode: each])]]! ! !RectangleTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 36330288! testStoreOn | assoc assoc2 | assoc := (0 @ 0 extent: 1 @ 1) -> 0. assoc2 := self class compiler evaluate: assoc storeString. self assert: assoc key = assoc2 key. self assert: assoc value = assoc2 value! ! !DelayTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 20645588! testBounds "self run: #testBounds" self should: [ Delay forMilliseconds: -1 ] raise: Error. Delay forMilliseconds: SmallInteger maxVal // 2 + 1. Delay forMilliseconds: SmallInteger maxVal + 1. (Delay forMilliseconds: Float pi) wait "Wait 3ms"! ! !TSequencedElementAccessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52174537! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !ProcessTerminateBug methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 37135659! testUnwindFromForeignProcess "self debug:#testUnwindFromForeignProcess" | sema process | sema := Semaphore forMutualExclusion. self assert: sema isSignaled. process := [ sema critical: [ self deny: sema isSignaled. sema wait "deadlock" ] ] forkAt: Processor userInterruptPriority. self deny: sema isSignaled. "This is for illustration only - the BlockCannotReturn cannot be handled here (it's truncated already)" process terminate. self assert: sema isSignaled! ! !TextMorphTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 52841230! testInitialize "For now, just make sure initialization doesn't throw exception" TextMorph initialize! ! !TDictionaryValueAccessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51961873! test0FixtureDictionaryElementAccess | in | self nonEmpty. self deny: self nonEmpty isEmpty. self keyNotIn. in := true. self nonEmpty keys detect: [ :key | key = self keyNotIn ] ifNone: [ in := false ]. self assert: in = false! ! !TDictionaryValueAccessTest methodsFor: 'tests - DictionaryIndexAccessing' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51958841! testAtError "self run: #testAtError" | dict nonExistantKey keyIn | dict := self nonEmpty. nonExistantKey := self keyNotIn. keyIn := dict keys anyOne. dict at: keyIn. self should: [ dict at: nonExistantKey ] raise: Error! ! !MorphBugs methodsFor: 'accessing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 26852092! adhereToEdgeTest "self new adhereToEdgeTest" "self run: #adhereToEdgeTest" | r | r := Morph new openInWorld. [ r adhereToEdge: #eternity ] ensure: [ r delete ]. r delete. ^ true! ! !TDictionaryEnumeratingTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51936914! test0FixtureDictionaryEnumeratingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty! ! !TIndexAccess methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52029617! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !TConvertAsSetForMultiplinessIdentityTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51873537! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !TConvertAsSortedTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51878030! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !FloatTest methodsFor: 'test - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22385176! testDegreeCos 45.0 degreeCos. "Following tests use approximate equality, because cosine are generally evaluated using inexact Floating point arithmetic" self assert: (45.0 degreeCos squared - 0.5) abs <= Float epsilon. self assert: (60.0 degreeCos - 0.5) abs <= Float epsilon. self assert: (120.0 degreeCos + 0.5) abs <= Float epsilon. -360.0 to: 360.0 do: [ :i | self assert: (i degreeCos closeTo: i degreesToRadians cos) ]. "Following tests use strict equality which is a requested property of degreeCos" -10.0 to: 10.0 do: [ :k | self assert: (k * 360 + 90) degreeCos = 0. self assert: (k * 360 - 90) degreeCos = 0. self assert: (k * 360 + 180) degreeCos + 1 = 0. self assert: (k * 360) degreeCos - 1 = 0 ]! ! !FloatTest methodsFor: 'test - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22386285! testDegreeSin 45.0 degreeSin. "Following tests use approximate equality, because sine are generally evaluated using inexact Floating point arithmetic" self assert: (45.0 degreeSin squared - 0.5) abs <= Float epsilon. self assert: (30.0 degreeSin - 0.5) abs <= Float epsilon. self assert: (-30.0 degreeSin + 0.5) abs <= Float epsilon. -360.0 to: 360.0 do: [ :i | self assert: (i degreeSin closeTo: i degreesToRadians sin) ]. "Following tests use strict equality which is a requested property of degreeSin" -10.0 to: 10.0 do: [ :k | self assert: (k * 360 + 90) degreeSin - 1 = 0. self assert: (k * 360 - 90) degreeSin + 1 = 0. self assert: (k * 360 + 180) degreeSin = 0. self assert: (k * 360) degreeSin = 0 ]! ! !FloatTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22400837! testHash self assert: 2 = 2.0 ==> (2 hash = 2.0 hash). self assert: 1 / 2 = 0.5 ==> ((1 / 2) hash = 0.5 hash). Float nan hash. Float infinity hash! ! !RGMethodDefinitionTest methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 8/31/2013 21:16' prior: 46014069! foo ^ 'second version'! ! !TRemoveTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52153645! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !TRemoveTest methodsFor: 'tests - remove' stamp: 'CamilloBruni 8/31/2013 20:45' prior: 52154362! testRemoveAll "self debug: #testRemoveElementThatExists" | el aSubCollection collection res | collection := self nonEmptyWithoutEqualElements. el := collection anyOne. aSubCollection := collection copyWithout: el. res := collection removeAll: aSubCollection. self assert: collection size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !TRemoveTest methodsFor: 'tests - remove' stamp: 'CamilloBruni 8/31/2013 20:45' prior: 52155237! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !TRemoveTest methodsFor: 'tests - remove' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52156962! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !TRemoveTest methodsFor: 'tests - remove' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52157298! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !TConcatenationTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51869202! test0FixtureConcatenationTest self firstCollection. self deny: self firstCollection isEmpty. self firstCollection. self deny: self firstCollection isEmpty. self empty. self assert: self empty isEmpty! ! !FileSystemHandleTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22050032! testAtPutBinaryAscii handle at: 1 put: 32. handle at: 1 put: Character space! ! !FileSystemHandleTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22050250! testAtWriteBinaryAscii handle at: 1 write: #[32] startingAt: 1 count: 1. handle at: 1 write: (String with: Character space) startingAt: 1 count: 1! ! !FileSystemHandleTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 40047958! testEnsureClosed filesystem := self createFileSystem. reference := filesystem * 'plonk'. handle := reference openWritable: true. handle ensureClosed. self deny: handle isOpen. handle ensureClosed. reference ensureDelete. handle reference exists ifTrue: [ self error ]. handle ensureClosed! ! !TDictionaryRemovingTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51957669! test0FixtureDictionaryRemovingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self keyNotInNonEmptyDict. self deny: (self nonEmptyDict keys includes: self keyNotInNonEmptyDict)! ! !IntervalTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23977241! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self elementToAdd. self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !IntervalTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23985063! test0IndexAccessingTest self accessCollection. self assert: self accessCollection size = 5. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self accessCollection includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForIndexAccessing. self deny: (self accessCollection includes: self elementNotInForIndexAccessing). self elementInForIndexAccessing. self assert: (self accessCollection includes: self elementInForIndexAccessing). self collectionOfFloat. self collectionOfFloat do: [ :each | self deny: each class = SmallInteger ]! ! !IntervalTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:34' prior: 23934103! testAsInterval "This is the same as newFrom:" "self run: #testAsIntervaltestAsInterval" self assert: (#(1 2 3) as: Interval) = (1 to: 3). self assert: (#(33 5 -23) as: Interval) = (33 to: -23 by: -28). self assert: (#[2 4 6] as: Interval) = (2 to: 6 by: 2). self should: [#(33 5 -22) as: Interval] raise: Error description: 'This is not an arithmetic progression' ! ! !IntervalTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:34' prior: 23935367! testEquals self assert: (3 to: 5) = #(3 4 5). self deny: (3 to: 5) = #(3 5). self deny: (3 to: 5) = #(). self assert: #(3 4 5) = (3 to: 5). self deny: #(3 5) = (3 to: 5). self deny: #() = (3 to: 5).! ! !IntervalTest methodsFor: 'tests - includes' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 23986326! testIdentityIncludes " test the comportement in presence of elements 'includes' but not 'identityIncludes' " " can not be used by collections that can't include elements for wich copy doesn't return another instance " | collection element | self collectionWithCopyNonIdentical. collection := self collectionWithCopyNonIdentical. element := collection anyOne copy. "self assert: (collection includes: element)." self deny: (collection identityIncludes: element)! ! !IntervalTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:34' prior: 23940535! testNewFrom self assert: ( (Interval newFrom: (1 to: 1)) = (1 to: 1)). self assert: ( (Interval newFrom: #(1)) = (1 to: 1)). self assert: ( (Interval newFrom: #()) = ( 1 to: 0)).! ! !WikiStyleHelpTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:26' prior: 54904498! testOpenBrowserOnThisHelpType |browser| browser := HelpBrowser openOn: WikiStyleHelp. World doOneCycleNow. browser close ! ! !ColorTest methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19718822! testPrintHtmlString "self debug: #testPrintHtmlString" Color white printHtmlString. self assert: Color white printHtmlString = 'FFFFFF'. self assert: Color red printHtmlString = 'FF0000'. self assert: Color black printHtmlString = '000000'! ! !EncodedCharSet class methodsFor: 'initialize' stamp: 'StephaneDucasse 8/22/2013 14:24'! declareEncodedCharSet: anEncodedCharSetOrLanguageEnvironmentClass atIndex: aNumber EncodedCharSets at: aNumber put: anEncodedCharSetOrLanguageEnvironmentClass "this method is used to modularize the old initialize method: EncodedCharSets at: 0+1 put: Unicode. EncodedCharSets at: 1+1 put: JISX0208. EncodedCharSets at: 2+1 put: GB2312. EncodedCharSets at: 3+1 put: KSX1001. EncodedCharSets at: 4+1 put: JISX0208. EncodedCharSets at: 5+1 put: JapaneseEnvironment. EncodedCharSets at: 6+1 put: SimplifiedChineseEnvironment. EncodedCharSets at: 7+1 put: KoreanEnvironment. EncodedCharSets at: 8+1 put: GB2312. EncodedCharSets at: 12+1 put: KSX1001. EncodedCharSets at: 13+1 put: GreekEnvironment. EncodedCharSets at: 14+1 put: Latin2Environment. EncodedCharSets at: 15+1 put: RussianEnvironment. EncodedCharSets at: 17+1 put: Latin9Environment. EncodedCharSets at: 256 put: Unicode. " ! ! !EncodedCharSet class methodsFor: 'initialize' stamp: 'StephaneDucasse 8/22/2013 14:34' prior: 21166312! initialize "self initialize" EncodedCharSets := Array new: 256. self allSubclassesDo: [:each | each initialize]. LanguageEnvironment allSubclassesDo: [:each | each initialize]. "EncodedCharSets at: 0+1 put: Unicode. EncodedCharSets at: 1+1 put: JISX0208. EncodedCharSets at: 2+1 put: GB2312. EncodedCharSets at: 3+1 put: KSX1001. EncodedCharSets at: 4+1 put: JISX0208. EncodedCharSets at: 5+1 put: JapaneseEnvironment. EncodedCharSets at: 6+1 put: SimplifiedChineseEnvironment. EncodedCharSets at: 7+1 put: KoreanEnvironment. EncodedCharSets at: 8+1 put: GB2312. EncodedCharSets at: 12+1 put: KSX1001. EncodedCharSets at: 13+1 put: GreekEnvironment. EncodedCharSets at: 14+1 put: Latin2Environment. EncodedCharSets at: 15+1 put: RussianEnvironment. EncodedCharSets at: 17+1 put: Latin9Environment. EncodedCharSets at: 256 put: Unicode." ! ! !GB2312 commentStamp: 'yo 10/19/2004 19:52' prior: 49829276! This class represents the domestic character encoding called GB 2312 used for simplified Chinese. ! !GB2312 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 22816483! compoundTextSequence ^ compoundTextSequence! ! !GB2312 class methodsFor: 'class methods' stamp: 'StephaneDucasse 8/22/2013 14:31' prior: 22816618! initialize " GB2312 initialize " EncodedCharSet declareEncodedCharSet: self atIndex: 2+1. EncodedCharSet declareEncodedCharSet: self atIndex: 8+1. compoundTextSequence := String streamContents: [ :stream | stream nextPut: Character escape. stream nextPut: $$. stream nextPut: $(. stream nextPut: $A ]! ! !GB2312 class methodsFor: 'class methods' stamp: 'yo 8/6/2003 05:30' prior: 22816894! isLetter: char | value leading | leading := char leadingChar. value := char charCode. leading = 0 ifTrue: [^ super isLetter: char]. value := value // 94 + 1. ^ 1 <= value and: [value < 84]. ! ! !GB2312 class methodsFor: 'class methods' stamp: 'yo 10/22/2002 19:51' prior: 22817171! leadingChar ^ 2. ! ! !GB2312 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 22817281! nextPutValue: ascii toStream: aStream withShiftSequenceIfNeededForTextConverterState: state | c1 c2 | state charSize: 2. state g0Leading ~= self leadingChar ifTrue: [ state g0Leading: self leadingChar. state g0Size: 2. aStream basicNextPutAll: compoundTextSequence ]. c1 := ascii // 94 + 33. c2 := ascii \\ 94 + 33. ^ aStream basicNextPut: (Character value: c1); basicNextPut: (Character value: c2)! ! !GB2312 class methodsFor: 'class methods' stamp: 'yo 10/14/2003 10:19' prior: 22817774! ucsTable ^ UCSTable gb2312Table. ! ! !JISX0208 commentStamp: 'yo 10/19/2004 19:52' prior: 49829439! This class represents the domestic character encoding called JIS X 0208 used for Japanese.! !JISX0208 class methodsFor: 'class methods' stamp: 'ar 4/9/2005 22:31' prior: 24016932! charAtKuten: anInteger | a b | a := anInteger \\ 100. b := anInteger // 100. (a > 94) | (b > 94) ifTrue: [ self error: 'character code is not valid'. ]. ^ Character leadingChar: self leadingChar code: ((b - 1) * 94) + a - 1. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 24017259! compoundTextSequence ^ compoundTextSequence! ! !JISX0208 class methodsFor: 'class methods' stamp: 'StephaneDucasse 8/22/2013 14:27' prior: 24017396! initialize "self initialize" EncodedCharSet declareEncodedCharSet: self atIndex: 1+1. EncodedCharSet declareEncodedCharSet: self atIndex: 4+1. compoundTextSequence := String streamContents: [ :s | s nextPut: (Character value: 27). s nextPut: $$. s nextPut: $B ]! ! !JISX0208 class methodsFor: 'accessing - displaying' stamp: 'yo 3/18/2003 11:11' prior: 24016415! isBreakableAt: index in: text | prev | index = 1 ifTrue: [^ false]. prev := text at: index - 1. prev leadingChar ~= 1 ifTrue: [^ true]. ^ false ! ! !JISX0208 class methodsFor: 'character classification' stamp: 'yo 8/6/2003 05:30' prior: 24016654! isLetter: char | value leading | leading := char leadingChar. value := char charCode. leading = 0 ifTrue: [^ super isLetter: char]. value := value // 94 + 1. ^ 1 <= value and: [value < 84]. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'yo 9/2/2002 17:38' prior: 24017635! leadingChar ^ 1. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 24017747! nextPutValue: ascii toStream: aStream withShiftSequenceIfNeededForTextConverterState: state | c1 c2 | state charSize: 2. state g0Leading ~= self leadingChar ifTrue: [ state g0Leading: self leadingChar. state g0Size: 2. aStream basicNextPutAll: compoundTextSequence ]. c1 := ascii // 94 + 33. c2 := ascii \\ 94 + 33. ^ aStream basicNextPut: (Character value: c1); basicNextPut: (Character value: c2)! ! !JISX0208 class methodsFor: 'class methods' stamp: 'yo 9/4/2002 22:52' prior: 24018240! printingDirection ^ #right. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'ar 4/12/2005 17:34' prior: 24018348! stringFromKutenArray: anArray | s | s := WideString new: anArray size. 1 to: anArray size do: [:i | s at: i put: (self charAtKuten: (anArray at: i)). ]. ^s. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'yo 10/14/2003 10:19' prior: 24018592! ucsTable ^ UCSTable jisx0208Table. ! ! !JISX0208 class methodsFor: 'class methods' stamp: 'yo 7/21/2004 18:36' prior: 24018707! unicodeLeadingChar ^ JapaneseEnvironment leadingChar. ! ! !KSX1001 commentStamp: 'yo 10/19/2004 19:53' prior: 49829593! This class represents the domestic character encoding called KS X 1001 used for Korean.! !KSX1001 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 24196111! compoundTextSequence ^ compoundTextSequence! ! !KSX1001 class methodsFor: 'class methods' stamp: 'StephaneDucasse 8/22/2013 14:31' prior: 24196247! initialize "KSX1001 initialize" EncodedCharSet declareEncodedCharSet: self atIndex: 3+1. EncodedCharSet declareEncodedCharSet: self atIndex: 12+1. compoundTextSequence := String streamContents: [ :stream | stream nextPut: Character escape. stream nextPut: $$. stream nextPut: $(. stream nextPut: $C ]! ! !KSX1001 class methodsFor: 'character classification' stamp: 'yo 8/6/2003 05:30' prior: 24195818! isLetter: char | value leading | leading := char leadingChar. value := char charCode. leading = 0 ifTrue: [^ super isLetter: char]. value := value // 94 + 1. ^ 1 <= value and: [value < 84]. ! ! !KSX1001 class methodsFor: 'class methods' stamp: 'yo 10/22/2002 19:49' prior: 24196527! leadingChar ^ 3. ! ! !KSX1001 class methodsFor: 'class methods' stamp: 'Alexandre.Bergel 11/20/2008 11:17' prior: 24196638! nextPutValue: ascii toStream: aStream withShiftSequenceIfNeededForTextConverterState: state | c1 c2 | state charSize: 2. state g0Leading ~= self leadingChar ifTrue: [ state g0Leading: self leadingChar. state g0Size: 2. aStream basicNextPutAll: compoundTextSequence ]. c1 := ascii // 94 + 33. c2 := ascii \\ 94 + 33. ^ aStream basicNextPut: (Character value: c1); basicNextPut: (Character value: c2)! ! !KSX1001 class methodsFor: 'class methods' stamp: 'yo 10/14/2003 10:19' prior: 24197132! ucsTable ^ UCSTable ksx1001Table. ! ! !ProtoObjectTest methodsFor: 'tests - testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 30069526! testFlag ProtoObject new flag: #hallo! ! !ProtoObjectTest methodsFor: 'tests - testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 30069679! testIfNil | object block | object := ProtoObject new. object ifNil: [ self halt ]. self assert: (object ifNil: [ nil ]) == object. "Now the same without inlining." block := [ self halt ]. object ifNil: block. block := [ nil ]. self assert: (object ifNil: block) == object! ! !TSizeTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52186401! test0TSizeTest self empty. self sizeCollection. self assert: self empty isEmpty. self deny: self sizeCollection isEmpty! ! !ClassTest methodsFor: 'testing - access' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19339634! testAllSharedPools "self run: #testAllSharedPools" self assert: Point allSharedPools = OrderedCollection new. self assert: Date sharedPools first = ChronologyConstants. self assert: Date sharedPools size = 1. "a metaclass does not have shared pools since only classes have shared pools" Date class sharedPools. self assert: RootClassPoolUser sharedPools size = 1. self assert: ClassMultiplePoolUser sharedPools size = 2. "has shared pools does not take into account the fact that a superclass may use some shared pools" self assert: SubclassPoolUser sharedPools isEmpty! ! !ClassTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 46791500! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other" "It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "traitComposition traitComposition: localSelectors localSelectors: basicLocalSelectors basicLocalSelectors -> accessors to instance variables that do not belong to Trait" "baseClass classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names" "addInstVarNamed: for traits is implemeted in TraitDescription" self assert: (Class localSelectors difference: Trait localSelectors) equals: #(#traitComposition: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: #basicLocalSelectors: #traitComposition #addInstVarNamed:) asSet. "classTrait: isClassTrait classTrait isBaseTrait baseTrait -> they have their equivalent for classes but with different name" "nautilusIcon initialize is implemented differently for traits, classes have their implentation in Object" self assert: (Trait localSelectors difference: Class localSelectors) equals: #(#classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait) asSet! ! !ClassTest methodsFor: 'testing - compiling' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19343826! testCompileAll ClassTest compileAll! ! !ClassTest methodsFor: 'testing - access' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 19342329! testSharedPools "self run: #testSharedPools" self assert: Point sharedPools = OrderedCollection new. self assert: Date sharedPools first = ChronologyConstants. self assert: Date sharedPools size = 1. "a metaclass does not have shared pools since only classes have shared pools" Date class sharedPools. self assert: RootClassPoolUser sharedPools size = 1. self assert: ClassMultiplePoolUser sharedPools size = 2. "has shared pools does not take into account the fact that a superclass may use some shared pools" self assert: SubclassPoolUser sharedPools isEmpty! ! !TDictionaryKeyAccessTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51950795! test0FixtureDictionaryKeyAccess | collection equals | self nonEmptyWithoutEqualsValues. self deny: self nonEmptyWithoutEqualsValues isEmpty. equals := true. collection := self nonEmptyWithoutEqualsValues values. collection detect: [ :each | (collection occurrencesOf: each) > 1 ] ifNone: [ equals := false ]. self assert: equals = false. self valueNotIn. self deny: (self nonEmptyWithoutEqualsValues values includes: self valueNotIn)! ! !TEmptySequenceableTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 52008624! test0FixtureEmptySequenceableTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !TestValueWithinFix methodsFor: 'tests' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 52476557! testValueWithinNonLocalReturnFixSimply "self run: #testValueWithinNonLocalReturnFixSimply" "The simple version to test the fix" self valueWithinNonLocalReturn. (Delay forMilliseconds: 50) wait! ! !MCSnapshotBrowserTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 25021755! testTextPane self textMorph! ! !DateAndTimeTest methodsFor: 'tests - bogus date' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 20427950! testErrorWhenDayIsAfterMonthEnd self should: [ DateAndTime year: 2004 month: 2 day: 30 ] raise: Error. DateAndTime year: 2004 month: 2 day: 29! ! !DateAndTimeTest methodsFor: 'tests - bogus date' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 20428223! testErrorWhenDayIsBeforeMonthStart self should: [ DateAndTime year: 2004 month: 2 day: -1 ] raise: Error. self should: [ DateAndTime year: 2004 month: 2 day: 0 ] raise: Error. DateAndTime year: 2004 month: 2 day: 1! ! !TCopyPartOfSequenceable methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51886789! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !TConvertTest methodsFor: 'tests - fixture' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51881635! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !TConvertTest methodsFor: 'tests - converting' stamp: 'CamilloBruni 8/31/2013 20:43' prior: 51880332! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22925267! testCleanup | class | gofer package: 'GoferFoo'; load. class := Smalltalk globals classNamed: #GoferFoo. Smalltalk globals organization addCategory: #'GoferFoo-Empty'. class organization addCategory: #empty. class class organization addCategory: #empty. gofer cleanup. self deny: (Smalltalk organization categories includes: #'GoferFoo-Empty'). self deny: (class organization categories includes: #'GoferFoo-Empty'). self deny: (class class organization categories includes: #'GoferFoo-Empty')! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22925878! testCommit | repository | repository := MCDictionaryRepository new. gofer package: 'GoferFoo'; load. gofer := Gofer new. gofer disablePackageCache. gofer repository: repository. gofer package: 'GoferFoo'. gofer commit: 'A test commit'. self assert: repository allVersionInfos size = 1! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22926279! testFetch gofer package: 'GoferFoo'. gofer fetch! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22926437! testLoad gofer version: 'GoferFoo-lr.1'. gofer load. self assert: (self hasVersion: 'GoferFoo-lr.1'). self assert: (self hasClass: #GoferFoo)! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22926703! testLocalChanges | changes | gofer package: 'GoferBar'; load. (Smalltalk globals classNamed: #GoferBar) compile: 'foo'. changes := gofer localChanges. self assert: changes operations size = 1! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22927017! testMerge | initial | initial := gofer copy. initial version: 'GoferBar-jf.1'; load. gofer package: 'GoferBar'; load. (Smalltalk globals classNamed: #GoferBar) compile: 'foo'. [ gofer merge ] on: ProvideAnswerNotification do: [ :e | e resume: true ]. self assert: (self hasClass: #GoferBar selector: #foo)! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22927436! testPush | repository | gofer := Gofer new. gofer disablePackageCache. gofer repository: (repository := MCDictionaryRepository new). gofer package: 'GoferFoo'. gofer push! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22927719! testRecompile gofer package: 'Gofer-Core'. gofer recompile! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22927900! testReinitialize | class | gofer package: 'GoferFoo'; load. class := Smalltalk classNamed: #GoferFoo. class addClassVarNamed: #InstanceSide; addClassVarNamed: #ClassSide. class compile: 'initialize InstanceSide := true'. class class compile: 'initialize ClassSide := true'. self assert: (class classPool at: #InstanceSide) isNil. self assert: (class classPool at: #ClassSide) isNil. gofer reinitialize. self assert: (class classPool at: #InstanceSide) isNil. self assert: (class classPool at: #ClassSide)! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22928537! testRemoteChanges | changes | gofer package: 'GoferBar'; load. (Smalltalk globals classNamed: #GoferBar) compile: 'foo'. changes := gofer remoteChanges. self assert: changes operations size = 1! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22928843! testRevert gofer package: 'GoferFoo'; package: 'GoferBar'; load. (Smalltalk globals classNamed: #GoferBar) category: 'GoferFoo'. gofer revert. self assert: (Smalltalk globals classNamed: #GoferFoo) category asSymbol = #GoferFoo. self assert: (Smalltalk globals classNamed: #GoferBar) category asSymbol = #GoferBar! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22929275! testUnload gofer package: 'GoferFoo'; load. gofer unload. self deny: (self hasPackage: 'GoferFoo'). self deny: (self hasClass: #GoferFoo)! ! !GoferOperationTest methodsFor: 'testing' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 22929524! testUpdate | initial | initial := gofer copy. initial version: 'GoferFoo-lr.1'; load. gofer package: 'GoferFoo'. gofer update. self assert: (self hasVersion: 'GoferFoo-lr.4')! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! !Trait method! testIncludesAnyNoneThere "self debug: #testIncludesAnyOfNoneThere'" self deny: (self nonEmpty includesAny: self empty). self deny: (self nonEmpty includesAny: { self elementNotIn. self anotherElementNotIn })! ! TIncludesWithIdentityCheckTest removeSelector: #testIncludesAnyNoneThere! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! !Trait method! testIncludesAnyAllThere "self debug: #testIncludesAnyOfAllThere'" self deny: (self nonEmpty includesAny: self empty). self assert: (self nonEmpty includesAny: { self nonEmpty anyOne }). self assert: (self nonEmpty includesAny: self nonEmpty).! ! TIncludesWithIdentityCheckTest removeSelector: #testIncludesAnyAllThere! !Trait method! nonEmpty self explicitRequirement! ! TPrintOnSequencedTest removeSelector: #nonEmpty! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. self shouldnt: [ res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ] ] raise: Error. self assert: res = 33! ! TRemoveForMultiplenessTest removeSelector: #testRemoveIfAbsent! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterLastEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim last:'and'. self assert: emptyStream contents = ''. ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #testAsStringOnDelimiterLastEmpty! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! !Trait method! testAsStringOnDelimiterEmpty | delim emptyStream | delim := ', '. emptyStream := ReadWriteStream on: ''. self empty asStringOn: emptyStream delimiter: delim. self assert: emptyStream contents = ''. ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #testAsStringOnDelimiterEmpty! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! !Trait method! testAsCommaStringEmpty self assert: self empty asCommaString = ''. self assert: self empty asCommaStringAnd = ''. ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #testAsCommaStringEmpty! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self shouldnt: [self nonEmpty] raise:Error . self deny: self nonEmpty isEmpty. self shouldnt: [self empty] raise:Error . self assert: self empty isEmpty. self shouldnt: [self nonEmpty1Element ] raise:Error . self assert: self nonEmpty1Element size=1.! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #test0FixtureAsStringCommaAndDelimiterTest! !Trait method! nonEmpty1Element " return a collection of size 1 including one element" ^ self explicitRequirement ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #nonEmpty1Element! !Trait method! nonEmpty ^ self explicitRequirement ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #nonEmpty! !Trait method! empty ^ self explicitRequirement ! ! TAsStringCommaAndDelimiterSequenceableTest removeSelector: #empty! !Trait method! test0FixtureDictionaryAddingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self associationWithKeyNotInToAdd. self deny: (self nonEmptyDict keys includes: self associationWithKeyNotInToAdd key). self associationWithKeyAlreadyInToAdd. self assert: (self nonEmptyDict keys includes: self associationWithKeyAlreadyInToAdd key)! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0SortingArrayedTest | tmp sorted | " an unsorted collection of number " self unsortedCollection. self unsortedCollection do: [ :each | each isNumber ]. sorted := true. self unsortedCollection pairsDo: [ :each1 :each2 | each2 < each1 ifTrue: [ sorted := false ] ]. self assert: sorted = false. " a collection of number sorted in an ascending order" self sortedInAscendingOrderCollection. self sortedInAscendingOrderCollection do: [ :each | each isNumber ]. tmp := self sortedInAscendingOrderCollection at: 1. self sortedInAscendingOrderCollection do: [ :each | self assert: each >= tmp. tmp := each ]! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCreationWithTest self collectionMoreThan5Elements. self assert: self collectionMoreThan5Elements size >= 5! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureCopyWithOrWithoutSpecificElementsTest self nonEmpty. self deny: self nonEmpty isEmpty. self indexInNonEmpty. self assert: self indexInNonEmpty > 0. self assert: self indexInNonEmpty <= self nonEmpty size! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureTConvertAsSetForMultiplinessTest "a collection with equal elements:" | res | self withEqualElements. res := true. self withEqualElements detect: [ :each | (self withEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = true! ! !Trait method! test0FixtureDictionaryCopyingTest | duplicateKey | self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self nonEmptyDifferentFromNonEmptyDict. self deny: self nonEmptyDifferentFromNonEmptyDict isEmpty. duplicateKey := true. self nonEmptyDict keys detect: [ :key | self nonEmptyDifferentFromNonEmptyDict includes: key ] ifNone: [ duplicateKey := false ]. self assert: duplicateKey = false! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixtureSetAritmeticTest self collection. self deny: self collection isEmpty. self nonEmpty. self deny: self nonEmpty isEmpty. self anotherElementOrAssociationNotIn. self collection isDictionary ifTrue: [ self deny: (self collection associations includes: self anotherElementOrAssociationNotIn key) ] ifFalse: [ self deny: (self collection includes: self anotherElementOrAssociationNotIn) ]. self collectionClass! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty! ! !Trait method! test0FixtureRequirementsOfTGrowableTest self empty. self nonEmpty. self element. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty. self assert: (self nonEmpty includes: self element). self deny: (self nonEmpty includes: self elementNotIn)! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIncludeTest | anElementIn | self nonEmpty. self deny: self nonEmpty isEmpty. self elementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self elementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self anotherElementNotIn. anElementIn := true. self nonEmpty detect: [ :each | each = self anotherElementNotIn ] ifNone: [ anElementIn := false ]. self assert: anElementIn = false. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixturePutOneOrMoreElementsTest self aValue. self indexArray. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self aValue. self indexArray. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self aValue. self indexArray. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutOneOrMoreElementsTest self aValue. self indexArray. self indexArray do: [ :each| self assert: each class = SmallInteger. self assert: (each>=1 & each<= self nonEmpty size). ]. self assert: self indexArray size = self valueArray size. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureOccurrencesForMultiplinessTest | cpt anElement collection | self collectionWithEqualElements. self collectionWithEqualElements. self elementTwiceInForOccurrences. anElement := self elementTwiceInForOccurrences. collection := self collectionWithEqualElements. cpt := 0. " testing with identity check ( == ) so that identy collections can use this trait : " self collectionWithEqualElements do: [ :each | each == self elementTwiceInForOccurrences ifTrue: [ cpt := cpt + 1 ] ]. self assert: cpt = 2! ! !Trait method! test0FixtureDictionaryAssocitionAccess self nonEmpty. self deny: self nonEmpty isEmpty. self keyNotIn. self deny: (self nonEmpty keys includes: self keyNotIn)! ! !Trait method! testOFixtureReplacementSequencedTest self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForReplacement. self assert: (self nonEmpty includes: self elementInForReplacement ) . self newElement. self firstIndex. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self secondIndex. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self replacementCollection. self replacementCollectionSameSize. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testOFixtureReplacementSequencedTest self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForReplacement. self assert: (self nonEmpty includes: self elementInForReplacement ) . self newElement. self firstIndex. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self secondIndex. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self replacementCollection. self replacementCollectionSameSize. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testOFixtureReplacementSequencedTest self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForReplacement. self assert: (self nonEmpty includes: self elementInForReplacement ) . self newElement. self firstIndex. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self secondIndex. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self replacementCollection. self replacementCollectionSameSize. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! testOFixtureReplacementSequencedTest self nonEmpty. self deny: self nonEmpty isEmpty. self elementInForReplacement. self assert: (self nonEmpty includes: self elementInForReplacement ) . self newElement. self firstIndex. self assert: (self firstIndex >= 1 & self firstIndex <= self nonEmpty size). self secondIndex. self assert: (self secondIndex >= 1 & self secondIndex <= self nonEmpty size). self assert: self firstIndex <=self secondIndex . self replacementCollection. self replacementCollectionSameSize. self assert: (self secondIndex - self firstIndex +1)= self replacementCollectionSameSize size ! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureAsStringCommaAndDelimiterTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty. self nonEmpty1Element. self assert: self nonEmpty1Element size = 1! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0FixtureOccurrencesTest | tmp | self empty. self assert: self empty isEmpty. self collectionWithoutEqualElements. self deny: self collectionWithoutEqualElements isEmpty. tmp := OrderedCollection new. self collectionWithoutEqualElements do: [ :each | self deny: (tmp includes: each). tmp add: each ]. self elementNotInForOccurrences. self deny: (self collectionWithoutEqualElements includes: self elementNotInForOccurrences)! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0TStructuralEqualityTest self empty. self nonEmpty. self assert: self empty isEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixturePrintTest self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureBeginsEndsWithTest self nonEmpty. self deny: self nonEmpty isEmpty. self assert: self nonEmpty size > 1. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopySameContentsTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! test0FixtureCopyWithReplacementTest self replacementCollection. self oldSubCollection. self collectionWith1TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith1TimeSubcollection) = 1! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !Trait method! testCopyReplaceAllWithManyOccurence | result firstIndexesOfOccurrence resultBetweenPartIndex collectionBetweenPartIndex diff | " testing fixture here as this method may be not used for collection that can't contain equals element :" self collectionWith2TimeSubcollection. self assert: (self howMany: self oldSubCollection in: self collectionWith2TimeSubcollection) = 2. " test :" diff := self replacementCollection size - self oldSubCollection size. result := self collectionWith2TimeSubcollection copyReplaceAll: self oldSubCollection with: self replacementCollection. "detecting indexes of olSubCollection" firstIndexesOfOccurrence := self firstIndexesOf: self oldSubCollection in: self collectionWith2TimeSubcollection. " verifying that replacementCollection has been put in places of oldSubCollections " firstIndexesOfOccurrence do: [ :each | (firstIndexesOfOccurrence indexOf: each) = 1 ifTrue: [ each to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ifFalse: [ each + diff to: self replacementCollection size do: [ :i | self assert: (result at: i) = (self replacementCollection at: i - each + 1) ] ] ]. " verifying that the 'between' parts correspond to the initial collection : " 1 to: firstIndexesOfOccurrence size do: [ :i | i = 1 ifTrue: [ 1 to: (firstIndexesOfOccurrence at: i) - 1 do: [ :j | self assert: (result at: i) = (self collectionWith2TimeSubcollection at: i) ] ] ifFalse: [ resultBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self replacementCollection size. collectionBetweenPartIndex := (firstIndexesOfOccurrence at: i - 1) + self oldSubCollection size. 1 to: (firstIndexesOfOccurrence at: i) - collectionBetweenPartIndex - 1 do: [ :j | self assert: (result at: resultBetweenPartIndex + i - 1) = (self collectionWith2TimeSubcollection at: collectionBetweenPartIndex + i - 1) ] ] " specific comportement for the begining of the collection :" " between parts till the end : " ]. "final part :" 1 to: self collectionWith2TimeSubcollection size - (firstIndexesOfOccurrence last + self oldSubCollection size) do: [ :i | self assert: (result at: firstIndexesOfOccurrence last + self replacementCollection size - 1 + i) = (self collectionWith2TimeSubcollection at: firstIndexesOfOccurrence last + self oldSubCollection size - 1 + i) ]! ! !Trait method! test0FixtureEmptyTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureEmptyTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureEmptyTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0FixtureSequencedConcatenationTest self empty. self assert: self empty isEmpty. self firstCollection. self secondCollection! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0TSequencedStructuralEqualityTest self nonEmpty at: 1 "Ensures #nonEmpty is sequenceable"! ! !Trait method! test0FixtureDictionaryKeysValuesAssociationsAccess self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! test0FixtureDictionaryKeysValuesAssociationsAccess self nonEmpty. self deny: self nonEmpty isEmpty! ! !Trait method! testKeys | collection result | collection := self nonEmpty. result := collection keys. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error! ! !Trait method! testKeys | collection result | collection := self nonEmpty. result := collection keys. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error! ! !Trait method! testKeysSortedSafely | collection result | collection := self nonEmpty. result := collection keysSortedSafely. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error. self assert: result asArray isSorted! ! !Trait method! testKeysSortedSafely | collection result | collection := self nonEmpty. result := collection keysSortedSafely. result do: [ :key | collection at: key ]. self assert: result size = collection size. self should: [ result detect: [ :each | (result occurrencesOf: each) > 1 ] ] raise: Error. self assert: result asArray isSorted! ! !Trait method! test0FixtureCopyWithReplacementForSorted self collectionOfSize5. self assert: self collectionOfSize5 size = 5. self replacementCollection. self deny: self replacementCollection isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureDictionaryIncludesIdentity self nonEmptyWithCopyNonIdentical. self deny: self nonEmptyWithCopyNonIdentical isEmpty. self nonEmptyWithCopyNonIdentical do: [ :each | self deny: each == each copy ]! ! !Trait method! test0FixtureIterateTest | res | self collectionWithoutNilElements. self assert: (self collectionWithoutNilElements occurrencesOf: nil) = 0. res := true. self collectionWithoutNilElements detect: [ :each | (self collectionWithoutNilElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureIterateTest | res | self collectionWithoutNilElements. self assert: (self collectionWithoutNilElements occurrencesOf: nil) = 0. res := true. self collectionWithoutNilElements detect: [ :each | (self collectionWithoutNilElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0CopyTest self empty. self assert: self empty size = 0. self nonEmpty. self assert: (self nonEmpty size = 0) not. self collectionWithElementsToRemove. self assert: (self collectionWithElementsToRemove size = 0) not. self collectionWithElementsToRemove do: [ :each | self assert: (self nonEmpty includes: each) ]. self elementToAdd. self deny: (self nonEmpty includes: self elementToAdd). self collectionNotIncluded. self collectionNotIncluded do: [ :each | self deny: (self nonEmpty includes: each) ]! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCloneTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIterateSequencedReadableTest | res | self nonEmptyMoreThan1Element. self assert: self nonEmptyMoreThan1Element size > 1. self empty. self assert: self empty isEmpty . res := true. self nonEmptyMoreThan1Element detect: [ :each | (self nonEmptyMoreThan1Element occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false.! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureIncludeWithIdentityTest | anElement | self collectionWithCopyNonIdentical. anElement := self collectionWithCopyNonIdentical anyOne. self deny: anElement == anElement copy! ! !Trait method! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixtureRequirementsOfTAddTest self collectionWithElement. self otherCollection. self element. self assert: (self collectionWithElement includes: self element). self deny: (self otherCollection includes: self element)! ! !Trait method! test0FixtureRemoveByIndexTest self collectionWith5Elements. self assert: self collectionWith5Elements size = 5! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureIndexAccessFotMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self collectionWithNonIdentitySameAtEndAndBegining. collection := self collectionWithNonIdentitySameAtEndAndBegining. self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self collectionWithNonIdentitySameAtEndAndBegining. collection := self collectionWithNonIdentitySameAtEndAndBegining. self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! testIdentityIndexOfDuplicate "self debug: #testIdentityIndexOf" | collection element | "testing fixture here as this method may not be used by some collections testClass" self collectionWithNonIdentitySameAtEndAndBegining. collection := self collectionWithNonIdentitySameAtEndAndBegining. self assert: collection first = collection last. self deny: collection first == collection last. 1 to: collection size do: [ :i | i > 1 & (i < collection size) ifTrue: [ self deny: (collection at: i) = collection first ] ]. element := collection last. " floatCollectionWithSameAtEndAndBegining first and last elements are equals but are not the same object" self assert: (collection identityIndexOf: element) = collection size! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureSubcollectionAccessTest self moreThan3Elements. self assert: self moreThan3Elements size > 2! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixtureCopyPartOfForMultipliness self collectionWithSameAtEndAndBegining. self assert: self collectionWithSameAtEndAndBegining first = self collectionWithSameAtEndAndBegining last. self assert: self collectionWithSameAtEndAndBegining size > 1. 1 to: self collectionWithSameAtEndAndBegining size do: [ :i | i > 1 & (i < self collectionWithSameAtEndAndBegining size) ifTrue: [ self deny: (self collectionWithSameAtEndAndBegining at: i) = self collectionWithSameAtEndAndBegining first ] ]! ! !Trait method! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixturePutTest self aValue. self anotherValue. self anIndex. self nonEmpty isDictionary ifFalse:[self assert: (self anIndex >=1 & self anIndex <= self nonEmpty size).]. self empty. self assert: self empty isEmpty . self nonEmpty. self deny: self nonEmpty isEmpty.! ! !Trait method! test0FixtureDictionaryIncludes | in | self nonEmpty. self deny: self nonEmpty isEmpty. self valueNotInNonEmpty. in := false. self nonEmpty valuesDo: [ :assoc | assoc = self valueNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false. self keyNotInNonEmpty. in := false. self nonEmpty keysDo: [ :assoc | assoc = self keyNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false! ! !Trait method! test0FixtureDictionaryIncludes | in | self nonEmpty. self deny: self nonEmpty isEmpty. self valueNotInNonEmpty. in := false. self nonEmpty valuesDo: [ :assoc | assoc = self valueNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false. self keyNotInNonEmpty. in := false. self nonEmpty keysDo: [ :assoc | assoc = self keyNotInNonEmpty ifTrue: [ in := true ] ]. self assert: in = false! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureSequencedElementAccessTest self moreThan4Elements. self assert: self moreThan4Elements size >= 4. self subCollectionNotIn. self subCollectionNotIn detect: [ :each | (self moreThan4Elements includes: each) not ] ifNone: [ self assert: false ]. self elementNotInForElementAccessing. self deny: (self moreThan4Elements includes: self elementNotInForElementAccessing). self elementInForElementAccessing. self assert: (self moreThan4Elements includes: self elementInForElementAccessing)! ! !Trait method! test0FixtureDictionaryElementAccess | in | self nonEmpty. self deny: self nonEmpty isEmpty. self keyNotIn. in := true. self nonEmpty keys detect: [ :key | key = self keyNotIn ] ifNone: [ in := false ]. self assert: in = false! ! !Trait method! testAtError "self run: #testAtError" | dict nonExistantKey keyIn | dict := self nonEmpty. nonExistantKey := self keyNotIn. keyIn := dict keys anyOne. dict at: keyIn. self should: [ dict at: nonExistantKey ] raise: Error! ! !Trait method! test0FixtureDictionaryEnumeratingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureIndexAccessTest | res collection element | self collectionMoreThan1NoDuplicates. self assert: self collectionMoreThan1NoDuplicates size > 1. res := true. self collectionMoreThan1NoDuplicates detect: [ :each | (self collectionMoreThan1NoDuplicates occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self elementInForIndexAccessing. self assert: ((collection := self collectionMoreThan1NoDuplicates) includes: (element := self elementInForIndexAccessing)). self elementNotInForIndexAccessing. self deny: (self collectionMoreThan1NoDuplicates includes: self elementNotInForIndexAccessing)! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureAsSetForIdentityMultiplinessTest "a collection (of elements for which copy is not identical ) without equal elements:" | anElement res | self elementsCopyNonIdenticalWithoutEqualElements. anElement := self elementsCopyNonIdenticalWithoutEqualElements anyOne. self deny: anElement copy == anElement. res := true. self elementsCopyNonIdenticalWithoutEqualElements detect: [ :each | (self elementsCopyNonIdenticalWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureConverAsSortedTest self collectionWithSortableElements. self deny: self collectionWithSortableElements isEmpty! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! test0FixtureTRemoveTest | duplicate | self empty. self nonEmptyWithoutEqualElements. self deny: self nonEmptyWithoutEqualElements isEmpty. duplicate := true. self nonEmptyWithoutEqualElements detect: [ :each | (self nonEmptyWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ duplicate := false ]. self assert: duplicate = false. self elementNotIn. self assert: self empty isEmpty. self deny: self nonEmptyWithoutEqualElements isEmpty. self deny: (self nonEmptyWithoutEqualElements includes: self elementNotIn)! ! !Trait method! testRemoveAll "self debug: #testRemoveElementThatExists" | el aSubCollection collection res | collection := self nonEmptyWithoutEqualElements. el := collection anyOne. aSubCollection := collection copyWithout: el. res := collection removeAll: aSubCollection. self assert: collection size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAll "self debug: #testRemoveElementThatExists" | el aSubCollection collection res | collection := self nonEmptyWithoutEqualElements. el := collection anyOne. aSubCollection := collection copyWithout: el. res := collection removeAll: aSubCollection. self assert: collection size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveAllFoundIn "self debug: #testRemoveElementThatExists" | el aSubCollection res | el := self nonEmptyWithoutEqualElements anyOne. aSubCollection := (self nonEmptyWithoutEqualElements copyWithout: el) copyWith: self elementNotIn. res := self nonEmptyWithoutEqualElements removeAllFoundIn: aSubCollection. self assert: self nonEmptyWithoutEqualElements size = 1. self nonEmptyWithoutEqualElements do: [ :each | self assert: each = el ]! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveElementThatExists "self debug: #testRemoveElementThatExists" | el res | el := self nonEmptyWithoutEqualElements anyOne. res := self nonEmptyWithoutEqualElements remove: el. self assert: res == el! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !Trait method! testRemoveIfAbsent "self debug: #testRemoveElementThatExists" | el res | el := self elementNotIn. res := self nonEmptyWithoutEqualElements remove: el ifAbsent: [ 33 ]. self assert: res = 33! ! !Trait method! test0FixtureConcatenationTest self firstCollection. self deny: self firstCollection isEmpty. self firstCollection. self deny: self firstCollection isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureConcatenationTest self firstCollection. self deny: self firstCollection isEmpty. self firstCollection. self deny: self firstCollection isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureConcatenationTest self firstCollection. self deny: self firstCollection isEmpty. self firstCollection. self deny: self firstCollection isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureDictionaryRemovingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self keyNotInNonEmptyDict. self deny: (self nonEmptyDict keys includes: self keyNotInNonEmptyDict)! ! !Trait method! test0FixtureDictionaryRemovingTest self nonEmptyDict. self deny: self nonEmptyDict isEmpty. self keyNotInNonEmptyDict. self deny: (self nonEmptyDict keys includes: self keyNotInNonEmptyDict)! ! !Trait method! test0TSizeTest self empty. self sizeCollection. self assert: self empty isEmpty. self deny: self sizeCollection isEmpty! ! !Trait method! test0FixtureDictionaryKeyAccess | collection equals | self nonEmptyWithoutEqualsValues. self deny: self nonEmptyWithoutEqualsValues isEmpty. equals := true. collection := self nonEmptyWithoutEqualsValues values. collection detect: [ :each | (collection occurrencesOf: each) > 1 ] ifNone: [ equals := false ]. self assert: equals = false. self valueNotIn. self deny: (self nonEmptyWithoutEqualsValues values includes: self valueNotIn)! ! !Trait method! test0FixtureEmptySequenceableTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureEmptySequenceableTest self nonEmpty. self deny: self nonEmpty isEmpty. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureCopyPartOfSequenceableTest self collectionWithoutEqualElements. self collectionWithoutEqualElements do: [ :each | self assert: (self collectionWithoutEqualElements occurrencesOf: each) = 1 ]. self indexInForCollectionWithoutDuplicates. self assert: (self indexInForCollectionWithoutDuplicates > 0 & self indexInForCollectionWithoutDuplicates) < self collectionWithoutEqualElements size. self empty. self assert: self empty isEmpty! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! test0FixtureTConvertTest "a collection of number without equal elements:" | res | self collectionWithoutEqualElements. res := true. self collectionWithoutEqualElements detect: [ :each | (self collectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! !Trait method! testAsByteArray | res | self integerCollectionWithoutEqualElements. self integerCollectionWithoutEqualElements do: [ :each | self assert: each class = SmallInteger ]. res := true. self integerCollectionWithoutEqualElements detect: [ :each | (self integerCollectionWithoutEqualElements occurrencesOf: each) > 1 ] ifNone: [ res := false ]. self assert: res = false. self assertSameContents: self integerCollectionWithoutEqualElements whenConvertedTo: ByteArray! ! "AST-Core"! "AST-Interpreter-Test"! "Announcements-Tests-Core"! "ClassOrganizer-Tests"! "Collections-Strings"! "CollectionsTests"! "CompilerTests"! "FileSystem-Tests-Core"! "FuelTests"! "Gofer-Tests"! "Graphics-Tests"! "HelpSystem-Tests"! "Kernel"! "KernelTests"! "Manifest-Core"! "MorphicTests"! "Multilingual-Encodings"! "Multilingual-Languages"! "Multilingual-OtherLanguages"! "Multilingual-Tests"! "Multilingual-TextConversion"! "NetworkTests"! "OpalCompiler-Tests"! "RPackage-Tests"! "Refactoring-Critics"! "Ring-Tests-Kernel"! "SUnit-Core"! "SUnit-Tests"! "Spec-Inspector"! "Tests"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(3 September 2013 11:22:46 am) Pharo.image priorSource: 16259666! ----STARTUP----an Array(3 September 2013 11:30:14 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 September 2013 11:30:14 am) Pharo-30365.image priorSource: 16587523! ----STARTUP----an Array(3 September 2013 2:54:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/3/2013 14:52' prior: 49814407! commentForCurrentUpdate ^ '11515 Rename protocols shortcut changed https://pharo.fogbugz.com/f/cases/11515 11450 Protocol rename duplication https://pharo.fogbugz.com/f/cases/11450 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/3/2013 14:52'! script158 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-StephaneDucasse.74.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-MarcusDenker.177.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1590.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.529.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.203.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.898.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.66.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.907.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.620.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1233.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/3/2013 14:52'! update30366 "self new update30366" self withUpdateLog: '11515 Rename protocols shortcut changed https://pharo.fogbugz.com/f/cases/11515 11450 Protocol rename duplication https://pharo.fogbugz.com/f/cases/11450 '. self loadTogether: self script158 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CategoryWidget class methodsFor: 'menu' stamp: 'SebastianTleye 8/30/2013 14:14' prior: 49514372! categoriesMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [ target findMethod ]; order: 0; help: 'Search for a method by name'. (aBuilder item: #'Add protocol...') keyText: 'n, t' if: Nautilus useOldStyleKeys not; action: [ target addCategory ]; order: 100; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [ target fullBrowse ]; order: 200; withSeparatorAfter. (aBuilder item: #'Categorize all uncategorized') keyText: 'h, C' if: Nautilus useOldStyleKeys not; action: [ target categorizeAllUncategorizedMethods ]; order: 1100. (aBuilder item: #'Remove empty protocols') action: [ target removeEmptyCategories ]; order: 1200; withSeparatorAfter. target selectedCategory ifNil: [ ^ target ]. (aBuilder item: #'Rename...') keyText: 'r, t' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameCategory ]; order: 1300; enabledBlock: [ target enableCategorySingleSelection ]. (aBuilder item: #'Remove...') keyText: 'x, t' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeCategories ]; order: 1400; icon: (Smalltalk ui icons iconNamed: #removeIcon); withSeparatorAfter. (aBuilder item: #'Add in group...') action: [ target addProtocolsInGroup ]; order: 1500. (aBuilder item: #'File Out') action: [ target fileOutCategories ]; order: 1600.! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'SebastianTleye 8/30/2013 14:13' prior: 49524287! buildRenameShortcutsOn: aBuilder (aBuilder shortcut: #renameClass) category: #NautilusGlobalShortcuts default: $r command ,$c command do: [ :target | target renameClass ] description: 'Rename the selected class'. (aBuilder shortcut: #renamePackage) category: #NautilusGlobalShortcuts default: $r command , $p command do: [ :target | target renamePackage ] description: 'Rename the selected package'. (aBuilder shortcut: #renameProtocol) category: #NautilusGlobalShortcuts default: $r command , $t command do: [ :target | target renameCategory ] description: 'Rename the selected protocol'. (aBuilder shortcut: #renameGroup) category: #NautilusGlobalShortcuts default: $r command , $g command do: [ :target | target renameGroup ] description: 'Rename the selected group'.! ! !Protocol methodsFor: 'as yet unclassified' stamp: 'SebastianTleye 8/28/2013 17:22'! addAllMethodsFrom: aProtocol aProtocol methods do: [ :each | self addMethod: each ].! ! !Protocol methodsFor: 'accessing' stamp: 'SebastianTleye 8/28/2013 17:03'! removeAllMethods ^ methods removeAll.! ! !ProtocolOrganizer methodsFor: 'private' stamp: 'SebastianTleye 8/29/2013 10:38'! existsProtocolNamed: aProtocolName self allProtocols detect: [ :e | e name = aProtocolName ] ifNone: [ ^ false]. ^true.! ! !ProtocolOrganizer methodsFor: 'private' stamp: 'SebastianTleye 8/29/2013 10:36'! moveMethodsFrom: fromProtocolNamed to: toProtocolNamed | fromProtocol toProtocol | fromProtocol := self getProtocolNamed: fromProtocolNamed. toProtocol := self getProtocolNamed: toProtocolNamed. toProtocol addAllMethodsFrom: fromProtocol. fromProtocol removeAllMethods. ^ toProtocol.! ! !ProtocolOrganizer methodsFor: 'protocol' stamp: 'SebastianTleye 8/29/2013 10:38' prior: 48589322! renameProtocol: oldName into: newName (self existsProtocolNamed: newName) ifTrue: [ self moveMethodsFrom: oldName to: newName. self removeProtocolNamed: oldName ] ifFalse: [ ^ (self getProtocolNamed: oldName) name: newName; yourself].! ! "ClassOrganizer-Core"! "Nautilus"! ----End fileIn----! ----QUIT----an Array(3 September 2013 2:54:23 pm) Pharo.image priorSource: 16587732! ----STARTUP----an Array(3 September 2013 3:00:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 September 2013 3:00:39 pm) Pharo-30366.image priorSource: 16602931! ----STARTUP----an Array(5 September 2013 9:45:20 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/5/2013 09:42' prior: 50142472! commentForCurrentUpdate ^ '11502 Override Class >> #setName: https://pharo.fogbugz.com/f/cases/11502 10548 All system processes should have proper names https://pharo.fogbugz.com/f/cases/10548'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/5/2013 09:42'! script159 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-MarcusDenker.177.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-EstebanLorenzano.111.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1592.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.84.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.529.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.203.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.66.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.141.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.620.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1234.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/5/2013 09:42'! update30367 "self new update30367" self withUpdateLog: '11502 Override Class >> #setName: https://pharo.fogbugz.com/f/cases/11502 10548 All system processes should have proper names https://pharo.fogbugz.com/f/cases/10548'. self loadTogether: self script159 merge: false. Smalltalk lowSpaceWatcherProcess ifNotNil: [ :process | process name: 'Low Space Watcher' ]. WeakArray runningFinalizationProcess ifNotNil: [ :process | process name: 'WeakArray Finalization Process' ]. Processor backgroundProcess ifNotNil: [ :process | process name: 'Idle Process' ]. InputEventFetcher default fetcherProcess ifNotNil: [ :process | process name: 'Input Event Fetcher Process' ]. UIManager default uiProcess ifNotNil: [ :process | process name: 'Morphic UI Process' ]. self flushCaches. ! ! "ScriptLoader30"! !CPUWatcher methodsFor: 'porcine capture' stamp: 'CamilloBruni 8/21/2013 19:22' prior: 18647308! catchThePig: aProcess | rules | "nickname, allow-stop, allow-debug" rules := self processBrowser nameAndRulesFor: aProcess. (self processBrowser isUIProcess: aProcess) ifTrue: [ "aProcess debugWithTitle: 'Interrupted from the CPUWatcher'." ] ifFalse: [ rules second ifFalse: [ ^self ]. self processBrowser suspendProcess: aProcess. self openWindowForSuspendedProcess: aProcess ] ! ! !CPUWatcher methodsFor: 'porcine capture' stamp: 'CamilloBruni 8/21/2013 19:31' prior: 18647782! findThePig "tally has been updated. Look at it to see if there is a bad process. This runs at a very high priority, so make it fast" | countAndProcess | countAndProcess := tally sortedCounts first. (countAndProcess key / tally size > self threshold) ifTrue: [ | process | process := countAndProcess value. process == Processor backgroundProcess ifTrue: [ ^self ]. "idle process? OK" self catchThePig: process ]. ! ! !InputEventFetcher methodsFor: 'initialize-release' stamp: 'CamilloBruni 8/21/2013 19:15' prior: 23626816! installEventLoop "Initialize the event loop process. Terminate the old process if any." "InputEventFetcher default installEventLoop" self terminateEventLoop.. fetcherProcess := [self eventLoop] forkAt: Processor lowIOPriority. fetcherProcess name: 'Input Event Fetcher Process'! ! !WeakArray class methodsFor: 'private' stamp: 'CamilloBruni 8/21/2013 19:14' prior: 54767179! restartFinalizationProcess "kill any old process, just in case" FinalizationProcess ifNotNil: [FinalizationProcess terminate. FinalizationProcess := nil]. FinalizationSemaphore := Smalltalk specialObjectsArray at: 42. FinalizationDependents ifNil: [FinalizationDependents := WeakArray new: 10]. FinalizationLock := Semaphore forMutualExclusion. FinalizationProcess := [self finalizationProcess] forkAt: Processor userInterruptPriority. FinalizationProcess name: 'WeakArray Finalization Process'.! ! !MorphicUIManager methodsFor: 'ui process' stamp: 'CamilloBruni 8/21/2013 19:17' prior: 27166487! spawnNewProcess UIProcess := [ [World doOneCycle. Processor yield. false] whileFalse: []. ] newProcess priority: Processor userSchedulingPriority. UIProcess name: 'Morphic UI Process'. UIProcess resume! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 8/21/2013 19:18' prior: 41590653! startTimerEventLoop "Start the timer event loop" "Delay startTimerEventLoop" self stopTimerEventLoop. AccessProtect := Semaphore forMutualExclusion. ActiveDelayStartTime := Time millisecondClockValue. SuspendedDelays := Heap withAll: (SuspendedDelays ifNil: [ #() ]) sortBlock: [ :delay1 :delay2 | delay1 resumptionTime <= delay2 resumptionTime ]. TimingSemaphore := Semaphore new. RunTimerEventLoop := true. TimerEventLoop := [ self runTimerEventLoop ] newProcess. TimerEventLoop name: 'Delay Scheduling Process'; priority: Processor timingPriority. TimerEventLoop resume. TimingSemaphore signal. "get going" ! ! !ProcessBrowser class methodsFor: 'process control' stamp: 'CamilloBruni 8/21/2013 19:24' prior: 30006063! nameAndRulesFor: aProcess "Answer a nickname and two flags: allow-stop, and allow-debug" | rules | rules := {nil. true. true}. WellKnownProcesses do: [:blockAndRules | blockAndRules key value == aProcess ifTrue: [ rules := blockAndRules value value ]]. rules first ifNil: [ rules at: 1 put: aProcess suspendedContext asString ]. ^ rules! ! !ProcessBrowser class methodsFor: 'initialization' stamp: 'CamilloBruni 8/21/2013 19:21' prior: 30000694! registerWellKnownProcesses "Associate each well-known process with a nickname and two flags: allow-stop, and allow-debug. Additional processes may be added to this list as required" WellKnownProcesses := OrderedCollection new. self registerWellKnownProcess: [ ] label: 'no process' allowStop: false allowDebug: false. self registerWellKnownProcess: [ Smalltalk lowSpaceWatcherProcess ] label: nil allowStop: false allowDebug: false. self registerWellKnownProcess: [ WeakArray runningFinalizationProcess ] label: nil allowStop: false allowDebug: false. self registerWellKnownProcess: [ Processor backgroundProcess ] label: nil allowStop: false allowDebug: false. self registerWellKnownProcess: [ InputEventFetcher default fetcherProcess ] label: nil allowStop: false allowDebug: false. self registerWellKnownProcess: [ UIManager default uiProcess ] label: nil allowStop: false allowDebug: false. self registerWellKnownProcess: [ Smalltalk globals at: #SoundPlayer ifPresent: [ :sp | sp playerProcess ] ] label: 'the Sound Player' allowStop: false allowDebug: false. self registerWellKnownProcess: [ Smalltalk globals at: #CPUWatcher ifPresent: [ :cw | cw currentWatcherProcess ] ] label: 'the CPUWatcher' allowStop: false allowDebug: false. self registerWellKnownProcess: [ Delay schedulingProcess ] label: nil allowStop: false allowDebug: false! ! !ProcessorScheduler class methodsFor: 'background process' stamp: 'CamilloBruni 8/21/2013 19:15' prior: 30031583! startUp "Install a background process of the lowest possible priority that is always runnable." "Details: The virtual machine requires that there is aways some runnable process that can be scheduled; this background process ensures that this is the case." Smalltalk installLowSpaceWatcher. BackgroundProcess == nil ifFalse: [BackgroundProcess terminate]. BackgroundProcess := [self idleProcess] newProcess. BackgroundProcess priority: SystemRockBottomPriority. BackgroundProcess name: 'Idle Process'. BackgroundProcess resume. ! ! !SmalltalkImage methodsFor: 'memory space' stamp: 'CamilloBruni 8/21/2013 19:12' prior: 46504971! installLowSpaceWatcher "Start a process to watch for low-space conditions." "Smalltalk installLowSpaceWatcher" self primSignalAtBytesLeft: 0. "disable low-space interrupts" LowSpaceProcess ifNotNil: [ LowSpaceProcess terminate ]. LowSpaceProcess := [ self lowSpaceWatcher ] newProcess. LowSpaceProcess name: 'Low Space Watcher'. LowSpaceProcess priority: Processor lowIOPriority. LowSpaceProcess resume! ! "Collections-Weak"! "Kernel"! "Polymorph-Widgets"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(5 September 2013 9:45:34 am) Pharo.image priorSource: 16603138! ----STARTUP----an Array(5 September 2013 9:51:42 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 September 2013 9:51:42 am) Pharo-30367.image priorSource: 16621161! ----STARTUP----an Array(5 September 2013 10:15:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/5/2013 10:12' prior: 50157877! commentForCurrentUpdate ^ '11530 AbstractNautilusUI >> categorizeAllUncategorizedMethods broken https://pharo.fogbugz.com/f/cases/11530 11497 pharo CI.image --list shows empty entry for default command line handler https://pharo.fogbugz.com/f/cases/11497 11528 Harden FileDirectoryWrapper https://pharo.fogbugz.com/f/cases/11528'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/5/2013 10:12'! script160 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.518.mcz CompilerTests-MarcusDenker.177.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1592.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.396.mcz OpalCompiler-Tests-MarcusDenker.203.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.66.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.620.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.9.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1234.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/5/2013 10:12'! update30368 "self new update30368" self withUpdateLog: '11530 AbstractNautilusUI >> categorizeAllUncategorizedMethods broken https://pharo.fogbugz.com/f/cases/11530 11497 pharo CI.image --list shows empty entry for default command line handler https://pharo.fogbugz.com/f/cases/11497 11528 Harden FileDirectoryWrapper https://pharo.fogbugz.com/f/cases/11528'. self loadTogether: self script160 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FileDirectoryWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/4/2013 15:33' prior: 21843801! hasContents "Return whether this directory has subfolders. The value is cached to avoid a performance penalty. Also for performance reasons, the code below will just assume that the directory does indeed have contents in a few of cases: 1. If the item is not a FileDirectory (thus avoiding the cost of refreshing directories that are not local) 2. If it's the root directory of a given volume 3. If there is an error computing the FileDirectory's contents " hasContents ifNil: [ hasContents := [ item isDirectory and: [ item isReadable and: [ item hasDirectories ]] ] on: Error do: [ :error | false ]]. ^ hasContents! ! !FileSystem methodsFor: 'public-testing' stamp: 'CamilloBruni 9/4/2013 15:30' prior: 22029929! hasDirectories: aResolvable self entriesAt: aResolvable ifAbsent: [ ^ false ] do: [ :entry | entry isDirectory ifTrue: [ ^true ] ]. ^false! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'CamilloBruni 9/4/2013 21:16' prior: 49714204! categorizeAllUncategorizedMethods "Categorize methods by looking in parent classes for a method category." self selectedClass ifNotNil: [ :aClass | | methods | methods := aClass uncategorizedSelectors collect: [ :selector| aClass >> selector ]. self classifier classifyAll: methods ]! ! !BasicCommandLineHandler methodsFor: 'commands' stamp: 'CamilloBruni 9/4/2013 17:13' prior: 39090357! list | handlers shortNames maxShortNameSize | self stdout nextPutAll: 'Currently installed Command Line Handlers:'; lf. handlers := self allHandlers reject: [ :cls | cls includesBehavior: BasicCommandLineHandler ]. shortNames := handlers collect: #commandName. maxShortNameSize := (shortNames detectMax: [ :name| name size ]) size. handlers do: [ :handler| self stdout nextPutAll: ' '; nextPutAll: (handler commandName padRightTo: maxShortNameSize); nextPutAll: ' '; nextPutAll: (handler description ifNil: [ '--']); lf]. self quit.! ! "FileSystem-Core"! "Morphic-Base"! "Nautilus"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(5 September 2013 10:15:28 am) Pharo.image priorSource: 16621368! ----STARTUP----an Array(5 September 2013 10:21:41 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 September 2013 10:21:41 am) Pharo-30368.image priorSource: 16634956! ----STARTUP----an Array(5 September 2013 1:40:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/5/2013 13:37' prior: 50176108! commentForCurrentUpdate ^ '11487 Less failed block: First #failedDoit removal in new compiler https://pharo.fogbugz.com/f/cases/11487 11531 More refactorings: system should use new compiler API https://pharo.fogbugz.com/f/cases/11531 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/5/2013 13:37'! script161 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.520.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1592.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-StephaneDucasse.136.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-StephaneDucasse.122.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.399.mcz OpalCompiler-Tests-MarcusDenker.206.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1237.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/5/2013 13:38'! update30369 "self new update30369" self withUpdateLog: '11487 Less failed block: First #failedDoit removal in new compiler https://pharo.fogbugz.com/f/cases/11487 11531 More refactorings: system should use new compiler API https://pharo.fogbugz.com/f/cases/11531 '. self loadTogether: self script161 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DebugContext methodsFor: 'evaluating actions' stamp: 'MarcusDenker 9/5/2013 12:50' prior: 38945794! evaluate: expression ^ Smalltalk compiler source: expression; context: context; receiver: context receiver; evaluate! ! !OCClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 13:00' prior: 39220612! doTestDebuggerTempAccessWith: one with: two "Test debugger access for temps" | outerContext local1 remote1 | outerContext := thisContext. local1 := 3. remote1 := 1/2. self assert: (self evaluate: 'one' in: thisContext to: self) == one. self assert: (self evaluate: 'two' in: thisContext to: self) == two. self assert: (self evaluate: 'local1' in: thisContext to: self) == local1. self assert: (self evaluate: 'remote1' in: thisContext to: self) == remote1. self evaluate: 'local1 := -3.0' in: thisContext to: self. self assert: local1 = -3.0. (1 to: 2) do: [:i| | local2 r1 r2 r3 r4 | local2 := i * 3. remote1 := local2 / 7. self assert: thisContext ~~ outerContext. self assert: (r1 := self evaluate: 'one' in: thisContext to: self) == one. self assert: (r2 := self evaluate: 'two' in: thisContext to: self) == two. self assert: (r3 := self evaluate: 'i' in: thisContext to: self) == i. self assert: (r4 := self evaluate: 'local2' in: thisContext to: self) == local2. self assert: (r4 := self evaluate: 'remote1' in: thisContext to: self) == remote1. self assert: (r4 := self evaluate: 'remote1' in: outerContext to: self) == remote1. self evaluate: 'local2 := 15' in: thisContext to: self. self assert: local2 = 15. self evaluate: 'local1 := 25' in: thisContext to: self. self assert: local1 = 25. { r1. r2. r3. r4 } "placate the compiler"]. self assert: local1 = 25. self assert: remote1 = (6/7)! ! !OCClosureCompilerTest methodsFor: 'running' stamp: 'MarcusDenker 9/5/2013 12:59'! evaluate: aString in: aContext to: anObject self class compiler source: aString; context: aContext; receiver: anObject; evaluate! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 36001574! compile: textOrStream in: aClass notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; failBlock: aFailBlock; translate ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 36001863! compileNoPattern: textOrStream in: aClass context: aContext notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; context: aContext; requestor: aRequestor; noPattern: true; failBlock: aFailBlock; translate! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/30/2013 10:28' prior: 36530679! evaluate: textOrString for: anObject notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; receiver: anObject; requestor: aController; evaluate ! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/27/2013 21:02' prior: 36004003! evaluate: aString in: aContext to: aReceiver ^self source: aString; context: aContext; receiver: aReceiver; failBlock: [^ #failedDoit]; evaluate! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'ClementBera 5/16/2013 11:16' prior: 38564491! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock logged: logFlag ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; logged: logFlag; evaluate! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/29/2013 10:36' prior: 36006805! parse: aString class: aClass noPattern: aBoolean context: aContext notifying: req ifFail: aBlock "Backwards compatibilty" ^self source: aString; class: aClass; noPattern: aBoolean; context: aContext; requestor: req; failBlock: aBlock; translate.! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/27/2013 21:24' prior: 36007169! parse: textOrStream in: aClass notifying: req ^self source: textOrStream; class: aClass; requestor: req; translate.! ! !DebugSession methodsFor: 'debugging actions' stamp: 'MarcusDenker 9/5/2013 12:49' prior: 45927990! returnValueFrom: aContext "Force a return of a given value to the previous context!!" | previous expression value | self flag: 'should be called only on the selected context'. (self isContextPostMortem: aContext) ifTrue: [^ self]. expression := UIManager default request: 'Enter expression for return value:'. value := self class compiler source: expression; context: aContext; receiver: aContext receiver; evaluate. previous := aContext sender. " self resetContext: previous." interruptedProcess popTo: previous value: value. self updateContextTo: previous. self contextChanged ! ! !TextEditor methodsFor: 'do-its' stamp: 'MarcusDenker 9/5/2013 13:19' prior: 38395052! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ nil]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := rcvr class compiler source: self selectionAsStream; context: ctxt; receiver: rcvr; requestor: self; failBlock: [morph flash. ^ nil]; evaluate. ^aBlock value: result! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 9/5/2013 13:24' prior: 38393054! compileSelectionFor: anObject in: evalContext | methodNode | methodNode := self class compiler source: self selectionAsStream; class: anObject class; context: evalContext; requestor: self morph; noPattern: true; failBlock: [ ^nil ]; translate. ^methodNode generateWithSource. ! ! !SmalltalkEditor methodsFor: 'do-its' stamp: 'MarcusDenker 9/5/2013 13:20' prior: 38393485! evaluateSelectionAndDo: aBlock "Treat the current selection as an expression; evaluate it and invoke aBlock with the result." | result rcvr ctxt | self lineSelectAndEmptyCheck: [^ '']. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [ rcvr := ctxt := nil]. result := rcvr class compiler source: self selectionForDoitAsStream; context: ctxt; receiver: rcvr; requestor: self morph "don't set it to self.. The receiver can be destroyed as a result of evaluateSelection"; failBlock: [self morph flash. ^ nil]; evaluate. ^ aBlock value: result! ! !CompilerEvaluationTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 12:57' prior: 19919445! testEvaluationOfInlinedToDo "Whether inlined or not, #to:do: should return the same value" | inlinedResult notInlinedResult | inlinedResult := Compiler new evaluate: '1+1 to: 0 do: [:i | ]' in: nil to: nil notifying: nil ifFail: [^ self] logged: false. notInlinedResult := Compiler new evaluate: '| aBlock | aBlock := [:i | ]. 1+1 to: 0 do: aBlock' in: nil to: nil notifying: nil ifFail: [^ self] logged: false. self assert: inlinedResult = notInlinedResult! ! !CompilerEvaluationTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 12:57' prior: 19920062! testEvaluationOfSelfSend "Tests the evaluation of an inherited method that uses super send and self send" "self debug: #testEvaluationOfSelfSend" | result | result := Compiler new evaluate: (self method copyFrom: 6 to: self method size) in: self methodContext to: nil notifying: nil ifFail: [^ self] logged: true. self assert: result = (6250 / 3)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:12' prior: 35225216! testApicall | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodApicall. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction)). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:13' prior: 35225645! testCdecl | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodCdecl. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction )). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:13' prior: 35226073! testCdeclNoModule | aRBMethode | Smalltalk globals at: #ExternalFunction ifAbsent:[^self]. aRBMethode := OpalCompiler new parse: self methodCdeclNoModule. self assert: ((aRBMethode compiledMethod literalAt: 1) isKindOf: (Smalltalk globals at: #ExternalFunction)). self assert: (aRBMethode compiledMethod primitive = 120)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:13' prior: 35226514! testDoublePragma | aRBMethode | "self debug: #testDoublePragma" aRBMethode := OpalCompiler new parse: self methodDoublePragma. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:). self assert: (aRBMethode compiledMethod pragmas second keyword = #hello:)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:13' prior: 35226907! testIsPrimitve | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitive. self assert: aRBMethode isPrimitive! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 49832616! testNoPragma "self debug: #testDoublePrimitive" OpalCompiler new parse: self methodNoPragma! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35227383! testPragmaAfterBeforTemp "self debug: #testPragmaAfterBeforTemp" | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaAfterBeforTemps. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:). self assert: (aRBMethode compiledMethod pragmas second keyword = #world:) ! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35227801! testPragmaTwoParam "self debug: #testPragmaAfterBeforTemp" | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaTwoParam. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:by:) ! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35228133! testPragmaUnarayMessage | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPragmaUnarayMessage. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35228431! testPrimitiveNumber | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitive. self assert: (aRBMethode compiledMethod primitive = 4)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35228698! testPrimitivePragmaNumber | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitivePragma. self assert: (aRBMethode compiledMethod primitive = 4)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35228978! testPrimitiveString | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitiveString. self assert: (aRBMethode compiledMethod primitive = 117)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35229253! testPrimitiveStringModule | aRBMethode | aRBMethode := OpalCompiler new parse: self methodPrimitiveStringModule. self assert: (aRBMethode compiledMethod primitive = 117)! ! !OCPragmaTest methodsFor: 'testing' stamp: 'MarcusDenker 9/5/2013 13:14' prior: 35229540! testSinglePragma | aRBMethode | aRBMethode := OpalCompiler new parse: self methodSinglePragma. self assert: (aRBMethode compiledMethod pragmas first keyword = #hello:) ! ! !MCStWriterTest methodsFor: 'asserting' stamp: 'MarcusDenker 9/5/2013 13:16' prior: 35964579! assertChunkIsWellFormed: chunk self class compiler source: chunk readStream ; class: UndefinedObject; noPattern: true; failBlock: [self assert: false]; translate.! ! !MCStWriterTest methodsFor: 'asserting' stamp: 'MarcusDenker 9/5/2013 13:16' prior: 35964863! assertMethodChunkIsWellFormed: chunk self class compiler source: chunk readStream; class: UndefinedObject; failBlock: [self assert: false]; translate. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'MarcusDenker 9/5/2013 12:51' prior: 36497988! saveElement "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class compiler source: description text readStream; context: nil "should be object in case of methodContext"; receiver: description doItReceiver; failBlock: [^ self]; evaluate. self selectedElement save: newValue. self objectChanged! ! !EyeInspector methodsFor: 'event-handling' stamp: 'MarcusDenker 9/5/2013 12:48' prior: 36764720! saveElement: newText "When you press Cmd+s on the description TextModel, you can save the new value in the inspected object" |newValue| newValue := description doItReceiver class compiler source: newText; context: self doItContext; receiver: description doItReceiver; failBlock: [^ self]; evaluate. self selectedElement save: newValue. self objectChanged.! ! !Inspector methodsFor: 'selecting' stamp: 'MarcusDenker 9/5/2013 12:56' prior: 36330615! accept: aString | result | result := self doItReceiver class compiler source: aString readStream; context: self doItContext; receiver: self doItReceiver; failBlock: [self changed: #flash. ^ false]; evaluate. self replaceSelectionValue: result. self changed: #contents. ^ true! ! !TimeProfiler methodsFor: 'compiling' stamp: 'MarcusDenker 9/5/2013 13:25' prior: 38948469! compile: codeString for: anObject in: evalContext | methodNode | methodNode := Smalltalk compiler source: ('self runBlock: [', codeString, ']'); class: anObject class; context: evalContext; requestor: self; noPattern: true; failBlock: [^nil]; translate. ^ methodNode generateWithSource.! ! !TraitBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 9/5/2013 13:27' prior: 44047718! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler source: (oldClass sourceCodeAt: selector); failBlock: [^ self]; translate. selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! "Compiler"! "CompilerTests"! "DebuggerModel"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Spec-Inspector"! "Tests"! "Text-Edition"! "Tools"! ----End fileIn----! ----QUIT----an Array(5 September 2013 1:40:31 pm) Pharo.image priorSource: 16635165! ----STARTUP----an Array(5 September 2013 1:46:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 September 2013 1:46:38 pm) Pharo-30369.image priorSource: 16661523! ----STARTUP----an Array(5 September 2013 3:14:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/5/2013 15:11' prior: 50189905! commentForCurrentUpdate ^ '11529 MetacelloConfigurationBrowser open not working https://pharo.fogbugz.com/f/cases/11529 11062 Remove old compiler API from Pharo image Part 2 https://pharo.fogbugz.com/f/cases/11062 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/5/2013 15:11'! script162 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.522.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.559.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.854.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.401.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1239.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-StephaneDucasse.563.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/5/2013 15:11'! update30370 "self new update30370" self withUpdateLog: '11529 MetacelloConfigurationBrowser open not working https://pharo.fogbugz.com/f/cases/11529 11062 Remove old compiler API from Pharo image Part 2 https://pharo.fogbugz.com/f/cases/11062 '. self loadTogether: self script162 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NativeBoost class methodsFor: 'debugger support' stamp: 'MarcusDenker 9/5/2013 14:53' prior: 48296272! tryRunNativeCode: aCompiledMethod for: aReceiver withArgs: arguments "run only a native code of given method, and if it fails evaluate aFailBlock instead" | src m | "self assert: (self isNativeMethod: aCompiledMethod)." src := String streamContents: [:str | str nextPutAll: 'NBDebug_stub'. 1 to: aCompiledMethod numArgs do: [:i | i = 1 ifTrue: [ str nextPutAll: ': ' ] ifFalse: [ str nextPutAll: ' with: ' ]. str nextPutAll: 'arg'. i printOn: str. ]. str cr; nextPutAll: ' '; cr; nextPutAll: ' ^ ContextPart primitiveFailTokenFor: errorCode'. ]. m := Compiler new source: src; class: aCompiledMethod methodClass; compiledMethodTrailer: aCompiledMethod trailer; failBlock: [ ^ ContextPart primitiveFailTokenFor: nil ]; compile. m flushCache. m selector flushCache. ^ m valueWithReceiver: aReceiver arguments: arguments. ! ! !OCSourceCode2BytecodeTest methodsFor: 'compiling' stamp: 'MarcusDenker 9/5/2013 14:22'! compile2method: sourceStream "Compile code without logging the source in the changes file" ^OpalCompiler new source: sourceStream; class: self class; compile. ! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35832737! testDoDup | selector method scanner | method := self compile2method: 'duplicateTopBytecode 3 + 4; yourself'. selector := method selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #doDup description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35230968! testDoPop | selector method scanner | selector := (method := self compile2method: 'popStackBytecode 3 + 4') selector. scanner := InstructionStream on: method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #doPop description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35231370! testPrimAdd | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimAdd 3 + 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#+. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35231848! testPrimAt | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimAt self at: 3') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#at:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35232331! testPrimAtEnd | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimSize self atEnd') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#atEnd. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35232821! testPrimAtPut | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimAtPut self at: 3 put: 4') selector. scanner := InstructionStream on: method. 3 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#at:put:. false. 2}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35233321! testPrimBitAnd | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimBitAnd 3 bitAnd: 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitAnd:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35233817! testPrimBitOr | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimBitOr 3 bitOr: 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitOr:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35234309! testPrimBitShift | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimBitShift 3 bitShift: 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#bitShift:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35234813! testPrimDivide | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimDivide 3 / 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#/. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35235297! testPrimDoWith | selector method scanner did | selector := (method := self compile2method: 'bytecodeDoWith self do: #something') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#do:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35235793! testPrimEqual | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimEqual 3 = 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'='. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35236277! testPrimGreaterOrEqual | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimGreaterOrEqual 3 >= 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'>='. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35236781! testPrimGreaterThan | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimGreaterThan 3 > 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#>. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35237275! testPrimIdentity | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimIdentity 3 == 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#==. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35237765! testPrimLessOrEqual | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimLessOrEqual 3 <= 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#<=. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35238261! testPrimLessThan | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimLessThan 3 < 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#<. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35238749! testPrimMakePoint | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimMakePoint 3 @ 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'@'. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35239241! testPrimMod | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimMod 3 \\ 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#\\. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35239721! testPrimMultiply | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimMultiply 3 * 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#'*'. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35240211! testPrimNew | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimNew super new') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new. true. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35240694! testPrimNewWith | selector method scanner did | selector := (method := self compile2method: 'bytecodeNewWith self new: 3') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35241185! testPrimNext | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimSize self next') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#next. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35241672! testPrimNextPut | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimNextPut self nextPut: 3') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#nextPut:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35242175! testPrimNotEqual | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimNotEqual 3 ~= 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#~=. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35242665! testPrimPointX | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimPointX self x') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#x. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35243150! testPrimPointY | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimPointY self y') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#y. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35243635! testPrimQuo | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimQuo 3 // 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#//. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35244115! testPrimSize | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimSize self size') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#size. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35244602! testPrimSubtract | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimSubtract 3 - 4') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#-. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35245090! testPrimValue | selector method scanner did | selector := (method := self compile2method: 'bytecodePrimValue self value') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#value. false. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35245581! testPrimValueWith | selector method scanner did | selector := (method := self compile2method: 'bytecodeValueWith self value: 3') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#value:. false. 1}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35246088! testPushActiveContextBytecode | selector method scanner | selector := (method := self compile2method: 'pushActiveContextBytecode thisContext yourself') selector. scanner := InstructionStream on: method. self assert: scanner peekInstruction selector == #pushActiveContext description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35246511! testPushConstantFalseBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantFalseBytecode false yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first not]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35246968! testPushConstantMinusOneBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantMinusOneBytecode -1 yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == -1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35247438! testPushConstantNilBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantNilBytecode nil yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first isNil]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35247891! testPushConstantOneBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantOneBytecode 1 yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35248349! testPushConstantTrueBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantTrueBytecode true yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35248798! testPushConstantTwoBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantTwoBytecode 2 yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35249248! testPushConstantZeroBytecode | selector method scanner did | selector := (method := self compile2method: 'pushConstantZeroBytecode 0 yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first == 0]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35249700! testPushLiteralConstantBytecode | selector method scanner did | selector := (method := self compile2method: 'pushLiteralConstantBytecode #() yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushConstant: and: [did arguments first = #()]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35250160! testPushLiteralVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'pushLiteralVariableBytecode ClassVar yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35250648! testPushReceiverBytecode | selector method scanner | selector := (method := self compile2method: 'pushReceiverBytecode ^ self yourself') selector. scanner := InstructionStream on: method. self assert: scanner peekInstruction selector == #pushReceiver description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35251051! testPushReceiverVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'pushReceiverVariableBytecode instVar yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35251525! testPushTemporaryVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'pushTemporaryVariableBytecode: t0 t0 yourself') selector. scanner := InstructionStream on: method. self assert: ((did := scanner peekInstruction) selector == #pushTemporaryVariable: and: [did arguments first == 0]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35252009! testReturnFalseBytecode | selector method scanner did | selector := (method := self compile2method: 'returnFalseBytecode 3 + 4. ^ false') selector. scanner := InstructionStream on: method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first not]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35252515! testReturnNilBytecode | selector method scanner did | selector := (method := self compile2method: 'returnNilBytecode 3 + 4. ^ nil') selector. scanner := InstructionStream on: method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first isNil]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35253009! testReturnReceiver | selector method scanner | selector := (method := self compile2method: 'returnReceiver 3 + 4. ^ self') selector. scanner := InstructionStream on: method. 4 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #methodReturnReceiver description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35253450! testReturnTopFromBlock | selector method scanner | selector := (method := self compile2method: 'returnTopFromBlock |ia| ^[ia]') selector. scanner := InstructionStream on: method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #blockReturnTop description: ('Failed ' , selector)! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35253885! testReturnTopFromMethod | selector method scanner | selector := (method := self compile2method: 'returnTopFromMethod ^ 3 + 4') selector. scanner := InstructionStream on: method. 3 timesRepeat: [scanner nextInstruction]. self assert: scanner peekInstruction selector == #methodReturnTop description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35254326! testReturnTrueBytecode | selector method scanner did | selector := (method := self compile2method: 'returnTrueBytecode 3 + 4. ^ true') selector. scanner := InstructionStream on: method. 4 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #methodReturnConstant: and: [did arguments first]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35254817! testStoreAndPopLiteralVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'storeAndPopLiteralVariableBytecode ClassVar := nil') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35255345! testStoreAndPopReceiverVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'storeAndPopReceiverVariableBytecode instVar := self') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35255852! testStoreAndPopTemporaryVariableBytecode | selector method scanner did | selector := (method:= self compile2method: 'storeAndPopTemporaryVariableBytecode | t0 t1 | t1 := t0') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #popIntoTemporaryVariable: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35256365! testStoreIntoLiteralVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'storeIntoLiteralVariableBytecode ^ (ClassVar := nil)') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoLiteralVariable: and: [did arguments first = (#ClassVar -> nil)]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35256895! testStoreIntoReceiverVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'storeIntoReceiverVariableBytecode ^ (instVar := self)') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoReceiverVariable: and: [did arguments first == 2]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35257404! testStoreIntoTemporaryVariableBytecode | selector method scanner did | selector := (method := self compile2method: 'storeIntoTemporaryVariableBytecode | t0 t1 | ^ (t1 := t0)') selector. scanner := InstructionStream on: method. self assert: ((did := scanner nextInstruction; peekInstruction) selector == #storeIntoTemporaryVariable: and: [did arguments first == 1]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35257919! testSuperSend | selector method scanner did | selector := (method := self compile2method: 'bytecodeSuperSend super yourself') selector. scanner := InstructionStream on: method. 1 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#yourself. true. 0}]) description: 'Failed ' , selector! ! !OCSourceCode2BytecodeTest methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:22' prior: 35258416! testSuperSendWith | selector method scanner did | selector := (method := self compile2method: 'bytecodeSuperSendWith super new: 0') selector. scanner := InstructionStream on: method. 2 timesRepeat: [scanner nextInstruction]. self assert: ((did := scanner peekInstruction) selector == #send:super:numArgs: and: [did arguments = {#new:. true. 1}]) description: 'Failed ' , selector! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:46' prior: 39197424! testNotInteractiveInBlockArgumentInstanceVariableShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp [:var1 | ]'; class: MockForCompilation; translate. self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:47' prior: 39197856! testNotInteractiveInBlockTempArgumentShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | |temp|]'; class: MockForCompilation; requestor: self; translate. self assert: newTranscript contents equals: ' MockForCompilation>>temp(temp is shadowed)' ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:48' prior: 39198287! testNotInteractiveInBlockTempInstanceVariableShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | |var1|]'; class: MockForCompilation; requestor: self; failBlock: [self fail. ^nil]; translate. self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:49' prior: 39198742! testNotInteractiveInBlockTempShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp |var2| [:temp| |var2|]'; class: MockForCompilation; requestor: self; failBlock: [self fail]; translate. self assert: newTranscript contents equals: ' MockForCompilation>>temp(var2 is shadowed)' ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:50' prior: 39199181! testNotInteractiveNoShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp |var2|'; class: MockForCompilation; requestor: self; failBlock: [self fail. ^nil]; translate. self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:51' prior: 39199563! testNotInteractiveShadowingOfTemp interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp |temp1 temp1| '; class: MockForCompilation; requestor: self; translate. self assert: ( newTranscript contents = ' MockForCompilation>>temp(temp1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:51' prior: 39199982! testNotInteractiveSiblingBlocksInstanceVariableShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | ].[:temp | |var1|]'; class: MockForCompilation; requestor: self; failBlock: [self fail. ^nil]; translate. self assert: ( newTranscript contents = ' MockForCompilation>>temp(var1 is shadowed)'). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:54' prior: 39200453! testNotInteractiveSiblingBlocksTempShadowing interactive := false. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | ]. [:temp | ]'; class: MockForCompilation; requestor: self; failBlock: [self fail. ^nil]; translate. self assert: ( newTranscript contents = ''). ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:55' prior: 39200872! testReservedNameAsBlockArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | OpalCompiler new source: 'temp ^ [ :' , each , ' | ^ ' , each , ' ]'; class: MockForCompilation; requestor: self; failBlock: [ exit value ]; translate. self fail ] valueWithExit. self assert: ((errorMessage = 'Variable name expected ->' )or: [ errorMessage = 'Name already defined ->' ]). self assert: errorLocation = 11 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:55' prior: 39201506! testReservedNameAsMethodArgumentShadowing interactive := true. #( 'self' 'super' 'thisContext' 'true' 'false' 'nil' ) do: [ :each | self initializeErrorMessage. [ :exit | OpalCompiler new source: 'temp: ' , each , ' ^ ' , each; class: MockForCompilation; requestor: self; failBlock: [ exit value ]; translate. self fail ] valueWithExit. self assert: ((errorMessage = 'Variable name expected ->' )or: [ errorMessage = 'Name already defined ->' ]). self assert: errorLocation = 7 ]! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:56' prior: 39202126! testSiblingBlocksInstanceVariableShadowing interactive := true. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | ].[:temp | |var1|]'; class: MockForCompilation; requestor: self; failBlock: [ self assert: (errorMessage = 'Name already defined ->'). self assert: (errorLocation = 27). ^nil]; translate. self fail. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:57' prior: 39202593! testSiblingBlocksTempShadowing interactive := true. self initializeErrorMessage. OpalCompiler new source: 'temp [:temp | ]. [:temp | ]'; class: MockForCompilation; failBlock: [self fail. ^nil]; translate. ! ! !OCCompilerTest methodsFor: 'test shadowing' stamp: 'MarcusDenker 9/5/2013 14:58' prior: 39202955! testTraitTempShadowing self initializeErrorMessage. OpalCompiler new source: 'testReplaceFromToWithStartingAt | result repStart collection replacementCollection firstIndex secondIndex | replacementCollection := 1.'; class: ArrayTest; failBlock: [self fail.]; translate. self assert: ( newTranscript contents = ' ArrayTest>>testReplaceFromToWithStartingAt(replacementCollection is shadowed) ArrayTest>>testReplaceFromToWithStartingAt(firstIndex is shadowed) ArrayTest>>testReplaceFromToWithStartingAt(secondIndex is shadowed)').! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 4/27/2013 19:28' prior: 36001242! compile: textOrStream in: aClass classified: aCategory notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; category: aCategory; failBlock: aFailBlock; translate! ! !OpalCompiler methodsFor: 'old - deprecated' stamp: 'ClementBera 5/16/2013 11:16' prior: 38564163! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; evaluate! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - block returning' stamp: 'MarcusDenker 9/5/2013 14:28' prior: 35182615! testBlockReturning | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'open (self announcements at: self index ifAbsent: [ ^ self ]) open'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '29 <70> self'. self assert: (bytecode at: (index := index + 1)) = '30 send: announcements'. self assert: (bytecode at: (index := index + 1)) = '31 <70> self'. self assert: (bytecode at: (index := index + 1)) = '32 send: index'. self assert: (bytecode at: (index := index + 1)) = '33 <8F 00 00 01> closureNumCopied: 0 numArgs: 0 bytes 37 to 37'. self assert: (bytecode at: (index := index + 1)) = '37 <78> returnSelf'. self assert: (bytecode at: (index := index + 1)) = '38 send: at:ifAbsent:'. self assert: (bytecode at: (index := index + 1)) = '39 send: open'. self assert: (bytecode at: (index := index + 1)) = '40 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '41 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:29' prior: 35183905! testBlockTemp | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testBlockTemp | block block1 block2 | block := [ :arg | [ arg ] ]. block1 := block value: 1. block2 := block value: 2. self assert: block1 value = 1. self assert: block2 value = 2'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <8F 01 00 08> closureNumCopied: 0 numArgs: 1 bytes 21 to 28'. self assert: (bytecode at: (index := index + 1)) = '21 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '22 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 26 to 27'. self assert: (bytecode at: (index := index + 1)) = '26 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '27 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '28 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '29 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '30 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '31 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '32 send: value:'. self assert: (bytecode at: (index := index + 1)) = '33 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '34 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '35 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '36 send: value:'. self assert: (bytecode at: (index := index + 1)) = '37 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '38 <70> self'. self assert: (bytecode at: (index := index + 1)) = '39 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '40 send: value'. self assert: (bytecode at: (index := index + 1)) = '41 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '42 send: ='. self assert: (bytecode at: (index := index + 1)) = '43 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '44 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '45 <70> self'. self assert: (bytecode at: (index := index + 1)) = '46 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '47 send: value'. self assert: (bytecode at: (index := index + 1)) = '48 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '49 send: ='. self assert: (bytecode at: (index := index + 1)) = '50 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '51 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '52 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'other-tests' stamp: 'MarcusDenker 9/5/2013 14:32' prior: 35186832! testDifferentBlocksWithSameArgumentName | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'exampleNestedBlock | b c z | b := [:a | z := 2. z + a]. c := [:a | z + a]. ^ (b value: 2) + (c value: 1)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '15 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '16 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '17 <8F 11 00 0A> closureNumCopied: 1 numArgs: 1 bytes 21 to 30'. self assert: (bytecode at: (index := index + 1)) = '21 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '22 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '25 <8C 00 01> pushTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '28 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '29 send: +'. self assert: (bytecode at: (index := index + 1)) = '30 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '31 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '32 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '33 <8F 11 00 06> closureNumCopied: 1 numArgs: 1 bytes 37 to 42'. self assert: (bytecode at: (index := index + 1)) = '37 <8C 00 01> pushTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '41 send: +'. self assert: (bytecode at: (index := index + 1)) = '42 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '43 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '44 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '45 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '46 send: value:'. self assert: (bytecode at: (index := index + 1)) = '47 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 send: value:'. self assert: (bytecode at: (index := index + 1)) = '50 send: +'. self assert: (bytecode at: (index := index + 1)) = '51 <7C> returnTop'.! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:33' prior: 35189610! testMethodArgument | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testMethodArgument | temp block | temp := 0. block := [ [ temp ] ]. temp := 1. block := block value. temp := 2. self assert: block value = 2'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '19 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '20 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '21 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '24 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '25 <8F 10 00 0A> closureNumCopied: 1 numArgs: 0 bytes 29 to 38'. self assert: (bytecode at: (index := index + 1)) = '29 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '30 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 34 to 37'. self assert: (bytecode at: (index := index + 1)) = '34 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '38 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '39 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '40 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '44 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '45 send: value'. self assert: (bytecode at: (index := index + 1)) = '46 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '48 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '51 <70> self'. self assert: (bytecode at: (index := index + 1)) = '52 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '53 send: value'. self assert: (bytecode at: (index := index + 1)) = '54 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '55 send: ='. self assert: (bytecode at: (index := index + 1)) = '56 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '57 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '58 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:33' prior: 35192529! testMethodTemp | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testMethodTemp | block1 block2 | block1 := self methodArgument: 1. block2 := self methodArgument: 2. self assert: block1 value = 1. self assert: block2 value = 2'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '23 send: methodArgument:'. self assert: (bytecode at: (index := index + 1)) = '24 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '25 <70> self'. self assert: (bytecode at: (index := index + 1)) = '26 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '27 send: methodArgument:'. self assert: (bytecode at: (index := index + 1)) = '28 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '29 <70> self'. self assert: (bytecode at: (index := index + 1)) = '30 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '31 send: value'. self assert: (bytecode at: (index := index + 1)) = '32 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '33 send: ='. self assert: (bytecode at: (index := index + 1)) = '34 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '35 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '36 <70> self'. self assert: (bytecode at: (index := index + 1)) = '37 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '38 send: value'. self assert: (bytecode at: (index := index + 1)) = '39 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '40 send: ='. self assert: (bytecode at: (index := index + 1)) = '41 send: assert:'. self assert: (bytecode at: (index := index + 1)) = '42 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '43 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'other-tests' stamp: 'MarcusDenker 9/5/2013 14:34' prior: 35194910! testModulePrimitive | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'copyBitsAgain "Primitive. See BitBlt|copyBits, also a Primitive. Essential. See Object documentation whatIsAPrimitive." self primitiveFailed'; class: BitBlt; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = ''. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 send: primitiveFailed'. self assert: (bytecode at: (index := index + 1)) = '23 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '24 <78> returnSelf'.! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - array compilation' stamp: 'MarcusDenker 9/5/2013 14:34' prior: 35195913! testMultiElementArray | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'method ^{1. 2. 3. 4. 5. 6 }'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '29 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '30 <77> pushConstant: 2'. self assert: (bytecode at: (index := index + 1)) = '31 <20> pushConstant: 3'. self assert: (bytecode at: (index := index + 1)) = '32 <21> pushConstant: 4'. self assert: (bytecode at: (index := index + 1)) = '33 <22> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '34 <23> pushConstant: 6'. self assert: (bytecode at: (index := index + 1)) = '35 <8A 86> pop 6 into (Array new: 6)'. self assert: (bytecode at: (index := index + 1)) = '37 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:35' prior: 35197015! testOneFloat | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'one ^1.0'; class: Float class; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '17 <20> pushConstant: 1.0'. self assert: (bytecode at: (index := index + 1)) = '18 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:35' prior: 35197551! testPragma | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'methodDoublePragma '; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = 'Quick return self'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:36' prior: 35198112! testReturnBlockInMethod | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'methodArgument: anObject ^ [ anObject ]'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '14 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 18 to 19'. self assert: (bytecode at: (index := index + 1)) = '18 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '19 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '20 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:36' prior: 35199037! testSetUp | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'setUp super setUp. collection := OrderedCollection new'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '21 <70> self'. self assert: (bytecode at: (index := index + 1)) = '22 <85 00> superSend: setUp'. self assert: (bytecode at: (index := index + 1)) = '24 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '25 <41> pushLit: OrderedCollection'. self assert: (bytecode at: (index := index + 1)) = '26 send: new'. self assert: (bytecode at: (index := index + 1)) = '27 <60> popIntoRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '28 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'test - array compilation' stamp: 'MarcusDenker 9/5/2013 14:36' prior: 35200091! testSimpleArray | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'method ^{1}'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '13 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '14 <8A 81> pop 1 into (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '16 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:37' prior: 35200778! testSteamContentsLimitedToSequenceableCollectionClass | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'streamContents: blockWithArg limitedTo: sizeLimit | stream | stream := LimitedWriteStream on: (self new: (100 min: sizeLimit)). stream setLimit: sizeLimit limitBlock: [^ stream contents]. blockWithArg value: stream. ^ stream contents'; class: SequenceableCollection class; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '37 <40> pushLit: LimitedWriteStream'. self assert: (bytecode at: (index := index + 1)) = '38 <70> self'. self assert: (bytecode at: (index := index + 1)) = '39 <21> pushConstant: 100'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 send: min:'. self assert: (bytecode at: (index := index + 1)) = '42 send: new:'. self assert: (bytecode at: (index := index + 1)) = '43 send: on:'. self assert: (bytecode at: (index := index + 1)) = '44 <6A> popIntoTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '45 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '46 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '47 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '48 <8F 10 00 03> closureNumCopied: 1 numArgs: 0 bytes 52 to 54'. self assert: (bytecode at: (index := index + 1)) = '52 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '53 send: contents'. self assert: (bytecode at: (index := index + 1)) = '54 <7C> returnTop'. self assert: (bytecode at: (index := index + 1)) = '55 send: setLimit:limitBlock:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '58 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '59 send: value:'. self assert: (bytecode at: (index := index + 1)) = '60 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '61 <12> pushTemp: 2'. self assert: (bytecode at: (index := index + 1)) = '62 send: contents'. self assert: (bytecode at: (index := index + 1)) = '63 <7C> returnTop'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:37' prior: 35203409! testToDoArgumentNotInlined | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testToDoArgumentNotInlined | block | block := [ :index | collection add: [ index ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8F 01 00 0A> closureNumCopied: 0 numArgs: 1 bytes 37 to 46'. self assert: (bytecode at: (index := index + 1)) = '37 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '38 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '39 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 43 to 44'. self assert: (bytecode at: (index := index + 1)) = '43 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '44 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '45 send: add:'. self assert: (bytecode at: (index := index + 1)) = '46 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '47 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '50 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '51 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '52 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '53 <70> self'. self assert: (bytecode at: (index := index + 1)) = '54 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '55 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:37' prior: 35205583! testToDoInsideTempNotInlined "Some instructions are the same but we have a different number at he begining, and the storeTemp and popIntoTemp issue" | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testToDoInsideTempNotInlined | block | block := [ :index | | temp | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(1 2 3 4 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8F 01 00 0D> closureNumCopied: 0 numArgs: 1 bytes 37 to 49'. self assert: (bytecode at: (index := index + 1)) = '37 <73> pushConstant: nil'. self assert: (bytecode at: (index := index + 1)) = '38 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '39 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '41 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '42 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 46 to 47'. self assert: (bytecode at: (index := index + 1)) = '46 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '48 send: add:'. self assert: (bytecode at: (index := index + 1)) = '49 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '50 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '51 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '52 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '53 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '54 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '55 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '56 <70> self'. self assert: (bytecode at: (index := index + 1)) = '57 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '58 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '59 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '60 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:38' prior: 35208151! testToDoOutsideTempNotInlined "there seems to be a better indexzation of the temps we have one more" | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testToDoOutsideTempNotInlined | block temp | block := [ :index | temp := index. collection add: [ temp ] ]. 1 to: 5 do: block. self assertValues: #(5 5 5 5 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '37 <8F 11 00 10> closureNumCopied: 1 numArgs: 1 bytes 41 to 56'. self assert: (bytecode at: (index := index + 1)) = '41 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '42 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '45 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '46 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '47 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 51 to 54'. self assert: (bytecode at: (index := index + 1)) = '51 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '55 send: add:'. self assert: (bytecode at: (index := index + 1)) = '56 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '57 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '58 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '59 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '60 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '61 send: to:do:'. self assert: (bytecode at: (index := index + 1)) = '62 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '63 <70> self'. self assert: (bytecode at: (index := index + 1)) = '64 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '65 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '66 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '67 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:38' prior: 35210846! testWhileModificationAfterNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testWhileModificationAfterNotInlined | index block | index := 0. block := [ collection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 15> closureNumCopied: 1 numArgs: 0 bytes 45 to 65'. self assert: (bytecode at: (index := index + 1)) = '45 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '46 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '47 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 51 to 54'. self assert: (bytecode at: (index := index + 1)) = '51 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '55 send: add:'. self assert: (bytecode at: (index := index + 1)) = '56 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '57 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '60 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '61 send: +'. self assert: (bytecode at: (index := index + 1)) = '62 <8D 00 00> storeIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '65 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '66 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '67 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '68 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 72 to 77'. self assert: (bytecode at: (index := index + 1)) = '72 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '75 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '76 send: <'. self assert: (bytecode at: (index := index + 1)) = '77 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '78 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '79 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '80 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '81 <70> self'. self assert: (bytecode at: (index := index + 1)) = '82 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '83 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '84 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '85 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:40' prior: 35214354! testWhileModificationBeforeNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testWhileModificationBeforeNotInlined | index block | index := 0. block := [ index := index + 1. collection add: [ index ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 14> closureNumCopied: 1 numArgs: 0 bytes 45 to 64'. self assert: (bytecode at: (index := index + 1)) = '45 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '48 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '49 send: +'. self assert: (bytecode at: (index := index + 1)) = '50 <8E 00 00> popIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '53 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '55 <8F 10 00 04> closureNumCopied: 1 numArgs: 0 bytes 59 to 62'. self assert: (bytecode at: (index := index + 1)) = '59 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '62 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '63 send: add:'. self assert: (bytecode at: (index := index + 1)) = '64 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '65 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '66 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '67 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 71 to 76'. self assert: (bytecode at: (index := index + 1)) = '71 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '74 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '75 send: <'. self assert: (bytecode at: (index := index + 1)) = '76 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '77 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '78 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '79 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '80 <70> self'. self assert: (bytecode at: (index := index + 1)) = '81 <23> pushConstant: #(5 5 5 5 5)'. self assert: (bytecode at: (index := index + 1)) = '82 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '83 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '84 <78> returnSelf'. ! ! !OCNewCompilerWithChangesFunctionalTests methodsFor: 'tests' stamp: 'MarcusDenker 9/5/2013 14:30' prior: 35217796! testWhileWithTempNotInlined "The bytecodes integers are different in some cases." | aCompiledMethod bytecode index | aCompiledMethod := OpalCompiler new source: 'testWhileWithTempNotInlined | index block | index := 0. block := [ | temp | temp := index := index + 1. collection add: [ temp ] ]. [ index < 5 ] whileTrue: block. self assertValues: #(1 2 3 4 5)'; class: OCMockCompilationClass; compile. bytecode := aCompiledMethod symbolic asString subStrings: ' '. index := 0. self assert: (bytecode at: (index := index + 1)) = '33 <8A 01> push: (Array new: 1)'. self assert: (bytecode at: (index := index + 1)) = '35 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '36 <75> pushConstant: 0'. self assert: (bytecode at: (index := index + 1)) = '37 <8E 00 01> popIntoTemp: 0 inVectorAt: 1'. self assert: (bytecode at: (index := index + 1)) = '40 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '41 <8F 10 00 14> closureNumCopied: 1 numArgs: 0 bytes 45 to 64'. self assert: (bytecode at: (index := index + 1)) = '45 <73> pushConstant: nil'. self assert: (bytecode at: (index := index + 1)) = '46 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '49 <76> pushConstant: 1'. self assert: (bytecode at: (index := index + 1)) = '50 send: +'. self assert: (bytecode at: (index := index + 1)) = '51 <8D 00 00> storeIntoTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '54 <69> popIntoTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '55 <00> pushRcvr: 0'. self assert: (bytecode at: (index := index + 1)) = '56 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '57 <8F 10 00 02> closureNumCopied: 1 numArgs: 0 bytes 61 to 62'. self assert: (bytecode at: (index := index + 1)) = '61 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '62 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '63 send: add:'. self assert: (bytecode at: (index := index + 1)) = '64 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '65 <68> popIntoTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '66 <11> pushTemp: 1'. self assert: (bytecode at: (index := index + 1)) = '67 <8F 10 00 06> closureNumCopied: 1 numArgs: 0 bytes 71 to 76'. self assert: (bytecode at: (index := index + 1)) = '71 <8C 00 00> pushTemp: 0 inVectorAt: 0'. self assert: (bytecode at: (index := index + 1)) = '74 <21> pushConstant: 5'. self assert: (bytecode at: (index := index + 1)) = '75 send: <'. self assert: (bytecode at: (index := index + 1)) = '76 <7D> blockReturn'. self assert: (bytecode at: (index := index + 1)) = '77 <10> pushTemp: 0'. self assert: (bytecode at: (index := index + 1)) = '78 send: whileTrue:'. self assert: (bytecode at: (index := index + 1)) = '79 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '80 <70> self'. self assert: (bytecode at: (index := index + 1)) = '81 <23> pushConstant: #(1 2 3 4 5)'. self assert: (bytecode at: (index := index + 1)) = '82 send: assertValues:'. self assert: (bytecode at: (index := index + 1)) = '83 <87> pop'. self assert: (bytecode at: (index := index + 1)) = '84 <78> returnSelf'. ! ! !RBAddMethodChange methodsFor: '*NautilusRefactoring' stamp: 'MarcusDenker 9/5/2013 14:07' prior: 36282366! accept: aText notifying: aController "Just to make sure that it compiles, try with the standard compiler." | compiler | compiler := self changeClass ifNil: [ Object compiler ] ifNotNil: [:changeClass | changeClass compiler ]. compiler source: aText asString; class: self changeClass; requestor: aController; failBlock: [ ^ false ]; translate. self class: self changeClass protocol: self protocol source: aText asString. ^ true! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 9/5/2013 14:05' prior: 44791314! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 9/5/2013 14:43' prior: 38879938! testBlockTemps | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := OpalCompiler new source: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].'; class: OCMockCompilationClass; compile. originalCompiledMethod := (Smalltalk classNamed: #Compiler) new source: 'ascentOf: aCharacter ^ [ | temp1 temp2 temp3 | 1= temp1. 2 = temp2. 3 = temp3].'; class: OCMockCompilationClass; compile. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 9/5/2013 14:44' prior: 38883905! testNotUsedArgument | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := OpalCompiler new source: 'ascentOf: aCharacter ^ self ascent.'; class: OCMockCompilationClass; compile. originalCompiledMethod := (Smalltalk classNamed: #Compiler) new source: 'ascentOf: aCharacter ^ self ascent.'; class: OCMockCompilationClass; compile. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 9/5/2013 14:45' prior: 38885018! testPragmas | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := OpalCompiler new source: 'methodDoublePragma '; class: OCMockCompilationClass; compile. originalCompiledMethod := (Smalltalk classNamed: #Compiler) new source: 'methodDoublePragma '; class: OCMockCompilationClass; compile. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. "AdditionalState assertions" self assert: newCompiledMethod literals first selector = originalCompiledMethod literals first selector. self assert: (newCompiledMethod literals first analogousCodeTo: originalCompiledMethod literals first). self assert: (newCompiledMethod literals first instVarNamed: 'method') = newCompiledMethod. self assert: newCompiledMethod literals second = originalCompiledMethod literals second. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 9/5/2013 14:45' prior: 38886593! testPrimitive | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. newCompiledMethod := OpalCompiler new source: 'size ^ self basicSize.'; class: OCMockCompilationClass; compile. originalCompiledMethod := (Smalltalk classNamed: #Compiler) new source: 'size ^ self basicSize.'; class: OCMockCompilationClass; compile. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !OCCompiledMethodIntegrityTests methodsFor: 'test' stamp: 'MarcusDenker 9/5/2013 14:46' prior: 38887728! testRemoteTempInVector | newCompiledMethod originalCompiledMethod | (Smalltalk hasClassNamed: #Compiler) ifFalse: [^self skip]. "Here the problem was that the Scope kept both the remote temp answer and the new remote this caused that the number of temps were more than the correnct" newCompiledMethod := OpalCompiler new source: 'value | answer | self do: [:each | answer := each value]. ^answer'; class: Object; compile. originalCompiledMethod := (Smalltalk classNamed: #Compiler) new source: 'value | answer | self do: [:each | answer := each value]. ^answer'; class: Object; compile. self assert: newCompiledMethod numArgs = originalCompiledMethod numArgs. self assert: newCompiledMethod numLiterals = originalCompiledMethod numLiterals. self assert: newCompiledMethod numTemps = originalCompiledMethod numTemps. self assert: newCompiledMethod primitive = originalCompiledMethod primitive. self assert: newCompiledMethod header = originalCompiledMethod header! ! !MetacelloConfigurationBrowser class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 9/5/2013 14:33' prior: 43797397! open ^ self new openWithSpec; yourself ! ! !ContextPart class methodsFor: 'simulation' stamp: 'MarcusDenker 9/5/2013 14:26' prior: 38949212! initializeTryNamedPrimitiveTemplateMethod | method | method := Smalltalk compiler class: UndefinedObject; source: 'tryNamedPrimitive "This method is a template that the Smalltalk simulator uses to execute primitives. See Object documentation whatIsAPrimitive." ^ ContextPart primitiveFailTokenFor: errorCode'; failBlock: [ self error: 'method source is incorrect'. ]; compile. TryNamedPrimitiveTemplateMethod := method. ! ! OCSourceCode2BytecodeTest removeSelector: #compile2methodNode:! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock "Compile code without logging the source in the changes file" ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! "Compiler"! "Kernel"! "NativeBoost-Core"! "NautilusRefactoring"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(5 September 2013 3:14:32 pm) Pharo.image priorSource: 16661730! ----STARTUP----an Array(5 September 2013 3:20:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 September 2013 3:20:52 pm) Pharo-30370.image priorSource: 16755565! ----STARTUP----an Array(5 September 2013 4:07:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/5/2013 16:04' prior: 50216469! commentForCurrentUpdate ^ '11532 deprecate Behavior>>compile:classified:notifying:trailer:ifFail: https://pharo.fogbugz.com/f/cases/11532'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/5/2013 16:05'! script163 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.856.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.375.mcz SlotTests-EstebanLorenzano.57.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1239.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/5/2013 16:05'! update30371 "self new update30371" self withUpdateLog: '11532 deprecate Behavior>>compile:classified:notifying:trailer:ifFail: https://pharo.fogbugz.com/f/cases/11532'. self loadTogether: self script163 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClassDescription methodsFor: 'compiling' stamp: 'MarcusDenker 9/5/2013 15:40' prior: 44521013! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compiler source: text; requestor: requestor; category: category; failBlock: [ ^nil ]; compile. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 9/5/2013 15:35'! compile: textOrString ^self source: textOrString; compile.! ! !TBehavior methodsFor: 'traits' stamp: 'MarcusDenker 9/5/2013 15:42' prior: 44799205! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compiler source: source; category: aCompiledMethod category; failBlock: [ ^nil ]; compile. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 9/5/2013 15:44' prior: 50302229! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !TBehavior methodsFor: '*Compiler-Kernel' stamp: 'MarcusDenker 9/5/2013 15:39' prior: 44793244! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 9/5/2013 15:34' prior: 38687605! testEqualityClassSideMethod | method1 method2 | method1 := TestCase class compiler compile: 'aMethod'. method2 := TestCase class compiler compile: 'aMethod'. self assert: method1 = method2. ! ! !CompiledMethodTest methodsFor: 'tests - comparing' stamp: 'MarcusDenker 9/5/2013 15:37' prior: 36765794! testEqualityInstanceSideMethod | method1 method2 | method1 := TestCase compiler compile: 'aMethod'. method2 := TestCase compiler compile: 'aMethod'. self assert: (method1 literalAt: method1 numLiterals) == (method2 literalAt: method2 numLiterals). self assert: method1 = method2. ! ! !MethodAddition methodsFor: 'operations' stamp: 'MarcusDenker 9/5/2013 15:41' prior: 36132965! createCompiledMethod compiledMethod := myClass compiler source: text asString; requestor: requestor; category: category; failBlock: [ ^nil ]; compile. selector := compiledMethod selector. self writeSourceToLog. priorMethodOrNil := myClass compiledMethodAt: selector ifAbsent: [ nil ]. priorCategoryOrNil := myClass organization categoryOfElement: selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compiler source: text; requestor: requestor; category: category; failBlock: [ ^nil ]; compile. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource | method | method := self compiler source: text; requestor: requestor; category: category; failBlock: [ ^nil ]; compile. logSource ifTrue: [ self logMethodSource: (requestor ifNotNil: [ :r | r text ] ifNil: [ text ]) "the requestor text might have been changed by the compiler and may be different thant text argument" forMethod: method inCategory: category withStamp: changeStamp]. self addAndClassifySelector: method selector withMethod: method inProtocol: category notifying: requestor. self instanceSide noteCompilationOf: method selector meta: self isClassSide. ^ method selector! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compiler source: source; category: aCompiledMethod category; failBlock: [ ^nil ]; compile. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! addTraitSelector: aSymbol withMethod: aCompiledMethod "Add aMethod with selector aSymbol to my methodDict. aMethod must not be defined locally." | source method | [(self includesLocalSelector: aSymbol) not] assert. self ensureLocalSelectors. source := aCompiledMethod getSourceReplacingSelectorWith: aSymbol. method := self compiler source: source; category: aCompiledMethod category; failBlock: [ ^nil ]; compile. method putSource: source inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Trait method'; cr]. self isTrait ifFalse: [ method properties at: #traitSource put: aCompiledMethod]. self basicAddSelector: aSymbol withMethod: method! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! "Compiler"! "KernelTests"! "Monticello"! "OpalCompiler-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(5 September 2013 4:07:28 pm) Pharo.image priorSource: 16755772! ----STARTUP----an Array(5 September 2013 4:13:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 September 2013 4:13:45 pm) Pharo-30371.image priorSource: 16776228! ----STARTUP----an Array(6 September 2013 9:52:54 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/6/2013 09:49' prior: 50310511! commentForCurrentUpdate ^ '11412 Scenario for potential bug in MC/Classbuilder https://pharo.fogbugz.com/default.asp?11412'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/6/2013 09:49'! script164 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-StephaneDucasse.627.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-StephaneDucasse.109.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.856.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.116.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1239.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/6/2013 09:49'! update30372 "self new update30372" self withUpdateLog: '11412 Scenario for potential bug in MC/Classbuilder https://pharo.fogbugz.com/default.asp?11412'. self loadTogether: self script164 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LayoutEmptyScope commentStamp: '' prior: 42377471! I am the last layout scope in a scope chain.! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 9/5/2013 15:45'! testReshapeByteVariableToPointerPropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: ByteLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: ByteLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be of type variable byte" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable. self assert: each isBytes. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: PointerLayout; slots: { #x } ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed description: each name, ' was not reshaped.'. self assert: each isPointers description: each name, ' was not reshaped.' ].! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 9/5/2013 15:45'! testReshapePointerToByteVariablePropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: PointerLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: PointerLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: PointerLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: PointerLayout ]. "all the classes in the hierarchy should be of type fixed pointers" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed. self assert: each isPointers. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable description: each name, ' was not reshaped.'. self assert: each isBytes description: each name, ' was not reshaped.' ].! ! !LayoutWithSlots methodsFor: 'extending' stamp: 'MartinDias 9/5/2013 15:49'! extend "Answer a default layout extending me." ^ self extend: self slotScope extend! ! !ObjectLayout methodsFor: 'extending' stamp: 'MartinDias 9/5/2013 15:49'! extend "Answer a default extension of me." ^ self subclassResponsibility! ! !ObjectLayout methodsFor: 'reshaping' stamp: 'MartinDias 8/28/2013 15:48' prior: 45253633! reshapeFrom: oldScope to: newParentLayout "Answer the reshaped version of me for a new parent layout." | newScope | newScope := self slotScope rebase: oldScope to: newParentLayout slotScope. ^ newParentLayout extendAgain: self with: newScope.! ! !BitsLayout methodsFor: 'extending' stamp: 'MartinDias 9/5/2013 15:50'! extend "Answer a default extension of me." ^ self species new ! ! !BitsLayout methodsFor: 'reshaping' stamp: 'MartinDias 9/5/2013 15:49'! extendAgain: aLayout with: aScope "Answer my default layout since any subclass of me only can have my layout type." ^ self extend host: host; yourself! ! !BitsLayout methodsFor: 'reshaping' stamp: 'MartinDias 8/28/2013 15:48' prior: 45256804! reshapeFrom: oldScope to: newParentLayout "Answer the reshaped version of me for a new parent layout. If the new parent layout has not fields, then the new version is just a copy of me. But if it has fields, that means that the new version of me cannot be a bits layout anymore, so the answer is a new default layout. " ^ newParentLayout hasFields ifTrue: [ (newParentLayout extend) host: host; yourself ] ifFalse: [ self copy ] ! ! !LayoutClassScope methodsFor: 'printing' stamp: 'MartinDias 9/5/2013 15:49'! printOn: aStream super printOn: aStream. self allVisibleSlots printElementsOn: aStream.! ! !LayoutEmptyScope commentStamp: '' prior: 67119122! I am the last layout scope in a scope chain.! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----an Array(6 September 2013 9:53:02 am) Pharo.image priorSource: 16776435! ----STARTUP----an Array(6 September 2013 9:59:39 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 September 2013 9:59:40 am) Pharo-30372.image priorSource: 16792405! ----STARTUP----an Array(6 September 2013 12:57:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/6/2013 12:55' prior: 50331174! commentForCurrentUpdate ^ '7097 Class Quadrangle only is used in Tests https://pharo.fogbugz.com/f/cases/7097 3829 Pangrams https://pharo.fogbugz.com/f/cases/3829/Pangrams '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/6/2013 12:55'! script165 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.110.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.856.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-StephaneDucasse.11.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1239.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/6/2013 12:55'! update30373 "self new update30373" self withUpdateLog: '7097 Class Quadrangle only is used in Tests https://pharo.fogbugz.com/f/cases/7097 3829 Pangrams https://pharo.fogbugz.com/f/cases/3829/Pangrams '. self loadTogether: self script165 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FontChooserMorph commentStamp: 'StephaneDucasse 1/1/2010 18:02' prior: 42310903! I'm the UI of a font chooser. ! !RPackageOrganizerTest commentStamp: 'StephaneDucasse 4/24/2011 17:10' prior: 42617933! RPackageOrganizerTest tests the behavior of PackageOrganizer. Note that it does not rely on announcement to be emitted to maintain invariants. Therefore the new created PackageOrganizer is not registered to listen to event. ! !FontChooserMorph commentStamp: 'StephaneDucasse 1/1/2010 18:02' prior: 67135432! I'm the UI of a font chooser. ! !FontChooserMorph methodsFor: 'interface building' stamp: 'HenrikSperreJohansen 9/5/2013 16:36' prior: 22421820! createWindow "Create the package loader window." | buttonBar buttonBarOffset | buttonBar := self newRow: { self applyButton. self okButton. self cancelButton. self updateButton}. buttonBar cellInset: 8@0. buttonBarOffset := buttonBar minExtent y negated - (2 * ProportionalSplitterMorph splitterWidth). self addMorph: (self newFontList borderWidth: 0) frame: (0.0 @ 0.0 corner: 0.4 @ 0.4). self addMorph: ((styleList := self newFontStyleList) borderWidth: 0) frame: (0.4 @ 0.0 corner: 0.6 @ 0.4). self addMorph: (pointSizeList := self newPointSizeList borderWidth:0) frame: (0.6 @ 0.0 corner: 0.75 @ 0.4). self addMorph: (languageList := self newLanguageList borderWidth:0) frame: (0.75 @ 0.0 corner: 1.0 @ 0.4). self addMorph: self fontPreviewPanel fullFrame: ((0 @ 0.4 corner: 1 @1) asLayoutFrame bottomOffset: buttonBarOffset). self addMorph: buttonBar fullFrame: ((0 @1 corner: 1@1) asLayoutFrame topOffset: buttonBarOffset)! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'HenrikSperreJohansen 9/5/2013 16:34'! languageIndex | item | item := self pangrams detect: [ :one | one value = selectedPangram ] ifNone: nil. ^self pangrams indexOf: item.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'HenrikSperreJohansen 9/5/2013 16:34'! languageIndex: anIndex selectedPangram := (self pangrams at: anIndex) value. languageList selectionIndex: anIndex. self updatePreview! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'HenrikSperreJohansen 9/5/2013 15:54'! languages ^self pangrams collect: #key! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'StephaneDucasse 1/1/2010 18:05' prior: 22415683! newFontPointSizeField | answer | answer := (PluggableTextMorph on: self text: #pointSizeString accept: #pointSizeString:) acceptOnCR: true; hideVScrollBarIndefinitely: true; color: Color gray veryMuchLighter; borderColor: #inset; vResizing: #rigid; hResizing: #spaceFill; width: (TextStyle defaultFont widthOfString: '99999999.99'); height: TextStyle defaultFont height + 6; yourself. ^answer! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'tween 8/27/2007 13:14' prior: 22416178! newFontPointSizeLabel ^StringMorph contents: 'Point size:' translated.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'MarcusDenker 1/24/2010 11:06' prior: 22416336! newFontStyleList | answer fon max | answer := PluggableListMorph on: self model list: #fontStyleListStrings selected: #selectedFontStyleIndex changeSelected: #selectedFontStyleIndex:. fon := answer font. max := fon widthOfStringOrText: 'Condensed Extra Bold Oblique' "long, but not the longest". model fontStyleList do:[:fontFamilyMember | max := max max: (fon widthOfStringOrText: fontFamilyMember styleName)]. answer color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; "hResizing: #rigid;" width: max + answer scrollBarThickness + (fon widthOfStringOrText: ' '). ^answer! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'HenrikSperreJohansen 9/5/2013 15:28'! newLanguageList | answer | answer := PluggableListMorph on: self list: #languages selected: #languageIndex changeSelected: #languageIndex:. answer color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill. ^answer! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'HenrikSperreJohansen 9/5/2013 16:05' prior: 22423872! pangrams ^ OrderedCollection new add: 'English' -> 'the quick brown fox jumps over the lazy dog'; add: 'Bulgarian' -> 'Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче.'; add: 'Czech' -> 'Příliš žluťoučký kůň úpěl ďábelské ódy.'; add: 'Chinese' -> '視野無限廣,窗外有藍天 微風迎客,軟語伴茶'; add: 'Danish' -> 'Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon.'; add: 'Dutch' -> 'Pa''s wijze lynx bezag vroom het fikse aquaduct'; add: 'Esperanto' -> 'Eĥoŝanĝo ĉiuĵaŭde'; add: 'Estonian' -> 'See väike mölder jõuab rongile hüpata'; add: 'Finnish' -> 'Viekas kettu punaturkki laiskan koiran takaa kurkki'; add: 'French' -> 'Voix ambiguë d''un cœur qui au zéphyr préfère les jattes de kiwis'; add: 'German' -> 'Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich'; add: 'Greek' -> 'Θέλει αρετή και τόλμη η ελευθερία. (Ανδρέας Κάλβος)'; add: 'Hebrew' -> 'דג סקרן שט לו בים זך אך לפתע פגש חבורה נחמדה שצצה כך'; add: 'Hungarian' -> 'Egy hűtlen vejét fülöncsípő, dühös mexikói úr Wesselényinél mázol Quitóban'; add: 'Italian' -> 'Ma la volpe, col suo balzo, ha raggiunto il quieto Fido.'; add: 'Japanese' -> 'いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす'; add: 'Korean' -> '다람쥐 헌 쳇바퀴에 타고파'; add: 'Latvian' -> 'Sarkanās jūrascūciņas peld pa jūru.'; add: 'Norwegian' -> 'En god stil må først og fremst være klar. Den må være passende. Aristoteles.'; add: 'Portugese' -> 'A rápida raposa castanha salta por cima do cão lento.'; add: 'Brazilian portugese' -> 'A ligeira raposa marrom ataca o cão preguiçoso'; add: 'Polish' -> 'Pchnąć w tę łódź jeża lub ośm skrzyń fig'; add: 'Romanian' -> 'Agera vulpe maronie sare peste câinele cel leneş'; add: 'Russian' -> 'Съешь ещё этих мягких французских булок да выпей же чаю'; add: 'Serbian (cyrillic)' -> 'Чешће цeђење мрeжастим џаком побољшава фертилизацију генских хибрида.'; add: 'Serbian (latin)' -> 'Češće ceđenje mrežastim džakom poboljšava fertilizaciju genskih hibrida.'; add: 'Slovak' -> 'Kŕdeľ šťastných ďatľov učí pri ústí Váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso.'; add: 'Slovene' -> 'V kožuščku hudobnega fanta stopiclja mizar in kliče 0619872345.'; add: 'Spanish' -> 'El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.'; add: 'Swedish' -> 'Flygande bäckasiner söka hwila på mjuka tuvor'; add: 'Thai' -> 'เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะ ๆ จ๋า ๆ น่าฟังเอยฯ'; add: 'Turkish' -> 'Pijamalı hasta, yağız şoföre çabucak güvendi'; yourself!]lang[(2798)0! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'HenrikSperreJohansen 9/5/2013 15:25' prior: 22417872! previewText "Answer the preview text based on current font." | sample i c f | f := model selectedFont. f isNil ifTrue: [ ^'' ]. sample := String new writeStream. f isSymbolFont ifFalse: [|pangram| pangram := self selectedPangram. sample nextPutAll: pangram ;cr; nextPutAll: pangram asUppercase ; cr ]. i := 0. 33 to: 255 do: [:ci | sample nextPut: (c:=Character value: ci). i := i + 1. (('@Z`z' includes:c) or: [ i = 30 ]) ifTrue: [ i :=0. sample cr ] ]. ^sample contents! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'HenrikSperreJohansen 9/5/2013 15:53'! selectedPangram ^selectedPangram ifNil: [ self pangrams first value ]! ! !FontChooser methodsFor: 'accessing' stamp: 'HenrikSperreJohansen 9/5/2013 16:19' prior: 22405461! pointSize self halt. ^pointSize ifNil: [pointSize := 10.0]! ! !FontChooser methodsFor: 'selected' stamp: 'HenrikSperreJohansen 9/5/2013 16:19' prior: 22409035! selectedFontIndex | font textStyleName family | selectedFontIndex ifNotNil: [^selectedFontIndex]. selectedFontIndex := 0. font := (getSelector isSymbol and:[target notNil]) ifTrue:[target perform: getSelector] ifFalse:[getSelector]. self setStyleValuesFrom: font. (font isKindOf: AbstractFont) ifTrue:[ pointSize := font pointSize. textStyleName := font textStyleName. family := self fontList detect:[:f | f familyName = textStyleName] ifNone:[]. selectedFontIndex := self fontList indexOf: family ifAbsent:[0]]. self selectedFontIndex: selectedFontIndex. ^selectedFontIndex! ! !FontChooser methodsFor: 'selected' stamp: 'HenrikSperreJohansen 9/5/2013 16:34' prior: 22411477! selectedPointSizeIndex ^self pointSizeList indexOf: (pointSize reduce asString padLeftTo: 3)! ! !RPackageOrganizerTest commentStamp: 'StephaneDucasse 4/24/2011 17:10' prior: 67135552! RPackageOrganizerTest tests the behavior of PackageOrganizer. Note that it does not rely on announcement to be emitted to maintain invariants. Therefore the new created PackageOrganizer is not registered to listen to event. ! !RPackageOrganizerTest methodsFor: 'tests extending' stamp: 'FernandoOlivero 9/4/2013 16:17' prior: 32033782! pointRectangleInGraphElement | p | p := self packageClass named: #GraphElement. p addClassDefinition: Point. p addMethod: Point>>#x. p addMethod: Point>>#rotateBy:about:. p addClassDefinition: Rectangle. p addMethod: self quadrangleClass >>#intersect:. ^ p! ! !RPackageOrganizerTest methodsFor: 'utility' stamp: 'FernandoOlivero 9/4/2013 16:18'! quadrangleClass ^ 'QuadrangleForTesting' asClass ! ! !RPackageOrganizerTest methodsFor: 'setup' stamp: 'FernandoOlivero 9/4/2013 16:25' prior: 32024814! setUp super setUp. createdClasses := OrderedCollection new. createdPackages := OrderedCollection new. packageOrganizer := self packageOrganizerClass basicNew initialize. packageOrganizer debuggingName: 'For PackageOrganizerTest'. previousAuthor := Author fullName ifNil: [Author fullName: 'RPackage']. self createNewClassNamed: 'QuadrangleForTesting' inCategory: self class category. self quadrangleClass compileSilently: 'intersect:aPoint ^ false'.! ! !RPackageOrganizerTest methodsFor: 'setup' stamp: 'FernandoOlivero 9/4/2013 16:21' prior: 32025193! tearDown Author fullName: previousAuthor. (createdClasses reject: [:c| c isObsolete]) do: [:cls| "(self packageClass organizer includesClass: cls) ifTrue: [self packageOrganizer unregisterClass: cls.]." cls removeFromSystem ]. "createdPackages do: [:each | self packageOrganizer unregisterPackage: each]" ! ! !RPackageOrganizerTest methodsFor: 'tests extending' stamp: 'FernandoOlivero 9/4/2013 16:16' prior: 32034555! testRegistrationExtendingPackages "self debug: #testRegistrationExtendingPackages" | p | self assert: (self packageOrganizer extendingPackagesOf: self quadrangleClass) isEmpty. p := self pointRectangleInGraphElement. (self packageOrganizer registerExtendingPackage: p forClass: self quadrangleClass). self deny: (self packageOrganizer extendingPackagesOf: self quadrangleClass) isEmpty. self assert: (self packageOrganizer extendingPackagesOf: self quadrangleClass) anyOne name = #GraphElement. ! ! !RPackageOrganizerTest methodsFor: 'tests extending' stamp: 'FernandoOlivero 9/4/2013 16:25' prior: 32035124! testUnregistrationExtendingPackages "self debug: #testUnregistrationExtendingPackages" | p | p := self pointRectangleInGraphElement. self packageOrganizer registerExtendingPackage: p forClass: self quadrangleClass. self deny: (self packageOrganizer extendingPackagesOf: self quadrangleClass) isEmpty. self assert: (self packageOrganizer extendingPackagesOf: self quadrangleClass) anyOne name = #GraphElement. self packageOrganizer unregisterExtendingPackage: p forClass: self quadrangleClass. self assert: (self packageOrganizer extendingPackagesOf: self quadrangleClass) isEmpty. ! ! Quadrangle removeSelector: #translateBy:! Quadrangle removeSelector: #setWidth:! Quadrangle removeSelector: #setRight:! Quadrangle removeSelector: #setRegion:borderWidth:borderColor:insideColor:! Quadrangle removeSelector: #setLeft:! Quadrangle removeSelector: #setHeight:! Quadrangle removeSelector: #scaleBy:! Quadrangle removeSelector: #region:! Quadrangle removeSelector: #region! Quadrangle removeSelector: #intersect:! Quadrangle removeSelector: #insideColor:! Quadrangle removeSelector: #insideColor! Quadrangle removeSelector: #inside! Quadrangle removeSelector: #initialize! Quadrangle removeSelector: #borderWidthLeft:right:top:bottom:! Quadrangle removeSelector: #borderWidth:! Quadrangle removeSelector: #borderWidth! Quadrangle removeSelector: #borderColor:! Quadrangle removeSelector: #borderColor! Quadrangle removeSelector: #alignedTo:! Quadrangle removeSelector: #align:with:! Quadrangle class removeSelector: #region:borderWidth:borderColor:insideColor:! Quadrangle class removeSelector: #origin:corner:! Smalltalk globals removeClassNamed: #Quadrangle! "FreeType"! "Graphics-Primitives"! "RPackage-Tests"! ----End fileIn----! ----QUIT----an Array(6 September 2013 12:57:58 pm) Pharo.image priorSource: 16792612! ----STARTUP----an Array(6 September 2013 1:04:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 September 2013 1:04:02 pm) Pharo-30373.image priorSource: 16817810! ----STARTUP----an Array(6 September 2013 1:55:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/6/2013 13:40' prior: 67124568! commentForCurrentUpdate ^ '11433 Move ClassVars in Color referring to named colors to a color cache https://pharo.fogbugz.com/f/cases/11433 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/6/2013 13:41'! script166 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.111.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.856.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/6/2013 13:41'! update30374 "self new update30374" self withUpdateLog: '11433 Move ClassVars in Color referring to named colors to a color cache https://pharo.fogbugz.com/f/cases/11433 '. self loadTogether: self script166 merge: false. Color initialize. self flushCaches. ! ! "ScriptLoader30"! !Color commentStamp: '' prior: 42181372! This class represents abstract color, regardless of the depth of bitmap it will be shown in. At the very last moment a Color is converted to a pixelValue that depends on the depth of the actual Bitmap inside the Form it will be used with. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. (See comment in BitBlt.) To change the depth of the Display and set how many colors you can see, execute: (Display newDepth: 8). (See comment in DisplayMedium) Color is represented as the amount of light in red, green, and blue. White is (1.0, 1.0, 1.0) and black is (0, 0, 0). Pure red is (1.0, 0, 0). These colors are "additive". Think of Color's instance variables as: r amount of red, a Float between 0.0 and 1.0. g amount of green, a Float between 0.0 and 1.0. b amount of blue, a Float between 0.0 and 1.0. (But, in fact, the three are encoded as values from 0 to 1023 and combined in a single integer, rgb. The user does not need to know this.) Many colors are named. You find a color by name by sending a message to class Color, for example (Color lightBlue). Also, (Color red: 0.2 green: 0.6 blue: 1.0) or (Color r: 0.2 g: 0.6 b: 1.0) creates a color. (see below) A color is essentially immutable. Once you set red, green, and blue, you cannot change them. Instead, create a new Color and use it. Applications such as contour maps and bar graphs will want to display one of a set of shades based on a number. Convert the range of this number to an integer from 1 to N. Then call (Color green lightShades: N) to get an Array of colors from white to green. Use the Array messages at:, atPin:, or atWrap: to pull out the correct color from the array. atPin: gives the first (or last) color if the index is out of range. atWrap: wraps around to the other end if the index is out of range. Here are some fun things to run in when your screen has color: Pen new mandala: 30 diameter: Display height-100. Pen new web "Draw with the mouse, opt-click to end" Display fillWhite. Pen new hilberts: 5. Form toothpaste: 30 "Draw with mouse, opt-click to end" You might also want to try the comment in Form>class>examples>tinyText... Messages: mixed: proportion with: aColor Answer this color mixed with the given color additively. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. + add two colors - subtract two colors * multiply the values of r, g, b by a number or an Array of factors. ((Color named: #white) * 0.3) gives a darkish gray. (aColor * #(0 0 0.9)) gives a color with slightly less blue. / divide a color by a factor or an array of three factors. errorForDepth: d How close the nearest color at this depth is to this abstract color. Sum of the squares of the RGB differences, square rooted and normalized to 1.0. Multiply by 100 to get percent. hue Returns the hue of the color. On a wheel from 0 to 360 with pure red at 0 and again at 360. saturation Returns the saturation of the color. 0.0 to 1.0 brightness Returns the brightness of the color. 0.0 to 1.0 name Look to see if this Color has a name. display Show a swatch of this color tracking the cursor. lightShades: thisMany An array of thisMany colors from white to the receiver. darkShades: thisMany An array of thisMany colors from black to the receiver. Array is of length num. mix: color2 shades: thisMany An array of thisMany colors from the receiver to color2. wheel: thisMany An array of thisMany colors around the color wheel starting and ending at the receiver. pixelValueForDepth: d Returns the bits that appear be in a Bitmap of this depth for this color. Represents the nearest available color at this depth. Normal users do not need to know which pixelValue is used for which color. Messages to Class Color. red: r green: g blue: b Return a color with the given r, g, and b components. r: g: b: Same as above, for fast typing. hue: h saturation: s brightness: b Create a color with the given hue, saturation, and brightness. pink blue red ... Many colors have messages that return an instance of Color. canUnderstand: #brown Returns true if #brown is a defined color. names An OrderedCollection of the names of the colors. named: #notAllThatGray put: aColor Add a new color to the list and create an access message and a class variable for it. fromUser Shows the palette of colors available at this display depth. Click anywhere to return the color you clicked on. hotColdShades: thisMany An array of thisMany colors showing temperature from blue to red to white hot. stdColorsForDepth: d An Array of colors available at this depth. For 16 bit and 32 bits, returns a ColorGenerator. It responds to at: with a Color for that index, simulating a very big Array. colorFromPixelValue: value depth: d Returns a Color whose bit pattern (inside a Bitmap) at this depth is the number specified. Normal users do not need to use this. (See also comments in these classes: Form, Bitmap, BitBlt, Pattern, MaskedForm.)! !MethodFinder methodsFor: 'initialize' stamp: 'FernandoOlivero 8/23/2013 11:21' prior: 49674824! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !TextAction methodsFor: 'styling' stamp: 'FernandoOlivero 8/24/2013 22:31' prior: 52505147! emphasizeScanner: scanner "Set the emphasis for text display" scanner textColor: Color purple! ! !Color commentStamp: '' prior: 67160744! This class represents abstract color, regardless of the depth of bitmap it will be shown in. At the very last moment a Color is converted to a pixelValue that depends on the depth of the actual Bitmap inside the Form it will be used with. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. (See comment in BitBlt.) To change the depth of the Display and set how many colors you can see, execute: (Display newDepth: 8). (See comment in DisplayMedium) Color is represented as the amount of light in red, green, and blue. White is (1.0, 1.0, 1.0) and black is (0, 0, 0). Pure red is (1.0, 0, 0). These colors are "additive". Think of Color's instance variables as: r amount of red, a Float between 0.0 and 1.0. g amount of green, a Float between 0.0 and 1.0. b amount of blue, a Float between 0.0 and 1.0. (But, in fact, the three are encoded as values from 0 to 1023 and combined in a single integer, rgb. The user does not need to know this.) Many colors are named. You find a color by name by sending a message to class Color, for example (Color lightBlue). Also, (Color red: 0.2 green: 0.6 blue: 1.0) or (Color r: 0.2 g: 0.6 b: 1.0) creates a color. (see below) A color is essentially immutable. Once you set red, green, and blue, you cannot change them. Instead, create a new Color and use it. Applications such as contour maps and bar graphs will want to display one of a set of shades based on a number. Convert the range of this number to an integer from 1 to N. Then call (Color green lightShades: N) to get an Array of colors from white to green. Use the Array messages at:, atPin:, or atWrap: to pull out the correct color from the array. atPin: gives the first (or last) color if the index is out of range. atWrap: wraps around to the other end if the index is out of range. Here are some fun things to run in when your screen has color: Pen new mandala: 30 diameter: Display height-100. Pen new web "Draw with the mouse, opt-click to end" Display fillWhite. Pen new hilberts: 5. Form toothpaste: 30 "Draw with mouse, opt-click to end" You might also want to try the comment in Form>class>examples>tinyText... Messages: mixed: proportion with: aColor Answer this color mixed with the given color additively. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. + add two colors - subtract two colors * multiply the values of r, g, b by a number or an Array of factors. ((Color named: #white) * 0.3) gives a darkish gray. (aColor * #(0 0 0.9)) gives a color with slightly less blue. / divide a color by a factor or an array of three factors. errorForDepth: d How close the nearest color at this depth is to this abstract color. Sum of the squares of the RGB differences, square rooted and normalized to 1.0. Multiply by 100 to get percent. hue Returns the hue of the color. On a wheel from 0 to 360 with pure red at 0 and again at 360. saturation Returns the saturation of the color. 0.0 to 1.0 brightness Returns the brightness of the color. 0.0 to 1.0 name Look to see if this Color has a name. display Show a swatch of this color tracking the cursor. lightShades: thisMany An array of thisMany colors from white to the receiver. darkShades: thisMany An array of thisMany colors from black to the receiver. Array is of length num. mix: color2 shades: thisMany An array of thisMany colors from the receiver to color2. wheel: thisMany An array of thisMany colors around the color wheel starting and ending at the receiver. pixelValueForDepth: d Returns the bits that appear be in a Bitmap of this depth for this color. Represents the nearest available color at this depth. Normal users do not need to know which pixelValue is used for which color. Messages to Class Color. red: r green: g blue: b Return a color with the given r, g, and b components. r: g: b: Same as above, for fast typing. hue: h saturation: s brightness: b Create a color with the given hue, saturation, and brightness. pink blue red ... Many colors have messages that return an instance of Color. canUnderstand: #brown Returns true if #brown is a defined color. names An OrderedCollection of the names of the colors. named: #notAllThatGray put: aColor Add a new color to the list and create an access message and a class variable for it. fromUser Shows the palette of colors available at this display depth. Click anywhere to return the color you clicked on. hotColdShades: thisMany An array of thisMany colors showing temperature from blue to red to white hot. stdColorsForDepth: d An Array of colors available at this depth. For 16 bit and 32 bits, returns a ColorGenerator. It responds to at: with a Color for that index, simulating a very big Array. colorFromPixelValue: value depth: d Returns a Color whose bit pattern (inside a Bitmap) at this depth is the number specified. Normal users do not need to use this. (See also comments in these classes: Form, Bitmap, BitBlt, Pattern, MaskedForm.)! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:34' prior: 19646678! black ^ ColorRegistry at: #black! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19646737! blue ^ ColorRegistry at: #blue! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19646794! brown ^ ColorRegistry at: #brown! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19646853! cyan ^ ColorRegistry at: #cyan! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19646910! darkGray ^ ColorRegistry at: #darkGray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors ^{ #black. 0. 0. 0. #veryVeryDarkGray. 0.125. 0.125. 0.125. #veryDarkGray. 0.25. 0.25. 0.25. #darkGray. 0.375. 0.375. 0.375. #gray. 0.5. 0.5. 0.5. #lightGray. 0.625. 0.625. 0.625. #veryLightGray. 0.75. 0.75. 0.75. #veryVeryLightGray. 0.875. 0.875. 0.875. #white. 1.0. 1.0. 1.0. } ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors2 ^{ #red. 1.0. 0. 0. #yellow. 1.0. 1.0. 0. #green. 0. 1.0. 0. #cyan. 0. 1.0. 1.0. #blue. 0. 0. 1.0. #magenta. 1.0. 0. 1.0. #brown. 0.6. 0.2. 0. #orange. 1.0. 0.6. 0. #lightRed. 1.0. 0.8. 0.8. } ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors3 ^{ #lightYellow. 1.0. 1.0. 0.8. #lightGreen. 0.8. 1.0. 0.6. #lightCyan. 0.4. 1.0. 1.0. #lightBlue. 0.8. 1.0. 1.0. #lightMagenta. 1.0. 0.8. 1.0. #lightBrown. 1.0. 0.6. 0.2. #lightOrange. 1.0. 0.8. 0.4. #pink. 1.0. 0.752899. 0.796118. #purple. 0.4. 0.0. 0.6. #tan. 0.8. 0.8. 0.5. #veryPaleRed. 1.0. 0.948. 0.948. #paleYellow. 1.0. 1.0. 0.85. #paleTan. 0.921. 0.878. 0.78. }! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors4 ^{ #paleRed. 1.0. 0.901. 0.901. #palePeach. 1.0. 0.929. 0.835. #paleOrange. 0.991. 0.929. 0.843. #paleMagenta. 1.0. 0.901. 1.0. #paleGreen. 0.874. 1.0. 0.835. #paleBuff. 0.995. 0.979. 0.921. #paleBlue. 0.87. 0.976. 0.995. }! ! !Color class methodsFor: 'instance creation' stamp: 'FernandoOlivero 8/24/2013 20:01' prior: 19643894! fromString: aString "for HTML color spec: #FFCCAA or white/black" "Color fromString: '#FFCCAA'. Color fromString: 'orange'" | aColorHex namedColor | aString isEmptyOrNil ifTrue: [ ^self white ]. aColorHex := aString first = $# ifTrue: [ aString allButFirst ] ifFalse: [ aString ]. "try to match aColorHex with known named colors, case insensitive." namedColor := self registeredColorNames detect:[:each| each sameAs: aColorHex ]. namedColor notNil ifTrue:[ ^ namedColor ]. (aColorHex size = 6 and: [ aColorHex allSatisfy: [ :character | '0123456789ABCDEFabcdef' includes: character ] ]) ifTrue: [ ^self fromHexString: aColorHex ] ifFalse: [ ^self white ]! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19646975! gray ^ ColorRegistry at: #gray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19647032! green ^ ColorRegistry at: #green! ! !Color class methodsFor: 'initialization' stamp: 'FernandoOlivero 8/24/2013 19:28' prior: 19632203! initialize "Color initialize Details: Externally, the red, green, and blue components of color are floats in the range [0.0..1.0]. Internally, they are represented as integers in the range [0..ComponentMask] packing into a small integer to save space and to allow fast hashing and equality testing. For a general description of color representations for computer graphics, including the relationship between the RGB and HSV color models used here, see Chapter 17 of Foley and van Dam, Fundamentals of Interactive Computer Graphics, Addison-Wesley, 1982." ComponentMask := 1023. HalfComponentMask := 512. "used to round up in integer calculations" ComponentMax := 1023.0. "a Float used to normalize components" RedShift := 20. GreenShift := 10. BlueShift := 0. RandomStream := Random new. self initializeIndexedColors. self initializeColorRegistry. self initializeGrayToIndexMap. self initializeHighLights.! ! !Color class methodsFor: 'initialization' stamp: 'FernandoOlivero 8/28/2013 22:44'! initializeColorRegistry | values| ColorRegistry := IdentityDictionary new. values := self defaultColors, self defaultColors2, self defaultColors3, self defaultColors4. 1 to: values size by: #(name r g b) size do:[:index| | colorName red green blue color | colorName := values at: index. red := values at: index + 1. green := values at: index + 2. blue := values at: index +3. color := self r: red g: green b: blue . self registerColor: color named: colorName ]. self registerColor: (TranslucentColor new alpha: 0.0) named: #transparent. ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19647091! lightBlue ^ ColorRegistry at: #lightBlue! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19647158! lightBrown ^ ColorRegistry at: #lightBrown! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19648222! lightCyan ^ ColorRegistry at: #lightCyan! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35' prior: 19648289! lightGray ^ ColorRegistry at: #lightGray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648356! lightGreen ^ ColorRegistry at: #lightGreen! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648425! lightMagenta ^ ColorRegistry at: #lightMagenta! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648498! lightOrange ^ ColorRegistry at: #lightOrange! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648569! lightRed ^ ColorRegistry at: #lightRed! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648634! lightYellow ^ ColorRegistry at: #lightYellow! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648705! magenta ^ ColorRegistry at: #magenta! ! !Color class methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 19:30'! named: aColorName ^ ColorRegistry at: aColorName asSymbol ifAbsent: nil ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648768! orange ^ ColorRegistry at: #orange! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648857! paleBlue ^ ColorRegistry at: #paleBlue ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19648976! paleBuff ^ ColorRegistry at: #paleBuff! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649095! paleGreen ^ ColorRegistry at: #paleGreen! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649213! paleMagenta ^ ColorRegistry at: #paleMagenta! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649331! paleOrange ^ ColorRegistry at: #paleOrange! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649454! palePeach ^ ColorRegistry at: #palePeach ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649572! paleRed ^ ColorRegistry at: #paleRed! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649688! paleTan ^ ColorRegistry at: #paleTan! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649806! paleYellow ^ ColorRegistry at: #paleYellow.! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36' prior: 19649935! pink ^ ColorRegistry at: #pink.! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650067! purple ^ ColorRegistry at: #purple! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650150! red ^ ColorRegistry at: #red! ! !Color class methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 19:43'! registerColor: aColor named: aName ColorRegistry at: aName put: aColor. ! ! !Color class methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 20:01'! registeredColorNames ^ ColorRegistry keys collect:#asString ! ! !Color class methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 19:46'! registeredNameOf: aColor | colorName | colorName := #unnamed. ColorRegistry keysAndValuesDo: [:key :value| value = aColor ifTrue:[ colorName := key ] ]. ^ colorName ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:47' prior: 19650568! tan ^ ColorRegistry at: #tan! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:57' prior: 19650648! transparent ^ ColorRegistry at: #transparent ! ! !Color class methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 19:33'! unregisterColorNamed: aName ColorRegistry removeKey: aName ifAbsent: nil! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650719! veryDarkGray ^ ColorRegistry at: #veryDarkGray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650792! veryLightGray ^ ColorRegistry at: #veryLightGray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650895! veryPaleRed ^ ColorRegistry at: #veryPaleRed! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19650987! veryVeryDarkGray ^ ColorRegistry at: #veryVeryDarkGray ! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19651068! veryVeryLightGray ^ ColorRegistry at: #veryVeryLightGray! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19651151! white ^ ColorRegistry at: #white! ! !Color class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37' prior: 19651210! yellow ^ ColorRegistry at: #yellow! ! !Color methodsFor: 'accesing' stamp: '' prior: 19584912! alpha "Return the opacity ('alpha') value of opaque so that normal colors can be compared to TransparentColors." ^ 1.0 ! ! !Color methodsFor: 'accesing' stamp: '' prior: 19585068! blue "Return the blue component of this color, a float in the range [0.0..1.0]." ^ self privateBlue asFloat / ComponentMax! ! !Color methodsFor: 'accesing' stamp: '' prior: 19585227! brightness "Return the brightness of this color, a float in the range [0.0..1.0]." ^ ((self privateRed max: self privateGreen) max: self privateBlue) asFloat / ComponentMax! ! !Color methodsFor: 'conversions' stamp: 'FernandoOlivero 8/23/2013 11:19' prior: 19591821! closestPixelValue4 "Return the nearest approximation to this color for a 4-bit deep Form." "fast special cases" | bIndex | rgb = 0 ifTrue: [ ^ 1 ]. "black" rgb = 1073741823 ifTrue: [ ^ 2 ]. "opaque white" rgb = self class red privateRGB ifTrue: [ ^ 4 ]. rgb = self class green privateRGB ifTrue: [ ^ 5 ]. rgb = self class blue privateRGB ifTrue: [ ^ 6 ]. rgb = self class cyan privateRGB ifTrue: [ ^ 7 ]. rgb = self class yellow privateRGB ifTrue: [ ^ 8 ]. rgb = self class magenta privateRGB ifTrue: [ ^ 9 ]. bIndex := (self luminance * 8.0) rounded. "bIndex in [0..8]" ^ #(1 10 11 12 3 13 14 15 2 ) at: bIndex + 1 "black" "1/8 gray" "2/8 gray" "3/8 gray" "4/8 gray" "5/8 gray" "6/8 gray" "7/8 gray" "opaque white"! ! !Color methodsFor: 'accesing' stamp: '' prior: 19585446! green "Return the green component of this color, a float in the range [0.0..1.0]." ^ self privateGreen asFloat / ComponentMax! ! !Color methodsFor: 'accesing' stamp: 'lr 7/4/2009 10:42' prior: 19585635! hue "Return the hue of this color, an angle in the range [0.0..360.0]." | r g b max min span h | r := self privateRed. g := self privateGreen. b := self privateBlue. max := (r max: g) max: b. min := (r min: g) min: b. span := (max - min) asFloat. span = 0.0 ifTrue: [ ^ 0.0 ]. r = max ifTrue: [ h := (g - b) asFloat / span * 60.0 ] ifFalse: [ g = max ifTrue: [ h := 120.0 + ((b - r) asFloat / span * 60.0) ] ifFalse: [ h := 240.0 + ((r - g) asFloat / span * 60.0) ] ]. h < 0.0 ifTrue: [ h := 360.0 + h ]. ^ h! ! !Color methodsFor: 'accesing' stamp: '' prior: 19586207! luminance "Return the luminance of this color, a brightness value weighted by the human eye's color sensitivity." ^ ((299 * self privateRed) + (587 * self privateGreen) + (114 * self privateBlue)) / (1000 * ComponentMax) ! ! !Color methodsFor: 'accesing' stamp: 'FernandoOlivero 8/24/2013 19:46' prior: 19604583! name ^ self class registeredNameOf: self ! ! !Color methodsFor: 'accesing' stamp: '' prior: 19586473! red "Return the red component of this color, a float in the range [0.0..1.0]." ^ self privateRed asFloat / ComponentMax! ! !Color methodsFor: 'accesing' stamp: 'lr 7/4/2009 10:42' prior: 19586656! saturation "Return the saturation of this color, a value between 0.0 and 1.0." | r g b max min | r := self privateRed. g := self privateGreen. b := self privateBlue. max := min := r. g > max ifTrue: [ max := g ]. b > max ifTrue: [ max := b ]. g < min ifTrue: [ min := g ]. b < min ifTrue: [ min := b ]. max = 0 ifTrue: [ ^ 0.0 ] ifFalse: [ ^ (max - min) asFloat / max asFloat ]! ! TextAction class removeSelector: #initialize! Color class removeSelector: #strongColors! Color class removeSelector: #named:put:! Color class removeSelector: #lightColors! Color class removeSelector: #initializeNames! Color class removeSelector: #colorNames! "Graphics-Primitives"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(6 September 2013 1:56 pm) Pharo.image priorSource: 16818018! ----STARTUP----an Array(6 September 2013 2:02:01 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 September 2013 2:02:01 pm) Pharo-30374.image priorSource: 16865782! ----STARTUP----an Array(6 September 2013 3:46:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/6/2013 15:45' prior: 67149973! commentForCurrentUpdate ^ '11534 ColorTest is failing https://pharo.fogbugz.com/f/cases/11534'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/6/2013 15:45'! script167 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.14.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.856.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/6/2013 15:45'! update30375 "self new update30375" self withUpdateLog: '11534 ColorTest is failing https://pharo.fogbugz.com/f/cases/11534'. self loadTogether: self script167 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Color class methodsFor: 'instance creation' stamp: 'FernandoOlivero 9/6/2013 15:18' prior: 67185795! fromString: aString "for HTML color spec: #FFCCAA or white/black" "Color fromString: '#FFCCAA'. Color fromString: 'orange'" | aColorHex namedColor | aString isEmptyOrNil ifTrue: [ ^self white ]. aColorHex := aString first = $# ifTrue: [ aString allButFirst ] ifFalse: [ aString ]. "try to match aColorHex with known named colors, case insensitive." namedColor := self registeredColorNames detect:[:each| each sameAs: aColorHex ] ifNone: nil . namedColor notNil ifTrue:[ ^ self named: namedColor ]. (aColorHex size = 6 and: [ aColorHex allSatisfy: [ :character | '0123456789ABCDEFabcdef' includes: character ] ]) ifTrue: [ ^self fromHexString: aColorHex ] ifFalse: [ ^self white ]! ! "Graphics-Primitives"! ----End fileIn----! ----QUIT----an Array(6 September 2013 3:46:56 pm) Pharo.image priorSource: 16865986! ----STARTUP----an Array(6 September 2013 3:53:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 September 2013 3:53:02 pm) Pharo-30375.image priorSource: 16877752! ----STARTUP----an Array(8 September 2013 9:37:50 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/8/2013 09:36' prior: 67197941! commentForCurrentUpdate ^ '11285 Handle MCMergeOrLoadWarning in config command line handler https://pharo.fogbugz.com/f/cases/11285 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/8/2013 09:36'! script168 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1594.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.857.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.86.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/8/2013 09:36'! update30376 "self new update30376" self withUpdateLog: '11285 Handle MCMergeOrLoadWarning in config command line handler https://pharo.fogbugz.com/f/cases/11285 '. self loadTogether: self script168 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 9/4/2013 16:16' prior: 34615265! defaultRepositoryUrl ^ MetacelloConfigurationBrowserPane pharoDistributionRepository! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/4/2013 16:09'! handleMergeConflictDuring: aLoadBlock aLoadBlock on: MCMergeOrLoadWarning do: [ :mergeConflict | mergeConflict merge ]! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/4/2013 16:08' prior: 20078478! installVersion: aVersionName | metacelloVersion | self inform: 'Installing ', self configurationName, ' ', aVersionName. metacelloVersion := (self metacelloVersion: aVersionName). self handleMergeConflictDuring: [ (self hasOption: 'group') ifTrue: [ metacelloVersion load: (self optionAt: 'group') ] ifFalse: [ metacelloVersion load ]]. Smalltalk snapshot: true andQuit: true.! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/4/2013 16:09'! cancel ^ self return: nil! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/4/2013 16:09'! load ^ self return: true! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/4/2013 16:09'! merge ^ self return: false! ! "ConfigurationCommandLineHandler-Core"! "Monticello"! ----End fileIn----! ----QUIT----an Array(8 September 2013 9:37:59 am) Pharo.image priorSource: 16877959! ----STARTUP----an Array(8 September 2013 9:45:07 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 9:45:07 am) Pharo-30376.image priorSource: 16890285! ----STARTUP----an Array(8 September 2013 10:58:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/8/2013 10:56' prior: 67209914! commentForCurrentUpdate ^ '11520 Give Job its own announcer, no longer use the SystemAnnouncer https://pharo.fogbugz.com/f/cases/11520 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/8/2013 10:56'! script169 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1596.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.857.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.531.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.899.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/8/2013 10:56'! update30377 "self new update30377" SystemProgressMorph disable. SystemAnnouncer uniqueInstance unsubscribe: SystemProgressMorph. self withUpdateLog: '11520 Give Job its own announcer, no longer use the SystemAnnouncer https://pharo.fogbugz.com/f/cases/11520 '. self loadTogether: self script169 merge: false. SystemProgressMorph enable. self flushCaches. ! ! "ScriptLoader30"! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !ProgressBarMorph commentStamp: '' prior: 43365870! Instances of this morph get used by SystemProgressMorph or a JobProgressBar to display a bar (i.e., the rectangular part of a progress bar). Here is an example of how to use it. | p | p := ProgressBarMorph from: 0 to: 200. p extent: 200@20. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 10) wait ]. p delete ] fork | p | p := ProgressBarMorph from: 0 to: 200. p extent: 600@7. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 5) wait ]. p delete ] fork! !Job commentStamp: '' prior: 42364306! A Job is a task to run and potentially notified to the user. [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: (0.1 * each); title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! !SystemProgressMorph class methodsFor: 'enabling/disabling' stamp: 'StephanEggermont 9/3/2013 16:01' prior: 51644943! disable Job jobAnnouncer unsubscribe: self.! ! !SystemProgressMorph class methodsFor: 'enabling/disabling' stamp: 'StephanEggermont 9/3/2013 16:00' prior: 51645106! enable Job jobAnnouncer on: JobStart send: #startJob: to: self. Job jobAnnouncer on: JobEnd send: #endJob: to: self. Job jobAnnouncer on: JobChange send: #updateJob: to: self. ! ! !ProgressBarMorph commentStamp: '' prior: 67234386! Instances of this morph get used by SystemProgressMorph or a JobProgressBar to display a bar (i.e., the rectangular part of a progress bar). Here is an example of how to use it. | p | p := ProgressBarMorph from: 0 to: 200. p extent: 200@20. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 10) wait ]. p delete ] fork | p | p := ProgressBarMorph from: 0 to: 200. p extent: 600@7. p openInWorld. [ (1 to: 200) do: [ :i | p value: i. (Delay forMilliseconds: 5) wait ]. p delete ] fork! !ProgressBarMorph methodsFor: 'drawing' stamp: 'StephanEggermont 9/3/2013 16:09' prior: 30034275! drawOn: aCanvas "Draw the receiver with the fill style for the bar, clipping to the inner bounds." | area | area := self innerBounds. aCanvas fillRectangle: area fillStyle: self fillStyle. value > 0 ifTrue: [ area := area origin extent: cachedWidth @ area height. aCanvas fillRectangle: area fillStyle: self barFillStyle]. self borderStyle frameRectangle: self bounds on: aCanvas ! ! !ProgressBarMorph methodsFor: 'initialization' stamp: 'StephanEggermont 9/3/2013 16:07' prior: 30035152! initialize "Initialize the receiver from the current theme." super initialize. value := 0. start := 0. end := 100. height := DefaultHeight. width := DefaultWidth. cachedWidth := 0. self fillStyle: (self theme progressBarFillStyleFor: self); borderStyle: (self theme progressBarBorderStyleFor: self); barFillStyle: (self theme progressBarProgressFillStyleFor: self); extent: width@height + (2 * self borderWidth).! ! !ProgressBarMorph methodsFor: 'accessing' stamp: 'StephanEggermont 9/3/2013 16:07' prior: 30034150! value: aNumber |testWidth| value := aNumber. testWidth := self completedWidth. testWidth ~= cachedWidth ifTrue: [ cachedWidth := testWidth. self changed]! ! !Job commentStamp: '' prior: 67234961! A Job is a task to run and potentially notified to the user. [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: (0.1 * each); title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! !Job class methodsFor: 'announcing' stamp: 'StephanEggermont 9/3/2013 15:56'! jobAnnouncer ^jobAnnouncer ifNil: [ jobAnnouncer := Announcer new ]! ! !Job methodsFor: 'accessing' stamp: 'StephanEggermont 9/3/2013 15:57' prior: 24067141! announce: anAnnouncementClass | announcement | announcement := anAnnouncementClass on: self. self announcer announce: announcement.! ! !Job methodsFor: 'progress' stamp: 'StephanEggermont 9/3/2013 15:57' prior: 24070648! announcer ^ Job jobAnnouncer! ! "Kernel"! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(8 September 2013 10:58:59 am) Pharo.image priorSource: 16890492! ----STARTUP----an Array(8 September 2013 11:05:07 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 11:05:07 am) Pharo-30377.image priorSource: 16906798! ----STARTUP----an Array(8 September 2013 12:09:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/8/2013 12:06' prior: 67222448! commentForCurrentUpdate ^ '11509 Working on MorphMargin https://pharo.fogbugz.com/f/cases/11509'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/8/2013 12:06'! script170 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-StephaneDucasse.202.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1598.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-StephaneDucasse.673.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.857.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-MarcusDenker.254.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.533.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.901.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.622.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/8/2013 12:06'! update30378 "self new update30378" World closeAllWindowsDiscardingChanges. SystemProgressMorph disable. . self withUpdateLog: '11509 Working on MorphMargin https://pharo.fogbugz.com/f/cases/11509'. self loadTogether: self script170 merge: false. SystemProgressMorph enable. ProgressBarMorph compileAll. self flushCaches. ! ! "ScriptLoader30"! !Margin commentStamp: '' prior: 0! MorphMargin represents a margin (for now of rectangle-based operations). It can be expressed as different objects: - A number. When specified using a number, it sets all the four values to be the same. - A point. When specified as a point, pairs top/bottom and left/right take their values from a point y and x. - Four numbers. They represent all the four directions. - A rectangle. (do not use this version because it is proposed just for migration and it may force you to crea) In the future we may add an API (#margin) for singular margin.! !EditableDropListMorph methodsFor: 'private' stamp: 'StephaneDucasse 9/7/2013 12:37' prior: 21101223! layoutInsetToUse "Answer the layout inset that should be used." ^ 0! ! !GroupboxMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 9/7/2013 12:39' prior: 23082023! newContentMorph "Answer a new content morph" |p| p := PanelMorph new roundedCorners: self roundedCorners; changeTableLayout; layoutInset: 4; cellInset: 8; vResizing: #spaceFill; hResizing: #spaceFill. p borderStyle: (self theme groupPanelBorderStyleFor: p). ^p! ! !Number methodsFor: 'converting' stamp: 'StephaneDucasse 9/7/2013 13:10'! asMargin ^ Margin fromNumber: self.! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 45748751! buttonLabelInsetFor: aButton "Answer the inset to use for a button's label." |left right| ^aButton wantsRoundedCorners ifTrue: [left := ((aButton roundedCorners includesAnyOf: #(1 2)) ifTrue: [8] ifFalse: [4]). right := ((aButton roundedCorners includesAnyOf: #(3 4)) ifTrue: [8] ifFalse: [4]). Margin left: left top: 2 right: right bottom: 2] ifFalse: [3@2]! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49673569! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^ Margin left: 6 top: 0 right: 0 bottom: 0 ! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49673766! editableDropListMargins "Answer the text margins for an editable drop list for this theme." ^ Margin left: 0 top: 3 right: 2 bottom: 1 ! ! !UIThemeWatery methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 45862646! tabLabelInsetFor: aButton "Answer the inset to use for a tab label." ^ Margin left: 8 top: 2 right: 8 bottom: 2 ! ! !UIThemeVistary methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49674628! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^ Margin left: 1 top: 0 right: 0 bottom: 0! ! !UIThemeVistary methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 54128399! expanderTitleInsetFor: aDropList "Answer the inset to use for expander title layout." ^Margin left: 0 top: 0 right: -1 bottom: 0! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 17276702! newGroupBoxMorph | morph | morph := GroupboxMorph new. morph contentMorph layoutInset: (Margin left: 0 top: 0 right: 0 bottom: 0); cellInset: 0. ^ morph! ! !IdentifierChooserMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 12:39' prior: 48894593! initialize super initialize. self borderWidth: 1. self layoutInset: 0. self changeTableLayout. self hResizing: #shrinkWrap. self vResizing: #shrinkWrap. self color: self defaultBaseColor. ! ! !UITheme methodsFor: 'label-styles' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49695511! configureWindowLabelAreaFrameFor: aWindow "Configure the layout frame for the label area for the given window." |frame windowBorderWidth| aWindow labelArea ifNil: [^ self]. windowBorderWidth := aWindow class borderWidth. aWindow labelArea layoutPolicy: RowLayout new; cellPositioning: #topCenter; hResizing: #spaceFill; wrapCentering: #topLeft; layoutInset: (Margin left: 0 top: windowBorderWidth right: 0 bottom: 1). frame := (0@0 corner: 1@0) asLayoutFrame topOffset: aWindow labelHeight negated. aWindow labelArea layoutFrame: frame! ! !UITheme methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49696132! dropListInsetFor: aDropList "Answer the inset to use for drop-list layout." ^Margin left: 1 top: 0 right: -1 bottom: 0! ! !UITheme methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 49696322! editableDropListMargins "Answer the text margins for an editable drop list for this theme." ^Margin left: 0 top: 1 right: 2 bottom: 1! ! !UITheme methodsFor: 'morph creation' stamp: 'StephaneDucasse 9/7/2013 12:41' prior: 54066004! newToolbarIn: aThemedMorph "Answer a new toolbar." |bar| bar := PanelMorph new changeTableLayout; layoutInset: 0@1; listDirection: #leftToRight; hResizing: #shrinkWrap; vResizing: #shrinkWrap. bar addMorphBack: (self newToolSpacerIn: aThemedMorph); addMorphBack: (self newToolbarHandleIn: aThemedMorph); addMorphBack: (self newToolSpacerIn: aThemedMorph). ^bar! ! !UITheme methodsFor: 'defaults' stamp: 'StephaneDucasse 9/7/2013 13:10' prior: 53961166! tabLabelInsetFor: aButton "Answer the inset to use for a tab label." ^ Margin left: 4 top: 2 right: 4 bottom: 0! ! !Rectangle methodsFor: 'converting' stamp: 'StephaneDucasse 9/7/2013 13:10'! asMargin ^ Margin fromRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 9/7/2013 12:28' prior: 49711224! expandBy: delta "Answer a Rectangle that is outset from the receiver by delta. delta is a Rectangle, Point, or scalar." ^ delta asMargin expandRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 9/7/2013 13:04' prior: 32170718! extendBy: deltaMargin "Answer a Rectangle with the same origin as the receiver, but whose corner is offset by deltaMargin." ^ deltaMargin asMargin extendRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 9/7/2013 11:51' prior: 49693137! insetBy: delta "Answer a Rectangle that is inset from the receiver by delta. delta is a Rectangle, Point, or scalar." ^ delta asMargin insetRectangle: self! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'StephaneDucasse 9/7/2013 12:48' prior: 32174967! outsetBy: deltaMargin "Answer a Rectangle that is outset from the receiver by deltaMargin" self deprecated: 'use expandBy:' on: '9 August 2013' in: 'Pharo30'. ^ self expandBy: deltaMargin. ! ! !TabGroupMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 9/7/2013 12:40' prior: 52210392! newContentMorph "Answer a new content morph" |p| p := PanelMorph new roundedCorners: #(2 3 4); changeTableLayout; layoutInset: 4; cellInset: 8; vResizing: #spaceFill; hResizing: #spaceFill. p borderStyle: (self theme tabPanelBorderStyleFor: self). ^p! ! !PluggableTextFieldMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 13:08' prior: 49712528! textMarginsWidth ^ self textMorph margins asMargin left ! ! !PlainGroupboxMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 12:39' prior: 48906486! initialize "Initialize the receiver." super initialize. self borderStyle: (self theme plainGroupPanelBorderStyleFor: self); changeTableLayout; layoutInset: 4; cellInset: 8; vResizing: #spaceFill; hResizing: #spaceFill! ! !Margin commentStamp: '' prior: 67249747! MorphMargin represents a margin (for now of rectangle-based operations). It can be expressed as different objects: - A number. When specified using a number, it sets all the four values to be the same. - A point. When specified as a point, pairs top/bottom and left/right take their values from a point y and x. - Four numbers. They represent all the four directions. - A rectangle. (do not use this version because it is proposed just for migration and it may force you to crea) In the future we may add an API (#margin) for singular margin.! !Margin class methodsFor: 'instance creation' stamp: 'StephaneDucasse 9/7/2013 09:03'! fromNumber: aNumber "Create a margin whose four values are the same and based on anInteger" ^ self new fromNumber: aNumber; yourself! ! !Margin class methodsFor: 'instance creation' stamp: 'StephaneDucasse 9/7/2013 09:10'! fromPoint: aPoint "Create a margin whose values are based on the point value: top and bottom are y and left right are x." ^ self new fromPoint: aPoint; yourself! ! !Margin class methodsFor: 'will be deprecated' stamp: 'StephaneDucasse 9/7/2013 09:34'! fromRectangle: aRectangle "Create a margin with four values based on aRectangle using exactly top, left, bottom, right semantics. Pay attention that most of the time you should not use this method but prefer top:left:bottom:right:. The reason is that using rectangle may force you to create rectangles with negative extent which is totally wrong and bogus." ^ self new fromRectangle: aRectangle; yourself! ! !Margin class methodsFor: 'instance creation' stamp: 'StephaneDucasse 9/7/2013 11:24'! left: leftNumber top: topNumber right: rightNumber bottom: bottomNumber ^ self new setTop: topNumber left: leftNumber bottom: bottomNumber right: rightNumber ! ! !Margin class methodsFor: 'instance creation' stamp: 'StephaneDucasse 9/7/2013 09:13'! top: topNumber left: leftNumber bottom: bottomNumber right: rightNumber ^ self new setTop: topNumber left: leftNumber bottom: bottomNumber right: rightNumber ! ! !Margin methodsFor: 'converting' stamp: 'StephaneDucasse 9/7/2013 11:26'! asMargin ^ self ! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 09:02'! bottom ^ bottom! ! !Margin methodsFor: 'operations' stamp: 'StephaneDucasse 9/7/2013 10:57'! expandRectangle: aRectangle "Answer a rectangle whose size has been expanded by the receiver which represents each rectangle corner." | l r t b | l := aRectangle left - self left. r :=aRectangle right + self right. t := aRectangle top - self top. b := aRectangle bottom + self bottom. ^ Rectangle origin: l @t extent: ((r - l ) @ (b - t )) ! ! !Margin methodsFor: 'operations' stamp: 'StephaneDucasse 9/7/2013 12:55'! extendRectangle: aRectangle "Answer a rectangle whose size has been expanded (without changing its origin) by the receiver which represents each rectangle corner." ^ Rectangle origin: aRectangle origin corner: aRectangle corner + self rightBottom ! ! !Margin methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 08:58'! fromNumber: anInteger self setTop: anInteger left: anInteger bottom: anInteger right: anInteger! ! !Margin methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 09:08'! fromPoint: aPoint self setTop: aPoint y left: aPoint x bottom: aPoint y right: aPoint x! ! !Margin methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 09:32'! fromRectangle: aRectangle "Pay attention do not use this method but prefer top:left:bottom:right:" self setTop: aRectangle top left: aRectangle left bottom: aRectangle bottom right: aRectangle right! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 11:37'! height ^ self bottom - self top.! ! !Margin methodsFor: 'initialization' stamp: 'StephaneDucasse 9/7/2013 09:01'! initialize super initialize. self setTop: 0 left: 0 bottom: 0 right: 0 ! ! !Margin methodsFor: 'operations' stamp: 'StephaneDucasse 9/7/2013 10:57'! insetRectangle: aRectangle "Answer a rectangle whose size has been reduced by the receiver. The limitation is that since a rectangle topleft is always less than its bottomright you may have a some cases that are not possible to express. For that you should use a margin object instead of a rectangle." | l r t b| l := aRectangle left + self left. r :=aRectangle right - self right. t := aRectangle top + self top. b := aRectangle bottom - self bottom. ^ Rectangle origin: l @t extent: (r - l @ (b - t )) ! ! !Margin methodsFor: 'testing' stamp: 'StephaneDucasse 9/7/2013 10:29'! isZero ^ (0 = top) and: [ (0 = left) and: [ (0 = right) and: [ 0 = bottom]]]! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 09:02'! left ^ left! ! !Margin methodsFor: 'printing' stamp: 'StephaneDucasse 9/7/2013 09:18'! printOn: aStream aStream nextPutAll: 'MorphMargin'; nextPutAll: ' top: '; nextPutAll: top printString; nextPutAll: ' left: '; nextPutAll: left printString; nextPutAll: ' bottom: '; nextPutAll: bottom printString; nextPutAll: ' right: '; nextPutAll: right printString. ! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 09:02'! right ^ right! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 12:55'! rightBottom ^ right @ bottom! ! !Margin methodsFor: 'private' stamp: 'StephaneDucasse 9/7/2013 09:00'! setTop: topNumber left: leftNumber bottom: bottomNumber right: rightNumber top := topNumber. left := leftNumber. bottom := bottomNumber. right := rightNumber.! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 09:02'! top ^ top! ! !Margin methodsFor: 'accessing' stamp: 'StephaneDucasse 9/7/2013 11:37'! width ^ self right - self left.! ! !Point methodsFor: 'converting' stamp: 'StephaneDucasse 9/7/2013 13:10'! asMargin ^ Margin fromPoint: self.! ! PointPair removeSelector: #printOn:! PointPair removeSelector: #point2:! PointPair removeSelector: #point2! PointPair removeSelector: #point1:! PointPair removeSelector: #point1! PointPair removeSelector: #isZero! PointPair removeSelector: #insetRectangle:! PointPair removeSelector: #expandRectangle:! PointPair class removeSelector: #point1:point2:! Smalltalk globals removeClassNamed: #PointPair! Rectangle removeSelector: #insetRectangle:! Rectangle removeSelector: #expandRectangle:! Number removeSelector: #insetRectangle:! Number removeSelector: #expandRectangle:! Point removeSelector: #pair:! Point removeSelector: #insetRectangle:! Point removeSelector: #expandRectangle:! "Kernel"! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(8 September 2013 12:09:57 pm) Pharo.image priorSource: 16907007! ----STARTUP----an Array(8 September 2013 12:16:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 12:16:08 pm) Pharo-30378.image priorSource: 16932107! ----STARTUP----an Array(8 September 2013 2:33:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/8/2013 14:29' prior: 67238964! commentForCurrentUpdate ^ '11540 Monticello unique names should be calculated in destination repository, not all https://pharo.fogbugz.com/f/cases/11540 '! ! !ScriptLoader methodsFor: 'elementary steps' stamp: 'EstebanLorenzano 9/8/2013 11:03' prior: 32739964! saveLatestScriptLoaderToHome "self new saveLatestScriptLoaderToHome" | man r | man := self allManagers. r := man select: [:each | 'ScriptLoader*' match: each package name]. self repository storeVersion: (r first newVersionIn: self repository).! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'EstebanLorenzano 9/8/2013 11:53' prior: 32758086! savePackage: aWorkingCopy in: aRepository with: aMessageString " | sc | sc := self new. sc savePackage: (self new workingCopyFromPackageName: 'ScriptLoader11') in: MCCacheRepository uniqueInstance with: 'this is test to automate dirty package saving in cache'" aRepository storeVersion: (aWorkingCopy newVersionWithName: aWorkingCopy uniqueVersionName message: aMessageString in: aRepository)! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/8/2013 14:30'! script171 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.524.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.41.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-EstebanLorenzano.1599.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-EstebanLorenzano.902.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/8/2013 14:30'! update30379 "self new update30379" self withUpdateLog: '11540 Monticello unique names should be calculated in destination repository, not all https://pharo.fogbugz.com/f/cases/11540 '. self loadTogether: self script171 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCMethodDefinitionTest methodsFor: 'mocks' stamp: 'EstebanLorenzano 9/8/2013 11:54' prior: 49943737! override ^ 1! ! !NautilusMonticello methodsFor: 'monticello menus behavior' stamp: 'EstebanLorenzano 9/8/2013 11:02' prior: 28185451! commit: workingCopy in: aRepository | newVersion | newVersion := workingCopy newVersionIn: aRepository. newVersion ifNil: [ ^ self ]. Cursor wait showWhile: [ [ aRepository storeVersion: newVersion. aRepository storeDependencies: newVersion ] ensure: [ (MCVersionInspector new version: newVersion) show ]]! ! !GoferCommit methodsFor: 'running' stamp: 'EstebanLorenzano 9/8/2013 10:58' prior: 46391277! execute: aWorkingCopy | repositories version | repositories := self gofer repositories reject: [ :repository | (aWorkingCopy changesRelativeToRepository: repository) isEmpty ]. repositories isEmpty ifTrue: [ ^ self ]. version := [ aWorkingCopy newVersionIn: (MCRepositoryGroup withRepositories: repositories) ] on: MCVersionNameAndMessageRequest do: [ :notifcation | self message ifNil: [ message := notifcation outer last ]. notifcation resume: (Array with: notifcation suggestedName with: self message) ]. self gofer repositories do: [ :repository | repository storeVersion: version ]! ! !MCWorkingCopy methodsFor: 'operations' stamp: 'EstebanLorenzano 9/8/2013 10:39'! collectDependenciesWithMessage: messageString in: aRepository ^ self requiredPackages collect: [:aPackage | MCVersionDependency package: aPackage info: (aPackage workingCopy currentVersionInfoWithMessage: messageString in: aRepository) ] ! ! !MCWorkingCopy methodsFor: 'accessing' stamp: 'EstebanLorenzano 9/8/2013 11:01' prior: 25143522! currentVersionInfo ^ (self needsSaving or: [ancestry ancestors isEmpty]) ifTrue: [ (self newVersionIn: self repositoryGroup) info] ifFalse: [ancestry ancestors first]! ! !MCWorkingCopy methodsFor: 'accessing' stamp: 'EstebanLorenzano 9/8/2013 10:39'! currentVersionInfoWithMessage: aMessageString in: aRepository ^ (self needsSaving or: [ancestry ancestors isEmpty]) ifTrue: [ (self newVersionWithMessage: aMessageString in: aRepository) info ] ifFalse: [ancestry ancestors first]! ! !MCWorkingCopy methodsFor: 'operations' stamp: 'EstebanLorenzano 9/8/2013 10:37'! newVersionIn: aRepository ^ (self requestVersionNameAndMessageWithSuggestion: (self uniqueVersionNameIn: aRepository)) ifNotNil: [:pair | self newVersionWithName: pair first trimBoth message: pair last in: aRepository ]. ! ! !MCWorkingCopy methodsFor: 'operations' stamp: 'EstebanLorenzano 9/8/2013 11:51'! newVersionWithMessage: aMessageString in: aRepository ^ self newVersionWithName: (self uniqueVersionNameIn: aRepository) message: aMessageString in: aRepository. "^ (self requestVersionNameAndMessageWithSuggestion: self uniqueVersionName) ifNotNil: [:pair | self newVersionWithName: pair first message: aMessageString]. "! ! !MCWorkingCopy methodsFor: 'operations' stamp: 'EstebanLorenzano 9/8/2013 10:39'! newVersionWithName: nameString message: messageString in: aRepository | info deps | info := ancestry infoWithName: nameString message: messageString. ancestry := MCWorkingAncestry new addAncestor: info. self modified: true; modified: false. deps := self collectDependenciesWithMessage: messageString in: aRepository. ^ MCVersion package: package info: info snapshot: package snapshot dependencies: deps! ! !MCWorkingCopy methodsFor: 'private' stamp: 'EstebanLorenzano 9/8/2013 10:36'! uniqueVersionNameIn: aRepository |versionName| counter := nil. 'Creating unique version number' displayProgressFrom: 0 to: 1 during: [ :arg| [versionName := self nextVersionName. aRepository includesVersionNamed: versionName] whileTrue ]. ^ versionName! ! !MCRepositoryGroup class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 9/8/2013 10:57'! withRepositories: aCollection | group | group := self new. aCollection do: [ :each | group addRepository: each ]. ^ group ! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'EstebanLorenzano 9/8/2013 11:00' prior: 24783377! saveChanges | currentRepository workingCopy | currentRepository := repository. "This can be changed elsewhere while processing" workingCopy := MCWorkingCopy forPackage: (MCPackage new name: selectedPackage). (workingCopy newVersionIn: currentRepository) ifNotNil: [:v | (MCVersionInspector new version: v) show. Cursor wait showWhile: [currentRepository storeVersion: v]. MCCacheRepository uniqueInstance cacheAllFileNamesDuring: [currentRepository cacheAllFileNamesDuring: [v allAvailableDependenciesDo: [:dep | (currentRepository includesVersionNamed: dep info name) ifFalse: [currentRepository storeVersion: dep]]]]]! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'EstebanLorenzano 9/8/2013 10:37' prior: 45004297! basicSaveVersionIn: aRepository | newVersion waitForVersion | waitForVersion := Semaphore new. UIManager default defer: [ newVersion := workingCopy newVersionIn: aRepository. waitForVersion signal ]. Processor activeProcess == UIManager default uiProcess ifFalse: [ waitForVersion wait ]. newVersion ifNil: [ ^ self ]. Cursor wait showWhile: [[ self storeVersion: newVersion in: aRepository; storeDependencies: newVersion in: aRepository.] ensure: [ (MCVersionInspector new version: newVersion) show ]]! ! !MetacelloGoferCommit methodsFor: 'running' stamp: 'EstebanLorenzano 9/8/2013 10:58' prior: 25830707! execute: aWorkingCopy | version | version := aWorkingCopy newVersionIn: (MCRepositoryGroup withRepositories: self gofer repositories). self gofer repositories do: [ :repository | repository storeVersion: version ]! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'EstebanLorenzano 9/8/2013 11:02' prior: 25854424! savePackageUsing: repositorySpecs | wc repo repoSpecs newVersion | (wc := self spec workingCopy) == nil ifTrue: [ ^false ]. (wc ancestry ancestors notEmpty and: [ wc modified not]) ifTrue: [ ^false ]. repoSpecs := self spec repositorySpecs notEmpty ifTrue: [ self spec repositorySpecs ] ifFalse: [ repositorySpecs ]. (self spec getFile == nil or: [ wc ancestry ancestors isEmpty ]) ifTrue: [ repo := (self repositoriesFrom: repoSpecs ignoreOverrides: true) first ] ifFalse: [ [ | newer | repo := (self resolveSpec: self spec from: repoSpecs) repository. newer := wc possiblyNewerVersionsIn: repo. newer isEmpty not ifTrue: [ (MetacelloPlatform current confirm: 'CAUTION!! These versions in the repository may be newer:', String cr, newer printString, String cr, 'Do you really want to save this version?') ifFalse: [ ^false ]] ] on: Error do: [:ignored | ^false ] ]. (newVersion := (wc newVersionIn: repo)) == nil ifTrue: [ ^false ]. repo storeVersion: newVersion. ^true! ! !MCWorkingCopyTest methodsFor: 'asserting' stamp: 'EstebanLorenzano 9/8/2013 11:03' prior: 25201436! assertNameWhenSavingTo: aRepository is: aString | name | name := nil. [aRepository storeVersion: (workingCopy newVersionIn: aRepository)] on: MCVersionNameAndMessageRequest do: [:n | name := n suggestedName. n resume: (Array with: name with: '')]. self assert: name = aString! ! !MCWorkingCopyTest methodsFor: 'asserting' stamp: 'EstebanLorenzano 9/8/2013 11:03' prior: 25201787! assertNumberWhenSavingTo: aRepository is: aNumber | name | name := nil. [aRepository storeVersion: (workingCopy newVersionIn: aRepository)] on: MCVersionNameAndMessageRequest do: [:n | name := n suggestedName. n resume: (Array with: name with: '')]. self assert: name = (self packageName, '-', Author fullName, '.', aNumber asString)! ! !MCWorkingCopyTest methodsFor: 'actions' stamp: 'EstebanLorenzano 9/8/2013 11:04' prior: 25201136! snapshot | version | [version := workingCopy newVersionIn: workingCopy repositoryGroup] on: MCVersionNameAndMessageRequest do: [:n | n resume: (Array with: n suggestedName with: '')]. versions at: version info put: version. ^ version! ! MCWorkingCopy removeSelector: #newVersionWithName:message:! MCWorkingCopy removeSelector: #newVersionWithMessage:! MCWorkingCopy removeSelector: #newVersion! MCWorkingCopy removeSelector: #currentVersionInfoWithMessage:! MCWorkingCopy removeSelector: #collectDependenciesWithMessage:! "Gofer-Core"! "Metacello-MC"! "Monticello"! "MonticelloGUI"! "Nautilus"! "Tests"! ----End fileIn----! ----QUIT----an Array(8 September 2013 2:34:02 pm) Pharo.image priorSource: 16932316! ----STARTUP----an Array(8 September 2013 2:40:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 2:40:19 pm) Pharo-30379.image priorSource: 16952798! ----STARTUP----an Array(8 September 2013 2:54:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/8/2013 14:53' prior: 67264276! commentForCurrentUpdate ^ '11541 testInsettingByPointPairShouldNotProduceNegativeRectangle https://pharo.fogbugz.com/f/cases/11541 11538 remove #defaultMethodTrailer in TBehavior https://pharo.fogbugz.com/f/cases/11538 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/8/2013 14:53'! script172 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-EstebanLorenzano.1599.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-EstebanLorenzano.902.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/8/2013 14:53'! update30380 "self new update30380" self withUpdateLog: '11541 testInsettingByPointPairShouldNotProduceNegativeRectangle https://pharo.fogbugz.com/f/cases/11541 11538 remove #defaultMethodTrailer in TBehavior https://pharo.fogbugz.com/f/cases/11538 '. self loadTogether: self script172 merge: false. self flushCaches. ! ! "ScriptLoader30"! RectangleTest removeSelector: #testInsettingByPointPairShouldNotProduceNegativeRectangle! TBehavior removeSelector: #defaultMethodTrailer! "Compiler"! "Graphics-Tests"! ----End fileIn----! ----QUIT----an Array(8 September 2013 2:54:53 pm) Pharo.image priorSource: 16953005! ----STARTUP----an Array(8 September 2013 3:01:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 3:01:05 pm) Pharo-30380.image priorSource: 16964398! ----STARTUP----an Array(8 September 2013 5:40:45 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/8/2013 17:38' prior: 67284960! commentForCurrentUpdate ^ '11542 Load FileTree in the image core https://pharo.fogbugz.com/f/cases/11542 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/8/2013 17:38'! script173 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.629.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-EstebanLorenzano.1599.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-EstebanLorenzano.902.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1240.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.565.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/8/2013 17:38'! update30381 "self new update30381" Gofer it squeaksource3: 'FileTree'; configuration; load. ((Smalltalk at: #ConfigurationOfFileTree) project version: '1.0.6') load. (MCWorkingCopy allManagers select: #needsSaving) do: [ :each | each modified: false ]. ScriptLoader new unloadPackageNamed: 'ConfigurationOfFileTree'; cleanRepositories. self withUpdateLog: '11542 Load FileTree in the image core https://pharo.fogbugz.com/f/cases/11542 '. self loadTogether: self script173 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ConfigurationOfFileTree class methodsFor: 'development support' stamp: 'dkh 4/5/2012 16:22:00'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfFileTree class methodsFor: 'private' stamp: 'dkh 07/12/2013 12:08'! baseConfigurationClassIfAbsent: aBlock ^ Smalltalk at: #'MetacelloBaseConfiguration' ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #'MetacelloBaseConfiguration' ifAbsent: aBlock ]! ! !ConfigurationOfFileTree class methodsFor: 'private' stamp: '07/12/2013 07:09'! ensureMetacello (self baseConfigurationClassIfAbsent: [ ]) ensureMetacello! ! !ConfigurationOfFileTree class methodsFor: 'private' stamp: '07/11/2013 16:46'! ensureMetacelloBaseConfiguration Smalltalk at: #'MetacelloBaseConfiguration' ifAbsent: [ #('http://smalltalkhub.com/mc/dkh/metacello/main' 'http://seaside.gemtalksystems.com/ss/metacello') do: [ :url | | repository version | repository := MCHttpRepository location: url user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.19.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository. ^ self ] ]. self error: 'Error bootstrapping Metacello: likely network error. Please try again' ]! ! !ConfigurationOfFileTree class methodsFor: 'metacello tool support' stamp: 'dkh 4/5/2012 16:22:00'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfFileTree class methodsFor: 'loading' stamp: 'dkh 4/5/2012 16:22:00'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfFileTree class methodsFor: 'loading' stamp: 'dkh 4/5/2012 16:22:00'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfFileTree class methodsFor: 'loading' stamp: 'dkh 4/5/2012 16:22:00'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfFileTree class methodsFor: 'accessing' stamp: 'dkh 4/5/2012 16:22:00'! project ^self new project! ! !ConfigurationOfFileTree class methodsFor: 'development support' stamp: 'dkh 4/5/2012 16:22:00'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfFileTree methodsFor: 'baselines' stamp: 'dkh 9/15/2012 20:27'! baseline100: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://ss3.gemstone.com/ss/FileTree'. spec package: 'MonticelloFileTree-Core'. spec group: 'default' with: #('MonticelloFileTree-Core') ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo13' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo13'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo14' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo14'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo20' ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec file: 'MonticelloFileTree-FileSystem-Utilities.pharo20'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.squeak43' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.squeak43'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: [ spec className: 'ConfigurationOfGsCore'; repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ]; project: 'Monticello' with: [ spec className: 'ConfigurationOfGsMonticello'; repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ]. spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.gemstone24'; requires: #('GsCore' 'Monticello') ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]! ! !ConfigurationOfFileTree methodsFor: 'baselines' stamp: 'dkh 06/15/2013 20:22'! baseline102: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://ss3.gemstone.com/ss/FileTree'. spec package: 'MonticelloFileTree-Core'. spec group: 'default' with: #('MonticelloFileTree-Core') ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo13' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo13'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo14' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo14'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo20' ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec file: 'MonticelloFileTree-FileSystem-Utilities.pharo20'; requires: 'MonticelloFileTree-Core' ]; package: 'MonticelloFileTree-Git' with: [ spec file: 'MonticelloFileTree-Git.pharo20'; requires: #('MonticelloFileTree-Core') ]; yourself. spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo30' ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec file: 'MonticelloFileTree-FileSystem-Utilities.pharo30'; requires: 'MonticelloFileTree-Core' ]; package: 'MonticelloFileTree-Git' with: [ spec file: 'MonticelloFileTree-Git.pharo20'; requires: #('MonticelloFileTree-Core') ]; yourself. spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.squeak43' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.squeak43'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: [ spec className: 'ConfigurationOfGsCore'; repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ]; project: 'Monticello' with: [ spec className: 'ConfigurationOfGsMonticello'; repository: 'http://seaside.gemstone.com/ss/MetacelloRepository' ]. spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.gemstone24'; requires: #('GsCore' 'Monticello') ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]! ! !ConfigurationOfFileTree methodsFor: 'baselines' stamp: 'dkh 06/28/2013 16:25'! baseline103: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://ss3.gemtalksystems.com/ss/FileTree'. spec package: 'MonticelloFileTree-Core'. spec group: 'default' with: #('MonticelloFileTree-Core') ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo11' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo11'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo13' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo13'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo14' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.pharo14'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo20' ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec file: 'MonticelloFileTree-FileSystem-Utilities.pharo20'; requires: 'MonticelloFileTree-Core' ]; package: 'MonticelloFileTree-Git' with: [ spec file: 'MonticelloFileTree-Git.pharo20'; requires: #('MonticelloFileTree-Core') ]; yourself. spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.pharo30' ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec file: 'MonticelloFileTree-FileSystem-Utilities.pharo30'; requires: 'MonticelloFileTree-Core' ]; package: 'MonticelloFileTree-Git' with: [ spec file: 'MonticelloFileTree-Git.pharo20'; requires: #('MonticelloFileTree-Core') ]; yourself. spec group: 'default' with: #('MonticelloFileTree-FileSystem-Utilities') ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.squeak43' ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.squeak43'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: [ spec className: 'ConfigurationOfGsCore'; repository: 'http://seaside.https://github.com/dalehenrich/filetree/issues/86.com/ss/MetacelloRepository' ]; project: 'Monticello' with: [ spec className: 'ConfigurationOfGsMonticello'; repository: 'http://seaside.https://github.com/dalehenrich/filetree/issues/86.com/ss/MetacelloRepository' ]. spec package: 'MonticelloFileTree-Core' with: [ spec file: 'MonticelloFileTree-Core.gemstone24'; requires: #('GsCore' 'Monticello') ]; package: 'MonticelloFileTree-FileDirectory-Utilities' with: [ spec file: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24'; requires: 'MonticelloFileTree-Core' ]. spec group: 'default' with: #('MonticelloFileTree-FileDirectory-Utilities') ]! ! !ConfigurationOfFileTree methodsFor: 'accessing' stamp: 'dkh 4/5/2012 16:22:00'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !ConfigurationOfFileTree methodsFor: 'accessing' stamp: 'dkh 4/5/2012 16:22:00'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project" (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !ConfigurationOfFileTree methodsFor: 'symbolic versions' stamp: 'dkh 09/08/2013 07:17'! stable: spec spec for: #'common' version: '1.0.6'. ! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 9/15/2012 20:27'! version100: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'FileTree 1.0'. spec author: 'dkh'. spec timestamp: '9/15/2012 14:10' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.90'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.90'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.91'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.90'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 03/12/2013 16:30'! version101: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'port to GemStone 3.1.x - write out gemstone class options in class definitions correctly - fix problems in filename generation in presence of specials 1.0.1 (dkh.35): - port to GemStone 3.2 1.0.1 (dkh.36): - fix Issue #69: https://github.com/dalehenrich/filetree/issues/69 - commit: d861c5d76ecc762d6cb4f11f6ec6c1ba45d6bdc0'. spec author: 'dkh'. spec timestamp: '3/12/2013 16:30' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.91'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]. spec for: #'gs3.1.0.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ]. spec for: #'gs3.2.0.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.99' ]. ! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 06/16/2013 19:43'! version102: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- non UTF-8 data in monticello.meta/version file https://github.com/dalehenrich/filetree/issues/72 - Missing FileTreeUrl in Pharo https://github.com/dalehenrich/filetree/issues/74 - Gemstone 24 dev - Issue #72 fixes https://github.com/dalehenrich/filetree/issues/75 - In Pharo-2.0, MCVersionInfoWriter>>writeVersionInfo: pre-emptorily converts version message to latin-1 https://github.com/dalehenrich/filetree/issues/76 - Add Pharo2.0 support https://github.com/dalehenrich/filetree/issues/81 - commit: 0d1f1dfc82919978db39e3021078b4b5acf551da'. spec author: 'dkh'. spec timestamp: '6/16/2013 19:24' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.109'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.24' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.103'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.24' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.108'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 07/07/2013 15:57'! version1031: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- fix Issue #64 : FileTree should not override MCVersionInfo>>date and time https://github.com/dalehenrich/filetree/issues/64 - partial fix for Issue #87: Ston chages https://github.com/dalehenrich/filetree/pull/87'. spec author: 'dkh'. spec timestamp: '7/7/2013 08:57' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.127'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.39' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.103'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.24' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.96'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.108'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 07/07/2013 15:21'! version103: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- fix Issue #86 : update config to use seaside.gemtalksystems.com and ss3.gemtalksystems.com https://github.com/dalehenrich/filetree/issues/86'. spec author: 'dkh'. spec timestamp: '6/28/2013 16:24' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.95'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.93'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.109'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.24' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.103'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.24' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.92'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.108'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 07/22/2013 23:35'! version1041: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- checkpoint working on PHaro3.0 port'. spec author: 'dkh'. spec timestamp: '7/22/2013 23:03' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.134'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.42' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.143'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.132'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.147'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'EstebanLorenzano 8/8/2013 13:25'! version1042: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- trait support for pharo 2.0'. spec author: 'EstebanLorenzano'. spec timestamp: '9/08/2013 13:23' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-EstebanLorenzano.137'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-EstebanLorenzano.19'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.42' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.143'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.132'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.147'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 07/10/2013 14:05'! version104: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '- fix Issue #66: Pharo install instructions incorrect https://github.com/dalehenrich/filetree/issues/66 - fix Issue #82: Sqeak4.5 builds failing.... https://github.com/dalehenrich/filetree/issues/82 - fix Issue #83: Don''t override Monticello methods https://github.com/dalehenrich/filetree/issues/83 - fix Issue #86: update config to use seaside.gemtalksystems.com and ss3.gemtalksystems.com https://github.com/dalehenrich/filetree/issues/86 - fix Issue #87: Ston changes https://github.com/dalehenrich/filetree/issues/87 - fix Issue #88: Gitfiletree https://github.com/dalehenrich/filetree/issues/88 - fix Issue #90: provide option to create `.ston` property files https://github.com/dalehenrich/filetree/issues/90 - fix Issue #91: Git repository tests failing with Issue #90 bugfix https://github.com/dalehenrich/filetree/issues/91 '. spec author: 'dkh'. spec timestamp: '7/10/2013 11:30' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.101'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.99'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.134'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-dkh.17'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.42' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.103'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.24' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.132'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.129'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 08/11/2013 08:19'! version105: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: '-fix Issue #11: Traits and Script support - fix Issue #92: Mac case insensitivity `must` be addressed - fix Issue #97: Load packages from repos with no monticello meta data - fix Issue #101: Refactor MCFileTreeStCypressWriter>>writeDefinitions: to ease Issue #11 integration for details: https://github.com/dalehenrich/filetree/issues?direction=desc&milestone=9&page=1&sort=updated&state=closed '. spec author: 'dkh'. spec timestamp: '8/11/2013 07:28' ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.154'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.154'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14' ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.154'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12' ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.154'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12' ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.160'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-EstebanLorenzano.19'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.61' ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.154'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27' ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.161'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12' ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.154'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14' ]! ! !ConfigurationOfFileTree methodsFor: 'versions' stamp: 'dkh 09/08/2013 07:17'! version106: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'https://github.com/dalehenrich/filetree/issues?direction=desc&milestone=10&page=1&state=closed'. spec author: 'dkh'. spec timestamp: '9/8/2013 06:22'. ]. spec for: #'pharo1.1.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.157'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'. ]. spec for: #'pharo1.2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo11-dkh.157'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo11-dkh.14'. ]. spec for: #'pharo1.3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo13-dkh.165'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo13-dkh.12'. ]. spec for: #'pharo1.4.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo14-dkh.166'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.pharo14-dkh.12'. ]. spec for: #'pharo2.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo20-dkh.163'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo20-EstebanLorenzano.19'; package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git.pharo20-dkh.63'. ]. spec for: #'pharo3.x' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.pharo30-dkh.157'; package: 'MonticelloFileTree-FileSystem-Utilities' with: 'MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27'. ]. spec for: #'squeak' do: [ spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.squeak43-dkh.165'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.squeak43-dkh.12'. ]. spec for: #'gemstone' do: [ spec project: 'GsCore' with: '0.246'; project: 'Monticello' with: '0.243'. spec package: 'MonticelloFileTree-Core' with: 'MonticelloFileTree-Core.gemstone24-dkh.164'; package: 'MonticelloFileTree-FileDirectory-Utilities' with: 'MonticelloFileTree-FileDirectory-Utilities.gemstone24-dkh.14'. ]. ! ! "ConfigurationOfFileTree"! !FileTreeUrl commentStamp: '' prior: 0! A FileTreeUrl represent a filetree:// path for Gofer.! !Array methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" | indent | aStream nextPutAll: '['; lf. indent := startIndent + 1. 1 to: self size do: [ :index | | item | item := self at: index. aStream tab: indent. item writeCypressJsonOn: aStream forHtml: forHtml indent: indent. index < self size ifTrue: [ aStream nextPutAll: ','; lf ] ]. self size = 0 ifTrue: [ aStream tab: indent ]. aStream nextPutAll: ' ]'! ! !Dictionary methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonForHtmlOn: aStream self writeCypressJsonOn: aStream forHtml: true indent: 0! ! !Dictionary methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream self writeCypressJsonOn: aStream forHtml: false indent: 0. aStream lf! ! !Dictionary methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" | indent keys | indent := startIndent. aStream nextPutAll: '{'; lf. indent := indent + 1. keys := self keys sort: [ :a :b | a <= b ]. 1 to: keys size do: [ :index | | key value | key := keys at: index. value := self at: key. aStream tab: indent. key writeCypressJsonOn: aStream forHtml: forHtml indent: indent. aStream nextPutAll: ' : '. value writeCypressJsonOn: aStream forHtml: forHtml indent: indent. index < self size ifTrue: [ aStream nextPutAll: ','; lf ] ]. self size = 0 ifTrue: [ aStream tab: indent ]. aStream nextPutAll: ' }'! ! !MCFileBasedRepository methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/5/2012 11:15:15'! packageDescriptionsFromReadableFileNames ^ self readableFileNames collect: [ :each | | name | name := (each copyUpToLast: $.) copyUpTo: $(. name last isDigit ifFalse: [ {name. ''. ''. each} ] ifTrue: [ | packageName author versionNumber | packageName := name copyUpToLast: $-. author := (name copyAfterLast: $-) copyUpTo: $.. versionNumber := ((name copyAfterLast: $-) copyAfter: $.) asInteger ifNil: [ 0 ]. {packageName. author. versionNumber. each} ] ]! ! !MCFileBasedRepository methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/5/2012 11:15:15'! retrieveVersionsWithPackageNames: packageNames | packageDescriptions | packageDescriptions := self packageDescriptionsFromReadableFileNames. packageNames addAll: (packageDescriptions collect: [ :packageDescription | packageDescription first ]). ^ packageDescriptions select: [ :each | (each at: 3) isNumber ]! ! !Number methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" aStream nextPutAll: self printString! ! !MCFileTreeAbstractStWriter class methodsFor: 'accessing' stamp: 'dkh 4/5/2012 11:15:15'! monticelloMetaDirName ^ '.'! ! !MCFileTreeAbstractStWriter class methodsFor: 'writing' stamp: 'dkh 4/5/2012 11:15:15'! on: aStream MCFileTreePackageStructureStWriter useCypressWriter ifTrue: [ ^ MCFileTreeStCypressWriter new stream: aStream ]. ^ (MCFileTreePackageStructureStWriter useSnapShotWriter ifTrue: [ MCFileTreeStSnapshotWriter ] ifFalse: [ MCFileTreeStWriter ]) new stream: aStream! ! !MCFileTreeAbstractStWriter class methodsFor: 'accessing' stamp: 'dkh 4/5/2012 11:15:15'! readerClass ^ MCStReader! ! !MCFileTreeAbstractStWriter methodsFor: 'private' stamp: 'dkh 4/5/2012 11:15:15'! directoryForDirectoryNamed: directoryNameOrPath ^ directoryNameOrPath = '.' ifTrue: [ stream packageFileDirectory ] ifFalse: [ stream subPackageFileDirectoryFor: directoryNameOrPath ]! ! !MCFileTreeAbstractStWriter methodsFor: 'private' stamp: 'dkh 4/5/2012 11:15:15'! fileNameForSelector: selector ^ (selector == #'/' ifTrue: [ 'encoded slash' ] ifFalse: [ (selector includes: $/) ifTrue: [ 'encoded' , selector copyReplaceAll: '/' with: ' slash ' ] ifFalse: [ selector ] ]) asString! ! !MCFileTreeAbstractStWriter methodsFor: 'accessing' stamp: 'dkh 08/10/2012 02:55:31'! fileUtils ^ MCFileTreeFileUtils current! ! !MCFileTreeAbstractStWriter methodsFor: 'initialize-release' stamp: 'topa 7/22/2013 00:13'! initialize stWriter := MCFileTreePackageStructureStWriter new initializers: (initializers := Set new); yourself. orderedClassNames := OrderedCollection new. orderedTraitNames := OrderedCollection new.! ! !MCFileTreeAbstractStWriter methodsFor: 'private' stamp: 'dkh 4/5/2012 11:15:15'! monticelloMetaDirName ^ self class monticelloMetaDirName! ! !MCFileTreeAbstractStWriter methodsFor: 'private' stamp: 'dkh 07/07/2013 22:12'! repository ^ stream repository! ! !MCFileTreeAbstractStWriter methodsFor: 'private' stamp: 'dkh 4/5/2012 11:15:15'! setFileStream: file stWriter stream: file! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitClassDefinition: definition self subclassResponsibility! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'topa 7/22/2013 14:35'! visitClassTraitDefinition: definition self subclassResponsibility! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitMetaclassDefinition: definition "handled by class definition" ! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitMethodDefinition: definition self subclassResponsibility! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitOrganizationDefinition: defintion self writeInDirectoryName: self monticelloMetaDirName fileName: 'categories' extension: '.st' visit: [ defintion categories do: [ :cat | stWriter writeCategory: cat ] ]! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 07/07/2013 19:32:57'! visitScriptDefinition: definition self flag: #'skippedForNow'! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'topa 7/22/2013 00:05'! visitTraitDefinition: definition self subclassResponsibility! ! !MCFileTreeAbstractStWriter methodsFor: 'initialize-release' stamp: 'dkh 4/5/2012 11:15:15'! writeBasicDefinitions: aCollection "the correct initialization order is unknown if some classes are missing in the image" self writePropertiesFile. stWriter acceptVisitor: self forDefinitions: aCollection. self writeInitializers! ! !MCFileTreeAbstractStWriter methodsFor: 'writing' stamp: 'topa 7/22/2013 13:55'! writeClassDefinition: definition stWriter writeClassDefinition: definition. (definition hasClassInstanceVariables or: [definition hasClassTraitComposition]) ifTrue: [ stWriter writeMetaclassDefinition: definition ]. definition hasComment ifTrue: [ stWriter writeClassComment: definition ]! ! !MCFileTreeAbstractStWriter methodsFor: 'writing' stamp: 'topa 7/22/2013 13:26'! writeClassTraitDefinition: definition stWriter visitClassTraitDefinition: definition. ! ! !MCFileTreeAbstractStWriter methodsFor: 'initialize-release' stamp: 'dkh 4/5/2012 11:15:15'! writeDefinitions: aCollection "the correct initialization order is unknown if some classes are missing in the image" self writeBasicDefinitions: aCollection! ! !MCFileTreeAbstractStWriter methodsFor: 'visiting' stamp: 'dkh 04/07/2012 10:32'! writeInDirectoryName: directoryNameOrPath fileName: fileName extension: ext visit: visitBlock | directory | directory := self directoryForDirectoryNamed: directoryNameOrPath. self fileUtils writeStreamFor: fileName , ext in: directory do: [ :fileStream | fileStream lineEndConvention: #'lf'. self setFileStream: fileStream. visitBlock value ]! ! !MCFileTreeAbstractStWriter methodsFor: 'initialize-release' stamp: 'dkh 4/5/2012 11:15:15'! writeInitializers self writeInDirectoryName: self monticelloMetaDirName fileName: 'initializers' extension: '.st' visit: [ stWriter writePresentInitializers; writeAbsentInitializers ]! ! !MCFileTreeAbstractStWriter methodsFor: 'writing' stamp: 'dkh 4/5/2012 11:15:15'! writeMethodDefinition: definition stWriter visitMethodDefinition: definition! ! !MCFileTreeAbstractStWriter methodsFor: 'initialize-release' stamp: 'dkh 4/5/2012 11:15:15'! writePropertiesFile self writeInDirectoryName: '.' fileName: '' extension: '.filetree' visit: [ stWriter writeProperties ]! ! !MCFileTreeAbstractStWriter methodsFor: 'writing' stamp: 'topa 7/22/2013 00:16'! writeTraitDefinition: definition stWriter writeClassDefinition: definition. definition hasComment ifTrue: [stWriter writeClassComment: definition].! ! !MCFileTreeStCypressWriter class methodsFor: 'initialization' stamp: 'dkh 07/07/2013 15:42:23'! initialize "self initialize" "force initialization of specials ..." specials := nil! ! !MCFileTreeStCypressWriter class methodsFor: 'private' stamp: 'PeterMcLain 10/02/2012 14:47'! initializeSpecials | map | map := Dictionary new. map at: $+ put: 'plus'; at: $- put: 'minus'; at: $= put: 'equals'; at: $< put: 'less'; at: $> put: 'more'; at: $% put: 'percent'; at: $& put: 'and'; at: $| put: 'pipe'; at: $* put: 'star'; at: $/ put: 'slash'; at: $\ put: 'backslash'; at: $~ put: 'tilde'; at: $? put: 'wat'; at: $, put: 'comma'; at: $@ put: 'at'. map keys do: [ :key | map at: (map at: key) put: key ]. ^ map ! ! !MCFileTreeStCypressWriter class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 15:05'! monticelloMetaDirName ^ 'monticello.meta'! ! !MCFileTreeStCypressWriter class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 11:27'! specials ^ specials ifNil: [ specials := self initializeSpecials ]! ! !MCFileTreeStCypressWriter methodsFor: 'private' stamp: 'dkh 02/13/2013 17:04'! fileNameForSelector: selector ^ selector last = $: ifTrue: [ selector collect: [ :each | each = $: ifTrue: [ $. ] ifFalse: [ each ] ] ] ifFalse: [ (self class specials includes: selector first) ifFalse: [ selector ] ifTrue: [ | output specials | specials := self class specials. output := String new writeStream. output nextPut: $^. selector do: [ :each | output nextPutAll: ((specials includes: each) ifTrue: [ specials at: each ] ifFalse: [ each asString ]) ] separatedBy: [ output nextPut: $. ]. output contents ] ]! ! !MCFileTreeStCypressWriter methodsFor: 'private' stamp: 'ChristopheDemarey 8/28/2013 13:50'! fileNameMapFor: aMethodDefinitionCollection "https://github.com/dalehenrich/filetree/issues/92" "answer a dictionary that maps each definition selector to a filename that is guaranteed unique on case insensitive file systems. Segregate instance and class side methods. Key is true for class method map, false for instance method map" | map filenameMetaMap | map := Dictionary new. aMethodDefinitionCollection do: [ :mDef | | sel col metaKey methMap | "sort into bins by lowercase selector. " metaKey := mDef classIsMeta. methMap := map at: metaKey ifAbsent: [ map at: metaKey put: Dictionary new ]. sel := mDef selector asLowercase. col := methMap at: sel ifAbsent: [ methMap at: sel put: OrderedCollection new ]. col add: mDef ]. filenameMetaMap := Dictionary new. map keysAndValuesDo: [ :metaKey :methMap | | filenameMap | filenameMap := filenameMetaMap at: metaKey ifAbsent: [ filenameMetaMap at: metaKey put: Dictionary new ]. methMap values do: [ :col | | selector sortedCol | col size = 1 ifTrue: [ | def | "no need to distinguish filename" def := col at: 1. filenameMap at: def selector put: (self fileNameForSelector: def selector) ] ifFalse: [ "tack on postfix to guarantee file names are uniique on case insensitive file systems" sortedCol := col sorted: [ :a :b | a name <= b name ]. (1 to: sortedCol size) do: [ :index | | def filename | def := sortedCol at: index. filename := self fileNameForSelector: def selector. filename := filename , '..' , index printString. filenameMap at: def selector put: filename ] ] ] ]. ^ filenameMetaMap! ! !MCFileTreeStCypressWriter methodsFor: 'initialize-release' stamp: 'dkh 07/07/2013 22:15'! propertyFileExtension ^ self repository propertyFileExtension! ! !MCFileTreeStCypressWriter methodsFor: 'private' stamp: 'dkh 4/4/2012 14:01'! setFileStream: aStream super setFileStream: aStream. fileStream := aStream! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 03/22/2013 11:30'! writeClassComment: definition fileStream nextPutAll: definition comment withUnixLineEndings! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 03/22/2013 13:51'! writeClassDefinition: definition | properties | properties := Dictionary new. properties at: 'name' put: definition className. properties at: 'super' put: definition superclassName. definition traitCompositionString ifNotNil: [ :property | "Issue #48: https://github.com/dalehenrich/filetree/issues/48" property ~= '{}' ifTrue: [ properties at: 'traitcomposition' put: property ] ]. definition classTraitCompositionString ifNotNil: [ :property | "Issue #48: https://github.com/dalehenrich/filetree/issues/48" property ~= '{}' ifTrue: [ properties at: 'classtraitcomposition' put: property ] ]. properties at: 'category' put: definition category. properties at: 'instvars' put: definition instVarNames asArray. properties at: 'classvars' put: definition classVarNames asArray. properties at: 'pools' put: definition poolDictionaries asArray. properties at: 'classinstvars' put: definition classInstVarNames asArray. properties at: 'type' put: definition type asString. properties at: 'commentStamp' put: definition commentStamp. properties writeCypressJsonOn: fileStream! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 07/07/2013 22:13'! writeClassDefinition: definition to: classPath self writeInDirectoryName: classPath fileName: 'README' extension: '.md' visit: [ self writeClassComment: definition ]. self writeInDirectoryName: classPath fileName: 'properties' extension: self propertyFileExtension visit: [ self writeClassDefinition: definition ]. self writeInDirectoryName: classPath fileName: 'methodProperties' extension: self propertyFileExtension visit: [ self writeMethodProperties: (self methodDefinitions at: definition className ifAbsent: [ #() ]) ]! ! !MCFileTreeStCypressWriter methodsFor: 'initialize-release' stamp: '08/08/2013 16:08'! writeDefinitions: aCollection | classDirExtension extensionClasses extensionMethodDefinitions extensionMethodMap methodHolders | self writeBasicDefinitions: aCollection. extensionClasses := OrderedCollection new. extensionMethodDefinitions := OrderedCollection new. methodHolders := self classDefinitions, self traitDefinitions. self methodDefinitions keysAndValuesDo: [ :className :extensionMethods | methodHolders at: className ifAbsent: [ extensionClasses add: className. extensionMethodDefinitions addAll: extensionMethods ] ]. extensionClasses do: [ :className | self methodDefinitions removeKey: className ]. self writeMethodHolderDefinitions: self traitDefinitions extension: '.trait' to: '' do: [ :definition :classPath | self writeTraitDefinition: definition to: classPath. ]. self writeMethodHolderDefinitions: self classDefinitions extension: '.class' to: '' do: [ :definition :classPath | self writeClassDefinition: definition to: classPath ]. classDirExtension := '.extension'. extensionMethodMap := Dictionary new. extensionMethodDefinitions do: [ :methodDefinition | | classPath methodPath | (extensionMethodMap at: methodDefinition className ifAbsent: [ extensionMethodMap at: methodDefinition className put: OrderedCollection new ]) add: methodDefinition. classPath := methodDefinition className , classDirExtension , self fileUtils pathNameDelimiter asString. self writeExtensionClassDefinition: methodDefinition to: classPath ]. extensionMethodMap keysAndValuesDo: [ :className :classMethodDefinitions | | classPath filenameMetaMap | filenameMetaMap := self fileNameMapFor: classMethodDefinitions. classMethodDefinitions do: [ :methodDefinition | | filename methodPath | filename := (filenameMetaMap at: methodDefinition classIsMeta) at: methodDefinition selector. classPath := methodDefinition className , classDirExtension , self fileUtils pathNameDelimiter asString. methodPath := classPath , (methodDefinition classIsMeta ifTrue: [ 'class' ] ifFalse: [ 'instance' ]) , self fileUtils pathNameDelimiter asString. self writeMethodDefinition: methodDefinition to: methodPath filename: filename ]. classPath := className , classDirExtension , self fileUtils pathNameDelimiter asString. self writeInDirectoryName: classPath fileName: 'methodProperties' extension: self propertyFileExtension visit: [ self writeMethodProperties: classMethodDefinitions ] ] ! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 4/4/2012 17:52'! writeExtensionClassDefinition: definition | properties | properties := Dictionary new. properties at: 'name' put: definition className. properties writeCypressJsonOn: fileStream! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 07/07/2013 22:14'! writeExtensionClassDefinition: definition to: classPath self writeInDirectoryName: classPath fileName: 'properties' extension: self propertyFileExtension visit: [ self writeExtensionClassDefinition: definition ]! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 03/22/2013 11:30'! writeMethodDefinition: definition fileStream nextPutAll: definition category; lf; nextPutAll: definition source withUnixLineEndings! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 07/18/2013 17:01'! writeMethodDefinition: methodDefinition to: methodPath self shouldNotImplement! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'dkh 07/18/2013 16:34'! writeMethodDefinition: methodDefinition to: methodPath filename: filename self writeInDirectoryName: methodPath fileName: filename extension: '.st' visit: [ self writeMethodDefinition: methodDefinition ]! ! !MCFileTreeStCypressWriter methodsFor: 'initialize-release' stamp: 'dkh 6/12/2012 17:33:23'! writeMethodProperties: classMethodDefinitions "Issue 33: https://github.com/dalehenrich/filetree/issues/33" | properties classMethodsMap instanceMethodMap | properties := Dictionary new. properties at: 'class' put: (classMethodsMap := Dictionary new). properties at: 'instance' put: (instanceMethodMap := Dictionary new). classMethodDefinitions do: [ :methodDefinition | (methodDefinition classIsMeta ifTrue: [ classMethodsMap ] ifFalse: [ instanceMethodMap ]) at: methodDefinition selector asString put: methodDefinition timeStamp ]. properties writeCypressJsonOn: fileStream! ! !MCFileTreeStCypressWriter methodsFor: 'initialize-release' stamp: 'dkh 07/07/2013 22:14'! writePropertiesFile | properties | properties := Dictionary new. properties at: 'noMethodMetaData' put: true. properties at: 'separateMethodMetaAndSource' put: false. properties at: 'useCypressPropertiesFile' put: true. self writeInDirectoryName: '.' fileName: '' extension: '.filetree' visit: [ properties writeCypressJsonOn: fileStream ]. self writeInDirectoryName: '.' fileName: 'properties' extension: self propertyFileExtension visit: [ Dictionary new writeCypressJsonOn: fileStream ]! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'topa 7/22/2013 14:54'! writeTraitDefinition: definition | properties compositionString | properties := Dictionary new. properties at: 'name' put: definition className. definition traitCompositionString ifNotNil: [ :property | property ~= '{}' ifTrue: [ properties at: 'traitcomposition' put: property ] ]. " handle the classTrait case " compositionString := self classTraitDefinitions at: definition className ifPresent: [:classTraitDefinition | classTraitDefinition classTraitCompositionString ]. compositionString ifNil: [ compositionString := definition classTraitCompositionString ]. compositionString~= '{}' ifTrue: [ properties at: 'classtraitcomposition' put: compositionString ] . properties at: 'category' put: definition category. properties at: 'commentStamp' put: definition commentStamp. properties writeCypressJsonOn: fileStream! ! !MCFileTreeStCypressWriter methodsFor: 'writing' stamp: 'topa 7/22/2013 14:47'! writeTraitDefinition: definition to: classPath self writeInDirectoryName: classPath fileName: 'README' extension: '.md' visit: [ self writeClassComment: definition ]. self writeInDirectoryName: classPath fileName: 'properties' extension: self propertyFileExtension visit: [ self writeTraitDefinition: definition ]. self writeInDirectoryName: classPath fileName: 'methodProperties' extension: self propertyFileExtension visit: [ self writeMethodProperties: (self methodDefinitions at: definition className ifAbsent: [ #() ]) ]! ! !MCFileTreeStSnapshotWriter methodsFor: 'accessing' stamp: 'dkh 4/5/2012 11:15:15'! classDefinitions classDefinitions ifNil: [ classDefinitions := Dictionary new ]. ^ classDefinitions! ! !MCFileTreeStSnapshotWriter methodsFor: 'accessing' stamp: 'dkh 08/08/2013 19:02:56'! classTraitDefinitions classTraitDefinitions ifNil: [ classTraitDefinitions := Dictionary new ]. ^ classTraitDefinitions! ! !MCFileTreeStSnapshotWriter methodsFor: 'accessing' stamp: 'dkh 4/5/2012 11:15:15'! methodDefinitions methodDefinitions ifNil: [ methodDefinitions := Dictionary new ]. ^ methodDefinitions! ! !MCFileTreeStSnapshotWriter methodsFor: 'accessing' stamp: 'dkh 08/08/2013 19:02:56'! traitDefinitions traitDefinitions ifNil: [ traitDefinitions := Dictionary new ]. ^ traitDefinitions! ! !MCFileTreeStSnapshotWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitClassDefinition: definition orderedClassNames add: definition className. self classDefinitions at: definition className put: definition! ! !MCFileTreeStSnapshotWriter methodsFor: 'visiting' stamp: 'dkh 08/08/2013 19:02:56'! visitClassTraitDefinition: definition orderedTraitNames add: definition className, ' classTrait'. self classTraitDefinitions at: definition className put: definition! ! !MCFileTreeStSnapshotWriter methodsFor: 'visiting' stamp: 'dkh 4/5/2012 11:15:15'! visitMethodDefinition: definition (self methodDefinitions at: definition className ifAbsent: [ self methodDefinitions at: definition className put: OrderedCollection new ]) add: definition! ! !MCFileTreeStSnapshotWriter methodsFor: 'visiting' stamp: 'dkh 08/08/2013 19:02:56'! visitTraitDefinition: definition orderedTraitNames add: definition className. self traitDefinitions at: definition className put: definition! ! !MCFileTreeStSnapshotWriter methodsFor: 'writing' stamp: 'dkh 4/5/2012 11:15:15'! writeClassDefinition: definition to: classPath self writeInDirectoryName: classPath fileName: definition className extension: '.st' visit: [ self writeClassDefinition: definition ]! ! !MCFileTreeStSnapshotWriter methodsFor: 'writing' stamp: 'dkh 08/08/2013 19:02:56'! writeClassTraitDefinition: definition to: traitPath self writeInDirectoryName: traitPath fileName: definition className, '_classTrait' extension: '.st' visit: [ self writeClassTraitDefinition: definition ]! ! !MCFileTreeStSnapshotWriter methodsFor: 'initialize-release' stamp: 'dkh 08/08/2013 18:34'! writeDefinitions: aCollection | basePath extensionClasses extensionMethodDefinitions methodHolders | self writeBasicDefinitions: aCollection. basePath := 'snapshot' , self fileUtils pathNameDelimiter asString , 'classes' , self fileUtils pathNameDelimiter asString. extensionClasses := OrderedCollection new. extensionMethodDefinitions := OrderedCollection new. methodHolders := self classDefinitions, self traitDefinitions. self methodDefinitions keysAndValuesDo: [ :className :extensionMethods | methodHolders at: className ifAbsent: [ extensionClasses add: className. extensionMethodDefinitions addAll: extensionMethods ] ]. extensionClasses do: [ :className | self methodDefinitions removeKey: className ]. self writeMethodHolderDefinitions: self traitDefinitions extension: '.trait' to: basePath do: [ :definition :classPath | self writeTraitDefinition: definition to: classPath. self classTraitDefinitions at: definition className ifPresent: [:classTraitDefinition | self writeClassTraitDefinition: classTraitDefinition to: classPath ] ]. self writeMethodHolderDefinitions: self classDefinitions extension: '.class' to: basePath do: [ :definition :classPath | self writeClassDefinition: definition to: classPath ]. basePath := 'snapshot' , self fileUtils pathNameDelimiter asString , 'extensions' , self fileUtils pathNameDelimiter asString. extensionMethodDefinitions do: [ :methodDefinition | | methodPath | methodPath := basePath , methodDefinition className , '.class' , self fileUtils pathNameDelimiter asString , (methodDefinition classIsMeta ifTrue: [ 'class' ] ifFalse: [ 'instance' ]) , self fileUtils pathNameDelimiter asString. self writeMethodDefinition: methodDefinition to: methodPath ] ! ! !MCFileTreeStSnapshotWriter methodsFor: 'writing' stamp: 'dkh 4/5/2012 11:15:15'! writeMethodDefinition: methodDefinition to: methodPath | filename | filename := self fileNameForSelector: methodDefinition selector. self writeInDirectoryName: methodPath fileName: filename extension: '.st' visit: [ self writeMethodDefinition: methodDefinition ]! ! !MCFileTreeStSnapshotWriter methodsFor: 'as yet unclassified' stamp: 'topa 7/22/2013 13:54'! writeMethodHolderDefinitions: aCollection extension: extension to: basePath do: aBlock aCollection keysAndValuesDo: [ :className :definition | | classPath instanceMethodPath classMethodPath filenameMetaMap theMethodDefinitions | classPath := basePath , definition className , extension , self fileUtils pathNameDelimiter asString. aBlock value: definition value: classPath. instanceMethodPath := classPath , 'instance' , self fileUtils pathNameDelimiter asString. classMethodPath := classPath , 'class' , self fileUtils pathNameDelimiter asString. theMethodDefinitions := self methodDefinitions at: className ifAbsent: [ #() ]. filenameMetaMap := self fileNameMapFor: theMethodDefinitions. theMethodDefinitions do: [ :methodDefinition | | filename | filename := (filenameMetaMap at: methodDefinition classIsMeta) at: methodDefinition selector. methodDefinition classIsMeta ifTrue: [ self writeMethodDefinition: methodDefinition to: classMethodPath filename: filename ] ifFalse: [ self writeMethodDefinition: methodDefinition to: instanceMethodPath filename: filename ] ] ] ! ! !MCFileTreeStSnapshotWriter methodsFor: 'writing' stamp: 'dkh 08/08/2013 19:02:56'! writeTraitDefinition: definition to: traitPath self writeInDirectoryName: traitPath fileName: definition className extension: '.st' visit: [ self writeTraitDefinition: definition ]! ! !MCFileTreeStWriter methodsFor: 'visiting' stamp: 'dkh 2/29/2012 14:52'! visitClassDefinition: definition orderedClassNames add: definition className. self writeInDirectoryName: definition className fileName: definition className extension: '.st' visit: [ self writeClassDefinition: definition ]! ! !MCFileTreeStWriter methodsFor: 'visiting' stamp: 'topa 7/22/2013 13:36'! visitClassTraitDefinition: definition orderedTraitNames add: definition className, ' classTrait'. self writeInDirectoryName: definition className fileName: definition className, '_classTrait' extension: '.st' visit: [ self writeClassTraitDefinition: definition ]! ! !MCFileTreeStWriter methodsFor: 'visiting' stamp: 'dkh 2/29/2012 14:55'! visitMethodDefinition: definition | filename directoryname | directoryname := definition classIsMeta ifTrue: [ definition className , '_class' ] ifFalse: [ definition className ]. filename := self fileNameForSelector: definition selector. self writeInDirectoryName: directoryname fileName: filename extension: '.st' visit: [ self writeMethodDefinition: definition ]! ! !MCFileTreeStWriter methodsFor: 'visiting' stamp: 'topa 7/22/2013 01:12'! visitTraitDefinition: definition orderedTraitNames add: definition className. self writeInDirectoryName: definition className fileName: definition className extension: '.st' visit: [ self writeTraitDefinition: definition ]! ! !FileTreeUrl commentStamp: '' prior: 67358957! A FileTreeUrl represent a filetree:// path for Gofer.! !FileTreeUrl class methodsFor: 'constants' stamp: 'ThierryGoubier 5/22/2013 13:44'! schemeName ^ 'filetree'! ! !FileTreeUrl methodsFor: 'as yet unclassified' stamp: 'ThierryGoubier 5/22/2013 13:45'! mcRepositoryAsUser: usernameString withPassword: passwordString "Where we create the repository." ^ MCFileTreeRepository new directory: self asFileReference! ! !String methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! cypressEscape ^ self encodeForHTTP! ! !String methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! cypressUnescape ^ self unescapePercents! ! !String methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" aStream nextPutAll: '"'; nextPutAll: (forHtml ifTrue: [ self cypressEscape ] ifFalse: [ self ]); nextPutAll: '"'! ! !MCFileTreeWriter class methodsFor: 'accessing' stamp: 'dkh 3/1/2012 13:09'! readerClass "don't expect this message to be sent" self shouldNotImplement! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'dkh 8/10/2012 05:26'! addString: string at: fileNameOrPath "fileNameOrPath may have one or two elements" | utils fullPath path | utils := MCFileTreeFileUtils current. path := MCFileTreePackageStructureStWriter useCypressWriter ifTrue: [ fullPath := utils buildPathFrom: {(MCFileTreeStCypressWriter monticelloMetaDirName). fileNameOrPath}. utils ensureFilePathExists: fullPath relativeTo: self packageFileDirectory. fullPath ] ifFalse: [ fileNameOrPath ]. string isEmpty ifFalse: [ utils writeStreamFor: path in: self packageFileDirectory do: [ :file | file nextPutAll: string ] ]! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'ChristopheDemarey 8/21/2013 16:56'! addString: string at: fileNameOrPath encodedTo: ignored ^ self addString: string at: fileNameOrPath! ! !MCFileTreeWriter methodsFor: 'visiting' stamp: 'dkh 8/10/2012 07:12'! deleteExistingPackageStructureFor: members "destroy .tree and .pkg directory structure .. otherwise it won't be pretty" | alternateDirName alternateDir packageDirectoryName | (self fileUtils directoryExists: self packageFileDirectory) ifTrue: [ self fileUtils deleteAll: self packageFileDirectory ]. packageDirectoryName := self fileUtils directoryName: self packageFileDirectory. alternateDirName := (packageDirectoryName endsWith: '.pkg') ifTrue: [ members first , '.tree' ] ifFalse: [ (packageDirectoryName endsWith: '.tree') ifTrue: [ members first , '.pkg' ] ifFalse: [ (packageDirectoryName endsWith: '.package') ifTrue: [ members first , '.pkg' ] ] ]. alternateDirName ifNotNil: [ alternateDir := self fileUtils directoryFromPath: alternateDirName relativeTo: stream directory. (self fileUtils directoryExists: alternateDir) ifTrue: [ self fileUtils deleteAll: alternateDir ] ]! ! !MCFileTreeWriter methodsFor: 'accessing' stamp: 'dkh 8/10/2012 07:05'! fileUtils ^ MCFileTreeFileUtils current! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'dkh 2/16/2012 14:49:00'! flush ! ! !MCFileTreeWriter methodsFor: 'visiting' stamp: 'dkh 8/10/2012 14:01'! initializePackageFileDirectoryCache cachedPackageFileDirectoryEntries := Dictionary new. self packageFileDirectory entries do: [ :entry | entry isDirectory ifTrue: [ cachedPackageFileDirectoryEntries at: entry name put: (self fileUtils directoryFromEntry: entry) ] ]! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'dkh 8/10/2012 07:14'! packageFileDirectory packageFileDirectory ifNil: [ packageFileDirectory := self fileUtils directoryFromPath: directory relativeTo: stream directory ]. ^ packageFileDirectory! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'dkh 07/07/2013 22:10'! repository ^ stream! ! !MCFileTreeWriter methodsFor: 'serializing' stamp: 'dkh 07/07/2013 15:42:23'! serializeVersionInfo: aVersionInfo infoWriter ifNil: [infoWriter := MCFileTreeVersionInfoWriter new]. ^ String streamContents: [:s | infoWriter stream: s. infoWriter writeVersionInfo: aVersionInfo]! ! !MCFileTreeWriter methodsFor: 'accessing' stamp: 'dkh 2/29/2012 13:59'! snapshotWriterClass ^ MCFileTreeAbstractStWriter! ! !MCFileTreeWriter methodsFor: 'visiting' stamp: 'dkh 8/10/2012 07:16'! subPackageFileDirectoryFor: directoryNameOrPath ^ cachedPackageFileDirectoryEntries at: directoryNameOrPath ifAbsentPut: [ | dir | dir := self fileUtils directoryFromPath: directoryNameOrPath relativeTo: self packageFileDirectory. self fileUtils ensureDirectoryExists: dir. dir ]! ! !MCFileTreeWriter methodsFor: 'visiting' stamp: 'dkh 2/16/2012 14:49:00'! writeSnapshot: aSnapshot (self snapshotWriterClass on: self) writeDefinitions: aSnapshot definitions! ! !MCFileTreeWriter methodsFor: 'visiting' stamp: 'dkh 8/10/2012 14:51'! writeVersion: aVersion | members | directory := (members := MCFileTreeRepository parseName: aVersion info name) last. self deleteExistingPackageStructureFor: members. self fileUtils ensureDirectoryExists: self packageFileDirectory. self initializePackageFileDirectoryCache. super writeVersion: aVersion! ! !MCRepository methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/5/2012 11:15:15'! retrieveVersionsWithPackageNames: packageNames ^ self readableFileNames collect: [ :each | | name | name := (each copyUpToLast: $.) copyUpTo: $(. name last isDigit ifFalse: [ Array with: name with: '' with: '' with: each ] ifTrue: [ Array with: (packageNames add: (name copyUpToLast: $-)) with: ((name copyAfterLast: $-) copyUpTo: $.) with: ((name copyAfterLast: $-) copyAfter: $.) asInteger with: each "pkg name" "user" "version" ] ]! ! !MCFileTreeRepository class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 14:27'! defaultPackageExtension ".tree, .pkg, .package are the only formats supported at the moment: .tree - original structure .pkg - snapshot structure .package - cypress structure" defaultPackageExtension ifNil: [ defaultPackageExtension := MCFileTreePackageStructureStWriter useCypressWriter ifTrue: [ '.package' ] ifFalse: [ '.pkg' ] ]. ^ defaultPackageExtension! ! !MCFileTreeRepository class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 14:36'! defaultPackageExtension: aString ".tree and .pkg are the only two formats supported at the moment" "self defaultPackageExtension:'.package'" (#('.tree' '.pkg' '.package') includes: aString) ifFalse: [ self error: 'Unsupported package extension: ' , aString printString ]. defaultPackageExtension := aString! ! !MCFileTreeRepository class methodsFor: 'accessing' stamp: 'dkh 07/10/2013 11:43:55'! defaultPropertyFileExtension defaultPropertyFileExtension ifNil: [ defaultPropertyFileExtension := '.json' ]. ^ defaultPropertyFileExtension! ! !MCFileTreeRepository class methodsFor: 'accessing' stamp: 'dkh 07/10/2013 11:43:55'! defaultPropertyFileExtension: aString "self defaultPropertyFileExtension:'.ston'" self validatePropertyFileExtension: aString. defaultPropertyFileExtension := aString! ! !MCFileTreeRepository class methodsFor: 'instance creation' stamp: 'dkh 2/16/2012 14:49:00'! description ^ 'filetree://'! ! !MCFileTreeRepository class methodsFor: 'utility' stamp: 'dkh 2/29/2012 09:40:37'! parseName: aString ^ self parseName: aString extension: self defaultPackageExtension! ! !MCFileTreeRepository class methodsFor: 'utility' stamp: 'dkh 2/16/2012 14:49:00'! parseName: aString extension: extension "picked up from GoferVersionReference>>parseName:" | info basicName package branch author versionNumber packageName | basicName := aString last isDigit ifTrue: [ aString ] ifFalse: [ (aString copyUpToLast: $.) copyUpTo: $( ]. package := basicName copyUpToLast: $-. (package includes: $.) ifFalse: [ branch := '' ] ifTrue: [ branch := '.' , (package copyAfter: $.). package := package copyUpTo: $. ]. author := (basicName copyAfterLast: $-) copyUpToLast: $.. versionNumber := (basicName copyAfterLast: $-) copyAfterLast: $.. (versionNumber notEmpty and: [ versionNumber allSatisfy: [ :each | each isDigit ] ]) ifTrue: [ versionNumber := versionNumber asNumber ] ifFalse: [ versionNumber := 0 ]. packageName := package , branch. ^ {packageName. author. versionNumber. (packageName , extension)}! ! !MCFileTreeRepository class methodsFor: 'accessing' stamp: 'dkh 07/10/2013 11:43:55'! validatePropertyFileExtension: aString "see Issue #90: https://github.com/dalehenrich/filetree/issues/90" (#('.json' '.ston') includes: aString) ifFalse: [ self error: 'Unsupported property file extension: ' , aString printString ]! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! allFileNames ^ (self directory entries select: [ :entry | entry isDirectory and: [ self canReadFileNamed: entry name ] ]) collect: [ :entry | entry name ]! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! allFileNamesForVersionNamed: aString ^ self filterFileNames: self readableFileNames forVersionNamed: aString! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:49:00'! asRepositorySpecFor: aMetacelloMCProject ^ aMetacelloMCProject repositorySpec description: self description; type: 'filetree'; yourself! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 4/5/2012 10:33'! basicStoreVersion: aVersion self readonly ifTrue: [ ^ self error: 'The filetree repository: ' , self description printString , ' was created read only.' ]. MCFileTreeWriter fileOut: aVersion on: self! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 2/16/2012 14:49:00'! cachedFileNames ^ #()! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 2/29/2012 10:15'! canReadFileNamed: aString ^ (aString endsWith: self packageExtension) or: [ (aString endsWith: '.tree') or: [ "Cypress format" aString endsWith: '.package' ] ]! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 07/10/2013 11:43:55'! defaultRepositoryProperties ^ Dictionary new at: 'packageExtension' put: self class defaultPackageExtension; at: 'propertyFileExtension' put: self propertyFileExtension; yourself! ! !MCFileTreeRepository methodsFor: 'descriptions' stamp: 'dkh 2/16/2012 14:49:00'! description ^ self class description , super description! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 3/7/2012 17:09:47'! directory: aDirectory super directory: aDirectory. repositoryProperties := nil. "force properties to be reloaded from new location" self repositoryProperties "NOW"! ! !MCFileTreeRepository methodsFor: 'actions' stamp: 'dkh 6/16/2012 09:02'! fileDirectoryOn: directoryPath ^ self fileUtils directoryFromPath: directoryPath relativeTo: self directory! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 8/10/2012 14:55:31.237'! fileUtils ^ MCFileTreeFileUtils current! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! filterFileNames: aCollection forVersionNamed: aString ^ aCollection select: [:ea | (self versionNameFromFileName: ea) = aString]! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/10/2013 11:43:55'! flushCache "force properties to be reread ... if the directory exists, otherwise let nature take it's course" super flushCache. directory ifNotNil: [ (MCFileTreeFileUtils current directoryExists: directory) ifTrue: [ repositoryProperties := nil. self repositoryProperties ] ]! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! goferVersionFrom: aVersionReference "until we no longer find .tree directories in the wild" ((self readableFileNames collect: [ :fileName | self fileDirectoryOn: fileName ]) select: [ :packageDirectory | self fileUtils directoryExists: packageDirectory ]) collect: [ :packageDirectory | (self versionInfoForPackageDirectory: packageDirectory) name = aVersionReference name ifTrue: [ ^ self loadVersionFromFileNamed: (self fileUtils directoryName: packageDirectory) ] ]. ^ nil! ! !MCFileTreeRepository methodsFor: 'actions' stamp: 'dkh 6/27/2012 20:14'! packageDescriptionFromPackageDirectory: packageDirectory | filename info extension | filename := self fileUtils current directoryName: packageDirectory. extension := filename copyFrom: (filename lastIndexOf: $.) to: filename size. ^ ((self packageExtension ~= '.package' and: [ (self fileUtils filePathExists: 'version' relativeTo: packageDirectory) and: [ self fileUtils filePathExists: 'package' relativeTo: packageDirectory ] ]) or: [ | dir | dir := self fileUtils directoryFromPath: MCFileTreeStCypressWriter monticelloMetaDirName relativeTo: packageDirectory. self fileUtils directoryExists: dir ]) ifTrue: [ info := self versionInfoForPackageDirectory: packageDirectory. self parseName: info name extension: extension ] ifFalse: [ {(filename copyFrom: 1 to: (filename lastIndexOf: $.) - 1). 'cypress'. 1. filename} ]! ! !MCFileTreeRepository methodsFor: 'actions' stamp: 'dkh 2/16/2012 14:49:00'! packageDescriptionsFromReadableFileNames ^ ((self readableFileNames collect: [ :fileName | self fileDirectoryOn: fileName ]) select: [ :packageDirectory | self fileUtils directoryExists: packageDirectory ]) collect: [ :packageDirectory | self packageDescriptionFromPackageDirectory: packageDirectory ]! ! !MCFileTreeRepository methodsFor: 'private' stamp: 'dkh 2/29/2012 10:11'! packageExtension ^ self repositoryProperties at: 'packageExtension' ifAbsent: [ self class defaultPackageExtension ]! ! !MCFileTreeRepository methodsFor: 'private' stamp: 'dkh 2/29/2012 11:39'! parseName: aString extension: extension ^ self class parseName: aString extension: extension! ! !MCFileTreeRepository methodsFor: 'private' stamp: 'dkh 07/10/2013 11:43:55'! propertyFileExtension ^ self repositoryProperties at: 'propertyFileExtension' ifAbsent: [ self class defaultPropertyFileExtension ]! ! !MCFileTreeRepository methodsFor: 'private' stamp: 'dkh 07/10/2013 11:43:55'! propertyFileExtension: propertyFileExtension self class validatePropertyFileExtension: propertyFileExtension. self repositoryProperties at: 'propertyFileExtension' put: propertyFileExtension. self writeRepositoryProperties! ! !MCFileTreeRepository methodsFor: 'i/o' stamp: 'dkh 2/16/2012 14:49:00'! readStreamForFileNamed: aString do: aBlock ^ aBlock value: self directory! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:49:00'! readonly readonly ifNil: [ readonly := false ]. ^ readonly! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:49:00'! readonly: anObject readonly := anObject! ! !MCFileTreeRepository methodsFor: 'accessing' stamp: 'dkh 8/10/2012 07:54'! repositoryProperties repositoryProperties ifNil: [ repositoryProperties := Dictionary new. (self fileUtils directoryExists: directory) ifFalse: [ self error: 'filetree:// repository ' , (self fileUtils directoryPathString: self directory) printString , ' does not exist.' ]. (self directory entries detect: [ :entry | entry name = '.filetree' ] ifNone: [ ]) ifNil: [ repositoryProperties := self defaultRepositoryProperties. self writeRepositoryProperties ] ifNotNil: [ :configEntry | configEntry readStreamDo: [ :fileStream | repositoryProperties := MCFileTreeJsonParser parseStream: fileStream ] ] ]. ^ repositoryProperties! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! versionFromFileNamed: aString ^ self loadVersionFromFileNamed: aString! ! !MCFileTreeRepository methodsFor: 'actions' stamp: 'dkh 8/10/2012 07:56'! versionInfoForPackageDirectory: packageDirectory ^ ((MCReader readerClassForFileNamed: (self fileUtils directoryName: packageDirectory)) on: (self fileUtils parentDirectoryOf: packageDirectory) fileName: (self fileUtils directoryName: packageDirectory)) loadVersionInfo; info! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 07/08/2013 10:59:46'! versionInfoFromFileNamed: aString ^ self loadVersionInfoFromFileNamed: aString! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 2/16/2012 14:49:00'! versionNameFromFileName: aString | description | description := self packageDescriptionFromPackageDirectory: (self fileDirectoryOn: aString). ^ description first , '-' , description second , '.' , description third printString! ! !MCFileTreeRepository methodsFor: 'interface' stamp: 'dkh 07/08/2013 10:59:46'! versionWithInfo: aVersionInfo ifAbsent: errorBlock (self allFileNamesForVersionNamed: aVersionInfo name) ifNotEmpty: [ :aCollection | ^ self versionFromFileNamed: aCollection first ]. ^ errorBlock value! ! !MCFileTreeRepository methodsFor: 'as yet unclassified' stamp: 'dkh 8/10/2012 09:44'! writeRepositoryProperties self fileUtils writeStreamFor: '.filetree' in: self directory do: [ :fileStream | | keyCount propertyCount | repositoryProperties ifNil: [ repositoryProperties := self defaultRepositoryProperties ]. keyCount := repositoryProperties size. propertyCount := 0. fileStream lineEndConvention: #'lf'. fileStream nextPutAll: '{'. repositoryProperties keysAndValuesDo: [ :propertyName :propertyValue | propertyCount := propertyCount + 1. fileStream nextPut: $"; nextPutAll: propertyName asString; nextPutAll: '" : "'; nextPutAll: propertyValue asString; nextPut: $"; yourself. propertyCount < keyCount ifTrue: [ fileStream nextPutAll: ','; cr ] ]. fileStream nextPutAll: ' }' ] ! ! !MCFileTreeRepository methodsFor: 'i/o' stamp: 'dkh 2/16/2012 14:49:00'! writeStreamForFileNamed: aString replace: aBoolean do: aBlock self error: 'we do not open a single stream, but write multiple files'! ! !MCFileRepositoryInspector methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/5/2012 11:15:15' prior: 49081145! refresh | packageNames | packageNames := Set new. packageList := nil. versions := repository retrieveVersionsWithPackageNames: packageNames. newer := Set new. inherited := Set new. loaded := Set new. MCWorkingCopy allManagers do: [ :each | | latest | each ancestors do: [ :ancestor | loaded add: ancestor name. ancestor ancestorsDoWhileTrue: [ :heir | (inherited includes: heir name) ifTrue: [ false ] ifFalse: [ inherited add: heir name. true ] ] ]. latest := (versions select: [ :v | v first = each package name ]) detectMax: [ :v | v third ]. (latest notNil and: [ each ancestors allSatisfy: [ :ancestor | | av | av := ((ancestor name copyAfterLast: $-) copyAfter: $.) asInteger. av < latest third or: [ av = latest third and: [ ((ancestor name copyAfterLast: $-) copyUpTo: $.) ~= latest second ] ] ] ]) ifTrue: [ newer add: each package name ] ]. " select: [ :each | packageNames includes: each packageName]" self changed: #packageList; changed: #versionList! ! !Boolean methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" aStream nextPutAll: self printString! ! !MCFileTreeAbstractReader class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 17:43'! monticelloMetaDirName ^ '.'! ! !MCFileTreeAbstractReader class methodsFor: 'reading' stamp: 'dkh 2/16/2012 14:49:00'! on: s fileName: f ^ (self on: s) packageDirectory: f; yourself! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 3/1/2012 12:09'! addClassAndMethodDefinitionsFromDirectory: aDirectory self subclassResponsibility! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 14:00'! addClassAndMethodDefinitionsFromDirectoryEntries: entries | timestamp | self noMethodMetaData ifTrue: [ timestamp := self info author , ' ' , self info date mmddyyyy , ' ' , self info time print24 ]. entries do: [ :element | element isDirectory ifTrue: [ | directory | directory := self fileUtils directoryFromEntry: element. ((self separateMethodMetaAndSource or: [ self noMethodMetaData ]) ifTrue: [ directory entries select: [ :entry | entry name endsWith: '.st' ] ] ifFalse: [ directory entries ]) do: [ :file | | definition | (definition := self definitionFromFile: file inDirectory: directory) ifNotNil: [ definition isMethodDefinition ifTrue: [ self separateMethodMetaAndSource ifTrue: [ directory fileNamed: definition selector asString , '.meta' do: [ :fileStream | definition setTimeStamp: (Author fixStamp: fileStream contents) ] ]. self noMethodMetaData ifTrue: [ definition setTimeStamp: timestamp ] ]. definitions add: definition ] ] ] ]! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 2/16/2012 14:49:00'! addDefinitionFromFile: directoryEntry inDirectory: aDirectory (self definitionFromFile: directoryEntry inDirectory: aDirectory) ifNotNil: [ :def | definitions add: def ]! ! !MCFileTreeAbstractReader methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:49:00'! basicVersion ^ (MCVersion new) setPackage: self package info: self info snapshot: self snapshot dependencies: self dependencies; yourself! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 07:39'! definitionFromFile: directoryEntry inDirectory: aDirectory | defs reader | directoryEntry ifNil: [ ^ nil ]. self fileUtils readStreamFor: directoryEntry name in: aDirectory do: [ :fileStream | | methodDefinition | reader := MCStReader on: fileStream. (defs := reader definitions) size <= 1 ifFalse: [ self error: 'we should be writing exactly 1 definition per file' ] ]. defs size = 0 ifTrue: [ ^ nil ]. ^ defs first! ! !MCFileTreeAbstractReader methodsFor: 'accessing' stamp: 'dkh 8/10/2012 05:39'! fileUtils ^ MCFileTreeFileUtils current! ! !MCFileTreeAbstractReader methodsFor: 'testing' stamp: 'dkh 8/10/2012 05:44'! hasMonticelloMetadata ^ (self fileUtils directoryExists: (self fileUtils directoryFromPath: MCFileTreeStCypressWriter monticelloMetaDirName relativeTo: packageDirectory)) or: [ (self fileUtils filePathExists: 'version' relativeTo: packageDirectory) and: [ self fileUtils filePathExists: 'package' relativeTo: packageDirectory ] ]! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 3/1/2012 12:07'! loadDefinitions | entries | definitions := OrderedCollection new. entries := packageDirectory entries. self addDefinitionFromFile: (entries detect: [ :entry | entry name beginsWith: 'categories' ] ifNone: [ ]) inDirectory: packageDirectory; addClassAndMethodDefinitionsFromDirectory: packageDirectory; addDefinitionFromFile: (entries detect: [ :entry | entry name beginsWith: 'initializers' ] ifNone: [ ]) inDirectory: packageDirectory! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 07:18'! loadDependencies | dependencyDir directoryPath | directoryPath := self monticelloMetaDirName , self fileUtils pathNameDelimiter asString , 'dependencies'. dependencyDir := self fileUtils directoryFromPath: directoryPath relativeTo: packageDirectory. (self fileUtils directoryExists: dependencyDir) ifFalse: [ ^ dependencies := #() ]. dependencies := OrderedCollection new. dependencyDir entries do: [ :entry | dependencies add: (MCVersionDependency package: (MCPackage named: entry name) info: (self extractInfoFrom: (self parseMember: 'dependencies' , self fileUtils pathNameDelimiter asString , entry name))) ]. dependencies := dependencies asArray! ! !MCFileTreeAbstractReader methodsFor: 'accessing' stamp: 'dkh 4/4/2012 17:43'! monticelloMetaDirName ^ self class monticelloMetaDirName! ! !MCFileTreeAbstractReader methodsFor: 'testing' stamp: 'dkh 3/1/2012 10:11'! noMethodMetaData ^ self packageProperties at: 'noMethodMetaData' ifAbsent: [ false ]! ! !MCFileTreeAbstractReader methodsFor: 'accessing' stamp: 'dkh 8/10/2012 05:46'! packageDirectory: aDirectoryName packageDirectory := self fileUtils directoryFromPath: aDirectoryName relativeTo: stream! ! !MCFileTreeAbstractReader methodsFor: 'accessing' stamp: 'dkh 3/1/2012 11:56'! packageProperties packageProperties ifNil: [ packageProperties := Dictionary new. (packageDirectory entries detect: [ :entry | entry name = '.filetree' ] ifNone: [ ]) ifNotNil: [ :configEntry | configEntry readStreamDo: [ :fileStream | | jsonObject structureVersion | [ (jsonObject := MCFileTreeJsonParser parseStream: fileStream) isFloat ifTrue: [ " 0.0 - original structure 0.1 - separate files for method metaData (timestamp) and source 0.2 - no method metaData file" packageProperties := Dictionary new. structureVersion := jsonObject printShowingDecimalPlaces: 1. packageProperties at: 'noMethodMetaData' put: structureVersion = '0.2'. packageProperties at: 'separateMethodMetaAndSource' put: structureVersion = '0.1' ] ifFalse: [ packageProperties := jsonObject. ((packageProperties at: 'noMethodMetaData' ifAbsent: [ false ]) and: [ packageProperties at: 'separateMethodMetaAndSource' ifAbsent: [ false ] ]) ifTrue: [ self error: 'noMethodMetaData and separateMethodMetaAndSource cannot both be true' ] ] ] on: Error do: [ :ex | Transcript cr; show: 'Error reading package properties (.filetree): ' , packageDirectory pathName , ' :: ' , ex description ] ] ] ]. ^ packageProperties! ! !MCFileTreeAbstractReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 07:43'! parseMember: fileName | directory tokens | directory := self fileUtils directoryFromPath: self monticelloMetaDirName relativeTo: packageDirectory. self fileUtils readStreamFor: fileName in: directory do: [ :fileStream | tokens := self scanner scan: fileStream ]. ^ self associate: tokens! ! !MCFileTreeAbstractReader methodsFor: 'testing' stamp: 'dkh 3/1/2012 10:10'! separateMethodMetaAndSource ^ self packageProperties at: 'separateMethodMetaAndSource' ifAbsent: [ false ]! ! !MCFileTreeStReader class methodsFor: 'accessing' stamp: 'dkh 3/1/2012 12:04'! extension ^ 'tree'! ! !MCFileTreeStReader methodsFor: 'utilities' stamp: 'dkh 3/1/2012 12:18'! addClassAndMethodDefinitionsFromDirectory: aDirectory self addClassAndMethodDefinitionsFromDirectoryEntries: aDirectory entries! ! !MCFileTreeStCypressReader class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 14:19'! extension ^ 'package'! ! !MCFileTreeStCypressReader class methodsFor: 'accessing' stamp: 'dkh 4/4/2012 17:44'! monticelloMetaDirName ^ MCFileTreeStCypressWriter monticelloMetaDirName! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'topa 7/22/2013 01:41'! addClassAndMethodDefinitionsFromDirectory: aDirectory aDirectory entries do: [ :entry | (entry name endsWith: '.trait') ifTrue: [ self addTraitAndMethodDefinitionsFromEntry: entry ]. (entry name endsWith: '.class') ifTrue: [ self addClassAndMethodDefinitionsFromEntry: entry ]. (entry name endsWith: '.extension') ifTrue: [ self addExtensionClassAndMethodDefinitionsFromEntry: entry ] ]! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 13:48'! addClassAndMethodDefinitionsFromEntry: classEntry | classDirectory classPropertiesDict classComment entries methodPropertiesDict | classDirectory := self fileUtils directoryFromEntry: classEntry. ((entries := classDirectory entries) detect: [:entry | self isPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | classPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. (entries detect: [ :entry | entry name = 'README.md' ] ifNone: [ ]) ifNotNil: [ :commentEntry | commentEntry readStreamDo: [ :fileStream | classComment := fileStream contents ] ]. methodPropertiesDict := Dictionary new. (entries detect: [ :entry | self isMethodPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | "Issue 33: https://github.com/dalehenrich/filetree/issues/33" methodPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. self addClassDefinitionFrom: classPropertiesDict comment: classComment withSqueakLineEndings. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') methodProperties: methodPropertiesDict in: entries! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'dkh 6/27/2012 14:18'! addClassDefinitionFrom: classPropertiesDict comment: classComment definitions add: (MCClassDefinition name: (classPropertiesDict at: 'name') superclassName: (classPropertiesDict at: 'super') traitComposition: (classPropertiesDict at: 'traitcomposition' ifAbsent: [ '{}' ]) classTraitComposition: (classPropertiesDict at: 'classtraitcomposition' ifAbsent: [ '{}' ]) category: (classPropertiesDict at: 'category' ifAbsent: [ self packageNameFromPackageDirectory ]) instVarNames: (classPropertiesDict at: 'instvars' ifAbsent: [ #() ]) classVarNames: (classPropertiesDict at: 'classvars' ifAbsent: [ #() ]) poolDictionaryNames: (classPropertiesDict at: 'pools' ifAbsent: [ #() ]) classInstVarNames: (classPropertiesDict at: 'classinstvars' ifAbsent: [ #() ]) type: (classPropertiesDict at: 'type' ifAbsent: [ 'normal' ]) asSymbol comment: classComment commentStamp: (classPropertiesDict at: 'commentStamp' ifAbsent: [ '' ]))! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 14:00'! addExtensionClassAndMethodDefinitionsFromEntry: classEntry | classDirectory classPropertiesDict methodPropertiesDict entries | classDirectory := self fileUtils directoryFromEntry: classEntry. ((entries := classDirectory entries) detect: [ :entry | self isPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | classPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. methodPropertiesDict := Dictionary new. (entries detect: [ :entry | self isMethodPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | "Issue 33: https://github.com/dalehenrich/filetree/issues/33" methodPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') methodProperties: methodPropertiesDict in: entries! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 14:01'! addMethodDefinitionsForClass: className methodProperties: methodProperties in: entries entries do: [ :entry | | classIsMeta | classIsMeta := false. entry name = 'class' ifTrue: [ classIsMeta := true ]. (entry name = 'instance' or: [ entry name = 'class' ]) ifTrue: [ ((self fileUtils directoryFromEntry: entry) entries select: [ :each | each name endsWith: '.st' ]) do: [ :methodEntry | methodEntry readStreamDo: [ :fileStream | | category source timestamp selector | category := fileStream nextLine. source := fileStream upToEnd. selector := self methodSelectorFor: source. timestamp := methodProperties at: (classIsMeta ifTrue: [ 'class' ] ifFalse: [ 'instance' ]) ifPresent: [ :map | map at: selector asString ifAbsent: [ ] ]. "Issue 33: https://github.com/dalehenrich/filetree/issues/33" timestamp ifNil: [ timestamp := self info author , ' ' , self info date mmddyyyy , ' ' , self info time print24 ]. definitions add: (MCMethodDefinition className: className classIsMeta: classIsMeta selector: selector category: category timeStamp: timestamp source: source) ] ] ] ]! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'topa 7/22/2013 14:41'! addTraitAndMethodDefinitionsFromEntry: classEntry | classDirectory classPropertiesDict classComment entries methodPropertiesDict | classDirectory := self fileUtils directoryFromEntry: classEntry. ((entries := classDirectory entries) detect: [:entry | self isPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | classPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. (entries detect: [ :entry | entry name = 'README.md' ] ifNone: [ ]) ifNotNil: [ :commentEntry | commentEntry readStreamDo: [ :fileStream | classComment := fileStream contents ] ] ifNil: [ classComment := '' ]. methodPropertiesDict := Dictionary new. (entries detect: [ :entry | self isMethodPropertyFile: entry] ifNone: [ ]) ifNotNil: [ :propertyEntry | propertyEntry readStreamDo: [ :fileStream | "Issue 33: https://github.com/dalehenrich/filetree/issues/33" methodPropertiesDict := MCFileTreeJsonParser parseStream: fileStream ] ]. self addTraitDefinitionFrom: classPropertiesDict comment: classComment withSqueakLineEndings. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') methodProperties: methodPropertiesDict in: entries! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'topa 7/22/2013 15:15'! addTraitDefinitionFrom: traitPropertiesDict comment: traitComment definitions add: (MCTraitDefinition name: (traitPropertiesDict at: 'name') traitComposition: (traitPropertiesDict at: 'traitcomposition' ifAbsent: [ '{}' ]) category: (traitPropertiesDict at: 'category' ifAbsent: [ self packageNameFromPackageDirectory ]) comment: traitComment commentStamp: (traitPropertiesDict at: 'commentStamp' ifAbsent: [ '' ])). traitPropertiesDict at: 'classtraitcomposition' ifPresent: [:classTraitComposition | definitions add: (MCClassTraitDefinition baseTraitName: (traitPropertiesDict at: 'name') classTraitComposition: classTraitComposition)].! ! !MCFileTreeStCypressReader methodsFor: 'accessing' stamp: 'dkh 6/27/2012 20:19'! basicVersion self hasMonticelloMetadata ifTrue: [ ^ super basicVersion ]. ^ MCVersion new setPackage: self package info: self info snapshot: self snapshot dependencies: #(); yourself! ! !MCFileTreeStCypressReader methodsFor: 'private' stamp: 'dkh 6/16/2013 12:47:20'! isMethodPropertyFile: entry ^ entry name = 'methodProperties.ston' or: [ entry name = 'methodProperties.json']! ! !MCFileTreeStCypressReader methodsFor: 'private' stamp: 'dkh 6/16/2013 12:47:20'! isPropertyFile: entry ^ entry name = 'properties.ston' or: [ entry name = 'properties.json']! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'dkh 5/23/2013 21:05'! loadDefinitions | entries directory | definitions := OrderedCollection new. directory := self fileUtils directoryFromPath: self monticelloMetaDirName relativeTo: packageDirectory. (self fileUtils directoryExists: directory) ifTrue: [ entries := directory entries. self addDefinitionFromFile: (entries detect: [ :entry | entry name beginsWith: 'categories' ] ifNone: [ ]) inDirectory: directory ] ifFalse: [definitions add: (MCOrganizationDefinition categories: {self packageNameFromPackageDirectory }) ]. self addClassAndMethodDefinitionsFromDirectory: packageDirectory. (self fileUtils directoryExists: directory) ifTrue: [ self addDefinitionFromFile: (entries detect: [ :entry | entry name beginsWith: 'initializers' ] ifNone: [ ]) inDirectory: directory ]! ! !MCFileTreeStCypressReader methodsFor: 'accessing' stamp: 'dkh 6/27/2012 20:21'! loadPackage self hasMonticelloMetadata ifTrue: [ ^ super loadPackage ]. package := MCPackage named: self packageNameFromPackageDirectory! ! !MCFileTreeStCypressReader methodsFor: 'accessing' stamp: '08/08/2013 15:01'! loadVersionInfo self hasMonticelloMetadata ifTrue: [ ^ info := self extractInfoFrom: (self parseMember: 'version') ]. info := MCVersionInfo name: self packageNameFromPackageDirectory , '-cypress.1' id: UUID new message: 'fabricated from a Cypress format repository' date: Date today time: Time now author: '' ancestors: #() stepChildren: #() ! ! !MCFileTreeStCypressReader methodsFor: 'utilities' stamp: 'ChristopheDemarey 5/31/2013 23:28'! methodSelectorFor: source ^ Object compilerClass new parseSelector: source ! ! !MCFileTreeStCypressReader methodsFor: 'accessing' stamp: 'dkh 8/10/2012 14:55'! packageNameFromPackageDirectory | filename | filename := self fileUtils directoryName: packageDirectory. ^ filename copyFrom: 1 to: (filename lastIndexOf: $.) - 1! ! !MCFileTreeStSnapshotReader class methodsFor: 'accessing' stamp: 'dkh 3/1/2012 12:06'! extension ^ 'pkg'! ! !MCFileTreeStSnapshotReader methodsFor: 'utilities' stamp: 'dkh 8/10/2012 14:03'! addClassAndMethodDefinitionsFromDirectory: aDirectory | snapshot classes entries extensions | snapshot := self fileUtils directoryFromPath: 'snapshot' relativeTo: aDirectory. classes := self fileUtils directoryFromPath: 'classes' relativeTo: snapshot. (self fileUtils directoryExists: classes) ifTrue: [ self addClassAndMethodDefinitionsFromDirectoryEntries: (entries := classes entries). "load .st files from subdirectories (*.class) of snapshot/classes ... class defintions" entries do: [ :classDirectoryEntry | | classDirectory | classDirectory := self fileUtils directoryFromEntry: classDirectoryEntry. self addClassAndMethodDefinitionsFromDirectoryEntries: classDirectory entries "load .st files from subdirectories (class or instance) of snapshot/classes/*.class ... method definitions" ] ]. extensions := self fileUtils directoryFromPath: 'extensions' relativeTo: snapshot. (self fileUtils directoryExists: extensions) ifTrue: [ extensions entries do: [ :classDirectoryEntry | | classDirectory | classDirectory := self fileUtils directoryFromEntry: classDirectoryEntry. self addClassAndMethodDefinitionsFromDirectoryEntries: classDirectory entries "load .st files from subdirectories (class or instance) of snapshot/extensions/*.class ... method definitions" ] ]! ! !UndefinedObject methodsFor: '*monticellofiletree-core' stamp: 'topa 7/22/2013 01:03'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" aStream nextPutAll: 'null'.! ! !MCFileTreePackageStructureStWriter class methodsFor: 'accessing' stamp: 'dkh 4/5/2012 10:37'! useCypressWriter "MCFileTreeRepository defaultPackageExtension:'.package'" "MCFileTreeRepository defaultPackageExtension:'.pkg'" ^ true! ! !MCFileTreePackageStructureStWriter class methodsFor: 'accessing' stamp: 'dkh 3/1/2012 10:30'! useSnapShotWriter ^ MCFileTreeRepository defaultPackageExtension = '.pkg'! ! !MCFileTreePackageStructureStWriter methodsFor: 'accessing' stamp: 'dkh 2/29/2012 13:46'! absentInitializers ^ initializers reject: [ :each | Smalltalk hasClassNamed: each key ]! ! !MCFileTreePackageStructureStWriter methodsFor: 'visiting' stamp: 'dkh 2/29/2012 13:46'! acceptVisitor: aVisitor forDefinitions: aCollection (MCDependencySorter sortItems: aCollection) do: [ :ea | ea accept: aVisitor ] displayingProgress: 'Writing definitions...'! ! !MCFileTreePackageStructureStWriter methodsFor: 'accessing' stamp: 'dkh 2/29/2012 13:45'! initializers: aCollection initializers := aCollection! ! !MCFileTreePackageStructureStWriter methodsFor: 'accessing' stamp: 'dkh 2/29/2012 13:46'! presentInitializers ^ initializers select: [ :each | Smalltalk hasClassNamed: each key ]! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 2/29/2012 13:45'! writeAbsentInitializers (self absentInitializers asSortedCollection: [ :a :b | a key <= b key ]) do: [ :association | stream nextPutAll: association value contents ]! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 2/29/2012 14:48'! writeClassDefinition: definition self chunkContents: [ :s | definition printDefinitionOn: s ]! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 2/29/2012 13:42'! writeDefinitions: aCollection "the correct initialization order is unknown if some classes are missing in the image" initializers := Set new. self acceptVisitor: self forDefinitions: aCollection; writePresentInitializers; writeAbsentInitializers! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 2/16/2012 14:49:00'! writeMethodPreamble: definition stream cr; nextPut: $!!; nextPutAll: definition fullClassName; nextPutAll: ' methodsFor: '; nextPutAll: definition category asString printString; nextPutAll: '!!'; cr! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 2/29/2012 13:45'! writePresentInitializers | orderedClasses presentInitializers | presentInitializers := self presentInitializers. orderedClasses := (Class superclassOrder: (presentInitializers collect: [ :each | Smalltalk classOrTraitNamed: each key ])) collect: [ :each | each name ]. orderedClasses do: [ :className | stream nextPutAll: (presentInitializers detect: [ :each | each key = className ]) value contents ]! ! !MCFileTreePackageStructureStWriter methodsFor: 'writing' stamp: 'dkh 3/1/2012 14:21'! writeProperties stream nextPut: ${; cr; nextPutAll: ' "noMethodMetaData" : true,'; cr; nextPutAll: ' "separateMethodMetaAndSource" : false'; cr; nextPut: $}; cr! ! !MCFileTreeVersionInfoWriter methodsFor: 'serialization' stamp: 'dkh 5/23/2013 21:16'! writeVersionInfo: aVersionInfo (self isWritten: aVersionInfo) ifTrue: [^ stream nextPutAll: '(id '; print: aVersionInfo id asString; nextPut: $) ]. stream nextPut: $(. #(name message id date time author) do: [:sel | stream nextPutAll: sel; space; print: (((aVersionInfo perform: sel) ifNil: ['']) asString ); space ]. stream nextPutAll: 'ancestors ('. aVersionInfo ancestors do: [:ea | self writeVersionInfo: ea]. stream nextPutAll: ') stepChildren ('. aVersionInfo stepChildren do: [:ea | self writeVersionInfo: ea]. stream nextPutAll: '))'. self wrote: aVersionInfo! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/9/2012 09:15'! buildPathFrom: pathCollection ^ String streamContents: [ :stream | pathCollection do: [ :element | stream nextPutAll: element ] separatedBy: [ stream nextPut: self pathNameDelimiter ] ]! ! !MCFileTreeFileUtils class methodsFor: 'accessing' stamp: 'dkh 8/8/2012 22:36'! current ^ Current! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! default self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! deleteAll: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! directoryExists: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! directoryFromPath: directoryPath self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! directoryFromPath: directoryPath relativeTo: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! directoryName: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! directoryPathString: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! ensureDirectoryExists: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:59'! ensureFilePathExists: fileNameOrPath relativeTo: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! filePathExists: filePath relativeTo: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'initialization' stamp: 'dkh 8/8/2012 22:37'! install Current := self! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! parentDirectoryOf: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! pathNameDelimiter self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! readStreamFor: filePath in: aDirectory do: aBlock self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! resolvePath: path in: aDirectory self subclassResponsibility! ! !MCFileTreeFileUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 10:00'! writeStreamFor: filePath in: aDirectory do: aBlock self subclassResponsibility! ! !MCFileTreeJsonParser class methodsFor: 'instance creation' stamp: 'dkh 2/16/2012 14:39:25'! new self error: 'Instantiate the parser with a stream.'! ! !MCFileTreeJsonParser class methodsFor: 'instance creation' stamp: 'dkh 2/16/2012 14:39:25'! on: aStream ^ self basicNew initializeOn: aStream! ! !MCFileTreeJsonParser class methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:39:25'! parse: aString ^ self parseStream: aString readStream! ! !MCFileTreeJsonParser class methodsFor: 'accessing' stamp: 'dkh 2/16/2012 14:39:25'! parseStream: aStream ^ (self on: aStream) parse! ! !MCFileTreeJsonParser methodsFor: 'adding' stamp: 'dkh 2/16/2012 14:39:25'! addProperty: anAssociation to: anObject "Add the property anAssociation described with key and value to anObject. Subclasses might want to refine this implementation." ^ anObject add: anAssociation; yourself! ! !MCFileTreeJsonParser methodsFor: 'adding' stamp: 'dkh 2/16/2012 14:39:25'! addValue: anObject to: aCollection "Add anObject to aCollection. Subclasses might want to refine this implementation." ^ aCollection copyWith: anObject! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createArray "Create an empty collection. Subclasses might want to refine this implementation." ^ Array new! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createFalse "Create the false literal. Subclasses might want to refine this implementation." ^ false! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createNull "Create the null literal. Subclasses might want to refine this implementation." ^ nil! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createNumber: aString "Create a number literal. Subclasses might want to refine this implementation." ^ aString asNumber! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createObject "Create an empty object. Subclasses might want to refine this implementation." ^ Dictionary new! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createProperty: aKey with: aValue "Create an empty attribute value pair. Subclasses might want to refine this implementation." ^ aKey -> aValue! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createString: aString "Create a string literal. Subclasses might want to refine this implementation." ^ aString! ! !MCFileTreeJsonParser methodsFor: 'creating' stamp: 'dkh 2/16/2012 14:39:25'! createTrue "Create the true literal. Subclasses might want to refine this implementation." ^ true! ! !MCFileTreeJsonParser methodsFor: 'private' stamp: 'dkh 2/16/2012 14:39:25'! expect: aString "Expects aString and consume input, throw an error otherwise." ^ (self match: aString) ifFalse: [ self error: aString , ' expected' ]! ! !MCFileTreeJsonParser methodsFor: 'initialization' stamp: 'dkh 2/16/2012 14:39:25'! initializeOn: aStream self initialize. stream := aStream! ! !MCFileTreeJsonParser methodsFor: 'private' stamp: 'dkh 2/16/2012 14:39:25'! match: aString "Tries to match aString, consume input and answer true if successful." | position | position := stream position. aString do: [ :each | (stream atEnd or: [ stream next ~= each ]) ifTrue: [ stream position: position. ^ false ] ]. self whitespace. ^ true! ! !MCFileTreeJsonParser methodsFor: 'parsing' stamp: 'dkh 2/16/2012 14:39:25'! parse | result | result := self whitespace; parseValue. stream atEnd ifFalse: [ self error: 'end of input expected' ]. ^ result! ! !MCFileTreeJsonParser methodsFor: 'parsing' stamp: 'dkh 2/16/2012 14:39:25'! parseArray | result | self expect: '['. result := self createArray. (self match: ']') ifTrue: [ ^ result ]. [ stream atEnd ] whileFalse: [ result := self addValue: self parseValue to: result. (self match: ']') ifTrue: [ ^ result ]. self expect: ',' ]. self error: 'end of array expected'! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 2/16/2012 14:39:25'! parseCharacter | char | (char := stream next) = $\ ifFalse: [ ^ char ]. (char := stream next) = $" ifTrue: [ ^ char ]. char = $\ ifTrue: [ ^ char ]. char = $/ ifTrue: [ ^ char ]. char = $b ifTrue: [ ^ Character backspace ]. char = $f ifTrue: [ ^ Character newPage ]. char = $n ifTrue: [ ^ Character lf ]. char = $r ifTrue: [ ^ Character cr ]. char = $t ifTrue: [ ^ Character tab ]. char = $u ifTrue: [ ^ self parseCharacterHex ]. self error: 'invalid escape character \' , (String with: char)! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 2/16/2012 14:39:25'! parseCharacterHex | value | value := self parseCharacterHexDigit. 3 timesRepeat: [ value := (value << 4) + self parseCharacterHexDigit ]. ^ Character codePoint: value! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 4/6/2012 15:56:14'! parseCharacterHexDigit | digit | stream atEnd ifFalse: [ digit := stream next charCode. (digit between: 48 and: 57) ifTrue: [ ^ digit - 48 ]. "$0" "$9" (digit between: 65 and: 70) ifTrue: [ ^ digit - 55 ]. "$A" "$F" (digit between: 97 and: 102) ifTrue: [ ^ digit - 87 ] "$a" "$f" ]. self error: 'hex-digit expected'! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 2/16/2012 14:39:25'! parseNumber | negated number | negated := stream peek = $-. negated ifTrue: [ stream next ]. number := self parseNumberInteger. (stream peek = $.) ifTrue: [ stream next. number := number + self parseNumberFraction ]. (stream peek = $e or: [ stream peek = $E ]) ifTrue: [ stream next. number := number * self parseNumberExponent ]. negated ifTrue: [ number := number negated ]. ^ self whitespace; createNumber: number! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 4/6/2012 15:56:14'! parseNumberExponent | number negated | number := 0. negated := stream peek = $-. (negated or: [ stream peek = $+ ]) ifTrue: [ stream next ]. [ stream atEnd not and: [ stream peek isDigit ] ] whileTrue: [ number := 10 * number + (stream next charCode - 48) ]. negated ifTrue: [ number := number negated ]. ^ 10 raisedTo: number! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 4/6/2012 15:56:14'! parseNumberFraction | number power | number := 0. power := 1.0. [ stream atEnd not and: [ stream peek isDigit ] ] whileTrue: [ number := 10 * number + (stream next charCode - 48). power := power * 10.0 ]. ^ number / power! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 4/6/2012 15:56:14'! parseNumberInteger | number | number := 0. [ stream atEnd not and: [ stream peek isDigit ] ] whileTrue: [ number := 10 * number + (stream next charCode - 48) ]. ^ number! ! !MCFileTreeJsonParser methodsFor: 'parsing' stamp: 'dkh 2/16/2012 14:39:25'! parseObject | result | self expect: '{'. result := self createObject. (self match: '}') ifTrue: [ ^ result ]. [ stream atEnd ] whileFalse: [ result := self addProperty: self parseProperty to: result. (self match: '}') ifTrue: [ ^ result ]. self expect: ',' ]. self error: 'end of object expected'! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 2/16/2012 14:39:25'! parseProperty | name value | name := self parseString. self expect: ':'. value := self parseValue. ^ self createProperty: name with: value.! ! !MCFileTreeJsonParser methodsFor: 'parsing-internal' stamp: 'dkh 2/16/2012 14:39:25'! parseString | result | self expect: '"'. result := WriteStream on: String new. [ stream atEnd or: [ stream peek = $" ] ] whileFalse: [ result nextPut: self parseCharacter ]. ^ self expect: '"'; createString: result contents! ! !MCFileTreeJsonParser methodsFor: 'parsing' stamp: 'dkh 2/16/2012 14:39:25'! parseValue | char | stream atEnd ifFalse: [ char := stream peek. char = ${ ifTrue: [ ^ self parseObject ]. char = $[ ifTrue: [ ^ self parseArray ]. char = $" ifTrue: [ ^ self parseString ]. (char = $- or: [ char between: $0 and: $9 ]) ifTrue: [ ^ self parseNumber ]. (self match: 'true') ifTrue: [ ^ self createTrue ]. (self match: 'false') ifTrue: [ ^ self createFalse ]. (self match: 'null') ifTrue: [ ^ self createNull ] ]. self error: 'invalid input'! ! !MCFileTreeJsonParser methodsFor: 'private' stamp: 'dkh 2/16/2012 14:39:25'! whitespace "Strip whitespaces from the input stream." [ stream atEnd not and: [ stream peek isSeparator ] ] whileTrue: [ stream next ]! ! !Object methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonForHtmlOn: aStream indent: startIndent self writeCypressJsonOn: aStream forHtml: true indent: startIndent! ! !Object methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" ^ self subclassResponsibility! ! !Object methodsFor: '*monticellofiletree-core' stamp: 'dkh 4/6/2012 15:56:14'! writeCypressJsonOn: aStream indent: startIndent self writeCypressJsonOn: aStream forHtml: false indent: startIndent! ! !MCMethodDefinition methodsFor: '*monticellofiletree-core' stamp: 'dkh 2/16/2012 14:49:00'! setTimeStamp: aString ^ timeStamp := aString! ! "MonticelloFileTree-Core"! !FileSystemDirectoryEntry methodsFor: '*monticellofiletree-filesystem-utilities' stamp: 'dkh 8/10/2012 09:04'! name ^ self basename! ! !FileSystemDirectoryEntry methodsFor: '*monticellofiletree-filesystem-utilities' stamp: 'dkh 8/10/2012 09:06'! readStreamDo: aBlock ^ reference readStreamDo: aBlock! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/8/2012 22:09'! default ^ DiskStore activeClass createDefault defaultWorkingDirectory asFileReference! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/8/2012 22:12'! deleteAll: aDirectory ^ aDirectory deleteAll! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/8/2012 21:48'! directoryExists: aDirectory ^ aDirectory isDirectory! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 13:47'! directoryFromEntry: directoryEntry ^ directoryEntry asFileReference! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 09:29'! directoryFromPath: directoryPath ^ (AbsolutePath from: directoryPath delimiter: self pathNameDelimiter) asFileReference! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 05:14'! directoryFromPath: directoryPath relativeTo: aDirectory ^ aDirectory resolveString: directoryPath! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 06:47'! directoryName: aDirectory ^ aDirectory basename! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 07:50'! directoryPathString: aDirectory ^ aDirectory pathString! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'ChristopheDemarey 7/22/2013 11:48'! ensureDirectoryExists: aDirectory aDirectory ensureCreateDirectory! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'ChristopheDemarey 7/22/2013 11:48'! ensureFilePathExists: fileNameOrPath relativeTo: aDirectory (aDirectory resolveString: fileNameOrPath) parent ensureCreateDirectory! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/9/2012 15:43'! filePathExists: filePath relativeTo: aDirectory ^ (aDirectory resolveString: filePath) isFile! ! !MCFileTreeFileSystemUtils class methodsFor: 'initialization' stamp: 'dkh 8/9/2012 08:29'! initialize "self initialize" self install! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/9/2012 09:33'! parentDirectoryOf: aDirectory ^ aDirectory parent! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/8/2012 19:19'! pathNameDelimiter ^ DiskStore activeClass delimiter! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/10/2012 06:31'! readStreamFor: filePath in: aDirectory do: aBlock "temporary hack for Pharo-1.4" ^ (aDirectory resolveString: filePath) readStreamDo: [ :fileStream | | stream | stream := ReadStream on: fileStream contents asString. stream reset. aBlock value: stream ]! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/9/2012 15:38'! resolvePath: path in: aDirectory ^ aDirectory resolveString: path! ! !MCFileTreeFileSystemUtils class methodsFor: 'utilities' stamp: 'dkh 8/9/2012 09:46'! writeStreamFor: filePath in: aDirectory do: aBlock (aDirectory resolveString: filePath) writeStreamDo: aBlock! ! !FileReference methodsFor: '*monticellofiletree-filesystem-utilities' stamp: 'dkh 8/10/2012 10:27'! fileTreeUtilityClass ^ MCFileTreeFileSystemUtils! ! "MonticelloFileTree-FileSystem-Utilities"! "MonticelloGUI"! ConfigurationOfFileTree removeSelector: #version106:! ConfigurationOfFileTree removeSelector: #version105:! ConfigurationOfFileTree removeSelector: #version104:! ConfigurationOfFileTree removeSelector: #version1042:! ConfigurationOfFileTree removeSelector: #version1041:! ConfigurationOfFileTree removeSelector: #version103:! ConfigurationOfFileTree removeSelector: #version1031:! ConfigurationOfFileTree removeSelector: #version102:! ConfigurationOfFileTree removeSelector: #version101:! ConfigurationOfFileTree removeSelector: #version100:! ConfigurationOfFileTree removeSelector: #stable:! ConfigurationOfFileTree removeSelector: #project! ConfigurationOfFileTree removeSelector: #customProjectAttributes! ConfigurationOfFileTree removeSelector: #baseline103:! ConfigurationOfFileTree removeSelector: #baseline102:! ConfigurationOfFileTree removeSelector: #baseline100:! ConfigurationOfFileTree class removeSelector: #validate! ConfigurationOfFileTree class removeSelector: #project! ConfigurationOfFileTree class removeSelector: #loadDevelopment! ConfigurationOfFileTree class removeSelector: #loadBleedingEdge! ConfigurationOfFileTree class removeSelector: #load! ConfigurationOfFileTree class removeSelector: #isMetacelloConfig! ConfigurationOfFileTree class removeSelector: #ensureMetacelloBaseConfiguration! ConfigurationOfFileTree class removeSelector: #ensureMetacello! ConfigurationOfFileTree class removeSelector: #baseConfigurationClassIfAbsent:! ConfigurationOfFileTree class removeSelector: #DevelopmentSupport! Smalltalk globals removeClassNamed: #ConfigurationOfFileTree! ----End fileIn----! ----QUIT----an Array(8 September 2013 5:40:57 pm) Pharo.image priorSource: 16964605! ----STARTUP----an Array(8 September 2013 5:58:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 September 2013 5:58:49 pm) Pharo-30381.image priorSource: 17125282! ----STARTUP----an Array(9 September 2013 9:38:47 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/9/2013 09:35' prior: 67296564! commentForCurrentUpdate ^ '11549 PluggableTextMorph closes completion menu on keydown https://pharo.fogbugz.com/f/cases/11549 11543 Select protocol name with suggestions https://pharo.fogbugz.com/f/cases/11543 11556 subclassResponsability -> subclassResponsibility https://pharo.fogbugz.com/f/cases/11556 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/9/2013 09:36'! script174 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1601.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-dkh.157.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1242.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/9/2013 09:36'! update30382 "self new update30382" self withUpdateLog: '11549 PluggableTextMorph closes completion menu on keydown https://pharo.fogbugz.com/f/cases/11549 11543 Select protocol name with suggestions https://pharo.fogbugz.com/f/cases/11543 11556 subclassResponsability -> subclassResponsibility https://pharo.fogbugz.com/f/cases/11556 '. self loadTogether: self script174 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: 'accessing parallel hierarchy' stamp: 'MarcusDenker 9/9/2013 09:27' prior: 45392017! baseClass ^self subclassResponsibility.! ! !PluggableTextFieldMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 9/8/2013 17:59' prior: 29539979! chooserHasFocus ^ entryCompletion notNil and: [entryCompletion chooser notNil and: [entryCompletion chooser hasKeyboardFocus]]! ! !PluggableTextFieldMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 9/8/2013 17:58' prior: 29533663! drawOn: aCanvas "Eventually draw the helpText" super drawOn: aCanvas. self ghostText ifNotEmpty: [ self text isEmpty ifTrue: [| ghostBounds | ghostBounds := ((self scroller submorphBounds topLeft corner: self innerBounds bottomRight) translateBy: 0 @ (self scroller height - self theme textFont height / 2) rounded) insetBy: self textMarginsWidth @ 0. aCanvas drawString: self ghostText in: ghostBounds font: self theme textFont color: Color lightGray]]. entryCompletion ifNotNil: [entryCompletion closeIfNotNeeded: self]. ! ! !CollectionRootTest methodsFor: 'requirements' stamp: 'MarcusDenker 9/9/2013 09:27' prior: 47754887! sizeCollection "Answers a collection not empty" ^ self subclassResponsibility! ! !EntryCompletion methodsFor: 'event-handling' stamp: 'BenjaminVanRyseghem 9/8/2013 17:58'! closeIfNotNeeded: aMorph (chooser isNotNil and:[ chooser hasKeyboardFocus or: [ aMorph hasKeyboardFocus ] ]) ifFalse: [ self closeChooser ]! ! !IdentifierChooserMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 9/8/2013 17:59' prior: 23499314! selectFirstItem "Select the first item in the embedded menus" self choiceMenus first selectItem: self choiceMenuItems first event: nil. self takeKeyboardFocus.! ! !AbstractTool class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/8/2013 16:27' prior: 42036959! protocolSuggestionsFor: aClass | allExistingProtocols interestingProtocols reject | reject := Set new. reject addAll: aClass organization categories; add: AllProtocol defaultName; add: Protocol nullCategory; add: Protocol unclassified. allExistingProtocols := Smalltalk allClassesAndTraits inject: Set new into: [ :col :e | col addAll: e protocols; yourself ]. interestingProtocols := allExistingProtocols reject: [ :e | reject includes: e ]. ^ interestingProtocols asOrderedCollection sort: [ :a :b | a asLowercase < b asLowercase ].! ! !AbstractTool class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/8/2013 15:57' prior: 39607090! requestProtocolNameFor: aClass initialAnswer: aString | ui | ui := ListDialogWindow new getList: [ :r| (AbstractTool protocolSuggestionsFor: aClass) select: [:e | r search: e name ] ]; displayBlock: [:e | e ]; initialAnswer: aString; title: 'New Protocol'; yourself. ^ ui chooseFromOwner: World. ! ! !TraitBehavior methodsFor: 'naming' stamp: 'MarcusDenker 9/9/2013 09:28' prior: 45386585! name ^ self subclassResponsibility.! ! !ListDialogWindow methodsFor: 'open/close' stamp: 'BenjaminVanRyseghem 9/8/2013 16:23'! initialAnswer: aString searchMorph content: aString.! ! !ListDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 12/18/2012 18:15' prior: 24519971! ok self cancelled: false; delete! ! EntryCompletion removeSelector: #closeIfNotOver:! "CollectionsTests"! "Kernel"! "Polymorph-Widgets"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(9 September 2013 9:39:03 am) Pharo.image priorSource: 17125489! ----STARTUP----an Array(9 September 2013 9:57:04 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 September 2013 9:57:04 am) Pharo-30382.image priorSource: 17140413! ----STARTUP----an Array(9 September 2013 10:08:45 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/9/2013 10:05' prior: 67457444! commentForCurrentUpdate ^ '11542 Load FileTree in the image core https://pharo.fogbugz.com/f/cases/11542 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/9/2013 10:05'! script175 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1601.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.69.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.133.mcz Spec-Widgets-MarcusDenker.232.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1242.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/9/2013 10:05'! update30383 "self new update30383" self withUpdateLog: '11542 Load FileTree in the image core https://pharo.fogbugz.com/f/cases/11542 '. self loadTogether: self script175 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Object methodsFor: '*monticellofiletree-core' stamp: 'EstebanLorenzano 9/9/2013 10:04' prior: 67450991! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" self error: 'Cypress should not arrive here'! ! "MonticelloFileTree-Core"! ----End fileIn----! ----QUIT----an Array(9 September 2013 10:08:52 am) Pharo.image priorSource: 17140620! ----STARTUP----an Array(9 September 2013 10:16:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 September 2013 10:16:02 am) Pharo-30383.image priorSource: 17152139! ----STARTUP----an Array(9 September 2013 11:54:52 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/9/2013 11:52' prior: 67472580! commentForCurrentUpdate ^ '11513 testReturnStruct1Byte failing on Linux on the Build Server https://pharo.fogbugz.com/f/cases/11513 11448 BlockClosure >> #timeToRun should return a Duration https://pharo.fogbugz.com/f/cases/11448 11176 MessageBrowser: droplist shows a DropListItem https://pharo.fogbugz.com/f/cases/11176 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/9/2013 11:52'! script176 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1604.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.534.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1242.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/9/2013 11:52'! update30384 "self new update30384" self withUpdateLog: '11513 testReturnStruct1Byte failing on Linux on the Build Server https://pharo.fogbugz.com/f/cases/11513 11448 BlockClosure >> #timeToRun should return a Duration https://pharo.fogbugz.com/f/cases/11448 11176 MessageBrowser: droplist shows a DropListItem https://pharo.fogbugz.com/f/cases/11176 '. self loadTogether: self script176 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/9/2013 10:02' prior: 36074280! initializeDropList toolbarModel addItemLabeled: 'Source' do: [ self textConverter: SourceMethodConverter new ]; addItemLabeled: 'Byte Code' do: [ self textConverter: ByteCodeMethodConverter new ]; addItemLabeled: 'Time stamp' do: [ self textConverter: TimeStampMethodConverter new ]! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:02'! addItemLabeled: aString do: aBlock dropListModel addItemLabeled: aString do: aBlock! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:09'! emptyDropList dropListModel emptyList! ! !NBFFIExternalStructTests methodsFor: 'util' stamp: 'CamilloBruni 9/5/2013 15:09' prior: 48347390! returnStruct1Byte ^ self nbCallout function: #(NBTestStructure1byte () ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm mov: 42 to: asm EAX] ifFalse:[ asm mov: asm ESP ptr to: asm EAX; mov: 42 to: asm EAX ptr32] ] ! ! !BlockClosure methodsFor: 'evaluating' stamp: 'BenjaminVanRyseghem 9/9/2013 11:07' prior: 18225446! timeToRun "Answer the number of milliseconds taken to execute this block." ^ Duration milliSeconds: (Time millisecondsToRun: self)! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 9/9/2013 10:08' prior: 28448991! browserForList: aList browser:= MessageBrowser new. browser textConverter: DiffMethodReferenceConverter new; topologicSort: false; sortingBlock: [:a :b | a timeStamp > b timeStamp ]; displayBlock: [:changeRecord | { changeRecord stamp firstWord. changeRecord timeStamp asString. changeRecord class name. changeRecord methodSelector. '{',changeRecord category,'}'} ]. browser toolbarModel emptyDropList; addItemLabeled: 'Diff' do: [ browser textConverter: (DiffChangeRecordConverter methodReference: browser textConverter method referencesList: aList) ]; addItemLabeled: 'Source' do: [ browser textConverter: (SourceMethodConverter method: browser textConverter method) ]. browser toolbarModel versionModel label: 'Revert'; action: [ self revert: browser selectedItem ]. ^ browser.! ! !NBFFIExternalUnionTests methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/5/2013 15:08' prior: 48351951! returnUnion1Byte ^ self nbCallout function: #(NBTestUnion1Byte () ) emit: [:gen :proxy :asm | NativeBoost platformId = NativeBoostConstants linux32PlatformId ifTrue: [ asm mov: asm ESP ptr32 to: asm EAX; mov: 42 to: asm EAX ptr32 ] ifFalse: [ asm mov: 42 to: asm EAX ]]! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:09'! emptyList listHolder contents: OrderedCollection new! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:12' prior: 39152478! items: aList "Populate the drop list with a list of ui specific items" "aList is a list of domain specific objects. If you want to specify more precisely the item actions, see #addItemLabeled:do:" | dropListItems | dropListItems := aList collect: [ :e | DropListItem on: e do: [] ]. listHolder contents: dropListItems! ! MethodToolbar removeSelector: #setDropListItems:! "Kernel"! "NativeBoost-Tests"! "Spec-Tools"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(9 September 2013 11:55:04 am) Pharo.image priorSource: 17152348! ----STARTUP----an Array(9 September 2013 12:01:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 September 2013 12:01:18 pm) Pharo-30384.image priorSource: 17167473! ----STARTUP----an Array(9 September 2013 2:12:56 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/9/2013 14:10' prior: 67484305! commentForCurrentUpdate ^ '11545 class side definition not working https://pharo.fogbugz.com/f/cases/11545 10782 Nautilus: Difficult to recategorize method via DND https://pharo.fogbugz.com/f/cases/10782 11560 TestValueWithinFix tests failing https://pharo.fogbugz.com/f/cases/11560 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/9/2013 14:10'! script177 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.12.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-StephaneDucasse.103.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.113.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.112.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1605.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1242.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/9/2013 14:10'! update30385 "self new update30385" self withUpdateLog: '11545 class side definition not working https://pharo.fogbugz.com/f/cases/11545 10782 Nautilus: Difficult to recategorize method via DND https://pharo.fogbugz.com/f/cases/10782 11560 TestValueWithinFix tests failing https://pharo.fogbugz.com/f/cases/11560 '. self loadTogether: self script177 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'evaluating' stamp: 'MarcusDenker 9/9/2013 14:10' prior: 18223941! durationToRun "Answer the duration taken to execute this block." ^ self timeToRun ! ! !ClassOrMethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 09:27' prior: 42016664! accept: source notifying: aController self model selectedClass isMeta ifTrue: [ self acceptClassSide: source notifying: aController ] ifFalse: [ self acceptInstanceSide: source notifying: aController ]! ! !ClassOrMethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 09:29'! acceptClassSide: source notifying: aController | isClassDefinition | isClassDefinition := (' ' split: source) first = self model selectedClass theNonMetaClass name. isClassDefinition ifTrue: [ self model compileAClassFrom: source notifying: aController ] ifFalse: [ self model compileAMethodFromCategory: Protocol unclassified withSource: source notifying: aController ]! ! !ClassOrMethodDefinitionAcceptor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 09:24'! acceptInstanceSide: source notifying: aController | isClassDefinition | isClassDefinition := false. "Try to parse the source. If it succeed, it means the source represents a message send aka a class definition. On error, we switch to method definition mode" [ RBParser parseMethod: source ] on: Error do: [ isClassDefinition := true ]. isClassDefinition ifTrue: [ self model compileAClassFrom: source notifying: aController ] ifFalse: [ self model compileAMethodFromCategory: Protocol unclassified withSource: source notifying: aController ]! ! !NautilusUI methodsFor: 'widget - method' stamp: 'BenjaminVanRyseghem 9/9/2013 09:40' prior: 28321211! highlightCategory: aMethod methodWidget resetMethodCache. aMethod ifNotNil: [ | category index | category := aMethod protocol. category = self selectedCategory ifFalse:[ index := self getCategories indexOf: ( category ). categoryWidget searchedElement: index ]]! ! "Kernel"! "Nautilus"! ----End fileIn----! ----QUIT----an Array(9 September 2013 2:13:06 pm) Pharo.image priorSource: 17167682! ----STARTUP----an Array(9 September 2013 2:19:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 September 2013 2:19:53 pm) Pharo-30385.image priorSource: 17181281! ----STARTUP----an Array(10 September 2013 8:59:55 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/10/2013 08:56' prior: 67499638! commentForCurrentUpdate ^ '11563 Color>>pixelValue32 should be moved to its single sender https://pharo.fogbugz.com/f/cases/11563 11561 Leftover System Progress morph https://pharo.fogbugz.com/f/cases/11561 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/10/2013 08:57'! script178 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.104.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.114.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.113.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1605.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.89.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1243.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/10/2013 08:57'! update30386 "self new update30386" self withUpdateLog: '11563 Color>>pixelValue32 should be moved to its single sender https://pharo.fogbugz.com/f/cases/11563 11561 Leftover System Progress morph https://pharo.fogbugz.com/f/cases/11561 '. self loadTogether: self script178 merge: false. SystemProgressMorph reset. . self flushCaches. ! ! "ScriptLoader30"! !Form methodsFor: 'color mapping' stamp: 'FernandoOlivero 9/9/2013 19:41' prior: 22470283! balancedPatternFor: aColor "Return the pixel word for representing the given color on the receiver" self hasNonStandardPalette ifTrue:[ ^ self bitPatternFor: aColor] ifFalse:[^ self balancedPatternFor: aColor depth: self depth]! ! !Form methodsFor: 'color mapping' stamp: 'FernandoOlivero 9/9/2013 19:40'! balancedPatternFor: aColor depth: aDepth "A generalization of bitPatternForDepth: as it exists. Generates a 2x2 stipple of color. The topLeft and bottomRight pixel are closest approx to this color" | pv1 pv2 mask1 mask2 pv3 c | aColor isTransparent ifTrue:[ ^ Bitmap with: 0 ]. (depth between: 4 and: 16) ifFalse: [ ^ aColor bitPatternForDepth: depth ]. pv1 := aColor pixelValueForDepth: depth. " Subtract error due to pv1 to get pv2. pv2 := (self - (err1 := (Color colorFromPixelValue: pv1 depth: depth) - self)) pixelValueForDepth: depth. Subtract error due to 2 pv1's and pv2 to get pv3. pv3 := (self - err1 - err1 - ((Color colorFromPixelValue: pv2 depth: depth) - self)) pixelValueForDepth: depth. " "Above two statements computed faster by the following..." pv2 := (c := aColor - ((Color colorFromPixelValue: pv1 depth: depth) - aColor)) pixelValueForDepth: depth. pv3 := c + (c - (Color colorFromPixelValue: pv2 depth: depth)) pixelValueForDepth: depth. "Return to a 2-word bitmap that encodes a 2x2 stipple of the given pixelValues." mask1 := #( #- #- #- 16843009 #- #- #- 65537 #- #- #- #- #- #- #- 1 ) at: depth. "replicates every other 4 bits" "replicates every other 8 bits" "replicates every other 16 bits" mask2 := #( #- #- #- 269488144 #- #- #- 16777472 #- #- #- #- #- #- #- 65536 ) at: depth. "replicates the other 4 bits" "replicates the other 8 bits" "replicates the other 16 bits" ^ Bitmap with: mask1 * pv1 + (mask2 * pv2) with: mask1 * pv3 + (mask2 * pv1). ! ! !FT2GlyphRenderer methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 19:35'! pixelValue32Of: aColor ^ aColor pixelWordForDepth: 32! ! !FT2GlyphRenderer methodsFor: 'accessing' stamp: 'FernandoOlivero 9/9/2013 19:36' prior: 43709115! setColor: color "Set the color which will be used to render glyphs." | clr rgb alpha | currentColor = color ifTrue: [ ^ self ]. currentColor := color. clr := self pixelValue32Of: color. rgb := clr bitAnd: 16rFFFFFF. alpha := clr >> 24. 0 to: 255 do:[:i | | a | a := (i+1) * alpha bitAnd: 16rFF00. colorMap at: i+1 put: ( (a<<16) + rgb ). ]. " colorMap at: 1 put: (Color red alpha: 0.1) pixelValue32." ! ! !MethodFinder methodsFor: 'initialize' stamp: 'FernandoOlivero 9/9/2013 19:41' prior: 67166019! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: fromRgbTriplet: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !InterpolatedGradientFillStyle methodsFor: 'as yet unclassified' stamp: 'FernandoOlivero 9/9/2013 19:33' prior: 23913068! computePixelRampOfSize: length "Compute the pixel ramp in the receiver." | bits ramp lastColor lastIndex lastWord | ramp := colorRamp asSortedCollection:[:a1 :a2| a1 key < a2 key]. bits := Bitmap new: length. lastColor := ramp first value. lastWord := self pixelWord32Of: lastColor . lastIndex := 0. ramp do:[:assoc| | distance nextColor theta nextWord nextIndex step | nextIndex := (assoc key * length) rounded. nextColor := assoc value. nextWord := nextColor pixelWord32. distance := nextIndex - lastIndex. distance = 0 ifTrue: [distance := 1]. step := 1.0 / distance. theta := 0.0. lastIndex+1 to: nextIndex do: [:i| theta := theta + step. bits at: i put: (self interpolatedAlphaMix: theta of: lastWord and: nextWord)]. lastIndex := nextIndex. lastColor := nextColor. lastWord := nextWord]. lastIndex+1 to: length do: [:i| bits at: i put: lastWord]. ^bits! ! !InterpolatedGradientFillStyle methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 19:33'! pixelWord32Of: aColor "Returns an integer representing the bits that appear in a single pixel of this color in a Form of depth 32. Transparency: The pixel value zero is reserved for transparent. For depths greater than 8, black maps to the darkest possible blue. Just a little quicker if we are dealing with RGBA colors at 32 bit depth." | val rgb | rgb := aColor privateRGB . "eight bits per component; top 8 bits set to all ones (opaque alpha)" val := LargePositiveInteger new: 4. val at: 3 put: ((rgb bitShift: -22) bitAnd: 16rFF). val at: 2 put: ((rgb bitShift: -12) bitAnd: 16rFF). val at: 1 put: ((rgb bitShift: -2) bitAnd: 16rFF). val = 0 ifTrue: [val at: 1 put: 1]. "closest non-transparent black" val at: 4 put: self alpha. "opaque alpha" ^val ! ! Color removeSelector: #pixelWord32! Color removeSelector: #pixelValue32! Color removeSelector: #balancedPatternForDepth:! TranslucentColor removeSelector: #pixelWord32! TranslucentColor removeSelector: #balancedPatternForDepth:! "Athens-Balloon"! "Balloon"! "Graphics-Display Objects"! "Graphics-Primitives"! "Tools"! ----End fileIn----! ----QUIT----an Array(10 September 2013 9:00:06 am) Pharo.image priorSource: 17181488! ----STARTUP----an Array(10 September 2013 9:06:27 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 September 2013 9:06:27 am) Pharo-30386.image priorSource: 17209858! ----STARTUP----an Array(10 September 2013 11:35:52 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/10/2013 11:34' prior: 67513445! commentForCurrentUpdate ^ '11566 MorphFrameGhost should be renamed and subclassed from BorderedMorph https://pharo.fogbugz.com/f/cases/11566 11564 ThumbnailImageMorph should be removed https://pharo.fogbugz.com/f/cases/11564 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/10/2013 11:34'! script179 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.104.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.628.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.114.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.113.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1605.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.93.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.905.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1243.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.112.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/10/2013 11:34'! update30387 "self new update30387" self withUpdateLog: '11566 MorphFrameGhost should be renamed and subclassed from BorderedMorph https://pharo.fogbugz.com/f/cases/11566 11564 ThumbnailImageMorph should be removed https://pharo.fogbugz.com/f/cases/11564 '. self loadTogether: self script179 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FastDraggingFrameMorph commentStamp: 'AlainPlantec 2/22/2012 23:23' prior: 0! I represents the windows frame for window dragging or resizing when fast dragging or fast resizing is wanted (when UITheme currentSettings fastDragging is set to true). For window resizing, I'm created by a corner or an edge grip when the mouse is clicked on it (see SystemWindow>>doFastWindowReframe:). For window dragging, I'm created when the top window bar is clicked (see SystemWindow>>doFastFrameDrag:). I'm always created with the same bounds as the target window bounds. The mouse focus is given to me and my bounds are changed while the hand is moving. On mouse up, the window bounds is set to my own bounds and then I'm deleted. Instance Variables location: startGap: target: location - The symbol representing the corner or the edge (#topLeft, #top, #topRight .... or #left). I'm set to nil for window dragging startGap - For window dragging, keep track of the distance between the window top bar first click location and the window position target - The window to be resized or dragged ! !FastDraggingFrameMorph commentStamp: 'AlainPlantec 2/22/2012 23:23' prior: 67553102! I represents the windows frame for window dragging or resizing when fast dragging or fast resizing is wanted (when UITheme currentSettings fastDragging is set to true). For window resizing, I'm created by a corner or an edge grip when the mouse is clicked on it (see SystemWindow>>doFastWindowReframe:). For window dragging, I'm created when the top window bar is clicked (see SystemWindow>>doFastFrameDrag:). I'm always created with the same bounds as the target window bounds. The mouse focus is given to me and my bounds are changed while the hand is moving. On mouse up, the window bounds is set to my own bounds and then I'm deleted. Instance Variables location: startGap: target: location - The symbol representing the corner or the edge (#topLeft, #top, #topRight .... or #left). I'm set to nil for window dragging startGap - For window dragging, keep track of the distance between the window top bar first click location and the window position target - The window to be resized or dragged ! !FastDraggingFrameMorph class methodsFor: 'instance creation' stamp: 'AlainPlantec 2/22/2012 23:34'! forDragging: aWindow clickedAt: aPoint | b | b := self new. b target: aWindow. b startGap: aWindow topLeft - aPoint. ^ b! ! !FastDraggingFrameMorph class methodsFor: 'instance creation' stamp: 'AlainPlantec 2/23/2012 00:16'! forResizing: aWindow fromLocation: aSideOrCorner | b | b := self new. b target: aWindow. b location: aSideOrCorner. ^ b ! ! !FastDraggingFrameMorph methodsFor: 'initialization' stamp: 'FernandoOlivero 9/10/2013 09:56'! defaultBorderColor ^ Color gray ! ! !FastDraggingFrameMorph methodsFor: 'initialization' stamp: 'FernandoOlivero 9/10/2013 09:56'! defaultBorderWidth ^ 2. ! ! !FastDraggingFrameMorph methodsFor: 'initialization' stamp: 'FernandoOlivero 9/10/2013 09:56'! defaultColor ^ Color gray alpha: 0.15. ! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 22:12'! draggedTo: aPoint self position: aPoint + startGap ! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 23:17'! handlesMouseDown: evt ^ true! ! !FastDraggingFrameMorph methodsFor: 'testing' stamp: 'AlainPlantec 2/22/2012 22:28'! isForDragging ^ location isNil! ! !FastDraggingFrameMorph methodsFor: 'accessing' stamp: 'AlainPlantec 2/22/2012 23:05'! location: aSymbol "The symbol wich represents the corner or the edge grip location (#topLeft, #top ..., #bottomLeft or #left)" location := aSymbol! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 23:09'! mouseDown: evt "Normally, should not be possible" self delete ! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 22:29'! mouseMove: evt self isForDragging ifTrue: [self draggedTo: evt position] ifFalse: [self reframedTo: evt position] ! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 23:17'! mouseUp: evt target ifNotNil: [Display deferUpdatesIn: Display boundingBox while: [target bounds: self bounds]]. self delete! ! !FastDraggingFrameMorph methodsFor: 'event handling' stamp: 'AlainPlantec 2/22/2012 22:18'! reframedTo: aPoint self bounds: (self bounds withSideOrCorner: location setToPoint: aPoint)! ! !FastDraggingFrameMorph methodsFor: 'accessing' stamp: 'AlainPlantec 2/22/2012 23:06'! startGap: aPoint "APoint is the distance between the window position and the first click position" startGap := aPoint! ! !FastDraggingFrameMorph methodsFor: 'accessing' stamp: 'AlainPlantec 2/22/2012 18:56'! target ^ target! ! !FastDraggingFrameMorph methodsFor: 'accessing' stamp: 'FernandoOlivero 9/10/2013 09:57'! target: aSystemWindow target := aSystemWindow. self color: (target paneColor alpha: 0.35). self bounds: aSystemWindow bounds. self currentHand newMouseFocus: self! ! !FastDraggingFrameMorph methodsFor: 'accessing' stamp: 'AlainPlantec 2/22/2012 21:51'! wantsToBeTopmost "Answer if the receiver want to be one of the topmost objects in its owner" ^ true! ! !SystemWindow methodsFor: 'events' stamp: 'FernandoOlivero 9/10/2013 09:51' prior: 51746505! doFastFrameDrag: grabPoint "Do fast frame dragging from the given point" (FastDraggingFrameMorph forDragging: self clickedAt: grabPoint) openInWorld ! ! !SystemWindow methodsFor: 'resize/collapse' stamp: 'FernandoOlivero 9/10/2013 09:51' prior: 51768075! doFastWindowReframe: aSideOrCornerName "Do fast frame resizing from the given corner or side" (FastDraggingFrameMorph forResizing: self fromLocation: aSideOrCornerName) openInWorld! ! ThumbnailImageMorph removeSelector: #togglePopupFeature! ThumbnailImageMorph removeSelector: #target:! ThumbnailImageMorph removeSelector: #popupFeatureString! ThumbnailImageMorph removeSelector: #newThumbnail:! ThumbnailImageMorph removeSelector: #newImage:! ThumbnailImageMorph removeSelector: #mouseUp:! ThumbnailImageMorph removeSelector: #mouseDown:! ThumbnailImageMorph removeSelector: #initializeWithDisplay! ThumbnailImageMorph removeSelector: #initialize! ThumbnailImageMorph removeSelector: #handlesMouseDown:! ThumbnailImageMorph removeSelector: #extent:! ThumbnailImageMorph removeSelector: #addPopupMenuItems:hand:! ThumbnailImageMorph removeSelector: #addCustomMenuItems:hand:! Smalltalk globals removeClassNamed: #ThumbnailImageMorph! MorphFrameGhost removeSelector: #wantsToBeTopmost! MorphFrameGhost removeSelector: #target:! MorphFrameGhost removeSelector: #target! MorphFrameGhost removeSelector: #startGap:! MorphFrameGhost removeSelector: #reframedTo:! MorphFrameGhost removeSelector: #mouseUp:! MorphFrameGhost removeSelector: #mouseMove:! MorphFrameGhost removeSelector: #mouseDown:! MorphFrameGhost removeSelector: #location:! MorphFrameGhost removeSelector: #isForDragging! MorphFrameGhost removeSelector: #initialize! MorphFrameGhost removeSelector: #handlesMouseDown:! MorphFrameGhost removeSelector: #draggedTo:! MorphFrameGhost class removeSelector: #forResizing:fromLocation:! MorphFrameGhost class removeSelector: #forDragging:clickedAt:! Smalltalk globals removeClassNamed: #MorphFrameGhost! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(10 September 2013 11:36:02 am) Pharo.image priorSource: 17210067! ----STARTUP----an Array(10 September 2013 11:42:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 September 2013 11:42:11 am) Pharo-30387.image priorSource: 17228830! ----STARTUP----an Array(11 September 2013 9:04:50 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/11/2013 09:00' prior: 67542026! commentForCurrentUpdate ^ '11572 Cannot create new protocols https://pharo.fogbugz.com/f/cases/11572 11570 Clean up some send of #halt https://pharo.fogbugz.com/f/cases/11570 11567 Some methods in SequenceableCollection should be moved to PolygonMorph https://pharo.fogbugz.com/f/cases/11567'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/11/2013 09:01'! script180 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.116.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.113.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-StephaneDucasse.23.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.94.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-StephaneDucasse.111.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.68.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1245.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/11/2013 09:01'! update30388 "self new update30388" self withUpdateLog: '11572 Cannot create new protocols https://pharo.fogbugz.com/f/cases/11572 11570 Clean up some send of #halt https://pharo.fogbugz.com/f/cases/11570 11567 Some methods in SequenceableCollection should be moved to PolygonMorph https://pharo.fogbugz.com/f/cases/11567'. self loadTogether: self script180 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow commentStamp: '' prior: 42383392! A ListDialogWindow is a dialog window used to search an element into a list. A text field is provided to on the fly reduce the field or search! !ClassBuilder methodsFor: 'compact classes' stamp: 'MarcusDenker 9/10/2013 12:09' prior: 48556257! becomeUncompact: aClass "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." | compactClassesArray index | compactClassesArray := Smalltalk compactClassesArray. (index := aClass indexIfCompact) = 0 ifTrue: [^ self]. self assert: [compactClassesArray includes: aClass]. aClass checkCanBeUncompact. "Update instspec so future instances will not be compact" aClass setFormat: aClass format - (index bitShift: 11). "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" compactClassesArray at: index put: nil. ! ! !PolygonMorph methodsFor: 'accessing' stamp: 'aoy 2/15/2003 20:51' prior: 29672900! borderColor: aColor super borderColor: aColor. (borderColor isColor and: [borderColor isTranslucentColor]) == (aColor isColor and: [aColor isTranslucentColor]) ifFalse: ["Need to recompute fillForm and borderForm if translucency of border changes." self releaseCachedState]! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:55'! changeInSlopes: slopes of: verts "A message to knots of a spline. Returns an array with the 3rd cubic coeff." "The last nth item is correct iff this is a closed cubic. Presumably that is the only time we care. We always return the same sized array as self." | n slopeChanges | n := verts size. n = slopes size ifFalse: [^ self error: 'vertices and slopes differ in number']. slopeChanges := Array new: n. (1 to: n) do: [:i | slopeChanges at: i put: (verts atWrap: i + 1) - (verts at: i) * 3 - ((slopes at: i) * 2) - (slopes atWrap: i + 1)]. ^ slopeChanges! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:58'! changeOfChangesInSlopes: slopes of: verts "A message to knots of a spline. Returns an array with the 4rd cubic coeff." "The last nth item is correct iff this is a closed cubic. Presumably that is the only time we care. We always return the same sized array as self." | n changes | n := verts size. n = slopes size ifFalse: [^ self error: 'vertices and slopes differ in number']. changes := Array new: n. 1 to: n do: [:i | changes at: i put: (verts at: i) - (verts atWrap: i + 1) * 2 + (slopes at: i) + (slopes atWrap: i + 1)]. ^ changes! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:48'! closedCubicSlopesOf: knots "Sent to knots returns the slopes of a closed cubic spline. From the same set of java sources as naturalCubic. This is a squeak transliteration of the java code." "from java code NatCubicClosed extends NatCubic solves for the set of equations for all knots: b1+4*b2+b3=3*(a3-a1) where a1 is (knots atWrap: index + 1) etc. and the b's are the slopes . by decomposing the matrix into upper triangular and lower matrices and then back sustitution. See Spath 'Spline Algorithms for Curves and Surfaces' pp 19--21. The D[i] are the derivatives at the knots. " | v w x y z n1 D F G H | n1 := knots size. n1 < 3 ifTrue: [self error: 'Less than 3 points makes a poor curve']. v := Array new: n1. w := Array new: n1. y := Array new: n1. D := Array new: n1. x := knots. z := 1.0 / 4.0. v at: 2 put: z. w at: 2 put: z. y at: 1 put: z * 3.0 * ((x at: 2) - (x at: n1)). H := 4.0. F := 3 * ((x at: 1) - (x at: n1 - 1)). G := 1. (2 to: n1 - 1) do: [:k | z := 1.0 / (4.0 - (v at: k)). v at: k + 1 put: z. w at: k + 1 put: z negated * (w at: k). y at: k put: z * (3.0 * ((x at: k + 1) - (x at: k - 1)) - (y at: k - 1)). H := H - (G * (w at: k)). F := F - (G * (y at: k - 1)). G := (v at: k) negated * G]. H := H - (G + 1 * ((v at: n1) + (w at: n1))). y at: n1 put: F - (G + 1 * (y at: n1 - 1)). D at: n1 put: (y at: n1) / H. D at: n1 - 1 put: (y at: n1 - 1) - ((v at: n1) + (w at: n1) * (D at: n1)). (1 to: n1 - 2) reverseDo: [:k | D at: k put: (y at: k) - ((v at: k + 1) * (D at: k + 1)) - ((w at: k + 1) * (D at: n1))]. ^ D ! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'FernandoOlivero 9/10/2013 10:47' prior: 29717598! coefficients curveState ifNotNil: [^ curveState at: 1]. ^ self vertices size < 1 ifTrue: [ self ] ifFalse:[ self coefficientsForMoreThanThreePoints ]. ! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'FernandoOlivero 9/10/2013 11:01'! coefficientsForMoreThanThreePoints "Less than three points handled as segments by our lineSegmentsDo:" | verts coefficients vertXs slopeXs vertYs slopeYs bestSegments | verts := self vertices. (self isCurvier) not & closed ifTrue: [ verts := verts , verts first asOrderedCollection]. coefficients := { vertXs := verts collect: [:p | p x asFloat]. slopeXs := self slopes: vertXs. self changeInSlopes: slopeXs of: vertXs . self changeOfChangesInSlopes: slopeXs of: vertXs. vertYs := verts collect: [:p | p y asFloat]. slopeYs := self slopes: vertYs. self changeInSlopes: slopeYs of: vertYs. self changeOfChangesInSlopes: slopeYs of: vertYs. Array new: verts size withAll: 12}. bestSegments := (1 to: verts size) collect: [:i | (self transform: coefficients toCubicPointPolynomialAt: i) bestSegments]. coefficients at: 9 put:bestSegments. self isCurvier not & closed ifTrue: [ coefficients := coefficients collect: [:each | each allButLast]]. curveState := {coefficients. nil. nil}. self computeNextToEndPoints. ^ coefficients! ! !PolygonMorph methodsFor: 'testing' stamp: 'di 8/20/2000 14:33' prior: 29705169! containsPoint: aPoint (super containsPoint: aPoint) ifFalse: [^ false]. closed & color isTransparent not ifTrue: [^ (self filledForm pixelValueAt: aPoint - bounds topLeft + 1) > 0]. self lineSegmentsDo: [:p1 :p2 | (aPoint onLineFrom: p1 to: p2 within: (3 max: borderWidth+1//2) asFloat) ifTrue: [^ true]]. self arrowForms do: [:f | (f pixelValueAt: aPoint - f offset) > 0 ifTrue: [^ true]]. ^ false! ! !PolygonMorph methodsFor: 'accessing' stamp: 'MarcusDenker 4/13/2012 08:49' prior: 29716790! cornerStyle: aSymbol "Set the receiver's corner style. But, in this case, do *not*" (extension isNil or: [self cornerStyle == aSymbol]) ifTrue: [^self]. extension cornerStyle: nil. self changed! ! !PolygonMorph methodsFor: 'drawing' stamp: 'IgorStasenko 7/18/2011 18:30' prior: 29675616! drawDropShadowOn: aCanvas "Display the receiver, a spline curve, approximated by straight line segments." | array | vertices size < 1 ifTrue: [self error: 'a polygon must have at least one point']. closed ifTrue: [aCanvas drawPolygon: self getVertices fillStyle: self shadowColor. ].! ! !PolygonMorph methodsFor: 'accessing' stamp: 'di 9/19/2000 22:00' prior: 29726112! fillStyle self isOpen ifTrue: [^ self borderColor "easy access to line color from halo"] ifFalse: [^ super fillStyle]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'wiz 1/7/2005 20:39' prior: 29726316! fillStyle: newColor self isOpen ifTrue: [^ self borderColor: newColor asColor "easy access to line color from halo"] ifFalse: [^ super fillStyle: newColor]! ! !PolygonMorph methodsFor: 'testing' stamp: 'StephaneDucasse 12/19/2011 18:45' prior: 29723653! isAnimated borderDashSpec ifNil: [^false]. ^ borderDashSpec size = 5 and: [(borderDashSpec fifth) > 0]! ! !PolygonMorph methodsFor: 'testing' stamp: 'sw 8/25/2000 22:37' prior: 29673268! isClosed ^ closed! ! !PolygonMorph methodsFor: 'testing' stamp: 'di 9/7/2000 16:18' prior: 29673354! isCurve ^ smoothCurve! ! !PolygonMorph methodsFor: 'testing' stamp: 'jm 11/19/97 18:55' prior: 29673444! isOpen ^ closed not! ! !PolygonMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 6/28/2013 11:30' prior: 42846877! justDroppedInto: newOwner event: evt | delta | (newOwner isKindOf: PasteUpMorph) ifTrue: ["Compensate for border width so that gridded drop is consistent with gridded drag of handles." delta := borderWidth + 1//2 ]. ^ super justDroppedInto: newOwner event: evt! ! !PolygonMorph methodsFor: 'accessing' stamp: 'sw 8/23/2000 16:16' prior: 29673533! makeOpenOrClosed "toggle the open/closed status of the receiver" closed ifTrue: [self makeOpen] ifFalse: [self makeClosed]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'CamilloBruni 8/1/2012 16:11' prior: 29673735! midVertices "Return and array of midpoints for this line or closed curve" | midPts nextVertIx tweens | vertices size < 2 ifTrue: [^ vertices]. midPts := OrderedCollection new. nextVertIx := 2. tweens := OrderedCollection new. tweens add: vertices first asIntegerPoint. "guarantee at least two points." self lineSegmentsDo: [:p1 :p2 | tweens addLast: p2 asIntegerPoint. p2 = (vertices atWrap: nextVertIx) ifTrue: ["Found endPoint." midPts addLast: (tweens atWrap: tweens size + 1 // 2) + (tweens at: tweens size // 2 + 1) // 2. tweens := OrderedCollection new. tweens add: p2 asIntegerPoint. "guarantee at least two points." nextVertIx := nextVertIx + 1]]. ^ midPts asArray! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:50'! naturalCubicSlopesOf: knots "Sent to knots returns the slopes of a natural cubic curve fit." "We solve the equation for knots with end conditions: 2*b1+b2 = 3(a1 - a0) bN1+2*bN = 3*(aN-aN1) and inbetween: b2+4*b3+b4=3*(a4-a2) where a2 is (knots atWrap: index + 1) etc. and the b's are the slopes . N is the last index (knots size) N1 is N-1. by using row operations to convert the matrix to upper triangular and then back sustitution. The D[i] are the derivatives at the knots." | x gamma delta D n1 | n1 := knots size. n1 < 3 ifTrue: [self error: 'Less than 3 points makes a poor curve']. x := knots. gamma := Array new: n1. delta := Array new: n1. D := Array new: n1. gamma at: 1 put: 1.0 / 2.0. (2 to: n1 - 1) do: [:i | gamma at: i put: 1.0 / (4.0 - (gamma at: i - 1))]. gamma at: n1 put: 1.0 / (2.0 - (gamma at: n1 - 1)). delta at: 1 put: 3.0 * ((x at: 2) - (x at: 1)) * (gamma at: 1). 2 to: n1 - 1 do: [:i | delta at: i put: 3.0 * ((x at: i + 1) - (x at: i - 1)) - (delta at: i - 1) * (gamma at: i)]. delta at: n1 put: 3.0 * ((x at: n1) - (x at: n1 - 1)) - (delta at: n1 - 1) * (gamma at: n1). D at: n1 put: (delta at: n1). (1 to: n1 - 1) reverseDo: [:i | D at: i put: (delta at: i) - ((gamma at: i) * (D at: i + 1))]. ^ D! ! !PolygonMorph methodsFor: 'accessing' stamp: 'dgd 12/11/2003 13:14' prior: 29674540! openOrClosePhrase | curveName | curveName := (self isCurve ifTrue: ['curve'] ifFalse: ['polygon']) translated. ^ closed ifTrue: ['make open {1}' translated format: {curveName}] ifFalse: ['make closed {1}' translated format: {curveName}]! ! !PolygonMorph methodsFor: 'geometry' stamp: 'di 9/24/2000 08:38' prior: 29704052! referencePosition "Return the current reference position of the receiver" ^ self valueOfProperty: #referencePosition ifAbsent: [super referencePosition] ! ! !PolygonMorph methodsFor: 'geometry' stamp: 'di 9/24/2000 09:21' prior: 29704284! rotationCenter "Return the rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." | refPos | refPos := self valueOfProperty: #referencePosition ifAbsent: [^ 0.5@0.5]. ^ (refPos - self bounds origin) / self bounds extent asFloatPoint! ! !PolygonMorph methodsFor: 'geometry' stamp: 'di 9/24/2000 09:31' prior: 29704691! rotationCenter: aPointOrNil "Set the new rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." | box | aPointOrNil isNil ifTrue: [self removeProperty: #referencePosition] ifFalse: [box := self bounds. self setProperty: #referencePosition toValue: box origin + (aPointOrNil * box extent)] ! ! !PolygonMorph methodsFor: 'geometry' stamp: 'AlainPlantec 5/8/2010 00:03' prior: 29705673! rotationDegrees: degrees | flex center | (center := self valueOfProperty: #referencePosition) ifNil: [self setProperty: #referencePosition toValue: (center := self bounds center)]. flex := (MorphicTransform offset: center negated) withAngle: (degrees - self forwardDirection) degreesToRadians. self setVertices: (vertices collect: [:v | (flex transform: v) - flex offset]). self forwardDirection: degrees. ! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:45'! segmentedSlopesOf: knots "For a collection of floats. Returns the slopes for straight segments between vertices." "last slope closes the polygon. Always return same size as self. " ^ knots collectWithIndex: [:x :i | (knots atWrap: i + 1) - x]! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'FernandoOlivero 9/10/2013 10:49' prior: 29722824! slopes: knots "Choose slopes according to state of polygon" self isCurvy ifFalse: [^ self segmentedSlopesOf: knots ]. ^ (closed and: [self isCurvier]) ifTrue: [self closedCubicSlopesOf: knots ] ifFalse: [self naturalCubicSlopesOf: knots ]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'wiz 6/6/2004 21:56' prior: 29674860! smoothOrSegmentedPhrase | lineName | lineName := (closed ifTrue: ['outline'] ifFalse: ['line']) translated. ^ self isCurve ifTrue: ['make segmented {1}' translated format: {lineName}] ifFalse: ['make smooth {1}' translated format: {lineName}].! ! !PolygonMorph methodsFor: 'accessing' stamp: 'dgd 2/22/2003 18:58' prior: 29723844! step borderDashSpec ifNil: [^super step]. borderDashSpec size < 5 ifTrue: [^super step]. "Only for dashed lines with creep" borderDashSpec at: 4 put: (borderDashSpec fourth) + borderDashSpec fifth. self changed. ^super step! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'FernandoOlivero 9/10/2013 10:53'! transform: coefficients toCubicPointPolynomialAt: vIndex "From curve information assemble a 4-array of points representing the coefficents for curve segment between to points. Beginning point is first point in array endpoint is the pointSum of the array. Meant to be sent to newcurves idea of curve coefficents." | transformed | transformed := (1 to: 4) collect: [:i | ((coefficients at: i) at: vIndex) @ ((coefficients at: 4 + i) at: vIndex)]. ^ Cubic withAll: transformed! ! !PolygonMorph methodsFor: 'accessing' stamp: 'sw 9/14/97 18:22' prior: 29675199! vertices ^ vertices! ! !NonInteractiveUIManager methodsFor: 'default actions' stamp: 'MarcusDenker 9/10/2013 12:12' prior: 28461132! lowSpaceWatcherDefaultAction: preemptedProcess | ctx | "yeah.. space is low.. quit!!!! :)" ctx := preemptedProcess ifNotNil: [ preemptedProcess suspendedContext ]. ctx ifNil: [ ctx := thisContext sender ]. self quitFrom: ctx withMessage: 'Low space signal received.'. self error. "what else we can do? "! ! !CurveMorph methodsFor: 'testing' stamp: 'FernandoOlivero 9/10/2013 11:03' prior: 20306175! isCurvier "Test used by smoothing routines. If true use true closed curve splines for closed curves. If not mimic old stodgy curveMorph curves with one sharp bend. Curve overrides this test for backward compatability.." ^ false! ! !FontChooser methodsFor: 'accessing' stamp: 'MarcusDenker 9/10/2013 12:10' prior: 67144134! pointSize ^pointSize ifNil: [pointSize := 10.0]! ! !ListDialogWindow commentStamp: '' prior: 67572199! A ListDialogWindow is a dialog window used to search an element into a list. A text field is provided to on the fly reduce the field or search! !ListDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/10/2013 16:52'! acceptNewEntry ^ acceptNewEntry! ! !ListDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/10/2013 16:52'! acceptNewEntry: aBoolean acceptNewEntry := aBoolean! ! !ListDialogWindow methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/10/2013 16:50' prior: 24523371! initialize list := #(). listIndex := 0. isResizeable := true. listBlock := [ :regex| #() ]. displayBlock := [:e | e printString ]. browseBlock := [:tmp | tmp browse ]. pattern := '.' asRegexIgnoringCase. acceptNewEntry := false. super initialize. ! ! !ListDialogWindow methodsFor: 'morphic protocol' stamp: 'BenjaminVanRyseghem 9/10/2013 16:51' prior: 24525408! searchAccept: aString self searchUpdate: aString. list size = 1 ifTrue: [ ^ self accept: list first ]. (list detect: [ :item | (self displayItem: item) = aString] ifNone: [ nil]) ifNotNilDo: [ :item| ^ self accept: item ]. acceptNewEntry ifTrue: [ self accept: aString ]. list ifNotEmpty: [ ^ self giveFocusToList].! ! !BalloonBezierSimulation methodsFor: 'computing' stamp: 'MarcusDenker 9/10/2013 12:07' prior: 17877384! floatStepToNextScanLineAt: yValue in: edgeTableEntry "Float version of forward differencing" [yValue asFloat > lastY] whileTrue:[ self assert: [fwDx < -50.0 or:[fwDx > 50.0]]. self assert: [fwDy < -50.0 or:[fwDy > 50.0]]. self assert: [fwDDx < -50.0 or:[fwDDx > 50.0]]. self assert: [fwDDy < -50.0 or:[fwDDy > 50.0]]. lastY := lastY + fwDy. fwDx := fwDx + fwDDx. fwDy := fwDy + fwDDy. ]. edgeTableEntry xValue: lastX asInteger. edgeTableEntry zValue: 0.! ! !BalloonBezierSimulation methodsFor: 'computing' stamp: 'MarcusDenker 9/10/2013 12:07' prior: 17882283! subdivideAt: parameter "Subdivide the receiver at the given parameter" | both | self assert: [parameter <= 0.0 or:[parameter >= 1.0]]. both := self computeSplitAt: parameter. "Transcript cr. self quickPrint: self. Transcript space. self quickPrint: both first. Transcript space. self quickPrint: both last. Transcript endEntry." self via: both first via. self end: both first end. ^both last! ! !BalloonBezierSimulation methodsFor: 'computing' stamp: 'MarcusDenker 9/10/2013 12:08' prior: 17883124! subdivideToBeMonoton "Subdivide the receiver at it's extreme point" | v1 v2 t other | v1 := (via - start). v2 := (end - via). t := (v1 y / (v2 y - v1 y)) negated asFloat. other := self subdivideAt: t. self assert: [self isMonoton]. self assert: [other isMonoton]. ^other! ! !BalloonBezierSimulation methodsFor: 'private' stamp: 'MarcusDenker 9/10/2013 12:09' prior: 17889844! validateIntegerRange self assert: [fwDx class == SmallInteger]. self assert: [fwDy class == SmallInteger]. self assert: [fwDDx class == SmallInteger]. self assert: [fwDDy class == SmallInteger]. ! ! !AbstractTool class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/10/2013 16:52' prior: 67471170! requestProtocolNameFor: aClass initialAnswer: aString | ui | ui := ListDialogWindow new getList: [ :r| (AbstractTool protocolSuggestionsFor: aClass) select: [:e | r search: e name ] ]; displayBlock: [:e | e ]; acceptNewEntry: true; initialAnswer: aString; title: 'New Protocol'; yourself. ^ ui chooseFromOwner: World. ! ! SequenceableCollection removeSelector: #slopesWith:from:to:! SequenceableCollection removeSelector: #segmentedSlopes! SequenceableCollection removeSelector: #nilTransitions! SequenceableCollection removeSelector: #naturalFillinList! SequenceableCollection removeSelector: #naturalCubicSlopes:! SequenceableCollection removeSelector: #naturalCubicSlopes! SequenceableCollection removeSelector: #cubicPointPolynomialAt:! SequenceableCollection removeSelector: #closedFillinList! SequenceableCollection removeSelector: #closedCubicSlopes:! SequenceableCollection removeSelector: #closedCubicSlopes! SequenceableCollection removeSelector: #changeOfChangesInSlopes:! SequenceableCollection removeSelector: #changeInSlopes:! SequenceableCollection removeSelector: #assertSlopesWith:from:to:! SequenceableCollection removeSelector: #asCubic! BalloonBezierSimulation removeSelector: #stepToNextInt! Form removeSelector: #shapeFill:seedBlock:! Form removeSelector: #shapeFill:interiorPoint:! Form removeSelector: #shapeBorder:width:interiorPoint:sharpCorners:internal:! Form removeSelector: #shapeBorder:width:! Form removeSelector: #floodFillMapFrom:to:mappingColorsWithin:to:! Form removeSelector: #floodFill2:at:! Form removeSelector: #borderFormOfWidth:sharpCorners:! "Balloon"! "FreeType"! "Graphics-Display Objects"! "Kernel"! "Morphic-Base"! "Polymorph-Widgets"! "Tools"! "UIManager"! ----End fileIn----! ----QUIT----an Array(11 September 2013 9:05:11 am) Pharo.image priorSource: 17229041! ----STARTUP----an Array(11 September 2013 9:11:33 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 September 2013 9:11:33 am) Pharo-30388.image priorSource: 17261288! ----STARTUP----an Array(11 September 2013 9:25:52 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/11/2013 09:22' prior: 67561000! commentForCurrentUpdate ^ '11559 Move TranslucentPattern and Highlights from Color to its users https://pharo.fogbugz.com/f/cases/11559 11558 Color>>makeForegroundColor should be called #contrastringForegroundColor https://pharo.fogbugz.com/f/cases/11558 11576 ThisContext inspector in debugger shows incorrect label https://pharo.fogbugz.com/f/cases/11576 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/11/2013 09:22'! script181 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.117.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-StephaneDucasse.52.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.96.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.25.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1245.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/11/2013 09:22'! update30389 "self new update30389" self withUpdateLog: '11559 Move TranslucentPattern and Highlights from Color to its users https://pharo.fogbugz.com/f/cases/11559 11558 Color>>makeForegroundColor should be called #contrastringForegroundColor https://pharo.fogbugz.com/f/cases/11558 11576 ThisContext inspector in debugger shows incorrect label https://pharo.fogbugz.com/f/cases/11576 '. self loadTogether: self script181 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ThisContextEyeElement commentStamp: '' prior: 0! This eye element is used in the right panel of the debugger to show thiscontext instead of self as a label! !UITheme methodsFor: '*growl' stamp: 'FernandoOlivero 9/9/2013 01:51' prior: 41532783! growlDismissHandleFor: aGrowlMorph | handle form image | handle := BorderedMorph newBounds: ((3@3) extent: (20@20)) color: Color white. handle borderColor: handle color muchDarker. handle borderWidth: 1. handle wantsYellowButtonMenu: false. form := self "haloDismissIcon" windowCloseForm. form ifNotNil: [ image := ImageMorph new. image form: form. image color: handle color contrastingForegroundColor. image lock. handle addMorphCentered: image]. ^ handle! ! !DisplayMedium methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:56'! highLightBitmaps "Quickly return a Bitblt-ready raw colorValue for highlighting areas." HighLightBitmaps isNil ifTrue:[ self initializeHighLights ]. ^ HighLightBitmaps ! ! !DisplayMedium methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:57'! initializeHighLights "Create a set of Bitmaps for quickly reversing areas of the screen without converting colors. " | t | t := Array new: 32. t at: 1 put: (Bitmap with: 4294967295). t at: 2 put: (Bitmap with: 4294967295). t at: 4 put: (Bitmap with: 1431655765). t at: 8 put: (Bitmap with: 117901063). t at: 16 put: (Bitmap with: 4294967295). t at: 32 put: (Bitmap with: 4294967295). ^ t! ! !DisplayMedium methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:57'! quickHighLight: aDepth ^ self highLightBitmaps at: aDepth! ! !DisplayMedium methodsFor: 'coloring' stamp: 'FernandoOlivero 9/9/2013 11:57' prior: 20898773! reverse "Change all the bits in the receiver that are white to black, and the ones that are black to white." " Display reverse: (10@10 extent: 100@100) " self fill: self boundingBox rule: Form reverse fillColor: (self quickHighLight: self depth)! ! !DisplayMedium methodsFor: 'coloring' stamp: 'FernandoOlivero 9/9/2013 11:57' prior: 20899051! reverse: aRectangle "Change all the bits in the receiver's area that intersects with aRectangle that are white to black, and the ones that are black to white." self fill: aRectangle rule: Form reverse fillColor: (self quickHighLight: self depth)! ! !FormCanvas methodsFor: 'initialization' stamp: 'FernandoOlivero 9/9/2013 11:50'! initializeTranslucentPatterns TranslucentPatterns := Array new: 8. #(1 2 4 8 ) do: [ :d | | mask bits pattern patternList | patternList := Array new: 5. mask := (1 bitShift: d) - 1. bits := 2 * d. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. "0% pattern" pattern := Bitmap with: 0 with: 0. patternList at: 1 put: pattern. "25% pattern" pattern := Bitmap with: mask with: 0. patternList at: 2 put: pattern. "50% pattern" pattern := Bitmap with: mask with: mask bitInvert32. patternList at: 3 put: pattern. "75% pattern" pattern := Bitmap with: mask with: 4294967295. patternList at: 4 put: pattern. "100% pattern" pattern := Bitmap with: 4294967295 with: 4294967295. patternList at: 5 put: pattern. TranslucentPatterns at: d put: patternList ]! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:51' prior: 22578149! setFillColor: aColor "Install a new color used for filling." | screen patternWord fillColor | fillColor := aColor. fillColor ifNil:[fillColor := Color transparent]. fillColor isColor ifFalse:[ (fillColor isKindOf: InfiniteForm) ifFalse:[^self error:'Cannot install color']. ^port fillPattern: fillColor; combinationRule: Form over]. "Okay, so fillColor really *is* a color" port sourceForm: nil. fillColor isTranslucent ifFalse:[ port combinationRule: Form over. port fillPattern: fillColor. self depth = 8 ifTrue:[ "In 8 bit depth it's usually a good idea to use a stipple pattern" port fillColor: (form balancedPatternFor: fillColor)]. ^self]. "fillColor is some translucent color" self depth > 8 ifTrue:[ "BitBlt setup for alpha masked transfer" port fillPattern: fillColor. self depth = 16 ifTrue:[port alphaBits: fillColor privateAlpha; combinationRule: 30] ifFalse:[port combinationRule: Form blend]. ^self]. "Can't represent actual transparency -- use stipple pattern" screen := self translucentMaskFor: fillColor alpha depth: self depth. patternWord := form pixelWordFor: fillColor. port fillPattern: (screen collect: [:maskWord | maskWord bitAnd: patternWord]). port combinationRule: Form paint. ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:52' prior: 22579816! setPaintColor: aColor "Install a new color used for filling." | paintColor screen patternWord | paintColor := aColor. paintColor ifNil: [paintColor := Color transparent]. paintColor isColor ifFalse: [ (paintColor isKindOf: InfiniteForm) ifFalse: [^self error:'Cannot install color']. ^port fillPattern: paintColor; combinationRule: Form paint]. "Okay, so paintColor really *is* a color" port sourceForm: nil. (paintColor isTranslucent) ifFalse: [ port fillPattern: paintColor. port combinationRule: Form paint. self depth = 8 ifTrue: [ port fillColor: (form balancedPatternFor: paintColor)]. ^self]. "paintColor is translucent color" self depth > 8 ifTrue: [ "BitBlt setup for alpha mapped transfer" port fillPattern: paintColor. self depth = 16 ifTrue: [port alphaBits: paintColor privateAlpha; combinationRule: 31] ifFalse: [port combinationRule: Form blend]. ^self]. "Can't represent actual transparency -- use stipple pattern" screen := self translucentMaskFor: paintColor alpha depth: self depth. patternWord := form pixelWordFor: paintColor. port fillPattern: (screen collect: [:maskWord | maskWord bitAnd: patternWord]). port combinationRule: Form paint ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:50'! translucentMaskFor: alphaValue depth: d "Return a pattern representing a mask usable for stipple transparency" ^(TranslucentPatterns at: d) at: ((alphaValue min: 1.0 max: 0.0) * 4) rounded + 1! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:49'! translucentPatterns TranslucentPatterns isNil ifTrue:[ self initializeTranslucentPatterns ]. ^ TranslucentPatterns ! ! !ThisContextEyeElement commentStamp: '' prior: 67604780! This eye element is used in the right panel of the debugger to show thiscontext instead of self as a label! !ThisContextEyeElement methodsFor: 'as yet unclassified' stamp: 'ClementBera 9/11/2013 08:45'! accessorCode ^ super label! ! !ThisContextEyeElement methodsFor: 'as yet unclassified' stamp: 'ClementBera 9/11/2013 08:44'! label ^ 'thisContext'! ! !HaloMorph methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 01:51' prior: 41526531! createHandleAt: aPoint color: aColor iconName: iconName | bou handle | bou := Rectangle center: aPoint extent: self handleSize asPoint. self gradientHalo ifTrue: [ handle := Morph newBounds: bou color: aColor. handle borderWidth: 1. handle useRoundedCorners. self setColor: aColor toHandle: handle] ifFalse: [handle := EllipseMorph newBounds: bou color: aColor]. "" handle borderColor: aColor muchDarker. handle wantsYellowButtonMenu: false. "" iconName isNil ifFalse: [| form | form := Smalltalk ui icons iconNamed: iconName ifNone: []. form isNil ifFalse: [| image | image := ImageMorph new. image form: form. image color: aColor contrastingForegroundColor. image lock. handle addMorphCentered: image]]. "" ^ handle! ! !HaloMorph methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 01:51' prior: 23186861! doRot: evt with: rotHandle "Update the rotation of my target if it is rotatable. Keep the relevant command object up to date." | degrees | evt hand obtainHalo: self. degrees := (evt cursorPoint - (target pointInWorld: target referencePosition)) degrees. degrees := degrees - angleOffset degrees. degrees := degrees detentBy: 10.0 atMultiplesOf: 90.0 snap: false. degrees = 0.0 ifTrue: [self setColor: Color lightBlue toHandle: rotHandle] ifFalse: [self setColor: Color blue toHandle: rotHandle]. rotHandle submorphsDo: [:m | m color: rotHandle color contrastingForegroundColor]. self removeAllHandlesBut: rotHandle. self showingDirectionHandles ifFalse: [self showDirectionHandles: true addHandles: false]. self addDirectionHandles. target rotationDegrees: degrees. rotHandle position: evt cursorPoint - (rotHandle extent // 2). ! ! !HaloMorph methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 01:51' prior: 23187782! doScale: evt with: scaleHandle "Update the scale of my target if it is scalable." | newHandlePos colorToUse | evt hand obtainHalo: self. newHandlePos := evt cursorPoint - (scaleHandle extent // 2). target scaleToMatch: newHandlePos. colorToUse := target scale = 1.0 ifTrue: [Color yellow] ifFalse: [Color orange]. self setColor: colorToUse toHandle: scaleHandle. scaleHandle submorphsDo: [:m | m color: colorToUse contrastingForegroundColor]. scaleHandle position: newHandlePos. ! ! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'ClementBera 9/11/2013 08:44'! addSelf: elements "Add self to the list of elements you can access in the inspector with the label thisContext" elements add: (ThisContextEyeElement host: self object).! ! !Color class methodsFor: 'initialization' stamp: 'FernandoOlivero 9/9/2013 15:09' prior: 67186842! initialize "Color initialize Details: Externally, the red, green, and blue components of color are floats in the range [0.0..1.0]. Internally, they are represented as integers in the range [0..ComponentMask] packing into a small integer to save space and to allow fast hashing and equality testing. For a general description of color representations for computer graphics, including the relationship between the RGB and HSV color models used here, see Chapter 17 of Foley and van Dam, Fundamentals of Interactive Computer Graphics, Addison-Wesley, 1982." ComponentMask := 1023. HalfComponentMask := 512. "used to round up in integer calculations" ComponentMax := 1023.0. "a Float used to normalize components" RedShift := 20. GreenShift := 10. BlueShift := 0. RandomStream := Random new. self initializeIndexedColors. self initializeColorRegistry. self initializeGrayToIndexMap. ! ! !Color methodsFor: 'conversions' stamp: 'FernandoOlivero 9/9/2013 01:51'! contrastingForegroundColor "Make a foreground color contrasting with me" ^self luminance >= 0.5 ifTrue: [Color black] ifFalse: [Color white]! ! Color removeSelector: #makeForegroundColor! Color class removeSelector: #translucentMaskFor:depth:! Color class removeSelector: #quickHighLight:! Color class removeSelector: #initializeTranslucentPatterns! Color class removeSelector: #initializeHighLights! "Graphics-Display Objects"! "Graphics-Primitives"! "Growl"! "Morphic-Base"! "Spec-Debugger"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(11 September 2013 9:26:05 am) Pharo.image priorSource: 17261497! ----STARTUP----an Array(11 September 2013 9:32:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 September 2013 9:32:25 am) Pharo-30389.image priorSource: 17284352! ----STARTUP----an Array(11 September 2013 2:33:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/11/2013 14:30' prior: 67593455! commentForCurrentUpdate ^ '10633 SettingsBrowser is *extremely* slow https://pharo.fogbugz.com/f/cases/10633 11580 PharoUsers>>#initialize should not set gravatar https://pharo.fogbugz.com/f/cases/11580 11577 Undeclared Variables: HighLightBitmaps->nil #TranslucentPatterns->nil https://pharo.fogbugz.com/f/cases/11577 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/11/2013 14:31'! script182 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.119.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.98.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.27.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1247.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/11/2013 14:31'! update30390 "self new update30390" self withUpdateLog: '10633 SettingsBrowser is *extremely* slow https://pharo.fogbugz.com/f/cases/10633 11580 PharoUsers>>#initialize should not set gravatar https://pharo.fogbugz.com/f/cases/11580 11577 Undeclared Variables: HighLightBitmaps->nil #TranslucentPatterns->nil https://pharo.fogbugz.com/f/cases/11577 '. self loadTogether: self script182 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FormCanvas commentStamp: '' prior: 42313098! Note that when shadowDrawing is true, shadowStipple may be either a color, for a solid shadow of the given color, or it may be a stipple used to simulate gray shading when the display cannot support alpha blending.! !DisplayMedium commentStamp: '' prior: 42233627! I am a display object which can both paint myself on a medium (displayOn: messages), and can act as a medium myself. My chief subclass is Form.! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'FernandoOlivero 9/11/2013 13:33' prior: 51546192! browseUndeclaredReferences " SystemNavigation new browseUndeclaredReferences " Undeclared removeUnreferencedKeys. Undeclared associations do: [:binding | self browseMessageList: (self allReferencesTo: binding ) name: 'References to Undeclared: ', binding key printString ]! ! !FormCanvas commentStamp: '' prior: 67627761! Note that when shadowDrawing is true, shadowStipple may be either a color, for a solid shadow of the given color, or it may be a stipple used to simulate gray shading when the display cannot support alpha blending.! !FormCanvas methodsFor: 'initialization' stamp: 'FernandoOlivero 9/11/2013 13:29' prior: 67607141! initializeTranslucentPatterns TranslucentPatterns := Array new: 8. #(1 2 4 8 ) do: [ :d | | mask bits pattern patternList | patternList := Array new: 5. mask := (1 bitShift: d) - 1. bits := 2 * d. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. "0% pattern" pattern := Bitmap with: 0 with: 0. patternList at: 1 put: pattern. "25% pattern" pattern := Bitmap with: mask with: 0. patternList at: 2 put: pattern. "50% pattern" pattern := Bitmap with: mask with: mask bitInvert32. patternList at: 3 put: pattern. "75% pattern" pattern := Bitmap with: mask with: 4294967295. patternList at: 4 put: pattern. "100% pattern" pattern := Bitmap with: 4294967295 with: 4294967295. patternList at: 5 put: pattern. TranslucentPatterns at: d put: patternList ]! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/11/2013 13:28' prior: 67610829! translucentMaskFor: alphaValue depth: d "Return a pattern representing a mask usable for stipple transparency" ^(TranslucentPatterns at: d) at: ((alphaValue min: 1.0 max: 0.0) * 4) rounded + 1 ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/11/2013 13:28' prior: 67611102! translucentPatterns TranslucentPatterns isNil ifTrue:[ self initializeTranslucentPatterns ]. ^ TranslucentPatterns ! ! !DisplayMedium commentStamp: '' prior: 67628038! I am a display object which can both paint myself on a medium (displayOn: messages), and can act as a medium myself. My chief subclass is Form.! !DisplayMedium methodsFor: 'private' stamp: 'FernandoOlivero 9/11/2013 13:33' prior: 67605532! highLightBitmaps "Quickly return a Bitblt-ready raw colorValue for highlighting areas." HighLightBitmaps isNil ifTrue:[ self initializeHighLights ]. ^ HighLightBitmaps ! ! !PharoUser methodsFor: 'initialization' stamp: 'MarcusDenker 9/11/2013 13:52' prior: 48958687! initialize super initialize. avatar := self defaultAvatar. keychain := KeyChain new. unlockedKeychain := UnlockedKeyChain new.! ! !SystemSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 9/11/2013 14:08' prior: 51671911! authorSettingOn: aBuilder (aBuilder setting: #authorFullName) order: -100000; parent: #codeEditing; label: 'Author identification' translated; target: Author; getSelector: #fullName; setSelector: #fullName:; notInStyle; default: ''; ghostHelp: 'VincentVanGogh'; description: AuthorNameRequest messagePrompt ! ! "Graphics-Display Objects"! "KeyChain"! "Morphic-Base"! "Settings-System"! "Tools"! ----End fileIn----! ----QUIT----an Array(11 September 2013 2:34:02 pm) Pharo.image priorSource: 17284561! ----STARTUP----an Array(11 September 2013 2:40:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 September 2013 2:40:26 pm) Pharo-30390.image priorSource: 17300038! ----STARTUP----an Array(12 September 2013 11:06:52 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/12/2013 11:04' prior: 67616519! commentForCurrentUpdate ^ '11583 Removing TranslucentPattern and HighLightBitmap class vars of Color https://pharo.fogbugz.com/f/cases/11583'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/12/2013 11:04'! script183 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.119.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.98.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.27.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.908.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1247.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/12/2013 11:04'! update30391 "self new update30391" self withUpdateLog: '11583 Removing TranslucentPattern and HighLightBitmap class vars of Color https://pharo.fogbugz.com/f/cases/11583'. self loadTogether: self script183 merge: false. Color removeClassVarNamed: 'HighLightBitmaps'; removeClassVarNamed: 'TranslucentPatterns'; compileAll. . self flushCaches. ! ! "ScriptLoader30"! ----End fileIn----! ----QUIT----an Array(12 September 2013 11:07 am) Pharo.image priorSource: 17300247! ----STARTUP----an Array(12 September 2013 11:13:13 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 September 2013 11:13:13 am) Pharo-30391.image priorSource: 17311506! ----STARTUP----an Array(12 September 2013 12:03:11 pm) as /Users/denker/Desktop/30391/Pharo-30391.image! ----QUIT----an Array(12 September 2013 12:03:44 pm) Pharo-30391.image priorSource: 17311714! ----STARTUP----an Array(12 September 2013 12:03:51 pm) as /Users/denker/Desktop/30391/Pharo-30391.image! ----QUIT----an Array(12 September 2013 12:03:53 pm) Pharo-30391.image priorSource: 17311919! ----STARTUP----an Array(12 September 2013 1:01:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/12/2013 12:59' prior: 67632206! commentForCurrentUpdate ^ '10913 Global Session object should have creation time stamp https://pharo.fogbugz.com/f/cases/10913 11568 World > System > System Reporter MNU #platformSubtype https://pharo.fogbugz.com/f/cases/11568'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/12/2013 13:00'! script184 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.119.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.98.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.27.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.909.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1250.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/12/2013 13:00'! update30392 "self new update30392" self withUpdateLog: '10913 Global Session object should have creation time stamp https://pharo.fogbugz.com/f/cases/10913 11568 World > System > System Reporter MNU #platformSubtype https://pharo.fogbugz.com/f/cases/11568'. self loadTogether: self script184 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Session commentStamp: '' prior: 42659117! I am a unique identifier for the current smalltalk session. On each image startup the current session is invalidated and a new session is created. ! !SystemReporter methodsFor: 'reporting' stamp: 'MarcusDenker 9/12/2013 11:13' prior: 51659348! reportOS: aStream self header: 'Operating System/Hardware' on: aStream. aStream nextPutAll: Smalltalk os platformName; space; nextPutAll: Smalltalk os version; space; nextPutAll: Smalltalk os subtype; cr ! ! !Session commentStamp: '' prior: 67655120! I am a unique identifier for the current smalltalk session. On each image startup the current session is invalidated and a new session is created. ! !Session methodsFor: 'accessing' stamp: 'CamilloBruni 8/21/2013 18:26'! age ^ DateAndTime now - self creationTime! ! !Session methodsFor: 'accessing' stamp: 'CamilloBruni 8/21/2013 18:25'! creationTime ^ creationTime! ! !Session methodsFor: 'initialize' stamp: 'CamilloBruni 8/21/2013 18:26'! initialize creationTime := DateAndTime now.! ! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 September 2013 1:01:56 pm) Pharo.image priorSource: 17312120! ----STARTUP----an Array(12 September 2013 1:08:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 September 2013 1:08:05 pm) Pharo-30392.image priorSource: 17324529! ----STARTUP----an Array(12 September 2013 1:57:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/12/2013 13:55' prior: 67644075! commentForCurrentUpdate ^ '11587 Spotlight does not allow browsing of selectors with spaces https://pharo.fogbugz.com/f/cases/11587 11585 Settings should not ask for name https://pharo.fogbugz.com/f/cases/11585 11586 FormCanvas should always use the accessor to access TranslucentPattern https://pharo.fogbugz.com/f/cases/11586'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/12/2013 13:55'! script185 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.60.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.119.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-EstebanLorenzano.859.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.104.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.105.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.235.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.909.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1252.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/12/2013 13:55'! update30393 "self new update30393" self withUpdateLog: '11587 Spotlight does not allow browsing of selectors with spaces https://pharo.fogbugz.com/f/cases/11587 11585 Settings should not ask for name https://pharo.fogbugz.com/f/cases/11585 11586 FormCanvas should always use the accessor to access TranslucentPattern https://pharo.fogbugz.com/f/cases/11586'. self loadTogether: self script185 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FormCanvas class methodsFor: 'caching' stamp: 'FernandoOlivero 9/12/2013 13:35'! initializeTranslucentPatterns TranslucentPatterns := Array new: 8. #(1 2 4 8 ) do: [ :d | | mask bits pattern patternList | patternList := Array new: 5. mask := (1 bitShift: d) - 1. bits := 2 * d. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. "0% pattern" pattern := Bitmap with: 0 with: 0. patternList at: 1 put: pattern. "25% pattern" pattern := Bitmap with: mask with: 0. patternList at: 2 put: pattern. "50% pattern" pattern := Bitmap with: mask with: mask bitInvert32. patternList at: 3 put: pattern. "75% pattern" pattern := Bitmap with: mask with: 4294967295. patternList at: 4 put: pattern. "100% pattern" pattern := Bitmap with: 4294967295 with: 4294967295. patternList at: 5 put: pattern. TranslucentPatterns at: d put: patternList ]! ! !FormCanvas class methodsFor: 'caching' stamp: 'FernandoOlivero 9/12/2013 13:36'! translucentPatterns TranslucentPatterns isNil ifTrue:[ self initializeTranslucentPatterns ]. ^ TranslucentPatterns ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/12/2013 13:36' prior: 67630001! translucentMaskFor: alphaValue depth: d "Return a pattern representing a mask usable for stipple transparency" ^(self translucentPatterns at: d) at: ((alphaValue min: 1.0 max: 0.0) * 4) rounded + 1 ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/12/2013 13:36' prior: 67630292! translucentPatterns ^ self class translucentPatterns! ! !SystemSystemSettings class methodsFor: 'settings' stamp: 'MarcusDenker 9/12/2013 13:14' prior: 67631227! authorSettingOn: aBuilder (aBuilder setting: #authorFullName) order: -100000; parent: #codeEditing; label: 'Author identification' translated; target: Author; getSelector: #fullNamePerSe; setSelector: #fullName:; notInStyle; default: ''; ghostHelp: 'VincentVanGogh'; description: AuthorNameRequest messagePrompt ! ! !Spotlight methodsFor: 'private' stamp: 'MarcusDenker 9/12/2013 13:49' prior: 50759638! resolveSymbol: symbol (self symbolIsSelector: symbol) ifTrue: [ ^self systemNavigation browseAllImplementorsOf: symbol findSelector ]. (self symbolIsClass: symbol) ifTrue: [ ^Smalltalk tools browser openOnClass: (Smalltalk globals at: symbol) ]. (self symbolIsPackage: symbol) ifTrue: [ ^Smalltalk tools browser openOnPackage: (RPackage organizer packageNamed: symbol asString) ]. self inform: ('There is no recognizable symbol named ', self model contents)! ! "Morphic-Base"! "Settings-System"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 September 2013 1:57:59 pm) Pharo.image priorSource: 17324738! ----STARTUP----an Array(12 September 2013 2:04:04 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 September 2013 2:04:04 pm) Pharo-30393.image priorSource: 17339025! ----STARTUP----an Array(13 September 2013 8:56:51 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/13/2013 08:54' prior: 67656696! commentForCurrentUpdate ^ '11575 Add a Spec model for DiffMorph https://pharo.fogbugz.com/f/cases/11575 11533 Change testEnsureDeleted into testEnsureDelete https://pharo.fogbugz.com/f/cases/11533 11593 MCMergeOrLoadWarning actions should use #resume: instead of #return https://pharo.fogbugz.com/f/cases/11593'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/13/2013 08:54'! script186 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.525.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.119.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-StephaneDucasse.77.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.104.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.63.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.30.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.381.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.136.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.909.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1252.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.7.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/13/2013 08:55'! update30394 "self new update30394" self withUpdateLog: '11575 Add a Spec model for DiffMorph https://pharo.fogbugz.com/f/cases/11575 11533 Change testEnsureDeleted into testEnsureDelete https://pharo.fogbugz.com/f/cases/11533 11593 MCMergeOrLoadWarning actions should use #resume: instead of #return https://pharo.fogbugz.com/f/cases/11593'. self loadTogether: self script186 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DiffModel commentStamp: '' prior: 0! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DiffMorph commentStamp: '' prior: 0! I am a morph useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information.! !DiffModel commentStamp: '' prior: 67682403! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/12/2013 17:38'! exampleWithOptions " self exampleWithOptions " ^ self new showOptions: true; leftText: (True >> #and:) sourceCode; rightText: (True >> #or:) sourceCode; contextClass: True; openWithSpec! ! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/10/2013 22:59'! exampleWithoutOptions " self exampleWithoutOptions " ^ self new showOptions: false; leftText: 'Old text'; rightText: 'New text'; openWithSpec ! ! !DiffModel class methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:33'! spec ^ {#DiffMorph. #from:to:contextClass:. {#model. #leftText}. { #model. #rightText}. { #model. #contextClass}. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. #(model help). #setOptionsPanel:. #(model showOptions). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !DiffModel methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:34'! contextClass ^ contextClassHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:35'! contextClass: anObject contextClassHolder contents: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/12/2013 17:36'! initialize super initialize. leftTextHolder := '' asValueHolder. rightTextHolder := '' asValueHolder. contextClassHolder := nil asValueHolder. leftTextHolder whenChangedDo: [ :newText | self widget ifNotNil: [:w | w srcText: newText; updateText ] ]. rightTextHolder whenChangedDo: [ :newText | self widget ifNotNil: [:w | w dstText: newText; updateText ] ]. contextClassHolder whenChangedDo: [ :newClass | self widget ifNotNil: [:w | w contextClass: newClass; updateText ] ]. showOptions := true asValueHolder. showOptions whenChangedDo: [ :aBoolean | aBoolean ifTrue: [ self changed: #addOptions ] ifFalse: [ self changed: #removeOptions ] ]! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/8/2012 16:06'! leftText ^ leftTextHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:47'! leftText: anObject leftTextHolder contents: anObject ! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:38'! rightText ^ rightTextHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:47'! rightText: anObject rightTextHolder contents: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/11/2013 15:21'! showOptions ^ showOptions contents! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/9/2013 15:03'! showOptions: aBoolean showOptions contents: aBoolean! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/12/2013 23:32' prior: 67221603! cancel ^ self resume: nil! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/12/2013 23:32' prior: 67221715! load ^ self resume: true! ! !MCMergeOrLoadWarning methodsFor: 'actions' stamp: 'CamilloBruni 9/12/2013 23:32' prior: 67221826! merge ^ self resume: false! ! !FileReferenceTest methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 14:48'! testEnsureDelete | reference | reference := filesystem / 'plonk'. "Deletes the file if it exists" reference ensureCreateFile. self assert: reference exists. reference ensureDelete. self deny: reference exists. "No-op if file does not exist" reference ensureDelete! ! !DiffMorph commentStamp: '' prior: 67682690! I am a morph useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information.! !DiffMorph methodsFor: 'initialization' stamp: 'MartinDias 9/12/2013 17:20'! addMainMorphsWith: topOffset | halfWidth | halfWidth := self joinMorph width / 2. self addMorph: self srcMorph fullFrame: (LayoutFrame identity rightFraction: 0.5; topOffset: topOffset; rightOffset: halfWidth negated). self addMorph: self joinMorph fullFrame: (LayoutFrame identity leftFraction: 0.5; rightFraction: 0.5; leftOffset: halfWidth negated; rightOffset: halfWidth; topOffset: topOffset). self addMorph: self dstMorph fullFrame: (LayoutFrame identity leftFraction: 0.5; topOffset: topOffset; leftOffset: halfWidth; rightOffset: (self scrollbarMorph width + self mapMorph width) negated). self addMorph: self scrollbarMorph fullFrame: (LayoutFrame identity leftFraction: 1; leftOffset: self scrollbarMorph width negated - self mapMorph width; rightOffset: self mapMorph width negated; topOffset: topOffset). self addMorph: self mapMorph fullFrame: (LayoutFrame identity leftFraction: 1; leftOffset: self mapMorph width negated; topOffset: topOffset).! ! !DiffMorph methodsFor: 'initialization' stamp: 'MartinDias 9/12/2013 17:20'! addMorphsWithOptions self addMainMorphsWith: optionsPanel height. self addMorph: optionsPanel fullFrame: (LayoutFrame identity bottomFraction: 0; bottomOffset: optionsPanel height)! ! !DiffMorph methodsFor: 'initialization' stamp: 'MartinDias 9/12/2013 17:20'! addMorphsWithoutOptions self addMainMorphsWith: 0! ! !DiffMorph methodsFor: 'protocol' stamp: 'MartinDias 9/9/2013 14:52'! addOptionsPanel self removeAllMorphs. self addMorphsWithOptions! ! !DiffMorph methodsFor: 'initialization' stamp: 'MartinDias 9/9/2013 14:48' prior: 20848855! defaultColor "Answer the default color for the receiver." ^ Color transparent! ! !DiffMorph methodsFor: 'initialization' stamp: 'MartinDias 9/12/2013 17:21' prior: 20849013! initialize "Initialize the receiver." | exv exh ppCheckbox | super initialize. self prettyPrint: CodeHolder diffsWithPrettyPrint. ppCheckbox := self newPrettyPrintCheckboxMorph. optionsPanel := self newPanel addMorph: ((self newRow: {ppCheckbox}) listCentering: #bottomRight); color: self defaultColor. optionsPanel vResizing: #shrinkWrap. optionsPanel extent: optionsPanel minExtent. self srcMorph: self newSrcMorph; joinMorph: self newJoinMorph; dstMorph: self newDstMorph; scrollbarMorph: self newScrollbarMorph; mapMorph: self newMapMorph; changeProportionalLayout. self addMorphsWithOptions. exv := ExclusiveWeakMessageSend newSharedState. exh := ExclusiveWeakMessageSend newSharedState. self srcMorph when: #vScroll send: #srcScroll: to: self exclusive: exv; when: #hScroll send: #hScrollValue: to: self dstMorph exclusive: exh. self dstMorph when: #vScroll send: #dstScroll: to: self exclusive: exv; when: #hScroll send: #hScrollValue: to: self srcMorph exclusive: exh. self linkSubmorphsToSplitters; extent: self initialExtent! ! !DiffMorph methodsFor: 'protocol' stamp: 'MartinDias 9/9/2013 14:52'! removeOptionsPanel self removeAllMorphs. self addMorphsWithoutOptions! ! !DiffMorph methodsFor: 'private' stamp: 'MartinDias 9/9/2013 15:09'! setOptionsPanel: aBoolean "This is a private method. The implementation is based on the fact the options are set by default" aBoolean ifFalse: [ self removeOptionsPanel ]! ! !DiffMorph methodsFor: 'as yet unclassified' stamp: 'MartinDias 9/9/2013 15:07'! update: aSymbol aSymbol == #addOptions ifTrue: [ ^ self addOptionsPanel ]. aSymbol == #removeOptions ifTrue: [ ^ self removeOptionsPanel ]. ^ super update: aSymbol! ! FileReferenceTest removeSelector: #testEnsureDeleted! "FileSystem-Tests-Core"! "Monticello"! "Polymorph-Tools-Diff"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(13 September 2013 8:57:01 am) Pharo.image priorSource: 17339234! ----STARTUP----an Array(13 September 2013 9:03:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 September 2013 9:03:11 am) Pharo-30394.image priorSource: 17359202! ----STARTUP----an Array(13 September 2013 11:21:47 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/13/2013 11:19' prior: 67671192! commentForCurrentUpdate ^ '11592 remove more senders of #halt https://pharo.fogbugz.com/f/cases/11592 11591 RBCollectionCopyEmptyRule does not work on traits https://pharo.fogbugz.com/f/cases/11591 7514 matching of 0 length regex https://pharo.fogbugz.com/f/cases/7514'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/13/2013 11:19'! script187 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.121.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.117.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1607.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-EstebanLorenzano.256.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.104.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.21.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-MarcusDenker.908.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.65.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.384.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.909.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-MarcusDenker.12.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1255.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/13/2013 11:20'! update30395 "self new update30395" self withUpdateLog: '11592 remove more senders of #halt https://pharo.fogbugz.com/f/cases/11592 11591 RBCollectionCopyEmptyRule does not work on traits https://pharo.fogbugz.com/f/cases/11591 7514 matching of 0 length regex https://pharo.fogbugz.com/f/cases/7514'. self loadTogether: self script187 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Form methodsFor: 'filling' stamp: 'MarcusDenker 9/12/2013 16:36' prior: 22506285! findShapeAroundSeedBlock: seedBlock "Build a shape that is black in any region marked by seedBlock. SeedBlock will be supplied a form, in which to blacken various pixels as 'seeds'. Then the seeds are smeared until there is no change in the smear when it fills the region, ie, when smearing hits a black border and thus goes no further." | smearForm previousSmear all count smearPort | self assert: [self depth > 1]. "Only meaningful for B/W forms." all := self boundingBox. smearForm := Form extent: self extent. smearPort := BitBlt current toForm: smearForm. seedBlock value: smearForm. "Blacken seeds to be smeared" smearPort copyForm: self to: 0 @ 0 rule: Form erase. "Clear any in black" previousSmear := smearForm deepCopy. count := 1. [count = 10 and: "check for no change every 10 smears" [count := 1. previousSmear copy: all from: 0 @ 0 in: smearForm rule: Form reverse. previousSmear isAllWhite]] whileFalse: [smearPort copyForm: smearForm to: 1 @ 0 rule: Form under. smearPort copyForm: smearForm to: -1 @ 0 rule: Form under. "After horiz smear, trim around the region border" smearPort copyForm: self to: 0 @ 0 rule: Form erase. smearPort copyForm: smearForm to: 0 @ 1 rule: Form under. smearPort copyForm: smearForm to: 0 @ -1 rule: Form under. "After vert smear, trim around the region border" smearPort copyForm: self to: 0 @ 0 rule: Form erase. count := count+1. count = 9 ifTrue: "Save penultimate smear for comparison" [previousSmear copy: all from: 0 @ 0 in: smearForm rule: Form over]]. "Now paint the filled region in me with aHalftone" ^ smearForm! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MarcusDenker 9/12/2013 16:38' prior: 48559927! becomeUncompact: aClass "The inverse of #becomeCompact. However, some classes can not be uncompact: see #checkCanBeUncompact." | compactClassesArray index | compactClassesArray := Smalltalk compactClassesArray. (index := aClass indexIfCompact) = 0 ifTrue: [^ self]. self assert:[compactClassesArray includes: aClass]. aClass checkCanBeUncompact. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: 0. "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Make sure there are no compact ones left around" Smalltalk garbageCollect. "Remove this class from the compact class table" compactClassesArray at: index put: nil. ! ! !VariableNode methodsFor: 'code generation' stamp: 'MarcusDenker 9/12/2013 16:40' prior: 54632472! emitCodeForStorePop: stack encoder: encoder self assert: [self type ~= 1]. encoder genStorePopInstVar: index. stack pop: 1! ! !UCSTable class methodsFor: '*Unicode-Initialization' stamp: 'MarcusDenker 9/12/2013 16:39' prior: 53527865! initializeGB2312Table "UCSTable initializeGB2312Table" | table size gb2312 unicode gb23122 | table := #(16r2121 16r3000 16r2122 16r3001 16r2123 16r3002 16r2124 16r30FB 16r2125 16r02C9 16r2126 16r02C7 16r2127 16r00A8 16r2128 16r3003 16r2129 16r3005 16r212A 16r2015 16r212B 16rFF5E 16r212C 16r2016 16r212D 16r2026 16r212E 16r2018 16r212F 16r2019 16r2130 16r201C 16r2131 16r201D 16r2132 16r3014 16r2133 16r3015 16r2134 16r3008 16r2135 16r3009 16r2136 16r300A 16r2137 16r300B 16r2138 16r300C 16r2139 16r300D 16r213A 16r300E 16r213B 16r300F 16r213C 16r3016 16r213D 16r3017 16r213E 16r3010 16r213F 16r3011 16r2140 16r00B1 16r2141 16r00D7 16r2142 16r00F7 16r2143 16r2236 16r2144 16r2227 16r2145 16r2228 16r2146 16r2211 16r2147 16r220F 16r2148 16r222A 16r2149 16r2229 16r214A 16r2208 16r214B 16r2237 16r214C 16r221A 16r214D 16r22A5 16r214E 16r2225 16r214F 16r2220 16r2150 16r2312 16r2151 16r2299 16r2152 16r222B 16r2153 16r222E 16r2154 16r2261 16r2155 16r224C 16r2156 16r2248 16r2157 16r223D 16r2158 16r221D 16r2159 16r2260 16r215A 16r226E 16r215B 16r226F 16r215C 16r2264 16r215D 16r2265 16r215E 16r221E 16r215F 16r2235 16r2160 16r2234 16r2161 16r2642 16r2162 16r2640 16r2163 16r00B0 16r2164 16r2032 16r2165 16r2033 16r2166 16r2103 16r2167 16rFF04 16r2168 16r00A4 16r2169 16rFFE0 16r216A 16rFFE1 16r216B 16r2030 16r216C 16r00A7 16r216D 16r2116 16r216E 16r2606 16r216F 16r2605 16r2170 16r25CB 16r2171 16r25CF 16r2172 16r25CE 16r2173 16r25C7 16r2174 16r25C6 16r2175 16r25A1 16r2176 16r25A0 16r2177 16r25B3 16r2178 16r25B2 16r2179 16r203B 16r217A 16r2192 16r217B 16r2190 16r217C 16r2191 16r217D 16r2193 16r217E 16r3013 16r2231 16r2488 16r2232 16r2489 16r2233 16r248A 16r2234 16r248B 16r2235 16r248C 16r2236 16r248D 16r2237 16r248E 16r2238 16r248F 16r2239 16r2490 16r223A 16r2491 16r223B 16r2492 16r223C 16r2493 16r223D 16r2494 16r223E 16r2495 16r223F 16r2496 16r2240 16r2497 16r2241 16r2498 16r2242 16r2499 16r2243 16r249A 16r2244 16r249B 16r2245 16r2474 16r2246 16r2475 16r2247 16r2476 16r2248 16r2477 16r2249 16r2478 16r224A 16r2479 16r224B 16r247A 16r224C 16r247B 16r224D 16r247C 16r224E 16r247D 16r224F 16r247E 16r2250 16r247F 16r2251 16r2480 16r2252 16r2481 16r2253 16r2482 16r2254 16r2483 16r2255 16r2484 16r2256 16r2485 16r2257 16r2486 16r2258 16r2487 16r2259 16r2460 16r225A 16r2461 16r225B 16r2462 16r225C 16r2463 16r225D 16r2464 16r225E 16r2465 16r225F 16r2466 16r2260 16r2467 16r2261 16r2468 16r2262 16r2469 16r2265 16r3220 16r2266 16r3221 16r2267 16r3222 16r2268 16r3223 16r2269 16r3224 16r226A 16r3225 16r226B 16r3226 16r226C 16r3227 16r226D 16r3228 16r226E 16r3229 16r2271 16r2160 16r2272 16r2161 16r2273 16r2162 16r2274 16r2163 16r2275 16r2164 16r2276 16r2165 16r2277 16r2166 16r2278 16r2167 16r2279 16r2168 16r227A 16r2169 16r227B 16r216A 16r227C 16r216B 16r2321 16rFF01 16r2322 16rFF02 16r2323 16rFF03 16r2324 16rFFE5 16r2325 16rFF05 16r2326 16rFF06 16r2327 16rFF07 16r2328 16rFF08 16r2329 16rFF09 16r232A 16rFF0A 16r232B 16rFF0B 16r232C 16rFF0C 16r232D 16rFF0D 16r232E 16rFF0E 16r232F 16rFF0F 16r2330 16rFF10 16r2331 16rFF11 16r2332 16rFF12 16r2333 16rFF13 16r2334 16rFF14 16r2335 16rFF15 16r2336 16rFF16 16r2337 16rFF17 16r2338 16rFF18 16r2339 16rFF19 16r233A 16rFF1A 16r233B 16rFF1B 16r233C 16rFF1C 16r233D 16rFF1D 16r233E 16rFF1E 16r233F 16rFF1F 16r2340 16rFF20 16r2341 16rFF21 16r2342 16rFF22 16r2343 16rFF23 16r2344 16rFF24 16r2345 16rFF25 16r2346 16rFF26 16r2347 16rFF27 16r2348 16rFF28 16r2349 16rFF29 16r234A 16rFF2A 16r234B 16rFF2B 16r234C 16rFF2C 16r234D 16rFF2D 16r234E 16rFF2E 16r234F 16rFF2F 16r2350 16rFF30 16r2351 16rFF31 16r2352 16rFF32 16r2353 16rFF33 16r2354 16rFF34 16r2355 16rFF35 16r2356 16rFF36 16r2357 16rFF37 16r2358 16rFF38 16r2359 16rFF39 16r235A 16rFF3A 16r235B 16rFF3B 16r235C 16rFF3C 16r235D 16rFF3D 16r235E 16rFF3E 16r235F 16rFF3F 16r2360 16rFF40 16r2361 16rFF41 16r2362 16rFF42 16r2363 16rFF43 16r2364 16rFF44 16r2365 16rFF45 16r2366 16rFF46 16r2367 16rFF47 16r2368 16rFF48 16r2369 16rFF49 16r236A 16rFF4A 16r236B 16rFF4B 16r236C 16rFF4C 16r236D 16rFF4D 16r236E 16rFF4E 16r236F 16rFF4F 16r2370 16rFF50 16r2371 16rFF51 16r2372 16rFF52 16r2373 16rFF53 16r2374 16rFF54 16r2375 16rFF55 16r2376 16rFF56 16r2377 16rFF57 16r2378 16rFF58 16r2379 16rFF59 16r237A 16rFF5A 16r237B 16rFF5B 16r237C 16rFF5C 16r237D 16rFF5D 16r237E 16rFFE3 16r2421 16r3041 16r2422 16r3042 16r2423 16r3043 16r2424 16r3044 16r2425 16r3045 16r2426 16r3046 16r2427 16r3047 16r2428 16r3048 16r2429 16r3049 16r242A 16r304A 16r242B 16r304B 16r242C 16r304C 16r242D 16r304D 16r242E 16r304E 16r242F 16r304F 16r2430 16r3050 16r2431 16r3051 16r2432 16r3052 16r2433 16r3053 16r2434 16r3054 16r2435 16r3055 16r2436 16r3056 16r2437 16r3057 16r2438 16r3058 16r2439 16r3059 16r243A 16r305A 16r243B 16r305B 16r243C 16r305C 16r243D 16r305D 16r243E 16r305E 16r243F 16r305F 16r2440 16r3060 16r2441 16r3061 16r2442 16r3062 16r2443 16r3063 16r2444 16r3064 16r2445 16r3065 16r2446 16r3066 16r2447 16r3067 16r2448 16r3068 16r2449 16r3069 16r244A 16r306A 16r244B 16r306B 16r244C 16r306C 16r244D 16r306D 16r244E 16r306E 16r244F 16r306F 16r2450 16r3070 16r2451 16r3071 16r2452 16r3072 16r2453 16r3073 16r2454 16r3074 16r2455 16r3075 16r2456 16r3076 16r2457 16r3077 16r2458 16r3078 16r2459 16r3079 16r245A 16r307A 16r245B 16r307B 16r245C 16r307C 16r245D 16r307D 16r245E 16r307E 16r245F 16r307F 16r2460 16r3080 16r2461 16r3081 16r2462 16r3082 16r2463 16r3083 16r2464 16r3084 16r2465 16r3085 16r2466 16r3086 16r2467 16r3087 16r2468 16r3088 16r2469 16r3089 16r246A 16r308A 16r246B 16r308B 16r246C 16r308C 16r246D 16r308D 16r246E 16r308E 16r246F 16r308F 16r2470 16r3090 16r2471 16r3091 16r2472 16r3092 16r2473 16r3093 16r2521 16r30A1 16r2522 16r30A2 16r2523 16r30A3 16r2524 16r30A4 16r2525 16r30A5 16r2526 16r30A6 16r2527 16r30A7 16r2528 16r30A8 16r2529 16r30A9 16r252A 16r30AA 16r252B 16r30AB 16r252C 16r30AC 16r252D 16r30AD 16r252E 16r30AE 16r252F 16r30AF 16r2530 16r30B0 16r2531 16r30B1 16r2532 16r30B2 16r2533 16r30B3 16r2534 16r30B4 16r2535 16r30B5 16r2536 16r30B6 16r2537 16r30B7 16r2538 16r30B8 16r2539 16r30B9 16r253A 16r30BA 16r253B 16r30BB 16r253C 16r30BC 16r253D 16r30BD 16r253E 16r30BE 16r253F 16r30BF 16r2540 16r30C0 16r2541 16r30C1 16r2542 16r30C2 16r2543 16r30C3 16r2544 16r30C4 16r2545 16r30C5 16r2546 16r30C6 16r2547 16r30C7 16r2548 16r30C8 16r2549 16r30C9 16r254A 16r30CA 16r254B 16r30CB 16r254C 16r30CC 16r254D 16r30CD 16r254E 16r30CE 16r254F 16r30CF 16r2550 16r30D0 16r2551 16r30D1 16r2552 16r30D2 16r2553 16r30D3 16r2554 16r30D4 16r2555 16r30D5 16r2556 16r30D6 16r2557 16r30D7 16r2558 16r30D8 16r2559 16r30D9 16r255A 16r30DA 16r255B 16r30DB 16r255C 16r30DC 16r255D 16r30DD 16r255E 16r30DE 16r255F 16r30DF 16r2560 16r30E0 16r2561 16r30E1 16r2562 16r30E2 16r2563 16r30E3 16r2564 16r30E4 16r2565 16r30E5 16r2566 16r30E6 16r2567 16r30E7 16r2568 16r30E8 16r2569 16r30E9 16r256A 16r30EA 16r256B 16r30EB 16r256C 16r30EC 16r256D 16r30ED 16r256E 16r30EE 16r256F 16r30EF 16r2570 16r30F0 16r2571 16r30F1 16r2572 16r30F2 16r2573 16r30F3 16r2574 16r30F4 16r2575 16r30F5 16r2576 16r30F6 16r2621 16r0391 16r2622 16r0392 16r2623 16r0393 16r2624 16r0394 16r2625 16r0395 16r2626 16r0396 16r2627 16r0397 16r2628 16r0398 16r2629 16r0399 16r262A 16r039A 16r262B 16r039B 16r262C 16r039C 16r262D 16r039D 16r262E 16r039E 16r262F 16r039F 16r2630 16r03A0 16r2631 16r03A1 16r2632 16r03A3 16r2633 16r03A4 16r2634 16r03A5 16r2635 16r03A6 16r2636 16r03A7 16r2637 16r03A8 16r2638 16r03A9 16r2641 16r03B1 16r2642 16r03B2 16r2643 16r03B3 16r2644 16r03B4 16r2645 16r03B5 16r2646 16r03B6 16r2647 16r03B7 16r2648 16r03B8 16r2649 16r03B9 16r264A 16r03BA 16r264B 16r03BB 16r264C 16r03BC 16r264D 16r03BD 16r264E 16r03BE 16r264F 16r03BF 16r2650 16r03C0 16r2651 16r03C1 16r2652 16r03C3 16r2653 16r03C4 16r2654 16r03C5 16r2655 16r03C6 16r2656 16r03C7 16r2657 16r03C8 16r2658 16r03C9 16r2721 16r0410 16r2722 16r0411 16r2723 16r0412 16r2724 16r0413 16r2725 16r0414 16r2726 16r0415 16r2727 16r0401 16r2728 16r0416 16r2729 16r0417 16r272A 16r0418 16r272B 16r0419 16r272C 16r041A 16r272D 16r041B 16r272E 16r041C 16r272F 16r041D 16r2730 16r041E 16r2731 16r041F 16r2732 16r0420 16r2733 16r0421 16r2734 16r0422 16r2735 16r0423 16r2736 16r0424 16r2737 16r0425 16r2738 16r0426 16r2739 16r0427 16r273A 16r0428 16r273B 16r0429 16r273C 16r042A 16r273D 16r042B 16r273E 16r042C 16r273F 16r042D 16r2740 16r042E 16r2741 16r042F 16r2751 16r0430 16r2752 16r0431 16r2753 16r0432 16r2754 16r0433 16r2755 16r0434 16r2756 16r0435 16r2757 16r0451 16r2758 16r0436 16r2759 16r0437 16r275A 16r0438 16r275B 16r0439 16r275C 16r043A 16r275D 16r043B 16r275E 16r043C 16r275F 16r043D 16r2760 16r043E 16r2761 16r043F 16r2762 16r0440 16r2763 16r0441 16r2764 16r0442 16r2765 16r0443 16r2766 16r0444 16r2767 16r0445 16r2768 16r0446 16r2769 16r0447 16r276A 16r0448 16r276B 16r0449 16r276C 16r044A 16r276D 16r044B 16r276E 16r044C 16r276F 16r044D 16r2770 16r044E 16r2771 16r044F 16r2821 16r0101 16r2822 16r00E1 16r2823 16r01CE 16r2824 16r00E0 16r2825 16r0113 16r2826 16r00E9 16r2827 16r011B 16r2828 16r00E8 16r2829 16r012B 16r282A 16r00ED 16r282B 16r01D0 16r282C 16r00EC 16r282D 16r014D 16r282E 16r00F3 16r282F 16r01D2 16r2830 16r00F2 16r2831 16r016B 16r2832 16r00FA 16r2833 16r01D4 16r2834 16r00F9 16r2835 16r01D6 16r2836 16r01D8 16r2837 16r01DA 16r2838 16r01DC 16r2839 16r00FC 16r283A 16r00EA 16r2845 16r3105 16r2846 16r3106 16r2847 16r3107 16r2848 16r3108 16r2849 16r3109 16r284A 16r310A 16r284B 16r310B 16r284C 16r310C 16r284D 16r310D 16r284E 16r310E 16r284F 16r310F 16r2850 16r3110 16r2851 16r3111 16r2852 16r3112 16r2853 16r3113 16r2854 16r3114 16r2855 16r3115 16r2856 16r3116 16r2857 16r3117 16r2858 16r3118 16r2859 16r3119 16r285A 16r311A 16r285B 16r311B 16r285C 16r311C 16r285D 16r311D 16r285E 16r311E 16r285F 16r311F 16r2860 16r3120 16r2861 16r3121 16r2862 16r3122 16r2863 16r3123 16r2864 16r3124 16r2865 16r3125 16r2866 16r3126 16r2867 16r3127 16r2868 16r3128 16r2869 16r3129 16r2924 16r2500 16r2925 16r2501 16r2926 16r2502 16r2927 16r2503 16r2928 16r2504 16r2929 16r2505 16r292A 16r2506 16r292B 16r2507 16r292C 16r2508 16r292D 16r2509 16r292E 16r250A 16r292F 16r250B 16r2930 16r250C 16r2931 16r250D 16r2932 16r250E 16r2933 16r250F 16r2934 16r2510 16r2935 16r2511 16r2936 16r2512 16r2937 16r2513 16r2938 16r2514 16r2939 16r2515 16r293A 16r2516 16r293B 16r2517 16r293C 16r2518 16r293D 16r2519 16r293E 16r251A 16r293F 16r251B 16r2940 16r251C 16r2941 16r251D 16r2942 16r251E 16r2943 16r251F 16r2944 16r2520 16r2945 16r2521 16r2946 16r2522 16r2947 16r2523 16r2948 16r2524 16r2949 16r2525 16r294A 16r2526 16r294B 16r2527 16r294C 16r2528 16r294D 16r2529 16r294E 16r252A 16r294F 16r252B 16r2950 16r252C 16r2951 16r252D 16r2952 16r252E 16r2953 16r252F 16r2954 16r2530 16r2955 16r2531 16r2956 16r2532 16r2957 16r2533 16r2958 16r2534 16r2959 16r2535 16r295A 16r2536 16r295B 16r2537 16r295C 16r2538 16r295D 16r2539 16r295E 16r253A 16r295F 16r253B 16r2960 16r253C 16r2961 16r253D 16r2962 16r253E 16r2963 16r253F 16r2964 16r2540 16r2965 16r2541 16r2966 16r2542 16r2967 16r2543 16r2968 16r2544 16r2969 16r2545 16r296A 16r2546 16r296B 16r2547 16r296C 16r2548 16r296D 16r2549 16r296E 16r254A 16r296F 16r254B 16r3021 16r554A 16r3022 16r963F 16r3023 16r57C3 16r3024 16r6328 16r3025 16r54CE 16r3026 16r5509 16r3027 16r54C0 16r3028 16r7691 16r3029 16r764C 16r302A 16r853C 16r302B 16r77EE 16r302C 16r827E 16r302D 16r788D 16r302E 16r7231 16r302F 16r9698 16r3030 16r978D 16r3031 16r6C28 16r3032 16r5B89 16r3033 16r4FFA 16r3034 16r6309 16r3035 16r6697 16r3036 16r5CB8 16r3037 16r80FA 16r3038 16r6848 16r3039 16r80AE 16r303A 16r6602 16r303B 16r76CE 16r303C 16r51F9 16r303D 16r6556 16r303E 16r71AC 16r303F 16r7FF1 16r3040 16r8884 16r3041 16r50B2 16r3042 16r5965 16r3043 16r61CA 16r3044 16r6FB3 16r3045 16r82AD 16r3046 16r634C 16r3047 16r6252 16r3048 16r53ED 16r3049 16r5427 16r304A 16r7B06 16r304B 16r516B 16r304C 16r75A4 16r304D 16r5DF4 16r304E 16r62D4 16r304F 16r8DCB 16r3050 16r9776 16r3051 16r628A 16r3052 16r8019 16r3053 16r575D 16r3054 16r9738 16r3055 16r7F62 16r3056 16r7238 16r3057 16r767D 16r3058 16r67CF 16r3059 16r767E 16r305A 16r6446 16r305B 16r4F70 16r305C 16r8D25 16r305D 16r62DC 16r305E 16r7A17 16r305F 16r6591 16r3060 16r73ED 16r3061 16r642C 16r3062 16r6273 16r3063 16r822C 16r3064 16r9881 16r3065 16r677F 16r3066 16r7248 16r3067 16r626E 16r3068 16r62CC 16r3069 16r4F34 16r306A 16r74E3 16r306B 16r534A 16r306C 16r529E 16r306D 16r7ECA 16r306E 16r90A6 16r306F 16r5E2E 16r3070 16r6886 16r3071 16r699C 16r3072 16r8180 16r3073 16r7ED1 16r3074 16r68D2 16r3075 16r78C5 16r3076 16r868C 16r3077 16r9551 16r3078 16r508D 16r3079 16r8C24 16r307A 16r82DE 16r307B 16r80DE 16r307C 16r5305 16r307D 16r8912 16r307E 16r5265 16r3121 16r8584 16r3122 16r96F9 16r3123 16r4FDD 16r3124 16r5821 16r3125 16r9971 16r3126 16r5B9D 16r3127 16r62B1 16r3128 16r62A5 16r3129 16r66B4 16r312A 16r8C79 16r312B 16r9C8D 16r312C 16r7206 16r312D 16r676F 16r312E 16r7891 16r312F 16r60B2 16r3130 16r5351 16r3131 16r5317 16r3132 16r8F88 16r3133 16r80CC 16r3134 16r8D1D 16r3135 16r94A1 16r3136 16r500D 16r3137 16r72C8 16r3138 16r5907 16r3139 16r60EB 16r313A 16r7119 16r313B 16r88AB 16r313C 16r5954 16r313D 16r82EF 16r313E 16r672C 16r313F 16r7B28 16r3140 16r5D29 16r3141 16r7EF7 16r3142 16r752D 16r3143 16r6CF5 16r3144 16r8E66 16r3145 16r8FF8 16r3146 16r903C 16r3147 16r9F3B 16r3148 16r6BD4 16r3149 16r9119 16r314A 16r7B14 16r314B 16r5F7C 16r314C 16r78A7 16r314D 16r84D6 16r314E 16r853D 16r314F 16r6BD5 16r3150 16r6BD9 16r3151 16r6BD6 16r3152 16r5E01 16r3153 16r5E87 16r3154 16r75F9 16r3155 16r95ED 16r3156 16r655D 16r3157 16r5F0A 16r3158 16r5FC5 16r3159 16r8F9F 16r315A 16r58C1 16r315B 16r81C2 16r315C 16r907F 16r315D 16r965B 16r315E 16r97AD 16r315F 16r8FB9 16r3160 16r7F16 16r3161 16r8D2C 16r3162 16r6241 16r3163 16r4FBF 16r3164 16r53D8 16r3165 16r535E 16r3166 16r8FA8 16r3167 16r8FA9 16r3168 16r8FAB 16r3169 16r904D 16r316A 16r6807 16r316B 16r5F6A 16r316C 16r8198 16r316D 16r8868 16r316E 16r9CD6 16r316F 16r618B 16r3170 16r522B 16r3171 16r762A 16r3172 16r5F6C 16r3173 16r658C 16r3174 16r6FD2 16r3175 16r6EE8 16r3176 16r5BBE 16r3177 16r6448 16r3178 16r5175 16r3179 16r51B0 16r317A 16r67C4 16r317B 16r4E19 16r317C 16r79C9 16r317D 16r997C 16r317E 16r70B3 16r3221 16r75C5 16r3222 16r5E76 16r3223 16r73BB 16r3224 16r83E0 16r3225 16r64AD 16r3226 16r62E8 16r3227 16r94B5 16r3228 16r6CE2 16r3229 16r535A 16r322A 16r52C3 16r322B 16r640F 16r322C 16r94C2 16r322D 16r7B94 16r322E 16r4F2F 16r322F 16r5E1B 16r3230 16r8236 16r3231 16r8116 16r3232 16r818A 16r3233 16r6E24 16r3234 16r6CCA 16r3235 16r9A73 16r3236 16r6355 16r3237 16r535C 16r3238 16r54FA 16r3239 16r8865 16r323A 16r57E0 16r323B 16r4E0D 16r323C 16r5E03 16r323D 16r6B65 16r323E 16r7C3F 16r323F 16r90E8 16r3240 16r6016 16r3241 16r64E6 16r3242 16r731C 16r3243 16r88C1 16r3244 16r6750 16r3245 16r624D 16r3246 16r8D22 16r3247 16r776C 16r3248 16r8E29 16r3249 16r91C7 16r324A 16r5F69 16r324B 16r83DC 16r324C 16r8521 16r324D 16r9910 16r324E 16r53C2 16r324F 16r8695 16r3250 16r6B8B 16r3251 16r60ED 16r3252 16r60E8 16r3253 16r707F 16r3254 16r82CD 16r3255 16r8231 16r3256 16r4ED3 16r3257 16r6CA7 16r3258 16r85CF 16r3259 16r64CD 16r325A 16r7CD9 16r325B 16r69FD 16r325C 16r66F9 16r325D 16r8349 16r325E 16r5395 16r325F 16r7B56 16r3260 16r4FA7 16r3261 16r518C 16r3262 16r6D4B 16r3263 16r5C42 16r3264 16r8E6D 16r3265 16r63D2 16r3266 16r53C9 16r3267 16r832C 16r3268 16r8336 16r3269 16r67E5 16r326A 16r78B4 16r326B 16r643D 16r326C 16r5BDF 16r326D 16r5C94 16r326E 16r5DEE 16r326F 16r8BE7 16r3270 16r62C6 16r3271 16r67F4 16r3272 16r8C7A 16r3273 16r6400 16r3274 16r63BA 16r3275 16r8749 16r3276 16r998B 16r3277 16r8C17 16r3278 16r7F20 16r3279 16r94F2 16r327A 16r4EA7 16r327B 16r9610 16r327C 16r98A4 16r327D 16r660C 16r327E 16r7316 16r3321 16r573A 16r3322 16r5C1D 16r3323 16r5E38 16r3324 16r957F 16r3325 16r507F 16r3326 16r80A0 16r3327 16r5382 16r3328 16r655E 16r3329 16r7545 16r332A 16r5531 16r332B 16r5021 16r332C 16r8D85 16r332D 16r6284 16r332E 16r949E 16r332F 16r671D 16r3330 16r5632 16r3331 16r6F6E 16r3332 16r5DE2 16r3333 16r5435 16r3334 16r7092 16r3335 16r8F66 16r3336 16r626F 16r3337 16r64A4 16r3338 16r63A3 16r3339 16r5F7B 16r333A 16r6F88 16r333B 16r90F4 16r333C 16r81E3 16r333D 16r8FB0 16r333E 16r5C18 16r333F 16r6668 16r3340 16r5FF1 16r3341 16r6C89 16r3342 16r9648 16r3343 16r8D81 16r3344 16r886C 16r3345 16r6491 16r3346 16r79F0 16r3347 16r57CE 16r3348 16r6A59 16r3349 16r6210 16r334A 16r5448 16r334B 16r4E58 16r334C 16r7A0B 16r334D 16r60E9 16r334E 16r6F84 16r334F 16r8BDA 16r3350 16r627F 16r3351 16r901E 16r3352 16r9A8B 16r3353 16r79E4 16r3354 16r5403 16r3355 16r75F4 16r3356 16r6301 16r3357 16r5319 16r3358 16r6C60 16r3359 16r8FDF 16r335A 16r5F1B 16r335B 16r9A70 16r335C 16r803B 16r335D 16r9F7F 16r335E 16r4F88 16r335F 16r5C3A 16r3360 16r8D64 16r3361 16r7FC5 16r3362 16r65A5 16r3363 16r70BD 16r3364 16r5145 16r3365 16r51B2 16r3366 16r866B 16r3367 16r5D07 16r3368 16r5BA0 16r3369 16r62BD 16r336A 16r916C 16r336B 16r7574 16r336C 16r8E0C 16r336D 16r7A20 16r336E 16r6101 16r336F 16r7B79 16r3370 16r4EC7 16r3371 16r7EF8 16r3372 16r7785 16r3373 16r4E11 16r3374 16r81ED 16r3375 16r521D 16r3376 16r51FA 16r3377 16r6A71 16r3378 16r53A8 16r3379 16r8E87 16r337A 16r9504 16r337B 16r96CF 16r337C 16r6EC1 16r337D 16r9664 16r337E 16r695A 16r3421 16r7840 16r3422 16r50A8 16r3423 16r77D7 16r3424 16r6410 16r3425 16r89E6 16r3426 16r5904 16r3427 16r63E3 16r3428 16r5DDD 16r3429 16r7A7F 16r342A 16r693D 16r342B 16r4F20 16r342C 16r8239 16r342D 16r5598 16r342E 16r4E32 16r342F 16r75AE 16r3430 16r7A97 16r3431 16r5E62 16r3432 16r5E8A 16r3433 16r95EF 16r3434 16r521B 16r3435 16r5439 16r3436 16r708A 16r3437 16r6376 16r3438 16r9524 16r3439 16r5782 16r343A 16r6625 16r343B 16r693F 16r343C 16r9187 16r343D 16r5507 16r343E 16r6DF3 16r343F 16r7EAF 16r3440 16r8822 16r3441 16r6233 16r3442 16r7EF0 16r3443 16r75B5 16r3444 16r8328 16r3445 16r78C1 16r3446 16r96CC 16r3447 16r8F9E 16r3448 16r6148 16r3449 16r74F7 16r344A 16r8BCD 16r344B 16r6B64 16r344C 16r523A 16r344D 16r8D50 16r344E 16r6B21 16r344F 16r806A 16r3450 16r8471 16r3451 16r56F1 16r3452 16r5306 16r3453 16r4ECE 16r3454 16r4E1B 16r3455 16r51D1 16r3456 16r7C97 16r3457 16r918B 16r3458 16r7C07 16r3459 16r4FC3 16r345A 16r8E7F 16r345B 16r7BE1 16r345C 16r7A9C 16r345D 16r6467 16r345E 16r5D14 16r345F 16r50AC 16r3460 16r8106 16r3461 16r7601 16r3462 16r7CB9 16r3463 16r6DEC 16r3464 16r7FE0 16r3465 16r6751 16r3466 16r5B58 16r3467 16r5BF8 16r3468 16r78CB 16r3469 16r64AE 16r346A 16r6413 16r346B 16r63AA 16r346C 16r632B 16r346D 16r9519 16r346E 16r642D 16r346F 16r8FBE 16r3470 16r7B54 16r3471 16r7629 16r3472 16r6253 16r3473 16r5927 16r3474 16r5446 16r3475 16r6B79 16r3476 16r50A3 16r3477 16r6234 16r3478 16r5E26 16r3479 16r6B86 16r347A 16r4EE3 16r347B 16r8D37 16r347C 16r888B 16r347D 16r5F85 16r347E 16r902E 16r3521 16r6020 16r3522 16r803D 16r3523 16r62C5 16r3524 16r4E39 16r3525 16r5355 16r3526 16r90F8 16r3527 16r63B8 16r3528 16r80C6 16r3529 16r65E6 16r352A 16r6C2E 16r352B 16r4F46 16r352C 16r60EE 16r352D 16r6DE1 16r352E 16r8BDE 16r352F 16r5F39 16r3530 16r86CB 16r3531 16r5F53 16r3532 16r6321 16r3533 16r515A 16r3534 16r8361 16r3535 16r6863 16r3536 16r5200 16r3537 16r6363 16r3538 16r8E48 16r3539 16r5012 16r353A 16r5C9B 16r353B 16r7977 16r353C 16r5BFC 16r353D 16r5230 16r353E 16r7A3B 16r353F 16r60BC 16r3540 16r9053 16r3541 16r76D7 16r3542 16r5FB7 16r3543 16r5F97 16r3544 16r7684 16r3545 16r8E6C 16r3546 16r706F 16r3547 16r767B 16r3548 16r7B49 16r3549 16r77AA 16r354A 16r51F3 16r354B 16r9093 16r354C 16r5824 16r354D 16r4F4E 16r354E 16r6EF4 16r354F 16r8FEA 16r3550 16r654C 16r3551 16r7B1B 16r3552 16r72C4 16r3553 16r6DA4 16r3554 16r7FDF 16r3555 16r5AE1 16r3556 16r62B5 16r3557 16r5E95 16r3558 16r5730 16r3559 16r8482 16r355A 16r7B2C 16r355B 16r5E1D 16r355C 16r5F1F 16r355D 16r9012 16r355E 16r7F14 16r355F 16r98A0 16r3560 16r6382 16r3561 16r6EC7 16r3562 16r7898 16r3563 16r70B9 16r3564 16r5178 16r3565 16r975B 16r3566 16r57AB 16r3567 16r7535 16r3568 16r4F43 16r3569 16r7538 16r356A 16r5E97 16r356B 16r60E6 16r356C 16r5960 16r356D 16r6DC0 16r356E 16r6BBF 16r356F 16r7889 16r3570 16r53FC 16r3571 16r96D5 16r3572 16r51CB 16r3573 16r5201 16r3574 16r6389 16r3575 16r540A 16r3576 16r9493 16r3577 16r8C03 16r3578 16r8DCC 16r3579 16r7239 16r357A 16r789F 16r357B 16r8776 16r357C 16r8FED 16r357D 16r8C0D 16r357E 16r53E0 16r3621 16r4E01 16r3622 16r76EF 16r3623 16r53EE 16r3624 16r9489 16r3625 16r9876 16r3626 16r9F0E 16r3627 16r952D 16r3628 16r5B9A 16r3629 16r8BA2 16r362A 16r4E22 16r362B 16r4E1C 16r362C 16r51AC 16r362D 16r8463 16r362E 16r61C2 16r362F 16r52A8 16r3630 16r680B 16r3631 16r4F97 16r3632 16r606B 16r3633 16r51BB 16r3634 16r6D1E 16r3635 16r515C 16r3636 16r6296 16r3637 16r6597 16r3638 16r9661 16r3639 16r8C46 16r363A 16r9017 16r363B 16r75D8 16r363C 16r90FD 16r363D 16r7763 16r363E 16r6BD2 16r363F 16r728A 16r3640 16r72EC 16r3641 16r8BFB 16r3642 16r5835 16r3643 16r7779 16r3644 16r8D4C 16r3645 16r675C 16r3646 16r9540 16r3647 16r809A 16r3648 16r5EA6 16r3649 16r6E21 16r364A 16r5992 16r364B 16r7AEF 16r364C 16r77ED 16r364D 16r953B 16r364E 16r6BB5 16r364F 16r65AD 16r3650 16r7F0E 16r3651 16r5806 16r3652 16r5151 16r3653 16r961F 16r3654 16r5BF9 16r3655 16r58A9 16r3656 16r5428 16r3657 16r8E72 16r3658 16r6566 16r3659 16r987F 16r365A 16r56E4 16r365B 16r949D 16r365C 16r76FE 16r365D 16r9041 16r365E 16r6387 16r365F 16r54C6 16r3660 16r591A 16r3661 16r593A 16r3662 16r579B 16r3663 16r8EB2 16r3664 16r6735 16r3665 16r8DFA 16r3666 16r8235 16r3667 16r5241 16r3668 16r60F0 16r3669 16r5815 16r366A 16r86FE 16r366B 16r5CE8 16r366C 16r9E45 16r366D 16r4FC4 16r366E 16r989D 16r366F 16r8BB9 16r3670 16r5A25 16r3671 16r6076 16r3672 16r5384 16r3673 16r627C 16r3674 16r904F 16r3675 16r9102 16r3676 16r997F 16r3677 16r6069 16r3678 16r800C 16r3679 16r513F 16r367A 16r8033 16r367B 16r5C14 16r367C 16r9975 16r367D 16r6D31 16r367E 16r4E8C 16r3721 16r8D30 16r3722 16r53D1 16r3723 16r7F5A 16r3724 16r7B4F 16r3725 16r4F10 16r3726 16r4E4F 16r3727 16r9600 16r3728 16r6CD5 16r3729 16r73D0 16r372A 16r85E9 16r372B 16r5E06 16r372C 16r756A 16r372D 16r7FFB 16r372E 16r6A0A 16r372F 16r77FE 16r3730 16r9492 16r3731 16r7E41 16r3732 16r51E1 16r3733 16r70E6 16r3734 16r53CD 16r3735 16r8FD4 16r3736 16r8303 16r3737 16r8D29 16r3738 16r72AF 16r3739 16r996D 16r373A 16r6CDB 16r373B 16r574A 16r373C 16r82B3 16r373D 16r65B9 16r373E 16r80AA 16r373F 16r623F 16r3740 16r9632 16r3741 16r59A8 16r3742 16r4EFF 16r3743 16r8BBF 16r3744 16r7EBA 16r3745 16r653E 16r3746 16r83F2 16r3747 16r975E 16r3748 16r5561 16r3749 16r98DE 16r374A 16r80A5 16r374B 16r532A 16r374C 16r8BFD 16r374D 16r5420 16r374E 16r80BA 16r374F 16r5E9F 16r3750 16r6CB8 16r3751 16r8D39 16r3752 16r82AC 16r3753 16r915A 16r3754 16r5429 16r3755 16r6C1B 16r3756 16r5206 16r3757 16r7EB7 16r3758 16r575F 16r3759 16r711A 16r375A 16r6C7E 16r375B 16r7C89 16r375C 16r594B 16r375D 16r4EFD 16r375E 16r5FFF 16r375F 16r6124 16r3760 16r7CAA 16r3761 16r4E30 16r3762 16r5C01 16r3763 16r67AB 16r3764 16r8702 16r3765 16r5CF0 16r3766 16r950B 16r3767 16r98CE 16r3768 16r75AF 16r3769 16r70FD 16r376A 16r9022 16r376B 16r51AF 16r376C 16r7F1D 16r376D 16r8BBD 16r376E 16r5949 16r376F 16r51E4 16r3770 16r4F5B 16r3771 16r5426 16r3772 16r592B 16r3773 16r6577 16r3774 16r80A4 16r3775 16r5B75 16r3776 16r6276 16r3777 16r62C2 16r3778 16r8F90 16r3779 16r5E45 16r377A 16r6C1F 16r377B 16r7B26 16r377C 16r4F0F 16r377D 16r4FD8 16r377E 16r670D 16r3821 16r6D6E 16r3822 16r6DAA 16r3823 16r798F 16r3824 16r88B1 16r3825 16r5F17 16r3826 16r752B 16r3827 16r629A 16r3828 16r8F85 16r3829 16r4FEF 16r382A 16r91DC 16r382B 16r65A7 16r382C 16r812F 16r382D 16r8151 16r382E 16r5E9C 16r382F 16r8150 16r3830 16r8D74 16r3831 16r526F 16r3832 16r8986 16r3833 16r8D4B 16r3834 16r590D 16r3835 16r5085 16r3836 16r4ED8 16r3837 16r961C 16r3838 16r7236 16r3839 16r8179 16r383A 16r8D1F 16r383B 16r5BCC 16r383C 16r8BA3 16r383D 16r9644 16r383E 16r5987 16r383F 16r7F1A 16r3840 16r5490 16r3841 16r5676 16r3842 16r560E 16r3843 16r8BE5 16r3844 16r6539 16r3845 16r6982 16r3846 16r9499 16r3847 16r76D6 16r3848 16r6E89 16r3849 16r5E72 16r384A 16r7518 16r384B 16r6746 16r384C 16r67D1 16r384D 16r7AFF 16r384E 16r809D 16r384F 16r8D76 16r3850 16r611F 16r3851 16r79C6 16r3852 16r6562 16r3853 16r8D63 16r3854 16r5188 16r3855 16r521A 16r3856 16r94A2 16r3857 16r7F38 16r3858 16r809B 16r3859 16r7EB2 16r385A 16r5C97 16r385B 16r6E2F 16r385C 16r6760 16r385D 16r7BD9 16r385E 16r768B 16r385F 16r9AD8 16r3860 16r818F 16r3861 16r7F94 16r3862 16r7CD5 16r3863 16r641E 16r3864 16r9550 16r3865 16r7A3F 16r3866 16r544A 16r3867 16r54E5 16r3868 16r6B4C 16r3869 16r6401 16r386A 16r6208 16r386B 16r9E3D 16r386C 16r80F3 16r386D 16r7599 16r386E 16r5272 16r386F 16r9769 16r3870 16r845B 16r3871 16r683C 16r3872 16r86E4 16r3873 16r9601 16r3874 16r9694 16r3875 16r94EC 16r3876 16r4E2A 16r3877 16r5404 16r3878 16r7ED9 16r3879 16r6839 16r387A 16r8DDF 16r387B 16r8015 16r387C 16r66F4 16r387D 16r5E9A 16r387E 16r7FB9 16r3921 16r57C2 16r3922 16r803F 16r3923 16r6897 16r3924 16r5DE5 16r3925 16r653B 16r3926 16r529F 16r3927 16r606D 16r3928 16r9F9A 16r3929 16r4F9B 16r392A 16r8EAC 16r392B 16r516C 16r392C 16r5BAB 16r392D 16r5F13 16r392E 16r5DE9 16r392F 16r6C5E 16r3930 16r62F1 16r3931 16r8D21 16r3932 16r5171 16r3933 16r94A9 16r3934 16r52FE 16r3935 16r6C9F 16r3936 16r82DF 16r3937 16r72D7 16r3938 16r57A2 16r3939 16r6784 16r393A 16r8D2D 16r393B 16r591F 16r393C 16r8F9C 16r393D 16r83C7 16r393E 16r5495 16r393F 16r7B8D 16r3940 16r4F30 16r3941 16r6CBD 16r3942 16r5B64 16r3943 16r59D1 16r3944 16r9F13 16r3945 16r53E4 16r3946 16r86CA 16r3947 16r9AA8 16r3948 16r8C37 16r3949 16r80A1 16r394A 16r6545 16r394B 16r987E 16r394C 16r56FA 16r394D 16r96C7 16r394E 16r522E 16r394F 16r74DC 16r3950 16r5250 16r3951 16r5BE1 16r3952 16r6302 16r3953 16r8902 16r3954 16r4E56 16r3955 16r62D0 16r3956 16r602A 16r3957 16r68FA 16r3958 16r5173 16r3959 16r5B98 16r395A 16r51A0 16r395B 16r89C2 16r395C 16r7BA1 16r395D 16r9986 16r395E 16r7F50 16r395F 16r60EF 16r3960 16r704C 16r3961 16r8D2F 16r3962 16r5149 16r3963 16r5E7F 16r3964 16r901B 16r3965 16r7470 16r3966 16r89C4 16r3967 16r572D 16r3968 16r7845 16r3969 16r5F52 16r396A 16r9F9F 16r396B 16r95FA 16r396C 16r8F68 16r396D 16r9B3C 16r396E 16r8BE1 16r396F 16r7678 16r3970 16r6842 16r3971 16r67DC 16r3972 16r8DEA 16r3973 16r8D35 16r3974 16r523D 16r3975 16r8F8A 16r3976 16r6EDA 16r3977 16r68CD 16r3978 16r9505 16r3979 16r90ED 16r397A 16r56FD 16r397B 16r679C 16r397C 16r88F9 16r397D 16r8FC7 16r397E 16r54C8 16r3A21 16r9AB8 16r3A22 16r5B69 16r3A23 16r6D77 16r3A24 16r6C26 16r3A25 16r4EA5 16r3A26 16r5BB3 16r3A27 16r9A87 16r3A28 16r9163 16r3A29 16r61A8 16r3A2A 16r90AF 16r3A2B 16r97E9 16r3A2C 16r542B 16r3A2D 16r6DB5 16r3A2E 16r5BD2 16r3A2F 16r51FD 16r3A30 16r558A 16r3A31 16r7F55 16r3A32 16r7FF0 16r3A33 16r64BC 16r3A34 16r634D 16r3A35 16r65F1 16r3A36 16r61BE 16r3A37 16r608D 16r3A38 16r710A 16r3A39 16r6C57 16r3A3A 16r6C49 16r3A3B 16r592F 16r3A3C 16r676D 16r3A3D 16r822A 16r3A3E 16r58D5 16r3A3F 16r568E 16r3A40 16r8C6A 16r3A41 16r6BEB 16r3A42 16r90DD 16r3A43 16r597D 16r3A44 16r8017 16r3A45 16r53F7 16r3A46 16r6D69 16r3A47 16r5475 16r3A48 16r559D 16r3A49 16r8377 16r3A4A 16r83CF 16r3A4B 16r6838 16r3A4C 16r79BE 16r3A4D 16r548C 16r3A4E 16r4F55 16r3A4F 16r5408 16r3A50 16r76D2 16r3A51 16r8C89 16r3A52 16r9602 16r3A53 16r6CB3 16r3A54 16r6DB8 16r3A55 16r8D6B 16r3A56 16r8910 16r3A57 16r9E64 16r3A58 16r8D3A 16r3A59 16r563F 16r3A5A 16r9ED1 16r3A5B 16r75D5 16r3A5C 16r5F88 16r3A5D 16r72E0 16r3A5E 16r6068 16r3A5F 16r54FC 16r3A60 16r4EA8 16r3A61 16r6A2A 16r3A62 16r8861 16r3A63 16r6052 16r3A64 16r8F70 16r3A65 16r54C4 16r3A66 16r70D8 16r3A67 16r8679 16r3A68 16r9E3F 16r3A69 16r6D2A 16r3A6A 16r5B8F 16r3A6B 16r5F18 16r3A6C 16r7EA2 16r3A6D 16r5589 16r3A6E 16r4FAF 16r3A6F 16r7334 16r3A70 16r543C 16r3A71 16r539A 16r3A72 16r5019 16r3A73 16r540E 16r3A74 16r547C 16r3A75 16r4E4E 16r3A76 16r5FFD 16r3A77 16r745A 16r3A78 16r58F6 16r3A79 16r846B 16r3A7A 16r80E1 16r3A7B 16r8774 16r3A7C 16r72D0 16r3A7D 16r7CCA 16r3A7E 16r6E56 16r3B21 16r5F27 16r3B22 16r864E 16r3B23 16r552C 16r3B24 16r62A4 16r3B25 16r4E92 16r3B26 16r6CAA 16r3B27 16r6237 16r3B28 16r82B1 16r3B29 16r54D7 16r3B2A 16r534E 16r3B2B 16r733E 16r3B2C 16r6ED1 16r3B2D 16r753B 16r3B2E 16r5212 16r3B2F 16r5316 16r3B30 16r8BDD 16r3B31 16r69D0 16r3B32 16r5F8A 16r3B33 16r6000 16r3B34 16r6DEE 16r3B35 16r574F 16r3B36 16r6B22 16r3B37 16r73AF 16r3B38 16r6853 16r3B39 16r8FD8 16r3B3A 16r7F13 16r3B3B 16r6362 16r3B3C 16r60A3 16r3B3D 16r5524 16r3B3E 16r75EA 16r3B3F 16r8C62 16r3B40 16r7115 16r3B41 16r6DA3 16r3B42 16r5BA6 16r3B43 16r5E7B 16r3B44 16r8352 16r3B45 16r614C 16r3B46 16r9EC4 16r3B47 16r78FA 16r3B48 16r8757 16r3B49 16r7C27 16r3B4A 16r7687 16r3B4B 16r51F0 16r3B4C 16r60F6 16r3B4D 16r714C 16r3B4E 16r6643 16r3B4F 16r5E4C 16r3B50 16r604D 16r3B51 16r8C0E 16r3B52 16r7070 16r3B53 16r6325 16r3B54 16r8F89 16r3B55 16r5FBD 16r3B56 16r6062 16r3B57 16r86D4 16r3B58 16r56DE 16r3B59 16r6BC1 16r3B5A 16r6094 16r3B5B 16r6167 16r3B5C 16r5349 16r3B5D 16r60E0 16r3B5E 16r6666 16r3B5F 16r8D3F 16r3B60 16r79FD 16r3B61 16r4F1A 16r3B62 16r70E9 16r3B63 16r6C47 16r3B64 16r8BB3 16r3B65 16r8BF2 16r3B66 16r7ED8 16r3B67 16r8364 16r3B68 16r660F 16r3B69 16r5A5A 16r3B6A 16r9B42 16r3B6B 16r6D51 16r3B6C 16r6DF7 16r3B6D 16r8C41 16r3B6E 16r6D3B 16r3B6F 16r4F19 16r3B70 16r706B 16r3B71 16r83B7 16r3B72 16r6216 16r3B73 16r60D1 16r3B74 16r970D 16r3B75 16r8D27 16r3B76 16r7978 16r3B77 16r51FB 16r3B78 16r573E 16r3B79 16r57FA 16r3B7A 16r673A 16r3B7B 16r7578 16r3B7C 16r7A3D 16r3B7D 16r79EF 16r3B7E 16r7B95 16r3C21 16r808C 16r3C22 16r9965 16r3C23 16r8FF9 16r3C24 16r6FC0 16r3C25 16r8BA5 16r3C26 16r9E21 16r3C27 16r59EC 16r3C28 16r7EE9 16r3C29 16r7F09 16r3C2A 16r5409 16r3C2B 16r6781 16r3C2C 16r68D8 16r3C2D 16r8F91 16r3C2E 16r7C4D 16r3C2F 16r96C6 16r3C30 16r53CA 16r3C31 16r6025 16r3C32 16r75BE 16r3C33 16r6C72 16r3C34 16r5373 16r3C35 16r5AC9 16r3C36 16r7EA7 16r3C37 16r6324 16r3C38 16r51E0 16r3C39 16r810A 16r3C3A 16r5DF1 16r3C3B 16r84DF 16r3C3C 16r6280 16r3C3D 16r5180 16r3C3E 16r5B63 16r3C3F 16r4F0E 16r3C40 16r796D 16r3C41 16r5242 16r3C42 16r60B8 16r3C43 16r6D4E 16r3C44 16r5BC4 16r3C45 16r5BC2 16r3C46 16r8BA1 16r3C47 16r8BB0 16r3C48 16r65E2 16r3C49 16r5FCC 16r3C4A 16r9645 16r3C4B 16r5993 16r3C4C 16r7EE7 16r3C4D 16r7EAA 16r3C4E 16r5609 16r3C4F 16r67B7 16r3C50 16r5939 16r3C51 16r4F73 16r3C52 16r5BB6 16r3C53 16r52A0 16r3C54 16r835A 16r3C55 16r988A 16r3C56 16r8D3E 16r3C57 16r7532 16r3C58 16r94BE 16r3C59 16r5047 16r3C5A 16r7A3C 16r3C5B 16r4EF7 16r3C5C 16r67B6 16r3C5D 16r9A7E 16r3C5E 16r5AC1 16r3C5F 16r6B7C 16r3C60 16r76D1 16r3C61 16r575A 16r3C62 16r5C16 16r3C63 16r7B3A 16r3C64 16r95F4 16r3C65 16r714E 16r3C66 16r517C 16r3C67 16r80A9 16r3C68 16r8270 16r3C69 16r5978 16r3C6A 16r7F04 16r3C6B 16r8327 16r3C6C 16r68C0 16r3C6D 16r67EC 16r3C6E 16r78B1 16r3C6F 16r7877 16r3C70 16r62E3 16r3C71 16r6361 16r3C72 16r7B80 16r3C73 16r4FED 16r3C74 16r526A 16r3C75 16r51CF 16r3C76 16r8350 16r3C77 16r69DB 16r3C78 16r9274 16r3C79 16r8DF5 16r3C7A 16r8D31 16r3C7B 16r89C1 16r3C7C 16r952E 16r3C7D 16r7BAD 16r3C7E 16r4EF6 16r3D21 16r5065 16r3D22 16r8230 16r3D23 16r5251 16r3D24 16r996F 16r3D25 16r6E10 16r3D26 16r6E85 16r3D27 16r6DA7 16r3D28 16r5EFA 16r3D29 16r50F5 16r3D2A 16r59DC 16r3D2B 16r5C06 16r3D2C 16r6D46 16r3D2D 16r6C5F 16r3D2E 16r7586 16r3D2F 16r848B 16r3D30 16r6868 16r3D31 16r5956 16r3D32 16r8BB2 16r3D33 16r5320 16r3D34 16r9171 16r3D35 16r964D 16r3D36 16r8549 16r3D37 16r6912 16r3D38 16r7901 16r3D39 16r7126 16r3D3A 16r80F6 16r3D3B 16r4EA4 16r3D3C 16r90CA 16r3D3D 16r6D47 16r3D3E 16r9A84 16r3D3F 16r5A07 16r3D40 16r56BC 16r3D41 16r6405 16r3D42 16r94F0 16r3D43 16r77EB 16r3D44 16r4FA5 16r3D45 16r811A 16r3D46 16r72E1 16r3D47 16r89D2 16r3D48 16r997A 16r3D49 16r7F34 16r3D4A 16r7EDE 16r3D4B 16r527F 16r3D4C 16r6559 16r3D4D 16r9175 16r3D4E 16r8F7F 16r3D4F 16r8F83 16r3D50 16r53EB 16r3D51 16r7A96 16r3D52 16r63ED 16r3D53 16r63A5 16r3D54 16r7686 16r3D55 16r79F8 16r3D56 16r8857 16r3D57 16r9636 16r3D58 16r622A 16r3D59 16r52AB 16r3D5A 16r8282 16r3D5B 16r6854 16r3D5C 16r6770 16r3D5D 16r6377 16r3D5E 16r776B 16r3D5F 16r7AED 16r3D60 16r6D01 16r3D61 16r7ED3 16r3D62 16r89E3 16r3D63 16r59D0 16r3D64 16r6212 16r3D65 16r85C9 16r3D66 16r82A5 16r3D67 16r754C 16r3D68 16r501F 16r3D69 16r4ECB 16r3D6A 16r75A5 16r3D6B 16r8BEB 16r3D6C 16r5C4A 16r3D6D 16r5DFE 16r3D6E 16r7B4B 16r3D6F 16r65A4 16r3D70 16r91D1 16r3D71 16r4ECA 16r3D72 16r6D25 16r3D73 16r895F 16r3D74 16r7D27 16r3D75 16r9526 16r3D76 16r4EC5 16r3D77 16r8C28 16r3D78 16r8FDB 16r3D79 16r9773 16r3D7A 16r664B 16r3D7B 16r7981 16r3D7C 16r8FD1 16r3D7D 16r70EC 16r3D7E 16r6D78 16r3E21 16r5C3D 16r3E22 16r52B2 16r3E23 16r8346 16r3E24 16r5162 16r3E25 16r830E 16r3E26 16r775B 16r3E27 16r6676 16r3E28 16r9CB8 16r3E29 16r4EAC 16r3E2A 16r60CA 16r3E2B 16r7CBE 16r3E2C 16r7CB3 16r3E2D 16r7ECF 16r3E2E 16r4E95 16r3E2F 16r8B66 16r3E30 16r666F 16r3E31 16r9888 16r3E32 16r9759 16r3E33 16r5883 16r3E34 16r656C 16r3E35 16r955C 16r3E36 16r5F84 16r3E37 16r75C9 16r3E38 16r9756 16r3E39 16r7ADF 16r3E3A 16r7ADE 16r3E3B 16r51C0 16r3E3C 16r70AF 16r3E3D 16r7A98 16r3E3E 16r63EA 16r3E3F 16r7A76 16r3E40 16r7EA0 16r3E41 16r7396 16r3E42 16r97ED 16r3E43 16r4E45 16r3E44 16r7078 16r3E45 16r4E5D 16r3E46 16r9152 16r3E47 16r53A9 16r3E48 16r6551 16r3E49 16r65E7 16r3E4A 16r81FC 16r3E4B 16r8205 16r3E4C 16r548E 16r3E4D 16r5C31 16r3E4E 16r759A 16r3E4F 16r97A0 16r3E50 16r62D8 16r3E51 16r72D9 16r3E52 16r75BD 16r3E53 16r5C45 16r3E54 16r9A79 16r3E55 16r83CA 16r3E56 16r5C40 16r3E57 16r5480 16r3E58 16r77E9 16r3E59 16r4E3E 16r3E5A 16r6CAE 16r3E5B 16r805A 16r3E5C 16r62D2 16r3E5D 16r636E 16r3E5E 16r5DE8 16r3E5F 16r5177 16r3E60 16r8DDD 16r3E61 16r8E1E 16r3E62 16r952F 16r3E63 16r4FF1 16r3E64 16r53E5 16r3E65 16r60E7 16r3E66 16r70AC 16r3E67 16r5267 16r3E68 16r6350 16r3E69 16r9E43 16r3E6A 16r5A1F 16r3E6B 16r5026 16r3E6C 16r7737 16r3E6D 16r5377 16r3E6E 16r7EE2 16r3E6F 16r6485 16r3E70 16r652B 16r3E71 16r6289 16r3E72 16r6398 16r3E73 16r5014 16r3E74 16r7235 16r3E75 16r89C9 16r3E76 16r51B3 16r3E77 16r8BC0 16r3E78 16r7EDD 16r3E79 16r5747 16r3E7A 16r83CC 16r3E7B 16r94A7 16r3E7C 16r519B 16r3E7D 16r541B 16r3E7E 16r5CFB 16r3F21 16r4FCA 16r3F22 16r7AE3 16r3F23 16r6D5A 16r3F24 16r90E1 16r3F25 16r9A8F 16r3F26 16r5580 16r3F27 16r5496 16r3F28 16r5361 16r3F29 16r54AF 16r3F2A 16r5F00 16r3F2B 16r63E9 16r3F2C 16r6977 16r3F2D 16r51EF 16r3F2E 16r6168 16r3F2F 16r520A 16r3F30 16r582A 16r3F31 16r52D8 16r3F32 16r574E 16r3F33 16r780D 16r3F34 16r770B 16r3F35 16r5EB7 16r3F36 16r6177 16r3F37 16r7CE0 16r3F38 16r625B 16r3F39 16r6297 16r3F3A 16r4EA2 16r3F3B 16r7095 16r3F3C 16r8003 16r3F3D 16r62F7 16r3F3E 16r70E4 16r3F3F 16r9760 16r3F40 16r5777 16r3F41 16r82DB 16r3F42 16r67EF 16r3F43 16r68F5 16r3F44 16r78D5 16r3F45 16r9897 16r3F46 16r79D1 16r3F47 16r58F3 16r3F48 16r54B3 16r3F49 16r53EF 16r3F4A 16r6E34 16r3F4B 16r514B 16r3F4C 16r523B 16r3F4D 16r5BA2 16r3F4E 16r8BFE 16r3F4F 16r80AF 16r3F50 16r5543 16r3F51 16r57A6 16r3F52 16r6073 16r3F53 16r5751 16r3F54 16r542D 16r3F55 16r7A7A 16r3F56 16r6050 16r3F57 16r5B54 16r3F58 16r63A7 16r3F59 16r62A0 16r3F5A 16r53E3 16r3F5B 16r6263 16r3F5C 16r5BC7 16r3F5D 16r67AF 16r3F5E 16r54ED 16r3F5F 16r7A9F 16r3F60 16r82E6 16r3F61 16r9177 16r3F62 16r5E93 16r3F63 16r88E4 16r3F64 16r5938 16r3F65 16r57AE 16r3F66 16r630E 16r3F67 16r8DE8 16r3F68 16r80EF 16r3F69 16r5757 16r3F6A 16r7B77 16r3F6B 16r4FA9 16r3F6C 16r5FEB 16r3F6D 16r5BBD 16r3F6E 16r6B3E 16r3F6F 16r5321 16r3F70 16r7B50 16r3F71 16r72C2 16r3F72 16r6846 16r3F73 16r77FF 16r3F74 16r7736 16r3F75 16r65F7 16r3F76 16r51B5 16r3F77 16r4E8F 16r3F78 16r76D4 16r3F79 16r5CBF 16r3F7A 16r7AA5 16r3F7B 16r8475 16r3F7C 16r594E 16r3F7D 16r9B41 16r3F7E 16r5080 16r4021 16r9988 16r4022 16r6127 16r4023 16r6E83 16r4024 16r5764 16r4025 16r6606 16r4026 16r6346 16r4027 16r56F0 16r4028 16r62EC 16r4029 16r6269 16r402A 16r5ED3 16r402B 16r9614 16r402C 16r5783 16r402D 16r62C9 16r402E 16r5587 16r402F 16r8721 16r4030 16r814A 16r4031 16r8FA3 16r4032 16r5566 16r4033 16r83B1 16r4034 16r6765 16r4035 16r8D56 16r4036 16r84DD 16r4037 16r5A6A 16r4038 16r680F 16r4039 16r62E6 16r403A 16r7BEE 16r403B 16r9611 16r403C 16r5170 16r403D 16r6F9C 16r403E 16r8C30 16r403F 16r63FD 16r4040 16r89C8 16r4041 16r61D2 16r4042 16r7F06 16r4043 16r70C2 16r4044 16r6EE5 16r4045 16r7405 16r4046 16r6994 16r4047 16r72FC 16r4048 16r5ECA 16r4049 16r90CE 16r404A 16r6717 16r404B 16r6D6A 16r404C 16r635E 16r404D 16r52B3 16r404E 16r7262 16r404F 16r8001 16r4050 16r4F6C 16r4051 16r59E5 16r4052 16r916A 16r4053 16r70D9 16r4054 16r6D9D 16r4055 16r52D2 16r4056 16r4E50 16r4057 16r96F7 16r4058 16r956D 16r4059 16r857E 16r405A 16r78CA 16r405B 16r7D2F 16r405C 16r5121 16r405D 16r5792 16r405E 16r64C2 16r405F 16r808B 16r4060 16r7C7B 16r4061 16r6CEA 16r4062 16r68F1 16r4063 16r695E 16r4064 16r51B7 16r4065 16r5398 16r4066 16r68A8 16r4067 16r7281 16r4068 16r9ECE 16r4069 16r7BF1 16r406A 16r72F8 16r406B 16r79BB 16r406C 16r6F13 16r406D 16r7406 16r406E 16r674E 16r406F 16r91CC 16r4070 16r9CA4 16r4071 16r793C 16r4072 16r8389 16r4073 16r8354 16r4074 16r540F 16r4075 16r6817 16r4076 16r4E3D 16r4077 16r5389 16r4078 16r52B1 16r4079 16r783E 16r407A 16r5386 16r407B 16r5229 16r407C 16r5088 16r407D 16r4F8B 16r407E 16r4FD0 16r4121 16r75E2 16r4122 16r7ACB 16r4123 16r7C92 16r4124 16r6CA5 16r4125 16r96B6 16r4126 16r529B 16r4127 16r7483 16r4128 16r54E9 16r4129 16r4FE9 16r412A 16r8054 16r412B 16r83B2 16r412C 16r8FDE 16r412D 16r9570 16r412E 16r5EC9 16r412F 16r601C 16r4130 16r6D9F 16r4131 16r5E18 16r4132 16r655B 16r4133 16r8138 16r4134 16r94FE 16r4135 16r604B 16r4136 16r70BC 16r4137 16r7EC3 16r4138 16r7CAE 16r4139 16r51C9 16r413A 16r6881 16r413B 16r7CB1 16r413C 16r826F 16r413D 16r4E24 16r413E 16r8F86 16r413F 16r91CF 16r4140 16r667E 16r4141 16r4EAE 16r4142 16r8C05 16r4143 16r64A9 16r4144 16r804A 16r4145 16r50DA 16r4146 16r7597 16r4147 16r71CE 16r4148 16r5BE5 16r4149 16r8FBD 16r414A 16r6F66 16r414B 16r4E86 16r414C 16r6482 16r414D 16r9563 16r414E 16r5ED6 16r414F 16r6599 16r4150 16r5217 16r4151 16r88C2 16r4152 16r70C8 16r4153 16r52A3 16r4154 16r730E 16r4155 16r7433 16r4156 16r6797 16r4157 16r78F7 16r4158 16r9716 16r4159 16r4E34 16r415A 16r90BB 16r415B 16r9CDE 16r415C 16r6DCB 16r415D 16r51DB 16r415E 16r8D41 16r415F 16r541D 16r4160 16r62CE 16r4161 16r73B2 16r4162 16r83F1 16r4163 16r96F6 16r4164 16r9F84 16r4165 16r94C3 16r4166 16r4F36 16r4167 16r7F9A 16r4168 16r51CC 16r4169 16r7075 16r416A 16r9675 16r416B 16r5CAD 16r416C 16r9886 16r416D 16r53E6 16r416E 16r4EE4 16r416F 16r6E9C 16r4170 16r7409 16r4171 16r69B4 16r4172 16r786B 16r4173 16r998F 16r4174 16r7559 16r4175 16r5218 16r4176 16r7624 16r4177 16r6D41 16r4178 16r67F3 16r4179 16r516D 16r417A 16r9F99 16r417B 16r804B 16r417C 16r5499 16r417D 16r7B3C 16r417E 16r7ABF 16r4221 16r9686 16r4222 16r5784 16r4223 16r62E2 16r4224 16r9647 16r4225 16r697C 16r4226 16r5A04 16r4227 16r6402 16r4228 16r7BD3 16r4229 16r6F0F 16r422A 16r964B 16r422B 16r82A6 16r422C 16r5362 16r422D 16r9885 16r422E 16r5E90 16r422F 16r7089 16r4230 16r63B3 16r4231 16r5364 16r4232 16r864F 16r4233 16r9C81 16r4234 16r9E93 16r4235 16r788C 16r4236 16r9732 16r4237 16r8DEF 16r4238 16r8D42 16r4239 16r9E7F 16r423A 16r6F5E 16r423B 16r7984 16r423C 16r5F55 16r423D 16r9646 16r423E 16r622E 16r423F 16r9A74 16r4240 16r5415 16r4241 16r94DD 16r4242 16r4FA3 16r4243 16r65C5 16r4244 16r5C65 16r4245 16r5C61 16r4246 16r7F15 16r4247 16r8651 16r4248 16r6C2F 16r4249 16r5F8B 16r424A 16r7387 16r424B 16r6EE4 16r424C 16r7EFF 16r424D 16r5CE6 16r424E 16r631B 16r424F 16r5B6A 16r4250 16r6EE6 16r4251 16r5375 16r4252 16r4E71 16r4253 16r63A0 16r4254 16r7565 16r4255 16r62A1 16r4256 16r8F6E 16r4257 16r4F26 16r4258 16r4ED1 16r4259 16r6CA6 16r425A 16r7EB6 16r425B 16r8BBA 16r425C 16r841D 16r425D 16r87BA 16r425E 16r7F57 16r425F 16r903B 16r4260 16r9523 16r4261 16r7BA9 16r4262 16r9AA1 16r4263 16r88F8 16r4264 16r843D 16r4265 16r6D1B 16r4266 16r9A86 16r4267 16r7EDC 16r4268 16r5988 16r4269 16r9EBB 16r426A 16r739B 16r426B 16r7801 16r426C 16r8682 16r426D 16r9A6C 16r426E 16r9A82 16r426F 16r561B 16r4270 16r5417 16r4271 16r57CB 16r4272 16r4E70 16r4273 16r9EA6 16r4274 16r5356 16r4275 16r8FC8 16r4276 16r8109 16r4277 16r7792 16r4278 16r9992 16r4279 16r86EE 16r427A 16r6EE1 16r427B 16r8513 16r427C 16r66FC 16r427D 16r6162 16r427E 16r6F2B 16r4321 16r8C29 16r4322 16r8292 16r4323 16r832B 16r4324 16r76F2 16r4325 16r6C13 16r4326 16r5FD9 16r4327 16r83BD 16r4328 16r732B 16r4329 16r8305 16r432A 16r951A 16r432B 16r6BDB 16r432C 16r77DB 16r432D 16r94C6 16r432E 16r536F 16r432F 16r8302 16r4330 16r5192 16r4331 16r5E3D 16r4332 16r8C8C 16r4333 16r8D38 16r4334 16r4E48 16r4335 16r73AB 16r4336 16r679A 16r4337 16r6885 16r4338 16r9176 16r4339 16r9709 16r433A 16r7164 16r433B 16r6CA1 16r433C 16r7709 16r433D 16r5A92 16r433E 16r9541 16r433F 16r6BCF 16r4340 16r7F8E 16r4341 16r6627 16r4342 16r5BD0 16r4343 16r59B9 16r4344 16r5A9A 16r4345 16r95E8 16r4346 16r95F7 16r4347 16r4EEC 16r4348 16r840C 16r4349 16r8499 16r434A 16r6AAC 16r434B 16r76DF 16r434C 16r9530 16r434D 16r731B 16r434E 16r68A6 16r434F 16r5B5F 16r4350 16r772F 16r4351 16r919A 16r4352 16r9761 16r4353 16r7CDC 16r4354 16r8FF7 16r4355 16r8C1C 16r4356 16r5F25 16r4357 16r7C73 16r4358 16r79D8 16r4359 16r89C5 16r435A 16r6CCC 16r435B 16r871C 16r435C 16r5BC6 16r435D 16r5E42 16r435E 16r68C9 16r435F 16r7720 16r4360 16r7EF5 16r4361 16r5195 16r4362 16r514D 16r4363 16r52C9 16r4364 16r5A29 16r4365 16r7F05 16r4366 16r9762 16r4367 16r82D7 16r4368 16r63CF 16r4369 16r7784 16r436A 16r85D0 16r436B 16r79D2 16r436C 16r6E3A 16r436D 16r5E99 16r436E 16r5999 16r436F 16r8511 16r4370 16r706D 16r4371 16r6C11 16r4372 16r62BF 16r4373 16r76BF 16r4374 16r654F 16r4375 16r60AF 16r4376 16r95FD 16r4377 16r660E 16r4378 16r879F 16r4379 16r9E23 16r437A 16r94ED 16r437B 16r540D 16r437C 16r547D 16r437D 16r8C2C 16r437E 16r6478 16r4421 16r6479 16r4422 16r8611 16r4423 16r6A21 16r4424 16r819C 16r4425 16r78E8 16r4426 16r6469 16r4427 16r9B54 16r4428 16r62B9 16r4429 16r672B 16r442A 16r83AB 16r442B 16r58A8 16r442C 16r9ED8 16r442D 16r6CAB 16r442E 16r6F20 16r442F 16r5BDE 16r4430 16r964C 16r4431 16r8C0B 16r4432 16r725F 16r4433 16r67D0 16r4434 16r62C7 16r4435 16r7261 16r4436 16r4EA9 16r4437 16r59C6 16r4438 16r6BCD 16r4439 16r5893 16r443A 16r66AE 16r443B 16r5E55 16r443C 16r52DF 16r443D 16r6155 16r443E 16r6728 16r443F 16r76EE 16r4440 16r7766 16r4441 16r7267 16r4442 16r7A46 16r4443 16r62FF 16r4444 16r54EA 16r4445 16r5450 16r4446 16r94A0 16r4447 16r90A3 16r4448 16r5A1C 16r4449 16r7EB3 16r444A 16r6C16 16r444B 16r4E43 16r444C 16r5976 16r444D 16r8010 16r444E 16r5948 16r444F 16r5357 16r4450 16r7537 16r4451 16r96BE 16r4452 16r56CA 16r4453 16r6320 16r4454 16r8111 16r4455 16r607C 16r4456 16r95F9 16r4457 16r6DD6 16r4458 16r5462 16r4459 16r9981 16r445A 16r5185 16r445B 16r5AE9 16r445C 16r80FD 16r445D 16r59AE 16r445E 16r9713 16r445F 16r502A 16r4460 16r6CE5 16r4461 16r5C3C 16r4462 16r62DF 16r4463 16r4F60 16r4464 16r533F 16r4465 16r817B 16r4466 16r9006 16r4467 16r6EBA 16r4468 16r852B 16r4469 16r62C8 16r446A 16r5E74 16r446B 16r78BE 16r446C 16r64B5 16r446D 16r637B 16r446E 16r5FF5 16r446F 16r5A18 16r4470 16r917F 16r4471 16r9E1F 16r4472 16r5C3F 16r4473 16r634F 16r4474 16r8042 16r4475 16r5B7D 16r4476 16r556E 16r4477 16r954A 16r4478 16r954D 16r4479 16r6D85 16r447A 16r60A8 16r447B 16r67E0 16r447C 16r72DE 16r447D 16r51DD 16r447E 16r5B81 16r4521 16r62E7 16r4522 16r6CDE 16r4523 16r725B 16r4524 16r626D 16r4525 16r94AE 16r4526 16r7EBD 16r4527 16r8113 16r4528 16r6D53 16r4529 16r519C 16r452A 16r5F04 16r452B 16r5974 16r452C 16r52AA 16r452D 16r6012 16r452E 16r5973 16r452F 16r6696 16r4530 16r8650 16r4531 16r759F 16r4532 16r632A 16r4533 16r61E6 16r4534 16r7CEF 16r4535 16r8BFA 16r4536 16r54E6 16r4537 16r6B27 16r4538 16r9E25 16r4539 16r6BB4 16r453A 16r85D5 16r453B 16r5455 16r453C 16r5076 16r453D 16r6CA4 16r453E 16r556A 16r453F 16r8DB4 16r4540 16r722C 16r4541 16r5E15 16r4542 16r6015 16r4543 16r7436 16r4544 16r62CD 16r4545 16r6392 16r4546 16r724C 16r4547 16r5F98 16r4548 16r6E43 16r4549 16r6D3E 16r454A 16r6500 16r454B 16r6F58 16r454C 16r76D8 16r454D 16r78D0 16r454E 16r76FC 16r454F 16r7554 16r4550 16r5224 16r4551 16r53DB 16r4552 16r4E53 16r4553 16r5E9E 16r4554 16r65C1 16r4555 16r802A 16r4556 16r80D6 16r4557 16r629B 16r4558 16r5486 16r4559 16r5228 16r455A 16r70AE 16r455B 16r888D 16r455C 16r8DD1 16r455D 16r6CE1 16r455E 16r5478 16r455F 16r80DA 16r4560 16r57F9 16r4561 16r88F4 16r4562 16r8D54 16r4563 16r966A 16r4564 16r914D 16r4565 16r4F69 16r4566 16r6C9B 16r4567 16r55B7 16r4568 16r76C6 16r4569 16r7830 16r456A 16r62A8 16r456B 16r70F9 16r456C 16r6F8E 16r456D 16r5F6D 16r456E 16r84EC 16r456F 16r68DA 16r4570 16r787C 16r4571 16r7BF7 16r4572 16r81A8 16r4573 16r670B 16r4574 16r9E4F 16r4575 16r6367 16r4576 16r78B0 16r4577 16r576F 16r4578 16r7812 16r4579 16r9739 16r457A 16r6279 16r457B 16r62AB 16r457C 16r5288 16r457D 16r7435 16r457E 16r6BD7 16r4621 16r5564 16r4622 16r813E 16r4623 16r75B2 16r4624 16r76AE 16r4625 16r5339 16r4626 16r75DE 16r4627 16r50FB 16r4628 16r5C41 16r4629 16r8B6C 16r462A 16r7BC7 16r462B 16r504F 16r462C 16r7247 16r462D 16r9A97 16r462E 16r98D8 16r462F 16r6F02 16r4630 16r74E2 16r4631 16r7968 16r4632 16r6487 16r4633 16r77A5 16r4634 16r62FC 16r4635 16r9891 16r4636 16r8D2B 16r4637 16r54C1 16r4638 16r8058 16r4639 16r4E52 16r463A 16r576A 16r463B 16r82F9 16r463C 16r840D 16r463D 16r5E73 16r463E 16r51ED 16r463F 16r74F6 16r4640 16r8BC4 16r4641 16r5C4F 16r4642 16r5761 16r4643 16r6CFC 16r4644 16r9887 16r4645 16r5A46 16r4646 16r7834 16r4647 16r9B44 16r4648 16r8FEB 16r4649 16r7C95 16r464A 16r5256 16r464B 16r6251 16r464C 16r94FA 16r464D 16r4EC6 16r464E 16r8386 16r464F 16r8461 16r4650 16r83E9 16r4651 16r84B2 16r4652 16r57D4 16r4653 16r6734 16r4654 16r5703 16r4655 16r666E 16r4656 16r6D66 16r4657 16r8C31 16r4658 16r66DD 16r4659 16r7011 16r465A 16r671F 16r465B 16r6B3A 16r465C 16r6816 16r465D 16r621A 16r465E 16r59BB 16r465F 16r4E03 16r4660 16r51C4 16r4661 16r6F06 16r4662 16r67D2 16r4663 16r6C8F 16r4664 16r5176 16r4665 16r68CB 16r4666 16r5947 16r4667 16r6B67 16r4668 16r7566 16r4669 16r5D0E 16r466A 16r8110 16r466B 16r9F50 16r466C 16r65D7 16r466D 16r7948 16r466E 16r7941 16r466F 16r9A91 16r4670 16r8D77 16r4671 16r5C82 16r4672 16r4E5E 16r4673 16r4F01 16r4674 16r542F 16r4675 16r5951 16r4676 16r780C 16r4677 16r5668 16r4678 16r6C14 16r4679 16r8FC4 16r467A 16r5F03 16r467B 16r6C7D 16r467C 16r6CE3 16r467D 16r8BAB 16r467E 16r6390 16r4721 16r6070 16r4722 16r6D3D 16r4723 16r7275 16r4724 16r6266 16r4725 16r948E 16r4726 16r94C5 16r4727 16r5343 16r4728 16r8FC1 16r4729 16r7B7E 16r472A 16r4EDF 16r472B 16r8C26 16r472C 16r4E7E 16r472D 16r9ED4 16r472E 16r94B1 16r472F 16r94B3 16r4730 16r524D 16r4731 16r6F5C 16r4732 16r9063 16r4733 16r6D45 16r4734 16r8C34 16r4735 16r5811 16r4736 16r5D4C 16r4737 16r6B20 16r4738 16r6B49 16r4739 16r67AA 16r473A 16r545B 16r473B 16r8154 16r473C 16r7F8C 16r473D 16r5899 16r473E 16r8537 16r473F 16r5F3A 16r4740 16r62A2 16r4741 16r6A47 16r4742 16r9539 16r4743 16r6572 16r4744 16r6084 16r4745 16r6865 16r4746 16r77A7 16r4747 16r4E54 16r4748 16r4FA8 16r4749 16r5DE7 16r474A 16r9798 16r474B 16r64AC 16r474C 16r7FD8 16r474D 16r5CED 16r474E 16r4FCF 16r474F 16r7A8D 16r4750 16r5207 16r4751 16r8304 16r4752 16r4E14 16r4753 16r602F 16r4754 16r7A83 16r4755 16r94A6 16r4756 16r4FB5 16r4757 16r4EB2 16r4758 16r79E6 16r4759 16r7434 16r475A 16r52E4 16r475B 16r82B9 16r475C 16r64D2 16r475D 16r79BD 16r475E 16r5BDD 16r475F 16r6C81 16r4760 16r9752 16r4761 16r8F7B 16r4762 16r6C22 16r4763 16r503E 16r4764 16r537F 16r4765 16r6E05 16r4766 16r64CE 16r4767 16r6674 16r4768 16r6C30 16r4769 16r60C5 16r476A 16r9877 16r476B 16r8BF7 16r476C 16r5E86 16r476D 16r743C 16r476E 16r7A77 16r476F 16r79CB 16r4770 16r4E18 16r4771 16r90B1 16r4772 16r7403 16r4773 16r6C42 16r4774 16r56DA 16r4775 16r914B 16r4776 16r6CC5 16r4777 16r8D8B 16r4778 16r533A 16r4779 16r86C6 16r477A 16r66F2 16r477B 16r8EAF 16r477C 16r5C48 16r477D 16r9A71 16r477E 16r6E20 16r4821 16r53D6 16r4822 16r5A36 16r4823 16r9F8B 16r4824 16r8DA3 16r4825 16r53BB 16r4826 16r5708 16r4827 16r98A7 16r4828 16r6743 16r4829 16r919B 16r482A 16r6CC9 16r482B 16r5168 16r482C 16r75CA 16r482D 16r62F3 16r482E 16r72AC 16r482F 16r5238 16r4830 16r529D 16r4831 16r7F3A 16r4832 16r7094 16r4833 16r7638 16r4834 16r5374 16r4835 16r9E4A 16r4836 16r69B7 16r4837 16r786E 16r4838 16r96C0 16r4839 16r88D9 16r483A 16r7FA4 16r483B 16r7136 16r483C 16r71C3 16r483D 16r5189 16r483E 16r67D3 16r483F 16r74E4 16r4840 16r58E4 16r4841 16r6518 16r4842 16r56B7 16r4843 16r8BA9 16r4844 16r9976 16r4845 16r6270 16r4846 16r7ED5 16r4847 16r60F9 16r4848 16r70ED 16r4849 16r58EC 16r484A 16r4EC1 16r484B 16r4EBA 16r484C 16r5FCD 16r484D 16r97E7 16r484E 16r4EFB 16r484F 16r8BA4 16r4850 16r5203 16r4851 16r598A 16r4852 16r7EAB 16r4853 16r6254 16r4854 16r4ECD 16r4855 16r65E5 16r4856 16r620E 16r4857 16r8338 16r4858 16r84C9 16r4859 16r8363 16r485A 16r878D 16r485B 16r7194 16r485C 16r6EB6 16r485D 16r5BB9 16r485E 16r7ED2 16r485F 16r5197 16r4860 16r63C9 16r4861 16r67D4 16r4862 16r8089 16r4863 16r8339 16r4864 16r8815 16r4865 16r5112 16r4866 16r5B7A 16r4867 16r5982 16r4868 16r8FB1 16r4869 16r4E73 16r486A 16r6C5D 16r486B 16r5165 16r486C 16r8925 16r486D 16r8F6F 16r486E 16r962E 16r486F 16r854A 16r4870 16r745E 16r4871 16r9510 16r4872 16r95F0 16r4873 16r6DA6 16r4874 16r82E5 16r4875 16r5F31 16r4876 16r6492 16r4877 16r6D12 16r4878 16r8428 16r4879 16r816E 16r487A 16r9CC3 16r487B 16r585E 16r487C 16r8D5B 16r487D 16r4E09 16r487E 16r53C1 16r4921 16r4F1E 16r4922 16r6563 16r4923 16r6851 16r4924 16r55D3 16r4925 16r4E27 16r4926 16r6414 16r4927 16r9A9A 16r4928 16r626B 16r4929 16r5AC2 16r492A 16r745F 16r492B 16r8272 16r492C 16r6DA9 16r492D 16r68EE 16r492E 16r50E7 16r492F 16r838E 16r4930 16r7802 16r4931 16r6740 16r4932 16r5239 16r4933 16r6C99 16r4934 16r7EB1 16r4935 16r50BB 16r4936 16r5565 16r4937 16r715E 16r4938 16r7B5B 16r4939 16r6652 16r493A 16r73CA 16r493B 16r82EB 16r493C 16r6749 16r493D 16r5C71 16r493E 16r5220 16r493F 16r717D 16r4940 16r886B 16r4941 16r95EA 16r4942 16r9655 16r4943 16r64C5 16r4944 16r8D61 16r4945 16r81B3 16r4946 16r5584 16r4947 16r6C55 16r4948 16r6247 16r4949 16r7F2E 16r494A 16r5892 16r494B 16r4F24 16r494C 16r5546 16r494D 16r8D4F 16r494E 16r664C 16r494F 16r4E0A 16r4950 16r5C1A 16r4951 16r88F3 16r4952 16r68A2 16r4953 16r634E 16r4954 16r7A0D 16r4955 16r70E7 16r4956 16r828D 16r4957 16r52FA 16r4958 16r97F6 16r4959 16r5C11 16r495A 16r54E8 16r495B 16r90B5 16r495C 16r7ECD 16r495D 16r5962 16r495E 16r8D4A 16r495F 16r86C7 16r4960 16r820C 16r4961 16r820D 16r4962 16r8D66 16r4963 16r6444 16r4964 16r5C04 16r4965 16r6151 16r4966 16r6D89 16r4967 16r793E 16r4968 16r8BBE 16r4969 16r7837 16r496A 16r7533 16r496B 16r547B 16r496C 16r4F38 16r496D 16r8EAB 16r496E 16r6DF1 16r496F 16r5A20 16r4970 16r7EC5 16r4971 16r795E 16r4972 16r6C88 16r4973 16r5BA1 16r4974 16r5A76 16r4975 16r751A 16r4976 16r80BE 16r4977 16r614E 16r4978 16r6E17 16r4979 16r58F0 16r497A 16r751F 16r497B 16r7525 16r497C 16r7272 16r497D 16r5347 16r497E 16r7EF3 16r4A21 16r7701 16r4A22 16r76DB 16r4A23 16r5269 16r4A24 16r80DC 16r4A25 16r5723 16r4A26 16r5E08 16r4A27 16r5931 16r4A28 16r72EE 16r4A29 16r65BD 16r4A2A 16r6E7F 16r4A2B 16r8BD7 16r4A2C 16r5C38 16r4A2D 16r8671 16r4A2E 16r5341 16r4A2F 16r77F3 16r4A30 16r62FE 16r4A31 16r65F6 16r4A32 16r4EC0 16r4A33 16r98DF 16r4A34 16r8680 16r4A35 16r5B9E 16r4A36 16r8BC6 16r4A37 16r53F2 16r4A38 16r77E2 16r4A39 16r4F7F 16r4A3A 16r5C4E 16r4A3B 16r9A76 16r4A3C 16r59CB 16r4A3D 16r5F0F 16r4A3E 16r793A 16r4A3F 16r58EB 16r4A40 16r4E16 16r4A41 16r67FF 16r4A42 16r4E8B 16r4A43 16r62ED 16r4A44 16r8A93 16r4A45 16r901D 16r4A46 16r52BF 16r4A47 16r662F 16r4A48 16r55DC 16r4A49 16r566C 16r4A4A 16r9002 16r4A4B 16r4ED5 16r4A4C 16r4F8D 16r4A4D 16r91CA 16r4A4E 16r9970 16r4A4F 16r6C0F 16r4A50 16r5E02 16r4A51 16r6043 16r4A52 16r5BA4 16r4A53 16r89C6 16r4A54 16r8BD5 16r4A55 16r6536 16r4A56 16r624B 16r4A57 16r9996 16r4A58 16r5B88 16r4A59 16r5BFF 16r4A5A 16r6388 16r4A5B 16r552E 16r4A5C 16r53D7 16r4A5D 16r7626 16r4A5E 16r517D 16r4A5F 16r852C 16r4A60 16r67A2 16r4A61 16r68B3 16r4A62 16r6B8A 16r4A63 16r6292 16r4A64 16r8F93 16r4A65 16r53D4 16r4A66 16r8212 16r4A67 16r6DD1 16r4A68 16r758F 16r4A69 16r4E66 16r4A6A 16r8D4E 16r4A6B 16r5B70 16r4A6C 16r719F 16r4A6D 16r85AF 16r4A6E 16r6691 16r4A6F 16r66D9 16r4A70 16r7F72 16r4A71 16r8700 16r4A72 16r9ECD 16r4A73 16r9F20 16r4A74 16r5C5E 16r4A75 16r672F 16r4A76 16r8FF0 16r4A77 16r6811 16r4A78 16r675F 16r4A79 16r620D 16r4A7A 16r7AD6 16r4A7B 16r5885 16r4A7C 16r5EB6 16r4A7D 16r6570 16r4A7E 16r6F31 16r4B21 16r6055 16r4B22 16r5237 16r4B23 16r800D 16r4B24 16r6454 16r4B25 16r8870 16r4B26 16r7529 16r4B27 16r5E05 16r4B28 16r6813 16r4B29 16r62F4 16r4B2A 16r971C 16r4B2B 16r53CC 16r4B2C 16r723D 16r4B2D 16r8C01 16r4B2E 16r6C34 16r4B2F 16r7761 16r4B30 16r7A0E 16r4B31 16r542E 16r4B32 16r77AC 16r4B33 16r987A 16r4B34 16r821C 16r4B35 16r8BF4 16r4B36 16r7855 16r4B37 16r6714 16r4B38 16r70C1 16r4B39 16r65AF 16r4B3A 16r6495 16r4B3B 16r5636 16r4B3C 16r601D 16r4B3D 16r79C1 16r4B3E 16r53F8 16r4B3F 16r4E1D 16r4B40 16r6B7B 16r4B41 16r8086 16r4B42 16r5BFA 16r4B43 16r55E3 16r4B44 16r56DB 16r4B45 16r4F3A 16r4B46 16r4F3C 16r4B47 16r9972 16r4B48 16r5DF3 16r4B49 16r677E 16r4B4A 16r8038 16r4B4B 16r6002 16r4B4C 16r9882 16r4B4D 16r9001 16r4B4E 16r5B8B 16r4B4F 16r8BBC 16r4B50 16r8BF5 16r4B51 16r641C 16r4B52 16r8258 16r4B53 16r64DE 16r4B54 16r55FD 16r4B55 16r82CF 16r4B56 16r9165 16r4B57 16r4FD7 16r4B58 16r7D20 16r4B59 16r901F 16r4B5A 16r7C9F 16r4B5B 16r50F3 16r4B5C 16r5851 16r4B5D 16r6EAF 16r4B5E 16r5BBF 16r4B5F 16r8BC9 16r4B60 16r8083 16r4B61 16r9178 16r4B62 16r849C 16r4B63 16r7B97 16r4B64 16r867D 16r4B65 16r968B 16r4B66 16r968F 16r4B67 16r7EE5 16r4B68 16r9AD3 16r4B69 16r788E 16r4B6A 16r5C81 16r4B6B 16r7A57 16r4B6C 16r9042 16r4B6D 16r96A7 16r4B6E 16r795F 16r4B6F 16r5B59 16r4B70 16r635F 16r4B71 16r7B0B 16r4B72 16r84D1 16r4B73 16r68AD 16r4B74 16r5506 16r4B75 16r7F29 16r4B76 16r7410 16r4B77 16r7D22 16r4B78 16r9501 16r4B79 16r6240 16r4B7A 16r584C 16r4B7B 16r4ED6 16r4B7C 16r5B83 16r4B7D 16r5979 16r4B7E 16r5854 16r4C21 16r736D 16r4C22 16r631E 16r4C23 16r8E4B 16r4C24 16r8E0F 16r4C25 16r80CE 16r4C26 16r82D4 16r4C27 16r62AC 16r4C28 16r53F0 16r4C29 16r6CF0 16r4C2A 16r915E 16r4C2B 16r592A 16r4C2C 16r6001 16r4C2D 16r6C70 16r4C2E 16r574D 16r4C2F 16r644A 16r4C30 16r8D2A 16r4C31 16r762B 16r4C32 16r6EE9 16r4C33 16r575B 16r4C34 16r6A80 16r4C35 16r75F0 16r4C36 16r6F6D 16r4C37 16r8C2D 16r4C38 16r8C08 16r4C39 16r5766 16r4C3A 16r6BEF 16r4C3B 16r8892 16r4C3C 16r78B3 16r4C3D 16r63A2 16r4C3E 16r53F9 16r4C3F 16r70AD 16r4C40 16r6C64 16r4C41 16r5858 16r4C42 16r642A 16r4C43 16r5802 16r4C44 16r68E0 16r4C45 16r819B 16r4C46 16r5510 16r4C47 16r7CD6 16r4C48 16r5018 16r4C49 16r8EBA 16r4C4A 16r6DCC 16r4C4B 16r8D9F 16r4C4C 16r70EB 16r4C4D 16r638F 16r4C4E 16r6D9B 16r4C4F 16r6ED4 16r4C50 16r7EE6 16r4C51 16r8404 16r4C52 16r6843 16r4C53 16r9003 16r4C54 16r6DD8 16r4C55 16r9676 16r4C56 16r8BA8 16r4C57 16r5957 16r4C58 16r7279 16r4C59 16r85E4 16r4C5A 16r817E 16r4C5B 16r75BC 16r4C5C 16r8A8A 16r4C5D 16r68AF 16r4C5E 16r5254 16r4C5F 16r8E22 16r4C60 16r9511 16r4C61 16r63D0 16r4C62 16r9898 16r4C63 16r8E44 16r4C64 16r557C 16r4C65 16r4F53 16r4C66 16r66FF 16r4C67 16r568F 16r4C68 16r60D5 16r4C69 16r6D95 16r4C6A 16r5243 16r4C6B 16r5C49 16r4C6C 16r5929 16r4C6D 16r6DFB 16r4C6E 16r586B 16r4C6F 16r7530 16r4C70 16r751C 16r4C71 16r606C 16r4C72 16r8214 16r4C73 16r8146 16r4C74 16r6311 16r4C75 16r6761 16r4C76 16r8FE2 16r4C77 16r773A 16r4C78 16r8DF3 16r4C79 16r8D34 16r4C7A 16r94C1 16r4C7B 16r5E16 16r4C7C 16r5385 16r4C7D 16r542C 16r4C7E 16r70C3 16r4D21 16r6C40 16r4D22 16r5EF7 16r4D23 16r505C 16r4D24 16r4EAD 16r4D25 16r5EAD 16r4D26 16r633A 16r4D27 16r8247 16r4D28 16r901A 16r4D29 16r6850 16r4D2A 16r916E 16r4D2B 16r77B3 16r4D2C 16r540C 16r4D2D 16r94DC 16r4D2E 16r5F64 16r4D2F 16r7AE5 16r4D30 16r6876 16r4D31 16r6345 16r4D32 16r7B52 16r4D33 16r7EDF 16r4D34 16r75DB 16r4D35 16r5077 16r4D36 16r6295 16r4D37 16r5934 16r4D38 16r900F 16r4D39 16r51F8 16r4D3A 16r79C3 16r4D3B 16r7A81 16r4D3C 16r56FE 16r4D3D 16r5F92 16r4D3E 16r9014 16r4D3F 16r6D82 16r4D40 16r5C60 16r4D41 16r571F 16r4D42 16r5410 16r4D43 16r5154 16r4D44 16r6E4D 16r4D45 16r56E2 16r4D46 16r63A8 16r4D47 16r9893 16r4D48 16r817F 16r4D49 16r8715 16r4D4A 16r892A 16r4D4B 16r9000 16r4D4C 16r541E 16r4D4D 16r5C6F 16r4D4E 16r81C0 16r4D4F 16r62D6 16r4D50 16r6258 16r4D51 16r8131 16r4D52 16r9E35 16r4D53 16r9640 16r4D54 16r9A6E 16r4D55 16r9A7C 16r4D56 16r692D 16r4D57 16r59A5 16r4D58 16r62D3 16r4D59 16r553E 16r4D5A 16r6316 16r4D5B 16r54C7 16r4D5C 16r86D9 16r4D5D 16r6D3C 16r4D5E 16r5A03 16r4D5F 16r74E6 16r4D60 16r889C 16r4D61 16r6B6A 16r4D62 16r5916 16r4D63 16r8C4C 16r4D64 16r5F2F 16r4D65 16r6E7E 16r4D66 16r73A9 16r4D67 16r987D 16r4D68 16r4E38 16r4D69 16r70F7 16r4D6A 16r5B8C 16r4D6B 16r7897 16r4D6C 16r633D 16r4D6D 16r665A 16r4D6E 16r7696 16r4D6F 16r60CB 16r4D70 16r5B9B 16r4D71 16r5A49 16r4D72 16r4E07 16r4D73 16r8155 16r4D74 16r6C6A 16r4D75 16r738B 16r4D76 16r4EA1 16r4D77 16r6789 16r4D78 16r7F51 16r4D79 16r5F80 16r4D7A 16r65FA 16r4D7B 16r671B 16r4D7C 16r5FD8 16r4D7D 16r5984 16r4D7E 16r5A01 16r4E21 16r5DCD 16r4E22 16r5FAE 16r4E23 16r5371 16r4E24 16r97E6 16r4E25 16r8FDD 16r4E26 16r6845 16r4E27 16r56F4 16r4E28 16r552F 16r4E29 16r60DF 16r4E2A 16r4E3A 16r4E2B 16r6F4D 16r4E2C 16r7EF4 16r4E2D 16r82C7 16r4E2E 16r840E 16r4E2F 16r59D4 16r4E30 16r4F1F 16r4E31 16r4F2A 16r4E32 16r5C3E 16r4E33 16r7EAC 16r4E34 16r672A 16r4E35 16r851A 16r4E36 16r5473 16r4E37 16r754F 16r4E38 16r80C3 16r4E39 16r5582 16r4E3A 16r9B4F 16r4E3B 16r4F4D 16r4E3C 16r6E2D 16r4E3D 16r8C13 16r4E3E 16r5C09 16r4E3F 16r6170 16r4E40 16r536B 16r4E41 16r761F 16r4E42 16r6E29 16r4E43 16r868A 16r4E44 16r6587 16r4E45 16r95FB 16r4E46 16r7EB9 16r4E47 16r543B 16r4E48 16r7A33 16r4E49 16r7D0A 16r4E4A 16r95EE 16r4E4B 16r55E1 16r4E4C 16r7FC1 16r4E4D 16r74EE 16r4E4E 16r631D 16r4E4F 16r8717 16r4E50 16r6DA1 16r4E51 16r7A9D 16r4E52 16r6211 16r4E53 16r65A1 16r4E54 16r5367 16r4E55 16r63E1 16r4E56 16r6C83 16r4E57 16r5DEB 16r4E58 16r545C 16r4E59 16r94A8 16r4E5A 16r4E4C 16r4E5B 16r6C61 16r4E5C 16r8BEC 16r4E5D 16r5C4B 16r4E5E 16r65E0 16r4E5F 16r829C 16r4E60 16r68A7 16r4E61 16r543E 16r4E62 16r5434 16r4E63 16r6BCB 16r4E64 16r6B66 16r4E65 16r4E94 16r4E66 16r6342 16r4E67 16r5348 16r4E68 16r821E 16r4E69 16r4F0D 16r4E6A 16r4FAE 16r4E6B 16r575E 16r4E6C 16r620A 16r4E6D 16r96FE 16r4E6E 16r6664 16r4E6F 16r7269 16r4E70 16r52FF 16r4E71 16r52A1 16r4E72 16r609F 16r4E73 16r8BEF 16r4E74 16r6614 16r4E75 16r7199 16r4E76 16r6790 16r4E77 16r897F 16r4E78 16r7852 16r4E79 16r77FD 16r4E7A 16r6670 16r4E7B 16r563B 16r4E7C 16r5438 16r4E7D 16r9521 16r4E7E 16r727A 16r4F21 16r7A00 16r4F22 16r606F 16r4F23 16r5E0C 16r4F24 16r6089 16r4F25 16r819D 16r4F26 16r5915 16r4F27 16r60DC 16r4F28 16r7184 16r4F29 16r70EF 16r4F2A 16r6EAA 16r4F2B 16r6C50 16r4F2C 16r7280 16r4F2D 16r6A84 16r4F2E 16r88AD 16r4F2F 16r5E2D 16r4F30 16r4E60 16r4F31 16r5AB3 16r4F32 16r559C 16r4F33 16r94E3 16r4F34 16r6D17 16r4F35 16r7CFB 16r4F36 16r9699 16r4F37 16r620F 16r4F38 16r7EC6 16r4F39 16r778E 16r4F3A 16r867E 16r4F3B 16r5323 16r4F3C 16r971E 16r4F3D 16r8F96 16r4F3E 16r6687 16r4F3F 16r5CE1 16r4F40 16r4FA0 16r4F41 16r72ED 16r4F42 16r4E0B 16r4F43 16r53A6 16r4F44 16r590F 16r4F45 16r5413 16r4F46 16r6380 16r4F47 16r9528 16r4F48 16r5148 16r4F49 16r4ED9 16r4F4A 16r9C9C 16r4F4B 16r7EA4 16r4F4C 16r54B8 16r4F4D 16r8D24 16r4F4E 16r8854 16r4F4F 16r8237 16r4F50 16r95F2 16r4F51 16r6D8E 16r4F52 16r5F26 16r4F53 16r5ACC 16r4F54 16r663E 16r4F55 16r9669 16r4F56 16r73B0 16r4F57 16r732E 16r4F58 16r53BF 16r4F59 16r817A 16r4F5A 16r9985 16r4F5B 16r7FA1 16r4F5C 16r5BAA 16r4F5D 16r9677 16r4F5E 16r9650 16r4F5F 16r7EBF 16r4F60 16r76F8 16r4F61 16r53A2 16r4F62 16r9576 16r4F63 16r9999 16r4F64 16r7BB1 16r4F65 16r8944 16r4F66 16r6E58 16r4F67 16r4E61 16r4F68 16r7FD4 16r4F69 16r7965 16r4F6A 16r8BE6 16r4F6B 16r60F3 16r4F6C 16r54CD 16r4F6D 16r4EAB 16r4F6E 16r9879 16r4F6F 16r5DF7 16r4F70 16r6A61 16r4F71 16r50CF 16r4F72 16r5411 16r4F73 16r8C61 16r4F74 16r8427 16r4F75 16r785D 16r4F76 16r9704 16r4F77 16r524A 16r4F78 16r54EE 16r4F79 16r56A3 16r4F7A 16r9500 16r4F7B 16r6D88 16r4F7C 16r5BB5 16r4F7D 16r6DC6 16r4F7E 16r6653 16r5021 16r5C0F 16r5022 16r5B5D 16r5023 16r6821 16r5024 16r8096 16r5025 16r5578 16r5026 16r7B11 16r5027 16r6548 16r5028 16r6954 16r5029 16r4E9B 16r502A 16r6B47 16r502B 16r874E 16r502C 16r978B 16r502D 16r534F 16r502E 16r631F 16r502F 16r643A 16r5030 16r90AA 16r5031 16r659C 16r5032 16r80C1 16r5033 16r8C10 16r5034 16r5199 16r5035 16r68B0 16r5036 16r5378 16r5037 16r87F9 16r5038 16r61C8 16r5039 16r6CC4 16r503A 16r6CFB 16r503B 16r8C22 16r503C 16r5C51 16r503D 16r85AA 16r503E 16r82AF 16r503F 16r950C 16r5040 16r6B23 16r5041 16r8F9B 16r5042 16r65B0 16r5043 16r5FFB 16r5044 16r5FC3 16r5045 16r4FE1 16r5046 16r8845 16r5047 16r661F 16r5048 16r8165 16r5049 16r7329 16r504A 16r60FA 16r504B 16r5174 16r504C 16r5211 16r504D 16r578B 16r504E 16r5F62 16r504F 16r90A2 16r5050 16r884C 16r5051 16r9192 16r5052 16r5E78 16r5053 16r674F 16r5054 16r6027 16r5055 16r59D3 16r5056 16r5144 16r5057 16r51F6 16r5058 16r80F8 16r5059 16r5308 16r505A 16r6C79 16r505B 16r96C4 16r505C 16r718A 16r505D 16r4F11 16r505E 16r4FEE 16r505F 16r7F9E 16r5060 16r673D 16r5061 16r55C5 16r5062 16r9508 16r5063 16r79C0 16r5064 16r8896 16r5065 16r7EE3 16r5066 16r589F 16r5067 16r620C 16r5068 16r9700 16r5069 16r865A 16r506A 16r5618 16r506B 16r987B 16r506C 16r5F90 16r506D 16r8BB8 16r506E 16r84C4 16r506F 16r9157 16r5070 16r53D9 16r5071 16r65ED 16r5072 16r5E8F 16r5073 16r755C 16r5074 16r6064 16r5075 16r7D6E 16r5076 16r5A7F 16r5077 16r7EEA 16r5078 16r7EED 16r5079 16r8F69 16r507A 16r55A7 16r507B 16r5BA3 16r507C 16r60AC 16r507D 16r65CB 16r507E 16r7384 16r5121 16r9009 16r5122 16r7663 16r5123 16r7729 16r5124 16r7EDA 16r5125 16r9774 16r5126 16r859B 16r5127 16r5B66 16r5128 16r7A74 16r5129 16r96EA 16r512A 16r8840 16r512B 16r52CB 16r512C 16r718F 16r512D 16r5FAA 16r512E 16r65EC 16r512F 16r8BE2 16r5130 16r5BFB 16r5131 16r9A6F 16r5132 16r5DE1 16r5133 16r6B89 16r5134 16r6C5B 16r5135 16r8BAD 16r5136 16r8BAF 16r5137 16r900A 16r5138 16r8FC5 16r5139 16r538B 16r513A 16r62BC 16r513B 16r9E26 16r513C 16r9E2D 16r513D 16r5440 16r513E 16r4E2B 16r513F 16r82BD 16r5140 16r7259 16r5141 16r869C 16r5142 16r5D16 16r5143 16r8859 16r5144 16r6DAF 16r5145 16r96C5 16r5146 16r54D1 16r5147 16r4E9A 16r5148 16r8BB6 16r5149 16r7109 16r514A 16r54BD 16r514B 16r9609 16r514C 16r70DF 16r514D 16r6DF9 16r514E 16r76D0 16r514F 16r4E25 16r5150 16r7814 16r5151 16r8712 16r5152 16r5CA9 16r5153 16r5EF6 16r5154 16r8A00 16r5155 16r989C 16r5156 16r960E 16r5157 16r708E 16r5158 16r6CBF 16r5159 16r5944 16r515A 16r63A9 16r515B 16r773C 16r515C 16r884D 16r515D 16r6F14 16r515E 16r8273 16r515F 16r5830 16r5160 16r71D5 16r5161 16r538C 16r5162 16r781A 16r5163 16r96C1 16r5164 16r5501 16r5165 16r5F66 16r5166 16r7130 16r5167 16r5BB4 16r5168 16r8C1A 16r5169 16r9A8C 16r516A 16r6B83 16r516B 16r592E 16r516C 16r9E2F 16r516D 16r79E7 16r516E 16r6768 16r516F 16r626C 16r5170 16r4F6F 16r5171 16r75A1 16r5172 16r7F8A 16r5173 16r6D0B 16r5174 16r9633 16r5175 16r6C27 16r5176 16r4EF0 16r5177 16r75D2 16r5178 16r517B 16r5179 16r6837 16r517A 16r6F3E 16r517B 16r9080 16r517C 16r8170 16r517D 16r5996 16r517E 16r7476 16r5221 16r6447 16r5222 16r5C27 16r5223 16r9065 16r5224 16r7A91 16r5225 16r8C23 16r5226 16r59DA 16r5227 16r54AC 16r5228 16r8200 16r5229 16r836F 16r522A 16r8981 16r522B 16r8000 16r522C 16r6930 16r522D 16r564E 16r522E 16r8036 16r522F 16r7237 16r5230 16r91CE 16r5231 16r51B6 16r5232 16r4E5F 16r5233 16r9875 16r5234 16r6396 16r5235 16r4E1A 16r5236 16r53F6 16r5237 16r66F3 16r5238 16r814B 16r5239 16r591C 16r523A 16r6DB2 16r523B 16r4E00 16r523C 16r58F9 16r523D 16r533B 16r523E 16r63D6 16r523F 16r94F1 16r5240 16r4F9D 16r5241 16r4F0A 16r5242 16r8863 16r5243 16r9890 16r5244 16r5937 16r5245 16r9057 16r5246 16r79FB 16r5247 16r4EEA 16r5248 16r80F0 16r5249 16r7591 16r524A 16r6C82 16r524B 16r5B9C 16r524C 16r59E8 16r524D 16r5F5D 16r524E 16r6905 16r524F 16r8681 16r5250 16r501A 16r5251 16r5DF2 16r5252 16r4E59 16r5253 16r77E3 16r5254 16r4EE5 16r5255 16r827A 16r5256 16r6291 16r5257 16r6613 16r5258 16r9091 16r5259 16r5C79 16r525A 16r4EBF 16r525B 16r5F79 16r525C 16r81C6 16r525D 16r9038 16r525E 16r8084 16r525F 16r75AB 16r5260 16r4EA6 16r5261 16r88D4 16r5262 16r610F 16r5263 16r6BC5 16r5264 16r5FC6 16r5265 16r4E49 16r5266 16r76CA 16r5267 16r6EA2 16r5268 16r8BE3 16r5269 16r8BAE 16r526A 16r8C0A 16r526B 16r8BD1 16r526C 16r5F02 16r526D 16r7FFC 16r526E 16r7FCC 16r526F 16r7ECE 16r5270 16r8335 16r5271 16r836B 16r5272 16r56E0 16r5273 16r6BB7 16r5274 16r97F3 16r5275 16r9634 16r5276 16r59FB 16r5277 16r541F 16r5278 16r94F6 16r5279 16r6DEB 16r527A 16r5BC5 16r527B 16r996E 16r527C 16r5C39 16r527D 16r5F15 16r527E 16r9690 16r5321 16r5370 16r5322 16r82F1 16r5323 16r6A31 16r5324 16r5A74 16r5325 16r9E70 16r5326 16r5E94 16r5327 16r7F28 16r5328 16r83B9 16r5329 16r8424 16r532A 16r8425 16r532B 16r8367 16r532C 16r8747 16r532D 16r8FCE 16r532E 16r8D62 16r532F 16r76C8 16r5330 16r5F71 16r5331 16r9896 16r5332 16r786C 16r5333 16r6620 16r5334 16r54DF 16r5335 16r62E5 16r5336 16r4F63 16r5337 16r81C3 16r5338 16r75C8 16r5339 16r5EB8 16r533A 16r96CD 16r533B 16r8E0A 16r533C 16r86F9 16r533D 16r548F 16r533E 16r6CF3 16r533F 16r6D8C 16r5340 16r6C38 16r5341 16r607F 16r5342 16r52C7 16r5343 16r7528 16r5344 16r5E7D 16r5345 16r4F18 16r5346 16r60A0 16r5347 16r5FE7 16r5348 16r5C24 16r5349 16r7531 16r534A 16r90AE 16r534B 16r94C0 16r534C 16r72B9 16r534D 16r6CB9 16r534E 16r6E38 16r534F 16r9149 16r5350 16r6709 16r5351 16r53CB 16r5352 16r53F3 16r5353 16r4F51 16r5354 16r91C9 16r5355 16r8BF1 16r5356 16r53C8 16r5357 16r5E7C 16r5358 16r8FC2 16r5359 16r6DE4 16r535A 16r4E8E 16r535B 16r76C2 16r535C 16r6986 16r535D 16r865E 16r535E 16r611A 16r535F 16r8206 16r5360 16r4F59 16r5361 16r4FDE 16r5362 16r903E 16r5363 16r9C7C 16r5364 16r6109 16r5365 16r6E1D 16r5366 16r6E14 16r5367 16r9685 16r5368 16r4E88 16r5369 16r5A31 16r536A 16r96E8 16r536B 16r4E0E 16r536C 16r5C7F 16r536D 16r79B9 16r536E 16r5B87 16r536F 16r8BED 16r5370 16r7FBD 16r5371 16r7389 16r5372 16r57DF 16r5373 16r828B 16r5374 16r90C1 16r5375 16r5401 16r5376 16r9047 16r5377 16r55BB 16r5378 16r5CEA 16r5379 16r5FA1 16r537A 16r6108 16r537B 16r6B32 16r537C 16r72F1 16r537D 16r80B2 16r537E 16r8A89 16r5421 16r6D74 16r5422 16r5BD3 16r5423 16r88D5 16r5424 16r9884 16r5425 16r8C6B 16r5426 16r9A6D 16r5427 16r9E33 16r5428 16r6E0A 16r5429 16r51A4 16r542A 16r5143 16r542B 16r57A3 16r542C 16r8881 16r542D 16r539F 16r542E 16r63F4 16r542F 16r8F95 16r5430 16r56ED 16r5431 16r5458 16r5432 16r5706 16r5433 16r733F 16r5434 16r6E90 16r5435 16r7F18 16r5436 16r8FDC 16r5437 16r82D1 16r5438 16r613F 16r5439 16r6028 16r543A 16r9662 16r543B 16r66F0 16r543C 16r7EA6 16r543D 16r8D8A 16r543E 16r8DC3 16r543F 16r94A5 16r5440 16r5CB3 16r5441 16r7CA4 16r5442 16r6708 16r5443 16r60A6 16r5444 16r9605 16r5445 16r8018 16r5446 16r4E91 16r5447 16r90E7 16r5448 16r5300 16r5449 16r9668 16r544A 16r5141 16r544B 16r8FD0 16r544C 16r8574 16r544D 16r915D 16r544E 16r6655 16r544F 16r97F5 16r5450 16r5B55 16r5451 16r531D 16r5452 16r7838 16r5453 16r6742 16r5454 16r683D 16r5455 16r54C9 16r5456 16r707E 16r5457 16r5BB0 16r5458 16r8F7D 16r5459 16r518D 16r545A 16r5728 16r545B 16r54B1 16r545C 16r6512 16r545D 16r6682 16r545E 16r8D5E 16r545F 16r8D43 16r5460 16r810F 16r5461 16r846C 16r5462 16r906D 16r5463 16r7CDF 16r5464 16r51FF 16r5465 16r85FB 16r5466 16r67A3 16r5467 16r65E9 16r5468 16r6FA1 16r5469 16r86A4 16r546A 16r8E81 16r546B 16r566A 16r546C 16r9020 16r546D 16r7682 16r546E 16r7076 16r546F 16r71E5 16r5470 16r8D23 16r5471 16r62E9 16r5472 16r5219 16r5473 16r6CFD 16r5474 16r8D3C 16r5475 16r600E 16r5476 16r589E 16r5477 16r618E 16r5478 16r66FE 16r5479 16r8D60 16r547A 16r624E 16r547B 16r55B3 16r547C 16r6E23 16r547D 16r672D 16r547E 16r8F67 16r5521 16r94E1 16r5522 16r95F8 16r5523 16r7728 16r5524 16r6805 16r5525 16r69A8 16r5526 16r548B 16r5527 16r4E4D 16r5528 16r70B8 16r5529 16r8BC8 16r552A 16r6458 16r552B 16r658B 16r552C 16r5B85 16r552D 16r7A84 16r552E 16r503A 16r552F 16r5BE8 16r5530 16r77BB 16r5531 16r6BE1 16r5532 16r8A79 16r5533 16r7C98 16r5534 16r6CBE 16r5535 16r76CF 16r5536 16r65A9 16r5537 16r8F97 16r5538 16r5D2D 16r5539 16r5C55 16r553A 16r8638 16r553B 16r6808 16r553C 16r5360 16r553D 16r6218 16r553E 16r7AD9 16r553F 16r6E5B 16r5540 16r7EFD 16r5541 16r6A1F 16r5542 16r7AE0 16r5543 16r5F70 16r5544 16r6F33 16r5545 16r5F20 16r5546 16r638C 16r5547 16r6DA8 16r5548 16r6756 16r5549 16r4E08 16r554A 16r5E10 16r554B 16r8D26 16r554C 16r4ED7 16r554D 16r80C0 16r554E 16r7634 16r554F 16r969C 16r5550 16r62DB 16r5551 16r662D 16r5552 16r627E 16r5553 16r6CBC 16r5554 16r8D75 16r5555 16r7167 16r5556 16r7F69 16r5557 16r5146 16r5558 16r8087 16r5559 16r53EC 16r555A 16r906E 16r555B 16r6298 16r555C 16r54F2 16r555D 16r86F0 16r555E 16r8F99 16r555F 16r8005 16r5560 16r9517 16r5561 16r8517 16r5562 16r8FD9 16r5563 16r6D59 16r5564 16r73CD 16r5565 16r659F 16r5566 16r771F 16r5567 16r7504 16r5568 16r7827 16r5569 16r81FB 16r556A 16r8D1E 16r556B 16r9488 16r556C 16r4FA6 16r556D 16r6795 16r556E 16r75B9 16r556F 16r8BCA 16r5570 16r9707 16r5571 16r632F 16r5572 16r9547 16r5573 16r9635 16r5574 16r84B8 16r5575 16r6323 16r5576 16r7741 16r5577 16r5F81 16r5578 16r72F0 16r5579 16r4E89 16r557A 16r6014 16r557B 16r6574 16r557C 16r62EF 16r557D 16r6B63 16r557E 16r653F 16r5621 16r5E27 16r5622 16r75C7 16r5623 16r90D1 16r5624 16r8BC1 16r5625 16r829D 16r5626 16r679D 16r5627 16r652F 16r5628 16r5431 16r5629 16r8718 16r562A 16r77E5 16r562B 16r80A2 16r562C 16r8102 16r562D 16r6C41 16r562E 16r4E4B 16r562F 16r7EC7 16r5630 16r804C 16r5631 16r76F4 16r5632 16r690D 16r5633 16r6B96 16r5634 16r6267 16r5635 16r503C 16r5636 16r4F84 16r5637 16r5740 16r5638 16r6307 16r5639 16r6B62 16r563A 16r8DBE 16r563B 16r53EA 16r563C 16r65E8 16r563D 16r7EB8 16r563E 16r5FD7 16r563F 16r631A 16r5640 16r63B7 16r5641 16r81F3 16r5642 16r81F4 16r5643 16r7F6E 16r5644 16r5E1C 16r5645 16r5CD9 16r5646 16r5236 16r5647 16r667A 16r5648 16r79E9 16r5649 16r7A1A 16r564A 16r8D28 16r564B 16r7099 16r564C 16r75D4 16r564D 16r6EDE 16r564E 16r6CBB 16r564F 16r7A92 16r5650 16r4E2D 16r5651 16r76C5 16r5652 16r5FE0 16r5653 16r949F 16r5654 16r8877 16r5655 16r7EC8 16r5656 16r79CD 16r5657 16r80BF 16r5658 16r91CD 16r5659 16r4EF2 16r565A 16r4F17 16r565B 16r821F 16r565C 16r5468 16r565D 16r5DDE 16r565E 16r6D32 16r565F 16r8BCC 16r5660 16r7CA5 16r5661 16r8F74 16r5662 16r8098 16r5663 16r5E1A 16r5664 16r5492 16r5665 16r76B1 16r5666 16r5B99 16r5667 16r663C 16r5668 16r9AA4 16r5669 16r73E0 16r566A 16r682A 16r566B 16r86DB 16r566C 16r6731 16r566D 16r732A 16r566E 16r8BF8 16r566F 16r8BDB 16r5670 16r9010 16r5671 16r7AF9 16r5672 16r70DB 16r5673 16r716E 16r5674 16r62C4 16r5675 16r77A9 16r5676 16r5631 16r5677 16r4E3B 16r5678 16r8457 16r5679 16r67F1 16r567A 16r52A9 16r567B 16r86C0 16r567C 16r8D2E 16r567D 16r94F8 16r567E 16r7B51 16r5721 16r4F4F 16r5722 16r6CE8 16r5723 16r795D 16r5724 16r9A7B 16r5725 16r6293 16r5726 16r722A 16r5727 16r62FD 16r5728 16r4E13 16r5729 16r7816 16r572A 16r8F6C 16r572B 16r64B0 16r572C 16r8D5A 16r572D 16r7BC6 16r572E 16r6869 16r572F 16r5E84 16r5730 16r88C5 16r5731 16r5986 16r5732 16r649E 16r5733 16r58EE 16r5734 16r72B6 16r5735 16r690E 16r5736 16r9525 16r5737 16r8FFD 16r5738 16r8D58 16r5739 16r5760 16r573A 16r7F00 16r573B 16r8C06 16r573C 16r51C6 16r573D 16r6349 16r573E 16r62D9 16r573F 16r5353 16r5740 16r684C 16r5741 16r7422 16r5742 16r8301 16r5743 16r914C 16r5744 16r5544 16r5745 16r7740 16r5746 16r707C 16r5747 16r6D4A 16r5748 16r5179 16r5749 16r54A8 16r574A 16r8D44 16r574B 16r59FF 16r574C 16r6ECB 16r574D 16r6DC4 16r574E 16r5B5C 16r574F 16r7D2B 16r5750 16r4ED4 16r5751 16r7C7D 16r5752 16r6ED3 16r5753 16r5B50 16r5754 16r81EA 16r5755 16r6E0D 16r5756 16r5B57 16r5757 16r9B03 16r5758 16r68D5 16r5759 16r8E2A 16r575A 16r5B97 16r575B 16r7EFC 16r575C 16r603B 16r575D 16r7EB5 16r575E 16r90B9 16r575F 16r8D70 16r5760 16r594F 16r5761 16r63CD 16r5762 16r79DF 16r5763 16r8DB3 16r5764 16r5352 16r5765 16r65CF 16r5766 16r7956 16r5767 16r8BC5 16r5768 16r963B 16r5769 16r7EC4 16r576A 16r94BB 16r576B 16r7E82 16r576C 16r5634 16r576D 16r9189 16r576E 16r6700 16r576F 16r7F6A 16r5770 16r5C0A 16r5771 16r9075 16r5772 16r6628 16r5773 16r5DE6 16r5774 16r4F50 16r5775 16r67DE 16r5776 16r505A 16r5777 16r4F5C 16r5778 16r5750 16r5779 16r5EA7 16r5821 16r4E8D 16r5822 16r4E0C 16r5823 16r5140 16r5824 16r4E10 16r5825 16r5EFF 16r5826 16r5345 16r5827 16r4E15 16r5828 16r4E98 16r5829 16r4E1E 16r582A 16r9B32 16r582B 16r5B6C 16r582C 16r5669 16r582D 16r4E28 16r582E 16r79BA 16r582F 16r4E3F 16r5830 16r5315 16r5831 16r4E47 16r5832 16r592D 16r5833 16r723B 16r5834 16r536E 16r5835 16r6C10 16r5836 16r56DF 16r5837 16r80E4 16r5838 16r9997 16r5839 16r6BD3 16r583A 16r777E 16r583B 16r9F17 16r583C 16r4E36 16r583D 16r4E9F 16r583E 16r9F10 16r583F 16r4E5C 16r5840 16r4E69 16r5841 16r4E93 16r5842 16r8288 16r5843 16r5B5B 16r5844 16r556C 16r5845 16r560F 16r5846 16r4EC4 16r5847 16r538D 16r5848 16r539D 16r5849 16r53A3 16r584A 16r53A5 16r584B 16r53AE 16r584C 16r9765 16r584D 16r8D5D 16r584E 16r531A 16r584F 16r53F5 16r5850 16r5326 16r5851 16r532E 16r5852 16r533E 16r5853 16r8D5C 16r5854 16r5366 16r5855 16r5363 16r5856 16r5202 16r5857 16r5208 16r5858 16r520E 16r5859 16r522D 16r585A 16r5233 16r585B 16r523F 16r585C 16r5240 16r585D 16r524C 16r585E 16r525E 16r585F 16r5261 16r5860 16r525C 16r5861 16r84AF 16r5862 16r527D 16r5863 16r5282 16r5864 16r5281 16r5865 16r5290 16r5866 16r5293 16r5867 16r5182 16r5868 16r7F54 16r5869 16r4EBB 16r586A 16r4EC3 16r586B 16r4EC9 16r586C 16r4EC2 16r586D 16r4EE8 16r586E 16r4EE1 16r586F 16r4EEB 16r5870 16r4EDE 16r5871 16r4F1B 16r5872 16r4EF3 16r5873 16r4F22 16r5874 16r4F64 16r5875 16r4EF5 16r5876 16r4F25 16r5877 16r4F27 16r5878 16r4F09 16r5879 16r4F2B 16r587A 16r4F5E 16r587B 16r4F67 16r587C 16r6538 16r587D 16r4F5A 16r587E 16r4F5D 16r5921 16r4F5F 16r5922 16r4F57 16r5923 16r4F32 16r5924 16r4F3D 16r5925 16r4F76 16r5926 16r4F74 16r5927 16r4F91 16r5928 16r4F89 16r5929 16r4F83 16r592A 16r4F8F 16r592B 16r4F7E 16r592C 16r4F7B 16r592D 16r4FAA 16r592E 16r4F7C 16r592F 16r4FAC 16r5930 16r4F94 16r5931 16r4FE6 16r5932 16r4FE8 16r5933 16r4FEA 16r5934 16r4FC5 16r5935 16r4FDA 16r5936 16r4FE3 16r5937 16r4FDC 16r5938 16r4FD1 16r5939 16r4FDF 16r593A 16r4FF8 16r593B 16r5029 16r593C 16r504C 16r593D 16r4FF3 16r593E 16r502C 16r593F 16r500F 16r5940 16r502E 16r5941 16r502D 16r5942 16r4FFE 16r5943 16r501C 16r5944 16r500C 16r5945 16r5025 16r5946 16r5028 16r5947 16r507E 16r5948 16r5043 16r5949 16r5055 16r594A 16r5048 16r594B 16r504E 16r594C 16r506C 16r594D 16r507B 16r594E 16r50A5 16r594F 16r50A7 16r5950 16r50A9 16r5951 16r50BA 16r5952 16r50D6 16r5953 16r5106 16r5954 16r50ED 16r5955 16r50EC 16r5956 16r50E6 16r5957 16r50EE 16r5958 16r5107 16r5959 16r510B 16r595A 16r4EDD 16r595B 16r6C3D 16r595C 16r4F58 16r595D 16r4F65 16r595E 16r4FCE 16r595F 16r9FA0 16r5960 16r6C46 16r5961 16r7C74 16r5962 16r516E 16r5963 16r5DFD 16r5964 16r9EC9 16r5965 16r9998 16r5966 16r5181 16r5967 16r5914 16r5968 16r52F9 16r5969 16r530D 16r596A 16r8A07 16r596B 16r5310 16r596C 16r51EB 16r596D 16r5919 16r596E 16r5155 16r596F 16r4EA0 16r5970 16r5156 16r5971 16r4EB3 16r5972 16r886E 16r5973 16r88A4 16r5974 16r4EB5 16r5975 16r8114 16r5976 16r88D2 16r5977 16r7980 16r5978 16r5B34 16r5979 16r8803 16r597A 16r7FB8 16r597B 16r51AB 16r597C 16r51B1 16r597D 16r51BD 16r597E 16r51BC 16r5A21 16r51C7 16r5A22 16r5196 16r5A23 16r51A2 16r5A24 16r51A5 16r5A25 16r8BA0 16r5A26 16r8BA6 16r5A27 16r8BA7 16r5A28 16r8BAA 16r5A29 16r8BB4 16r5A2A 16r8BB5 16r5A2B 16r8BB7 16r5A2C 16r8BC2 16r5A2D 16r8BC3 16r5A2E 16r8BCB 16r5A2F 16r8BCF 16r5A30 16r8BCE 16r5A31 16r8BD2 16r5A32 16r8BD3 16r5A33 16r8BD4 16r5A34 16r8BD6 16r5A35 16r8BD8 16r5A36 16r8BD9 16r5A37 16r8BDC 16r5A38 16r8BDF 16r5A39 16r8BE0 16r5A3A 16r8BE4 16r5A3B 16r8BE8 16r5A3C 16r8BE9 16r5A3D 16r8BEE 16r5A3E 16r8BF0 16r5A3F 16r8BF3 16r5A40 16r8BF6 16r5A41 16r8BF9 16r5A42 16r8BFC 16r5A43 16r8BFF 16r5A44 16r8C00 16r5A45 16r8C02 16r5A46 16r8C04 16r5A47 16r8C07 16r5A48 16r8C0C 16r5A49 16r8C0F 16r5A4A 16r8C11 16r5A4B 16r8C12 16r5A4C 16r8C14 16r5A4D 16r8C15 16r5A4E 16r8C16 16r5A4F 16r8C19 16r5A50 16r8C1B 16r5A51 16r8C18 16r5A52 16r8C1D 16r5A53 16r8C1F 16r5A54 16r8C20 16r5A55 16r8C21 16r5A56 16r8C25 16r5A57 16r8C27 16r5A58 16r8C2A 16r5A59 16r8C2B 16r5A5A 16r8C2E 16r5A5B 16r8C2F 16r5A5C 16r8C32 16r5A5D 16r8C33 16r5A5E 16r8C35 16r5A5F 16r8C36 16r5A60 16r5369 16r5A61 16r537A 16r5A62 16r961D 16r5A63 16r9622 16r5A64 16r9621 16r5A65 16r9631 16r5A66 16r962A 16r5A67 16r963D 16r5A68 16r963C 16r5A69 16r9642 16r5A6A 16r9649 16r5A6B 16r9654 16r5A6C 16r965F 16r5A6D 16r9667 16r5A6E 16r966C 16r5A6F 16r9672 16r5A70 16r9674 16r5A71 16r9688 16r5A72 16r968D 16r5A73 16r9697 16r5A74 16r96B0 16r5A75 16r9097 16r5A76 16r909B 16r5A77 16r909D 16r5A78 16r9099 16r5A79 16r90AC 16r5A7A 16r90A1 16r5A7B 16r90B4 16r5A7C 16r90B3 16r5A7D 16r90B6 16r5A7E 16r90BA 16r5B21 16r90B8 16r5B22 16r90B0 16r5B23 16r90CF 16r5B24 16r90C5 16r5B25 16r90BE 16r5B26 16r90D0 16r5B27 16r90C4 16r5B28 16r90C7 16r5B29 16r90D3 16r5B2A 16r90E6 16r5B2B 16r90E2 16r5B2C 16r90DC 16r5B2D 16r90D7 16r5B2E 16r90DB 16r5B2F 16r90EB 16r5B30 16r90EF 16r5B31 16r90FE 16r5B32 16r9104 16r5B33 16r9122 16r5B34 16r911E 16r5B35 16r9123 16r5B36 16r9131 16r5B37 16r912F 16r5B38 16r9139 16r5B39 16r9143 16r5B3A 16r9146 16r5B3B 16r520D 16r5B3C 16r5942 16r5B3D 16r52A2 16r5B3E 16r52AC 16r5B3F 16r52AD 16r5B40 16r52BE 16r5B41 16r54FF 16r5B42 16r52D0 16r5B43 16r52D6 16r5B44 16r52F0 16r5B45 16r53DF 16r5B46 16r71EE 16r5B47 16r77CD 16r5B48 16r5EF4 16r5B49 16r51F5 16r5B4A 16r51FC 16r5B4B 16r9B2F 16r5B4C 16r53B6 16r5B4D 16r5F01 16r5B4E 16r755A 16r5B4F 16r5DEF 16r5B50 16r574C 16r5B51 16r57A9 16r5B52 16r57A1 16r5B53 16r587E 16r5B54 16r58BC 16r5B55 16r58C5 16r5B56 16r58D1 16r5B57 16r5729 16r5B58 16r572C 16r5B59 16r572A 16r5B5A 16r5733 16r5B5B 16r5739 16r5B5C 16r572E 16r5B5D 16r572F 16r5B5E 16r575C 16r5B5F 16r573B 16r5B60 16r5742 16r5B61 16r5769 16r5B62 16r5785 16r5B63 16r576B 16r5B64 16r5786 16r5B65 16r577C 16r5B66 16r577B 16r5B67 16r5768 16r5B68 16r576D 16r5B69 16r5776 16r5B6A 16r5773 16r5B6B 16r57AD 16r5B6C 16r57A4 16r5B6D 16r578C 16r5B6E 16r57B2 16r5B6F 16r57CF 16r5B70 16r57A7 16r5B71 16r57B4 16r5B72 16r5793 16r5B73 16r57A0 16r5B74 16r57D5 16r5B75 16r57D8 16r5B76 16r57DA 16r5B77 16r57D9 16r5B78 16r57D2 16r5B79 16r57B8 16r5B7A 16r57F4 16r5B7B 16r57EF 16r5B7C 16r57F8 16r5B7D 16r57E4 16r5B7E 16r57DD 16r5C21 16r580B 16r5C22 16r580D 16r5C23 16r57FD 16r5C24 16r57ED 16r5C25 16r5800 16r5C26 16r581E 16r5C27 16r5819 16r5C28 16r5844 16r5C29 16r5820 16r5C2A 16r5865 16r5C2B 16r586C 16r5C2C 16r5881 16r5C2D 16r5889 16r5C2E 16r589A 16r5C2F 16r5880 16r5C30 16r99A8 16r5C31 16r9F19 16r5C32 16r61FF 16r5C33 16r8279 16r5C34 16r827D 16r5C35 16r827F 16r5C36 16r828F 16r5C37 16r828A 16r5C38 16r82A8 16r5C39 16r8284 16r5C3A 16r828E 16r5C3B 16r8291 16r5C3C 16r8297 16r5C3D 16r8299 16r5C3E 16r82AB 16r5C3F 16r82B8 16r5C40 16r82BE 16r5C41 16r82B0 16r5C42 16r82C8 16r5C43 16r82CA 16r5C44 16r82E3 16r5C45 16r8298 16r5C46 16r82B7 16r5C47 16r82AE 16r5C48 16r82CB 16r5C49 16r82CC 16r5C4A 16r82C1 16r5C4B 16r82A9 16r5C4C 16r82B4 16r5C4D 16r82A1 16r5C4E 16r82AA 16r5C4F 16r829F 16r5C50 16r82C4 16r5C51 16r82CE 16r5C52 16r82A4 16r5C53 16r82E1 16r5C54 16r8309 16r5C55 16r82F7 16r5C56 16r82E4 16r5C57 16r830F 16r5C58 16r8307 16r5C59 16r82DC 16r5C5A 16r82F4 16r5C5B 16r82D2 16r5C5C 16r82D8 16r5C5D 16r830C 16r5C5E 16r82FB 16r5C5F 16r82D3 16r5C60 16r8311 16r5C61 16r831A 16r5C62 16r8306 16r5C63 16r8314 16r5C64 16r8315 16r5C65 16r82E0 16r5C66 16r82D5 16r5C67 16r831C 16r5C68 16r8351 16r5C69 16r835B 16r5C6A 16r835C 16r5C6B 16r8308 16r5C6C 16r8392 16r5C6D 16r833C 16r5C6E 16r8334 16r5C6F 16r8331 16r5C70 16r839B 16r5C71 16r835E 16r5C72 16r832F 16r5C73 16r834F 16r5C74 16r8347 16r5C75 16r8343 16r5C76 16r835F 16r5C77 16r8340 16r5C78 16r8317 16r5C79 16r8360 16r5C7A 16r832D 16r5C7B 16r833A 16r5C7C 16r8333 16r5C7D 16r8366 16r5C7E 16r8365 16r5D21 16r8368 16r5D22 16r831B 16r5D23 16r8369 16r5D24 16r836C 16r5D25 16r836A 16r5D26 16r836D 16r5D27 16r836E 16r5D28 16r83B0 16r5D29 16r8378 16r5D2A 16r83B3 16r5D2B 16r83B4 16r5D2C 16r83A0 16r5D2D 16r83AA 16r5D2E 16r8393 16r5D2F 16r839C 16r5D30 16r8385 16r5D31 16r837C 16r5D32 16r83B6 16r5D33 16r83A9 16r5D34 16r837D 16r5D35 16r83B8 16r5D36 16r837B 16r5D37 16r8398 16r5D38 16r839E 16r5D39 16r83A8 16r5D3A 16r83BA 16r5D3B 16r83BC 16r5D3C 16r83C1 16r5D3D 16r8401 16r5D3E 16r83E5 16r5D3F 16r83D8 16r5D40 16r5807 16r5D41 16r8418 16r5D42 16r840B 16r5D43 16r83DD 16r5D44 16r83FD 16r5D45 16r83D6 16r5D46 16r841C 16r5D47 16r8438 16r5D48 16r8411 16r5D49 16r8406 16r5D4A 16r83D4 16r5D4B 16r83DF 16r5D4C 16r840F 16r5D4D 16r8403 16r5D4E 16r83F8 16r5D4F 16r83F9 16r5D50 16r83EA 16r5D51 16r83C5 16r5D52 16r83C0 16r5D53 16r8426 16r5D54 16r83F0 16r5D55 16r83E1 16r5D56 16r845C 16r5D57 16r8451 16r5D58 16r845A 16r5D59 16r8459 16r5D5A 16r8473 16r5D5B 16r8487 16r5D5C 16r8488 16r5D5D 16r847A 16r5D5E 16r8489 16r5D5F 16r8478 16r5D60 16r843C 16r5D61 16r8446 16r5D62 16r8469 16r5D63 16r8476 16r5D64 16r848C 16r5D65 16r848E 16r5D66 16r8431 16r5D67 16r846D 16r5D68 16r84C1 16r5D69 16r84CD 16r5D6A 16r84D0 16r5D6B 16r84E6 16r5D6C 16r84BD 16r5D6D 16r84D3 16r5D6E 16r84CA 16r5D6F 16r84BF 16r5D70 16r84BA 16r5D71 16r84E0 16r5D72 16r84A1 16r5D73 16r84B9 16r5D74 16r84B4 16r5D75 16r8497 16r5D76 16r84E5 16r5D77 16r84E3 16r5D78 16r850C 16r5D79 16r750D 16r5D7A 16r8538 16r5D7B 16r84F0 16r5D7C 16r8539 16r5D7D 16r851F 16r5D7E 16r853A 16r5E21 16r8556 16r5E22 16r853B 16r5E23 16r84FF 16r5E24 16r84FC 16r5E25 16r8559 16r5E26 16r8548 16r5E27 16r8568 16r5E28 16r8564 16r5E29 16r855E 16r5E2A 16r857A 16r5E2B 16r77A2 16r5E2C 16r8543 16r5E2D 16r8572 16r5E2E 16r857B 16r5E2F 16r85A4 16r5E30 16r85A8 16r5E31 16r8587 16r5E32 16r858F 16r5E33 16r8579 16r5E34 16r85AE 16r5E35 16r859C 16r5E36 16r8585 16r5E37 16r85B9 16r5E38 16r85B7 16r5E39 16r85B0 16r5E3A 16r85D3 16r5E3B 16r85C1 16r5E3C 16r85DC 16r5E3D 16r85FF 16r5E3E 16r8627 16r5E3F 16r8605 16r5E40 16r8629 16r5E41 16r8616 16r5E42 16r863C 16r5E43 16r5EFE 16r5E44 16r5F08 16r5E45 16r593C 16r5E46 16r5941 16r5E47 16r8037 16r5E48 16r5955 16r5E49 16r595A 16r5E4A 16r5958 16r5E4B 16r530F 16r5E4C 16r5C22 16r5E4D 16r5C25 16r5E4E 16r5C2C 16r5E4F 16r5C34 16r5E50 16r624C 16r5E51 16r626A 16r5E52 16r629F 16r5E53 16r62BB 16r5E54 16r62CA 16r5E55 16r62DA 16r5E56 16r62D7 16r5E57 16r62EE 16r5E58 16r6322 16r5E59 16r62F6 16r5E5A 16r6339 16r5E5B 16r634B 16r5E5C 16r6343 16r5E5D 16r63AD 16r5E5E 16r63F6 16r5E5F 16r6371 16r5E60 16r637A 16r5E61 16r638E 16r5E62 16r63B4 16r5E63 16r636D 16r5E64 16r63AC 16r5E65 16r638A 16r5E66 16r6369 16r5E67 16r63AE 16r5E68 16r63BC 16r5E69 16r63F2 16r5E6A 16r63F8 16r5E6B 16r63E0 16r5E6C 16r63FF 16r5E6D 16r63C4 16r5E6E 16r63DE 16r5E6F 16r63CE 16r5E70 16r6452 16r5E71 16r63C6 16r5E72 16r63BE 16r5E73 16r6445 16r5E74 16r6441 16r5E75 16r640B 16r5E76 16r641B 16r5E77 16r6420 16r5E78 16r640C 16r5E79 16r6426 16r5E7A 16r6421 16r5E7B 16r645E 16r5E7C 16r6484 16r5E7D 16r646D 16r5E7E 16r6496 16r5F21 16r647A 16r5F22 16r64B7 16r5F23 16r64B8 16r5F24 16r6499 16r5F25 16r64BA 16r5F26 16r64C0 16r5F27 16r64D0 16r5F28 16r64D7 16r5F29 16r64E4 16r5F2A 16r64E2 16r5F2B 16r6509 16r5F2C 16r6525 16r5F2D 16r652E 16r5F2E 16r5F0B 16r5F2F 16r5FD2 16r5F30 16r7519 16r5F31 16r5F11 16r5F32 16r535F 16r5F33 16r53F1 16r5F34 16r53FD 16r5F35 16r53E9 16r5F36 16r53E8 16r5F37 16r53FB 16r5F38 16r5412 16r5F39 16r5416 16r5F3A 16r5406 16r5F3B 16r544B 16r5F3C 16r5452 16r5F3D 16r5453 16r5F3E 16r5454 16r5F3F 16r5456 16r5F40 16r5443 16r5F41 16r5421 16r5F42 16r5457 16r5F43 16r5459 16r5F44 16r5423 16r5F45 16r5432 16r5F46 16r5482 16r5F47 16r5494 16r5F48 16r5477 16r5F49 16r5471 16r5F4A 16r5464 16r5F4B 16r549A 16r5F4C 16r549B 16r5F4D 16r5484 16r5F4E 16r5476 16r5F4F 16r5466 16r5F50 16r549D 16r5F51 16r54D0 16r5F52 16r54AD 16r5F53 16r54C2 16r5F54 16r54B4 16r5F55 16r54D2 16r5F56 16r54A7 16r5F57 16r54A6 16r5F58 16r54D3 16r5F59 16r54D4 16r5F5A 16r5472 16r5F5B 16r54A3 16r5F5C 16r54D5 16r5F5D 16r54BB 16r5F5E 16r54BF 16r5F5F 16r54CC 16r5F60 16r54D9 16r5F61 16r54DA 16r5F62 16r54DC 16r5F63 16r54A9 16r5F64 16r54AA 16r5F65 16r54A4 16r5F66 16r54DD 16r5F67 16r54CF 16r5F68 16r54DE 16r5F69 16r551B 16r5F6A 16r54E7 16r5F6B 16r5520 16r5F6C 16r54FD 16r5F6D 16r5514 16r5F6E 16r54F3 16r5F6F 16r5522 16r5F70 16r5523 16r5F71 16r550F 16r5F72 16r5511 16r5F73 16r5527 16r5F74 16r552A 16r5F75 16r5567 16r5F76 16r558F 16r5F77 16r55B5 16r5F78 16r5549 16r5F79 16r556D 16r5F7A 16r5541 16r5F7B 16r5555 16r5F7C 16r553F 16r5F7D 16r5550 16r5F7E 16r553C 16r6021 16r5537 16r6022 16r5556 16r6023 16r5575 16r6024 16r5576 16r6025 16r5577 16r6026 16r5533 16r6027 16r5530 16r6028 16r555C 16r6029 16r558B 16r602A 16r55D2 16r602B 16r5583 16r602C 16r55B1 16r602D 16r55B9 16r602E 16r5588 16r602F 16r5581 16r6030 16r559F 16r6031 16r557E 16r6032 16r55D6 16r6033 16r5591 16r6034 16r557B 16r6035 16r55DF 16r6036 16r55BD 16r6037 16r55BE 16r6038 16r5594 16r6039 16r5599 16r603A 16r55EA 16r603B 16r55F7 16r603C 16r55C9 16r603D 16r561F 16r603E 16r55D1 16r603F 16r55EB 16r6040 16r55EC 16r6041 16r55D4 16r6042 16r55E6 16r6043 16r55DD 16r6044 16r55C4 16r6045 16r55EF 16r6046 16r55E5 16r6047 16r55F2 16r6048 16r55F3 16r6049 16r55CC 16r604A 16r55CD 16r604B 16r55E8 16r604C 16r55F5 16r604D 16r55E4 16r604E 16r8F94 16r604F 16r561E 16r6050 16r5608 16r6051 16r560C 16r6052 16r5601 16r6053 16r5624 16r6054 16r5623 16r6055 16r55FE 16r6056 16r5600 16r6057 16r5627 16r6058 16r562D 16r6059 16r5658 16r605A 16r5639 16r605B 16r5657 16r605C 16r562C 16r605D 16r564D 16r605E 16r5662 16r605F 16r5659 16r6060 16r565C 16r6061 16r564C 16r6062 16r5654 16r6063 16r5686 16r6064 16r5664 16r6065 16r5671 16r6066 16r566B 16r6067 16r567B 16r6068 16r567C 16r6069 16r5685 16r606A 16r5693 16r606B 16r56AF 16r606C 16r56D4 16r606D 16r56D7 16r606E 16r56DD 16r606F 16r56E1 16r6070 16r56F5 16r6071 16r56EB 16r6072 16r56F9 16r6073 16r56FF 16r6074 16r5704 16r6075 16r570A 16r6076 16r5709 16r6077 16r571C 16r6078 16r5E0F 16r6079 16r5E19 16r607A 16r5E14 16r607B 16r5E11 16r607C 16r5E31 16r607D 16r5E3B 16r607E 16r5E3C 16r6121 16r5E37 16r6122 16r5E44 16r6123 16r5E54 16r6124 16r5E5B 16r6125 16r5E5E 16r6126 16r5E61 16r6127 16r5C8C 16r6128 16r5C7A 16r6129 16r5C8D 16r612A 16r5C90 16r612B 16r5C96 16r612C 16r5C88 16r612D 16r5C98 16r612E 16r5C99 16r612F 16r5C91 16r6130 16r5C9A 16r6131 16r5C9C 16r6132 16r5CB5 16r6133 16r5CA2 16r6134 16r5CBD 16r6135 16r5CAC 16r6136 16r5CAB 16r6137 16r5CB1 16r6138 16r5CA3 16r6139 16r5CC1 16r613A 16r5CB7 16r613B 16r5CC4 16r613C 16r5CD2 16r613D 16r5CE4 16r613E 16r5CCB 16r613F 16r5CE5 16r6140 16r5D02 16r6141 16r5D03 16r6142 16r5D27 16r6143 16r5D26 16r6144 16r5D2E 16r6145 16r5D24 16r6146 16r5D1E 16r6147 16r5D06 16r6148 16r5D1B 16r6149 16r5D58 16r614A 16r5D3E 16r614B 16r5D34 16r614C 16r5D3D 16r614D 16r5D6C 16r614E 16r5D5B 16r614F 16r5D6F 16r6150 16r5D5D 16r6151 16r5D6B 16r6152 16r5D4B 16r6153 16r5D4A 16r6154 16r5D69 16r6155 16r5D74 16r6156 16r5D82 16r6157 16r5D99 16r6158 16r5D9D 16r6159 16r8C73 16r615A 16r5DB7 16r615B 16r5DC5 16r615C 16r5F73 16r615D 16r5F77 16r615E 16r5F82 16r615F 16r5F87 16r6160 16r5F89 16r6161 16r5F8C 16r6162 16r5F95 16r6163 16r5F99 16r6164 16r5F9C 16r6165 16r5FA8 16r6166 16r5FAD 16r6167 16r5FB5 16r6168 16r5FBC 16r6169 16r8862 16r616A 16r5F61 16r616B 16r72AD 16r616C 16r72B0 16r616D 16r72B4 16r616E 16r72B7 16r616F 16r72B8 16r6170 16r72C3 16r6171 16r72C1 16r6172 16r72CE 16r6173 16r72CD 16r6174 16r72D2 16r6175 16r72E8 16r6176 16r72EF 16r6177 16r72E9 16r6178 16r72F2 16r6179 16r72F4 16r617A 16r72F7 16r617B 16r7301 16r617C 16r72F3 16r617D 16r7303 16r617E 16r72FA 16r6221 16r72FB 16r6222 16r7317 16r6223 16r7313 16r6224 16r7321 16r6225 16r730A 16r6226 16r731E 16r6227 16r731D 16r6228 16r7315 16r6229 16r7322 16r622A 16r7339 16r622B 16r7325 16r622C 16r732C 16r622D 16r7338 16r622E 16r7331 16r622F 16r7350 16r6230 16r734D 16r6231 16r7357 16r6232 16r7360 16r6233 16r736C 16r6234 16r736F 16r6235 16r737E 16r6236 16r821B 16r6237 16r5925 16r6238 16r98E7 16r6239 16r5924 16r623A 16r5902 16r623B 16r9963 16r623C 16r9967 16r623D 16r9968 16r623E 16r9969 16r623F 16r996A 16r6240 16r996B 16r6241 16r996C 16r6242 16r9974 16r6243 16r9977 16r6244 16r997D 16r6245 16r9980 16r6246 16r9984 16r6247 16r9987 16r6248 16r998A 16r6249 16r998D 16r624A 16r9990 16r624B 16r9991 16r624C 16r9993 16r624D 16r9994 16r624E 16r9995 16r624F 16r5E80 16r6250 16r5E91 16r6251 16r5E8B 16r6252 16r5E96 16r6253 16r5EA5 16r6254 16r5EA0 16r6255 16r5EB9 16r6256 16r5EB5 16r6257 16r5EBE 16r6258 16r5EB3 16r6259 16r8D53 16r625A 16r5ED2 16r625B 16r5ED1 16r625C 16r5EDB 16r625D 16r5EE8 16r625E 16r5EEA 16r625F 16r81BA 16r6260 16r5FC4 16r6261 16r5FC9 16r6262 16r5FD6 16r6263 16r5FCF 16r6264 16r6003 16r6265 16r5FEE 16r6266 16r6004 16r6267 16r5FE1 16r6268 16r5FE4 16r6269 16r5FFE 16r626A 16r6005 16r626B 16r6006 16r626C 16r5FEA 16r626D 16r5FED 16r626E 16r5FF8 16r626F 16r6019 16r6270 16r6035 16r6271 16r6026 16r6272 16r601B 16r6273 16r600F 16r6274 16r600D 16r6275 16r6029 16r6276 16r602B 16r6277 16r600A 16r6278 16r603F 16r6279 16r6021 16r627A 16r6078 16r627B 16r6079 16r627C 16r607B 16r627D 16r607A 16r627E 16r6042 16r6321 16r606A 16r6322 16r607D 16r6323 16r6096 16r6324 16r609A 16r6325 16r60AD 16r6326 16r609D 16r6327 16r6083 16r6328 16r6092 16r6329 16r608C 16r632A 16r609B 16r632B 16r60EC 16r632C 16r60BB 16r632D 16r60B1 16r632E 16r60DD 16r632F 16r60D8 16r6330 16r60C6 16r6331 16r60DA 16r6332 16r60B4 16r6333 16r6120 16r6334 16r6126 16r6335 16r6115 16r6336 16r6123 16r6337 16r60F4 16r6338 16r6100 16r6339 16r610E 16r633A 16r612B 16r633B 16r614A 16r633C 16r6175 16r633D 16r61AC 16r633E 16r6194 16r633F 16r61A7 16r6340 16r61B7 16r6341 16r61D4 16r6342 16r61F5 16r6343 16r5FDD 16r6344 16r96B3 16r6345 16r95E9 16r6346 16r95EB 16r6347 16r95F1 16r6348 16r95F3 16r6349 16r95F5 16r634A 16r95F6 16r634B 16r95FC 16r634C 16r95FE 16r634D 16r9603 16r634E 16r9604 16r634F 16r9606 16r6350 16r9608 16r6351 16r960A 16r6352 16r960B 16r6353 16r960C 16r6354 16r960D 16r6355 16r960F 16r6356 16r9612 16r6357 16r9615 16r6358 16r9616 16r6359 16r9617 16r635A 16r9619 16r635B 16r961A 16r635C 16r4E2C 16r635D 16r723F 16r635E 16r6215 16r635F 16r6C35 16r6360 16r6C54 16r6361 16r6C5C 16r6362 16r6C4A 16r6363 16r6CA3 16r6364 16r6C85 16r6365 16r6C90 16r6366 16r6C94 16r6367 16r6C8C 16r6368 16r6C68 16r6369 16r6C69 16r636A 16r6C74 16r636B 16r6C76 16r636C 16r6C86 16r636D 16r6CA9 16r636E 16r6CD0 16r636F 16r6CD4 16r6370 16r6CAD 16r6371 16r6CF7 16r6372 16r6CF8 16r6373 16r6CF1 16r6374 16r6CD7 16r6375 16r6CB2 16r6376 16r6CE0 16r6377 16r6CD6 16r6378 16r6CFA 16r6379 16r6CEB 16r637A 16r6CEE 16r637B 16r6CB1 16r637C 16r6CD3 16r637D 16r6CEF 16r637E 16r6CFE 16r6421 16r6D39 16r6422 16r6D27 16r6423 16r6D0C 16r6424 16r6D43 16r6425 16r6D48 16r6426 16r6D07 16r6427 16r6D04 16r6428 16r6D19 16r6429 16r6D0E 16r642A 16r6D2B 16r642B 16r6D4D 16r642C 16r6D2E 16r642D 16r6D35 16r642E 16r6D1A 16r642F 16r6D4F 16r6430 16r6D52 16r6431 16r6D54 16r6432 16r6D33 16r6433 16r6D91 16r6434 16r6D6F 16r6435 16r6D9E 16r6436 16r6DA0 16r6437 16r6D5E 16r6438 16r6D93 16r6439 16r6D94 16r643A 16r6D5C 16r643B 16r6D60 16r643C 16r6D7C 16r643D 16r6D63 16r643E 16r6E1A 16r643F 16r6DC7 16r6440 16r6DC5 16r6441 16r6DDE 16r6442 16r6E0E 16r6443 16r6DBF 16r6444 16r6DE0 16r6445 16r6E11 16r6446 16r6DE6 16r6447 16r6DDD 16r6448 16r6DD9 16r6449 16r6E16 16r644A 16r6DAB 16r644B 16r6E0C 16r644C 16r6DAE 16r644D 16r6E2B 16r644E 16r6E6E 16r644F 16r6E4E 16r6450 16r6E6B 16r6451 16r6EB2 16r6452 16r6E5F 16r6453 16r6E86 16r6454 16r6E53 16r6455 16r6E54 16r6456 16r6E32 16r6457 16r6E25 16r6458 16r6E44 16r6459 16r6EDF 16r645A 16r6EB1 16r645B 16r6E98 16r645C 16r6EE0 16r645D 16r6F2D 16r645E 16r6EE2 16r645F 16r6EA5 16r6460 16r6EA7 16r6461 16r6EBD 16r6462 16r6EBB 16r6463 16r6EB7 16r6464 16r6ED7 16r6465 16r6EB4 16r6466 16r6ECF 16r6467 16r6E8F 16r6468 16r6EC2 16r6469 16r6E9F 16r646A 16r6F62 16r646B 16r6F46 16r646C 16r6F47 16r646D 16r6F24 16r646E 16r6F15 16r646F 16r6EF9 16r6470 16r6F2F 16r6471 16r6F36 16r6472 16r6F4B 16r6473 16r6F74 16r6474 16r6F2A 16r6475 16r6F09 16r6476 16r6F29 16r6477 16r6F89 16r6478 16r6F8D 16r6479 16r6F8C 16r647A 16r6F78 16r647B 16r6F72 16r647C 16r6F7C 16r647D 16r6F7A 16r647E 16r6FD1 16r6521 16r6FC9 16r6522 16r6FA7 16r6523 16r6FB9 16r6524 16r6FB6 16r6525 16r6FC2 16r6526 16r6FE1 16r6527 16r6FEE 16r6528 16r6FDE 16r6529 16r6FE0 16r652A 16r6FEF 16r652B 16r701A 16r652C 16r7023 16r652D 16r701B 16r652E 16r7039 16r652F 16r7035 16r6530 16r704F 16r6531 16r705E 16r6532 16r5B80 16r6533 16r5B84 16r6534 16r5B95 16r6535 16r5B93 16r6536 16r5BA5 16r6537 16r5BB8 16r6538 16r752F 16r6539 16r9A9E 16r653A 16r6434 16r653B 16r5BE4 16r653C 16r5BEE 16r653D 16r8930 16r653E 16r5BF0 16r653F 16r8E47 16r6540 16r8B07 16r6541 16r8FB6 16r6542 16r8FD3 16r6543 16r8FD5 16r6544 16r8FE5 16r6545 16r8FEE 16r6546 16r8FE4 16r6547 16r8FE9 16r6548 16r8FE6 16r6549 16r8FF3 16r654A 16r8FE8 16r654B 16r9005 16r654C 16r9004 16r654D 16r900B 16r654E 16r9026 16r654F 16r9011 16r6550 16r900D 16r6551 16r9016 16r6552 16r9021 16r6553 16r9035 16r6554 16r9036 16r6555 16r902D 16r6556 16r902F 16r6557 16r9044 16r6558 16r9051 16r6559 16r9052 16r655A 16r9050 16r655B 16r9068 16r655C 16r9058 16r655D 16r9062 16r655E 16r905B 16r655F 16r66B9 16r6560 16r9074 16r6561 16r907D 16r6562 16r9082 16r6563 16r9088 16r6564 16r9083 16r6565 16r908B 16r6566 16r5F50 16r6567 16r5F57 16r6568 16r5F56 16r6569 16r5F58 16r656A 16r5C3B 16r656B 16r54AB 16r656C 16r5C50 16r656D 16r5C59 16r656E 16r5B71 16r656F 16r5C63 16r6570 16r5C66 16r6571 16r7FBC 16r6572 16r5F2A 16r6573 16r5F29 16r6574 16r5F2D 16r6575 16r8274 16r6576 16r5F3C 16r6577 16r9B3B 16r6578 16r5C6E 16r6579 16r5981 16r657A 16r5983 16r657B 16r598D 16r657C 16r59A9 16r657D 16r59AA 16r657E 16r59A3 16r6621 16r5997 16r6622 16r59CA 16r6623 16r59AB 16r6624 16r599E 16r6625 16r59A4 16r6626 16r59D2 16r6627 16r59B2 16r6628 16r59AF 16r6629 16r59D7 16r662A 16r59BE 16r662B 16r5A05 16r662C 16r5A06 16r662D 16r59DD 16r662E 16r5A08 16r662F 16r59E3 16r6630 16r59D8 16r6631 16r59F9 16r6632 16r5A0C 16r6633 16r5A09 16r6634 16r5A32 16r6635 16r5A34 16r6636 16r5A11 16r6637 16r5A23 16r6638 16r5A13 16r6639 16r5A40 16r663A 16r5A67 16r663B 16r5A4A 16r663C 16r5A55 16r663D 16r5A3C 16r663E 16r5A62 16r663F 16r5A75 16r6640 16r80EC 16r6641 16r5AAA 16r6642 16r5A9B 16r6643 16r5A77 16r6644 16r5A7A 16r6645 16r5ABE 16r6646 16r5AEB 16r6647 16r5AB2 16r6648 16r5AD2 16r6649 16r5AD4 16r664A 16r5AB8 16r664B 16r5AE0 16r664C 16r5AE3 16r664D 16r5AF1 16r664E 16r5AD6 16r664F 16r5AE6 16r6650 16r5AD8 16r6651 16r5ADC 16r6652 16r5B09 16r6653 16r5B17 16r6654 16r5B16 16r6655 16r5B32 16r6656 16r5B37 16r6657 16r5B40 16r6658 16r5C15 16r6659 16r5C1C 16r665A 16r5B5A 16r665B 16r5B65 16r665C 16r5B73 16r665D 16r5B51 16r665E 16r5B53 16r665F 16r5B62 16r6660 16r9A75 16r6661 16r9A77 16r6662 16r9A78 16r6663 16r9A7A 16r6664 16r9A7F 16r6665 16r9A7D 16r6666 16r9A80 16r6667 16r9A81 16r6668 16r9A85 16r6669 16r9A88 16r666A 16r9A8A 16r666B 16r9A90 16r666C 16r9A92 16r666D 16r9A93 16r666E 16r9A96 16r666F 16r9A98 16r6670 16r9A9B 16r6671 16r9A9C 16r6672 16r9A9D 16r6673 16r9A9F 16r6674 16r9AA0 16r6675 16r9AA2 16r6676 16r9AA3 16r6677 16r9AA5 16r6678 16r9AA7 16r6679 16r7E9F 16r667A 16r7EA1 16r667B 16r7EA3 16r667C 16r7EA5 16r667D 16r7EA8 16r667E 16r7EA9 16r6721 16r7EAD 16r6722 16r7EB0 16r6723 16r7EBE 16r6724 16r7EC0 16r6725 16r7EC1 16r6726 16r7EC2 16r6727 16r7EC9 16r6728 16r7ECB 16r6729 16r7ECC 16r672A 16r7ED0 16r672B 16r7ED4 16r672C 16r7ED7 16r672D 16r7EDB 16r672E 16r7EE0 16r672F 16r7EE1 16r6730 16r7EE8 16r6731 16r7EEB 16r6732 16r7EEE 16r6733 16r7EEF 16r6734 16r7EF1 16r6735 16r7EF2 16r6736 16r7F0D 16r6737 16r7EF6 16r6738 16r7EFA 16r6739 16r7EFB 16r673A 16r7EFE 16r673B 16r7F01 16r673C 16r7F02 16r673D 16r7F03 16r673E 16r7F07 16r673F 16r7F08 16r6740 16r7F0B 16r6741 16r7F0C 16r6742 16r7F0F 16r6743 16r7F11 16r6744 16r7F12 16r6745 16r7F17 16r6746 16r7F19 16r6747 16r7F1C 16r6748 16r7F1B 16r6749 16r7F1F 16r674A 16r7F21 16r674B 16r7F22 16r674C 16r7F23 16r674D 16r7F24 16r674E 16r7F25 16r674F 16r7F26 16r6750 16r7F27 16r6751 16r7F2A 16r6752 16r7F2B 16r6753 16r7F2C 16r6754 16r7F2D 16r6755 16r7F2F 16r6756 16r7F30 16r6757 16r7F31 16r6758 16r7F32 16r6759 16r7F33 16r675A 16r7F35 16r675B 16r5E7A 16r675C 16r757F 16r675D 16r5DDB 16r675E 16r753E 16r675F 16r9095 16r6760 16r738E 16r6761 16r7391 16r6762 16r73AE 16r6763 16r73A2 16r6764 16r739F 16r6765 16r73CF 16r6766 16r73C2 16r6767 16r73D1 16r6768 16r73B7 16r6769 16r73B3 16r676A 16r73C0 16r676B 16r73C9 16r676C 16r73C8 16r676D 16r73E5 16r676E 16r73D9 16r676F 16r987C 16r6770 16r740A 16r6771 16r73E9 16r6772 16r73E7 16r6773 16r73DE 16r6774 16r73BA 16r6775 16r73F2 16r6776 16r740F 16r6777 16r742A 16r6778 16r745B 16r6779 16r7426 16r677A 16r7425 16r677B 16r7428 16r677C 16r7430 16r677D 16r742E 16r677E 16r742C 16r6821 16r741B 16r6822 16r741A 16r6823 16r7441 16r6824 16r745C 16r6825 16r7457 16r6826 16r7455 16r6827 16r7459 16r6828 16r7477 16r6829 16r746D 16r682A 16r747E 16r682B 16r749C 16r682C 16r748E 16r682D 16r7480 16r682E 16r7481 16r682F 16r7487 16r6830 16r748B 16r6831 16r749E 16r6832 16r74A8 16r6833 16r74A9 16r6834 16r7490 16r6835 16r74A7 16r6836 16r74D2 16r6837 16r74BA 16r6838 16r97EA 16r6839 16r97EB 16r683A 16r97EC 16r683B 16r674C 16r683C 16r6753 16r683D 16r675E 16r683E 16r6748 16r683F 16r6769 16r6840 16r67A5 16r6841 16r6787 16r6842 16r676A 16r6843 16r6773 16r6844 16r6798 16r6845 16r67A7 16r6846 16r6775 16r6847 16r67A8 16r6848 16r679E 16r6849 16r67AD 16r684A 16r678B 16r684B 16r6777 16r684C 16r677C 16r684D 16r67F0 16r684E 16r6809 16r684F 16r67D8 16r6850 16r680A 16r6851 16r67E9 16r6852 16r67B0 16r6853 16r680C 16r6854 16r67D9 16r6855 16r67B5 16r6856 16r67DA 16r6857 16r67B3 16r6858 16r67DD 16r6859 16r6800 16r685A 16r67C3 16r685B 16r67B8 16r685C 16r67E2 16r685D 16r680E 16r685E 16r67C1 16r685F 16r67FD 16r6860 16r6832 16r6861 16r6833 16r6862 16r6860 16r6863 16r6861 16r6864 16r684E 16r6865 16r6862 16r6866 16r6844 16r6867 16r6864 16r6868 16r6883 16r6869 16r681D 16r686A 16r6855 16r686B 16r6866 16r686C 16r6841 16r686D 16r6867 16r686E 16r6840 16r686F 16r683E 16r6870 16r684A 16r6871 16r6849 16r6872 16r6829 16r6873 16r68B5 16r6874 16r688F 16r6875 16r6874 16r6876 16r6877 16r6877 16r6893 16r6878 16r686B 16r6879 16r68C2 16r687A 16r696E 16r687B 16r68FC 16r687C 16r691F 16r687D 16r6920 16r687E 16r68F9 16r6921 16r6924 16r6922 16r68F0 16r6923 16r690B 16r6924 16r6901 16r6925 16r6957 16r6926 16r68E3 16r6927 16r6910 16r6928 16r6971 16r6929 16r6939 16r692A 16r6960 16r692B 16r6942 16r692C 16r695D 16r692D 16r6984 16r692E 16r696B 16r692F 16r6980 16r6930 16r6998 16r6931 16r6978 16r6932 16r6934 16r6933 16r69CC 16r6934 16r6987 16r6935 16r6988 16r6936 16r69CE 16r6937 16r6989 16r6938 16r6966 16r6939 16r6963 16r693A 16r6979 16r693B 16r699B 16r693C 16r69A7 16r693D 16r69BB 16r693E 16r69AB 16r693F 16r69AD 16r6940 16r69D4 16r6941 16r69B1 16r6942 16r69C1 16r6943 16r69CA 16r6944 16r69DF 16r6945 16r6995 16r6946 16r69E0 16r6947 16r698D 16r6948 16r69FF 16r6949 16r6A2F 16r694A 16r69ED 16r694B 16r6A17 16r694C 16r6A18 16r694D 16r6A65 16r694E 16r69F2 16r694F 16r6A44 16r6950 16r6A3E 16r6951 16r6AA0 16r6952 16r6A50 16r6953 16r6A5B 16r6954 16r6A35 16r6955 16r6A8E 16r6956 16r6A79 16r6957 16r6A3D 16r6958 16r6A28 16r6959 16r6A58 16r695A 16r6A7C 16r695B 16r6A91 16r695C 16r6A90 16r695D 16r6AA9 16r695E 16r6A97 16r695F 16r6AAB 16r6960 16r7337 16r6961 16r7352 16r6962 16r6B81 16r6963 16r6B82 16r6964 16r6B87 16r6965 16r6B84 16r6966 16r6B92 16r6967 16r6B93 16r6968 16r6B8D 16r6969 16r6B9A 16r696A 16r6B9B 16r696B 16r6BA1 16r696C 16r6BAA 16r696D 16r8F6B 16r696E 16r8F6D 16r696F 16r8F71 16r6970 16r8F72 16r6971 16r8F73 16r6972 16r8F75 16r6973 16r8F76 16r6974 16r8F78 16r6975 16r8F77 16r6976 16r8F79 16r6977 16r8F7A 16r6978 16r8F7C 16r6979 16r8F7E 16r697A 16r8F81 16r697B 16r8F82 16r697C 16r8F84 16r697D 16r8F87 16r697E 16r8F8B 16r6A21 16r8F8D 16r6A22 16r8F8E 16r6A23 16r8F8F 16r6A24 16r8F98 16r6A25 16r8F9A 16r6A26 16r8ECE 16r6A27 16r620B 16r6A28 16r6217 16r6A29 16r621B 16r6A2A 16r621F 16r6A2B 16r6222 16r6A2C 16r6221 16r6A2D 16r6225 16r6A2E 16r6224 16r6A2F 16r622C 16r6A30 16r81E7 16r6A31 16r74EF 16r6A32 16r74F4 16r6A33 16r74FF 16r6A34 16r750F 16r6A35 16r7511 16r6A36 16r7513 16r6A37 16r6534 16r6A38 16r65EE 16r6A39 16r65EF 16r6A3A 16r65F0 16r6A3B 16r660A 16r6A3C 16r6619 16r6A3D 16r6772 16r6A3E 16r6603 16r6A3F 16r6615 16r6A40 16r6600 16r6A41 16r7085 16r6A42 16r66F7 16r6A43 16r661D 16r6A44 16r6634 16r6A45 16r6631 16r6A46 16r6636 16r6A47 16r6635 16r6A48 16r8006 16r6A49 16r665F 16r6A4A 16r6654 16r6A4B 16r6641 16r6A4C 16r664F 16r6A4D 16r6656 16r6A4E 16r6661 16r6A4F 16r6657 16r6A50 16r6677 16r6A51 16r6684 16r6A52 16r668C 16r6A53 16r66A7 16r6A54 16r669D 16r6A55 16r66BE 16r6A56 16r66DB 16r6A57 16r66DC 16r6A58 16r66E6 16r6A59 16r66E9 16r6A5A 16r8D32 16r6A5B 16r8D33 16r6A5C 16r8D36 16r6A5D 16r8D3B 16r6A5E 16r8D3D 16r6A5F 16r8D40 16r6A60 16r8D45 16r6A61 16r8D46 16r6A62 16r8D48 16r6A63 16r8D49 16r6A64 16r8D47 16r6A65 16r8D4D 16r6A66 16r8D55 16r6A67 16r8D59 16r6A68 16r89C7 16r6A69 16r89CA 16r6A6A 16r89CB 16r6A6B 16r89CC 16r6A6C 16r89CE 16r6A6D 16r89CF 16r6A6E 16r89D0 16r6A6F 16r89D1 16r6A70 16r726E 16r6A71 16r729F 16r6A72 16r725D 16r6A73 16r7266 16r6A74 16r726F 16r6A75 16r727E 16r6A76 16r727F 16r6A77 16r7284 16r6A78 16r728B 16r6A79 16r728D 16r6A7A 16r728F 16r6A7B 16r7292 16r6A7C 16r6308 16r6A7D 16r6332 16r6A7E 16r63B0 16r6B21 16r643F 16r6B22 16r64D8 16r6B23 16r8004 16r6B24 16r6BEA 16r6B25 16r6BF3 16r6B26 16r6BFD 16r6B27 16r6BF5 16r6B28 16r6BF9 16r6B29 16r6C05 16r6B2A 16r6C07 16r6B2B 16r6C06 16r6B2C 16r6C0D 16r6B2D 16r6C15 16r6B2E 16r6C18 16r6B2F 16r6C19 16r6B30 16r6C1A 16r6B31 16r6C21 16r6B32 16r6C29 16r6B33 16r6C24 16r6B34 16r6C2A 16r6B35 16r6C32 16r6B36 16r6535 16r6B37 16r6555 16r6B38 16r656B 16r6B39 16r724D 16r6B3A 16r7252 16r6B3B 16r7256 16r6B3C 16r7230 16r6B3D 16r8662 16r6B3E 16r5216 16r6B3F 16r809F 16r6B40 16r809C 16r6B41 16r8093 16r6B42 16r80BC 16r6B43 16r670A 16r6B44 16r80BD 16r6B45 16r80B1 16r6B46 16r80AB 16r6B47 16r80AD 16r6B48 16r80B4 16r6B49 16r80B7 16r6B4A 16r80E7 16r6B4B 16r80E8 16r6B4C 16r80E9 16r6B4D 16r80EA 16r6B4E 16r80DB 16r6B4F 16r80C2 16r6B50 16r80C4 16r6B51 16r80D9 16r6B52 16r80CD 16r6B53 16r80D7 16r6B54 16r6710 16r6B55 16r80DD 16r6B56 16r80EB 16r6B57 16r80F1 16r6B58 16r80F4 16r6B59 16r80ED 16r6B5A 16r810D 16r6B5B 16r810E 16r6B5C 16r80F2 16r6B5D 16r80FC 16r6B5E 16r6715 16r6B5F 16r8112 16r6B60 16r8C5A 16r6B61 16r8136 16r6B62 16r811E 16r6B63 16r812C 16r6B64 16r8118 16r6B65 16r8132 16r6B66 16r8148 16r6B67 16r814C 16r6B68 16r8153 16r6B69 16r8174 16r6B6A 16r8159 16r6B6B 16r815A 16r6B6C 16r8171 16r6B6D 16r8160 16r6B6E 16r8169 16r6B6F 16r817C 16r6B70 16r817D 16r6B71 16r816D 16r6B72 16r8167 16r6B73 16r584D 16r6B74 16r5AB5 16r6B75 16r8188 16r6B76 16r8182 16r6B77 16r8191 16r6B78 16r6ED5 16r6B79 16r81A3 16r6B7A 16r81AA 16r6B7B 16r81CC 16r6B7C 16r6726 16r6B7D 16r81CA 16r6B7E 16r81BB 16r6C21 16r81C1 16r6C22 16r81A6 16r6C23 16r6B24 16r6C24 16r6B37 16r6C25 16r6B39 16r6C26 16r6B43 16r6C27 16r6B46 16r6C28 16r6B59 16r6C29 16r98D1 16r6C2A 16r98D2 16r6C2B 16r98D3 16r6C2C 16r98D5 16r6C2D 16r98D9 16r6C2E 16r98DA 16r6C2F 16r6BB3 16r6C30 16r5F40 16r6C31 16r6BC2 16r6C32 16r89F3 16r6C33 16r6590 16r6C34 16r9F51 16r6C35 16r6593 16r6C36 16r65BC 16r6C37 16r65C6 16r6C38 16r65C4 16r6C39 16r65C3 16r6C3A 16r65CC 16r6C3B 16r65CE 16r6C3C 16r65D2 16r6C3D 16r65D6 16r6C3E 16r7080 16r6C3F 16r709C 16r6C40 16r7096 16r6C41 16r709D 16r6C42 16r70BB 16r6C43 16r70C0 16r6C44 16r70B7 16r6C45 16r70AB 16r6C46 16r70B1 16r6C47 16r70E8 16r6C48 16r70CA 16r6C49 16r7110 16r6C4A 16r7113 16r6C4B 16r7116 16r6C4C 16r712F 16r6C4D 16r7131 16r6C4E 16r7173 16r6C4F 16r715C 16r6C50 16r7168 16r6C51 16r7145 16r6C52 16r7172 16r6C53 16r714A 16r6C54 16r7178 16r6C55 16r717A 16r6C56 16r7198 16r6C57 16r71B3 16r6C58 16r71B5 16r6C59 16r71A8 16r6C5A 16r71A0 16r6C5B 16r71E0 16r6C5C 16r71D4 16r6C5D 16r71E7 16r6C5E 16r71F9 16r6C5F 16r721D 16r6C60 16r7228 16r6C61 16r706C 16r6C62 16r7118 16r6C63 16r7166 16r6C64 16r71B9 16r6C65 16r623E 16r6C66 16r623D 16r6C67 16r6243 16r6C68 16r6248 16r6C69 16r6249 16r6C6A 16r793B 16r6C6B 16r7940 16r6C6C 16r7946 16r6C6D 16r7949 16r6C6E 16r795B 16r6C6F 16r795C 16r6C70 16r7953 16r6C71 16r795A 16r6C72 16r7962 16r6C73 16r7957 16r6C74 16r7960 16r6C75 16r796F 16r6C76 16r7967 16r6C77 16r797A 16r6C78 16r7985 16r6C79 16r798A 16r6C7A 16r799A 16r6C7B 16r79A7 16r6C7C 16r79B3 16r6C7D 16r5FD1 16r6C7E 16r5FD0 16r6D21 16r603C 16r6D22 16r605D 16r6D23 16r605A 16r6D24 16r6067 16r6D25 16r6041 16r6D26 16r6059 16r6D27 16r6063 16r6D28 16r60AB 16r6D29 16r6106 16r6D2A 16r610D 16r6D2B 16r615D 16r6D2C 16r61A9 16r6D2D 16r619D 16r6D2E 16r61CB 16r6D2F 16r61D1 16r6D30 16r6206 16r6D31 16r8080 16r6D32 16r807F 16r6D33 16r6C93 16r6D34 16r6CF6 16r6D35 16r6DFC 16r6D36 16r77F6 16r6D37 16r77F8 16r6D38 16r7800 16r6D39 16r7809 16r6D3A 16r7817 16r6D3B 16r7818 16r6D3C 16r7811 16r6D3D 16r65AB 16r6D3E 16r782D 16r6D3F 16r781C 16r6D40 16r781D 16r6D41 16r7839 16r6D42 16r783A 16r6D43 16r783B 16r6D44 16r781F 16r6D45 16r783C 16r6D46 16r7825 16r6D47 16r782C 16r6D48 16r7823 16r6D49 16r7829 16r6D4A 16r784E 16r6D4B 16r786D 16r6D4C 16r7856 16r6D4D 16r7857 16r6D4E 16r7826 16r6D4F 16r7850 16r6D50 16r7847 16r6D51 16r784C 16r6D52 16r786A 16r6D53 16r789B 16r6D54 16r7893 16r6D55 16r789A 16r6D56 16r7887 16r6D57 16r789C 16r6D58 16r78A1 16r6D59 16r78A3 16r6D5A 16r78B2 16r6D5B 16r78B9 16r6D5C 16r78A5 16r6D5D 16r78D4 16r6D5E 16r78D9 16r6D5F 16r78C9 16r6D60 16r78EC 16r6D61 16r78F2 16r6D62 16r7905 16r6D63 16r78F4 16r6D64 16r7913 16r6D65 16r7924 16r6D66 16r791E 16r6D67 16r7934 16r6D68 16r9F9B 16r6D69 16r9EF9 16r6D6A 16r9EFB 16r6D6B 16r9EFC 16r6D6C 16r76F1 16r6D6D 16r7704 16r6D6E 16r770D 16r6D6F 16r76F9 16r6D70 16r7707 16r6D71 16r7708 16r6D72 16r771A 16r6D73 16r7722 16r6D74 16r7719 16r6D75 16r772D 16r6D76 16r7726 16r6D77 16r7735 16r6D78 16r7738 16r6D79 16r7750 16r6D7A 16r7751 16r6D7B 16r7747 16r6D7C 16r7743 16r6D7D 16r775A 16r6D7E 16r7768 16r6E21 16r7762 16r6E22 16r7765 16r6E23 16r777F 16r6E24 16r778D 16r6E25 16r777D 16r6E26 16r7780 16r6E27 16r778C 16r6E28 16r7791 16r6E29 16r779F 16r6E2A 16r77A0 16r6E2B 16r77B0 16r6E2C 16r77B5 16r6E2D 16r77BD 16r6E2E 16r753A 16r6E2F 16r7540 16r6E30 16r754E 16r6E31 16r754B 16r6E32 16r7548 16r6E33 16r755B 16r6E34 16r7572 16r6E35 16r7579 16r6E36 16r7583 16r6E37 16r7F58 16r6E38 16r7F61 16r6E39 16r7F5F 16r6E3A 16r8A48 16r6E3B 16r7F68 16r6E3C 16r7F74 16r6E3D 16r7F71 16r6E3E 16r7F79 16r6E3F 16r7F81 16r6E40 16r7F7E 16r6E41 16r76CD 16r6E42 16r76E5 16r6E43 16r8832 16r6E44 16r9485 16r6E45 16r9486 16r6E46 16r9487 16r6E47 16r948B 16r6E48 16r948A 16r6E49 16r948C 16r6E4A 16r948D 16r6E4B 16r948F 16r6E4C 16r9490 16r6E4D 16r9494 16r6E4E 16r9497 16r6E4F 16r9495 16r6E50 16r949A 16r6E51 16r949B 16r6E52 16r949C 16r6E53 16r94A3 16r6E54 16r94A4 16r6E55 16r94AB 16r6E56 16r94AA 16r6E57 16r94AD 16r6E58 16r94AC 16r6E59 16r94AF 16r6E5A 16r94B0 16r6E5B 16r94B2 16r6E5C 16r94B4 16r6E5D 16r94B6 16r6E5E 16r94B7 16r6E5F 16r94B8 16r6E60 16r94B9 16r6E61 16r94BA 16r6E62 16r94BC 16r6E63 16r94BD 16r6E64 16r94BF 16r6E65 16r94C4 16r6E66 16r94C8 16r6E67 16r94C9 16r6E68 16r94CA 16r6E69 16r94CB 16r6E6A 16r94CC 16r6E6B 16r94CD 16r6E6C 16r94CE 16r6E6D 16r94D0 16r6E6E 16r94D1 16r6E6F 16r94D2 16r6E70 16r94D5 16r6E71 16r94D6 16r6E72 16r94D7 16r6E73 16r94D9 16r6E74 16r94D8 16r6E75 16r94DB 16r6E76 16r94DE 16r6E77 16r94DF 16r6E78 16r94E0 16r6E79 16r94E2 16r6E7A 16r94E4 16r6E7B 16r94E5 16r6E7C 16r94E7 16r6E7D 16r94E8 16r6E7E 16r94EA 16r6F21 16r94E9 16r6F22 16r94EB 16r6F23 16r94EE 16r6F24 16r94EF 16r6F25 16r94F3 16r6F26 16r94F4 16r6F27 16r94F5 16r6F28 16r94F7 16r6F29 16r94F9 16r6F2A 16r94FC 16r6F2B 16r94FD 16r6F2C 16r94FF 16r6F2D 16r9503 16r6F2E 16r9502 16r6F2F 16r9506 16r6F30 16r9507 16r6F31 16r9509 16r6F32 16r950A 16r6F33 16r950D 16r6F34 16r950E 16r6F35 16r950F 16r6F36 16r9512 16r6F37 16r9513 16r6F38 16r9514 16r6F39 16r9515 16r6F3A 16r9516 16r6F3B 16r9518 16r6F3C 16r951B 16r6F3D 16r951D 16r6F3E 16r951E 16r6F3F 16r951F 16r6F40 16r9522 16r6F41 16r952A 16r6F42 16r952B 16r6F43 16r9529 16r6F44 16r952C 16r6F45 16r9531 16r6F46 16r9532 16r6F47 16r9534 16r6F48 16r9536 16r6F49 16r9537 16r6F4A 16r9538 16r6F4B 16r953C 16r6F4C 16r953E 16r6F4D 16r953F 16r6F4E 16r9542 16r6F4F 16r9535 16r6F50 16r9544 16r6F51 16r9545 16r6F52 16r9546 16r6F53 16r9549 16r6F54 16r954C 16r6F55 16r954E 16r6F56 16r954F 16r6F57 16r9552 16r6F58 16r9553 16r6F59 16r9554 16r6F5A 16r9556 16r6F5B 16r9557 16r6F5C 16r9558 16r6F5D 16r9559 16r6F5E 16r955B 16r6F5F 16r955E 16r6F60 16r955F 16r6F61 16r955D 16r6F62 16r9561 16r6F63 16r9562 16r6F64 16r9564 16r6F65 16r9565 16r6F66 16r9566 16r6F67 16r9567 16r6F68 16r9568 16r6F69 16r9569 16r6F6A 16r956A 16r6F6B 16r956B 16r6F6C 16r956C 16r6F6D 16r956F 16r6F6E 16r9571 16r6F6F 16r9572 16r6F70 16r9573 16r6F71 16r953A 16r6F72 16r77E7 16r6F73 16r77EC 16r6F74 16r96C9 16r6F75 16r79D5 16r6F76 16r79ED 16r6F77 16r79E3 16r6F78 16r79EB 16r6F79 16r7A06 16r6F7A 16r5D47 16r6F7B 16r7A03 16r6F7C 16r7A02 16r6F7D 16r7A1E 16r6F7E 16r7A14 16r7021 16r7A39 16r7022 16r7A37 16r7023 16r7A51 16r7024 16r9ECF 16r7025 16r99A5 16r7026 16r7A70 16r7027 16r7688 16r7028 16r768E 16r7029 16r7693 16r702A 16r7699 16r702B 16r76A4 16r702C 16r74DE 16r702D 16r74E0 16r702E 16r752C 16r702F 16r9E20 16r7030 16r9E22 16r7031 16r9E28 16r7032 16r9E29 16r7033 16r9E2A 16r7034 16r9E2B 16r7035 16r9E2C 16r7036 16r9E32 16r7037 16r9E31 16r7038 16r9E36 16r7039 16r9E38 16r703A 16r9E37 16r703B 16r9E39 16r703C 16r9E3A 16r703D 16r9E3E 16r703E 16r9E41 16r703F 16r9E42 16r7040 16r9E44 16r7041 16r9E46 16r7042 16r9E47 16r7043 16r9E48 16r7044 16r9E49 16r7045 16r9E4B 16r7046 16r9E4C 16r7047 16r9E4E 16r7048 16r9E51 16r7049 16r9E55 16r704A 16r9E57 16r704B 16r9E5A 16r704C 16r9E5B 16r704D 16r9E5C 16r704E 16r9E5E 16r704F 16r9E63 16r7050 16r9E66 16r7051 16r9E67 16r7052 16r9E68 16r7053 16r9E69 16r7054 16r9E6A 16r7055 16r9E6B 16r7056 16r9E6C 16r7057 16r9E71 16r7058 16r9E6D 16r7059 16r9E73 16r705A 16r7592 16r705B 16r7594 16r705C 16r7596 16r705D 16r75A0 16r705E 16r759D 16r705F 16r75AC 16r7060 16r75A3 16r7061 16r75B3 16r7062 16r75B4 16r7063 16r75B8 16r7064 16r75C4 16r7065 16r75B1 16r7066 16r75B0 16r7067 16r75C3 16r7068 16r75C2 16r7069 16r75D6 16r706A 16r75CD 16r706B 16r75E3 16r706C 16r75E8 16r706D 16r75E6 16r706E 16r75E4 16r706F 16r75EB 16r7070 16r75E7 16r7071 16r7603 16r7072 16r75F1 16r7073 16r75FC 16r7074 16r75FF 16r7075 16r7610 16r7076 16r7600 16r7077 16r7605 16r7078 16r760C 16r7079 16r7617 16r707A 16r760A 16r707B 16r7625 16r707C 16r7618 16r707D 16r7615 16r707E 16r7619 16r7121 16r761B 16r7122 16r763C 16r7123 16r7622 16r7124 16r7620 16r7125 16r7640 16r7126 16r762D 16r7127 16r7630 16r7128 16r763F 16r7129 16r7635 16r712A 16r7643 16r712B 16r763E 16r712C 16r7633 16r712D 16r764D 16r712E 16r765E 16r712F 16r7654 16r7130 16r765C 16r7131 16r7656 16r7132 16r766B 16r7133 16r766F 16r7134 16r7FCA 16r7135 16r7AE6 16r7136 16r7A78 16r7137 16r7A79 16r7138 16r7A80 16r7139 16r7A86 16r713A 16r7A88 16r713B 16r7A95 16r713C 16r7AA6 16r713D 16r7AA0 16r713E 16r7AAC 16r713F 16r7AA8 16r7140 16r7AAD 16r7141 16r7AB3 16r7142 16r8864 16r7143 16r8869 16r7144 16r8872 16r7145 16r887D 16r7146 16r887F 16r7147 16r8882 16r7148 16r88A2 16r7149 16r88C6 16r714A 16r88B7 16r714B 16r88BC 16r714C 16r88C9 16r714D 16r88E2 16r714E 16r88CE 16r714F 16r88E3 16r7150 16r88E5 16r7151 16r88F1 16r7152 16r891A 16r7153 16r88FC 16r7154 16r88E8 16r7155 16r88FE 16r7156 16r88F0 16r7157 16r8921 16r7158 16r8919 16r7159 16r8913 16r715A 16r891B 16r715B 16r890A 16r715C 16r8934 16r715D 16r892B 16r715E 16r8936 16r715F 16r8941 16r7160 16r8966 16r7161 16r897B 16r7162 16r758B 16r7163 16r80E5 16r7164 16r76B2 16r7165 16r76B4 16r7166 16r77DC 16r7167 16r8012 16r7168 16r8014 16r7169 16r8016 16r716A 16r801C 16r716B 16r8020 16r716C 16r8022 16r716D 16r8025 16r716E 16r8026 16r716F 16r8027 16r7170 16r8029 16r7171 16r8028 16r7172 16r8031 16r7173 16r800B 16r7174 16r8035 16r7175 16r8043 16r7176 16r8046 16r7177 16r804D 16r7178 16r8052 16r7179 16r8069 16r717A 16r8071 16r717B 16r8983 16r717C 16r9878 16r717D 16r9880 16r717E 16r9883 16r7221 16r9889 16r7222 16r988C 16r7223 16r988D 16r7224 16r988F 16r7225 16r9894 16r7226 16r989A 16r7227 16r989B 16r7228 16r989E 16r7229 16r989F 16r722A 16r98A1 16r722B 16r98A2 16r722C 16r98A5 16r722D 16r98A6 16r722E 16r864D 16r722F 16r8654 16r7230 16r866C 16r7231 16r866E 16r7232 16r867F 16r7233 16r867A 16r7234 16r867C 16r7235 16r867B 16r7236 16r86A8 16r7237 16r868D 16r7238 16r868B 16r7239 16r86AC 16r723A 16r869D 16r723B 16r86A7 16r723C 16r86A3 16r723D 16r86AA 16r723E 16r8693 16r723F 16r86A9 16r7240 16r86B6 16r7241 16r86C4 16r7242 16r86B5 16r7243 16r86CE 16r7244 16r86B0 16r7245 16r86BA 16r7246 16r86B1 16r7247 16r86AF 16r7248 16r86C9 16r7249 16r86CF 16r724A 16r86B4 16r724B 16r86E9 16r724C 16r86F1 16r724D 16r86F2 16r724E 16r86ED 16r724F 16r86F3 16r7250 16r86D0 16r7251 16r8713 16r7252 16r86DE 16r7253 16r86F4 16r7254 16r86DF 16r7255 16r86D8 16r7256 16r86D1 16r7257 16r8703 16r7258 16r8707 16r7259 16r86F8 16r725A 16r8708 16r725B 16r870A 16r725C 16r870D 16r725D 16r8709 16r725E 16r8723 16r725F 16r873B 16r7260 16r871E 16r7261 16r8725 16r7262 16r872E 16r7263 16r871A 16r7264 16r873E 16r7265 16r8748 16r7266 16r8734 16r7267 16r8731 16r7268 16r8729 16r7269 16r8737 16r726A 16r873F 16r726B 16r8782 16r726C 16r8722 16r726D 16r877D 16r726E 16r877E 16r726F 16r877B 16r7270 16r8760 16r7271 16r8770 16r7272 16r874C 16r7273 16r876E 16r7274 16r878B 16r7275 16r8753 16r7276 16r8763 16r7277 16r877C 16r7278 16r8764 16r7279 16r8759 16r727A 16r8765 16r727B 16r8793 16r727C 16r87AF 16r727D 16r87A8 16r727E 16r87D2 16r7321 16r87C6 16r7322 16r8788 16r7323 16r8785 16r7324 16r87AD 16r7325 16r8797 16r7326 16r8783 16r7327 16r87AB 16r7328 16r87E5 16r7329 16r87AC 16r732A 16r87B5 16r732B 16r87B3 16r732C 16r87CB 16r732D 16r87D3 16r732E 16r87BD 16r732F 16r87D1 16r7330 16r87C0 16r7331 16r87CA 16r7332 16r87DB 16r7333 16r87EA 16r7334 16r87E0 16r7335 16r87EE 16r7336 16r8816 16r7337 16r8813 16r7338 16r87FE 16r7339 16r880A 16r733A 16r881B 16r733B 16r8821 16r733C 16r8839 16r733D 16r883C 16r733E 16r7F36 16r733F 16r7F42 16r7340 16r7F44 16r7341 16r7F45 16r7342 16r8210 16r7343 16r7AFA 16r7344 16r7AFD 16r7345 16r7B08 16r7346 16r7B03 16r7347 16r7B04 16r7348 16r7B15 16r7349 16r7B0A 16r734A 16r7B2B 16r734B 16r7B0F 16r734C 16r7B47 16r734D 16r7B38 16r734E 16r7B2A 16r734F 16r7B19 16r7350 16r7B2E 16r7351 16r7B31 16r7352 16r7B20 16r7353 16r7B25 16r7354 16r7B24 16r7355 16r7B33 16r7356 16r7B3E 16r7357 16r7B1E 16r7358 16r7B58 16r7359 16r7B5A 16r735A 16r7B45 16r735B 16r7B75 16r735C 16r7B4C 16r735D 16r7B5D 16r735E 16r7B60 16r735F 16r7B6E 16r7360 16r7B7B 16r7361 16r7B62 16r7362 16r7B72 16r7363 16r7B71 16r7364 16r7B90 16r7365 16r7BA6 16r7366 16r7BA7 16r7367 16r7BB8 16r7368 16r7BAC 16r7369 16r7B9D 16r736A 16r7BA8 16r736B 16r7B85 16r736C 16r7BAA 16r736D 16r7B9C 16r736E 16r7BA2 16r736F 16r7BAB 16r7370 16r7BB4 16r7371 16r7BD1 16r7372 16r7BC1 16r7373 16r7BCC 16r7374 16r7BDD 16r7375 16r7BDA 16r7376 16r7BE5 16r7377 16r7BE6 16r7378 16r7BEA 16r7379 16r7C0C 16r737A 16r7BFE 16r737B 16r7BFC 16r737C 16r7C0F 16r737D 16r7C16 16r737E 16r7C0B 16r7421 16r7C1F 16r7422 16r7C2A 16r7423 16r7C26 16r7424 16r7C38 16r7425 16r7C41 16r7426 16r7C40 16r7427 16r81FE 16r7428 16r8201 16r7429 16r8202 16r742A 16r8204 16r742B 16r81EC 16r742C 16r8844 16r742D 16r8221 16r742E 16r8222 16r742F 16r8223 16r7430 16r822D 16r7431 16r822F 16r7432 16r8228 16r7433 16r822B 16r7434 16r8238 16r7435 16r823B 16r7436 16r8233 16r7437 16r8234 16r7438 16r823E 16r7439 16r8244 16r743A 16r8249 16r743B 16r824B 16r743C 16r824F 16r743D 16r825A 16r743E 16r825F 16r743F 16r8268 16r7440 16r887E 16r7441 16r8885 16r7442 16r8888 16r7443 16r88D8 16r7444 16r88DF 16r7445 16r895E 16r7446 16r7F9D 16r7447 16r7F9F 16r7448 16r7FA7 16r7449 16r7FAF 16r744A 16r7FB0 16r744B 16r7FB2 16r744C 16r7C7C 16r744D 16r6549 16r744E 16r7C91 16r744F 16r7C9D 16r7450 16r7C9C 16r7451 16r7C9E 16r7452 16r7CA2 16r7453 16r7CB2 16r7454 16r7CBC 16r7455 16r7CBD 16r7456 16r7CC1 16r7457 16r7CC7 16r7458 16r7CCC 16r7459 16r7CCD 16r745A 16r7CC8 16r745B 16r7CC5 16r745C 16r7CD7 16r745D 16r7CE8 16r745E 16r826E 16r745F 16r66A8 16r7460 16r7FBF 16r7461 16r7FCE 16r7462 16r7FD5 16r7463 16r7FE5 16r7464 16r7FE1 16r7465 16r7FE6 16r7466 16r7FE9 16r7467 16r7FEE 16r7468 16r7FF3 16r7469 16r7CF8 16r746A 16r7D77 16r746B 16r7DA6 16r746C 16r7DAE 16r746D 16r7E47 16r746E 16r7E9B 16r746F 16r9EB8 16r7470 16r9EB4 16r7471 16r8D73 16r7472 16r8D84 16r7473 16r8D94 16r7474 16r8D91 16r7475 16r8DB1 16r7476 16r8D67 16r7477 16r8D6D 16r7478 16r8C47 16r7479 16r8C49 16r747A 16r914A 16r747B 16r9150 16r747C 16r914E 16r747D 16r914F 16r747E 16r9164 16r7521 16r9162 16r7522 16r9161 16r7523 16r9170 16r7524 16r9169 16r7525 16r916F 16r7526 16r917D 16r7527 16r917E 16r7528 16r9172 16r7529 16r9174 16r752A 16r9179 16r752B 16r918C 16r752C 16r9185 16r752D 16r9190 16r752E 16r918D 16r752F 16r9191 16r7530 16r91A2 16r7531 16r91A3 16r7532 16r91AA 16r7533 16r91AD 16r7534 16r91AE 16r7535 16r91AF 16r7536 16r91B5 16r7537 16r91B4 16r7538 16r91BA 16r7539 16r8C55 16r753A 16r9E7E 16r753B 16r8DB8 16r753C 16r8DEB 16r753D 16r8E05 16r753E 16r8E59 16r753F 16r8E69 16r7540 16r8DB5 16r7541 16r8DBF 16r7542 16r8DBC 16r7543 16r8DBA 16r7544 16r8DC4 16r7545 16r8DD6 16r7546 16r8DD7 16r7547 16r8DDA 16r7548 16r8DDE 16r7549 16r8DCE 16r754A 16r8DCF 16r754B 16r8DDB 16r754C 16r8DC6 16r754D 16r8DEC 16r754E 16r8DF7 16r754F 16r8DF8 16r7550 16r8DE3 16r7551 16r8DF9 16r7552 16r8DFB 16r7553 16r8DE4 16r7554 16r8E09 16r7555 16r8DFD 16r7556 16r8E14 16r7557 16r8E1D 16r7558 16r8E1F 16r7559 16r8E2C 16r755A 16r8E2E 16r755B 16r8E23 16r755C 16r8E2F 16r755D 16r8E3A 16r755E 16r8E40 16r755F 16r8E39 16r7560 16r8E35 16r7561 16r8E3D 16r7562 16r8E31 16r7563 16r8E49 16r7564 16r8E41 16r7565 16r8E42 16r7566 16r8E51 16r7567 16r8E52 16r7568 16r8E4A 16r7569 16r8E70 16r756A 16r8E76 16r756B 16r8E7C 16r756C 16r8E6F 16r756D 16r8E74 16r756E 16r8E85 16r756F 16r8E8F 16r7570 16r8E94 16r7571 16r8E90 16r7572 16r8E9C 16r7573 16r8E9E 16r7574 16r8C78 16r7575 16r8C82 16r7576 16r8C8A 16r7577 16r8C85 16r7578 16r8C98 16r7579 16r8C94 16r757A 16r659B 16r757B 16r89D6 16r757C 16r89DE 16r757D 16r89DA 16r757E 16r89DC 16r7621 16r89E5 16r7622 16r89EB 16r7623 16r89EF 16r7624 16r8A3E 16r7625 16r8B26 16r7626 16r9753 16r7627 16r96E9 16r7628 16r96F3 16r7629 16r96EF 16r762A 16r9706 16r762B 16r9701 16r762C 16r9708 16r762D 16r970F 16r762E 16r970E 16r762F 16r972A 16r7630 16r972D 16r7631 16r9730 16r7632 16r973E 16r7633 16r9F80 16r7634 16r9F83 16r7635 16r9F85 16r7636 16r9F86 16r7637 16r9F87 16r7638 16r9F88 16r7639 16r9F89 16r763A 16r9F8A 16r763B 16r9F8C 16r763C 16r9EFE 16r763D 16r9F0B 16r763E 16r9F0D 16r763F 16r96B9 16r7640 16r96BC 16r7641 16r96BD 16r7642 16r96CE 16r7643 16r96D2 16r7644 16r77BF 16r7645 16r96E0 16r7646 16r928E 16r7647 16r92AE 16r7648 16r92C8 16r7649 16r933E 16r764A 16r936A 16r764B 16r93CA 16r764C 16r938F 16r764D 16r943E 16r764E 16r946B 16r764F 16r9C7F 16r7650 16r9C82 16r7651 16r9C85 16r7652 16r9C86 16r7653 16r9C87 16r7654 16r9C88 16r7655 16r7A23 16r7656 16r9C8B 16r7657 16r9C8E 16r7658 16r9C90 16r7659 16r9C91 16r765A 16r9C92 16r765B 16r9C94 16r765C 16r9C95 16r765D 16r9C9A 16r765E 16r9C9B 16r765F 16r9C9E 16r7660 16r9C9F 16r7661 16r9CA0 16r7662 16r9CA1 16r7663 16r9CA2 16r7664 16r9CA3 16r7665 16r9CA5 16r7666 16r9CA6 16r7667 16r9CA7 16r7668 16r9CA8 16r7669 16r9CA9 16r766A 16r9CAB 16r766B 16r9CAD 16r766C 16r9CAE 16r766D 16r9CB0 16r766E 16r9CB1 16r766F 16r9CB2 16r7670 16r9CB3 16r7671 16r9CB4 16r7672 16r9CB5 16r7673 16r9CB6 16r7674 16r9CB7 16r7675 16r9CBA 16r7676 16r9CBB 16r7677 16r9CBC 16r7678 16r9CBD 16r7679 16r9CC4 16r767A 16r9CC5 16r767B 16r9CC6 16r767C 16r9CC7 16r767D 16r9CCA 16r767E 16r9CCB 16r7721 16r9CCC 16r7722 16r9CCD 16r7723 16r9CCE 16r7724 16r9CCF 16r7725 16r9CD0 16r7726 16r9CD3 16r7727 16r9CD4 16r7728 16r9CD5 16r7729 16r9CD7 16r772A 16r9CD8 16r772B 16r9CD9 16r772C 16r9CDC 16r772D 16r9CDD 16r772E 16r9CDF 16r772F 16r9CE2 16r7730 16r977C 16r7731 16r9785 16r7732 16r9791 16r7733 16r9792 16r7734 16r9794 16r7735 16r97AF 16r7736 16r97AB 16r7737 16r97A3 16r7738 16r97B2 16r7739 16r97B4 16r773A 16r9AB1 16r773B 16r9AB0 16r773C 16r9AB7 16r773D 16r9E58 16r773E 16r9AB6 16r773F 16r9ABA 16r7740 16r9ABC 16r7741 16r9AC1 16r7742 16r9AC0 16r7743 16r9AC5 16r7744 16r9AC2 16r7745 16r9ACB 16r7746 16r9ACC 16r7747 16r9AD1 16r7748 16r9B45 16r7749 16r9B43 16r774A 16r9B47 16r774B 16r9B49 16r774C 16r9B48 16r774D 16r9B4D 16r774E 16r9B51 16r774F 16r98E8 16r7750 16r990D 16r7751 16r992E 16r7752 16r9955 16r7753 16r9954 16r7754 16r9ADF 16r7755 16r9AE1 16r7756 16r9AE6 16r7757 16r9AEF 16r7758 16r9AEB 16r7759 16r9AFB 16r775A 16r9AED 16r775B 16r9AF9 16r775C 16r9B08 16r775D 16r9B0F 16r775E 16r9B13 16r775F 16r9B1F 16r7760 16r9B23 16r7761 16r9EBD 16r7762 16r9EBE 16r7763 16r7E3B 16r7764 16r9E82 16r7765 16r9E87 16r7766 16r9E88 16r7767 16r9E8B 16r7768 16r9E92 16r7769 16r93D6 16r776A 16r9E9D 16r776B 16r9E9F 16r776C 16r9EDB 16r776D 16r9EDC 16r776E 16r9EDD 16r776F 16r9EE0 16r7770 16r9EDF 16r7771 16r9EE2 16r7772 16r9EE9 16r7773 16r9EE7 16r7774 16r9EE5 16r7775 16r9EEA 16r7776 16r9EEF 16r7777 16r9F22 16r7778 16r9F2C 16r7779 16r9F2F 16r777A 16r9F39 16r777B 16r9F37 16r777C 16r9F3D 16r777D 16r9F3E 16r777E 16r9F44). table size even ifFalse: [^ self error: 'given table size must be even']. size := table size / 2. gb2312 := Array new: size. unicode := Array new: size. 1 to: table size by: 2 do: [:index | | tableIndex | tableIndex := index + 1 / 2. gb2312 at: tableIndex put: (table at: index). unicode at: tableIndex put: (table at: index + 1)]. gb23122 := Array new: 94*94 withAll: -1. gb2312 withIndexDo: [:elem :index | | uIndex code u | code := (elem // 256 - 33) * 94 + (elem \\ 256 - 33) + 1. (gb23122 at: code) ~= -1 ifTrue: [self error]. uIndex := gb2312 indexOf: elem. uIndex = 0 ifFalse: [ u := unicode at: uIndex. gb23122 at: code put: u. ]. ]. GB2312Table := gb23122. ! ! !UCSTable class methodsFor: '*Unicode-Initialization' stamp: 'MarcusDenker 9/12/2013 16:40' prior: 53647882! initializeJISX0208Table "self halt. UCSTable initializeJISX0208Table" | table size jisX0208 unicode jisX02082 | table := #(16r2121 16r3000 16r2122 16r3001 16r2123 16r3002 16r2124 16rFF0C 16r2125 16rFF0E 16r2126 16r30FB 16r2127 16rFF1A 16r2128 16rFF1B 16r2129 16rFF1F 16r212A 16rFF01 16r212B 16r309B 16r212C 16r309C 16r212D 16rB4 16r212E 16rFF40 16r212F 16rA8 16r2130 16rFF3E 16r2131 16rFFE3 16r2132 16rFF3F 16r2133 16r30FD 16r2134 16r30FE 16r2135 16r309D 16r2136 16r309E 16r2137 16r3003 16r2138 16r4EDD 16r2139 16r3005 16r213A 16r3006 16r213B 16r3007 16r213C 16r30FC 16r213D 16r2015 16r213E 16r2010 16r213F 16rFF0F 16r2140 16r5C 16r2141 16r301C 16r2142 16r2016 16r2143 16rFF5C 16r2144 16r2026 16r2145 16r2025 16r2146 16r2018 16r2147 16r2019 16r2148 16r201C 16r2149 16r201D 16r214A 16rFF08 16r214B 16rFF09 16r214C 16r3014 16r214D 16r3015 16r214E 16rFF3B 16r214F 16rFF3D 16r2150 16rFF5B 16r2151 16rFF5D 16r2152 16r3008 16r2153 16r3009 16r2154 16r300A 16r2155 16r300B 16r2156 16r300C 16r2157 16r300D 16r2158 16r300E 16r2159 16r300F 16r215A 16r3010 16r215B 16r3011 16r215C 16rFF0B 16r215D 16r2212 16r215E 16rB1 16r215F 16rD7 16r2160 16rF7 16r2161 16rFF1D 16r2162 16r2260 16r2163 16rFF1C 16r2164 16rFF1E 16r2165 16r2266 16r2166 16r2267 16r2167 16r221E 16r2168 16r2234 16r2169 16r2642 16r216A 16r2640 16r216B 16rB0 16r216C 16r2032 16r216D 16r2033 16r216E 16r2103 16r216F 16rFFE5 16r2170 16rFF04 16r2171 16rA2 16r2172 16rA3 16r2173 16rFF05 16r2174 16rFF03 16r2175 16rFF06 16r2176 16rFF0A 16r2177 16rFF20 16r2178 16rA7 16r2179 16r2606 16r217A 16r2605 16r217B 16r25CB 16r217C 16r25CF 16r217D 16r25CE 16r217E 16r25C7 16r2221 16r25C6 16r2222 16r25A1 16r2223 16r25A0 16r2224 16r25B3 16r2225 16r25B2 16r2226 16r25BD 16r2227 16r25BC 16r2228 16r203B 16r2229 16r3012 16r222A 16r2192 16r222B 16r2190 16r222C 16r2191 16r222D 16r2193 16r222E 16r3013 16r223A 16r2208 16r223B 16r220B 16r223C 16r2286 16r223D 16r2287 16r223E 16r2282 16r223F 16r2283 16r2240 16r222A 16r2241 16r2229 16r224A 16r2227 16r224B 16r2228 16r224C 16rAC 16r224D 16r21D2 16r224E 16r21D4 16r224F 16r2200 16r2250 16r2203 16r225C 16r2220 16r225D 16r22A5 16r225E 16r2312 16r225F 16r2202 16r2260 16r2207 16r2261 16r2261 16r2262 16r2252 16r2263 16r226A 16r2264 16r226B 16r2265 16r221A 16r2266 16r223D 16r2267 16r221D 16r2268 16r2235 16r2269 16r222B 16r226A 16r222C 16r2272 16r212B 16r2273 16r2030 16r2274 16r266F 16r2275 16r266D 16r2276 16r266A 16r2277 16r2020 16r2278 16r2021 16r2279 16rB6 16r227E 16r25EF 16r2330 16rFF10 16r2331 16rFF11 16r2332 16rFF12 16r2333 16rFF13 16r2334 16rFF14 16r2335 16rFF15 16r2336 16rFF16 16r2337 16rFF17 16r2338 16rFF18 16r2339 16rFF19 16r2341 16rFF21 16r2342 16rFF22 16r2343 16rFF23 16r2344 16rFF24 16r2345 16rFF25 16r2346 16rFF26 16r2347 16rFF27 16r2348 16rFF28 16r2349 16rFF29 16r234A 16rFF2A 16r234B 16rFF2B 16r234C 16rFF2C 16r234D 16rFF2D 16r234E 16rFF2E 16r234F 16rFF2F 16r2350 16rFF30 16r2351 16rFF31 16r2352 16rFF32 16r2353 16rFF33 16r2354 16rFF34 16r2355 16rFF35 16r2356 16rFF36 16r2357 16rFF37 16r2358 16rFF38 16r2359 16rFF39 16r235A 16rFF3A 16r2361 16rFF41 16r2362 16rFF42 16r2363 16rFF43 16r2364 16rFF44 16r2365 16rFF45 16r2366 16rFF46 16r2367 16rFF47 16r2368 16rFF48 16r2369 16rFF49 16r236A 16rFF4A 16r236B 16rFF4B 16r236C 16rFF4C 16r236D 16rFF4D 16r236E 16rFF4E 16r236F 16rFF4F 16r2370 16rFF50 16r2371 16rFF51 16r2372 16rFF52 16r2373 16rFF53 16r2374 16rFF54 16r2375 16rFF55 16r2376 16rFF56 16r2377 16rFF57 16r2378 16rFF58 16r2379 16rFF59 16r237A 16rFF5A 16r2421 16r3041 16r2422 16r3042 16r2423 16r3043 16r2424 16r3044 16r2425 16r3045 16r2426 16r3046 16r2427 16r3047 16r2428 16r3048 16r2429 16r3049 16r242A 16r304A 16r242B 16r304B 16r242C 16r304C 16r242D 16r304D 16r242E 16r304E 16r242F 16r304F 16r2430 16r3050 16r2431 16r3051 16r2432 16r3052 16r2433 16r3053 16r2434 16r3054 16r2435 16r3055 16r2436 16r3056 16r2437 16r3057 16r2438 16r3058 16r2439 16r3059 16r243A 16r305A 16r243B 16r305B 16r243C 16r305C 16r243D 16r305D 16r243E 16r305E 16r243F 16r305F 16r2440 16r3060 16r2441 16r3061 16r2442 16r3062 16r2443 16r3063 16r2444 16r3064 16r2445 16r3065 16r2446 16r3066 16r2447 16r3067 16r2448 16r3068 16r2449 16r3069 16r244A 16r306A 16r244B 16r306B 16r244C 16r306C 16r244D 16r306D 16r244E 16r306E 16r244F 16r306F 16r2450 16r3070 16r2451 16r3071 16r2452 16r3072 16r2453 16r3073 16r2454 16r3074 16r2455 16r3075 16r2456 16r3076 16r2457 16r3077 16r2458 16r3078 16r2459 16r3079 16r245A 16r307A 16r245B 16r307B 16r245C 16r307C 16r245D 16r307D 16r245E 16r307E 16r245F 16r307F 16r2460 16r3080 16r2461 16r3081 16r2462 16r3082 16r2463 16r3083 16r2464 16r3084 16r2465 16r3085 16r2466 16r3086 16r2467 16r3087 16r2468 16r3088 16r2469 16r3089 16r246A 16r308A 16r246B 16r308B 16r246C 16r308C 16r246D 16r308D 16r246E 16r308E 16r246F 16r308F 16r2470 16r3090 16r2471 16r3091 16r2472 16r3092 16r2473 16r3093 16r2521 16r30A1 16r2522 16r30A2 16r2523 16r30A3 16r2524 16r30A4 16r2525 16r30A5 16r2526 16r30A6 16r2527 16r30A7 16r2528 16r30A8 16r2529 16r30A9 16r252A 16r30AA 16r252B 16r30AB 16r252C 16r30AC 16r252D 16r30AD 16r252E 16r30AE 16r252F 16r30AF 16r2530 16r30B0 16r2531 16r30B1 16r2532 16r30B2 16r2533 16r30B3 16r2534 16r30B4 16r2535 16r30B5 16r2536 16r30B6 16r2537 16r30B7 16r2538 16r30B8 16r2539 16r30B9 16r253A 16r30BA 16r253B 16r30BB 16r253C 16r30BC 16r253D 16r30BD 16r253E 16r30BE 16r253F 16r30BF 16r2540 16r30C0 16r2541 16r30C1 16r2542 16r30C2 16r2543 16r30C3 16r2544 16r30C4 16r2545 16r30C5 16r2546 16r30C6 16r2547 16r30C7 16r2548 16r30C8 16r2549 16r30C9 16r254A 16r30CA 16r254B 16r30CB 16r254C 16r30CC 16r254D 16r30CD 16r254E 16r30CE 16r254F 16r30CF 16r2550 16r30D0 16r2551 16r30D1 16r2552 16r30D2 16r2553 16r30D3 16r2554 16r30D4 16r2555 16r30D5 16r2556 16r30D6 16r2557 16r30D7 16r2558 16r30D8 16r2559 16r30D9 16r255A 16r30DA 16r255B 16r30DB 16r255C 16r30DC 16r255D 16r30DD 16r255E 16r30DE 16r255F 16r30DF 16r2560 16r30E0 16r2561 16r30E1 16r2562 16r30E2 16r2563 16r30E3 16r2564 16r30E4 16r2565 16r30E5 16r2566 16r30E6 16r2567 16r30E7 16r2568 16r30E8 16r2569 16r30E9 16r256A 16r30EA 16r256B 16r30EB 16r256C 16r30EC 16r256D 16r30ED 16r256E 16r30EE 16r256F 16r30EF 16r2570 16r30F0 16r2571 16r30F1 16r2572 16r30F2 16r2573 16r30F3 16r2574 16r30F4 16r2575 16r30F5 16r2576 16r30F6 16r2621 16r391 16r2622 16r392 16r2623 16r393 16r2624 16r394 16r2625 16r395 16r2626 16r396 16r2627 16r397 16r2628 16r398 16r2629 16r399 16r262A 16r39A 16r262B 16r39B 16r262C 16r39C 16r262D 16r39D 16r262E 16r39E 16r262F 16r39F 16r2630 16r3A0 16r2631 16r3A1 16r2632 16r3A3 16r2633 16r3A4 16r2634 16r3A5 16r2635 16r3A6 16r2636 16r3A7 16r2637 16r3A8 16r2638 16r3A9 16r2641 16r3B1 16r2642 16r3B2 16r2643 16r3B3 16r2644 16r3B4 16r2645 16r3B5 16r2646 16r3B6 16r2647 16r3B7 16r2648 16r3B8 16r2649 16r3B9 16r264A 16r3BA 16r264B 16r3BB 16r264C 16r3BC 16r264D 16r3BD 16r264E 16r3BE 16r264F 16r3BF 16r2650 16r3C0 16r2651 16r3C1 16r2652 16r3C3 16r2653 16r3C4 16r2654 16r3C5 16r2655 16r3C6 16r2656 16r3C7 16r2657 16r3C8 16r2658 16r3C9 16r2721 16r410 16r2722 16r411 16r2723 16r412 16r2724 16r413 16r2725 16r414 16r2726 16r415 16r2727 16r401 16r2728 16r416 16r2729 16r417 16r272A 16r418 16r272B 16r419 16r272C 16r41A 16r272D 16r41B 16r272E 16r41C 16r272F 16r41D 16r2730 16r41E 16r2731 16r41F 16r2732 16r420 16r2733 16r421 16r2734 16r422 16r2735 16r423 16r2736 16r424 16r2737 16r425 16r2738 16r426 16r2739 16r427 16r273A 16r428 16r273B 16r429 16r273C 16r42A 16r273D 16r42B 16r273E 16r42C 16r273F 16r42D 16r2740 16r42E 16r2741 16r42F 16r2751 16r430 16r2752 16r431 16r2753 16r432 16r2754 16r433 16r2755 16r434 16r2756 16r435 16r2757 16r451 16r2758 16r436 16r2759 16r437 16r275A 16r438 16r275B 16r439 16r275C 16r43A 16r275D 16r43B 16r275E 16r43C 16r275F 16r43D 16r2760 16r43E 16r2761 16r43F 16r2762 16r440 16r2763 16r441 16r2764 16r442 16r2765 16r443 16r2766 16r444 16r2767 16r445 16r2768 16r446 16r2769 16r447 16r276A 16r448 16r276B 16r449 16r276C 16r44A 16r276D 16r44B 16r276E 16r44C 16r276F 16r44D 16r2770 16r44E 16r2771 16r44F 16r2821 16r2500 16r2822 16r2502 16r2823 16r250C 16r2824 16r2510 16r2825 16r2518 16r2826 16r2514 16r2827 16r251C 16r2828 16r252C 16r2829 16r2524 16r282A 16r2534 16r282B 16r253C 16r282C 16r2501 16r282D 16r2503 16r282E 16r250F 16r282F 16r2513 16r2830 16r251B 16r2831 16r2517 16r2832 16r2523 16r2833 16r2533 16r2834 16r252B 16r2835 16r253B 16r2836 16r254B 16r2837 16r2520 16r2838 16r252F 16r2839 16r2528 16r283A 16r2537 16r283B 16r253F 16r283C 16r251D 16r283D 16r2530 16r283E 16r2525 16r283F 16r2538 16r2840 16r2542 16r3021 16r4E9C 16r3022 16r5516 16r3023 16r5A03 16r3024 16r963F 16r3025 16r54C0 16r3026 16r611B 16r3027 16r6328 16r3028 16r59F6 16r3029 16r9022 16r302A 16r8475 16r302B 16r831C 16r302C 16r7A50 16r302D 16r60AA 16r302E 16r63E1 16r302F 16r6E25 16r3030 16r65ED 16r3031 16r8466 16r3032 16r82A6 16r3033 16r9BF5 16r3034 16r6893 16r3035 16r5727 16r3036 16r65A1 16r3037 16r6271 16r3038 16r5B9B 16r3039 16r59D0 16r303A 16r867B 16r303B 16r98F4 16r303C 16r7D62 16r303D 16r7DBE 16r303E 16r9B8E 16r303F 16r6216 16r3040 16r7C9F 16r3041 16r88B7 16r3042 16r5B89 16r3043 16r5EB5 16r3044 16r6309 16r3045 16r6697 16r3046 16r6848 16r3047 16r95C7 16r3048 16r978D 16r3049 16r674F 16r304A 16r4EE5 16r304B 16r4F0A 16r304C 16r4F4D 16r304D 16r4F9D 16r304E 16r5049 16r304F 16r56F2 16r3050 16r5937 16r3051 16r59D4 16r3052 16r5A01 16r3053 16r5C09 16r3054 16r60DF 16r3055 16r610F 16r3056 16r6170 16r3057 16r6613 16r3058 16r6905 16r3059 16r70BA 16r305A 16r754F 16r305B 16r7570 16r305C 16r79FB 16r305D 16r7DAD 16r305E 16r7DEF 16r305F 16r80C3 16r3060 16r840E 16r3061 16r8863 16r3062 16r8B02 16r3063 16r9055 16r3064 16r907A 16r3065 16r533B 16r3066 16r4E95 16r3067 16r4EA5 16r3068 16r57DF 16r3069 16r80B2 16r306A 16r90C1 16r306B 16r78EF 16r306C 16r4E00 16r306D 16r58F1 16r306E 16r6EA2 16r306F 16r9038 16r3070 16r7A32 16r3071 16r8328 16r3072 16r828B 16r3073 16r9C2F 16r3074 16r5141 16r3075 16r5370 16r3076 16r54BD 16r3077 16r54E1 16r3078 16r56E0 16r3079 16r59FB 16r307A 16r5F15 16r307B 16r98F2 16r307C 16r6DEB 16r307D 16r80E4 16r307E 16r852D 16r3121 16r9662 16r3122 16r9670 16r3123 16r96A0 16r3124 16r97FB 16r3125 16r540B 16r3126 16r53F3 16r3127 16r5B87 16r3128 16r70CF 16r3129 16r7FBD 16r312A 16r8FC2 16r312B 16r96E8 16r312C 16r536F 16r312D 16r9D5C 16r312E 16r7ABA 16r312F 16r4E11 16r3130 16r7893 16r3131 16r81FC 16r3132 16r6E26 16r3133 16r5618 16r3134 16r5504 16r3135 16r6B1D 16r3136 16r851A 16r3137 16r9C3B 16r3138 16r59E5 16r3139 16r53A9 16r313A 16r6D66 16r313B 16r74DC 16r313C 16r958F 16r313D 16r5642 16r313E 16r4E91 16r313F 16r904B 16r3140 16r96F2 16r3141 16r834F 16r3142 16r990C 16r3143 16r53E1 16r3144 16r55B6 16r3145 16r5B30 16r3146 16r5F71 16r3147 16r6620 16r3148 16r66F3 16r3149 16r6804 16r314A 16r6C38 16r314B 16r6CF3 16r314C 16r6D29 16r314D 16r745B 16r314E 16r76C8 16r314F 16r7A4E 16r3150 16r9834 16r3151 16r82F1 16r3152 16r885B 16r3153 16r8A60 16r3154 16r92ED 16r3155 16r6DB2 16r3156 16r75AB 16r3157 16r76CA 16r3158 16r99C5 16r3159 16r60A6 16r315A 16r8B01 16r315B 16r8D8A 16r315C 16r95B2 16r315D 16r698E 16r315E 16r53AD 16r315F 16r5186 16r3160 16r5712 16r3161 16r5830 16r3162 16r5944 16r3163 16r5BB4 16r3164 16r5EF6 16r3165 16r6028 16r3166 16r63A9 16r3167 16r63F4 16r3168 16r6CBF 16r3169 16r6F14 16r316A 16r708E 16r316B 16r7114 16r316C 16r7159 16r316D 16r71D5 16r316E 16r733F 16r316F 16r7E01 16r3170 16r8276 16r3171 16r82D1 16r3172 16r8597 16r3173 16r9060 16r3174 16r925B 16r3175 16r9D1B 16r3176 16r5869 16r3177 16r65BC 16r3178 16r6C5A 16r3179 16r7525 16r317A 16r51F9 16r317B 16r592E 16r317C 16r5965 16r317D 16r5F80 16r317E 16r5FDC 16r3221 16r62BC 16r3222 16r65FA 16r3223 16r6A2A 16r3224 16r6B27 16r3225 16r6BB4 16r3226 16r738B 16r3227 16r7FC1 16r3228 16r8956 16r3229 16r9D2C 16r322A 16r9D0E 16r322B 16r9EC4 16r322C 16r5CA1 16r322D 16r6C96 16r322E 16r837B 16r322F 16r5104 16r3230 16r5C4B 16r3231 16r61B6 16r3232 16r81C6 16r3233 16r6876 16r3234 16r7261 16r3235 16r4E59 16r3236 16r4FFA 16r3237 16r5378 16r3238 16r6069 16r3239 16r6E29 16r323A 16r7A4F 16r323B 16r97F3 16r323C 16r4E0B 16r323D 16r5316 16r323E 16r4EEE 16r323F 16r4F55 16r3240 16r4F3D 16r3241 16r4FA1 16r3242 16r4F73 16r3243 16r52A0 16r3244 16r53EF 16r3245 16r5609 16r3246 16r590F 16r3247 16r5AC1 16r3248 16r5BB6 16r3249 16r5BE1 16r324A 16r79D1 16r324B 16r6687 16r324C 16r679C 16r324D 16r67B6 16r324E 16r6B4C 16r324F 16r6CB3 16r3250 16r706B 16r3251 16r73C2 16r3252 16r798D 16r3253 16r79BE 16r3254 16r7A3C 16r3255 16r7B87 16r3256 16r82B1 16r3257 16r82DB 16r3258 16r8304 16r3259 16r8377 16r325A 16r83EF 16r325B 16r83D3 16r325C 16r8766 16r325D 16r8AB2 16r325E 16r5629 16r325F 16r8CA8 16r3260 16r8FE6 16r3261 16r904E 16r3262 16r971E 16r3263 16r868A 16r3264 16r4FC4 16r3265 16r5CE8 16r3266 16r6211 16r3267 16r7259 16r3268 16r753B 16r3269 16r81E5 16r326A 16r82BD 16r326B 16r86FE 16r326C 16r8CC0 16r326D 16r96C5 16r326E 16r9913 16r326F 16r99D5 16r3270 16r4ECB 16r3271 16r4F1A 16r3272 16r89E3 16r3273 16r56DE 16r3274 16r584A 16r3275 16r58CA 16r3276 16r5EFB 16r3277 16r5FEB 16r3278 16r602A 16r3279 16r6094 16r327A 16r6062 16r327B 16r61D0 16r327C 16r6212 16r327D 16r62D0 16r327E 16r6539 16r3321 16r9B41 16r3322 16r6666 16r3323 16r68B0 16r3324 16r6D77 16r3325 16r7070 16r3326 16r754C 16r3327 16r7686 16r3328 16r7D75 16r3329 16r82A5 16r332A 16r87F9 16r332B 16r958B 16r332C 16r968E 16r332D 16r8C9D 16r332E 16r51F1 16r332F 16r52BE 16r3330 16r5916 16r3331 16r54B3 16r3332 16r5BB3 16r3333 16r5D16 16r3334 16r6168 16r3335 16r6982 16r3336 16r6DAF 16r3337 16r788D 16r3338 16r84CB 16r3339 16r8857 16r333A 16r8A72 16r333B 16r93A7 16r333C 16r9AB8 16r333D 16r6D6C 16r333E 16r99A8 16r333F 16r86D9 16r3340 16r57A3 16r3341 16r67FF 16r3342 16r86CE 16r3343 16r920E 16r3344 16r5283 16r3345 16r5687 16r3346 16r5404 16r3347 16r5ED3 16r3348 16r62E1 16r3349 16r64B9 16r334A 16r683C 16r334B 16r6838 16r334C 16r6BBB 16r334D 16r7372 16r334E 16r78BA 16r334F 16r7A6B 16r3350 16r899A 16r3351 16r89D2 16r3352 16r8D6B 16r3353 16r8F03 16r3354 16r90ED 16r3355 16r95A3 16r3356 16r9694 16r3357 16r9769 16r3358 16r5B66 16r3359 16r5CB3 16r335A 16r697D 16r335B 16r984D 16r335C 16r984E 16r335D 16r639B 16r335E 16r7B20 16r335F 16r6A2B 16r3360 16r6A7F 16r3361 16r68B6 16r3362 16r9C0D 16r3363 16r6F5F 16r3364 16r5272 16r3365 16r559D 16r3366 16r6070 16r3367 16r62EC 16r3368 16r6D3B 16r3369 16r6E07 16r336A 16r6ED1 16r336B 16r845B 16r336C 16r8910 16r336D 16r8F44 16r336E 16r4E14 16r336F 16r9C39 16r3370 16r53F6 16r3371 16r691B 16r3372 16r6A3A 16r3373 16r9784 16r3374 16r682A 16r3375 16r515C 16r3376 16r7AC3 16r3377 16r84B2 16r3378 16r91DC 16r3379 16r938C 16r337A 16r565B 16r337B 16r9D28 16r337C 16r6822 16r337D 16r8305 16r337E 16r8431 16r3421 16r7CA5 16r3422 16r5208 16r3423 16r82C5 16r3424 16r74E6 16r3425 16r4E7E 16r3426 16r4F83 16r3427 16r51A0 16r3428 16r5BD2 16r3429 16r520A 16r342A 16r52D8 16r342B 16r52E7 16r342C 16r5DFB 16r342D 16r559A 16r342E 16r582A 16r342F 16r59E6 16r3430 16r5B8C 16r3431 16r5B98 16r3432 16r5BDB 16r3433 16r5E72 16r3434 16r5E79 16r3435 16r60A3 16r3436 16r611F 16r3437 16r6163 16r3438 16r61BE 16r3439 16r63DB 16r343A 16r6562 16r343B 16r67D1 16r343C 16r6853 16r343D 16r68FA 16r343E 16r6B3E 16r343F 16r6B53 16r3440 16r6C57 16r3441 16r6F22 16r3442 16r6F97 16r3443 16r6F45 16r3444 16r74B0 16r3445 16r7518 16r3446 16r76E3 16r3447 16r770B 16r3448 16r7AFF 16r3449 16r7BA1 16r344A 16r7C21 16r344B 16r7DE9 16r344C 16r7F36 16r344D 16r7FF0 16r344E 16r809D 16r344F 16r8266 16r3450 16r839E 16r3451 16r89B3 16r3452 16r8ACC 16r3453 16r8CAB 16r3454 16r9084 16r3455 16r9451 16r3456 16r9593 16r3457 16r9591 16r3458 16r95A2 16r3459 16r9665 16r345A 16r97D3 16r345B 16r9928 16r345C 16r8218 16r345D 16r4E38 16r345E 16r542B 16r345F 16r5CB8 16r3460 16r5DCC 16r3461 16r73A9 16r3462 16r764C 16r3463 16r773C 16r3464 16r5CA9 16r3465 16r7FEB 16r3466 16r8D0B 16r3467 16r96C1 16r3468 16r9811 16r3469 16r9854 16r346A 16r9858 16r346B 16r4F01 16r346C 16r4F0E 16r346D 16r5371 16r346E 16r559C 16r346F 16r5668 16r3470 16r57FA 16r3471 16r5947 16r3472 16r5B09 16r3473 16r5BC4 16r3474 16r5C90 16r3475 16r5E0C 16r3476 16r5E7E 16r3477 16r5FCC 16r3478 16r63EE 16r3479 16r673A 16r347A 16r65D7 16r347B 16r65E2 16r347C 16r671F 16r347D 16r68CB 16r347E 16r68C4 16r3521 16r6A5F 16r3522 16r5E30 16r3523 16r6BC5 16r3524 16r6C17 16r3525 16r6C7D 16r3526 16r757F 16r3527 16r7948 16r3528 16r5B63 16r3529 16r7A00 16r352A 16r7D00 16r352B 16r5FBD 16r352C 16r898F 16r352D 16r8A18 16r352E 16r8CB4 16r352F 16r8D77 16r3530 16r8ECC 16r3531 16r8F1D 16r3532 16r98E2 16r3533 16r9A0E 16r3534 16r9B3C 16r3535 16r4E80 16r3536 16r507D 16r3537 16r5100 16r3538 16r5993 16r3539 16r5B9C 16r353A 16r622F 16r353B 16r6280 16r353C 16r64EC 16r353D 16r6B3A 16r353E 16r72A0 16r353F 16r7591 16r3540 16r7947 16r3541 16r7FA9 16r3542 16r87FB 16r3543 16r8ABC 16r3544 16r8B70 16r3545 16r63AC 16r3546 16r83CA 16r3547 16r97A0 16r3548 16r5409 16r3549 16r5403 16r354A 16r55AB 16r354B 16r6854 16r354C 16r6A58 16r354D 16r8A70 16r354E 16r7827 16r354F 16r6775 16r3550 16r9ECD 16r3551 16r5374 16r3552 16r5BA2 16r3553 16r811A 16r3554 16r8650 16r3555 16r9006 16r3556 16r4E18 16r3557 16r4E45 16r3558 16r4EC7 16r3559 16r4F11 16r355A 16r53CA 16r355B 16r5438 16r355C 16r5BAE 16r355D 16r5F13 16r355E 16r6025 16r355F 16r6551 16r3560 16r673D 16r3561 16r6C42 16r3562 16r6C72 16r3563 16r6CE3 16r3564 16r7078 16r3565 16r7403 16r3566 16r7A76 16r3567 16r7AAE 16r3568 16r7B08 16r3569 16r7D1A 16r356A 16r7CFE 16r356B 16r7D66 16r356C 16r65E7 16r356D 16r725B 16r356E 16r53BB 16r356F 16r5C45 16r3570 16r5DE8 16r3571 16r62D2 16r3572 16r62E0 16r3573 16r6319 16r3574 16r6E20 16r3575 16r865A 16r3576 16r8A31 16r3577 16r8DDD 16r3578 16r92F8 16r3579 16r6F01 16r357A 16r79A6 16r357B 16r9B5A 16r357C 16r4EA8 16r357D 16r4EAB 16r357E 16r4EAC 16r3621 16r4F9B 16r3622 16r4FA0 16r3623 16r50D1 16r3624 16r5147 16r3625 16r7AF6 16r3626 16r5171 16r3627 16r51F6 16r3628 16r5354 16r3629 16r5321 16r362A 16r537F 16r362B 16r53EB 16r362C 16r55AC 16r362D 16r5883 16r362E 16r5CE1 16r362F 16r5F37 16r3630 16r5F4A 16r3631 16r602F 16r3632 16r6050 16r3633 16r606D 16r3634 16r631F 16r3635 16r6559 16r3636 16r6A4B 16r3637 16r6CC1 16r3638 16r72C2 16r3639 16r72ED 16r363A 16r77EF 16r363B 16r80F8 16r363C 16r8105 16r363D 16r8208 16r363E 16r854E 16r363F 16r90F7 16r3640 16r93E1 16r3641 16r97FF 16r3642 16r9957 16r3643 16r9A5A 16r3644 16r4EF0 16r3645 16r51DD 16r3646 16r5C2D 16r3647 16r6681 16r3648 16r696D 16r3649 16r5C40 16r364A 16r66F2 16r364B 16r6975 16r364C 16r7389 16r364D 16r6850 16r364E 16r7C81 16r364F 16r50C5 16r3650 16r52E4 16r3651 16r5747 16r3652 16r5DFE 16r3653 16r9326 16r3654 16r65A4 16r3655 16r6B23 16r3656 16r6B3D 16r3657 16r7434 16r3658 16r7981 16r3659 16r79BD 16r365A 16r7B4B 16r365B 16r7DCA 16r365C 16r82B9 16r365D 16r83CC 16r365E 16r887F 16r365F 16r895F 16r3660 16r8B39 16r3661 16r8FD1 16r3662 16r91D1 16r3663 16r541F 16r3664 16r9280 16r3665 16r4E5D 16r3666 16r5036 16r3667 16r53E5 16r3668 16r533A 16r3669 16r72D7 16r366A 16r7396 16r366B 16r77E9 16r366C 16r82E6 16r366D 16r8EAF 16r366E 16r99C6 16r366F 16r99C8 16r3670 16r99D2 16r3671 16r5177 16r3672 16r611A 16r3673 16r865E 16r3674 16r55B0 16r3675 16r7A7A 16r3676 16r5076 16r3677 16r5BD3 16r3678 16r9047 16r3679 16r9685 16r367A 16r4E32 16r367B 16r6ADB 16r367C 16r91E7 16r367D 16r5C51 16r367E 16r5C48 16r3721 16r6398 16r3722 16r7A9F 16r3723 16r6C93 16r3724 16r9774 16r3725 16r8F61 16r3726 16r7AAA 16r3727 16r718A 16r3728 16r9688 16r3729 16r7C82 16r372A 16r6817 16r372B 16r7E70 16r372C 16r6851 16r372D 16r936C 16r372E 16r52F2 16r372F 16r541B 16r3730 16r85AB 16r3731 16r8A13 16r3732 16r7FA4 16r3733 16r8ECD 16r3734 16r90E1 16r3735 16r5366 16r3736 16r8888 16r3737 16r7941 16r3738 16r4FC2 16r3739 16r50BE 16r373A 16r5211 16r373B 16r5144 16r373C 16r5553 16r373D 16r572D 16r373E 16r73EA 16r373F 16r578B 16r3740 16r5951 16r3741 16r5F62 16r3742 16r5F84 16r3743 16r6075 16r3744 16r6176 16r3745 16r6167 16r3746 16r61A9 16r3747 16r63B2 16r3748 16r643A 16r3749 16r656C 16r374A 16r666F 16r374B 16r6842 16r374C 16r6E13 16r374D 16r7566 16r374E 16r7A3D 16r374F 16r7CFB 16r3750 16r7D4C 16r3751 16r7D99 16r3752 16r7E4B 16r3753 16r7F6B 16r3754 16r830E 16r3755 16r834A 16r3756 16r86CD 16r3757 16r8A08 16r3758 16r8A63 16r3759 16r8B66 16r375A 16r8EFD 16r375B 16r981A 16r375C 16r9D8F 16r375D 16r82B8 16r375E 16r8FCE 16r375F 16r9BE8 16r3760 16r5287 16r3761 16r621F 16r3762 16r6483 16r3763 16r6FC0 16r3764 16r9699 16r3765 16r6841 16r3766 16r5091 16r3767 16r6B20 16r3768 16r6C7A 16r3769 16r6F54 16r376A 16r7A74 16r376B 16r7D50 16r376C 16r8840 16r376D 16r8A23 16r376E 16r6708 16r376F 16r4EF6 16r3770 16r5039 16r3771 16r5026 16r3772 16r5065 16r3773 16r517C 16r3774 16r5238 16r3775 16r5263 16r3776 16r55A7 16r3777 16r570F 16r3778 16r5805 16r3779 16r5ACC 16r377A 16r5EFA 16r377B 16r61B2 16r377C 16r61F8 16r377D 16r62F3 16r377E 16r6372 16r3821 16r691C 16r3822 16r6A29 16r3823 16r727D 16r3824 16r72AC 16r3825 16r732E 16r3826 16r7814 16r3827 16r786F 16r3828 16r7D79 16r3829 16r770C 16r382A 16r80A9 16r382B 16r898B 16r382C 16r8B19 16r382D 16r8CE2 16r382E 16r8ED2 16r382F 16r9063 16r3830 16r9375 16r3831 16r967A 16r3832 16r9855 16r3833 16r9A13 16r3834 16r9E78 16r3835 16r5143 16r3836 16r539F 16r3837 16r53B3 16r3838 16r5E7B 16r3839 16r5F26 16r383A 16r6E1B 16r383B 16r6E90 16r383C 16r7384 16r383D 16r73FE 16r383E 16r7D43 16r383F 16r8237 16r3840 16r8A00 16r3841 16r8AFA 16r3842 16r9650 16r3843 16r4E4E 16r3844 16r500B 16r3845 16r53E4 16r3846 16r547C 16r3847 16r56FA 16r3848 16r59D1 16r3849 16r5B64 16r384A 16r5DF1 16r384B 16r5EAB 16r384C 16r5F27 16r384D 16r6238 16r384E 16r6545 16r384F 16r67AF 16r3850 16r6E56 16r3851 16r72D0 16r3852 16r7CCA 16r3853 16r88B4 16r3854 16r80A1 16r3855 16r80E1 16r3856 16r83F0 16r3857 16r864E 16r3858 16r8A87 16r3859 16r8DE8 16r385A 16r9237 16r385B 16r96C7 16r385C 16r9867 16r385D 16r9F13 16r385E 16r4E94 16r385F 16r4E92 16r3860 16r4F0D 16r3861 16r5348 16r3862 16r5449 16r3863 16r543E 16r3864 16r5A2F 16r3865 16r5F8C 16r3866 16r5FA1 16r3867 16r609F 16r3868 16r68A7 16r3869 16r6A8E 16r386A 16r745A 16r386B 16r7881 16r386C 16r8A9E 16r386D 16r8AA4 16r386E 16r8B77 16r386F 16r9190 16r3870 16r4E5E 16r3871 16r9BC9 16r3872 16r4EA4 16r3873 16r4F7C 16r3874 16r4FAF 16r3875 16r5019 16r3876 16r5016 16r3877 16r5149 16r3878 16r516C 16r3879 16r529F 16r387A 16r52B9 16r387B 16r52FE 16r387C 16r539A 16r387D 16r53E3 16r387E 16r5411 16r3921 16r540E 16r3922 16r5589 16r3923 16r5751 16r3924 16r57A2 16r3925 16r597D 16r3926 16r5B54 16r3927 16r5B5D 16r3928 16r5B8F 16r3929 16r5DE5 16r392A 16r5DE7 16r392B 16r5DF7 16r392C 16r5E78 16r392D 16r5E83 16r392E 16r5E9A 16r392F 16r5EB7 16r3930 16r5F18 16r3931 16r6052 16r3932 16r614C 16r3933 16r6297 16r3934 16r62D8 16r3935 16r63A7 16r3936 16r653B 16r3937 16r6602 16r3938 16r6643 16r3939 16r66F4 16r393A 16r676D 16r393B 16r6821 16r393C 16r6897 16r393D 16r69CB 16r393E 16r6C5F 16r393F 16r6D2A 16r3940 16r6D69 16r3941 16r6E2F 16r3942 16r6E9D 16r3943 16r7532 16r3944 16r7687 16r3945 16r786C 16r3946 16r7A3F 16r3947 16r7CE0 16r3948 16r7D05 16r3949 16r7D18 16r394A 16r7D5E 16r394B 16r7DB1 16r394C 16r8015 16r394D 16r8003 16r394E 16r80AF 16r394F 16r80B1 16r3950 16r8154 16r3951 16r818F 16r3952 16r822A 16r3953 16r8352 16r3954 16r884C 16r3955 16r8861 16r3956 16r8B1B 16r3957 16r8CA2 16r3958 16r8CFC 16r3959 16r90CA 16r395A 16r9175 16r395B 16r9271 16r395C 16r783F 16r395D 16r92FC 16r395E 16r95A4 16r395F 16r964D 16r3960 16r9805 16r3961 16r9999 16r3962 16r9AD8 16r3963 16r9D3B 16r3964 16r525B 16r3965 16r52AB 16r3966 16r53F7 16r3967 16r5408 16r3968 16r58D5 16r3969 16r62F7 16r396A 16r6FE0 16r396B 16r8C6A 16r396C 16r8F5F 16r396D 16r9EB9 16r396E 16r514B 16r396F 16r523B 16r3970 16r544A 16r3971 16r56FD 16r3972 16r7A40 16r3973 16r9177 16r3974 16r9D60 16r3975 16r9ED2 16r3976 16r7344 16r3977 16r6F09 16r3978 16r8170 16r3979 16r7511 16r397A 16r5FFD 16r397B 16r60DA 16r397C 16r9AA8 16r397D 16r72DB 16r397E 16r8FBC 16r3A21 16r6B64 16r3A22 16r9803 16r3A23 16r4ECA 16r3A24 16r56F0 16r3A25 16r5764 16r3A26 16r58BE 16r3A27 16r5A5A 16r3A28 16r6068 16r3A29 16r61C7 16r3A2A 16r660F 16r3A2B 16r6606 16r3A2C 16r6839 16r3A2D 16r68B1 16r3A2E 16r6DF7 16r3A2F 16r75D5 16r3A30 16r7D3A 16r3A31 16r826E 16r3A32 16r9B42 16r3A33 16r4E9B 16r3A34 16r4F50 16r3A35 16r53C9 16r3A36 16r5506 16r3A37 16r5D6F 16r3A38 16r5DE6 16r3A39 16r5DEE 16r3A3A 16r67FB 16r3A3B 16r6C99 16r3A3C 16r7473 16r3A3D 16r7802 16r3A3E 16r8A50 16r3A3F 16r9396 16r3A40 16r88DF 16r3A41 16r5750 16r3A42 16r5EA7 16r3A43 16r632B 16r3A44 16r50B5 16r3A45 16r50AC 16r3A46 16r518D 16r3A47 16r6700 16r3A48 16r54C9 16r3A49 16r585E 16r3A4A 16r59BB 16r3A4B 16r5BB0 16r3A4C 16r5F69 16r3A4D 16r624D 16r3A4E 16r63A1 16r3A4F 16r683D 16r3A50 16r6B73 16r3A51 16r6E08 16r3A52 16r707D 16r3A53 16r91C7 16r3A54 16r7280 16r3A55 16r7815 16r3A56 16r7826 16r3A57 16r796D 16r3A58 16r658E 16r3A59 16r7D30 16r3A5A 16r83DC 16r3A5B 16r88C1 16r3A5C 16r8F09 16r3A5D 16r969B 16r3A5E 16r5264 16r3A5F 16r5728 16r3A60 16r6750 16r3A61 16r7F6A 16r3A62 16r8CA1 16r3A63 16r51B4 16r3A64 16r5742 16r3A65 16r962A 16r3A66 16r583A 16r3A67 16r698A 16r3A68 16r80B4 16r3A69 16r54B2 16r3A6A 16r5D0E 16r3A6B 16r57FC 16r3A6C 16r7895 16r3A6D 16r9DFA 16r3A6E 16r4F5C 16r3A6F 16r524A 16r3A70 16r548B 16r3A71 16r643E 16r3A72 16r6628 16r3A73 16r6714 16r3A74 16r67F5 16r3A75 16r7A84 16r3A76 16r7B56 16r3A77 16r7D22 16r3A78 16r932F 16r3A79 16r685C 16r3A7A 16r9BAD 16r3A7B 16r7B39 16r3A7C 16r5319 16r3A7D 16r518A 16r3A7E 16r5237 16r3B21 16r5BDF 16r3B22 16r62F6 16r3B23 16r64AE 16r3B24 16r64E6 16r3B25 16r672D 16r3B26 16r6BBA 16r3B27 16r85A9 16r3B28 16r96D1 16r3B29 16r7690 16r3B2A 16r9BD6 16r3B2B 16r634C 16r3B2C 16r9306 16r3B2D 16r9BAB 16r3B2E 16r76BF 16r3B2F 16r6652 16r3B30 16r4E09 16r3B31 16r5098 16r3B32 16r53C2 16r3B33 16r5C71 16r3B34 16r60E8 16r3B35 16r6492 16r3B36 16r6563 16r3B37 16r685F 16r3B38 16r71E6 16r3B39 16r73CA 16r3B3A 16r7523 16r3B3B 16r7B97 16r3B3C 16r7E82 16r3B3D 16r8695 16r3B3E 16r8B83 16r3B3F 16r8CDB 16r3B40 16r9178 16r3B41 16r9910 16r3B42 16r65AC 16r3B43 16r66AB 16r3B44 16r6B8B 16r3B45 16r4ED5 16r3B46 16r4ED4 16r3B47 16r4F3A 16r3B48 16r4F7F 16r3B49 16r523A 16r3B4A 16r53F8 16r3B4B 16r53F2 16r3B4C 16r55E3 16r3B4D 16r56DB 16r3B4E 16r58EB 16r3B4F 16r59CB 16r3B50 16r59C9 16r3B51 16r59FF 16r3B52 16r5B50 16r3B53 16r5C4D 16r3B54 16r5E02 16r3B55 16r5E2B 16r3B56 16r5FD7 16r3B57 16r601D 16r3B58 16r6307 16r3B59 16r652F 16r3B5A 16r5B5C 16r3B5B 16r65AF 16r3B5C 16r65BD 16r3B5D 16r65E8 16r3B5E 16r679D 16r3B5F 16r6B62 16r3B60 16r6B7B 16r3B61 16r6C0F 16r3B62 16r7345 16r3B63 16r7949 16r3B64 16r79C1 16r3B65 16r7CF8 16r3B66 16r7D19 16r3B67 16r7D2B 16r3B68 16r80A2 16r3B69 16r8102 16r3B6A 16r81F3 16r3B6B 16r8996 16r3B6C 16r8A5E 16r3B6D 16r8A69 16r3B6E 16r8A66 16r3B6F 16r8A8C 16r3B70 16r8AEE 16r3B71 16r8CC7 16r3B72 16r8CDC 16r3B73 16r96CC 16r3B74 16r98FC 16r3B75 16r6B6F 16r3B76 16r4E8B 16r3B77 16r4F3C 16r3B78 16r4F8D 16r3B79 16r5150 16r3B7A 16r5B57 16r3B7B 16r5BFA 16r3B7C 16r6148 16r3B7D 16r6301 16r3B7E 16r6642 16r3C21 16r6B21 16r3C22 16r6ECB 16r3C23 16r6CBB 16r3C24 16r723E 16r3C25 16r74BD 16r3C26 16r75D4 16r3C27 16r78C1 16r3C28 16r793A 16r3C29 16r800C 16r3C2A 16r8033 16r3C2B 16r81EA 16r3C2C 16r8494 16r3C2D 16r8F9E 16r3C2E 16r6C50 16r3C2F 16r9E7F 16r3C30 16r5F0F 16r3C31 16r8B58 16r3C32 16r9D2B 16r3C33 16r7AFA 16r3C34 16r8EF8 16r3C35 16r5B8D 16r3C36 16r96EB 16r3C37 16r4E03 16r3C38 16r53F1 16r3C39 16r57F7 16r3C3A 16r5931 16r3C3B 16r5AC9 16r3C3C 16r5BA4 16r3C3D 16r6089 16r3C3E 16r6E7F 16r3C3F 16r6F06 16r3C40 16r75BE 16r3C41 16r8CEA 16r3C42 16r5B9F 16r3C43 16r8500 16r3C44 16r7BE0 16r3C45 16r5072 16r3C46 16r67F4 16r3C47 16r829D 16r3C48 16r5C61 16r3C49 16r854A 16r3C4A 16r7E1E 16r3C4B 16r820E 16r3C4C 16r5199 16r3C4D 16r5C04 16r3C4E 16r6368 16r3C4F 16r8D66 16r3C50 16r659C 16r3C51 16r716E 16r3C52 16r793E 16r3C53 16r7D17 16r3C54 16r8005 16r3C55 16r8B1D 16r3C56 16r8ECA 16r3C57 16r906E 16r3C58 16r86C7 16r3C59 16r90AA 16r3C5A 16r501F 16r3C5B 16r52FA 16r3C5C 16r5C3A 16r3C5D 16r6753 16r3C5E 16r707C 16r3C5F 16r7235 16r3C60 16r914C 16r3C61 16r91C8 16r3C62 16r932B 16r3C63 16r82E5 16r3C64 16r5BC2 16r3C65 16r5F31 16r3C66 16r60F9 16r3C67 16r4E3B 16r3C68 16r53D6 16r3C69 16r5B88 16r3C6A 16r624B 16r3C6B 16r6731 16r3C6C 16r6B8A 16r3C6D 16r72E9 16r3C6E 16r73E0 16r3C6F 16r7A2E 16r3C70 16r816B 16r3C71 16r8DA3 16r3C72 16r9152 16r3C73 16r9996 16r3C74 16r5112 16r3C75 16r53D7 16r3C76 16r546A 16r3C77 16r5BFF 16r3C78 16r6388 16r3C79 16r6A39 16r3C7A 16r7DAC 16r3C7B 16r9700 16r3C7C 16r56DA 16r3C7D 16r53CE 16r3C7E 16r5468 16r3D21 16r5B97 16r3D22 16r5C31 16r3D23 16r5DDE 16r3D24 16r4FEE 16r3D25 16r6101 16r3D26 16r62FE 16r3D27 16r6D32 16r3D28 16r79C0 16r3D29 16r79CB 16r3D2A 16r7D42 16r3D2B 16r7E4D 16r3D2C 16r7FD2 16r3D2D 16r81ED 16r3D2E 16r821F 16r3D2F 16r8490 16r3D30 16r8846 16r3D31 16r8972 16r3D32 16r8B90 16r3D33 16r8E74 16r3D34 16r8F2F 16r3D35 16r9031 16r3D36 16r914B 16r3D37 16r916C 16r3D38 16r96C6 16r3D39 16r919C 16r3D3A 16r4EC0 16r3D3B 16r4F4F 16r3D3C 16r5145 16r3D3D 16r5341 16r3D3E 16r5F93 16r3D3F 16r620E 16r3D40 16r67D4 16r3D41 16r6C41 16r3D42 16r6E0B 16r3D43 16r7363 16r3D44 16r7E26 16r3D45 16r91CD 16r3D46 16r9283 16r3D47 16r53D4 16r3D48 16r5919 16r3D49 16r5BBF 16r3D4A 16r6DD1 16r3D4B 16r795D 16r3D4C 16r7E2E 16r3D4D 16r7C9B 16r3D4E 16r587E 16r3D4F 16r719F 16r3D50 16r51FA 16r3D51 16r8853 16r3D52 16r8FF0 16r3D53 16r4FCA 16r3D54 16r5CFB 16r3D55 16r6625 16r3D56 16r77AC 16r3D57 16r7AE3 16r3D58 16r821C 16r3D59 16r99FF 16r3D5A 16r51C6 16r3D5B 16r5FAA 16r3D5C 16r65EC 16r3D5D 16r696F 16r3D5E 16r6B89 16r3D5F 16r6DF3 16r3D60 16r6E96 16r3D61 16r6F64 16r3D62 16r76FE 16r3D63 16r7D14 16r3D64 16r5DE1 16r3D65 16r9075 16r3D66 16r9187 16r3D67 16r9806 16r3D68 16r51E6 16r3D69 16r521D 16r3D6A 16r6240 16r3D6B 16r6691 16r3D6C 16r66D9 16r3D6D 16r6E1A 16r3D6E 16r5EB6 16r3D6F 16r7DD2 16r3D70 16r7F72 16r3D71 16r66F8 16r3D72 16r85AF 16r3D73 16r85F7 16r3D74 16r8AF8 16r3D75 16r52A9 16r3D76 16r53D9 16r3D77 16r5973 16r3D78 16r5E8F 16r3D79 16r5F90 16r3D7A 16r6055 16r3D7B 16r92E4 16r3D7C 16r9664 16r3D7D 16r50B7 16r3D7E 16r511F 16r3E21 16r52DD 16r3E22 16r5320 16r3E23 16r5347 16r3E24 16r53EC 16r3E25 16r54E8 16r3E26 16r5546 16r3E27 16r5531 16r3E28 16r5617 16r3E29 16r5968 16r3E2A 16r59BE 16r3E2B 16r5A3C 16r3E2C 16r5BB5 16r3E2D 16r5C06 16r3E2E 16r5C0F 16r3E2F 16r5C11 16r3E30 16r5C1A 16r3E31 16r5E84 16r3E32 16r5E8A 16r3E33 16r5EE0 16r3E34 16r5F70 16r3E35 16r627F 16r3E36 16r6284 16r3E37 16r62DB 16r3E38 16r638C 16r3E39 16r6377 16r3E3A 16r6607 16r3E3B 16r660C 16r3E3C 16r662D 16r3E3D 16r6676 16r3E3E 16r677E 16r3E3F 16r68A2 16r3E40 16r6A1F 16r3E41 16r6A35 16r3E42 16r6CBC 16r3E43 16r6D88 16r3E44 16r6E09 16r3E45 16r6E58 16r3E46 16r713C 16r3E47 16r7126 16r3E48 16r7167 16r3E49 16r75C7 16r3E4A 16r7701 16r3E4B 16r785D 16r3E4C 16r7901 16r3E4D 16r7965 16r3E4E 16r79F0 16r3E4F 16r7AE0 16r3E50 16r7B11 16r3E51 16r7CA7 16r3E52 16r7D39 16r3E53 16r8096 16r3E54 16r83D6 16r3E55 16r848B 16r3E56 16r8549 16r3E57 16r885D 16r3E58 16r88F3 16r3E59 16r8A1F 16r3E5A 16r8A3C 16r3E5B 16r8A54 16r3E5C 16r8A73 16r3E5D 16r8C61 16r3E5E 16r8CDE 16r3E5F 16r91A4 16r3E60 16r9266 16r3E61 16r937E 16r3E62 16r9418 16r3E63 16r969C 16r3E64 16r9798 16r3E65 16r4E0A 16r3E66 16r4E08 16r3E67 16r4E1E 16r3E68 16r4E57 16r3E69 16r5197 16r3E6A 16r5270 16r3E6B 16r57CE 16r3E6C 16r5834 16r3E6D 16r58CC 16r3E6E 16r5B22 16r3E6F 16r5E38 16r3E70 16r60C5 16r3E71 16r64FE 16r3E72 16r6761 16r3E73 16r6756 16r3E74 16r6D44 16r3E75 16r72B6 16r3E76 16r7573 16r3E77 16r7A63 16r3E78 16r84B8 16r3E79 16r8B72 16r3E7A 16r91B8 16r3E7B 16r9320 16r3E7C 16r5631 16r3E7D 16r57F4 16r3E7E 16r98FE 16r3F21 16r62ED 16r3F22 16r690D 16r3F23 16r6B96 16r3F24 16r71ED 16r3F25 16r7E54 16r3F26 16r8077 16r3F27 16r8272 16r3F28 16r89E6 16r3F29 16r98DF 16r3F2A 16r8755 16r3F2B 16r8FB1 16r3F2C 16r5C3B 16r3F2D 16r4F38 16r3F2E 16r4FE1 16r3F2F 16r4FB5 16r3F30 16r5507 16r3F31 16r5A20 16r3F32 16r5BDD 16r3F33 16r5BE9 16r3F34 16r5FC3 16r3F35 16r614E 16r3F36 16r632F 16r3F37 16r65B0 16r3F38 16r664B 16r3F39 16r68EE 16r3F3A 16r699B 16r3F3B 16r6D78 16r3F3C 16r6DF1 16r3F3D 16r7533 16r3F3E 16r75B9 16r3F3F 16r771F 16r3F40 16r795E 16r3F41 16r79E6 16r3F42 16r7D33 16r3F43 16r81E3 16r3F44 16r82AF 16r3F45 16r85AA 16r3F46 16r89AA 16r3F47 16r8A3A 16r3F48 16r8EAB 16r3F49 16r8F9B 16r3F4A 16r9032 16r3F4B 16r91DD 16r3F4C 16r9707 16r3F4D 16r4EBA 16r3F4E 16r4EC1 16r3F4F 16r5203 16r3F50 16r5875 16r3F51 16r58EC 16r3F52 16r5C0B 16r3F53 16r751A 16r3F54 16r5C3D 16r3F55 16r814E 16r3F56 16r8A0A 16r3F57 16r8FC5 16r3F58 16r9663 16r3F59 16r976D 16r3F5A 16r7B25 16r3F5B 16r8ACF 16r3F5C 16r9808 16r3F5D 16r9162 16r3F5E 16r56F3 16r3F5F 16r53A8 16r3F60 16r9017 16r3F61 16r5439 16r3F62 16r5782 16r3F63 16r5E25 16r3F64 16r63A8 16r3F65 16r6C34 16r3F66 16r708A 16r3F67 16r7761 16r3F68 16r7C8B 16r3F69 16r7FE0 16r3F6A 16r8870 16r3F6B 16r9042 16r3F6C 16r9154 16r3F6D 16r9310 16r3F6E 16r9318 16r3F6F 16r968F 16r3F70 16r745E 16r3F71 16r9AC4 16r3F72 16r5D07 16r3F73 16r5D69 16r3F74 16r6570 16r3F75 16r67A2 16r3F76 16r8DA8 16r3F77 16r96DB 16r3F78 16r636E 16r3F79 16r6749 16r3F7A 16r6919 16r3F7B 16r83C5 16r3F7C 16r9817 16r3F7D 16r96C0 16r3F7E 16r88FE 16r4021 16r6F84 16r4022 16r647A 16r4023 16r5BF8 16r4024 16r4E16 16r4025 16r702C 16r4026 16r755D 16r4027 16r662F 16r4028 16r51C4 16r4029 16r5236 16r402A 16r52E2 16r402B 16r59D3 16r402C 16r5F81 16r402D 16r6027 16r402E 16r6210 16r402F 16r653F 16r4030 16r6574 16r4031 16r661F 16r4032 16r6674 16r4033 16r68F2 16r4034 16r6816 16r4035 16r6B63 16r4036 16r6E05 16r4037 16r7272 16r4038 16r751F 16r4039 16r76DB 16r403A 16r7CBE 16r403B 16r8056 16r403C 16r58F0 16r403D 16r88FD 16r403E 16r897F 16r403F 16r8AA0 16r4040 16r8A93 16r4041 16r8ACB 16r4042 16r901D 16r4043 16r9192 16r4044 16r9752 16r4045 16r9759 16r4046 16r6589 16r4047 16r7A0E 16r4048 16r8106 16r4049 16r96BB 16r404A 16r5E2D 16r404B 16r60DC 16r404C 16r621A 16r404D 16r65A5 16r404E 16r6614 16r404F 16r6790 16r4050 16r77F3 16r4051 16r7A4D 16r4052 16r7C4D 16r4053 16r7E3E 16r4054 16r810A 16r4055 16r8CAC 16r4056 16r8D64 16r4057 16r8DE1 16r4058 16r8E5F 16r4059 16r78A9 16r405A 16r5207 16r405B 16r62D9 16r405C 16r63A5 16r405D 16r6442 16r405E 16r6298 16r405F 16r8A2D 16r4060 16r7A83 16r4061 16r7BC0 16r4062 16r8AAC 16r4063 16r96EA 16r4064 16r7D76 16r4065 16r820C 16r4066 16r8749 16r4067 16r4ED9 16r4068 16r5148 16r4069 16r5343 16r406A 16r5360 16r406B 16r5BA3 16r406C 16r5C02 16r406D 16r5C16 16r406E 16r5DDD 16r406F 16r6226 16r4070 16r6247 16r4071 16r64B0 16r4072 16r6813 16r4073 16r6834 16r4074 16r6CC9 16r4075 16r6D45 16r4076 16r6D17 16r4077 16r67D3 16r4078 16r6F5C 16r4079 16r714E 16r407A 16r717D 16r407B 16r65CB 16r407C 16r7A7F 16r407D 16r7BAD 16r407E 16r7DDA 16r4121 16r7E4A 16r4122 16r7FA8 16r4123 16r817A 16r4124 16r821B 16r4125 16r8239 16r4126 16r85A6 16r4127 16r8A6E 16r4128 16r8CCE 16r4129 16r8DF5 16r412A 16r9078 16r412B 16r9077 16r412C 16r92AD 16r412D 16r9291 16r412E 16r9583 16r412F 16r9BAE 16r4130 16r524D 16r4131 16r5584 16r4132 16r6F38 16r4133 16r7136 16r4134 16r5168 16r4135 16r7985 16r4136 16r7E55 16r4137 16r81B3 16r4138 16r7CCE 16r4139 16r564C 16r413A 16r5851 16r413B 16r5CA8 16r413C 16r63AA 16r413D 16r66FE 16r413E 16r66FD 16r413F 16r695A 16r4140 16r72D9 16r4141 16r758F 16r4142 16r758E 16r4143 16r790E 16r4144 16r7956 16r4145 16r79DF 16r4146 16r7C97 16r4147 16r7D20 16r4148 16r7D44 16r4149 16r8607 16r414A 16r8A34 16r414B 16r963B 16r414C 16r9061 16r414D 16r9F20 16r414E 16r50E7 16r414F 16r5275 16r4150 16r53CC 16r4151 16r53E2 16r4152 16r5009 16r4153 16r55AA 16r4154 16r58EE 16r4155 16r594F 16r4156 16r723D 16r4157 16r5B8B 16r4158 16r5C64 16r4159 16r531D 16r415A 16r60E3 16r415B 16r60F3 16r415C 16r635C 16r415D 16r6383 16r415E 16r633F 16r415F 16r63BB 16r4160 16r64CD 16r4161 16r65E9 16r4162 16r66F9 16r4163 16r5DE3 16r4164 16r69CD 16r4165 16r69FD 16r4166 16r6F15 16r4167 16r71E5 16r4168 16r4E89 16r4169 16r75E9 16r416A 16r76F8 16r416B 16r7A93 16r416C 16r7CDF 16r416D 16r7DCF 16r416E 16r7D9C 16r416F 16r8061 16r4170 16r8349 16r4171 16r8358 16r4172 16r846C 16r4173 16r84BC 16r4174 16r85FB 16r4175 16r88C5 16r4176 16r8D70 16r4177 16r9001 16r4178 16r906D 16r4179 16r9397 16r417A 16r971C 16r417B 16r9A12 16r417C 16r50CF 16r417D 16r5897 16r417E 16r618E 16r4221 16r81D3 16r4222 16r8535 16r4223 16r8D08 16r4224 16r9020 16r4225 16r4FC3 16r4226 16r5074 16r4227 16r5247 16r4228 16r5373 16r4229 16r606F 16r422A 16r6349 16r422B 16r675F 16r422C 16r6E2C 16r422D 16r8DB3 16r422E 16r901F 16r422F 16r4FD7 16r4230 16r5C5E 16r4231 16r8CCA 16r4232 16r65CF 16r4233 16r7D9A 16r4234 16r5352 16r4235 16r8896 16r4236 16r5176 16r4237 16r63C3 16r4238 16r5B58 16r4239 16r5B6B 16r423A 16r5C0A 16r423B 16r640D 16r423C 16r6751 16r423D 16r905C 16r423E 16r4ED6 16r423F 16r591A 16r4240 16r592A 16r4241 16r6C70 16r4242 16r8A51 16r4243 16r553E 16r4244 16r5815 16r4245 16r59A5 16r4246 16r60F0 16r4247 16r6253 16r4248 16r67C1 16r4249 16r8235 16r424A 16r6955 16r424B 16r9640 16r424C 16r99C4 16r424D 16r9A28 16r424E 16r4F53 16r424F 16r5806 16r4250 16r5BFE 16r4251 16r8010 16r4252 16r5CB1 16r4253 16r5E2F 16r4254 16r5F85 16r4255 16r6020 16r4256 16r614B 16r4257 16r6234 16r4258 16r66FF 16r4259 16r6CF0 16r425A 16r6EDE 16r425B 16r80CE 16r425C 16r817F 16r425D 16r82D4 16r425E 16r888B 16r425F 16r8CB8 16r4260 16r9000 16r4261 16r902E 16r4262 16r968A 16r4263 16r9EDB 16r4264 16r9BDB 16r4265 16r4EE3 16r4266 16r53F0 16r4267 16r5927 16r4268 16r7B2C 16r4269 16r918D 16r426A 16r984C 16r426B 16r9DF9 16r426C 16r6EDD 16r426D 16r7027 16r426E 16r5353 16r426F 16r5544 16r4270 16r5B85 16r4271 16r6258 16r4272 16r629E 16r4273 16r62D3 16r4274 16r6CA2 16r4275 16r6FEF 16r4276 16r7422 16r4277 16r8A17 16r4278 16r9438 16r4279 16r6FC1 16r427A 16r8AFE 16r427B 16r8338 16r427C 16r51E7 16r427D 16r86F8 16r427E 16r53EA 16r4321 16r53E9 16r4322 16r4F46 16r4323 16r9054 16r4324 16r8FB0 16r4325 16r596A 16r4326 16r8131 16r4327 16r5DFD 16r4328 16r7AEA 16r4329 16r8FBF 16r432A 16r68DA 16r432B 16r8C37 16r432C 16r72F8 16r432D 16r9C48 16r432E 16r6A3D 16r432F 16r8AB0 16r4330 16r4E39 16r4331 16r5358 16r4332 16r5606 16r4333 16r5766 16r4334 16r62C5 16r4335 16r63A2 16r4336 16r65E6 16r4337 16r6B4E 16r4338 16r6DE1 16r4339 16r6E5B 16r433A 16r70AD 16r433B 16r77ED 16r433C 16r7AEF 16r433D 16r7BAA 16r433E 16r7DBB 16r433F 16r803D 16r4340 16r80C6 16r4341 16r86CB 16r4342 16r8A95 16r4343 16r935B 16r4344 16r56E3 16r4345 16r58C7 16r4346 16r5F3E 16r4347 16r65AD 16r4348 16r6696 16r4349 16r6A80 16r434A 16r6BB5 16r434B 16r7537 16r434C 16r8AC7 16r434D 16r5024 16r434E 16r77E5 16r434F 16r5730 16r4350 16r5F1B 16r4351 16r6065 16r4352 16r667A 16r4353 16r6C60 16r4354 16r75F4 16r4355 16r7A1A 16r4356 16r7F6E 16r4357 16r81F4 16r4358 16r8718 16r4359 16r9045 16r435A 16r99B3 16r435B 16r7BC9 16r435C 16r755C 16r435D 16r7AF9 16r435E 16r7B51 16r435F 16r84C4 16r4360 16r9010 16r4361 16r79E9 16r4362 16r7A92 16r4363 16r8336 16r4364 16r5AE1 16r4365 16r7740 16r4366 16r4E2D 16r4367 16r4EF2 16r4368 16r5B99 16r4369 16r5FE0 16r436A 16r62BD 16r436B 16r663C 16r436C 16r67F1 16r436D 16r6CE8 16r436E 16r866B 16r436F 16r8877 16r4370 16r8A3B 16r4371 16r914E 16r4372 16r92F3 16r4373 16r99D0 16r4374 16r6A17 16r4375 16r7026 16r4376 16r732A 16r4377 16r82E7 16r4378 16r8457 16r4379 16r8CAF 16r437A 16r4E01 16r437B 16r5146 16r437C 16r51CB 16r437D 16r558B 16r437E 16r5BF5 16r4421 16r5E16 16r4422 16r5E33 16r4423 16r5E81 16r4424 16r5F14 16r4425 16r5F35 16r4426 16r5F6B 16r4427 16r5FB4 16r4428 16r61F2 16r4429 16r6311 16r442A 16r66A2 16r442B 16r671D 16r442C 16r6F6E 16r442D 16r7252 16r442E 16r753A 16r442F 16r773A 16r4430 16r8074 16r4431 16r8139 16r4432 16r8178 16r4433 16r8776 16r4434 16r8ABF 16r4435 16r8ADC 16r4436 16r8D85 16r4437 16r8DF3 16r4438 16r929A 16r4439 16r9577 16r443A 16r9802 16r443B 16r9CE5 16r443C 16r52C5 16r443D 16r6357 16r443E 16r76F4 16r443F 16r6715 16r4440 16r6C88 16r4441 16r73CD 16r4442 16r8CC3 16r4443 16r93AE 16r4444 16r9673 16r4445 16r6D25 16r4446 16r589C 16r4447 16r690E 16r4448 16r69CC 16r4449 16r8FFD 16r444A 16r939A 16r444B 16r75DB 16r444C 16r901A 16r444D 16r585A 16r444E 16r6802 16r444F 16r63B4 16r4450 16r69FB 16r4451 16r4F43 16r4452 16r6F2C 16r4453 16r67D8 16r4454 16r8FBB 16r4455 16r8526 16r4456 16r7DB4 16r4457 16r9354 16r4458 16r693F 16r4459 16r6F70 16r445A 16r576A 16r445B 16r58F7 16r445C 16r5B2C 16r445D 16r7D2C 16r445E 16r722A 16r445F 16r540A 16r4460 16r91E3 16r4461 16r9DB4 16r4462 16r4EAD 16r4463 16r4F4E 16r4464 16r505C 16r4465 16r5075 16r4466 16r5243 16r4467 16r8C9E 16r4468 16r5448 16r4469 16r5824 16r446A 16r5B9A 16r446B 16r5E1D 16r446C 16r5E95 16r446D 16r5EAD 16r446E 16r5EF7 16r446F 16r5F1F 16r4470 16r608C 16r4471 16r62B5 16r4472 16r633A 16r4473 16r63D0 16r4474 16r68AF 16r4475 16r6C40 16r4476 16r7887 16r4477 16r798E 16r4478 16r7A0B 16r4479 16r7DE0 16r447A 16r8247 16r447B 16r8A02 16r447C 16r8AE6 16r447D 16r8E44 16r447E 16r9013 16r4521 16r90B8 16r4522 16r912D 16r4523 16r91D8 16r4524 16r9F0E 16r4525 16r6CE5 16r4526 16r6458 16r4527 16r64E2 16r4528 16r6575 16r4529 16r6EF4 16r452A 16r7684 16r452B 16r7B1B 16r452C 16r9069 16r452D 16r93D1 16r452E 16r6EBA 16r452F 16r54F2 16r4530 16r5FB9 16r4531 16r64A4 16r4532 16r8F4D 16r4533 16r8FED 16r4534 16r9244 16r4535 16r5178 16r4536 16r586B 16r4537 16r5929 16r4538 16r5C55 16r4539 16r5E97 16r453A 16r6DFB 16r453B 16r7E8F 16r453C 16r751C 16r453D 16r8CBC 16r453E 16r8EE2 16r453F 16r985B 16r4540 16r70B9 16r4541 16r4F1D 16r4542 16r6BBF 16r4543 16r6FB1 16r4544 16r7530 16r4545 16r96FB 16r4546 16r514E 16r4547 16r5410 16r4548 16r5835 16r4549 16r5857 16r454A 16r59AC 16r454B 16r5C60 16r454C 16r5F92 16r454D 16r6597 16r454E 16r675C 16r454F 16r6E21 16r4550 16r767B 16r4551 16r83DF 16r4552 16r8CED 16r4553 16r9014 16r4554 16r90FD 16r4555 16r934D 16r4556 16r7825 16r4557 16r783A 16r4558 16r52AA 16r4559 16r5EA6 16r455A 16r571F 16r455B 16r5974 16r455C 16r6012 16r455D 16r5012 16r455E 16r515A 16r455F 16r51AC 16r4560 16r51CD 16r4561 16r5200 16r4562 16r5510 16r4563 16r5854 16r4564 16r5858 16r4565 16r5957 16r4566 16r5B95 16r4567 16r5CF6 16r4568 16r5D8B 16r4569 16r60BC 16r456A 16r6295 16r456B 16r642D 16r456C 16r6771 16r456D 16r6843 16r456E 16r68BC 16r456F 16r68DF 16r4570 16r76D7 16r4571 16r6DD8 16r4572 16r6E6F 16r4573 16r6D9B 16r4574 16r706F 16r4575 16r71C8 16r4576 16r5F53 16r4577 16r75D8 16r4578 16r7977 16r4579 16r7B49 16r457A 16r7B54 16r457B 16r7B52 16r457C 16r7CD6 16r457D 16r7D71 16r457E 16r5230 16r4621 16r8463 16r4622 16r8569 16r4623 16r85E4 16r4624 16r8A0E 16r4625 16r8B04 16r4626 16r8C46 16r4627 16r8E0F 16r4628 16r9003 16r4629 16r900F 16r462A 16r9419 16r462B 16r9676 16r462C 16r982D 16r462D 16r9A30 16r462E 16r95D8 16r462F 16r50CD 16r4630 16r52D5 16r4631 16r540C 16r4632 16r5802 16r4633 16r5C0E 16r4634 16r61A7 16r4635 16r649E 16r4636 16r6D1E 16r4637 16r77B3 16r4638 16r7AE5 16r4639 16r80F4 16r463A 16r8404 16r463B 16r9053 16r463C 16r9285 16r463D 16r5CE0 16r463E 16r9D07 16r463F 16r533F 16r4640 16r5F97 16r4641 16r5FB3 16r4642 16r6D9C 16r4643 16r7279 16r4644 16r7763 16r4645 16r79BF 16r4646 16r7BE4 16r4647 16r6BD2 16r4648 16r72EC 16r4649 16r8AAD 16r464A 16r6803 16r464B 16r6A61 16r464C 16r51F8 16r464D 16r7A81 16r464E 16r6934 16r464F 16r5C4A 16r4650 16r9CF6 16r4651 16r82EB 16r4652 16r5BC5 16r4653 16r9149 16r4654 16r701E 16r4655 16r5678 16r4656 16r5C6F 16r4657 16r60C7 16r4658 16r6566 16r4659 16r6C8C 16r465A 16r8C5A 16r465B 16r9041 16r465C 16r9813 16r465D 16r5451 16r465E 16r66C7 16r465F 16r920D 16r4660 16r5948 16r4661 16r90A3 16r4662 16r5185 16r4663 16r4E4D 16r4664 16r51EA 16r4665 16r8599 16r4666 16r8B0E 16r4667 16r7058 16r4668 16r637A 16r4669 16r934B 16r466A 16r6962 16r466B 16r99B4 16r466C 16r7E04 16r466D 16r7577 16r466E 16r5357 16r466F 16r6960 16r4670 16r8EDF 16r4671 16r96E3 16r4672 16r6C5D 16r4673 16r4E8C 16r4674 16r5C3C 16r4675 16r5F10 16r4676 16r8FE9 16r4677 16r5302 16r4678 16r8CD1 16r4679 16r8089 16r467A 16r8679 16r467B 16r5EFF 16r467C 16r65E5 16r467D 16r4E73 16r467E 16r5165 16r4721 16r5982 16r4722 16r5C3F 16r4723 16r97EE 16r4724 16r4EFB 16r4725 16r598A 16r4726 16r5FCD 16r4727 16r8A8D 16r4728 16r6FE1 16r4729 16r79B0 16r472A 16r7962 16r472B 16r5BE7 16r472C 16r8471 16r472D 16r732B 16r472E 16r71B1 16r472F 16r5E74 16r4730 16r5FF5 16r4731 16r637B 16r4732 16r649A 16r4733 16r71C3 16r4734 16r7C98 16r4735 16r4E43 16r4736 16r5EFC 16r4737 16r4E4B 16r4738 16r57DC 16r4739 16r56A2 16r473A 16r60A9 16r473B 16r6FC3 16r473C 16r7D0D 16r473D 16r80FD 16r473E 16r8133 16r473F 16r81BF 16r4740 16r8FB2 16r4741 16r8997 16r4742 16r86A4 16r4743 16r5DF4 16r4744 16r628A 16r4745 16r64AD 16r4746 16r8987 16r4747 16r6777 16r4748 16r6CE2 16r4749 16r6D3E 16r474A 16r7436 16r474B 16r7834 16r474C 16r5A46 16r474D 16r7F75 16r474E 16r82AD 16r474F 16r99AC 16r4750 16r4FF3 16r4751 16r5EC3 16r4752 16r62DD 16r4753 16r6392 16r4754 16r6557 16r4755 16r676F 16r4756 16r76C3 16r4757 16r724C 16r4758 16r80CC 16r4759 16r80BA 16r475A 16r8F29 16r475B 16r914D 16r475C 16r500D 16r475D 16r57F9 16r475E 16r5A92 16r475F 16r6885 16r4760 16r6973 16r4761 16r7164 16r4762 16r72FD 16r4763 16r8CB7 16r4764 16r58F2 16r4765 16r8CE0 16r4766 16r966A 16r4767 16r9019 16r4768 16r877F 16r4769 16r79E4 16r476A 16r77E7 16r476B 16r8429 16r476C 16r4F2F 16r476D 16r5265 16r476E 16r535A 16r476F 16r62CD 16r4770 16r67CF 16r4771 16r6CCA 16r4772 16r767D 16r4773 16r7B94 16r4774 16r7C95 16r4775 16r8236 16r4776 16r8584 16r4777 16r8FEB 16r4778 16r66DD 16r4779 16r6F20 16r477A 16r7206 16r477B 16r7E1B 16r477C 16r83AB 16r477D 16r99C1 16r477E 16r9EA6 16r4821 16r51FD 16r4822 16r7BB1 16r4823 16r7872 16r4824 16r7BB8 16r4825 16r8087 16r4826 16r7B48 16r4827 16r6AE8 16r4828 16r5E61 16r4829 16r808C 16r482A 16r7551 16r482B 16r7560 16r482C 16r516B 16r482D 16r9262 16r482E 16r6E8C 16r482F 16r767A 16r4830 16r9197 16r4831 16r9AEA 16r4832 16r4F10 16r4833 16r7F70 16r4834 16r629C 16r4835 16r7B4F 16r4836 16r95A5 16r4837 16r9CE9 16r4838 16r567A 16r4839 16r5859 16r483A 16r86E4 16r483B 16r96BC 16r483C 16r4F34 16r483D 16r5224 16r483E 16r534A 16r483F 16r53CD 16r4840 16r53DB 16r4841 16r5E06 16r4842 16r642C 16r4843 16r6591 16r4844 16r677F 16r4845 16r6C3E 16r4846 16r6C4E 16r4847 16r7248 16r4848 16r72AF 16r4849 16r73ED 16r484A 16r7554 16r484B 16r7E41 16r484C 16r822C 16r484D 16r85E9 16r484E 16r8CA9 16r484F 16r7BC4 16r4850 16r91C6 16r4851 16r7169 16r4852 16r9812 16r4853 16r98EF 16r4854 16r633D 16r4855 16r6669 16r4856 16r756A 16r4857 16r76E4 16r4858 16r78D0 16r4859 16r8543 16r485A 16r86EE 16r485B 16r532A 16r485C 16r5351 16r485D 16r5426 16r485E 16r5983 16r485F 16r5E87 16r4860 16r5F7C 16r4861 16r60B2 16r4862 16r6249 16r4863 16r6279 16r4864 16r62AB 16r4865 16r6590 16r4866 16r6BD4 16r4867 16r6CCC 16r4868 16r75B2 16r4869 16r76AE 16r486A 16r7891 16r486B 16r79D8 16r486C 16r7DCB 16r486D 16r7F77 16r486E 16r80A5 16r486F 16r88AB 16r4870 16r8AB9 16r4871 16r8CBB 16r4872 16r907F 16r4873 16r975E 16r4874 16r98DB 16r4875 16r6A0B 16r4876 16r7C38 16r4877 16r5099 16r4878 16r5C3E 16r4879 16r5FAE 16r487A 16r6787 16r487B 16r6BD8 16r487C 16r7435 16r487D 16r7709 16r487E 16r7F8E 16r4921 16r9F3B 16r4922 16r67CA 16r4923 16r7A17 16r4924 16r5339 16r4925 16r758B 16r4926 16r9AED 16r4927 16r5F66 16r4928 16r819D 16r4929 16r83F1 16r492A 16r8098 16r492B 16r5F3C 16r492C 16r5FC5 16r492D 16r7562 16r492E 16r7B46 16r492F 16r903C 16r4930 16r6867 16r4931 16r59EB 16r4932 16r5A9B 16r4933 16r7D10 16r4934 16r767E 16r4935 16r8B2C 16r4936 16r4FF5 16r4937 16r5F6A 16r4938 16r6A19 16r4939 16r6C37 16r493A 16r6F02 16r493B 16r74E2 16r493C 16r7968 16r493D 16r8868 16r493E 16r8A55 16r493F 16r8C79 16r4940 16r5EDF 16r4941 16r63CF 16r4942 16r75C5 16r4943 16r79D2 16r4944 16r82D7 16r4945 16r9328 16r4946 16r92F2 16r4947 16r849C 16r4948 16r86ED 16r4949 16r9C2D 16r494A 16r54C1 16r494B 16r5F6C 16r494C 16r658C 16r494D 16r6D5C 16r494E 16r7015 16r494F 16r8CA7 16r4950 16r8CD3 16r4951 16r983B 16r4952 16r654F 16r4953 16r74F6 16r4954 16r4E0D 16r4955 16r4ED8 16r4956 16r57E0 16r4957 16r592B 16r4958 16r5A66 16r4959 16r5BCC 16r495A 16r51A8 16r495B 16r5E03 16r495C 16r5E9C 16r495D 16r6016 16r495E 16r6276 16r495F 16r6577 16r4960 16r65A7 16r4961 16r666E 16r4962 16r6D6E 16r4963 16r7236 16r4964 16r7B26 16r4965 16r8150 16r4966 16r819A 16r4967 16r8299 16r4968 16r8B5C 16r4969 16r8CA0 16r496A 16r8CE6 16r496B 16r8D74 16r496C 16r961C 16r496D 16r9644 16r496E 16r4FAE 16r496F 16r64AB 16r4970 16r6B66 16r4971 16r821E 16r4972 16r8461 16r4973 16r856A 16r4974 16r90E8 16r4975 16r5C01 16r4976 16r6953 16r4977 16r98A8 16r4978 16r847A 16r4979 16r8557 16r497A 16r4F0F 16r497B 16r526F 16r497C 16r5FA9 16r497D 16r5E45 16r497E 16r670D 16r4A21 16r798F 16r4A22 16r8179 16r4A23 16r8907 16r4A24 16r8986 16r4A25 16r6DF5 16r4A26 16r5F17 16r4A27 16r6255 16r4A28 16r6CB8 16r4A29 16r4ECF 16r4A2A 16r7269 16r4A2B 16r9B92 16r4A2C 16r5206 16r4A2D 16r543B 16r4A2E 16r5674 16r4A2F 16r58B3 16r4A30 16r61A4 16r4A31 16r626E 16r4A32 16r711A 16r4A33 16r596E 16r4A34 16r7C89 16r4A35 16r7CDE 16r4A36 16r7D1B 16r4A37 16r96F0 16r4A38 16r6587 16r4A39 16r805E 16r4A3A 16r4E19 16r4A3B 16r4F75 16r4A3C 16r5175 16r4A3D 16r5840 16r4A3E 16r5E63 16r4A3F 16r5E73 16r4A40 16r5F0A 16r4A41 16r67C4 16r4A42 16r4E26 16r4A43 16r853D 16r4A44 16r9589 16r4A45 16r965B 16r4A46 16r7C73 16r4A47 16r9801 16r4A48 16r50FB 16r4A49 16r58C1 16r4A4A 16r7656 16r4A4B 16r78A7 16r4A4C 16r5225 16r4A4D 16r77A5 16r4A4E 16r8511 16r4A4F 16r7B86 16r4A50 16r504F 16r4A51 16r5909 16r4A52 16r7247 16r4A53 16r7BC7 16r4A54 16r7DE8 16r4A55 16r8FBA 16r4A56 16r8FD4 16r4A57 16r904D 16r4A58 16r4FBF 16r4A59 16r52C9 16r4A5A 16r5A29 16r4A5B 16r5F01 16r4A5C 16r97AD 16r4A5D 16r4FDD 16r4A5E 16r8217 16r4A5F 16r92EA 16r4A60 16r5703 16r4A61 16r6355 16r4A62 16r6B69 16r4A63 16r752B 16r4A64 16r88DC 16r4A65 16r8F14 16r4A66 16r7A42 16r4A67 16r52DF 16r4A68 16r5893 16r4A69 16r6155 16r4A6A 16r620A 16r4A6B 16r66AE 16r4A6C 16r6BCD 16r4A6D 16r7C3F 16r4A6E 16r83E9 16r4A6F 16r5023 16r4A70 16r4FF8 16r4A71 16r5305 16r4A72 16r5446 16r4A73 16r5831 16r4A74 16r5949 16r4A75 16r5B9D 16r4A76 16r5CF0 16r4A77 16r5CEF 16r4A78 16r5D29 16r4A79 16r5E96 16r4A7A 16r62B1 16r4A7B 16r6367 16r4A7C 16r653E 16r4A7D 16r65B9 16r4A7E 16r670B 16r4B21 16r6CD5 16r4B22 16r6CE1 16r4B23 16r70F9 16r4B24 16r7832 16r4B25 16r7E2B 16r4B26 16r80DE 16r4B27 16r82B3 16r4B28 16r840C 16r4B29 16r84EC 16r4B2A 16r8702 16r4B2B 16r8912 16r4B2C 16r8A2A 16r4B2D 16r8C4A 16r4B2E 16r90A6 16r4B2F 16r92D2 16r4B30 16r98FD 16r4B31 16r9CF3 16r4B32 16r9D6C 16r4B33 16r4E4F 16r4B34 16r4EA1 16r4B35 16r508D 16r4B36 16r5256 16r4B37 16r574A 16r4B38 16r59A8 16r4B39 16r5E3D 16r4B3A 16r5FD8 16r4B3B 16r5FD9 16r4B3C 16r623F 16r4B3D 16r66B4 16r4B3E 16r671B 16r4B3F 16r67D0 16r4B40 16r68D2 16r4B41 16r5192 16r4B42 16r7D21 16r4B43 16r80AA 16r4B44 16r81A8 16r4B45 16r8B00 16r4B46 16r8C8C 16r4B47 16r8CBF 16r4B48 16r927E 16r4B49 16r9632 16r4B4A 16r5420 16r4B4B 16r982C 16r4B4C 16r5317 16r4B4D 16r50D5 16r4B4E 16r535C 16r4B4F 16r58A8 16r4B50 16r64B2 16r4B51 16r6734 16r4B52 16r7267 16r4B53 16r7766 16r4B54 16r7A46 16r4B55 16r91E6 16r4B56 16r52C3 16r4B57 16r6CA1 16r4B58 16r6B86 16r4B59 16r5800 16r4B5A 16r5E4C 16r4B5B 16r5954 16r4B5C 16r672C 16r4B5D 16r7FFB 16r4B5E 16r51E1 16r4B5F 16r76C6 16r4B60 16r6469 16r4B61 16r78E8 16r4B62 16r9B54 16r4B63 16r9EBB 16r4B64 16r57CB 16r4B65 16r59B9 16r4B66 16r6627 16r4B67 16r679A 16r4B68 16r6BCE 16r4B69 16r54E9 16r4B6A 16r69D9 16r4B6B 16r5E55 16r4B6C 16r819C 16r4B6D 16r6795 16r4B6E 16r9BAA 16r4B6F 16r67FE 16r4B70 16r9C52 16r4B71 16r685D 16r4B72 16r4EA6 16r4B73 16r4FE3 16r4B74 16r53C8 16r4B75 16r62B9 16r4B76 16r672B 16r4B77 16r6CAB 16r4B78 16r8FC4 16r4B79 16r4FAD 16r4B7A 16r7E6D 16r4B7B 16r9EBF 16r4B7C 16r4E07 16r4B7D 16r6162 16r4B7E 16r6E80 16r4C21 16r6F2B 16r4C22 16r8513 16r4C23 16r5473 16r4C24 16r672A 16r4C25 16r9B45 16r4C26 16r5DF3 16r4C27 16r7B95 16r4C28 16r5CAC 16r4C29 16r5BC6 16r4C2A 16r871C 16r4C2B 16r6E4A 16r4C2C 16r84D1 16r4C2D 16r7A14 16r4C2E 16r8108 16r4C2F 16r5999 16r4C30 16r7C8D 16r4C31 16r6C11 16r4C32 16r7720 16r4C33 16r52D9 16r4C34 16r5922 16r4C35 16r7121 16r4C36 16r725F 16r4C37 16r77DB 16r4C38 16r9727 16r4C39 16r9D61 16r4C3A 16r690B 16r4C3B 16r5A7F 16r4C3C 16r5A18 16r4C3D 16r51A5 16r4C3E 16r540D 16r4C3F 16r547D 16r4C40 16r660E 16r4C41 16r76DF 16r4C42 16r8FF7 16r4C43 16r9298 16r4C44 16r9CF4 16r4C45 16r59EA 16r4C46 16r725D 16r4C47 16r6EC5 16r4C48 16r514D 16r4C49 16r68C9 16r4C4A 16r7DBF 16r4C4B 16r7DEC 16r4C4C 16r9762 16r4C4D 16r9EBA 16r4C4E 16r6478 16r4C4F 16r6A21 16r4C50 16r8302 16r4C51 16r5984 16r4C52 16r5B5F 16r4C53 16r6BDB 16r4C54 16r731B 16r4C55 16r76F2 16r4C56 16r7DB2 16r4C57 16r8017 16r4C58 16r8499 16r4C59 16r5132 16r4C5A 16r6728 16r4C5B 16r9ED9 16r4C5C 16r76EE 16r4C5D 16r6762 16r4C5E 16r52FF 16r4C5F 16r9905 16r4C60 16r5C24 16r4C61 16r623B 16r4C62 16r7C7E 16r4C63 16r8CB0 16r4C64 16r554F 16r4C65 16r60B6 16r4C66 16r7D0B 16r4C67 16r9580 16r4C68 16r5301 16r4C69 16r4E5F 16r4C6A 16r51B6 16r4C6B 16r591C 16r4C6C 16r723A 16r4C6D 16r8036 16r4C6E 16r91CE 16r4C6F 16r5F25 16r4C70 16r77E2 16r4C71 16r5384 16r4C72 16r5F79 16r4C73 16r7D04 16r4C74 16r85AC 16r4C75 16r8A33 16r4C76 16r8E8D 16r4C77 16r9756 16r4C78 16r67F3 16r4C79 16r85AE 16r4C7A 16r9453 16r4C7B 16r6109 16r4C7C 16r6108 16r4C7D 16r6CB9 16r4C7E 16r7652 16r4D21 16r8AED 16r4D22 16r8F38 16r4D23 16r552F 16r4D24 16r4F51 16r4D25 16r512A 16r4D26 16r52C7 16r4D27 16r53CB 16r4D28 16r5BA5 16r4D29 16r5E7D 16r4D2A 16r60A0 16r4D2B 16r6182 16r4D2C 16r63D6 16r4D2D 16r6709 16r4D2E 16r67DA 16r4D2F 16r6E67 16r4D30 16r6D8C 16r4D31 16r7336 16r4D32 16r7337 16r4D33 16r7531 16r4D34 16r7950 16r4D35 16r88D5 16r4D36 16r8A98 16r4D37 16r904A 16r4D38 16r9091 16r4D39 16r90F5 16r4D3A 16r96C4 16r4D3B 16r878D 16r4D3C 16r5915 16r4D3D 16r4E88 16r4D3E 16r4F59 16r4D3F 16r4E0E 16r4D40 16r8A89 16r4D41 16r8F3F 16r4D42 16r9810 16r4D43 16r50AD 16r4D44 16r5E7C 16r4D45 16r5996 16r4D46 16r5BB9 16r4D47 16r5EB8 16r4D48 16r63DA 16r4D49 16r63FA 16r4D4A 16r64C1 16r4D4B 16r66DC 16r4D4C 16r694A 16r4D4D 16r69D8 16r4D4E 16r6D0B 16r4D4F 16r6EB6 16r4D50 16r7194 16r4D51 16r7528 16r4D52 16r7AAF 16r4D53 16r7F8A 16r4D54 16r8000 16r4D55 16r8449 16r4D56 16r84C9 16r4D57 16r8981 16r4D58 16r8B21 16r4D59 16r8E0A 16r4D5A 16r9065 16r4D5B 16r967D 16r4D5C 16r990A 16r4D5D 16r617E 16r4D5E 16r6291 16r4D5F 16r6B32 16r4D60 16r6C83 16r4D61 16r6D74 16r4D62 16r7FCC 16r4D63 16r7FFC 16r4D64 16r6DC0 16r4D65 16r7F85 16r4D66 16r87BA 16r4D67 16r88F8 16r4D68 16r6765 16r4D69 16r83B1 16r4D6A 16r983C 16r4D6B 16r96F7 16r4D6C 16r6D1B 16r4D6D 16r7D61 16r4D6E 16r843D 16r4D6F 16r916A 16r4D70 16r4E71 16r4D71 16r5375 16r4D72 16r5D50 16r4D73 16r6B04 16r4D74 16r6FEB 16r4D75 16r85CD 16r4D76 16r862D 16r4D77 16r89A7 16r4D78 16r5229 16r4D79 16r540F 16r4D7A 16r5C65 16r4D7B 16r674E 16r4D7C 16r68A8 16r4D7D 16r7406 16r4D7E 16r7483 16r4E21 16r75E2 16r4E22 16r88CF 16r4E23 16r88E1 16r4E24 16r91CC 16r4E25 16r96E2 16r4E26 16r9678 16r4E27 16r5F8B 16r4E28 16r7387 16r4E29 16r7ACB 16r4E2A 16r844E 16r4E2B 16r63A0 16r4E2C 16r7565 16r4E2D 16r5289 16r4E2E 16r6D41 16r4E2F 16r6E9C 16r4E30 16r7409 16r4E31 16r7559 16r4E32 16r786B 16r4E33 16r7C92 16r4E34 16r9686 16r4E35 16r7ADC 16r4E36 16r9F8D 16r4E37 16r4FB6 16r4E38 16r616E 16r4E39 16r65C5 16r4E3A 16r865C 16r4E3B 16r4E86 16r4E3C 16r4EAE 16r4E3D 16r50DA 16r4E3E 16r4E21 16r4E3F 16r51CC 16r4E40 16r5BEE 16r4E41 16r6599 16r4E42 16r6881 16r4E43 16r6DBC 16r4E44 16r731F 16r4E45 16r7642 16r4E46 16r77AD 16r4E47 16r7A1C 16r4E48 16r7CE7 16r4E49 16r826F 16r4E4A 16r8AD2 16r4E4B 16r907C 16r4E4C 16r91CF 16r4E4D 16r9675 16r4E4E 16r9818 16r4E4F 16r529B 16r4E50 16r7DD1 16r4E51 16r502B 16r4E52 16r5398 16r4E53 16r6797 16r4E54 16r6DCB 16r4E55 16r71D0 16r4E56 16r7433 16r4E57 16r81E8 16r4E58 16r8F2A 16r4E59 16r96A3 16r4E5A 16r9C57 16r4E5B 16r9E9F 16r4E5C 16r7460 16r4E5D 16r5841 16r4E5E 16r6D99 16r4E5F 16r7D2F 16r4E60 16r985E 16r4E61 16r4EE4 16r4E62 16r4F36 16r4E63 16r4F8B 16r4E64 16r51B7 16r4E65 16r52B1 16r4E66 16r5DBA 16r4E67 16r601C 16r4E68 16r73B2 16r4E69 16r793C 16r4E6A 16r82D3 16r4E6B 16r9234 16r4E6C 16r96B7 16r4E6D 16r96F6 16r4E6E 16r970A 16r4E6F 16r9E97 16r4E70 16r9F62 16r4E71 16r66A6 16r4E72 16r6B74 16r4E73 16r5217 16r4E74 16r52A3 16r4E75 16r70C8 16r4E76 16r88C2 16r4E77 16r5EC9 16r4E78 16r604B 16r4E79 16r6190 16r4E7A 16r6F23 16r4E7B 16r7149 16r4E7C 16r7C3E 16r4E7D 16r7DF4 16r4E7E 16r806F 16r4F21 16r84EE 16r4F22 16r9023 16r4F23 16r932C 16r4F24 16r5442 16r4F25 16r9B6F 16r4F26 16r6AD3 16r4F27 16r7089 16r4F28 16r8CC2 16r4F29 16r8DEF 16r4F2A 16r9732 16r4F2B 16r52B4 16r4F2C 16r5A41 16r4F2D 16r5ECA 16r4F2E 16r5F04 16r4F2F 16r6717 16r4F30 16r697C 16r4F31 16r6994 16r4F32 16r6D6A 16r4F33 16r6F0F 16r4F34 16r7262 16r4F35 16r72FC 16r4F36 16r7BED 16r4F37 16r8001 16r4F38 16r807E 16r4F39 16r874B 16r4F3A 16r90CE 16r4F3B 16r516D 16r4F3C 16r9E93 16r4F3D 16r7984 16r4F3E 16r808B 16r4F3F 16r9332 16r4F40 16r8AD6 16r4F41 16r502D 16r4F42 16r548C 16r4F43 16r8A71 16r4F44 16r6B6A 16r4F45 16r8CC4 16r4F46 16r8107 16r4F47 16r60D1 16r4F48 16r67A0 16r4F49 16r9DF2 16r4F4A 16r4E99 16r4F4B 16r4E98 16r4F4C 16r9C10 16r4F4D 16r8A6B 16r4F4E 16r85C1 16r4F4F 16r8568 16r4F50 16r6900 16r4F51 16r6E7E 16r4F52 16r7897 16r4F53 16r8155 16r5021 16r5F0C 16r5022 16r4E10 16r5023 16r4E15 16r5024 16r4E2A 16r5025 16r4E31 16r5026 16r4E36 16r5027 16r4E3C 16r5028 16r4E3F 16r5029 16r4E42 16r502A 16r4E56 16r502B 16r4E58 16r502C 16r4E82 16r502D 16r4E85 16r502E 16r8C6B 16r502F 16r4E8A 16r5030 16r8212 16r5031 16r5F0D 16r5032 16r4E8E 16r5033 16r4E9E 16r5034 16r4E9F 16r5035 16r4EA0 16r5036 16r4EA2 16r5037 16r4EB0 16r5038 16r4EB3 16r5039 16r4EB6 16r503A 16r4ECE 16r503B 16r4ECD 16r503C 16r4EC4 16r503D 16r4EC6 16r503E 16r4EC2 16r503F 16r4ED7 16r5040 16r4EDE 16r5041 16r4EED 16r5042 16r4EDF 16r5043 16r4EF7 16r5044 16r4F09 16r5045 16r4F5A 16r5046 16r4F30 16r5047 16r4F5B 16r5048 16r4F5D 16r5049 16r4F57 16r504A 16r4F47 16r504B 16r4F76 16r504C 16r4F88 16r504D 16r4F8F 16r504E 16r4F98 16r504F 16r4F7B 16r5050 16r4F69 16r5051 16r4F70 16r5052 16r4F91 16r5053 16r4F6F 16r5054 16r4F86 16r5055 16r4F96 16r5056 16r5118 16r5057 16r4FD4 16r5058 16r4FDF 16r5059 16r4FCE 16r505A 16r4FD8 16r505B 16r4FDB 16r505C 16r4FD1 16r505D 16r4FDA 16r505E 16r4FD0 16r505F 16r4FE4 16r5060 16r4FE5 16r5061 16r501A 16r5062 16r5028 16r5063 16r5014 16r5064 16r502A 16r5065 16r5025 16r5066 16r5005 16r5067 16r4F1C 16r5068 16r4FF6 16r5069 16r5021 16r506A 16r5029 16r506B 16r502C 16r506C 16r4FFE 16r506D 16r4FEF 16r506E 16r5011 16r506F 16r5006 16r5070 16r5043 16r5071 16r5047 16r5072 16r6703 16r5073 16r5055 16r5074 16r5050 16r5075 16r5048 16r5076 16r505A 16r5077 16r5056 16r5078 16r506C 16r5079 16r5078 16r507A 16r5080 16r507B 16r509A 16r507C 16r5085 16r507D 16r50B4 16r507E 16r50B2 16r5121 16r50C9 16r5122 16r50CA 16r5123 16r50B3 16r5124 16r50C2 16r5125 16r50D6 16r5126 16r50DE 16r5127 16r50E5 16r5128 16r50ED 16r5129 16r50E3 16r512A 16r50EE 16r512B 16r50F9 16r512C 16r50F5 16r512D 16r5109 16r512E 16r5101 16r512F 16r5102 16r5130 16r5116 16r5131 16r5115 16r5132 16r5114 16r5133 16r511A 16r5134 16r5121 16r5135 16r513A 16r5136 16r5137 16r5137 16r513C 16r5138 16r513B 16r5139 16r513F 16r513A 16r5140 16r513B 16r5152 16r513C 16r514C 16r513D 16r5154 16r513E 16r5162 16r513F 16r7AF8 16r5140 16r5169 16r5141 16r516A 16r5142 16r516E 16r5143 16r5180 16r5144 16r5182 16r5145 16r56D8 16r5146 16r518C 16r5147 16r5189 16r5148 16r518F 16r5149 16r5191 16r514A 16r5193 16r514B 16r5195 16r514C 16r5196 16r514D 16r51A4 16r514E 16r51A6 16r514F 16r51A2 16r5150 16r51A9 16r5151 16r51AA 16r5152 16r51AB 16r5153 16r51B3 16r5154 16r51B1 16r5155 16r51B2 16r5156 16r51B0 16r5157 16r51B5 16r5158 16r51BD 16r5159 16r51C5 16r515A 16r51C9 16r515B 16r51DB 16r515C 16r51E0 16r515D 16r8655 16r515E 16r51E9 16r515F 16r51ED 16r5160 16r51F0 16r5161 16r51F5 16r5162 16r51FE 16r5163 16r5204 16r5164 16r520B 16r5165 16r5214 16r5166 16r520E 16r5167 16r5227 16r5168 16r522A 16r5169 16r522E 16r516A 16r5233 16r516B 16r5239 16r516C 16r524F 16r516D 16r5244 16r516E 16r524B 16r516F 16r524C 16r5170 16r525E 16r5171 16r5254 16r5172 16r526A 16r5173 16r5274 16r5174 16r5269 16r5175 16r5273 16r5176 16r527F 16r5177 16r527D 16r5178 16r528D 16r5179 16r5294 16r517A 16r5292 16r517B 16r5271 16r517C 16r5288 16r517D 16r5291 16r517E 16r8FA8 16r5221 16r8FA7 16r5222 16r52AC 16r5223 16r52AD 16r5224 16r52BC 16r5225 16r52B5 16r5226 16r52C1 16r5227 16r52CD 16r5228 16r52D7 16r5229 16r52DE 16r522A 16r52E3 16r522B 16r52E6 16r522C 16r98ED 16r522D 16r52E0 16r522E 16r52F3 16r522F 16r52F5 16r5230 16r52F8 16r5231 16r52F9 16r5232 16r5306 16r5233 16r5308 16r5234 16r7538 16r5235 16r530D 16r5236 16r5310 16r5237 16r530F 16r5238 16r5315 16r5239 16r531A 16r523A 16r5323 16r523B 16r532F 16r523C 16r5331 16r523D 16r5333 16r523E 16r5338 16r523F 16r5340 16r5240 16r5346 16r5241 16r5345 16r5242 16r4E17 16r5243 16r5349 16r5244 16r534D 16r5245 16r51D6 16r5246 16r535E 16r5247 16r5369 16r5248 16r536E 16r5249 16r5918 16r524A 16r537B 16r524B 16r5377 16r524C 16r5382 16r524D 16r5396 16r524E 16r53A0 16r524F 16r53A6 16r5250 16r53A5 16r5251 16r53AE 16r5252 16r53B0 16r5253 16r53B6 16r5254 16r53C3 16r5255 16r7C12 16r5256 16r96D9 16r5257 16r53DF 16r5258 16r66FC 16r5259 16r71EE 16r525A 16r53EE 16r525B 16r53E8 16r525C 16r53ED 16r525D 16r53FA 16r525E 16r5401 16r525F 16r543D 16r5260 16r5440 16r5261 16r542C 16r5262 16r542D 16r5263 16r543C 16r5264 16r542E 16r5265 16r5436 16r5266 16r5429 16r5267 16r541D 16r5268 16r544E 16r5269 16r548F 16r526A 16r5475 16r526B 16r548E 16r526C 16r545F 16r526D 16r5471 16r526E 16r5477 16r526F 16r5470 16r5270 16r5492 16r5271 16r547B 16r5272 16r5480 16r5273 16r5476 16r5274 16r5484 16r5275 16r5490 16r5276 16r5486 16r5277 16r54C7 16r5278 16r54A2 16r5279 16r54B8 16r527A 16r54A5 16r527B 16r54AC 16r527C 16r54C4 16r527D 16r54C8 16r527E 16r54A8 16r5321 16r54AB 16r5322 16r54C2 16r5323 16r54A4 16r5324 16r54BE 16r5325 16r54BC 16r5326 16r54D8 16r5327 16r54E5 16r5328 16r54E6 16r5329 16r550F 16r532A 16r5514 16r532B 16r54FD 16r532C 16r54EE 16r532D 16r54ED 16r532E 16r54FA 16r532F 16r54E2 16r5330 16r5539 16r5331 16r5540 16r5332 16r5563 16r5333 16r554C 16r5334 16r552E 16r5335 16r555C 16r5336 16r5545 16r5337 16r5556 16r5338 16r5557 16r5339 16r5538 16r533A 16r5533 16r533B 16r555D 16r533C 16r5599 16r533D 16r5580 16r533E 16r54AF 16r533F 16r558A 16r5340 16r559F 16r5341 16r557B 16r5342 16r557E 16r5343 16r5598 16r5344 16r559E 16r5345 16r55AE 16r5346 16r557C 16r5347 16r5583 16r5348 16r55A9 16r5349 16r5587 16r534A 16r55A8 16r534B 16r55DA 16r534C 16r55C5 16r534D 16r55DF 16r534E 16r55C4 16r534F 16r55DC 16r5350 16r55E4 16r5351 16r55D4 16r5352 16r5614 16r5353 16r55F7 16r5354 16r5616 16r5355 16r55FE 16r5356 16r55FD 16r5357 16r561B 16r5358 16r55F9 16r5359 16r564E 16r535A 16r5650 16r535B 16r71DF 16r535C 16r5634 16r535D 16r5636 16r535E 16r5632 16r535F 16r5638 16r5360 16r566B 16r5361 16r5664 16r5362 16r562F 16r5363 16r566C 16r5364 16r566A 16r5365 16r5686 16r5366 16r5680 16r5367 16r568A 16r5368 16r56A0 16r5369 16r5694 16r536A 16r568F 16r536B 16r56A5 16r536C 16r56AE 16r536D 16r56B6 16r536E 16r56B4 16r536F 16r56C2 16r5370 16r56BC 16r5371 16r56C1 16r5372 16r56C3 16r5373 16r56C0 16r5374 16r56C8 16r5375 16r56CE 16r5376 16r56D1 16r5377 16r56D3 16r5378 16r56D7 16r5379 16r56EE 16r537A 16r56F9 16r537B 16r5700 16r537C 16r56FF 16r537D 16r5704 16r537E 16r5709 16r5421 16r5708 16r5422 16r570B 16r5423 16r570D 16r5424 16r5713 16r5425 16r5718 16r5426 16r5716 16r5427 16r55C7 16r5428 16r571C 16r5429 16r5726 16r542A 16r5737 16r542B 16r5738 16r542C 16r574E 16r542D 16r573B 16r542E 16r5740 16r542F 16r574F 16r5430 16r5769 16r5431 16r57C0 16r5432 16r5788 16r5433 16r5761 16r5434 16r577F 16r5435 16r5789 16r5436 16r5793 16r5437 16r57A0 16r5438 16r57B3 16r5439 16r57A4 16r543A 16r57AA 16r543B 16r57B0 16r543C 16r57C3 16r543D 16r57C6 16r543E 16r57D4 16r543F 16r57D2 16r5440 16r57D3 16r5441 16r580A 16r5442 16r57D6 16r5443 16r57E3 16r5444 16r580B 16r5445 16r5819 16r5446 16r581D 16r5447 16r5872 16r5448 16r5821 16r5449 16r5862 16r544A 16r584B 16r544B 16r5870 16r544C 16r6BC0 16r544D 16r5852 16r544E 16r583D 16r544F 16r5879 16r5450 16r5885 16r5451 16r58B9 16r5452 16r589F 16r5453 16r58AB 16r5454 16r58BA 16r5455 16r58DE 16r5456 16r58BB 16r5457 16r58B8 16r5458 16r58AE 16r5459 16r58C5 16r545A 16r58D3 16r545B 16r58D1 16r545C 16r58D7 16r545D 16r58D9 16r545E 16r58D8 16r545F 16r58E5 16r5460 16r58DC 16r5461 16r58E4 16r5462 16r58DF 16r5463 16r58EF 16r5464 16r58FA 16r5465 16r58F9 16r5466 16r58FB 16r5467 16r58FC 16r5468 16r58FD 16r5469 16r5902 16r546A 16r590A 16r546B 16r5910 16r546C 16r591B 16r546D 16r68A6 16r546E 16r5925 16r546F 16r592C 16r5470 16r592D 16r5471 16r5932 16r5472 16r5938 16r5473 16r593E 16r5474 16r7AD2 16r5475 16r5955 16r5476 16r5950 16r5477 16r594E 16r5478 16r595A 16r5479 16r5958 16r547A 16r5962 16r547B 16r5960 16r547C 16r5967 16r547D 16r596C 16r547E 16r5969 16r5521 16r5978 16r5522 16r5981 16r5523 16r599D 16r5524 16r4F5E 16r5525 16r4FAB 16r5526 16r59A3 16r5527 16r59B2 16r5528 16r59C6 16r5529 16r59E8 16r552A 16r59DC 16r552B 16r598D 16r552C 16r59D9 16r552D 16r59DA 16r552E 16r5A25 16r552F 16r5A1F 16r5530 16r5A11 16r5531 16r5A1C 16r5532 16r5A09 16r5533 16r5A1A 16r5534 16r5A40 16r5535 16r5A6C 16r5536 16r5A49 16r5537 16r5A35 16r5538 16r5A36 16r5539 16r5A62 16r553A 16r5A6A 16r553B 16r5A9A 16r553C 16r5ABC 16r553D 16r5ABE 16r553E 16r5ACB 16r553F 16r5AC2 16r5540 16r5ABD 16r5541 16r5AE3 16r5542 16r5AD7 16r5543 16r5AE6 16r5544 16r5AE9 16r5545 16r5AD6 16r5546 16r5AFA 16r5547 16r5AFB 16r5548 16r5B0C 16r5549 16r5B0B 16r554A 16r5B16 16r554B 16r5B32 16r554C 16r5AD0 16r554D 16r5B2A 16r554E 16r5B36 16r554F 16r5B3E 16r5550 16r5B43 16r5551 16r5B45 16r5552 16r5B40 16r5553 16r5B51 16r5554 16r5B55 16r5555 16r5B5A 16r5556 16r5B5B 16r5557 16r5B65 16r5558 16r5B69 16r5559 16r5B70 16r555A 16r5B73 16r555B 16r5B75 16r555C 16r5B78 16r555D 16r6588 16r555E 16r5B7A 16r555F 16r5B80 16r5560 16r5B83 16r5561 16r5BA6 16r5562 16r5BB8 16r5563 16r5BC3 16r5564 16r5BC7 16r5565 16r5BC9 16r5566 16r5BD4 16r5567 16r5BD0 16r5568 16r5BE4 16r5569 16r5BE6 16r556A 16r5BE2 16r556B 16r5BDE 16r556C 16r5BE5 16r556D 16r5BEB 16r556E 16r5BF0 16r556F 16r5BF6 16r5570 16r5BF3 16r5571 16r5C05 16r5572 16r5C07 16r5573 16r5C08 16r5574 16r5C0D 16r5575 16r5C13 16r5576 16r5C20 16r5577 16r5C22 16r5578 16r5C28 16r5579 16r5C38 16r557A 16r5C39 16r557B 16r5C41 16r557C 16r5C46 16r557D 16r5C4E 16r557E 16r5C53 16r5621 16r5C50 16r5622 16r5C4F 16r5623 16r5B71 16r5624 16r5C6C 16r5625 16r5C6E 16r5626 16r4E62 16r5627 16r5C76 16r5628 16r5C79 16r5629 16r5C8C 16r562A 16r5C91 16r562B 16r5C94 16r562C 16r599B 16r562D 16r5CAB 16r562E 16r5CBB 16r562F 16r5CB6 16r5630 16r5CBC 16r5631 16r5CB7 16r5632 16r5CC5 16r5633 16r5CBE 16r5634 16r5CC7 16r5635 16r5CD9 16r5636 16r5CE9 16r5637 16r5CFD 16r5638 16r5CFA 16r5639 16r5CED 16r563A 16r5D8C 16r563B 16r5CEA 16r563C 16r5D0B 16r563D 16r5D15 16r563E 16r5D17 16r563F 16r5D5C 16r5640 16r5D1F 16r5641 16r5D1B 16r5642 16r5D11 16r5643 16r5D14 16r5644 16r5D22 16r5645 16r5D1A 16r5646 16r5D19 16r5647 16r5D18 16r5648 16r5D4C 16r5649 16r5D52 16r564A 16r5D4E 16r564B 16r5D4B 16r564C 16r5D6C 16r564D 16r5D73 16r564E 16r5D76 16r564F 16r5D87 16r5650 16r5D84 16r5651 16r5D82 16r5652 16r5DA2 16r5653 16r5D9D 16r5654 16r5DAC 16r5655 16r5DAE 16r5656 16r5DBD 16r5657 16r5D90 16r5658 16r5DB7 16r5659 16r5DBC 16r565A 16r5DC9 16r565B 16r5DCD 16r565C 16r5DD3 16r565D 16r5DD2 16r565E 16r5DD6 16r565F 16r5DDB 16r5660 16r5DEB 16r5661 16r5DF2 16r5662 16r5DF5 16r5663 16r5E0B 16r5664 16r5E1A 16r5665 16r5E19 16r5666 16r5E11 16r5667 16r5E1B 16r5668 16r5E36 16r5669 16r5E37 16r566A 16r5E44 16r566B 16r5E43 16r566C 16r5E40 16r566D 16r5E4E 16r566E 16r5E57 16r566F 16r5E54 16r5670 16r5E5F 16r5671 16r5E62 16r5672 16r5E64 16r5673 16r5E47 16r5674 16r5E75 16r5675 16r5E76 16r5676 16r5E7A 16r5677 16r9EBC 16r5678 16r5E7F 16r5679 16r5EA0 16r567A 16r5EC1 16r567B 16r5EC2 16r567C 16r5EC8 16r567D 16r5ED0 16r567E 16r5ECF 16r5721 16r5ED6 16r5722 16r5EE3 16r5723 16r5EDD 16r5724 16r5EDA 16r5725 16r5EDB 16r5726 16r5EE2 16r5727 16r5EE1 16r5728 16r5EE8 16r5729 16r5EE9 16r572A 16r5EEC 16r572B 16r5EF1 16r572C 16r5EF3 16r572D 16r5EF0 16r572E 16r5EF4 16r572F 16r5EF8 16r5730 16r5EFE 16r5731 16r5F03 16r5732 16r5F09 16r5733 16r5F5D 16r5734 16r5F5C 16r5735 16r5F0B 16r5736 16r5F11 16r5737 16r5F16 16r5738 16r5F29 16r5739 16r5F2D 16r573A 16r5F38 16r573B 16r5F41 16r573C 16r5F48 16r573D 16r5F4C 16r573E 16r5F4E 16r573F 16r5F2F 16r5740 16r5F51 16r5741 16r5F56 16r5742 16r5F57 16r5743 16r5F59 16r5744 16r5F61 16r5745 16r5F6D 16r5746 16r5F73 16r5747 16r5F77 16r5748 16r5F83 16r5749 16r5F82 16r574A 16r5F7F 16r574B 16r5F8A 16r574C 16r5F88 16r574D 16r5F91 16r574E 16r5F87 16r574F 16r5F9E 16r5750 16r5F99 16r5751 16r5F98 16r5752 16r5FA0 16r5753 16r5FA8 16r5754 16r5FAD 16r5755 16r5FBC 16r5756 16r5FD6 16r5757 16r5FFB 16r5758 16r5FE4 16r5759 16r5FF8 16r575A 16r5FF1 16r575B 16r5FDD 16r575C 16r60B3 16r575D 16r5FFF 16r575E 16r6021 16r575F 16r6060 16r5760 16r6019 16r5761 16r6010 16r5762 16r6029 16r5763 16r600E 16r5764 16r6031 16r5765 16r601B 16r5766 16r6015 16r5767 16r602B 16r5768 16r6026 16r5769 16r600F 16r576A 16r603A 16r576B 16r605A 16r576C 16r6041 16r576D 16r606A 16r576E 16r6077 16r576F 16r605F 16r5770 16r604A 16r5771 16r6046 16r5772 16r604D 16r5773 16r6063 16r5774 16r6043 16r5775 16r6064 16r5776 16r6042 16r5777 16r606C 16r5778 16r606B 16r5779 16r6059 16r577A 16r6081 16r577B 16r608D 16r577C 16r60E7 16r577D 16r6083 16r577E 16r609A 16r5821 16r6084 16r5822 16r609B 16r5823 16r6096 16r5824 16r6097 16r5825 16r6092 16r5826 16r60A7 16r5827 16r608B 16r5828 16r60E1 16r5829 16r60B8 16r582A 16r60E0 16r582B 16r60D3 16r582C 16r60B4 16r582D 16r5FF0 16r582E 16r60BD 16r582F 16r60C6 16r5830 16r60B5 16r5831 16r60D8 16r5832 16r614D 16r5833 16r6115 16r5834 16r6106 16r5835 16r60F6 16r5836 16r60F7 16r5837 16r6100 16r5838 16r60F4 16r5839 16r60FA 16r583A 16r6103 16r583B 16r6121 16r583C 16r60FB 16r583D 16r60F1 16r583E 16r610D 16r583F 16r610E 16r5840 16r6147 16r5841 16r613E 16r5842 16r6128 16r5843 16r6127 16r5844 16r614A 16r5845 16r613F 16r5846 16r613C 16r5847 16r612C 16r5848 16r6134 16r5849 16r613D 16r584A 16r6142 16r584B 16r6144 16r584C 16r6173 16r584D 16r6177 16r584E 16r6158 16r584F 16r6159 16r5850 16r615A 16r5851 16r616B 16r5852 16r6174 16r5853 16r616F 16r5854 16r6165 16r5855 16r6171 16r5856 16r615F 16r5857 16r615D 16r5858 16r6153 16r5859 16r6175 16r585A 16r6199 16r585B 16r6196 16r585C 16r6187 16r585D 16r61AC 16r585E 16r6194 16r585F 16r619A 16r5860 16r618A 16r5861 16r6191 16r5862 16r61AB 16r5863 16r61AE 16r5864 16r61CC 16r5865 16r61CA 16r5866 16r61C9 16r5867 16r61F7 16r5868 16r61C8 16r5869 16r61C3 16r586A 16r61C6 16r586B 16r61BA 16r586C 16r61CB 16r586D 16r7F79 16r586E 16r61CD 16r586F 16r61E6 16r5870 16r61E3 16r5871 16r61F6 16r5872 16r61FA 16r5873 16r61F4 16r5874 16r61FF 16r5875 16r61FD 16r5876 16r61FC 16r5877 16r61FE 16r5878 16r6200 16r5879 16r6208 16r587A 16r6209 16r587B 16r620D 16r587C 16r620C 16r587D 16r6214 16r587E 16r621B 16r5921 16r621E 16r5922 16r6221 16r5923 16r622A 16r5924 16r622E 16r5925 16r6230 16r5926 16r6232 16r5927 16r6233 16r5928 16r6241 16r5929 16r624E 16r592A 16r625E 16r592B 16r6263 16r592C 16r625B 16r592D 16r6260 16r592E 16r6268 16r592F 16r627C 16r5930 16r6282 16r5931 16r6289 16r5932 16r627E 16r5933 16r6292 16r5934 16r6293 16r5935 16r6296 16r5936 16r62D4 16r5937 16r6283 16r5938 16r6294 16r5939 16r62D7 16r593A 16r62D1 16r593B 16r62BB 16r593C 16r62CF 16r593D 16r62FF 16r593E 16r62C6 16r593F 16r64D4 16r5940 16r62C8 16r5941 16r62DC 16r5942 16r62CC 16r5943 16r62CA 16r5944 16r62C2 16r5945 16r62C7 16r5946 16r629B 16r5947 16r62C9 16r5948 16r630C 16r5949 16r62EE 16r594A 16r62F1 16r594B 16r6327 16r594C 16r6302 16r594D 16r6308 16r594E 16r62EF 16r594F 16r62F5 16r5950 16r6350 16r5951 16r633E 16r5952 16r634D 16r5953 16r641C 16r5954 16r634F 16r5955 16r6396 16r5956 16r638E 16r5957 16r6380 16r5958 16r63AB 16r5959 16r6376 16r595A 16r63A3 16r595B 16r638F 16r595C 16r6389 16r595D 16r639F 16r595E 16r63B5 16r595F 16r636B 16r5960 16r6369 16r5961 16r63BE 16r5962 16r63E9 16r5963 16r63C0 16r5964 16r63C6 16r5965 16r63E3 16r5966 16r63C9 16r5967 16r63D2 16r5968 16r63F6 16r5969 16r63C4 16r596A 16r6416 16r596B 16r6434 16r596C 16r6406 16r596D 16r6413 16r596E 16r6426 16r596F 16r6436 16r5970 16r651D 16r5971 16r6417 16r5972 16r6428 16r5973 16r640F 16r5974 16r6467 16r5975 16r646F 16r5976 16r6476 16r5977 16r644E 16r5978 16r652A 16r5979 16r6495 16r597A 16r6493 16r597B 16r64A5 16r597C 16r64A9 16r597D 16r6488 16r597E 16r64BC 16r5A21 16r64DA 16r5A22 16r64D2 16r5A23 16r64C5 16r5A24 16r64C7 16r5A25 16r64BB 16r5A26 16r64D8 16r5A27 16r64C2 16r5A28 16r64F1 16r5A29 16r64E7 16r5A2A 16r8209 16r5A2B 16r64E0 16r5A2C 16r64E1 16r5A2D 16r62AC 16r5A2E 16r64E3 16r5A2F 16r64EF 16r5A30 16r652C 16r5A31 16r64F6 16r5A32 16r64F4 16r5A33 16r64F2 16r5A34 16r64FA 16r5A35 16r6500 16r5A36 16r64FD 16r5A37 16r6518 16r5A38 16r651C 16r5A39 16r6505 16r5A3A 16r6524 16r5A3B 16r6523 16r5A3C 16r652B 16r5A3D 16r6534 16r5A3E 16r6535 16r5A3F 16r6537 16r5A40 16r6536 16r5A41 16r6538 16r5A42 16r754B 16r5A43 16r6548 16r5A44 16r6556 16r5A45 16r6555 16r5A46 16r654D 16r5A47 16r6558 16r5A48 16r655E 16r5A49 16r655D 16r5A4A 16r6572 16r5A4B 16r6578 16r5A4C 16r6582 16r5A4D 16r6583 16r5A4E 16r8B8A 16r5A4F 16r659B 16r5A50 16r659F 16r5A51 16r65AB 16r5A52 16r65B7 16r5A53 16r65C3 16r5A54 16r65C6 16r5A55 16r65C1 16r5A56 16r65C4 16r5A57 16r65CC 16r5A58 16r65D2 16r5A59 16r65DB 16r5A5A 16r65D9 16r5A5B 16r65E0 16r5A5C 16r65E1 16r5A5D 16r65F1 16r5A5E 16r6772 16r5A5F 16r660A 16r5A60 16r6603 16r5A61 16r65FB 16r5A62 16r6773 16r5A63 16r6635 16r5A64 16r6636 16r5A65 16r6634 16r5A66 16r661C 16r5A67 16r664F 16r5A68 16r6644 16r5A69 16r6649 16r5A6A 16r6641 16r5A6B 16r665E 16r5A6C 16r665D 16r5A6D 16r6664 16r5A6E 16r6667 16r5A6F 16r6668 16r5A70 16r665F 16r5A71 16r6662 16r5A72 16r6670 16r5A73 16r6683 16r5A74 16r6688 16r5A75 16r668E 16r5A76 16r6689 16r5A77 16r6684 16r5A78 16r6698 16r5A79 16r669D 16r5A7A 16r66C1 16r5A7B 16r66B9 16r5A7C 16r66C9 16r5A7D 16r66BE 16r5A7E 16r66BC 16r5B21 16r66C4 16r5B22 16r66B8 16r5B23 16r66D6 16r5B24 16r66DA 16r5B25 16r66E0 16r5B26 16r663F 16r5B27 16r66E6 16r5B28 16r66E9 16r5B29 16r66F0 16r5B2A 16r66F5 16r5B2B 16r66F7 16r5B2C 16r670F 16r5B2D 16r6716 16r5B2E 16r671E 16r5B2F 16r6726 16r5B30 16r6727 16r5B31 16r9738 16r5B32 16r672E 16r5B33 16r673F 16r5B34 16r6736 16r5B35 16r6741 16r5B36 16r6738 16r5B37 16r6737 16r5B38 16r6746 16r5B39 16r675E 16r5B3A 16r6760 16r5B3B 16r6759 16r5B3C 16r6763 16r5B3D 16r6764 16r5B3E 16r6789 16r5B3F 16r6770 16r5B40 16r67A9 16r5B41 16r677C 16r5B42 16r676A 16r5B43 16r678C 16r5B44 16r678B 16r5B45 16r67A6 16r5B46 16r67A1 16r5B47 16r6785 16r5B48 16r67B7 16r5B49 16r67EF 16r5B4A 16r67B4 16r5B4B 16r67EC 16r5B4C 16r67B3 16r5B4D 16r67E9 16r5B4E 16r67B8 16r5B4F 16r67E4 16r5B50 16r67DE 16r5B51 16r67DD 16r5B52 16r67E2 16r5B53 16r67EE 16r5B54 16r67B9 16r5B55 16r67CE 16r5B56 16r67C6 16r5B57 16r67E7 16r5B58 16r6A9C 16r5B59 16r681E 16r5B5A 16r6846 16r5B5B 16r6829 16r5B5C 16r6840 16r5B5D 16r684D 16r5B5E 16r6832 16r5B5F 16r684E 16r5B60 16r68B3 16r5B61 16r682B 16r5B62 16r6859 16r5B63 16r6863 16r5B64 16r6877 16r5B65 16r687F 16r5B66 16r689F 16r5B67 16r688F 16r5B68 16r68AD 16r5B69 16r6894 16r5B6A 16r689D 16r5B6B 16r689B 16r5B6C 16r6883 16r5B6D 16r6AAE 16r5B6E 16r68B9 16r5B6F 16r6874 16r5B70 16r68B5 16r5B71 16r68A0 16r5B72 16r68BA 16r5B73 16r690F 16r5B74 16r688D 16r5B75 16r687E 16r5B76 16r6901 16r5B77 16r68CA 16r5B78 16r6908 16r5B79 16r68D8 16r5B7A 16r6922 16r5B7B 16r6926 16r5B7C 16r68E1 16r5B7D 16r690C 16r5B7E 16r68CD 16r5C21 16r68D4 16r5C22 16r68E7 16r5C23 16r68D5 16r5C24 16r6936 16r5C25 16r6912 16r5C26 16r6904 16r5C27 16r68D7 16r5C28 16r68E3 16r5C29 16r6925 16r5C2A 16r68F9 16r5C2B 16r68E0 16r5C2C 16r68EF 16r5C2D 16r6928 16r5C2E 16r692A 16r5C2F 16r691A 16r5C30 16r6923 16r5C31 16r6921 16r5C32 16r68C6 16r5C33 16r6979 16r5C34 16r6977 16r5C35 16r695C 16r5C36 16r6978 16r5C37 16r696B 16r5C38 16r6954 16r5C39 16r697E 16r5C3A 16r696E 16r5C3B 16r6939 16r5C3C 16r6974 16r5C3D 16r693D 16r5C3E 16r6959 16r5C3F 16r6930 16r5C40 16r6961 16r5C41 16r695E 16r5C42 16r695D 16r5C43 16r6981 16r5C44 16r696A 16r5C45 16r69B2 16r5C46 16r69AE 16r5C47 16r69D0 16r5C48 16r69BF 16r5C49 16r69C1 16r5C4A 16r69D3 16r5C4B 16r69BE 16r5C4C 16r69CE 16r5C4D 16r5BE8 16r5C4E 16r69CA 16r5C4F 16r69DD 16r5C50 16r69BB 16r5C51 16r69C3 16r5C52 16r69A7 16r5C53 16r6A2E 16r5C54 16r6991 16r5C55 16r69A0 16r5C56 16r699C 16r5C57 16r6995 16r5C58 16r69B4 16r5C59 16r69DE 16r5C5A 16r69E8 16r5C5B 16r6A02 16r5C5C 16r6A1B 16r5C5D 16r69FF 16r5C5E 16r6B0A 16r5C5F 16r69F9 16r5C60 16r69F2 16r5C61 16r69E7 16r5C62 16r6A05 16r5C63 16r69B1 16r5C64 16r6A1E 16r5C65 16r69ED 16r5C66 16r6A14 16r5C67 16r69EB 16r5C68 16r6A0A 16r5C69 16r6A12 16r5C6A 16r6AC1 16r5C6B 16r6A23 16r5C6C 16r6A13 16r5C6D 16r6A44 16r5C6E 16r6A0C 16r5C6F 16r6A72 16r5C70 16r6A36 16r5C71 16r6A78 16r5C72 16r6A47 16r5C73 16r6A62 16r5C74 16r6A59 16r5C75 16r6A66 16r5C76 16r6A48 16r5C77 16r6A38 16r5C78 16r6A22 16r5C79 16r6A90 16r5C7A 16r6A8D 16r5C7B 16r6AA0 16r5C7C 16r6A84 16r5C7D 16r6AA2 16r5C7E 16r6AA3 16r5D21 16r6A97 16r5D22 16r8617 16r5D23 16r6ABB 16r5D24 16r6AC3 16r5D25 16r6AC2 16r5D26 16r6AB8 16r5D27 16r6AB3 16r5D28 16r6AAC 16r5D29 16r6ADE 16r5D2A 16r6AD1 16r5D2B 16r6ADF 16r5D2C 16r6AAA 16r5D2D 16r6ADA 16r5D2E 16r6AEA 16r5D2F 16r6AFB 16r5D30 16r6B05 16r5D31 16r8616 16r5D32 16r6AFA 16r5D33 16r6B12 16r5D34 16r6B16 16r5D35 16r9B31 16r5D36 16r6B1F 16r5D37 16r6B38 16r5D38 16r6B37 16r5D39 16r76DC 16r5D3A 16r6B39 16r5D3B 16r98EE 16r5D3C 16r6B47 16r5D3D 16r6B43 16r5D3E 16r6B49 16r5D3F 16r6B50 16r5D40 16r6B59 16r5D41 16r6B54 16r5D42 16r6B5B 16r5D43 16r6B5F 16r5D44 16r6B61 16r5D45 16r6B78 16r5D46 16r6B79 16r5D47 16r6B7F 16r5D48 16r6B80 16r5D49 16r6B84 16r5D4A 16r6B83 16r5D4B 16r6B8D 16r5D4C 16r6B98 16r5D4D 16r6B95 16r5D4E 16r6B9E 16r5D4F 16r6BA4 16r5D50 16r6BAA 16r5D51 16r6BAB 16r5D52 16r6BAF 16r5D53 16r6BB2 16r5D54 16r6BB1 16r5D55 16r6BB3 16r5D56 16r6BB7 16r5D57 16r6BBC 16r5D58 16r6BC6 16r5D59 16r6BCB 16r5D5A 16r6BD3 16r5D5B 16r6BDF 16r5D5C 16r6BEC 16r5D5D 16r6BEB 16r5D5E 16r6BF3 16r5D5F 16r6BEF 16r5D60 16r9EBE 16r5D61 16r6C08 16r5D62 16r6C13 16r5D63 16r6C14 16r5D64 16r6C1B 16r5D65 16r6C24 16r5D66 16r6C23 16r5D67 16r6C5E 16r5D68 16r6C55 16r5D69 16r6C62 16r5D6A 16r6C6A 16r5D6B 16r6C82 16r5D6C 16r6C8D 16r5D6D 16r6C9A 16r5D6E 16r6C81 16r5D6F 16r6C9B 16r5D70 16r6C7E 16r5D71 16r6C68 16r5D72 16r6C73 16r5D73 16r6C92 16r5D74 16r6C90 16r5D75 16r6CC4 16r5D76 16r6CF1 16r5D77 16r6CD3 16r5D78 16r6CBD 16r5D79 16r6CD7 16r5D7A 16r6CC5 16r5D7B 16r6CDD 16r5D7C 16r6CAE 16r5D7D 16r6CB1 16r5D7E 16r6CBE 16r5E21 16r6CBA 16r5E22 16r6CDB 16r5E23 16r6CEF 16r5E24 16r6CD9 16r5E25 16r6CEA 16r5E26 16r6D1F 16r5E27 16r884D 16r5E28 16r6D36 16r5E29 16r6D2B 16r5E2A 16r6D3D 16r5E2B 16r6D38 16r5E2C 16r6D19 16r5E2D 16r6D35 16r5E2E 16r6D33 16r5E2F 16r6D12 16r5E30 16r6D0C 16r5E31 16r6D63 16r5E32 16r6D93 16r5E33 16r6D64 16r5E34 16r6D5A 16r5E35 16r6D79 16r5E36 16r6D59 16r5E37 16r6D8E 16r5E38 16r6D95 16r5E39 16r6FE4 16r5E3A 16r6D85 16r5E3B 16r6DF9 16r5E3C 16r6E15 16r5E3D 16r6E0A 16r5E3E 16r6DB5 16r5E3F 16r6DC7 16r5E40 16r6DE6 16r5E41 16r6DB8 16r5E42 16r6DC6 16r5E43 16r6DEC 16r5E44 16r6DDE 16r5E45 16r6DCC 16r5E46 16r6DE8 16r5E47 16r6DD2 16r5E48 16r6DC5 16r5E49 16r6DFA 16r5E4A 16r6DD9 16r5E4B 16r6DE4 16r5E4C 16r6DD5 16r5E4D 16r6DEA 16r5E4E 16r6DEE 16r5E4F 16r6E2D 16r5E50 16r6E6E 16r5E51 16r6E2E 16r5E52 16r6E19 16r5E53 16r6E72 16r5E54 16r6E5F 16r5E55 16r6E3E 16r5E56 16r6E23 16r5E57 16r6E6B 16r5E58 16r6E2B 16r5E59 16r6E76 16r5E5A 16r6E4D 16r5E5B 16r6E1F 16r5E5C 16r6E43 16r5E5D 16r6E3A 16r5E5E 16r6E4E 16r5E5F 16r6E24 16r5E60 16r6EFF 16r5E61 16r6E1D 16r5E62 16r6E38 16r5E63 16r6E82 16r5E64 16r6EAA 16r5E65 16r6E98 16r5E66 16r6EC9 16r5E67 16r6EB7 16r5E68 16r6ED3 16r5E69 16r6EBD 16r5E6A 16r6EAF 16r5E6B 16r6EC4 16r5E6C 16r6EB2 16r5E6D 16r6ED4 16r5E6E 16r6ED5 16r5E6F 16r6E8F 16r5E70 16r6EA5 16r5E71 16r6EC2 16r5E72 16r6E9F 16r5E73 16r6F41 16r5E74 16r6F11 16r5E75 16r704C 16r5E76 16r6EEC 16r5E77 16r6EF8 16r5E78 16r6EFE 16r5E79 16r6F3F 16r5E7A 16r6EF2 16r5E7B 16r6F31 16r5E7C 16r6EEF 16r5E7D 16r6F32 16r5E7E 16r6ECC 16r5F21 16r6F3E 16r5F22 16r6F13 16r5F23 16r6EF7 16r5F24 16r6F86 16r5F25 16r6F7A 16r5F26 16r6F78 16r5F27 16r6F81 16r5F28 16r6F80 16r5F29 16r6F6F 16r5F2A 16r6F5B 16r5F2B 16r6FF3 16r5F2C 16r6F6D 16r5F2D 16r6F82 16r5F2E 16r6F7C 16r5F2F 16r6F58 16r5F30 16r6F8E 16r5F31 16r6F91 16r5F32 16r6FC2 16r5F33 16r6F66 16r5F34 16r6FB3 16r5F35 16r6FA3 16r5F36 16r6FA1 16r5F37 16r6FA4 16r5F38 16r6FB9 16r5F39 16r6FC6 16r5F3A 16r6FAA 16r5F3B 16r6FDF 16r5F3C 16r6FD5 16r5F3D 16r6FEC 16r5F3E 16r6FD4 16r5F3F 16r6FD8 16r5F40 16r6FF1 16r5F41 16r6FEE 16r5F42 16r6FDB 16r5F43 16r7009 16r5F44 16r700B 16r5F45 16r6FFA 16r5F46 16r7011 16r5F47 16r7001 16r5F48 16r700F 16r5F49 16r6FFE 16r5F4A 16r701B 16r5F4B 16r701A 16r5F4C 16r6F74 16r5F4D 16r701D 16r5F4E 16r7018 16r5F4F 16r701F 16r5F50 16r7030 16r5F51 16r703E 16r5F52 16r7032 16r5F53 16r7051 16r5F54 16r7063 16r5F55 16r7099 16r5F56 16r7092 16r5F57 16r70AF 16r5F58 16r70F1 16r5F59 16r70AC 16r5F5A 16r70B8 16r5F5B 16r70B3 16r5F5C 16r70AE 16r5F5D 16r70DF 16r5F5E 16r70CB 16r5F5F 16r70DD 16r5F60 16r70D9 16r5F61 16r7109 16r5F62 16r70FD 16r5F63 16r711C 16r5F64 16r7119 16r5F65 16r7165 16r5F66 16r7155 16r5F67 16r7188 16r5F68 16r7166 16r5F69 16r7162 16r5F6A 16r714C 16r5F6B 16r7156 16r5F6C 16r716C 16r5F6D 16r718F 16r5F6E 16r71FB 16r5F6F 16r7184 16r5F70 16r7195 16r5F71 16r71A8 16r5F72 16r71AC 16r5F73 16r71D7 16r5F74 16r71B9 16r5F75 16r71BE 16r5F76 16r71D2 16r5F77 16r71C9 16r5F78 16r71D4 16r5F79 16r71CE 16r5F7A 16r71E0 16r5F7B 16r71EC 16r5F7C 16r71E7 16r5F7D 16r71F5 16r5F7E 16r71FC 16r6021 16r71F9 16r6022 16r71FF 16r6023 16r720D 16r6024 16r7210 16r6025 16r721B 16r6026 16r7228 16r6027 16r722D 16r6028 16r722C 16r6029 16r7230 16r602A 16r7232 16r602B 16r723B 16r602C 16r723C 16r602D 16r723F 16r602E 16r7240 16r602F 16r7246 16r6030 16r724B 16r6031 16r7258 16r6032 16r7274 16r6033 16r727E 16r6034 16r7282 16r6035 16r7281 16r6036 16r7287 16r6037 16r7292 16r6038 16r7296 16r6039 16r72A2 16r603A 16r72A7 16r603B 16r72B9 16r603C 16r72B2 16r603D 16r72C3 16r603E 16r72C6 16r603F 16r72C4 16r6040 16r72CE 16r6041 16r72D2 16r6042 16r72E2 16r6043 16r72E0 16r6044 16r72E1 16r6045 16r72F9 16r6046 16r72F7 16r6047 16r500F 16r6048 16r7317 16r6049 16r730A 16r604A 16r731C 16r604B 16r7316 16r604C 16r731D 16r604D 16r7334 16r604E 16r732F 16r604F 16r7329 16r6050 16r7325 16r6051 16r733E 16r6052 16r734E 16r6053 16r734F 16r6054 16r9ED8 16r6055 16r7357 16r6056 16r736A 16r6057 16r7368 16r6058 16r7370 16r6059 16r7378 16r605A 16r7375 16r605B 16r737B 16r605C 16r737A 16r605D 16r73C8 16r605E 16r73B3 16r605F 16r73CE 16r6060 16r73BB 16r6061 16r73C0 16r6062 16r73E5 16r6063 16r73EE 16r6064 16r73DE 16r6065 16r74A2 16r6066 16r7405 16r6067 16r746F 16r6068 16r7425 16r6069 16r73F8 16r606A 16r7432 16r606B 16r743A 16r606C 16r7455 16r606D 16r743F 16r606E 16r745F 16r606F 16r7459 16r6070 16r7441 16r6071 16r745C 16r6072 16r7469 16r6073 16r7470 16r6074 16r7463 16r6075 16r746A 16r6076 16r7476 16r6077 16r747E 16r6078 16r748B 16r6079 16r749E 16r607A 16r74A7 16r607B 16r74CA 16r607C 16r74CF 16r607D 16r74D4 16r607E 16r73F1 16r6121 16r74E0 16r6122 16r74E3 16r6123 16r74E7 16r6124 16r74E9 16r6125 16r74EE 16r6126 16r74F2 16r6127 16r74F0 16r6128 16r74F1 16r6129 16r74F8 16r612A 16r74F7 16r612B 16r7504 16r612C 16r7503 16r612D 16r7505 16r612E 16r750C 16r612F 16r750E 16r6130 16r750D 16r6131 16r7515 16r6132 16r7513 16r6133 16r751E 16r6134 16r7526 16r6135 16r752C 16r6136 16r753C 16r6137 16r7544 16r6138 16r754D 16r6139 16r754A 16r613A 16r7549 16r613B 16r755B 16r613C 16r7546 16r613D 16r755A 16r613E 16r7569 16r613F 16r7564 16r6140 16r7567 16r6141 16r756B 16r6142 16r756D 16r6143 16r7578 16r6144 16r7576 16r6145 16r7586 16r6146 16r7587 16r6147 16r7574 16r6148 16r758A 16r6149 16r7589 16r614A 16r7582 16r614B 16r7594 16r614C 16r759A 16r614D 16r759D 16r614E 16r75A5 16r614F 16r75A3 16r6150 16r75C2 16r6151 16r75B3 16r6152 16r75C3 16r6153 16r75B5 16r6154 16r75BD 16r6155 16r75B8 16r6156 16r75BC 16r6157 16r75B1 16r6158 16r75CD 16r6159 16r75CA 16r615A 16r75D2 16r615B 16r75D9 16r615C 16r75E3 16r615D 16r75DE 16r615E 16r75FE 16r615F 16r75FF 16r6160 16r75FC 16r6161 16r7601 16r6162 16r75F0 16r6163 16r75FA 16r6164 16r75F2 16r6165 16r75F3 16r6166 16r760B 16r6167 16r760D 16r6168 16r7609 16r6169 16r761F 16r616A 16r7627 16r616B 16r7620 16r616C 16r7621 16r616D 16r7622 16r616E 16r7624 16r616F 16r7634 16r6170 16r7630 16r6171 16r763B 16r6172 16r7647 16r6173 16r7648 16r6174 16r7646 16r6175 16r765C 16r6176 16r7658 16r6177 16r7661 16r6178 16r7662 16r6179 16r7668 16r617A 16r7669 16r617B 16r766A 16r617C 16r7667 16r617D 16r766C 16r617E 16r7670 16r6221 16r7672 16r6222 16r7676 16r6223 16r7678 16r6224 16r767C 16r6225 16r7680 16r6226 16r7683 16r6227 16r7688 16r6228 16r768B 16r6229 16r768E 16r622A 16r7696 16r622B 16r7693 16r622C 16r7699 16r622D 16r769A 16r622E 16r76B0 16r622F 16r76B4 16r6230 16r76B8 16r6231 16r76B9 16r6232 16r76BA 16r6233 16r76C2 16r6234 16r76CD 16r6235 16r76D6 16r6236 16r76D2 16r6237 16r76DE 16r6238 16r76E1 16r6239 16r76E5 16r623A 16r76E7 16r623B 16r76EA 16r623C 16r862F 16r623D 16r76FB 16r623E 16r7708 16r623F 16r7707 16r6240 16r7704 16r6241 16r7729 16r6242 16r7724 16r6243 16r771E 16r6244 16r7725 16r6245 16r7726 16r6246 16r771B 16r6247 16r7737 16r6248 16r7738 16r6249 16r7747 16r624A 16r775A 16r624B 16r7768 16r624C 16r776B 16r624D 16r775B 16r624E 16r7765 16r624F 16r777F 16r6250 16r777E 16r6251 16r7779 16r6252 16r778E 16r6253 16r778B 16r6254 16r7791 16r6255 16r77A0 16r6256 16r779E 16r6257 16r77B0 16r6258 16r77B6 16r6259 16r77B9 16r625A 16r77BF 16r625B 16r77BC 16r625C 16r77BD 16r625D 16r77BB 16r625E 16r77C7 16r625F 16r77CD 16r6260 16r77D7 16r6261 16r77DA 16r6262 16r77DC 16r6263 16r77E3 16r6264 16r77EE 16r6265 16r77FC 16r6266 16r780C 16r6267 16r7812 16r6268 16r7926 16r6269 16r7820 16r626A 16r792A 16r626B 16r7845 16r626C 16r788E 16r626D 16r7874 16r626E 16r7886 16r626F 16r787C 16r6270 16r789A 16r6271 16r788C 16r6272 16r78A3 16r6273 16r78B5 16r6274 16r78AA 16r6275 16r78AF 16r6276 16r78D1 16r6277 16r78C6 16r6278 16r78CB 16r6279 16r78D4 16r627A 16r78BE 16r627B 16r78BC 16r627C 16r78C5 16r627D 16r78CA 16r627E 16r78EC 16r6321 16r78E7 16r6322 16r78DA 16r6323 16r78FD 16r6324 16r78F4 16r6325 16r7907 16r6326 16r7912 16r6327 16r7911 16r6328 16r7919 16r6329 16r792C 16r632A 16r792B 16r632B 16r7940 16r632C 16r7960 16r632D 16r7957 16r632E 16r795F 16r632F 16r795A 16r6330 16r7955 16r6331 16r7953 16r6332 16r797A 16r6333 16r797F 16r6334 16r798A 16r6335 16r799D 16r6336 16r79A7 16r6337 16r9F4B 16r6338 16r79AA 16r6339 16r79AE 16r633A 16r79B3 16r633B 16r79B9 16r633C 16r79BA 16r633D 16r79C9 16r633E 16r79D5 16r633F 16r79E7 16r6340 16r79EC 16r6341 16r79E1 16r6342 16r79E3 16r6343 16r7A08 16r6344 16r7A0D 16r6345 16r7A18 16r6346 16r7A19 16r6347 16r7A20 16r6348 16r7A1F 16r6349 16r7980 16r634A 16r7A31 16r634B 16r7A3B 16r634C 16r7A3E 16r634D 16r7A37 16r634E 16r7A43 16r634F 16r7A57 16r6350 16r7A49 16r6351 16r7A61 16r6352 16r7A62 16r6353 16r7A69 16r6354 16r9F9D 16r6355 16r7A70 16r6356 16r7A79 16r6357 16r7A7D 16r6358 16r7A88 16r6359 16r7A97 16r635A 16r7A95 16r635B 16r7A98 16r635C 16r7A96 16r635D 16r7AA9 16r635E 16r7AC8 16r635F 16r7AB0 16r6360 16r7AB6 16r6361 16r7AC5 16r6362 16r7AC4 16r6363 16r7ABF 16r6364 16r9083 16r6365 16r7AC7 16r6366 16r7ACA 16r6367 16r7ACD 16r6368 16r7ACF 16r6369 16r7AD5 16r636A 16r7AD3 16r636B 16r7AD9 16r636C 16r7ADA 16r636D 16r7ADD 16r636E 16r7AE1 16r636F 16r7AE2 16r6370 16r7AE6 16r6371 16r7AED 16r6372 16r7AF0 16r6373 16r7B02 16r6374 16r7B0F 16r6375 16r7B0A 16r6376 16r7B06 16r6377 16r7B33 16r6378 16r7B18 16r6379 16r7B19 16r637A 16r7B1E 16r637B 16r7B35 16r637C 16r7B28 16r637D 16r7B36 16r637E 16r7B50 16r6421 16r7B7A 16r6422 16r7B04 16r6423 16r7B4D 16r6424 16r7B0B 16r6425 16r7B4C 16r6426 16r7B45 16r6427 16r7B75 16r6428 16r7B65 16r6429 16r7B74 16r642A 16r7B67 16r642B 16r7B70 16r642C 16r7B71 16r642D 16r7B6C 16r642E 16r7B6E 16r642F 16r7B9D 16r6430 16r7B98 16r6431 16r7B9F 16r6432 16r7B8D 16r6433 16r7B9C 16r6434 16r7B9A 16r6435 16r7B8B 16r6436 16r7B92 16r6437 16r7B8F 16r6438 16r7B5D 16r6439 16r7B99 16r643A 16r7BCB 16r643B 16r7BC1 16r643C 16r7BCC 16r643D 16r7BCF 16r643E 16r7BB4 16r643F 16r7BC6 16r6440 16r7BDD 16r6441 16r7BE9 16r6442 16r7C11 16r6443 16r7C14 16r6444 16r7BE6 16r6445 16r7BE5 16r6446 16r7C60 16r6447 16r7C00 16r6448 16r7C07 16r6449 16r7C13 16r644A 16r7BF3 16r644B 16r7BF7 16r644C 16r7C17 16r644D 16r7C0D 16r644E 16r7BF6 16r644F 16r7C23 16r6450 16r7C27 16r6451 16r7C2A 16r6452 16r7C1F 16r6453 16r7C37 16r6454 16r7C2B 16r6455 16r7C3D 16r6456 16r7C4C 16r6457 16r7C43 16r6458 16r7C54 16r6459 16r7C4F 16r645A 16r7C40 16r645B 16r7C50 16r645C 16r7C58 16r645D 16r7C5F 16r645E 16r7C64 16r645F 16r7C56 16r6460 16r7C65 16r6461 16r7C6C 16r6462 16r7C75 16r6463 16r7C83 16r6464 16r7C90 16r6465 16r7CA4 16r6466 16r7CAD 16r6467 16r7CA2 16r6468 16r7CAB 16r6469 16r7CA1 16r646A 16r7CA8 16r646B 16r7CB3 16r646C 16r7CB2 16r646D 16r7CB1 16r646E 16r7CAE 16r646F 16r7CB9 16r6470 16r7CBD 16r6471 16r7CC0 16r6472 16r7CC5 16r6473 16r7CC2 16r6474 16r7CD8 16r6475 16r7CD2 16r6476 16r7CDC 16r6477 16r7CE2 16r6478 16r9B3B 16r6479 16r7CEF 16r647A 16r7CF2 16r647B 16r7CF4 16r647C 16r7CF6 16r647D 16r7CFA 16r647E 16r7D06 16r6521 16r7D02 16r6522 16r7D1C 16r6523 16r7D15 16r6524 16r7D0A 16r6525 16r7D45 16r6526 16r7D4B 16r6527 16r7D2E 16r6528 16r7D32 16r6529 16r7D3F 16r652A 16r7D35 16r652B 16r7D46 16r652C 16r7D73 16r652D 16r7D56 16r652E 16r7D4E 16r652F 16r7D72 16r6530 16r7D68 16r6531 16r7D6E 16r6532 16r7D4F 16r6533 16r7D63 16r6534 16r7D93 16r6535 16r7D89 16r6536 16r7D5B 16r6537 16r7D8F 16r6538 16r7D7D 16r6539 16r7D9B 16r653A 16r7DBA 16r653B 16r7DAE 16r653C 16r7DA3 16r653D 16r7DB5 16r653E 16r7DC7 16r653F 16r7DBD 16r6540 16r7DAB 16r6541 16r7E3D 16r6542 16r7DA2 16r6543 16r7DAF 16r6544 16r7DDC 16r6545 16r7DB8 16r6546 16r7D9F 16r6547 16r7DB0 16r6548 16r7DD8 16r6549 16r7DDD 16r654A 16r7DE4 16r654B 16r7DDE 16r654C 16r7DFB 16r654D 16r7DF2 16r654E 16r7DE1 16r654F 16r7E05 16r6550 16r7E0A 16r6551 16r7E23 16r6552 16r7E21 16r6553 16r7E12 16r6554 16r7E31 16r6555 16r7E1F 16r6556 16r7E09 16r6557 16r7E0B 16r6558 16r7E22 16r6559 16r7E46 16r655A 16r7E66 16r655B 16r7E3B 16r655C 16r7E35 16r655D 16r7E39 16r655E 16r7E43 16r655F 16r7E37 16r6560 16r7E32 16r6561 16r7E3A 16r6562 16r7E67 16r6563 16r7E5D 16r6564 16r7E56 16r6565 16r7E5E 16r6566 16r7E59 16r6567 16r7E5A 16r6568 16r7E79 16r6569 16r7E6A 16r656A 16r7E69 16r656B 16r7E7C 16r656C 16r7E7B 16r656D 16r7E83 16r656E 16r7DD5 16r656F 16r7E7D 16r6570 16r8FAE 16r6571 16r7E7F 16r6572 16r7E88 16r6573 16r7E89 16r6574 16r7E8C 16r6575 16r7E92 16r6576 16r7E90 16r6577 16r7E93 16r6578 16r7E94 16r6579 16r7E96 16r657A 16r7E8E 16r657B 16r7E9B 16r657C 16r7E9C 16r657D 16r7F38 16r657E 16r7F3A 16r6621 16r7F45 16r6622 16r7F4C 16r6623 16r7F4D 16r6624 16r7F4E 16r6625 16r7F50 16r6626 16r7F51 16r6627 16r7F55 16r6628 16r7F54 16r6629 16r7F58 16r662A 16r7F5F 16r662B 16r7F60 16r662C 16r7F68 16r662D 16r7F69 16r662E 16r7F67 16r662F 16r7F78 16r6630 16r7F82 16r6631 16r7F86 16r6632 16r7F83 16r6633 16r7F88 16r6634 16r7F87 16r6635 16r7F8C 16r6636 16r7F94 16r6637 16r7F9E 16r6638 16r7F9D 16r6639 16r7F9A 16r663A 16r7FA3 16r663B 16r7FAF 16r663C 16r7FB2 16r663D 16r7FB9 16r663E 16r7FAE 16r663F 16r7FB6 16r6640 16r7FB8 16r6641 16r8B71 16r6642 16r7FC5 16r6643 16r7FC6 16r6644 16r7FCA 16r6645 16r7FD5 16r6646 16r7FD4 16r6647 16r7FE1 16r6648 16r7FE6 16r6649 16r7FE9 16r664A 16r7FF3 16r664B 16r7FF9 16r664C 16r98DC 16r664D 16r8006 16r664E 16r8004 16r664F 16r800B 16r6650 16r8012 16r6651 16r8018 16r6652 16r8019 16r6653 16r801C 16r6654 16r8021 16r6655 16r8028 16r6656 16r803F 16r6657 16r803B 16r6658 16r804A 16r6659 16r8046 16r665A 16r8052 16r665B 16r8058 16r665C 16r805A 16r665D 16r805F 16r665E 16r8062 16r665F 16r8068 16r6660 16r8073 16r6661 16r8072 16r6662 16r8070 16r6663 16r8076 16r6664 16r8079 16r6665 16r807D 16r6666 16r807F 16r6667 16r8084 16r6668 16r8086 16r6669 16r8085 16r666A 16r809B 16r666B 16r8093 16r666C 16r809A 16r666D 16r80AD 16r666E 16r5190 16r666F 16r80AC 16r6670 16r80DB 16r6671 16r80E5 16r6672 16r80D9 16r6673 16r80DD 16r6674 16r80C4 16r6675 16r80DA 16r6676 16r80D6 16r6677 16r8109 16r6678 16r80EF 16r6679 16r80F1 16r667A 16r811B 16r667B 16r8129 16r667C 16r8123 16r667D 16r812F 16r667E 16r814B 16r6721 16r968B 16r6722 16r8146 16r6723 16r813E 16r6724 16r8153 16r6725 16r8151 16r6726 16r80FC 16r6727 16r8171 16r6728 16r816E 16r6729 16r8165 16r672A 16r8166 16r672B 16r8174 16r672C 16r8183 16r672D 16r8188 16r672E 16r818A 16r672F 16r8180 16r6730 16r8182 16r6731 16r81A0 16r6732 16r8195 16r6733 16r81A4 16r6734 16r81A3 16r6735 16r815F 16r6736 16r8193 16r6737 16r81A9 16r6738 16r81B0 16r6739 16r81B5 16r673A 16r81BE 16r673B 16r81B8 16r673C 16r81BD 16r673D 16r81C0 16r673E 16r81C2 16r673F 16r81BA 16r6740 16r81C9 16r6741 16r81CD 16r6742 16r81D1 16r6743 16r81D9 16r6744 16r81D8 16r6745 16r81C8 16r6746 16r81DA 16r6747 16r81DF 16r6748 16r81E0 16r6749 16r81E7 16r674A 16r81FA 16r674B 16r81FB 16r674C 16r81FE 16r674D 16r8201 16r674E 16r8202 16r674F 16r8205 16r6750 16r8207 16r6751 16r820A 16r6752 16r820D 16r6753 16r8210 16r6754 16r8216 16r6755 16r8229 16r6756 16r822B 16r6757 16r8238 16r6758 16r8233 16r6759 16r8240 16r675A 16r8259 16r675B 16r8258 16r675C 16r825D 16r675D 16r825A 16r675E 16r825F 16r675F 16r8264 16r6760 16r8262 16r6761 16r8268 16r6762 16r826A 16r6763 16r826B 16r6764 16r822E 16r6765 16r8271 16r6766 16r8277 16r6767 16r8278 16r6768 16r827E 16r6769 16r828D 16r676A 16r8292 16r676B 16r82AB 16r676C 16r829F 16r676D 16r82BB 16r676E 16r82AC 16r676F 16r82E1 16r6770 16r82E3 16r6771 16r82DF 16r6772 16r82D2 16r6773 16r82F4 16r6774 16r82F3 16r6775 16r82FA 16r6776 16r8393 16r6777 16r8303 16r6778 16r82FB 16r6779 16r82F9 16r677A 16r82DE 16r677B 16r8306 16r677C 16r82DC 16r677D 16r8309 16r677E 16r82D9 16r6821 16r8335 16r6822 16r8334 16r6823 16r8316 16r6824 16r8332 16r6825 16r8331 16r6826 16r8340 16r6827 16r8339 16r6828 16r8350 16r6829 16r8345 16r682A 16r832F 16r682B 16r832B 16r682C 16r8317 16r682D 16r8318 16r682E 16r8385 16r682F 16r839A 16r6830 16r83AA 16r6831 16r839F 16r6832 16r83A2 16r6833 16r8396 16r6834 16r8323 16r6835 16r838E 16r6836 16r8387 16r6837 16r838A 16r6838 16r837C 16r6839 16r83B5 16r683A 16r8373 16r683B 16r8375 16r683C 16r83A0 16r683D 16r8389 16r683E 16r83A8 16r683F 16r83F4 16r6840 16r8413 16r6841 16r83EB 16r6842 16r83CE 16r6843 16r83FD 16r6844 16r8403 16r6845 16r83D8 16r6846 16r840B 16r6847 16r83C1 16r6848 16r83F7 16r6849 16r8407 16r684A 16r83E0 16r684B 16r83F2 16r684C 16r840D 16r684D 16r8422 16r684E 16r8420 16r684F 16r83BD 16r6850 16r8438 16r6851 16r8506 16r6852 16r83FB 16r6853 16r846D 16r6854 16r842A 16r6855 16r843C 16r6856 16r855A 16r6857 16r8484 16r6858 16r8477 16r6859 16r846B 16r685A 16r84AD 16r685B 16r846E 16r685C 16r8482 16r685D 16r8469 16r685E 16r8446 16r685F 16r842C 16r6860 16r846F 16r6861 16r8479 16r6862 16r8435 16r6863 16r84CA 16r6864 16r8462 16r6865 16r84B9 16r6866 16r84BF 16r6867 16r849F 16r6868 16r84D9 16r6869 16r84CD 16r686A 16r84BB 16r686B 16r84DA 16r686C 16r84D0 16r686D 16r84C1 16r686E 16r84C6 16r686F 16r84D6 16r6870 16r84A1 16r6871 16r8521 16r6872 16r84FF 16r6873 16r84F4 16r6874 16r8517 16r6875 16r8518 16r6876 16r852C 16r6877 16r851F 16r6878 16r8515 16r6879 16r8514 16r687A 16r84FC 16r687B 16r8540 16r687C 16r8563 16r687D 16r8558 16r687E 16r8548 16r6921 16r8541 16r6922 16r8602 16r6923 16r854B 16r6924 16r8555 16r6925 16r8580 16r6926 16r85A4 16r6927 16r8588 16r6928 16r8591 16r6929 16r858A 16r692A 16r85A8 16r692B 16r856D 16r692C 16r8594 16r692D 16r859B 16r692E 16r85EA 16r692F 16r8587 16r6930 16r859C 16r6931 16r8577 16r6932 16r857E 16r6933 16r8590 16r6934 16r85C9 16r6935 16r85BA 16r6936 16r85CF 16r6937 16r85B9 16r6938 16r85D0 16r6939 16r85D5 16r693A 16r85DD 16r693B 16r85E5 16r693C 16r85DC 16r693D 16r85F9 16r693E 16r860A 16r693F 16r8613 16r6940 16r860B 16r6941 16r85FE 16r6942 16r85FA 16r6943 16r8606 16r6944 16r8622 16r6945 16r861A 16r6946 16r8630 16r6947 16r863F 16r6948 16r864D 16r6949 16r4E55 16r694A 16r8654 16r694B 16r865F 16r694C 16r8667 16r694D 16r8671 16r694E 16r8693 16r694F 16r86A3 16r6950 16r86A9 16r6951 16r86AA 16r6952 16r868B 16r6953 16r868C 16r6954 16r86B6 16r6955 16r86AF 16r6956 16r86C4 16r6957 16r86C6 16r6958 16r86B0 16r6959 16r86C9 16r695A 16r8823 16r695B 16r86AB 16r695C 16r86D4 16r695D 16r86DE 16r695E 16r86E9 16r695F 16r86EC 16r6960 16r86DF 16r6961 16r86DB 16r6962 16r86EF 16r6963 16r8712 16r6964 16r8706 16r6965 16r8708 16r6966 16r8700 16r6967 16r8703 16r6968 16r86FB 16r6969 16r8711 16r696A 16r8709 16r696B 16r870D 16r696C 16r86F9 16r696D 16r870A 16r696E 16r8734 16r696F 16r873F 16r6970 16r8737 16r6971 16r873B 16r6972 16r8725 16r6973 16r8729 16r6974 16r871A 16r6975 16r8760 16r6976 16r875F 16r6977 16r8778 16r6978 16r874C 16r6979 16r874E 16r697A 16r8774 16r697B 16r8757 16r697C 16r8768 16r697D 16r876E 16r697E 16r8759 16r6A21 16r8753 16r6A22 16r8763 16r6A23 16r876A 16r6A24 16r8805 16r6A25 16r87A2 16r6A26 16r879F 16r6A27 16r8782 16r6A28 16r87AF 16r6A29 16r87CB 16r6A2A 16r87BD 16r6A2B 16r87C0 16r6A2C 16r87D0 16r6A2D 16r96D6 16r6A2E 16r87AB 16r6A2F 16r87C4 16r6A30 16r87B3 16r6A31 16r87C7 16r6A32 16r87C6 16r6A33 16r87BB 16r6A34 16r87EF 16r6A35 16r87F2 16r6A36 16r87E0 16r6A37 16r880F 16r6A38 16r880D 16r6A39 16r87FE 16r6A3A 16r87F6 16r6A3B 16r87F7 16r6A3C 16r880E 16r6A3D 16r87D2 16r6A3E 16r8811 16r6A3F 16r8816 16r6A40 16r8815 16r6A41 16r8822 16r6A42 16r8821 16r6A43 16r8831 16r6A44 16r8836 16r6A45 16r8839 16r6A46 16r8827 16r6A47 16r883B 16r6A48 16r8844 16r6A49 16r8842 16r6A4A 16r8852 16r6A4B 16r8859 16r6A4C 16r885E 16r6A4D 16r8862 16r6A4E 16r886B 16r6A4F 16r8881 16r6A50 16r887E 16r6A51 16r889E 16r6A52 16r8875 16r6A53 16r887D 16r6A54 16r88B5 16r6A55 16r8872 16r6A56 16r8882 16r6A57 16r8897 16r6A58 16r8892 16r6A59 16r88AE 16r6A5A 16r8899 16r6A5B 16r88A2 16r6A5C 16r888D 16r6A5D 16r88A4 16r6A5E 16r88B0 16r6A5F 16r88BF 16r6A60 16r88B1 16r6A61 16r88C3 16r6A62 16r88C4 16r6A63 16r88D4 16r6A64 16r88D8 16r6A65 16r88D9 16r6A66 16r88DD 16r6A67 16r88F9 16r6A68 16r8902 16r6A69 16r88FC 16r6A6A 16r88F4 16r6A6B 16r88E8 16r6A6C 16r88F2 16r6A6D 16r8904 16r6A6E 16r890C 16r6A6F 16r890A 16r6A70 16r8913 16r6A71 16r8943 16r6A72 16r891E 16r6A73 16r8925 16r6A74 16r892A 16r6A75 16r892B 16r6A76 16r8941 16r6A77 16r8944 16r6A78 16r893B 16r6A79 16r8936 16r6A7A 16r8938 16r6A7B 16r894C 16r6A7C 16r891D 16r6A7D 16r8960 16r6A7E 16r895E 16r6B21 16r8966 16r6B22 16r8964 16r6B23 16r896D 16r6B24 16r896A 16r6B25 16r896F 16r6B26 16r8974 16r6B27 16r8977 16r6B28 16r897E 16r6B29 16r8983 16r6B2A 16r8988 16r6B2B 16r898A 16r6B2C 16r8993 16r6B2D 16r8998 16r6B2E 16r89A1 16r6B2F 16r89A9 16r6B30 16r89A6 16r6B31 16r89AC 16r6B32 16r89AF 16r6B33 16r89B2 16r6B34 16r89BA 16r6B35 16r89BD 16r6B36 16r89BF 16r6B37 16r89C0 16r6B38 16r89DA 16r6B39 16r89DC 16r6B3A 16r89DD 16r6B3B 16r89E7 16r6B3C 16r89F4 16r6B3D 16r89F8 16r6B3E 16r8A03 16r6B3F 16r8A16 16r6B40 16r8A10 16r6B41 16r8A0C 16r6B42 16r8A1B 16r6B43 16r8A1D 16r6B44 16r8A25 16r6B45 16r8A36 16r6B46 16r8A41 16r6B47 16r8A5B 16r6B48 16r8A52 16r6B49 16r8A46 16r6B4A 16r8A48 16r6B4B 16r8A7C 16r6B4C 16r8A6D 16r6B4D 16r8A6C 16r6B4E 16r8A62 16r6B4F 16r8A85 16r6B50 16r8A82 16r6B51 16r8A84 16r6B52 16r8AA8 16r6B53 16r8AA1 16r6B54 16r8A91 16r6B55 16r8AA5 16r6B56 16r8AA6 16r6B57 16r8A9A 16r6B58 16r8AA3 16r6B59 16r8AC4 16r6B5A 16r8ACD 16r6B5B 16r8AC2 16r6B5C 16r8ADA 16r6B5D 16r8AEB 16r6B5E 16r8AF3 16r6B5F 16r8AE7 16r6B60 16r8AE4 16r6B61 16r8AF1 16r6B62 16r8B14 16r6B63 16r8AE0 16r6B64 16r8AE2 16r6B65 16r8AF7 16r6B66 16r8ADE 16r6B67 16r8ADB 16r6B68 16r8B0C 16r6B69 16r8B07 16r6B6A 16r8B1A 16r6B6B 16r8AE1 16r6B6C 16r8B16 16r6B6D 16r8B10 16r6B6E 16r8B17 16r6B6F 16r8B20 16r6B70 16r8B33 16r6B71 16r97AB 16r6B72 16r8B26 16r6B73 16r8B2B 16r6B74 16r8B3E 16r6B75 16r8B28 16r6B76 16r8B41 16r6B77 16r8B4C 16r6B78 16r8B4F 16r6B79 16r8B4E 16r6B7A 16r8B49 16r6B7B 16r8B56 16r6B7C 16r8B5B 16r6B7D 16r8B5A 16r6B7E 16r8B6B 16r6C21 16r8B5F 16r6C22 16r8B6C 16r6C23 16r8B6F 16r6C24 16r8B74 16r6C25 16r8B7D 16r6C26 16r8B80 16r6C27 16r8B8C 16r6C28 16r8B8E 16r6C29 16r8B92 16r6C2A 16r8B93 16r6C2B 16r8B96 16r6C2C 16r8B99 16r6C2D 16r8B9A 16r6C2E 16r8C3A 16r6C2F 16r8C41 16r6C30 16r8C3F 16r6C31 16r8C48 16r6C32 16r8C4C 16r6C33 16r8C4E 16r6C34 16r8C50 16r6C35 16r8C55 16r6C36 16r8C62 16r6C37 16r8C6C 16r6C38 16r8C78 16r6C39 16r8C7A 16r6C3A 16r8C82 16r6C3B 16r8C89 16r6C3C 16r8C85 16r6C3D 16r8C8A 16r6C3E 16r8C8D 16r6C3F 16r8C8E 16r6C40 16r8C94 16r6C41 16r8C7C 16r6C42 16r8C98 16r6C43 16r621D 16r6C44 16r8CAD 16r6C45 16r8CAA 16r6C46 16r8CBD 16r6C47 16r8CB2 16r6C48 16r8CB3 16r6C49 16r8CAE 16r6C4A 16r8CB6 16r6C4B 16r8CC8 16r6C4C 16r8CC1 16r6C4D 16r8CE4 16r6C4E 16r8CE3 16r6C4F 16r8CDA 16r6C50 16r8CFD 16r6C51 16r8CFA 16r6C52 16r8CFB 16r6C53 16r8D04 16r6C54 16r8D05 16r6C55 16r8D0A 16r6C56 16r8D07 16r6C57 16r8D0F 16r6C58 16r8D0D 16r6C59 16r8D10 16r6C5A 16r9F4E 16r6C5B 16r8D13 16r6C5C 16r8CCD 16r6C5D 16r8D14 16r6C5E 16r8D16 16r6C5F 16r8D67 16r6C60 16r8D6D 16r6C61 16r8D71 16r6C62 16r8D73 16r6C63 16r8D81 16r6C64 16r8D99 16r6C65 16r8DC2 16r6C66 16r8DBE 16r6C67 16r8DBA 16r6C68 16r8DCF 16r6C69 16r8DDA 16r6C6A 16r8DD6 16r6C6B 16r8DCC 16r6C6C 16r8DDB 16r6C6D 16r8DCB 16r6C6E 16r8DEA 16r6C6F 16r8DEB 16r6C70 16r8DDF 16r6C71 16r8DE3 16r6C72 16r8DFC 16r6C73 16r8E08 16r6C74 16r8E09 16r6C75 16r8DFF 16r6C76 16r8E1D 16r6C77 16r8E1E 16r6C78 16r8E10 16r6C79 16r8E1F 16r6C7A 16r8E42 16r6C7B 16r8E35 16r6C7C 16r8E30 16r6C7D 16r8E34 16r6C7E 16r8E4A 16r6D21 16r8E47 16r6D22 16r8E49 16r6D23 16r8E4C 16r6D24 16r8E50 16r6D25 16r8E48 16r6D26 16r8E59 16r6D27 16r8E64 16r6D28 16r8E60 16r6D29 16r8E2A 16r6D2A 16r8E63 16r6D2B 16r8E55 16r6D2C 16r8E76 16r6D2D 16r8E72 16r6D2E 16r8E7C 16r6D2F 16r8E81 16r6D30 16r8E87 16r6D31 16r8E85 16r6D32 16r8E84 16r6D33 16r8E8B 16r6D34 16r8E8A 16r6D35 16r8E93 16r6D36 16r8E91 16r6D37 16r8E94 16r6D38 16r8E99 16r6D39 16r8EAA 16r6D3A 16r8EA1 16r6D3B 16r8EAC 16r6D3C 16r8EB0 16r6D3D 16r8EC6 16r6D3E 16r8EB1 16r6D3F 16r8EBE 16r6D40 16r8EC5 16r6D41 16r8EC8 16r6D42 16r8ECB 16r6D43 16r8EDB 16r6D44 16r8EE3 16r6D45 16r8EFC 16r6D46 16r8EFB 16r6D47 16r8EEB 16r6D48 16r8EFE 16r6D49 16r8F0A 16r6D4A 16r8F05 16r6D4B 16r8F15 16r6D4C 16r8F12 16r6D4D 16r8F19 16r6D4E 16r8F13 16r6D4F 16r8F1C 16r6D50 16r8F1F 16r6D51 16r8F1B 16r6D52 16r8F0C 16r6D53 16r8F26 16r6D54 16r8F33 16r6D55 16r8F3B 16r6D56 16r8F39 16r6D57 16r8F45 16r6D58 16r8F42 16r6D59 16r8F3E 16r6D5A 16r8F4C 16r6D5B 16r8F49 16r6D5C 16r8F46 16r6D5D 16r8F4E 16r6D5E 16r8F57 16r6D5F 16r8F5C 16r6D60 16r8F62 16r6D61 16r8F63 16r6D62 16r8F64 16r6D63 16r8F9C 16r6D64 16r8F9F 16r6D65 16r8FA3 16r6D66 16r8FAD 16r6D67 16r8FAF 16r6D68 16r8FB7 16r6D69 16r8FDA 16r6D6A 16r8FE5 16r6D6B 16r8FE2 16r6D6C 16r8FEA 16r6D6D 16r8FEF 16r6D6E 16r9087 16r6D6F 16r8FF4 16r6D70 16r9005 16r6D71 16r8FF9 16r6D72 16r8FFA 16r6D73 16r9011 16r6D74 16r9015 16r6D75 16r9021 16r6D76 16r900D 16r6D77 16r901E 16r6D78 16r9016 16r6D79 16r900B 16r6D7A 16r9027 16r6D7B 16r9036 16r6D7C 16r9035 16r6D7D 16r9039 16r6D7E 16r8FF8 16r6E21 16r904F 16r6E22 16r9050 16r6E23 16r9051 16r6E24 16r9052 16r6E25 16r900E 16r6E26 16r9049 16r6E27 16r903E 16r6E28 16r9056 16r6E29 16r9058 16r6E2A 16r905E 16r6E2B 16r9068 16r6E2C 16r906F 16r6E2D 16r9076 16r6E2E 16r96A8 16r6E2F 16r9072 16r6E30 16r9082 16r6E31 16r907D 16r6E32 16r9081 16r6E33 16r9080 16r6E34 16r908A 16r6E35 16r9089 16r6E36 16r908F 16r6E37 16r90A8 16r6E38 16r90AF 16r6E39 16r90B1 16r6E3A 16r90B5 16r6E3B 16r90E2 16r6E3C 16r90E4 16r6E3D 16r6248 16r6E3E 16r90DB 16r6E3F 16r9102 16r6E40 16r9112 16r6E41 16r9119 16r6E42 16r9132 16r6E43 16r9130 16r6E44 16r914A 16r6E45 16r9156 16r6E46 16r9158 16r6E47 16r9163 16r6E48 16r9165 16r6E49 16r9169 16r6E4A 16r9173 16r6E4B 16r9172 16r6E4C 16r918B 16r6E4D 16r9189 16r6E4E 16r9182 16r6E4F 16r91A2 16r6E50 16r91AB 16r6E51 16r91AF 16r6E52 16r91AA 16r6E53 16r91B5 16r6E54 16r91B4 16r6E55 16r91BA 16r6E56 16r91C0 16r6E57 16r91C1 16r6E58 16r91C9 16r6E59 16r91CB 16r6E5A 16r91D0 16r6E5B 16r91D6 16r6E5C 16r91DF 16r6E5D 16r91E1 16r6E5E 16r91DB 16r6E5F 16r91FC 16r6E60 16r91F5 16r6E61 16r91F6 16r6E62 16r921E 16r6E63 16r91FF 16r6E64 16r9214 16r6E65 16r922C 16r6E66 16r9215 16r6E67 16r9211 16r6E68 16r925E 16r6E69 16r9257 16r6E6A 16r9245 16r6E6B 16r9249 16r6E6C 16r9264 16r6E6D 16r9248 16r6E6E 16r9295 16r6E6F 16r923F 16r6E70 16r924B 16r6E71 16r9250 16r6E72 16r929C 16r6E73 16r9296 16r6E74 16r9293 16r6E75 16r929B 16r6E76 16r925A 16r6E77 16r92CF 16r6E78 16r92B9 16r6E79 16r92B7 16r6E7A 16r92E9 16r6E7B 16r930F 16r6E7C 16r92FA 16r6E7D 16r9344 16r6E7E 16r932E 16r6F21 16r9319 16r6F22 16r9322 16r6F23 16r931A 16r6F24 16r9323 16r6F25 16r933A 16r6F26 16r9335 16r6F27 16r933B 16r6F28 16r935C 16r6F29 16r9360 16r6F2A 16r937C 16r6F2B 16r936E 16r6F2C 16r9356 16r6F2D 16r93B0 16r6F2E 16r93AC 16r6F2F 16r93AD 16r6F30 16r9394 16r6F31 16r93B9 16r6F32 16r93D6 16r6F33 16r93D7 16r6F34 16r93E8 16r6F35 16r93E5 16r6F36 16r93D8 16r6F37 16r93C3 16r6F38 16r93DD 16r6F39 16r93D0 16r6F3A 16r93C8 16r6F3B 16r93E4 16r6F3C 16r941A 16r6F3D 16r9414 16r6F3E 16r9413 16r6F3F 16r9403 16r6F40 16r9407 16r6F41 16r9410 16r6F42 16r9436 16r6F43 16r942B 16r6F44 16r9435 16r6F45 16r9421 16r6F46 16r943A 16r6F47 16r9441 16r6F48 16r9452 16r6F49 16r9444 16r6F4A 16r945B 16r6F4B 16r9460 16r6F4C 16r9462 16r6F4D 16r945E 16r6F4E 16r946A 16r6F4F 16r9229 16r6F50 16r9470 16r6F51 16r9475 16r6F52 16r9477 16r6F53 16r947D 16r6F54 16r945A 16r6F55 16r947C 16r6F56 16r947E 16r6F57 16r9481 16r6F58 16r947F 16r6F59 16r9582 16r6F5A 16r9587 16r6F5B 16r958A 16r6F5C 16r9594 16r6F5D 16r9596 16r6F5E 16r9598 16r6F5F 16r9599 16r6F60 16r95A0 16r6F61 16r95A8 16r6F62 16r95A7 16r6F63 16r95AD 16r6F64 16r95BC 16r6F65 16r95BB 16r6F66 16r95B9 16r6F67 16r95BE 16r6F68 16r95CA 16r6F69 16r6FF6 16r6F6A 16r95C3 16r6F6B 16r95CD 16r6F6C 16r95CC 16r6F6D 16r95D5 16r6F6E 16r95D4 16r6F6F 16r95D6 16r6F70 16r95DC 16r6F71 16r95E1 16r6F72 16r95E5 16r6F73 16r95E2 16r6F74 16r9621 16r6F75 16r9628 16r6F76 16r962E 16r6F77 16r962F 16r6F78 16r9642 16r6F79 16r964C 16r6F7A 16r964F 16r6F7B 16r964B 16r6F7C 16r9677 16r6F7D 16r965C 16r6F7E 16r965E 16r7021 16r965D 16r7022 16r965F 16r7023 16r9666 16r7024 16r9672 16r7025 16r966C 16r7026 16r968D 16r7027 16r9698 16r7028 16r9695 16r7029 16r9697 16r702A 16r96AA 16r702B 16r96A7 16r702C 16r96B1 16r702D 16r96B2 16r702E 16r96B0 16r702F 16r96B4 16r7030 16r96B6 16r7031 16r96B8 16r7032 16r96B9 16r7033 16r96CE 16r7034 16r96CB 16r7035 16r96C9 16r7036 16r96CD 16r7037 16r894D 16r7038 16r96DC 16r7039 16r970D 16r703A 16r96D5 16r703B 16r96F9 16r703C 16r9704 16r703D 16r9706 16r703E 16r9708 16r703F 16r9713 16r7040 16r970E 16r7041 16r9711 16r7042 16r970F 16r7043 16r9716 16r7044 16r9719 16r7045 16r9724 16r7046 16r972A 16r7047 16r9730 16r7048 16r9739 16r7049 16r973D 16r704A 16r973E 16r704B 16r9744 16r704C 16r9746 16r704D 16r9748 16r704E 16r9742 16r704F 16r9749 16r7050 16r975C 16r7051 16r9760 16r7052 16r9764 16r7053 16r9766 16r7054 16r9768 16r7055 16r52D2 16r7056 16r976B 16r7057 16r9771 16r7058 16r9779 16r7059 16r9785 16r705A 16r977C 16r705B 16r9781 16r705C 16r977A 16r705D 16r9786 16r705E 16r978B 16r705F 16r978F 16r7060 16r9790 16r7061 16r979C 16r7062 16r97A8 16r7063 16r97A6 16r7064 16r97A3 16r7065 16r97B3 16r7066 16r97B4 16r7067 16r97C3 16r7068 16r97C6 16r7069 16r97C8 16r706A 16r97CB 16r706B 16r97DC 16r706C 16r97ED 16r706D 16r9F4F 16r706E 16r97F2 16r706F 16r7ADF 16r7070 16r97F6 16r7071 16r97F5 16r7072 16r980F 16r7073 16r980C 16r7074 16r9838 16r7075 16r9824 16r7076 16r9821 16r7077 16r9837 16r7078 16r983D 16r7079 16r9846 16r707A 16r984F 16r707B 16r984B 16r707C 16r986B 16r707D 16r986F 16r707E 16r9870 16r7121 16r9871 16r7122 16r9874 16r7123 16r9873 16r7124 16r98AA 16r7125 16r98AF 16r7126 16r98B1 16r7127 16r98B6 16r7128 16r98C4 16r7129 16r98C3 16r712A 16r98C6 16r712B 16r98E9 16r712C 16r98EB 16r712D 16r9903 16r712E 16r9909 16r712F 16r9912 16r7130 16r9914 16r7131 16r9918 16r7132 16r9921 16r7133 16r991D 16r7134 16r991E 16r7135 16r9924 16r7136 16r9920 16r7137 16r992C 16r7138 16r992E 16r7139 16r993D 16r713A 16r993E 16r713B 16r9942 16r713C 16r9949 16r713D 16r9945 16r713E 16r9950 16r713F 16r994B 16r7140 16r9951 16r7141 16r9952 16r7142 16r994C 16r7143 16r9955 16r7144 16r9997 16r7145 16r9998 16r7146 16r99A5 16r7147 16r99AD 16r7148 16r99AE 16r7149 16r99BC 16r714A 16r99DF 16r714B 16r99DB 16r714C 16r99DD 16r714D 16r99D8 16r714E 16r99D1 16r714F 16r99ED 16r7150 16r99EE 16r7151 16r99F1 16r7152 16r99F2 16r7153 16r99FB 16r7154 16r99F8 16r7155 16r9A01 16r7156 16r9A0F 16r7157 16r9A05 16r7158 16r99E2 16r7159 16r9A19 16r715A 16r9A2B 16r715B 16r9A37 16r715C 16r9A45 16r715D 16r9A42 16r715E 16r9A40 16r715F 16r9A43 16r7160 16r9A3E 16r7161 16r9A55 16r7162 16r9A4D 16r7163 16r9A5B 16r7164 16r9A57 16r7165 16r9A5F 16r7166 16r9A62 16r7167 16r9A65 16r7168 16r9A64 16r7169 16r9A69 16r716A 16r9A6B 16r716B 16r9A6A 16r716C 16r9AAD 16r716D 16r9AB0 16r716E 16r9ABC 16r716F 16r9AC0 16r7170 16r9ACF 16r7171 16r9AD1 16r7172 16r9AD3 16r7173 16r9AD4 16r7174 16r9ADE 16r7175 16r9ADF 16r7176 16r9AE2 16r7177 16r9AE3 16r7178 16r9AE6 16r7179 16r9AEF 16r717A 16r9AEB 16r717B 16r9AEE 16r717C 16r9AF4 16r717D 16r9AF1 16r717E 16r9AF7 16r7221 16r9AFB 16r7222 16r9B06 16r7223 16r9B18 16r7224 16r9B1A 16r7225 16r9B1F 16r7226 16r9B22 16r7227 16r9B23 16r7228 16r9B25 16r7229 16r9B27 16r722A 16r9B28 16r722B 16r9B29 16r722C 16r9B2A 16r722D 16r9B2E 16r722E 16r9B2F 16r722F 16r9B32 16r7230 16r9B44 16r7231 16r9B43 16r7232 16r9B4F 16r7233 16r9B4D 16r7234 16r9B4E 16r7235 16r9B51 16r7236 16r9B58 16r7237 16r9B74 16r7238 16r9B93 16r7239 16r9B83 16r723A 16r9B91 16r723B 16r9B96 16r723C 16r9B97 16r723D 16r9B9F 16r723E 16r9BA0 16r723F 16r9BA8 16r7240 16r9BB4 16r7241 16r9BC0 16r7242 16r9BCA 16r7243 16r9BB9 16r7244 16r9BC6 16r7245 16r9BCF 16r7246 16r9BD1 16r7247 16r9BD2 16r7248 16r9BE3 16r7249 16r9BE2 16r724A 16r9BE4 16r724B 16r9BD4 16r724C 16r9BE1 16r724D 16r9C3A 16r724E 16r9BF2 16r724F 16r9BF1 16r7250 16r9BF0 16r7251 16r9C15 16r7252 16r9C14 16r7253 16r9C09 16r7254 16r9C13 16r7255 16r9C0C 16r7256 16r9C06 16r7257 16r9C08 16r7258 16r9C12 16r7259 16r9C0A 16r725A 16r9C04 16r725B 16r9C2E 16r725C 16r9C1B 16r725D 16r9C25 16r725E 16r9C24 16r725F 16r9C21 16r7260 16r9C30 16r7261 16r9C47 16r7262 16r9C32 16r7263 16r9C46 16r7264 16r9C3E 16r7265 16r9C5A 16r7266 16r9C60 16r7267 16r9C67 16r7268 16r9C76 16r7269 16r9C78 16r726A 16r9CE7 16r726B 16r9CEC 16r726C 16r9CF0 16r726D 16r9D09 16r726E 16r9D08 16r726F 16r9CEB 16r7270 16r9D03 16r7271 16r9D06 16r7272 16r9D2A 16r7273 16r9D26 16r7274 16r9DAF 16r7275 16r9D23 16r7276 16r9D1F 16r7277 16r9D44 16r7278 16r9D15 16r7279 16r9D12 16r727A 16r9D41 16r727B 16r9D3F 16r727C 16r9D3E 16r727D 16r9D46 16r727E 16r9D48 16r7321 16r9D5D 16r7322 16r9D5E 16r7323 16r9D64 16r7324 16r9D51 16r7325 16r9D50 16r7326 16r9D59 16r7327 16r9D72 16r7328 16r9D89 16r7329 16r9D87 16r732A 16r9DAB 16r732B 16r9D6F 16r732C 16r9D7A 16r732D 16r9D9A 16r732E 16r9DA4 16r732F 16r9DA9 16r7330 16r9DB2 16r7331 16r9DC4 16r7332 16r9DC1 16r7333 16r9DBB 16r7334 16r9DB8 16r7335 16r9DBA 16r7336 16r9DC6 16r7337 16r9DCF 16r7338 16r9DC2 16r7339 16r9DD9 16r733A 16r9DD3 16r733B 16r9DF8 16r733C 16r9DE6 16r733D 16r9DED 16r733E 16r9DEF 16r733F 16r9DFD 16r7340 16r9E1A 16r7341 16r9E1B 16r7342 16r9E1E 16r7343 16r9E75 16r7344 16r9E79 16r7345 16r9E7D 16r7346 16r9E81 16r7347 16r9E88 16r7348 16r9E8B 16r7349 16r9E8C 16r734A 16r9E92 16r734B 16r9E95 16r734C 16r9E91 16r734D 16r9E9D 16r734E 16r9EA5 16r734F 16r9EA9 16r7350 16r9EB8 16r7351 16r9EAA 16r7352 16r9EAD 16r7353 16r9761 16r7354 16r9ECC 16r7355 16r9ECE 16r7356 16r9ECF 16r7357 16r9ED0 16r7358 16r9ED4 16r7359 16r9EDC 16r735A 16r9EDE 16r735B 16r9EDD 16r735C 16r9EE0 16r735D 16r9EE5 16r735E 16r9EE8 16r735F 16r9EEF 16r7360 16r9EF4 16r7361 16r9EF6 16r7362 16r9EF7 16r7363 16r9EF9 16r7364 16r9EFB 16r7365 16r9EFC 16r7366 16r9EFD 16r7367 16r9F07 16r7368 16r9F08 16r7369 16r76B7 16r736A 16r9F15 16r736B 16r9F21 16r736C 16r9F2C 16r736D 16r9F3E 16r736E 16r9F4A 16r736F 16r9F52 16r7370 16r9F54 16r7371 16r9F63 16r7372 16r9F5F 16r7373 16r9F60 16r7374 16r9F61 16r7375 16r9F66 16r7376 16r9F67 16r7377 16r9F6C 16r7378 16r9F6A 16r7379 16r9F77 16r737A 16r9F72 16r737B 16r9F76 16r737C 16r9F95 16r737D 16r9F9C 16r737E 16r9FA0 16r7421 16r582F 16r7422 16r69C7 16r7423 16r9059 16r7424 16r7464 16r7425 16r51DC 16r7426 16r7199). table size even ifFalse: [^ self error: 'given table size must be even']. size := table size / 2. jisX0208 := Array new: size. unicode := Array new: size. 1 to: table size by: 2 do: [:index | | tableIndex | tableIndex := index + 1 / 2. jisX0208 at: tableIndex put: (table at: index). unicode at: tableIndex put: (table at: index + 1)]. jisX02082 := Array new: 94*94 withAll: -1. jisX0208 withIndexDo: [:elem :index | | uIndex u code | code := (elem // 256 - 33) * 94 + (elem \\ 256 - 33) + 1. (jisX02082 at: code) ~= -1 ifTrue: [self error]. uIndex := jisX0208 indexOf: elem. uIndex = 0 ifFalse: [ u := unicode at: uIndex. jisX02082 at: code put: u. ]. ]. JISX0208Table := jisX02082. ! ! !UCSTable class methodsFor: '*Unicode-Initialization' stamp: 'MarcusDenker 9/12/2013 16:40' prior: 53758742! initializeKSX1001Table "UCSTable initializeKSX1001Table" | table size ksX1001 unicode ksX10012 | table := #(16r2121 16r3000 16r2122 16r3001 16r2123 16r3002 16r2124 16r00B7 16r2125 16r2025 16r2126 16r2026 16r2127 16r00A8 16r2128 16r3003 16r2129 16r00AD 16r212A 16r2015 16r212B 16r2225 16r212C 16rFF3C 16r212D 16r223C 16r212E 16r2018 16r212F 16r2019 16r2130 16r201C 16r2131 16r201D 16r2132 16r3014 16r2133 16r3015 16r2134 16r3008 16r2135 16r3009 16r2136 16r300A 16r2137 16r300B 16r2138 16r300C 16r2139 16r300D 16r213A 16r300E 16r213B 16r300F 16r213C 16r3010 16r213D 16r3011 16r213E 16r00B1 16r213F 16r00D7 16r2140 16r00F7 16r2141 16r2260 16r2142 16r2264 16r2143 16r2265 16r2144 16r221E 16r2145 16r2234 16r2146 16r00B0 16r2147 16r2032 16r2148 16r2033 16r2149 16r2103 16r214A 16r212B 16r214B 16rFFE0 16r214C 16rFFE1 16r214D 16rFFE5 16r214E 16r2642 16r214F 16r2640 16r2150 16r2220 16r2151 16r22A5 16r2152 16r2312 16r2153 16r2202 16r2154 16r2207 16r2155 16r2261 16r2156 16r2252 16r2157 16r00A7 16r2158 16r203B 16r2159 16r2606 16r215A 16r2605 16r215B 16r25CB 16r215C 16r25CF 16r215D 16r25CE 16r215E 16r25C7 16r215F 16r25C6 16r2160 16r25A1 16r2161 16r25A0 16r2162 16r25B3 16r2163 16r25B2 16r2164 16r25BD 16r2165 16r25BC 16r2166 16r2192 16r2167 16r2190 16r2168 16r2191 16r2169 16r2193 16r216A 16r2194 16r216B 16r3013 16r216C 16r226A 16r216D 16r226B 16r216E 16r221A 16r216F 16r223D 16r2170 16r221D 16r2171 16r2235 16r2172 16r222B 16r2173 16r222C 16r2174 16r2208 16r2175 16r220B 16r2176 16r2286 16r2177 16r2287 16r2178 16r2282 16r2179 16r2283 16r217A 16r222A 16r217B 16r2229 16r217C 16r2227 16r217D 16r2228 16r217E 16rFFE2 16r2221 16r21D2 16r2222 16r21D4 16r2223 16r2200 16r2224 16r2203 16r2225 16r00B4 16r2226 16rFF5E 16r2227 16r02C7 16r2228 16r02D8 16r2229 16r02DD 16r222A 16r02DA 16r222B 16r02D9 16r222C 16r00B8 16r222D 16r02DB 16r222E 16r00A1 16r222F 16r00BF 16r2230 16r02D0 16r2231 16r222E 16r2232 16r2211 16r2233 16r220F 16r2234 16r00A4 16r2235 16r2109 16r2236 16r2030 16r2237 16r25C1 16r2238 16r25C0 16r2239 16r25B7 16r223A 16r25B6 16r223B 16r2664 16r223C 16r2660 16r223D 16r2661 16r223E 16r2665 16r223F 16r2667 16r2240 16r2663 16r2241 16r2299 16r2242 16r25C8 16r2243 16r25A3 16r2244 16r25D0 16r2245 16r25D1 16r2246 16r2592 16r2247 16r25A4 16r2248 16r25A5 16r2249 16r25A8 16r224A 16r25A7 16r224B 16r25A6 16r224C 16r25A9 16r224D 16r2668 16r224E 16r260F 16r224F 16r260E 16r2250 16r261C 16r2251 16r261E 16r2252 16r00B6 16r2253 16r2020 16r2254 16r2021 16r2255 16r2195 16r2256 16r2197 16r2257 16r2199 16r2258 16r2196 16r2259 16r2198 16r225A 16r266D 16r225B 16r2669 16r225C 16r266A 16r225D 16r266C 16r225E 16r327F 16r225F 16r321C 16r2260 16r2116 16r2261 16r33C7 16r2262 16r2122 16r2263 16r33C2 16r2264 16r33D8 16r2265 16r2121 16r2321 16rFF01 16r2322 16rFF02 16r2323 16rFF03 16r2324 16rFF04 16r2325 16rFF05 16r2326 16rFF06 16r2327 16rFF07 16r2328 16rFF08 16r2329 16rFF09 16r232A 16rFF0A 16r232B 16rFF0B 16r232C 16rFF0C 16r232D 16rFF0D 16r232E 16rFF0E 16r232F 16rFF0F 16r2330 16rFF10 16r2331 16rFF11 16r2332 16rFF12 16r2333 16rFF13 16r2334 16rFF14 16r2335 16rFF15 16r2336 16rFF16 16r2337 16rFF17 16r2338 16rFF18 16r2339 16rFF19 16r233A 16rFF1A 16r233B 16rFF1B 16r233C 16rFF1C 16r233D 16rFF1D 16r233E 16rFF1E 16r233F 16rFF1F 16r2340 16rFF20 16r2341 16rFF21 16r2342 16rFF22 16r2343 16rFF23 16r2344 16rFF24 16r2345 16rFF25 16r2346 16rFF26 16r2347 16rFF27 16r2348 16rFF28 16r2349 16rFF29 16r234A 16rFF2A 16r234B 16rFF2B 16r234C 16rFF2C 16r234D 16rFF2D 16r234E 16rFF2E 16r234F 16rFF2F 16r2350 16rFF30 16r2351 16rFF31 16r2352 16rFF32 16r2353 16rFF33 16r2354 16rFF34 16r2355 16rFF35 16r2356 16rFF36 16r2357 16rFF37 16r2358 16rFF38 16r2359 16rFF39 16r235A 16rFF3A 16r235B 16rFF3B 16r235C 16rFFE6 16r235D 16rFF3D 16r235E 16rFF3E 16r235F 16rFF3F 16r2360 16rFF40 16r2361 16rFF41 16r2362 16rFF42 16r2363 16rFF43 16r2364 16rFF44 16r2365 16rFF45 16r2366 16rFF46 16r2367 16rFF47 16r2368 16rFF48 16r2369 16rFF49 16r236A 16rFF4A 16r236B 16rFF4B 16r236C 16rFF4C 16r236D 16rFF4D 16r236E 16rFF4E 16r236F 16rFF4F 16r2370 16rFF50 16r2371 16rFF51 16r2372 16rFF52 16r2373 16rFF53 16r2374 16rFF54 16r2375 16rFF55 16r2376 16rFF56 16r2377 16rFF57 16r2378 16rFF58 16r2379 16rFF59 16r237A 16rFF5A 16r237B 16rFF5B 16r237C 16rFF5C 16r237D 16rFF5D 16r237E 16rFFE3 16r2421 16r3131 16r2422 16r3132 16r2423 16r3133 16r2424 16r3134 16r2425 16r3135 16r2426 16r3136 16r2427 16r3137 16r2428 16r3138 16r2429 16r3139 16r242A 16r313A 16r242B 16r313B 16r242C 16r313C 16r242D 16r313D 16r242E 16r313E 16r242F 16r313F 16r2430 16r3140 16r2431 16r3141 16r2432 16r3142 16r2433 16r3143 16r2434 16r3144 16r2435 16r3145 16r2436 16r3146 16r2437 16r3147 16r2438 16r3148 16r2439 16r3149 16r243A 16r314A 16r243B 16r314B 16r243C 16r314C 16r243D 16r314D 16r243E 16r314E 16r243F 16r314F 16r2440 16r3150 16r2441 16r3151 16r2442 16r3152 16r2443 16r3153 16r2444 16r3154 16r2445 16r3155 16r2446 16r3156 16r2447 16r3157 16r2448 16r3158 16r2449 16r3159 16r244A 16r315A 16r244B 16r315B 16r244C 16r315C 16r244D 16r315D 16r244E 16r315E 16r244F 16r315F 16r2450 16r3160 16r2451 16r3161 16r2452 16r3162 16r2453 16r3163 16r2454 16r3164 16r2455 16r3165 16r2456 16r3166 16r2457 16r3167 16r2458 16r3168 16r2459 16r3169 16r245A 16r316A 16r245B 16r316B 16r245C 16r316C 16r245D 16r316D 16r245E 16r316E 16r245F 16r316F 16r2460 16r3170 16r2461 16r3171 16r2462 16r3172 16r2463 16r3173 16r2464 16r3174 16r2465 16r3175 16r2466 16r3176 16r2467 16r3177 16r2468 16r3178 16r2469 16r3179 16r246A 16r317A 16r246B 16r317B 16r246C 16r317C 16r246D 16r317D 16r246E 16r317E 16r246F 16r317F 16r2470 16r3180 16r2471 16r3181 16r2472 16r3182 16r2473 16r3183 16r2474 16r3184 16r2475 16r3185 16r2476 16r3186 16r2477 16r3187 16r2478 16r3188 16r2479 16r3189 16r247A 16r318A 16r247B 16r318B 16r247C 16r318C 16r247D 16r318D 16r247E 16r318E 16r2521 16r2170 16r2522 16r2171 16r2523 16r2172 16r2524 16r2173 16r2525 16r2174 16r2526 16r2175 16r2527 16r2176 16r2528 16r2177 16r2529 16r2178 16r252A 16r2179 16r2530 16r2160 16r2531 16r2161 16r2532 16r2162 16r2533 16r2163 16r2534 16r2164 16r2535 16r2165 16r2536 16r2166 16r2537 16r2167 16r2538 16r2168 16r2539 16r2169 16r2541 16r0391 16r2542 16r0392 16r2543 16r0393 16r2544 16r0394 16r2545 16r0395 16r2546 16r0396 16r2547 16r0397 16r2548 16r0398 16r2549 16r0399 16r254A 16r039A 16r254B 16r039B 16r254C 16r039C 16r254D 16r039D 16r254E 16r039E 16r254F 16r039F 16r2550 16r03A0 16r2551 16r03A1 16r2552 16r03A3 16r2553 16r03A4 16r2554 16r03A5 16r2555 16r03A6 16r2556 16r03A7 16r2557 16r03A8 16r2558 16r03A9 16r2561 16r03B1 16r2562 16r03B2 16r2563 16r03B3 16r2564 16r03B4 16r2565 16r03B5 16r2566 16r03B6 16r2567 16r03B7 16r2568 16r03B8 16r2569 16r03B9 16r256A 16r03BA 16r256B 16r03BB 16r256C 16r03BC 16r256D 16r03BD 16r256E 16r03BE 16r256F 16r03BF 16r2570 16r03C0 16r2571 16r03C1 16r2572 16r03C3 16r2573 16r03C4 16r2574 16r03C5 16r2575 16r03C6 16r2576 16r03C7 16r2577 16r03C8 16r2578 16r03C9 16r2621 16r2500 16r2622 16r2502 16r2623 16r250C 16r2624 16r2510 16r2625 16r2518 16r2626 16r2514 16r2627 16r251C 16r2628 16r252C 16r2629 16r2524 16r262A 16r2534 16r262B 16r253C 16r262C 16r2501 16r262D 16r2503 16r262E 16r250F 16r262F 16r2513 16r2630 16r251B 16r2631 16r2517 16r2632 16r2523 16r2633 16r2533 16r2634 16r252B 16r2635 16r253B 16r2636 16r254B 16r2637 16r2520 16r2638 16r252F 16r2639 16r2528 16r263A 16r2537 16r263B 16r253F 16r263C 16r251D 16r263D 16r2530 16r263E 16r2525 16r263F 16r2538 16r2640 16r2542 16r2641 16r2512 16r2642 16r2511 16r2643 16r251A 16r2644 16r2519 16r2645 16r2516 16r2646 16r2515 16r2647 16r250E 16r2648 16r250D 16r2649 16r251E 16r264A 16r251F 16r264B 16r2521 16r264C 16r2522 16r264D 16r2526 16r264E 16r2527 16r264F 16r2529 16r2650 16r252A 16r2651 16r252D 16r2652 16r252E 16r2653 16r2531 16r2654 16r2532 16r2655 16r2535 16r2656 16r2536 16r2657 16r2539 16r2658 16r253A 16r2659 16r253D 16r265A 16r253E 16r265B 16r2540 16r265C 16r2541 16r265D 16r2543 16r265E 16r2544 16r265F 16r2545 16r2660 16r2546 16r2661 16r2547 16r2662 16r2548 16r2663 16r2549 16r2664 16r254A 16r2721 16r3395 16r2722 16r3396 16r2723 16r3397 16r2724 16r2113 16r2725 16r3398 16r2726 16r33C4 16r2727 16r33A3 16r2728 16r33A4 16r2729 16r33A5 16r272A 16r33A6 16r272B 16r3399 16r272C 16r339A 16r272D 16r339B 16r272E 16r339C 16r272F 16r339D 16r2730 16r339E 16r2731 16r339F 16r2732 16r33A0 16r2733 16r33A1 16r2734 16r33A2 16r2735 16r33CA 16r2736 16r338D 16r2737 16r338E 16r2738 16r338F 16r2739 16r33CF 16r273A 16r3388 16r273B 16r3389 16r273C 16r33C8 16r273D 16r33A7 16r273E 16r33A8 16r273F 16r33B0 16r2740 16r33B1 16r2741 16r33B2 16r2742 16r33B3 16r2743 16r33B4 16r2744 16r33B5 16r2745 16r33B6 16r2746 16r33B7 16r2747 16r33B8 16r2748 16r33B9 16r2749 16r3380 16r274A 16r3381 16r274B 16r3382 16r274C 16r3383 16r274D 16r3384 16r274E 16r33BA 16r274F 16r33BB 16r2750 16r33BC 16r2751 16r33BD 16r2752 16r33BE 16r2753 16r33BF 16r2754 16r3390 16r2755 16r3391 16r2756 16r3392 16r2757 16r3393 16r2758 16r3394 16r2759 16r2126 16r275A 16r33C0 16r275B 16r33C1 16r275C 16r338A 16r275D 16r338B 16r275E 16r338C 16r275F 16r33D6 16r2760 16r33C5 16r2761 16r33AD 16r2762 16r33AE 16r2763 16r33AF 16r2764 16r33DB 16r2765 16r33A9 16r2766 16r33AA 16r2767 16r33AB 16r2768 16r33AC 16r2769 16r33DD 16r276A 16r33D0 16r276B 16r33D3 16r276C 16r33C3 16r276D 16r33C9 16r276E 16r33DC 16r276F 16r33C6 16r2821 16r00C6 16r2822 16r00D0 16r2823 16r00AA 16r2824 16r0126 16r2826 16r0132 16r2828 16r013F 16r2829 16r0141 16r282A 16r00D8 16r282B 16r0152 16r282C 16r00BA 16r282D 16r00DE 16r282E 16r0166 16r282F 16r014A 16r2831 16r3260 16r2832 16r3261 16r2833 16r3262 16r2834 16r3263 16r2835 16r3264 16r2836 16r3265 16r2837 16r3266 16r2838 16r3267 16r2839 16r3268 16r283A 16r3269 16r283B 16r326A 16r283C 16r326B 16r283D 16r326C 16r283E 16r326D 16r283F 16r326E 16r2840 16r326F 16r2841 16r3270 16r2842 16r3271 16r2843 16r3272 16r2844 16r3273 16r2845 16r3274 16r2846 16r3275 16r2847 16r3276 16r2848 16r3277 16r2849 16r3278 16r284A 16r3279 16r284B 16r327A 16r284C 16r327B 16r284D 16r24D0 16r284E 16r24D1 16r284F 16r24D2 16r2850 16r24D3 16r2851 16r24D4 16r2852 16r24D5 16r2853 16r24D6 16r2854 16r24D7 16r2855 16r24D8 16r2856 16r24D9 16r2857 16r24DA 16r2858 16r24DB 16r2859 16r24DC 16r285A 16r24DD 16r285B 16r24DE 16r285C 16r24DF 16r285D 16r24E0 16r285E 16r24E1 16r285F 16r24E2 16r2860 16r24E3 16r2861 16r24E4 16r2862 16r24E5 16r2863 16r24E6 16r2864 16r24E7 16r2865 16r24E8 16r2866 16r24E9 16r2867 16r2460 16r2868 16r2461 16r2869 16r2462 16r286A 16r2463 16r286B 16r2464 16r286C 16r2465 16r286D 16r2466 16r286E 16r2467 16r286F 16r2468 16r2870 16r2469 16r2871 16r246A 16r2872 16r246B 16r2873 16r246C 16r2874 16r246D 16r2875 16r246E 16r2876 16r00BD 16r2877 16r2153 16r2878 16r2154 16r2879 16r00BC 16r287A 16r00BE 16r287B 16r215B 16r287C 16r215C 16r287D 16r215D 16r287E 16r215E 16r2921 16r00E6 16r2922 16r0111 16r2923 16r00F0 16r2924 16r0127 16r2925 16r0131 16r2926 16r0133 16r2927 16r0138 16r2928 16r0140 16r2929 16r0142 16r292A 16r00F8 16r292B 16r0153 16r292C 16r00DF 16r292D 16r00FE 16r292E 16r0167 16r292F 16r014B 16r2930 16r0149 16r2931 16r3200 16r2932 16r3201 16r2933 16r3202 16r2934 16r3203 16r2935 16r3204 16r2936 16r3205 16r2937 16r3206 16r2938 16r3207 16r2939 16r3208 16r293A 16r3209 16r293B 16r320A 16r293C 16r320B 16r293D 16r320C 16r293E 16r320D 16r293F 16r320E 16r2940 16r320F 16r2941 16r3210 16r2942 16r3211 16r2943 16r3212 16r2944 16r3213 16r2945 16r3214 16r2946 16r3215 16r2947 16r3216 16r2948 16r3217 16r2949 16r3218 16r294A 16r3219 16r294B 16r321A 16r294C 16r321B 16r294D 16r249C 16r294E 16r249D 16r294F 16r249E 16r2950 16r249F 16r2951 16r24A0 16r2952 16r24A1 16r2953 16r24A2 16r2954 16r24A3 16r2955 16r24A4 16r2956 16r24A5 16r2957 16r24A6 16r2958 16r24A7 16r2959 16r24A8 16r295A 16r24A9 16r295B 16r24AA 16r295C 16r24AB 16r295D 16r24AC 16r295E 16r24AD 16r295F 16r24AE 16r2960 16r24AF 16r2961 16r24B0 16r2962 16r24B1 16r2963 16r24B2 16r2964 16r24B3 16r2965 16r24B4 16r2966 16r24B5 16r2967 16r2474 16r2968 16r2475 16r2969 16r2476 16r296A 16r2477 16r296B 16r2478 16r296C 16r2479 16r296D 16r247A 16r296E 16r247B 16r296F 16r247C 16r2970 16r247D 16r2971 16r247E 16r2972 16r247F 16r2973 16r2480 16r2974 16r2481 16r2975 16r2482 16r2976 16r00B9 16r2977 16r00B2 16r2978 16r00B3 16r2979 16r2074 16r297A 16r207F 16r297B 16r2081 16r297C 16r2082 16r297D 16r2083 16r297E 16r2084 16r2A21 16r3041 16r2A22 16r3042 16r2A23 16r3043 16r2A24 16r3044 16r2A25 16r3045 16r2A26 16r3046 16r2A27 16r3047 16r2A28 16r3048 16r2A29 16r3049 16r2A2A 16r304A 16r2A2B 16r304B 16r2A2C 16r304C 16r2A2D 16r304D 16r2A2E 16r304E 16r2A2F 16r304F 16r2A30 16r3050 16r2A31 16r3051 16r2A32 16r3052 16r2A33 16r3053 16r2A34 16r3054 16r2A35 16r3055 16r2A36 16r3056 16r2A37 16r3057 16r2A38 16r3058 16r2A39 16r3059 16r2A3A 16r305A 16r2A3B 16r305B 16r2A3C 16r305C 16r2A3D 16r305D 16r2A3E 16r305E 16r2A3F 16r305F 16r2A40 16r3060 16r2A41 16r3061 16r2A42 16r3062 16r2A43 16r3063 16r2A44 16r3064 16r2A45 16r3065 16r2A46 16r3066 16r2A47 16r3067 16r2A48 16r3068 16r2A49 16r3069 16r2A4A 16r306A 16r2A4B 16r306B 16r2A4C 16r306C 16r2A4D 16r306D 16r2A4E 16r306E 16r2A4F 16r306F 16r2A50 16r3070 16r2A51 16r3071 16r2A52 16r3072 16r2A53 16r3073 16r2A54 16r3074 16r2A55 16r3075 16r2A56 16r3076 16r2A57 16r3077 16r2A58 16r3078 16r2A59 16r3079 16r2A5A 16r307A 16r2A5B 16r307B 16r2A5C 16r307C 16r2A5D 16r307D 16r2A5E 16r307E 16r2A5F 16r307F 16r2A60 16r3080 16r2A61 16r3081 16r2A62 16r3082 16r2A63 16r3083 16r2A64 16r3084 16r2A65 16r3085 16r2A66 16r3086 16r2A67 16r3087 16r2A68 16r3088 16r2A69 16r3089 16r2A6A 16r308A 16r2A6B 16r308B 16r2A6C 16r308C 16r2A6D 16r308D 16r2A6E 16r308E 16r2A6F 16r308F 16r2A70 16r3090 16r2A71 16r3091 16r2A72 16r3092 16r2A73 16r3093 16r2B21 16r30A1 16r2B22 16r30A2 16r2B23 16r30A3 16r2B24 16r30A4 16r2B25 16r30A5 16r2B26 16r30A6 16r2B27 16r30A7 16r2B28 16r30A8 16r2B29 16r30A9 16r2B2A 16r30AA 16r2B2B 16r30AB 16r2B2C 16r30AC 16r2B2D 16r30AD 16r2B2E 16r30AE 16r2B2F 16r30AF 16r2B30 16r30B0 16r2B31 16r30B1 16r2B32 16r30B2 16r2B33 16r30B3 16r2B34 16r30B4 16r2B35 16r30B5 16r2B36 16r30B6 16r2B37 16r30B7 16r2B38 16r30B8 16r2B39 16r30B9 16r2B3A 16r30BA 16r2B3B 16r30BB 16r2B3C 16r30BC 16r2B3D 16r30BD 16r2B3E 16r30BE 16r2B3F 16r30BF 16r2B40 16r30C0 16r2B41 16r30C1 16r2B42 16r30C2 16r2B43 16r30C3 16r2B44 16r30C4 16r2B45 16r30C5 16r2B46 16r30C6 16r2B47 16r30C7 16r2B48 16r30C8 16r2B49 16r30C9 16r2B4A 16r30CA 16r2B4B 16r30CB 16r2B4C 16r30CC 16r2B4D 16r30CD 16r2B4E 16r30CE 16r2B4F 16r30CF 16r2B50 16r30D0 16r2B51 16r30D1 16r2B52 16r30D2 16r2B53 16r30D3 16r2B54 16r30D4 16r2B55 16r30D5 16r2B56 16r30D6 16r2B57 16r30D7 16r2B58 16r30D8 16r2B59 16r30D9 16r2B5A 16r30DA 16r2B5B 16r30DB 16r2B5C 16r30DC 16r2B5D 16r30DD 16r2B5E 16r30DE 16r2B5F 16r30DF 16r2B60 16r30E0 16r2B61 16r30E1 16r2B62 16r30E2 16r2B63 16r30E3 16r2B64 16r30E4 16r2B65 16r30E5 16r2B66 16r30E6 16r2B67 16r30E7 16r2B68 16r30E8 16r2B69 16r30E9 16r2B6A 16r30EA 16r2B6B 16r30EB 16r2B6C 16r30EC 16r2B6D 16r30ED 16r2B6E 16r30EE 16r2B6F 16r30EF 16r2B70 16r30F0 16r2B71 16r30F1 16r2B72 16r30F2 16r2B73 16r30F3 16r2B74 16r30F4 16r2B75 16r30F5 16r2B76 16r30F6 16r2C21 16r0410 16r2C22 16r0411 16r2C23 16r0412 16r2C24 16r0413 16r2C25 16r0414 16r2C26 16r0415 16r2C27 16r0401 16r2C28 16r0416 16r2C29 16r0417 16r2C2A 16r0418 16r2C2B 16r0419 16r2C2C 16r041A 16r2C2D 16r041B 16r2C2E 16r041C 16r2C2F 16r041D 16r2C30 16r041E 16r2C31 16r041F 16r2C32 16r0420 16r2C33 16r0421 16r2C34 16r0422 16r2C35 16r0423 16r2C36 16r0424 16r2C37 16r0425 16r2C38 16r0426 16r2C39 16r0427 16r2C3A 16r0428 16r2C3B 16r0429 16r2C3C 16r042A 16r2C3D 16r042B 16r2C3E 16r042C 16r2C3F 16r042D 16r2C40 16r042E 16r2C41 16r042F 16r2C51 16r0430 16r2C52 16r0431 16r2C53 16r0432 16r2C54 16r0433 16r2C55 16r0434 16r2C56 16r0435 16r2C57 16r0451 16r2C58 16r0436 16r2C59 16r0437 16r2C5A 16r0438 16r2C5B 16r0439 16r2C5C 16r043A 16r2C5D 16r043B 16r2C5E 16r043C 16r2C5F 16r043D 16r2C60 16r043E 16r2C61 16r043F 16r2C62 16r0440 16r2C63 16r0441 16r2C64 16r0442 16r2C65 16r0443 16r2C66 16r0444 16r2C67 16r0445 16r2C68 16r0446 16r2C69 16r0447 16r2C6A 16r0448 16r2C6B 16r0449 16r2C6C 16r044A 16r2C6D 16r044B 16r2C6E 16r044C 16r2C6F 16r044D 16r2C70 16r044E 16r2C71 16r044F 16r3021 16rAC00 16r3022 16rAC01 16r3023 16rAC04 16r3024 16rAC07 16r3025 16rAC08 16r3026 16rAC09 16r3027 16rAC0A 16r3028 16rAC10 16r3029 16rAC11 16r302A 16rAC12 16r302B 16rAC13 16r302C 16rAC14 16r302D 16rAC15 16r302E 16rAC16 16r302F 16rAC17 16r3030 16rAC19 16r3031 16rAC1A 16r3032 16rAC1B 16r3033 16rAC1C 16r3034 16rAC1D 16r3035 16rAC20 16r3036 16rAC24 16r3037 16rAC2C 16r3038 16rAC2D 16r3039 16rAC2F 16r303A 16rAC30 16r303B 16rAC31 16r303C 16rAC38 16r303D 16rAC39 16r303E 16rAC3C 16r303F 16rAC40 16r3040 16rAC4B 16r3041 16rAC4D 16r3042 16rAC54 16r3043 16rAC58 16r3044 16rAC5C 16r3045 16rAC70 16r3046 16rAC71 16r3047 16rAC74 16r3048 16rAC77 16r3049 16rAC78 16r304A 16rAC7A 16r304B 16rAC80 16r304C 16rAC81 16r304D 16rAC83 16r304E 16rAC84 16r304F 16rAC85 16r3050 16rAC86 16r3051 16rAC89 16r3052 16rAC8A 16r3053 16rAC8B 16r3054 16rAC8C 16r3055 16rAC90 16r3056 16rAC94 16r3057 16rAC9C 16r3058 16rAC9D 16r3059 16rAC9F 16r305A 16rACA0 16r305B 16rACA1 16r305C 16rACA8 16r305D 16rACA9 16r305E 16rACAA 16r305F 16rACAC 16r3060 16rACAF 16r3061 16rACB0 16r3062 16rACB8 16r3063 16rACB9 16r3064 16rACBB 16r3065 16rACBC 16r3066 16rACBD 16r3067 16rACC1 16r3068 16rACC4 16r3069 16rACC8 16r306A 16rACCC 16r306B 16rACD5 16r306C 16rACD7 16r306D 16rACE0 16r306E 16rACE1 16r306F 16rACE4 16r3070 16rACE7 16r3071 16rACE8 16r3072 16rACEA 16r3073 16rACEC 16r3074 16rACEF 16r3075 16rACF0 16r3076 16rACF1 16r3077 16rACF3 16r3078 16rACF5 16r3079 16rACF6 16r307A 16rACFC 16r307B 16rACFD 16r307C 16rAD00 16r307D 16rAD04 16r307E 16rAD06 16r3121 16rAD0C 16r3122 16rAD0D 16r3123 16rAD0F 16r3124 16rAD11 16r3125 16rAD18 16r3126 16rAD1C 16r3127 16rAD20 16r3128 16rAD29 16r3129 16rAD2C 16r312A 16rAD2D 16r312B 16rAD34 16r312C 16rAD35 16r312D 16rAD38 16r312E 16rAD3C 16r312F 16rAD44 16r3130 16rAD45 16r3131 16rAD47 16r3132 16rAD49 16r3133 16rAD50 16r3134 16rAD54 16r3135 16rAD58 16r3136 16rAD61 16r3137 16rAD63 16r3138 16rAD6C 16r3139 16rAD6D 16r313A 16rAD70 16r313B 16rAD73 16r313C 16rAD74 16r313D 16rAD75 16r313E 16rAD76 16r313F 16rAD7B 16r3140 16rAD7C 16r3141 16rAD7D 16r3142 16rAD7F 16r3143 16rAD81 16r3144 16rAD82 16r3145 16rAD88 16r3146 16rAD89 16r3147 16rAD8C 16r3148 16rAD90 16r3149 16rAD9C 16r314A 16rAD9D 16r314B 16rADA4 16r314C 16rADB7 16r314D 16rADC0 16r314E 16rADC1 16r314F 16rADC4 16r3150 16rADC8 16r3151 16rADD0 16r3152 16rADD1 16r3153 16rADD3 16r3154 16rADDC 16r3155 16rADE0 16r3156 16rADE4 16r3157 16rADF8 16r3158 16rADF9 16r3159 16rADFC 16r315A 16rADFF 16r315B 16rAE00 16r315C 16rAE01 16r315D 16rAE08 16r315E 16rAE09 16r315F 16rAE0B 16r3160 16rAE0D 16r3161 16rAE14 16r3162 16rAE30 16r3163 16rAE31 16r3164 16rAE34 16r3165 16rAE37 16r3166 16rAE38 16r3167 16rAE3A 16r3168 16rAE40 16r3169 16rAE41 16r316A 16rAE43 16r316B 16rAE45 16r316C 16rAE46 16r316D 16rAE4A 16r316E 16rAE4C 16r316F 16rAE4D 16r3170 16rAE4E 16r3171 16rAE50 16r3172 16rAE54 16r3173 16rAE56 16r3174 16rAE5C 16r3175 16rAE5D 16r3176 16rAE5F 16r3177 16rAE60 16r3178 16rAE61 16r3179 16rAE65 16r317A 16rAE68 16r317B 16rAE69 16r317C 16rAE6C 16r317D 16rAE70 16r317E 16rAE78 16r3221 16rAE79 16r3222 16rAE7B 16r3223 16rAE7C 16r3224 16rAE7D 16r3225 16rAE84 16r3226 16rAE85 16r3227 16rAE8C 16r3228 16rAEBC 16r3229 16rAEBD 16r322A 16rAEBE 16r322B 16rAEC0 16r322C 16rAEC4 16r322D 16rAECC 16r322E 16rAECD 16r322F 16rAECF 16r3230 16rAED0 16r3231 16rAED1 16r3232 16rAED8 16r3233 16rAED9 16r3234 16rAEDC 16r3235 16rAEE8 16r3236 16rAEEB 16r3237 16rAEED 16r3238 16rAEF4 16r3239 16rAEF8 16r323A 16rAEFC 16r323B 16rAF07 16r323C 16rAF08 16r323D 16rAF0D 16r323E 16rAF10 16r323F 16rAF2C 16r3240 16rAF2D 16r3241 16rAF30 16r3242 16rAF32 16r3243 16rAF34 16r3244 16rAF3C 16r3245 16rAF3D 16r3246 16rAF3F 16r3247 16rAF41 16r3248 16rAF42 16r3249 16rAF43 16r324A 16rAF48 16r324B 16rAF49 16r324C 16rAF50 16r324D 16rAF5C 16r324E 16rAF5D 16r324F 16rAF64 16r3250 16rAF65 16r3251 16rAF79 16r3252 16rAF80 16r3253 16rAF84 16r3254 16rAF88 16r3255 16rAF90 16r3256 16rAF91 16r3257 16rAF95 16r3258 16rAF9C 16r3259 16rAFB8 16r325A 16rAFB9 16r325B 16rAFBC 16r325C 16rAFC0 16r325D 16rAFC7 16r325E 16rAFC8 16r325F 16rAFC9 16r3260 16rAFCB 16r3261 16rAFCD 16r3262 16rAFCE 16r3263 16rAFD4 16r3264 16rAFDC 16r3265 16rAFE8 16r3266 16rAFE9 16r3267 16rAFF0 16r3268 16rAFF1 16r3269 16rAFF4 16r326A 16rAFF8 16r326B 16rB000 16r326C 16rB001 16r326D 16rB004 16r326E 16rB00C 16r326F 16rB010 16r3270 16rB014 16r3271 16rB01C 16r3272 16rB01D 16r3273 16rB028 16r3274 16rB044 16r3275 16rB045 16r3276 16rB048 16r3277 16rB04A 16r3278 16rB04C 16r3279 16rB04E 16r327A 16rB053 16r327B 16rB054 16r327C 16rB055 16r327D 16rB057 16r327E 16rB059 16r3321 16rB05D 16r3322 16rB07C 16r3323 16rB07D 16r3324 16rB080 16r3325 16rB084 16r3326 16rB08C 16r3327 16rB08D 16r3328 16rB08F 16r3329 16rB091 16r332A 16rB098 16r332B 16rB099 16r332C 16rB09A 16r332D 16rB09C 16r332E 16rB09F 16r332F 16rB0A0 16r3330 16rB0A1 16r3331 16rB0A2 16r3332 16rB0A8 16r3333 16rB0A9 16r3334 16rB0AB 16r3335 16rB0AC 16r3336 16rB0AD 16r3337 16rB0AE 16r3338 16rB0AF 16r3339 16rB0B1 16r333A 16rB0B3 16r333B 16rB0B4 16r333C 16rB0B5 16r333D 16rB0B8 16r333E 16rB0BC 16r333F 16rB0C4 16r3340 16rB0C5 16r3341 16rB0C7 16r3342 16rB0C8 16r3343 16rB0C9 16r3344 16rB0D0 16r3345 16rB0D1 16r3346 16rB0D4 16r3347 16rB0D8 16r3348 16rB0E0 16r3349 16rB0E5 16r334A 16rB108 16r334B 16rB109 16r334C 16rB10B 16r334D 16rB10C 16r334E 16rB110 16r334F 16rB112 16r3350 16rB113 16r3351 16rB118 16r3352 16rB119 16r3353 16rB11B 16r3354 16rB11C 16r3355 16rB11D 16r3356 16rB123 16r3357 16rB124 16r3358 16rB125 16r3359 16rB128 16r335A 16rB12C 16r335B 16rB134 16r335C 16rB135 16r335D 16rB137 16r335E 16rB138 16r335F 16rB139 16r3360 16rB140 16r3361 16rB141 16r3362 16rB144 16r3363 16rB148 16r3364 16rB150 16r3365 16rB151 16r3366 16rB154 16r3367 16rB155 16r3368 16rB158 16r3369 16rB15C 16r336A 16rB160 16r336B 16rB178 16r336C 16rB179 16r336D 16rB17C 16r336E 16rB180 16r336F 16rB182 16r3370 16rB188 16r3371 16rB189 16r3372 16rB18B 16r3373 16rB18D 16r3374 16rB192 16r3375 16rB193 16r3376 16rB194 16r3377 16rB198 16r3378 16rB19C 16r3379 16rB1A8 16r337A 16rB1CC 16r337B 16rB1D0 16r337C 16rB1D4 16r337D 16rB1DC 16r337E 16rB1DD 16r3421 16rB1DF 16r3422 16rB1E8 16r3423 16rB1E9 16r3424 16rB1EC 16r3425 16rB1F0 16r3426 16rB1F9 16r3427 16rB1FB 16r3428 16rB1FD 16r3429 16rB204 16r342A 16rB205 16r342B 16rB208 16r342C 16rB20B 16r342D 16rB20C 16r342E 16rB214 16r342F 16rB215 16r3430 16rB217 16r3431 16rB219 16r3432 16rB220 16r3433 16rB234 16r3434 16rB23C 16r3435 16rB258 16r3436 16rB25C 16r3437 16rB260 16r3438 16rB268 16r3439 16rB269 16r343A 16rB274 16r343B 16rB275 16r343C 16rB27C 16r343D 16rB284 16r343E 16rB285 16r343F 16rB289 16r3440 16rB290 16r3441 16rB291 16r3442 16rB294 16r3443 16rB298 16r3444 16rB299 16r3445 16rB29A 16r3446 16rB2A0 16r3447 16rB2A1 16r3448 16rB2A3 16r3449 16rB2A5 16r344A 16rB2A6 16r344B 16rB2AA 16r344C 16rB2AC 16r344D 16rB2B0 16r344E 16rB2B4 16r344F 16rB2C8 16r3450 16rB2C9 16r3451 16rB2CC 16r3452 16rB2D0 16r3453 16rB2D2 16r3454 16rB2D8 16r3455 16rB2D9 16r3456 16rB2DB 16r3457 16rB2DD 16r3458 16rB2E2 16r3459 16rB2E4 16r345A 16rB2E5 16r345B 16rB2E6 16r345C 16rB2E8 16r345D 16rB2EB 16r345E 16rB2EC 16r345F 16rB2ED 16r3460 16rB2EE 16r3461 16rB2EF 16r3462 16rB2F3 16r3463 16rB2F4 16r3464 16rB2F5 16r3465 16rB2F7 16r3466 16rB2F8 16r3467 16rB2F9 16r3468 16rB2FA 16r3469 16rB2FB 16r346A 16rB2FF 16r346B 16rB300 16r346C 16rB301 16r346D 16rB304 16r346E 16rB308 16r346F 16rB310 16r3470 16rB311 16r3471 16rB313 16r3472 16rB314 16r3473 16rB315 16r3474 16rB31C 16r3475 16rB354 16r3476 16rB355 16r3477 16rB356 16r3478 16rB358 16r3479 16rB35B 16r347A 16rB35C 16r347B 16rB35E 16r347C 16rB35F 16r347D 16rB364 16r347E 16rB365 16r3521 16rB367 16r3522 16rB369 16r3523 16rB36B 16r3524 16rB36E 16r3525 16rB370 16r3526 16rB371 16r3527 16rB374 16r3528 16rB378 16r3529 16rB380 16r352A 16rB381 16r352B 16rB383 16r352C 16rB384 16r352D 16rB385 16r352E 16rB38C 16r352F 16rB390 16r3530 16rB394 16r3531 16rB3A0 16r3532 16rB3A1 16r3533 16rB3A8 16r3534 16rB3AC 16r3535 16rB3C4 16r3536 16rB3C5 16r3537 16rB3C8 16r3538 16rB3CB 16r3539 16rB3CC 16r353A 16rB3CE 16r353B 16rB3D0 16r353C 16rB3D4 16r353D 16rB3D5 16r353E 16rB3D7 16r353F 16rB3D9 16r3540 16rB3DB 16r3541 16rB3DD 16r3542 16rB3E0 16r3543 16rB3E4 16r3544 16rB3E8 16r3545 16rB3FC 16r3546 16rB410 16r3547 16rB418 16r3548 16rB41C 16r3549 16rB420 16r354A 16rB428 16r354B 16rB429 16r354C 16rB42B 16r354D 16rB434 16r354E 16rB450 16r354F 16rB451 16r3550 16rB454 16r3551 16rB458 16r3552 16rB460 16r3553 16rB461 16r3554 16rB463 16r3555 16rB465 16r3556 16rB46C 16r3557 16rB480 16r3558 16rB488 16r3559 16rB49D 16r355A 16rB4A4 16r355B 16rB4A8 16r355C 16rB4AC 16r355D 16rB4B5 16r355E 16rB4B7 16r355F 16rB4B9 16r3560 16rB4C0 16r3561 16rB4C4 16r3562 16rB4C8 16r3563 16rB4D0 16r3564 16rB4D5 16r3565 16rB4DC 16r3566 16rB4DD 16r3567 16rB4E0 16r3568 16rB4E3 16r3569 16rB4E4 16r356A 16rB4E6 16r356B 16rB4EC 16r356C 16rB4ED 16r356D 16rB4EF 16r356E 16rB4F1 16r356F 16rB4F8 16r3570 16rB514 16r3571 16rB515 16r3572 16rB518 16r3573 16rB51B 16r3574 16rB51C 16r3575 16rB524 16r3576 16rB525 16r3577 16rB527 16r3578 16rB528 16r3579 16rB529 16r357A 16rB52A 16r357B 16rB530 16r357C 16rB531 16r357D 16rB534 16r357E 16rB538 16r3621 16rB540 16r3622 16rB541 16r3623 16rB543 16r3624 16rB544 16r3625 16rB545 16r3626 16rB54B 16r3627 16rB54C 16r3628 16rB54D 16r3629 16rB550 16r362A 16rB554 16r362B 16rB55C 16r362C 16rB55D 16r362D 16rB55F 16r362E 16rB560 16r362F 16rB561 16r3630 16rB5A0 16r3631 16rB5A1 16r3632 16rB5A4 16r3633 16rB5A8 16r3634 16rB5AA 16r3635 16rB5AB 16r3636 16rB5B0 16r3637 16rB5B1 16r3638 16rB5B3 16r3639 16rB5B4 16r363A 16rB5B5 16r363B 16rB5BB 16r363C 16rB5BC 16r363D 16rB5BD 16r363E 16rB5C0 16r363F 16rB5C4 16r3640 16rB5CC 16r3641 16rB5CD 16r3642 16rB5CF 16r3643 16rB5D0 16r3644 16rB5D1 16r3645 16rB5D8 16r3646 16rB5EC 16r3647 16rB610 16r3648 16rB611 16r3649 16rB614 16r364A 16rB618 16r364B 16rB625 16r364C 16rB62C 16r364D 16rB634 16r364E 16rB648 16r364F 16rB664 16r3650 16rB668 16r3651 16rB69C 16r3652 16rB69D 16r3653 16rB6A0 16r3654 16rB6A4 16r3655 16rB6AB 16r3656 16rB6AC 16r3657 16rB6B1 16r3658 16rB6D4 16r3659 16rB6F0 16r365A 16rB6F4 16r365B 16rB6F8 16r365C 16rB700 16r365D 16rB701 16r365E 16rB705 16r365F 16rB728 16r3660 16rB729 16r3661 16rB72C 16r3662 16rB72F 16r3663 16rB730 16r3664 16rB738 16r3665 16rB739 16r3666 16rB73B 16r3667 16rB744 16r3668 16rB748 16r3669 16rB74C 16r366A 16rB754 16r366B 16rB755 16r366C 16rB760 16r366D 16rB764 16r366E 16rB768 16r366F 16rB770 16r3670 16rB771 16r3671 16rB773 16r3672 16rB775 16r3673 16rB77C 16r3674 16rB77D 16r3675 16rB780 16r3676 16rB784 16r3677 16rB78C 16r3678 16rB78D 16r3679 16rB78F 16r367A 16rB790 16r367B 16rB791 16r367C 16rB792 16r367D 16rB796 16r367E 16rB797 16r3721 16rB798 16r3722 16rB799 16r3723 16rB79C 16r3724 16rB7A0 16r3725 16rB7A8 16r3726 16rB7A9 16r3727 16rB7AB 16r3728 16rB7AC 16r3729 16rB7AD 16r372A 16rB7B4 16r372B 16rB7B5 16r372C 16rB7B8 16r372D 16rB7C7 16r372E 16rB7C9 16r372F 16rB7EC 16r3730 16rB7ED 16r3731 16rB7F0 16r3732 16rB7F4 16r3733 16rB7FC 16r3734 16rB7FD 16r3735 16rB7FF 16r3736 16rB800 16r3737 16rB801 16r3738 16rB807 16r3739 16rB808 16r373A 16rB809 16r373B 16rB80C 16r373C 16rB810 16r373D 16rB818 16r373E 16rB819 16r373F 16rB81B 16r3740 16rB81D 16r3741 16rB824 16r3742 16rB825 16r3743 16rB828 16r3744 16rB82C 16r3745 16rB834 16r3746 16rB835 16r3747 16rB837 16r3748 16rB838 16r3749 16rB839 16r374A 16rB840 16r374B 16rB844 16r374C 16rB851 16r374D 16rB853 16r374E 16rB85C 16r374F 16rB85D 16r3750 16rB860 16r3751 16rB864 16r3752 16rB86C 16r3753 16rB86D 16r3754 16rB86F 16r3755 16rB871 16r3756 16rB878 16r3757 16rB87C 16r3758 16rB88D 16r3759 16rB8A8 16r375A 16rB8B0 16r375B 16rB8B4 16r375C 16rB8B8 16r375D 16rB8C0 16r375E 16rB8C1 16r375F 16rB8C3 16r3760 16rB8C5 16r3761 16rB8CC 16r3762 16rB8D0 16r3763 16rB8D4 16r3764 16rB8DD 16r3765 16rB8DF 16r3766 16rB8E1 16r3767 16rB8E8 16r3768 16rB8E9 16r3769 16rB8EC 16r376A 16rB8F0 16r376B 16rB8F8 16r376C 16rB8F9 16r376D 16rB8FB 16r376E 16rB8FD 16r376F 16rB904 16r3770 16rB918 16r3771 16rB920 16r3772 16rB93C 16r3773 16rB93D 16r3774 16rB940 16r3775 16rB944 16r3776 16rB94C 16r3777 16rB94F 16r3778 16rB951 16r3779 16rB958 16r377A 16rB959 16r377B 16rB95C 16r377C 16rB960 16r377D 16rB968 16r377E 16rB969 16r3821 16rB96B 16r3822 16rB96D 16r3823 16rB974 16r3824 16rB975 16r3825 16rB978 16r3826 16rB97C 16r3827 16rB984 16r3828 16rB985 16r3829 16rB987 16r382A 16rB989 16r382B 16rB98A 16r382C 16rB98D 16r382D 16rB98E 16r382E 16rB9AC 16r382F 16rB9AD 16r3830 16rB9B0 16r3831 16rB9B4 16r3832 16rB9BC 16r3833 16rB9BD 16r3834 16rB9BF 16r3835 16rB9C1 16r3836 16rB9C8 16r3837 16rB9C9 16r3838 16rB9CC 16r3839 16rB9CE 16r383A 16rB9CF 16r383B 16rB9D0 16r383C 16rB9D1 16r383D 16rB9D2 16r383E 16rB9D8 16r383F 16rB9D9 16r3840 16rB9DB 16r3841 16rB9DD 16r3842 16rB9DE 16r3843 16rB9E1 16r3844 16rB9E3 16r3845 16rB9E4 16r3846 16rB9E5 16r3847 16rB9E8 16r3848 16rB9EC 16r3849 16rB9F4 16r384A 16rB9F5 16r384B 16rB9F7 16r384C 16rB9F8 16r384D 16rB9F9 16r384E 16rB9FA 16r384F 16rBA00 16r3850 16rBA01 16r3851 16rBA08 16r3852 16rBA15 16r3853 16rBA38 16r3854 16rBA39 16r3855 16rBA3C 16r3856 16rBA40 16r3857 16rBA42 16r3858 16rBA48 16r3859 16rBA49 16r385A 16rBA4B 16r385B 16rBA4D 16r385C 16rBA4E 16r385D 16rBA53 16r385E 16rBA54 16r385F 16rBA55 16r3860 16rBA58 16r3861 16rBA5C 16r3862 16rBA64 16r3863 16rBA65 16r3864 16rBA67 16r3865 16rBA68 16r3866 16rBA69 16r3867 16rBA70 16r3868 16rBA71 16r3869 16rBA74 16r386A 16rBA78 16r386B 16rBA83 16r386C 16rBA84 16r386D 16rBA85 16r386E 16rBA87 16r386F 16rBA8C 16r3870 16rBAA8 16r3871 16rBAA9 16r3872 16rBAAB 16r3873 16rBAAC 16r3874 16rBAB0 16r3875 16rBAB2 16r3876 16rBAB8 16r3877 16rBAB9 16r3878 16rBABB 16r3879 16rBABD 16r387A 16rBAC4 16r387B 16rBAC8 16r387C 16rBAD8 16r387D 16rBAD9 16r387E 16rBAFC 16r3921 16rBB00 16r3922 16rBB04 16r3923 16rBB0D 16r3924 16rBB0F 16r3925 16rBB11 16r3926 16rBB18 16r3927 16rBB1C 16r3928 16rBB20 16r3929 16rBB29 16r392A 16rBB2B 16r392B 16rBB34 16r392C 16rBB35 16r392D 16rBB36 16r392E 16rBB38 16r392F 16rBB3B 16r3930 16rBB3C 16r3931 16rBB3D 16r3932 16rBB3E 16r3933 16rBB44 16r3934 16rBB45 16r3935 16rBB47 16r3936 16rBB49 16r3937 16rBB4D 16r3938 16rBB4F 16r3939 16rBB50 16r393A 16rBB54 16r393B 16rBB58 16r393C 16rBB61 16r393D 16rBB63 16r393E 16rBB6C 16r393F 16rBB88 16r3940 16rBB8C 16r3941 16rBB90 16r3942 16rBBA4 16r3943 16rBBA8 16r3944 16rBBAC 16r3945 16rBBB4 16r3946 16rBBB7 16r3947 16rBBC0 16r3948 16rBBC4 16r3949 16rBBC8 16r394A 16rBBD0 16r394B 16rBBD3 16r394C 16rBBF8 16r394D 16rBBF9 16r394E 16rBBFC 16r394F 16rBBFF 16r3950 16rBC00 16r3951 16rBC02 16r3952 16rBC08 16r3953 16rBC09 16r3954 16rBC0B 16r3955 16rBC0C 16r3956 16rBC0D 16r3957 16rBC0F 16r3958 16rBC11 16r3959 16rBC14 16r395A 16rBC15 16r395B 16rBC16 16r395C 16rBC17 16r395D 16rBC18 16r395E 16rBC1B 16r395F 16rBC1C 16r3960 16rBC1D 16r3961 16rBC1E 16r3962 16rBC1F 16r3963 16rBC24 16r3964 16rBC25 16r3965 16rBC27 16r3966 16rBC29 16r3967 16rBC2D 16r3968 16rBC30 16r3969 16rBC31 16r396A 16rBC34 16r396B 16rBC38 16r396C 16rBC40 16r396D 16rBC41 16r396E 16rBC43 16r396F 16rBC44 16r3970 16rBC45 16r3971 16rBC49 16r3972 16rBC4C 16r3973 16rBC4D 16r3974 16rBC50 16r3975 16rBC5D 16r3976 16rBC84 16r3977 16rBC85 16r3978 16rBC88 16r3979 16rBC8B 16r397A 16rBC8C 16r397B 16rBC8E 16r397C 16rBC94 16r397D 16rBC95 16r397E 16rBC97 16r3A21 16rBC99 16r3A22 16rBC9A 16r3A23 16rBCA0 16r3A24 16rBCA1 16r3A25 16rBCA4 16r3A26 16rBCA7 16r3A27 16rBCA8 16r3A28 16rBCB0 16r3A29 16rBCB1 16r3A2A 16rBCB3 16r3A2B 16rBCB4 16r3A2C 16rBCB5 16r3A2D 16rBCBC 16r3A2E 16rBCBD 16r3A2F 16rBCC0 16r3A30 16rBCC4 16r3A31 16rBCCD 16r3A32 16rBCCF 16r3A33 16rBCD0 16r3A34 16rBCD1 16r3A35 16rBCD5 16r3A36 16rBCD8 16r3A37 16rBCDC 16r3A38 16rBCF4 16r3A39 16rBCF5 16r3A3A 16rBCF6 16r3A3B 16rBCF8 16r3A3C 16rBCFC 16r3A3D 16rBD04 16r3A3E 16rBD05 16r3A3F 16rBD07 16r3A40 16rBD09 16r3A41 16rBD10 16r3A42 16rBD14 16r3A43 16rBD24 16r3A44 16rBD2C 16r3A45 16rBD40 16r3A46 16rBD48 16r3A47 16rBD49 16r3A48 16rBD4C 16r3A49 16rBD50 16r3A4A 16rBD58 16r3A4B 16rBD59 16r3A4C 16rBD64 16r3A4D 16rBD68 16r3A4E 16rBD80 16r3A4F 16rBD81 16r3A50 16rBD84 16r3A51 16rBD87 16r3A52 16rBD88 16r3A53 16rBD89 16r3A54 16rBD8A 16r3A55 16rBD90 16r3A56 16rBD91 16r3A57 16rBD93 16r3A58 16rBD95 16r3A59 16rBD99 16r3A5A 16rBD9A 16r3A5B 16rBD9C 16r3A5C 16rBDA4 16r3A5D 16rBDB0 16r3A5E 16rBDB8 16r3A5F 16rBDD4 16r3A60 16rBDD5 16r3A61 16rBDD8 16r3A62 16rBDDC 16r3A63 16rBDE9 16r3A64 16rBDF0 16r3A65 16rBDF4 16r3A66 16rBDF8 16r3A67 16rBE00 16r3A68 16rBE03 16r3A69 16rBE05 16r3A6A 16rBE0C 16r3A6B 16rBE0D 16r3A6C 16rBE10 16r3A6D 16rBE14 16r3A6E 16rBE1C 16r3A6F 16rBE1D 16r3A70 16rBE1F 16r3A71 16rBE44 16r3A72 16rBE45 16r3A73 16rBE48 16r3A74 16rBE4C 16r3A75 16rBE4E 16r3A76 16rBE54 16r3A77 16rBE55 16r3A78 16rBE57 16r3A79 16rBE59 16r3A7A 16rBE5A 16r3A7B 16rBE5B 16r3A7C 16rBE60 16r3A7D 16rBE61 16r3A7E 16rBE64 16r3B21 16rBE68 16r3B22 16rBE6A 16r3B23 16rBE70 16r3B24 16rBE71 16r3B25 16rBE73 16r3B26 16rBE74 16r3B27 16rBE75 16r3B28 16rBE7B 16r3B29 16rBE7C 16r3B2A 16rBE7D 16r3B2B 16rBE80 16r3B2C 16rBE84 16r3B2D 16rBE8C 16r3B2E 16rBE8D 16r3B2F 16rBE8F 16r3B30 16rBE90 16r3B31 16rBE91 16r3B32 16rBE98 16r3B33 16rBE99 16r3B34 16rBEA8 16r3B35 16rBED0 16r3B36 16rBED1 16r3B37 16rBED4 16r3B38 16rBED7 16r3B39 16rBED8 16r3B3A 16rBEE0 16r3B3B 16rBEE3 16r3B3C 16rBEE4 16r3B3D 16rBEE5 16r3B3E 16rBEEC 16r3B3F 16rBF01 16r3B40 16rBF08 16r3B41 16rBF09 16r3B42 16rBF18 16r3B43 16rBF19 16r3B44 16rBF1B 16r3B45 16rBF1C 16r3B46 16rBF1D 16r3B47 16rBF40 16r3B48 16rBF41 16r3B49 16rBF44 16r3B4A 16rBF48 16r3B4B 16rBF50 16r3B4C 16rBF51 16r3B4D 16rBF55 16r3B4E 16rBF94 16r3B4F 16rBFB0 16r3B50 16rBFC5 16r3B51 16rBFCC 16r3B52 16rBFCD 16r3B53 16rBFD0 16r3B54 16rBFD4 16r3B55 16rBFDC 16r3B56 16rBFDF 16r3B57 16rBFE1 16r3B58 16rC03C 16r3B59 16rC051 16r3B5A 16rC058 16r3B5B 16rC05C 16r3B5C 16rC060 16r3B5D 16rC068 16r3B5E 16rC069 16r3B5F 16rC090 16r3B60 16rC091 16r3B61 16rC094 16r3B62 16rC098 16r3B63 16rC0A0 16r3B64 16rC0A1 16r3B65 16rC0A3 16r3B66 16rC0A5 16r3B67 16rC0AC 16r3B68 16rC0AD 16r3B69 16rC0AF 16r3B6A 16rC0B0 16r3B6B 16rC0B3 16r3B6C 16rC0B4 16r3B6D 16rC0B5 16r3B6E 16rC0B6 16r3B6F 16rC0BC 16r3B70 16rC0BD 16r3B71 16rC0BF 16r3B72 16rC0C0 16r3B73 16rC0C1 16r3B74 16rC0C5 16r3B75 16rC0C8 16r3B76 16rC0C9 16r3B77 16rC0CC 16r3B78 16rC0D0 16r3B79 16rC0D8 16r3B7A 16rC0D9 16r3B7B 16rC0DB 16r3B7C 16rC0DC 16r3B7D 16rC0DD 16r3B7E 16rC0E4 16r3C21 16rC0E5 16r3C22 16rC0E8 16r3C23 16rC0EC 16r3C24 16rC0F4 16r3C25 16rC0F5 16r3C26 16rC0F7 16r3C27 16rC0F9 16r3C28 16rC100 16r3C29 16rC104 16r3C2A 16rC108 16r3C2B 16rC110 16r3C2C 16rC115 16r3C2D 16rC11C 16r3C2E 16rC11D 16r3C2F 16rC11E 16r3C30 16rC11F 16r3C31 16rC120 16r3C32 16rC123 16r3C33 16rC124 16r3C34 16rC126 16r3C35 16rC127 16r3C36 16rC12C 16r3C37 16rC12D 16r3C38 16rC12F 16r3C39 16rC130 16r3C3A 16rC131 16r3C3B 16rC136 16r3C3C 16rC138 16r3C3D 16rC139 16r3C3E 16rC13C 16r3C3F 16rC140 16r3C40 16rC148 16r3C41 16rC149 16r3C42 16rC14B 16r3C43 16rC14C 16r3C44 16rC14D 16r3C45 16rC154 16r3C46 16rC155 16r3C47 16rC158 16r3C48 16rC15C 16r3C49 16rC164 16r3C4A 16rC165 16r3C4B 16rC167 16r3C4C 16rC168 16r3C4D 16rC169 16r3C4E 16rC170 16r3C4F 16rC174 16r3C50 16rC178 16r3C51 16rC185 16r3C52 16rC18C 16r3C53 16rC18D 16r3C54 16rC18E 16r3C55 16rC190 16r3C56 16rC194 16r3C57 16rC196 16r3C58 16rC19C 16r3C59 16rC19D 16r3C5A 16rC19F 16r3C5B 16rC1A1 16r3C5C 16rC1A5 16r3C5D 16rC1A8 16r3C5E 16rC1A9 16r3C5F 16rC1AC 16r3C60 16rC1B0 16r3C61 16rC1BD 16r3C62 16rC1C4 16r3C63 16rC1C8 16r3C64 16rC1CC 16r3C65 16rC1D4 16r3C66 16rC1D7 16r3C67 16rC1D8 16r3C68 16rC1E0 16r3C69 16rC1E4 16r3C6A 16rC1E8 16r3C6B 16rC1F0 16r3C6C 16rC1F1 16r3C6D 16rC1F3 16r3C6E 16rC1FC 16r3C6F 16rC1FD 16r3C70 16rC200 16r3C71 16rC204 16r3C72 16rC20C 16r3C73 16rC20D 16r3C74 16rC20F 16r3C75 16rC211 16r3C76 16rC218 16r3C77 16rC219 16r3C78 16rC21C 16r3C79 16rC21F 16r3C7A 16rC220 16r3C7B 16rC228 16r3C7C 16rC229 16r3C7D 16rC22B 16r3C7E 16rC22D 16r3D21 16rC22F 16r3D22 16rC231 16r3D23 16rC232 16r3D24 16rC234 16r3D25 16rC248 16r3D26 16rC250 16r3D27 16rC251 16r3D28 16rC254 16r3D29 16rC258 16r3D2A 16rC260 16r3D2B 16rC265 16r3D2C 16rC26C 16r3D2D 16rC26D 16r3D2E 16rC270 16r3D2F 16rC274 16r3D30 16rC27C 16r3D31 16rC27D 16r3D32 16rC27F 16r3D33 16rC281 16r3D34 16rC288 16r3D35 16rC289 16r3D36 16rC290 16r3D37 16rC298 16r3D38 16rC29B 16r3D39 16rC29D 16r3D3A 16rC2A4 16r3D3B 16rC2A5 16r3D3C 16rC2A8 16r3D3D 16rC2AC 16r3D3E 16rC2AD 16r3D3F 16rC2B4 16r3D40 16rC2B5 16r3D41 16rC2B7 16r3D42 16rC2B9 16r3D43 16rC2DC 16r3D44 16rC2DD 16r3D45 16rC2E0 16r3D46 16rC2E3 16r3D47 16rC2E4 16r3D48 16rC2EB 16r3D49 16rC2EC 16r3D4A 16rC2ED 16r3D4B 16rC2EF 16r3D4C 16rC2F1 16r3D4D 16rC2F6 16r3D4E 16rC2F8 16r3D4F 16rC2F9 16r3D50 16rC2FB 16r3D51 16rC2FC 16r3D52 16rC300 16r3D53 16rC308 16r3D54 16rC309 16r3D55 16rC30C 16r3D56 16rC30D 16r3D57 16rC313 16r3D58 16rC314 16r3D59 16rC315 16r3D5A 16rC318 16r3D5B 16rC31C 16r3D5C 16rC324 16r3D5D 16rC325 16r3D5E 16rC328 16r3D5F 16rC329 16r3D60 16rC345 16r3D61 16rC368 16r3D62 16rC369 16r3D63 16rC36C 16r3D64 16rC370 16r3D65 16rC372 16r3D66 16rC378 16r3D67 16rC379 16r3D68 16rC37C 16r3D69 16rC37D 16r3D6A 16rC384 16r3D6B 16rC388 16r3D6C 16rC38C 16r3D6D 16rC3C0 16r3D6E 16rC3D8 16r3D6F 16rC3D9 16r3D70 16rC3DC 16r3D71 16rC3DF 16r3D72 16rC3E0 16r3D73 16rC3E2 16r3D74 16rC3E8 16r3D75 16rC3E9 16r3D76 16rC3ED 16r3D77 16rC3F4 16r3D78 16rC3F5 16r3D79 16rC3F8 16r3D7A 16rC408 16r3D7B 16rC410 16r3D7C 16rC424 16r3D7D 16rC42C 16r3D7E 16rC430 16r3E21 16rC434 16r3E22 16rC43C 16r3E23 16rC43D 16r3E24 16rC448 16r3E25 16rC464 16r3E26 16rC465 16r3E27 16rC468 16r3E28 16rC46C 16r3E29 16rC474 16r3E2A 16rC475 16r3E2B 16rC479 16r3E2C 16rC480 16r3E2D 16rC494 16r3E2E 16rC49C 16r3E2F 16rC4B8 16r3E30 16rC4BC 16r3E31 16rC4E9 16r3E32 16rC4F0 16r3E33 16rC4F1 16r3E34 16rC4F4 16r3E35 16rC4F8 16r3E36 16rC4FA 16r3E37 16rC4FF 16r3E38 16rC500 16r3E39 16rC501 16r3E3A 16rC50C 16r3E3B 16rC510 16r3E3C 16rC514 16r3E3D 16rC51C 16r3E3E 16rC528 16r3E3F 16rC529 16r3E40 16rC52C 16r3E41 16rC530 16r3E42 16rC538 16r3E43 16rC539 16r3E44 16rC53B 16r3E45 16rC53D 16r3E46 16rC544 16r3E47 16rC545 16r3E48 16rC548 16r3E49 16rC549 16r3E4A 16rC54A 16r3E4B 16rC54C 16r3E4C 16rC54D 16r3E4D 16rC54E 16r3E4E 16rC553 16r3E4F 16rC554 16r3E50 16rC555 16r3E51 16rC557 16r3E52 16rC558 16r3E53 16rC559 16r3E54 16rC55D 16r3E55 16rC55E 16r3E56 16rC560 16r3E57 16rC561 16r3E58 16rC564 16r3E59 16rC568 16r3E5A 16rC570 16r3E5B 16rC571 16r3E5C 16rC573 16r3E5D 16rC574 16r3E5E 16rC575 16r3E5F 16rC57C 16r3E60 16rC57D 16r3E61 16rC580 16r3E62 16rC584 16r3E63 16rC587 16r3E64 16rC58C 16r3E65 16rC58D 16r3E66 16rC58F 16r3E67 16rC591 16r3E68 16rC595 16r3E69 16rC597 16r3E6A 16rC598 16r3E6B 16rC59C 16r3E6C 16rC5A0 16r3E6D 16rC5A9 16r3E6E 16rC5B4 16r3E6F 16rC5B5 16r3E70 16rC5B8 16r3E71 16rC5B9 16r3E72 16rC5BB 16r3E73 16rC5BC 16r3E74 16rC5BD 16r3E75 16rC5BE 16r3E76 16rC5C4 16r3E77 16rC5C5 16r3E78 16rC5C6 16r3E79 16rC5C7 16r3E7A 16rC5C8 16r3E7B 16rC5C9 16r3E7C 16rC5CA 16r3E7D 16rC5CC 16r3E7E 16rC5CE 16r3F21 16rC5D0 16r3F22 16rC5D1 16r3F23 16rC5D4 16r3F24 16rC5D8 16r3F25 16rC5E0 16r3F26 16rC5E1 16r3F27 16rC5E3 16r3F28 16rC5E5 16r3F29 16rC5EC 16r3F2A 16rC5ED 16r3F2B 16rC5EE 16r3F2C 16rC5F0 16r3F2D 16rC5F4 16r3F2E 16rC5F6 16r3F2F 16rC5F7 16r3F30 16rC5FC 16r3F31 16rC5FD 16r3F32 16rC5FE 16r3F33 16rC5FF 16r3F34 16rC600 16r3F35 16rC601 16r3F36 16rC605 16r3F37 16rC606 16r3F38 16rC607 16r3F39 16rC608 16r3F3A 16rC60C 16r3F3B 16rC610 16r3F3C 16rC618 16r3F3D 16rC619 16r3F3E 16rC61B 16r3F3F 16rC61C 16r3F40 16rC624 16r3F41 16rC625 16r3F42 16rC628 16r3F43 16rC62C 16r3F44 16rC62D 16r3F45 16rC62E 16r3F46 16rC630 16r3F47 16rC633 16r3F48 16rC634 16r3F49 16rC635 16r3F4A 16rC637 16r3F4B 16rC639 16r3F4C 16rC63B 16r3F4D 16rC640 16r3F4E 16rC641 16r3F4F 16rC644 16r3F50 16rC648 16r3F51 16rC650 16r3F52 16rC651 16r3F53 16rC653 16r3F54 16rC654 16r3F55 16rC655 16r3F56 16rC65C 16r3F57 16rC65D 16r3F58 16rC660 16r3F59 16rC66C 16r3F5A 16rC66F 16r3F5B 16rC671 16r3F5C 16rC678 16r3F5D 16rC679 16r3F5E 16rC67C 16r3F5F 16rC680 16r3F60 16rC688 16r3F61 16rC689 16r3F62 16rC68B 16r3F63 16rC68D 16r3F64 16rC694 16r3F65 16rC695 16r3F66 16rC698 16r3F67 16rC69C 16r3F68 16rC6A4 16r3F69 16rC6A5 16r3F6A 16rC6A7 16r3F6B 16rC6A9 16r3F6C 16rC6B0 16r3F6D 16rC6B1 16r3F6E 16rC6B4 16r3F6F 16rC6B8 16r3F70 16rC6B9 16r3F71 16rC6BA 16r3F72 16rC6C0 16r3F73 16rC6C1 16r3F74 16rC6C3 16r3F75 16rC6C5 16r3F76 16rC6CC 16r3F77 16rC6CD 16r3F78 16rC6D0 16r3F79 16rC6D4 16r3F7A 16rC6DC 16r3F7B 16rC6DD 16r3F7C 16rC6E0 16r3F7D 16rC6E1 16r3F7E 16rC6E8 16r4021 16rC6E9 16r4022 16rC6EC 16r4023 16rC6F0 16r4024 16rC6F8 16r4025 16rC6F9 16r4026 16rC6FD 16r4027 16rC704 16r4028 16rC705 16r4029 16rC708 16r402A 16rC70C 16r402B 16rC714 16r402C 16rC715 16r402D 16rC717 16r402E 16rC719 16r402F 16rC720 16r4030 16rC721 16r4031 16rC724 16r4032 16rC728 16r4033 16rC730 16r4034 16rC731 16r4035 16rC733 16r4036 16rC735 16r4037 16rC737 16r4038 16rC73C 16r4039 16rC73D 16r403A 16rC740 16r403B 16rC744 16r403C 16rC74A 16r403D 16rC74C 16r403E 16rC74D 16r403F 16rC74F 16r4040 16rC751 16r4041 16rC752 16r4042 16rC753 16r4043 16rC754 16r4044 16rC755 16r4045 16rC756 16r4046 16rC757 16r4047 16rC758 16r4048 16rC75C 16r4049 16rC760 16r404A 16rC768 16r404B 16rC76B 16r404C 16rC774 16r404D 16rC775 16r404E 16rC778 16r404F 16rC77C 16r4050 16rC77D 16r4051 16rC77E 16r4052 16rC783 16r4053 16rC784 16r4054 16rC785 16r4055 16rC787 16r4056 16rC788 16r4057 16rC789 16r4058 16rC78A 16r4059 16rC78E 16r405A 16rC790 16r405B 16rC791 16r405C 16rC794 16r405D 16rC796 16r405E 16rC797 16r405F 16rC798 16r4060 16rC79A 16r4061 16rC7A0 16r4062 16rC7A1 16r4063 16rC7A3 16r4064 16rC7A4 16r4065 16rC7A5 16r4066 16rC7A6 16r4067 16rC7AC 16r4068 16rC7AD 16r4069 16rC7B0 16r406A 16rC7B4 16r406B 16rC7BC 16r406C 16rC7BD 16r406D 16rC7BF 16r406E 16rC7C0 16r406F 16rC7C1 16r4070 16rC7C8 16r4071 16rC7C9 16r4072 16rC7CC 16r4073 16rC7CE 16r4074 16rC7D0 16r4075 16rC7D8 16r4076 16rC7DD 16r4077 16rC7E4 16r4078 16rC7E8 16r4079 16rC7EC 16r407A 16rC800 16r407B 16rC801 16r407C 16rC804 16r407D 16rC808 16r407E 16rC80A 16r4121 16rC810 16r4122 16rC811 16r4123 16rC813 16r4124 16rC815 16r4125 16rC816 16r4126 16rC81C 16r4127 16rC81D 16r4128 16rC820 16r4129 16rC824 16r412A 16rC82C 16r412B 16rC82D 16r412C 16rC82F 16r412D 16rC831 16r412E 16rC838 16r412F 16rC83C 16r4130 16rC840 16r4131 16rC848 16r4132 16rC849 16r4133 16rC84C 16r4134 16rC84D 16r4135 16rC854 16r4136 16rC870 16r4137 16rC871 16r4138 16rC874 16r4139 16rC878 16r413A 16rC87A 16r413B 16rC880 16r413C 16rC881 16r413D 16rC883 16r413E 16rC885 16r413F 16rC886 16r4140 16rC887 16r4141 16rC88B 16r4142 16rC88C 16r4143 16rC88D 16r4144 16rC894 16r4145 16rC89D 16r4146 16rC89F 16r4147 16rC8A1 16r4148 16rC8A8 16r4149 16rC8BC 16r414A 16rC8BD 16r414B 16rC8C4 16r414C 16rC8C8 16r414D 16rC8CC 16r414E 16rC8D4 16r414F 16rC8D5 16r4150 16rC8D7 16r4151 16rC8D9 16r4152 16rC8E0 16r4153 16rC8E1 16r4154 16rC8E4 16r4155 16rC8F5 16r4156 16rC8FC 16r4157 16rC8FD 16r4158 16rC900 16r4159 16rC904 16r415A 16rC905 16r415B 16rC906 16r415C 16rC90C 16r415D 16rC90D 16r415E 16rC90F 16r415F 16rC911 16r4160 16rC918 16r4161 16rC92C 16r4162 16rC934 16r4163 16rC950 16r4164 16rC951 16r4165 16rC954 16r4166 16rC958 16r4167 16rC960 16r4168 16rC961 16r4169 16rC963 16r416A 16rC96C 16r416B 16rC970 16r416C 16rC974 16r416D 16rC97C 16r416E 16rC988 16r416F 16rC989 16r4170 16rC98C 16r4171 16rC990 16r4172 16rC998 16r4173 16rC999 16r4174 16rC99B 16r4175 16rC99D 16r4176 16rC9C0 16r4177 16rC9C1 16r4178 16rC9C4 16r4179 16rC9C7 16r417A 16rC9C8 16r417B 16rC9CA 16r417C 16rC9D0 16r417D 16rC9D1 16r417E 16rC9D3 16r4221 16rC9D5 16r4222 16rC9D6 16r4223 16rC9D9 16r4224 16rC9DA 16r4225 16rC9DC 16r4226 16rC9DD 16r4227 16rC9E0 16r4228 16rC9E2 16r4229 16rC9E4 16r422A 16rC9E7 16r422B 16rC9EC 16r422C 16rC9ED 16r422D 16rC9EF 16r422E 16rC9F0 16r422F 16rC9F1 16r4230 16rC9F8 16r4231 16rC9F9 16r4232 16rC9FC 16r4233 16rCA00 16r4234 16rCA08 16r4235 16rCA09 16r4236 16rCA0B 16r4237 16rCA0C 16r4238 16rCA0D 16r4239 16rCA14 16r423A 16rCA18 16r423B 16rCA29 16r423C 16rCA4C 16r423D 16rCA4D 16r423E 16rCA50 16r423F 16rCA54 16r4240 16rCA5C 16r4241 16rCA5D 16r4242 16rCA5F 16r4243 16rCA60 16r4244 16rCA61 16r4245 16rCA68 16r4246 16rCA7D 16r4247 16rCA84 16r4248 16rCA98 16r4249 16rCABC 16r424A 16rCABD 16r424B 16rCAC0 16r424C 16rCAC4 16r424D 16rCACC 16r424E 16rCACD 16r424F 16rCACF 16r4250 16rCAD1 16r4251 16rCAD3 16r4252 16rCAD8 16r4253 16rCAD9 16r4254 16rCAE0 16r4255 16rCAEC 16r4256 16rCAF4 16r4257 16rCB08 16r4258 16rCB10 16r4259 16rCB14 16r425A 16rCB18 16r425B 16rCB20 16r425C 16rCB21 16r425D 16rCB41 16r425E 16rCB48 16r425F 16rCB49 16r4260 16rCB4C 16r4261 16rCB50 16r4262 16rCB58 16r4263 16rCB59 16r4264 16rCB5D 16r4265 16rCB64 16r4266 16rCB78 16r4267 16rCB79 16r4268 16rCB9C 16r4269 16rCBB8 16r426A 16rCBD4 16r426B 16rCBE4 16r426C 16rCBE7 16r426D 16rCBE9 16r426E 16rCC0C 16r426F 16rCC0D 16r4270 16rCC10 16r4271 16rCC14 16r4272 16rCC1C 16r4273 16rCC1D 16r4274 16rCC21 16r4275 16rCC22 16r4276 16rCC27 16r4277 16rCC28 16r4278 16rCC29 16r4279 16rCC2C 16r427A 16rCC2E 16r427B 16rCC30 16r427C 16rCC38 16r427D 16rCC39 16r427E 16rCC3B 16r4321 16rCC3C 16r4322 16rCC3D 16r4323 16rCC3E 16r4324 16rCC44 16r4325 16rCC45 16r4326 16rCC48 16r4327 16rCC4C 16r4328 16rCC54 16r4329 16rCC55 16r432A 16rCC57 16r432B 16rCC58 16r432C 16rCC59 16r432D 16rCC60 16r432E 16rCC64 16r432F 16rCC66 16r4330 16rCC68 16r4331 16rCC70 16r4332 16rCC75 16r4333 16rCC98 16r4334 16rCC99 16r4335 16rCC9C 16r4336 16rCCA0 16r4337 16rCCA8 16r4338 16rCCA9 16r4339 16rCCAB 16r433A 16rCCAC 16r433B 16rCCAD 16r433C 16rCCB4 16r433D 16rCCB5 16r433E 16rCCB8 16r433F 16rCCBC 16r4340 16rCCC4 16r4341 16rCCC5 16r4342 16rCCC7 16r4343 16rCCC9 16r4344 16rCCD0 16r4345 16rCCD4 16r4346 16rCCE4 16r4347 16rCCEC 16r4348 16rCCF0 16r4349 16rCD01 16r434A 16rCD08 16r434B 16rCD09 16r434C 16rCD0C 16r434D 16rCD10 16r434E 16rCD18 16r434F 16rCD19 16r4350 16rCD1B 16r4351 16rCD1D 16r4352 16rCD24 16r4353 16rCD28 16r4354 16rCD2C 16r4355 16rCD39 16r4356 16rCD5C 16r4357 16rCD60 16r4358 16rCD64 16r4359 16rCD6C 16r435A 16rCD6D 16r435B 16rCD6F 16r435C 16rCD71 16r435D 16rCD78 16r435E 16rCD88 16r435F 16rCD94 16r4360 16rCD95 16r4361 16rCD98 16r4362 16rCD9C 16r4363 16rCDA4 16r4364 16rCDA5 16r4365 16rCDA7 16r4366 16rCDA9 16r4367 16rCDB0 16r4368 16rCDC4 16r4369 16rCDCC 16r436A 16rCDD0 16r436B 16rCDE8 16r436C 16rCDEC 16r436D 16rCDF0 16r436E 16rCDF8 16r436F 16rCDF9 16r4370 16rCDFB 16r4371 16rCDFD 16r4372 16rCE04 16r4373 16rCE08 16r4374 16rCE0C 16r4375 16rCE14 16r4376 16rCE19 16r4377 16rCE20 16r4378 16rCE21 16r4379 16rCE24 16r437A 16rCE28 16r437B 16rCE30 16r437C 16rCE31 16r437D 16rCE33 16r437E 16rCE35 16r4421 16rCE58 16r4422 16rCE59 16r4423 16rCE5C 16r4424 16rCE5F 16r4425 16rCE60 16r4426 16rCE61 16r4427 16rCE68 16r4428 16rCE69 16r4429 16rCE6B 16r442A 16rCE6D 16r442B 16rCE74 16r442C 16rCE75 16r442D 16rCE78 16r442E 16rCE7C 16r442F 16rCE84 16r4430 16rCE85 16r4431 16rCE87 16r4432 16rCE89 16r4433 16rCE90 16r4434 16rCE91 16r4435 16rCE94 16r4436 16rCE98 16r4437 16rCEA0 16r4438 16rCEA1 16r4439 16rCEA3 16r443A 16rCEA4 16r443B 16rCEA5 16r443C 16rCEAC 16r443D 16rCEAD 16r443E 16rCEC1 16r443F 16rCEE4 16r4440 16rCEE5 16r4441 16rCEE8 16r4442 16rCEEB 16r4443 16rCEEC 16r4444 16rCEF4 16r4445 16rCEF5 16r4446 16rCEF7 16r4447 16rCEF8 16r4448 16rCEF9 16r4449 16rCF00 16r444A 16rCF01 16r444B 16rCF04 16r444C 16rCF08 16r444D 16rCF10 16r444E 16rCF11 16r444F 16rCF13 16r4450 16rCF15 16r4451 16rCF1C 16r4452 16rCF20 16r4453 16rCF24 16r4454 16rCF2C 16r4455 16rCF2D 16r4456 16rCF2F 16r4457 16rCF30 16r4458 16rCF31 16r4459 16rCF38 16r445A 16rCF54 16r445B 16rCF55 16r445C 16rCF58 16r445D 16rCF5C 16r445E 16rCF64 16r445F 16rCF65 16r4460 16rCF67 16r4461 16rCF69 16r4462 16rCF70 16r4463 16rCF71 16r4464 16rCF74 16r4465 16rCF78 16r4466 16rCF80 16r4467 16rCF85 16r4468 16rCF8C 16r4469 16rCFA1 16r446A 16rCFA8 16r446B 16rCFB0 16r446C 16rCFC4 16r446D 16rCFE0 16r446E 16rCFE1 16r446F 16rCFE4 16r4470 16rCFE8 16r4471 16rCFF0 16r4472 16rCFF1 16r4473 16rCFF3 16r4474 16rCFF5 16r4475 16rCFFC 16r4476 16rD000 16r4477 16rD004 16r4478 16rD011 16r4479 16rD018 16r447A 16rD02D 16r447B 16rD034 16r447C 16rD035 16r447D 16rD038 16r447E 16rD03C 16r4521 16rD044 16r4522 16rD045 16r4523 16rD047 16r4524 16rD049 16r4525 16rD050 16r4526 16rD054 16r4527 16rD058 16r4528 16rD060 16r4529 16rD06C 16r452A 16rD06D 16r452B 16rD070 16r452C 16rD074 16r452D 16rD07C 16r452E 16rD07D 16r452F 16rD081 16r4530 16rD0A4 16r4531 16rD0A5 16r4532 16rD0A8 16r4533 16rD0AC 16r4534 16rD0B4 16r4535 16rD0B5 16r4536 16rD0B7 16r4537 16rD0B9 16r4538 16rD0C0 16r4539 16rD0C1 16r453A 16rD0C4 16r453B 16rD0C8 16r453C 16rD0C9 16r453D 16rD0D0 16r453E 16rD0D1 16r453F 16rD0D3 16r4540 16rD0D4 16r4541 16rD0D5 16r4542 16rD0DC 16r4543 16rD0DD 16r4544 16rD0E0 16r4545 16rD0E4 16r4546 16rD0EC 16r4547 16rD0ED 16r4548 16rD0EF 16r4549 16rD0F0 16r454A 16rD0F1 16r454B 16rD0F8 16r454C 16rD10D 16r454D 16rD130 16r454E 16rD131 16r454F 16rD134 16r4550 16rD138 16r4551 16rD13A 16r4552 16rD140 16r4553 16rD141 16r4554 16rD143 16r4555 16rD144 16r4556 16rD145 16r4557 16rD14C 16r4558 16rD14D 16r4559 16rD150 16r455A 16rD154 16r455B 16rD15C 16r455C 16rD15D 16r455D 16rD15F 16r455E 16rD161 16r455F 16rD168 16r4560 16rD16C 16r4561 16rD17C 16r4562 16rD184 16r4563 16rD188 16r4564 16rD1A0 16r4565 16rD1A1 16r4566 16rD1A4 16r4567 16rD1A8 16r4568 16rD1B0 16r4569 16rD1B1 16r456A 16rD1B3 16r456B 16rD1B5 16r456C 16rD1BA 16r456D 16rD1BC 16r456E 16rD1C0 16r456F 16rD1D8 16r4570 16rD1F4 16r4571 16rD1F8 16r4572 16rD207 16r4573 16rD209 16r4574 16rD210 16r4575 16rD22C 16r4576 16rD22D 16r4577 16rD230 16r4578 16rD234 16r4579 16rD23C 16r457A 16rD23D 16r457B 16rD23F 16r457C 16rD241 16r457D 16rD248 16r457E 16rD25C 16r4621 16rD264 16r4622 16rD280 16r4623 16rD281 16r4624 16rD284 16r4625 16rD288 16r4626 16rD290 16r4627 16rD291 16r4628 16rD295 16r4629 16rD29C 16r462A 16rD2A0 16r462B 16rD2A4 16r462C 16rD2AC 16r462D 16rD2B1 16r462E 16rD2B8 16r462F 16rD2B9 16r4630 16rD2BC 16r4631 16rD2BF 16r4632 16rD2C0 16r4633 16rD2C2 16r4634 16rD2C8 16r4635 16rD2C9 16r4636 16rD2CB 16r4637 16rD2D4 16r4638 16rD2D8 16r4639 16rD2DC 16r463A 16rD2E4 16r463B 16rD2E5 16r463C 16rD2F0 16r463D 16rD2F1 16r463E 16rD2F4 16r463F 16rD2F8 16r4640 16rD300 16r4641 16rD301 16r4642 16rD303 16r4643 16rD305 16r4644 16rD30C 16r4645 16rD30D 16r4646 16rD30E 16r4647 16rD310 16r4648 16rD314 16r4649 16rD316 16r464A 16rD31C 16r464B 16rD31D 16r464C 16rD31F 16r464D 16rD320 16r464E 16rD321 16r464F 16rD325 16r4650 16rD328 16r4651 16rD329 16r4652 16rD32C 16r4653 16rD330 16r4654 16rD338 16r4655 16rD339 16r4656 16rD33B 16r4657 16rD33C 16r4658 16rD33D 16r4659 16rD344 16r465A 16rD345 16r465B 16rD37C 16r465C 16rD37D 16r465D 16rD380 16r465E 16rD384 16r465F 16rD38C 16r4660 16rD38D 16r4661 16rD38F 16r4662 16rD390 16r4663 16rD391 16r4664 16rD398 16r4665 16rD399 16r4666 16rD39C 16r4667 16rD3A0 16r4668 16rD3A8 16r4669 16rD3A9 16r466A 16rD3AB 16r466B 16rD3AD 16r466C 16rD3B4 16r466D 16rD3B8 16r466E 16rD3BC 16r466F 16rD3C4 16r4670 16rD3C5 16r4671 16rD3C8 16r4672 16rD3C9 16r4673 16rD3D0 16r4674 16rD3D8 16r4675 16rD3E1 16r4676 16rD3E3 16r4677 16rD3EC 16r4678 16rD3ED 16r4679 16rD3F0 16r467A 16rD3F4 16r467B 16rD3FC 16r467C 16rD3FD 16r467D 16rD3FF 16r467E 16rD401 16r4721 16rD408 16r4722 16rD41D 16r4723 16rD440 16r4724 16rD444 16r4725 16rD45C 16r4726 16rD460 16r4727 16rD464 16r4728 16rD46D 16r4729 16rD46F 16r472A 16rD478 16r472B 16rD479 16r472C 16rD47C 16r472D 16rD47F 16r472E 16rD480 16r472F 16rD482 16r4730 16rD488 16r4731 16rD489 16r4732 16rD48B 16r4733 16rD48D 16r4734 16rD494 16r4735 16rD4A9 16r4736 16rD4CC 16r4737 16rD4D0 16r4738 16rD4D4 16r4739 16rD4DC 16r473A 16rD4DF 16r473B 16rD4E8 16r473C 16rD4EC 16r473D 16rD4F0 16r473E 16rD4F8 16r473F 16rD4FB 16r4740 16rD4FD 16r4741 16rD504 16r4742 16rD508 16r4743 16rD50C 16r4744 16rD514 16r4745 16rD515 16r4746 16rD517 16r4747 16rD53C 16r4748 16rD53D 16r4749 16rD540 16r474A 16rD544 16r474B 16rD54C 16r474C 16rD54D 16r474D 16rD54F 16r474E 16rD551 16r474F 16rD558 16r4750 16rD559 16r4751 16rD55C 16r4752 16rD560 16r4753 16rD565 16r4754 16rD568 16r4755 16rD569 16r4756 16rD56B 16r4757 16rD56D 16r4758 16rD574 16r4759 16rD575 16r475A 16rD578 16r475B 16rD57C 16r475C 16rD584 16r475D 16rD585 16r475E 16rD587 16r475F 16rD588 16r4760 16rD589 16r4761 16rD590 16r4762 16rD5A5 16r4763 16rD5C8 16r4764 16rD5C9 16r4765 16rD5CC 16r4766 16rD5D0 16r4767 16rD5D2 16r4768 16rD5D8 16r4769 16rD5D9 16r476A 16rD5DB 16r476B 16rD5DD 16r476C 16rD5E4 16r476D 16rD5E5 16r476E 16rD5E8 16r476F 16rD5EC 16r4770 16rD5F4 16r4771 16rD5F5 16r4772 16rD5F7 16r4773 16rD5F9 16r4774 16rD600 16r4775 16rD601 16r4776 16rD604 16r4777 16rD608 16r4778 16rD610 16r4779 16rD611 16r477A 16rD613 16r477B 16rD614 16r477C 16rD615 16r477D 16rD61C 16r477E 16rD620 16r4821 16rD624 16r4822 16rD62D 16r4823 16rD638 16r4824 16rD639 16r4825 16rD63C 16r4826 16rD640 16r4827 16rD645 16r4828 16rD648 16r4829 16rD649 16r482A 16rD64B 16r482B 16rD64D 16r482C 16rD651 16r482D 16rD654 16r482E 16rD655 16r482F 16rD658 16r4830 16rD65C 16r4831 16rD667 16r4832 16rD669 16r4833 16rD670 16r4834 16rD671 16r4835 16rD674 16r4836 16rD683 16r4837 16rD685 16r4838 16rD68C 16r4839 16rD68D 16r483A 16rD690 16r483B 16rD694 16r483C 16rD69D 16r483D 16rD69F 16r483E 16rD6A1 16r483F 16rD6A8 16r4840 16rD6AC 16r4841 16rD6B0 16r4842 16rD6B9 16r4843 16rD6BB 16r4844 16rD6C4 16r4845 16rD6C5 16r4846 16rD6C8 16r4847 16rD6CC 16r4848 16rD6D1 16r4849 16rD6D4 16r484A 16rD6D7 16r484B 16rD6D9 16r484C 16rD6E0 16r484D 16rD6E4 16r484E 16rD6E8 16r484F 16rD6F0 16r4850 16rD6F5 16r4851 16rD6FC 16r4852 16rD6FD 16r4853 16rD700 16r4854 16rD704 16r4855 16rD711 16r4856 16rD718 16r4857 16rD719 16r4858 16rD71C 16r4859 16rD720 16r485A 16rD728 16r485B 16rD729 16r485C 16rD72B 16r485D 16rD72D 16r485E 16rD734 16r485F 16rD735 16r4860 16rD738 16r4861 16rD73C 16r4862 16rD744 16r4863 16rD747 16r4864 16rD749 16r4865 16rD750 16r4866 16rD751 16r4867 16rD754 16r4868 16rD756 16r4869 16rD757 16r486A 16rD758 16r486B 16rD759 16r486C 16rD760 16r486D 16rD761 16r486E 16rD763 16r486F 16rD765 16r4870 16rD769 16r4871 16rD76C 16r4872 16rD770 16r4873 16rD774 16r4874 16rD77C 16r4875 16rD77D 16r4876 16rD781 16r4877 16rD788 16r4878 16rD789 16r4879 16rD78C 16r487A 16rD790 16r487B 16rD798 16r487C 16rD799 16r487D 16rD79B 16r487E 16rD79D 16r4A21 16r4F3D 16r4A22 16r4F73 16r4A23 16r5047 16r4A24 16r50F9 16r4A25 16r52A0 16r4A26 16r53EF 16r4A27 16r5475 16r4A28 16r54E5 16r4A29 16r5609 16r4A2A 16r5AC1 16r4A2B 16r5BB6 16r4A2C 16r6687 16r4A2D 16r67B6 16r4A2E 16r67B7 16r4A2F 16r67EF 16r4A30 16r6B4C 16r4A31 16r73C2 16r4A32 16r75C2 16r4A33 16r7A3C 16r4A34 16r82DB 16r4A35 16r8304 16r4A36 16r8857 16r4A37 16r8888 16r4A38 16r8A36 16r4A39 16r8CC8 16r4A3A 16r8DCF 16r4A3B 16r8EFB 16r4A3C 16r8FE6 16r4A3D 16r99D5 16r4A3E 16r523B 16r4A3F 16r5374 16r4A40 16r5404 16r4A41 16r606A 16r4A42 16r6164 16r4A43 16r6BBC 16r4A44 16r73CF 16r4A45 16r811A 16r4A46 16r89BA 16r4A47 16r89D2 16r4A48 16r95A3 16r4A49 16r4F83 16r4A4A 16r520A 16r4A4B 16r58BE 16r4A4C 16r5978 16r4A4D 16r59E6 16r4A4E 16r5E72 16r4A4F 16r5E79 16r4A50 16r61C7 16r4A51 16r63C0 16r4A52 16r6746 16r4A53 16r67EC 16r4A54 16r687F 16r4A55 16r6F97 16r4A56 16r764E 16r4A57 16r770B 16r4A58 16r78F5 16r4A59 16r7A08 16r4A5A 16r7AFF 16r4A5B 16r7C21 16r4A5C 16r809D 16r4A5D 16r826E 16r4A5E 16r8271 16r4A5F 16r8AEB 16r4A60 16r9593 16r4A61 16r4E6B 16r4A62 16r559D 16r4A63 16r66F7 16r4A64 16r6E34 16r4A65 16r78A3 16r4A66 16r7AED 16r4A67 16r845B 16r4A68 16r8910 16r4A69 16r874E 16r4A6A 16r97A8 16r4A6B 16r52D8 16r4A6C 16r574E 16r4A6D 16r582A 16r4A6E 16r5D4C 16r4A6F 16r611F 16r4A70 16r61BE 16r4A71 16r6221 16r4A72 16r6562 16r4A73 16r67D1 16r4A74 16r6A44 16r4A75 16r6E1B 16r4A76 16r7518 16r4A77 16r75B3 16r4A78 16r76E3 16r4A79 16r77B0 16r4A7A 16r7D3A 16r4A7B 16r90AF 16r4A7C 16r9451 16r4A7D 16r9452 16r4A7E 16r9F95 16r4B21 16r5323 16r4B22 16r5CAC 16r4B23 16r7532 16r4B24 16r80DB 16r4B25 16r9240 16r4B26 16r9598 16r4B27 16r525B 16r4B28 16r5808 16r4B29 16r59DC 16r4B2A 16r5CA1 16r4B2B 16r5D17 16r4B2C 16r5EB7 16r4B2D 16r5F3A 16r4B2E 16r5F4A 16r4B2F 16r6177 16r4B30 16r6C5F 16r4B31 16r757A 16r4B32 16r7586 16r4B33 16r7CE0 16r4B34 16r7D73 16r4B35 16r7DB1 16r4B36 16r7F8C 16r4B37 16r8154 16r4B38 16r8221 16r4B39 16r8591 16r4B3A 16r8941 16r4B3B 16r8B1B 16r4B3C 16r92FC 16r4B3D 16r964D 16r4B3E 16r9C47 16r4B3F 16r4ECB 16r4B40 16r4EF7 16r4B41 16r500B 16r4B42 16r51F1 16r4B43 16r584F 16r4B44 16r6137 16r4B45 16r613E 16r4B46 16r6168 16r4B47 16r6539 16r4B48 16r69EA 16r4B49 16r6F11 16r4B4A 16r75A5 16r4B4B 16r7686 16r4B4C 16r76D6 16r4B4D 16r7B87 16r4B4E 16r82A5 16r4B4F 16r84CB 16r4B50 16rF900 16r4B51 16r93A7 16r4B52 16r958B 16r4B53 16r5580 16r4B54 16r5BA2 16r4B55 16r5751 16r4B56 16rF901 16r4B57 16r7CB3 16r4B58 16r7FB9 16r4B59 16r91B5 16r4B5A 16r5028 16r4B5B 16r53BB 16r4B5C 16r5C45 16r4B5D 16r5DE8 16r4B5E 16r62D2 16r4B5F 16r636E 16r4B60 16r64DA 16r4B61 16r64E7 16r4B62 16r6E20 16r4B63 16r70AC 16r4B64 16r795B 16r4B65 16r8DDD 16r4B66 16r8E1E 16r4B67 16rF902 16r4B68 16r907D 16r4B69 16r9245 16r4B6A 16r92F8 16r4B6B 16r4E7E 16r4B6C 16r4EF6 16r4B6D 16r5065 16r4B6E 16r5DFE 16r4B6F 16r5EFA 16r4B70 16r6106 16r4B71 16r6957 16r4B72 16r8171 16r4B73 16r8654 16r4B74 16r8E47 16r4B75 16r9375 16r4B76 16r9A2B 16r4B77 16r4E5E 16r4B78 16r5091 16r4B79 16r6770 16r4B7A 16r6840 16r4B7B 16r5109 16r4B7C 16r528D 16r4B7D 16r5292 16r4B7E 16r6AA2 16r4C21 16r77BC 16r4C22 16r9210 16r4C23 16r9ED4 16r4C24 16r52AB 16r4C25 16r602F 16r4C26 16r8FF2 16r4C27 16r5048 16r4C28 16r61A9 16r4C29 16r63ED 16r4C2A 16r64CA 16r4C2B 16r683C 16r4C2C 16r6A84 16r4C2D 16r6FC0 16r4C2E 16r8188 16r4C2F 16r89A1 16r4C30 16r9694 16r4C31 16r5805 16r4C32 16r727D 16r4C33 16r72AC 16r4C34 16r7504 16r4C35 16r7D79 16r4C36 16r7E6D 16r4C37 16r80A9 16r4C38 16r898B 16r4C39 16r8B74 16r4C3A 16r9063 16r4C3B 16r9D51 16r4C3C 16r6289 16r4C3D 16r6C7A 16r4C3E 16r6F54 16r4C3F 16r7D50 16r4C40 16r7F3A 16r4C41 16r8A23 16r4C42 16r517C 16r4C43 16r614A 16r4C44 16r7B9D 16r4C45 16r8B19 16r4C46 16r9257 16r4C47 16r938C 16r4C48 16r4EAC 16r4C49 16r4FD3 16r4C4A 16r501E 16r4C4B 16r50BE 16r4C4C 16r5106 16r4C4D 16r52C1 16r4C4E 16r52CD 16r4C4F 16r537F 16r4C50 16r5770 16r4C51 16r5883 16r4C52 16r5E9A 16r4C53 16r5F91 16r4C54 16r6176 16r4C55 16r61AC 16r4C56 16r64CE 16r4C57 16r656C 16r4C58 16r666F 16r4C59 16r66BB 16r4C5A 16r66F4 16r4C5B 16r6897 16r4C5C 16r6D87 16r4C5D 16r7085 16r4C5E 16r70F1 16r4C5F 16r749F 16r4C60 16r74A5 16r4C61 16r74CA 16r4C62 16r75D9 16r4C63 16r786C 16r4C64 16r78EC 16r4C65 16r7ADF 16r4C66 16r7AF6 16r4C67 16r7D45 16r4C68 16r7D93 16r4C69 16r8015 16r4C6A 16r803F 16r4C6B 16r811B 16r4C6C 16r8396 16r4C6D 16r8B66 16r4C6E 16r8F15 16r4C6F 16r9015 16r4C70 16r93E1 16r4C71 16r9803 16r4C72 16r9838 16r4C73 16r9A5A 16r4C74 16r9BE8 16r4C75 16r4FC2 16r4C76 16r5553 16r4C77 16r583A 16r4C78 16r5951 16r4C79 16r5B63 16r4C7A 16r5C46 16r4C7B 16r60B8 16r4C7C 16r6212 16r4C7D 16r6842 16r4C7E 16r68B0 16r4D21 16r68E8 16r4D22 16r6EAA 16r4D23 16r754C 16r4D24 16r7678 16r4D25 16r78CE 16r4D26 16r7A3D 16r4D27 16r7CFB 16r4D28 16r7E6B 16r4D29 16r7E7C 16r4D2A 16r8A08 16r4D2B 16r8AA1 16r4D2C 16r8C3F 16r4D2D 16r968E 16r4D2E 16r9DC4 16r4D2F 16r53E4 16r4D30 16r53E9 16r4D31 16r544A 16r4D32 16r5471 16r4D33 16r56FA 16r4D34 16r59D1 16r4D35 16r5B64 16r4D36 16r5C3B 16r4D37 16r5EAB 16r4D38 16r62F7 16r4D39 16r6537 16r4D3A 16r6545 16r4D3B 16r6572 16r4D3C 16r66A0 16r4D3D 16r67AF 16r4D3E 16r69C1 16r4D3F 16r6CBD 16r4D40 16r75FC 16r4D41 16r7690 16r4D42 16r777E 16r4D43 16r7A3F 16r4D44 16r7F94 16r4D45 16r8003 16r4D46 16r80A1 16r4D47 16r818F 16r4D48 16r82E6 16r4D49 16r82FD 16r4D4A 16r83F0 16r4D4B 16r85C1 16r4D4C 16r8831 16r4D4D 16r88B4 16r4D4E 16r8AA5 16r4D4F 16rF903 16r4D50 16r8F9C 16r4D51 16r932E 16r4D52 16r96C7 16r4D53 16r9867 16r4D54 16r9AD8 16r4D55 16r9F13 16r4D56 16r54ED 16r4D57 16r659B 16r4D58 16r66F2 16r4D59 16r688F 16r4D5A 16r7A40 16r4D5B 16r8C37 16r4D5C 16r9D60 16r4D5D 16r56F0 16r4D5E 16r5764 16r4D5F 16r5D11 16r4D60 16r6606 16r4D61 16r68B1 16r4D62 16r68CD 16r4D63 16r6EFE 16r4D64 16r7428 16r4D65 16r889E 16r4D66 16r9BE4 16r4D67 16r6C68 16r4D68 16rF904 16r4D69 16r9AA8 16r4D6A 16r4F9B 16r4D6B 16r516C 16r4D6C 16r5171 16r4D6D 16r529F 16r4D6E 16r5B54 16r4D6F 16r5DE5 16r4D70 16r6050 16r4D71 16r606D 16r4D72 16r62F1 16r4D73 16r63A7 16r4D74 16r653B 16r4D75 16r73D9 16r4D76 16r7A7A 16r4D77 16r86A3 16r4D78 16r8CA2 16r4D79 16r978F 16r4D7A 16r4E32 16r4D7B 16r5BE1 16r4D7C 16r6208 16r4D7D 16r679C 16r4D7E 16r74DC 16r4E21 16r79D1 16r4E22 16r83D3 16r4E23 16r8A87 16r4E24 16r8AB2 16r4E25 16r8DE8 16r4E26 16r904E 16r4E27 16r934B 16r4E28 16r9846 16r4E29 16r5ED3 16r4E2A 16r69E8 16r4E2B 16r85FF 16r4E2C 16r90ED 16r4E2D 16rF905 16r4E2E 16r51A0 16r4E2F 16r5B98 16r4E30 16r5BEC 16r4E31 16r6163 16r4E32 16r68FA 16r4E33 16r6B3E 16r4E34 16r704C 16r4E35 16r742F 16r4E36 16r74D8 16r4E37 16r7BA1 16r4E38 16r7F50 16r4E39 16r83C5 16r4E3A 16r89C0 16r4E3B 16r8CAB 16r4E3C 16r95DC 16r4E3D 16r9928 16r4E3E 16r522E 16r4E3F 16r605D 16r4E40 16r62EC 16r4E41 16r9002 16r4E42 16r4F8A 16r4E43 16r5149 16r4E44 16r5321 16r4E45 16r58D9 16r4E46 16r5EE3 16r4E47 16r66E0 16r4E48 16r6D38 16r4E49 16r709A 16r4E4A 16r72C2 16r4E4B 16r73D6 16r4E4C 16r7B50 16r4E4D 16r80F1 16r4E4E 16r945B 16r4E4F 16r5366 16r4E50 16r639B 16r4E51 16r7F6B 16r4E52 16r4E56 16r4E53 16r5080 16r4E54 16r584A 16r4E55 16r58DE 16r4E56 16r602A 16r4E57 16r6127 16r4E58 16r62D0 16r4E59 16r69D0 16r4E5A 16r9B41 16r4E5B 16r5B8F 16r4E5C 16r7D18 16r4E5D 16r80B1 16r4E5E 16r8F5F 16r4E5F 16r4EA4 16r4E60 16r50D1 16r4E61 16r54AC 16r4E62 16r55AC 16r4E63 16r5B0C 16r4E64 16r5DA0 16r4E65 16r5DE7 16r4E66 16r652A 16r4E67 16r654E 16r4E68 16r6821 16r4E69 16r6A4B 16r4E6A 16r72E1 16r4E6B 16r768E 16r4E6C 16r77EF 16r4E6D 16r7D5E 16r4E6E 16r7FF9 16r4E6F 16r81A0 16r4E70 16r854E 16r4E71 16r86DF 16r4E72 16r8F03 16r4E73 16r8F4E 16r4E74 16r90CA 16r4E75 16r9903 16r4E76 16r9A55 16r4E77 16r9BAB 16r4E78 16r4E18 16r4E79 16r4E45 16r4E7A 16r4E5D 16r4E7B 16r4EC7 16r4E7C 16r4FF1 16r4E7D 16r5177 16r4E7E 16r52FE 16r4F21 16r5340 16r4F22 16r53E3 16r4F23 16r53E5 16r4F24 16r548E 16r4F25 16r5614 16r4F26 16r5775 16r4F27 16r57A2 16r4F28 16r5BC7 16r4F29 16r5D87 16r4F2A 16r5ED0 16r4F2B 16r61FC 16r4F2C 16r62D8 16r4F2D 16r6551 16r4F2E 16r67B8 16r4F2F 16r67E9 16r4F30 16r69CB 16r4F31 16r6B50 16r4F32 16r6BC6 16r4F33 16r6BEC 16r4F34 16r6C42 16r4F35 16r6E9D 16r4F36 16r7078 16r4F37 16r72D7 16r4F38 16r7396 16r4F39 16r7403 16r4F3A 16r77BF 16r4F3B 16r77E9 16r4F3C 16r7A76 16r4F3D 16r7D7F 16r4F3E 16r8009 16r4F3F 16r81FC 16r4F40 16r8205 16r4F41 16r820A 16r4F42 16r82DF 16r4F43 16r8862 16r4F44 16r8B33 16r4F45 16r8CFC 16r4F46 16r8EC0 16r4F47 16r9011 16r4F48 16r90B1 16r4F49 16r9264 16r4F4A 16r92B6 16r4F4B 16r99D2 16r4F4C 16r9A45 16r4F4D 16r9CE9 16r4F4E 16r9DD7 16r4F4F 16r9F9C 16r4F50 16r570B 16r4F51 16r5C40 16r4F52 16r83CA 16r4F53 16r97A0 16r4F54 16r97AB 16r4F55 16r9EB4 16r4F56 16r541B 16r4F57 16r7A98 16r4F58 16r7FA4 16r4F59 16r88D9 16r4F5A 16r8ECD 16r4F5B 16r90E1 16r4F5C 16r5800 16r4F5D 16r5C48 16r4F5E 16r6398 16r4F5F 16r7A9F 16r4F60 16r5BAE 16r4F61 16r5F13 16r4F62 16r7A79 16r4F63 16r7AAE 16r4F64 16r828E 16r4F65 16r8EAC 16r4F66 16r5026 16r4F67 16r5238 16r4F68 16r52F8 16r4F69 16r5377 16r4F6A 16r5708 16r4F6B 16r62F3 16r4F6C 16r6372 16r4F6D 16r6B0A 16r4F6E 16r6DC3 16r4F6F 16r7737 16r4F70 16r53A5 16r4F71 16r7357 16r4F72 16r8568 16r4F73 16r8E76 16r4F74 16r95D5 16r4F75 16r673A 16r4F76 16r6AC3 16r4F77 16r6F70 16r4F78 16r8A6D 16r4F79 16r8ECC 16r4F7A 16r994B 16r4F7B 16rF906 16r4F7C 16r6677 16r4F7D 16r6B78 16r4F7E 16r8CB4 16r5021 16r9B3C 16r5022 16rF907 16r5023 16r53EB 16r5024 16r572D 16r5025 16r594E 16r5026 16r63C6 16r5027 16r69FB 16r5028 16r73EA 16r5029 16r7845 16r502A 16r7ABA 16r502B 16r7AC5 16r502C 16r7CFE 16r502D 16r8475 16r502E 16r898F 16r502F 16r8D73 16r5030 16r9035 16r5031 16r95A8 16r5032 16r52FB 16r5033 16r5747 16r5034 16r7547 16r5035 16r7B60 16r5036 16r83CC 16r5037 16r921E 16r5038 16rF908 16r5039 16r6A58 16r503A 16r514B 16r503B 16r524B 16r503C 16r5287 16r503D 16r621F 16r503E 16r68D8 16r503F 16r6975 16r5040 16r9699 16r5041 16r50C5 16r5042 16r52A4 16r5043 16r52E4 16r5044 16r61C3 16r5045 16r65A4 16r5046 16r6839 16r5047 16r69FF 16r5048 16r747E 16r5049 16r7B4B 16r504A 16r82B9 16r504B 16r83EB 16r504C 16r89B2 16r504D 16r8B39 16r504E 16r8FD1 16r504F 16r9949 16r5050 16rF909 16r5051 16r4ECA 16r5052 16r5997 16r5053 16r64D2 16r5054 16r6611 16r5055 16r6A8E 16r5056 16r7434 16r5057 16r7981 16r5058 16r79BD 16r5059 16r82A9 16r505A 16r887E 16r505B 16r887F 16r505C 16r895F 16r505D 16rF90A 16r505E 16r9326 16r505F 16r4F0B 16r5060 16r53CA 16r5061 16r6025 16r5062 16r6271 16r5063 16r6C72 16r5064 16r7D1A 16r5065 16r7D66 16r5066 16r4E98 16r5067 16r5162 16r5068 16r77DC 16r5069 16r80AF 16r506A 16r4F01 16r506B 16r4F0E 16r506C 16r5176 16r506D 16r5180 16r506E 16r55DC 16r506F 16r5668 16r5070 16r573B 16r5071 16r57FA 16r5072 16r57FC 16r5073 16r5914 16r5074 16r5947 16r5075 16r5993 16r5076 16r5BC4 16r5077 16r5C90 16r5078 16r5D0E 16r5079 16r5DF1 16r507A 16r5E7E 16r507B 16r5FCC 16r507C 16r6280 16r507D 16r65D7 16r507E 16r65E3 16r5121 16r671E 16r5122 16r671F 16r5123 16r675E 16r5124 16r68CB 16r5125 16r68C4 16r5126 16r6A5F 16r5127 16r6B3A 16r5128 16r6C23 16r5129 16r6C7D 16r512A 16r6C82 16r512B 16r6DC7 16r512C 16r7398 16r512D 16r7426 16r512E 16r742A 16r512F 16r7482 16r5130 16r74A3 16r5131 16r7578 16r5132 16r757F 16r5133 16r7881 16r5134 16r78EF 16r5135 16r7941 16r5136 16r7947 16r5137 16r7948 16r5138 16r797A 16r5139 16r7B95 16r513A 16r7D00 16r513B 16r7DBA 16r513C 16r7F88 16r513D 16r8006 16r513E 16r802D 16r513F 16r808C 16r5140 16r8A18 16r5141 16r8B4F 16r5142 16r8C48 16r5143 16r8D77 16r5144 16r9321 16r5145 16r9324 16r5146 16r98E2 16r5147 16r9951 16r5148 16r9A0E 16r5149 16r9A0F 16r514A 16r9A65 16r514B 16r9E92 16r514C 16r7DCA 16r514D 16r4F76 16r514E 16r5409 16r514F 16r62EE 16r5150 16r6854 16r5151 16r91D1 16r5152 16r55AB 16r5153 16r513A 16r5154 16rF90B 16r5155 16rF90C 16r5156 16r5A1C 16r5157 16r61E6 16r5158 16rF90D 16r5159 16r62CF 16r515A 16r62FF 16r515B 16rF90E 16r515C 16rF90F 16r515D 16rF910 16r515E 16rF911 16r515F 16rF912 16r5160 16rF913 16r5161 16r90A3 16r5162 16rF914 16r5163 16rF915 16r5164 16rF916 16r5165 16rF917 16r5166 16rF918 16r5167 16r8AFE 16r5168 16rF919 16r5169 16rF91A 16r516A 16rF91B 16r516B 16rF91C 16r516C 16r6696 16r516D 16rF91D 16r516E 16r7156 16r516F 16rF91E 16r5170 16rF91F 16r5171 16r96E3 16r5172 16rF920 16r5173 16r634F 16r5174 16r637A 16r5175 16r5357 16r5176 16rF921 16r5177 16r678F 16r5178 16r6960 16r5179 16r6E73 16r517A 16rF922 16r517B 16r7537 16r517C 16rF923 16r517D 16rF924 16r517E 16rF925 16r5221 16r7D0D 16r5222 16rF926 16r5223 16rF927 16r5224 16r8872 16r5225 16r56CA 16r5226 16r5A18 16r5227 16rF928 16r5228 16rF929 16r5229 16rF92A 16r522A 16rF92B 16r522B 16rF92C 16r522C 16r4E43 16r522D 16rF92D 16r522E 16r5167 16r522F 16r5948 16r5230 16r67F0 16r5231 16r8010 16r5232 16rF92E 16r5233 16r5973 16r5234 16r5E74 16r5235 16r649A 16r5236 16r79CA 16r5237 16r5FF5 16r5238 16r606C 16r5239 16r62C8 16r523A 16r637B 16r523B 16r5BE7 16r523C 16r5BD7 16r523D 16r52AA 16r523E 16rF92F 16r523F 16r5974 16r5240 16r5F29 16r5241 16r6012 16r5242 16rF930 16r5243 16rF931 16r5244 16rF932 16r5245 16r7459 16r5246 16rF933 16r5247 16rF934 16r5248 16rF935 16r5249 16rF936 16r524A 16rF937 16r524B 16rF938 16r524C 16r99D1 16r524D 16rF939 16r524E 16rF93A 16r524F 16rF93B 16r5250 16rF93C 16r5251 16rF93D 16r5252 16rF93E 16r5253 16rF93F 16r5254 16rF940 16r5255 16rF941 16r5256 16rF942 16r5257 16rF943 16r5258 16r6FC3 16r5259 16rF944 16r525A 16rF945 16r525B 16r81BF 16r525C 16r8FB2 16r525D 16r60F1 16r525E 16rF946 16r525F 16rF947 16r5260 16r8166 16r5261 16rF948 16r5262 16rF949 16r5263 16r5C3F 16r5264 16rF94A 16r5265 16rF94B 16r5266 16rF94C 16r5267 16rF94D 16r5268 16rF94E 16r5269 16rF94F 16r526A 16rF950 16r526B 16rF951 16r526C 16r5AE9 16r526D 16r8A25 16r526E 16r677B 16r526F 16r7D10 16r5270 16rF952 16r5271 16rF953 16r5272 16rF954 16r5273 16rF955 16r5274 16rF956 16r5275 16rF957 16r5276 16r80FD 16r5277 16rF958 16r5278 16rF959 16r5279 16r5C3C 16r527A 16r6CE5 16r527B 16r533F 16r527C 16r6EBA 16r527D 16r591A 16r527E 16r8336 16r5321 16r4E39 16r5322 16r4EB6 16r5323 16r4F46 16r5324 16r55AE 16r5325 16r5718 16r5326 16r58C7 16r5327 16r5F56 16r5328 16r65B7 16r5329 16r65E6 16r532A 16r6A80 16r532B 16r6BB5 16r532C 16r6E4D 16r532D 16r77ED 16r532E 16r7AEF 16r532F 16r7C1E 16r5330 16r7DDE 16r5331 16r86CB 16r5332 16r8892 16r5333 16r9132 16r5334 16r935B 16r5335 16r64BB 16r5336 16r6FBE 16r5337 16r737A 16r5338 16r75B8 16r5339 16r9054 16r533A 16r5556 16r533B 16r574D 16r533C 16r61BA 16r533D 16r64D4 16r533E 16r66C7 16r533F 16r6DE1 16r5340 16r6E5B 16r5341 16r6F6D 16r5342 16r6FB9 16r5343 16r75F0 16r5344 16r8043 16r5345 16r81BD 16r5346 16r8541 16r5347 16r8983 16r5348 16r8AC7 16r5349 16r8B5A 16r534A 16r931F 16r534B 16r6C93 16r534C 16r7553 16r534D 16r7B54 16r534E 16r8E0F 16r534F 16r905D 16r5350 16r5510 16r5351 16r5802 16r5352 16r5858 16r5353 16r5E62 16r5354 16r6207 16r5355 16r649E 16r5356 16r68E0 16r5357 16r7576 16r5358 16r7CD6 16r5359 16r87B3 16r535A 16r9EE8 16r535B 16r4EE3 16r535C 16r5788 16r535D 16r576E 16r535E 16r5927 16r535F 16r5C0D 16r5360 16r5CB1 16r5361 16r5E36 16r5362 16r5F85 16r5363 16r6234 16r5364 16r64E1 16r5365 16r73B3 16r5366 16r81FA 16r5367 16r888B 16r5368 16r8CB8 16r5369 16r968A 16r536A 16r9EDB 16r536B 16r5B85 16r536C 16r5FB7 16r536D 16r60B3 16r536E 16r5012 16r536F 16r5200 16r5370 16r5230 16r5371 16r5716 16r5372 16r5835 16r5373 16r5857 16r5374 16r5C0E 16r5375 16r5C60 16r5376 16r5CF6 16r5377 16r5D8B 16r5378 16r5EA6 16r5379 16r5F92 16r537A 16r60BC 16r537B 16r6311 16r537C 16r6389 16r537D 16r6417 16r537E 16r6843 16r5421 16r68F9 16r5422 16r6AC2 16r5423 16r6DD8 16r5424 16r6E21 16r5425 16r6ED4 16r5426 16r6FE4 16r5427 16r71FE 16r5428 16r76DC 16r5429 16r7779 16r542A 16r79B1 16r542B 16r7A3B 16r542C 16r8404 16r542D 16r89A9 16r542E 16r8CED 16r542F 16r8DF3 16r5430 16r8E48 16r5431 16r9003 16r5432 16r9014 16r5433 16r9053 16r5434 16r90FD 16r5435 16r934D 16r5436 16r9676 16r5437 16r97DC 16r5438 16r6BD2 16r5439 16r7006 16r543A 16r7258 16r543B 16r72A2 16r543C 16r7368 16r543D 16r7763 16r543E 16r79BF 16r543F 16r7BE4 16r5440 16r7E9B 16r5441 16r8B80 16r5442 16r58A9 16r5443 16r60C7 16r5444 16r6566 16r5445 16r65FD 16r5446 16r66BE 16r5447 16r6C8C 16r5448 16r711E 16r5449 16r71C9 16r544A 16r8C5A 16r544B 16r9813 16r544C 16r4E6D 16r544D 16r7A81 16r544E 16r4EDD 16r544F 16r51AC 16r5450 16r51CD 16r5451 16r52D5 16r5452 16r540C 16r5453 16r61A7 16r5454 16r6771 16r5455 16r6850 16r5456 16r68DF 16r5457 16r6D1E 16r5458 16r6F7C 16r5459 16r75BC 16r545A 16r77B3 16r545B 16r7AE5 16r545C 16r80F4 16r545D 16r8463 16r545E 16r9285 16r545F 16r515C 16r5460 16r6597 16r5461 16r675C 16r5462 16r6793 16r5463 16r75D8 16r5464 16r7AC7 16r5465 16r8373 16r5466 16rF95A 16r5467 16r8C46 16r5468 16r9017 16r5469 16r982D 16r546A 16r5C6F 16r546B 16r81C0 16r546C 16r829A 16r546D 16r9041 16r546E 16r906F 16r546F 16r920D 16r5470 16r5F97 16r5471 16r5D9D 16r5472 16r6A59 16r5473 16r71C8 16r5474 16r767B 16r5475 16r7B49 16r5476 16r85E4 16r5477 16r8B04 16r5478 16r9127 16r5479 16r9A30 16r547A 16r5587 16r547B 16r61F6 16r547C 16rF95B 16r547D 16r7669 16r547E 16r7F85 16r5521 16r863F 16r5522 16r87BA 16r5523 16r88F8 16r5524 16r908F 16r5525 16rF95C 16r5526 16r6D1B 16r5527 16r70D9 16r5528 16r73DE 16r5529 16r7D61 16r552A 16r843D 16r552B 16rF95D 16r552C 16r916A 16r552D 16r99F1 16r552E 16rF95E 16r552F 16r4E82 16r5530 16r5375 16r5531 16r6B04 16r5532 16r6B12 16r5533 16r703E 16r5534 16r721B 16r5535 16r862D 16r5536 16r9E1E 16r5537 16r524C 16r5538 16r8FA3 16r5539 16r5D50 16r553A 16r64E5 16r553B 16r652C 16r553C 16r6B16 16r553D 16r6FEB 16r553E 16r7C43 16r553F 16r7E9C 16r5540 16r85CD 16r5541 16r8964 16r5542 16r89BD 16r5543 16r62C9 16r5544 16r81D8 16r5545 16r881F 16r5546 16r5ECA 16r5547 16r6717 16r5548 16r6D6A 16r5549 16r72FC 16r554A 16r7405 16r554B 16r746F 16r554C 16r8782 16r554D 16r90DE 16r554E 16r4F86 16r554F 16r5D0D 16r5550 16r5FA0 16r5551 16r840A 16r5552 16r51B7 16r5553 16r63A0 16r5554 16r7565 16r5555 16r4EAE 16r5556 16r5006 16r5557 16r5169 16r5558 16r51C9 16r5559 16r6881 16r555A 16r6A11 16r555B 16r7CAE 16r555C 16r7CB1 16r555D 16r7CE7 16r555E 16r826F 16r555F 16r8AD2 16r5560 16r8F1B 16r5561 16r91CF 16r5562 16r4FB6 16r5563 16r5137 16r5564 16r52F5 16r5565 16r5442 16r5566 16r5EEC 16r5567 16r616E 16r5568 16r623E 16r5569 16r65C5 16r556A 16r6ADA 16r556B 16r6FFE 16r556C 16r792A 16r556D 16r85DC 16r556E 16r8823 16r556F 16r95AD 16r5570 16r9A62 16r5571 16r9A6A 16r5572 16r9E97 16r5573 16r9ECE 16r5574 16r529B 16r5575 16r66C6 16r5576 16r6B77 16r5577 16r701D 16r5578 16r792B 16r5579 16r8F62 16r557A 16r9742 16r557B 16r6190 16r557C 16r6200 16r557D 16r6523 16r557E 16r6F23 16r5621 16r7149 16r5622 16r7489 16r5623 16r7DF4 16r5624 16r806F 16r5625 16r84EE 16r5626 16r8F26 16r5627 16r9023 16r5628 16r934A 16r5629 16r51BD 16r562A 16r5217 16r562B 16r52A3 16r562C 16r6D0C 16r562D 16r70C8 16r562E 16r88C2 16r562F 16r5EC9 16r5630 16r6582 16r5631 16r6BAE 16r5632 16r6FC2 16r5633 16r7C3E 16r5634 16r7375 16r5635 16r4EE4 16r5636 16r4F36 16r5637 16r56F9 16r5638 16rF95F 16r5639 16r5CBA 16r563A 16r5DBA 16r563B 16r601C 16r563C 16r73B2 16r563D 16r7B2D 16r563E 16r7F9A 16r563F 16r7FCE 16r5640 16r8046 16r5641 16r901E 16r5642 16r9234 16r5643 16r96F6 16r5644 16r9748 16r5645 16r9818 16r5646 16r9F61 16r5647 16r4F8B 16r5648 16r6FA7 16r5649 16r79AE 16r564A 16r91B4 16r564B 16r96B7 16r564C 16r52DE 16r564D 16rF960 16r564E 16r6488 16r564F 16r64C4 16r5650 16r6AD3 16r5651 16r6F5E 16r5652 16r7018 16r5653 16r7210 16r5654 16r76E7 16r5655 16r8001 16r5656 16r8606 16r5657 16r865C 16r5658 16r8DEF 16r5659 16r8F05 16r565A 16r9732 16r565B 16r9B6F 16r565C 16r9DFA 16r565D 16r9E75 16r565E 16r788C 16r565F 16r797F 16r5660 16r7DA0 16r5661 16r83C9 16r5662 16r9304 16r5663 16r9E7F 16r5664 16r9E93 16r5665 16r8AD6 16r5666 16r58DF 16r5667 16r5F04 16r5668 16r6727 16r5669 16r7027 16r566A 16r74CF 16r566B 16r7C60 16r566C 16r807E 16r566D 16r5121 16r566E 16r7028 16r566F 16r7262 16r5670 16r78CA 16r5671 16r8CC2 16r5672 16r8CDA 16r5673 16r8CF4 16r5674 16r96F7 16r5675 16r4E86 16r5676 16r50DA 16r5677 16r5BEE 16r5678 16r5ED6 16r5679 16r6599 16r567A 16r71CE 16r567B 16r7642 16r567C 16r77AD 16r567D 16r804A 16r567E 16r84FC 16r5721 16r907C 16r5722 16r9B27 16r5723 16r9F8D 16r5724 16r58D8 16r5725 16r5A41 16r5726 16r5C62 16r5727 16r6A13 16r5728 16r6DDA 16r5729 16r6F0F 16r572A 16r763B 16r572B 16r7D2F 16r572C 16r7E37 16r572D 16r851E 16r572E 16r8938 16r572F 16r93E4 16r5730 16r964B 16r5731 16r5289 16r5732 16r65D2 16r5733 16r67F3 16r5734 16r69B4 16r5735 16r6D41 16r5736 16r6E9C 16r5737 16r700F 16r5738 16r7409 16r5739 16r7460 16r573A 16r7559 16r573B 16r7624 16r573C 16r786B 16r573D 16r8B2C 16r573E 16r985E 16r573F 16r516D 16r5740 16r622E 16r5741 16r9678 16r5742 16r4F96 16r5743 16r502B 16r5744 16r5D19 16r5745 16r6DEA 16r5746 16r7DB8 16r5747 16r8F2A 16r5748 16r5F8B 16r5749 16r6144 16r574A 16r6817 16r574B 16rF961 16r574C 16r9686 16r574D 16r52D2 16r574E 16r808B 16r574F 16r51DC 16r5750 16r51CC 16r5751 16r695E 16r5752 16r7A1C 16r5753 16r7DBE 16r5754 16r83F1 16r5755 16r9675 16r5756 16r4FDA 16r5757 16r5229 16r5758 16r5398 16r5759 16r540F 16r575A 16r550E 16r575B 16r5C65 16r575C 16r60A7 16r575D 16r674E 16r575E 16r68A8 16r575F 16r6D6C 16r5760 16r7281 16r5761 16r72F8 16r5762 16r7406 16r5763 16r7483 16r5764 16rF962 16r5765 16r75E2 16r5766 16r7C6C 16r5767 16r7F79 16r5768 16r7FB8 16r5769 16r8389 16r576A 16r88CF 16r576B 16r88E1 16r576C 16r91CC 16r576D 16r91D0 16r576E 16r96E2 16r576F 16r9BC9 16r5770 16r541D 16r5771 16r6F7E 16r5772 16r71D0 16r5773 16r7498 16r5774 16r85FA 16r5775 16r8EAA 16r5776 16r96A3 16r5777 16r9C57 16r5778 16r9E9F 16r5779 16r6797 16r577A 16r6DCB 16r577B 16r7433 16r577C 16r81E8 16r577D 16r9716 16r577E 16r782C 16r5821 16r7ACB 16r5822 16r7B20 16r5823 16r7C92 16r5824 16r6469 16r5825 16r746A 16r5826 16r75F2 16r5827 16r78BC 16r5828 16r78E8 16r5829 16r99AC 16r582A 16r9B54 16r582B 16r9EBB 16r582C 16r5BDE 16r582D 16r5E55 16r582E 16r6F20 16r582F 16r819C 16r5830 16r83AB 16r5831 16r9088 16r5832 16r4E07 16r5833 16r534D 16r5834 16r5A29 16r5835 16r5DD2 16r5836 16r5F4E 16r5837 16r6162 16r5838 16r633D 16r5839 16r6669 16r583A 16r66FC 16r583B 16r6EFF 16r583C 16r6F2B 16r583D 16r7063 16r583E 16r779E 16r583F 16r842C 16r5840 16r8513 16r5841 16r883B 16r5842 16r8F13 16r5843 16r9945 16r5844 16r9C3B 16r5845 16r551C 16r5846 16r62B9 16r5847 16r672B 16r5848 16r6CAB 16r5849 16r8309 16r584A 16r896A 16r584B 16r977A 16r584C 16r4EA1 16r584D 16r5984 16r584E 16r5FD8 16r584F 16r5FD9 16r5850 16r671B 16r5851 16r7DB2 16r5852 16r7F54 16r5853 16r8292 16r5854 16r832B 16r5855 16r83BD 16r5856 16r8F1E 16r5857 16r9099 16r5858 16r57CB 16r5859 16r59B9 16r585A 16r5A92 16r585B 16r5BD0 16r585C 16r6627 16r585D 16r679A 16r585E 16r6885 16r585F 16r6BCF 16r5860 16r7164 16r5861 16r7F75 16r5862 16r8CB7 16r5863 16r8CE3 16r5864 16r9081 16r5865 16r9B45 16r5866 16r8108 16r5867 16r8C8A 16r5868 16r964C 16r5869 16r9A40 16r586A 16r9EA5 16r586B 16r5B5F 16r586C 16r6C13 16r586D 16r731B 16r586E 16r76F2 16r586F 16r76DF 16r5870 16r840C 16r5871 16r51AA 16r5872 16r8993 16r5873 16r514D 16r5874 16r5195 16r5875 16r52C9 16r5876 16r68C9 16r5877 16r6C94 16r5878 16r7704 16r5879 16r7720 16r587A 16r7DBF 16r587B 16r7DEC 16r587C 16r9762 16r587D 16r9EB5 16r587E 16r6EC5 16r5921 16r8511 16r5922 16r51A5 16r5923 16r540D 16r5924 16r547D 16r5925 16r660E 16r5926 16r669D 16r5927 16r6927 16r5928 16r6E9F 16r5929 16r76BF 16r592A 16r7791 16r592B 16r8317 16r592C 16r84C2 16r592D 16r879F 16r592E 16r9169 16r592F 16r9298 16r5930 16r9CF4 16r5931 16r8882 16r5932 16r4FAE 16r5933 16r5192 16r5934 16r52DF 16r5935 16r59C6 16r5936 16r5E3D 16r5937 16r6155 16r5938 16r6478 16r5939 16r6479 16r593A 16r66AE 16r593B 16r67D0 16r593C 16r6A21 16r593D 16r6BCD 16r593E 16r6BDB 16r593F 16r725F 16r5940 16r7261 16r5941 16r7441 16r5942 16r7738 16r5943 16r77DB 16r5944 16r8017 16r5945 16r82BC 16r5946 16r8305 16r5947 16r8B00 16r5948 16r8B28 16r5949 16r8C8C 16r594A 16r6728 16r594B 16r6C90 16r594C 16r7267 16r594D 16r76EE 16r594E 16r7766 16r594F 16r7A46 16r5950 16r9DA9 16r5951 16r6B7F 16r5952 16r6C92 16r5953 16r5922 16r5954 16r6726 16r5955 16r8499 16r5956 16r536F 16r5957 16r5893 16r5958 16r5999 16r5959 16r5EDF 16r595A 16r63CF 16r595B 16r6634 16r595C 16r6773 16r595D 16r6E3A 16r595E 16r732B 16r595F 16r7AD7 16r5960 16r82D7 16r5961 16r9328 16r5962 16r52D9 16r5963 16r5DEB 16r5964 16r61AE 16r5965 16r61CB 16r5966 16r620A 16r5967 16r62C7 16r5968 16r64AB 16r5969 16r65E0 16r596A 16r6959 16r596B 16r6B66 16r596C 16r6BCB 16r596D 16r7121 16r596E 16r73F7 16r596F 16r755D 16r5970 16r7E46 16r5971 16r821E 16r5972 16r8302 16r5973 16r856A 16r5974 16r8AA3 16r5975 16r8CBF 16r5976 16r9727 16r5977 16r9D61 16r5978 16r58A8 16r5979 16r9ED8 16r597A 16r5011 16r597B 16r520E 16r597C 16r543B 16r597D 16r554F 16r597E 16r6587 16r5A21 16r6C76 16r5A22 16r7D0A 16r5A23 16r7D0B 16r5A24 16r805E 16r5A25 16r868A 16r5A26 16r9580 16r5A27 16r96EF 16r5A28 16r52FF 16r5A29 16r6C95 16r5A2A 16r7269 16r5A2B 16r5473 16r5A2C 16r5A9A 16r5A2D 16r5C3E 16r5A2E 16r5D4B 16r5A2F 16r5F4C 16r5A30 16r5FAE 16r5A31 16r672A 16r5A32 16r68B6 16r5A33 16r6963 16r5A34 16r6E3C 16r5A35 16r6E44 16r5A36 16r7709 16r5A37 16r7C73 16r5A38 16r7F8E 16r5A39 16r8587 16r5A3A 16r8B0E 16r5A3B 16r8FF7 16r5A3C 16r9761 16r5A3D 16r9EF4 16r5A3E 16r5CB7 16r5A3F 16r60B6 16r5A40 16r610D 16r5A41 16r61AB 16r5A42 16r654F 16r5A43 16r65FB 16r5A44 16r65FC 16r5A45 16r6C11 16r5A46 16r6CEF 16r5A47 16r739F 16r5A48 16r73C9 16r5A49 16r7DE1 16r5A4A 16r9594 16r5A4B 16r5BC6 16r5A4C 16r871C 16r5A4D 16r8B10 16r5A4E 16r525D 16r5A4F 16r535A 16r5A50 16r62CD 16r5A51 16r640F 16r5A52 16r64B2 16r5A53 16r6734 16r5A54 16r6A38 16r5A55 16r6CCA 16r5A56 16r73C0 16r5A57 16r749E 16r5A58 16r7B94 16r5A59 16r7C95 16r5A5A 16r7E1B 16r5A5B 16r818A 16r5A5C 16r8236 16r5A5D 16r8584 16r5A5E 16r8FEB 16r5A5F 16r96F9 16r5A60 16r99C1 16r5A61 16r4F34 16r5A62 16r534A 16r5A63 16r53CD 16r5A64 16r53DB 16r5A65 16r62CC 16r5A66 16r642C 16r5A67 16r6500 16r5A68 16r6591 16r5A69 16r69C3 16r5A6A 16r6CEE 16r5A6B 16r6F58 16r5A6C 16r73ED 16r5A6D 16r7554 16r5A6E 16r7622 16r5A6F 16r76E4 16r5A70 16r76FC 16r5A71 16r78D0 16r5A72 16r78FB 16r5A73 16r792C 16r5A74 16r7D46 16r5A75 16r822C 16r5A76 16r87E0 16r5A77 16r8FD4 16r5A78 16r9812 16r5A79 16r98EF 16r5A7A 16r52C3 16r5A7B 16r62D4 16r5A7C 16r64A5 16r5A7D 16r6E24 16r5A7E 16r6F51 16r5B21 16r767C 16r5B22 16r8DCB 16r5B23 16r91B1 16r5B24 16r9262 16r5B25 16r9AEE 16r5B26 16r9B43 16r5B27 16r5023 16r5B28 16r508D 16r5B29 16r574A 16r5B2A 16r59A8 16r5B2B 16r5C28 16r5B2C 16r5E47 16r5B2D 16r5F77 16r5B2E 16r623F 16r5B2F 16r653E 16r5B30 16r65B9 16r5B31 16r65C1 16r5B32 16r6609 16r5B33 16r678B 16r5B34 16r699C 16r5B35 16r6EC2 16r5B36 16r78C5 16r5B37 16r7D21 16r5B38 16r80AA 16r5B39 16r8180 16r5B3A 16r822B 16r5B3B 16r82B3 16r5B3C 16r84A1 16r5B3D 16r868C 16r5B3E 16r8A2A 16r5B3F 16r8B17 16r5B40 16r90A6 16r5B41 16r9632 16r5B42 16r9F90 16r5B43 16r500D 16r5B44 16r4FF3 16r5B45 16rF963 16r5B46 16r57F9 16r5B47 16r5F98 16r5B48 16r62DC 16r5B49 16r6392 16r5B4A 16r676F 16r5B4B 16r6E43 16r5B4C 16r7119 16r5B4D 16r76C3 16r5B4E 16r80CC 16r5B4F 16r80DA 16r5B50 16r88F4 16r5B51 16r88F5 16r5B52 16r8919 16r5B53 16r8CE0 16r5B54 16r8F29 16r5B55 16r914D 16r5B56 16r966A 16r5B57 16r4F2F 16r5B58 16r4F70 16r5B59 16r5E1B 16r5B5A 16r67CF 16r5B5B 16r6822 16r5B5C 16r767D 16r5B5D 16r767E 16r5B5E 16r9B44 16r5B5F 16r5E61 16r5B60 16r6A0A 16r5B61 16r7169 16r5B62 16r71D4 16r5B63 16r756A 16r5B64 16rF964 16r5B65 16r7E41 16r5B66 16r8543 16r5B67 16r85E9 16r5B68 16r98DC 16r5B69 16r4F10 16r5B6A 16r7B4F 16r5B6B 16r7F70 16r5B6C 16r95A5 16r5B6D 16r51E1 16r5B6E 16r5E06 16r5B6F 16r68B5 16r5B70 16r6C3E 16r5B71 16r6C4E 16r5B72 16r6CDB 16r5B73 16r72AF 16r5B74 16r7BC4 16r5B75 16r8303 16r5B76 16r6CD5 16r5B77 16r743A 16r5B78 16r50FB 16r5B79 16r5288 16r5B7A 16r58C1 16r5B7B 16r64D8 16r5B7C 16r6A97 16r5B7D 16r74A7 16r5B7E 16r7656 16r5C21 16r78A7 16r5C22 16r8617 16r5C23 16r95E2 16r5C24 16r9739 16r5C25 16rF965 16r5C26 16r535E 16r5C27 16r5F01 16r5C28 16r8B8A 16r5C29 16r8FA8 16r5C2A 16r8FAF 16r5C2B 16r908A 16r5C2C 16r5225 16r5C2D 16r77A5 16r5C2E 16r9C49 16r5C2F 16r9F08 16r5C30 16r4E19 16r5C31 16r5002 16r5C32 16r5175 16r5C33 16r5C5B 16r5C34 16r5E77 16r5C35 16r661E 16r5C36 16r663A 16r5C37 16r67C4 16r5C38 16r68C5 16r5C39 16r70B3 16r5C3A 16r7501 16r5C3B 16r75C5 16r5C3C 16r79C9 16r5C3D 16r7ADD 16r5C3E 16r8F27 16r5C3F 16r9920 16r5C40 16r9A08 16r5C41 16r4FDD 16r5C42 16r5821 16r5C43 16r5831 16r5C44 16r5BF6 16r5C45 16r666E 16r5C46 16r6B65 16r5C47 16r6D11 16r5C48 16r6E7A 16r5C49 16r6F7D 16r5C4A 16r73E4 16r5C4B 16r752B 16r5C4C 16r83E9 16r5C4D 16r88DC 16r5C4E 16r8913 16r5C4F 16r8B5C 16r5C50 16r8F14 16r5C51 16r4F0F 16r5C52 16r50D5 16r5C53 16r5310 16r5C54 16r535C 16r5C55 16r5B93 16r5C56 16r5FA9 16r5C57 16r670D 16r5C58 16r798F 16r5C59 16r8179 16r5C5A 16r832F 16r5C5B 16r8514 16r5C5C 16r8907 16r5C5D 16r8986 16r5C5E 16r8F39 16r5C5F 16r8F3B 16r5C60 16r99A5 16r5C61 16r9C12 16r5C62 16r672C 16r5C63 16r4E76 16r5C64 16r4FF8 16r5C65 16r5949 16r5C66 16r5C01 16r5C67 16r5CEF 16r5C68 16r5CF0 16r5C69 16r6367 16r5C6A 16r68D2 16r5C6B 16r70FD 16r5C6C 16r71A2 16r5C6D 16r742B 16r5C6E 16r7E2B 16r5C6F 16r84EC 16r5C70 16r8702 16r5C71 16r9022 16r5C72 16r92D2 16r5C73 16r9CF3 16r5C74 16r4E0D 16r5C75 16r4ED8 16r5C76 16r4FEF 16r5C77 16r5085 16r5C78 16r5256 16r5C79 16r526F 16r5C7A 16r5426 16r5C7B 16r5490 16r5C7C 16r57E0 16r5C7D 16r592B 16r5C7E 16r5A66 16r5D21 16r5B5A 16r5D22 16r5B75 16r5D23 16r5BCC 16r5D24 16r5E9C 16r5D25 16rF966 16r5D26 16r6276 16r5D27 16r6577 16r5D28 16r65A7 16r5D29 16r6D6E 16r5D2A 16r6EA5 16r5D2B 16r7236 16r5D2C 16r7B26 16r5D2D 16r7C3F 16r5D2E 16r7F36 16r5D2F 16r8150 16r5D30 16r8151 16r5D31 16r819A 16r5D32 16r8240 16r5D33 16r8299 16r5D34 16r83A9 16r5D35 16r8A03 16r5D36 16r8CA0 16r5D37 16r8CE6 16r5D38 16r8CFB 16r5D39 16r8D74 16r5D3A 16r8DBA 16r5D3B 16r90E8 16r5D3C 16r91DC 16r5D3D 16r961C 16r5D3E 16r9644 16r5D3F 16r99D9 16r5D40 16r9CE7 16r5D41 16r5317 16r5D42 16r5206 16r5D43 16r5429 16r5D44 16r5674 16r5D45 16r58B3 16r5D46 16r5954 16r5D47 16r596E 16r5D48 16r5FFF 16r5D49 16r61A4 16r5D4A 16r626E 16r5D4B 16r6610 16r5D4C 16r6C7E 16r5D4D 16r711A 16r5D4E 16r76C6 16r5D4F 16r7C89 16r5D50 16r7CDE 16r5D51 16r7D1B 16r5D52 16r82AC 16r5D53 16r8CC1 16r5D54 16r96F0 16r5D55 16rF967 16r5D56 16r4F5B 16r5D57 16r5F17 16r5D58 16r5F7F 16r5D59 16r62C2 16r5D5A 16r5D29 16r5D5B 16r670B 16r5D5C 16r68DA 16r5D5D 16r787C 16r5D5E 16r7E43 16r5D5F 16r9D6C 16r5D60 16r4E15 16r5D61 16r5099 16r5D62 16r5315 16r5D63 16r532A 16r5D64 16r5351 16r5D65 16r5983 16r5D66 16r5A62 16r5D67 16r5E87 16r5D68 16r60B2 16r5D69 16r618A 16r5D6A 16r6249 16r5D6B 16r6279 16r5D6C 16r6590 16r5D6D 16r6787 16r5D6E 16r69A7 16r5D6F 16r6BD4 16r5D70 16r6BD6 16r5D71 16r6BD7 16r5D72 16r6BD8 16r5D73 16r6CB8 16r5D74 16rF968 16r5D75 16r7435 16r5D76 16r75FA 16r5D77 16r7812 16r5D78 16r7891 16r5D79 16r79D5 16r5D7A 16r79D8 16r5D7B 16r7C83 16r5D7C 16r7DCB 16r5D7D 16r7FE1 16r5D7E 16r80A5 16r5E21 16r813E 16r5E22 16r81C2 16r5E23 16r83F2 16r5E24 16r871A 16r5E25 16r88E8 16r5E26 16r8AB9 16r5E27 16r8B6C 16r5E28 16r8CBB 16r5E29 16r9119 16r5E2A 16r975E 16r5E2B 16r98DB 16r5E2C 16r9F3B 16r5E2D 16r56AC 16r5E2E 16r5B2A 16r5E2F 16r5F6C 16r5E30 16r658C 16r5E31 16r6AB3 16r5E32 16r6BAF 16r5E33 16r6D5C 16r5E34 16r6FF1 16r5E35 16r7015 16r5E36 16r725D 16r5E37 16r73AD 16r5E38 16r8CA7 16r5E39 16r8CD3 16r5E3A 16r983B 16r5E3B 16r6191 16r5E3C 16r6C37 16r5E3D 16r8058 16r5E3E 16r9A01 16r5E3F 16r4E4D 16r5E40 16r4E8B 16r5E41 16r4E9B 16r5E42 16r4ED5 16r5E43 16r4F3A 16r5E44 16r4F3C 16r5E45 16r4F7F 16r5E46 16r4FDF 16r5E47 16r50FF 16r5E48 16r53F2 16r5E49 16r53F8 16r5E4A 16r5506 16r5E4B 16r55E3 16r5E4C 16r56DB 16r5E4D 16r58EB 16r5E4E 16r5962 16r5E4F 16r5A11 16r5E50 16r5BEB 16r5E51 16r5BFA 16r5E52 16r5C04 16r5E53 16r5DF3 16r5E54 16r5E2B 16r5E55 16r5F99 16r5E56 16r601D 16r5E57 16r6368 16r5E58 16r659C 16r5E59 16r65AF 16r5E5A 16r67F6 16r5E5B 16r67FB 16r5E5C 16r68AD 16r5E5D 16r6B7B 16r5E5E 16r6C99 16r5E5F 16r6CD7 16r5E60 16r6E23 16r5E61 16r7009 16r5E62 16r7345 16r5E63 16r7802 16r5E64 16r793E 16r5E65 16r7940 16r5E66 16r7960 16r5E67 16r79C1 16r5E68 16r7BE9 16r5E69 16r7D17 16r5E6A 16r7D72 16r5E6B 16r8086 16r5E6C 16r820D 16r5E6D 16r838E 16r5E6E 16r84D1 16r5E6F 16r86C7 16r5E70 16r88DF 16r5E71 16r8A50 16r5E72 16r8A5E 16r5E73 16r8B1D 16r5E74 16r8CDC 16r5E75 16r8D66 16r5E76 16r8FAD 16r5E77 16r90AA 16r5E78 16r98FC 16r5E79 16r99DF 16r5E7A 16r9E9D 16r5E7B 16r524A 16r5E7C 16rF969 16r5E7D 16r6714 16r5E7E 16rF96A 16r5F21 16r5098 16r5F22 16r522A 16r5F23 16r5C71 16r5F24 16r6563 16r5F25 16r6C55 16r5F26 16r73CA 16r5F27 16r7523 16r5F28 16r759D 16r5F29 16r7B97 16r5F2A 16r849C 16r5F2B 16r9178 16r5F2C 16r9730 16r5F2D 16r4E77 16r5F2E 16r6492 16r5F2F 16r6BBA 16r5F30 16r715E 16r5F31 16r85A9 16r5F32 16r4E09 16r5F33 16rF96B 16r5F34 16r6749 16r5F35 16r68EE 16r5F36 16r6E17 16r5F37 16r829F 16r5F38 16r8518 16r5F39 16r886B 16r5F3A 16r63F7 16r5F3B 16r6F81 16r5F3C 16r9212 16r5F3D 16r98AF 16r5F3E 16r4E0A 16r5F3F 16r50B7 16r5F40 16r50CF 16r5F41 16r511F 16r5F42 16r5546 16r5F43 16r55AA 16r5F44 16r5617 16r5F45 16r5B40 16r5F46 16r5C19 16r5F47 16r5CE0 16r5F48 16r5E38 16r5F49 16r5E8A 16r5F4A 16r5EA0 16r5F4B 16r5EC2 16r5F4C 16r60F3 16r5F4D 16r6851 16r5F4E 16r6A61 16r5F4F 16r6E58 16r5F50 16r723D 16r5F51 16r7240 16r5F52 16r72C0 16r5F53 16r76F8 16r5F54 16r7965 16r5F55 16r7BB1 16r5F56 16r7FD4 16r5F57 16r88F3 16r5F58 16r89F4 16r5F59 16r8A73 16r5F5A 16r8C61 16r5F5B 16r8CDE 16r5F5C 16r971C 16r5F5D 16r585E 16r5F5E 16r74BD 16r5F5F 16r8CFD 16r5F60 16r55C7 16r5F61 16rF96C 16r5F62 16r7A61 16r5F63 16r7D22 16r5F64 16r8272 16r5F65 16r7272 16r5F66 16r751F 16r5F67 16r7525 16r5F68 16rF96D 16r5F69 16r7B19 16r5F6A 16r5885 16r5F6B 16r58FB 16r5F6C 16r5DBC 16r5F6D 16r5E8F 16r5F6E 16r5EB6 16r5F6F 16r5F90 16r5F70 16r6055 16r5F71 16r6292 16r5F72 16r637F 16r5F73 16r654D 16r5F74 16r6691 16r5F75 16r66D9 16r5F76 16r66F8 16r5F77 16r6816 16r5F78 16r68F2 16r5F79 16r7280 16r5F7A 16r745E 16r5F7B 16r7B6E 16r5F7C 16r7D6E 16r5F7D 16r7DD6 16r5F7E 16r7F72 16r6021 16r80E5 16r6022 16r8212 16r6023 16r85AF 16r6024 16r897F 16r6025 16r8A93 16r6026 16r901D 16r6027 16r92E4 16r6028 16r9ECD 16r6029 16r9F20 16r602A 16r5915 16r602B 16r596D 16r602C 16r5E2D 16r602D 16r60DC 16r602E 16r6614 16r602F 16r6673 16r6030 16r6790 16r6031 16r6C50 16r6032 16r6DC5 16r6033 16r6F5F 16r6034 16r77F3 16r6035 16r78A9 16r6036 16r84C6 16r6037 16r91CB 16r6038 16r932B 16r6039 16r4ED9 16r603A 16r50CA 16r603B 16r5148 16r603C 16r5584 16r603D 16r5B0B 16r603E 16r5BA3 16r603F 16r6247 16r6040 16r657E 16r6041 16r65CB 16r6042 16r6E32 16r6043 16r717D 16r6044 16r7401 16r6045 16r7444 16r6046 16r7487 16r6047 16r74BF 16r6048 16r766C 16r6049 16r79AA 16r604A 16r7DDA 16r604B 16r7E55 16r604C 16r7FA8 16r604D 16r817A 16r604E 16r81B3 16r604F 16r8239 16r6050 16r861A 16r6051 16r87EC 16r6052 16r8A75 16r6053 16r8DE3 16r6054 16r9078 16r6055 16r9291 16r6056 16r9425 16r6057 16r994D 16r6058 16r9BAE 16r6059 16r5368 16r605A 16r5C51 16r605B 16r6954 16r605C 16r6CC4 16r605D 16r6D29 16r605E 16r6E2B 16r605F 16r820C 16r6060 16r859B 16r6061 16r893B 16r6062 16r8A2D 16r6063 16r8AAA 16r6064 16r96EA 16r6065 16r9F67 16r6066 16r5261 16r6067 16r66B9 16r6068 16r6BB2 16r6069 16r7E96 16r606A 16r87FE 16r606B 16r8D0D 16r606C 16r9583 16r606D 16r965D 16r606E 16r651D 16r606F 16r6D89 16r6070 16r71EE 16r6071 16rF96E 16r6072 16r57CE 16r6073 16r59D3 16r6074 16r5BAC 16r6075 16r6027 16r6076 16r60FA 16r6077 16r6210 16r6078 16r661F 16r6079 16r665F 16r607A 16r7329 16r607B 16r73F9 16r607C 16r76DB 16r607D 16r7701 16r607E 16r7B6C 16r6121 16r8056 16r6122 16r8072 16r6123 16r8165 16r6124 16r8AA0 16r6125 16r9192 16r6126 16r4E16 16r6127 16r52E2 16r6128 16r6B72 16r6129 16r6D17 16r612A 16r7A05 16r612B 16r7B39 16r612C 16r7D30 16r612D 16rF96F 16r612E 16r8CB0 16r612F 16r53EC 16r6130 16r562F 16r6131 16r5851 16r6132 16r5BB5 16r6133 16r5C0F 16r6134 16r5C11 16r6135 16r5DE2 16r6136 16r6240 16r6137 16r6383 16r6138 16r6414 16r6139 16r662D 16r613A 16r68B3 16r613B 16r6CBC 16r613C 16r6D88 16r613D 16r6EAF 16r613E 16r701F 16r613F 16r70A4 16r6140 16r71D2 16r6141 16r7526 16r6142 16r758F 16r6143 16r758E 16r6144 16r7619 16r6145 16r7B11 16r6146 16r7BE0 16r6147 16r7C2B 16r6148 16r7D20 16r6149 16r7D39 16r614A 16r852C 16r614B 16r856D 16r614C 16r8607 16r614D 16r8A34 16r614E 16r900D 16r614F 16r9061 16r6150 16r90B5 16r6151 16r92B7 16r6152 16r97F6 16r6153 16r9A37 16r6154 16r4FD7 16r6155 16r5C6C 16r6156 16r675F 16r6157 16r6D91 16r6158 16r7C9F 16r6159 16r7E8C 16r615A 16r8B16 16r615B 16r8D16 16r615C 16r901F 16r615D 16r5B6B 16r615E 16r5DFD 16r615F 16r640D 16r6160 16r84C0 16r6161 16r905C 16r6162 16r98E1 16r6163 16r7387 16r6164 16r5B8B 16r6165 16r609A 16r6166 16r677E 16r6167 16r6DDE 16r6168 16r8A1F 16r6169 16r8AA6 16r616A 16r9001 16r616B 16r980C 16r616C 16r5237 16r616D 16rF970 16r616E 16r7051 16r616F 16r788E 16r6170 16r9396 16r6171 16r8870 16r6172 16r91D7 16r6173 16r4FEE 16r6174 16r53D7 16r6175 16r55FD 16r6176 16r56DA 16r6177 16r5782 16r6178 16r58FD 16r6179 16r5AC2 16r617A 16r5B88 16r617B 16r5CAB 16r617C 16r5CC0 16r617D 16r5E25 16r617E 16r6101 16r6221 16r620D 16r6222 16r624B 16r6223 16r6388 16r6224 16r641C 16r6225 16r6536 16r6226 16r6578 16r6227 16r6A39 16r6228 16r6B8A 16r6229 16r6C34 16r622A 16r6D19 16r622B 16r6F31 16r622C 16r71E7 16r622D 16r72E9 16r622E 16r7378 16r622F 16r7407 16r6230 16r74B2 16r6231 16r7626 16r6232 16r7761 16r6233 16r79C0 16r6234 16r7A57 16r6235 16r7AEA 16r6236 16r7CB9 16r6237 16r7D8F 16r6238 16r7DAC 16r6239 16r7E61 16r623A 16r7F9E 16r623B 16r8129 16r623C 16r8331 16r623D 16r8490 16r623E 16r84DA 16r623F 16r85EA 16r6240 16r8896 16r6241 16r8AB0 16r6242 16r8B90 16r6243 16r8F38 16r6244 16r9042 16r6245 16r9083 16r6246 16r916C 16r6247 16r9296 16r6248 16r92B9 16r6249 16r968B 16r624A 16r96A7 16r624B 16r96A8 16r624C 16r96D6 16r624D 16r9700 16r624E 16r9808 16r624F 16r9996 16r6250 16r9AD3 16r6251 16r9B1A 16r6252 16r53D4 16r6253 16r587E 16r6254 16r5919 16r6255 16r5B70 16r6256 16r5BBF 16r6257 16r6DD1 16r6258 16r6F5A 16r6259 16r719F 16r625A 16r7421 16r625B 16r74B9 16r625C 16r8085 16r625D 16r83FD 16r625E 16r5DE1 16r625F 16r5F87 16r6260 16r5FAA 16r6261 16r6042 16r6262 16r65EC 16r6263 16r6812 16r6264 16r696F 16r6265 16r6A53 16r6266 16r6B89 16r6267 16r6D35 16r6268 16r6DF3 16r6269 16r73E3 16r626A 16r76FE 16r626B 16r77AC 16r626C 16r7B4D 16r626D 16r7D14 16r626E 16r8123 16r626F 16r821C 16r6270 16r8340 16r6271 16r84F4 16r6272 16r8563 16r6273 16r8A62 16r6274 16r8AC4 16r6275 16r9187 16r6276 16r931E 16r6277 16r9806 16r6278 16r99B4 16r6279 16r620C 16r627A 16r8853 16r627B 16r8FF0 16r627C 16r9265 16r627D 16r5D07 16r627E 16r5D27 16r6321 16r5D69 16r6322 16r745F 16r6323 16r819D 16r6324 16r8768 16r6325 16r6FD5 16r6326 16r62FE 16r6327 16r7FD2 16r6328 16r8936 16r6329 16r8972 16r632A 16r4E1E 16r632B 16r4E58 16r632C 16r50E7 16r632D 16r52DD 16r632E 16r5347 16r632F 16r627F 16r6330 16r6607 16r6331 16r7E69 16r6332 16r8805 16r6333 16r965E 16r6334 16r4F8D 16r6335 16r5319 16r6336 16r5636 16r6337 16r59CB 16r6338 16r5AA4 16r6339 16r5C38 16r633A 16r5C4E 16r633B 16r5C4D 16r633C 16r5E02 16r633D 16r5F11 16r633E 16r6043 16r633F 16r65BD 16r6340 16r662F 16r6341 16r6642 16r6342 16r67BE 16r6343 16r67F4 16r6344 16r731C 16r6345 16r77E2 16r6346 16r793A 16r6347 16r7FC5 16r6348 16r8494 16r6349 16r84CD 16r634A 16r8996 16r634B 16r8A66 16r634C 16r8A69 16r634D 16r8AE1 16r634E 16r8C55 16r634F 16r8C7A 16r6350 16r57F4 16r6351 16r5BD4 16r6352 16r5F0F 16r6353 16r606F 16r6354 16r62ED 16r6355 16r690D 16r6356 16r6B96 16r6357 16r6E5C 16r6358 16r7184 16r6359 16r7BD2 16r635A 16r8755 16r635B 16r8B58 16r635C 16r8EFE 16r635D 16r98DF 16r635E 16r98FE 16r635F 16r4F38 16r6360 16r4F81 16r6361 16r4FE1 16r6362 16r547B 16r6363 16r5A20 16r6364 16r5BB8 16r6365 16r613C 16r6366 16r65B0 16r6367 16r6668 16r6368 16r71FC 16r6369 16r7533 16r636A 16r795E 16r636B 16r7D33 16r636C 16r814E 16r636D 16r81E3 16r636E 16r8398 16r636F 16r85AA 16r6370 16r85CE 16r6371 16r8703 16r6372 16r8A0A 16r6373 16r8EAB 16r6374 16r8F9B 16r6375 16rF971 16r6376 16r8FC5 16r6377 16r5931 16r6378 16r5BA4 16r6379 16r5BE6 16r637A 16r6089 16r637B 16r5BE9 16r637C 16r5C0B 16r637D 16r5FC3 16r637E 16r6C81 16r6421 16rF972 16r6422 16r6DF1 16r6423 16r700B 16r6424 16r751A 16r6425 16r82AF 16r6426 16r8AF6 16r6427 16r4EC0 16r6428 16r5341 16r6429 16rF973 16r642A 16r96D9 16r642B 16r6C0F 16r642C 16r4E9E 16r642D 16r4FC4 16r642E 16r5152 16r642F 16r555E 16r6430 16r5A25 16r6431 16r5CE8 16r6432 16r6211 16r6433 16r7259 16r6434 16r82BD 16r6435 16r83AA 16r6436 16r86FE 16r6437 16r8859 16r6438 16r8A1D 16r6439 16r963F 16r643A 16r96C5 16r643B 16r9913 16r643C 16r9D09 16r643D 16r9D5D 16r643E 16r580A 16r643F 16r5CB3 16r6440 16r5DBD 16r6441 16r5E44 16r6442 16r60E1 16r6443 16r6115 16r6444 16r63E1 16r6445 16r6A02 16r6446 16r6E25 16r6447 16r9102 16r6448 16r9354 16r6449 16r984E 16r644A 16r9C10 16r644B 16r9F77 16r644C 16r5B89 16r644D 16r5CB8 16r644E 16r6309 16r644F 16r664F 16r6450 16r6848 16r6451 16r773C 16r6452 16r96C1 16r6453 16r978D 16r6454 16r9854 16r6455 16r9B9F 16r6456 16r65A1 16r6457 16r8B01 16r6458 16r8ECB 16r6459 16r95BC 16r645A 16r5535 16r645B 16r5CA9 16r645C 16r5DD6 16r645D 16r5EB5 16r645E 16r6697 16r645F 16r764C 16r6460 16r83F4 16r6461 16r95C7 16r6462 16r58D3 16r6463 16r62BC 16r6464 16r72CE 16r6465 16r9D28 16r6466 16r4EF0 16r6467 16r592E 16r6468 16r600F 16r6469 16r663B 16r646A 16r6B83 16r646B 16r79E7 16r646C 16r9D26 16r646D 16r5393 16r646E 16r54C0 16r646F 16r57C3 16r6470 16r5D16 16r6471 16r611B 16r6472 16r66D6 16r6473 16r6DAF 16r6474 16r788D 16r6475 16r827E 16r6476 16r9698 16r6477 16r9744 16r6478 16r5384 16r6479 16r627C 16r647A 16r6396 16r647B 16r6DB2 16r647C 16r7E0A 16r647D 16r814B 16r647E 16r984D 16r6521 16r6AFB 16r6522 16r7F4C 16r6523 16r9DAF 16r6524 16r9E1A 16r6525 16r4E5F 16r6526 16r503B 16r6527 16r51B6 16r6528 16r591C 16r6529 16r60F9 16r652A 16r63F6 16r652B 16r6930 16r652C 16r723A 16r652D 16r8036 16r652E 16rF974 16r652F 16r91CE 16r6530 16r5F31 16r6531 16rF975 16r6532 16rF976 16r6533 16r7D04 16r6534 16r82E5 16r6535 16r846F 16r6536 16r84BB 16r6537 16r85E5 16r6538 16r8E8D 16r6539 16rF977 16r653A 16r4F6F 16r653B 16rF978 16r653C 16rF979 16r653D 16r58E4 16r653E 16r5B43 16r653F 16r6059 16r6540 16r63DA 16r6541 16r6518 16r6542 16r656D 16r6543 16r6698 16r6544 16rF97A 16r6545 16r694A 16r6546 16r6A23 16r6547 16r6D0B 16r6548 16r7001 16r6549 16r716C 16r654A 16r75D2 16r654B 16r760D 16r654C 16r79B3 16r654D 16r7A70 16r654E 16rF97B 16r654F 16r7F8A 16r6550 16rF97C 16r6551 16r8944 16r6552 16rF97D 16r6553 16r8B93 16r6554 16r91C0 16r6555 16r967D 16r6556 16rF97E 16r6557 16r990A 16r6558 16r5704 16r6559 16r5FA1 16r655A 16r65BC 16r655B 16r6F01 16r655C 16r7600 16r655D 16r79A6 16r655E 16r8A9E 16r655F 16r99AD 16r6560 16r9B5A 16r6561 16r9F6C 16r6562 16r5104 16r6563 16r61B6 16r6564 16r6291 16r6565 16r6A8D 16r6566 16r81C6 16r6567 16r5043 16r6568 16r5830 16r6569 16r5F66 16r656A 16r7109 16r656B 16r8A00 16r656C 16r8AFA 16r656D 16r5B7C 16r656E 16r8616 16r656F 16r4FFA 16r6570 16r513C 16r6571 16r56B4 16r6572 16r5944 16r6573 16r63A9 16r6574 16r6DF9 16r6575 16r5DAA 16r6576 16r696D 16r6577 16r5186 16r6578 16r4E88 16r6579 16r4F59 16r657A 16rF97F 16r657B 16rF980 16r657C 16rF981 16r657D 16r5982 16r657E 16rF982 16r6621 16rF983 16r6622 16r6B5F 16r6623 16r6C5D 16r6624 16rF984 16r6625 16r74B5 16r6626 16r7916 16r6627 16rF985 16r6628 16r8207 16r6629 16r8245 16r662A 16r8339 16r662B 16r8F3F 16r662C 16r8F5D 16r662D 16rF986 16r662E 16r9918 16r662F 16rF987 16r6630 16rF988 16r6631 16rF989 16r6632 16r4EA6 16r6633 16rF98A 16r6634 16r57DF 16r6635 16r5F79 16r6636 16r6613 16r6637 16rF98B 16r6638 16rF98C 16r6639 16r75AB 16r663A 16r7E79 16r663B 16r8B6F 16r663C 16rF98D 16r663D 16r9006 16r663E 16r9A5B 16r663F 16r56A5 16r6640 16r5827 16r6641 16r59F8 16r6642 16r5A1F 16r6643 16r5BB4 16r6644 16rF98E 16r6645 16r5EF6 16r6646 16rF98F 16r6647 16rF990 16r6648 16r6350 16r6649 16r633B 16r664A 16rF991 16r664B 16r693D 16r664C 16r6C87 16r664D 16r6CBF 16r664E 16r6D8E 16r664F 16r6D93 16r6650 16r6DF5 16r6651 16r6F14 16r6652 16rF992 16r6653 16r70DF 16r6654 16r7136 16r6655 16r7159 16r6656 16rF993 16r6657 16r71C3 16r6658 16r71D5 16r6659 16rF994 16r665A 16r784F 16r665B 16r786F 16r665C 16rF995 16r665D 16r7B75 16r665E 16r7DE3 16r665F 16rF996 16r6660 16r7E2F 16r6661 16rF997 16r6662 16r884D 16r6663 16r8EDF 16r6664 16rF998 16r6665 16rF999 16r6666 16rF99A 16r6667 16r925B 16r6668 16rF99B 16r6669 16r9CF6 16r666A 16rF99C 16r666B 16rF99D 16r666C 16rF99E 16r666D 16r6085 16r666E 16r6D85 16r666F 16rF99F 16r6670 16r71B1 16r6671 16rF9A0 16r6672 16rF9A1 16r6673 16r95B1 16r6674 16r53AD 16r6675 16rF9A2 16r6676 16rF9A3 16r6677 16rF9A4 16r6678 16r67D3 16r6679 16rF9A5 16r667A 16r708E 16r667B 16r7130 16r667C 16r7430 16r667D 16r8276 16r667E 16r82D2 16r6721 16rF9A6 16r6722 16r95BB 16r6723 16r9AE5 16r6724 16r9E7D 16r6725 16r66C4 16r6726 16rF9A7 16r6727 16r71C1 16r6728 16r8449 16r6729 16rF9A8 16r672A 16rF9A9 16r672B 16r584B 16r672C 16rF9AA 16r672D 16rF9AB 16r672E 16r5DB8 16r672F 16r5F71 16r6730 16rF9AC 16r6731 16r6620 16r6732 16r668E 16r6733 16r6979 16r6734 16r69AE 16r6735 16r6C38 16r6736 16r6CF3 16r6737 16r6E36 16r6738 16r6F41 16r6739 16r6FDA 16r673A 16r701B 16r673B 16r702F 16r673C 16r7150 16r673D 16r71DF 16r673E 16r7370 16r673F 16rF9AD 16r6740 16r745B 16r6741 16rF9AE 16r6742 16r74D4 16r6743 16r76C8 16r6744 16r7A4E 16r6745 16r7E93 16r6746 16rF9AF 16r6747 16rF9B0 16r6748 16r82F1 16r6749 16r8A60 16r674A 16r8FCE 16r674B 16rF9B1 16r674C 16r9348 16r674D 16rF9B2 16r674E 16r9719 16r674F 16rF9B3 16r6750 16rF9B4 16r6751 16r4E42 16r6752 16r502A 16r6753 16rF9B5 16r6754 16r5208 16r6755 16r53E1 16r6756 16r66F3 16r6757 16r6C6D 16r6758 16r6FCA 16r6759 16r730A 16r675A 16r777F 16r675B 16r7A62 16r675C 16r82AE 16r675D 16r85DD 16r675E 16r8602 16r675F 16rF9B6 16r6760 16r88D4 16r6761 16r8A63 16r6762 16r8B7D 16r6763 16r8C6B 16r6764 16rF9B7 16r6765 16r92B3 16r6766 16rF9B8 16r6767 16r9713 16r6768 16r9810 16r6769 16r4E94 16r676A 16r4F0D 16r676B 16r4FC9 16r676C 16r50B2 16r676D 16r5348 16r676E 16r543E 16r676F 16r5433 16r6770 16r55DA 16r6771 16r5862 16r6772 16r58BA 16r6773 16r5967 16r6774 16r5A1B 16r6775 16r5BE4 16r6776 16r609F 16r6777 16rF9B9 16r6778 16r61CA 16r6779 16r6556 16r677A 16r65FF 16r677B 16r6664 16r677C 16r68A7 16r677D 16r6C5A 16r677E 16r6FB3 16r6821 16r70CF 16r6822 16r71AC 16r6823 16r7352 16r6824 16r7B7D 16r6825 16r8708 16r6826 16r8AA4 16r6827 16r9C32 16r6828 16r9F07 16r6829 16r5C4B 16r682A 16r6C83 16r682B 16r7344 16r682C 16r7389 16r682D 16r923A 16r682E 16r6EAB 16r682F 16r7465 16r6830 16r761F 16r6831 16r7A69 16r6832 16r7E15 16r6833 16r860A 16r6834 16r5140 16r6835 16r58C5 16r6836 16r64C1 16r6837 16r74EE 16r6838 16r7515 16r6839 16r7670 16r683A 16r7FC1 16r683B 16r9095 16r683C 16r96CD 16r683D 16r9954 16r683E 16r6E26 16r683F 16r74E6 16r6840 16r7AA9 16r6841 16r7AAA 16r6842 16r81E5 16r6843 16r86D9 16r6844 16r8778 16r6845 16r8A1B 16r6846 16r5A49 16r6847 16r5B8C 16r6848 16r5B9B 16r6849 16r68A1 16r684A 16r6900 16r684B 16r6D63 16r684C 16r73A9 16r684D 16r7413 16r684E 16r742C 16r684F 16r7897 16r6850 16r7DE9 16r6851 16r7FEB 16r6852 16r8118 16r6853 16r8155 16r6854 16r839E 16r6855 16r8C4C 16r6856 16r962E 16r6857 16r9811 16r6858 16r66F0 16r6859 16r5F80 16r685A 16r65FA 16r685B 16r6789 16r685C 16r6C6A 16r685D 16r738B 16r685E 16r502D 16r685F 16r5A03 16r6860 16r6B6A 16r6861 16r77EE 16r6862 16r5916 16r6863 16r5D6C 16r6864 16r5DCD 16r6865 16r7325 16r6866 16r754F 16r6867 16rF9BA 16r6868 16rF9BB 16r6869 16r50E5 16r686A 16r51F9 16r686B 16r582F 16r686C 16r592D 16r686D 16r5996 16r686E 16r59DA 16r686F 16r5BE5 16r6870 16rF9BC 16r6871 16rF9BD 16r6872 16r5DA2 16r6873 16r62D7 16r6874 16r6416 16r6875 16r6493 16r6876 16r64FE 16r6877 16rF9BE 16r6878 16r66DC 16r6879 16rF9BF 16r687A 16r6A48 16r687B 16rF9C0 16r687C 16r71FF 16r687D 16r7464 16r687E 16rF9C1 16r6921 16r7A88 16r6922 16r7AAF 16r6923 16r7E47 16r6924 16r7E5E 16r6925 16r8000 16r6926 16r8170 16r6927 16rF9C2 16r6928 16r87EF 16r6929 16r8981 16r692A 16r8B20 16r692B 16r9059 16r692C 16rF9C3 16r692D 16r9080 16r692E 16r9952 16r692F 16r617E 16r6930 16r6B32 16r6931 16r6D74 16r6932 16r7E1F 16r6933 16r8925 16r6934 16r8FB1 16r6935 16r4FD1 16r6936 16r50AD 16r6937 16r5197 16r6938 16r52C7 16r6939 16r57C7 16r693A 16r5889 16r693B 16r5BB9 16r693C 16r5EB8 16r693D 16r6142 16r693E 16r6995 16r693F 16r6D8C 16r6940 16r6E67 16r6941 16r6EB6 16r6942 16r7194 16r6943 16r7462 16r6944 16r7528 16r6945 16r752C 16r6946 16r8073 16r6947 16r8338 16r6948 16r84C9 16r6949 16r8E0A 16r694A 16r9394 16r694B 16r93DE 16r694C 16rF9C4 16r694D 16r4E8E 16r694E 16r4F51 16r694F 16r5076 16r6950 16r512A 16r6951 16r53C8 16r6952 16r53CB 16r6953 16r53F3 16r6954 16r5B87 16r6955 16r5BD3 16r6956 16r5C24 16r6957 16r611A 16r6958 16r6182 16r6959 16r65F4 16r695A 16r725B 16r695B 16r7397 16r695C 16r7440 16r695D 16r76C2 16r695E 16r7950 16r695F 16r7991 16r6960 16r79B9 16r6961 16r7D06 16r6962 16r7FBD 16r6963 16r828B 16r6964 16r85D5 16r6965 16r865E 16r6966 16r8FC2 16r6967 16r9047 16r6968 16r90F5 16r6969 16r91EA 16r696A 16r9685 16r696B 16r96E8 16r696C 16r96E9 16r696D 16r52D6 16r696E 16r5F67 16r696F 16r65ED 16r6970 16r6631 16r6971 16r682F 16r6972 16r715C 16r6973 16r7A36 16r6974 16r90C1 16r6975 16r980A 16r6976 16r4E91 16r6977 16rF9C5 16r6978 16r6A52 16r6979 16r6B9E 16r697A 16r6F90 16r697B 16r7189 16r697C 16r8018 16r697D 16r82B8 16r697E 16r8553 16r6A21 16r904B 16r6A22 16r9695 16r6A23 16r96F2 16r6A24 16r97FB 16r6A25 16r851A 16r6A26 16r9B31 16r6A27 16r4E90 16r6A28 16r718A 16r6A29 16r96C4 16r6A2A 16r5143 16r6A2B 16r539F 16r6A2C 16r54E1 16r6A2D 16r5713 16r6A2E 16r5712 16r6A2F 16r57A3 16r6A30 16r5A9B 16r6A31 16r5AC4 16r6A32 16r5BC3 16r6A33 16r6028 16r6A34 16r613F 16r6A35 16r63F4 16r6A36 16r6C85 16r6A37 16r6D39 16r6A38 16r6E72 16r6A39 16r6E90 16r6A3A 16r7230 16r6A3B 16r733F 16r6A3C 16r7457 16r6A3D 16r82D1 16r6A3E 16r8881 16r6A3F 16r8F45 16r6A40 16r9060 16r6A41 16rF9C6 16r6A42 16r9662 16r6A43 16r9858 16r6A44 16r9D1B 16r6A45 16r6708 16r6A46 16r8D8A 16r6A47 16r925E 16r6A48 16r4F4D 16r6A49 16r5049 16r6A4A 16r50DE 16r6A4B 16r5371 16r6A4C 16r570D 16r6A4D 16r59D4 16r6A4E 16r5A01 16r6A4F 16r5C09 16r6A50 16r6170 16r6A51 16r6690 16r6A52 16r6E2D 16r6A53 16r7232 16r6A54 16r744B 16r6A55 16r7DEF 16r6A56 16r80C3 16r6A57 16r840E 16r6A58 16r8466 16r6A59 16r853F 16r6A5A 16r875F 16r6A5B 16r885B 16r6A5C 16r8918 16r6A5D 16r8B02 16r6A5E 16r9055 16r6A5F 16r97CB 16r6A60 16r9B4F 16r6A61 16r4E73 16r6A62 16r4F91 16r6A63 16r5112 16r6A64 16r516A 16r6A65 16rF9C7 16r6A66 16r552F 16r6A67 16r55A9 16r6A68 16r5B7A 16r6A69 16r5BA5 16r6A6A 16r5E7C 16r6A6B 16r5E7D 16r6A6C 16r5EBE 16r6A6D 16r60A0 16r6A6E 16r60DF 16r6A6F 16r6108 16r6A70 16r6109 16r6A71 16r63C4 16r6A72 16r6538 16r6A73 16r6709 16r6A74 16rF9C8 16r6A75 16r67D4 16r6A76 16r67DA 16r6A77 16rF9C9 16r6A78 16r6961 16r6A79 16r6962 16r6A7A 16r6CB9 16r6A7B 16r6D27 16r6A7C 16rF9CA 16r6A7D 16r6E38 16r6A7E 16rF9CB 16r6B21 16r6FE1 16r6B22 16r7336 16r6B23 16r7337 16r6B24 16rF9CC 16r6B25 16r745C 16r6B26 16r7531 16r6B27 16rF9CD 16r6B28 16r7652 16r6B29 16rF9CE 16r6B2A 16rF9CF 16r6B2B 16r7DAD 16r6B2C 16r81FE 16r6B2D 16r8438 16r6B2E 16r88D5 16r6B2F 16r8A98 16r6B30 16r8ADB 16r6B31 16r8AED 16r6B32 16r8E30 16r6B33 16r8E42 16r6B34 16r904A 16r6B35 16r903E 16r6B36 16r907A 16r6B37 16r9149 16r6B38 16r91C9 16r6B39 16r936E 16r6B3A 16rF9D0 16r6B3B 16rF9D1 16r6B3C 16r5809 16r6B3D 16rF9D2 16r6B3E 16r6BD3 16r6B3F 16r8089 16r6B40 16r80B2 16r6B41 16rF9D3 16r6B42 16rF9D4 16r6B43 16r5141 16r6B44 16r596B 16r6B45 16r5C39 16r6B46 16rF9D5 16r6B47 16rF9D6 16r6B48 16r6F64 16r6B49 16r73A7 16r6B4A 16r80E4 16r6B4B 16r8D07 16r6B4C 16rF9D7 16r6B4D 16r9217 16r6B4E 16r958F 16r6B4F 16rF9D8 16r6B50 16rF9D9 16r6B51 16rF9DA 16r6B52 16rF9DB 16r6B53 16r807F 16r6B54 16r620E 16r6B55 16r701C 16r6B56 16r7D68 16r6B57 16r878D 16r6B58 16rF9DC 16r6B59 16r57A0 16r6B5A 16r6069 16r6B5B 16r6147 16r6B5C 16r6BB7 16r6B5D 16r8ABE 16r6B5E 16r9280 16r6B5F 16r96B1 16r6B60 16r4E59 16r6B61 16r541F 16r6B62 16r6DEB 16r6B63 16r852D 16r6B64 16r9670 16r6B65 16r97F3 16r6B66 16r98EE 16r6B67 16r63D6 16r6B68 16r6CE3 16r6B69 16r9091 16r6B6A 16r51DD 16r6B6B 16r61C9 16r6B6C 16r81BA 16r6B6D 16r9DF9 16r6B6E 16r4F9D 16r6B6F 16r501A 16r6B70 16r5100 16r6B71 16r5B9C 16r6B72 16r610F 16r6B73 16r61FF 16r6B74 16r64EC 16r6B75 16r6905 16r6B76 16r6BC5 16r6B77 16r7591 16r6B78 16r77E3 16r6B79 16r7FA9 16r6B7A 16r8264 16r6B7B 16r858F 16r6B7C 16r87FB 16r6B7D 16r8863 16r6B7E 16r8ABC 16r6C21 16r8B70 16r6C22 16r91AB 16r6C23 16r4E8C 16r6C24 16r4EE5 16r6C25 16r4F0A 16r6C26 16rF9DD 16r6C27 16rF9DE 16r6C28 16r5937 16r6C29 16r59E8 16r6C2A 16rF9DF 16r6C2B 16r5DF2 16r6C2C 16r5F1B 16r6C2D 16r5F5B 16r6C2E 16r6021 16r6C2F 16rF9E0 16r6C30 16rF9E1 16r6C31 16rF9E2 16r6C32 16rF9E3 16r6C33 16r723E 16r6C34 16r73E5 16r6C35 16rF9E4 16r6C36 16r7570 16r6C37 16r75CD 16r6C38 16rF9E5 16r6C39 16r79FB 16r6C3A 16rF9E6 16r6C3B 16r800C 16r6C3C 16r8033 16r6C3D 16r8084 16r6C3E 16r82E1 16r6C3F 16r8351 16r6C40 16rF9E7 16r6C41 16rF9E8 16r6C42 16r8CBD 16r6C43 16r8CB3 16r6C44 16r9087 16r6C45 16rF9E9 16r6C46 16rF9EA 16r6C47 16r98F4 16r6C48 16r990C 16r6C49 16rF9EB 16r6C4A 16rF9EC 16r6C4B 16r7037 16r6C4C 16r76CA 16r6C4D 16r7FCA 16r6C4E 16r7FCC 16r6C4F 16r7FFC 16r6C50 16r8B1A 16r6C51 16r4EBA 16r6C52 16r4EC1 16r6C53 16r5203 16r6C54 16r5370 16r6C55 16rF9ED 16r6C56 16r54BD 16r6C57 16r56E0 16r6C58 16r59FB 16r6C59 16r5BC5 16r6C5A 16r5F15 16r6C5B 16r5FCD 16r6C5C 16r6E6E 16r6C5D 16rF9EE 16r6C5E 16rF9EF 16r6C5F 16r7D6A 16r6C60 16r8335 16r6C61 16rF9F0 16r6C62 16r8693 16r6C63 16r8A8D 16r6C64 16rF9F1 16r6C65 16r976D 16r6C66 16r9777 16r6C67 16rF9F2 16r6C68 16rF9F3 16r6C69 16r4E00 16r6C6A 16r4F5A 16r6C6B 16r4F7E 16r6C6C 16r58F9 16r6C6D 16r65E5 16r6C6E 16r6EA2 16r6C6F 16r9038 16r6C70 16r93B0 16r6C71 16r99B9 16r6C72 16r4EFB 16r6C73 16r58EC 16r6C74 16r598A 16r6C75 16r59D9 16r6C76 16r6041 16r6C77 16rF9F4 16r6C78 16rF9F5 16r6C79 16r7A14 16r6C7A 16rF9F6 16r6C7B 16r834F 16r6C7C 16r8CC3 16r6C7D 16r5165 16r6C7E 16r5344 16r6D21 16rF9F7 16r6D22 16rF9F8 16r6D23 16rF9F9 16r6D24 16r4ECD 16r6D25 16r5269 16r6D26 16r5B55 16r6D27 16r82BF 16r6D28 16r4ED4 16r6D29 16r523A 16r6D2A 16r54A8 16r6D2B 16r59C9 16r6D2C 16r59FF 16r6D2D 16r5B50 16r6D2E 16r5B57 16r6D2F 16r5B5C 16r6D30 16r6063 16r6D31 16r6148 16r6D32 16r6ECB 16r6D33 16r7099 16r6D34 16r716E 16r6D35 16r7386 16r6D36 16r74F7 16r6D37 16r75B5 16r6D38 16r78C1 16r6D39 16r7D2B 16r6D3A 16r8005 16r6D3B 16r81EA 16r6D3C 16r8328 16r6D3D 16r8517 16r6D3E 16r85C9 16r6D3F 16r8AEE 16r6D40 16r8CC7 16r6D41 16r96CC 16r6D42 16r4F5C 16r6D43 16r52FA 16r6D44 16r56BC 16r6D45 16r65AB 16r6D46 16r6628 16r6D47 16r707C 16r6D48 16r70B8 16r6D49 16r7235 16r6D4A 16r7DBD 16r6D4B 16r828D 16r6D4C 16r914C 16r6D4D 16r96C0 16r6D4E 16r9D72 16r6D4F 16r5B71 16r6D50 16r68E7 16r6D51 16r6B98 16r6D52 16r6F7A 16r6D53 16r76DE 16r6D54 16r5C91 16r6D55 16r66AB 16r6D56 16r6F5B 16r6D57 16r7BB4 16r6D58 16r7C2A 16r6D59 16r8836 16r6D5A 16r96DC 16r6D5B 16r4E08 16r6D5C 16r4ED7 16r6D5D 16r5320 16r6D5E 16r5834 16r6D5F 16r58BB 16r6D60 16r58EF 16r6D61 16r596C 16r6D62 16r5C07 16r6D63 16r5E33 16r6D64 16r5E84 16r6D65 16r5F35 16r6D66 16r638C 16r6D67 16r66B2 16r6D68 16r6756 16r6D69 16r6A1F 16r6D6A 16r6AA3 16r6D6B 16r6B0C 16r6D6C 16r6F3F 16r6D6D 16r7246 16r6D6E 16rF9FA 16r6D6F 16r7350 16r6D70 16r748B 16r6D71 16r7AE0 16r6D72 16r7CA7 16r6D73 16r8178 16r6D74 16r81DF 16r6D75 16r81E7 16r6D76 16r838A 16r6D77 16r846C 16r6D78 16r8523 16r6D79 16r8594 16r6D7A 16r85CF 16r6D7B 16r88DD 16r6D7C 16r8D13 16r6D7D 16r91AC 16r6D7E 16r9577 16r6E21 16r969C 16r6E22 16r518D 16r6E23 16r54C9 16r6E24 16r5728 16r6E25 16r5BB0 16r6E26 16r624D 16r6E27 16r6750 16r6E28 16r683D 16r6E29 16r6893 16r6E2A 16r6E3D 16r6E2B 16r6ED3 16r6E2C 16r707D 16r6E2D 16r7E21 16r6E2E 16r88C1 16r6E2F 16r8CA1 16r6E30 16r8F09 16r6E31 16r9F4B 16r6E32 16r9F4E 16r6E33 16r722D 16r6E34 16r7B8F 16r6E35 16r8ACD 16r6E36 16r931A 16r6E37 16r4F47 16r6E38 16r4F4E 16r6E39 16r5132 16r6E3A 16r5480 16r6E3B 16r59D0 16r6E3C 16r5E95 16r6E3D 16r62B5 16r6E3E 16r6775 16r6E3F 16r696E 16r6E40 16r6A17 16r6E41 16r6CAE 16r6E42 16r6E1A 16r6E43 16r72D9 16r6E44 16r732A 16r6E45 16r75BD 16r6E46 16r7BB8 16r6E47 16r7D35 16r6E48 16r82E7 16r6E49 16r83F9 16r6E4A 16r8457 16r6E4B 16r85F7 16r6E4C 16r8A5B 16r6E4D 16r8CAF 16r6E4E 16r8E87 16r6E4F 16r9019 16r6E50 16r90B8 16r6E51 16r96CE 16r6E52 16r9F5F 16r6E53 16r52E3 16r6E54 16r540A 16r6E55 16r5AE1 16r6E56 16r5BC2 16r6E57 16r6458 16r6E58 16r6575 16r6E59 16r6EF4 16r6E5A 16r72C4 16r6E5B 16rF9FB 16r6E5C 16r7684 16r6E5D 16r7A4D 16r6E5E 16r7B1B 16r6E5F 16r7C4D 16r6E60 16r7E3E 16r6E61 16r7FDF 16r6E62 16r837B 16r6E63 16r8B2B 16r6E64 16r8CCA 16r6E65 16r8D64 16r6E66 16r8DE1 16r6E67 16r8E5F 16r6E68 16r8FEA 16r6E69 16r8FF9 16r6E6A 16r9069 16r6E6B 16r93D1 16r6E6C 16r4F43 16r6E6D 16r4F7A 16r6E6E 16r50B3 16r6E6F 16r5168 16r6E70 16r5178 16r6E71 16r524D 16r6E72 16r526A 16r6E73 16r5861 16r6E74 16r587C 16r6E75 16r5960 16r6E76 16r5C08 16r6E77 16r5C55 16r6E78 16r5EDB 16r6E79 16r609B 16r6E7A 16r6230 16r6E7B 16r6813 16r6E7C 16r6BBF 16r6E7D 16r6C08 16r6E7E 16r6FB1 16r6F21 16r714E 16r6F22 16r7420 16r6F23 16r7530 16r6F24 16r7538 16r6F25 16r7551 16r6F26 16r7672 16r6F27 16r7B4C 16r6F28 16r7B8B 16r6F29 16r7BAD 16r6F2A 16r7BC6 16r6F2B 16r7E8F 16r6F2C 16r8A6E 16r6F2D 16r8F3E 16r6F2E 16r8F49 16r6F2F 16r923F 16r6F30 16r9293 16r6F31 16r9322 16r6F32 16r942B 16r6F33 16r96FB 16r6F34 16r985A 16r6F35 16r986B 16r6F36 16r991E 16r6F37 16r5207 16r6F38 16r622A 16r6F39 16r6298 16r6F3A 16r6D59 16r6F3B 16r7664 16r6F3C 16r7ACA 16r6F3D 16r7BC0 16r6F3E 16r7D76 16r6F3F 16r5360 16r6F40 16r5CBE 16r6F41 16r5E97 16r6F42 16r6F38 16r6F43 16r70B9 16r6F44 16r7C98 16r6F45 16r9711 16r6F46 16r9B8E 16r6F47 16r9EDE 16r6F48 16r63A5 16r6F49 16r647A 16r6F4A 16r8776 16r6F4B 16r4E01 16r6F4C 16r4E95 16r6F4D 16r4EAD 16r6F4E 16r505C 16r6F4F 16r5075 16r6F50 16r5448 16r6F51 16r59C3 16r6F52 16r5B9A 16r6F53 16r5E40 16r6F54 16r5EAD 16r6F55 16r5EF7 16r6F56 16r5F81 16r6F57 16r60C5 16r6F58 16r633A 16r6F59 16r653F 16r6F5A 16r6574 16r6F5B 16r65CC 16r6F5C 16r6676 16r6F5D 16r6678 16r6F5E 16r67FE 16r6F5F 16r6968 16r6F60 16r6A89 16r6F61 16r6B63 16r6F62 16r6C40 16r6F63 16r6DC0 16r6F64 16r6DE8 16r6F65 16r6E1F 16r6F66 16r6E5E 16r6F67 16r701E 16r6F68 16r70A1 16r6F69 16r738E 16r6F6A 16r73FD 16r6F6B 16r753A 16r6F6C 16r775B 16r6F6D 16r7887 16r6F6E 16r798E 16r6F6F 16r7A0B 16r6F70 16r7A7D 16r6F71 16r7CBE 16r6F72 16r7D8E 16r6F73 16r8247 16r6F74 16r8A02 16r6F75 16r8AEA 16r6F76 16r8C9E 16r6F77 16r912D 16r6F78 16r914A 16r6F79 16r91D8 16r6F7A 16r9266 16r6F7B 16r92CC 16r6F7C 16r9320 16r6F7D 16r9706 16r6F7E 16r9756 16r7021 16r975C 16r7022 16r9802 16r7023 16r9F0E 16r7024 16r5236 16r7025 16r5291 16r7026 16r557C 16r7027 16r5824 16r7028 16r5E1D 16r7029 16r5F1F 16r702A 16r608C 16r702B 16r63D0 16r702C 16r68AF 16r702D 16r6FDF 16r702E 16r796D 16r702F 16r7B2C 16r7030 16r81CD 16r7031 16r85BA 16r7032 16r88FD 16r7033 16r8AF8 16r7034 16r8E44 16r7035 16r918D 16r7036 16r9664 16r7037 16r969B 16r7038 16r973D 16r7039 16r984C 16r703A 16r9F4A 16r703B 16r4FCE 16r703C 16r5146 16r703D 16r51CB 16r703E 16r52A9 16r703F 16r5632 16r7040 16r5F14 16r7041 16r5F6B 16r7042 16r63AA 16r7043 16r64CD 16r7044 16r65E9 16r7045 16r6641 16r7046 16r66FA 16r7047 16r66F9 16r7048 16r671D 16r7049 16r689D 16r704A 16r68D7 16r704B 16r69FD 16r704C 16r6F15 16r704D 16r6F6E 16r704E 16r7167 16r704F 16r71E5 16r7050 16r722A 16r7051 16r74AA 16r7052 16r773A 16r7053 16r7956 16r7054 16r795A 16r7055 16r79DF 16r7056 16r7A20 16r7057 16r7A95 16r7058 16r7C97 16r7059 16r7CDF 16r705A 16r7D44 16r705B 16r7E70 16r705C 16r8087 16r705D 16r85FB 16r705E 16r86A4 16r705F 16r8A54 16r7060 16r8ABF 16r7061 16r8D99 16r7062 16r8E81 16r7063 16r9020 16r7064 16r906D 16r7065 16r91E3 16r7066 16r963B 16r7067 16r96D5 16r7068 16r9CE5 16r7069 16r65CF 16r706A 16r7C07 16r706B 16r8DB3 16r706C 16r93C3 16r706D 16r5B58 16r706E 16r5C0A 16r706F 16r5352 16r7070 16r62D9 16r7071 16r731D 16r7072 16r5027 16r7073 16r5B97 16r7074 16r5F9E 16r7075 16r60B0 16r7076 16r616B 16r7077 16r68D5 16r7078 16r6DD9 16r7079 16r742E 16r707A 16r7A2E 16r707B 16r7D42 16r707C 16r7D9C 16r707D 16r7E31 16r707E 16r816B 16r7121 16r8E2A 16r7122 16r8E35 16r7123 16r937E 16r7124 16r9418 16r7125 16r4F50 16r7126 16r5750 16r7127 16r5DE6 16r7128 16r5EA7 16r7129 16r632B 16r712A 16r7F6A 16r712B 16r4E3B 16r712C 16r4F4F 16r712D 16r4F8F 16r712E 16r505A 16r712F 16r59DD 16r7130 16r80C4 16r7131 16r546A 16r7132 16r5468 16r7133 16r55FE 16r7134 16r594F 16r7135 16r5B99 16r7136 16r5DDE 16r7137 16r5EDA 16r7138 16r665D 16r7139 16r6731 16r713A 16r67F1 16r713B 16r682A 16r713C 16r6CE8 16r713D 16r6D32 16r713E 16r6E4A 16r713F 16r6F8D 16r7140 16r70B7 16r7141 16r73E0 16r7142 16r7587 16r7143 16r7C4C 16r7144 16r7D02 16r7145 16r7D2C 16r7146 16r7DA2 16r7147 16r821F 16r7148 16r86DB 16r7149 16r8A3B 16r714A 16r8A85 16r714B 16r8D70 16r714C 16r8E8A 16r714D 16r8F33 16r714E 16r9031 16r714F 16r914E 16r7150 16r9152 16r7151 16r9444 16r7152 16r99D0 16r7153 16r7AF9 16r7154 16r7CA5 16r7155 16r4FCA 16r7156 16r5101 16r7157 16r51C6 16r7158 16r57C8 16r7159 16r5BEF 16r715A 16r5CFB 16r715B 16r6659 16r715C 16r6A3D 16r715D 16r6D5A 16r715E 16r6E96 16r715F 16r6FEC 16r7160 16r710C 16r7161 16r756F 16r7162 16r7AE3 16r7163 16r8822 16r7164 16r9021 16r7165 16r9075 16r7166 16r96CB 16r7167 16r99FF 16r7168 16r8301 16r7169 16r4E2D 16r716A 16r4EF2 16r716B 16r8846 16r716C 16r91CD 16r716D 16r537D 16r716E 16r6ADB 16r716F 16r696B 16r7170 16r6C41 16r7171 16r847A 16r7172 16r589E 16r7173 16r618E 16r7174 16r66FE 16r7175 16r62EF 16r7176 16r70DD 16r7177 16r7511 16r7178 16r75C7 16r7179 16r7E52 16r717A 16r84B8 16r717B 16r8B49 16r717C 16r8D08 16r717D 16r4E4B 16r717E 16r53EA 16r7221 16r54AB 16r7222 16r5730 16r7223 16r5740 16r7224 16r5FD7 16r7225 16r6301 16r7226 16r6307 16r7227 16r646F 16r7228 16r652F 16r7229 16r65E8 16r722A 16r667A 16r722B 16r679D 16r722C 16r67B3 16r722D 16r6B62 16r722E 16r6C60 16r722F 16r6C9A 16r7230 16r6F2C 16r7231 16r77E5 16r7232 16r7825 16r7233 16r7949 16r7234 16r7957 16r7235 16r7D19 16r7236 16r80A2 16r7237 16r8102 16r7238 16r81F3 16r7239 16r829D 16r723A 16r82B7 16r723B 16r8718 16r723C 16r8A8C 16r723D 16rF9FC 16r723E 16r8D04 16r723F 16r8DBE 16r7240 16r9072 16r7241 16r76F4 16r7242 16r7A19 16r7243 16r7A37 16r7244 16r7E54 16r7245 16r8077 16r7246 16r5507 16r7247 16r55D4 16r7248 16r5875 16r7249 16r632F 16r724A 16r6422 16r724B 16r6649 16r724C 16r664B 16r724D 16r686D 16r724E 16r699B 16r724F 16r6B84 16r7250 16r6D25 16r7251 16r6EB1 16r7252 16r73CD 16r7253 16r7468 16r7254 16r74A1 16r7255 16r755B 16r7256 16r75B9 16r7257 16r76E1 16r7258 16r771E 16r7259 16r778B 16r725A 16r79E6 16r725B 16r7E09 16r725C 16r7E1D 16r725D 16r81FB 16r725E 16r852F 16r725F 16r8897 16r7260 16r8A3A 16r7261 16r8CD1 16r7262 16r8EEB 16r7263 16r8FB0 16r7264 16r9032 16r7265 16r93AD 16r7266 16r9663 16r7267 16r9673 16r7268 16r9707 16r7269 16r4F84 16r726A 16r53F1 16r726B 16r59EA 16r726C 16r5AC9 16r726D 16r5E19 16r726E 16r684E 16r726F 16r74C6 16r7270 16r75BE 16r7271 16r79E9 16r7272 16r7A92 16r7273 16r81A3 16r7274 16r86ED 16r7275 16r8CEA 16r7276 16r8DCC 16r7277 16r8FED 16r7278 16r659F 16r7279 16r6715 16r727A 16rF9FD 16r727B 16r57F7 16r727C 16r6F57 16r727D 16r7DDD 16r727E 16r8F2F 16r7321 16r93F6 16r7322 16r96C6 16r7323 16r5FB5 16r7324 16r61F2 16r7325 16r6F84 16r7326 16r4E14 16r7327 16r4F98 16r7328 16r501F 16r7329 16r53C9 16r732A 16r55DF 16r732B 16r5D6F 16r732C 16r5DEE 16r732D 16r6B21 16r732E 16r6B64 16r732F 16r78CB 16r7330 16r7B9A 16r7331 16rF9FE 16r7332 16r8E49 16r7333 16r8ECA 16r7334 16r906E 16r7335 16r6349 16r7336 16r643E 16r7337 16r7740 16r7338 16r7A84 16r7339 16r932F 16r733A 16r947F 16r733B 16r9F6A 16r733C 16r64B0 16r733D 16r6FAF 16r733E 16r71E6 16r733F 16r74A8 16r7340 16r74DA 16r7341 16r7AC4 16r7342 16r7C12 16r7343 16r7E82 16r7344 16r7CB2 16r7345 16r7E98 16r7346 16r8B9A 16r7347 16r8D0A 16r7348 16r947D 16r7349 16r9910 16r734A 16r994C 16r734B 16r5239 16r734C 16r5BDF 16r734D 16r64E6 16r734E 16r672D 16r734F 16r7D2E 16r7350 16r50ED 16r7351 16r53C3 16r7352 16r5879 16r7353 16r6158 16r7354 16r6159 16r7355 16r61FA 16r7356 16r65AC 16r7357 16r7AD9 16r7358 16r8B92 16r7359 16r8B96 16r735A 16r5009 16r735B 16r5021 16r735C 16r5275 16r735D 16r5531 16r735E 16r5A3C 16r735F 16r5EE0 16r7360 16r5F70 16r7361 16r6134 16r7362 16r655E 16r7363 16r660C 16r7364 16r6636 16r7365 16r66A2 16r7366 16r69CD 16r7367 16r6EC4 16r7368 16r6F32 16r7369 16r7316 16r736A 16r7621 16r736B 16r7A93 16r736C 16r8139 16r736D 16r8259 16r736E 16r83D6 16r736F 16r84BC 16r7370 16r50B5 16r7371 16r57F0 16r7372 16r5BC0 16r7373 16r5BE8 16r7374 16r5F69 16r7375 16r63A1 16r7376 16r7826 16r7377 16r7DB5 16r7378 16r83DC 16r7379 16r8521 16r737A 16r91C7 16r737B 16r91F5 16r737C 16r518A 16r737D 16r67F5 16r737E 16r7B56 16r7421 16r8CAC 16r7422 16r51C4 16r7423 16r59BB 16r7424 16r60BD 16r7425 16r8655 16r7426 16r501C 16r7427 16rF9FF 16r7428 16r5254 16r7429 16r5C3A 16r742A 16r617D 16r742B 16r621A 16r742C 16r62D3 16r742D 16r64F2 16r742E 16r65A5 16r742F 16r6ECC 16r7430 16r7620 16r7431 16r810A 16r7432 16r8E60 16r7433 16r965F 16r7434 16r96BB 16r7435 16r4EDF 16r7436 16r5343 16r7437 16r5598 16r7438 16r5929 16r7439 16r5DDD 16r743A 16r64C5 16r743B 16r6CC9 16r743C 16r6DFA 16r743D 16r7394 16r743E 16r7A7F 16r743F 16r821B 16r7440 16r85A6 16r7441 16r8CE4 16r7442 16r8E10 16r7443 16r9077 16r7444 16r91E7 16r7445 16r95E1 16r7446 16r9621 16r7447 16r97C6 16r7448 16r51F8 16r7449 16r54F2 16r744A 16r5586 16r744B 16r5FB9 16r744C 16r64A4 16r744D 16r6F88 16r744E 16r7DB4 16r744F 16r8F1F 16r7450 16r8F4D 16r7451 16r9435 16r7452 16r50C9 16r7453 16r5C16 16r7454 16r6CBE 16r7455 16r6DFB 16r7456 16r751B 16r7457 16r77BB 16r7458 16r7C3D 16r7459 16r7C64 16r745A 16r8A79 16r745B 16r8AC2 16r745C 16r581E 16r745D 16r59BE 16r745E 16r5E16 16r745F 16r6377 16r7460 16r7252 16r7461 16r758A 16r7462 16r776B 16r7463 16r8ADC 16r7464 16r8CBC 16r7465 16r8F12 16r7466 16r5EF3 16r7467 16r6674 16r7468 16r6DF8 16r7469 16r807D 16r746A 16r83C1 16r746B 16r8ACB 16r746C 16r9751 16r746D 16r9BD6 16r746E 16rFA00 16r746F 16r5243 16r7470 16r66FF 16r7471 16r6D95 16r7472 16r6EEF 16r7473 16r7DE0 16r7474 16r8AE6 16r7475 16r902E 16r7476 16r905E 16r7477 16r9AD4 16r7478 16r521D 16r7479 16r527F 16r747A 16r54E8 16r747B 16r6194 16r747C 16r6284 16r747D 16r62DB 16r747E 16r68A2 16r7521 16r6912 16r7522 16r695A 16r7523 16r6A35 16r7524 16r7092 16r7525 16r7126 16r7526 16r785D 16r7527 16r7901 16r7528 16r790E 16r7529 16r79D2 16r752A 16r7A0D 16r752B 16r8096 16r752C 16r8278 16r752D 16r82D5 16r752E 16r8349 16r752F 16r8549 16r7530 16r8C82 16r7531 16r8D85 16r7532 16r9162 16r7533 16r918B 16r7534 16r91AE 16r7535 16r4FC3 16r7536 16r56D1 16r7537 16r71ED 16r7538 16r77D7 16r7539 16r8700 16r753A 16r89F8 16r753B 16r5BF8 16r753C 16r5FD6 16r753D 16r6751 16r753E 16r90A8 16r753F 16r53E2 16r7540 16r585A 16r7541 16r5BF5 16r7542 16r60A4 16r7543 16r6181 16r7544 16r6460 16r7545 16r7E3D 16r7546 16r8070 16r7547 16r8525 16r7548 16r9283 16r7549 16r64AE 16r754A 16r50AC 16r754B 16r5D14 16r754C 16r6700 16r754D 16r589C 16r754E 16r62BD 16r754F 16r63A8 16r7550 16r690E 16r7551 16r6978 16r7552 16r6A1E 16r7553 16r6E6B 16r7554 16r76BA 16r7555 16r79CB 16r7556 16r82BB 16r7557 16r8429 16r7558 16r8ACF 16r7559 16r8DA8 16r755A 16r8FFD 16r755B 16r9112 16r755C 16r914B 16r755D 16r919C 16r755E 16r9310 16r755F 16r9318 16r7560 16r939A 16r7561 16r96DB 16r7562 16r9A36 16r7563 16r9C0D 16r7564 16r4E11 16r7565 16r755C 16r7566 16r795D 16r7567 16r7AFA 16r7568 16r7B51 16r7569 16r7BC9 16r756A 16r7E2E 16r756B 16r84C4 16r756C 16r8E59 16r756D 16r8E74 16r756E 16r8EF8 16r756F 16r9010 16r7570 16r6625 16r7571 16r693F 16r7572 16r7443 16r7573 16r51FA 16r7574 16r672E 16r7575 16r9EDC 16r7576 16r5145 16r7577 16r5FE0 16r7578 16r6C96 16r7579 16r87F2 16r757A 16r885D 16r757B 16r8877 16r757C 16r60B4 16r757D 16r81B5 16r757E 16r8403 16r7621 16r8D05 16r7622 16r53D6 16r7623 16r5439 16r7624 16r5634 16r7625 16r5A36 16r7626 16r5C31 16r7627 16r708A 16r7628 16r7FE0 16r7629 16r805A 16r762A 16r8106 16r762B 16r81ED 16r762C 16r8DA3 16r762D 16r9189 16r762E 16r9A5F 16r762F 16r9DF2 16r7630 16r5074 16r7631 16r4EC4 16r7632 16r53A0 16r7633 16r60FB 16r7634 16r6E2C 16r7635 16r5C64 16r7636 16r4F88 16r7637 16r5024 16r7638 16r55E4 16r7639 16r5CD9 16r763A 16r5E5F 16r763B 16r6065 16r763C 16r6894 16r763D 16r6CBB 16r763E 16r6DC4 16r763F 16r71BE 16r7640 16r75D4 16r7641 16r75F4 16r7642 16r7661 16r7643 16r7A1A 16r7644 16r7A49 16r7645 16r7DC7 16r7646 16r7DFB 16r7647 16r7F6E 16r7648 16r81F4 16r7649 16r86A9 16r764A 16r8F1C 16r764B 16r96C9 16r764C 16r99B3 16r764D 16r9F52 16r764E 16r5247 16r764F 16r52C5 16r7650 16r98ED 16r7651 16r89AA 16r7652 16r4E03 16r7653 16r67D2 16r7654 16r6F06 16r7655 16r4FB5 16r7656 16r5BE2 16r7657 16r6795 16r7658 16r6C88 16r7659 16r6D78 16r765A 16r741B 16r765B 16r7827 16r765C 16r91DD 16r765D 16r937C 16r765E 16r87C4 16r765F 16r79E4 16r7660 16r7A31 16r7661 16r5FEB 16r7662 16r4ED6 16r7663 16r54A4 16r7664 16r553E 16r7665 16r58AE 16r7666 16r59A5 16r7667 16r60F0 16r7668 16r6253 16r7669 16r62D6 16r766A 16r6736 16r766B 16r6955 16r766C 16r8235 16r766D 16r9640 16r766E 16r99B1 16r766F 16r99DD 16r7670 16r502C 16r7671 16r5353 16r7672 16r5544 16r7673 16r577C 16r7674 16rFA01 16r7675 16r6258 16r7676 16rFA02 16r7677 16r64E2 16r7678 16r666B 16r7679 16r67DD 16r767A 16r6FC1 16r767B 16r6FEF 16r767C 16r7422 16r767D 16r7438 16r767E 16r8A17 16r7721 16r9438 16r7722 16r5451 16r7723 16r5606 16r7724 16r5766 16r7725 16r5F48 16r7726 16r619A 16r7727 16r6B4E 16r7728 16r7058 16r7729 16r70AD 16r772A 16r7DBB 16r772B 16r8A95 16r772C 16r596A 16r772D 16r812B 16r772E 16r63A2 16r772F 16r7708 16r7730 16r803D 16r7731 16r8CAA 16r7732 16r5854 16r7733 16r642D 16r7734 16r69BB 16r7735 16r5B95 16r7736 16r5E11 16r7737 16r6E6F 16r7738 16rFA03 16r7739 16r8569 16r773A 16r514C 16r773B 16r53F0 16r773C 16r592A 16r773D 16r6020 16r773E 16r614B 16r773F 16r6B86 16r7740 16r6C70 16r7741 16r6CF0 16r7742 16r7B1E 16r7743 16r80CE 16r7744 16r82D4 16r7745 16r8DC6 16r7746 16r90B0 16r7747 16r98B1 16r7748 16rFA04 16r7749 16r64C7 16r774A 16r6FA4 16r774B 16r6491 16r774C 16r6504 16r774D 16r514E 16r774E 16r5410 16r774F 16r571F 16r7750 16r8A0E 16r7751 16r615F 16r7752 16r6876 16r7753 16rFA05 16r7754 16r75DB 16r7755 16r7B52 16r7756 16r7D71 16r7757 16r901A 16r7758 16r5806 16r7759 16r69CC 16r775A 16r817F 16r775B 16r892A 16r775C 16r9000 16r775D 16r9839 16r775E 16r5078 16r775F 16r5957 16r7760 16r59AC 16r7761 16r6295 16r7762 16r900F 16r7763 16r9B2A 16r7764 16r615D 16r7765 16r7279 16r7766 16r95D6 16r7767 16r5761 16r7768 16r5A46 16r7769 16r5DF4 16r776A 16r628A 16r776B 16r64AD 16r776C 16r64FA 16r776D 16r6777 16r776E 16r6CE2 16r776F 16r6D3E 16r7770 16r722C 16r7771 16r7436 16r7772 16r7834 16r7773 16r7F77 16r7774 16r82AD 16r7775 16r8DDB 16r7776 16r9817 16r7777 16r5224 16r7778 16r5742 16r7779 16r677F 16r777A 16r7248 16r777B 16r74E3 16r777C 16r8CA9 16r777D 16r8FA6 16r777E 16r9211 16r7821 16r962A 16r7822 16r516B 16r7823 16r53ED 16r7824 16r634C 16r7825 16r4F69 16r7826 16r5504 16r7827 16r6096 16r7828 16r6557 16r7829 16r6C9B 16r782A 16r6D7F 16r782B 16r724C 16r782C 16r72FD 16r782D 16r7A17 16r782E 16r8987 16r782F 16r8C9D 16r7830 16r5F6D 16r7831 16r6F8E 16r7832 16r70F9 16r7833 16r81A8 16r7834 16r610E 16r7835 16r4FBF 16r7836 16r504F 16r7837 16r6241 16r7838 16r7247 16r7839 16r7BC7 16r783A 16r7DE8 16r783B 16r7FE9 16r783C 16r904D 16r783D 16r97AD 16r783E 16r9A19 16r783F 16r8CB6 16r7840 16r576A 16r7841 16r5E73 16r7842 16r67B0 16r7843 16r840D 16r7844 16r8A55 16r7845 16r5420 16r7846 16r5B16 16r7847 16r5E63 16r7848 16r5EE2 16r7849 16r5F0A 16r784A 16r6583 16r784B 16r80BA 16r784C 16r853D 16r784D 16r9589 16r784E 16r965B 16r784F 16r4F48 16r7850 16r5305 16r7851 16r530D 16r7852 16r530F 16r7853 16r5486 16r7854 16r54FA 16r7855 16r5703 16r7856 16r5E03 16r7857 16r6016 16r7858 16r629B 16r7859 16r62B1 16r785A 16r6355 16r785B 16rFA06 16r785C 16r6CE1 16r785D 16r6D66 16r785E 16r75B1 16r785F 16r7832 16r7860 16r80DE 16r7861 16r812F 16r7862 16r82DE 16r7863 16r8461 16r7864 16r84B2 16r7865 16r888D 16r7866 16r8912 16r7867 16r900B 16r7868 16r92EA 16r7869 16r98FD 16r786A 16r9B91 16r786B 16r5E45 16r786C 16r66B4 16r786D 16r66DD 16r786E 16r7011 16r786F 16r7206 16r7870 16rFA07 16r7871 16r4FF5 16r7872 16r527D 16r7873 16r5F6A 16r7874 16r6153 16r7875 16r6753 16r7876 16r6A19 16r7877 16r6F02 16r7878 16r74E2 16r7879 16r7968 16r787A 16r8868 16r787B 16r8C79 16r787C 16r98C7 16r787D 16r98C4 16r787E 16r9A43 16r7921 16r54C1 16r7922 16r7A1F 16r7923 16r6953 16r7924 16r8AF7 16r7925 16r8C4A 16r7926 16r98A8 16r7927 16r99AE 16r7928 16r5F7C 16r7929 16r62AB 16r792A 16r75B2 16r792B 16r76AE 16r792C 16r88AB 16r792D 16r907F 16r792E 16r9642 16r792F 16r5339 16r7930 16r5F3C 16r7931 16r5FC5 16r7932 16r6CCC 16r7933 16r73CC 16r7934 16r7562 16r7935 16r758B 16r7936 16r7B46 16r7937 16r82FE 16r7938 16r999D 16r7939 16r4E4F 16r793A 16r903C 16r793B 16r4E0B 16r793C 16r4F55 16r793D 16r53A6 16r793E 16r590F 16r793F 16r5EC8 16r7940 16r6630 16r7941 16r6CB3 16r7942 16r7455 16r7943 16r8377 16r7944 16r8766 16r7945 16r8CC0 16r7946 16r9050 16r7947 16r971E 16r7948 16r9C15 16r7949 16r58D1 16r794A 16r5B78 16r794B 16r8650 16r794C 16r8B14 16r794D 16r9DB4 16r794E 16r5BD2 16r794F 16r6068 16r7950 16r608D 16r7951 16r65F1 16r7952 16r6C57 16r7953 16r6F22 16r7954 16r6FA3 16r7955 16r701A 16r7956 16r7F55 16r7957 16r7FF0 16r7958 16r9591 16r7959 16r9592 16r795A 16r9650 16r795B 16r97D3 16r795C 16r5272 16r795D 16r8F44 16r795E 16r51FD 16r795F 16r542B 16r7960 16r54B8 16r7961 16r5563 16r7962 16r558A 16r7963 16r6ABB 16r7964 16r6DB5 16r7965 16r7DD8 16r7966 16r8266 16r7967 16r929C 16r7968 16r9677 16r7969 16r9E79 16r796A 16r5408 16r796B 16r54C8 16r796C 16r76D2 16r796D 16r86E4 16r796E 16r95A4 16r796F 16r95D4 16r7970 16r965C 16r7971 16r4EA2 16r7972 16r4F09 16r7973 16r59EE 16r7974 16r5AE6 16r7975 16r5DF7 16r7976 16r6052 16r7977 16r6297 16r7978 16r676D 16r7979 16r6841 16r797A 16r6C86 16r797B 16r6E2F 16r797C 16r7F38 16r797D 16r809B 16r797E 16r822A 16r7A21 16rFA08 16r7A22 16rFA09 16r7A23 16r9805 16r7A24 16r4EA5 16r7A25 16r5055 16r7A26 16r54B3 16r7A27 16r5793 16r7A28 16r595A 16r7A29 16r5B69 16r7A2A 16r5BB3 16r7A2B 16r61C8 16r7A2C 16r6977 16r7A2D 16r6D77 16r7A2E 16r7023 16r7A2F 16r87F9 16r7A30 16r89E3 16r7A31 16r8A72 16r7A32 16r8AE7 16r7A33 16r9082 16r7A34 16r99ED 16r7A35 16r9AB8 16r7A36 16r52BE 16r7A37 16r6838 16r7A38 16r5016 16r7A39 16r5E78 16r7A3A 16r674F 16r7A3B 16r8347 16r7A3C 16r884C 16r7A3D 16r4EAB 16r7A3E 16r5411 16r7A3F 16r56AE 16r7A40 16r73E6 16r7A41 16r9115 16r7A42 16r97FF 16r7A43 16r9909 16r7A44 16r9957 16r7A45 16r9999 16r7A46 16r5653 16r7A47 16r589F 16r7A48 16r865B 16r7A49 16r8A31 16r7A4A 16r61B2 16r7A4B 16r6AF6 16r7A4C 16r737B 16r7A4D 16r8ED2 16r7A4E 16r6B47 16r7A4F 16r96AA 16r7A50 16r9A57 16r7A51 16r5955 16r7A52 16r7200 16r7A53 16r8D6B 16r7A54 16r9769 16r7A55 16r4FD4 16r7A56 16r5CF4 16r7A57 16r5F26 16r7A58 16r61F8 16r7A59 16r665B 16r7A5A 16r6CEB 16r7A5B 16r70AB 16r7A5C 16r7384 16r7A5D 16r73B9 16r7A5E 16r73FE 16r7A5F 16r7729 16r7A60 16r774D 16r7A61 16r7D43 16r7A62 16r7D62 16r7A63 16r7E23 16r7A64 16r8237 16r7A65 16r8852 16r7A66 16rFA0A 16r7A67 16r8CE2 16r7A68 16r9249 16r7A69 16r986F 16r7A6A 16r5B51 16r7A6B 16r7A74 16r7A6C 16r8840 16r7A6D 16r9801 16r7A6E 16r5ACC 16r7A6F 16r4FE0 16r7A70 16r5354 16r7A71 16r593E 16r7A72 16r5CFD 16r7A73 16r633E 16r7A74 16r6D79 16r7A75 16r72F9 16r7A76 16r8105 16r7A77 16r8107 16r7A78 16r83A2 16r7A79 16r92CF 16r7A7A 16r9830 16r7A7B 16r4EA8 16r7A7C 16r5144 16r7A7D 16r5211 16r7A7E 16r578B 16r7B21 16r5F62 16r7B22 16r6CC2 16r7B23 16r6ECE 16r7B24 16r7005 16r7B25 16r7050 16r7B26 16r70AF 16r7B27 16r7192 16r7B28 16r73E9 16r7B29 16r7469 16r7B2A 16r834A 16r7B2B 16r87A2 16r7B2C 16r8861 16r7B2D 16r9008 16r7B2E 16r90A2 16r7B2F 16r93A3 16r7B30 16r99A8 16r7B31 16r516E 16r7B32 16r5F57 16r7B33 16r60E0 16r7B34 16r6167 16r7B35 16r66B3 16r7B36 16r8559 16r7B37 16r8E4A 16r7B38 16r91AF 16r7B39 16r978B 16r7B3A 16r4E4E 16r7B3B 16r4E92 16r7B3C 16r547C 16r7B3D 16r58D5 16r7B3E 16r58FA 16r7B3F 16r597D 16r7B40 16r5CB5 16r7B41 16r5F27 16r7B42 16r6236 16r7B43 16r6248 16r7B44 16r660A 16r7B45 16r6667 16r7B46 16r6BEB 16r7B47 16r6D69 16r7B48 16r6DCF 16r7B49 16r6E56 16r7B4A 16r6EF8 16r7B4B 16r6F94 16r7B4C 16r6FE0 16r7B4D 16r6FE9 16r7B4E 16r705D 16r7B4F 16r72D0 16r7B50 16r7425 16r7B51 16r745A 16r7B52 16r74E0 16r7B53 16r7693 16r7B54 16r795C 16r7B55 16r7CCA 16r7B56 16r7E1E 16r7B57 16r80E1 16r7B58 16r82A6 16r7B59 16r846B 16r7B5A 16r84BF 16r7B5B 16r864E 16r7B5C 16r865F 16r7B5D 16r8774 16r7B5E 16r8B77 16r7B5F 16r8C6A 16r7B60 16r93AC 16r7B61 16r9800 16r7B62 16r9865 16r7B63 16r60D1 16r7B64 16r6216 16r7B65 16r9177 16r7B66 16r5A5A 16r7B67 16r660F 16r7B68 16r6DF7 16r7B69 16r6E3E 16r7B6A 16r743F 16r7B6B 16r9B42 16r7B6C 16r5FFD 16r7B6D 16r60DA 16r7B6E 16r7B0F 16r7B6F 16r54C4 16r7B70 16r5F18 16r7B71 16r6C5E 16r7B72 16r6CD3 16r7B73 16r6D2A 16r7B74 16r70D8 16r7B75 16r7D05 16r7B76 16r8679 16r7B77 16r8A0C 16r7B78 16r9D3B 16r7B79 16r5316 16r7B7A 16r548C 16r7B7B 16r5B05 16r7B7C 16r6A3A 16r7B7D 16r706B 16r7B7E 16r7575 16r7C21 16r798D 16r7C22 16r79BE 16r7C23 16r82B1 16r7C24 16r83EF 16r7C25 16r8A71 16r7C26 16r8B41 16r7C27 16r8CA8 16r7C28 16r9774 16r7C29 16rFA0B 16r7C2A 16r64F4 16r7C2B 16r652B 16r7C2C 16r78BA 16r7C2D 16r78BB 16r7C2E 16r7A6B 16r7C2F 16r4E38 16r7C30 16r559A 16r7C31 16r5950 16r7C32 16r5BA6 16r7C33 16r5E7B 16r7C34 16r60A3 16r7C35 16r63DB 16r7C36 16r6B61 16r7C37 16r6665 16r7C38 16r6853 16r7C39 16r6E19 16r7C3A 16r7165 16r7C3B 16r74B0 16r7C3C 16r7D08 16r7C3D 16r9084 16r7C3E 16r9A69 16r7C3F 16r9C25 16r7C40 16r6D3B 16r7C41 16r6ED1 16r7C42 16r733E 16r7C43 16r8C41 16r7C44 16r95CA 16r7C45 16r51F0 16r7C46 16r5E4C 16r7C47 16r5FA8 16r7C48 16r604D 16r7C49 16r60F6 16r7C4A 16r6130 16r7C4B 16r614C 16r7C4C 16r6643 16r7C4D 16r6644 16r7C4E 16r69A5 16r7C4F 16r6CC1 16r7C50 16r6E5F 16r7C51 16r6EC9 16r7C52 16r6F62 16r7C53 16r714C 16r7C54 16r749C 16r7C55 16r7687 16r7C56 16r7BC1 16r7C57 16r7C27 16r7C58 16r8352 16r7C59 16r8757 16r7C5A 16r9051 16r7C5B 16r968D 16r7C5C 16r9EC3 16r7C5D 16r532F 16r7C5E 16r56DE 16r7C5F 16r5EFB 16r7C60 16r5F8A 16r7C61 16r6062 16r7C62 16r6094 16r7C63 16r61F7 16r7C64 16r6666 16r7C65 16r6703 16r7C66 16r6A9C 16r7C67 16r6DEE 16r7C68 16r6FAE 16r7C69 16r7070 16r7C6A 16r736A 16r7C6B 16r7E6A 16r7C6C 16r81BE 16r7C6D 16r8334 16r7C6E 16r86D4 16r7C6F 16r8AA8 16r7C70 16r8CC4 16r7C71 16r5283 16r7C72 16r7372 16r7C73 16r5B96 16r7C74 16r6A6B 16r7C75 16r9404 16r7C76 16r54EE 16r7C77 16r5686 16r7C78 16r5B5D 16r7C79 16r6548 16r7C7A 16r6585 16r7C7B 16r66C9 16r7C7C 16r689F 16r7C7D 16r6D8D 16r7C7E 16r6DC6 16r7D21 16r723B 16r7D22 16r80B4 16r7D23 16r9175 16r7D24 16r9A4D 16r7D25 16r4FAF 16r7D26 16r5019 16r7D27 16r539A 16r7D28 16r540E 16r7D29 16r543C 16r7D2A 16r5589 16r7D2B 16r55C5 16r7D2C 16r5E3F 16r7D2D 16r5F8C 16r7D2E 16r673D 16r7D2F 16r7166 16r7D30 16r73DD 16r7D31 16r9005 16r7D32 16r52DB 16r7D33 16r52F3 16r7D34 16r5864 16r7D35 16r58CE 16r7D36 16r7104 16r7D37 16r718F 16r7D38 16r71FB 16r7D39 16r85B0 16r7D3A 16r8A13 16r7D3B 16r6688 16r7D3C 16r85A8 16r7D3D 16r55A7 16r7D3E 16r6684 16r7D3F 16r714A 16r7D40 16r8431 16r7D41 16r5349 16r7D42 16r5599 16r7D43 16r6BC1 16r7D44 16r5F59 16r7D45 16r5FBD 16r7D46 16r63EE 16r7D47 16r6689 16r7D48 16r7147 16r7D49 16r8AF1 16r7D4A 16r8F1D 16r7D4B 16r9EBE 16r7D4C 16r4F11 16r7D4D 16r643A 16r7D4E 16r70CB 16r7D4F 16r7566 16r7D50 16r8667 16r7D51 16r6064 16r7D52 16r8B4E 16r7D53 16r9DF8 16r7D54 16r5147 16r7D55 16r51F6 16r7D56 16r5308 16r7D57 16r6D36 16r7D58 16r80F8 16r7D59 16r9ED1 16r7D5A 16r6615 16r7D5B 16r6B23 16r7D5C 16r7098 16r7D5D 16r75D5 16r7D5E 16r5403 16r7D5F 16r5C79 16r7D60 16r7D07 16r7D61 16r8A16 16r7D62 16r6B20 16r7D63 16r6B3D 16r7D64 16r6B46 16r7D65 16r5438 16r7D66 16r6070 16r7D67 16r6D3D 16r7D68 16r7FD5 16r7D69 16r8208 16r7D6A 16r50D6 16r7D6B 16r51DE 16r7D6C 16r559C 16r7D6D 16r566B 16r7D6E 16r56CD 16r7D6F 16r59EC 16r7D70 16r5B09 16r7D71 16r5E0C 16r7D72 16r6199 16r7D73 16r6198 16r7D74 16r6231 16r7D75 16r665E 16r7D76 16r66E6 16r7D77 16r7199 16r7D78 16r71B9 16r7D79 16r71BA 16r7D7A 16r72A7 16r7D7B 16r79A7 16r7D7C 16r7A00 16r7D7D 16r7FB2 16r7D7E 16r8A70). table size even ifFalse: [^ self error: 'given table size must be even']. size := table size / 2. ksX1001 := Array new: size. unicode := Array new: size. 1 to: table size by: 2 do: [:index | | tableIndex | tableIndex := index + 1 / 2. ksX1001 at: tableIndex put: (table at: index). unicode at: tableIndex put: (table at: index + 1)]. ksX10012 := Array new: 94*94 withAll: -1. ksX1001 withIndexDo: [:elem :index | | uIndex u code | code := (elem // 256 - 33) * 94 + (elem \\ 256 - 33) + 1. (ksX10012 at: code) ~= -1 ifTrue: [self error]. uIndex := ksX1001 indexOf: elem. uIndex = 0 ifFalse: [ u := unicode at: uIndex. ksX10012 at: code put: u. ]. ]. KSX1001Table := ksX10012 ! ! !RxMatcher methodsFor: 'match enumeration' stamp: 'cami 9/12/2013 23:48' prior: 32368115! matchesOnStream: aStream do: aBlock "Be extra careful about successful matches which consume no input. After those, make sure to advance or finish if already at end." | position subexpression | [ position := aStream position. self searchStream: aStream ] whileTrue: [ subexpression := self subexpression: 1. aBlock value: subexpression. subexpression size = 0 ifTrue: [ aStream atEnd ifTrue: [^self] ifFalse: [aStream next]]]! ! !WidgetSetter methodsFor: 'initialization' stamp: 'MarcusDenker 9/12/2013 16:40' prior: 54891560! buildItemFor: anAPIMethod | args first | args := (anAPIMethod pragmas detect: [ :e | e keyword beginsWith: 'api:' ] ifNone: [ ^ nil ]) arguments. first := args first. first = #boolean ifTrue: [ ^ self buildBooleanItemFor: anAPIMethod ]. first = #string ifTrue: [ ^ self buildStringItemFor: anAPIMethod ]. first = #block ifTrue: [ ^ self buildBlockItemFor: anAPIMethod ]. first = #inspect ifTrue: [ ^ self buildInspectItemFor: anAPIMethod ]. first = #do ifTrue: [ ^ self buildDoItemFor: anAPIMethod ]. first = #st ifTrue: [ ^ self buildStItemFor: anAPIMethod ]. first = #integer ifTrue: [ ^ self buildIntegerItemFor: anAPIMethod ]. first = #color ifTrue: [ ^ self buildColorItemFor: anAPIMethod ]. first = #event ifTrue: [ ^ self buildEventItemFor: anAPIMethod ]. ^ self error.! ! !StrikeFont methodsFor: 'file in/out' stamp: 'MarcusDenker 9/12/2013 16:39' prior: 50963716! readFromStrike2: fileName "StrikeFont new readFromStrike2: 'Palatino14.sf2'" "Build an instance from the strike font stored in strike2 format. fileName is of the form: .sf2" | file | self assert:['*.sf2' match: fileName]. "likely incompatible" name := fileName copyUpTo: $.. "Drop filename extension" file := FileStream readOnlyFileNamed: fileName. file binary. [ self readFromStrike2Stream: file ] ensure: [ file close ]! ! !MethodFinder methodsFor: 'debugging it' stamp: 'MarcusDenker 9/12/2013 16:37' prior: 49688833! testRandom "verify that the methods allowed don't crash the system. Pick 3 or 4 from a mixed list of the fundamental types." "MethodFinder new testRandom" | objects other aa cnt take tuple fName sss | objects := #( #(1 4 17 42) #($a $b $c $d) #('one' 'two' 'three' 'four') #(#x #+ #rectangle: #new) #(#(#a #b 1 4) #(#c 1 5) #($a 3 #d) #()) #(4.5 0.0 3.2 100.3)). objects := objects , {{true. false. true. false}. {Point. SmallInteger. Association. Array}. {"{ 4 blocks }." (Point class). (SmallInteger class). (Association class). (Array class)}. "{ 4 blocks }." {(Date today). ('1 Jan 1950' asDate). ('25 Aug 1987' asDate). ('1 Jan 2000' asDate)}. {('15:16' asTime). ('1:56' asTime). ('4:01' asTime). ('6:23' asTime)}. {(Dictionary new). (Dictionary new). (Dictionary new). (Dictionary new)}. {(#(#a #b 1 4) asOrderedCollection). (#(#c 1 5) asOrderedCollection). (#($a 3 #d) asOrderedCollection). (#() asOrderedCollection)}. {(3 -> true). (5.6 -> $a). (#x -> 2). ('abcd' -> false)}. {(9 @ 3 extent: 5 @ 4). (0 @ 0 extent: 45 @ 9). (-3 @ -7 extent: 2 @ 2). (4 @ 4 extent: 16 @ 16)}. {(Color red). (Color blue). (Color black). (Color gray)}}. self test2: objects. "rec+0, rec+1, rec+2, rec+3 need to be tested. " fName := (FileSystem workingDirectory filesMatching: '*.ran') first basename. sss := fName splitInteger first. (Collection classPool at: #RandomForPicking) seed: sss. cnt := 0. [ take := #(3 4) atRandom. tuple := (1 to: take) collect: [ :ind | objects atRandom atRandom ]. other := (1 to: take) collect: [ :ind | objects atRandom atRandom ]. self load: (aa := Array with: tuple with: 1 with: other with: 7). (cnt := cnt + 1) \\ 10 = 0 ifTrue: [ Transcript cr; show: cnt printString; tab; tab; show: aa first printString ]. " | (cnt > Skip)" cnt > (Smalltalk globals at: #StopHere) ifTrue: [ self error ]. "stop just before crash" cnt > (Smalltalk globals at: #Skip) ifTrue: [ "skip this many at start" self search: true. self test2: aa first. self test2: (aa at: 3) "self test2: objects" ]. true ] whileTrue! ! !RBCollectionCopyEmptyRule methodsFor: 'running' stamp: 'CamilloBruni 9/12/2013 11:23' prior: 30430757! checkClass: aContext ((aContext selectedClass inheritsFrom: Collection) and: [ aContext selectedClass isVariable and: [ (aContext selectedClass includesSelector: #copyEmpty) not and: [ aContext selectedClass instVarNames isEmpty not ]]]) ifTrue: [ result addClass: aContext selectedClass ]! ! "Compiler"! "Graphics-Display Objects"! "Graphics-Fonts"! "Refactoring-Critics"! "Regex-Core"! "Slot"! "Spec-Tools"! "Tools"! "Unicode-Initialization"! ----End fileIn----! ----QUIT----an Array(13 September 2013 11:22:03 am) Pharo.image priorSource: 17359411! ----STARTUP----an Array(13 September 2013 11:28:17 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 September 2013 11:28:17 am) Pharo-30395.image priorSource: 17742013! ----STARTUP----an Array(13 September 2013 2:25:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 9/13/2013 14:21' prior: 67691370! commentForCurrentUpdate ^ '11595 clean senders of #halt: https://pharo.fogbugz.com/f/cases/11595 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 9/13/2013 14:22'! script188 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-EstebanLorenzano.204.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-StephaneDucasse.119.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1609.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.106.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-EstebanLorenzano.24.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-StephaneDucasse.910.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.65.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-StephaneDucasse.386.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.909.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1257.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 9/13/2013 14:22'! update30396 "self new update30396" self withUpdateLog: '11595 clean senders of #halt: https://pharo.fogbugz.com/f/cases/11595 '. self loadTogether: self script188 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Form methodsFor: 'accessing' stamp: 'MarcusDenker 9/13/2013 14:04' prior: 22454358! depth: bitsPerPixel (bitsPerPixel > 32 or: [(bitsPerPixel bitAnd: bitsPerPixel-1) ~= 0]) ifTrue: [self error: 'bitsPerPixel must be 1, 2, 4, 8, 16 or 32']. depth := bitsPerPixel! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MarcusDenker 9/13/2013 14:03' prior: 48557998! becomeCompact: aClass "Make the class compact. This means: - to find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index. "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MarcusDenker 9/13/2013 14:03' prior: 48559108! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index.! ! !EventHandler methodsFor: 'initialization' stamp: 'MarcusDenker 9/13/2013 14:05' prior: 21262001! on: eventName send: selector to: recipient withValue: value selector numArgs = 3 ifFalse: [self error: 'Warning: value parameters are passed as first of 3 arguments']. self on: eventName send: selector to: recipient. valueParameter := value ! ! !FileList methodsFor: 'private' stamp: 'MarcusDenker 9/13/2013 14:04' prior: 21882028! contents "Answer the contents of the file, reading it first if needed." "Possible brevityState values: FileList, fullFile, briefFile, needToGetFull, needToGetBrief, fullHex, briefHex, needToGetFullHex, needToGetBriefHex" self reference isReadable ifFalse: [ ^ 'cannot read {1}' translated format: { reference }]. (listIndex = 0) | (brevityState == #FileList) ifTrue: [^ self defaultContents]. "no file selected" brevityState == #fullFile ifTrue: [^ contents]. brevityState == #fullHex ifTrue: [^ contents]. brevityState == #briefFile ifTrue: [^ contents]. brevityState == #briefHex ifTrue: [^ contents]. brevityState == #needToGetFullHex ifTrue: [^ self readContentsHex: false]. brevityState == #needToGetBriefHex ifTrue: [^ self readContentsHex: true]. brevityState == #needToGetFull ifTrue: [^ self readContentsBrief: false]. brevityState == #needToGetBrief ifTrue: [^ self readContentsBrief: true]. "default" (TextConverter allEncodingNames includes: brevityState) ifTrue: [ ^self readContentsAsEncoding: brevityState]. self error: 'unknown state ' , brevityState printString! ! !BitBlt methodsFor: 'private' stamp: 'MarcusDenker 9/13/2013 14:06' prior: 18168538! paintBits "Perform the paint operation, which requires two calls to BitBlt." | color oldMap saveRule | sourceForm depth = 1 ifFalse: [ ^ self error: 'paint operation is only defined for 1-bit deep sourceForms' ]. saveRule := combinationRule. color := halftoneForm. halftoneForm := nil. oldMap := colorMap. "Map 1's to ALL ones, not just one" self colorMap: (Bitmap with: 0 with: 4294967295). combinationRule := Form erase. self copyBits. "Erase the dest wherever the source is 1" halftoneForm := color. combinationRule := Form under. self copyBits. "then OR, with whatever color, into the hole" colorMap := oldMap. combinationRule := saveRule " | dot | dot := Form dotOfSize: 32. ((BitBlt destForm: Display sourceForm: dot fillColor: Color lightGray combinationRule: Form paint destOrigin: Sensor cursorPoint sourceOrigin: 0@0 extent: dot extent clipRect: Display boundingBox) colorMap: (Bitmap with: 0 with: 16rFFFFFFFF)) copyBits"! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MarcusDenker 9/13/2013 14:05' prior: 48554384! becomeCompact: aClass "Make the class compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self halt: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MarcusDenker 9/13/2013 14:05' prior: 48555445! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self halt: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self halt: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Caller must convert the instances" ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'MarcusDenker 9/13/2013 14:02' prior: 25190637! workingCopyList ^ self workingCopies collect: [:ea | (workingCopy notNil and: [workingCopy requiredPackages includes: ea package]) ifTrue: [Text string: ea description] ifFalse: [ea description]]! ! BorderedMorph removeSelector: #addPaneHSplitterBetween:and:! Text class removeSelector: #string:emphasis:! MailMessage removeSelector: #rewriteFields:append:! MailMessage removeSelector: #canonicalFields! "Graphics-Display Objects"! "Graphics-Primitives"! "Kernel"! "MonticelloGUI"! "Morphic-Base"! "Network-Mail"! "Polymorph-Widgets"! "Slot"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(13 September 2013 2:26:06 pm) Pharo.image priorSource: 17742224! ----STARTUP----an Array(13 September 2013 2:32:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 September 2013 2:32:19 pm) Pharo-30396.image priorSource: 17760787! !ScriptLoader commentStamp: '' prior: 49057722! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./prepare.sh scripts and before that one you should do a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: '' prior: 68092802! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./prepare.sh scripts and before that one you should do a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----an Array(14 September 2013 12:23:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/14/2013 12:21' prior: 68074186! commentForCurrentUpdate ^ '11602 No taskback icon for the debugger https://pharo.fogbugz.com/f/cases/11602 11589 Improve / Update GoferMetacelloLoad https://pharo.fogbugz.com/f/cases/11589 11584 Can not open Pharo if .changes has not write access https://pharo.fogbugz.com/f/cases/11584'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/14/2013 12:21'! script189 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.206.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-StephaneDucasse.119.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-StephaneDucasse.1609.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.157.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.106.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-StephaneDucasse.910.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.46.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.65.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-StephaneDucasse.386.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-StephaneDucasse.152.mcz Spec-Debugger-MarcusDenker.113.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1257.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-StephaneDucasse.11.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/14/2013 12:21'! update30397 "self new update30397" self withUpdateLog: '11602 No taskback icon for the debugger https://pharo.fogbugz.com/f/cases/11602 11589 Improve / Update GoferMetacelloLoad https://pharo.fogbugz.com/f/cases/11589 11584 Can not open Pharo if .changes has not write access https://pharo.fogbugz.com/f/cases/11584'. self loadTogether: self script189 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GoferMetacelloLoad commentStamp: '' prior: 0! I am a Gofer Operation that extracts a metacello configuration from the current repository and loads the given version.! !GoferConfigurationReference commentStamp: '' prior: 0! A GoferPackageReference refers to the latest version of a Monticello package representing a Metacello Configuration.! !GoferMetacelloLoad commentStamp: '' prior: 68121217! I am a Gofer Operation that extracts a metacello configuration from the current repository and loads the given version.! !GoferMetacelloLoad methodsFor: 'accessing' stamp: 'CamilloBruni 9/12/2013 11:05' prior: 22921153! configuration ^ self configurationReference project! ! !GoferMetacelloLoad methodsFor: 'accessing' stamp: 'CamilloBruni 9/12/2013 11:04' prior: 22921293! configurationReference ^ gofer references detect: [ :ref | ref isConfigurationReference ] ifNone: [ gofer configuration. ^ self configurationReference ].! ! !GoferMetacelloLoad methodsFor: 'running' stamp: 'CamilloBruni 9/12/2013 10:58' prior: 22922000! loadConfiguration self metacelloVersion load! ! !GoferMetacelloLoad methodsFor: 'accessing' stamp: 'CamilloBruni 9/12/2013 11:09'! metacelloVersion | configuration | configuration := self configuration project. self version ifNil: [ ^ configuration stableVersion ]. "Now let's wrap Metcaello's strange behaviors of distinguishing strings and symbols" [ "First we try to load the latest version for a given version string" ^ (configuration latestVersion: self version) ifNil: [ "If that doesn't work we use the default version lookup to find a version with the given name" configuration version: self version ] ] on: MetacelloVersionDoesNotExistError do: [ :error | ^ self version = 'last' ifTrue: [ "manual fallback since there is no symbolic name for lastVersion" configuration lastVersion ] ifFalse: [ "symbols and strings are not equal in Meteacello..." configuration version: self version asSymbol ]].! ! !SpecPreDebugWindow class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'AndreiChis 9/14/2013 11:03'! taskbarIcon ^ self debuggerClass taskbarIcon! ! !SpecPreDebugWindow methodsFor: '*Polymorph-TaskbarIcons' stamp: 'AndreiChis 9/14/2013 11:03'! taskbarIcon ^ self class taskbarIcon! ! !SpecDebugger class methodsFor: '*Polymorph-TaskbarIcons' stamp: 'AndreiChis 9/14/2013 11:01'! taskbarIcon ^ Smalltalk ui icons smallDebugIcon! ! !SpecDebugger methodsFor: '*Polymorph-TaskbarIcons' stamp: 'AndreiChis 9/14/2013 11:01'! taskbarIcon ^ self class taskbarIcon! ! !PharoFilesOpener methodsFor: 'helper' stamp: 'DamienCassou 9/13/2013 16:16'! ignoreIfFail: aBlock ^ [ aBlock value ] ifError: [ ]! ! !PharoFilesOpener methodsFor: 'open changes' stamp: 'DamienCassou 9/13/2013 16:16' prior: 49377296! openChanges: changesPath | fileColocatedWithImage fileInWorkingDirectory locations | fileColocatedWithImage := changesPath asFileReference. fileInWorkingDirectory := FileSystem workingDirectory / fileColocatedWithImage basename. "locations references all possible path where to search for the .changes file." locations := Array with: fileColocatedWithImage with: fileInWorkingDirectory. "We first try to open a writeStream and, if we can't, we open a readStream. We have to use #ignoreIfFail: here because Pharo has no way to really tell us beforehand if opening a writeStream will work. Sending #isWritable is not enough because #isWritable does not check if the current user is the owner of the file or not." locations do: [ :file | self ignoreIfFail: [ ^ file writeStream ] ]. locations do: [ :file | self ignoreIfFail: [ ^ file readStream ] ]. ^ nil! ! !GoferConfigurationReference commentStamp: '' prior: 68121406! A GoferPackageReference refers to the latest version of a Monticello package representing a Metacello Configuration.! !Gofer methodsFor: 'operations' stamp: 'CamilloBruni 9/12/2013 11:00' prior: 22892023! loadDevelopment "Load the development version of the previously specifed configuration." ^ self loadVersion: #development! ! GoferMetacelloLoadDevelopment removeSelector: #version:! GoferMetacelloLoadDevelopment removeSelector: #loadConfiguration! GoferMetacelloLoadDevelopment removeSelector: #initialize! Smalltalk globals removeClassNamed: #GoferMetacelloLoadDevelopment! "Gofer-Core"! "Polymorph-TaskbarIcons"! "System-Support"! ----End fileIn----! ----QUIT----an Array(14 September 2013 12:23:59 pm) Pharo.image priorSource: 17760996! ----STARTUP----an Array(14 September 2013 12:30:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 September 2013 12:30:11 pm) Pharo-30397.image priorSource: 17793973! ----STARTUP----an Array(14 September 2013 4:10:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/14/2013 16:07' prior: 68110029! commentForCurrentUpdate ^ '11599 Transcript menu is broken https://pharo.fogbugz.com/f/cases/11599 11600 RBPlatform and RBPharoPlatform can be removed https://pharo.fogbugz.com/f/cases/11600 11604 remove more sender of #halt: https://pharo.fogbugz.com/f/cases/11604 11496 SpecDebugger close window keyboard shortcut not working when freshly opened https://pharo.fogbugz.com/f/cases/11496 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/14/2013 16:08'! script190 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.206.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-StephaneDucasse.119.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1611.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.106.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.208.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-StephaneDucasse.910.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.43.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1257.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/14/2013 16:08'! update30398 "self new update30398" self withUpdateLog: '11599 Transcript menu is broken https://pharo.fogbugz.com/f/cases/11599 11600 RBPlatform and RBPharoPlatform can be removed https://pharo.fogbugz.com/f/cases/11600 11604 remove more sender of #halt: https://pharo.fogbugz.com/f/cases/11604 11496 SpecDebugger close window keyboard shortcut not working when freshly opened https://pharo.fogbugz.com/f/cases/11496 '. self loadTogether: self script190 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 42574708! See rationale! !ThreadSafeTranscript commentStamp: '' prior: 46294356! I'm an output device. Transcript show: 'hello'. ! !RBSmalllintChecker commentStamp: '' prior: 42597531! I apply a lint rule to all classes and methods in a given environment. My main API is - ==run== which resets and runs the rules.! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 68137548! See rationale! !RBCodeCruftLeftInMethodsRule methodsFor: '*Manifest-Core' stamp: 'StephaneDucasse 9/13/2013 21:33' prior: 30424869! longDescription ^ 'This smell arises when a breakpoints, logging statements, etc is found in a method. This debugging code should not be left in production code. Here are messages currently checked: clearHaltOnce, doOnlyOnce: , halt, halt: onCount: object2, haltOnCount: , haltOnce, hatIf: , inspectOnCount: , inspectOnce, inspectUntilCount: , rearmOneShot, setHaltOnce, flag: , isThisEverCalled, isThisEverCalled: , logEntry, logExecution, logExit, needsWork and Transcript message:'! ! !CompiledMethod methodsFor: 'testing' stamp: 'MarcusDenker 9/14/2013 10:29' prior: 19840063! hasReportableSlip "Answer whether the receiver contains anything that should be brought to the attention of the author when filing out. Customize the lists here to suit your preferences. If slips do not get reported in spite of your best efforts here, make certain that the Preference 'checkForSlips' is set to true." #(#doOnlyOnce: #halt #halt: #printDirectlyToDisplay #toRemove #urgent #haltOnce #haltOnce: #haltIf:) do: [ :aLit | (self hasLiteral: aLit) ifTrue: [ ^ true ] ]. #(#Transcript #AA #BB #CC #DD #EE) do: [ :aSymbol | (Smalltalk globals associationAt: aSymbol ifAbsent: [ ]) ifNotNil: [ :assoc | (self hasLiteral: assoc) ifTrue: [ ^ true ] ] ]. ^ false! ! !NewValueHolder methodsFor: 'announcements' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 28447155! addDependent: aDependent self error: 'Former API, should be changed'.! ! !ThreadSafeTranscript commentStamp: '' prior: 68137631! I'm an output device. Transcript show: 'hello'. ! !ThreadSafeTranscript methodsFor: 'menu' stamp: 'JFLefevre 9/13/2013 16:36'! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" ^ shifted ifTrue: [SmalltalkEditor shiftedYellowButtonMenu] ifFalse: [SmalltalkEditor yellowButtonMenu].! ! !RBCommentChange methodsFor: 'private' stamp: 'StephaneDucasse 9/13/2013 21:45' prior: 30437889! primitiveExecute self changeClass classComment: comment stamp: self changeStamp. SystemAnnouncer uniqueInstance classCommented: self changeClass! ! !RBCommentChange methodsFor: 'printing' stamp: 'StephaneDucasse 9/13/2013 21:45' prior: 30437558! printOn: aStream aStream nextPutAll: self displayClassName; nextPutAll: ' classComment: '; print: (self comment copyReplaceAll: '!!' with: '!!!!'); nextPutAll: ' stamp: '; print: (self changeStamp); nextPutAll: '!!'! ! !RBAddMethodChange methodsFor: 'printing' stamp: 'StephaneDucasse 9/13/2013 21:43' prior: 30203593! printOn: aStream aStream nextPut: $!!; nextPutAll: self displayClassName; nextPutAll: ' methodsFor: '''; nextPutAll: self protocol; nextPutAll: ''' stamp: '; print: self changeStamp; nextPut: $!!; cr; nextPutAll: (source copyReplaceAll: '!!' with: '!!!!'); nextPutAll: '!! !!'! ! !RBRefactoryChange methodsFor: 'accessing' stamp: 'StephaneDucasse 9/13/2013 21:43'! changeStamp ^ Author changeStamp! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 68085320! becomeCompact: aClass "Make the class compact. This means: - to find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self error: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self error: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index. "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !OldClassBuilderAdapter methodsFor: 'adapted api' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 68086453! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self error: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self error: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so instances will be compact. The layout has the responsibility for setting the format." aClass layout compactClassIndex: index.! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 68089906! becomeCompact: aClass "Make the class compact. This means: - find a free slot in 'Smalltalk compactClassArray' - add the class in that array - update the format of the class with the index - update the instances of the class " | compactClassesArray index | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self error: aClass name , 'is already compact']. index := compactClassesArray indexOf: nil ifAbsent: [^ self error: 'compact class table is full']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Make up new instances and become old ones into them" aClass updateInstancesFrom: aClass. "Purge any old instances" Smalltalk garbageCollect.! ! !ClassBuilder methodsFor: 'compact classes' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 68090987! becomeCompact: aClass simplyAt: index "The same as #becomeCompact: but without updating the instances." | compactClassesArray | aClass isWeak ifTrue: [^ self error: 'You must not make a weak class compact']. compactClassesArray := Smalltalk compactClassesArray. (aClass isCompact or: [compactClassesArray includes: aClass]) ifTrue: [^ self error: aClass name, 'is already compact']. (compactClassesArray at: index) ifNotNil: [^ self error: 'compact table slot already in use']. "Install this class in the compact class table" compactClassesArray at: index put: aClass. "Update instspec so future instances will be compact" aClass setFormat: aClass format + (index bitShift: 11). "Caller must convert the instances" ! ! !Object methodsFor: 'flagging' stamp: 'MarcusDenker 9/14/2013 10:28' prior: 28622157! isThisEverCalled: msg "Send this message, with some useful printable argument, from methods or branches of methods which you believe are never reached." self error: 'This is indeed called: ', msg printString! ! !RBSmalllintChecker commentStamp: '' prior: 68137748! I apply a lint rule to all classes and methods in a given environment. My main API is - ==run== which resets and runs the rules.! !SpecDebugger class methodsFor: 'menu' stamp: 'AndreiChis 9/14/2013 10:43' prior: 46071725! menuStackAction: aBuilder (aBuilder item: #'Restart (r)') "keyText: 'r';" selector: #restartAction. (aBuilder item: #'Proceed (p)') "keyText: 'p';" selector: #resumeAction. (aBuilder item: #'Step Over (t)') "keyText: 't';" selector: #stepOverAction. (aBuilder item: #'Step Through (T)') "keyText: 'T';" selector: #stepThroughAction. (aBuilder item: #'Step Into (e)') "keyText: 'e';" selector: #stepIntoAction. (aBuilder item: #'Where') "keyText: 'w';" selector: #whereIsAction. (aBuilder item: #'Peel to first like this') selector: #peelToFirst; withSeparatorAfter. (aBuilder item: #'Return entered value') selector: #returnValue; withSeparatorAfter. (aBuilder item: #'Toggle break on entry') selector: #toggleBreakOnEntry.! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 9/14/2013 10:44' prior: 45975942! shortCuts "Answers a dictionary of the shortcuts usable in debugger" |shortCuts| shortCuts := Dictionary new. shortCuts at: $r command put: [self toolbar restartAction]. shortCuts at: $p command put: [self toolbar resumeAction]. shortCuts at: $t command put: [self toolbar stepOverAction]. shortCuts at: $t command shift put: [self toolbar stepThroughAction]. shortCuts at: $e command put: [self toolbar stepIntoAction]. "shortCuts at: $w command put: [self toolbar whereIsAction]." shortCuts at: $n command put: [self toolbar browseSendersOfMessages]. shortCuts at: $m command put: [self toolbar browseMessages]. shortCuts at: $i command put: [self toolbar methodHierarchy]. shortCuts at: $v command put: [self toolbar browseVersions]. shortCuts at: $n command shift put: [self toolbar browseClassRefs]. shortCuts at: $b command put: [self toolbar browseMethodFull]. ^shortCuts! ! "Kernel"! "Manifest-Core"! "Refactoring-Changes"! "Refactoring-Critics"! "Slot"! "Spec-Core"! "Spec-Debugger"! "Transcript"! ----End fileIn----! ----QUIT----an Array(14 September 2013 4:10:59 pm) Pharo.image priorSource: 17794184! ----STARTUP----an Array(14 September 2013 4:17:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 September 2013 4:17:09 pm) Pharo-30398.image priorSource: 17815978! ----STARTUP----an Array(14 September 2013 5:55:50 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/14/2013 17:52' prior: 68126143! commentForCurrentUpdate ^ '11569 World > System > System Reporter Win32 Environment Variables https://pharo.fogbugz.com/f/cases/11569 11608 #testSendSuper failing https://pharo.fogbugz.com/f/cases/11608 11598 shadowForm is very slow for what it does https://pharo.fogbugz.com/f/cases/11598'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/14/2013 17:52'! script191 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.206.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-StephaneDucasse.119.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1611.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-StephaneDucasse.161.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.75.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.108.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-StephaneDucasse.910.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1257.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/14/2013 17:52'! update30399 "self new update30399" self withUpdateLog: '11569 World > System > System Reporter Win32 Environment Variables https://pharo.fogbugz.com/f/cases/11569 11608 #testSendSuper failing https://pharo.fogbugz.com/f/cases/11608 11598 shadowForm is very slow for what it does https://pharo.fogbugz.com/f/cases/11598'. self loadTogether: self script191 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HandMorph methodsFor: 'drawing' stamp: 'LucasGiudice 9/14/2013 12:01' prior: 23231606! shadowForm "Return a 1-bit shadow of my submorphs. Assumes submorphs is not empty" | bnds canvas | "Usually there is one submorph, if that is the case we delegate to it for optimizing it" submorphs size = 1 ifTrue: [ ^ submorphs first shadowForm ]. bnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). canvas := (Display defaultCanvasClass extent: bnds extent depth: 1) asShadowDrawingCanvas: Color black. canvas translateBy: bnds topLeft negated during:[:tempCanvas| self drawSubmorphsOn: tempCanvas]. ^ canvas form offset: bnds topLeft! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 9/14/2013 17:31' prior: 35021584! testSendSuper | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushReceiver; send: #isThisEverCalled toSuperOf: self class; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self should: [(aCompiledMethod valueWithReceiver: (self class new) arguments: #())] raise: Error. ^iRMethod ! ! !SystemWindow methodsFor: 'as yet unclassified' stamp: 'LucasGiudice 9/14/2013 11:58'! shadowForm "Optimized version of shadowForm for this rectangular shaped morph." | canvas | canvas := (Display defaultCanvasClass extent: self fullBounds extent depth: 1) asShadowDrawingCanvas: Color black. "Color black represents one for 1bpp" canvas fillColor: Color black. ^ canvas form offset: bounds topLeft ! ! !Win32Environment methodsFor: 'enumeration' stamp: 'MarcusDenker 9/12/2013 14:51' prior: 36994672! keysAndValuesDo: aBlock "Under windows the environemtn variables are a single big String." "Lines starting with an equal sign are invalid per http://stackoverflow.com/questions/10431689/what-are-these-strange-environment-variables" | environmentStrings nexString | environmentStrings := self environmentStrings. [ nexString := environmentStrings readString. nexString ifEmpty: [ ^ self ]. nexString first = $= ifFalse: [ self keysAndValuesDo: aBlock withAssociationString: nexString ]. environmentStrings := NBExternalAddress value: environmentStrings value + nexString size + 1 ] repeat! ! "Morphic-Base"! "OpalCompiler-Tests"! "System-Platforms"! ----End fileIn----! ----QUIT----an Array(14 September 2013 5:56:01 pm) Pharo.image priorSource: 17816187! ----STARTUP----an Array(14 September 2013 6:02:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 September 2013 6:02:51 pm) Pharo-30399.image priorSource: 17829961! ----STARTUP----an Array(14 September 2013 7:21:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/14/2013 19:19' prior: 68148145! commentForCurrentUpdate ^ '11582 Add first-class shortcut categories - Step 1 https://pharo.fogbugz.com/f/cases/11582 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/14/2013 19:19'! script192 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.206.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-StephaneDucasse.119.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1611.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.108.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-StephaneDucasse.8.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-StephaneDucasse.910.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-StephaneDucasse.40.mcz Spec-Inspector-MarcusDenker.70.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1258.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.114.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/14/2013 19:19'! update30400 "self new update30400" self withUpdateLog: '11582 Add first-class shortcut categories - Step 1 https://pharo.fogbugz.com/f/cases/11582 '. self loadTogether: self script192 merge: false. KMRepository reset. EditorFindReplaceDialogWindow startUp. self flushCaches. ! ! "ScriptLoader30"! !KMCategoryBinding commentStamp: '' prior: 0! I am the reification of the relation morph<->category, created when a morph gets attached a category of shortcuts.! !KMCategoryTarget class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24117436! target: aTarget morph: aMorph category: aCategory ^self new target: aTarget; category: aCategory; morph: aMorph; yourself! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 36805612! category ^ category! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24115829! category: aCategory category := aCategory! ! !KMCategoryTarget methodsFor: 'matching' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 36805735! completeMatch: aKeymap buffer: aBuffer KMLog log: 'Complete match: ', aKeymap printString. KMBuffer uniqueInstance completeMatch. aKeymap action cull: target value cull: morph cull: aBuffer first. ! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 36806043! morph ^ morph! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24115961! morph: aMorph morph := aMorph! ! !KMCategoryTarget methodsFor: 'iterating' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 36806145! nextForKmChain: aKMDispatchChain ^self target! ! !KMCategoryTarget methodsFor: 'matching' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24116488! noMatch "do nothing" ! ! !KMCategoryTarget methodsFor: 'matching' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24116600! partialMatch "do nothing" ! ! !KMCategoryTarget methodsFor: 'printing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24117063! printOn: aStream aStream nextPutAll: 'aKMCategoryTarget('; nextPutAll: (category name ifNil: 'nil' ifNotNil: [ :n | n printString ]); nextPutAll: ')'.! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 36806299! target ^ target! ! !KMCategoryTarget methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24116081! target: aTarget target := aTarget! ! !KMCategoryTarget methodsFor: 'matching' stamp: 'MarcusDenker 9/12/2013 09:53' prior: 24116719! verifyMatchWith: anEventBuffer notifying: aListener thenDoing: anAction self flag: #fixme. "ugly hack with array of listeners" category onMatchWith: anEventBuffer notify: { self . aListener } " first we have to tell the dispatcher " andDo: anAction! ! !KMDispatcher methodsFor: 'building' stamp: 'MarcusDenker 9/11/2013 13:07' prior: 24134236! attachCategory: aCategoryName onProperty: aProperty self targets add: (KMCategoryBinding target: [ morph perform: aProperty ] morph: morph category: (KMRepository default categoryForName: aCategoryName) )! ! !KMDispatcher methodsFor: 'building' stamp: 'MarcusDenker 9/11/2013 13:07' prior: 36820192! attachCategory: aCategory targetting: anObject | category categoryTarget | category := aCategory asKmCategoryIn: KMRepository default. categoryTarget := category bindToObject: anObject andMorph: morph. self targets add: categoryTarget.! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24136149! directKeymaps ^directKeymaps ifNil: [ directKeymaps := KMCategory new ]! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'MarcusDenker 9/11/2013 13:07' prior: 36821766! keymapObserversForCategories: categories ^categories collect: [ :cat | KMCategoryBinding target: target realTarget morph: target morph category: cat ].! ! !KMDispatcher methodsFor: 'dispatching' stamp: 'MarcusDenker 9/11/2013 13:07' prior: 24137390! perInstanceTarget ^KMCategoryBinding target: morph morph: morph category: self directKeymaps.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24140610! testAttach | morph category | category := KMCategory named: #TestBlah. morph := BorderedMorph new. morph kmDispatcher reset. morph kmDispatcher targets isEmpty ifFalse: [ self error: 'should be empty' ]. KMRepository default addCategory: category. morph attachKeymapCategory: #TestBlah. morph attachKeymapCategory: #TestBlah. self assert: morph kmDispatcher targets size equals: 1.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 36812799! testBuffering | morph flag category event1 event2 event3| category := KMCategory named: #TestBlah. KMRepository default addCategory: category. morph := BorderedMorph new. morph kmDispatcher reset. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag := true]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination, $p asKeyCombination action: []). morph attachKeymapCategory: #TestBlah. event1 := self eventKey: $a. morph kmDispatcher dispatchKeystroke: event1. self assert: morph kmDispatcher buffer size equals: 1. self assert: morph kmDispatcher buffer first equals: event1. event2 := self eventKey: $b. morph kmDispatcher dispatchKeystroke: event2. self assert: morph kmDispatcher buffer size = 2. self assert: morph kmDispatcher buffer first = event1. self assert: morph kmDispatcher buffer second = event2. event3 := self eventKey: $c. morph kmDispatcher dispatchKeystroke: event3. self assert: morph kmDispatcher buffer isEmpty. self assert: flag.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24142263! testDetach | category1 category2 morph attachedCategories | category1 := KMCategory named: #TestBlah. category2 := KMCategory named: #TestAnother. morph := BorderedMorph new. KMRepository default addCategory: category1. KMRepository default addCategory: category2. morph kmDispatcher reset. morph attachKeymapCategory: #TestBlah. morph attachKeymapCategory: #TestAnother. morph kmDispatcher targets size = 2 ifFalse: [ self error: 'should have one category attached' ]. morph detachKeymapCategory: #TestBlah. attachedCategories := morph kmDispatcher targets collect: [ :e | e category name ]. self assert: attachedCategories asArray equals: { #TestAnother }. self should: [ morph detachKeymapCategory: #NonExistent ] raise: Error.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 36814013! testNoMultiTrigger | bm1 bm2 flag1 flag2 category otherCategory | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. bm1 := BorderedMorph new. bm1 attachKeymapCategory: #TestBlah. flag1 := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := KMMockMorph new. bm2 attachKeymapCategory: #TestFoo. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. self deny: flag1. self assert: flag2.! ! !KMDispatcherTestCase methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 36815001! testNoStaggeredTrigger "Once a key sequence is recognized by a keymapper, all other keymappers should clear their buffers" | bm1 bm2 flag1 flag2 category otherCategory bufferBefore | category := KMCategory named: #TestBlah. otherCategory := KMCategory named: #TestFoo. KMRepository default addCategory: category. KMRepository default addCategory: otherCategory. bm1 := BorderedMorph new. bm1 attachKeymapCategory: category. flag1 := false. category addKeymapEntry: ( KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [flag1 := true]). bm2 := Morph new. bm2 attachKeymapCategory: otherCategory. flag2 := false. otherCategory addKeymapEntry: (KMKeymap named: #Bar shortcut: $a asKeyCombination, $b asKeyCombination action: [flag2 := true]). bm1 addMorphBack: bm2. bufferBefore := bm2 kmDispatcher buffer copy. {self eventKey: $a. self eventKey: $b. self eventKey: $c} do: [:e | bm2 dispatchKeystrokeForEvent: e]. flag1 ifTrue: [ bufferBefore inspect ]. self deny: flag1. self assert: flag2.! ! !CompiledMethod methodsFor: '*Keymapping-Core' stamp: 'MarcusDenker 9/11/2013 13:20'! isShortcutDeclaration ^self pragmas anySatisfy: [ :p | p keyword = #shortcut ]! ! !KMDispatchChainTest methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 9/11/2013 14:47' prior: 36816907! testTargetDoesNotIterateTheNil | chain | chain := KMDispatchChain from: (KmGlobalDispatcher new) andDispatcher: (KMDispatcher new). chain do: [ :target | self assert: target notNil ].! ! !Spotlight class methodsFor: 'keymappings' stamp: 'MarcusDenker 9/11/2013 13:15'! toggle Current ifNotNil: [ Current close. Current := nil ] ifNil: [ (Current := self new) open ]! ! !KMRepository class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24175355! reset "Do not reset KMDispatchers instances, it may make the image unusable or force the user to close all the windows." "TODO: a better reset, allowing the KMDispatcher instances to reload all named, updated, keymaps from the resetted KMRepository." World setProperty: #kmDispatcher toValue: nil. self default: self new. KMCategory allSubclasses select: [ :c | c isGlobalCategory ] thenDo: [ :c | c new installAsGlobalCategory ]. KMPragmaKeymapBuilder uniqueInstance reset.! ! !KMRepository methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24171922! categoryForName: aCategorySymbol ^ self categories at: aCategorySymbol ifAbsentPut: [ KMCategory named: aCategorySymbol ]! ! !KMRepository methodsFor: 'accessing' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24172287! ensureCategoryByName: aCategorySymbol | category | (self includesCategoryNamed: aCategorySymbol) ifFalse: [ category := KMCategory named: aCategorySymbol. self addCategory: category ] ifTrue: [ category := self categoryForName: aCategorySymbol ]. ^ category! ! !KMCategory methodsFor: 'binding' stamp: 'MarcusDenker 9/11/2013 13:10' prior: 36819792! asKmCategoryIn: aKmRepository "Maybe we should validate we exist in the repository?" ^ self! ! !KMCategory methodsFor: 'binding' stamp: 'MarcusDenker 9/11/2013 13:07'! bindToObject: anObject andMorph: aMorph ^ KMCategoryBinding target: anObject morph: aMorph category: self.! ! !KMCategory methodsFor: 'initialize-release' stamp: 'MarcusDenker 9/11/2013 13:29'! buildKeymapOnMethod: method self addKeymapEntry: (self perform: method selector)! ! !KMCategory methodsFor: 'initialize-release' stamp: 'MarcusDenker 9/11/2013 13:21'! initialize super initialize. self class methods select: [ :m | m isShortcutDeclaration ] thenDo: [ :m | self buildKeymapOnMethod: m ]! ! !KMCategory methodsFor: 'binding' stamp: 'MarcusDenker 9/11/2013 13:26'! installAsGlobalCategory KMRepository default setAsGlobalCategory: self! ! !SpotlightShortcuts class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 9/11/2013 15:30'! isGlobalCategory ^ true! ! !SpotlightShortcuts methodsFor: 'keymaps' stamp: 'MarcusDenker 9/11/2013 13:23'! keymapToggle ^ KMKeymap shortcut: Character cr shift action: [ Spotlight toggle ]! ! !KMCategoryTest methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 33990299! testAddKeymapToCategory | categoryToAdd entry | categoryToAdd := KMCategory named: #TestCategory. entry := KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: [ "nothing" ]. self assert: (categoryToAdd allEntries) size = 0. categoryToAdd addKeymapEntry: entry. self assert: (categoryToAdd allEntries) size = 1.! ! !KMCategoryTest methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 24118847! testCreateUnexistentCategory | categoryToAdd | categoryToAdd := KMCategory named: #TestCategory. self assert: self categoryContainer categories size = 0. self categoryContainer addCategory: categoryToAdd. self assert: self categoryContainer categories size = 1. self assert: (self categoryContainer includesCategory: categoryToAdd).! ! !KMKeymapTest methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 36822547! testExecute | bm km flag category | category := KMCategory named: #TestFoo. KMRepository default addCategory: category. bm := KMMockMorph new. bm attachKeymapCategory: #TestFoo. flag := false. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination , $b asKeyCombination , $c asKeyCombination action: [ flag := true ]). category addKeymapEntry: (KMKeymap named: #Bar shortcut: $p asKeyCombination , $p asKeyCombination action: [ ]). {(self eventKey: $a). (self eventKey: $b). (self eventKey: $c)} do: [ :e | bm dispatchKeystrokeForEvent: e ]. self assert: flag! ! !KMKeymapTest methodsFor: 'tests' stamp: 'MarcusDenker 9/12/2013 10:03' prior: 34004400! testMatching | category blockAction a b c p| a := self eventKey: $a. b := self eventKey: $b. c := self eventKey: $c. p := self eventKey: $p. blockAction := [self error: 'error']. category := KMCategory named: #testCategory. category addKeymapEntry: (KMKeymap named: #Foo shortcut: $a asKeyCombination, $b asKeyCombination, $c asKeyCombination action: blockAction). category addKeymapEntry: (KMKeymap named: #Fum shortcut: $p asKeyCombination, $p asKeyCombination action: blockAction). self assert: (category matches: {a}). self deny: (category matches: {b}). self assert: (category matches: {a. b}). self assert: (category matchesCompletely: {a. b. c}). self assert: (category matches: {p}). self assert: (category matchesCompletely: {p. p.}). self deny: (category matches: {a. p. p}). self deny: (category matches: {self eventKey: $l. self eventKey: $m. self eventKey: $n. self eventKey: $o}).! ! !KMCategoryBinding commentStamp: '' prior: 68173008! I am the reification of the relation morph<->category, created when a morph gets attached a category of shortcuts.! !KMCategoryBinding class methodsFor: 'instance creation' stamp: 'GuillermoPolito 10/20/2011 19:05'! target: aTarget morph: aMorph category: aCategory ^self new target: aTarget; category: aCategory; morph: aMorph; yourself! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19'! category ^ category! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'GuillermoPolito 10/20/2011 18:37'! category: aCategory category := aCategory! ! !KMCategoryBinding methodsFor: 'matching' stamp: 'GuillermoPolito 5/4/2013 15:40'! completeMatch: aKeymap buffer: aBuffer KMLog log: 'Complete match: ', aKeymap printString. KMBuffer uniqueInstance completeMatch. aKeymap action cull: target value cull: morph cull: aBuffer first. ! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19'! morph ^ morph! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'GuillermoPolito 10/20/2011 19:05'! morph: aMorph morph := aMorph! ! !KMCategoryBinding methodsFor: 'iterating' stamp: 'GuillermoPolito 5/3/2013 17:49'! nextForKmChain: aKMDispatchChain ^self target! ! !KMCategoryBinding methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 18:53'! noMatch "do nothing" ! ! !KMCategoryBinding methodsFor: 'matching' stamp: 'GuillermoPolito 10/20/2011 18:53'! partialMatch "do nothing" ! ! !KMCategoryBinding methodsFor: 'printing' stamp: 'SeanDeNigris 7/17/2012 09:04'! printOn: aStream aStream nextPutAll: 'aKMCategoryTarget('; nextPutAll: (category name ifNil: 'nil' ifNotNil: [ :n | n printString ]); nextPutAll: ')'.! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2012 19:19'! target ^ target! ! !KMCategoryBinding methodsFor: 'accessing' stamp: 'GuillermoPolito 10/20/2011 18:37'! target: aTarget target := aTarget! ! !KMCategoryBinding methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 7/3/2012 14:47'! verifyMatchWith: anEventBuffer notifying: aListener thenDoing: anAction self flag: #fixme. "ugly hack with array of listeners" category onMatchWith: anEventBuffer notify: { self . aListener } " first we have to tell the dispatcher " andDo: anAction! ! Spotlight class removeSelector: #buildKeymapsOn:! "Keymapping-Core"! "Keymapping-Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(14 September 2013 7:21:59 pm) Pharo.image priorSource: 17830170! ----STARTUP----an Array(14 September 2013 7:31:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 September 2013 7:31:40 pm) Pharo-30400.image priorSource: 17858014! ----STARTUP----an Array(15 September 2013 11:28:48 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/15/2013 11:25' prior: 68162128! commentForCurrentUpdate ^ '11250 Inspector scrolls up on refresh https://pharo.fogbugz.com/f/cases/11250 11594 Activate NonInteractiveTranscript when using CommandLineUIManager https://pharo.fogbugz.com/f/cases/11594 11557 Color class>>fromRGBTriplet: is redundant now that Color holds alpha https://pharo.fogbugz.com/f/cases/11557 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/15/2013 11:25'! script193 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.17.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.206.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.123.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.120.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1611.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.861.mcz MonticelloConfigurations-StephaneDucasse.64.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.108.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.537.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.110.mcz Polymorph-Widgets-MarcusDenker.914.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-EstebanLorenzano.625.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-StephaneDucasse.24.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/15/2013 11:25'! update30401 "self new update30401" self withUpdateLog: '11250 Inspector scrolls up on refresh https://pharo.fogbugz.com/f/cases/11250 11594 Activate NonInteractiveTranscript when using CommandLineUIManager https://pharo.fogbugz.com/f/cases/11594 11557 Color class>>fromRGBTriplet: is redundant now that Color holds alpha https://pharo.fogbugz.com/f/cases/11557 '. self loadTogether: self script193 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CommandLineUIManager commentStamp: '' prior: 0! I am UI manager for a headless setup. I block all UI manager API that uses Morphs and will trow an error instead.! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! !MorphicUIManager commentStamp: 'StephaneDucasse 6/5/2011 22:19' prior: 42457892! The Morphic ui manager. I was packaged in toolbuilder and I may change in the future. For the moment, the goal is to unload toolbuilder. ! !StartupUIManager commentStamp: '' prior: 0! I am a non interactive UI manager that is used only during image startup, where parts of the system are not fully initialized yet.! !NonInteractiveTranscript commentStamp: '' prior: 42506177! I am NonInteractiveTranscript, a replacement for Transcript, writing everything to a file or stdout. This is useful when running headless. NonInteractiveTranscript file install. To connect to the output stream of the virtual machine process choose stdout. NonInteractiveTranscript stdout install. or NonInteractiveTranscript stderr install ! !ScrollPane methodsFor: '*Polymorph-Widgets' stamp: 'CamilloBruni 9/14/2013 17:20'! scrollValue: aPoint self hScrollValue: aPoint x; vScrollValue: aPoint y.! ! !VersionsBrowser class methodsFor: 'window color' stamp: 'FernandoOlivero 9/9/2013 03:18' prior: 54659899! patchworkUIThemeColor "Answer a default color for UI themes that make use of different colors for Browser, MessageList etc..." ^ Color fromArray: #(0.869 0.753 1.0) ! ! !Color class methodsFor: 'instance creation' stamp: 'FernandoOlivero 9/9/2013 03:18' prior: 19639912! colorFrom: parm "Return an instantiated color from parm. If parm is already a color, return it, else return the result of my performing it if it's a symbol or, if it is a list, it can either be an array of three numbers, which will be interpreted as RGB values, or a list of symbols, the first of which is sent to me and then the others of which are in turn sent to the prior result, thus allowing entries of the form #(blue darker). Else just return the thing" | aColor firstParm | (parm isKindOf: Color) ifTrue: [^ parm]. (parm isSymbol) ifTrue: [^ self perform: parm]. (parm isString) ifTrue: [^ self fromString: parm]. ((parm isKindOf: SequenceableCollection) and: [parm size > 0]) ifTrue: [firstParm := parm first. (firstParm isKindOf: Number) ifTrue: [^ self fromArray: parm]. aColor := self colorFrom: firstParm. parm doWithIndex: [:sym :ind | ind > 1 ifTrue: [aColor := aColor perform: sym]]. ^ aColor]. ^ parm " Color colorFrom: #(blue darker) Color colorFrom: Color blue darker Color colorFrom: #blue Color colorFrom: #(0.0 0.0 1.0) "! ! !MethodFinder methodsFor: 'initialize' stamp: 'FernandoOlivero 9/9/2013 11:13' prior: 67527221! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl asUrlRelativeTo: capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !ClassCommentVersionsBrowser class methodsFor: 'window color' stamp: 'FernandoOlivero 9/9/2013 03:18' prior: 19190094! patchworkUIThemeColor "Answer a default color for UI themes that make use of different colors for Browser, MessageList etc..." ^ Color fromArray: #(0.769 0.653 1.0) ! ! !AllInstVarsEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/14/2013 17:30' prior: 36477354! description ^ self host longPrintStringLimitedTo: 2000! ! !CommandLineUIManager commentStamp: '' prior: 68201436! I am UI manager for a headless setup. I block all UI manager API that uses Morphs and will trow an error instead.! !CommandLineUIManager methodsFor: 'private' stamp: 'CamilloBruni 9/14/2013 10:51'! activate NonInteractiveTranscript stderr install! ! !MorphicUIManager commentStamp: 'StephaneDucasse 6/5/2011 22:19' prior: 68237218! The Morphic ui manager. I was packaged in toolbuilder and I may change in the future. For the moment, the goal is to unload toolbuilder. ! !MorphicUIManager methodsFor: 'private' stamp: 'CamilloBruni 9/14/2013 00:00' prior: 27186223! activate activeTranscript ifNil: [ ThreadSafeTranscript install ] ifNotNil: [ Transcript := activeTranscript ]. SystemProgressMorph enable.! ! !MorphicUIManager methodsFor: 'private' stamp: 'CamilloBruni 9/14/2013 00:00' prior: 27186345! deactivate activeTranscript := Transcript. SystemProgressMorph disable.! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/14/2013 17:16' prior: 43580887! initializePresenter "initialize the event handlings" object whenChangedDo: [ self objectChanged ]. list whenSelectedItemChanged: [ :item | self refreshDescription: item ]. description whenTextIsAccepted: [ :newText | self saveElement: newText. self refreshDescription ]. self initializeShortcuts. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:27'! keepScrollPositionOf: specHolder during: aBlock | scrollValue | specHolder widget ifNil: [ ^ aBlock value ]. scrollValue := description widget scrollValue. aBlock value. description widget scrollValue: scrollValue.! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:10' prior: 36496950! printDescription ^ description text! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:13' prior: 39300631! printDescription: item "When you select an element in the list of the inspector, prnt on the description textModel the element selected" | newDescription | item ifNil: [ ^ self ]. newDescription := ([ item description ] on: Error do: [ 'Error while printing element' ]). description text = newDescription ifTrue: [ ^ self ]. description text: newDescription.! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/14/2013 17:13'! printTimeout ^ 10 seconds! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:14' prior: 41612081! refresh "refresh the object in the inspector, updating his modified instance variables" description hasUnacceptedEdits ifTrue: [ ^ self ]. description getSelection size = 0 ifTrue: [ self refreshDescription ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:17'! refreshDescription self refreshDescription: self selectedElement! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:31'! refreshDescription: item "When you select an element in the list of the inspector, prnt on the description textModel the element selected" | newDescription | item ifNil: [ ^ self ]. newDescription := ([ item description ] on: Error do: [ 'Error while printing element' ]). description text = newDescription ifTrue: [ ^ self ]. self keepScrollPositionOf: description during: [ description text: newDescription ].! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/14/2013 17:09'! refreshPrintDescription self printDescription: self selectedElement! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/14/2013 17:04' prior: 49424771! initializeWidgets self instantiateModels: #( text TextModel ). text announcer when: WidgetBuilt do: [ :builtAnnouncement | builtAnnouncement widget announcer when: PaneScrolling do: [ :scrollAnnouncement | self syncMorphPosition ] ]. text text: self loremIpsum.! ! !StartupUIManager commentStamp: '' prior: 68237416! I am a non interactive UI manager that is used only during image startup, where parts of the system are not fully initialized yet.! !StartupUIManager methodsFor: 'private' stamp: 'CamilloBruni 9/14/2013 10:53'! activate "override to exclude the superclass' behavior"! ! !StartupUIManager methodsFor: 'private' stamp: 'CamilloBruni 9/14/2013 10:53'! deactivate "override to exclude the superclass' behavior"! ! !NonInteractiveTranscript commentStamp: '' prior: 68237620! I am NonInteractiveTranscript, a replacement for Transcript, writing everything to a file or stdout. This is useful when running headless. NonInteractiveTranscript file install. To connect to the output stream of the virtual machine process choose stdout. NonInteractiveTranscript stdout install. or NonInteractiveTranscript stderr install ! !NonInteractiveTranscript class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/13/2013 23:57'! stderr "Create a new NonInteractiveTranscript that will output to the special standard error output stream of the virtual machine process." ^ self onFileNamed: #stderr! ! !NonInteractiveTranscript methodsFor: 'private' stamp: 'CamilloBruni 9/13/2013 23:57' prior: 28457214! initializeStream "Open the file stream that I write to or connect to #stdout. I use the proper line end convention. I will append to regular files." stream := self isStdout ifTrue: [ FileStream stdout ] ifFalse: [ self isStderr ifTrue: [ FileStream stderr ] ifFalse: [ FileStream fileNamed: self fileName ]]. stream wantsLineEndConversion: true. (self isStdout or: [ self isStderr ]) ifTrue: [ stream converter "Force lazy initialization of converter" ] ifFalse: [ stream setToEnd ]. ^ stream ! ! !NonInteractiveTranscript methodsFor: 'testing' stamp: 'CamilloBruni 9/13/2013 23:56'! isStderr ^ fileName = #stderr! ! Color class removeSelector: #fromRgbTriplet:! "Graphics-Primitives"! "NonInteractiveTranscript"! "Polymorph-Widgets"! "Spec-Examples"! "Spec-Inspector"! "Tools"! "UIManager"! ----End fileIn----! ----QUIT----an Array(15 September 2013 11:29:02 am) Pharo.image priorSource: 17858223! ----STARTUP----an Array(15 September 2013 11:35:12 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 September 2013 11:35:12 am) Pharo-30401.image priorSource: 17926649! ----STARTUP----an Array(16 September 2013 10:49:49 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/16/2013 10:45' prior: 68190182! commentForCurrentUpdate ^ '11617 ConfigurationCommandLine does not handle merge correctly https://pharo.fogbugz.com/f/cases/11617 11609 Diff morph should only use colored icons to indicate add / remove https://pharo.fogbugz.com/f/cases/11609 '! ! !ScriptLoader methodsFor: 'load primitives' stamp: 'CamilloBruni 9/15/2013 17:52' prior: 32748946! loadOneAfterTheOther: aCollection merge: aBoolean (self newerVersionsIn: aCollection) do: [:fn | | loader | loader := aBoolean ifTrue: [ MCVersionMerger new ] ifFalse: [ MCVersionLoader new]. loader addVersion: (self repository loadVersionFromFileNamed: fn). aBoolean ifTrue: [ [loader merge] on: MCMergeResolutionRequest do: [:request | request autoMerge ]] ifFalse: [loader load]]. ! ! !ScriptLoader methodsFor: 'load primitives' stamp: 'CamilloBruni 9/15/2013 17:53' prior: 32749544! loadTogether: aCollection merge: aBoolean | loader | loader := aBoolean ifTrue: [ MCVersionMerger new ] ifFalse: [ MCVersionLoader new]. (self newerVersionsIn: aCollection) do: [:fn | loader addVersion: (self loadVersionFromFileNamed: fn)] displayingProgress: 'Adding versions...'. aBoolean ifTrue: [ [loader merge] on: MCMergeResolutionRequest do: [:request | request autoMerge ]] ifFalse: [ loader hasVersions ifTrue: [loader load]] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/16/2013 10:46'! script194 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1611.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.863.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.112.mcz Polymorph-Widgets-MarcusDenker.915.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/16/2013 10:46'! update30402 "self new update30402" self withUpdateLog: '11617 ConfigurationCommandLine does not handle merge correctly https://pharo.fogbugz.com/f/cases/11617 11609 Diff morph should only use colored icons to indicate add / remove https://pharo.fogbugz.com/f/cases/11609 '. self loadTogether: self script194 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCConfiguration methodsFor: 'private' stamp: 'CamilloBruni 9/15/2013 17:58' prior: 24676128! suppressMergeDialogWhile: aBlock ^aBlock on: MCMergeResolutionRequest do: [:request | request autoMerge ]! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/15/2013 17:54' prior: 67220888! handleMergeConflictDuring: aLoadBlock [aLoadBlock on: MCMergeOrLoadWarning do: [ :mergeConflict | mergeConflict merge ]] on: MCMergeResolutionRequest do: [ :request | request autoMerge ].! ! !PSMCChangeWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/14/2013 16:25' prior: 37854583! icon "Answer a form with an icon to represent the receiver" |o| o := self operation. o isNil ifTrue: [^ Smalltalk ui icons emptyIcon ]. o isAddition ifTrue: [^ Smalltalk ui icons smallAddIcon ]. o isRemoval ifTrue: [^ Smalltalk ui icons removeIcon]. ^ Smalltalk ui icons smallForwardIconGray! ! !PSMCPatchMorph methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/14/2013 16:29' prior: 28980024! changes "Answer the changes tree roots." |changes classes| self model ifNil: [^#()]. changes := OrderedCollection new. classes := Set new. self model do: [:o | o definition isOrganizationDefinition ifTrue: [changes add: (o patchWrapper model: self model)] ifFalse: [ o targetClassName notNil ifTrue:[ (classes includes: o targetClassName) ifFalse: [classes add: o targetClassName. changes add: (PSMCClassChangeWrapper with: o targetClassName model: self model)]]]]. ^(changes reject: [:e | e isKindOf: PSMCClassChangeWrapper]) , ((changes select: [:e | e isKindOf: PSMCClassChangeWrapper]) sorted: [:a :b | a item <= b item])! ! !PSMCPatchMorph methodsFor: 'updating' stamp: 'CamilloBruni 9/14/2013 16:35'! expandChangeTree self flag: #TODO. "We should only expand the nodes wich have partial changes, if a class was added or removed there is no need to show the complete tree expanded" self changeTree expandAll.! ! !PSMCPatchMorph methodsFor: 'initialization' stamp: 'CamilloBruni 9/14/2013 16:29' prior: 48953260! initialize "Initialize the receiver." |descriptionHeight| super initialize. self diffMorph: self newDiffMorph; changeTree: self newChangeTreeMorph; descriptionMorph: self newDescriptionMorph. descriptionHeight := self descriptionMorph minExtent y. self changeProportionalLayout; addMorph: self descriptionMorph fullFrame: ((0.3@0 corner: 1@0) asLayoutFrame leftOffset: ProportionalSplitterMorph splitterWidth; bottomOffset: descriptionHeight); addMorph: self changeTree fullFrame: (0@0 corner: 0.3@1) asLayoutFrame; addMorph: self diffMorph fullFrame: ((0.3@0 corner: 1@1) asLayoutFrame topLeftOffset: ProportionalSplitterMorph splitterWidth @ descriptionHeight); addPaneSplitters. self updateDescriptionFillStyle: self paneColor. self splitters first delete. self onAnnouncement: MorphOpened do: [ self expandChangeTree ] ! ! !ThemeIcons methodsFor: '*Nautilus-icons' stamp: 'CamilloBruni 9/14/2013 16:24' prior: 37618903! removeIcon ^ icons at: #'removeIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self removeIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'CamilloBruni 9/14/2013 16:24' prior: 37619080! removeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7Yf ogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJO TWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplx Uml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A0 9RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqE L1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHL vAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw34 0/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8Ed V8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE 10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEV Atda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqG Rzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb /gAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/14/2013 16:03'! smallAddIcon "Private - Generated method" ^ icons at: #'smallAdd' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallAddIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'CamilloBruni 9/14/2013 16:10'! smallAddIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7Yv BYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61Ci jSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKS WstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+ 7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysM fh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXIt nPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbF BIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd 7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk 3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcut KBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEY ckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOx yGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/14/2013 15:45'! smallBackIconGray ^ icons at: #'smallBack' ifAbsentPut:[ self smallBackIcon asGrayScaleWithAlpha ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/14/2013 15:45'! smallForwardIconGray "Private - Generated method" ^ icons at: #'smallForwardGray' ifAbsentPut:[ self smallForwardIcon asGrayScaleWithAlpha ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/14/2013 15:45'! smallJumpIconGray ^ icons at: #'smallBack' ifAbsentPut:[ self smallJumpIcon asGrayScaleWithAlpha ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/14/2013 16:39'! stopIcon ^ icons at: #'stopIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self stopIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'CamilloBruni 9/14/2013 16:40'! stopIconContents ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJOSURBVDjLpZI9T1RBFIaf3buA oBgJ8rl6QVBJVNDCShMLOhBj6T+wNUaDjY0WmpBIgYpAjL/AShJ+gVYYYRPIony5IETkQxZ2 770zc2fGYpflQy2MJzk5J5M5z/vO5ESstfxPxA4erL4Zuh4pLnoaiUZdq7XAGKzRJVbIBZ3J PLJaD9c/eCj/CFgZfNl5qK5q8EhTXdxxLKgQjAFr0NK0ppOpt9n51D2gd2cmsvOElVcvOopr KvuPtriNzsY8rH+H0ECoQEg4WklY1czP8akZby51p6G3b6QAWBl43llSVTlUfuZE3NmYh9Vl 0HkHSuVq4ENFNWFdC+uJ5JI/9/V2Y//rkShA1HF6yk/VxJ0f07CcgkCB7+fSC8Dzcy7mp4l9 /khlUzwecaI9hT+wRrsOISylcsphCFLl1RXIvBMpYDZJrKYRjHELACNEgC/KCQQofWBQ5nuV 64UAP8AEfrDrQEiLlJD18+p7BguwfAoBUmKEsLsAGZSiFWxtgWWP4gGAkuB5YDRWylKAKIDJ ZBa1H8Kx47C1Cdls7qLnQTZffQ+20lB7EiU1ent7sQBQ6+vdq2PJ5dC9ABW1sJnOQbL5Qc/H pNOYehf/4lW+jY4vh2tr3fsWafrWzRtlDW5f9aVzjUVj72FmCqzBypBQCKzbjLp8jZUPo7OZ yYm7bYkvw/sAAFMd7V3lp5sGqs+fjRcZhVYKY0xupwysfpogk0jcb5ucffbbKu9Esv1Kl1N2 +Ekk5rg2DIXRmog1Jdr3F/Tm5mO0edc6MSP/CvjX+AV0DoH1Z+D54gAAAABJRU5ErkJggg=='! ! !PSMCClassChangeWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/14/2013 15:29' prior: 37855128! icon "Answer a form with an icon to represent the receiver" self isConflict ifTrue: [ self localChosen ifTrue: [ ^ Smalltalk ui icons smallBackIconGray ] ]. ^ super icon! ! !MCWorkingCopy methodsFor: 'operations' stamp: 'CamilloBruni 9/15/2013 17:51' prior: 25149264! merge: targetVersion | ancestorInfo merger ancestorSnapshot packageSnapshot | targetVersion dependencies do: [:ea | ea resolve merge]. ancestorInfo := targetVersion info commonAncestorWith: ancestry. ancestorInfo = targetVersion info ifTrue: [^ MCNoChangesException signal]. packageSnapshot := package snapshot. ancestorSnapshot := ancestorInfo ifNotNil: [(self findSnapshotWithVersionInfo: ancestorInfo)] ifNil: [self notifyNoCommonAncestorWith: targetVersion. MCSnapshot empty]. (ancestry ancestors size = 1 and: [ancestry ancestors first = ancestorInfo and: [(packageSnapshot patchRelativeToBase: ancestorSnapshot) isEmpty]]) ifTrue: [^ targetVersion load]. merger := MCThreeWayMerger base: packageSnapshot target: targetVersion snapshot ancestor: ancestorSnapshot. ((MCMergeResolutionRequest new merger: merger) signal: 'Merging ', targetVersion info name) = true ifTrue:[ merger loadWithNameLike: targetVersion info name. ancestry addAncestor: targetVersion info ]. self changed! ! !UpdateStreamer methodsFor: 'public' stamp: 'CamilloBruni 9/15/2013 17:53' prior: 49420138! updateWith: anUpdateBlock "Scan the update server for unassimilated updates. If upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point. If saveLocally is true, then save local copies of the update files on disc. If shouldApplyChanges is true, then absorb the updates into the current image. A file on the server called updates.list has the names of the last N update files. We look backwards for the first one we do not have, and start there" "* To add a new update: Name it starting with a new two-digit code. * Do not use %, /, *, space, or more than one period in the name of an update file. * The update name does not need to have any relation to the version name. * Figure out which versions of the system the update makes sense for. * Add the name of the file to each version's category below. * Put this file and the update file on all of the servers. * * To make a new version of the system: Pick a name for it (no restrictions) * Put # and exactly that name on a new line at the end of this file. * During the release process, fill in exactly that name in the dialog box. * Put this file on the server." "When two sets of updates need to use the same directory, one of them has a * in its serverUrls description. When that is true, the first word of the description is put on the front of 'updates.list', and that is the index file used." [[[ | pair failed loaded | pair := anUpdateBlock value. failed := pair first. loaded := pair second. failed ifNil: ["is OK" self feedback: (loaded printString ,' new update file(s) processed.')]] on: (Smalltalk globals at: #MCMergeOrLoadWarning ifAbsent: [ nil ]) do: [ :e| e resume: false ]] on: (Smalltalk globals at: #MCNoChangesException ifAbsent: [ nil ]) do: [ :e| e resume]] on: MCMergeResolutionRequest do: [ :request | request autoMerge ].! ! !PSMCPatchOperationWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/14/2013 15:29' prior: 37765378! icon "Answer a form with an icon to represent the receiver" self item localChosen ifTrue: [ ^ Smalltalk ui icons smallBackIconGray ]. ^ super icon! ! !JobProgressBarMorph methodsFor: 'initialization' stamp: 'CamilloBruni 9/14/2013 16:41' prior: 48908719! initialize super initialize. progressBar := ProgressBarMorph new. progressBar hResizing: #spaceFill. button := Smalltalk ui icons stopIcon asMorph. self extent: 200@20. self color: Color transparent; layoutPolicy: TableLayout new; listDirection: #leftToRight; cellPositioning: #leftCenter; cellInset: 3; listCentering: #center; hResizing: #spaceFill; vResizing: #shrinkWrap. self addMorphBack: progressBar; addMorphBack: button.! ! !MCMergeResolutionRequest methodsFor: 'actions' stamp: 'CamilloBruni 9/15/2013 17:52'! autoMerge "If there are not conflicts, merge, otherwise delegate to the UI" self hasConflicts ifTrue: [ self resolve ] ifFalse: [ self merge ]! ! !MCMergeResolutionRequest methodsFor: 'testing' stamp: 'CamilloBruni 9/15/2013 17:52'! hasConflicts ^ self merger conflicts isEmpty not! ! !MCMergeResolutionRequest methodsFor: 'actions' stamp: 'CamilloBruni 9/15/2013 17:50'! merge self resume: true! ! !MCMergeResolutionRequest methodsFor: 'actions' stamp: 'CamilloBruni 9/15/2013 17:50'! resolve self pass! ! !GoferMerge methodsFor: 'running' stamp: 'CamilloBruni 9/15/2013 17:50' prior: 22920612! execute [ self model merge ] on: MCMergeResolutionRequest do: [ :request | request autoMerge ]. self gofer cleanup! ! !Form methodsFor: 'converting' stamp: 'CamilloBruni 9/14/2013 16:57'! asGrayScaleWithAlpha "Unlike asGrayScale, this method fully preserves the alpha channel and only desaturates the form(makes grayscale)." ^ self collectColors: [ :c | |l| l := c luminance. Color r:l g: l b: l alpha: c alpha ]! ! !HandMorph methodsFor: 'drawing' stamp: 'JW 7/12/2005 20:13' prior: 68159353! shadowForm "Return a 1-bit shadow of my submorphs. Assumes submorphs is not empty" | bnds canvas | bnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). canvas := (Display defaultCanvasClass extent: bnds extent depth: 1) asShadowDrawingCanvas: Color black. canvas translateBy: bnds topLeft negated during:[:tempCanvas| self drawSubmorphsOn: tempCanvas]. ^ canvas form offset: bnds topLeft! ! !MCWorkingCopyTest methodsFor: 'actions' stamp: 'CamilloBruni 9/15/2013 18:17' prior: 25200906! merge: aVersion [[self basicMerge: aVersion] on: MCMergeResolutionRequest do: [:n | n merge ]] on: MCNoChangesException do: [:n | ]! ! SystemWindow removeSelector: #shadowForm! "ConfigurationCommandLineHandler-Core"! "Gofer-Core"! "Graphics-Display Objects"! "Monticello"! "MonticelloConfigurations"! "Morphic-Base"! "Nautilus"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Tests"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(16 September 2013 10:50:09 am) Pharo.image priorSource: 17926860! ----STARTUP----an Array(16 September 2013 11:00:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 September 2013 11:00:20 am) Pharo-30402.image priorSource: 17953379! ----STARTUP----an Array(16 September 2013 3:07:47 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/16/2013 15:05' prior: 68258820! commentForCurrentUpdate ^ '11572 Cannot create new protocols https://pharo.fogbugz.com/f/cases/11572 11471 Number >> #asDuration should default to seconds https://pharo.fogbugz.com/f/cases/11471/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/16/2013 15:06'! script195 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1612.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.863.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.131.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.112.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.67.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.241.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/16/2013 15:06'! update30403 "self new update30403" self withUpdateLog: '11572 Cannot create new protocols https://pharo.fogbugz.com/f/cases/11572 11471 Number >> #asDuration should default to seconds https://pharo.fogbugz.com/f/cases/11471/ '. self loadTogether: self script195 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow methodsFor: 'protocol' stamp: 'CamilloBruni 9/16/2013 01:07' prior: 24526813! accept: anItem self answer: anItem. self ok.! ! !ListDialogWindow methodsFor: 'accessing' stamp: 'CamilloBruni 9/16/2013 00:48' prior: 24518904! answer ^ answer! ! !ListDialogWindow methodsFor: 'actions' stamp: 'CamilloBruni 9/16/2013 01:06' prior: 67471872! ok (acceptNewEntry and: [ list isEmpty ]) ifTrue: [ self answer: self searchString ]. self cancelled: false; delete! ! !ListDialogWindow methodsFor: 'morphic protocol' stamp: 'CamilloBruni 9/16/2013 01:04' prior: 67588928! searchAccept: aString self searchUpdate: aString. list size = 1 ifTrue: [ ^ self accept: list first ]. (list detect: [ :item | (self displayItem: item) = aString] ifNone: [ nil]) ifNotNilDo: [ :item| ^ self accept: item ]. acceptNewEntry ifTrue: [ ^ self accept: aString ]. list ifNotEmpty: [ ^ self giveFocusToList].! ! !ListDialogWindow methodsFor: 'accessing' stamp: 'CamilloBruni 9/16/2013 01:07'! searchString ^ searchMorph searchString! ! !Number methodsFor: '*Kernel-Chronology' stamp: 'md 8/28/2013 15:37' prior: 28490096! asDuration ^ Duration seconds: self asInteger ! ! "Kernel"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(16 September 2013 3:07:58 pm) Pharo.image priorSource: 17953590! ----STARTUP----an Array(16 September 2013 3:14:28 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 September 2013 3:14:28 pm) Pharo-30403.image priorSource: 17966051! ----STARTUP----an Array(17 September 2013 8:47:43 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/17/2013 08:44' prior: 68285549! commentForCurrentUpdate ^ '11622 remove bogus method in Number https://pharo.fogbugz.com/f/cases/11622 11621 New widget to edit an ordered list https://pharo.fogbugz.com/f/cases/11621 11627 prevent completion from popping out with empty list https://pharo.fogbugz.com/f/cases/11627'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/17/2013 08:44'! script196 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1613.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-StephaneDucasse.17.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.863.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.112.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.243.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/17/2013 08:44'! update30404 "self new update30404" self withUpdateLog: '11622 remove bogus method in Number https://pharo.fogbugz.com/f/cases/11622 11621 New widget to edit an ordered list https://pharo.fogbugz.com/f/cases/11621 11627 prevent completion from popping out with empty list https://pharo.fogbugz.com/f/cases/11627'. self loadTogether: self script196 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EditableList commentStamp: '' prior: 0! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !NECClassVarEntry methodsFor: 'accessing' stamp: 'IgorStasenko 9/16/2013 17:19'! type ^ #classVar! ! !NECGlobalEntry methodsFor: 'accessing' stamp: 'IgorStasenko 9/16/2013 16:13'! type ^ #globalVar! ! !NECEntry class methodsFor: 'instance creation' stamp: 'IgorStasenko 9/16/2013 17:18'! contents: aString ^ self new setContents: aString! ! !NECEntry methodsFor: 'operations' stamp: 'IgorStasenko 9/16/2013 17:27' prior: 27809847! browseWith: anECContext | guessType | guessType := self guessTypeWith: anECContext. guessType ifNil: [^ false]. SystemNavigation new browseClass: guessType. ^ true! ! !NECEntry methodsFor: 'printing' stamp: 'IgorStasenko 9/16/2013 17:21' prior: 27810308! printOn: aStream aStream nextPutAll: self class name; nextPut: $(; nextPutAll: contents asString; nextPut: $,; nextPutAll: self type; nextPut: $)! ! !NECEntry methodsFor: 'accessing' stamp: 'IgorStasenko 9/16/2013 17:18'! setContents: aString contents := aString.! ! !NECInstVarEntry methodsFor: 'testing' stamp: 'IgorStasenko 9/16/2013 16:15' prior: 27814058! isInstance ^true! ! !NECInstVarEntry methodsFor: 'accessing' stamp: 'IgorStasenko 9/16/2013 17:29'! type ^ #instVar! ! !NECUntypedModel methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/16/2013 17:28' prior: 27873086! initializeClassVars (clazz isNil or: [ includeVariables not ]) ifTrue: [ ^ self ]. classVars := clazz theNonMetaClass allClassVarNames asSortedCollection. classVars := classVars collect: [ :each | NECClassVarEntry contents: each ]! ! !NECUntypedModel methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/16/2013 17:29' prior: 27873404! initializeInstVars (clazz isNil or: [ includeVariables not ]) ifTrue: [ ^ self ]. instVars := clazz allInstVarNames asSortedCollection. instVars := instVars collect: [ :each | NECInstVarEntry contents: each ]. instVars add: (NECSelfEntry contents: 'self' type: #self). instVars add: (NECSuperEntry contents: 'super' type: #super)! ! !NECUntypedModel methodsFor: 'private' stamp: 'IgorStasenko 9/16/2013 17:28' prior: 27875284! initializeSelectors self resetSelectors. includeSelectors ifFalse: [ Smalltalk keysAndValuesDo: [ :each :class | selectors add: (NECGlobalEntry contents: each) ]. ^ self ]. narrowString ifEmpty: [ ^ self ]. NECSymbols contains: narrowString caseSensitive: NECPreferences caseSensitive do: [ :each | (includeVariables or: [ each first isLowercase ]) ifTrue: [ selectors add: (NECSelectorEntry contents: each type: #selector). selectors size > self listLimit ifTrue: [ ^ self ]]]! ! !NECMenuMorph methodsFor: 'actions' stamp: 'IgorStasenko 9/16/2013 17:26' prior: 27820634! browse (self selectedEntry browseWith: context) ifTrue: [ controller closeMenu ]! ! !NECController methodsFor: 'menu morph' stamp: 'IgorStasenko 9/16/2013 17:16' prior: 27795739! openMenuFor: aParagraphEditor | theMenu | self stopCompletionDelay. context := self contextClass controller: self class: model selectedClassOrMetaClass source: aParagraphEditor text string position: aParagraphEditor caret - 1. editor := aParagraphEditor. theMenu := self menuMorphClass controller: self position: (aParagraphEditor selectionPosition: context completionToken). theMenu isClosed ifFalse: [ menuMorph := theMenu ]. (context isNil or: [ context model isEmpty ]) ifTrue: [ ^self closeMenu ].! ! !NECLocalEntry methodsFor: 'operations' stamp: 'IgorStasenko 9/16/2013 17:26' prior: 27818119! guessTypeWith: anECContext ^ (anECContext guessTempVarClass: contents type: self type) ifNil: [anECContext guessArgument: contents]! ! !NECEntryTest methodsFor: 'tests' stamp: 'IgorStasenko 9/16/2013 17:30' prior: 27812492! testInstance | entry | entry := NECInstVarEntry contents: 'abc'. self assert: entry isInstance! ! !NewListModel methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/16/2013 11:37' prior: 38969069! iconMaxSize: aPoint iconMaxSize contents: aPoint! ! !EditableList commentStamp: '' prior: 68309345! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !EditableList class methodsFor: 'example' stamp: 'ChristopheDemarey 7/15/2013 17:07'! example | widget | widget := self new. widget title: 'Selectors list'; list: self selectors. widget openWithSpec.! ! !EditableList class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 9/10/2013 10:25'! new: aCollection ^ self new list: aCollection copy. ! ! !EditableList class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/26/2013 13:47'! spec ^ SpecLayout composed newColumn: [ :column | column newRow: [ :menuRow | menuRow add: #addButton; add: #removeButton ] height: 25; newRow: [ :listRow | listRow newColumn: [ :c1 | c1 add: #list ]; newColumn: [ :c2 | c2 add: #topButton; add: #upButton; add: #downButton; add: #bottomButton ] width: 24 ] ] yourself! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54'! addButton ^ addButton! ! !EditableList methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/3/2013 18:16'! addItemBlock: aBlock addItemBlock := aBlock.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/26/2013 13:41'! bottomButton ^ bottomButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/3/2013 18:06'! downButton ^ downButton! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 6/27/2013 17:11'! initialize "Initialization code for EditableList" title := 'Title' asValueHolder. super initialize.! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/10/2013 17:18'! initializePresenter super initializePresenter addButton action: [ | requirement | requirement := addItemBlock value. requirement ifNotNil: [ self list: (self list getItems copyWith: requirement) ] ]. removeButton action: [ self list: (list getItems copyWithoutIndex: list selectedIndex) ]. topButton action: [ self moveElementAt: list selectedIndex to: 1 ]. bottomButton action: [ self moveElementAt: list selectedIndex to: list getItems size ]. upButton action: [ self moveElementAt: list selectedIndex to: list selectedIndex - 1]. downButton action: [ self moveElementAt: list selectedIndex to: list selectedIndex + 1]. ! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/11/2013 09:59'! initializeWidgets self instantiateModels: #( list NewListModel addButton ButtonModel removeButton ButtonModel upButton ButtonModel downButton ButtonModel topButton ButtonModel bottomButton ButtonModel ). addButton icon: (Smalltalk ui icons iconNamed: #addIcon); help: 'Add a new item to the list'. removeButton icon: (Smalltalk ui icons iconNamed: #deleteIcon); help: 'Remove a item from the list'. upButton icon: (Smalltalk ui icons iconNamed: #upIcon); help: 'Move this item up from one element'. downButton icon: (Smalltalk ui icons iconNamed: #downIcon); help: 'Move this item down from one element'. topButton icon: (Smalltalk ui icons iconNamed: #topIcon); help: 'Move this item on the first position of the list'. bottomButton icon: (Smalltalk ui icons iconNamed: #bottomIcon); help: 'Move this item on the last position of the list'.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54'! list ^ list! ! !EditableList methodsFor: 'private' stamp: 'ChristopheDemarey 9/10/2013 10:16'! list: aList list items: aList.! ! !EditableList methodsFor: 'private' stamp: 'ChristopheDemarey 9/10/2013 13:37'! moveElementAt: index to: newIndex | elementToMove orderedList | (newIndex < 1 or: [ newIndex > list getItems size ]) ifTrue: [ ^self ]. elementToMove := list getItems at: index. orderedList := list getItems asOrderedCollection removeAt: index; add: elementToMove beforeIndex: newIndex; yourself. self list: orderedList. self list setSelectedIndex: newIndex.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54'! removeButton ^ removeButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 17:12'! title ^ title contents! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:48'! title: aTitle title := aTitle ! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/26/2013 13:41'! topButton ^ topButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/3/2013 18:06'! upButton ^ upButton! ! Number removeSelector: #isOrAreStringWith:! "Kernel"! "NECompletion"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(17 September 2013 8:47:54 am) Pharo.image priorSource: 17966260! ----STARTUP----an Array(17 September 2013 8:53:52 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 September 2013 8:53:52 am) Pharo-30404.image priorSource: 17987647! ----STARTUP----an Array(17 September 2013 1:01:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/17/2013 13:00' prior: 68298218! commentForCurrentUpdate ^ '11618 Introduce KMMetaModifier and KMUntypeableSingleKeyCombination https://pharo.fogbugz.com/f/cases/11618 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/17/2013 13:00'! script197 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1613.mcz KernelTests-MarcusDenker.561.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.863.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.112.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.243.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/17/2013 13:00'! update30405 "self new update30405" self withUpdateLog: '11618 Introduce KMMetaModifier and KMUntypeableSingleKeyCombination https://pharo.fogbugz.com/f/cases/11618 '. self loadTogether: self script197 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMMetaModifier commentStamp: '' prior: 0! I represent the Meta or Command key modifier. Look at my superclass for a more detailed explanaition.! !KMUntypeableSingleKeyCombination commentStamp: '' prior: 0! I am an abstract class for all single key combinations that correspond to characters that cannot be typed directly.! !Character methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 9/15/2013 19:49'! meta ^ KMModifier meta + self! ! !KMComposedModifier methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 20:34'! symbol ^ self printString! ! !KMCtrlModifier methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/15/2013 20:32'! symbol ^ '⌃'! ! !KMMetaModifier commentStamp: '' prior: 68330644! I represent the Meta or Command key modifier. Look at my superclass for a more detailed explanaition.! !KMMetaModifier methodsFor: 'accessing' stamp: 'SeanDeNigris 11/22/2011 18:53'! eventCode ^ 64.! ! !KMMetaModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 5/31/2011 19:54'! initialize super initialize. identifier := #m. name := 'Cmd'.! ! !KMMetaModifier methodsFor: 'matching' stamp: 'cami 7/22/2013 18:28'! matchesEvent: aKeyboardEvent self flag: #todo. "Command in windows and linux platforms is 'meta' key and do not have any sense (for the environment, right now). In the future we need to create a KMMetaModifier to handle properly this, and keep command as a mac-specific key" (Smalltalk os isUnix or: [ Smalltalk os isWin32 ]) ifTrue: [ ^ aKeyboardEvent controlKeyPressed ]. ^ aKeyboardEvent commandKeyPressed! ! !KMMetaModifier methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/15/2013 20:33'! symbol ^ '⌘'! ! !KMModifier class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/16/2013 00:19' prior: 34029645! command ^ self meta! ! !KMModifier class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 19:49'! meta ^ KMMetaModifier new! ! !KMShiftModifier methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/15/2013 20:33'! symbol ^ '⇧'! ! !KMSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:14' prior: 34032791! from: aCharacterOrInteger | aCharacter | aCharacter := aCharacterOrInteger asCharacter. KMUntypeableSingleKeyCombination ifSpecialKey: aCharacter do: [ :keyCombination | ^ keyCombination ]. ^ self new key: aCharacter; yourself! ! !KMSingleKeyCombination class methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 20:26' prior: 34055461! specialKeys ^specialKeys ifNil: [ specialKeys := {1->'home'. 3->'enter'. 4->'end'. 8->'backspace'. 9-> 'tab'. 11->'page up'. 12->'page down'. 27->'escape'. 28->'left arrow'. 29->'right arrow'. 30->'up arrow'. 31->'down arrow'. 127->'delete' } asDictionary.]! ! !KMSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 20:19'! name ^ self key asString! ! !KMSingleKeyCombination methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 21:18' prior: 34034476! printOn: aStream aStream nextPutAll: self name asUppercase.! ! !KMUntypeableSingleKeyCombination commentStamp: '' prior: 68330820! I am an abstract class for all single key combinations that correspond to characters that cannot be typed directly.! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! arrowDown ^ self key: Character arrowDown name: 'Down Arrow' symbol: '↓'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! arrowLeft ^ self key: Character arrowLeft name: 'Left Arrow' symbol: '←'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! arrowRight ^ self key: Character arrowRight name: 'Right Arrow' symbol: '→'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! arrowUp ^ self key: Character arrowUp name: 'Up Arrow' symbol: '↑'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! backspace ^ self key: Character backspace name: 'Backspace' symbol: '⌫'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! delete ^ self key: Character delete name: 'Delete' symbol: '⌦'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! end ^ self key: Character end name: 'End' symbol: '↘'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! enter ^ self key: Character enter name: 'Enter' symbol: '↩'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! escape ^ self key: Character escape name: 'Escape' symbol: '⎋'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:06'! home ^ self key: Character home name: 'Home' symbol: '↖'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'testing' stamp: 'CamilloBruni 9/15/2013 21:14'! ifSpecialKey: aCharacter do: aBlock "Lookup if aCharacter needs to be handled by me, if so use one of the instance creation function for creating the corresponding KeyCombination." self specialKeys at: aCharacter ifPresent: [ :symbol | aBlock value: (self perform: symbol) ]! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:04'! key: aCharacter name: aString symbol: aVisualString ^ self new key: aCharacter; name: aString; symbol: aVisualString; yourself! ! !KMUntypeableSingleKeyCombination class methodsFor: 'initialization' stamp: 'CamilloBruni 9/16/2013 00:22'! newSpecialKeys "Build a new dictionary that maps untypable characters to symbols for instacation creation methods on this class." | dictionary | dictionary := Dictionary new. #(home enter end backspace tab pageUp pageDown escape arrowLeft arrowRight arrowUp arrowDown delete) do: [ :symbol | dictionary at: (Character perform: symbol) put: symbol ]. ^ dictionary! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:06'! pageDown ^ self key: Character pageDown name: 'Page Down' symbol: '⇟'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! pageUp ^ self key: Character pageUp name: 'Page Up' symbol: '⇞'! ! !KMUntypeableSingleKeyCombination class methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 21:10'! specialKeys ^specialKeys ifNil: [ specialKeys := self newSpecialKeys ]! ! !KMUntypeableSingleKeyCombination class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/15/2013 21:01'! tab ^ self key: Character tab name: 'Tab' symbol: '⇥'! ! !KMUntypeableSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 21:02'! name ^ name! ! !KMUntypeableSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 21:04'! name: aString name := aString! ! !KMUntypeableSingleKeyCombination methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 21:07'! printOn: aStream aStream nextPutAll:self name asUppercase.! ! !KMUntypeableSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 21:03'! symbol "I return the visual symbol for this shortcut. For instance for the Arrow Up key I contain a string with an arrow up key symbol: ↑ and now the Character arrowUp." ^ symbol! ! !KMUntypeableSingleKeyCombination methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 21:04'! symbol: aString symbol := aString! ! !KMAltModifier methodsFor: 'accessing' stamp: 'CamilloBruni 9/15/2013 20:32'! symbol ^ '⌥'! ! KMSingleKeyCombination removeSelector: #specialKeys! KMSingleKeyCombination removeSelector: #printStringFor:! KMCommandModifier removeSelector: #matchesEvent:! KMCommandModifier removeSelector: #initialize! KMCommandModifier removeSelector: #eventCode! Smalltalk globals removeClassNamed: #KMCommandModifier! "Keymapping-KeyCombinations"! ----End fileIn----! ----QUIT----an Array(17 September 2013 1:01:46 pm) Pharo.image priorSource: 17987856! ----STARTUP----an Array(17 September 2013 1:07:46 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 September 2013 1:07:46 pm) Pharo-30405.image priorSource: 18007326! ----STARTUP----an Array(18 September 2013 10:28:41 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/18/2013 10:25' prior: 68319814! commentForCurrentUpdate ^ '7537 Use UTC primitives for Time https://pharo.fogbugz.com/f/cases/7537'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/18/2013 10:26'! script198 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.108.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.863.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.112.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.115.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.72.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.243.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/18/2013 10:26'! update30406 "self new update30406" self withUpdateLog: '7537 Use UTC primitives for Time https://pharo.fogbugz.com/f/cases/7537'. self loadTogether: self script198 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Week methodsFor: 'conversion' stamp: 'brp 5/13/2003 09:36' prior: 54849441! asWeek ^ self ! ! !Week methodsFor: 'accessing' stamp: 'brp 1/30/2005 09:31' prior: 54849528! index ^ self asMonth dayOfWeek + self dayOfMonth - 2 // 7 + 1 ! ! !Stopwatch methodsFor: 'actions' stamp: 'brp 9/24/2003 23:12' prior: 50906389! activate self isSuspended ifTrue: [self timespans add: (Timespan starting: DateAndTime now duration: Duration zero). self state: #active] ! ! !Stopwatch methodsFor: 'accessing' stamp: 'brp 9/24/2003 23:45' prior: 50906613! duration | ts last | self isSuspended ifTrue: [ (ts := self timespans) isEmpty ifTrue: [ ts := { Timespan starting: DateAndTime now duration: Duration zero } ] ] ifFalse: [ last := self timespans last. ts := self timespans allButLast add: (last duration: (DateAndTime now - last start); yourself); yourself ]. ^ (ts collect: [ :t | t duration ]) sum ! ! !Stopwatch methodsFor: 'accessing' stamp: 'brp 9/25/2003 11:21' prior: 50907073! end ^ self timespans last next ! ! !Stopwatch methodsFor: 'testing' stamp: 'brp 9/24/2003 22:48' prior: 50907183! isActive ^ self state = #active ! ! !Stopwatch methodsFor: 'testing' stamp: 'brp 9/24/2003 22:48' prior: 50907293! isSuspended ^ self state = #suspended ! ! !Stopwatch methodsFor: 'actions' stamp: 'brp 9/25/2003 12:03' prior: 50907634! reActivate self suspend; activate. ! ! !Stopwatch methodsFor: 'actions' stamp: 'brp 9/25/2003 11:54' prior: 50907752! reset self suspend. timespans := nil. ! ! !Stopwatch methodsFor: 'actions' stamp: 'brp 9/24/2003 23:18' prior: 50907870! start ^ self timespans first start ! ! !Stopwatch methodsFor: 'accessing' stamp: 'brp 9/24/2003 22:47' prior: 50907984! state ^ state ifNil: [ state := #suspended ] ! ! !Stopwatch methodsFor: 'private' stamp: 'brp 9/24/2003 22:46' prior: 50908107! state: aSymbol state := aSymbol ! ! !Stopwatch methodsFor: 'actions' stamp: 'brp 9/24/2003 23:13' prior: 50908217! suspend | ts | self isActive ifTrue: [ ts := self timespans last. ts duration: (DateAndTime now - ts start). self state: #suspended] ! ! !Stopwatch methodsFor: 'accessing' stamp: 'brp 9/24/2003 22:44' prior: 50908435! timespans ^ timespans ifNil: [ timespans := OrderedCollection new ] ! ! !Time class methodsFor: 'primitives' stamp: 'CamilloBruni 8/22/2013 18:10' prior: 49270245! primMillisecondClock "Primitive. Answer the number of milliseconds since the millisecond clock was last reset or rolled over. Answer zero if the primitive fails. As an alternative you can use #primUTCMillisecondsClock which does not overflow." ^ 0! ! !Time class methodsFor: 'primitives' stamp: 'CamilloBruni 8/22/2013 18:04' prior: 49270577! primSecondsClock self deprecated: 'Use Time primUTCSecondsClock instead' on: '2013-08-22' in: #Pharo30. ^self primUTCMicrosecondsClock // 1e6! ! !Time class methodsFor: 'primitives' stamp: 'CamilloBruni 8/22/2013 18:07'! primUTCMillisecondsClock "Answer the number of whole milliseconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC" ^self primUTCMicrosecondsClock // 1e3! ! !Time class methodsFor: 'primitives' stamp: 'CamilloBruni 8/22/2013 18:01'! primUTCSecondsClock "Answer the number of whole seconds ellapsed since Squeak epoch. That is since 00:00 on the morning of January 1, 1901 UTC" ^self primUTCMicrosecondsClock // 1e6! ! !Time class methodsFor: 'clock' stamp: 'CamilloBruni 8/22/2013 18:03' prior: 53145660! secondsWhenClockTicks "waits for the moment when a new second begins" | lastSecond | lastSecond := self primUTCSecondsClock. [ lastSecond = self primUTCSecondsClock ] whileTrue: [ (Delay forMilliseconds: 1) wait ]. ^ lastSecond + 1 ! ! !Time class methodsFor: 'accessing' stamp: 'CamilloBruni 8/22/2013 18:01' prior: 49272982! totalSeconds "Answer the total seconds ellapsed since the Squeak epoch: 1 January 1901 00:00 UTC" ^ self primUTCSecondsClock! ! !Time methodsFor: 'comparing' stamp: 'brp 8/23/2003 15:54' prior: 53132600! < aTime ^ self asDuration < aTime asDuration! ! !Time methodsFor: 'comparing' stamp: 'brp 8/23/2003 19:11' prior: 53132715! = aTime ^ [ self ticks = aTime ticks ] on: MessageNotUnderstood do: [false]! ! !Time methodsFor: 'adding' stamp: 'brp 8/23/2003 19:02' prior: 53136785! addSeconds: nSeconds "Answer a Time that is nSeconds after the receiver." ^ self class seconds: self asSeconds + nSeconds! ! !Time methodsFor: 'adding' stamp: 'brp 8/23/2003 19:02' prior: 53136978! addTime: timeAmount "Answer a Time that is timeInterval after the receiver. timeInterval is an instance of Date or Time." ^ self class seconds: self asSeconds + timeAmount asSeconds! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 23:58' prior: 53138400! asDate ^ Date today! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:26' prior: 53138492! asDateAndTime ^ DateAndTime today + self! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:01' prior: 53138605! asDuration "Answer the duration since midnight" ^ Duration seconds: seconds nanoSeconds: nanos ! ! !Time methodsFor: 'converting' stamp: 'MarcusDenker 12/2/2009 12:58' prior: 53138784! asMilliSeconds "Answer the number of milliseconds since midnight" ^ self asDuration asMilliSeconds ! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:29' prior: 53138957! asMonth ^ self asDateAndTime asMonth! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:29' prior: 53139066! asNanoSeconds "Answer the number of nanoseconds since midnight" ^ self asDuration asNanoSeconds ! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 15:55' prior: 53137236! asSeconds "Answer the number of seconds since midnight of the receiver." ^ seconds! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:08' prior: 53139236! asTime ^ self! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:27' prior: 53139322! asTimeStamp ^ self asDateAndTime asTimeStamp! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:28' prior: 53139439! asWeek ^ self asDateAndTime asWeek! ! !Time methodsFor: 'converting' stamp: 'brp 8/23/2003 19:43' prior: 53139546! asYear ^ self asDateAndTime asYear! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:32' prior: 53132863! duration ^ Duration zero ! ! !Time methodsFor: 'hash' stamp: 'brp 8/23/2003 19:11' prior: 53132959! hash ^ self ticks hash ! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:10' prior: 53133053! hour ^ self hour24 ! ! !Time methodsFor: 'accessing' stamp: 'avi 2/21/2004 18:45' prior: 53133143! hour12 "Answer an between 1 and 12, inclusive, representing the hour of the day in the 12-hour clock of the local time of the receiver." ^ self hour24 - 1 \\ 12 + 1! ! !Time methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/20/2011 21:51' prior: 53133409! hour24 "Answer a number that represents the number of complete hours in the receiver, after the number of complete days has been removed." ^ (seconds rem: SecondsInDay) quo: SecondsInHour! ! !Time methodsFor: 'accessing' stamp: 'brp 7/1/2003 13:29' prior: 53137391! hours ^ self hour! ! !Time methodsFor: 'printing' stamp: 'brp 8/23/2003 19:24' prior: 53137478! intervalString "Treat the time as a difference. Give it in hours and minutes with two digits of accuracy." | d | d := self asDuration. ^ String streamContents: [ :s | d hours > 0 ifTrue: [s print: d hours; nextPutAll: ' hours']. d minutes > 0 ifTrue: [s space; print: d minutes; nextPutAll: ' minutes']. d seconds > 0 ifTrue: [s space; print: d seconds; nextPutAll: ' seconds'] ]. ! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:41' prior: 53133673! meridianAbbreviation ^ self hour < 12 ifTrue: ['AM'] ifFalse: ['PM']. ! ! !Time methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/20/2011 21:52' prior: 53133831! minute "Answer a number that represents the number of complete minutes in the receiver, after the number of complete hours has been removed." ^ (seconds rem: SecondsInHour) quo: SecondsInMinute ! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 22:07' prior: 53137940! minutes ^ self asDuration minutes! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:33' prior: 53139653! nanoSecond ^ nanos ! ! !Time methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/20/2011 21:52' prior: 53134116! second "Answer a number that represents the number of complete seconds in the receiver, after the number of complete minutes has been removed." ^ (seconds rem: SecondsInMinute)! ! !Time methodsFor: 'accessing' stamp: 'brp 7/27/2003 18:18' prior: 53138043! seconds ^ self second! ! !Time methodsFor: 'adding' stamp: 'brp 8/23/2003 19:03' prior: 53138134! subtractTime: timeAmount "Answer a Time that is timeInterval before the receiver. timeInterval is an instance of Date or Time." ^ self class seconds: self asSeconds - timeAmount asSeconds! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 22:38' prior: 53140283! ticks "Answer an Array: { seconds. nanoSeconds }" ^ Array with: 0 with: seconds with: nanos.! ! !Time methodsFor: 'accessing' stamp: 'brp 8/23/2003 19:35' prior: 53139746! to: anEnd "Answer a Timespan. anEnd must respond to #asDateAndTime" ^ self asDateAndTime to: anEnd! ! !Date methodsFor: 'adding' stamp: 'brp 8/23/2003 22:09' prior: 20326107! addDays: dayCount ^ (self asDateAndTime + (dayCount days)) asDate! ! !Date methodsFor: 'accessing' stamp: 'sd 3/16/2008 14:43' prior: 20327330! asDate ^ self! ! !Date methodsFor: 'enumerating' stamp: 'brp 7/27/2003 16:10' prior: 20327416! dayMonthYearDo: aBlock "Supply integers for day, month and year to aBlock and return the result" ^ start dayMonthYearDo: aBlock! ! !Date methodsFor: 'deprecated' stamp: 'brp 7/27/2003 16:08' prior: 20326243! leap "Answer whether the receiver's year is a leap year." ^ start isLeapYear ifTrue: [1] ifFalse: [0].! ! !Date methodsFor: 'accessing' stamp: 'avi 2/21/2004 18:12' prior: 20327618! month ^ self asMonth! ! !Date methodsFor: 'accessing' stamp: 'avi 2/29/2004 13:10' prior: 20327710! monthIndex ^ super month! ! !Date methodsFor: 'accessing' stamp: 'brp 1/16/2004 14:30' prior: 20326416! previous: dayName "Answer the previous date whose weekday name is dayName." | days | days := 7 + self weekdayIndex - (self class dayOfWeek: dayName) \\ 7. days = 0 ifTrue: [ days := 7 ]. ^ self subtractDays: days ! ! !Date methodsFor: 'adding' stamp: 'brp 7/27/2003 16:09' prior: 20326704! subtractDate: aDate "Answer the number of days between self and aDate" ^ (self start - aDate asDateAndTime) days! ! !Date methodsFor: 'adding' stamp: 'brp 8/23/2003 22:05' prior: 20326888! subtractDays: dayCount ^ (self asDateAndTime - (dayCount days)) asDate! ! !Date methodsFor: 'accessing' stamp: 'brp 8/24/2003 12:04' prior: 20327029! weekday "Answer the name of the day of the week on which the receiver falls." ^ self dayOfWeekName! ! !Date methodsFor: 'accessing' stamp: 'brp 8/24/2003 12:04' prior: 20327198! weekdayIndex "Sunday=1, ... , Saturday=7" ^ self dayOfWeek! ! !Schedule methodsFor: 'testing' stamp: 'brp 5/13/2003 09:38' prior: 32716296! includes: aDateAndTime | dt | dt := aDateAndTime asDateAndTime. self scheduleDo: [ :e | e = dt ifTrue: [^true] ]. ^ false. ! ! !Object methodsFor: 'accessing' stamp: 'MarianoMartinezPeck 8/24/2012 15:58' prior: 28642658! name "Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out.. " ^ self printString ! ! !Month methodsFor: 'conversion' stamp: 'brp 5/13/2003 09:04' prior: 26568807! asMonth ^ self ! ! !Month methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:05' prior: 26568896! daysInMonth ^ self duration days.! ! !Month methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:05' prior: 26569003! index ^ self monthIndex ! ! !Month methodsFor: 'testing' stamp: 'brp 5/13/2003 09:05' prior: 26569101! name ^ self monthName ! ! !Month methodsFor: 'accessing' stamp: 'brp 5/13/2003 09:05' prior: 26569198! previous ^ self class starting: (self start - 1) ! ! !TimeTest methodsFor: 'coverage' stamp: 'CamilloBruni 8/22/2013 18:08' prior: 36379922! selectorsToBeIgnored | deprecated private special primitives timing benchmarks | deprecated := #(). private := #( #print24:on: #print24:showSeconds:on: ). special := #( #< #= #new #printOn: #storeOn: ). primitives := #( #primMillisecondClock #primSecondsClock #primUTCSecondsClock #primUTCMicrosecondsClock #primUTCMillisecondsClock). timing := #( #millisecondClockValue #milliseconds:since: #millisecondsSince: ). benchmarks := #( #benchmarkMillisecondClock #benchmarkPrimitiveResponseDelay ). ^ super selectorsToBeIgnored, deprecated, private, special, primitives, timing, benchmarks.! ! "Kernel"! "KernelTests"! ----End fileIn----! ----QUIT----an Array(18 September 2013 10:28:52 am) Pharo.image priorSource: 18007535! ----STARTUP----an Array(18 September 2013 10:34:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 September 2013 10:34:55 am) Pharo-30406.image priorSource: 18031596! ----STARTUP----an Array(18 September 2013 6:59:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(18 September 2013 6:59:48 pm) Pharo.image priorSource: 18031807! ----STARTUP----an Array(18 September 2013 7:05:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 September 2013 7:05:48 pm) Pharo-30406.image priorSource: 18032027! ----STARTUP----an Array(19 September 2013 11:11:43 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/19/2013 11:09' prior: 68339494! commentForCurrentUpdate ^ '11631 Disable History navigation buttons in Inspectors when not usable https://pharo.fogbugz.com/f/cases/11631 11413 Make a diff tool to show recategorization as a change properly https://pharo.fogbugz.com/f/cases/11413 11632 Add browse shortcut to critics browser https://pharo.fogbugz.com/f/cases/11632'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/19/2013 11:09'! script199 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-StephaneDucasse.50.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.76.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.113.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-StephaneDucasse.37.mcz Spec-Core-MarcusDenker.154.mcz Spec-Debugger-MarcusDenker.117.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.74.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.139.mcz Spec-Widgets-MarcusDenker.243.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.911.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/19/2013 11:09'! update30407 "self new update30407" self withUpdateLog: '11631 Disable History navigation buttons in Inspectors when not usable https://pharo.fogbugz.com/f/cases/11631 11413 Make a diff tool to show recategorization as a change properly https://pharo.fogbugz.com/f/cases/11413 11632 Add browse shortcut to critics browser https://pharo.fogbugz.com/f/cases/11632'. self loadTogether: self script199 merge: false. Smalltalk ui icons initialize. . self flushCaches. ! ! "ScriptLoader30"! !CriticBrowser commentStamp: '' prior: 42209692! I display code critics, the results obtained when running a lint rule. Example: | rule env | rule := RBExcessiveArgumentsRule new. env := (RBPackageEnvironment packageName: 'Manifest-Core'). (CriticBrowser openOnRule: rule onEnvironment: env).! !CriticToolbar commentStamp: '' prior: 42209961! I am the toolbar for a selected SmallLint Critic in the critic browser. Instance Variables browseModel: criticHolder: falsepositiveModel: ruleHolder: transformModel: browseModel - xxxxx criticHolder - xxxxx falsepositiveModel - xxxxx ruleHolder - xxxxx transformModel - xxxxx ! !EyeInspector commentStamp: '' prior: 48698893! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !InspectorWrapper commentStamp: '' prior: 42358245! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !SingleCodeCriticResultList commentStamp: '' prior: 0! I am a browser for the SmallLint Critics of a rule.! !MCAddition methodsFor: 'accessing' stamp: 'LucasGiudice 9/14/2013 15:02' prior: 24604426! toSource ^ definition diffSource! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:22'! history ^ self inspectorWrapper history! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:11' prior: 48650019! inspectorWrapper ^ self owner! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:23' prior: 48650144! nextButton nextButton ifNil: [ nextButton := self instantiate: ButtonModel. nextButton label: '>'. nextButton action: [ self inspectorWrapper inspectNext. self updateButtonStatus. ]]. ^ nextButton! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:21' prior: 48650421! previousButton previousButton ifNil: [ previousButton := self instantiate: ButtonModel. previousButton label: '<'. previousButton action: [ self inspectorWrapper inspectPrevious. self updateButtonStatus. ] ]. ^ previousButton! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:24'! updateButtonStatus self previousButton enabled: self history hasPrevious. self nextButton enabled: self history hasNext.! ! !MCRemoval methodsFor: 'accessing' stamp: 'LucasGiudice 9/14/2013 15:08' prior: 24938535! fromSource ^ definition diffSource! ! !MCMethodDefinition methodsFor: 'accessing' stamp: 'LucasGiudice 9/14/2013 14:58'! diffSource ^'"protocol: ', self category,'" ', self source.! ! !MCModification methodsFor: '*Polymorph-Tools-Diff' stamp: 'LucasGiudice 9/14/2013 15:18' prior: 24877790! diffFromSource "Answer fromSource of the modification. If a class patch then answer the fromSource with the class-side definition and comment appended." ^self isClassPatch ifTrue: [self fromSource, String cr, String cr, obsoletion classDefinitionString, String cr, String cr, obsoletion commentStamp, String cr, obsoletion comment] ifFalse: [obsoletion diffSource]! ! !MCModification methodsFor: 'accessing' stamp: 'LucasGiudice 9/14/2013 15:18' prior: 24879075! fromSource ^ obsoletion source! ! !MCModification methodsFor: 'accessing' stamp: 'LucasGiudice 9/14/2013 15:02' prior: 24880167! toSource ^ modification diffSource! ! !MCDefinition methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 14:21'! diffSource ^ self source! ! !MCDefinition methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 14:21'! source ^ self subclassResponsibility.! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 25352310! ruleBadMessageRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#SingleCodeCriticResultList #perform:orSendTo: #false)) #'2013-02-01T15:29:51.915000005+01:00') )! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 34155573! ruleCodeCruftLeftInMethodsRuleV1TODO ^ #(#(#(#RGMethodDefinition #(#SingleCodeCriticResultList #addCriticWithCommentToFalsePositive #false)) #'2013-02-06T15:08:32.572+01:00') #(#(#RGMethodDefinition #(#SingleCodeCriticResultList #addCriticWithCommentToToDo #false)) #'2013-02-06T15:08:32.572000001+01:00') #(#(#RGMethodDefinition #(#SingleCodeCriticResultList #removeRuleToFalsePositive #false)) #'2013-03-21T14:07:34.827+01:00') #(#(#RGMethodDefinition #(#SingleCodeCriticResultList #addRuleToFalsePositive #false)) #'2013-03-21T14:07:34.827000001+01:00') )! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 25353596! ruleEquivalentSuperclassMethodsRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#SingleCodeCriticResultList #perform:orSendTo: #false)) #'2013-02-01T15:29:56.387000008+01:00') #(#(#RGMethodDefinition #(#'SelectRuleBrowser class' #defaultSpec #true)) #'2013-02-01T15:29:56.387000009+01:00') )! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 25355501! ruleOnlyReadOrWrittenVariableRuleV1FalsePositive ^ #(#(#(#RGClassDefinition #(#CriticBrowser)) #'2013-02-01T15:29:52.299+01:00') #(#(#RGClassDefinition #(#SelectBrowser)) #'2013-02-01T15:29:52.299000001+01:00') #(#(#RGClassDefinition #(#SingleCodeCriticResultList)) #'2013-02-01T15:29:52.301+01:00') #(#(#RGClassDefinition #(#ResetWindow)) #'2013-02-01T15:29:52.296000003+01:00') #(#(#RGClassDefinition #(#SelectPackageBrowser)) #'2013-02-01T15:29:52.296000002+01:00') )! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 25356071! ruleReturnsIfTrueRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#SingleCodeCriticResultList #iconFor: #false)) #'2013-02-01T15:29:51.740000004+01:00') )! ! !CriticBrowser commentStamp: '' prior: 68375463! I display code critics, the results obtained when running a lint rule. Example: | rule env | rule := RBExcessiveArgumentsRule new. env := (RBPackageEnvironment packageName: 'Manifest-Core'). (CriticBrowser openOnRule: rule onEnvironment: env).! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 9/18/2013 22:48' prior: 34158080! initializePresenter rulesModel whenSelectedItemChanged: [ :rule | (rule isNil or: [ rule isComposite ]) ifFalse: [ criticModel resetSelection. criticModel rule: rule. criticModel setTextModelForNil]. self updateTree. self setTitle: rule name] ! ! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 9/18/2013 22:54' prior: 49568036! initializeWidgets title := 'Critic Browser'. self instantiateModels: #( rulesModel TreeModel resetButton ButtonModel logButton ButtonModel ). self setLogButton. self setResetButton. criticModel := SingleCodeCriticResultList new. rulesModel childrenBlock: [ :rule | rule isComposite ifTrue: [ rule rules ] ifFalse: [ #() ]]. rulesModel displayBlock: [ :rule | self stringMorphForRule: rule ]. rulesModel menu: [:a :b | self menu: a shifted: b ]. self focusOrder add: rulesModel; add: criticModel! ! !CriticToolbar commentStamp: '' prior: 68375775! I am the toolbar for a selected SmallLint Critic in the critic browser. Instance Variables browseModel: criticHolder: falsepositiveModel: ruleHolder: transformModel: browseModel - xxxxx criticHolder - xxxxx falsepositiveModel - xxxxx ruleHolder - xxxxx transformModel - xxxxx ! !EyeInspector commentStamp: '' prior: 68376180! a Spec Inspector that does exactly the same thing as the old inspector Inspector. To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeInspector class methodsFor: 'spec' stamp: 'CamilloBruni 9/18/2013 22:13' prior: 48648615! inspectorSpec ^ SpecLayout composed newRow: [ :r | r newColumn: #list right: 0.6; addSplitter; newColumn: #description left: 0.4 ] bottom: 0.3; addHSplitter; newRow: #text top: 0.7; yourself! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/18/2013 22:11' prior: 48649010! initializeWidgets self instantiateModels: #( list NewListModel text TextModel description TextModel ). text aboutToStyle: true. ! ! !InspectorWrapper commentStamp: '' prior: 68376492! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !InspectorWrapper class methodsFor: 'specs' stamp: 'CamilloBruni 9/18/2013 22:14' prior: 38704909! inspectorSpec ^ SpecLayout composed newColumn: [ :c | c add: #toolbar height: 18; add: #inspector withSpec: #inspectorSpec ]; yourself! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:22'! history ^ history! ! !InspectorWrapper methodsFor: 'initialize' stamp: 'CamilloBruni 9/18/2013 22:12' prior: 36504988! initializeWidgets self instantiateModels: #( toolbar EyeInspectorToolBar ).! ! !InspectorWrapper methodsFor: 'history' stamp: 'CamilloBruni 9/18/2013 22:26' prior: 36506524! pushHistory history add: (self object -> self selectedIndex). self toolbar updateButtonStatus.! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:16'! toolbar ^ toolbar! ! !InspectorWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:16'! toolbar: anObject toolbar := anObject ! ! !SingleCodeCriticResultList commentStamp: '' prior: 68376772! I am a browser for the SmallLint Critics of a rule.! !SingleCodeCriticResultList class methodsFor: 'specs' stamp: 'SimonAllier 9/28/2012 13:53'! defaultSpec ^ SpecLayout composed newColumn: [:c | c add: #criticsModel; add: #toolbarModel height: 25; addSplitter; add: #textModel ]! ! !SingleCodeCriticResultList class methodsFor: 'icons' stamp: 'StephaneDucasse 11/21/2012 18:11'! exclamationIcon ^ icons at: #'exclamationIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self exclamationIconContents readStream) ]. ! ! !SingleCodeCriticResultList class methodsFor: 'icons' stamp: 'StephaneDucasse 11/21/2012 18:11'! exclamationIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJPSURBVDjLpZPLS5RhFMYfv9QJ lelTQZwRb2OKlKuINuHGLlBEBEOLxAu46oL0F0QQFdWizUCrWnjBaDHgThCMoiKkhUONTqmj mDp2GZ0UnWbmfc/ztrC+GbM2dXbv4ZzfeQ7vefKMMfifyP89IbevNNCYdkN2kawkCZKfSPZT OGTf6Y/m1uflKlC3LvsNTWArr9BT2LAf+W73dn5jHclIBFZyfYWU3or7T4K7AJmbl/yG7EtX 1BQXNTVCYgtgbAEAYHlqYHlrsTEVQWr63RZFuqsfDAcdQPrGRR/JF5nKGm9xUxMyr0YBAEXX HgIANq/3ADQobD2J9fAkNiMTMSFb9z8ambMAQER3JC1XttkYGGZXoyZEGyTHRuBuPgBTUu7V SnUAgAUAWutOV2MjZGkehgYUA6O5A0AlkAyRnotiX3MLlFKduYCqAtuGXpyH0XQmOj+TIURt 51OzURTYZdBKV2UBSsOIcRp/TVTT4ewK6idECAihtUKOArWcjq/B8tQ6UkUR31+OYXP4sTOd isivrkMyHodWejlXwcC38Fvs8dY5xaIId89VlJy7ACpCNCFCuOp8+BJ6A631gANQSg1mVmOx xGQYRW2nHMha4B5WA3chsv22T5/B13AIicWZmNZ6cMchTXUe81Okzz54pLi0uQWp+TmkZqMw xsBV74Or3od4OISPr0e3SHa3PX0f3HXKofNH/UIG9pZ5PeUth+CyS2EMkEqs4fPEOBJLsysk e48/+xD8oxcAYPzs4QaS7RR2kbLTTOTQieczfzfTv8QPldGvTGoF6/8AAAAASUVORK5CYII='! ! !SingleCodeCriticResultList class methodsFor: 'class initialization' stamp: 'StephaneDucasse 11/21/2012 18:11'! initialize icons := IdentityDictionary new! ! !SingleCodeCriticResultList class methodsFor: 'specs'! title ^ 'Critic Browser'! ! !SingleCodeCriticResultList class methodsFor: 'icons' stamp: 'StephaneDucasse 11/21/2012 18:13'! wrenchOrangeIcon ^ icons at: #'wrenchOrangeIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self wrenchOrangeIconContents readStream) ]. ! ! !SingleCodeCriticResultList class methodsFor: 'icons' stamp: 'StephaneDucasse 11/21/2012 18:13'! wrenchOrangeIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHaSURBVDjLlZO7a1NRHMfzfzhI KQ5OHR1ddRRBLA6lg4iTd5PSas37YR56Y2JiHgg21uoFxSatCVFjbl5iNBBiMmUJgWwZhCB4 pR9/V4QKfSQdDufF5/v7nu85xwJYprV0Oq0kk8luIpEw4vG48f/eVDiVSikCTobDIePxmGg0 yokEBO4OBgNGoxH5fJ5wOHwygVgsZpjVW60WqqqWzbVgMIjf78fn8xlTBcTy736/T7VaJRQK fQoEArqmafR6Pdxu9/ECkUjkglje63Q6NBoNisUihUKBcrlMpVLB6XR2D4df3VQnmRstsWzU 63WazSZmX6vV0HWdUqmEw+GY2Gw25SC8dV1l1wrZNX5s3qLdbpPL5fB6vXumZalq2O32rtVq VQ6GuGnCd+HbFnx9AZrC+MkSHo/np8vlmj/M7f4ks6yysyawgB8fwPv70HgKG8v8cp/7fFRO /+AllewqNJ/DhyBsi9A7J1QTkF4E69mXRws8u6ayvSJwRqoG4K2Md+ygxyF5FdbPaMfdlIXU ZfiyAUWx/OY25O4JHBP4CtyZ16a9EwuRi1CXs+5K1ew6lB9DXERX517P8tEsPDzfNIP6C5Ye QewSrJyeCd4P0bnwXYISy3MCn5oZNtsf3pH46e7XBJcAAAAASUVORK5CYII='! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:33'! addAllCriticsToFalsePositive criticsModel listItems do: [ :item | cache addFalsePositive: item forRule: rule ].! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 12:42'! addClassToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :critic | cache addFalsePositiveClass: critic criticClass] ] ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34'! addCriticToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache addFalsePositive: item forRule: rule ]]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:34'! addCriticToToDo criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache addToDo: item forRule: rule ]]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'SimonAllier 3/22/2013 15:12'! addRuleToFalsePositive criticsModel selectedItems ifNotNil: [ :criticss | criticss do: [ :critic | cache addFalsePositiveRule: rule forPackage: critic mcWorkingCopy]].! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:35'! browseCritic criticsModel selectedItem ifNotNil: [ :elem | elem isBehavior ifTrue: [ elem theNonMetaClass browse ] ifFalse: [ elem browse ] ] ! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'SimonAllier 1/23/2013 11:22'! cache: acache cache := acache! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35'! criticsModel ^ criticsModel! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'SimonAllier 3/21/2013 15:24'! criticsModelContains: aCritic ^ criticsModel listItems anySatisfy: [ :each | each name = aCritic name]! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 10:51'! criticsOf: aRule cache ifNil: [^ {}]. criticsModel items: ((cache criticsOf: aRule) sorted: [ :a :b | a name < b name ]).! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45'! defaultColor ^ Color red! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45'! falsePositiveColor ^ Color darkGray! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 12:46'! formatCritic: aCritic ^ String streamContents: [:s | aCritic criticNameOn: s ] ! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'SimonAllier 1/23/2013 11:49'! iconFor: anItem ^ (cache isFalsePositive: anItem forRule: rule) ifFalse: [(cache isToDo: anItem forRule: rule) ifTrue: [ self class wrenchOrangeIcon ] ifFalse: [ self class exclamationIcon ] ]! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'SimonAllier 3/27/2013 11:17'! implementorsOfCritic criticsModel selectedItem ifNotNil: [ :item | item browse] ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'CamilloBruni 9/18/2013 22:50'! initialize super initialize. self initializeShortcuts! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'MarcusDenker 5/21/2013 07:42'! initializeActionToPerformOnTextModel | selectedItem | sourceCodeModel acceptBlock: [ :text | selectedItem := criticsModel selectedItem. (selectedItem isCompiledMethod and: [ rule isTransformationRule not ]) ifTrue: [ selectedItem methodClass compile: text ] ifFalse: [ Smalltalk evaluate: text ]] ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 1/23/2013 11:26'! initializeDisplayCritic: aCritic forRule: aRule | criticRepresentation | criticRepresentation := (self formatCritic: aCritic) asMorph. ^ (cache isFalsePositive: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self falsePositiveColor ] ifFalse: [ (cache isToDo: aCritic forRule: aRule) ifTrue: [ criticRepresentation color: self toDoColor ] ifFalse: [ criticRepresentation color: self defaultColor ]]! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 9/28/2012 13:53'! initializePresenter self whenSelectedItemChangesOnListModel. ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'CamilloBruni 9/18/2013 22:52'! initializeShortcuts criticsModel bindKeyCombination: $b command toAction: [ self browseCritic ]! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:37'! initializeTextInputFieldModel |critics| textInputFieldModel autoAccept: true; ghostText: 'Search field'; text: ' '; removeEntryCompletion. textInputFieldModel acceptBlock: [ :text | |matchText| critics :=cache criticsOf: rule. matchText := '*', text, '*'. criticsModel items: (text isEmpty ifTrue: [ critics ] ifFalse: [ critics select: [ :critic | matchText match: (self formatCritic: critic)]]). criticsModel updateList ] ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 1/25/2013 16:25'! initializeToolBar self toolbarModel whenFalsePositiveClickedDo: [ self addCriticToFalsePositive ]. ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'CamilloBruni 9/18/2013 22:52'! initializeWidgets self instantiateModels: #( criticsModel IconListModel sourceCodeModel TextModel toolbarModel CriticToolbar textInputFieldModel TextInputFieldModel ). criticsModel beMultipleSelection. self initializeTextInputFieldModel. self initializeToolBar. self initializeActionToPerformOnTextModel. criticsModel displayBlock: [:selec | self initializeDisplayCritic: selec forRule: rule]. criticsModel menu: [ :a :b | self menu: a shifted: b ]. criticsModel icons: [ :item | self iconFor: item ]. self focusOrder add: criticsModel; add: toolbarModel; add: sourceCodeModel. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'SimonAllier 3/29/2013 11:06'! menu: aMenu shifted: aBoolean aMenu add: 'Browse' translated target: self selector: #browseCritic; add: 'Senders' translated target: self selector: #sendersOfCritic; add: 'Implementors' translated target: self selector: #implementorsOfCritic; addLine; add: 'Mark selected critic as false Positive' translated target: self selector: #addCriticToFalsePositive; add: 'Unmark selected critic as false Positive' translated target: self selector: #removeCriticToFalsePositive; add: 'Mark all critics as false Positive' translated target: self selector: #addAllCriticsToFalsePositive; add: 'Unmark all critics as false Positive' translated target: self selector: #removeAllCriticsToFalsePositive; addLine; add: 'Mark selected critic as TODO' translated target: self selector: #addCriticToToDo; add: 'Unmark selected critic as TODO' translated target: self selector: #removeCriticToToDo; addLine; add: 'Mark selected class as false Positive' translated target: self selector: #addClassToFalsePositive; add: 'Unmark selected class as false Positive' translated target: self selector: #removeClassToFalsePositive; addLine; add: 'Ban this rule for the selected package' translated target: self selector: #addRuleToFalsePositive; add: 'Unban this rule for the selected package' translated target: self selector: #removeRuleToFalsePositive. (rule isNil not and: [ rule isTransformationRule]) ifTrue: [ aMenu addLine; add: 'Transform selected critic' translated target: self selector: #transformCritic ]. ^ aMenu! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:43'! removeAllCriticsToFalsePositive criticsModel listItems do: [ :item | cache removeFalsePositive: item forRule: rule ]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 12:46'! removeClassToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :critic | cache removeFalsePositiveClass: critic criticClass ]] ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:43'! removeCriticToFalsePositive criticsModel selectedItems ifNotNil: [ :items | items do: [ :item | cache removeFalsePositive: item forRule: rule ]]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:44'! removeCriticToToDo criticsModel selectedItems ifNotNil: [:items | items do: [ :item | cache removeToDo: item forRule: rule ]]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'SimonAllier 3/22/2013 15:11'! removeRuleToFalsePositive criticsModel selectedItems ifNotNil: [ :criticss | criticss do: [ :critic | cache removeFalsePositiveRule: rule forPackage: critic mcWorkingCopy]].! ! !SingleCodeCriticResultList methodsFor: 'protocol' stamp: 'StephaneDucasse 3/21/2013 09:46'! resetSelection self criticsModel resetSelection! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'SimonAllier 3/27/2013 11:28'! rule ^ rule! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:37'! rule: aRule rule := aRule. (rule isNil or: [ rule isComposite ]) ifTrue: [ ^ self ]. self criticsOf: aRule. toolbarModel rule: rule.! ! !SingleCodeCriticResultList methodsFor: 'private'! selectionIntervalFor: aString ^ rule result selectionIntervalFor: aString! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'StephaneDucasse 3/21/2013 09:44'! sendersOfCritic | abstractTool | abstractTool := AbstractTool new. criticsModel selectedItem ifNotNil: [ :elem | elem isBehavior ifTrue: [ abstractTool browseClassRefsOf: elem ] ifFalse: [ abstractTool browseSendersOfMessagesFrom: elem selector ] ] ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 3/27/2013 11:04'! setTextModelForClassOrMethod: aCritic | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: aCritic definition. sourceCodeModel behavior: aCritic textBehavior. interval := self selectionIntervalFor: aCritic definition. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'StephaneDucasse 3/21/2013 09:38'! setTextModelForNil | text | text := rule longDescription isEmpty ifTrue: [ rule name ] ifFalse: [ rule longDescription ]. sourceCodeModel aboutToStyle: false. sourceCodeModel text: text. sourceCodeModel behavior: nil. toolbarModel critic: nil ! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 3/27/2013 10:52'! setTextModelForTransformationRule: selection | textDiff change | rule result. change := rule changes detect: [ :ch | (ch changeClassName = selection criticTheNonMetaclassClass name) & (ch selector = selection selector)]. textDiff := (TextDiffBuilder from: selection sourceCode to: change source inClass: selection methodClass) buildDisplayPatch. sourceCodeModel behavior: nil. sourceCodeModel text: textDiff. sourceCodeModel aboutToStyle: false. ! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'SimonAllier 3/27/2012 17:18'! textInputFieldModel ^ textInputFieldModel! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35'! textModel ^ sourceCodeModel! ! !SingleCodeCriticResultList methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 09:45'! toDoColor ^ Color orange! ! !SingleCodeCriticResultList methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:35'! toolbarModel ^ toolbarModel! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'SimonAllier 3/29/2013 11:09'! transformCritic criticsModel selectedItems ifNotNil: [ :items | items do: [:critic | rule transform: critic ] displayingProgress: [:critic|]]! ! !SingleCodeCriticResultList methodsFor: 'thread' stamp: 'AlainPlantec 7/9/2013 12:41'! updateList self criticsOf: rule. thread ifNotNil: [ thread terminate ]. thread := [ UIManager default defer: [ criticsModel updateList ]] fork.! ! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'SimonAllier 3/29/2013 10:42'! whenSelectedItemChangesOnListModel criticsModel whenSelectedItemChanged: [ :selection | sourceCodeModel setSelection: (0 to:0). rule isNil ifFalse: [ (selection ifNil: [ self setTextModelForNil ] ifNotNil: [ toolbarModel critic: selection. rule isTransformationRule ifTrue: [ self setTextModelForTransformationRule: selection ] ifFalse: [ self setTextModelForClassOrMethod: selection ]] ) ] ]! ! !MCHttpRepository methodsFor: 'private' stamp: 'CamilloBruni 9/18/2013 14:17' prior: 24808350! httpClient "Return a new, specifically configured instance of the HTTP client for internal use. Note how we request GZIP compression and will signal progress." ^ ZnClient new systemPolicy; beOneShot; username: self user password: self password; signalProgress: true; yourself! ! SingleRuleCriticBrowser removeSelector: #whenSelectedItemChangesOnListModel! SingleRuleCriticBrowser removeSelector: #updateList! SingleRuleCriticBrowser removeSelector: #transformCritic! SingleRuleCriticBrowser removeSelector: #toolbarModel! SingleRuleCriticBrowser removeSelector: #toDoColor! SingleRuleCriticBrowser removeSelector: #textModel! SingleRuleCriticBrowser removeSelector: #textInputFieldModel! SingleRuleCriticBrowser removeSelector: #setTextModelForTransformationRule:! SingleRuleCriticBrowser removeSelector: #setTextModelForNil! SingleRuleCriticBrowser removeSelector: #setTextModelForClassOrMethod:! SingleRuleCriticBrowser removeSelector: #sendersOfCritic! SingleRuleCriticBrowser removeSelector: #selectionIntervalFor:! SingleRuleCriticBrowser removeSelector: #rule:! SingleRuleCriticBrowser removeSelector: #rule! SingleRuleCriticBrowser removeSelector: #resetSelection! SingleRuleCriticBrowser removeSelector: #removeRuleToFalsePositive! SingleRuleCriticBrowser removeSelector: #removeCriticToToDo! SingleRuleCriticBrowser removeSelector: #removeCriticToFalsePositive! SingleRuleCriticBrowser removeSelector: #removeClassToFalsePositive! SingleRuleCriticBrowser removeSelector: #removeAllCriticsToFalsePositive! SingleRuleCriticBrowser removeSelector: #menu:shifted:! SingleRuleCriticBrowser removeSelector: #initializeWidgets! SingleRuleCriticBrowser removeSelector: #initializeToolBar! SingleRuleCriticBrowser removeSelector: #initializeTextInputFieldModel! SingleRuleCriticBrowser removeSelector: #initializePresenter! SingleRuleCriticBrowser removeSelector: #initializeDisplayCritic:forRule:! SingleRuleCriticBrowser removeSelector: #initializeActionToPerformOnTextModel! SingleRuleCriticBrowser removeSelector: #implementorsOfCritic! SingleRuleCriticBrowser removeSelector: #iconFor:! SingleRuleCriticBrowser removeSelector: #formatCritic:! SingleRuleCriticBrowser removeSelector: #falsePositiveColor! SingleRuleCriticBrowser removeSelector: #defaultColor! SingleRuleCriticBrowser removeSelector: #criticsOf:! SingleRuleCriticBrowser removeSelector: #criticsModelContains:! SingleRuleCriticBrowser removeSelector: #criticsModel! SingleRuleCriticBrowser removeSelector: #cache:! SingleRuleCriticBrowser removeSelector: #browseCritic! SingleRuleCriticBrowser removeSelector: #addRuleToFalsePositive! SingleRuleCriticBrowser removeSelector: #addCriticToToDo! SingleRuleCriticBrowser removeSelector: #addCriticToFalsePositive! SingleRuleCriticBrowser removeSelector: #addClassToFalsePositive! SingleRuleCriticBrowser removeSelector: #addAllCriticsToFalsePositive! SingleRuleCriticBrowser class removeSelector: #wrenchOrangeIconContents! SingleRuleCriticBrowser class removeSelector: #wrenchOrangeIcon! SingleRuleCriticBrowser class removeSelector: #title! SingleRuleCriticBrowser class removeSelector: #initialize! SingleRuleCriticBrowser class removeSelector: #exclamationIconContents! SingleRuleCriticBrowser class removeSelector: #exclamationIcon! SingleRuleCriticBrowser class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #SingleRuleCriticBrowser! EyeInspector removeSelector: #toolbar:! EyeInspector removeSelector: #toolbar! EyeInspector class removeSelector: #inspectorSpecSlow! "Manifest-CriticBrowser"! "Monticello"! "Polymorph-Tools-Diff"! "Spec-Debugger"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(19 September 2013 11:11:54 am) Pharo.image priorSource: 18032236! ----STARTUP----an Array(19 September 2013 11:17:56 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 September 2013 11:17:56 am) Pharo-30407.image priorSource: 18073684! ----STARTUP----an Array(19 September 2013 4:33:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/19/2013 16:29' prior: 68364195! commentForCurrentUpdate ^ '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 1/2)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/19/2013 16:29'! script200 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-EstebanLorenzano.81.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.113.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.913.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/19/2013 16:29'! update30408 "self new update30408" self withUpdateLog: '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 1/2)'. self loadTogether: self script200 merge: false. WeakArray restartFinalizationProcess. self flushCaches. ! ! "ScriptLoader30"! !VirtualMachine methodsFor: 'testing' stamp: 'EstebanLorenzano 9/19/2013 15:30'! isPharoVM "Answers if this VM is a valid PharoVM (made with our sources)" | version | self flag: #todo. "We need a certain way of identify PharoVM, but in the mean time this ensures " version := self version. ^ (version beginsWith: 'PharoVM') or: [ (version includesSubstring: 'NBCoInterpreter') or: [ (version includesSubstring: 'Commit: ') and: [ | pos | pos := (version findString: 'Commit: ') + 8. (version copyFrom: pos to: pos + 39) allSatisfy: [ :each | (($a to: $f), ($0 to: $9)) includes: each ] ] ] ]! ! !InstVarSetter methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:08' prior: 48004806! initialize descriptionHolder := nil asValueHolder. textBindings := Dictionary new. super initialize. self announcer on: WidgetBuilt send: #widgetBuilt to: self! ! !ComposableModel methodsFor: 'protocol-announcements' stamp: 'EstebanLorenzano 9/8/2013 16:06' prior: 19987168! on: anAnnouncement send: aSelector to: aTarget self announcer on: anAnnouncement send: aSelector to: aTarget! ! !InspectorWrapper methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:08' prior: 48892512! initialize super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer on: WidgetBuilt send: #setRefreshedToTrue to: self. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !NewValueHolder methodsFor: 'announcements' stamp: 'EstebanLorenzano 9/8/2013 16:05' prior: 49422243! whenChangedDo: aBlock | block | block := [:announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. announcer when: ValueChanged do: block! ! !NewValueHolder methodsFor: 'announcements' stamp: 'EstebanLorenzano 9/8/2013 16:05' prior: 28447619! whenChangedSend: aSelector to: aReceiver announcer on: ValueChanged send: aSelector to: aReceiver! ! !MessageBrowser methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/4/2013 20:51'! buildUpdateTitle "Trying to have a clean subscription, this method is called in #initialize" self updateTitle. textModel text: textModel getText.! ! !MessageBrowser methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:08' prior: 49419583! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. titleHolder := super title asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer when: WidgetBuilt send: #buildUpdateTitle to: self! ! !TreeModel methodsFor: 'initialize' stamp: 'EstebanLorenzano 9/8/2013 16:10' prior: 48011360! registerEvents treeModel announcer on: MorphTreeSelectionChanged send: #onMorphTreeSelectionChanged: to: self. rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. rootNodeHolder whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !ChangeSorterApplication methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:06' prior: 49418508! initialize prettyPrint := false. showDiff := false. model := ChangeSorterModel new. SystemAnnouncer uniqueInstance weak when: CurrentChangeSetChanged send: #updateTitle to: self. super initialize. self initializeAnnouncements. ! ! !NewListModel methodsFor: 'protocol-events' stamp: 'EstebanLorenzano 9/8/2013 16:09' prior: 49423810! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !WidgetSetter methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:10' prior: 48029528! initialize model := nil asValueHolder. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer on: WidgetBuilt send: #registerEvents to: self.! ! !WeakArray class methodsFor: 'private' stamp: 'EstebanLorenzano 9/19/2013 14:00' prior: 54766536! finalizationProcess [true] whileTrue: [ FinalizationSemaphore wait. FinalizationLock critical: [ FinalizationDependents do: [:weakDependent | weakDependent ifNotNil: [ [ weakDependent finalizeValues ] on: Exception fork: [:ex | ex pass ] ]]]]. ! ! !ListComposableModel methodsFor: 'protocol-events' stamp: 'EstebanLorenzano 9/8/2013 16:08' prior: 49430555! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !WeakFinalizationList class methodsFor: 'vm capability test' stamp: 'EstebanLorenzano 9/19/2013 16:06' prior: 54769263! checkTestPair self flag: #removeMe. "In second step" ^ true! ! !WeakFinalizationList class methodsFor: 'vm capability test' stamp: 'EstebanLorenzano 9/19/2013 16:02' prior: 54769588! initTestPair self flag: #removeMe. "In second step"! ! !WeakFinalizationList class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 9/19/2013 15:32' prior: 54769082! initialize Smalltalk removeFromStartUpList: self; addToStartUpList: self after: SmalltalkImage ! ! !WeakFinalizationList class methodsFor: 'system startup' stamp: 'EstebanLorenzano 9/19/2013 14:36'! startUp: resuming resuming ifTrue: [ HasNewFinalization := Smalltalk vm isPharoVM ]! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'EstebanLorenzano 9/8/2013 16:52' prior: 49455171! on: anAnnouncementClass do: aValuable "Do not use this message on announcer weak. We did not deprecated this method because it may break some behavior." self error: 'Not supported'! ! !WeakSubscriptionBuilder methodsFor: 'private' stamp: 'StephaneDucasse 8/27/2013 21:50' prior: 49455497! subscribe: anAnnouncementClass do: aValuable "Do not use this message on weak announcer because it does not work. The block will hold strongly the receiver and more. We need ephemerons for that'" "aValuable isBlock ifTrue: [ self error: 'Do not use this message on weak and block because it does not work. We need ephemerons for that']." ^ announcer basicSubscribe: ( WeakAnnouncementSubscription new announcer: announcer; announcementClass: anAnnouncementClass; valuable: aValuable)! ! !WeakSubscriptionBuilder methodsFor: 'wrapped protocol' stamp: 'EstebanLorenzano 9/8/2013 16:52' prior: 49456124! when: anAnnouncementClass do: aValuable "Do not use this message on announcer weak. We did not deprecated this method because it may break some behavior." self error: 'Not supported'! ! !SpecDebugger methodsFor: 'initialization' stamp: 'EstebanLorenzano 9/8/2013 16:09' prior: 47999636! initialize session := nil asValueHolder. label := nil asValueHolder. super initialize. needRefresh := false. self announcer on: WidgetBuilt send: #onWidgetBuilt to: self. self whenWindowChanged: [ :w | w whenClosedDo: [ self close ] ]. session whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ]. label whenChangedDo: [ self updateTitle ]! ! "Announcements-Core"! "Collections-Weak"! "Spec-Builder"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Tools"! "Spec-Widgets"! "System-Support"! ----End fileIn----! ----QUIT----an Array(19 September 2013 4:33:51 pm) Pharo.image priorSource: 18073895! ----STARTUP----an Array(19 September 2013 4:39:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 September 2013 4:39:25 pm) Pharo-30408.image priorSource: 18093729! ----STARTUP----an Array(19 September 2013 4:47:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/19/2013 16:44' prior: 68405858! commentForCurrentUpdate ^ '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 2/2)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/19/2013 16:44'! script201 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-EstebanLorenzano.82.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.113.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-StephaneDucasse.170.mcz RPackage-Tests-MarcusDenker.117.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.913.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/19/2013 16:45'! update30409 "self new update30409" self withUpdateLog: '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 2/2)'. self loadTogether: self script201 merge: false. self flushCaches. ! ! "ScriptLoader30"! WeakFinalizationList class removeSelector: #initTestPair! WeakFinalizationList class removeSelector: #checkTestPair! "Collections-Weak"! ----End fileIn----! ----QUIT----an Array(19 September 2013 4:47:44 pm) Pharo.image priorSource: 18093938! ----STARTUP----an Array(19 September 2013 4:53:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 September 2013 4:53:33 pm) Pharo-30409.image priorSource: 18105223! ----STARTUP----an Array(19 September 2013 5:09:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 9/19/2013 17:06' prior: 68425900! commentForCurrentUpdate ^ '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 3/3) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 9/19/2013 17:06'! script202 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-EstebanLorenzano.82.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.126.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.113.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.217.mcz Refactoring-Critics-MarcusDenker.68.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-EstebanLorenzano.2.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.78.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.913.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 9/19/2013 17:06'! update30410 "self new update30410" self withUpdateLog: '11544 Memory leak when using weak announcements with blocks https://pharo.fogbugz.com/f/cases/11544 (step 3/3) '. self loadTogether: self script202 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 9/19/2013 16:56' prior: 31967210! registerInterestToAnnouncer: anAnnouncer "There should be only one" anAnnouncer unsubscribe: self. " Announcer initialize" self flag: #todo. "Fiinish monticello integration (commented below)" anAnnouncer weak on: CategoryAdded send: #systemCategoryAddedActionFrom: to: self; on: CategoryRemoved send: #systemCategoryRemovedActionFrom: to: self; on: CategoryRenamed send: #systemCategoryRenamedActionFrom: to: self; on: ClassAdded send: #systemClassAddedActionFrom: to: self; "on: ClassCommented do: [:ann | ""Only re-emit public corresponding announcement"" ""Not yet implemented?"" ];" on: ClassRecategorized send: #systemClassRecategorizedActionFrom: to: self; on: ClassRemoved send: #systemClassRemovedActionFrom: to: self; on: ClassRenamed send: #systemClassRenamedActionFrom: to: self; on: ClassReorganized send: #systemClassReorganizedActionFrom: to: self; on: MethodAdded send: #systemMethodAddedActionFrom: to: self; on: MethodModified send: #systemMethodModifiedActionFrom: to: self; on: MethodRecategorized send: #systemMethodRecategorizedActionFrom: to: self; on: MethodRemoved send: #systemMethodRemovedActionFrom: to: self; on: ProtocolAdded send: #systemProtocolAddedActionFrom: to: self; on: ProtocolRemoved send: #systemProtocolRemovedActionFrom: to: self; "Monticello announcements (old protocol)" " on: MCVersionCreated send: #update: to: self; on: MCPackageModified send: #update: to: self;" on: MCWorkingCopyCreated send: #updateAfterNewMCPackageRegistred: to: self; on: MCWorkingCopyDeleted send: #updateAfterNewMCPackageUnregistred: to: self ! ! !RPackageObsoleteTest methodsFor: 'accessing' stamp: 'EstebanLorenzano 9/19/2013 16:59'! setNotRun notRun := true! ! !RPackageObsoleteTest methodsFor: 'tests' stamp: 'EstebanLorenzano 9/19/2013 17:00' prior: 31955479! testAnnouncementClassRemovedIsRaisedOnRemoveFromSystem "self debug: #testAnnouncementClassRemovedIsRaisedOnRemoveFromSystem" | foo | [ notRun := false. SystemAnnouncer uniqueInstance on: ClassRemoved send: #setNotRun to: self. foo := self createNewClassNamed: #FooForTest2. self deny: notRun. foo removeFromSystem. self assert: notRun ] ensure: [ SystemAnnouncer uniqueInstance unsubscribe: self ]. ! ! !RPackageObsoleteTest methodsFor: 'tests' stamp: 'EstebanLorenzano 7/27/2012 19:40' prior: 31955943! testMethodPackageFromObsoleteClass "self debug: #testMethodPackageFromObsoleteClass" | pack method foo | [ pack := self createNewPackageNamed: 'P1'. foo := self createNewClassNamed: #FooForTest inPackage: pack. foo compile: 'bar ^42'. method := foo>>#bar. foo obsolete. self assert: (method packageFromOrganizer: pack organizer) equals: foo package. ] ensure: [ foo ifNotNil: [ foo setName: foo originalName. foo removeFromSystem. ]. Smalltalk globals removeKey: #FooForTest ifAbsent: []. ]! ! !RPackageObsoleteTest methodsFor: 'tests' stamp: 'GuillermoPolito 5/29/2012 13:25' prior: 31956568! testMethodPackageOfRemovedClass "self debug: #testMethodPackageOfRemovedClass" | pack method foo | pack := self createNewPackageNamed: 'P1'. foo := self createNewClassNamed: #FooForTest2 inPackage: pack. foo compileSilently: 'bar ^42'. method := foo>>#bar. foo removeFromSystem. self deny: (pack includesClassNamed: #FooForTest2 ) ! ! "RPackage-SystemIntegration"! "RPackage-Tests"! ----End fileIn----! ----QUIT----an Array(19 September 2013 5:09:46 pm) Pharo.image priorSource: 18105432! ----STARTUP----an Array(19 September 2013 5:15:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 September 2013 5:15:53 pm) Pharo-30410.image priorSource: 18120113! ----STARTUP----an Array(20 September 2013 8:18:17 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/20/2013 08:14' prior: 68437394! commentForCurrentUpdate ^ '11603 Better name for Critics UI https://pharo.fogbugz.com/f/cases/11603 11638 remove not used class variables in WeakFinalizationList https://pharo.fogbugz.com/f/cases/11638 11636 Fix Form >> #asGrayScaleWithAlpha https://pharo.fogbugz.com/f/cases/11636'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/20/2013 08:15'! script203 ^ 'AST-Core-MarcusDenker.191.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1614.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.219.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.99.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.913.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/20/2013 08:15'! update30411 "self new update30411" self withUpdateLog: '11603 Better name for Critics UI https://pharo.fogbugz.com/f/cases/11603 11638 remove not used class variables in WeakFinalizationList https://pharo.fogbugz.com/f/cases/11638 11636 Fix Form >> #asGrayScaleWithAlpha https://pharo.fogbugz.com/f/cases/11636'. self loadTogether: self script203 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WeakFinalizationList commentStamp: 'Igor.Stasenko 9/22/2010 21:09' prior: 42781444! IMPORTANT!!!!!! This class is a special object, recognized by VM. Its only purpose is to a) identify a special kind of objects who usually having a weak references but also having an instance of me held by first non-weak fixed slot (instance variable). b) a 'first' instance variable points to the head of a list of items, reported by VM which has weak references which became garbage during last garbage collection At my class side, there are some public behavior, which is used by finalization process to detect if VM supports new finalization scheme or should use the old one. Weak registry using #hasNewFinalization for switching to correct finalization logic, depending on VM it currently runs on. ! !Form methodsFor: 'converting' stamp: 'CamilloBruni 9/19/2013 10:24' prior: 68283755! asGrayScaleWithAlpha "Unlike asGrayScale, this method fully preserves the alpha channel and only desaturates the form(makes grayscale)." ^ (self asFormOfDepth: 32) collectColors: [ :c | |l| l := c luminance. Color r:l g: l b: l alpha: c alpha ]! ! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilleTeruel 9/18/2013 14:58' prior: 68382020! initializePresenter rulesModel whenSelectedItemChanged: [ :rule | (rule isNil or: [ rule isComposite ]) ifFalse: [ criticModel resetSelection. criticModel rule: rule. criticModel setTextModelForNil]. self setTitle: rule name] ! ! !CriticBrowser methodsFor: 'menu' stamp: 'CamilleTeruel 9/19/2013 17:35' prior: 33897841! menu: aMenu shifted: aBoolean aMenu add: 'Browse rule' translated target: self selector: #browseRule; add: 'Reapply this rule' target: self selector: #reapplyThisRule; addLine; add: 'Ban from selected packages' translated target: self selector: #addRuleToFalsePositive; add: 'Unban from selected packages' translated target: self selector: #removeRuleToFalsePositive. ^ aMenu! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'CamilleTeruel 9/18/2013 14:58' prior: 33898772! methodAdded: anAnnouncement anAnnouncement methodClass isManifest ifFalse: [ ^ self ]. self updateCountOf: rulesModel selectedItem.! ! !CriticBrowser methodsFor: 'protocol' stamp: 'CamilleTeruel 9/18/2013 11:21' prior: 33899971! onWindowClosed cache cacheChange ifTrue: [ (MorphicUIManager new confirm: 'Do you want log all wrong violations in the Manifests before closing the Critics Browser ?') ifTrue: [ cache logInManifest ]]. ! ! !CriticBrowser methodsFor: 'private' stamp: 'CamilleTeruel 9/18/2013 14:58' prior: 46042192! reapplyAllRules | ruleCount total rule | ruleCount := 0. rule := rulesModel roots first. total := rule leaves size. rule leaves do: [ :r | ruleCount := ruleCount + 1. self setTitle: (String streamContents: [:s | s << 'run rules: ' << r name << ' (' << ruleCount asString << '/' << total asString <<')']). self reapplyRule: r ]. self setTitle: 'Critics Browser'.! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'CamilleTeruel 9/18/2013 10:47' prior: 48027639! registerToAnnouncements SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #classModified: to: self; on: MethodModified send: #methodModified: to: self; on: MethodRemoved send: #methodRemoved: to: self. self window window announcer on: WindowClosed send: #onWindowClosed to: self. ! ! !CriticBrowser methodsFor: 'private' stamp: 'StephaneDucasse 9/13/2013 20:07' prior: 49568654! stringMorphForRule: rule | unclassified falsePositives toDos text total | falsePositives := (cache falsePositiveOf: rule) size. toDos := (cache toDosOf: rule) size. total := (cache criticsOf: rule) size. unclassified := total - falsePositives - toDos. text := String streamContents: [ :s | s << rule name; << ' (To sort: '; print: unclassified; << ', ToDo: '; print: toDos; << ', Wrong: '; print: falsePositives; << ')' ]. ^ text asMorph color: (self colorForRule: rule); yourself ! ! !CriticBrowser methodsFor: 'thread' stamp: 'CamilleTeruel 9/18/2013 15:03' prior: 49569284! updateTree criticModel updateList. rulesModel updateTree! ! !RBBadMessageRule methodsFor: 'private' stamp: 'CamilleTeruel 9/18/2013 11:25' prior: 30259189! badSelectors ^ #( #become: #isKindOf: #changeClassToThatOf: #respondsTo: #isMemberOf: #perform: #perform:arguments: #perform:with: #perform:with:with: #perform:with:with:with: #allOwners #instVarAt: #instVarAt:put: #nextInstance instVarsInclude: #nextObject #halt caseOf: caseOf:otherwise: caseError isThisEverCalled isThisEverCalled: becomeForward: instVarNamed: instVarNamed:put: someObject primitiveChangeClassTo:)! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'CamilleTeruel 9/19/2013 18:03'! addMarkingMenuItemsTo: aMenu (criticsModel selectedItems anySatisfy: [ :critic | cache isFalsePositive: critic forRule: rule ]) ifTrue: [ aMenu add: 'Unmark as wrong' translated target: self selector: #removeCriticToFalsePositive ]. (criticsModel selectedItems anySatisfy: [ :critic | (cache isFalsePositive: critic forRule: rule) not ]) ifTrue: [ aMenu add: 'Mark as wrong' translated target: self selector: #addCriticToFalsePositive ]. (criticsModel selectedItems anySatisfy: [ :critic | cache isToDo: critic forRule: rule ]) ifTrue: [ aMenu add: 'Unmark as TODO' translated target: self selector: #removeCriticToToDo ]. (criticsModel selectedItems anySatisfy: [ :critic | (cache isToDo: critic forRule: rule) not ]) ifTrue: [ aMenu add: 'Mark as TODO' translated target: self selector: #addCriticToToDo ]. ! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'CamilleTeruel 9/19/2013 17:52'! addNavigationMenuItemsTo: aMenu aMenu add: 'Browse' translated target: self selector: #browseCritic; add: 'Senders' translated target: self selector: #sendersOfCritic; add: 'Implementors' translated target: self selector: #implementorsOfCritic! ! !SingleCodeCriticResultList methodsFor: 'menu' stamp: 'CamilleTeruel 9/19/2013 17:54' prior: 68394790! menu: aMenu shifted: aBoolean (rule notNil and: [ criticsModel selectedItems notEmpty ]) ifTrue: [ self addNavigationMenuItemsTo: aMenu. aMenu addLine. self addMarkingMenuItemsTo: aMenu. rule isTransformationRule ifTrue: [ aMenu addLine; add: 'Transform selected critic' translated target: self selector: #transformCritic ] ]. ^ aMenu! ! !CriticsCache methodsFor: 'add/remove' stamp: 'CamilleTeruel 9/18/2013 14:59' prior: 33860821! addFalsePositiveRule: aRule forPackage: aPackage | fp | (falsePositiveRules includesKey: aPackage) ifFalse: [ falsePositiveRules at: aPackage put: Set new ]. (falsePositiveRules at: aPackage) add: (aRule class uniqueIdentifierName). fp := (critics at: aRule ifAbsent: [^ self]) select: [ :c | (self packageOf: c) package name = aPackage packageName ]. fp do: [ :c | self addFalsePositive: c forRule: aRule ]! ! !CriticsCache methodsFor: 'add/remove' stamp: 'CamilleTeruel 9/18/2013 14:59' prior: 33868623! removeFalsePositiveClass: aClass | fp | falsePositiveClasses remove: aClass ifAbsent: [^ self]. critics keysAndValuesDo: [ :rule :criticss | fp := criticss select: [ :critic | aClass = critic criticTheNonMetaclassClass]. fp do: [ :each | self removeFalsePositive: each forRule: rule ]].! ! !CriticsCache methodsFor: 'protocol' stamp: 'CamilleTeruel 9/18/2013 14:59' prior: 20265854! replaceAll: oldMethod by: newMethod critics values do: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]]. falsePositives values do: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]]. toDos values do: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]] ! ! !WeakFinalizationList commentStamp: 'Igor.Stasenko 9/22/2010 21:09' prior: 68463463! IMPORTANT!!!!!! This class is a special object, recognized by VM. Its only purpose is to a) identify a special kind of objects who usually having a weak references but also having an instance of me held by first non-weak fixed slot (instance variable). b) a 'first' instance variable points to the head of a list of items, reported by VM which has weak references which became garbage during last garbage collection At my class side, there are some public behavior, which is used by finalization process to detect if VM supports new finalization scheme or should use the old one. Weak registry using #hasNewFinalization for switching to correct finalization logic, depending on VM it currently runs on. ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilleTeruel 9/18/2013 10:41' prior: 25352975! ruleCollectionMessagesToExternalObjectRuleV1FalsePositive ^ #()! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilleTeruel 9/18/2013 10:41' prior: 25354864! ruleMissingYourselfRuleV1FalsePositive ^ #()! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilleTeruel 9/18/2013 10:41' prior: 25355117! ruleOnlyReadOrWrittenTemporaryRuleV1FalsePositive ^ #()! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilleTeruel 9/18/2013 10:41' prior: 25356326! ruleSentNotImplementedRuleV1FalsePositive ^ #()! ! !ManifestManifestCriticBrowser class methodsFor: 'meta data' stamp: 'CamilleTeruel 9/18/2013 10:41' prior: 25357386! ruleTemporaryVariableCapitalizationRuleV1FalsePositive ^ #()! ! !CriticToolbar methodsFor: 'initialization' stamp: 'CamilleTeruel 9/18/2013 11:25' prior: 20254470! setFalsepositiveModel falsepositiveModel state: false; label: 'Mark as wrong'; action: [ ]. ! ! !RBBasicLintRuleTest class methodsFor: 'private' stamp: 'CamilleTeruel 9/18/2013 11:25' prior: 30307036! badSelectors ^#(#become: #isKindOf: #changeClassToThatOf: #respondsTo: #isMemberOf: #perform: #perform:arguments: #perform:with: #perform:with:with: #perform:with:with:with: #allOwners #allOwnersWeakly: #firstOwner #instVarAt: #instVarAt:put: #nextInstance #nextObject #ownerAfter: #primBecome: #halt)! ! RBPlatform removeSelector: #changeStamp! RBPlatform class removeSelector: #current! RBPharoPlatform removeSelector: #changeStamp! RBPharoPlatform class removeSelector: #initialize! Smalltalk globals removeClassNamed: #RBPharoPlatform! Smalltalk globals removeClassNamed: #RBPlatform! SingleCodeCriticResultList removeSelector: #removeClassToFalsePositive! SingleCodeCriticResultList removeSelector: #removeAllCriticsToFalsePositive! SingleCodeCriticResultList removeSelector: #addClassToFalsePositive! SingleCodeCriticResultList removeSelector: #addAllCriticsToFalsePositive! "Graphics-Display Objects"! "Manifest-CriticBrowser"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Pharo-Platform"! "Refactoring-Tests-Core"! ----End fileIn----! ----QUIT----an Array(20 September 2013 8:18:27 am) Pharo.image priorSource: 18120322! ----STARTUP----an Array(20 September 2013 8:24:37 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 September 2013 8:24:37 am) Pharo-30411.image priorSource: 18142729! ----STARTUP----an Array(20 September 2013 1:39:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/20/2013 11:16' prior: 68452280! commentForCurrentUpdate ^ '11637 Special Object Array not in sync with VM https://pharo.fogbugz.com/f/cases/11637 11642 Small Code-Critic cleanup of FilePackage https://pharo.fogbugz.com/f/cases/11642 11640 Guard pretty printing of AST when using RBLiteralNode for non-Literals https://pharo.fogbugz.com/f/cases/11640'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/20/2013 11:16'! script204 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.35.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.527.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-StephaneDucasse.1.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.111.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.403.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.114.mcz Polymorph-Widgets-MarcusDenker.916.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.219.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.106.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/20/2013 11:16'! update30412 "self new update30412" . self withUpdateLog: '11637 Special Object Array not in sync with VM https://pharo.fogbugz.com/f/cases/11637 11642 Small Code-Critic cleanup of FilePackage https://pharo.fogbugz.com/f/cases/11642 11640 Guard pretty printing of AST when using RBLiteralNode for non-Literals https://pharo.fogbugz.com/f/cases/11640'. self loadTogether: self script204 merge: false. Smalltalk recreateSpecialObjectsArray. self flushCaches. ! ! "ScriptLoader30"! !RBConfigurableFormatter methodsFor: 'visiting' stamp: 'MarcusDenker 9/20/2013 10:30' prior: 34532568! visitLiteralNode: aLiteralNode aLiteralNode value isLiteral ifFalse: [ self writeString: '''''' ] ifTrue: [ self writeString: aLiteralNode token storeString ]! ! !PseudoClassOrganizer methodsFor: 'accessing' stamp: 'MarcusDenker 9/17/2012 14:57' prior: 30110788! categoriesSorted ^ self categories! ! !MethodContext methodsFor: 'instruction decoding' stamp: 'jannik.laval 5/1/2010 16:19' prior: 26358011! blockReturnTop "Simulate the interpreter's action when a ReturnTopOfStackToCaller bytecode is encountered in the receiver. This should only happen in a closure activation." [closureOrNil isClosure] assert. ^self return: self pop from: self! ! !MethodContext methodsFor: 'instruction decoding' stamp: 'CamilloBruni 7/17/2013 22:00' prior: 45195849! pushConsArrayWithElements: numElements | array | array := Array new: numElements. numElements to: 1 by: -1 do: [ :i | array at: i put: self pop ]. self push: array! ! !MethodContext methodsFor: 'instruction decoding' stamp: 'ClementBera 9/19/2013 15:37'! respondsToUnknownBytecode "This method is triggerred by the VM when the interpreter tries to execute an unknown bytecode" | unknownBytecode | unknownBytecode := self method at: self pc. self error: 'VM cannot run unknown bytecode ', unknownBytecode printString ! ! !SmalltalkImage methodsFor: 'special objects' stamp: 'ClementBera 9/19/2013 15:32' prior: 34398152! newSpecialObjectsArray "Smalltalk recreateSpecialObjectsArray" "To external package developers: **** DO NOT OVERRIDE THIS METHOD. ***** If you are writing a plugin and need additional special object(s) for your own use, use addGCRoot() function and use own, separate special objects registry " "The Special Objects Array is an array of objects used by the Pharo virtual machine. Its contents are critical and accesses to it by the VM are unchecked, so don't even think of playing here unless you know what you are doing." | newArray | newArray := Array new: 59. "Nil false and true get used throughout the interpreter" newArray at: 1 put: nil. newArray at: 2 put: false. newArray at: 3 put: true. "This association holds the active process (a ProcessScheduler)" newArray at: 4 put: (self globals associationAt: #Processor). "Numerous classes below used for type checking and instantiation" newArray at: 5 put: Bitmap. newArray at: 6 put: SmallInteger. newArray at: 7 put: ByteString. newArray at: 8 put: Array. newArray at: 9 put: Smalltalk. newArray at: 10 put: Float. newArray at: 11 put: MethodContext. newArray at: 12 put: nil. "Was BlockContext" newArray at: 13 put: Point. newArray at: 14 put: LargePositiveInteger. newArray at: 15 put: Display. newArray at: 16 put: Message. newArray at: 17 put: CompiledMethod. newArray at: 18 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 18 ]). "(low space Semaphore)" newArray at: 19 put: Semaphore. newArray at: 20 put: Character. newArray at: 21 put: #doesNotUnderstand:. newArray at: 22 put: #cannotReturn:. newArray at: 23 put: nil. "This is the process signalling low space." "An array of the 32 selectors that are compiled as special bytecodes, paired alternately with the number of arguments each takes." newArray at: 24 put: #( #+ 1 #- 1 #< 1 #> 1 #<= 1 #>= 1 #= 1 #~= 1 #* 1 #/ 1 #\\ 1 #@ 1 #bitShift: 1 #// 1 #bitAnd: 1 #bitOr: 1 #at: 1 #at:put: 2 #size 0 #next 0 #nextPut: 1 #atEnd 0 #== 1 nil 0 nil 1 #value 0 #value: 1 #do: 1 #new 0 #new: 1 #x 0 #y 0 ). "An array of the 255 Characters in ascii order. Cog inlines table into machine code at: prim so do not regenerate it." newArray at: 25 put: (self primitiveGetSpecialObjectsArray at: 25). newArray at: 26 put: #mustBeBoolean. newArray at: 27 put: ByteArray. newArray at: 28 put: Process. "A 32-element array with up to 32 classes that have compact instances. Cog inlines table into machine code class lookup so do not regenerate it." newArray at: 29 put: self compactClassesArray. newArray at: 30 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 30 ]). "(delay Semaphore)" newArray at: 31 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ self specialObjectsArray at: 31 ]). "(user interrupt Semaphore)" "Prototype instances that can be copied for fast initialization" newArray at: 32 put: (Float new: 2). newArray at: 33 put: (LargePositiveInteger new: 4). newArray at: 34 put: 0@0. newArray at: 35 put: #cannotInterpret:. "Note: This must be fixed once we start using context prototypes (yeah, right)" "(MethodContext new: CompiledMethod fullFrameSize)." newArray at: 36 put: (self primitiveGetSpecialObjectsArray at: 36). "Is the prototype MethodContext (unused by the VM)" newArray at: 37 put: BlockClosure. "(BlockContext new: CompiledMethod fullFrameSize)." newArray at: 38 put: (self primitiveGetSpecialObjectsArray at: 38). "Is the prototype BlockContext (unused by the VM)" "array of objects referred to by external code" newArray at: 39 put: (self primitiveGetSpecialObjectsArray at: 39). "preserve external semaphores" newArray at: 40 put: nil. "Reserved for Mutex in Cog VMs" newArray at: 41 put: nil. "Reserved for a LinkedList instance for overlapped calls in CogMT" "finalization Semaphore" newArray at: 42 put: (self specialObjectsArray ifNil: [ Semaphore new ] ifNotNil: [ (self specialObjectsArray at: 42) ifNil: [ Semaphore new ] ]). newArray at: 43 put: LargeNegativeInteger. "External objects for callout. Note: Written so that one can actually completely remove the FFI." newArray at: 44 put: (self at: #ExternalAddress ifAbsent: []). newArray at: 45 put: (self at: #ExternalStructure ifAbsent: []). newArray at: 46 put: (self at: #ExternalData ifAbsent: []). newArray at: 47 put: (self at: #ExternalFunction ifAbsent: []). newArray at: 48 put: (self at: #ExternalLibrary ifAbsent: []). newArray at: 49 put: #aboutToReturn:through:. newArray at: 50 put: #run:with:in:. "51 reserved for immutability message" "newArray at: 51 put: #attemptToAssign:withIndex:." newArray at: 52 put: #(nil "nil => generic error" #'bad receiver' #'bad argument' #'bad index' #'bad number of arguments' #'inappropriate operation' #'unsupported operation' #'no modification' #'insufficient object memory' #'insufficient C memory' #'not found' #'bad method' #'internal error in named primitive machinery' #'object may move'). "53 to 55 are for Alien" newArray at: 53 put: (self at: #Alien ifAbsent: []). newArray at: 54 put: #invokeCallback:stack:registers:jmpbuf:. newArray at: 55 put: (self at: #UnsafeAlien ifAbsent: []). "Weak reference finalization" newArray at: 56 put: (self at: #WeakFinalizationList ifAbsent: []). newArray at: 57 put: nil. "Reserved for ForeignCallbackProcess" newArray at: 58 put: #respondsToUnknownBytecode. newArray at: 59 put: #conditionalBranchCounterTrippedOn:. "Reserved for SistaStackToRegisterCogit" ^newArray! ! TextDiffBuilder class removeSelector: #removedTextAttributes:! TextDiffBuilder class removeSelector: #removedTextAttributes! TextDiffBuilder class removeSelector: #insertedTextAttributes:! TextDiffBuilder class removeSelector: #insertedTextAttributes! PseudoClass removeSelector: #nameExists! PseudoClass removeSelector: #makeSureClassExists:! "AST-Core"! "Kernel"! "System-FilePackage"! "System-Support"! ----End fileIn----! ----QUIT----an Array(20 September 2013 1:39:17 pm) Pharo.image priorSource: 18142938! ----STARTUP----an Array(20 September 2013 1:45:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 September 2013 1:45:19 pm) Pharo-30412.image priorSource: 18162090! ----STARTUP----an Array(20 September 2013 2:43:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/20/2013 14:39' prior: 68474896! commentForCurrentUpdate ^ '11607 Small Code Critic cleanup of Morphic-Base https://pharo.fogbugz.com/f/cases/11607 11634 diffmorph icons should not use generic names https://pharo.fogbugz.com/f/cases/11634 11643 add replacement methods for #isLiteral in IRLiteral and OCLiteralVariable https://pharo.fogbugz.com/f/cases/11643 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/20/2013 14:40'! script205 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.112.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.405.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.919.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1259.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/20/2013 14:40'! update30413 "self new update30413" self withUpdateLog: '11607 Small Code Critic cleanup of Morphic-Base https://pharo.fogbugz.com/f/cases/11607 11634 diffmorph icons should not use generic names https://pharo.fogbugz.com/f/cases/11634 11643 add replacement methods for #isLiteral in IRLiteral and OCLiteralVariable https://pharo.fogbugz.com/f/cases/11643 '. self loadTogether: self script205 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:01'! changeAddIcon ^ self smallAddIcon ! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/19/2013 19:44'! changeBlockIcon ^ self smallBackIconGray ! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:00'! changeEmptyIcon ^ self emptyIcon ! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:02'! changeRemoveIcon ^ self removeIcon ! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:02'! changeUpdateIcon ^ self smallForwardIconGray ! ! !PaginatedMorphTreeMorph methodsFor: 'updating' stamp: 'MarcusDenker 9/13/2013 16:29' prior: 33781583! update: aSymbol aSymbol == #pageSize ifTrue: [ ^ self pageSize: model pageSize ]. aSymbol == #chunkSize ifTrue: [ ^ self chunkSize: model chunkSize ]. self pager isNil ifTrue: [ ^ super update: aSymbol ]. ((aSymbol isKindOf: Array) and: [ aSymbol size > 1 and: [ aSymbol first == self nodeListSelector and: [ aSymbol second == #openItemPath ] ] ]) ifTrue: [ | rest | rest := aSymbol allButFirst: 2. [ rest notEmpty ] whileTrue: [ | res | res := (1 to: self nodeList size) select: [ :li | (self nodeList at: li) item = rest first ]. res isEmpty ifTrue: [ ^ self ]. self pager nextPage: res first. (self allNodeMorphs at: 1 ifAbsent: [ ^ self ]) openItemPath: {(rest first)}. rest := rest copyWithoutFirst ]. ^ self ]. "allow directed path opening where multiple trees exist" ^ super update: aSymbol! ! !TextMorph methodsFor: 'menu' stamp: 'MarcusDenker 9/13/2013 15:56' prior: 52802893! changeMargins: evt | handle origin aHand newMargin | aHand := evt ifNil: [self primaryHand] ifNotNil: [evt hand]. origin := aHand position. handle := HandleMorph new forEachPointDo: [:newPoint | handle removeAllMorphs. handle addMorph: (LineMorph from: origin to: newPoint color: Color black width: 1). newMargin := (newPoint - origin max: 0@0) // 5. self margins: newMargin] lastPointDo: [:newPoint | handle deleteBalloon. self halo ifNotNil: [:halo | halo addHandles]]. aHand attachMorph: handle. handle setProperty: #helpAtCenter toValue: true. handle showBalloon: 'Move cursor down and to the right to increase margin inset. Click when done.' hand: evt hand. handle startStepping! ! !TextMorph methodsFor: 'as yet unclassified ' stamp: 'MarcusDenker 9/13/2013 16:22' prior: 52775840! keyboardFocusChange: aBoolean super keyboardFocusChange: aBoolean. paragraph isNil ifFalse:[paragraph focused: aBoolean]. aBoolean ifTrue:["A hand is wanting to send us characters..." self hasFocus ifFalse: [self editor "Forces install"]. self showOverEditableTextCursor] ifFalse:["A hand has clicked elsewhere..." self world ifNotNil:[:w | w handsDo: [:h | h keyboardFocus == self ifTrue: [^self]]. "Release control unless some hand is still holding on" self releaseEditor]. self hideOverEditableTextCursor]. self manageCursor. self focusChanged! ! !LiteralNode methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:27' prior: 24541571! isLiteral ^ self isLiteralNode! ! !LiteralNode methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:27'! isLiteralNode ^ true! ! !Rectangle methodsFor: '*Morphic-Base' stamp: 'MarcusDenker 9/13/2013 16:23' prior: 32158343! newRectButtonPressedDo: newRectBlock "Track the outline of a new rectangle until mouse button changes. newFrameBlock produces each new rectangle from the previous. Only tracks while mouse is down." | rect newRect buttonNow hand | hand := World activeHand. buttonNow := hand anyButtonPressed. rect := self. self drawReverseFrame: rect. hand captureEventsWhile: [:evt | evt isMouse ifTrue: [ buttonNow := evt anyButtonPressed. newRect := newRectBlock value: rect value: evt cursorPoint. newRect = rect ifFalse: [self drawReverseFrame: rect. self drawReverseFrame: newRect. rect := newRect ]. buttonNow ] ifFalse: [ true ] ]. self drawReverseFrame: rect. World activeHand newMouseFocus: nil; showTemporaryCursor: nil. ^ rect! ! !PluggableListMorph methodsFor: 'model access' stamp: 'MarcusDenker 9/13/2013 16:27' prior: 29453560! keystrokeAction: event | returnValue | keystrokeSelector ifNil: [ ^ nil ]. returnValue := model perform: keystrokeSelector withEnoughArguments: { event. self }. ^ returnValue = true! ! !PSMCClassChangeWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/19/2013 19:43' prior: 68278694! icon "Answer a form with an icon to represent the receiver" self isConflict ifTrue: [ self localChosen ifTrue: [ ^ Smalltalk ui icons changeBlockIcon ]]. ^ super icon! ! !MorphTreeChunkPager methodsFor: 'user interface' stamp: 'MarcusDenker 9/13/2013 15:51' prior: 26891666! vScrollBarValue: scrollValue | old | old := atBottom. self atBottom: scrollValue >= self verticalScrollbarFrontier. old ~= atBottom ifTrue: [ self buildPanel ]! ! !HaloMorph methodsFor: 'handles' stamp: 'MarcusDenker 9/13/2013 15:55' prior: 23169413! addRecolorHandle: haloSpec "Add a recolor handle to the receiver, if appropriate" "since this halo now opens a more general properties panel, allow it in all cases" "innerTarget canSetColor ifTrue:" self addHandle: haloSpec on: #mouseUp send: #doRecolor:with: to: self.! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:26'! isPushLiteral: valueTest ^ false! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:27' prior: 34856205! isLiteral ^ self isPushLiteral! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:26' prior: 34856303! isLiteral: valueTest ^ self isPushLiteral: valueTest! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:26'! isPushLiteral ^ true! ! !IRPushLiteral methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:26'! isPushLiteral: valueTest ^ valueTest value: literal! ! !PolygonMorph class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/13/2013 16:26' prior: 29735219! fromHand: hand "Let the user draw a polygon, clicking at each vertex, and ending by clicking within 5 of the first point..." "self fromHand: ActiveHand" | p1 poly oldVerts pN opposite | "wait till guy will press the mouse button" hand captureEventsUntil: [:evt | evt isMouse ifTrue: [ p1 := evt cursorPoint]. (evt isMouse and: [ evt anyButtonPressed ]) not ]. opposite := (Display colorAt: p1) negated. opposite = Color transparent ifTrue: [opposite := Color red]. (poly := LineMorph from: p1 to: p1 color: opposite width: 2) openInWorld. oldVerts := {p1}. [true] whileTrue: [ "wait till button release" hand captureEventsWhile: [:evt | evt isMouse ifTrue: [ pN := evt cursorPoint. poly setVertices: (oldVerts copyWith: pN). evt anyButtonPressed ] ifFalse: [ true ] ]. (oldVerts size > 1 and: [(pN dist: p1) < 5]) ifFalse: [ oldVerts := poly vertices. "loop till button will be pressed" hand captureEventsUntil: [:evt | evt isMouse ifTrue: [ pN := evt cursorPoint. poly setVertices: (oldVerts copyWith: pN). evt anyButtonPressed ] ifFalse: [ false ]]] ifTrue: [ ^ (poly setVertices: (poly vertices copyWith: p1)) delete]. ]! ! !PolygonMorph class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/13/2013 16:26' prior: 29736565! fromHandFreehand: hand "Let the user draw a polygon, holding the mouse down, and ending by clicking within 5 of the first point..." "self fromHandFreehand: ActiveHand" | p1 poly pN opposite | "wait till guy will press the mouse button" hand captureEventsUntil: [:evt | evt isMouse ifTrue: [ p1 := evt cursorPoint]. (evt isMouse and: [ evt anyButtonPressed ]) ]. opposite := (Display colorAt: p1) negated. opposite = Color transparent ifTrue: [opposite := Color red]. (poly := LineMorph from: p1 to: p1 color: opposite width: 2) openInWorld. hand captureEventsWhile: [:evt | evt isMouse ifTrue:[ pN := evt cursorPoint. (pN dist: poly vertices last) > 3 ifTrue: [poly setVertices: (poly vertices copyWith: pN) ]. evt anyButtonPressed ] ifFalse: [ true ] ]. ^ (poly setVertices: (poly vertices copyWith: p1)) delete ! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'MarcusDenker 9/13/2013 15:57' prior: 67573650! changeInSlopes: slopes of: verts "A message to knots of a spline. Returns an array with the 3rd cubic coeff." "The last nth item is correct iff this is a closed cubic. Presumably that is the only time we care. We always return the same sized array as self." | n slopeChanges | n := verts size. n = slopes size ifFalse: [^ self error: 'vertices and slopes differ in number']. slopeChanges := Array new: n. 1 to: n do: [:i | slopeChanges at: i put: (verts atWrap: i + 1) - (verts at: i) * 3 - ((slopes at: i) * 2) - (slopes atWrap: i + 1)]. ^ slopeChanges! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'MarcusDenker 9/13/2013 15:57' prior: 67574975! closedCubicSlopesOf: knots "Sent to knots returns the slopes of a closed cubic spline. From the same set of java sources as naturalCubic. This is a squeak transliteration of the java code." "from java code NatCubicClosed extends NatCubic solves for the set of equations for all knots: b1+4*b2+b3=3*(a3-a1) where a1 is (knots atWrap: index + 1) etc. and the b's are the slopes . by decomposing the matrix into upper triangular and lower matrices and then back sustitution. See Spath 'Spline Algorithms for Curves and Surfaces' pp 19--21. The D[i] are the derivatives at the knots. " | v w x y z n1 D F G H | n1 := knots size. n1 < 3 ifTrue: [self error: 'Less than 3 points makes a poor curve']. v := Array new: n1. w := Array new: n1. y := Array new: n1. D := Array new: n1. x := knots. z := 1.0 / 4.0. v at: 2 put: z. w at: 2 put: z. y at: 1 put: z * 3.0 * ((x at: 2) - (x at: n1)). H := 4.0. F := 3 * ((x at: 1) - (x at: n1 - 1)). G := 1. 2 to: n1 - 1 do: [:k | z := 1.0 / (4.0 - (v at: k)). v at: k + 1 put: z. w at: k + 1 put: z negated * (w at: k). y at: k put: z * (3.0 * ((x at: k + 1) - (x at: k - 1)) - (y at: k - 1)). H := H - (G * (w at: k)). F := F - (G * (y at: k - 1)). G := (v at: k) negated * G]. H := H - (G + 1 * ((v at: n1) + (w at: n1))). y at: n1 put: F - (G + 1 * (y at: n1 - 1)). D at: n1 put: (y at: n1) / H. D at: n1 - 1 put: (y at: n1 - 1) - ((v at: n1) + (w at: n1) * (D at: n1)). (1 to: n1 - 2) reverseDo: [:k | D at: k put: (y at: k) - ((v at: k + 1) * (D at: k + 1)) - ((w at: k + 1) * (D at: n1))]. ^ D ! ! !PolygonMorph methodsFor: 'drawing' stamp: 'MarcusDenker 9/13/2013 16:25' prior: 67578913! drawDropShadowOn: aCanvas "Display the receiver, a spline curve, approximated by straight line segments." self assert: [vertices notEmpty] description: 'a polygon must have at least one point'. closed ifTrue: [aCanvas drawPolygon: self getVertices fillStyle: self shadowColor].! ! !PolygonMorph methodsFor: 'event handling' stamp: 'MarcusDenker 9/13/2013 16:23' prior: 67580290! justDroppedInto: newOwner event: evt ^ super justDroppedInto: newOwner event: evt! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'MarcusDenker 9/13/2013 15:57' prior: 67581690! naturalCubicSlopesOf: knots "Sent to knots returns the slopes of a natural cubic curve fit." "We solve the equation for knots with end conditions: 2*b1+b2 = 3(a1 - a0) bN1+2*bN = 3*(aN-aN1) and inbetween: b2+4*b3+b4=3*(a4-a2) where a2 is (knots atWrap: index + 1) etc. and the b's are the slopes . N is the last index (knots size) N1 is N-1. by using row operations to convert the matrix to upper triangular and then back sustitution. The D[i] are the derivatives at the knots." | x gamma delta D n1 | n1 := knots size. n1 < 3 ifTrue: [self error: 'Less than 3 points makes a poor curve']. x := knots. gamma := Array new: n1. delta := Array new: n1. D := Array new: n1. gamma at: 1 put: 1.0 / 2.0. 2 to: n1 - 1 do: [:i | gamma at: i put: 1.0 / (4.0 - (gamma at: i - 1))]. gamma at: n1 put: 1.0 / (2.0 - (gamma at: n1 - 1)). delta at: 1 put: 3.0 * ((x at: 2) - (x at: 1)) * (gamma at: 1). 2 to: n1 - 1 do: [:i | delta at: i put: 3.0 * ((x at: i + 1) - (x at: i - 1)) - (delta at: i - 1) * (gamma at: i)]. delta at: n1 put: 3.0 * ((x at: n1) - (x at: n1 - 1)) - (delta at: n1 - 1) * (gamma at: n1). D at: n1 put: (delta at: n1). (1 to: n1 - 1) reverseDo: [:i | D at: i put: (delta at: i) - ((gamma at: i) * (D at: i + 1))]. ^ D! ! !PSMCChangeWrapper methodsFor: 'accessing' stamp: 'EstebanLorenzano 9/19/2013 13:11' prior: 68271535! icon "Answer a form with an icon to represent the receiver" |o| o := self operation. o isNil ifTrue: [^ Smalltalk ui icons changeEmptyIcon ]. o isAddition ifTrue: [^ Smalltalk ui icons changeAddIcon ]. o isRemoval ifTrue: [^ Smalltalk ui icons changeRemoveIcon ]. ^ Smalltalk ui icons changeUpdateIcon! ! !RBInlineMethodRefactoring methodsFor: 'transforming' stamp: 'MarcusDenker 9/20/2013 13:29' prior: 30668527! replaceArguments sourceMessage arguments reversed with: inlineParseTree arguments reversed do: [ :replacement :source | (replacement isImmediateNode or: [ self shouldInlineExpression: replacement newSource ]) ifTrue: [ self replaceArgument: source with: replacement ] ifFalse: [ self addTemporary: source assignedTo: replacement ] ]! ! !TransformationMorph methodsFor: 'private' stamp: 'MarcusDenker 9/13/2013 16:21' prior: 53506917! adjustAfter: changeBlock "Cause this morph to remain cetered where it was before, and choose appropriate smoothing, after a change of scale or rotation." changeBlock value. self chooseSmoothing. self layoutChanged. owner ifNotNil: [owner invalidRect: bounds] ! ! !Text methodsFor: '*Morphic-Base-Widgets' stamp: 'MarcusDenker 9/13/2013 16:22' prior: 52482010! listRenderOn: aCanvas atRow: aRow bounds: bounds color: color backgroundColor: backgroundColor from: aMorph "Method extracted from LazyListMorph" | attrs useDefaultFont f itemBounds | attrs := self attributesAt: 1. useDefaultFont := true. attrs do: [:att | att forFontInStyle: aMorph font textStyle do: [:fon | useDefaultFont := false]]. f := useDefaultFont ifTrue: [ aMorph font] ifFalse: [ self fontAt: 1 withStyle: aMorph font textStyle ]. itemBounds := bounds withHeight: f height. itemBounds := itemBounds align: itemBounds leftCenter with: bounds leftCenter. "center the item if the font height is different to that of our font" aCanvas drawString: self in: itemBounds font: (f emphasized: (self emphasisAt: 1)) color: color underline: ((self emphasisAt: 1) bitAnd: 4) > 0 underlineColor: color strikethrough: ((self emphasisAt: 1) bitAnd: 16) > 0 strikethroughColor: color! ! !MorphTreeListManager methodsFor: 'keyboard managing' stamp: 'MarcusDenker 9/13/2013 16:30' prior: 26915538! setSelectionIndexFromKeyboard: index multiSelection: multiSelect event: anEvent "Called internally to select the index-th item." | targetMorph | index ifNil: [^ self]. index > self allNodeMorphs size ifTrue: [^self]. targetMorph := index = 0 ifTrue: [nil] ifFalse: [self allNodeMorphs at: index]. lastClickedMorph ifNotNil: [lastClickedMorph highlightForMouseDown: false]. self isCheckList ifTrue: [ (multiSelect and: [anEvent shiftPressed]) ifTrue: [self autoMultiSelect: targetMorph]] ifFalse: [ (multiSelect and: [anEvent shiftPressed]) ifTrue: [self autoMultiSelect: targetMorph] ifFalse: [self setSelectedMorph: targetMorph]]. lastClickedMorph := firstClickedMorph := targetMorph. anEvent shiftPressed ifTrue: [lastClickedMorph highlightForMouseDown: true]. self selectionChanged. self scrollToShow: targetMorph ! ! !BorderedMorph methodsFor: 'menu' stamp: 'MarcusDenker 9/13/2013 15:55' prior: 18390415! changeBorderWidth: evt | aHand origin handle newWidth | aHand := evt ifNil: [self primaryHand] ifNotNil: [evt hand]. origin := aHand position. handle := HandleMorph new forEachPointDo: [:newPoint | handle removeAllMorphs. handle addMorph: (LineMorph from: origin to: newPoint color: Color black width: 1). newWidth := (newPoint - origin) r asInteger // 5. self borderWidth: newWidth] lastPointDo: [:newPoint | handle deleteBalloon. self halo ifNotNil: [:halo | halo addHandles]]. aHand attachMorph: handle. handle setProperty: #helpAtCenter toValue: true. handle showBalloon: 'Move cursor farther from this point to increase border width. Click when done.' translated hand: evt hand. handle startStepping! ! !LazyListMorph methodsFor: 'row management' stamp: 'MarcusDenker 9/13/2013 16:19' prior: 24332555! display: item atRow: row on: aCanvas "Display the given item at the given row on the given canvas." | itemColor backgroundColor drawBounds | drawBounds := self drawBoundsForRow: row. itemColor := self colorForRow: row. backgroundColor := self backgroundColorForRow: row. item listRenderOn: aCanvas atRow: row bounds: drawBounds color: itemColor backgroundColor: backgroundColor from: self. row = self mouseDownRow ifTrue: [ aCanvas frameRectangle: (self selectionFrameForRow: row) width: 1 colors: {itemColor. (Color transparent)} dashes: #(1 1) ]! ! !LazyListMorph methodsFor: 'drawing' stamp: 'MarcusDenker 9/13/2013 16:19' prior: 24327944! drawSelectionOn: aCanvas "Draw the selection background." selectedRow ifNil: [ ^self ]. selectedRow = 0 ifTrue: [ ^self ]. self drawBackgroundForSelectedRow: selectedRow on: aCanvas ! ! !PasteUpMorph methodsFor: 'world state' stamp: 'MarcusDenker 9/13/2013 15:50' prior: 29230656! addMorphs: aMorphOrList "Dump in submorphs, and stepList from aMorphOrList. Used to bring a world, paste-up, or other morph in from an object file." aMorphOrList isMorph ifTrue: [ aMorphOrList privateOwner: nil. aMorphOrList isWorldMorph ifFalse: [ self firstHand attachMorph: aMorphOrList. self startSteppingSubmorphsOf: aMorphOrList] ifTrue: [ self addMorph: aMorphOrList ]. aMorphOrList privateSubmorphs reverseDo: [:m | m privateOwner: nil. self addMorph: m. m changed]. (aMorphOrList instVarNamed: 'stepList') do: [:entry | entry first startSteppingIn: self]] ifFalse: ["list, add them all" aMorphOrList reverseDo: [:m | m privateOwner: nil. self addMorph: m. self startSteppingSubmorphsOf: m. "It may not want this!!" m changed]]! ! !PasteUpMorph methodsFor: '*Morphic-Base-Windows' stamp: 'MarcusDenker 9/13/2013 16:28' prior: 29184429! bringWindowsFullOnscreen "Make ever SystemWindow on the desktop be totally on-screen, whenever possible." | r | bounds allAreasOutsideList: (self taskbars collect: [ :t | t bounds ]) do: [ :e | r isNil ifTrue: [ r := e ] ifFalse: [ r area > e area ifTrue: [ r ] ifFalse: [ e ] ] ]. (self windowsSatisfying: [ :w | true ]) do: [ :aWindow | aWindow right: (aWindow right min: r right). aWindow bottom: (aWindow bottom min: r bottom). aWindow left: (aWindow left max: r left). aWindow top: (aWindow top max: r top) ]! ! !PasteUpMorph methodsFor: 'project state' stamp: 'MarcusDenker 9/13/2013 15:51' prior: 29212422! steppingMorphsNotInWorld | all | all := self allMorphs. ^ self listOfSteppingMorphs reject: [ :m | all includes: m ] "self currentWorld steppingMorphsNotInWorld do: [:m | m delete]"! ! !MorphTreeNavigationBar methodsFor: 'accessing' stamp: 'MarcusDenker 9/13/2013 16:29' prior: 27007483! computedBounds | tb tbw yGap | tb := treeMorph bounds. tbw := treeMorph borderWidth. yGap := self layoutInset asPoint y + self cellInset asPoint y. ^ (tb bottomLeft + (tbw @ (self computedHeight + yGap) negated)) corner: (tb bottomRight - ( (tbw * 2) @ yGap )). ! ! !JobProgressMorph methodsFor: 'private' stamp: 'MarcusDenker 9/13/2013 16:18' prior: 24086020! updateLayout labelMorph contents isEmpty ifFalse: [ self addMorphBack: labelMorph]. self addMorphBack: bar.! ! !MorphTreeModel methodsFor: 'dialog' stamp: 'MarcusDenker 9/13/2013 16:30' prior: 26933022! openDialogWindowIn: aWindow title: aTitle selectedtems: aCollection | dialog | dialog := self dialogWindowIn: aWindow title: aTitle selectedtems: aCollection. aWindow openModal: dialog. ^ dialog cancelled ifFalse: [self selectedItems] ! ! !CalendarMorph methodsFor: 'event handling' stamp: 'MarcusDenker 9/13/2013 16:18' prior: 49263626! handleMonthNameTouched | newMonthName dayCount | newMonthName := UIManager default chooseDropList: 'Choose a month:' list: #('January' 'February' 'March' 'April' 'May' 'June' 'July' 'August' 'September' 'October' 'November' 'December'). newMonthName isNil ifTrue: [^self]. dayCount := (Month year: date year month: newMonthName) daysInMonth. self date: (Date year: date year month: newMonthName day: (date dayOfMonth min: dayCount)). self changed. ! ! !PSMCPatchOperationWrapper methodsFor: 'accessing' stamp: 'CamilloBruni 9/19/2013 19:43' prior: 68282146! icon "Answer a form with an icon to represent the receiver" self item localChosen ifTrue: [ ^ Smalltalk ui icons changeBlockIcon ]. ^ super icon! ! !Morph methodsFor: 'copying' stamp: 'MarcusDenker 9/13/2013 16:20' prior: 26638202! duplicate "Make and return a duplicate of the receiver" | newMorph topRend | ((topRend := self topRendererOrSelf) ~~ self) ifTrue: [^ topRend duplicate]. newMorph := self veryDeepCopy. newMorph arrangeToStartStepping. newMorph privateOwner: nil. "no longer in world" ^newMorph! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 9/13/2013 15:50' prior: 26791855! potentialEmbeddingTargets "Return the potential targets for embedding the receiver" | oneUp topRend | (oneUp := (topRend := self topRendererOrSelf) owner) ifNil: [ ^ #() ]. ^ (oneUp morphsAt: topRend referencePosition behind: topRend unlocked: true) reject: [ :m | m isFlexMorph ]! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'MarcusDenker 9/13/2013 16:30' prior: 26976896! expandAllSilently: aMorph aMorph isExpanded ifFalse: [aMorph expand]. aMorph childrenDo: [:ch | self expandAllSilently: ch]. ! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'MarcusDenker 9/13/2013 16:30' prior: 26971312! mouseUp: event "Fixed up highlight problems." | nodeMorph wasHigh | mouseOverAllowed := false. nodeMorph := self scrollerSubMorphFromPoint: event position. wasHigh := nodeMorph notNil ifTrue: [nodeMorph highlightedForMouseDown] ifFalse: [false]. self allNodeMorphs do: [:m | m highlightedForMouseDown ifTrue: [m highlightForMouseDown: false]]. wasHigh ifFalse: [ nodeMorph ifNotNil: [^self]]. self listManager mouseUp: event on: nodeMorph. ! ! !MenuMorph class methodsFor: 'utilities' stamp: 'MarcusDenker 9/13/2013 16:32' prior: 37846329! confirm: queryString trueChoice: trueChoice falseChoice: falseChoice "Put up a yes/no menu with caption queryString. The actual wording for the two choices will be as provided in the trueChoice and falseChoice parameters. Answer true if the response is the true-choice, false if it's the false-choice. This is a modal question -- the user must respond one way or the other." "MenuMorph confirm: 'Are you sure?' trueChoice: 'yes, I''m ' falseChoice: 'no, I just thought'" | menu aBlock result | (ProvideAnswerNotification signal: queryString) ifNotNil: [ :answer | ^ trueChoice = answer ]. aBlock := [ :v | result := v ]. menu := self new. menu addTitle: queryString icon: Smalltalk ui icons confirmIcon. menu add: trueChoice target: aBlock selector: #value: argument: true. menu add: falseChoice target: aBlock selector: #value: argument: false. [ menu invokeAt: ActiveHand position in: ActiveWorld allowKeyboard: true. result isNil ] whileTrue. ^ result! ! !MenuMorph methodsFor: 'events' stamp: 'MarcusDenker 9/13/2013 16:20' prior: 25506362! updateColor "Update the color of the menu." | title | self theme preferGradientFill ifFalse: [^ self]. self fillStyle: (self theme menuFillStyleFor: self). "update the title color" title := self allMorphs detect: [:each | each hasProperty: #titleString] ifNone: [^ self]. title fillStyle: (self theme menuTitleFillStyleFor: title)! ! !HandMorph methodsFor: 'accessing' stamp: 'MarcusDenker 9/13/2013 16:31' prior: 23219317! cursorBounds temporaryCursor ifNil: [^ self position extent: NormalCursor extent] ifNotNil: [^ self position + temporaryCursorOffset extent: temporaryCursor extent]! ! !HandMorph methodsFor: '*EventModel' stamp: 'MarcusDenker 9/13/2013 15:52' prior: 23212647! eventSource ^ Sensor! ! !HandMorph methodsFor: 'listeners' stamp: 'MarcusDenker 9/13/2013 15:53' prior: 23249432! keyboardListeners ^nil! ! !OCAbstractVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:28'! isLiteralVariable ^false! ! !Paragraph methodsFor: 'editing' stamp: 'MarcusDenker 9/13/2013 16:28' prior: 29077839! actionAttributesUnder: aClickPoint event: anEvent do: aBlock |startBlock| startBlock := self characterBlockAtPoint: aClickPoint. (text attributesAt: startBlock stringIndex forStyle: textStyle) select: [ :attribute| attribute mayActOnEvent: anEvent ] thenDo: [:attribute | | range boxes| "find the boxes for the current attribute range" range := text rangeOf: attribute startingAt: startBlock stringIndex. boxes := self selectionRectsFrom: (self characterBlockForIndex: range first) to: (self characterBlockForIndex: range last+1). (boxes detect: [:each | each containsPoint: aClickPoint] ifNone: [nil]) ifNotNil: [ aBlock cull: attribute cull: boxes ]]! ! !ParseNode methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:27'! isLiteralNode ^false! ! !RBParserTest methodsFor: 'tests' stamp: 'MarcusDenker 9/20/2013 13:29' prior: 30952515! testIsA | nodes types | nodes := Bag new. types := Set new. #(#(#isAssignment 1) #(#isBlock 1) #(#isCascade 1) #(#isLiteral 2) #(#isMessage 3) #(#isMethod 1) #(#isReturn 1) #(#isSequence 2) #(#isValue 15) #(#isVariable 7) #(#isUsed 10) #(#isDirectlyUsed 9) #(#hasParentheses 1) #(#isBinary 0) #(#isPrimitive 0) #(#isImmediateNode 10) #(#isWrite 1) #(#isRead 3)) do: [:each | each last timesRepeat: [nodes add: each first]. types add: each first]. self treeWithEverything nodesDo: [:each | types do: [:sel | ((each respondsTo: sel) and: [each perform: sel]) ifTrue: [nodes remove: sel]]]. self assert: nodes isEmpty! ! !CircleMorph methodsFor: 'initialization' stamp: 'MarcusDenker 9/13/2013 15:50' prior: 48895901! initialize super initialize. self extent: 40@40; color: Color green lighter! ! !OCLiteralVariable methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 13:28'! isLiteralVariable ^true.! ! !PluggableTextMorphWithLimits methodsFor: 'actions' stamp: 'MarcusDenker 9/13/2013 16:26' prior: 29588980! acceptBasic "should be refactored with accept that comes from PluggableTextMorphPlus " "Inform the model of text to be accepted, and return true if OK." | saveSelection saveScrollerOffset | self locked ifFalse: [ ^ super acceptBasic ]. saveSelection := self selectionInterval copy. saveScrollerOffset := scroller offset copy. (self canDiscardEdits and: [self alwaysAccept not]) ifTrue: [^ self flash]. self hasEditingConflicts ifTrue: [(self confirm: 'Caution!! This method may have been changed elsewhere since you started editing it here. Accept anyway?' translated) ifFalse: [^ self flash]]. [ method methodClass compile: (self styler unstyledTextFrom: textMorph asText) classified: method category notifying: self ] ensure: [ unstyledAcceptText := nil ]. self hasUnacceptedEdits: false. ["During the step for the browser, updateCodePaneIfNeeded is called, and invariably resets the contents of the codeholding PluggableTextMorph at that time, resetting the cursor position and scroller in the process. The following line forces that update without waiting for the step, then restores the cursor and scrollbar" ok ifTrue: "(don't bother if there was an error during compile)" [(model respondsTo: #updateCodePaneIfNeeded) ifTrue: [model updateCodePaneIfNeeded]. scroller offset: saveScrollerOffset. self setScrollDeltas. self selectFrom: saveSelection first to: saveSelection last]] on: Error do: []! ! MorphTreeMorph removeSelector: #scrollDeltaHeight! "AST-Tests-Core"! "Compiler"! "EventModel"! "Morphic-Base"! "OpalCompiler-Core"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Refactoring-Core"! ----End fileIn----! ----QUIT----an Array(20 September 2013 2:43:27 pm) Pharo.image priorSource: 18162299! ----STARTUP----an Array(20 September 2013 2:49:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 September 2013 2:49:30 pm) Pharo-30413.image priorSource: 18202832! ----STARTUP----an Array(21 September 2013 11:06:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/21/2013 11:02' prior: 68494257! commentForCurrentUpdate ^ '11644 windowMaximizeForm and windowCloseForm missing on the standard ThemeIcons https://pharo.fogbugz.com/f/cases/11644 11649 ObjectExplorer should use own UI creation methods https://pharo.fogbugz.com/f/cases/11649 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/21/2013 11:03'! script206 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.112.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.405.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-EstebanLorenzano.245.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1262.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/21/2013 11:03'! update30414 "self new update30414" self withUpdateLog: '11644 windowMaximizeForm and windowCloseForm missing on the standard ThemeIcons https://pharo.fogbugz.com/f/cases/11644 11649 ObjectExplorer should use own UI creation methods https://pharo.fogbugz.com/f/cases/11649 '. self loadTogether: self script206 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphicUIManager methodsFor: 'ui requests' stamp: 'CamilloBruni 9/20/2013 20:22'! explorer: anObjectExplorer withLabel: label ^ anObjectExplorer window setLabel: label; yourself ! ! !ObjectExplorer methodsFor: 'user interface' stamp: 'CamilloBruni 9/20/2013 21:45'! expandTreeInMorph: morph Cursor wait showWhile: [ (morph respondsTo: #expandRoots) ifTrue: [ morph expandRoots ]. morph submorphs do: [ :subMorph| (subMorph respondsTo: #expandRoots) ifTrue: [ subMorph expandRoots ]]].! ! !ObjectExplorer methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:21' prior: 28662519! explorerFor: anObject ^UIManager default explorer: self withLabel: (anObject printStringLimitedTo: 32)! ! !ObjectExplorer methodsFor: 'user interface' stamp: 'CamilloBruni 9/20/2013 20:21' prior: 28669880! explorerFor: anObject withLabel: label ^UIManager default explorer: self withLabel: label! ! !ObjectExplorer methodsFor: 'accessing' stamp: 'MarcusDenker 3/26/2011 21:57' prior: 28663778! getCurrentSelection ^currentSelection! ! !ObjectExplorer methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:21'! label ^ self rootObject printStringLimitedTo: 32! ! !ObjectExplorer methodsFor: 'user interface' stamp: 'CamilloBruni 9/20/2013 21:43' prior: 28670167! openExplorerFor: anObject " ObjectExplorer new openExplorerFor: Smalltalk " | win | self rootObject: anObject. win := (self explorerFor: anObject) openInWorld. self expandTreeInMorph: win. ^self ! ! !ObjectExplorer methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:21'! rootObject ^ rootObject! ! !ObjectExplorer methodsFor: 'acessing - morphs' stamp: 'CamilloBruni 9/20/2013 21:18'! textMorph | text | text := PluggableTextMorph on: self text: #trash accept: #trash: readSelection: #contentsSelection menu: #codePaneMenu:shifted:. text askBeforeDiscardingEdits: false. ^ text! ! !ObjectExplorer methodsFor: 'acessing - morphs' stamp: 'CamilloBruni 9/20/2013 20:19'! treeListMorph ^ SimpleHierarchicalListMorph on: self list: #getList selected: #getCurrentSelection changeSelected: #noteNewSelection: menu: #genericMenu: keystroke: #explorerKey:from:! ! !ObjectExplorer methodsFor: 'acessing - morphs' stamp: 'CamilloBruni 9/20/2013 21:18'! window | window listMorph | window := (SystemWindow labelled: self label) model: self. listMorph := self treeListMorph. window addMorph: listMorph frame: (0 @ 0 corner: 1 @ 0.8). window addMorph: self textMorph frame: (0 @ 0.8 corner: 1 @ 1). listMorph autoDeselect: false. ^ window! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/20/2013 14:37'! windowCloseForm ^ icons at: #'calendarIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowCloseFormContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'CamilloBruni 9/20/2013 14:37'! windowCloseFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167772160 0 0 0 0 0 0 0 0 167772160 3875536896 4076863488 234881024 0 234881024 2919235584 3858759680 0 0 0 0 0 0 0 0 402653184 3674210304 4261412864 3758096384 671088640 3758096384 4261412864 4278190080 335544320 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 0 0 671088640 4211081216 4261412864 4211081216 671088640 0 0 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 335544320 4278190080 4244635648 3758096384 671088640 3758096384 4143972352 3724541952 402653184 0 0 0 0 0 0 0 0 3892314112 2919235584 234881024 0 234881024 4278190080 1761607680 167772160 0 0 0 0 0 0 0 0 167772160 67108864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'CamilloBruni 9/20/2013 14:38'! windowMaximizeForm ^ icons at: #'calendarIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowMaximizeFormContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'CamilloBruni 9/20/2013 14:38'! windowMaximizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) ! ! MorphicUIManager removeSelector: #explorer:for:withLabel:! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(21 September 2013 11:06:25 am) Pharo.image priorSource: 18203041! ----STARTUP----an Array(21 September 2013 11:12:27 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 September 2013 11:12:27 am) Pharo-30414.image priorSource: 18219883! ----STARTUP----an Array(22 September 2013 10:02:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/22/2013 09:59' prior: 68535000! commentForCurrentUpdate ^ '11652 Undeclared variable in PluggableTextMorphWithLimits >> #acceptBasic https://pharo.fogbugz.com/f/cases/11652 11651 Filing testInstanceSideMethodsWithNilKeyInLastLiteral https://pharo.fogbugz.com/f/cases/11651 11629 Obsolete Class in the release: AnObsoleteKMCommandModifier https://pharo.fogbugz.com/f/cases/11629 11647 DropListModel >> #setSelectedItem: mixes up model, items and labels https://pharo.fogbugz.com/f/cases/11647'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/22/2013 09:59'! script207 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.114.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.539.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.405.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-EstebanLorenzano.156.mcz Spec-Debugger-EstebanLorenzano.119.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-EstebanLorenzano.76.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-MarcusDenker.247.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1262.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/22/2013 10:00'! update30415 "self new update30415" self withUpdateLog: '11652 Undeclared variable in PluggableTextMorphWithLimits >> #acceptBasic https://pharo.fogbugz.com/f/cases/11652 11651 Filing testInstanceSideMethodsWithNilKeyInLastLiteral https://pharo.fogbugz.com/f/cases/11651 11629 Obsolete Class in the release: AnObsoleteKMCommandModifier https://pharo.fogbugz.com/f/cases/11629 11647 DropListModel >> #setSelectedItem: mixes up model, items and labels https://pharo.fogbugz.com/f/cases/11647'. self loadTogether: self script207 merge: false. MorphicUIManager compileAll. KMBuffer resetUniqueInstance. KMRepository reset. . self flushCaches. ! ! "ScriptLoader30"! !PluggableTextMorphWithLimits methodsFor: 'actions' stamp: 'CamilloBruni 9/21/2013 11:58' prior: 68532796! acceptBasic "should be refactored with accept that comes from PluggableTextMorphPlus " "Inform the model of text to be accepted, and return true if OK." | saveSelection saveScrollerOffset | self locked ifFalse: [ ^ super acceptBasic ]. saveSelection := self selectionInterval copy. saveScrollerOffset := scroller offset copy. (self canDiscardEdits and: [self alwaysAccept not]) ifTrue: [^ self flash]. self hasEditingConflicts ifTrue:[ (self confirm: 'Caution!! This method may have been changed elsewhere since you started editing it here. Accept anyway?' translated) ifFalse: [^ self flash]]. [ method methodClass compile: (self styler unstyledTextFrom: textMorph asText) classified: method category notifying: self ] ensure: [ unstyledAcceptText := nil ]. self hasUnacceptedEdits: false. ["During the step for the browser, updateCodePaneIfNeeded is called, and invariably resets the contents of the codeholding PluggableTextMorph at that time, resetting the cursor position and scroller in the process. The following line forces that update without waiting for the step, then restores the cursor and scrollbar" (model respondsTo: #updateCodePaneIfNeeded) ifTrue: [model updateCodePaneIfNeeded]. scroller offset: saveScrollerOffset. self setScrollDeltas. self selectFrom: saveSelection first to: saveSelection last ] on: Error do: []! ! !DropListModel methodsFor: 'protocol' stamp: 'CamilloBruni 9/20/2013 19:59' prior: 20979108! setSelectedItem: anItem "Force the selection of the item anItem" | index realItem | index := self listItems indexOf: anItem ifAbsent: [ ^ self ]. realItem := listHolder at: index. selectionHolder index contents: index. selectionHolder selection contents: realItem.! ! "Morphic-Base"! "Spec-Widgets"! ----End fileIn----! ----QUIT----an Array(22 September 2013 10:02:22 am) Pharo.image priorSource: 18220094! ----STARTUP----an Array(22 September 2013 10:08:29 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 September 2013 10:08:30 am) Pharo-30415.image priorSource: 18233903! ----STARTUP----an Array(22 September 2013 10:45:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/22/2013 10:38' prior: 68552054! commentForCurrentUpdate ^ '11645 missing visitSequence: method https://pharo.fogbugz.com/f/cases/11645 11646 Add Inspector Views / Types https://pharo.fogbugz.com/f/cases/11646 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/22/2013 10:41'! script208 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.114.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.121.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.90.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-MarcusDenker.247.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1262.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/22/2013 10:41'! update30416 "self new update30416" self withUpdateLog: '11645 missing visitSequence: method https://pharo.fogbugz.com/f/cases/11645 11646 Add Inspector Views / Types https://pharo.fogbugz.com/f/cases/11646 '. self loadTogether: self script208 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TIRVisitor commentStamp: '' prior: 0! I am a trait containing all visitor methods so they can be used outside from the IRVisitor hierarchy.! !EyeAbstractInspector commentStamp: '' prior: 0! I am the abstract superclass for all kind of inspectors! !EyeEditor commentStamp: '' prior: 0! I am an abstract view model for editors displayed in the inspector! !EyeMethodEditor commentStamp: '' prior: 0! A simple editor for complied methods.! !EyeInspector commentStamp: '' prior: 68383407! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeBasicInspector commentStamp: '' prior: 0! I am a special inspector that only lists the real fields of an object. I have exactly the same behavior as my superclass but I am used as a placeholder for the the different inspector views in the InspectorWrapper.! !EyeTreeInspector commentStamp: '' prior: 0! I am a tree inspector that takes the EyeElements from the default inspectors and displays them in a tree.! !EyeViewHierarchyInspector commentStamp: '' prior: 0! A special tree inspector that displays the submorph hierarchy of the inspected morph.! !EyeInspectorToolBar commentStamp: '' prior: 48649483! Toolbar to explore previous or next inpected elements! !InspectorNavigator commentStamp: '' prior: 0! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !ClassEyeElement commentStamp: '' prior: 0! I am an eye element for the class of an inspected element.! !IRSequence commentStamp: '' prior: 0! A sequence is corresponds to a block in the control flow graph.! !IRVisitor commentStamp: '' prior: 0! I am a generic visitor implementation for the OpalCompiler IR! !TIRVisitor commentStamp: '' prior: 68576987! I am a trait containing all visitor methods so they can be used outside from the IRVisitor hierarchy.! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitBlockReturnTop: aBlockReturnTop! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitInstVarAccess: anInstVarAccess! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitJump: aJump! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitJumpIf: aJumpIf! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitLiteralVariableAccess: aLiteralVariableAccess! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:55'! visitMethod: aMethod aMethod startSequence withAllSuccessorsDo: [ :sequence | sequence accept: self ]. ^ aMethod! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitPop: aPop! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitPushArray: aPushArray! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitPushClosureCopy: aPushClosureCopy! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitPushDup: aPushDup! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitPushLiteral: aPushLiteral! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitReceiverAccess: aReceiverAccess! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitRemoteTempAccess: aRemoteTempAccess! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitReturn: aReturn! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitSend: aSend! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:56'! visitSequence: anIRSequence anIRSequence do: [ :instruction | instruction accept: self ]. ^ anIRSequence! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitTempAccess: aTempAccess! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitTempVector: aTempVector! ! !TIRVisitor methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:54'! visitThisContextAccess: aThisContextAccess! ! !EyeContextInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:13'! label ^ 'Context Inspector'! ! !EyeCompiledMethodInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:13'! label ^ 'Compiled Method Inspector'! ! !EyeCompiledMethodInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:06'! title ^ self object printString ! ! !EyeAbstractInspector commentStamp: '' prior: 68577151! I am the abstract superclass for all kind of inspectors! !EyeAbstractInspector class methodsFor: 'spec' stamp: 'CamilloBruni 9/20/2013 20:31'! debuggerSpec ^ self inspectorSpec! ! !EyeAbstractInspector class methodsFor: 'spec' stamp: 'CamilloBruni 9/20/2013 20:30'! inspectorSpec self subclassResponsibility! ! !EyeAbstractInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 18:37'! label "Override to return a proper label displayd in the inspector choice" ^ self name! ! !EyeAbstractInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:10'! taskbarIcon ^ Smalltalk ui icons smallInspectItIcon! ! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 20:39'! close "Override in sublcasses for special actions"! ! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 16:31'! diveInto: anObject ^ self owner ifNotNil: [ :navigator | navigator diveInto: anObject]! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 18:30'! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged:" object := nil asValueHolder. super initialize. ! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 18:30'! initializePresenter object whenChangedDo: [ self objectChanged ].! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 9/21/2013 14:35'! initializeWidgets! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 19:24'! inspect: anObject self object: anObject. ! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 18:25'! object ^ object contents! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 18:25'! object: anObject object contents: anObject! ! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 18:25'! objectChanged "triggered when the inspected object is changed" self subclassResponsibility! ! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 20:41'! ownerChanged ! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 22:47'! title ^ self object class printString! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:08'! variants | variants defaultInspectorClass | variants := OrderedCollection new. defaultInspectorClass := self object class inspectorClass. variants add: defaultInspectorClass. "We only need the basic inspector if we modify something" defaultInspectorClass = Object inspectorClass ifFalse: [ variants add: EyeBasicInspector ]. variants add: EyeTreeInspector. variants addAll: self object class additionalInspectorClasses. ^ variants! ! !EyeEditor commentStamp: '' prior: 68577258! I am an abstract view model for editors displayed in the inspector! !EyeEditor class methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:16'! label ^ 'Default Editor'! ! !EyeMethodEditor commentStamp: '' prior: 68577382! A simple editor for complied methods.! !EyeMethodEditor class methodsFor: 'spec' stamp: 'CamilloBruni 9/21/2013 20:15'! inspectorSpec ^ SpecLayout composed add: #text; yourself! ! !EyeMethodEditor class methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:17'! label ^ 'Method Editor'! ! !EyeMethodEditor methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:04'! method ^ self object! ! !EyeMethodEditor methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 20:08'! objectChanged self text text: self method sourceCode; behavior: self method methodClass. self toolbar method: self method! ! !EyeMethodEditor methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:02'! text ^ text ifNil: [ text := self instantiate: TextModel. text aboutToStyle: true ]! ! !EyeMethodEditor methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:07'! title ^ self method printString ! ! !EyeMethodEditor methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 20:09'! toolbar ^ toolbar ifNil: [ toolbar := self instantiate: MethodToolbar. ]! ! !EyeInspector commentStamp: '' prior: 68577481! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeBasicInspector commentStamp: '' prior: 68577706! I am a special inspector that only lists the real fields of an object. I have exactly the same behavior as my superclass but I am used as a placeholder for the the different inspector views in the InspectorWrapper.! !EyeBasicInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 18:39'! label ^ 'Basic Inspector'! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'CamilloBruni 9/21/2013 16:31' prior: 43580154! inspect: anObject InspectorNavigator openInspector: (self inspector: anObject). ^ anObject! ! !EyeInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:15'! label ^ 'Default Inspector'! ! !EyeInspector methodsFor: 'list' stamp: 'CamilloBruni 9/21/2013 16:04'! addClass: elements "Add class to the list of elements you can access in the inspector" elements add: (ClassEyeElement host: self object).! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 20:38'! dive ^ self owner dive! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:42'! elements ^ self list getItems! ! !EyeInspector methodsFor: 'list' stamp: 'CamilloBruni 9/21/2013 16:04' prior: 41611245! generateElements "generate the collection of elements to show in the inspector for the object inspected" |elements| elements := OrderedCollection new. self addSelf: elements. self addClass: elements. self addAllInstVars: elements. self addSpecialFields: elements. self addInstancesVariable: elements. self addVariableFields: elements. ^elements! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 20:37' prior: 48884012! initialize super initialize. self whenWindowChanged: [ :myWindow | myWindow whenClosedDo: [ self close ] ].! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/21/2013 15:30' prior: 68253274! initializePresenter "initialize the event handlings" super initializePresenter. description whenTextIsAccepted: [ :newText | self saveElement: newText. self refreshDescription ]. self initializeShortcuts. ! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/21/2013 15:32' prior: 46691209! initializeShortcuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | self list bindKeyCombination: key toAction: value ] ! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/21/2013 15:28' prior: 68384082! initializeWidgets description := self instantiate: TextModel. ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'CamilloBruni 9/21/2013 15:34' prior: 36493738! inspect: anObject "This is called to update the inspector model with a new object, updates the UI" self object: anObject. self list setSelectedIndex: 1. self refresh ! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:34' prior: 36495388! list ^ list ifNil: [ list := self instantiate: NewListModel. list handlesDoubleClick: true; whenSelectedItemChanged: [ :item | self refreshDescription: item ]; doubleClickAction: [ self dive ]. ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 15:38' prior: 46042698! objectChanged "triggered when the inspected object is changed" self updateList. self text doItReceiver: self object. self description doItReceiver: self object. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 20:42'! ownerChanged self customMenuActions: self owner customMenuActions; takeKeyboardFocus; initializeAutoRefresh! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:38' prior: 45901578! selectedElement ^ self list selectedItem ifNil: [ "sometimes the new list model desynchronize its selected index from its selected element, this mean that the inspector evaluates 'list setSelectedIndex: 1' but 'list selectedItem' still returns nil. This code fixes this case, that is triggered for example when you do Cmd+c in an ObjectExplorer." self list selectedIndex ifNotNil: [ :currentIndex | currentIndex = 0 ifTrue: [ ^ self ]. self list listItems ifNotEmpty: [ :aList | aList at: currentIndex ] ] ]! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:32' prior: 36499077! selectedIndex ^ self list selectedIndex! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:32' prior: 36499192! selectedIndex: integer ^ self list setSelectedIndex: integer! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:32' prior: 41636332! selectedObject: anObject "Sets the selectedElement of the inspector to anObject. If anObject is not in the list, then sets the selectedElement to 1" self list setSelectedIndex: 1. self list listItems withIndexDo: [ :item :index | item value == anObject ifTrue: [ self list setSelectedIndex: index ] ]! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'CamilloBruni 9/21/2013 15:33' prior: 36499476! shortCuts "Answers a dictionary of the shortcuts usable in EyeInspector" |shortCuts| shortCuts := Dictionary new. shortCuts at: $i command put: [ self inspectInNewWindow: self list selectedItem value ]. shortCuts at: $i command shift put: [ self explore: self list selectedItem value ]. shortCuts at: $b command put: [ self list selectedItem browseValue ]. shortCuts at: $h command put: [ self list selectedItem browseValueClassHierarchy ]. shortCuts at: $c command put: [ self list selectedItem copyAccessorCode ]. ^shortCuts! ! !EyeInspector methodsFor: 'private' stamp: 'CamilloBruni 9/21/2013 15:33' prior: 43581275! takeKeyboardFocus ^ self list takeKeyboardFocus! ! !EyeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:28' prior: 36500090! text ^ text ifNil: [ text := self instantiate: TextModel. text aboutToStyle: true. ]! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 15:33' prior: 41636730! updateList "update the list of elements displayed according to the new object" |elements| elements := self generateElements. "first reset the items to make sure we don't interfere with the display block" self list items: #(). self list displayBlock: [ :e :index | (elements at: index ifAbsent: [ InstanceVariableEyeElement host: nil ]) label ]. self list items: elements. self list menu: [ :aMenu | self inspectionMenu: aMenu ]. ! ! !EyeTreeInspector commentStamp: '' prior: 68577979! I am a tree inspector that takes the EyeElements from the default inspectors and displays them in a tree.! !EyeTreeInspector class methodsFor: 'spec' stamp: 'CamilloBruni 9/21/2013 14:38'! inspectorSpec ^ SpecLayout composed newRow: #tree bottom: 0.3; addHSplitter; newRow: #text top: 0.7; yourself! ! !EyeTreeInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:15'! label ^ 'Tree Inspector'! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 19:50'! childrenFor: anEyeElement ^ self childrenForObject: anEyeElement value! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 19:50'! childrenForObject: anObject self flag: 'Minor Ugliness to filter out the self and instavr node'. ^ anObject inspector elements reject: [ :element | (element isKindOf: SelfEyeElement) or: [ element isKindOf: AllInstVarsEyeElement ]]! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 15:55'! iconFor: anEyeElement ^ anEyeElement icon! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 15:47'! labelFor: anEyeElement ^ anEyeElement longLabel! ! !EyeTreeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 15:52'! objectChanged self tree roots: self roots; expandRoots.! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 19:52'! roots ^ {SelfEyeElement host: self object}, (self childrenForObject: self object)! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 14:37'! text ^ text ifNil: [ text := self instantiate: TextModel ]! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 15:55'! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree childrenBlock: [ :anObject | self childrenFor: anObject ]; iconBlock: [ :treeNode | self iconFor: treeNode item ]; displayBlock: [ :anObject | self labelFor: anObject ]; doubleClick: [ self diveInto: tree selectedItem ]]! ! !EyeViewHierarchyInspector commentStamp: '' prior: 68578152! A special tree inspector that displays the submorph hierarchy of the inspected morph.! !EyeViewHierarchyInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:15'! label ^ 'Morph View Hierarchy Inspector'! ! !EyeViewHierarchyInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 19:51'! childrenForObject: aMorph ^ aMorph submorphs collect: [ :each | DynamicEyeElement host: aMorph value: each ]! ! !EyeViewHierarchyInspector methodsFor: 'api' stamp: 'CamilloBruni 9/21/2013 19:51'! roots ^ self childrenForObject: self object! ! !EyeInspectorToolBar commentStamp: '' prior: 68578306! Toolbar to explore previous or next inpected elements! !EyeInspectorToolBar class methodsFor: 'specs' stamp: 'CamilloBruni 9/20/2013 18:18' prior: 48649625! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #previousButton width: 24; add: #inspectorChoice; add: #nextButton width: 24 ]; yourself.! ! !EyeInspectorToolBar methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 22:25'! initialize isUpdating := false. super initialize.! ! !EyeInspectorToolBar methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 22:28' prior: 48649845! initializeWidgets " nothing to do"! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 22:29'! inspectorChoice inspectorChoice ifNil: [ inspectorChoice := self instantiate: DropListModel. inspectorChoice whenSelectedItemChanged: [ :inspectorType | self preventUpdatesDuring: [ self inspectorType: inspectorType ]]]. ^ inspectorChoice! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 19:36'! inspectorType ^ self inspectorWrapper inspectorType! ! !EyeInspectorToolBar methodsFor: 'actions' stamp: 'CamilloBruni 9/21/2013 16:32'! inspectorType: anInspectorClass ^ self inspectorWrapper inspectorType: anInspectorClass! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 19:32'! inspectorTypes ^ self inspectorWrapper inspectorTypes! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 22:29' prior: 68377315! nextButton nextButton ifNil: [ nextButton := self instantiate: ButtonModel. nextButton label: '>'; action: [ self inspectorWrapper inspectNext. self update. ]]. ^ nextButton! ! !EyeInspectorToolBar methodsFor: 'private' stamp: 'CamilloBruni 9/20/2013 22:29'! preventUpdatesDuring: aBlock "Used to prevent back-firing when the toolbar is update from the outside" isUpdating ifTrue: [ ^ self ]. isUpdating := true. aBlock ensure: [ isUpdating := false ]! ! !EyeInspectorToolBar methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 22:29' prior: 68377644! previousButton previousButton ifNil: [ previousButton := self instantiate: ButtonModel. previousButton label: '<'. previousButton action: [ self inspectorWrapper inspectPrevious. self update. ] ]. ^ previousButton! ! !EyeInspectorToolBar methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 22:24'! update self preventUpdatesDuring: [ self updateInspectorChoice. self updateInspectorType. self previousButton enabled: self history hasPrevious. self nextButton enabled: self history hasNext ]! ! !EyeInspectorToolBar methodsFor: 'event-handling' stamp: 'CamilloBruni 9/20/2013 22:26'! updateInspectorChoice self inspectorTypes ifNotNil: [ :variants | self inspectorChoice listItems = variants ifTrue: [ ^ self ]. self inspectorChoice items: variants; displayBlock: [ :inspectorClass | inspectorClass label ]]! ! !EyeInspectorToolBar methodsFor: 'event-handling' stamp: 'CamilloBruni 9/21/2013 16:38'! updateInspectorType self inspectorType ifNotNil: [ :inspectorClass | self inspectorChoice selectedItem = inspectorClass ifTrue: [ ^ self ]. self inspectorChoice setSelectedItem: inspectorClass ].! ! !InspectorNavigator commentStamp: '' prior: 68578420! This a wrapper around inspectors for diving. It is used in the case where the inspector is dynamically replaced by another inspector. For example, EyeCollectionInspector would be replaced by EyeIntegerInspector.! !InspectorNavigator class methodsFor: 'specs' stamp: 'ClementBera 5/28/2013 09:45'! debuggerSpec ^ SpecLayout composed add: #inspector withSpec: #debuggerSpec; yourself! ! !InspectorNavigator class methodsFor: 'instance creation' stamp: 'cb 6/25/2013 13:39'! inspect: anObject ^ self openInspector: anObject inspector! ! !InspectorNavigator class methodsFor: 'specs' stamp: 'CamilloBruni 9/21/2013 19:53'! inspectorSpec ^ SpecLayout composed newColumn: [ :c | c add: #toolbar height: 24; add: #inspector withSpec: #inspectorSpec ]; yourself! ! !InspectorNavigator class methodsFor: 'instance creation' stamp: 'ClementBera 5/2/2013 11:43'! openInspector: inspector ^ self new inspector: inspector; openWithSpec: #inspectorSpec; yourself! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:42'! basicInspector: anEyeInspector inspector contents ifNotNil: [ :inspect | inspect owner: nil ]. inspector contents: anEyeInspector. anEyeInspector owner: self; ownerChanged.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:37'! canBeRefreshed ^ canBeRefreshed! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:37'! canBeRefreshed: anObject canBeRefreshed := anObject! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'MarcusDenker 5/4/2013 16:15'! customMenuActions ^ [:aMenu | aMenu add: 'Dive (d)' translated target: self selector: #dive. history hasPrevious ifTrue: [ aMenu add: 'Previous object (p)' translated target: self selector: #inspectPrevious]. history hasNext ifTrue: [ aMenu add: 'Next object (n)' translated target: self selector: #inspectNext]. ]! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 5/2/2013 21:40'! dive self selectedIndex ifNil: [ ^ self ]. self diveInto: self selectedObject! ! !InspectorNavigator methodsFor: 'actions' stamp: 'ClementBera 5/3/2013 14:59'! diveInto: anObject self inspect: anObject.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:22'! history ^ history! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'ClementBera 8/13/2013 11:11'! initialExtent ^ self inspector initialExtent ! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 20:28'! initialize super initialize. history := NavigationHistory new. inspector := nil asValueHolder. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer on: WidgetBuilt send: #setRefreshedToTrue to: self. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 22:02'! initializeShortcuts self bindKeyCombination: $[ command toAction: [ self inspectPrevious ]. self bindKeyCombination: $] command toAction: [ self inspectNext ]. self bindKeyCombination: $[ shift command toAction: [ self usePreviousInspectorType ]. self bindKeyCombination: $] shift command toAction: [ self useNextInspectorType ]. self bindKeyCombination: $0 command toAction: [ self useBasicInspector ]. self bindKeyCombination: $0 shift command toAction: [ self useDefaultInspector ]. "code duplication? yes, but still easier than capturing arguments ;)" self bindKeyCombination: $1 command toAction: [ self useInspectorAt: 1 ]. self bindKeyCombination: $2 command toAction: [ self useInspectorAt: 2 ]. self bindKeyCombination: $3 command toAction: [ self useInspectorAt: 3 ]. self bindKeyCombination: $4 command toAction: [ self useInspectorAt: 4 ]. self bindKeyCombination: $5 command toAction: [ self useInspectorAt: 5 ]. self bindKeyCombination: $6 command toAction: [ self useInspectorAt: 6 ]. self bindKeyCombination: $7 command toAction: [ self useInspectorAt: 7 ]. self bindKeyCombination: $8 command toAction: [ self useInspectorAt: 8 ]. self bindKeyCombination: $9 command toAction: [ self useInspectorAt: 9 ]. self bindKeyCombination: $d command toAction: [ self dive ].! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'CamilloBruni 9/20/2013 20:26'! initializeWidgets toolbar := self instantiate: EyeInspectorToolBar.! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 22:18'! inspect: anObject self inspector: anObject inspector. ! ! !InspectorNavigator methodsFor: 'history' stamp: 'CamilloBruni 9/20/2013 22:08'! inspectHistoryItem: historyItem "self inspect: historyItem key . self selectedIndex: historyItem value." self inspector: historyItem key! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 22:16'! inspectNext history hasNext ifFalse: [ ^ self ]. self inspectHistoryItem: history next! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 22:07'! inspectPrevious history hasPrevious ifFalse: [ ^ self ]. self inspectHistoryItem: history previous! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 00:26'! inspector ^ inspector contents! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 22:31'! inspector: anEyeInspector self basicInspector: anEyeInspector. self pushHistory.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 19:31'! inspectorType ^ self inspector class! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 00:42'! inspectorType: anInspectorClass "Use a new inspector type. Instantiate the given inspector class and replace the current view" anInspectorClass = self inspector class ifTrue: [ ^ self ]. anInspectorClass isNil ifTrue: [ ^ self ]. self basicInspector: (anInspectorClass new inspect: self object; yourself). history replaceCurrentWith: self inspector. self toolbar update.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 19:32'! inspectorTypes ^ self inspector variants! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:47'! nextInspectorType | index types | types := self inspectorTypes. index := types indexOf: self inspectorType ifAbsent: [ ^ types first ]. ^types atWrap: index + 1.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:15'! object ^ self inspector object! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:48'! previousInspectorType | index types | types := self inspectorTypes. index := types indexOf: self inspectorType ifAbsent: [ ^ types first ]. ^types atWrap: index - 1.! ! !InspectorNavigator methodsFor: 'history' stamp: 'CamilloBruni 9/20/2013 22:07'! pushHistory history add: self inspector. self toolbar update.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:15'! selectedIndex ^ self inspector selectedIndex! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:17'! selectedIndex: anInteger self inspector selectedIndex: anInteger! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 5/2/2013 21:27'! selectedObject ^ self inspector selectedObject! ! !InspectorNavigator methodsFor: 'private' stamp: 'StephaneDucasse 8/4/2013 16:54'! setRefreshedToTrue "introduced because we should not use weak announcer with on:do:." canBeRefreshed := true! ! !InspectorNavigator methodsFor: 'updating' stamp: 'ClementBera 7/3/2013 13:04'! takeKeyboardFocus ^ self inspector takeKeyboardFocus! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 20:12'! taskbarIcon ^ self inspector ifNil: [ super taskbarIcon ] ifNotNil: [ :anInspector | anInspector taskbarIcon ]! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'ClementBera 5/2/2013 11:43'! title ^ self inspector title! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:16'! toolbar ^ toolbar! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'CamilloBruni 9/18/2013 22:16'! toolbar: anObject toolbar := anObject ! ! !InspectorNavigator methodsFor: 'updating' stamp: 'CamilloBruni 9/20/2013 20:38'! updateInspectorFrom: oldInspector self updateTitle. self inspector ifNil: [ ^ self ]. self canBeRefreshed ifFalse: [ ^ self ]. self needRebuild: false. self buildWithSpec: oldInspector spec selector. oldInspector close. "kill the update process"! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 21:54'! useBasicInspector self inspectorType: EyeBasicInspector! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 21:54'! useDefaultInspector self inspectorType: self object class inspectorClass! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 22:03'! useInspectorAt: index "choose an inspector at the given index from the given inspectorTypes. If the index is out of bounds, simply crop it to the neares value" | types | types := self inspectorTypes. self inspectorType: (types at: (index min: types size max: 1))! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 19:34'! useNextInspectorType self inspectorType: self nextInspectorType! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 9/20/2013 19:34'! usePreviousInspectorType self inspectorType: self previousInspectorType! ! !CompiledMethod class methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 9/21/2013 19:59'! additionalInspectorClasses ^ super additionalInspectorClasses, { EyeMethodEditor }! ! !Morph class methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 9/21/2013 16:11'! additionalInspectorClasses ^ super additionalInspectorClasses, { EyeViewHierarchyInspector }! ! !NewValueHolder methodsFor: 'as yet unclassified' stamp: 'CamilloBruni 9/21/2013 15:26'! printOn: aStream super printOn: aStream. aStream nextPutAll: '[ '; print: self contents; nextPutAll: ' ]'! ! !EyeCollectionInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:13'! label ^ 'Collection Inspector'! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:06'! icon ^ (self value iconOrThumbnailOfSize: 16) ifNil: [ self valueClass nautilusIcon ]! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:05'! longLabel ^ (self label ifNotNil: [ :aString | aString, ': ' ] ifNil: [ '' ]), (self value printStringLimitedTo: 150)! ! !ClassEyeElement commentStamp: '' prior: 68578689! I am an eye element for the class of an inspected element.! !ClassEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:01'! accessorCode ^ super label! ! !ClassEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:02'! label ^ 'class'! ! !ClassEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 9/21/2013 16:03'! value ^ self host class! ! !DynamicEyeElement class methodsFor: 'instance creation' stamp: 'CamilloBruni 9/21/2013 16:14'! host: anObject value: aValue ^ (self host: anObject) value: aValue; yourself! ! !IRSequence commentStamp: '' prior: 68578800! A sequence is corresponds to a block in the control flow graph.! !IRSequence methodsFor: 'visiting' stamp: 'CamilloBruni 9/20/2013 22:51'! accept: aVisitor ^ self visitSequence: self! ! !IRVisitor commentStamp: '' prior: 68578915! I am a generic visitor implementation for the OpalCompiler IR! !Object methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 9/20/2013 19:27'! additionalInspectorClasses "Answer addtional inspector classes that are used to show alternative views of instances of myself" ^ { }! ! !NavigationHistory methodsFor: 'protocol' stamp: 'CamilloBruni 9/20/2013 22:12' prior: 28336171! previous index := index-1 max: 1. ^ storage at: index! ! !NavigationHistory methodsFor: 'protocol' stamp: 'CamilloBruni 9/21/2013 00:42'! replaceCurrentWith: anEntry "Change the current history item to the given object" storage at: index put: (anEntry -> TimeStamp now)! ! InspectorWrapper removeSelector: #updateInspectorFrom:! InspectorWrapper removeSelector: #toolbar:! InspectorWrapper removeSelector: #toolbar! InspectorWrapper removeSelector: #title! InspectorWrapper removeSelector: #takeKeyboardFocus! InspectorWrapper removeSelector: #setRefreshedToTrue! InspectorWrapper removeSelector: #selectedObject! InspectorWrapper removeSelector: #selectedIndex:! InspectorWrapper removeSelector: #selectedIndex! InspectorWrapper removeSelector: #pushHistory! InspectorWrapper removeSelector: #object! InspectorWrapper removeSelector: #inspector:! InspectorWrapper removeSelector: #inspector! InspectorWrapper removeSelector: #inspectPrevious! InspectorWrapper removeSelector: #inspectNext! InspectorWrapper removeSelector: #inspectHistoryItem:! InspectorWrapper removeSelector: #inspect:! InspectorWrapper removeSelector: #initializeWidgets! InspectorWrapper removeSelector: #initializeShortcuts! InspectorWrapper removeSelector: #initialize! InspectorWrapper removeSelector: #initialExtent! InspectorWrapper removeSelector: #history! InspectorWrapper removeSelector: #diveInto:! InspectorWrapper removeSelector: #dive! InspectorWrapper removeSelector: #customMenuActions! InspectorWrapper removeSelector: #canBeRefreshed:! InspectorWrapper removeSelector: #canBeRefreshed! InspectorWrapper class removeSelector: #openInspector:! InspectorWrapper class removeSelector: #inspectorSpec! InspectorWrapper class removeSelector: #inspect:! InspectorWrapper class removeSelector: #debuggerSpec! Smalltalk globals removeClassNamed: #InspectorWrapper! AllInstVarsEyeElement removeSelector: #accessorCode! EyeInspectorToolBar removeSelector: #updateButtonStatus! EyeInspector removeSelector: #title! EyeInspector removeSelector: #text:! EyeInspector removeSelector: #object:! EyeInspector removeSelector: #object! EyeInspector removeSelector: #list:! !Trait method! visitSequence: anIRSequence anIRSequence do: [ :instruction | instruction accept: self ]. ^ anIRSequence! ! "Nautilus"! "OpalCompiler-Core"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(22 September 2013 10:45:24 am) Pharo.image priorSource: 18234114! ----STARTUP----an Array(22 September 2013 10:51:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 September 2013 10:51:22 am) Pharo-30416.image priorSource: 18281826! ----STARTUP----an Array(22 September 2013 4:00:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/22/2013 15:58' prior: 68566074! commentForCurrentUpdate ^ '11654 Debugger broken: class InspectorWrapper needed by SpecDebugger https://pharo.fogbugz.com/f/cases/11654'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/22/2013 15:58'! script209 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.116.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.62.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.114.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.133.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.92.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-MarcusDenker.247.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.36.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1262.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/22/2013 15:58'! update30417 "self new update30417" self withUpdateLog: '11654 Debugger broken: class InspectorWrapper needed by SpecDebugger https://pharo.fogbugz.com/f/cases/11654'. self loadTogether: self script209 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeBasicInspector commentStamp: '' prior: 68586338! I am a special inspector that only lists the real fields of an object. I have exactly the same behavior as my superclass but I am used as a placeholder for the the different inspector views in the InspectorNavigator.! !EyeBasicInspector commentStamp: '' prior: 68624833! I am a special inspector that only lists the real fields of an object. I have exactly the same behavior as my superclass but I am used as a placeholder for the the different inspector views in the InspectorNavigator.! !SpecDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 10:49' prior: 45970625! initializeWidgets self instantiateModels: {(#stack -> #MultiColumnListModel). (#toolbar -> #SpecDebuggerToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorNavigator). (#contextInspector -> #EyeDebuggerContextInspector)}. self stack displayBlock: [ :aContext | self columnsFor: aContext ]. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self setStackMenu. self setStackShortcuts. self setFocusOrder! ! "Spec-Debugger"! ----End fileIn----! ----QUIT----an Array(22 September 2013 4:00:17 pm) Pharo.image priorSource: 18282037! ----STARTUP----an Array(22 September 2013 4:06:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 September 2013 4:06:17 pm) Pharo-30417.image priorSource: 18294369! ----STARTUP----an Array(23 September 2013 9:44:13 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/23/2013 09:41' prior: 68613996! commentForCurrentUpdate ^ '11661 Small cleanup of dead code https://pharo.fogbugz.com/f/cases/11661 11659 Add basic Morph Viewer for the Inspectors https://pharo.fogbugz.com/f/cases/11659 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/23/2013 09:42'! script210 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.309.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1616.mcz KernelTests-MarcusDenker.562.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.114.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.94.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-MarcusDenker.249.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-EstebanLorenzano.30.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.628.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1264.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.567.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/23/2013 09:42'! update30418 "self new update30418" self withUpdateLog: '11661 Small cleanup of dead code https://pharo.fogbugz.com/f/cases/11661 11659 Add basic Morph Viewer for the Inspectors https://pharo.fogbugz.com/f/cases/11659 '. self loadTogether: self script210 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeMorphViewer commentStamp: '' prior: 0! A simple inspector view that displays a morph! !CompiledMethod methodsFor: '*Tools' stamp: 'MarcusDenker 9/22/2013 21:02' prior: 38673642! explorerContents "(CompiledMethod compiledMethodAt: #explorerContents) explore" ^Array streamContents: [:s| | tokens | tokens := (self headerDescription readStream skipTo: $"; upTo: $") parseLiterals. s nextPut: (ObjectExplorerWrapper with: ((0 to: tokens size by: 2) collect: [:i| i = 0 ifTrue: [self header] ifFalse: [{tokens at: i - 1. tokens at: i}]]) name: 'header' model: self). 1 to: self numLiterals do: [:key| s nextPut: (ObjectExplorerWrapper with: (self literalAt: key) name: ('literal', key printString contractTo: 32) model: self)]. self isQuick ifTrue: [s nextPut: (ObjectExplorerWrapper with: self symbolic name: #symbolic model: self)] ifFalse: [self symbolicLinesDo: [:pc :line| pc <= 1 ifTrue: [s nextPut: (ObjectExplorerWrapper with: line name: 'pragma' model: self)] ifFalse: [s nextPut: (ObjectExplorerWrapper with: line name: pc printString model: self)]]]. "should be self numLiterals + 1 * Smalltalk wordSize + 1" self endPC + 1 to: self basicSize do: [:key| s nextPut: (ObjectExplorerWrapper with: (self basicAt: key) name: key printString model: self)]]! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 19:34'! selectedElement ^ self tree selectedItem! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 19:33'! selectedObject ^self selectedElement value! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 19:34' prior: 68594582! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree childrenBlock: [ :anObject | self childrenFor: anObject ]; iconBlock: [ :treeNode | self iconFor: treeNode item ]; displayBlock: [ :anObject | self labelFor: anObject ]; doubleClick: [ self diveInto: self selectedObject ]]! ! !EyeMorphViewer commentStamp: '' prior: 68637472! A simple inspector view that displays a morph! !EyeMorphViewer class methodsFor: 'spec' stamp: 'CamilloBruni 9/22/2013 19:38'! inspectorSpec ^ SpecLayout composed newRow: #container yourself! ! !EyeMorphViewer class methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 19:40'! label ^ 'Morph Viewer'! ! !EyeMorphViewer methodsFor: 'event-handling' stamp: 'CamilloBruni 9/22/2013 20:23'! close super close. updateProcess terminate.! ! !EyeMorphViewer methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 20:40'! container ^ container ifNil: [ container := Morph new. container color: Color white; hResizing: #spaceFill; vResizing: #spaceFill ]! ! !EyeMorphViewer methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 20:33'! initializeWidgets super initializeWidgets. self whenWindowChanged: [ self objectChanged ]. updateProcess := [ self objectChanged ] valueWithInterval: 2 seconds.! ! !EyeMorphViewer methodsFor: 'event-handling' stamp: 'CamilloBruni 9/22/2013 20:43'! objectChanged | newThumbnail | newThumbnail := self thumbnailMorph. newThumbnail hResizing: #spaceFill; vResizing: #spaceFill. self container removeAllMorphs; addMorphCentered: newThumbnail! ! !EyeMorphViewer methodsFor: 'event-handling' stamp: 'CamilloBruni 9/22/2013 19:51'! thumbnailMorph ^self object taskThumbnailOfSize: self thumbnailSize! ! !EyeMorphViewer methodsFor: 'accessing' stamp: 'CamilloBruni 9/22/2013 19:53'! thumbnailSize ^ self container extent! ! !Morph class methodsFor: '*Spec-Inspector' stamp: 'CamilloBruni 9/22/2013 19:40' prior: 68608934! additionalInspectorClasses ^ super additionalInspectorClasses, { EyeViewHierarchyInspector. EyeMorphViewer }! ! !PragmaMenuBuilder class methodsFor: 'private' stamp: 'MarcusDenker 9/22/2013 21:05' prior: 29933482! orderAssignBlock "The block which is used to set MenuRegistration tree node order inst var (which is used to sort the tree)" ^[:list | (list detect: [:n | n order notNil] ifNone:[]) "No order has been set - do not touch anything, the list order is ok" ifNil: [list] ifNotNil: [ :firstWithOrder | | idx order | "A menu registration with an order indication hase been found - then compute order of previous and next nodes" idx := list indexOf: firstWithOrder. order := firstWithOrder order. idx > 1 ifTrue: [idx - 1 to: 1 do: [:pos | (list at: pos) order: order - 1. order := order - 1]]. order := firstWithOrder order. idx + 1 to: list size do: [:pos | (list at: pos) order ifNil: [(list at: pos) order: order + 1] ifNotNil: [order := (list at: pos) order]. order := order + 1]. list]]! ! TreeModel class removeSelector: #exampleOfOldAPI! MczInstaller class removeSelector: #unloadMonticello! CriticBrowser removeSelector: #inspectResult! Workspace removeSelector: #createCompletionController! "Manifest-CriticBrowser"! "MenuRegistration"! "NECompletion"! "Spec-Inspector"! "Spec-Widgets"! "System-Installers"! "Tools"! ----End fileIn----! ----QUIT----an Array(23 September 2013 9:44:25 am) Pharo.image priorSource: 18294578! ----STARTUP----an Array(23 September 2013 9:50:28 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 September 2013 9:50:28 am) Pharo-30418.image priorSource: 18311089! ----STARTUP----an Array(23 September 2013 7:17:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !Class methodsFor: 'accessing' stamp: 'CamilloBruni 9/5/2013 09:46' prior: 44324415! setName: aSymbol name := aSymbol.! ! !Class methodsFor: 'accessing' stamp: 'CamilloBruni 9/5/2013 09:46' prior: 68643251! setName: aSymbol name := aSymbol.! ! ----End fileIn----! ----QUIT----an Array(23 September 2013 7:17:16 pm) Pharo.image priorSource: 18311298! ----STARTUP----an Array(23 September 2013 7:23:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 September 2013 7:23:23 pm) Pharo-30419.image priorSource: 18311784! ----STARTUP----an Array(23 September 2013 8:35:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Kernel"! ----End fileIn----! ----QUIT----an Array(23 September 2013 8:35:18 pm) Pharo.image priorSource: 18311993! ----STARTUP----an Array(23 September 2013 8:41:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 September 2013 8:41:20 pm) Pharo-30420.image priorSource: 18312244! ----STARTUP----an Array(24 September 2013 11:19:13 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/24/2013 11:13' prior: 68626536! commentForCurrentUpdate ^ '11537 remove #classVersion methods and friends https://pharo.fogbugz.com/f/cases/11537 11664 SHA1>>#hashStream: should return a ByteArray of size 20 https://pharo.fogbugz.com/f/cases/11664 11663 remove ViewHierarchyExplorer https://pharo.fogbugz.com/f/cases/11663'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/24/2013 11:14' prior: 46201365! script100 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.128.mcz Graphics-Files-MarcusDenker.42.mcz Graphics-Fonts-MarcusDenker.79.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1619.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.117.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-StephaneDucasse.23.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.89.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-StephaneDucasse.199.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-EstebanLorenzano.10.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.94.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-EstebanLorenzano.141.mcz Spec-Widgets-MarcusDenker.249.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1267.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.570.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/24/2013 11:07'! update30419! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/24/2013 11:07'! update30420! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/24/2013 11:14'! update30421 "self new update30421" Smalltalk tools remove: #viewHierarchyExplorer. . self withUpdateLog: '11537 remove #classVersion methods and friends https://pharo.fogbugz.com/f/cases/11537 11664 SHA1>>#hashStream: should return a ByteArray of size 20 https://pharo.fogbugz.com/f/cases/11664 11663 remove ViewHierarchyExplorer https://pharo.fogbugz.com/f/cases/11663'. self loadTogether: self script100 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30417! ScriptLoader removeSelector: #update30416! ScriptLoader removeSelector: #update30415! ScriptLoader removeSelector: #update30414! ScriptLoader removeSelector: #update30413! ScriptLoader removeSelector: #update30412! ScriptLoader removeSelector: #update30411! ScriptLoader removeSelector: #update30410! ScriptLoader removeSelector: #update30409! ScriptLoader removeSelector: #update30408! ScriptLoader removeSelector: #update30407! ScriptLoader removeSelector: #update30406! ScriptLoader removeSelector: #update30405! ScriptLoader removeSelector: #update30404! ScriptLoader removeSelector: #update30403! ScriptLoader removeSelector: #update30402! ScriptLoader removeSelector: #update30401! ScriptLoader removeSelector: #update30400! ScriptLoader removeSelector: #update30399! ScriptLoader removeSelector: #update30398! ScriptLoader removeSelector: #update30397! ScriptLoader removeSelector: #update30396! ScriptLoader removeSelector: #update30395! ScriptLoader removeSelector: #update30394! ScriptLoader removeSelector: #update30393! ScriptLoader removeSelector: #update30392! ScriptLoader removeSelector: #update30391! ScriptLoader removeSelector: #update30390! ScriptLoader removeSelector: #update30389! ScriptLoader removeSelector: #update30388! ScriptLoader removeSelector: #update30387! ScriptLoader removeSelector: #update30386! ScriptLoader removeSelector: #update30385! ScriptLoader removeSelector: #update30384! ScriptLoader removeSelector: #update30383! ScriptLoader removeSelector: #update30382! ScriptLoader removeSelector: #update30381! ScriptLoader removeSelector: #update30380! ScriptLoader removeSelector: #update30379! ScriptLoader removeSelector: #update30378! ScriptLoader removeSelector: #update30377! ScriptLoader removeSelector: #update30376! ScriptLoader removeSelector: #update30375! ScriptLoader removeSelector: #update30374! ScriptLoader removeSelector: #update30373! ScriptLoader removeSelector: #update30372! ScriptLoader removeSelector: #update30371! ScriptLoader removeSelector: #update30370! ScriptLoader removeSelector: #update30369! ScriptLoader removeSelector: #update30368! ScriptLoader removeSelector: #update30367! ScriptLoader removeSelector: #update30366! ScriptLoader removeSelector: #update30365! ScriptLoader removeSelector: #update30364! ScriptLoader removeSelector: #update30363! ScriptLoader removeSelector: #update30362! ScriptLoader removeSelector: #update30361! ScriptLoader removeSelector: #update30360! ScriptLoader removeSelector: #update30359! ScriptLoader removeSelector: #update30358! ScriptLoader removeSelector: #update30357! ScriptLoader removeSelector: #update30356! ScriptLoader removeSelector: #update30355! ScriptLoader removeSelector: #update30354! ScriptLoader removeSelector: #update30353! ScriptLoader removeSelector: #update30352! ScriptLoader removeSelector: #update30351! ScriptLoader removeSelector: #update30350! ScriptLoader removeSelector: #update30349! ScriptLoader removeSelector: #update30348! ScriptLoader removeSelector: #update30347! ScriptLoader removeSelector: #update30346! ScriptLoader removeSelector: #update30345! ScriptLoader removeSelector: #update30344! ScriptLoader removeSelector: #update30343! ScriptLoader removeSelector: #update30342! ScriptLoader removeSelector: #update30341! ScriptLoader removeSelector: #update30340! ScriptLoader removeSelector: #update30339! ScriptLoader removeSelector: #update30338! ScriptLoader removeSelector: #update30337! ScriptLoader removeSelector: #update30336! ScriptLoader removeSelector: #update30335! ScriptLoader removeSelector: #update30334! ScriptLoader removeSelector: #update30333! ScriptLoader removeSelector: #update30332! ScriptLoader removeSelector: #update30331! ScriptLoader removeSelector: #update30330! ScriptLoader removeSelector: #update30329! ScriptLoader removeSelector: #update30328! ScriptLoader removeSelector: #update30327! ScriptLoader removeSelector: #update30326! ScriptLoader removeSelector: #update30325! ScriptLoader removeSelector: #update30324! ScriptLoader removeSelector: #update30323! ScriptLoader removeSelector: #update30322! ScriptLoader removeSelector: #update30321! ScriptLoader removeSelector: #update30320! ScriptLoader removeSelector: #update30319! ScriptLoader removeSelector: #update30318! ScriptLoader removeSelector: #update30317! ScriptLoader removeSelector: #update30316! ScriptLoader removeSelector: #update30315! ScriptLoader removeSelector: #update30314! ScriptLoader removeSelector: #update30313! ScriptLoader removeSelector: #update30312! ScriptLoader removeSelector: #update30311! ScriptLoader removeSelector: #update30310! ScriptLoader removeSelector: #update30309! ScriptLoader removeSelector: #update30308! ScriptLoader removeSelector: #update30307! ScriptLoader removeSelector: #update30306! ScriptLoader removeSelector: #update30305! ScriptLoader removeSelector: #script210! ScriptLoader removeSelector: #script209! ScriptLoader removeSelector: #script208! ScriptLoader removeSelector: #script207! ScriptLoader removeSelector: #script206! ScriptLoader removeSelector: #script205! ScriptLoader removeSelector: #script204! ScriptLoader removeSelector: #script203! ScriptLoader removeSelector: #script202! ScriptLoader removeSelector: #script201! ScriptLoader removeSelector: #script200! ScriptLoader removeSelector: #script199! ScriptLoader removeSelector: #script198! ScriptLoader removeSelector: #script197! ScriptLoader removeSelector: #script196! ScriptLoader removeSelector: #script195! ScriptLoader removeSelector: #script194! ScriptLoader removeSelector: #script193! ScriptLoader removeSelector: #script192! ScriptLoader removeSelector: #script191! ScriptLoader removeSelector: #script190! ScriptLoader removeSelector: #script189! ScriptLoader removeSelector: #script188! ScriptLoader removeSelector: #script187! ScriptLoader removeSelector: #script186! ScriptLoader removeSelector: #script185! ScriptLoader removeSelector: #script184! ScriptLoader removeSelector: #script183! ScriptLoader removeSelector: #script182! ScriptLoader removeSelector: #script181! ScriptLoader removeSelector: #script180! ScriptLoader removeSelector: #script179! ScriptLoader removeSelector: #script178! ScriptLoader removeSelector: #script177! ScriptLoader removeSelector: #script176! ScriptLoader removeSelector: #script175! ScriptLoader removeSelector: #script174! ScriptLoader removeSelector: #script173! ScriptLoader removeSelector: #script172! ScriptLoader removeSelector: #script171! ScriptLoader removeSelector: #script170! ScriptLoader removeSelector: #script169! ScriptLoader removeSelector: #script168! ScriptLoader removeSelector: #script167! ScriptLoader removeSelector: #script166! ScriptLoader removeSelector: #script165! ScriptLoader removeSelector: #script164! ScriptLoader removeSelector: #script163! ScriptLoader removeSelector: #script162! ScriptLoader removeSelector: #script161! ScriptLoader removeSelector: #script160! ScriptLoader removeSelector: #script159! ScriptLoader removeSelector: #script158! ScriptLoader removeSelector: #script157! ScriptLoader removeSelector: #script156! ScriptLoader removeSelector: #script155! ScriptLoader removeSelector: #script154! ScriptLoader removeSelector: #script153! ScriptLoader removeSelector: #script152! ScriptLoader removeSelector: #script151! ScriptLoader removeSelector: #script150! ScriptLoader removeSelector: #script149! ScriptLoader removeSelector: #script148! ScriptLoader removeSelector: #script147! ScriptLoader removeSelector: #script146! ScriptLoader removeSelector: #script145! ScriptLoader removeSelector: #script144! ScriptLoader removeSelector: #script143! ScriptLoader removeSelector: #script142! ScriptLoader removeSelector: #script141! ScriptLoader removeSelector: #script140! ScriptLoader removeSelector: #script139! ScriptLoader removeSelector: #script138! ScriptLoader removeSelector: #script137! ScriptLoader removeSelector: #script136! ScriptLoader removeSelector: #script135! ScriptLoader removeSelector: #script134! ScriptLoader removeSelector: #script133! ScriptLoader removeSelector: #script132! ScriptLoader removeSelector: #script131! ScriptLoader removeSelector: #script130! ScriptLoader removeSelector: #script129! ScriptLoader removeSelector: #script128! ScriptLoader removeSelector: #script127! ScriptLoader removeSelector: #script126! ScriptLoader removeSelector: #script125! ScriptLoader removeSelector: #script124! ScriptLoader removeSelector: #script123! ScriptLoader removeSelector: #script122! ScriptLoader removeSelector: #script121! ScriptLoader removeSelector: #script120! ScriptLoader removeSelector: #script119! ScriptLoader removeSelector: #script118! ScriptLoader removeSelector: #script117! ScriptLoader removeSelector: #script116! ScriptLoader removeSelector: #script115! ScriptLoader removeSelector: #script114! ScriptLoader removeSelector: #script113! ScriptLoader removeSelector: #script112! ScriptLoader removeSelector: #script111! ScriptLoader removeSelector: #script110! ScriptLoader removeSelector: #script109! ScriptLoader removeSelector: #script108! ScriptLoader removeSelector: #script107! ScriptLoader removeSelector: #script106! ScriptLoader removeSelector: #script105! ScriptLoader removeSelector: #script104! ScriptLoader removeSelector: #script103! ScriptLoader removeSelector: #script102! ScriptLoader removeSelector: #script101! "ScriptLoader30"! !SHA1Test methodsFor: 'testing - examples' stamp: 'SvenVanCaekenberghe 9/23/2013 17:07' prior: 46262277! testEmptyInput "self run: #testEmptyInput" self assert: ((SHA1 new hashMessage: '') asInteger radix: 16) equals: 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'SvenVanCaekenberghe 9/23/2013 17:08' prior: 46262505! testExample1 "This is the first example from the specification document (FIPS PUB 180-1)" hash := SHA1 new hashMessage: 'abc'. self assert: hash equals: (ByteArray readHexFrom: 'A9993E364706816ABA3E25717850C26C9CD0D89D'). ! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'SvenVanCaekenberghe 9/23/2013 17:08' prior: 46262788! testExample2 "This is the second example from the specification document (FIPS PUB 180-1)" hash := SHA1 new hashMessage: 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'. self assert: hash equals: (ByteArray readHexFrom: '84983E441C3BD26EBAAE4AA1F95129E5E54670F1')! ! !SHA1Test methodsFor: 'testing - examples' stamp: 'SvenVanCaekenberghe 9/23/2013 17:09' prior: 46263124! testExample3 "This is the third example from the specification document (FIPS PUB 180-1). This example may take several minutes." hash := SHA1 new hashMessage: (String new: 1000000 withAll: $a). self assert: hash asInteger equals: 16r34AA973CD4C4DAA4F61EEB2BDBAD27316534016F.! ! !SHA1 methodsFor: 'public' stamp: 'SvenVanCaekenberghe 9/23/2013 17:05' prior: 46256637! hashStream: aPositionableStream "Hash the contents of the given stream from the current position to the end using the Secure Hash Algorithm. The SHA algorithm is defined in FIPS PUB 180-1. It is also described on p. 442 of 'Applied Cryptography: Protocols, Algorithms, and Source Code in C' by Bruce Scheier, Wiley, 1996." "http://en.wikipedia.org/wiki/Sha1#Example_hashes" "(SHA1 new hashStream: 'The quick brown fox jumps over the lazy dog' readStream) hex." | startPosition buf bitLength | self initializeTotals. aPositionableStream atEnd ifTrue: [self processFinalBuffer: #() bitLength: 0]. startPosition := aPositionableStream position. [aPositionableStream atEnd] whileFalse: [ buf := aPositionableStream next: 64. (aPositionableStream atEnd not and: [buf size = 64]) ifTrue: [self processBuffer: buf] ifFalse: [ bitLength := (aPositionableStream position - startPosition) * 8. self processFinalBuffer: buf bitLength: bitLength]]. ^ self finalHash asByteArrayOfSize: 20! ! !Morph methodsFor: 'debug and other' stamp: 'MarcusDenker 9/23/2013 15:23' prior: 37760727! buildDebugMenu: aHand "Answer a debugging menu for the receiver. The hand argument is seemingly historical and plays no role presently" | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addStayUpItem. (self hasProperty: #errorOnDraw) ifTrue: [aMenu add: 'start drawing again' translated action: #resumeAfterDrawError.]. (self hasProperty: #drawError) ifTrue: [aMenu add: 'debug drawing error' translated action: #debugDrawError. aMenu addLine]. (self hasProperty: #errorOnStep) ifTrue: [aMenu add: 'start stepping again' translated action: #resumeAfterStepError. aMenu addLine]. aMenu add: 'inspect morph' translated action: #inspectInMorphic:. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu add: 'inspect owner chain' translated action: #inspectOwnerChain. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. self isMorphicModel ifTrue: [ aMenu add: 'inspect model' translated target: self model action: #inspect. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. (self model class inheritsFrom: ComposableModel) ifTrue: [ aMenu add: 'edit model' translated target: self model action: #edit. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon ]]. aMenu add: 'explore morph' translated target: self selector: #explore. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu addLine. aMenu add: 'browse morph class' translated target: self selector: #browseHierarchy. (self isMorphicModel) ifTrue: [aMenu add: 'browse model class' target: self model selector: #browseHierarchy]. ^ aMenu! ! !MethodFinder methodsFor: 'initialization' stamp: 'MarcusDenker 9/24/2013 10:50' prior: 49212287! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dateAndTimeNow dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: dateAndTimeNow millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'MarcusDenker 9/24/2013 10:51' prior: 49937729! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | (TClassDescription >> selector) sourceCode. self assert: (TClassDescription >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "superclass:layout, initializeLayout, initializeLayoutWithSlots:, layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) baseClass classClass -> they have their equivalens in TraitDescription (baseTrait classTrait )" self assert: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: ) asSet. "isClassTrait, baseTrait, , isBaseTrait, classTrait -> They have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names copyTraitExpresion addExclusionOf: have no equivalent in classes" self assert: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #isBaseTrait #classTrait) asSet! ! !Trait method! version ^self explicitRequirement.! ! ClassDescription removeSelector: #version! ClassDescription removeSelector: #classVersion! WorldState class removeSelector: #classVersion! !Trait method! version ^self explicitRequirement.! ! TraitDescription removeSelector: #version! TraitDescription removeSelector: #traitVersion! FilePath class removeSelector: #classVersion! LayoutFrame class removeSelector: #classVersion! TClass removeSelector: #withClassVersion:! Morph removeSelector: #exploreViewHierarchy! TClassDescription removeSelector: #version! SystemWindow class removeSelector: #classVersion! ViewHierarchyExplorer removeSelector: #inspectSelection! ViewHierarchyExplorer removeSelector: #getList! ViewHierarchyExplorer removeSelector: #genericMenu:! ViewHierarchyExplorer removeSelector: #flashSelection! ViewHierarchyExplorer removeSelector: #exploreViewHierarchyOfSelection! ViewHierarchyExplorer removeSelector: #exploreSelection! ViewHierarchyExplorer removeSelector: #browseHierarchyOfSelection! ViewHierarchyExplorer class removeSelector: #registerToolsOn:! Smalltalk globals removeClassNamed: #ViewHierarchyExplorer! "Files"! "Kernel"! "KernelTests"! "Morphic-Base"! "System-Hashing"! "Tests"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(24 September 2013 11:19:33 am) Pharo.image priorSource: 18312453! ----STARTUP----an Array(24 September 2013 11:25:35 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 September 2013 11:25:35 am) Pharo-30421.image priorSource: 18352259! ----STARTUP----an Array(24 September 2013 7:45:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/24/2013 19:41' prior: 68644412! commentForCurrentUpdate ^ '11671 remove empty packages https://pharo.fogbugz.com/f/cases/11671 11672 tiny code critic cleanup in Network, Graphics and Tools https://pharo.fogbugz.com/f/cases/11672 11669 Move classes in System-Applications to Deprecated30 https://pharo.fogbugz.com/f/cases/11669 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/24/2013 19:42'! script101 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.4.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compatibility-MarcusDenker.18.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz Continuations-MarcusDenker.1.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-AnsiStreams-MarcusDenker.7.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-AnsiStreams-MarcusDenker.6.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1619.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.117.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.94.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.249.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Applications-MarcusDenker.53.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz SystemProgress-MarcusDenker.5.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1269.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.570.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/24/2013 19:42'! update30422 "self new update30422" self withUpdateLog: '11671 remove empty packages https://pharo.fogbugz.com/f/cases/11671 11672 tiny code critic cleanup in Network, Graphics and Tools https://pharo.fogbugz.com/f/cases/11672 11669 Move classes in System-Applications to Deprecated30 https://pharo.fogbugz.com/f/cases/11669 '. self loadTogether: self script101 merge: false. ScriptLoader new unloadPackage: 'Compatibility'. ScriptLoader new unloadPackage: 'Continuations'. ScriptLoader new unloadPackage: 'FileSystem-AnsiStreams'. ScriptLoader new unloadPackage: 'FileSystem-Tests-AnsiStreams'. ScriptLoader new unloadPackage: 'SystemProgress'. ScriptLoader new unloadPackage: 'System-Applications'. . self flushCaches. ! ! "ScriptLoader30"! !FileList commentStamp: 'StephaneDucasse 3/28/2010 20:44' prior: 42298674! A FileList is a tool to deal with files. FileList open "open FileList"! !SystemReporter commentStamp: 'laza 1/18/2011 12:04' prior: 46292552! SystemReporter offers a window where information about the system is gathered. This can be easily copied to the clipboard and be attached to a bug report for better identification of the context the bug occured in. To extend the SystemReporter: - add a method reportXYZ: aStream to the reporting category - insert a line add: #XYZ method: #reportXYZ to the initialize method ! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 42340627! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !AbstractMethodConverter commentStamp: '' prior: 42094960! An AbstractMessageConverter is a wrapper used to switch which information to retrieve from a method. This way, you can avoid switch case, you just have to use set the correct filter! !AppRegistry commentStamp: 'ads 4/2/2003 15:30' prior: 42107544! AppRegistry is a simple little class, not much more than a wrapper around a collection. It's intended to help break dependencies between packages. For example, if you'd like to be able to send e-mail, you could use the bare-bones MailComposition class, or you could use the full-blown Celeste e-mail client. Instead of choosing one or the other, you can call "MailSender default" (where MailSender is a subclass of AppRegistry), and thus avoid creating a hard-coded dependency on either of the two mail senders. This will only really be useful, of course, for applications that have a very simple, general, well-defined interface. Most of the time, you're probably better off just marking your package as being dependent on a specific other package, and avoiding the hassle of this whole AppRegistry thing. But for simple things like e-mail senders or web browsers, it might be useful. ! !SoundService commentStamp: '' prior: 46671973! This is class is deprecated.! !VersionsBrowser methodsFor: 'items creation' stamp: 'MarcusDenker 9/24/2013 14:16' prior: 54646258! buildDiffCodePane | old new | listIndex = changeList size ifTrue: [ old := '' ] ifFalse: [ old := changeList at: listIndex + 1 ]. new := changeList at: listIndex ifAbsent: [ nil ]. ^ new ifNil: [ self buildDiffMorphFromOldString: '' toNewString: '' contextClass: nil ] ifNotNil: [ self buildDiffMorphFromOldString: old string toNewString: new string contextClass: new methodClass.]. ! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 9/24/2013 14:17' prior: 18756732! selectConflicts: changeSetOrList "Selects all method definitions for which there is ALSO an entry in the specified changeSet or changList" Cursor read showWhile: [ | change class |(changeSetOrList isKindOf: ChangeSet) ifTrue: [ 1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: (change type = #method and: [(class := change methodClass) notNil and: [(changeSetOrList atSelector: change methodSelector class: class) ~~ #none]])]] ifFalse: ["a ChangeList" 1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: (change type = #method and: [(class := change methodClass) notNil and: [changeSetOrList list includes: (list at: i)]])]] ]. self changed: #allSelections! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 9/24/2013 14:16' prior: 18762859! selectUnchangedMethods "Selects all method definitions for which there is already a method in the current image, whose source is exactly the same." Cursor read showWhile: [ | change |1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: change isUnchangedMethod]]. self changed: #allSelections! ! !StrikeFont methodsFor: 'multibyte character methods' stamp: 'MarcusDenker 9/24/2013 13:20' prior: 50969226! hasGlyphOf: aCharacter | code | code := aCharacter charCode. (code between: self minAscii and: self maxAscii) ifFalse: [ ^ false ]. characterToGlyphMap ifNotNil: [ :map | code := map at: code + 1 ]. (xTable at: code + 1) < 0 ifTrue: [ ^ false ]. ^ true! ! !FileUrl methodsFor: 'private-initialization' stamp: 'MarcusDenker 9/24/2013 13:11' prior: 22096462! privateInitializeFromText: aString "Calculate host and path from a file URL in String format. Some malformed formats are allowed and interpreted by guessing." | schemeName pathString bare stream char i | bare := aString trimBoth. schemeName := Url schemeNameForString: bare. (schemeName isNil or: [schemeName ~= self schemeName]) ifTrue: [ host := ''. pathString := bare] ifFalse: [ "First remove schemeName and colon" bare := bare copyFrom: (schemeName size + 2) to: bare size. "A proper file URL then has two slashes before host, A malformed URL is interpreted as using syntax file:." (bare beginsWith: '//') ifTrue: [i := bare indexOf: $/ startingAt: 3. i=0 ifTrue: [ host := bare copyFrom: 3 to: bare size. pathString := ''] ifFalse: [ host := bare copyFrom: 3 to: i-1. pathString := bare copyFrom: host size + 3 to: bare size]] ifFalse: [host := ''. pathString := bare]]. self initializeFromPathString: pathString ! ! !FileUrl methodsFor: 'private-initialization' stamp: 'MarcusDenker 9/24/2013 13:11' prior: 22097574! privateInitializeFromText: pathString relativeTo: aUrl " should be a filesystem path. This url is adjusted to be aUrl + the path." | newPath | self host: aUrl host. self initializeFromPathString: pathString. self isAbsolute: aUrl isAbsolute. newPath := aUrl path copy. newPath removeLast. "empty string that says its a directory" path do: [ :token | ((token ~= '..') and: [token ~= '.']) ifTrue: [ newPath addLast: token unescapePercents ]. token = '..' ifTrue: [ newPath isEmpty ifFalse: [ newPath last = '..' ifFalse: [ newPath removeLast ] ] ]. "token = '.' do nothing" ]. path := newPath ! ! !FileContentsBrowser methodsFor: 'removing' stamp: 'MarcusDenker 9/24/2013 14:13' prior: 21804459! removeClass | class | classListIndex = 0 ifTrue: [^ self]. class := self selectedClass. (self confirm:'Are you certain that you want to delete the class ', class name, '?') ifFalse:[^self]. self selectedPackage removeClass: class. self classListIndex: 0. self changed: #classList.! ! !MessageTally methodsFor: 'printing' stamp: 'MarcusDenker 9/24/2013 14:12' prior: 25722140! treePrintOn: aStream tabs: tabs thisTab: myTab total: total totalTime: totalTime tallyExact: isExact orThreshold: threshold | sons sonTab | tabs do: [:tab | aStream nextPutAll: tab]. tabs size > 0 ifTrue: [self printOn: aStream total: total totalTime: totalTime tallyExact: isExact]. sons := isExact ifTrue: [receivers] ifFalse: [self sonsOver: threshold]. sons isEmpty ifFalse: [tabs addLast: myTab. sons := sons asSortedCollection. 1 to: sons size do: [:i | sonTab := i < sons size ifTrue: [' |'] ifFalse: [' ']. (sons at: i) treePrintOn: aStream tabs: (tabs size < self maxTabs ifTrue: [tabs] ifFalse: [(tabs select: [:x | x = '[']) copyWith: '[']) thisTab: sonTab total: total totalTime: totalTime tallyExact: isExact orThreshold: threshold]. tabs removeLast]! ! !SUnitUnloader methodsFor: 'private' stamp: 'MarcusDenker 9/24/2013 19:00' prior: 32662387! unloadSUnit Smalltalk globals at: #TestCase ifPresent: [ :class | SystemAnnouncer uniqueInstance unsubscribe: class ]. Smalltalk tools remove: #testRunner. (self sortedForRemovePackages: self sunitPackages) do: [ :each | (MCPackage named: each name) unload ].! ! !FileList commentStamp: 'StephaneDucasse 3/28/2010 20:44' prior: 68695947! A FileList is a tool to deal with files. FileList open "open FileList"! !SystemReporter commentStamp: 'laza 1/18/2011 12:04' prior: 68696093! SystemReporter offers a window where information about the system is gathered. This can be easily copied to the clipboard and be attached to a bug report for better identification of the context the bug occured in. To extend the SystemReporter: - add a method reportXYZ: aStream to the reporting category - insert a line add: #XYZ method: #reportXYZ to the initialize method ! !SystemReporter methodsFor: 'accessing-categories' stamp: 'MarcusDenker 9/24/2013 14:11' prior: 51653710! refresh self updateReport! ! !SystemDictionary methodsFor: '*Tools-Inspector' stamp: 'MarcusDenker 9/24/2013 14:10' prior: 51495382! inspectGlobals "Smalltalk globals inspectGlobals" | associations aDict | associations := (self keys reject: [ :aKey | (self at: aKey) isKindOf: Class ]) asArray sort collect: [ :aKey | self associationAt: aKey ]. aDict := IdentityDictionary new. associations do: [ :as | aDict add: as ]. aDict inspectWithLabel: 'The Globals'! ! !AbstractTool methodsFor: 'package' stamp: 'MarcusDenker 9/24/2013 14:17' prior: 17470810! addPackagesAsGroup: aCollection aCollection ifNotEmpty: [| packages blocks name | packages := aCollection sort: [:a :b | a name <= b name ]. blocks := OrderedCollection new. packages do: [:package | blocks add: [ package orderedClasses]]. name := ( packages collect: [:package | package name]) joinUsing: ' + '. ^ (self groupsManager addADynamicClassGroupNamed: name blocks: blocks)]! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'MarcusDenker 9/24/2013 13:19' prior: 28909638! copyPixelsRGB: y "Handle non-interlaced RGB color mode (colorType = 2)" | i pixel tempForm tempBits | tempForm := Form extent: width @ 1 depth: 32. tempBits := tempForm bits. pixel := LargePositiveInteger new: 4. pixel at: 4 put: 255. i := 1. bitsPerChannel = 8 ifTrue: [ 1 to: width do: [ :x | pixel at: 3 put: (thisScanline at: i); at: 2 put: (thisScanline at: i + 1); at: 1 put: (thisScanline at: i + 2). tempBits at: x put: pixel. i := i + 3 ] ] ifFalse: [ 1 to: width do: [ :x | pixel at: 3 put: (thisScanline at: i); at: 2 put: (thisScanline at: i + 2); at: 1 put: (thisScanline at: i + 4). tempBits at: x put: pixel. i := i + 6 ] ]. transparentPixelValue ifNotNil: [ 1 to: width do: [ :x | (tempBits at: x) = transparentPixelValue ifTrue: [ tempBits at: x put: 0 ] ] ]. tempForm displayOn: form at: 0 @ y rule: Form paint! ! !Browser methodsFor: 'system category functions' stamp: 'MarcusDenker 9/24/2013 14:17' prior: 18498482! findClass "Search for a class from a pattern or from the recent list" | foundClassOrTrait recentList | self okToChange ifFalse: [^ self classNotFound]. recentList := RecentClasses select: [ :n | Smalltalk globals includesKey: n ]. foundClassOrTrait := SearchFacade classSearch chooseFromOwner: self dependents first. foundClassOrTrait ifNil: [^ self classNotFound]. self selectCategoryForClass: foundClassOrTrait. self selectClass: foundClassOrTrait ! ! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 68696544! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !AbstractMethodConverter commentStamp: '' prior: 68696931! An AbstractMessageConverter is a wrapper used to switch which information to retrieve from a method. This way, you can avoid switch case, you just have to use set the correct filter! !AppRegistry commentStamp: 'ads 4/2/2003 15:30' prior: 68697180! AppRegistry is a simple little class, not much more than a wrapper around a collection. It's intended to help break dependencies between packages. For example, if you'd like to be able to send e-mail, you could use the bare-bones MailComposition class, or you could use the full-blown Celeste e-mail client. Instead of choosing one or the other, you can call "MailSender default" (where MailSender is a subclass of AppRegistry), and thus avoid creating a hard-coded dependency on either of the two mail senders. This will only really be useful, of course, for applications that have a very simple, general, well-defined interface. Most of the time, you're probably better off just marking your package as being dependent on a specific other package, and avoiding the hassle of this whole AppRegistry thing. But for simple things like e-mail senders or web browsers, it might be useful. ! !AppRegistry class methodsFor: 'registering' stamp: 'ads 3/29/2003 13:36' prior: 17585896! appName "Defaults to the class name, which is probably good enough, but you could override this in subclasses if you want to." ^ self name! ! !AppRegistry class methodsFor: 'singleton' stamp: 'StephaneDucasse 1/28/2011 15:16' prior: 17586849! askForDefault "self askForDefault" self registeredClasses isEmpty ifTrue: [self inform: 'There are no ', self appName, ' applications registered.'. ^ default := nil]. self registeredClasses size = 1 ifTrue: [^ default := self registeredClasses anyOne]. ^Smalltalk globals at: #UIManager ifPresent: [:class | self chooseAppWithUI] ifAbsent: [| stream | stream := WriteStream with: 'You have to choose a Class by using ''#chooseApp: index:'''. stream nextPut: Character cr. self registeredClasses doWithIndex: [:class :index | stream nextPutAll: index asString; nextPutAll: ' - '; nextPutAll: class name asString; nextPut: Character cr]. self inform: stream contents. default := nil]! ! !AppRegistry class methodsFor: 'private' stamp: 'SeanDeNigris 9/15/2010 01:24' prior: 17588590! askForNewDefaultOnNextRequest default := nil.! ! !AppRegistry class methodsFor: 'private' stamp: 'StephaneDucasse 1/28/2011 15:16' prior: 17588725! chooseApp: anIndex ^default := self registeredClasses at: anIndex ifAbsent: [nil]! ! !AppRegistry class methodsFor: 'ui' stamp: 'BenjaminVanRyseghem 2/22/2012 14:41' prior: 48646644! chooseAppWithUI default := UIManager default chooseFrom: (self registeredClasses collect: [:c | c name]) values: self registeredClasses title: ('Which ' , self appName, ' would you prefer?') translated. default ifNil: [default := self registeredClasses first]. WorldState defaultWorldMenu. ^ default.! ! !AppRegistry class methodsFor: 'cleanup' stamp: 'StephaneDucasse 3/9/2010 16:16' prior: 17585298! cleanUp "AppRegistry cleanUp" self removeObsolete.! ! !AppRegistry class methodsFor: 'singleton' stamp: 'ads 3/29/2003 13:11' prior: 17588049! default ^ default ifNil: [self askForDefault]! ! !AppRegistry class methodsFor: 'singleton' stamp: 'BenjaminVanRyseghem 2/24/2012 15:51' prior: 17588189! default: aClassOrNil "Sets my default to aClassOrNil. Answers the old default." | oldDefault | oldDefault := default. aClassOrNil ifNotNil: [ self register: aClassOrNil ]. default := aClassOrNil. ^ oldDefault! ! !AppRegistry class methodsFor: 'singleton' stamp: 'nk 3/9/2004 12:35' prior: 17588481! defaultOrNil ^ default! ! !AppRegistry class methodsFor: 'registering' stamp: 'SeanDeNigris 9/15/2010 01:25' prior: 17586125! register: aProviderClass (self registeredClasses includes: aProviderClass) ifTrue: [ ^ self ]. self askForNewDefaultOnNextRequest. "if you're registering a new app you probably want to use it" self registeredClasses add: aProviderClass.! ! !AppRegistry class methodsFor: 'registering' stamp: 'ads 3/29/2003 13:01' prior: 17586447! registeredClasses ^ registeredClasses ifNil: [registeredClasses := OrderedCollection new]! ! !AppRegistry class methodsFor: 'cleanup' stamp: 'StephaneDucasse 1/30/2011 21:35' prior: 17585439! removeObsolete "AppRegistry removeObsolete" self registeredClasses copy do:[:cls| (cls class isObsolete or:[cls isBehavior and:[cls isObsolete]]) ifTrue:[self unregister: cls]]. self subclasses do:[:cls| cls removeObsolete].! ! !AppRegistry class methodsFor: 'cleanup' stamp: 'StephaneDucasse 1/30/2011 21:38' prior: 17585761! reset "AppRegistry reset" registeredClasses := nil.! ! !AppRegistry class methodsFor: 'registering' stamp: 'ads 3/29/2003 13:03' prior: 17586617! unregister: aProviderClass (default = aProviderClass) ifTrue: [default := nil]. self registeredClasses remove: aProviderClass ifAbsent: [].! ! !AppRegistry methodsFor: 'notes' stamp: 'ads 4/2/2003 15:04' prior: 17584603! seeClassSide "All the code for AppRegistry is on the class side."! ! !SoundService commentStamp: '' prior: 68698129! This is class is deprecated.! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 11:26' prior: 46672103! soundEnabled self deprecated: 'Use SoundSystem current soundEnabled' on: '$ August 2013' in: 'Pharo30'. ^ SoundSystem current soundEnabled! ! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 11:26' prior: 46672349! soundEnabled: aBoolean self deprecated: 'Use SoundSystem current soundEnabled: aBoolean' on: '$ August 2013' in: 'Pharo30'. SoundSystem current soundEnabled: aBoolean! ! !SoundService class methodsFor: 'settings' stamp: 'StephaneDucasse 8/4/2013 12:03' prior: 46672625! toggleSoundEnabling self deprecated: 'Use SoundSystem current instaed' on: '$ August 2013' in: 'Pharo30'. self soundEnabled: self soundEnabled not! ! !Workspace methodsFor: 'file support' stamp: 'MarcusDenker 9/24/2013 14:16' prior: 54950651! suggestedFileName "If the workspace has an associated fileName use that, otherwise derive a reasonable file-name from the window label" | suggestedName lastIndex | self fileName ifNotNil: [ :f | ^ f ]. ^ (self containingWindow ifNil: ['Untitled'] ifNotNilDo: [ :window | window label ]), '.ws'! ! MailMessage removeSelector: #selfTest! Form removeSelector: #size! "Deprecated30"! "Graphics-Display Objects"! "Graphics-Files"! "Graphics-Fonts"! "Network-Mail"! "Network-Url"! "RecentSubmissions"! "SUnit-Utilities"! "Spec-Tools"! "System-Applications"! "Tools"! ----End fileIn----! ----QUIT----an Array(24 September 2013 7:45:24 pm) Pharo.image priorSource: 18352470! ----STARTUP----an Array(24 September 2013 7:51:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 September 2013 7:51:32 pm) Pharo-30422.image priorSource: 18383133! ----STARTUP----an Array(26 September 2013 8:51:25 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/26/2013 08:47' prior: 68684429! commentForCurrentUpdate ^ '11676 A user with no save right should not be asked https://pharo.fogbugz.com/f/cases/11676 11666 ClassOrganization>>ownCategories missing https://pharo.fogbugz.com/f/cases/11666 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/26/2013 08:47'! script102 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.529.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1619.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.119.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.408.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.388.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.94.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.249.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1269.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.570.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/26/2013 08:48'! update30423 "self new update30423" self withUpdateLog: '11676 A user with no save right should not be asked https://pharo.fogbugz.com/f/cases/11676 11666 ClassOrganization>>ownCategories missing https://pharo.fogbugz.com/f/cases/11666 '. self loadTogether: self script102 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'PavelKrivanek 9/24/2013 14:19'! ownCategories "get all categories that are not obtained from traits. Order is random" | traitsCategories | traitsCategories := self subject traits inject: Set new into: [:set :trait | set addAll: (trait organization protocolOrganizer protocols reject: [ :eachProtocol | self subject methods anySatisfy: [ :eachMethod | eachMethod origin = self subject and: [ eachMethod protocol = eachProtocol name ] ] ]). set ]. ^ ((self protocolOrganizer protocols collect: #name) copyWithoutAll: (traitsCategories collect: #name)) asArray.! ! !WorldState class methodsFor: 'world menu items' stamp: 'BenjaminVanRyseghem 9/25/2013 12:24' prior: 38070429! quitSession | save | Smalltalk tools userManager canSaveImage ifFalse: [ save := false ] ifTrue: [ save := (self confirm: 'Save changes before quitting?' translated orCancel: [ ^ self ]) ]. Cursor write showWhile: [ Smalltalk snapshot: save andQuit: true. ]! ! !StringMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/25/2013 12:26' prior: 39516884! enabled: aBoolean aBoolean ifTrue: [ self color: self defaultColor ] ifFalse: [ self color: Color lightGray ]! ! "ClassOrganizer-Core"! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(26 September 2013 8:51:35 am) Pharo.image priorSource: 18383342! ----STARTUP----an Array(26 September 2013 8:57:48 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 September 2013 8:57:48 am) Pharo-30423.image priorSource: 18395970! ----STARTUP----an Array(26 September 2013 4:18:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/26/2013 16:15' prior: 68715300! commentForCurrentUpdate ^ '11684 Make Compiler unloadable part 1 https://pharo.fogbugz.com/f/cases/11684 11685 Make Compiler unloadable part 2 https://pharo.fogbugz.com/f/cases/11685 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/26/2013 16:16'! script103 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.532.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1622.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.119.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.411.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.159.mcz Spec-Debugger-MarcusDenker.123.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.94.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.249.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.914.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1269.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/26/2013 16:16'! update30424 "self new update30424" self withUpdateLog: '11684 Make Compiler unloadable part 1 https://pharo.fogbugz.com/f/cases/11684 11685 Make Compiler unloadable part 2 https://pharo.fogbugz.com/f/cases/11685 '. self loadTogether: self script103 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/12/2013 11:46' prior: 37351397! compiler ^self methodClass ifNil: [Smalltalk compiler] ifNotNil: [:class | class compiler].! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 2/4/2013 16:01' prior: 19768878! compilerClass ^self methodClass ifNil: [Smalltalk compilerClass] ifNotNil: [:class | class compilerClass].! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/5/2013 21:26' prior: 36913029! decompile "Return the decompiled parse tree that represents self" ^self class compiler decompileMethod: self.! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/10/2013 12:54' prior: 37251435! decompileString ^self decompile formattedCode! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 5/2/2013 17:14' prior: 36365706! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 8/28/2013 10:45' prior: 49540254! methodNode "Return the parse tree that represents self" | aClass source methodNode | aClass := self methodClass. source := self sourceCode. methodNode := aClass compiler parse: source. methodNode source: source. ^methodNode. ! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/29/2013 17:11' prior: 36051897! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'CamilloBruni 2/17/2012 14:33' prior: 35885620! recompile ^ self methodClass recompile: self selector! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/27/2013 00:11' prior: 35900500! reformat self methodClass compile: self ast formattedCode classified: self category.! ! !InstructionStream class methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 7/22/2013 16:09' prior: 46128213! compiler "The JIT compiler needs to trap all reads to instance variables of contexts. As this check is costly, it is only done in the long form of the bytecodes, which are not used often. In this hierarchy we force the compiler to alwasy generate long bytecodes" ^super compiler options: #(+ optionLongIvarAccessBytecodes)! ! !Behavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/5/2013 17:16' prior: 44347572! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^self superclass bindingOf: varName! ! !Behavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/16/2013 17:05' prior: 45365370! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method newMethod | method := oldClass compiledMethodAt: selector. newMethod := self compiler source: (oldClass sourceCodeAt: selector); class: self; failBlock: [^ self]; compiledMethodTrailer: method trailer; compile. "Assume OK after proceed from SyntaxError" selector == newMethod selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: newMethod.! ! !ContextPart class methodsFor: '*Compiler-Kernel' stamp: 'eem 6/19/2008 10:00' prior: 20215257! isContextClass ^true! ! !Object class methodsFor: 'instance creation' stamp: 'MarcusDenker 5/2/2013 11:24' prior: 36352408! readFrom: textStringOrStream "Create an object based on the contents of textStringOrStream." | object | object := self class compiler evaluate: textStringOrStream. (object isKindOf: self) ifFalse: [self error: self name, ' expected']. ^object! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44790027! binding ^ nil -> self! ! !TBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/5/2013 17:17' prior: 44341319! bindingOf: varName ^self explicitRequirement.! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44790529! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 9/5/2013 15:44' prior: 50323088! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 9/5/2013 15:39' prior: 50323517! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44794883! compileAll ^ self compileAllFrom: self! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44795305! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44792065! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44795960! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44789684! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44795082! evaluate: aString ^self compiler evaluate: aString! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44792705! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44790192! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44798812! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/16/2013 17:05' prior: 45367114! recompile: selector from: oldClass ^self explicitRequirement.! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44796307! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 44797000! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !TraitBehavior methodsFor: 'accessing instances and variables' stamp: 'SebastianTleye 7/1/2013 17:54' prior: 44028079! bindingOf: varName "Answer the binding of some variable resolved in the scope of the receiver" ^ self environment bindingOf: varName asSymbol.! ! !TraitBehavior methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 9/5/2013 13:27' prior: 50215311! recompile: selector from: oldClass "Compile the method associated with selector in the receiver's method dictionary." | method methodNode | method := oldClass compiledMethodAt: selector. methodNode := self compiler source: (oldClass sourceCodeAt: selector); failBlock: [^ self]; translate. selector == methodNode selector ifFalse: [self error: 'selector changed!!']. self basicAddSelector: selector withMethod: (methodNode generate: method trailer). ! ! !UndefinedObject methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 4/29/2013 17:12' prior: 36059504! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^ self class compilerClass! ! !String methodsFor: '*Slot' stamp: 'BenjaminVanRyseghem 11/24/2010 14:41' prior: 51020027! inviolateInstanceVariableNames "Answer a list of instance variable names not to be used. (Place holder for real list)" ^ #('thisContext' 'self')! ! !String methodsFor: '*Slot' stamp: 'MartinDias 6/24/2013 15:15' prior: 41556032! isLegalClassName "Answer whether aString is a legal class name." ^ [Smalltalk classBuilder validateClassName: self asSymbol] on: Error do: [^ false] ! ! !String methodsFor: '*Slot' stamp: 'BenjaminVanRyseghem 11/24/2010 14:41' prior: 51020495! isLegalInstVarName "Answer whether aString is a legal instance variable name." ^ ((self isLiteralSymbol) and: [(self includes: $:) not]) and: [(self inviolateInstanceVariableNames includes: self) not]! ! !Trait method! binding ^ nil -> self! ! !Trait method! binding ^ nil -> self! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! compile: code "Compile the argument, code, as source code in the context of the receiver. Create an error notification if the code can not be compiled. The argument is either a string or an object that converts to a string or a PositionableStream on an object that converts to a string." ^self compile: code notifying: nil! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compile: code notifying: requestor "Compile the argument, code, as source code in the context of the receiver and insEtall the result in the receiver's method dictionary. The second argument, requestor, is to be notified if an error occurs. The argument code is either a string or an object that converts to a string or a PositionableStream. This method also saves the source code." | method | method := self compiler source: code; requestor: requestor; failBlock: [ ^nil ]; compile. method putSource: code inFile: 2 withPreamble: [:f | f cr; nextPut: $!!; nextChunkPut: 'Behavior method'; cr]. self addSelector: method selector withMethod: method notifying: requestor. ^ method selector! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !Trait method! compileAll ^ self compileAllFrom: self! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass selectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compiler "Answer a compiler appropriate for source methods of this class." ^self compilerClass new environment: self environment; class: self! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! compilerClass "Answer a compiler class appropriate for source methods of this class." ^Smalltalk compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! evaluate: aString ^self compiler evaluate: aString! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! recompile: selector "Compile the method associated with selector in the receiver's method dictionary." ^self recompile: selector from: self! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! recompileChanges "Compile all the methods that are in the changes file. This validates sourceCode and variable references and forces methods to use the current bytecode set" self selectorsAndMethodsDo: [:sel :meth | meth fileIndex > 1 ifTrue: [self recompile: sel from: self]]! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! !Trait method! sourceCodeTemplate "Answer an expression to be edited and evaluated in order to define methods in this class or trait." ^'message selector and argument names "comment stating purpose of message" | temporary variable names | statements'! ! "Compiler"! "Kernel"! "OpalCompiler-Core"! "Slot"! "Traits"! ----End fileIn----! ----QUIT----an Array(26 September 2013 4:18:22 pm) Pharo.image priorSource: 18396179! ----STARTUP----an Array(26 September 2013 4:24:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 September 2013 4:24:25 pm) Pharo-30424.image priorSource: 18424627! ----STARTUP----an Array(27 September 2013 10:34:48 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(27 September 2013 10:34:53 am) Pharo.image priorSource: 18424836! ----STARTUP----an Array(27 September 2013 10:41:06 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 September 2013 10:41:06 am) Pharo-30424.image priorSource: 18425056! ----STARTUP----an Array(27 September 2013 11:01:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/27/2013 10:59' prior: 68728137! commentForCurrentUpdate ^ '11688 Pharo Kernel shrinking update for 30424 https://pharo.fogbugz.com/f/cases/11688 11689 Spec Inspectors still let update process in some circumstances https://pharo.fogbugz.com/f/cases/11689 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/27/2013 10:59'! script104 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.532.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1622.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.119.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.411.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.161.mcz Spec-Debugger-MarcusDenker.125.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.96.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1269.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/27/2013 10:59'! update30425 "self new update30425" self withUpdateLog: '11688 Pharo Kernel shrinking update for 30424 https://pharo.fogbugz.com/f/cases/11688 11689 Spec Inspectors still let update process in some circumstances https://pharo.fogbugz.com/f/cases/11689 '. self loadTogether: self script104 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'ClementBera 9/26/2013 17:25' prior: 45951808! debugAction | currentDebugger | currentDebugger := self debugger. self debugger: nil. self abandonAction. currentDebugger openWithSpec; updateToolbar; resetAutoRefresh; label: title! ! !ComposableModel methodsFor: 'testing' stamp: 'ClementBera 9/26/2013 17:36'! hasWindow "Answers true if there is an open window using this model." self owner ifNil: [ ^ self window ifNotNil: [ :w | w isClosed not ] ifNil: [ false ] ]. ^ self owner hasWindow! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'ClementBera 9/26/2013 17:38'! updateTime "time in which the inspector updates the object" ^ 1.5 second! ! !SpecProxyDebugger methodsFor: 'notifier menu' stamp: 'ClementBera 9/26/2013 17:19' prior: 45918592! spawnSpecDebugger | topView | topView := self topView. topView model: nil. "so close won't release me." self breakDependents. topView delete. (self debuggerClass debugSession: ((self debuggerClass spanNewSessionForContext: self interruptedContext fromProcess: self interruptedProcess) errorWasInUIProcess: errorWasInUIProcess)) updateToolbar ! ! !WindowModel methodsFor: 'testing' stamp: 'ClementBera 9/26/2013 15:45'! isClosed ^ isClosedHolder contents! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBera 9/26/2013 17:34' prior: 68587282! dive ^ self owner ifNotNil: [ :o | "nil in case of basicInspect" [ (o respondsTo: #dive) "does not respond if owner is SpecDebugger" ifTrue: [ o dive ] ] ]! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 9/26/2013 15:49' prior: 36492548! initializeAutoRefresh refreshLoop := self useAutoRefresh ifTrue: [ [ self refresh. self hasWindow ifFalse: [ refreshLoop terminate ] ] valueWithInterval: self updateTime ]! ! !EyeInspector methodsFor: 'initialize-release' stamp: 'ClementBera 9/26/2013 17:29'! resetAutoRefresh "autoRefresh is disabled when the inspector has no window. If by any chance another window on the same inspector is shown after killing the previous window, call this method to restart the refreshProcess." refreshLoop ifNotNil: [ :updateProcess | updateProcess isTerminated ifTrue: [ self initializeAutoRefresh ] ]! ! !EyeMorphViewer methodsFor: 'initialization' stamp: 'ClementBera 9/26/2013 17:38' prior: 68640439! initializeWidgets super initializeWidgets. self whenWindowChanged: [ self objectChanged ]. updateProcess := [ self objectChanged. self hasWindow ifFalse: [ updateProcess terminate ] ] valueWithInterval: self updateTime.! ! !SystemNavigation methodsFor: 'packages' stamp: 'ClementBera 4/11/2013 14:03' prior: 34646614! removeAllButPackages: packagesList "Remove all classes and methods that do not belong to some of listed packages. Skip #unload. Do not use this method if you can use Monticello!! This method is used by some low-level shrinking process. Do not use it. This is quite hackish" | keep remove oldRemove extensionCategories | keep := Set new. packagesList do: [:pkg | keep addAll: (self allClassesInPackageNamed: pkg)]. oldRemove := Set new. [ remove := Smalltalk globals allClassesAndTraits reject: [:c | keep includes: c]. remove := remove collect: [:c | c name]. (remove asSortedCollection: [:a :b | a <= b ]) do: [:className | | class | class := (Smalltalk globals classOrTraitNamed: className). class allSubclasses ifEmpty: [ SystemAnnouncer uniqueInstance unsubscribe: class. class isTrait ifFalse: [ (class class includesSelector: #unload) ifTrue: [ class removeSelector: #unload ] ]. class removeFromSystem. ] ]. oldRemove ifNotEmpty: [ oldRemove = remove ifTrue: [ self error: 'Some classes still have subclasses: ', (remove collect: [:c | c -> (Smalltalk classOrTraitNamed: c) allSubclasses]) asString ] ]. oldRemove := remove. remove notEmpty] whileTrue. keep do: [: class | extensionCategories := (class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | | protocol | protocol := class organization protocolOrganizer getProtocolNamed: category. (protocol methods intersection: class localSelectors) do: [:sel | class removeSelector: sel ]. "class removeProtocol: category" ]. class isTrait ifFalse: [ extensionCategories := (class class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | | protocol | protocol := class class organization protocolOrganizer getProtocolNamed: category. (protocol methods intersection: class class localSelectors) do: [:sel | class class removeSelector: sel ]. "class class removeProtocol: category" ]]]. ! ! !SmalltalkImage methodsFor: 'PharoKernel' stamp: 'PavelKrivanek 9/26/2013 16:58' prior: 48562115! kernelPackageNames ^ #('AST-Core' 'Announcements-Core' 'Announcements-Core' 'Collections-Abstract' 'Collections-Arithmetic' 'Collections-Arrayed' 'Collections-Atomic' 'Collections-Native' 'Collections-Sequenceable' 'Collections-Stack' 'Collections-Streams' 'Collections-Strings' 'Collections-Support' 'Collections-Text' 'Collections-Traits' 'Collections-Unordered' 'Collections-Weak' 'Compiler' 'Compression' 'Files' 'Graphics-Display Objects' 'Graphics-Primitives' 'Graphics-Transformations' 'Kernel' 'Multilingual-Encodings' 'Multilingual-Languages' 'Multilingual-TextConversion' 'System-Changes' 'System-CommandLine' 'System-Clipboard' 'System-FileRegistry' 'System-Finalization' 'System-Localization' 'System-Object Events' 'System-Platforms' 'System-Support' 'Text-Core' 'Traits' 'UIManager' 'Transcript' 'FileSystem-AnsiStreams' 'FileSystem-Core' 'FileSystem-Disk' 'FileSystem-Memory' 'CodeImport' 'Regex-Core' 'SystemProgress' 'System-Announcements' 'Ring-Core-Kernel' 'Ring-Core-Containers' 'System-PragmaCollector' 'OpalCompiler-Core' 'ClassOrganizer-Core')! ! !SpecDebugger methodsFor: 'actions' stamp: 'ClementBera 9/26/2013 17:10' prior: 46058862! close self removeActionsForSession: self session. "No more code should follow after this, as the session might terminate this process." self session ifNotNil: [ :aSession | aSession terminate]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 9/26/2013 17:07' prior: 45970095! initializePresenter super initializePresenter. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ] ]. self stack whenSelectedItemChanged: [:aContext | self updateToolbarFromContext: aContext. self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext. self updateStackFromSelectedContext ]. self contextInspector initializeAutoRefresh.! ! !SpecDebugger methodsFor: 'opening' stamp: 'ClementBera 9/26/2013 17:22' prior: 45973075! openFullNoSuspendLabel: aString "Create and schedule a full debugger with the given label. Do not terminate the current active process." self openWithSpec; updateToolbar; label: aString. self flag: 'Would ne better to move this into the session'. self session errorWasInUIProcess: (UIManager default spawnNewProcessIfThisIsUI: self interruptedProcess) "errorWasInUIProcess := UIManager default spawnNewProcessIfThisIsUI: interruptedProcess"! ! !SpecDebugger methodsFor: 'initialization' stamp: 'ClementBera 9/26/2013 17:27'! resetAutoRefresh "autoRefresh is disabled when the inspector has no window, which is the case when the pre debugger is shown. Therefore, clicking on debug in the predebug window reset the autoRefresh process." self receiverInspector inspector resetAutoRefresh. self contextInspector resetAutoRefresh.! ! !SpecDebugger methodsFor: 'updating' stamp: 'ClementBera 9/26/2013 17:09' prior: 45977373! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver inspector.! ! EyeInspector removeSelector: #updateTime! EyeInspector removeSelector: #initialize! EyeInspector removeSelector: #close! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-Widgets"! "System-Support"! ----End fileIn----! ----QUIT----an Array(27 September 2013 11:01:19 am) Pharo.image priorSource: 18425267! ----STARTUP----an Array(27 September 2013 11:07:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 September 2013 11:07:21 am) Pharo-30425.image priorSource: 18445218! ----STARTUP----an Array(28 September 2013 10:38:40 am) as /Users/denker/Desktop/30425/Pharo-30425.image! ----SNAPSHOT----an Array(28 September 2013 10:39:06 am) Pharo-30425.image priorSource: 18445429! ----QUIT/NOSAVE----an Array(28 September 2013 10:39:36 am) Pharo-30425.image priorSource: 18445634! ----STARTUP----an Array(28 September 2013 10:49:46 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/27/2013 15:06' prior: 68757227! commentForCurrentUpdate ^ '11691 Failing test: testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/11691 11693 Spec building is taking ages due to changes in PragmaCollector https://pharo.fogbugz.com/f/cases/11693'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/27/2013 15:06'! script105 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.532.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1622.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.119.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.542.mcz NautilusCommon-MarcusDenker.165.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.163.mcz Spec-Debugger-MarcusDenker.125.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.96.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1269.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/27/2013 15:06'! update30426 "self new update30426" self withUpdateLog: '11691 Failing test: testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/11691 11693 Spec building is taking ages due to changes in PragmaCollector https://pharo.fogbugz.com/f/cases/11693'. self loadTogether: self script105 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecPragmaCollector methodsFor: 'system changes' stamp: 'EstebanLorenzano 9/27/2013 12:15'! installSystemNotifications "We do not need to register anything for spec, and if we do it will make it really slow"! ! !Trait method! visitThisContextAccess: aThisContextAccess! ! IRVisitor removeSelector: #visitThisContextAccess:! !Trait method! visitTempVector: aTempVector! ! IRVisitor removeSelector: #visitTempVector:! !Trait method! visitTempAccess: aTempAccess! ! IRVisitor removeSelector: #visitTempAccess:! !Trait method! visitSend: aSend! ! IRVisitor removeSelector: #visitSend:! !Trait method! visitReturn: aReturn! ! IRVisitor removeSelector: #visitReturn:! !Trait method! visitRemoteTempAccess: aRemoteTempAccess! ! IRVisitor removeSelector: #visitRemoteTempAccess:! !Trait method! visitReceiverAccess: aReceiverAccess! ! IRVisitor removeSelector: #visitReceiverAccess:! !Trait method! visitPushLiteral: aPushLiteral! ! IRVisitor removeSelector: #visitPushLiteral:! !Trait method! visitPushDup: aPushDup! ! IRVisitor removeSelector: #visitPushDup:! !Trait method! visitPushClosureCopy: aPushClosureCopy! ! IRVisitor removeSelector: #visitPushClosureCopy:! !Trait method! visitPushArray: aPushArray! ! IRVisitor removeSelector: #visitPushArray:! !Trait method! visitPop: aPop! ! IRVisitor removeSelector: #visitPop:! !Trait method! visitLiteralVariableAccess: aLiteralVariableAccess! ! IRVisitor removeSelector: #visitLiteralVariableAccess:! !Trait method! visitJumpIf: aJumpIf! ! IRVisitor removeSelector: #visitJumpIf:! !Trait method! visitJump: aJump! ! IRVisitor removeSelector: #visitJump:! !Trait method! visitInstVarAccess: anInstVarAccess! ! IRVisitor removeSelector: #visitInstVarAccess:! !Trait method! visitBlockReturnTop: aBlockReturnTop! ! IRVisitor removeSelector: #visitBlockReturnTop:! "OpalCompiler-Core"! "Spec-Core"! ----End fileIn----! ----QUIT----an Array(28 September 2013 10:49:55 am) Pharo.image priorSource: 18445634! ----STARTUP----an Array(28 September 2013 10:55:55 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 September 2013 10:55:55 am) Pharo-30426.image priorSource: 18458714! ----STARTUP----an Array(28 September 2013 3:13:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/28/2013 15:09' prior: 68777695! commentForCurrentUpdate ^ '11700 Small code critics cleanup in Tools https://pharo.fogbugz.com/f/cases/11700 11697 Small code critics cleanup Nautilus+Nautilus common https://pharo.fogbugz.com/f/cases/11697 11696 Small kernel clean up https://pharo.fogbugz.com/f/cases/11696'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/28/2013 15:10'! script106 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1624.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.119.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.91.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.921.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.163.mcz Spec-Debugger-MarcusDenker.125.mcz Spec-Examples-MarcusDenker.42.mcz Spec-Inspector-MarcusDenker.96.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-StephaneDucasse.104.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1271.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/28/2013 15:10'! update30427 "self new update30427" self withUpdateLog: '11700 Small code critics cleanup in Tools https://pharo.fogbugz.com/f/cases/11700 11697 Small code critics cleanup Nautilus+Nautilus common https://pharo.fogbugz.com/f/cases/11697 11696 Small kernel clean up https://pharo.fogbugz.com/f/cases/11696'. self loadTogether: self script106 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Process commentStamp: 'IgorStasenko 11/7/2011 11:25' prior: 42563054! I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced partly using the value of priority. (If anyone ever makes a subclass of Process, be sure to use allSubInstances in anyProcessesAbove:.) Process-specific storage: An old implementation using #environmentAt: [ifAbsent:/put:] protocol are no longer supported. One must not use a process-specific storage (PSS) methods directly, and instead use ProcessSpecificVariable (or subclass) instances to access process-specific storage. A new implemention is a revision towards making an access to PSS faster. When new instance of ProcessSpecificVariable are created, it obtains an unique index, which is registered using #allocatePSKey: (see class side). This allows to dynamically create as many process-specific variables as needed, and access them in fast manner via simple array index (instead of dictionary lookup, as in previous implementation). Another important aspect of new implementation is that all values in PSS are held weakly. This is done to prevent accidental memory leaks as well as no need to manually unregistering a process-specific keys , once they are no longer in use.! !BasicInspector methodsFor: 'initialization' stamp: 'CamilloBruni 2/28/2012 11:44' prior: 17996471! inspect: anObject "Initialize the receiver so that it is inspecting anObject." self initialize. object := anObject. selectionIndex := 1. contents := ''! ! !CategoryWidget methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:02' prior: 36757555! loadPackagesCategoriesInARestrictedEnvironment: env for: class ^ self sortCategories: (model browsedEnvironment protocolsFor: class) forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:03' prior: 36757849! loadPackagesCategoriesInSystemEnvironmentFor: class ^ self sortCategories: class protocols forClass: class! ! !CategoryWidget methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:04' prior: 42025237! sortCategories: allProtocols forClass: class firstInPackage: currentPackage "List the protocols in this order: 1. the -- all -- category 2. the extension protocols of the given package 3. the extension protocols 4. the normal protocols" | sortBlock currentPackageProtocols otherProtocols | currentPackageProtocols := allProtocols reject: [ :protocolName | protocolName beginsWith: '*' ]. "Filter out the existing protocols so that we can sort them later separately" otherProtocols := allProtocols difference: currentPackageProtocols. sortBlock := [ :a :b | (a compare: b caseSensitive: false) = 1 ]. ^ (currentPackageProtocols sort: sortBlock), (otherProtocols sort: sortBlock)! ! !Rectangle class methodsFor: 'instance creation' stamp: 'ClementBera 9/27/2013 17:50' prior: 32192147! encompassing: listOfPoints "A number of callers of encompass: should use this method." | topLeft bottomRight | topLeft := bottomRight := listOfPoints first. listOfPoints allButFirstDo: [ :p | topLeft := topLeft min: p. bottomRight := bottomRight max: p ]. ^ topLeft corner: bottomRight! ! !BlockStartLocator methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 09:43' prior: 48894898! initialize super initialize. nextJumpIsAroundBlock := false! ! !BlockStartLocator methodsFor: 'instruction decoding' stamp: 'eem 5/31/2008 13:48' prior: 18320789! jump: offset "If this jump is around a block answer the size of that block." nextJumpIsAroundBlock ifTrue: [nextJumpIsAroundBlock := false. ^offset]! ! !BlockStartLocator methodsFor: 'instruction decoding' stamp: 'eem 5/31/2008 13:54' prior: 18321034! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize "Answer the size of the block" ^blockSize! ! !BlockStartLocator methodsFor: 'instruction decoding' stamp: 'eem 5/31/2008 14:16' prior: 18321246! send: selector super: supered numArgs: numberArguments nextJumpIsAroundBlock := #closureCopy:copiedValues: == selector "Don't use nextJumpIsAroundBlock := #(blockCopy: closureCopy:copiedValues:) includes: selector since BlueBook BlockContexts do not have their own temps."! ! !NautilusUI methodsFor: 'shortcuts from text morph' stamp: 'MarcusDenker 9/27/2013 18:05' prior: 37010344! compileSource: aText notifying: aController acceptor accept: aText asString notifying: aController.! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 9/27/2013 18:05' prior: 36761069! removeMethods self selectedClass ifNotNil: [:class | self selectedMethods ifNotEmpty: [:items || scroll needToUpdate | scroll := methodWidget vScrollValue. needToUpdate := self removeMethods: items inClass: class. needToUpdate ifTrue: [ self resetMethodsListSelection. methodWidget updateList ]. (class methods includes: self selectedMethod) ifFalse: [ self selectedMethod: nil ]. self resetMethodsListSelection. methodWidget updateList; vScrollValue: scroll. ]]! ! !OrderedCollectionInspector methodsFor: 'accessing' stamp: 'MikeRoberts 8/23/2011 18:03' prior: 28727839! fieldList object ifNil: [ ^ OrderedCollection new]. "Guard against incomplete object. You can not ask its size." (object instVarAt: 3) "lastIndex" ifNil: [^self baseFieldList]. ^ self baseFieldList , (object size <= (self i1 + self i2) ifTrue: [(1 to: object size) collect: [:i | i printString]] ifFalse: [(1 to: self i1) , (object size-(self i2-1) to: object size) collect: [:i | i printString]]) " OrderedCollection new inspect (OrderedCollection newFrom: #(3 5 7 123)) inspect (OrderedCollection newFrom: (1 to: 1000)) inspect "! ! !OrderedCollectionInspector methodsFor: 'selecting' stamp: 'ClementBera 11/15/2012 09:13' prior: 28728506! replaceSelectionValue: anObject "The receiver has a list of variables of its inspected object. One of these is selected. The value of the selected variable is set to the value, anObject." selectionIndex <= self numberOfFixedFields ifTrue: [^ super replaceSelectionValue: anObject]. object at: self selectedObjectIndex put: anObject! ! !OrderedCollectionInspector methodsFor: 'selecting' stamp: 'ClementBera 11/15/2012 09:13' prior: 28728952! selectedObjectIndex "Answer the index of the inspectee's collection that the current selection refers to." | basicIndex | basicIndex := selectionIndex - self numberOfFixedFields. ^ (object size <= (self i1 + self i2) or: [basicIndex <= self i1]) ifTrue: [basicIndex] ifFalse: [object size - (self i1 + self i2) + basicIndex]! ! !OrderedCollectionInspector methodsFor: 'selecting' stamp: 'ClementBera 11/15/2012 09:14' prior: 28729392! selection "The receiver has a list of variables of its inspected object. One of these is selected. Answer the value of the selected variable." selectionIndex <= self numberOfFixedFields ifTrue: [^ super selection]. ^ object at: self selectedObjectIndex! ! !Exception methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:57' prior: 21330371! tag "Return an exception's tag value." ^ tag ifNil: [ self messageText ] ifNotNil: [ tag ]! ! !Float methodsFor: 'printing' stamp: 'ClementBera 9/27/2013 17:26' prior: 22212878! absPrintExactlyOn: aStream base: base "Print my value on a stream in the given base. Assumes that my value is strictly positive; negative numbers, zero, and NaNs have already been handled elsewhere. Based upon the algorithm outlined in: Robert G. Burger and R. Kent Dybvig Printing Floating Point Numbers Quickly and Accurately ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation June 1996. This version guarantees that the printed representation exactly represents my value by using exact integer arithmetic." | fBase significand exp baseExpEstimate be be1 r s mPlus mMinus scale roundingIncludesLimits d tc1 tc2 fixedFormat decPointCount | self isInfinite ifTrue: [ aStream nextPutAll: 'Float infinity'. ^ self]. fBase := base asFloat. significand := self significandAsInteger. roundingIncludesLimits := significand even. exp := (self exponent - 52) max: MinValLogBase2. baseExpEstimate := (self exponent * fBase reciprocalLogBase2 - 1.0e-10) ceiling. exp >= 0 ifTrue: [be := 1 << exp. significand ~= 16r10000000000000 ifTrue: [r := significand * be * 2. s := 2. mPlus := be] ifFalse: [be1 := be * 2. r := significand * be1 * 2. s := 4. mPlus := be1]. mMinus := be] ifFalse: [(exp = MinValLogBase2) | (significand ~= 16r10000000000000) ifTrue: [r := significand * 2. s := (1 << (exp negated)) * 2. mPlus := 1] ifFalse: [r := significand * 4. s := (1 << (exp negated + 1)) * 2. mPlus := 2]. mMinus := 1]. baseExpEstimate >= 0 ifTrue: [s := s * (base raisedToInteger: baseExpEstimate)] ifFalse: [scale := base raisedToInteger: baseExpEstimate negated. r := r * scale. mPlus := mPlus * scale. mMinus := mMinus * scale]. (r + mPlus > s) | (roundingIncludesLimits & (r + mPlus = s)) ifTrue: [baseExpEstimate := baseExpEstimate + 1] ifFalse: [r := r * base. mPlus := mPlus * base. mMinus := mMinus * base]. (fixedFormat := baseExpEstimate between: -3 and: 6) ifTrue: [decPointCount := baseExpEstimate. baseExpEstimate <= 0 ifTrue: [aStream nextPutAll: ('0.000000' truncateTo: 2 - baseExpEstimate)]] ifFalse: [decPointCount := 1]. [d := r // s. r := r \\ s. (tc1 := (r < mMinus) | (roundingIncludesLimits & (r = mMinus))) | (tc2 := (r + mPlus > s) | (roundingIncludesLimits & (r + mPlus = s)))] whileFalse: [aStream nextPut: (Character digitValue: d). r := r * base. mPlus := mPlus * base. mMinus := mMinus * base. decPointCount := decPointCount - 1. decPointCount = 0 ifTrue: [aStream nextPut: $.]]. tc2 ifTrue: [tc1 not | (tc1 & (r*2 >= s)) ifTrue: [d := d + 1]]. aStream nextPut: (Character digitValue: d). decPointCount > 0 ifTrue: [decPointCount - 1 to: 1 by: -1 do: [:i | aStream nextPut: $0]. aStream nextPutAll: '.0']. fixedFormat ifFalse: [aStream nextPut: $e. aStream nextPutAll: (baseExpEstimate - 1) printString]! ! !ProcessorScheduler class methodsFor: 'background process' stamp: 'ClementBera 9/27/2013 17:53' prior: 50174436! startUp "Install a background process of the lowest possible priority that is always runnable." "Details: The virtual machine requires that there is aways some runnable process that can be scheduled; this background process ensures that this is the case." Smalltalk installLowSpaceWatcher. BackgroundProcess ifNotNil: [BackgroundProcess terminate]. BackgroundProcess := [self idleProcess] newProcess. BackgroundProcess priority: SystemRockBottomPriority. BackgroundProcess name: 'Idle Process'. BackgroundProcess resume. ! ! !Process commentStamp: 'IgorStasenko 11/7/2011 11:25' prior: 68801789! I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced partly using the value of priority. (If anyone ever makes a subclass of Process, be sure to use allSubInstances in anyProcessesAbove:.) Process-specific storage: An old implementation using #environmentAt: [ifAbsent:/put:] protocol are no longer supported. One must not use a process-specific storage (PSS) methods directly, and instead use ProcessSpecificVariable (or subclass) instances to access process-specific storage. A new implemention is a revision towards making an access to PSS faster. When new instance of ProcessSpecificVariable are created, it obtains an unique index, which is registered using #allocatePSKey: (see class side). This allows to dynamically create as many process-specific variables as needed, and access them in fast manner via simple array index (instead of dictionary lookup, as in previous implementation). Another important aspect of new implementation is that all values in PSS are held weakly. This is done to prevent accidental memory leaks as well as no need to manually unregistering a process-specific keys , once they are no longer in use.! !CPUWatcher methodsFor: 'porcine capture' stamp: 'MarcusDenker 9/28/2013 13:50' prior: 50169833! findThePig "tally has been updated. Look at it to see if there is a bad process. This runs at a very high priority, so make it fast" | countAndProcess process | countAndProcess := tally sortedCounts first. countAndProcess key / tally size > self threshold ifFalse: [ ^ self ]. process := countAndProcess value. process == Processor backgroundProcess ifTrue: [ ^ self ]. "idle process? OK" self catchThePig: process! ! !Browser methodsFor: 'message category functions' stamp: 'MarcusDenker 9/28/2013 13:46' prior: 42052937! addCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | labels reject lines oldIndex newName | self okToChange ifFalse: [ ^ self ]. classListIndex = 0 ifTrue: [ ^ self ]. labels := OrderedCollection new. reject := Set new. reject addAll: self selectedClassOrMetaClass organization categories; add: Protocol nullCategory; add: Protocol unclassified. lines := OrderedCollection new. self selectedClassOrMetaClass allSuperclasses do: [ :cls | | cats | cls = Object ifFalse: [ cats := cls organization categories reject: [ :cat | reject includes: cat ]. cats isEmpty ifFalse: [ lines add: labels size. labels addAll: cats. reject addAll: cats ] ] ]. newName := UIManager default chooseOrRequestFrom: labels lines: lines title: 'Add Category'. newName ifNil: [ ^ self ]. newName := newName asSymbol. oldIndex := messageCategoryListIndex. self classOrMetaClassOrganizer addCategory: newName before: (messageCategoryListIndex = 0 ifTrue: [ nil ] ifFalse: [ self selectedMessageCategoryName ]). self changed: #messageCategoryList. self messageCategoryListIndex: (oldIndex = 0 ifTrue: [ self classOrMetaClassOrganizer categories size + 1 ] ifFalse: [ oldIndex ]). self changed: #messageCategoryList! ! !Browser methodsFor: 'drag and drop' stamp: 'MarcusDenker 9/28/2013 13:47' prior: 18449354! changeCategoryForClass: class srcSystemCategory: srcSystemCategorySel atListMorph: dstListMorph internal: internal copy: copyFlag "only move semantic" | newClassCategory success | self flag: #stringSymbolProblem. success := copyFlag ifTrue: [ ^ false ]. newClassCategory := self dstCategoryDstListMorph: dstListMorph. (success := newClassCategory notNil & (newClassCategory ~= class category)) ifTrue: [ class category: newClassCategory. self changed: #classList. internal ifFalse: [ self selectClass: class ] ]. ^ success! ! !Browser methodsFor: 'drag and drop' stamp: 'MarcusDenker 9/28/2013 13:47' prior: 18452856! message: messageSel compileInClass: dstClassOrMeta fromClass: srcClassOrMeta dstMessageCategory: dstMessageCategorySel srcMessageCategory: srcMessageCategorySel internal: internal copySemantic: copyFlag | source messageCategorySel tm success oldOrNoMethod newMethod | source := srcClassOrMeta sourceCodeAt: messageSel. messageCategorySel := dstMessageCategorySel ifNil: [ srcMessageCategorySel ]. self selectClass: dstClassOrMeta theNonMetaClass. (self messageCategoryList includes: messageCategorySel) ifFalse: [ "create message category" self classOrMetaClassOrganizer addCategory: messageCategorySel ]. self selectMessageCategoryNamed: messageCategorySel. tm := self codeTextMorph. tm setText: source. tm setSelection: (0 to: 0). tm hasUnacceptedEdits: true. oldOrNoMethod := srcClassOrMeta compiledMethodAt: messageSel ifAbsent: [ ]. tm accept. "compilation successful?" newMethod := dstClassOrMeta compiledMethodAt: messageSel ifAbsent: [ ]. success := newMethod ~~ nil & (newMethod ~~ oldOrNoMethod). " success ifFalse: [TransferMorph allInstances do: [:e | e delete]]. " success ifTrue: [ copyFlag ifFalse: [ "remove old method in move semantic if new exists" srcClassOrMeta removeSelector: messageSel ]. internal ifTrue: [ self selectClass: srcClassOrMeta ] ifFalse: [ self selectClass: dstClassOrMeta ]. self setSelector: messageSel ]. ^ success! ! !Behavior methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:41' prior: 18014444! methodDict "The method dictionary of a class can be nil when we want to use the #cannotInterpret: hook. Indeed when a class dictionary is nil, the VM sends the message cannotInterpret: to the receiver but starting the look up in the superclass of the class whose method dictionary was nil. Now the system relies that when the message methodDict is sent to a class a method dictionary is returned. In order to prevent the complaints of tools and IDE unaware of this feature, we fool them by providing an empty MethodDictionary. This will hopefully work in most cases, but the tools will loose the ability to modify the behaviour of this behavior. The user of #cannotInterpret: should be aware of this." methodDict ifNil: [^ MethodDictionary new ]. ^ methodDict! ! !Behavior methodsFor: 'accessing class hierarchy' stamp: 'ClementBera 9/27/2013 17:41' prior: 18018638! superclass: aClass "Change the receiver's superclass to be aClass." "Note: Do not use 'aClass isKindOf: Behavior' here in case we recompile from Behavior itself." (aClass isNil or: [aClass isBehavior]) ifTrue: [superclass := aClass. Object flushCache] ifFalse: [self error: 'superclass must be a class-describing object']! ! !PackageTasksPlugin methodsFor: 'announcement' stamp: 'MarcusDenker 9/27/2013 18:06' prior: 29034547! packageSelected: anAnnouncement | package | package := anAnnouncement package. package ifNil: [ tasks removeAll ] ifNotNil: [ tasks := (self systemNavigation allCallsOn: 'flag:' asSymbol) select: [ :m | package includesMethod: m selector ofClass: m methodClass ] ]. self changed: #tasks.! ! !Class methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:42' prior: 41344608! classPool "Answer the dictionary of class variables." classPool ifNil: [ classPool := Dictionary new ]. ^ classPool! ! !Class methodsFor: 'organization' stamp: 'ClementBera 9/27/2013 17:42' prior: 19075012! environment environment ifNil: [^ super environment]. ^ environment! ! !Class methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:43' prior: 19051886! name "Answer the name of the receiver." ^ name ifNil: [ super name ]! ! !Class methodsFor: 'pool variables' stamp: 'ClementBera 9/27/2013 17:44' prior: 41554601! sharedPools "Answer an orderedCollection of the shared pools declared in the receiver." ^ sharedPools ifNil: [ sharedPools := OrderedCollection new ]! ! !Class methodsFor: 'accessing class hierarchy' stamp: 'ClementBera 9/27/2013 17:44' prior: 19053415! subclasses "Answer a Set containing the receiver's subclasses." ^subclasses ifNil: [ #() ] ifNotNil: [ subclasses copy ]! ! !MessageNotUnderstood methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:58' prior: 49097759! messageText "Return an exception's message text." ^ messageText ifNil: [message ifNil: [super messageText] ifNotNil: [ message lookupClass == UndefinedObject ifTrue: ['receiver of "{1}" is nil' translated format: {message selector asString}] ifFalse: [message lookupClass printString, '>>', message selector asString]]]! ! !ClassCommentVersionsBrowser methodsFor: 'basic function' stamp: 'MarcusDenker 9/28/2013 13:50' prior: 19180902! diffedVersionContents "Answer diffed version contents, maybe pretty maybe not" | change class earlier later | (listIndex = 0 or: [ changeList size < listIndex ]) ifTrue: [ ^ '' ]. change := changeList at: listIndex. later := change text. class := self selectedClass. (listIndex == changeList size or: [ class isNil ]) ifTrue: [ ^ later ]. earlier := (changeList at: listIndex + 1) text. ^ TextDiffBuilder buildDisplayPatchFrom: earlier to: later inClass: class prettyDiffs: self showingPrettyDiffs! ! !TransformWithLayoutMorphForMultipleEditors methodsFor: 'geometry' stamp: 'MarcusDenker 9/27/2013 18:07' prior: 53497887! updateSubMorph: newBounds | submorph | self submorphs ifEmpty: [ ^ self ]. submorph := self submorphs first. submorph submorphs ifEmpty: [ ^ self ]. submorph height < newBounds height ifTrue: [ " Growing " submorph height: newBounds height ]. submorph submorphs last height > newBounds height ifTrue: [ | height | " Shrinking " height := submorph submorphs allButLast inject: 0 into: [:sum :e | e height + sum ]. height := height + ( newBounds height ). submorph height: height ]! ! !DummyKeyPressedPlugin methodsFor: 'announcement' stamp: 'MarcusDenker 9/27/2013 18:02' prior: 21021787! keyPressed: anAnnouncement counter := counter +1. self stringMorph contents: 'Keys pressed: ', counter printString! ! !CompiledMethod methodsFor: 'source code management' stamp: 'ClementBera 9/27/2013 17:46' prior: 35833923! putSource: sourceStr inFile: fileIndex withPreamble: preambleBlock "Store the source code for the receiver on an external file. If no sources are available, i.e., SourceFile is nil, then store temp names for decompilation at the end of the method. If the fileIndex is 1, print on *.sources; if it is 2, print on *.changes, in each case, storing a 4-byte source code pointer at the method end." | file remoteString | (SourceFiles isNil or: [ (file := SourceFiles at: fileIndex) isNil ]) ifTrue: [ ^ self becomeForward: (self copyWithSource: sourceStr) ]. Smalltalk assureStartupStampLogged. file setToEnd. preambleBlock value: file. "Write the preamble" remoteString := RemoteString newString: sourceStr onFileNumber: fileIndex toFile: file. file nextChunkPut: ' '. InMidstOfFileinNotification signal ifFalse: [ file flush ]. self setSourcePosition: remoteString position inFile: fileIndex! ! !MethodContext methodsFor: 'accessing' stamp: 'ClementBera 9/27/2013 17:56' prior: 26353746! outerContext "Answer the context within which the receiver is nested." ^closureOrNil ifNotNil: [closureOrNil outerContext]! ! !MethodOveridesAction methodsFor: 'order' stamp: 'MarcusDenker 9/27/2013 18:07' prior: 37892960! privateActionIcon "Return the icon for this action" isOverride ifTrue: [ isOverridden ifTrue: [ result := self buildUpAndDownArrowIcon: method. ^ result key ] ifFalse: [ ^ IconicButton new target: self browser; actionSelector: #arrowUp:; arguments: {method}; labelGraphic: (Smalltalk ui icons iconNamed: #arrowUpIcon); color: Color transparent; helpText: 'Browse overriden message'; extent: 12 @ 12; borderWidth: 0 ] ] ifFalse: [ isOverridden ifTrue: [ ^ IconicButton new target: self browser; actionSelector: #arrowDown:; arguments: {method}; labelGraphic: (Smalltalk ui icons iconNamed: #arrowDownIcon); color: Color transparent; helpText: 'Browse overriding messages'; extent: 12 @ 12; borderWidth: 0 ] ]! ! !ObjectExplorer methodsFor: 'menus' stamp: 'IgorStasenko 9/2/2012 17:05' prior: 28663547! exploreStrongPointers "Open a StrongPointerExplorer on the current selection" Smalltalk tools strongPointerExplorer openOn: self object! ! !ObjectExplorer methodsFor: 'updating' stamp: 'MarcusDenker 3/26/2011 21:57' prior: 28663911! noteNewSelection: x currentSelection := x. self changed: #getCurrentSelection. currentSelection ifNil: [^self]. currentSelection sendSettingMessageTo: self. ! ! !TimeProfiler methodsFor: 'accessing-computed' stamp: 'MarcusDenker 9/28/2013 13:46' prior: 53167394! leaveItems | sons res groups | res := OrderedCollection new. rootMessageTally ifNotNil: [ | dict | dict := IdentityDictionary new: 100. rootMessageTally leavesInto: dict fromSender: nil. res addAll: (dict asOrderedCollection select: [ :node | node tally > self threshold ]) ]. ^ res! ! !TimeProfiler methodsFor: 'accessing-computed' stamp: 'MarcusDenker 9/28/2013 13:46' prior: 53168169! rootTallyItems | res sons groups | res := OrderedCollection new. rootMessageTally ifNotNil: [ sons := rootMessageTally sonsOver: self threshold. groups := sons groupBy: [ :aTally | aTally process ] having: [ :g | true ]. groups do: [ :g | self reportOtherProcesses ifTrue: [ res addAll: g ] ifFalse: [ res addAll: (g asSortedCollection reject: [ :gg | gg process isNil ]) ] ] ]. ^ res! ! !FileListGrid methodsFor: 'accessing' stamp: '' prior: 21905251! parent ^ parent! ! !FileListGrid methodsFor: 'accessing' stamp: '' prior: 21905321! parent: aFileList parent := aFileList! ! !FileListGrid methodsFor: 'accessing' stamp: '' prior: 21905413! rootItems ^ parent fileList! ! !FileListGrid methodsFor: 'accessing' stamp: '' prior: 21905495! rootNodeClassFromItem: anItem ^ FileListGridNode! ! !NautilusPluginManager methodsFor: 'items creation' stamp: 'MarcusDenker 9/27/2013 18:02' prior: 28197564! buildButtonsColumn | column | column := PanelMorph new. column changeTableLayout; listDirection: #topToBottom. { self buildFullUpButton. self buildUpButton. self buildDownButton. self buildFullDownButton} reverse do: [:each | column addMorph: each ]. column vResizing: #spaceFill; width: 24; hResizing: #rigid. ^ column! ! !NautilusPluginManager methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:04' prior: 28204912! fullUp | list selection | list := pluginsList copy. selection := self selectedPlugins. selection reverse doWithIndex: [:idx :count || each | each := list at: idx. pluginsList removeAt: (idx+count-1). pluginsList addFirst: each]. self changed: #getPluginsList. self changed: #allSelections.! ! !NautilusPluginManager methodsFor: 'buttons behavior' stamp: 'MarcusDenker 9/27/2013 18:06' prior: 28195075! removeButtonAction self selectedPlugins reverse do: [:item | self pluginsList remove: item ]. self resetPluginsListSelection. tree deselectAll. tree model setSelection: nil. tree update: #rootNodes! ! !ProtoObject methodsFor: 'reflective operations' stamp: 'ClementBera 9/27/2013 17:52' prior: 48821940! cannotInterpret: aMessage "Handle the fact that there was an attempt to send the given message to the receiver but a null methodDictionary was encountered while looking up the message selector. Hopefully this is the result of encountering a stub for a swapped out class which induces this exception on purpose." "If this is the result of encountering a swap-out stub, then simulating the lookup in Smalltalk should suffice to install the class properly, and the message may be resent." (self class lookupSelector: aMessage selector) ifNotNil: ["Simulated lookup succeeded -- resend the message." ^ aMessage sentTo: self]. "Could not recover by simulated lookup -- it's an error" Error signal: 'MethodDictionary fault'. "Try again in case an error handler fixed things" ^ aMessage sentTo: self! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 9/28/2013 13:48' prior: 49538002! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [ ^ #() ]. "delete trailing period. This should be fixed in the Parser!!" data := aString trimRight: [ :char | char isSeparator or: [ char = $. ] ]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [ dataObjects := Smalltalk compiler evaluate: '{' , data , '}' ] on: SyntaxErrorNotification do: [ :e | self inform: 'Syntax Error: ' , e errorMessage. self contents: e errorCode allButFirst allButLast. ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data) body statements reject: [ :each | each isReturn ]. dataStrings := statements collect: [ :node | String streamContents: [ :strm | node isMessage ifTrue: [ strm nextPut: $( ]. node formattedCode printOn: strm. node isMessage ifTrue: [ strm nextPut: $) ] ] ]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #() ]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third ]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [ resultArray := resultArray collect: [ :expression | | newExp | newExp := expression. dataObjects first withIndexDo: [ :lit :i | newExp := newExp copyReplaceAll: 'data' , i printString with: (dataStrings at: i) ]. newExp , ' --> ' , dataStrings last ] ]. ^ resultArray! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 9/28/2013 13:48' prior: 22129333! constructDictionaryWithMethodFinder: aString "construct dictionary when searching patterns" | result listOfStrings listOfSelectors | result := Dictionary new. listOfStrings := self computeWithMethodFinder: aString. listOfSelectors := listOfStrings collect: [ :each | self findSelector: each ]. self packagesSelection do: [ :class | class methodDict do: [ :method | | index | (index := listOfSelectors indexOf: method selector) = 0 ifFalse: [ | key value receiver receiverString | key := listOfStrings at: index. value := method methodClass. (result includesKey: key) ifTrue: [ (result at: key) add: value ] ifFalse: [ result at: key put: (OrderedCollection new add: value; yourself) ] ] ] ]. self resultDictionary: result! ! !ChangeList methodsFor: 'viewing access' stamp: 'MarcusDenker 9/28/2013 13:49' prior: 18770439! diffedVersionContents "Answer diffed version contents, maybe pretty maybe not" | change class earlier later | (listIndex = 0 or: [ changeList size < listIndex ]) ifTrue: [ ^ '' ]. change := changeList at: listIndex. later := change text. class := change methodClass. (listIndex == changeList size or: [ class isNil ]) ifTrue: [ ^ later ]. earlier := (changeList at: listIndex + 1) text. ^ TextDiffBuilder buildDisplayPatchFrom: earlier to: later inClass: class prettyDiffs: self showingPrettyDiffs! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 17:59' prior: 17352353! addSubclassesOf: aClass in: result withIndex: index fromRestrictedCollection: aCollection | classes | classes := aClass subclasses" intersection: self shownClasses". classes := classes intersection: aCollection. (classes sort: [:a :b| a name <= b name]) do: [:each | result at: each put: index. self addSubclassesOf: each in: result withIndex: index + 1 fromRestrictedCollection: aCollection ]! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 9/27/2013 18:08' prior: 17274346! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton fullFrame: ( ( 0@0 corner: 0.5@0 ) asLayoutFrame bottomRightOffset: (-2)@25 ); addMorph: self buildToggleButton fullFrame: (( 0.5@0 corner: 1@0 ) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25 ); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ firstColumn := PanelMorph new changeProportionalLayout; addMorph: self buildList fullFrame: ( LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ( (0@1 corner: 1@1 ) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:07' prior: 36583060! buildGroupHierarchyFor: aGroup | coll1 | aGroup ifNil: [ ^ SortHierarchically new ]. coll1 := self browsedEnvironment isSystem ifTrue: [ aGroup classes ] ifFalse: [ aGroup classes intersection: self model classes ]. ^ SortHierarchically buildHierarchyForClasses: coll1! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 9/27/2013 18:08' prior: 17275236! buildSecondColumn: aWindow | buttons | buttons := PanelMorph new. buttons changeProportionalLayout; addMorph: self buildInstanceButton fullFrame: ( (0@0 corner: 0.5@0 ) asLayoutFrame bottomRightOffset: -2@25 ); addMorph: self buildCommentButton fullFrame: (( 0.5@0 corner: 1@0 ) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25 ); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ secondColumn := PanelMorph new changeProportionalLayout; addMorph: self buildList2 fullFrame: (LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ( (0@1 corner: 1@1 ) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:01' prior: 17357655! copyMethod: aMethod toTheClass: aClass | newMethod | aMethod realClass = aClass ifTrue: [ ^ self ]. aClass methodDict at: aMethod selector ifPresent: [:sel | " here I have to fork to release the drag & drop " [ (self openDialogWouldYouInstall: sel into: aClass) ifTrue: [ newMethod := aClass compile: aMethod sourceCode classified: aMethod category ]] fork. ] ifAbsent: [ newMethod := aClass compile: aMethod sourceCode classified: aMethod category]! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 9/27/2013 17:59' prior: 17315521! findClass: aSearchInstance "select the class returned by the search block" | aClass | self okToChange ifFalse: [^ self flashPackage ]. aClass := aSearchInstance chooseFromOwner: self window. aClass ifNil: [^ self flashPackage]. self showGroups: false. self selectedPackage: aClass package. self selectedClass: aClass. self updateBothView! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 9/27/2013 18:01' prior: 17316297! findPackage "Search for a package from a pattern or from the recent list" | foundPackage | self okToChange ifFalse: [^ self ]. "packagesList := (self model recentClasses elements collect: [:each | each package name]) asSet asArray sort. foundPackage := self findPackageIn: packagesList. foundPackage ifNil: [ ^ self ]. self selectedPackage = foundPackage ifTrue: [ ^ self ]." foundPackage := SearchFacade rPackageSearch chooseFromOwner: self window. self selectedPackage: foundPackage. self updatePackageViewAndMove. ! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:08' prior: 17359468! getGroupsKeyList | env | env := self browsedEnvironment. ^ env isSystem ifTrue: [ self groupsManager groups ] ifFalse: [ self groupsManager groups reject: [ :g | (g classes intersection: self model classes) isEmpty ] ]! ! !AbstractNautilusUI methodsFor: 'monticello announcements' stamp: 'MarcusDenker 9/27/2013 17:59' prior: 17328878! mcWorkingCopyCreated: anAnnouncement | package rpackage | window ifNil: [^ self ]. window isDisplayed ifFalse: [ ^ self ]. package := anAnnouncement package. package ifNil: [ ^ self ]. rpackage := RPackageOrganizer default packageNamed: package name. (self model packages includes: rpackage) ifTrue: [ PackagesIconsCache removeKey: rpackage ifAbsent: []. self updatePackageView ]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 9/27/2013 18:03' prior: 49715926! moveMethod: aMethod toTheClass: aClass autoRemove: autoRemove aMethod realClass = aClass ifTrue: [ ^ self ]. aClass methodDict at: aMethod selector ifPresent: [:sel | " here I have to fork to release the drag & drop " [ (self openDialogWouldYouInstall: sel into: aClass) ifTrue: [ | originClass oldCategory | oldCategory := aMethod category. originClass := aMethod realClass. aClass compile: aMethod sourceCode classified: oldCategory. self selectedMethod: nil. originClass removeSelector: aMethod selector. autoRemove ifTrue: [ (originClass selectorsInProtocol: oldCategory ) ifEmpty: [ originClass removeProtocol: oldCategory ]]]] fork] ifAbsent: [ | originClass oldCategory | oldCategory := aMethod category. originClass := aMethod realClass. aClass compile: aMethod sourceCode classified: oldCategory. self selectedMethod: nil. originClass removeSelector: aMethod selector. autoRemove ifTrue: [ ( originClass selectorsInProtocol: oldCategory ) ifEmpty: [ originClass removeProtocol: oldCategory ]]]! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'MarcusDenker 9/27/2013 18:08' prior: 17347251! packageChanged: anAnnouncement window isDisplayed ifFalse: [ ^ self ]. self showGroups ifFalse: [ self updatePackageView ]! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'MarcusDenker 9/27/2013 18:08' prior: 17347489! packageCreated: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. self showGroups ifFalse: [ self updatePackageView ]! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 9/27/2013 18:00' prior: 17323300! renameGroup | group | group := self selectedGroup. group ifNil: [ ^ self ]. self groupsManager renameAGroup: group. self updateBothView! ! !AbstractNautilusUI methodsFor: 'icons behavior' stamp: 'MarcusDenker 9/27/2013 18:05' prior: 17296474! saveDirtyPackages: aCollection aCollection isEmptyOrNil ifTrue: [ ^ self ]. aCollection do: [:package || workCopy browser | workCopy := MCWorkingCopy forPackage: (MCPackage named: package name). browser :=MCWorkingCopyBrowser new. browser show; workingCopy: workCopy. "wrap := MCDependentsWrapper with: workCopy model: browser. self halt. index := browser workingCopySelectionWrapper: wrap. browser workingCopyTreeMorph selectionIndex: index"] ! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'MarcusDenker 9/27/2013 18:01' prior: 37890581! testCaseStarted: anAnnouncement | class selector | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement testCase class. selector := anAnnouncement testSelector. self selectedClass = class ifTrue: [| method icon | icon := Smalltalk ui icons iconNamed: #testNotRunIcon. method := class methodNamed: selector. self methodWidget setIcon: icon for: method; updateList ]! ! !Fraction methodsFor: 'testing' stamp: 'ClementBera 9/27/2013 17:38' prior: 22594248! isPowerOfTwo |reduced| reduced := self reduced. ^(reduced numerator = 1 and: [reduced denominator isPowerOfTwo]) or: [reduced denominator = 1 and: [reduced numerator isPowerOfTwo]]! ! !Object methodsFor: 'events-accessing' stamp: 'ClementBera 9/27/2013 17:54' prior: 28614198! setActionSequence: actionSequence forEvent: anEventSelector | action | action := actionSequence asMinimalRepresentation. action ifNil: [self removeActionsForEvent: anEventSelector] ifNotNil: [self updateableActionMap at: anEventSelector asSymbol put: action]! ! !ClassDescription methodsFor: 'filein/out' stamp: 'ClementBera 9/27/2013 17:45' prior: 19223943! definition "Answer a String that defines the receiver." | aStream | aStream := (String new: 800) writeStream. superclass ifNil: [aStream nextPutAll: 'ProtoObject'] ifNotNil: [aStream nextPutAll: superclass name]. aStream nextPutAll: self kindOfSubclass; store: self name. (self hasTraitComposition) ifTrue: [ aStream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString]. aStream cr; tab; nextPutAll: 'instanceVariableNames: '; store: self instanceVariablesString. aStream cr; tab; nextPutAll: 'classVariableNames: '; store: self classVariablesString. aStream cr; tab; nextPutAll: 'poolDictionaries: '; store: self sharedPoolsString. aStream cr; tab; nextPutAll: 'category: '; store: self category asString. superclass ifNil: [ aStream nextPutAll: '.'; cr. aStream nextPutAll: self name. aStream space; nextPutAll: 'superclass: nil'. ]. ^ aStream contents! ! !ContextPart class methodsFor: 'examples' stamp: 'ClementBera 9/27/2013 18:05' prior: 20208512! tallyMethods: aBlock "This method uses the simulator to count the number of calls on each method invoked in evaluating aBlock. Results are given in order of decreasing counts." | prev tallies | tallies := Bag new. prev := aBlock. thisContext sender runSimulated: aBlock contextAtEachStep: [:current | current == prev ifFalse: "call or return" [prev sender ifNotNil: "call only" [tallies add: current printString]. prev := current]]. ^ tallies sortedCounts "ContextPart tallyMethods: [3.14159 printString]"! ! !ContextPart methodsFor: 'system simulation' stamp: 'ClementBera 9/27/2013 17:19' prior: 45200263! completeCallee: aContext "Simulate the execution of bytecodes until a return to the receiver." | context current nextContext | context := aContext. [ context == current or: [ context hasSender: self ] ] whileTrue: [ current := context. nextContext := context quickStep. nextContext ifNil: [ self halt ]. context := nextContext ]. ^ self stepToSendOrReturn! ! !ContextPart methodsFor: 'debugger access' stamp: 'ClementBera 9/27/2013 17:47' prior: 45227129! singleRelease "Remove information from the receiver in order to break circularities." stackp ifNotNil: [ 1 to: stackp do: [ :i | self at: i put: nil ]]. sender := nil. pc := nil. ! ! QSystemTally removeSelector: #initialize! AbstractNautilusUI removeSelector: #buildRightPlugins! AbstractNautilusUI removeSelector: #buildLeftPlugins! Browser removeSelector: #addModelItemsToWindowMenu:! "Compiler"! "Kernel"! "Nautilus"! "NautilusCommon"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 September 2013 3:13:24 pm) Pharo.image priorSource: 18458925! ----STARTUP----an Array(28 September 2013 3:19:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 September 2013 3:19:35 pm) Pharo-30427.image priorSource: 18513552! ----STARTUP----an Array(29 September 2013 9:52:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/29/2013 09:46' prior: 68790884! commentForCurrentUpdate ^ '11703 #debugError: should be implemented on Smalltalk tools debugger, not Smalltalk tools https://pharo.fogbugz.com/f/cases/11703 11702 spelling error transferred https://pharo.fogbugz.com/f/cases/11702 11660 Use specific Spec model methods https://pharo.fogbugz.com/f/cases/11660'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/29/2013 09:47'! script107 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1626.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.122.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.923.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.96.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.107.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1274.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/29/2013 09:47'! update30428 "self new update30428" self withUpdateLog: '11703 #debugError: should be implemented on Smalltalk tools debugger, not Smalltalk tools https://pharo.fogbugz.com/f/cases/11703 11702 spelling error transferred https://pharo.fogbugz.com/f/cases/11702 11660 Use specific Spec model methods https://pharo.fogbugz.com/f/cases/11660'. self loadTogether: self script107 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RadioButtonGroupExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:36' prior: 45586368! initializeWidgets button1 := self newRadioButton. button2 := self newRadioButton. button3 := self newRadioButton. button1 label: 'Button 1'. button2 label: 'Button 2'. button3 label: 'Button 3'. self setFocus. self setGroup. ! ! !ClassMethodBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:28' prior: 19292360! initializeWidgets listModel := self newList. methodModel := self instantiate: MethodBrowser. self focusOrder add: listModel; add: methodModel. methodModel displayBlock: [:method | method selector ].! ! !HTTPProgress methodsFor: 'accessing' stamp: 'MarcusDenker 9/29/2013 09:45' prior: 23146375! beComplete "Make me complete, i.e. indicate that all bytes were transferred." amount := total! ! !Exception methodsFor: 'handling' stamp: 'MarcusDenker 9/29/2013 09:05' prior: 21330818! debug "open a debugger on myself" ^ Smalltalk tools debugger debugError: self! ! !ListSelectionModel methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:36' prior: 24534507! initializeWidgets listModel := self newList. textModel1 := self newText. textModel2 := self newText. listModel beMultipleSelection. listModel items: Smalltalk allClasses.! ! !CheckBoxExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:35' prior: 18985475! initializeWidgets button1 := self newCheckBox. button2 := self newCheckBox. button3 := self newCheckBox. button1 label: 'Button 1'. button2 label: 'Button 2'. button3 label: 'Button 3'. self setFocus.! ! !MorphicUIManager methodsFor: 'ui requests' stamp: 'MarcusDenker 9/29/2013 09:05' prior: 27185213! unhandledErrorDefaultAction: anException "The current computation is terminated. The cause of the error should be logged or reported to the user. If the program is operating in an interactive debugging environment the computation should be suspended and the debugger activated." ^Smalltalk tools debugger debugError: anException.! ! !TabContainerMorph methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:34' prior: 45578994! initialize super initialize. self changeProportionalLayout. container := PanelMorph new changeTableLayout; listDirection: #bottomToTop; color: Color white; yourself. tab := PluggableTabBarMorph on: self. tab width: 150. tab color: Color white darker darker. self addAll.! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:30'! newButton ^ self instantiate: ButtonModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:30'! newCheckBox ^ self instantiate: CheckBoxModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newDialog ^ self instantiate: DialogWindowModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:30'! newDropListBox ^ self instantiate: DropListModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:32'! newIconList ^ self instantiate: IconListModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:30'! newLabel ^ self instantiate: LabelModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:29'! newList ^ self instantiate: ListComposableModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:32'! newMultiColumnList ^ self instantiate: MultiColumnListModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:30'! newRadioButton ^ self instantiate: RadioButtonModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newSlider ^ self instantiate: SliderModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newText ^ self instantiate: TextModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newTextInput ^ self instantiate: TextInputFieldModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newTree ^ self instantiate: TreeModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'CamilloBruni 9/22/2013 21:31'! newWindow ^ self instantiate: WindowModel! ! !TabClassical methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:34' prior: 45597389! initialize super initialize. container := PanelMorph new changeTableLayout; listDirection: #bottomToTop; color: Color white; yourself. tab := PluggableTabBarMorph on: self. tab width: 150.! ! !SpecDebugger class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/29/2013 09:04'! debugError: anError "Handle an otherwise unhandled error" self openOn: Processor activeProcess context: anError signalerContext label: anError description contents: nil fullView: false! ! !DropListExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:35' prior: 39155300! initializeWidgets uniformDropList := self newDropList. heterogeneousDropList := self newDropList. uniformDropList items: {morph1. morph2. morph3}; displayBlock: [ :m | m color name capitalized, ' morph' ]; whenSelectedItemChanged: [ :m | container removeAllMorphs. container addMorph: m ]. heterogeneousDropList addItemLabeled: 'Open workspace' do: [ Workspace open ]; addItemLabeled: 'Inspect current morph' do: [ uniformDropList selectedItem inspect ]. "If this is uncommented, it will fire the action of the first item, which is not what we want: heterogeneousDropList setSelectedIndex: 1. same for: heterogeneousDropList setIndex: 1" self setFocus.! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:34' prior: 68255866! initializeWidgets text := self newText. text announcer when: WidgetBuilt do: [ :builtAnnouncement | builtAnnouncement widget announcer when: PaneScrolling do: [ :scrollAnnouncement | self syncMorphPosition ] ]. text text: self loremIpsum.! ! !WorldState methodsFor: 'worldmenu building' stamp: 'MarcusDenker 9/29/2013 09:00' prior: 41887434! fallbackMenuOn: menu "Build the menu that is put up if something is going wrong with the menubuilder" menu addTitle: 'Fallback menu'. menu commandKeyHandler: self. menu addLine. menu defaultTarget: Smalltalk tools; addList: Smalltalk tools menuItems. menu addLine. menu add: 'Save' target: self class selector: #saveSession. menu add: 'Save as...' target: self class selector: #saveAs. menu add: 'Save and quit' target: self class selector: #saveAndQuit. menu add: 'Quit' target: self class selector: #quitSession.! ! !DynamicWidgetChange methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:33' prior: 36167458! initializeWidgets button := self newButton. bottom := self newList. button label: 'Change'; action: [ self change ]; state: false. bottom items: (1 to: 10) asOrderedCollection.! ! !MethodBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:34' prior: 26335982! initializeWidgets listModel := self newList. textModel := self newText. toolbarModel := self instantiate: MethodToolbar. self focusOrder add: listModel; add: toolbarModel; add: textModel. textModel aboutToStyle: true.! ! !TextFieldExample methodsFor: 'initialization' stamp: 'CamilloBruni 9/22/2013 21:37' prior: 52694749! initializeWidgets methodBrowser := self instantiate: MethodBrowser. textField := self newTextInput. textField ghostText: 'Enter a class name'; autoAccept: true; removeEntryCompletion. methodBrowser sortingBlock: [:a :b | a selector < b selector ]; displayBlock: [:m | m selector ]! ! !Debugger class methodsFor: 'opening' stamp: 'MarcusDenker 9/29/2013 09:01'! debugError: anError "Handle an otherwise unhandled error" ^Processor activeProcess debug: anError signalerContext title: anError description! ! ToolRegistry removeSelector: #openChangeSorter! ToolRegistry removeSelector: #mainMenuItems! ToolRegistry removeSelector: #debugError:! "Kernel"! "Morphic-Base"! "Network-Protocols"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Debugger"! "Spec-Examples"! "System-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(29 September 2013 9:52:29 am) Pharo.image priorSource: 18513761! ----STARTUP----an Array(29 September 2013 9:58:33 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 September 2013 9:58:33 am) Pharo-30428.image priorSource: 18533233! ----STARTUP----an Array(29 September 2013 10:28:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/29/2013 10:24' prior: 68845719! commentForCurrentUpdate ^ '11701 Explore should use new inspector in Tree mode https://pharo.fogbugz.com/f/cases/11701'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/29/2013 10:25'! script108 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1626.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.123.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.923.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.98.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.142.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.231.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.108.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1275.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/29/2013 10:25'! update30429 "self new update30429" self withUpdateLog: '11701 Explore should use new inspector in Tree mode https://pharo.fogbugz.com/f/cases/11701'. self loadTogether: self script108 merge: false. Smalltalk tools remove: #basicInspector. . self flushCaches. ! ! "ScriptLoader30"! !BasicInspector class methodsFor: 'tools registry' stamp: 'MarcusDenker 9/28/2013 16:29' prior: 17996833! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" "registry register: self as: #basicInspector" ! ! !Inspector methodsFor: 'menu commands' stamp: 'MarcusDenker 9/28/2013 16:30' prior: 23662690! inspectBasic "Bring up a non-special inspector" selectionIndex = 0 ifTrue: [^ BasicInspector inspect: object]. BasicInspector inspect: self selection.! ! !Object methodsFor: '*Tools-Explorer' stamp: 'MarcusDenker 9/28/2013 15:39' prior: 28576858! explore ^Smalltalk tools inspector explore: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 9/28/2013 15:49' prior: 41606353! inspect "Create and schedule an Inspector in which the user can examine the receiver's variables." ^ Smalltalk tools inspector inspect: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 9/28/2013 16:26' prior: 41606818! inspectWithLabel: aLabel "Create and schedule an Inspector in which the user can examine the receiver's variables." ^Smalltalk tools inspector inspect: self label: aLabel! ! !Object methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 9/28/2013 16:11' prior: 41607051! inspector ^ Smalltalk tools inspector inspector: self! ! !Object methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 9/28/2013 15:53' prior: 41607191! inspectorClass "Answer the class of the inspector to be used on the receiver. Called by inspect; use basicInspect to get a normal (less useful) type of inspector." ^ Smalltalk tools inspectorClass! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'MarcusDenker 9/28/2013 16:22' prior: 36467223! endSubMenu: aMenu aMenu add: 'Copy name (c)' translated target: self selector: #copyAccessorCode! ! !ToolRegistry methodsFor: 'tools' stamp: 'MarcusDenker 9/28/2013 15:48'! inspector "understand by Object, so we need to work around not getting a DNU" ^self doesNotUnderstand: (Message selector: #inspector)! ! !Morph methodsFor: 'menus' stamp: 'MarcusDenker 9/28/2013 15:50' prior: 49419231! inspectInMorphic: evt Smalltalk tools inspector inspect: self! ! !InspectorNavigator class methodsFor: 'instance creation' stamp: 'MarcusDenker 9/28/2013 15:58'! openExplorer: inspector ^ (self openInspector: inspector) useTreeInspector! ! !InspectorNavigator methodsFor: 'actions' stamp: 'MarcusDenker 9/28/2013 15:31'! useTreeInspector self inspectorType: EyeTreeInspector! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'MarcusDenker 9/28/2013 15:32'! explore: anObject InspectorNavigator openExplorer: (self inspector: anObject). ^ anObject! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'MarcusDenker 9/28/2013 16:26'! inspect: anObject label: aString self flag: #FIXME. "should consider the label here" ^ self inspect: anObject ! ! !EyeInspector methodsFor: 'inspecting' stamp: 'MarcusDenker 9/28/2013 15:40' prior: 36491378! explore: anObject "This is called to open a new ObjectExplorer on the object" ^self class explore: anObject! ! Object removeSelector: #basicInspect! AbstractEyeElement removeSelector: #basicInspectValue! ToolRegistry removeSelector: #inspector:! ToolRegistry removeSelector: #inspect:label:! ToolRegistry removeSelector: #inspect:! ToolRegistry removeSelector: #basicInspect:! "Morphic-Base"! "Spec-Inspector"! "System-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(29 September 2013 10:28:22 am) Pharo.image priorSource: 18533442! ----STARTUP----an Array(29 September 2013 10:34:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 September 2013 10:34:21 am) Pharo-30429.image priorSource: 18547729! ----STARTUP----an Array(29 September 2013 9:03:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/29/2013 20:59' prior: 68865401! commentForCurrentUpdate ^ '11716 Remove Spec Morphic halo https://pharo.fogbugz.com/f/cases/11716 11705 New Inspector: fix #inspect:label https://pharo.fogbugz.com/f/cases/11705 11717 changeSorter vs. dualChangeSorter https://pharo.fogbugz.com/f/cases/11717 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/29/2013 20:59'! script109 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1626.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.125.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.923.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.111.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1275.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/29/2013 20:59'! update30430 "self new update30430" self withUpdateLog: '11716 Remove Spec Morphic halo https://pharo.fogbugz.com/f/cases/11716 11705 New Inspector: fix #inspect:label https://pharo.fogbugz.com/f/cases/11705 11717 changeSorter vs. dualChangeSorter https://pharo.fogbugz.com/f/cases/11717 '. self loadTogether: self script109 merge: false. DualChangeSorterApplication registerToolsOn: Smalltalk tools. Smalltalk tools remove: #dualChangeSorter. self flushCaches. ! ! "ScriptLoader30"! !ChangeSet methodsFor: 'moving changes' stamp: 'MarcusDenker 9/29/2013 15:33' prior: 18833928! forgetAllChangesFoundIn: otherChangeSet "Remove from the receiver all method changes found in aChangeSet. The intention is facilitate the process of factoring a large set of changes into disjoint change sets. To use: in a change sorter, copy over all the changes you want into some new change set, then use the subtract-other-side feature to subtract those changes from the larger change set, and continue in this manner." otherChangeSet == self ifTrue: [^ self]. otherChangeSet changedClassNames do: [:className | self forgetChangesForClass: className in: otherChangeSet]. self expungeEmptyClassChangeEntries. ! ! !DualChangeSorterApplication class methodsFor: 'menu' stamp: 'MarcusDenker 9/29/2013 15:34' prior: 38168186! menuCommandOn: aBuilder (aBuilder group: #SystemChanges) parent: #Tools; with: [ (aBuilder item: #'Change Sorter') action:[self open]; icon: self taskbarIcon. (aBuilder item: #'Recover lost changes...') icon: Smalltalk ui icons recoverLostChangesIcon; action: [Smalltalk tools changeList browseRecentLog]]! ! !DualChangeSorterApplication class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 9/29/2013 15:29'! open self new openWithSpec! ! !DualChangeSorterApplication class methodsFor: 'tools-registry' stamp: 'MarcusDenker 9/29/2013 15:28' prior: 21018851! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self as: #changeSorter! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'MarcusDenker 9/29/2013 15:30' prior: 29222127! findAChangeSorter: evt "Locate a change sorter, open it, and bring it to the front. Create one if necessary" | changeSorterClass | changeSorterClass := Smalltalk tools changeSorter. self findAWindowSatisfying: [:aWindow | aWindow model isKindOf: changeSorterClass] orMakeOneUsing: [changeSorterClass open]! ! !Morph methodsFor: 'debug and other' stamp: 'BenjaminVanRyseghem 9/29/2013 14:54' prior: 68667929! buildDebugMenu: aHand "Answer a debugging menu for the receiver. The hand argument is seemingly historical and plays no role presently" | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addStayUpItem. (self hasProperty: #errorOnDraw) ifTrue: [aMenu add: 'start drawing again' translated action: #resumeAfterDrawError.]. (self hasProperty: #drawError) ifTrue: [aMenu add: 'debug drawing error' translated action: #debugDrawError. aMenu addLine]. (self hasProperty: #errorOnStep) ifTrue: [aMenu add: 'start stepping again' translated action: #resumeAfterStepError. aMenu addLine]. aMenu add: 'inspect morph' translated action: #inspectInMorphic:. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu add: 'inspect owner chain' translated action: #inspectOwnerChain. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. self isMorphicModel ifTrue: [ aMenu add: 'inspect model' translated target: self model action: #inspect. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon ]. aMenu add: 'explore morph' translated target: self selector: #explore. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu addLine. aMenu add: 'browse morph class' translated target: self selector: #browseHierarchy. (self isMorphicModel) ifTrue: [aMenu add: 'browse model class' target: self model selector: #browseHierarchy]. ^ aMenu! ! !EyeInspector class methodsFor: 'inspecting' stamp: 'MarcusDenker 9/28/2013 17:01' prior: 68878695! inspect: anObject label: aString (InspectorNavigator openInspector: (self inspector: anObject)) window title: aString. ^ anObject ! ! !ToolRegistry methodsFor: 'menu' stamp: 'MarcusDenker 9/29/2013 15:31' prior: 34320897! menuItems "Answer the menu items available for this tool set" ^#( ('System Browser' #openClassBrowser) - ('Workspace' #openWorkspace) ('Transcript' #openTranscript) ('File Browser' #openFileList) - ('Test Runner' #openTestRunner) ('Process Browser' #openProcessBrowser) - ('Monticello Browser' #openMonticelloBrowser) ('Recover lost changes...' #openRecentChangesLog) ('Change Sorter' #openChangeSorter) ) ! ! ToolRegistry removeSelector: #openDualChangeSorter! ChangeSorterApplication class removeSelector: #registerToolsOn:! "Morphic-Base"! "Spec-Inspector"! "Spec-Tools"! "System-Changes"! "System-Tools"! ----End fileIn----! ----QUIT----an Array(29 September 2013 9:03:23 pm) Pharo.image priorSource: 18547940! ----STARTUP----an Array(29 September 2013 9:09:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 September 2013 9:09:21 pm) Pharo-30430.image priorSource: 18563685! ----STARTUP----an Array(30 September 2013 9:00:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/30/2013 08:55' prior: 68879899! commentForCurrentUpdate ^ '11718 SyntaxError is a really bad name https://pharo.fogbugz.com/f/cases/11718'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/30/2013 08:56'! script110 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1626.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.125.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.415.mcz OpalCompiler-Tests-MarcusDenker.210.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.925.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1278.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/30/2013 08:56'! update30431 "self new update30431" Smalltalk tools remove: #syntaxError. . self withUpdateLog: '11718 SyntaxError is a really bad name https://pharo.fogbugz.com/f/cases/11718'. self loadTogether: self script110 merge: false. SyntaxErrorDebugger registerToolsOn: Smalltalk tools. . self flushCaches. ! ! "ScriptLoader30"! !SyntaxErrorDebugger commentStamp: '' prior: 0! I am a special Debugger for syntax errors encountered when filing in class descriptions from a non-interactive source such as an external file. As a StringHolder, the string to be viewed is the method code or expression containing the error. The user may fix the error and accept the method to continue the fileIn. ! !MorphicUIManager methodsFor: 'ui requests' stamp: 'MarcusDenker 9/29/2013 15:50' prior: 27185027! syntaxErrorNotificationDefaultAction: anException "Handle a syntax error. Note, if there is no #syntaxErrorDebugger registered, it will be silently ignored" ^Smalltalk tools using: #syntaxErrorDebugger do: [:tool | tool open: (tool syntaxError: anException)]! ! !SyntaxErrorDebugger commentStamp: '' prior: 68906494! I am a special Debugger for syntax errors encountered when filing in class descriptions from a non-interactive source such as an external file. As a StringHolder, the string to be viewed is the method code or expression containing the error. The user may fix the error and accept the method to continue the fileIn. ! !SyntaxErrorDebugger class methodsFor: 'instance creation' stamp: 'CamilloBruni 2/9/2012 12:33'! buildMorphicViewOn: aSyntaxError "Answer an Morphic view on the given SyntaxError." | window | window := (SystemWindow labelled: 'Syntax Error: ', aSyntaxError error) model: aSyntaxError. window addMorph: ( (PluggableListMorph on: aSyntaxError list: #list selected: #listIndex changeSelected: nil menu: #listMenu:) doubleClickSelector: #listDoubleClick) frame: (0@0 corner: 1@0.15). window addMorph: (PluggableTextMorph on: aSyntaxError text: #contents accept: #contents:notifying: readSelection: #contentsSelection menu: #codePaneMenu:shifted:) frame: (0@0.15 corner: 1@1). aSyntaxError addDependant: window. ^ window openInWorldExtent: 380@220! ! !SyntaxErrorDebugger class methodsFor: 'instance creation' stamp: 'JuanVuletich 11/1/2010 10:09'! open: aSyntaxError "Answer a standard system view whose model is an instance of me." "Simulation guard" self buildMorphicViewOn: aSyntaxError. UIManager default spawnNewProcessIfThisIsUI: Processor activeProcess. ^ Processor activeProcess suspend! ! !SyntaxErrorDebugger class methodsFor: 'tools registry' stamp: 'MarcusDenker 9/29/2013 15:52'! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self as: #syntaxErrorDebugger ! ! !SyntaxErrorDebugger class methodsFor: 'instance creation' stamp: 'CamilloBruni 2/9/2012 12:29'! syntaxError: aSyntaxError ^ self new syntaxError: aSyntaxError; yourself ! ! !SyntaxErrorDebugger methodsFor: 'dependents access' stamp: 'GuillermoPolito 8/13/2010 01:10'! addDependant: aDependant dependents add: aDependant! ! !SyntaxErrorDebugger methodsFor: 'menu' stamp: 'StephaneDucasse 10/15/2011 20:58'! browseMethodFull "Create and schedule a full Browser and then select the current class and message." | myClass | (myClass := self selectedClassOrMetaClass) ifNotNil: [Smalltalk tools browser fullOnClass: myClass selector: self selectedMessageName]! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'sd 11/20/2005 21:27'! category: aSymbol "Record the message category of method being compiled. This is used when the user corrects the error and accepts." category := aSymbol. ! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 2/8/2012 23:29'! checkForUnprintableCharacters: aString | types printables badChar | types := String typeTable. printables := '!!@#$%&*-_=+<>{}?/\,¬∑¬£¬¢¬ß¬∂¬™¬∫¬ñ¬ó¬ì¬ë¬î¬í¬Ö√ö√¶√ö¬Ø√ó¬ø¬´¬ª`~`' asSet. badChar := aString detect: [:aChar | (types at: aChar asciiValue ifAbsent: [#xLetter]) == #xBinary and: [ (printables includes: aChar) not]] ifNone: [nil]. ^ badChar ifNil: [aString] ifNotNil: [ '<<>> ', aString].! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/31/2013 19:24'! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | donorMenu | donorMenu := shifted ifTrue: [self shiftedYellowButtonMenu] ifFalse: [self yellowButtonMenu]. ^ aMenu addAllFrom: donorMenu! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'CamilloBruni 2/8/2012 23:47'! contents ^contents ! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'GuillermoPolito 8/13/2010 00:57'! contents: stringOrText contents := stringOrText! ! !SyntaxErrorDebugger methodsFor: 'other' stamp: 'MarcusDenker 5/2/2013 11:37'! contents: aString notifying: aController "Compile the code in aString and proceed. Do not notify anybody of errors, because nobody would have been notified of errors if this syntax error had not arisen" doitFlag ifTrue: [self class compiler evaluate: aString] ifFalse: [class compile: aString classified: category]. aController hasUnacceptedEdits: false. self proceed! ! !SyntaxErrorDebugger methodsFor: 'other' stamp: 'CamilloBruni 2/9/2012 12:41'! contentsSelection "Return the interval of text in the code pane to select when I set the pane's contents" ^ location ifNil: [1 to: 0] "null selection" ifNotNil: [ location to: location + self sourceErrorString size - 1 ] ! ! !SyntaxErrorDebugger methodsFor: 'menu' stamp: 'CamilloBruni 9/21/2012 13:52'! debug "Show the stack of the process leading to this syntax editor, typically showing the stack of the compiler as called from fileIn." ^ debugger openFullNoSuspendLabel: 'Stack of the Syntax Error'. ! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'CamilloBruni 2/9/2012 12:33'! error ^ error! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'nice 2/24/2012 00:07'! highlightError. "copy in the error message" contents := contents copyReplaceFrom: location to: location - 1 with: self sourceErrorString. "convert to Text that we can add Attributes" contents := contents asText. "use the ST80Styler" location ifNil: [ ^ self ]. contents addAttribute: TextColor red from: location to: location + self sourceErrorString size - 1. contents addAttribute: TextEmphasis bold from: location to: location + self sourceErrorString size - 1.! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'GuillermoPolito 8/13/2010 01:10'! initialize dependents := Set new.! ! !SyntaxErrorDebugger methodsFor: 'message list' stamp: 'CamilloBruni 2/8/2012 23:45'! list "Answer an array of one element made up of the class name, message category, and message selector in which the syntax error was found. This is the single item in the message list of a view/browser on the receiver." selector ifNil: [^ Array with: (class name, ' ', (category ifNil: ['']), ' ', '')]. category ifNil: [^ Array with: (class name, ' ', '')]. ^ Array with: (class name, ' ', category, ' ', selector) ! ! !SyntaxErrorDebugger methodsFor: 'message list' stamp: 'CamilloBruni 2/8/2012 23:44'! listDoubleClick self debug! ! !SyntaxErrorDebugger methodsFor: 'message list' stamp: 'jm 5/3/1998 13:48'! listIndex "There is always exactly one element in my list and it is always selected." ^ 1 ! ! !SyntaxErrorDebugger methodsFor: 'menu' stamp: 'MarcusDenker 10/7/2012 11:41'! listMenu: aMenu ^aMenu addList: { {'Proceed' translated. #proceed}. {'Debug calling process' translated. #debug}. {'Browse full translated' translated. #browseMethodFull}}.! ! !SyntaxErrorDebugger methodsFor: 'other' stamp: 'AndreiChis 7/24/2013 09:56'! notify: anError at: aLocation in: source "Open a syntax error view, inserting the given error message into the given source at the given location. This message is sent to the 'requestor' when the parser or compiler finds a syntax error." | aClass | aClass := thisContext sender receiver encoder classEncoding. self setClass: aClass code: source error: anError location: aLocation debugger: (Smalltalk tools debugger context: thisContext) doitFlag: false. self class open: self. ! ! !SyntaxErrorDebugger methodsFor: 'menu' stamp: 'di 5/5/1998 00:06'! proceed "The user has has edited and presumably fixed the syntax error and the filein can now proceed." debugger proceed: self topView. ! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'StephaneDucasse 2/6/2011 21:53'! release "Prevent that syntaxError window lets a suspended compiler process running, when the window is closed." | p | (debugger isNil or: [ (p := debugger interruptedProcess) isNil or: [p isTerminated]]) ifTrue: [^self]. p terminate! ! !SyntaxErrorDebugger methodsFor: 'text menu support' stamp: 'jm 5/3/1998 14:15'! selectedClass "Answer the class in which the syntax error occurred." ^ class ! ! !SyntaxErrorDebugger methodsFor: 'text menu support' stamp: 'jm 5/3/1998 14:33'! selectedClassOrMetaClass "Answer the class of the method being compiled." ^ class ! ! !SyntaxErrorDebugger methodsFor: 'text menu support' stamp: 'jm 5/3/1998 14:17'! selectedMessageName "Answer the selector of the method being compiled." ^ selector ! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'EstebanLorenzano 5/28/2013 13:48'! setClass: aClass code: aString error: errorMessage location: anErrorPosition debugger: aDebugger doitFlag: flag class := aClass. error := errorMessage. location := anErrorPosition. debugger := aDebugger. selector := aClass compiler parseSelector: aString. contents := self checkForUnprintableCharacters: aString. self highlightError. category ifNil: [ category := aClass organization categoryOfElement: selector ]. category ifNil: [ category := Protocol unclassified ]. doitFlag := flag! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'MarcusDenker 4/21/2013 08:45'! shiftedYellowButtonMenu "Answer the menu to be presented when the yellow button is pressed while the shift key is down" ^ (PragmaMenuBuilder pragmaKeyword: SmalltalkEditor smalltalkEditorShiftedMenuKeyword model: self) menu.! ! !SyntaxErrorDebugger methodsFor: 'other' stamp: 'CamilloBruni 2/8/2012 23:56'! shoutAboutToStyle: aPluggableShoutMorphOrView ^ true! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'CamilloBruni 2/9/2012 12:42'! sourceErrorString ^ error , ' -> '! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'CamilloBruni 2/9/2012 12:34'! syntaxError: aSyntaxError "extract the instance properties from a SyntaxErrorNotification" self setClass: aSyntaxError errorClass code: aSyntaxError errorCode error: aSyntaxError errorMessage location: aSyntaxError location debugger: (Smalltalk tools debugger context: aSyntaxError signalerContext) doitFlag: aSyntaxError doitFlag. self category: aSyntaxError category.! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'GuillermoPolito 8/13/2010 01:10'! topView "Find the first top view on me. Is there any danger of their being two with the same model? Any danger from ungarbage collected old views? Ask if schedulled?" dependents ifNil: [^ nil]. dependents do: [:v | (v isSystemWindow and: [v isInWorld]) ifTrue: [^ v]]. ^ nil! ! !SyntaxErrorDebugger methodsFor: 'accessing' stamp: 'MarcusDenker 4/21/2013 08:53'! yellowButtonMenu ^ (PragmaMenuBuilder pragmaKeyword: SmalltalkEditor smalltalkEditorMenuKeyword model: self) menu ! ! SyntaxError removeSelector: #yellowButtonMenu! SyntaxError removeSelector: #topView! SyntaxError removeSelector: #syntaxError:! SyntaxError removeSelector: #sourceErrorString! SyntaxError removeSelector: #shoutAboutToStyle:! SyntaxError removeSelector: #shiftedYellowButtonMenu! SyntaxError removeSelector: #setClass:code:error:location:debugger:doitFlag:! SyntaxError removeSelector: #selectedMessageName! SyntaxError removeSelector: #selectedClassOrMetaClass! SyntaxError removeSelector: #selectedClass! SyntaxError removeSelector: #release! SyntaxError removeSelector: #proceed! SyntaxError removeSelector: #notify:at:in:! SyntaxError removeSelector: #listMenu:! SyntaxError removeSelector: #listIndex! SyntaxError removeSelector: #listDoubleClick! SyntaxError removeSelector: #list! SyntaxError removeSelector: #initialize! SyntaxError removeSelector: #highlightError! SyntaxError removeSelector: #error! SyntaxError removeSelector: #debug! SyntaxError removeSelector: #contentsSelection! SyntaxError removeSelector: #contents:notifying:! SyntaxError removeSelector: #contents:! SyntaxError removeSelector: #contents! SyntaxError removeSelector: #codePaneMenu:shifted:! SyntaxError removeSelector: #checkForUnprintableCharacters:! SyntaxError removeSelector: #category:! SyntaxError removeSelector: #browseMethodFull! SyntaxError removeSelector: #addDependant:! SyntaxError class removeSelector: #syntaxError:! SyntaxError class removeSelector: #registerToolsOn:! SyntaxError class removeSelector: #open:! SyntaxError class removeSelector: #buildMorphicViewOn:! Smalltalk globals removeClassNamed: #SyntaxError! ToolRegistry removeSelector: #debugSyntaxError:! "Polymorph-Widgets"! "System-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(30 September 2013 9:00:23 am) Pharo.image priorSource: 18563894! ----STARTUP----an Array(30 September 2013 9:06:23 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 September 2013 9:06:23 am) Pharo-30431.image priorSource: 18588208! ----STARTUP----an Array(30 September 2013 11:14:12 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/30/2013 11:11' prior: 68895852! commentForCurrentUpdate ^ '11687 Merge Opal with Opal Repository https://pharo.fogbugz.com/f/cases/11687'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/30/2013 11:11'! script111 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-StephaneDucasse.221.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.147.mcz Collections-Strings-MarcusDenker.278.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.21.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1626.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.125.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.418.mcz OpalCompiler-Tests-MarcusDenker.216.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.925.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.917.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.11.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1278.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/30/2013 11:11'! update30432 "self new update30432" self withUpdateLog: '11687 Merge Opal with Opal Repository https://pharo.fogbugz.com/f/cases/11687'. self loadTogether: self script111 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractCompiler commentStamp: '' prior: 0! I define the public API of compilers that can be used as system compilers (e.g. overriding #compiler on the class side).! !OpalCompiler commentStamp: '' prior: 42523037! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'ClementBera 7/26/2013 14:08'! exampleTimesRepeatEffect | foo | foo := 1. 5 timesRepeat: [ foo := foo + 3 ] . ^ foo! ! !OCOpalExamples methodsFor: 'examples-blocks-optimized' stamp: 'ClementBera 7/26/2013 14:08'! exampleTimesRepeatValue ^ 5 timesRepeat: [ 1 + 2 ] ! ! !OCUnknownSelectorWarning methodsFor: 'correcting' stamp: 'ClementBera 7/26/2013 15:46' prior: 38925865! openMenuIn: aBlock | alternatives labels lines caption choice name | name := node selector. alternatives := Symbol possibleSelectorsFor: name. labels := Array streamContents: [:s | s nextPut: name; nextPutAll: alternatives; nextPut: 'cancel']. lines := {1. alternatives size + 1}. caption := 'Unknown selector, please\confirm, correct, or cancel' withCRs. choice := aBlock value: labels value: lines value: caption. choice isZero ifTrue: [self resume: nil]. choice = 1 ifTrue: [self resume: name asSymbol]. choice = labels size ifTrue: [self resume: nil]. self resume: (alternatives at: choice - 1)! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 5/24/2013 13:44' prior: 39178034! doSemanticAnalysis ^ self method doSemanticAnalysis. ! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 8/5/2013 11:03'! isClean ^ self children allSatisfy: [ :child | child isClean ]! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:24' prior: 49095108! methodOrBlockNode ^ parent ifNotNil: [ parent methodOrBlockNode ]! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:24' prior: 49095411! printAsIfCompiledOn: aStream aStream nextPutAll: self formattedCode! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:24' prior: 49095588! scope ^ self methodOrBlockNode scope! ! !IRInstruction methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 15:48' prior: 34845534! delete sequence ifNil: [self error: 'This node doesn''t have a sequence']. sequence remove: self.! ! !IRInstruction methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 15:48' prior: 34847920! replaceWith: aNode sequence ifNil: [self error: 'This node doesn''t have a sequence']. sequence replaceNode: self withNode: aNode! ! !IRInstruction methodsFor: 'replacing' stamp: 'ClementBera 7/26/2013 15:48' prior: 34848129! replaceWithInstructions: aCollection sequence ifNil: [self error: 'This node doesn''t have a sequence']. sequence replaceNode: self withNodes: aCollection! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'ClementBera 7/26/2013 13:42'! isInlineTimesRepeat | block | self methodNode compilationContext optInlineToDo ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. #timesRepeat: = self selector ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size isZero ifFalse: [ self notify: 'timesRepeat: block must take zero arg'. ^ false]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'ClementBera 7/26/2013 15:17' prior: 46138168! isInlined self methodNode compilationContext optIlineNone ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineTimesRepeat ifTrue: [^true]. self isInlineCase ifTrue: [^true]. ^false.! ! !IRMethod methodsFor: 'debugging' stamp: 'ClementBera 7/22/2013 16:45' prior: 35546574! instructionForPC: aPC self compiledMethod. "generates the compiledMethod and optimize the ir. Removes the side-effect of optimizing the IR while looking for instruction, which results in incorrect found instruction" 0 to: -3 by: -1 do: [ :off | (self firstInstructionMatching: [:ir | ir bytecodeOffset = (aPC - off) ]) ifNotNil: [:it |^it]] ! ! !OCCleanBockTest methodsFor: 'tests' stamp: 'ClementBera 8/5/2013 11:06'! testBlockIsClean self assert: [ ] sourceNode isClean. self assert: [ 1 + 2 ] sourceNode isClean. self assert: [ :a | a + 2 ] sourceNode isClean. self assert: [ :a :b | a + b + 3 ] sourceNode isClean. self assert: [ | a | a := 1. a + 3 ] sourceNode isClean. ! ! !OCCleanBockTest methodsFor: 'tests' stamp: 'ClementBera 8/5/2013 11:11'! testBlockIsNotClean | escpWrite escpRead | escpRead := escpWrite := 1. self deny: [ self foo ] sourceNode isClean. self deny: [ ^ 1 ] sourceNode isClean. self deny: [ instVar foo ] sourceNode isClean. self deny: [ escpRead foo ] sourceNode isClean. self deny: [ escpWrite := 2 ] sourceNode isClean. self deny: [[ self foo ]] sourceNode isClean. self deny: [[ ^ 1 ]] sourceNode isClean. self deny: [[ instVar foo ]] sourceNode isClean. self deny: [[ escpRead foo ]] sourceNode isClean. self deny: [[ escpWrite := 2 ]] sourceNode isClean.! ! !IRBytecodeGenerator methodsFor: 'instructions' stamp: 'ClementBera 7/26/2013 15:48' prior: 38893670! returnConstant: constant bytes ifEmpty: [ lastSpecialReturn := Message selector: #returnConstant: argument: constant ]. constant == true ifTrue: [ ^ self nextPut: (Bytecodes at: #returnTrue) ]. constant == false ifTrue: [ ^ self nextPut: (Bytecodes at: #returnFalse) ]. constant ifNil: [ ^ self nextPut: (Bytecodes at: #returnNil) ]. self pushLiteral: constant. self returnTop! ! !OCBlockScope methodsFor: 'testing' stamp: 'ClementBera 8/5/2013 11:04'! hasEscapingVars ^ (copiedVars isEmpty & tempVector isEmpty) not! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'ClementBera 7/26/2013 14:25'! testExampleTimesRepeatEffect | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleTimesRepeatEffect) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleTimesRepeatEffect. ! ! !OCASTTranslatorTest methodsFor: 'testing - blocks - optimized' stamp: 'ClementBera 7/26/2013 14:26'! testExampleTimesRepeatValue | ir ast aCompiledMethod instance | ast := (OCOpalExamples>>#exampleTimesRepeatValue) parseTree. ir := (ast doSemanticAnalysisIn: OCOpalExamples) ir. instance := OCOpalExamples new. aCompiledMethod := ir compiledMethod. self assert: (aCompiledMethod valueWithReceiver: instance arguments: #()) = instance exampleTimesRepeatValue. ! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'ClementBera 7/26/2013 14:05'! emitTimesRepeat: aMessageNode | limit block limitEmit | limit := aMessageNode receiver. block := aMessageNode arguments last. limitEmit := [valueTranslator visitNode: limit]. limit isLiteral | limit isSelf | limit isSuper ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: #limit. methodBuilder storeTemp: #limit. methodBuilder popTop. limitEmit := [methodBuilder pushTemp: #limit]]. "push start. allocate and initialize iterator" self isValueTranslator ifTrue: [ limitEmit value ]. methodBuilder pushLiteral: 1. methodBuilder addTemp: #iterator. methodBuilder storeTemp: #iterator. methodBuilder popTop. methodBuilder jumpBackTarget: #start. methodBuilder pushTemp: #iterator. limitEmit value. methodBuilder send: #<=. methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. methodBuilder pushTemp: #iterator. methodBuilder pushLiteral: 1. methodBuilder send: #+. methodBuilder storeTemp: #iterator. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'cb 9/26/2013 14:27' prior: 40080086! visitBlockNode: aBlockNode | tempNames argumentNames copiedNames | aBlockNode arguments size >15 ifTrue: [self backendError: 'Too many arguments' forNode: aBlockNode ]. aBlockNode isInlined ifTrue: [^ self visitInlinedBlockNode: aBlockNode ]. "uncomment to enable clean blocks aBlockNode isClean ifTrue: [^ self visitCleanBlockNode: aBlockNode ]." argumentNames := aBlockNode argumentNames asArray. tempNames := (aBlockNode scope tempVars asArray collect: [ :each | each name]) copyWithoutAll: argumentNames. copiedNames := (aBlockNode scope inComingCopiedVars asArray collect: [:each | each name]). methodBuilder pushClosureCopyCopiedValues: copiedNames args: argumentNames jumpTo: #block. aBlockNode scope tempVector ifNotEmpty: [ methodBuilder createTempVectorNamed: aBlockNode scope tempVectorName withVars: (aBlockNode scope tempVector collect: [:each| each name]) asArray. ]. methodBuilder addTemps: tempNames. valueTranslator visitNode: aBlockNode body. methodBuilder addBlockReturnTopIfRequired. self flag: 'why dont we just add a blockReturnTop here... it could be removed or ignored in IRTranslator'. methodBuilder jumpAheadTarget: #block. ! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 8/5/2013 11:09'! visitCleanBlockNode: aBlockNode ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:25' prior: 36054242! decompileString ^ self formattedCode ! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:25' prior: 39179755! doSemanticAnalysisInContext: aCompilationContext self compilationContext: aCompilationContext. self doSemanticAnalysis.! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:25' prior: 36055541! generate "The receiver is the root of a parse tree. Answer a CompiledMethod. The argument, trailer, is the references to the source code that is stored with every CompiledMethod." ^ self generate: CompiledMethodTrailer empty! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:26' prior: 39477562! generateIR | ir | scope ifNil: [self doSemanticAnalysisInContext: self compilationContext ]. ir := (self compilationContext astTranslatorClass new visitNode: self) ir. ^ self ir: ir! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:27' prior: 36057045! methodOrBlockNode "^ self"! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'ClementBera 7/26/2013 15:27' prior: 38321962! primitiveFromPragma | aPragmaPrimitive | pragmas ifNil: [ ^ IRPrimitive null ]. aPragmaPrimitive := pragmas detect: [ :each | each isPrimitive ] ifNone: [ ]. aPragmaPrimitive ifNil: [ ^ IRPrimitive null ] ifNotNil: [ ^ aPragmaPrimitive asPrimitive ]! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 8/5/2013 11:03'! isClean ^ (self isInstance | self isSpecialVariable) not! ! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 8/5/2013 11:07'! isSpecialVariable ^ self binding isSpecialVariable! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 8/5/2013 11:03'! isClean "a block is clean if it has no escaping vars, has no non local return and its children are clean" self isInlined ifTrue: [ ^ false ]. self scope hasEscapingVars ifTrue: [ ^ false ]. self lastIsReturn ifTrue: [ ^ false ]. ^ super isClean ! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:11' prior: 34733855! isInlined parent isMessage ifFalse: [ ^ false ]. parent isInlineAndOr ifTrue: [^ true]. parent isInlineIf ifTrue: [^ true]. parent isInlineIfNil ifTrue: [^ true]. ^ self isInlinedLoop! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:18' prior: 34734169! isInlinedLoop parent isMessage ifFalse: [ ^ false ]. parent isInlineToDo ifTrue: [^ true]. parent isInlineWhile ifTrue: [^ true]. parent isInlineTimesRepeat ifTrue: [^ true]. (parent parent isArray and: [parent parent parent isMessage and: [parent parent parent isInlineCase]]) ifTrue: [^ true]. parent isInlineCase ifTrue: [^ true]. "otherwise branch" ^ false! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 8/5/2013 11:04'! lastIsReturn ^ self body lastIsReturn! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'ClementBera 7/26/2013 15:28' prior: 35545530! methodOrBlockNode "^ self"! ! !OCAbstractMethodScope methodsFor: 'scope' stamp: 'ClementBera 8/5/2013 10:49' prior: 46684319! outerOffsetTo: aScope "return how many scopes up from me aScope is. We ignore optimized scopes so the resulting offset maps to contexts" | offset scope | offset := 0. scope := self. [scope == aScope] whileFalse: [ scope isOptimizedBlockScope ifTrue: [scope := scope outerNotOptimizedScope] ifFalse: [ offset := offset + 1. scope isInstanceScope ifTrue: [^0]. scope := scope outerScope ] ]. ^offset. ! ! !IRBuilderTest methodsFor: 'testing' stamp: 'MarcusDenker 7/5/2013 15:41' prior: 44977200! testLiteralInteger | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 2; returnTop; ir. aCompiledMethod := iRMethod compiledMethod. self assert: (aCompiledMethod isKindOf: CompiledMethod). self assert: ((aCompiledMethod valueWithReceiver: nil arguments: #() ) = 2). ^iRMethod ! ! !AbstractCompiler commentStamp: '' prior: 68930915! I define the public API of compilers that can be used as system compilers (e.g. overriding #compiler on the class side).! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:08'! category: aCategory self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:08'! class: aClass self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:08'! compilationContext self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! compilationContext: anObject self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! compilationContextClass self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! compilationContextClass: aClass self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:33'! compile self subclassResponsibility! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! compile: textOrStream in: aClass classified: aCategory notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; category: aCategory; failBlock: aFailBlock; translate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! compile: textOrStream in: aClass notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; requestor: aRequestor; failBlock: aFailBlock; translate ! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! compileNoPattern: textOrStream in: aClass context: aContext notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; class: aClass; context: aContext; requestor: aRequestor; noPattern: true; failBlock: aFailBlock; translate! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! compiledMethodTrailer: aClass self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! context: aContext self subclassResponsibility! ! !AbstractCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 7/27/2013 19:25'! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: (aClass compiledMethodAt: aSelector)! ! !AbstractCompiler methodsFor: 'old - deprecated' stamp: 'MarcusDenker 7/27/2013 19:25'! decompile: aSelector in: aClass method: aCompiledMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: aCompiledMethod! ! !AbstractCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 7/27/2013 19:25'! decompileMethod: aCompiledMethod self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! environment: anSmallTalkImage self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:33'! evaluate self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:32'! evaluate: textOrString ^self source: textOrString; evaluate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrString for: anObject logged: logFlag ^self source: textOrString; logged: logFlag; receiver: anObject; evaluate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrString for: anObject notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; receiver: anObject; requestor: aController; evaluate ! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: aString in: aContext to: aReceiver ^self source: aString; context: aContext; receiver: aReceiver; failBlock: [^ #failedDoit]; evaluate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; evaluate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrStream in: aContext to: aReceiver notifying: aRequestor ifFail: aFailBlock logged: logFlag ^self source: textOrStream; context: aContext; receiver: aReceiver; requestor: aRequestor; failBlock: aFailBlock; logged: logFlag; evaluate! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrString logged: logFlag ^ self source: textOrString; logged: logFlag; evaluate ! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! evaluate: textOrString notifying: aController logged: logFlag ^ self source: textOrString; logged: logFlag; requestor: aController; evaluate ! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:09'! failBlock: aBlock self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:33'! format self subclassResponsibility! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! format: textOrStream in: aClass notifying: aRequestor ^self source: textOrStream; class: aClass; requestor: aRequestor; format ! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! logged: aBoolean self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! noPattern: aBoolean self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:33'! options: anArray self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:34'! parse self subclassResponsibility! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! parse: aString class: aClass ^self source: aString; class: aClass; parse! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! parse: aString class: aClass noPattern: aBoolean context: aContext notifying: req ifFail: aBlock "Backwards compatibilty" ^self source: aString; class: aClass; noPattern: aBoolean; context: aContext; requestor: req; failBlock: aBlock; translate.! ! !AbstractCompiler methodsFor: 'old - public' stamp: 'MarcusDenker 7/28/2013 15:06'! parse: textOrStream in: aClass notifying: req ^self source: textOrStream; class: aClass; requestor: req; translate.! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:34'! parseLiterals: aString self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:34'! parseSelector: aString self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! receiver: anObject self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! requestor: aRequestor self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! source: aString self subclassResponsibility! ! !AbstractCompiler methodsFor: 'public access' stamp: 'MarcusDenker 7/27/2013 19:34'! translate self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! useFaultyForParsing self subclassResponsibility! ! !AbstractCompiler methodsFor: 'accessing' stamp: 'MarcusDenker 7/28/2013 15:10'! useFaultyForParsing: anObject self subclassResponsibility! ! !OpalCompiler commentStamp: '' prior: 68931097! I provide the API of the whole Compiler Package. -> parsing: just parse -> translate: parse and generate code so we get all error messages -> compile: translate but return the CompiledMethod ! !OpalCompiler methodsFor: 'public access' stamp: 'ClementBera 7/26/2013 15:49' prior: 39241074! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | methodNode method value selectedSource itsSelection itsSelectionString | self class: (context ifNil: [ receiver class ] ifNotNil: [ context method methodClass ]). self noPattern: true. selectedSource := ((self compilationContext requestor respondsTo: #selection) and: [ (itsSelection := self compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. methodNode := self translate. method := self compilationContext interactive ifTrue: [ methodNode generateWithSource ] ifFalse: [ methodNode generate ]. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: method. self compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! OpalCompiler removeSelector: #parse:in:notifying:! OpalCompiler removeSelector: #parse:class:noPattern:context:notifying:ifFail:! OpalCompiler removeSelector: #parse:class:! OpalCompiler removeSelector: #format:in:notifying:! OpalCompiler removeSelector: #evaluate:notifying:logged:! OpalCompiler removeSelector: #evaluate:logged:! OpalCompiler removeSelector: #evaluate:in:to:notifying:ifFail:logged:! OpalCompiler removeSelector: #evaluate:in:to:notifying:ifFail:! OpalCompiler removeSelector: #evaluate:in:to:! OpalCompiler removeSelector: #evaluate:for:notifying:logged:! OpalCompiler removeSelector: #evaluate:for:logged:! OpalCompiler removeSelector: #evaluate:! OpalCompiler removeSelector: #decompile:in:method:! OpalCompiler removeSelector: #decompile:in:! OpalCompiler removeSelector: #compileNoPattern:in:context:notifying:ifFail:! OpalCompiler removeSelector: #compile:in:notifying:ifFail:! OpalCompiler removeSelector: #compile:in:classified:notifying:ifFail:! "OpalCompiler-Core"! "OpalCompiler-Tests"! ----End fileIn----! ----QUIT----an Array(30 September 2013 11:14:21 am) Pharo.image priorSource: 18588417! ----STARTUP----an Array(30 September 2013 11:20:25 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 September 2013 11:20:25 am) Pharo-30432.image priorSource: 18623773! ----STARTUP----an Array(30 September 2013 1:33:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/30/2013 13:29' prior: 68920376! commentForCurrentUpdate ^ '11708 all users of old Inspector framework needs to use the new one https://pharo.fogbugz.com/f/cases/11708 11721 Replace | and & with and: [] and or: [] https://pharo.fogbugz.com/f/cases/11721 11722 Replace | and & with and: [] and or: [] part 2 https://pharo.fogbugz.com/f/cases/11722 11723 Replace | and & with and: [] and or: [] part 3 (last) https://pharo.fogbugz.com/f/cases/11723'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/30/2013 13:30'! script112 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.128.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.418.mcz OpalCompiler-Tests-MarcusDenker.216.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.928.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.920.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1281.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/30/2013 13:30'! update30433 "self new update30433" self withUpdateLog: '11708 all users of old Inspector framework needs to use the new one https://pharo.fogbugz.com/f/cases/11708 11721 Replace | and & with and: [] and or: [] https://pharo.fogbugz.com/f/cases/11721 11722 Replace | and & with and: [] and or: [] part 2 https://pharo.fogbugz.com/f/cases/11722 11723 Replace | and & with and: [] and or: [] part 3 (last) https://pharo.fogbugz.com/f/cases/11723'. self loadTogether: self script112 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Collection methodsFor: 'adapting' stamp: 'ClementBera 9/30/2013 10:59' prior: 19513190! adaptToCollection: rcvr andSend: selector "If I am involved in arithmetic with another Collection, return a Collection of the results of each element combined with the scalar in that expression." (rcvr isSequenceable and: [ self isSequenceable ]) ifFalse: [self error: 'Only sequenceable collections may be combined arithmetically']. ^ rcvr with: self collect: [:rcvrElement :myElement | rcvrElement perform: selector with: myElement]! ! !TextMorph methodsFor: 'private' stamp: 'ClementBera 9/30/2013 11:05' prior: 52809661! fit "Adjust my bounds to fit the text. Should be a no-op if autoFit is not specified. Required after the text changes, or if wrapFlag is true and the user attempts to change the extent." | newExtent para cBounds lastOfLines heightOfLast | self isAutoFit ifTrue: [newExtent := (self paragraph extent max: 9 @ textStyle lineGrid) + (0 @ 2). newExtent := newExtent + (2 * borderWidth). newExtent := ((0 @ 0 extent: newExtent) expandBy: margins) extent. newExtent ~= bounds extent ifTrue: [(container isNil and: [successor isNil]) ifTrue: [para := paragraph. "Save para (layoutChanged smashes it)" super extent: newExtent. paragraph := para]]. (container notNil and: [successor isNil]) ifTrue: [cBounds := container bounds truncated. "23 sept 2000 - try to allow vertical growth" lastOfLines := self paragraph lines last. heightOfLast := lastOfLines bottom - lastOfLines top. (lastOfLines last < text size and: [lastOfLines bottom + heightOfLast >= self bottom]) ifTrue: [container releaseCachedState. cBounds := cBounds origin corner: cBounds corner + (0 @ heightOfLast)]. self privateBounds: cBounds]]. "These statements should be pushed back into senders" self paragraph positionWhenComposed: self position. successor ifNotNil: [successor predecessorChanged]. self changed "Too conservative: only paragraph composition should cause invalidation."! ! !ProcessBrowser methodsFor: 'process actions' stamp: 'ClementBera 9/30/2013 09:51' prior: 29983231! inspectPointers | tc pointers | selectedProcess ifNil: [ ^ self ]. tc := thisContext. pointers := selectedProcess pointersToExcept: { self processList. tc. self}. pointers ifEmpty: [ ^ self ]. pointers inspectWithLabel: 'Objects pointing to ' , selectedProcess browserPrintString! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'ClementBera 9/30/2013 10:53' prior: 32169605! bordersOn: her along: herSide ((herSide = #right and: [self left = her right]) or: [herSide = #left and: [self right = her left]]) ifTrue: [^ (self top max: her top) < (self bottom min: her bottom)]. ((herSide = #bottom and: [self top = her bottom]) or: [herSide = #top and: [self bottom = her top]]) ifTrue: [^ (self left max: her left) < (self right min: her right)]. ^ false! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'ClementBera 9/30/2013 11:02' prior: 67576946! coefficientsForMoreThanThreePoints "Less than three points handled as segments by our lineSegmentsDo:" | verts coefficients vertXs slopeXs vertYs slopeYs bestSegments | verts := self vertices. (self isCurvier not and: [ closed ]) ifTrue: [ verts := verts , verts first asOrderedCollection]. coefficients := { vertXs := verts collect: [:p | p x asFloat]. slopeXs := self slopes: vertXs. self changeInSlopes: slopeXs of: vertXs . self changeOfChangesInSlopes: slopeXs of: vertXs. vertYs := verts collect: [:p | p y asFloat]. slopeYs := self slopes: vertYs. self changeInSlopes: slopeYs of: vertYs. self changeOfChangesInSlopes: slopeYs of: vertYs. Array new: verts size withAll: 12}. bestSegments := (1 to: verts size) collect: [:i | (self transform: coefficients toCubicPointPolynomialAt: i) bestSegments]. coefficients at: 9 put:bestSegments. self isCurvier not & closed ifTrue: [ coefficients := coefficients collect: [:each | each allButLast]]. curveState := {coefficients. nil. nil}. self computeNextToEndPoints. ^ coefficients! ! !PolygonMorph methodsFor: 'testing' stamp: 'ClementBera 9/30/2013 11:03' prior: 67578103! containsPoint: aPoint (super containsPoint: aPoint) ifFalse: [^ false]. (closed and: [color isTransparent not]) ifTrue: [ ^ (self filledForm pixelValueAt: aPoint - bounds topLeft + 1) > 0]. self lineSegmentsDo: [ :p1 :p2 | (aPoint onLineFrom: p1 to: p2 within: (3 max: borderWidth+1//2) asFloat) ifTrue: [^ true]]. self arrowForms do: [ :f | (f pixelValueAt: aPoint - f offset) > 0 ifTrue: [^ true]]. ^ false! ! !PolygonMorph methodsFor: 'drawing' stamp: 'ClementBera 9/30/2013 11:03' prior: 29686632! drawOnFormCanvas: aCanvas "Display the receiver, a spline curve, approximated by straight line segments." vertices size < 1 ifTrue: [self error: 'a polygon must have at least one point']. (closed and: [color isTransparent not]) ifTrue: [aCanvas stencil: self filledForm at: bounds topLeft - 1 color: color]. (borderColor isColor and: [borderColor isTranslucentColor]) ifTrue: [aCanvas stencil: self borderForm at: bounds topLeft color: borderColor] ifFalse: [self drawBorderOn: aCanvas]. self arrowForms do: [ :f | aCanvas stencil: f at: f offset color: (borderColor isColor ifTrue: [borderColor] ifFalse: [color])]! ! !PolygonMorph methodsFor: 'menu' stamp: 'ClementBera 9/30/2013 11:04' prior: 36337175! specifyDashedLine | executableSpec newSpec | executableSpec := UIManager default request: 'Enter a dash specification as { major dash length. minor dash length. minor dash color } The major dash will have the normal border color. A blank response will remove the dash specification. [Note: You may give 5 items as, eg, {10. 5. Color white. 0. 3} where the 4th ityem is zero, and the 5th is the number of pixels by which the dashes will move in each step of animation]' translated initialAnswer: '{ 10. 5. Color red }'. executableSpec isEmptyOrNil ifTrue: [^ self stopStepping; dashedBorder: nil]. newSpec := [self class compiler evaluate: executableSpec] ifError: [^ self stopStepping; dashedBorder: nil]. (newSpec first isNumber and: [newSpec second isNumber and: [newSpec third isColor]]) ifFalse: [^ self stopStepping; dashedBorder: nil]. newSpec size = 3 ifTrue: [^ self stopStepping; dashedBorder: newSpec]. (newSpec size = 5 and: [newSpec fourth isNumber and: [newSpec fifth isNumber]]) ifTrue: [^ self dashedBorder: newSpec; startStepping]. ! ! !ToggleMenuItemMorph methodsFor: 'drawing-private' stamp: 'ClementBera 9/30/2013 11:01' prior: 37182158! basicDrawOn: aCanvas "Draw on the canvas. Taken from MenuItemMorph for minor refactoring." | stringColor stringBounds| stringColor := self stringColorToUse. stringBounds := self stringBoundsToUse. (self isSelected and: [self isEnabled]) ifTrue: [ aCanvas fillRectangle: self bounds fillStyle: self selectionFillStyle borderStyle: self selectionBorderStyle]. self hasIcon ifTrue: [ |iconForm| iconForm := self icon. self drawIcon: iconForm on: aCanvas in: stringBounds. stringBounds := stringBounds left: stringBounds left + iconForm width + 2]. self hasMarker ifTrue: [ stringBounds := stringBounds left: stringBounds left + self submorphBounds width + 8]. stringBounds := stringBounds top: stringBounds top + stringBounds bottom - self fontToUse height // 2. stringBounds := stringBounds bottom: stringBounds top + self fontToUse height. self drawText: contents on: aCanvas in: stringBounds. self hasSubMenu ifTrue: [ |subMenuMarker| subMenuMarker := self subMenuMarker deepCopy mapColor: Color black to: stringColor. self drawSubMenuMarker: subMenuMarker on: aCanvas in: stringBounds]! ! !MenuItemMorph methodsFor: 'drawing' stamp: 'ClementBera 9/30/2013 11:00' prior: 25449849! drawOn: aCanvas | stringColor stringBounds | (isSelected and: [ isEnabled ]) ifTrue: [aCanvas fillRectangle: self bounds fillStyle: self selectionFillStyle. stringColor := color negated] ifFalse: [stringColor := color]. stringBounds := bounds. self isInDockingBar ifTrue: [stringBounds := stringBounds left: stringBounds left + 4]. self hasIcon ifTrue: [| iconForm | iconForm := self iconForm. aCanvas translucentImage: iconForm at: stringBounds left @ (self top + (self height - iconForm height // 2)). stringBounds := stringBounds left: stringBounds left + iconForm width + 2]. self hasMarker ifTrue: [stringBounds := stringBounds left: stringBounds left + self submorphBounds width + 8]. stringBounds := stringBounds top: stringBounds top + stringBounds bottom - self fontToUse height // 2. aCanvas drawString: contents in: stringBounds font: self fontToUse color: stringColor. self hasSubMenu ifTrue: [| subMenuMarker subMenuMarkerPosition | subMenuMarker := self subMenuMarker. subMenuMarkerPosition := self right - subMenuMarker width @ (self top + self bottom - subMenuMarker height // 2). self isInDockingBar ifTrue: [subMenuMarkerPosition := subMenuMarkerPosition - (4 @ -1)]. aCanvas paintImage: subMenuMarker at: subMenuMarkerPosition]! ! !PasteUpMorph methodsFor: '*Morphic-Base-Windows' stamp: 'ClementBera 9/30/2013 11:02' prior: 29186202! findWindow: evt "Present a menu names of windows and naked morphs, and activate the one that gets chosen. Collapsed windows appear below line, expand if chosen; naked morphs appear below second line; if any of them has been given an explicit name, that is what's shown, else the class-name of the morph shows; if a naked morph is chosen, bring it to front and have it don a halo." | menu expanded collapsed nakedMorphs | menu := UIManager default newMenuIn: self for: self. expanded := self windowsSatisfying: [:w | w isCollapsed not]. collapsed := self windowsSatisfying: [:w | w isCollapsed]. nakedMorphs := self submorphsSatisfying:[:m | m isSystemWindow not]. (expanded isEmpty and: [collapsed isEmpty and: [nakedMorphs isEmpty]]) ifTrue: [^ Beeper beep]. (expanded asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #activateAndForceLabelToShow. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. (expanded isEmpty or: [ collapsed isEmpty and: [ nakedMorphs isEmpty ]]) ifFalse: [menu addLine]. (collapsed asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #collapseOrExpand. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. nakedMorphs isEmpty ifFalse: [menu addLine]. (nakedMorphs asSortedCollection: [:w1 :w2 | w1 class name caseInsensitiveLessOrEqual: w2 class name]) do: [:w | menu add: w class name target: w action: #comeToFrontAndAddHalo]. menu addTitle: 'find window' translated. menu popUpEvent: evt in: self.! ! !SmalltalkImage methodsFor: 'system attribute' stamp: 'ClementBera 9/30/2013 11:06' prior: 50358464! extractMinusParameters "Returns a dictionary matching parameters beginning by a minus character and the list of the next parameters. Here is an example: I suppose I run pharo with: `pharo myImage.image -minus1 'Hello' -minus2 -minus3 'Hello' 'World'`. This message will return a citionary with: minus1 --> #(Hello) minus2 --> #() minus3 --> #('Hello' 'World')" | args dict str previous previousWithMinus index | dict := Dictionary new. args := OrderedCollection new. previous := previousWithMinus := ''. str := self vm getSystemAttribute: (index := 2). [ str isNil ] whileFalse: [ args add: str. str := self vm getSystemAttribute: (index := index + 1) ]. args ifEmpty: [ ^ dict ]. previous := previousWithMinus := args detect: [ :each | each first = $- ]. [ (args first = previous) and: [args isEmpty not] ] whileFalse: [ args removeFirst ]. args do: [ :each | (each first = $-) ifTrue: [ (previous first = $-) ifTrue: [ dict at: previous allButFirst put: #() ]. previousWithMinus := each ] ifFalse: [ dict at: previousWithMinus allButFirst put: ((dict at: previousWithMinus allButFirst ifAbsent: [ #() ]), (Array with: each)) ]. previous := each. ]. (previous first = $-) ifTrue: [ dict at: previous allButFirst put: #() ]. ^ dict! ! !PluggableTextMorph methodsFor: 'dependents access' stamp: 'ClementBera 9/30/2013 11:05' prior: 29556222! canDiscardEdits "Return true if this view either has no text changes or does not care." ^ (hasUnacceptedEdits and: [askBeforeDiscardingEdits]) not ! ! !PositionableStream methodsFor: 'data get/put' stamp: 'ClementBera 9/30/2013 10:56' prior: 29865791! int16: anInteger "Store the given signed, 16-bit integer on this (binary) stream." | n | ((anInteger < -16r8000) or: [anInteger >= 16r8000]) ifTrue: [self error: 'outside 16-bit integer range']. anInteger < 0 ifTrue: [n := 16r10000 + anInteger] ifFalse: [n := anInteger]. self nextPut: (n digitAt: 2). self nextPut: (n digitAt: 1). ! ! !PositionableStream methodsFor: 'data get/put' stamp: 'ClementBera 9/30/2013 10:56' prior: 29866704! int32: anInteger "Store the given signed, 32-bit integer on this (binary) stream." | n | (anInteger < -16r80000000 or: [anInteger >= 16r80000000]) ifTrue: [self error: 'outside 32-bit integer range']. anInteger < 0 ifTrue: [n := 16r100000000 + anInteger] ifFalse: [n := anInteger]. self nextPut: (n digitAt: 4). self nextPut: (n digitAt: 3). self nextPut: (n digitAt: 2). self nextPut: (n digitAt: 1). ! ! !PositionableStream methodsFor: 'data get/put' stamp: 'ClementBera 9/30/2013 10:57' prior: 29867977! uint16: anInteger "Store the given unsigned, 16-bit integer on this (binary) stream." (anInteger < 0 or: [ anInteger >= 16r10000 ]) ifTrue: [self error: 'outside unsigned 16-bit integer range']. self nextPut: (anInteger digitAt: 2). self nextPut: (anInteger digitAt: 1). ! ! !PositionableStream methodsFor: 'data get/put' stamp: 'ClementBera 9/30/2013 10:57' prior: 29868592! uint24: anInteger "Store the given unsigned, 24-bit integer on this (binary) stream." (anInteger < 0 or: [ anInteger >= 16r1000000 ]) ifTrue: [self error: 'outside unsigned 24-bit integer range']. self nextPut: (anInteger digitAt: 3). self nextPut: (anInteger digitAt: 2). self nextPut: (anInteger digitAt: 1). ! ! !PositionableStream methodsFor: 'data get/put' stamp: 'ClementBera 9/30/2013 10:57' prior: 29869283! uint32: anInteger "Store the given unsigned, 32-bit integer on this (binary) stream." (anInteger < 0 or: [ anInteger >= 16r100000000 ]) ifTrue: [self error: 'outside unsigned 32-bit integer range']. self nextPut: (anInteger digitAt: 4). self nextPut: (anInteger digitAt: 3). self nextPut: (anInteger digitAt: 2). self nextPut: (anInteger digitAt: 1). ! ! !TextEditor methodsFor: 'private' stamp: 'ClementBera 9/30/2013 10:58' prior: 52658881! exchangeWith: prior "If the prior selection is non-overlapping and legal, exchange the text of it with the current selection and leave the currently selected text selected in the location of the prior selection (or leave a caret after a non-caret if it was exchanged with a caret). If both selections are carets, flash & do nothing. Don't affect the paste buffer. Undoer: itself; Redoer: Undoer." | start stop before currSelection priorSelection delta redoArgs altInterval undoArgs | start := self startIndex. stop := self stopIndex - 1. (((prior first <= prior last) or: [ start <= stop]) "Something to exchange" and: [self isDisjointFrom: prior]) ifTrue: [before := prior last < start. currSelection := self selection. priorSelection := self text copyFrom: prior first to: prior last. delta := before ifTrue: [0] ifFalse: [priorSelection size - currSelection size]. self zapSelectionWith: priorSelection. redoArgs := { prior. start to: stop}. self selectFrom: prior first + delta to: prior last + delta. delta := before ifTrue: [stop - prior last] ifFalse: [start - prior first]. self zapSelectionWith: currSelection. altInterval := prior first + delta to: prior last + delta. undoArgs := {altInterval. self startIndex to: self stopIndex - 1}. "self undoer: #exchangeWith: with: altInterval." prior first > prior last ifTrue: [self selectAt: self editingState previousInterval last + 1]. self editingState redoArray: { morph. #undoRedoExchange:with:. redoArgs} undoArray: {morph. #undoRedoExchange:with:. undoArgs}] ifFalse: [morph flash]! ! !Morph methodsFor: 'drop shadows' stamp: 'ClementBera 9/30/2013 11:00' prior: 26661334! shadowOffset: aPoint "Set the current shadow offset" (aPoint isNil or:[(aPoint x isZero) and: [ aPoint y isZero ]]) ifTrue:[ self removeProperty: #shadowOffset ] ifFalse:[ self setProperty: #shadowOffset toValue: aPoint ].! ! !DialogGroupAdderUI methodsFor: 'tree' stamp: 'ClementBera 9/30/2013 11:00' prior: 20664756! groups ^ self groupManager groups groups select: [:group | group isFillable and: [ group isReadOnly not ] ]! ! !MenuMorph methodsFor: 'modal control' stamp: 'ClementBera 9/30/2013 11:01' prior: 25519241! invokeModalAt: aPoint in: aWorld allowKeyboard: aBoolean "Invoke this menu and don't return until the user has chosen a value. See senders of this method for finding out how to use modal menu morphs." | w originalFocusHolder | originalFocusHolder := aWorld primaryHand keyboardFocus. self popUpAt: aPoint forHand: aWorld primaryHand in: aWorld allowKeyboard: aBoolean. self isModalInvokationDone: false. w := aWorld outermostWorldMorph. "containing hand" [self isInWorld and: [ self isModalInvokationDone not ] ] whileTrue: [w doOneSubCycle]. self delete. originalFocusHolder ifNotNil: [aWorld primaryHand newKeyboardFocus: originalFocusHolder]. ^ self modalSelection! ! !ScrollPane methodsFor: 'scrolling' stamp: 'ClementBera 9/30/2013 11:04' prior: 32859034! hIsScrollbarNeeded "Return whether the horz scrollbar is needed" "Don't do anything with the retractable scrollbar unless we have focus" (retractableScrollBar and: [self hasFocus not]) ifTrue: [^false]. "Don't show it if we were told not to." (self valueOfProperty: #noHScrollBarPlease ifAbsent: [false]) ifTrue: [^false]. "Always show it if we were told to" (self valueOfProperty: #hScrollBarAlways ifAbsent: [false]) ifTrue: [^true]. ^self hIsScrollable ! ! !ScrollPane methodsFor: '*Polymorph-Widgets' stamp: 'ClementBera 9/30/2013 11:04' prior: 32829522! hideOrShowScrollBar "Hide or show the scrollbar depending on if the pane is scrolled/scrollable." "Don't do anything with the retractable scrollbar unless we have focus" (retractableScrollBar and: [self hasFocus not]) ifTrue: [^self]. "Don't show it if we were told not to." (self valueOfProperty: #noScrollBarPlease ifAbsent: [false]) ifTrue: [^self]. (self vIsScrollbarNeeded not and: [ self isScrolledFromTop not ]) ifTrue: [self vHideScrollBar]. (self vIsScrollbarNeeded or: [ self isScrolledFromTop ]) ifTrue: [self vShowScrollBar]. ! ! !ScrollPane methodsFor: 'geometry' stamp: 'ClementBera 9/30/2013 10:54' prior: 49697296! innerBounds | inner | inner := super innerBounds. (retractableScrollBar or: [ (submorphs includes: scrollBar) not ]) ifFalse:[ inner := (scrollBarOnLeft ifTrue: [ (inner left + scrollBar width) @ inner top corner: inner bottomRight] ifFalse: [inner topLeft corner: (inner right - scrollBar width) @ inner bottom]) ]. (retractableScrollBar or: [ self hIsScrollbarShowing not ]) ifTrue: [ ^ inner] ifFalse: [ ^ inner topLeft extent: (inner extent - (0@self scrollBarThickness))]. ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'ClementBera 9/30/2013 11:05' prior: 32862885! vIsScrollbarNeeded "Return whether the verticle scrollbar is needed" "Don't do anything with the retractable scrollbar unless we have focus" (retractableScrollBar and: [self hasFocus not]) ifTrue: [^false]. "Don't show it if we were told not to." (self valueOfProperty: #noVScrollBarPlease ifAbsent: [false]) ifTrue: [^false]. "Always show it if we were told to" (self valueOfProperty: #vScrollBarAlways ifAbsent: [false]) ifTrue: [^true]. ^self vIsScrollable ! ! !Stream methodsFor: 'testing' stamp: 'ClementBera 9/30/2013 10:56' prior: 50918013! nextWordsPutAll: aCollection "Write the argument a word-like object in big endian format on the receiver. May be used to write other than plain word-like objects (such as ColorArray)." (aCollection class isPointers or: [ aCollection class isWords not ]) ifTrue: [ ^ self error: aCollection class name,' is not word-like']. 1 to: aCollection basicSize do: [ :i | self nextNumber: 4 put: (aCollection basicAt: i) ]. ^ aCollection! ! !ContextPart methodsFor: 'system simulation' stamp: 'ClementBera 9/30/2013 10:49' prior: 45228266! stepToSendOrReturn "Simulate the execution of bytecodes until either sending a message or returning a value to the receiver (that is, until switching contexts)." | context | [ self willSend or: [ self willReturn or: [ self willStore ] ] ] whileFalse: [ context := self step. context == self ifFalse: [ self halt. "Caused by mustBeBoolean handling" ^context ]]! ! !String methodsFor: 'paragraph support' stamp: 'ClementBera 9/30/2013 10:48' prior: 51117236! indentationIfBlank: aBlock "Answer the number of leading tabs in the receiver. If there are no visible characters, pass the number of tabs to aBlock and return its value." | reader leadingTabs lastSeparator cr tab ch | cr := Character cr. tab := Character tab. reader := self readStream. leadingTabs := 0. [ reader atEnd not and: [ (ch := reader next) = tab ] ] whileTrue: [ leadingTabs := leadingTabs + 1 ]. lastSeparator := leadingTabs + 1. [ reader atEnd not and: [ ch isSeparator and: [ ch ~= cr ] ] ] whileTrue: [ lastSeparator := lastSeparator + 1. ch := reader next ]. (lastSeparator = self size or: [ ch = cr ]) ifTrue: [ ^ aBlock value: leadingTabs ]. ^ leadingTabs! ! !String methodsFor: 'converting' stamp: 'ClementBera 9/30/2013 10:48' prior: 51101856! withNoLineLongerThan: aNumber "Answer a string with the same content as receiver, but rewrapped so that no line has more characters than the given number" (aNumber isNumber not or: [ aNumber < 1 ]) ifTrue: [self error: 'too narrow']. ^self class new: self size * (aNumber + 1) // aNumber "provision for supplementary line breaks" streamContents: [ :stream | self lineIndicesDo: [ :start :endWithoutDelimiters :end | | pastEnd lineStart | pastEnd := endWithoutDelimiters + 1. "eliminate spaces at beginning of line" lineStart := (self indexOfAnyOf: CSNonSeparators startingAt: start ifAbsent: [pastEnd]) min: pastEnd. [| lineStop lineEnd spacePosition | lineEnd := lineStop := lineStart + aNumber min: pastEnd.. spacePosition := lineStart. [spacePosition < lineStop] whileTrue: [ spacePosition := self indexOfAnyOf: CSSeparators startingAt: spacePosition + 1 ifAbsent: [pastEnd]. spacePosition <= lineStop ifTrue: [lineEnd := spacePosition]. ]. "split before space or before lineStop if no space" stream nextPutAll: (self copyFrom: lineStart to: lineEnd - 1). "eliminate spaces at beginning of next line" lineStart := self indexOfAnyOf: CSNonSeparators startingAt: lineEnd ifAbsent: [pastEnd]. lineStart <= endWithoutDelimiters ] whileTrue: [stream cr]. stream nextPutAll: (self copyFrom: pastEnd to: end) ] ]! ! "Collections-Abstract"! "Collections-Streams"! "Collections-Strings"! "GroupManagerUI"! "Kernel"! "Morphic-Base"! "Polymorph-Widgets"! "System-Support"! "Text-Edition"! "Tools"! ----End fileIn----! ----QUIT----an Array(30 September 2013 1:33:26 pm) Pharo.image priorSource: 18623984! ----STARTUP----an Array(30 September 2013 1:39:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 September 2013 1:39:24 pm) Pharo-30433.image priorSource: 18659183! ----STARTUP----an Array(30 September 2013 10:19:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 9/30/2013 22:16' prior: 68955943! commentForCurrentUpdate ^ '7130 Scrollbars on the left. Nobody needed it for years --> remove https://pharo.fogbugz.com/f/cases/7130'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 9/30/2013 22:17'! script113 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.21.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.130.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.544.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.56.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.418.mcz OpalCompiler-Tests-MarcusDenker.216.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.930.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.251.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.920.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1283.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 9/30/2013 22:17'! update30434 "self new update30434" self withUpdateLog: '7130 Scrollbars on the left. Nobody needed it for years --> remove https://pharo.fogbugz.com/f/cases/7130'. self loadTogether: self script113 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Browser methodsFor: 'initialization' stamp: 'MarcusDenker 9/30/2013 20:03' prior: 18463067! openAsMorphEditing: editString "Create a pluggable version of all the morphs for a Browser in Morphic" | window hSepFrac | hSepFrac := 0.4. window := (SystemWindow labelled: 'later') model: self. window addMorph: self buildMorphicSystemCatList frame: (0@0 corner: 0.25@hSepFrac). self addClassAndSwitchesTo: window at: (0.25@0 corner: 0.5@hSepFrac) plus: 0. window addMorph: self buildMorphicMessageCatList frame: (0.5@0 extent: 0.25@hSepFrac). window addMorph: self buildMorphicMessageList frame: (0.75@0 extent: 0.25@hSepFrac). self addLowerPanesTo: window at: (0@hSepFrac corner: 1@1) with: editString. window setUpdatablePanesFrom: #(systemCategoryList classList messageCategoryList messageList). ^ window! ! !ScrollPane methodsFor: 'menu' stamp: 'MarcusDenker 9/30/2013 20:08' prior: 32854495! addCustomMenuItems: aCustomMenu hand: aHandMorph super addCustomMenuItems: aCustomMenu hand: aHandMorph. retractableScrollBar ifTrue: [aCustomMenu add: 'make scrollbar inboard' translated action: #retractableOrNot] ifFalse: [aCustomMenu add: 'make scrollbar retractable' translated action: #retractableOrNot].! ! !ScrollPane methodsFor: 'initialization' stamp: 'MarcusDenker 9/30/2013 20:03' prior: 32852718! initialize "initialize the state of the receiver" super initialize. hasFocus := false. retractableScrollBar := false. scrollBarOnLeft := false. self initializeScrollBars. self extent: self defaultExtent. self hideOrShowScrollBars. ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 9/30/2013 20:09' prior: 68986260! innerBounds | inner | inner := super innerBounds. (retractableScrollBar or: [ (submorphs includes: scrollBar) not ]) ifFalse:[ inner := (inner topLeft corner: (inner right - scrollBar width) @ inner bottom) ]. (retractableScrollBar or: [ self hIsScrollbarShowing not ]) ifTrue: [ ^ inner] ifFalse: [ ^ inner topLeft extent: (inner extent - (0@self scrollBarThickness))]. ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 9/30/2013 20:07' prior: 32847459! vResizeScrollBar | w topLeft borderHeight innerWidth | w := self scrollBarThickness. innerWidth := self flatColoredScrollBarLook ifTrue: [ borderHeight := borderWidth. 0 ] ifFalse: [ borderHeight := 0. 1 ]. topLeft := retractableScrollBar ifTrue: [ bounds topRight - (borderWidth @ (0 - borderHeight)) ] ifFalse: [ bounds topRight - ((w + borderWidth - innerWidth) @ (0 - borderHeight)) ]. scrollBar bounds: (topLeft extent: w @ self vScrollBarHeight)! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 9/30/2013 20:04' prior: 41455765! addMorph: aMorph fullFrame: aLayoutFrame "Add a morph to the receiver with the given layout frame." | left right bottom top windowBorderWidth frame | frame := aLayoutFrame asLayoutFrame. windowBorderWidth := self class borderWidth. left := frame leftOffset. right := frame rightOffset. bottom := frame bottomOffset. top := frame topOffset. frame rightFraction = 1 ifTrue: [frame rightOffset: right - windowBorderWidth - self theme windowRightOffset]. frame leftFraction = 0 ifTrue: [frame leftOffset: left + windowBorderWidth + self theme windowLeftOffset] ifFalse: [frame leftFraction = 1 ifFalse: [ frame leftOffset: left + ProportionalSplitterMorph splitterWidth]]. frame bottomFraction = 1 ifTrue: [frame bottomOffset: bottom - windowBorderWidth - self theme windowBottomOffset]. frame topFraction = 0 ifTrue: [frame topOffset: top+ self theme windowTopOffset] ifFalse: [frame topFraction = 1 ifFalse: [ frame topOffset: top + ProportionalSplitterMorph splitterWidth]]. super addMorph: aMorph fullFrame: frame. paneMorphs := paneMorphs copyReplaceFrom: 1 to: 0 with: (Array with: aMorph). aMorph adoptPaneColor: self paneColor. aMorph borderStyle: (self theme windowPaneBorderStyleFor: aMorph in: self); color: (aMorph initialColorInSystemWindow: self). self addMorphBack: aMorph. "reorder panes so flop-out right-side scrollbar is visible" self owner ifNotNil: [self addPaneSplitters] "do when opened for performance"! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 9/30/2013 20:08' prior: 51712562! fullscreenBounds "Answer the bounds that the receiver would take if expanded to fullscreen." | left right | left := right := 0. self paneMorphs do: [:pane | ((pane isKindOf: ScrollPane) and: [pane retractableScrollBar]) ifTrue: [right := right max: pane scrollBarThickness]]. ^ ( (RealEstateAgent maximumUsableAreaInWorld: self world) insetBy: (left @ 0 corner: right @ 0)) insetBy: self fullscreenMargin ! ! ScrollPane removeSelector: #scrollBarOnLeft:! ScrollPane removeSelector: #leftOrRight! ThemeSettings removeSelector: #scrollBarsOnRight! "Morphic-Base"! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(30 September 2013 10:19:24 pm) Pharo.image priorSource: 18659392! ----STARTUP----an Array(30 September 2013 10:25:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(30 September 2013 10:25:26 pm) Pharo-30434.image priorSource: 18675220! ----STARTUP----an Array(1 October 2013 8:53:11 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/1/2013 08:46' prior: 68991351! commentForCurrentUpdate ^ '11729 Sync Opa from repo: #timesRepeat optimization enabled https://pharo.fogbugz.com/f/cases/11729 11720 DateModel: Add #displayBlock: https://pharo.fogbugz.com/f/cases/11720 11727 remove unused ivar scrollBarOnLeft in ScrollPane https://pharo.fogbugz.com/f/cases/11727'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/1/2013 08:47'! script114 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.132.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.421.mcz OpalCompiler-Tests-MarcusDenker.216.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.931.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.920.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/1/2013 08:49'! update30435 "self new update30435" self withUpdateLog: '11729 Sync Opa from repo: #timesRepeat optimization enabled https://pharo.fogbugz.com/f/cases/11729 11720 DateModel: Add #displayBlock: https://pharo.fogbugz.com/f/cases/11720 11727 remove unused ivar scrollBarOnLeft in ScrollPane https://pharo.fogbugz.com/f/cases/11727'. self loadTogether: self script114 merge: false. (SystemNavigation new allCallsOn: #timesRepeat:) do: [ :each | each method recompile ]. self flushCaches. ! ! "ScriptLoader30"! !Trait method! toggleEnabled "Toggle the enabled state." self enabled: self enabled not! ! !Trait method! addToggleItemsToHaloMenu: aCustomMenu "Add toggle-items to the halo menu" super addToggleItemsToHaloMenu: aCustomMenu. aCustomMenu addUpdating: #enabledString target: self action: #toggleEnabled! ! !Trait method! enabledString "Answer the string to be shown in a menu to represent the 'enabled' status" ^ (self enabled) -> 'enabled' translated! ! !ScrollPane commentStamp: 'mk 8/9/2005 10:34' prior: 42653361! The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange. Basic clue about utilization of the ScrollPane class is given in: ScrollPane example1. ScrollPane example2.! !DateModel commentStamp: '' prior: 42214773! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !CCompilationContext methodsFor: 'options' stamp: 'MarcusDenker 9/30/2013 14:42'! optionInlineTimesRepeat ^ options includes: #optionInlineTimesRepeat ! ! !OpalCompiler class methodsFor: 'options' stamp: 'MarcusDenker 9/30/2013 14:54' prior: 46129944! defaultOptions ^ #( "by default we inline all optimized constructs" + optionInlineIf + optionInlineIfNil + optionInlineAndOr + optionInlineWhile + optionInlineToDo + optionInlineCase + optionInlineTimesRepeat - optionIlineNone "to turn off all. Overrides the others" - optionLongIvarAccessBytecodes "special for Contexts" + optionOptimizeIR "disabled for now" )! ! !CompilationContext methodsFor: 'options' stamp: 'MarcusDenker 9/30/2013 14:43'! optionInlineTimesRepeat ^ options includes: #optionInlineTimesRepeat ! ! !IRBytecodeGenerator methodsFor: 'private' stamp: 'ClementBera 9/30/2013 11:20' prior: 34833247! updateJumpOffsets [ orderSeq inject: false into: [ :changed :seqId | (self updateJump: seqId) or: [ changed ]] ] whileTrue! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 9/30/2013 14:54' prior: 68933931! isInlineTimesRepeat | block | self methodNode compilationContext optionInlineTimesRepeat ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. #timesRepeat: = self selector ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size isZero ifFalse: [ "self notify: 'timesRepeat: block must take zero arg'." ^ false]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 9/30/2013 14:39' prior: 68934460! isInlined self methodNode compilationContext optIlineNone ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineTimesRepeat ifTrue: [^true]. self isInlineCase ifTrue: [^true]. self isInlineTimesRepeat ifTrue: [ ^true]. ^false.! ! !ScrollPane commentStamp: 'mk 8/9/2005 10:34' prior: 69018885! The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange. Basic clue about utilization of the ScrollPane class is given in: ScrollPane example1. ScrollPane example2.! !ScrollPane methodsFor: 'initialization' stamp: 'MarcusDenker 9/30/2013 22:28' prior: 69003249! initialize "initialize the state of the receiver" super initialize. hasFocus := false. retractableScrollBar := false. self initializeScrollBars. self extent: self defaultExtent. self hideOrShowScrollBars. ! ! !DateModel commentStamp: '' prior: 69019372! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !DateModel methodsFor: 'accessing' stamp: 'SeanDeNigris 9/29/2013 14:31' prior: 39973135! date: aDate | string | string := displayBlockHolder contents value: aDate. ^ self dateModel text: string.! ! !DateModel methodsFor: 'protocol' stamp: 'SeanDeNigris 9/29/2013 14:31'! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlockHolder contents! ! !DateModel methodsFor: 'protocol' stamp: 'SeanDeNigris 9/29/2013 14:31'! displayBlock: aBlock "Set the one argument block used to transfrom your date into a string" displayBlockHolder contents: aBlock! ! !DateModel methodsFor: 'initialization' stamp: 'SeanDeNigris 9/29/2013 14:31'! initialize displayBlockHolder := [ :object | object asStringOrText ] asValueHolder. displayBlockHolder whenChangedDo: [ self date: self date ]. super initialize. "do this last so default will be set after displayBlock"! ! !DateModel methodsFor: 'initialization' stamp: 'SeanDeNigris 9/29/2013 14:18' prior: 20453856! initializeWidgets self instantiateModels: #( dateLabel LabelModel dateModel TextInputFieldModel chooseDateButton ButtonModel). dateLabel text: 'Date'. self date: Date today. dateModel isCodeCompletionAllowed: false. chooseDateButton label: self iconMorph; action: [ self chooseDate ]; extent: self iconMorph extent.! ! !DateModel methodsFor: 'private' stamp: 'SeanDeNigris 9/29/2013 14:22' prior: 20455013! onDateChosen: aChoseDate aChoseDate calendar delete. self date: aChoseDate date.! ! ScrollPane removeSelector: #scrollBarOnLeft! "Athens-Morphic"! "Morphic-Base"! "Nautilus"! "NewList"! "OpalCompiler-Core"! "Polymorph-Widgets"! "Spec-Widgets"! "Tools"! ----End fileIn----! ----QUIT----an Array(1 October 2013 8:53:30 am) Pharo.image priorSource: 18675431! ----STARTUP----an Array(1 October 2013 8:59:32 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 October 2013 8:59:32 am) Pharo-30435.image priorSource: 18693674! ----STARTUP----an Array(1 October 2013 1:03:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/1/2013 13:01' prior: 69007387! commentForCurrentUpdate ^ '11732 add NonInteractiveTranscript to kernel packages https://pharo.fogbugz.com/f/cases/11732 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/1/2013 13:01'! script115 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.534.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.132.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.421.mcz OpalCompiler-Tests-MarcusDenker.216.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.931.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.143.mcz System-FilePackage-MarcusDenker.101.mcz System-FileRegistry-StephaneDucasse.27.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.32.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.38.mcz System-Localization-StephaneDucasse.71.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.279.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.923.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/1/2013 13:01'! update30436 "self new update30436" self withUpdateLog: '11732 add NonInteractiveTranscript to kernel packages https://pharo.fogbugz.com/f/cases/11732 '. self loadTogether: self script115 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SmalltalkImage methodsFor: 'PharoKernel' stamp: 'PavelKrivanek 10/1/2013 09:26' prior: 68773492! kernelPackageNames ^ #('AST-Core' 'Announcements-Core' 'Announcements-Core' 'Collections-Abstract' 'Collections-Arithmetic' 'Collections-Arrayed' 'Collections-Atomic' 'Collections-Native' 'Collections-Sequenceable' 'Collections-Stack' 'Collections-Streams' 'Collections-Strings' 'Collections-Support' 'Collections-Text' 'Collections-Traits' 'Collections-Unordered' 'Collections-Weak' 'Compiler' 'Compression' 'Files' 'Graphics-Display Objects' 'Graphics-Primitives' 'Graphics-Transformations' 'Kernel' 'Multilingual-Encodings' 'Multilingual-Languages' 'Multilingual-TextConversion' 'System-Changes' 'System-CommandLine' 'System-Clipboard' 'System-FileRegistry' 'System-Finalization' 'System-Localization' 'System-Object Events' 'System-Platforms' 'System-Support' 'Text-Core' 'Traits' 'UIManager' 'Transcript' 'FileSystem-AnsiStreams' 'FileSystem-Core' 'FileSystem-Disk' 'FileSystem-Memory' 'CodeImport' 'Regex-Core' 'SystemProgress' 'System-Announcements' 'Ring-Core-Kernel' 'Ring-Core-Containers' 'System-PragmaCollector' 'OpalCompiler-Core' 'ClassOrganizer-Core' 'Slot' 'NonInteractiveTranscript')! ! "System-Support"! ----End fileIn----! ----QUIT----an Array(1 October 2013 1:03:17 pm) Pharo.image priorSource: 18693877! ----STARTUP----an Array(1 October 2013 1:09:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 October 2013 1:09:14 pm) Pharo-30436.image priorSource: 18705960! ----STARTUP----an Array(1 October 2013 3:24:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/1/2013 15:19' prior: 69025833! commentForCurrentUpdate ^ '11738 add #recompile to Class/Trait, the image and compiledMethod https://pharo.fogbugz.com/f/cases/11738 11736 remove public API retractable scrollbars https://pharo.fogbugz.com/f/cases/11736 11650 fix shadowed vars in Opal examples https://pharo.fogbugz.com/f/cases/11650 11728 trivial critic cleanup in System-* https://pharo.fogbugz.com/f/cases/11728'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/1/2013 15:20'! script116 ^ 'AST-Core-MarcusDenker.193.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.37.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.536.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.134.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.423.mcz OpalCompiler-Tests-MarcusDenker.218.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.933.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.48.mcz Refactoring-Core-MarcusDenker.221.mcz Refactoring-Critics-MarcusDenker.70.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.31.mcz Refactoring-Tests-Core-MarcusDenker.80.mcz Refactoring-Tests-Critics-EstebanLorenzano.14.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.108.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.103.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.925.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/1/2013 15:20'! update30437 "self new update30437" self withUpdateLog: '11738 add #recompile to Class/Trait, the image and compiledMethod https://pharo.fogbugz.com/f/cases/11738 11736 remove public API retractable scrollbars https://pharo.fogbugz.com/f/cases/11736 11650 fix shadowed vars in Opal examples https://pharo.fogbugz.com/f/cases/11650 11728 trivial critic cleanup in System-* https://pharo.fogbugz.com/f/cases/11728'. self loadTogether: self script116 merge: false. self flushCaches. ! ! "ScriptLoader30"! !VTermOutputDriver methodsFor: 'coloring' stamp: 'MarcusDenker 9/30/2013 22:49' prior: 54616060! color256: aColor background: isBackground "use the resources for colors 0-15 - usually more-or-less a reproduction of the standard ANSI colors, but possibly more pleasing shades colors 16-231 are a 6x6x6 color cube colors 232-255 are a grayscale ramp, intentionally leaving out black and white" self csiEscape. outStream nextPutAll: (isBackground ifFalse: [ '38;5;' ] ifTrue: [ '48;5;' ]). outStream print: aColor closestXTermPixelValue; nextPut: $m.! ! !PseudoClassOrganizer methodsFor: 'comment accessing' stamp: 'MarcusDenker 9/30/2013 22:55' prior: 30110912! classComment "Answer the comment associated with the object that refers to the receiver." classComment isNil ifTrue: [ ^ '' ]. ^ classComment! ! !OpalCompiler class methodsFor: 'public' stamp: 'MarcusDenker 10/1/2013 14:22' prior: 36000578! recompileAll "Recompile all classes and traits in the system." Smalltalk image recompile ! ! !MD5 class methodsFor: 'testing' stamp: 'ul 3/3/2008 22:46' prior: 25216266! isPluginAvailable ^false! ! !MD5 class methodsFor: 'instance creation' stamp: 'ul 3/3/2008 23:01' prior: 25216431! new self isPluginAvailable ifTrue: [ ^self basicNew ] ifFalse: [ ^MD5NonPrimitive basicNew ]! ! !Termcap methodsFor: 'accessing' stamp: 'MarcusDenker 9/30/2013 22:50' prior: 52316067! getent: aString "The tgetent routine loads the entry for name. It returns 1 on success, 0 if there is no such entry, and -1 if the terminfo database could not be found." "result := (PipeableOSProcess command: 'tput ', aString) output asInteger. result = 1 ifTrue: [ ^ self ]. result = 0 ifTrue: [ Error signal: 'No such tget entry: ', aString aString ]. result = -1 ifTrue: [ Error signal: 'Could not find terminfo database' ]." Error signal: 'Cannot interact with tput yet'. ! ! !CommandLineHandler methodsFor: 'testing' stamp: 'MarcusDenker 9/30/2013 22:47' prior: 38470491! hasSessionChanged "check whether the session has changed since the commandline handler as been created" ^ session ~~ Smalltalk session! ! !SettingTree methodsFor: 'querying' stamp: 'MarcusDenker 9/30/2013 22:50' prior: 33194338! childrenOf: aNode | children idx order | "Get aNode children. Assign children order if one child has an order which is not nil" children := self nodeList select: [:p | p parentName = aNode settingDeclaration name]. (children detect: [:n | n order notNil] ifNone:[]) ifNotNil: [:firstWithOrder | idx := children indexOf: firstWithOrder. order := firstWithOrder order. idx > 1 ifTrue: [idx - 1 to: 1do: [:pos | (children at: pos) order: order - 1. order := order - 1]]. order := firstWithOrder order. idx + 1 to: children size do: [:pos | (children at: pos) order ifNil: [(children at: pos) order: order + 1] ifNotNil: [order := (children at: pos) order]. order := order + 1]]. ^ children! ! !TextDiffBuilder methodsFor: 'private' stamp: 'MarcusDenker 9/30/2013 22:54' prior: 52579125! findMatches "I find the matching pairs of xLines and yLines. First I filter out all lines that can't have a pair, then I find the longest common subsequence of the remaining elements. Finally I mark the matching pairs." | temp lcs xFilteredLines yFilteredLines xNumbers yNumbers | "Filter out all lines that can't have a pair." temp := yLines asSet. xFilteredLines := xLines select: [ :each | temp includes: each ]. xFilteredLines size = 0 ifTrue: [ ^ self ]. temp := xLines asSet. yFilteredLines := yLines select: [ :each | temp includes: each ]. yFilteredLines size = 0 ifTrue: [ ^ self ]. "Map all lines to SmallIntegers, because they can be compared faster." temp := Dictionary new. xNumbers := xFilteredLines collect: [ :each | temp at: each ifAbsentPut: [ temp size ] ]. yNumbers := yFilteredLines collect: [ :each | temp at: each ifAbsentPut: [ temp size ] ]. temp := nil. "Find the longest common subsequence." lcs := self lcsFor: xNumbers and: yNumbers. "Mark the matching pairs." [ lcs isNil ] whileFalse: [ (xFilteredLines at: (lcs at: 1)) matches: (yFilteredLines at: (lcs at: 2)). lcs := lcs at: 3 ]! ! !TextDiffBuilder methodsFor: 'creating patches' stamp: 'MarcusDenker 9/30/2013 22:54' prior: 52578125! patchSequenceDoIfMatch: matchBlock ifInsert: insertBlock ifRemove: removeBlock "I'm the general purpose method to iterate through the patch sequence. See my senders to learn how to use me." | xLine xLineStream | xLineStream := xLines readStream. yLines do: [ :yLine | yLine hasMatch ifFalse: [ insertBlock value: yLine string ] ifTrue: [ [ (xLine := xLineStream next) isNil or: [ xLine == yLine match ] ] whileFalse: [ removeBlock value: xLine string ]. matchBlock value: yLine string ] ]. [ (xLine := xLineStream next) isNil ] whileFalse: [ removeBlock value: xLine string ]! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 10/1/2013 15:07' prior: 39246350! testSingleRemoteTempVar | ast | ast := (OCOpalExamples>>#singleRemoteTempVar) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 3. self assert: (ast scope lookupVar: 'index') isEscaping. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'theCollection') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. self assert: (ast scope lookupVar: 'theCollection') isTemp. self deny: (ast scope lookupVar: 'theCollection') isInstance. self deny: (ast scope lookupVar: 'index') isInstance. self deny: (ast scope lookupVar: 'block') isInstance. ! ! !OCASTCheckerTest methodsFor: 'testing - variables' stamp: 'MarcusDenker 10/1/2013 15:08' prior: 39247835! testsingleRemoteTempVarWrittenAfterClosedOver | ast | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. self nameAnalysisNoClosureIn: OCOpalExamples for: ast. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 2. self assert: (ast scope lookupVar: 'index') isWrite. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isEscaping. self assert: (ast scope lookupVar: 'block') isTemp. ! ! !FileModifyingSimpleServiceEntry methodsFor: 'performing service' stamp: 'nk 11/26/2002 12:08' prior: 21924870! performServiceFor: anObject | retval | retval := super performServiceFor: anObject. self changed: #fileListChanged. ^retval "is this used anywhere?"! ! !MczInstaller methodsFor: 'parsing' stamp: 'nicolascellier 6/2/2013 18:36' prior: 39727941! contentsForMember: member ^[(member contentStreamFromEncoding: 'utf8') text contents] on: ZnInvalidUTF8 do: [:exc | "Case of legacy encoding, presumably it is latin-1. But if contents starts with a null character, it might be a case of WideString encoded in UTF-32BE" | str | str := (member contentStreamFromEncoding: 'latin1') text. exc return: ((str peek = Character null and: [ str size \\ 4 = 0 ]) ifTrue: [WideString fromByteArray: str contents asByteArray] ifFalse: [str contents])]! ! !OCASTClosureAnalyzerTest methodsFor: 'tests - special cases' stamp: 'MarcusDenker 10/1/2013 15:08' prior: 39231521! testsingleRemoteTempVarWrittenAfterClosedOver | ast | ast := (OCOpalExamples>>#singleRemoteTempVarWrittenAfterClosedOver) parseTree. ast doSemanticAnalysis. self assert: ast scope isMethodScope. self assert: ast scope tempVars size = 1. self assert: ast scope tempVector size = 1. self assert: (ast scope lookupVar: 'index') isRemote. self assert: (ast scope lookupVar: 'index') definingScope = ast scope. self deny: (ast scope lookupVar: 'block') isRemote. ! ! !SettingBrowser methodsFor: 'user interface' stamp: 'MarcusDenker 9/30/2013 22:49' prior: 33142048! buildWindowIn: aWindow | statusView toolBar treeMorph toolBarY gap packageListView statusViewHeight | treeMorph := self treeMorphIn: aWindow. statusView := self statusViewIn: aWindow. statusViewHeight := 100. toolBar := self toolBarIn: aWindow. gap := 3. packageListView := self packageListViewIn: aWindow. toolBarY := toolBar minExtent y + gap. aWindow addMorph: toolBar fullFrame: ((0 @ 0 corner: 1 @ 0) asLayoutFrame topOffset: gap; bottomOffset: toolBarY + gap). aWindow addMorph: treeMorph fullFrame: ((0 @ 0 corner: 1 @ 0.99) asLayoutFrame topOffset: toolBarY + gap + gap; bottomOffset: statusViewHeight negated). aWindow addMorph: statusView fullFrame: ((0 @ 0.99 corner: 0.75 @ 1) asLayoutFrame topOffset: statusViewHeight negated). aWindow addMorph: packageListView fullFrame: ((0.75 @ 0.99 corner: 1 @ 1) asLayoutFrame topOffset: statusViewHeight negated). ^ aWindow! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'MarcusDenker 9/30/2013 22:56' prior: 50338125! forceChangesToDisk "Ensure that the changes file has been fully written to disk by closing and re-opening it. This makes the system more robust in the face of a power failure or hard-reboot." | changesFile | changesFile := SourceFiles at: 2. (changesFile isKindOf: FileStream) ifFalse: [ ^ self ]. changesFile flush. changesFile close. changesFile open: changesFile name forWrite: true. changesFile setToEnd! ! !SmalltalkImage methodsFor: 'compiler' stamp: 'MarcusDenker 10/1/2013 14:17'! recompile Smalltalk globals allClassesAndTraits do: [:classOrTrait | classOrTrait recompile] displayingProgress: 'Recompiling all classes and traits'. ! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 10/1/2013 14:15'! recompile self compileAll! ! !MultipleSettingDeclaration methodsFor: 'user interface' stamp: 'AlainPlantec 9/3/2010 17:04' prior: 27321940! fixedDomainValueNodeForAssociation: anAssociation | s | ^ (s := (SettingDeclaration new name: anAssociation key)) target: s; selector: #default; default: anAssociation value! ! !MultipleSettingDeclaration methodsFor: 'user interface' stamp: 'AlainPlantec 9/3/2010 17:04' prior: 27322227! fixedDomainValueNodeForObject: anObject | s | ^ (s := (SettingDeclaration new name: anObject asString)) target: s; selector: #default; default: anObject! ! !VTermInputDriver methodsFor: 'reading' stamp: 'MarcusDenker 9/30/2013 22:49' prior: 54612479! readCSI " Control Sequence Introducer mode " | character action | character := inStream next. action := ($0 <= character and: [ character <= $9 ]) ifTrue: [ self continueReadCSINumber: character asInteger - $0 asInteger ] ifFalse: [ csi at: character ifAbsent: [ self fail: character in: 'Control Sequence Introducer' ]]. action value! ! !Compiler class methodsFor: 'utilities' stamp: 'MarcusDenker 10/1/2013 14:20' prior: 19917692! recompileAll "Recompile all classes and traits in the system." Smalltalk image recompile ! ! !Compiler class methodsFor: 'utilities' stamp: 'MarcusDenker 10/1/2013 14:21' prior: 19917986! recompileAllFrom: firstName "Recompile all classes, starting with given name. usefull for debugging" Smalltalk globals allClassesAndTraitsDo: [:class | class name >= firstName ifTrue: [Transcript show: class name; cr. class recompile]] "Compiler recompileAllFrom: 'AAABodyShop'." ! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 10/1/2013 15:05' prior: 35001534! singleRemoteTempVar | index block theCollection | index := 0. block := [ theCollection add: [ index ]. index := index + 1 ]. [ index < 5 ] whileTrue: block. self assertValues: #(5 5 5 5 5)! ! !OCOpalExamples methodsFor: 'examples' stamp: 'MarcusDenker 10/1/2013 15:07' prior: 35001807! singleRemoteTempVarWrittenAfterClosedOver | index block | index := 0. block := [ index ]. index := index + 1. ! ! !SystemWindow methodsFor: 'menu actions' stamp: 'MarcusDenker 10/1/2013 11:23' prior: 69006227! fullscreenBounds "Answer the bounds that the receiver would take if expanded to fullscreen." ^ (RealEstateAgent maximumUsableAreaInWorld: self world) insetBy: self fullscreenMargin ! ! NaturalLanguageFormTranslator removeSelector: #translate:! NaturalLanguageFormTranslator removeSelector: #name:form:! NaturalLanguageFormTranslator removeSelector: #localeID:! NaturalLanguageFormTranslator removeSelector: #localeID! NaturalLanguageFormTranslator removeSelector: #generics! NaturalLanguageFormTranslator class removeSelector: #localeID:! NaturalLanguageFormTranslator class removeSelector: #isoLanguage:isoCountry:! NaturalLanguageFormTranslator class removeSelector: #isoLanguage:! NaturalLanguageFormTranslator class removeSelector: #cleanUp! NaturalLanguageFormTranslator class removeSelector: #cachedTranslations! Smalltalk globals removeClassNamed: #NaturalLanguageFormTranslator! ScrollPane removeSelector: #retractableScrollBar! ScrollPane removeSelector: #retractableOrNot! ScrollPane removeSelector: #retractable:! ScrollPane removeSelector: #addCustomMenuItems:hand:! LocaleID removeSelector: #translator! !Trait method! recompile self compileAll! ! !Trait method! recompile self compileAll! ! "Compiler"! "Morphic-Base"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Polymorph-Widgets"! "System-CommandLine"! "System-FilePackage"! "System-FileRegistry"! "System-Hashing"! "System-Installers"! "System-Localization"! "System-Settings"! "System-Support"! ----End fileIn----! ----QUIT----an Array(1 October 2013 3:24:28 pm) Pharo.image priorSource: 18706163! ----STARTUP----an Array(1 October 2013 3:30:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 October 2013 3:30:35 pm) Pharo-30437.image priorSource: 18731143! ----STARTUP----an Array(1 October 2013 3:53:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/1/2013 15:49' prior: 69038115! commentForCurrentUpdate ^ '11641 #isLiteral should only be true for literal objects --> everyone else should use isLiteralNode or isLiteralToken https://pharo.fogbugz.com/f/cases/11641'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/1/2013 15:49'! script117 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.19.mcz ConfigurationCommandLineHandler-Tests-EstebanLorenzano.5.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.134.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.933.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Pharo-Platform-MarcusDenker.4.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.103.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.925.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/1/2013 15:49'! update30438 "self new update30438" self withUpdateLog: '11641 #isLiteral should only be true for literal objects --> everyone else should use isLiteralNode or isLiteralToken https://pharo.fogbugz.com/f/cases/11641'. self loadTogether: self script117 merge: false. PluggableTextEditorMorph recompile. self flushCaches. ! ! "ScriptLoader30"! !RBSearchingLiteralRule methodsFor: 'private' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 31309527! isSearchingLiteralExpression: aMessageNode | equalNode expressionNode | equalNode := aMessageNode selector = #| ifTrue: [aMessageNode arguments first] ifFalse: [aMessageNode receiver]. expressionNode := equalNode receiver isLiteralNode ifTrue: [equalNode arguments first] ifFalse: [equalNode receiver]. ^self isSearchingLiteralExpression: aMessageNode for: expressionNode! ! !RBSearchingLiteralRule methodsFor: 'private' stamp: 'MarcusDenker 9/20/2013 15:03' prior: 31309997! isSearchingLiteralExpression: aSearchingNode for: anObjectNode | argument arguments | aSearchingNode isMessage ifFalse: [^false]. arguments := aSearchingNode arguments. arguments size = 1 ifFalse: [^false]. argument := arguments first. (#(#= #==) includes: aSearchingNode selector) ifTrue: [^(aSearchingNode receiver = anObjectNode and: [aSearchingNode arguments first isLiteralNode]) or: [aSearchingNode arguments first = anObjectNode and: [aSearchingNode receiver isLiteralNode]]]. aSearchingNode selector = #| ifTrue: [^(self isSearchingLiteralExpression: aSearchingNode receiver for: anObjectNode) and: [self isSearchingLiteralExpression: argument for: anObjectNode]]. aSearchingNode selector = #or: ifFalse: [^false]. argument isBlock ifFalse: [^false]. argument body statements size = 1 ifFalse: [^false]. ^(self isSearchingLiteralExpression: aSearchingNode receiver for: anObjectNode) and: [self isSearchingLiteralExpression: argument body statements first for: anObjectNode]! ! !RBParser methodsFor: 'private-parsing' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 30936841! parseNegatedNumber | token | (self nextToken isLiteralToken not or: [ self nextToken realValue isNumber not ]) ifTrue: [ ^ self parserError: 'only numbers may be negated' ]. token := RBLiteralToken value: self nextToken realValue negated start: currentToken start stop: nextToken stop. self step; step. ^ self literalNodeClass literalToken: token ! ! !RBRefactoryTyper methodsFor: 'assignments' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 31193181! guessTypeFromAssignment: aNode | type set newType | type := nil. aNode value isAssignment ifTrue: [^self guessTypeFromAssignment: (RBAssignmentNode variable: aNode variable value: aNode value value)]. aNode value isBlock ifTrue: [type := model classFor: [] class]. aNode value isLiteralNode ifTrue: [aNode value value isNil ifTrue: [^self]. type := model classFor: (self typeFor: aNode value value)]. aNode value isMessage ifTrue: [aNode value receiver isVariable ifTrue: [type := model classNamed: aNode value receiver name asSymbol]. aNode value selector = #asValue ifTrue: [type := model classNamed: #ValueHolder]. (#(#and: #or: #= #== #~= #~~ #<= #< #~~ #> #>=) includes: aNode value selector) ifTrue: [type := model classFor: Boolean]]. type isNil ifTrue: [^self]. set := variableTypes at: aNode variable name. newType := set detect: [:each | type includesClass: each] ifNone: [nil]. newType isNil ifTrue: [^self]. ((self rootClasses includes: newType) or: [ newType = (model classFor: Object) ]) ifTrue: [newType := type]. (bestGuesses at: aNode variable name ifAbsentPut: [Set new]) add: newType! ! !RBSmalllintTest methodsFor: 'tests' stamp: 'MarcusDenker 9/20/2013 15:35' prior: 31393884! testEquivalentSuperclassMethods | returnedEnvironment rule | RBSmalllintChecker runRule: (rule := RBEquivalentSuperclassMethodsRule new) onEnvironment: self smalllintTestEnvironment. returnedEnvironment := RBSelectorEnvironment new. returnedEnvironment addClass: RBSmalllintTestObject selector: #isLiteral. self checkRule: rule isEqualTo: returnedEnvironment! ! !IRSequence methodsFor: 'optimizing' stamp: 'MarcusDenker 9/20/2013 15:18' prior: 38894414! absorbConstantConditionalJumps: alreadySeen "Collapse sequences that look like: [if] goto s1 ... s1: pushConst: true/false goto s2 s2: if true/false goto s3 else s4 into: [if] goto s3/s4 These sequences are produced by and:/or: messages" | seq bool if | (alreadySeen includes: self) ifTrue: [^ self]. alreadySeen add: self. [(seq := self successorSequences) notEmpty "not return" and: [(seq := seq first "destination") size = 2 and: [(seq first isPushLiteral: [:obj | (bool := obj) isKindOf: Boolean]) and: [seq last isGoto and: [(if := seq last destination first) isIf]]]] ] whileTrue: [ "absorb" self last destination: (bool == if boolean ifTrue: [if destination] ifFalse: [if otherwise]). ]. self successorSequences do: [:instrs | instrs ifNotNil: [:i | i absorbConstantConditionalJumps: alreadySeen]]. ! ! !ManifestOpalCompilerCore class methodsFor: 'meta data' stamp: 'MarcusDenker 9/20/2013 15:19' prior: 34904428! ruleMethodHasNoTimeStampRuleV1TruePositive ^ #(#(#(#RGMethodDefinition #(#OCSemanticWarning #correctIn: #false)) #'2012-12-18T17:43:05.023+01:00') #(#(#RGMethodDefinition #(#OCAbstractLocalVariable #isUninitialized #false)) #'2012-12-18T17:43:10.236+01:00') #(#(#RGMethodDefinition #(#IRPrinter #pushRemoteTemp:inVector: #false)) #'2012-12-19T08:07:38.013+01:00') )! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 9/20/2013 15:04' prior: 44971406! emitToByDo: aMessageNode | step | step := aMessageNode arguments second. step isLiteralNode ifFalse: [self error: 'should not have been inlined']. step := step value. self emitToDo: aMessageNode step: step! ! !OCASTTranslator methodsFor: 'inline messages' stamp: 'MarcusDenker 9/20/2013 15:04' prior: 44971873! emitToDo: aMessageNode step: step | limit block iterator limitEmit | limit := aMessageNode arguments first. block := aMessageNode arguments last. iterator := block arguments first binding. limitEmit := [valueTranslator visitNode: limit]. limit isLiteralNode | limit isSelf | limit isSuper ifFalse: [ valueTranslator visitNode: limit. methodBuilder addTemp: (iterator name, #limit). methodBuilder storeTemp: (iterator name, #limit). methodBuilder popTop. limitEmit := [methodBuilder pushTemp: (iterator name, #limit)]]. "push start. allocate and initialize iterator" valueTranslator visitNode: aMessageNode receiver. iterator emitStore: methodBuilder. self isEffectTranslator ifTrue: [methodBuilder popTop]. methodBuilder jumpBackTarget: #start. iterator emitValue: methodBuilder. limitEmit value. methodBuilder send: (step > 0 ifTrue: [#<=] ifFalse: [#>=]). methodBuilder jumpAheadTo: #done if: false. effectTranslator visitInlinedBlockNode: block. iterator emitValue: methodBuilder. methodBuilder pushLiteral: step. methodBuilder send: #+. iterator emitStore: methodBuilder. methodBuilder popTop. methodBuilder jumpBackTo: #start. methodBuilder jumpAheadTarget: #done.! ! !OCBytecodeDecompilerTest methodsFor: 'tests - blocks' stamp: 'MarcusDenker 9/20/2013 15:05' prior: 35135959! testBlockWithTemp | method ir | method := ClassTestCase>>#targetClass. ir := method ir. "the block sequence of the block with the temp should not have a pushNil, as this is inserted later again" self assert: (ir allSequences at: 5) first isPushLiteral not.! ! !RBRefactoryDefinitionChange class methodsFor: 'private' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 36462319! definition: aString for: aController context: aDictionary | dictionary | dictionary := SmallDictionary new. aDictionary keysAndValuesDo: [ :key :node | dictionary at: key formattedCode put: (node isVariable ifTrue: [ node name ] ifFalse: [ node isLiteralNode ifTrue: [ node value ] ifFalse: [ node ] ]) ]. ^ self new definition: aString controller: aController; fillOutDefinition: dictionary; yourself! ! !RBReturnsBooleanAndOtherRule methodsFor: 'running' stamp: 'MarcusDenker 9/20/2013 15:08' prior: 31283160! checkMethod: aContext | hasBool hasSelf | hasBool := false. hasSelf := aContext parseTree lastIsReturn not. (matcher executeTree: aContext parseTree initialAnswer: Set new) do: [ :each | hasBool := hasBool or: [ (each isLiteralNode and: [ #(true false) includes: each value ]) or: [ (each isMessage and: [ #(and: or:) includes: each selector ]) ] ]. hasSelf := hasSelf or: [ (each isVariable and: [ each name = 'self' ]) or: [ (each isLiteralNode and: [ (#(true false) includes: each value) not ]) ] ] ]. (hasSelf and: [ hasBool ]) ifTrue: [ result addClass: aContext selectedClass selector: aContext selector ]! ! !RBMessageNode methodsFor: '*opalcompiler-core-inline' stamp: 'MarcusDenker 9/20/2013 15:06' prior: 46136553! isInlineToDo | block step | self methodNode compilationContext optionInlineToDo ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(to:do: to:by:do:) includes: self selector) ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size = 1 ifFalse: [ self notify: 'to:do: block must take one arg'. ^ false]. self arguments first isVariable ifTrue: [ (RBParseTreeSearcher new matches: self arguments first name , ' := `@object' do: [:n :a | true]; executeTree: block initialAnswer: false) ifTrue: [^ false]. ]. self arguments size = 3 "to:by:do:" ifTrue: [ step := self arguments second. step isLiteralNode ifFalse: [^ false]. step value = 0 ifTrue: [^ false]. ]. ^ true! ! !RBInlineParameterRefactoring methodsFor: 'preconditions' stamp: 'MarcusDenker 9/20/2013 15:06' prior: 30682984! myConditions self getNewSelector. expressions := self allExpressionsToInline. ^(RBCondition definesSelector: oldSelector in: class) & ((RBCondition withBlock: [expressions isEmpty not]) errorMacro: 'No callers. Use Remove Method instead.') & ((RBCondition withBlock: [expressions size = 1]) errorMacro: 'All values passed as this argument must be identical.') & ((RBCondition withBlock: [expressions first isLiteralNode]) errorMacro: 'All values passed must be literal.')! ! !IRTransformTest methodsFor: 'testing - adding' stamp: 'MarcusDenker 9/20/2013 15:18' prior: 35038793! testDelete | iRMethod aCompiledMethod | iRMethod := IRBuilder new pushLiteral: 1; pushLiteral: 2; returnTop; ir. ((iRMethod allSequences last) detect: [:each | each isPushLiteral: [:c | c == 2]]) delete. aCompiledMethod := iRMethod compiledMethod. self should: [(aCompiledMethod valueWithReceiver: nil arguments: #() ) = 1]. ! ! !RBBasicLintRuleTest class methodsFor: 'intention revealing' stamp: 'MarcusDenker 9/20/2013 15:05' prior: 30275092! ifTrueReturns | detector matcher | detector := self new. detector name: 'ifTrue:/ifFalse: returns instead of and:/or:''s'. matcher := RBParseTreeSearcher new. matcher addSearches: #('| `@temps | ``@.Statements. ``@object ifTrue: [^``@value1]. ^``@value2' '| `@temps | ``@.Statements. ``@object ifFalse: [^``@value1]. ^``@value2') -> [:aNode :answer | answer or: [| node | node := (aNode statements at: aNode statements size - 1) arguments first body statements last value. "``@value1" (node isLiteralNode and: [{true. false} includes: node value]) or: [node := aNode statements last value. node isLiteralNode and: [{true. false} includes: node value]]]]. detector methodBlock: [:context :result | (matcher executeTree: context parseTree initialAnswer: false) ifTrue: [result addClass: context selectedClass selector: context selector]]. ^detector! ! !RBBasicLintRuleTest class methodsFor: 'possible bugs' stamp: 'MarcusDenker 9/20/2013 15:06' prior: 30293766! returnsBooleanAndOther | detector matcher | detector := self new. detector name: 'Returns a boolean and non boolean'. matcher := RBParseTreeSearcher new. matcher addSearch: '^``@xObject' -> [:aNode :answer | answer add: aNode value; yourself]. detector methodBlock: [:context :result | | hasBool hasSelf | hasBool := false. hasSelf := context parseTree lastIsReturn not. (matcher executeTree: context parseTree initialAnswer: Set new) do: [:each | hasBool := hasBool or: [(each isLiteralNode and: [{true. false} includes: each value]) or: [each isMessage and: [#(#and: #or:) includes: each selector]]]. hasSelf := hasSelf or: [(each isVariable and: [each name = 'self']) or: [each isLiteralNode and: [({true. false} includes: each value) not]]]]. hasSelf & hasBool ifTrue: [result addClass: context selectedClass selector: context selector]]. ^detector! ! !RBBasicLintRuleTest class methodsFor: 'miscellaneous' stamp: 'MarcusDenker 9/20/2013 15:28' prior: 30287891! variableAssignedLiteral | detector | detector := self new. detector name: 'Variable is only assigned a single literal value'. detector result: nil references. detector classBlock: [:context :result | | allSubclasses | allSubclasses := context selectedClass withAllSubclasses. context selectedClass instVarNames do: [:each | | defClass selector | (allSubclasses inject: 0 into: [:sum :class | | sels | sels := class whichSelectorsWrite: each. sels size == 1 ifTrue: [selector := sels asArray first. defClass := class]. sum + sels size]) == 1 ifTrue: [| tree searcher | searcher := RBParseTreeSearcher new. searcher addSearch: (each , ' := ``@object') -> [:aNode :answer | answer isNil and: [aNode value isLiteralNode]]. tree := defClass parseTreeFor: selector. tree notNil ifTrue: [(searcher executeTree: tree initialAnswer: nil) == true ifTrue: [result addInstVar: each for: context selectedClass]]]]]. ^detector! ! !RBVariableAssignedLiteralRule methodsFor: 'running' stamp: 'MarcusDenker 9/20/2013 15:27' prior: 31524888! checkClass: aContext | allSubclasses | allSubclasses := aContext selectedClass withAllSubclasses. aContext selectedClass instVarNames do: [ :each | | defClass selector | (allSubclasses inject: 0 into: [ :sum :class | | sels | sels := class whichSelectorsAssign: each. sels size == 1 ifTrue: [ selector := sels asArray first. defClass := class ]. sum + sels size ]) == 1 ifTrue: [ | tree searcher | searcher := RBParseTreeSearcher new. searcher matches: each , ' := ``@object' do: [ :aNode :answer | answer isNil and: [ aNode value isLiteralNode ] ]. tree := defClass parseTreeFor: selector. tree notNil ifTrue: [ (searcher executeTree: tree initialAnswer: nil) == true ifTrue: [ result addClass: aContext selectedClass instanceVariable: each ] ] ] ]! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'MarcusDenker 9/20/2013 15:02' prior: 38983157! testFindBestNodeForClassItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classContext. self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isLiteralVariable and: [Smalltalk globals includesAssociation: node binding assoc ]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'MarcusDenker 9/20/2013 15:02' prior: 38983597! testFindBestNodeForClassVarItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classVariableContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es una var de clase?" self assert:( node binding isLiteralVariable and: [(Smalltalk globals includesAssociation: node binding assoc ) not]).! ! !RBIfTrueReturnsRule methodsFor: 'initialization' stamp: 'MarcusDenker 9/20/2013 15:08' prior: 30629804! initialize super initialize. self matcher matchesAnyOf: #( '| `@temps | ``@.Statements. ``@object ifTrue: [^``@value1]. ^``@value2' '| `@temps | ``@.Statements. ``@object ifFalse: [^``@value1]. ^``@value2' ) do: [ :node :answer | answer isNil ifTrue: [ | condition | condition := (node statements at: node statements size - 1) arguments first body statements last value. "``@value1" ((condition isLiteralNode and: [ #(true false) includes: condition value ]) or: [ condition := node statements last value. condition isLiteralNode and: [ #(true false) includes: condition value ] ]) ifTrue: [ node ] ifFalse: [ nil ] ] ifFalse: [ answer ] ]! ! !RBFloatEqualityComparisonRule methodsFor: 'initialization' stamp: 'MarcusDenker 9/20/2013 15:38' prior: 30599374! initialize super initialize. self matcher matchesAnyOf: #( '`{ :node | node isLiteralNode and: [ node value isFloat ] } = `@expr' '`{ :node | node isLiteralNode and: [ node value isFloat ] } ~= `@expr' '`@expr = `{ :node | node isLiteralNode and: [ node value isFloat ] }' '`@expr ~= `{ :node | node isLiteralNode and: [ node value isFloat ] }' ) do: [ :node :answer | node ]! ! !RBParserTest methodsFor: 'tests' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 30951954! testIntervals | tree | tree := self treeWithReallyEverything. tree nodesDo: [:each | (each parent isNil or: [each parent isCascade not and: [ each parent isLiteralNode not]]) ifTrue: [| newNode source | source := tree source copyFrom: each start to: each stop. each isPragma ifFalse: [ newNode := each isMethod ifTrue: [RBParser parseMethod: source] ifFalse: [RBParser parseExpression: source]. self compare: each to: newNode]]]! ! !RBParserTest methodsFor: 'tests' stamp: 'MarcusDenker 9/20/2013 15:07' prior: 68531735! testIsA | nodes types | nodes := Bag new. types := Set new. #(#(#isAssignment 1) #(#isBlock 1) #(#isCascade 1) #(#isLiteralNode 2) #(#isMessage 3) #(#isMethod 1) #(#isReturn 1) #(#isSequence 2) #(#isValue 15) #(#isVariable 7) #(#isUsed 10) #(#isDirectlyUsed 9) #(#hasParentheses 1) #(#isBinary 0) #(#isPrimitive 0) #(#isImmediateNode 10) #(#isWrite 1) #(#isRead 3)) do: [:each | each last timesRepeat: [nodes add: each first]. types add: each first]. self treeWithEverything nodesDo: [:each | types do: [:sel | ((each respondsTo: sel) and: [each perform: sel]) ifTrue: [nodes remove: sel]]]. self assert: nodes isEmpty! ! !OCLiteralVariable methodsFor: 'accessing' stamp: 'GiselaDecuzzi 5/22/2013 15:06' prior: 38980926! assoc ^ assoc! ! !OCLiteralVariable methodsFor: 'testing' stamp: 'ajh 7/8/2004 16:25' prior: 34932701! isGlobal ^ true! ! !OCLiteralVariable methodsFor: '*SmartSuggestions' stamp: 'MarcusDenker 9/20/2013 15:05' prior: 38981147! specialCommands (self isLiteralVariable and: [Smalltalk globals includesAssociation: self assoc ]) ifTrue:[ ^SugsSuggestionFactory commandsForClass]. (self isLiteralVariable and: [(Smalltalk globals includesAssociation: self assoc ) not]) ifTrue:[^SugsSuggestionFactory commandsForClassVariable]. ! ! !IRInstruction methodsFor: 'testing' stamp: 'MarcusDenker 9/20/2013 15:14'! isPushLiteral ^false! ! IRInstruction removeSelector: #isLiteral:! RBProgramNode removeSelector: #isLiteral! OCLiteralVariable removeSelector: #isLiteral! RBToken removeSelector: #isLiteral! LiteralNode removeSelector: #isLiteral! IRPushLiteral removeSelector: #isLiteral:! IRPushLiteral removeSelector: #isLiteral! "AST-Core"! "AST-Tests-Core"! "Compiler"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Refactoring-Changes"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Tests-Core"! "Refactoring-Tests-Critics"! "SmartSuggestions"! ----End fileIn----! ----QUIT----an Array(1 October 2013 3:53:24 pm) Pharo.image priorSource: 18731346! ----STARTUP----an Array(1 October 2013 3:59:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 October 2013 3:59:23 pm) Pharo-30438.image priorSource: 18762107! ----STARTUP----an Array(1 October 2013 8:23:43 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(1 October 2013 8:23:48 pm) Pharo.image priorSource: 18762310! ----STARTUP----an Array(1 October 2013 8:30:28 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 October 2013 8:30:28 pm) Pharo-30438.image priorSource: 18762523! ----STARTUP----an Array(2 October 2013 9:41:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/2/2013 21:38' prior: 69063298! commentForCurrentUpdate ^ '11748 ConfigurationCommandLineHandler should allow multiple groups https://pharo.fogbugz.com/f/cases/11748 11747 Delete working copy of RB-Pharo-Platform https://pharo.fogbugz.com/f/cases/11747 11744 some themes are abstract https://pharo.fogbugz.com/f/cases/11744'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/2/2013 21:38'! script118 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.224.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1629.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.134.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.60.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.935.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.103.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.925.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.572.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/2/2013 21:39'! update30439 "self new update30439" self withUpdateLog: '11748 ConfigurationCommandLineHandler should allow multiple groups https://pharo.fogbugz.com/f/cases/11748 11747 Delete working copy of RB-Pharo-Platform https://pharo.fogbugz.com/f/cases/11747 11744 some themes are abstract https://pharo.fogbugz.com/f/cases/11744'. self loadTogether: self script118 merge: false. ScriptLoader new deletePackage: 'Refactoring-Pharo-Platform'. . self flushCaches. ! ! "ScriptLoader30"! !UIThemeWatery class methodsFor: 'accessing' stamp: 'PavelKrivanek 10/1/2013 20:24'! isAbstract "Answer whether the receiver is considered to be abstract." ^false! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'DamienCassou 10/2/2013 15:27'! groups ^ (self optionAt: 'group') subStrings: {$,}! ! !ConfigurationCommandLineHandler methodsFor: 'actions' stamp: 'DamienCassou 10/2/2013 15:29' prior: 67221122! installVersion: aVersionName | metacelloVersion | self inform: 'Installing ', self configurationName, ' ', aVersionName. metacelloVersion := (self metacelloVersion: aVersionName). self handleMergeConflictDuring: [ (self hasOption: 'group') ifTrue: [ metacelloVersion load: self groups ] ifFalse: [ metacelloVersion load ]]. Smalltalk snapshot: true andQuit: true.! ! !ConfigurationCommandLineHandlerTest methodsFor: 'tests' stamp: 'DamienCassou 10/2/2013 15:27'! testGroups | cli | cli := self command: #('http://ss3.gemstone.com/ss/MetaRepoForPharo20' '--group=foo'). self assert: cli groups equals: {'foo'}. cli := self command: #('http://ss3.gemstone.com/ss/MetaRepoForPharo20' '--group=foo,boo'). self assert: cli groups equals: {'foo' . 'boo'}.! ! "ConfigurationCommandLineHandler-Core"! "ConfigurationCommandLineHandler-Tests"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(2 October 2013 9:41:22 pm) Pharo.image priorSource: 18762726! ----STARTUP----an Array(2 October 2013 9:47:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 October 2013 9:47:29 pm) Pharo-30439.image priorSource: 18775228! ----STARTUP----an Array(3 October 2013 10:19:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 10:16' prior: 69094678! commentForCurrentUpdate ^ '11734 Clean up the Object>>#veryDeepCopyWith: https://pharo.fogbugz.com/f/cases/11734 11735 Addressing GreekEnvironment undeclared in MiniImage https://pharo.fogbugz.com/f/cases/11735 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/3/2013 10:17'! script119 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.130.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.81.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1632.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.118.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.134.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.545.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.935.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.103.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-StephaneDucasse.11.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.925.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1284.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/3/2013 10:17'! update30440 "self new update30440" self withUpdateLog: '11734 Clean up the Object>>#veryDeepCopyWith: https://pharo.fogbugz.com/f/cases/11734 11735 Addressing GreekEnvironment undeclared in MiniImage https://pharo.fogbugz.com/f/cases/11735 '. self loadTogether: self script119 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CP1253TextConverter commentStamp: '' prior: 42146644! Text converter for CP1253. Windows code page used for Greek. ! !ISO88597TextConverter commentStamp: '' prior: 42345400! Text converter for ISO 8859-7. An international encoding used for Greek. ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'ClementBera 10/1/2013 11:04' prior: 44774831! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: aBlock! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'ClementBera 10/1/2013 10:32'! compiledMethodAt: selector ifPresent: anotherBlock ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifPresent: anotherBlock ifAbsent: aBlock! ! !HashedCollection methodsFor: 'copying' stamp: 'CamilloBruni 10/2/2013 19:29'! veryDeepCopyWith: deepCopier | copyOfSelf| copyOfSelf := super veryDeepCopyWith: deepCopier. "force Sets and Dictionaries to rehash" copyOfSelf rehash. ^ copyOfSelf! ! !CP1253TextConverter commentStamp: '' prior: 69118144! Text converter for CP1253. Windows code page used for Greek. ! !CP1253TextConverter class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 3/7/2012 21:37' prior: 18644065! byteToUnicodeSpec "ByteTextConverter generateByteToUnicodeSpec: 'http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT'" ^ #( 16r20AC nil 16r201A 16r0192 16r201E 16r2026 16r2020 16r2021 nil 16r2030 nil 16r2039 nil nil nil nil nil 16r2018 16r2019 16r201C 16r201D 16r2022 16r2013 16r2014 nil 16r2122 nil 16r203A nil nil nil nil 16r00A0 16r0385 16r0386 16r00A3 16r00A4 16r00A5 16r00A6 16r00A7 16r00A8 16r00A9 nil 16r00AB 16r00AC 16r00AD 16r00AE 16r2015 16r00B0 16r00B1 16r00B2 16r00B3 16r0384 16r00B5 16r00B6 16r00B7 16r0388 16r0389 16r038A 16r00BB 16r038C 16r00BD 16r038E 16r038F 16r0390 16r0391 16r0392 16r0393 16r0394 16r0395 16r0396 16r0397 16r0398 16r0399 16r039A 16r039B 16r039C 16r039D 16r039E 16r039F 16r03A0 16r03A1 nil 16r03A3 16r03A4 16r03A5 16r03A6 16r03A7 16r03A8 16r03A9 16r03AA 16r03AB 16r03AC 16r03AD 16r03AE 16r03AF 16r03B0 16r03B1 16r03B2 16r03B3 16r03B4 16r03B5 16r03B6 16r03B7 16r03B8 16r03B9 16r03BA 16r03BB 16r03BC 16r03BD 16r03BE 16r03BF 16r03C0 16r03C1 16r03C2 16r03C3 16r03C4 16r03C5 16r03C6 16r03C7 16r03C8 16r03C9 16r03CA 16r03CB 16r03CC 16r03CD 16r03CE nil )! ! !CP1253TextConverter class methodsFor: 'accessing' stamp: 'yo 2/19/2004 10:11' prior: 18645282! encodingNames ^ #('cp-1253') copy ! ! !CP1253TextConverter class methodsFor: 'as yet unclassified' stamp: '' prior: 18645521! initialize self initializeTables! ! !CP1253TextConverter class methodsFor: 'accessing' stamp: 'michael.rueger 2/2/2009 18:49' prior: 18645415! languageEnvironment ^GreekEnvironment! ! !ISO88597TextConverter commentStamp: '' prior: 69118277! Text converter for ISO 8859-7. An international encoding used for Greek. ! !ISO88597TextConverter class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 3/7/2012 21:39' prior: 23452133! byteToUnicodeSpec "ByteTextConverter generateByteToUnicodeSpec: 'http://unicode.org/Public/MAPPINGS/ISO8859/8859-7.TXT'" ^ #( nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil 16r00A0 16r2018 16r2019 16r00A3 16r20AC 16r20AF 16r00A6 16r00A7 16r00A8 16r00A9 16r037A 16r00AB 16r00AC 16r00AD nil 16r2015 16r00B0 16r00B1 16r00B2 16r00B3 16r0384 16r0385 16r0386 16r00B7 16r0388 16r0389 16r038A 16r00BB 16r038C 16r00BD 16r038E 16r038F 16r0390 16r0391 16r0392 16r0393 16r0394 16r0395 16r0396 16r0397 16r0398 16r0399 16r039A 16r039B 16r039C 16r039D 16r039E 16r039F 16r03A0 16r03A1 nil 16r03A3 16r03A4 16r03A5 16r03A6 16r03A7 16r03A8 16r03A9 16r03AA 16r03AB 16r03AC 16r03AD 16r03AE 16r03AF 16r03B0 16r03B1 16r03B2 16r03B3 16r03B4 16r03B5 16r03B6 16r03B7 16r03B8 16r03B9 16r03BA 16r03BB 16r03BC 16r03BD 16r03BE 16r03BF 16r03C0 16r03C1 16r03C2 16r03C3 16r03C4 16r03C5 16r03C6 16r03C7 16r03C8 16r03C9 16r03CA 16r03CB 16r03CC 16r03CD 16r03CE nil )! ! !ISO88597TextConverter class methodsFor: 'utilities' stamp: 'yo 2/10/2004 06:32' prior: 23453544! encodingNames ^ #('iso-8859-7' 'greek-iso-8859-8bit') copy ! ! !ISO88597TextConverter class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 3/7/2012 21:46' prior: 23453423! initialize self initializeTables! ! !ISO88597TextConverter class methodsFor: 'accessing' stamp: 'michael.rueger 2/2/2009 18:49' prior: 23453276! languageEnvironment ^GreekEnvironment! ! !Object methodsFor: 'copying' stamp: 'CamilloBruni 10/2/2013 19:39' prior: 28599240! veryDeepCopyWith: deepCopier "Copy me and the entire tree of objects I point to. An object in the tree twice is copied once, and both references point to him. deepCopier holds a dictionary of objects we have seen. Some classes refuse to be copied. Some classes are picky about which fields get deep copied." | class selfNumberOfInstanceVariables fieldOfSelf copyOfSelf currentClass hasVeryDeepInnerMethod currentNumberOfInstanceVariables | deepCopier references at: self ifPresent: [ :newer | "already copied" ^ newer]. class := self class. class isMeta ifTrue: [ "a metaclass" ^ self ]. copyOfSelf := self shallowCopy. deepCopier references at: self put: copyOfSelf. "remember" (class isVariable and: [class isPointers]) ifTrue: [ self basicSize to: 1 by: -1 do: [ :i | fieldOfSelf := self basicAt: i. copyOfSelf basicAt: i put: (deepCopier references at: fieldOfSelf ifAbsent: [ fieldOfSelf veryDeepCopyWith: deepCopier ])]]. "Ask each superclass if it wants to share (weak copy) any inst vars" copyOfSelf veryDeepInner: deepCopier. "other superclasses want all instance variables deep copied" currentClass := class. selfNumberOfInstanceVariables := class instSize. [ selfNumberOfInstanceVariables == 0 ] whileFalse: [ hasVeryDeepInnerMethod := currentClass includesSelector: #veryDeepInner:. currentNumberOfInstanceVariables := currentClass instSize - currentClass superclass instSize. hasVeryDeepInnerMethod ifTrue: ["skip inst vars" selfNumberOfInstanceVariables := selfNumberOfInstanceVariables - currentNumberOfInstanceVariables] ifFalse: [ currentNumberOfInstanceVariables timesRepeat: [ fieldOfSelf := self instVarAt: selfNumberOfInstanceVariables. copyOfSelf instVarAt: selfNumberOfInstanceVariables put: (deepCopier references at: fieldOfSelf ifAbsent: [ fieldOfSelf veryDeepCopyWith: deepCopier ]). selfNumberOfInstanceVariables := selfNumberOfInstanceVariables - 1 ]]. currentClass := currentClass superclass ]. ^ copyOfSelf ! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: aBlock! ! !Trait method! compiledMethodAt: selector ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifAbsent: aBlock! ! !Trait method! compiledMethodAt: selector ifPresent: anotherBlock ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifPresent: anotherBlock ifAbsent: aBlock! ! !Trait method! compiledMethodAt: selector ifPresent: anotherBlock ifAbsent: aBlock "Answer the compiled method associated with the argument, selector (a Symbol), a message selector in the receiver's method dictionary. If the selector is not in the dictionary, return the value of aBlock" ^ self methodDict at: selector ifPresent: anotherBlock ifAbsent: aBlock! ! "Collections-Abstract"! "Kernel"! "Multilingual-TextConversion"! "Multilingual-TextConverterOtherLanguages"! "Traits"! ----End fileIn----! ----QUIT----an Array(3 October 2013 10:19:23 am) Pharo.image priorSource: 18775431! ----STARTUP----an Array(3 October 2013 10:25:22 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 10:25:22 am) Pharo-30440.image priorSource: 18795055! ----STARTUP----an Array(3 October 2013 2:11:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 14:07' prior: 69107384! commentForCurrentUpdate ^ '7131 Do we need the code for retractable scrollbars? https://pharo.fogbugz.com/f/cases/7131 11753 Remove [aBlock value] https://pharo.fogbugz.com/f/cases/11753 11752 Small keys do: -> keysDo: replacement (and some critic cleanups) https://pharo.fogbugz.com/f/cases/11752'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/3/2013 14:08'! script120 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.22.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.6.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.83.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1633.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.120.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.136.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.547.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.57.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.936.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.103.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.925.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1286.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/3/2013 14:08'! update30441 "self new update30441" self withUpdateLog: '7131 Do we need the code for retractable scrollbars? https://pharo.fogbugz.com/f/cases/7131 11753 Remove [aBlock value] https://pharo.fogbugz.com/f/cases/11753 11752 Small keys do: -> keysDo: replacement (and some critic cleanups) https://pharo.fogbugz.com/f/cases/11752'. self loadTogether: self script120 merge: false. self flushCaches. ! ! "ScriptLoader30"! !StandardFonts class methodsFor: 'styles' stamp: 'MarcusDenker 10/2/2013 20:20' prior: 50836699! fontsSpecForStyleNamed: aSymbol | k small regular big | k := StrikeFont defaultFontKey. small := self smallPointSizeForStyleNamed: aSymbol. regular := self pointSizeForStyleNamed: aSymbol. big := self bigPointSizeForStyleNamed: aSymbol. ^ { {#defaultFont:. k. regular }. {#codeFont:. k. regular }. {#listFont:. k. regular }. {#menuFont:. k. regular }. {#windowTitleFont:. k. big }. {#balloonFont:. k. small }. {#haloFont:. k. small }. {#buttonFont:. k. regular } } ! ! !StandardFonts class methodsFor: 'menu' stamp: 'MarcusDenker 10/2/2013 20:20' prior: 50834885! setDefaultFonts: defaultFontsSpec "Since this is called from menus, we can take the opportunity to prompt for missing font styles." | fontNames map emphases | fontNames := defaultFontsSpec collect: [:array | array second]. map := IdentityDictionary new. emphases := IdentityDictionary new. fontNames do: [:originalName | | decoded style | decoded := TextStyle decodeStyleName: originalName. style := map at: originalName put: (TextStyle named: decoded second). emphases at: originalName put: decoded first. style ifNil: [map at: originalName put: (TextStyle default) ]]. defaultFontsSpec do: [:triplet | self perform: triplet first with: (((map at: triplet second) fontOfPointSize: triplet third) emphasized: (emphases at: triplet second))]! ! !StandardFonts class methodsFor: 'font accessing' stamp: 'MarcusDenker 10/2/2013 20:20' prior: 50832418! setFontsFromSpec: fontsSpec "set some fonts by interpreting fontsSpec. fontsSpec is a collection. Each fontsSpec element is an array with 3 elements: (1) the font accessor (i.e. #codeFont:) (2) the font family (i.e. 'Arial') (3) the font point size. To see an example of fontsSpec, inspect the result of StandardFonts getCurrentFontsSpec. " | fontNames map emphases | fontNames := fontsSpec collect: [:array | array second]. map := IdentityDictionary new. emphases := IdentityDictionary new. fontNames do: [:originalName | | decoded style | decoded := TextStyle decodeStyleName: originalName. style := map at: originalName put: (TextStyle named: decoded second). emphases at: originalName put: decoded first. style ifNil: [map at: originalName put: TextStyle default]]. fontsSpec do: [:triplet | self perform: triplet first with: (((map at: triplet second) fontOfPointSize: triplet third) emphasized: (emphases at: triplet second))]! ! !Object methodsFor: 'events-removing' stamp: 'MarcusDenker 10/2/2013 20:15' prior: 28616433! removeActionsSatisfying: aBlock self actionMap keysDo: [:eachEventSelector | self removeActionsSatisfying: aBlock forEvent: eachEventSelector ]! ! !PluggableTextMorph methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:25' prior: 29563466! resetExtent "Reset the extent while maintaining the current selection. Needed when resizing while the editor is active (when inside the pane)." | tempSelection | textMorph notNil ifTrue: ["the current selection gets munged by resetting the extent, so store it" tempSelection := self selectionInterval. super resetExtent. "adjust scroller" self extent: self extent. self setSelection: tempSelection]! ! !StrikeFont methodsFor: 'displaying' stamp: 'MarcusDenker 10/2/2013 20:20' prior: 50941228! displayMultiString: aString on: aBitBlt from: startIndex to: stopIndex at: aPoint kern: kernDelta baselineY: baselineY | nextWide destX leftX rightX glyphInfo char destY gfont charIndex | destX := aPoint x. charIndex := startIndex. glyphInfo := Array new: 5. [ charIndex <= stopIndex ] whileTrue: [ nextWide := aString indexOfWideCharacterFrom: charIndex to: stopIndex. nextWide = 0 ifTrue: [nextWide := stopIndex +1]. nextWide > charIndex ifTrue: [ destX := (aBitBlt displayString: aString from: charIndex to: nextWide -1 at: destX @ aPoint y strikeFont: self kern: kernDelta) x. charIndex := nextWide]. nextWide > stopIndex ifFalse: [ char := aString at: charIndex. (self hasGlyphOf: char) ifTrue: [ self glyphInfoOf: char into: glyphInfo. ] ifFalse: [self fallbackFont glyphInfoOf: char into: glyphInfo. ]. leftX := glyphInfo at: 2. rightX := glyphInfo at: 3. destY := glyphInfo at: 4. gfont := glyphInfo at: 5. (gfont == aBitBlt lastFont) ifFalse: [gfont installOn: aBitBlt]. aBitBlt displayGlyph: (glyphInfo at: 1) at: (destX @ (baselineY - destY)) left: leftX right: rightX font: self. destX := destX + (rightX - leftX + kernDelta). charIndex := charIndex + 1]]. ^ Array with: charIndex with: aPoint + (destX @ 0)! ! !StrikeFont methodsFor: 'character shapes' stamp: 'MarcusDenker 10/2/2013 20:20' prior: 50936392! makeControlCharsVisible | glyph | self characterToGlyphMap. glyph := self characterFormAt: Character space. glyph border: glyph boundingBox width: 1 fillColor: Color blue. self characterFormAt: (Character value: 133) put: glyph. "Keep tab(9), lf(10), cr(13) and space(32) transparent or whatever the user chose" #( 0 1 2 3 4 5 6 7 8 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ) do: [ :ascii | characterToGlyphMap at: ascii + 1 put: 133 ]! ! !StrikeFontSet methodsFor: 'private' stamp: 'MarcusDenker 10/2/2013 20:19' prior: 51013225! glyphInfoOf: aCharacter into: glyphInfoArray | index f code leftX | index := aCharacter leadingChar + 1. fontArray size < index ifTrue: [ ^ self questionGlyphInfoInto: glyphInfoArray ]. (f := fontArray at: index) ifNil: [ ^ self questionGlyphInfoInto: glyphInfoArray ]. code := aCharacter charCode. (code between: f minAscii and: f maxAscii) ifFalse: [ ^ self questionGlyphInfoInto: glyphInfoArray ]. leftX := f xTable at: code + 1. leftX < 0 ifTrue: [ ^ self questionGlyphInfoInto: glyphInfoArray ]. glyphInfoArray at: 1 put: f glyphs; at: 2 put: leftX; at: 3 put: (f xTable at: code + 2); at: 4 put: (f ascentOf: aCharacter); at: 5 put: self. ^ glyphInfoArray! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ClementBera 10/3/2013 10:29' prior: 26821288! submorphThat: block1 ifNone: block2 ^ submorphs detect: [:m | (block1 value: m) == true] ifNone: block2 ! ! !SystemWindow methodsFor: 'drawing' stamp: 'MarcusDenker 10/1/2013 21:33' prior: 51744775! areasRemainingToFill: aRectangle | areas | (areas := super areasRemainingToFill: aRectangle) isEmpty ifTrue: [^ areas "good news -- complete occlusion"]. "Check for special case that this is scrollbar damage" ((bounds topLeft - (14@0) corner: bounds bottomRight) containsRect: aRectangle) ifTrue: [paneMorphs do: [:p | (p isKindOf: ScrollPane) ifTrue: [^ Array new]]]. ^ areas! ! !CriticsCache methodsFor: 'add/remove' stamp: 'MarcusDenker 10/2/2013 20:12' prior: 33863262! itemRemoved: aItem critics valuesDo: [ :each | each remove: aItem ifAbsent: []]. toDos valuesDo: [ :each | each remove: aItem ifAbsent: []]. falsePositives valuesDo: [ :each | each remove: aItem ifAbsent: []]. self updateBrowser ! ! !CriticsCache methodsFor: 'protocol' stamp: 'MarcusDenker 10/2/2013 20:13' prior: 68470885! replaceAll: oldMethod by: newMethod critics valuesDo: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]]. falsePositives valuesDo: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]]. toDos valuesDo: [:each | (each includes: oldMethod) ifTrue: [ each remove: oldMethod. each add: newMethod ]] ! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'ClementBera 10/3/2013 10:30' prior: 29206581! becomeActiveDuring: aBlock "Make the receiver the ActiveWorld during the evaluation of aBlock. Note that this method does deliberately *not* use #ensure: to prevent re-installation of the world on project switches." | priorWorld priorHand priorEvent | priorWorld := ActiveWorld. priorHand := ActiveHand. priorEvent := ActiveEvent. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. "not in event cycle" aBlock on: Error do: [:ex | ActiveWorld := priorWorld. ActiveEvent := priorEvent. ActiveHand := priorHand. ex pass]! ! !RBMultiEnvironment methodsFor: '*Manifest-CriticBrowser' stamp: 'MarcusDenker 10/2/2013 20:17' prior: 30842324! removeClass: aClass environmentDictionaries keysDo: [ :key | (environmentDictionaries at: key) removeClass: aClass ]! ! !ProcessBrowser class methodsFor: 'initialization' stamp: 'MarcusDenker 10/2/2013 20:17' prior: 30000163! cleanUp "Remove terminated processes from my suspended list" self suspendedProcesses keysDo: [:ea | ea isTerminated ifTrue: [self suspendedProcesses removeKey: ea]]! ! !BlockClosure methodsFor: 'evaluating' stamp: 'ClementBera 10/3/2013 10:21' prior: 18230043! valueSupplyingAnswers: aListOfPairs "evaluate the block using a list of questions / answers that might be called upon to automatically respond to Object>>confirm: or FillInTheBlank requests" ^ self on: ProvideAnswerNotification do: [:notify | | answer caption | caption := notify messageText withSeparatorsCompacted. "to remove new lines" answer := aListOfPairs detect: [:each | caption = each first or: [(caption includesSubstring: each first caseSensitive: false) or: [(each first match: caption) or: [(String includesSelector: #matchesRegex:) and: [ [ caption matchesRegex: each first ] on: Error do: [:ignored | false ]]]]]] ifNone: [nil]. answer ifNotNil: [notify resume: answer second] ifNil: [ | outerAnswer | outerAnswer := ProvideAnswerNotification signal: notify messageText. outerAnswer ifNil: [notify resume] ifNotNil: [notify resume: outerAnswer]]]! ! !AbstractNautilusUI methodsFor: 'icon caches' stamp: 'MarcusDenker 10/2/2013 20:16' prior: 17293706! removeClassFromMethodsIconsCache: aClass self methodsIconsCache keysDo: [:method | " for overrides " method methodClass = aClass ifTrue: [ self removeFromClassesIconsCache: aClass. self methodsIconsCache removeKey: method ifAbsent: [ ]]].! ! !Semaphore methodsFor: 'mutual exclusion' stamp: 'ClementBera 10/3/2013 10:27' prior: 32947339! critical: mutuallyExcludedBlock ifCurtailed: terminationBlock "Evaluate mutuallyExcludedBlock only if the receiver is not currently in the process of running the critical: message. If the receiver is, evaluate mutuallyExcludedBlock after the other critical: message is finished." ^self critical:[mutuallyExcludedBlock ifCurtailed: terminationBlock] ! ! !Semaphore methodsFor: 'mutual exclusion' stamp: 'ClementBera 10/3/2013 10:27' prior: 32947796! critical: mutuallyExcludedBlock ifError: errorBlock "Evaluate mutuallyExcludedBlock only if the receiver is not currently in the process of running the critical: message. If the receiver is, evaluate mutuallyExcludedBlock after the other critical: message is finished." | blockValue hasError errMsg errRcvr | hasError := false. self critical:[ blockValue := mutuallyExcludedBlock ifError: [ :msg :rcvr| hasError := true. errMsg := msg. errRcvr := rcvr ]. ]. hasError ifTrue:[ ^errorBlock cull: errMsg cull: errRcvr]. ^blockValue! ! !Form methodsFor: 'displaying' stamp: 'MarcusDenker 10/2/2013 20:21' prior: 22491700! displayResourceFormOn: aForm "a special display method for blowing up resource thumbnails" self extent = aForm extent ifTrue: [ ^ self displayOn: aForm ]. "We've got no bilinear interpolation. Use WarpBlt instead" (WarpBlt current toForm: aForm) sourceForm: self destRect: aForm boundingBox; combinationRule: 3; cellSize: 2; warpBits. ! ! !Form methodsFor: 'transitions' stamp: 'MarcusDenker 10/2/2013 20:21' prior: 22534784! fadeImage: otherImage at: topLeft indexAndMaskDo: indexAndMaskBlock "This fade uses halftones as a blending hack. Zeros in the halftone produce the original image (self), and ones in the halftone produce the 'otherImage'. IndexAndMaskBlock gets evaluated prior to each cycle, and the resulting boolean determines whether to continue cycling." | index imageRect maskForm resultForm | imageRect := otherImage boundingBox. resultForm := self copy: (topLeft extent: imageRect extent). maskForm := Form extent: 32@32. index := 0. [indexAndMaskBlock value: (index := index+1) value: maskForm] whileTrue: [maskForm reverse. resultForm copyBits: imageRect from: resultForm at: 0@0 clippingBox: imageRect rule: Form over fillColor: maskForm. maskForm reverse. resultForm copyBits: imageRect from: otherImage at: 0@0 clippingBox: imageRect rule: Form under fillColor: maskForm. self copyBits: imageRect from: resultForm at: topLeft clippingBox: self boundingBox rule: Form over fillColor: nil. Display forceDisplayUpdate]! ! !EventManager class methodsFor: 'initialization' stamp: 'MarcusDenker 10/2/2013 20:16' prior: 21270287! flushEvents "Object flushEvents" self actionMaps keysAndValuesDo:[:rcvr :evtDict| rcvr ifNotNil:[ "make sure we don't modify evtDict while enumerating" evtDict keysDo: [:evtName| | msgSet | msgSet := evtDict at: evtName ifAbsent:[nil]. (msgSet == nil) ifTrue:[rcvr removeActionsForEvent: evtName]]]]. EventManager actionMaps finalizeValues. ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:12' prior: 32840397! extent: newExtent | oldW oldH wasHShowing wasVShowing noVPlease noHPlease minH minW | oldW := self width. oldH := self height. wasHShowing := self hIsScrollbarShowing. wasVShowing := self vIsScrollbarShowing. "Figure out the minimum width and height for this pane so that scrollbars will appear" noVPlease := self valueOfProperty: #noVScrollBarPlease ifAbsent: [false]. noHPlease := self valueOfProperty: #noHScrollBarPlease ifAbsent: [false]. minH := self scrollBarThickness + 16. minW := self scrollBarThickness + 20. noVPlease ifTrue:[ noHPlease ifTrue:[minH := 1. minW := 1 ] ifFalse:[minH := self scrollBarThickness ]. ] ifFalse:[ noHPlease ifTrue:[minH := self scrollBarThickness + 5]. ]. super extent: (newExtent max: (minW@minH)). "Now reset widget sizes" self resizeScrollBars; resizeScroller; hideOrShowScrollBars. "Now resetScrollDeltas where appropriate, first the vScrollBar..." ((self height ~~ oldH) or: [ wasHShowing ~~ self hIsScrollbarShowing]) ifTrue: [self vIsScrollbarShowing ifTrue: [ self vSetScrollDelta ]]. "...then the hScrollBar" ((self width ~~ oldW) or: [wasVShowing ~~ self vIsScrollbarShowing]) ifTrue: [self hIsScrollbarShowing ifTrue: [ self hSetScrollDelta ]]. ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:25' prior: 32858708! hHideScrollBar self hIsScrollbarShowing ifFalse: [^scroller offset: (self hMargin negated@scroller offset y)]. self removeMorph: hScrollBar. scroller offset: (self hMargin negated@scroller offset y). self resetExtent. ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:17' prior: 68985049! hIsScrollbarNeeded "Return whether the horz scrollbar is needed" "Don't show it if we were told not to." (self valueOfProperty: #noHScrollBarPlease ifAbsent: [false]) ifTrue: [^false]. "Always show it if we were told to" (self valueOfProperty: #hScrollBarAlways ifAbsent: [false]) ifTrue: [^true]. ^self hIsScrollable ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:17' prior: 32842656! hResizeScrollBar | topLeft h | (self valueOfProperty: #noHScrollBarPlease ifAbsent: [false]) ifTrue: [^self]. bounds ifNil: [ self fullBounds ]. h := self scrollBarThickness. topLeft := bounds bottomLeft + (borderWidth @ (h + borderWidth) negated). hScrollBar bounds: (topLeft extent: self hScrollBarWidth@ h) ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:18' prior: 32843167! hScrollBarWidth "Return the width of the horizontal scrollbar" | w | w := bounds width - (2 * borderWidth). self vIsScrollbarNeeded ifTrue: [w := w - self scrollBarThickness ]. ^w ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:18' prior: 32860877! hShowScrollBar self hIsScrollbarShowing ifTrue: [^self]. self hResizeScrollBar. self privateAddMorph: hScrollBar atIndex: 1. self resetExtent. ! ! !ScrollPane methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 10/1/2013 21:16' prior: 68985620! hideOrShowScrollBar "Hide or show the scrollbar depending on if the pane is scrolled/scrollable." "Don't show it if we were told not to." (self valueOfProperty: #noScrollBarPlease ifAbsent: [false]) ifTrue: [^self]. (self vIsScrollbarNeeded not and: [ self isScrolledFromTop not ]) ifTrue: [self vHideScrollBar]. (self vIsScrollbarNeeded or: [ self isScrolledFromTop ]) ifTrue: [self vShowScrollBar]. ! ! !ScrollPane methodsFor: 'initialization' stamp: 'MarcusDenker 10/1/2013 21:19' prior: 49696539! initializeScrollBars "initialize the receiver's scrollBar" (scrollBar := ScrollBar new model: self accessor: #vScrollBarValue) borderWidth: 1; borderColor: Color black. (hScrollBar := ScrollBar new model: self accessor: #hScrollBarValue) borderWidth: 1; borderColor: Color black. self initializeScroller. self addMorph: scrollBar. self addMorph: hScrollBar. self alwaysShowVScrollbar ifTrue: [ self alwaysShowVScrollBar: true ]. self alwaysHideHScrollbar ifTrue: [ self hideHScrollBarIndefinitely: true ] ifFalse: [ self alwaysShowHScrollbar ifTrue: [ self alwaysShowHScrollBar: true ] ]! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:20' prior: 69003586! innerBounds | inner | inner := super innerBounds. (submorphs includes: scrollBar) ifTrue:[ inner := (inner topLeft corner: (inner right - scrollBar width) @ inner bottom) ]. self hIsScrollbarShowing ifFalse: [ ^ inner] ifTrue: [ ^ inner topLeft extent: (inner extent - (0@self scrollBarThickness))]. ! ! !ScrollPane methodsFor: 'event handling' stamp: 'MarcusDenker 10/1/2013 21:21' prior: 32838887! mouseEnter: event hasFocus := true. owner isSystemWindow ifTrue: [owner paneTransition: event]. ! ! !ScrollPane methodsFor: 'event handling' stamp: 'MarcusDenker 10/1/2013 21:21' prior: 32839122! mouseLeave: event hasFocus := false. owner isSystemWindow ifTrue: [owner paneTransition: event] ! ! !ScrollPane methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 10/1/2013 21:13' prior: 32831482! scrollBarThickness "Includes border" ^ self theme scrollbarThickness ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:22' prior: 32846100! setScrollDeltas "Set the ScrollBar deltas, value and interval, based on the current scroll pane size, offset and range." scroller hasSubmorphs ifFalse: [scrollBar interval: 1.0. hScrollBar interval: 1.0. ^ self]. "NOTE: fullbounds commented out now -- trying to find a case where this expensive step is necessary -- perhaps there is a less expensive way to handle that case." "scroller fullBounds." "force recompute so that leftoverScrollRange will be up-to-date" self hideOrShowScrollBars. self vIsScrollbarShowing ifTrue:[ self vSetScrollDelta ]. self hIsScrollbarShowing ifTrue:[ self hSetScrollDelta ]. ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:23' prior: 32862672! vHideScrollBar self vIsScrollbarShowing ifFalse: [^self]. self removeMorph: scrollBar. self resetExtent ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:23' prior: 68986853! vIsScrollbarNeeded "Return whether the verticle scrollbar is needed" "Don't show it if we were told not to." (self valueOfProperty: #noVScrollBarPlease ifAbsent: [false]) ifTrue: [^false]. "Always show it if we were told to" (self valueOfProperty: #vScrollBarAlways ifAbsent: [false]) ifTrue: [^true]. ^self vIsScrollable ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:32' prior: 69004062! vResizeScrollBar | w topLeft | w := self scrollBarThickness. topLeft := bounds topRight - ((w + borderWidth - 0) @ (0 - borderWidth)). scrollBar bounds: (topLeft extent: w @ self vScrollBarHeight)! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/1/2013 21:24' prior: 32848261! vScrollBarHeight | h | h := bounds height - (2 * borderWidth). self hIsScrollbarNeeded ifTrue:[ h := h - self scrollBarThickness. ]. ^h ! ! !ScrollPane methodsFor: 'scrolling' stamp: 'MarcusDenker 10/1/2013 21:24' prior: 32863868! vShowScrollBar self vIsScrollbarShowing ifTrue: [^ self]. self vResizeScrollBar. self privateAddMorph: scrollBar atIndex: 1. self resetExtent ! ! ScrollPane removeSelector: #scrollBarFills:! ScrollPane removeSelector: #isAScrollbarShowing! ScrollPane removeSelector: #flatColoredScrollBarLook! ScrollPane removeSelector: #containsPoint:! "Graphics-Display Objects"! "Graphics-Fonts"! "Kernel"! "Manifest-CriticBrowser"! "Morphic-Base"! "Nautilus"! "Polymorph-Widgets"! "System-Object Events"! "Tools"! ----End fileIn----! ----QUIT----an Array(3 October 2013 2:11:32 pm) Pharo.image priorSource: 18795260! ----STARTUP----an Array(3 October 2013 2:21:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 2:21:30 pm) Pharo-30441.image priorSource: 18827727! ----STARTUP----an Array(3 October 2013 3:24:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 15:20' prior: 69127213! commentForCurrentUpdate ^ '11745 Remove unused iVar retractableScrollBar in ScrollPane https://pharo.fogbugz.com/f/cases/11745 11470 remove old ClassOrganizer https://pharo.fogbugz.com/f/cases/11470'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/3/2013 15:20'! script121 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.83.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.120.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.138.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.548.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.937.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.105.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1287.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/3/2013 15:20'! update30442 "self new update30442" self withUpdateLog: '11745 Remove unused iVar retractableScrollBar in ScrollPane https://pharo.fogbugz.com/f/cases/11745 11470 remove old ClassOrganizer https://pharo.fogbugz.com/f/cases/11470'. self loadTogether: self script121 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! toggleEnabled "Toggle the enabled state." self enabled: self enabled not! ! !Trait method! addToggleItemsToHaloMenu: aCustomMenu "Add toggle-items to the halo menu" super addToggleItemsToHaloMenu: aCustomMenu. aCustomMenu addUpdating: #enabledString target: self action: #toggleEnabled! ! !Trait method! enabledString "Answer the string to be shown in a menu to represent the 'enabled' status" ^ (self enabled) -> 'enabled' translated! ! !ScrollPane commentStamp: 'mk 8/9/2005 10:34' prior: 69022058! The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange. Basic clue about utilization of the ScrollPane class is given in: ScrollPane example1. ScrollPane example2.! !ClassOrganization commentStamp: '' prior: 48563619! This object is in charge of system notifications. It manages the class comment, the class comment stamp and a protocol organizer! !PseudoClassOrganization commentStamp: '' prior: 0! I'm a pseudo class organization. I override the use of RemoteString to store class coments. ! !PseudoClass methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 14:47' prior: 30097042! organization ^ organization ifNil: [organization := PseudoClassOrganization forClass: self ]. ! ! !ScrollPane commentStamp: 'mk 8/9/2005 10:34' prior: 69171081! The scroller (a transform) of a scrollPane is driven by the scrollBar. The scroll values vary from 0.0, meaning zero offset to 1.0 meaning sufficient offset such that the bottom of the scrollable material appears 3/4 of the way down the pane. The total distance to achieve this range is called the totalScrollRange. Basic clue about utilization of the ScrollPane class is given in: ScrollPane example1. ScrollPane example2.! !ScrollPane methodsFor: 'initialization' stamp: 'MarcusDenker 10/3/2013 14:25' prior: 69022584! initialize "initialize the state of the receiver" super initialize. hasFocus := false. self initializeScrollBars. self extent: self defaultExtent. self hideOrShowScrollBars. ! ! !ClassOrganization commentStamp: '' prior: 69171576! This object is in charge of system notifications. It manages the class comment, the class comment stamp and a protocol organizer! !PseudoClassOrganization commentStamp: '' prior: 69171770! I'm a pseudo class organization. I override the use of RemoteString to store class coments. ! !PseudoClassOrganization methodsFor: 'comment accessing' stamp: 'EstebanLorenzano 10/2/2013 14:45'! classComment "Answer the comment associated with the object that refers to the receiver." comment ifNil: [ ^ '' ]. ^ comment! ! !PseudoClassOrganization methodsFor: 'comment accessing' stamp: 'EstebanLorenzano 10/2/2013 14:45'! classComment: aChangeRecord comment := aChangeRecord! ! PseudoClassOrganizer removeSelector: #setDefaultList:! PseudoClassOrganizer removeSelector: #classComment:! PseudoClassOrganizer removeSelector: #classComment! PseudoClassOrganizer removeSelector: #categoriesSorted! Smalltalk globals removeClassNamed: #PseudoClassOrganizer! ClassOrganizer removeSelector: #sortCategories! ClassOrganizer removeSelector: #setDefaultList:! ClassOrganizer removeSelector: #renameCategory:toBe:! ClassOrganizer removeSelector: #removeEmptyCategories! ClassOrganizer removeSelector: #removeElement:! ClassOrganizer removeSelector: #removeCategory:! ClassOrganizer removeSelector: #ownCategories! ClassOrganizer removeSelector: #notifyOfRemovedProtocol:! ClassOrganizer removeSelector: #notifyOfChangedSelectorsOldDict:newDict:! ClassOrganizer removeSelector: #notifyOfChangedSelector:from:to:! ClassOrganizer removeSelector: #notifyOfChangedCategoryFrom:to:! ClassOrganizer removeSelector: #notifyOfChangedCategoriesFrom:to:! ClassOrganizer removeSelector: #notifyOfAddedProtocol:! ClassOrganizer removeSelector: #classify:under:suppressIfDefault:! ClassOrganizer removeSelector: #changeFromCategorySpecs:! ClassOrganizer removeSelector: #categoriesSorted! ClassOrganizer removeSelector: #addCategory:before:! ClassOrganizer class removeSelector: #cleanUp:! Smalltalk globals removeClassNamed: #ClassOrganizer! BasicClassOrganizer removeSelector: #subject! BasicClassOrganizer removeSelector: #setSubject:! BasicClassOrganizer removeSelector: #putCommentOnFile:numbered:moveSource:forClass:! BasicClassOrganizer removeSelector: #hasSubject! BasicClassOrganizer removeSelector: #hasComment! BasicClassOrganizer removeSelector: #fileOutCommentOn:moveSource:toFile:! BasicClassOrganizer removeSelector: #commentStamp:! BasicClassOrganizer removeSelector: #commentStamp! BasicClassOrganizer removeSelector: #commentRemoteStr! BasicClassOrganizer removeSelector: #classComment:stamp:! BasicClassOrganizer removeSelector: #classComment:! BasicClassOrganizer removeSelector: #classComment! BasicClassOrganizer class removeSelector: #class:defaultList:! BasicClassOrganizer class removeSelector: #class:! BasicClassOrganizer class removeSelector: #ambiguous! Smalltalk globals removeClassNamed: #BasicClassOrganizer! "Athens-Morphic"! "ClassOrganizer-Core"! "Kernel"! "Morphic-Base"! "Nautilus"! "NewList"! "Polymorph-Widgets"! "System-FilePackage"! "Tools"! ----End fileIn----! ----QUIT----an Array(3 October 2013 3:24:31 pm) Pharo.image priorSource: 18827930! ----STARTUP----an Array(3 October 2013 3:30:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 3:30:35 pm) Pharo-30442.image priorSource: 18844391! ----STARTUP----an Array(3 October 2013 5:16:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 17:14' prior: 69159882! commentForCurrentUpdate ^ '11757 NautilusMCBindings misses a reset method https://pharo.fogbugz.com/f/cases/11757 11758 Small fix to make FileContentBrowser work again https://pharo.fogbugz.com/f/cases/11758'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/3/2013 17:14'! script122 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.83.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.120.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.138.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.937.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.73.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1287.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/3/2013 17:14'! update30443 "self new update30443" self withUpdateLog: '11757 NautilusMCBindings misses a reset method https://pharo.fogbugz.com/f/cases/11757 11758 Small fix to make FileContentBrowser work again https://pharo.fogbugz.com/f/cases/11758'. self loadTogether: self script122 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NautilusMCBindings class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/3/2013 16:54'! cleanUp self reset! ! !NautilusMCBindings class methodsFor: 'accessing' stamp: 'MarcusDenker 10/3/2013 16:51'! reset Default := nil.! ! !PseudoClass methodsFor: 'organization updating' stamp: 'MarcusDenker 10/3/2013 17:09'! notifyOfRecategorizedSelector: aString from: aString2 to: aString3 ! ! "Nautilus"! "System-FilePackage"! ----End fileIn----! ----QUIT----an Array(3 October 2013 5:16:18 pm) Pharo.image priorSource: 18844594! ----STARTUP----an Array(3 October 2013 5:22:13 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 5:22:13 pm) Pharo-30443.image priorSource: 18856033! ----STARTUP----an Array(3 October 2013 8:01:09 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(3 October 2013 8:01:12 pm) Pharo.image priorSource: 18856236! ----STARTUP----an Array(3 October 2013 8:07:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 8:07:24 pm) Pharo-30443.image priorSource: 18856449! ----STARTUP----an Array(3 October 2013 8:52:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 20:50' prior: 69176546! commentForCurrentUpdate ^ '11762 update #cleanUpForProduction https://pharo.fogbugz.com/f/cases/11762 11764 unload Refactoring-Spelling https://pharo.fogbugz.com/f/cases/11764 11763 clean up Refactoring-Critics-Unused https://pharo.fogbugz.com/f/cases/11763 11761 class StrikeFontFixer is undocumented and the only users not called https://pharo.fogbugz.com/f/cases/11761'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/3/2013 20:50'! script123 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.150.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.159.mcz Manifest-CriticBrowser-MarcusDenker.120.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.138.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.937.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.75.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Spelling-MarcusDenker.41.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-StephaneDucasse.135.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.233.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-StephaneDucasse.5.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1288.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/3/2013 20:50'! update30444 "self new update30444" self withUpdateLog: '11762 update #cleanUpForProduction https://pharo.fogbugz.com/f/cases/11762 11764 unload Refactoring-Spelling https://pharo.fogbugz.com/f/cases/11764 11763 clean up Refactoring-Critics-Unused https://pharo.fogbugz.com/f/cases/11763 11761 class StrikeFontFixer is undocumented and the only users not called https://pharo.fogbugz.com/f/cases/11761'. self loadTogether: self script123 merge: false. ScriptLoader new unloadPackageNamed: 'Refactoring-Spelling'. self flushCaches. ! ! "ScriptLoader30"! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 10/3/2013 19:55' prior: 23530381! cleanUpForProduction "self new cleanUpForProduction" "trim MC ancestory information" MCVersionInfo allInstances do: [ :each | each instVarNamed: 'ancestors' put: nil ]. "delete logo" PolymorphSystemSettings showDesktopLogo: false. "unload packages" self classesForCleanUpInProduction do: [ :eachPattern | (Smalltalk allClassesAndTraits select: [ :each | eachPattern match: each name ]) do: [ :each | each removeFromSystem: true ] ]. self packagesForCleanUpInProduction do: [ :each | (MCPackage named: each) unload ]. Smalltalk globals at: #SUnitUnloader ifPresent:[ :unloader | unloader new unloadAll ]. (MCPackage named: 'HudsonBuildTools20') unload. (MCPackage named: 'Announcements-Help') unload. (MCPackage named: 'Regex-Help') unload. (MCPackage named: 'Deprecated30') unload. (MCPackage named: 'ScriptLoader30') unload. World resetWorldMenu. self cleanUpForRelease. ! ! StrikeFontFixer removeSelector: #storeEditedGlyphsOn:! StrikeFontFixer removeSelector: #mappingTable! StrikeFontFixer removeSelector: #initialize! StrikeFontFixer removeSelector: #forms! StrikeFontFixer removeSelector: #font:! StrikeFontFixer removeSelector: #displayOn:at:magnifyBy:! StrikeFontFixer removeSelector: #characterFormAt:at:! StrikeFontFixer class removeSelector: #newOn:! StrikeFontFixer class removeSelector: #initializeNoFontTable! StrikeFontFixer class removeSelector: #initialize! Smalltalk globals removeClassNamed: #StrikeFontFixer! RBMethodModifierSuperRule removeSelector: #severity! RBMethodModifierSuperRule removeSelector: #rationale! RBMethodModifierSuperRule removeSelector: #name! RBMethodModifierSuperRule removeSelector: #group! RBMethodModifierSuperRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBMethodModifierSuperRule! RBMethodModifierOverrideRule removeSelector: #severity! RBMethodModifierOverrideRule removeSelector: #rationale! RBMethodModifierOverrideRule removeSelector: #name! RBMethodModifierOverrideRule removeSelector: #group! RBMethodModifierOverrideRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBMethodModifierOverrideRule! RBMethodModifierFinalRule removeSelector: #severity! RBMethodModifierFinalRule removeSelector: #rationale! RBMethodModifierFinalRule removeSelector: #name! RBMethodModifierFinalRule removeSelector: #group! RBMethodModifierFinalRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBMethodModifierFinalRule! StrikeFont removeSelector: #fixForISO8859From:! StrikeFont class removeSelector: #fixForISO8859From:! "Graphics-Fonts"! "Refactoring-Critics"! "Tools"! RBSpellChecker removeSelector: #check:! RBSpellChecker class removeSelector: #unload! RBSpellChecker class removeSelector: #shutDown! RBSpellChecker class removeSelector: #initialize! RBSpellChecker class removeSelector: #default! RBSpellChecker class removeSelector: #createInstance! RBMacSpellChecker removeSelector: #primitiveCheckSpelling:startingAt:! RBMacSpellChecker removeSelector: #check:! RBMacSpellChecker class removeSelector: #primitiveGetUniqueSpellingTag! RBMacSpellChecker class removeSelector: #isSupported! RBMacSpellChecker class removeSelector: #initialize! Smalltalk globals removeClassNamed: #RBMacSpellChecker! RBInternalSpellChecker removeSelector: #words! RBInternalSpellChecker removeSelector: #validate:! RBInternalSpellChecker removeSelector: #url! RBInternalSpellChecker removeSelector: #loadData! RBInternalSpellChecker removeSelector: #initialize! RBInternalSpellChecker removeSelector: #filename! RBInternalSpellChecker removeSelector: #downloadData! RBInternalSpellChecker removeSelector: #directory! RBInternalSpellChecker removeSelector: #dataFile! RBInternalSpellChecker removeSelector: #check:! RBInternalSpellChecker class removeSelector: #createWordList:! Smalltalk globals removeClassNamed: #RBInternalSpellChecker! Smalltalk globals removeClassNamed: #RBSpellChecker! RBTemporaryVariableNamesSpellingRule removeSelector: #name! RBTemporaryVariableNamesSpellingRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBTemporaryVariableNamesSpellingRule! RBSpellingRule removeSelector: #severity! RBSpellingRule removeSelector: #rationale! RBSpellingRule removeSelector: #normalizeSelector:! RBSpellingRule removeSelector: #normalizeLiteral:on:! RBSpellingRule removeSelector: #normalizeLiteral:! RBSpellingRule removeSelector: #normalizeIdentifier:! RBSpellingRule removeSelector: #normalizeCamelCase:! RBSpellingRule removeSelector: #group! RBSpellingRule removeSelector: #checkSelector:! RBSpellingRule removeSelector: #checkLiteral:! RBSpellingRule removeSelector: #checkIdentifier:! RBSpellingRule removeSelector: #check:! RBSpellingRule class removeSelector: #isVisible! RBMethodSelectorsSpellingRule removeSelector: #name! RBMethodSelectorsSpellingRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBMethodSelectorsSpellingRule! RBMethodProtocolsSpellingRule removeSelector: #resultClass! RBMethodProtocolsSpellingRule removeSelector: #name! RBMethodProtocolsSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBMethodProtocolsSpellingRule! RBMethodCommentsSpellingRule removeSelector: #name! RBMethodCommentsSpellingRule removeSelector: #ignore:in:! RBMethodCommentsSpellingRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBMethodCommentsSpellingRule! RBLiteralValuesSpellingRule removeSelector: #name! RBLiteralValuesSpellingRule removeSelector: #initialize! RBLiteralValuesSpellingRule removeSelector: #checkMethod:! RBLiteralValuesSpellingRule removeSelector: #add:to:! Smalltalk globals removeClassNamed: #RBLiteralValuesSpellingRule! RBInstanceVariableNamesSpellingRule removeSelector: #resultClass! RBInstanceVariableNamesSpellingRule removeSelector: #name! RBInstanceVariableNamesSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBInstanceVariableNamesSpellingRule! RBClassVariableNamesSpellingRule removeSelector: #resultClass! RBClassVariableNamesSpellingRule removeSelector: #name! RBClassVariableNamesSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBClassVariableNamesSpellingRule! RBClassNamesSpellingRule removeSelector: #resultClass! RBClassNamesSpellingRule removeSelector: #name! RBClassNamesSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBClassNamesSpellingRule! RBClassCommentsSpellingRule removeSelector: #resultClass! RBClassCommentsSpellingRule removeSelector: #name! RBClassCommentsSpellingRule removeSelector: #ignore:in:! RBClassCommentsSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBClassCommentsSpellingRule! RBClassCategoriesSpellingRule removeSelector: #resultClass! RBClassCategoriesSpellingRule removeSelector: #name! RBClassCategoriesSpellingRule removeSelector: #checkClass:! Smalltalk globals removeClassNamed: #RBClassCategoriesSpellingRule! RBArgumentVariableNamesSpellingRule removeSelector: #name! RBArgumentVariableNamesSpellingRule removeSelector: #checkMethod:! Smalltalk globals removeClassNamed: #RBArgumentVariableNamesSpellingRule! Smalltalk globals removeClassNamed: #RBSpellingRule! ----End fileIn----! ----QUIT----an Array(3 October 2013 8:52:21 pm) Pharo.image priorSource: 18856652! ----STARTUP----an Array(3 October 2013 8:58:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 October 2013 8:58:12 pm) Pharo-30444.image priorSource: 18875491! ----STARTUP----an Array(4 October 2013 8:29:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(4 October 2013 8:29:13 am) Pharo.image priorSource: 18875694! ----STARTUP----an Array(4 October 2013 8:35:04 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 8:35:04 am) Pharo-30444.image priorSource: 18875907! ----STARTUP----an Array(4 October 2013 8:51:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 08:46' prior: 69188604! commentForCurrentUpdate ^ '11767 Fix codeCriticeBrowser and some critic driven cleanups for code critics https://pharo.fogbugz.com/f/cases/11767 11769 Some random refactorings https://pharo.fogbugz.com/f/cases/11769'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 08:47' prior: 68644814! script100 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerModel-MarcusDenker.60.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.123.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.940.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.44.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.127.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1291.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 08:47'! update30445 "self new update30445" self withUpdateLog: '11767 Fix codeCriticeBrowser and some critic driven cleanups for code critics https://pharo.fogbugz.com/f/cases/11767 11769 Some random refactorings https://pharo.fogbugz.com/f/cases/11769'. self loadTogether: self script100 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30443! ScriptLoader removeSelector: #update30442! ScriptLoader removeSelector: #update30441! ScriptLoader removeSelector: #update30440! ScriptLoader removeSelector: #update30439! ScriptLoader removeSelector: #update30438! ScriptLoader removeSelector: #update30437! ScriptLoader removeSelector: #update30436! ScriptLoader removeSelector: #update30435! ScriptLoader removeSelector: #update30434! ScriptLoader removeSelector: #update30433! ScriptLoader removeSelector: #update30432! ScriptLoader removeSelector: #update30431! ScriptLoader removeSelector: #update30430! ScriptLoader removeSelector: #update30429! ScriptLoader removeSelector: #update30428! ScriptLoader removeSelector: #update30427! ScriptLoader removeSelector: #update30426! ScriptLoader removeSelector: #update30425! ScriptLoader removeSelector: #update30424! ScriptLoader removeSelector: #update30423! ScriptLoader removeSelector: #update30422! ScriptLoader removeSelector: #update30421! ScriptLoader removeSelector: #update30420! ScriptLoader removeSelector: #update30419! ScriptLoader removeSelector: #update30418! ScriptLoader removeSelector: #script123! ScriptLoader removeSelector: #script122! ScriptLoader removeSelector: #script121! ScriptLoader removeSelector: #script120! ScriptLoader removeSelector: #script119! ScriptLoader removeSelector: #script118! ScriptLoader removeSelector: #script117! ScriptLoader removeSelector: #script116! ScriptLoader removeSelector: #script115! ScriptLoader removeSelector: #script114! ScriptLoader removeSelector: #script113! ScriptLoader removeSelector: #script112! ScriptLoader removeSelector: #script111! ScriptLoader removeSelector: #script110! ScriptLoader removeSelector: #script109! ScriptLoader removeSelector: #script108! ScriptLoader removeSelector: #script107! ScriptLoader removeSelector: #script106! ScriptLoader removeSelector: #script105! ScriptLoader removeSelector: #script104! ScriptLoader removeSelector: #script103! ScriptLoader removeSelector: #script102! ScriptLoader removeSelector: #script101! "ScriptLoader30"! !RGMethodDefinition commentStamp: 'VeronicaUquillas 9/18/2011 16:00' prior: 42605191! RGMethodDefinition is a concrete representation of methods. It can be used to build browser for methods that are not in the image. It is polymorphic with CompiledMethod. * We can ask a RGMethodDefinition for its selector using the selector message. Example: (Point>>#dist:) asRingDefinition selector -> #dist We can also ask the ring object representation of its class or the Smalltalk class actually implementing the corresponding compiledMethod. * To access the ring class definition name, use parentName aRGMethodDefinition parentName Example: (Point>>#dist:) asRingDefinition parentName -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition parent Example: aRGMethodDefinition(Point>>#dist:) parent -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realParent aRGMethodDefinition realParent Example: (Point>>#dist:) asRingDefinition realParent -> Point Now a RingEntityDefinition offers two APIs: one that is generic and works for all the source code entities and this is the one we just presented: parent, parentName and realParent. Having such interface is important to build generic tools that could manipulate any entities in a polymorphic way (yes no isKindOf: everywhere). In addition, a ring method definition offers a specific interface that should only be used when you know that you are solely manipulate specific entity such as class element: method definition, class comment, and variables. Here is the equivalence table realParent realClass parent ringClass parentName className * The message class returns the class of the object :). Example: (Point>>#dist:) asRingDefinition class -> RingMethodDefinition * The message className returns the name of the ring class defining the reingMethodDefinition. Example: (Point>>#dist:) asRingDefinition className -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition ringClass Example: aRGMethodDefinition(Point>>#dist:) ringClass -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realClass aRGMethodDefinition realClass Example: (Point>>#dist:) asRingDefinition realClass -> Point ! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 68137957! See rationale! !CriticBrowser commentStamp: '' prior: 68381670! I display code critics, the results obtained when running a lint rule. Example: | rule env | rule := RBExcessiveArgumentsRule new. env := (RBPackageEnvironment packageName: 'Manifest-Core'). (CriticBrowser openOnRule: rule onEnvironment: env).! !SystemWindow methodsFor: 'stepping' stamp: 'MarcusDenker 10/3/2013 23:49' prior: 51775824! stepTime ^ model ifNotNil: [model stepTimeIn: self] ifNil: [200] "milliseconds"! ! !CriticsCache methodsFor: 'private' stamp: 'MarcusDenker 10/3/2013 22:32' prior: 33864080! logFalsePositiveInManifest | removeFp addFp | falsePositives keysAndValuesDo: [ :rule :criticss | removeFp := (checker falsePositiveOf: rule) \ criticss. addFp := criticss \ (checker falsePositiveOf: rule). (removeFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | self removeAllCriticToFalsePositive: value forRule: rule on: manifestBuilder ]. (addFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | (manifestBuilder rejectRules includes: rule class uniqueIdentifierName) ifFalse: [ self addAllCriticToFalsePositive: value forRule: rule on: manifestBuilder ] ] ]! ! !CriticsCache methodsFor: 'private' stamp: 'MarcusDenker 10/3/2013 22:31' prior: 33865814! logToDosInManifest | removeFp addFp | toDos keysAndValuesDo: [ :rule :criticss | removeFp := (checker toDoOf: rule) \ criticss. addFp := criticss \ (checker toDoOf: rule). (removeFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | self removeAllCriticToToDo: value forRule: rule on: manifestBuilder ]. (addFp groupedBy: [ :each | self builderManifestClass of: each ]) keysAndValuesDo: [ :manifestBuilder :value | (manifestBuilder rejectRules includes: rule class uniqueIdentifierName) ifFalse: [ self addAllCriticToToDo: value forRule: rule on: manifestBuilder ] ] ]! ! !PluggableListMorph methodsFor: 'menus' stamp: 'MarcusDenker 10/3/2013 23:48' prior: 29450980! copySelectionToClipboard "Copy my selected item to the clipboard as a string" self selection ifNotNil: [ Clipboard clipboardText: self selection asString ] ifNil: [ self flash ]! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'MarcusDenker 10/3/2013 22:29' prior: 45902152! nextAction | rules rbRule | self delete. rules := selectedModel roots. rules do: [ :each | each leaves do: [ :leave | (selectRule anySatisfy: [ :r | r = leave ]) ifFalse: [ each removeRule: leave ] ] ]. rules := rules reject: [ :each | each rules isEmpty ]. rbRule := RBCompositeLintRule new name: self defaultRulesRootName; rules: rules; yourself. CriticWorkingConfiguration current rule: rbRule; environment: environment; removeTestCase: removeTestCase. CriticBrowser openOnWorkspace: CriticWorkingConfiguration current! ! !MultiCharacterBlockScanner methodsFor: 'scanning' stamp: 'MarcusDenker 10/3/2013 23:52' prior: 27251837! characterBlockAtPoint: aPoint index: index in: textLine "This method is the Morphic characterBlock finder. It combines MVC's characterBlockAtPoint:, -ForIndex:, and buildCharcterBlock:in:" | runLength lineStop stopCondition | line := textLine. rightMargin := line rightMargin. lastIndex := line first. self setStopConditions. "also sets font" characterIndex := index. " == nil means scanning for point" characterPoint := aPoint. (characterPoint isNil or: [characterPoint y > line bottom]) ifTrue: [characterPoint := line bottomRight]. (text isEmpty or: [(characterPoint y < line top or: [characterPoint x < line left]) or: [characterIndex notNil and: [characterIndex < line first]]]) ifTrue: [^ (CharacterBlock new stringIndex: line first text: text topLeft: line leftMargin@line top extent: 0 @ textStyle lineGrid) textLine: line]. destX := leftMargin := line leftMarginForAlignment: alignment. destY := line top. runLength := text runLengthFor: line first. lineStop := characterIndex ifNotNil: [characterIndex "scanning for index"] ifNil: [line last "scanning for point"]. runStopIndex := lastIndex + (runLength - 1) min: lineStop. lastCharacterExtent := 0 @ line lineHeight. spaceCount := 0. [false] whileFalse: [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: characterPoint x stopConditions: stopConditions kern: kern. "see setStopConditions for stopping conditions for character block operations." self lastCharacterExtentSetX: (specialWidth ifNil: [font widthOf: (text at: lastIndex)] ifNotNil: [specialWidth]). (self perform: stopCondition) ifTrue: [characterIndex ifNil: [ "Result for characterBlockAtPoint: " (stopCondition ~~ #cr and: [ lastIndex == line last and: [ aPoint x > ((characterPoint x) + (lastCharacterExtent x / 2)) ]]) ifTrue: [ "Correct for right half of last character in line" ^ (CharacterBlock new stringIndex: lastIndex + 1 text: text topLeft: characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 0) extent: 0 @ lastCharacterExtent y) textLine: line ]. ^ (CharacterBlock new stringIndex: lastIndex text: text topLeft: characterPoint + (font descentKern @ 0) extent: lastCharacterExtent - (font baseKern @ 0)) textLine: line] ifNotNil: ["Result for characterBlockForIndex: " ^ (CharacterBlock new stringIndex: characterIndex text: text topLeft: characterPoint + ((font descentKern) - kern @ 0) extent: lastCharacterExtent) textLine: line]]]! ! !LazyListMorph methodsFor: 'list access' stamp: 'MarcusDenker 10/3/2013 23:38' prior: 24330174! getListSize "return the number of items in the list" ^listSource ifNil: [ 0 ] ifNotNil: [ :source | source getListSize] ! ! !MultiByteBinaryOrTextStream methodsFor: 'public' stamp: 'MarcusDenker 10/3/2013 23:52' prior: 27214410! next: anInteger | multiString | self isBinary ifTrue: [^ (super next: anInteger) asByteArray]. multiString := WideString new: anInteger. 1 to: anInteger do: [:index | | character | (character := self next) ifNotNil: [ multiString at: index put: character ] ifNil: [ multiString := multiString copyFrom: 1 to: index - 1. ^ multiString ] ]. ^ multiString. ! ! !ChangeSet class methodsFor: 'services' stamp: 'MarcusDenker 10/3/2013 23:44' prior: 18862058! assuredChangeSetNamed: aName "Answer a change set of the given name. If one already exists, answer that, else create a new one and answer it." ^ (self named: aName) ifNotNil: [:existing | existing] ifNil: [self basicNewChangeSet: aName]! ! !CodeHolder methodsFor: 'misc' stamp: 'MarcusDenker 10/3/2013 23:45' prior: 19461190! useSelector: incomingSelector orGetSelectorAndSendQuery: querySelector to: queryPerformer "If incomingSelector is not nil, use it, else obtain a selector from user type-in. Using the determined selector, send the query to the performer provided." incomingSelector ifNotNil: [queryPerformer perform: querySelector with: incomingSelector] ifNil: [| aSelector | aSelector :=UIManager default request: 'Type selector:' initialAnswer: 'flag:'. aSelector isEmptyOrNil ifFalse: [(Symbol hasInterned: aSelector ifTrue: [:aSymbol | queryPerformer perform: querySelector with: aSymbol]) ifFalse: [self inform: 'no such selector']]]! ! !TransformMorph methodsFor: 'layout' stamp: 'MarcusDenker 10/3/2013 23:51' prior: 53494566! submorphBounds "Answer, in owner coordinates, the bounds of my visible submorphs, or my bounds" ^ (self localVisibleSubmorphBounds ifNotNil: [ :box |transform localBoundsToGlobal: box ] ifNil: [ self bounds ]) truncated. ! ! !Morph methodsFor: 'layout' stamp: 'MarcusDenker 10/3/2013 23:34' prior: 26732938! doLayoutIn: layoutBounds "Compute a new layout based on the given layout bounds." "Note: Testing for #bounds or #layoutBounds would be sufficient to figure out if we need an invalidation afterwards but #outerBounds is what we need for all leaf nodes so we use that." | box priorBounds | priorBounds := self outerBounds. submorphs isEmpty ifTrue: [^fullBounds := priorBounds]. "Send #ownerChanged to our children" submorphs do: [:m | m ownerChanged]. self layoutPolicy ifNotNil: [:layout | layout layout: self in: layoutBounds]. self adjustLayoutBounds. fullBounds := self privateFullBounds. box := self outerBounds. box = priorBounds ifFalse: [self invalidRect: (priorBounds quickMerge: box)]! ! !Morph methodsFor: 'accessing' stamp: 'MarcusDenker 10/3/2013 23:47' prior: 26622263! highlightColor ^ (self valueOfProperty: #highlightColor) ifNotNil: [:val | val ifNil: [self error: 'nil highlightColor']] ifNil: [owner ifNil: [self color] ifNotNil: [owner highlightColor]]! ! !Morph methodsFor: 'layout-properties' stamp: 'MarcusDenker 10/3/2013 23:32' prior: 26752484! layoutInset "Return the extra inset for layouts" ^ self layoutProperties ifNil: [ 0 ] ifNotNil: [ :props | props layoutInset ]! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/3/2013 23:49' prior: 21837871! selectedDirectoryName ^ self selectedFileDirectory ifNotNil: [ :dir | dir basename ]! ! !FileDialogWindow methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/3/2013 23:50' prior: 21838523! selectedFileName ^ self selectedFileEntry ifNotNil: [ :dir | dir basename ]! ! !MorphTreeMorph methodsFor: 'accessing colors' stamp: 'MarcusDenker 10/3/2013 23:48' prior: 26952181! lineColorForNode: aNode "Answer a good color to use for drawing the lines that connect members of the hierarchy view. Used the cached color, or derive it if necessary by finding the receiver or the first owner (up to my root) that is not transparent, then picking a contrasting color. Fall back to black if all my owners are transparent." ^ lineColorBlock ifNotNil: [lineColorBlock value: aNode] ifNil: [ | colored | colored := self color isTransparent ifTrue: [self firstOwnerSuchThat: [:o | o isWorldOrHandMorph not and: [o color isTransparent not]]] ifFalse: [self]. colored ifNil: [Color black] ifNotNil: [colored color luminance > 0.5 ifTrue: [Color black] ifFalse: [Color white]]] ! ! !CharacterBlockScanner methodsFor: 'scanning' stamp: 'MarcusDenker 10/3/2013 23:45' prior: 18943387! characterBlockAtPoint: aPoint index: index in: textLine "This method is the Morphic characterBlock finder. It combines MVC's characterBlockAtPoint:, -ForIndex:, and buildCharcterBlock:in:" | runLength lineStop done stopCondition | line := textLine. rightMargin := line rightMargin. lastIndex := line first. self setStopConditions. "also sets font" characterIndex := index. " == nil means scanning for point" characterPoint := aPoint. (characterPoint isNil or: [characterPoint y > line bottom]) ifTrue: [characterPoint := line bottomRight]. (text isEmpty or: [(characterPoint y < line top or: [characterPoint x < line left]) or: [characterIndex notNil and: [characterIndex < line first]]]) ifTrue: [^ (CharacterBlock new stringIndex: line first text: text topLeft: line leftMargin@line top extent: 0 @ textStyle lineGrid) textLine: line]. destX := leftMargin := line leftMarginForAlignment: alignment. destY := line top. runLength := text runLengthFor: line first. lineStop := characterIndex ifNotNil: [characterIndex "scanning for index"] ifNil: [line last "scanning for point"]. runStopIndex := lastIndex + (runLength - 1) min: lineStop. lastCharacterExtent := 0 @ line lineHeight. spaceCount := 0. done := false. [done] whileFalse: [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: characterPoint x stopConditions: stopConditions kern: kern. "see setStopConditions for stopping conditions for character block operations." self lastCharacterExtentSetX: (specialWidth ifNil: [font widthOf: (text at: lastIndex)] ifNotNil: [specialWidth]). (self perform: stopCondition) ifTrue: [characterIndex ifNil: [ "Result for characterBlockAtPoint: " (stopCondition ~~ #cr and: [ lastIndex == line last and: [ aPoint x > ((characterPoint x) + (lastCharacterExtent x / 2)) ]]) ifTrue: [ "Correct for right half of last character in line" ^ (CharacterBlock new stringIndex: lastIndex + 1 text: text topLeft: characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 0) extent: 0 @ lastCharacterExtent y) textLine: line ]. ^ (CharacterBlock new stringIndex: lastIndex text: text topLeft: characterPoint + (font descentKern @ 0) extent: lastCharacterExtent - (font baseKern @ 0)) textLine: line] ifNotNil: ["Result for characterBlockForIndex: " ^ (CharacterBlock new stringIndex: characterIndex text: text topLeft: characterPoint + ((font descentKern) - kern @ 0) extent: lastCharacterExtent) textLine: line]]]! ! !RBCompositeLintRule class methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/3/2013 22:26' prior: 34162690! removedRules ^ {(RBCompositeLintRule new name: 'Spelling'). RBMissingTranslationsInMenusRule new. RBGuardingClauseRule new. RBAssignmentWithoutEffectRule new. RBUtilityMethodsRule new. RBMethodHasNoTimeStampRule new. } ! ! !ScrollPane methodsFor: 'geometry' stamp: 'MarcusDenker 10/3/2013 23:33' prior: 32847154! vLeftoverScrollRange "Return the entire scrolling range minus the currently viewed area." scroller hasSubmorphs ifFalse:[^0]. ^ (self vTotalScrollRange - self vScrollBarHeight roundTo: self scrollDeltaHeight) max: 0 ! ! !RGMethodDefinition commentStamp: 'VeronicaUquillas 9/18/2011 16:00' prior: 69220925! RGMethodDefinition is a concrete representation of methods. It can be used to build browser for methods that are not in the image. It is polymorphic with CompiledMethod. * We can ask a RGMethodDefinition for its selector using the selector message. Example: (Point>>#dist:) asRingDefinition selector -> #dist We can also ask the ring object representation of its class or the Smalltalk class actually implementing the corresponding compiledMethod. * To access the ring class definition name, use parentName aRGMethodDefinition parentName Example: (Point>>#dist:) asRingDefinition parentName -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition parent Example: aRGMethodDefinition(Point>>#dist:) parent -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realParent aRGMethodDefinition realParent Example: (Point>>#dist:) asRingDefinition realParent -> Point Now a RingEntityDefinition offers two APIs: one that is generic and works for all the source code entities and this is the one we just presented: parent, parentName and realParent. Having such interface is important to build generic tools that could manipulate any entities in a polymorphic way (yes no isKindOf: everywhere). In addition, a ring method definition offers a specific interface that should only be used when you know that you are solely manipulate specific entity such as class element: method definition, class comment, and variables. Here is the equivalence table realParent realClass parent ringClass parentName className * The message class returns the class of the object :). Example: (Point>>#dist:) asRingDefinition class -> RingMethodDefinition * The message className returns the name of the ring class defining the reingMethodDefinition. Example: (Point>>#dist:) asRingDefinition className -> #Point * If you have a complete model where classes and methods are ring definition, to access the ring class definition , use parent aRGMethodDefinition ringClass Example: aRGMethodDefinition(Point>>#dist:) ringClass -> aRGClassDefinition(Point) * If you want to access the smalltalk class that contains the compiledMethod that is represented by a ringMethodDefinition, use realClass aRGMethodDefinition realClass Example: (Point>>#dist:) asRingDefinition realClass -> Point ! !RBCodeCruftLeftInMethodsRule commentStamp: '' prior: 69223562! See rationale! !CriticBrowser commentStamp: '' prior: 69223638! I display code critics, the results obtained when running a lint rule. Example: | rule env | rule := RBExcessiveArgumentsRule new. env := (RBPackageEnvironment packageName: 'Manifest-Core'). (CriticBrowser openOnRule: rule onEnvironment: env).! !CriticBrowser methodsFor: 'private' stamp: 'MarcusDenker 10/3/2013 22:29' prior: 45899728! applyRules | packageCount nbPackage process rules | rules := rulesModel roots first. rules resetResult. nbPackage := rbEnvironment packages size. packageCount := 0. self updateTree. process := [ rbEnvironment packages do: [ :package | | windowTitle | packageCount := packageCount + 1. windowTitle := String streamContents: [ :s | s << 'run rules on ' << package packageName << ' (' << packageCount asString << '/' << nbPackage asString << ')' ]. self setTitle: windowTitle. package packageSet packages do: [ :rpackage | checker runRules: rules onPackage: rpackage withoutTestCase: removeTestCase] ]. checker rule: rules. self setTitle: 'Critics Browser'. cache packages: rbEnvironment. cache initCache. self updateTree. self registerToAnnouncements ] newProcess. process name: 'SmallLint'. process resume. ! ! !CriticBrowser methodsFor: 'private' stamp: 'MarcusDenker 10/3/2013 22:29' prior: 33900820! reapplyRule: aRule | oldCritics | oldCritics := aRule critics. aRule resetResult. rbEnvironment packages do: [ :package | package packageSet packages do: [ :rpackage | checker runRules: aRule onPackage: rpackage withoutTestCase: removeTestCase]]. (oldCritics \ (aRule critics)) do: [ :each | cache removeCritic: each forRule: aRule. cache removeFalsePositive: each forRule: aRule. cache removeToDo: each forRule: aRule ]. checker rule: aRule. ! ! "Collections-Streams"! "Manifest-Core"! "Manifest-CriticBrowser"! "Morphic-Base"! "Polymorph-Widgets"! "Refactoring-Critics"! "Ring-Core-Kernel"! "System-Changes"! "Text-Scanning"! "Tools"! ----End fileIn----! ----QUIT----an Array(4 October 2013 8:51:26 am) Pharo.image priorSource: 18876110! ----STARTUP----an Array(4 October 2013 8:57:17 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 8:57:17 am) Pharo-30445.image priorSource: 18910617! ----STARTUP----an Array(4 October 2013 10:54:10 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 10:50' prior: 69208062! commentForCurrentUpdate ^ '11719 integrate all the changes from the repository of the new debugger https://pharo.fogbugz.com/f/cases/11719'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 10:50'! script101 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.60.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.123.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-StephaneDucasse.16.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.26.mcz Polymorph-Tools-Diff-MarcusDenker.117.mcz Polymorph-Widgets-MarcusDenker.940.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-EstebanLorenzano.173.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.160.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1291.mcz ToolsTest-MarcusDenker.denker.59.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 10:50'! update30446 "self new update30446" self withUpdateLog: '11719 integrate all the changes from the repository of the new debugger https://pharo.fogbugz.com/f/cases/11719'. self loadTogether: self script101 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DebugActionExecuted commentStamp: '' prior: 0! A DebugActionExecuted is an event send to the debugger after a debugging actions that has the flag #needsUpdate set to true is executed. Instance Variables actionId: actionId - xxxxx ! !SpecDebugActionButton commentStamp: '' prior: 0! I am a button encapsulating a debug action. All my settings are set based on the corresponding debug action.! !ContextPredicate commentStamp: '' prior: 0! I encapsulate a condition that can be verified against a MethodContext. Usage: users should send me the mesage message matches: with the context that should be verified as a parameter. To add concrete conditions a subclass should be create that implements the method matchContext: Instance Variables result: the last value returned by matches: ! !BlockContextPredicate commentStamp: '' prior: 0! I encapsulate a condition that can be verified against a MethodContext as a block. The block can have at least one parameter, representing the context that should be verified and should return a boolean value. ! !DebugAction commentStamp: '' prior: 0! A DebugAction is the entry point for creating debugging actions. A new debugging action is created by subclassing it and implementing, by default, the method executeAction (This can be configured by using the method actionSelector). An id must also be provided uniquely identifying the action among all the others. The initialize method should only set default values or initialize attributes that are independent of the debugger or session. The others must be initilized in the method forDebugger:. A debugging action has the following lifecycle: - the action is created using #new and #initialized is called - #appliesToDebugger:, and for contextual actions #appliesToContext: are called - if the actions applies to the current situation #forDebugger: is used to set the debugger - #execute is called when the user triggers the action. - when the debugger updates its action this process is repeated.! !CopyToClipboardDebugAction commentStamp: '' prior: 0! A CopyToClipboardDebugAction copies a short debugging stack to the clipboard. ! !DoesNotUnderstandDebugAction commentStamp: '' prior: 0! A DoesNotUnderstandDebugAction is a debugging action that can create a method if the debugger was opened as a result of a #doesNotUnderstand mesage send. ! !PreDebugDoesNotUnderstandAction commentStamp: '' prior: 0! A PreDebugDoesNotUnderstandAction adds the DoesNotUnderstandDebugAction debugging actions to the pre debug window. When executed, it will further close the pre debug window and open the full debugger. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !FullStackDebugAction commentStamp: '' prior: 0! A FullStackDebugAction displays the entire stack in the stack widget. ! !MessageSendDebugAction commentStamp: '' prior: 0! A MessageSendDebugAction is an action that sends a message to a receiver with the right amount of arguments. To specify the receiver subclasses have to override the method #receiver. Furthermoe subclasses must specify an id. The selector is optional as the id will be used if no selector is present/ Instance Variables id: selector: id - xxxxx selector - xxxxx ! !BrowseDebugAction commentStamp: '' prior: 0! A BrowseDebugAction is a debugging actions sending a unary message to the stack widget. ! !PreDebugAction commentStamp: '' prior: 0! A PreDebugAction is a debugging actions sending a unary message to the pre debug window. ! !PeelToFirstDebugAction commentStamp: '' prior: 0! A PeelToFirstDebugAction peels the stack back to the second occurance of the currently selected message. ! !RestartDebugAction commentStamp: '' prior: 0! A RestartDebugAction restarts the execution of the current context. ! !ResumeDebugAction commentStamp: '' prior: 0! A ResumeDebugAction resumes the execution of the interrupted process and closes the debugger. ! !PreDebugResumeDebugAction commentStamp: '' prior: 0! A PreDebugResumeDebugAction adds the ResumeDebugAction to the pre debug window. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !ReturnValueDebugAction commentStamp: '' prior: 0! A ReturnValueDebugAction forces a return of a given value to the previous context ! !RunToSelectionDebugAction commentStamp: '' prior: 0! A RunToSelectionDebugAction resumes the execution until the selected position in the source code is reached.! !StepIntoDebugAction commentStamp: '' prior: 0! A StepIntoDebugAction the current context. ! !StepOverDebugAction commentStamp: '' prior: 0! A StepOverDebugAction the current context. ! !StepThroughDebugAction commentStamp: '' prior: 0! A StepThroughDebugAction through the execution until control returns to the current method. ! !SubclassResponsabilityDebugAction commentStamp: '' prior: 0! A SubclassResponsabilityDebugAction is a debugging action that can create a method if the debugger was opened as a result of a #subclassResponsibility mesage send. ! !PreDebugSubclassResponsabilityAction commentStamp: '' prior: 0! A PreDebugSubclassResponsabilityAction adds the SubclassResponsabilityDebugAction debugging actions to the pre debug window. When executed, it will further close the pre debug window and open the full debugger. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !ToggleBreakDebugAction commentStamp: '' prior: 0! A ToggleBreakDebugAction install or uninstall a halt-on-entry breakpoint in the current method. ! !WhereIsDebugAction commentStamp: '' prior: 0! A WhereIsDebugAction highlights in the code editor the current instruction. ! !SpecDebuggerDynamicToolbar commentStamp: '' prior: 0! A toolbar that loads its actions dynamically based on pragmas. Only actions annotated with 'self debuggingActionsPragmas' that answer true to the message #appliesToDebugger: are taken into account. The toolbar updates itsetf every time a new value is put in the session (even if it is the same value). If the session is set before opening the toolbar (before a spec is created) the message #update should be sent to the toolbar. Each debugging actions is displayed by using a SpecDebugActionButton. ! !SpecPreDebugWindow commentStamp: '' prior: 45947860! I am the window that shows up when the debugger is launched. I show you the first lines of the stack trace that caused my apparition (or a text editor with a message), and a set of buttons created by loading all debugging actions annotated with the pragmas 'self preDebuggingActionsPragmas' (e.g. resume the execution, abandon the execution). To see me, evaluate: 2/0. Some details about my implementation. - I hold a reference to the debugger than created my; - changing the debuger retriggers the construction of this window; - before doing this users should set the attribute 'message' as my structure depens on it; - changing the debugger should be done only after this window was open. E.g.: SpecPreDebugWindow new setTitle: aTitle; message: aMessage; openWithSpec; debugger: aDebugger. - an example of manually opening this window: [ | context process debugger | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := SpecDebugger new process: process controller: nil context: context. SpecPreDebugWindow new setTitle: 'A simulated error'; message: nil; openWithSpec; debugger: debugger ] fork.! !SpecDebugger commentStamp: '' prior: 45957637! A SpecDebugger is a UI build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the debugging logic is in DebugSession and the corresponding debugging actions. SpecDebugger only provides a graphical interface to access that functionality. The debugging actions are managed by the toolbar widget; the stack and all its related actions are managed by the stack widget. ! !SpecDebuggerStack commentStamp: '' prior: 0! A SpecDebuggerStack is responsible for displaying and managing the stack. All actions from the context menu of the stack are loaded by using the pragmas 'self contextMenuDebuggingActions'.! !DebugSystemSettings class methodsFor: 'private - settings' stamp: 'AndreiChis 9/29/2013 14:24'! addDebugFilterSessingsOn: aBuilder | stackWidgetClass | stackWidgetClass := Smalltalk tools debugger stackWidgetClass. (aBuilder group: #BasicFilters) label: 'Basic Filters' translated; description: 'default filtering configurations' translated; target: Smalltalk tools debugger; with: [ (aBuilder setting: #filterCommonMessageSends) label: 'Filter out common message sends' translated; target: Smalltalk tools debugger; description: 'When true, filter out uninteresting message sends in the Debugger view while debugging' translated; with: [ (aBuilder setting: #filterDoItSelectors) label: 'Filter out doIt sends' translated; target: stackWidgetClass. (aBuilder setting: #filterNilSelectors) label: 'Filter out nil message sends' translated; target: stackWidgetClass. (aBuilder setting: #filterKernelClasses) label: 'Filter out kernel classes message sends' translated; target: stackWidgetClass. ] ].! ! !DebugSystemSettings class methodsFor: 'settings' stamp: 'AndreiChis 9/29/2013 13:50' prior: 46055061! debugSettingsOn: aBuilder (aBuilder group: #debugging) label: 'Debugging'; with: [ (aBuilder group: #deprecationHandling) label: 'Deprecation handling' translated; description: 'How deprecation are handled' translated; target: Deprecation; with: [ (aBuilder setting: #raiseWarning) label: 'Raise a blocking dialog' translated; description: 'If true, then a dialog is popup for each deprecated method invocation' translated. (aBuilder setting: #showWarning) label: 'Transcript message' translated; description: 'If true, then a message is send to the Transcript for each deprecated method invocation' translated]. (aBuilder setting: #cmdDotEnabled) label: 'Enable cmd-dot interrupt key' translated; target: UserInterruptHandler; description: 'If true, it allows the user to stop currently running process by opening-up a debugger' translated. (aBuilder setting: #cpuWatcherEnabled) label: 'Process browser monitors CPU usage' translated; target: CPUWatcher; description: 'If true, Pharo processes will be monitored for CPU usage. If they take too much CPU, you will get a notification menu that will allow you to debug, resume, or terminate the process' translated. (aBuilder setting: #debugShowDamage) label: 'Flash damaged morphic region' translated; target: WorldState; description: 'If true, every changed region of the morphic display will be flashed black before updating.' translated. (aBuilder setting: #logDebuggerStackToFile) label: 'Write message to debug log file when fall into debugger' translated; target: Smalltalk tools debugger; description: 'If true, whenever you fall into a debugger a summary of its stack will be written to a file named' translated. "(aBuilder setting: #restartAlsoProceeds) label: 'Restart also proceeds' translated; target: Debugger; description: 'If this preference is set, the debugger''s restart button and menu item will also proceed. If the preference is not set, the selected context will just be reset to its initial condition, so you may step through it again.' translated." (aBuilder setting: #alwaysOpenFullDebugger) label: 'Directly open the full Debugger' translated; target: Smalltalk tools debugger; description: 'When true, always directly open the full Debugger view when debugging instead of showing only a small popup' translated. self addDebugFilterSessingsOn: aBuilder. (aBuilder setting: #ObjectExplorerShowIcons) label: 'Icons in explorer' translated; selector: #showIcons; target: ObjectExplorer; description: 'When possible, show icon in explorer.' translated. (aBuilder setting: #logFileName) label: 'Log file name' translated; target: Smalltalk tools debugger; description: 'A name of the file, which will be used for logging all errors and notifications' ]! ! !DebugActionExecuted commentStamp: '' prior: 69253395! A DebugActionExecuted is an event send to the debugger after a debugging actions that has the flag #needsUpdate set to true is executed. Instance Variables actionId: actionId - xxxxx ! !DebugActionExecuted class methodsFor: 'as yet unclassified' stamp: 'AndreiChis 9/24/2013 17:15'! forDebuggingAction: anAction ^ self new actionId: anAction id! ! !DebugActionExecuted methodsFor: 'as yet unclassified' stamp: 'AndreiChis 9/24/2013 17:15'! actionId: aSymbol actionId := aSymbol! ! !DebugSession class methodsFor: 'actions registration' stamp: 'AndreiChis 9/18/2013 17:21'! debuggingActionsForPragma: aSymbol for: aDebugger ^ ((DebugAction allSubclasses select: [ :each | each hasAbstractMethods not ]) inject: OrderedCollection new into: [ :currentActions :aClass | currentActions addAll: ( self debuggingActionsFromClass: aClass forPragma: aSymbol forDebugger: aDebugger); yourself ])! ! !DebugSession class methodsFor: 'actions registration' stamp: 'AndreiChis 9/21/2013 18:51'! debuggingActionsForPragmas: aSymbolsCollection for: aDebugger self flag: 'split me'. ^ (((aSymbolsCollection inject: OrderedCollection new into: [ :currentActions :aSymbol | currentActions addAll: (self debuggingActionsForPragma: aSymbol for: aDebugger); yourself ]) select: [ :aDebugAction | aDebugAction appliesToDebugger: aDebugger ]) collect: [ :aDebugAction | aDebugAction forDebugger: aDebugger; yourself ]) sort: [ :action1 :action2 | action1 order < action2 order ]! ! !DebugSession class methodsFor: 'actions registration' stamp: 'AndreiChis 9/24/2013 15:57'! debuggingActionsFromClass: aClass forPragma: aSymbol forDebugger: aDebugger | pragmas actions | pragmas := Pragma allNamed: aSymbol from: aClass class to: aClass class. actions := OrderedCollection new. pragmas do: [ :aPragma | actions addAll: ((aPragma methodClass soleInstance perform: aPragma selector withEnoughArguments: {aDebugger}) asOrderedCollection collect: [ :each | each asDebugAction ]) ]. ^ actions ! ! !DebugSession methodsFor: 'context' stamp: 'AndreiChis 9/30/2013 19:00' prior: 45920497! activePC: aContext ^ (self isLatestContext: aContext) ifTrue: [ interruptedContext pc ] ifFalse: [ self previousPC: aContext ].! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 9/20/2013 19:12' prior: 45921146! createMethodInContext: aContext "Should only be called when the debugger was created in response to a MessageNotUnderstood exception. Create a stub for the method that was missing and proceed into it." | msg msgCategory chosenClass | "Added due to error 3011 - Hernan" aContext = self interruptedContext ifFalse: [ ^ UIManager default inform: 'Please select the #doesNotUnderstand: context']. msg := self interruptedContext tempAt: 1. chosenClass := self askForSuperclassOf: self interruptedContext receiver class toImplement: msg selector ifCancel: [^self]. msgCategory := (self askForCategoryIn: chosenClass default: 'as yet unclassified'). self implement: msg classified: msgCategory inClass: chosenClass forContext: self interruptedContext! ! !DebugSession methodsFor: 'evaluating' stamp: 'AndreiChis 9/20/2013 19:05'! implement: aMessage classified: aSymbol inClass: aClass forContext: aContext aClass compile: (DynamicMessageImplementor for: aMessage in: aClass) value classified: aSymbol. aContext privRefreshWith: (aClass lookupSelector: aMessage selector). aContext method numArgs > 0 ifTrue: [aMessage arguments withIndexDo: [:arg :index| aContext tempAt: index put: arg]]. self updateContextTo: aContext. self contextChanged! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:13'! isInterruptedContextPostMortem ^ self isContextPostMortem: self interruptedContext ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 9/24/2013 13:30'! returnValue: anObject from: aContext "Force a return of a given value to the previous context!!" | previous | self flag: 'should be called only on the selected context. WHY?'. (self isContextPostMortem: aContext) ifTrue: [^ self]. previous := aContext sender. " self resetContext: previous." interruptedProcess popTo: previous value: anObject. self updateContextTo: previous. self contextChanged ! ! !DebugSession methodsFor: 'debugging actions' stamp: 'AndreiChis 9/24/2013 13:30' prior: 50205095! returnValueFrom: aContext "Force a return of a given value to the previous context!!" | previous expression value | self flag: 'should be called only on the selected context'. self flag: 'remove me'. (self isContextPostMortem: aContext) ifTrue: [^ self]. expression := UIManager default request: 'Enter expression for return value:'. value := self class compiler source: expression; context: aContext; receiver: aContext receiver; evaluate. previous := aContext sender. " self resetContext: previous." interruptedProcess popTo: previous value: value. self updateContextTo: previous. self contextChanged ! ! !DebugSession methodsFor: 'testing' stamp: 'AndreiChis 9/29/2013 16:07'! shouldDisplayContext: aContext basedOnFilters: stackFilters "Return true if all filters match the given context, or false otherwise. True is returned if there are no filters." stackFilters do: [ :aFilter | (aFilter shouldDisplay: aContext) ifFalse: [ ^ false ] ]. ^ true ! ! !DebugSession methodsFor: 'accessing' stamp: 'AndreiChis 9/29/2013 16:10'! stackOfSize: limit usingFilters: stackFilters "Answer an OrderedCollection of the top 'limit' contexts on the receiver's sender chain, according to the given filters. Consider the following stack: a <-- top of the stack b a c a b d e a <-- bottom of the stack If the given filters do not match context 'a' and 'b' the following stack will be returned: a <-- top of the stack b a c d e <-- bottom of the stack First all consecutive contexts starting from the top of the stack for which a filter does not match are added to the result (a b a in the example). Then from the remaining stack only the context for which all filters match are added to the result. " | stack context | stack := OrderedCollection new. context := interruptedContext. "Starting from the top of the stack add all consecutive contexts that should not be displayed." [ context ~~ nil and: [(stack size < limit) and: [ (self shouldDisplayContext: context basedOnFilters: stackFilters) not ] ] ] whileTrue: [ stack addLast: context. context := context sender ]. "Add all contexts that should be displayed. (the current context is checked again)" [context ~~ nil and: [stack size < limit ] ] whileTrue: [ (self shouldDisplayContext: context basedOnFilters: stackFilters) ifTrue: [ stack addLast: context ]. context := context sender ]. ^ stack! ! !SpecDebugActionButton commentStamp: '' prior: 69253656! I am a button encapsulating a debug action. All my settings are set based on the corresponding debug action.! !SpecDebugActionButton methodsFor: 'accessing' stamp: 'AndreiChis 9/25/2013 17:00'! debugAction ^ debugActionHolder contents ! ! !SpecDebugActionButton methodsFor: 'accessing' stamp: 'AndreiChis 9/25/2013 17:01'! debugAction: aDebugAction debugActionHolder contents: aDebugAction! ! !SpecDebugActionButton methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:01'! initialize super initialize. debugActionHolder := nil asValueHolder. debugActionHolder whenChangedDo: [ self update ] ! ! !SpecDebugActionButton methodsFor: 'updating' stamp: 'AndreiChis 9/25/2013 17:09'! update self debugAction ifNotNil: [ :aDebugAction | self label: aDebugAction label. self icon: aDebugAction icon. self enabled: aDebugAction enabled. self state: false. self action: [ aDebugAction execute ] ]! ! !ContextPredicate commentStamp: '' prior: 69253823! I encapsulate a condition that can be verified against a MethodContext. Usage: users should send me the mesage message matches: with the context that should be verified as a parameter. To add concrete conditions a subclass should be create that implements the method matchContext: Instance Variables result: the last value returned by matches: ! !AndContextPredicate class methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 22:23'! with: aPredicate with: anotherPredicate ^ self new with: aPredicate with: anotherPredicate! ! !AndContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 7/17/2013 22:24'! matchContext: aContext ^ (left matches: aContext ) and: [ right matches: aContext ]! ! !AndContextPredicate methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 22:33'! with: aPredicate with: anotherPredicate left := aPredicate. right := anotherPredicate! ! !BlockContextPredicate commentStamp: '' prior: 69254236! I encapsulate a condition that can be verified against a MethodContext as a block. The block can have at least one parameter, representing the context that should be verified and should return a boolean value. ! !BlockContextPredicate class methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 20:15'! for: aBlock ^ self new for: aBlock! ! !BlockContextPredicate methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 20:15'! for: aBlock blockCondition := aBlock! ! !BlockContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 7/17/2013 20:10'! matchContext: aContext ^ blockCondition isNil ifFalse: [ blockCondition cull: aContext ] ifTrue: [ false ]! ! !ContextPredicate methodsFor: 'composition' stamp: 'AndreiChis 8/26/2013 11:39'! and: aPredicate ^ AndContextPredicate with: self with: aPredicate! ! !ContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 7/17/2013 19:48'! hasMatched ^ self result ifNil: [ ^ false ]! ! !ContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 8/6/2013 17:36'! matchContext: aContext "Subclasses should implement this method to add concrete conditions. " self subclassResponsibility! ! !ContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 8/6/2013 17:34'! matches: aContext "Return true if the given context satisfies the condition contained by this predicate, or false otherwise." ^ result := self matchContext: aContext! ! !ContextPredicate methodsFor: 'composition' stamp: 'AndreiChis 8/26/2013 11:40'! or: aPredicate ^ OrContextPredicate with: self with: aPredicate! ! !ContextPredicate methodsFor: 'accessing' stamp: 'AndreiChis 8/6/2013 17:35'! result "The value returned by the most recent call to matches: " ^ result! ! !OrContextPredicate class methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 22:23'! with: aPredicate with: anotherPredicate ^ self new with: aPredicate with: anotherPredicate! ! !OrContextPredicate methodsFor: 'testing' stamp: 'AndreiChis 7/17/2013 22:24'! matchContext: aContext ^ (left matches: aContext ) or: [ right matches: aContext ]! ! !OrContextPredicate methodsFor: 'instance creation' stamp: 'AndreiChis 7/17/2013 22:33'! with: aPredicate with: anotherPredicate left := aPredicate. right := anotherPredicate! ! !DebugAction commentStamp: '' prior: 69254501! A DebugAction is the entry point for creating debugging actions. A new debugging action is created by subclassing it and implementing, by default, the method executeAction (This can be configured by using the method actionSelector). An id must also be provided uniquely identifying the action among all the others. The initialize method should only set default values or initialize attributes that are independent of the debugger or session. The others must be initilized in the method forDebugger:. A debugging action has the following lifecycle: - the action is created using #new and #initialized is called - #appliesToDebugger:, and for contextual actions #appliesToContext: are called - if the actions applies to the current situation #forDebugger: is used to set the debugger - #execute is called when the user triggers the action. - when the debugger updates its action this process is repeated.! !ChangeDebuggerAction class methodsFor: 'accessing' stamp: 'AndreiChis 8/26/2013 12:07'! changeDebuggerActionsForContext: aContext excluding: aDebugger ^ (self debuggersForContext: aContext excluding: aDebugger ) collect: [ :aDebuggerClass | (self forDebugger: aDebugger) debuggerClass: aDebuggerClass ]! ! !ChangeDebuggerAction class methodsFor: 'accessing' stamp: 'AndreiChis 7/4/2013 14:54'! debuggersForContext: aContext excluding: aDebugger "Ungly check to make sure the debugger will work until everything is in the image" (Smalltalk tools respondsTo: #debuggersForContext:excluding:) ifTrue: [ ^ (Smalltalk tools debuggersForContext: aContext excluding: aDebugger class)] ifFalse: [ ^ OrderedCollection new ]! ! !ChangeDebuggerAction methodsFor: 'accessing' stamp: 'AndreiChis 6/18/2013 17:51'! debuggerClass: aClass debuggerClass := aClass. self label: debuggerClass defaultTitle.! ! !ChangeDebuggerAction methodsFor: 'initialization' stamp: 'AndreiChis 8/30/2013 14:39'! defaultCategory ^ 'Available Debuggers'! ! !ChangeDebuggerAction methodsFor: 'initialization' stamp: 'AndreiChis 8/30/2013 14:39'! defaultOrder ^ 100! ! !ChangeDebuggerAction methodsFor: 'actions' stamp: 'AndreiChis 7/14/2013 23:54'! executeAction self debugger debug: self interruptedContext using: debuggerClass! ! !ChangeDebuggerAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:32'! initialize super initialize. self needsUpdate: false! ! !CopyToClipboardDebugAction commentStamp: '' prior: 69255482! A CopyToClipboardDebugAction copies a short debugging stack to the clipboard. ! !CopyToClipboardDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/24/2013 16:47'! actionType ! ! !CopyToClipboardDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:47'! defaultLabel ^ 'Copy to clipboard'! ! !CopyToClipboardDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:48'! defaultOrder ^ 120! ! !CopyToClipboardDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 16:48'! executeAction Clipboard clipboardText: (String streamContents: [ :s| self debugger interruptedContext shortDebugStackOn: s ])! ! !CopyToClipboardDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:49'! id ^ #copyToClipboard! ! !DebugAction class methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 15:57'! asDebugAction ^ self new! ! !DebugAction class methodsFor: 'accessing' stamp: 'AndreiChis 9/17/2013 19:20'! defaultIcon ^ nil! ! !DebugAction class methodsFor: 'instance creation' stamp: 'AndreiChis 6/26/2013 23:06'! forDebugger: aDebugger ^ self new forDebugger: aDebugger! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 8/26/2013 12:03'! actionSelector ^ actionSelector ifNil: [ self defaultActionSelector ]! ! !DebugAction methodsFor: 'testing' stamp: 'AndreiChis 6/10/2013 18:44'! appliesToContext: aContext ^ true! ! !DebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/18/2013 17:25'! appliesToCurrentContext ^ self appliesToContext: self currentContext ! ! !DebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:12'! appliesToDebugger: aDebugger ^ true! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 15:57'! asDebugAction ^ self! ! !DebugAction methodsFor: '*spec-debugger' stamp: 'AndreiChis 9/25/2013 17:16'! asMenuRegistrationIn: aBuilder | item | item := (aBuilder item: self specId) label: self label; icon: self icon; keyText: self keyText; enabled: self enabled; order: self order asFloat; target: self; selector: #execute; arguments: #(). self needsSeparatorAfter ifTrue: [ item withSeparatorAfter ]. ^ item ! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 8/7/2013 19:07'! category ^ category ifNil: [ self defaultCategory ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 7/3/2013 17:31'! category: anObject category := anObject! ! !DebugAction methodsFor: 'accessing-context' stamp: 'AndreiChis 9/18/2013 10:53'! currentContext ^ self debugger currentContext! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/10/2013 18:34'! debugger ^ debugger! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/17/2013 16:16'! debugger: anObject debugger := anObject! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 8/26/2013 12:02'! defaultActionSelector ^ #executeAction! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 8/7/2013 19:08'! defaultCategory ^ nil! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/17/2013 19:20'! defaultIcon ^ self class defaultIcon! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:16'! defaultKeyText ^ nil ! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 7/12/2013 16:38'! defaultLabel ^ ''! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 7/17/2013 22:59'! defaultOrder ^ 0! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:58'! enabled ^ true! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:01'! execute self precondition ifTrue: [ self perform: self actionSelector. self postAction ] ! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 8/26/2013 12:04'! executeAction "By default do nothing." ! ! !DebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/18/2013 11:45'! forDebugger: aDebugger self debugger: aDebugger! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 8/8/2013 12:01'! icon ^ icon ifNil: [ self defaultIcon ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/17/2013 11:07'! icon: anObject icon := anObject! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 15:37'! id ^ nil! ! !DebugAction methodsFor: 'accessing-context' stamp: 'AndreiChis 6/20/2013 14:41'! interruptedContext ^ self debugger interruptedContext ! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:16'! keyText ^ keyText ifNil: [ self defaultKeyText ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:12'! keyText: aString keyText := aString! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 7/12/2013 16:38'! label ^ label ifNil: [ self defaultLabel ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/10/2013 18:40'! label: aString label := aString! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:21'! needsSeparatorAfter ^ needsSeparatorAfter ifNil: [ false ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:31'! needsSeparatorAfter: aBoolean needsSeparatorAfter := aBoolean! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 18:59'! needsUpdate ^ needsUpdate ifNil: [ true ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 7/3/2013 17:31'! needsUpdate: aBoolean needsUpdate := aBoolean! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 19:00'! needsValidation ^ needsValidation ifNil: [ true ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/10/2013 18:35'! needsValidation: anObject needsValidation := anObject! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:16'! notifyDebugger self needsUpdate ifTrue: [ self debugger announce: (DebugActionExecuted forDebuggingAction: self) ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/19/2013 17:20'! order ^ order ifNil: [ self defaultOrder ]! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/10/2013 18:40'! order: anInteger order := anInteger! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 16:57'! postAction self notifyDebugger! ! !DebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:00'! precondition ^ self needsValidation not or: [ self debugger okToChange ]! ! !DebugAction methodsFor: 'accessing-context' stamp: 'AndreiChis 6/17/2013 15:51'! selectedContext ^ self debugger selectedContext ! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/5/2013 15:03'! session ^ self debugger session! ! !DebugAction methodsFor: '*spec-debugger' stamp: 'AndreiChis 9/25/2013 17:16'! specId ^ (self id, 'SpecId') asSymbol! ! !DebugAction methodsFor: '*spec-debugger' stamp: 'AndreiChis 9/25/2013 17:03'! specModel ^ #SpecDebugActionButton! ! !DebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 16:31'! withSeparatorAfter self needsSeparatorAfter: true! ! !DoesNotUnderstandDebugAction commentStamp: '' prior: 69255631! A DoesNotUnderstandDebugAction is a debugging action that can create a method if the debugger was opened as a result of a #doesNotUnderstand mesage send. ! !DoesNotUnderstandDebugAction class methodsFor: 'as yet unclassified' stamp: 'AndreiChis 9/20/2013 15:52'! actionType ! ! !DoesNotUnderstandDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:43'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextDoesNotUnderstand ! ! !DoesNotUnderstandDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 19:17'! defaultLabel ^ 'Create'! ! !DoesNotUnderstandDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 16:07'! defaultOrder ^ 45! ! !DoesNotUnderstandDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 16:46'! executeAction self session createMethodInContext: self interruptedContext! ! !DoesNotUnderstandDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 19:17'! id ^ #doesNotUnderstand! ! !PreDebugDoesNotUnderstandAction commentStamp: '' prior: 69255859! A PreDebugDoesNotUnderstandAction adds the DoesNotUnderstandDebugAction debugging actions to the pre debug window. When executed, it will further close the pre debug window and open the full debugger. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !PreDebugDoesNotUnderstandAction class methodsFor: 'registration' stamp: 'AndreiChis 9/24/2013 18:16'! actionType ! ! !PreDebugDoesNotUnderstandAction methodsFor: 'actions' stamp: 'AndreiChis 9/30/2013 17:24'! executeAction "The create method from the session will trigger #contextChanged, which will make the debgger update the stack. Sof it safe to just open the debugger." super executeAction. self preDebugWindow openFullDebugger! ! !PreDebugDoesNotUnderstandAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:14'! id ^ #preDebugDoesNotUnderstand! ! !PreDebugDoesNotUnderstandAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:32'! initialize super initialize. self needsUpdate: false. self needsValidation: false! ! !PreDebugDoesNotUnderstandAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:20'! preDebugWindow ^ preDebugWindow! ! !PreDebugDoesNotUnderstandAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:20'! preDebugWindow: anObject preDebugWindow := anObject! ! !FullStackDebugAction commentStamp: '' prior: 69256196! A FullStackDebugAction displays the entire stack in the stack widget. ! !FullStackDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:14'! actionType ! ! !FullStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:47'! defaultLabel ^ 'Full Stack'! ! !FullStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:46'! defaultOrder ^ 30! ! !FullStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 16:00'! enabled ^ self shouldEnableFullStackButton! ! !FullStackDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/29/2013 16:28'! executeAction self debugger stack expandBy: self expandedStackSize ! ! !FullStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/29/2013 16:28'! expandedStackSize ^ 100000! ! !FullStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:47'! id ^ #fullStack! ! !FullStackDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 15:59'! shouldEnableFullStackButton self debugger ifNil: [ ^ false ]. ^ self debugger stack listItems ifEmpty: [ false ] ifNotEmpty: [ :aList | aList last sender notNil ] ! ! !MessageSendDebugAction commentStamp: '' prior: 69256331! A MessageSendDebugAction is an action that sends a message to a receiver with the right amount of arguments. To specify the receiver subclasses have to override the method #receiver. Furthermoe subclasses must specify an id. The selector is optional as the id will be used if no selector is present/ Instance Variables id: selector: id - xxxxx selector - xxxxx ! !BrowseDebugAction commentStamp: '' prior: 69256782! A BrowseDebugAction is a debugging actions sending a unary message to the stack widget. ! !BrowseDebugAction class methodsFor: 'actions creation' stamp: 'AndreiChis 9/24/2013 16:41'! debugActionsFor: aDebugger | initilOrder | initilOrder := 60. ^ { self new id: #browseSendersOfMessages; order: initilOrder; keyText: 'n'; label: 'Senders of...'. self new id: #browseMessages; order: initilOrder + 5; keyText: 'm'; label: 'Implementors of...'. self new id: #methodHierarchy; order: initilOrder + 10; keyText: 'i'; label: 'Inheritance'. self new id: #browseVersions; order: initilOrder + 15; keyText: 'v'; label: 'Versions'. self new id: #browseInstVarRefs; order: initilOrder + 20; label: 'Inst var refs...'. self new id: #browseClassVarRefs; order: initilOrder + 25; label: 'Class var refs...'. self new id: #browseClassVariables; order: initilOrder + 30; label: 'Class variables'; withSeparatorAfter. self new id: #browseClassRefs; order: initilOrder + 35; keyText: 'N'; label: 'Class refs'. self new id: #browseMethodFull; order: initilOrder + 40; keyText: 'b'; label: 'Browse full'. self new id: #fileOutMessage; order: initilOrder + 45; label: 'File out'. self new id: #inspectInstances; order: initilOrder + 50; label: 'Inspect instances'. self new id: #inspectSubInstances; order: initilOrder + 55; label: 'Inspect subinstances'; withSeparatorAfter }! ! !BrowseDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:33'! initialize super initialize. self needsUpdate: false. self needsValidation: false.! ! !BrowseDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/26/2013 19:07'! receiver ^ self debugger stack! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:03'! arguments ^ #()! ! !MessageSendDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 18:03'! executeAction self receiver perform: self selector withEnoughArguments: self arguments! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:01'! id ^ id! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:01'! id: aSymbol id := aSymbol ! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:04'! receiver ^ nil! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:02'! selector ^ selector ifNil: [ self id ]! ! !MessageSendDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:02'! selector: aSymbol selector := aSymbol! ! !PreDebugAction commentStamp: '' prior: 69256927! A PreDebugAction is a debugging actions sending a unary message to the pre debug window. ! !PreDebugAction class methodsFor: 'actions creation' stamp: 'AndreiChis 9/30/2013 17:23'! debugActionsFor: aDebugger ^ { self new id: #abandonAction; selector: #close; order: 10; label: 'Abandon'. self new id: #openFullDebuggerAction; selector: #openFullDebugger; order: 15; label: 'Debug' }! ! !PreDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:33'! initialize super initialize. self needsUpdate: false. self needsValidation: false.! ! !PreDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:20'! preDebugWindow ^ preDebugWindow! ! !PreDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:20'! preDebugWindow: anObject preDebugWindow := anObject! ! !PreDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:05'! receiver ^ self preDebugWindow! ! !PeelToFirstDebugAction commentStamp: '' prior: 69257081! A PeelToFirstDebugAction peels the stack back to the second occurance of the currently selected message. ! !PeelToFirstDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:13'! actionType ! ! !PeelToFirstDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/21/2013 22:06'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !PeelToFirstDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:01'! defaultLabel ^ 'Peel to first like this'! ! !PeelToFirstDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:01'! defaultOrder ^ 45! ! !PeelToFirstDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/21/2013 22:08'! executeAction self session peelToFirstLike: self currentContext ! ! !PeelToFirstDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:00'! id ^ #peelToFirst! ! !RestartDebugAction commentStamp: '' prior: 69257247! A RestartDebugAction restarts the execution of the current context. ! !RestartDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !RestartDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !RestartDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:33'! defaultKeyText ^ 'r'! ! !RestartDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/17/2013 19:25'! defaultLabel ^ 'Restart'! ! !RestartDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 11:08'! defaultOrder ^ 10! ! !RestartDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 15:22'! executeAction self session restart: self currentContext! ! !RestartDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:21'! id ^ #restart! ! !ResumeDebugAction commentStamp: '' prior: 69257375! A ResumeDebugAction resumes the execution of the interrupted process and closes the debugger. ! !PreDebugResumeDebugAction commentStamp: '' prior: 69257537! A PreDebugResumeDebugAction adds the ResumeDebugAction to the pre debug window. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !PreDebugResumeDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/24/2013 18:15'! actionType ! ! !PreDebugResumeDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:44'! executeAction self session resume; clear. self preDebugWindow close. ! ! !PreDebugResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 17:42'! id ^ #preDebugResume! ! !PreDebugResumeDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:33'! initialize super initialize. self needsUpdate: false. self needsValidation: false! ! !PreDebugResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:21'! preDebugWindow ^ preDebugWindow! ! !PreDebugResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:21'! preDebugWindow: anObject preDebugWindow := anObject! ! !ResumeDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !ResumeDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !ResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:33'! defaultKeyText ^ 'p'! ! !ResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 17:42'! defaultLabel ^ 'Proceed'! ! !ResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 18:57'! defaultOrder ^ 5! ! !ResumeDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/19/2013 17:13'! executeAction self session resume; clear. self debugger close. ! ! !ResumeDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 18:55'! id ^ #resume! ! !ResumeDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:33'! initialize super initialize. "No need to update the debgger as it will anyway be closed." self needsUpdate: false ! ! !ReturnValueDebugAction commentStamp: '' prior: 69257754! A ReturnValueDebugAction forces a return of a given value to the previous context ! !ReturnValueDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:19'! actionType ! ! !ReturnValueDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/21/2013 22:19'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !ReturnValueDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:19'! defaultLabel ^ 'Return entered value'! ! !ReturnValueDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:19'! defaultOrder ^ 50! ! !ReturnValueDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/21/2013 22:24'! executeAction |expression value| expression := UIManager default request: 'Enter expression for return value:'. value := self class compiler source: expression; context: self currentContext; receiver: self currentContext receiver; evaluate. self session returnValue: value from: self currentContext! ! !ReturnValueDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:19'! id ^ #returnValue! ! !RunToSelectionDebugAction commentStamp: '' prior: 69257904! A RunToSelectionDebugAction resumes the execution until the selected position in the source code is reached.! !RunToSelectionDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/18/2013 17:11'! actionType ! ! !RunToSelectionDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !RunToSelectionDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/17/2013 19:26'! defaultLabel ^ 'Run to here'! ! !RunToSelectionDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:56'! defaultOrder ^ 35! ! !RunToSelectionDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 15:27'! executeAction self session runToSelection: self debugger code getSelection inContext: self currentContext! ! !RunToSelectionDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:26'! id ^ #runToHere! ! !SaveDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 8/30/2013 14:42'! defaultLabel ^ 'Accept'! ! !SaveDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 8/30/2013 14:42'! defaultOrder ^ 5! ! !SaveDebugAction methodsFor: 'actions' stamp: 'AndreiChis 8/13/2013 15:23'! executeAction self session recompileMethodTo: sourceCode inContext: self currentContext notifying: nil! ! !SaveDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 6/18/2013 17:04'! sourceCode: aText sourceCode := aText! ! !StepIntoDebugAction commentStamp: '' prior: 69258074! A StepIntoDebugAction the current context. ! !StepIntoDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !StepIntoDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !StepIntoDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:26'! defaultKeyText ^ 'e'! ! !StepIntoDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:33'! defaultLabel ^ 'Into'! ! !StepIntoDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:33'! defaultOrder ^ 15! ! !StepIntoDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 15:33'! executeAction self session stepInto: self currentContext! ! !StepIntoDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:31'! id ^ #stepInto! ! !StepOverDebugAction commentStamp: '' prior: 69258179! A StepOverDebugAction the current context. ! !StepOverDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !StepOverDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !StepOverDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:33'! defaultKeyText ^ 't'! ! !StepOverDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:36'! defaultLabel ^ 'Over'! ! !StepOverDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:36'! defaultOrder ^ 20! ! !StepOverDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 15:38'! executeAction self session stepOver: self currentContext! ! !StepOverDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:36'! id ^ #stepOver! ! !StepThroughDebugAction commentStamp: '' prior: 69258287! A StepThroughDebugAction through the execution until control returns to the current method. ! !StepThroughDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !StepThroughDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 17:16'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !StepThroughDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 21:34'! defaultKeyText ^ 'T'! ! !StepThroughDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:38'! defaultLabel ^ 'Through'! ! !StepThroughDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:38'! defaultOrder ^ 25! ! !StepThroughDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 15:38'! executeAction self session stepThrough: self currentContext! ! !StepThroughDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 15:38'! id ^ #stepThrough! ! !SubclassResponsabilityDebugAction commentStamp: '' prior: 69258455! A SubclassResponsabilityDebugAction is a debugging action that can create a method if the debugger was opened as a result of a #subclassResponsibility mesage send. ! !PreDebugSubclassResponsabilityAction commentStamp: '' prior: 69258699! A PreDebugSubclassResponsabilityAction adds the SubclassResponsabilityDebugAction debugging actions to the pre debug window. When executed, it will further close the pre debug window and open the full debugger. Instance Variables preDebugWindow: preDebugWindow - xxxxx ! !PreDebugSubclassResponsabilityAction class methodsFor: 'registration' stamp: 'AndreiChis 9/24/2013 18:15'! actionType ! ! !PreDebugSubclassResponsabilityAction methodsFor: 'actions' stamp: 'AndreiChis 9/30/2013 17:24'! executeAction super executeAction. self preDebugWindow openFullDebugger "Open the full debugger"! ! !PreDebugSubclassResponsabilityAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 17:53'! id ^ #preDebugSubclassResponsability! ! !PreDebugSubclassResponsabilityAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:34'! initialize super initialize. self needsUpdate: false. self needsValidation: false! ! !PreDebugSubclassResponsabilityAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:21'! preDebugWindow ^ preDebugWindow! ! !PreDebugSubclassResponsabilityAction methodsFor: 'accessing' stamp: 'AndreiChis 9/24/2013 18:21'! preDebugWindow: anObject preDebugWindow := anObject! ! !SubclassResponsabilityDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/20/2013 18:10'! actionType ! ! !SubclassResponsabilityDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/20/2013 18:06'! appliesToDebugger: aDebugger ^ aDebugger session interruptedContext selector == #subclassResponsibility ! ! !SubclassResponsabilityDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 19:17'! defaultLabel ^ 'Create'! ! !SubclassResponsabilityDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 18:05'! defaultOrder ^ 45! ! !SubclassResponsabilityDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/20/2013 19:15'! executeAction | senderContext msg msgCategory chosenClass | senderContext := self interruptedContext sender. msg := Message selector: senderContext selector arguments: senderContext arguments. msgCategory := senderContext methodClass organization categoryOfElement: msg selector. chosenClass := self interruptedContext receiver class. self session implement: msg classified: msgCategory inClass: chosenClass forContext: senderContext.! ! !SubclassResponsabilityDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/20/2013 18:05'! id ^ #subclassResponsability! ! !ToggleBreakDebugAction commentStamp: '' prior: 69259048! A ToggleBreakDebugAction install or uninstall a halt-on-entry breakpoint in the current method. ! !ToggleBreakDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:27'! actionType ! ! !ToggleBreakDebugAction methodsFor: 'testing' stamp: 'AndreiChis 9/21/2013 22:27'! appliesToDebugger: aDebugger ^ aDebugger session isInterruptedContextPostMortem not! ! !ToggleBreakDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:27'! defaultLabel ^ 'Toggle break on entry'! ! !ToggleBreakDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:27'! defaultOrder ^ 55! ! !ToggleBreakDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/21/2013 22:30'! executeAction self session toggleBreakOnEntryFor: self currentContext! ! !ToggleBreakDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/21/2013 22:28'! id ^ #toggleBreakOnEntry! ! !ToggleBreakDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:34'! initialize super initialize. self withSeparatorAfter! ! !WhereIsDebugAction commentStamp: '' prior: 69259205! A WhereIsDebugAction highlights in the code editor the current instruction. ! !WhereIsDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 9/21/2013 22:15'! actionType ! ! !WhereIsDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/17/2013 19:13'! defaultLabel ^ 'Where is?'! ! !WhereIsDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 18:57'! defaultOrder ^ 40! ! !WhereIsDebugAction methodsFor: 'actions' stamp: 'AndreiChis 9/18/2013 18:49'! executeAction self debugger code setSelection: (self session pcRangeForContext: self currentContext) ! ! !WhereIsDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 18:50'! id ^ #whereIs! ! !WhereIsDebugAction methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:34'! initialize super initialize. "This action just updates the selection in the code editor. No need to do any update or validation." self needsUpdate: false. self needsValidation: false. self withSeparatorAfter! ! !BlockFilter class methodsFor: 'instance creation' stamp: 'AndreiChis 8/27/2013 23:31'! forBlock: aBlockClosure ^ self new block: aBlockClosure! ! !BlockFilter methodsFor: 'accessing' stamp: 'ClaraAllende 8/14/2013 20:24'! block ^block! ! !BlockFilter methodsFor: 'accessing' stamp: 'ClaraAllende 8/14/2013 20:24'! block: aBlockClosure block:= aBlockClosure! ! !BlockFilter methodsFor: 'testing' stamp: 'ClaraAllende 8/14/2013 20:25'! shouldDisplay: aContext ^self block value: aContext! ! !BooleanFilter class methodsFor: 'instance creation' stamp: 'AndreiChis 9/30/2013 10:55'! withFilters: someFilters operator: booleanOperator ^self new filters: someFilters; booleanOperator: booleanOperator! ! !BooleanFilter methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 10:53'! booleanOperator ^booleanOperator! ! !BooleanFilter methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 10:53'! booleanOperator: aSymbol booleanOperator:= aSymbol! ! !BooleanFilter methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 10:53'! filters ^filters! ! !BooleanFilter methodsFor: 'accessing' stamp: 'ClaraAllende 8/14/2013 20:34'! filters: theFilters filters:= theFilters! ! !BooleanFilter methodsFor: 'testing' stamp: 'ClaraAllende 8/14/2013 20:49'! shouldDisplay: aContext ^ (self filters first shouldDisplay: aContext) perform: booleanOperator with: [self filters last shouldDisplay: aContext] ! ! !KernelClassesFilter methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 14:00'! initialize super initialize. kernelClasses := self kernelClassesToExclude asOrderedCollection. kernelClasses := kernelClasses addAll: (kernelClasses collect: #class); yourself ! ! !KernelClassesFilter methodsFor: 'private' stamp: 'AndreiChis 9/30/2013 10:53'! kernelClassesToExclude ^ {Boolean. True. False. BlockClosure. MethodContext. Array. OrderedCollection. Set. IdentitySet. Dictionary. IdentityDictionary. Class. Metaclass. Behavior. SmallInteger. Float. Error. Exception. UndefinedObject. MessageSend}! ! !KernelClassesFilter methodsFor: 'testing' stamp: 'AndreiChis 9/30/2013 11:12'! shouldDisplay: aContext ^ (kernelClasses includes: aContext receiver class) not! ! !SelectorFilter class methodsFor: 'instance creation' stamp: 'AndreiChis 9/30/2013 10:55'! forSelector: aSelector |filter| filter:= self new. filter selectors add: aSelector. ^ filter! ! !SelectorFilter class methodsFor: 'instance creation' stamp: 'AndreiChis 9/30/2013 10:55'! forSelectors: someSelectors |filter| filter:= self new. filter selectors addAll: someSelectors. ^ filter! ! !SelectorFilter methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 10:54'! initialize super initialize. self selectors: OrderedCollection new.! ! !SelectorFilter methodsFor: 'accessing' stamp: 'ClaraAllende 8/14/2013 20:02'! selectors ^selectors! ! !SelectorFilter methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 10:54'! selectors: someSelectors selectors := someSelectors! ! !SelectorFilter methodsFor: 'testing' stamp: 'AndreiChis 9/30/2013 11:56'! shouldDisplay: aContext ^ (self selectors includes: aContext method selector) not.! ! !StackFilter methodsFor: 'operators' stamp: 'ClaraAllende 8/14/2013 20:39'! and: aFilter ^ BooleanFilter withFilters: (OrderedCollection with: self with: aFilter) operator: #and:! ! !StackFilter methodsFor: 'operators' stamp: 'ClaraAllende 8/14/2013 20:39'! or: aFilter ^ BooleanFilter withFilters: (OrderedCollection with: self with: aFilter) operator: #or:! ! !StackFilter methodsFor: 'testing' stamp: 'ClaraAllende 8/14/2013 19:56'! shouldDisplay: aContext ^self subclassResponsibility ! ! !SpecDebuggerDynamicToolbar commentStamp: '' prior: 69259350! A toolbar that loads its actions dynamically based on pragmas. Only actions annotated with 'self debuggingActionsPragmas' that answer true to the message #appliesToDebugger: are taken into account. The toolbar updates itsetf every time a new value is put in the session (even if it is the same value). If the session is set before opening the toolbar (before a spec is created) the message #update should be sent to the toolbar. Each debugging actions is displayed by using a SpecDebugActionButton. ! !SpecDebuggerDynamicToolbar class methodsFor: 'specs' stamp: 'AndreiChis 9/18/2013 12:09'! spec ^ SpecLayout composed! ! !SpecDebuggerDynamicToolbar methodsFor: 'actions lookup' stamp: 'AndreiChis 9/21/2013 18:02'! actionsForPragmas: aSymbolsCollection ^ (self session class debuggingActionsForPragmas: aSymbolsCollection for: self debugger) ! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:10'! buildButtonWidgetsSpecForActions: aCollection ^ aCollection inject: OrderedCollection new into: [ :specs :action | specs add: action specId; add: action specModel; yourself ] ! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/18/2013 12:09'! clearToolbar self widgets removeAll. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self emptyLayout ! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:11'! createWidgetsForActions: aCollection self instantiateModels: (self buildButtonWidgetsSpecForActions: aCollection). aCollection do: [ :action | self initializeButtonWidget: (self widgets at: action specId) forAction: action ]. self setFocusOrderForActions: aCollection! ! !SpecDebuggerDynamicToolbar methodsFor: 'accessing' stamp: 'AndreiChis 9/18/2013 12:09'! currentContext ^ self debugger currentContext! ! !SpecDebuggerDynamicToolbar methodsFor: 'private' stamp: 'AndreiChis 9/18/2013 12:09'! debugger "Return the instance of the debugger containing this toolbar" ^ owner! ! !SpecDebuggerDynamicToolbar methodsFor: 'actions lookup' stamp: 'AndreiChis 9/18/2013 18:20'! debuggingActions ^ self actionsForPragmas: self debuggingActionsPragmas! ! !SpecDebuggerDynamicToolbar methodsFor: 'actions lookup' stamp: 'AndreiChis 9/18/2013 17:28'! debuggingActionsPragmas ^ { #debuggingAction }! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:11'! dynamicLayoutForActions: aCollection ^ SpecLayout composed newRow: [ :r | aCollection do: [ :action | r add: action specId ] ]! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/18/2013 12:09'! emptyLayout ^ SpecLayout composed ! ! !SpecDebuggerDynamicToolbar methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 13:38'! initialize sessionHolder := nil asValueHolder. super initialize! ! !SpecDebuggerDynamicToolbar methodsFor: 'initialization widgets' stamp: 'AndreiChis 9/25/2013 17:10'! initializeButtonWidget: aButtonModel forAction: aDebuggingAction aButtonModel debugAction: aDebuggingAction! ! !SpecDebuggerDynamicToolbar methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 13:38'! initializePresenter super initializePresenter. sessionHolder whenChangedDo: [ self spec ifNotNil: [ self update ] ] ! ! !SpecDebuggerDynamicToolbar methodsFor: 'building widgets' stamp: 'AndreiChis 9/20/2013 17:20'! rebuildToolbar | debuggingActions | debuggingActions := self debuggingActions. self widgets removeAll. self createWidgetsForActions: debuggingActions. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: (self dynamicLayoutForActions: debuggingActions)! ! !SpecDebuggerDynamicToolbar methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:38'! session ^ sessionHolder contents ! ! !SpecDebuggerDynamicToolbar methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:38'! session: aSession sessionHolder contents: aSession! ! !SpecDebuggerDynamicToolbar methodsFor: 'initialization' stamp: 'AndreiChis 9/25/2013 17:11'! setFocusOrderForActions: aCollection self focusOrder removeAll. aCollection do: [ :action | self focusOrder add: (self perform: action specId) ]! ! !SpecDebuggerDynamicToolbar methodsFor: 'updating' stamp: 'AndreiChis 9/18/2013 12:09'! update self session ifNil: [ self clearToolbar ] ifNotNil: [ self rebuildToolbar ] ! ! !SpecPreDebugWindow commentStamp: '' prior: 69259922! I am the window that shows up when the debugger is launched. I show you the first lines of the stack trace that caused my apparition (or a text editor with a message), and a set of buttons created by loading all debugging actions annotated with the pragmas 'self preDebuggingActionsPragmas' (e.g. resume the execution, abandon the execution). To see me, evaluate: 2/0. Some details about my implementation. - I hold a reference to the debugger than created my; - changing the debuger retriggers the construction of this window; - before doing this users should set the attribute 'message' as my structure depens on it; - changing the debugger should be done only after this window was open. E.g.: SpecPreDebugWindow new setTitle: aTitle; message: aMessage; openWithSpec; debugger: aDebugger. - an example of manually opening this window: [ | context process debugger | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := SpecDebugger new process: process controller: nil context: context. SpecPreDebugWindow new setTitle: 'A simulated error'; message: nil; openWithSpec; debugger: debugger ] fork.! !SpecPreDebugWindow methodsFor: 'actions lookup' stamp: 'AndreiChis 9/24/2013 18:33'! actionsForPragmas: aSymbolsCollection ^ (self session class debuggingActionsForPragmas: aSymbolsCollection for: self debugger) ! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:03'! buildButtonWidgetsSpecForActions: aCollection ^ aCollection inject: OrderedCollection new into: [ :specs :action | specs add: action specId; add: action specModel; yourself ] ! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 7/14/2013 19:58' prior: 45950050! buildNotifierPaneWidgetsSpec ^ self message ifNil: [ {#stackPane. #MultiColumnListModel} ] ifNotNil: [ {#codePane. #TextModel} ]! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:37'! clear self debugger ifNotNil: [ :aDebugger | aDebugger clear ]! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 7/14/2013 15:44' prior: 45950602! clearWidget self widgets removeAll. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: self emptyLayout ! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 9/24/2013 17:40' prior: 45950828! close self window delete! ! !SpecPreDebugWindow methodsFor: 'printing' stamp: 'AndreiChis 9/26/2013 18:54' prior: 45950976! columnsFor: anEntry ^ self debugger stack columnsFor: anEntry! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/24/2013 19:21'! createButtonWidgetsForActions: aCollection self instantiateModels: (self buildButtonWidgetsSpecForActions: aCollection). aCollection do: [ :action | self initializeButtonWidget: (self widgets at: action specId) forAction: action ]! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/24/2013 18:38'! createNotifierPaneWidgets self instantiateModels: self buildNotifierPaneWidgetsSpec. self widgets keysDo: [ :key | (self perform: ('initialize', key asString capitalized) asSymbol) ]! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/24/2013 18:40'! createWidgetsForActions: aCollection self createNotifierPaneWidgets. self createButtonWidgetsForActions: aCollection. self setFocusOrderForActions: aCollection! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:40'! dynamicLayoutForActions: aCollection "Create a two column layout for the subwidgets." ^ SpecLayout composed newColumn: [ :c | c newRow: [ :row | aCollection do: [ :anAction | row add: anAction specId ] ] height: self class toolbarHeight. c newRow: [ :row | row add: self notifierPaneWidgetId] ]! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 7/14/2013 15:44' prior: 45952864! emptyLayout ^ SpecLayout composed ! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'AndreiChis 9/24/2013 17:37' prior: 45953102! initialize debugger := nil asValueHolder. super initialize. self whenWindowChanged: [:w | w whenClosedDo: [ self clear ] ].! ! !SpecPreDebugWindow methodsFor: 'initialization widgets' stamp: 'AndreiChis 9/25/2013 17:04'! initializeButtonWidget: aButtonModel forAction: aDebuggingAction aButtonModel debugAction: aDebuggingAction! ! !SpecPreDebugWindow methodsFor: 'initialization widgets' stamp: 'AndreiChis 7/13/2013 22:44' prior: 45953634! initializeCodePane self codePane text: self message ! ! !SpecPreDebugWindow methodsFor: 'initialization widgets' stamp: 'AndreiChis 9/30/2013 17:24' prior: 45954917! initializeStackPane self stackPane displayBlock: [ :aContext | self columnsFor: aContext ]; items: (self debugger stack filteredStackOfSize: self debugger stack class defaultStackSize) ; whenSelectedItemChanged: [ :aContext | "Set the selection before, as debugAction removes the link with the debugger. " self debugger stack setSelectedItem: aContext. self openFullDebugger ] ! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'AndreiChis 9/25/2013 17:41' prior: 45955761! message: aString "Set a message in the pre debug window. If this is nil the notifier pane will display a text editor showing the message (Warning signal: 'Display this text'), otherwise the stack will be displayed." message := aString! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/25/2013 17:41'! notifierPaneWidgetId "Return the id of the notifier widget. Assume there is just one widget that is not a button, which represents the notifier." self buildNotifierPaneWidgetsSpec pairsDo: [ :key :value | (self widgets keys includes: key) ifTrue: [ ^ key ] ]. ^ nil! ! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'AndreiChis 9/30/2013 17:23'! openFullDebugger | currentDebugger | currentDebugger := self debugger. self debugger: nil. self close. currentDebugger openWithSpec; updateToolbar; resetAutoRefresh; label: title! ! !SpecPreDebugWindow methodsFor: 'actions lookup' stamp: 'AndreiChis 9/25/2013 10:46'! preDebuggingActions "Return a collection of debug actions constructed based on the pragmas 'self preDebuggingActionsPragmas'. These actions should understand the message #preDebugWindow:" ^ (self actionsForPragmas: self preDebuggingActionsPragmas) do: [ :each | each preDebugWindow: self ]! ! !SpecPreDebugWindow methodsFor: 'actions lookup' stamp: 'AndreiChis 9/24/2013 18:33'! preDebuggingActionsPragmas ^ { #preDebuggingAction }! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/24/2013 18:32' prior: 45956255! rebuildWidget | debuggingActions | debuggingActions := self preDebuggingActions. self widgets removeAll. self createWidgetsForActions: debuggingActions. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: (self dynamicLayoutForActions: debuggingActions) ! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'AndreiChis 9/24/2013 19:22'! setFocusOrderForActions: aCollection self focusOrder removeAll. aCollection do: [ :action | self focusOrder add: (self perform: action specId) ]. self focusOrder add: (self perform: self notifierPaneWidgetId)! ! !BlockClosure methodsFor: '*DebuggerFilters-Extension' stamp: 'AndreiChis 9/30/2013 10:52'! asFilter ^ BlockFilter forBlock: self. ! ! !SpecDebugger commentStamp: '' prior: 69261205! A SpecDebugger is a UI build in Spec that provides Smalltalk debugging functionality by using a DebugSession. All the debugging logic is in DebugSession and the corresponding debugging actions. SpecDebugger only provides a graphical interface to access that functionality. The debugging actions are managed by the toolbar widget; the stack and all its related actions are managed by the stack widget. ! !SpecDebugger class methodsFor: 'class initialization' stamp: 'AndreiChis 9/29/2013 13:29' prior: 45961437! initialize ErrorRecursion := false. "Ungly check to make sure the debugger will work until everything is in the image" (Smalltalk tools respondsTo: #registerDebugger:withRank:) ifFalse: [ ^ self ]. "Add ourselves to registry. See [Smalltalk tools]" Smalltalk tools registerDebugger: self withRank: 2.! ! !SpecDebugger class methodsFor: 'accessing' stamp: 'AndreiChis 9/29/2013 14:08'! stackWidgetClass ^ SpecDebuggerStack ! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 9/27/2013 18:45'! clear self removeActionsForSession: self session. "No more code should follow after this, as the session might terminate this process." self session ifNotNil: [ :aSession | aSession terminate]! ! !SpecDebugger methodsFor: 'actions' stamp: 'AndreiChis 9/19/2013 17:12' prior: 68774664! close self window delete! ! !SpecDebugger methodsFor: 'accessing contex' stamp: 'AndreiChis 9/30/2013 19:04' prior: 45967673! context ^ self interruptedContext! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 13:39' prior: 68424651! initialize sessionHolder := nil asValueHolder. labelHolder := nil asValueHolder. super initialize. needRefresh := false. self announcer on: WidgetBuilt send: #onWidgetBuilt to: self. self whenWindowChanged: [ :w | w whenClosedDo: [ self clear ] ]. sessionHolder whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ]. labelHolder whenChangedDo: [ self updateTitle ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 9/30/2013 13:16' prior: 68774963! initializePresenter super initializePresenter. self flag: 'some of this logic could be moved to the stack widget'. self flag: 'The toolbar should not be updated when the list changes, but when an action is perormed.'. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ]. "Updating the toolbar will result in changing the button widgets. If the widget hasn't been opened, there will be no spec, which leads to an error." self spec ifNotNil: [ self updateToolbar ] ]. self stack whenSelectedItemChanged: [:aContext | self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext. self stack expand; takeKeyboardFocus "This is needed, as otherwise, the inspectors will take the focus"]. self contextInspector initializeAutoRefresh.! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 9/27/2013 18:43' prior: 68625432! initializeWidgets self instantiateModels: {(#stack -> #SpecDebuggerStack). (#toolbar -> #SpecDebuggerDynamicToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorNavigator). (#contextInspector -> #EyeDebuggerContextInspector)}. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self setFocusOrder! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:39' prior: 45971518! label ^ labelHolder contents! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:39' prior: 45971621! label: aString labelHolder contents: aString! ! !SpecDebugger methodsFor: 'old - public' stamp: 'AndreiChis 9/26/2013 19:13' prior: 45974714! proceed: aTopView self okToChange ifTrue: [ self session resume; clear. self debugger close ] ! ! !SpecDebugger methodsFor: 'old - public' stamp: 'AndreiChis 9/26/2013 19:14' prior: 45975313! send self okToChange ifTrue: [ self session stepInto: self currentContext ] ! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:39' prior: 34270095! session ^ sessionHolder contents! ! !SpecDebugger methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:39' prior: 34270202! session: aSession sessionHolder contents: aSession ! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'ClementBera 5/28/2013 16:02' prior: 45991863! updateCodeFromContext: aContext aContext ifNil: [ self code aboutToStyle: false; text: ''; behavior: nil; setSelection: (1 to: 0) ] ifNotNil: [ |selectionInterval| selectionInterval := self session selectedCodeRangeForContext: aContext. self logCr: aContext receiver class. self code aboutToStyle: true; text: aContext sourceCode; doItReceiver: aContext home receiver; doItContext: aContext; behavior: aContext home receiver class; setSelection: selectionInterval ]! ! !SpecDebugger methodsFor: 'updating' stamp: 'AndreiChis 9/30/2013 13:40' prior: 68776427! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspector: receiver inspector.! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'AndreiChis 9/26/2013 16:32' prior: 45978020! updateStackFromSession: aSession self stack session: aSession.! ! !SpecDebugger methodsFor: 'updating actions' stamp: 'AndreiChis 1/28/2013 11:03' prior: 34272328! updateStep self updateStackFromSession: self session. ! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'AndreiChis 7/18/2013 16:24' prior: 45978309! updateToolbar self toolbar update! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'AndreiChis 1/28/2013 11:04' prior: 34272979! updateToolbarFromSession: aSession self toolbar session: aSession.! ! !SpecDebuggerStack commentStamp: '' prior: 69261667! A SpecDebuggerStack is responsible for displaying and managing the stack. All actions from the context menu of the stack are loaded by using the pragmas 'self contextMenuDebuggingActions'.! !SpecDebuggerStack class methodsFor: 'accessing' stamp: 'AndreiChis 9/25/2013 18:49'! defaultStackSize ^ 20! ! !SpecDebuggerStack class methodsFor: 'filters creation' stamp: 'AndreiChis 9/29/2013 14:35'! doItFilter ^ SelectorFilter forSelector: #doIt! ! !SpecDebuggerStack class methodsFor: 'menu' stamp: 'AndreiChis 9/26/2013 17:08'! dynamicStackMenu: aBuilder aBuilder model stack contextMenuDebuggingActions do: [ :anAction | anAction asMenuRegistrationIn: aBuilder ]! ! !SpecDebuggerStack class methodsFor: 'accessing' stamp: 'AndreiChis 9/30/2013 13:47'! enabledFilters | enabledFilters | enabledFilters := OrderedCollection new. self filterDoItSelectors ifTrue: [ enabledFilters addLast: self doItFilter ]. self filterKernelClasses ifTrue: [ enabledFilters addLast: self kernelClassesFilter ]. self filterNilSelectors ifTrue: [ enabledFilters addLast: self nilMsgsFilter ]. ^ enabledFilters ! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:29'! filterDoItSelectors ^ DoItFilterEnabled ifNil:[ DoItFilterEnabled := false ]! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:22'! filterDoItSelectors: aBoolean DoItFilterEnabled := aBoolean! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:29'! filterKernelClasses ^ KCFilterEnabled ifNil:[ KCFilterEnabled := false ]! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:22'! filterKernelClasses: aBoolean KCFilterEnabled := aBoolean! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:29'! filterNilSelectors ^ NilSelectorsFilterEnabled ifNil:[ NilSelectorsFilterEnabled := false ]! ! !SpecDebuggerStack class methodsFor: 'settings filters' stamp: 'AndreiChis 9/29/2013 14:22'! filterNilSelectors: aBoolean NilSelectorsFilterEnabled := aBoolean! ! !SpecDebuggerStack class methodsFor: 'class initialization' stamp: 'AndreiChis 9/29/2013 13:30'! initialize FilterDictionary := Dictionary new.! ! !SpecDebuggerStack class methodsFor: 'filters creation' stamp: 'AndreiChis 9/29/2013 14:35'! kernelClassesFilter ^ KernelClassesFilter new. ! ! !SpecDebuggerStack class methodsFor: 'filters creation' stamp: 'AndreiChis 9/29/2013 14:36'! nilMsgsFilter ^ SelectorFilter forSelectors: (OrderedCollection with: #isNil with: #ifNotNil: with: #ifNil)! ! !SpecDebuggerStack class methodsFor: 'specs' stamp: 'AndreiChis 9/26/2013 18:32'! spec ^ SpecLayout composed add: #list ! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:03'! browseClassRefs self currentContext ifNotNil: [ :aContext || class| class := aContext methodClass theNonMetaClass. class isTrait ifTrue: [ self systemNavigation browseAllUsersOfTrait: class ] ifFalse: [ self systemNavigation browseAllCallsOnClass: class ] ] ! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseClassVarRefs "1/17/96 sw: devolve responsibility to the class, so that the code that does the real work can be shared" | cls | cls := self currentClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseClassVarRefs: cls]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseClassVariables "Browse the class variables of the selected class." | cls | cls := self currentClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseClassVariables: cls] ! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseInstVarRefs "1/26/96 sw: real work moved to class, so it can be shared" | cls | cls := self currentClassOrMetaClass. (cls notNil and: [cls isTrait not]) ifTrue: [self systemNavigation browseInstVarRefs: cls]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseMessages "Present a menu of all messages sent by the current message. Open a message set browser of all implementors of the message chosen." self currentMessageName ifNotNil: [ self systemNavigation browseAllImplementorsOf: self currentMessageName ]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseMethodFull "Create and schedule a full Browser and then select the current class and message." self currentClassOrMetaClass ifNotNil: [ Smalltalk tools browser fullOnClass: self currentClassOrMetaClass selector: self currentMessageName ]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseSendersOfMessages "Present a menu of the current message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self currentMessageName ifNotNil: [ self systemNavigation browseAllCallsOn: self currentMessageName ]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! browseVersions "Create and schedule a message set browser on all versions of the currently selected message selector." | class selector | class := self currentClassOrMetaClass. selector := self currentMessageName. Smalltalk tools versionBrowser browseVersionsOf: (class compiledMethodAt: selector) class: self currentClass theNonMetaClass meta: class isMeta category: self currentMessageCategoryName selector: selector! ! !SpecDebuggerStack methodsFor: 'printing' stamp: 'AndreiChis 9/25/2013 18:37'! buildClassNameFor: aString "shrink the name shown in the debugger " aString first = $[ ifTrue: [ ^ '[...] in ', (aString splitOn: ' in ') last ]. ^ aString ! ! !SpecDebuggerStack methodsFor: 'printing' stamp: 'AndreiChis 9/25/2013 18:37'! columnsFor: anEntry "Answer the array of contexts." | first second index stringRepresentation | stringRepresentation := anEntry printString. index := stringRepresentation findString: '>>'. first := stringRepresentation copyFrom: 1 to: index-1. second := stringRepresentation copyFrom: index+2 to: stringRepresentation size. ^ {(self buildClassNameFor: first). second}! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 9/26/2013 17:10'! contextMenu: aMenu "Create the context menu dynamically." "This method of constructing the menu is used as it allow one to reuse the MenuRegistration class for creating the actual menu morphs." ^ aMenu addAllFromPragma: 'specDebuggerStackMenuNew' target: self debugger! ! !SpecDebuggerStack methodsFor: 'actions lookup' stamp: 'AndreiChis 9/26/2013 17:10'! contextMenuDebuggingActions ^ self session class debuggingActionsForPragmas: self contextMenuDebuggingActionsPragmas for: self debugger! ! !SpecDebuggerStack methodsFor: 'actions lookup' stamp: 'AndreiChis 9/26/2013 17:09'! contextMenuDebuggingActionsPragmas ^ { #contextMenuDebuggingAction }! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! currentClass ^ self currentContext methodClass! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! currentClassOrMetaClass ^ self currentContext classOrMetaClass! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:05'! currentContext ^ self debugger currentContext! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! currentMessageCategoryName "Answer the name of the message category of the message of the currently selected context." ^ self currentClass organization categoryOfElement: self currentMessageName! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! currentMessageName ^ self currentContext messageName! ! !SpecDebuggerStack methodsFor: 'private' stamp: 'AndreiChis 9/26/2013 18:30'! debugger "Return the instance of the debugger containing this toolbar" ^ owner! ! !SpecDebuggerStack methodsFor: 'filtering' stamp: 'AndreiChis 9/30/2013 13:44'! enabledFilters ^ self class enabledFilters! ! !SpecDebuggerStack methodsFor: 'actions' stamp: 'AndreiChis 9/26/2013 16:41'! expand "If the last element of the visible stack is selected, expand the stack, if more elements are available." self list selectedItem ifNil: [ ^ self ]. self list listItems ifNotNil: [ :aList | (self list selectedIndex = self list listSize and: [ self list selectedItem sender notNil ]) ifTrue: [ self expandBy: self class defaultStackSize ] ] ! ! !SpecDebuggerStack methodsFor: 'actions' stamp: 'AndreiChis 9/29/2013 16:25'! expandBy: anInteger | selectionIndex | selectionIndex := self list selectedIndex. self list items: (self filteredStackOfSize: anInteger + self list listSize). self list setSelectedIndex: selectionIndex ! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! fileOutMessage "Put a description of the selected message on a file" self currentMessageName ifNotNil: [ Cursor write showWhile: [ self currentClassOrMetaClass fileOutMethod: self currentMessageName ] ]! ! !SpecDebuggerStack methodsFor: 'filtering' stamp: 'AndreiChis 9/30/2013 13:43'! filteredStackOfSize: anInteger ^ self debugger class filterCommonMessageSends ifTrue: [ self session stackOfSize: anInteger usingFilters: self enabledFilters ] ifFalse: [ self session stackOfSize: anInteger ] ! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 9/29/2013 14:44'! initialize sessionHolder := nil asValueHolder. super initialize. "self setDefaultFilters."! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 9/26/2013 16:35'! initializePresenter super initializePresenter. sessionHolder whenChangedDo: [ :aSession | self updateContentFromSession: aSession ] ! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 9/26/2013 16:58'! initializeWidgets self instantiateModels: {(#listWidget -> #MultiColumnListModel)}. self list displayBlock: [ :aContext | self columnsFor: aContext ]. self list menu: [ :aMenu | self contextMenu: aMenu]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! inspectInstances "Inspect all instances of the selected class." self currentClassOrMetaClass ifNotNil: [ :aClass | aClass theNonMetaClass inspectAllInstances ]! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! inspectSubInstances "Inspect all instances of the selected class and all its subclasses" self currentClassOrMetaClass ifNotNil: [ :aClass | aClass theNonMetaClass inspectSubInstances ]! ! !SpecDebuggerStack methodsFor: 'accessing' stamp: 'AndreiChis 9/26/2013 10:40'! list ^ listWidget! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/26/2013 19:01'! listItems ^ self list listItems! ! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'AndreiChis 9/26/2013 19:04'! methodHierarchy "Create and schedule a method browser on the hierarchy of implementors." self systemNavigation methodHierarchyBrowserForClass: self currentClassOrMetaClass selector: self currentMessageName ! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/25/2013 19:00'! selectedItem ^ self list selectedItem! ! !SpecDebuggerStack methodsFor: 'accessing' stamp: 'AndreiChis 9/26/2013 10:42'! session ^ sessionHolder contents! ! !SpecDebuggerStack methodsFor: 'accessing' stamp: 'AndreiChis 9/26/2013 10:42'! session: aSession sessionHolder contents: aSession! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/25/2013 18:53'! setSelectedItem: anItem self list setSelectedItem: anItem! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/26/2013 16:36'! takeKeyboardFocus self list takeKeyboardFocus! ! !SpecDebuggerStack methodsFor: 'updating' stamp: 'AndreiChis 9/29/2013 14:58'! updateContentFromSession: aSession self list items: (aSession ifNil: [ OrderedCollection new ] ifNotNil: [ self filteredStackOfSize: self class defaultStackSize ] )! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/25/2013 18:45'! whenListChanged: aBlock self list whenListChanged: aBlock! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 9/25/2013 18:46'! whenSelectedItemChanged: aBlock self list whenSelectedItemChanged: aBlock! ! !DebuggerModelTest methodsFor: 'running' stamp: 'AndreiChis 9/30/2013 18:35'! setUp context := [ Set new ] asContext. process := Process forContext: context priority: Processor userInterruptPriority! ! !DebuggerModelTest methodsFor: 'tests' stamp: 'AndreiChis 9/25/2013 18:13'! testCorrectlyCreateDebugSession session := DebugSession process: process context: context. self assert: session isNotNil. self assert: process isSuspended. self assert: session interruptedContext equals: context. self assert: session interruptedContext printString equals: '[ Set new ] in DebuggerModelTest>>setUp'.! ! !DebuggerModelTest methodsFor: 'tests' stamp: 'AndreiChis 9/30/2013 18:39'! testStepInto session:= DebugSession process: process context: context. self deny: (session isContextPostMortem: context). self assert: session interruptedContext equals: context. self assert: session interruptedContext printString equals: '[ Set new ] in DebuggerModelTest>>setUp' . session stepInto; stepInto. self assert: session interruptedContext printString equals: 'Set class>>new'. ! ! !DebuggerModelTest methodsFor: 'tests' stamp: 'AndreiChis 9/25/2013 18:14'! testStepOver session:= DebugSession process: process context: context. self assert: session interruptedContext equals: context. self assert: session interruptedContext printString equals: '[ Set new ] in DebuggerModelTest>>setUp' . session stepOver. self assert: session interruptedContext printString equals: '[ Set new ] in DebuggerModelTest>>setUp'.! ! !FilterTest methodsFor: 'running' stamp: 'AndreiChis 9/30/2013 11:00'! setUp context := [ (Set with: 1 with: 2) collect: [ :e | e * 2 ]. self halt ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. session := DebugSession process: process context: context. nilContext := [ self isNil ] asContext. otherProcess := Process forContext: nilContext priority: Processor userInterruptPriority. otherSession := (DebugSession process: otherProcess context: nilContext) stepInto! ! !FilterTest methodsFor: 'tests' stamp: 'AndreiChis 9/30/2013 11:01'! testBlockFilter | fromBlockFilter | fromBlockFilter := [ :ctx | ctx isNotNil ] asFilter. self assert: (fromBlockFilter shouldDisplay: context)! ! !FilterTest methodsFor: 'tests' stamp: 'AndreiChis 9/30/2013 11:01'! testBooleanFilter | kernelFilter doItFilter filters booleanFilter | kernelFilter := KernelClassesFilter new. doItFilter := SelectorFilter forSelector: #doIt. filters := OrderedCollection with: kernelFilter with: doItFilter. booleanFilter := BooleanFilter withFilters: filters operator: #or:. self assert: (booleanFilter shouldDisplay: context)! ! !FilterTest methodsFor: 'tests' stamp: 'AndreiChis 9/30/2013 11:01'! testKernelClassesFilter | kernelClassesFilter setContext | setContext := session stepInto stepInto stack first. kernelClassesFilter := KernelClassesFilter new. self assert: (kernelClassesFilter shouldDisplay: context). self assert: (kernelClassesFilter shouldDisplay: nilContext). self deny: (kernelClassesFilter shouldDisplay: setContext)! ! !FilterTest methodsFor: 'tests' stamp: 'AndreiChis 9/30/2013 11:01'! testSelectorFilter | doItFilter nilMessagesFilter | doItFilter := SelectorFilter forSelector: #doIt. self assert: (doItFilter shouldDisplay: context). self assert: (doItFilter shouldDisplay: nilContext). nilMessagesFilter := SelectorFilter forSelectors: (OrderedCollection with: #isNil with: #ifNil:). self assert: (nilMessagesFilter shouldDisplay: context) "self deny: (nilMessagesFilter shouldDisplay: otherSession context)"! ! SpecDebugger removeSelector: #updateToolbarFromContext:! SpecDebugger removeSelector: #updateStackFromSelectedContext! SpecDebugger removeSelector: #updateReceiverInspector! SpecDebugger removeSelector: #stackActionMenu:! SpecDebugger removeSelector: #shortCuts! SpecDebugger removeSelector: #setStackShortcuts! SpecDebugger removeSelector: #setStackMenu! SpecDebugger removeSelector: #postMortemStackActionMenu:! SpecDebugger removeSelector: #expandStack! SpecDebugger removeSelector: #contextStackMenu:! SpecDebugger removeSelector: #columnsFor:! SpecDebugger class removeSelector: #menuStackAction:! SpecDebugger class removeSelector: #menuStack:! SpecDebugger class removeSelector: #expandedStackSize! SpecDebugger class removeSelector: #defaultStackSize! SpecDebugger class removeSelector: #columnsFor:! SpecDebugger class removeSelector: #buildClassNameFor:! SpecDebuggerToolbar removeSelector: #whereIsAction! SpecDebuggerToolbar removeSelector: #validButtonIds! SpecDebuggerToolbar removeSelector: #updateFullStackButton! SpecDebuggerToolbar removeSelector: #updateCreateMethodButton! SpecDebuggerToolbar removeSelector: #update! SpecDebuggerToolbar removeSelector: #toggleBreakOnEntry! SpecDebuggerToolbar removeSelector: #stepThroughAction! SpecDebuggerToolbar removeSelector: #stepOverAction! SpecDebuggerToolbar removeSelector: #stepIntoAction! SpecDebuggerToolbar removeSelector: #shouldEnableFullStackButton! SpecDebuggerToolbar removeSelector: #shouldEnableCreateMethodButton! SpecDebuggerToolbar removeSelector: #setFocusOrder! SpecDebuggerToolbar removeSelector: #session:! SpecDebuggerToolbar removeSelector: #session! SpecDebuggerToolbar removeSelector: #selectedContext:! SpecDebuggerToolbar removeSelector: #selectedContext! SpecDebuggerToolbar removeSelector: #runToSelectionAction! SpecDebuggerToolbar removeSelector: #returnValue! SpecDebuggerToolbar removeSelector: #resumeAction! SpecDebuggerToolbar removeSelector: #restartAction! SpecDebuggerToolbar removeSelector: #rebuildToolbar! SpecDebuggerToolbar removeSelector: #peelToFirst! SpecDebuggerToolbar removeSelector: #methodHierarchy! SpecDebuggerToolbar removeSelector: #inspectSubInstances! SpecDebuggerToolbar removeSelector: #inspectInstances! SpecDebuggerToolbar removeSelector: #initializeWhereIsButton! SpecDebuggerToolbar removeSelector: #initializeStepThroughButton! SpecDebuggerToolbar removeSelector: #initializeStepOverButton! SpecDebuggerToolbar removeSelector: #initializeStepIntoButton! SpecDebuggerToolbar removeSelector: #initializeRunToSelectionButton! SpecDebuggerToolbar removeSelector: #initializeResumeButton! SpecDebuggerToolbar removeSelector: #initializeRestartButton! SpecDebuggerToolbar removeSelector: #initializePresenter! SpecDebuggerToolbar removeSelector: #initializeFullStackButton! SpecDebuggerToolbar removeSelector: #initializeCreateMethodButton! SpecDebuggerToolbar removeSelector: #initialize! SpecDebuggerToolbar removeSelector: #hasFullStackAction! SpecDebuggerToolbar removeSelector: #hasCreateMethodAction! SpecDebuggerToolbar removeSelector: #fullStackAction! SpecDebuggerToolbar removeSelector: #fileOutMessage! SpecDebuggerToolbar removeSelector: #expandStackBy:! SpecDebuggerToolbar removeSelector: #emptyLayout! SpecDebuggerToolbar removeSelector: #dynamicLayout! SpecDebuggerToolbar removeSelector: #debugger! SpecDebuggerToolbar removeSelector: #currentMessageName! SpecDebuggerToolbar removeSelector: #currentMessageCategoryName! SpecDebuggerToolbar removeSelector: #currentContext! SpecDebuggerToolbar removeSelector: #currentClassOrMetaClass! SpecDebuggerToolbar removeSelector: #currentClass! SpecDebuggerToolbar removeSelector: #createWidgets! SpecDebuggerToolbar removeSelector: #createMethodAction! SpecDebuggerToolbar removeSelector: #copyToClipboard! SpecDebuggerToolbar removeSelector: #clearToolbar! SpecDebuggerToolbar removeSelector: #buildButtonWidgetsSpec! SpecDebuggerToolbar removeSelector: #browseVersions! SpecDebuggerToolbar removeSelector: #browseSendersOfMessages! SpecDebuggerToolbar removeSelector: #browseMethodFull! SpecDebuggerToolbar removeSelector: #browseMessages! SpecDebuggerToolbar removeSelector: #browseInstVarRefs! SpecDebuggerToolbar removeSelector: #browseClassVariables! SpecDebuggerToolbar removeSelector: #browseClassVarRefs! SpecDebuggerToolbar removeSelector: #browseClassRefs! SpecDebuggerToolbar class removeSelector: #spec! Smalltalk globals removeClassNamed: #SpecDebuggerToolbar! DebugSession removeSelector: #implement:inClass:! SpecPreDebugWindow removeSelector: #setFocusOrder! SpecPreDebugWindow removeSelector: #resumeAction! SpecPreDebugWindow removeSelector: #notifierPaneWidgetAssociation! SpecPreDebugWindow removeSelector: #initializeWidgets! SpecPreDebugWindow removeSelector: #initializeResumeButton! SpecPreDebugWindow removeSelector: #initializeDebugButton! SpecPreDebugWindow removeSelector: #initializeCreateMethodButton! SpecPreDebugWindow removeSelector: #initializeAbandonButton! SpecPreDebugWindow removeSelector: #dynamicLayout! SpecPreDebugWindow removeSelector: #debugAction! SpecPreDebugWindow removeSelector: #createWidgets! SpecPreDebugWindow removeSelector: #createMethodAction! SpecPreDebugWindow removeSelector: #buttonWidgetsAssociations! SpecPreDebugWindow removeSelector: #buildButtonWidgetsSpec! SpecPreDebugWindow removeSelector: #abandonAction! "DebuggerActions"! "DebuggerFilters"! "DebuggerModel"! "Settings-Tools"! "Spec-Debugger"! ----End fileIn----! ----QUIT----an Array(4 October 2013 10:54:19 am) Pharo.image priorSource: 18910820! ----STARTUP----an Array(4 October 2013 11:00:10 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 11:00:10 am) Pharo-30446.image priorSource: 19022721! ----STARTUP----an Array(4 October 2013 1:17:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 13:14' prior: 69242773! commentForCurrentUpdate ^ '11773 SpecDebugger(Object)>>doesNotUnderstand: #expandStack https://pharo.fogbugz.com/f/cases/11773 11774 sync RPackage-SystemIntegration https://pharo.fogbugz.com/f/cases/11774 11775 trivial clean PolyMorph https://pharo.fogbugz.com/f/cases/11775'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 13:14'! script102 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.60.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.43.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.54.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.18.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.123.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.124.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Bindings-StephaneDucasse.33.mcz Spec-Builder-EstebanLorenzano.39.mcz Spec-Core-MarcusDenker.164.mcz Spec-Debugger-MarcusDenker.162.mcz Spec-Examples-MarcusDenker.44.mcz Spec-Inspector-MarcusDenker.100.mcz Spec-Layout-StephaneDucasse.55.mcz Spec-Tests-MarcusDenker.31.mcz Spec-Tools-MarcusDenker.144.mcz Spec-Widgets-MarcusDenker.253.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.30.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1291.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 13:15'! update30447 "self new update30447" self withUpdateLog: '11773 SpecDebugger(Object)>>doesNotUnderstand: #expandStack https://pharo.fogbugz.com/f/cases/11773 11774 sync RPackage-SystemIntegration https://pharo.fogbugz.com/f/cases/11774 11775 trivial clean PolyMorph https://pharo.fogbugz.com/f/cases/11775'. self loadTogether: self script102 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DiffMorph methodsFor: 'adding' stamp: 'gvc 10/24/2006 12:34' prior: 20834563! additionColor "Answer the color used to show additions." ^Color paleGreen alpha: 0.5! ! !DiffMorph methodsFor: 'actions' stamp: 'gvc 10/31/2006 11:51' prior: 20835891! calculatedJoinMappings "Calculate the join parameters between src and dst and answer. sl = src line, dl = dst line, j = joins, ds = dst run start, ss = src run start de = dst run end, se = dst run end, mds = match dst start, mss = match src start" |sl dl j ds ss de se mds mss| sl := dl := 0. j := OrderedCollection new. ds := de:= ss := se := mss := mds := 0. self difference do: [:p | p key = #match ifTrue: [ sl := sl + 1. dl := dl + 1. mss = 0 ifTrue: [mss := sl. mds := dl]. (ds > 0 or: [ss > 0]) ifTrue: [ ss = 0 ifTrue: [ss := sl]. ds = 0 ifTrue: [ds := dl]. se = 0 ifTrue: [se := ss - 1]. de = 0 ifTrue: [de := ds - 1]. j add: (self newJoinSectionFrom: (ss to: se) to: (ds to: de)). ds := de := ss := se := 0]]. p key = #remove ifTrue: [ mss > 0 ifTrue: [ j add: (self newMatchJoinSectionFrom: (mss to: sl) to: (mds to: dl)). mss := mds := 0]. sl := sl + 1. ss = 0 ifTrue: [ss := sl]. se := sl]. p key = #insert ifTrue: [ mss > 0 ifTrue: [ j add: (self newMatchJoinSectionFrom: (mss to: sl) to: (mds to: dl)). mss := mds := 0]. dl := dl + 1. ss > 0 ifTrue: [ se = 0 ifTrue: [se := ss]. de = 0 ifTrue: [de := ds]. j add: (self newJoinSectionFrom: (ss to: se) to: (ds to: de)). ds := de := ss := se := 0]. ds = 0 ifTrue: [ds := dl]. de := dl]]. sl := sl + 1. dl := dl + 1. (ds > 0 or: [ss > 0]) ifTrue: [ ss = 0 ifTrue: [ss := sl ]. ds = 0 ifTrue: [ds := dl]. se = 0 ifTrue: [se := ss - 1]. de = 0 ifTrue: [de := ds - 1]. j add: (self newJoinSectionFrom: (ss to: se) to: (ds to: de))]. mss > 0 ifTrue: [ j add: (self newMatchJoinSectionFrom: (mss to: sl - 1) to: (mds to: dl - 1))]. ^j! ! !DiffMorph methodsFor: 'accessing' stamp: 'gvc 10/31/2006 13:23' prior: 20839360! font: aFont "Set the font on the src and dst morphs." self srcMorph font: aFont. self dstMorph font: aFont! ! !DiffMorph methodsFor: 'instance creation' stamp: 'gvc 9/2/2008 15:24' prior: 20839549! from: old to: new "Set the old (src) and new (dst) text." self srcText: old; dstText: new. self setText; calculateDifference; calculateJoinMappings; calibrateScrollbar; applyHighlights; applyJoin; applyMap! ! !DiffMorph methodsFor: 'actions' stamp: 'gvc 9/2/2008 15:45' prior: 20839855! from: old to: new contextClass: aClass "Set the old (src) and new (dst) text." self contextClass: aClass; srcText: old; dstText: new. self setText; calculateDifference; calculateJoinMappings; calibrateScrollbar; applyHighlights; applyJoin; applyMap! ! !DiffMorph methodsFor: 'actions' stamp: 'gvc 11/1/2006 14:12' prior: 20840774! joinSectionClass "Answer the class to use for a new join section." ^JoinSection! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 10/26/2006 13:52' prior: 20841460! newDstMorph "Answer a new dst text morph." ^self newSrcMorph! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'BenjaminVanRyseghem 11/25/2012 04:07' prior: 20841620! newHighlight "Anewser a new highlight." ^TextHighlightByBounds new color: self modificationColor; borderWidth: 1; borderColor: self edgeColor! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'BenjaminVanRyseghem 11/25/2012 04:09' prior: 20841867! newHighlight: type "Anewser a new highlight." ^TextHighlightByBounds new color: (self colorForType: type); borderWidth: 1; borderColor: self edgeColor; fillWidth: true! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 2/3/2010 16:22' prior: 20842124! newJoinMorph "Answer a new join morph." |w| w := DiffJoinMorph splitterWidth. ^DiffJoinMorph new hResizing: #shrinkWrap; vResizing: #spaceFill; extent: w@4; minWidth: w; color: self joinColor! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 11/1/2006 14:11' prior: 20842410! newJoinSection "Answer a new join section." ^self joinSectionClass new srcColor: self modificationColor; dstColor: self modificationColor; borderWidth: 1; borderColor: self edgeColor; addDependent: self; yourself! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 10/31/2006 14:08' prior: 20842718! newJoinSectionFrom: srcRange to: dstRange "Answer a new join section." |spl dpl sy1 sy2 dy1 dy2 t c| spl := self srcMorph textMorph paragraph lines. dpl := self dstMorph textMorph paragraph lines. t := #modification. sy1 := srcRange first > spl size ifTrue: [t := #addition. spl last bottom truncated - 1] ifFalse: [(spl at: srcRange first) top truncated - 1]. sy2 := srcRange size < 1 ifTrue: [t := #addition. sy1 + 3] ifFalse: [srcRange last > spl size ifTrue: [spl last bottom truncated + 3] ifFalse: [(spl at: srcRange last) bottom truncated - 1]]. dy1 := dstRange first > dpl size ifTrue: [t := #removal. dpl last bottom truncated - 1] ifFalse: [(dpl at: dstRange first) top truncated - 1]. dy2 := dstRange size < 1 ifTrue: [t := #removal. dy1 + 3] ifFalse: [dstRange last > dpl size ifTrue: [dpl last bottom truncated + 3] ifFalse: [(dpl at: dstRange last) bottom truncated - 1]]. c := self colorForType: t. ^self newJoinSection type: t; srcColor: c; dstColor: c; srcLineRange: srcRange; dstLineRange: dstRange; srcRange: (sy1 to: sy2); dstRange: (dy1 to: dy2); createHighlightsFrom: self srcMorph textMorph paragraph to: self dstMorph textMorph paragraph! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 2/10/2010 13:31' prior: 20844038! newMapMorph "Answer a new map morph." ^(DiffMapMorph new hResizing: #shrinkWrap; vResizing: #spaceFill; extent: 20@4; minWidth: 20; borderStyle: (BorderStyle inset width: 1)) when: #mapClicked send: #mapClicked: to: self! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 11/1/2006 11:07' prior: 20844360! newMatchJoinSectionFrom: srcRange to: dstRange "Answer a new match join section." |spl dpl sy1 sy2 dy1 dy2 c| spl := self srcMorph textMorph paragraph lines. dpl := self dstMorph textMorph paragraph lines. sy1 := (spl at: srcRange first) top truncated. sy2 := (spl at: srcRange last) bottom truncated. dy1 := (dpl at: dstRange first) top truncated. dy2 := (dpl at: dstRange last) bottom truncated. c := self colorForType: #match. ^self newJoinSection type: #match; borderWidth: 0; srcColor: c; dstColor: c; srcLineRange: srcRange; dstLineRange: dstRange; srcRange: (sy1 to: sy2); dstRange: (dy1 to: dy2); createHighlightsFrom: self srcMorph textMorph paragraph to: self dstMorph textMorph paragraph! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 9/2/2008 15:56' prior: 20845168! newPrettyPrintCheckboxMorph "Answer a new checkbox for specifying whether to use pretty printing for the diff texts." ^self newCheckboxFor: self getSelected: #prettyPrint setSelected: #prettyPrint: getEnabled: nil label: 'Pretty print' translated help: 'If selected, pretty print will be applied to any displayed method source (eliminates trivial formatting changes)' translated! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 12/1/2008 11:48' prior: 20845642! newScrollbarMorph "Answer a new scrollbar morph." ^ScrollBar new model: self; setValueSelector: #vScroll:; vResizing: #spaceFill; width: self theme scrollbarThickness! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'AlainPlantec 8/28/2011 12:42' prior: 20845908! newSrcMorph "Answer a new src text morph." ^(self newTextEditorFor: self getText: nil setText: nil getEnabled: nil) hideVScrollBarIndefinitely: true; borderWidth: 0; enabled: false; wrapFlag: false; selectionColor: self textSelectionColor; setText: ''! ! !DiffMorph methodsFor: 'instance-creation' stamp: 'gvc 10/20/2006 11:26' prior: 20846261! newText "Answer the new (dst) text." ^self dstMorph text! ! !DiffMorph methodsFor: 'updating' stamp: 'MartinDias 9/9/2013 15:07' prior: 67690513! update: aSymbol aSymbol == #addOptions ifTrue: [ ^ self addOptionsPanel ]. aSymbol == #removeOptions ifTrue: [ ^ self removeOptionsPanel ]. ^ super update: aSymbol! ! !DiffMorph methodsFor: 'update' stamp: 'gvc 9/2/2008 15:23' prior: 20848170! updateText "Reset the text if we have some." (self srcText notNil and: [self dstText notNil]) ifTrue: [ self from: self srcText to: self dstText]! ! !DiffChangeMorph methodsFor: 'initialization' stamp: 'gvc 2/9/2010 13:12' prior: 20819417! initialColorInSystemWindow: aSystemWindow "Answer the colour the receiver should be when added to a SystemWindow." ^Color transparent! ! !DiffChangeMorph methodsFor: 'user interface' stamp: 'gvc 3/5/2010 12:43' prior: 20819082! initialExtent "Answer the initial extent for the receiver." ^RealEstateAgent standardWindowExtent! ! !SpecDebuggerStack methodsFor: 'protocol' stamp: 'AndreiChis 10/4/2013 11:53'! selectedIndex ^ self list selectedIndex! ! !PSMCMergeMorph methodsFor: 'actions' stamp: 'gvc 1/9/2009 15:43' prior: 28961425! cancel "Delete the window to cancel." self window delete! ! !PSMCMergeMorph methodsFor: 'actions' stamp: 'gvc 11/1/2006 11:53' prior: 28961569! compositeText "Answer the composite text from the patch morph." ^self patchMorph compositeText! ! !PSMCMergeMorph methodsFor: 'actions' stamp: 'gvc 2/3/2010 16:05' prior: 28962715! fromDescription: aString "Set the description for the left-hand side of the merge, typically 'currently in image'." self patchMorph fromDescription: aString! ! !PSMCMergeMorph methodsFor: '*Polymorph-Widgets' stamp: 'gvc 2/4/2010 16:49' prior: 28962959! initialColorInSystemWindow: aSystemWindow "Answer the colour the receiver should be when added to a SystemWindow." ^Color transparent! ! !PSMCMergeMorph methodsFor: 'actions' stamp: 'gvc 1/9/2009 15:44' prior: 28963179! merge "Do the merge and close if no conflicts." ^self model isMerged ifTrue: [self merged: true. self window delete] ifFalse: [self inform: 'You must resolve all conflicts first.' translated]! ! !PSMCMergeMorph methodsFor: 'instance-creation' stamp: 'gvc 1/29/2009 12:43' prior: 28963467! newButtonsMorph "Answer a new buttons morph." ^(self newRow: { self newConflictsButton. self newToolSpacer hResizing: #spaceFill. self newMergeButton. self newCancelButton}) removeProperty: #fillStyle; listCentering: #bottomRight; layoutInset: 4! ! !PSMCMergeMorph methodsFor: 'instance-creation' stamp: 'gvc 11/1/2006 11:53' prior: 28963818! newCodeMorph "Answer a new code morph." ^(self newTextEditorFor: self getText: #compositeText setText: #compositeText: getEnabled: nil) wrapFlag: false; setText: ''! ! !PSMCMergeMorph methodsFor: 'instance-creation' stamp: 'gvc 1/29/2009 12:54' prior: 28964080! newConflictsButton "Answer a new button for displaying the count of outstanding conflicts and navigating to each. It will be disabled if all conflicts are resolved." ^(self newButtonFor: self getState: nil action: #selectNextConflict arguments: #() getEnabled: #notAllConflictsResolved getLabel: #conflictCountString help: 'Select the next conflict in the tree' translated) vResizing: #spaceFill "workaround until table layout fixed"! ! !PSMCMergeMorph methodsFor: 'instance-creation' stamp: 'gvc 1/29/2009 12:42' prior: 28964622! newMergeButton "Answer a new button for performing the merge. It will be disabled if any conflicts are unresolved." ^self newButtonFor: self action: #merge getEnabled: #allConflictsResolved label: 'Merge' translated help: 'Merge the version into the image' translated! ! !PSMCMergeMorph methodsFor: 'instance-creation' stamp: 'gvc 11/1/2006 14:26' prior: 28964991! newPatchMorph "Answer a new patch morph." ^PSMCMergePatchMorph new borderWidth: 0; addDependent: self; yourself! ! !PSMCMergeMorph methodsFor: 'actions' stamp: 'gvc 2/3/2010 16:05' prior: 28965567! toDescription: aString "Set the description for the right-hand side of the merge, typically 'incoming'." self patchMorph toDescription: aString! ! !DebuggerTest methodsFor: 'testing' stamp: 'AndreiChis 10/4/2013 11:51' prior: 46012620! testBasic | context process debugger printedString | context := [ 20 factorial ] asContext. process := Process forContext: context priority: Processor userInterruptPriority. debugger := Smalltalk tools debugger new process: process controller: nil context: context. debugger stack expand. self assert: debugger stack selectedIndex = 1. printedString := OpalCompiler isActive ifTrue: [ '[ 20 factorial ] in DebuggerTest>>testBasic'] ifFalse: [ '[...] in DebuggerTest>>testBasic' ]. self assert: debugger stack selectedItem printString = printedString. debugger send. debugger send. self assert: debugger code getText = (Integer>>#factorial) sourceCode. self assert: debugger stack selectedItem printString = 'SmallInteger(Integer)>>factorial'.! ! !SequenceableCollection methodsFor: '*Polymorph-EventEnhancements' stamp: 'MarcusDenker 10/4/2013 10:42' prior: 32972873! aggregateRuns: aBlock "Answer a new collection of the same species as the receiver with elements being collections (of the receiver species) containing those elements of the receiver for which the given block consecutively evaluates to the same object." | str eStr r| str := Array new writeStream. r := nil. eStr := Array new writeStream. self do: [:e | | t | (t := aBlock value: e) = r ifFalse: [r := t. eStr isEmpty ifFalse: [str nextPut: (eStr contents as: self species). eStr reset]]. eStr nextPut: e]. eStr isEmpty ifFalse: [str nextPut: (eStr contents as: self species)]. ^str contents as: self species ! ! SpecDebugger removeSelector: #taskbarIcon! SpecPreDebugWindow removeSelector: #taskbarIcon! DiffMorph removeSelector: #defaultColor! "Polymorph-EventEnhancements"! "Polymorph-TaskbarIcons"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Spec-Debugger"! "ToolsTest"! ----End fileIn----! ----QUIT----an Array(4 October 2013 1:17:20 pm) Pharo.image priorSource: 19022926! ----STARTUP----an Array(4 October 2013 1:23:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 1:23:10 pm) Pharo-30447.image priorSource: 19048306! ----STARTUP----an Array(4 October 2013 2:22:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 14:17' prior: 69354879! commentForCurrentUpdate ^ '11740 Remove Morphic dependency from Spec https://pharo.fogbugz.com/f/cases/11740 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 14:18'! script103 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.60.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.175.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.102.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.35.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 14:18'! update30448 "self new update30448" self withUpdateLog: '11740 Remove Morphic dependency from Spec https://pharo.fogbugz.com/f/cases/11740 '. self loadTogether: self script103 merge: false. SpecInterpreter hardResetBindings. self flushCaches. ! ! "ScriptLoader30"! !SpecDialogWindow commentStamp: '' prior: 42699445! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !ComposableModel commentStamp: '' prior: 42202014! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !AbstractWidgetModel commentStamp: '' prior: 0! AbstractBasicWidget is an abstract class for basic widgets! !ButtonModel commentStamp: '' prior: 42145249! A ButtonComposableModel is an applicative model which handle a basic button. self example! !CheckBoxModel commentStamp: '' prior: 42164106! A CheckboxModel is a spec model for Checkbox You can also have a look at CheckBoxExample for a full example of how to use them with a group. ! !ContainerModel commentStamp: '' prior: 0! I am a model for a container. My purpose is to hold multiple subwidgets to glue them together. I should not be used directly! !DiffModel commentStamp: '' prior: 67682913! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DropListModel commentStamp: '' prior: 42239156! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !EditableList commentStamp: '' prior: 68314029! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !LabelModel commentStamp: '' prior: 42373508! A LabelModel is a spec model for Labels! !ListModel commentStamp: '' prior: 0! A ListComposableModel is an applicative model which handle a basic list. | t | t:= ListComposableModel new. t openWithSpec. t items: (Smalltalk allClasses). self example | t | t:= ListComposableModel new. t openWithSpec. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). | t | t:= ListComposableModel new. t openWithSpec. t filteringBlock: [:col | col select: [:each | each name beginsWith: 'Zn']]. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). ! !IconListModel commentStamp: '' prior: 42345475! An IconListModel is a spec model for icon list! !MultiColumnListModel commentStamp: '' prior: 42460670! A MultiColumnListModel is a spec model for Multi columns list! !NewListModel commentStamp: '' prior: 49804414! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !RadioButtonModel commentStamp: '' prior: 42619864! A RadioButtonModel is a spec model for RadioButton !! The method privateSetState: is really private and should only be used by RadioButtonGroup !! You can also have a look at RadioButtonGroupExample for a full example of how to use them with a group.! !SliderModel commentStamp: '' prior: 42680357! A SliderModel is a spec model for a slider. See example: self example! !TabManagerModel commentStamp: '' prior: 0! I am a spec model representing a tab manager. My role is to gather multiple tabs, and make them work together! !TabModel commentStamp: '' prior: 0! I am a spec model representing a single tab. Ishould not be used without being contained into a TabManagerModel! !TextModel commentStamp: '' prior: 42746242! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 42745005! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !TreeModel commentStamp: '' prior: 45471737! I am the Spec model of a MorphTreeMorph tree.! !WindowModel commentStamp: '' prior: 42790938! A WindowModel is a spec model for a Window! !DialogWindowModel commentStamp: '' prior: 42227815! A DialogWindowModel is a model used to describe a DialogWindow! !WorldModel commentStamp: '' prior: 42792665! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !CheckBoxExample commentStamp: '' prior: 42164007! A CheckBoxExample is a simple example of how to use CheckBoxes. CheckBoxExample new openWithSpec! !ClassMethodBrowser commentStamp: '' prior: 42172198! A ClassMethodBrowser is a simple browser using spec and reusing MethodBrowser to browse classes>>methods>>sourceCode. | cb | cb := ClassMethodBrowser new. cb openWithSpec. cb classes: Smalltalk allClasses.! !DateModel commentStamp: '' prior: 69022861! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !DropListExample commentStamp: '' prior: 42238988! A DropListExample is a simple example of how to use drop lists. DropListExample new openWithSpec! !DynamicWidgetChange commentStamp: '' prior: 42241793! I am a dummy proto to see how easy it is to replace a subwidget with another one dynamically. DynamicWidgetChange new openWithSpec! !InputWidget commentStamp: '' prior: 42357954! I am a generic widget far a user to enter a string Example self example (printMe)! !ListSelectionModel commentStamp: '' prior: 42383656! A ListSelectionModel is a basic example to show multi selection on lists | l | l := ListSelectionModel new. l openWithSpec! !MessageBrowser commentStamp: '' prior: 42415131! A MessageBrowser is a UI to browse a list of method, regardless of what they could be. example: MessageBrowser new openWithSpec; messages: (SystemNavigation new allSendersOf: #at:) yourself! !MethodBrowser commentStamp: '' prior: 42429876! A MethodBrowser is a simple browser using Spec to display a list of methods and their source code | si | si := MethodBrowser new. si openWithSpec. si methods: Object methodDict values! !MethodToolbar commentStamp: '' prior: 42438080! A MethodToolbar is xxxxxxxxx. | b | b := MethodToolbar new. b openWithSpec. b method: (ButtonModel>>#state:). b method: nil! !PickListModel commentStamp: '' prior: 42537907! A PickList is a tick list done using spec.! !RadioButtonGroupExample commentStamp: '' prior: 42619771! A RadioButtonGroupExample is an simple example about how to use RadioButtons and RadioGroup! !ScrollSyncExample commentStamp: '' prior: 45535629! I am an example that exposes to the world how to use a ScrollPane announcement to have a nice morph being in sync with the current vertical scrollbar position. Invoke me with: ScrollSyncExample new openWithSpec! !SearchableList commentStamp: '' prior: 42654253! SearchableList new items: #( aaa abc axz bbb bfbg bof c); openWithSpec should it be a subclass of LIstModel? Because now I will have to delegate a lot? and I cannot plug a IconList How do I make textModel react to every keystroke without an accept! !SearchableTree commentStamp: '' prior: 42654508! I am a tree plus an input field to be able to filter the tree elements! !TabsExample commentStamp: '' prior: 0! I am an example of how to use tabs! !TextFieldExample commentStamp: '' prior: 42744326! A TextFieldExample is a simple example of how to use TextFields.! !SpecTreeModel commentStamp: '' prior: 42700718! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !DefaultSpecTreeNode commentStamp: '' prior: 42223920! I am a TreeNode used to render TreeModel node using the old API for convenience! !FilteringTreeNode commentStamp: '' prior: 42306518! I am tree node supporting filtering! !SpecWindow commentStamp: '' prior: 42700847! I am a window used by WindowSpec. I have been introduced since it's currently the best solution to prevent to add dozen of respondsTo: in StandardWindow or add dirty extensions to Object (because all models are not subclasses of Model)! !Tab commentStamp: '' prior: 42723761! I represent a simple tab I have a IconicListItem which wrap my label and my icon. I also have a morph to display when selected. This morph can in fact be anything responding to #asMorph. Moreover it could be a block for lazy initialization. I also have a state representing if I am selecting or not, enabled or not, etc! !PanelMorphWithSplitters commentStamp: '' prior: 42526292! A PanelMorphWithSplitters is which add splitters the way SystemWindow do it! !TabContainerMorph commentStamp: '' prior: 42724603! A TabContainerMorph is a morph (which should be pluggable soon) which handle a first bar for tabs button and a container which is used to display the morph corresponding to the selected tab! !TabManager commentStamp: '' prior: 42725299! I am the entry point for tabs. I am composed of a TabBar and a Morph used as a canvas to render the morph represented by the selected tab. I am very stupid (as you can see only four methods). I just listen to selected tab, and render it! !WidgetBuilt commentStamp: '' prior: 42789511! I am raised when a widget has been built! !AbstractAdapter commentStamp: '' prior: 0! I am an abstrat class. Iam the superclass of all the adapters used to link a Spec widget model to a framework specific widget (by example ButtonModel <-> PluggableButtonMorph)! !AbstractMorphicAdapter commentStamp: '' prior: 0! I am an abstract class providing all the properties shared amongs all the morphic specific adapters! !MorphicButtonAdapter commentStamp: '' prior: 0! SpecInterpreter interpretASpec: MorphicButtonAdapter defaultSpec model: (MorphicButtonAdapter model: ButtonModel2 new) ! !MorphicCheckBoxAdapter commentStamp: '' prior: 0! I am an adapter to ease the bridge a CheckBoxModel and a CheckboxMorph! !MorphicContainerAdapter commentStamp: '' prior: 0! I am the adapter providing the correct container class: PanelMorph! !MorphicDropListAdapter commentStamp: '' prior: 0! I am the adapter used to bridget a DropListModel and a DropListMorph! !MorphicGenericAdapter commentStamp: '' prior: 0! I am a generic adapter used to embed directly a Morph in spec. Be aware that when you use this, you broke Spec plateform independency and force you application to run only on top of Morphic! !MorphicLabelAdapter commentStamp: '' prior: 0! I am the adapter used to bridget a LabelModel and a LabelMorph! !MorphicListAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a ListModel and a PluggableListMorph! !MorphicIconListAdapter commentStamp: '' prior: 0! I am the adapter used to bridge an IconListModel and a PluggableIconListMorph! !MorphicMultiColumnListAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a MultiColumnListModel and a PluggableMultiColumnListMorph! !MorphicNewListAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a NewListModel and a NewList! !MorphicRadioButtonAdapter commentStamp: '' prior: 0! I am the adapter used to link a RadioButtonModel with a CheckboxMorph (which can also act as a radio button)! !MorphicSliderAdapter commentStamp: '' prior: 0! I am the adapter used to bridget a SliderModel and a PluggableSliderMorph! !MorphicTabAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a TabModel and a Tab! !MorphicTabManagerAdapter commentStamp: '' prior: 0! I am the adpater used to bridge a TabManagerModel and a TabManager! !MorphicTextAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a TextModel and a PluggableTextMorph! !MorphicTextInputFieldAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a TextInputFieldModel and a PluggableTextFieldMorph! !MorphicTreeAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a TreeModel and a MorphTreeMorph! !MorphicWindowAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a WindowModel and a SystemWindow! !MorphicDialogWindowAdapter commentStamp: '' prior: 0! I am the adapter used to bridge a DialogWindowModel and a DialogWindow! !AbstractTreeFilter commentStamp: '' prior: 42098483! I am an abstract class for tree filters. My children should propose a filter for tree nodes! !TokenTreeFilter commentStamp: '' prior: 42760702! I am a filter for a token. If a node item contains my token I accept it! !DynamicSpecExample commentStamp: '' prior: 42241275! I am an example of how to fully dynamically create a UI, and also how to dynamically redrawn a widget. ========================== (DynamicSpecExample object: nil) open. (DynamicSpecExample object: 4) open. (DynamicSpecExample object: 'Hello World') open.! !FrameLayout commentStamp: '' prior: 0! I am a wrapper for the layout of widget. Each framework can then adapt me as it wants in its adapters! !MorphWrapper commentStamp: '' prior: 42454756! A MorphWrapper is used to wrap a morph with a layout in the goal to be easily added to another morph! !RadioButtonGroup commentStamp: '' prior: 42619641! A RadioButtonGroup is a group for radio buttons which ensure that only radio button of this group is activated at the same time.! !SpecAdapterBindings commentStamp: '' prior: 0! I am an abstract class I am used to link a spec-oriented adapter name to a framework specific adapter class name! !MorphicAdapterBindings commentStamp: '' prior: 0! I am used to link the spec-adapter names to the morphic adapters! !SpecInterpreter commentStamp: '' prior: 42699529! A SpecInterpreter is a interpreter for spec presenters! !SpecWrapper commentStamp: '' prior: 0! I am a small wrapper used to encapsulate data created and used during spec interpretation! !SpecLayout class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 9/28/2013 20:50' prior: 50716980! composed ^self new type: #ContainerModel; yourself! ! !SpecLayout methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 48949807! initialize super initialize. type := #ContainerModel. self commands: OrderedCollection new.! ! !MonticelloRepositoryBrowser class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 26581077! defaultSpec ^ { #ContainerModel. #add: . {{#model . #workingCopies} . #layout: . #(FrameLayout rightFraction: 0.5)} . #add: . {{#model . #repositories } . #layout: . #(FrameLayout leftFraction: 0.5)} }! ! !MonticelloRepositoryBrowser methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 26577248! initializeWidgets self instantiateModels: #( repositories #ListModel workingCopies #ListModel). workingCopies sortingBlock: self defaultOrderingBlock. workingCopies displayBlock: [ :item | item description ]. workingCopies menu: [ :aMenu | self workingCopiesMenu: aMenu ]. repositories displayBlock: [ :item | item description ]. repositories items: self allRepositories. "so that when we tab we go from working copies to repositories" self focusOrder add: workingCopies; add: repositories! ! !SpecDialogWindow commentStamp: '' prior: 69391159! A SpecDialogWindow is a window made for embedding Spec models into dialog windows ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/26/2012 02:09' prior: 38027539! cancelAction: aBlock self toolbar cancelAction: aBlock ! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/2/2012 17:05' prior: 38027702! cancelled ^ self toolbar cancelled! ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/7/2013 18:38' prior: 38027843! close super close. self toolbar cancelled: true.! ! !SpecDialogWindow methodsFor: 'focus' stamp: 'EstebanLorenzano 2/18/2013 15:28' prior: 38027995! giveFocusToNextFrom: aModel ^ self model giveFocusToNextFrom: aModel ! ! !SpecDialogWindow methodsFor: 'focus' stamp: 'EstebanLorenzano 2/18/2013 15:28' prior: 38028168! giveFocusToPreviousFrom: aModel ^ self model giveFocusToPreviousFrom: aModel! ! !SpecDialogWindow methodsFor: 'open/close' stamp: 'BenjaminVanRyseghem 7/10/2012 16:18' prior: 38028356! initialExtent ^ self model ifNil: [ super initialExtent ] ifNotNil: [:m | m initialExtent ifNil: [ super initialExtent ]]! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:05' prior: 38028597! model: aModel super model: aModel. aModel model focusOrder addLast: toolbar.! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/26/2012 02:25' prior: 38028787! newButtonRow ^ self toolbar buildWithSpec! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/12/2012 18:03' prior: 38028938! newContentMorph "Answer a new content morph." ^ self specWidget ifNil: [ nil ] ifNotNil: [:w | w hResizing: #spaceFill; vResizing: #spaceFill ]! ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 7/12/2012 18:04' prior: 38029213! newMainPanel "Answer a new main panel." | panel | panel := self newDialogPanel. self newContentMorph ifNotNil: [:m | panel addMorphBack: m ]. self newButtonRow ifNotNil: [:m | panel addMorphBack: m ]. ^ panel! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/26/2012 02:08' prior: 38029536! okAction: aBlock self toolbar okAction: aBlock ! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:01' prior: 38029692! specWidget ^ specWidget! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:04' prior: 38029824! specWidget: anObject specWidget := anObject.! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:02' prior: 38029977! toolbar "Lazy initialization because this method is called efore the initialize method" ^ toolbar ifNil: [ toolbar := OkCancelToolbar owner: self ]! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 8/2/2012 17:01' prior: 38030235! toolbar: anObject toolbar := anObject.! ! !ListComposableModelTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 24517551! testWhenListChanged "Two stages list changed notification." 50 timesRepeat: [ | list ok | list := ListModel new. list items: #(1 2). list whenListChanged: [ :aList | ok := aList = list listItems ]. list listItems. "Call listItems to set the cache" list items: #(1 2 3). self assert: ok ]! ! !ListComposableModelTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 24517965! testWhenListChangedOldContents "access to old and new contents in whenListChanged." | list oldL newL ok | list := ListModel new. oldL := #(1 2). newL := #(1 2 3). list items: oldL. list whenListChanged: [ :aList :anOldList | self assert: oldL = anOldList. self assert: newL = aList ]. list listItems. "Call listItems to set the cache" list items: #(1 2 3)! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 54892932! initializeWidgets self instantiateModels: #( apiSetters #ListModel ). apiSetters allowToSelect: false; displayBlock: [:e | e ]; items: self retrieveItems.! ! !KeychainEditor class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:47' prior: 24222432! internSpec ^{#ContainerModel . #add: . {{#model . #groupLabel } . #layout: . #(FrameLayout rightFraction: 0 bottomFraction: 0 rightOffset: 75 bottomOffset: 25) }. #add: . {{#model . #groupTextField } .#layout: . #(FrameLayout bottomFraction: 0 leftOffset: 75 bottomOffset: 25) }. #add: . {{#model . #usernameLabel } . #layout: . #(FrameLayout rightFraction: 0 bottomFraction: 0 topOffset: 25 rightOffset: 75 bottomOffset: 50) }. #add: . {{#model . #usernameTextField } . #layout: . #(FrameLayout bottomFraction: 0 leftOffset: 75 topOffset: 25 bottomOffset: 50) }. #add: . {{#model. #setPassword } . #layout: . #(FrameLayout bottomFraction: 0 topOffset: 50 bottomOffset: 75) }}! ! !PermissionsEditor class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 29283759! internSpec ^{#ContainerModel. #add:. {{#model. #isRoot }. #layout:. #(FrameLayout bottomFraction: 0 bottomOffset: 25) }. #add:. {{#model. #canBrowse }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 25 bottomOffset: 50) }. #add:. {{#model. #canDebug }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 50 bottomOffset: 75) }. #add:. {{#model. #canDropOSFile }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 75 bottomOffset: 100)}. #add:. {{#model. #canEditCode }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 100 bottomOffset: 125)}. #add:. {{#model. #canEditUser }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 125 bottomOffset: 150)}. #add:. {{#model. #canEvaluateCode }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 150 bottomOffset: 175)}. #add:. {{#model. #canRunStartupScript }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 175 bottomOffset: 200)}. #add:. {{#model. #canShowMorphHalo }. #layout:. #(FrameLayout bottomFraction: 0 topOffset: 200 bottomOffset: 225)}}! ! !MorphTreeListManager methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 6/18/2013 16:22' prior: 40130216! secondSelection: anItem | nodeMorph | nodeMorph := self allNodeMorphs detect: [ :e | e complexContents item == anItem ]. self searchedElement: nodeMorph. client changed.! ! !SpecInterpreterTest methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/29/2013 14:49' prior: 50708163! tearDown "Tearing down code for SpecInterpreterTest" specInterpreterClass := nil. specInterpreter := nil.! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/29/2013 13:53' prior: 51338091! buildClassItems ^ AbstractWidgetModel allSubclasses collect: [:class | DropListItem named: class name do: [ ]] ! ! !ComposableModel commentStamp: '' prior: 69391306! ComposableModel is an abstract class which represent a applicative model made to be composed with other ComposableModel! !AbstractWidgetModel commentStamp: '' prior: 69391487! AbstractBasicWidget is an abstract class for basic widgets! !AbstractWidgetModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/13/2012 16:36'! defaultSpec ^ SpecLayout composed! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 12:59'! acceptDropBlock ^ acceptDropBlock contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 12:59'! acceptDropBlock: aBlock acceptDropBlock contents: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 05:27'! borderColor "Return the border color" ^ borderColor contents! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 19:31'! borderColor: aColor "Set the border width" borderColor contents: aColor ! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 05:17'! borderWidth "Return the border width" ^ borderWidth contents! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:46'! borderWidth: anInteger "Set the border width" borderWidth contents: anInteger! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:32'! buildWithSpecLayout: aSpecLayout "Build the widget using the spec name provided as argument" | adapter widget | adapter := SpecInterpreter interpretASpec: aSpecLayout model: self. widget := adapter widget. self ensureExtentFor: widget. self ensureKeyBindingsFor: widget. self announce: (WidgetBuilt model: self widget: widget). ^ widget! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2012 16:51'! color ^ self widget ifNil: [ Color white ] ifNotNil: [:w | w color ]! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2012 16:51'! color: aColor ^ self widget ifNotNil: [:w | w color: aColor ]! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 18:06'! disable "Disable the label" self enabled: false! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 10:33'! dragEnabled ^ dragEnabled contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 10:35'! dragEnabled: anObject dragEnabled contents: anObject! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:29'! dragTransformationBlock ^ dragTransformationBlock contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:30'! dragTransformationBlock: aBlock dragTransformationBlock contents: aBlock! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:14'! dropEnabled ^ dropEnabled contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:09'! dropEnabled: aBoolean dropEnabled contents: aBoolean! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 18:06'! enable "Enable the label" self enabled: true! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 18:02'! enabled ^ enabledHolder contents! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 18:02'! enabled: aBoolean "Set if the button is enabled (clickable)" enabledHolder contents: aBoolean! ! !AbstractWidgetModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowRight asKeyCombination. Character tab asKeyCombination}! ! !AbstractWidgetModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowLeft asKeyCombination. Character tab shift asKeyCombination}! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 17:55'! help "Return the ballon text" ^ helpHolder contents! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 05:18'! help: aString "Set the help string" helpHolder contents: aString! ! !AbstractWidgetModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 16:20'! initialize super initialize. helpHolder := nil asValueHolder. borderWidth := 0 asValueHolder. borderColor := Color transparent asValueHolder. enabledHolder := true asValueHolder. dragEnabled := false asValueHolder. dropEnabled := false asValueHolder. dragTransformationBlock := [ :item :source | item ] asValueHolder. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asValueHolder. acceptDropBlock := [ :draggedItem :event :source | ] asValueHolder. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asValueHolder. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w update: #setBalloonText: with: { string } ] ]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w update: #borderWidth: with: { int } ] ]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w update: #borderColor: with: { color } ] ]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #enabled: with: { b } ] ]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dragEnabled: with: { b } ] ]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dropEnabled: with: { b } ] ].! ! !AbstractWidgetModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 6/12/2012 18:10'! initializeWidgets "ignore this method since there is no composition in basic widgets"! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37'! transferBlock ^ transferBlock contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 5/16/2013 12:37'! transferBlock: aBlock transferBlock contents: aBlock! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:31'! wantDropBlock ^ wantDropBlock contents! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 3/25/2013 11:31'! wantDropBlock: aBlock wantDropBlock contents: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:36'! whenBorderColorChanged: aBlock "Set a block to be performed when the brder width changed" borderColor whenChangedDo: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:36'! whenBorderWidthChanged: aBlock "Set a block to be performed when the brder width changed" borderWidth whenChangedDo: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 18:03'! whenEnabledChanged: aBlock "Set a block to performed when the widget is enabled or disabled" enabledHolder whenChangedDo: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:36'! whenHelpChanged: aBlock "Set a block to be performed when the help changed" helpHolder whenChangedDo: aBlock! ! !ButtonModel commentStamp: '' prior: 69391606! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 33990770! defaultSpec ^ #(ButtonAdapter adapt: #(model))! ! !ButtonModel class methodsFor: 'example' stamp: 'BenjaminVanRyseghem 9/25/2013 14:50' prior: 18559105! example | b | b:= ButtonModel new. b openWithSpec. b label: 'Click me'.! ! !ButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/25/2013 14:50' prior: 18559825! title ^ 'Button'! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18556290! action "get the block performed when the button is clicked" ^ actionHolder contents! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18556838! action: aBlock "set the block performed when the button is clicked" actionHolder contents: aBlock! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18557092! askBeforeChanging ^ askBeforeChangingHolder contents! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18557223! askBeforeChanging: aBoolean askBeforeChangingHolder contents: aBoolean! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 39519045! buildLabel: text withIcon: icon ^ IconicListItem text: text icon: icon ! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18557382! getAction "get the block performed when the button is clicked" ^ actionHolder contents! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49'! icon ^ iconHolder contents! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 36996116! icon: anIcon iconHolder contents: anIcon! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 48653142! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := false asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 35380554! keyStroke: anEvent fromMorph: aMorph! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 36997180! label iconHolder contents ifNil: [ ^ labelHolder contents ] ifNotNil: [ :icon | ^ self buildLabel: labelHolder contents withIcon: icon ]! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18557568! label: aStringOrImageMorph labelHolder contents: aStringOrImageMorph! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49'! performAction actionHolder contents value. " Here I set a dummy value just to make the holder raise an event " actionPerformedHolder contents: nil.! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18556704! state ^ stateHolder contents! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18557791! state: aBoolean "set if the button is highlighted" ^ stateHolder contents: aBoolean! ! !ButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18558040! whenActionChangedDo: aBlock actionHolder whenChangedDo: aBlock! ! !ButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18558199! whenActionPerformedDo: aBlock "set a block to perform after that the button has been aclicked, and its action performed" actionPerformedHolder whenChangedDo: aBlock! ! !ButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18558475! whenLabelChangedDo: aBlock "set a block to perform after that the button has been aclicked, and its action performed" labelHolder whenChangedDo: aBlock! ! !ButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 14:49' prior: 18558738! whenStateChangedDo: aBlock "set a block to perform after that the button has been aclicked, and its action performed" stateHolder whenChangedDo: aBlock! ! !CheckBoxModel commentStamp: '' prior: 69391759! A CheckboxModel is a spec model for Checkbox You can also have a look at CheckBoxExample for a full example of how to use them with a group. ! !CheckBoxModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 33987305! defaultSpec ^ #(CheckBoxAdapter adapt: #(model))! ! !CheckBoxModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 7/13/2012 02:00' prior: 18995158! title ^ 'Checkbox Button'! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 16:56' prior: 18991203! activationAction: aBlock "This method is used to set the action to perform when I am activated" actionWhenActivatedHolder contents: aBlock! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 17:50' prior: 18991519! click "Simulate a click on the checkbox Used when the checkboc is a list item" self toggleState! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:00' prior: 18991719! desactivationAction: aBlock "This method is used to set the action to perform when I am desactivated" actionWhenDesactivatedHolder contents: aBlock! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48006376! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 17:50' prior: 18990457! label ^ labelHolder contents! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:03' prior: 18992050! label: aString "Set the label of the checkbox" labelHolder contents: aString.! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:10' prior: 18990591! labelClickable "Return true if the label can be clicked to select the checkbox" ^ labelClickableHolder contents! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:03' prior: 18992283! labelClickable: aBoolean "Set if the label can be clicked to select the checkbox" labelClickableHolder contents: aBoolean! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:06' prior: 18990810! state "Return the current state of the checkBox" ^ stateHolder contents! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 17:49' prior: 18990990! state: aBoolean "Set if the checkbox is activated or not" stateHolder contents: aBoolean! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 17:51' prior: 18992580! toggleState "Toogle the current state of the checkbox" self state: self state not! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/12/2012 17:51' prior: 18992773! whenActivatedDo: aBlock "This method is used to propagate the event that I have been activated" stateHolder whenChangedDo: [:bool | bool ifTrue: aBlock ]! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 16:52' prior: 18993042! whenActivationActionChanged: aBlock "A block performed when the activation action changed" actionWhenActivatedHolder whenChangedDo: aBlock ! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 01:40' prior: 18993295! whenChangedDo: aBlock "This method is used to propagate the event that I have changed" stateHolder whenChangedDo: aBlock! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/12/2012 17:51' prior: 18993530! whenDesactivatedDo: aBlock "This method is used to propagate the event that I have been desactivated" stateHolder whenChangedDo: [:bool | bool ifFalse: aBlock ]! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 16:59' prior: 18993805! whenDesactivationActionChanged: aBlock "A block performed when the desactivation action changed" actionWhenDesactivatedHolder whenChangedDo: aBlock ! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:01' prior: 18994067! whenLabelChanged: aBlock "A block performed when the label changed" labelHolder whenChangedDo: aBlock ! ! !CheckBoxModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:02' prior: 18994285! whenLabelClickableChanged: aBlock "A block performed when the label click is activated or descativated" labelClickableHolder whenChangedDo: aBlock ! ! !ContainerModel commentStamp: '' prior: 69391958! I am a model for a container. My purpose is to hold multiple subwidgets to glue them together. I should not be used directly! !ContainerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38'! defaultSpec ^ #(ContainerAdapter adapt: #(model))! ! !ContainerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:24'! buildAdapterWithSpec "Build the widget using the spec name provided as argument" | adapter widget aSpecLayout | aSpecLayout := (self retrieveSpec: self defaultSpecSelector). adapter := SpecInterpreter interpretASpec: aSpecLayout model: self. widget := adapter widget. self ensureExtentFor: widget. self ensureKeyBindingsFor: widget. self announce: (WidgetBuilt model: self widget: widget). ^ adapter! ! !DiffModel commentStamp: '' prior: 69392143! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/12/2013 17:38' prior: 67683226! exampleWithOptions " self exampleWithOptions " ^ self new showOptions: true; leftText: (True >> #and:) sourceCode; rightText: (True >> #or:) sourceCode; contextClass: True; openWithSpec! ! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/10/2013 22:59' prior: 67683506! exampleWithoutOptions " self exampleWithoutOptions " ^ self new showOptions: false; leftText: 'Old text'; rightText: 'New text'; openWithSpec ! ! !DiffModel class methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:33' prior: 67683743! spec ^ {#DiffMorph. #from:to:contextClass:. {#model. #leftText}. { #model. #rightText}. { #model. #contextClass}. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. #(model help). #setOptionsPanel:. #(model showOptions). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !DiffModel methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:34' prior: 67684287! contextClass ^ contextClassHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'MartinDias 9/12/2013 17:35' prior: 67684407! contextClass: anObject contextClassHolder contents: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/12/2013 17:36' prior: 67684547! initialize super initialize. leftTextHolder := '' asValueHolder. rightTextHolder := '' asValueHolder. contextClassHolder := nil asValueHolder. leftTextHolder whenChangedDo: [ :newText | self widget ifNotNil: [:w | w srcText: newText; updateText ] ]. rightTextHolder whenChangedDo: [ :newText | self widget ifNotNil: [:w | w dstText: newText; updateText ] ]. contextClassHolder whenChangedDo: [ :newClass | self widget ifNotNil: [:w | w contextClass: newClass; updateText ] ]. showOptions := true asValueHolder. showOptions whenChangedDo: [ :aBoolean | aBoolean ifTrue: [ self changed: #addOptions ] ifFalse: [ self changed: #removeOptions ] ]! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/8/2012 16:06' prior: 67685306! leftText ^ leftTextHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:47' prior: 67685425! leftText: anObject leftTextHolder contents: anObject ! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:38' prior: 67685563! rightText ^ rightTextHolder contents! ! !DiffModel methodsFor: 'accessing' stamp: 'EzequielLamonica 11/13/2012 14:47' prior: 67685684! rightText: anObject rightTextHolder contents: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/11/2013 15:21' prior: 67685818! showOptions ^ showOptions contents! ! !DiffModel methodsFor: 'initialize' stamp: 'MartinDias 9/9/2013 15:03' prior: 67685930! showOptions: aBoolean showOptions contents: aBoolean! ! !DropListModel commentStamp: '' prior: 69392441! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !DropListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 34013822! defaultSpec ^ #(DropListAdapter adapt: #(model))! ! !DropListModel class methodsFor: 'specs' stamp: '' prior: 20981453! title ^ 'Drop List'! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:29' prior: 39151296! addItemLabeled: aString do: aBlock | item | item := DropListItem named: aString do: aBlock. "If you add directly in the contents, the update is not triggered from the value holder" listHolder add: item.! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/15/2013 20:54' prior: 39151586! displayBlock: aBlock listHolder replace: [ :e | e display: aBlock; yourself ].! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:09' prior: 67498468! emptyList listHolder contents: OrderedCollection new! ! !DropListModel methodsFor: 'protocol' stamp: 'StephaneDucasse 5/17/2012 18:12' prior: 20976969! getIndex ^ selectionHolder index contents! ! !DropListModel methodsFor: 'protocol' stamp: 'StephaneDucasse 5/17/2012 18:02' prior: 20977096! getList ^ listHolder contents collect: #label! ! !DropListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48030209! initialize super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. self whenSelectedItemChanged: [:item | item value ]! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 12:46' prior: 39152261! internalResetSelection selectionHolder reset. self getList isEmpty not ifTrue: [ self silentlySetSelectedIndex: 1 ]! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:12' prior: 67498626! items: aList "Populate the drop list with a list of ui specific items" "aList is a list of domain specific objects. If you want to specify more precisely the item actions, see #addItemLabeled:do:" | dropListItems | dropListItems := aList collect: [ :e | DropListItem on: e do: [] ]. listHolder contents: dropListItems! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/17/2013 22:35' prior: 39152795! listItems "Return the list used to populate the drop list" ^ listHolder contents collect: [ :e | e model ].! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 20:02' prior: 20977947! listSize "Return the size of the list of choices" ^ self listItems size! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 18:08' prior: 20978127! resetSelection "Reset the current selection state" selectionHolder reset! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 18:08' prior: 20978303! selectedIndex "Useless method but it provides a better and more consistent API" ^ self getIndex! ! !DropListModel methodsFor: 'private' stamp: 'StephaneDucasse 5/17/2012 18:04' prior: 20980704! selectedIndexHolder ^ selectionHolder index! ! !DropListModel methodsFor: 'protocol' stamp: 'SeanDeNigris 4/17/2013 22:36' prior: 39153020! selectedItem ^ self selectedItemHolder contents model! ! !DropListModel methodsFor: 'private' stamp: 'StephaneDucasse 5/17/2012 18:04' prior: 20980833! selectedItemHolder ^ selectionHolder selection! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:31' prior: 39153195! setIndex: anIndex | item | selectionHolder index contents: anIndex. item := (listHolder contents at: anIndex ifAbsent: [ nil ]). item value. selectionHolder selection contents: item. self changed: #getIndex! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 12:30' prior: 39153512! setSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder contents at: anIndex ifAbsent: [ ^ self ]. selection value. selectionHolder index contents: anIndex. selectionHolder selection contents: selection! ! !DropListModel methodsFor: 'protocol' stamp: 'CamilloBruni 9/20/2013 19:59' prior: 68565187! setSelectedItem: anItem "Force the selection of the item anItem" | index realItem | index := self listItems indexOf: anItem ifAbsent: [ ^ self ]. realItem := listHolder at: index. selectionHolder index contents: index. selectionHolder selection contents: realItem.! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/19/2013 12:46' prior: 39153927! silentlySetSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder contents at: anIndex ifAbsent: [ ^ self ]. selectionHolder index contents: anIndex. selectionHolder selection contents: selection! ! !DropListModel methodsFor: 'protocol-events' stamp: 'SeanDeNigris 4/15/2013 21:07' prior: 39154289! whenSelectedItemChanged: aBlock "Set a block to perform when the selected item is changed" selectionHolder selection whenChangedDo: [ :new :old :announcement :ann | aBlock cull: (new ifNotNil: [ :item | item model ]) cull: old cull: announcement cull: ann ]! ! !DropListModel methodsFor: 'protocol-events' stamp: 'SeanDeNigris 2/8/2013 17:22' prior: 20979765! whenSelectionChanged: aBlock "Set a block to perform when the selection is changed" "The method should be used only if you are interested in the fact that there was a change, without caring about what has changed If you are interested in the items, use whenSelectedItemChanged: If you are interested in the index, use whenSelectionIndexChanged:" selectionHolder whenChangedDo: aBlock.! ! !DropListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/12/2012 18:10' prior: 20980268! whenSelectionIndexChanged: aBlock "Set a block to perform when the selected index is changed" selectionHolder index whenChangedDo: aBlock! ! !EditableList commentStamp: '' prior: 69392689! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !EditableList class methodsFor: 'example' stamp: 'ChristopheDemarey 7/15/2013 17:07' prior: 68314708! example | widget | widget := self new. widget title: 'Selectors list'; list: self selectors. widget openWithSpec.! ! !EditableList class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 9/10/2013 10:25' prior: 68314932! new: aCollection ^ self new list: aCollection copy. ! ! !EditableList class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/26/2013 13:47' prior: 68315074! spec ^ SpecLayout composed newColumn: [ :column | column newRow: [ :menuRow | menuRow add: #addButton; add: #removeButton ] height: 25; newRow: [ :listRow | listRow newColumn: [ :c1 | c1 add: #list ]; newColumn: [ :c2 | c2 add: #topButton; add: #upButton; add: #downButton; add: #bottomButton ] width: 24 ] ] yourself! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54' prior: 68315638! addButton ^ addButton! ! !EditableList methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/3/2013 18:16' prior: 68315744! addItemBlock: aBlock addItemBlock := aBlock.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/26/2013 13:41' prior: 68315875! bottomButton ^ bottomButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/3/2013 18:06' prior: 68315988! downButton ^ downButton! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 6/27/2013 17:11' prior: 68316103! initialize "Initialization code for EditableList" title := 'Title' asValueHolder. super initialize.! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/10/2013 17:18' prior: 68316299! initializePresenter super initializePresenter addButton action: [ | requirement | requirement := addItemBlock value. requirement ifNotNil: [ self list: (self list getItems copyWith: requirement) ] ]. removeButton action: [ self list: (list getItems copyWithoutIndex: list selectedIndex) ]. topButton action: [ self moveElementAt: list selectedIndex to: 1 ]. bottomButton action: [ self moveElementAt: list selectedIndex to: list getItems size ]. upButton action: [ self moveElementAt: list selectedIndex to: list selectedIndex - 1]. downButton action: [ self moveElementAt: list selectedIndex to: list selectedIndex + 1]. ! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/11/2013 09:59' prior: 68317056! initializeWidgets self instantiateModels: #( list NewListModel addButton ButtonModel removeButton ButtonModel upButton ButtonModel downButton ButtonModel topButton ButtonModel bottomButton ButtonModel ). addButton icon: (Smalltalk ui icons iconNamed: #addIcon); help: 'Add a new item to the list'. removeButton icon: (Smalltalk ui icons iconNamed: #deleteIcon); help: 'Remove a item from the list'. upButton icon: (Smalltalk ui icons iconNamed: #upIcon); help: 'Move this item up from one element'. downButton icon: (Smalltalk ui icons iconNamed: #downIcon); help: 'Move this item down from one element'. topButton icon: (Smalltalk ui icons iconNamed: #topIcon); help: 'Move this item on the first position of the list'. bottomButton icon: (Smalltalk ui icons iconNamed: #bottomIcon); help: 'Move this item on the last position of the list'.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54' prior: 68318043! list ^ list! ! !EditableList methodsFor: 'private' stamp: 'ChristopheDemarey 9/10/2013 10:16' prior: 68318139! list: aList list items: aList.! ! !EditableList methodsFor: 'private' stamp: 'ChristopheDemarey 9/10/2013 13:37' prior: 68318254! moveElementAt: index to: newIndex | elementToMove orderedList | (newIndex < 1 or: [ newIndex > list getItems size ]) ifTrue: [ ^self ]. elementToMove := list getItems at: index. orderedList := list getItems asOrderedCollection removeAt: index; add: elementToMove beforeIndex: newIndex; yourself. self list: orderedList. self list setSelectedIndex: newIndex.! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:54' prior: 68318714! removeButton ^ removeButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 17:12' prior: 68318828! title ^ title contents! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/27/2013 16:48' prior: 68318937! title: aTitle title := aTitle ! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/26/2013 13:41' prior: 68319054! topButton ^ topButton! ! !EditableList methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/3/2013 18:06' prior: 68319161! upButton ^ upButton! ! !LabelModel commentStamp: '' prior: 69393340! A LabelModel is a spec model for Labels! !LabelModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 34037170! defaultSpec ^ #(LabelAdapter adapt: #(model))! ! !LabelModel class methodsFor: 'specs' stamp: '' prior: 24254040! title ^ 'Label Morph'! ! !LabelModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48001264! initialize super initialize. textHolder := '' asValueHolder. enabledHolder := true asValueHolder. textHolder whenChangedDo: [ self changed: #getText ].! ! !LabelModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:23'! label ^ textHolder contents! ! !LabelModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:24'! label: aText "Set the text of the label" textHolder contents: aText! ! !LabelModel methodsFor: 'deprecated-protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:24'! text ^ self label! ! !LabelModel methodsFor: 'deprecated-protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:24' prior: 24253125! text: aText self label: aText! ! !LabelModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 17:23'! whenLabelChanged: aBlock "Set a block to performed when the text is changed" textHolder whenChangedDo: aBlock! ! !LabelModel methodsFor: 'deprecated-protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:24' prior: 24253354! whenTextChanged: aBlock self whenLabelChanged: aBlock! ! !ListModel commentStamp: '' prior: 69393431! A ListComposableModel is an applicative model which handle a basic list. | t | t:= ListComposableModel new. t openWithSpec. t items: (Smalltalk allClasses). self example | t | t:= ListComposableModel new. t openWithSpec. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). | t | t:= ListComposableModel new. t openWithSpec. t filteringBlock: [:col | col select: [:each | each name beginsWith: 'Zn']]. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). ! !IconListModel commentStamp: '' prior: 69393999! An IconListModel is a spec model for icon list! !IconListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 34001534! defaultSpec ^ #(IconListAdapter adapt: #(model))! ! !IconListModel class methodsFor: 'example' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37764242! example self new icons: [:e | Smalltalk ui icons forwardIcon ]; items: (1 to: 10) asArray; openWithSpec! ! !IconListModel methodsFor: 'protocol' stamp: '' prior: 23478809! getIconFor: anItem ^ iconHolder contents cull: anItem cull: self! ! !IconListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:51' prior: 23478965! icons "Return the block which takes an item as argument and returns the icon to display in the list" ^ iconHolder contents! ! !IconListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:50' prior: 23479197! icons: aBlock "Set a block which takes an item as argument and returns the icon to display in the list" iconHolder contents: aBlock! ! !IconListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48022903! initialize super initialize. iconHolder := [:item | nil ] asValueHolder.! ! !IconListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:51' prior: 23479490! whenIconsChanged: aBlock iconHolder whenChangedDo: aBlock ! ! !ListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38'! defaultSpec ^ #(ListAdapter adapt: #(model))! ! !ListModel class methodsFor: 'example' stamp: 'StephaneDucasse 5/17/2012 18:02'! example | instance | instance := self new. instance openWithSpec. instance items: (Smalltalk allClasses).! ! !ListModel class methodsFor: 'specs'! title ^ 'List'! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:20'! allowToSelect "Return whether the list items can be selected or not" ^ allowToSelect contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:53'! allowToSelect: aBoolean "Set if the list items can be selected or not" allowToSelect contents: aBoolean. aBoolean ifFalse: [ self resetSelection ].! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:21'! beMultipleSelection "Make list selection multiple" self multiSelection: true! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:21'! beSingleSelection "Make list selection single" self multiSelection: false! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 2/8/2013 14:23'! clickOnSelectedItem | item | item := self selectedItem. ^ (item notNil and: [ item respondsTo: #click ]) ifTrue: [ ^ item click ]! ! !ListModel methodsFor: 'initialize' stamp: 'SD 4/19/2012 15:26'! defaultFilteringBlock ^ [:col | col]! ! !ListModel methodsFor: 'initialize' stamp: 'StephaneDucasse 4/17/2012 19:15'! defaultSortingBlock ^ [:a :b | true]! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:39'! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ wrapBlockHolder contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:39'! displayBlock: aBlock "Set the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" wrapBlockHolder contents: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:39'! filteringBlock "Return the filtering of the items" ^ filteringBlockHolder contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:38'! filteringBlock: aBlock "To set the filtering of the items" filteringBlockHolder contents: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:28'! getIndex "Return the index of the selected item" ^ selectionHolder index contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:10'! getList ^ listHolder contents! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:28'! getSelectionStateFor: anIndex "Return the current state of the item -if selected or not - in a multiple selection list" "Answer true if the item at index _anIndex_ is selected" ^ (multiSelectionHolder at: anIndex ifAbsent: [ ^ false ]) == true! ! !ListModel methodsFor: 'initialization' stamp: 'GuillermoPolito 8/5/2013 10:21'! initialize super initialize. selectionHolder := SelectionValueHolder new. listHolder := Array new asValueHolder. sortingBlockHolder := self defaultSortingBlock asValueHolder. filteringBlockHolder := self defaultFilteringBlock asValueHolder. wrapBlockHolder := [ :object | object asStringOrText ] asValueHolder. menuHolder := [ :menu :shifted | nil ] asValueHolder. multiSelectionHolder := IdentityDictionary new asValueHolder. multiSelection := false asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !ListModel methodsFor: 'protocol' stamp: 'ThierryGoubier 2/5/2013 15:43'! items: aList "Set the items of the list. aList is a collection of your domain specific items. Use a two stages notification (issue 7420)." | oldContents | oldContents := listHolder contents. listHolder contents: (aList sorted: sortingBlockHolder contents). listAnnouncer announce: (ValueChanged oldContents: oldContents newContents: listHolder contents)! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:28'! listElementAt: anIndex "Return the item at index _anIndex_" ^ self listItems at: anIndex ifAbsent: [ nil ]! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:28'! listElementAt: anIndex ifAbsent: aBlock "Return the item at index _anIndex_" ^ self listItems at: anIndex ifAbsent: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:21'! listItems "Return the items of the list. They are your domain specific items" ^ listItemsCache ifNil: [ listItemsCache := filteringBlockHolder contents value: listHolder contents ] ! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:31'! listSize "Return the size of the list" ^ self listItems size! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:33'! menu "Return the block used to defined the menu" ^ menuHolder contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:34'! menu: aBlock "Set the block used to defined the menu" menuHolder contents: aBlock! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:29'! menu: aMenu shifted: aBoolean "Build the menu when you right click on an item" ^ menuHolder contents cull: aMenu cull: aBoolean! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! multiSelection "Return true if the list has a multiple selection. False if the list has a single selection" ^ multiSelection contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! multiSelection: aBoolean "Make the list seelction become multiple if aBoolean is true. Otherwise set the selection as single" multiSelection contents: aBoolean. ! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/7/2012 13:23'! refreshListItems listItemsCache := nil. ^ self changed: #listElementAt:! ! !ListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:20'! registerEvents listHolder whenChangedDo: [ self refreshListItems ]. filteringBlockHolder whenChangedDo: [ self refreshListItems ]. selectionHolder index whenChangedDo: [ self changed: #getIndex ]. multiSelection whenChangedDo: [ :b | self changed: { #setMultipleSelection: . b } ]. wrapBlockHolder whenChangedDo:[ self changed: #listElementAt: ]. sortingBlockHolder whenChangedDo: [ listHolder contents: (listHolder contents sorted: sortingBlockHolder contents). self changed: #listElementAt: ]. ! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! resetFilteringBlock "Reset the filtering block with the default value which consists in showing everything" filteringBlockHolder contents: self defaultFilteringBlock! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:29'! resetListSelection "Reset the selection manager for multiple selection lists" multiSelectionHolder removeAll! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! resetSelection "Unselect every items" selectionHolder reset. multiSelectionHolder removeAll! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! resetSortingBlock "Reset the sortering block with the default value which consists in not sorting" sortingBlockHolder contents: self defaultSortingBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! selectedIndex "Return the index of the selected item In the case of a multiple selection list, it returns the last selected item" ^ self getIndex! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:22'! selectedIndexes "Return the indexes of selected items on the case of a multiple selection list" ^ multiSelectionHolder keys select: [:index | multiSelectionHolder at: index ]! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:23'! selectedItem "Return the selected item. In the case of a multiple selection list, it returns the last selected item" ^ self selectedItemHolder contents! ! !ListModel methodsFor: 'private' stamp: 'StephaneDucasse 5/17/2012 18:04'! selectedItemHolder ^ selectionHolder selection! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:23'! selectedItems "Return all the selected items in the case of a multiple selection list" ^ multiSelectionHolder keys select: [:index | multiSelectionHolder at: index ] thenCollect: [:index | self listElementAt: index ]! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:29'! setIndex: anIndex "Set the index of the selected item when you click on an item" self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. selectionHolder index contents: anIndex. selectionHolder selection contents: (self listElementAt: anIndex).! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/20/2012 16:21'! setSelectedIndex: anIndex "Set the index of the item you want to be selected" | idx selection | self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. idx := anIndex min: self listSize. selection := self listElementAt: idx ifAbsent: [ idx := 0. nil ]. selectionHolder index contents: idx. selectionHolder selection contents: selection.! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:24'! setSelectedItem: anItem "Set the item you want to be selected" | index | self okToChange ifFalse: [ ^ self ]. index := self listItems identityIndexOf: anItem ifAbsent: [ ^ self ]. selectionHolder index contents: index. selectionHolder selection contents: anItem! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:29'! setSelectionStateFor: anIndex at: aBoolean "Set the selection state of the item at index _anIndex_ in the case of multiple selection list" self allowToSelect ifFalse: [ ^ self ]. ^ multiSelectionHolder at: anIndex put: aBoolean! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:40'! sortingBlock "Return the ordering of the items" ^ sortingBlockHolder contents! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:40'! sortingBlock: aBlock "To set the ordering of the items" sortingBlockHolder contents: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/13/2012 02:24'! updateList "Refresh the list" self changed: #listElementAt:. self resetSelection! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:25'! whenAllowToSelectChanged: aBlock "Set a block to value when the value of allowToSelect has changed" allowToSelect whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:39'! whenDisplayBlockChanged: aBlock "Set a block to value when the filtering block block has changed" wrapBlockHolder whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:38'! whenFilteringBlockChanged: aBlock "Set a block to value when the filtering block block has changed" filteringBlockHolder whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'EstebanLorenzano 9/8/2013 16:08'! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:34'! whenMenuChanged: aBlock "Set a block to value when the menu block has changed" menuHolder whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:43'! whenMultiSelectionChanged: aBlock "Set a block to value when the multiSelection value has changed" multiSelection whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:24'! whenSelectedItemChanged: aBlock "Set a block to value when the select item is changed" selectionHolder selection whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:24'! whenSelectionChanged: aBlock "Set a block to value when the selection of the list has changed" selectionHolder whenChangedDo: aBlock. multiSelectionHolder whenChangedDo: aBlock.! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:24'! whenSelectionIndexChanged: aBlock "Set a block to value when the selection index has changed" selectionHolder index whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/13/2012 02:40'! whenSortingBlockChanged: aBlock "Set a block to value when the sorting block has changed" sortingBlockHolder whenChangedDo: aBlock! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:29'! wrapItem: anObject index: index "Return the item _anObject_ wrapped" ^ wrapBlockHolder contents cull: anObject cull: index! ! !MultiColumnListModel commentStamp: '' prior: 69394115! A MultiColumnListModel is a spec model for Multi columns list! !MultiColumnListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:38' prior: 33986020! defaultSpec ^ #(MultiColumnListAdapter adapt: #(model))! ! !MultiColumnListModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 7/14/2012 16:41' prior: 27280003! listElementAt: anIndex ^ self wrapItem: (self listItems at: anIndex) index: anIndex ! ! !MultiColumnListModel methodsFor: 'morphic' stamp: 'StephaneDucasse 5/17/2012 18:03' prior: 27280180! setIndex: anIndex self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. selectionHolder index contents: anIndex. selectionHolder selection contents: (self listItems at: anIndex ifAbsent: [ nil ]).! ! !MultiColumnListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/20/2012 16:22' prior: 27280502! setSelectedIndex: anIndex "Set the index of the item you want to be selected" | idx selection | self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. self listSize isZero ifTrue: [ ^self ]. idx := anIndex min: self listSize. selection := self listItems at: idx ifAbsent: [ idx := 0. nil ]. selectionHolder index contents: idx. selectionHolder selection contents: selection.! ! !NewListModel commentStamp: '' prior: 69394238! | m | m := NewListModel new. m items: (10 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 5. m openWithSpec.! !NewListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 36457336! defaultSpec ^ #(NewListAdapter adapt: #(model))! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:52' prior: 36240797! allowToSelect ^ allowToSelect contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36240923! allowToSelect: aBoolean "Set if the list items can be selected or not" allowToSelect contents: aBoolean. aBoolean ifFalse: [ self resetSelection ].! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36241244! beMultipleSelection "Make list selection multiple" self isMultipleSelection: true! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36241426! beSingleSelection "Make list selection single" self isMultipleSelection: false! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:35' prior: 36241610! deSelectOnReclick ^ deSelectOnReclick contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:10' prior: 36241744! deSelectOnReclick: aBoolean deSelectOnReclick contents: aBoolean! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:12' prior: 36241898! defaultFilteringBlock ^ [:col | col]! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 5/1/2013 09:12' prior: 36242024! defaultSortingBlock ^ [:a :b | true]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03' prior: 36242148! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03' prior: 36242457! displayBlock: aBlock "Set the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" displayBlock contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:47' prior: 36242841! doubleClick: event doubleClick contents cull: event! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:04' prior: 36458081! doubleClickAction "Return the block evaluated on double click" ^ doubleClick contents! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:04' prior: 36458266! doubleClickAction: aBlock "Set the block evaluated on double click." doubleClick contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:25' prior: 36242985! draggedItemAtIndex: anIndex ^ draggedItemAtIndex contents cull: anIndex.! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:03' prior: 36243145! filteringBlock "Return the filtering of the items" ^ filteringBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'MarcusDenker 5/2/2013 10:51' prior: 36307606! filteringBlock: aBlock "To set the filtering of the items" filteringBlock contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:27' prior: 36243600! getDisplayForItem: item at: index ^ displayBlock contents cull: item cull: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:28' prior: 36243773! getHeaderHeight ^ headerHeight contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:28' prior: 36243905! getHeaderTitle ^ headerTitle contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 07:53' prior: 36244036! getItems ^ items contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:29' prior: 36244154! getListSize ^ self getItems size! ! !NewListModel methodsFor: 'protocol' stamp: 'ClementBera 5/3/2013 10:48' prior: 36458552! getMenu: shiftKeyState | menu | menuHolder contents ifNil: [ ^ nil ]. menu := UIManager default newMenuIn: self for: self. menuHolder contents cull: menu cull: shiftKeyState. menuTitle contents ifNotNil: [ :title | menu addTitle: title ]. ^ menu ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:57' prior: 36244634! getRawItemAt: index ^ items contents at: index ifAbsent: [ nil ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:37' prior: 36244791! handlesDoubleClick ^ handlesDoubleClick contents! ! !NewListModel methodsFor: 'protocol' stamp: 'CamilloBruni 5/2/2013 22:03' prior: 36458889! handlesDoubleClick: aBoolean "Enable or disable double click on the list." handlesDoubleClick contents: aBoolean! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:40' prior: 36244932! hasHeader ^ headerTitle contents notNil! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:31' prior: 36245071! headerClicked headerClicked contents value! ! !NewListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/1/2013 09:31' prior: 36245202! headerClicked: aBlock headerClicked contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:22' prior: 36245485! headerTitle: aTitle headerTitle contents: aTitle! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:48' prior: 36245626! iconForItem: anItem at: anIndex ^ iconHolder contents cull: anItem cull: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:49' prior: 36245799! iconMaxSize ^ iconMaxSize contents! ! !NewListModel methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/16/2013 11:37' prior: 68313915! iconMaxSize: aPoint iconMaxSize contents: aPoint! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:50' prior: 38969212! icons: aBlock iconHolder contents: aBlock! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10' prior: 49804653! initialize "Initialization code for NewListModel" super initialize. items := #() asValueHolder. deSelectOnReclick := false asValueHolder. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asValueHolder. displayBlock := [ :object | object asStringOrText ] asValueHolder. headerHeight := 0 asValueHolder. headerTitle := nil asValueHolder. menuTitle := nil asValueHolder. menuHolder := nil asValueHolder. handlesDoubleClick := false asValueHolder. doubleClick := [ ] asValueHolder. iconHolder := [ nil ] asValueHolder. iconMaxSize := nil asValueHolder. keyStrokeAction := [ false ] asValueHolder. isMultipleSelection := false asValueHolder. unselectOnChange := false asValueHolder. sortingBlock := self defaultSortingBlock asValueHolder. filteringBlock := self defaultFilteringBlock asValueHolder. allowToSelect := true asValueHolder. listAnnouncer := Announcer new. headerClicked := [] asValueHolder. selectedIndex := 0 asValueHolder. selectedItem := nil asValueHolder. selectedIndexes := #() asValueHolder. selectedItems := #() asValueHolder. separatorBlock := [ false ] asValueHolder. self registerEvents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:36' prior: 36247450! isMultipleSelection ^ isMultipleSelection contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:49' prior: 36247588! isMultipleSelection: aBoolean isMultipleSelection contents: aBoolean! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:10' prior: 36247905! items: aList "Set the items of the list. aList is a collection of your domain specific items. Use a two stages notification (issue 7420)." | oldContents | oldContents := items contents. items contents: (aList sorted: sortingBlock contents). listAnnouncer announce: (ValueChanged oldContents: oldContents newContents: items contents)! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:50' prior: 36248572! keyStrokeAction: anEvent ^ keyStrokeAction contents cull: anEvent! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13' prior: 36248725! listItems "Return the items of the list. They are your domain specific items" ^ listItemsCache ifNil: [ listItemsCache := filteringBlock contents value: items contents ] ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36249004! listSize "Return the size of the list" ^ self listItems size! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36249171! menu "Return the block used to defined the menu" ^ menuHolder contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36249348! menu: aBlock "Set the block used to defined the menu" menuHolder contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13' prior: 36249580! multiSelection "Return true if the list has a multiple selection. False if the list has a single selection" ^ isMultipleSelection contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13' prior: 36249826! multiSelection: aBoolean "Make the list seelction become multiple if aBoolean is true. Otherwise set the selection as single" isMultipleSelection contents: aBoolean. ! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 7/18/2013 14:24' prior: 45508307! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self changed: { #hasHeader: . title notNil } ]. deSelectOnReclick whenChangedDo: [ :bool | self changed: { #deSelectOnReclick: . bool } ]. isMultipleSelection whenChangedDo: [ :bool | self changed: { #isMultipleSelection: . bool } ]. unselectOnChange whenChangedDo: [ :bool | self changed: { #unselectOnChange: . bool } ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13' prior: 36250771! resetFilteringBlock "Reset the filtering block with the default value which consists in showing everything" filteringBlock contents: self defaultFilteringBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:34' prior: 36251031! resetSelection "Unselect every items" self changed: #resetSelectedIndexes! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:13' prior: 36251205! resetSortingBlock "Reset the sortering block with the default value which consists in not sorting" sortingBlock contents: self defaultSortingBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24' prior: 36251452! selectedIndex "Return the index of the selected item In the case of a multiple selection list, it returns the last selected item" ^ selectedIndex contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! selectedIndex: anIndex selectedIndex contents: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24' prior: 36251713! selectedIndexes "Return the indexes of selected items on the case of a multiple selection list" ^ selectedIndexes contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! selectedIndexes: anIndex selectedIndexes contents: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24' prior: 36251942! selectedItem "Return the selected item. In the case of a multiple selection list, it returns the last selected item" ^ selectedItem contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! selectedItem: anIndex selectedItem contents: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:24' prior: 36252190! selectedItems "Return all the selected items in the case of a multiple selection list" ^ selectedItems contents! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! selectedItems: anIndex selectedItems contents: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10' prior: 49805893! separatorAfter: item at: index ^ self separatorBlock cull: item cull: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10' prior: 49806057! separatorBlock ^ separatorBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/21/2013 00:10' prior: 49806186! separatorBlock: aBlock separatorBlock contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 14:25' prior: 45508878! setSelectedIndex: anIndex "Set the index of the item you want to be selected" self widget ifNil: [ selectedIndex contents: anIndex ] ifNotNil: [ self changed: { #setIndex: .anIndex } ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:26' prior: 36252786! setSelectedItem: anItem "Set the item you want to be selected" | index | index := self listItems identityIndexOf: anItem ifAbsent: [ ^ self ]. self setSelectedIndex: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:28' prior: 36253123! sortingBlock "Return the ordering of the items" ^ sortingBlock contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:28' prior: 36253301! sortingBlock: aBlock "To set the ordering of the items" sortingBlock contents: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 09:37' prior: 36253558! unselectOnChange ^ unselectOnChange contents! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 08:51' prior: 36253690! unselectOnChange: aBoolean unselectOnChange contents: aBoolean.! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30' prior: 36253841! updateList "Refresh the list" self changed: #getItems.! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36254004! whenAllowToSelectChanged: aBlock "Set a block to value when the value of allowToSelect has changed" allowToSelect whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30' prior: 36254251! whenDisplayBlockChanged: aBlock "Set a block to value when the filtering block block has changed" displayBlock whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'CamilloBruni 5/2/2013 21:56' prior: 36459349! whenDoubleClickActionChanged: aBlock "Set a block to value when the doubleClick value has changed" doubleClick whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30' prior: 36254495! whenFilteringBlockChanged: aBlock "Set a block to value when the filtering block block has changed" filteringBlock whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'CamilloBruni 5/2/2013 22:03' prior: 36459586! whenHandlesDoubleClickChanged: aBlock "Set a block to value when the handlesDoubleClick value has changed" handlesDoubleClick whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'EstebanLorenzano 9/8/2013 16:09' prior: 68420825! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newContents cull: announcement oldContents cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 09:02' prior: 36255199! whenMenuChanged: aBlock "Set a block to value when the menu block has changed" menuHolder whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:30' prior: 36255422! whenMultiSelectionChanged: aBlock "Set a block to value when the multiSelection value has changed" isMultipleSelection whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31' prior: 36255674! whenSelectedIndexChanged: aBlock "Set a block to value when the selection index has changed" selectedIndex whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:34' prior: 36255914! whenSelectedItemChanged: aBlock "Set a block to value when the select item is changed" selectedItem whenChangedDo: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31' prior: 36256147! whenSelectionChanged: aBlock "Set a block to value when the selection of the list has changed" self whenSelectionIndexChanged: aBlock! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:33' prior: 36256391! whenSelectionIndexChanged: aBlock self deprecated: 'Use #whenSelectedIndexChanged: instead' on: '1 May 2013' in: '30078'! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 5/1/2013 10:31' prior: 36256615! whenSortingBlockChanged: aBlock "Set a block to value when the sorting block has changed" sortingBlock whenChangedDo: aBlock! ! !RadioButtonModel commentStamp: '' prior: 69394440! A RadioButtonModel is a spec model for RadioButton !! The method privateSetState: is really private and should only be used by RadioButtonGroup !! You can also have a look at RadioButtonGroupExample for a full example of how to use them with a group.! !RadioButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 34008570! defaultSpec ^ #(RadioButtonAdapter adapt: #(model))! ! !RadioButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/12/2012 12:36' prior: 32108825! title ^ 'Radio Button'! ! !RadioButtonModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 12:36' prior: 32102082! actionWhenActivatedHolder ^ actionWhenActivatedHolder! ! !RadioButtonModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 12:36' prior: 32102231! actionWhenDesactivatedHolder ^ actionWhenDesactivatedHolder! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 16:56' prior: 32104635! activationAction: aBlock "This method is used to set the action to perform when I am activated" actionWhenActivatedHolder contents: aBlock! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 16:50' prior: 32104954! click "Simulate a click on the radioButton. Used when the checkboc is a list item" self toggleState! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:05' prior: 32105161! desactivationAction: aBlock "This method is used to set the action to perform when I am desactivated" actionWhenDesactivatedHolder contents: aBlock! ! !RadioButtonModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 12:36' prior: 32102386! enabledHolder ^ enabledHolder! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48028162! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder contents ifFalse: actionWhenDesactivatedHolder contents. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:06' prior: 32103871! label ^ labelHolder contents! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:05' prior: 32105495! label: aString "Set the label of the radioButton" labelHolder contents: aString.! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:06' prior: 32104008! labelClickable "Return true if the label can be clicked to select the radioButton" ^ labelClickableHolder contents! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:04' prior: 32105734! labelClickable: aBoolean "Set if the label can be clicked to select the radioButton" labelClickableHolder contents: aBoolean! ! !RadioButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 7/11/2012 17:13' prior: 32107983! privateSetState: aBoolean "Should only be used by RadioButtonGroup" stateHolder contents: aBoolean. self changed: #state! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:06' prior: 32104233! state "Return the current state of the radio button" ^ stateHolder contents! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:06' prior: 32104419! state: aBoolean "Set if the checkbox is activated or not" stateHolder contents: aBoolean! ! !RadioButtonModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 12:36' prior: 32102511! stateHolder ^ stateHolder! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/12/2012 13:40' prior: 32106037! toggleState "Toogle the current state of the radioButton" self state: self state not! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/11/2012 17:13' prior: 32106224! whenActivatedDo: aBlock "This method is used to propagate the event that I have been activated" stateHolder whenChangedDo: [:bool | bool ifTrue: aBlock ]! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 16:56' prior: 32106481! whenActivationActionChanged: aBlock "A block performed when the activation action changed" actionWhenActivatedHolder whenChangedDo: aBlock ! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 16:57' prior: 32106737! whenChangedDo: aBlock "This method is used to propagate the event that I have changed" stateHolder whenChangedDo: aBlock! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/11/2012 17:13' prior: 32106975! whenDesactivatedDo: aBlock "This method is used to propagate the event that I have been desactivated" stateHolder whenChangedDo: [:bool | bool ifFalse: aBlock ]! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 16:59' prior: 32107238! whenDesactivationActionChanged: aBlock "A block performed when the desactivation action changed" actionWhenDesactivatedHolder whenChangedDo: aBlock ! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:01' prior: 32107503! whenLabelChanged: aBlock "A block performed when the label changed" labelHolder whenChangedDo: aBlock ! ! !RadioButtonModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:02' prior: 32107724! whenLabelClickableChanged: aBlock "A block performed when the label click is activated or descativated" labelClickableHolder whenChangedDo: aBlock ! ! !SliderModel commentStamp: '' prior: 69394753! A SliderModel is a spec model for a slider. See example: self example! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 38418680! defaultSpec ^ #(SliderAdapter adapt: #(model))! ! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/14/2013 15:38' prior: 38419455! example | slider | slider := self new. slider min: 0; max: 100; whenValueChangedDo: [:value | slider label: value asString ]. slider openWithSpec ! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:14' prior: 33382961! absoluteValue "Return the position of the slider in a scale between 0 and 1 despite of the min and max value" ^ absoluteValue contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:26' prior: 33383200! absoluteValue: aFloat "Set the position of the slider in a scale between 0 and 1 despite of the min and max value" absoluteValue contents: aFloat! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 14:28' prior: 45506976! color: aColor "Hack because during the interpretation, the state is slightly inconistent" self widget ifNotNil: [:w | w == self ifFalse: [ super color: aColor ]]! ! !SliderModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/19/2013 17:35' prior: 48898171! initialize super initialize. max := 100 asValueHolder. min := 0 asValueHolder. quantum := 1 asValueHolder. value := 0 asValueHolder. absoluteValue := 0 asValueHolder. labelHolder := '' asValueHolder. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 15:44' prior: 38421088! label "Return the label of the slider" ^ labelHolder contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2012 16:46' prior: 33384458! label: aString "Set the label of the slider" labelHolder contents: aString! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:32' prior: 33383799! max "Return the maximun value" ^ max contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:34' prior: 33384687! max: anObject "Set the maximun value" max contents: anObject! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:33' prior: 33383951! min "Return the minimum value" ^ min contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:34' prior: 33384913! min: anObject "Set the minimum value" min contents: anObject! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:33' prior: 33384103! quantum "Return the quantum betwen values" ^ quantum contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:33' prior: 33385139! quantum: aNumber "Set the quantum betwen values" quantum contents: aNumber! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:57' prior: 33385391! reset "Reset the cursor to the minimum value" self value: self min! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 17:33' prior: 33384270! value "Return the current value in a range between min and max" ^ value contents! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 15:39' prior: 38421271! value: aNumber "Set the value in a range between min and max" value contents == aNumber ifTrue: [ ^ self ]. value contents: aNumber.! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:35' prior: 33385850! whenAbsoluteValueChangedDo: aBlock "Block performed when the absolute value changed" absoluteValue whenChangedDo: aBlock! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/18/2012 16:46' prior: 33386082! whenLabelChangedDo: aBlock "Block performed when the label changed" labelHolder whenChangedDo: aBlock! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:35' prior: 33386295! whenMaxChangedDo: aBlock "Block performed when the maximum value changed" max whenChangedDo: aBlock! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:35' prior: 33386507! whenMinChangedDo: aBlock "Block performed when the minimum value changed" min whenChangedDo: aBlock! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:35' prior: 33386719! whenQuantumChangedDo: aBlock "Block performed when the quantum value changed" quantum whenChangedDo: aBlock! ! !SliderModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 17:35' prior: 33386939! whenValueChangedDo: aBlock "Block performed when the value changed" value whenChangedDo: aBlock! ! !TabManagerModel commentStamp: '' prior: 69394882! I am a spec model representing a tab manager. My role is to gather multiple tabs, and make them work together! !TabManagerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 49806351! defaultSpec ^ #(TabManagerAdapter adapt: #(model))! ! !TabManagerModel methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 7/18/2013 14:50' prior: 49806699! addDependent: aMorph self myDependents add: aMorph! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:22' prior: 40132868! addTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs contents add: aTab. self changed: #addTab: with: { aTab }! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/1/2013 14:44' prior: 49807027! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. tabSelectedAction := [] asValueHolder. selectedTab := nil asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: self getTabs value ] ]. selectedTab whenChangedDo: [:newTab | tabSelectedAction contents cull: newTab cull: self ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:42' prior: 40133742! removeTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs contents remove: aTab ifAbsent: [ ]. self widget ifNotNil: [ :w | w removeTab: aTab ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:44' prior: 40134161! removeTabNumber: anIndex self removeTab: (tabs at: anIndex)! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 01:48' prior: 49807403! selectTabModel: tabModel tabSelectedAction contents cull: tabModel cull: self! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:41' prior: 49807572! selectedTab ^ selectedTab contents! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:44'! selectedTab: aTab selectedTab contents: (self tabModelFor: aTab).! ! !TabManagerModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 14:27' prior: 49807783! tabModelFor: tab ^ tabs detect: [ :e | e = tab model model ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:13' prior: 49808108! tabSelectedAction ^ tabSelectedAction contents! ! !TabManagerModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/8/2013 16:28' prior: 40134312! tabs ^ tabs contents! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:28' prior: 40134423! tabs: aCollection tabs contents: aCollection! ! !TabManagerModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 6/20/2013 00:13' prior: 49808253! whenTabSelected: aBlock tabSelectedAction contents: aBlock! ! !TabModel commentStamp: '' prior: 69395042! I am a spec model representing a single tab. Ishould not be used without being contained into a TabManagerModel! !TabModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 49808415! defaultSpec ^ #(TabAdapter adapt: #(model))! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02' prior: 40135031! actions ^ actions contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58' prior: 40135141! actions: aCollection actions contents: aCollection! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/19/2013 15:20' prior: 49809040! closeable ^ closeable contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/9/2013 00:53' prior: 40135389! closeable: aBoolean closeable contents: aBoolean! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:08'! contents ^ morph contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:09'! contents: aMorph morph contents: aMorph! ! !TabModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/8/2013 16:00' prior: 40135520! defaultIcon ^ Smalltalk ui icons blankIcon! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02' prior: 40135645! icon ^ icon contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:57' prior: 40135749! icon: aForm icon contents: aForm! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/8/2013 15:52' prior: 40135867! initialExtent ^ 200@25! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00' prior: 49809173! initialize "Initialization code for TabModel" super initialize. label := '' asValueHolder. icon := self defaultIcon asValueHolder. morph := nil asValueHolder. retrievingBlock := nil asValueHolder. menu := nil asValueHolder. actions := OrderedCollection new asValueHolder. closeable := true asValueHolder. tabSelectedAction := [] asValueHolder. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:48' prior: 40136947! label ^ label contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:52' prior: 40137053! label: aString label contents: aString! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02' prior: 40137174! menu ^ menu contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58' prior: 40137278! menu: aBlock menu contents: aBlock! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:19' prior: 40137396! model: aComposableModel self retrievingBlock: [ aComposableModel buildWithSpec asWidget ]! ! !TabModel methodsFor: 'deprecated-protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:09' prior: 40137560! morph self deprecated: 'Use #contents instead'. ^ self contents! ! !TabModel methodsFor: 'deprecated-protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:10' prior: 40137666! morph: aMorph self deprecated: 'Use #contents: instead'. self contents: aMorph! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 16:02' prior: 40137785! retrievingBlock ^ retrievingBlock contents! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/8/2013 15:58' prior: 40137911! retrievingBlock: aBlock retrievingBlock contents: aBlock! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:42' prior: 49810187! selected: aBoolean self changed: #selected: with: { aBoolean }! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00' prior: 49810342! tabSelected tabSelectedAction contents cull: self! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/20/2013 00:00' prior: 49810477! tabSelectedAction ^ tabSelectedAction contents! ! !TabModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 6/20/2013 00:07' prior: 49810615! whenTabSelected: aBlock tabSelectedAction contents: aBlock! ! !TextModel commentStamp: '' prior: 69395213! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 69395413! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !TextInputFieldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 34338545! defaultSpec ^ #(TextInputFieldAdapter adapt: #(model))! ! !TextInputFieldModel class methodsFor: 'example' stamp: 'BenjaminVanRyseghem 5/14/2013 17:06' prior: 38364990! example | instance | instance := self new. instance extent: 300@25. instance openWithSpec. instance ghostText: 'This is a ghost'. instance text: 'This is a text'. ! ! !TextInputFieldModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 35885783! accept: aText textHolder contents: aText. actionToPerformHolder contents cull: aText. "Dummy changed to raise an announcement" actionPerformedHolder contents: aText. self changed: #clearUserEdits.! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 8/22/2012 15:09' prior: 52716551! acceptOnCR "Return true if the text is accepted when the Enter key is stroked" ^ acceptOnCR contents! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 21:57' prior: 52716766! acceptOnCR: aBoolean "Set if the text is accepted when the Enter key is stroked or not" acceptOnCR contents: aBoolean! ! !TextInputFieldModel methodsFor: 'accessing' stamp: '' prior: 52715119! actionToPerformHolder ^ actionToPerformHolder! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 21:59' prior: 52717056! autoAccept "Return true if the text is accepted after ech keystroke" ^ autoAccept contents! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 21:59' prior: 52717262! autoAccept: aBoolean "Set if the text is accepted after each keystroke or not" autoAccept contents: aBoolean.! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:01' prior: 52717544! beDecrypted "Decrypt the entered text" self encrypted: false! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:02' prior: 52717715! beEncrypted "Encrypt the entered text" self encrypted: true! ! !TextInputFieldModel methodsFor: 'private' stamp: 'EstebanLorenzano 8/17/2012 16:41' prior: 52720067! defaultEntryCompletion | applicants | applicants := (Array streamContents: [:strm | Symbol allSymbolTablesDo: [:each | (each notEmpty and: [each first canBeGlobalVarInitial and: [Smalltalk globals includesKey: each]]) ifTrue: [strm nextPut: each]]]) sort. ^ EntryCompletion new dataSourceBlock: [:currText | applicants]; filterBlock: [:currApplicant :currText | currText size > 3 and: [currApplicant asUppercase includesSubstring: currText asString asUppercase]].! ! !TextInputFieldModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/4/2012 14:52' prior: 52715261! encrypted ^ isEncrypted contents! ! !TextInputFieldModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/4/2012 14:53' prior: 52715390! encrypted: aBoolean isEncrypted contents: aBoolean ! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:03' prior: 52717885! entryCompletion "Return an entry completion used to suggest text while typing" ^ entryCompletion contents! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:03' prior: 52718168! entryCompletion: anEntryCompletion "Set an entry completion used to suggest text while typing" entryCompletion contents: anEntryCompletion.! ! !TextInputFieldModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:45' prior: 36859508! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character tab asKeyCombination }! ! !TextInputFieldModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42' prior: 36859740! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character tab shift asKeyCombination }! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:04' prior: 52718485! ghostText "Return the ghost text of the text zone" ^ ghostText contents! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:05' prior: 52718671! ghostText: aText "Set the ghost text of the text zone" ghostText contents: aText translated.! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:54' prior: 48021407! initialize super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. autoAccept := false asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. autoAccept whenChangedDo: [:bool | self widget ifNotNil: [:w | w autoAccept: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !TextInputFieldModel methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 6/25/2012 23:46' prior: 52715033! isCodeCompletionAllowed ^ false! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/19/2012 22:06' prior: 52718933! removeEntryCompletion < api:#do> "Remove the entry completion" self entryCompletion: nil! ! !TextInputFieldModel methodsFor: 'accessing' stamp: '' prior: 52715494! textHolder ^ textHolder! ! !TextInputFieldModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/19/2012 21:58' prior: 52719129! whenAcceptOnCRChanged: aBlock "aBlock will be performed when acceptOnCR changed" acceptOnCR whenChangedDo: aBlock! ! !TextInputFieldModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/19/2012 22:00' prior: 52719363! whenAutoAcceptChanged: aBlock "aBlock will be performed when autoAccept changed" autoAccept whenChangedDo: aBlock! ! !TextInputFieldModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/19/2012 22:04' prior: 52719597! whenEntryCompletionChanged: aBlock "aBlock will be performed when entryCompletion changed" entryCompletion whenChangedDo: aBlock! ! !TextInputFieldModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/19/2012 22:05' prior: 52719846! whenGhostTextChanged: aBlock "aBlock will be performed when ghostText changed" ghostText whenChangedDo: aBlock! ! !TextModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 33993491! defaultSpec ^ #(TextAdapter adapt: #(model))! ! !TextModel class methodsFor: 'example' stamp: 'SeanDeNigris 4/19/2013 22:50' prior: 35388950! example | instance | instance := self new. instance openWithSpec. instance text: 'This is a test. If this had been an actual emergency...'.! ! !TextModel class methodsFor: 'specs' stamp: '' prior: 52755989! title ^ 'Text'! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 22:12' prior: 52753387! aboutToStyle: aBoolean "Set if the text zone must be styled" aboutToStyleHolder contents: [ aBoolean ]! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 20:11' prior: 52753666! aboutToStyleBlock "Return the block used to know if the text must be styled" ^ aboutToStyleHolder contents! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 22:21' prior: 52753884! aboutToStyleBlock: aBlockReturningABoolean "Set the block used to know if the text must be styled. The block must return a boolean" aboutToStyleHolder contents: aBlockReturningABoolean! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:02' prior: 35886087! accept "Accep the current pendingtext" self widget ifNotNil: [:w | w accept ]. "Dummy changed to raise an announcement" actionPerformedHolder contents: self text.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:37' prior: 39022773! accept: aText notifying: aNotifyier | accept | accept := actionToPerformHolder contents cull: aText cull: aNotifyier. accept == false ifTrue: [ ^ self ]. textHolder contents: aText. "Dummy changed to raise an announcement" actionPerformedHolder contents: aText. self changed: #clearUserEdits.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 22:13' prior: 52747514! acceptBlock "Return the block to perform when the text is accepted. The block must have one argument, which will be the accepted text" ^ actionToPerformHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/19/2013 13:38' prior: 39023180! acceptBlock: aBlockWithOneArgument "Set the block to perform when the text is accepted. The block must have one argument, which will be the accepted text. The block can return false if the candidate text is to be rejected" actionToPerformHolder contents: aBlockWithOneArgument! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 20:12' prior: 52754250! behavior "Return the class corresponding to the method class of the source code you are editing" ^ behaviorHolder contents! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 20:13' prior: 52754484! behavior: aClass < api: #st getter: #behavior registration: #whenBehaviorChanged:> "Set the class corresponding to the method class of the source code you are editing" behaviorHolder contents: aClass! ! !TextModel methodsFor: 'protocol' stamp: '' prior: 52745733! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" ^ shifted ifTrue: [SmalltalkEditor shiftedYellowButtonMenu] ifFalse: [SmalltalkEditor yellowButtonMenu].! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 9/28/2012 11:02' prior: 52746093! doItContext ^ doItContext contents! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 9/28/2012 11:03' prior: 52746213! doItContext: anObject doItContext contents: anObject! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 9/28/2012 11:03' prior: 52746351! doItReceiver ^ doItReceiver contents! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 9/28/2012 11:03' prior: 52746473! doItReceiver: anObject doItReceiver contents: anObject! ! !TextModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42' prior: 36855351! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character arrowRight command ctrl asKeyCombination }! ! !TextModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 5/4/2013 22:42' prior: 36855589! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character arrowLeft command ctrl asKeyCombination }! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:34' prior: 52748150! getSelection "Get the text selection" selection ifNil: [ ^(1 to: 0) ]. ^ selection contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:10' prior: 52746613! getText ^ textHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 19:38' prior: 52748377! hasEditingConflicts "Return if the text zone has editing conflicts" ^ self widget ifNil: [ false ] ifNotNil: [:w | w hasEditingConflicts ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 19:39' prior: 52748624! hasEditingConflicts: aBoolean "Set if the text zone has editing conflicts" ^ self widget ifNil: [ false ] ifNotNil: [:w | w hasEditingConflicts: aBoolean ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:54' prior: 52748917! hasUnacceptedEdits "Return if the text zone has unaccepted edits (orange corner)" hasUnacceptedEdits ifNil: [ ^ false ]. ^ hasUnacceptedEdits contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:54' prior: 52749177! hasUnacceptedEdits: aBoolean "Return if the text zone has unaccepted edits (orange corner)" hasUnacceptedEdits contents: aBoolean! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 13:26' prior: 48019297! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. hasUnacceptedEdits := false asValueHolder. selection := (1 to: 0) asValueHolder. scrollValue := (0@0) asValueHolder. self registerEvents. self registerEventsForShout! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 7/16/2012 20:13' prior: 52754778! isAboutToStyle < api: #inspect> "Return if the text zone is shouted or not" ^ self aboutToStyleBlock value! ! !TextModel methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 7/16/2012 20:04' prior: 52743131! isCodeCompletionAllowed "Return if code completion is allowed" ^ isCodeCompletionAllowedHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:05' prior: 52749485! isCodeCompletionAllowed: aBoolean "Set if code completion is allowed" isCodeCompletionAllowedHolder contents: aBoolean! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:05' prior: 52749791! pendingText "Return the current pending text" self widget ifNil: [ ^ self getText ] ifNotNil: [:w | ^ w text ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:07' prior: 52750011! pendingText: aText "Set the pending text. Do no accept it" self widget ifNil: [ self text: aText ] ifNotNil: [:w | w setText: aText. w hasUnacceptedEdits: true ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:24' prior: 52746745! readSelection ^ readSelectionHolder contents cull: self text cull: self! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:07' prior: 52750307! readSelectionBlock "Return the block used to calculate the text selection" ^ readSelectionHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:08' prior: 52750517! readSelectionBlock: aBlock "Set the block used to calculate the text selection" ^ readSelectionHolder contents: aBlock! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 13:28' prior: 52744716! registerEvents textHolder whenChangedDo: [ self changed: #getText ]. readSelectionHolder whenChangedDo: [ self changed: #readSelection ]. enabledHolder whenChangedDo: [ :bool | self changed: #enabled: with: { bool } ]. hasUnacceptedEdits whenChangedDo: [ :bool | self changed: #hasUnacceptedEdits: with: { bool } ]. selection whenChangedDo: [:block | self changed: #setSelectionFromModel: with: { block value } ]. scrollValue whenChangedDo: [ :newPosition | self changed: #setScrollValue: with: { newPosition } ]! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/28/2013 21:29' prior: 52745034! registerEventsForShout aboutToStyleHolder whenChangedDo: [ self changed: #getText ]. behaviorHolder whenChangedDo: [ :class | self changed: #classOrMetaClass: with: { class }. self changed: #getText ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:24'! scrollValue "Return the current scroll position" ^ scrollValue contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:24'! scrollValue: aPoint "Set the scroll position" ^ scrollValue contents: aPoint! ! !TextModel methodsFor: 'protocol' stamp: 'StephaneDucasse 5/17/2012 17:45' prior: 52746958! selectedBehavior ^ behaviorHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:41' prior: 52750808! setSelection: anInterval "Set the text selection without changing the readSelectionBlock" selection ifNotNil: [: holder | holder contents: anInterval ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/7/2013 14:18' prior: 52747229! text ^ self getText! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/16/2012 20:09' prior: 52751120! text: aText "Set the text of the text zone" textHolder contents: aText! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 22:21' prior: 52751352! whenAboutToStyleBlockChanged: aBlock "Set a block to perform when the about to style block changed" aboutToStyleHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'MarcusDenker 6/24/2013 11:09' prior: 41666368! whenAboutToStyleChanged: aBlock "Set a block to perform when the about to style block changed" self whenAboutToStyleBlockChanged: [:block :old :announcement :anAnnouncer | aBlock cull: (block value) cull: old cull: announcement cull: anAnnouncer ]! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 22:14' prior: 52751960! whenAcceptBlockChanged: aBlock "Set a block to perform when the accept block changed" actionToPerformHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 20:13' prior: 52752200! whenBehaviorChanged: aBlock "Set a block to perform when the behavior class changed" behaviorHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 22:11' prior: 52752432! whenCodeCompletionAllowedChanged: aBlock "Set a block to perform when the code completion value changed" actionPerformedHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 20:11' prior: 52752691! whenReadSelectionIsChanged: aBlock "Set a block to perform when the read selection block changed" readSelectionHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/1/2013 13:24'! whenScrollValueChanged: aBlock "Set a block to perform when the scroll value changed" scrollValue whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 22:11' prior: 52752941! whenTextChanged: aBlock "Set a block to perform when the text changed" textHolder whenChangedDo: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/16/2012 22:11' prior: 52753155! whenTextIsAccepted: aBlock "Set a block to perform when the text is accepted" actionPerformedHolder whenChangedDo: aBlock! ! !TreeModel commentStamp: '' prior: 69395611! I am the Spec model of a MorphTreeMorph tree.! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 48008225! defaultSpec ^ #(TreeAdapter adapt: #(model))! ! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 9/28/2013 23:51' prior: 45472757! example | m | m := self new. m openWithSpec. m roots: #(a b c d). m childrenBlock: [:it | it = #c ifTrue: [ {1. 2. 3} ] ifFalse: [ {} ]]. m displayBlock: [:item | item isSymbol ifTrue: [ item asUppercase , ' symbol' ] ifFalse: [ item printString ]]. m dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]. ^ m! ! !TreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42' prior: 45473937! allowMenuOnNoItem ^ allowMenuOnNoItem contents! ! !TreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 15:42' prior: 45474061! allowMenuOnNoItem: aBoolean allowMenuOnNoItem contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27' prior: 45474210! autoDeselection ^ autoDeselection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:27' prior: 45474338! autoDeselection: aBoolean autoDeselection contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:55' prior: 45474483! autoMultiSelection ^ autoMultiSelection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:03' prior: 45474617! autoMultiSelection: aBoolean autoMultiSelection contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/11/2013 23:11' prior: 45474769! beCheckList self isCheckList: true! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 45475048! childrenBlock < api: #inspect> "Return the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" ^ childrenBlockHolder contents! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 45475348! childrenBlock: aBlock < api: #block getter: #childrenBlock registration: #whenChildrenBlockChanged:> "Set the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" childrenBlockHolder contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34' prior: 45475704! childrenFor: anItem ^ childrenBlockHolder contents cull: anItem cull: self! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:56' prior: 45475863! columnInset ^ columnInset contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04' prior: 45475983! columnInset: anInteger columnInset contents: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 21:07' prior: 45476122! columns ^ columns contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 21:11' prior: 45476235! columns: aCollection columns contents: aCollection! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 45476402! displayBlock < api: #inspect> "Return the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" ^ displayBlock contents! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 45476696! displayBlock: aBlock < api: #block getter: #displayBlock registration: #whenDisplayBlockChanged:> "Set the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" displayBlock contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58' prior: 45477337! doubleClick doubleClick contents value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04' prior: 45477461! doubleClick: aBlock doubleClick contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58' prior: 45477594! evenRowColor ^ evenRowColor contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04' prior: 45477716! evenRowColor: aColor evenRowColor contents: aColor! ! !TreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48' prior: 45477841! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ { Character tab asKeyCombination }! ! !TreeModel methodsFor: 'focus' stamp: 'DamienCassou 6/6/2013 16:48' prior: 45478056! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ { Character tab shift asKeyCombination }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:05' prior: 45478291! expandAll self changed: #expandAll with: #()! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:05' prior: 45478430! expandRoots self changed: #expandRoots with: #()! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:35' prior: 45478702! iconBlock: aBlock iconBlock contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 14:14' prior: 45478831! iconFor: aNode ^ iconBlock contents cull: aNode! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/28/2013 23:09' prior: 48874661! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [:e | ] asValueHolder. columns := { MorphTreeColumn new rowMorphGetSelector: [:node | (self wrapItem: node item) asMorph ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:58' prior: 45480504! isCheckList ^ isCheckList contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:04' prior: 45480624! isCheckList: aBoolean isCheckList contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:59' prior: 45480761! keyStroke: aKeyStroke keyStroke contents cull: aKeyStroke! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06' prior: 45480904! keyStrokeAction: aBlock keyStroke contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 45481056! menu "Return the block used to generate the tree menu" ^ menuBlockHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:43' prior: 45481257! menu: aBlock < api: #block getter: #menu registration: #whenMenuChanged:> "Set the block used to generate the tree menu" menuBlockHolder contents: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'DamienCassou 6/6/2013 16:41' prior: 45481489! menu: aMenu shifted: aBoolean (self allowMenuOnNoItem not and: [ self selectedItems isEmpty ]) ifTrue: [ ^ nil ]. menuBlockHolder contents cull: aMenu cull: aBoolean. ^ aMenu! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00' prior: 45481751! multiSelection ^ multiSelection contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:06' prior: 45481877! multiSelection: aBoolean multiSelection contents: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00' prior: 45482020! oddRowColor ^ oddRowColor contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07' prior: 45482139! oddRowColor: aColor oddRowColor contents: aColor! ! !TreeModel methodsFor: 'initialize' stamp: 'StephaneDucasse 8/4/2013 18:35' prior: 48011202! onWidgetBuilt ^ self selectedItems: selectionHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:00' prior: 45482272! preferedPaneColor ^ preferedPaneColor contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07' prior: 45482404! preferedPaneColor: aColor preferedPaneColor contents: aColor! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/28/2013 23:02' prior: 68419724! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self widget ifNotNil: [ :w | w columns: col ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:35' prior: 45483320! resetSelection self selectedItems: {}! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01' prior: 45483442! resizerWidth ^ resizerWidth contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07' prior: 45483564! resizerWidth: anInteger resizerWidth contents: anInteger! ! !TreeModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 9/28/2013 23:11' prior: 45483975! rootNodeHolder: aBlock self changed: #rootNodeHolder: with: { aBlock }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 18:44' prior: 45484131! roots < api: #inspect> "Return the tree roots" ^ rootsHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:59' prior: 45484304! roots: aCollection < api: #st getter: #roots registration: #whenRootsChanged:> "Set the tree roots" rootsHolder contents: aCollection. self changed: #setRoots: with: { aCollection }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:01' prior: 45484559! rowInset ^ rowInset contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:07' prior: 45484673! rowInset: anInteger rowInset contents: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 16:20' prior: 45484807! secondSelection: anItem self widget ifNotNil: [ :w | w listManager secondSelection: anItem ]! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:00' prior: 45484999! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ selectionHolder contents last! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:46' prior: 45485333! selectedItem: anItem < api: #st getter: #selectedItem registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" self selectedItems: { anItem }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/7/2013 21:15' prior: 45485650! selectedItems < api: #inspect> "Return the selected items" ^ selectionHolder contents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 17:03' prior: 45485824! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" "treeModel selectNodePath: aCollection." selectionHolder contents: aCollection. ! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/28/2013 23:24'! selectionChanged: ann ^ selectionHolder contents: ann selection selectedItems! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:03' prior: 45486323! updateTree < api: #do> "Force the tree to refresh" self changed: #updateTree with: {}. treeUpdated contents: nil.! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23' prior: 45486594! whenChildrenBlockChanged: aBlock "Set a block to perform when a new childrenBlock is set" childrenBlockHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24' prior: 45486849! whenDisplayBlockChanged: aBlock "Set a block to perform when a new displayBlock is set" displayBlock whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:23' prior: 45487081! whenMenuChanged: aBlock "Set a block to perform when a new menuBlock is set" menuBlockHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 17:42' prior: 45487289! whenRootsChanged: aBlock rootsHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 7/22/2013 16:34' prior: 45901208! whenSelectedItemChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: [ :col | col ifNil: [ aBlock value: nil ] ifNotNil: [ col isEmpty ifTrue: [ aBlock value: nil ] ifFalse: [ aBlock value: col first ] ] ]! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/17/2013 21:24' prior: 45487440! whenSelectedItemsChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/20/2013 02:58' prior: 45487657! whenTreeUpdated: aBlock treeUpdated whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/17/2013 19:20' prior: 45487829! wrapItem: anItem ^ displayBlock contents cull: anItem cull: self! ! !WindowModel commentStamp: '' prior: 69395717! A WindowModel is a spec model for a Window! !DialogWindowModel commentStamp: '' prior: 69395826! A DialogWindowModel is a model used to describe a DialogWindow! !DialogWindowModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 20712799! defaultSpec ^ #(DialogWindowAdapter adapt: #(model))! ! !DialogWindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/28/2013 23:50' prior: 38714123! buildWithSpecLayout: aSpec "Build the widget using the spec name provided as argument" | widget | (self spec notNil and: [ self needRebuild not ]) ifTrue: [ widget := self spec instance ] ifFalse: [ contents := self model buildWithSpecLayout: aSpec. widget := SpecInterpreter private_buildWidgetFor: self withSpec: self defaultSpecSelector. contents := nil ]. self extent ifNotNil: [:ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ]]. ^ widget! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:49' prior: 20710843! cancelAction: aBlock ^ self changed: #cancelAction: with: { aBlock }! ! !DialogWindowModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/28/2013 23:50'! contents ^ contents! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:48' prior: 20711184! okAction: aBlock ^ self changed: #okAction: with: { aBlock }! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:46'! okButtonEnabled: aBoolean self changed: #okButtonEnabled: with: { aBoolean }! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:47' prior: 20711348! toolbar self deprecated: 'widget should not be accessed directly'. ^ self widget ifNotNil: [:w | w toolbar ]! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:47' prior: 35887953! triggerOkAction self changed: #triggerOkAction with: #()! ! !WindowModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 13:39' prior: 54921952! defaultSpec ^ #(WindowAdapter adapt: #(model))! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54918709! addModelIn: widget withSpec: aSpec self model ifNil: [ ^ self ]. self changed: #addModelIn:withSpec: with: { widget . aSpec }! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38034524! addModelIn: widget withSpecLayout: aSpec self model ifNil: [ ^ self ]. self changed: #addModelIn:withSpecLayout: with: { widget . aSpec }! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38731152! askOkToClose ^ self model askOkToClose! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/29/2013 13:02' prior: 38035274! buildWithSpecLayout: aSpec "Build the widget using the spec name provided as argument" | adapter widget | (self spec notNil and: [ self needRebuild not ]) ifTrue: [ widget := self spec instance ] ifFalse: [ adapter := SpecInterpreter private_buildWidgetFor: self withSpec: self defaultSpecSelector. widget := adapter widget. self addModelIn: widget withSpecLayout: aSpec ]. self ensureExtentFor: widget. ^ widget! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38731294! close self changed: #close with: #()! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54920282! defaultInitialExtent ^ 400@300! ! !WindowModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54916787! giveFocusToNextFrom: aModel ^ self model giveFocusToNextFrom: aModel! ! !WindowModel methodsFor: 'focus' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54916939! giveFocusToPreviousFrom: aModel ^ self model giveFocusToPreviousFrom: aModel ! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54917455! initialExtent ^ initialExtent contents ifNil: [ self model ifNil: [ self defaultInitialExtent ] ifNotNil: [:m | m initialExtent ifNil: [ self defaultInitialExtent ]]]! ! !WindowModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/29/2013 12:27' prior: 48896419! initialize super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !WindowModel methodsFor: 'testing' stamp: 'ClementBera 9/26/2013 15:45' prior: 68769214! isClosed ^ isClosedHolder contents! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 17:14' prior: 54918090! isDisplayed ^ self window notNil! ! !WindowModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54917728! model ^ model contents! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54918257! model: aModel model contents: aModel! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38731798! okToChange ^ self model okToChange! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38035773! openModal: aWindow self changed: #openModal: with: { aWindow }! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38518640! openWithSpecLayout: aSpec window contents: (self buildWithSpecLayout: aSpec). self changed: #open with: #(). self updateTitle.! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38518869! rebuildWithSpec: aSpec self changed: #rebuildWithSpec: with: { aSpec }.! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38751557! rebuildWithSpecLayout: aSpec self changed: #rebuildWithSpecLayout: with: { aSpec }! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38167768! taskbarIcon ^ model contents ifNil: [ super taskbarIcon ] ifNotNil: [ :m | m windowIcon ifNil: [ m taskbarIcon ] ]! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54921353! title ^ self model ifNil: [ super title ] ifNotNil: [:m | m title ]! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54921511! title: aString self changed: #title: with: { aString }! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 35887793! triggerOkAction "do nothing (ensure polymorphism with DialogWindow)"! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 54921664! updateTitle "Update the window title" self title: self title! ! !WindowModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/29/2013 12:29' prior: 54918539! whenClosedDo: aBlock isClosedHolder whenChangedDo: [:value | value ifTrue: [ aBlock value ] ]! ! !WindowModel methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 9/29/2013 12:29' prior: 54917830! windowIsClosing isClosedHolder contents: true! ! !WorldModel commentStamp: '' prior: 69395948! I am a model representing Pharo World. This way, every spec application can be opened as the Pharo system window as window, ti simulate native application! !WorldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 5/14/2013 16:34' prior: 38036562! defaultSpec self setUpWorld. ^ World! ! !WorldModel class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 6/5/2013 22:51' prior: 39438909! setUpWorld World changeProportionalLayout. World submorphs do: [:e | e delete ]. (Smalltalk at: #PolymorphSystemSettings) perform: #desktopColor: with: (Color r: 0.78 g: 0.753 b: 0.71). ((Smalltalk at: #UITheme) perform: #currentSettings) perform: #windowColor: with: (Color r: 0.745 g: 0.745 b: 0.745). (Smalltalk at: #TaskbarMorph) perform: #showTaskbar: with: false! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:41' prior: 38362192! addModelIn: container withSpec: aSpec self model ifNil: [ ^ self ]. widget := self model buildWithSpec: aSpec. container addMorph: widget fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:41' prior: 38362472! addModelIn: container withSpecLayout: aSpec self model ifNil: [ ^ self ]. widget := self model buildWithSpecLayout: aSpec. container addMorph: widget fullFrame: LayoutFrame identity! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23' prior: 38037624! defaultInitialExtent ^ World extent! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:43' prior: 38037747! ensureExtentFor: aWidget self extent ifNotNil: [ :ext | DisplayScreen hostWindowSize: ext ]. self initialExtent ifNotNil: [ :ext | DisplayScreen hostWindowSize: ext ].! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 16:23' prior: 38038002! isDisplayed ^ true! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:40' prior: 38362763! openWithSpec: aSpec self buildWithSpec: aSpec. self updateTitle! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 22:40' prior: 38362929! openWithSpecLayout: aSpec self buildWithSpecLayout: aSpec. self updateTitle! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:24' prior: 38038438! title: aString ^ DisplayScreen hostWindowTitle: aString! ! !WorldModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/14/2013 16:41' prior: 38038579! updateTitle "Update the window title" DisplayScreen hostWindowTitle: self title! ! !WorldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 22:59' prior: 38363092! widget ^ widget ! ! !CheckBoxExample commentStamp: '' prior: 69396168! A CheckBoxExample is a simple example of how to use CheckBoxes. CheckBoxExample new openWithSpec! !CheckBoxExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:47' prior: 18987369! defaultSpec ^ { #ContainerModel. #add:. { self topSpec. #layout:. #(FrameLayout bottomFraction: 0 bottomOffset: 20) }. #add:. {{#model . #container } . #layout: . #(FrameLayout topOffset: 22) } }! ! !CheckBoxExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:47' prior: 18988147! topSpec ^ { #ContainerModel. #add:. {{#model . #button1 } . #layout:. #(FrameLayout rightFraction: 0.33 bottomFraction: 0 bottomOffset: 25)}. #add:. {{#model . #button2 } . #layout:. #(FrameLayout leftFraction: 0.33 rightFraction: 0.66 bottomFraction: 0 bottomOffset: 25)}. #add:. {{#model . #button3 } . #layout:. #(FrameLayout leftFraction: 0.66 bottomFraction: 0 bottomOffset: 25)}}! ! !CheckBoxExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:59' prior: 18984521! button1 ^ button1! ! !CheckBoxExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:59' prior: 18984631! button2 ^ button2! ! !CheckBoxExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 15:00' prior: 18984851! container ^ container asSpecAdapter! ! !ClassMethodBrowser commentStamp: '' prior: 69396333! A ClassMethodBrowser is a simple browser using spec and reusing MethodBrowser to browse classes>>methods>>sourceCode. | cb | cb := ClassMethodBrowser new. cb openWithSpec. cb classes: Smalltalk allClasses.! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19974568! beginsWith: aString fromList: aMorph "This method is used bu the list for the search of elements when you are typing directly in the list" ^ false! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:53' prior: 36563195! buildWithSpecLayout: aSpecLayout "Build the widget using the spec name provided as argument" | widget | widget := SpecInterpreter interpretASpec: aSpecLayout model: self. widget := widget asWidget. self ensureExtentFor: widget. self ensureKeyBindingsFor: widget. self announce: (WidgetBuilt model: self widget: widget). ^ widget! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19974839! heightToDisplayInList: aList "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex y ]. self initialExtent ifNotNil: [:ex | ^ ex y ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget heightToDisplayInList: aList! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19975223! heightToDisplayInTree: aTree "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex y ]. self initialExtent ifNotNil: [:ex | ^ ex y ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget heightToDisplayInTree: aTree! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 15:47' prior: 45568252! initialize super initialize. extentHolder := nil asValueHolder. needRebuild := true asValueHolder. keyStrokesForNextFocusHolder := { KMNoShortcut new } asValueHolder. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asValueHolder. additionalKeyBindings := Dictionary new. announcer := Announcer new asValueHolder. aboutText := self class comment asValueHolder. windowIcon := nil asValueHolder. window := nil asValueHolder. askOkToClose := false asValueHolder. titleHolder := self class title asValueHolder. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ]. titleHolder whenChangedDo: [ self updateTitle ]! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 38513728! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph! ! !ComposableModel methodsFor: 'widgets' stamp: 'BenjaminVanRyseghem 10/1/2013 15:01'! newDropList ^ self instantiate: DropListModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'BenjaminVanRyseghem 10/1/2013 13:49' prior: 68859933! newList ^ self instantiate: ListModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'BenjaminVanRyseghem 10/1/2013 13:50'! newTab ^ self instantiate: TabModel! ! !ComposableModel methodsFor: 'widgets' stamp: 'BenjaminVanRyseghem 10/1/2013 13:50'! newTabManager ^ self instantiate: TabManagerModel! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:27' prior: 38515337! openWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window contents notNil and: [ self needRebuild not ]) ifTrue: [ window contents rebuildWithSpecLayout: aSpec ] ifFalse: [ window contents: (WindowModel new model: self). window contents openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window contents! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 5/14/2013 16:29' prior: 38033253! openWorldWithSpec "Build the widget using the default spec and display it into the world" ^ self openWorldWithSpec: self defaultSpecSelector.! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 6/5/2013 22:38' prior: 39447574! openWorldWithSpec: aSpec "Build the widget using the spec name provided as argument and display it into the world" ^ self openWorldWithSpecLayout: (self retrieveSpec: aSpec)! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 6/5/2013 22:43' prior: 39447855! openWorldWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into the world" (window contents notNil and: [ self needRebuild not ]) ifTrue: [ window contents rebuildWithSpecLayout: aSpec ] ifFalse: [ window contents: (WorldModel new model: self). window contents openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 15:44' prior: 19986832! title "Return the window's title" ^ titleHolder contents! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 15:45'! title: aString titleHolder contents: aString! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19976093! treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph! ! !ComposableModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 9/29/2013 14:59'! whenBuiltDo: aBlock self announcer on: WidgetBuilt do: aBlock! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19976495! widthToDisplayInList: aList "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex x ]. self initialExtent ifNotNil: [:ex | ^ ex x ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget widthToDisplayInList: aList! ! !ComposableModel methodsFor: 'Morphic-Widgets-should-be-an-extension' stamp: 'BenjaminVanRyseghem 9/25/2013 18:20' prior: 19976876! widthToDisplayInTree: aTree "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex x ]. self initialExtent ifNotNil: [:ex | ^ ex x ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget widthToDisplayInTree: aTree! ! !DateModel commentStamp: '' prior: 69396601! A DateModel is a widget for choosing dates. It consists of: - A text box, into which you can type any string which can be converted into a Smalltalk date - A button, which displays a calendar, from which you can select a date Usage: - the simplest way is to add a DateModel in your UI, and send #date when you want its value. - or, register to be notified when the date changes: DateModel new date: self date; whenDateChanged: [ :newDate | self date: newDate ]. As it is Spec-based, it can be easily adapted and composed into a larger UI.! !DateModel class methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 1/29/2013 16:08' prior: 20455316! spec ^ SpecLayout composed newRow: [ :row | row add: #dateLabel width: 60; "This is to address a not yet fixed Spec issue" newRow: [:ugly | ugly add: #dateModel; add: #chooseDateButton width: 50 ]] height: 25 yourself.! ! !DateModel methodsFor: 'private' stamp: 'SeanDeNigris 2/6/2013 15:46' prior: 39300987! chooseDate | calendar | calendar := CalendarMorph openOn: Date today. calendar center: calendar cursorPoint; fitInWorld; onChoiceSend: #onDateChosen: to: self.! ! !DateModel methodsFor: 'accessing-widgets' stamp: 'SeanDeNigris 1/28/2013 14:17' prior: 20453504! chooseDateButton ^ chooseDateButton.! ! !DateModel methodsFor: 'accessing' stamp: 'SeanDeNigris 1/28/2013 14:28' prior: 20453377! date ^ self dateModel getText asDate.! ! !DateModel methodsFor: 'accessing' stamp: 'SeanDeNigris 6/12/2013 08:51' prior: 69023498! date: aDate ^ self dateModel text: aDate asString.! ! !DateModel methodsFor: 'accessing-widgets' stamp: 'SeanDeNigris 1/28/2013 14:17' prior: 20453629! dateLabel ^ dateLabel.! ! !DateModel methodsFor: 'accessing-widgets' stamp: 'SeanDeNigris 1/28/2013 14:17' prior: 20453740! dateModel ^ dateModel.! ! !DateModel methodsFor: 'protocol' stamp: 'SeanDeNigris 9/29/2013 14:31' prior: 69023684! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlockHolder contents! ! !DateModel methodsFor: 'protocol' stamp: 'SeanDeNigris 9/29/2013 14:31' prior: 69023990! displayBlock: aBlock "Set the one argument block used to transfrom your date into a string" displayBlockHolder contents: aBlock! ! !DateModel methodsFor: 'private' stamp: 'StephaneDucasse 5/23/2013 18:34' prior: 41529608! iconMorph ^ ImageMorph new form: Smalltalk ui icons calendarIcon.! ! !DateModel methodsFor: 'initialization' stamp: 'SeanDeNigris 9/29/2013 14:31' prior: 69024280! initialize displayBlockHolder := [ :object | object asStringOrText ] asValueHolder. displayBlockHolder whenChangedDo: [ self date: self date ]. super initialize. "do this last so default will be set after displayBlock"! ! !DateModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/29/2013 16:06' prior: 69024601! initializeWidgets | typeItems | self instantiateModels: #( dateLabel LabelModel dateModel TextInputFieldModel chooseDateButton ButtonModel). dateLabel text: 'Date'. dateModel text: Date today asString; isCodeCompletionAllowed: false. chooseDateButton label: self iconMorph; action: [ self chooseDate ]; extent: self iconMorph extent.! ! !DateModel methodsFor: 'private' stamp: 'SeanDeNigris 1/28/2013 14:20' prior: 69025037! onDateChosen: aChoseDate aChoseDate calendar delete. dateModel text: aChoseDate date asString.! ! !DateModel methodsFor: 'protocol-events' stamp: 'ClementBera 6/28/2013 10:33' prior: 43791537! whenDateChanged: aBlock dateModel whenTextChanged: [:newText :oldText :announcement :anAnnouncer || newDate oldDate | newDate := Date readFrom: newText readStream. oldDate := Date readFrom: oldText readStream. aBlock cull: newDate cull: oldDate cull: announcement cull: anAnnouncer ]! ! !DropListExample commentStamp: '' prior: 69397211! A DropListExample is a simple example of how to use drop lists. DropListExample new openWithSpec! !DropListExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:47' prior: 20973528! defaultSpec ^ { #ContainerModel. #add:. { self topSpec . #layout: . #(FrameLayout bottomFraction: 0 bottomOffset: 30) }. #add:. {{#model . #container } . #layout: . #(FrameLayout topOffset: 42). }}! ! !DropListExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 15:05' prior: 39154831! topSpec ^ SpecLayout composed newRow: [ :r | r add: #uniformDropList; add: #heterogeneousDropList ]; yourself! ! !DropListExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 15:03' prior: 20971417! container ^ container asSpecAdapter! ! !DynamicWidgetChange commentStamp: '' prior: 69397377! I am a dummy proto to see how easy it is to replace a subwidget with another one dynamically. DynamicWidgetChange new openWithSpec! !DynamicWidgetChange methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 36167042! changeToList self instantiateModels: #( bottom #ListModel ). bottom items: (1 to: 100) asOrderedCollection.! ! !InputWidget commentStamp: '' prior: 69397569! I am a generic widget far a user to enter a string Example self example (printMe)! !InputWidget class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56' prior: 35882792! defaultSpec ^ SpecLayout composed newRow: #label bottom: 0.5; newRow: #input top: 0.5; yourself! ! !InputWidget class methodsFor: 'example' stamp: 'BenjaminVanRyseghem 4/26/2013 14:17' prior: 35882995! example | widget | widget := self new. widget title: 'Name'; label: 'What''s your name?'; ghostText: 'John Doe'. World openModal: widget openDialogWithSpec window. widget value! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:51' prior: 35883272! ghostText: aString input ghostText: aString! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:57' prior: 35883403! initialExtent ^ 250@125! ! !InputWidget methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:55' prior: 48935056! initialize okAction := [ ] asValueHolder. value := '' asValueHolder. title := 'Title' asValueHolder. super initialize.! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 13:49' prior: 35883772! initializeDialogWindow: aWindow aWindow okAction: [ self ok ]! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:03' prior: 35883927! initializePresenter input whenTextIsAccepted: [:text | self ok == false ifFalse: [ value contents: text ] ]. title whenChangedDo: [ self updateTitle ]! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/26/2013 14:15' prior: 35884180! initializeWidgets self instantiateModels: #( input TextInputFieldModel label LabelModel ). input ghostText: 'input'; acceptBlock: [ self triggerOkAction ]; entryCompletion: nil; acceptOnCR: true. label text: 'label'! ! !InputWidget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56' prior: 35884506! input ^ input! ! !InputWidget methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/26/2013 13:56' prior: 35884607! label ^ label! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:51' prior: 35884707! label: aString label text: aString.! ! !InputWidget methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 5/4/2013 21:57' prior: 36835966! ok input accept. ^ okAction contents value! ! !InputWidget methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/26/2013 13:58' prior: 35884952! title ^ title contents! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 13:59' prior: 35885062! title: aString title contents: aString! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:16' prior: 35885188! triggerOkAction self window ifNotNil: [ :w | w triggerOkAction ]! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/26/2013 14:00' prior: 35885343! value ^ value contents! ! !InputWidget methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/26/2013 13:54' prior: 35885460! whenValueChanged: aBlock value whenChangedDo: aBlock! ! !ListSelectionModel commentStamp: '' prior: 69397720! A ListSelectionModel is a basic example to show multi selection on lists | l | l := ListSelectionModel new. l openWithSpec! !ListSelectionModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 15:07' prior: 24535650! bottomSpec ^ SpecLayout composed newRow: [ :row | row add: #textModel1; add: #textModel2 ]; yourself! ! !ListSelectionModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 15:10' prior: 24535968! defaultSpec ^ SpecLayout composed newColumn: [ :column | column add: #listModel; newRow: [ :row | row add: #textModel1; add: #textModel2 ] ]; yourself! ! !MessageBrowser commentStamp: '' prior: 69397907! A MessageBrowser is a UI to browse a list of method, regardless of what they could be. example: MessageBrowser new openWithSpec; messages: (SystemNavigation new allSendersOf: #at:) yourself! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 15:46' prior: 68419208! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. topologicSortHolder := true asValueHolder. super initialize. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer when: WidgetBuilt send: #buildUpdateTitle to: self! ! !MethodBrowser commentStamp: '' prior: 69398165! A MethodBrowser is a simple browser using Spec to display a list of methods and their source code | si | si := MethodBrowser new. si openWithSpec. si methods: Object methodDict values! !MethodBrowser class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 15:51' prior: 26337238! defaultSpec | delta | delta := 15. ^ SpecLayout composed add: #listModel origin: 0@0 corner: 1@0.5 offsetOrigin: 0@0 offsetCorner: 0@(delta negated); add: #toolbarModel origin: 0@0.5 corner: 1@0.5 offsetOrigin: 0@(delta negated) offsetCorner: 0@delta; add: #textModel origin: 0@0.5 corner: 1@1 offsetOrigin: 0@delta offsetCorner: 0@0; yourself! ! !MethodToolbar commentStamp: '' prior: 69398416! A MethodToolbar is xxxxxxxxx. | b | b := MethodToolbar new. b openWithSpec. b method: (ButtonModel>>#state:). b method: nil! !MethodToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/29/2013 13:46' prior: 26513641! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #(model browseModel); add: #(model sendersModel); add: #(model implementorsModel); add: #(model versionModel); add: #(model dropListModel) ]; yourself! ! !MethodToolbar class methodsFor: 'specs' stamp: '' prior: 26514048! title ^ 'Toolbar'! ! !MethodToolbar methodsFor: 'private' stamp: 'StephaneDucasse 12/19/2012 16:55' prior: 26512721! addAll: aWindow withSpec: aSpec aWindow addMorph: (self buildWithSpec: aSpec) fullFrame: ((0@0 corner: 1@0) asLayoutFrame bottomOffset: 30). ! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:02' prior: 67495996! addItemLabeled: aString do: aBlock dropListModel addItemLabeled: aString do: aBlock! ! !MethodToolbar methodsFor: 'private' stamp: '' prior: 26512914! browseMethod methodHolder contents ifNotNil: [:aMethod | aMethod browse ]! ! !MethodToolbar methodsFor: 'accessing' stamp: '' prior: 26510224! browseModel ^ browseModel! ! !MethodToolbar methodsFor: 'accessing' stamp: '' prior: 26510296! dropListModel ^ dropListModel! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/9/2013 10:09' prior: 67496168! emptyDropList dropListModel emptyList! ! !MethodToolbar methodsFor: 'private' stamp: '' prior: 26513034! implementorsMethod methodHolder contents ifNotNil: [:aMethod | self model browseMessagesFrom: aMethod selector ]! ! !MethodToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/28/2013 23:38' prior: 26510372! implementorsModel ^ implementorsModel! ! !MethodToolbar methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48013776! initialize methodHolder := nil asValueHolder. model := AbstractTool new. super initialize.! ! !MethodToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 15:42' prior: 26510947! initializeWidgets browseModel := self newButton. sendersModel := self newButton. implementorsModel := self newButton. versionModel := self newButton. dropListModel := self newDropList. self setFocusOrder; setBrowseModel; setVersionModel; setSendersModel; setImplementorsModel ! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/8/2013 13:51' prior: 26512479! method: aMethod methodHolder contents: aMethod! ! !MethodToolbar methodsFor: 'accessing' stamp: '' prior: 26510456! model ^ model! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26511315! registerForChanges methodHolder whenChangedDo: [:contents || boolean | boolean := contents ifNil: [ false ] ifNotNil: [ true ]. browseModel state: boolean. sendersModel state: boolean. versionModel state: boolean. implementorsModel state: boolean]! ! !MethodToolbar methodsFor: 'private' stamp: '' prior: 26513193! sendersMethod methodHolder contents ifNotNil: [:aMethod | self model browseSendersOfMessagesFrom: aMethod selector ]! ! !MethodToolbar methodsFor: 'accessing' stamp: '' prior: 26510516! sendersModel ^ sendersModel! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26511636! setBrowseModel browseModel state: false; label: 'Browse'; action: [ self browseMethod ]. ! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26511786! setFocusOrder self focusOrder add: browseModel; add: sendersModel; add: implementorsModel; add: versionModel. ! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26511958! setImplementorsModel implementorsModel state: false; label: 'Implementors'; action: [ self implementorsMethod ]. ! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26512132! setSendersModel sendersModel state: false; label: 'Senders'; action: [ self sendersMethod ]. ! ! !MethodToolbar methodsFor: 'initialization' stamp: '' prior: 26512286! setVersionModel versionModel state: false; label: 'Version'; action: [ self versionMethod ]. ! ! !MethodToolbar methodsFor: 'private' stamp: '' prior: 26513356! versionMethod methodHolder contents ifNotNil: [:aMethod | self model browseVersionsFrom: aMethod ]! ! !MethodToolbar methodsFor: 'accessing' stamp: '' prior: 26510590! versionModel ^ versionModel! ! !PickListModel commentStamp: '' prior: 69398603! A PickList is a tick list done using spec.! !PickListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/12/2012 18:32' prior: 29351485! defaultSpec ^ SpecLayout composed add: #listModel; yourself! ! !PickListModel class methodsFor: 'example' stamp: '' prior: 29351264! example "self example" | instance | instance := self new. instance openWithSpec. instance items: { {1. 2. 4}. 'Foo'. 123}! ! !PickListModel class methodsFor: 'specs' stamp: '' prior: 29351607! title ^ 'Pick List Example'! ! !PickListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/24/2013 14:18' prior: 29349754! addPicked: item pickedItemsHolder add: item. pickedItemsHolder contentsChanged: true to: item.! ! !PickListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/22/2013 00:08' prior: 29344831! blockToPerformOnWrappers ^ blockToPerformOnWrappers contents! ! !PickListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/22/2013 00:08' prior: 29344983! blockToPerformOnWrappers: aBlock blockToPerformOnWrappers contents: aBlock! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29346431! checkboxFor: anItem ^ associationsItemToWrapper at: anItem ifAbsent: [ nil ]! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29346553! defaultValue ^ defaultValueHolder contents! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29346641! defaultValue: aBoolean defaultValueHolder contents: aBoolean! ! !PickListModel methodsFor: 'protocol' stamp: 'bvr 6/2/2012 12:44' prior: 29346775! displayBlock: aBlock wrapHolder contents: aBlock! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/22/2013 00:25' prior: 29346914! indexFor: aCheckbox ^ listModel listItems indexOf: aCheckbox.! ! !PickListModel methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48013975! initialize wrapHolder := [ :i | i printString ] asValueHolder. pickedItemsHolder := OrderedCollection new asValueHolder. associationsWrapperToItem := Dictionary new asValueHolder. associationsItemToWrapper := Dictionary new asValueHolder. associationsIndexToWrapper := Dictionary new asValueHolder. labelClickableHolder := true asValueHolder. defaultValueHolder := false asValueHolder. blockToPerformOnWrappers := [:wrapper | ] asValueHolder. super initialize.! ! !PickListModel methodsFor: 'initialization' stamp: 'CamilloBruni 10/8/2012 22:23' prior: 29345890! initializePresenter labelClickableHolder whenChangedDo: [:aBoolean | associationsWrapperToItem keys do: [:e | e labelClickable: aBoolean ]]. defaultValueHolder whenChangedDo: [:value | associationsWrapperToItem keysDo: [:cb | cb state: value ]].! ! !PickListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 29346231! initializeWidgets self instantiateModels: #( listModel #ListModel ). listModel displayBlock: [ :item | item ]. self focusOrder add: listModel! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347021! itemFor: aCheckbox ^ associationsWrapperToItem at: aCheckbox ifAbsent: [ nil ]! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2013 14:18' prior: 29347190! items: aCollection associationsWrapperToItem removeAll. pickedItemsHolder removeAll. listModel items: (aCollection collectWithIndex: [:e :i | self wrap: e at: i ]).! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347402! labelClickable ^ labelClickableHolder contents! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347495! labelClickable: aBoolean labelClickableHolder contents: aBoolean! ! !PickListModel methodsFor: 'accessing' stamp: '' prior: 29345104! listModel ^ listModel! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/6/2013 19:05' prior: 29347649! pickedItems "Returns the selected items according to the order they have been picked" ^ pickedItemsHolder contents! ! !PickListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/24/2013 14:18' prior: 29349939! removePicked: item pickedItemsHolder remove: item ifAbsent: [ ^ self ].! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347811! resetSelection listModel resetSelection! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347896! selectedIndex ^ listModel selectedIndex! ! !PickListModel methodsFor: 'protocol' stamp: '' prior: 29347981! selectedItem ^ associationsWrapperToItem at: listModel selectedItem ifAbsent: [ nil ]! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/6/2013 19:06' prior: 29348161! selectedItems "Returns the selected items according to the list order" | wrappers items | wrappers := listModel listItems. items := wrappers collect: [:e || value | value := associationsWrapperToItem at: e ifAbsent: [ nil ]. (value isNil or: [ e state not ]) ifTrue: [ nil ] ifFalse: [ value ]] thenSelect: [ :e | e notNil ]. ^ items! ! !PickListModel methodsFor: 'protocol' stamp: 'CamilloBruni 10/8/2012 21:56' prior: 29348593! setSelectedIndex: anIndex listModel setSelectedIndex: anIndex! ! !PickListModel methodsFor: 'protocol-events' stamp: 'bvr 5/31/2012 13:34' prior: 29348869! whenListChanged: aBlock listModel whenListChanged: aBlock! ! !PickListModel methodsFor: 'protocol-events' stamp: 'bvr 5/31/2012 13:34' prior: 29349008! whenPickedItemsChanged: aBlock pickedItemsHolder whenChangedDo: aBlock! ! !PickListModel methodsFor: 'protocol-events' stamp: 'bvr 5/31/2012 13:34' prior: 29349160! whenSelectedItemChanged: aBlock | newBlock | newBlock := [ :item | aBlock cull: (associationsWrapperToItem at: item ifAbsent: [ nil ])]. listModel whenSelectedItemChanged: newBlock! ! !PickListModel methodsFor: 'protocol-events' stamp: 'StephaneDucasse 5/17/2012 19:32' prior: 29349437! whenSelectionChanged: aBlock listModel whenSelectionChanged: aBlock! ! !PickListModel methodsFor: 'protocol-events' stamp: 'bvr 5/31/2012 13:34' prior: 29349586! whenSelectionIndexChanged: aBlock listModel whenSelectionIndexChanged: aBlock! ! !PickListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 2/22/2013 00:19' prior: 29350100! wrap: item at: index | checkBox | associationsIndexToWrapper at: index ifPresent: [:cb | ^ cb ]. checkBox := self instantiate: CheckBoxModel. blockToPerformOnWrappers contents value: checkBox. checkBox label: (wrapHolder contents cull: item cull: self). checkBox whenActivatedDo: [ self addPicked: item. listModel setSelectedItem: checkBox. listModel takeKeyboardFocus ]. checkBox whenDesactivatedDo: [ self removePicked: item. listModel setSelectedItem: checkBox. listModel takeKeyboardFocus ]. checkBox state: self defaultValue; labelClickable: self labelClickable. associationsWrapperToItem at: checkBox put: item. associationsItemToWrapper at: item put: checkBox. associationsIndexToWrapper at: index put: checkBox. ^ checkBox! ! !PickListModel methodsFor: 'accessing' stamp: '' prior: 29345172! wrapHolder ^ wrapHolder! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/21/2013 23:45' prior: 29348745! wrappers ^ associationsWrapperToItem keys! ! !RadioButtonGroupExample commentStamp: '' prior: 69398718! A RadioButtonGroupExample is an simple example about how to use RadioButtons and RadioGroup! !RadioButtonGroupExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 15:11' prior: 45535409! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #button1; add: #button2; add: #button3 ] height: self toolbarHeight; add: #container; yourself! ! !RadioButtonGroupExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 15:11' prior: 32097310! container ^ container asSpecAdapter! ! !ScrollSyncExample commentStamp: '' prior: 69398876! I am an example that exposes to the world how to use a ScrollPane announcement to have a nice morph being in sync with the current vertical scrollbar position. Invoke me with: ScrollSyncExample new openWithSpec! !ScrollSyncExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 13:47' prior: 45573833! initialize super initialize. sideRuler := (Morph new color: Color yellow; extent: 50@500; useGradientFill; hResizing: #spaceFill; vResizing: #spaceFill; yourself) asSpecAdapter. currentVerticalScrollPosition := 0.! ! !ScrollSyncExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 13:36' prior: 68862378! initializeWidgets text := self newText. text whenBuiltDo: [ :builtAnnouncement | text whenScrollValueChanged: [ :newPosition | self syncMorphPosition ] ]. text text: self loremIpsum.! ! !ScrollSyncExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 13:30' prior: 45540578! syncMorphPosition currentVerticalScrollPosition = text scrollValue y ifTrue: [ ^ self ]. currentVerticalScrollPosition := text scrollValue y. self needRebuild: false. text needRebuild: false. self buildWithSpecLayout: self defaultSpecLayout.! ! !SearchableList commentStamp: '' prior: 69399152! SearchableList new items: #( aaa abc axz bbb bfbg bof c); openWithSpec should it be a subclass of LIstModel? Because now I will have to delegate a lot? and I cannot plug a IconList How do I make textModel react to every keystroke without an accept! !SearchableList class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 32878217! defaultSpec ^ {#ContainerModel . #add: . {{#model . #searchModel.}. #layout: . #(FrameLayout bottomFraction: 0 bottomOffset: 25) } . #add: . {{#model . #listModel.}. #layout: . #(FrameLayout topOffset: 25) }}! ! !SearchableList methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 6/12/2012 18:06' prior: 32877440! initializePresenter searchModel whenTextChanged: [:newText || text | text := searchModel getText asLowercase. text isEmpty ifTrue: [ listModel resetFilteringBlock ] ifFalse: [ listModel filteringBlock: [:col | col select: [:e | e asLowercase beginsWith: searchModel getText asLowercase ]]]]! ! !SearchableList methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 32877839! initializeWidgets self instantiateModels: #( listModel #ListModel searchModel TextInputFieldModel ). searchModel autoAccept: true; ghostText: 'filter'.! ! !SearchableList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 18:46' prior: 32877208! listModel ^ listModel! ! !SearchableList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/12/2012 18:46' prior: 32877321! searchModel ^ searchModel! ! !SearchableTree commentStamp: '' prior: 69399469! I am a tree plus an input field to be able to filter the tree elements! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/19/2013 15:24' prior: 49812648! defaultSpec ^ SpecLayout composed newRow: [:r | r "add: #label width: 50;" add: #inputField; add: #button width: 25 ] height: 25; newRow: #tree top: 25; yourself! ! !SearchableTree class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 6/19/2013 15:26' prior: 49812956! searchAtBottom ^ SpecLayout composed newColumn: [:c | c add: #tree; newRow: [:r | r "add: #label width: 50;" add: #inputField; add: #button width: 25 ] height: 25 ]; yourself! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 14:21' prior: 38969344! autoAccept: aBoolean inputField autoAccept: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37' prior: 35374557! autoMultiSelection: aBoolean tree autoMultiSelection: aBoolean! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 14:31' prior: 37054831! button ^ button! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35374724! childrenBlock ^ tree childrenBlock! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35374864! childrenBlock: aBlock tree childrenBlock: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37' prior: 35375004! columnInset: anInteger tree columnInset: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/22/2013 21:16' prior: 35625322! columns ^ tree columns! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37' prior: 35375145! columns: aCollection tree columns: aCollection! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35375297! displayBlock ^ tree displayBlock! ! !SearchableTree methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35375434! displayBlock: aBlock tree displayBlock: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37' prior: 35375572! doubleClick: aBlock tree doubleClick: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:37' prior: 35375707! evenRowColor: aColor tree evenRowColor: aColor! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 16:34' prior: 38969487! iconBlock: aBlock tree iconBlock: aBlock! ! !SearchableTree methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 22:57' prior: 48928136! initialize super initialize. roots := OrderedCollection new asValueHolder! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 4/20/2013 03:59' prior: 35376059! initializePresenter inputField whenTextChanged: [ :text | self updateRootFor: text ]. tree whenTreeUpdated: [ inputField text: '' ].! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/2/2013 12:50' prior: 49813297! initializeWidgets self instantiateModels: #( tree TreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | FilteringTreeNode with: item model: tree ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'Search'; entryCompletion: nil; acceptOnCR: true. self focusOrder add: tree; add: inputField! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 14:43' prior: 35376724! inputField ^ inputField! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35376837! isCheckList: aBoolean tree isCheckList: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35376976! keyStrokeAction: aBlock tree keyStrokeAction: aBlock! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/20/2013 12:24' prior: 35377120! label ^ label! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377223! menu ^ tree menu! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377331! menu: aBlock tree menu: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377453! multiSelection: aBoolean tree multiSelection: aBoolean! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377598! preferedPaneColor: aColor tree preferedPaneColor: aColor! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/21/2013 15:34' prior: 38969619! resetSelection tree resetSelection! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377745! resizerWidth: anInteger tree resizerWidth: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35377888! rootNodeHolder ^ tree rootNodeHolder! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35378015! rootNodeHolder: aBlock tree rootNodeHolder: aBlock! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:38' prior: 35378156! roots ^ tree roots! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 17:38' prior: 35378266! roots: aCollection roots contents: aCollection. tree roots: aCollection! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35378430! rowInset: anInteger tree rowInset: anInteger! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/18/2013 16:17' prior: 40130999! secondSelection: anItem tree secondSelection: anItem! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35378565! selectedItem ^ tree selectedItem! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35378689! selectedItem: anItem tree selectedItem: anItem! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35378827! selectedItems ^ tree selectedItems! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35378953! selectedItems: aCollection tree selectedItems: aCollection! ! !SearchableTree methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 14:43' prior: 35379104! tree ^ tree! ! !SearchableTree methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 4/20/2013 02:43' prior: 35379205! updateRootFor: aText | aFilter | aFilter := TokenTreeFilter token: aText. tree selection: nil. tree updateTree. tree rootNodes do: [:r | r updateAccordingTo: aFilter]. tree rootNodes removeAllSuchThat: [:n | (aFilter keepTreeNode: n) not and: [n isEmpty]]. tree expandAll. tree changed: #rootNodes.! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/18/2013 14:39' prior: 35379606! updateTree tree updateTree! ! !SearchableTree methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35379745! whenChildrenBlockChanged: aBlock tree whenChildrenBlockChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35379928! whenDisplayBlockChanged: aBlock tree whenDisplayBlockChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35380095! whenMenuChanged: aBlock tree whenMenuChanged: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 17:41' prior: 35380246! whenRootsChanged: aBlock roots whenChangedDo: aBlock! ! !SearchableTree methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 4/18/2013 14:40' prior: 35380396! whenSelectedItemsChanged: aBlock tree whenSelectedItemsChanged: aBlock! ! !TabsExample commentStamp: '' prior: 69399593! I am an example of how to use tabs! !TabsExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 14:12'! defaultSpec ^ SpecLayout composed add: #manager; yourself! ! !TabsExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 14:32'! browserTab | tab | tab := self newTab. tab label: 'Browser'; icon: Smalltalk ui icons nautilusIcon; model: (ClassMethodBrowser new classes: Smalltalk allClasses; yourself). ^ tab! ! !TabsExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 14:46'! initializeWidgets manager := self newTabManager. manager whenTabSelected: [ self updateTitle ]. self populateManager! ! !TabsExample methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:13'! manager ^ manager! ! !TabsExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 14:08'! objectClassTab | tab | tab := self newTab. tab label: 'Object class'; icon: Smalltalk ui icons nautilusIcon; model: (MessageBrowser browseMessages: (Object methods) refreshingBlock: [] named: ''). ^ tab! ! !TabsExample methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 14:17'! objectInspectorTab | tab | tab := self newTab. tab label: 'Object inspector'; icon: Smalltalk ui icons nautilusIcon; retrievingBlock: [ (EyeInspector new inspect: Object; buildWithSpec: #inspectorSpec) asWidget ]. ^ tab! ! !TabsExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 14:33'! populateManager manager addTab: self objectClassTab; addTab: self objectInspectorTab; addTab: self browserTab! ! !TabsExample methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 10/1/2013 14:48'! title ^ self manager selectedTab ifNil: [ 'Tabs Example' ] ifNotNil: [:tab | tab label ]! ! !TextFieldExample commentStamp: '' prior: 69399693! A TextFieldExample is a simple example of how to use TextFields.! !TextFieldExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 14:57' prior: 37038567! initializePresenter textField acceptBlock: [:text | Smalltalk globals at: text asSymbol ifPresent: [:class | methodBrowser messages: class methods ] ifAbsent: [ methodBrowser messages: #() ]]! ! !TextFieldExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/1/2013 14:58' prior: 68864043! initializeWidgets methodBrowser := self instantiate: MessageBrowser. textField := self newTextInput. textField ghostText: 'Enter a class name'; autoAccept: true; removeEntryCompletion. methodBrowser sortingBlock: [:a :b | a selector < b selector ]; displayBlock: [:m | { m selector } ]! ! !UserEditor class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 54590689! internSpec | imageHeight | imageHeight := 140. ^{#ContainerModel. #add:. { {#model. #avatar}. #layout:.{#FrameLayout. #leftFraction:. 0.5 . #rightFraction:. 0.5 . #bottomFraction:. 0 . #leftOffset:. (-60) . #rightOffset:. 60 . #bottomOffset:. imageHeight .}}. #add:. { {#model. #userName }. #layout:.{#FrameLayout. #bottomFraction:. 0 . #topOffset:. imageHeight . #rightOffset:. (-100) . #bottomOffset:. (imageHeight+25) .}}. #add:. { {#model. #setPassword }. #layout:. {#FrameLayout. #leftFraction:. 1 . #bottomFraction:. 0 . #leftOffset:. (-100) . #topOffset:. imageHeight . #bottomOffset:. (imageHeight+25) .}}. #add:. { {#model. #gravatarAddress }. #layout:. {#FrameLayout. #bottomFraction:. 0 . #topOffset:. (25+imageHeight) . #rightOffset:. (-100) . #bottomOffset:. (imageHeight+50) .}}. #add:. { {#model. #testGravatar }. #layout:. {#FrameLayout. #leftFraction:. 1 . #bottomFraction:. 0 . #leftOffset:. (-100) . #topOffset:. (imageHeight+25) . #bottomOffset:. (imageHeight+50) .}}. #add:. { {#model. #editPublic }. #layout:. {#FrameLayout. #rightFraction:. 0.33 . #bottomFraction:. 0 . #topOffset:. (50+imageHeight) . #bottomOffset:. (imageHeight+75) .}}. #add:. { {#model. #editPrivate }. #layout:. {#FrameLayout. #leftFraction:. 0.33 . #rightFraction:. 0.66 . #bottomFraction:. 0 . #topOffset:. (imageHeight+50) . #bottomOffset:. (imageHeight+75) .}}. #add:. { {#model. #editPermissions }. #layout:. {#FrameLayout. #leftFraction:. 0.66 . #bottomFraction:. 0 . #topOffset:. (imageHeight+50) . #bottomOffset:. (imageHeight+75) .}}}! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/28/2013 23:46' prior: 54587030! registerUserNameChanges userName whenTextChanged: [ :text | self window ifNotNil: [:w | w okButtonEnabled: (self isValidUsername: text)] . self setTitle: text ]! ! !SpecTreeModel commentStamp: '' prior: 69399820! I am tree model used by the Spec infrastructure to provide a "pluggable" api since we do not have multiple inheritance in Pharo! !SpecTreeModel class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/17/2013 18:49' prior: 35358061! model: model ^ self new model: model; yourself! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07' prior: 45043397! acceptDroppingMorph: draggedMorph event: event inMorph: source ^ self model acceptDroppingMorph: draggedMorph event: event inMorph: source! ! !SpecTreeModel methodsFor: 'overrided' stamp: 'BenjaminVanRyseghem 4/20/2013 16:04' prior: 35570551! doubleClick self model doubleClick! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07' prior: 45043640! dragPassengerFor: item inMorph: dragSource ^ self model dragPassengerFor: item inMorph: dragSource! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07' prior: 45043845! dragPassengersFor: item inMorph: dragSource ^ self model dragPassengersFor: item inMorph: dragSource! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/7/2013 14:20' prior: 37052485! menu: menu shifted: b ^ self model menu: menu shifted: b! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 18:48' prior: 35358202! model ^ model! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 18:48' prior: 35358305! model: anObject model := anObject! ! !SpecTreeModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01' prior: 35570690! resetRootNodes rootNodes := nil! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 20:48' prior: 35358428! rootItems ^ self model roots! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 19:32' prior: 35358547! rootNodeFromItem: item ^ self model rootNodeFromItem: item! ! !SpecTreeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 18:01' prior: 35570828! rootNodes ^ rootNodes ifNil: [ rootNodes := super rootNodes ]! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07' prior: 45044051! transferFor: passenger from: source ^ self model transferFor: passenger from: source! ! !SpecTreeModel methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 7/16/2013 11:07' prior: 45044241! wantsDroppedMorph: draggedMorph event: anEvent inMorph: source ^ self model wantsDroppedMorph: draggedMorph event: anEvent inMorph: source! ! !CodeCriticBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 19411335! initializeWidgets self instantiateModels: #( listModel1 #ListModel listModel2 #ListModel listModel3 #ListModel textModel TextModel ). listModel1 displayBlock: [:rule | rule name ]. listModel2 displayBlock: [:rule | rule name ]. listModel3 displayBlock: [:rule | rule name ].! ! !DefaultSpecTreeNode commentStamp: '' prior: 69400016! I am a TreeNode used to render TreeModel node using the old API for convenience! !DefaultSpecTreeNode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/17/2013 19:34' prior: 35385507! childrenItems ^ self model model childrenFor: self item! ! !DefaultSpecTreeNode methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:11' prior: 35385659! matchTokenFilter: aFilter ^ false! ! !FilteringTreeNode commentStamp: '' prior: 69400162! I am tree node supporting filtering! !FilteringTreeNode methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 5/7/2013 14:41' prior: 37051566! contents ^ contents ifNil: [ contents := self childrenItems collect: [:ci | self childNodeFromItem: ci ] ]! ! !FilteringTreeNode methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:34' prior: 35385887! isEmpty ^ self contents isEmpty! ! !FilteringTreeNode methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/20/2013 02:47' prior: 35386012! matchTokenFilter: aFilter aFilter token ifEmpty: [ ^ true ]. ^ self asString asLowercase includesSubstring: aFilter token asLowercase! ! !FilteringTreeNode methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/2/2013 14:13' prior: 43487074! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self contents do: [ :n | n updateAccordingTo: aFilter ]. self contents removeAllSuchThat: [ :n | (aFilter keepTreeNode: n) not and: [ n isEmpty] ] ]! ! !TabExample methodsFor: 'tabs creation' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 39800712! freshListTab ^ (Tab label: 'Fresh List' icon: nil retrievingBlock: [ 1 second asDelay wait. ListModel new items: (1 to: 50) asOrderedCollection; buildWithSpec ] actions: { (TabAction action: [ self halt ] icon: Smalltalk ui icons smallConfigurationIcon label: 'Halt!!') }) menu: [ :menu | menu add: 'Fubu' target: self selector: #halt ]; yourself! ! !TabExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 48876908! initialize super initialize. manager := TabManager new. manager when: #tabManagerDeleted send: #delete to: self. listModel := ListModel new. listModel items: ((1 to: 1000) asOrderedCollection)! ! !SpecWindow commentStamp: '' prior: 69400257! I am a window used by WindowSpec. I have been introduced since it's currently the best solution to prevent to add dozen of respondsTo: in StandardWindow or add dirty extensions to Object (because all models are not subclasses of Model)! !SpecWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/14/2013 17:27' prior: 38030656! aboutText ^ self model aboutText! ! !SpecWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 5/19/2013 13:21' prior: 38731919! close self model askOkToClose ifTrue: [ self okToChange ifFalse: [ ^ self ] ]. super close! ! !SpecWindow methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 5/19/2013 13:21' prior: 38732102! okToChange ^ self model okToChange! ! !Array methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 9/29/2013 12:39' prior: 17600397! generateSpec | str spec | str := self readStream. spec := OrderedCollection with: #FrameLayout. #( leftFraction: topFraction: rightFraction: bottomFraction: leftOffset: topOffset: rightOffset: bottomOffset: ) do: [:sel | spec add: sel. str next ifNil: [ spec add: 0 ] ifNotNil: [:value | spec add: value ]]. ^ spec asArray! ! !TestingComposableModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 52478809! initializeWidgets self instantiateModels: #(list #ListModel)! ! !KeyChainViewer class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 24208877! internSpec ^{#ContainerModel. #add:. {{#model. #list }. #layout:. #(FrameLayout bottomOffset: -50)}. #add:. {{#model. #add }. #layout:. #(FrameLayout topFraction: 1 rightFraction: 0 topOffset: -50 rightOffset: 50 bottomOffset: -25) }. #add:. {{#model. #edit }. #layout:. #(FrameLayout topFraction: 1 leftOffset: 50 topOffset: -50 rightOffset: -50 bottomOffset: -25) }. #add:. {{#model. #remove }. #layout:. #(FrameLayout leftFraction: 1 topFraction: 1 leftOffset: -50 topOffset: -50 bottomOffset: -25) }. #add:. {{#model. #ok }. #layout: . #(FrameLayout topFraction: 1 topOffset: -25) }}! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 17:10' prior: 24206517! addPassword | wrapper editor | keychain contents ifNotNil:[:kc | kc unlock ]. wrapper := KeychainEditingWrapper new keychain: keychain contents; group: ''; usernamePassword: UsernamePassword new. editor := KeychainEditor new keychainEditingWrapper: wrapper; yourself. self window ifNotNil: [: w | w openModal: (editor openDialogWithSpec window okAction: [ wrapper := KeychainEditingWrapper new keychain: keychain contents; group: ''; usernamePassword: UsernamePassword new ]; yourself)].! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 17:11' prior: 24207272! editPassword list selectedItem ifNil: [ ^ self ] ifNotNil: [:it || wrapper editor | keychain contents ifNotNil:[:kc | kc unlock ]. wrapper := KeychainEditingWrapper new keychain: keychain contents; group: it key; usernamePassword: it value. editor := KeychainEditor new keychainEditingWrapper: wrapper; yourself. self window ifNotNil: [: w | w openModal: (editor openDialogWithSpec window okAction: [ it key: wrapper group. it value: wrapper usernamePassword. keychain contentsChanged. list setSelectedItem: it]; yourself) ]. ]! ! !Morph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/1/2013 13:47'! asSpecAdapter ^ MorphicGenericAdapter morph: self! ! !Tab commentStamp: '' prior: 69400546! I represent a simple tab I have a IconicListItem which wrap my label and my icon. I also have a morph to display when selected. This morph can in fact be anything responding to #asMorph. Moreover it could be a block for lazy initialization. I also have a state representing if I am selecting or not, enabled or not, etc! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:29'! model ^ model! ! !Tab methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:29'! model: aModel model := aModel! ! !Tab methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 6/8/2013 16:04' prior: 40130859! setActionsFrom: aBlock self actions: aBlock value! ! !PluggableTextMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/1/2013 13:20'! registerScrollChanges: aSelector self announcer weak on: PaneScrolling send: aSelector to: self model! ! !MorphTreeMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 4/21/2013 00:14' prior: 35570985! initializeColumsFrom: aModel self columns: aModel columns! ! !PanelMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 7/31/2012 18:08' prior: 29048743! checkSplitters | size | size := submorphs size. (self submorphsSatisfying: [:e | e isKindOf: ProportionalSplitterMorph ]) do: [:e || index idx | index := submorphs identityIndexOf: e. idx := index + 1. "above" [ idx <= size and: [ ((submorphs at: idx) isKindOf: ProportionalSplitterMorph) not ]] whileTrue: [ e addLeftOrTop: (submorphs at: idx). idx := idx +1 ]. idx := index - 1. "below" [ idx > 0 and: [ ((submorphs at: idx) isKindOf: ProportionalSplitterMorph) not ]] whileTrue: [ e addRightOrBottom: (submorphs at: idx). idx := idx -1 ]]! ! !PanelMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 7/31/2012 15:47' prior: 29049411! newHSplitter ^ ProportionalSplitterMorph new beSplitsTopAndBottom; setProperty: #model toValue: self.! ! !PanelMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'IgorStasenko 12/19/2012 18:00' prior: 29049604! newHSplitterAt: anIndex | above frame splitter index size | size := submorphs size. index := size - anIndex + 2. above := self submorphs at: index. frame := above layoutFrame. splitter := self newHSplitter. splitter layoutFrame: ((frame leftFraction @ frame bottomFraction corner: frame rightFraction @ frame bottomFraction) asLayoutFrame bottomOffset: 4). self privateAddMorph: splitter atIndex: (size - anIndex + 2)! ! !PanelMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 7/31/2012 15:47' prior: 29050136! newVSplitter ^ ProportionalSplitterMorph new setProperty: #model toValue: self.! ! !PanelMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'IgorStasenko 12/19/2012 18:01' prior: 29050304! newVSplitterAt: anIndex | left frame splitter index size | size := submorphs size. index := size - anIndex + 2. left := self submorphs at: index. frame := left layoutFrame. splitter := self newVSplitter. splitter layoutFrame: ((frame rightFraction @ frame topFraction corner: frame rightFraction @ frame bottomFraction) asLayoutFrame rightOffset: 4). self privateAddMorph: splitter atIndex: (size - anIndex + 2)! ! !PanelMorphWithSplitters commentStamp: '' prior: 69400939! A PanelMorphWithSplitters is which add splitters the way SystemWindow do it! !PanelMorphWithSplitters methodsFor: 'submorphs-add/remove' stamp: 'BenjaminVanRyseghem 3/23/2012 17:00' prior: 29053951! addMorph: aMorph paneMorphs add: aMorph. ^ super addMorph: aMorph! ! !PanelMorphWithSplitters methodsFor: 'submorphs-add/remove' stamp: '' prior: 29054085! addMorph: aMorph fullFrame: aLayout paneMorphs add: aMorph. super addMorph: aMorph fullFrame: aLayout! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: 'IgorStasenko 12/19/2012 18:13' prior: 29054282! addPaneHSplitterBetween: topMorphs and: bottomMorphs "Add a horizontal splitter for the given morphs that share a common bottom fraction. If there is a horizontal discontinuity apply the splitter to the first contiguous group. Answer the morphs to which the splitter was applied." |targetY fixed rightFraction leftFrame rightFrame sorted morph topGroup bottomGroup splitter offset| topMorphs ifEmpty: [^self]. targetY := topMorphs first layoutFrame bottomFraction. fixed := topMorphs select: [:m | m layoutFrame topFraction = m layoutFrame bottomFraction]. "fixed morphs appear in both top and bottom" sorted := ((topMorphs reject: [:m | m layoutFrame topFraction = m layoutFrame bottomFraction]) asSortedCollection: [:a :b | a layoutFrame rightFraction = b layoutFrame rightFraction ifTrue: [a layoutFrame leftFraction <= b layoutFrame leftFraction] ifFalse: [a layoutFrame rightFraction <= b layoutFrame rightFraction]]) readStream. sorted contents ifEmpty: [^fixed]. topGroup := OrderedCollection new. rightFraction := sorted contents first layoutFrame leftFraction. [sorted atEnd or: [morph := sorted next. (morph layoutFrame leftFraction ~= rightFraction and: [ morph layoutFrame rightFraction ~= rightFraction])]] whileFalse: [ topGroup add: morph. rightFraction := morph layoutFrame rightFraction]. leftFrame := topGroup first layoutFrame. rightFrame := topGroup last layoutFrame. bottomGroup := (bottomMorphs reject: [:m | m layoutFrame topFraction = m layoutFrame bottomFraction]) select: [:m | (m layoutFrame leftFraction between: leftFrame leftFraction and: rightFrame rightFraction) or: [ m layoutFrame rightFraction between: leftFrame leftFraction and: rightFrame rightFraction]]. offset := (topGroup collect: [:m | m layoutFrame bottomOffset]) max. splitter := ProportionalSplitterMorph new beSplitsTopAndBottom. splitter layoutFrame: ( (leftFrame leftFraction @ targetY corner: rightFrame rightFraction @ targetY) asLayoutFrame leftOffset: leftFrame leftOffset; rightOffset: rightFrame rightOffset; topOffset: offset; bottomOffset: 4+offset ). topGroup := topGroup, fixed. topGroup do: [:m | splitter addLeftOrTop: m]. bottomGroup do: [:m | splitter addRightOrBottom: m]. self addMorphBack: splitter. ^topGroup! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: '' prior: 29056662! addPaneHSplitters "Add the horizontal pane splitters." |remaining targetBottom sameBottom sameTop| remaining := paneMorphs reject: [:each | each layoutFrame bottomFraction = 1 or: [ each layoutFrame bottomFraction = 0]]. [remaining notEmpty] whileTrue: [ targetBottom := remaining first layoutFrame bottomFraction. sameBottom := remaining select: [:each | each layoutFrame bottomFraction = targetBottom]. sameTop := paneMorphs select: [:each | each layoutFrame topFraction = targetBottom]. remaining := remaining copyWithoutAll: (self addPaneHSplitterBetween: sameBottom and: sameTop)]! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: 'BenjaminVanRyseghem 3/23/2012 17:01' prior: 29057374! addPaneSplitters "Add the vertical and horizontal pane splitters." self removePaneSplitters. self addPaneVSplitters. self addPaneHSplitters. self linkSplittersToSplitters! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: 'IgorStasenko 12/19/2012 18:13' prior: 29057642! addPaneVSplitterBetween: leftMorphs and: rightMorphs "Add a vertical splitter for the given morphs that share a common right fraction. If there is a vertical discontinuity apply the splitter to the first contiguous group. Answer the morphs to which the splitter was applied." |targetX fixed bottomFraction topFrame bottomFrame sorted morph leftGroup rightGroup splitter offset| leftMorphs ifEmpty: [^self]. targetX := leftMorphs first layoutFrame rightFraction. fixed := leftMorphs select: [:m | m layoutFrame leftFraction = m layoutFrame rightFraction]. "fixed morphs appear in both top and bottom" sorted := ((leftMorphs reject: [:m | m layoutFrame leftFraction = m layoutFrame rightFraction]) asSortedCollection: [:a :b | a layoutFrame bottomFraction = b layoutFrame bottomFraction ifTrue: [a layoutFrame topFraction <= b layoutFrame topFraction] ifFalse: [a layoutFrame bottomFraction <= b layoutFrame bottomFraction]]) readStream. sorted contents ifEmpty: [^fixed]. leftGroup := OrderedCollection new. bottomFraction := sorted contents first layoutFrame topFraction. [sorted atEnd or: [morph := sorted next. morph layoutFrame topFraction ~= bottomFraction and: [ morph layoutFrame bottomFraction ~= bottomFraction]]] whileFalse: [ leftGroup add: morph. bottomFraction := morph layoutFrame bottomFraction]. topFrame := leftGroup first layoutFrame. bottomFrame := leftGroup last layoutFrame. rightGroup := (rightMorphs reject: [:m | m layoutFrame leftFraction = m layoutFrame rightFraction]) select: [:m | m layoutFrame topFraction between: topFrame topFraction and: bottomFrame bottomFraction]. offset := (leftGroup collect: [:m | m layoutFrame rightOffset]) max. splitter := ProportionalSplitterMorph new. splitter layoutFrame: ((targetX @ topFrame topFraction corner: targetX @ bottomFrame bottomFraction) asLayoutFrame leftOffset: offset; topOffset: topFrame topOffset; rightOffset: 4+offset; bottomOffset: bottomFrame bottomOffset). leftGroup := leftGroup, fixed. leftGroup do: [:m | splitter addLeftOrTop: m]. rightGroup do: [:m | splitter addRightOrBottom: m]. self addMorphBack: splitter. ^leftGroup! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: '' prior: 29059899! addPaneVSplitters "Add the vertical pane splitters." |remaining targetRight sameRight sameLeft | remaining := paneMorphs reject: [:each | each layoutFrame rightFraction = 1 or: [ each layoutFrame rightFraction = 0]]. [remaining notEmpty] whileTrue: [ targetRight := remaining first layoutFrame rightFraction. sameRight := remaining select: [:each | each layoutFrame rightFraction = targetRight]. sameLeft := paneMorphs select: [:each | each layoutFrame leftFraction = targetRight and: [ each layoutFrame rightFraction ~= targetRight]]. remaining := remaining copyWithoutAll: (self addPaneVSplitterBetween: sameRight and: sameLeft)]! ! !PanelMorphWithSplitters methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:06' prior: 48007674! initialize super initialize. paneMorphs := OrderedCollection new.! ! !PanelMorphWithSplitters methodsFor: 'layout-properties' stamp: '' prior: 29053776! layoutFrame: aFrame self activate. super layoutFrame: aFrame! ! !PanelMorphWithSplitters methodsFor: 'private' stamp: '' prior: 29060616! linkSplittersToSplitters "The pane morphs are already linked. Cross link the splitters as appropriate." self splitters do: [:each | each splitsTopAndBottom ifTrue: [self splitters do: [:eachMorph | eachMorph splitsTopAndBottom ~= each splitsTopAndBottom ifTrue: [ eachMorph layoutFrame bottomFraction = each layoutFrame topFraction ifTrue: [each addLeftOrTop: eachMorph]. eachMorph layoutFrame topFraction = each layoutFrame bottomFraction ifTrue: [each addRightOrBottom: eachMorph]]]] ifFalse: [self splitters do: [:eachMorph | eachMorph splitsTopAndBottom ~= each splitsTopAndBottom ifTrue: [ eachMorph layoutFrame rightFraction = each layoutFrame leftFraction ifTrue: [each addLeftOrTop: eachMorph]. eachMorph layoutFrame leftFraction = each layoutFrame rightFraction ifTrue: [each addRightOrBottom: eachMorph]]]]. each comeToFront.]! ! !TabContainerMorph commentStamp: '' prior: 69401081! A TabContainerMorph is a morph (which should be pluggable soon) which handle a first bar for tabs button and a container which is used to display the morph corresponding to the selected tab! !TabManager commentStamp: '' prior: 69401330! I am the entry point for tabs. I am composed of a TabBar and a Morph used as a canvas to render the morph represented by the selected tab. I am very stupid (as you can see only four methods). I just listen to selected tab, and render it! !TabManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:29'! model ^ model! ! !TabManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 14:29'! model: aModel model := aModel! ! !TabManager methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 6/9/2013 00:46' prior: 40127764! setTabs: aBlock self tabs: aBlock value! ! !TestReviver methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 52387963! initializeWidgets | serializedErrors | self instantiateModels: #( errorListModel #ListModel debugButton ButtonModel browseButton ButtonModel vmVersionLabel LabelModel vmVersion TextModel timeStampLabel LabelModel timeStamp TextModel imageVersionLabel LabelModel imageVersion TextModel). serializedErrors := self selectTestFailures. errorListModel items: serializedErrors; displayBlock: [ :e | e base copyReplaceAll: '-' with: '>>#' ]. serializedErrors isEmpty ifFalse: [ errorListModel setSelectedIndex: 1 ]. vmVersionLabel text: 'VM Version'. vmVersion text: ''; enabled: false. timeStampLabel text: 'Timestamp'. timeStamp text: ''; enabled: false. imageVersionLabel text: 'Image Version'. imageVersion text: ''; enabled: false. debugButton label: 'Debug'; action: [ self materialize: errorListModel selectedItem ]. browseButton label: 'Browse'; action: [ self browse: errorListModel selectedItem ]. self focusOrder add: debugButton; add: browseButton; add: errorListModel.! ! !WidgetBuilt commentStamp: '' prior: 69401629! I am raised when a widget has been built! !SelectPackageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 34160195! initialize | wrappingBlock | super initialize. toSelectModel := self instantiate: ListModel. selectedModel := self instantiate: ListModel. selectedModel beMultipleSelection. toSelectModel beMultipleSelection. testPackage := OrderedCollection new. wrappingBlock := [ :package | package packageName ]. toSelectModel displayBlock: wrappingBlock. selectedModel displayBlock: wrappingBlock.! ! !EyeInspector methodsFor: 'event-handling' stamp: 'BenjaminVanRyseghem 10/1/2013 13:37' prior: 68253675! keepScrollPositionOf: specHolder during: aBlock | scrollValue | specHolder widget ifNil: [ ^ aBlock value ]. scrollValue := description scrollValue. aBlock value. description scrollValue: scrollValue.! ! !AbstractAdapter commentStamp: '' prior: 69401727! I am an abstrat class. Iam the superclass of all the adapters used to link a Spec widget model to a framework specific widget (by example ButtonModel <-> PluggableButtonMorph)! !AbstractAdapter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 9/25/2013 14:17'! adapt: aComposableModel ^ self new adapt: aComposableModel; yourself! ! !AbstractAdapter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 9/25/2013 14:46'! adapt: aComposableModel model := aComposableModel. aComposableModel addDependent: self. widget := self buildWidget.! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:41'! add: aWidget self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:42'! asWidget ^ self widget! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:33'! bindKeyCombination: aShortcut toAction: aBlock self widget ifNotNil: [ :w | w bindKeyCombination: aShortcut toAction: aBlock ]! ! !AbstractAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/29/2013 15:16'! buildWidget ^ SpecInterpreter interpretASpec: self class defaultSpec model: self! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! hRigid self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! hShrinkWrap self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! hSpaceFill self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:32'! isRedrawable "This must be overriden in the adapter representing your container" ^ false! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:41'! layout: aLayout self subclassResponsibility! ! !AbstractAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/25/2013 13:48'! model ^ model! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! removeSubWidgets self subclassResponsibility! ! !AbstractAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:16'! selector ^ selector! ! !AbstractAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:16'! selector: anObject selector := anObject! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:40'! takeKeyboardFocus self widget ifNotNil: [:w | w takeKeyboardFocus ]! ! !AbstractAdapter methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 9/25/2013 14:44'! update: aSymbol self changed: aSymbol! ! !AbstractAdapter methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 9/25/2013 16:18'! update: aSymbol with: anArray self perform: aSymbol withArguments: anArray! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! useProportionalLayout self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! vRigid self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! vShrinkWrap self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:42'! vSpaceFill self subclassResponsibility! ! !AbstractAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:14'! when: anAnnouncement do: aBlock self subclassResponsibility! ! !AbstractAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/25/2013 13:57'! widget ^ widget! ! !AbstractAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/29/2013 12:44'! widgetDo: aBlock self widget ifNotNil: aBlock! ! !AbstractMorphicAdapter commentStamp: '' prior: 69401968! I am an abstract class providing all the properties shared amongs all the morphic specific adapters! !AbstractMorphicAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/25/2013 14:10'! defaultSpec ^ SpecLayout composed! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:24'! acceptDropBlock ^ self model acceptDropBlock! ! !AbstractMorphicAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:09'! acceptDroppingMorph: draggedMorph event: event inMorph: source ^ self acceptDropBlock cull: draggedMorph cull: event cull: source! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:42'! add: aWidget self widgetDo: [ :w | w ensureLayoutAndAddMorph: aWidget asWidget ]! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:19'! beginsWith: aString fromList: aMorph "This method is used bu the list for the search of elements when you are typing directly in the list" ^ false! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:24'! borderColor ^ self model borderColor! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:21'! borderColor: color self widget ifNotNil: [ :w | w borderColor: color ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:24'! borderWidth ^ self model borderWidth! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:21'! borderWidth: width self widget ifNotNil: [ :w | w borderWidth: width ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:10'! color ^ self widget ifNil: [ Color white ] ifNotNil: [:w | w color ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:27'! disable self model enabled: false! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:27'! dragEnabled ^ self model dragEnabled! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 16:22'! dragEnabled: aBoolean self widget ifNotNil: [ :w | w dragEnabled: aBoolean ]! ! !AbstractMorphicAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:09'! dragPassengerFor: item inMorph: dragSource ^ self dragTransformationBlock cull: item cull: dragSource! ! !AbstractMorphicAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:09'! dragPassengersFor: item inMorph: dragSource ^ { self dragTransformationBlock cull: item cull: dragSource }! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:28'! dragTransformationBlock ^ self model dragTransformationBlock! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:28'! dropEnabled ^ self model dropEnabled! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 16:22'! dropEnabled: aBoolean self widget ifNotNil: [ :w | w dropEnabled: aBoolean ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:28'! enable self model enabled: true! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:28'! enabled ^ self model enabled! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:21'! enabled: aBoolean self widget ifNotNil: [ :w | w enabled: aBoolean ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:44'! hRigid self widgetDo: [ :w | w hResizing: #rigid ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:45'! hShrinkWrap self widgetDo: [ :w | w hResizing: #shrinkWrap ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:45'! hSpaceFill self widgetDo: [ :w | w hResizing: #spaceFill ]! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:21'! heightToDisplayInList: aList "Return the width of my representation as a list item" self model extent ifNotNil: [:ex | ^ ex y ]. self model initialExtent ifNotNil: [:ex | ^ ex y ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget heightToDisplayInList: aList! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:19'! heightToDisplayInTree: aTree "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex y ]. self initialExtent ifNotNil: [:ex | ^ ex y ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget heightToDisplayInTree: aTree! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:29'! help ^ self model help! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 15:20'! layout: aLayout | layout | layout := aLayout asMorphicLayout. self widgetDo: [ :w | w layoutFrame: layout ]! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:19'! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:45'! removeSubWidgets self widgetDo: [ :w | w removeAllMorphs ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:21'! setBalloonText: aString self widget ifNotNil: [ :w | w setBalloonText: aString ]! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:29'! transferBlock ^ self model transferBlock! ! !AbstractMorphicAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/25/2013 15:29'! transferFor: passenger from: source ^ self transferBlock cull:passenger cull: source! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:19'! treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:46'! useProportionalLayout self widgetDo: [ :w | w changeProportionalLayout ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:46'! vRigid self widgetDo: [ :w | w vResizing: #rigid ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:46'! vShrinkWrap self widgetDo: [ :w | w vResizing: #shrinkWrap ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 12:47'! vSpaceFill self widgetDo: [ :w | w vResizing: #spaceFill ]! ! !AbstractMorphicAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 9/25/2013 15:29'! wantDropBlock ^ self model wantDropBlock! ! !AbstractMorphicAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:09'! wantsDroppedMorph: draggedMorph event: anEvent inMorph: source ^ self wantDropBlock cull: draggedMorph cull: anEvent cull:source! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:14'! when: anAnnouncement do: aBlock self widgetDo: [ :w | w announcer when: anAnnouncement do: aBlock ]! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:21'! widthToDisplayInList: aList "Return the width of my representation as a list item" self model extent ifNotNil: [:ex | ^ ex x ]. self model initialExtent ifNotNil: [:ex | ^ ex x ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget widthToDisplayInList: aList! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 9/25/2013 18:19'! widthToDisplayInTree: aTree "Return the width of my representation as a list item" self extent ifNotNil: [:ex | ^ ex x ]. self initialExtent ifNotNil: [:ex | ^ ex x ]. self widget ifNil: [ self buildWithSpec ]. ^ self widget widthToDisplayInTree: aTree! ! !MorphicButtonAdapter commentStamp: '' prior: 69402130! SpecInterpreter interpretASpec: MorphicButtonAdapter defaultSpec model: (MorphicButtonAdapter model: ButtonModel2 new) ! !MorphicButtonAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:25'! defaultSpec ^ {#PluggableButtonMorph. #color:. Color white. #on:getState:action:label:menu:. #model. #state. #action. #label. #nil. #getEnabledSelector:. #enabled. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #askBeforeChanging:. #(model askBeforeChanging). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !MorphicButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 14:04'! action self widget ifNotNil: [:m | m takeKeyboardFocus ]. self model performAction.! ! !MorphicButtonAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 14:12'! askBeforeChanging ^ self model askBeforeChanging! ! !MorphicButtonAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/25/2013 14:09'! buildLabel: text withIcon: icon icon ifNil: [ ^ text ]. ^ IconicListItem text: text icon: icon ! ! !MorphicButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 13:58'! keyStroke: anEvent fromMorph: aMorph! ! !MorphicButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 13:59'! label ^ self buildLabel: self model label withIcon: self model icon! ! !MorphicButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 13:59'! state ^ self model state! ! !MorphicCheckBoxAdapter commentStamp: '' prior: 69402317! I am an adapter to ease the bridge a CheckBoxModel and a CheckboxMorph! !MorphicCheckBoxAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:20'! defaultSpec ^ {#CheckboxMorph. #color:. Color transparent. #on:selected:changeSelected:. #model. #state. #state:. #label:. { #model. #label }. #beCheckbox. #hResizing:. #shrinkWrap. #vResizing:. #shrinkWrap. #setBalloonText:. { #model . #help}. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #labelClickable:. { #model. #labelClickable}.}! ! !MorphicCheckBoxAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 17:30'! label ^ self model label! ! !MorphicCheckBoxAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 17:30'! labelClickable ^ self model labelClickable! ! !MorphicCheckBoxAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 17:31'! state ^ self model state! ! !MorphicCheckBoxAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 17:31'! state: aBoolean ^ self model state: aBoolean! ! !MorphicContainerAdapter commentStamp: '' prior: 69402453! I am the adapter providing the correct container class: PanelMorph! !MorphicContainerAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/29/2013 13:41'! defaultSpec ^ #(PanelMorph changeProportionalLayout vResizing: spaceFill hResizing: spaceFill )! ! !MorphicContainerAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:50'! checkSplitters self widgetDo: [ :w | w checkSplitters ]! ! !MorphicContainerAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:32'! isRedrawable "This must be overriden in the adapter representing your container" ^ true! ! !MorphicContainerAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:50'! newHSplitterAt: aPosition self widgetDo: [ :w | w newHSplitterAt: aPosition ]! ! !MorphicContainerAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 13:50'! newVSplitterAt: aPosition self widgetDo: [ :w | w newVSplitterAt: aPosition ]! ! !MorphicDropListAdapter commentStamp: '' prior: 69402584! I am the adapter used to bridget a DropListModel and a DropListMorph! !MorphicDropListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:21'! defaultSpec ^ {#DropListMorph. #color:. Color white. #on:list:selected:changeSelected:. #model. #getList. #getIndex. #setIndex:. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:03'! getIndex ^ self model getIndex! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:03'! getList ^ self model getList! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:03'! setIndex: anIndex ^ self model setIndex: anIndex! ! !MorphicGenericAdapter commentStamp: '' prior: 69402716! I am a generic adapter used to embed directly a Morph in spec. Be aware that when you use this, you broke Spec plateform independency and force you application to run only on top of Morphic! !MorphicGenericAdapter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/1/2013 13:10'! morph: morph ^ self new morph: morph; yourself! ! !MorphicGenericAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 13:43'! morph ^ self widget! ! !MorphicGenericAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 13:43'! morph: anObject widget := anObject! ! !MorphicLabelAdapter commentStamp: '' prior: 69402968! I am the adapter used to bridget a LabelModel and a LabelMorph! !MorphicLabelAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:21'! defaultSpec ^ {#LabelMorph. #color:. Color black. #model:. #model. #getEnabledSelector:. #enabled. #getTextSelector:. #getText. #vResizing:. #shrinkWrap. #hResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !MorphicLabelAdapter methodsFor: 'model access' stamp: 'BenjaminVanRyseghem 9/25/2013 17:24'! getText ^ self model label! ! !MorphicListAdapter commentStamp: '' prior: 69403091! I am the adapter used to bridge a ListModel and a PluggableListMorph! !MorphicIconListAdapter commentStamp: '' prior: 69403224! I am the adapter used to bridge an IconListModel and a PluggableIconListMorph! !MorphicIconListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:22'! defaultSpec ^ {#PluggableIconListMorph. #color:. Color white. #model:. #model. #getListSizeSelector:. #listSize. #getListElementSelector:. #listElementAt:. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getIconSelector:. #getIconFor:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #setMultipleSelection:. {#model. #multiSelection}. #wrapSelector:. #wrapItem:index:. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}. #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !MorphicIconListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:33'! getIconFor: anItem ^ self model getIconFor: anItem! ! !MorphicListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:22'! defaultSpec ^ {#PluggableListMorph. #color:. Color white. #model:. #model. #getListSizeSelector:. #listSize. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getListElementSelector:. #listElementAt:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #setMultipleSelection:. {#model. #multiSelection}. #wrapSelector:. #wrapItem:index:. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:10'! acceptDroppingMorph: draggedMorph event: event inMorph: source | item index | index := source rowAtLocation: event position. item := self model getList at: index ifAbsent: [ nil ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item. index }! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:07'! getIndex ^ self model getIndex! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! getSelectionStateFor: anIndex ^ self model getSelectionStateFor: anIndex! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! listElementAt: anIndex ^ self model listElementAt: anIndex! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! listElementAt: anIndex ifAbsent: aBlock ^ self model listElementAt: anIndex ifAbsent: aBlock! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:14'! listSize ^ self model listSize! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! menu: aMenu shifted: aBoolean ^ self model menu: aMenu shifted: aBoolean! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:14'! multiSelection ^ self model multiSelection! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! resetListSelection ^ self model resetListSelection! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! setIndex: anIndex ^ self model setIndex: anIndex! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! setSelectionStateFor: anIndex at: aBoolean ^ self model setSelectionStateFor: anIndex at: aBoolean! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:08'! wrapItem: anObject index: index ^ self model wrapItem: anObject index: index! ! !MorphicMultiColumnListAdapter commentStamp: '' prior: 69403373! I am the adapter used to bridge a MultiColumnListModel and a PluggableMultiColumnListMorph! !MorphicMultiColumnListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:23'! defaultSpec ^ {#PluggableMultiColumnListMorph. #color:. Color white. #wrapSelector:. #wrapItem:index:. #model:. #model. #getListSizeSelector:. #listSize. #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #getListElementSelector:. #listElementAt:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setMultipleSelection:. {#model. #multiSelection}. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !MorphicNewListAdapter commentStamp: '' prior: 69403527! I am the adapter used to bridge a NewListModel and a NewList! !MorphicNewListAdapter class methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 9/25/2013 18:49'! defaultSpec ^ { #NewList. #model:. #model. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #deSelectOnReclick:. #(model deSelectOnReclick). #isMultipleSelection:. #(model isMultipleSelection). #unselectOnChange:. #(model unselectOnChange). #whenSelectedIndexChangedDo:. #(model indexHasBeenSelected). #whenSelectedIndexesChangedDo:. #(model indexesHasBeenSelected). #whenSelectedItemChangedDo:. #(model itemHasBeenSelected). #whenSelectedItemsChangedDo:. #(model itemsHasBeenSelected). #whenHeaderIsClickedDo:. #(model headerClickedBlock). #endOfInitialization. #setIndex:. #(model selectedIndex). #hasHeader:. #(model hasHeader).}! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:45'! acceptDroppingMorph: aMorph atIndex: index event: event inMorph: source ^ self model acceptDroppingMorph: aMorph atIndex: index event: event inMorph: source! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:45'! allowToSelect ^ self model allowToSelect! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:45'! deSelectOnReclick ^ self model deSelectOnReclick! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:54'! deSelectOnReclick: aBoolean self model deSelectOnReclick: aBoolean! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! doubleClick: event ^ self model doubleClick: event! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! draggedItemAtIndex: anIndex ^ self model draggedItemAtIndex: anIndex! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getDisplayForItem: item at: index ^ self model getDisplayForItem: item at: index! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getHeaderHeight ^ self model getHeaderHeight! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getHeaderTitle ^ self model getHeaderTitle! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getItems ^ self model getItems! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getListSize ^ self model getListSize! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getMenu: shiftKeyState ^ self model getMenu: shiftKeyState! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:46'! getRawItemAt: index ^ self model getRawItemAt: index! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! handlesDoubleClick ^ self model handlesDoubleClick! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! hasHeader ^ self model hasHeader! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:50'! headerClicked ^ self model headerClicked! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:49'! headerClickedBlock ^ [ self headerClicked ]! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! iconForItem: anItem at: anIndex ^ self model iconForItem: anItem at: anIndex! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! iconMaxSize ^ self model iconMaxSize! ! !MorphicNewListAdapter methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! indexHasBeenSelected ^ [:index | self model selectedIndex: index ]! ! !MorphicNewListAdapter methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! indexesHasBeenSelected ^ [ :indexes | self model selectedIndexes: indexes ]! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! isMultipleSelection ^ self model isMultipleSelection! ! !MorphicNewListAdapter methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 18:53'! itemHasBeenSelected ^ [ :item | self model selectedItem: item ]! ! !MorphicNewListAdapter methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 9/25/2013 18:52'! itemsHasBeenSelected ^ [ :selection | self model selectedItems: selection ]! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! keyStrokeAction: anEvent ^ self model keyStrokeAction: anEvent! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:58'! selectedIndex ^ self model selectedIndex! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! separatorAfter: item at: index ^ self model separatorAfter: item at: index! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 18:47'! unselectOnChange ^ self model unselectOnChange! ! !MorphicRadioButtonAdapter commentStamp: '' prior: 69403655! I am the adapter used to link a RadioButtonModel with a CheckboxMorph (which can also act as a radio button)! !MorphicRadioButtonAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/28/2013 20:17'! defaultSpec ^ {#CheckboxMorph. #on:selected:changeSelected:. #model. #state. #state:. #label:. { #model. #label }. #labelClickable:. { #model. #labelClickable}. #beRadioButton. #hResizing:. #shrinkWrap. #vResizing:. #shrinkWrap. #setBalloonText:. #(model help). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor)}! ! !MorphicRadioButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:15'! label ^ self model label! ! !MorphicRadioButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:16'! labelClickable ^ self model labelClickable! ! !MorphicRadioButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:16'! state ^ self model state! ! !MorphicRadioButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:17'! state: aBoolean ^ self model state: aBoolean! ! !MorphicSliderAdapter commentStamp: '' prior: 69403826! I am the adapter used to bridget a SliderModel and a PluggableSliderMorph! !MorphicSliderAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/28/2013 20:21'! defaultSpec ^ SpecLayout slider send: #model: withArguments: #( model ); send: #getValueSelector: withArguments: #(value); send: #setValueSelector: withArguments: #( value: ); send: #value: withArguments: #(#(model absoluteValue)); send: #getLabelSelector: withArguments: #( label ); send: #max: withArguments: #(#(model max)); send: #min: withArguments: #(#(model min)); send: #quantum: withArguments: #(#(model quantum)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: #(#(model help)); send: #vSpaceFill; send: #hSpaceFill; yourself! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:18'! absoluteValue ^ self model absoluteValue! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:20'! absoluteValue: aFloat ^ self model absoluteValue: aFloat! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:19'! label ^ self model label! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:19'! max ^ self model max! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:19'! min ^ self model min! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:19'! quantum ^ self model quantum! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:19'! value ^ self model value! ! !MorphicSliderAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 20:22'! value: aValue ^ self model value: aValue! ! !MorphicTabAdapter commentStamp: '' prior: 69403959! I am the adapter used to bridge a TabModel and a Tab! !MorphicTabAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 14:30'! defaultSpec ^ SpecLayout new type: #Tab; send: #model: withArguments: #(#(model)); send: #label: withArguments: #(#(model label)); send: #icon: withArguments: #(#(model icon)); send: #retrievingBlock: withArguments: #(#(model retrievingBlock)); send: #morph: withArguments: #(#(model contents)); send: #menu: withArguments: #(#(model menu)); send: #closeable: withArguments: #(#(model closeable)); send: #setActionsFrom: withArguments: #(#(model actionsBlock)); send: #when:send:to: withArguments: #(tabSelected tabSelected model); yourself! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:05'! actionsBlock ^ [ self model actions ]! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 14:14'! closeable ^ self model closeable! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:07'! contents ^ self model contents! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:06'! icon ^ self model icon! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:06'! label ^ self model label! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:06'! menu ^ self model menu! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:07'! retrievingBlock ^ self model retrievingBlock! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 14:14'! selected: aTrue self shouldBeImplemented.! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:11'! tabSelected ^ self model tabSelected! ! !MorphicTabManagerAdapter commentStamp: '' prior: 69404078! I am the adpater used to bridge a TabManagerModel and a TabManager! !MorphicTabManagerAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 14:45'! defaultSpec ^ SpecLayout new type: #TabManager; send: #model: withArguments: #(#(model)); send: #setTabs: withArguments: #(#(model getTabs)); send: #when:send:to: withArguments: #(tabSelected selectedTab: model); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTabManagerAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 14:23'! addTab: aTab self widgetDo: [ :w | w addTab: aTab buildWidget widget ]! ! !MorphicTabManagerAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 14:25'! getTabs ^ [ self model tabs collect: [ :each | each buildWithSpec asWidget ] ]! ! !MorphicTabManagerAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 14:45'! selectedTab: aTab self model selectedTab: aTab! ! !MorphicTextAdapter commentStamp: '' prior: 69404205! I am the adapter used to bridge a TextModel and a PluggableTextMorph! !MorphicTextAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 14:31'! defaultSpec ^ SpecLayout new type: #PluggableTextMorph; send: #color: withArguments: #(#(model color)); send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #on:text:accept:readSelection:menu: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted:); send: #enabled: withArguments: {#(model enabled)}; send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #registerScrollChanges: withArguments: #(scrollValueChanged:); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:16'! accept: aText notifying: aNotifyier self model accept: aText notifying: aNotifyier! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:23'! behavior ^ self model behavior! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 21:30'! classOrMetaClass: aClass self widget classOrMetaClass: aClass! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:21'! clearUserEditFlag self model text: self getText. self changed: #clearUserEdits! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:17'! codePaneMenu: aMenu shifted: shifted ^ self model codePaneMenu: aMenu shifted: shifted ! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:17'! doItContext ^ self model doItContext! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:17'! doItReceiver ^ self model doItReceiver! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:17'! getText ^ self model text! ! !MorphicTextAdapter methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 9/28/2013 22:00'! guessTypeForName: aString ^nil! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:01'! hasUnacceptedEdits: aBoolean self widget hasUnacceptedEdits: aBoolean! ! !MorphicTextAdapter methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 9/28/2013 22:03'! isAboutToStyle ^ self model isAboutToStyle! ! !MorphicTextAdapter methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 9/28/2013 22:02'! isCodeCompletionAllowed ^ self model isCodeCompletionAllowed! ! !MorphicTextAdapter methodsFor: 'private-shout' stamp: 'BenjaminVanRyseghem 9/28/2013 22:00'! okToStyle ^ true! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:18'! readSelection ^ self model readSelection! ! !MorphicTextAdapter methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 9/28/2013 22:00'! receiverClass ^ self behavior! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 13:27'! scrollValueChanged: aValue self model scrollValue: aValue step! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:18'! selectedBehavior ^ self model selectedBehavior! ! !MorphicTextAdapter methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 9/28/2013 22:00'! selectedClassOrMetaClass ^ self behavior! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 13:29'! setScrollValue: aValue self widgetDo: [ :w | w scrollValue: aValue ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:24'! setSelection: aSelection self model setSelection: aSelection! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:36'! setSelectionFromModel: aSelection self widget ifNotNil: [:w | w setSelection: aSelection ]! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:19'! shoutAboutToStyle: aMorph ^ self model isAboutToStyle! ! !MorphicTextInputFieldAdapter commentStamp: '' prior: 69404344! I am the adapter used to bridge a TextInputFieldModel and a PluggableTextFieldMorph! !MorphicTextInputFieldAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/1/2013 14:50'! defaultSpec ^ {#PluggableTextFieldMorph. #convertTo:. String. #on:text:accept:readSelection:menu:. #model. #getText. #accept:. nil. nil. #entryCompletion:. { #model. #entryCompletion }. #autoAccept:. { #model. #autoAccept }. #ghostText:. { #model. #ghostText }. #enabled:. { #model. #enabled }. #encrypted:. { #model. #encrypted }. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #acceptOnCR:. { #model. #acceptOnCR }. #hideScrollBarsIndefinitely.}! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:05'! accept: aText self model accept: aText! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:07'! acceptOnCR ^ self model acceptOnCR! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:06'! autoAccept ^ self model autoAccept! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:07'! encrypted ^ self model encrypted! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:06'! entryCompletion ^ self model entryCompletion! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:06'! ghostText ^ self model ghostText! ! !MorphicTextInputFieldAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:07'! ghostText: aText ^ self model ghostText: aText! ! !MorphicTextInputFieldAdapter methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 9/28/2013 22:07'! isCodeCompletionAllowed ^ false! ! !MorphicTreeAdapter commentStamp: '' prior: 69404488! I am the adapter used to bridge a TreeModel and a MorphTreeMorph! !MorphicTreeAdapter class methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 9/29/2013 14:04'! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !MorphicTreeAdapter methodsFor: 'drag and drop - private' stamp: 'BenjaminVanRyseghem 9/28/2013 23:22'! acceptDroppingMorph: draggedMorph event: event inMorph: source | item | item := self widget ifNil: [ 0 ] ifNotNil: [:w | w scrollerSubMorphFromPoint: event position ]. ^ self acceptDropBlock valueWithEnoughArguments: { draggedMorph. event. source. item }! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! autoDeselection ^ self model autoDeselection! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! autoMultiSelection ^ self model autoMultiSelection! ! !MorphicTreeAdapter methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 9/28/2013 22:54'! changed: aSymbol treeModel changed: aSymbol! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 23:26'! childrenFor: aNode ^ self model childrenFor: aNode! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! columnInset ^ self model columnInset! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! columns ^ self model columns! ! !MorphicTreeAdapter methodsFor: 'reflective operations' stamp: 'BenjaminVanRyseghem 9/28/2013 23:04'! doesNotUnderstand: aMessage (self treeModel respondsTo: aMessage selector) ifFalse: [ ^ super doesNotUnderstand: aMessage ]. ^ self treeModel perform: aMessage selector withArguments: aMessage arguments! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! doubleClick ^ self model doubleClick! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! evenRowColor ^ self model evenRowColor! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:05'! expandAll self treeModel changed: #(rootNodes expandAll)! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:05'! expandRoots self treeModel changed: #(rootNodes expandRoots)! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:42'! iconBlock ^ [:each | self iconFor: each ]! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! iconFor: aNode ^ self model iconFor: aNode! ! !MorphicTreeAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/28/2013 23:24'! initialize super initialize. treeModel := SpecTreeModel model: self. treeModel announcer on: MorphTreeSelectionChanged send: #onMorphTreeSelectionChanged: to: self. rootNodeHolder := [:item | DefaultSpecTreeNode with: item model: treeModel ] asValueHolder. rootNodeHolder whenChangedDo: [ self updateTree ]. ! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! isCheckList ^ self model isCheckList! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! keyStroke: aKeyStroke ^ self model keyStroke: aKeyStroke! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! menu: aMenu shifted: aBoolean ^ self model menu: aMenu shifted: aBoolean! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! multiSelection ^ self model multiSelection! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! oddRowColor ^ self model oddRowColor! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! oddRowColor: aColor ^ self model oddRowColor: aColor! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:24'! onMorphTreeSelectionChanged: selection self model selectionChanged: selection! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! preferedPaneColor ^ self model preferedPaneColor! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! resizerWidth ^ self model resizerWidth! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 23:08'! rootNodeFromItem: item ^ rootNodeHolder contents cull:item! ! !MorphicTreeAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/28/2013 23:08'! rootNodeHolder ^ rootNodeHolder contents! ! !MorphicTreeAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/28/2013 23:08'! rootNodeHolder: aBlock rootNodeHolder contents: aBlock! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 23:16'! roots ^ self model roots! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 22:40'! rowInset ^ self model rowInset! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:59'! setRoots: aCollection treeModel rootItems: aCollection! ! !MorphicTreeAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/28/2013 22:52'! treeModel ^ treeModel! ! !MorphicTreeAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:03'! updateTree self treeModel resetRootNodes. self treeModel changed: #rootNodes.! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 23:25'! wrapItem: anItem ^ self model wrapItem: anItem! ! !MorphicWindowAdapter commentStamp: '' prior: 69404615! I am the adapter used to bridge a WindowModel and a SystemWindow! !MorphicDialogWindowAdapter commentStamp: '' prior: 69404748! I am the adapter used to bridge a DialogWindowModel and a DialogWindow! !MorphicDialogWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/28/2013 23:49'! defaultSpec ^ #( DialogWindowSpec specWidget: #(model contentMorph) initialize model: model )! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:49'! cancelAction: aBlock ^ self widget ifNotNil: [:w | w cancelAction: aBlock ]! ! !MorphicDialogWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 23:50'! contentMorph ^ self model contents! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:48'! okAction: aBlock ^ self widget ifNotNil: [:w | w okAction: aBlock ]! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:45'! okButtonEnabled: aBoolean self widget ifNotNil: [ :w | w toolbar okButton enabled: aBoolean ]! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:47'! triggerOkAction self widget ifNotNil: [:w | w toolbar triggerOkAction ]! ! !MorphicWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:23'! defaultSpec ^ #( SpecWindow model: model )! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 16:41'! aboutText ^ self model model ifNotNil: [ :m | m aboutText ]! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 15:47'! addModelIn: widgetToBuild withSpec: aSpec widgetToBuild addMorph: (self model model buildWithSpec: aSpec) frame: (0@0 corner: 1@1)! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:23'! addModelIn: widgetToBuild withSpecLayout: aSpec widgetToBuild addMorph: (self model model buildWithSpecLayout: aSpec) frame: (0@0 corner: 1@1)! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 16:24'! askOkToClose ^ self model askOkToClose! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 16:43'! cancelled ^ false! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:04'! close self widget ifNotNil: [ :w | w close ].! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/25/2013 16:25'! initialExtent ^ self model initialExtent! ! !MorphicWindowAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/25/2013 15:41'! initialize super initialize. isClosedHolder := false asValueHolder.! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:04'! isDisplayed ^ self widget isDisplayed! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:00'! open self model window openInWorld! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:06'! openModal: aWindow ^ self widget ifNotNil: [:w | w openModal: aWindow ].! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:02'! rebuildWithSpec: aSpec | sub | sub := self model window submorphs copy. self model window removeAllMorphs. sub allButLast do: [:e | self model window addMorphBack: e ]. self model addModelIn: self widget withSpec: aSpec! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:02'! rebuildWithSpecLayout: aSpec | sub | sub := self model window submorphs copy. self model window removeAllMorphs. sub allButLast do: [:e | self model window addMorphBack: e ]. self model addModelIn: self widget withSpecLayout: aSpec. self widget model: self! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/1/2013 15:16'! title 1halt. ^ self model title! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/25/2013 16:03'! title: aString ^ self widget ifNotNil: [:w | w title: aString ]! ! !MorphicWindowAdapter methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 9/29/2013 12:30'! windowIsClosing self model windowIsClosing! ! !AbstractTreeFilter commentStamp: '' prior: 69404886! I am an abstract class for tree filters. My children should propose a filter for tree nodes! !AbstractTreeFilter methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:12' prior: 35373023! keepTreeNode: aNode ^ false! ! !TokenTreeFilter commentStamp: '' prior: 69405042! I am a filter for a token. If a node item contains my token I accept it! !TokenTreeFilter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00' prior: 35373294! token: token ^ self new token: token; yourself! ! !TokenTreeFilter methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:08' prior: 48019918! initialize super initialize. token := ''.! ! !TokenTreeFilter methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 4/18/2013 17:33' prior: 35373621! keepTreeNode: aNode ^ aNode matchTokenFilter: self! ! !TokenTreeFilter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00' prior: 35373764! token ^ token! ! !TokenTreeFilter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/18/2013 17:00' prior: 35373869! token: anObject token := anObject! ! !DynamicSpecExample commentStamp: '' prior: 69405182! I am an example of how to fully dynamically create a UI, and also how to dynamically redrawn a widget. ========================== (DynamicSpecExample object: nil) open. (DynamicSpecExample object: 4) open. (DynamicSpecExample object: 'Hello World') open.! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 15:47' prior: 36152580! openOnInteger | ui layout | ui := DynamicComposableModel new. ui title: self title. ui instantiateModels: #( text LabelModel plus ButtonModel minus ButtonModel ). ui text text: object contents asString. ui minus label: '-'; state: false; action: [ object contents: object contents -1. ui text text: object contents asString ]. ui plus label: '+'; state: false; action: [ object contents: object contents +1. ui text text: object contents asString ]. layout := SpecLayout composed newColumn: [ :c | c add: #text height: 25; newRow: [ :r | r add: #minus ; addSplitter; add: #plus ] height: 25 ]; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 15:48' prior: 36153357! openOnNil | ui layout | ui := DynamicComposableModel new. ui title: self title. ui instantiateModels: #( text TextInputFieldModel ). ui text text: 'Object is nil'; enabled: false. layout := SpecLayout composed newRow: #text height: 25; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 15:49' prior: 36153731! openOnString | ui layout bottomLayout temp | ui := DynamicComposableModel new. ui title: self title. ui instantiateModels: #( label LabelModel check CheckBoxModel text TextInputFieldModel button ButtonModel ). ui label text: object contents. object whenChangedDo: [ :o | ui label text: o asString ]. ui text text: object contents; enabled: true; acceptBlock: [ :string | self object: string ]. temp := object contents. ui button label: 'reset'; state: false; action: [ ui text text: temp. self object: temp ]. layout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25; newRow: [ :r | r add: #text; add: #button ] height: 25 ]; yourself. bottomLayout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #text; add: #button ] height: 25; newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25 ]; yourself. ui check label: 'Label on top'; state: true; whenActivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: layout ]; whenDesactivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: bottomLayout ]. ui openWithSpecLayout: layout.! ! !FrameLayout commentStamp: '' prior: 69405492! I am a wrapper for the layout of widget. Each framework can then adapt me as it wants in its adapters! !FrameLayout methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 9/29/2013 15:22'! asMorphicLayout ^ LayoutFrame identity topFraction: self topFraction; topOffset: self topOffset; bottomFraction: self bottomFraction; bottomOffset: self bottomOffset; rightFraction: self rightFraction; rightOffset: self rightOffset; leftFraction: self leftFraction; leftOffset: self leftOffset; yourself! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:13'! bottomFraction ^ bottomFraction! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:13'! bottomFraction: anObject bottomFraction := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! bottomOffset ^ bottomOffset! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! bottomOffset: anObject bottomOffset := anObject! ! !FrameLayout methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/29/2013 15:21'! initialize super initialize. bottomFraction := 1. bottomOffset := 0. leftFraction := 0. leftOffset := 0. rightFraction := 1. rightOffset := 0. topFraction := 0. topOffset := 0.! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftFraction ^ leftFraction! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftFraction: anObject leftFraction := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftOffset ^ leftOffset! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftOffset: anObject leftOffset := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightFraction ^ rightFraction! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightFraction: anObject rightFraction := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightOffset ^ rightOffset! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightOffset: anObject rightOffset := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topFraction ^ topFraction! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topFraction: anObject topFraction := anObject! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topOffset ^ topOffset! ! !FrameLayout methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topOffset: anObject topOffset := anObject! ! !MorphWrapper commentStamp: '' prior: 69405656! A MorphWrapper is used to wrap a morph with a layout in the goal to be easily added to another morph! !MorphWrapper class methodsFor: 'instance creation' stamp: 'ClementBera 6/28/2013 10:33' prior: 43791938! morph: morph layout: aLayout ^ self new layout: aLayout; morph: morph; yourself! ! !MorphWrapper methodsFor: 'adding' stamp: '' prior: 27073514! addIn: aContainer aContainer addMorph: morph fullFrame: layout! ! !MorphWrapper methodsFor: 'accessing' stamp: 'StephaneDucasse 12/21/2012 11:26' prior: 27073254! frame: rectangle layout := rectangle asLayoutFrame! ! !MorphWrapper methodsFor: 'accessing' stamp: '' prior: 27073351! fullFrame: anObject layout := anObject! ! !MorphWrapper methodsFor: 'accessing' stamp: '' prior: 27073436! morph: anObject morph := anObject! ! !Object methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 10/1/2013 13:46'! asWidget ^ self! ! !RadioButtonGroup commentStamp: '' prior: 69405822! A RadioButtonGroup is a group for radio buttons which ensure that only radio button of this group is activated at the same time.! !RadioButtonGroup methodsFor: 'protocol' stamp: '' prior: 32096144! addRadioButton: aButton buttons do: [:b | aButton whenActivatedDo: [ b privateSetState: false ]. b whenActivatedDo: [ aButton privateSetState: false ]]. buttons add: aButton. aButton privateSetState: false! ! !RadioButtonGroup methodsFor: 'protocol' stamp: '' prior: 32096408! default: aButton aButton privateSetState: true. aButton takeKeyboardFocus.! ! !RadioButtonGroup methodsFor: 'initialization' stamp: 'CamilloBruni 7/17/2013 23:07' prior: 48018545! initialize super initialize. buttons := OrderedCollection new.! ! !SpecAdapterBindings commentStamp: '' prior: 69406012! I am an abstract class I am used to link a spec-oriented adapter name to a framework specific adapter class name! !MorphicAdapterBindings commentStamp: '' prior: 69406190! I am used to link the spec-adapter names to the morphic adapters! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/1/2013 12:22'! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/1/2013 12:14'! initialize super initialize. bindings := Dictionary new. self initializeBindings! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/1/2013 12:21'! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !SpecAdapterBindings methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 16:00'! translateSymbol: aSymbol ^ bindings at: aSymbol ifAbsent: [ aSymbol ]! ! !SpecInterpreter commentStamp: '' prior: 69406319! A SpecInterpreter is a interpreter for spec presenters! !SpecInterpreter class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/1/2013 12:27' prior: 45494012! bindings: anAdapterBinding bindings := anAdapterBinding! ! !SpecInterpreter class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/1/2013 12:26' prior: 45494179! defaultBindings ^ MorphicAdapterBindings new! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/18/2013 15:22' prior: 45494315! hardResetBindings bindings := nil! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/29/2013 14:39' prior: 36553732! interpretASpec: aSpec model: aModel ^ self interpretASpec: aSpec model: aModel selector: nil! ! !SpecInterpreter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 12:26' prior: 36553952! interpretASpec: aPresenter model: aModel selector: aSelector | result | [ result := self private_interpretASpec: aPresenter model: aModel selector: aSelector ] ensure: [ self hardResetBindings ]. ^ result! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 9/29/2013 14:25' prior: 50701226! actionToPerformWithSelector: selector arguments: args ^ spec instance perform: selector withArguments: args! ! !SpecInterpreter methodsFor: 'bindings' stamp: 'BenjaminVanRyseghem 10/1/2013 12:37' prior: 50700298! bindings ^ self class bindings! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 9/29/2013 14:47' prior: 36555550! computeSpecFrom: aSymbol selector: aSelector | instance | instance := (aSymbol isSymbol and: [ aSymbol ~= #model ]) ifTrue: [ | result | result := self convertSymbolOfClassToInstance: aSymbol. aSymbol == #ContainerModel ifTrue: [ result := result buildAdapterWithSpec ]. result ] ifFalse: [ self class private_interpretASpec: aSymbol model: model selector: aSelector ]. ^ SpecWrapper instance: instance selector: aSelector! ! !SpecInterpreter methodsFor: 'bindings' stamp: 'BenjaminVanRyseghem 10/1/2013 12:38' prior: 50700797! convertSymbolOfClassToInstance: aSymbol | translatedSymbol | translatedSymbol := self bindings translateSymbol: aSymbol. ^ (Smalltalk at: translatedSymbol ifAbsent: [ ^ translatedSymbol ]) new! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 9/29/2013 14:41' prior: 36555899! interpretASpec: aPresenter model: aModel selector: aSelector self model: aModel. ^ self interpretASpec: aPresenter selector: aSelector! ! !SpecInterpreter methodsFor: 'interpreting' stamp: 'BenjaminVanRyseghem 9/29/2013 14:38' prior: 38715017! interpretASpec: aPresenter selector: aSelector aPresenter ifNil: [ ^ nil ]. (self extractArrayToInterpretFrom: aPresenter) ifNotNil: [ :result | ^ result ]. (self retrieveSpecFrom: aPresenter selector: aSelector) ifNotNil: [ :instance | ^ instance ]. index := 2. [ index <= arrayToInterpret size ] whileTrue: [ | newInstance | newInstance := self performNextSelectorAndIncrementIndex. index > arrayToInterpret size ifTrue: [ ^ self returnInterpretationOf: newInstance ]. spec instance: newInstance ]. "If you get here, there is a problem. Must probably it comes from the Spec which is wrongly defined" self assert: arrayToInterpret size < 2. (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. ^ spec instance! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 9/29/2013 14:38' prior: 36557349! performNextSelectorAndIncrementIndex | args numArgs selector | selector := (arrayToInterpret at: index). selector isArray not ifTrue: [ selector := selector asSymbol. numArgs := selector numArgs. args := arrayToInterpret copyFrom: index + 1 to: index + numArgs ] ifFalse: [ "Here I assume that if it's not a symbol, it's a collection" | array | array := selector. selector := array first. numArgs := 0. args := array allButFirst ]. args := args collect: [ :each | self class private_interpretASpec: each model: model selector: spec selector ]. index := index + numArgs + 1. ^ self actionToPerformWithSelector: selector arguments: args! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 10/1/2013 13:35' prior: 38715963! retrieveSpecFrom: aPresenter selector: aSelector ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. self model needRebuild: true. spec isRedrawable ifTrue: [ spec removeSubWidgets ] ifFalse: [ ^ spec instance ] ] ifFalse: [ spec := self computeSpecFrom: arrayToInterpret first selector: aSelector ]. aSelector ifNil: [ aPresenter isSpecLayout ifTrue: [ spec selector: aPresenter selector ] ] ifNotNil: [ spec selector: aSelector ]. ^ nil! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 9/29/2013 14:38' prior: 36558745! returnInterpretationOf: newInstance | result | (model respondsTo: #spec:) ifTrue: [ model spec: spec ]. result := self class private_interpretASpec: newInstance model: spec instance selector: spec selector. ^ (result isKindOf: ComposableModel) ifTrue: [ | return | return := result private_buildWithSpec. ^ return ] ifFalse: [ ^ result ]! ! !SpecWrapper commentStamp: '' prior: 69406427! I am a small wrapper used to encapsulate data created and used during spec interpretation! !SpecWrapper class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 9/29/2013 14:22'! instance: instance selector: selector ^ self new instance: instance; selector: selector; yourself! ! !SpecWrapper methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:25'! instance ^ instance! ! !SpecWrapper methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:22'! instance: anObject instance := anObject! ! !SpecWrapper methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:33'! isRedrawable ^ self instance isRedrawable! ! !SpecWrapper methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/1/2013 13:33'! removeSubWidgets ^ self instance removeSubWidgets! ! !SpecWrapper methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:25'! selector ^ selector! ! !SpecWrapper methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 14:22'! selector: anObject selector := anObject! ! !WorkingCopyToolBar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/27/2013 10:48' prior: 54940206! defaultSpec ^ {#ContainerModel. #add: . {{#model . #packageButton.} . #layout: . #(FrameLayout rightFraction: 0.25 bottomFraction: 0 bottomOffset: 25)} . #add: . {{#model . #configButton.} . #layout: . #(FrameLayout leftFraction: 0.25 rightFraction: 0.5 bottomFraction: 0 bottomOffset: 25) } . #add: . {{#model . #sliceButton.} . #layout: . #(FrameLayout leftFraction: 0.5 rightFraction: 0.75 bottomFraction: 0 bottomOffset: 25) } . #add: . {{#model . #browseButton.} . #layout: . #(FrameLayout leftFraction: 0.75 bottomFraction: 0 bottomOffset: 25)} }! ! !DualChangeSorterApplication class methodsFor: 'specs' stamp: 'MarcusDenker 9/29/2013 15:29' prior: 68892100! open self new openWithSpec! ! !TestAutoFractionComputation methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 9/25/2013 18:24' prior: 45132782! initializeWidgets self instantiateModels: #( button ButtonModel list #ListModel text TextModel ).! ! TabClassical removeSelector: #tab! TabClassical removeSelector: #setMorph:! TabClassical removeSelector: #open! TabClassical removeSelector: #initialize! TabClassical removeSelector: #addTabs:! TabClassical removeSelector: #addAll:! TabClassical class removeSelector: #example! TabClassical class removeSelector: #associations:! Smalltalk globals removeClassNamed: #TabClassical! SpecImporter removeSelector: #initialize! SpecImporter removeSelector: #import:! SpecImporter removeSelector: #defaultDescription! SpecImporter class removeSelector: #import:! SpecDescriptionImporter removeSelector: #import:! SpecDescriptionImporter removeSelector: #defaultDescription! Smalltalk globals removeClassNamed: #SpecDescriptionImporter! Smalltalk globals removeClassNamed: #SpecImporter! SpecBuilder removeSelector: #method! SpecBuilder removeSelector: #iAmATest! SpecBuilder class removeSelector: #exp1! SpecBuilder class removeSelector: #example2! SpecBuilder class removeSelector: #example! Smalltalk globals removeClassNamed: #SpecBuilder! SpecBinder removeSelector: #seeClassSide! SpecBinder class removeSelector: #specFor:ifAbsent:! SpecBinder class removeSelector: #specFor:! SpecBinder class removeSelector: #initializeBindings! SpecBinder class removeSelector: #initialize! Smalltalk globals removeClassNamed: #SpecBinder! BindingsHolder removeSelector: #whenChangedDo:! BindingsHolder removeSelector: #selectorSymbolFor:ifAbsent:! BindingsHolder removeSelector: #retrieveSelectorSymbolFor:! BindingsHolder removeSelector: #retrieveDefaultSelectorSymbolFor:! BindingsHolder removeSelector: #retrieveDefaultClassSymbolFor:! BindingsHolder removeSelector: #retrieveClassSymbolFor:! BindingsHolder removeSelector: #resetBinding! BindingsHolder removeSelector: #printOn:! BindingsHolder removeSelector: #initialize! BindingsHolder removeSelector: #classSymbolFor:ifAbsent:! BindingsHolder removeSelector: #bindings:! BindingsHolder removeSelector: #bindings! BindingsHolder class removeSelector: #defaultBindings! BindingsHolder class removeSelector: #bindings! Smalltalk globals removeClassNamed: #BindingsHolder! WindowSpec removeSelector: #initializeInstance! WindowSpec removeSelector: #classSymbol! DialogWindowSpec removeSelector: #initializeInstance! DialogWindowSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #DialogWindowSpec! Smalltalk globals removeClassNamed: #WindowSpec! TreeSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #TreeSpec! TextSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #TextSpec! TextFieldSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #TextFieldSpec! SliderSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #SliderSpec! RawSpec removeSelector: #isBasic! RawSpec removeSelector: #initializeInstance! RawSpec removeSelector: #defaultReceiver:model:selector:! RawSpec removeSelector: #defaultReceiver:! RawSpec removeSelector: #defaultReceiver! RawSpec removeSelector: #addAsSubSpecTo:! RawSpec class removeSelector: #new! RawSpec class removeSelector: #counter:! RawSpec class removeSelector: #counter! ModelSpec removeSelector: #removeSubWidgets! ModelSpec removeSelector: #model:! Smalltalk globals removeClassNamed: #ModelSpec! Smalltalk globals removeClassNamed: #RawSpec! NullObjectSpec removeSelector: #isBasic! NullObjectSpec removeSelector: #addSubSpec:! NullObjectSpec removeSelector: #addAsSubSpecTo:! Smalltalk globals removeClassNamed: #NullObjectSpec! MultiColumnListSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #MultiColumnListSpec! ListSpec removeSelector: #classSymbol! IconListSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #IconListSpec! Smalltalk globals removeClassNamed: #ListSpec! LabelSpec removeSelector: #defaultColor! LabelSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #LabelSpec! FrameLayoutSpec removeSelector: #isBasic! FrameLayoutSpec removeSelector: #initializeInstance! FrameLayoutSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #FrameLayoutSpec! DropListSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #DropListSpec! ComposableSpec removeSelector: #subSpecs! ComposableSpec removeSelector: #isRedrawable! ComposableSpec removeSelector: #isBasic! ComposableSpec removeSelector: #initializeInstance! ComposableSpec removeSelector: #initialize! ComposableSpec removeSelector: #classSymbol! ComposableSpec removeSelector: #addSubSpec:! Smalltalk globals removeClassNamed: #ComposableSpec! CheckboxSpec removeSelector: #defaultColor! CheckboxSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #CheckboxSpec! ButtonSpec removeSelector: #classSymbol! Smalltalk globals removeClassNamed: #ButtonSpec! AbstractSpec removeSelector: #subSpecs! AbstractSpec removeSelector: #selector:! AbstractSpec removeSelector: #selector! AbstractSpec removeSelector: #removeSubWidgets! AbstractSpec removeSelector: #model:! AbstractSpec removeSelector: #isRedrawable! AbstractSpec removeSelector: #isBasic! AbstractSpec removeSelector: #instance:! AbstractSpec removeSelector: #instance! AbstractSpec removeSelector: #initializeInstance! AbstractSpec removeSelector: #initialize! AbstractSpec removeSelector: #defaultReceiver! AbstractSpec removeSelector: #defaultColor! AbstractSpec removeSelector: #classSymbol! AbstractSpec removeSelector: #bindings:! AbstractSpec removeSelector: #bindings! AbstractSpec removeSelector: #addAsSubSpecTo:! Smalltalk globals removeClassNamed: #AbstractSpec! SpecDescription removeSelector: #setExtra:! SpecDescription removeSelector: #selector:! SpecDescription removeSelector: #selector! SpecDescription removeSelector: #initialize! SpecDescription removeSelector: #generateSpec! SpecDescription removeSelector: #generate! SpecDescription removeSelector: #endSpec! SpecDescription removeSelector: #beginSpec! SpecDescription removeSelector: #addsHolder! SpecDescription removeSelector: #adds! SpecDescription removeSelector: #addInstVarWrapper:! SpecDescription removeSelector: #addInstVar:spec:fraction:offset:! SpecDescription removeSelector: #addInstVar:fraction:offset:! Smalltalk globals removeClassNamed: #SpecDescription! ComposableModelDescription removeSelector: #superclass:! ComposableModelDescription removeSelector: #superclass! ComposableModelDescription removeSelector: #specDescription:! ComposableModelDescription removeSelector: #specDescription! ComposableModelDescription removeSelector: #removeInstVar:! ComposableModelDescription removeSelector: #initialize! ComposableModelDescription removeSelector: #generateSpec! ComposableModelDescription removeSelector: #finalize! ComposableModelDescription removeSelector: #addMethodWithSource:category:! ComposableModelDescription removeSelector: #addMethodDescriptions! ComposableModelDescription removeSelector: #addIntoMethodDescriptions! ComposableModelDescription removeSelector: #addInstVarNamed:kindOfComposablaeModel:order:! ComposableModelDescription removeSelector: #addInstVarNamed:kindOfComposablaeModel:! ComposableModelDescription removeSelector: #addInstVarNamed:kindOf:order:! ComposableModelDescription removeSelector: #addInstVarNamed:kindOf:! ComposableModelDescription removeSelector: #addInstVarNamed:! ComposableModelDescription removeSelector: #addInstVarDescriptions! ComposableModelDescription removeSelector: #addCodeToInitialize:order:! ComposableModelDescription removeSelector: #addCodeTo:source:order:! ComposableModelDescription removeSelector: #addClassNamed:categorized:! ComposableModelDescription removeSelector: #addClassDescription:! ComposableModelDescription removeSelector: #addClassDescription! Smalltalk globals removeClassNamed: #ComposableModelDescription! AddMethodDescription removeSelector: #source:! AddMethodDescription removeSelector: #source! AddMethodDescription removeSelector: #selector:! AddMethodDescription removeSelector: #selector! AddMethodDescription removeSelector: #initialize! AddMethodDescription removeSelector: #generateSpec! AddMethodDescription removeSelector: #category:! AddMethodDescription removeSelector: #category! AddMethodDescription class removeSelector: #category:source:! Smalltalk globals removeClassNamed: #AddMethodDescription! AddIntoMethodDescription removeSelector: #selector:! AddIntoMethodDescription removeSelector: #selector! AddIntoMethodDescription removeSelector: #order:! AddIntoMethodDescription removeSelector: #order! AddIntoMethodDescription removeSelector: #generateSpec! AddIntoMethodDescription removeSelector: #code:! AddIntoMethodDescription removeSelector: #code! AddIntoMethodDescription class removeSelector: #code:order:selector:! Smalltalk globals removeClassNamed: #AddIntoMethodDescription! AddInstVarDescription removeSelector: #type:! AddInstVarDescription removeSelector: #type! AddInstVarDescription removeSelector: #name:! AddInstVarDescription removeSelector: #name! AddInstVarDescription removeSelector: #initialize! AddInstVarDescription removeSelector: #generateSpec! AddInstVarDescription class removeSelector: #name:type:! AddInstVarDescription class removeSelector: #name:! Smalltalk globals removeClassNamed: #AddInstVarDescription! AddClassDescription removeSelector: #newClassName:! AddClassDescription removeSelector: #newClassName! AddClassDescription removeSelector: #generateSpec! AddClassDescription removeSelector: #category:! AddClassDescription removeSelector: #category! AddClassDescription class removeSelector: #category:name:! Smalltalk globals removeClassNamed: #AddClassDescription! AbstractDescription removeSelector: #generateSpec! AbstractDescription removeSelector: #generate! Smalltalk globals removeClassNamed: #AbstractDescription! MorphicBindingsWithSplitters removeSelector: #initializeSelectorsDictionary! MorphicBindingsWithSplitters removeSelector: #initializeClassesDictionary! Smalltalk globals removeClassNamed: #MorphicBindingsWithSplitters! MorphicBindings removeSelector: #initializeSelectorsDictionary! MorphicBindings removeSelector: #initializeClassesDictionary! Smalltalk globals removeClassNamed: #MorphicBindings! AbstractBindings removeSelector: #selectorSymbolFor:is:! AbstractBindings removeSelector: #selectorSymbolFor:ifAbsent:! AbstractBindings removeSelector: #selectorSymbolFor:! AbstractBindings removeSelector: #initializeSelectorsDictionary! AbstractBindings removeSelector: #initializeClassesDictionary! AbstractBindings removeSelector: #initialize! AbstractBindings removeSelector: #classSymbolFor:is:! AbstractBindings removeSelector: #classSymbolFor:ifAbsent:! AbstractBindings removeSelector: #classSymbolFor:! Smalltalk globals removeClassNamed: #AbstractBindings! SpecInterpreter removeSelector: #retrieveSpecToProvideToChildren! SpecInterpreter removeSelector: #retrieveClassSymbolFor:! SpecInterpreter removeSelector: #interpretASpec:model:superSpec:selector:! SpecInterpreter removeSelector: #initialize! SpecInterpreter class removeSelector: #resetBindings! SpecInterpreter class removeSelector: #private_interpretASpec:model:superSpec:selector:! SpecInterpreter class removeSelector: #interpretASpec:model:superSpec:selector:! LabelModel removeSelector: #getText! DialogWindowModel removeSelector: #contentMorph! DialogWindowModel removeSelector: #cancelled! NewListModel removeSelector: #itemsHasBeenSelected! NewListModel removeSelector: #itemHasBeenSelected! NewListModel removeSelector: #indexesHasBeenSelected! NewListModel removeSelector: #indexHasBeenSelected! NewListModel removeSelector: #headerClickedBlock! NewListModel removeSelector: #acceptDroppingMorph:atIndex:event:inMorph:! TClass removeSelector: #subclass:category:! TClass removeSelector: #addSourceCode:into:! TClass removeSelector: #addInstVarNamed:type:! WindowModel removeSelector: #cancelled! WindowModel removeSelector: #buildWithSpec:! WindowModel removeSelector: #aboutText! TextModel removeSelector: #shoutAboutToStyle:! TextModel removeSelector: #selectedClassOrMetaClass! TextModel removeSelector: #receiverClass! TextModel removeSelector: #okToStyle! TextModel removeSelector: #guessTypeForName:! TextModel removeSelector: #clearUserEditFlag! TextModel class removeSelector: #possibleEvents! SpecInterpreterTest removeSelector: #testBindings! SliderModel removeSelector: #defaultValue! Morph removeSelector: #addMorphWrapper:! TreeModel removeSelector: #treeModel! TreeModel removeSelector: #rootNodeHolder! TreeModel removeSelector: #rootNodeFromItem:! TreeModel removeSelector: #onMorphTreeSelectionChanged:! TreeModel removeSelector: #iconBlock! TreeModel removeSelector: #doesNotUnderstand:! TreeModel removeSelector: #changed:! TreeModel removeSelector: #acceptDroppingMorph:event:inMorph:! PickListModel class removeSelector: #possibleEvents! TabModel removeSelector: #actionsBlock! TClassDescription removeSelector: #compileWithoutReturn:classified:! SpecSetter removeSelector: #toolbar! SpecSetter removeSelector: #removeButton! SpecSetter removeSelector: #remove! SpecSetter removeSelector: #list! SpecSetter removeSelector: #initializeWidgets! SpecSetter removeSelector: #initializePresenter! SpecSetter removeSelector: #initialize! SpecSetter removeSelector: #editButton! SpecSetter removeSelector: #descriptionHolder! SpecSetter removeSelector: #description:! SpecSetter removeSelector: #addButton! SpecSetter class removeSelector: #title! SpecSetter class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #SpecSetter! SpecAdder removeSelector: #toolbar! SpecAdder removeSelector: #showFor:! SpecAdder removeSelector: #setOkAction! SpecAdder removeSelector: #setFieldsAndLabels! SpecAdder removeSelector: #selectors! SpecAdder removeSelector: #registerDescriptionEvents! SpecAdder removeSelector: #offsetLabel! SpecAdder removeSelector: #offsetField! SpecAdder removeSelector: #modifyAdd:! SpecAdder removeSelector: #instVars! SpecAdder removeSelector: #initializeWidgets! SpecAdder removeSelector: #initializePresenter! SpecAdder removeSelector: #initialize! SpecAdder removeSelector: #initialExtent! SpecAdder removeSelector: #fractionLabel! SpecAdder removeSelector: #fractionField! SpecAdder removeSelector: #description:! SpecAdder removeSelector: #addInstVar:spec:fraction:offset:! SpecAdder class removeSelector: #title! SpecAdder class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #SpecAdder! InstVarSetter removeSelector: #widgetBuilt! InstVarSetter removeSelector: #text! InstVarSetter removeSelector: #removeInstVar! InstVarSetter removeSelector: #removeButton! InstVarSetter removeSelector: #registerTextEvents! InstVarSetter removeSelector: #registerPickListEvents! InstVarSetter removeSelector: #registerListEvents! InstVarSetter removeSelector: #registerDescriptionEvents! InstVarSetter removeSelector: #picklist! InstVarSetter removeSelector: #okCancelToolbar! InstVarSetter removeSelector: #list! InstVarSetter removeSelector: #inspectedClass! InstVarSetter removeSelector: #initializeWidgets! InstVarSetter removeSelector: #initializePresenter! InstVarSetter removeSelector: #initializeBindingsFrom:! InstVarSetter removeSelector: #initialize! InstVarSetter removeSelector: #initialExtent! InstVarSetter removeSelector: #hasBindingThatBeginsWith:! InstVarSetter removeSelector: #hasBindingOf:! InstVarSetter removeSelector: #description:! InstVarSetter removeSelector: #description! InstVarSetter removeSelector: #defaultText! InstVarSetter removeSelector: #addInstVar! InstVarSetter removeSelector: #addButton! InstVarSetter removeSelector: #accept! InstVarSetter class removeSelector: #title! InstVarSetter class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #InstVarSetter! InstVarAdder removeSelector: #whenDescriptionChanged:! InstVarAdder removeSelector: #typeLabel! InstVarAdder removeSelector: #typeField! InstVarAdder removeSelector: #typeChoice! InstVarAdder removeSelector: #toolbar! InstVarAdder removeSelector: #setFocus! InstVarAdder removeSelector: #selectedClass! InstVarAdder removeSelector: #nameLabel! InstVarAdder removeSelector: #nameField! InstVarAdder removeSelector: #initializeWidgets! InstVarAdder removeSelector: #initializePresenter! InstVarAdder removeSelector: #initialize! InstVarAdder removeSelector: #initialExtent! InstVarAdder removeSelector: #description:! InstVarAdder removeSelector: #description! InstVarAdder removeSelector: #accept! InstVarAdder class removeSelector: #title! InstVarAdder class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #InstVarAdder! DummyComposableModel removeSelector: #initializeWidgets! DummyComposableModel class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #DummyComposableModel! ComposableModel removeSelector: #newWindow! ComposableModel removeSelector: #newDropListBox! ComposableModel removeSelector: #newDialog! ComposableModel removeSelector: #ensureWidget! ComposableModel removeSelector: #cancelled! ComposableModel removeSelector: #bindings:! ComposableModel class removeSelector: #windowSpec! ComposableModel class removeSelector: #possibleEvents! ComposableModel class removeSelector: #bindings! ClassNameSetter removeSelector: #toolbar! ClassNameSetter removeSelector: #initializeWidgets! ClassNameSetter removeSelector: #initializePresenter! ClassNameSetter removeSelector: #initialize! ClassNameSetter removeSelector: #initialExtent! ClassNameSetter removeSelector: #description:! ClassNameSetter removeSelector: #classNameTextField! ClassNameSetter removeSelector: #classNameLabel! ClassNameSetter removeSelector: #categoryLabel! ClassNameSetter removeSelector: #categoryField! ClassNameSetter class removeSelector: #generatingSpec! ClassNameSetter class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #ClassNameSetter! TreeNodeModel removeSelector: #item:! TreeNodeModel removeSelector: #item! TreeNodeModel removeSelector: #initialize! TreeNodeModel class removeSelector: #item:! Smalltalk globals removeClassNamed: #TreeNodeModel! ListComposableModel removeSelector: #wrapItem:index:! ListComposableModel removeSelector: #whenSortingBlockChanged:! ListComposableModel removeSelector: #whenSelectionIndexChanged:! ListComposableModel removeSelector: #whenSelectionChanged:! ListComposableModel removeSelector: #whenSelectedItemChanged:! ListComposableModel removeSelector: #whenMultiSelectionChanged:! ListComposableModel removeSelector: #whenMenuChanged:! ListComposableModel removeSelector: #whenListChanged:! ListComposableModel removeSelector: #whenFilteringBlockChanged:! ListComposableModel removeSelector: #whenDisplayBlockChanged:! ListComposableModel removeSelector: #whenAllowToSelectChanged:! ListComposableModel removeSelector: #updateList! ListComposableModel removeSelector: #sortingBlock:! ListComposableModel removeSelector: #sortingBlock! ListComposableModel removeSelector: #setSelectionStateFor:at:! ListComposableModel removeSelector: #setSelectedItem:! ListComposableModel removeSelector: #setSelectedIndex:! ListComposableModel removeSelector: #setIndex:! ListComposableModel removeSelector: #selectedItems! ListComposableModel removeSelector: #selectedItemHolder! ListComposableModel removeSelector: #selectedItem! ListComposableModel removeSelector: #selectedIndexes! ListComposableModel removeSelector: #selectedIndex! ListComposableModel removeSelector: #resetSortingBlock! ListComposableModel removeSelector: #resetSelection! ListComposableModel removeSelector: #resetListSelection! ListComposableModel removeSelector: #resetFilteringBlock! ListComposableModel removeSelector: #registerEvents! ListComposableModel removeSelector: #refreshListItems! ListComposableModel removeSelector: #multiSelection:! ListComposableModel removeSelector: #multiSelection! ListComposableModel removeSelector: #menu:shifted:! ListComposableModel removeSelector: #menu:! ListComposableModel removeSelector: #menu! ListComposableModel removeSelector: #listSize! ListComposableModel removeSelector: #listItems! ListComposableModel removeSelector: #listElementAt:ifAbsent:! ListComposableModel removeSelector: #listElementAt:! ListComposableModel removeSelector: #items:! ListComposableModel removeSelector: #initialize! ListComposableModel removeSelector: #getSelectionStateFor:! ListComposableModel removeSelector: #getIndex! ListComposableModel removeSelector: #filteringBlock:! ListComposableModel removeSelector: #filteringBlock! ListComposableModel removeSelector: #displayBlock:! ListComposableModel removeSelector: #displayBlock! ListComposableModel removeSelector: #defaultSortingBlock! ListComposableModel removeSelector: #defaultFilteringBlock! ListComposableModel removeSelector: #clickOnSelectedItem! ListComposableModel removeSelector: #beSingleSelection! ListComposableModel removeSelector: #beMultipleSelection! ListComposableModel removeSelector: #allowToSelect:! ListComposableModel removeSelector: #allowToSelect! ListComposableModel removeSelector: #acceptDroppingMorph:event:inMorph:! ListComposableModel class removeSelector: #title! ListComposableModel class removeSelector: #possibleEvents! ListComposableModel class removeSelector: #example! ListComposableModel class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #ListComposableModel! AbstractBasicWidget removeSelector: #whenHelpChanged:! AbstractBasicWidget removeSelector: #whenEnabledChanged:! AbstractBasicWidget removeSelector: #whenBorderWidthChanged:! AbstractBasicWidget removeSelector: #whenBorderColorChanged:! AbstractBasicWidget removeSelector: #wantsDroppedMorph:event:inMorph:! AbstractBasicWidget removeSelector: #wantDropBlock:! AbstractBasicWidget removeSelector: #wantDropBlock! AbstractBasicWidget removeSelector: #transferFor:from:! AbstractBasicWidget removeSelector: #transferBlock:! AbstractBasicWidget removeSelector: #transferBlock! AbstractBasicWidget removeSelector: #initializeWidgets! AbstractBasicWidget removeSelector: #initialize! AbstractBasicWidget removeSelector: #help:! AbstractBasicWidget removeSelector: #help! AbstractBasicWidget removeSelector: #eventKeyStrokesForPreviousFocus! AbstractBasicWidget removeSelector: #eventKeyStrokesForNextFocus! AbstractBasicWidget removeSelector: #enabled:! AbstractBasicWidget removeSelector: #enabled! AbstractBasicWidget removeSelector: #enable! AbstractBasicWidget removeSelector: #dropEnabled:! AbstractBasicWidget removeSelector: #dropEnabled! AbstractBasicWidget removeSelector: #dragTransformationBlock:! AbstractBasicWidget removeSelector: #dragTransformationBlock! AbstractBasicWidget removeSelector: #dragPassengersFor:inMorph:! AbstractBasicWidget removeSelector: #dragPassengerFor:inMorph:! AbstractBasicWidget removeSelector: #dragEnabled:! AbstractBasicWidget removeSelector: #dragEnabled! AbstractBasicWidget removeSelector: #disable! AbstractBasicWidget removeSelector: #color:! AbstractBasicWidget removeSelector: #color! AbstractBasicWidget removeSelector: #borderWidth:! AbstractBasicWidget removeSelector: #borderWidth! AbstractBasicWidget removeSelector: #borderColor:! AbstractBasicWidget removeSelector: #borderColor! AbstractBasicWidget removeSelector: #acceptDroppingMorph:event:inMorph:! AbstractBasicWidget removeSelector: #acceptDropBlock:! AbstractBasicWidget removeSelector: #acceptDropBlock! AbstractBasicWidget class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #AbstractBasicWidget! TabManagerModel removeSelector: #tabSelected:! TabManagerModel removeSelector: #getTabs! "HudsonBuildTools20"! "KeyChain"! "Keymapping-Tools-Spec"! "Manifest-CriticBrowser"! "NautilusRefactoring"! "Spec-Bindings"! "Spec-Builder"! "Spec-Core"! "Spec-Debugger"! "Spec-Examples"! "Spec-Inspector"! "Spec-Layout"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! "Spec-Tests"! "Spec-Tools"! "Spec-Widgets"! "Tabs"! "Tools"! ----End fileIn----! ----QUIT----an Array(4 October 2013 2:22:39 pm) Pharo.image priorSource: 19048509! ----STARTUP----an Array(4 October 2013 2:28:49 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 2:28:49 pm) Pharo-30448.image priorSource: 19395399! ----STARTUP----an Array(4 October 2013 2:57:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 14:55' prior: 69380461! commentForCurrentUpdate ^ '11777 Fix SpecTests https://pharo.fogbugz.com/f/cases/11777 11776 Fix Create action on #subclassResponsibility https://pharo.fogbugz.com/f/cases/11776'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 14:55'! script104 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.8.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.175.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.102.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 14:55'! update30449 "self new update30449" self withUpdateLog: '11777 Fix SpecTests https://pharo.fogbugz.com/f/cases/11777 11776 Fix Create action on #subclassResponsibility https://pharo.fogbugz.com/f/cases/11776'. self loadTogether: self script104 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecInterpreterTest methodsFor: 'tests' stamp: 'BenjaminVanRyseghem 10/4/2013 14:45' prior: 50710662! testInterpretASpecModelMorphAssociation | spec model morph | model := AbstractWidgetModel new. spec := {#PluggableListMorph. #model:. #model}. morph := specInterpreterClass interpretASpec: spec model: model. self assert: (model widget == morph).! ! !TestingComposableModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/4/2013 14:46' prior: 52479392! testingSpec ^ {#PluggableTextMorph. #model:. #model}.! ! !SubclassResponsabilityDebugAction methodsFor: 'testing' stamp: 'AndreiChis 10/4/2013 14:18' prior: 69307024! appliesToDebugger: aDebugger | interruptedContext | interruptedContext := aDebugger session interruptedContext. ^ (interruptedContext selector == #subclassResponsibility) and: [ "If we work with an instance of the abstract class (shouldn't normally happen) do not add this action, as the abstract class alredy contains the the method." interruptedContext sender receiver class ~~ interruptedContext sender methodClass ] ! ! !SubclassResponsabilityDebugAction methodsFor: 'private' stamp: 'AndreiChis 10/4/2013 14:10'! askForSuperclassOf: aClass to: aSuperclass toImplement: aSelector ifCancel: cancelBlock | classes currentSuperclass chosenClassIndex | classes := OrderedCollection new. classes add: aClass. currentSuperclass := aClass superclass. [ currentSuperclass == nil or: [ currentSuperclass == aSuperclass ] ] whileFalse: [ classes add: currentSuperclass. currentSuperclass := currentSuperclass superclass ]. classes := classes addAll: (aClass traits sort: [ :t1 :t2 | t1 asString < t2 asString ]); yourself. classes size = 1 ifTrue: [ ^ classes at: 1 ]. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !SubclassResponsabilityDebugAction methodsFor: 'actions' stamp: 'AndreiChis 10/4/2013 14:11' prior: 69307473! executeAction | senderContext msg msgCategory chosenClass | senderContext := self interruptedContext sender. msg := Message selector: senderContext selector arguments: senderContext arguments. msgCategory := senderContext methodClass organization categoryOfElement: msg selector. chosenClass := self askForSuperclassOf: senderContext receiver class to: senderContext methodClass toImplement: senderContext selector ifCancel: [ ^ self ]. self session implement: msg classified: msgCategory inClass: chosenClass forContext: senderContext.! ! "DebuggerActions"! "Spec-Tests"! ----End fileIn----! ----QUIT----an Array(4 October 2013 2:57:17 pm) Pharo.image priorSource: 19395602! ----STARTUP----an Array(4 October 2013 3:03:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 3:03:13 pm) Pharo-30449.image priorSource: 19409356! ----STARTUP----an Array(4 October 2013 3:12:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 15:10' prior: 69727554! commentForCurrentUpdate ^ '11759 Protocol names should be Symbols https://pharo.fogbugz.com/f/cases/11759'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 15:10'! script105 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.281.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.131.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.114.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.312.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-EstebanLorenzano.55.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.175.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.102.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.927.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 15:10'! update30450 "self new update30450" self withUpdateLog: '11759 Protocol names should be Symbols https://pharo.fogbugz.com/f/cases/11759'. self loadTogether: self script105 merge: false. Protocol allInstancesDo: [ :each | each name: each name asSymbol ]. PluggableTextEditorMorph recompile. self flushCaches. ! ! "ScriptLoader30"! !AllProtocol class methodsFor: 'data' stamp: 'MarcusDenker 10/3/2013 17:49' prior: 48578594! defaultName ^ #'--- all ---'! ! !Protocol class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 5/28/2013 13:21' prior: 48579892! ambiguous ^ #ambiguous! ! !Protocol class methodsFor: 'instance creation' stamp: 'MarcusDenker 10/3/2013 17:49' prior: 48580163! empty ^ self name: #''! ! !Protocol class methodsFor: 'accessing' stamp: 'MarcusDenker 10/3/2013 17:49' prior: 48580644! nullCategory ^ #'no messages'! ! !Protocol methodsFor: 'adding' stamp: 'SebastianTleye 8/28/2013 17:22' prior: 50156146! addAllMethodsFrom: aProtocol aProtocol methods do: [ :each | self addMethod: each ].! ! !Protocol methodsFor: 'accessing' stamp: 'MarcusDenker 10/3/2013 17:47' prior: 48582233! name: anObject name := anObject asSymbol! ! "ClassOrganizer-Core"! ----End fileIn----! ----QUIT----an Array(4 October 2013 3:12:16 pm) Pharo.image priorSource: 19409559! ----STARTUP----an Array(4 October 2013 3:19:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 3:19:06 pm) Pharo-30450.image priorSource: 19421438! ----STARTUP----an Array(4 October 2013 3:30:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 15:27' prior: 69741511! commentForCurrentUpdate ^ '11457 #asSqueakPathName is a bad name https://pharo.fogbugz.com/f/cases/11457 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 15:27'! script106 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.284.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.316.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.175.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.102.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.928.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 15:27'! update30451 "self new update30451" self withUpdateLog: '11457 #asSqueakPathName is a bad name https://pharo.fogbugz.com/f/cases/11457 '. self loadTogether: self script106 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FilePathEncoder commentStamp: 'yo 10/19/2004 21:36' prior: 0! This class absorb the difference of internal and external representation of the file path. The idea is to keep the internal one as much as possible, and only when it goes to a primitive, the encoded file path, i.e. the native platform representation is passsed to the primitive. The converter used is obtained by "LanguageEnvironment defaultFileNameConverter". ! !FileSystemResolver methodsFor: 'resolving' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 22058329! resolveString: aString | decoded fs | decoded := FilePathEncoder decode: aString. fs := FileSystem disk. ^ FileReference fileSystem: fs path: (fs pathFromString: decoded)! ! !PolymorphSystemSettings class methodsFor: 'desktop' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 29746474! desktopSettingsOn: aBuilder (aBuilder group: #desktopSettings) label: 'Desktop'; target: self; noOrdering; with: [ (aBuilder setting: #showDesktopLogo) label: 'Show logo' translated; description: 'If true, then a logo if shown on the top left of the desktop' translated; with: [ (aBuilder setting: #desktopLogoFileName) type: #FilePathEncoder; description: 'The path of an image file for your own logo, the default pharo logo is used if empty.' translated; label: 'Logo image file name']. self desktopColorSettingsOn: aBuilder. (aBuilder setting: #desktopImageFileName) type: #FilePathEncoder; description: 'The path of an image file which will be imported as a form and displayed as your desktop background' translated; label: 'Desktop background image file name'] ! ! !StandardFileStream methodsFor: 'dnd requests' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 50795314! requestDropStream: dropIndex "Return a read-only stream for some file the user has just dropped onto the application." | rawName | rawName := self primDropRequestFileName: dropIndex. name := FilePathEncoder decode: rawName. fileID := self primDropRequestFileHandle: dropIndex. fileID == nil ifTrue: [ ^ nil ]. self register. rwmode := false. buffer1 := String new: 1. self enableReadBuffering! ! !VirtualMachine methodsFor: 'accessing' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 37073193! fileName ^ FilePathEncoder decode: self fullPath! ! !VirtualMachine methodsFor: 'accessing' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 37091055! path "Answer the path for the directory containing the Smalltalk virtual machine. Return the empty string if this primitive is not implemented." "SmalltalkImage current vmPath" ^ FilePathEncoder decode: self primVmPath! ! !FilePathEncoder commentStamp: 'yo 10/19/2004 21:36' prior: 69764241! This class absorb the difference of internal and external representation of the file path. The idea is to keep the internal one as much as possible, and only when it goes to a primitive, the encoded file path, i.e. the native platform representation is passsed to the primitive. The converter used is obtained by "LanguageEnvironment defaultFileNameConverter". ! !FilePathEncoder class methodsFor: 'encoding' stamp: 'MartinDias 10/2/2013 16:09'! decode: aString ^ aString convertFromWithConverter: LanguageEnvironment defaultFileNameConverter.! ! !FilePathEncoder class methodsFor: 'encoding' stamp: 'MartinDias 10/2/2013 16:07'! encode: pathString ^ pathString convertToWithConverter: LanguageEnvironment defaultFileNameConverter.! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'CamilloBruni 9/7/2013 10:21' prior: 33523457! changeImagePathTo: aString self imagePath: aString. LastImagePath := self imagePath! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 33525260! imageName "Answer the full path name for the current image." "SmalltalkImage current imageName" ^ FilePathEncoder decode: self primImageName! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 33525515! imageName: newName "Set the the full path name for the current image. All further snapshots will use this." self primImageName: (FilePathEncoder encode: newName)! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 33525836! imagePath "Answer the full path name for the current image." "SmalltalkImage current imageName" ^ FilePathEncoder decode: self primImagePath! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 33526129! imagePath: newPath "Set the the full path name for the current image. All further snapshots will use this." self primImagePath: (FilePathEncoder encode: newPath)! ! !String methodsFor: '*files' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 51032091! asFileName "Answer a String made up from the receiver that is an acceptable file name." | string checkedString | string := FileSystem disk checkName: self fixErrors: true. checkedString := FilePathEncoder encode: string. ^ FilePathEncoder decode: checkedString! ! !String methodsFor: 'converting' stamp: 'CamilloBruni 9/7/2013 10:05'! asPathName ^ self. ! ! !String methodsFor: '*files' stamp: 'CamilloBruni 9/7/2013 11:28' prior: 51032464! asVmPathName ^ FilePathEncoder encode: self! ! !ZipFileMember methodsFor: 'private-reading' stamp: 'CamilloBruni 9/7/2013 10:22' prior: 55204374! readCentralDirectoryFileHeaderFrom: aStream "Assumes aStream positioned after signature" | fileNameLength extraFieldLength fileCommentLength | self versionMadeBy: (aStream nextLittleEndianNumber: 1). fileAttributeFormat := aStream nextLittleEndianNumber: 1. self versionNeededToExtract: (aStream nextLittleEndianNumber: 2). self bitFlag: (aStream nextLittleEndianNumber: 2). compressionMethod := aStream nextLittleEndianNumber: 2. lastModFileDateTime := self unzipTimestamp: (aStream nextLittleEndianNumber: 4). crc32 := aStream nextLittleEndianNumber: 4. compressedSize := aStream nextLittleEndianNumber: 4. uncompressedSize := aStream nextLittleEndianNumber: 4. fileNameLength := aStream nextLittleEndianNumber: 2. extraFieldLength := aStream nextLittleEndianNumber: 2. fileCommentLength := aStream nextLittleEndianNumber: 2. aStream nextLittleEndianNumber: 2. "disk number start" internalFileAttributes := aStream nextLittleEndianNumber: 2. externalFileAttributes := aStream nextLittleEndianNumber: 4. localHeaderRelativeOffset := aStream nextLittleEndianNumber: 4. fileName := (aStream next: fileNameLength) asString. cdExtraField := (aStream next: extraFieldLength) asByteArray asString. fileComment := (aStream next: fileCommentLength) asString convertFromSystemString. self desiredCompressionMethod: compressionMethod! ! !ZipFileMember methodsFor: 'private-reading' stamp: 'CamilloBruni 9/7/2013 10:21' prior: 55206167! readLocalDirectoryFileHeaderFrom: aStream "Positions stream as necessary. Will return stream to its original position" | fileNameLength extraFieldLength xcrc32 xcompressedSize xuncompressedSize sig oldPos | oldPos := aStream position. aStream position: localHeaderRelativeOffset. sig := aStream next: 4. sig = LocalFileHeaderSignature asByteArray ifFalse: [ aStream position: oldPos. ^self error: 'bad LH signature at ', localHeaderRelativeOffset printStringHex ]. versionNeededToExtract := aStream nextLittleEndianNumber: 2. self bitFlag: (aStream nextLittleEndianNumber: 2). compressionMethod := aStream nextLittleEndianNumber: 2. lastModFileDateTime := self unzipTimestamp: (aStream nextLittleEndianNumber: 4). xcrc32 := aStream nextLittleEndianNumber: 4. xcompressedSize := aStream nextLittleEndianNumber: 4. xuncompressedSize := aStream nextLittleEndianNumber: 4. fileNameLength := aStream nextLittleEndianNumber: 2. extraFieldLength := aStream nextLittleEndianNumber: 2. fileName := (aStream next: fileNameLength) asString. localExtraField := (aStream next: extraFieldLength) asByteArray. dataOffset := aStream position. "Don't trash these fields if we already got them from the central directory" self hasDataDescriptor ifFalse: [ crc32 := xcrc32. compressedSize := xcompressedSize. uncompressedSize := xuncompressedSize. ]. aStream position: oldPos.! ! "Collections-Strings"! "Compression"! "FileSystem-Core"! "Files"! "Settings-Polymorph"! "System-Support"! ----End fileIn----! ----QUIT----an Array(4 October 2013 3:30:20 pm) Pharo.image priorSource: 19421641! ----STARTUP----an Array(4 October 2013 3:36:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 3:36:15 pm) Pharo-30451.image priorSource: 19440907! ----STARTUP----an Array(4 October 2013 4:47:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/4/2013 16:45' prior: 69753593! commentForCurrentUpdate ^ '11707 Tree Inspector: code pane needs to bind self https://pharo.fogbugz.com/f/cases/11707 11778 Can not <- or -> in TextModel https://pharo.fogbugz.com/f/cases/11778 11780 clean up unused FilePath and #asSqueakPathName https://pharo.fogbugz.com/f/cases/11780'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/4/2013 16:45'! script107 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.104.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-StephaneDucasse.106.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.145.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.928.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/4/2013 16:45'! update30452 "self new update30452" self withUpdateLog: '11707 Tree Inspector: code pane needs to bind self https://pharo.fogbugz.com/f/cases/11707 11778 Can not <- or -> in TextModel https://pharo.fogbugz.com/f/cases/11778 11780 clean up unused FilePath and #asSqueakPathName https://pharo.fogbugz.com/f/cases/11780'. self loadTogether: self script107 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ContainerModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 10/4/2013 15:24'! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ keyStrokesForNextFocusHolder contents! ! !ContainerModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 10/4/2013 15:24'! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ keyStrokesForPreviousFocusHolder contents! ! !EyeTreeInspector methodsFor: 'event-handling' stamp: 'MarcusDenker 10/4/2013 16:39' prior: 68594123! objectChanged self text doItReceiver: self object. self tree roots: self roots; expandRoots.! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 10/4/2013 15:21' prior: 19991406! giveFocusToNextFrom: aModel | focus | focus := self focusOrder. (focus includes: aModel) ifTrue: [ | index next | index := (focus indexOf: aModel) + 1. (index <= focus size) ifTrue: [ next := focus at: index. next takeKeyboardFocus. ^ true ]]. ^ owner ifNil: [ " I loop " | next | next := focus at: 1 ifAbsent: [ ^ false ]. next takeKeyboardFocus. true ] ifNotNil: [ owner giveFocusToNextFrom: self. true ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 10/4/2013 15:11' prior: 19991966! giveFocusToPreviousFrom: aModel | focus | focus := self focusOrder. (focus includes: aModel) ifTrue: [ | index previous | index := (focus indexOf: aModel) - 1. (index > 0) ifTrue: [ previous := focus at: index. previous takeLastKeyboardFocus. ^ true ]]. ^ owner ifNil: [ " I loop " | next | next := focus at: focus size ifAbsent: [ ^ false ]. next takeLastKeyboardFocus. true] ifNotNil: [ owner giveFocusToPreviousFrom: self. true ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 10/4/2013 15:17' prior: 46700619! registerKeyStrokesForNextFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForNextFocus do: [:each | aWidget bindKeyCombination: each toAction: [ self giveFocusToNextFrom: self ] ]! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 10/4/2013 15:27' prior: 46700929! registerKeyStrokesForPreviousFor: aWidget aWidget ifNil: [ ^ self ]. self eventKeyStrokesForPreviousFocus do: [:each | aWidget bindKeyCombination: each toAction: [ self giveFocusToPreviousFrom: self ] ]! ! FilePath removeSelector: #printOn:! FilePath removeSelector: #pathName:isEncoded:! FilePath removeSelector: #pathName! FilePath removeSelector: #isNullPath! FilePath removeSelector: #copySystemToVm! FilePath removeSelector: #asVmPathName! FilePath removeSelector: #asString! FilePath removeSelector: #asSqueakPathName! FilePath class removeSelector: #pathName:isEncoded:! FilePath class removeSelector: #pathName:! Smalltalk globals removeClassNamed: #FilePath! AbstractWidgetModel removeSelector: #buildWithSpecLayout:! ComposableModel removeSelector: #widthToDisplayInTree:! ComposableModel removeSelector: #widthToDisplayInList:! ComposableModel removeSelector: #treeRenderOn:bounds:color:font:from:! ComposableModel removeSelector: #listRenderOn:atRow:bounds:color:backgroundColor:from:! ComposableModel removeSelector: #heightToDisplayInTree:! ComposableModel removeSelector: #heightToDisplayInList:! ComposableModel removeSelector: #beginsWith:fromList:! String removeSelector: #asSqueakPathName! "Collections-Strings"! "Files"! "Spec-Core"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(4 October 2013 4:47:19 pm) Pharo.image priorSource: 19441110! ----STARTUP----an Array(4 October 2013 4:53:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 October 2013 4:53:22 pm) Pharo-30452.image priorSource: 19455997! ----STARTUP----an Array(5 October 2013 10:52:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/5/2013 10:50' prior: 69773062! commentForCurrentUpdate ^ '11571 Add command line commands for managing the preferences https://pharo.fogbugz.com/f/cases/11571'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/5/2013 10:50'! script108 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.141.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.78.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.104.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.928.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.26.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/5/2013 10:50'! update30453 "self new update30453" self withUpdateLog: '11571 Add command line commands for managing the preferences https://pharo.fogbugz.com/f/cases/11571'. self loadTogether: self script108 merge: false. StartupPreferencesLoader reset. Smalltalk removeFromStartUpList: StartupLoader. self flushCaches. ! ! "ScriptLoader30"! !PharoCommandLineHandler commentStamp: '' prior: 42536506! Usage: [--no-preferences|--preference-file=][] [--help] [--copyright] [--version] [--list] [ --no-quit ] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers --no-quit keep the image running without activating any other command line handler a valid subcommand in --list Preference File Modification: --preference-file load the preferences from the given --no-default-preferences do not load any preferences from the default locations Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !StartupLoader commentStamp: '' prior: 42706204! Deprecated => use StartupPreferenceLoader! !StartupPreferencesHandler commentStamp: '' prior: 0! I manage the links of the chain of responsibilites to retrieve the good preference file.! !StartupPreferencesLoader commentStamp: '' prior: 0! StartupLoader searches for and executes .st files from certain locations such as Library/Preferences/pharo on Mac OS X. StartupLoader looks within such locations for a 'pharo' folder. This contains the startup scripts common to all versions of Pharo, and also optionally a folder per Pharo version holding startup scripts suitable for that version only. So a typical directory layout might be... .../some/folders/pharo/Content/Resources/pharo.image. .../some/folders/pharo/Content/Resources/startup.st .../some/folders/.config/pharo/author.st .../some/folders/.config/pharo/useSharedCache.st .../some/folders/.config/pharo/1.4/mystartupFor14only.st .../some/folders/.config/pharo/2.0/mystartupFor20only.st (**Note however that '.config' is an invalid filename on Windows, so '..config' is used instead) To know the real values for you... Print the result of "StartupLoader preferencesGeneralFolder" which holds the startup scripts common to all versions of Pharo. Print the result of "StartupLoader preferencesVersionFolder" which holds the startup scripts specific to the version of the current image. ----------- StartupLoader example will define a script sample startup.st in your unix root on unix Its contents is StartupLoader default executeAtomicItems: { StartupAtomicItem name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' isSingleton: true. StartupAtomicItem name: 'Open Workspace' code: 'Workspace openContents: ''I should be displayed each time'''. } For a more complete example, see StartupLoader class>>#example2! !StartupAction methodsFor: 'execution' stamp: 'CamilloBruni 9/16/2013 01:18' prior: 36288003! execute | block correctlyExecuted | (self hasBeenExecuted and: [ self runOnce ]) ifTrue: [ ^ self ]. block := self code isBlock ifTrue: [ self code ] ifFalse: [[ self class compiler evaluate: self code ]]. correctlyExecuted := true. block on: Halt, Error do: [ :ex | StartupPreferencesLoader default errors add: {ex. self}. ex pass ]. self hasBeenExecuted: correctlyExecuted.! ! !BasicCommandLineHandler class methodsFor: 'class initialization' stamp: 'SeanDeNigris 10/4/2013 13:14' prior: 39086647! initialize "hook into the startup list" Smalltalk addToStartUpList: self.! ! !PharoCommandLineHandler commentStamp: '' prior: 69798931! Usage: [--no-preferences|--preference-file=][] [--help] [--copyright] [--version] [--list] [ --no-quit ] --help print this help message --copyright print the copyrights --version print the version for the image and the vm --list list a description of all active command line handlers --no-quit keep the image running without activating any other command line handler a valid subcommand in --list Preference File Modification: --preference-file load the preferences from the given --no-default-preferences do not load any preferences from the default locations Documentation: A PharoCommandLineHandler handles default command line arguments and options. The PharoCommandLineHandler is activated before all other handlers. It first checks if another handler is available. If so it will activate the found handler.! !PharoCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 9/16/2013 01:23'! activate self isChangingPreferences ifTrue: [ self changePreferences ] ifFalse: [ self runPreferences ]. ^ super activate.! ! !PharoCommandLineHandler methodsFor: 'private - preferences' stamp: 'CamilloBruni 9/16/2013 01:37'! changePreferences | preferenceFile | self isOmittingPreferences ifTrue: [ commandLine := commandLine copySubcommand. ^ self ]. preferenceFile := (self optionAt: 'preferences-file') asFileReference. commandLine := commandLine copySubcommand. StartupPreferencesLoader default load: { preferenceFile }.! ! !PharoCommandLineHandler methodsFor: 'private - preferences' stamp: 'CamilloBruni 9/16/2013 01:15'! isChangingPreferences ^ self isOverridingPreferences or: [ self isOmittingPreferences ]! ! !PharoCommandLineHandler methodsFor: 'private - preferences' stamp: 'SeanDeNigris 10/4/2013 13:15'! isOmittingPreferences ^ self hasOption: 'no-default-preferences'! ! !PharoCommandLineHandler methodsFor: 'private - preferences' stamp: 'CamilloBruni 9/16/2013 01:36'! isOverridingPreferences ^ self hasOption: 'preferences-file'! ! !PharoCommandLineHandler methodsFor: 'private - preferences' stamp: 'CamilloBruni 9/16/2013 01:18'! runPreferences StartupPreferencesLoader default loadFromDefaultLocations! ! !SettingBrowser methodsFor: '*StartupPreferences' stamp: 'CamilloBruni 9/16/2013 01:18' prior: 33131363! exportSettings | title nodes actions index groupSize | groupSize := 50. index := 1. nodes := self treeHolder nodeList. title := 'Exporting settings'. title displayProgressFrom: 1 to: nodes size during: [:bar | actions := nodes collectWithIndex: [:e :i | bar current: i. bar label: (String streamContents: [:s | s << title << ' (' << (e item label) << ')']). e item exportSettingAction ]]. actions := actions reject: [:e | e isNil ]. actions groupsOf: groupSize atATimeDo: [:l | StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: l named: 'exported_settings',index printString, '.st'. index := index +1 ]. StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: (actions last: (actions size rem: groupSize)) named: 'exported_settings',index printString, '.st'! ! !StartupLoader commentStamp: '' prior: 69799881! Deprecated => use StartupPreferenceLoader! !StartupLoader class methodsFor: 'accessing' stamp: 'CamilloBruni 9/16/2013 01:31' prior: 50900735! default ^ StartupPreferencesLoader default! ! !StartupPreferencesHandler commentStamp: '' prior: 69799990! I manage the links of the chain of responsibilites to retrieve the good preference file.! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'SeanDeNigris 8/4/2012 10:48'! buildActionList "All found files will be executed." | directories | directories := OrderedCollection new. directories add: [ self lookInGeneralPreferencesFolder ]. directories add: [ self lookInPreferencesVersionFolder ]. directories add: [ self lookInImageFolder ]. ^ directories! ! !StartupPreferencesHandler methodsFor: 'initialization' stamp: 'SeanDeNigris 8/4/2012 10:48'! initialize super initialize. actions := self buildActionList.! ! !StartupPreferencesHandler methodsFor: 'private' stamp: 'CamilloBruni 5/4/2013 23:14'! lookInFolder: folder | result | self flag: 'I should be #lookInFolder:forFilesMatching:, so that #lookInImageFolder can delegate to me, like the other two lookup methods'. result := OrderedCollection new. folder isDirectory ifFalse: [ ^ nil ]. "To filter resources files such as .DS_Store" folder fileNames do: [:name | name first = $. ifFalse: [ result add: (folder / name)]]. ^ result isEmpty ifTrue: [ nil ] ifFalse: [ result ]! ! !StartupPreferencesHandler methodsFor: 'private' stamp: 'StephaneDucasse 6/23/2013 18:04'! lookInFolder: folder forFilesMatching: pattern | result files | result := OrderedCollection new. folder isDirectory ifFalse: [ ^ nil ]. files := folder filesMatching: pattern. files do: [ :e | result add: e ]. ^ result isEmpty ifTrue: [ nil ] ifFalse: [ result ]! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/16/2013 01:18'! lookInGeneralPreferencesFolder ^ self lookInFolder: StartupPreferencesLoader preferencesGeneralFolder forFilesMatching: '*.st'.! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/16/2013 01:18'! lookInImageFolder ^ self lookInFolder: FileSystem workingDirectory forFilesMatching: StartupPreferencesLoader startupScriptName.! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'CamilloBruni 9/16/2013 01:18'! lookInPreferencesVersionFolder ^ self lookInFolder: StartupPreferencesLoader preferencesVersionFolder forFilesMatching: '*.st'.! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'SeanDeNigris 8/4/2012 10:53'! perform | results | results := OrderedCollection new. actions do: [:each | each value ifNotNil: [ :res | results addAll: res ] ]. ^ results ! ! !StartupPreferencesLoader commentStamp: '' prior: 69800145! StartupLoader searches for and executes .st files from certain locations such as Library/Preferences/pharo on Mac OS X. StartupLoader looks within such locations for a 'pharo' folder. This contains the startup scripts common to all versions of Pharo, and also optionally a folder per Pharo version holding startup scripts suitable for that version only. So a typical directory layout might be... .../some/folders/pharo/Content/Resources/pharo.image. .../some/folders/pharo/Content/Resources/startup.st .../some/folders/.config/pharo/author.st .../some/folders/.config/pharo/useSharedCache.st .../some/folders/.config/pharo/1.4/mystartupFor14only.st .../some/folders/.config/pharo/2.0/mystartupFor20only.st (**Note however that '.config' is an invalid filename on Windows, so '..config' is used instead) To know the real values for you... Print the result of "StartupLoader preferencesGeneralFolder" which holds the startup scripts common to all versions of Pharo. Print the result of "StartupLoader preferencesVersionFolder" which holds the startup scripts specific to the version of the current image. ----------- StartupLoader example will define a script sample startup.st in your unix root on unix Its contents is StartupLoader default executeAtomicItems: { StartupAtomicItem name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' isSingleton: true. StartupAtomicItem name: 'Open Workspace' code: 'Workspace openContents: ''I should be displayed each time'''. } For a more complete example, see StartupLoader class>>#example2! !StartupPreferencesLoader class methodsFor: 'accessing' stamp: 'IgorStasenko 2/4/2012 19:17'! allowStartupScript ^ AllowStartupScript ifNil: [ AllowStartupScript := true ]! ! !StartupPreferencesLoader class methodsFor: 'accessing' stamp: 'IgorStasenko 2/4/2012 19:17'! allowStartupScript: aBoolean AllowStartupScript := aBoolean! ! !StartupPreferencesLoader class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/1/2011 08:56'! default ^ UniqueInstance ifNil: [ UniqueInstance := super basicNew initialize ]! ! !StartupPreferencesLoader class methodsFor: 'example' stamp: 'CamilloBruni 9/16/2013 01:18'! example " an example of script generation " | item1 item2 | item1 := StartupAction name: 'Open Help' code: 'Workspace openContents: ''Here is just an example of how to use the StartupLoader. I should only be displayed once. You can also see StartupLoader class>>#example'' label: ''Help''' runOnce: true. item2 := StartupAction name: 'Open Workspace' code: [ Workspace openContents: 'I should be displayed each time' ]. StartupPreferencesLoader default addAtStartupInGeneralPreferenceFolder: {item1. item2}. StartupPreferencesLoader default loadFromDefaultLocations. StartupPreferencesLoader default loadFromDefaultLocations.! ! !StartupPreferencesLoader class methodsFor: 'example' stamp: 'CamilloBruni 9/16/2013 01:18'! example2 " it's my personal script provided as example" "self example2" | items | items := OrderedCollection new. items add: (StartupAction name: 'Set the Author' code: [ Author fullName: Author fullName printString ]). "replace it by your name" StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: items named: 'author.st'. items removeAll. items add: (StartupAction name: 'Debugger option' code: [ Smalltalk tools debugger alwaysOpenFullDebugger: true ]). items add: (StartupAction name: 'Dragging Option' code: [ UITheme defaultSettings fastDragging: true ]). items add: (StartupAction name: 'Dialog Auto Accept' code: [ TextEditorDialogWindow autoAccept: true ]). StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: items named: 'settings.st'. items removeAll. items add: (StartupAction name: 'Fonts option' code: [ FreeTypeSystemSettings loadFt2Library: true. FreeTypeFontProvider current updateFromSystem. StandardFonts defaultFont: (LogicalFont familyName: 'Lucida Grande' pointSize: 10) forceNotBold. GraphicFontSettings resetAllFontToDefault. StandardFonts codeFont: (LogicalFont familyName: 'Consolas' pointSize: 10).] runOnce: true). StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: items named: 'fonts.st'. items removeAll. StartupPreferencesLoader default addAtStartupInImageDirectory: items. StartupPreferencesLoader default loadFromDefaultLocations.! ! !StartupPreferencesLoader class methodsFor: 'example' stamp: 'CamilloBruni 9/16/2013 01:18'! example3 " it's my personal script provided as example" "self example3" | items | items := OrderedCollection new. items add: (StartupAction name: 'Self halt' code: [ self halt ]). "replace it by your name" items add: (StartupAction name: 'WS' code: [ Workspace open ]). "replace it by your name" StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: items named: 'author.st'. StartupPreferencesLoader default loadFromDefaultLocations.! ! !StartupPreferencesLoader class methodsFor: 'example' stamp: 'CamilloBruni 9/16/2013 01:18'! example4 "self example4" | items | items := OrderedCollection new. items add: (StartupAction name: 'General Preferences for all Pharo versions' code: [ FileStream stdout lf; nextPutAll: 'Setting general preferences for all Pharo versions'; lf. FileStream stdout lf; nextPutAll: 'Finished'; lf. ]). StartupPreferencesLoader default addAtStartupInGeneralPreferenceFolder: items named: 'generalSettings.st'. items removeAll. items add: (StartupAction name: 'Settings' code: [ FileStream stdout lf; nextPutAll: 'Setting general preferences for Pharo 2.0'; lf. FileStream stdout lf; nextPutAll: 'Finished'; lf. ]). StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: items named: 'settings.st'. items removeAll. items add: (StartupAction name: 'Image diretory' code: [ FileStream stdout lf; nextPutAll: 'Setting preferences for image directory'; lf. FileStream stdout lf; nextPutAll: 'Finished'; lf. ]). StartupPreferencesLoader default addAtStartupInImageDirectory: items ! ! !StartupPreferencesLoader class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/1/2011 08:56'! new ^ self error: 'use #default instead'! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'SeanDeNigris 7/12/2012 10:14'! preferencesGeneralFolder ^ FileLocator preferences asFileReference / 'pharo'.! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'SeanDeNigris 7/12/2012 10:14'! preferencesVersionFolder ^ self preferencesGeneralFolder asFileReference / SystemVersion current dottedMajorMinor! ! !StartupPreferencesLoader class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/1/2011 09:14'! reset UniqueInstance := nil! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'MarianoMartinezPeck 5/7/2012 18:59'! startupGeneralPreferencesFolderScriptName ^ 'startupPharo.st'! ! !StartupPreferencesLoader class methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 9/10/2013 15:56'! startupLoaderMenuOn: aBuilder (aBuilder item: #startupLoader) action: [ self default loadFromDefaultLocations ]; label: 'Run startup scripts'; parent: #System; order: 2; help: 'Run startup "scripts'; icon: Smalltalk ui icons scriptManagerIcon ! ! !StartupPreferencesLoader class methodsFor: 'setting' stamp: 'IgorStasenko 2/4/2012 19:17'! startupPreferencesSettingsOn: aBuilder (aBuilder group: #'Startup Preferences') target: self; label: 'Startup Preferences' translated; description: 'Settings related to Startup Preferences' translated; with: [ (aBuilder setting: #allowStartupScript) label: 'Allow the preferences to be loaded at startup' translated; description: 'If true, the preferences will be loaded' translated ]! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'StephaneDucasse 6/23/2013 17:25'! startupPreferencesVersionFolderScriptName ^ 'startupPharo', SystemVersion current dottedMajorMinor,'.st'! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'MarianoMartinezPeck 5/7/2012 18:59'! startupScriptName ^ 'startup.st'! ! !StartupPreferencesLoader methodsFor: 'accessing' stamp: 'IgorStasenko 2/4/2012 19:06'! actions ^ actions! ! !StartupPreferencesLoader methodsFor: 'accessing' stamp: 'IgorStasenko 2/4/2012 19:08'! add: anAction ^ actions at: anAction name ifAbsentPut: [ anAction ]! ! !StartupPreferencesLoader methodsFor: 'private' stamp: 'S 6/17/2013 13:26'! addAtStartup: aCollection inDirectory: aFileReference named: fileName | scriptFile | aFileReference ensureCreateDirectory. scriptFile := aFileReference / fileName. FileStream forceNewFileNamed: scriptFile fullName do: [ :stream | stream nextPutAll: (self buildStreamFor: aCollection) ]. ! ! !StartupPreferencesLoader methodsFor: 'script generation' stamp: 'CamilloBruni 5/26/2012 12:31'! addAtStartupInGeneralPreferenceFolder: aCollection self addAtStartup: aCollection inDirectory: self preferencesGeneralFolder named: self class startupGeneralPreferencesFolderScriptName! ! !StartupPreferencesLoader methodsFor: 'script generation' stamp: 'CamilloBruni 5/26/2012 12:31'! addAtStartupInGeneralPreferenceFolder: aCollection named: fileName self addAtStartup: aCollection inDirectory: self preferencesGeneralFolder named: fileName! ! !StartupPreferencesLoader methodsFor: 'script generation' stamp: 'CamilloBruni 5/26/2012 12:32'! addAtStartupInImageDirectory: aCollection self addAtStartup: aCollection inDirectory: FileSystem workingDirectory named: self class startupScriptName ! ! !StartupPreferencesLoader methodsFor: 'script generation' stamp: 'CamilloBruni 5/26/2012 12:32'! addAtStartupInPreferenceVersionFolder: aCollection self addAtStartup: aCollection inDirectory: self preferencesVersionFolder named: self class startupPreferencesVersionFolderScriptName! ! !StartupPreferencesLoader methodsFor: 'script generation' stamp: 'CamilloBruni 5/26/2012 12:33'! addAtStartupInPreferenceVersionFolder: aCollection named: fileName self addAtStartup: aCollection inDirectory: self preferencesVersionFolder named: fileName! ! !StartupPreferencesLoader methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/14/2011 13:42'! buildStreamFor: aCollection | stream | stream := WriteStream on: ''. stream nextPutAll: 'StartupLoader default executeAtomicItems: {'; nextPutAll: String crlf. aCollection do: [:item | stream nextPut: Character tab; nextPutAll: item storeString; nextPut: $.; nextPutAll: String crlf ]. stream nextPut: $}; nextPut: $.; nextPutAll: String crlf; nextPutAll: String crlf. ^ stream contents! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'MarianoMartinezPeck 5/7/2012 18:14'! cleanSavedActionsAndErrors actions := Dictionary new. errors := OrderedCollection new. ! ! !StartupPreferencesLoader methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/28/2011 17:45'! errors ^ errors! ! !StartupPreferencesLoader methodsFor: 'code execution' stamp: 'SeanDeNigris 6/21/2012 09:13'! executeAtomicItems: aCollection "No sender but send from the generated script" 'Load Startup Preferences' displayProgressFrom: 0 to: aCollection size during: [:bar | aCollection doWithIndex: [:item :index | bar current: index. (self add: item) execute ]]! ! !StartupPreferencesLoader methodsFor: 'initialization' stamp: 'IgorStasenko 2/4/2012 19:11'! initialize super initialize. actions := Dictionary new. errors := OrderedCollection new. ! ! !StartupPreferencesLoader methodsFor: 'private' stamp: 'BenjaminVanRyseghem 9/10/2013 15:57'! load: aCollection Smalltalk tools userManager canRunStartupScript ifFalse: [ ^ self ]. errors removeAll. aCollection do: [:file | file fileIn ].! ! !StartupPreferencesLoader methodsFor: 'startup loading' stamp: 'BenjaminVanRyseghem 9/10/2013 16:12'! loadFromDefaultLocations self class allowStartupScript ifTrue: [ self load: self retrieveFilesStream ]! ! !StartupPreferencesLoader methodsFor: 'utility' stamp: 'SeanDeNigris 7/8/2012 11:49'! preferencesGeneralFolder ^ self class preferencesGeneralFolder.! ! !StartupPreferencesLoader methodsFor: 'utility' stamp: 'SeanDeNigris 7/8/2012 11:50'! preferencesVersionFolder ^ self class preferencesVersionFolder.! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'MarianoMartinezPeck 5/7/2012 18:15'! removeAllScriptsAndCleanSavedActions self removeAllScriptsFromAllDirectories. self cleanSavedActionsAndErrors. ! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'MarianoMartinezPeck 5/9/2012 19:28'! removeAllScriptsFromAllDirectories self removeScriptFromImageDirectory. self removeAllScriptsFromPreferencesVersionDirectory. self removeAllScriptsFromGeneralPreferencesDirectory. ! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'StephaneDucasse 6/17/2012 18:28'! removeAllScriptsFromDirectory: aDirectory aDirectory deleteAllChildren! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'CamilloBruni 5/26/2012 12:33'! removeAllScriptsFromGeneralPreferencesDirectory self removeAllScriptsFromDirectory: self preferencesGeneralFolder. ! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'CamilloBruni 5/26/2012 12:33'! removeAllScriptsFromPreferencesVersionDirectory self removeAllScriptsFromDirectory: self preferencesVersionFolder. ! ! !StartupPreferencesLoader methodsFor: 'cleaning' stamp: 'CamilloBruni 5/26/2012 12:33'! removeScriptFromImageDirectory (FileSystem workingDirectory / self class startupScriptName) delete. ! ! !StartupPreferencesLoader methodsFor: 'startup loading' stamp: 'CamilloBruni 9/16/2013 01:19'! retrieveFilesStream ^ StartupPreferencesHandler new perform! ! PreferencesHandler removeSelector: #perform! PreferencesHandler removeSelector: #lookInPreferencesVersionFolder! PreferencesHandler removeSelector: #lookInImageFolder! PreferencesHandler removeSelector: #lookInGeneralPreferencesFolder! PreferencesHandler removeSelector: #lookInFolder:forFilesMatching:! PreferencesHandler removeSelector: #lookInFolder:! PreferencesHandler removeSelector: #initialize! PreferencesHandler removeSelector: #buildActionList! Smalltalk globals removeClassNamed: #PreferencesHandler! StartupLoader removeSelector: #retrieveFilesStream! StartupLoader removeSelector: #removeScriptFromImageDirectory! StartupLoader removeSelector: #removeAllScriptsFromPreferencesVersionDirectory! StartupLoader removeSelector: #removeAllScriptsFromGeneralPreferencesDirectory! StartupLoader removeSelector: #removeAllScriptsFromDirectory:! StartupLoader removeSelector: #removeAllScriptsFromAllDirectories! StartupLoader removeSelector: #removeAllScriptsAndCleanSavedActions! StartupLoader removeSelector: #preferencesVersionFolder! StartupLoader removeSelector: #preferencesGeneralFolder! StartupLoader removeSelector: #loadStartupScript! StartupLoader removeSelector: #loadPreferences! StartupLoader removeSelector: #initialize! StartupLoader removeSelector: #executeAtomicItems:! StartupLoader removeSelector: #errors! StartupLoader removeSelector: #cleanSavedActionsAndErrors! StartupLoader removeSelector: #buildStreamFor:! StartupLoader removeSelector: #addAtStartupInPreferenceVersionFolder:named:! StartupLoader removeSelector: #addAtStartupInPreferenceVersionFolder:! StartupLoader removeSelector: #addAtStartupInImageDirectory:! StartupLoader removeSelector: #addAtStartupInGeneralPreferenceFolder:named:! StartupLoader removeSelector: #addAtStartupInGeneralPreferenceFolder:! StartupLoader removeSelector: #addAtStartup:inDirectory:named:! StartupLoader removeSelector: #add:! StartupLoader removeSelector: #actions! StartupLoader class removeSelector: #startupScriptName! StartupLoader class removeSelector: #startupPreferencesVersionFolderScriptName! StartupLoader class removeSelector: #startupPreferencesSettingsOn:! StartupLoader class removeSelector: #startupLoaderMenuOn:! StartupLoader class removeSelector: #startupGeneralPreferencesFolderScriptName! StartupLoader class removeSelector: #startUp:! StartupLoader class removeSelector: #reset! StartupLoader class removeSelector: #preferencesVersionFolder! StartupLoader class removeSelector: #preferencesGeneralFolder! StartupLoader class removeSelector: #new! StartupLoader class removeSelector: #initialize! StartupLoader class removeSelector: #example4! StartupLoader class removeSelector: #example3! StartupLoader class removeSelector: #example2! StartupLoader class removeSelector: #example! StartupLoader class removeSelector: #allowStartupScript:! StartupLoader class removeSelector: #allowStartupScript! "StartupPreferences"! "System-CommandLine"! ----End fileIn----! ----QUIT----an Array(5 October 2013 10:52:22 am) Pharo.image priorSource: 19456200! ----STARTUP----an Array(5 October 2013 10:58:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 October 2013 10:58:24 am) Pharo-30453.image priorSource: 19493984! ----STARTUP----an Array(5 October 2013 6:09:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/5/2013 18:06' prior: 69788153! commentForCurrentUpdate ^ '11768 Small Code Critic cleanup of UpdateStreamer https://pharo.fogbugz.com/f/cases/11768 11785 add menu entry to run cleanup in the system menu https://pharo.fogbugz.com/f/cases/11785 11726 Code Critic: Variable used but not defined anywhere is wrong https://pharo.fogbugz.com/f/cases/11726'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/5/2013 18:07'! script109 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.35.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.162.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.167.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.80.mcz Refactoring-Environment-StephaneDucasse.31.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.104.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.930.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/5/2013 18:07'! update30454 "self new update30454" self withUpdateLog: '11768 Small Code Critic cleanup of UpdateStreamer https://pharo.fogbugz.com/f/cases/11768 11785 add menu entry to run cleanup in the system menu https://pharo.fogbugz.com/f/cases/11785 11726 Code Critic: Variable used but not defined anywhere is wrong https://pharo.fogbugz.com/f/cases/11726'. self loadTogether: self script109 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UpdateStreamer commentStamp: 'StephaneDucasse 9/1/2010 21:59' prior: 42774101! I'm a little class inspired heavily from Utilities that download update.list and launch update. you can tell me to update throw a given number of update or to be verbose. UpdateStreamer new beVerbose; updateFromServer This will update all the updates available and show up dialogs ! !UpdateStreamer commentStamp: 'StephaneDucasse 9/1/2010 21:59' prior: 69837242! I'm a little class inspired heavily from Utilities that download update.list and launch update. you can tell me to update throw a given number of update or to be verbose. UpdateStreamer new beVerbose; updateFromServer This will update all the updates available and show up dialogs ! !UpdateStreamer methodsFor: 'private actions' stamp: 'MarcusDenker 10/3/2013 23:12' prior: 54529439! elementaryReadServerUpdates: urls "Scan the update server(s) for unassimilated updates. If the instance variable upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point." "UpdateStreamer new elementaryReadServerUpdates" | str failed loaded this nextDoc updateName | (Smalltalk globals includesKey: #ScriptLoader) ifFalse: [ ^ self feedback: 'ScriptLoader is not present (this may happen if you have run cleanUpForProduction). ' ]. Cursor wait showWhile: [ | docQueue docQueueSema | loaded := 0. failed := nil. "send downloaded documents throuh this queue" docQueue := SharedQueue new. "this semaphore keeps too many documents from beeing queueed up at a time" docQueueSema := Semaphore new. 5 timesRepeat: [ docQueueSema signal ]. "fork a process to download the updates" self retrieveUrls: urls ontoQueue: docQueue withWaitSema: docQueueSema. "process downloaded updates in the foreground" [ this := docQueue next. nextDoc := docQueue next. nextDoc = #failed ifTrue: [ failed := this ]. failed isNil and: [ nextDoc ~= #finished ] ] whileTrue: [ failed ifNil: [ nextDoc isEmpty ifTrue: [ failed := this ] ]. failed ifNil: [ nextDoc peek asciiValue = 4 ifTrue: [ failed := this ] "pure object file" ]. "Must be fileIn, not pure object file" failed ifNil: [ self shouldApplyChanges ifTrue: [ updateName := (this findTokens: '/') last. ChangeSet newChangesFromStream: nextDoc named: updateName. SystemVersion current registerUpdate: updateName initialIntegerOrNil ]]. loaded := loaded + 1. docQueueSema signal ] ]. failed notNil & (urls size - loaded > 0) ifTrue: [ str := loaded printString , ' new update file(s) processed.'. str := str , '\Could not load ' withCRs , (urls size - loaded) printString , ' update file(s).' , '\Starting with "' withCRs , failed , '".'. self feedback: str ]. ^ Array with: failed with: loaded! ! !UpdateStreamer methodsFor: 'private actions' stamp: 'MarcusDenker 10/3/2013 23:04' prior: 54531606! extractVersion: aVersion from: updateList "Pull out the part of the list that applies to a version." "self new extractVersion: 'Pharo1.1' from: ..." | listContents versIndex | self flag: #shouldUseADictionary. listContents := self groupUpdatesByVersion: updateList. versIndex := (listContents collect: [ :pair | pair first]) indexOf: aVersion. versIndex = 0 ifTrue: [^ Array new]. ^ (listContents at: versIndex) last! ! !UpdateStreamer methodsFor: 'private actions' stamp: 'MarcusDenker 10/3/2013 23:07' prior: 54532292! groupUpdatesByVersion: updateContents "Parse the contents of updates.list into {{vers. {fileNames*}}*}, and return it." | sections vers strm line fileNames | self flag: #shouldUseADictionary. sections := OrderedCollection new. fileNames := OrderedCollection new: 1000. strm := updateContents readStream. [ strm atEnd ] whileFalse: [ line := strm nextLine. line notEmpty ifTrue: [ line first = $# ifTrue: [ vers ifNotNil: [ sections addLast: { vers. (fileNames asArray) } ]. "Start a new section" vers := line allButFirst. fileNames resetTo: 1 ] ifFalse: [ line first = $* ifFalse: [ fileNames addLast: line ] ] ] ]. vers ifNotNil: [ sections addLast: { vers. (fileNames asArray) } ]. ^ sections ! ! !UpdateStreamer methodsFor: 'private actions' stamp: 'MarcusDenker 10/3/2013 23:11' prior: 54533996! newUpdatesFromString: aString "A string should be of following format: #Pharo2.0a 20000-Pha-Empty.cs 20001-Pha-Empty2.cs 20002-Pha-DelScriptLoader.cs " | list out existing | out := OrderedCollection new. existing := SystemVersion current updates. list := self extractVersion: SystemVersion current version from: aString. list reverseDo: [:fileName | | itsNumber | itsNumber := fileName initialIntegerOrNil. (existing includes: itsNumber) ifFalse: [ (itsNumber isNil or: [itsNumber <= self upToNumber]) ifTrue: [out addFirst: self updateFolderURL, fileName]] ifTrue: [^ out]]. out notEmpty ifTrue: [^ out "we have our list"]. self feedback: 'All code update servers seem to be unavailable'. ^ out ! ! !UpdateStreamer methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 18:06' prior: 54521310! saveLocally ^false! ! !UpdateStreamer methodsFor: 'updating' stamp: 'MarcusDenker 10/3/2013 23:05' prior: 54527340! updateFromServerSilently "Scan the update server for unassimilated updates. If upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point. If saveLocally is true, then save local copies of the update files on disc. If shouldApplyChanges is true, then absorb the updates into the current image. A file on the server called updates.list has the names of the last N update files. We look backwards for the first one we do not have, and start there" "* To add a new update: Name it starting with a new two-digit code. * Do not use %, /, *, space, or more than one period in the name of an update file. * The update name does not need to have any relation to the version name. * Figure out which versions of the system the update makes sense for. * Add the name of the file to each version's category below. * Put this file and the update file on all of the servers. * * To make a new version of the system: Pick a name for it (no restrictions) * Put # and exactly that name on a new line at the end of this file. * During the release process, fill in exactly that name in the dialog box. * Put this file on the server." "When two sets of updates need to use the same directory, one of them has a * in its serverUrls description. When that is true, the first word of the description is put on the front of 'updates.list', and that is the index file used." self elementaryReadServerUpdates. ^ true! ! !SmalltalkImage methodsFor: 'cleanup' stamp: 'MarcusDenker 10/5/2013 17:42' prior: 33508673! cleanUp: aggressive except: exclusions confirming: aBool "Clean up. When aggressive is true, this will destroy resources, change sets, etc. Leave out any classes specifically listed in exclusions." "Smalltalk cleanUp: true except: {Point . ChangeSet} - will ask for confirmation" "SmalltalkImage current cleanUp: true except: {} confirming: false - will not ask for confirmation" | classes | aBool ifTrue:[ "Give the user a chance to bail" (self confirm: 'Cleanup will destroy change sets and more. Are you sure you want to proceed?') ifFalse: [^self]]. "Find all classes implementing #cleanUp or cleanUp:" classes := Smalltalk allClasses select: [:aClass| (aClass class includesSelector: #cleanUp) or: [aClass class includesSelector: #cleanUp:]]. "Leave out the classes in the exclusion set" classes := classes reject: [:aClass| exclusions includes: aClass]. "Arrange classes in superclass order, superclasses before subclasses. This will ensure that specific cleanup (like MethodDictionary compaction) will run after generic superclass cleanup (HashedCollection rehashing). Otherwise generic superclass cleanup might undo specific one (in this case rehashing will undo a good bit of MD compaction)." classes := Class superclassOrder: classes. "Run the cleanup code" classes do:[:aClass| aClass cleanUp: aggressive] displayingProgress: [:aClass| 'Cleaning up in ', aClass name].! ! !WorldState class methodsFor: 'world menu items' stamp: 'MarcusDenker 10/5/2013 17:41' prior: 37974443! systemOn: aBuilder (aBuilder item: #System) order: 3.0; icon: Smalltalk ui icons smallConfigurationIcon; with: [ (aBuilder item: #'About...') order: 0; icon: Smalltalk ui icons smallLanguageIcon; action: [Smalltalk aboutThisSystem]. (aBuilder item: #'Software update') order: 2; icon: Smalltalk ui icons smallUpdateIcon; precondition: [self showUpdateOptionInWorldMenu]; action: [ UpdateStreamer new updateFromServer ]; help: 'Load latest code updates via the internet'; withSeparatorAfter. (aBuilder item: #'Start profiling all Processes') action: [self startMessageTally]. (aBuilder item: #'Start profiling UI ') action: [self startThenBrowseMessageTally]. (aBuilder item: #'Space left') action: [Smalltalk informSpaceLeftAfterGarbageCollection]. (aBuilder item: #'Do Image Cleanup') action: [Smalltalk cleanUp: true ]; withSeparatorAfter. (aBuilder item: #'Start drawing again') action: [World resumeAfterDrawError]. (aBuilder item: #'Start stepping again') action: [World resumeAfterStepError]; withSeparatorAfter. (aBuilder item: #'Restore display (r)') action: [World restoreMorphicDisplay]. (aBuilder item: #'Clear all breakpoints') action: [BreakpointManager clear]. Halt isHaltOnceEnabled ifTrue: [(aBuilder item: 'Disable halt/inspect once') action: [self clearHaltOnce]] ifFalse: [(aBuilder item: 'Enable halt/inspect once') action: [self setHaltOnce]]].! ! !RBVariableNotDefinedRule methodsFor: 'running' stamp: 'MarcusDenker 10/5/2013 17:20' prior: 31551393! checkMethod: aContext aContext compiledMethod literals allButLastDo: [ :literal | (literal isVariableBinding and: [ literal key notNil ]) ifTrue: [ ((Smalltalk globals associationAt: literal key ifAbsent: [ ]) == literal or: [ (Undeclared associationAt: literal key ifAbsent: [ ]) == literal ]) ifFalse: [ (aContext selectedClass bindingOf: literal key) == literal ifFalse: [ result addClass: aContext selectedClass selector: aContext selector. result addSearchString: literal key ] ] ] ]! ! UpdateStreamer removeSelector: #writeList:toStream:! UpdateStreamer removeSelector: #updateFromString:! UpdateStreamer removeSelector: #server:! UpdateStreamer removeSelector: #saveUpdate:onFile:! UpdateStreamer removeSelector: #saveLocally:! "Morphic-Base"! "Refactoring-Critics"! "System-Support"! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----an Array(5 October 2013 6:09:22 pm) Pharo.image priorSource: 19494189! ----STARTUP----an Array(5 October 2013 6:15:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 October 2013 6:15:17 pm) Pharo-30454.image priorSource: 19516571! ----STARTUP----an Array(6 October 2013 12:06:11 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/6/2013 00:03' prior: 69826142! commentForCurrentUpdate ^ '11790 add critic rule for keys do: -> keysDo: (and valuesDo:) https://pharo.fogbugz.com/f/cases/11790 11787 Trivial critic cleanup of CodeImport https://pharo.fogbugz.com/f/cases/11787 11793 Package Support on RBBrowserEnvironment https://pharo.fogbugz.com/f/cases/11793 11792 First simplistic file system tree inspector https://pharo.fogbugz.com/f/cases/11792'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/6/2013 00:04'! script110 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.164.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.135.mcz NOCompletion-StephaneDucasse.41.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.168.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.82.mcz Refactoring-Environment-MarcusDenker.36.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.930.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1292.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/6/2013 00:04'! update30455 "self new update30455" self withUpdateLog: '11790 add critic rule for keys do: -> keysDo: (and valuesDo:) https://pharo.fogbugz.com/f/cases/11790 11787 Trivial critic cleanup of CodeImport https://pharo.fogbugz.com/f/cases/11787 11793 Package Support on RBBrowserEnvironment https://pharo.fogbugz.com/f/cases/11793 11792 First simplistic file system tree inspector https://pharo.fogbugz.com/f/cases/11792'. self loadTogether: self script110 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBkeysDoRule commentStamp: '' prior: 0! See rationale! !ClassOrganizationDeclaration commentStamp: '' prior: 42173059! I represent the declaration of a class organization in a file. My contents is the class organization string to import, and the class organizer is the one of the changed class. Sending me the message #import makes me install the class organization I carry into the class.! !MethodDeclaration commentStamp: '' prior: 42433145! I represent the declaration of a method. My contents are the source code to import, and the category reader is the object who knows the class, category and timestamp where to install the method. Sending me the message #import makes me install the method into the class.! !ChunkFileFormatParser methodsFor: 'testing' stamp: 'MarcusDenker 10/5/2013 18:23' prior: 19030221! isChunkEnd nextChar := readStream next. ^ nextChar isNil or: [ nextChar = self terminatorMark and: [ readStream peek ~= self terminatorMark ] ]! ! !ChunkFileFormatParser methodsFor: 'testing' stamp: 'MarcusDenker 10/5/2013 18:22' prior: 19031372! nextChunk | out | out := (String new: 1000) writeStream. readStream skipSeparators. [ self isChunkEnd ] whileFalse: [ out nextPut: self next. ]. ^out contents! ! !ChunkFileFormatParser methodsFor: 'parsing' stamp: 'MarcusDenker 10/5/2013 18:22' prior: 19026075! parseClassOrganization: classOrganizationPreamble "The comment preable is an array with the following structure: If instance side method: #(#CodeImportTestCaseTestClass #reorganize) if class side: #(#CodeImportTestCaseTestClass #class #reorganize) " | behaviorName isMeta | behaviorName := classOrganizationPreamble first. isMeta := classOrganizationPreamble second ~= #reorganize. self addDeclaration: (ClassOrganizationDeclaration contents: self nextChunk behaviorName: behaviorName isMeta: isMeta)! ! !ChunkFileFormatParser methodsFor: 'parsing' stamp: 'MarcusDenker 10/5/2013 18:22' prior: 19026714! parseCommentDeclaration: commentPreamble "The comment preable is an array with the following structure: If instance side method: #(#CodeImportTestCaseTestClass #commentStamp: '' #prior: 0) if class side: #(#CodeImportTestCaseTestClass #class #commentStamp: '' #prior: 0) allButFirst: " | behaviorName isMeta stamp | behaviorName := commentPreamble first asSymbol. isMeta := commentPreamble second ~= #commentStamp:. stamp := isMeta ifTrue: [ commentPreamble at: 4 ] ifFalse: [ commentPreamble at: 3 ]. self addDeclaration: (ClassCommentDeclaration contents: self nextChunk behaviorName: behaviorName isMeta: isMeta stamp: stamp)! ! !ChunkFileFormatParser methodsFor: 'parsing' stamp: 'MarcusDenker 10/5/2013 18:22' prior: 19027703! parseMethodDeclarations: methodsPreamble | behaviorName isMeta category stamp methodSource | "The method preable is an array with the following structure: If instance side method: #(#CodeImportTestCaseTestClass #methodsFor: 'some protocol' #stamp: 'GuillermoPolito 5/2/2012 13:35') if class side: #(#CodeImportTestCaseTestClass #class #methodsFor: 'some protocol' #stamp: 'GuillermoPolito 5/2/2012 13:35') Sometimes there is no timestamp: #(#CodeImportTestCaseTestClass #methodsFor: 'some protocol') " behaviorName := methodsPreamble first. isMeta := methodsPreamble second ~= #methodsFor:. category := isMeta ifTrue: [ methodsPreamble at: 4 ] ifFalse: [ methodsPreamble at: 3 ]. stamp := ''. methodsPreamble size > 4 ifTrue: [ stamp := isMeta ifTrue: [ methodsPreamble at: 6 ] ifFalse: [ methodsPreamble at: 5 ] ]. [ methodSource := self nextChunk. methodSource notEmpty ] whileTrue: [ self addDeclaration: (MethodDeclaration contents: methodSource behaviorName: behaviorName asSymbol isMeta: isMeta category: category stamp: stamp) ]! ! !RBkeysDoRule commentStamp: '' prior: 69859940! See rationale! !RBkeysDoRule class methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/5/2013 19:44'! uniqueIdentifierName "This number should be unique and should change only when the rule completely change semantics" ^'EqualNilRule'! ! !RBkeysDoRule methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/5/2013 19:55'! category ^'Optimization'! ! !RBkeysDoRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 19:44'! group ^ 'Transformations'! ! !RBkeysDoRule methodsFor: 'initialization' stamp: 'MarcusDenker 10/5/2013 20:02'! initialize super initialize. self rewriteRule replace: '``@object keys do: ``@block' with: '``@object keysDo: ``@block'; replace: '``@object values do: ``@block' with: '``@object valuesDo: ``@block' ! ! !RBkeysDoRule methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/5/2013 20:02'! longDescription ^ 'Replaces keys/values do: by keysDo: and valuesDo: '! ! !RBkeysDoRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 20:02'! name ^ 'keys do: -> keysDo: and valuesDo:'! ! !RBkeysDoRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 20:02'! rationale ^ 'The use of keysDo:/valuesDo: means one intermediate collection created less'! ! !EyeFileSystemInspector class methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 22:00'! label ^ 'FileReference Tree Inspector'! ! !EyeFileSystemInspector methodsFor: 'api' stamp: 'MarcusDenker 10/5/2013 21:58'! childrenForObject: aFileReference aFileReference isDirectory ifFalse: [^#()]. ^ aFileReference children collect: [ :each | DynamicEyeElement host: aFileReference value: each ]! ! !EyeFileSystemInspector methodsFor: 'api' stamp: 'MarcusDenker 10/5/2013 22:01'! roots ^ self childrenForObject: self object! ! !RBPackageEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 7/7/2013 18:34' prior: 30890034! includesCategory: aCategory ^ (super includesCategory: aCategory) and: [ self packages anySatisfy: [ :package | package includesSystemCategory: aCategory ] ]! ! !RBPackageEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 7/7/2013 18:33' prior: 30890271! includesClass: aClass ^ (super includesClass: aClass) and: [ self packages anySatisfy: [ :package | (package includesClass: aClass) or: [ (package extensionCategoriesForClass: aClass) notEmpty ]]]! ! !RBClassEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 7/7/2013 18:40' prior: 30402248! includesCategory: aCategory ^ (super includesCategory: aCategory) and: [ (environment classNamesFor: aCategory) inject: false into: [ :bool :each | bool or: [ | class | class := self systemDictionary at: each ifAbsent: [ nil ]. class notNil and: [ (self includesClass: class) or: [ self includesClass: class class ]]]]]! ! !ClassOrganizationDeclaration commentStamp: '' prior: 69860031! I represent the declaration of a class organization in a file. My contents is the class organization string to import, and the class organizer is the one of the changed class. Sending me the message #import makes me install the class organization I carry into the class.! !MethodDeclaration commentStamp: '' prior: 69860370! I represent the declaration of a method. My contents are the source code to import, and the category reader is the object who knows the class, category and timestamp where to install the method. Sending me the message #import makes me install the method into the class.! !FileReference class methodsFor: '*Spec-Inspector' stamp: 'MarcusDenker 10/5/2013 22:00'! additionalInspectorClasses ^ super additionalInspectorClasses, { EyeFileSystemInspector }! ! !RBBrowserEnvironment methodsFor: 'testing' stamp: 'CamilloBruni 7/7/2013 18:37'! includesPackage: packageName ^ true! ! !RBBrowserEnvironment methodsFor: 'accessing-packages' stamp: 'CamilloBruni 7/7/2013 18:55'! packageAt: aName ^ self packageAt: aName ifAbsent: [ NotFound signalFor: aName in: self ]! ! !RBBrowserEnvironment methodsFor: 'accessing-packages' stamp: 'CamilloBruni 7/7/2013 18:57'! packageAt: aName ifAbsent: absentBlock | package | package := self packageOrganizer packageNamed: aName ifAbsent: absentBlock. ^ (self includesCategory: aName) ifTrue: [ package ] ifFalse: absentBlock! ! !RBBrowserEnvironment methodsFor: 'accessing-packages' stamp: 'CamilloBruni 7/7/2013 19:01' prior: 30327599! packages ^ self packageOrganizer packages select: [ :package | self includesCategory: package name ]! ! MethodDeclaration removeSelector: #categoryReader:! "CodeImport"! "Manifest-Core"! "NautilusCommon"! "Refactoring-Critics"! "Refactoring-Environment"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(6 October 2013 12:06:20 am) Pharo.image priorSource: 19516774! ----STARTUP----an Array(6 October 2013 12:12:15 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 October 2013 12:12:15 am) Pharo-30455.image priorSource: 19536910! ----STARTUP----an Array(6 October 2013 5:52:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/6/2013 17:49' prior: 69848727! commentForCurrentUpdate ^ '11789 Trivial Critic clean in *Completion https://pharo.fogbugz.com/f/cases/11789 11796 New Critic Rule: Nobody should directly send #methodDict https://pharo.fogbugz.com/f/cases/11796 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/6/2013 17:49'! script111 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.10.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.137.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.168.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.223.mcz Refactoring-Critics-MarcusDenker.84.mcz Refactoring-Environment-MarcusDenker.36.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.82.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.930.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1294.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.574.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/6/2013 17:49'! update30456 "self new update30456" self withUpdateLog: '11789 Trivial Critic clean in *Completion https://pharo.fogbugz.com/f/cases/11789 11796 New Critic Rule: Nobody should directly send #methodDict https://pharo.fogbugz.com/f/cases/11796 '. self loadTogether: self script111 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NOCMenuMorph commentStamp: '' prior: 42500453! I am a morphic item used to show ocompletion entries. ! !NECTestClass commentStamp: '' prior: 42498045! I'm only for SUnit TestCases.! !NOCModel commentStamp: '' prior: 42500509! I keep the state of the ocompletion algorithm. See comments of my parents for details. ! !NECMenuMorph methodsFor: 'initialization' stamp: 'MarcusDenker 10/5/2013 19:29' prior: 27831241! setController: aECController position: aPoint controller := aECController. context := controller context. self position: aPoint - (20 @ 0). self narrowCompletion ifFalse: [ ^ self ]. self createTitle. self openInWorld! ! !NOCMenuMorph commentStamp: '' prior: 69879921! I am a morphic item used to show ocompletion entries. ! !NECTestClass commentStamp: '' prior: 69880037! I'm only for SUnit TestCases.! !NECTestClass methodsFor: 'initialization' stamp: 'MarcusDenker 10/5/2013 19:26' prior: 48962635! initialize: aRectangle constantInteger := 15. constantString := 'Ruben'. constantSymbol := #Symbol. constantArray := #(15 16 17 28 ). constantBoolean := true. typeSuggestingParameter := aRectangle. messageSend := Dictionary new. messageSend2 := aRectangle origin. globalVarKeyword := SortedCollection sortBlock: [:a :b | a <= b]. globalVarKeyword2 := SortedCollection new: 15. constantNil := nil. complexInit := 15 > 16 ifTrue: [#Symbol] ifFalse: ['String']. complexInit2 := Dictionary new: aRectangle origin x. ! ! !NECTestClass methodsFor: 'utils' stamp: 'MarcusDenker 10/5/2013 19:26' prior: 27864876! lowPriorityOverrides: aRectangle messageSend := aRectangle.! ! !NECController methodsFor: 'keyboard' stamp: 'MarcusDenker 10/5/2013 19:27' prior: 35382026! handleKeystrokeBefore: aKeyboardEvent editor: anEditor "I return a boolean. true when I have handled the event and no futher processing is needed by the caller." | keyCharacter controlKeyPressed | self flag: #fixme. "this method should be split up" self setEditor: anEditor. self setModel: editor model. keyCharacter := aKeyboardEvent keyCharacter. controlKeyPressed := aKeyboardEvent controlKeyPressed. self isMenuOpen ifFalse: [ ^ self handleKeystrokeWithoutMenu: aKeyboardEvent ]. (keyCharacter = Character home and: [ self captureNavigationKeys ]) ifTrue: [ menuMorph home. ^ true ]. (keyCharacter = Character end and: [ controlKeyPressed not and: [ self captureNavigationKeys ] ]) ifTrue: [ menuMorph end. ^ true ]. (keyCharacter = Character arrowRight and: [ self captureNavigationKeys ]) ifTrue: [ menuMorph showDetail. ^ true ]. (keyCharacter = Character arrowLeft and: [ self captureNavigationKeys ]) ifTrue: [ ^ self leftArrow ]. keyCharacter = Character arrowUp ifTrue: [ menuMorph moveUp. ^ true ]. keyCharacter = Character arrowDown ifTrue: [ menuMorph moveDown. ^ true ]. keyCharacter = Character pageUp ifTrue: [ menuMorph pageUp. ^ true ]. keyCharacter = Character pageDown ifTrue: [ menuMorph pageDown. ^ true ]. (keyCharacter = Character cr and: [ NECPreferences useEnterToAccept ]) ifTrue: [ menuMorph insertSelected ifTrue: [ ^ true ] ]. keyCharacter = Character tab ifTrue: [ NECPreferences expandPrefixes ifFalse: [ menuMorph insertSelected ifTrue: [ ^ true ] ] ifTrue: [ menuMorph insertCommonPrefixOrSelected ifTrue: [ ^ true ] ] ]. self flag: #todo. "Removing for now... most of the shortcuts are broken and no time or need now to fix them" "(keyCharacter = $h and: [ controlKeyPressed ]) ifTrue: [ menuMorph help. ^ true ]. (keyCharacter = $t and: [ controlKeyPressed ]) ifTrue: [ menuMorph expand. ^ true ]. (keyCharacter = $u and: [ controlKeyPressed ]) ifTrue: [ menuMorph switchToUntyped. ^ true ]. " "All keys but the alphanumeric chars (without command and control ) and the backspace key do close the menu" keyCharacter = Character backspace ifTrue: [ editor isCaretBehindChar ifFalse: [ self closeMenu ]. ^ false ]. (controlKeyPressed not & aKeyboardEvent commandKeyPressed not and: [ aKeyboardEvent keyCharacter isCompletionCharacter ]) ifFalse: [ self closeMenu. ^ keyCharacter = Character escape ]. ^ false! ! !NECController methodsFor: 'keyboard' stamp: 'MarcusDenker 10/5/2013 19:28' prior: 27789771! handleKeystrokeWithoutMenu: aKeyboardEvent self editor atCompletionPosition ifFalse: [ ^ (self smartInputWithEvent: aKeyboardEvent ) notNil ]. self stopCompletionDelay. (NECPreferences popupShowWithShortcut matches: {aKeyboardEvent}) ifTrue: [ self openMenu. ^true ]. (self smartInputWithEvent: aKeyboardEvent ) ifNotNil: [ ^true ]. NECPreferences popupShowAutomatic ifTrue: [ (aKeyboardEvent anyModifierKeyPressed not and: [ aKeyboardEvent keyCharacter isCompletionCharacter ]) ifTrue: [ self resetCompletionDelay ] ]. ^ false! ! !NECVarTypeGuesser methodsFor: 'bytecode decoding' stamp: 'MarcusDenker 10/5/2013 19:25' prior: 49537471! computeVarType | info tempNames name | types ifEmpty: [ ^ nil ]. info := types first. (hasSend and: [ info isDefinedByMessageSend not ]) ifTrue: [ info type: nil. ^ info ]. info isDefinedByTemporary ifFalse: [ ^ info ]. tempNames := (receiverClass compiler parse: currentMethod sourceCode) tempNames. name := tempNames at: info temporaryOffset + 1. info type: (self class getClassFromTypeSuggestingName: name). ^ info! ! !RBSendsMethodDictRule class methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/6/2013 08:57'! uniqueIdentifierName "This number should be unique and should change only when the rule completely change semantics" ^'NobodyShouldSendMethodDict'! ! !RBSendsMethodDictRule methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/6/2013 08:44'! category ^ 'Bugs'! ! !RBSendsMethodDictRule methodsFor: 'running' stamp: 'MarcusDenker 10/6/2013 08:58'! checkMethod: aContext ({Behavior. ClassDescription. Class.TBehavior . TClassDescription . TApplyingOnClassSide } includes: aContext selectedClass) ifTrue: [ ^ self ]. (aContext messages includes: #methodDict) ifTrue: [ result addClass: aContext selectedClass selector: aContext selector. result addSearchString: 'methodDict' ]! ! !RBSendsMethodDictRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/6/2013 08:44'! group ^ 'Bugs'! ! !RBSendsMethodDictRule methodsFor: '*Manifest-Core' stamp: 'MarcusDenker 10/6/2013 08:47'! longDescription ^ 'nobody should directly access the method dictionary. It is purely an implementation artefact that we use one dictionary and it might change in the future'! ! !RBSendsMethodDictRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/6/2013 08:47'! name ^ 'No direct access of methodDict'! ! !RBSendsMethodDictRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/6/2013 08:47'! rationale ^ 'nobody should directly access the method dictionary. It is purely an implementation artefact that we use one dictionary and it might change in the future'! ! !RBSendsMethodDictRule methodsFor: 'accessing' stamp: 'MarcusDenker 10/6/2013 08:44'! severity ^ #error! ! !Debugger methodsFor: 'private' stamp: 'MarcusDenker 10/5/2013 19:26' prior: 45874833! process: aProcess controller: aController context: aContext super initialize. Smalltalk globals at: #MessageTally ifPresent: [ :c | c new close ]. contents := nil. interruptedProcess := aProcess. contextStackTop := aContext. self newStack: (contextStackTop stackOfSize: 1). contextStackIndex := 1. selectingPC := true. errorWasInUIProcess := false! ! !Debugger methodsFor: 'initialize' stamp: 'MarcusDenker 10/5/2013 19:26' prior: 20525815! windowIsClosing "My window is being closed; clean up. Restart the low space watcher." interruptedProcess == nil ifTrue: [^ self]. interruptedProcess terminate. interruptedProcess := nil. contextStack := nil. contextStackTop := nil. receiverInspector := nil. contextVariablesInspector := nil. Smalltalk installLowSpaceWatcher. "restart low space handler" ! ! !TextEditor methodsFor: '*NECompletion' stamp: 'MarcusDenker 10/5/2013 19:28' prior: 52594372! atCompletionPosition "Return true if the cursor is at a possible completion position" | cursorPosition | cursorPosition := self startIndex. cursorPosition < 2 ifTrue: [ ^ false ]. ^ (self text at: cursorPosition - 1) isCompletionCharacter! ! !NOCModel commentStamp: '' prior: 69880124! I keep the state of the ocompletion algorithm. See comments of my parents for details. ! !NOCModel methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 19:28' prior: 27903952! entries entries ifEmpty: [ self loadEntries ]. ^ entries! ! "Manifest-Core"! "NECompletion"! "NOCompletion"! "Refactoring-Critics"! "Tools"! ----End fileIn----! ----QUIT----an Array(6 October 2013 5:52:25 pm) Pharo.image priorSource: 19537115! ----STARTUP----an Array(6 October 2013 5:58:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 October 2013 5:58:27 pm) Pharo-30456.image priorSource: 19557047! ----STARTUP----an Array(7 October 2013 8:24:13 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/7/2013 08:21' prior: 69869068! commentForCurrentUpdate ^ '11765 whichSelectorsReallyRead: --> fix whichSelectorsRead: instead https://pharo.fogbugz.com/f/cases/11765 11791 trivial critic cleanup in ClassOrganizer https://pharo.fogbugz.com/f/cases/11791 11802 Fix failing tests Ecompletion https://pharo.fogbugz.com/f/cases/11802 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/7/2013 08:21'! script112 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.62.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.76.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.168.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.48.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.930.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.630.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.14.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1294.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/7/2013 08:21'! update30457 "self new update30457" self withUpdateLog: '11765 whichSelectorsReallyRead: --> fix whichSelectorsRead: instead https://pharo.fogbugz.com/f/cases/11765 11791 trivial critic cleanup in ClassOrganizer https://pharo.fogbugz.com/f/cases/11791 11802 Fix failing tests Ecompletion https://pharo.fogbugz.com/f/cases/11802 '. self loadTogether: self script112 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NECTestClass commentStamp: '' prior: 69880717! I'm only for SUnit TestCases.! !NECTestClass commentStamp: '' prior: 69900233! I'm only for SUnit TestCases.! !NECTestClass methodsFor: 'initialization' stamp: '' prior: 69880846! initialize: aRectangle constantInteger := 15. constantString := 'Ruben'. constantSymbol := #Symbol. constantArray := #(15 16 17 28 ). constantBoolean := true. typeSuggestingParameter := aRectangle. messageSend := Dictionary new. messageSend2 := aRectangle origin. globalVarKeyword := SortedCollection sortBlock: [:a :b | a <= b]. globalVarKeyword2 := SortedCollection new: 15. constantNil := nil. typeSuggestingParameter2 := nil. complexInit := 15 > 16 ifTrue: [#Symbol] ifFalse: ['String']. complexInit2 := Dictionary new: aRectangle origin x. ! ! !NECTestClass methodsFor: 'utils' stamp: '' prior: 69881477! lowPriorityOverrides: aRectangle messageSend := aRectangle. typeSuggestingParameter2 := aRectangle. ! ! !TBehavior methodsFor: 'queries' stamp: 'TommasoDalSasso 10/6/2013 01:36' prior: 40964157! whichSelectorsRead: aString | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !RBOnlyReadOrWrittenVariableRule methodsFor: 'running' stamp: 'TommasoDalSasso 10/6/2013 01:37' prior: 30878844! checkClass: aContext | allSubclasses | allSubclasses := aContext selectedClass withAllSubclasses. aContext selectedClass instVarNames do: [ :each | | isRead isWritten | isRead := false. isWritten := false. allSubclasses detect: [ :class | isRead ifFalse: [ isRead := (class whichSelectorsRead: each) isEmpty not ]. isWritten ifFalse: [ isWritten := (class whichSelectorsAssign: each) isEmpty not ]. isRead and: [ isWritten ] ] ifNone: [ result addClass: aContext selectedClass instanceVariable: each ] ]! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'TommasoDalSasso 10/6/2013 01:37' prior: 31543063! on: anEnvironment readersOfInstanceVariable: aString in: aClass | newEnv | newEnv := (self onEnvironment: anEnvironment) label: 'Readers of ''' , aString , ''' in ' , aClass name; yourself. (aClass whichClassDefinesInstVar: aString) withAllSubclassesDo: [:cls | (cls whichSelectorsRead: aString) isEmpty ifFalse: [newEnv addClass: cls instanceVariableReader: aString]]. ^newEnv! ! !RBVariableEnvironment class methodsFor: 'instance creation' stamp: 'TommasoDalSasso 10/6/2013 01:38' prior: 31544155! on: anEnvironment referencesToInstanceVariable: aString in: aClass | newEnv | newEnv := (self onEnvironment: anEnvironment) label: 'References to ''' , aString , ''' in ' , aClass name; yourself. (aClass whichClassDefinesInstVar: aString) withAllSubclassesDo: [:cls | ((cls whichSelectorsRead: aString) isEmpty not or: [(cls whichSelectorsAssign: aString) isEmpty not]) ifTrue: [newEnv addClass: cls instanceVariable: aString]]. ^newEnv! ! !RBVariableEnvironment methodsFor: 'accessing' stamp: 'TommasoDalSasso 10/6/2013 01:37' prior: 31533542! environmentForInstanceVariable: aString in: aClass | selectorEnvironment isReader isWriter | selectorEnvironment := RBSelectorEnvironment onEnvironment: self. selectorEnvironment addSearchString: aString. isReader := isWriter := false. ((instanceVariables at: aClass name ifAbsent: [#()]) includes: aString) ifTrue: [isReader := true. isWriter := true]. ((instanceVariableWriters at: aClass name ifAbsent: [#()]) includes: aString) ifTrue: [isWriter := true]. ((instanceVariableReaders at: aClass name ifAbsent: [#()]) includes: aString) ifTrue: [isReader := true]. aClass withAllSubAndSuperclassesDo: [:each | isWriter ifTrue: [(each whichSelectorsAssign: aString) do: [:sel | selectorEnvironment addClass: each selector: sel]]. isReader ifTrue: [(each whichSelectorsRead: aString) do: [:sel | selectorEnvironment addClass: each selector: sel]]]. ^selectorEnvironment! ! !RBVariableEnvironment methodsFor: 'private' stamp: 'TommasoDalSasso 10/6/2013 01:37' prior: 31541478! instanceVariableSelectorsFor: aClass | selectors | selectors := Set new. #(#instanceVariables #instanceVariableReaders #instanceVariableWriters) with: #(#whichSelectorsAccess: #whichSelectorsRead: #whichSelectorsAssign:) do: [:var :sel | | instVars | instVars := Set new. (self perform: var) keysDo: [:each | | cls | cls := self classForName: each. (cls notNil and: [aClass includesBehavior: cls]) ifTrue: [instVars addAll: ((self perform: var) at: each)]]. instVars do: [:each | selectors addAll: (aClass perform: sel with: each)]]. ^selectors! ! !ProtocolOrganizer methodsFor: 'private' stamp: 'MarcusDenker 10/5/2013 21:18' prior: 50156436! existsProtocolNamed: aProtocolName ^self allProtocols anySatisfy: [ :e | e name = aProtocolName ] ! ! !RBBasicLintRuleTest class methodsFor: 'unnecessary code' stamp: 'TommasoDalSasso 10/6/2013 01:37' prior: 30304404! onlyReadOrWritten | detector | detector := self new. detector name: 'Instance variables not read AND written'. detector result: nil references. detector classBlock: [:context :result | | allSubclasses | allSubclasses := context selectedClass withAllSubclasses. context selectedClass instVarNames do: [:each | | reads writes | reads := false. writes := false. allSubclasses detect: [:class | reads ifFalse: [reads := (class whichSelectorsRead: each) isEmpty not]. writes ifFalse: [writes := (class whichSelectorsWrite: each) isEmpty not]. reads & writes] ifNone: [result addInstVar: each for: context selectedClass]]]. ^detector! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'MarcusDenker 10/5/2013 21:20' prior: 48567396! classify: selector under: aProtocolName suppressIfDefault: aBoolean | oldProtocol forceNotify | forceNotify := (self protocolOrganizer includesSelector: selector) not. oldProtocol := self categoryOfElement: selector. (forceNotify or: [ oldProtocol ~= aProtocolName or: [ aBoolean not or: [ aProtocolName ~= Protocol unclassified ] ] ]) ifFalse: [ ^ self ]. self protocolOrganizer classify: selector inProtocolNamed: aProtocolName suppressIfDefault: aBoolean. self notifyOfChangedSelector: selector from: oldProtocol to: aProtocolName! ! !ClassOrganization methodsFor: 'accessing' stamp: 'MarcusDenker 10/5/2013 21:19' prior: 48568237! comment: aString "Store the comment, aString, associated with the object that refers to the receiver." comment := (aString isKindOf: RemoteString) ifTrue: [ aString ] ifFalse: [ aString isEmptyOrNil ifTrue: [ nil ] ifFalse: [ RemoteString newString: aString onFileNumber: 2 ] ] "Later add priorSource and date and initials?"! ! TClassDescription removeSelector: #whichSelectorsReallyRead:! ClassOrganization removeSelector: #notifyOfChangedSelectorsOldDict:newDict:! !Trait method! whichSelectorsRead: aString | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! !Trait method! whichSelectorsRead: aString | index | index := self instVarIndexFor: aString ifAbsent: [ ^ IdentitySet new ]. ^ self selectors select: [ :each | (self compiledMethodAt: each) readsField: index ]! ! "ClassOrganizer-Core"! "NECompletion"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Environment"! "Refactoring-Tests-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(7 October 2013 8:24:22 am) Pharo.image priorSource: 19557250! ----STARTUP----an Array(7 October 2013 8:30:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 October 2013 8:30:20 am) Pharo-30457.image priorSource: 19576261! ----STARTUP----an Array(7 October 2013 12:23:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/7/2013 12:19' prior: 69889202! commentForCurrentUpdate ^ '11804 Small cleanup in SystemNavigation https://pharo.fogbugz.com/f/cases/11804 (from me) 11806 Refactor the Create action for #doesNotUnderstand https://pharo.fogbugz.com/f/cases/11806 (from Andrei) 11805 [ENH] Editor skip over multiple white space (+ setting option) https://pharo.fogbugz.com/f/cases/11805 (From Igor)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/7/2013 12:20'! script113 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.6.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.45.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.9.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.932.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.632.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1296.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/7/2013 12:20'! update30458 "self new update30458" self withUpdateLog: '11804 Small cleanup in SystemNavigation https://pharo.fogbugz.com/f/cases/11804 (from me) 11806 Refactor the Create action for #doesNotUnderstand https://pharo.fogbugz.com/f/cases/11806 (from Andrei) 11805 [ENH] Editor skip over multiple white space (+ setting option) https://pharo.fogbugz.com/f/cases/11805 (From Igor)'. self loadTogether: self script113 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Editor commentStamp: 'AlainPlantec 11/2/2010 18:23' prior: 42245336! New text editors. TextEditor provides most of the functionality that used to be in TextMorphEditor. This class is no longer a Controller!! SmalltalkEditor has Smalltalk code specific features. SimpleEditor provides basic functionality for single line text editing. It does not handle fonts and styles, aligning and Smalltalk utilities. It handles one single line. ! !CodeHolderSystemSettings class methodsFor: 'settings' stamp: 'IgorStasenko 10/7/2013 11:25' prior: 19480578! codeEditingSettingsOn: aBuilder (aBuilder group: #codeEditing) label: 'Editing' translated; parent: #codeBrowsing; noOrdering; description: 'All settings concerned with text editing' translated; with: [ (aBuilder setting: #selectionColor) target: UITheme; targetSelector: #currentSettings; label: 'Selection color' translated. (aBuilder setting: #unfocusedSelectionColor) target: UITheme; targetSelector: #currentSettings; description: 'The color of the selection for unfocused windows' translated; label: 'Unfocused selection color' translated. (aBuilder setting: #selectionTextColor) target: UITheme; targetSelector: #currentSettings; label: 'Selection text color' translated; description: 'The color of the selection text' translated. (aBuilder setting: #useSelectionBar) target: TextEditor; label: 'Show the colored bar on the current line' translated; with: [ (aBuilder setting: #selectionBarColor) target: UITheme; targetSelector: #currentSettings; label: 'Selection bar color' translated]. (aBuilder setting: #useSecondarySelection) target: TextEditor; label: 'Use the secondary selection' translated; with: [ (aBuilder setting: #secondarySelectionColor) target: UITheme; targetSelector: #currentSettings; label: 'Secondary selection color' translated. (aBuilder setting: #secondarySelectionTextColor) target: UITheme; targetSelector: #currentSettings; label: 'Secondary selection text color' translated]. (aBuilder setting: #useFindReplaceSelection) target: TextEditor; label: 'Use the find and replace selection' translated; with: [ (aBuilder setting: #findReplaceSelectionColor) target: UITheme; targetSelector: #currentSettings; label: 'Find replace selection color' translated. (aBuilder setting: #findReplaceSelectionTextColor) target: UITheme; targetSelector: #currentSettings; label: 'Find replace selection text color' translated]. (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; target: TextEditor; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated. (aBuilder setting: #blinkingCursor) label: 'Blinking text cursor' translated; target: Editor; description: 'When true, the text cursor will blink.' translated. (aBuilder setting: #dumbbellCursor) label: 'Dumbbell-shaped text cursor' translated; target: Editor; description: 'When true, the text cursor assumes the shape of a dumbbell, otherwise a vertical bar.' translated. (aBuilder setting: #skipOverMultipleSpaces) label: 'Skip over white space' translated; target: Editor; description: 'When true, the text cursor treats multiple white-space characters as a single space for navigating (moving left/right).' translated. (aBuilder setting: #walkAlongDisplayedLine) label: 'Walk along displayed line' translated; target: TextEditor; description: 'If set to true cursor movement will move along displayed lines rather than logical lines' translated. (aBuilder setting: #smartUpdating) label: 'Smart updating' translated; target: CodeHolder; description: 'If true, then morphic tools such as browsers and inspectors will keep their contents up to date automatically, so that if something changes anywhere, the change will be reflected everywhere' translated. ] ! ! !DoesNotUnderstandDebugAction methodsFor: 'private' stamp: 'AndreiChis 10/5/2013 21:49'! askForCategoryIn: aClass default: aString | categoryName | categoryName := AbstractTool requestProtocolNameFor: aClass initialAnswer: aString. categoryName ifNil: [^aString]. ^ categoryName isEmptyOrNil ifTrue: [^ aString] ifFalse: [ categoryName ]! ! !DoesNotUnderstandDebugAction methodsFor: 'private' stamp: 'AndreiChis 10/5/2013 21:54'! askForSuperclassOf: aClass toImplement: aSelector ifCancel: cancelBlock | classes chosenClassIndex | classes := aClass withAllSuperclasses addAll: (aClass traits sort: [ :t1 :t2 | t1 asString < t2 asString ]); yourself. chosenClassIndex := UIManager default chooseFrom: (classes collect: [:c | c name]) title: 'Define #', aSelector, ' in which class?'. chosenClassIndex = 0 ifTrue: [^ cancelBlock value]. ^ classes at: chosenClassIndex! ! !DoesNotUnderstandDebugAction methodsFor: 'actions' stamp: 'AndreiChis 10/7/2013 11:31' prior: 69287794! executeAction "Should only be called when the debugger was created in response to a MessageNotUnderstood exception. Create a stub for the method that was missing and proceed into it." | msg msgCategory chosenClass | msg := self interruptedContext tempAt: 1. chosenClass := self askForSuperclassOf: self interruptedContext receiver class toImplement: msg selector ifCancel: [^self]. msgCategory := (self askForCategoryIn: chosenClass default: 'as yet unclassified'). self session implement: msg classified: msgCategory inClass: chosenClass forContext: self interruptedContext! ! !Editor commentStamp: 'AlainPlantec 11/2/2010 18:23' prior: 69919562! New text editors. TextEditor provides most of the functionality that used to be in TextMorphEditor. This class is no longer a Controller!! SmalltalkEditor has Smalltalk code specific features. SimpleEditor provides basic functionality for single line text editing. It does not handle fonts and styles, aligning and Smalltalk utilities. It handles one single line. ! !Editor class methodsFor: 'settings' stamp: 'IgorStasenko 10/7/2013 11:22'! skipOverMultipleSpaces ^ SkipOverMultipleSpaces ifNil: [ SkipOverMultipleSpaces := false ]! ! !Editor class methodsFor: 'settings' stamp: 'IgorStasenko 10/7/2013 11:22'! skipOverMultipleSpaces: aBoolean SkipOverMultipleSpaces := aBoolean! ! !Editor methodsFor: 'nonediting/nontyping keys' stamp: 'IgorStasenko 10/7/2013 11:31' prior: 21119315! cursorLeft: aKeyboardEvent "Private - Move cursor left one character if nothing selected, otherwise move cursor to beginning of selection. If the shift key is down, start selecting or extending current selection. Don't allow cursor past beginning of text" self closeTypeIn. self moveCursor:[:position | self class skipOverMultipleSpaces ifTrue: [ self previousNonBlank: position ] ifFalse: [ position - 1 max: 1 ] ] forward: false specialBlock:[:position | self previousWord: position] event: aKeyboardEvent. ^ true! ! !Editor methodsFor: 'nonediting/nontyping keys' stamp: 'IgorStasenko 10/7/2013 11:30' prior: 21120568! cursorRight: aKeyboardEvent "Private - Move cursor right one character if nothing selected, otherwise move cursor to end of selection. If the shift key is down, start selecting characters or extending already selected characters. Don't allow cursor past end of text" self closeTypeIn. self moveCursor: [:position | self class skipOverMultipleSpaces ifTrue: [ self nextNonBlank: position ] ifFalse: [ position + 1 ] ] forward: true specialBlock:[:position | self nextWord: position] event: aKeyboardEvent. ^ true! ! !Editor methodsFor: 'private' stamp: 'IgorStasenko 3/10/2012 23:57'! nextNonBlank: position "if current position is not separator, advance by 1, otherwise advance up until non-separator char found or new line" | string index | string := self string. index := position. index >= string size ifTrue: [ ^ string size+1 ]. (string at: index) isSeparator ifFalse: [ ^ index + 1 ]. index := index + 1. [ index <= string size and: [(string at: index) isSeparator and: [(string at:index) ~= Character cr]]] whileTrue: [index := index + 1]. ^ index! ! !Editor methodsFor: 'private' stamp: 'IgorStasenko 10/7/2013 11:31'! previousNonBlank: position "decrement position up until any non-blank character found, or end of line" | string index | position <= 1 ifTrue: [ ^ 1 ]. string := self string. index := position. index := index -1. (string at: index) isSeparator ifFalse: [ ^ index ]. [ index > 1 and: [(string at: index-1) isSeparator and: [(string at:index-1) ~= Character cr]]] whileTrue: [index := index - 1]. ^ index! ! DebugSession removeSelector: #createMethodInContext:! DebugSession removeSelector: #askForSuperclassOf:toImplement:ifCancel:! DebugSession removeSelector: #askForCategoryIn:default:! SystemNavigationTest removeSelector: #testRetrievingAllMethodsInCategory! SystemNavigationTest removeSelector: #testAllMethodsInCategory! SystemNavigation removeSelector: #signatoriesString! SystemNavigation removeSelector: #signatories! SystemNavigation removeSelector: #removeUnsentMessagesWithProgressBarInPackageNamed:! SystemNavigation removeSelector: #methodsWithInitials:! SystemNavigation removeSelector: #contributorsNotSignatories! SystemNavigation removeSelector: #contributionsOf:! SystemNavigation removeSelector: #buildSelfContainedCallsFrom:in:! SystemNavigation removeSelector: #browseUnsentMessagesInPackageNamed:! SystemNavigation removeSelector: #browseUncommentedMethodsWithInitials:! SystemNavigation removeSelector: #browseAllMethodsInCategory:! SystemNavigation removeSelector: #browseAllImplementorsOfList:! SystemNavigation removeSelector: #allObjectsSelect:! SystemNavigation removeSelector: #allMethodsInCategory:! SystemNavigation removeSelector: #allContributors! SystemNavigation removeSelector: #allCallsOn:localTo:! "DebuggerActions"! "DebuggerModel"! "NautilusCommon"! "Settings-Tools"! "System-Support"! "Tests"! "Text-Edition"! "Tools"! ----End fileIn----! ----QUIT----an Array(7 October 2013 12:23:23 pm) Pharo.image priorSource: 19576464! ----STARTUP----an Array(7 October 2013 12:29:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 October 2013 12:29:19 pm) Pharo-30458.image priorSource: 19598108! ----STARTUP----an Array(7 October 2013 2:36:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/7/2013 14:33' prior: 69908417! commentForCurrentUpdate ^ '11807 openWorldWithSpec does not work https://pharo.fogbugz.com/f/cases/11807 11741 Add Fuel out Stack as an action to the new debugger https://pharo.fogbugz.com/f/cases/11741 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/7/2013 14:33'! script114 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.7.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.932.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.632.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1296.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/7/2013 14:33'! update30459 "self new update30459" self withUpdateLog: '11807 openWorldWithSpec does not work https://pharo.fogbugz.com/f/cases/11807 11741 Add Fuel out Stack as an action to the new debugger https://pharo.fogbugz.com/f/cases/11741 '. self loadTogether: self script114 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FuelOutStackDebugAction commentStamp: '' prior: 0! A FuelOutStackDebugAction is a debugging action that serialize a portion of the current stack trace using fuel. ! !FuelOutStackDebugAction commentStamp: '' prior: 69941106! A FuelOutStackDebugAction is a debugging action that serialize a portion of the current stack trace using fuel. ! !FuelOutStackDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 10/7/2013 12:05'! actionType ! ! !FuelOutStackDebugAction class methodsFor: 'private' stamp: 'AndreiChis 10/7/2013 11:59'! encodeDebugInformationOn: aSerializer | str | str := String new writeStream. str print: Date today; space; print: Time now. aSerializer at: #Timestamp putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'VM: '; nextPutAll: Smalltalk os name asString; nextPutAll: ' - '; nextPutAll: Smalltalk os subtype asString; nextPutAll: ' - '; nextPutAll: Smalltalk os version asString; nextPutAll: ' - '; nextPutAll: Smalltalk vm version asString. aSerializer at: #VM putAdditionalObject: str contents. str := String new writeStream. str nextPutAll: 'Image: '; nextPutAll: SystemVersion current version asString; nextPutAll: ' ['; nextPutAll: Smalltalk lastUpdateString asString; nextPutAll: ']'. aSerializer at: #Image putAdditionalObject: str contents.! ! !FuelOutStackDebugAction class methodsFor: 'serialization' stamp: 'AndreiChis 10/7/2013 11:59'! serializeTestFailureContext: aContext toFileNamed: aFilename | serializer | serializer := FLSerializer newDefault. self encodeDebugInformationOn: serializer. serializer addPostMaterializationAction: [ :materialization | Smalltalk tools debugger openOn: Processor activeProcess context: materialization root label: 'External stack' contents: nil fullView: false ]. serializer " use the sender context, generally the current context is not interesting" serialize: aContext toFileNamed: aFilename! ! !FuelOutStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 10/7/2013 11:47'! defaultLabel ^ 'Fuel out Stack'! ! !FuelOutStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 10/7/2013 11:48'! defaultOrder ^ 125! ! !FuelOutStackDebugAction methodsFor: 'actions' stamp: 'AndreiChis 10/7/2013 11:51'! executeAction self serializeStack! ! !FuelOutStackDebugAction methodsFor: 'accessing' stamp: 'AndreiChis 10/7/2013 11:47'! id ^ #fuelOutStack! ! !FuelOutStackDebugAction methodsFor: 'actions' stamp: 'AndreiChis 10/7/2013 11:57'! serializeStack | date fileName | "Serialize a portion of the current stack trace using fuel.." date := DateAndTime now. fileName := String streamContents: [ :s| s << 'Debugger-Stack-'; << self interruptedContext receiver class theNonMetaClass name; << '-'. date printYMDOn: s. s << '-'; print: date hour24; print: date minute; print: date second; << '.fuel']. [ self class serializeTestFailureContext: self interruptedContext copyStack toFileNamed: fileName ] on: Error do: [:err| "simply continue..." ].! ! !HDTestReport methodsFor: 'running' stamp: 'AndreiChis 10/7/2013 11:59' prior: 23129244! serializeError: error of: aTestCase "We got an error from a test, let's serialize it so we can properly debug it later on..." | context testCaseMethodContext | context := error signalerContext. testCaseMethodContext := context findContextSuchThat: [ :ctx| ctx receiver == aTestCase and: [ ctx methodSelector == #performTest ]]. context := context copyTo: testCaseMethodContext. [ FuelOutStackDebugAction serializeTestFailureContext: context sender toFileNamed: aTestCase class name asString,'-', aTestCase selector, '.fuel' ] on: Error do: [:err| "simply continue..." ] ! ! !WorldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/7/2013 13:46' prior: 69554020! defaultSpec self setUpWorld. ^ World asSpecAdapter! ! SpecDebugger class removeSelector: #menuFuelStackAction:! DebugSession removeSelector: #serializeStack! DebugSession class removeSelector: #serializeTestFailureContext:toFileNamed:! DebugSession class removeSelector: #encodeDebugInformationOn:! "FuelTools-Debugger"! "HudsonBuildTools20"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----an Array(7 October 2013 2:36:18 pm) Pharo.image priorSource: 19598313! ----STARTUP----an Array(7 October 2013 2:42:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 October 2013 2:42:18 pm) Pharo-30459.image priorSource: 19613734! ----STARTUP----an Array(7 October 2013 3:11:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/7/2013 15:09' prior: 69930266! commentForCurrentUpdate ^ '11794 Speed up for SystemNavigation >> #implementorsOf: https://pharo.fogbugz.com/f/cases/11794 11784 ConfigurationBrowser needs update after Spec change https://pharo.fogbugz.com/f/cases/11784 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/7/2013 15:09'! script115 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.865.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.24.mcz Ring-Core-Kernel-MarcusDenker.138.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.934.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.632.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1298.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/7/2013 15:09'! update30460 "self new update30460" self withUpdateLog: '11794 Speed up for SystemNavigation >> #implementorsOf: https://pharo.fogbugz.com/f/cases/11794 11784 ConfigurationBrowser needs update after Spec change https://pharo.fogbugz.com/f/cases/11784 '. self loadTogether: self script115 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SearchableList class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/7/2013 11:48' prior: 69590023! defaultSpec ^ SpecLayout composed newRow: #searchModel height: self toolbarHeight; add: #listModel top: self toolbarHeight; yourself! ! !MetacelloConfigurationBrowserPane methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/7/2013 11:53' prior: 43752180! initializeWidgets self instantiateModels: #(configurationList IconListModel). self focusOrder add: configurationList. configurationList menu: [ :aMenu | self configurationListMenu: aMenu ]. self initConfigurationList. self repository: self availableRepositories first! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/7/2013 14:15' prior: 51572528! allCallsOn: aSymbol from: aClass "Answer a SortedCollection of all the methods that call on aSymbol." | collection special byte | collection := OrderedCollection new. special := Smalltalk hasSpecialSelector: aSymbol ifTrueSetByte: [:b | byte := b ]. aClass withAllSubclassesDo: [ :class | (class whichSelectorsReferTo: aSymbol special: special byte: byte) do: [:sel | collection add: (self createMethodNamed: sel realParent: class)]]. ^collection! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/7/2013 14:13' prior: 51579189! allImplementorsOf: aSelector "Answer all the methods that implement the message aSelector." | aCollection | aCollection := OrderedCollection new. self allBehaviorsDo: [:class | (class includesSelector: aSelector) ifTrue: [aCollection add: (self createMethodNamed: aSelector realParent: class)]]. ^ aCollection! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/7/2013 14:17' prior: 51579620! allImplementorsOf: aSelector localTo: aClass "Answer a SortedCollection of all the methods that implement the message aSelector in, above, or below the given class." | cls aCollection | aCollection := OrderedCollection new. cls := aClass theNonMetaClass. cls withAllSuperAndSubclassesDo: [:class | (class includesSelector: aSelector) ifTrue: [ aCollection add: (self createMethodNamed: aSelector realParent: class) ]]. cls class withAllSuperAndSubclassesDo: [:class | (class includesSelector: aSelector) ifTrue: [ aCollection add: (self createMethodNamed: aSelector realParent: class) ]]. ^ aCollection! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/7/2013 14:15' prior: 51581148! allMethodsSelect: aBlock "Answer a SortedCollection of each method that, when used as the block argument to aBlock, gives a true result." | aCollection | aCollection := OrderedCollection new. self allBehaviorsDo: [:class | class selectorsAndMethodsDo: [:sel :m | (aBlock value: m) ifTrue: [aCollection add: (self createMethodNamed: sel realParent: class)]]]. ^ aCollection! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/7/2013 14:19' prior: 51586551! allSelect: aBlock "Answer a Collection of each method that, when used as the block argument to aBlock, gives a true result." | aCollection | aCollection := OrderedCollection new. self allBehaviorsDo: [:class | class selectorsAndMethodsDo: [:sel :meth | (aBlock value: meth) ifTrue: [aCollection add: class name , ' ' , sel]]]. ^ aCollection! ! !SystemNavigation methodsFor: 'message sends' stamp: 'MarcusDenker 10/7/2013 14:14' prior: 51564433! allSendersOf: selector | senders special byte | senders := OrderedCollection new. special := Smalltalk hasSpecialSelector: selector ifTrueSetByte: [ :b | byte := b ]. self allBehaviorsDo: [ :behavior | (behavior thoroughWhichSelectorsReferTo: selector special: special byte: byte) do: [ :sel| senders add: (self createMethodNamed: sel realParent: behavior) ] ]. ^ senders! ! !SystemNavigation methodsFor: 'message sends' stamp: 'MarcusDenker 10/7/2013 14:17' prior: 51564907! allSendersOf: selector inClass: aClass | senders special byte | senders := WeakOrderedCollection Collection new. special := Smalltalk hasSpecialSelector: selector ifTrueSetByte: [:b | byte := b ]. self addSelectorsReferingTo: selector in: aClass to: senders special: special byte: byte. ^senders! ! !SystemNavigation methodsFor: 'message sends' stamp: 'MarcusDenker 10/7/2013 14:18' prior: 51565317! allSendersOf: selector inClassCategory: category | classes senders special byte | classes := self environment organization classesInCategory: category. senders := OrderedCollection new. classes ifEmpty: [ ^ senders ]. special := Smalltalk hasSpecialSelector: selector ifTrueSetByte: [ :b | byte := b ]. classes do: [ :class | self addSelectorsReferingTo: selector in: class to: senders special: special byte: byte ]. ^ senders! ! !SystemNavigation methodsFor: 'message sends' stamp: 'MarcusDenker 10/7/2013 14:18' prior: 51565862! allSendersOf: selector inPackageNamed: packageName ^(self categoriesInPackageNamed: packageName) inject: OrderedCollection new into: [:senders :category| senders, (self allSendersOf: selector inClassCategory: category)]! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'MarcusDenker 10/7/2013 14:19' prior: 51530157! browseAllImplementorsOfList: selectorList title: aTitle "Create and schedule a message browser on each method that implements the message whose selector is in the argument selectorList. For example, self new browseAllImplementorsOfList: #(at:put: size) title: 'Implementors of', #(at:put: size) asString." | implementorLists flattenedList | implementorLists := selectorList collect: [:each | self allImplementorsOf: each]. flattenedList := OrderedCollection new. implementorLists do: [:each | flattenedList addAll: each]. ^ self browseMessageList: flattenedList name: aTitle! ! !MetacelloConfigurationBrowserToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/7/2013 11:44' prior: 43755270! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #installModel; add: #loadModel ]; yourself! ! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/7/2013 11:46' prior: 45154312! configurationSearchField ^ SearchMorph new model: self; setIndexSelector: #configurationSearchAccept:; updateSelector: #configurationSearchAccept:; searchList: self class configurationSearchList; asSpecAdapter! ! SystemNavigation removeSelector: #selectAllMethods:! "Spec-PolyWidgets"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(7 October 2013 3:11:21 pm) Pharo.image priorSource: 19613937! ----STARTUP----an Array(7 October 2013 3:17:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 October 2013 3:17:21 pm) Pharo-30460.image priorSource: 19631640! ----STARTUP----an Array(7 October 2013 5:13:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/7/2013 17:10' prior: 69945889! commentForCurrentUpdate ^ '11808 Small critic cleanup if Ring https://pharo.fogbugz.com/f/cases/11808 11809 Fix failing tests SystemNavigation https://pharo.fogbugz.com/f/cases/11809 11788 Trivial critic cleanup of Monticello https://pharo.fogbugz.com/f/cases/11788 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/7/2013 17:11'! script116 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-StephaneDucasse.38.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.140.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.106.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.936.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.632.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1300.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/7/2013 17:11'! update30461 "self new update30461" self withUpdateLog: '11808 Small critic cleanup if Ring https://pharo.fogbugz.com/f/cases/11808 11809 Fix failing tests SystemNavigation https://pharo.fogbugz.com/f/cases/11809 11788 Trivial critic cleanup of Monticello https://pharo.fogbugz.com/f/cases/11788 '. self loadTogether: self script116 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCFtpRepository commentStamp: '' prior: 42390239! I am an monticello repository implementation for the FTP protocol.! !MCVersionCreated commentStamp: '' prior: 42396844! An MCVersionCreated is raised when a MCVersion is created ! !MCWorkingCopy commentStamp: 'StephaneDucasse 4/29/2011 20:44' prior: 42397770! MCWorkingCopy represents one version of a package in memory. It provides support for ancestry access, required packages and the repositories in which the package is managed. Instance Variables: versionInfo ancestry counter repositoryGroup requiredPackages ! !MCFtpRepository commentStamp: '' prior: 69974763! I am an monticello repository implementation for the FTP protocol.! !RGBehaviorDefinition methodsFor: 'accessing class hierarchy' stamp: 'MarcusDenker 10/7/2013 13:05' prior: 39285398! allSuperclassesDo: aBlock "Evaluate the argument, aBlock, for each of the receiver's superclasses." self superclass isNil ifFalse: [ aBlock value: superclass. superclass allSuperclassesDo: aBlock ]! ! !RGBehaviorDefinition methodsFor: 'testing' stamp: 'MarcusDenker 10/7/2013 13:04' prior: 31583144! includesProtocol: aString "Looks for a protocols named = aString" ^protocols anySatisfy: [ :each| each = aString ] ! ! !MCVersionCreated commentStamp: '' prior: 69974895! An MCVersionCreated is raised when a MCVersion is created ! !SourceFileArray methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 10/7/2013 13:03' prior: 50633088! sourcedDataAt: sourcePointer | index position file preamble | index:= self fileIndexFromSourcePointer: sourcePointer. index = 0 ifTrue: [ ^'' ]. "no source pointer for this element" position := self filePositionFromSourcePointer: sourcePointer. file := self at: index. file ifNil: [ ^'' ]. "sources file not available" "file does not exist happens in secure mode" file := [file readOnlyCopy] on: FileDoesNotExistException do:[:ex| ^'' ]. self flag: 'I do not know why 3 is a good number'. preamble := self getPreambleFrom: file at: (0 max: position - 3). file close. ^preamble! ! !Trait methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 10/7/2013 13:03' prior: 53277729! asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice | rgClass rgMethod rgSuper sup | rgClass := self asRingDefinition. aRGSlice loadClass: rgClass using: packageKeys. methodsBoolean ifTrue: [ self methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. aRGSlice loadMethod: rgMethod inClass: rgClass using: packageKeys ]. self theMetaClass methodsDo:[ :mth| rgMethod := mth asActiveRingDefinition. aRGSlice loadMethod: rgMethod inClass: rgClass theMetaClass using: packageKeys ] ]. supersBoolean ifTrue: [ rgSuper := aRGSlice classNamed: rgClass superclassName. rgSuper isNil ifTrue: [ sup := aRGSlice environment classNamed: rgClass superclassName. rgSuper := sup asRingDefinitionWithMethods: methodsBoolean withSuperclasses: supersBoolean withSubclasses: subsBoolean withPackageKeys: packageKeys in: aRGSlice ]. rgClass superclass: rgSuper ]. ^rgClass! ! !MCMockDefinition class methodsFor: 'accessing' stamp: 'ab 7/7/2003 23:21' prior: 24871867! token: aString ^ self new token: aString! ! !MCMockDefinition class methodsFor: 'compiling' stamp: 'cwp 7/21/2003 19:46' prior: 24872002! wantsChangeSetLogging ^ false! ! !MCWorkingCopy commentStamp: 'StephaneDucasse 4/29/2011 20:44' prior: 69975035! MCWorkingCopy represents one version of a package in memory. It provides support for ancestry access, required packages and the repositories in which the package is managed. Instance Variables: versionInfo ancestry counter repositoryGroup requiredPackages ! !MCDirtyPackageInfo class methodsFor: 'initialization' stamp: 'avi 2/22/2004 14:04' prior: 24760787! initialize [self new register] on: MessageNotUnderstood do: []! ! !MCDirtyPackageInfo class methodsFor: 'compiling' stamp: 'cwp 7/21/2003 19:45' prior: 24760945! wantsChangeSetLogging ^ false! ! !RGAbstractContainer methodsFor: 'iterating elements' stamp: 'MarcusDenker 10/7/2013 13:01' prior: 31567717! elementsDo: aBlock elements valuesDo: [ :collection | collection do: [ :each | aBlock value: each ] ]! ! !RGAbstractContainer methodsFor: 'testing' stamp: 'MarcusDenker 10/7/2013 13:04' prior: 31569756! includesElementNamed: elementName in: aCollection | aSymbol | aSymbol:= elementName asSymbol. ^aCollection isDictionary ifTrue: [ aCollection includesKey: aSymbol ] ifFalse:[ aCollection anySatisfy: [ :each| each name = aSymbol ] ]! ! !SystemNavigation methodsFor: 'message sends' stamp: 'MarcusDenker 10/7/2013 15:59' prior: 69960652! allSendersOf: selector inClass: aClass | senders special byte | senders := OrderedCollection new. special := Smalltalk hasSpecialSelector: selector ifTrueSetByte: [:b | byte := b ]. self addSelectorsReferingTo: selector in: aClass to: senders special: special byte: byte. ^senders! ! !MCDataStream methodsFor: 'write and read' stamp: 'MarcusDenker 10/5/2013 19:13' prior: 24705374! next "Answer the next object in the stream." | type selector anObject isARefType internalObject | type := byteStream next. type ifNil: [ byteStream close. "clean up" byteStream position = 0 ifTrue: [self error: 'The file did not exist in this directory'] ifFalse: [self error: 'Unexpected end of object file']. ^ nil]. type = 0 ifTrue: [ byteStream close. "clean up" self error: 'Expected start of object, but found 0'. ^ nil]. isARefType := self noteCurrentReference: type. selector := #(readNil readTrue readFalse readInteger "<-4" readStringOld readSymbol readByteArray "<-7" readArray readInstance readReference readBitmap "<-11" readClass readUser readFloat readRectangle readShortInst "<-16" readString readWordArray foo "foo is a replacement for readWordArrayForSegment<-19" readWordLike readMethod "<-21") at: type. selector = 0 ifTrue: [ byteStream close. self error: 'file is more recent than this system'. ^ nil]. anObject := self perform: selector. "A method that recursively calls next (readArray, readInstance, objectAt:) must save & restore the current reference position." isARefType ifTrue: [self beginReference: anObject]. "After reading the externalObject, internalize it. #readReference is a special case. Either: (1) We actually have to read the object, recursively calling next, which internalizes the object. (2) We just read a reference to an object already read and thus already interalized. Either way, we must not re-internalize the object here." selector == #readReference ifTrue: [^ anObject]. internalObject := anObject comeFullyUpOnReload: self. internalObject == String ifTrue:[ "This is a hack to figure out if we're loading a String class that really should be a ByteString. Note that these days this will no longer be necessary since we use #withClassVersion: for constructing the global thus using a different classVersion will perfectly do the trick." ((anObject globalObjectName == #String) and:[anObject constructorSelector == #yourself]) ifTrue:[ internalObject := ByteString]]. ^ self maybeBeginReference: internalObject! ! !RGContainer methodsFor: 'image class and method loading' stamp: 'MarcusDenker 10/7/2013 13:02' prior: 31641515! loadTraitUsers "Set the users of a trait" | users | users := self classes select: [ :cls | cls hasTraitComposition ]. users do:[ :each | | rgTrait | each traitNames do:[ :tname| rgTrait := self traitNamed: tname. rgTrait notNil ifTrue: [ rgTrait addUser: each. rgTrait theMetaClass addUser: each theMetaClass ] ] ]! ! !MCVersionNotification methodsFor: 'initialize-release' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25125440! initializeWithVersion: aVersion repository: aRepository version := aVersion. repository := aRepository. ancestor := repository closestAncestorVersionFor: version info ifNone: []. changes := ancestor ifNil: [#()] ifNotNil: [(version snapshot patchRelativeToBase: ancestor snapshot) operations asSortedCollection]! ! !MCVersionNotification methodsFor: 'accessing' stamp: 'avi 8/26/2004 15:12' prior: 25125863! messageText ^ String streamContents: [:s | s nextPutAll: 'Committed to repository: ', repository description; cr; cr. s nextPutAll: version summary. changes isEmpty ifFalse: [s cr; cr. s nextPutAll: '-----------------------------------------------------'; cr. s nextPutAll: 'Changes since ', ancestor info name, ':'; cr. changes do: [:ea | s cr; nextPutAll: ea summary; cr. s nextPutAll: ea sourceString]]]! ! !MCVersionNotification methodsFor: 'error handling' stamp: 'stephaneducasse 2/4/2006 20:47' prior: 25126825! notify: aString | message | message := self messageTo: aString. SMTPClient deliverMailFrom: message from to: (Array with: message to) text: message text usingServer: MailSender smtpServer! ! MCVersionCreated removeSelector: #name:! SystemNavigation removeSelector: #unsentMessagesWithProgressBarInPackageNamed:! SystemNavigation removeSelector: #doWithProgressBar:forUnsentMessagesInPackageNamed:! SystemNavigation removeSelector: #allPrimitiveMethodsInCategories:! "Monticello"! "Ring-Core-Containers"! "Ring-Core-Kernel"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(7 October 2013 5:13:22 pm) Pharo.image priorSource: 19631843! ----STARTUP----an Array(7 October 2013 5:19:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 October 2013 5:19:26 pm) Pharo-30461.image priorSource: 19652687! ----STARTUP----an Array(8 October 2013 11:20:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/8/2013 11:17' prior: 69963795! commentForCurrentUpdate ^ '11812 replace some #sorted with #sort https://pharo.fogbugz.com/f/cases/11812 11813 Do not bother to sort #classAndTraitNames https://pharo.fogbugz.com/f/cases/11813 11814 remove empty package NewClassOrganizer and overlapping Tabs-Support https://pharo.fogbugz.com/f/cases/11814 11815 includesProtocol: should use #includes: https://pharo.fogbugz.com/f/cases/11815'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/8/2013 11:17'! script117 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewClassOrganizer-EstebanLorenzano.44.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.256.mcz RPackage-SystemIntegration-MarcusDenker.175.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.937.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tabs-Support-MarcusDenker.7.mcz Tests-MarcusDenker.634.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1302.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/8/2013 11:17'! update30462 "self new update30462" self withUpdateLog: '11812 replace some #sorted with #sort https://pharo.fogbugz.com/f/cases/11812 11813 Do not bother to sort #classAndTraitNames https://pharo.fogbugz.com/f/cases/11813 11814 remove empty package NewClassOrganizer and overlapping Tabs-Support https://pharo.fogbugz.com/f/cases/11814 11815 includesProtocol: should use #includes: https://pharo.fogbugz.com/f/cases/11815'. self loadTogether: self script117 merge: false. ScriptLoader new unregisterPackage: 'Tabs-Support'. ScriptLoader new unregisterPackage: 'NewClassOrganizer'. self flushCaches. ! ! "ScriptLoader30"! !RGBehaviorDefinition methodsFor: 'testing' stamp: 'MarcusDenker 10/8/2013 11:16' prior: 69975933! includesProtocol: aString "Looks for a protocols named = aString" ^protocols includes: aString! ! !SystemDictionary methodsFor: 'class and trait names' stamp: 'MarcusDenker 10/8/2013 11:16' prior: 51497411! classAndTraitNames "Answer a sorted collection of all class and trait (not including class-traits) names. Do not bother to sort" ^self classNames, self traitNames ! ! !MemoryFileSystemDirectory methodsFor: 'enumeration' stamp: 'MarcusDenker 10/7/2013 21:24' prior: 25424058! fileEntriesDo: aBlock entries keys sort do: [ :fileName| aBlock value: (entries at: fileName)].! ! !SearchFacade class methodsFor: 'package search' stamp: 'MarcusDenker 10/7/2013 21:25' prior: 32869195! packageSearchIn: anEnvironment | rawList | rawList := anEnvironment organization categories sort. ^ ListDialogWindow new getList: [ :r| rawList select: [:e | r search: e ]]; displayBlock: [:e | e ]; title: 'Package search'; yourself. ! ! !SearchFacade class methodsFor: 'protocol search' stamp: 'MarcusDenker 10/7/2013 21:25' prior: 32869849! protocolSearchIn: aCollection | rawList | rawList := aCollection sort. ^ ListDialogWindow new getList: [ :r| rawList select: [:e | r search: e ]]; displayBlock: [:e | e ]; title: 'Protocol search'; yourself. ! ! !RGClassDescriptionDefinition methodsFor: 'testing' stamp: 'MarcusDenker 10/7/2013 21:25' prior: 31618996! isSameRevisionAs: aRGClassDescriptionDefinition "This method look for equality of the properties of the receiver" "Instances variables are compared at the level of names but without any sorting" ^(super isSameRevisionAs: aRGClassDescriptionDefinition) and:[ self instVarNames sort = aRGClassDescriptionDefinition instVarNames sort ]! ! !TraitPureBehaviorTest methodsFor: 'testing-applying trait composition' stamp: 'MarcusDenker 10/7/2013 21:25' prior: 43850312! testChangeSuperclass "self run: #testChangeSuperclass" "Test that when the superclass of a class is changed the non-local methods of the class sending super are recompiled to correctly store the new superclass." | aC2 newSuperclass | aC2 := self c2 new. "C1 is current superclass of C2" self assert: aC2 m51. self assert: self c2 superclass == self c1. self deny: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sort = #(bar foo). "change superclass of C2 from C1 to X" newSuperclass := self createClassNamed: #X superclass: Object uses: {}. newSuperclass subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: self c2 superclass == newSuperclass. newSuperclass compile: 'foo ^17'. self assert: aC2 m51 = 17. self deny: (self c2 localSelectors includes: #m51). self c2 compile: 'm51 ^19'. self assert: aC2 m51 = 19. self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51). "change superclass of C2 back to C1" self c1 subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: (aC2 m51 = 19). self assert: self c2 superclass == self c1. self assert: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51).! ! !EyeDictionaryInspector methodsFor: 'accessing' stamp: 'MarcusDenker 10/7/2013 21:24' prior: 48652898! sortedKeys ^ [ [ self object keys sort ] on: Error do: [ "case of non sortable keys" self object keys ] ] on: Error do: [ #() ]! ! "FileSystem-Memory"! "Ring-Core-Kernel"! "Spec-Inspector"! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(8 October 2013 11:20:25 am) Pharo.image priorSource: 19652890! ----STARTUP----an Array(8 October 2013 11:26:30 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 October 2013 11:26:30 am) Pharo-30462.image priorSource: 19668931! ----STARTUP----an Array(8 October 2013 1:33:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/8/2013 13:31' prior: 69984843! commentForCurrentUpdate ^ '11665 RPackageOrganizer speedup https://pharo.fogbugz.com/f/cases/11665 11818 revert two #sorted changed from 30462 https://pharo.fogbugz.com/f/cases/11818'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/8/2013 13:31'! script118 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.942.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.150.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.937.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.636.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1304.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/8/2013 13:31'! update30463 "self new update30463" self withUpdateLog: '11665 RPackageOrganizer speedup https://pharo.fogbugz.com/f/cases/11665 11818 revert two #sorted changed from 30462 https://pharo.fogbugz.com/f/cases/11818'. self loadTogether: self script118 merge: false. ClassHierarchyTest fixSubclasses. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: 'private registration' stamp: 'CamilloBruni 9/23/2013 20:23' prior: 32012880! basicUnregisterPackage: aPackage "Unregister the specified package from the list of registered packages. Raise the announcement RPackageUnregistered. This is a low level action. It does not unregister the back pointer from classes to packages or any other information managed by the organizer" | symbol | symbol := aPackage name asSymbol. packages removeKey: symbol ifAbsent: [ self reportExtraRemovalOf: aPackage ]! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'CamilloBruni 9/23/2013 20:24' prior: 32013467! basicUnregisterPackageNamed: aSymbolName "Unregister the specified package from the list of registered packages. Raise the RPackageUnregistered announcement. This is a low level action. It does not unregister the back pointer from classes to packages or any other information managed by the organizer" packages removeKey: aSymbolName asSymbol ifAbsent: [ ] ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'CamilloBruni 9/23/2013 20:28' prior: 31964155! hasPackageExactlyMatchingExtensionName: anExtensionName | extension | extension := anExtensionName asSymbol. "fast version" (self includesPackageNamed: extension) ifTrue: [ ^ true ]. "slow version ignoring case" packages keysDo: [ :aSymbol | (aSymbol sameAs: extension) ifTrue: [ ^ true]]. ^ false! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'CamilloBruni 9/23/2013 20:45' prior: 31964952! hasPackageMatchingExtensionName: anExtensionName (self hasPackageExactlyMatchingExtensionName: anExtensionName) ifTrue: [ ^true ]. packages keysDo: [ :aSymbol | (anExtensionName beginsWithEmpty: aSymbol caseSensitive: false) ifTrue: [ ^ true]]. ^ false ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'CamilloBruni 9/23/2013 20:30' prior: 31965317! packageExactlyMatchingExtensionName: anExtensionName "only look for a package for which the name match 'anExtensionName', making no difference about case. Return nil if no package is found" | extension | extension := anExtensionName asSymbol. packages keysDo: [:aSymbol | (aSymbol sameAs: extension) ifTrue: [ ^ self packageNamed: aSymbol ]]. ^ nil! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'CamilloBruni 9/23/2013 20:45' prior: 31966377! packageMatchingExtensionName: anExtensionName "return nil if no package is not found" | tmpPackageName | "we first look if their is a package matching exactly the name specified" (self packageExactlyMatchingExtensionName: anExtensionName) ifNotNil: [ :package | ^ package ]. "if no package was found, we try to find one matching the begining of the name specified" tmpPackageName := ''. packages keysDo: [:aSymbol | (anExtensionName beginsWithEmpty: aSymbol caseSensitive: false) ifTrue: [ "we keep the longest package name found" (aSymbol size > tmpPackageName size) ifTrue: [ tmpPackageName := aSymbol ]]]. ^ tmpPackageName = '' ifTrue: [ nil ] ifFalse: [ self packageNamed: tmpPackageName ]! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'CamilloBruni 9/23/2013 20:22' prior: 31989268! packageNamed: aSymbol ifAbsent: errorBlock ^ packages at: aSymbol asSymbol ifAbsent: errorBlock ! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'CamilloBruni 10/2/2013 17:15'! packageNamesDo: aBlock ^ packages keysDo: aBlock! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'CamilloBruni 10/2/2013 17:14'! packagesDo: aBlock packages valuesDo: aBlock! ! !TraitPureBehaviorTest methodsFor: 'testing-applying trait composition' stamp: 'MarcusDenker 10/8/2013 13:05' prior: 69998103! testChangeSuperclass "self run: #testChangeSuperclass" "Test that when the superclass of a class is changed the non-local methods of the class sending super are recompiled to correctly store the new superclass." | aC2 newSuperclass | aC2 := self c2 new. "C1 is current superclass of C2" self assert: aC2 m51. self assert: self c2 superclass == self c1. self deny: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo). "change superclass of C2 from C1 to X" newSuperclass := self createClassNamed: #X superclass: Object uses: {}. newSuperclass subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: self c2 superclass == newSuperclass. newSuperclass compile: 'foo ^17'. self assert: aC2 m51 = 17. self deny: (self c2 localSelectors includes: #m51). self c2 compile: 'm51 ^19'. self assert: aC2 m51 = 19. self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51). "change superclass of C2 back to C1" self c1 subclass: self c2 name uses: self c2 traitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self c2 category. self assert: (aC2 m51 = 19). self assert: self c2 superclass == self c1. self assert: (self c2 localSelectors includes: #m51). self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!!!" self assert: self c2 traitCompositionString = 'T5 - {#m11}'. self assert: self c2 selectors sorted = #(bar foo m12 m13 m21 m22 m51 m52 m53). self assert: self c2 localSelectors sorted = #(bar foo m51).! ! !SearchFacade class methodsFor: 'protocol search' stamp: 'MarcusDenker 10/8/2013 13:01' prior: 69997292! protocolSearchIn: aCollection ^ ListDialogWindow new getList: [ :r| aCollection sorted select: [:e | r search: e ]]; displayBlock: [:e | e ]; title: 'Protocol search'; yourself. ! ! "RPackage-Core"! "RPackage-SystemIntegration"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(8 October 2013 1:33:20 pm) Pharo.image priorSource: 19669136! ----STARTUP----an Array(8 October 2013 1:39:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 October 2013 1:39:19 pm) Pharo-30463.image priorSource: 19686420! ----STARTUP----an Array(9 October 2013 8:05:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/9/2013 08:02' prior: 70001089! commentForCurrentUpdate ^ '11822 remove ClassCommentVersionBrowser https://pharo.fogbugz.com/f/cases/11822 11824 NewVersionBrowser: add #browseVersionsForClass: selector: https://pharo.fogbugz.com/f/cases/11824 11823 remove unneded builder methods (messagenames, messageset) from MorphicUIManager https://pharo.fogbugz.com/f/cases/11823 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/9/2013 08:02'! script119 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.286.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.109.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.944.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.937.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.636.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1306.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/9/2013 08:02'! update30464 "self new update30464" self withUpdateLog: '11822 remove ClassCommentVersionBrowser https://pharo.fogbugz.com/f/cases/11822 11824 NewVersionBrowser: add #browseVersionsForClass: selector: https://pharo.fogbugz.com/f/cases/11824 11823 remove unneded builder methods (messagenames, messageset) from MorphicUIManager https://pharo.fogbugz.com/f/cases/11823 '. self loadTogether: self script119 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewVersionBrowser class methodsFor: 'protocol' stamp: 'MarcusDenker 9/28/2013 20:57'! browseVersionsForClass: aClass selector: aSelector self browseVersionsOf: (aClass compiledMethodAt: aSelector) class: aClass meta: aClass isMeta category: (aClass organization categoryOfElement: aSelector) selector: aSelector! ! !StringHolder methodsFor: '*Tools' stamp: 'MarcusDenker 10/8/2013 16:54' prior: 51145338! browseVersions "Create and schedule a Versions Browser, showing all versions of the currently selected message. Answer the browser or nil." | selector class | self classCommentIndicated ifTrue: [ ^nil ]. (selector := self selectedMessageName) ifNil:[ self inform: 'Sorry, only actual methods have retrievable versions.'. ^nil ] ifNotNil: [ class := self selectedClassOrMetaClass. ^Smalltalk tools versionBrowser browseVersionsOf: (class compiledMethodAt: selector) class: self selectedClass meta: class isMeta category: (class organization categoryOfElement: selector) selector: selector]! ! ClassCommentVersionsBrowser removeSelector: #versionsMenu:! ClassCommentVersionsBrowser removeSelector: #updateListsAndCodeIn:! ClassCommentVersionsBrowser removeSelector: #shoutAboutToStyle:! ClassCommentVersionsBrowser removeSelector: #selectedClass! ClassCommentVersionsBrowser removeSelector: #scanVersionsOf:! ClassCommentVersionsBrowser removeSelector: #reformulateList! ClassCommentVersionsBrowser removeSelector: #priorSourceOrNil! ClassCommentVersionsBrowser removeSelector: #offerVersionsHelp! ClassCommentVersionsBrowser removeSelector: #diffedVersionContents! ClassCommentVersionsBrowser removeSelector: #contentsSymbolQuints! ClassCommentVersionsBrowser removeSelector: #compareToCurrentVersion! ClassCommentVersionsBrowser removeSelector: #classCommentIndicated! ClassCommentVersionsBrowser class removeSelector: #timeStampFor:class:reverseOrdinal:! ClassCommentVersionsBrowser class removeSelector: #patchworkUIThemeColor! ClassCommentVersionsBrowser class removeSelector: #commentRecordsOf:! ClassCommentVersionsBrowser class removeSelector: #classCommentVersionsListMenu:! ClassCommentVersionsBrowser class removeSelector: #browseCommentOf:! Smalltalk globals removeClassNamed: #ClassCommentVersionsBrowser! AbstractTool removeSelector: #browseCommentVersionsOf:! MorphicUIManager removeSelector: #messageSet:inMorphicWindowLabeled:! MorphicUIManager removeSelector: #messageNames:inMorphicWindowWithInitialSearchString:! "Polymorph-Widgets"! "Spec-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(9 October 2013 8:05:25 am) Pharo.image priorSource: 19686623! ----STARTUP----an Array(9 October 2013 8:11:21 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 October 2013 8:11:21 am) Pharo-30464.image priorSource: 19700477! ----STARTUP----an Array(9 October 2013 11:05:11 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/9/2013 11:02' prior: 70018575! commentForCurrentUpdate ^ '11827 #removeClassNamed: should not log to transcript https://pharo.fogbugz.com/f/cases/11827 11826 Small cleanup in SystemNavigation https://pharo.fogbugz.com/f/cases/11826 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/9/2013 11:02'! script120 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.169.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-StephaneDucasse.95.mcz Network-MIME-MarcusDenker.59.mcz Network-Mail-MarcusDenker.25.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-StephaneDucasse.7.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.91.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.944.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.940.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.636.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1307.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/9/2013 11:02'! update30465 "self new update30465" self withUpdateLog: '11827 #removeClassNamed: should not log to transcript https://pharo.fogbugz.com/f/cases/11827 11826 Small cleanup in SystemNavigation https://pharo.fogbugz.com/f/cases/11826 '. self loadTogether: self script120 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 08:51' prior: 51578169! allImplementedMessages "Answer a Collection of all the messages that are implemented in the system." | messages | messages := IdentitySet new. self allBehaviorsDo: [:each | messages addAll: each selectors]. ^ messages! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 09:00' prior: 51587386! allSentMessages "Answer the set of selectors which are sent somewhere in the system." | sent | sent := IdentitySet new. self allBehaviorsDo: [:each | each selectors do: [:sel | "Include all sels, but not if sent by self" (each compiledMethodAt: sel) literalsDo: [:m | (m isSymbol) ifTrue: ["might be sent" m == sel ifFalse: [sent add: m]]. (m isMemberOf: Array) ifTrue: ["might be performed" m do: [:x | (x isSymbol) ifTrue: [x == sel ifFalse: [sent add: x]]]]]]]. "The following may be sent without being in any literal frame" 1 to: Smalltalk specialSelectorSize do: [:index | sent add: (Smalltalk specialSelectorAt: index)]. ^ sent! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 08:24' prior: 51591124! allUnsentMessages "SystemNavigation new allUnSentMessages" "Answer the set of selectors that are implemented by some object in the system but not sent by any." ^self allImplementedMessages copyWithoutAll: self allSentMessages! ! !SystemNavigation methodsFor: 'packages' stamp: 'LucFabresse 10/11/2010 21:31' prior: 51555347! categoriesInPackageNamed: packageName ^(self environment organization categoriesMatching: packageName), (self environment organization categoriesMatching: (packageName, '-*'))! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 09:05' prior: 51598314! unimplemented "Answer an Array of each message that is sent by an expression in a method but is not implemented by any object in the system." | all unimplemented | all := IdentitySet new. self allBehaviorsDo: [:cl | cl selectorsDo: [:aSelector | all add: aSelector]]. unimplemented := IdentityDictionary new. self allBehaviorsDo: [:cl | cl selectorsAndMethodsDo: [:sel :meth | meth messages do: [:m | | entry | (all includes: m) ifFalse: [ entry := unimplemented at: m ifAbsent: [Array new]. entry := entry copyWith: (cl name, '>', sel). unimplemented at: m put: entry]]]]. ^ unimplemented ! ! !Symbol class methodsFor: 'private' stamp: 'MarcusDenker 10/9/2013 10:42' prior: 51364882! hasInterned: aString ifTrue: symBlock "Answer with false if aString hasnt been interned (into a Symbol), otherwise supply the symbol to symBlock and return true." ^ (self lookup: aString) ifNil: [ false ] ifNotNil: [ :symbol | symBlock value: symbol. true ]! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'MarcusDenker 10/9/2013 10:41' prior: 51503740! hasClassNamed: aString "Answer whether there is a class of the given name, but don't intern aString if it's not alrady interned." Symbol hasInterned: aString ifTrue: [:aSymbol | ^ (self at: aSymbol ifAbsent: [nil]) isKindOf: Class]. ^ false! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'MarcusDenker 10/9/2013 10:39' prior: 46501917! removeClassNamed: aName "Invoked from fileouts: if there is currently a class in the system named aName, then remove it" self at: aName asSymbol ifPresent: [:oldClass | oldClass removeFromSystem]! ! PackageOrganizer removeSelector: #allPackagesContainingUnimplementedCalls! SystemNavigation removeSelector: #browseMethodsWithLiteral:! SystemNavigation removeSelector: #allUnSentMessagesWithout:! SystemNavigation removeSelector: #allSentMessagesWithout:! SystemNavigation removeSelector: #allSelectorsWithAnyImplementorsIn:! SystemNavigation removeSelector: #allImplementedMessagesWithout:! SystemNavigation removeSelector: #allGlobalRefsWithout:! SystemNavigation removeSelector: #allGlobalRefs! SystemNavigation removeSelector: #allClassesWithUnimplementedCalls! "Collections-Strings"! "PackageInfo"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(9 October 2013 11:05:19 am) Pharo.image priorSource: 19700680! ----STARTUP----an Array(9 October 2013 11:11:16 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 October 2013 11:11:16 am) Pharo-30465.image priorSource: 19715825! ----STARTUP----an Array(9 October 2013 5:28:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/9/2013 17:25' prior: 70032633! commentForCurrentUpdate ^ '7416 SystemNavigation should return CompiledMethod or RGMethodDefinition https://pharo.fogbugz.com/f/cases/7416 11829 Small critic cleanup in Network https://pharo.fogbugz.com/f/cases/11829 11830 Small Critic Cleanup in System-Support https://pharo.fogbugz.com/f/cases/11830'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/9/2013 17:26'! script121 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.944.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.943.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.636.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1307.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/9/2013 17:26'! update30466 "self new update30466" self withUpdateLog: '7416 SystemNavigation should return CompiledMethod or RGMethodDefinition https://pharo.fogbugz.com/f/cases/7416 11829 Small critic cleanup in Network https://pharo.fogbugz.com/f/cases/11829 11830 Small Critic Cleanup in System-Support https://pharo.fogbugz.com/f/cases/11830'. self loadTogether: self script121 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 68707319! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 11:26' prior: 51592991! installedMethodsWithIncorrectTrailerKind ^self allMethodsSelect: [:each | (#(#SourcePointer #VarLengthSourcePointer #NativeCodeTrailer) includes: each trailer kind) not and: [ each isInstalled ] ]! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 11:26' prior: 34645181! instanceSideMethodsWithNilKeyInLastLiteral "This answers all the instance side methods that has NIL as the key in their last literal. There should be none (only class side methods have this)" ^ self allMethodsSelect: [ :each | (((each literalAt: each numLiterals) key isNil and: [ (each literalAt: each numLiterals) value isMeta not ]) and: [ each methodClass ~= UndefinedObject ]) and: [ each isInstalled ] ]! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/9/2013 11:27' prior: 51594177! methodsWithUnboundGlobals "This says that for any global, it should match either the class's notion of what bindingOf: the key is, or bindingOf: should be nil and the binding should be in Undeclared. If the class answers a different binding through bindingOf: or answers no binding and the binding is not in Undeclared then the variable in the method is wrong. For a clean image the result should be empty. If it is not empty, evaluating Compiler recompileAll probably solves the problem. However, we should investigate why the method gets an incorrect state." "SystemNavigation new methodsWithUnboundGlobals" ^self allMethodsSelect: [:m| m literals anySatisfy: [:l| l isVariableBinding and: [l key isSymbol "avoid class-side methodClass literals" and: [(m methodClass bindingOf: l key) ifNil: [(Undeclared associationAt: l key ifAbsent: []) ~~ l] ifNotNil: [:b| b ~~ l]]]]]! ! !TextMessageLink class methodsFor: 'instance creation' stamp: 'MarcusDenker 10/9/2013 16:35' prior: 52740795! message: aMessage ^self new initialize: aMessage! ! !Dictionary methodsFor: 'removing' stamp: 'MarcusDenker 10/9/2013 11:29' prior: 20728736! unreferencedKeys "| uk | (Time millisecondsToRun: [uk := TextConstants unreferencedKeys]) -> uk" ^'Scanning for references . . .' displayProgressFrom: 0 to: Smalltalk globals classNames size * 2 during: [:bar | | currentClass n associations referencedAssociations | currentClass := nil. n := 0. associations := self associations asIdentitySet. referencedAssociations := IdentitySet new: associations size. self systemNavigation allMethodsSelect: [:m| m methodClass ~~ currentClass ifTrue: [currentClass := m methodClass. bar current: (n := n + 1)]. m literalsDo: [:l| (l isVariableBinding and: [associations includes: l]) ifTrue: [referencedAssociations add: l]]. false]. ((associations reject: [:assoc | referencedAssociations includes: assoc]) collect: [:assoc| assoc key]) asSet]! ! !ChangesLog methodsFor: 'private' stamp: 'MarcusDenker 10/9/2013 17:05' prior: 18916462! forceChangesToDisk "Ensure that the changes file has been fully written to disk by closing and re-opening it. This makes the system more robust in the face of a power failure or hard-reboot." | changesFile | changesFile := SourceFiles at: 2. (changesFile isKindOf: FileStream) ifFalse: [ ^ self ]. changesFile flush. changesFile close. changesFile open: changesFile name forWrite: true. changesFile setToEnd! ! !FileUrl methodsFor: 'private-initialization' stamp: 'MarcusDenker 10/9/2013 16:33' prior: 68700457! privateInitializeFromText: aString "Calculate host and path from a file URL in String format. Some malformed formats are allowed and interpreted by guessing." | schemeName pathString bare char i | bare := aString trimBoth. schemeName := Url schemeNameForString: bare. (schemeName isNil or: [schemeName ~= self schemeName]) ifTrue: [ host := ''. pathString := bare] ifFalse: [ "First remove schemeName and colon" bare := bare copyFrom: (schemeName size + 2) to: bare size. "A proper file URL then has two slashes before host, A malformed URL is interpreted as using syntax file:." (bare beginsWith: '//') ifTrue: [i := bare indexOf: $/ startingAt: 3. i=0 ifTrue: [ host := bare copyFrom: 3 to: bare size. pathString := ''] ifFalse: [ host := bare copyFrom: 3 to: i-1. pathString := bare copyFrom: host size + 3 to: bare size]] ifFalse: [host := ''. pathString := bare]]. self initializeFromPathString: pathString ! ! !Base64MimeConverter class methodsFor: 'class initialization' stamp: 'tk 12/9/97 13:53' prior: 17974920! initialize FromCharTable := Array new: 256. "nils" ToCharTable := Array new: 64. ($A asciiValue to: $Z asciiValue) doWithIndex: [:val :ind | FromCharTable at: val+1 put: ind-1. ToCharTable at: ind put: val asCharacter]. ($a asciiValue to: $z asciiValue) doWithIndex: [:val :ind | FromCharTable at: val+1 put: ind+25. ToCharTable at: ind+26 put: val asCharacter]. ($0 asciiValue to: $9 asciiValue) doWithIndex: [:val :ind | FromCharTable at: val+1 put: ind+25+26. ToCharTable at: ind+26+26 put: val asCharacter]. FromCharTable at: $+ asciiValue + 1 put: 62. ToCharTable at: 63 put: $+. FromCharTable at: $/ asciiValue + 1 put: 63. ToCharTable at: 64 put: $/. ! ! !Base64MimeConverter class methodsFor: 'convenience' stamp: 'dik 9/22/2010 18:08' prior: 17976757! mimeEncode: aStream "Return a ReadWriteStream of characters. The data of aStream is encoded as 65 innocuous characters. (See class comment). 3 bytes in aStream goes to 4 bytes in output." ^self mimeEncode: aStream multiLine: true! ! !SystemOrganizer methodsFor: 'filein/out' stamp: 'MarcusDenker 10/9/2013 17:06' prior: 39984768! fileOutCategory: category on: aFileStream initializing: aBool "Store on the file associated with aFileStream, all the traits and classes associated with the category and any requested shared pools in the right order." | poolSet tempClass classes traits | traits := self orderedTraitsIn: category. classes := self superclassOrder: category. poolSet := Set new. classes do: [:class | class sharedPools do: [:eachPool | poolSet add: eachPool]]. poolSet notEmpty ifTrue: [ tempClass := Class new. tempClass shouldFileOutPools ifTrue: [ poolSet := poolSet select: [:aPool | tempClass shouldFileOutPool: (Smalltalk globals keyAtIdentityValue: aPool)]. poolSet do: [:aPool | tempClass fileOutPool: aPool onFileStream: aFileStream]]]. traits, classes do: [:each | each fileOutOn: aFileStream moveSource: false toFile: 0 initializing: false] separatedBy: [ aFileStream cr; nextPut: Character newPage; cr ]. aBool ifTrue: [classes do: [:cls | cls fileOutInitializerOn: aFileStream]].! ! !NetNameResolver class methodsFor: 'lookups' stamp: 'MarcusDenker 10/9/2013 16:32' prior: 28344118! promptUserForHostAddressDefault: defaultName "Ask the user for a host name and return its address. If the default name is the empty string, use the last host name as the default." "NetNameResolver promptUserForHostAddressDefault: ''" | default hostName serverAddr | default := defaultName isEmpty ifTrue: [ DefaultHostName ] ifFalse: [ defaultName ]. hostName := UIManager default request: 'Host name or address?' initialAnswer: default. hostName isEmptyOrNil ifTrue: [ ^ 0 ]. serverAddr := NetNameResolver addressForName: hostName timeout: 15. hostName size > 0 ifTrue: [ DefaultHostName := hostName ]. ^ serverAddr! ! !SystemDictionary methodsFor: 'accessing' stamp: 'MarcusDenker 10/9/2013 17:07' prior: 51496402! poolUsers "Answer a dictionary of pool name -> classes that refer to it. Also includes any globally know dictionaries (such as Smalltalk, Undeclared etc) which although not strictly accurate is potentially useful information" "Smalltalk poolUsers" | poolUsers | poolUsers := Dictionary new. self keysDo: [ :k | | pool refs | "yes, using isKindOf: is tacky but for reflective code like this it is very useful. If you really object you can:- a) go boil your head. b) provide a better answer. your choice." (((pool := self at: k) isKindOf: Dictionary) or: [ pool isKindOf: SharedPool class ]) ifTrue: [ refs := self systemNavigation allClasses select: [ :c | c sharedPools identityIncludes: pool ] thenCollect: [ :c | c name ]. refs add: (self systemNavigation allReferencesTo: (self associationAt: k)). poolUsers at: k put: refs ] ]. ^ poolUsers! ! !MailAddressTokenizer class methodsFor: 'instance creation' stamp: 'MarcusDenker 10/9/2013 16:35' prior: 25284367! forString: aString ^self basicNew initialize: aString! ! !MailAddressTokenizer methodsFor: 'tokenizing' stamp: 'MarcusDenker 10/9/2013 16:32' prior: 25281249! nextComment | start nestLevel paren | start := pos. pos := pos + 1. nestLevel := 1. [ nestLevel > 0 ] whileTrue: [ pos := text indexOfAnyOf: CSParens startingAt: pos ifAbsent: [ 0 ]. pos = 0 ifTrue: [ self error: 'unterminated comment. ie, more (''s than )''s' ]. paren := self nextChar. nestLevel := paren = $( ifTrue: [ nestLevel + 1 ] ifFalse: [ nestLevel - 1 ] ]. ^ MailAddressToken type: #Comment text: (text copyFrom: start to: pos - 1)! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'MarcusDenker 10/9/2013 16:32' prior: 23411260! privateInitializeFromText: aString relativeTo: aUrl | remainder ind basePath | remainder := aString. "set the scheme" schemeName := aUrl schemeName. "a leading // means the authority is specified, meaning it is absolute" (remainder beginsWith: '//') ifTrue: [ ^ self privateInitializeFromText: aString ]. "otherwise, use the same authority" authority := aUrl authority. port := aUrl port. username := aUrl username. password := aUrl password. "get the query" ind := remainder indexOf: $?. ind > 0 ifTrue: [ query := remainder copyFrom: ind + 1 to: remainder size. remainder := remainder copyFrom: 1 to: ind - 1 ]. "get the path" basePath := (remainder beginsWith: '/') ifTrue: [ #() ] ifFalse: [ aUrl path ]. path := self privateParsePath: remainder relativeTo: basePath! ! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 70058933! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'MarcusDenker 10/9/2013 17:07' prior: 50344058! timeStamp: aStream "Writes system version and current time on stream aStream." | dateTime | dateTime := Time dateAndTimeNow. aStream nextPutAll: 'From ' , self datedVersion , ' [' , self lastUpdateString , '] on ' , (dateTime at: 1) printString; nextPutAll: ' at '; nextPutAll: (dateTime at: 2) printString! ! !Author class methodsFor: 'utilities' stamp: 'MarcusDenker 10/9/2013 17:05' prior: 17783421! fixStamp: changeStamp | parts | parts := changeStamp findTokens: ' '. (parts notEmpty and: [parts last first isLetter]) ifTrue: ["Put initials first in all time stamps..." ^ String streamContents: [:s | s nextPutAll: parts last. parts allButLast do: [:p | s space; nextPutAll: p]]]. ^ changeStamp! ! !SystemVersion methodsFor: 'printing' stamp: 'MarcusDenker 10/9/2013 17:07' prior: 51678382! printOn: stream stream nextPutAll: self datedVersion; nextPutAll: ' update '; nextPutAll: self highestUpdate printString! ! SystemNavigation removeSelector: #allSelect:! SocksSocket removeSelector: #waitForSocks4ConnectionReply! SocksSocket removeSelector: #waitForReply:for:! SocksSocket removeSelector: #socksError:! SocksSocket removeSelector: #socks5RequestReply! SocksSocket removeSelector: #socks5MethodSelection! SocksSocket removeSelector: #socks5! SocksSocket removeSelector: #socks4! SocksSocket removeSelector: #skipQualifiedHostName! SocksSocket removeSelector: #shouldUseSocks! SocksSocket removeSelector: #sendSocks5ConnectionRequest! SocksSocket removeSelector: #sendSocks4ConnectionRequestUserId:! SocksSocket removeSelector: #requestGrantedCode! SocksSocket removeSelector: #qualifiedHostNameCode! SocksSocket removeSelector: #noAutorizationMethod! SocksSocket removeSelector: #hostIPCode! SocksSocket removeSelector: #hostIP6Code! SocksSocket removeSelector: #dstPort! SocksSocket removeSelector: #dstIP! SocksSocket removeSelector: #defaultTimeOutDuration! SocksSocket removeSelector: #connectToHostNamed:port:! SocksSocket removeSelector: #connectTo:port:! SocksSocket removeSelector: #connectSocks5! SocksSocket removeSelector: #connectSocks4! SocksSocket removeSelector: #connectCommandCode! SocksSocket class removeSelector: #defaultSocksVersion:! SocksSocket class removeSelector: #defaultSocksVersion! SocksSocket class removeSelector: #defaultSocksPort! SocksSocket class removeSelector: #defaultSocksHostAddress! Smalltalk globals removeClassNamed: #SocksSocket! "Collections-Unordered"! "Network-Kernel"! "Network-MIME"! "Network-Mail"! "Network-RFC822"! "Network-Url"! "System-Support"! ----End fileIn----! ----QUIT----an Array(9 October 2013 5:28:26 pm) Pharo.image priorSource: 19716030! ----STARTUP----an Array(9 October 2013 5:34:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 October 2013 5:34:22 pm) Pharo-30466.image priorSource: 19740902! ----STARTUP----an Array(10 October 2013 8:30:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/10/2013 08:28' prior: 70047983! commentForCurrentUpdate ^ '11831 Simplifying SystemNavigation https://pharo.fogbugz.com/f/cases/11831'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/10/2013 08:28'! script122 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.944.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.11.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.945.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/10/2013 08:28'! update30467 "self new update30467" self withUpdateLog: '11831 Simplifying SystemNavigation https://pharo.fogbugz.com/f/cases/11831'. self loadTogether: self script122 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation methodsFor: '*Tools' stamp: 'MarcusDenker 10/9/2013 17:53' prior: 51522581! browseUnsentMessagesInClass: aClass "SystemNavigation new browseUnsentMessagesInClass: Browser" | unsentMessages | unsentMessages := self unsentMessagesWithProgressBarInClass: aClass. ^self browseMessageList: unsentMessages name: 'Unsent messages in class ', aClass name ! ! SystemNavigationTest removeSelector: #testIsUnsentMessagesInPackage! SystemNavigationTest removeSelector: #testIsUnsentMessagesInClass! SystemNavigationTest removeSelector: #testIsUnsentMessagesInCategory! SystemNavigationTest removeSelector: #testIsUnsentMessagesAnswerMethodReferences! SystemNavigationTest removeSelector: #testIsMessageSentInPackageWithTheSelectorInsideAnArray! SystemNavigationTest removeSelector: #testIsMessageSentInPackageWithClassesActuallySendngTheMessage! SystemNavigationTest removeSelector: #testIsMessageSentInMetaclassWithTheSelectorInsideAnArray! SystemNavigationTest removeSelector: #testIsMessageSentInMetaclassActuallySendingTheMessage! SystemNavigationTest removeSelector: #testIsMessageSentInClassWithTheSelectorInsideAnArray! SystemNavigationTest removeSelector: #testIsMessageSentInClassActuallySendingTheMessage! SystemNavigationTest removeSelector: #testIsMessageSentInCategoryWithTheSelectorInsideAnArray! SystemNavigationTest removeSelector: #testIsMessageSentInCategoryWithClassesActuallySendingTheMessage! SystemNavigationTest removeSelector: #testAllSendersOfASelectorInAClass! SystemNavigation removeSelector: #unsentMessagesInPackageNamed:! SystemNavigation removeSelector: #unsentMessagesInClass:! SystemNavigation removeSelector: #unsentMessagesInCategory:! SystemNavigation removeSelector: #removeUnsentMessagesWithProgressBarInClass:! SystemNavigation removeSelector: #isMessage:sentInPackageNamed:! SystemNavigation removeSelector: #isMessage:sentInClassCategory:! SystemNavigation removeSelector: #isMessage:sentInClass:! SystemNavigation removeSelector: #doWithProgressBarForAllUnsentMessages:! SystemNavigation removeSelector: #browseAllUnsentMessages! SystemNavigation removeSelector: #browseAllSendersOf:from:! SystemNavigation removeSelector: #browseAllObjectReferencesTo:except:ifNone:! SystemNavigation removeSelector: #browseAllCallsOn:from:! SystemNavigation removeSelector: #allUnsentMessagesWithProgressBar! SystemNavigation removeSelector: #allSendersOf:inPackageNamed:! SystemNavigation removeSelector: #allSendersOf:inClassCategory:! SystemNavigation removeSelector: #allSendersOf:inClass:! SystemNavigation removeSelector: #addSelectorsReferingTo:in:to:special:byte:! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(10 October 2013 8:30:24 am) Pharo.image priorSource: 19741105! ----STARTUP----an Array(10 October 2013 8:36:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 October 2013 8:36:20 am) Pharo-30467.image priorSource: 19754596! ----STARTUP----an Array(10 October 2013 12:51:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/10/2013 12:49' prior: 70073059! commentForCurrentUpdate ^ '11786 CheckBoxModel>>doesNotUnderstand: #widthToDisplayInList: https://pharo.fogbugz.com/f/cases/11786 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/10/2013 12:49'! script123 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.631.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1634.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.58.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.19.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.66.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.944.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.13.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.945.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/10/2013 12:49'! update30468 "self new update30468" self withUpdateLog: '11786 CheckBoxModel>>doesNotUnderstand: #widthToDisplayInList: https://pharo.fogbugz.com/f/cases/11786 '. self loadTogether: self script123 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractAdapter methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:15'! isMorphicAdapter ^ false! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! beginsWith: aString fromList: aMorph "This method is used bu the list for the search of elements when you are typing directly in the list" ^ self ensureMorphicAdapterDo: [ :adapter | adapter beginsWith: aString fromList: aMorph ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! ensureMorphicAdapter ^ self dependents detect: [:e | e isMorphicAdapter ] ifNone: [ self buildWithSpec ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! ensureMorphicAdapterDo: aBlock ^ aBlock value: self ensureMorphicAdapter! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! heightToDisplayInList: aList "Return the width of my representation as a list item" ^ self ensureMorphicAdapterDo: [ :adapter | adapter heightToDisplayInList: aList ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! heightToDisplayInTree: aTree "Return the width of my representation as a list item" ^ self ensureMorphicAdapterDo: [ :adapter | adapter heightToDisplayInTree: aTree ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph "Specify how this object as a list item should be drawn" ^ self ensureMorphicAdapterDo: [ :adapter | adapter listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph "Specify how this object as a list item should be drawn" ^ self ensureMorphicAdapterDo: [ :adapter | adapter treeRenderOn: aCanvas bounds: drawBounds color: drawColor font: aFont from: aMorph ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! widthToDisplayInList: aList "Return the width of my representation as a list item" ^ self ensureMorphicAdapterDo: [ :adapter | adapter widthToDisplayInList: aList ]! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/10/2013 12:22'! widthToDisplayInTree: aTree "Return the width of my representation as a list item" ^ self ensureMorphicAdapterDo: [ :adapter | adapter widthToDisplayInTree: aTree ]! ! !AbstractMorphicAdapter methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 10/10/2013 12:15'! isMorphicAdapter ^ true! ! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----an Array(10 October 2013 12:51:18 pm) Pharo.image priorSource: 19754801! ----STARTUP----an Array(10 October 2013 12:57:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(10 October 2013 12:57:19 pm) Pharo-30468.image priorSource: 19768628! ----STARTUP----an Array(11 October 2013 8:14:17 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/11/2013 08:10' prior: 70086757! commentForCurrentUpdate ^ '11842 Trivia critic cleanup in Kernel https://pharo.fogbugz.com/f/cases/11842 11845 Do not use the *do: versions of #*ifNotEmpty* https://pharo.fogbugz.com/f/cases/11845 11843 Trivial critic cleanup in keychain https://pharo.fogbugz.com/f/cases/11843 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/11/2013 08:11'! script124 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.630.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1637.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.946.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.13.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.945.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/11/2013 08:11'! update30469 "self new update30469" self withUpdateLog: '11842 Trivia critic cleanup in Kernel https://pharo.fogbugz.com/f/cases/11842 11845 Do not use the *do: versions of #*ifNotEmpty* https://pharo.fogbugz.com/f/cases/11845 11843 Trivial critic cleanup in keychain https://pharo.fogbugz.com/f/cases/11843 '. self loadTogether: self script124 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Process commentStamp: 'IgorStasenko 11/7/2011 11:25' prior: 68812963! I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced partly using the value of priority. (If anyone ever makes a subclass of Process, be sure to use allSubInstances in anyProcessesAbove:.) Process-specific storage: An old implementation using #environmentAt: [ifAbsent:/put:] protocol are no longer supported. One must not use a process-specific storage (PSS) methods directly, and instead use ProcessSpecificVariable (or subclass) instances to access process-specific storage. A new implemention is a revision towards making an access to PSS faster. When new instance of ProcessSpecificVariable are created, it obtains an unique index, which is registered using #allocatePSKey: (see class side). This allows to dynamically create as many process-specific variables as needed, and access them in fast manner via simple array index (instead of dictionary lookup, as in previous implementation). Another important aspect of new implementation is that all values in PSS are held weakly. This is done to prevent accidental memory leaks as well as no need to manually unregistering a process-specific keys , once they are no longer in use.! !RelativeInstructionPrinter methodsFor: 'instruction decoding' stamp: 'MarcusDenker 6/6/2012 14:33' prior: 32244505! pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize self print: 'closureNumCopied: ', numCopied printString , ' numArgs: ', numArgs printString. innerIndents atAll: (scanner pc to: scanner pc + blockSize - 1) put: (innerIndents at: scanner pc - 1) + 1! ! !MCConfiguration methodsFor: 'private' stamp: 'MarcusDenker 10/10/2013 23:26' prior: 24672265! depsSatisfying: selectBlock versionDo: verBlock displayingProgress: progressString | repoMap count | repoMap := Dictionary new. self repositories do: [:repo | MCRepositoryGroup default addRepository: repo. repo allVersionNames ifEmpty: [self logWarning: 'cannot read from ', repo description] ifNotEmpty: [:all | all do: [:ver | repoMap at: ver put: repo]]]. count := 0. self dependencies do: [:dep | | ver repo | ver := dep versionInfo name. repo := repoMap at: ver ifAbsent: [self logError: 'Version ', ver, ' not found in any repository'. self logError: 'Aborting'. ^count]. (selectBlock value: dep) ifTrue: [| new | new := self versionNamed: ver for: dep from: repo. new ifNil: [self logError: 'Could not download version ', ver, ' from ', repo description. self logError: 'Aborting'. ^count] ifNotNil: [ self logUpdate: dep package with: new. ProgressNotification signal: '' extra: 'Installing ', ver. verBlock value: new. count := count + 1]]. dep package workingCopy repositoryGroup addRepository: repo. ] displayingProgress: progressString. ^count! ! !MCConfiguration methodsFor: 'private' stamp: 'MarcusDenker 10/10/2013 23:26' prior: 24676399! versionNamed: verName for: aDependency from: repo | baseName fileName ver | (repo filterFileNames: repo cachedFileNames forVersionNamed: verName) ifNotEmpty: [:cachedNames | fileName := cachedNames anyOne. ProgressNotification signal: '' extra: 'Using cached ', fileName. ver := repo versionFromFileNamed: fileName]. ver ifNil: [ baseName := self diffBaseFor: aDependency. (baseName notNil and: [baseName ~= verName and: [repo includesVersionNamed: baseName]]) ifTrue: [ fileName := (MCDiffyVersion nameForVer: verName base: baseName), '.mcd'. ProgressNotification signal: '' extra: 'Downloading ', fileName. ver := repo versionFromFileNamed: fileName]]. ver ifNil: [ fileName := verName, '.mcz'. ProgressNotification signal: '' extra: 'Downloading ', fileName. ver := repo versionFromFileNamed: fileName]. ^ver! ! !Process commentStamp: 'IgorStasenko 11/7/2011 11:25' prior: 70111707! I represent an independent path of control in the system. This path of control may be stopped (by sending the message suspend) in such a way that it can later be restarted (by sending the message resume). When any one of several paths of control can be advanced, the single instance of ProcessorScheduler named Processor determines which one will actually be advanced partly using the value of priority. (If anyone ever makes a subclass of Process, be sure to use allSubInstances in anyProcessesAbove:.) Process-specific storage: An old implementation using #environmentAt: [ifAbsent:/put:] protocol are no longer supported. One must not use a process-specific storage (PSS) methods directly, and instead use ProcessSpecificVariable (or subclass) instances to access process-specific storage. A new implemention is a revision towards making an access to PSS faster. When new instance of ProcessSpecificVariable are created, it obtains an unique index, which is registered using #allocatePSKey: (see class side). This allows to dynamically create as many process-specific variables as needed, and access them in fast manner via simple array index (instead of dictionary lookup, as in previous implementation). Another important aspect of new implementation is that all values in PSS are held weakly. This is done to prevent accidental memory leaks as well as no need to manually unregistering a process-specific keys , once they are no longer in use.! !JobStartNotification class methodsFor: 'instance creation' stamp: 'CamilloBruni 8/31/2012 11:00' prior: 24088020! on: aJob ^ (self new job: aJob) signal.! ! !ProcessLocalVariable methodsFor: 'evaluating' stamp: 'IgorStasenko 11/7/2011 11:20' prior: 30010126! value: anObject Processor activeProcess psValueAt: index put: anObject! ! !UsernamePassword methodsFor: 'printing' stamp: 'MarcusDenker 10/10/2013 14:01' prior: 54601734! printOn: aStream super printOn: aStream. aStream nextPutAll: '('; nextPutAll: username printString; nextPutAll: ' -> '; nextPutAll: password asString; nextPutAll: ')'.! ! !CompiledMethod methodsFor: 'testing' stamp: 'MarcusDenker 10/10/2013 16:35' prior: 19842873! isInstalled self methodClass ifNotNil: [:class| self selector ifNotNil: [:selector| ^self == (class compiledMethodAt: selector ifAbsent: [])]]. ^false! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 10/10/2013 16:35' prior: 19789947! originMethod | selector | self properties at: #traitSource ifPresent: [ :traitMethod | ^ traitMethod ]. "Use the method dictionary because traits do not have method for accesing methods by selector" selector := self methodClass traitComposition originSelectorOf: self selector. ^ (self methodClass traitOrClassOfSelector: selector)>>selector. ! ! !KeyChain methodsFor: 'protocol' stamp: 'MarcusDenker 10/10/2013 14:02' prior: 45238497! setEncryptorDecryptor: anEncryptorDecryptor | oldDecryptor | self isUnlocked ifFalse: [ ^ self ]. oldDecryptor := encryptorDecryptor. encryptorDecryptor := anEncryptorDecryptor. groups associations do: [ :assoc | | oldUsernamePassword string | oldUsernamePassword := groups at: assoc key. string := oldDecryptor decrypt: oldUsernamePassword password base: password. groups at: assoc key put: (UsernamePassword username: oldUsernamePassword username password: (self encryptPassword: string)) ]! ! !KeyChain methodsFor: 'protocol' stamp: 'MarcusDenker 10/10/2013 14:02' prior: 38058499! setPassword: aPassword | oldPassword | (password isNil or: [ self isUnlocked ]) ifFalse: [ ^ self ]. oldPassword := password. aPassword ifNil: [ password := nil ] ifNotNil: [ password := encryptor encrypt: aPassword ]. "Since the passwords are encoded using the password, if you change the password, you have to re-encrypt the passwords" self reEncryptKeysBased: oldPassword! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 10/10/2013 23:26' prior: 51686418! aboutText "Answer the text to use for the About dialog." ^self model ifNil: ['This is a system window without a model' translated] ifNotNil: [self model class instanceSide organization classComment ifEmpty: ['The model of this window has no class comment'] ifNotEmpty: [:comment | comment]]! ! !MessageCatcher methodsFor: 'reflective operations' stamp: 'ajh 7/7/2004 18:22' prior: 25592211! doesNotUnderstand: aMessage accumulator ifNotNil: [accumulator add: aMessage]. ^ aMessage! ! !MessageCatcher methodsFor: 'private' stamp: 'ajh 7/7/2004 18:22' prior: 25592387! privAccumulator ^ accumulator! ! !MessageCatcher methodsFor: 'private' stamp: 'ajh 7/7/2004 18:22' prior: 25592502! privAccumulator: collection accumulator := collection! ! !Categorizer methodsFor: 'accessing' stamp: 'MarcusDenker 10/10/2013 16:38' prior: 18710179! changeFromCategorySpecs: categorySpecs "Tokens is an array of categorySpecs as scanned from a browser 'reorganize' pane, or built up by some other process, such as a scan of an environment." | newCategories newStops temp cc currentStop oldElements newElements | oldElements := elementArray asSet. newCategories := Array new: categorySpecs size. newStops := Array new: categorySpecs size. currentStop := 0. newElements := (Array new: 16) writeStream. 1 to: categorySpecs size do: [ :i | | selectors catSpec | catSpec := categorySpecs at: i. newCategories at: i put: catSpec first asSymbol. selectors := catSpec allButFirst collect: [ :each | each isSymbol ifTrue: [ each ] ifFalse: [ each printString asSymbol ] ]. selectors asSortedCollection do: [ :elem | (oldElements remove: elem ifAbsent: [ nil ]) notNil ifTrue: [ newElements nextPut: elem. currentStop := currentStop + 1 ] ]. newStops at: i put: currentStop ]. "Ignore extra elements but don't lose any existing elements!!" oldElements := oldElements collect: [ :elem | Array with: (self categoryOfElement: elem) with: elem ]. newElements := newElements contents. categoryArray := newCategories. (cc := categoryArray asSet) size = categoryArray size ifFalse: [ "has duplicate element" temp := categoryArray asOrderedCollection. temp removeAll: categoryArray asSet. temp do: [ :dup | | tmp ii | tmp := dup. ii := categoryArray indexOf: tmp. [ tmp := (tmp , ' #2') asSymbol. cc includes: tmp ] whileTrue. cc add: tmp. categoryArray at: ii put: tmp ] ]. categoryStops := newStops. elementArray := newElements. oldElements do: [ :pair | self classify: pair last under: pair first ]! ! !Categorizer methodsFor: 'accessing' stamp: 'MarcusDenker 10/10/2013 16:37' prior: 18719345! sortCategories | privateCategories publicCategories newCategories | privateCategories := self categories select: [ :one | (one findString: 'private' startingAt: 1 caseSensitive: false) = 1 ]. publicCategories := self categories copyWithoutAll: privateCategories. newCategories := publicCategories asSortedCollection asOrderedCollection addAll: privateCategories; asArray. self categories: newCategories! ! !SimulationExceptionWrapper class methodsFor: 'signalling' stamp: 'MarcusDenker 1/26/2011 11:23' prior: 33343645! signalForException: anError ^ self new exception: anError! ! !ClassBuilder methodsFor: 'class definition' stamp: 'MarcusDenker 10/10/2013 16:37' prior: 19110825! silentlyMoveInstVarNamed: instVarName from: srcClass to: dstClass after: prevInstVarName "Move the instvar from srcClass to dstClass. Do not perform any checks." | srcVars dstVars dstIndex newClass copyOfSrcClass copyOfDstClass copyOfOldTraitComposition copyOfOldClassTraitComposition | copyOfSrcClass := srcClass copy. copyOfDstClass := dstClass copy. srcVars := srcClass instVarNames copyWithout: instVarName. srcClass == dstClass ifTrue:[dstVars := srcVars] ifFalse:[dstVars := dstClass instVarNames]. dstIndex := dstVars indexOf: prevInstVarName. dstVars := (dstVars copyFrom: 1 to: dstIndex), (Array with: instVarName), (dstVars copyFrom: dstIndex+1 to: dstVars size). instVarMap at: srcClass name put: srcVars. instVarMap at: dstClass name put: dstVars. (srcClass inheritsFrom: dstClass) ifTrue:[ copyOfOldTraitComposition := copyOfOldClassTraitComposition := nil. dstClass hasTraitComposition ifTrue: [ copyOfOldTraitComposition := dstClass traitComposition copyTraitExpression ]. dstClass class hasTraitComposition ifTrue: [ copyOfOldClassTraitComposition := dstClass class traitComposition copyTraitExpression ]. newClass := self reshapeClass: dstClass toSuper: dstClass superclass. self recompile: false from: dstClass to: newClass mutate: true. copyOfOldTraitComposition ifNotNil: [ newClass setTraitComposition: copyOfOldTraitComposition ]. copyOfOldClassTraitComposition ifNotNil: [ newClass class setTraitComposition: copyOfOldClassTraitComposition ]. ] ifFalse:[ newClass := self reshapeClass: srcClass toSuper: srcClass superclass. (dstClass inheritsFrom: srcClass) ifFalse:[ "Disjunct hierarchies" srcClass == dstClass ifFalse:[ newClass := self reshapeClass: dstClass toSuper: dstClass superclass. self recompile: false from: dstClass to: newClass mutate: true. ]. newClass := self reshapeClass: srcClass toSuper: srcClass superclass. ]. self recompile: false from: srcClass to: newClass mutate: true. ]. self doneCompiling: srcClass. self doneCompiling: dstClass. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfSrcClass to: srcClass. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfDstClass to: dstClass.! ! !PragmaCollectorReset class methodsFor: 'instance creation' stamp: 'alain.plantec 10/19/2009 11:45' prior: 29906626! collector: aCollector ^ self new collector: aCollector! ! !PragmaCollectorReset methodsFor: 'accessing' stamp: 'DanielAvivEstebanAllende 1/29/2013 10:45' prior: 29906234! collector ^collector! ! !PragmaCollectorReset methodsFor: 'accessing' stamp: 'alain.plantec 10/19/2009 11:45' prior: 29906357! collector: aCollector collector := aCollector! ! !Integer methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 6/28/2013 13:03' prior: 41919843! asShortcut ^ self asKeyCombination! ! !UserEditor methodsFor: 'private' stamp: 'MarcusDenker 10/10/2013 14:02' prior: 54589504! ok | pharoUser newName newAddress | (pharoUser := user contents) ifNil: [ ^ self ]. newName := userName getText asString asSymbol. newAddress := gravatarAddress getText. pharoUser username = newName ifFalse: [ pharoUser username: newName ]. (newAddress ~= originalEmail and: [ self isValidAddressMail: newAddress ]) ifFalse: [ ^ self ]. pharoUser setUserName: newAddress forGroup: #gravatar. pharoUser updateGravatarFor: newAddress! ! !Object methodsFor: 'error handling' stamp: 'MarcusDenker 10/10/2013 16:35' prior: 45439860! explicitRequirement "If one of the superclasses can perform the selector, we execute the method of that class, otherwise, the explicit requirement error is thrown" | originalMethod originalSelector originalClass originalArguments errorBlock originalReceiver | originalClass := thisContext sender receiver class. originalReceiver := thisContext sender receiver. originalMethod := thisContext sender method. originalSelector := originalMethod selector. originalArguments := thisContext sender arguments. errorBlock := [ ^ self error: 'Explicitly required method' ]. originalMethod isFromTrait ifFalse: errorBlock. originalClass superclass withAllSuperclassesDo: [ :superCl | superCl compiledMethodAt: originalSelector ifPresent: [ :method | (method isProvided or: [ method isFromTrait not ]) ifTrue: [ ^ method valueWithReceiver: originalReceiver arguments: originalArguments ] ] ifAbsent: [ ] ]. ^ errorBlock value! ! TEmptySequenceableTest removeSelector: #testSequenceIfNotEmptyDoifNotEmpty! TEmptySequenceableTest removeSelector: #testSequenceIfNotEmptyDo! TEmptySequenceableTest removeSelector: #testSequenceIfEmptyifNotEmptyDo! TEmptySequenceableTest removeSelector: #testSequenceAbleIfEmptyifNotEmptyDo! TEmptyTest removeSelector: #testIfNotEmptyDoifNotEmpty! TEmptyTest removeSelector: #testIfNotEmptyDo! TEmptyTest removeSelector: #testIfEmptyifNotEmptyDo! "CollectionsTests"! "Kernel"! "KeyChain"! "Keymapping-KeyCombinations"! "MonticelloConfigurations"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(11 October 2013 8:14:28 am) Pharo.image priorSource: 19768835! ----STARTUP----an Array(11 October 2013 8:20:48 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 8:20:49 am) Pharo-30469.image priorSource: 19796699! ----STARTUP----an Array(11 October 2013 1:23:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/11/2013 13:19' prior: 70100791! commentForCurrentUpdate ^ '11839 New L&F for Pharo30 (first iteration) https://pharo.fogbugz.com/f/cases/11839 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/11/2013 13:19'! script125 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.116.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.635.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.779.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1637.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.167.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-EstebanLorenzano.950.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.225.mcz Refactoring-Critics-MarcusDenker.85.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.84.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.13.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-EstebanLorenzano.947.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.15.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/11/2013 13:19'! update30470 "self new update30470" self withUpdateLog: '11839 New L&F for Pharo30 (first iteration) https://pharo.fogbugz.com/f/cases/11839 '. self loadTogether: self script125 merge: false. Pharo3Theme beCurrent. ThemeIcons current: EclipseUIThemeIcons new. World resetWorldMenu. NautilusUI resetIconCaches. FreeTypeSystemSettings loadFt2Library: true. SourceCodeFonts setSourceCodeFonts: 10. . self flushCaches. ! ! "ScriptLoader30"! !Pharo3Theme commentStamp: '' prior: 0! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. In particular, the icons should be operating system agnostic, because, for example, people in Windows are confused by the red, yellow, green buttons of apple. - uses a limited amount of colors and effects. - is fast. self defaultSettings: nil. self beCurrent. Is adopted as the theme for Pharo3, but it was renamed to avoid collisions with the glamour team,! !Pharo3UIThemeIcons commentStamp: 'TudorGirba 1/30/2011 22:49' prior: 0! This class holds a set of icons to be used in the Glamorous UI Theme.! !Pharo3TabPanelBorder commentStamp: '' prior: 0! Specialized border for TabGroup. Does not draw border beneath the selectd tab and only draws on top.! !SourceCodeFonts commentStamp: '' prior: 0! I'm a font setting for Source Code Pro fonts.! !SourceCodeProRegular commentStamp: '' prior: 0! http://sourceforge.net/projects/sourcecodepro.adobe/ Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ! !SourceSansProRegular commentStamp: '' prior: 0! http://www.google.com/fonts/specimen/Source+Sans+Pro Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ! !EclipseUIThemeIcons commentStamp: '' prior: 0! An icon set pack taken from eclipse.! !Form methodsFor: '*Polymorph-Widgets-Themes' stamp: 'EstebanLorenzano 5/10/2013 14:56'! mergeBottomRightWith: aForm ^ self mergeWith: aForm at: self extent - aForm extent! ! !Form methodsFor: '*Polymorph-Widgets-Themes' stamp: 'EstebanLorenzano 5/10/2013 14:56'! mergeWith: aForm ^ self mergeWith: aForm at: 0@0! ! !Form methodsFor: '*Polymorph-Widgets-Themes' stamp: 'EstebanLorenzano 5/10/2013 15:28'! mergeWith: aForm at: aPoint | mergedForm | mergedForm := self deepCopy. mergedForm getCanvas translucentImage: aForm at: aPoint. ^ mergedForm ! ! !Pharo3Theme commentStamp: '' prior: 70139640! The theme is developed in the context of the Glamour project, and its goal is to create a look that: - does not look like a specific operating system. In particular, the icons should be operating system agnostic, because, for example, people in Windows are confused by the red, yellow, green buttons of apple. - uses a limited amount of colors and effects. - is fast. self defaultSettings: nil. self beCurrent. Is adopted as the theme for Pharo3, but it was renamed to avoid collisions with the glamour team,! !Pharo3Theme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:51'! baseColor ^ Color r: 210 g: 210 b: 210 range: 255! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'tg 9/5/2010 20:50'! basePassiveBackgroundColor ^ Color r: 245 g: 245 b: 245 range: 255! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'tg 9/5/2010 21:46'! baseSelectionColor ^ Color r: 97 g: 163 b: 225 range: 255! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:33'! darkBaseColor ^ Color r: 200 g: 200 b: 200 range: 255! ! !Pharo3Theme class methodsFor: 'private' stamp: 'EstebanLorenzano 10/10/2013 17:36'! importGlamorousIcons "utility method to import the icons necessary for the theme from the file system" "self importGlamorousIcons" | icons | icons := #( 'glamorousMax' 'glamorousMin' 'glamorousClose' 'glamorousMenu' 'glamorousMaxInactive' 'glamorousMinInactive' 'glamorousCloseInactive' 'glamorousMenuInactive' 'glamorousMenuPin' 'glamorousCheckboxSelected' 'glamorousCheckboxUnselected' 'glamorousRadioSelected' 'glamorousRadioUnselected'). self importIcons: icons fromFolder: 'icons' inClass: Pharo3UIThemeIcons category: '*glamour-morphic-theme'! ! !Pharo3Theme class methodsFor: 'private' stamp: 'tg 9/3/2010 14:28'! importIcons: icons fromFolder: aString inClass: aClass category: aCategory icons do: [:each | | method form | form := PNGReadWriter formFromFileNamed: aString, '/', each , '.png'. method := each , Character cr asString , (aClass methodStart: each), form storeString, aClass methodEnd. aClass class compile: method classified: aCategory ]. aClass initialize! ! !Pharo3Theme class methodsFor: 'testing' stamp: 'TudorGirba 4/7/2011 23:45'! isAbstract "Answer whether the receiver is considered to be abstract." ^false! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'TudorGirba 5/31/2012 22:35'! lightBaseColor ^ Color r: 230 g: 230 b: 230 range: 255! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'tg 9/7/2010 13:51'! lightSelectionColor ^ Color r: 175 g: 213 b: 250 range: 255! ! !Pharo3Theme class methodsFor: 'settings' stamp: 'TudorGirba 4/2/2013 23:18'! newDefaultSettings self setPreferredPreferences. BalloonMorph setBalloonColorTo: self lightSelectionColor. ^super newDefaultSettings menuColor: self baseColor; menuTitleColor: self baseColor; windowColor: self baseColor; selectionColor: self lightSelectionColor; menuSelectionColor: self baseSelectionColor; progressBarColor: self baseColor; standardColorsOnly: true; autoSelectionColor: false; preferRoundCorner: false; fadedBackgroundWindows: false; secondarySelectionColor: self veryLightSelectionColor; flatMenu: true! ! !Pharo3Theme class methodsFor: 'settings' stamp: 'EstebanLorenzano 5/23/2013 20:21'! setPreferredPreferences "NECPreferences expandPrefixes: true; popupShowWithShortcut: Character tab asShortcut."! ! !Pharo3Theme class methodsFor: 'settings' stamp: 'TudorGirba 2/16/2011 20:56'! setPreferredShoutColors "self setPreferredShoutColors" SHTextStylerST80 styleTable: #( "(symbol color [emphasisSymbolOrArray [textStyleName [pixelHeight]]])" (default black) (invalid red) (excessCode red) (comment (gray darker)) (unfinishedComment (red muchDarker)) (#'$' (red muchDarker)) (character (red muchDarker)) (integer (red muchDarker)) (number (red muchDarker)) (#- (red muchDarker)) (symbol (magenta muchDarker)) (stringSymbol (magenta muchDarker)) (literalArray (magenta muchDarker)) (string (magenta muchDarker) normal) (unfinishedString red normal) (assignment nil) (ansiAssignment nil) (literal nil italic) (keyword (black)) (binary (black)) (unary (black)) (incompleteKeyword red) (incompleteBinary red) (incompleteUnary red ) (undefinedKeyword red) (undefinedBinary red) (undefinedUnary red) (patternKeyword nil bold) (patternBinary nil bold) (patternUnary nil bold) (#self (cyan muchDarker )) (#super (cyan muchDarker )) (#true (red muchDarker)) (#false (red muchDarker)) (#nil (red muchDarker)) (#thisContext (cyan muchDarker )) (#return (cyan muchDarker ) bold) (patternArg (blue muchDarker)) (methodArg (blue muchDarker)) (blockPatternArg (blue muchDarker)) (blockArg (blue muchDarker)) (argument (blue muchDarker)) (blockArgColon black) (leftParenthesis black) (rightParenthesis black) (leftParenthesis1 (green muchDarker)) (rightParenthesis1 (green muchDarker)) (leftParenthesis2 (magenta muchDarker)) (rightParenthesis2 (magenta muchDarker)) (leftParenthesis3 (red muchDarker)) (rightParenthesis3 (red muchDarker)) (leftParenthesis4 (green darker)) (rightParenthesis4 (green darker)) (leftParenthesis5 (orange darker)) (rightParenthesis5 (orange darker)) (leftParenthesis6 (magenta darker)) (rightParenthesis6 (magenta darker)) (leftParenthesis7 blue) (rightParenthesis7 blue) (blockStart black) (blockEnd black) (blockStart1 (green muchDarker)) (blockEnd1 (green muchDarker)) (blockStart2 (magenta muchDarker)) (blockEnd2 (magenta muchDarker)) (blockStart3 (red muchDarker)) (blockEnd3 (red muchDarker)) (blockStart4 (green darker)) (blockEnd4 (green darker)) (blockStart5 (orange darker)) (blockEnd5 (orange darker)) (blockStart6 (magenta darker)) (blockEnd6 (magenta darker)) (blockStart7 blue) (blockEnd7 blue) (arrayStart black) (arrayEnd black) (arrayStart1 black) (arrayEnd1 black) (leftBrace black) (rightBrace black) (cascadeSeparator black) (statementSeparator black) (externalCallType black) (externalCallTypePointerIndicator black) (primitiveOrExternalCallStart black bold) (primitiveOrExternalCallEnd black bold) (methodTempBar (black)) (blockTempBar (black)) (blockArgsBar (black)) (primitive (green muchDarker)) (pragmaKeyword (green muchDarker)) (pragmaUnary (green muchDarker)) (pragmaBinary (green muchDarker)) (externalFunctionCallingConvention (green muchDarker) bold) (module (green muchDarker) bold) (blockTempVar (blue muchDarker)) (blockPatternTempVar (blue muchDarker)) (instVar (blue muchDarker)) (workspaceVar (blue muchDarker)) (undefinedIdentifier red) (incompleteIdentifier red) (tempVar (blue muchDarker)) (patternTempVar (blue muchDarker)) (poolConstant (blue muchDarker)) (classVar (blue muchDarker)) (globalVar (blue muchDarker))) ! ! !Pharo3Theme class methodsFor: 'settings' stamp: 'TudorGirba 4/8/2011 00:13'! setPreferredWorldBackground "self setPreferredWorldBackground" World color: Color white! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 17:44'! themeName ^ 'Pharo3'! ! !Pharo3Theme class methodsFor: 'accessing' stamp: 'TudorGirba 11/29/2012 09:19'! veryLightSelectionColor ^ self lightSelectionColor muchLighter! ! !Pharo3Theme methodsFor: 'border-styles-buttons' stamp: 'tg 9/4/2010 23:06'! buttonCornerStyleIn: aThemedMorph "If asked, we only allow square corners" ^ #square! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'tg 8/31/2010 08:32'! buttonLabelForText: aTextOrString "Answer the label to use for the given text." ^aTextOrString isString ifTrue: [(LabelMorph contents: aTextOrString) color: Color black] ifFalse: [super buttonLabelForText: aTextOrString]! ! !Pharo3Theme methodsFor: 'defaults' stamp: 'tg 9/6/2010 14:04'! buttonMinHeight "Answer the minumum height of a button for this theme." ^24! ! !Pharo3Theme methodsFor: 'defaults' stamp: 'tg 9/6/2010 14:04'! buttonMinWidth "Answer the minumum width of a button for this theme." ^24! ! !Pharo3Theme methodsFor: 'border-styles-buttons' stamp: 'TudorGirba 4/12/2011 08:18'! buttonNormalBorderStyleFor: aButton "Return the normal button borderStyle for the given button." | outerColor innerColor | (aButton valueOfProperty: #noBorder ifAbsent: [false]) ifTrue: [ ^ SimpleBorder new width: 0; baseColor: Color transparent ]. outerColor := self glamorousDarkBaseColorFor: aButton. ^SimpleBorder new width: 1; baseColor: outerColor! ! !Pharo3Theme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/3/2010 12:21'! buttonNormalFillStyleFor: aButton "Return the normal button fillStyle for the given button." (aButton valueOfProperty: #noFill ifAbsent: [false]) ifTrue: [^ SolidFillStyle color: Color transparent ]. ^ self glamorousNormalFillStyleFor: aButton height: aButton height! ! !Pharo3Theme methodsFor: 'border-styles-buttons' stamp: 'tg 8/31/2010 11:09'! buttonSelectedBorderStyleFor: aButton ^ self buttonNormalBorderStyleFor: aButton! ! !Pharo3Theme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/13/2010 10:37'! buttonSelectedFillStyleFor: aButton "Return the normal button fillStyle for the given button." | top bottom | top := self glamorousLightSelectionColorFor: aButton. bottom := self glamorousLightColorFor: aButton. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aButton bounds origin; direction: 0 @ aButton height; radial: false! ! !Pharo3Theme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 09:08'! checkboxForm "Answer the form to use for a normal checkbox." ^self checkboxUnselectedForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! checkboxSelectedForm "Answer the form to use for a selected checkbox." ^Pharo3UIThemeIcons checkboxSelectedForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! checkboxUnselectedForm "Answer the form to use for a selected checkbox." ^ Pharo3UIThemeIcons checkboxUnselectedForm! ! !Pharo3Theme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:26'! configureWatcherWindowLabelAreaFor: aWindow "Configure the label area for the given Watcher window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. " aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. " aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. " aWindow hasMenuBox ifTrue: [aWindow addMenuControl]." aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'TudorGirba 6/1/2012 19:40'! configureWindowBorderFor: aWindow " super configureWindowBorderFor: aWindow. aWindow roundedCorners: #()" | aStyle | aStyle := SimpleBorder new color: (Color lightGray); width: 1. aWindow borderStyle: aStyle.! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'TudorGirba 5/23/2012 14:24'! configureWindowDropShadowFor: aWindow aWindow hasDropShadow: false! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 00:12'! configureWindowLabelAreaFor: aWindow "Configure the label area for the given window." |padding| padding := 0. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0). aWindow hasCloseBox ifTrue: [aWindow addCloseBox. padding := padding + 1]. aWindow hasCollapseBox ifTrue: [aWindow addCollapseBox. padding := padding + 1]. aWindow hasExpandBox ifTrue: [aWindow addExpandBox. padding := padding + 1]. aWindow hasMenuBox ifTrue: [padding := padding - 1]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). aWindow basicLabel ifNotNil: [:label | aWindow labelArea addMorphBack: label; hResizing: #shrinkWrap]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0; hResizing: #spaceFill). padding > 0 ifTrue: [ aWindow labelArea addMorphBack: (Morph new extent: (aWindow boxExtent x * padding) @ 0)]. aWindow hasMenuBox ifTrue: [aWindow addMenuControl]. aWindow labelArea addMorphBack: (Morph new extent: aWindow class borderWidth @ 0)! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:17'! createCollapseBoxFor: aSystemWindow "Answer a button for minimising the window." |form msb| form := self windowMinimizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMinimizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow collapseBoxHit]; setBalloonText: 'Collapse this window' translated; extent: aSystemWindow boxExtent. ^msb! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:17'! createExpandBoxFor: aSystemWindow "Answer a button for maximising/restoring the window." |form msb| form := self windowMaximizeForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent. msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizeOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMaximizePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow expandBoxHit]; setBalloonText: 'Expand to full screen' translated; extent: aSystemWindow boxExtent. ^msb! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'tg 9/3/2010 11:34'! createMenuBoxFor: aSystemWindow "Answer a button for the window menu." " ^aSystemWindow createBox labelGraphic: (self windowMenuIconFor: aSystemWindow); extent: aSystemWindow boxExtent; actWhen: #buttonDown; actionSelector: #offerWindowMenu; setBalloonText: 'window menu' translated" |form msb| form := self windowMenuForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowMenuPassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: [aSystemWindow offerWindowMenu]; setBalloonText: 'window menu' translated; extent: aSystemWindow boxExtent. ^msb! ! !Pharo3Theme methodsFor: 'defaults' stamp: 'TudorGirba 7/26/2011 12:08'! dialogWindowPreferredCornerStyleFor: aDialogWindow "Answer the preferred corner style for the given dialog." ^#square! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/3/2010 12:30'! dockingBarNormalFillStyleFor: aToolDockingBar ^ SolidFillStyle color: Color transparent! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:47'! dropListDisabledFillStyleFor: aDropList "Return the disabled fillStyle for the given drop list." ^ self textEditorDisabledFillStyleFor: aDropList! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 22:55'! dropListNormalBorderStyleFor: aDropList "Return the normal borderStyle for the given drop list" ^ self buttonNormalBorderStyleFor: aDropList! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/4/2010 23:04'! dropListNormalFillStyleFor: aDropList "Return the normal fillStyle for the given drop list." ^ SolidFillStyle color: Color white! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 1/25/2011 15:39'! expanderTitleNormalFillStyleFor: anExpanderTitle "Return the normal expander title fillStyle for the given expander title." ^ self buttonNormalFillStyleFor: anExpanderTitle! ! !Pharo3Theme methodsFor: 'private' stamp: 'tg 9/3/2010 12:32'! glamorousBaseColorFor: aButton ^ self class baseColor "unfortunately, it looks like paneColor does not always return the wanted color" "aButton paneColorOrNil ifNil: [Color r: 200 g: 200 b: 200 range: 255]"! ! !Pharo3Theme methodsFor: 'private' stamp: 'tg 9/5/2010 20:40'! glamorousBasePassiveBackgroundColorFor: aButton ^ self class basePassiveBackgroundColor! ! !Pharo3Theme methodsFor: 'private' stamp: 'tg 9/5/2010 20:40'! glamorousBaseSelectionColorFor: aButton ^ self class baseSelectionColor! ! !Pharo3Theme methodsFor: 'private' stamp: 'tg 9/9/2010 22:50'! glamorousDarkBaseColorFor: aButton ^ self class darkBaseColor! ! !Pharo3Theme methodsFor: 'private' stamp: 'tg 9/9/2010 22:02'! glamorousLightColorFor: aButton ^ self class lightBaseColor! ! !Pharo3Theme methodsFor: 'private' stamp: 'TudorGirba 4/12/2011 08:24'! glamorousLightSelectionColorFor: aMorph ^ self class lightSelectionColor! ! !Pharo3Theme methodsFor: 'private' stamp: 'TudorGirba 4/11/2011 21:25'! glamorousNormalFillStyleFor: aMorph height: anInteger "Return the normal button fillStyle for the given button." " | baseColor | baseColor := self glamorousBaseColorFor: aMorph. ^ self glamorousNormalFillStyleWithBaseColor: baseColor for: aMorph height: anInteger " ^ SolidFillStyle color: (self glamorousLightColorFor: aMorph)! ! !Pharo3Theme methodsFor: 'private' stamp: 'TudorGirba 4/11/2011 01:37'! glamorousNormalFillStyleWithBaseColor: aColor for: aMorph height: anInteger | top bottom | top := aColor darker. bottom := aColor. ^(GradientFillStyle ramp: { 0.0->top. 0.7->bottom.}) origin: aMorph bounds origin; direction: 0 @ anInteger; radial: false! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/9/2010 23:51'! groupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a group panel." ^ SimpleBorder new width: 1; baseColor: ((self glamorousBaseColorFor: aGroupPanel))! ! !Pharo3Theme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:32'! growlBorderColorFor: aGrowlMorph ^ Color white alpha: 0.5! ! !Pharo3Theme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/17/2012 15:00'! growlContentsColorFor: aGrowlMorph ^ Color white! ! !Pharo3Theme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:16'! growlDismissHandleFor: aGrowlMorph | form image | form := self windowCloseForm. image := ImageMorph new. image image: form. image color: Color yellow. ^ image! ! !Pharo3Theme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:30'! growlFillColorFor: aGrowlMorph ^ Color darkGray alpha: 0.5! ! !Pharo3Theme methodsFor: 'growl - specific' stamp: 'TudorGirba 4/18/2012 09:12'! growlLabelColorFor: aGrowlMorph ^ Color white twiceDarker! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'TudorGirba 5/23/2012 14:22'! initialize "self beCurrent" super initialize. self windowActiveDropShadowStyle: #diffuse! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:09'! initializeForms "Initialize the receiver's image forms." |inactiveForm| super initializeForms. inactiveForm := self newWindowInactiveControlForm. self forms at: #windowCloseOver put: self newWindowCloseOverForm; at: #windowMinimizeOver put: self newWindowMinimizeOverForm; at: #windowMaximizeOver put: self newWindowMaximizeOverForm; at: #windowClosePassive put: inactiveForm; at: #windowMinimizePassive put: inactiveForm; at: #windowMaximizePassive put: inactiveForm! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:48'! listDisabledFillStyleFor: aList "Return the disabled fillStyle for the given list." ^ self textEditorDisabledFillStyleFor: aList! ! !Pharo3Theme methodsFor: 'fill-styles-buttons' stamp: 'tg 9/10/2010 08:12'! menuItemInDockingBarSelectedFillStyleFor: aMenuItem "Answer the selected fill style to use for the given menu item that is in a docking bar." ^ self buttonSelectedFillStyleFor: aMenuItem! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! menuPinForm "Answer the form to use for the pin button of a menu." ^ Pharo3UIThemeIcons menuPinForm! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:47'! morphTreeSplitterNormalFillStyleFor: aSplitter ^ self splitterNormalFillStyleFor: aSplitter! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:49'! morphTreeSplitterPressedFillStyleFor: aSplitter ^ self splitterPressedFillStyleFor: aSplitter! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newCheckboxMarkerForm "Answer a new checkbox marker form." ^Pharo3UIThemeIcons checkboxMarkerForm! ! !Pharo3Theme methodsFor: 'morph creation' stamp: 'TudorGirba 4/8/2011 01:15'! newCloseControlIn: aThemedMorph for: aModel action: aValuable help: helpText "Answer a button for closing things." |form msb| form := self windowCloseForm. msb := MultistateButtonMorph new extent: form extent. msb activeEnabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent. msb activeDisabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveEnabledNotOverUpFillStyle: (ImageFillStyle form: form). msb passiveDisabledNotOverUpFillStyle: (ImageFillStyle form: form). form := self windowCloseOverForm. msb extent: form extent. msb activeEnabledOverUpFillStyle: (ImageFillStyle form: form); passiveEnabledOverUpFillStyle: (ImageFillStyle form: form). form := self windowClosePassiveForm. msb extent: form extent; activeEnabledOverDownFillStyle: (ImageFillStyle form: form); passiveEnabledOverDownFillStyle: (ImageFillStyle form: form); addUpAction: aValuable; setBalloonText: helpText. ^msb! ! !Pharo3Theme methodsFor: 'morph creation' stamp: 'tg 9/5/2010 21:28'! newFocusIndicatorMorphFor: aMorph "Answer a new focus indicator for the given morph." |radius| radius := aMorph focusIndicatorCornerRadius. ^ BorderedMorph new fillStyle: Color transparent; borderStyle: (SimpleBorder new width: 1; baseColor: (self glamorousBaseSelectionColorFor: aMorph)); bounds: aMorph focusBounds! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newRadioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Pharo3UIThemeIcons radioButtonMarkerForm ! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'tg 9/6/2010 14:38'! newRadioMarkerForm "Answer a new checkbox marker form." ^Form extent: 12@12 depth: 32! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:06'! newTreeExpandedForm "Answer a new form for an expanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 2290649224 1200130184 478709896 4169697416 4287137928 4287137928 4287137928 4287137928 4287137928 4236806280 646482056 16777215 2508753032 4287137928 4287137928 4287137928 4287137928 4287137928 2726856840 16777215 16777215 495487112 4186474632 4287137928 4287137928 4287137928 4236806280 612927624 16777215 16777215 16777215 2542307464 4287137928 4287137928 4287137928 2676525192 16777215 16777215 16777215 16777215 478709896 4169697416 4287137928 4220029064 579373192 16777215 16777215 16777215 16777215 16777215 2424866952 4287137928 2626193544 16777215 16777215 16777215 16777215 16777215 16777215 394823816 4018702472 529041544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 864585864 16777215 16777215 16777215 16777215) offset: 0@0)! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:06'! newTreeUnexpandedForm "Answer a new form for an unexpanded tree item." ^(Form extent: 9@9 depth: 32 fromArray: #( 1049135240 461932680 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2324203656 4152920200 2458421384 428378248 16777215 16777215 16777215 16777215 16777215 2357758088 4287137928 4287137928 4152920200 2408089736 394823816 16777215 16777215 16777215 2391312520 4287137928 4287137928 4287137928 4287137928 4119365768 2324203656 344492168 16777215 2408089736 4287137928 4287137928 4287137928 4287137928 4287137928 4287137928 3968370824 780699784 2391312520 4287137928 4287137928 4287137928 4287137928 4236806280 2659747976 529041544 16777215 2357758088 4287137928 4287137928 4253583496 2810742920 646482056 16777215 16777215 16777215 2324203656 4253583496 2777188488 696813704 16777215 16777215 16777215 16777215 16777215 1200130184 663259272 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newWindowCloseForm "Answer a new form for a window close box." ^ Pharo3UIThemeIcons windowCloseForm ! ! !Pharo3Theme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:18'! newWindowCloseOverForm "Answer a new form for a window menu box." ^ self newWindowCloseForm! ! !Pharo3Theme methodsFor: 'initialize-release' stamp: 'TudorGirba 4/8/2011 01:08'! newWindowInactiveControlForm "Answer a new form for an inactive window control box." ^(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291677645 4288585374 4286085240 4284243036 4284243036 4286085240 4288585374 4291677645 0 0 0 0 0 0 0 4289572269 4285756275 4286479998 4288716960 4289835441 4289835441 4288716960 4286479998 4285756275 4289572269 0 0 0 0 0 4289506476 4284835173 4287335307 4290559164 4292598747 4293322470 4293322470 4292598747 4290559164 4287335307 4284703587 4289506476 0 0 0 4291546059 4285493103 4286414205 4288980132 4291217094 4292335575 4292598747 4292598747 4292335575 4291282887 4288980132 4286282619 4285493103 4291546059 0 0 4288980132 4285361517 4287466893 4288782753 4289835441 4290295992 4290295992 4290427578 4290164406 4289835441 4288782753 4287466893 4285361517 4288980132 0 0 4286282619 4286611584 4288059030 4288716960 4289177511 4289572269 4289835441 4289835441 4289703855 4289374890 4288782753 4288059030 4286611584 4286282619 0 0 4285164138 4287664272 4288782753 4289374890 4289835441 4290427578 4290624957 4290624957 4290559164 4290032820 4289374890 4288914339 4287664272 4285164138 0 0 4285361517 4288322202 4289703855 4290295992 4290822336 4291414473 4291677645 4291677645 4291414473 4291085508 4290427578 4289703855 4288453788 4285624689 0 0 4287072135 4288716960 4290427578 4291217094 4291677645 4292203989 4292598747 4292598747 4292335575 4291809231 4291217094 4290427578 4288716960 4287203721 0 0 4288980132 4288256409 4290624957 4291677645 4292335575 4292927712 4293256677 4293256677 4293059298 4292598747 4291809231 4290822336 4288256409 4289177511 0 0 4291677645 4287664272 4290295992 4292006610 4293059298 4293454056 4293585642 4293585642 4293454056 4293125091 4292203989 4290427578 4287730065 4291677645 0 0 4293256677 4290032820 4288124823 4291217094 4292796126 4293322470 4293717228 4293717228 4293454056 4292927712 4291677645 4288256409 4290032820 4293256677 0 0 0 4293454056 4290032820 4288322202 4289967027 4291546059 4292598747 4292664540 4291677645 4290295992 4288716960 4290032820 4293454056 0 0 0 0 0 4293322470 4292203989 4289835441 4288782753 4288322202 4288453788 4288980132 4289835441 4292335575 4293322470 0 0 0 0 0 0 0 4293059298 4293585642 4293717228 4293585642 4293585642 4293585642 4293585642 4293059298 0 0 0 0) offset: 0@0)! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newWindowMaximizeForm "Answer a new form for a window maximize box." ^ Pharo3UIThemeIcons windowMaximizeForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 14:18'! newWindowMaximizeOverForm "Answer a new form for a window menu box." ^ self newWindowMaximizeForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newWindowMenuForm "Answer a new form for a window menu box." ^ Pharo3UIThemeIcons windowMenuForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newWindowMenuPassiveForm "Answer a new form for a window menu box." ^ Pharo3UIThemeIcons windowMenuInactiveForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! newWindowMinimizeForm "Answer a new form for a window minimize box." ^ Pharo3UIThemeIcons windowMinimizeForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'FernandoOlivero 10/28/2010 15:09'! newWindowMinimizeOverForm "Answer a new form for a window menu box." ^ self newWindowMinimizeForm! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/3/2010 14:50'! plainGroupPanelBorderStyleFor: aGroupPanel "Answer the normal border style for a plain group panel." ^SimpleBorder new width: 1; baseColor: Color transparent! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:51'! progressBarFillStyleFor: aProgressBar ^ self glamorousBasePassiveBackgroundColorFor: aProgressBar! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/7/2010 13:52'! progressBarProgressFillStyleFor: aProgressBar ^ (self glamorousLightSelectionColorFor: aProgressBar)! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 4/14/2011 10:28'! progressFillStyleFor: aProgress "Return the progress fillStyle for the given progress morph." ^ self windowActiveFillStyleFor: aProgress ! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! radioButtonForm "Answer the form to use for a normal radio button." ^ Pharo3UIThemeIcons radioButtonUnselectedForm! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! radioButtonSelectedForm "Answer the form to use for a selected radio button." ^ Pharo3UIThemeIcons radioButtonSelectedForm ! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 1/14/2010 03:10'! resizerGripNormalFillStyleFor: aResizer "Return the normal fillStyle for the given resizer. For the moment, answer a transparent colour for no drawing, non transparent to draw as normal." ^Color transparent! ! !Pharo3Theme methodsFor: 'scrollbars' stamp: 'TudorGirba 5/19/2013 14:46'! scrollBarButtonArrowVertices: aRectangle ^ self verticesForSimpleArrow: aRectangle! ! !Pharo3Theme methodsFor: 'fill-styles-scrollbars' stamp: 'tg 9/13/2010 10:52'! scrollbarNormalButtonFillStyleFor: aScrollbar "Return the normal scrollbar button fillStyle for the given scrollbar." ^ self scrollbarNormalThumbFillStyleFor: aScrollbar! ! !Pharo3Theme methodsFor: 'fill-styles-scrollbars' stamp: 'tg 9/4/2010 21:03'! scrollbarNormalFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." ^ "(self glamorousBaseColorFor: aScrollbar) muchLighter" Color r: 245 g: 245 b: 245 range: 255! ! !Pharo3Theme methodsFor: 'border-styles-scrollbars' stamp: 'TudorGirba 4/8/2011 00:01'! scrollbarNormalThumbBorderStyleFor: aScrollbar "Return the normal thumb borderStyle for the given scrollbar." ^ BorderStyle simple width: 0; baseColor: Color transparent! ! !Pharo3Theme methodsFor: 'fill-styles-scrollbars' stamp: 'TudorGirba 4/11/2011 01:38'! scrollbarNormalThumbFillStyleFor: aScrollbar "Return the normal scrollbar fillStyle for the given scrollbar." "^ (self glamorousNormalFillStyleWithBaseColor: aScrollbar paneColor for: aScrollbar height: aScrollbar height) direction: (aScrollbar bounds isWide ifTrue: [0 @ aScrollbar height] ifFalse: [aScrollbar width @ 0])" ^ self glamorousNormalFillStyleFor: aScrollbar height: aScrollbar height! ! !Pharo3Theme methodsFor: 'border-styles-scrollbars' stamp: 'tg 8/31/2010 13:27'! scrollbarPagingAreaCornerStyleIn: aThemedMorph ^#square! ! !Pharo3Theme methodsFor: 'border-styles-scrollbars' stamp: 'tg 8/31/2010 13:27'! scrollbarThumbCornerStyleIn: aThemedMorph ^#square! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/4/2010 23:14'! separatorFillStyleFor: aSeparator "Return the separator fillStyle for the given separator." ^ SolidFillStyle color: (self glamorousBaseColorFor: aSeparator) darker! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:48'! sliderDisabledFillStyleFor: aSlider "Return the disabled fillStyle for the given slider." ^ self textEditorDisabledFillStyleFor: aSlider! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:41'! splitterNormalFillStyleFor: aSplitter "Return the normal splitter fillStyle for the given splitter." ^ SolidFillStyle color: Color transparent! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 8/21/2011 16:46'! splitterPressedFillStyleFor: aSplitter "Return the pressed splitter fillStyle for the given splitter." |aColor| aColor := self glamorousBaseColorFor: aSplitter. ^ (GradientFillStyle ramp: {0.0->aColor lighter. 0.9-> aColor}) origin: aSplitter topLeft; direction: (aSplitter splitsTopAndBottom ifTrue: [0 @ aSplitter height] ifFalse: [aSplitter width @ 0]); radial: false! ! !Pharo3Theme methodsFor: 'basic-colors' stamp: 'tg 9/13/2010 10:36'! subgroupColorFrom: paneColor "Answer the colour for a subgroup given the pane colour." ^ self glamorousLightColorFor: paneColor" self class baseColor"! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 8/31/2010 15:28'! tabLabelNormalBorderStyleFor: aTabLabel " ^SimpleBorder new width: 0; baseColor: (self buttonBaseColorFor: aTabLabel) darker " ^ self buttonNormalBorderStyleFor: aTabLabel! ! !Pharo3Theme methodsFor: 'fill-styles-buttons' stamp: 'tg 8/31/2010 11:13'! tabLabelNormalFillStyleFor: aTabLabel ^ self buttonNormalFillStyleFor: aTabLabel ! ! !Pharo3Theme methodsFor: 'fill-styles-buttons' stamp: 'tg 8/31/2010 11:13'! tabLabelSelectedFillStyleFor: aTabLabel ^ self buttonSelectedFillStyleFor: aTabLabel ! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'EstebanLorenzano 10/10/2013 17:36'! tabPanelBorderStyleFor: aTabGroup ^ Pharo3TabPanelBorder new width: 1; baseColor: ((self glamorousDarkBaseColorFor: aTabGroup)); tabSelector: aTabGroup tabSelectorMorph! ! !Pharo3Theme methodsFor: 'basic-colors' stamp: 'tg 9/6/2010 15:03'! taskbarButtonLabelColorFor: aButton "Answer the colour for the label of the given taskbar button." ^aButton model ifNil: [super taskbarButtonLabelColorFor: aButton] ifNotNil: [:win | win isActive ifTrue: [Color black] ifFalse: [Color gray darker]]! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/23/2012 15:32'! taskbarFillStyleFor: aTaskbar ^ "self buttonNormalFillStyleFor: aTaskbar" SolidFillStyle color: Color transparent ! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 20:23'! taskbarThumbnailCornerStyleFor: aMorph "Answer the corner style for the taskbar thumbnail/tasklist." ^#square! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 20:56'! taskbarThumbnailNormalBorderStyleFor: aWindow ^ self buttonNormalBorderStyleFor: aWindow! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/5/2010 20:46'! textEditorDisabledFillStyleFor: aTextEditor "Return the disabled fillStyle for the given text editor." ^self glamorousBasePassiveBackgroundColorFor: aTextEditor! ! !Pharo3Theme methodsFor: 'border-styles' stamp: 'tg 9/4/2010 23:09'! textEditorNormalBorderStyleFor: aTextEditor "Return the normal text editor borderStyle for the given text editor." ^self buttonNormalBorderStyleFor: aTextEditor! ! !Pharo3Theme methodsFor: 'basic-colors' stamp: 'TudorGirba 4/8/2011 00:02'! treeLineWidth "Answer the width of the tree lines." ^0! ! !Pharo3Theme methodsFor: 'scrollbars' stamp: 'tg 9/4/2010 20:16'! verticesForSimpleArrow: aRectangle "PRIVATE - answer a collection of vertices to draw a simple arrow" | vertices | vertices := OrderedCollection new. "" vertices add: aRectangle bottomLeft. vertices add: aRectangle center x @ (aRectangle top + (aRectangle width / 8)). vertices add: aRectangle bottomRight. vertices add: aRectangle bottomRight + (0@0.01). "" ^ vertices " | vertices | vertices := OrderedCollection new. vertices add: (aRectangle center x - (aRectangle width / 4)) @ (aRectangle bottom - 8). vertices add: aRectangle center x @ (aRectangle top). vertices add: (aRectangle center x + (aRectangle width / 4)) @ (aRectangle bottom - 8). vertices add: (aRectangle center x + (aRectangle width / 4)) @ (aRectangle bottom - 8) + (0@0.01). ^ vertices" " ^ super verticesForSimpleArrow: aRectangle "! ! !Pharo3Theme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:09'! watcherWindowActiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !Pharo3Theme methodsFor: 'watcher window' stamp: 'TudorGirba 5/23/2012 14:10'! watcherWindowInactiveFillStyleFor: aWindow ^ SolidFillStyle color: (Color veryVeryLightGray alpha: 0.6)! ! !Pharo3Theme methodsFor: 'accessing' stamp: 'TudorGirba 4/7/2011 23:46'! windowActiveDropShadowStyle: anObject "Set the value of windowActiveDropShadowStyle" windowActiveDropShadowStyle := anObject! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:28'! windowActiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^SolidFillStyle color: self class baseColor! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:51'! windowActiveTitleFillStyleFor: aWindow ^ "self glamorousNormalFillStyleFor: aWindow height: aWindow labelHeight" SolidFillStyle color: Color transparent! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:13'! windowCloseOverForm "Answer the form to use for mouse over window close buttons" ^self forms at: #windowCloseOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! windowClosePassiveForm "Answer the form to use for passive (background) window close buttons" ^Pharo3UIThemeIcons windowCloseInactiveForm! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'tg 9/2/2010 13:52'! windowInactiveFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^self windowActiveFillStyleFor: aWindow! ! !Pharo3Theme methodsFor: 'fill-styles' stamp: 'TudorGirba 5/31/2012 22:51'! windowInactiveTitleFillStyleFor: aWindow "We do not want the lighting effect when the window goes inactive" ^ SolidFillStyle color: Color transparent! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:14'! windowMaximizeOverForm "Answer the form to use for mouse over window maximize buttons" ^self forms at: #windowMaximizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! windowMaximizePassiveForm "Answer the form to use for passive (background) window maximize/restore buttons" ^Pharo3UIThemeIcons windowMaximizeInactiveForm! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'tg 9/3/2010 10:52'! windowMenuPassiveForm "Answer the form to use for passive (background) window menu buttons" ^self newWindowMenuPassiveForm! ! !Pharo3Theme methodsFor: 'label-styles' stamp: 'TudorGirba 4/8/2011 01:14'! windowMinimizeOverForm "Answer the form to use for mouse over window minimize buttons" ^self forms at: #windowMinimizeOver ifAbsent: [Form extent: 16@16 depth: Display depth]! ! !Pharo3Theme methodsFor: 'forms' stamp: 'EstebanLorenzano 10/10/2013 17:36'! windowMinimizePassiveForm "Answer the form to use for passive (background) window minimize buttons" ^Pharo3UIThemeIcons windowMinimizeInactiveForm! ! !Pharo3Theme methodsFor: 'defaults' stamp: 'TudorGirba 5/19/2013 21:26'! windowShadowColor "Answer the window shadow color to use." ^ Color gray! ! !UITheme methodsFor: '*Polymorph-Widgets-Themes' stamp: 'TudorGirba 5/23/2012 13:10'! configureWatcherWindowLabelAreaFor: aWindow ^ self configureWindowLabelAreaFor: aWindow! ! !UITheme methodsFor: '*Polymorph-Widgets-Themes' stamp: 'TudorGirba 5/23/2012 13:28'! watcherWindowActiveFillStyleFor: aWindow ^ self windowActiveFillStyleFor: aWindow! ! !UITheme methodsFor: '*Polymorph-Widgets-Themes' stamp: 'TudorGirba 5/23/2012 14:10'! watcherWindowInactiveFillStyleFor: aWindow ^ self windowInactiveFillStyleFor: aWindow! ! !Pharo3UIThemeIcons commentStamp: 'TudorGirba 1/30/2011 22:49' prior: 70140226! This class holds a set of icons to be used in the Glamorous UI Theme.! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:22'! checkboxMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 14:10'! checkboxSelectedForm ^ self form16x16FromContents: self checkboxSelectedFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 14:10'! checkboxSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4278190080 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! checkboxUnselectedForm ^ self form16x16FromContents: self checkboxUnselectedFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:26'! checkboxUnselectedFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 4261412864 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4261412864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:39'! form16x16FromContents: aByteArray ^ Form extent: 16@16 depth: 32 fromArray: aByteArray offset: 0@0! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! menuPinForm ^self form16x16FromContents: self menuPinFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:26'! menuPinFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 1291845632 3774873600 4194304000 3774873600 788529152 0 0 0 0 0 0 0 0 0 0 1107296256 4278190080 4278190080 4278190080 4278190080 4278190080 788529152 0 0 0 0 0 0 0 0 83886080 3992977408 4278190080 4278190080 4278190080 4278190080 4278190080 3774873600 83886080 0 0 0 0 0 0 0 100663296 4194304000 4278190080 4278190080 4278190080 4278190080 4278190080 4194304000 100663296 0 0 0 0 0 0 0 83886080 3774873600 4278190080 4278190080 4278190080 4278190080 4278190080 3992977408 83886080 0 0 0 0 0 0 0 0 1291845632 4261412864 4278190080 4278190080 4278190080 4261412864 1107296256 0 0 0 0 0 0 0 0 0 0 1107296256 3992977408 4194304000 3774873600 1291845632 0 0 0 0 0 0 0 0 0 0 0 0 83886080 100663296 83886080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 09:11'! radioButtonMarkerForm "Answer a new radio button marker form. We make it empty because we already have the selected radio button take care of the state." ^Form extent: 12@12 depth: 32! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! radioButtonSelectedForm ^ self form16x16FromContents: self radioButtonSelectedFormContents! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:27'! radioButtonSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:40'! radioButtonUnselectedForm ^ self form16x16FromContents: self radioButtonUnselectedFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:27'! radioButtonUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:14'! radioSelectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioSelectedFormContents readStream) ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:13'! radioSelectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 2214987270 4161078533 4284045657 4285690482 4285690482 4284045657 4161078533 1058280468 0 0 0 0 0 0 0 1023410176 4278190080 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 50331648 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 0 4043572228 4285690482 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4285690482 4043572228 0 0 0 0 0 33554432 3422946822 4284045657 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4284045657 3422946822 50331648 0 0 0 0 0 1006632960 4161078533 4285887861 4286611584 4286611584 4286611584 4286611584 4285887861 4278190080 1023410176 0 0 0 0 0 0 0 2214987270 4278190080 4284045657 4285690482 4285690482 4284045657 4161078533 2214987270 0 0 0 0 0 0 0 0 0 1006632960 3422946822 4043572228 4043572228 3422946822 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:14'! radioUnselectedForm ^ Form fromBinaryStream: ( Base64MimeConverter mimeDecodeToBytes: self radioUnselectedFormContents readStream) ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:13'! radioUnselectedFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 1023410176 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 2097152000 3976200192 1275068416 452984832 452984832 1275068416 3976200192 872415232 0 0 0 0 0 0 0 1023410176 4278190080 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 50331648 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 0 3909091328 452984832 0 0 0 0 0 0 452984832 3909091328 0 0 0 0 0 33554432 3238002688 1275068416 0 0 0 0 0 0 1275068416 3238002688 50331648 0 0 0 0 0 1006632960 3992977408 335544320 0 0 0 0 335544320 4278190080 1023410176 0 0 0 0 0 0 0 2097152000 4278190080 1275068416 452984832 452984832 1275068416 3976200192 2097152000 0 0 0 0 0 0 0 0 0 1006632960 3238002688 3909091328 3909091328 3238002688 1023410176 0 0 0 0 0 0 0 0 0 0 0 33554432 0 0 50331648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowCloseForm ^ self form16x16FromContents: self windowCloseFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:24'! windowCloseFormContents ^#( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167772160 0 0 0 0 0 0 0 0 167772160 3875536896 4076863488 234881024 0 234881024 2919235584 3858759680 0 0 0 0 0 0 0 0 402653184 3674210304 4261412864 3758096384 671088640 3758096384 4261412864 4278190080 335544320 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 0 0 671088640 4211081216 4261412864 4211081216 671088640 0 0 0 0 0 0 0 0 0 0 352321536 3758096384 4143972352 4211081216 4143972352 3758096384 352321536 0 0 0 0 0 0 0 0 335544320 4278190080 4244635648 3758096384 671088640 3758096384 4143972352 3724541952 402653184 0 0 0 0 0 0 0 0 3892314112 2919235584 234881024 0 234881024 4278190080 1761607680 167772160 0 0 0 0 0 0 0 0 167772160 67108864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowCloseInactiveForm ^ self form16x16FromContents: self windowCloseInactiveFromContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowCloseInactiveFromContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176193664 0 0 0 0 0 0 0 0 176193664 3883958400 4085284992 243302528 0 243302528 2927657088 3867181184 0 0 0 0 0 0 0 0 411074688 3682631808 4269834368 3766517888 679049593 3766517888 4269834368 4286611584 343965824 0 0 0 0 0 0 0 0 360282489 3766517888 4152328063 4219436927 4152393856 3766517888 360282489 0 0 0 0 0 0 0 0 0 0 679049593 4219436927 4269834368 4219436927 679049593 0 0 0 0 0 0 0 0 0 0 360282489 3766517888 4152393856 4219436927 4152328063 3766517888 360282489 0 0 0 0 0 0 0 0 343965824 4286611584 4253057152 3766517888 679049593 3766517888 4152328063 3732963456 411074688 0 0 0 0 0 0 0 0 3900735616 2927657088 243302528 0 243302528 4286611584 1769897598 176193664 0 0 0 0 0 0 0 0 176193664 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMaximizeForm ^ self form16x16FromContents: self windowMaximizeFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:07'! windowMaximizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMaximizeInactiveForm ^ self form16x16FromContents: self windowMaximizeInactiveFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowMaximizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:52'! windowMenuForm ^self form16x16FromContents: self windowMenuFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:52'! windowMenuFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 352321536 3556769792 4278190080 4278190080 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 369098752 3556769792 3556769792 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 369098752 352321536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMenuInactiveForm ^self form16x16FromContents: self windowMenuInactiveFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:15'! windowMenuInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 360282489 3565191296 4286611584 4286611584 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 377520256 3565191296 3565191296 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 377520256 360282489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:41'! windowMinimizeForm ^self form16x16FromContents: self windowMinimizeFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:09'! windowMinimizeFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/28/2010 13:42'! windowMinimizeInactiveForm ^self form16x16FromContents: self windowMinimizeInactiveFormContents ! ! !Pharo3UIThemeIcons class methodsFor: 'icons' stamp: 'FernandoOlivero 10/27/2010 15:23'! windowMinimizeInactiveFormContents ^ #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !Pharo3UIThemeIcons methodsFor: 'see class side' stamp: 'TudorGirba 1/30/2011 22:49'! seeClassSide! ! !Pharo3TabPanelBorder commentStamp: '' prior: 70140358! Specialized border for TabGroup. Does not draw border beneath the selectd tab and only draws on top.! !Pharo3TabPanelBorder methodsFor: 'drawing' stamp: 'tg 9/10/2010 07:42'! frameRectangle: aRectangle on: aCanvas "Draw the border taking the currently selected tab into account. Only works for top-positioned tabs for the moment." |w h r tab| w := self width. w isPoint ifTrue: [h := w y. w := w x] ifFalse:[h := w]. tab := self selectedTab. tab ifNil: [ r := aRectangle topLeft + (w@0) corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. ^self]. "top" r := aRectangle topLeft + (w@0) corner: tab bounds left + w@(aRectangle top + h). aCanvas fillRectangle: r color: self color. "top 1" r := tab bounds left + w@ aRectangle top corner: tab bounds right - w@(aRectangle top + h). aCanvas fillRectangle: r color: tab paneColor. "top 2" r := tab bounds right - w@ aRectangle top corner: aRectangle topRight - (w@h negated). aCanvas fillRectangle: r color: self color. "top 3"! ! !SourceCodeFonts commentStamp: '' prior: 70140516! I'm a font setting for Source Code Pro fonts.! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 11:36'! fontButton: aString size: size ^ (Smalltalk ui theme newButtonIn: World for: self getState: nil action: #setSourceCodeFonts: arguments: { size } getEnabled: nil getLabel: nil help: 'Change font style to Source Code Pro' translated) label: aString translated; yourself! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 11:36'! fontName ^ 'Source Code Pro'! ! !SourceCodeFonts class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/11/2013 12:47'! fontSourceCodeRow | theme | theme := Smalltalk ui theme. ^ theme newRowIn: World for: { theme buttonLabelForText: 'Predefined styles: ' translated. self fontButton: 'Small' size: self sizeSmall. self fontButton: 'Medium' size: self sizeMedium. self fontButton: 'Large' size: self sizeLarge. self fontButton: 'Very Large' size: self sizeVeryLarge. self fontButton: 'Huge' size: self sizeHuge } ! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:52'! setSourceCodeFonts: pointSize StandardFonts setAllStandardFontsTo: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize); haloFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize - 1); balloonFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize - 1); windowTitleFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize + 1); "listFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize); menuFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize);" codeFont: (LogicalFont familyName: 'Source Code Pro' pointSize: pointSize)! ! !SourceCodeFonts class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/11/2013 12:25'! settingsOn: aBuilder (aBuilder setting: #useSourceCode) parent: #appearance; order: 4; target: self; icon: Smalltalk ui icons smallConfigurationIcon; label: 'Source Code Fonts' translated; description: 'Use Source Code Pro Fonts' translated; precondition: [ FT2Library current notNil ]; dialog: [ self fontSourceCodeRow ]. ! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:27'! sizeHuge ^ 22! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:27'! sizeLarge ^ 16! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:27'! sizeMedium ^ 13! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 11:36'! sizeSmall ^ 10! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:27'! sizeVeryLarge ^ 18! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 11:36'! useSourceCode ! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 11:36'! useSourceCode: aBoolean ! ! !SourceCodeFonts methodsFor: 'notes' stamp: 'EstebanLorenzano 10/11/2013 11:36'! seeClassSide! ! !SourceCodeProRegular commentStamp: '' prior: 70140624! http://sourceforge.net/projects/sourcecodepro.adobe/ Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ! !SourceCodeProRegular class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/10/2013 18:18'! initialize self new install.! ! !SourceCodeProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 18:12'! fontContents ^#[0 1 0 0 0 19 1 0 0 4 0 48 66 65 83 69 139 25 148 177 0 1 182 80 0 0 0 58 68 83 73 71 179 26 106 126 0 1 182 140 0 0 32 88 71 68 69 70 47 108 48 16 0 1 161 120 0 0 0 212 71 80 79 83 11 100 7 54 0 1 162 76 0 0 8 208 71 83 85 66 224 72 244 203 0 1 171 28 0 0 11 50 79 83 47 50 114 180 208 244 0 0 1 184 0 0 0 96 99 109 97 112 236 246 201 18 0 0 17 44 0 0 10 32 99 118 116 32 0 191 11 113 0 0 29 4 0 0 0 34 102 112 103 109 6 89 156 55 0 0 27 76 0 0 1 115 103 97 115 112 255 255 0 3 0 1 161 112 0 0 0 8 103 108 121 102 219 101 123 69 0 0 36 180 0 1 31 160 104 101 97 100 251 227 249 23 0 0 1 60 0 0 0 54 104 104 101 97 6 118 4 163 0 0 1 116 0 0 0 36 104 109 116 120 211 182 88 117 0 0 2 24 0 0 15 20 108 111 99 97 94 20 165 232 0 0 29 40 0 0 7 140 109 97 120 112 5 233 2 56 0 0 1 152 0 0 0 32 110 97 109 101 200 95 235 243 0 1 68 84 0 0 60 190 112 111 115 116 132 72 4 169 0 1 129 20 0 0 32 92 112 114 101 112 38 179 35 176 0 0 28 192 0 0 0 65 0 1 0 0 0 1 4 90 21 138 51 199 95 15 60 245 0 9 3 232 0 0 0 0 205 21 160 127 0 0 0 0 205 22 17 0 255 217 254 112 2 194 3 232 0 0 0 9 0 2 0 0 0 0 0 0 0 1 0 0 3 216 254 239 0 0 2 88 255 217 255 150 2 194 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 197 0 1 0 0 3 197 0 86 0 16 0 109 0 6 0 1 0 0 0 0 0 10 0 0 2 0 1 115 0 3 0 1 0 3 2 87 1 144 0 5 0 0 2 138 2 88 0 0 0 75 2 138 2 88 0 0 1 94 0 50 1 32 0 0 2 11 5 9 3 4 3 2 2 4 32 0 0 7 0 0 24 1 0 0 0 0 0 0 0 0 65 68 66 69 0 64 0 0 251 2 2 238 255 6 0 0 3 216 1 17 96 0 1 147 0 0 0 0 1 224 2 148 0 0 0 32 0 3 2 88 0 62 0 0 0 0 2 88 0 0 2 88 0 0 2 88 0 32 2 88 0 103 2 88 0 66 2 88 0 85 2 88 0 115 2 88 0 135 2 88 0 53 2 88 0 79 2 88 0 95 2 88 0 81 2 88 0 98 2 88 0 134 2 88 0 81 2 88 0 83 2 88 0 48 2 88 0 102 2 88 0 49 2 88 0 100 2 88 0 67 2 88 0 42 2 88 0 79 2 88 0 43 2 88 0 10 2 88 0 54 2 88 0 38 2 88 0 65 2 88 0 81 2 88 0 93 2 88 0 80 2 88 0 60 2 88 0 69 2 88 0 103 2 88 0 72 2 88 0 93 2 88 0 90 2 88 0 55 2 88 0 106 2 88 0 81 2 88 0 60 2 88 0 93 2 88 0 60 2 88 0 93 2 88 0 60 2 88 0 146 2 88 0 72 2 88 0 69 2 88 0 77 2 88 0 51 2 88 0 8 2 88 0 64 2 88 0 49 2 88 0 71 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 0 32 2 88 255 255 2 88 0 27 2 88 0 66 2 88 0 66 2 88 0 66 2 88 0 66 2 88 0 66 2 88 0 85 2 88 0 85 2 88 0 85 2 88 0 16 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 115 2 88 0 53 2 88 0 53 2 88 0 53 2 88 0 53 2 88 0 53 2 88 0 53 2 88 0 53 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 10 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 95 2 88 0 81 2 88 0 98 2 88 0 134 2 88 0 134 2 88 0 134 2 88 0 134 2 88 0 134 2 88 0 67 2 88 0 134 2 88 0 53 2 88 0 81 2 88 0 83 2 88 0 83 2 88 0 83 2 88 0 83 2 88 0 83 2 88 0 83 2 88 0 83 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 45 2 88 0 33 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 48 2 88 0 100 2 88 0 100 2 88 0 100 2 88 0 100 2 88 0 100 2 88 0 100 2 88 0 67 2 88 0 67 2 88 0 67 2 88 0 67 2 88 0 67 2 88 0 67 2 88 0 67 2 88 0 79 2 88 0 42 2 88 0 42 2 88 0 42 2 88 0 42 2 88 0 42 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 79 2 88 0 10 2 88 0 10 2 88 0 10 2 88 0 10 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 38 2 88 0 65 2 88 0 65 2 88 0 65 2 88 0 65 2 88 0 16 2 88 0 101 2 88 0 62 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 17 2 88 0 20 2 88 0 80 2 88 0 80 2 88 0 80 2 88 0 80 2 88 0 80 2 88 0 51 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 10 2 88 0 93 2 88 0 93 2 88 0 20 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 90 2 88 0 55 2 88 0 106 2 88 0 106 2 88 0 81 2 88 0 81 2 88 0 43 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 81 2 88 0 60 2 88 0 93 2 88 0 93 2 88 0 93 2 88 0 93 2 88 0 93 2 88 0 93 2 88 0 93 2 88 255 234 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 11 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 146 2 88 0 116 2 88 0 146 2 88 0 135 2 88 0 135 2 88 0 77 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 72 2 88 0 88 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 69 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 77 2 88 0 8 2 88 0 8 2 88 0 8 2 88 0 8 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 49 2 88 0 71 2 88 0 71 2 88 0 71 2 88 0 71 2 88 0 60 2 88 0 93 2 88 0 55 2 88 0 94 2 88 0 60 2 88 0 93 2 88 0 61 2 88 0 63 2 88 0 69 2 88 0 60 2 88 0 77 2 88 0 46 2 88 0 63 2 88 0 54 2 88 0 51 2 88 0 8 2 88 0 49 2 88 0 26 2 88 0 52 2 88 0 57 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 60 2 88 0 42 2 88 0 71 2 88 0 98 2 88 0 69 2 88 0 57 2 88 0 39 2 88 0 56 2 88 0 77 2 88 0 70 2 88 0 68 2 88 0 67 2 88 0 71 2 88 0 98 2 88 0 69 2 88 0 57 2 88 0 39 2 88 0 56 2 88 0 78 2 88 0 70 2 88 0 68 2 88 0 67 2 88 0 219 2 88 0 197 2 88 0 219 2 88 0 197 2 88 0 32 2 88 0 227 2 88 0 227 2 88 0 109 2 88 0 123 2 88 0 245 2 88 0 131 2 88 0 209 2 88 0 217 2 88 0 95 2 88 0 103 2 88 0 217 2 88 0 103 2 88 0 197 2 88 0 211 2 88 0 83 2 88 0 97 2 88 0 85 2 88 0 85 2 88 0 80 2 88 0 20 2 88 0 80 2 88 0 20 2 88 0 219 2 88 0 151 2 88 0 60 2 88 0 208 2 88 0 122 2 88 0 226 2 88 0 99 2 88 0 120 2 88 0 99 2 88 0 99 2 88 1 7 2 88 0 99 2 88 1 7 2 88 0 84 2 88 0 127 2 88 0 127 2 88 0 91 2 88 0 72 2 88 0 30 2 88 0 30 2 88 0 112 2 88 255 251 2 88 0 15 2 88 0 49 2 88 0 49 2 88 0 87 2 88 0 104 2 88 0 134 2 88 0 134 2 88 0 85 2 88 0 161 2 88 0 208 2 88 0 174 2 88 0 172 2 88 0 172 2 88 0 172 2 88 0 176 2 88 0 183 2 88 0 175 2 88 0 173 2 88 0 236 2 88 0 213 2 88 0 254 2 88 0 244 2 88 0 161 2 88 0 208 2 88 0 174 2 88 0 172 2 88 0 172 2 88 0 172 2 88 0 176 2 88 0 183 2 88 0 175 2 88 0 173 2 88 0 236 2 88 0 213 2 88 0 254 2 88 0 244 2 88 0 161 2 88 0 208 2 88 0 173 2 88 0 172 2 88 0 172 2 88 0 172 2 88 0 176 2 88 0 183 2 88 0 175 2 88 0 173 2 88 0 236 2 88 0 213 2 88 0 254 2 88 0 244 2 88 0 161 2 88 0 208 2 88 0 174 2 88 0 172 2 88 0 172 2 88 0 172 2 88 0 176 2 88 0 183 2 88 0 175 2 88 0 173 2 88 0 236 2 88 0 213 2 88 0 254 2 88 0 244 2 88 0 167 2 88 0 137 2 88 0 142 2 88 0 167 2 88 0 172 2 88 0 181 2 88 0 137 2 88 0 160 2 88 0 198 2 88 0 149 2 88 0 175 2 88 0 175 2 88 0 140 2 88 0 189 2 88 0 196 2 88 0 130 2 88 0 175 2 88 0 142 2 88 0 172 2 88 0 137 2 88 0 243 2 88 0 162 2 88 0 164 2 88 0 159 2 88 0 147 2 88 0 82 2 88 0 159 2 88 0 140 2 88 0 146 2 88 0 160 2 88 0 160 2 88 0 154 2 88 0 137 2 88 0 137 2 88 0 175 2 88 0 58 2 88 0 85 2 88 0 77 2 88 0 53 2 88 0 58 2 88 0 113 2 88 0 49 2 88 0 96 2 88 0 78 2 88 0 47 2 88 0 43 2 88 0 109 2 88 0 43 2 88 0 84 2 88 0 96 2 88 0 108 2 88 0 56 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 48 2 88 0 28 2 88 0 28 2 88 0 39 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 28 2 88 0 85 2 88 0 85 2 88 0 102 2 88 0 85 2 88 0 216 2 88 0 85 2 88 0 120 2 88 0 107 2 88 0 85 2 88 0 85 2 88 0 85 2 88 0 111 2 88 0 85 2 88 0 76 2 88 0 76 2 88 0 85 2 88 0 39 2 88 255 252 2 88 0 77 2 88 0 76 2 88 0 186 2 88 0 62 2 88 0 36 2 88 0 29 2 88 0 70 2 88 0 52 2 88 0 117 2 88 0 26 2 88 0 17 2 88 0 33 2 88 0 29 2 88 0 33 2 88 0 201 2 88 0 159 2 88 0 119 2 88 0 166 2 88 0 38 2 88 0 38 2 88 0 72 2 88 0 72 2 88 0 38 2 88 0 38 2 88 0 33 2 88 0 33 2 88 255 231 2 88 255 231 2 88 255 250 2 88 0 77 2 88 0 98 2 88 1 0 2 88 0 169 2 88 0 209 2 88 0 217 2 88 0 245 2 88 0 219 2 88 0 185 2 88 0 235 2 88 0 168 2 88 0 168 2 88 0 249 2 88 0 177 2 88 0 235 2 88 0 185 2 88 0 249 2 88 0 158 2 88 0 150 2 88 0 177 2 88 0 170 2 88 0 207 2 88 0 202 2 88 0 234 2 88 0 221 2 88 0 234 2 88 0 185 2 88 0 169 2 88 0 235 2 88 0 249 2 88 0 168 2 88 0 164 2 88 0 158 2 88 0 155 2 88 0 177 2 88 0 176 2 88 0 170 2 88 0 177 2 88 0 234 2 88 0 243 2 88 0 150 2 88 0 165 2 88 0 236 2 88 0 236 2 88 0 207 2 88 0 207 2 88 0 202 2 88 0 191 2 88 0 168 2 88 0 164 2 88 0 108 2 88 0 108 2 88 0 247 2 88 0 253 2 88 1 35 2 88 0 234 2 88 0 165 2 88 0 215 2 88 0 215 2 88 0 210 2 88 0 234 2 88 0 234 2 88 0 174 2 88 0 176 2 88 0 168 2 88 0 168 2 88 0 168 2 88 0 168 2 88 0 168 2 88 0 164 2 88 0 168 2 88 0 168 2 88 0 184 2 88 0 172 2 88 0 184 2 88 0 172 2 88 0 184 2 88 0 172 2 88 0 169 2 88 0 168 2 88 0 174 2 88 0 178 2 88 0 174 2 88 0 178 2 88 0 174 2 88 0 178 2 88 0 169 2 88 0 167 2 88 0 176 2 88 0 172 2 88 1 6 2 88 0 231 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 255 217 2 88 255 217 2 88 1 5 2 88 0 222 2 88 0 33 2 88 0 33 2 88 1 5 2 88 0 222 2 88 0 18 2 88 0 18 2 88 1 5 2 88 0 222 2 88 1 5 2 88 1 5 2 88 0 222 2 88 0 222 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 1 5 2 88 0 222 2 88 0 222 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 1 5 2 88 0 222 2 88 0 222 2 88 0 222 2 88 0 222 2 88 0 222 2 88 0 222 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 0 75 2 88 0 75 2 88 1 5 2 88 0 222 2 88 255 217 2 88 0 183 2 88 1 5 2 88 0 183 2 88 0 183 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 0 183 2 88 0 183 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 0 183 2 88 0 183 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 255 217 2 88 255 217 2 88 1 5 2 88 255 217 2 88 255 217 2 88 255 217 2 88 255 217 2 88 1 5 2 88 1 5 2 88 1 5 2 88 255 217 2 88 0 222 2 88 1 5 2 88 0 222 2 88 255 217 2 88 0 222 2 88 255 217 2 88 0 222 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 1 44 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 2 13 2 88 0 0 2 88 1 44 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 0 0 2 88 1 44 2 88 0 0 2 88 0 0 0 0 0 3 0 0 0 3 0 0 2 20 0 1 0 0 0 0 0 28 0 3 0 1 0 0 2 20 0 6 1 248 0 0 0 9 0 247 0 3 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 232 1 237 2 23 2 120 2 139 1 206 1 236 2 1 2 2 2 11 2 150 1 228 1 248 1 227 2 7 1 207 1 208 1 209 1 210 1 211 1 212 1 213 1 214 1 215 1 216 1 229 1 230 2 156 2 155 2 157 1 234 2 21 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 2 3 2 9 2 4 2 161 2 0 2 205 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 2 5 2 8 2 6 2 163 0 0 0 60 0 63 0 80 0 90 0 142 0 151 0 195 0 234 0 233 0 235 0 237 0 236 0 240 1 1 1 11 1 10 1 12 1 14 1 39 1 38 1 40 1 42 1 65 1 72 1 71 1 73 1 75 1 74 1 117 1 116 1 118 1 120 2 12 2 118 2 124 2 121 2 14 1 255 2 15 1 109 2 18 2 16 2 19 2 206 2 215 2 162 0 78 0 163 2 167 2 160 2 158 2 159 2 122 2 168 2 169 2 174 2 175 2 166 2 170 2 84 2 86 0 0 0 255 1 87 1 235 1 233 2 165 2 171 2 125 2 164 2 172 1 246 1 247 1 231 3 33 0 56 0 59 0 150 0 164 1 88 1 250 1 251 1 240 1 241 1 238 1 239 2 153 2 198 1 146 0 221 2 136 2 123 1 244 1 245 1 173 1 174 2 13 1 254 1 242 1 243 2 140 0 58 0 91 0 57 0 93 0 89 0 118 0 119 0 121 0 117 0 148 0 149 0 0 0 147 0 192 0 193 0 191 1 50 2 207 2 214 2 216 2 217 2 220 2 218 2 221 2 219 2 222 2 208 0 4 8 12 0 0 1 26 1 0 0 7 0 26 0 0 0 13 0 47 0 57 0 64 0 90 0 96 0 122 0 126 0 191 0 196 0 209 0 214 0 223 0 228 0 241 0 246 1 49 1 73 1 101 1 126 1 128 1 143 1 146 1 161 1 176 1 220 1 231 1 235 2 27 2 55 2 67 2 82 2 84 2 89 2 97 2 101 2 111 2 121 2 135 2 142 2 158 2 176 2 179 2 184 2 188 2 191 2 204 2 221 2 227 3 4 3 12 3 15 3 19 3 27 3 36 3 40 3 46 3 49 3 192 29 67 29 73 29 77 29 80 29 82 29 88 29 91 29 156 29 160 29 187 30 15 30 33 30 37 30 43 30 59 30 73 30 99 30 111 30 133 30 143 30 147 30 151 30 158 30 249 32 7 32 21 32 26 32 30 32 34 32 38 32 48 32 51 32 58 32 68 32 113 32 121 32 127 32 137 32 142 32 148 32 161 32 164 32 167 32 172 32 178 32 181 32 186 33 19 33 23 33 32 33 34 33 38 33 46 33 84 33 94 33 147 34 2 34 6 34 15 34 18 34 21 34 26 34 30 34 43 34 72 34 96 34 101 37 159 37 160 37 179 37 183 37 189 37 193 37 198 37 202 38 17 38 106 39 19 39 82 251 2 255 255 0 0 0 0 0 13 0 32 0 48 0 58 0 65 0 91 0 97 0 123 0 160 0 192 0 197 0 210 0 215 0 224 0 229 0 242 0 247 1 52 1 76 1 104 1 128 1 143 1 146 1 160 1 175 1 205 1 230 1 234 2 24 2 55 2 67 2 80 2 84 2 88 2 97 2 101 2 111 2 121 2 135 2 140 2 158 2 176 2 178 2 183 2 187 2 190 2 198 2 216 2 225 3 0 3 6 3 15 3 18 3 27 3 35 3 38 3 46 3 49 3 192 29 67 29 71 29 77 29 79 29 82 29 86 29 91 29 156 29 160 29 187 30 12 30 32 30 36 30 42 30 54 30 66 30 90 30 108 30 128 30 142 30 146 30 151 30 158 30 160 32 7 32 18 32 24 32 28 32 32 32 38 32 48 32 50 32 57 32 68 32 112 32 116 32 125 32 128 32 141 32 148 32 161 32 164 32 166 32 171 32 177 32 181 32 185 33 19 33 23 33 32 33 34 33 38 33 46 33 83 33 91 33 144 34 2 34 6 34 15 34 17 34 21 34 25 34 30 34 43 34 72 34 96 34 100 37 0 37 160 37 178 37 182 37 188 37 192 37 198 37 201 38 16 38 106 39 19 39 82 251 1 255 255 0 1 255 245 0 0 1 159 0 0 255 195 0 0 255 189 0 0 0 0 255 120 0 0 255 193 0 0 0 9 0 0 0 85 0 0 0 0 0 0 0 0 255 128 255 89 0 235 0 0 0 0 0 0 0 0 0 0 0 0 255 102 254 12 255 78 255 77 255 74 255 67 255 64 255 55 255 46 255 33 255 29 255 14 255 174 0 0 0 0 0 14 0 13 0 9 0 0 0 0 0 0 0 0 255 232 255 231 255 224 255 217 0 0 255 213 255 211 254 230 229 20 0 0 229 16 0 0 229 19 0 0 229 17 228 189 228 188 228 181 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 220 226 27 0 0 227 27 0 0 0 0 0 0 0 0 225 193 226 92 226 149 225 187 226 68 0 0 225 172 0 0 225 170 225 167 225 223 225 221 225 219 225 218 0 0 225 210 225 208 225 205 225 157 224 250 224 244 224 241 225 135 225 131 225 61 225 55 225 34 224 167 224 166 224 160 0 0 224 116 0 0 224 137 224 127 224 92 224 66 224 58 222 37 221 22 221 8 221 6 221 2 221 0 220 241 0 0 220 178 220 91 219 177 219 103 6 172 0 1 0 0 0 0 1 22 0 0 1 50 0 0 1 60 0 0 1 68 1 74 0 0 1 134 0 0 1 156 0 0 1 170 0 0 1 192 2 52 2 94 2 144 0 0 0 0 0 0 2 182 2 184 2 186 2 216 2 218 2 220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 200 2 202 0 0 0 0 0 0 2 198 2 208 2 212 2 220 0 0 0 0 0 0 0 0 2 224 0 0 0 0 0 0 0 0 2 220 0 0 2 222 0 0 2 222 0 0 0 0 0 0 0 0 2 218 2 224 2 226 2 228 2 230 2 240 2 254 3 16 3 22 3 32 3 34 0 0 0 0 3 32 0 0 3 208 3 214 3 218 3 222 0 0 0 0 0 0 0 0 0 0 3 216 0 0 3 216 0 0 0 0 0 0 0 0 0 0 0 0 3 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 180 0 0 3 180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 158 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 232 1 237 2 23 2 120 2 139 1 206 1 236 2 1 2 2 2 11 2 150 1 228 1 248 1 227 2 7 1 229 1 230 2 156 2 155 2 157 1 234 2 21 2 3 2 9 2 4 2 161 2 0 2 205 2 5 2 8 2 6 2 163 3 33 1 233 2 124 2 121 2 119 2 122 2 10 2 14 2 215 2 16 2 84 1 246 2 165 1 249 2 18 2 216 2 118 2 160 2 30 2 31 2 206 2 168 2 15 1 254 2 221 2 29 2 86 1 247 2 141 2 142 2 143 1 235 0 63 0 78 0 80 0 89 0 90 0 91 0 93 0 117 0 118 0 119 0 121 0 230 0 142 2 152 0 163 0 191 0 192 0 193 0 195 0 219 0 231 1 109 0 240 0 255 1 1 1 10 1 11 1 12 1 14 1 38 1 39 1 40 1 42 1 155 1 65 2 153 1 87 1 116 1 117 1 118 1 120 1 144 1 156 1 146 0 61 0 238 0 62 0 239 0 77 0 254 0 81 1 2 0 82 1 3 0 84 1 5 0 83 1 4 0 85 1 6 0 88 1 9 0 94 1 15 0 95 1 16 0 96 1 17 0 105 1 26 0 92 1 13 0 106 1 27 0 107 1 28 0 108 1 29 0 109 1 30 0 113 1 34 0 116 1 37 0 120 1 41 0 122 1 43 0 123 1 44 0 128 1 48 0 124 1 50 0 129 1 51 0 130 1 52 1 53 0 131 1 54 0 133 1 57 0 132 1 55 0 134 1 56 0 138 1 61 0 140 1 63 0 143 1 66 0 141 1 64 1 70 0 152 1 76 0 153 1 77 0 154 1 78 0 164 1 88 0 172 1 96 0 174 1 97 0 173 1 98 0 178 1 102 0 179 1 103 0 181 1 105 0 180 1 104 0 187 1 111 0 186 1 110 0 194 1 119 0 196 1 121 0 197 1 122 0 198 1 123 0 199 1 124 0 207 1 132 0 216 1 141 0 220 1 145 0 221 0 226 1 151 0 228 1 153 0 227 1 152 0 165 1 89 0 208 1 133 0 64 0 241 0 125 1 45 0 155 1 79 0 200 1 125 0 201 1 126 0 202 1 127 0 203 1 128 0 204 1 129 0 110 1 31 0 171 1 95 0 182 1 106 0 188 1 112 2 96 2 104 2 109 2 111 2 217 2 220 2 218 2 222 2 214 2 219 2 98 2 105 2 110 2 223 2 225 2 227 2 229 2 231 2 233 2 235 2 237 2 239 2 241 2 243 2 245 2 254 2 255 3 1 2 88 2 90 2 91 2 97 2 99 2 102 2 106 2 107 0 86 1 7 0 87 1 8 0 111 1 32 0 114 1 35 0 115 1 36 0 135 1 58 0 136 1 59 0 137 1 60 0 139 1 62 0 144 1 67 0 145 1 68 0 146 1 69 0 175 1 99 0 176 1 100 0 177 1 101 0 183 1 107 0 184 1 108 0 189 1 113 0 190 1 114 0 214 1 139 0 215 1 140 0 217 1 142 0 222 1 147 0 229 1 154 0 65 0 242 0 66 0 243 0 67 0 244 0 68 0 245 0 69 0 246 0 70 0 247 0 71 0 248 0 72 0 249 0 73 0 250 0 74 0 251 0 75 0 252 0 76 0 253 0 97 1 18 0 98 1 19 0 99 1 20 0 100 1 21 0 101 1 22 0 102 1 23 0 103 1 24 0 104 1 25 0 126 1 46 0 127 1 47 0 156 1 80 0 157 1 81 0 158 1 82 0 159 1 83 0 160 1 84 0 161 1 85 0 162 1 86 0 166 1 90 0 167 1 91 0 168 1 92 0 169 1 93 0 170 1 94 0 205 1 130 0 206 1 131 0 209 1 134 0 210 1 135 0 211 1 136 0 212 1 137 0 213 1 138 0 218 1 143 0 223 1 148 0 224 1 149 0 225 1 150 1 252 1 250 1 251 1 253 1 238 1 239 1 242 1 240 1 241 1 243 2 12 2 13 1 255 2 28 2 95 2 38 2 39 2 100 2 130 2 123 2 174 2 151 2 154 2 171 2 184 2 198 184 0 0 44 75 184 0 9 80 88 177 1 1 142 89 184 1 255 133 184 0 68 29 185 0 9 0 3 95 94 45 184 0 1 44 32 32 69 105 68 176 1 96 45 184 0 2 44 184 0 1 42 33 45 184 0 3 44 32 70 176 3 37 70 82 88 35 89 32 138 32 138 73 100 138 32 70 32 104 97 100 176 4 37 70 32 104 97 100 82 88 35 101 138 89 47 32 176 0 83 88 105 32 176 0 84 88 33 176 64 89 27 105 32 176 0 84 88 33 176 64 101 89 89 58 45 184 0 4 44 32 70 176 4 37 70 82 88 35 138 89 32 70 32 106 97 100 176 4 37 70 32 106 97 100 82 88 35 138 89 47 253 45 184 0 5 44 75 32 176 3 38 80 88 81 88 176 128 68 27 176 64 68 89 27 33 33 32 69 176 192 80 88 176 192 68 27 33 89 89 45 184 0 6 44 32 32 69 105 68 176 1 96 32 32 69 125 105 24 68 176 1 96 45 184 0 7 44 184 0 6 42 45 184 0 8 44 75 32 176 3 38 83 88 176 64 27 176 0 89 138 138 32 176 3 38 83 88 35 33 176 128 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 0 192 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 1 0 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 1 64 138 138 27 138 35 89 32 184 0 3 38 83 88 176 3 37 69 184 1 128 80 88 35 33 184 1 128 35 33 27 176 3 37 69 35 33 35 33 89 27 33 89 68 45 184 0 9 44 75 83 88 69 68 27 33 33 89 45 0 176 0 43 0 178 1 1 2 43 1 178 2 1 2 43 1 183 2 64 54 42 33 20 0 8 43 0 183 1 77 64 50 36 23 0 8 43 0 178 3 7 7 43 176 0 32 69 125 105 24 68 75 176 96 82 88 176 1 27 176 0 89 176 1 142 0 0 0 0 20 0 68 0 86 0 0 0 12 255 51 0 12 1 230 0 12 2 62 0 12 2 126 0 12 2 144 0 12 2 200 0 12 0 0 0 0 0 76 0 76 0 76 0 76 0 144 0 244 1 68 1 130 1 192 1 246 2 86 2 146 2 200 3 4 3 84 3 122 3 208 4 32 4 116 4 190 5 48 5 132 5 242 6 30 6 96 6 152 6 248 7 84 7 146 7 200 8 78 8 202 9 26 9 146 9 240 10 64 11 14 11 102 11 164 11 250 12 74 12 130 13 6 13 94 13 178 14 44 14 164 14 240 15 86 15 166 15 250 16 52 16 166 17 4 17 98 17 152 17 164 17 176 17 188 17 200 17 212 17 224 17 236 17 248 18 4 18 16 18 28 18 40 18 52 18 64 18 76 18 90 18 102 18 114 18 126 18 138 18 152 19 8 19 98 19 212 19 224 19 236 19 248 20 4 20 16 20 28 20 40 20 52 20 60 20 72 20 84 20 96 20 108 20 120 20 132 20 144 20 156 20 168 20 180 20 192 20 204 20 216 20 228 20 240 20 254 21 96 21 108 21 120 21 132 21 144 21 156 21 168 21 180 21 192 21 204 21 216 22 64 22 76 22 88 22 100 22 112 22 124 22 136 22 148 22 160 22 172 22 184 22 196 23 34 23 46 23 58 23 70 23 82 23 94 23 106 23 118 23 132 23 144 23 206 23 218 23 230 23 242 23 254 24 10 24 22 24 34 24 46 24 58 24 70 24 82 24 94 24 106 24 118 24 130 24 142 24 154 24 166 24 178 24 190 24 202 24 214 24 226 24 240 25 120 25 202 26 58 26 70 26 82 26 94 26 106 26 118 26 236 26 248 27 4 27 16 27 28 27 42 27 54 27 66 27 78 27 90 27 102 27 114 27 126 27 138 27 254 28 10 28 22 28 34 28 46 28 58 28 70 28 82 28 94 28 106 28 118 28 130 28 142 28 154 28 166 28 178 28 190 28 202 28 214 28 226 28 238 28 250 29 98 29 196 29 208 29 220 29 232 29 244 30 0 30 12 30 24 30 36 30 48 30 60 30 72 30 84 30 96 30 108 30 120 30 132 30 144 30 156 30 168 30 180 30 192 31 16 31 84 31 174 31 186 31 198 31 210 31 222 31 234 31 246 32 2 32 14 32 26 32 38 32 50 32 62 32 74 32 86 32 98 32 112 32 124 32 136 32 148 32 160 32 174 33 78 34 6 34 150 34 162 34 174 34 186 34 198 34 210 34 222 34 234 34 246 35 138 35 150 35 162 35 174 35 186 35 198 35 210 35 222 35 234 35 246 36 2 36 14 36 26 36 38 36 50 36 62 36 76 36 212 36 224 36 236 36 248 37 4 37 16 37 28 37 40 37 52 37 64 37 76 37 190 37 202 37 214 37 226 37 238 37 250 38 6 38 18 38 30 38 42 38 54 38 164 38 252 39 36 39 48 39 60 39 140 39 152 39 164 39 176 39 188 39 200 39 216 39 228 40 54 40 66 40 78 40 90 40 102 40 114 40 126 40 138 40 150 41 8 41 20 41 32 41 44 41 56 41 68 41 80 41 92 41 104 41 116 41 128 41 140 41 152 41 164 41 176 41 188 41 202 42 82 42 250 43 106 43 118 43 130 43 142 43 154 43 166 44 42 44 54 44 66 44 78 44 90 44 104 44 116 44 128 44 140 44 152 44 164 44 176 44 188 44 200 45 68 45 80 45 92 45 104 45 116 45 128 45 140 45 152 45 164 45 176 45 188 45 200 45 212 45 224 45 236 45 248 46 4 46 16 46 28 46 40 46 52 46 64 46 76 46 200 47 48 47 60 47 72 47 84 47 96 47 108 47 120 47 132 47 144 47 156 47 168 47 180 47 192 47 204 47 216 47 228 47 240 47 252 48 8 48 20 48 32 48 44 48 184 49 50 49 114 49 244 50 106 50 228 51 50 51 144 51 232 52 116 52 202 53 78 53 152 53 224 54 28 54 136 54 228 55 48 55 170 56 36 56 44 56 56 56 68 56 80 56 92 56 104 56 116 56 128 56 140 56 152 56 164 56 176 56 188 56 200 56 212 56 224 56 238 56 250 57 6 57 18 57 30 57 44 57 204 57 212 57 224 57 236 57 248 58 4 58 16 58 28 58 40 58 218 59 60 59 116 59 198 60 56 60 138 60 240 61 100 61 154 62 32 62 148 62 246 63 46 63 124 63 226 64 38 64 132 64 140 64 184 64 192 65 42 65 76 65 114 65 126 65 138 65 226 66 26 66 72 66 154 66 234 67 0 67 12 67 50 67 86 67 98 67 110 67 120 67 134 67 158 67 182 67 194 67 206 67 214 67 222 67 242 68 6 68 26 68 34 68 44 68 82 68 102 68 136 68 168 68 198 68 228 69 70 69 168 69 194 69 214 69 240 70 14 70 68 70 116 70 198 71 82 71 132 72 12 72 142 73 6 73 90 73 226 74 88 74 224 75 86 75 126 75 146 75 154 76 10 76 20 76 30 76 40 76 50 76 60 76 70 76 80 76 90 76 100 76 110 76 120 76 130 76 140 76 150 76 160 76 170 76 180 76 190 76 200 76 210 76 220 76 230 76 240 76 250 77 4 77 14 77 24 77 34 77 92 77 126 77 188 78 16 78 74 78 154 78 248 79 38 79 150 79 240 80 16 80 50 80 86 80 138 80 148 80 158 80 168 80 178 80 188 80 198 80 208 80 218 80 228 80 238 80 248 81 2 81 12 81 22 81 30 81 38 81 46 81 130 81 222 82 24 82 116 82 184 82 250 83 150 83 212 84 8 84 82 84 148 84 200 85 32 85 94 85 154 85 244 86 80 86 138 86 226 87 44 87 110 87 164 88 8 88 90 88 170 88 216 89 46 89 132 89 198 90 34 90 146 90 206 91 40 91 146 91 250 92 92 92 218 93 68 93 162 94 84 94 226 95 140 95 242 96 100 96 246 97 110 97 232 98 80 98 182 98 210 98 218 98 226 98 242 99 156 99 172 99 188 99 204 99 220 99 236 99 252 100 12 100 28 100 44 100 80 100 100 100 146 100 210 100 220 100 232 101 26 101 76 101 144 101 212 102 18 102 60 102 128 102 190 102 202 102 224 103 62 103 192 104 54 104 170 104 238 105 20 105 82 105 198 106 8 106 44 106 160 107 10 107 40 107 76 107 108 107 144 107 162 107 182 108 20 108 52 108 76 108 108 108 132 108 178 108 200 108 236 109 4 109 54 109 98 109 198 109 234 110 50 110 110 110 130 110 142 110 150 110 158 110 196 110 234 110 242 110 250 111 2 111 10 111 36 111 44 111 52 111 60 111 80 111 88 111 96 111 104 111 112 111 120 111 128 111 136 111 144 111 152 111 170 111 188 111 208 111 228 112 4 112 36 112 92 112 152 112 172 112 192 112 238 113 26 113 56 113 86 113 138 113 190 113 232 114 18 114 68 114 118 114 152 114 186 114 216 114 248 115 26 115 60 115 100 115 138 115 178 115 208 116 4 116 48 116 94 116 140 116 188 116 240 117 22 117 42 117 106 117 170 117 232 118 40 118 110 118 180 118 244 119 52 119 90 119 128 119 166 119 204 120 8 120 66 120 142 120 220 121 14 121 64 121 114 121 164 121 236 122 52 122 140 122 232 123 36 123 92 123 114 123 160 123 160 123 160 123 160 123 160 123 180 123 200 123 220 123 238 124 28 124 74 124 112 124 148 124 208 125 10 125 56 125 102 125 126 125 148 125 170 125 192 125 216 125 238 126 6 126 28 126 52 126 74 126 96 126 118 126 142 126 164 126 188 126 210 126 236 127 4 127 36 127 68 127 94 127 124 127 154 127 178 127 204 127 228 128 4 128 36 128 62 128 94 128 126 128 150 128 180 128 212 128 244 129 16 129 46 129 78 129 110 129 138 129 168 129 200 129 232 130 4 130 34 130 66 130 98 130 126 130 166 130 202 130 238 131 20 131 60 131 100 131 140 131 182 131 224 132 10 132 52 132 90 132 128 132 164 132 200 132 238 133 16 133 48 133 72 133 100 133 132 133 166 133 200 133 236 134 16 134 50 134 82 134 118 134 152 134 184 134 220 134 254 135 30 135 66 135 102 135 134 135 176 135 212 135 244 136 32 136 72 136 110 136 162 136 202 136 240 137 36 137 98 137 154 137 224 138 2 138 36 138 70 138 104 138 126 138 148 138 208 138 228 138 248 139 12 139 32 139 52 139 70 139 90 139 108 139 134 139 158 139 184 139 208 139 228 139 246 140 8 140 26 140 46 140 66 140 86 140 106 140 126 140 146 140 166 140 186 140 206 140 224 140 242 141 4 141 24 141 82 141 204 142 200 142 220 142 240 143 4 143 24 143 44 143 66 143 94 143 116 143 138 143 158 143 186 143 208 0 5 0 62 0 0 2 26 2 148 0 3 0 6 0 9 0 15 0 21 0 61 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 185 0 10 0 1 244 184 0 12 220 184 0 0 16 185 0 18 0 1 244 184 0 16 220 48 49 19 33 17 33 19 39 17 33 17 7 19 47 1 35 15 1 19 63 1 35 31 1 62 1 220 254 36 193 128 1 89 127 82 73 52 4 54 74 132 49 66 235 66 50 2 148 253 108 1 84 232 254 50 1 206 232 254 230 132 103 103 132 1 73 94 119 119 94 0 0 2 0 32 0 0 2 56 2 144 0 9 0 17 0 65 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 13 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 187 0 10 0 1 0 9 0 4 43 184 0 14 16 185 0 5 0 1 244 184 0 13 16 184 0 17 208 48 49 1 39 46 1 39 35 14 1 15 1 23 35 7 35 19 51 19 35 1 141 31 17 32 16 4 16 32 17 31 217 238 63 85 221 94 221 88 1 11 100 55 109 57 57 109 55 100 67 200 2 144 253 112 0 0 0 3 0 103 0 0 2 33 2 144 0 19 0 28 0 37 0 87 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 186 0 36 0 19 0 0 17 18 57 184 0 36 47 185 0 28 0 1 244 186 0 10 0 36 0 28 17 18 57 184 0 0 16 185 0 27 0 1 244 184 0 19 16 185 0 37 0 1 244 48 49 19 51 50 30 2 21 20 6 7 21 30 1 21 20 14 2 43 1 19 50 54 53 52 38 43 1 21 19 50 54 53 52 38 43 1 21 103 180 50 83 59 33 57 58 72 80 36 65 91 55 195 166 84 73 77 76 86 99 85 92 90 87 99 2 144 18 38 61 43 49 79 15 4 11 78 68 48 72 48 24 1 120 58 55 54 47 214 254 202 63 67 61 57 248 0 0 1 0 66 255 244 2 42 2 156 0 33 0 57 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 13 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 22 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 66 43 78 108 64 60 90 29 47 26 64 42 47 77 54 29 29 54 77 47 45 70 32 48 39 98 63 62 105 77 44 1 72 79 126 88 47 48 32 53 27 33 37 69 98 61 62 99 70 38 38 35 51 45 50 46 87 127 0 0 2 0 85 0 0 2 37 2 144 0 10 0 19 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 0 16 185 0 18 0 1 244 184 0 10 16 185 0 19 0 1 244 48 49 19 51 50 22 21 20 14 2 43 1 55 50 54 53 52 38 43 1 17 85 160 149 155 39 76 112 73 164 155 112 111 111 112 72 2 144 168 157 78 123 85 45 68 138 125 125 132 253 248 0 0 0 1 0 115 0 0 2 18 2 144 0 11 0 77 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 184 0 0 16 185 0 3 0 1 244 186 0 7 0 11 0 0 17 18 57 184 0 7 47 185 0 4 0 1 244 184 0 11 16 185 0 8 0 1 244 48 49 19 33 21 33 21 33 21 33 21 33 21 33 115 1 149 254 191 1 15 254 241 1 75 254 97 2 144 70 206 71 238 71 0 0 1 0 135 0 0 2 24 2 144 0 9 0 67 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 184 0 0 16 185 0 3 0 1 244 186 0 7 0 9 0 0 17 18 57 184 0 7 47 185 0 4 0 1 244 48 49 19 33 21 33 21 33 21 33 17 35 135 1 145 254 194 1 13 254 243 83 2 144 70 222 70 254 218 0 1 0 53 255 244 2 21 2 156 0 39 0 77 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 13 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 3 62 89 184 0 5 16 185 0 14 0 1 244 184 0 35 16 185 0 24 0 1 244 186 0 29 0 35 0 5 17 18 57 184 0 29 47 185 0 30 0 1 244 48 49 19 52 62 2 51 50 30 2 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 53 35 53 51 17 14 1 35 34 46 2 53 43 77 107 64 33 54 45 35 14 47 24 62 48 46 75 54 29 27 51 76 48 35 60 19 131 208 32 100 64 62 104 76 42 1 72 79 127 87 47 14 23 28 15 53 26 34 37 69 98 61 62 99 70 38 21 18 171 69 254 236 32 44 46 87 127 0 1 0 79 0 0 2 9 2 144 0 11 0 73 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 186 0 9 0 11 0 0 17 18 57 184 0 9 47 185 0 2 0 1 244 184 0 0 16 184 0 4 208 184 0 11 16 184 0 7 208 48 49 19 51 17 33 17 51 17 35 17 33 17 35 79 84 1 18 84 84 254 238 84 2 144 254 237 1 19 253 112 1 53 254 203 0 1 0 95 0 0 1 249 2 144 0 11 0 65 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 185 0 0 0 1 244 184 0 4 16 185 0 3 0 1 244 184 0 6 208 184 0 0 16 184 0 9 208 48 49 55 51 17 35 53 33 21 35 17 51 21 33 95 163 163 1 154 163 163 254 102 71 2 3 70 70 253 253 71 0 1 0 81 255 244 1 237 2 145 0 19 0 53 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 13 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 185 0 3 0 1 244 184 0 9 16 185 0 7 0 1 244 48 49 55 30 1 51 50 54 53 17 33 53 33 17 20 14 2 35 34 38 39 135 29 72 38 71 65 254 237 1 102 22 51 83 61 56 105 34 147 44 42 75 81 1 114 70 254 65 46 81 60 35 52 57 0 0 1 0 98 0 0 2 67 2 144 0 12 0 107 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 186 0 3 0 7 0 0 17 18 57 186 0 9 0 7 0 0 17 18 57 184 0 9 16 184 0 6 208 184 0 3 16 184 0 10 208 48 49 19 51 17 51 1 51 7 19 35 3 7 21 35 98 84 3 1 20 94 207 231 93 190 114 84 2 144 254 183 1 73 250 254 106 1 85 133 208 0 0 1 0 134 0 0 2 29 2 144 0 5 0 43 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 185 0 2 0 1 244 48 49 19 51 17 33 21 33 134 82 1 69 254 105 2 144 253 183 71 0 0 0 1 0 81 0 0 2 7 2 144 0 29 0 77 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 187 0 18 0 1 0 4 0 4 43 184 0 0 16 184 0 6 208 184 0 29 16 184 0 9 208 184 0 0 16 185 0 22 0 1 244 184 0 16 208 48 49 19 51 19 23 51 55 19 51 17 35 17 52 62 2 55 35 15 1 35 47 1 35 30 3 21 17 35 81 92 93 33 4 32 92 92 71 2 3 3 2 3 43 90 45 90 44 3 1 4 4 2 70 2 144 254 233 106 106 1 23 253 112 1 113 20 54 55 53 20 140 253 253 140 20 53 55 54 20 254 143 0 0 1 0 83 0 0 2 5 2 144 0 19 0 89 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 186 0 2 0 1 0 11 17 18 57 185 0 4 0 1 244 184 0 1 16 184 0 8 208 186 0 12 0 11 0 1 17 18 57 184 0 1 16 185 0 13 0 1 244 184 0 11 16 184 0 18 208 48 49 19 51 19 23 51 46 1 53 17 51 17 35 3 39 35 30 1 21 17 35 83 85 213 66 2 2 9 79 85 213 66 2 2 9 79 2 144 254 98 134 49 107 52 1 84 253 112 1 158 134 51 103 51 254 169 0 0 0 2 0 48 255 244 2 40 2 156 0 19 0 39 0 53 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 13 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 185 0 20 0 1 244 184 0 10 16 185 0 30 0 1 244 48 49 5 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 44 56 92 67 37 37 67 92 56 55 93 67 37 37 67 93 55 37 62 43 24 24 43 62 37 38 61 43 24 24 43 61 12 48 89 127 79 79 125 87 46 47 87 125 78 79 127 89 48 73 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 0 2 0 102 0 0 2 33 2 144 0 14 0 23 0 71 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 3 62 89 186 0 12 0 14 0 0 17 18 57 184 0 12 47 184 0 0 16 185 0 22 0 1 244 184 0 12 16 185 0 23 0 1 244 48 49 19 51 50 30 2 21 20 14 2 43 1 17 35 19 50 54 53 52 38 43 1 17 102 201 54 90 63 35 35 64 89 54 118 83 190 87 83 85 85 107 2 144 20 45 74 54 52 76 50 25 254 252 1 72 65 70 71 55 254 251 0 0 2 0 49 255 93 2 41 2 157 0 19 0 52 0 75 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 13 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 187 0 49 0 1 0 23 0 4 43 184 0 26 16 185 0 5 0 1 244 184 0 36 16 185 0 15 0 1 244 184 0 26 16 184 0 46 208 48 49 19 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 1 14 1 35 34 38 39 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 30 1 51 50 54 55 134 23 43 61 38 37 61 43 23 23 43 61 37 38 61 43 23 1 163 16 36 22 87 109 25 47 77 55 30 36 66 92 56 55 92 66 36 29 52 75 45 17 74 51 15 25 9 1 75 61 100 71 39 39 71 100 61 61 99 69 37 37 69 99 253 227 6 8 88 67 8 55 87 118 71 79 125 87 47 47 87 126 78 70 116 87 56 9 42 43 6 4 0 0 2 0 100 0 0 2 41 2 144 0 8 0 24 0 83 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 13 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 186 0 11 0 13 0 14 17 18 57 184 0 11 47 185 0 0 0 1 244 184 0 14 16 185 0 8 0 1 244 184 0 13 16 184 0 9 208 184 0 11 16 184 0 23 208 48 49 19 51 50 54 53 52 38 43 1 1 3 35 17 35 17 51 50 30 2 21 20 6 7 19 183 109 77 81 81 77 109 1 19 158 117 83 204 50 84 61 34 80 67 167 1 89 63 64 65 52 253 179 1 21 254 235 2 144 19 44 70 51 77 92 17 254 226 0 0 0 1 0 67 255 244 2 25 2 156 0 51 0 73 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 13 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 3 62 89 185 0 3 0 1 244 186 0 6 0 48 0 22 17 18 57 184 0 22 16 185 0 29 0 1 244 186 0 32 0 22 0 48 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 47 1 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 31 1 30 3 21 20 14 2 35 34 38 39 117 37 98 54 70 76 18 32 43 25 94 25 50 41 26 32 57 79 47 62 104 36 44 32 77 49 60 70 21 33 42 21 92 30 53 39 23 32 60 86 54 72 121 45 143 37 45 59 48 25 35 25 20 11 41 10 28 40 55 36 37 64 47 26 45 36 54 29 33 51 45 24 33 25 18 9 40 12 31 41 55 36 39 68 51 29 52 45 0 0 1 0 42 0 0 2 46 2 144 0 7 0 51 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 13 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 3 62 89 184 0 2 16 185 0 1 0 1 244 184 0 5 208 48 49 1 35 53 33 21 35 17 35 1 2 216 2 4 216 84 2 74 70 70 253 182 0 0 0 1 0 79 255 244 2 9 2 144 0 25 0 51 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 3 62 89 185 0 7 0 1 244 184 0 0 16 184 0 13 208 48 49 19 51 17 20 30 2 51 50 62 2 53 17 51 17 20 14 2 35 34 46 2 53 79 84 21 37 50 30 30 50 38 21 81 33 58 81 48 48 82 59 33 2 144 254 102 51 71 43 20 20 43 71 51 1 154 254 104 71 98 63 28 28 63 98 71 0 0 0 1 0 43 0 0 2 45 2 144 0 15 0 51 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 185 0 5 0 1 244 184 0 0 16 184 0 12 208 48 49 19 51 19 30 1 23 51 62 3 55 19 51 3 35 43 88 106 17 28 18 4 9 16 15 15 8 105 85 208 97 2 144 254 158 59 100 58 29 53 52 54 29 1 98 253 112 0 0 1 0 10 0 0 2 78 2 145 0 33 0 77 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 3 62 89 187 0 28 0 1 0 10 0 4 43 184 0 32 16 185 0 6 0 1 244 184 0 15 208 184 0 1 16 184 0 20 208 184 0 32 16 184 0 23 208 48 49 19 51 19 30 1 23 51 62 1 63 1 51 23 30 1 23 51 62 1 55 19 51 3 35 3 46 1 39 35 14 1 7 3 35 10 83 53 2 9 3 3 11 21 10 69 59 69 9 21 11 4 3 8 3 50 79 97 92 75 7 12 5 3 6 12 8 72 90 2 145 254 100 42 79 41 41 80 41 242 242 40 81 41 41 80 41 1 156 253 111 1 19 29 60 29 29 60 29 254 237 0 0 1 0 54 0 0 2 34 2 144 0 25 0 93 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 13 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 186 0 0 0 24 0 2 17 18 57 186 0 6 0 24 0 2 17 18 57 184 0 2 16 184 0 11 208 186 0 13 0 24 0 2 17 18 57 184 0 24 16 184 0 15 208 186 0 20 0 24 0 2 17 18 57 48 49 19 3 51 23 30 1 23 51 62 1 63 1 51 3 19 35 39 46 1 39 35 14 1 15 1 35 250 183 92 92 13 24 16 4 14 21 12 90 88 183 196 92 99 14 27 17 4 14 26 13 98 88 1 83 1 61 168 23 43 29 29 43 23 168 254 191 254 177 177 24 51 30 30 51 24 177 0 0 1 0 38 0 0 2 50 2 144 0 15 0 64 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 13 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 3 62 89 186 0 7 0 14 0 1 17 18 57 48 49 37 3 51 23 30 1 23 51 62 1 63 1 51 3 21 35 1 2 220 88 99 19 36 20 4 20 38 19 95 86 220 84 234 1 166 195 38 75 40 40 76 38 194 254 90 234 0 1 0 65 0 0 2 27 2 145 0 9 0 61 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 13 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 55 1 33 53 33 21 1 33 21 33 65 1 111 254 177 1 181 254 144 1 117 254 38 50 2 25 70 50 253 232 71 0 0 0 2 0 81 255 244 2 3 1 242 0 33 0 47 0 128 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 186 0 5 0 19 0 23 17 18 57 184 0 5 47 184 0 19 16 185 0 10 0 1 244 184 0 29 16 185 0 39 0 1 244 186 0 13 0 10 0 39 17 18 57 186 0 25 0 23 0 19 17 18 57 184 0 25 16 185 0 42 0 1 244 184 0 5 16 185 0 43 0 1 244 48 49 55 52 62 2 55 46 3 35 34 6 7 39 62 3 51 50 22 21 17 35 39 35 14 1 35 34 46 2 55 20 30 2 51 50 54 55 53 14 3 81 39 85 134 94 1 14 30 49 35 48 88 34 32 18 49 55 62 32 100 97 67 7 3 41 99 52 34 60 45 26 80 18 29 39 21 42 81 42 78 105 63 26 126 41 61 44 28 8 25 44 33 20 37 21 56 12 25 20 13 109 91 254 214 66 32 46 19 35 51 39 21 29 19 9 37 35 128 6 22 31 39 0 0 0 0 2 0 93 255 244 2 28 2 200 0 22 0 39 0 131 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 3 62 89 186 0 3 0 6 0 16 17 18 57 186 0 20 0 16 0 6 17 18 57 184 0 20 16 185 0 23 0 1 244 184 0 16 16 185 0 26 0 1 244 184 0 6 16 185 0 36 0 1 244 184 0 3 16 185 0 39 0 1 244 48 49 19 51 21 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 35 7 35 55 30 1 51 50 62 2 53 52 46 2 35 34 6 7 93 82 2 35 87 43 49 76 51 26 36 61 80 43 35 81 35 3 7 66 82 35 71 26 32 54 40 22 16 33 52 36 32 73 38 2 200 194 94 34 40 35 65 91 56 62 98 68 35 35 31 54 114 31 26 27 49 72 45 40 66 47 26 35 38 0 1 0 80 255 244 2 27 1 242 0 33 0 57 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 7 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 22 0 1 244 48 49 55 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 80 43 74 99 55 60 87 30 41 30 65 38 42 70 49 28 27 49 69 42 45 75 31 36 40 99 54 57 97 72 40 242 61 95 66 34 42 29 53 26 30 27 50 69 42 42 68 49 27 35 26 53 36 40 34 65 95 0 0 0 2 0 60 255 244 1 251 2 200 0 22 0 36 0 131 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 7 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 15 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 3 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 3 62 89 186 0 8 0 5 0 18 17 18 57 186 0 14 0 18 0 5 17 18 57 184 0 18 16 185 0 26 0 1 244 184 0 14 16 185 0 28 0 1 244 184 0 8 16 185 0 29 0 1 244 184 0 5 16 185 0 32 0 1 244 48 49 55 52 62 2 51 50 22 23 39 53 51 17 35 39 35 14 1 35 34 46 2 55 20 22 51 50 55 53 46 1 35 34 14 2 60 37 61 80 43 45 68 34 3 82 68 7 3 30 83 45 48 77 56 30 85 75 68 72 65 33 63 32 32 55 41 24 242 59 95 66 36 34 29 90 187 253 56 64 31 45 34 65 94 62 88 98 73 242 31 26 27 49 68 0 2 0 69 255 244 2 25 1 242 0 30 0 39 0 67 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 7 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 187 0 39 0 1 0 13 0 4 43 184 0 26 16 185 0 19 0 1 244 184 0 5 16 185 0 34 0 1 244 48 49 55 52 62 2 51 50 30 2 21 20 6 7 33 30 3 51 50 54 55 23 14 1 35 34 46 2 37 52 38 35 34 14 2 7 69 42 69 89 47 52 82 57 30 1 2 254 132 1 29 49 67 40 43 71 34 29 36 92 59 54 95 71 41 1 136 76 68 30 55 44 30 5 242 60 95 66 35 33 60 84 51 13 25 9 39 62 44 24 24 21 54 23 34 35 65 94 100 73 78 20 39 56 36 0 0 0 1 0 103 0 0 2 66 2 212 0 22 0 86 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 15 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 7 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 3 62 89 184 0 20 16 185 0 3 0 1 244 184 0 16 16 184 0 7 208 184 0 16 16 185 0 13 0 1 244 184 0 10 208 48 49 1 46 1 35 34 6 29 1 51 21 35 17 35 17 35 53 55 53 52 54 51 50 23 2 47 30 51 32 66 57 204 204 81 139 139 95 101 72 68 2 122 14 9 67 60 44 67 254 93 1 163 62 5 41 89 108 28 0 0 0 0 3 0 72 255 32 2 54 1 242 0 17 0 69 0 85 0 178 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 7 62 89 184 0 0 69 88 184 0 40 47 27 185 0 40 0 7 62 89 184 0 0 69 88 184 0 39 47 27 185 0 39 0 7 62 89 184 0 0 69 88 184 0 67 47 27 185 0 67 0 5 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 3 62 89 184 0 67 16 185 0 3 0 1 244 184 0 12 16 184 0 15 208 184 0 21 208 184 0 12 16 185 0 58 0 1 244 184 0 50 220 185 0 70 0 1 244 186 0 53 0 70 0 50 17 18 57 184 0 53 16 184 0 28 208 184 0 40 16 185 0 41 0 1 244 184 0 39 16 185 0 42 0 1 244 184 0 37 16 185 0 78 0 1 244 48 49 23 20 22 51 50 62 2 53 52 38 43 1 34 38 39 14 1 7 52 54 55 53 46 1 53 52 54 55 53 46 1 53 52 62 2 51 50 23 51 21 35 30 1 21 20 14 2 35 34 38 39 6 21 20 22 59 1 50 22 21 20 14 2 35 34 38 19 50 54 53 52 46 2 35 34 14 2 21 20 22 143 81 78 42 68 48 25 55 56 95 21 37 16 35 27 71 41 39 20 30 30 28 25 35 31 52 69 39 40 32 201 130 17 28 29 51 69 39 19 43 20 38 53 48 109 94 91 38 70 100 62 107 117 219 47 65 18 30 41 23 23 41 30 18 66 81 38 48 17 28 36 19 35 24 3 5 19 41 29 29 56 23 4 11 38 31 23 49 19 4 19 63 44 40 64 45 25 12 63 18 52 32 39 62 43 23 9 9 24 32 29 27 52 62 34 62 46 28 70 1 107 62 53 25 42 30 17 17 30 42 25 53 62 0 0 0 0 1 0 93 0 0 2 11 2 200 0 22 0 101 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 7 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 3 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 186 0 3 0 6 0 11 17 18 57 184 0 6 16 185 0 15 0 1 244 184 0 3 16 185 0 20 0 1 244 48 49 19 51 21 7 62 1 51 50 22 21 17 35 17 52 38 35 34 14 2 7 17 35 93 82 4 39 88 57 87 81 82 52 60 22 37 36 38 21 82 2 200 194 115 41 54 99 97 254 210 1 35 69 67 11 22 33 22 254 173 0 0 0 2 0 90 0 0 1 158 2 201 0 5 0 17 0 59 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 184 0 0 16 185 0 4 0 1 244 184 0 0 16 184 0 6 220 184 0 12 220 48 49 19 33 17 35 17 35 37 34 38 53 52 54 51 50 22 21 20 6 90 1 52 82 226 1 2 29 37 37 29 28 38 38 1 230 254 26 1 163 167 34 29 29 35 35 29 29 34 0 0 0 2 0 55 255 39 1 158 2 201 0 21 0 33 0 65 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 5 62 89 185 0 14 0 1 244 184 0 0 16 185 0 20 0 1 244 184 0 0 16 184 0 22 220 184 0 28 220 48 49 19 33 17 20 14 2 35 34 38 39 55 30 1 51 50 62 2 53 17 35 37 34 38 53 52 54 51 50 22 21 20 6 90 1 52 20 47 78 59 38 72 29 27 26 57 28 36 48 28 11 226 1 2 29 37 37 29 28 38 38 1 230 254 14 45 75 55 30 19 14 61 13 14 18 34 49 31 1 181 167 34 29 29 35 35 29 29 34 0 0 0 0 1 0 106 0 0 2 62 2 200 0 12 0 109 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 3 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 186 0 2 0 0 0 12 17 18 57 186 0 9 0 0 0 8 17 18 57 184 0 9 16 184 0 6 208 184 0 2 16 185 0 10 0 1 244 48 49 19 51 17 51 1 51 7 19 35 39 7 21 35 106 82 4 1 6 94 194 220 92 179 115 82 2 200 254 30 1 0 193 254 219 243 111 132 0 1 0 81 255 244 2 25 2 200 0 16 0 53 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 185 0 5 0 1 244 184 0 0 16 185 0 16 0 1 244 48 49 19 51 17 20 22 51 50 55 23 14 1 35 34 38 53 17 35 81 248 51 44 40 52 21 33 58 40 78 81 166 2 200 253 213 54 47 23 62 12 17 88 87 1 226 0 0 1 0 60 0 0 2 44 1 242 0 32 0 163 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 7 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 3 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 186 0 2 0 32 0 0 17 18 57 184 0 2 16 184 0 8 208 184 0 11 16 185 0 19 0 1 244 184 0 8 16 185 0 22 0 1 244 184 0 6 16 185 0 27 0 1 244 184 0 2 16 185 0 30 0 1 244 48 49 19 51 23 51 62 1 51 50 23 62 1 51 50 22 21 17 35 17 52 35 34 6 7 17 35 17 52 35 34 6 7 17 35 60 64 7 3 18 49 42 74 18 22 52 41 51 55 79 53 26 38 19 66 55 26 36 19 79 1 230 64 34 42 84 38 46 77 73 254 164 1 85 86 37 38 254 160 1 85 86 37 38 254 160 0 0 0 0 1 0 93 0 0 2 11 1 242 0 22 0 101 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 3 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 186 0 2 0 6 0 22 17 18 57 184 0 6 16 185 0 15 0 1 244 184 0 2 16 185 0 20 0 1 244 48 49 19 51 23 51 62 1 51 50 22 21 17 35 17 52 38 35 34 14 2 7 17 35 93 68 7 4 38 88 57 87 81 82 52 60 22 37 36 38 21 82 1 230 83 41 54 99 97 254 210 1 35 69 67 11 22 33 22 254 173 0 0 0 2 0 60 255 244 2 28 1 242 0 19 0 39 0 53 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 7 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 185 0 25 0 1 244 184 0 5 16 185 0 35 0 1 244 48 49 55 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 60 39 66 87 48 48 87 66 39 39 66 87 48 48 87 66 39 85 22 41 57 35 35 57 41 22 22 41 57 35 35 57 41 22 242 61 95 66 34 34 66 95 61 60 95 65 34 34 65 95 60 42 68 49 27 27 49 68 42 42 69 50 27 27 50 69 0 0 2 0 93 255 51 2 28 1 242 0 22 0 37 0 131 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 7 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 7 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 5 62 89 186 0 5 0 9 0 19 17 18 57 186 0 22 0 19 0 9 17 18 57 184 0 22 16 185 0 23 0 1 244 184 0 19 16 185 0 26 0 1 244 184 0 9 16 185 0 34 0 1 244 184 0 5 16 185 0 37 0 1 244 48 49 23 21 35 17 51 23 51 62 1 51 50 30 2 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 2 35 34 6 7 175 82 68 7 3 34 89 45 49 75 51 26 36 61 80 44 34 79 33 2 35 70 25 66 84 16 33 52 36 32 73 38 41 164 2 179 62 32 42 35 65 91 57 62 97 68 35 33 30 63 31 26 102 91 40 66 47 26 35 38 0 0 0 2 0 60 255 51 1 251 1 242 0 22 0 36 0 131 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 7 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 7 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 3 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 5 62 89 186 0 8 0 5 0 18 17 18 57 186 0 15 0 18 0 5 17 18 57 184 0 18 16 185 0 26 0 1 244 184 0 15 16 185 0 28 0 1 244 184 0 8 16 185 0 29 0 1 244 184 0 5 16 185 0 32 0 1 244 48 49 55 52 62 2 51 50 22 23 51 55 51 17 35 53 55 14 1 35 34 46 2 55 20 22 51 50 55 53 46 1 35 34 14 2 60 37 61 80 43 45 70 35 3 7 66 82 4 32 81 45 48 77 56 30 85 75 68 72 65 33 63 32 32 55 41 24 242 59 95 66 36 34 32 54 253 77 179 88 31 43 34 65 94 62 88 98 73 242 31 26 27 49 68 0 1 0 146 0 0 2 25 1 242 0 18 0 84 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 7 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 3 62 89 186 0 2 0 17 0 0 17 18 57 184 0 6 16 185 0 13 0 1 244 184 0 2 16 185 0 16 0 1 244 48 49 19 51 23 51 62 1 51 50 22 23 7 46 1 35 34 6 7 17 35 146 68 7 3 38 111 68 27 46 23 19 26 35 29 55 101 44 82 1 230 115 59 68 9 11 71 9 8 63 76 254 227 0 0 0 0 1 0 72 255 244 2 14 1 242 0 45 0 73 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 42 47 27 185 0 42 0 3 62 89 185 0 3 0 1 244 186 0 6 0 42 0 19 17 18 57 184 0 19 16 185 0 26 0 1 244 186 0 31 0 19 0 42 17 18 57 48 49 55 30 1 51 50 54 53 52 38 39 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 22 23 30 1 21 20 14 2 35 34 38 39 112 41 94 66 66 64 69 89 38 67 50 30 26 51 77 50 55 104 36 40 32 78 45 34 46 28 12 82 66 99 95 28 55 81 52 72 121 45 118 30 36 44 32 28 44 22 9 26 35 42 26 29 51 37 21 37 25 53 23 28 11 19 26 14 30 39 17 25 64 56 30 52 40 23 45 31 0 1 0 69 255 244 2 34 2 110 0 27 0 77 0 184 0 5 47 184 0 0 69 88 184 0 3 47 27 185 0 3 0 7 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 3 62 89 184 0 3 16 185 0 1 0 1 244 184 0 3 16 184 0 7 208 184 0 1 16 184 0 8 208 184 0 22 16 185 0 15 0 1 244 48 49 19 35 53 63 1 51 21 51 21 35 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 53 206 137 140 11 68 239 239 12 28 48 35 35 56 26 18 33 80 40 53 72 43 19 1 163 62 5 136 136 67 231 33 49 34 17 12 10 60 12 17 29 53 74 45 0 1 0 77 255 244 1 249 1 230 0 20 0 101 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 7 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 3 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 186 0 2 0 6 0 19 17 18 57 184 0 6 16 185 0 15 0 1 244 184 0 2 16 185 0 18 0 1 244 48 49 33 35 39 35 14 1 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 1 249 67 7 4 37 87 57 88 81 83 51 61 42 68 41 82 85 43 54 99 97 1 46 254 221 69 67 43 47 1 81 0 1 0 51 0 0 2 37 1 230 0 13 0 60 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 7 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 185 0 5 0 1 244 48 49 19 51 19 30 1 23 51 62 1 55 19 51 3 35 51 83 112 15 27 13 4 13 25 15 112 79 201 92 1 230 254 236 37 71 35 35 71 37 1 20 254 26 0 1 0 8 0 0 2 80 1 230 0 33 0 116 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 7 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 7 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 186 0 6 0 0 0 33 17 18 57 184 0 6 16 184 0 15 208 186 0 28 0 0 0 23 17 18 57 48 49 19 51 19 30 1 23 51 62 1 63 1 51 23 30 1 23 51 62 1 55 19 51 3 35 39 46 1 39 35 14 1 15 1 35 8 84 59 7 12 5 4 7 14 8 59 70 60 8 14 8 4 7 11 6 59 78 106 99 58 7 12 8 4 6 12 9 56 98 1 230 254 231 35 66 34 34 67 34 252 252 35 66 34 34 66 35 1 25 254 26 246 35 69 37 32 68 42 245 0 1 0 64 0 0 2 23 1 230 0 25 0 101 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 7 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 7 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 3 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 186 0 19 0 1 0 25 17 18 57 184 0 19 16 184 0 0 208 184 0 19 16 184 0 13 208 184 0 7 208 48 49 55 39 51 23 30 1 23 51 62 1 63 1 51 7 23 35 39 46 1 39 35 14 1 15 1 35 249 171 91 77 13 29 15 4 14 28 13 73 87 173 186 90 85 15 33 16 4 15 30 15 80 88 252 234 107 20 42 20 20 44 20 105 241 245 112 21 46 21 22 43 23 112 0 0 1 0 49 255 47 2 39 1 230 0 28 0 91 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 7 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 7 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 5 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 3 62 89 184 0 25 16 185 0 3 0 1 244 186 0 14 0 8 0 7 17 18 57 48 49 23 30 1 51 50 54 63 1 3 51 19 30 1 23 51 62 1 55 19 51 3 14 3 35 34 39 55 84 10 23 11 51 64 18 15 227 83 119 14 31 15 4 13 27 12 106 78 214 14 36 50 65 41 36 28 17 134 3 4 59 45 36 1 231 254 243 32 74 35 35 73 33 1 13 253 242 36 62 45 26 10 65 0 0 1 0 71 0 0 2 20 1 230 0 9 0 61 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 7 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 55 1 33 53 33 21 1 33 21 33 71 1 77 254 216 1 158 254 178 1 88 254 51 44 1 119 67 44 254 137 67 0 0 255 255 0 32 0 0 2 56 3 50 2 38 0 4 0 0 0 6 2 224 0 0 0 0 255 255 0 32 0 0 2 56 3 50 2 38 0 4 0 0 0 6 2 226 0 0 0 0 255 255 0 32 0 0 2 56 3 50 2 38 0 4 0 0 0 6 2 228 0 0 0 0 255 255 0 32 0 0 2 56 3 51 2 38 0 4 0 0 0 6 2 230 0 0 0 0 255 255 0 32 0 0 2 56 3 45 2 38 0 4 0 0 0 6 2 238 0 0 0 0 255 255 0 32 0 0 2 56 3 18 2 38 0 4 0 0 0 6 2 232 0 0 0 0 255 255 0 32 0 0 2 56 3 50 2 38 0 4 0 0 0 6 2 234 0 0 0 0 255 255 0 32 0 0 2 56 3 107 2 38 0 4 0 0 0 6 2 242 0 0 0 0 255 255 0 32 0 0 2 56 3 50 2 38 0 4 0 0 0 6 2 246 0 0 0 0 255 255 0 32 255 30 2 56 2 144 2 38 0 4 0 0 0 6 2 252 0 0 0 0 255 255 0 32 0 0 2 56 3 104 2 38 0 4 0 0 0 6 2 240 0 0 0 0 255 255 0 32 0 0 2 56 3 113 2 38 0 4 0 0 0 6 3 14 0 0 0 0 255 255 0 32 0 0 2 56 3 113 2 38 0 4 0 0 0 6 3 16 0 0 0 0 255 255 0 32 0 0 2 56 3 138 2 38 0 4 0 0 0 6 3 18 0 0 0 0 255 255 0 32 0 0 2 56 3 170 2 38 0 4 0 0 0 6 3 20 0 0 0 0 255 255 0 32 255 30 2 56 3 50 2 38 0 4 0 0 0 38 2 228 0 0 0 6 2 252 0 0 255 255 0 32 0 0 2 56 3 139 2 38 0 4 0 0 0 6 3 22 0 0 0 0 255 255 0 32 0 0 2 56 3 139 2 38 0 4 0 0 0 6 3 24 0 0 0 0 255 255 0 32 0 0 2 56 3 184 2 38 0 4 0 0 0 6 3 26 0 0 0 0 255 255 0 32 0 0 2 56 3 171 2 38 0 4 0 0 0 6 3 28 0 0 0 0 255 255 0 32 255 30 2 56 3 50 2 38 0 4 0 0 0 38 2 234 0 0 0 6 2 252 0 0 0 2 0 32 255 44 2 87 2 144 0 9 0 37 0 101 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 13 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 3 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 3 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 187 0 35 0 1 0 13 0 4 43 187 0 0 0 1 0 23 0 4 43 184 0 27 16 185 0 4 0 1 244 48 49 1 39 46 1 39 35 14 1 15 1 1 14 1 35 34 38 53 52 62 2 55 35 39 35 7 35 19 51 19 14 1 21 20 22 51 50 55 1 141 31 17 32 16 4 16 32 17 31 1 142 14 46 20 40 55 14 21 27 13 19 62 238 63 85 221 94 221 35 45 29 17 23 19 1 11 100 55 109 57 57 109 55 100 254 61 11 17 44 43 20 38 32 26 9 200 200 2 144 253 112 14 61 32 23 23 14 0 0 2 255 255 0 0 2 79 2 144 0 6 0 22 0 102 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 13 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 3 62 89 187 0 0 0 1 0 10 0 4 43 187 0 19 0 1 0 20 0 4 43 184 0 14 16 185 0 1 0 1 244 184 0 8 16 185 0 7 0 1 244 184 0 1 16 184 0 17 208 48 49 1 17 35 14 1 15 1 5 21 33 53 35 7 35 1 33 21 35 21 51 21 35 21 1 61 3 20 43 20 46 1 150 254 238 158 73 87 1 4 1 67 189 147 147 1 2 1 76 54 105 54 119 187 71 191 191 2 144 70 205 71 239 0 3 0 27 0 0 2 41 2 144 0 12 0 21 0 45 0 99 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 13 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 3 62 89 185 0 0 0 1 244 184 0 11 208 184 0 8 208 184 0 7 208 184 0 13 208 184 0 37 16 185 0 20 0 1 244 186 0 22 0 13 0 7 17 18 57 184 0 11 16 184 0 33 208 184 0 8 16 184 0 35 208 184 0 34 208 48 49 37 50 54 53 52 38 43 1 21 51 21 35 21 17 51 50 54 53 52 38 43 1 23 30 1 21 20 14 2 43 1 53 35 53 55 17 51 50 30 2 21 20 6 7 1 38 85 94 92 87 107 143 143 90 84 74 78 76 94 214 72 80 36 65 91 55 202 77 77 187 50 83 59 33 56 59 63 67 70 65 60 101 47 114 1 61 56 56 54 48 238 11 80 69 50 73 49 24 177 42 5 1 176 18 38 60 42 48 75 15 0 255 255 0 66 255 43 2 42 2 156 2 38 0 6 0 0 0 6 3 0 47 0 0 0 255 255 0 66 255 244 2 42 3 50 2 38 0 6 0 0 0 6 2 226 47 0 0 0 255 255 0 66 255 244 2 42 3 50 2 38 0 6 0 0 0 6 2 228 47 0 0 0 255 255 0 66 255 244 2 42 3 50 2 38 0 6 0 0 0 6 2 246 47 0 0 0 255 255 0 66 255 244 2 42 3 53 2 38 0 6 0 0 0 6 2 236 47 0 0 0 255 255 0 85 0 0 2 37 3 50 2 38 0 7 0 0 0 6 2 246 0 0 0 0 255 255 0 85 255 30 2 37 2 144 2 38 0 7 0 0 0 6 2 252 247 0 0 0 255 255 0 85 255 85 2 37 2 144 2 38 0 7 0 0 0 6 3 4 247 0 0 0 255 255 0 16 0 0 2 43 2 144 2 6 0 230 0 0 255 255 0 115 0 0 2 18 3 50 2 38 0 8 0 0 0 6 2 224 31 0 0 0 255 255 0 115 0 0 2 18 3 50 2 38 0 8 0 0 0 6 2 226 31 0 0 0 255 255 0 115 0 0 2 18 3 50 2 38 0 8 0 0 0 6 2 228 31 0 0 0 255 255 0 115 0 0 2 18 3 50 2 38 0 8 0 0 0 6 2 246 31 0 0 0 255 255 0 115 0 0 2 18 3 45 2 38 0 8 0 0 0 6 2 238 31 0 0 0 255 255 0 115 0 0 2 18 3 18 2 38 0 8 0 0 0 6 2 232 31 0 0 0 255 255 0 115 0 0 2 18 3 50 2 38 0 8 0 0 0 6 2 234 31 0 0 0 255 255 0 115 0 0 2 18 3 53 2 38 0 8 0 0 0 6 2 236 31 0 0 0 255 255 0 115 255 30 2 18 2 144 2 38 0 8 0 0 0 6 2 252 32 0 0 0 255 255 0 115 0 0 2 18 3 104 2 38 0 8 0 0 0 6 2 240 31 0 0 0 255 255 0 115 0 0 2 18 3 51 2 38 0 8 0 0 0 6 2 230 31 0 0 0 255 255 0 115 0 0 2 53 3 113 2 38 0 8 0 0 0 6 3 14 31 0 0 0 255 255 0 115 0 0 2 18 3 113 2 38 0 8 0 0 0 6 3 16 31 0 0 0 255 255 0 115 0 0 2 26 3 138 2 38 0 8 0 0 0 6 3 18 31 0 0 0 255 255 0 115 0 0 2 18 3 170 2 38 0 8 0 0 0 6 3 20 31 0 0 0 255 255 0 115 255 30 2 18 3 50 2 38 0 8 0 0 0 38 2 228 31 0 0 6 2 252 32 0 0 1 0 115 255 44 2 33 2 144 0 33 0 94 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 3 62 89 187 0 19 0 1 0 26 0 4 43 187 0 5 0 1 0 6 0 4 43 184 0 0 16 185 0 2 0 1 244 184 0 32 16 185 0 8 0 1 244 48 49 19 33 21 33 21 33 21 33 21 33 21 35 14 3 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 33 115 1 149 254 191 1 15 254 241 1 75 4 17 33 25 16 29 18 12 19 10 22 14 46 20 39 56 47 28 254 182 2 144 70 206 71 238 71 2 19 29 37 20 23 23 7 7 45 11 17 44 43 42 65 18 0 255 255 0 53 255 244 2 21 3 50 2 38 0 10 0 0 0 6 2 228 31 0 0 0 255 255 0 53 255 244 2 21 3 50 2 38 0 10 0 0 0 6 2 234 31 0 0 0 255 255 0 53 255 244 2 21 3 53 2 38 0 10 0 0 0 6 2 236 31 0 0 0 255 255 0 53 255 40 2 21 2 156 2 38 0 10 0 0 0 6 2 254 35 0 0 0 255 255 0 53 255 244 2 21 3 50 2 38 0 10 0 0 0 6 2 246 31 0 0 0 255 255 0 53 255 244 2 21 3 18 2 38 0 10 0 0 0 6 2 232 31 0 0 0 255 255 0 53 255 244 2 21 3 51 2 38 0 10 0 0 0 6 2 230 31 0 0 0 255 255 0 79 0 0 2 9 3 50 2 38 0 11 0 0 0 6 2 228 0 0 0 0 255 255 0 79 255 30 2 9 2 144 2 38 0 11 0 0 0 6 2 252 0 0 0 0 255 255 0 79 255 50 2 9 2 144 2 38 0 11 0 0 0 6 3 3 0 0 0 0 0 2 0 10 0 0 2 78 2 144 0 3 0 23 0 131 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 13 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 13 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 3 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 20 16 184 0 19 220 185 0 0 0 1 244 184 0 3 220 184 0 0 16 184 0 5 208 184 0 3 16 185 0 8 0 1 244 184 0 0 16 184 0 12 208 184 0 19 16 184 0 15 208 184 0 19 16 184 0 22 208 48 49 1 33 21 33 55 35 17 35 17 33 17 35 17 35 53 55 53 51 21 33 53 51 21 51 1 181 254 238 1 18 153 69 84 254 238 84 69 69 84 1 18 84 69 1 236 111 111 254 20 1 53 254 203 1 236 42 5 117 117 117 117 255 255 0 95 0 0 1 249 3 50 2 38 0 12 0 0 0 6 2 224 0 0 0 0 255 255 0 95 0 0 1 249 3 50 2 38 0 12 0 0 0 6 2 226 0 0 0 0 255 255 0 95 0 0 1 249 3 50 2 38 0 12 0 0 0 6 2 228 0 0 0 0 255 255 0 95 0 0 1 249 3 51 2 38 0 12 0 0 0 6 2 230 0 0 0 0 255 255 0 95 0 0 1 249 3 45 2 38 0 12 0 0 0 6 2 238 0 0 0 0 255 255 0 95 0 0 1 249 3 18 2 38 0 12 0 0 0 6 2 232 0 0 0 0 255 255 0 95 0 0 1 249 3 50 2 38 0 12 0 0 0 6 2 234 0 0 0 0 255 255 0 95 0 0 1 249 3 53 2 38 0 12 0 0 0 6 2 236 0 0 0 0 255 255 0 95 0 0 1 249 3 50 2 38 0 12 0 0 0 6 2 246 0 0 0 0 255 255 0 95 0 0 1 249 3 104 2 38 0 12 0 0 0 6 2 240 0 0 0 0 255 255 0 95 255 30 1 249 2 144 2 38 0 12 0 0 0 6 2 252 1 0 0 0 0 1 0 95 255 44 1 249 2 144 0 30 0 96 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 13 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 187 0 17 0 1 0 23 0 4 43 184 0 29 16 185 0 0 0 1 244 184 0 4 16 185 0 2 0 1 244 184 0 6 208 184 0 0 16 184 0 8 208 48 49 55 51 17 35 53 33 21 35 17 51 21 35 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 35 95 163 163 1 154 163 163 163 32 34 30 18 23 17 23 14 46 20 40 55 42 24 183 71 2 3 70 70 253 253 71 24 52 31 23 23 14 45 11 17 44 43 43 60 22 0 0 255 255 0 81 255 244 1 237 3 50 2 38 0 13 0 0 0 6 2 228 21 0 0 0 255 255 0 98 255 40 2 67 2 144 2 38 0 14 0 0 0 6 2 254 38 0 0 0 255 255 0 134 0 0 2 29 3 50 2 38 0 15 0 0 0 6 2 226 147 0 0 0 255 255 0 134 0 0 2 29 2 215 2 38 0 15 0 0 0 6 3 31 124 223 0 0 255 255 0 134 255 40 2 29 2 144 2 38 0 15 0 0 0 6 2 254 46 0 0 0 255 255 0 134 0 0 2 29 2 144 2 38 0 15 0 0 0 7 2 235 0 130 254 211 255 255 0 134 255 30 2 29 2 144 2 38 0 15 0 0 0 6 2 252 46 0 0 0 255 255 0 67 255 30 2 29 3 18 2 38 0 15 0 0 0 38 2 232 147 0 0 6 2 252 46 0 255 255 0 134 255 85 2 29 2 144 2 38 0 15 0 0 0 6 3 4 46 0 0 0 0 1 0 53 0 0 2 29 2 144 0 13 0 73 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 13 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 3 62 89 185 0 0 0 1 244 186 0 3 0 1 0 7 17 18 57 184 0 3 16 184 0 6 208 184 0 3 16 184 0 12 208 184 0 9 208 48 49 37 21 33 53 7 53 55 17 51 17 55 21 7 21 2 29 254 105 81 81 82 226 226 71 71 227 43 67 44 1 105 254 191 120 68 120 196 255 255 0 81 255 30 2 7 2 144 2 38 0 16 0 0 0 6 2 252 0 0 0 0 255 255 0 83 0 0 2 5 3 50 2 38 0 17 0 0 0 6 2 226 6 0 0 0 255 255 0 83 0 0 2 5 3 50 2 38 0 17 0 0 0 6 2 246 6 0 0 0 255 255 0 83 0 0 2 5 3 51 2 38 0 17 0 0 0 6 2 230 6 0 0 0 255 255 0 83 255 40 2 5 2 144 2 38 0 17 0 0 0 6 2 254 0 0 0 0 255 255 0 83 0 0 2 5 3 53 2 38 0 17 0 0 0 6 2 236 6 0 0 0 255 255 0 83 255 30 2 5 2 144 2 38 0 17 0 0 0 6 2 252 0 0 0 0 255 255 0 83 255 85 2 5 2 144 2 38 0 17 0 0 0 6 3 4 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 224 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 226 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 228 0 0 0 0 255 255 0 48 255 244 2 40 3 51 2 38 0 18 0 0 0 6 2 230 0 0 0 0 255 255 0 48 255 244 2 40 3 45 2 38 0 18 0 0 0 6 2 238 0 0 0 0 255 255 0 48 255 244 2 40 3 18 2 38 0 18 0 0 0 6 2 232 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 234 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 244 0 0 0 0 255 255 0 48 255 244 2 40 3 50 2 38 0 18 0 0 0 6 2 246 0 0 0 0 255 255 0 48 255 30 2 40 2 156 2 38 0 18 0 0 0 6 2 252 0 0 0 0 255 255 0 48 255 244 2 40 3 104 2 38 0 18 0 0 0 6 2 240 0 0 0 0 255 255 0 48 255 244 2 40 3 113 2 38 0 18 0 0 0 6 3 14 0 0 0 0 255 255 0 48 255 244 2 40 3 113 2 38 0 18 0 0 0 6 3 16 0 0 0 0 255 255 0 48 255 244 2 40 3 138 2 38 0 18 0 0 0 6 3 18 0 0 0 0 255 255 0 48 255 244 2 40 3 170 2 38 0 18 0 0 0 6 3 20 0 0 0 0 255 255 0 48 255 30 2 40 3 50 2 38 0 18 0 0 0 38 2 228 0 0 0 6 2 252 0 0 0 3 0 45 255 226 2 44 2 174 0 10 0 21 0 47 0 125 0 184 0 0 69 88 184 0 43 47 27 185 0 43 0 13 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 3 62 89 186 0 21 0 30 0 43 17 18 57 184 0 21 16 184 0 0 208 184 0 30 16 185 0 3 0 1 244 186 0 10 0 30 0 43 17 18 57 184 0 10 16 184 0 11 208 184 0 43 16 185 0 14 0 1 244 184 0 10 16 184 0 22 208 184 0 0 16 184 0 32 208 184 0 21 16 184 0 35 208 184 0 11 16 184 0 45 208 48 49 55 30 1 51 50 62 2 53 52 47 1 46 1 35 34 14 2 21 20 23 1 30 1 21 20 14 2 35 34 39 7 39 55 46 1 53 52 62 2 51 50 23 55 23 192 21 55 32 37 62 43 24 25 31 21 56 33 38 61 43 24 27 1 76 29 30 37 67 93 55 90 64 53 48 63 29 31 37 67 92 56 92 63 54 47 116 26 29 38 71 99 62 89 64 56 26 29 37 68 98 61 95 64 1 133 43 115 72 79 127 89 48 61 79 32 93 45 118 73 79 125 87 46 61 79 32 0 0 0 0 2 0 33 0 0 2 79 2 145 0 18 0 27 0 79 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 13 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 187 0 8 0 1 0 9 0 4 43 184 0 3 16 185 0 6 0 1 244 184 0 13 16 185 0 11 0 1 244 184 0 22 208 184 0 6 16 184 0 24 208 48 49 19 52 54 51 33 21 35 21 51 21 35 21 51 21 33 34 46 2 55 20 22 59 1 17 35 34 6 33 141 125 1 26 194 148 148 204 254 217 62 97 68 36 86 84 86 21 21 86 84 1 75 158 168 70 207 71 238 71 45 85 123 78 126 137 2 8 131 0 0 0 2 0 48 255 244 2 50 3 5 0 19 0 52 0 71 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 13 62 89 184 0 0 69 88 184 0 34 47 27 185 0 34 0 3 62 89 185 0 0 0 1 244 184 0 44 16 185 0 10 0 1 244 186 0 26 0 34 0 44 17 18 57 184 0 26 16 184 0 46 208 48 49 37 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 30 1 21 20 6 7 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 23 62 1 53 52 38 39 1 44 37 62 43 24 24 43 62 37 38 61 43 24 24 43 61 1 21 11 12 57 45 44 48 37 67 93 55 56 92 67 37 37 67 92 56 63 53 39 40 8 7 61 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 2 200 14 32 19 45 50 11 43 137 91 79 127 89 48 48 89 127 79 79 125 87 46 31 6 30 30 11 20 10 0 255 255 0 48 255 244 2 50 3 50 2 38 0 165 0 0 0 6 2 226 0 0 0 0 255 255 0 48 255 244 2 50 3 50 2 38 0 165 0 0 0 6 2 224 0 0 0 0 255 255 0 48 255 244 2 50 3 104 2 38 0 165 0 0 0 6 2 240 0 0 0 0 255 255 0 48 255 244 2 50 3 51 2 38 0 165 0 0 0 6 2 230 0 0 0 0 255 255 0 48 255 30 2 50 3 5 2 38 0 165 0 0 0 6 2 252 0 0 0 0 0 2 0 48 255 44 2 40 2 156 0 37 0 57 0 75 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 13 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 187 0 35 0 1 0 3 0 4 43 184 0 9 16 184 0 27 208 184 0 9 16 185 0 38 0 1 244 184 0 19 16 185 0 48 0 1 244 48 49 5 14 1 35 34 38 53 52 54 55 46 3 53 52 62 2 51 50 30 2 21 20 6 7 14 3 21 20 22 51 50 55 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 154 15 45 20 40 56 36 26 65 93 61 29 37 67 92 56 55 93 67 37 96 79 20 30 19 9 30 17 22 19 87 37 62 43 24 24 43 62 37 38 61 43 24 24 43 61 184 11 17 44 43 33 59 22 2 58 95 122 65 79 125 87 46 47 87 125 78 133 164 34 9 25 29 31 13 23 23 14 200 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 0 255 255 0 100 0 0 2 41 3 50 2 38 0 21 0 0 0 6 2 226 5 0 0 0 255 255 0 100 0 0 2 41 3 50 2 38 0 21 0 0 0 6 2 246 5 0 0 0 255 255 0 100 255 40 2 41 2 144 2 38 0 21 0 0 0 6 2 254 20 0 0 0 255 255 0 100 255 30 2 41 2 144 2 38 0 21 0 0 0 6 2 252 20 0 0 0 255 255 0 100 255 30 2 41 3 18 2 38 0 21 0 0 0 38 2 232 5 0 0 6 2 252 20 0 255 255 0 100 255 85 2 41 2 144 2 38 0 21 0 0 0 6 3 4 20 0 0 0 255 255 0 67 255 244 2 25 3 50 2 38 0 22 0 0 0 6 2 226 11 0 0 0 255 255 0 67 255 244 2 25 3 50 2 38 0 22 0 0 0 6 2 228 11 0 0 0 255 255 0 67 255 244 2 25 3 50 2 38 0 22 0 0 0 6 2 246 11 0 0 0 255 255 0 67 255 43 2 25 2 156 2 38 0 22 0 0 0 6 3 0 13 0 0 0 255 255 0 67 255 40 2 25 2 156 2 38 0 22 0 0 0 6 2 254 10 0 0 0 255 255 0 67 255 244 2 25 3 53 2 38 0 22 0 0 0 6 2 236 11 0 0 0 255 255 0 67 255 30 2 25 2 156 2 38 0 22 0 0 0 6 2 252 10 0 0 0 0 1 0 79 255 244 2 51 2 156 0 42 0 104 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 13 62 89 184 0 0 69 88 184 0 41 47 27 185 0 41 0 3 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 3 62 89 187 0 33 0 1 0 32 0 4 43 186 0 9 0 33 0 32 17 18 57 184 0 17 16 185 0 24 0 1 244 184 0 5 16 185 0 37 0 1 244 186 0 27 0 37 0 17 17 18 57 48 49 19 52 62 2 51 50 22 23 7 30 1 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 2 47 1 55 46 1 35 34 6 21 17 35 79 28 57 88 59 78 98 23 117 88 82 24 45 63 40 52 83 27 48 25 51 30 44 48 15 38 63 49 5 118 14 57 44 68 76 85 1 176 50 87 63 36 84 70 152 21 98 72 39 67 49 28 40 33 53 29 27 63 50 23 42 36 28 10 54 153 34 48 89 94 254 96 0 0 255 255 0 42 0 0 2 46 3 50 2 38 0 23 0 0 0 6 2 246 0 0 0 0 255 255 0 42 255 43 2 46 2 144 2 38 0 23 0 0 0 6 3 0 0 0 0 0 255 255 0 42 255 40 2 46 2 144 2 38 0 23 0 0 0 6 2 254 1 0 0 0 255 255 0 42 255 30 2 46 2 144 2 38 0 23 0 0 0 6 2 252 1 0 0 0 255 255 0 42 255 85 2 46 2 144 2 38 0 23 0 0 0 6 3 4 1 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 224 0 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 226 0 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 228 0 0 0 0 255 255 0 79 255 244 2 9 3 51 2 38 0 24 0 0 0 6 2 230 0 0 0 0 255 255 0 79 255 244 2 9 3 45 2 38 0 24 0 0 0 6 2 238 0 0 0 0 255 255 0 79 255 244 2 9 3 18 2 38 0 24 0 0 0 6 2 232 0 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 234 0 0 0 0 255 255 0 79 255 244 2 9 3 107 2 38 0 24 0 0 0 6 2 242 0 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 244 0 0 0 0 255 255 0 79 255 244 2 9 3 50 2 38 0 24 0 0 0 6 2 246 0 0 0 0 255 255 0 79 255 244 2 9 3 139 2 38 0 24 0 0 0 6 3 6 0 0 0 0 255 255 0 79 255 244 2 9 3 182 2 38 0 24 0 0 0 6 3 8 0 0 0 0 255 255 0 79 255 244 2 9 3 182 2 38 0 24 0 0 0 6 3 10 0 0 0 0 255 255 0 79 255 244 2 9 3 182 2 38 0 24 0 0 0 6 3 12 0 0 0 0 255 255 0 79 255 30 2 9 2 144 2 38 0 24 0 0 0 6 2 252 0 0 0 0 255 255 0 79 255 244 2 9 3 104 2 38 0 24 0 0 0 6 2 240 0 0 0 0 0 1 0 79 255 44 2 9 2 144 0 42 0 82 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 13 62 89 184 0 0 69 88 184 0 39 47 27 185 0 39 0 3 62 89 187 0 24 0 1 0 31 0 4 43 184 0 39 16 185 0 7 0 1 244 184 0 39 16 184 0 18 208 48 49 19 51 17 20 30 2 51 50 62 2 53 17 51 17 20 6 7 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 46 1 53 79 84 21 36 50 30 30 51 37 22 81 69 55 53 48 29 18 12 19 10 22 14 45 20 40 56 13 20 23 9 110 107 2 144 254 102 51 71 43 20 20 43 71 51 1 154 254 104 102 116 25 24 61 27 23 23 7 7 45 11 17 44 43 21 33 28 23 9 2 132 125 0 0 1 0 79 255 244 2 118 3 25 0 40 0 74 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 13 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 13 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 3 62 89 184 0 33 16 185 0 8 0 1 244 184 0 14 16 185 0 27 0 1 244 48 49 1 30 1 21 20 14 2 7 17 20 14 2 35 34 46 2 53 17 51 17 20 30 2 51 50 62 2 53 17 51 62 1 53 52 38 39 2 95 11 12 18 30 39 22 33 58 81 48 48 82 59 33 84 21 37 50 30 30 50 38 21 35 40 48 8 7 3 25 14 32 19 25 36 26 16 5 254 140 71 98 63 28 28 63 98 71 1 152 254 102 51 71 43 20 20 43 71 51 1 154 5 27 35 11 20 10 0 0 255 255 0 79 255 244 2 118 3 50 2 38 0 208 0 0 0 6 2 226 0 0 0 0 255 255 0 79 255 244 2 118 3 50 2 38 0 208 0 0 0 6 2 224 0 0 0 0 255 255 0 79 255 244 2 118 3 104 2 38 0 208 0 0 0 6 2 240 0 0 0 0 255 255 0 79 255 244 2 118 3 51 2 38 0 208 0 0 0 6 2 230 0 0 0 0 255 255 0 79 255 30 2 118 3 25 2 38 0 208 0 0 0 6 2 252 0 0 0 0 255 255 0 10 0 0 2 78 3 50 2 38 0 26 0 0 0 6 2 224 0 0 0 0 255 255 0 10 0 0 2 78 3 50 2 38 0 26 0 0 0 6 2 226 0 0 0 0 255 255 0 10 0 0 2 78 3 50 2 38 0 26 0 0 0 6 2 228 0 0 0 0 255 255 0 10 0 0 2 78 3 45 2 38 0 26 0 0 0 6 2 238 0 0 0 0 255 255 0 38 0 0 2 50 3 50 2 38 0 28 0 0 0 6 2 224 0 0 0 0 255 255 0 38 0 0 2 50 3 50 2 38 0 28 0 0 0 6 2 226 0 0 0 0 255 255 0 38 0 0 2 50 3 50 2 38 0 28 0 0 0 6 2 228 0 0 0 0 255 255 0 38 0 0 2 50 3 45 2 38 0 28 0 0 0 6 2 238 0 0 0 0 255 255 0 38 0 0 2 50 3 53 2 38 0 28 0 0 0 6 2 236 0 0 0 0 255 255 0 38 255 30 2 50 2 144 2 38 0 28 0 0 0 6 2 252 0 0 0 0 255 255 0 38 0 0 2 50 3 104 2 38 0 28 0 0 0 6 2 240 0 0 0 0 255 255 0 38 0 0 2 50 3 51 2 38 0 28 0 0 0 6 2 230 0 0 0 0 255 255 0 65 0 0 2 27 3 50 2 38 0 29 0 0 0 6 2 226 15 0 0 0 255 255 0 65 0 0 2 27 3 50 2 38 0 29 0 0 0 6 2 246 15 0 0 0 255 255 0 65 0 0 2 27 3 53 2 38 0 29 0 0 0 6 2 236 15 0 0 0 255 255 0 65 255 30 2 27 2 145 2 38 0 29 0 0 0 6 2 252 11 0 0 0 0 2 0 16 0 0 2 43 2 144 0 12 0 25 0 83 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 13 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 187 0 3 0 1 0 0 0 4 43 184 0 11 16 185 0 13 0 1 244 184 0 4 16 185 0 19 0 1 244 184 0 3 16 184 0 21 208 184 0 0 16 184 0 23 208 48 49 19 35 53 55 17 51 50 22 21 20 6 43 1 55 50 54 53 52 38 43 1 21 51 21 35 21 91 75 75 161 148 155 155 145 164 155 112 111 111 112 72 143 143 1 65 42 5 1 32 168 157 157 174 68 138 125 125 132 220 47 253 0 2 0 101 0 0 2 33 2 144 0 16 0 25 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 187 0 17 0 1 0 13 0 4 43 187 0 3 0 1 0 23 0 4 43 48 49 19 51 21 51 50 30 2 21 20 14 2 43 1 21 35 55 50 54 53 52 38 43 1 17 101 84 118 54 90 63 35 35 64 89 54 118 84 191 87 83 85 85 107 2 144 110 20 46 73 54 52 77 50 24 150 218 64 71 71 54 254 252 0 0 2 0 62 255 244 2 38 2 156 0 6 0 35 0 67 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 13 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 3 62 89 187 0 29 0 1 0 6 0 4 43 184 0 20 16 185 0 3 0 1 244 184 0 10 16 185 0 32 0 1 244 48 49 19 30 1 51 50 54 55 1 62 1 51 50 30 2 21 20 14 2 35 34 46 2 53 52 54 55 33 46 1 35 34 6 7 147 7 82 66 68 87 8 254 178 31 86 58 57 90 63 34 36 65 92 55 55 89 62 34 1 1 1 147 3 84 80 41 65 25 1 27 106 118 120 105 1 55 32 41 47 87 125 79 79 126 89 48 48 89 124 76 5 12 5 118 132 33 26 0 255 255 0 81 255 244 2 3 2 209 2 38 0 30 0 0 0 6 2 223 14 0 0 0 255 255 0 81 255 244 2 3 2 209 2 38 0 30 0 0 0 6 2 225 14 0 0 0 255 255 0 81 255 244 2 3 2 209 2 38 0 30 0 0 0 6 2 227 14 0 0 0 255 255 0 81 255 244 2 3 2 176 2 38 0 30 0 0 0 6 2 229 14 0 0 0 255 255 0 81 255 244 2 3 2 186 2 38 0 30 0 0 0 6 2 237 14 0 0 0 255 255 0 81 255 244 2 3 2 146 2 38 0 30 0 0 0 6 2 231 14 0 0 0 255 255 0 81 255 244 2 3 2 197 2 38 0 30 0 0 0 6 2 233 14 0 0 0 255 255 0 81 255 244 2 3 2 215 2 38 0 30 0 0 0 6 2 241 14 0 0 0 255 255 0 81 255 244 2 3 2 209 2 38 0 30 0 0 0 6 2 245 14 0 0 0 255 255 0 81 255 30 2 3 1 242 2 38 0 30 0 0 0 6 2 252 3 0 0 0 255 255 0 81 255 244 2 3 2 215 2 38 0 30 0 0 0 6 2 239 14 0 0 0 255 255 0 81 255 244 2 34 2 242 2 38 0 30 0 0 0 6 3 13 14 0 0 0 255 255 0 81 255 244 2 3 2 242 2 38 0 30 0 0 0 6 3 15 14 0 0 0 255 255 0 81 255 244 2 11 3 16 2 38 0 30 0 0 0 6 3 17 14 0 0 0 255 255 0 81 255 244 2 3 3 34 2 38 0 30 0 0 0 6 3 19 14 0 0 0 255 255 0 81 255 30 2 3 2 209 2 38 0 30 0 0 0 38 2 227 14 0 0 6 2 252 3 0 255 255 0 81 255 244 2 3 3 21 2 38 0 30 0 0 0 6 3 21 14 0 0 0 255 255 0 81 255 244 2 3 3 21 2 38 0 30 0 0 0 6 3 23 14 0 0 0 255 255 0 81 255 244 2 3 3 71 2 38 0 30 0 0 0 6 3 25 14 0 0 0 255 255 0 81 255 244 2 3 3 34 2 38 0 30 0 0 0 6 3 27 14 0 0 0 255 255 0 81 255 30 2 3 2 197 2 38 0 30 0 0 0 38 2 233 14 0 0 6 2 252 3 0 0 2 0 81 255 50 2 25 1 242 0 52 0 66 0 133 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 3 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 5 62 89 186 0 5 0 19 0 48 17 18 57 184 0 5 47 184 0 19 16 185 0 10 0 1 244 184 0 35 16 185 0 29 0 1 244 184 0 23 16 184 0 43 208 184 0 48 16 185 0 58 0 1 244 184 0 5 16 185 0 62 0 1 244 48 49 55 52 62 2 55 46 3 35 34 6 7 39 62 3 51 50 22 21 17 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 62 2 55 39 35 14 1 35 34 46 2 55 20 30 2 51 50 54 55 53 14 3 81 39 85 134 94 1 14 30 49 35 48 88 34 32 18 49 55 62 32 100 97 42 44 28 18 22 18 22 14 46 19 38 52 14 23 28 15 7 3 41 99 52 34 60 45 26 80 18 29 39 21 42 81 42 78 105 63 26 126 41 61 44 28 8 25 44 33 20 37 21 56 12 25 20 13 109 91 254 214 17 59 29 23 23 13 41 11 16 43 42 20 37 32 27 9 62 32 46 19 35 51 39 21 29 19 9 37 35 128 6 22 31 39 0 0 3 0 17 255 244 2 85 1 242 0 46 0 55 0 68 0 165 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 7 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 38 47 27 185 0 38 0 3 62 89 184 0 0 69 88 184 0 44 47 27 185 0 44 0 3 62 89 187 0 47 0 1 0 27 0 4 43 186 0 3 0 13 0 44 17 18 57 184 0 3 47 184 0 13 16 185 0 6 0 1 244 186 0 16 0 38 0 13 17 18 57 184 0 38 16 185 0 31 0 1 244 186 0 41 0 38 0 13 17 18 57 184 0 19 16 185 0 52 0 1 244 184 0 44 16 185 0 59 0 1 244 184 0 3 16 185 0 66 0 1 244 48 49 55 52 54 55 46 1 35 34 6 7 39 62 1 51 50 22 23 62 1 51 50 30 2 21 20 6 7 33 30 1 51 50 54 55 23 14 1 35 34 38 39 14 1 35 34 38 37 52 46 2 35 34 6 15 1 20 22 51 50 54 55 46 1 47 1 14 1 17 124 124 1 39 47 26 65 23 31 30 80 45 48 59 14 24 69 48 37 55 37 18 2 2 254 254 3 60 59 28 47 21 29 25 65 38 53 72 24 41 79 38 60 70 1 255 8 20 33 24 47 57 5 241 40 34 26 62 26 8 7 1 1 92 79 129 73 87 19 54 69 25 16 56 20 32 56 42 47 51 36 61 80 45 14 26 13 76 93 18 13 54 17 26 48 43 45 46 75 215 31 56 43 25 82 73 145 39 40 36 35 22 53 29 25 16 58 0 2 0 20 255 244 2 28 2 200 0 12 0 43 0 165 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 7 62 89 184 0 0 69 88 184 0 37 47 27 185 0 37 0 15 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 3 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 187 0 33 0 1 0 36 0 4 43 186 0 29 0 26 0 16 17 18 57 184 0 29 16 185 0 0 0 1 244 184 0 26 16 185 0 3 0 1 244 184 0 16 16 185 0 9 0 1 244 186 0 13 0 16 0 26 17 18 57 184 0 13 16 185 0 12 0 1 244 184 0 36 16 184 0 35 208 184 0 36 16 184 0 40 208 184 0 33 16 184 0 41 208 48 49 55 30 1 51 50 54 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 35 34 38 39 35 7 35 17 35 53 55 53 51 21 51 21 35 21 175 35 71 26 64 84 64 73 32 73 38 2 35 87 43 49 76 51 26 36 61 80 43 35 81 35 3 7 66 73 73 82 212 212 114 31 26 97 86 76 93 35 38 68 34 40 34 61 88 54 60 94 65 34 35 31 54 2 59 43 5 93 93 48 73 255 255 0 80 255 43 2 27 1 242 2 38 0 32 0 0 0 6 2 255 42 0 0 0 255 255 0 80 255 244 2 27 2 209 2 38 0 32 0 0 0 6 2 225 43 0 0 0 255 255 0 80 255 244 2 27 2 209 2 38 0 32 0 0 0 6 2 227 43 0 0 0 255 255 0 80 255 244 2 27 2 209 2 38 0 32 0 0 0 6 2 245 43 0 0 0 255 255 0 80 255 244 2 27 2 201 2 38 0 32 0 0 0 6 2 235 43 0 0 0 255 255 0 51 255 244 2 84 2 248 2 38 0 33 247 0 0 7 3 31 1 19 0 0 255 255 0 60 255 30 1 251 2 200 2 38 0 33 0 0 0 6 2 252 6 0 0 0 255 255 0 60 255 85 1 251 2 200 2 38 0 33 0 0 0 6 3 4 6 0 0 0 0 2 0 60 255 244 2 67 2 200 0 13 0 44 0 165 0 184 0 0 69 88 184 0 32 47 27 185 0 32 0 7 62 89 184 0 0 69 88 184 0 41 47 27 185 0 41 0 15 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 3 62 89 187 0 15 0 1 0 43 0 4 43 186 0 35 0 32 0 22 17 18 57 184 0 35 16 185 0 0 0 1 244 184 0 32 16 185 0 3 0 1 244 184 0 22 16 185 0 11 0 1 244 186 0 18 0 22 0 32 17 18 57 184 0 18 16 185 0 13 0 1 244 184 0 15 16 184 0 14 208 184 0 15 16 184 0 38 208 184 0 43 16 184 0 39 208 48 49 1 46 1 35 34 14 2 21 20 22 51 50 55 19 7 17 35 39 35 14 1 35 34 46 2 53 52 62 2 51 50 22 23 39 53 35 53 51 53 51 21 51 1 169 33 63 31 32 56 41 24 75 68 72 65 154 72 68 7 3 30 83 45 48 77 56 30 37 61 80 43 45 68 34 3 174 174 82 72 1 96 31 26 26 46 65 39 83 93 73 1 190 5 253 197 64 31 45 32 63 90 59 57 91 64 34 34 29 90 66 48 93 93 0 0 255 255 0 69 255 244 2 25 2 209 2 38 0 34 0 0 0 6 2 223 15 0 0 0 255 255 0 69 255 244 2 25 2 209 2 38 0 34 0 0 0 6 2 225 15 0 0 0 255 255 0 69 255 244 2 25 2 209 2 38 0 34 0 0 0 6 2 227 15 0 0 0 255 255 0 69 255 244 2 25 2 209 2 38 0 34 0 0 0 6 2 245 15 0 0 0 255 255 0 69 255 244 2 25 2 186 2 38 0 34 0 0 0 6 2 237 15 0 0 0 255 255 0 69 255 244 2 25 2 146 2 38 0 34 0 0 0 6 2 231 15 0 0 0 255 255 0 69 255 244 2 25 2 197 2 38 0 34 0 0 0 6 2 233 15 0 0 0 255 255 0 69 255 244 2 25 2 201 2 38 0 34 0 0 0 6 2 235 15 0 0 0 255 255 0 69 255 30 2 25 1 242 2 38 0 34 0 0 0 6 2 252 15 0 0 0 255 255 0 69 255 244 2 25 2 215 2 38 0 34 0 0 0 6 2 239 15 0 0 0 255 255 0 69 255 244 2 25 2 176 2 38 0 34 0 0 0 6 2 229 15 0 0 0 255 255 0 69 255 244 2 35 2 242 2 38 0 34 0 0 0 6 3 13 15 0 0 0 255 255 0 69 255 244 2 25 2 242 2 38 0 34 0 0 0 6 3 15 15 0 0 0 255 255 0 69 255 244 2 25 3 16 2 38 0 34 0 0 0 6 3 17 15 0 0 0 255 255 0 69 255 244 2 25 3 34 2 38 0 34 0 0 0 6 3 19 15 0 0 0 255 255 0 69 255 30 2 25 2 209 2 38 0 34 0 0 0 38 2 227 15 0 0 6 2 252 15 0 0 2 0 69 255 50 2 25 1 242 0 53 0 62 0 94 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 7 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 5 62 89 187 0 62 0 1 0 44 0 4 43 184 0 15 16 185 0 8 0 1 244 184 0 26 16 185 0 50 0 1 244 184 0 36 16 185 0 57 0 1 244 48 49 37 14 3 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 14 1 35 34 46 2 53 52 62 2 51 50 30 2 21 20 6 7 33 30 3 51 50 54 55 39 52 38 35 34 14 2 7 2 5 34 45 27 11 28 19 11 19 10 21 14 45 19 38 52 12 20 23 11 22 34 20 54 95 71 41 42 69 89 47 52 82 57 30 1 2 254 132 1 29 49 67 40 43 71 34 27 76 68 30 55 44 30 5 45 24 41 36 33 16 23 23 7 6 41 11 16 43 42 19 36 32 25 9 8 4 35 65 94 60 60 95 66 35 33 60 84 51 13 25 9 39 62 44 24 24 21 183 73 78 20 39 56 36 0 0 255 255 0 72 255 32 2 54 2 209 2 38 0 36 0 0 0 6 2 227 7 0 0 0 255 255 0 72 255 32 2 54 2 197 2 38 0 36 0 0 0 6 2 233 7 0 0 0 255 255 0 72 255 32 2 54 2 201 2 38 0 36 0 0 0 6 2 235 7 0 0 0 255 255 0 72 255 32 2 54 2 198 2 38 0 36 0 0 0 6 3 32 7 0 0 0 255 255 0 72 255 32 2 54 2 209 2 38 0 36 0 0 0 6 2 245 7 0 0 0 255 255 0 72 255 32 2 54 2 146 2 38 0 36 0 0 0 6 2 231 7 0 0 0 255 255 0 72 255 32 2 54 2 176 2 38 0 36 0 0 0 6 2 229 7 0 0 0 255 255 0 10 0 0 2 11 3 92 2 38 0 37 0 0 0 7 2 228 255 102 0 42 255 255 0 93 255 30 2 11 2 200 2 38 0 37 0 0 0 6 2 252 14 0 0 0 255 255 0 93 255 50 2 11 2 200 2 38 0 37 0 0 0 6 3 3 13 0 0 0 0 1 0 20 0 0 2 11 2 200 0 30 0 135 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 7 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 15 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 187 0 20 0 1 0 23 0 4 43 186 0 0 0 3 0 19 17 18 57 184 0 3 16 185 0 12 0 1 244 184 0 0 16 185 0 17 0 1 244 184 0 23 16 184 0 22 208 184 0 23 16 184 0 27 208 184 0 20 16 184 0 28 208 48 49 19 62 1 51 50 22 21 17 35 17 52 38 35 34 14 2 7 17 35 17 35 53 55 53 51 21 51 21 35 21 171 39 88 57 87 81 82 52 60 22 37 36 38 21 82 73 73 82 212 212 1 127 41 54 99 97 254 230 1 15 69 67 11 22 33 22 254 193 2 59 43 5 93 93 48 73 0 0 0 255 255 0 90 0 0 1 157 2 209 2 38 1 50 0 0 0 6 2 223 48 0 0 0 255 255 0 90 0 0 1 207 2 209 2 38 1 50 0 0 0 6 2 225 48 0 0 0 255 255 0 90 0 0 1 224 2 209 2 38 1 50 0 0 0 6 2 227 48 0 0 0 255 255 0 90 0 0 1 234 2 176 2 38 1 50 0 0 0 6 2 229 48 0 0 0 255 255 0 90 0 0 1 242 2 186 2 38 1 50 0 0 0 6 2 237 48 0 0 0 255 255 0 90 0 0 1 215 2 146 2 38 1 50 0 0 0 6 2 231 48 0 0 0 255 255 0 90 0 0 1 222 2 197 2 38 1 50 0 0 0 6 2 233 48 0 0 0 255 255 0 90 0 0 1 224 2 209 2 38 1 50 0 0 0 6 2 245 48 0 0 0 255 255 0 90 0 0 1 175 2 215 2 38 1 50 0 0 0 6 2 239 48 0 0 0 255 255 0 90 255 30 1 158 2 201 2 38 0 38 0 0 0 6 2 252 48 0 0 0 0 2 0 90 255 50 1 185 2 201 0 26 0 38 0 103 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 7 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 3 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 5 62 89 184 0 2 16 185 0 0 0 1 244 184 0 17 16 185 0 10 0 1 244 184 0 2 16 184 0 27 220 184 0 33 220 48 49 1 35 53 33 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 35 19 34 38 53 52 54 51 50 22 21 20 6 1 60 226 1 52 30 35 28 19 11 19 10 21 14 45 19 38 53 12 19 22 10 19 32 29 37 37 29 28 38 38 1 163 67 254 26 22 54 29 23 23 7 6 41 11 16 43 42 20 35 30 25 11 2 74 34 29 29 35 35 29 29 34 0 1 0 90 255 50 1 185 1 230 0 26 0 91 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 7 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 3 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 5 62 89 184 0 2 16 185 0 0 0 1 244 184 0 17 16 185 0 10 0 1 244 48 49 1 35 53 33 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 35 1 60 226 1 52 30 35 28 19 11 19 10 21 14 45 19 38 53 12 19 22 10 19 1 163 67 254 26 22 54 29 23 23 7 6 41 11 16 43 42 20 35 30 25 11 0 1 0 90 0 0 1 142 1 230 0 5 0 47 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 184 0 0 16 185 0 4 0 1 244 48 49 19 33 17 35 17 35 90 1 52 82 226 1 230 254 26 1 163 0 0 255 255 0 55 255 39 1 224 2 209 2 38 1 157 0 0 0 6 2 227 48 0 0 0 255 255 0 106 255 40 2 62 2 200 2 38 0 40 0 0 0 6 2 254 35 0 0 0 0 1 0 106 0 0 2 62 1 230 0 12 0 109 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 7 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 3 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 186 0 2 0 11 0 0 17 18 57 186 0 9 0 11 0 0 17 18 57 184 0 9 16 184 0 6 208 184 0 2 16 185 0 10 0 1 244 48 49 19 51 17 55 37 51 7 19 35 39 7 21 35 106 82 3 1 7 94 194 220 92 179 115 82 1 230 255 0 1 255 193 254 219 240 110 130 255 255 0 81 255 244 2 25 3 102 2 38 0 41 0 0 0 6 2 226 233 52 0 0 255 255 0 81 255 244 2 25 2 248 2 38 0 41 0 0 0 7 3 31 0 136 0 0 255 255 0 43 255 244 1 247 2 200 2 38 0 41 218 0 0 7 2 235 0 137 254 210 255 255 0 81 255 40 2 25 2 200 2 38 0 41 0 0 0 6 2 254 71 0 0 0 255 255 0 81 255 30 2 25 2 200 2 38 0 41 0 0 0 6 2 252 71 0 0 0 255 255 0 81 255 30 2 25 3 112 2 38 0 41 0 0 0 39 2 231 255 241 0 222 0 6 2 252 71 0 0 0 255 255 0 81 255 85 2 25 2 200 2 38 0 41 0 0 0 6 3 4 71 0 0 0 0 1 0 81 255 244 2 25 2 200 0 24 0 87 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 15 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 3 62 89 186 0 7 0 3 0 13 17 18 57 184 0 7 16 184 0 10 208 184 0 13 16 185 0 11 0 1 244 184 0 7 16 184 0 18 208 184 0 15 208 184 0 3 16 185 0 22 0 1 244 48 49 37 14 1 35 34 38 61 1 7 53 55 53 35 53 51 17 55 21 7 21 20 22 51 50 55 2 25 33 58 40 78 81 124 124 166 248 163 163 51 44 40 52 17 12 17 88 87 169 71 70 71 243 67 254 245 91 71 91 217 54 47 23 0 255 255 0 60 255 30 2 44 1 242 2 38 0 42 0 0 0 6 2 252 5 0 0 0 255 255 0 93 0 0 2 11 2 209 2 38 0 43 0 0 0 6 2 225 18 0 0 0 255 255 0 93 0 0 2 11 2 209 2 38 0 43 0 0 0 6 2 245 18 0 0 0 255 255 0 93 0 0 2 11 2 176 2 38 0 43 0 0 0 6 2 229 18 0 0 0 255 255 0 93 255 40 2 11 1 242 2 38 0 43 0 0 0 6 2 254 13 0 0 0 255 255 0 93 0 0 2 11 2 201 2 38 0 43 0 0 0 6 2 235 18 0 0 0 255 255 0 93 255 30 2 11 1 242 2 38 0 43 0 0 0 6 2 252 13 0 0 0 255 255 0 93 255 85 2 11 1 242 2 38 0 43 0 0 0 6 3 4 13 0 0 0 0 2 255 234 0 0 2 86 2 187 0 17 0 38 0 109 0 184 0 0 69 88 184 0 21 47 27 185 0 21 0 7 62 89 184 0 0 69 88 184 0 36 47 27 185 0 36 0 7 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 3 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 186 0 11 0 5 0 3 43 184 0 21 16 185 0 30 0 1 244 186 0 38 0 21 0 35 17 18 57 184 0 38 16 185 0 33 0 1 244 48 49 3 62 1 55 6 35 34 38 53 52 54 51 50 22 21 20 6 7 37 62 1 51 50 22 21 17 35 17 52 38 35 34 6 7 17 35 17 51 23 22 48 53 3 12 14 32 39 42 32 40 50 76 67 1 13 35 80 53 79 76 83 46 52 39 61 39 82 68 7 1 142 26 79 53 6 39 32 35 43 64 57 75 118 35 60 37 51 96 94 254 204 1 41 66 64 41 40 254 166 1 230 76 0 255 255 0 60 255 244 2 28 2 209 2 38 0 44 0 0 0 6 2 223 0 0 0 0 255 255 0 60 255 244 2 28 2 209 2 38 0 44 0 0 0 6 2 225 0 0 0 0 255 255 0 60 255 244 2 28 2 209 2 38 0 44 0 0 0 6 2 227 0 0 0 0 255 255 0 60 255 244 2 28 2 176 2 38 0 44 0 0 0 6 2 229 0 0 0 0 255 255 0 60 255 244 2 28 2 186 2 38 0 44 0 0 0 6 2 237 0 0 0 0 255 255 0 60 255 244 2 28 2 146 2 38 0 44 0 0 0 6 2 231 0 0 0 0 255 255 0 60 255 244 2 28 2 197 2 38 0 44 0 0 0 6 2 233 0 0 0 0 255 255 0 60 255 244 2 28 2 202 2 38 0 44 0 0 0 6 2 243 0 0 0 0 255 255 0 60 255 244 2 28 2 209 2 38 0 44 0 0 0 6 2 245 0 0 0 0 255 255 0 60 255 30 2 28 1 242 2 38 0 44 0 0 0 6 2 252 1 0 0 0 255 255 0 60 255 244 2 28 2 215 2 38 0 44 0 0 0 6 2 239 0 0 0 0 255 255 0 60 255 244 2 28 2 242 2 38 0 44 0 0 0 6 3 13 0 0 0 0 255 255 0 60 255 244 2 28 2 242 2 38 0 44 0 0 0 6 3 15 0 0 0 0 255 255 0 60 255 244 2 28 3 16 2 38 0 44 0 0 0 6 3 17 0 0 0 0 255 255 0 60 255 244 2 28 3 34 2 38 0 44 0 0 0 6 3 19 0 0 0 0 255 255 0 60 255 30 2 28 2 209 2 38 0 44 0 0 0 38 2 227 0 0 0 6 2 252 0 0 0 3 0 60 255 233 2 28 1 253 0 10 0 22 0 48 0 125 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 7 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 3 62 89 186 0 22 0 31 0 44 17 18 57 184 0 22 16 184 0 0 208 184 0 31 16 185 0 2 0 1 244 186 0 10 0 44 0 31 17 18 57 184 0 10 16 184 0 11 208 184 0 44 16 185 0 14 0 1 244 184 0 10 16 184 0 23 208 184 0 0 16 184 0 33 208 184 0 22 16 184 0 36 208 184 0 11 16 184 0 46 208 48 49 55 22 51 50 62 2 53 52 38 47 1 46 1 35 34 14 2 21 20 22 23 1 30 1 21 20 14 2 35 34 39 7 39 55 46 1 53 52 62 2 51 50 23 55 23 201 41 58 35 57 41 22 14 13 30 19 50 29 35 57 41 22 14 13 1 53 27 32 39 66 87 48 83 63 51 37 53 27 32 39 66 87 48 83 63 51 37 92 38 28 49 69 42 33 58 23 38 18 20 28 50 70 42 33 56 23 1 32 32 89 55 60 95 65 34 48 59 29 62 32 88 54 61 95 66 34 48 59 29 0 3 0 11 255 244 2 84 1 242 0 19 0 59 0 68 0 141 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 7 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 7 62 89 184 0 0 69 88 184 0 50 47 27 185 0 50 0 3 62 89 184 0 0 69 88 184 0 55 47 27 185 0 55 0 3 62 89 187 0 60 0 1 0 39 0 4 43 184 0 55 16 185 0 5 0 1 244 184 0 25 16 185 0 15 0 1 244 186 0 28 0 50 0 25 17 18 57 184 0 50 16 185 0 43 0 1 244 186 0 53 0 50 0 25 17 18 57 184 0 31 16 185 0 65 0 1 244 48 49 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 7 52 62 2 51 50 22 23 62 1 51 50 30 2 21 20 6 7 35 30 1 51 50 54 55 23 14 1 35 34 38 39 6 35 34 46 2 37 52 46 2 35 34 6 7 88 13 26 38 26 22 37 26 14 14 26 37 22 26 38 26 13 77 27 48 64 37 47 69 20 20 65 48 34 53 35 18 1 2 241 4 58 54 26 39 20 29 23 59 35 48 72 22 43 93 38 64 47 27 2 5 8 18 30 22 45 48 6 243 42 69 49 28 28 49 69 42 42 68 50 27 27 50 68 42 61 95 65 34 61 56 55 62 36 60 81 45 14 23 16 76 93 17 14 54 17 26 57 55 112 34 65 95 96 31 56 43 25 83 72 0 0 2 0 60 255 244 2 44 2 101 0 19 0 52 0 71 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 7 62 89 184 0 0 69 88 184 0 34 47 27 185 0 34 0 3 62 89 185 0 0 0 1 244 184 0 44 16 185 0 10 0 1 244 186 0 26 0 34 0 44 17 18 57 184 0 26 16 184 0 46 208 48 49 37 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 30 1 21 20 6 7 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 23 62 1 53 52 38 39 1 44 35 57 41 22 22 41 57 35 35 57 41 22 22 41 57 1 11 11 13 56 44 38 46 39 66 87 48 48 87 66 39 39 66 87 48 54 49 44 41 8 7 56 27 49 68 42 42 69 50 27 27 50 69 42 42 68 49 27 2 45 14 32 19 44 50 11 33 101 67 60 95 65 34 34 65 95 60 61 95 66 34 22 6 31 29 11 21 10 0 255 255 0 60 255 244 2 44 2 209 2 38 1 89 0 0 0 6 2 225 0 0 0 0 255 255 0 60 255 244 2 44 2 209 2 38 1 89 0 0 0 6 2 223 0 0 0 0 255 255 0 60 255 244 2 44 2 215 2 38 1 89 0 0 0 6 2 239 0 0 0 0 255 255 0 60 255 244 2 44 2 176 2 38 1 89 0 0 0 6 2 229 0 0 0 0 255 255 0 60 255 30 2 44 2 101 2 38 1 89 0 0 0 6 2 252 1 0 0 0 0 2 0 60 255 50 2 28 1 242 0 40 0 60 0 92 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 7 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 184 0 0 69 88 184 0 38 47 27 185 0 38 0 5 62 89 184 0 5 16 184 0 25 208 184 0 38 16 185 0 31 0 1 244 184 0 5 16 185 0 46 0 1 244 184 0 15 16 185 0 56 0 1 244 48 49 23 52 62 2 55 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 3 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 234 11 16 20 8 47 84 62 36 39 66 87 48 48 87 66 39 25 45 64 40 35 36 28 18 12 19 9 22 14 46 19 38 52 89 22 41 57 35 35 57 41 22 22 41 57 35 35 57 41 22 121 19 33 29 22 7 2 36 65 92 58 61 95 66 34 34 66 95 61 51 77 59 43 16 16 56 29 23 23 7 6 41 11 16 43 1 149 42 68 49 27 27 49 68 42 42 69 50 27 27 50 69 0 0 255 255 0 146 0 0 2 25 2 209 2 38 0 47 0 0 0 6 2 225 42 0 0 0 255 255 0 116 255 40 2 25 1 242 2 38 0 47 0 0 0 6 2 254 157 0 0 0 255 255 0 146 0 0 2 25 2 209 2 38 0 47 0 0 0 6 2 245 42 0 0 0 255 255 0 135 255 30 2 25 1 242 2 38 0 47 0 0 0 6 2 252 157 0 0 0 255 255 0 135 255 30 2 25 2 146 2 38 0 47 0 0 0 38 2 231 42 0 0 6 2 252 157 0 255 255 0 77 255 85 2 25 1 242 2 38 0 47 0 0 0 6 3 4 157 0 0 0 255 255 0 72 255 244 2 14 2 209 2 38 0 48 0 0 0 6 2 225 3 0 0 0 255 255 0 72 255 244 2 14 2 209 2 38 0 48 0 0 0 6 2 227 3 0 0 0 255 255 0 72 255 244 2 14 2 209 2 38 0 48 0 0 0 6 2 245 3 0 0 0 255 255 0 72 255 43 2 14 1 242 2 38 0 48 0 0 0 6 2 255 14 0 0 0 255 255 0 72 255 40 2 14 1 242 2 38 0 48 0 0 0 6 2 254 10 0 0 0 255 255 0 72 255 244 2 14 2 201 2 38 0 48 0 0 0 6 2 235 3 0 0 0 255 255 0 72 255 30 2 14 1 242 2 38 0 48 0 0 0 6 2 252 10 0 0 0 0 1 0 88 255 244 2 52 2 212 0 57 0 90 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 15 62 89 184 0 0 69 88 184 0 57 47 27 185 0 57 0 3 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 3 62 89 185 0 34 0 1 244 186 0 15 0 5 0 34 17 18 57 184 0 5 16 185 0 52 0 1 244 186 0 37 0 27 0 52 17 18 57 48 49 19 52 62 2 51 50 30 2 21 20 14 2 21 20 30 4 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 4 53 52 62 2 53 52 38 35 34 6 21 17 35 88 28 52 74 47 40 61 42 21 28 34 28 30 44 53 44 30 23 43 60 37 42 70 32 33 28 52 29 42 45 30 45 52 45 30 28 34 28 44 42 55 63 82 2 7 46 76 54 29 24 41 53 30 38 53 44 41 26 24 32 27 26 36 53 39 32 54 40 23 24 21 58 20 19 47 31 29 38 29 25 33 45 35 34 49 45 47 32 37 49 75 75 254 5 0 0 0 255 255 0 69 255 244 2 34 2 248 2 38 0 49 0 0 0 7 3 31 0 130 0 0 255 255 0 69 255 43 2 34 2 110 2 38 0 49 0 0 0 6 2 255 76 0 0 0 255 255 0 69 255 40 2 34 2 110 2 38 0 49 0 0 0 6 2 254 79 0 0 0 255 255 0 69 255 30 2 34 2 110 2 38 0 49 0 0 0 6 2 252 79 0 0 0 255 255 0 69 255 85 2 34 2 110 2 38 0 49 0 0 0 6 3 4 79 0 0 0 255 255 0 69 255 244 2 34 3 64 2 38 0 49 0 0 0 7 2 237 255 220 0 134 255 255 0 77 255 244 1 249 2 209 2 38 0 50 0 0 0 6 2 223 252 0 0 0 255 255 0 77 255 244 1 249 2 209 2 38 0 50 0 0 0 6 2 225 252 0 0 0 255 255 0 77 255 244 1 249 2 209 2 38 0 50 0 0 0 6 2 227 252 0 0 0 255 255 0 77 255 244 1 249 2 176 2 38 0 50 0 0 0 6 2 229 252 0 0 0 255 255 0 77 255 244 1 249 2 186 2 38 0 50 0 0 0 6 2 237 252 0 0 0 255 255 0 77 255 244 1 249 2 146 2 38 0 50 0 0 0 6 2 231 252 0 0 0 255 255 0 77 255 244 1 249 2 197 2 38 0 50 0 0 0 6 2 233 252 0 0 0 255 255 0 77 255 244 1 249 2 215 2 38 0 50 0 0 0 6 2 241 252 0 0 0 255 255 0 77 255 244 1 249 2 202 2 38 0 50 0 0 0 6 2 243 252 0 0 0 255 255 0 77 255 244 1 249 2 209 2 38 0 50 0 0 0 6 2 245 252 0 0 0 255 255 0 77 255 244 1 249 3 29 2 38 0 50 0 0 0 6 3 5 252 0 0 0 255 255 0 77 255 244 1 249 3 55 2 38 0 50 0 0 0 6 3 7 252 0 0 0 255 255 0 77 255 244 1 249 3 55 2 38 0 50 0 0 0 6 3 9 252 0 0 0 255 255 0 77 255 244 1 249 3 55 2 38 0 50 0 0 0 6 3 11 252 0 0 0 255 255 0 77 255 30 1 249 1 230 2 38 0 50 0 0 0 6 2 252 21 0 0 0 255 255 0 77 255 244 1 249 2 215 2 38 0 50 0 0 0 6 2 239 252 0 0 0 0 1 0 77 255 50 2 15 1 230 0 37 0 136 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 7 62 89 184 0 0 69 88 184 0 36 47 27 185 0 36 0 7 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 5 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 12 16 185 0 6 0 1 244 184 0 0 16 184 0 18 208 186 0 20 0 27 0 23 17 18 57 184 0 23 16 185 0 32 0 1 244 184 0 20 16 185 0 35 0 1 244 48 49 33 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 39 35 14 1 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 1 249 45 41 28 18 22 18 22 14 46 19 38 52 48 32 7 4 37 87 57 88 81 83 51 61 42 68 41 82 22 54 29 23 23 13 41 11 16 43 42 41 61 23 81 43 54 99 97 1 46 254 221 69 67 43 47 1 81 0 0 1 0 77 255 244 2 86 2 111 0 35 0 97 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 7 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 186 0 11 0 15 0 28 17 18 57 185 0 24 0 1 244 184 0 11 16 185 0 27 0 1 244 48 49 1 30 1 21 20 14 2 7 17 35 39 35 14 1 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 62 1 53 52 38 39 2 63 10 13 16 26 34 17 67 7 4 37 87 57 88 81 83 51 61 42 68 41 24 35 48 8 6 2 111 14 32 19 23 35 25 16 5 254 58 85 43 54 99 97 1 46 254 221 69 67 43 47 1 81 4 28 34 11 21 10 0 0 255 255 0 77 255 244 2 86 2 209 2 38 1 133 0 0 0 6 2 225 251 0 0 0 255 255 0 77 255 244 2 86 2 209 2 38 1 133 0 0 0 6 2 223 251 0 0 0 255 255 0 77 255 244 2 86 2 215 2 38 1 133 0 0 0 6 2 239 251 0 0 0 255 255 0 77 255 244 2 86 2 176 2 38 1 133 0 0 0 6 2 229 251 0 0 0 255 255 0 77 255 30 2 86 2 111 2 38 1 133 0 0 0 6 2 252 8 0 0 0 255 255 0 8 0 0 2 80 2 209 2 38 0 52 0 0 0 6 2 223 0 0 0 0 255 255 0 8 0 0 2 80 2 209 2 38 0 52 0 0 0 6 2 225 0 0 0 0 255 255 0 8 0 0 2 80 2 209 2 38 0 52 0 0 0 6 2 227 0 0 0 0 255 255 0 8 0 0 2 80 2 186 2 38 0 52 0 0 0 6 2 237 0 0 0 0 255 255 0 49 255 47 2 39 2 209 2 38 0 54 0 0 0 6 2 223 4 0 0 0 255 255 0 49 255 47 2 39 2 209 2 38 0 54 0 0 0 6 2 225 4 0 0 0 255 255 0 49 255 47 2 39 2 209 2 38 0 54 0 0 0 6 2 227 4 0 0 0 255 255 0 49 255 47 2 39 2 186 2 38 0 54 0 0 0 6 2 237 4 0 0 0 255 255 0 49 255 47 2 39 2 201 2 38 0 54 0 0 0 6 2 235 4 0 0 0 255 255 0 49 255 34 2 39 1 230 2 38 0 54 0 0 0 7 2 252 0 158 0 4 255 255 0 49 255 47 2 39 2 215 2 38 0 54 0 0 0 6 2 239 9 0 0 0 255 255 0 49 255 47 2 39 2 176 2 38 0 54 0 0 0 6 2 229 4 0 0 0 255 255 0 71 0 0 2 20 2 209 2 38 0 55 0 0 0 6 2 225 20 0 0 0 255 255 0 71 0 0 2 20 2 209 2 38 0 55 0 0 0 6 2 245 20 0 0 0 255 255 0 71 0 0 2 20 2 201 2 38 0 55 0 0 0 6 2 235 20 0 0 0 255 255 0 71 255 30 2 20 1 230 2 38 0 55 0 0 0 6 2 252 17 0 0 0 0 2 0 60 255 244 2 24 2 218 0 20 0 57 0 107 0 184 0 0 69 88 184 0 52 47 27 185 0 52 0 15 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 187 0 39 0 1 0 11 0 4 43 184 0 29 16 185 0 0 0 1 244 186 0 42 0 52 0 29 17 18 57 184 0 42 16 185 0 8 0 1 244 186 0 21 0 52 0 29 17 18 57 184 0 21 16 184 0 45 208 184 0 21 16 184 0 55 208 184 0 48 208 48 49 37 50 62 2 53 60 1 39 46 1 35 34 14 2 21 20 30 2 19 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 46 1 39 7 39 55 46 1 39 55 30 1 23 55 23 1 44 40 59 39 19 1 35 82 39 40 61 41 21 26 44 60 123 66 80 33 62 88 55 47 86 66 39 34 61 83 50 47 84 28 14 61 46 150 23 132 26 60 34 38 40 74 34 135 23 56 29 53 72 44 11 22 11 47 38 24 44 59 34 38 61 43 24 2 42 61 171 121 60 99 71 39 32 61 87 54 51 83 59 32 42 38 69 101 40 77 41 68 19 33 17 52 19 42 26 69 41 0 0 0 0 2 0 93 255 51 2 28 2 200 0 22 0 37 0 131 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 15 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 7 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 5 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 3 62 89 186 0 5 0 8 0 18 17 18 57 186 0 21 0 18 0 8 17 18 57 184 0 21 16 185 0 23 0 1 244 184 0 18 16 185 0 26 0 1 244 184 0 8 16 185 0 34 0 1 244 184 0 5 16 185 0 37 0 1 244 48 49 23 35 17 51 21 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 23 53 30 1 51 50 62 2 53 52 38 35 34 6 7 175 82 82 2 35 86 43 49 76 51 27 37 61 80 43 36 76 33 1 35 69 26 32 55 40 23 65 73 32 72 38 205 3 149 201 87 34 40 35 65 91 57 62 97 68 35 34 29 92 155 31 26 27 49 72 45 80 99 35 38 0 0 0 1 0 55 255 39 1 142 1 230 0 21 0 53 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 5 62 89 185 0 14 0 1 244 184 0 0 16 185 0 20 0 1 244 48 49 19 33 17 20 14 2 35 34 38 39 55 30 1 51 50 62 2 53 17 35 90 1 52 20 47 78 59 38 72 29 27 26 57 28 36 48 28 11 226 1 230 254 14 45 75 55 30 19 14 61 13 14 18 34 49 31 1 181 0 0 0 0 2 0 94 255 244 2 17 1 242 0 33 0 47 0 118 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 7 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 7 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 186 0 5 0 29 0 19 17 18 57 184 0 5 47 184 0 19 16 185 0 10 0 1 244 186 0 25 0 29 0 19 17 18 57 184 0 29 16 185 0 39 0 1 244 184 0 25 16 185 0 42 0 1 244 184 0 5 16 185 0 43 0 1 244 48 49 1 20 14 2 7 30 3 51 50 54 55 23 14 3 35 34 38 53 17 51 23 51 62 1 51 50 30 2 7 52 46 2 35 34 6 7 21 62 3 2 17 40 85 133 94 1 14 30 48 35 48 89 34 32 18 49 55 62 32 100 98 68 7 3 40 100 51 34 61 45 26 80 18 29 39 21 42 81 42 78 104 63 27 1 104 41 61 44 28 7 25 45 33 20 37 21 56 12 25 20 13 109 91 1 42 66 32 46 18 36 51 39 21 29 19 9 37 35 128 6 22 31 39 0 0 0 0 2 0 60 255 244 1 251 1 242 0 13 0 36 0 127 0 184 0 0 69 88 184 0 24 47 27 185 0 24 0 7 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 3 62 89 185 0 3 0 1 244 186 0 28 0 32 0 19 17 18 57 184 0 28 16 185 0 5 0 1 244 186 0 23 0 32 0 19 17 18 57 184 0 23 16 185 0 6 0 1 244 184 0 19 16 185 0 9 0 1 244 48 49 55 20 22 51 50 55 53 46 1 35 34 14 2 7 52 62 2 51 50 22 23 51 55 51 17 35 39 35 14 1 35 34 46 2 145 75 68 72 65 33 63 32 32 55 41 24 85 36 62 80 44 43 72 34 3 7 66 68 7 3 29 84 46 47 77 56 30 243 88 98 73 242 31 26 27 49 68 43 59 95 66 36 34 32 54 254 26 64 31 45 34 65 94 0 2 0 93 255 244 2 28 1 242 0 14 0 37 0 131 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 7 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 7 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 3 62 89 184 0 33 16 185 0 3 0 1 244 186 0 29 0 33 0 20 17 18 57 184 0 29 16 185 0 6 0 1 244 186 0 24 0 20 0 33 17 18 57 184 0 24 16 185 0 7 0 1 244 184 0 20 16 185 0 10 0 1 244 48 49 37 52 38 35 34 6 7 21 30 1 51 50 62 2 55 20 14 2 35 34 38 39 35 7 35 17 51 23 51 62 1 51 50 30 2 1 199 65 73 36 74 32 35 69 27 32 54 40 23 85 36 61 80 43 36 80 35 3 7 66 68 7 3 29 90 49 49 75 51 26 247 83 99 37 36 242 32 25 26 50 70 48 62 98 68 35 35 31 54 1 230 64 31 45 35 65 91 0 1 0 61 255 244 2 8 1 242 0 33 0 53 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 7 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 185 0 12 0 1 244 184 0 29 16 185 0 22 0 1 244 48 49 37 20 14 2 35 34 38 39 55 30 1 51 50 62 2 53 52 46 2 35 34 6 7 39 62 1 51 50 30 2 2 8 41 70 97 55 57 100 39 37 29 77 45 41 69 49 27 26 46 66 39 44 70 31 42 31 95 66 53 93 70 41 242 60 95 65 34 40 36 53 26 35 27 49 68 42 42 69 50 27 30 26 53 29 42 34 66 95 0 0 2 0 63 255 244 2 19 1 242 0 30 0 39 0 67 0 184 0 0 69 88 184 0 26 47 27 185 0 26 0 7 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 187 0 31 0 1 0 18 0 4 43 184 0 5 16 185 0 12 0 1 244 184 0 26 16 185 0 34 0 1 244 48 49 37 20 14 2 35 34 38 39 55 30 1 51 50 62 2 55 33 46 1 53 52 62 2 51 50 30 2 7 46 1 35 34 14 2 21 2 19 41 71 95 54 59 92 36 29 34 71 43 40 66 48 29 3 254 132 2 1 34 62 85 51 49 86 64 37 84 10 80 66 31 55 42 24 242 60 94 65 35 34 23 54 21 24 24 43 63 39 9 25 13 51 84 60 33 35 66 95 20 72 79 20 38 57 36 0 0 2 0 69 255 244 2 25 1 242 0 28 0 35 0 67 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 7 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 187 0 35 0 1 0 3 0 4 43 184 0 14 16 185 0 7 0 1 244 184 0 24 16 185 0 32 0 1 244 48 49 55 52 54 55 33 46 1 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 35 34 46 2 55 20 22 51 50 54 55 69 2 2 1 123 5 85 84 42 74 33 29 36 94 57 57 92 65 36 36 65 89 53 51 83 59 32 76 81 66 72 82 7 222 14 25 9 74 89 23 20 56 23 29 34 66 94 60 60 95 66 35 32 61 87 43 79 78 82 75 0 2 0 60 255 39 1 251 1 242 0 33 0 47 0 141 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 7 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 7 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 5 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 30 16 185 0 3 0 1 244 186 0 7 0 30 0 20 17 18 57 186 0 24 0 30 0 20 17 18 57 184 0 10 16 185 0 34 0 1 244 184 0 7 16 185 0 36 0 1 244 184 0 24 16 185 0 37 0 1 244 184 0 20 16 185 0 40 0 1 244 48 49 23 30 1 51 50 54 63 1 14 1 35 34 46 2 53 52 62 2 51 50 22 23 51 55 51 17 20 6 35 34 38 39 55 50 55 53 46 1 35 34 14 2 21 20 22 125 38 80 37 70 75 2 1 29 84 45 47 77 56 30 36 61 81 44 43 74 32 3 7 66 118 109 48 97 40 193 70 67 33 64 32 31 55 42 24 77 106 24 21 70 59 98 29 42 34 63 91 57 57 92 64 35 35 31 54 254 7 92 106 26 26 238 73 226 31 26 26 48 65 39 82 96 0 0 1 0 77 255 51 1 251 1 230 0 22 0 97 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 7 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 5 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 3 62 89 186 0 3 0 10 0 6 17 18 57 185 0 15 0 1 244 184 0 3 16 185 0 20 0 1 244 48 49 5 35 53 55 14 1 35 34 38 53 17 51 17 20 22 51 50 62 2 55 17 51 1 251 82 4 39 88 57 87 81 82 52 60 22 37 36 38 21 82 205 174 114 40 55 99 97 1 46 254 221 69 67 11 22 33 22 1 83 0 0 0 1 0 46 255 244 2 30 1 230 0 32 0 165 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 7 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 7 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 3 62 89 186 0 2 0 23 0 0 17 18 57 186 0 8 0 15 0 11 17 18 57 184 0 11 16 185 0 19 0 1 244 184 0 8 16 185 0 22 0 1 244 184 0 6 16 185 0 27 0 1 244 184 0 2 16 185 0 30 0 1 244 48 49 33 35 39 35 14 1 35 34 39 14 1 35 34 38 53 17 51 17 20 51 50 54 55 17 51 17 20 51 50 54 55 17 51 2 30 64 7 3 18 49 42 74 18 21 52 41 51 56 79 53 26 38 19 67 54 26 37 19 78 64 34 42 84 38 46 77 73 1 92 254 171 86 37 38 1 96 254 171 86 37 38 1 96 0 0 0 1 0 63 255 244 1 198 1 230 0 18 0 84 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 7 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 3 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 186 0 3 0 6 0 17 17 18 57 184 0 6 16 185 0 13 0 1 244 184 0 3 16 185 0 16 0 1 244 48 49 33 35 39 35 14 1 35 34 38 39 55 30 1 51 50 54 55 17 51 1 198 68 7 3 38 111 68 27 46 23 19 26 35 29 55 101 44 82 115 59 68 9 11 71 9 8 63 76 1 29 0 1 0 54 255 120 2 19 1 242 0 25 0 65 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 7 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 3 62 89 185 0 8 0 1 244 184 0 0 208 184 0 7 16 184 0 3 208 184 0 20 16 185 0 13 0 1 244 48 49 37 51 21 35 7 35 53 35 53 51 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 1 138 137 140 11 68 239 239 53 70 35 56 26 18 33 80 40 53 72 43 19 67 67 136 136 67 231 65 68 12 10 61 11 17 29 53 74 45 0 0 0 1 0 51 0 0 2 37 1 230 0 13 0 64 0 184 0 0 69 88 184 0 12 47 27 185 0 12 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 186 0 6 0 12 0 0 17 18 57 48 49 33 35 3 46 1 39 35 14 1 7 3 35 19 51 2 37 83 112 15 27 13 4 13 25 15 112 79 201 92 1 20 37 72 35 35 72 37 254 236 1 230 0 0 1 0 8 0 0 2 80 1 230 0 33 0 105 0 184 0 11 47 184 0 0 69 88 184 0 22 47 27 185 0 22 0 7 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 7 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 3 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 3 62 89 186 0 6 0 32 0 1 17 18 57 186 0 16 0 22 0 21 17 18 57 186 0 27 0 22 0 1 17 18 57 48 49 33 35 3 46 1 39 35 14 1 15 1 35 39 46 1 39 35 14 1 7 3 35 19 51 23 30 1 23 51 62 1 63 1 51 2 80 84 59 7 12 5 4 7 14 8 59 70 60 8 14 8 4 7 11 6 59 78 106 99 58 7 12 8 4 6 12 9 56 98 1 25 35 66 34 34 67 34 252 252 35 66 34 34 66 35 254 231 1 230 246 35 69 37 32 68 42 245 0 1 0 49 0 0 2 39 2 212 0 29 0 82 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 15 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 184 0 25 16 185 0 3 0 1 244 186 0 14 0 8 0 25 17 18 57 184 0 14 16 184 0 7 208 48 49 1 46 1 35 34 6 15 1 19 35 3 46 1 39 35 14 1 7 3 35 19 62 3 51 50 22 23 7 2 7 9 21 12 48 61 17 27 227 83 119 14 31 15 4 13 27 12 106 78 226 13 36 48 62 39 17 33 14 18 2 137 3 4 60 46 63 254 25 1 13 32 74 35 35 73 33 254 243 2 42 36 62 46 26 5 5 65 0 0 1 0 26 255 51 1 238 1 230 0 12 0 99 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 7 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 7 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 5 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 186 0 2 0 7 0 0 17 18 57 186 0 9 0 7 0 0 17 18 57 184 0 9 16 184 0 6 208 48 49 5 35 17 35 5 35 55 3 51 23 55 53 51 1 238 82 4 254 250 94 194 220 92 179 115 82 205 1 204 255 193 1 37 240 110 130 0 0 0 0 3 0 52 0 0 2 10 2 212 0 21 0 25 0 37 0 132 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 15 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 7 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 7 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 184 0 3 16 185 0 9 0 1 244 184 0 12 16 185 0 15 0 1 244 184 0 18 208 184 0 12 16 184 0 21 208 184 0 22 16 184 0 32 220 184 0 26 220 48 49 19 52 54 51 50 22 23 7 38 35 34 29 1 51 21 35 17 35 17 35 53 55 33 51 17 35 19 50 22 21 20 6 35 34 38 53 52 54 118 69 73 23 41 17 17 29 26 69 103 103 82 66 66 1 40 82 82 41 29 38 38 29 29 39 39 2 51 75 86 9 7 63 12 94 77 67 254 93 1 163 62 5 254 26 2 202 35 29 29 35 35 29 29 35 0 2 0 57 255 244 2 23 2 212 0 21 0 37 0 130 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 15 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 15 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 7 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 3 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 3 62 89 184 0 3 16 185 0 9 0 1 244 184 0 12 16 185 0 15 0 1 244 184 0 18 208 184 0 12 16 184 0 21 208 184 0 25 16 185 0 34 0 1 244 48 49 19 52 54 51 50 22 23 7 38 35 34 29 1 51 21 35 17 35 17 35 53 55 1 14 1 35 34 38 53 17 51 17 20 22 51 58 1 55 123 69 73 23 41 17 18 27 28 68 103 103 82 66 66 1 156 9 22 16 47 40 82 14 9 4 7 7 2 51 75 86 9 7 63 12 94 77 67 254 93 1 163 62 5 254 22 4 4 56 54 2 102 253 148 20 16 2 0 0 255 255 0 60 255 244 1 251 1 242 2 6 1 159 0 0 255 255 0 60 255 244 1 251 2 209 2 38 1 159 0 0 0 6 2 223 7 0 0 0 255 255 0 60 255 244 1 251 2 209 2 38 1 159 0 0 0 6 2 225 7 0 0 0 255 255 0 60 255 244 1 251 2 209 2 38 1 159 0 0 0 6 2 227 7 0 0 0 255 255 0 60 255 244 1 251 2 176 2 38 1 159 0 0 0 6 2 229 7 0 0 0 255 255 0 60 255 244 1 251 2 186 2 38 1 159 0 0 0 6 2 237 7 0 0 0 255 255 0 60 255 244 1 251 2 146 2 38 1 159 0 0 0 6 2 231 7 0 0 0 255 255 0 60 255 244 1 251 2 197 2 38 1 159 0 0 0 6 2 233 7 0 0 0 255 255 0 60 255 244 1 251 2 215 2 38 1 159 0 0 0 6 2 241 7 0 0 0 255 255 0 60 255 244 1 251 2 209 2 38 1 159 0 0 0 6 2 245 7 0 0 0 255 255 0 60 255 30 1 251 1 242 2 38 1 159 0 0 0 6 2 252 9 0 0 0 255 255 0 60 255 244 1 251 2 215 2 38 1 159 0 0 0 6 2 239 7 0 0 0 255 255 0 60 255 244 2 27 2 242 2 38 1 159 0 0 0 6 3 13 7 0 0 0 255 255 0 60 255 244 1 252 2 242 2 38 1 159 0 0 0 6 3 15 7 0 0 0 255 255 0 60 255 244 2 4 3 16 2 38 1 159 0 0 0 6 3 17 7 0 0 0 255 255 0 60 255 244 1 251 3 34 2 38 1 159 0 0 0 6 3 19 7 0 0 0 255 255 0 60 255 30 1 251 2 209 2 38 1 159 0 0 0 38 2 227 7 0 0 6 2 252 8 0 255 255 0 60 255 244 1 251 3 21 2 38 1 159 0 0 0 6 3 21 7 0 0 0 255 255 0 60 255 244 1 251 3 21 2 38 1 159 0 0 0 6 3 23 7 0 0 0 255 255 0 60 255 244 1 251 3 71 2 38 1 159 0 0 0 6 3 25 7 0 0 0 255 255 0 60 255 244 1 251 3 34 2 38 1 159 0 0 0 6 3 27 7 0 0 0 255 255 0 60 255 30 1 251 2 197 2 38 1 159 0 0 0 38 2 233 7 0 0 6 2 252 8 0 0 2 0 60 255 50 2 16 1 242 0 13 0 53 0 166 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 7 62 89 184 0 0 69 88 184 0 49 47 27 185 0 49 0 3 62 89 184 0 0 69 88 184 0 38 47 27 185 0 38 0 5 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 49 16 185 0 3 0 1 244 186 0 46 0 49 0 19 17 18 57 184 0 46 16 185 0 5 0 1 244 186 0 22 0 19 0 49 17 18 57 184 0 22 16 185 0 6 0 1 244 184 0 19 16 185 0 9 0 1 244 184 0 38 16 185 0 32 0 1 244 184 0 26 16 184 0 44 208 48 49 55 20 22 51 50 55 53 46 1 35 34 14 2 7 52 62 2 51 50 22 23 51 55 51 17 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 39 35 14 1 35 34 46 2 145 75 68 72 65 33 63 32 32 55 41 24 85 36 62 80 44 43 72 34 3 7 66 45 42 28 19 20 20 21 14 45 19 38 53 49 32 8 3 29 84 46 47 77 56 30 243 88 98 73 242 31 26 27 49 68 43 59 95 66 36 34 32 54 254 26 22 54 29 23 23 13 41 11 16 43 42 41 61 23 60 31 45 34 65 94 0 255 255 0 60 255 39 1 251 1 242 2 6 1 164 0 0 255 255 0 60 255 39 1 251 2 209 2 38 1 164 0 0 0 6 2 227 7 0 0 0 255 255 0 60 255 39 1 251 2 197 2 38 1 164 0 0 0 6 2 233 7 0 0 0 255 255 0 60 255 39 1 251 2 201 2 38 1 164 0 0 0 6 2 235 7 0 0 0 255 255 0 60 255 39 1 251 2 198 2 38 1 164 0 0 0 6 3 32 7 0 0 0 255 255 0 60 255 39 1 251 2 209 2 38 1 164 0 0 0 6 2 245 7 0 0 0 255 255 0 60 255 39 1 251 2 146 2 38 1 164 0 0 0 6 2 231 7 0 0 0 255 255 0 60 255 39 1 251 2 176 2 38 1 164 0 0 0 6 2 229 7 0 0 0 0 3 0 42 255 244 2 65 2 156 0 13 0 27 0 71 0 144 0 184 0 0 69 88 184 0 51 47 27 185 0 51 0 13 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 3 62 89 184 0 33 16 185 0 5 0 1 244 186 0 8 0 33 0 51 17 18 57 186 0 17 0 51 0 33 17 18 57 184 0 17 16 184 0 43 208 184 0 11 208 184 0 51 16 185 0 25 0 1 244 184 0 8 16 184 0 30 208 184 0 17 16 185 0 59 0 1 244 184 0 30 16 184 0 69 208 184 0 62 208 184 0 28 16 184 0 71 208 48 49 55 20 30 2 51 50 54 55 46 1 39 14 1 19 20 22 23 62 3 53 52 38 35 34 6 1 38 39 14 1 35 34 46 2 53 52 62 2 55 46 1 53 52 62 2 51 50 22 21 20 14 2 7 30 1 23 62 1 55 51 14 1 7 22 23 122 20 34 46 26 31 58 26 48 85 34 32 42 70 16 14 21 37 29 16 27 33 35 38 1 106 65 72 36 87 56 44 72 51 29 20 35 44 24 21 23 21 37 53 33 61 66 25 40 50 26 32 83 45 28 41 14 76 18 52 36 60 53 175 27 45 32 17 28 24 42 100 54 28 61 1 45 27 58 30 15 31 33 37 22 29 43 54 253 201 20 55 35 40 27 48 67 40 32 54 45 39 18 41 79 35 33 56 42 24 72 58 32 52 47 41 20 51 94 39 40 95 57 65 118 52 46 17 0 0 3 0 71 255 244 2 17 2 138 0 11 0 27 0 39 0 75 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 11 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 6 16 185 0 12 0 1 244 184 0 0 16 185 0 20 0 1 244 186 0 28 0 20 0 12 17 18 57 184 0 28 47 184 0 34 220 48 49 5 34 38 53 52 54 51 50 22 21 20 6 3 34 14 2 21 20 22 51 50 54 53 52 46 2 3 34 38 53 52 54 51 50 22 21 20 6 1 44 107 122 122 107 107 122 122 107 33 56 41 22 85 67 67 85 22 41 56 33 25 37 37 25 25 37 37 12 173 160 161 168 168 161 160 173 2 84 30 65 99 69 137 130 130 137 69 99 65 30 254 189 35 32 31 35 35 31 32 35 0 0 0 0 1 0 98 0 0 2 16 2 126 0 12 0 61 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 11 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 185 0 3 0 1 244 184 0 0 208 184 0 10 16 184 0 5 208 185 0 7 0 1 244 48 49 37 21 33 53 51 17 35 53 62 1 55 51 17 2 16 254 82 181 136 51 76 30 61 68 68 68 1 214 53 8 23 16 253 198 0 0 0 0 1 0 69 0 0 2 10 2 138 0 31 0 67 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 11 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 3 62 89 185 0 28 0 1 244 184 0 0 208 186 0 5 0 15 0 30 17 18 57 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 7 62 1 59 1 21 33 73 81 125 85 44 68 71 45 77 31 47 43 99 68 48 77 54 29 43 78 108 65 29 61 29 210 254 63 49 72 116 97 84 40 55 70 45 32 47 44 53 27 49 70 42 45 91 97 105 59 2 4 71 0 0 0 1 0 57 255 244 2 6 2 138 0 51 0 83 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 11 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 3 62 89 185 0 3 0 1 244 186 0 13 0 29 0 48 17 18 57 184 0 13 47 185 0 14 0 1 244 184 0 29 16 185 0 22 0 1 244 186 0 38 0 13 0 14 17 18 57 48 49 55 30 1 51 50 62 2 53 52 46 2 35 53 50 62 2 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 21 30 3 21 20 14 2 35 34 38 39 99 32 89 62 33 56 41 23 25 56 88 63 57 79 50 23 71 59 45 80 32 44 40 102 62 45 77 57 32 76 60 32 57 44 25 36 63 84 48 83 112 35 132 30 46 17 30 43 27 28 47 34 18 63 18 32 44 25 47 54 36 29 52 35 45 22 41 60 39 58 74 20 4 7 27 41 54 33 42 68 47 25 55 35 0 0 0 2 0 39 0 0 2 33 2 126 0 9 0 20 0 89 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 11 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 187 0 14 0 1 0 0 0 4 43 184 0 17 16 185 0 4 0 1 244 184 0 0 16 184 0 9 208 184 0 14 16 184 0 11 208 184 0 9 16 184 0 16 208 184 0 0 16 184 0 19 208 48 49 37 53 62 1 55 35 14 1 15 1 5 35 21 35 53 33 53 1 51 17 51 1 112 1 2 2 5 15 34 16 173 1 159 99 78 254 183 1 63 88 99 242 198 26 61 26 23 47 23 218 66 176 176 55 1 151 254 116 0 0 1 0 56 255 244 2 10 2 126 0 40 0 85 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 11 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 3 62 89 187 0 25 0 1 0 13 0 4 43 184 0 35 16 185 0 5 0 1 244 186 0 22 0 35 0 18 17 18 57 184 0 22 16 184 0 17 208 184 0 18 16 185 0 20 0 1 244 48 49 55 30 3 51 50 62 2 53 52 38 35 34 6 7 39 19 33 21 33 7 62 1 51 50 30 2 21 20 14 2 35 34 46 2 39 97 16 36 43 53 32 34 59 44 25 85 72 40 56 34 44 21 1 105 254 224 17 28 53 37 46 80 59 34 39 66 85 46 43 69 55 45 18 129 14 27 20 12 21 38 54 33 66 74 20 19 28 1 51 71 189 12 14 24 49 75 52 52 80 55 29 15 24 31 17 0 2 0 77 255 244 2 22 2 138 0 13 0 48 0 87 0 184 0 0 69 88 184 0 45 47 27 185 0 45 0 11 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 3 62 89 187 0 8 0 1 0 25 0 4 43 184 0 35 16 185 0 0 0 1 244 186 0 22 0 35 0 45 17 18 57 184 0 22 16 185 0 11 0 1 244 184 0 45 16 185 0 17 0 1 244 48 49 37 50 62 2 53 52 38 35 34 6 7 30 1 19 46 1 35 34 14 2 7 62 1 51 50 30 2 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 1 65 28 50 36 21 70 66 38 84 41 9 85 225 25 66 36 38 70 53 33 1 38 95 48 44 73 53 29 35 58 77 43 52 89 66 37 44 74 97 52 59 87 32 53 20 37 51 32 66 69 39 47 93 96 1 222 23 27 28 64 105 77 38 45 25 49 74 49 46 75 54 30 38 77 115 77 96 135 85 39 39 29 0 0 0 0 1 0 70 0 0 2 20 2 126 0 15 0 51 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 11 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 7 16 185 0 5 0 1 244 184 0 9 208 48 49 51 62 3 55 33 53 33 21 14 3 7 35 226 4 26 50 77 55 254 144 1 206 63 82 50 22 3 86 91 149 134 126 67 71 51 72 132 137 152 94 0 0 0 0 3 0 68 255 244 2 19 2 138 0 13 0 26 0 64 0 87 0 184 0 0 69 88 184 0 41 47 27 185 0 41 0 11 62 89 184 0 0 69 88 184 0 60 47 27 185 0 60 0 3 62 89 185 0 3 0 1 244 184 0 41 16 185 0 19 0 1 244 186 0 11 0 3 0 19 17 18 57 184 0 11 47 184 0 49 208 184 0 49 47 184 0 14 220 184 0 11 16 184 0 32 220 48 49 55 20 22 51 50 54 53 52 46 2 39 14 1 55 54 53 52 38 35 34 6 21 20 30 2 7 52 62 2 55 53 46 1 53 52 62 2 51 50 30 2 21 20 6 7 21 30 3 21 20 14 2 35 34 46 2 143 87 74 72 76 31 54 73 42 47 62 209 80 66 63 54 66 26 46 61 248 24 38 49 26 40 57 29 53 72 43 47 73 51 27 57 40 26 46 34 19 31 58 85 55 54 87 60 33 171 54 68 62 50 33 45 32 25 14 26 65 129 58 70 48 65 56 47 29 41 32 25 196 33 52 42 31 12 4 25 73 51 37 60 43 24 25 45 63 37 45 79 28 4 13 30 38 51 34 36 62 46 26 26 47 64 0 0 2 0 67 255 244 2 12 2 138 0 13 0 48 0 87 0 184 0 0 69 88 184 0 35 47 27 185 0 35 0 11 62 89 184 0 0 69 88 184 0 45 47 27 185 0 45 0 3 62 89 187 0 0 0 1 0 25 0 4 43 186 0 22 0 45 0 35 17 18 57 184 0 22 16 185 0 3 0 1 244 184 0 35 16 185 0 6 0 1 244 184 0 45 16 185 0 17 0 1 244 48 49 1 50 54 55 46 1 35 34 14 2 21 20 22 7 30 1 51 50 62 2 55 14 1 35 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 1 25 37 84 42 10 83 71 29 49 36 21 69 89 24 66 37 38 69 53 32 2 39 93 49 44 73 52 29 34 59 77 42 52 90 66 37 45 74 96 52 59 87 32 1 54 39 46 94 96 20 37 52 31 66 69 203 23 28 28 65 104 77 38 44 25 49 74 49 46 75 54 30 38 77 115 77 96 135 85 39 38 29 0 0 0 0 3 0 71 255 244 2 17 2 74 0 11 0 27 0 39 0 75 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 9 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 184 0 6 16 185 0 12 0 1 244 184 0 0 16 185 0 20 0 1 244 186 0 28 0 20 0 12 17 18 57 184 0 28 47 184 0 34 220 48 49 5 34 38 53 52 54 51 50 22 21 20 6 3 34 6 21 20 30 2 51 50 62 2 53 52 38 3 34 38 53 52 54 51 50 22 21 20 6 1 44 107 122 122 107 107 122 122 107 67 85 22 41 56 33 33 56 41 22 85 67 25 37 37 25 25 37 37 12 156 146 144 152 152 144 146 156 2 19 111 118 61 89 58 28 28 58 89 61 118 111 254 223 35 32 31 35 35 31 32 35 0 0 0 0 1 0 98 0 0 2 16 2 62 0 12 0 61 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 9 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 3 62 89 185 0 0 0 1 244 184 0 3 208 184 0 10 16 184 0 5 208 185 0 7 0 1 244 48 49 37 21 33 53 51 17 35 53 62 1 55 51 17 2 16 254 82 181 136 51 76 30 61 68 68 68 1 150 53 8 23 16 254 6 0 0 0 0 1 0 69 0 0 2 10 2 74 0 29 0 65 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 9 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 3 62 89 185 0 23 0 1 244 184 0 0 208 184 0 13 16 185 0 6 0 1 244 184 0 23 16 184 0 26 208 48 49 55 62 1 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 7 62 1 59 1 21 33 73 165 170 68 71 45 77 31 47 43 99 68 48 77 54 29 39 72 103 64 29 61 29 194 254 63 49 110 166 64 58 72 45 32 47 44 53 27 51 71 44 38 78 81 85 46 2 4 71 0 1 0 57 255 170 2 6 2 74 0 51 0 60 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 9 62 89 187 0 3 0 1 0 48 0 4 43 187 0 14 0 1 0 13 0 4 43 184 0 29 16 185 0 22 0 1 244 186 0 38 0 13 0 14 17 18 57 48 49 55 30 1 51 50 62 2 53 52 46 2 35 53 50 62 2 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 21 30 3 21 20 14 2 35 34 38 39 99 32 89 62 33 56 41 23 25 56 88 63 57 79 50 23 71 59 45 80 32 44 40 102 62 45 77 57 32 76 60 32 57 44 25 36 63 84 48 83 112 35 58 30 45 17 31 44 28 29 48 33 18 64 18 33 44 26 47 56 36 29 52 35 45 22 42 61 39 59 75 20 4 7 28 41 54 34 44 69 48 25 55 35 0 0 2 0 39 255 182 2 33 2 62 0 9 0 20 0 60 0 184 0 13 47 184 0 0 69 88 184 0 17 47 27 185 0 17 0 9 62 89 187 0 20 0 1 0 10 0 4 43 184 0 20 16 184 0 0 208 186 0 4 0 17 0 13 17 18 57 184 0 10 16 184 0 14 208 48 49 37 53 62 1 55 35 14 1 15 1 5 35 21 35 53 33 53 1 51 17 51 1 112 1 2 2 5 15 33 16 175 1 160 99 78 254 183 1 63 88 99 161 215 26 61 26 25 49 23 231 67 168 168 55 1 169 254 99 0 0 0 1 0 56 255 170 2 10 2 62 0 40 0 68 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 9 62 89 187 0 5 0 1 0 35 0 4 43 187 0 25 0 1 0 13 0 4 43 186 0 22 0 35 0 18 17 18 57 184 0 22 16 184 0 17 208 184 0 18 16 185 0 20 0 1 244 48 49 55 30 3 51 50 62 2 53 52 38 35 34 6 7 39 19 33 21 33 7 62 1 51 50 30 2 21 20 14 2 35 34 46 2 39 97 16 36 43 53 32 34 59 44 25 85 72 40 56 34 44 21 1 105 254 224 17 28 53 37 46 80 59 34 39 66 85 46 43 69 55 45 18 55 14 26 20 12 21 38 55 35 68 74 20 19 28 1 55 71 193 13 13 23 50 76 53 53 81 57 29 15 24 32 17 0 255 255 0 78 255 244 2 23 2 138 2 6 1 213 1 0 0 1 0 70 255 182 2 20 2 62 0 15 0 30 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 9 62 89 185 0 5 0 1 244 184 0 9 208 48 49 23 62 3 55 33 53 33 21 14 3 7 35 226 4 26 50 77 55 254 144 1 206 63 82 49 22 4 86 74 92 152 137 128 68 71 51 73 133 140 155 96 0 0 0 255 255 0 68 255 244 2 19 2 138 2 6 1 215 0 0 0 2 0 67 255 170 2 12 2 74 0 13 0 48 0 70 0 184 0 0 69 88 184 0 35 47 27 185 0 35 0 9 62 89 187 0 17 0 1 0 45 0 4 43 187 0 0 0 1 0 25 0 4 43 186 0 22 0 45 0 35 17 18 57 184 0 22 16 185 0 3 0 1 244 184 0 35 16 185 0 6 0 1 244 48 49 37 50 54 55 46 1 35 34 14 2 21 20 22 7 30 1 51 50 62 2 55 14 1 35 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 1 25 37 84 42 8 84 72 29 49 36 21 69 89 24 66 37 37 69 53 33 2 39 93 49 44 73 52 29 34 59 77 42 52 90 66 37 45 74 96 52 59 87 32 237 39 47 97 101 20 38 52 33 68 73 204 23 27 28 64 105 77 38 44 26 51 76 50 46 77 55 30 38 77 115 77 99 139 87 40 39 29 0 0 1 0 219 255 244 1 125 0 157 0 11 0 24 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 184 0 3 220 48 49 55 52 54 51 50 22 21 20 6 35 34 38 219 47 34 34 47 47 34 34 47 72 38 47 47 38 38 46 46 0 0 1 0 197 255 43 1 140 0 155 0 18 0 11 0 186 0 12 0 6 0 3 43 48 49 23 62 1 55 14 1 35 34 38 53 52 54 51 50 22 21 20 6 7 197 62 62 2 5 9 5 32 46 48 32 45 45 93 83 161 28 79 60 1 1 37 38 37 39 69 59 88 121 31 0 0 255 255 0 219 255 244 1 125 2 3 2 39 1 227 0 0 1 102 0 6 1 227 0 0 255 255 0 197 255 43 1 140 2 3 2 39 1 227 0 0 1 102 0 6 1 228 0 0 0 3 0 32 255 244 2 56 0 138 0 11 0 23 0 35 0 70 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 3 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 184 0 9 16 184 0 3 220 184 0 15 208 184 0 27 208 48 49 55 52 54 51 50 22 21 20 6 35 34 38 55 52 54 51 50 22 21 20 6 35 34 38 55 52 54 51 50 22 21 20 6 35 34 38 32 41 29 29 40 40 29 29 41 198 41 29 29 41 41 29 29 41 199 40 29 29 41 41 29 29 40 63 34 41 41 34 33 42 42 33 34 41 41 34 33 42 42 33 34 41 41 34 33 42 42 0 0 2 0 227 255 244 1 117 2 158 0 5 0 17 0 45 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 184 0 9 220 184 0 5 220 48 49 1 39 51 7 3 35 7 52 54 51 50 22 21 20 6 35 34 38 1 6 2 80 2 10 56 45 43 30 30 43 43 30 30 43 2 64 94 94 254 168 166 35 41 41 35 36 42 42 0 0 0 0 2 0 227 255 72 1 117 1 242 0 5 0 17 0 28 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 7 62 89 184 0 9 220 184 0 4 220 48 49 5 23 35 55 19 51 55 20 6 35 34 38 53 52 54 51 50 22 1 82 2 80 2 10 56 45 43 30 30 43 43 30 30 43 90 94 94 1 88 167 36 41 41 36 35 42 42 0 0 2 0 109 255 244 1 223 2 170 0 29 0 41 0 42 0 184 0 0 69 88 184 0 39 47 27 185 0 39 0 3 62 89 187 0 17 0 1 0 10 0 4 43 184 0 39 16 184 0 33 220 184 0 0 220 48 49 55 38 62 4 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 4 23 7 52 54 51 50 22 21 20 6 35 34 38 242 6 18 35 44 39 26 55 55 38 65 27 49 34 92 58 42 68 49 27 27 39 45 37 21 5 102 43 30 30 43 43 30 30 43 232 36 56 46 40 39 42 26 42 55 31 27 45 35 46 22 41 57 36 33 51 43 40 44 51 32 166 35 41 41 35 36 42 42 0 0 0 2 0 123 255 60 1 236 1 242 0 27 0 39 0 42 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 7 62 89 187 0 10 0 1 0 17 0 4 43 184 0 37 16 184 0 31 220 184 0 27 220 48 49 37 22 14 4 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 4 39 55 20 6 35 34 38 53 52 54 51 50 22 1 103 6 18 35 44 39 26 56 55 38 65 27 48 33 93 58 84 101 27 39 45 36 20 4 103 44 30 30 43 43 30 30 44 254 36 56 46 40 39 43 25 42 54 30 27 45 35 46 84 72 33 51 43 40 44 50 33 167 36 41 41 36 35 42 42 0 0 0 1 0 245 1 96 1 99 2 175 0 5 0 11 0 186 0 2 0 4 0 3 43 48 49 19 39 51 15 1 35 247 2 110 2 25 56 2 65 110 110 225 0 0 255 255 0 131 1 96 1 214 2 175 2 38 1 236 142 0 0 6 1 236 115 0 0 0 0 1 0 209 1 94 1 124 2 187 0 17 0 11 0 186 0 5 0 11 0 3 43 48 49 1 14 1 7 54 51 50 22 21 20 6 35 34 38 53 52 54 55 1 124 47 53 3 12 14 31 39 42 32 39 51 76 68 2 139 27 79 52 6 40 32 35 42 63 57 75 119 35 0 0 0 0 1 0 217 1 94 1 132 2 187 0 17 0 11 0 186 0 5 0 11 0 3 43 48 49 19 62 1 55 6 35 34 38 53 52 54 51 50 22 21 20 6 7 217 48 53 3 12 14 32 39 42 32 40 50 76 67 1 142 26 79 53 6 39 32 35 43 64 57 75 118 35 255 255 0 95 1 94 1 239 2 187 2 38 1 238 142 0 0 6 1 238 115 0 0 0 255 255 0 103 1 94 1 247 2 187 2 38 1 239 142 0 0 6 1 239 115 0 0 0 255 255 0 217 255 31 1 132 0 124 2 7 1 239 0 0 253 193 0 0 255 255 0 103 255 31 1 247 0 124 2 39 1 239 255 142 253 193 0 7 1 239 0 115 253 193 0 0 0 1 0 197 0 52 1 133 1 196 0 6 0 11 0 186 0 2 0 6 0 3 43 48 49 55 53 55 23 7 23 7 197 153 39 127 127 39 212 80 160 35 165 166 34 0 0 0 0 1 0 211 0 52 1 147 1 196 0 6 0 11 0 186 0 2 0 5 0 3 43 48 49 37 39 55 23 21 7 39 1 82 127 39 153 153 39 252 165 35 160 80 160 34 0 0 255 255 0 83 0 52 1 248 1 196 2 38 1 244 142 0 0 6 1 244 115 0 0 0 255 255 0 97 0 52 2 6 1 196 2 38 1 245 142 0 0 6 1 245 115 0 0 0 255 255 0 85 1 43 2 3 1 105 2 6 2 151 0 0 255 255 0 85 1 43 2 3 1 105 2 6 2 151 0 0 0 1 0 80 0 216 2 8 1 32 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 80 1 184 254 72 1 32 72 0 0 1 0 20 0 216 2 68 1 32 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 20 2 48 253 208 1 32 72 0 0 1 0 80 0 216 2 8 1 32 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 80 1 184 254 72 1 32 72 0 255 255 0 20 0 216 2 68 1 32 2 6 1 251 0 0 255 255 0 219 1 7 1 125 1 176 2 7 1 227 0 0 1 19 0 0 0 1 0 151 0 115 1 193 1 153 0 19 0 11 0 186 0 10 0 0 0 3 43 48 49 37 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 1 44 30 54 41 24 24 41 54 30 30 54 41 24 24 41 54 115 21 39 54 33 33 54 39 21 21 39 54 33 33 54 39 21 0 0 1 0 60 255 116 2 28 255 187 0 3 0 13 0 187 0 0 0 1 0 1 0 4 43 48 49 5 21 33 53 2 28 254 32 69 71 71 0 0 0 1 0 208 255 80 1 222 2 220 0 14 0 11 0 186 0 6 0 0 0 3 43 48 49 5 46 1 53 52 54 55 23 14 1 21 20 22 23 7 1 177 104 121 121 104 45 101 95 95 101 45 176 81 228 145 145 228 81 42 85 200 127 127 200 85 42 0 0 1 0 122 255 80 1 136 2 220 0 13 0 11 0 186 0 7 0 13 0 3 43 48 49 23 62 1 53 52 38 39 55 30 1 21 20 6 7 122 101 95 95 101 45 104 121 121 104 134 85 200 127 127 200 85 42 81 228 145 145 228 81 0 0 1 0 226 255 104 1 246 2 196 0 7 0 23 0 187 0 5 0 1 0 6 0 4 43 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 35 17 51 21 33 226 1 20 211 211 254 236 2 196 48 253 4 48 0 0 0 1 0 99 255 104 1 119 2 196 0 7 0 23 0 187 0 0 0 1 0 5 0 4 43 187 0 4 0 1 0 1 0 4 43 48 49 5 17 35 53 33 17 33 53 1 53 210 1 20 254 236 104 2 252 48 252 164 48 0 0 1 0 120 255 104 1 246 2 196 0 57 0 43 0 187 0 51 0 1 0 52 0 4 43 187 0 25 0 1 0 26 0 4 43 187 0 11 0 1 0 10 0 4 43 186 0 39 0 10 0 11 17 18 57 48 49 5 52 62 2 53 52 46 2 35 53 50 62 2 53 52 38 53 52 62 2 59 1 21 35 34 14 2 21 20 22 21 20 6 7 21 30 1 21 20 6 21 20 30 2 59 1 21 35 34 46 2 1 0 3 3 3 12 32 57 44 44 57 32 12 9 22 46 70 47 61 52 38 49 27 10 6 39 52 52 39 6 10 27 49 38 52 61 47 70 46 22 19 27 49 46 46 25 15 27 22 14 52 14 22 27 15 48 93 52 39 51 30 13 48 10 21 35 24 43 91 47 49 51 9 4 9 51 49 51 84 46 24 35 21 10 48 13 30 51 0 1 0 99 255 104 1 224 2 196 0 57 0 43 0 187 0 0 0 1 0 55 0 4 43 187 0 26 0 1 0 23 0 4 43 187 0 39 0 1 0 40 0 4 43 186 0 12 0 40 0 39 17 18 57 48 49 23 50 62 2 53 52 38 53 52 54 55 53 46 1 53 52 54 53 52 46 2 43 1 53 51 50 30 2 21 20 6 21 20 30 2 51 21 34 14 2 21 20 30 2 21 20 14 2 43 1 53 150 38 49 28 10 6 38 52 52 38 6 10 28 49 38 51 61 47 69 46 22 9 12 32 57 44 44 57 32 12 3 3 3 22 46 69 47 61 104 10 21 35 24 46 84 51 49 51 9 4 9 51 49 47 91 43 24 35 21 10 48 13 30 51 39 52 93 48 15 27 22 14 52 14 22 27 15 25 46 46 49 27 39 51 30 13 48 0 0 1 0 99 255 96 1 245 2 198 0 3 0 24 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 15 62 89 184 0 0 220 48 49 23 35 1 51 173 74 1 72 74 160 3 102 0 0 0 1 1 7 255 6 1 81 2 238 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 1 51 17 35 1 7 74 74 2 238 252 24 0 0 0 0 1 0 99 255 96 1 245 2 198 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 2 220 48 49 19 51 1 35 99 74 1 72 74 2 198 252 154 0 0 2 1 7 255 6 1 81 2 238 0 3 0 7 0 19 0 186 0 1 0 5 0 3 43 186 0 3 0 7 0 3 43 48 49 1 51 17 35 23 17 35 17 1 7 74 74 74 74 2 238 254 53 77 254 48 1 208 0 0 0 1 0 84 0 111 2 4 2 44 0 14 0 47 0 184 0 14 47 186 0 1 0 14 0 5 17 18 57 184 0 1 16 185 0 4 0 1 244 184 0 7 208 184 0 1 16 184 0 10 208 184 0 14 16 184 0 12 208 48 49 63 1 39 55 23 55 51 23 55 23 7 23 7 39 7 138 108 162 16 167 9 48 9 167 16 162 108 42 120 120 141 165 70 46 55 189 189 55 46 70 165 30 159 159 0 0 0 0 1 0 127 255 176 1 217 2 200 0 11 0 45 0 187 0 3 0 1 0 0 0 4 43 184 0 0 16 184 0 9 208 184 0 8 208 184 0 1 208 184 0 3 16 184 0 6 208 184 0 7 208 184 0 2 208 48 49 1 7 53 23 39 51 7 55 21 39 19 35 1 14 143 143 5 70 5 143 143 5 70 1 235 5 71 5 160 160 5 71 5 253 197 0 0 0 1 0 127 255 176 1 217 2 200 0 21 0 87 0 187 0 6 0 1 0 3 0 4 43 187 0 1 0 1 0 20 0 4 43 184 0 1 16 184 0 14 208 184 0 15 208 184 0 0 208 184 0 3 16 184 0 12 208 184 0 11 208 184 0 4 208 184 0 6 16 184 0 9 208 184 0 10 208 184 0 5 208 184 0 20 16 184 0 17 208 184 0 16 208 184 0 21 208 48 49 55 23 39 55 7 53 23 39 51 7 55 21 39 23 7 55 21 39 23 35 55 7 127 143 5 5 143 143 5 70 5 143 143 5 5 143 143 5 70 5 143 146 7 177 177 7 71 5 160 160 5 71 7 177 177 7 71 5 160 160 5 0 0 0 2 0 91 255 192 1 253 2 172 0 15 0 71 0 79 0 187 0 47 0 1 0 40 0 4 43 187 0 68 0 1 0 19 0 4 43 186 0 50 0 40 0 19 17 18 57 186 0 22 0 68 0 47 17 18 57 186 0 32 0 50 0 22 17 18 57 184 0 32 16 184 0 0 208 186 0 60 0 22 0 50 17 18 57 184 0 60 16 184 0 8 208 48 49 37 62 1 53 52 46 2 39 14 1 21 20 30 2 19 46 1 35 34 6 21 20 30 4 21 20 6 7 30 1 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 4 53 52 54 55 46 1 53 52 62 2 51 50 22 23 1 115 32 35 41 62 73 32 31 37 41 63 73 84 26 56 35 42 38 42 63 73 63 42 49 41 14 15 24 42 59 36 55 92 32 50 26 61 42 41 45 42 62 74 62 42 51 40 14 17 19 38 56 38 50 81 30 192 14 38 34 34 44 33 29 18 16 41 31 33 43 33 28 1 107 20 26 37 26 27 36 30 30 43 61 46 48 60 22 16 39 26 30 50 36 21 38 33 45 24 28 40 29 28 38 30 29 42 61 46 45 64 21 16 39 26 26 47 36 21 34 23 0 0 2 0 72 255 176 1 229 2 144 0 3 0 16 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 13 62 89 48 49 1 51 17 35 3 35 34 46 2 53 52 62 2 59 1 1 148 81 81 54 32 53 90 66 37 36 63 86 50 43 2 144 253 32 1 50 25 53 82 57 59 81 51 22 0 0 0 0 3 0 30 255 245 2 58 2 141 0 19 0 39 0 69 0 77 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 11 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 3 62 89 185 0 25 0 1 244 184 0 5 16 185 0 35 0 1 244 184 0 45 208 185 0 52 0 1 244 184 0 25 16 184 0 65 208 185 0 58 0 1 244 48 49 19 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 23 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 35 34 46 2 30 41 73 99 57 57 99 73 41 41 73 99 57 57 99 73 41 46 32 59 83 50 50 83 59 32 32 59 83 50 50 83 59 32 70 27 46 59 33 35 49 20 34 16 31 20 46 56 53 45 26 38 17 30 23 52 38 34 59 44 25 1 67 76 123 85 46 46 85 123 76 77 123 87 47 47 87 123 77 66 107 77 42 42 77 107 66 66 106 76 41 41 76 106 66 43 70 50 26 27 20 39 14 17 75 59 66 77 20 14 42 20 27 27 51 73 0 0 4 0 30 255 245 2 58 2 141 0 14 0 23 0 43 0 63 0 85 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 11 62 89 184 0 0 69 88 184 0 39 47 27 185 0 39 0 3 62 89 187 0 15 0 1 0 11 0 4 43 184 0 29 16 185 0 59 0 1 244 184 0 1 208 184 0 39 16 185 0 49 0 1 244 184 0 13 208 184 0 1 16 185 0 21 0 1 244 48 49 19 51 50 30 2 21 20 14 2 43 1 21 35 55 50 54 53 52 38 43 1 21 39 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 193 114 28 50 37 21 21 37 50 28 49 65 104 39 42 43 38 39 228 41 73 99 57 57 99 73 41 41 73 99 57 57 99 73 41 46 32 59 83 50 50 83 59 32 32 59 83 50 50 83 59 32 1 244 14 28 45 30 33 49 33 16 115 165 37 42 36 32 147 21 76 123 85 46 46 85 123 76 77 123 87 47 47 87 123 77 66 107 77 42 42 77 107 66 66 106 76 41 41 76 106 0 4 0 112 1 63 1 232 2 201 0 19 0 39 0 53 0 62 0 61 0 187 0 20 0 1 0 0 0 4 43 187 0 10 0 1 0 30 0 4 43 187 0 54 0 1 0 50 0 4 43 184 0 30 16 184 0 41 208 184 0 50 16 184 0 47 208 184 0 20 16 184 0 52 208 184 0 49 208 48 49 1 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 3 51 50 22 21 20 6 7 23 35 39 35 21 35 55 50 54 53 52 38 43 1 21 1 44 39 69 51 29 29 51 69 39 39 68 51 30 30 51 68 39 31 55 39 23 23 39 55 31 32 54 40 23 23 40 54 41 76 32 47 21 17 46 46 35 41 41 67 20 24 19 23 28 1 63 29 52 72 44 44 72 52 29 29 52 72 44 44 72 52 29 37 23 42 59 36 35 59 43 24 24 43 59 35 36 59 42 23 1 8 29 36 18 31 6 83 70 70 102 17 17 15 18 67 0 0 0 0 2 255 251 1 110 2 68 2 164 0 19 0 27 0 81 0 184 0 26 47 187 0 22 0 1 0 21 0 4 43 187 0 4 0 1 0 13 0 4 43 184 0 22 16 184 0 0 208 184 0 22 16 184 0 6 208 184 0 1 208 184 0 26 16 184 0 19 208 184 0 9 208 184 0 6 16 185 0 12 0 1 244 184 0 15 208 184 0 21 16 184 0 24 208 48 49 1 51 31 1 51 63 1 51 17 35 53 55 35 7 35 39 35 23 21 35 3 35 53 51 21 35 17 35 1 36 71 45 27 4 26 44 71 55 7 4 71 42 72 4 7 54 201 96 252 96 60 2 164 114 80 80 114 254 202 137 105 187 187 105 137 1 0 54 54 255 0 0 2 0 15 1 98 2 68 2 171 0 41 0 61 0 91 0 184 0 0 47 187 0 20 0 1 0 27 0 4 43 187 0 46 0 1 0 55 0 4 43 184 0 0 16 185 0 7 0 1 244 184 0 20 16 184 0 42 208 184 0 42 47 184 0 20 16 184 0 48 208 184 0 48 47 184 0 43 208 184 0 0 16 184 0 61 208 184 0 51 208 184 0 48 16 185 0 54 0 1 244 184 0 57 208 48 49 19 34 38 39 55 30 1 51 50 54 53 52 38 47 1 46 1 53 52 54 51 50 22 23 7 46 1 35 34 6 21 20 22 31 1 30 1 21 20 14 2 19 51 31 1 51 63 1 51 17 35 53 55 35 7 35 39 35 23 21 35 125 33 54 23 33 19 37 25 23 26 19 23 46 22 37 56 48 28 50 17 30 15 35 17 23 24 21 20 46 29 32 15 28 41 142 71 45 27 4 26 44 71 55 7 4 71 42 72 4 7 54 1 98 25 23 37 17 21 21 18 20 15 11 24 11 39 35 39 49 22 16 39 12 18 23 15 15 19 9 23 14 38 35 18 32 26 15 1 66 114 80 80 114 254 202 137 105 187 187 105 137 0 0 0 0 2 0 49 255 112 2 34 2 123 0 52 0 61 0 63 0 187 0 30 0 1 0 37 0 4 43 187 0 47 0 1 0 20 0 4 43 187 0 56 0 1 0 6 0 4 43 187 0 59 0 1 0 14 0 4 43 186 0 2 0 6 0 47 17 18 57 184 0 2 16 185 0 58 0 1 244 48 49 37 35 39 35 14 1 35 34 46 2 53 52 54 55 53 52 46 2 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 53 52 62 2 51 50 30 2 21 5 20 22 51 50 55 53 14 1 2 34 50 7 4 22 71 39 27 47 35 20 136 128 17 36 57 39 45 82 63 37 36 62 84 49 45 67 29 28 39 82 50 59 106 80 47 45 80 107 62 52 76 50 25 255 0 43 37 56 56 104 88 100 58 28 42 18 34 49 30 77 78 16 14 36 64 48 28 42 83 125 83 80 125 86 45 23 22 45 27 28 51 99 148 96 96 144 96 49 36 64 87 51 176 35 40 64 126 14 55 0 0 2 0 49 255 238 2 34 2 156 0 52 0 61 0 97 0 184 0 0 69 88 184 0 47 47 27 185 0 47 0 13 62 89 184 0 0 69 88 184 0 37 47 27 185 0 37 0 3 62 89 187 0 56 0 1 0 6 0 4 43 187 0 14 0 1 0 59 0 4 43 186 0 2 0 6 0 47 17 18 57 184 0 47 16 185 0 20 0 1 244 184 0 37 16 185 0 30 0 1 244 184 0 2 16 185 0 58 0 1 244 48 49 37 35 39 35 14 1 35 34 46 2 53 52 54 55 53 52 46 2 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 53 52 62 2 51 50 30 2 21 5 20 22 51 50 55 53 14 1 2 34 50 7 4 22 71 39 27 47 35 20 136 128 17 36 55 38 45 84 63 38 36 62 84 49 45 67 29 28 39 82 50 59 106 80 47 46 80 109 62 51 75 50 24 255 0 43 37 56 56 104 88 173 58 29 41 18 34 49 30 76 79 16 10 28 51 38 23 37 73 110 73 68 105 72 38 23 22 45 26 29 44 86 127 84 86 129 87 43 32 56 75 42 170 35 39 64 126 15 54 0 0 0 0 2 0 87 0 0 2 7 2 138 0 27 0 31 0 139 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 11 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 11 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 3 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 187 0 2 0 1 0 1 0 4 43 187 0 6 0 1 0 5 0 4 43 184 0 6 16 184 0 10 208 184 0 14 208 184 0 5 16 184 0 30 208 184 0 17 208 184 0 2 16 184 0 31 208 184 0 18 208 184 0 1 16 184 0 25 208 184 0 21 208 48 49 55 35 53 51 55 35 53 51 55 51 7 51 55 51 7 51 21 35 7 51 21 35 7 35 55 35 7 35 19 55 35 7 166 79 86 19 85 91 24 53 23 132 24 53 23 81 87 19 86 93 24 54 25 133 24 54 217 19 133 18 204 57 148 58 183 183 183 183 58 148 57 204 204 204 1 5 148 148 0 0 0 0 1 0 104 1 60 1 240 2 200 0 14 0 20 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 15 62 89 48 49 19 55 39 55 23 55 51 23 55 23 7 23 7 39 7 155 92 143 16 147 9 48 9 147 16 143 92 42 103 103 1 89 147 57 46 44 161 159 42 46 57 147 29 140 140 0 0 1 0 134 0 216 1 210 1 32 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 134 1 76 254 180 1 32 72 0 255 255 0 134 0 216 1 210 1 32 2 6 2 25 0 0 0 3 0 85 255 143 2 3 2 239 0 9 0 19 0 67 0 23 0 187 0 3 0 1 0 30 0 4 43 187 0 54 0 1 0 13 0 4 43 48 49 37 22 50 51 50 54 53 52 38 39 3 38 34 35 34 6 21 20 22 31 1 30 3 21 20 14 2 35 42 1 39 7 39 55 46 1 39 55 30 1 23 55 46 3 53 52 62 2 51 58 1 23 55 23 7 30 1 23 7 46 1 39 1 37 5 11 5 59 62 63 45 8 5 9 5 51 59 56 42 53 32 62 50 30 31 55 78 47 6 12 6 27 56 28 42 72 26 39 25 57 32 36 31 59 46 28 29 52 72 43 7 12 6 25 56 25 33 52 23 44 20 37 20 103 1 49 38 36 44 18 1 6 1 45 38 30 38 16 20 12 29 39 52 36 36 59 43 23 1 148 6 151 11 36 22 57 17 31 9 195 12 28 36 48 33 35 57 40 21 1 134 7 137 10 34 22 48 15 23 7 0 0 0 255 255 0 161 1 172 1 183 2 245 2 7 2 56 0 0 1 184 0 0 255 255 0 208 1 184 1 97 2 233 2 7 2 57 0 0 1 184 0 0 255 255 0 174 1 184 1 167 2 245 2 7 2 58 0 1 1 184 0 0 255 255 0 172 1 172 1 164 2 245 2 7 2 59 0 0 1 184 0 0 255 255 0 172 1 184 1 185 2 233 2 7 2 60 0 0 1 184 0 0 255 255 0 172 1 172 1 169 2 233 2 7 2 61 0 0 1 184 0 0 255 255 0 176 1 172 1 173 2 245 2 7 2 62 0 0 1 184 0 0 255 255 0 183 1 184 1 170 2 233 2 7 2 63 0 0 1 184 0 0 255 255 0 175 1 172 1 169 2 245 2 7 2 64 0 0 1 184 0 0 255 255 0 173 1 172 1 169 2 245 2 7 2 65 0 0 1 184 0 0 255 255 0 236 1 108 1 131 3 67 2 7 2 66 0 0 1 184 0 0 255 255 0 213 1 108 1 108 3 67 2 7 2 67 0 0 1 184 0 0 255 255 0 254 1 176 1 90 2 15 2 7 2 68 0 0 1 184 0 0 255 255 0 244 1 68 1 100 2 15 2 7 2 69 0 0 1 184 0 0 255 255 0 161 255 75 1 183 0 148 2 7 2 56 0 0 255 87 0 0 255 255 0 208 255 87 1 97 0 136 2 7 2 57 0 0 255 87 0 0 255 255 0 174 255 87 1 167 0 148 2 7 2 58 0 1 255 87 0 0 255 255 0 172 255 75 1 164 0 148 2 7 2 59 0 0 255 87 0 0 255 255 0 172 255 87 1 185 0 136 2 7 2 60 0 0 255 87 0 0 255 255 0 172 255 75 1 169 0 136 2 7 2 61 0 0 255 87 0 0 255 255 0 176 255 75 1 173 0 148 2 7 2 62 0 0 255 87 0 0 255 255 0 183 255 87 1 170 0 136 2 7 2 63 0 0 255 87 0 0 255 255 0 175 255 75 1 169 0 148 2 7 2 64 0 0 255 87 0 0 255 255 0 173 255 75 1 169 0 148 2 7 2 65 0 0 255 87 0 0 255 255 0 236 255 11 1 131 0 226 2 7 2 66 0 0 255 87 0 0 255 255 0 213 255 11 1 108 0 226 2 7 2 67 0 0 255 87 0 0 255 255 0 254 255 79 1 90 255 174 2 7 2 68 0 0 255 87 0 0 255 255 0 244 254 227 1 100 255 174 2 7 2 69 0 0 255 87 0 0 0 2 0 161 255 244 1 183 1 61 0 11 0 23 0 40 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 187 0 6 0 1 0 18 0 4 43 184 0 0 16 185 0 12 0 1 244 48 49 5 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 1 44 61 78 78 61 61 78 78 61 32 46 46 32 32 46 46 12 88 79 78 84 84 78 79 88 50 57 60 60 53 53 60 60 57 0 0 1 0 208 0 0 1 97 1 49 0 8 0 30 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 187 0 5 0 1 0 0 0 4 43 48 49 37 35 53 62 1 55 51 17 35 1 34 82 33 41 21 50 63 230 42 5 16 12 254 207 0 1 0 173 0 0 1 166 1 61 0 24 0 44 0 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 187 0 13 0 1 0 6 0 4 43 184 0 23 16 185 0 21 0 1 244 184 0 0 208 48 49 55 62 1 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 2 7 51 21 35 183 78 83 31 29 20 38 14 39 23 59 36 54 62 19 33 44 25 136 239 36 59 78 33 27 32 23 19 33 26 35 53 50 20 39 39 41 22 53 0 0 0 0 1 0 172 255 244 1 164 1 61 0 36 0 60 0 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 187 0 22 0 1 0 15 0 4 43 187 0 9 0 1 0 8 0 4 43 184 0 33 16 185 0 3 0 1 244 186 0 27 0 8 0 9 17 18 57 48 49 55 30 1 51 50 54 53 52 35 53 50 54 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 7 30 1 21 20 6 35 34 38 39 204 15 49 27 27 35 96 42 39 26 29 18 40 15 30 19 61 35 47 59 56 32 39 70 51 35 67 25 81 18 25 22 25 51 38 28 23 20 23 19 15 38 20 25 44 40 55 20 8 38 31 45 48 28 26 0 0 0 2 0 172 0 0 1 185 1 49 0 5 0 16 0 56 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 187 0 16 0 1 0 6 0 4 43 187 0 2 0 1 0 13 0 4 43 184 0 16 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 37 53 55 35 15 1 23 35 21 35 53 35 53 55 51 21 51 1 78 4 3 45 54 205 50 57 162 148 71 50 116 56 82 65 73 43 73 73 31 201 189 0 0 0 0 1 0 172 255 244 1 169 1 49 0 29 0 68 0 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 187 0 15 0 1 0 16 0 4 43 187 0 20 0 1 0 9 0 4 43 184 0 26 16 185 0 3 0 1 244 186 0 18 0 9 0 20 17 18 57 184 0 18 16 184 0 13 208 48 49 55 30 1 51 50 54 53 52 38 35 34 6 7 39 55 51 21 35 7 54 51 50 22 21 20 6 35 34 38 39 204 17 45 30 29 37 36 31 20 29 15 31 17 189 139 10 24 32 50 62 70 54 42 60 27 81 18 25 30 27 29 29 12 11 20 155 54 70 12 51 48 48 58 28 26 0 0 0 0 2 0 176 255 244 1 173 1 61 0 11 0 38 0 70 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 187 0 35 0 1 0 15 0 4 43 187 0 21 0 1 0 6 0 4 43 184 0 29 16 185 0 0 0 1 244 186 0 18 0 29 0 35 17 18 57 184 0 18 16 185 0 9 0 1 244 48 49 37 50 54 53 52 38 35 34 6 7 30 1 55 46 1 35 34 6 7 62 1 51 50 22 21 20 14 2 35 34 38 53 52 54 51 50 22 23 1 56 28 30 28 31 20 35 20 6 44 111 14 30 20 43 52 3 19 45 27 51 52 17 31 43 25 59 78 85 69 30 44 19 38 29 25 23 30 16 19 38 34 206 11 13 59 57 17 18 53 42 21 38 29 16 81 71 86 91 18 14 0 0 0 1 0 183 0 0 1 170 1 49 0 15 0 38 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 187 0 8 0 1 0 5 0 4 43 184 0 5 16 184 0 9 208 48 49 51 62 3 55 35 53 51 21 14 3 7 35 253 2 13 24 36 24 169 243 32 40 24 10 2 65 39 65 59 58 31 53 36 35 63 63 68 40 0 0 0 3 0 175 255 244 1 169 1 61 0 12 0 24 0 56 0 60 0 184 0 0 69 88 184 0 52 47 27 185 0 52 0 3 62 89 187 0 37 0 1 0 19 0 4 43 184 0 52 16 185 0 3 0 1 244 186 0 6 0 52 0 19 17 18 57 186 0 22 0 37 0 3 17 18 57 48 49 55 20 22 51 50 54 53 52 46 2 39 6 55 62 1 53 52 38 35 34 6 21 20 22 7 52 54 55 53 46 1 53 52 62 2 51 50 22 21 20 6 7 21 30 1 21 20 14 2 35 34 46 2 233 39 28 26 41 15 24 31 17 47 87 20 16 29 27 25 30 44 114 39 26 23 31 18 31 42 23 50 65 33 20 26 37 19 34 45 27 28 46 33 18 80 20 27 25 20 14 19 13 10 5 22 60 12 26 15 18 24 23 17 22 24 110 32 37 12 4 14 31 27 18 31 23 12 47 37 28 33 11 4 11 37 33 18 32 24 14 14 24 32 0 0 0 0 2 0 173 255 244 1 169 1 61 0 11 0 36 0 70 0 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 187 0 27 0 1 0 9 0 4 43 187 0 3 0 1 0 21 0 4 43 186 0 18 0 27 0 33 17 18 57 184 0 18 16 185 0 6 0 1 244 184 0 33 16 185 0 15 0 1 244 48 49 55 20 22 51 50 54 55 46 1 35 34 6 7 30 1 51 50 54 55 14 1 35 34 38 53 52 54 51 50 22 21 20 6 35 34 38 39 231 28 31 20 35 19 5 44 26 27 31 27 14 31 20 42 50 4 19 45 26 51 51 64 51 59 78 85 69 29 45 19 213 23 29 15 18 38 36 30 177 11 12 57 57 16 18 53 42 44 60 81 71 86 91 19 14 0 1 0 236 255 180 1 131 1 139 0 13 0 11 0 186 0 3 0 11 0 3 43 48 49 55 52 54 55 23 14 1 21 20 22 23 7 46 1 236 55 50 46 45 40 40 45 46 50 55 159 75 111 50 33 45 99 59 59 99 45 32 49 111 0 1 0 213 255 180 1 108 1 139 0 13 0 11 0 186 0 11 0 3 0 3 43 48 49 37 20 6 7 39 62 1 53 52 38 39 55 30 1 1 108 55 50 46 45 40 40 45 46 50 55 159 75 111 49 32 45 99 59 59 99 45 33 50 111 0 0 0 0 1 0 254 255 248 1 90 0 87 0 11 0 26 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 3 62 89 185 0 3 0 1 244 48 49 55 52 54 51 50 22 21 20 6 35 34 38 254 26 20 20 26 26 20 20 26 39 22 26 26 22 21 26 26 0 0 0 0 1 0 244 255 140 1 100 0 87 0 17 0 43 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 3 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 185 0 11 0 1 244 48 49 23 62 1 53 6 35 34 38 53 52 54 51 50 22 21 20 6 7 244 29 35 2 5 17 29 28 19 26 28 51 45 79 11 39 29 1 21 21 21 25 37 36 45 68 17 0 0 255 255 0 161 1 64 1 183 2 137 2 7 2 56 0 0 1 76 0 0 255 255 0 208 1 76 1 97 2 125 2 7 2 57 0 0 1 76 0 0 255 255 0 174 1 76 1 167 2 137 2 7 2 58 0 1 1 76 0 0 255 255 0 172 1 64 1 164 2 137 2 7 2 59 0 0 1 76 0 0 255 255 0 172 1 76 1 185 2 125 2 7 2 60 0 0 1 76 0 0 255 255 0 172 1 64 1 169 2 125 2 7 2 61 0 0 1 76 0 0 255 255 0 176 1 64 1 173 2 137 2 7 2 62 0 0 1 76 0 0 255 255 0 183 1 76 1 170 2 125 2 7 2 63 0 0 1 76 0 0 255 255 0 175 1 64 1 169 2 137 2 7 2 64 0 0 1 76 0 0 255 255 0 173 1 64 1 169 2 137 2 7 2 65 0 0 1 76 0 0 255 255 0 236 0 190 1 131 2 149 2 7 2 66 0 0 1 10 0 0 255 255 0 213 0 190 1 108 2 149 2 7 2 67 0 0 1 10 0 0 255 255 0 254 1 2 1 90 1 97 2 7 2 68 0 0 1 10 0 0 255 255 0 244 0 150 1 100 1 97 2 7 2 69 0 0 1 10 0 0 255 255 0 167 0 252 1 186 2 78 2 6 2 87 0 0 255 255 0 137 0 252 1 182 2 78 2 6 2 116 0 0 255 255 0 142 0 252 1 202 2 78 2 6 2 101 0 0 0 2 0 167 0 252 1 186 2 78 0 25 0 35 0 57 0 184 0 18 47 187 0 29 0 1 0 23 0 4 43 187 0 13 0 1 0 6 0 4 43 187 0 3 0 1 0 33 0 4 43 186 0 19 0 13 0 23 17 18 57 184 0 19 16 185 0 32 0 1 244 48 49 19 52 54 55 46 1 35 34 6 7 39 62 1 51 50 22 29 1 35 39 35 14 1 35 34 38 55 20 22 51 50 54 55 53 14 1 167 102 109 1 30 39 29 52 22 25 26 72 40 63 61 52 5 2 24 57 32 43 60 63 34 25 23 43 23 81 67 1 89 53 56 11 30 44 21 13 43 15 27 72 63 195 37 19 26 50 47 24 23 21 19 82 9 37 0 0 2 0 172 0 252 1 216 2 216 0 20 0 32 0 84 0 184 0 19 47 184 0 0 69 88 184 0 1 47 27 185 0 1 0 15 62 89 187 0 24 0 1 0 14 0 4 43 187 0 6 0 1 0 30 0 4 43 186 0 3 0 6 0 14 17 18 57 186 0 17 0 14 0 6 17 18 57 184 0 17 16 185 0 21 0 1 244 184 0 3 16 185 0 32 0 1 244 48 49 19 51 21 7 62 1 51 50 22 21 20 14 2 35 34 38 39 35 7 35 55 30 1 51 50 54 53 52 38 35 34 7 172 64 2 23 53 28 66 68 24 40 53 28 24 50 23 1 7 50 64 21 40 17 40 52 39 46 41 44 2 216 125 56 19 24 89 75 41 65 45 23 21 19 32 75 17 13 63 57 51 61 40 0 0 1 0 181 0 252 1 205 2 78 0 29 0 23 0 187 0 18 0 1 0 25 0 4 43 187 0 5 0 1 0 12 0 4 43 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 35 34 46 2 181 28 47 61 34 35 50 18 32 15 33 20 48 60 58 48 25 40 17 27 24 59 32 35 61 44 25 1 165 40 63 43 23 22 16 41 13 14 65 52 53 64 18 13 41 20 22 23 43 63 0 0 2 0 137 0 252 1 182 2 216 0 20 0 32 0 84 0 184 0 13 47 184 0 0 69 88 184 0 10 47 27 185 0 10 0 15 62 89 187 0 24 0 1 0 18 0 4 43 187 0 5 0 1 0 30 0 4 43 186 0 8 0 5 0 18 17 18 57 186 0 14 0 18 0 5 17 18 57 184 0 14 16 185 0 26 0 1 244 184 0 8 16 185 0 27 0 1 244 48 49 19 52 62 2 51 50 22 23 39 53 51 17 35 39 35 14 1 35 34 38 55 20 22 51 50 55 53 46 1 35 34 6 137 24 40 53 29 29 43 21 2 64 53 5 2 20 53 29 63 76 66 46 42 43 40 21 38 20 39 53 1 165 39 63 44 23 20 17 54 121 254 44 37 19 26 88 81 55 61 40 161 17 14 62 0 2 0 160 0 252 1 201 2 78 0 25 0 32 0 33 0 187 0 14 0 1 0 21 0 4 43 187 0 5 0 1 0 29 0 4 43 187 0 10 0 1 0 26 0 4 43 48 49 19 52 62 2 51 50 22 21 20 7 35 30 1 51 50 54 55 23 14 1 35 34 46 2 55 52 38 35 34 6 7 160 27 43 57 30 68 72 3 231 4 61 47 24 42 20 23 24 59 35 35 60 45 26 241 43 40 35 55 6 1 165 39 63 44 23 83 69 20 12 49 55 13 12 41 14 20 23 43 63 66 45 48 48 45 0 0 0 1 0 198 1 4 1 247 2 224 0 23 0 56 0 184 0 11 47 184 0 0 69 88 184 0 7 47 27 185 0 7 0 9 62 89 187 0 20 0 1 0 3 0 4 43 184 0 7 16 185 0 9 0 1 244 184 0 13 208 184 0 7 16 184 0 16 208 48 49 1 46 1 35 34 6 29 1 51 21 35 17 35 17 35 53 55 53 52 54 51 50 22 23 1 233 17 34 20 42 36 128 128 63 79 79 65 69 25 45 22 2 160 7 7 42 35 27 51 254 241 1 15 48 3 25 58 71 8 8 0 0 0 3 0 149 0 114 1 226 2 78 0 15 0 65 0 77 0 100 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 9 62 89 187 0 3 0 1 0 63 0 4 43 187 0 34 0 1 0 72 0 4 43 187 0 55 0 1 0 9 0 4 43 187 0 66 0 1 0 48 0 4 43 186 0 19 0 9 0 55 17 18 57 184 0 19 16 184 0 13 208 184 0 48 16 184 0 50 208 184 0 26 208 184 0 37 16 185 0 40 0 1 244 48 49 55 20 22 51 50 54 53 52 38 43 1 34 38 39 14 1 7 52 55 53 46 1 53 52 54 55 53 46 1 53 52 62 2 51 50 22 23 51 21 35 30 1 21 20 14 2 35 34 39 6 21 20 59 1 50 22 21 20 14 2 35 34 38 55 50 54 53 52 38 35 34 6 21 20 22 203 51 50 54 63 37 35 59 15 23 11 21 17 54 53 13 20 21 18 17 24 21 35 47 27 14 24 11 134 82 11 14 19 34 46 27 23 30 22 63 71 64 62 26 48 68 42 70 79 148 29 40 40 29 29 40 40 210 24 29 37 23 21 15 2 3 11 25 20 40 30 3 7 26 20 16 32 12 3 13 41 29 27 43 30 16 3 5 48 11 31 19 27 41 28 15 11 14 20 34 36 41 24 41 31 18 45 245 38 32 32 40 40 32 32 38 0 0 0 0 1 0 175 1 4 1 204 2 216 0 20 0 58 0 184 0 20 47 184 0 11 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 187 0 6 0 1 0 15 0 4 43 186 0 3 0 6 0 20 17 18 57 184 0 3 16 185 0 18 0 1 244 48 49 19 51 21 7 62 1 51 50 22 29 1 35 53 52 38 35 34 6 7 21 35 175 64 4 24 56 36 57 52 64 31 36 26 39 25 64 2 216 125 69 23 33 65 62 203 195 42 39 25 24 227 0 0 2 0 175 1 4 1 139 2 224 0 5 0 17 0 42 0 184 0 3 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 9 62 89 185 0 4 0 1 244 184 0 0 16 184 0 6 220 184 0 12 220 48 49 19 51 17 35 17 35 55 34 38 53 52 54 51 50 22 21 20 6 175 205 64 141 172 21 27 27 21 21 27 27 2 70 254 190 1 15 114 24 21 20 26 26 20 21 24 0 0 2 0 140 0 119 1 128 2 224 0 18 0 30 0 52 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 9 62 89 187 0 13 0 1 0 7 0 4 43 184 0 0 16 185 0 17 0 1 244 184 0 0 16 184 0 19 220 184 0 25 220 48 49 19 51 17 20 14 2 35 34 38 39 55 22 51 50 54 53 17 35 55 34 38 53 52 54 51 50 22 21 20 6 164 204 13 32 54 40 26 45 18 20 34 32 47 32 141 172 21 28 28 21 20 28 28 2 70 254 188 30 50 38 21 13 10 46 17 43 40 1 21 114 24 21 20 26 26 20 21 24 0 0 0 1 0 189 1 4 1 245 2 216 0 12 0 83 0 184 0 8 47 184 0 11 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 9 62 89 186 0 10 0 11 0 0 17 18 57 184 0 10 16 185 0 2 0 1 244 186 0 9 0 8 0 4 17 18 57 184 0 9 16 184 0 6 208 48 49 19 51 17 51 55 51 7 23 35 39 7 21 35 189 64 2 159 71 124 140 71 107 70 64 2 216 254 206 160 128 194 152 67 85 0 0 1 0 196 0 252 1 202 2 216 0 17 0 40 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 187 0 5 0 1 0 12 0 4 43 184 0 0 16 185 0 17 0 1 244 48 49 19 51 17 20 22 51 50 54 55 23 14 1 35 34 38 53 17 35 196 145 29 26 11 23 16 12 20 34 23 54 50 81 2 216 254 148 32 28 6 5 50 5 8 60 56 1 54 0 0 0 0 1 0 130 1 4 1 212 2 78 0 31 0 84 0 184 0 31 47 184 0 23 47 184 0 16 47 184 0 0 69 88 184 0 1 47 27 185 0 1 0 9 62 89 187 0 11 0 1 0 19 0 4 43 187 0 26 0 1 0 6 0 4 43 186 0 2 0 31 0 1 17 18 57 184 0 2 16 184 0 8 208 184 0 2 16 185 0 29 0 1 244 184 0 21 208 48 49 19 51 23 51 62 1 51 50 23 62 1 51 50 22 29 1 35 53 52 35 34 7 21 35 53 52 35 34 6 7 21 35 130 50 5 2 12 33 28 49 12 13 36 27 34 37 61 31 29 21 53 32 15 23 12 61 2 70 42 22 28 55 25 30 52 48 230 225 51 46 230 225 51 23 23 230 0 0 0 1 0 175 1 4 1 204 2 78 0 20 0 58 0 184 0 20 47 184 0 11 47 184 0 0 69 88 184 0 1 47 27 185 0 1 0 9 62 89 187 0 6 0 1 0 15 0 4 43 186 0 2 0 20 0 1 17 18 57 184 0 2 16 185 0 18 0 1 244 48 49 19 51 23 51 62 1 51 50 22 29 1 35 53 52 38 35 34 6 7 21 35 175 53 5 3 23 55 37 56 53 64 31 36 26 39 25 64 2 70 48 23 33 65 62 203 195 42 39 25 24 227 0 0 2 0 142 0 252 1 202 2 78 0 19 0 31 0 23 0 187 0 23 0 1 0 15 0 4 43 187 0 5 0 1 0 29 0 4 43 48 49 19 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 22 51 50 54 53 52 38 35 34 6 142 26 43 57 32 32 57 44 25 25 44 57 32 32 57 43 26 66 49 43 43 49 49 43 43 49 1 165 40 63 43 23 23 43 63 40 40 63 43 23 23 43 63 40 53 64 64 53 52 65 65 0 0 0 2 0 172 0 127 1 216 2 78 0 19 0 31 0 84 0 184 0 1 47 184 0 0 69 88 184 0 4 47 27 185 0 4 0 9 62 89 187 0 9 0 1 0 29 0 4 43 187 0 23 0 1 0 17 0 4 43 186 0 5 0 9 0 17 17 18 57 186 0 19 0 17 0 9 17 18 57 184 0 19 16 185 0 20 0 1 244 184 0 5 16 185 0 31 0 1 244 48 49 55 21 35 17 51 23 51 62 1 51 50 22 21 20 14 2 35 34 39 55 30 1 51 50 54 53 52 38 35 34 7 236 64 52 5 3 23 54 30 65 68 24 40 53 28 47 46 2 21 40 17 40 52 39 46 39 46 234 107 1 199 36 18 26 89 75 41 65 45 23 37 46 17 13 63 57 51 61 40 0 0 2 0 137 0 127 1 182 2 78 0 20 0 32 0 84 0 184 0 13 47 184 0 0 69 88 184 0 10 47 27 185 0 10 0 9 62 89 187 0 5 0 1 0 30 0 4 43 187 0 24 0 1 0 18 0 4 43 186 0 9 0 5 0 18 17 18 57 186 0 15 0 18 0 30 17 18 57 184 0 15 16 185 0 26 0 1 244 184 0 9 16 185 0 27 0 1 244 48 49 19 52 62 2 51 50 22 23 51 55 51 17 35 53 55 14 1 35 34 38 55 20 22 51 50 55 53 46 1 35 34 6 137 24 40 53 29 29 44 23 2 5 52 64 3 20 52 29 63 76 66 46 42 43 40 21 38 20 39 53 1 165 39 63 44 23 19 20 31 254 57 112 55 17 25 88 81 55 61 40 161 17 14 62 0 1 0 243 1 4 1 240 2 78 0 17 0 54 0 184 0 16 47 184 0 0 69 88 184 0 1 47 27 185 0 1 0 9 62 89 187 0 6 0 1 0 12 0 4 43 186 0 2 0 16 0 1 17 18 57 184 0 2 16 185 0 15 0 1 244 48 49 19 51 23 51 62 1 51 50 23 7 46 1 35 34 6 7 21 35 243 54 5 2 23 66 39 35 29 13 17 25 18 31 61 24 64 2 70 75 39 44 13 54 5 5 40 50 183 0 0 1 0 162 0 252 1 195 2 78 0 45 0 43 0 187 0 3 0 1 0 42 0 4 43 187 0 19 0 1 0 26 0 4 43 186 0 6 0 42 0 26 17 18 57 186 0 29 0 19 0 3 17 18 57 48 49 19 30 1 51 50 54 53 52 46 2 39 46 3 53 52 54 51 50 22 23 7 46 1 35 34 6 21 20 30 2 23 30 3 21 20 6 35 34 38 39 192 26 55 37 40 38 15 25 32 16 21 43 34 22 71 64 36 63 23 30 20 45 27 38 33 14 24 30 16 22 44 35 22 73 70 43 76 27 1 83 18 20 26 19 11 17 14 10 5 6 16 22 29 21 40 53 22 15 40 13 16 25 17 11 15 12 10 5 6 15 22 31 23 41 57 26 19 0 0 0 1 0 164 0 252 1 207 2 160 0 23 0 73 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 9 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 13 62 89 187 0 13 0 1 0 20 0 4 43 184 0 6 16 185 0 0 0 1 244 184 0 6 16 184 0 3 208 184 0 0 16 184 0 9 208 48 49 19 35 53 63 1 51 21 51 21 35 21 20 22 51 50 54 55 23 14 1 35 34 38 53 241 77 80 8 53 145 145 34 45 20 31 15 13 20 48 26 72 56 2 19 48 3 90 90 51 144 42 42 8 6 46 8 11 74 61 0 0 0 1 0 159 0 252 1 187 2 70 0 20 0 65 0 184 0 0 69 88 184 0 11 47 27 185 0 11 0 9 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 9 62 89 187 0 15 0 1 0 6 0 4 43 186 0 2 0 6 0 20 17 18 57 184 0 2 16 184 0 18 208 48 49 1 35 39 35 14 1 35 34 38 61 1 51 21 20 22 51 50 54 55 53 51 1 187 52 6 2 23 57 37 55 52 64 30 35 26 41 24 64 1 4 51 26 33 65 62 203 195 42 38 23 28 224 0 0 1 0 147 1 4 1 205 2 70 0 13 0 51 0 184 0 12 47 184 0 0 69 88 184 0 10 47 27 185 0 10 0 9 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 9 62 89 184 0 12 16 185 0 6 0 1 244 48 49 19 51 23 30 1 23 51 62 1 63 1 51 3 35 147 66 61 9 14 8 2 8 15 8 62 61 118 74 2 70 176 24 48 24 24 48 24 176 254 190 0 0 0 0 1 0 82 1 4 1 220 2 70 0 33 0 90 0 184 0 23 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 9 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 9 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 9 62 89 184 0 23 16 185 0 15 0 1 244 184 0 6 208 184 0 10 16 185 0 28 0 1 244 184 0 23 16 184 0 32 208 48 49 19 51 23 30 1 23 51 62 1 63 1 51 23 30 1 23 51 62 1 63 1 51 3 35 39 46 1 39 35 14 1 15 1 35 82 64 37 5 6 4 3 4 9 5 36 51 37 5 8 5 3 5 6 5 36 60 67 77 35 5 7 5 3 4 7 6 34 74 2 70 178 23 45 23 23 45 23 154 154 23 45 23 23 45 23 178 254 190 151 23 45 25 20 44 29 151 0 1 0 159 1 4 1 203 2 70 0 25 0 75 0 184 0 15 47 184 0 24 47 184 0 0 69 88 184 0 1 47 27 185 0 1 0 9 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 9 62 89 186 0 19 0 15 0 11 17 18 57 184 0 19 16 184 0 0 208 184 0 19 16 184 0 13 208 184 0 6 208 48 49 1 39 51 23 30 1 23 51 62 1 63 1 51 7 23 35 39 46 1 39 35 14 1 15 1 35 1 14 102 68 43 8 17 8 3 8 15 8 38 68 104 111 69 47 8 20 10 2 8 17 9 43 67 1 172 154 66 14 26 14 14 26 14 66 161 161 70 15 29 14 14 29 15 70 0 0 1 0 140 0 124 1 204 2 70 0 27 0 65 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 9 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 9 62 89 187 0 3 0 1 0 23 0 4 43 186 0 14 0 23 0 18 17 18 57 184 0 14 16 184 0 7 208 48 49 55 30 1 51 50 54 63 1 3 51 23 30 1 23 51 62 1 63 1 51 3 14 1 35 34 38 39 55 168 5 14 7 29 37 11 7 138 64 69 8 17 9 2 8 14 7 60 62 130 19 60 53 13 21 9 13 180 1 3 35 28 23 1 64 170 20 47 23 22 47 21 170 254 169 51 64 4 3 49 0 0 0 1 0 146 1 4 1 200 2 70 0 9 0 52 0 184 0 9 47 184 0 0 69 88 184 0 3 47 27 185 0 3 0 9 62 89 184 0 9 16 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 19 55 35 53 33 21 7 51 21 33 146 213 189 1 23 212 219 254 202 1 38 237 51 34 237 51 0 3 0 160 0 252 1 201 2 227 0 25 0 32 0 36 0 58 0 184 0 0 69 88 184 0 33 47 27 185 0 33 0 15 62 89 187 0 14 0 1 0 21 0 4 43 187 0 5 0 1 0 29 0 4 43 187 0 10 0 1 0 26 0 4 43 184 0 33 16 184 0 35 220 48 49 19 52 62 2 51 50 22 21 20 7 35 30 1 51 50 54 55 23 14 1 35 34 46 2 55 52 38 35 34 6 7 19 51 23 35 160 27 43 57 30 68 72 3 231 4 61 47 24 42 20 23 24 59 35 35 60 45 26 241 43 40 35 55 6 11 69 60 49 1 165 39 63 44 23 83 69 20 12 49 55 13 12 41 14 20 23 43 63 66 45 48 48 45 1 36 101 0 3 0 160 0 252 1 201 2 227 0 25 0 32 0 36 0 58 0 184 0 0 69 88 184 0 35 47 27 185 0 35 0 15 62 89 187 0 14 0 1 0 21 0 4 43 187 0 5 0 1 0 29 0 4 43 187 0 10 0 1 0 26 0 4 43 184 0 35 16 184 0 33 220 48 49 19 52 62 2 51 50 22 21 20 7 35 30 1 51 50 54 55 23 14 1 35 34 46 2 55 52 38 35 34 6 7 55 35 55 51 160 27 43 57 30 68 72 3 231 4 61 47 24 42 20 23 24 59 35 35 60 45 26 241 43 40 35 55 6 96 48 61 68 1 165 39 63 44 23 83 69 20 12 49 55 13 12 41 14 20 23 43 63 66 45 48 48 45 191 101 0 0 2 0 154 0 252 1 194 2 78 0 24 0 31 0 33 0 187 0 28 0 1 0 22 0 4 43 187 0 14 0 1 0 7 0 4 43 187 0 25 0 1 0 3 0 4 43 48 49 19 52 54 55 51 46 1 35 34 6 7 39 62 1 51 50 22 21 20 14 2 35 34 38 55 20 22 51 50 54 55 154 2 2 229 3 51 47 26 42 21 22 24 59 35 71 86 24 41 55 32 67 77 57 45 41 39 47 5 1 152 9 17 6 47 53 14 12 41 16 19 88 81 39 63 43 24 84 62 48 48 49 47 0 2 0 137 0 252 1 182 2 78 0 11 0 32 0 84 0 184 0 25 47 184 0 0 69 88 184 0 22 47 27 185 0 22 0 9 62 89 187 0 3 0 1 0 30 0 4 43 187 0 17 0 1 0 9 0 4 43 186 0 26 0 30 0 17 17 18 57 184 0 26 16 185 0 5 0 1 244 186 0 21 0 17 0 30 17 18 57 184 0 21 16 185 0 6 0 1 244 48 49 19 20 22 51 50 55 53 46 1 35 34 6 7 52 62 2 51 50 22 23 51 55 51 17 35 39 35 14 1 35 34 38 203 46 42 44 39 20 40 20 38 53 66 24 40 53 29 28 45 23 2 5 52 53 5 2 20 53 29 63 76 1 165 55 61 40 161 17 14 62 54 39 63 44 23 19 20 31 254 190 37 19 26 88 0 2 0 137 0 121 1 182 2 78 0 31 0 44 0 90 0 184 0 0 69 88 184 0 23 47 27 185 0 23 0 9 62 89 187 0 3 0 1 0 28 0 4 43 187 0 18 0 1 0 39 0 4 43 187 0 32 0 1 0 10 0 4 43 186 0 7 0 10 0 18 17 18 57 186 0 22 0 18 0 10 17 18 57 184 0 7 16 185 0 35 0 1 244 184 0 22 16 185 0 36 0 1 244 48 49 55 30 1 51 50 54 63 1 14 1 35 34 38 53 52 62 2 51 50 22 23 51 55 51 17 20 6 35 34 38 39 55 50 54 55 53 46 1 35 34 6 21 20 22 183 25 52 23 45 45 1 1 19 51 29 63 76 25 40 53 28 28 45 22 1 6 53 81 74 31 65 27 131 23 40 20 20 40 20 38 54 47 200 16 13 42 36 56 17 24 87 75 37 61 43 23 19 19 30 254 178 60 67 18 17 160 21 21 148 17 14 60 50 51 60 0 0 0 0 2 0 175 1 173 1 170 2 173 0 19 0 31 0 23 0 187 0 10 0 1 0 26 0 4 43 187 0 20 0 1 0 0 0 4 43 48 49 1 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 1 44 25 45 35 20 20 35 45 25 25 46 34 21 21 34 46 25 34 42 42 34 33 42 42 1 173 18 33 47 29 30 47 34 18 18 34 47 30 29 47 33 18 46 46 35 37 46 46 37 35 46 0 0 2 0 58 0 83 2 30 2 65 0 32 0 52 0 23 0 187 0 38 0 1 0 29 0 4 43 187 0 12 0 1 0 48 0 4 43 48 49 63 1 46 1 53 52 54 55 39 55 23 54 51 50 23 55 23 7 30 1 21 20 6 7 23 7 39 14 1 35 34 39 7 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 58 84 17 19 18 17 83 44 87 48 63 62 49 87 44 84 17 19 19 17 84 44 88 23 57 30 62 49 87 80 19 32 43 24 24 43 32 19 19 32 43 24 24 43 32 19 128 85 23 58 35 35 59 23 86 45 90 37 37 90 45 86 23 59 35 35 58 23 85 45 89 19 19 38 89 246 30 49 36 19 19 36 49 30 30 49 36 19 19 36 49 0 0 1 0 85 255 146 2 0 2 236 0 49 0 71 0 184 0 22 47 184 0 44 47 184 0 43 220 185 0 5 0 1 244 184 0 22 16 184 0 23 220 186 0 8 0 23 0 43 17 18 57 184 0 20 208 184 0 23 16 185 0 30 0 1 244 186 0 33 0 43 0 23 17 18 57 184 0 43 16 184 0 46 208 48 49 1 46 3 35 34 6 21 20 30 4 21 20 14 2 7 21 35 53 46 1 39 55 30 1 51 50 54 53 52 46 4 53 52 54 55 53 51 21 30 1 23 1 195 17 31 34 40 25 51 59 47 71 82 71 47 25 47 65 39 60 56 100 35 39 38 91 57 60 61 47 70 83 70 47 89 73 60 55 74 30 1 237 13 21 15 8 45 38 28 36 30 30 42 60 46 32 55 41 27 4 146 145 5 44 29 57 27 41 49 38 31 41 32 30 41 57 44 63 80 8 132 131 5 42 29 0 0 0 1 0 77 0 0 2 19 2 138 0 41 0 87 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 11 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 3 62 89 187 0 8 0 1 0 11 0 4 43 184 0 1 16 185 0 0 0 1 244 184 0 3 208 184 0 19 16 185 0 26 0 1 244 184 0 11 16 184 0 32 208 184 0 8 16 184 0 35 208 48 49 37 21 33 53 62 1 53 52 39 35 53 55 46 1 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 23 51 21 35 22 21 20 6 7 21 2 19 254 59 63 61 8 117 99 11 21 30 55 77 48 62 85 29 48 23 59 42 66 69 19 11 189 173 6 37 38 71 71 50 28 95 57 26 29 52 4 32 61 32 42 68 48 26 43 32 47 23 30 65 52 32 59 32 56 27 29 53 70 31 4 0 0 1 0 53 0 0 2 35 2 126 0 29 0 108 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 11 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 11 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 3 62 89 186 0 5 0 19 0 9 17 18 57 184 0 5 16 184 0 11 208 185 0 14 0 1 244 184 0 25 208 184 0 24 220 184 0 15 208 185 0 18 0 1 244 184 0 21 208 184 0 11 16 184 0 28 208 48 49 19 23 30 1 23 51 62 1 63 1 51 3 51 21 35 21 51 21 35 21 35 53 35 53 51 53 35 53 51 3 138 92 17 33 19 4 18 34 18 92 82 186 162 183 183 183 82 181 181 181 161 185 2 126 171 33 67 35 35 67 33 171 254 192 47 65 48 158 158 48 65 47 1 64 0 1 0 58 255 244 2 54 2 138 0 49 0 109 0 184 0 0 69 88 184 0 21 47 27 185 0 21 0 11 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 3 62 89 186 0 40 0 34 0 3 43 184 0 40 16 185 0 43 0 1 244 184 0 6 208 184 0 40 16 184 0 9 208 184 0 34 16 184 0 15 208 184 0 34 16 185 0 31 0 1 244 184 0 18 208 184 0 21 16 185 0 28 0 1 244 184 0 3 16 185 0 46 0 1 244 48 49 37 14 1 35 34 38 39 35 53 55 38 52 53 60 1 55 35 53 55 62 1 51 50 22 23 7 46 1 35 34 6 7 33 21 33 6 20 21 28 1 23 33 21 35 30 1 51 50 54 55 2 54 38 92 62 98 135 19 64 59 1 1 59 64 19 141 106 51 88 30 49 26 59 38 74 90 14 1 38 254 213 1 1 1 3 253 14 88 69 43 65 30 81 44 49 129 118 43 4 9 18 9 8 16 8 44 5 118 133 45 33 47 26 33 98 87 49 7 14 8 10 19 9 48 85 96 36 35 0 0 2 0 113 255 223 1 250 2 141 0 6 0 37 0 92 0 184 0 0 69 88 184 0 24 47 27 185 0 24 0 11 62 89 187 0 34 0 1 0 10 0 4 43 187 0 26 0 1 0 33 0 4 43 184 0 33 16 184 0 0 208 184 0 0 47 184 0 34 16 184 0 6 208 184 0 6 47 184 0 10 16 184 0 13 208 184 0 13 47 184 0 12 220 184 0 26 16 184 0 23 208 184 0 23 47 48 49 1 14 1 21 20 22 31 1 14 1 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 39 17 62 1 55 1 58 56 64 63 57 192 30 72 39 51 45 74 53 29 31 54 74 42 51 44 64 23 40 20 45 26 32 52 21 1 221 13 88 66 67 88 13 9 26 34 3 103 104 5 36 61 84 53 52 83 60 36 6 106 103 2 34 22 52 18 22 2 254 168 2 27 18 0 0 1 0 49 255 159 2 24 2 156 0 40 0 66 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 13 62 89 187 0 25 0 1 0 18 0 4 43 187 0 10 0 1 0 11 0 4 43 184 0 37 16 185 0 3 0 1 244 184 0 11 16 184 0 29 208 184 0 10 16 184 0 33 208 48 49 1 46 1 35 34 14 2 15 1 51 21 35 7 14 3 35 34 38 39 55 30 1 51 50 54 63 1 35 53 55 51 55 62 1 51 50 22 23 2 4 14 31 22 25 35 24 14 3 7 142 149 27 6 23 40 62 44 26 42 15 16 14 29 16 52 45 10 24 104 70 41 6 13 80 84 26 48 17 2 74 7 8 22 36 47 25 63 63 237 46 75 54 30 11 7 62 5 8 79 77 219 59 4 56 100 104 12 8 0 3 0 96 255 146 2 34 2 236 0 9 0 16 0 55 0 177 0 184 0 0 69 88 184 0 38 47 27 185 0 38 0 11 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 3 62 89 184 0 26 208 185 0 0 0 1 244 184 0 23 16 185 0 2 0 1 244 184 0 38 16 185 0 9 0 1 244 184 0 3 208 184 0 9 16 184 0 10 208 184 0 0 16 184 0 16 208 184 0 23 16 184 0 20 208 184 0 23 16 184 0 22 220 184 0 27 208 184 0 26 16 184 0 29 208 184 0 38 16 184 0 35 208 184 0 38 16 184 0 37 220 184 0 3 16 185 0 41 0 1 244 184 0 37 16 184 0 42 208 184 0 41 16 184 0 44 208 184 0 3 16 184 0 51 208 184 0 2 16 184 0 52 208 184 0 52 47 48 49 37 22 23 19 46 1 35 42 1 15 1 14 1 21 20 22 23 5 14 1 15 1 35 55 46 1 39 7 35 55 46 1 53 52 54 63 1 51 7 51 50 23 55 51 7 30 1 23 7 46 1 39 3 62 1 55 1 31 23 33 62 10 19 11 5 8 5 39 62 65 36 35 1 38 35 84 54 12 38 12 15 28 14 13 38 15 68 78 118 103 12 38 12 15 20 23 12 38 14 26 45 17 49 11 23 13 60 35 55 26 71 13 3 2 12 2 3 1 8 21 133 100 76 115 33 16 40 48 4 99 99 1 5 4 109 124 35 156 113 138 171 18 103 98 5 103 114 11 32 19 47 11 19 8 254 4 5 35 30 0 0 0 1 0 78 0 0 2 19 2 138 0 52 0 135 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 11 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 3 62 89 187 0 14 0 1 0 17 0 4 43 184 0 1 16 185 0 0 0 1 244 184 0 3 208 184 0 14 16 185 0 11 0 1 244 185 0 7 0 1 244 184 0 11 16 184 0 9 208 184 0 17 16 184 0 16 208 184 0 25 16 185 0 32 0 1 244 184 0 17 16 184 0 39 208 184 0 14 16 184 0 40 208 184 0 11 16 184 0 45 208 184 0 7 16 184 0 46 208 48 49 37 21 33 53 62 1 61 1 35 53 55 51 46 1 39 35 53 55 46 1 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 23 51 21 35 30 1 23 51 21 35 21 20 6 7 21 2 19 254 59 63 61 124 87 30 4 11 5 97 80 6 8 30 55 77 48 62 85 29 48 23 59 42 66 69 7 6 206 190 5 9 3 173 167 37 38 71 71 50 28 95 57 5 44 5 15 29 15 45 4 18 37 19 42 68 48 26 43 32 47 23 30 65 52 19 35 18 49 14 30 15 49 6 53 70 31 4 0 0 0 5 0 47 0 0 2 39 2 126 0 5 0 9 0 15 0 19 0 47 0 203 0 184 0 0 69 88 184 0 39 47 27 185 0 39 0 11 62 89 184 0 0 69 88 184 0 43 47 27 185 0 43 0 11 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 3 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 39 16 184 0 16 220 185 0 13 0 1 244 184 0 2 208 184 0 13 16 184 0 15 208 184 0 4 208 184 0 15 16 185 0 28 0 1 244 184 0 7 208 184 0 26 16 185 0 8 0 1 244 184 0 39 16 185 0 19 0 1 244 184 0 2 16 184 0 20 208 184 0 4 16 184 0 21 208 184 0 7 16 184 0 24 208 184 0 28 16 184 0 31 208 184 0 15 16 184 0 34 208 184 0 13 16 184 0 35 208 184 0 16 16 184 0 38 208 184 0 16 16 184 0 41 208 184 0 45 208 48 49 1 53 35 31 1 51 23 35 23 51 47 1 53 35 23 21 39 51 39 35 5 21 51 21 35 21 35 39 35 21 35 53 35 53 55 53 35 53 55 53 51 23 51 53 51 21 51 21 1 158 90 19 5 68 3 55 62 4 149 24 72 1 4 59 67 4 1 53 72 72 84 97 112 65 74 74 74 74 84 102 107 65 72 1 61 26 46 14 43 166 209 59 1 22 38 102 178 220 60 43 240 240 240 240 38 5 60 37 5 253 253 253 253 42 0 0 3 0 43 0 0 2 42 2 126 0 5 0 11 0 33 0 99 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 11 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 3 62 89 187 0 4 0 1 0 7 0 4 43 187 0 19 0 1 0 5 0 4 43 184 0 27 16 185 0 11 0 1 244 184 0 4 16 184 0 13 208 184 0 4 16 184 0 23 208 184 0 7 16 184 0 24 208 184 0 7 16 184 0 32 208 48 49 1 50 54 55 35 21 17 21 51 46 1 35 5 35 14 3 43 1 21 35 17 35 53 55 53 51 50 30 2 23 51 1 0 69 78 8 214 214 8 78 69 1 42 64 5 37 60 77 45 69 79 75 75 148 45 78 59 37 5 64 1 46 58 57 115 1 23 108 59 49 164 44 65 42 21 245 1 161 51 5 165 18 39 63 45 0 0 0 3 0 109 0 0 2 34 2 153 0 3 0 18 0 47 0 86 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 187 0 36 0 1 0 7 0 4 43 184 0 2 16 185 0 0 0 1 244 185 0 28 0 1 244 185 0 15 0 1 244 184 0 36 16 184 0 21 220 184 0 41 208 184 0 21 16 185 0 47 0 1 244 184 0 43 208 184 0 47 16 184 0 46 220 48 49 55 33 21 33 1 46 1 35 34 14 2 21 20 22 51 50 54 55 19 21 7 17 35 39 35 14 1 35 34 38 53 52 62 2 51 50 22 23 39 53 35 53 51 53 51 21 121 1 122 254 134 1 20 27 45 30 23 41 31 18 57 52 28 52 26 149 78 58 6 4 23 62 39 76 91 29 49 63 33 39 53 26 4 155 155 71 49 49 1 121 22 19 18 32 43 25 62 69 25 28 1 120 44 5 254 83 43 23 30 97 92 41 66 47 25 24 22 83 34 49 67 67 0 0 0 4 0 43 0 0 2 42 2 126 0 8 0 13 0 19 0 52 0 141 0 184 0 0 69 88 184 0 47 47 27 185 0 47 0 11 62 89 184 0 0 69 88 184 0 37 47 27 185 0 37 0 3 62 89 187 0 9 0 1 0 35 0 4 43 184 0 47 16 185 0 14 0 1 244 184 0 16 208 185 0 6 0 1 244 184 0 0 220 185 0 11 0 1 244 184 0 6 16 184 0 21 208 184 0 0 16 184 0 27 208 184 0 11 16 184 0 29 208 184 0 11 16 184 0 39 208 184 0 0 16 184 0 42 208 184 0 6 16 184 0 43 208 184 0 16 16 184 0 46 208 184 0 16 16 184 0 51 208 48 49 1 62 1 53 52 38 39 35 21 23 50 55 35 21 17 21 51 46 1 35 5 35 30 1 21 28 1 7 51 21 35 14 3 43 1 21 35 17 35 53 55 53 35 53 55 53 51 50 22 23 51 1 155 1 1 1 1 214 59 112 33 204 201 17 71 54 1 42 65 1 1 1 64 72 10 41 56 70 39 69 79 75 75 75 75 148 78 115 21 74 1 162 6 13 7 9 16 8 59 116 75 75 1 23 63 34 29 104 8 16 9 7 13 6 41 34 49 33 16 245 1 121 36 5 59 37 4 120 55 65 0 0 1 0 84 255 146 2 14 2 236 0 42 0 117 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 11 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 11 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 3 62 89 187 0 42 0 1 0 39 0 4 43 184 0 2 16 184 0 3 220 184 0 18 16 184 0 17 220 184 0 18 16 185 0 25 0 1 244 184 0 5 16 185 0 35 0 1 244 48 49 37 6 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 53 35 53 51 2 14 67 88 60 50 84 60 33 32 59 84 52 60 46 79 27 49 26 59 38 44 67 47 24 24 45 65 42 32 58 16 116 191 61 62 9 100 100 6 50 84 116 72 70 115 85 51 8 101 99 4 44 31 46 27 33 37 68 98 60 62 98 68 37 22 15 169 69 0 0 0 2 0 96 255 146 2 34 2 233 0 6 0 37 0 123 0 184 0 0 69 88 184 0 23 47 27 185 0 23 0 11 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 11 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 184 0 23 16 185 0 0 0 1 244 184 0 13 16 185 0 6 0 1 244 184 0 13 16 184 0 12 220 184 0 26 16 184 0 25 220 184 0 0 16 184 0 33 208 184 0 6 16 184 0 34 208 48 49 1 14 1 21 20 22 23 55 14 1 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 39 17 62 1 55 1 74 72 77 77 72 216 33 79 51 53 52 86 62 34 33 61 87 53 53 47 79 28 49 23 50 32 34 54 26 2 69 14 138 108 112 140 13 25 38 48 5 100 99 5 49 84 118 73 71 116 84 52 7 97 96 3 43 31 47 23 31 4 253 241 5 35 29 0 0 0 1 0 108 0 0 2 12 2 126 0 29 0 112 0 184 0 0 69 88 184 0 28 47 27 185 0 28 0 11 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 11 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 3 62 89 184 0 29 16 185 0 1 0 1 244 184 0 26 208 184 0 23 208 184 0 4 208 184 0 23 16 185 0 19 0 1 244 184 0 7 208 184 0 19 16 184 0 16 208 185 0 13 0 1 244 184 0 10 208 184 0 10 47 48 49 1 35 30 1 23 51 21 35 14 1 7 19 35 39 35 53 51 50 54 55 33 53 55 51 46 1 43 1 53 33 2 12 157 33 43 8 73 71 5 93 73 208 94 199 89 79 83 96 5 254 249 76 184 12 93 76 79 1 160 2 77 15 53 35 49 76 88 14 254 253 252 67 58 60 44 5 46 38 68 0 0 0 0 1 0 56 255 242 2 24 2 126 0 36 0 93 0 184 0 0 69 88 184 0 26 47 27 185 0 26 0 11 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 3 62 89 185 0 0 0 1 244 186 0 32 0 17 0 26 17 18 57 184 0 32 16 184 0 35 208 184 0 18 208 184 0 32 16 184 0 21 208 184 0 31 208 184 0 22 208 184 0 31 16 184 0 28 208 184 0 25 208 48 49 55 62 3 53 52 38 39 55 30 1 21 20 14 2 39 17 7 53 55 53 7 53 55 53 51 21 55 21 7 21 55 21 7 21 244 37 78 65 41 1 5 69 5 3 58 102 137 79 104 104 104 104 84 182 182 182 182 66 1 22 41 61 39 8 21 14 18 17 27 13 63 94 62 29 2 1 17 48 53 48 72 48 52 49 199 158 86 53 86 72 86 52 87 236 0 0 0 0 2 0 28 0 32 2 60 2 112 0 3 0 7 0 11 0 186 0 7 0 3 0 3 43 48 49 63 1 23 7 1 7 39 55 28 183 33 167 1 239 183 33 167 77 188 30 203 2 35 188 30 203 0 0 0 255 255 0 28 0 32 2 60 2 112 2 6 2 136 0 0 255 255 0 28 0 32 2 60 2 112 2 6 2 136 0 0 255 255 0 28 255 244 2 61 2 138 2 39 2 56 255 123 1 77 0 38 2 136 0 0 0 7 2 56 0 134 0 0 0 7 0 48 255 244 2 63 2 138 0 11 0 23 0 27 0 39 0 51 0 63 0 75 0 118 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 11 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 3 62 89 184 0 0 69 88 184 0 52 47 27 185 0 52 0 3 62 89 187 0 34 0 1 0 46 0 4 43 187 0 12 0 1 0 0 0 4 43 184 0 6 16 185 0 18 0 1 244 184 0 28 16 185 0 40 0 1 244 184 0 34 16 184 0 58 208 184 0 40 16 184 0 64 208 184 0 46 16 184 0 70 208 48 49 19 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 37 5 39 37 1 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 5 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 165 52 65 65 52 52 65 65 52 27 35 35 27 27 36 36 1 181 254 56 14 1 190 254 126 52 65 65 52 52 65 65 52 27 35 35 27 27 36 36 1 42 52 65 65 52 52 65 65 52 27 35 35 27 27 36 36 1 133 69 63 61 68 68 61 63 69 42 43 47 45 42 42 45 47 43 21 174 31 201 253 246 69 63 61 68 68 61 63 69 42 43 47 45 41 41 45 47 43 42 69 63 61 68 68 61 63 69 42 43 47 45 41 41 45 47 43 0 0 0 255 255 0 28 0 0 2 63 2 126 2 39 2 57 255 123 1 77 0 38 2 136 0 0 0 7 2 60 0 134 0 0 255 255 0 28 0 0 2 60 2 126 2 39 2 57 255 123 1 77 0 38 2 136 0 0 0 7 2 58 0 135 0 0 255 255 0 39 0 0 2 85 2 138 2 39 2 59 255 123 1 77 0 38 2 136 25 0 0 7 2 60 0 134 0 0 255 255 0 28 255 244 2 60 2 126 2 39 2 57 255 123 1 77 0 38 2 136 0 0 0 7 2 59 0 135 0 0 255 255 0 28 255 244 2 60 2 138 2 39 2 58 255 123 1 77 0 38 2 136 0 0 0 7 2 59 0 135 0 0 255 255 0 28 255 244 2 60 2 126 2 39 2 57 255 123 1 77 0 38 2 136 0 0 0 7 2 64 0 135 0 0 255 255 0 28 255 244 2 60 2 138 2 39 2 59 255 123 1 77 0 38 2 136 0 0 0 7 2 64 0 135 0 0 255 255 0 28 255 244 2 60 2 126 2 39 2 61 255 123 1 77 0 38 2 136 0 0 0 7 2 64 0 135 0 0 255 255 0 28 255 244 2 60 2 126 2 39 2 63 255 123 1 77 0 38 2 136 0 0 0 7 2 64 0 135 0 0 0 1 0 85 0 104 2 3 2 44 0 11 0 29 0 187 0 2 0 1 0 1 0 4 43 184 0 2 16 184 0 6 208 184 0 1 16 184 0 9 208 48 49 1 35 53 51 53 51 21 51 21 35 21 35 1 11 182 182 66 182 182 66 1 43 62 195 195 62 195 0 0 0 1 0 85 1 43 2 3 1 105 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 85 1 174 254 82 1 105 62 0 0 1 0 102 0 126 1 242 2 21 0 11 0 41 0 186 0 5 0 9 0 3 43 186 0 10 0 9 0 5 17 18 57 184 0 10 16 184 0 1 208 184 0 10 16 184 0 7 208 184 0 4 208 48 49 63 1 39 55 23 55 23 7 23 7 39 7 102 154 154 44 154 154 44 154 154 44 154 154 171 159 158 45 159 159 45 158 159 45 160 160 0 0 3 0 85 0 96 2 3 2 51 0 11 0 23 0 27 0 37 0 187 0 25 0 1 0 26 0 4 43 184 0 25 16 184 0 0 220 184 0 6 220 184 0 26 16 184 0 15 220 184 0 21 220 48 49 1 34 38 53 52 54 51 50 22 21 20 6 3 52 54 51 50 22 21 20 6 35 34 38 39 33 21 33 1 44 23 31 31 23 23 31 31 77 31 23 23 31 31 23 23 31 161 1 174 254 82 1 200 30 24 23 30 30 23 24 30 254 206 23 30 30 23 24 30 30 235 62 0 255 255 0 216 1 7 1 122 1 176 2 7 1 227 255 253 1 19 0 0 255 255 0 85 0 193 2 3 1 212 2 38 2 151 0 107 0 6 2 151 0 150 0 0 0 1 0 120 0 48 1 237 2 104 0 7 0 59 0 187 0 0 0 1 0 7 0 4 43 184 0 0 16 184 0 2 208 184 0 2 47 185 0 1 0 1 244 186 0 4 0 0 0 7 17 18 57 184 0 7 16 184 0 5 208 184 0 5 47 185 0 6 0 1 244 48 49 19 37 21 5 21 5 21 37 120 1 117 254 211 1 45 254 139 1 107 253 79 203 4 203 79 253 0 0 1 0 107 0 48 1 224 2 104 0 7 0 59 0 187 0 7 0 1 0 0 0 4 43 184 0 0 16 184 0 2 208 184 0 2 47 185 0 1 0 1 244 186 0 4 0 7 0 0 17 18 57 184 0 7 16 184 0 5 208 184 0 5 47 185 0 6 0 1 244 48 49 1 5 53 37 53 37 53 5 1 224 254 139 1 45 254 211 1 117 1 45 253 79 203 4 203 79 253 0 2 0 85 0 0 2 3 2 21 0 3 0 13 0 78 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 187 0 4 0 1 0 13 0 4 43 184 0 2 16 185 0 0 0 1 244 186 0 9 0 4 0 13 17 18 57 184 0 9 16 184 0 5 208 185 0 6 0 1 244 184 0 9 16 184 0 12 208 185 0 11 0 1 244 48 49 55 33 21 33 17 37 21 15 1 21 31 1 21 37 85 1 174 254 82 1 174 210 135 135 210 254 82 62 62 1 124 153 71 73 44 4 44 73 71 153 0 0 0 2 0 85 0 0 2 3 2 21 0 3 0 13 0 78 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 3 62 89 187 0 13 0 1 0 4 0 4 43 184 0 2 16 185 0 0 0 1 244 186 0 8 0 13 0 4 17 18 57 184 0 8 16 184 0 5 208 185 0 6 0 1 244 184 0 8 16 184 0 12 208 185 0 11 0 1 244 48 49 55 33 21 33 1 5 53 63 1 53 47 1 53 5 85 1 174 254 82 1 174 254 82 210 135 135 210 1 174 62 62 1 50 153 71 73 44 4 44 73 71 153 0 2 0 85 0 0 2 3 2 44 0 11 0 15 0 68 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 3 62 89 187 0 3 0 1 0 0 0 4 43 184 0 3 16 184 0 4 220 184 0 3 16 184 0 6 208 184 0 0 16 184 0 8 208 184 0 14 16 185 0 12 0 1 244 184 0 11 220 48 49 1 35 53 51 53 51 21 51 21 35 21 35 7 33 21 33 1 11 182 182 66 182 182 66 182 1 174 254 82 1 48 62 190 190 62 177 65 62 0 0 0 1 0 111 1 28 1 233 2 158 0 9 0 38 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 13 62 89 184 0 2 220 186 0 5 0 0 0 2 17 18 57 184 0 9 208 48 49 1 51 19 35 47 1 35 15 1 35 1 8 72 153 72 66 49 4 49 66 72 2 158 254 126 176 133 133 176 0 0 0 0 1 0 85 0 65 2 3 2 83 0 19 0 71 0 187 0 7 0 1 0 13 0 4 43 184 0 13 16 184 0 14 220 185 0 17 0 1 244 184 0 0 208 184 0 14 16 184 0 3 208 184 0 13 16 184 0 4 208 184 0 7 16 184 0 8 220 184 0 7 16 184 0 10 208 184 0 0 16 184 0 19 220 48 49 55 35 53 51 55 35 53 33 55 51 7 51 21 35 7 51 21 33 7 35 188 103 139 91 230 1 10 76 61 76 103 139 91 230 254 246 76 61 192 62 152 62 127 127 62 152 62 127 0 0 0 0 1 0 76 0 255 2 12 1 149 0 25 0 39 0 187 0 3 0 1 0 22 0 4 43 187 0 17 0 1 0 8 0 4 43 184 0 3 16 184 0 13 208 184 0 17 16 184 0 25 208 48 49 19 62 1 51 50 30 2 51 50 62 2 55 23 14 1 35 34 46 2 35 34 6 7 76 26 72 38 30 47 41 39 21 12 21 21 18 9 53 26 72 38 30 47 41 39 21 23 41 17 1 22 70 55 26 32 26 7 19 34 26 24 70 54 26 32 26 34 52 0 0 0 255 255 0 76 0 149 2 12 2 0 2 38 2 163 0 107 0 6 2 163 0 150 0 0 0 1 0 85 0 104 2 3 1 105 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 19 33 17 35 53 33 85 1 174 66 254 148 1 105 254 255 195 0 1 0 39 255 244 2 49 1 230 0 35 0 82 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 7 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 3 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 184 0 16 16 185 0 13 0 1 244 184 0 5 208 184 0 18 208 184 0 33 16 185 0 27 0 1 244 48 49 37 52 62 2 55 35 20 6 7 39 62 1 53 35 53 55 33 21 35 14 2 20 21 20 22 51 50 55 23 14 1 35 34 38 1 134 1 2 2 1 185 7 7 83 12 8 95 70 1 196 86 2 3 2 22 23 7 20 11 11 25 19 57 49 110 19 71 86 92 40 103 213 107 5 108 211 99 63 5 68 41 95 89 71 18 26 22 6 63 5 6 62 0 3 255 252 0 150 2 92 1 251 0 37 0 49 0 60 0 90 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 7 62 89 187 0 41 0 1 0 29 0 4 43 187 0 50 0 1 0 0 0 4 43 187 0 10 0 1 0 55 0 4 43 186 0 32 0 29 0 19 17 18 57 184 0 32 16 184 0 38 208 184 0 15 208 184 0 19 16 185 0 47 0 1 244 184 0 32 16 184 0 52 208 48 49 55 34 46 2 53 52 62 2 51 50 30 2 23 51 62 1 51 50 30 2 21 20 14 2 35 34 38 39 35 14 3 55 30 1 51 50 54 53 52 38 35 34 6 7 50 55 46 1 35 34 6 21 20 22 130 27 49 37 21 23 39 53 31 25 41 35 28 11 4 31 79 54 33 57 41 23 23 41 57 34 55 79 38 4 11 28 35 43 157 33 62 38 45 48 52 48 35 61 201 64 40 25 52 29 36 43 47 170 24 42 56 32 39 62 43 23 16 28 36 21 53 64 25 46 63 37 42 69 48 27 57 62 18 35 29 17 170 62 49 61 43 48 63 49 162 88 49 43 45 41 41 53 0 1 0 77 255 69 2 46 1 230 0 40 0 115 0 184 0 40 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 7 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 7 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 3 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 184 0 31 16 185 0 5 0 1 244 186 0 28 0 11 0 31 17 18 57 184 0 28 16 185 0 10 0 1 244 184 0 24 16 185 0 18 0 1 244 48 49 19 51 17 20 22 51 50 62 2 55 17 51 14 1 21 20 22 51 58 1 55 23 6 35 34 38 39 35 14 1 35 34 38 39 28 1 30 1 23 35 77 83 52 57 19 38 38 39 20 83 2 3 16 11 4 7 7 12 19 29 38 36 5 3 32 81 47 35 59 20 2 2 2 83 1 230 254 221 67 69 9 24 43 35 1 60 99 207 88 20 16 2 62 8 53 58 56 53 21 32 38 59 52 51 30 0 0 0 2 0 76 255 244 2 11 2 160 0 15 0 49 0 87 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 13 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 3 62 89 187 0 37 0 1 0 6 0 4 43 184 0 27 16 185 0 0 0 1 244 186 0 40 0 27 0 37 17 18 57 184 0 40 16 185 0 3 0 1 244 184 0 19 16 185 0 46 0 1 244 48 49 37 50 54 55 46 1 35 34 14 2 21 20 30 2 3 62 1 51 50 22 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 54 52 53 52 38 35 34 6 7 1 10 65 89 16 33 70 33 37 55 36 18 18 31 40 90 32 79 47 97 115 38 70 98 59 36 66 50 30 30 56 80 51 41 79 29 1 76 64 32 56 24 56 108 100 42 34 24 41 57 33 30 47 34 18 2 37 32 35 152 155 84 139 99 55 27 49 71 45 49 83 60 34 38 34 8 17 8 125 112 27 24 0 0 0 1 0 186 255 98 1 185 3 21 0 38 0 23 0 187 0 2 0 1 0 35 0 4 43 187 0 15 0 1 0 22 0 4 43 48 49 23 22 51 50 54 53 52 46 2 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 21 20 14 2 35 34 39 55 195 12 23 42 25 13 16 13 11 31 54 43 15 26 6 10 7 17 11 41 24 13 15 13 11 31 54 43 31 16 9 89 4 82 78 55 126 130 127 56 48 84 61 35 4 2 62 2 2 85 77 54 126 130 127 55 49 84 61 35 7 62 0 0 0 1 0 62 255 161 2 71 3 52 0 15 0 13 0 187 0 4 0 1 0 11 0 4 43 48 49 37 30 1 23 51 62 1 55 19 51 3 35 3 7 39 55 1 56 5 8 4 4 3 5 4 178 60 218 62 150 71 20 134 59 16 32 16 16 32 16 2 249 252 109 1 172 32 45 59 0 2 0 36 0 0 2 53 2 144 0 5 0 11 0 69 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 185 0 6 0 1 244 184 0 11 208 184 0 0 208 184 0 6 16 184 0 3 208 184 0 1 16 185 0 8 0 1 244 48 49 55 19 51 19 21 33 37 3 39 35 7 3 36 217 95 217 253 239 1 181 103 68 4 69 102 50 2 94 253 162 50 71 1 44 210 210 254 212 0 0 1 0 29 0 0 2 59 2 156 0 49 0 96 0 184 0 0 69 88 184 0 12 47 27 185 0 12 0 13 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 3 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 3 62 89 184 0 48 16 185 0 1 0 1 244 184 0 26 16 185 0 23 0 1 244 184 0 27 208 184 0 12 16 185 0 37 0 1 244 184 0 1 16 184 0 47 208 48 49 55 51 53 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 21 51 21 35 53 62 3 53 52 46 2 35 34 14 2 21 20 30 2 23 21 35 29 123 20 40 31 19 36 67 96 59 59 96 67 36 19 31 40 20 123 210 24 41 29 17 23 44 64 41 41 64 44 23 17 29 41 24 210 68 4 21 55 70 83 50 69 116 85 47 47 85 116 69 50 83 70 55 21 4 68 61 22 56 70 85 52 53 91 67 38 38 67 91 53 52 85 70 56 22 61 0 0 0 0 1 0 70 255 136 2 37 2 126 0 13 0 74 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 11 62 89 187 0 10 0 1 0 11 0 4 43 184 0 2 16 185 0 4 0 1 244 186 0 7 0 10 0 4 17 18 57 184 0 7 16 184 0 0 208 184 0 4 16 184 0 1 208 184 0 10 16 184 0 13 208 48 49 1 3 53 33 21 33 21 19 3 21 33 21 33 53 1 52 227 1 184 254 175 212 222 1 119 254 33 1 3 1 70 53 71 4 254 209 254 207 4 71 53 0 0 0 0 1 0 52 255 136 2 36 2 126 0 7 0 34 0 184 0 6 47 184 0 3 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 11 62 89 185 0 4 0 1 244 48 49 19 33 17 35 17 33 17 35 52 1 240 85 254 184 83 2 126 253 10 2 173 253 83 0 0 2 0 117 255 244 1 241 2 208 0 9 0 46 0 89 0 184 0 0 69 88 184 0 31 47 27 185 0 31 0 15 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 3 62 89 186 0 0 0 13 0 31 17 18 57 184 0 31 16 185 0 6 0 1 244 184 0 0 16 185 0 37 0 1 244 184 0 18 208 184 0 0 16 184 0 25 208 184 0 13 16 185 0 43 0 1 244 48 49 1 62 1 53 52 38 35 34 6 21 19 14 1 35 34 46 2 39 14 1 7 39 62 1 55 17 52 62 2 51 50 22 21 20 6 7 21 20 30 2 51 50 54 55 1 27 59 66 33 25 27 40 214 25 67 44 31 55 44 27 2 12 26 14 33 23 42 20 22 39 54 31 57 73 103 92 14 25 33 18 30 43 18 1 51 59 128 71 50 42 67 73 254 46 23 40 22 42 64 42 9 17 9 52 14 31 15 1 12 58 82 53 24 80 75 94 173 78 34 35 49 30 14 27 17 0 0 0 2 0 26 255 244 2 62 2 148 0 32 0 50 0 67 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 13 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 3 62 89 187 0 50 0 1 0 27 0 4 43 184 0 10 16 185 0 3 0 1 244 184 0 20 16 185 0 41 0 1 244 48 49 55 30 1 51 50 54 55 51 14 1 35 34 46 2 53 52 62 2 51 50 30 2 29 1 33 34 29 1 20 22 1 50 61 1 52 39 46 1 35 34 6 7 14 1 29 1 20 51 164 26 71 41 53 94 35 38 41 113 68 57 99 75 43 43 75 99 57 57 99 75 43 254 98 4 5 1 23 6 10 26 70 38 41 71 26 3 5 4 68 29 31 61 51 60 72 53 91 122 70 70 122 91 53 53 91 122 70 8 4 224 6 9 1 5 6 224 12 10 26 28 31 27 5 12 5 220 6 0 0 0 1 0 17 255 241 2 57 2 7 0 9 0 13 0 187 0 4 0 1 0 5 0 4 43 48 49 55 1 23 7 33 21 33 23 7 1 17 1 16 43 201 1 182 254 74 201 43 254 240 254 1 9 46 187 68 187 46 1 9 0 1 0 33 255 231 2 55 2 15 0 9 0 21 0 186 0 0 0 4 0 3 43 186 0 6 0 4 0 0 17 18 57 48 49 9 1 7 39 17 35 17 7 39 1 1 46 1 9 46 187 68 187 46 1 9 2 15 254 240 42 201 254 73 1 183 201 42 1 16 0 0 0 1 0 29 255 241 2 70 2 7 0 9 0 13 0 187 0 6 0 1 0 3 0 4 43 48 49 37 1 39 55 33 53 33 39 55 1 2 70 254 239 42 201 254 73 1 183 201 42 1 17 250 254 247 46 187 68 187 46 254 247 0 0 0 0 1 0 33 255 231 2 55 2 15 0 9 0 21 0 186 0 4 0 0 0 3 43 186 0 6 0 0 0 4 17 18 57 48 49 5 1 55 23 17 51 17 55 23 1 1 42 254 247 46 187 68 187 46 254 247 25 1 17 42 201 1 182 254 74 201 42 254 239 0 0 0 0 1 0 201 0 162 1 143 1 109 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 21 35 201 198 198 1 109 203 0 0 1 0 159 0 123 1 185 1 147 0 3 0 11 0 186 0 1 0 3 0 3 43 48 49 19 55 23 7 159 142 140 140 1 7 140 140 140 0 0 0 3 0 119 0 79 1 225 1 191 0 11 0 31 0 51 0 39 0 187 0 32 0 1 0 12 0 4 43 187 0 22 0 1 0 42 0 4 43 184 0 32 16 184 0 0 208 184 0 42 16 184 0 6 208 48 49 37 34 38 53 52 54 51 50 22 21 20 6 7 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 44 23 34 34 23 23 34 34 23 37 66 49 29 29 49 66 37 37 66 49 29 29 49 66 37 25 46 36 21 21 36 46 25 25 46 36 21 21 36 46 202 34 27 27 33 33 27 27 34 123 26 48 68 42 42 68 48 26 26 48 68 42 42 68 48 26 49 18 35 50 32 32 51 35 18 18 35 51 32 32 50 35 18 0 0 0 0 2 0 166 0 122 1 178 1 139 0 3 0 9 0 23 0 187 0 0 0 1 0 8 0 4 43 187 0 6 0 1 0 1 0 4 43 48 49 37 53 35 21 39 55 51 21 7 35 1 106 158 38 59 209 49 219 158 165 165 188 49 215 58 0 1 0 38 0 38 2 50 2 22 0 5 0 11 0 186 0 2 0 4 0 3 43 48 49 55 1 51 1 21 33 38 1 5 4 1 3 253 244 40 1 238 254 18 2 0 0 0 0 2 0 38 0 38 2 50 2 22 0 2 0 8 0 13 0 187 0 0 0 1 0 7 0 4 43 48 49 37 11 1 7 1 51 1 21 33 1 204 159 160 103 1 5 4 1 3 253 244 96 1 57 254 199 56 1 238 254 18 2 0 0 0 0 1 0 72 0 19 2 55 2 32 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 19 51 1 21 1 35 72 2 1 237 254 19 2 2 32 254 252 4 254 251 0 0 0 0 2 0 72 0 19 2 55 2 32 0 2 0 8 0 41 0 186 0 4 0 7 0 3 43 186 0 0 0 7 0 4 17 18 57 186 0 1 0 7 0 4 17 18 57 186 0 2 0 7 0 4 17 18 57 48 49 1 37 17 3 51 1 21 1 35 1 184 254 203 59 2 1 237 254 19 2 1 26 159 254 193 1 166 254 252 4 254 251 0 0 0 0 1 0 38 0 30 2 50 2 13 0 5 0 11 0 186 0 2 0 4 0 3 43 48 49 19 53 33 21 1 35 38 2 12 254 253 4 2 11 2 2 254 19 0 0 2 0 38 0 29 2 50 2 13 0 2 0 8 0 23 0 187 0 3 0 1 0 0 0 4 43 186 0 5 0 0 0 3 17 18 57 48 49 27 2 37 33 21 1 35 1 141 160 159 254 90 2 12 254 253 4 254 251 1 211 254 198 1 58 58 2 254 18 1 238 0 0 1 0 33 0 19 2 16 2 32 0 5 0 11 0 186 0 2 0 3 0 3 43 48 49 19 1 51 17 35 1 33 1 237 2 2 254 19 1 28 1 4 253 243 1 5 0 0 0 2 0 33 0 19 2 16 2 32 0 2 0 8 0 51 0 186 0 8 0 3 0 3 43 186 0 0 0 3 0 8 17 18 57 186 0 1 0 3 0 8 17 18 57 186 0 2 0 3 0 8 17 18 57 186 0 6 0 3 0 8 17 18 57 48 49 37 17 5 1 35 1 53 1 51 1 213 254 203 1 112 2 254 19 1 237 2 122 1 63 159 254 249 1 5 4 1 4 0 0 2 255 231 255 246 2 113 2 159 0 3 0 9 0 40 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 3 62 89 187 0 6 0 1 0 1 0 4 43 184 0 8 16 185 0 0 0 1 244 48 49 37 17 33 17 3 55 33 17 7 33 2 38 253 235 42 61 2 77 52 253 170 33 2 52 253 204 2 75 51 253 148 61 0 2 255 231 255 246 2 194 3 27 0 18 0 30 0 88 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 13 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 13 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 3 62 89 187 0 12 0 1 0 3 0 4 43 184 0 22 16 185 0 15 0 1 244 184 0 0 208 184 0 24 16 185 0 17 0 1 244 48 49 1 14 1 15 1 46 1 39 55 30 1 23 51 62 1 55 33 17 33 19 14 1 7 17 7 33 17 55 33 54 55 2 38 68 111 35 86 28 69 43 56 37 61 20 4 32 105 66 254 38 2 21 156 20 41 20 52 253 170 61 1 252 51 57 2 53 95 227 129 10 77 136 64 38 58 126 63 110 218 97 253 204 2 200 20 41 23 253 158 61 2 118 51 67 57 0 0 1 255 250 255 236 2 98 2 172 0 19 0 0 23 46 1 39 55 30 1 23 51 62 3 55 23 14 3 7 145 30 73 48 56 42 67 23 4 27 78 96 110 59 54 59 112 98 82 28 20 83 143 69 38 63 135 67 89 178 165 146 58 50 55 139 164 185 101 0 0 0 0 1 0 77 255 232 2 17 2 182 0 40 0 23 0 184 0 9 47 186 0 5 0 36 0 3 43 184 0 9 16 184 0 30 208 48 49 55 52 62 2 51 50 22 23 17 51 30 3 23 30 3 21 20 6 7 39 62 1 53 52 38 39 17 20 14 2 35 34 46 2 77 23 42 58 35 20 33 8 49 4 9 15 24 19 34 43 26 10 20 12 35 8 5 64 60 28 48 63 34 20 36 28 17 52 23 42 33 19 7 5 2 25 10 15 15 19 13 24 46 47 51 28 39 69 23 13 24 41 27 48 83 19 254 105 41 63 42 21 10 19 28 0 0 0 2 0 98 255 246 1 246 2 158 0 5 0 15 0 53 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 13 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 185 0 6 0 1 244 184 0 1 16 185 0 10 0 1 244 48 49 27 1 51 19 3 35 63 2 47 1 35 15 1 31 1 98 164 76 164 164 76 40 63 64 64 63 4 63 64 64 63 1 74 1 84 254 172 254 172 69 133 138 137 134 134 137 138 133 0 0 0 0 1 1 0 1 178 1 104 2 178 0 4 0 11 0 186 0 0 0 4 0 3 43 48 49 1 51 15 1 35 1 23 81 16 34 54 2 178 100 156 255 255 0 169 1 178 1 192 2 178 2 38 2 199 169 0 0 6 2 199 88 0 0 0 255 255 0 209 1 94 1 124 2 187 2 6 1 238 0 0 255 255 0 217 1 94 1 132 2 187 2 6 1 239 0 0 0 1 0 245 1 244 1 130 2 217 0 13 0 23 0 187 0 0 0 1 0 13 0 4 43 187 0 7 0 1 0 6 0 4 43 48 49 19 50 54 53 52 38 35 53 54 22 21 20 6 39 245 51 44 44 51 69 72 72 69 2 26 42 35 34 42 36 2 62 52 53 62 2 0 0 0 0 1 0 219 1 244 1 104 2 217 0 13 0 23 0 187 0 6 0 1 0 7 0 4 43 187 0 13 0 1 0 0 0 4 43 48 49 1 34 6 21 20 22 51 21 6 38 53 52 54 23 1 104 51 43 43 51 69 72 72 69 2 179 42 34 35 42 36 2 62 53 52 62 2 0 0 255 255 0 185 2 61 1 109 2 209 2 6 2 223 0 0 255 255 0 235 2 61 1 159 2 209 2 6 2 225 0 0 255 255 0 168 2 61 1 176 2 209 2 6 2 227 0 0 255 255 0 168 2 61 1 176 2 209 2 6 2 245 0 0 0 1 0 249 1 141 1 95 2 204 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 15 62 89 184 0 2 220 48 49 19 51 3 35 249 102 23 56 2 204 254 193 0 0 255 255 0 177 2 89 1 167 2 146 2 6 2 231 0 0 255 255 0 235 2 61 1 159 2 209 2 6 2 225 0 0 255 255 0 185 2 61 1 109 2 209 2 6 2 223 0 0 0 1 0 249 255 2 1 95 0 66 0 3 0 11 0 186 0 3 0 0 0 3 43 48 49 5 35 19 51 1 95 102 23 56 254 1 64 0 0 0 255 255 0 158 2 67 1 186 2 176 2 6 2 229 0 0 255 255 0 150 2 76 1 194 2 186 2 6 2 237 0 0 255 255 0 177 2 89 1 167 2 146 2 6 2 231 0 0 255 255 0 170 2 63 1 174 2 197 2 6 2 233 0 0 255 255 0 207 2 30 1 137 2 215 2 6 2 241 0 0 255 255 0 202 2 59 1 236 2 202 2 6 2 243 0 0 255 255 0 234 2 74 1 110 2 201 2 6 2 235 0 0 255 255 0 221 255 43 1 118 0 3 2 6 2 255 6 0 255 255 0 234 255 50 1 147 0 3 2 6 3 1 0 0 0 1 0 185 2 61 1 109 2 209 0 3 0 11 0 186 0 1 0 3 0 3 43 48 49 19 51 23 35 185 90 90 63 2 209 148 0 1 0 169 2 194 1 95 3 50 0 3 0 11 0 186 0 1 0 3 0 3 43 48 49 19 51 23 35 169 94 88 69 3 50 112 0 1 0 235 2 61 1 159 2 209 0 3 0 11 0 186 0 2 0 0 0 3 43 48 49 1 35 55 51 1 42 63 90 90 2 61 148 0 0 0 0 1 0 249 2 194 1 175 3 50 0 3 0 11 0 186 0 2 0 0 0 3 43 48 49 1 35 55 51 1 62 69 88 94 2 194 112 0 0 0 0 1 0 168 2 61 1 176 2 209 0 7 0 25 0 187 0 1 0 1 0 4 0 4 43 184 0 4 16 184 0 3 220 184 0 6 208 48 49 1 51 23 35 39 35 7 35 1 9 70 97 63 67 4 67 63 2 209 148 99 99 0 0 0 0 1 0 164 2 194 1 180 3 50 0 7 0 25 0 187 0 2 0 1 0 5 0 4 43 184 0 5 16 184 0 4 220 184 0 7 208 48 49 19 55 51 23 35 39 35 7 164 96 80 96 67 67 4 67 2 194 112 112 68 68 0 0 0 0 1 0 158 2 67 1 186 2 176 0 22 0 39 0 187 0 8 0 1 0 14 0 4 43 184 0 14 16 184 0 19 220 185 0 3 0 1 244 184 0 10 208 184 0 14 16 184 0 21 208 48 49 19 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 35 158 5 43 40 18 30 25 24 12 31 9 47 5 43 40 18 30 25 24 12 31 9 47 2 67 48 61 17 20 17 54 47 62 17 21 17 55 0 0 1 0 155 2 199 1 189 3 51 0 23 0 43 0 187 0 17 0 1 0 0 0 4 43 184 0 0 16 184 0 5 220 184 0 0 16 184 0 8 208 184 0 5 16 185 0 12 0 1 244 184 0 20 208 48 49 1 34 46 2 35 34 6 7 35 62 1 51 50 30 2 51 50 54 55 51 14 1 1 104 20 32 27 26 14 14 22 4 46 5 44 36 20 32 27 26 14 14 22 4 46 5 44 2 199 16 20 16 26 26 47 61 16 20 16 27 25 46 62 0 1 0 177 2 89 1 167 2 146 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 177 246 246 2 146 57 0 0 0 0 1 0 176 2 217 1 168 3 18 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 176 248 248 3 18 57 0 0 0 0 1 0 170 2 63 1 174 2 197 0 19 0 25 0 187 0 9 0 1 0 0 0 4 43 184 0 9 16 184 0 14 220 184 0 6 208 48 49 1 34 46 2 39 51 30 1 51 50 62 2 55 51 14 3 1 44 33 47 32 16 2 51 4 38 37 18 28 19 12 2 51 2 16 32 47 2 63 24 39 47 24 32 51 14 23 30 16 24 47 39 24 0 1 0 177 2 196 1 167 3 50 0 17 0 25 0 187 0 9 0 1 0 0 0 4 43 184 0 9 16 184 0 6 220 184 0 12 208 48 49 1 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 44 30 44 30 16 3 50 5 34 34 34 34 5 50 3 16 30 44 2 196 19 30 40 21 24 39 39 24 21 40 30 19 0 0 1 0 234 2 74 1 110 2 201 0 11 0 13 0 187 0 6 0 1 0 0 0 4 43 48 49 1 34 38 53 52 54 51 50 22 21 20 6 1 44 28 38 38 28 28 38 38 2 74 34 29 29 35 35 29 29 34 0 0 0 1 0 243 2 202 1 101 3 53 0 11 0 13 0 187 0 6 0 1 0 0 0 4 43 48 49 1 34 38 53 52 54 51 50 22 21 20 6 1 44 24 33 33 24 24 33 33 2 202 30 24 23 30 30 23 24 30 0 0 0 2 0 150 2 76 1 194 2 186 0 11 0 23 0 29 0 187 0 0 0 1 0 6 0 4 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 19 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 204 24 30 30 24 23 31 31 169 23 31 31 23 24 30 30 2 76 32 23 23 32 32 23 23 32 32 23 23 32 32 23 23 32 0 0 2 0 165 2 203 1 179 3 45 0 11 0 23 0 29 0 187 0 6 0 1 0 0 0 4 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 19 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 214 22 27 27 22 21 28 28 151 21 28 28 21 22 27 27 2 203 28 21 22 27 27 22 21 28 28 21 22 27 27 22 21 28 0 0 1 0 236 2 41 1 127 2 215 0 14 0 27 0 187 0 0 0 1 0 14 0 4 43 184 0 0 16 184 0 5 220 185 0 6 0 1 244 48 49 1 62 1 53 52 39 55 30 1 21 20 14 2 7 1 7 24 32 83 9 66 72 18 31 40 22 2 79 7 20 19 39 3 48 2 41 38 22 31 23 13 4 0 0 1 0 236 2 186 1 127 3 104 0 14 0 25 0 186 0 0 0 14 0 3 43 184 0 0 16 184 0 5 220 185 0 6 0 1 244 48 49 1 62 1 53 52 39 55 30 1 21 20 14 2 7 1 7 24 32 83 9 66 72 18 31 40 22 2 224 7 20 19 39 3 48 2 41 38 22 31 23 13 4 0 0 0 0 2 0 207 2 30 1 137 2 215 0 11 0 23 0 23 0 186 0 12 0 0 0 3 43 184 0 12 16 184 0 18 220 184 0 6 220 48 49 1 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 1 44 41 52 52 41 41 52 52 41 20 28 28 20 20 28 28 2 30 51 42 42 50 50 42 42 51 37 30 26 25 30 30 25 26 30 0 0 2 0 207 2 187 1 137 3 107 0 11 0 23 0 23 0 186 0 12 0 0 0 3 43 184 0 12 16 184 0 18 220 184 0 6 220 48 49 1 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 1 44 41 52 52 41 40 53 53 40 19 28 28 19 20 28 28 2 187 47 41 40 48 48 40 41 47 36 27 25 23 28 28 23 25 27 0 0 2 0 202 2 59 1 236 2 202 0 3 0 7 0 29 0 187 0 0 0 1 0 2 0 4 43 184 0 0 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 1 51 7 35 55 51 7 35 1 16 73 88 55 218 72 88 55 2 202 143 143 143 0 0 2 0 191 2 194 1 236 3 50 0 3 0 7 0 29 0 187 0 1 0 1 0 3 0 4 43 184 0 1 16 184 0 4 208 184 0 3 16 184 0 6 208 48 49 19 55 51 7 55 51 7 35 191 66 77 83 164 77 84 59 2 194 112 112 112 112 0 0 1 0 168 2 61 1 176 2 209 0 7 0 25 0 187 0 3 0 1 0 6 0 4 43 184 0 3 16 184 0 4 220 184 0 1 208 48 49 19 51 23 51 55 51 7 35 168 63 67 4 67 63 97 70 2 209 99 99 148 0 1 0 164 2 194 1 180 3 50 0 7 0 25 0 187 0 6 0 1 0 1 0 4 43 184 0 6 16 184 0 7 220 184 0 4 208 48 49 1 7 35 39 51 23 51 55 1 180 96 80 96 67 67 4 67 3 50 112 112 68 68 0 0 0 2 0 108 2 59 1 142 2 202 0 3 0 7 0 29 0 187 0 3 0 1 0 1 0 4 43 184 0 1 16 184 0 4 208 184 0 3 16 184 0 6 208 48 49 1 35 39 51 7 35 39 51 1 142 55 88 73 77 55 88 72 2 59 143 143 143 0 0 2 0 108 2 194 1 153 3 50 0 3 0 7 0 29 0 187 0 2 0 1 0 0 0 4 43 184 0 0 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 1 39 51 23 43 1 39 51 1 93 83 77 66 158 59 84 77 2 194 112 112 112 0 0 1 0 247 2 33 1 90 2 220 0 16 0 21 0 187 0 5 0 1 0 11 0 4 43 184 0 5 16 184 0 16 220 48 49 1 14 1 7 54 51 50 22 21 20 6 35 34 53 52 54 55 1 90 29 26 2 3 5 15 26 23 17 51 38 43 2 188 14 35 23 1 19 20 23 22 69 35 63 20 0 1 0 253 2 32 1 95 2 218 0 15 0 21 0 187 0 10 0 1 0 4 0 4 43 184 0 4 16 184 0 15 220 48 49 19 54 55 6 35 34 38 53 52 54 51 50 21 20 6 7 253 54 3 3 6 15 26 24 17 50 38 43 2 64 26 46 1 19 20 22 22 69 35 62 20 0 1 1 35 1 179 1 187 2 101 0 15 0 21 0 187 0 0 0 1 0 15 0 4 43 184 0 0 16 184 0 6 220 48 49 1 62 1 53 52 38 39 55 30 1 21 20 14 2 7 1 35 42 42 8 6 59 10 13 22 39 52 31 1 220 6 30 30 11 21 10 29 14 32 19 27 40 27 16 3 0 1 0 234 255 30 1 110 255 157 0 11 0 13 0 187 0 6 0 1 0 0 0 4 43 48 49 5 34 38 53 52 54 51 50 22 21 20 6 1 44 28 38 38 28 28 38 38 226 34 29 29 35 35 29 29 34 0 0 0 0 2 0 165 255 55 1 179 255 153 0 11 0 23 0 29 0 187 0 6 0 1 0 0 0 4 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 23 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 214 22 27 27 22 21 28 28 151 21 28 28 21 22 27 27 201 29 20 21 28 28 21 20 29 29 20 21 28 28 21 20 29 0 0 0 1 0 215 255 40 1 112 255 208 0 16 0 27 0 187 0 15 0 1 0 0 0 4 43 184 0 15 16 184 0 9 220 185 0 8 0 1 244 48 49 5 30 1 21 20 14 2 7 39 62 1 53 52 38 39 55 1 15 51 46 24 40 53 28 8 40 49 30 21 18 48 8 35 34 22 32 22 13 2 40 5 21 20 20 19 5 38 0 1 0 215 255 43 1 112 0 3 0 17 0 29 0 186 0 1 0 2 0 3 43 184 0 2 16 184 0 17 208 184 0 11 220 185 0 10 0 1 244 48 49 37 51 7 30 1 21 20 14 2 7 39 62 1 53 52 38 39 1 25 53 25 24 35 24 40 53 28 8 40 49 33 30 3 53 8 32 31 22 32 22 13 3 41 5 23 20 20 21 8 0 1 0 210 255 43 1 107 0 3 0 17 0 29 0 186 0 1 0 2 0 3 43 184 0 2 16 184 0 17 208 184 0 11 220 185 0 10 0 1 244 48 49 37 51 7 30 1 21 20 14 2 7 39 62 1 53 52 38 39 1 19 54 25 24 35 24 40 53 28 8 40 49 33 31 3 53 8 32 31 22 32 22 13 3 41 5 23 20 20 21 8 0 1 0 234 255 50 1 147 0 3 0 18 0 30 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 3 62 89 187 0 10 0 1 0 16 0 4 43 48 49 23 52 54 55 51 14 1 21 20 22 51 50 55 23 14 1 35 34 38 234 46 25 58 32 36 28 18 22 18 22 14 46 19 38 52 121 41 64 19 24 55 29 23 23 13 41 11 16 43 0 0 0 0 1 0 234 255 44 1 153 0 3 0 21 0 30 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 3 62 89 187 0 6 0 1 0 13 0 4 43 48 49 37 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 1 110 32 36 30 18 12 19 9 23 14 46 20 40 55 13 21 26 12 3 24 57 29 23 23 7 7 45 11 17 44 43 21 38 33 27 9 0 0 0 1 0 174 255 50 1 170 255 177 0 17 0 13 0 187 0 9 0 1 0 0 0 4 43 48 49 5 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 44 32 47 30 16 1 51 4 36 35 35 36 4 51 2 15 30 47 206 23 37 45 22 29 47 47 29 22 45 37 23 0 0 0 1 0 176 255 85 1 167 255 143 0 3 0 13 0 187 0 0 0 1 0 3 0 4 43 48 49 5 35 53 51 1 167 247 247 171 58 0 0 0 0 3 0 168 2 76 1 176 3 29 0 11 0 23 0 27 0 43 0 187 0 0 0 1 0 6 0 4 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 184 0 6 16 184 0 26 220 185 0 25 0 1 244 48 49 19 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 39 51 21 35 214 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 230 247 247 2 76 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 209 47 0 3 0 168 2 203 1 176 3 139 0 3 0 15 0 27 0 43 0 187 0 10 0 1 0 4 0 4 43 184 0 10 16 184 0 2 220 185 0 1 0 1 244 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 19 51 21 35 23 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 176 248 248 38 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 139 46 146 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 3 0 168 2 76 1 176 3 55 0 3 0 15 0 27 0 37 0 186 0 0 0 2 0 3 43 187 0 4 0 1 0 10 0 4 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 1 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 1 73 79 103 58 33 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 55 103 132 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 3 0 168 2 203 1 176 3 182 0 3 0 15 0 27 0 41 0 187 0 10 0 1 0 4 0 4 43 184 0 10 16 184 0 2 220 184 0 0 220 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 1 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 1 82 91 112 68 35 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 182 111 124 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 3 0 168 2 76 1 176 3 55 0 7 0 19 0 31 0 43 0 187 0 8 0 1 0 14 0 4 43 184 0 14 16 184 0 6 220 185 0 3 0 1 244 184 0 8 16 184 0 20 208 184 0 14 16 184 0 26 208 48 49 19 51 23 51 55 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 174 61 63 4 63 61 91 70 51 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 55 64 64 103 132 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 0 3 0 164 2 203 1 180 3 182 0 11 0 23 0 31 0 43 0 187 0 6 0 1 0 0 0 4 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 184 0 6 16 184 0 25 220 185 0 30 0 1 244 48 49 19 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 55 7 35 39 51 23 51 55 214 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 30 96 80 96 67 67 4 67 2 203 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 235 111 111 68 68 0 3 0 168 2 76 1 176 3 55 0 3 0 15 0 27 0 41 0 187 0 4 0 1 0 10 0 4 43 184 0 10 16 184 0 1 220 184 0 3 220 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 1 35 39 51 23 34 38 53 52 54 51 50 22 21 20 6 35 34 38 53 52 54 51 50 22 21 20 6 1 97 58 103 79 115 20 25 25 20 20 26 26 192 20 26 26 20 20 25 25 2 208 103 235 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 3 0 168 2 203 1 176 3 182 0 3 0 15 0 27 0 41 0 187 0 10 0 1 0 4 0 4 43 184 0 10 16 184 0 0 220 184 0 3 220 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 1 35 39 51 23 34 38 53 52 54 51 50 22 21 20 6 35 34 38 53 52 54 51 50 22 21 20 6 1 95 68 112 91 124 20 25 25 20 20 26 26 192 20 26 26 20 20 25 25 3 71 111 235 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 2 0 184 2 61 2 20 2 242 0 7 0 11 0 25 0 187 0 1 0 1 0 4 0 4 43 184 0 4 16 184 0 11 208 184 0 8 220 48 49 1 51 23 35 39 35 7 35 37 51 7 35 1 10 68 82 56 58 4 58 56 1 22 70 92 51 2 180 119 73 73 181 114 0 0 0 2 0 172 2 194 2 22 3 113 0 3 0 11 0 25 0 187 0 8 0 1 0 5 0 4 43 184 0 8 16 184 0 3 208 184 0 0 220 48 49 1 51 7 35 39 51 23 35 39 35 7 35 1 206 72 91 52 127 72 92 63 63 4 63 63 3 113 111 42 106 62 62 0 0 0 0 2 0 184 2 61 1 245 2 242 0 7 0 11 0 25 0 187 0 1 0 1 0 4 0 4 43 184 0 4 16 184 0 9 208 184 0 11 220 48 49 1 51 23 35 39 35 7 35 37 35 39 51 1 10 68 82 56 58 4 58 56 1 61 51 92 69 2 180 119 73 73 67 114 0 0 0 2 0 172 2 194 1 228 3 113 0 3 0 11 0 25 0 187 0 8 0 1 0 5 0 4 43 184 0 8 16 184 0 1 208 184 0 3 220 48 49 1 35 39 51 7 51 23 35 39 35 7 35 1 228 52 91 72 149 72 92 63 63 4 63 63 3 2 111 69 106 62 62 0 0 0 0 2 0 184 2 61 1 253 3 16 0 7 0 23 0 37 0 187 0 1 0 1 0 4 0 4 43 184 0 4 16 184 0 23 208 185 0 8 0 1 244 184 0 14 220 185 0 15 0 1 244 48 49 1 51 23 35 39 35 7 35 55 62 1 53 52 38 39 55 30 1 21 20 14 2 7 1 10 68 82 56 58 4 58 56 223 19 23 32 37 7 59 63 16 26 33 18 2 180 119 73 73 90 5 18 16 20 19 2 41 2 36 35 20 28 19 12 4 0 0 0 2 0 172 2 194 1 251 3 138 0 13 0 21 0 37 0 187 0 18 0 1 0 15 0 4 43 184 0 18 16 184 0 13 208 185 0 0 0 1 244 184 0 6 220 185 0 7 0 1 244 48 49 1 62 1 53 52 38 39 55 30 1 21 20 6 7 39 51 23 35 39 35 7 35 1 148 19 26 33 38 9 59 61 56 36 151 72 92 63 63 4 63 63 3 21 5 15 16 20 17 2 42 2 36 35 38 35 6 58 106 62 62 0 0 0 0 2 0 169 2 59 1 175 3 34 0 7 0 29 0 57 0 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 22 220 184 0 27 220 185 0 11 0 1 244 184 0 22 16 185 0 16 0 1 244 184 0 11 16 184 0 18 208 184 0 22 16 184 0 29 208 48 49 1 51 23 35 39 35 7 35 39 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 1 6 76 86 58 64 4 64 58 7 4 40 35 19 27 23 21 12 32 7 42 4 40 35 19 27 23 21 12 32 7 2 163 104 65 65 140 40 51 13 17 13 43 40 51 13 17 13 43 0 0 0 2 0 168 2 194 1 176 3 170 0 7 0 31 0 57 0 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 23 220 184 0 8 208 184 0 23 16 184 0 28 220 185 0 11 0 1 244 184 0 23 16 185 0 16 0 1 244 184 0 11 16 184 0 19 208 48 49 1 51 23 35 39 35 7 35 39 62 1 51 50 30 2 51 50 54 55 51 14 1 35 34 46 2 35 34 6 7 1 8 72 92 63 63 4 63 63 4 4 39 35 19 29 24 21 12 15 21 3 42 4 39 35 19 29 24 21 12 15 21 3 3 44 106 62 62 142 39 51 13 16 13 21 21 40 50 13 16 13 21 21 0 2 0 174 2 63 1 170 3 21 0 3 0 21 0 25 0 187 0 13 0 1 0 4 0 4 43 184 0 13 16 184 0 2 220 184 0 0 220 48 49 1 51 7 35 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 75 68 88 48 37 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 3 21 112 102 23 37 45 22 31 49 49 31 22 45 37 23 0 0 2 0 178 2 196 1 166 3 139 0 3 0 21 0 25 0 187 0 13 0 1 0 4 0 4 43 184 0 13 16 184 0 2 220 184 0 0 220 48 49 1 51 7 35 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 79 72 97 49 39 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 139 105 94 18 30 38 21 26 38 38 26 21 38 30 18 0 0 2 0 174 2 63 1 170 3 21 0 3 0 21 0 25 0 187 0 13 0 1 0 4 0 4 43 184 0 13 16 184 0 0 220 184 0 3 220 48 49 1 35 39 51 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 81 48 88 68 31 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 2 165 112 214 23 37 45 22 31 49 49 31 22 45 37 23 0 0 2 0 178 2 196 1 166 3 139 0 3 0 21 0 25 0 187 0 13 0 1 0 4 0 4 43 184 0 13 16 184 0 0 220 184 0 3 220 48 49 1 35 39 51 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 83 49 97 72 35 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 34 105 199 18 30 38 21 26 38 38 26 21 38 30 18 0 0 2 0 174 2 63 1 170 3 71 0 17 0 33 0 37 0 187 0 9 0 1 0 0 0 4 43 184 0 9 16 184 0 33 220 185 0 18 0 1 244 184 0 24 220 185 0 25 0 1 244 48 49 1 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 53 52 38 39 55 30 1 21 20 14 2 7 1 44 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 67 18 24 32 37 7 59 63 16 26 34 18 2 63 23 37 45 22 31 49 49 31 22 45 37 23 143 5 18 16 20 19 2 41 2 35 36 20 28 19 12 4 0 2 0 178 2 196 1 166 3 184 0 15 0 33 0 37 0 187 0 25 0 1 0 16 0 4 43 184 0 25 16 184 0 15 220 185 0 0 0 1 244 184 0 6 220 185 0 7 0 1 244 48 49 1 62 1 53 52 38 39 55 30 1 21 20 14 2 7 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 11 18 26 33 37 8 59 62 16 25 34 18 23 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 67 5 15 16 20 17 2 42 2 36 35 19 27 19 11 3 92 18 30 38 21 26 38 38 26 21 38 30 18 0 2 0 169 2 63 1 175 3 34 0 17 0 39 0 57 0 187 0 9 0 1 0 0 0 4 43 184 0 9 16 184 0 32 220 184 0 37 220 185 0 21 0 1 244 184 0 32 16 185 0 26 0 1 244 184 0 21 16 184 0 28 208 184 0 32 16 184 0 39 208 48 49 1 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 1 44 32 46 30 16 1 45 5 37 38 38 37 5 45 2 15 30 46 163 4 40 35 19 27 23 21 12 32 7 42 4 40 35 19 27 23 21 12 32 7 2 63 19 30 38 20 24 38 38 24 20 38 30 19 136 40 51 13 17 13 43 40 51 13 17 13 43 0 2 0 167 2 196 1 175 3 171 0 17 0 41 0 57 0 187 0 9 0 1 0 0 0 4 43 184 0 9 16 184 0 33 220 184 0 18 208 184 0 33 16 184 0 38 220 185 0 21 0 1 244 184 0 33 16 185 0 26 0 1 244 184 0 21 16 184 0 29 208 48 49 1 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 51 50 30 2 51 50 54 55 51 14 1 35 34 46 2 35 34 6 7 1 44 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 162 3 41 35 17 28 24 22 12 15 21 4 42 4 40 35 18 27 24 22 12 15 22 3 2 196 18 30 38 21 26 38 38 26 21 38 30 18 138 40 53 14 17 14 24 21 39 54 14 17 14 24 21 0 0 0 2 0 176 2 59 1 168 3 34 0 7 0 25 0 35 0 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 8 220 185 0 17 0 1 244 184 0 20 220 184 0 14 208 48 49 1 51 23 35 39 35 7 35 55 34 46 2 39 51 30 1 51 50 54 55 51 14 3 1 6 76 86 58 64 4 64 58 124 29 41 29 15 1 45 4 33 33 33 33 4 45 2 14 29 42 2 163 104 65 65 134 16 27 35 19 22 30 30 22 19 35 27 16 0 0 2 0 172 2 194 1 172 3 170 0 7 0 21 0 35 0 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 8 220 185 0 15 0 1 244 184 0 18 220 184 0 12 208 48 49 1 51 23 35 39 35 7 35 55 34 38 39 51 30 1 51 50 54 55 51 14 1 1 8 72 92 63 63 4 63 63 128 58 59 5 45 6 35 36 36 35 6 45 5 59 3 44 106 62 62 135 57 40 23 30 30 23 40 57 0 0 0 1 1 6 2 36 1 65 2 248 0 4 0 11 0 186 0 1 0 0 0 3 43 48 49 1 39 51 15 1 1 10 4 59 1 14 2 36 212 57 155 0 0 0 0 1 0 231 2 29 1 127 2 198 0 16 0 27 0 187 0 15 0 1 0 0 0 4 43 184 0 15 16 184 0 9 220 185 0 8 0 1 244 48 49 1 46 1 53 52 62 2 55 23 14 1 21 20 22 23 7 1 72 51 46 24 40 52 28 8 39 49 29 22 18 2 29 8 36 33 22 32 22 13 3 41 5 21 19 20 20 5 38 0 0 0 0 1 255 217 1 5 2 127 1 83 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 3 33 21 33 39 2 166 253 90 1 83 78 0 0 1 255 217 0 222 2 127 1 122 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 3 33 21 33 39 2 166 253 90 1 122 156 0 0 0 0 1 1 5 254 112 1 83 3 232 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 1 51 17 35 1 5 78 78 3 232 250 136 0 0 0 0 1 0 222 254 112 1 122 3 232 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 17 35 222 156 156 3 232 250 136 0 3 0 33 1 5 2 55 1 83 0 3 0 7 0 11 0 45 0 187 0 1 0 1 0 2 0 4 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 184 0 1 16 184 0 8 208 184 0 2 16 184 0 10 208 48 49 19 51 21 35 55 51 21 35 55 51 21 35 33 134 134 200 134 134 200 134 134 1 83 78 78 78 78 78 0 0 3 0 33 0 222 2 55 1 122 0 3 0 7 0 11 0 43 0 186 0 1 0 2 0 3 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 184 0 1 16 184 0 8 208 184 0 2 16 184 0 10 208 48 49 19 51 21 35 55 51 21 35 55 51 21 35 33 134 134 200 134 134 200 134 134 1 122 156 156 156 156 156 0 0 0 0 3 1 5 255 111 1 83 2 231 0 3 0 7 0 11 0 27 0 186 0 1 0 2 0 3 43 186 0 9 0 10 0 3 43 186 0 5 0 6 0 3 43 48 49 37 51 21 35 17 51 21 35 17 51 21 35 1 5 78 78 78 78 78 78 77 222 2 43 222 2 43 222 0 0 0 0 3 0 222 255 111 1 122 2 231 0 3 0 7 0 11 0 27 0 186 0 1 0 2 0 3 43 186 0 9 0 10 0 3 43 186 0 5 0 6 0 3 43 48 49 55 51 21 35 17 51 21 35 17 51 21 35 222 156 156 156 156 156 156 77 222 2 43 222 2 43 222 0 4 0 18 1 5 2 69 1 83 0 3 0 7 0 11 0 15 0 61 0 187 0 1 0 1 0 2 0 4 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 184 0 1 16 184 0 8 208 184 0 2 16 184 0 10 208 184 0 1 16 184 0 12 208 184 0 2 16 184 0 14 208 48 49 19 51 21 35 55 51 21 35 55 51 21 35 55 51 21 35 18 113 113 150 113 113 150 113 113 150 113 113 1 83 78 78 78 78 78 78 78 0 0 0 4 0 18 0 222 2 69 1 122 0 3 0 7 0 11 0 15 0 59 0 186 0 1 0 2 0 3 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 184 0 1 16 184 0 8 208 184 0 2 16 184 0 10 208 184 0 1 16 184 0 12 208 184 0 2 16 184 0 14 208 48 49 19 51 21 35 55 51 21 35 55 51 21 35 55 51 21 35 18 113 113 150 113 113 150 113 113 150 113 113 1 122 156 156 156 156 156 156 156 0 4 1 5 255 87 1 83 3 1 0 3 0 7 0 11 0 15 0 35 0 186 0 1 0 2 0 3 43 186 0 13 0 14 0 3 43 186 0 5 0 6 0 3 43 186 0 9 0 10 0 3 43 48 49 37 51 21 35 17 51 21 35 17 51 21 35 17 51 21 35 1 5 78 78 78 78 78 78 78 78 19 188 1 182 188 1 182 188 1 182 188 0 4 0 222 255 87 1 122 3 1 0 3 0 7 0 11 0 15 0 35 0 186 0 1 0 2 0 3 43 186 0 13 0 14 0 3 43 186 0 5 0 6 0 3 43 186 0 9 0 10 0 3 43 48 49 55 51 21 35 17 51 21 35 17 51 21 35 17 51 21 35 222 156 156 156 156 156 156 156 156 19 188 1 182 188 1 182 188 1 182 188 0 0 1 1 5 254 112 2 127 1 83 0 5 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 1 33 21 33 17 35 1 5 1 122 254 212 78 1 83 78 253 107 0 0 0 0 1 1 5 254 112 2 127 1 122 0 5 0 11 0 186 0 1 0 2 0 3 43 48 49 1 33 21 33 17 35 1 5 1 122 254 212 78 1 122 156 253 146 0 0 1 0 222 254 112 2 127 1 83 0 5 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 17 35 222 1 161 254 251 156 1 83 78 253 107 0 1 0 222 254 112 2 127 1 122 0 5 0 11 0 186 0 1 0 2 0 3 43 48 49 19 33 21 33 17 35 222 1 161 254 251 156 1 122 156 253 146 0 0 0 1 255 217 254 112 1 83 1 83 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 3 33 17 35 17 33 39 1 122 78 254 212 1 83 253 29 2 149 0 0 0 0 1 255 217 254 112 1 83 1 122 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 3 33 17 35 17 33 39 1 122 78 254 212 1 122 252 246 2 110 0 0 1 255 217 254 112 1 122 1 83 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 3 33 17 35 17 33 39 1 161 156 254 251 1 83 253 29 2 149 0 0 0 0 1 255 217 254 112 1 122 1 122 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 3 33 17 35 17 33 39 1 161 156 254 251 1 122 252 246 2 110 0 0 1 1 5 1 5 2 127 3 232 0 5 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 1 51 17 33 21 33 1 5 78 1 44 254 134 3 232 253 107 78 0 0 0 0 1 1 5 0 222 2 127 3 232 0 5 0 11 0 186 0 3 0 4 0 3 43 48 49 1 51 17 33 21 33 1 5 78 1 44 254 134 3 232 253 146 156 0 0 1 0 222 1 5 2 127 3 232 0 5 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 19 51 17 33 21 33 222 156 1 5 254 95 3 232 253 107 78 0 1 0 222 0 222 2 127 3 232 0 5 0 11 0 186 0 3 0 4 0 3 43 48 49 19 51 17 33 21 33 222 156 1 5 254 95 3 232 253 146 156 0 0 0 1 255 217 1 5 1 83 3 232 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 3 33 17 51 17 33 39 1 44 78 254 134 1 83 2 149 253 29 0 0 0 0 1 255 217 0 222 1 83 3 232 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 3 33 17 51 17 33 39 1 44 78 254 134 1 122 2 110 252 246 0 0 1 255 217 1 5 1 122 3 232 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 3 33 17 51 17 33 39 1 5 156 254 95 1 83 2 149 253 29 0 0 0 0 1 255 217 0 222 1 122 3 232 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 3 33 17 51 17 33 39 1 5 156 254 95 1 122 2 110 252 246 0 0 1 1 5 254 112 2 127 3 232 0 7 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 1 51 17 33 21 33 17 35 1 5 78 1 44 254 212 78 3 232 253 107 78 253 107 0 0 0 1 1 5 254 112 2 127 3 232 0 7 0 11 0 186 0 3 0 4 0 3 43 48 49 1 51 17 33 21 33 17 35 1 5 78 1 44 254 212 78 3 232 253 146 156 253 146 0 1 0 222 254 112 2 127 3 232 0 9 0 21 0 187 0 3 0 1 0 4 0 4 43 184 0 4 16 184 0 8 208 48 49 19 51 17 33 21 33 17 35 17 35 222 156 1 5 254 212 78 39 3 232 253 107 78 253 107 2 149 0 0 0 1 0 222 254 112 2 127 3 232 0 9 0 21 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 48 49 19 51 17 51 17 33 21 33 17 35 222 39 78 1 44 254 251 156 1 83 2 149 253 107 78 253 107 0 0 0 1 0 222 254 112 2 127 3 232 0 7 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 19 51 17 33 21 33 17 35 222 156 1 5 254 251 156 3 232 253 107 78 253 107 0 0 0 0 1 0 222 254 112 2 127 3 232 0 9 0 19 0 186 0 3 0 4 0 3 43 184 0 4 16 184 0 8 208 48 49 19 51 17 33 21 33 17 35 17 35 222 156 1 5 254 212 78 39 3 232 253 146 156 253 146 2 110 0 1 0 222 254 112 2 127 3 232 0 9 0 19 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 48 49 19 51 17 51 17 33 21 33 17 35 222 39 78 1 44 254 251 156 1 122 2 110 253 146 156 253 146 0 1 0 222 254 112 2 127 3 232 0 7 0 11 0 186 0 3 0 4 0 3 43 48 49 19 51 17 33 21 33 17 35 222 156 1 5 254 251 156 3 232 253 146 156 253 146 0 0 1 255 217 254 112 1 83 3 232 0 7 0 13 0 187 0 1 0 1 0 6 0 4 43 48 49 3 33 17 51 17 35 17 33 39 1 44 78 78 254 212 1 83 2 149 250 136 2 149 0 0 0 1 255 217 254 112 1 83 3 232 0 7 0 11 0 186 0 1 0 6 0 3 43 48 49 3 33 17 51 17 35 17 33 39 1 44 78 78 254 212 1 122 2 110 250 136 2 110 0 1 255 217 254 112 1 122 3 232 0 9 0 21 0 187 0 1 0 1 0 8 0 4 43 184 0 8 16 184 0 4 208 48 49 3 33 17 51 17 35 17 35 17 33 39 1 5 156 39 78 254 212 1 83 2 149 253 29 253 107 2 149 0 0 1 255 217 254 112 1 122 3 232 0 9 0 21 0 187 0 1 0 1 0 8 0 4 43 184 0 1 16 184 0 4 208 48 49 3 33 17 51 17 51 17 35 17 33 39 1 44 78 39 156 254 251 1 83 2 149 253 107 253 29 2 149 0 0 1 255 217 254 112 1 122 3 232 0 7 0 13 0 187 0 1 0 1 0 6 0 4 43 48 49 3 33 17 51 17 35 17 33 39 1 5 156 156 254 251 1 83 2 149 250 136 2 149 0 0 0 1 255 217 254 112 1 122 3 232 0 9 0 19 0 186 0 1 0 8 0 3 43 184 0 8 16 184 0 4 208 48 49 3 33 17 51 17 35 17 35 17 33 39 1 5 156 39 78 254 212 1 122 2 110 252 246 253 146 2 110 0 0 0 0 1 255 217 254 112 1 122 3 232 0 9 0 19 0 186 0 1 0 8 0 3 43 184 0 1 16 184 0 4 208 48 49 3 33 17 51 17 51 17 35 17 33 39 1 44 78 39 156 254 251 1 122 2 110 253 146 252 246 2 110 0 0 0 0 1 255 217 254 112 1 122 3 232 0 7 0 11 0 186 0 1 0 6 0 3 43 48 49 3 33 17 51 17 35 17 33 39 1 5 156 156 254 251 1 122 2 110 250 136 2 110 0 1 255 217 254 112 2 127 1 83 0 7 0 21 0 187 0 1 0 1 0 2 0 4 43 184 0 2 16 184 0 6 208 48 49 3 33 21 33 17 35 17 33 39 2 166 254 212 78 254 212 1 83 78 253 107 2 149 0 0 0 1 255 217 254 112 2 127 1 122 0 9 0 21 0 187 0 3 0 1 0 4 0 4 43 186 0 1 0 8 0 3 43 48 49 3 33 21 33 21 33 17 35 17 33 39 1 122 1 44 254 212 78 254 212 1 122 39 78 253 107 2 110 0 0 1 255 217 254 112 2 127 1 122 0 9 0 21 0 187 0 1 0 1 0 8 0 4 43 186 0 3 0 4 0 3 43 48 49 3 33 53 33 21 33 17 35 17 33 39 1 44 1 122 254 212 78 254 212 1 83 39 156 253 146 2 149 0 0 1 255 217 254 112 2 127 1 122 0 7 0 19 0 186 0 1 0 2 0 3 43 184 0 2 16 184 0 6 208 48 49 3 33 21 33 17 35 17 33 39 2 166 254 212 78 254 212 1 122 156 253 146 2 110 0 1 255 217 254 112 2 127 1 83 0 7 0 21 0 187 0 1 0 1 0 2 0 4 43 184 0 2 16 184 0 6 208 48 49 3 33 21 33 17 35 17 33 39 2 166 254 251 156 254 251 1 83 78 253 107 2 149 0 0 0 1 255 217 254 112 2 127 1 122 0 9 0 21 0 187 0 3 0 1 0 4 0 4 43 186 0 1 0 8 0 3 43 48 49 3 33 21 33 21 33 17 35 17 33 39 1 161 1 5 254 251 156 254 251 1 122 39 78 253 107 2 110 0 0 1 255 217 254 112 2 127 1 122 0 9 0 21 0 187 0 1 0 1 0 8 0 4 43 186 0 3 0 4 0 3 43 48 49 3 33 53 33 21 33 17 35 17 33 39 1 5 1 161 254 251 156 254 251 1 83 39 156 253 146 2 149 0 0 1 255 217 254 112 2 127 1 122 0 7 0 19 0 186 0 1 0 2 0 3 43 184 0 2 16 184 0 6 208 48 49 3 33 21 33 17 35 17 33 39 2 166 254 251 156 254 251 1 122 156 253 146 2 110 0 1 255 217 1 5 2 127 3 232 0 7 0 21 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 48 49 3 33 17 51 17 33 21 33 39 1 44 78 1 44 253 90 1 83 2 149 253 107 78 0 0 0 1 255 217 0 222 2 127 3 232 0 9 0 21 0 186 0 1 0 8 0 3 43 187 0 5 0 1 0 6 0 4 43 48 49 3 33 17 51 17 33 21 33 21 33 39 1 44 78 1 44 254 212 254 134 1 122 2 110 253 107 78 39 0 0 1 255 217 0 222 2 127 3 232 0 9 0 21 0 186 0 5 0 6 0 3 43 187 0 1 0 1 0 8 0 4 43 48 49 3 33 17 51 17 33 21 33 53 33 39 1 44 78 1 44 254 134 254 212 1 83 2 149 253 146 156 39 0 0 1 255 217 0 222 2 127 3 232 0 7 0 19 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 48 49 3 33 17 51 17 33 21 33 39 1 44 78 1 44 253 90 1 122 2 110 253 146 156 0 1 255 217 1 5 2 127 3 232 0 7 0 21 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 48 49 3 33 17 51 17 33 21 33 39 1 5 156 1 5 253 90 1 83 2 149 253 107 78 0 0 0 1 255 217 0 222 2 127 3 232 0 9 0 21 0 186 0 1 0 8 0 3 43 187 0 5 0 1 0 6 0 4 43 48 49 3 33 17 51 17 33 21 33 21 33 39 1 5 156 1 5 254 251 254 95 1 122 2 110 253 107 78 39 0 0 1 255 217 0 222 2 127 3 232 0 9 0 21 0 186 0 5 0 6 0 3 43 187 0 1 0 1 0 8 0 4 43 48 49 3 33 17 51 17 33 21 33 53 33 39 1 5 156 1 5 254 95 254 251 1 83 2 149 253 146 156 39 0 0 1 255 217 0 222 2 127 3 232 0 7 0 19 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 48 49 3 33 17 51 17 33 21 33 39 1 5 156 1 5 253 90 1 122 2 110 253 146 156 0 1 255 217 254 112 2 127 3 232 0 11 0 29 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 212 78 254 212 1 83 2 149 253 107 78 253 107 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 21 0 186 0 1 0 10 0 3 43 187 0 5 0 1 0 6 0 4 43 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 212 78 254 212 1 122 2 110 253 107 78 253 107 2 110 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 21 0 186 0 5 0 6 0 3 43 187 0 1 0 1 0 10 0 4 43 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 212 78 254 212 1 83 2 149 253 146 156 253 146 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 27 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 212 78 254 212 1 122 2 110 253 146 156 253 146 2 110 0 0 1 255 217 254 112 2 127 3 232 0 11 0 29 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 212 78 254 212 1 83 2 149 253 107 78 253 107 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 29 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 251 156 254 251 1 83 2 149 253 107 78 253 107 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 29 0 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 251 156 254 251 1 83 2 149 253 107 78 253 107 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 13 0 29 0 186 0 1 0 12 0 3 43 187 0 5 0 1 0 6 0 4 43 184 0 12 16 184 0 8 208 48 49 3 33 17 51 17 33 21 33 21 35 17 35 17 33 39 1 5 156 1 5 254 251 39 78 254 212 1 122 2 110 253 107 78 39 253 146 2 110 0 0 0 0 1 255 217 254 112 2 127 3 232 0 13 0 29 0 186 0 5 0 6 0 3 43 187 0 1 0 1 0 12 0 4 43 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 35 53 33 39 1 5 156 1 5 254 212 78 39 254 251 1 83 2 149 253 146 156 253 146 2 110 39 0 0 0 0 1 255 217 254 112 2 127 3 232 0 13 0 29 0 186 0 1 0 12 0 3 43 187 0 7 0 1 0 8 0 4 43 184 0 1 16 184 0 4 208 48 49 3 33 17 51 17 51 21 33 21 33 17 35 17 33 39 1 44 78 39 1 5 254 251 156 254 251 1 122 2 110 253 146 39 78 253 107 2 110 0 0 0 0 1 255 217 254 112 2 127 3 232 0 13 0 29 0 186 0 7 0 8 0 3 43 187 0 1 0 1 0 12 0 4 43 184 0 7 16 184 0 2 208 48 49 3 33 53 51 17 51 17 33 21 33 17 35 17 33 39 1 5 39 78 1 44 254 251 156 254 251 1 83 39 2 110 253 146 156 253 146 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 27 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 212 78 254 212 1 122 2 110 253 146 156 253 146 2 110 0 0 1 255 217 254 112 2 127 3 232 0 11 0 27 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 44 78 1 44 254 251 156 254 251 1 122 2 110 253 146 156 253 146 2 110 0 0 1 255 217 254 112 2 127 3 232 0 11 0 21 0 186 0 1 0 10 0 3 43 187 0 5 0 1 0 6 0 4 43 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 251 156 254 251 1 122 2 110 253 107 78 253 107 2 110 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 21 0 186 0 5 0 6 0 3 43 187 0 1 0 1 0 10 0 4 43 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 251 156 254 251 1 83 2 149 253 146 156 253 146 2 149 0 0 0 0 1 255 217 254 112 2 127 3 232 0 11 0 27 0 186 0 5 0 6 0 3 43 184 0 5 16 184 0 0 208 184 0 6 16 184 0 10 208 48 49 3 33 17 51 17 33 21 33 17 35 17 33 39 1 5 156 1 5 254 251 156 254 251 1 122 2 110 253 146 156 253 146 2 110 0 0 2 0 75 1 5 2 13 1 83 0 3 0 7 0 29 0 187 0 1 0 1 0 2 0 4 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 19 51 21 35 37 51 21 35 75 150 150 1 44 150 150 1 83 78 78 78 0 0 0 0 2 0 75 0 222 2 13 1 122 0 3 0 7 0 27 0 186 0 1 0 2 0 3 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 19 51 21 35 37 51 21 35 75 150 150 1 44 150 150 1 122 156 156 156 0 0 2 1 5 255 181 1 83 2 163 0 3 0 7 0 11 0 186 0 1 0 2 0 3 43 48 49 37 51 21 35 17 51 21 35 1 5 78 78 78 78 175 250 2 238 250 0 0 0 2 0 222 255 181 1 122 2 163 0 3 0 7 0 19 0 186 0 1 0 2 0 3 43 186 0 5 0 6 0 3 43 48 49 55 51 21 35 17 51 21 35 222 156 156 156 156 175 250 2 238 250 0 0 0 0 2 255 217 0 183 2 127 1 161 0 3 0 7 0 23 0 187 0 5 0 1 0 6 0 4 43 187 0 1 0 1 0 2 0 4 43 48 49 3 33 21 33 21 33 21 33 39 2 166 253 90 2 166 253 90 1 161 78 78 78 0 0 0 0 2 0 183 254 112 1 161 3 232 0 3 0 7 0 27 0 186 0 1 0 2 0 3 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 19 51 17 35 19 51 17 35 183 78 78 156 78 78 3 232 250 136 5 120 250 136 0 0 0 0 1 1 5 254 112 2 127 1 161 0 9 0 23 0 187 0 1 0 1 0 2 0 4 43 187 0 5 0 1 0 6 0 4 43 48 49 1 33 21 33 21 33 21 33 17 35 1 5 1 122 254 212 1 44 254 212 78 1 161 78 78 78 253 185 0 0 0 0 1 0 183 254 112 2 127 1 83 0 10 0 29 0 187 0 2 0 1 0 3 0 4 43 184 0 2 16 184 0 0 208 184 0 3 16 184 0 7 208 48 49 19 51 33 21 35 17 35 17 35 17 35 183 78 1 122 222 78 78 78 1 83 78 253 107 2 149 253 107 0 0 2 0 183 254 112 2 127 1 161 0 5 0 11 0 23 0 187 0 1 0 1 0 2 0 4 43 187 0 7 0 1 0 8 0 4 43 48 49 19 33 21 33 17 35 19 33 21 35 17 35 183 1 200 254 134 78 156 1 44 222 78 1 161 78 253 29 2 149 78 253 185 0 1 255 217 254 112 1 83 1 161 0 9 0 23 0 187 0 1 0 1 0 8 0 4 43 187 0 7 0 1 0 4 0 4 43 48 49 3 33 17 35 17 33 53 33 53 33 39 1 122 78 254 212 1 44 254 212 1 161 252 207 2 71 78 78 0 0 0 0 1 255 217 254 112 1 161 1 83 0 9 0 21 0 187 0 7 0 1 0 0 0 4 43 184 0 0 16 184 0 4 208 48 49 1 35 17 35 17 35 53 33 17 35 1 83 78 78 222 1 200 78 1 5 253 107 2 149 78 253 29 0 0 0 2 255 217 254 112 1 161 1 161 0 5 0 11 0 23 0 187 0 1 0 1 0 4 0 4 43 187 0 7 0 1 0 10 0 4 43 48 49 3 33 17 35 17 33 21 33 17 35 17 35 39 1 200 78 254 134 1 44 78 222 1 161 252 207 2 227 78 253 107 2 71 0 1 1 5 0 183 2 127 3 232 0 9 0 23 0 187 0 7 0 1 0 8 0 4 43 187 0 3 0 1 0 4 0 4 43 48 49 1 51 17 33 21 33 21 33 21 33 1 5 78 1 44 254 212 1 44 254 134 3 232 253 185 78 78 78 0 0 0 0 1 0 183 1 5 2 127 3 232 0 9 0 21 0 187 0 7 0 1 0 8 0 4 43 184 0 7 16 184 0 2 208 48 49 19 51 17 51 17 51 17 51 21 33 183 78 78 78 222 254 56 3 232 253 107 2 149 253 107 78 0 0 0 0 2 0 183 0 183 2 127 3 232 0 5 0 11 0 23 0 187 0 3 0 1 0 4 0 4 43 187 0 9 0 1 0 10 0 4 43 48 49 19 51 17 33 21 33 19 51 17 51 21 33 183 78 1 122 254 56 156 78 222 254 212 3 232 253 29 78 3 49 253 185 78 0 1 255 217 0 183 1 83 3 232 0 9 0 23 0 187 0 7 0 1 0 4 0 4 43 187 0 1 0 1 0 8 0 4 43 48 49 3 33 17 51 17 33 53 33 53 33 39 1 44 78 254 134 1 44 254 212 1 161 2 71 252 207 78 78 0 0 0 0 1 255 217 1 5 1 161 3 232 0 9 0 21 0 187 0 5 0 1 0 8 0 4 43 184 0 5 16 184 0 0 208 48 49 3 51 17 51 17 51 17 51 17 33 39 222 78 78 78 254 56 1 83 2 149 253 107 2 149 253 29 0 0 0 2 255 217 0 183 1 161 3 232 0 5 0 11 0 23 0 187 0 1 0 1 0 4 0 4 43 187 0 7 0 1 0 10 0 4 43 48 49 3 33 17 51 17 33 53 51 17 51 17 33 39 1 122 78 254 56 222 78 254 212 1 5 2 227 252 207 234 2 71 253 107 0 1 1 5 254 112 2 127 3 232 0 11 0 23 0 187 0 7 0 1 0 8 0 4 43 187 0 3 0 1 0 4 0 4 43 48 49 1 51 17 33 21 33 21 33 21 33 17 35 1 5 78 1 44 254 212 1 44 254 212 78 3 232 253 185 78 78 78 253 185 0 0 0 2 0 183 254 112 2 127 3 232 0 7 0 11 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 1 51 17 51 21 35 17 35 3 51 17 35 1 83 78 222 222 78 156 78 78 3 232 253 107 78 253 107 5 120 250 136 0 0 0 0 3 0 183 254 112 2 127 3 232 0 3 0 9 0 15 0 23 0 187 0 11 0 1 0 12 0 4 43 187 0 7 0 1 0 8 0 4 43 48 49 19 51 17 35 19 51 17 51 21 33 21 33 21 35 17 35 183 78 78 156 78 222 254 212 1 44 222 78 3 232 250 136 5 120 253 185 78 78 78 253 185 0 0 0 1 255 217 254 112 1 83 3 232 0 11 0 23 0 187 0 9 0 1 0 6 0 4 43 187 0 1 0 1 0 10 0 4 43 48 49 3 33 17 51 17 35 17 33 53 33 53 33 39 1 44 78 78 254 212 1 44 254 212 1 161 2 71 250 136 2 71 78 78 0 0 0 2 255 217 254 112 1 161 3 232 0 7 0 11 0 13 0 187 0 1 0 1 0 6 0 4 43 48 49 3 51 17 51 17 35 17 35 1 51 17 35 39 222 78 78 222 1 122 78 78 1 83 2 149 250 136 2 149 2 227 250 136 0 0 0 3 255 217 254 112 1 161 3 232 0 3 0 9 0 15 0 23 0 187 0 5 0 1 0 8 0 4 43 187 0 11 0 1 0 14 0 4 43 48 49 1 51 17 35 1 33 17 35 17 35 53 51 17 51 17 33 1 83 78 78 254 134 1 44 78 222 222 78 254 212 3 232 250 136 2 149 253 107 2 71 234 2 71 253 107 0 0 0 2 255 217 254 112 2 127 1 161 0 7 0 11 0 31 0 187 0 9 0 1 0 10 0 4 43 187 0 1 0 1 0 2 0 4 43 184 0 2 16 184 0 6 208 48 49 3 33 21 33 17 35 17 33 53 33 21 33 39 2 166 254 212 78 254 212 2 166 253 90 1 5 78 253 185 2 71 234 78 0 1 255 217 254 112 2 127 1 83 0 11 0 29 0 187 0 1 0 1 0 2 0 4 43 184 0 2 16 184 0 6 208 184 0 2 16 184 0 10 208 48 49 3 33 21 35 17 35 17 35 17 35 17 35 39 2 166 222 78 78 78 222 1 83 78 253 107 2 149 253 107 2 149 0 0 0 3 255 217 254 112 2 127 1 161 0 5 0 11 0 15 0 39 0 187 0 13 0 1 0 14 0 4 43 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 6 208 184 0 4 16 184 0 8 208 48 49 3 33 17 35 17 35 37 33 21 35 17 35 1 33 21 33 39 1 44 78 222 1 122 1 44 222 78 254 134 2 166 253 90 1 5 253 107 2 71 78 78 253 185 3 49 78 0 0 2 255 217 0 183 2 127 3 232 0 7 0 11 0 31 0 187 0 9 0 1 0 10 0 4 43 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 48 49 3 33 17 51 17 33 21 33 21 33 21 33 39 1 44 78 1 44 253 90 2 166 253 90 1 161 2 71 253 185 78 78 78 0 1 255 217 1 5 2 127 3 232 0 11 0 29 0 187 0 9 0 1 0 10 0 4 43 184 0 9 16 184 0 0 208 184 0 9 16 184 0 4 208 48 49 3 51 17 51 17 51 17 51 17 51 21 33 39 222 78 78 78 222 253 90 1 83 2 149 253 107 2 149 253 107 78 0 0 0 3 255 217 0 183 2 127 3 232 0 5 0 11 0 15 0 39 0 187 0 13 0 1 0 14 0 4 43 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 8 208 184 0 4 16 184 0 10 208 48 49 3 51 17 51 17 33 1 51 17 51 21 33 5 33 21 33 39 222 78 254 212 1 122 78 222 254 212 254 134 2 166 253 90 1 161 2 71 253 107 2 149 253 185 78 78 78 0 0 1 255 217 254 112 2 127 3 232 0 19 0 55 0 187 0 9 0 1 0 10 0 4 43 187 0 5 0 1 0 6 0 4 43 184 0 5 16 184 0 0 208 184 0 10 16 184 0 14 208 184 0 9 16 184 0 16 208 184 0 6 16 184 0 18 208 48 49 3 33 17 51 17 33 21 33 21 33 21 33 17 35 17 33 53 33 53 33 39 1 44 78 1 44 254 212 1 44 254 212 78 254 212 1 44 254 212 1 161 2 71 253 185 78 78 78 253 185 2 71 78 78 0 0 1 255 217 254 112 2 127 3 232 0 19 0 45 0 187 0 9 0 1 0 10 0 4 43 184 0 9 16 184 0 0 208 184 0 9 16 184 0 4 208 184 0 10 16 184 0 14 208 184 0 10 16 184 0 18 208 48 49 3 51 17 51 17 51 17 51 17 51 21 35 17 35 17 35 17 35 17 35 39 222 78 78 78 222 222 78 78 78 222 1 83 2 149 253 107 2 149 253 107 78 253 107 2 149 253 107 2 149 0 0 0 0 4 255 217 254 112 2 127 3 232 0 5 0 11 0 17 0 23 0 55 0 187 0 7 0 1 0 10 0 4 43 187 0 1 0 1 0 4 0 4 43 184 0 1 16 184 0 14 208 184 0 4 16 184 0 16 208 184 0 7 16 184 0 18 208 184 0 10 16 184 0 20 208 48 49 3 51 17 51 17 33 21 33 17 35 17 35 1 51 17 51 21 33 21 33 21 35 17 35 39 222 78 254 212 1 44 78 222 1 122 78 222 254 212 1 44 222 78 1 161 2 71 253 107 78 253 107 2 71 3 49 253 185 78 78 78 253 185 0 0 0 1 1 5 254 112 2 127 1 83 0 15 0 13 0 187 0 6 0 1 0 7 0 4 43 48 49 33 52 62 2 59 1 21 35 34 14 2 21 17 35 1 5 53 92 124 70 39 39 54 95 71 41 78 70 124 92 53 78 41 71 95 54 254 112 0 0 0 0 1 255 217 254 112 1 83 1 83 0 15 0 13 0 187 0 10 0 1 0 7 0 4 43 48 49 1 35 17 52 46 2 43 1 53 51 50 30 2 21 1 83 78 41 71 95 54 39 39 70 124 92 53 254 112 1 144 54 95 71 41 78 53 92 124 70 0 0 1 255 217 1 5 1 83 3 232 0 15 0 13 0 187 0 8 0 1 0 5 0 4 43 48 49 1 20 14 2 43 1 53 51 50 62 2 53 17 51 1 83 53 92 124 70 39 39 54 95 71 41 78 2 88 70 124 92 53 78 41 71 95 54 1 144 0 0 1 1 5 1 5 2 127 3 232 0 15 0 13 0 187 0 8 0 1 0 9 0 4 43 48 49 1 51 17 20 30 2 59 1 21 35 34 46 2 53 1 5 78 41 71 95 54 39 39 70 124 92 53 3 232 254 112 54 95 71 41 78 53 92 124 70 0 0 1 255 217 255 17 2 127 3 71 0 5 0 11 0 186 0 0 0 3 0 3 43 48 49 1 51 21 1 35 53 2 49 78 253 168 78 3 71 78 252 24 78 0 0 1 255 217 255 17 2 127 3 71 0 5 0 11 0 186 0 5 0 2 0 3 43 48 49 5 21 35 1 53 51 2 127 78 253 168 78 161 78 3 232 78 0 0 0 1 255 217 255 17 2 127 3 71 0 15 0 47 0 186 0 2 0 6 0 3 43 186 0 0 0 6 0 2 17 18 57 186 0 8 0 6 0 2 17 18 57 184 0 6 16 184 0 9 208 184 0 2 16 184 0 14 208 48 49 9 1 51 21 9 1 21 35 9 1 35 53 9 1 53 51 1 44 1 5 78 254 235 1 21 78 254 251 254 251 78 1 21 254 235 78 1 148 1 179 78 254 51 254 51 78 1 179 254 77 78 1 205 1 205 78 0 0 0 0 1 255 217 1 5 1 83 1 83 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 3 33 21 33 39 1 122 254 134 1 83 78 0 0 1 1 5 1 5 1 83 3 232 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 1 51 17 35 1 5 78 78 3 232 253 29 0 0 0 0 1 1 5 1 5 2 127 1 83 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 1 33 21 33 1 5 1 122 254 134 1 83 78 0 1 1 5 254 112 1 83 1 83 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 1 51 17 35 1 5 78 78 1 83 253 29 0 0 0 0 1 255 217 0 222 1 83 1 122 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 3 33 21 33 39 1 122 254 134 1 122 156 0 0 0 0 1 0 222 1 5 1 122 3 232 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 17 35 222 156 156 3 232 253 29 0 1 1 5 0 222 2 127 1 122 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 1 33 21 33 1 5 1 122 254 134 1 122 156 0 0 0 1 0 222 254 112 1 122 1 83 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 17 35 222 156 156 1 83 253 29 0 1 255 217 0 222 2 127 1 122 0 7 0 13 0 187 0 1 0 1 0 6 0 4 43 48 49 3 33 53 33 21 33 53 33 39 1 44 1 122 254 134 254 212 1 83 39 156 39 0 0 0 0 1 0 222 254 112 1 122 3 232 0 7 0 11 0 186 0 3 0 6 0 3 43 48 49 19 51 17 51 17 51 17 35 222 39 78 39 156 1 83 2 149 253 107 253 29 0 0 0 1 255 217 0 222 2 127 1 122 0 7 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 3 33 21 33 21 33 21 33 39 1 122 1 44 254 212 254 134 1 122 39 78 39 0 0 0 0 1 0 222 254 112 1 122 3 232 0 7 0 11 0 186 0 1 0 4 0 3 43 48 49 19 51 17 35 17 35 17 35 222 156 39 78 39 3 232 253 29 253 107 2 149 0 0 0 1 0 0 1 44 2 88 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 3 32 254 12 0 0 0 0 1 0 0 255 56 2 88 255 181 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 21 33 21 33 2 88 253 168 75 125 0 0 1 0 0 255 56 2 88 0 50 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 53 33 21 33 2 88 253 168 50 250 0 0 1 0 0 255 56 2 88 0 175 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 53 33 17 33 2 88 253 168 175 254 137 0 1 0 0 255 56 2 88 1 44 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 1 44 254 12 0 0 0 0 1 0 0 255 56 2 88 1 169 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 1 169 253 143 0 0 0 0 1 0 0 255 56 2 88 2 38 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 2 38 253 18 0 0 0 0 1 0 0 255 56 2 88 2 163 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 2 163 252 149 0 0 0 0 1 0 0 255 56 2 88 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 88 253 168 3 32 252 24 0 0 0 0 1 0 0 255 56 2 13 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 2 13 253 243 3 32 252 24 0 0 0 0 1 0 0 255 56 1 194 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 1 194 254 62 3 32 252 24 0 0 0 0 1 0 0 255 56 1 119 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 1 119 254 137 3 32 252 24 0 0 0 0 1 0 0 255 56 1 44 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 1 44 254 212 3 32 252 24 0 0 0 0 1 0 0 255 56 0 225 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 51 17 35 225 225 3 32 252 24 0 0 1 0 0 255 56 0 150 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 51 17 35 150 150 3 32 252 24 0 0 1 0 0 255 56 0 75 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 51 17 35 75 75 3 32 252 24 0 0 1 1 44 255 56 2 88 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 1 33 17 33 1 44 1 44 254 212 3 32 252 24 0 0 4 0 0 255 56 2 88 3 32 0 2 0 6 0 10 0 14 0 47 0 186 0 8 0 1 0 3 43 186 0 4 0 1 0 8 17 18 57 184 0 1 16 184 0 5 208 184 0 8 16 184 0 11 208 186 0 14 0 1 0 8 17 18 57 48 49 21 23 35 17 53 1 35 1 51 1 21 1 51 1 21 30 30 1 74 30 254 212 30 2 58 254 212 30 1 14 150 50 1 244 50 253 218 3 232 252 74 50 3 232 254 62 50 0 0 0 8 0 0 255 56 2 88 3 32 0 2 0 6 0 10 0 14 0 18 0 22 0 26 0 30 0 119 0 186 0 16 0 1 0 3 43 186 0 4 0 1 0 16 17 18 57 184 0 1 16 184 0 5 208 186 0 8 0 1 0 16 17 18 57 184 0 1 16 184 0 9 208 186 0 12 0 1 0 16 17 18 57 184 0 1 16 184 0 13 208 184 0 16 16 184 0 19 208 186 0 22 0 1 0 16 17 18 57 184 0 16 16 184 0 23 208 186 0 26 0 1 0 16 17 18 57 184 0 16 16 184 0 27 208 186 0 30 0 1 0 16 17 18 57 48 49 21 23 35 61 1 19 35 3 53 1 35 1 53 1 35 1 51 1 21 1 51 1 21 1 51 1 21 3 51 23 21 30 30 180 30 150 1 74 30 254 212 1 224 30 254 62 30 2 58 254 62 30 1 164 254 212 30 1 14 150 30 120 150 50 250 50 254 212 1 244 50 253 218 2 238 50 252 224 3 232 252 74 50 3 232 253 68 50 2 238 254 62 50 1 244 200 50 0 16 0 0 255 56 2 88 3 32 0 2 0 6 0 10 0 14 0 18 0 22 0 26 0 30 0 34 0 38 0 42 0 46 0 50 0 54 0 58 0 62 1 7 0 186 0 32 0 1 0 3 43 186 0 4 0 1 0 32 17 18 57 184 0 1 16 184 0 5 208 186 0 8 0 1 0 32 17 18 57 184 0 1 16 184 0 9 208 186 0 12 0 1 0 32 17 18 57 184 0 1 16 184 0 13 208 186 0 16 0 1 0 32 17 18 57 184 0 1 16 184 0 17 208 186 0 20 0 1 0 32 17 18 57 184 0 1 16 184 0 21 208 186 0 24 0 1 0 32 17 18 57 184 0 1 16 184 0 25 208 186 0 28 0 1 0 32 17 18 57 184 0 1 16 184 0 29 208 184 0 32 16 184 0 35 208 186 0 38 0 1 0 32 17 18 57 184 0 32 16 184 0 39 208 186 0 42 0 1 0 32 17 18 57 184 0 32 16 184 0 43 208 186 0 46 0 1 0 32 17 18 57 184 0 32 16 184 0 47 208 186 0 50 0 1 0 32 17 18 57 184 0 32 16 184 0 51 208 186 0 54 0 1 0 32 17 18 57 184 0 32 16 184 0 55 208 186 0 58 0 1 0 32 17 18 57 184 0 32 16 184 0 59 208 186 0 62 0 1 0 32 17 18 57 48 49 21 23 35 61 1 23 35 39 53 19 35 3 53 19 35 3 53 1 35 1 53 1 35 1 53 1 35 1 53 1 35 1 51 1 21 1 51 1 21 1 51 1 21 1 51 1 21 1 51 1 21 3 51 19 21 3 51 23 21 39 51 23 21 30 30 105 30 75 180 30 150 255 30 225 1 74 30 254 212 1 149 30 254 137 1 224 30 254 62 2 43 30 253 243 30 2 58 253 243 30 1 239 254 62 30 1 164 254 137 30 1 89 254 212 30 1 14 225 30 195 150 30 120 75 30 45 150 50 125 50 175 250 50 254 212 1 119 50 254 87 1 244 50 253 218 2 113 50 253 93 2 238 50 252 224 3 107 50 252 99 3 232 252 74 50 3 232 252 199 50 3 107 253 68 50 2 238 253 193 50 2 113 254 62 50 1 244 254 187 50 1 119 200 50 250 75 50 0 1 0 0 2 163 2 88 3 32 0 3 0 13 0 184 0 2 47 185 0 1 0 1 244 48 49 17 33 21 33 2 88 253 168 3 32 125 0 0 0 1 2 13 255 56 2 88 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 1 51 17 35 2 13 75 75 3 32 252 24 0 0 0 0 1 0 0 255 56 1 44 1 44 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 1 44 254 212 1 44 254 12 0 0 0 0 1 1 44 255 56 2 88 1 44 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 1 33 17 33 1 44 1 44 254 212 1 44 254 12 0 0 1 0 0 1 44 1 44 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 1 44 254 212 3 32 254 12 0 0 0 0 1 0 0 255 56 2 88 3 32 0 5 0 11 0 184 0 5 47 184 0 0 220 48 49 17 33 17 33 17 33 1 44 1 44 253 168 3 32 254 12 254 12 0 0 2 0 0 255 56 2 88 3 32 0 3 0 7 0 11 0 184 0 6 47 184 0 0 220 48 49 1 17 33 17 1 17 33 17 1 44 254 212 2 88 254 212 3 32 254 12 1 244 254 12 254 12 1 244 0 0 1 0 0 255 56 2 88 3 32 0 5 0 11 0 184 0 5 47 184 0 0 220 48 49 17 33 17 33 17 33 2 88 254 212 254 212 3 32 254 12 254 12 0 0 1 0 0 255 56 2 88 3 32 0 5 0 11 0 184 0 2 47 184 0 1 220 48 49 17 33 17 33 17 33 2 88 254 212 254 212 3 32 252 24 1 244 0 0 1 1 44 1 44 2 88 3 32 0 3 0 11 0 184 0 2 47 184 0 1 220 48 49 1 33 17 33 1 44 1 44 254 212 3 32 254 12 0 0 2 0 0 255 56 2 88 3 32 0 3 0 7 0 11 0 184 0 2 47 184 0 4 220 48 49 17 33 17 33 1 33 17 33 1 44 254 212 1 44 1 44 254 212 1 44 254 12 3 232 254 12 0 0 0 0 1 0 0 255 56 2 88 3 32 0 5 0 11 0 184 0 4 47 184 0 3 220 48 49 17 33 17 33 17 33 1 44 1 44 253 168 1 44 1 244 252 24 0 0 0 0 34 1 158 0 1 0 0 0 0 0 0 0 69 0 0 0 1 0 0 0 0 0 1 0 15 0 69 0 1 0 0 0 0 0 2 0 7 0 84 0 1 0 0 0 0 0 3 0 38 0 91 0 1 0 0 0 0 0 4 0 15 0 69 0 1 0 0 0 0 0 5 0 65 0 129 0 1 0 0 0 0 0 6 0 21 0 194 0 1 0 0 0 0 0 7 0 96 0 215 0 1 0 0 0 0 0 8 0 26 1 55 0 1 0 0 0 0 0 9 0 12 1 81 0 1 0 0 0 0 0 11 0 25 1 93 0 1 0 0 0 0 0 13 17 217 1 118 0 1 0 0 0 0 0 14 0 36 19 79 0 1 0 0 0 0 1 0 0 22 19 115 0 1 0 0 0 0 1 1 0 11 19 137 0 1 0 0 0 0 1 2 0 11 19 148 0 1 0 0 0 0 1 3 0 21 19 159 0 3 0 1 4 9 0 0 0 138 19 180 0 3 0 1 4 9 0 1 0 30 20 62 0 3 0 1 4 9 0 2 0 14 20 92 0 3 0 1 4 9 0 3 0 76 20 106 0 3 0 1 4 9 0 4 0 30 20 62 0 3 0 1 4 9 0 5 0 130 20 182 0 3 0 1 4 9 0 6 0 42 21 56 0 3 0 1 4 9 0 7 0 192 21 98 0 3 0 1 4 9 0 8 0 52 22 34 0 3 0 1 4 9 0 9 0 24 22 86 0 3 0 1 4 9 0 11 0 50 22 110 0 3 0 1 4 9 0 13 35 182 22 160 0 3 0 1 4 9 0 14 0 72 58 86 0 3 0 1 4 9 1 0 0 44 58 158 0 3 0 1 4 9 1 1 0 22 58 202 0 3 0 1 4 9 1 2 0 22 58 224 0 3 0 1 4 9 1 3 0 42 58 246 67 111 112 121 114 105 103 104 116 32 50 48 49 48 44 32 50 48 49 50 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 46 32 65 108 108 32 82 105 103 104 116 115 32 82 101 115 101 114 118 101 100 46 83 111 117 114 99 101 32 67 111 100 101 32 80 114 111 82 101 103 117 108 97 114 49 46 48 49 55 59 65 68 66 69 59 83 111 117 114 99 101 67 111 100 101 80 114 111 45 82 101 103 117 108 97 114 59 65 68 79 66 69 86 101 114 115 105 111 110 32 49 46 48 49 55 59 80 83 32 86 101 114 115 105 111 110 32 49 46 48 48 48 59 104 111 116 99 111 110 118 32 49 46 48 46 55 48 59 109 97 107 101 111 116 102 46 108 105 98 50 46 53 46 53 57 48 48 83 111 117 114 99 101 67 111 100 101 80 114 111 45 82 101 103 117 108 97 114 83 111 117 114 99 101 32 105 115 32 97 32 116 114 97 100 101 109 97 114 107 32 111 102 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 105 110 32 116 104 101 32 85 110 105 116 101 100 32 83 116 97 116 101 115 32 97 110 100 47 111 114 32 111 116 104 101 114 32 99 111 117 110 116 114 105 101 115 46 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 80 97 117 108 32 68 46 32 72 117 110 116 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 116 121 112 101 67 111 112 121 114 105 103 104 116 32 50 48 49 48 44 32 50 48 49 50 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 40 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 41 44 32 119 105 116 104 32 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 32 39 83 111 117 114 99 101 39 46 32 65 108 108 32 82 105 103 104 116 115 32 82 101 115 101 114 118 101 100 46 32 83 111 117 114 99 101 32 105 115 32 97 32 116 114 97 100 101 109 97 114 107 32 111 102 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 105 110 32 116 104 101 32 85 110 105 116 101 100 32 83 116 97 116 101 115 32 97 110 100 47 111 114 32 111 116 104 101 114 32 99 111 117 110 116 114 105 101 115 46 13 10 13 10 84 104 105 115 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 105 115 32 108 105 99 101 110 115 101 100 32 117 110 100 101 114 32 116 104 101 32 83 73 76 32 79 112 101 110 32 70 111 110 116 32 76 105 99 101 110 115 101 44 32 86 101 114 115 105 111 110 32 49 46 49 46 13 10 13 10 84 104 105 115 32 108 105 99 101 110 115 101 32 105 115 32 99 111 112 105 101 100 32 98 101 108 111 119 44 32 97 110 100 32 105 115 32 97 108 115 111 32 97 118 97 105 108 97 98 108 101 32 119 105 116 104 32 97 32 70 65 81 32 97 116 58 32 104 116 116 112 58 47 47 115 99 114 105 112 116 115 46 115 105 108 46 111 114 103 47 79 70 76 13 10 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 13 10 83 73 76 32 79 80 69 78 32 70 79 78 84 32 76 73 67 69 78 83 69 32 86 101 114 115 105 111 110 32 49 46 49 32 45 32 50 54 32 70 101 98 114 117 97 114 121 32 50 48 48 55 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 13 10 13 10 80 82 69 65 77 66 76 69 13 10 84 104 101 32 103 111 97 108 115 32 111 102 32 116 104 101 32 79 112 101 110 32 70 111 110 116 32 76 105 99 101 110 115 101 32 40 79 70 76 41 32 97 114 101 32 116 111 32 115 116 105 109 117 108 97 116 101 32 119 111 114 108 100 119 105 100 101 32 100 101 118 101 108 111 112 109 101 110 116 32 111 102 32 99 111 108 108 97 98 111 114 97 116 105 118 101 32 102 111 110 116 32 112 114 111 106 101 99 116 115 44 32 116 111 32 115 117 112 112 111 114 116 32 116 104 101 32 102 111 110 116 32 99 114 101 97 116 105 111 110 32 101 102 102 111 114 116 115 32 111 102 32 97 99 97 100 101 109 105 99 32 97 110 100 32 108 105 110 103 117 105 115 116 105 99 32 99 111 109 109 117 110 105 116 105 101 115 44 32 97 110 100 32 116 111 32 112 114 111 118 105 100 101 32 97 32 102 114 101 101 32 97 110 100 32 111 112 101 110 32 102 114 97 109 101 119 111 114 107 32 105 110 32 119 104 105 99 104 32 102 111 110 116 115 32 109 97 121 32 98 101 32 115 104 97 114 101 100 32 97 110 100 32 105 109 112 114 111 118 101 100 32 105 110 32 112 97 114 116 110 101 114 115 104 105 112 32 119 105 116 104 32 111 116 104 101 114 115 46 13 10 13 10 84 104 101 32 79 70 76 32 97 108 108 111 119 115 32 116 104 101 32 108 105 99 101 110 115 101 100 32 102 111 110 116 115 32 116 111 32 98 101 32 117 115 101 100 44 32 115 116 117 100 105 101 100 44 32 109 111 100 105 102 105 101 100 32 97 110 100 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 102 114 101 101 108 121 32 97 115 32 108 111 110 103 32 97 115 32 116 104 101 121 32 97 114 101 32 110 111 116 32 115 111 108 100 32 98 121 32 116 104 101 109 115 101 108 118 101 115 46 32 84 104 101 32 102 111 110 116 115 44 32 105 110 99 108 117 100 105 110 103 32 97 110 121 32 100 101 114 105 118 97 116 105 118 101 32 119 111 114 107 115 44 32 99 97 110 32 98 101 32 98 117 110 100 108 101 100 44 32 101 109 98 101 100 100 101 100 44 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 97 110 100 47 111 114 32 115 111 108 100 32 119 105 116 104 32 97 110 121 32 115 111 102 116 119 97 114 101 32 112 114 111 118 105 100 101 100 32 116 104 97 116 32 97 110 121 32 114 101 115 101 114 118 101 100 32 110 97 109 101 115 32 97 114 101 32 110 111 116 32 117 115 101 100 32 98 121 32 100 101 114 105 118 97 116 105 118 101 32 119 111 114 107 115 46 32 84 104 101 32 102 111 110 116 115 32 97 110 100 32 100 101 114 105 118 97 116 105 118 101 115 44 32 104 111 119 101 118 101 114 44 32 99 97 110 110 111 116 32 98 101 32 114 101 108 101 97 115 101 100 32 117 110 100 101 114 32 97 110 121 32 111 116 104 101 114 32 116 121 112 101 32 111 102 32 108 105 99 101 110 115 101 46 32 84 104 101 32 114 101 113 117 105 114 101 109 101 110 116 32 102 111 114 32 102 111 110 116 115 32 116 111 32 114 101 109 97 105 110 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 100 111 101 115 32 110 111 116 32 97 112 112 108 121 32 116 111 32 97 110 121 32 100 111 99 117 109 101 110 116 32 99 114 101 97 116 101 100 32 117 115 105 110 103 32 116 104 101 32 102 111 110 116 115 32 111 114 32 116 104 101 105 114 32 100 101 114 105 118 97 116 105 118 101 115 46 13 10 13 10 68 69 70 73 78 73 84 73 79 78 83 13 10 34 70 111 110 116 32 83 111 102 116 119 97 114 101 34 32 114 101 102 101 114 115 32 116 111 32 116 104 101 32 115 101 116 32 111 102 32 102 105 108 101 115 32 114 101 108 101 97 115 101 100 32 98 121 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 97 110 100 32 99 108 101 97 114 108 121 32 109 97 114 107 101 100 32 97 115 32 115 117 99 104 46 32 84 104 105 115 32 109 97 121 32 105 110 99 108 117 100 101 32 115 111 117 114 99 101 32 102 105 108 101 115 44 32 98 117 105 108 100 32 115 99 114 105 112 116 115 32 97 110 100 32 100 111 99 117 109 101 110 116 97 116 105 111 110 46 13 10 13 10 34 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 110 97 109 101 115 32 115 112 101 99 105 102 105 101 100 32 97 115 32 115 117 99 104 32 97 102 116 101 114 32 116 104 101 32 99 111 112 121 114 105 103 104 116 32 115 116 97 116 101 109 101 110 116 40 115 41 46 13 10 13 10 34 79 114 105 103 105 110 97 108 32 86 101 114 115 105 111 110 34 32 114 101 102 101 114 115 32 116 111 32 116 104 101 32 99 111 108 108 101 99 116 105 111 110 32 111 102 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 99 111 109 112 111 110 101 110 116 115 32 97 115 32 100 105 115 116 114 105 98 117 116 101 100 32 98 121 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 46 13 10 13 10 34 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 100 101 114 105 118 97 116 105 118 101 32 109 97 100 101 32 98 121 32 97 100 100 105 110 103 32 116 111 44 32 100 101 108 101 116 105 110 103 44 32 111 114 32 115 117 98 115 116 105 116 117 116 105 110 103 32 45 45 32 105 110 32 112 97 114 116 32 111 114 32 105 110 32 119 104 111 108 101 32 45 45 32 97 110 121 32 111 102 32 116 104 101 32 99 111 109 112 111 110 101 110 116 115 32 111 102 32 116 104 101 32 79 114 105 103 105 110 97 108 32 86 101 114 115 105 111 110 44 32 98 121 32 99 104 97 110 103 105 110 103 32 102 111 114 109 97 116 115 32 111 114 32 98 121 32 112 111 114 116 105 110 103 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 116 111 32 97 32 110 101 119 32 101 110 118 105 114 111 110 109 101 110 116 46 13 10 13 10 34 65 117 116 104 111 114 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 100 101 115 105 103 110 101 114 44 32 101 110 103 105 110 101 101 114 44 32 112 114 111 103 114 97 109 109 101 114 44 32 116 101 99 104 110 105 99 97 108 32 119 114 105 116 101 114 32 111 114 32 111 116 104 101 114 32 112 101 114 115 111 110 32 119 104 111 32 99 111 110 116 114 105 98 117 116 101 100 32 116 111 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 46 13 10 13 10 80 69 82 77 73 83 83 73 79 78 32 38 32 67 79 78 68 73 84 73 79 78 83 13 10 80 101 114 109 105 115 115 105 111 110 32 105 115 32 104 101 114 101 98 121 32 103 114 97 110 116 101 100 44 32 102 114 101 101 32 111 102 32 99 104 97 114 103 101 44 32 116 111 32 97 110 121 32 112 101 114 115 111 110 32 111 98 116 97 105 110 105 110 103 32 97 32 99 111 112 121 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 116 111 32 117 115 101 44 32 115 116 117 100 121 44 32 99 111 112 121 44 32 109 101 114 103 101 44 32 101 109 98 101 100 44 32 109 111 100 105 102 121 44 32 114 101 100 105 115 116 114 105 98 117 116 101 44 32 97 110 100 32 115 101 108 108 32 109 111 100 105 102 105 101 100 32 97 110 100 32 117 110 109 111 100 105 102 105 101 100 32 99 111 112 105 101 115 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 115 117 98 106 101 99 116 32 116 111 32 116 104 101 32 102 111 108 108 111 119 105 110 103 32 99 111 110 100 105 116 105 111 110 115 58 13 10 13 10 49 41 32 78 101 105 116 104 101 114 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 110 111 114 32 97 110 121 32 111 102 32 105 116 115 32 105 110 100 105 118 105 100 117 97 108 32 99 111 109 112 111 110 101 110 116 115 44 32 105 110 32 79 114 105 103 105 110 97 108 32 111 114 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 115 44 32 109 97 121 32 98 101 32 115 111 108 100 32 98 121 32 105 116 115 101 108 102 46 13 10 13 10 50 41 32 79 114 105 103 105 110 97 108 32 111 114 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 115 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 109 97 121 32 98 101 32 98 117 110 100 108 101 100 44 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 97 110 100 47 111 114 32 115 111 108 100 32 119 105 116 104 32 97 110 121 32 115 111 102 116 119 97 114 101 44 32 112 114 111 118 105 100 101 100 32 116 104 97 116 32 101 97 99 104 32 99 111 112 121 32 99 111 110 116 97 105 110 115 32 116 104 101 32 97 98 111 118 101 32 99 111 112 121 114 105 103 104 116 32 110 111 116 105 99 101 32 97 110 100 32 116 104 105 115 32 108 105 99 101 110 115 101 46 32 84 104 101 115 101 32 99 97 110 32 98 101 32 105 110 99 108 117 100 101 100 32 101 105 116 104 101 114 32 97 115 32 115 116 97 110 100 45 97 108 111 110 101 32 116 101 120 116 32 102 105 108 101 115 44 32 104 117 109 97 110 45 114 101 97 100 97 98 108 101 32 104 101 97 100 101 114 115 32 111 114 32 105 110 32 116 104 101 32 97 112 112 114 111 112 114 105 97 116 101 32 109 97 99 104 105 110 101 45 114 101 97 100 97 98 108 101 32 109 101 116 97 100 97 116 97 32 102 105 101 108 100 115 32 119 105 116 104 105 110 32 116 101 120 116 32 111 114 32 98 105 110 97 114 121 32 102 105 108 101 115 32 97 115 32 108 111 110 103 32 97 115 32 116 104 111 115 101 32 102 105 101 108 100 115 32 99 97 110 32 98 101 32 101 97 115 105 108 121 32 118 105 101 119 101 100 32 98 121 32 116 104 101 32 117 115 101 114 46 13 10 13 10 51 41 32 78 111 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 109 97 121 32 117 115 101 32 116 104 101 32 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 40 115 41 32 117 110 108 101 115 115 32 101 120 112 108 105 99 105 116 32 119 114 105 116 116 101 110 32 112 101 114 109 105 115 115 105 111 110 32 105 115 32 103 114 97 110 116 101 100 32 98 121 32 116 104 101 32 99 111 114 114 101 115 112 111 110 100 105 110 103 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 46 32 84 104 105 115 32 114 101 115 116 114 105 99 116 105 111 110 32 111 110 108 121 32 97 112 112 108 105 101 115 32 116 111 32 116 104 101 32 112 114 105 109 97 114 121 32 102 111 110 116 32 110 97 109 101 32 97 115 32 112 114 101 115 101 110 116 101 100 32 116 111 32 116 104 101 32 117 115 101 114 115 46 13 10 13 10 52 41 32 84 104 101 32 110 97 109 101 40 115 41 32 111 102 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 111 114 32 116 104 101 32 65 117 116 104 111 114 40 115 41 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 115 104 97 108 108 32 110 111 116 32 98 101 32 117 115 101 100 32 116 111 32 112 114 111 109 111 116 101 44 32 101 110 100 111 114 115 101 32 111 114 32 97 100 118 101 114 116 105 115 101 32 97 110 121 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 44 32 101 120 99 101 112 116 32 116 111 32 97 99 107 110 111 119 108 101 100 103 101 32 116 104 101 32 99 111 110 116 114 105 98 117 116 105 111 110 40 115 41 32 111 102 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 97 110 100 32 116 104 101 32 65 117 116 104 111 114 40 115 41 32 111 114 32 119 105 116 104 32 116 104 101 105 114 32 101 120 112 108 105 99 105 116 32 119 114 105 116 116 101 110 32 112 101 114 109 105 115 115 105 111 110 46 13 10 13 10 53 41 32 84 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 109 111 100 105 102 105 101 100 32 111 114 32 117 110 109 111 100 105 102 105 101 100 44 32 105 110 32 112 97 114 116 32 111 114 32 105 110 32 119 104 111 108 101 44 32 109 117 115 116 32 98 101 32 100 105 115 116 114 105 98 117 116 101 100 32 101 110 116 105 114 101 108 121 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 44 32 97 110 100 32 109 117 115 116 32 110 111 116 32 98 101 32 100 105 115 116 114 105 98 117 116 101 100 32 117 110 100 101 114 32 97 110 121 32 111 116 104 101 114 32 108 105 99 101 110 115 101 46 32 84 104 101 32 114 101 113 117 105 114 101 109 101 110 116 32 102 111 114 32 102 111 110 116 115 32 116 111 32 114 101 109 97 105 110 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 100 111 101 115 32 110 111 116 32 97 112 112 108 121 32 116 111 32 97 110 121 32 100 111 99 117 109 101 110 116 32 99 114 101 97 116 101 100 32 117 115 105 110 103 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 46 13 10 13 10 84 69 82 77 73 78 65 84 73 79 78 13 10 84 104 105 115 32 108 105 99 101 110 115 101 32 98 101 99 111 109 101 115 32 110 117 108 108 32 97 110 100 32 118 111 105 100 32 105 102 32 97 110 121 32 111 102 32 116 104 101 32 97 98 111 118 101 32 99 111 110 100 105 116 105 111 110 115 32 97 114 101 32 110 111 116 32 109 101 116 46 13 10 13 10 68 73 83 67 76 65 73 77 69 82 13 10 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 32 73 83 32 80 82 79 86 73 68 69 68 32 34 65 83 32 73 83 34 44 32 87 73 84 72 79 85 84 32 87 65 82 82 65 78 84 89 32 79 70 32 65 78 89 32 75 73 78 68 44 32 69 88 80 82 69 83 83 32 79 82 32 73 77 80 76 73 69 68 44 32 73 78 67 76 85 68 73 78 71 32 66 85 84 32 78 79 84 32 76 73 77 73 84 69 68 32 84 79 32 65 78 89 32 87 65 82 82 65 78 84 73 69 83 32 79 70 32 77 69 82 67 72 65 78 84 65 66 73 76 73 84 89 44 32 70 73 84 78 69 83 83 32 70 79 82 32 65 32 80 65 82 84 73 67 85 76 65 82 32 80 85 82 80 79 83 69 32 65 78 68 32 78 79 78 73 78 70 82 73 78 71 69 77 69 78 84 32 79 70 32 67 79 80 89 82 73 71 72 84 44 32 80 65 84 69 78 84 44 32 84 82 65 68 69 77 65 82 75 44 32 79 82 32 79 84 72 69 82 32 82 73 71 72 84 46 32 73 78 32 78 79 32 69 86 69 78 84 32 83 72 65 76 76 32 84 72 69 32 67 79 80 89 82 73 71 72 84 32 72 79 76 68 69 82 32 66 69 32 76 73 65 66 76 69 32 70 79 82 32 65 78 89 32 67 76 65 73 77 44 32 68 65 77 65 71 69 83 32 79 82 32 79 84 72 69 82 32 76 73 65 66 73 76 73 84 89 44 32 73 78 67 76 85 68 73 78 71 32 65 78 89 32 71 69 78 69 82 65 76 44 32 83 80 69 67 73 65 76 44 32 73 78 68 73 82 69 67 84 44 32 73 78 67 73 68 69 78 84 65 76 44 32 79 82 32 67 79 78 83 69 81 85 69 78 84 73 65 76 32 68 65 77 65 71 69 83 44 32 87 72 69 84 72 69 82 32 73 78 32 65 78 32 65 67 84 73 79 78 32 79 70 32 67 79 78 84 82 65 67 84 44 32 84 79 82 84 32 79 82 32 79 84 72 69 82 87 73 83 69 44 32 65 82 73 83 73 78 71 32 70 82 79 77 44 32 79 85 84 32 79 70 32 84 72 69 32 85 83 69 32 79 82 32 73 78 65 66 73 76 73 84 89 32 84 79 32 85 83 69 32 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 32 79 82 32 70 82 79 77 32 79 84 72 69 82 32 68 69 65 76 73 78 71 83 32 73 78 32 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 46 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 116 121 112 101 47 108 101 103 97 108 46 104 116 109 108 84 121 112 111 103 114 97 112 104 105 99 32 97 108 116 101 114 110 97 116 101 115 65 108 116 101 114 110 97 116 101 32 97 65 108 116 101 114 110 97 116 101 32 103 65 108 116 101 114 110 97 116 101 32 100 111 108 108 97 114 32 115 105 103 110 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 50 0 48 0 49 0 48 0 44 0 32 0 50 0 48 0 49 0 50 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 46 0 32 0 65 0 108 0 108 0 32 0 82 0 105 0 103 0 104 0 116 0 115 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 46 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 67 0 111 0 100 0 101 0 32 0 80 0 114 0 111 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 49 0 46 0 48 0 49 0 55 0 59 0 65 0 68 0 66 0 69 0 59 0 83 0 111 0 117 0 114 0 99 0 101 0 67 0 111 0 100 0 101 0 80 0 114 0 111 0 45 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 59 0 65 0 68 0 79 0 66 0 69 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 48 0 49 0 55 0 59 0 80 0 83 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 48 0 48 0 48 0 59 0 104 0 111 0 116 0 99 0 111 0 110 0 118 0 32 0 49 0 46 0 48 0 46 0 55 0 48 0 59 0 109 0 97 0 107 0 101 0 111 0 116 0 102 0 46 0 108 0 105 0 98 0 50 0 46 0 53 0 46 0 53 0 57 0 48 0 48 0 83 0 111 0 117 0 114 0 99 0 101 0 67 0 111 0 100 0 101 0 80 0 114 0 111 0 45 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 105 0 115 0 32 0 97 0 32 0 116 0 114 0 97 0 100 0 101 0 109 0 97 0 114 0 107 0 32 0 111 0 102 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 85 0 110 0 105 0 116 0 101 0 100 0 32 0 83 0 116 0 97 0 116 0 101 0 115 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 99 0 111 0 117 0 110 0 116 0 114 0 105 0 101 0 115 0 46 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 80 0 97 0 117 0 108 0 32 0 68 0 46 0 32 0 72 0 117 0 110 0 116 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 116 0 121 0 112 0 101 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 50 0 48 0 49 0 48 0 44 0 32 0 50 0 48 0 49 0 50 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 40 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 41 0 44 0 32 0 119 0 105 0 116 0 104 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 32 0 39 0 83 0 111 0 117 0 114 0 99 0 101 0 39 0 46 0 32 0 65 0 108 0 108 0 32 0 82 0 105 0 103 0 104 0 116 0 115 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 46 0 32 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 105 0 115 0 32 0 97 0 32 0 116 0 114 0 97 0 100 0 101 0 109 0 97 0 114 0 107 0 32 0 111 0 102 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 85 0 110 0 105 0 116 0 101 0 100 0 32 0 83 0 116 0 97 0 116 0 101 0 115 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 99 0 111 0 117 0 110 0 116 0 114 0 105 0 101 0 115 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 83 0 73 0 76 0 32 0 79 0 112 0 101 0 110 0 32 0 70 0 111 0 110 0 116 0 32 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 44 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 49 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 105 0 115 0 32 0 99 0 111 0 112 0 105 0 101 0 100 0 32 0 98 0 101 0 108 0 111 0 119 0 44 0 32 0 97 0 110 0 100 0 32 0 105 0 115 0 32 0 97 0 108 0 115 0 111 0 32 0 97 0 118 0 97 0 105 0 108 0 97 0 98 0 108 0 101 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 32 0 70 0 65 0 81 0 32 0 97 0 116 0 58 0 32 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 115 0 99 0 114 0 105 0 112 0 116 0 115 0 46 0 115 0 105 0 108 0 46 0 111 0 114 0 103 0 47 0 79 0 70 0 76 0 13 0 10 0 13 0 10 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 13 0 10 0 83 0 73 0 76 0 32 0 79 0 80 0 69 0 78 0 32 0 70 0 79 0 78 0 84 0 32 0 76 0 73 0 67 0 69 0 78 0 83 0 69 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 49 0 32 0 45 0 32 0 50 0 54 0 32 0 70 0 101 0 98 0 114 0 117 0 97 0 114 0 121 0 32 0 50 0 48 0 48 0 55 0 13 0 10 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 13 0 10 0 13 0 10 0 80 0 82 0 69 0 65 0 77 0 66 0 76 0 69 0 13 0 10 0 84 0 104 0 101 0 32 0 103 0 111 0 97 0 108 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 79 0 112 0 101 0 110 0 32 0 70 0 111 0 110 0 116 0 32 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 40 0 79 0 70 0 76 0 41 0 32 0 97 0 114 0 101 0 32 0 116 0 111 0 32 0 115 0 116 0 105 0 109 0 117 0 108 0 97 0 116 0 101 0 32 0 119 0 111 0 114 0 108 0 100 0 119 0 105 0 100 0 101 0 32 0 100 0 101 0 118 0 101 0 108 0 111 0 112 0 109 0 101 0 110 0 116 0 32 0 111 0 102 0 32 0 99 0 111 0 108 0 108 0 97 0 98 0 111 0 114 0 97 0 116 0 105 0 118 0 101 0 32 0 102 0 111 0 110 0 116 0 32 0 112 0 114 0 111 0 106 0 101 0 99 0 116 0 115 0 44 0 32 0 116 0 111 0 32 0 115 0 117 0 112 0 112 0 111 0 114 0 116 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 105 0 111 0 110 0 32 0 101 0 102 0 102 0 111 0 114 0 116 0 115 0 32 0 111 0 102 0 32 0 97 0 99 0 97 0 100 0 101 0 109 0 105 0 99 0 32 0 97 0 110 0 100 0 32 0 108 0 105 0 110 0 103 0 117 0 105 0 115 0 116 0 105 0 99 0 32 0 99 0 111 0 109 0 109 0 117 0 110 0 105 0 116 0 105 0 101 0 115 0 44 0 32 0 97 0 110 0 100 0 32 0 116 0 111 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 32 0 97 0 32 0 102 0 114 0 101 0 101 0 32 0 97 0 110 0 100 0 32 0 111 0 112 0 101 0 110 0 32 0 102 0 114 0 97 0 109 0 101 0 119 0 111 0 114 0 107 0 32 0 105 0 110 0 32 0 119 0 104 0 105 0 99 0 104 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 115 0 104 0 97 0 114 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 105 0 109 0 112 0 114 0 111 0 118 0 101 0 100 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 110 0 101 0 114 0 115 0 104 0 105 0 112 0 32 0 119 0 105 0 116 0 104 0 32 0 111 0 116 0 104 0 101 0 114 0 115 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 101 0 32 0 79 0 70 0 76 0 32 0 97 0 108 0 108 0 111 0 119 0 115 0 32 0 116 0 104 0 101 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 100 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 98 0 101 0 32 0 117 0 115 0 101 0 100 0 44 0 32 0 115 0 116 0 117 0 100 0 105 0 101 0 100 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 102 0 114 0 101 0 101 0 108 0 121 0 32 0 97 0 115 0 32 0 108 0 111 0 110 0 103 0 32 0 97 0 115 0 32 0 116 0 104 0 101 0 121 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 115 0 111 0 108 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 109 0 115 0 101 0 108 0 118 0 101 0 115 0 46 0 32 0 84 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 44 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 105 0 110 0 103 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 119 0 111 0 114 0 107 0 115 0 44 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 98 0 117 0 110 0 100 0 108 0 101 0 100 0 44 0 32 0 101 0 109 0 98 0 101 0 100 0 100 0 101 0 100 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 115 0 111 0 108 0 100 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 110 0 121 0 32 0 115 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 100 0 32 0 116 0 104 0 97 0 116 0 32 0 97 0 110 0 121 0 32 0 114 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 110 0 97 0 109 0 101 0 115 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 117 0 115 0 101 0 100 0 32 0 98 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 119 0 111 0 114 0 107 0 115 0 46 0 32 0 84 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 97 0 110 0 100 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 115 0 44 0 32 0 104 0 111 0 119 0 101 0 118 0 101 0 114 0 44 0 32 0 99 0 97 0 110 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 114 0 101 0 108 0 101 0 97 0 115 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 116 0 121 0 112 0 101 0 32 0 111 0 102 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 32 0 114 0 101 0 113 0 117 0 105 0 114 0 101 0 109 0 101 0 110 0 116 0 32 0 102 0 111 0 114 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 114 0 101 0 109 0 97 0 105 0 110 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 100 0 111 0 101 0 115 0 32 0 110 0 111 0 116 0 32 0 97 0 112 0 112 0 108 0 121 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 101 0 100 0 32 0 117 0 115 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 111 0 114 0 32 0 116 0 104 0 101 0 105 0 114 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 115 0 46 0 13 0 10 0 13 0 10 0 68 0 69 0 70 0 73 0 78 0 73 0 84 0 73 0 79 0 78 0 83 0 13 0 10 0 34 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 115 0 101 0 116 0 32 0 111 0 102 0 32 0 102 0 105 0 108 0 101 0 115 0 32 0 114 0 101 0 108 0 101 0 97 0 115 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 97 0 110 0 100 0 32 0 99 0 108 0 101 0 97 0 114 0 108 0 121 0 32 0 109 0 97 0 114 0 107 0 101 0 100 0 32 0 97 0 115 0 32 0 115 0 117 0 99 0 104 0 46 0 32 0 84 0 104 0 105 0 115 0 32 0 109 0 97 0 121 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 101 0 32 0 115 0 111 0 117 0 114 0 99 0 101 0 32 0 102 0 105 0 108 0 101 0 115 0 44 0 32 0 98 0 117 0 105 0 108 0 100 0 32 0 115 0 99 0 114 0 105 0 112 0 116 0 115 0 32 0 97 0 110 0 100 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 97 0 116 0 105 0 111 0 110 0 46 0 13 0 10 0 13 0 10 0 34 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 110 0 97 0 109 0 101 0 115 0 32 0 115 0 112 0 101 0 99 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 115 0 32 0 115 0 117 0 99 0 104 0 32 0 97 0 102 0 116 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 115 0 116 0 97 0 116 0 101 0 109 0 101 0 110 0 116 0 40 0 115 0 41 0 46 0 13 0 10 0 13 0 10 0 34 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 108 0 108 0 101 0 99 0 116 0 105 0 111 0 110 0 32 0 111 0 102 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 32 0 97 0 115 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 46 0 13 0 10 0 13 0 10 0 34 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 109 0 97 0 100 0 101 0 32 0 98 0 121 0 32 0 97 0 100 0 100 0 105 0 110 0 103 0 32 0 116 0 111 0 44 0 32 0 100 0 101 0 108 0 101 0 116 0 105 0 110 0 103 0 44 0 32 0 111 0 114 0 32 0 115 0 117 0 98 0 115 0 116 0 105 0 116 0 117 0 116 0 105 0 110 0 103 0 32 0 45 0 45 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 119 0 104 0 111 0 108 0 101 0 32 0 45 0 45 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 44 0 32 0 98 0 121 0 32 0 99 0 104 0 97 0 110 0 103 0 105 0 110 0 103 0 32 0 102 0 111 0 114 0 109 0 97 0 116 0 115 0 32 0 111 0 114 0 32 0 98 0 121 0 32 0 112 0 111 0 114 0 116 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 116 0 111 0 32 0 97 0 32 0 110 0 101 0 119 0 32 0 101 0 110 0 118 0 105 0 114 0 111 0 110 0 109 0 101 0 110 0 116 0 46 0 13 0 10 0 13 0 10 0 34 0 65 0 117 0 116 0 104 0 111 0 114 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 115 0 105 0 103 0 110 0 101 0 114 0 44 0 32 0 101 0 110 0 103 0 105 0 110 0 101 0 101 0 114 0 44 0 32 0 112 0 114 0 111 0 103 0 114 0 97 0 109 0 109 0 101 0 114 0 44 0 32 0 116 0 101 0 99 0 104 0 110 0 105 0 99 0 97 0 108 0 32 0 119 0 114 0 105 0 116 0 101 0 114 0 32 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 112 0 101 0 114 0 115 0 111 0 110 0 32 0 119 0 104 0 111 0 32 0 99 0 111 0 110 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 46 0 13 0 10 0 13 0 10 0 80 0 69 0 82 0 77 0 73 0 83 0 83 0 73 0 79 0 78 0 32 0 38 0 32 0 67 0 79 0 78 0 68 0 73 0 84 0 73 0 79 0 78 0 83 0 13 0 10 0 80 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 32 0 105 0 115 0 32 0 104 0 101 0 114 0 101 0 98 0 121 0 32 0 103 0 114 0 97 0 110 0 116 0 101 0 100 0 44 0 32 0 102 0 114 0 101 0 101 0 32 0 111 0 102 0 32 0 99 0 104 0 97 0 114 0 103 0 101 0 44 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 112 0 101 0 114 0 115 0 111 0 110 0 32 0 111 0 98 0 116 0 97 0 105 0 110 0 105 0 110 0 103 0 32 0 97 0 32 0 99 0 111 0 112 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 116 0 111 0 32 0 117 0 115 0 101 0 44 0 32 0 115 0 116 0 117 0 100 0 121 0 44 0 32 0 99 0 111 0 112 0 121 0 44 0 32 0 109 0 101 0 114 0 103 0 101 0 44 0 32 0 101 0 109 0 98 0 101 0 100 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 121 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 44 0 32 0 97 0 110 0 100 0 32 0 115 0 101 0 108 0 108 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 117 0 110 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 99 0 111 0 112 0 105 0 101 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 115 0 117 0 98 0 106 0 101 0 99 0 116 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 108 0 108 0 111 0 119 0 105 0 110 0 103 0 32 0 99 0 111 0 110 0 100 0 105 0 116 0 105 0 111 0 110 0 115 0 58 0 13 0 10 0 13 0 10 0 49 0 41 0 32 0 78 0 101 0 105 0 116 0 104 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 110 0 111 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 105 0 116 0 115 0 32 0 105 0 110 0 100 0 105 0 118 0 105 0 100 0 117 0 97 0 108 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 44 0 32 0 105 0 110 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 111 0 114 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 115 0 44 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 115 0 111 0 108 0 100 0 32 0 98 0 121 0 32 0 105 0 116 0 115 0 101 0 108 0 102 0 46 0 13 0 10 0 13 0 10 0 50 0 41 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 111 0 114 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 98 0 117 0 110 0 100 0 108 0 101 0 100 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 115 0 111 0 108 0 100 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 110 0 121 0 32 0 115 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 100 0 32 0 116 0 104 0 97 0 116 0 32 0 101 0 97 0 99 0 104 0 32 0 99 0 111 0 112 0 121 0 32 0 99 0 111 0 110 0 116 0 97 0 105 0 110 0 115 0 32 0 116 0 104 0 101 0 32 0 97 0 98 0 111 0 118 0 101 0 32 0 99 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 110 0 111 0 116 0 105 0 99 0 101 0 32 0 97 0 110 0 100 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 115 0 101 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 101 0 100 0 32 0 101 0 105 0 116 0 104 0 101 0 114 0 32 0 97 0 115 0 32 0 115 0 116 0 97 0 110 0 100 0 45 0 97 0 108 0 111 0 110 0 101 0 32 0 116 0 101 0 120 0 116 0 32 0 102 0 105 0 108 0 101 0 115 0 44 0 32 0 104 0 117 0 109 0 97 0 110 0 45 0 114 0 101 0 97 0 100 0 97 0 98 0 108 0 101 0 32 0 104 0 101 0 97 0 100 0 101 0 114 0 115 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 97 0 112 0 112 0 114 0 111 0 112 0 114 0 105 0 97 0 116 0 101 0 32 0 109 0 97 0 99 0 104 0 105 0 110 0 101 0 45 0 114 0 101 0 97 0 100 0 97 0 98 0 108 0 101 0 32 0 109 0 101 0 116 0 97 0 100 0 97 0 116 0 97 0 32 0 102 0 105 0 101 0 108 0 100 0 115 0 32 0 119 0 105 0 116 0 104 0 105 0 110 0 32 0 116 0 101 0 120 0 116 0 32 0 111 0 114 0 32 0 98 0 105 0 110 0 97 0 114 0 121 0 32 0 102 0 105 0 108 0 101 0 115 0 32 0 97 0 115 0 32 0 108 0 111 0 110 0 103 0 32 0 97 0 115 0 32 0 116 0 104 0 111 0 115 0 101 0 32 0 102 0 105 0 101 0 108 0 100 0 115 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 101 0 97 0 115 0 105 0 108 0 121 0 32 0 118 0 105 0 101 0 119 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 117 0 115 0 101 0 114 0 46 0 13 0 10 0 13 0 10 0 51 0 41 0 32 0 78 0 111 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 109 0 97 0 121 0 32 0 117 0 115 0 101 0 32 0 116 0 104 0 101 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 40 0 115 0 41 0 32 0 117 0 110 0 108 0 101 0 115 0 115 0 32 0 101 0 120 0 112 0 108 0 105 0 99 0 105 0 116 0 32 0 119 0 114 0 105 0 116 0 116 0 101 0 110 0 32 0 112 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 32 0 105 0 115 0 32 0 103 0 114 0 97 0 110 0 116 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 114 0 114 0 101 0 115 0 112 0 111 0 110 0 100 0 105 0 110 0 103 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 46 0 32 0 84 0 104 0 105 0 115 0 32 0 114 0 101 0 115 0 116 0 114 0 105 0 99 0 116 0 105 0 111 0 110 0 32 0 111 0 110 0 108 0 121 0 32 0 97 0 112 0 112 0 108 0 105 0 101 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 112 0 114 0 105 0 109 0 97 0 114 0 121 0 32 0 102 0 111 0 110 0 116 0 32 0 110 0 97 0 109 0 101 0 32 0 97 0 115 0 32 0 112 0 114 0 101 0 115 0 101 0 110 0 116 0 101 0 100 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 117 0 115 0 101 0 114 0 115 0 46 0 13 0 10 0 13 0 10 0 52 0 41 0 32 0 84 0 104 0 101 0 32 0 110 0 97 0 109 0 101 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 111 0 114 0 32 0 116 0 104 0 101 0 32 0 65 0 117 0 116 0 104 0 111 0 114 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 115 0 104 0 97 0 108 0 108 0 32 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 117 0 115 0 101 0 100 0 32 0 116 0 111 0 32 0 112 0 114 0 111 0 109 0 111 0 116 0 101 0 44 0 32 0 101 0 110 0 100 0 111 0 114 0 115 0 101 0 32 0 111 0 114 0 32 0 97 0 100 0 118 0 101 0 114 0 116 0 105 0 115 0 101 0 32 0 97 0 110 0 121 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 44 0 32 0 101 0 120 0 99 0 101 0 112 0 116 0 32 0 116 0 111 0 32 0 97 0 99 0 107 0 110 0 111 0 119 0 108 0 101 0 100 0 103 0 101 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 110 0 116 0 114 0 105 0 98 0 117 0 116 0 105 0 111 0 110 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 97 0 110 0 100 0 32 0 116 0 104 0 101 0 32 0 65 0 117 0 116 0 104 0 111 0 114 0 40 0 115 0 41 0 32 0 111 0 114 0 32 0 119 0 105 0 116 0 104 0 32 0 116 0 104 0 101 0 105 0 114 0 32 0 101 0 120 0 112 0 108 0 105 0 99 0 105 0 116 0 32 0 119 0 114 0 105 0 116 0 116 0 101 0 110 0 32 0 112 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 46 0 13 0 10 0 13 0 10 0 53 0 41 0 32 0 84 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 111 0 114 0 32 0 117 0 110 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 44 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 119 0 104 0 111 0 108 0 101 0 44 0 32 0 109 0 117 0 115 0 116 0 32 0 98 0 101 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 101 0 110 0 116 0 105 0 114 0 101 0 108 0 121 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 44 0 32 0 97 0 110 0 100 0 32 0 109 0 117 0 115 0 116 0 32 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 32 0 114 0 101 0 113 0 117 0 105 0 114 0 101 0 109 0 101 0 110 0 116 0 32 0 102 0 111 0 114 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 114 0 101 0 109 0 97 0 105 0 110 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 100 0 111 0 101 0 115 0 32 0 110 0 111 0 116 0 32 0 97 0 112 0 112 0 108 0 121 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 101 0 100 0 32 0 117 0 115 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 46 0 13 0 10 0 13 0 10 0 84 0 69 0 82 0 77 0 73 0 78 0 65 0 84 0 73 0 79 0 78 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 98 0 101 0 99 0 111 0 109 0 101 0 115 0 32 0 110 0 117 0 108 0 108 0 32 0 97 0 110 0 100 0 32 0 118 0 111 0 105 0 100 0 32 0 105 0 102 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 97 0 98 0 111 0 118 0 101 0 32 0 99 0 111 0 110 0 100 0 105 0 116 0 105 0 111 0 110 0 115 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 109 0 101 0 116 0 46 0 13 0 10 0 13 0 10 0 68 0 73 0 83 0 67 0 76 0 65 0 73 0 77 0 69 0 82 0 13 0 10 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 32 0 73 0 83 0 32 0 80 0 82 0 79 0 86 0 73 0 68 0 69 0 68 0 32 0 34 0 65 0 83 0 32 0 73 0 83 0 34 0 44 0 32 0 87 0 73 0 84 0 72 0 79 0 85 0 84 0 32 0 87 0 65 0 82 0 82 0 65 0 78 0 84 0 89 0 32 0 79 0 70 0 32 0 65 0 78 0 89 0 32 0 75 0 73 0 78 0 68 0 44 0 32 0 69 0 88 0 80 0 82 0 69 0 83 0 83 0 32 0 79 0 82 0 32 0 73 0 77 0 80 0 76 0 73 0 69 0 68 0 44 0 32 0 73 0 78 0 67 0 76 0 85 0 68 0 73 0 78 0 71 0 32 0 66 0 85 0 84 0 32 0 78 0 79 0 84 0 32 0 76 0 73 0 77 0 73 0 84 0 69 0 68 0 32 0 84 0 79 0 32 0 65 0 78 0 89 0 32 0 87 0 65 0 82 0 82 0 65 0 78 0 84 0 73 0 69 0 83 0 32 0 79 0 70 0 32 0 77 0 69 0 82 0 67 0 72 0 65 0 78 0 84 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 44 0 32 0 70 0 73 0 84 0 78 0 69 0 83 0 83 0 32 0 70 0 79 0 82 0 32 0 65 0 32 0 80 0 65 0 82 0 84 0 73 0 67 0 85 0 76 0 65 0 82 0 32 0 80 0 85 0 82 0 80 0 79 0 83 0 69 0 32 0 65 0 78 0 68 0 32 0 78 0 79 0 78 0 73 0 78 0 70 0 82 0 73 0 78 0 71 0 69 0 77 0 69 0 78 0 84 0 32 0 79 0 70 0 32 0 67 0 79 0 80 0 89 0 82 0 73 0 71 0 72 0 84 0 44 0 32 0 80 0 65 0 84 0 69 0 78 0 84 0 44 0 32 0 84 0 82 0 65 0 68 0 69 0 77 0 65 0 82 0 75 0 44 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 82 0 73 0 71 0 72 0 84 0 46 0 32 0 73 0 78 0 32 0 78 0 79 0 32 0 69 0 86 0 69 0 78 0 84 0 32 0 83 0 72 0 65 0 76 0 76 0 32 0 84 0 72 0 69 0 32 0 67 0 79 0 80 0 89 0 82 0 73 0 71 0 72 0 84 0 32 0 72 0 79 0 76 0 68 0 69 0 82 0 32 0 66 0 69 0 32 0 76 0 73 0 65 0 66 0 76 0 69 0 32 0 70 0 79 0 82 0 32 0 65 0 78 0 89 0 32 0 67 0 76 0 65 0 73 0 77 0 44 0 32 0 68 0 65 0 77 0 65 0 71 0 69 0 83 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 76 0 73 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 44 0 32 0 73 0 78 0 67 0 76 0 85 0 68 0 73 0 78 0 71 0 32 0 65 0 78 0 89 0 32 0 71 0 69 0 78 0 69 0 82 0 65 0 76 0 44 0 32 0 83 0 80 0 69 0 67 0 73 0 65 0 76 0 44 0 32 0 73 0 78 0 68 0 73 0 82 0 69 0 67 0 84 0 44 0 32 0 73 0 78 0 67 0 73 0 68 0 69 0 78 0 84 0 65 0 76 0 44 0 32 0 79 0 82 0 32 0 67 0 79 0 78 0 83 0 69 0 81 0 85 0 69 0 78 0 84 0 73 0 65 0 76 0 32 0 68 0 65 0 77 0 65 0 71 0 69 0 83 0 44 0 32 0 87 0 72 0 69 0 84 0 72 0 69 0 82 0 32 0 73 0 78 0 32 0 65 0 78 0 32 0 65 0 67 0 84 0 73 0 79 0 78 0 32 0 79 0 70 0 32 0 67 0 79 0 78 0 84 0 82 0 65 0 67 0 84 0 44 0 32 0 84 0 79 0 82 0 84 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 87 0 73 0 83 0 69 0 44 0 32 0 65 0 82 0 73 0 83 0 73 0 78 0 71 0 32 0 70 0 82 0 79 0 77 0 44 0 32 0 79 0 85 0 84 0 32 0 79 0 70 0 32 0 84 0 72 0 69 0 32 0 85 0 83 0 69 0 32 0 79 0 82 0 32 0 73 0 78 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 32 0 84 0 79 0 32 0 85 0 83 0 69 0 32 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 32 0 79 0 82 0 32 0 70 0 82 0 79 0 77 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 68 0 69 0 65 0 76 0 73 0 78 0 71 0 83 0 32 0 73 0 78 0 32 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 46 0 13 0 10 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 116 0 121 0 112 0 101 0 47 0 108 0 101 0 103 0 97 0 108 0 46 0 104 0 116 0 109 0 108 0 84 0 121 0 112 0 111 0 103 0 114 0 97 0 112 0 104 0 105 0 99 0 32 0 97 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 115 0 65 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 32 0 97 0 65 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 32 0 103 0 65 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 32 0 100 0 111 0 108 0 108 0 97 0 114 0 32 0 115 0 105 0 103 0 110 0 0 0 2 0 0 0 0 0 0 255 181 0 50 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 197 0 0 1 2 1 3 0 3 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 93 0 173 0 201 0 199 0 174 0 98 1 4 1 5 0 99 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 0 144 1 20 0 100 0 253 1 21 0 255 1 22 1 23 1 24 1 25 1 26 0 203 0 101 0 200 1 27 0 202 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 0 248 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 0 207 0 204 0 205 1 50 0 206 1 51 1 52 0 250 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 0 226 1 66 1 67 1 68 0 102 1 69 1 70 1 71 1 72 0 211 0 208 0 209 0 175 0 103 1 73 1 74 1 75 1 76 1 77 1 78 1 79 1 80 1 81 1 82 1 83 0 145 0 176 1 84 1 85 1 86 1 87 1 88 1 89 1 90 1 91 1 92 1 93 1 94 1 95 1 96 1 97 1 98 0 228 1 99 1 100 1 101 1 102 1 103 1 104 1 105 1 106 1 107 1 108 0 214 0 212 0 213 1 109 0 104 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 1 121 1 122 1 123 1 124 1 125 1 126 1 127 1 128 1 129 1 130 1 131 1 132 0 235 1 133 0 187 1 134 1 135 1 136 1 137 1 138 0 230 1 139 1 140 0 233 0 237 1 141 0 106 0 105 0 107 0 109 0 108 1 142 1 143 0 110 1 144 1 145 1 146 1 147 1 148 1 149 1 150 1 151 1 152 1 153 1 154 1 155 1 156 1 157 0 160 1 158 0 111 0 254 1 159 1 0 1 160 1 161 1 162 1 163 1 1 0 113 0 112 0 114 1 164 0 115 1 165 1 166 1 167 1 168 1 169 1 170 1 171 1 172 1 173 1 174 1 175 1 176 1 177 0 249 1 178 1 179 1 180 1 181 1 182 1 183 1 184 1 185 1 186 0 117 0 116 0 118 1 187 0 119 1 188 1 189 1 190 1 191 1 192 1 193 1 194 0 215 1 195 1 196 1 197 1 198 1 199 1 200 1 201 1 202 1 203 1 204 0 227 1 205 1 206 1 207 0 120 1 208 1 209 1 210 1 211 1 212 0 122 0 121 0 123 0 125 0 124 1 213 1 214 1 215 1 216 1 217 1 218 1 219 1 220 1 221 1 222 1 223 0 161 0 177 1 224 1 225 1 226 1 227 1 228 1 229 1 230 1 231 1 232 1 233 1 234 1 235 1 236 1 237 1 238 0 229 1 239 1 240 1 241 1 242 0 137 1 243 1 244 1 245 1 246 1 247 1 248 0 127 0 126 0 128 1 249 0 129 1 250 1 251 1 252 1 253 1 254 1 255 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 0 236 2 17 0 186 2 18 2 19 2 20 2 21 2 22 0 231 2 23 2 24 0 234 0 238 2 25 2 26 2 27 2 28 2 29 2 30 2 31 2 32 2 33 2 34 2 35 2 36 2 37 2 38 2 39 2 40 0 192 0 193 2 41 2 42 2 43 2 44 2 45 2 46 2 47 2 48 2 49 2 50 2 51 2 52 2 53 2 54 2 55 2 56 2 57 2 58 2 59 2 60 2 61 2 62 2 63 2 64 2 65 2 66 2 67 2 68 2 69 2 70 2 71 0 9 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 2 72 2 73 2 74 2 75 2 76 2 77 2 78 2 79 2 80 2 81 0 17 0 15 0 29 0 30 0 171 0 4 0 163 0 34 0 162 0 10 0 5 0 182 0 183 0 180 0 181 0 196 0 197 0 190 0 191 0 169 0 170 0 16 2 82 0 178 0 179 2 83 2 84 0 195 0 135 0 66 0 11 0 12 0 62 0 64 0 94 0 96 0 18 0 95 0 63 0 232 0 13 0 130 0 194 0 134 0 136 0 139 2 85 0 138 0 140 2 86 0 35 2 87 0 6 2 88 2 89 2 90 2 91 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 106 2 107 2 108 2 109 2 110 2 111 2 112 2 113 2 114 2 115 2 116 2 117 2 118 2 119 2 120 2 121 2 122 2 123 2 124 2 125 2 126 2 127 2 128 2 129 2 130 2 131 2 132 2 133 2 134 2 135 2 136 2 137 2 138 2 139 2 140 2 141 2 142 2 143 2 144 2 145 2 146 2 147 0 157 2 148 0 158 2 149 2 150 2 151 2 152 2 153 2 154 2 155 2 156 2 157 2 158 2 159 2 160 2 161 2 162 2 163 2 164 2 165 2 166 2 167 2 168 2 169 2 170 2 171 2 172 2 173 2 174 2 175 2 176 2 177 2 178 2 179 0 131 0 189 0 7 0 133 0 150 2 180 0 132 2 181 2 182 2 183 2 184 2 185 2 186 2 187 2 188 2 189 2 190 2 191 0 188 2 192 2 193 0 8 0 198 0 245 0 244 0 246 2 194 2 195 2 196 2 197 2 198 2 199 0 14 0 239 0 240 0 184 2 200 0 32 0 31 0 33 0 148 0 149 0 147 0 65 0 143 0 97 0 167 0 164 0 155 0 146 2 201 0 152 0 156 0 165 2 202 2 203 0 153 0 154 2 204 2 205 2 206 2 207 2 208 2 209 2 210 2 211 2 212 2 213 2 214 2 215 2 216 2 217 2 218 2 219 2 220 2 221 2 222 2 223 2 224 2 225 0 185 2 226 2 227 2 228 2 229 2 230 2 231 0 67 0 141 0 216 0 225 2 232 2 233 2 234 2 235 2 236 0 217 0 142 0 218 0 219 0 221 0 223 0 220 0 222 0 224 2 237 2 238 2 239 2 240 2 241 2 242 2 243 2 244 2 245 2 246 2 247 2 248 2 249 2 250 2 251 2 252 2 253 2 254 2 255 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 3 21 3 22 3 23 3 24 3 25 3 26 3 27 3 28 3 29 3 30 3 31 3 32 3 33 3 34 3 35 3 36 3 37 3 38 3 39 3 40 3 41 3 42 3 43 3 44 3 45 3 46 3 47 3 48 3 49 3 50 3 51 3 52 3 53 3 54 3 55 3 56 3 57 3 58 3 59 3 60 3 61 3 62 3 63 3 64 3 65 3 66 3 67 3 68 3 69 3 70 3 71 3 72 3 73 3 74 3 75 3 76 3 77 3 78 3 79 3 80 3 81 3 82 3 83 3 84 3 85 3 86 3 87 3 88 3 89 3 90 3 91 3 92 3 93 3 94 3 95 3 96 3 97 3 98 3 99 3 100 3 101 3 102 3 103 3 104 3 105 3 106 3 107 3 108 3 109 3 110 3 111 3 112 3 113 3 114 3 115 3 116 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 140 3 141 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 168 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 186 3 187 3 188 3 189 3 190 3 191 3 192 3 193 3 194 3 195 3 196 3 197 3 198 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 4 78 85 76 76 2 67 82 7 65 109 97 99 114 111 110 6 65 98 114 101 118 101 7 117 110 105 48 49 67 68 7 117 110 105 49 69 65 48 7 117 110 105 49 69 65 50 7 117 110 105 49 69 65 52 7 117 110 105 49 69 65 54 7 117 110 105 49 69 65 56 7 117 110 105 49 69 65 65 7 117 110 105 49 69 65 67 7 117 110 105 49 69 65 69 7 117 110 105 49 69 66 48 7 117 110 105 49 69 66 50 7 117 110 105 49 69 66 52 7 117 110 105 49 69 66 54 7 65 111 103 111 110 101 107 7 117 110 105 48 50 52 51 11 67 99 105 114 99 117 109 102 108 101 120 10 67 100 111 116 97 99 99 101 110 116 6 68 99 97 114 111 110 7 117 110 105 49 69 48 67 7 117 110 105 49 69 48 69 6 68 99 114 111 97 116 6 69 99 97 114 111 110 7 69 109 97 99 114 111 110 6 69 98 114 101 118 101 10 69 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 66 56 7 117 110 105 49 69 66 65 7 117 110 105 49 69 66 67 7 117 110 105 49 69 66 69 7 117 110 105 49 69 67 48 7 117 110 105 49 69 67 50 7 117 110 105 49 69 67 52 7 117 110 105 49 69 67 54 7 69 111 103 111 110 101 107 11 71 99 105 114 99 117 109 102 108 101 120 10 71 100 111 116 97 99 99 101 110 116 7 117 110 105 48 49 50 50 6 71 99 97 114 111 110 7 117 110 105 49 69 50 48 11 117 110 105 48 48 52 55 48 51 48 51 11 72 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 50 52 7 117 110 105 49 69 50 65 4 72 98 97 114 6 73 116 105 108 100 101 7 73 109 97 99 114 111 110 7 117 110 105 48 49 50 67 7 117 110 105 48 49 67 70 7 117 110 105 49 69 67 56 7 117 110 105 49 69 67 65 7 73 111 103 111 110 101 107 11 74 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 51 54 6 76 97 99 117 116 101 6 76 99 97 114 111 110 7 117 110 105 48 49 51 66 4 76 100 111 116 7 117 110 105 49 69 51 54 7 117 110 105 49 69 51 56 7 117 110 105 49 69 51 65 7 117 110 105 49 69 52 50 6 78 97 99 117 116 101 6 78 99 97 114 111 110 7 117 110 105 48 49 52 53 7 117 110 105 49 69 52 52 7 117 110 105 49 69 52 54 7 117 110 105 49 69 52 56 7 79 109 97 99 114 111 110 7 117 110 105 48 49 52 69 13 79 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 49 7 117 110 105 49 69 67 67 7 117 110 105 49 69 67 69 7 117 110 105 49 69 68 48 7 117 110 105 49 69 68 50 7 117 110 105 49 69 68 52 7 117 110 105 49 69 68 54 7 117 110 105 49 69 68 56 5 79 104 111 114 110 7 117 110 105 49 69 68 65 7 117 110 105 49 69 68 67 7 117 110 105 49 69 68 69 7 117 110 105 49 69 69 48 7 117 110 105 49 69 69 50 7 117 110 105 48 49 69 65 6 82 97 99 117 116 101 6 82 99 97 114 111 110 7 117 110 105 48 49 53 54 7 117 110 105 49 69 53 65 7 117 110 105 49 69 53 67 7 117 110 105 49 69 53 69 6 83 97 99 117 116 101 11 83 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 53 69 7 117 110 105 48 50 49 56 7 117 110 105 49 69 54 48 7 117 110 105 49 69 54 50 7 117 110 105 49 69 57 69 6 84 99 97 114 111 110 7 117 110 105 48 49 54 50 7 117 110 105 48 50 49 65 7 117 110 105 49 69 54 67 7 117 110 105 49 69 54 69 6 85 116 105 108 100 101 7 85 109 97 99 114 111 110 6 85 98 114 101 118 101 5 85 114 105 110 103 13 85 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 51 7 117 110 105 48 49 68 53 7 117 110 105 48 49 68 55 7 117 110 105 48 49 68 57 7 117 110 105 48 49 68 66 7 117 110 105 49 69 69 52 7 117 110 105 49 69 69 54 7 85 111 103 111 110 101 107 5 85 104 111 114 110 7 117 110 105 49 69 69 56 7 117 110 105 49 69 69 65 7 117 110 105 49 69 69 67 7 117 110 105 49 69 69 69 7 117 110 105 49 69 70 48 6 87 103 114 97 118 101 6 87 97 99 117 116 101 11 87 99 105 114 99 117 109 102 108 101 120 9 87 100 105 101 114 101 115 105 115 6 89 103 114 97 118 101 11 89 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 56 69 7 117 110 105 49 69 70 52 7 117 110 105 49 69 70 54 7 117 110 105 49 69 70 56 6 90 97 99 117 116 101 10 90 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 57 50 7 117 110 105 48 49 56 70 7 97 109 97 99 114 111 110 6 97 98 114 101 118 101 7 117 110 105 48 49 67 69 7 117 110 105 49 69 65 49 7 117 110 105 49 69 65 51 7 117 110 105 49 69 65 53 7 117 110 105 49 69 65 55 7 117 110 105 49 69 65 57 7 117 110 105 49 69 65 66 7 117 110 105 49 69 65 68 7 117 110 105 49 69 65 70 7 117 110 105 49 69 66 49 7 117 110 105 49 69 66 51 7 117 110 105 49 69 66 53 7 117 110 105 49 69 66 55 7 97 111 103 111 110 101 107 7 117 110 105 48 49 56 48 11 99 99 105 114 99 117 109 102 108 101 120 10 99 100 111 116 97 99 99 101 110 116 6 100 99 97 114 111 110 7 117 110 105 49 69 48 68 7 117 110 105 49 69 48 70 6 101 99 97 114 111 110 7 101 109 97 99 114 111 110 6 101 98 114 101 118 101 10 101 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 66 57 7 117 110 105 49 69 66 66 7 117 110 105 49 69 66 68 7 117 110 105 49 69 66 70 7 117 110 105 49 69 67 49 7 117 110 105 49 69 67 51 7 117 110 105 49 69 67 53 7 117 110 105 49 69 67 55 7 101 111 103 111 110 101 107 11 103 99 105 114 99 117 109 102 108 101 120 10 103 100 111 116 97 99 99 101 110 116 7 117 110 105 48 49 50 51 6 103 99 97 114 111 110 7 117 110 105 49 69 50 49 11 117 110 105 48 48 54 55 48 51 48 51 11 104 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 50 53 7 117 110 105 49 69 50 66 4 104 98 97 114 6 105 116 105 108 100 101 7 105 109 97 99 114 111 110 7 117 110 105 48 49 50 68 7 117 110 105 48 49 68 48 7 117 110 105 49 69 67 57 7 117 110 105 49 69 67 66 7 105 111 103 111 110 101 107 9 105 111 103 111 110 101 107 46 100 11 106 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 51 55 12 107 103 114 101 101 110 108 97 110 100 105 99 6 108 97 99 117 116 101 6 108 99 97 114 111 110 4 108 100 111 116 7 117 110 105 48 49 51 67 7 117 110 105 49 69 51 55 7 117 110 105 49 69 51 57 7 117 110 105 49 69 51 66 7 117 110 105 49 69 52 51 6 110 97 99 117 116 101 6 110 99 97 114 111 110 7 117 110 105 48 49 52 54 7 117 110 105 49 69 52 53 7 117 110 105 49 69 52 55 7 117 110 105 49 69 52 57 11 110 97 112 111 115 116 114 111 112 104 101 7 111 109 97 99 114 111 110 7 117 110 105 48 49 52 70 13 111 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 50 7 117 110 105 49 69 67 68 7 117 110 105 49 69 67 70 7 117 110 105 49 69 68 49 7 117 110 105 49 69 68 51 7 117 110 105 49 69 68 53 7 117 110 105 49 69 68 55 7 117 110 105 49 69 68 57 5 111 104 111 114 110 7 117 110 105 49 69 68 66 7 117 110 105 49 69 68 68 7 117 110 105 49 69 68 70 7 117 110 105 49 69 69 49 7 117 110 105 49 69 69 51 7 117 110 105 48 49 69 66 6 114 97 99 117 116 101 7 117 110 105 48 49 53 55 6 114 99 97 114 111 110 7 117 110 105 49 69 53 66 7 117 110 105 49 69 53 68 7 117 110 105 49 69 53 70 6 115 97 99 117 116 101 11 115 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 53 70 7 117 110 105 48 50 49 57 7 117 110 105 49 69 54 49 7 117 110 105 49 69 54 51 6 116 99 97 114 111 110 7 117 110 105 48 49 54 51 7 117 110 105 48 50 49 66 7 117 110 105 49 69 54 68 7 117 110 105 49 69 54 70 7 117 110 105 49 69 57 55 6 117 116 105 108 100 101 7 117 109 97 99 114 111 110 6 117 98 114 101 118 101 5 117 114 105 110 103 13 117 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 52 7 117 110 105 48 49 68 54 7 117 110 105 48 49 68 56 7 117 110 105 48 49 68 65 7 117 110 105 48 49 68 67 7 117 110 105 49 69 69 53 7 117 110 105 49 69 69 55 7 117 111 103 111 110 101 107 5 117 104 111 114 110 7 117 110 105 49 69 69 57 7 117 110 105 49 69 69 66 7 117 110 105 49 69 69 68 7 117 110 105 49 69 69 70 7 117 110 105 49 69 70 49 6 119 103 114 97 118 101 6 119 97 99 117 116 101 11 119 99 105 114 99 117 109 102 108 101 120 9 119 100 105 101 114 101 115 105 115 6 121 103 114 97 118 101 11 121 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 56 70 7 117 110 105 49 69 70 53 7 117 110 105 49 69 70 55 7 117 110 105 49 69 70 57 6 122 97 99 117 116 101 10 122 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 57 51 7 117 110 105 48 50 51 55 7 117 110 105 48 50 53 48 7 117 110 105 48 50 53 49 7 117 110 105 48 50 53 50 7 117 110 105 48 50 53 52 7 117 110 105 48 50 53 56 7 117 110 105 48 50 53 57 7 117 110 105 48 50 54 49 7 117 110 105 48 50 54 53 7 117 110 105 48 50 54 70 7 117 110 105 48 50 55 57 7 117 110 105 48 50 56 55 7 117 110 105 48 50 56 67 7 117 110 105 48 50 56 68 7 117 110 105 48 50 56 69 7 117 110 105 48 50 57 69 3 97 46 97 8 97 103 114 97 118 101 46 97 8 97 97 99 117 116 101 46 97 13 97 99 105 114 99 117 109 102 108 101 120 46 97 8 97 116 105 108 100 101 46 97 11 97 100 105 101 114 101 115 105 115 46 97 9 97 109 97 99 114 111 110 46 97 8 97 98 114 101 118 101 46 97 7 97 114 105 110 103 46 97 9 117 110 105 48 49 67 69 46 97 9 117 110 105 49 69 65 49 46 97 9 117 110 105 49 69 65 51 46 97 9 117 110 105 49 69 65 53 46 97 9 117 110 105 49 69 65 55 46 97 9 117 110 105 49 69 65 57 46 97 9 117 110 105 49 69 65 66 46 97 9 117 110 105 49 69 65 68 46 97 9 117 110 105 49 69 65 70 46 97 9 117 110 105 49 69 66 49 46 97 9 117 110 105 49 69 66 51 46 97 9 117 110 105 49 69 66 53 46 97 9 117 110 105 49 69 66 55 46 97 9 97 111 103 111 110 101 107 46 97 3 103 46 97 13 103 99 105 114 99 117 109 102 108 101 120 46 97 8 103 98 114 101 118 101 46 97 12 103 100 111 116 97 99 99 101 110 116 46 97 9 117 110 105 48 49 50 51 46 97 8 103 99 97 114 111 110 46 97 9 117 110 105 49 69 50 49 46 97 13 117 110 105 48 48 54 55 48 51 48 51 46 97 9 122 101 114 111 46 111 110 117 109 8 111 110 101 46 111 110 117 109 8 116 119 111 46 111 110 117 109 10 116 104 114 101 101 46 111 110 117 109 9 102 111 117 114 46 111 110 117 109 9 102 105 118 101 46 111 110 117 109 8 115 105 120 46 111 110 117 109 10 115 101 118 101 110 46 111 110 117 109 10 101 105 103 104 116 46 111 110 117 109 9 110 105 110 101 46 111 110 117 109 7 117 110 105 48 48 65 68 10 102 105 103 117 114 101 100 97 115 104 7 117 110 105 50 48 49 53 7 117 110 105 50 49 49 55 7 117 110 105 50 49 50 48 7 97 116 46 99 97 115 101 10 97 115 116 101 114 105 115 107 46 97 8 104 121 112 104 101 110 46 97 9 117 110 105 48 48 65 68 46 97 8 100 111 108 108 97 114 46 97 9 122 101 114 111 46 115 117 112 115 8 111 110 101 46 115 117 112 115 8 116 119 111 46 115 117 112 115 10 116 104 114 101 101 46 115 117 112 115 9 102 111 117 114 46 115 117 112 115 9 102 105 118 101 46 115 117 112 115 8 115 105 120 46 115 117 112 115 10 115 101 118 101 110 46 115 117 112 115 10 101 105 103 104 116 46 115 117 112 115 9 110 105 110 101 46 115 117 112 115 14 112 97 114 101 110 108 101 102 116 46 115 117 112 115 15 112 97 114 101 110 114 105 103 104 116 46 115 117 112 115 11 112 101 114 105 111 100 46 115 117 112 115 10 99 111 109 109 97 46 115 117 112 115 9 122 101 114 111 46 115 117 98 115 8 111 110 101 46 115 117 98 115 8 116 119 111 46 115 117 98 115 10 116 104 114 101 101 46 115 117 98 115 9 102 111 117 114 46 115 117 98 115 9 102 105 118 101 46 115 117 98 115 8 115 105 120 46 115 117 98 115 10 115 101 118 101 110 46 115 117 98 115 10 101 105 103 104 116 46 115 117 98 115 9 110 105 110 101 46 115 117 98 115 14 112 97 114 101 110 108 101 102 116 46 115 117 98 115 15 112 97 114 101 110 114 105 103 104 116 46 115 117 98 115 11 112 101 114 105 111 100 46 115 117 98 115 10 99 111 109 109 97 46 115 117 98 115 9 122 101 114 111 46 100 110 111 109 8 111 110 101 46 100 110 111 109 8 116 119 111 46 100 110 111 109 10 116 104 114 101 101 46 100 110 111 109 9 102 111 117 114 46 100 110 111 109 9 102 105 118 101 46 100 110 111 109 8 115 105 120 46 100 110 111 109 10 115 101 118 101 110 46 100 110 111 109 10 101 105 103 104 116 46 100 110 111 109 9 110 105 110 101 46 100 110 111 109 14 112 97 114 101 110 108 101 102 116 46 100 110 111 109 15 112 97 114 101 110 114 105 103 104 116 46 100 110 111 109 11 112 101 114 105 111 100 46 100 110 111 109 10 99 111 109 109 97 46 100 110 111 109 9 122 101 114 111 46 110 117 109 114 8 111 110 101 46 110 117 109 114 8 116 119 111 46 110 117 109 114 10 116 104 114 101 101 46 110 117 109 114 9 102 111 117 114 46 110 117 109 114 9 102 105 118 101 46 110 117 109 114 8 115 105 120 46 110 117 109 114 10 115 101 118 101 110 46 110 117 109 114 10 101 105 103 104 116 46 110 117 109 114 9 110 105 110 101 46 110 117 109 114 14 112 97 114 101 110 108 101 102 116 46 110 117 109 114 15 112 97 114 101 110 114 105 103 104 116 46 110 117 109 114 11 112 101 114 105 111 100 46 110 117 109 114 10 99 111 109 109 97 46 110 117 109 114 13 111 114 100 102 101 109 105 110 105 110 101 46 97 6 97 46 115 117 112 115 6 98 46 115 117 112 115 6 99 46 115 117 112 115 6 100 46 115 117 112 115 6 101 46 115 117 112 115 6 102 46 115 117 112 115 6 103 46 115 117 112 115 6 104 46 115 117 112 115 6 105 46 115 117 112 115 6 106 46 115 117 112 115 6 107 46 115 117 112 115 6 108 46 115 117 112 115 6 109 46 115 117 112 115 6 110 46 115 117 112 115 6 111 46 115 117 112 115 6 112 46 115 117 112 115 6 113 46 115 117 112 115 6 114 46 115 117 112 115 6 115 46 115 117 112 115 6 116 46 115 117 112 115 6 117 46 115 117 112 115 6 118 46 115 117 112 115 6 119 46 115 117 112 115 6 120 46 115 117 112 115 6 121 46 115 117 112 115 6 122 46 115 117 112 115 11 101 103 114 97 118 101 46 115 117 112 115 11 101 97 99 117 116 101 46 115 117 112 115 12 117 110 105 48 50 53 57 46 115 117 112 115 6 97 46 115 117 112 97 6 103 46 115 117 112 97 4 69 117 114 111 7 117 110 105 48 49 57 50 13 99 111 108 111 110 109 111 110 101 116 97 114 121 4 108 105 114 97 7 117 110 105 50 48 65 54 6 112 101 115 101 116 97 4 100 111 110 103 7 117 110 105 50 48 66 49 7 117 110 105 50 48 66 50 7 117 110 105 50 48 66 53 7 117 110 105 50 48 66 57 7 117 110 105 50 48 66 65 7 117 110 105 50 50 49 53 10 115 108 97 115 104 46 102 114 97 99 8 111 110 101 116 104 105 114 100 9 116 119 111 116 104 105 114 100 115 9 111 110 101 101 105 103 104 116 104 12 116 104 114 101 101 101 105 103 104 116 104 115 11 102 105 118 101 101 105 103 104 116 104 115 12 115 101 118 101 110 101 105 103 104 116 104 115 7 117 110 105 50 50 49 57 7 117 110 105 48 48 66 53 7 117 110 105 50 50 48 54 7 117 110 105 50 49 50 54 7 117 110 105 50 49 49 51 9 101 115 116 105 109 97 116 101 100 7 117 110 105 50 49 57 48 7 97 114 114 111 119 117 112 7 117 110 105 50 49 57 50 9 97 114 114 111 119 100 111 119 110 7 117 110 105 50 53 65 48 7 117 110 105 50 53 67 54 7 117 110 105 50 53 67 57 7 117 110 105 50 55 53 50 7 116 114 105 97 103 117 112 7 117 110 105 50 53 66 51 7 117 110 105 50 53 66 54 7 117 110 105 50 53 66 55 7 116 114 105 97 103 100 110 7 117 110 105 50 53 66 68 7 117 110 105 50 53 67 48 7 117 110 105 50 53 67 49 7 117 110 105 50 54 49 48 7 117 110 105 50 54 49 49 7 117 110 105 50 55 49 51 7 117 110 105 50 54 54 65 7 117 110 105 50 48 51 50 7 117 110 105 50 48 51 51 7 117 110 105 48 50 66 66 7 117 110 105 48 50 66 67 7 117 110 105 48 50 66 69 7 117 110 105 48 50 66 70 7 117 110 105 48 50 67 56 7 117 110 105 48 50 67 57 7 117 110 105 48 50 67 65 7 117 110 105 48 50 67 66 7 117 110 105 48 50 67 67 7 117 110 105 48 51 48 48 11 117 110 105 48 51 48 48 46 99 97 112 7 117 110 105 48 51 48 49 11 117 110 105 48 51 48 49 46 99 97 112 7 117 110 105 48 51 48 50 11 117 110 105 48 51 48 50 46 99 97 112 7 117 110 105 48 51 48 51 11 117 110 105 48 51 48 51 46 99 97 112 7 117 110 105 48 51 48 52 11 117 110 105 48 51 48 52 46 99 97 112 7 117 110 105 48 51 48 54 11 117 110 105 48 51 48 54 46 99 97 112 7 117 110 105 48 51 48 55 11 117 110 105 48 51 48 55 46 99 97 112 7 117 110 105 48 51 48 56 11 117 110 105 48 51 48 56 46 99 97 112 7 117 110 105 48 51 48 57 11 117 110 105 48 51 48 57 46 99 97 112 7 117 110 105 48 51 48 65 11 117 110 105 48 51 48 65 46 99 97 112 7 117 110 105 48 51 48 66 11 117 110 105 48 51 48 66 46 99 97 112 7 117 110 105 48 51 48 67 11 117 110 105 48 51 48 67 46 99 97 112 7 117 110 105 48 51 48 70 11 117 110 105 48 51 48 70 46 99 97 112 7 117 110 105 48 51 49 50 7 117 110 105 48 51 49 51 7 117 110 105 48 51 49 66 7 117 110 105 48 51 50 51 7 117 110 105 48 51 50 52 7 117 110 105 48 51 50 54 7 117 110 105 48 51 50 55 11 117 110 105 48 51 50 55 46 99 97 112 7 117 110 105 48 51 50 56 11 117 110 105 48 51 50 56 46 99 97 112 7 117 110 105 48 51 50 69 7 117 110 105 48 51 51 49 11 117 110 105 48 51 48 56 48 51 48 52 15 117 110 105 48 51 48 56 48 51 48 52 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 49 15 117 110 105 48 51 48 56 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 67 15 117 110 105 48 51 48 56 48 51 48 67 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 48 15 117 110 105 48 51 48 56 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 49 15 117 110 105 48 51 48 50 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 48 15 117 110 105 48 51 48 50 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 57 15 117 110 105 48 51 48 50 48 51 48 57 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 51 15 117 110 105 48 51 48 50 48 51 48 51 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 49 15 117 110 105 48 51 48 54 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 48 15 117 110 105 48 51 48 54 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 57 15 117 110 105 48 51 48 54 48 51 48 57 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 51 15 117 110 105 48 51 48 54 48 51 48 51 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 54 15 117 110 105 48 51 48 50 48 51 48 54 46 99 97 112 9 117 110 105 48 51 48 67 46 97 9 117 110 105 48 51 50 54 46 97 7 117 110 105 48 48 65 48 7 117 110 105 50 48 48 55 10 115 112 97 99 101 46 102 114 97 99 12 110 98 115 112 97 99 101 46 102 114 97 99 7 117 110 105 50 53 48 48 7 117 110 105 50 53 48 49 7 117 110 105 50 53 48 50 7 117 110 105 50 53 48 51 7 117 110 105 50 53 48 52 7 117 110 105 50 53 48 53 7 117 110 105 50 53 48 54 7 117 110 105 50 53 48 55 7 117 110 105 50 53 48 56 7 117 110 105 50 53 48 57 7 117 110 105 50 53 48 65 7 117 110 105 50 53 48 66 7 117 110 105 50 53 48 67 7 117 110 105 50 53 48 68 7 117 110 105 50 53 48 69 7 117 110 105 50 53 48 70 7 117 110 105 50 53 49 48 7 117 110 105 50 53 49 49 7 117 110 105 50 53 49 50 7 117 110 105 50 53 49 51 7 117 110 105 50 53 49 52 7 117 110 105 50 53 49 53 7 117 110 105 50 53 49 54 7 117 110 105 50 53 49 55 7 117 110 105 50 53 49 56 7 117 110 105 50 53 49 57 7 117 110 105 50 53 49 65 7 117 110 105 50 53 49 66 7 117 110 105 50 53 49 67 7 117 110 105 50 53 49 68 7 117 110 105 50 53 49 69 7 117 110 105 50 53 49 70 7 117 110 105 50 53 50 48 7 117 110 105 50 53 50 49 7 117 110 105 50 53 50 50 7 117 110 105 50 53 50 51 7 117 110 105 50 53 50 52 7 117 110 105 50 53 50 53 7 117 110 105 50 53 50 54 7 117 110 105 50 53 50 55 7 117 110 105 50 53 50 56 7 117 110 105 50 53 50 57 7 117 110 105 50 53 50 65 7 117 110 105 50 53 50 66 7 117 110 105 50 53 50 67 7 117 110 105 50 53 50 68 7 117 110 105 50 53 50 69 7 117 110 105 50 53 50 70 7 117 110 105 50 53 51 48 7 117 110 105 50 53 51 49 7 117 110 105 50 53 51 50 7 117 110 105 50 53 51 51 7 117 110 105 50 53 51 52 7 117 110 105 50 53 51 53 7 117 110 105 50 53 51 54 7 117 110 105 50 53 51 55 7 117 110 105 50 53 51 56 7 117 110 105 50 53 51 57 7 117 110 105 50 53 51 65 7 117 110 105 50 53 51 66 7 117 110 105 50 53 51 67 7 117 110 105 50 53 51 68 7 117 110 105 50 53 51 69 7 117 110 105 50 53 51 70 7 117 110 105 50 53 52 48 7 117 110 105 50 53 52 49 7 117 110 105 50 53 52 50 7 117 110 105 50 53 52 51 7 117 110 105 50 53 52 52 7 117 110 105 50 53 52 53 7 117 110 105 50 53 52 54 7 117 110 105 50 53 52 55 7 117 110 105 50 53 52 56 7 117 110 105 50 53 52 57 7 117 110 105 50 53 52 65 7 117 110 105 50 53 52 66 7 117 110 105 50 53 52 67 7 117 110 105 50 53 52 68 7 117 110 105 50 53 52 69 7 117 110 105 50 53 52 70 7 117 110 105 50 53 53 48 7 117 110 105 50 53 53 49 7 117 110 105 50 53 53 50 7 117 110 105 50 53 53 51 7 117 110 105 50 53 53 52 7 117 110 105 50 53 53 53 7 117 110 105 50 53 53 54 7 117 110 105 50 53 53 55 7 117 110 105 50 53 53 56 7 117 110 105 50 53 53 57 7 117 110 105 50 53 53 65 7 117 110 105 50 53 53 66 7 117 110 105 50 53 53 67 7 117 110 105 50 53 53 68 7 117 110 105 50 53 53 69 7 117 110 105 50 53 53 70 7 117 110 105 50 53 54 48 7 117 110 105 50 53 54 49 7 117 110 105 50 53 54 50 7 117 110 105 50 53 54 51 7 117 110 105 50 53 54 52 7 117 110 105 50 53 54 53 7 117 110 105 50 53 54 54 7 117 110 105 50 53 54 55 7 117 110 105 50 53 54 56 7 117 110 105 50 53 54 57 7 117 110 105 50 53 54 65 7 117 110 105 50 53 54 66 7 117 110 105 50 53 54 67 7 117 110 105 50 53 54 68 7 117 110 105 50 53 54 69 7 117 110 105 50 53 54 70 7 117 110 105 50 53 55 48 7 117 110 105 50 53 55 49 7 117 110 105 50 53 55 50 7 117 110 105 50 53 55 51 7 117 110 105 50 53 55 52 7 117 110 105 50 53 55 53 7 117 110 105 50 53 55 54 7 117 110 105 50 53 55 55 7 117 110 105 50 53 55 56 7 117 110 105 50 53 55 57 7 117 110 105 50 53 55 65 7 117 110 105 50 53 55 66 7 117 110 105 50 53 55 67 7 117 110 105 50 53 55 68 7 117 110 105 50 53 55 69 7 117 110 105 50 53 55 70 7 117 110 105 50 53 56 48 7 117 110 105 50 53 56 49 7 117 110 105 50 53 56 50 7 117 110 105 50 53 56 51 7 117 110 105 50 53 56 52 7 117 110 105 50 53 56 53 7 117 110 105 50 53 56 54 7 117 110 105 50 53 56 55 7 117 110 105 50 53 56 56 7 117 110 105 50 53 56 57 7 117 110 105 50 53 56 65 7 117 110 105 50 53 56 66 7 117 110 105 50 53 56 67 7 117 110 105 50 53 56 68 7 117 110 105 50 53 56 69 7 117 110 105 50 53 56 70 7 117 110 105 50 53 57 48 7 117 110 105 50 53 57 49 7 117 110 105 50 53 57 50 7 117 110 105 50 53 57 51 7 117 110 105 50 53 57 52 7 117 110 105 50 53 57 53 7 117 110 105 50 53 57 54 7 117 110 105 50 53 57 55 7 117 110 105 50 53 57 56 7 117 110 105 50 53 57 57 7 117 110 105 50 53 57 65 7 117 110 105 50 53 57 66 7 117 110 105 50 53 57 67 7 117 110 105 50 53 57 68 7 117 110 105 50 53 57 69 7 117 110 105 50 53 57 70 0 0 0 1 255 255 0 2 0 1 0 0 0 12 0 0 0 0 0 190 0 2 0 29 0 4 0 55 0 1 0 77 0 78 0 1 0 105 0 105 0 1 0 112 0 112 0 2 0 128 0 128 0 1 0 163 0 165 0 1 0 171 0 171 0 1 0 207 0 208 0 1 0 232 0 232 0 1 0 254 0 254 0 1 1 6 1 6 0 2 1 26 1 26 0 1 1 30 1 30 0 2 1 33 1 33 0 2 1 48 1 48 0 2 1 49 1 50 0 1 1 55 1 55 0 2 1 87 1 89 0 1 1 95 1 95 0 1 1 110 1 110 0 2 1 132 1 133 0 1 1 156 1 172 0 1 1 175 1 175 0 1 1 197 1 198 0 1 1 202 1 202 0 2 2 207 2 207 0 1 2 217 2 217 0 1 2 223 3 30 0 3 3 32 3 32 0 3 0 2 0 3 2 223 2 250 0 1 3 5 3 30 0 1 3 32 3 32 0 1 0 1 0 0 0 10 0 56 0 146 0 2 68 70 76 84 0 14 108 97 116 110 0 30 0 4 0 0 0 0 255 255 0 3 0 0 0 2 0 4 0 4 0 0 0 0 255 255 0 3 0 1 0 3 0 5 0 6 109 97 114 107 0 38 109 97 114 107 0 54 109 107 109 107 0 70 109 107 109 107 0 76 115 105 122 101 0 82 115 105 122 101 0 86 0 0 0 6 0 0 0 1 0 2 0 3 0 4 0 5 0 0 0 6 0 0 0 1 0 2 0 3 0 4 0 5 0 0 0 1 0 6 0 0 0 1 0 6 0 82 0 0 0 78 0 0 0 7 0 16 0 26 0 34 0 42 0 50 0 58 0 66 0 1 0 0 0 2 0 68 0 78 0 4 0 0 0 1 0 76 0 4 0 0 0 1 3 26 0 4 0 0 0 1 3 90 0 4 0 0 0 1 5 14 0 4 0 0 0 1 5 56 0 6 1 0 0 1 5 162 0 100 0 0 0 0 0 0 0 0 0 1 6 154 0 5 254 212 253 168 0 1 6 154 0 4 253 168 0 1 6 156 6 178 0 1 0 12 0 234 0 55 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 158 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 0 1 164 0 0 1 158 0 95 0 198 0 204 0 210 0 216 0 222 0 228 0 222 0 216 0 198 0 234 0 234 0 240 0 198 0 246 0 198 0 252 1 2 1 8 1 14 0 216 0 216 0 216 0 198 1 20 0 198 0 252 1 26 1 32 1 38 1 44 1 50 1 56 1 62 1 68 1 74 1 74 1 80 1 86 1 92 1 98 0 192 1 26 1 104 1 110 1 116 1 122 1 128 1 104 0 192 0 192 1 134 1 140 0 198 1 146 0 222 0 198 1 20 1 152 0 216 0 198 0 216 0 198 1 158 1 26 1 50 1 164 1 164 0 192 1 170 0 192 0 192 1 128 1 128 1 32 1 164 1 176 1 62 1 50 1 182 1 188 0 192 1 194 1 200 1 128 1 206 1 212 1 104 0 192 1 116 1 218 1 62 1 62 1 62 1 224 1 230 0 1 1 44 1 252 0 1 1 44 2 166 0 1 1 35 2 166 0 1 1 91 2 166 0 1 1 43 2 166 0 1 1 75 2 166 0 1 1 83 2 166 0 1 1 65 2 166 0 1 0 190 2 166 0 1 1 50 2 166 0 1 1 59 2 166 0 1 1 45 2 174 0 1 1 49 2 166 0 1 1 55 2 166 0 1 1 45 2 166 0 1 1 58 1 252 0 1 0 138 2 218 0 1 1 87 1 252 0 1 1 193 2 218 0 1 1 59 1 252 0 1 1 164 2 228 0 1 1 51 1 252 0 1 0 151 2 218 0 1 1 92 2 182 0 1 0 178 2 218 0 1 1 28 2 218 0 1 1 60 1 252 0 1 1 62 1 252 0 1 1 45 1 252 0 1 1 86 1 252 0 1 1 47 1 252 0 1 1 7 2 131 0 1 1 39 1 252 0 1 1 48 1 252 0 1 1 64 1 252 0 1 1 195 2 182 0 1 1 152 2 166 0 1 1 61 2 166 0 1 1 92 1 252 0 1 1 63 1 252 0 1 1 56 1 252 0 1 1 26 1 252 0 1 1 32 1 252 0 1 1 50 1 252 0 1 1 37 1 252 0 1 1 145 1 252 0 1 0 235 1 252 0 1 1 23 1 252 0 1 1 44 2 207 0 1 1 44 2 194 0 1 4 82 4 90 0 1 0 12 0 22 0 2 0 0 0 24 0 0 0 24 0 6 0 20 0 26 0 14 0 32 0 38 0 44 0 1 1 44 0 0 0 1 1 91 0 0 0 1 1 57 0 0 0 1 1 86 0 0 0 1 1 58 0 0 0 1 1 120 0 0 0 1 4 34 4 48 0 1 0 12 0 34 0 5 0 0 0 174 0 0 0 174 0 0 0 174 0 0 0 174 0 0 0 174 0 75 0 152 0 158 0 164 0 170 0 176 0 182 0 188 0 194 0 152 0 200 0 206 0 212 0 152 0 152 0 152 0 218 0 224 0 230 0 152 0 194 0 152 0 236 0 242 0 152 0 248 0 236 0 152 0 254 1 4 1 10 1 16 1 22 1 28 1 34 1 40 0 188 1 46 1 52 1 58 0 152 1 64 1 70 1 76 0 230 1 82 1 88 0 200 0 152 0 152 1 94 1 100 0 194 0 152 1 88 1 34 0 152 1 88 1 4 1 106 0 158 1 4 1 106 0 158 1 112 1 118 1 124 1 124 1 130 1 136 0 200 0 152 1 94 1 142 0 158 1 148 0 1 1 44 255 234 0 1 1 52 255 234 0 1 1 91 255 234 0 1 1 34 255 234 0 1 1 76 255 234 0 1 0 188 255 234 0 1 1 79 255 234 0 1 1 43 255 234 0 1 1 45 255 234 0 1 1 82 255 234 0 1 1 90 255 234 0 1 0 149 255 234 0 1 1 64 255 234 0 1 1 54 255 234 0 1 1 47 255 234 0 1 1 39 255 234 0 1 1 55 255 234 0 1 1 86 255 234 0 1 1 50 255 234 0 1 1 59 255 234 0 1 1 35 255 234 0 1 1 41 255 26 0 1 1 58 255 234 0 1 1 92 255 234 0 1 0 236 255 25 0 1 1 115 255 234 0 1 1 53 255 234 0 1 1 57 255 234 0 1 0 136 255 38 0 1 1 193 255 38 0 1 0 200 255 234 0 1 1 123 255 234 0 1 1 65 255 234 0 1 1 10 255 14 0 1 1 61 255 234 0 1 1 67 255 234 0 1 1 32 255 234 0 1 1 203 255 38 0 1 1 42 255 234 0 1 0 118 255 234 0 1 1 109 255 234 0 1 0 254 255 234 0 1 1 204 255 38 0 1 2 192 2 198 0 1 0 12 0 18 0 1 0 0 0 14 0 3 0 14 0 20 0 26 0 1 1 44 1 230 0 1 1 164 2 134 0 1 1 247 2 154 0 1 1 157 1 230 0 1 2 158 2 166 0 1 0 12 0 22 0 2 0 0 0 36 0 0 0 36 0 12 0 32 0 38 0 44 0 26 0 50 0 56 0 62 0 68 0 62 0 74 0 80 0 86 0 1 1 44 0 0 0 1 1 239 0 0 0 1 1 169 0 0 0 1 1 21 0 0 0 1 1 43 0 0 0 1 1 149 0 0 0 1 1 129 0 0 0 1 1 93 0 0 0 1 1 143 0 0 0 1 1 32 0 0 0 1 1 162 0 0 0 1 1 30 2 80 0 1 0 12 0 234 0 55 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 230 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 3 0 20 0 26 0 26 0 1 1 44 1 252 0 1 1 44 2 166 0 1 1 44 2 220 0 1 1 44 2 183 0 2 0 1 2 136 2 138 0 0 0 2 0 1 2 223 3 32 0 0 0 2 0 3 2 223 2 250 0 0 3 5 3 30 0 28 3 32 3 32 0 54 0 2 0 19 0 4 0 55 0 0 0 77 0 78 0 52 0 105 0 105 0 54 0 128 0 128 0 55 0 163 0 165 0 56 0 171 0 171 0 59 0 207 0 208 0 60 0 232 0 232 0 62 0 254 0 254 0 63 1 26 1 26 0 64 1 49 1 50 0 65 1 87 1 89 0 67 1 95 1 95 0 70 1 132 1 133 0 71 1 156 1 172 0 73 1 175 1 175 0 90 1 197 1 198 0 91 2 207 2 207 0 93 2 217 2 217 0 94 0 1 0 2 2 255 3 0 0 1 0 6 0 6 0 22 0 23 0 32 0 48 0 49 0 1 0 5 2 252 2 253 2 254 3 3 3 4 0 2 0 12 0 4 0 19 0 0 0 21 0 55 0 16 0 165 0 165 0 51 0 208 0 208 0 52 0 232 0 232 0 53 1 50 1 50 0 54 1 89 1 89 0 55 1 133 1 133 0 56 1 156 1 156 0 57 1 158 1 172 0 58 1 175 1 175 0 73 1 198 1 198 0 74 0 1 0 1 2 251 0 1 0 3 0 18 0 24 0 44 0 1 0 2 3 1 3 2 0 1 0 12 0 4 0 8 0 12 0 18 0 24 0 34 0 38 0 44 1 50 1 162 1 163 1 175 0 1 0 3 2 227 2 235 2 237 0 1 0 0 0 10 0 108 2 26 0 2 68 70 76 84 0 14 108 97 116 110 0 56 0 4 0 0 0 0 255 255 0 16 0 0 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16 0 18 0 20 0 22 0 24 0 26 0 28 0 30 0 4 0 0 0 0 255 255 0 16 0 1 0 3 0 5 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 21 0 23 0 25 0 27 0 29 0 31 0 32 97 97 108 116 0 194 97 97 108 116 0 202 99 97 115 101 0 210 99 97 115 101 0 216 99 99 109 112 0 222 99 99 109 112 0 236 100 110 111 109 0 250 100 110 111 109 1 0 102 114 97 99 1 6 102 114 97 99 1 16 110 117 109 114 1 26 110 117 109 114 1 32 111 110 117 109 1 38 111 110 117 109 1 44 111 114 100 110 1 50 111 114 100 110 1 56 115 97 108 116 1 62 115 97 108 116 1 74 115 105 110 102 1 86 115 105 110 102 1 92 115 115 48 49 1 98 115 115 48 49 1 104 115 115 48 50 1 110 115 115 48 50 1 116 115 115 48 51 1 122 115 115 48 51 1 128 115 115 48 52 1 134 115 115 48 52 1 140 115 117 98 115 1 146 115 117 98 115 1 152 115 117 112 115 1 158 115 117 112 115 1 166 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 1 0 16 0 0 0 1 0 16 0 0 0 5 0 3 0 4 0 5 0 6 0 7 0 0 0 5 0 3 0 4 0 5 0 6 0 7 0 0 0 1 0 9 0 0 0 1 0 9 0 0 0 3 0 8 0 10 0 11 0 0 0 3 0 8 0 10 0 11 0 0 0 1 0 8 0 0 0 1 0 8 0 0 0 1 0 15 0 0 0 1 0 15 0 0 0 1 0 12 0 0 0 1 0 12 0 0 0 4 0 17 0 18 0 19 0 20 0 0 0 4 0 17 0 18 0 19 0 20 0 0 0 1 0 14 0 0 0 1 0 14 4 4 0 1 0 17 3 254 0 1 0 17 4 8 0 1 0 18 4 2 0 1 0 18 4 56 0 1 0 19 4 50 0 1 0 19 4 72 0 1 0 20 4 66 0 1 0 20 0 0 0 1 0 14 0 0 0 1 0 14 0 0 0 2 0 12 0 13 0 0 0 2 0 12 0 13 0 23 0 48 0 56 0 64 0 72 0 80 0 90 0 98 0 106 0 114 0 122 0 130 0 138 0 150 0 158 0 166 0 174 0 182 0 190 0 198 0 206 0 214 0 222 0 230 0 1 0 0 0 1 3 250 0 3 0 0 0 1 4 176 0 2 0 0 0 1 0 174 0 6 0 0 0 1 0 204 0 6 0 0 0 2 0 214 0 234 0 4 0 0 0 1 0 242 0 4 0 0 0 1 1 100 0 6 0 0 0 1 2 42 0 1 0 0 0 1 2 52 0 1 0 0 0 1 2 78 0 1 0 0 0 1 2 104 0 6 0 0 0 3 2 102 2 120 2 138 0 1 0 0 0 1 2 146 0 1 0 0 0 1 2 202 0 1 0 0 0 1 2 228 0 1 0 0 0 1 2 254 0 1 0 0 0 1 2 252 0 1 0 0 0 1 2 254 0 1 0 0 0 1 3 6 0 1 0 0 0 1 3 58 0 1 0 0 0 1 3 78 0 4 0 0 0 1 4 220 0 1 0 0 0 1 4 230 0 1 5 62 0 4 0 14 0 20 0 26 0 32 0 2 0 8 2 227 0 2 0 18 2 227 0 2 0 34 2 227 0 2 0 44 2 227 0 3 0 0 0 1 5 24 0 1 5 36 0 1 0 0 0 2 0 3 0 0 0 2 5 24 5 30 0 1 5 36 0 1 0 0 0 21 0 3 0 0 0 1 5 22 0 1 5 16 0 1 0 0 0 22 0 1 5 10 0 3 0 12 0 54 0 88 0 5 0 12 0 18 0 24 0 30 0 36 3 15 0 2 2 223 3 13 0 2 2 225 3 19 0 2 2 229 3 29 0 2 2 233 3 17 0 2 2 239 0 4 0 10 0 16 0 22 0 28 3 23 0 2 2 223 3 21 0 2 2 225 3 27 0 2 2 229 3 25 0 2 2 239 0 4 0 10 0 16 0 22 0 28 3 11 0 2 2 223 3 7 0 2 2 225 3 5 0 2 2 231 3 9 0 2 2 245 0 1 4 154 0 16 0 38 0 48 0 58 0 68 0 78 0 88 0 98 0 108 0 118 0 128 0 146 0 156 0 166 0 176 0 186 0 196 0 1 0 4 0 77 0 2 3 1 0 1 0 4 0 105 0 2 3 1 0 1 0 4 0 112 0 2 2 229 0 1 0 4 0 128 0 2 3 1 0 1 0 4 0 171 0 2 3 1 0 1 0 4 0 207 0 2 3 1 0 1 0 4 0 254 0 2 3 1 0 1 0 4 1 6 0 2 2 245 0 1 0 4 1 26 0 2 3 1 0 2 0 6 0 12 1 33 0 2 2 229 1 30 0 2 2 255 0 1 0 4 1 48 0 2 3 1 0 1 0 4 1 55 0 2 2 245 0 1 0 4 1 95 0 2 3 1 0 1 0 4 1 110 0 2 2 245 0 1 0 4 1 132 0 2 3 1 0 1 0 4 1 202 0 2 2 255 0 3 0 1 3 240 0 1 4 18 0 0 0 1 0 0 0 22 0 2 4 60 0 14 2 70 2 71 2 72 2 73 2 74 2 75 2 76 2 77 2 78 2 79 2 82 2 83 2 80 2 81 0 2 4 26 0 14 2 56 2 57 2 58 2 59 2 60 2 61 2 62 2 63 2 64 2 65 2 68 2 69 2 66 2 67 0 1 4 14 0 131 0 3 0 1 4 14 0 1 4 24 0 0 0 1 0 0 0 22 0 3 0 1 4 14 0 1 4 30 0 0 0 1 0 0 0 22 0 3 0 2 4 32 4 22 0 1 4 12 0 0 0 1 0 0 0 22 0 2 4 20 0 29 2 87 2 88 2 89 2 90 2 91 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 106 2 107 2 108 2 109 2 110 2 111 2 112 2 113 2 114 2 115 0 2 3 122 0 14 2 28 2 29 2 30 2 31 2 32 2 33 2 34 2 35 2 36 2 37 2 40 2 41 2 38 2 39 0 2 3 88 0 14 2 42 2 43 2 44 2 45 2 46 2 47 2 48 2 49 2 50 2 51 2 54 2 55 2 52 2 53 0 1 3 166 0 10 0 1 3 170 0 1 0 0 1 0 0 2 3 222 0 3 2 25 2 26 2 24 0 0 1 1 0 2 3 216 0 25 1 175 1 176 1 177 1 178 1 179 1 180 1 181 1 182 1 183 1 184 1 185 1 186 1 187 1 188 1 189 1 190 1 191 1 192 1 193 1 194 1 195 1 196 1 197 2 85 2 116 0 0 1 2 0 2 3 184 0 9 1 198 1 199 1 200 1 201 1 202 1 203 1 204 1 205 2 117 0 0 1 3 0 1 3 178 255 163 0 2 3 178 0 92 2 88 2 89 2 90 2 91 2 92 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 106 2 107 2 108 2 109 2 110 2 111 2 112 1 176 1 177 1 178 1 179 1 180 1 181 1 182 1 183 1 184 1 185 1 186 1 187 1 188 1 189 1 190 1 191 1 192 1 193 1 194 1 195 1 196 1 197 2 113 2 114 1 199 1 200 1 201 1 202 1 203 1 204 1 205 2 115 2 25 2 26 2 24 2 22 2 85 2 116 2 117 2 27 2 224 2 226 2 228 2 230 2 232 2 234 2 236 2 238 2 240 2 242 2 244 2 246 2 248 3 0 3 2 3 6 3 8 3 10 3 12 3 14 3 16 3 18 3 20 3 22 3 24 3 26 3 28 3 30 0 1 3 176 0 16 0 38 0 44 0 50 0 62 0 74 0 86 0 98 0 110 0 122 0 134 0 146 0 158 0 170 0 180 0 190 0 200 0 2 2 87 1 175 0 2 2 93 1 198 0 5 2 70 2 56 2 28 2 42 1 217 0 5 2 71 2 57 2 29 2 43 1 218 0 5 2 72 2 58 2 30 2 44 1 219 0 5 2 73 2 59 2 31 2 45 1 220 0 5 2 74 2 60 2 32 2 46 1 221 0 5 2 75 2 61 2 33 2 47 1 222 0 5 2 76 2 62 2 34 2 48 1 223 0 5 2 77 2 63 2 35 2 49 1 224 0 5 2 78 2 64 2 36 2 50 1 225 0 5 2 79 2 65 2 37 2 51 1 226 0 4 2 82 2 68 2 40 2 54 0 4 2 83 2 69 2 41 2 55 0 4 2 80 2 66 2 38 2 52 0 4 2 81 2 67 2 39 2 53 0 1 0 132 0 1 0 8 0 1 0 4 1 49 0 2 3 1 0 2 2 238 0 45 3 35 1 49 2 56 2 57 2 58 2 59 2 60 2 61 2 62 2 63 2 64 2 65 2 66 2 67 2 68 2 69 2 224 2 226 2 228 2 230 2 232 2 234 2 236 2 238 2 240 2 242 2 244 2 246 2 248 3 0 3 2 3 6 3 8 3 10 3 12 3 14 3 16 3 18 3 20 3 22 3 24 3 26 3 28 3 30 3 36 0 1 0 4 0 91 0 149 1 12 1 73 0 1 0 1 2 233 0 1 0 1 0 38 0 1 0 1 3 1 0 1 0 1 2 225 0 1 0 1 1 48 0 1 0 3 2 227 2 233 2 237 0 1 0 16 0 4 0 8 0 10 0 12 0 18 0 24 0 30 0 33 0 34 0 36 0 38 0 41 0 44 0 49 0 50 1 198 0 2 0 5 0 4 0 29 0 0 0 56 0 78 0 26 0 80 0 122 0 49 0 124 0 152 0 92 0 154 0 232 0 121 0 1 0 28 2 223 2 225 2 227 2 229 2 231 2 233 2 235 2 237 2 239 2 241 2 243 2 245 2 247 2 255 3 1 3 5 3 7 3 9 3 11 3 13 3 15 3 17 3 19 3 21 3 23 3 25 3 27 3 29 0 2 0 3 1 207 1 216 0 0 1 227 1 228 0 10 2 1 2 2 0 12 0 1 0 1 2 7 0 2 0 1 2 70 2 79 0 0 0 1 0 2 0 3 3 33 0 2 0 2 2 56 2 69 0 0 2 136 2 138 0 14 0 2 0 1 2 70 2 83 0 0 0 2 0 1 2 56 2 65 0 0 0 1 0 2 3 35 3 36 0 2 0 3 0 30 0 55 0 0 1 10 1 11 0 26 1 163 1 163 0 28 0 2 0 1 1 207 1 216 0 0 0 1 0 29 2 21 2 223 2 225 2 227 2 229 2 231 2 233 2 235 2 237 2 239 2 241 2 243 2 245 2 247 2 255 3 1 3 5 3 7 3 9 3 11 3 13 3 15 3 17 3 19 3 21 3 23 3 25 3 27 3 29 0 1 0 3 1 248 1 249 2 11 0 2 0 4 0 30 0 30 0 0 0 233 0 254 0 1 2 84 2 84 0 23 2 87 2 87 0 24 0 2 0 3 0 36 0 36 0 0 1 27 1 33 0 1 2 93 2 93 0 8 0 1 0 1 2 120 0 1 0 92 0 31 0 32 0 33 0 34 0 35 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 233 0 234 0 235 0 236 0 237 0 238 0 239 0 240 0 241 0 242 0 243 0 244 0 245 0 246 0 247 0 248 0 249 0 250 0 251 0 252 0 253 0 254 1 10 1 11 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 163 1 248 1 249 2 11 2 21 2 84 2 87 2 93 2 120 2 223 2 225 2 227 2 229 2 231 2 233 2 235 2 237 2 239 2 241 2 243 2 245 2 247 2 255 3 1 3 5 3 7 3 9 3 11 3 13 3 15 3 17 3 19 3 21 3 23 3 25 3 27 3 29 0 2 0 5 0 30 0 30 0 0 0 36 0 36 0 1 1 207 1 216 0 2 1 227 1 228 0 12 2 1 2 2 0 14 0 1 0 45 0 3 1 48 2 70 2 71 2 72 2 73 2 74 2 75 2 76 2 77 2 78 2 79 2 80 2 81 2 82 2 83 2 223 2 225 2 227 2 229 2 231 2 233 2 235 2 237 2 239 2 241 2 243 2 245 2 247 2 255 3 1 3 5 3 7 3 9 3 11 3 13 3 15 3 17 3 19 3 21 3 23 3 25 3 27 3 29 3 33 0 0 0 1 0 0 0 8 0 0 0 4 0 14 0 2 105 100 101 111 114 111 109 110 0 2 68 70 76 84 0 14 108 97 116 110 0 14 0 6 0 0 0 0 0 1 0 2 0 8 0 12 0 1 255 86 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 32 68 0 0 0 20 0 0 0 0 0 0 32 60 48 130 32 56 6 9 42 134 72 134 247 13 1 7 2 160 130 32 41 48 130 32 37 2 1 1 49 11 48 9 6 5 43 14 3 2 26 5 0 48 97 6 10 43 6 1 4 1 130 55 2 1 4 160 83 48 81 48 44 6 10 43 6 1 4 1 130 55 2 1 28 162 30 128 28 0 60 0 60 0 60 0 79 0 98 0 115 0 111 0 108 0 101 0 116 0 101 0 62 0 62 0 62 48 33 48 9 6 5 43 14 3 2 26 5 0 4 20 100 230 183 224 68 29 217 171 22 228 33 234 41 10 75 105 164 243 16 171 160 130 27 15 48 130 2 60 48 130 1 165 2 16 112 186 228 29 16 217 41 52 182 56 202 123 3 204 186 191 48 13 6 9 42 134 72 134 247 13 1 1 2 5 0 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 30 23 13 57 54 48 49 50 57 48 48 48 48 48 48 90 23 13 50 56 48 56 48 49 50 51 53 57 53 57 90 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 129 159 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 129 141 0 48 129 137 2 129 129 0 201 92 89 158 242 27 138 1 20 180 16 223 4 64 219 227 87 175 106 69 64 143 132 12 11 209 51 217 217 17 207 238 2 88 31 37 247 42 168 68 5 170 236 3 31 120 127 158 147 185 154 0 170 35 125 214 172 133 162 99 69 199 114 39 204 244 76 198 117 113 210 57 239 79 66 240 117 223 10 144 198 142 32 111 152 15 248 172 35 95 112 41 54 164 201 134 231 177 154 32 203 83 165 133 231 61 190 125 154 254 36 69 51 220 118 21 237 15 162 113 100 76 101 46 129 104 69 167 2 3 1 0 1 48 13 6 9 42 134 72 134 247 13 1 1 2 5 0 3 129 129 0 187 76 18 43 207 44 38 0 79 20 19 221 166 251 252 10 17 132 140 243 40 28 103 146 47 124 182 197 250 223 240 232 149 188 29 143 108 44 168 81 204 115 216 164 192 83 240 78 214 38 192 118 1 87 129 146 94 33 241 209 177 255 231 208 33 88 205 105 23 227 68 28 156 25 68 57 137 92 220 156 0 15 86 141 2 153 237 162 144 69 76 228 187 16 164 61 240 50 3 14 241 206 248 232 201 81 140 230 98 159 230 159 192 125 183 114 156 201 54 58 107 159 78 168 255 100 13 100 48 130 3 238 48 130 3 87 160 3 2 1 2 2 16 126 147 235 251 124 198 78 89 234 75 154 119 212 6 252 59 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 139 49 11 48 9 6 3 85 4 6 19 2 90 65 49 21 48 19 6 3 85 4 8 19 12 87 101 115 116 101 114 110 32 67 97 112 101 49 20 48 18 6 3 85 4 7 19 11 68 117 114 98 97 110 118 105 108 108 101 49 15 48 13 6 3 85 4 10 19 6 84 104 97 119 116 101 49 29 48 27 6 3 85 4 11 19 20 84 104 97 119 116 101 32 67 101 114 116 105 102 105 99 97 116 105 111 110 49 31 48 29 6 3 85 4 3 19 22 84 104 97 119 116 101 32 84 105 109 101 115 116 97 109 112 105 110 103 32 67 65 48 30 23 13 49 50 49 50 50 49 48 48 48 48 48 48 90 23 13 50 48 49 50 51 48 50 51 53 57 53 57 90 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 177 172 179 73 84 75 151 28 18 10 216 37 121 145 34 87 42 111 220 184 38 196 67 115 107 194 191 46 80 90 251 20 194 118 142 67 1 37 67 180 161 226 69 244 232 183 123 195 116 204 34 215 180 148 0 2 247 77 237 191 180 183 68 36 107 205 95 69 59 209 68 206 67 18 115 23 130 139 105 180 43 203 153 30 172 114 27 38 77 113 31 177 49 221 251 81 97 2 83 166 170 245 73 44 5 120 69 165 47 137 206 231 153 231 254 140 226 87 63 61 198 146 220 74 248 123 51 228 121 10 251 240 117 136 65 156 255 197 3 81 153 170 215 108 159 147 105 135 101 41 131 133 194 96 20 196 200 201 59 20 218 192 129 240 31 13 116 222 146 34 171 202 247 251 116 124 39 230 247 74 27 127 167 195 158 45 174 138 234 166 230 170 39 22 125 97 247 152 113 17 188 226 80 161 75 229 93 250 229 14 167 44 159 170 101 32 211 216 150 232 200 124 165 78 72 68 255 25 226 68 7 146 11 215 104 132 128 93 106 120 100 69 205 96 70 126 84 193 19 124 197 121 241 201 193 113 2 3 1 0 1 163 129 250 48 129 247 48 29 6 3 85 29 14 4 22 4 20 95 154 245 110 92 204 204 116 154 212 221 125 239 63 219 236 76 128 46 221 48 50 6 8 43 6 1 5 5 7 1 1 4 38 48 36 48 34 6 8 43 6 1 5 5 7 48 1 134 22 104 116 116 112 58 47 47 111 99 115 112 46 116 104 97 119 116 101 46 99 111 109 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 63 6 3 85 29 31 4 56 48 54 48 52 160 50 160 48 134 46 104 116 116 112 58 47 47 99 114 108 46 116 104 97 119 116 101 46 99 111 109 47 84 104 97 119 116 101 84 105 109 101 115 116 97 109 112 105 110 103 67 65 46 99 114 108 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 84 105 109 101 83 116 97 109 112 45 50 48 52 56 45 49 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 3 9 155 143 121 239 127 89 48 170 239 104 181 250 227 9 29 187 79 130 6 93 55 95 166 82 159 22 141 234 28 146 9 68 110 245 109 235 88 124 48 232 249 105 141 35 115 11 18 111 71 169 174 57 17 248 42 177 155 176 26 195 142 235 89 150 0 173 206 12 77 178 208 49 166 8 92 42 122 252 226 122 29 87 76 168 101 24 233 121 64 98 37 150 110 199 199 55 106 131 33 8 142 65 234 221 217 87 63 29 119 73 135 42 22 6 94 166 56 106 34 18 163 81 25 131 126 182 48 130 4 144 48 130 3 249 160 3 2 1 2 2 16 27 9 59 120 96 150 218 55 187 164 81 148 70 200 150 120 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 30 23 13 48 54 49 49 48 56 48 48 48 48 48 48 90 23 13 50 49 49 49 48 55 50 51 53 57 53 57 90 48 129 202 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 58 48 56 6 3 85 4 11 19 49 40 99 41 32 50 48 48 54 32 86 101 114 105 83 105 103 110 44 32 73 110 99 46 32 45 32 70 111 114 32 97 117 116 104 111 114 105 122 101 100 32 117 115 101 32 111 110 108 121 49 69 48 67 6 3 85 4 3 19 60 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 32 45 32 71 53 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 175 36 8 8 41 122 53 158 96 12 170 231 75 59 78 220 124 188 60 69 28 187 43 224 254 41 2 249 87 8 163 100 133 21 39 245 241 173 200 49 137 93 34 232 42 170 166 66 179 143 248 185 85 183 177 183 75 179 254 143 126 7 87 236 239 67 219 102 98 21 97 207 96 13 164 216 222 248 224 195 98 8 61 84 19 235 73 202 89 84 133 38 229 43 143 27 159 235 245 161 145 194 51 73 216 67 99 106 82 75 210 143 232 112 81 77 209 137 105 123 199 112 246 179 220 18 116 219 123 93 75 86 211 150 191 21 119 161 176 244 162 37 242 175 28 146 103 24 229 244 6 4 239 144 185 228 0 228 221 58 181 25 255 2 186 244 60 238 224 139 235 55 139 236 244 215 172 242 246 240 61 175 221 117 145 51 25 29 28 64 203 116 36 25 33 147 217 20 254 172 42 82 199 143 213 4 73 228 141 99 71 136 60 105 131 203 254 71 189 43 126 79 197 149 174 14 157 212 209 67 192 103 115 227 20 8 126 229 63 159 115 184 51 10 207 93 63 52 135 150 138 238 83 232 37 21 2 3 1 0 1 163 130 1 91 48 130 1 87 48 15 6 3 85 29 19 1 1 255 4 5 48 3 1 1 255 48 49 6 3 85 29 31 4 42 48 40 48 38 160 36 160 34 134 32 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 112 99 97 51 46 99 114 108 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 61 6 3 85 29 32 4 54 48 52 48 50 6 4 85 29 32 0 48 42 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 29 6 3 85 29 14 4 22 4 20 127 211 101 167 194 221 236 187 240 48 9 243 67 57 250 2 175 51 49 51 48 109 6 8 43 6 1 5 5 7 1 12 4 97 48 95 161 93 160 91 48 89 48 87 48 85 22 9 105 109 97 103 101 47 103 105 102 48 33 48 31 48 7 6 5 43 14 3 2 26 4 20 143 229 211 26 134 172 141 142 107 195 207 128 106 212 72 24 44 123 25 46 48 37 22 35 104 116 116 112 58 47 47 108 111 103 111 46 118 101 114 105 115 105 103 110 46 99 111 109 47 118 115 108 111 103 111 46 103 105 102 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 163 205 125 30 247 199 117 141 72 231 86 52 76 0 144 117 169 81 165 86 193 109 188 254 245 83 34 233 152 162 172 154 126 112 30 179 142 59 69 227 134 149 49 218 109 76 251 52 80 128 150 205 36 242 64 223 4 63 226 101 206 52 34 97 21 234 102 112 100 210 241 110 243 202 24 89 106 65 70 126 130 222 25 176 112 49 86 105 13 12 230 29 157 113 88 220 204 222 98 245 225 122 16 2 216 122 220 59 250 87 189 201 233 143 70 33 57 159 81 101 76 142 58 190 40 65 112 29 48 130 4 163 48 130 3 139 160 3 2 1 2 2 16 14 207 244 56 200 254 191 53 110 4 216 106 152 27 26 80 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 48 30 23 13 49 50 49 48 49 56 48 48 48 48 48 48 90 23 13 50 48 49 50 50 57 50 51 53 57 53 57 90 48 98 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 52 48 50 6 3 85 4 3 19 43 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 83 105 103 110 101 114 32 45 32 71 52 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 162 99 11 57 68 184 187 35 167 68 73 187 14 255 161 240 97 10 83 147 176 152 219 173 44 15 74 197 110 255 134 60 83 85 15 21 206 4 63 43 253 169 150 150 217 190 97 121 11 91 201 76 134 118 229 224 67 75 34 149 238 194 43 67 193 159 216 104 180 142 64 79 238 133 56 185 17 197 35 242 100 88 240 21 50 111 78 87 161 174 136 164 2 215 42 30 205 75 225 221 99 213 23 137 50 91 176 94 153 90 168 157 40 80 14 23 238 150 219 97 59 69 81 29 207 18 86 11 146 71 252 171 174 246 102 61 71 172 112 114 231 146 231 95 205 16 185 196 131 100 148 25 189 37 128 225 232 210 34 165 208 186 2 122 161 119 147 91 101 195 238 23 116 188 65 134 42 220 8 76 140 146 140 145 45 158 119 68 31 104 214 168 116 119 219 14 91 50 139 86 139 51 189 217 99 200 73 157 58 197 197 234 51 11 210 241 163 27 244 139 190 217 179 87 139 59 222 4 167 122 34 178 36 174 46 199 112 197 190 78 131 38 8 251 11 189 169 79 153 8 225 16 40 114 170 205 2 3 1 0 1 163 130 1 87 48 130 1 83 48 12 6 3 85 29 19 1 1 255 4 2 48 0 48 22 6 3 85 29 37 1 1 255 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 7 128 48 115 6 8 43 6 1 5 5 7 1 1 4 103 48 101 48 42 6 8 43 6 1 5 5 7 48 1 134 30 104 116 116 112 58 47 47 116 115 45 111 99 115 112 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 48 55 6 8 43 6 1 5 5 7 48 2 134 43 104 116 116 112 58 47 47 116 115 45 97 105 97 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 47 116 115 115 45 99 97 45 103 50 46 99 101 114 48 60 6 3 85 29 31 4 53 48 51 48 49 160 47 160 45 134 43 104 116 116 112 58 47 47 116 115 45 99 114 108 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 47 116 115 115 45 99 97 45 103 50 46 99 114 108 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 84 105 109 101 83 116 97 109 112 45 50 48 52 56 45 50 48 29 6 3 85 29 14 4 22 4 20 70 198 105 163 14 74 20 30 213 76 218 82 99 23 63 94 54 188 13 230 48 31 6 3 85 29 35 4 24 48 22 128 20 95 154 245 110 92 204 204 116 154 212 221 125 239 63 219 236 76 128 46 221 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 120 59 180 145 42 0 76 240 143 98 48 55 120 163 132 39 7 111 24 178 222 37 220 160 212 148 3 170 134 78 37 159 154 64 3 28 221 206 227 121 203 33 104 6 218 182 50 180 109 191 244 44 38 99 51 228 73 100 109 13 230 195 103 14 247 5 164 53 108 124 137 22 198 233 178 223 178 233 221 32 198 113 15 205 149 116 220 182 92 222 189 55 31 67 120 230 120 181 205 40 4 32 163 170 241 75 196 136 41 145 14 128 209 17 252 221 92 118 110 79 94 14 69 70 65 110 13 176 234 56 154 177 58 218 9 113 16 252 28 121 180 128 123 172 105 244 253 156 182 12 22 43 241 127 91 9 61 155 91 226 22 202 19 129 109 0 46 56 13 168 41 143 44 225 178 244 90 169 1 175 21 156 44 47 73 27 219 34 187 195 254 120 148 81 195 134 177 130 136 93 240 61 180 81 161 121 51 43 46 123 185 220 32 9 19 113 235 106 25 91 207 232 165 48 87 44 137 73 63 185 207 127 201 191 62 34 104 99 83 154 189 105 116 172 197 29 60 127 146 224 195 188 28 216 4 117 48 130 5 144 48 130 4 120 160 3 2 1 2 2 16 116 37 83 173 7 228 175 209 21 4 175 152 77 73 237 104 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 48 30 23 13 49 50 48 57 49 56 48 48 48 48 48 48 90 23 13 49 51 48 57 49 56 50 51 53 57 53 57 90 48 129 211 49 11 48 9 6 3 85 4 6 19 2 85 83 49 19 48 17 6 3 85 4 8 19 10 67 97 108 105 102 111 114 110 105 97 49 17 48 15 6 3 85 4 7 19 8 83 97 110 32 74 111 115 101 49 35 48 33 6 3 85 4 10 20 26 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 49 18 48 16 6 3 85 4 11 20 9 84 121 112 101 32 70 111 110 116 49 62 48 60 6 3 85 4 11 19 53 68 105 103 105 116 97 108 32 73 68 32 67 108 97 115 115 32 51 32 45 32 77 105 99 114 111 115 111 102 116 32 83 111 102 116 119 97 114 101 32 86 97 108 105 100 97 116 105 111 110 32 118 50 49 35 48 33 6 3 85 4 3 20 26 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 183 194 17 83 93 40 162 97 211 4 212 113 190 60 57 62 90 192 30 28 186 237 226 148 195 199 56 131 193 235 45 107 15 74 184 138 39 255 23 21 5 202 222 234 75 161 119 146 100 14 79 246 242 211 246 6 190 153 149 179 99 26 198 178 173 225 166 11 112 231 214 53 82 194 33 138 150 50 44 13 98 138 214 31 215 147 231 18 113 245 12 209 174 113 96 85 116 82 208 174 226 85 149 15 224 15 92 233 55 166 8 75 92 145 255 212 146 186 21 228 98 140 106 115 221 80 171 168 86 158 74 94 114 191 19 205 233 192 211 146 155 140 185 107 10 185 39 79 184 81 155 94 22 105 29 211 238 103 213 40 247 228 12 143 235 124 216 90 200 120 107 245 118 234 50 67 223 114 63 154 114 105 141 0 84 210 9 251 158 218 233 194 224 169 67 212 146 116 74 183 196 1 143 227 48 75 173 177 64 88 87 96 214 143 131 243 139 235 192 189 213 67 79 101 17 63 114 21 23 94 173 218 255 113 5 178 41 158 156 13 120 136 231 237 75 156 146 164 205 161 26 253 143 8 158 173 2 3 1 0 1 163 130 1 123 48 130 1 119 48 9 6 3 85 29 19 4 2 48 0 48 14 6 3 85 29 15 1 1 255 4 4 3 2 7 128 48 64 6 3 85 29 31 4 57 48 55 48 53 160 51 160 49 134 47 104 116 116 112 58 47 47 99 115 99 51 45 50 48 49 48 45 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 49 48 46 99 114 108 48 68 6 3 85 29 32 4 61 48 59 48 57 6 11 96 134 72 1 134 248 69 1 7 23 3 48 42 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 3 48 113 6 8 43 6 1 5 5 7 1 1 4 101 48 99 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 59 6 8 43 6 1 5 5 7 48 2 134 47 104 116 116 112 58 47 47 99 115 99 51 45 50 48 49 48 45 97 105 97 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 49 48 46 99 101 114 48 31 6 3 85 29 35 4 24 48 22 128 20 207 153 169 234 123 38 244 75 201 142 143 215 240 5 38 239 227 210 167 157 48 17 6 9 96 134 72 1 134 248 66 1 1 4 4 3 2 4 16 48 22 6 10 43 6 1 4 1 130 55 2 1 27 4 8 48 6 1 1 0 1 1 255 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 170 104 97 189 175 221 82 2 196 142 65 165 125 111 136 158 190 254 185 203 183 107 237 194 56 101 27 98 49 68 219 155 173 57 51 191 133 148 255 108 0 249 186 148 148 160 155 91 231 79 31 45 3 89 224 227 162 221 99 214 188 229 43 116 1 123 45 164 0 116 54 219 94 146 153 155 248 123 23 185 191 221 56 76 230 44 132 250 78 42 218 16 153 213 244 141 149 129 51 237 100 15 155 72 68 34 52 95 7 99 113 219 104 204 209 81 255 56 223 218 232 14 179 193 234 37 175 8 179 12 157 202 48 147 202 12 126 221 59 128 216 35 162 10 213 22 37 220 12 218 219 221 50 3 181 155 31 250 209 82 249 217 154 42 16 62 140 177 151 27 65 46 169 31 1 47 111 73 9 220 108 183 43 206 127 216 47 220 204 125 246 105 30 223 148 29 201 197 118 165 226 247 52 43 118 211 244 46 62 20 226 234 106 65 242 223 237 127 14 47 220 238 174 246 5 108 10 64 64 241 79 33 138 131 131 164 182 142 7 103 21 115 212 6 96 220 196 218 25 139 75 40 53 182 193 225 48 130 6 10 48 130 4 242 160 3 2 1 2 2 16 82 0 229 170 37 86 252 26 134 237 150 201 212 75 51 199 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 202 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 58 48 56 6 3 85 4 11 19 49 40 99 41 32 50 48 48 54 32 86 101 114 105 83 105 103 110 44 32 73 110 99 46 32 45 32 70 111 114 32 97 117 116 104 111 114 105 122 101 100 32 117 115 101 32 111 110 108 121 49 69 48 67 6 3 85 4 3 19 60 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 32 45 32 71 53 48 30 23 13 49 48 48 50 48 56 48 48 48 48 48 48 90 23 13 50 48 48 50 48 55 50 51 53 57 53 57 90 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 245 35 75 94 165 215 138 187 50 233 212 87 247 239 228 199 38 126 173 25 152 254 168 157 125 148 246 54 107 16 215 117 129 48 127 4 104 127 203 43 117 30 205 29 8 140 223 105 148 167 55 163 156 123 128 224 153 225 238 55 77 95 206 59 20 238 134 212 208 245 39 53 188 37 11 56 167 140 99 157 23 163 8 165 171 176 251 205 106 98 130 76 213 33 218 27 217 241 227 132 59 138 42 79 133 91 144 1 79 201 167 118 16 127 39 3 124 190 174 126 125 193 221 249 5 188 27 72 156 105 231 192 164 60 60 65 0 62 223 150 229 197 228 148 113 214 85 1 199 0 38 74 64 60 181 161 38 169 12 167 109 128 142 144 37 123 207 191 63 28 235 47 150 250 229 135 119 198 181 86 178 122 59 84 48 83 27 223 98 52 255 30 209 244 90 147 40 133 229 76 23 78 126 91 253 164 147 153 127 223 205 239 164 117 239 239 21 246 71 231 248 25 114 216 46 52 26 166 180 167 76 126 189 187 79 12 61 87 241 48 214 166 54 142 214 128 118 215 25 46 165 205 126 52 45 137 2 3 1 0 1 163 130 1 254 48 130 1 250 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 112 6 3 85 29 32 4 105 48 103 48 101 6 11 96 134 72 1 134 248 69 1 7 23 3 48 86 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 42 6 8 43 6 1 5 5 7 2 2 48 30 26 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 109 6 8 43 6 1 5 5 7 1 12 4 97 48 95 161 93 160 91 48 89 48 87 48 85 22 9 105 109 97 103 101 47 103 105 102 48 33 48 31 48 7 6 5 43 14 3 2 26 4 20 143 229 211 26 134 172 141 142 107 195 207 128 106 212 72 24 44 123 25 46 48 37 22 35 104 116 116 112 58 47 47 108 111 103 111 46 118 101 114 105 115 105 103 110 46 99 111 109 47 118 115 108 111 103 111 46 103 105 102 48 52 6 3 85 29 31 4 45 48 43 48 41 160 39 160 37 134 35 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 112 99 97 51 45 103 53 46 99 114 108 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 29 6 3 85 29 37 4 22 48 20 6 8 43 6 1 5 5 7 3 2 6 8 43 6 1 5 5 7 3 3 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 86 101 114 105 83 105 103 110 77 80 75 73 45 50 45 56 48 29 6 3 85 29 14 4 22 4 20 207 153 169 234 123 38 244 75 201 142 143 215 240 5 38 239 227 210 167 157 48 31 6 3 85 29 35 4 24 48 22 128 20 127 211 101 167 194 221 236 187 240 48 9 243 67 57 250 2 175 51 49 51 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 86 34 230 52 164 196 97 203 72 185 1 173 86 168 100 15 217 140 145 196 187 204 12 229 173 122 160 34 127 223 71 56 74 45 108 209 127 113 26 124 236 112 169 177 240 79 228 15 12 83 250 21 94 254 116 152 73 36 133 129 38 28 145 20 71 176 76 99 140 187 161 52 212 198 69 232 13 133 38 115 3 208 169 140 100 109 220 113 146 230 69 5 96 21 89 81 57 252 88 20 107 254 212 164 237 121 107 8 12 65 114 231 55 34 6 9 190 35 233 63 68 154 30 233 97 157 204 177 144 92 252 61 210 141 172 66 61 101 54 212 180 61 64 40 143 155 16 207 35 38 204 75 32 203 144 31 93 140 76 52 202 60 216 229 55 214 111 165 32 189 52 235 38 217 174 13 231 197 154 247 161 180 33 145 51 111 134 232 88 187 37 124 116 14 88 254 117 27 99 63 206 49 124 155 143 27 150 158 197 83 118 132 91 156 173 145 250 172 237 147 186 93 200 33 83 194 130 83 99 175 18 13 80 135 17 27 61 84 82 150 138 44 156 61 146 26 8 154 5 46 199 147 165 72 145 211 49 130 4 155 48 130 4 151 2 1 1 48 129 201 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 2 16 116 37 83 173 7 228 175 209 21 4 175 152 77 73 237 104 48 9 6 5 43 14 3 2 26 5 0 160 129 152 48 20 6 9 43 6 1 4 1 130 55 40 1 49 7 3 5 0 3 0 0 0 48 25 6 9 42 134 72 134 247 13 1 9 3 49 12 6 10 43 6 1 4 1 130 55 2 1 4 48 28 6 10 43 6 1 4 1 130 55 2 1 11 49 14 48 12 6 10 43 6 1 4 1 130 55 2 1 21 48 34 6 10 43 6 1 4 1 130 55 2 1 12 49 20 48 18 161 16 128 14 119 119 119 46 97 100 111 98 101 46 99 111 109 32 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 57 92 28 252 60 84 58 38 241 171 91 25 239 3 40 3 55 167 213 65 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 130 1 0 14 66 218 192 18 10 120 88 19 44 82 169 6 139 217 84 89 18 216 168 25 185 123 64 155 27 101 197 92 241 52 14 57 230 204 14 177 23 107 250 17 78 159 171 120 46 114 35 145 154 3 132 72 110 34 182 130 177 34 79 84 69 67 160 4 203 235 15 98 231 145 148 20 81 95 186 42 199 1 220 168 212 169 58 195 246 207 36 109 160 40 20 93 115 92 147 70 19 26 240 10 137 244 190 130 42 174 209 162 79 96 227 133 248 4 137 209 163 169 166 58 92 80 100 103 47 65 150 101 221 94 40 118 49 36 32 251 190 96 147 218 166 173 24 166 116 5 59 237 244 31 147 238 112 163 19 131 33 216 177 180 29 152 102 62 60 81 7 199 173 107 223 219 150 181 255 92 231 0 251 94 154 48 53 41 83 7 127 26 99 133 90 167 30 231 222 183 88 237 246 86 126 33 245 1 211 96 107 223 106 40 64 171 224 90 241 240 210 90 166 204 147 24 130 116 212 195 54 7 212 67 255 23 217 199 122 28 113 198 151 154 80 251 206 39 233 33 209 153 154 137 184 225 85 94 99 161 130 2 11 48 130 2 7 6 9 42 134 72 134 247 13 1 9 6 49 130 1 248 48 130 1 244 2 1 1 48 114 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 2 16 14 207 244 56 200 254 191 53 110 4 216 106 152 27 26 80 48 9 6 5 43 14 3 2 26 5 0 160 93 48 24 6 9 42 134 72 134 247 13 1 9 3 49 11 6 9 42 134 72 134 247 13 1 7 1 48 28 6 9 42 134 72 134 247 13 1 9 5 49 15 23 13 49 51 48 49 49 49 49 57 50 53 53 57 90 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 112 141 209 226 152 174 39 75 248 25 139 153 73 75 216 39 37 197 109 57 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 130 1 0 24 154 16 174 148 240 53 183 57 132 123 57 109 200 171 206 135 250 94 50 68 179 14 112 200 146 191 38 149 206 141 140 38 148 4 186 163 157 138 189 250 135 139 38 83 250 166 27 216 134 51 225 62 148 150 43 214 180 223 170 248 214 109 55 15 3 236 81 96 3 147 235 35 170 255 31 15 193 89 43 25 97 64 142 198 61 160 238 90 50 11 80 79 110 195 224 52 222 145 52 133 140 43 213 173 101 100 97 4 238 200 151 47 78 245 216 228 24 124 23 123 191 47 75 98 105 79 70 116 135 102 223 239 102 88 11 28 71 6 15 90 153 109 185 136 218 16 181 69 227 141 71 37 32 30 83 90 225 146 125 175 225 131 13 85 252 217 56 10 91 252 103 159 53 243 34 191 98 60 226 75 145 122 223 181 37 19 179 184 18 70 148 129 252 102 225 16 91 117 155 177 62 44 71 121 211 181 185 231 55 33 86 189 94 114 88 201 254 233 208 9 77 104 186 207 252 59 109 154 254 221 59 241 201 0 0 111 242 204 157 88 187 125 56 118 0 101 229 164 86 111 87 168 125 98 189]! ! !SourceCodeProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 18:12'! install FreeTypeFontProvider current addFromFileContents: self fontContents baseName: self originalFileName! ! !SourceCodeProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 18:12'! originalFileName ^ 'SourceCodePro-Regular.ttf'! ! !SourceSansProRegular commentStamp: '' prior: 70145270! http://www.google.com/fonts/specimen/Source+Sans+Pro Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ! !SourceSansProRegular class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/11/2013 12:46'! initialize self new install.! ! !SourceSansProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:46'! fontContents ^#[0 1 0 0 0 19 1 0 0 4 0 48 66 65 83 69 139 25 148 177 0 2 41 64 0 0 0 58 68 83 73 71 177 23 225 234 0 2 41 124 0 0 32 88 71 68 69 70 88 132 89 247 0 1 192 64 0 0 1 40 71 80 79 83 14 157 190 227 0 1 193 104 0 0 76 42 71 83 85 66 126 148 155 223 0 2 13 148 0 0 27 172 79 83 47 50 90 180 148 91 0 0 1 184 0 0 0 96 99 109 97 112 110 23 68 69 0 0 19 132 0 0 10 40 99 118 116 32 13 153 0 250 0 0 31 108 0 0 0 40 102 112 103 109 6 89 156 55 0 0 29 172 0 0 1 115 103 97 115 112 255 255 0 3 0 1 192 56 0 0 0 8 103 108 121 102 233 113 161 67 0 0 40 76 0 1 50 212 104 101 97 100 254 20 179 226 0 0 1 60 0 0 0 54 104 104 101 97 7 163 7 11 0 0 1 116 0 0 0 36 104 109 116 120 191 168 172 255 0 0 2 24 0 0 17 108 108 111 99 97 185 54 7 102 0 0 31 148 0 0 8 184 109 97 120 112 6 117 2 64 0 0 1 152 0 0 0 32 110 97 109 101 157 24 237 18 0 1 91 32 0 0 60 178 112 111 115 116 223 235 189 176 0 1 151 212 0 0 40 98 112 114 101 112 150 4 250 235 0 0 31 32 0 0 0 75 0 1 0 0 0 1 12 204 166 237 33 15 95 15 60 245 0 9 3 232 0 0 0 0 205 151 128 165 0 0 0 0 205 151 227 22 255 64 254 189 4 136 3 184 0 0 0 9 0 2 0 0 0 0 0 0 0 1 0 0 3 216 254 239 0 0 4 170 255 64 255 22 4 136 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 91 0 1 0 0 4 91 0 90 0 7 0 113 0 5 0 1 0 0 0 0 0 10 0 0 2 0 1 115 0 3 0 1 0 3 1 199 1 144 0 5 0 0 2 138 2 88 0 0 0 75 2 138 2 88 0 0 1 94 0 50 1 32 0 0 2 11 5 3 3 4 3 2 2 4 32 0 0 7 0 0 0 1 0 0 0 0 0 0 0 0 65 68 66 69 0 64 0 0 254 255 2 238 255 6 0 0 3 216 1 17 32 0 1 147 0 0 0 0 1 224 2 148 0 0 0 32 0 3 2 141 0 89 0 0 0 0 0 202 0 0 0 202 0 0 2 32 0 3 2 76 0 90 2 59 0 52 2 103 0 90 2 15 0 90 1 238 0 90 2 105 0 52 2 140 0 90 1 7 0 90 1 224 0 31 2 67 0 90 1 230 0 90 2 215 0 90 2 135 0 90 2 152 0 52 2 64 0 90 2 152 0 52 2 69 0 90 2 22 0 42 2 24 0 28 2 133 0 87 2 3 0 0 3 18 0 23 2 1 0 15 1 220 255 255 2 27 0 45 2 0 0 58 2 43 0 82 1 200 0 46 2 43 0 47 1 240 0 46 1 36 0 30 1 248 0 45 2 32 0 82 0 246 0 67 0 247 255 216 1 239 0 82 0 255 0 82 3 61 0 82 2 35 0 82 2 30 0 46 2 43 0 82 2 38 0 47 1 91 0 82 1 163 0 28 1 82 0 24 2 32 0 75 1 211 0 12 2 206 0 24 1 190 0 14 1 211 0 12 1 169 0 31 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 2 32 0 3 3 54 0 8 2 59 0 52 2 59 0 52 2 59 0 52 2 59 0 52 2 59 0 52 2 103 0 90 2 103 0 90 2 103 0 90 2 126 0 33 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 15 0 90 2 105 0 52 2 105 0 52 2 105 0 52 2 105 0 52 2 105 0 52 2 105 0 52 2 105 0 52 2 140 0 90 2 140 0 90 2 140 0 90 2 175 0 32 1 7 0 0 1 7 0 80 1 7 255 251 1 7 255 242 1 7 255 252 1 7 0 7 1 7 0 74 1 7 255 251 1 7 0 67 1 7 0 78 1 7 0 43 1 224 0 31 2 67 0 90 1 230 0 83 1 230 0 90 1 230 0 90 1 230 0 90 1 230 0 90 1 230 0 10 1 230 0 90 1 233 0 13 2 215 0 90 2 135 0 90 2 135 0 90 2 135 0 90 2 135 0 90 2 135 0 90 2 135 0 90 2 135 0 90 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 52 2 152 0 50 3 79 0 52 2 152 0 54 2 152 0 54 2 152 0 54 2 152 0 54 2 152 0 54 2 152 0 54 2 152 0 52 2 69 0 90 2 69 0 90 2 69 0 90 2 69 0 90 2 69 0 90 2 69 0 90 2 22 0 42 2 22 0 42 2 22 0 42 2 22 0 42 2 22 0 42 2 22 0 42 2 22 0 42 2 155 0 91 2 24 0 28 2 24 0 28 2 24 0 28 2 24 0 28 2 24 0 28 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 133 0 87 2 147 0 87 2 147 0 87 2 147 0 87 2 147 0 87 2 147 0 87 2 147 0 87 3 18 0 23 3 18 0 23 3 18 0 23 3 18 0 23 1 220 255 255 1 220 255 255 1 220 255 255 1 220 255 255 1 220 255 255 1 220 255 255 1 220 255 255 1 220 255 255 2 27 0 45 2 27 0 45 2 27 0 45 2 27 0 45 2 126 0 33 2 71 0 90 2 147 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 2 0 0 58 3 17 0 58 1 200 0 46 1 200 0 46 1 200 0 46 1 200 0 46 1 200 0 46 2 61 0 47 2 43 0 47 2 43 0 47 2 43 0 47 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 240 0 46 1 248 0 45 1 248 0 45 1 248 0 45 1 248 0 45 1 248 0 45 1 248 0 45 1 248 0 45 2 32 255 244 2 32 0 82 2 32 0 82 2 32 0 8 0 246 0 12 0 246 0 58 0 246 255 250 0 246 255 240 0 246 255 244 0 246 0 0 0 246 255 250 0 246 0 59 0 246 0 67 0 246 0 38 0 246 0 38 0 246 0 82 0 247 255 216 1 239 0 82 1 239 0 82 0 255 0 68 1 8 0 82 1 106 0 82 0 255 0 82 0 255 0 82 0 255 255 255 0 255 0 46 1 6 0 23 3 61 0 82 2 35 0 82 2 35 0 82 2 35 0 82 2 35 0 82 2 35 0 82 2 35 0 82 2 35 0 82 3 7 0 63 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 3 71 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 2 30 0 46 1 91 0 82 1 91 0 36 1 91 0 82 1 91 0 67 1 91 0 67 1 91 255 253 1 163 0 28 1 163 0 28 1 163 0 28 1 163 0 28 1 163 0 28 1 163 0 28 1 163 0 28 2 64 0 82 1 82 0 24 1 82 0 24 1 82 0 24 1 82 0 24 1 82 0 24 1 82 0 9 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 32 0 75 2 206 0 24 2 206 0 24 2 206 0 24 2 206 0 24 1 211 0 12 1 211 0 12 1 211 0 12 1 211 0 12 1 211 0 12 1 211 0 12 1 211 0 12 1 211 0 12 1 169 0 31 1 169 0 31 1 169 0 31 1 169 0 31 2 33 0 53 2 43 0 82 0 247 255 216 2 43 0 47 1 240 0 37 2 47 0 50 2 62 0 30 2 44 0 30 2 35 0 30 2 82 0 30 1 88 0 46 1 88 0 41 1 88 0 46 1 88 0 36 1 88 0 27 1 88 0 37 1 88 0 46 1 88 0 46 1 88 0 36 1 88 0 46 1 88 0 46 1 88 0 46 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 43 0 47 2 47 0 50 2 47 0 50 2 47 0 50 2 47 0 50 2 47 0 50 2 47 0 50 2 47 0 50 2 47 0 50 0 246 0 82 0 246 0 69 1 8 0 82 1 106 0 82 0 246 0 38 0 246 0 69 0 246 0 0 0 246 255 255 1 1 0 23 2 44 0 30 2 97 0 32 1 241 0 44 1 241 0 79 1 241 0 36 1 241 0 26 1 241 0 17 1 241 0 25 1 241 0 48 1 241 0 44 1 241 0 41 1 241 0 40 2 26 0 55 1 113 0 50 1 245 0 37 1 241 0 26 2 7 0 34 1 241 0 25 2 13 0 61 1 235 0 44 2 13 0 55 2 13 0 52 1 241 0 44 1 241 0 79 1 241 0 36 1 241 0 26 1 241 0 17 1 241 0 25 1 241 0 49 1 241 0 44 1 241 0 41 1 241 0 30 2 6 0 52 1 113 0 50 1 241 0 41 1 241 0 26 2 6 0 25 1 241 0 25 2 6 0 57 1 233 0 44 2 7 0 49 2 6 0 38 0 249 0 65 0 249 0 47 0 249 0 65 0 249 0 47 3 180 0 94 1 33 0 85 1 33 0 85 1 169 0 38 1 169 0 48 0 249 0 80 1 169 0 80 0 249 0 57 0 249 0 63 1 169 0 57 1 169 0 63 0 249 0 63 1 169 0 63 1 15 0 45 1 15 0 54 1 173 0 45 1 173 0 54 1 55 0 41 1 55 0 41 1 224 0 41 3 32 0 41 1 241 0 41 3 32 0 41 0 249 0 65 1 48 0 40 1 244 0 12 1 47 0 82 1 47 0 38 1 47 0 94 1 47 0 31 1 47 0 34 1 47 0 31 1 94 0 10 0 241 0 92 1 94 0 14 0 241 0 92 1 162 0 58 1 198 0 54 1 198 0 54 1 241 0 45 2 48 0 41 2 232 0 49 2 231 0 49 1 167 0 23 2 125 0 3 2 125 0 27 3 79 0 51 3 14 0 51 1 241 0 35 1 111 0 35 1 111 0 87 1 111 0 40 1 111 0 35 1 111 0 42 1 111 0 35 1 111 0 45 1 111 0 50 1 111 0 45 1 111 0 39 0 237 0 65 0 237 0 39 0 177 0 43 0 177 0 33 1 111 0 35 1 111 0 87 1 111 0 40 1 111 0 35 1 111 0 42 1 111 0 35 1 111 0 45 1 111 0 50 1 111 0 45 1 111 0 39 0 237 0 65 0 237 0 39 0 177 0 43 0 177 0 33 1 111 0 35 1 111 0 87 1 111 0 40 1 111 0 35 1 111 0 42 1 111 0 35 1 111 0 45 1 111 0 50 1 111 0 45 1 111 0 39 0 237 0 65 0 237 0 39 0 177 0 43 0 177 0 33 1 111 0 35 1 111 0 87 1 111 0 40 1 111 0 35 1 111 0 42 1 111 0 35 1 111 0 45 1 111 0 50 1 111 0 45 1 111 0 39 0 237 0 65 0 237 0 39 0 177 0 43 0 177 0 33 1 89 0 37 1 118 0 33 1 109 0 30 1 89 0 37 1 118 0 52 1 50 0 30 1 118 0 33 1 80 0 28 0 201 0 19 1 87 0 30 1 110 0 52 0 166 0 42 0 169 255 230 1 81 0 52 0 174 0 52 2 47 0 52 1 113 0 52 1 109 0 30 1 118 0 52 1 118 0 33 0 240 0 52 1 27 0 19 0 232 0 16 1 114 0 50 1 65 0 8 1 231 0 16 1 51 0 8 1 63 0 8 1 34 0 21 1 80 0 28 1 80 0 28 1 80 0 25 1 118 0 33 1 121 0 34 0 166 0 52 1 75 0 41 1 241 0 26 1 241 0 52 1 241 0 53 1 241 0 23 1 241 0 23 1 241 0 61 1 241 0 18 1 241 0 61 1 241 0 53 1 241 0 11 1 241 0 10 1 241 0 68 1 241 0 10 1 241 0 47 1 241 0 61 1 241 0 72 1 241 0 23 0 86 255 89 0 86 255 89 0 86 255 89 3 56 0 35 4 170 0 35 3 13 0 64 3 40 0 64 3 28 0 35 3 36 0 64 3 53 0 41 3 36 0 64 3 53 0 35 3 53 0 35 3 33 0 31 1 241 0 34 1 241 0 34 1 241 0 50 1 241 0 34 1 246 0 188 1 241 0 34 1 241 0 34 1 241 0 34 1 241 0 34 1 241 0 34 1 241 0 34 1 241 0 60 1 241 0 34 1 241 0 36 1 241 0 36 1 241 0 34 2 49 0 24 3 14 0 40 2 38 0 82 2 16 0 40 1 76 0 52 2 45 0 41 2 80 0 30 2 174 0 43 1 248 0 22 2 161 0 89 1 153 0 21 3 32 0 46 2 107 0 26 2 107 0 42 2 107 0 39 2 107 0 42 1 50 0 54 1 50 0 12 1 188 0 41 1 120 0 54 2 59 0 23 2 59 0 23 2 59 0 57 2 59 0 57 2 59 0 23 2 59 0 23 2 59 0 18 2 59 0 18 3 31 0 74 3 31 0 74 2 100 0 0 1 247 0 29 2 5 0 56 0 249 0 81 1 170 0 81 0 249 0 57 0 249 0 63 0 150 0 30 0 162 0 20 2 30 0 160 2 30 0 206 2 30 0 142 2 30 0 142 0 114 0 22 1 21 0 16 0 225 0 46 0 225 0 0 0 114 0 22 2 30 0 132 2 30 0 136 2 30 0 148 2 30 0 145 2 30 0 178 2 30 0 173 2 30 0 217 2 30 0 192 2 30 0 205 0 0 255 145 0 0 255 125 0 0 255 191 0 0 255 205 0 0 255 127 0 0 255 120 0 0 255 117 0 0 255 111 0 0 255 133 0 0 255 132 0 0 255 130 0 0 255 133 0 0 255 202 0 0 255 199 0 0 255 121 0 0 255 121 0 0 255 192 0 0 255 192 0 0 255 163 0 0 255 163 0 0 255 158 0 0 255 147 0 0 255 127 0 0 255 120 0 0 255 64 0 0 255 64 0 0 255 203 0 0 255 209 0 0 255 247 0 0 255 202 0 0 255 121 0 0 255 171 0 0 255 171 0 0 255 171 0 0 255 190 0 0 255 190 0 0 255 130 0 0 255 132 0 0 255 124 0 0 255 124 0 0 255 124 0 0 255 124 0 0 255 124 0 0 255 120 0 0 255 124 0 0 255 124 0 0 255 140 0 0 255 128 0 0 255 140 0 0 255 128 0 0 255 140 0 0 255 128 0 0 255 125 0 0 255 124 0 0 255 130 0 0 255 134 0 0 255 130 0 0 255 134 0 0 255 130 0 0 255 134 0 0 255 125 0 0 255 124 0 18 255 227 0 0 255 187 0 202 0 0 1 241 0 0 0 135 0 0 0 135 0 0 2 91 0 30 1 7 0 8 2 152 0 52 2 32 0 8 0 246 255 254 2 30 0 46 0 0 255 132 0 0 255 128 2 76 0 90 2 43 0 82 2 67 0 90 1 239 0 82 2 15 0 90 1 240 0 46 2 152 0 52 2 30 0 46 1 134 0 92 1 176 0 27 1 47 0 94 1 47 0 31 1 47 0 94 1 47 0 31 1 122 0 94 1 122 0 31 1 47 0 94 1 47 0 31 1 47 0 94 1 47 0 31 1 241 0 44 1 241 0 44 2 26 0 55 2 26 0 55 0 246 0 67 1 214 0 3 2 14 0 90 1 247 0 52 2 43 0 90 1 219 0 90 1 187 0 90 2 37 0 52 2 82 0 90 1 7 0 90 1 182 0 31 2 2 0 90 1 181 0 90 2 135 0 90 2 73 0 90 2 77 0 52 2 6 0 90 2 77 0 51 2 11 0 90 1 218 0 42 1 211 0 28 2 71 0 87 1 191 0 0 2 172 0 23 1 197 0 15 1 159 255 255 1 219 0 45 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 1 214 0 3 2 200 0 8 2 33 0 33 2 14 0 90 1 247 0 52 1 247 0 52 1 247 0 52 1 247 0 52 1 247 0 52 2 42 0 90 2 42 0 90 2 42 0 90 2 62 0 33 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 1 219 0 90 2 37 0 52 2 37 0 52 2 37 0 52 2 37 0 52 2 37 0 52 2 37 0 52 2 37 0 52 2 82 0 90 2 82 0 90 2 82 0 90 2 118 0 32 1 7 0 0 1 7 0 80 1 7 255 251 1 7 255 242 1 7 255 252 1 7 0 7 1 7 0 74 1 7 255 251 1 7 0 67 1 7 0 77 1 7 0 43 1 7 0 8 1 182 0 31 2 2 0 90 2 2 0 90 1 181 0 86 1 181 0 90 1 181 0 90 1 181 0 90 1 181 0 90 1 181 0 13 1 181 0 90 1 181 0 13 2 135 0 90 2 73 0 90 2 73 0 90 2 73 0 90 2 73 0 90 2 73 0 90 2 73 0 90 2 73 0 90 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 47 2 223 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 77 0 52 2 11 0 90 2 11 0 90 2 11 0 90 2 11 0 90 2 11 0 90 2 11 0 90 1 218 0 42 1 218 0 42 1 218 0 42 1 218 0 42 1 218 0 42 1 218 0 42 1 218 0 42 3 180 0 42 2 82 0 91 1 211 0 28 1 211 0 28 1 211 0 28 1 211 0 28 1 211 0 28 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 71 0 87 2 85 0 87 2 85 0 87 2 85 0 87 2 85 0 87 2 85 0 87 2 85 0 87 2 172 0 23 2 172 0 23 2 172 0 23 2 172 0 23 1 159 255 255 1 159 255 255 1 159 255 255 1 159 255 255 1 159 255 255 1 159 255 255 1 159 255 255 1 159 255 255 1 219 0 45 1 219 0 45 1 219 0 45 1 219 0 45 2 62 0 33 2 13 0 90 2 70 0 58 2 22 0 32 1 249 0 55 1 102 0 50 1 197 0 34 1 203 0 23 1 225 0 36 1 209 0 31 1 232 0 62 1 175 0 33 1 233 0 54 1 227 0 49 1 22 0 41 1 158 0 41 2 175 0 41 0 249 0 81 1 107 255 255 1 136 0 57 1 123 0 32 1 155 0 57 1 95 0 57 1 74 0 57 1 155 0 32 1 178 0 57 0 176 0 57 1 65 0 18 1 131 0 57 1 69 0 57 1 230 0 57 1 175 0 57 1 187 0 32 1 129 0 57 1 187 0 31 1 133 0 57 1 100 0 26 1 100 0 17 1 175 0 56 1 90 255 254 2 14 0 13 1 90 0 8 1 64 255 253 1 102 0 27 0 177 0 43 0 236 0 41 1 92 0 41 2 50 0 41 0 0 255 133 0 0 255 132 0 0 0 0 0 0 0 3 0 0 0 3 0 0 2 20 0 1 0 0 0 0 0 28 0 3 0 1 0 0 2 20 0 6 1 248 0 0 0 9 0 247 0 3 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 2 2 7 2 49 2 143 2 162 1 212 2 6 2 27 2 28 2 37 2 173 1 254 2 18 1 253 2 33 1 213 1 214 1 215 1 216 1 217 1 218 1 219 1 220 1 221 1 222 1 255 2 0 2 179 2 178 2 180 2 4 2 47 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 2 29 2 35 2 30 2 184 2 26 2 228 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 2 31 2 34 2 32 2 186 0 0 0 60 0 63 0 79 0 89 0 140 0 149 0 192 0 231 0 230 0 232 0 234 0 233 0 237 0 253 1 7 1 6 1 8 1 10 1 35 1 34 1 36 1 38 1 60 1 67 1 66 1 68 1 70 1 69 1 111 1 110 1 112 1 114 2 38 2 141 2 147 2 144 2 40 2 25 2 41 1 103 2 44 2 42 2 45 2 229 2 238 2 185 0 78 0 160 2 190 2 183 2 181 2 182 2 145 2 191 2 192 2 197 2 198 2 189 2 193 2 106 2 108 0 0 0 252 1 81 2 5 2 3 2 188 2 194 2 148 2 187 2 195 2 16 2 17 2 1 3 54 0 56 0 59 0 148 0 161 1 82 2 20 2 21 2 10 2 11 2 8 2 9 2 176 2 221 1 140 0 218 2 159 2 146 2 14 2 15 1 156 1 157 2 39 2 24 2 12 2 13 2 163 0 58 0 90 0 57 0 92 0 88 0 117 0 118 0 120 0 116 0 146 0 147 0 0 0 145 0 189 0 190 0 188 1 45 2 230 2 237 2 239 2 240 2 243 2 241 2 244 2 242 2 245 2 231 0 4 8 20 0 0 1 26 1 0 0 7 0 26 0 0 0 13 0 47 0 57 0 64 0 90 0 96 0 122 0 126 0 191 0 196 0 209 0 214 0 223 0 228 0 241 0 246 1 49 1 73 1 101 1 126 1 128 1 143 1 146 1 161 1 176 1 220 1 231 1 235 2 27 2 55 2 67 2 81 2 89 2 97 2 176 2 179 2 185 2 188 2 191 2 204 2 221 2 227 3 4 3 12 3 15 3 19 3 27 3 36 3 40 3 46 3 49 3 192 29 67 29 73 29 77 29 80 29 82 29 88 29 91 29 156 29 160 29 187 30 7 30 15 30 23 30 33 30 37 30 43 30 59 30 73 30 83 30 99 30 111 30 133 30 143 30 147 30 151 30 158 30 249 32 7 32 22 32 26 32 30 32 34 32 38 32 48 32 51 32 58 32 61 32 68 32 113 32 121 32 127 32 137 32 142 32 148 32 161 32 164 32 167 32 172 32 178 32 181 32 186 33 19 33 23 33 32 33 34 33 38 33 46 33 84 33 94 33 147 34 2 34 6 34 15 34 18 34 21 34 26 34 30 34 43 34 72 34 96 34 101 35 31 37 160 37 179 37 183 37 189 37 193 37 198 37 202 38 17 38 106 39 19 39 82 39 231 46 37 251 2 254 255 255 255 0 0 0 0 0 13 0 32 0 48 0 58 0 65 0 91 0 97 0 123 0 160 0 192 0 197 0 210 0 215 0 224 0 229 0 242 0 247 1 52 1 76 1 104 1 128 1 143 1 146 1 160 1 175 1 205 1 230 1 234 2 24 2 55 2 67 2 81 2 89 2 97 2 176 2 178 2 183 2 187 2 190 2 198 2 216 2 225 3 0 3 6 3 15 3 18 3 27 3 35 3 38 3 46 3 49 3 192 29 67 29 71 29 77 29 79 29 82 29 86 29 91 29 156 29 160 29 187 30 6 30 12 30 22 30 32 30 36 30 42 30 52 30 66 30 82 30 90 30 108 30 128 30 142 30 146 30 151 30 158 30 160 32 7 32 18 32 24 32 28 32 32 32 38 32 48 32 50 32 57 32 61 32 68 32 112 32 116 32 125 32 128 32 141 32 148 32 161 32 164 32 166 32 171 32 177 32 181 32 185 33 19 33 23 33 32 33 34 33 38 33 46 33 83 33 91 33 144 34 2 34 6 34 15 34 17 34 21 34 25 34 30 34 43 34 72 34 96 34 100 35 28 37 160 37 178 37 182 37 188 37 192 37 198 37 201 38 16 38 106 39 19 39 82 39 230 46 34 251 0 254 255 255 255 0 1 255 245 0 0 1 165 0 0 255 195 0 0 255 189 0 0 0 0 255 120 0 0 255 191 0 0 0 6 0 0 0 80 0 0 0 0 0 0 0 0 1 189 255 86 1 2 0 0 0 0 0 0 0 0 0 0 0 0 255 96 0 247 255 71 255 64 255 57 255 196 0 0 0 0 0 37 0 36 0 32 0 0 0 0 0 0 0 0 255 255 255 254 255 247 255 240 0 0 255 236 255 234 254 253 229 42 0 0 229 38 0 0 229 41 0 0 229 39 228 211 228 210 228 203 229 60 0 0 229 48 0 0 0 0 0 0 0 0 0 0 228 246 0 0 0 0 0 0 0 0 0 0 226 214 226 24 0 0 227 48 0 0 0 0 0 0 0 0 225 219 226 115 226 172 225 213 227 14 226 91 0 0 225 194 0 0 225 192 225 189 225 245 225 244 225 242 225 241 0 0 225 233 225 231 225 228 225 180 225 20 225 14 225 11 225 158 225 154 225 84 225 78 225 57 224 190 224 189 224 183 0 0 224 139 0 0 224 160 224 150 224 115 224 89 224 81 224 48 221 45 221 31 221 29 221 25 221 23 221 8 0 0 220 201 220 114 219 200 219 126 219 106 213 48 6 155 5 91 0 1 0 0 0 0 1 22 0 0 1 50 0 0 1 60 0 0 1 68 1 74 0 0 1 134 0 0 1 156 0 0 1 170 0 0 1 192 2 52 2 94 2 144 0 0 0 0 0 0 2 182 2 184 2 186 2 216 2 218 2 220 0 0 0 0 0 0 0 0 0 0 0 0 2 214 2 216 0 0 0 0 0 0 2 214 2 224 2 228 2 236 0 0 0 0 0 0 0 0 2 240 0 0 0 0 0 0 0 0 2 236 0 0 2 238 0 0 2 238 0 0 0 0 0 0 0 0 0 0 2 232 0 0 2 236 2 238 2 240 2 242 3 0 0 0 3 12 3 30 3 36 3 46 3 48 0 0 0 0 3 46 0 0 3 222 3 230 3 234 3 238 0 0 0 0 0 0 0 0 0 0 0 0 3 230 0 0 3 230 0 0 0 0 0 0 0 0 0 0 0 0 3 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 194 0 0 3 194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 172 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 2 2 7 2 49 2 143 2 162 1 212 2 6 2 27 2 28 2 37 2 173 1 254 2 18 1 253 2 33 1 255 2 0 2 179 2 178 2 180 2 4 2 47 2 29 2 35 2 30 2 184 2 26 2 228 2 31 2 34 2 32 2 186 3 54 2 3 2 147 2 144 2 142 2 145 2 36 2 40 2 238 2 42 2 106 2 16 2 188 2 19 2 44 2 239 2 141 2 183 2 52 2 53 2 229 2 191 2 41 2 24 2 244 2 51 2 108 2 17 2 164 2 165 2 166 2 5 0 63 0 78 0 79 0 88 0 89 0 90 0 92 0 116 0 117 0 118 0 120 0 227 0 140 2 175 0 160 0 188 0 189 0 190 0 192 0 216 0 228 1 103 0 237 0 252 0 253 1 6 1 7 1 8 1 10 1 34 1 35 1 36 1 38 1 149 1 60 2 176 1 81 1 110 1 111 1 112 1 114 1 138 1 150 1 140 0 61 0 235 0 62 0 236 0 77 0 251 0 80 0 254 0 81 0 255 0 83 1 1 0 82 1 0 0 84 1 2 0 87 1 5 0 93 1 11 0 94 1 12 0 95 1 13 0 104 1 22 0 91 1 9 0 105 1 23 0 106 1 24 0 107 1 25 0 108 1 26 0 112 1 30 0 115 1 33 0 119 1 37 0 121 1 39 3 59 3 62 0 126 1 43 0 122 1 45 0 127 1 46 0 128 1 47 1 48 0 129 1 49 0 131 1 52 0 130 1 50 0 132 1 51 0 136 1 56 0 138 1 58 0 141 1 61 0 139 1 59 1 65 0 150 1 71 3 60 3 63 0 151 1 72 0 161 1 82 0 169 1 90 0 171 1 91 0 170 1 92 0 175 1 96 0 176 1 97 0 178 1 99 0 177 1 98 0 184 1 105 0 183 1 104 0 191 1 113 0 193 1 115 0 194 1 116 0 195 1 117 0 196 1 118 0 204 1 126 0 213 1 135 0 217 1 139 0 218 0 223 1 145 0 225 1 147 0 224 1 146 0 162 1 83 0 205 1 127 0 64 0 238 0 123 1 40 0 152 1 73 0 197 1 119 0 198 1 120 0 199 1 121 0 200 1 122 0 201 1 123 0 109 1 27 0 168 1 89 0 179 1 100 0 185 1 106 2 118 2 126 2 131 2 133 4 57 2 240 2 243 2 241 2 245 2 237 2 242 2 120 2 127 2 132 2 246 2 248 2 250 2 252 2 254 3 0 3 2 3 4 3 6 3 8 3 10 3 12 3 21 3 22 3 24 2 110 2 112 2 113 2 119 2 121 2 124 2 128 2 129 0 85 1 3 0 86 1 4 0 110 1 28 0 113 1 31 0 114 1 32 3 68 3 69 0 133 1 53 0 134 1 54 0 135 1 55 0 137 1 57 0 142 1 62 0 143 1 63 0 144 1 64 0 172 1 93 0 173 1 94 0 174 1 95 0 180 1 101 0 181 1 102 0 186 1 107 0 187 1 108 0 211 1 133 0 212 1 134 0 214 1 136 0 219 1 141 0 226 1 148 0 65 0 239 0 66 0 240 0 67 0 241 0 68 0 242 0 69 0 243 0 70 0 244 0 71 0 245 0 72 0 246 0 73 0 247 0 74 0 248 0 75 0 249 0 76 0 250 0 96 1 14 0 97 1 15 0 98 1 16 0 99 1 17 0 100 1 18 0 101 1 19 0 102 1 20 0 103 1 21 0 124 1 41 0 125 1 42 0 153 1 74 0 154 1 75 0 155 1 76 0 156 1 77 0 157 1 78 0 158 1 79 0 159 1 80 0 163 1 84 0 164 1 85 0 165 1 86 0 166 1 87 0 167 1 88 0 202 1 124 0 203 1 125 0 206 1 128 0 207 1 129 0 208 1 130 0 209 1 131 0 210 1 132 0 215 1 137 0 220 1 142 0 221 1 143 0 222 1 144 2 22 2 20 2 21 2 23 3 74 2 8 2 9 2 12 2 10 2 11 2 13 2 38 2 39 2 25 2 50 2 117 2 60 2 61 2 122 2 153 2 146 2 197 2 174 2 177 2 194 2 207 2 221 184 0 0 44 75 184 0 9 80 88 177 1 1 142 89 184 1 255 133 184 0 68 29 185 0 9 0 3 95 94 45 184 0 1 44 32 32 69 105 68 176 1 96 45 184 0 2 44 184 0 1 42 33 45 184 0 3 44 32 70 176 3 37 70 82 88 35 89 32 138 32 138 73 100 138 32 70 32 104 97 100 176 4 37 70 32 104 97 100 82 88 35 101 138 89 47 32 176 0 83 88 105 32 176 0 84 88 33 176 64 89 27 105 32 176 0 84 88 33 176 64 101 89 89 58 45 184 0 4 44 32 70 176 4 37 70 82 88 35 138 89 32 70 32 106 97 100 176 4 37 70 32 106 97 100 82 88 35 138 89 47 253 45 184 0 5 44 75 32 176 3 38 80 88 81 88 176 128 68 27 176 64 68 89 27 33 33 32 69 176 192 80 88 176 192 68 27 33 89 89 45 184 0 6 44 32 32 69 105 68 176 1 96 32 32 69 125 105 24 68 176 1 96 45 184 0 7 44 184 0 6 42 45 184 0 8 44 75 32 176 3 38 83 88 176 64 27 176 0 89 138 138 32 176 3 38 83 88 35 33 176 128 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 0 192 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 1 0 138 138 27 138 35 89 32 176 3 38 83 88 35 33 184 1 64 138 138 27 138 35 89 32 184 0 3 38 83 88 176 3 37 69 184 1 128 80 88 35 33 184 1 128 35 33 27 176 3 37 69 35 33 35 33 89 27 33 89 68 45 184 0 9 44 75 83 88 69 68 27 33 33 89 45 0 176 0 43 0 178 1 1 2 43 1 178 2 2 2 43 1 183 2 68 54 42 33 20 0 8 43 183 3 64 54 42 33 20 0 8 43 0 183 1 81 67 52 36 23 0 8 43 0 178 4 8 7 43 176 0 32 69 125 105 24 68 75 176 96 82 88 176 1 27 176 0 89 176 1 142 0 0 20 0 68 0 82 0 86 0 0 0 12 255 51 0 12 1 230 0 12 2 6 0 12 2 62 0 12 2 126 0 12 2 144 0 12 2 200 0 12 0 0 0 98 0 98 0 98 0 98 0 176 1 22 1 102 1 162 1 224 2 22 2 116 2 176 2 208 3 2 3 74 3 112 3 212 4 36 4 120 4 192 5 50 5 134 5 244 6 32 6 102 6 162 7 24 7 116 7 178 7 232 8 94 8 218 9 42 9 162 10 4 10 82 11 2 11 80 11 132 11 204 12 20 12 70 12 198 13 28 13 112 13 236 14 98 14 170 15 22 15 96 15 182 15 242 16 104 16 194 17 24 17 78 17 90 17 102 17 114 17 126 17 138 17 150 17 162 17 174 17 186 17 198 17 210 17 222 17 234 17 246 18 2 18 18 18 30 18 42 18 54 18 66 18 82 18 198 19 42 19 54 19 66 19 78 19 90 19 102 19 114 19 126 19 138 19 146 19 158 19 170 19 182 19 194 19 206 19 218 19 230 19 242 19 254 20 10 20 22 20 34 20 46 20 58 20 70 20 86 20 186 20 198 20 210 20 222 20 234 20 246 21 2 21 14 21 26 21 38 21 50 21 154 21 166 21 178 21 190 21 202 21 214 21 226 21 238 21 250 22 6 22 18 22 92 22 104 22 116 22 128 22 140 22 152 22 164 22 176 22 192 22 204 23 12 23 24 23 36 23 48 23 60 23 72 23 84 23 96 23 108 23 120 23 132 23 144 23 156 23 168 23 180 23 192 23 204 23 216 23 228 23 240 23 252 24 8 24 20 24 36 24 176 25 6 25 118 25 130 25 142 25 154 25 166 25 178 26 50 26 62 26 74 26 86 26 98 26 114 26 126 26 138 26 150 26 162 26 174 26 186 26 198 26 210 27 60 27 72 27 84 27 96 27 108 27 120 27 132 27 144 27 156 27 168 27 180 27 192 27 204 27 216 27 228 27 240 27 252 28 8 28 20 28 32 28 44 28 56 28 170 29 10 29 22 29 34 29 46 29 58 29 70 29 82 29 94 29 106 29 118 29 130 29 142 29 154 29 166 29 178 29 190 29 202 29 214 29 226 29 238 29 250 30 6 30 94 30 162 31 2 31 14 31 26 31 38 31 50 31 62 31 74 31 86 31 98 31 110 31 122 31 134 31 146 31 158 31 170 31 182 31 198 31 210 31 222 31 234 31 246 32 6 32 146 33 72 33 84 33 96 33 108 33 120 33 132 33 144 33 156 33 168 34 32 34 44 34 56 34 68 34 80 34 92 34 104 34 116 34 128 34 140 34 152 34 164 34 176 34 188 34 200 34 212 34 228 35 102 35 114 35 126 35 138 35 150 35 162 35 174 35 186 35 198 35 210 35 222 36 54 36 66 36 78 36 90 36 102 36 114 36 126 36 138 36 150 36 162 36 246 37 54 37 86 37 98 37 110 37 178 37 190 37 202 37 214 37 226 37 238 37 254 38 10 38 88 38 100 38 112 38 124 38 136 38 148 38 160 38 172 38 184 38 196 38 208 38 220 38 232 38 244 39 0 39 12 39 24 39 36 39 48 39 60 39 72 39 84 39 96 39 108 39 124 39 232 40 128 40 240 40 252 41 8 41 20 41 32 41 44 41 166 41 178 41 190 41 202 41 214 41 230 41 242 41 254 42 10 42 22 42 34 42 46 42 58 42 70 42 196 42 208 42 220 42 232 42 244 43 0 43 12 43 24 43 36 43 48 43 60 43 72 43 84 43 96 43 108 43 120 43 132 43 144 43 156 43 168 43 180 43 192 43 204 44 50 44 150 44 162 44 174 44 186 44 198 44 210 44 222 44 234 44 246 45 2 45 14 45 26 45 38 45 50 45 62 45 74 45 86 45 98 45 110 45 122 45 134 45 146 46 20 46 122 46 172 47 8 47 104 47 218 48 82 48 94 48 106 48 236 49 34 49 46 49 58 49 70 49 82 49 94 49 106 49 118 49 130 49 142 49 154 49 248 50 0 50 12 50 24 50 36 50 48 50 60 50 72 50 84 50 96 50 108 50 120 50 132 50 144 50 156 50 168 50 180 50 196 50 208 50 220 50 232 50 244 51 4 51 126 51 134 51 146 51 158 51 170 51 182 51 194 51 206 51 218 51 250 52 6 52 18 52 30 52 42 52 54 52 70 52 82 52 140 52 152 53 76 53 148 53 206 54 26 54 140 54 220 55 58 55 160 55 214 56 98 56 200 57 14 57 60 57 136 57 144 57 152 57 160 57 168 57 222 57 230 57 238 58 46 58 104 58 180 59 26 59 96 59 184 59 192 59 236 59 244 60 80 60 88 60 134 60 212 60 220 60 228 60 236 60 244 61 32 61 40 61 48 61 82 61 124 61 136 61 148 61 164 61 210 61 254 62 76 62 156 62 178 62 190 62 228 63 10 63 22 63 34 63 44 63 58 63 82 63 106 63 118 63 130 63 150 63 158 63 178 63 198 63 218 63 226 63 236 64 18 64 38 64 72 64 106 64 134 64 162 64 250 65 86 65 112 65 130 65 156 65 182 65 222 66 18 66 96 66 208 67 2 67 126 67 254 68 128 68 220 69 116 70 6 70 158 71 28 71 38 71 48 71 58 71 68 71 78 71 88 71 98 71 108 71 118 71 128 71 138 71 148 71 158 71 168 71 178 71 188 71 198 71 208 71 218 71 228 71 238 71 248 72 2 72 12 72 22 72 32 72 42 72 52 72 110 72 146 72 210 73 46 73 112 73 190 74 20 74 66 74 186 75 16 75 50 75 84 75 120 75 172 75 182 75 192 75 202 75 212 75 222 75 232 75 242 75 252 76 6 76 16 76 26 76 36 76 46 76 56 76 64 76 72 76 80 76 164 76 246 77 50 77 134 77 212 78 16 78 154 78 200 78 240 79 44 79 88 79 126 79 198 79 246 80 52 80 124 80 194 80 238 81 72 81 126 81 174 81 206 82 14 82 66 82 130 82 168 83 0 83 88 83 162 83 236 84 70 84 88 84 148 84 248 85 104 85 214 86 68 86 198 87 30 87 124 88 36 88 166 89 86 89 192 90 84 90 236 91 90 91 194 92 32 92 134 92 162 92 170 92 178 92 196 93 126 93 144 93 162 93 180 93 198 93 216 93 234 93 252 94 14 94 32 94 68 94 88 94 120 94 182 94 192 94 204 94 238 95 16 95 58 95 100 95 156 95 190 95 250 96 52 96 64 96 86 96 168 97 38 97 94 97 190 98 2 98 40 98 94 98 194 98 242 99 18 99 122 99 230 100 4 100 46 100 78 100 120 100 138 100 158 100 248 101 24 101 48 101 80 101 104 101 150 101 190 101 240 102 8 102 58 102 102 102 178 102 214 103 26 103 86 103 106 103 118 103 126 103 134 103 180 103 226 103 236 103 246 104 0 104 10 104 36 104 46 104 54 104 62 104 80 104 90 104 100 104 110 104 120 104 130 104 140 104 150 104 160 104 170 104 196 104 214 104 240 105 2 105 48 105 78 105 148 105 204 105 222 105 240 106 40 106 82 106 116 106 144 106 202 106 254 107 36 107 74 107 122 107 170 107 208 107 242 108 32 108 62 108 100 108 132 108 168 108 202 108 238 109 10 109 60 109 100 109 142 109 184 109 222 110 8 110 50 110 68 110 128 110 188 110 250 111 56 111 126 111 196 112 2 112 64 112 102 112 140 112 178 112 216 113 18 113 74 113 146 113 220 114 16 114 68 114 120 114 172 114 244 115 62 115 148 115 236 116 0 116 40 116 40 116 40 116 40 116 40 116 168 116 180 116 192 117 50 117 62 117 74 117 134 117 190 117 202 117 214 117 226 117 238 117 250 118 6 118 18 118 30 118 64 118 152 118 174 118 194 118 216 118 238 119 24 119 68 119 90 119 112 119 134 119 156 119 244 120 88 120 182 121 28 121 36 121 112 121 212 122 32 122 90 122 150 122 198 123 26 123 88 123 120 123 170 123 246 124 28 124 132 124 212 125 30 125 96 125 200 126 24 126 132 126 178 126 248 127 52 127 170 128 14 128 76 128 130 128 142 128 154 128 166 128 178 128 190 128 202 128 214 128 226 128 238 128 250 129 6 129 18 129 30 129 42 129 54 129 70 129 82 129 94 129 106 129 118 129 134 130 2 130 92 130 204 130 216 130 228 130 240 130 252 131 8 131 20 131 32 131 44 131 56 131 64 131 76 131 88 131 100 131 112 131 124 131 136 131 148 131 160 131 172 131 184 131 196 131 208 131 220 131 232 131 244 132 4 132 112 132 124 132 136 132 148 132 160 132 172 132 184 132 196 132 208 132 220 132 232 132 244 133 90 133 102 133 114 133 126 133 138 133 150 133 162 133 174 133 186 133 198 133 210 134 28 134 40 134 52 134 64 134 76 134 88 134 100 134 112 134 124 134 136 134 152 134 164 134 240 134 252 135 8 135 20 135 32 135 44 135 56 135 68 135 80 135 92 135 104 135 116 135 128 135 140 135 152 135 164 135 176 135 188 135 200 135 212 135 224 135 236 135 248 136 8 136 140 136 230 137 78 137 90 137 102 137 114 137 126 137 138 137 254 138 10 138 22 138 34 138 46 138 58 138 70 138 86 138 98 138 110 138 122 138 134 138 146 138 158 138 170 138 182 138 194 139 42 139 54 139 66 139 78 139 90 139 102 139 114 139 126 139 138 139 150 139 162 139 174 139 186 139 198 139 210 139 222 139 234 139 246 140 2 140 14 140 26 140 38 140 150 140 246 141 2 141 14 141 26 141 38 141 50 141 62 141 74 141 86 141 98 141 110 141 122 141 134 141 146 141 158 141 170 141 182 141 194 141 206 141 218 141 230 141 242 142 70 142 138 142 230 143 152 143 222 144 12 144 88 144 194 145 18 145 106 145 212 146 10 146 148 146 252 147 16 147 36 147 56 147 64 147 122 147 196 148 0 148 44 148 86 148 120 148 190 148 226 148 244 149 26 149 76 149 100 149 170 149 224 150 30 150 78 150 164 150 226 151 62 151 90 151 140 151 180 152 6 152 80 152 124 152 164 152 216 152 242 153 12 153 38 153 76 153 106 153 106 0 5 0 89 0 0 2 53 2 148 0 3 0 6 0 9 0 15 0 21 0 103 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 186 0 5 0 2 0 0 17 18 57 186 0 6 0 2 0 0 17 18 57 186 0 7 0 2 0 0 17 18 57 186 0 8 0 2 0 0 17 18 57 185 0 10 0 1 244 186 0 13 0 2 0 0 17 18 57 184 0 0 16 185 0 18 0 1 244 48 49 19 33 17 33 19 39 17 33 17 7 19 47 1 35 15 1 19 63 1 35 31 1 89 1 220 254 36 192 127 1 88 126 82 73 52 4 54 74 132 49 66 235 66 50 2 148 253 108 1 84 232 254 50 1 206 232 254 230 132 103 103 132 1 73 94 119 119 94 0 0 0 0 2 0 3 0 0 2 29 2 144 0 9 0 17 0 84 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 16 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 186 0 5 0 12 0 14 17 18 57 186 0 11 0 12 0 14 17 18 57 184 0 11 47 185 0 9 0 1 244 48 49 1 39 46 1 39 35 14 1 15 1 23 35 7 35 19 51 19 35 1 113 31 18 32 16 4 15 32 18 31 218 239 63 85 222 94 222 89 1 11 100 55 109 57 57 109 55 100 67 200 2 144 253 112 0 0 0 0 3 0 90 0 0 2 36 2 144 0 19 0 28 0 37 0 91 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 4 62 89 186 0 35 0 0 0 19 17 18 57 184 0 35 47 186 0 10 0 35 0 20 17 18 57 184 0 0 16 185 0 27 0 1 244 184 0 35 16 185 0 28 0 1 244 184 0 19 16 185 0 37 0 1 244 48 49 19 51 50 30 2 21 20 6 7 21 30 1 21 20 14 2 43 1 19 50 54 53 52 38 43 1 21 19 50 54 53 52 38 43 1 21 90 195 50 83 59 33 56 58 72 80 36 66 92 55 209 180 85 73 77 77 101 114 85 94 92 87 114 2 144 18 38 61 43 49 79 15 4 11 78 68 48 72 48 24 1 120 58 55 54 47 214 254 202 63 67 61 57 248 0 0 1 0 52 255 244 2 27 2 156 0 33 0 57 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 16 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 22 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 52 44 78 107 63 60 90 29 47 26 63 42 47 76 54 30 29 52 75 47 48 71 32 47 39 98 63 62 105 77 43 1 72 79 126 88 47 49 32 53 28 33 37 69 98 61 62 99 70 38 38 35 51 45 50 46 87 127 0 0 2 0 90 0 0 2 52 2 144 0 10 0 19 0 53 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 185 0 11 0 1 244 184 0 0 16 185 0 17 0 1 244 48 49 19 51 50 22 21 20 14 2 43 1 55 50 54 53 52 38 43 1 17 90 164 152 158 40 78 114 74 168 158 115 115 115 115 75 2 144 168 157 78 123 85 45 68 138 125 125 132 253 248 0 0 0 1 0 90 0 0 1 222 2 144 0 11 0 77 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 184 0 0 16 185 0 3 0 1 244 186 0 7 0 0 0 11 17 18 57 184 0 7 47 185 0 5 0 1 244 184 0 11 16 185 0 8 0 1 244 48 49 19 33 21 33 21 51 21 35 21 33 21 33 90 1 122 254 217 249 249 1 49 254 124 2 144 70 206 71 238 71 0 0 0 0 1 0 90 0 0 1 212 2 144 0 9 0 67 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 184 0 0 16 185 0 3 0 1 244 186 0 7 0 0 0 9 17 18 57 184 0 7 47 185 0 5 0 1 244 48 49 19 33 21 33 21 51 21 35 17 35 90 1 122 254 217 250 250 83 2 144 70 222 70 254 218 0 0 0 1 0 52 255 244 2 38 2 156 0 37 0 77 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 16 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 184 0 5 16 185 0 12 0 1 244 184 0 33 16 185 0 22 0 1 244 186 0 29 0 5 0 33 17 18 57 184 0 29 47 185 0 27 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 53 35 53 51 17 14 1 35 34 46 2 52 45 81 110 66 68 91 29 47 25 65 50 50 80 56 31 29 55 81 53 35 63 20 139 215 32 105 66 65 108 78 44 1 72 79 126 88 47 51 30 53 26 35 37 69 98 61 62 99 70 38 21 18 171 69 254 236 33 43 46 87 127 0 0 1 0 90 0 0 2 50 2 144 0 11 0 73 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 9 0 0 0 11 17 18 57 184 0 9 47 185 0 3 0 1 244 184 0 0 16 184 0 4 208 184 0 11 16 184 0 7 208 48 49 19 51 17 33 17 51 17 35 17 33 17 35 90 83 1 49 84 84 254 207 83 2 144 254 237 1 19 253 112 1 53 254 203 0 1 0 90 0 0 0 173 2 144 0 3 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 48 49 19 51 17 35 90 83 83 2 144 253 112 0 0 0 1 0 31 255 244 1 137 2 144 0 16 0 43 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 16 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 185 0 3 0 1 244 48 49 55 30 1 51 50 54 53 17 51 17 20 14 2 35 34 39 91 22 56 35 53 52 84 21 43 69 48 123 58 135 39 35 65 75 1 199 254 49 42 75 56 32 105 0 1 0 90 0 0 2 63 2 144 0 12 0 91 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 16 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 186 0 2 0 0 0 12 17 18 57 186 0 9 0 4 0 8 17 18 57 48 49 19 51 17 51 1 51 7 19 35 3 7 21 35 90 83 3 1 17 94 205 237 93 196 113 83 2 144 254 183 1 73 250 254 106 1 85 133 208 0 0 1 0 90 0 0 1 204 2 144 0 5 0 43 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 4 62 89 185 0 2 0 1 244 48 49 19 51 17 33 21 33 90 83 1 31 254 142 2 144 253 183 71 0 0 0 1 0 90 0 0 2 125 2 144 0 25 0 111 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 16 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 186 0 3 0 6 0 9 17 18 57 186 0 14 0 6 0 9 17 18 57 186 0 17 0 25 0 6 17 18 57 186 0 20 0 0 0 25 17 18 57 48 49 19 51 19 23 51 55 19 51 17 35 17 52 54 55 35 7 3 35 3 39 35 30 1 21 17 35 90 98 127 48 4 46 126 98 79 7 4 4 53 126 47 127 52 4 3 8 77 2 144 254 160 134 134 1 96 253 112 1 105 44 106 44 146 254 169 1 87 146 44 106 44 254 151 0 0 0 1 0 90 0 0 2 45 2 144 0 19 0 91 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 16 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 4 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 4 0 11 0 8 17 18 57 186 0 14 0 0 0 19 17 18 57 48 49 19 51 19 23 51 46 1 53 17 51 17 35 3 39 35 30 1 21 17 35 90 86 237 71 4 3 7 79 86 238 71 4 4 7 79 2 144 254 100 136 50 107 52 1 83 253 112 1 157 135 50 103 52 254 169 0 2 0 52 255 244 2 101 2 156 0 19 0 39 0 53 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 16 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 20 0 1 244 184 0 10 16 185 0 30 0 1 244 48 49 5 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 76 62 103 74 41 41 74 103 62 62 103 75 41 41 75 103 62 44 71 51 28 28 51 71 44 44 71 51 28 28 51 71 12 48 89 127 79 79 125 87 46 47 87 125 78 79 127 89 48 73 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 0 2 0 90 0 0 2 21 2 144 0 14 0 23 0 67 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 186 0 12 0 0 0 14 17 18 57 184 0 12 47 185 0 15 0 1 244 184 0 0 16 185 0 22 0 1 244 48 49 19 51 50 30 2 21 20 14 2 43 1 17 35 19 50 54 53 52 38 43 1 17 90 201 54 90 63 35 35 64 89 54 118 83 191 86 83 84 85 108 2 144 20 45 74 54 52 76 50 25 254 252 1 72 65 70 71 55 254 251 0 0 2 0 52 255 92 2 115 2 156 0 19 0 52 0 75 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 16 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 4 62 89 187 0 49 0 1 0 23 0 4 43 184 0 26 16 185 0 5 0 1 244 184 0 36 16 185 0 15 0 1 244 184 0 26 16 184 0 46 208 48 49 19 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 1 14 1 35 34 38 39 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 30 1 51 50 54 55 138 28 51 71 44 44 71 51 28 28 51 71 44 44 71 51 28 1 233 15 50 29 91 122 29 54 88 63 34 41 74 103 62 62 103 75 41 33 61 86 52 23 84 54 22 33 14 1 75 63 101 72 38 38 72 101 63 61 98 68 37 37 68 98 253 227 5 10 87 68 7 54 88 119 72 79 125 87 46 47 87 125 78 71 117 87 55 9 44 42 6 4 0 0 2 0 90 0 0 2 32 2 144 0 8 0 24 0 84 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 16 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 187 0 1 0 1 0 10 0 4 43 184 0 14 16 185 0 8 0 1 244 186 0 23 0 1 0 10 17 18 57 48 49 19 51 50 54 53 52 38 43 1 1 3 35 17 35 17 51 50 30 2 21 20 6 7 19 173 110 77 82 82 77 110 1 21 158 119 83 205 50 85 61 34 80 67 166 1 89 63 64 65 52 253 179 1 21 254 235 2 144 19 44 70 51 77 92 17 254 226 0 0 1 0 42 255 244 1 239 2 156 0 51 0 73 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 16 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 4 62 89 185 0 3 0 1 244 186 0 11 0 22 0 48 17 18 57 184 0 22 16 185 0 29 0 1 244 186 0 37 0 48 0 22 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 47 1 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 31 1 30 3 21 20 14 2 35 34 38 39 92 35 95 51 65 72 17 29 40 23 94 23 48 38 24 31 55 75 45 59 100 35 45 30 73 46 55 67 19 32 38 20 93 28 50 36 21 31 58 82 52 69 118 43 143 37 45 59 48 25 35 25 20 11 41 10 28 40 55 36 37 64 47 26 45 36 54 29 33 51 45 24 33 25 19 8 40 12 31 41 55 36 39 68 51 29 52 45 0 0 1 0 28 0 0 1 252 2 144 0 7 0 51 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 16 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 184 0 2 16 185 0 0 0 1 244 184 0 5 208 48 49 19 35 53 33 21 35 17 35 226 198 1 224 198 84 2 74 70 70 253 182 0 0 0 0 1 0 87 255 244 2 46 2 144 0 25 0 60 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 16 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 185 0 7 0 1 244 48 49 19 51 17 20 30 2 51 50 62 2 53 17 51 17 20 14 2 35 34 46 2 53 87 83 24 41 56 32 33 56 42 24 80 36 63 86 50 50 87 63 36 2 144 254 125 59 80 48 21 21 48 80 59 1 131 254 127 79 108 67 29 29 67 108 79 0 0 1 0 0 0 0 2 3 2 144 0 13 0 64 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 16 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 186 0 5 0 0 0 13 17 18 57 48 49 17 51 19 30 1 23 51 62 1 55 19 51 3 35 89 105 18 27 19 4 18 28 17 105 85 208 97 2 144 254 158 59 100 58 58 100 59 1 98 253 112 0 0 1 0 23 0 0 2 250 2 144 0 33 0 118 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 16 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 16 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 186 0 5 0 0 0 33 17 18 57 186 0 15 0 20 0 23 17 18 57 186 0 28 0 33 0 10 17 18 57 48 49 19 51 19 30 1 23 51 62 1 55 19 51 19 30 1 23 51 62 1 55 19 51 3 35 3 46 1 39 35 14 1 7 3 35 23 86 69 9 20 9 4 11 24 11 91 76 91 12 24 12 4 9 18 10 69 80 136 100 99 9 15 8 4 8 17 8 97 99 2 144 254 155 54 104 54 54 105 53 1 101 254 155 52 106 54 54 105 53 1 101 253 112 1 139 38 73 38 38 73 38 254 117 0 0 0 1 0 15 0 0 1 242 2 144 0 25 0 91 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 16 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 16 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 186 0 6 0 1 0 25 17 18 57 186 0 19 0 15 0 11 17 18 57 48 49 19 3 51 23 30 1 23 51 62 1 63 1 51 3 19 35 39 46 1 39 35 14 1 15 1 35 206 178 92 89 13 23 15 4 14 21 12 87 88 179 191 92 96 13 27 16 4 14 26 12 95 88 1 83 1 61 168 23 43 29 29 43 23 168 254 191 254 177 177 24 51 30 30 51 24 177 0 0 0 0 1 255 255 0 0 1 221 2 144 0 15 0 64 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 16 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 16 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 186 0 6 0 1 0 15 17 18 57 48 49 55 3 51 23 30 1 23 51 62 1 63 1 51 3 21 35 196 197 89 85 16 30 17 4 17 34 15 84 87 197 84 254 1 146 185 36 70 37 37 70 36 185 254 110 254 0 0 1 0 45 0 0 1 241 2 144 0 9 0 61 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 16 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 55 1 33 53 33 21 1 33 21 33 45 1 89 254 198 1 162 254 166 1 93 254 60 50 2 24 70 49 253 232 71 0 0 0 2 0 58 255 244 1 183 1 242 0 27 0 39 0 118 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 8 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 186 0 3 0 15 0 25 17 18 57 184 0 3 47 184 0 15 16 185 0 8 0 1 244 186 0 21 0 20 0 15 17 18 57 184 0 25 16 185 0 31 0 1 244 184 0 21 16 185 0 34 0 1 244 184 0 3 16 185 0 35 0 1 244 48 49 55 52 54 55 52 46 2 35 34 6 7 39 62 1 51 50 22 21 17 35 39 35 14 1 35 34 38 55 20 22 51 50 54 55 53 14 3 58 143 156 9 23 38 30 43 73 29 33 34 98 59 89 80 68 7 2 35 81 45 62 81 81 49 36 35 63 35 61 84 51 22 126 80 85 17 23 44 34 21 32 20 57 22 41 109 91 254 214 58 29 41 72 72 42 36 33 32 135 8 22 30 39 0 2 0 82 255 244 1 251 2 200 0 22 0 38 0 131 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 4 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 186 0 3 0 6 0 16 17 18 57 186 0 19 0 16 0 6 17 18 57 184 0 19 16 185 0 23 0 1 244 184 0 16 16 185 0 26 0 1 244 184 0 6 16 185 0 36 0 1 244 184 0 3 16 185 0 38 0 1 244 48 49 19 51 21 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 35 7 35 55 30 1 51 50 62 2 53 52 46 2 35 34 7 82 82 2 33 78 41 47 72 49 25 34 58 76 42 34 73 32 3 7 66 82 32 63 24 30 51 37 21 14 31 49 34 59 71 2 200 194 88 29 39 35 65 91 56 62 98 68 35 31 29 48 108 28 23 27 49 72 45 40 66 47 26 66 0 0 0 0 1 0 46 255 244 1 176 1 242 0 33 0 57 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 22 0 1 244 48 49 55 52 62 2 51 50 22 23 7 46 1 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 46 38 64 85 47 48 69 25 41 22 47 29 33 56 40 23 22 39 56 33 35 57 22 37 33 81 44 48 84 61 35 242 61 95 66 34 35 23 53 19 24 27 50 69 42 42 68 49 27 29 20 54 29 34 34 65 95 0 0 0 2 0 47 255 244 1 217 2 200 0 20 0 35 0 131 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 18 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 186 0 8 0 18 0 5 17 18 57 186 0 14 0 5 0 18 17 18 57 184 0 18 16 185 0 24 0 1 244 184 0 14 16 185 0 27 0 1 244 184 0 8 16 185 0 28 0 1 244 184 0 5 16 185 0 31 0 1 244 48 49 55 52 62 2 51 50 22 23 39 53 51 17 35 39 35 14 1 35 34 38 55 20 22 51 50 54 55 53 46 1 35 34 14 2 47 35 58 76 42 42 62 32 4 83 68 7 3 29 75 43 92 109 85 70 64 34 60 30 31 57 30 29 51 38 22 242 59 95 66 36 30 26 83 187 253 56 57 28 41 132 123 88 98 33 34 254 28 23 27 49 68 0 0 0 2 0 46 255 244 1 202 1 242 0 27 0 36 0 81 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 186 0 12 0 5 0 23 17 18 57 184 0 12 47 184 0 23 16 185 0 16 0 1 244 184 0 5 16 185 0 31 0 1 244 184 0 12 16 185 0 36 0 1 244 48 49 55 52 62 2 51 50 30 2 21 20 7 33 30 1 51 50 54 55 23 14 1 35 34 46 2 37 52 38 35 34 14 2 7 46 37 61 78 42 46 73 49 26 3 254 184 5 87 70 35 59 27 29 32 78 50 49 85 63 36 1 84 63 57 26 47 38 25 4 242 60 95 66 35 32 60 84 52 27 18 79 92 21 17 54 20 30 35 65 94 97 75 79 21 39 57 37 0 0 0 0 1 0 30 0 0 1 63 2 212 0 21 0 86 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 18 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 184 0 18 16 185 0 2 0 1 244 184 0 5 16 185 0 8 0 1 244 184 0 11 208 184 0 5 16 184 0 14 208 48 49 1 38 35 34 29 1 51 21 35 17 35 17 35 53 55 53 52 54 51 50 22 23 1 45 27 28 68 103 103 82 66 66 69 73 23 41 17 2 133 12 94 77 67 254 93 1 163 62 5 77 75 86 9 7 0 0 0 3 0 45 255 32 1 236 1 242 0 17 0 73 0 89 0 109 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 8 62 89 184 0 0 69 88 184 0 69 47 27 185 0 69 0 6 62 89 185 0 3 0 1 244 186 0 60 0 37 0 69 17 18 57 184 0 60 47 185 0 11 0 1 244 184 0 37 16 184 0 41 208 184 0 41 47 185 0 42 0 1 244 184 0 60 16 184 0 51 208 184 0 51 47 185 0 74 0 1 244 184 0 37 16 185 0 82 0 1 244 48 49 23 20 22 51 50 62 2 53 52 38 43 1 34 38 39 14 1 7 52 54 55 53 46 1 53 52 54 55 53 46 1 53 52 62 2 51 50 22 23 51 21 35 30 1 21 20 14 2 35 34 38 39 14 1 21 20 22 59 1 50 22 21 20 14 2 35 34 46 2 19 50 62 2 53 52 38 35 34 6 21 20 30 2 117 75 66 35 57 40 22 50 48 84 14 33 16 26 24 72 38 33 18 25 34 19 24 39 29 50 67 37 20 35 14 169 100 17 23 28 48 65 37 18 38 17 13 18 36 50 94 85 85 34 64 91 57 45 74 53 29 201 21 37 29 16 60 43 43 60 16 29 37 82 39 46 17 27 36 19 34 26 3 5 19 42 32 31 56 23 4 11 39 29 31 46 13 4 20 67 44 40 64 45 24 7 5 63 17 52 31 39 63 43 24 9 8 11 27 20 23 30 55 61 34 61 46 27 17 34 48 1 78 16 30 43 27 54 59 59 54 27 43 30 16 0 0 1 0 82 0 0 1 215 2 200 0 20 0 88 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 186 0 3 0 6 0 20 17 18 57 184 0 11 208 184 0 6 16 185 0 15 0 1 244 184 0 3 16 185 0 18 0 1 244 48 49 19 51 21 7 62 1 51 50 22 21 17 35 17 52 38 35 34 6 7 17 35 82 82 3 35 76 51 77 71 82 44 48 38 58 37 82 2 200 194 100 33 47 96 94 254 204 1 41 69 61 38 37 254 160 0 2 0 67 0 0 0 181 2 180 0 11 0 15 0 45 0 184 0 0 69 88 184 0 12 47 27 185 0 12 0 8 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 186 0 6 0 0 0 3 43 48 49 19 34 38 53 52 54 51 50 22 21 20 6 7 51 17 35 124 24 33 33 24 24 33 33 66 82 82 2 74 30 23 24 29 29 24 23 30 100 254 26 0 0 0 0 2 255 216 255 39 0 181 2 180 0 15 0 27 0 55 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 6 62 89 186 0 22 0 16 0 3 43 184 0 5 16 185 0 12 0 1 244 48 49 19 51 17 20 6 35 34 38 39 55 30 1 51 50 54 53 19 34 38 53 52 54 51 50 22 21 20 6 83 82 60 73 23 36 13 17 9 24 13 36 24 42 24 33 33 24 23 33 33 1 230 253 227 74 88 8 5 62 3 5 50 45 2 129 30 23 24 29 29 24 23 30 0 0 1 0 82 0 0 1 230 2 200 0 12 0 91 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 8 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 186 0 2 0 0 0 12 17 18 57 186 0 9 0 0 0 8 17 18 57 48 49 19 51 17 51 19 51 7 19 35 39 7 21 35 82 81 3 207 91 163 185 90 142 91 81 2 200 254 30 1 0 195 254 221 234 106 128 0 0 0 0 1 0 82 255 244 0 216 2 200 0 15 0 43 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 185 0 5 0 1 244 48 49 19 51 17 20 22 51 58 1 55 23 14 1 35 34 38 53 82 82 14 9 4 7 7 11 8 22 17 47 40 2 200 253 148 20 16 2 62 4 4 56 54 0 0 0 1 0 82 0 0 2 241 1 242 0 33 0 152 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 186 0 2 0 0 0 33 17 18 57 186 0 9 0 0 0 33 17 18 57 184 0 6 16 184 0 12 208 185 0 21 0 1 244 184 0 9 16 185 0 23 0 1 244 184 0 6 16 185 0 29 0 1 244 184 0 2 16 185 0 31 0 1 244 48 49 19 51 23 51 62 1 51 50 22 23 62 1 51 50 22 21 17 35 17 52 38 35 34 7 17 35 17 52 38 35 34 7 17 35 82 68 7 3 32 75 44 56 63 15 38 77 45 75 73 82 44 46 55 67 82 44 47 55 67 82 1 230 70 35 47 49 44 42 51 96 94 254 204 1 41 69 61 75 254 160 1 41 69 61 75 254 160 0 0 0 0 1 0 82 0 0 1 215 1 242 0 20 0 101 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 2 0 0 0 20 17 18 57 184 0 6 16 185 0 15 0 1 244 184 0 2 16 185 0 18 0 1 244 48 49 19 51 23 51 62 1 51 50 22 21 17 35 17 52 38 35 34 6 7 17 35 82 68 7 3 35 77 51 77 71 82 44 48 38 58 37 82 1 230 70 35 47 96 94 254 204 1 41 69 61 38 37 254 160 0 0 0 0 2 0 46 255 244 1 240 1 242 0 19 0 39 0 53 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 185 0 25 0 1 244 184 0 5 16 185 0 35 0 1 244 48 49 55 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 46 37 62 81 45 45 81 62 37 37 62 81 45 45 81 62 37 85 20 37 52 31 31 52 37 20 20 37 52 31 31 52 37 20 242 61 95 66 34 34 66 95 61 60 95 65 34 34 65 95 60 42 68 49 27 27 49 68 42 42 69 50 27 27 50 69 0 0 2 0 82 255 51 1 251 1 242 0 22 0 39 0 131 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 8 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 8 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 6 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 4 62 89 186 0 5 0 9 0 19 17 18 57 186 0 22 0 19 0 9 17 18 57 184 0 22 16 185 0 23 0 1 244 184 0 19 16 185 0 26 0 1 244 184 0 9 16 185 0 36 0 1 244 184 0 5 16 185 0 39 0 1 244 48 49 23 21 35 17 51 23 51 62 1 51 50 30 2 21 20 14 2 35 34 38 39 55 30 1 51 50 62 2 53 52 46 2 35 34 6 7 164 82 68 7 3 33 79 43 47 72 48 25 34 58 76 42 34 67 34 2 33 62 24 30 51 37 21 14 31 49 34 31 63 36 41 164 2 179 56 28 40 35 65 91 57 62 97 68 35 30 26 64 28 23 27 49 72 45 40 66 47 26 34 32 0 0 2 0 47 255 51 1 217 1 242 0 20 0 35 0 127 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 8 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 6 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 186 0 8 0 5 0 18 17 18 57 186 0 15 0 18 0 5 17 18 57 185 0 24 0 1 244 184 0 15 16 185 0 27 0 1 244 184 0 8 16 185 0 28 0 1 244 184 0 5 16 185 0 31 0 1 244 48 49 55 52 62 2 51 50 22 23 51 55 51 17 35 53 55 14 1 35 34 38 55 20 22 51 50 54 55 53 46 1 35 34 14 2 47 35 58 76 42 42 64 33 2 8 66 83 4 29 75 42 92 109 85 70 64 34 60 30 31 57 30 29 51 38 22 242 59 95 66 36 29 29 46 253 77 173 86 27 39 132 123 88 98 33 34 254 28 23 27 49 68 0 0 0 1 0 82 0 0 1 94 1 242 0 17 0 82 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 186 0 2 0 0 0 17 17 18 57 184 0 6 16 184 0 12 220 184 0 2 16 185 0 15 0 1 244 48 49 19 51 23 51 62 1 51 50 23 7 46 1 35 34 6 7 17 35 82 68 7 3 25 71 42 29 23 16 12 20 15 31 67 25 82 1 230 88 46 54 10 72 4 4 50 62 254 200 0 1 0 28 255 244 1 131 1 242 0 49 0 73 0 184 0 0 69 88 184 0 21 47 27 185 0 21 0 8 62 89 184 0 0 69 88 184 0 46 47 27 185 0 46 0 4 62 89 185 0 3 0 1 244 186 0 11 0 46 0 21 17 18 57 184 0 21 16 185 0 28 0 1 244 186 0 36 0 21 0 46 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 39 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 23 30 3 21 20 14 2 35 34 38 39 69 32 67 44 48 48 20 31 40 20 26 52 41 26 23 43 62 39 46 77 28 39 25 54 32 46 43 18 30 39 21 26 53 42 27 23 45 67 43 52 94 35 110 26 32 44 32 19 28 21 16 8 9 23 33 44 31 29 51 37 21 32 23 52 19 24 42 28 17 25 19 15 8 10 22 33 48 34 30 52 40 23 38 29 0 0 0 0 1 0 24 255 244 1 69 2 110 0 25 0 69 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 8 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 184 0 6 16 185 0 9 0 1 244 184 0 0 208 184 0 6 16 184 0 3 208 184 0 20 16 185 0 13 0 1 244 48 49 19 35 53 63 1 51 21 51 21 35 17 20 22 51 50 54 55 23 14 1 35 34 46 2 53 96 72 76 10 69 131 131 33 42 13 30 12 16 20 47 23 39 53 33 14 1 163 62 5 136 136 67 254 242 45 49 8 5 62 7 11 24 42 60 36 0 1 0 75 255 244 1 206 1 230 0 20 0 101 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 8 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 17 16 185 0 5 0 1 244 186 0 13 0 9 0 12 17 18 57 184 0 13 16 185 0 8 0 1 244 48 49 19 51 17 20 22 51 50 54 55 17 51 17 35 39 35 14 1 35 34 38 53 75 83 43 48 38 58 35 82 68 7 3 34 75 51 78 71 1 230 254 215 69 61 39 43 1 89 254 26 76 40 48 96 94 0 0 0 0 1 0 12 0 0 1 199 1 230 0 13 0 64 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 8 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 186 0 5 0 0 0 13 17 18 57 48 49 19 51 19 30 1 23 51 62 1 55 19 51 3 35 12 85 92 11 23 11 4 11 22 11 92 81 172 96 1 230 254 236 36 72 35 35 72 36 1 20 254 26 0 1 0 24 0 0 2 182 1 230 0 33 0 118 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 8 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 8 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 186 0 5 0 33 0 0 17 18 57 186 0 15 0 23 0 20 17 18 57 186 0 28 0 0 0 32 17 18 57 48 49 19 51 19 30 1 23 51 62 1 55 19 51 19 30 1 23 51 62 1 55 19 51 3 35 3 46 1 39 35 14 1 7 3 35 24 84 72 8 14 7 4 8 16 9 75 80 76 9 17 8 4 8 14 8 71 78 130 100 70 9 15 9 4 8 16 10 68 96 1 230 254 231 35 66 34 34 67 34 1 25 254 231 35 66 34 34 66 35 1 25 254 26 1 5 35 68 37 37 69 35 254 252 0 0 0 1 0 14 0 0 1 176 1 230 0 25 0 91 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 8 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 8 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 186 0 6 0 11 0 15 17 18 57 186 0 20 0 1 0 25 17 18 57 48 49 55 39 51 23 30 1 23 51 62 1 63 1 51 7 23 35 39 46 1 39 35 14 1 15 1 35 173 147 89 65 11 24 13 4 11 22 11 59 86 147 158 89 71 13 26 14 4 13 24 12 66 86 254 232 107 20 41 20 20 41 20 107 241 245 113 22 44 21 21 43 23 113 0 0 0 0 1 0 12 255 47 1 199 1 230 0 29 0 70 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 8 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 8 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 6 62 89 185 0 3 0 1 244 186 0 13 0 8 0 25 17 18 57 48 49 23 30 1 51 50 54 63 1 3 51 19 30 1 23 51 62 1 55 19 51 3 14 3 35 34 38 39 55 49 8 20 9 42 53 15 11 195 85 99 11 25 11 4 11 20 10 87 80 183 13 32 44 56 37 17 28 12 16 134 2 5 59 45 36 1 231 254 243 32 71 34 33 72 32 1 13 253 242 36 62 45 26 5 5 65 0 0 0 0 1 0 31 0 0 1 143 1 230 0 9 0 61 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 8 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 55 1 35 53 33 21 1 33 21 33 31 1 0 228 1 76 255 0 1 8 254 144 44 1 119 67 44 254 137 67 0 0 0 255 255 0 3 0 0 2 29 3 50 2 38 0 4 0 0 0 7 2 247 1 15 0 0 255 255 0 3 0 0 2 29 3 50 2 38 0 4 0 0 0 7 2 249 1 15 0 0 255 255 0 3 0 0 2 29 3 50 2 38 0 4 0 0 0 7 2 251 1 15 0 0 255 255 0 3 0 0 2 29 3 51 2 38 0 4 0 0 0 7 2 253 1 15 0 0 255 255 0 3 0 0 2 29 3 45 2 38 0 4 0 0 0 7 3 5 1 15 0 0 255 255 0 3 0 0 2 29 3 18 2 38 0 4 0 0 0 7 2 255 1 15 0 0 255 255 0 3 0 0 2 29 3 50 2 38 0 4 0 0 0 7 3 1 1 15 0 0 255 255 0 3 0 0 2 29 3 107 2 38 0 4 0 0 0 7 3 9 1 15 0 0 255 255 0 3 0 0 2 29 3 50 2 38 0 4 0 0 0 7 3 13 1 15 0 0 255 255 0 3 255 50 2 29 2 144 2 38 0 4 0 0 0 7 3 19 1 15 0 0 255 255 0 3 0 0 2 29 3 104 2 38 0 4 0 0 0 7 3 7 1 15 0 0 255 255 0 3 0 0 2 29 3 113 2 38 0 4 0 0 0 7 3 37 1 15 0 0 255 255 0 3 0 0 2 29 3 113 2 38 0 4 0 0 0 7 3 39 1 15 0 0 255 255 0 3 0 0 2 29 3 138 2 38 0 4 0 0 0 7 3 41 1 15 0 0 255 255 0 3 0 0 2 29 3 171 2 38 0 4 0 0 0 7 3 43 1 15 0 0 255 255 0 3 255 50 2 29 3 50 2 38 0 4 0 0 0 39 2 251 1 15 0 0 0 7 3 19 1 15 0 0 255 255 0 3 0 0 2 29 3 139 2 38 0 4 0 0 0 7 3 45 1 15 0 0 255 255 0 3 0 0 2 29 3 139 2 38 0 4 0 0 0 7 3 47 1 15 0 0 255 255 0 3 0 0 2 29 3 184 2 38 0 4 0 0 0 7 3 49 1 15 0 0 255 255 0 3 0 0 2 29 3 171 2 38 0 4 0 0 0 7 3 51 1 15 0 0 255 255 0 3 255 50 2 29 3 50 2 38 0 4 0 0 0 39 3 1 1 15 0 0 0 7 3 19 1 15 0 0 0 2 0 3 255 44 2 60 2 144 0 9 0 37 0 109 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 16 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 4 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 186 0 35 0 13 0 3 43 186 0 5 0 25 0 27 17 18 57 186 0 24 0 25 0 27 17 18 57 184 0 24 47 185 0 9 0 1 244 48 49 1 39 46 1 39 35 14 1 15 1 1 14 1 35 34 38 53 52 62 2 55 35 39 35 7 35 19 51 19 14 1 21 20 22 51 50 55 1 113 31 18 32 16 4 15 32 18 31 1 144 15 45 20 40 56 14 22 26 13 19 62 239 63 85 222 94 222 35 45 28 18 23 19 1 11 100 55 109 57 57 109 55 100 254 61 11 17 44 43 20 38 32 26 9 200 200 2 144 253 112 14 62 31 23 23 14 0 0 2 0 8 0 0 3 5 2 144 0 5 0 21 0 124 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 16 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 186 0 2 0 13 0 12 17 18 57 186 0 9 0 13 0 12 17 18 57 184 0 9 47 185 0 5 0 1 244 184 0 8 16 185 0 6 0 1 244 184 0 13 16 185 0 15 0 1 244 186 0 20 0 13 0 8 17 18 57 184 0 20 47 185 0 18 0 1 244 48 49 1 17 35 6 15 1 5 21 33 53 35 7 35 1 33 21 33 21 51 21 35 21 1 145 4 53 54 61 2 32 254 140 206 99 88 1 88 1 155 254 234 232 232 1 2 1 76 107 107 118 187 71 191 191 2 144 70 206 71 238 255 255 0 52 255 43 2 27 2 156 2 38 0 6 0 0 0 7 3 23 1 87 0 0 255 255 0 52 255 244 2 27 3 50 2 38 0 6 0 0 0 7 2 249 1 74 0 0 255 255 0 52 255 244 2 27 3 50 2 38 0 6 0 0 0 7 2 251 1 74 0 0 255 255 0 52 255 244 2 27 3 50 2 38 0 6 0 0 0 7 3 13 1 74 0 0 255 255 0 52 255 244 2 27 3 53 2 38 0 6 0 0 0 7 3 3 1 74 0 0 255 255 0 90 0 0 2 52 3 50 2 38 0 7 0 0 0 7 3 13 1 51 0 0 255 255 0 90 255 50 2 52 2 144 2 38 0 7 0 0 0 7 3 19 1 48 0 0 255 255 0 90 255 85 2 52 2 144 2 38 0 7 0 0 0 7 3 27 1 48 0 0 255 255 0 33 0 0 2 74 2 144 2 6 0 227 0 0 255 255 0 90 0 0 1 222 3 50 2 38 0 8 0 0 0 7 2 247 1 28 0 0 255 255 0 90 0 0 1 222 3 50 2 38 0 8 0 0 0 7 2 249 1 28 0 0 255 255 0 90 0 0 1 222 3 50 2 38 0 8 0 0 0 7 2 251 1 28 0 0 255 255 0 90 0 0 1 222 3 50 2 38 0 8 0 0 0 7 3 13 1 28 0 0 255 255 0 90 0 0 1 222 3 45 2 38 0 8 0 0 0 7 3 5 1 28 0 0 255 255 0 90 0 0 1 222 3 18 2 38 0 8 0 0 0 7 2 255 1 28 0 0 255 255 0 90 0 0 1 222 3 50 2 38 0 8 0 0 0 7 3 1 1 28 0 0 255 255 0 90 0 0 1 222 3 53 2 38 0 8 0 0 0 7 3 3 1 28 0 0 255 255 0 90 255 50 1 222 2 144 2 38 0 8 0 0 0 7 3 19 1 39 0 0 255 255 0 90 0 0 1 222 3 104 2 38 0 8 0 0 0 7 3 7 1 28 0 0 255 255 0 90 0 0 1 222 3 51 2 38 0 8 0 0 0 7 2 253 1 28 0 0 255 255 0 90 0 0 2 6 3 113 2 38 0 8 0 0 0 7 3 37 1 28 0 0 255 255 0 90 0 0 1 222 3 113 2 38 0 8 0 0 0 7 3 39 1 28 0 0 255 255 0 90 0 0 1 235 3 138 2 38 0 8 0 0 0 7 3 41 1 28 0 0 255 255 0 90 0 0 1 222 3 171 2 38 0 8 0 0 0 7 3 43 1 28 0 0 255 255 0 90 255 50 1 222 3 50 2 38 0 8 0 0 0 39 2 251 1 28 0 0 0 7 3 19 1 39 0 0 0 1 0 90 255 44 1 238 2 144 0 32 0 102 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 4 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 6 62 89 184 0 0 16 185 0 2 0 1 244 186 0 6 0 0 0 32 17 18 57 184 0 6 47 185 0 4 0 1 244 184 0 32 16 185 0 9 0 1 244 184 0 25 16 184 0 19 220 48 49 19 33 21 33 21 51 21 35 21 33 21 35 14 3 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 33 90 1 122 254 217 249 249 1 49 3 17 33 26 16 30 18 21 19 23 14 46 20 40 56 47 28 254 209 2 144 70 206 71 238 71 2 19 29 37 20 23 23 14 45 11 17 44 43 42 65 18 0 0 255 255 0 52 255 244 2 38 3 50 2 38 0 10 0 0 0 7 2 251 1 97 0 0 255 255 0 52 255 244 2 38 3 50 2 38 0 10 0 0 0 7 3 1 1 97 0 0 255 255 0 52 255 244 2 38 3 53 2 38 0 10 0 0 0 7 3 3 1 97 0 0 255 255 0 52 255 40 2 38 2 156 2 38 0 10 0 0 0 7 3 21 1 92 0 0 255 255 0 52 255 244 2 38 3 50 2 38 0 10 0 0 0 7 3 13 1 97 0 0 255 255 0 52 255 244 2 38 3 18 2 38 0 10 0 0 0 7 2 255 1 97 0 0 255 255 0 52 255 244 2 38 3 51 2 38 0 10 0 0 0 7 2 253 1 97 0 0 255 255 0 90 0 0 2 50 3 50 2 38 0 11 0 0 0 7 2 251 1 70 0 0 255 255 0 90 255 50 2 50 2 144 2 38 0 11 0 0 0 7 3 19 1 70 0 0 255 255 0 90 255 50 2 50 2 144 2 38 0 11 0 0 0 7 3 26 1 70 0 0 0 2 0 32 0 0 2 142 2 144 0 3 0 23 0 129 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 16 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 186 0 9 0 10 0 17 17 18 57 184 0 9 47 185 0 2 0 1 244 184 0 1 220 184 0 5 208 184 0 1 16 184 0 12 208 184 0 1 16 185 0 18 0 1 244 184 0 15 208 184 0 18 16 184 0 22 208 48 49 1 33 21 33 55 35 17 35 17 33 17 35 17 35 53 55 53 51 21 33 53 51 21 51 1 242 254 207 1 49 156 72 84 254 207 83 78 78 83 1 49 84 72 1 236 111 111 254 20 1 53 254 203 1 236 42 5 117 117 117 117 0 0 255 255 0 0 0 0 0 182 3 50 2 38 0 12 0 0 0 7 2 247 0 131 0 0 255 255 0 80 0 0 1 6 3 50 2 38 0 12 0 0 0 7 2 249 0 131 0 0 255 255 255 251 0 0 1 11 3 50 2 38 0 12 0 0 0 7 2 251 0 131 0 0 255 255 255 242 0 0 1 20 3 51 2 38 0 12 0 0 0 7 2 253 0 131 0 0 255 255 255 252 0 0 1 10 3 45 2 38 0 12 0 0 0 7 3 5 0 131 0 0 255 255 0 7 0 0 0 255 3 18 2 38 0 12 0 0 0 7 2 255 0 131 0 0 255 255 0 74 0 0 0 188 3 53 2 38 0 12 0 0 0 7 3 3 0 131 0 0 255 255 255 251 0 0 1 11 3 50 2 38 0 12 0 0 0 7 3 13 0 131 0 0 255 255 0 67 0 0 0 214 3 104 2 38 0 12 0 0 0 7 3 7 0 131 0 0 255 255 0 78 255 50 0 186 2 144 2 38 0 12 0 0 0 7 3 19 0 132 0 0 0 1 0 43 255 44 0 219 2 144 0 21 0 75 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 4 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 6 62 89 184 0 8 220 48 49 19 51 17 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 35 90 83 31 34 30 17 22 19 23 15 45 20 40 56 43 24 20 2 144 253 112 24 52 31 23 23 14 45 11 17 44 43 43 60 22 0 0 255 255 0 31 255 244 1 228 3 50 2 38 0 13 0 0 0 7 2 251 1 92 0 0 255 255 0 90 255 40 2 63 2 144 2 38 0 14 0 0 0 7 3 21 1 69 0 0 255 255 0 83 0 0 1 204 3 50 2 38 0 15 0 0 0 7 2 249 0 134 0 0 255 255 0 90 0 0 1 204 2 215 2 38 0 15 0 0 0 7 3 52 1 103 255 223 255 255 0 90 255 40 1 204 2 144 2 38 0 15 0 0 0 7 3 21 1 32 0 0 255 255 0 90 0 0 1 204 2 144 2 38 0 15 0 0 0 7 1 253 0 252 1 19 255 255 0 90 255 50 1 204 2 144 2 38 0 15 0 0 0 7 3 19 1 32 0 0 255 255 0 10 255 50 1 204 3 18 2 38 0 15 0 0 0 39 2 255 0 134 0 0 0 7 3 19 1 32 0 0 255 255 0 90 255 85 1 204 2 144 2 38 0 15 0 0 0 7 3 27 1 32 0 0 0 1 0 13 0 0 1 209 2 144 0 13 0 77 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 16 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 186 0 3 0 2 0 8 17 18 57 184 0 3 47 184 0 6 220 184 0 9 208 184 0 3 16 184 0 12 208 184 0 2 16 185 0 13 0 1 244 48 49 37 21 33 53 7 53 55 17 51 17 55 21 7 21 1 209 254 142 82 82 84 185 185 71 71 240 46 67 47 1 92 254 201 100 68 99 207 255 255 0 90 255 50 2 125 2 144 2 38 0 16 0 0 0 7 3 19 1 108 0 0 255 255 0 90 0 0 2 45 3 50 2 38 0 17 0 0 0 7 2 249 1 70 0 0 255 255 0 90 0 0 2 45 3 50 2 38 0 17 0 0 0 7 3 13 1 70 0 0 255 255 0 90 0 0 2 45 3 51 2 38 0 17 0 0 0 7 2 253 1 70 0 0 255 255 0 90 255 40 2 45 2 144 2 38 0 17 0 0 0 7 3 21 1 72 0 0 255 255 0 90 0 0 2 45 3 53 2 38 0 17 0 0 0 7 3 3 1 70 0 0 255 255 0 90 255 50 2 45 2 144 2 38 0 17 0 0 0 7 3 19 1 72 0 0 255 255 0 90 255 85 2 45 2 144 2 38 0 17 0 0 0 7 3 27 1 72 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 2 247 1 76 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 2 249 1 76 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 2 251 1 76 0 0 255 255 0 52 255 244 2 101 3 51 2 38 0 18 0 0 0 7 2 253 1 76 0 0 255 255 0 52 255 244 2 101 3 45 2 38 0 18 0 0 0 7 3 5 1 76 0 0 255 255 0 52 255 244 2 101 3 18 2 38 0 18 0 0 0 7 2 255 1 76 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 3 11 1 76 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 3 13 1 76 0 0 255 255 0 52 255 50 2 101 2 156 2 38 0 18 0 0 0 7 3 19 1 76 0 0 255 255 0 52 255 244 2 101 3 104 2 38 0 18 0 0 0 7 3 7 1 76 0 0 255 255 0 52 255 244 2 101 3 113 2 38 0 18 0 0 0 7 3 37 1 76 0 0 255 255 0 52 255 244 2 101 3 113 2 38 0 18 0 0 0 7 3 39 1 76 0 0 255 255 0 52 255 244 2 101 3 138 2 38 0 18 0 0 0 7 3 41 1 76 0 0 255 255 0 52 255 244 2 101 3 171 2 38 0 18 0 0 0 7 3 43 1 76 0 0 255 255 0 52 255 50 2 101 3 50 2 38 0 18 0 0 0 39 2 251 1 76 0 0 0 7 3 19 1 76 0 0 0 3 0 50 255 226 2 107 2 174 0 11 0 21 0 48 0 133 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 16 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 4 62 89 186 0 0 0 30 0 44 17 18 57 185 0 3 0 1 244 186 0 11 0 44 0 30 17 18 57 186 0 12 0 44 0 30 17 18 57 184 0 44 16 185 0 14 0 1 244 186 0 21 0 30 0 44 17 18 57 186 0 22 0 44 0 30 17 18 57 186 0 33 0 30 0 44 17 18 57 186 0 36 0 30 0 44 17 18 57 186 0 46 0 44 0 30 17 18 57 48 49 55 30 1 51 50 62 2 53 52 38 47 1 38 35 34 14 2 21 20 23 1 30 1 21 20 14 2 35 34 38 39 7 39 55 46 1 53 52 62 2 51 50 23 55 23 208 25 64 38 44 71 51 28 17 16 34 51 76 44 72 51 28 34 1 120 31 34 41 75 103 61 52 89 35 63 46 70 32 34 41 75 103 62 104 71 63 46 116 26 29 38 71 99 62 48 80 32 50 54 37 68 98 61 96 68 1 138 43 115 72 79 127 89 48 33 32 83 36 91 44 118 72 79 125 87 46 63 81 35 0 2 0 52 0 0 3 30 2 144 0 18 0 27 0 85 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 16 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 3 16 185 0 24 0 1 244 184 0 5 208 186 0 10 0 3 0 14 17 18 57 184 0 10 47 185 0 8 0 1 244 184 0 14 16 185 0 23 0 1 244 184 0 12 208 48 49 19 52 54 51 33 21 33 21 51 21 35 21 33 21 33 34 46 2 55 20 22 59 1 17 35 34 6 52 168 153 1 159 254 234 232 232 1 32 254 83 75 117 82 43 86 122 119 48 48 119 122 1 75 157 168 70 206 71 238 71 45 85 123 78 126 137 2 8 132 0 0 0 2 0 54 255 244 2 103 3 5 0 19 0 52 0 71 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 16 62 89 184 0 0 69 88 184 0 34 47 27 185 0 34 0 4 62 89 185 0 0 0 1 244 184 0 44 16 185 0 10 0 1 244 186 0 26 0 44 0 10 17 18 57 184 0 26 16 184 0 46 220 48 49 37 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 30 1 21 20 6 7 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 23 62 1 53 52 38 39 1 79 44 71 51 28 28 51 71 44 44 72 51 28 28 51 72 1 44 10 13 55 47 48 55 41 75 103 61 62 103 75 41 41 75 103 62 72 58 42 39 8 6 61 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 2 200 14 32 19 43 51 11 44 137 91 79 127 89 48 48 89 127 79 79 125 87 46 32 8 31 28 11 20 10 0 255 255 0 54 255 244 2 103 3 50 2 38 0 162 0 0 0 7 2 249 1 76 0 0 255 255 0 54 255 244 2 103 3 50 2 38 0 162 0 0 0 7 2 247 1 76 0 0 255 255 0 54 255 244 2 103 3 104 2 38 0 162 0 0 0 7 3 7 1 76 0 0 255 255 0 54 255 244 2 103 3 51 2 38 0 162 0 0 0 7 2 253 1 76 0 0 255 255 0 54 255 50 2 103 3 5 2 38 0 162 0 0 0 7 3 19 1 76 0 0 0 2 0 52 255 44 2 101 2 156 0 38 0 58 0 90 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 16 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 184 0 0 69 88 184 0 36 47 27 185 0 36 0 6 62 89 184 0 3 16 184 0 23 208 184 0 36 16 184 0 29 220 184 0 3 16 185 0 39 0 1 244 184 0 13 16 185 0 49 0 1 244 48 49 5 52 54 55 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 55 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 1 10 35 26 63 102 72 38 41 74 103 62 62 103 75 41 27 53 76 49 41 37 30 18 12 19 9 23 14 46 20 40 55 66 44 71 51 28 28 51 71 44 44 71 51 28 28 51 71 125 33 59 22 1 50 89 125 77 79 125 87 46 47 87 125 78 67 106 82 61 22 18 56 26 23 23 7 7 45 11 17 44 229 38 71 99 62 61 98 68 37 37 68 98 61 62 99 71 38 0 255 255 0 90 0 0 2 32 3 50 2 38 0 21 0 0 0 7 2 249 1 38 0 0 255 255 0 90 0 0 2 32 3 50 2 38 0 21 0 0 0 7 3 13 1 38 0 0 255 255 0 90 255 40 2 32 2 144 2 38 0 21 0 0 0 7 3 21 1 53 0 0 255 255 0 90 255 50 2 32 2 144 2 38 0 21 0 0 0 7 3 19 1 53 0 0 255 255 0 90 255 50 2 32 3 18 2 38 0 21 0 0 0 39 2 255 1 38 0 0 0 7 3 19 1 53 0 0 255 255 0 90 255 85 2 32 2 144 2 38 0 21 0 0 0 7 3 27 1 53 0 0 255 255 0 42 255 244 1 239 3 50 2 38 0 22 0 0 0 7 2 249 1 23 0 0 255 255 0 42 255 244 1 239 3 50 2 38 0 22 0 0 0 7 2 251 1 23 0 0 255 255 0 42 255 244 1 239 3 50 2 38 0 22 0 0 0 7 3 13 1 23 0 0 255 255 0 42 255 43 1 239 2 156 2 38 0 22 0 0 0 7 3 23 1 17 0 0 255 255 0 42 255 40 1 239 2 156 2 38 0 22 0 0 0 7 3 21 1 17 0 0 255 255 0 42 255 244 1 239 3 53 2 38 0 22 0 0 0 7 3 3 1 23 0 0 255 255 0 42 255 50 1 239 2 156 2 38 0 22 0 0 0 7 3 19 1 17 0 0 0 1 0 91 255 244 2 112 2 156 0 40 0 90 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 16 62 89 184 0 0 69 88 184 0 40 47 27 185 0 40 0 4 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 186 0 30 0 3 0 15 17 18 57 186 0 7 0 30 0 31 17 18 57 185 0 22 0 1 244 184 0 3 16 185 0 35 0 1 244 48 49 19 52 54 51 50 22 23 7 30 1 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 2 47 1 55 46 1 35 34 6 21 17 35 91 134 122 84 106 27 138 105 93 27 50 70 43 58 92 31 48 29 60 37 53 58 17 44 75 57 5 137 17 65 51 80 89 84 1 161 118 133 84 70 152 21 98 72 39 67 49 28 42 34 54 32 28 63 50 23 42 36 28 10 54 153 34 48 95 102 254 110 0 255 255 0 28 0 0 1 252 3 50 2 38 0 23 0 0 0 7 3 13 1 11 0 0 255 255 0 28 255 43 1 252 2 144 2 38 0 23 0 0 0 7 3 23 1 8 0 0 255 255 0 28 255 40 1 252 2 144 2 38 0 23 0 0 0 7 3 21 1 13 0 0 255 255 0 28 255 50 1 252 2 144 2 38 0 23 0 0 0 7 3 19 1 13 0 0 255 255 0 28 255 85 1 252 2 144 2 38 0 23 0 0 0 7 3 27 1 13 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 2 247 1 66 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 2 249 1 66 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 2 251 1 66 0 0 255 255 0 87 255 244 2 46 3 51 2 38 0 24 0 0 0 7 2 253 1 66 0 0 255 255 0 87 255 244 2 46 3 45 2 38 0 24 0 0 0 7 3 5 1 66 0 0 255 255 0 87 255 244 2 46 3 18 2 38 0 24 0 0 0 7 2 255 1 66 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 3 1 1 66 0 0 255 255 0 87 255 244 2 46 3 107 2 38 0 24 0 0 0 7 3 9 1 66 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 3 11 1 66 0 0 255 255 0 87 255 244 2 46 3 50 2 38 0 24 0 0 0 7 3 13 1 66 0 0 255 255 0 87 255 244 2 46 3 139 2 38 0 24 0 0 0 7 3 29 1 66 0 0 255 255 0 87 255 244 2 46 3 182 2 38 0 24 0 0 0 7 3 31 1 66 0 0 255 255 0 87 255 244 2 46 3 182 2 38 0 24 0 0 0 7 3 33 1 66 0 0 255 255 0 87 255 244 2 46 3 182 2 38 0 24 0 0 0 7 3 35 1 66 0 0 255 255 0 87 255 50 2 46 2 144 2 38 0 24 0 0 0 7 3 19 1 66 0 0 255 255 0 87 255 244 2 46 3 104 2 38 0 24 0 0 0 7 3 7 1 66 0 0 0 1 0 87 255 44 2 46 2 144 0 45 0 97 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 16 62 89 184 0 0 69 88 184 0 40 47 27 185 0 40 0 4 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 6 62 89 184 0 40 16 185 0 7 0 1 244 184 0 40 16 184 0 20 208 184 0 32 16 184 0 26 220 48 49 19 51 17 20 30 2 51 50 62 2 53 17 51 17 20 14 2 7 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 62 2 55 46 3 53 87 83 24 41 56 32 33 56 42 24 80 23 42 59 36 39 40 30 18 21 19 23 14 46 20 40 56 13 19 23 9 51 85 61 34 2 144 254 125 59 80 48 21 21 48 80 59 1 131 254 127 66 91 63 41 17 19 56 25 23 23 14 45 11 17 44 43 21 33 28 23 9 1 32 67 106 76 0 1 0 87 255 244 2 156 3 25 0 40 0 72 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 16 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 16 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 33 16 184 0 8 220 184 0 14 16 185 0 27 0 1 244 48 49 1 30 1 21 20 14 2 7 17 20 14 2 35 34 46 2 53 17 51 17 20 30 2 51 50 62 2 53 17 51 62 1 53 52 38 39 2 133 11 12 18 30 40 22 36 63 86 50 50 87 63 36 83 24 41 56 32 33 56 42 24 33 42 48 8 7 3 25 14 32 19 25 36 26 16 5 254 163 79 108 67 29 29 67 108 79 1 129 254 125 59 80 48 21 21 48 80 59 1 131 4 28 35 11 20 10 255 255 0 87 255 244 2 156 3 50 2 38 0 205 0 0 0 7 2 249 1 66 0 0 255 255 0 87 255 244 2 156 3 50 2 38 0 205 0 0 0 7 2 247 1 66 0 0 255 255 0 87 255 244 2 156 3 104 2 38 0 205 0 0 0 7 3 7 1 66 0 0 255 255 0 87 255 244 2 156 3 51 2 38 0 205 0 0 0 7 2 253 1 66 0 0 255 255 0 87 255 50 2 156 3 25 2 38 0 205 0 0 0 7 3 19 1 66 0 0 255 255 0 23 0 0 2 250 3 50 2 38 0 26 0 0 0 7 2 247 1 137 0 0 255 255 0 23 0 0 2 250 3 50 2 38 0 26 0 0 0 7 2 249 1 137 0 0 255 255 0 23 0 0 2 250 3 50 2 38 0 26 0 0 0 7 2 251 1 137 0 0 255 255 0 23 0 0 2 250 3 45 2 38 0 26 0 0 0 7 3 5 1 137 0 0 255 255 255 255 0 0 1 221 3 50 2 38 0 28 0 0 0 7 2 247 0 238 0 0 255 255 255 255 0 0 1 221 3 50 2 38 0 28 0 0 0 7 2 249 0 238 0 0 255 255 255 255 0 0 1 221 3 50 2 38 0 28 0 0 0 7 2 251 0 238 0 0 255 255 255 255 0 0 1 221 3 45 2 38 0 28 0 0 0 7 3 5 0 238 0 0 255 255 255 255 0 0 1 221 3 53 2 38 0 28 0 0 0 7 3 3 0 238 0 0 255 255 255 255 255 50 1 221 2 144 2 38 0 28 0 0 0 7 3 19 0 240 0 0 255 255 255 255 0 0 1 221 3 104 2 38 0 28 0 0 0 7 3 7 0 238 0 0 255 255 255 255 0 0 1 221 3 51 2 38 0 28 0 0 0 7 2 253 0 238 0 0 255 255 0 45 0 0 1 241 3 50 2 38 0 29 0 0 0 7 2 249 1 24 0 0 255 255 0 45 0 0 1 241 3 50 2 38 0 29 0 0 0 7 3 13 1 24 0 0 255 255 0 45 0 0 1 241 3 53 2 38 0 29 0 0 0 7 3 3 1 24 0 0 255 255 0 45 255 50 1 241 2 144 2 38 0 29 0 0 0 7 3 19 1 25 0 0 0 2 0 33 0 0 2 74 2 144 0 12 0 27 0 89 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 16 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 185 0 0 0 1 244 184 0 27 16 185 0 6 0 1 244 186 0 10 0 27 0 22 17 18 57 184 0 10 47 185 0 9 0 1 244 184 0 10 16 184 0 24 208 184 0 9 16 184 0 25 208 48 49 37 50 54 53 52 38 43 1 21 51 21 35 21 19 50 22 21 20 14 2 43 1 17 35 53 55 17 1 14 115 115 115 115 75 149 149 81 152 158 40 78 114 74 168 79 79 68 138 125 125 132 220 47 253 2 76 168 157 78 123 85 45 1 65 43 4 1 32 0 0 0 0 2 0 90 0 0 2 21 2 144 0 16 0 25 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 4 62 89 187 0 25 0 1 0 14 0 4 43 187 0 2 0 1 0 24 0 4 43 48 49 19 51 21 51 50 30 2 21 20 14 2 43 1 21 35 55 50 54 53 52 38 43 1 17 90 83 118 54 90 63 35 35 64 89 54 118 83 191 86 83 84 85 108 2 144 110 20 46 73 54 52 77 50 24 150 218 64 71 71 54 254 252 0 0 2 0 58 255 244 2 95 2 156 0 8 0 37 0 73 0 184 0 0 69 88 184 0 12 47 27 185 0 12 0 16 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 185 0 5 0 1 244 186 0 8 0 22 0 12 17 18 57 184 0 8 47 185 0 31 0 1 244 184 0 12 16 185 0 34 0 1 244 48 49 19 30 3 51 50 54 55 1 62 1 51 50 30 2 21 20 14 2 35 34 46 2 53 52 54 55 33 46 1 35 34 6 7 143 3 29 49 65 39 80 104 10 254 115 35 105 67 63 102 71 39 41 74 103 61 62 99 71 38 1 1 1 208 5 101 93 49 82 29 1 30 54 85 59 31 122 107 1 49 34 43 47 87 125 79 79 126 89 48 48 89 124 76 5 13 7 116 133 36 29 0 0 0 255 255 0 58 255 244 1 183 2 202 2 38 0 30 0 0 0 7 2 246 1 13 0 0 255 255 0 58 255 244 1 183 2 202 2 38 0 30 0 0 0 7 2 248 1 13 0 0 255 255 0 58 255 244 1 183 2 202 2 38 0 30 0 0 0 7 2 250 1 13 0 0 255 255 0 58 255 244 1 183 2 173 2 38 0 30 0 0 0 7 2 252 1 13 0 0 255 255 0 58 255 244 1 183 2 174 2 38 0 30 0 0 0 7 3 4 1 13 0 0 255 255 0 58 255 244 1 183 2 146 2 38 0 30 0 0 0 7 2 254 1 13 0 0 255 255 0 58 255 244 1 183 2 190 2 38 0 30 0 0 0 7 3 0 1 13 0 0 255 255 0 58 255 244 1 183 2 215 2 38 0 30 0 0 0 7 3 8 1 13 0 0 255 255 0 58 255 244 1 183 2 202 2 38 0 30 0 0 0 7 3 12 1 13 0 0 255 255 0 58 255 50 1 183 1 242 2 38 0 30 0 0 0 7 3 19 0 253 0 0 255 255 0 58 255 244 1 183 2 215 2 38 0 30 0 0 0 7 3 6 1 13 0 0 255 255 0 58 255 244 1 245 2 242 2 38 0 30 0 0 0 7 3 36 1 13 0 0 255 255 0 58 255 244 1 214 2 242 2 38 0 30 0 0 0 7 3 38 1 13 0 0 255 255 0 58 255 244 1 222 3 16 2 38 0 30 0 0 0 7 3 40 1 13 0 0 255 255 0 58 255 244 1 183 3 34 2 38 0 30 0 0 0 7 3 42 1 13 0 0 255 255 0 58 255 50 1 183 2 202 2 38 0 30 0 0 0 39 2 250 1 13 0 0 0 7 3 19 0 253 0 0 255 255 0 58 255 244 1 183 3 21 2 38 0 30 0 0 0 7 3 44 1 13 0 0 255 255 0 58 255 244 1 183 3 21 2 38 0 30 0 0 0 7 3 46 1 13 0 0 255 255 0 58 255 244 1 183 3 71 2 38 0 30 0 0 0 7 3 48 1 13 0 0 255 255 0 58 255 244 1 183 3 34 2 38 0 30 0 0 0 7 3 50 1 13 0 0 255 255 0 58 255 50 1 183 2 190 2 38 0 30 0 0 0 39 3 0 1 13 0 0 0 7 3 19 0 253 0 0 0 2 0 58 255 50 1 204 1 242 0 11 0 59 0 108 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 8 62 89 184 0 0 69 88 184 0 57 47 27 185 0 57 0 4 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 4 62 89 186 0 37 0 44 0 3 43 184 0 57 16 185 0 3 0 1 244 186 0 15 0 27 0 57 17 18 57 184 0 15 47 184 0 7 208 184 0 27 16 185 0 20 0 1 244 184 0 31 16 184 0 52 208 48 49 55 20 22 51 50 54 55 53 14 3 7 52 54 55 52 46 2 35 34 6 7 39 62 1 51 50 22 21 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 39 35 14 1 35 34 38 139 49 36 35 63 35 61 84 51 22 81 143 156 9 23 38 30 43 73 29 33 34 98 59 89 80 42 45 29 18 12 19 9 21 14 45 19 38 52 14 23 28 15 8 2 35 81 45 62 81 132 42 36 33 32 135 8 22 30 39 29 80 85 17 23 44 34 21 32 20 57 22 41 109 91 254 214 17 59 29 23 23 7 6 41 11 16 43 42 20 37 32 27 9 54 29 41 72 0 0 0 3 0 58 255 244 2 235 1 242 0 14 0 64 0 71 0 155 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 8 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 8 62 89 184 0 0 69 88 184 0 50 47 27 185 0 50 0 4 62 89 184 0 0 69 88 184 0 44 47 27 185 0 44 0 4 62 89 184 0 50 16 185 0 3 0 1 244 186 0 56 0 50 0 18 17 18 57 184 0 56 47 185 0 10 0 1 244 186 0 31 0 24 0 44 17 18 57 184 0 31 47 184 0 44 16 185 0 37 0 1 244 184 0 18 16 185 0 61 0 1 244 184 0 24 16 185 0 68 0 1 244 184 0 31 16 185 0 71 0 1 244 48 49 55 20 22 51 50 54 55 46 1 39 53 14 3 3 62 1 51 50 22 23 62 1 51 50 30 2 21 20 7 33 30 3 51 50 54 55 23 14 1 35 34 38 39 14 1 35 34 38 53 52 54 55 52 46 2 35 34 6 7 5 52 38 35 34 6 7 139 49 36 34 80 33 8 10 1 58 81 51 23 60 34 96 54 54 70 15 29 81 50 45 69 47 24 3 254 197 1 25 40 54 31 35 56 27 30 32 76 50 61 82 28 50 101 47 62 81 142 152 8 23 38 30 40 72 29 2 51 59 56 51 73 7 132 42 36 39 36 19 53 28 25 8 22 30 39 1 24 22 41 55 48 48 55 32 60 85 52 28 18 38 62 44 24 23 17 57 20 30 55 36 45 46 72 66 80 85 17 23 44 34 21 32 20 100 75 80 83 72 0 0 0 255 255 0 46 255 43 1 176 1 242 2 38 0 32 0 0 0 7 3 22 1 16 0 0 255 255 0 46 255 244 1 176 2 202 2 38 0 32 0 0 0 7 2 248 1 23 0 0 255 255 0 46 255 244 1 176 2 202 2 38 0 32 0 0 0 7 2 250 1 23 0 0 255 255 0 46 255 244 1 176 2 202 2 38 0 32 0 0 0 7 3 12 1 23 0 0 255 255 0 46 255 244 1 176 2 182 2 38 0 32 0 0 0 7 3 2 1 23 0 0 255 255 0 47 255 244 2 73 2 248 0 38 0 33 0 0 0 7 3 52 2 43 0 0 255 255 0 47 255 50 1 217 2 200 2 38 0 33 0 0 0 7 3 19 1 46 0 0 255 255 0 47 255 85 1 217 2 200 2 38 0 33 0 0 0 7 3 27 1 45 0 0 0 2 0 47 255 244 2 33 2 200 0 14 0 43 0 110 0 184 0 31 47 184 0 0 69 88 184 0 40 47 27 185 0 40 0 18 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 184 0 31 16 185 0 3 0 1 244 184 0 23 16 185 0 11 0 1 244 186 0 36 0 18 0 40 17 18 57 184 0 36 47 184 0 16 208 184 0 36 16 185 0 39 0 1 244 184 0 42 208 48 49 1 46 1 35 34 14 2 21 20 22 51 50 54 55 19 7 17 35 39 35 14 1 35 34 38 53 52 62 2 51 50 22 23 39 53 35 53 51 53 51 21 51 1 134 31 57 30 29 51 38 22 70 64 34 60 30 155 72 70 6 3 28 74 44 92 109 35 58 76 42 42 62 32 4 161 161 83 72 1 102 28 23 25 47 65 39 84 92 33 34 1 196 5 253 197 55 28 39 126 118 57 91 64 34 30 26 83 66 48 93 93 0 0 0 255 255 0 46 255 244 1 202 2 202 2 38 0 34 0 0 0 7 2 246 1 9 0 0 255 255 0 46 255 244 1 202 2 202 2 38 0 34 0 0 0 7 2 248 1 9 0 0 255 255 0 46 255 244 1 202 2 202 2 38 0 34 0 0 0 7 2 250 1 9 0 0 255 255 0 46 255 244 1 202 2 202 2 38 0 34 0 0 0 7 3 12 1 9 0 0 255 255 0 46 255 244 1 202 2 174 2 38 0 34 0 0 0 7 3 4 1 9 0 0 255 255 0 46 255 244 1 202 2 146 2 38 0 34 0 0 0 7 2 254 1 9 0 0 255 255 0 46 255 244 1 202 2 190 2 38 0 34 0 0 0 7 3 0 1 9 0 0 255 255 0 46 255 244 1 202 2 182 2 38 0 34 0 0 0 7 3 2 1 9 0 0 255 255 0 46 255 50 1 202 1 242 2 38 0 34 0 0 0 7 3 19 1 7 0 0 255 255 0 46 255 244 1 202 2 215 2 38 0 34 0 0 0 7 3 6 1 9 0 0 255 255 0 46 255 244 1 202 2 173 2 38 0 34 0 0 0 7 2 252 1 9 0 0 255 255 0 46 255 244 1 241 2 242 2 38 0 34 0 0 0 7 3 36 1 9 0 0 255 255 0 46 255 244 1 210 2 242 2 38 0 34 0 0 0 7 3 38 1 9 0 0 255 255 0 46 255 244 1 218 3 16 2 38 0 34 0 0 0 7 3 40 1 9 0 0 255 255 0 46 255 244 1 202 3 34 2 38 0 34 0 0 0 7 3 42 1 9 0 0 255 255 0 46 255 50 1 202 2 202 2 38 0 34 0 0 0 39 2 250 1 9 0 0 0 7 3 19 1 6 0 0 0 2 0 46 255 50 1 202 1 242 0 50 0 59 0 89 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 8 62 89 184 0 0 69 88 184 0 46 47 27 185 0 46 0 4 62 89 186 0 28 0 35 0 3 43 186 0 12 0 5 0 46 17 18 57 184 0 12 47 184 0 46 16 185 0 16 0 1 244 184 0 5 16 185 0 54 0 1 244 184 0 12 16 185 0 59 0 1 244 48 49 55 52 62 2 51 50 30 2 21 20 7 33 30 1 51 50 54 55 23 14 3 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 14 1 35 34 46 2 37 52 38 35 34 14 2 7 46 37 61 78 42 46 73 49 26 3 254 184 5 87 70 35 59 27 29 33 42 26 10 28 19 12 19 9 21 14 45 19 38 52 11 18 21 10 13 24 12 49 85 63 36 1 84 62 58 26 47 38 25 4 242 60 95 66 35 32 60 84 52 27 18 79 92 21 17 54 23 39 34 31 16 23 23 7 6 41 11 16 43 42 19 34 30 24 9 5 2 35 65 94 97 75 79 21 39 57 37 0 255 255 0 45 255 32 1 236 2 202 2 38 0 36 0 0 0 7 2 250 0 239 0 0 255 255 0 45 255 32 1 236 2 190 2 38 0 36 0 0 0 7 3 0 0 239 0 0 255 255 0 45 255 32 1 236 2 182 2 38 0 36 0 0 0 7 3 2 0 239 0 0 255 255 0 45 255 32 1 236 2 198 2 38 0 36 0 0 0 7 3 53 0 239 0 0 255 255 0 45 255 32 1 236 2 202 2 38 0 36 0 0 0 7 3 12 0 239 0 0 255 255 0 45 255 32 1 236 2 146 2 38 0 36 0 0 0 7 2 254 0 239 0 0 255 255 0 45 255 32 1 236 2 173 2 38 0 36 0 0 0 7 2 252 0 239 0 0 255 255 255 244 0 0 1 215 3 92 2 38 0 37 0 0 0 6 2 251 124 42 0 0 255 255 0 82 255 50 1 215 2 200 2 38 0 37 0 0 0 7 3 19 1 30 0 0 255 255 0 82 255 50 1 215 2 200 2 38 0 37 0 0 0 7 3 26 1 29 0 0 0 1 0 8 0 0 1 215 2 200 0 28 0 89 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 18 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 184 0 22 16 184 0 21 208 184 0 21 47 185 0 18 0 1 244 184 0 26 208 184 0 3 208 184 0 17 16 184 0 8 208 184 0 3 16 185 0 12 0 1 244 184 0 21 16 184 0 25 208 48 49 19 62 1 51 50 22 21 17 35 17 52 38 35 34 6 7 17 35 17 35 53 55 53 51 21 51 21 35 21 161 35 76 51 77 71 82 44 48 38 58 37 82 74 74 82 182 182 1 142 33 47 96 94 254 224 1 21 69 61 38 37 254 180 2 59 43 5 93 93 48 73 0 0 255 255 0 12 0 0 0 188 2 202 2 38 1 45 0 0 0 6 2 246 123 0 0 0 255 255 0 58 0 0 0 234 2 202 2 38 1 45 0 0 0 6 2 248 123 0 0 0 255 255 255 250 0 0 0 252 2 202 2 38 1 45 0 0 0 6 2 250 123 0 0 0 255 255 255 240 0 0 1 6 2 173 2 38 1 45 0 0 0 6 2 252 123 0 0 0 255 255 255 244 0 0 1 2 2 174 2 38 1 45 0 0 0 6 3 4 123 0 0 0 255 255 0 0 0 0 0 246 2 146 2 38 1 45 0 0 0 6 2 254 123 0 0 0 255 255 255 250 0 0 0 252 2 202 2 38 1 45 0 0 0 6 3 12 123 0 0 0 255 255 0 59 0 0 0 206 2 215 2 38 1 45 0 0 0 6 3 6 123 0 0 0 255 255 0 67 255 50 0 181 2 180 2 38 0 38 0 0 0 6 3 19 124 0 0 0 0 2 0 38 255 50 0 207 2 180 0 22 0 34 0 61 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 186 0 23 0 29 0 3 43 186 0 8 0 15 0 3 43 184 0 22 16 184 0 2 208 48 49 19 51 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 35 19 34 38 53 52 54 51 50 22 21 20 6 82 82 30 35 28 19 11 19 10 21 14 45 19 38 53 43 21 20 41 24 33 33 24 23 33 33 1 230 254 26 22 54 29 23 23 7 6 41 11 16 43 42 40 60 21 2 74 30 23 24 29 29 24 23 30 0 0 1 0 38 255 50 0 207 1 230 0 22 0 53 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 186 0 8 0 15 0 3 43 184 0 22 16 184 0 2 208 48 49 19 51 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 35 82 82 30 35 28 19 11 19 10 21 14 45 19 38 53 43 21 20 1 230 254 26 22 54 29 23 23 7 6 41 11 16 43 42 40 60 21 0 0 1 0 82 0 0 0 164 1 230 0 3 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 48 49 19 51 17 35 82 82 82 1 230 254 26 0 0 255 255 255 216 255 39 0 252 2 202 2 38 1 151 0 0 0 6 2 250 123 0 0 0 255 255 0 82 255 40 1 230 2 200 2 38 0 40 0 0 0 7 3 21 1 15 0 0 0 1 0 82 0 0 1 230 1 230 0 12 0 83 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 186 0 2 0 0 0 12 17 18 57 184 0 0 16 184 0 4 208 184 0 12 16 184 0 8 208 186 0 6 0 0 0 8 17 18 57 186 0 9 0 0 0 12 17 18 57 48 49 19 51 17 51 19 51 7 19 35 39 7 21 35 82 82 3 206 91 161 183 90 142 90 82 1 230 254 254 1 2 195 254 221 231 106 125 0 0 0 255 255 0 68 255 244 0 250 3 102 2 38 0 41 0 0 0 6 2 249 119 52 0 0 255 255 0 82 255 244 1 20 2 248 0 38 0 41 0 0 0 7 3 52 0 246 0 0 255 255 0 82 255 244 1 107 2 200 0 38 0 41 0 0 0 7 1 253 0 179 1 19 255 255 0 82 255 40 0 238 2 200 2 38 0 41 0 0 0 7 3 21 0 170 0 0 255 255 0 82 255 50 0 224 2 200 2 38 0 41 0 0 0 7 3 19 0 170 0 0 255 255 255 255 255 50 0 245 3 111 2 38 0 41 0 0 0 39 2 254 0 122 0 221 0 7 3 19 0 170 0 0 255 255 0 46 255 85 1 37 2 200 2 38 0 41 0 0 0 7 3 27 0 170 0 0 0 1 0 23 255 244 0 239 2 200 0 23 0 77 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 18 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 15 0 11 0 19 17 18 57 184 0 15 47 184 0 0 208 184 0 11 16 185 0 4 0 1 244 184 0 15 16 184 0 18 220 184 0 21 208 48 49 19 17 20 22 51 58 1 55 23 14 1 35 34 38 61 1 7 53 55 17 51 17 55 21 169 14 9 3 7 8 11 9 22 17 46 41 63 63 83 70 1 118 254 230 20 16 2 62 4 4 56 54 233 40 70 40 1 55 254 244 45 70 0 0 0 255 255 0 82 255 50 2 241 1 242 2 38 0 42 0 0 0 7 3 19 1 170 0 0 255 255 0 82 0 0 1 215 2 202 2 38 0 43 0 0 0 7 2 248 1 36 0 0 255 255 0 82 0 0 1 215 2 202 2 38 0 43 0 0 0 7 3 12 1 36 0 0 255 255 0 82 0 0 1 215 2 173 2 38 0 43 0 0 0 7 2 252 1 36 0 0 255 255 0 82 255 40 1 215 1 242 2 38 0 43 0 0 0 7 3 21 1 23 0 0 255 255 0 82 0 0 1 215 2 182 2 38 0 43 0 0 0 7 3 2 1 36 0 0 255 255 0 82 255 50 1 215 1 242 2 38 0 43 0 0 0 7 3 19 1 23 0 0 255 255 0 82 255 85 1 215 1 242 2 38 0 43 0 0 0 7 3 27 1 23 0 0 255 255 0 63 0 0 2 181 2 187 0 38 2 9 0 0 0 7 0 43 0 222 0 0 255 255 0 46 255 244 1 240 2 202 2 38 0 44 0 0 0 7 2 246 1 15 0 0 255 255 0 46 255 244 1 240 2 202 2 38 0 44 0 0 0 7 2 248 1 15 0 0 255 255 0 46 255 244 1 240 2 202 2 38 0 44 0 0 0 7 2 250 1 15 0 0 255 255 0 46 255 244 1 240 2 173 2 38 0 44 0 0 0 7 2 252 1 15 0 0 255 255 0 46 255 244 1 240 2 174 2 38 0 44 0 0 0 7 3 4 1 15 0 0 255 255 0 46 255 244 1 240 2 146 2 38 0 44 0 0 0 7 2 254 1 15 0 0 255 255 0 46 255 244 1 240 2 202 2 38 0 44 0 0 0 7 3 10 1 15 0 0 255 255 0 46 255 244 1 240 2 202 2 38 0 44 0 0 0 7 3 12 1 15 0 0 255 255 0 46 255 50 1 240 1 242 2 38 0 44 0 0 0 7 3 19 1 16 0 0 255 255 0 46 255 244 1 240 2 215 2 38 0 44 0 0 0 7 3 6 1 15 0 0 255 255 0 46 255 244 1 247 2 242 2 38 0 44 0 0 0 7 3 36 1 15 0 0 255 255 0 46 255 244 1 240 2 242 2 38 0 44 0 0 0 7 3 38 1 15 0 0 255 255 0 46 255 244 1 240 3 16 2 38 0 44 0 0 0 7 3 40 1 15 0 0 255 255 0 46 255 244 1 240 3 34 2 38 0 44 0 0 0 7 3 42 1 15 0 0 255 255 0 46 255 50 1 240 2 202 2 38 0 44 0 0 0 39 2 250 1 15 0 0 0 7 3 19 1 16 0 0 0 3 0 46 255 233 1 240 1 253 0 9 0 19 0 46 0 73 0 184 0 0 69 88 184 0 41 47 27 185 0 41 0 8 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 186 0 0 0 28 0 41 17 18 57 185 0 2 0 1 244 186 0 10 0 41 0 28 17 18 57 184 0 41 16 185 0 12 0 1 244 48 49 55 22 51 50 62 2 53 52 47 1 38 35 34 14 2 21 20 23 1 30 1 21 20 14 2 35 34 39 7 39 55 46 1 53 52 62 2 51 50 22 23 55 23 178 39 54 31 53 39 21 24 27 37 56 31 53 38 22 23 1 36 25 29 37 62 81 45 79 60 49 37 54 25 29 37 62 81 45 38 72 29 50 36 93 39 27 49 68 41 67 47 39 40 27 49 69 41 67 46 1 26 32 87 54 60 95 65 34 49 60 29 65 32 85 54 61 95 66 34 25 25 61 29 0 0 0 3 0 46 255 244 3 33 1 242 0 19 0 60 0 67 0 113 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 8 62 89 184 0 0 69 88 184 0 56 47 27 185 0 56 0 4 62 89 185 0 5 0 1 244 184 0 25 16 185 0 15 0 1 244 184 0 25 16 184 0 31 208 184 0 56 16 184 0 51 208 186 0 38 0 31 0 51 17 18 57 184 0 38 47 184 0 51 16 185 0 44 0 1 244 184 0 31 16 185 0 64 0 1 244 184 0 38 16 185 0 67 0 1 244 48 49 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 7 52 62 2 51 50 22 23 62 1 51 50 30 2 21 20 7 33 30 3 51 50 54 55 23 14 1 35 34 38 39 6 35 34 46 2 37 52 38 35 34 6 7 130 20 36 50 30 30 50 36 20 20 36 50 30 30 50 36 20 84 36 60 80 44 56 94 26 28 89 54 45 70 48 25 3 254 193 1 25 41 55 31 35 58 27 30 32 78 50 57 94 28 57 122 44 79 60 35 2 171 62 56 51 74 7 242 42 68 49 27 27 49 68 42 42 69 50 27 27 50 69 42 61 95 66 34 62 60 57 65 32 60 85 52 28 18 38 62 44 24 23 17 57 20 30 64 57 121 34 65 95 96 75 80 83 72 0 2 0 46 255 244 1 251 2 101 0 19 0 52 0 71 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 8 62 89 184 0 0 69 88 184 0 34 47 27 185 0 34 0 4 62 89 185 0 0 0 1 244 184 0 44 16 185 0 10 0 1 244 186 0 26 0 44 0 10 17 18 57 184 0 26 16 184 0 46 220 48 49 37 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 19 30 1 21 20 6 7 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 23 62 1 53 52 38 39 1 15 31 52 37 20 20 37 52 31 31 52 37 20 20 37 52 244 10 13 56 37 37 45 37 62 81 45 45 81 62 37 37 62 81 45 50 44 35 39 8 7 56 27 49 68 42 42 69 50 27 27 50 69 42 42 68 49 27 2 45 14 32 19 45 47 11 33 102 68 60 95 65 34 34 65 95 60 61 95 66 34 21 6 31 28 11 21 10 0 0 255 255 0 46 255 244 1 251 2 202 2 38 1 83 0 0 0 7 2 248 1 15 0 0 255 255 0 46 255 244 1 251 2 202 2 38 1 83 0 0 0 7 2 246 1 15 0 0 255 255 0 46 255 244 1 251 2 215 2 38 1 83 0 0 0 7 3 6 1 15 0 0 255 255 0 46 255 244 1 251 2 173 2 38 1 83 0 0 0 7 2 252 1 15 0 0 255 255 0 46 255 50 1 251 2 101 2 38 1 83 0 0 0 7 3 19 1 16 0 0 0 2 0 46 255 50 1 240 1 242 0 40 0 60 0 73 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 8 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 4 62 89 186 0 31 0 38 0 3 43 184 0 5 16 184 0 25 208 184 0 5 16 185 0 46 0 1 244 184 0 15 16 185 0 56 0 1 244 48 49 23 52 62 2 55 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 3 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 205 11 17 19 9 44 78 59 34 37 62 81 45 45 81 62 37 23 42 58 36 34 37 28 18 12 19 10 21 14 45 20 38 52 74 20 37 52 31 31 52 37 20 20 37 52 31 31 52 37 20 121 19 33 29 22 7 2 37 64 92 58 61 95 66 34 34 66 95 61 51 77 59 43 16 16 56 29 23 23 7 6 41 11 16 43 1 149 42 68 49 27 27 49 68 42 42 69 50 27 27 50 69 0 255 255 0 82 0 0 1 94 2 202 2 38 0 47 0 0 0 7 2 248 0 217 0 0 255 255 0 36 255 40 1 94 1 242 2 38 0 47 0 0 0 6 3 21 121 0 0 0 255 255 0 82 0 0 1 94 2 202 2 38 0 47 0 0 0 7 3 12 0 217 0 0 255 255 0 67 255 50 1 94 1 242 2 38 0 47 0 0 0 6 3 19 121 0 0 0 255 255 0 67 255 50 1 94 2 146 2 38 0 47 0 0 0 39 2 254 0 217 0 0 0 6 3 19 121 0 0 0 255 255 255 253 255 85 1 94 1 242 2 38 0 47 0 0 0 6 3 27 121 0 0 0 255 255 0 28 255 244 1 131 2 202 2 38 0 48 0 0 0 7 2 248 0 219 0 0 255 255 0 28 255 244 1 131 2 202 2 38 0 48 0 0 0 7 2 250 0 219 0 0 255 255 0 28 255 244 1 131 2 202 2 38 0 48 0 0 0 7 3 12 0 219 0 0 255 255 0 28 255 43 1 131 1 242 2 38 0 48 0 0 0 7 3 22 0 222 0 0 255 255 0 28 255 40 1 131 1 242 2 38 0 48 0 0 0 7 3 21 0 222 0 0 255 255 0 28 255 244 1 131 2 182 2 38 0 48 0 0 0 7 3 2 0 219 0 0 255 255 0 28 255 50 1 131 1 242 2 38 0 48 0 0 0 7 3 19 0 223 0 0 0 1 0 82 255 244 2 35 2 210 0 55 0 100 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 18 62 89 184 0 0 69 88 184 0 55 47 27 185 0 55 0 4 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 186 0 13 0 25 0 3 17 18 57 185 0 32 0 1 244 186 0 35 0 25 0 3 17 18 57 186 0 47 0 25 0 3 17 18 57 184 0 3 16 185 0 50 0 1 244 48 49 19 52 54 51 50 30 2 21 20 14 2 21 20 30 4 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 4 53 52 62 2 53 52 38 35 34 6 21 17 35 82 102 94 39 61 42 21 28 35 28 29 44 51 44 29 22 42 59 37 42 68 31 33 26 51 29 42 42 29 44 51 44 29 27 33 28 41 42 54 59 82 2 3 94 113 23 40 53 30 38 53 44 41 26 24 32 25 26 36 54 40 32 54 40 23 26 23 58 22 21 48 32 29 38 28 25 32 45 35 34 48 44 46 32 38 49 77 78 254 12 0 0 255 255 0 24 255 244 1 69 2 248 2 38 0 49 0 0 0 7 3 52 1 26 0 0 255 255 0 24 255 43 1 69 2 110 2 38 0 49 0 0 0 7 3 22 0 216 0 0 255 255 0 24 255 40 1 69 2 110 2 38 0 49 0 0 0 7 3 21 0 213 0 0 255 255 0 24 255 50 1 69 2 110 2 38 0 49 0 0 0 7 3 19 0 214 0 0 255 255 0 24 255 85 1 80 2 110 2 38 0 49 0 0 0 7 3 27 0 213 0 0 255 255 0 9 255 244 1 69 3 54 2 38 0 49 0 0 0 7 3 4 0 144 0 136 255 255 0 75 255 244 1 206 2 202 2 38 0 50 0 0 0 7 2 246 1 16 0 0 255 255 0 75 255 244 1 206 2 202 2 38 0 50 0 0 0 7 2 248 1 16 0 0 255 255 0 75 255 244 1 206 2 202 2 38 0 50 0 0 0 7 2 250 1 16 0 0 255 255 0 75 255 244 1 206 2 173 2 38 0 50 0 0 0 7 2 252 1 16 0 0 255 255 0 75 255 244 1 206 2 174 2 38 0 50 0 0 0 7 3 4 1 16 0 0 255 255 0 75 255 244 1 206 2 146 2 38 0 50 0 0 0 7 2 254 1 13 0 0 255 255 0 75 255 244 1 206 2 190 2 38 0 50 0 0 0 7 3 0 1 16 0 0 255 255 0 75 255 244 1 206 2 215 2 38 0 50 0 0 0 7 3 8 1 16 0 0 255 255 0 75 255 244 1 208 2 202 2 38 0 50 0 0 0 7 3 10 1 16 0 0 255 255 0 75 255 244 1 206 2 202 2 38 0 50 0 0 0 7 3 12 1 16 0 0 255 255 0 75 255 244 1 206 3 29 2 38 0 50 0 0 0 7 3 28 1 16 0 0 255 255 0 75 255 244 1 206 3 55 2 38 0 50 0 0 0 7 3 30 1 16 0 0 255 255 0 75 255 244 1 206 3 55 2 38 0 50 0 0 0 7 3 32 1 16 0 0 255 255 0 75 255 244 1 206 3 55 2 38 0 50 0 0 0 7 3 34 1 16 0 0 255 255 0 75 255 50 1 206 1 230 2 38 0 50 0 0 0 7 3 19 1 34 0 0 255 255 0 75 255 244 1 206 2 215 2 38 0 50 0 0 0 7 3 6 1 16 0 0 0 1 0 75 255 50 1 227 1 230 0 38 0 88 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 35 47 27 185 0 35 0 4 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 17 0 24 0 3 43 184 0 35 16 185 0 5 0 1 244 184 0 0 16 184 0 9 208 184 0 11 16 184 0 30 208 48 49 19 51 17 20 22 51 50 54 55 17 51 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 39 35 14 1 35 34 38 53 75 83 42 49 38 58 35 82 45 42 29 17 12 20 9 21 14 45 19 38 53 49 32 8 3 34 75 51 78 71 1 230 254 215 69 61 39 43 1 89 254 26 22 54 29 23 23 7 6 41 11 16 43 42 41 61 23 72 40 48 96 94 0 0 1 0 75 255 244 2 41 2 111 0 35 0 89 0 184 0 0 69 88 184 0 19 47 27 185 0 19 0 8 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 8 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 184 0 29 16 184 0 8 220 184 0 15 16 185 0 24 0 1 244 48 49 1 30 1 21 20 14 2 7 17 35 39 35 14 1 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 62 1 53 52 38 39 2 18 10 13 16 25 33 17 68 7 3 34 75 51 78 71 83 43 48 38 58 35 21 35 49 8 6 2 111 14 32 19 23 34 25 16 5 254 57 76 40 48 96 94 1 52 254 215 69 61 39 43 1 89 4 28 34 11 21 10 0 0 255 255 0 75 255 244 2 41 2 202 2 38 1 127 0 0 0 7 2 248 1 10 0 0 255 255 0 75 255 244 2 41 2 202 2 38 1 127 0 0 0 7 2 246 1 10 0 0 255 255 0 75 255 244 2 41 2 215 2 38 1 127 0 0 0 7 3 6 1 10 0 0 255 255 0 75 255 244 2 41 2 173 2 38 1 127 0 0 0 7 2 252 1 10 0 0 255 255 0 75 255 50 2 41 2 111 2 38 1 127 0 0 0 7 3 19 1 28 0 0 255 255 0 24 0 0 2 182 2 202 2 38 0 52 0 0 0 7 2 246 1 104 0 0 255 255 0 24 0 0 2 182 2 202 2 38 0 52 0 0 0 7 2 248 1 104 0 0 255 255 0 24 0 0 2 182 2 202 2 38 0 52 0 0 0 7 2 250 1 104 0 0 255 255 0 24 0 0 2 182 2 174 2 38 0 52 0 0 0 7 3 4 1 104 0 0 255 255 0 12 255 47 1 199 2 202 2 38 0 54 0 0 0 7 2 246 0 242 0 0 255 255 0 12 255 47 1 199 2 202 2 38 0 54 0 0 0 7 2 248 0 242 0 0 255 255 0 12 255 47 1 199 2 202 2 38 0 54 0 0 0 7 2 250 0 242 0 0 255 255 0 12 255 47 1 199 2 174 2 38 0 54 0 0 0 7 3 4 0 242 0 0 255 255 0 12 255 47 1 199 2 182 2 38 0 54 0 0 0 7 3 2 0 242 0 0 255 255 0 12 255 47 1 199 1 230 2 38 0 54 0 0 0 7 3 19 1 135 0 4 255 255 0 12 255 47 1 199 2 215 2 38 0 54 0 0 0 7 3 6 0 242 0 0 255 255 0 12 255 47 1 199 2 173 2 38 0 54 0 0 0 7 2 252 0 242 0 0 255 255 0 31 0 0 1 143 2 202 2 38 0 55 0 0 0 7 2 248 0 228 0 0 255 255 0 31 0 0 1 143 2 202 2 38 0 55 0 0 0 7 3 12 0 228 0 0 255 255 0 31 0 0 1 143 2 182 2 38 0 55 0 0 0 7 3 2 0 228 0 0 255 255 0 31 255 50 1 143 1 230 2 38 0 55 0 0 0 7 3 19 0 228 0 0 0 2 0 53 255 244 1 229 2 218 0 20 0 56 0 89 0 184 0 0 69 88 184 0 51 47 27 185 0 51 0 18 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 187 0 39 0 1 0 11 0 4 43 186 0 48 0 45 0 3 43 184 0 29 16 185 0 0 0 1 244 184 0 45 16 184 0 21 208 184 0 48 16 184 0 51 220 184 0 48 16 184 0 54 208 48 49 37 50 62 2 53 52 38 39 46 1 35 34 14 2 21 20 30 2 19 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 46 1 39 7 39 55 38 39 55 30 1 23 55 23 1 15 34 50 34 17 1 1 33 66 34 33 52 36 19 22 39 50 107 60 76 31 57 79 49 42 78 60 36 32 55 75 44 38 70 26 14 55 38 141 24 127 52 60 38 36 70 32 142 24 56 29 52 73 44 14 28 13 44 30 24 44 59 34 38 61 43 24 2 37 61 168 119 60 99 71 39 32 61 87 54 51 83 59 32 32 34 62 92 38 73 41 65 40 32 52 20 44 27 73 41 0 0 0 0 2 0 82 255 51 1 251 2 200 0 22 0 39 0 87 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 8 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 18 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 6 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 185 0 26 0 1 244 184 0 8 16 185 0 36 0 1 244 48 49 23 35 17 51 21 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 23 53 30 1 51 50 62 2 53 52 46 2 35 34 6 7 164 82 82 1 32 76 40 48 73 50 25 34 58 76 42 35 66 33 1 33 62 24 30 51 37 21 14 31 49 34 31 63 36 205 3 149 194 83 26 37 35 65 91 57 62 97 68 35 28 26 83 149 28 23 27 49 72 45 40 66 47 26 34 32 0 0 1 255 216 255 39 0 165 1 230 0 15 0 43 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 6 62 89 185 0 12 0 1 244 48 49 19 51 17 20 6 35 34 38 39 55 30 1 51 50 54 53 83 82 60 73 23 36 13 17 9 24 13 36 24 1 230 253 227 74 88 8 5 62 3 5 50 45 0 0 2 0 47 255 244 1 217 1 242 0 14 0 35 0 77 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 8 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 185 0 3 0 1 244 184 0 20 16 185 0 10 0 1 244 184 0 20 16 184 0 26 208 184 0 26 47 184 0 33 16 184 0 27 208 184 0 27 47 48 49 55 20 22 51 50 54 55 53 46 1 35 34 14 2 7 52 62 2 51 50 22 23 51 55 51 17 35 39 35 14 1 35 34 38 132 70 64 34 60 30 31 57 30 29 51 38 22 85 35 59 76 42 41 64 33 2 7 67 68 7 3 29 75 43 92 109 243 88 98 33 34 254 28 23 27 49 68 43 59 95 66 36 30 29 47 254 26 57 28 41 132 0 2 0 37 255 244 1 194 1 242 0 28 0 35 0 81 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 8 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 4 62 89 186 0 4 0 14 0 24 17 18 57 184 0 4 47 184 0 14 16 185 0 7 0 1 244 184 0 4 16 185 0 29 0 1 244 184 0 24 16 185 0 32 0 1 244 48 49 55 52 54 55 33 46 1 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 35 34 46 2 55 20 22 51 50 54 55 37 2 2 1 71 4 75 66 37 60 29 29 34 83 51 46 78 57 33 33 57 78 44 46 74 53 28 73 68 58 57 69 7 222 14 23 9 75 90 23 19 54 23 30 34 66 94 60 60 95 66 35 32 61 87 45 81 78 82 77 0 0 0 2 0 50 255 40 1 219 1 242 0 33 0 48 0 84 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 8 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 8 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 6 62 89 187 0 34 0 1 0 10 0 4 43 184 0 30 16 185 0 3 0 1 244 184 0 20 16 185 0 41 0 1 244 48 49 23 30 1 51 50 54 63 1 14 1 35 34 46 2 53 52 62 2 51 50 22 23 51 55 51 17 20 6 35 34 38 39 55 50 54 55 53 46 1 35 34 14 2 21 20 22 115 36 73 35 67 65 2 1 28 73 43 46 74 52 28 35 58 77 41 42 63 31 2 7 69 112 104 45 91 38 183 34 59 32 32 57 30 29 51 38 22 70 105 24 21 69 59 92 27 38 34 63 91 57 57 92 64 35 29 28 45 254 2 91 101 27 26 236 33 34 238 28 23 26 48 65 39 82 96 0 0 0 0 1 0 30 0 0 2 91 2 212 0 40 0 124 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 8 62 89 184 0 0 69 88 184 0 37 47 27 185 0 37 0 18 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 37 16 185 0 2 0 1 244 184 0 18 16 184 0 33 208 184 0 6 208 184 0 18 16 185 0 15 0 1 244 184 0 11 208 184 0 7 208 184 0 14 16 184 0 10 208 184 0 18 16 184 0 17 208 184 0 37 16 184 0 22 208 185 0 28 0 1 244 48 49 1 38 35 34 29 1 51 21 35 17 35 17 35 17 35 17 35 53 55 53 52 54 51 50 22 23 7 38 35 34 6 29 1 51 53 52 54 51 50 22 23 2 74 29 26 69 103 103 82 202 82 66 66 75 76 24 47 18 17 30 35 36 40 202 69 73 23 41 17 2 133 12 94 77 67 254 93 1 163 254 93 1 163 62 5 64 76 88 10 8 62 13 51 48 62 77 75 86 9 7 0 0 255 255 0 30 0 0 1 235 2 212 0 38 0 35 0 0 0 7 0 38 1 54 0 0 255 255 0 30 255 244 1 252 2 212 0 38 0 35 0 0 0 7 0 41 1 36 0 0 0 1 0 30 255 244 2 69 2 212 0 43 0 137 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 8 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 18 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 184 0 16 16 185 0 13 0 1 244 184 0 9 208 184 0 16 16 184 0 15 208 184 0 15 47 184 0 20 16 185 0 26 0 1 244 184 0 16 16 184 0 30 208 184 0 34 208 184 0 9 16 184 0 35 208 184 0 3 16 185 0 40 0 1 244 48 49 37 14 1 35 34 46 2 53 17 35 17 35 17 35 53 55 53 52 54 51 50 22 23 7 38 35 34 29 1 51 55 51 21 51 21 35 17 20 22 51 50 54 55 2 69 20 47 23 39 53 33 14 174 82 66 66 69 73 23 41 17 18 27 28 68 178 10 68 132 132 34 42 13 30 12 6 7 11 24 42 60 36 1 13 254 93 1 163 62 5 77 75 86 9 7 63 12 94 77 136 136 67 254 242 45 49 8 5 0 0 1 0 46 0 0 1 40 2 144 0 11 0 65 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 16 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 185 0 1 0 1 244 184 0 4 16 185 0 2 0 1 244 184 0 7 208 184 0 1 16 184 0 8 208 48 49 55 51 17 35 53 51 21 35 17 51 21 35 46 84 84 250 83 83 250 71 2 3 70 70 253 253 71 0 0 255 255 0 41 0 0 1 40 3 50 2 38 1 159 0 0 0 7 2 247 0 172 0 0 255 255 0 46 0 0 1 47 3 50 2 38 1 159 0 0 0 7 2 249 0 172 0 0 255 255 0 36 0 0 1 52 3 50 2 38 1 159 0 0 0 7 2 251 0 172 0 0 255 255 0 27 0 0 1 61 3 51 2 38 1 159 0 0 0 7 2 253 0 172 0 0 255 255 0 37 0 0 1 51 3 45 2 38 1 159 0 0 0 7 3 5 0 172 0 0 255 255 0 46 0 0 1 40 3 18 2 38 1 159 0 0 0 7 2 255 0 172 0 0 255 255 0 46 0 0 1 40 3 53 2 38 1 159 0 0 0 7 3 3 0 172 0 0 255 255 0 36 0 0 1 52 3 50 2 38 1 159 0 0 0 7 3 13 0 172 0 0 255 255 0 46 0 0 1 40 3 104 2 38 1 159 0 0 0 7 3 7 0 172 0 0 255 255 0 46 255 50 1 40 2 144 2 38 1 159 0 0 0 7 3 19 0 173 0 0 0 1 0 46 255 44 1 40 2 144 0 31 0 94 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 16 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 4 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 186 0 17 0 24 0 3 43 184 0 31 16 185 0 1 0 1 244 184 0 4 16 185 0 2 0 1 244 184 0 7 208 184 0 1 16 184 0 8 208 48 49 55 51 17 35 53 51 21 35 17 51 21 35 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 35 46 84 84 250 83 83 87 29 34 30 18 12 19 9 23 14 46 20 39 56 44 24 104 71 2 3 70 70 253 253 71 23 55 29 23 23 7 7 45 11 17 44 43 41 64 20 0 0 255 255 0 47 255 244 1 217 1 242 2 6 1 152 0 0 255 255 0 47 255 244 1 217 2 202 2 38 1 152 0 0 0 7 2 246 1 26 0 0 255 255 0 47 255 244 1 217 2 202 2 38 1 152 0 0 0 7 2 248 1 26 0 0 255 255 0 47 255 244 1 217 2 202 2 38 1 152 0 0 0 7 2 250 1 26 0 0 255 255 0 47 255 244 1 217 2 173 2 38 1 152 0 0 0 7 2 252 1 26 0 0 255 255 0 47 255 244 1 217 2 174 2 38 1 152 0 0 0 7 3 4 1 26 0 0 255 255 0 47 255 244 1 217 2 146 2 38 1 152 0 0 0 7 2 254 1 26 0 0 255 255 0 47 255 244 1 217 2 190 2 38 1 152 0 0 0 7 3 0 1 26 0 0 255 255 0 47 255 244 1 217 2 215 2 38 1 152 0 0 0 7 3 8 1 26 0 0 255 255 0 47 255 244 1 217 2 202 2 38 1 152 0 0 0 7 3 12 1 26 0 0 255 255 0 47 255 50 1 217 1 242 2 38 1 152 0 0 0 7 3 19 1 28 0 0 255 255 0 47 255 244 1 217 2 215 2 38 1 152 0 0 0 7 3 6 1 26 0 0 255 255 0 47 255 244 2 2 2 242 2 38 1 152 0 0 0 7 3 36 1 26 0 0 255 255 0 47 255 244 1 227 2 242 2 38 1 152 0 0 0 7 3 38 1 26 0 0 255 255 0 47 255 244 1 235 3 16 2 38 1 152 0 0 0 7 3 40 1 26 0 0 255 255 0 47 255 244 1 217 3 34 2 38 1 152 0 0 0 7 3 42 1 26 0 0 255 255 0 47 255 50 1 217 2 202 2 38 1 152 0 0 0 39 2 250 1 26 0 0 0 7 3 19 1 28 0 0 255 255 0 47 255 244 1 217 3 21 2 38 1 152 0 0 0 7 3 44 1 26 0 0 255 255 0 47 255 244 1 217 3 21 2 38 1 152 0 0 0 7 3 46 1 26 0 0 255 255 0 47 255 244 1 217 3 71 2 38 1 152 0 0 0 7 3 48 1 26 0 0 255 255 0 47 255 244 1 217 3 34 2 38 1 152 0 0 0 7 3 50 1 26 0 0 255 255 0 47 255 50 1 217 2 190 2 38 1 152 0 0 0 39 3 0 1 26 0 0 0 7 3 19 1 28 0 0 0 2 0 47 255 50 1 238 1 242 0 14 0 53 0 90 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 8 62 89 184 0 0 69 88 184 0 51 47 27 185 0 51 0 4 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 4 62 89 186 0 33 0 40 0 3 43 184 0 51 16 185 0 3 0 1 244 184 0 20 16 185 0 10 0 1 244 184 0 27 16 184 0 46 208 48 49 55 20 22 51 50 54 55 53 46 1 35 34 14 2 7 52 62 2 51 50 22 23 51 55 51 17 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 39 35 14 1 35 34 38 132 70 64 34 60 30 31 57 30 29 51 38 22 85 35 59 76 42 41 64 33 2 7 67 45 42 28 18 12 20 9 21 14 45 19 38 53 48 32 7 3 29 75 43 92 109 243 88 98 33 34 254 28 23 27 49 68 43 59 95 66 36 30 29 47 254 26 22 54 29 23 23 7 6 41 11 16 43 42 41 61 23 53 28 41 132 255 255 0 50 255 40 1 219 1 242 2 6 1 154 0 0 255 255 0 50 255 40 1 219 2 202 2 38 1 154 0 0 0 7 2 250 1 31 0 0 255 255 0 50 255 40 1 219 2 190 2 38 1 154 0 0 0 7 3 0 1 31 0 0 255 255 0 50 255 40 1 219 2 182 2 38 1 154 0 0 0 7 3 2 1 31 0 0 255 255 0 50 255 40 1 219 2 198 2 38 1 154 0 0 0 7 3 53 1 31 0 0 255 255 0 50 255 40 1 219 2 202 2 38 1 154 0 0 0 7 3 12 1 31 0 0 255 255 0 50 255 40 1 219 2 146 2 38 1 154 0 0 0 7 2 254 1 31 0 0 255 255 0 50 255 40 1 219 2 173 2 38 1 154 0 0 0 7 2 252 1 31 0 0 0 1 0 82 0 0 0 164 2 200 0 3 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 48 49 19 51 17 35 82 82 82 2 200 253 56 0 0 255 255 0 69 0 0 0 251 3 102 2 38 1 202 0 0 0 6 2 249 120 52 0 0 255 255 0 82 0 0 1 20 2 248 0 38 1 202 0 0 0 7 3 52 0 246 0 0 255 255 0 82 0 0 1 108 2 200 0 38 1 202 0 0 0 7 1 253 0 180 1 19 255 255 0 38 255 40 0 191 2 200 2 38 1 202 0 0 0 6 3 21 123 0 0 0 255 255 0 69 255 50 0 177 2 200 2 38 1 202 0 0 0 6 3 19 123 0 0 0 255 255 0 0 255 50 0 246 3 111 2 38 1 202 0 0 0 39 2 254 0 123 0 221 0 6 3 19 123 0 0 0 255 255 255 255 255 85 0 246 2 200 2 38 1 202 0 0 0 6 3 27 123 0 0 0 0 1 0 23 0 0 0 239 2 200 0 11 0 67 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 18 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 186 0 4 0 3 0 8 17 18 57 184 0 4 47 184 0 1 208 184 0 4 16 184 0 7 220 184 0 10 220 48 49 19 7 17 35 17 7 53 55 17 51 17 55 239 75 82 59 59 82 75 1 163 48 254 141 1 73 38 70 38 1 57 254 241 48 0 255 255 0 30 0 0 1 218 2 212 0 38 0 35 0 0 0 7 1 202 1 54 0 0 0 3 0 32 255 244 2 82 2 156 0 13 0 27 0 73 0 140 0 184 0 0 69 88 184 0 52 47 27 185 0 52 0 16 62 89 184 0 0 69 88 184 0 34 47 27 185 0 34 0 4 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 186 0 63 0 31 0 3 43 184 0 34 16 185 0 5 0 1 244 186 0 8 0 31 0 63 17 18 57 186 0 11 0 34 0 52 17 18 57 184 0 11 47 184 0 17 220 184 0 52 16 185 0 25 0 1 244 186 0 44 0 11 0 17 17 18 57 186 0 60 0 11 0 17 17 18 57 186 0 70 0 31 0 63 17 18 57 48 49 55 20 30 2 51 50 54 55 46 1 39 14 1 19 20 22 23 62 3 53 52 38 35 34 6 1 46 1 39 14 1 35 34 46 2 53 52 62 2 55 46 1 53 52 62 2 51 50 22 21 20 14 2 7 30 1 23 62 1 55 51 14 1 7 30 1 23 112 20 35 47 27 34 62 29 48 89 35 35 47 77 17 14 22 41 31 18 29 33 37 44 1 127 35 76 40 38 93 58 45 73 53 29 21 36 47 25 20 23 22 40 56 34 61 68 26 42 53 27 32 87 47 30 47 15 77 20 56 39 34 62 27 175 27 45 32 17 28 25 42 100 53 28 61 1 45 27 58 30 15 31 33 37 22 29 43 54 253 201 10 37 28 34 41 27 48 67 40 33 54 46 39 17 41 77 36 33 56 42 24 72 58 32 54 47 41 20 51 94 39 41 96 57 65 118 52 23 32 8 0 0 0 0 2 0 44 255 244 1 197 2 138 0 11 0 29 0 53 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 12 0 1 244 184 0 6 16 185 0 22 0 1 244 48 49 23 34 38 53 52 54 51 50 22 21 20 6 39 50 62 2 53 52 46 2 35 34 14 2 21 20 22 249 97 108 108 97 96 108 108 96 28 45 33 18 18 33 45 28 28 46 33 18 69 12 172 161 161 168 168 161 161 172 66 31 65 101 70 70 100 63 30 30 63 100 70 140 127 0 0 0 1 0 79 0 0 1 183 2 126 0 12 0 67 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 14 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 185 0 1 0 1 244 184 0 7 16 185 0 4 0 1 244 185 0 2 0 1 244 184 0 1 16 184 0 9 208 48 49 55 51 17 35 53 62 1 55 51 17 51 21 33 79 146 116 44 65 26 63 132 254 152 68 1 214 53 8 23 16 253 198 68 0 0 0 1 0 36 0 0 1 196 2 138 0 29 0 61 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 14 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 185 0 26 0 1 244 184 0 23 208 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 2 7 62 1 59 1 21 33 40 72 112 76 40 60 61 40 68 28 47 40 90 63 89 102 39 69 95 57 26 56 25 185 254 100 49 72 116 99 83 39 55 70 45 32 47 44 53 103 85 45 91 97 105 59 2 4 71 0 0 1 0 26 255 244 1 190 2 138 0 51 0 83 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 14 62 89 184 0 0 69 88 184 0 46 47 27 185 0 46 0 4 62 89 185 0 3 0 1 244 186 0 11 0 27 0 46 17 18 57 184 0 11 47 185 0 12 0 1 244 184 0 27 16 185 0 20 0 1 244 186 0 36 0 12 0 11 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 35 53 50 62 2 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 21 30 3 21 20 14 2 35 34 46 2 39 68 29 77 57 58 74 21 48 78 57 51 69 43 18 59 51 40 67 29 44 37 89 57 42 70 51 28 64 52 29 50 38 21 33 57 76 44 38 63 52 41 16 132 30 46 63 54 28 47 34 18 63 18 32 44 25 47 54 36 29 52 35 45 22 41 60 39 58 74 20 4 7 27 41 54 33 42 68 47 25 15 25 32 18 0 0 0 2 0 17 0 0 1 213 2 126 0 9 0 20 0 87 0 184 0 0 69 88 184 0 18 47 27 185 0 18 0 14 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 187 0 14 0 1 0 0 0 4 43 184 0 18 16 184 0 4 220 184 0 0 16 184 0 9 208 184 0 14 16 184 0 11 208 184 0 9 16 184 0 16 208 184 0 0 16 184 0 19 208 48 49 37 53 52 54 55 35 14 1 15 1 5 35 21 35 53 33 53 1 51 17 51 1 48 3 2 4 12 26 14 149 1 109 87 78 254 225 1 17 92 87 242 185 26 71 26 23 44 23 218 66 176 176 54 1 152 254 116 0 1 0 25 255 244 1 193 2 126 0 38 0 71 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 14 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 185 0 3 0 1 244 186 0 23 0 16 0 33 17 18 57 184 0 23 47 184 0 11 220 184 0 16 16 185 0 18 0 1 244 48 49 55 30 1 51 50 62 2 53 52 38 35 34 6 7 39 19 33 21 35 7 62 1 51 50 30 2 21 20 14 2 35 34 46 2 39 65 28 77 56 29 51 38 22 74 62 33 47 29 44 21 1 63 247 17 23 46 29 41 72 54 31 36 60 77 42 38 63 51 41 16 129 29 44 21 38 54 33 66 74 20 19 28 1 51 71 189 12 14 24 49 75 52 52 80 55 29 15 24 31 17 0 0 0 0 2 0 48 255 244 1 201 2 138 0 13 0 46 0 67 0 184 0 0 69 88 184 0 43 47 27 185 0 43 0 14 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 187 0 25 0 1 0 8 0 4 43 184 0 33 16 185 0 0 0 1 244 184 0 43 16 185 0 17 0 1 244 48 49 37 50 62 2 53 52 38 35 34 6 7 30 1 19 46 1 35 34 14 2 7 62 1 51 50 22 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 1 12 24 40 30 17 58 60 30 71 32 8 71 192 20 55 30 33 60 46 28 1 30 80 39 83 99 30 52 68 39 47 80 59 34 40 68 87 48 52 75 27 53 20 37 51 32 63 72 39 45 94 97 1 222 23 27 28 64 103 76 37 43 98 99 46 75 54 30 38 77 115 77 96 135 85 39 39 29 0 1 0 44 0 0 1 199 2 126 0 15 0 51 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 7 16 185 0 5 0 1 244 184 0 9 208 48 49 51 62 3 55 33 53 33 21 14 3 7 35 177 4 24 43 67 47 254 194 1 155 57 71 42 19 4 85 90 150 135 126 66 71 51 72 132 137 153 93 0 0 0 0 3 0 41 255 244 1 200 2 138 0 15 0 29 0 69 0 87 0 184 0 0 69 88 184 0 44 47 27 185 0 44 0 14 62 89 184 0 0 69 88 184 0 65 47 27 185 0 65 0 4 62 89 185 0 5 0 1 244 186 0 13 0 65 0 44 17 18 57 184 0 13 47 184 0 16 208 184 0 44 16 185 0 22 0 1 244 184 0 13 16 184 0 35 220 184 0 16 16 184 0 54 220 48 49 55 20 30 2 51 50 54 53 52 46 2 39 14 1 55 62 1 53 52 38 35 34 6 21 20 30 2 7 52 62 2 55 53 46 1 53 52 62 2 51 50 30 2 21 20 14 2 7 21 30 3 21 20 14 2 35 34 46 2 115 21 37 50 29 56 69 28 48 63 34 38 51 180 32 35 58 53 45 58 24 41 53 225 21 33 43 23 35 54 28 48 66 39 42 66 47 25 17 25 31 15 21 40 31 19 30 54 76 46 45 77 55 32 171 27 44 33 18 62 50 31 44 33 27 14 26 69 133 29 64 35 48 65 56 47 29 41 32 25 196 31 53 43 33 12 4 25 71 51 37 60 43 24 25 45 63 37 25 46 40 32 11 4 12 31 39 50 32 36 62 46 26 26 47 64 0 2 0 40 255 244 1 192 2 138 0 13 0 46 0 67 0 184 0 0 69 88 184 0 33 47 27 185 0 33 0 14 62 89 184 0 0 69 88 184 0 43 47 27 185 0 43 0 4 62 89 187 0 0 0 1 0 25 0 4 43 184 0 33 16 185 0 6 0 1 244 184 0 43 16 185 0 17 0 1 244 48 49 19 50 54 55 46 1 35 34 14 2 21 20 22 7 30 1 51 50 62 2 55 14 1 35 34 38 53 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 235 31 71 32 8 72 61 23 41 30 17 58 78 20 55 30 34 60 46 28 1 30 80 40 83 98 30 51 69 38 47 81 59 33 40 68 87 48 51 77 26 1 54 39 46 94 96 20 37 52 31 63 72 203 23 28 28 65 104 77 38 44 98 99 46 75 54 30 38 77 115 77 96 135 85 39 38 29 0 0 2 0 55 255 244 1 227 2 138 0 15 0 27 0 53 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 16 0 1 244 184 0 8 16 185 0 22 0 1 244 48 49 5 34 46 2 53 52 54 51 50 22 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 1 13 50 79 56 29 114 100 100 114 29 56 79 50 59 72 72 59 59 72 72 12 45 85 124 79 159 170 171 158 79 124 85 45 68 127 138 138 122 122 138 138 127 0 0 0 1 0 50 0 0 0 249 2 126 0 8 0 53 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 14 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 184 0 6 16 185 0 2 0 1 244 185 0 0 0 1 244 48 49 19 35 53 62 1 55 51 17 35 167 117 45 65 26 63 82 2 26 53 8 23 16 253 130 0 0 1 0 37 0 0 1 192 2 138 0 29 0 61 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 14 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 185 0 26 0 1 244 184 0 23 208 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 2 7 62 1 59 1 21 33 43 72 110 76 39 57 62 40 69 27 48 42 91 61 89 100 38 69 94 55 26 56 25 177 254 107 49 72 116 99 83 39 55 70 45 32 47 46 51 103 85 45 91 97 105 59 2 4 71 0 255 255 0 26 255 244 1 190 2 138 2 6 1 216 0 0 255 255 0 34 0 0 1 230 2 126 0 6 1 217 17 0 255 255 0 25 255 244 1 193 2 126 2 6 1 218 0 0 255 255 0 61 255 244 1 214 2 138 0 6 1 219 13 0 0 1 0 44 0 0 1 185 2 126 0 15 0 51 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 7 16 185 0 5 0 1 244 184 0 9 208 48 49 51 62 3 55 33 53 33 21 14 3 7 35 167 4 23 42 65 47 254 208 1 141 56 70 41 18 4 85 90 150 135 126 66 71 51 72 132 137 153 93 0 0 0 255 255 0 55 255 244 1 214 2 138 0 6 1 221 14 0 255 255 0 52 255 244 1 204 2 138 0 6 1 222 12 0 0 2 0 44 255 244 1 197 2 74 0 11 0 23 0 53 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 12 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 12 0 1 244 184 0 6 16 185 0 18 0 1 244 48 49 23 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 249 94 111 111 94 94 110 110 94 59 65 65 59 60 65 65 12 150 149 149 150 150 149 149 150 66 123 110 110 122 122 110 110 123 0 0 1 0 79 0 0 1 183 2 62 0 12 0 67 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 12 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 185 0 1 0 1 244 184 0 7 16 185 0 4 0 1 244 185 0 2 0 1 244 184 0 1 16 184 0 9 208 48 49 55 51 17 35 53 62 1 55 51 17 51 21 33 79 146 116 44 65 26 63 132 254 152 68 1 150 53 8 23 16 254 6 68 0 0 0 1 0 36 0 0 1 196 2 72 0 29 0 61 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 12 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 185 0 26 0 1 244 184 0 23 208 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 2 7 62 1 59 1 21 33 40 71 111 76 40 58 60 41 68 28 47 40 90 63 88 101 37 67 91 54 26 56 25 176 254 100 49 59 97 83 73 35 53 68 44 32 46 45 52 101 84 41 76 80 87 50 2 4 71 0 0 1 0 26 255 170 1 190 2 74 0 51 0 60 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 12 62 89 187 0 3 0 1 0 46 0 4 43 187 0 12 0 1 0 11 0 4 43 184 0 27 16 185 0 20 0 1 244 186 0 36 0 11 0 12 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 35 53 50 62 2 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 21 30 3 21 20 14 2 35 34 46 2 39 68 29 77 57 58 74 21 48 78 57 51 69 43 18 59 51 40 67 29 44 37 89 57 42 70 51 28 64 52 29 50 38 21 33 57 76 44 38 63 52 41 16 58 30 45 66 54 28 47 34 19 64 19 33 44 25 47 56 36 29 52 35 45 22 42 61 39 58 77 19 4 7 28 42 55 33 42 69 48 26 15 25 32 18 0 0 2 0 17 255 182 1 213 2 62 0 8 0 19 0 70 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 12 62 89 187 0 0 0 1 0 13 0 4 43 184 0 17 16 184 0 4 220 184 0 0 16 184 0 8 208 184 0 13 16 184 0 10 208 184 0 8 16 184 0 15 208 184 0 0 16 184 0 18 208 48 49 37 53 52 54 55 35 6 15 1 5 35 21 35 53 33 53 1 51 17 51 1 48 3 2 4 25 27 149 1 109 87 78 254 225 1 17 92 87 160 203 26 68 26 50 48 225 66 168 168 55 1 169 254 98 0 1 0 25 255 170 1 193 2 62 0 38 0 60 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 12 62 89 187 0 3 0 1 0 33 0 4 43 187 0 23 0 1 0 11 0 4 43 184 0 16 16 185 0 18 0 1 244 186 0 20 0 11 0 23 17 18 57 48 49 55 30 1 51 50 62 2 53 52 38 35 34 6 7 39 19 33 21 35 7 62 1 51 50 30 2 21 20 14 2 35 34 46 2 39 65 28 77 56 29 51 38 22 74 62 33 47 29 44 21 1 63 247 17 23 46 29 41 72 54 31 36 60 77 42 38 63 51 41 16 55 28 44 21 39 54 34 67 75 19 20 28 1 56 71 194 12 15 24 50 76 52 53 82 56 29 15 25 32 17 0 0 255 255 0 49 255 244 1 202 2 138 2 6 1 219 1 0 0 1 0 44 255 182 1 199 2 62 0 15 0 30 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 12 62 89 185 0 5 0 1 244 184 0 9 208 48 49 23 62 3 55 33 53 33 21 14 3 7 35 177 4 24 43 67 47 254 194 1 155 57 71 42 19 4 85 74 91 153 138 129 66 71 51 73 134 140 156 94 0 0 0 255 255 0 41 255 244 1 200 2 138 2 6 1 221 0 0 0 2 0 30 255 170 1 194 2 74 0 13 0 45 0 50 0 184 0 0 69 88 184 0 32 47 27 185 0 32 0 12 62 89 187 0 16 0 1 0 42 0 4 43 187 0 0 0 1 0 24 0 4 43 184 0 32 16 185 0 6 0 1 244 48 49 55 50 54 55 46 1 35 34 14 2 21 20 22 7 22 51 50 62 2 55 14 1 35 34 38 53 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 229 34 74 33 6 74 65 25 43 31 18 58 77 49 62 35 60 45 28 3 31 83 42 89 96 31 53 71 40 52 84 58 31 36 65 90 55 48 70 32 227 39 47 103 105 22 39 54 33 68 78 198 46 27 61 100 74 38 42 108 100 47 79 56 31 43 81 115 73 92 135 89 44 30 27 0 0 255 255 0 52 255 244 1 205 2 74 0 6 1 233 8 0 0 1 0 50 0 0 0 249 2 62 0 8 0 53 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 12 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 184 0 5 16 185 0 2 0 1 244 185 0 0 0 1 244 48 49 19 35 53 62 1 55 51 17 35 167 117 45 65 26 63 82 1 218 53 8 23 16 253 194 0 0 1 0 41 0 0 1 188 2 72 0 31 0 61 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 12 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 4 62 89 185 0 28 0 1 244 184 0 25 208 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 7 62 1 59 1 21 33 48 71 108 72 36 55 60 41 63 28 47 40 86 62 44 69 48 25 35 63 89 54 26 56 25 163 254 116 49 59 97 83 73 35 53 68 44 32 46 44 53 27 48 68 42 41 76 80 87 50 2 4 71 255 255 0 26 255 170 1 190 2 74 2 6 1 236 0 0 255 255 0 25 255 182 1 221 2 62 0 6 1 237 8 0 255 255 0 25 255 170 1 193 2 62 2 6 1 238 0 0 255 255 0 57 255 244 1 210 2 138 0 6 1 219 9 0 0 1 0 44 255 182 1 185 2 62 0 15 0 30 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 12 62 89 185 0 5 0 1 244 184 0 9 208 48 49 23 62 3 55 33 53 33 21 14 3 7 35 165 4 23 44 65 47 254 208 1 141 56 71 42 18 4 85 74 91 154 137 129 66 71 51 73 134 140 155 95 0 0 0 255 255 0 49 255 244 1 208 2 138 0 6 1 221 8 0 255 255 0 38 255 170 1 202 2 74 0 6 1 242 8 0 0 1 0 65 255 244 0 184 0 114 0 11 0 24 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 184 0 3 220 48 49 55 52 54 51 50 22 21 20 6 35 34 38 65 35 25 24 35 35 24 25 35 50 29 35 35 29 27 35 35 0 0 1 0 47 255 86 0 198 0 114 0 17 0 24 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 4 62 89 184 0 11 220 48 49 23 62 1 53 6 35 34 38 53 52 54 51 50 22 21 20 6 7 47 42 48 3 7 24 35 36 25 32 37 70 61 122 19 62 41 1 29 28 27 31 52 45 65 96 26 0 255 255 0 65 255 244 0 184 1 219 2 39 1 253 0 0 1 105 0 6 1 253 0 0 255 255 0 47 255 86 0 198 1 219 2 39 1 253 0 0 1 105 0 6 1 254 0 0 255 255 0 94 255 244 3 115 0 114 0 38 1 253 29 0 0 39 1 253 1 108 0 0 0 7 1 253 2 187 0 0 0 2 0 85 255 244 0 204 2 158 0 5 0 17 0 26 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 185 0 9 0 1 244 48 49 19 39 51 7 3 35 7 52 54 51 50 22 21 20 6 35 34 38 105 2 83 2 11 57 31 35 25 24 35 35 24 25 35 2 64 94 94 254 134 148 29 35 35 29 27 35 35 0 0 0 0 2 0 85 255 72 0 204 1 242 0 5 0 17 0 26 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 8 62 89 185 0 9 0 1 244 48 49 31 1 35 55 19 51 55 20 6 35 34 38 53 52 54 51 50 22 184 2 83 2 11 57 31 35 24 25 35 35 25 24 35 90 94 94 1 122 148 29 35 35 29 27 35 35 0 2 0 38 255 244 1 121 2 170 0 27 0 39 0 40 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 4 62 89 187 0 17 0 1 0 10 0 4 43 184 0 37 16 185 0 31 0 1 244 48 49 55 38 62 4 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 4 23 7 52 54 51 50 22 21 20 6 35 34 38 160 6 17 30 39 34 23 49 48 33 59 23 47 32 82 54 78 93 24 35 39 33 18 4 93 34 25 25 35 35 25 25 34 198 39 63 53 46 45 46 27 40 57 31 27 43 36 47 85 75 33 54 48 47 50 57 35 148 29 35 35 29 27 35 35 0 0 2 0 48 255 60 1 131 1 242 0 27 0 39 0 40 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 8 62 89 187 0 10 0 1 0 17 0 4 43 184 0 37 16 185 0 31 0 1 244 48 49 1 22 14 4 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 4 39 55 20 6 35 34 38 53 52 54 51 50 22 1 9 5 16 30 39 34 23 48 49 33 58 23 48 32 82 54 78 93 24 35 39 32 18 4 94 35 24 25 35 35 25 24 35 1 32 39 63 53 46 45 47 26 40 56 30 27 43 35 48 85 75 33 54 48 47 50 57 35 148 29 35 35 29 27 35 35 0 0 0 0 1 0 80 1 175 0 168 2 178 0 5 0 11 0 186 0 2 0 4 0 3 43 48 49 19 39 51 15 1 35 83 3 88 3 16 50 2 86 92 92 167 0 0 255 255 0 80 1 175 1 88 2 178 0 38 2 6 0 0 0 7 2 6 0 176 0 0 0 1 0 57 1 172 0 187 2 184 0 17 0 13 0 187 0 5 0 1 0 11 0 4 43 48 49 19 14 1 21 54 51 50 22 21 20 6 35 34 38 53 52 54 55 187 38 38 3 6 20 33 30 23 30 33 54 52 2 145 25 56 43 1 26 25 26 29 46 44 60 88 30 0 0 0 0 1 0 63 1 175 0 193 2 187 0 17 0 13 0 187 0 11 0 1 0 5 0 4 43 48 49 19 62 1 53 6 35 34 38 53 52 54 51 50 22 21 20 6 7 63 38 37 3 5 21 32 30 23 29 34 55 52 1 213 25 56 44 1 26 24 26 30 47 44 60 87 30 0 0 0 255 255 0 57 1 172 1 107 2 184 0 38 2 8 0 0 0 7 2 8 0 176 0 0 255 255 0 63 1 175 1 113 2 187 0 38 2 9 0 0 0 7 2 9 0 176 0 0 255 255 0 63 255 112 0 193 0 124 2 7 2 9 0 0 253 193 0 0 255 255 0 63 255 112 1 113 0 124 0 39 2 9 0 0 253 193 0 7 2 9 0 176 253 193 0 0 0 1 0 45 0 66 0 217 1 182 0 6 0 11 0 186 0 2 0 6 0 3 43 48 49 55 53 55 23 7 23 7 45 136 36 118 118 36 221 62 155 30 156 158 28 0 0 0 0 1 0 54 0 66 0 226 1 182 0 6 0 11 0 186 0 2 0 5 0 3 43 48 49 55 39 55 23 21 7 39 172 118 35 137 137 35 252 156 30 155 62 155 28 0 0 0 255 255 0 45 0 66 1 119 1 182 0 38 2 14 0 0 0 7 2 14 0 158 0 0 255 255 0 54 0 66 1 128 1 182 0 38 2 15 0 0 0 7 2 15 0 158 0 0 0 1 0 41 0 219 1 15 1 26 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 41 230 230 1 26 63 0 0 0 255 255 0 41 0 219 1 15 1 26 2 6 2 18 0 0 0 1 0 41 0 223 1 183 1 24 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 41 1 142 254 114 1 24 57 0 0 1 0 41 0 223 2 247 1 24 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 41 2 206 253 50 1 24 57 0 0 1 0 41 0 223 1 201 1 24 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 41 1 160 254 96 1 24 57 0 255 255 0 41 0 223 2 247 1 24 2 6 2 21 0 0 255 255 0 65 1 3 0 184 1 129 2 7 1 253 0 0 1 15 0 0 0 1 0 40 0 143 1 8 1 128 0 19 0 11 0 186 0 10 0 0 0 3 43 48 49 55 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 152 23 40 31 18 18 31 40 23 22 41 31 18 18 31 41 143 17 32 44 27 27 45 31 18 18 31 45 27 27 44 32 17 0 0 0 1 0 12 255 130 1 232 255 185 0 3 0 13 0 187 0 0 0 1 0 1 0 4 43 48 49 5 21 33 53 1 232 254 36 71 55 55 0 0 0 1 0 82 255 80 1 9 2 220 0 14 0 11 0 186 0 6 0 0 0 3 43 48 49 23 46 1 53 52 54 55 23 14 1 21 20 22 23 7 214 62 70 70 62 51 58 57 57 58 51 176 100 222 132 132 221 101 24 96 219 115 115 219 96 24 0 0 0 1 0 38 255 80 0 221 2 220 0 14 0 11 0 186 0 7 0 13 0 3 43 48 49 23 62 1 53 52 38 39 55 30 1 21 20 6 7 39 38 58 57 57 58 51 62 70 70 62 51 152 96 219 115 115 219 96 24 101 221 132 132 222 100 24 0 0 0 1 0 94 255 104 1 17 2 196 0 7 0 23 0 187 0 5 0 1 0 6 0 4 43 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 17 51 21 35 94 179 117 117 179 2 196 47 253 2 47 0 1 0 31 255 104 0 209 2 196 0 7 0 23 0 187 0 0 0 1 0 5 0 4 43 187 0 4 0 1 0 1 0 4 43 48 49 23 17 35 53 51 17 35 53 147 116 178 178 105 2 254 47 252 164 47 0 1 0 34 255 104 1 17 2 196 0 49 0 43 0 187 0 0 0 1 0 1 0 4 43 187 0 28 0 1 0 29 0 4 43 187 0 16 0 1 0 15 0 4 43 186 0 40 0 15 0 16 17 18 57 48 49 5 21 35 34 38 53 52 62 2 53 52 46 2 35 53 50 62 2 53 52 38 53 52 54 59 1 21 35 34 6 21 20 22 21 20 6 7 21 30 1 21 20 6 21 20 22 51 1 17 45 59 58 3 3 3 8 19 34 25 25 34 19 8 9 58 59 45 27 41 27 6 28 32 32 28 6 27 41 105 47 56 77 27 49 46 46 25 15 27 22 14 52 14 21 28 14 51 88 55 77 56 47 42 49 46 84 51 49 51 9 4 9 52 48 51 84 46 49 42 0 1 0 31 255 104 1 13 2 196 0 51 0 43 0 187 0 0 0 1 0 49 0 4 43 187 0 22 0 1 0 19 0 4 43 187 0 33 0 1 0 34 0 4 43 186 0 10 0 34 0 33 17 18 57 48 49 23 50 54 53 52 38 53 52 54 55 53 46 1 53 52 54 53 52 38 43 1 53 51 50 30 2 21 20 6 21 20 22 23 21 34 14 2 21 20 30 2 21 20 14 2 43 1 53 57 41 27 5 27 32 32 27 5 27 41 26 44 30 44 29 14 9 36 50 25 33 20 8 3 3 3 14 29 44 30 44 105 42 49 46 84 51 48 52 9 4 9 51 49 51 84 46 49 42 47 13 30 51 39 55 88 51 29 47 1 52 14 22 27 15 25 46 46 49 27 39 51 30 13 47 0 0 0 0 1 0 10 255 96 1 81 2 198 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 2 220 48 49 1 51 1 35 1 21 60 254 245 60 2 198 252 154 0 1 0 92 255 6 0 150 2 238 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 17 35 92 58 58 2 238 252 24 0 1 0 14 255 96 1 84 2 198 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 2 220 48 49 19 51 1 35 14 59 1 11 59 2 198 252 154 0 0 2 0 92 255 6 0 150 2 238 0 3 0 7 0 11 0 186 0 1 0 5 0 3 43 48 49 19 51 17 35 23 17 35 17 92 58 58 58 58 2 238 254 53 77 254 48 1 208 0 0 0 0 1 0 58 1 164 1 104 2 200 0 14 0 20 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 18 62 89 48 49 19 55 39 55 23 55 51 23 55 23 7 23 7 39 7 98 57 97 15 102 9 49 9 103 15 97 56 39 71 71 1 193 94 40 46 25 108 107 24 46 40 94 29 86 86 0 0 1 0 54 255 176 1 144 2 200 0 11 0 54 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 18 62 89 187 0 2 0 1 0 0 0 4 43 184 0 2 16 184 0 6 208 184 0 6 47 184 0 0 16 184 0 8 208 184 0 8 47 48 49 19 7 53 23 39 51 7 55 21 39 19 35 197 143 143 5 70 5 143 143 5 70 1 235 5 71 5 160 160 5 71 5 253 197 0 0 0 1 0 54 255 176 1 144 2 200 0 21 0 80 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 18 62 89 187 0 15 0 1 0 17 0 4 43 187 0 5 0 1 0 3 0 4 43 184 0 15 16 184 0 0 208 184 0 5 16 184 0 9 208 184 0 9 47 184 0 3 16 184 0 11 208 184 0 11 47 184 0 17 16 184 0 20 208 48 49 55 23 39 55 7 53 23 39 51 7 55 21 39 23 7 55 21 39 23 35 55 7 54 143 5 5 143 143 5 70 5 143 143 5 5 143 143 5 70 5 143 146 7 177 177 7 71 5 160 160 5 71 7 177 177 7 71 5 160 160 5 0 0 2 0 45 255 192 1 196 2 172 0 15 0 71 0 23 0 187 0 47 0 1 0 40 0 4 43 187 0 68 0 1 0 19 0 4 43 48 49 37 62 1 53 52 46 2 39 14 1 21 20 30 2 19 46 1 35 34 6 21 20 30 4 21 20 6 7 30 1 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 4 53 52 54 55 46 1 53 52 62 2 51 50 22 23 1 64 29 31 40 60 71 31 29 32 40 61 71 76 24 54 33 42 37 41 62 71 62 41 47 38 14 16 24 43 59 35 54 88 31 50 25 58 40 40 45 41 61 72 61 41 48 38 15 17 19 39 56 38 48 77 29 193 14 38 33 34 44 33 28 18 16 40 31 33 43 32 29 1 107 20 26 37 26 27 36 30 30 43 61 46 48 59 22 17 39 26 30 50 36 21 38 33 45 24 28 40 29 28 38 30 29 42 61 46 44 64 21 16 40 26 26 47 36 21 34 23 0 0 2 0 41 255 176 1 208 2 144 0 3 0 16 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 16 62 89 48 49 1 51 17 35 3 34 46 2 53 52 62 2 59 1 17 1 124 84 84 87 54 93 67 38 36 65 88 52 44 2 144 253 32 1 50 25 53 82 57 59 81 51 22 254 82 0 0 0 3 0 49 255 245 2 183 2 141 0 19 0 39 0 69 0 51 0 187 0 58 0 1 0 65 0 4 43 187 0 45 0 1 0 52 0 4 43 184 0 45 16 184 0 35 220 185 0 5 0 1 244 184 0 65 16 184 0 25 220 185 0 15 0 1 244 48 49 19 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 23 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 35 34 46 2 49 52 88 118 65 65 117 89 52 52 89 117 65 65 118 88 52 47 44 75 100 57 57 100 75 44 44 75 100 57 57 100 75 44 102 31 51 67 36 42 59 24 35 20 41 26 55 67 65 54 32 48 22 30 28 62 45 38 66 50 28 1 67 76 122 86 46 46 86 122 76 77 123 87 47 47 87 123 77 66 107 77 42 42 77 107 66 65 107 76 41 41 76 107 65 43 70 50 26 33 24 39 20 21 75 59 66 77 25 19 42 24 33 27 51 73 0 0 0 0 4 0 49 255 245 2 183 2 141 0 14 0 23 0 43 0 63 0 77 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 8 62 89 184 0 0 69 88 184 0 39 47 27 185 0 39 0 4 62 89 187 0 29 0 1 0 59 0 4 43 187 0 15 0 1 0 11 0 4 43 184 0 0 16 185 0 21 0 1 244 184 0 39 16 185 0 49 0 1 244 48 49 19 51 50 30 2 21 20 14 2 43 1 21 35 55 50 54 53 52 38 43 1 21 37 52 62 2 51 50 30 2 21 20 14 2 35 34 46 2 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 253 138 31 54 40 23 23 40 54 31 73 65 127 45 49 49 45 62 254 243 52 88 118 65 65 117 89 52 52 89 117 65 65 118 88 52 47 44 75 100 57 57 100 75 44 44 75 100 57 57 100 75 44 1 244 14 28 45 30 33 49 33 16 115 165 37 42 36 32 147 21 76 122 86 46 46 86 122 76 77 123 87 47 47 87 123 77 66 107 77 42 42 77 107 66 65 107 76 41 41 76 107 0 0 0 0 4 0 23 1 63 1 144 2 201 0 19 0 39 0 53 0 61 0 87 0 184 0 52 47 184 0 41 47 184 0 52 16 184 0 20 220 185 0 0 0 1 244 184 0 41 16 184 0 30 220 185 0 10 0 1 244 186 0 50 0 52 0 41 17 18 57 184 0 50 47 185 0 54 0 1 244 186 0 47 0 54 0 50 17 18 57 184 0 52 16 184 0 49 208 184 0 41 16 185 0 59 0 1 244 48 49 19 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 3 51 50 22 21 20 6 7 23 35 39 35 21 35 55 50 53 52 38 43 1 21 211 39 68 51 30 30 51 68 39 39 69 51 30 30 51 69 39 31 55 40 23 23 40 55 31 32 54 39 23 23 39 54 40 76 32 46 20 17 46 46 35 41 41 67 43 18 23 28 1 63 29 52 72 44 44 72 52 29 29 52 72 44 44 72 52 29 37 23 42 59 36 35 59 43 24 24 43 59 35 36 59 42 23 1 8 29 36 18 31 6 83 70 70 102 34 15 18 67 0 0 2 0 3 1 110 2 96 2 164 0 19 0 27 0 93 0 184 0 26 47 184 0 23 47 184 0 0 208 184 0 26 16 184 0 18 208 186 0 14 0 18 0 0 17 18 57 184 0 14 47 185 0 3 0 1 244 184 0 0 16 184 0 6 208 184 0 18 16 184 0 9 208 184 0 6 16 185 0 12 0 1 244 184 0 0 16 185 0 16 0 1 244 184 0 23 16 185 0 25 0 1 244 184 0 20 208 48 49 1 51 31 1 51 63 1 51 17 35 53 55 35 7 35 39 35 23 21 35 3 35 53 33 21 35 17 35 1 54 75 46 27 4 27 45 74 57 6 4 71 45 72 4 7 58 208 99 1 3 100 60 2 164 112 79 79 112 254 202 137 105 194 194 105 137 1 0 54 54 255 0 0 0 0 0 2 0 27 1 98 2 96 2 171 0 41 0 61 0 123 0 184 0 60 47 184 0 42 47 184 0 60 16 184 0 0 208 184 0 0 47 185 0 7 0 1 244 184 0 42 16 184 0 20 208 184 0 20 47 186 0 10 0 0 0 20 17 18 57 185 0 27 0 1 244 186 0 30 0 20 0 0 17 18 57 186 0 56 0 60 0 42 17 18 57 184 0 56 47 185 0 45 0 1 244 184 0 42 16 184 0 48 208 184 0 60 16 184 0 51 208 184 0 48 16 185 0 54 0 1 244 184 0 42 16 185 0 58 0 1 244 48 49 19 34 38 39 55 30 1 51 50 54 53 52 38 47 1 46 1 53 52 54 51 50 22 23 7 46 1 35 34 6 21 20 22 31 1 30 1 21 20 14 2 19 51 31 1 51 63 1 51 17 35 53 55 35 7 35 39 35 23 21 35 140 33 57 23 33 18 41 25 23 26 21 22 47 23 37 58 47 28 50 17 29 16 36 17 23 24 22 20 46 29 34 15 29 40 145 75 46 27 4 27 45 74 57 6 4 71 45 72 4 7 58 1 98 25 23 37 17 21 21 18 20 15 11 23 11 40 35 39 49 22 16 39 12 18 23 15 15 19 9 23 13 39 35 18 32 26 15 1 66 112 79 79 112 254 202 137 105 194 194 105 137 0 0 0 0 2 0 51 255 101 3 28 2 134 0 69 0 84 0 63 0 187 0 59 0 1 0 65 0 4 43 187 0 39 0 1 0 15 0 4 43 187 0 73 0 1 0 22 0 4 43 187 0 30 0 1 0 80 0 4 43 187 0 5 0 1 0 49 0 4 43 186 0 34 0 80 0 30 17 18 57 48 49 55 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 35 14 1 35 34 38 53 52 62 2 51 50 22 23 51 55 51 7 6 51 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 51 50 54 55 23 6 35 34 46 2 37 20 22 51 50 54 63 1 46 1 35 34 14 2 51 67 115 151 84 76 121 85 46 37 58 71 34 41 57 5 2 25 64 33 51 69 27 50 71 44 26 40 14 2 11 55 39 30 84 24 47 39 24 35 70 104 68 67 126 98 59 45 80 109 64 46 82 34 22 85 105 74 128 95 55 1 8 40 30 21 45 26 29 14 30 20 30 47 33 17 203 100 164 116 63 48 87 122 74 66 99 67 34 38 38 29 39 72 69 40 83 67 42 23 25 40 200 117 28 53 77 49 60 103 74 42 55 100 142 88 73 114 78 41 25 20 49 51 46 91 134 87 48 42 28 31 159 23 19 32 50 60 0 2 0 51 255 232 2 220 2 176 0 73 0 87 0 63 0 187 0 62 0 1 0 69 0 4 43 187 0 5 0 1 0 52 0 4 43 187 0 42 0 1 0 15 0 4 43 187 0 74 0 1 0 22 0 4 43 187 0 32 0 1 0 80 0 4 43 186 0 36 0 80 0 32 17 18 57 48 49 19 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 35 14 1 35 34 46 2 53 52 62 2 51 50 22 23 51 55 51 7 6 22 51 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 51 50 54 55 23 14 1 35 34 46 2 37 50 63 1 46 1 35 34 14 2 21 20 22 51 62 105 139 78 67 109 78 43 31 52 66 34 38 48 5 2 23 62 35 22 39 30 17 25 47 68 42 24 39 13 2 12 56 40 14 21 35 19 42 33 22 32 62 92 61 61 114 89 53 41 71 96 55 35 68 28 23 38 78 44 65 114 87 50 1 47 40 49 27 14 26 20 27 43 30 16 34 1 34 90 147 104 57 42 76 107 66 60 93 63 33 41 36 29 40 18 34 48 29 38 78 63 40 23 25 40 178 60 54 24 48 71 46 54 89 64 35 48 90 126 78 68 99 65 32 17 17 46 22 19 39 78 118 1 58 137 23 18 29 46 55 26 41 39 0 0 0 0 2 0 35 0 0 1 211 2 138 0 27 0 31 0 155 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 14 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 14 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 4 62 89 187 0 3 0 1 0 0 0 4 43 187 0 7 0 1 0 4 0 4 43 184 0 7 16 184 0 10 208 184 0 7 16 184 0 14 208 184 0 4 16 184 0 16 208 184 0 3 16 184 0 18 208 184 0 0 16 184 0 20 208 184 0 0 16 184 0 24 208 184 0 3 16 184 0 28 208 184 0 4 16 184 0 29 208 48 49 55 35 53 51 55 35 53 51 55 51 7 51 55 51 7 51 21 35 7 51 21 35 7 35 55 35 7 35 19 55 35 7 115 80 87 18 85 92 23 53 23 133 24 53 24 81 87 18 85 92 25 53 24 132 25 54 218 18 132 18 204 57 148 58 183 183 183 183 58 148 57 204 204 204 1 5 148 148 0 0 0 255 255 0 35 1 172 1 77 3 74 2 7 2 78 0 0 1 184 0 0 255 255 0 87 1 184 0 236 3 62 2 7 2 79 0 0 1 184 0 0 255 255 0 40 1 184 1 64 3 74 2 7 2 80 0 0 1 184 0 0 255 255 0 35 1 172 1 63 3 74 2 7 2 81 0 0 1 184 0 0 255 255 0 42 1 184 1 80 3 62 2 7 2 82 0 0 1 184 0 0 255 255 0 35 1 172 1 67 3 62 2 7 2 83 0 0 1 184 0 0 255 255 0 45 1 172 1 70 3 74 2 7 2 84 0 0 1 184 0 0 255 255 0 50 1 184 1 67 3 62 2 7 2 85 0 0 1 184 0 0 255 255 0 45 1 172 1 64 3 74 2 7 2 86 0 0 1 184 0 0 255 255 0 39 1 172 1 64 3 74 2 7 2 87 0 0 1 184 0 0 255 255 0 65 1 105 0 198 3 139 2 7 2 88 0 0 1 184 0 0 255 255 0 39 1 105 0 172 3 139 2 7 2 89 0 0 1 184 0 0 255 255 0 43 1 176 0 134 2 15 2 7 2 90 0 0 1 184 0 0 255 255 0 33 1 68 0 144 2 15 2 7 2 91 0 0 1 184 0 0 255 255 0 35 255 37 1 77 0 195 2 7 2 78 0 0 255 49 0 0 255 255 0 87 255 49 0 236 0 183 2 7 2 79 0 0 255 49 0 0 255 255 0 40 255 49 1 64 0 195 2 7 2 80 0 0 255 49 0 0 255 255 0 35 255 37 1 63 0 195 2 7 2 81 0 0 255 49 0 0 255 255 0 42 255 49 1 80 0 183 2 7 2 82 0 0 255 49 0 0 255 255 0 35 255 37 1 67 0 183 2 7 2 83 0 0 255 49 0 0 255 255 0 45 255 37 1 70 0 195 2 7 2 84 0 0 255 49 0 0 255 255 0 50 255 49 1 67 0 183 2 7 2 85 0 0 255 49 0 0 255 255 0 45 255 37 1 64 0 195 2 7 2 86 0 0 255 49 0 0 255 255 0 39 255 37 1 64 0 195 2 7 2 87 0 0 255 49 0 0 255 255 0 65 254 226 0 198 1 4 2 7 2 88 0 0 255 49 0 0 255 255 0 39 254 226 0 172 1 4 2 7 2 89 0 0 255 49 0 0 255 255 0 43 255 41 0 134 255 136 2 7 2 90 0 0 255 49 0 0 255 255 0 33 254 189 0 144 255 136 2 7 2 91 0 0 255 49 0 0 0 2 0 35 255 244 1 77 1 146 0 11 0 23 0 40 0 184 0 6 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 12 0 1 244 184 0 6 16 185 0 18 0 1 244 48 49 23 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 184 68 81 81 68 67 82 82 67 38 48 48 38 39 48 48 12 108 100 99 107 107 99 100 108 51 79 78 78 77 77 78 78 79 0 0 0 1 0 87 0 0 0 236 1 134 0 8 0 34 0 184 0 6 47 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 184 0 6 16 185 0 0 0 1 244 48 49 19 35 53 62 1 55 51 17 35 172 85 33 44 20 52 64 1 52 42 6 19 15 254 122 0 1 0 40 0 0 1 64 1 146 0 26 0 44 0 184 0 15 47 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 185 0 23 0 1 244 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 22 21 20 14 2 7 51 21 33 52 45 70 46 24 40 35 25 42 17 38 23 67 40 59 71 22 39 53 31 165 254 244 37 41 65 54 47 22 38 44 33 24 35 34 42 64 62 28 52 53 56 32 55 0 0 0 1 0 35 255 244 1 63 1 146 0 42 0 62 0 184 0 23 47 184 0 0 69 88 184 0 39 47 27 185 0 39 0 4 62 89 186 0 10 0 9 0 3 43 184 0 39 16 185 0 3 0 1 244 184 0 23 16 185 0 16 0 1 244 186 0 31 0 9 0 10 17 18 57 48 49 55 30 1 51 50 54 53 52 38 35 53 50 54 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 30 1 21 20 14 2 35 34 38 39 78 18 50 31 32 46 64 57 51 55 39 32 22 40 17 39 26 61 41 25 45 34 20 38 30 33 51 22 38 51 28 48 74 23 97 27 31 36 34 34 35 41 40 30 28 34 27 20 34 29 35 14 27 39 25 35 47 14 8 49 39 27 43 31 16 43 33 0 2 0 42 0 0 1 80 1 134 0 5 0 16 0 76 0 184 0 14 47 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 187 0 0 0 1 0 10 0 4 43 184 0 14 16 185 0 2 0 1 244 184 0 0 16 184 0 5 208 184 0 10 16 184 0 7 208 184 0 5 16 184 0 12 208 184 0 0 16 184 0 15 208 48 49 55 53 55 35 15 1 23 35 21 35 53 35 53 55 51 21 51 220 4 4 50 61 227 58 58 178 164 72 58 150 70 109 81 98 46 104 104 33 253 240 0 1 0 35 255 244 1 67 1 134 0 34 0 52 0 184 0 14 47 184 0 0 69 88 184 0 31 47 27 185 0 31 0 4 62 89 186 0 21 0 9 0 3 43 184 0 31 16 185 0 3 0 1 244 184 0 14 16 185 0 16 0 1 244 48 49 55 30 1 51 50 54 53 52 38 35 34 6 7 39 55 51 21 35 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 78 19 48 34 35 45 46 36 23 35 16 31 18 213 160 11 14 32 17 26 47 35 20 22 37 51 30 52 73 23 97 27 31 48 38 40 46 18 14 23 188 56 95 6 9 17 34 49 31 30 50 35 20 43 33 0 0 0 2 0 45 255 244 1 70 1 146 0 11 0 39 0 54 0 184 0 36 47 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 187 0 6 0 1 0 20 0 4 43 184 0 28 16 185 0 0 0 1 244 184 0 36 16 185 0 15 0 1 244 48 49 55 50 54 53 52 38 35 34 6 7 30 1 19 46 1 35 34 6 7 54 51 50 22 21 20 14 2 35 34 38 53 52 62 2 51 50 22 23 195 32 39 38 37 22 40 23 5 48 125 14 33 20 44 62 5 43 55 59 63 20 35 47 28 69 82 26 46 62 36 34 44 17 39 45 35 35 44 19 24 58 58 1 32 10 14 71 75 40 69 56 28 48 36 20 104 93 55 82 54 26 18 12 0 1 0 50 0 0 1 67 1 134 0 15 0 38 0 184 0 7 47 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 7 16 185 0 5 0 1 244 184 0 9 208 48 49 51 62 3 55 35 53 33 21 14 3 7 35 131 3 16 28 43 30 201 1 17 36 45 28 13 3 67 51 86 80 77 41 55 36 45 84 85 89 51 0 0 3 0 45 255 244 1 64 1 146 0 12 0 24 0 58 0 74 0 184 0 37 47 184 0 0 69 88 184 0 54 47 27 185 0 54 0 4 62 89 185 0 3 0 1 244 186 0 11 0 54 0 37 17 18 57 184 0 11 47 184 0 13 208 184 0 37 16 185 0 19 0 1 244 184 0 11 16 184 0 28 220 184 0 13 16 184 0 45 220 48 49 55 20 22 51 50 54 53 52 46 2 39 6 55 62 1 53 52 38 35 34 6 21 20 22 7 52 54 55 53 46 1 53 52 62 2 51 50 22 21 20 14 2 7 21 30 1 21 20 14 2 35 34 46 2 105 42 35 32 46 17 28 36 20 54 100 22 20 38 27 26 36 50 125 45 29 26 32 19 33 44 25 53 72 11 18 21 10 34 39 21 37 50 30 31 50 36 20 103 26 42 39 28 18 24 18 14 8 32 71 17 37 20 26 30 31 24 30 34 137 37 55 17 4 17 41 31 23 38 27 15 55 48 17 28 24 18 7 4 17 49 35 24 41 30 17 17 30 40 0 2 0 39 255 244 1 64 1 146 0 11 0 39 0 54 0 184 0 28 47 184 0 0 69 88 184 0 36 47 27 185 0 36 0 4 62 89 187 0 20 0 1 0 0 0 4 43 184 0 28 16 185 0 6 0 1 244 184 0 36 16 185 0 15 0 1 244 48 49 55 50 54 55 46 1 35 34 6 21 20 22 7 30 1 51 50 54 55 6 35 34 38 53 52 62 2 51 50 22 21 20 14 2 35 34 38 39 173 23 40 23 5 48 37 31 40 39 56 14 33 20 44 62 5 43 55 59 63 20 34 48 27 70 82 26 46 62 36 34 45 17 192 19 24 58 58 45 35 35 44 129 10 14 72 75 41 69 56 28 48 36 20 104 93 55 82 54 26 18 12 0 0 1 0 65 255 177 0 198 1 211 0 14 0 11 0 186 0 6 0 0 0 3 43 48 49 23 46 1 53 52 54 55 23 14 1 21 20 22 23 7 153 43 45 45 43 45 38 33 33 38 45 79 61 128 85 84 127 61 22 59 125 66 67 125 60 22 0 0 0 1 0 39 255 177 0 172 1 211 0 14 0 11 0 186 0 7 0 13 0 3 43 48 49 23 62 1 53 52 38 39 55 30 1 21 20 6 7 39 39 38 33 33 38 47 41 45 44 42 47 57 60 125 67 66 125 59 22 61 127 84 85 128 61 22 0 0 0 1 0 43 255 248 0 134 0 87 0 11 0 26 0 184 0 0 69 88 184 0 9 47 27 185 0 9 0 4 62 89 185 0 3 0 1 244 48 49 55 52 54 51 50 22 21 20 6 35 34 38 43 26 20 20 25 25 20 20 26 39 22 26 26 22 21 26 26 0 0 0 0 1 0 33 255 140 0 144 0 87 0 17 0 43 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 4 62 89 185 0 11 0 1 244 48 49 23 62 1 55 6 35 34 38 53 52 54 51 50 22 21 20 6 7 33 29 34 1 3 5 17 28 28 19 25 28 50 45 79 11 39 29 1 21 21 21 25 37 36 45 68 17 0 255 255 0 35 0 254 1 77 2 156 2 7 2 78 0 0 1 10 0 0 255 255 0 87 1 10 0 236 2 144 2 7 2 79 0 0 1 10 0 0 255 255 0 40 1 10 1 64 2 156 2 7 2 80 0 0 1 10 0 0 255 255 0 35 0 254 1 63 2 156 2 7 2 81 0 0 1 10 0 0 255 255 0 42 1 10 1 80 2 144 2 7 2 82 0 0 1 10 0 0 255 255 0 35 0 254 1 67 2 144 2 7 2 83 0 0 1 10 0 0 255 255 0 45 0 254 1 70 2 156 2 7 2 84 0 0 1 10 0 0 255 255 0 50 1 10 1 67 2 144 2 7 2 85 0 0 1 10 0 0 255 255 0 45 0 254 1 64 2 156 2 7 2 86 0 0 1 10 0 0 255 255 0 39 0 254 1 64 2 156 2 7 2 87 0 0 1 10 0 0 255 255 0 65 0 187 0 198 2 221 2 7 2 88 0 0 1 10 0 0 255 255 0 39 0 187 0 172 2 221 2 7 2 89 0 0 1 10 0 0 255 255 0 43 1 2 0 134 1 97 2 7 2 90 0 0 1 10 0 0 255 255 0 33 0 150 0 144 1 97 2 7 2 91 0 0 1 10 0 0 255 255 0 37 1 2 1 42 2 84 2 6 2 109 0 0 255 255 0 33 1 2 1 66 2 84 2 6 2 138 0 0 255 255 0 30 1 2 1 78 2 84 2 6 2 123 0 0 0 2 0 37 1 2 1 42 2 84 0 25 0 34 0 59 0 184 0 0 47 184 0 16 47 187 0 6 0 1 0 29 0 4 43 184 0 16 16 185 0 9 0 1 244 184 0 0 16 184 0 21 208 184 0 0 16 185 0 26 0 1 244 186 0 23 0 0 0 26 17 18 57 48 49 19 34 38 53 52 54 55 46 1 35 34 6 7 39 62 1 51 50 22 29 1 35 39 35 14 1 39 50 55 53 14 1 21 20 22 136 45 54 95 104 1 26 35 26 55 20 23 25 69 39 60 55 50 7 4 20 50 13 39 43 77 61 30 1 2 52 43 53 55 10 32 42 21 13 42 16 27 70 64 196 37 18 27 50 40 85 9 38 28 26 24 0 0 0 2 0 52 1 2 1 85 2 223 0 20 0 32 0 63 0 184 0 6 47 184 0 14 47 184 0 1 47 184 0 6 16 185 0 30 0 1 244 186 0 3 0 30 0 6 17 18 57 184 0 14 16 185 0 24 0 1 244 186 0 18 0 14 0 24 17 18 57 184 0 14 16 184 0 19 208 48 49 19 51 21 7 62 1 51 50 22 21 20 14 2 35 34 38 39 35 7 35 55 30 1 51 50 54 53 52 38 35 34 7 52 62 3 23 49 28 63 67 23 39 50 28 23 48 20 4 6 48 62 20 41 17 36 49 39 42 40 42 2 223 126 58 19 26 88 75 42 65 45 23 21 20 33 75 17 15 64 60 52 59 42 0 0 0 1 0 30 1 2 1 34 2 84 0 27 0 31 0 184 0 8 47 184 0 0 47 184 0 8 16 185 0 15 0 1 244 184 0 0 16 185 0 21 0 1 244 48 49 19 34 38 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 184 67 87 25 43 57 31 35 49 15 30 15 28 22 42 55 54 43 26 34 14 26 17 51 1 2 88 81 40 63 43 23 22 13 41 13 12 65 53 52 66 17 11 41 14 24 0 0 0 2 0 33 1 2 1 66 2 223 0 20 0 33 0 63 0 184 0 0 47 184 0 8 47 184 0 13 47 184 0 8 16 185 0 28 0 1 244 186 0 11 0 28 0 8 17 18 57 184 0 0 16 184 0 16 208 184 0 0 16 185 0 21 0 1 244 186 0 18 0 0 0 21 17 18 57 48 49 19 34 38 53 52 62 2 51 50 22 23 39 53 51 17 35 39 35 14 1 39 50 54 55 53 46 1 35 34 6 21 20 22 170 64 73 23 39 51 27 26 44 20 3 62 50 7 3 20 44 14 20 36 20 20 39 18 35 51 42 1 2 91 84 37 61 42 23 19 17 55 120 254 43 35 17 26 51 22 20 162 17 15 62 50 60 64 0 0 0 2 0 28 1 2 1 54 2 84 0 28 0 37 0 41 0 184 0 10 47 184 0 0 47 187 0 18 0 1 0 29 0 4 43 184 0 0 16 185 0 22 0 1 244 184 0 10 16 185 0 34 0 1 244 48 49 19 34 46 2 53 52 62 2 51 50 30 2 21 20 6 7 35 30 1 51 50 54 55 23 14 1 55 52 46 2 35 34 6 7 186 33 58 42 25 24 41 55 30 37 51 31 13 2 2 217 3 56 45 23 42 17 24 23 57 36 8 18 29 22 36 48 6 1 2 22 44 62 41 39 63 43 24 28 44 52 24 11 13 11 50 55 14 11 39 15 21 196 16 34 26 17 49 44 0 0 1 0 19 1 10 0 220 2 234 0 22 0 47 0 184 0 20 47 184 0 11 47 184 0 7 47 184 0 20 16 185 0 3 0 1 244 184 0 7 16 185 0 10 0 1 244 184 0 13 208 184 0 7 16 184 0 16 208 48 49 19 46 1 35 34 6 29 1 51 21 35 17 35 17 35 53 55 53 52 54 51 50 23 207 7 18 12 22 22 68 68 62 45 45 48 52 33 23 2 177 3 4 33 29 46 49 254 239 1 17 46 3 42 50 66 11 0 0 0 0 3 0 30 0 120 1 76 2 84 0 14 0 66 0 78 0 61 0 184 0 33 47 184 0 64 47 187 0 56 0 1 0 9 0 4 43 187 0 67 0 1 0 46 0 4 43 184 0 64 16 185 0 3 0 1 244 186 0 18 0 9 0 56 17 18 57 184 0 33 16 185 0 73 0 1 244 48 49 55 20 22 51 50 54 53 52 38 43 1 34 38 39 6 7 52 55 53 46 1 53 52 54 55 53 46 1 53 52 62 2 51 50 23 51 21 35 30 1 21 20 14 2 35 34 38 39 14 1 21 20 22 59 1 50 22 21 20 14 2 35 34 38 55 50 54 53 52 38 35 34 6 21 20 22 83 48 43 44 54 33 30 53 8 23 11 31 53 46 13 16 22 14 17 26 20 35 45 26 28 23 110 62 10 13 19 33 45 25 11 25 12 8 11 24 32 62 59 56 23 44 62 39 60 74 136 27 39 39 27 29 38 38 215 25 27 37 23 20 16 1 3 22 35 42 28 4 8 26 19 19 30 9 4 13 44 29 27 43 29 16 9 48 10 33 17 26 42 29 15 4 6 7 16 12 15 16 37 42 23 41 30 18 44 245 39 33 33 37 36 34 33 39 0 0 0 0 1 0 52 1 10 1 65 2 223 0 19 0 29 0 184 0 6 47 184 0 18 47 184 0 11 47 184 0 1 47 184 0 6 16 185 0 15 0 1 244 48 49 19 51 21 7 62 1 51 50 22 29 1 35 53 52 38 35 34 7 21 35 52 62 3 20 56 32 56 46 62 23 38 37 47 62 2 223 126 66 21 32 70 56 204 195 38 44 47 230 0 0 2 0 42 1 10 0 126 2 216 0 11 0 15 0 21 0 184 0 14 47 184 0 13 47 187 0 6 0 1 0 0 0 4 43 48 49 19 34 38 53 52 54 51 50 22 21 20 6 7 51 17 35 84 18 24 24 18 18 24 24 50 62 62 2 138 22 17 17 22 22 17 17 22 62 254 190 0 0 0 0 2 255 230 0 122 0 128 2 216 0 15 0 27 0 31 0 184 0 0 47 184 0 12 47 187 0 22 0 1 0 16 0 4 43 184 0 0 16 185 0 7 0 1 244 48 49 55 34 38 39 55 30 1 51 50 54 53 17 51 17 20 6 19 34 38 53 52 54 51 50 22 21 20 6 23 17 21 11 13 6 12 10 23 16 62 42 12 18 24 24 18 18 24 24 122 3 5 48 2 3 31 29 1 99 254 161 54 61 2 16 22 17 17 22 22 17 17 22 0 0 1 0 52 1 10 1 76 2 223 0 12 0 39 0 184 0 11 47 184 0 8 47 184 0 4 47 184 0 1 47 186 0 2 0 11 0 1 17 18 57 186 0 9 0 11 0 1 17 18 57 48 49 19 51 17 51 55 51 7 23 35 39 7 21 35 52 62 4 131 69 112 126 69 93 56 62 2 223 254 204 161 132 190 148 66 82 0 0 1 0 52 1 2 0 153 2 223 0 14 0 21 0 184 0 11 47 184 0 1 47 184 0 11 16 185 0 4 0 1 244 48 49 19 51 17 20 51 58 1 55 23 14 1 35 34 38 53 52 62 16 3 6 5 9 7 16 13 36 29 2 223 254 111 25 2 46 3 4 44 38 0 0 0 0 1 0 52 1 10 1 255 2 84 0 34 0 45 0 184 0 33 47 184 0 24 47 184 0 15 47 184 0 6 47 184 0 1 208 184 0 6 16 184 0 11 208 184 0 6 16 185 0 29 0 1 244 184 0 20 208 48 49 19 51 23 51 62 1 51 50 23 62 1 51 50 22 29 1 35 53 52 38 35 34 6 7 21 35 53 52 38 35 34 6 7 21 35 52 50 5 4 20 48 33 67 23 23 53 32 54 47 62 24 35 18 37 23 62 24 35 17 37 23 62 2 76 46 23 31 60 24 36 69 57 204 195 38 44 22 25 230 195 38 44 22 25 230 0 1 0 52 1 10 1 65 2 84 0 19 0 33 0 184 0 6 47 184 0 18 47 184 0 11 47 184 0 6 16 184 0 1 208 184 0 6 16 185 0 15 0 1 244 48 49 19 51 23 51 62 1 51 50 22 29 1 35 53 52 38 35 34 7 21 35 52 49 6 4 21 55 32 56 46 62 23 37 38 47 62 2 76 46 23 31 70 56 204 195 38 44 47 230 0 0 2 0 30 1 2 1 78 2 84 0 19 0 31 0 27 0 184 0 10 47 184 0 0 47 185 0 20 0 1 244 184 0 10 16 185 0 26 0 1 244 48 49 19 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 182 31 55 42 24 24 42 55 31 31 55 42 24 24 42 55 31 42 46 46 42 42 47 47 1 2 23 43 63 40 40 63 43 23 23 43 63 40 40 63 43 23 51 65 53 54 64 64 54 53 65 0 0 0 2 0 52 0 129 1 85 2 84 0 20 0 32 0 43 0 184 0 6 47 184 0 14 47 184 0 19 47 184 0 6 16 184 0 1 208 184 0 14 16 185 0 24 0 1 244 184 0 6 16 185 0 30 0 1 244 48 49 19 51 23 51 62 1 51 50 22 21 20 14 2 35 34 38 39 23 21 35 55 30 1 51 50 54 53 52 38 35 34 7 52 49 7 3 20 51 29 63 67 23 39 50 28 22 49 20 4 62 62 20 41 17 36 49 39 42 40 42 2 76 37 17 28 88 75 42 65 45 23 20 17 62 104 212 17 15 64 60 52 59 42 0 0 0 2 0 33 0 129 1 66 2 84 0 19 0 31 0 43 0 184 0 12 47 184 0 4 47 184 0 19 47 184 0 12 16 184 0 16 208 184 0 4 16 185 0 20 0 1 244 184 0 12 16 185 0 26 0 1 244 48 49 37 55 14 1 35 34 38 53 52 62 2 51 50 23 51 55 51 17 35 39 50 55 53 46 1 35 34 6 21 20 22 1 4 3 18 48 26 64 74 24 39 51 27 52 38 4 6 48 62 76 38 38 20 39 18 35 51 42 240 59 18 23 90 79 40 62 44 23 40 32 254 53 181 37 165 17 15 62 54 55 63 0 1 0 52 1 10 0 241 2 84 0 16 0 29 0 184 0 5 47 184 0 15 47 184 0 5 16 184 0 1 208 184 0 5 16 185 0 11 0 1 244 48 49 19 51 23 51 54 51 50 23 7 46 1 35 34 6 7 21 35 52 50 7 3 38 53 24 14 12 6 18 8 21 44 17 63 2 76 57 65 7 55 2 3 31 38 204 0 0 1 0 19 1 2 1 7 2 84 0 45 0 47 0 184 0 19 47 184 0 42 47 185 0 3 0 1 244 186 0 6 0 42 0 19 17 18 57 184 0 19 16 185 0 26 0 1 244 186 0 29 0 19 0 42 17 18 57 48 49 19 30 1 51 50 54 53 52 46 2 39 46 3 53 52 54 51 50 22 23 7 46 1 35 34 6 21 20 30 2 23 30 3 21 20 6 35 34 38 39 49 22 47 27 28 30 12 21 26 14 17 34 27 17 58 53 35 52 20 31 18 33 23 27 27 12 20 26 14 17 35 28 17 64 55 36 65 24 1 87 17 20 26 20 11 17 12 11 5 7 16 22 30 21 37 55 22 14 40 13 15 25 16 11 16 12 9 6 7 15 21 31 22 43 56 26 18 0 0 0 1 0 16 1 2 0 225 2 167 0 21 0 39 0 184 0 18 47 184 0 6 47 185 0 9 0 1 244 184 0 0 208 184 0 6 16 184 0 3 208 184 0 18 16 185 0 12 0 1 244 48 49 19 35 53 63 1 51 21 51 21 35 21 20 51 50 55 23 14 1 35 34 38 53 64 48 50 8 52 88 88 49 20 17 13 14 34 17 53 43 2 26 47 3 91 91 50 167 62 7 46 5 7 63 50 0 0 0 1 0 50 1 2 1 63 2 76 0 19 0 33 0 184 0 0 47 184 0 12 47 184 0 5 47 184 0 0 16 185 0 9 0 1 244 184 0 0 16 184 0 15 208 48 49 19 34 38 61 1 51 21 20 22 51 50 55 53 51 17 35 39 35 14 1 153 56 47 62 23 38 39 45 62 49 7 3 20 55 1 2 70 56 204 195 38 43 46 230 254 190 45 21 32 0 1 0 8 1 10 1 57 2 76 0 9 0 21 0 184 0 1 47 184 0 6 47 184 0 9 47 185 0 3 0 1 244 48 49 19 51 31 1 51 63 1 51 3 35 8 62 58 31 4 31 58 61 116 73 2 76 176 96 96 176 254 190 0 0 1 0 16 1 10 1 215 2 76 0 21 0 53 0 184 0 21 47 184 0 15 47 184 0 6 47 184 0 1 47 184 0 12 47 184 0 21 16 185 0 3 0 1 244 184 0 15 16 185 0 9 0 1 244 184 0 6 16 185 0 18 0 1 244 48 49 19 51 31 1 51 63 1 51 31 1 51 63 1 51 3 35 47 1 35 15 1 35 16 64 44 19 4 22 47 56 50 22 4 21 43 59 87 75 43 21 2 21 43 74 2 76 179 92 92 179 179 92 92 179 254 190 164 91 91 164 0 0 1 0 8 1 10 1 42 2 76 0 17 0 39 0 184 0 16 47 184 0 11 47 184 0 2 47 184 0 7 47 186 0 4 0 2 0 16 17 18 57 186 0 13 0 11 0 7 17 18 57 48 49 19 39 51 31 1 51 63 1 51 7 23 35 47 1 35 15 1 35 116 99 68 41 31 4 27 37 66 98 105 68 43 35 4 33 41 66 1 179 153 66 51 51 66 160 162 70 55 55 70 0 0 0 1 0 8 0 132 1 55 2 76 0 25 0 41 0 184 0 17 47 184 0 8 47 184 0 22 47 185 0 2 0 1 244 186 0 6 0 22 0 8 17 18 57 186 0 13 0 22 0 17 17 18 57 48 49 55 22 51 50 54 63 1 3 51 23 30 1 23 51 62 1 63 1 51 3 14 1 35 34 39 55 37 11 13 26 36 9 7 131 63 63 8 15 8 4 7 14 8 52 61 119 18 58 51 23 18 13 188 5 36 29 20 1 64 169 22 46 25 24 46 23 169 254 172 51 65 6 50 0 1 0 21 1 10 1 16 2 76 0 9 0 35 0 184 0 3 47 184 0 8 47 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 19 55 35 53 51 21 7 51 21 35 21 168 148 226 167 172 251 1 44 238 50 35 236 51 0 0 0 0 3 0 28 1 9 1 54 2 227 0 3 0 32 0 41 0 49 0 184 0 14 47 184 0 4 47 187 0 22 0 1 0 33 0 4 43 186 0 3 0 1 0 3 43 184 0 4 16 185 0 26 0 1 244 184 0 14 16 185 0 38 0 1 244 48 49 19 51 23 35 19 34 46 2 53 52 62 2 51 50 30 2 21 20 6 7 35 30 1 51 50 54 55 23 14 1 55 52 46 2 35 34 6 7 100 65 59 49 11 33 58 42 25 24 41 55 30 37 51 31 13 2 2 217 3 56 45 23 42 17 24 23 57 36 8 18 29 22 36 48 6 2 227 94 254 132 22 44 62 41 39 62 44 24 29 43 53 24 10 13 12 50 55 15 11 40 15 20 195 16 34 26 17 48 45 0 3 0 28 1 9 1 54 2 227 0 3 0 32 0 41 0 49 0 184 0 14 47 184 0 4 47 186 0 0 0 2 0 3 43 187 0 22 0 1 0 33 0 4 43 184 0 4 16 185 0 26 0 1 244 184 0 14 16 185 0 38 0 1 244 48 49 19 51 7 35 19 34 46 2 53 52 62 2 51 50 30 2 21 20 6 7 35 30 1 51 50 54 55 23 14 1 55 52 46 2 35 34 6 7 192 65 76 49 54 33 58 42 25 24 41 55 30 37 51 31 13 2 2 217 3 56 45 23 42 17 24 23 57 36 8 18 29 22 36 48 6 2 227 94 254 132 22 44 62 41 39 62 44 24 29 43 53 24 10 13 12 50 55 15 11 40 15 20 195 16 34 26 17 48 45 0 2 0 25 1 2 1 51 2 84 0 26 0 33 0 41 0 184 0 19 47 184 0 0 47 187 0 8 0 1 0 31 0 4 43 184 0 19 16 185 0 12 0 1 244 184 0 0 16 185 0 27 0 1 244 48 49 19 34 46 2 53 52 54 55 51 46 1 35 34 6 7 39 62 1 51 50 22 21 20 14 2 39 50 54 55 35 20 22 160 38 52 32 13 2 2 217 2 47 45 24 39 18 23 23 53 32 69 82 23 40 53 32 37 47 3 166 36 1 2 29 44 54 25 11 13 11 46 56 15 11 40 14 21 88 81 39 62 44 24 50 48 49 41 56 0 0 0 0 2 0 33 1 2 1 66 2 84 0 12 0 33 0 43 0 184 0 18 47 184 0 31 47 185 0 3 0 1 244 184 0 18 16 185 0 10 0 1 244 184 0 18 16 184 0 23 208 184 0 31 16 184 0 26 208 48 49 19 20 22 51 50 54 55 53 46 1 35 34 6 7 52 62 2 51 50 22 23 51 55 51 17 35 39 35 14 1 35 34 38 97 42 45 20 36 20 20 39 18 35 51 64 24 39 51 27 26 44 20 4 6 48 51 5 4 20 44 28 64 73 1 177 60 62 20 20 162 17 15 62 52 38 61 43 23 20 19 31 254 190 35 17 26 91 0 0 0 2 0 34 0 121 1 67 2 84 0 31 0 44 0 49 0 184 0 19 47 184 0 28 47 187 0 11 0 1 0 32 0 4 43 184 0 28 16 185 0 3 0 1 244 184 0 19 16 184 0 23 208 184 0 19 16 185 0 39 0 1 244 48 49 55 30 1 51 50 54 61 1 55 14 1 35 34 38 53 52 62 2 51 50 23 51 55 51 17 20 6 35 34 38 39 55 50 54 55 53 46 1 35 34 6 21 20 22 79 23 49 23 43 45 2 22 44 26 64 74 24 39 51 27 51 39 3 6 49 78 72 29 62 26 129 20 36 21 20 40 18 35 51 42 200 14 14 49 38 13 44 19 23 87 72 37 61 42 23 39 31 254 180 63 72 19 17 169 20 21 145 17 15 60 49 50 59 0 0 0 1 0 52 1 10 0 114 2 223 0 3 0 11 0 184 0 1 47 184 0 2 47 48 49 19 51 17 35 52 62 62 2 223 254 43 0 2 0 41 1 173 1 35 2 173 0 19 0 31 0 23 0 187 0 20 0 1 0 0 0 4 43 187 0 10 0 1 0 26 0 4 43 48 49 19 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 166 25 45 35 20 20 35 45 25 25 45 35 20 20 35 45 25 33 42 42 33 33 42 42 1 173 18 33 47 29 30 47 34 18 18 34 47 30 29 47 33 18 46 46 35 37 46 46 37 35 46 0 0 0 2 0 26 0 103 1 215 2 45 0 33 0 53 0 40 0 184 0 0 69 88 184 0 12 47 27 185 0 12 0 10 62 89 187 0 39 0 1 0 30 0 4 43 184 0 12 16 185 0 49 0 1 244 48 49 63 1 46 1 53 52 54 55 39 55 23 54 51 50 22 23 55 23 7 30 1 21 20 6 7 23 7 39 14 1 35 34 39 7 55 20 30 2 51 50 62 2 53 52 46 2 35 34 14 2 26 64 17 19 19 17 64 44 68 48 63 29 58 23 68 44 65 17 20 20 17 65 44 68 23 58 29 64 47 68 60 19 32 44 24 24 43 32 19 19 32 43 24 24 44 32 19 148 65 23 58 35 35 59 23 66 45 70 37 19 18 70 45 66 23 59 35 35 58 23 65 45 69 19 19 38 69 226 30 49 36 19 19 36 49 30 30 49 36 19 19 36 49 0 0 1 0 52 255 146 1 181 2 236 0 45 0 93 0 184 0 0 69 88 184 0 39 47 27 185 0 39 0 14 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 4 62 89 184 0 39 16 185 0 3 0 1 244 186 0 6 0 19 0 39 17 18 57 184 0 19 16 184 0 16 208 184 0 19 16 185 0 26 0 1 244 186 0 29 0 39 0 19 17 18 57 184 0 39 16 184 0 42 208 48 49 1 46 1 35 34 6 21 20 30 4 21 20 6 7 21 35 53 46 1 39 55 30 1 51 50 54 53 52 46 4 53 52 54 55 53 51 21 30 1 23 1 124 28 53 41 46 54 41 62 73 62 41 83 72 60 48 90 32 38 32 77 46 56 55 41 62 73 62 41 79 66 60 48 67 27 2 12 27 30 52 44 36 46 35 33 47 69 54 72 92 10 101 99 5 43 29 57 28 39 56 47 40 53 39 34 44 63 49 67 89 11 100 99 5 42 29 0 0 1 0 53 0 0 1 197 2 138 0 44 0 89 0 184 0 0 69 88 184 0 21 47 27 185 0 21 0 14 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 185 0 0 0 1 244 186 0 36 0 21 0 2 17 18 57 184 0 36 47 184 0 10 208 184 0 36 16 185 0 35 0 1 244 184 0 11 208 184 0 11 47 184 0 21 16 185 0 28 0 1 244 48 49 37 21 33 53 62 1 53 52 38 39 35 53 55 51 46 1 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 23 51 21 35 30 1 21 20 6 7 21 1 197 254 113 51 55 4 3 100 67 18 10 17 27 49 68 42 54 75 26 48 19 48 34 54 57 15 9 159 146 2 3 32 30 71 71 50 28 95 57 14 27 14 52 4 32 61 32 42 68 48 26 43 32 47 23 30 65 52 32 59 32 56 14 27 15 53 70 31 4 0 0 0 0 1 0 23 0 0 1 218 2 126 0 29 0 132 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 14 62 89 184 0 0 69 88 184 0 9 47 27 185 0 9 0 14 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 186 0 4 0 29 0 20 17 18 57 186 0 25 0 29 0 20 17 18 57 184 0 25 47 185 0 12 0 1 244 184 0 25 16 184 0 13 208 184 0 25 16 184 0 24 208 184 0 24 47 184 0 16 208 184 0 24 16 185 0 21 0 1 244 184 0 17 208 184 0 25 16 185 0 27 0 1 244 48 49 19 23 30 1 23 51 62 1 63 1 51 3 51 21 35 21 51 21 35 21 35 53 35 53 51 53 35 53 51 3 109 78 15 29 16 4 17 29 15 78 84 164 142 163 163 163 82 162 162 162 141 163 2 126 171 33 67 35 35 67 33 171 254 192 47 65 48 158 158 48 65 47 1 64 0 1 0 23 255 244 1 235 2 138 0 53 0 109 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 14 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 187 0 45 0 1 0 46 0 4 43 184 0 46 16 184 0 9 208 184 0 45 16 184 0 10 208 184 0 45 16 184 0 37 220 184 0 18 208 184 0 37 16 185 0 36 0 1 244 184 0 19 208 184 0 25 16 185 0 32 0 1 244 184 0 3 16 185 0 50 0 1 244 48 49 37 14 1 35 34 46 2 39 35 53 55 38 52 53 60 1 55 35 53 55 62 3 51 50 22 23 7 46 1 35 34 6 7 51 21 33 6 20 21 28 1 23 51 21 35 30 1 51 50 54 55 1 235 33 84 55 45 77 60 41 9 64 59 1 1 59 64 9 42 63 83 49 45 78 26 49 21 50 32 66 81 12 254 254 254 1 1 218 213 13 77 62 37 55 26 81 44 49 33 64 91 59 43 4 9 18 9 8 16 8 44 5 59 93 65 34 45 33 47 26 33 98 87 49 7 14 8 10 19 9 48 85 96 36 35 0 0 0 2 0 61 255 223 1 198 2 141 0 6 0 37 0 55 0 187 0 34 0 1 0 10 0 4 43 187 0 26 0 1 0 33 0 4 43 184 0 33 16 184 0 0 208 184 0 34 16 184 0 6 208 184 0 10 16 184 0 13 208 184 0 26 16 184 0 23 208 48 49 1 14 1 21 20 22 31 1 14 1 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 39 17 62 1 55 1 6 55 64 62 57 192 29 72 39 52 45 74 53 29 31 54 74 42 52 44 64 23 40 20 45 26 32 52 20 1 221 13 88 66 67 88 13 9 26 34 3 103 104 5 37 60 84 53 52 82 60 37 6 106 103 2 34 22 52 18 22 2 254 168 2 27 18 0 0 0 1 0 18 255 159 1 206 2 156 0 39 0 66 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 16 62 89 187 0 24 0 1 0 18 0 4 43 187 0 10 0 1 0 11 0 4 43 184 0 36 16 185 0 3 0 1 244 184 0 11 16 184 0 28 208 184 0 10 16 184 0 30 208 48 49 1 46 1 35 34 14 2 15 1 51 21 35 7 14 3 35 34 38 39 55 22 51 50 54 63 1 35 53 55 51 55 62 1 51 50 22 23 1 188 11 26 19 23 32 21 13 3 7 126 133 26 5 22 38 58 42 23 38 12 15 23 27 47 41 8 24 87 69 25 6 11 77 80 22 42 14 2 75 5 9 22 36 47 25 63 63 237 46 75 54 30 8 7 62 10 79 77 219 59 4 56 100 104 11 7 0 0 0 0 3 0 61 255 146 1 222 2 236 0 9 0 16 0 55 0 159 0 184 0 0 69 88 184 0 34 47 27 185 0 34 0 14 62 89 184 0 0 69 88 184 0 37 47 27 185 0 37 0 14 62 89 184 0 0 69 88 184 0 40 47 27 185 0 40 0 14 62 89 184 0 0 69 88 184 0 42 47 27 185 0 42 0 14 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 185 0 2 0 1 244 184 0 40 16 185 0 6 0 1 244 186 0 10 0 20 0 40 17 18 57 186 0 16 0 20 0 40 17 18 57 186 0 51 0 20 0 40 17 18 57 184 0 2 16 184 0 52 208 48 49 55 22 23 19 46 1 35 34 6 15 1 14 1 21 20 22 23 5 14 1 15 1 35 55 38 39 7 35 55 46 1 53 52 54 63 1 51 7 54 50 51 50 23 55 51 7 30 1 23 7 38 39 3 62 1 55 230 25 31 62 8 14 8 8 13 7 39 51 54 26 25 1 25 32 79 51 12 38 12 28 29 13 38 16 58 67 107 92 12 38 12 5 12 5 20 16 12 38 14 24 41 16 49 19 21 60 32 51 23 78 18 4 2 12 2 2 1 1 13 26 128 94 68 105 35 32 41 49 3 98 99 3 11 113 131 38 151 108 134 169 22 105 99 1 4 102 114 11 35 20 46 24 15 254 6 4 35 31 0 0 1 0 53 0 0 1 197 2 138 0 52 0 113 0 184 0 0 69 88 184 0 26 47 27 185 0 26 0 14 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 185 0 0 0 1 244 186 0 41 0 26 0 2 17 18 57 184 0 41 47 185 0 45 0 1 244 185 0 46 0 1 244 184 0 8 208 184 0 45 16 184 0 9 208 184 0 41 16 184 0 15 208 184 0 41 16 185 0 40 0 1 244 184 0 16 208 184 0 26 16 185 0 33 0 1 244 48 49 37 21 33 53 62 1 61 1 35 53 55 51 46 1 39 35 53 55 51 46 1 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 23 51 21 35 22 23 51 21 35 21 20 6 7 21 1 197 254 113 51 55 107 69 32 4 8 5 84 61 9 5 7 27 49 68 42 54 75 26 48 19 48 34 54 57 5 5 173 160 10 4 146 141 32 30 71 71 50 28 95 57 5 44 5 15 29 15 44 5 19 36 19 42 68 48 26 43 32 47 23 30 65 52 19 35 18 49 31 28 49 6 53 70 31 4 0 0 5 0 11 0 0 1 227 2 126 0 5 0 9 0 15 0 19 0 47 0 215 0 184 0 0 69 88 184 0 39 47 27 185 0 39 0 14 62 89 184 0 0 69 88 184 0 43 47 27 185 0 43 0 14 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 187 0 5 0 1 0 6 0 4 43 187 0 42 0 1 0 1 0 4 43 184 0 25 16 185 0 8 0 1 244 184 0 5 16 184 0 10 208 184 0 1 16 184 0 12 208 184 0 42 16 184 0 16 208 184 0 39 16 185 0 18 0 1 244 184 0 1 16 184 0 20 208 184 0 5 16 184 0 21 208 184 0 6 16 184 0 23 208 184 0 6 16 184 0 27 208 184 0 6 16 184 0 31 208 184 0 5 16 184 0 33 208 184 0 33 47 184 0 1 16 184 0 35 208 184 0 42 16 184 0 37 208 184 0 37 47 184 0 42 16 184 0 45 208 48 49 1 53 35 31 1 51 23 35 23 51 47 1 53 35 23 21 39 51 39 35 5 21 51 21 35 21 35 39 35 21 35 53 35 53 55 53 35 53 55 53 51 23 51 53 51 21 51 21 1 90 72 16 4 54 3 44 51 4 134 21 57 1 4 47 55 4 1 20 72 72 84 84 92 65 75 75 75 75 84 89 87 65 72 1 61 26 46 14 43 166 209 59 1 22 38 102 178 220 60 43 240 240 240 240 38 5 60 37 5 253 253 253 253 42 0 0 3 0 10 0 0 1 228 2 126 0 5 0 11 0 33 0 109 0 184 0 0 69 88 184 0 26 47 27 185 0 26 0 14 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 4 62 89 187 0 19 0 1 0 5 0 4 43 184 0 26 16 185 0 6 0 1 244 186 0 4 0 5 0 6 17 18 57 184 0 4 47 185 0 7 0 1 244 184 0 4 16 184 0 13 208 184 0 4 16 184 0 22 208 184 0 7 16 184 0 25 208 184 0 7 16 184 0 32 208 48 49 19 50 54 55 35 21 17 21 51 46 1 35 5 35 14 3 43 1 21 35 17 35 53 55 53 51 50 30 2 23 51 194 66 76 7 181 181 8 75 66 1 34 62 5 36 58 76 43 42 79 73 73 121 44 76 57 36 5 62 1 45 59 57 116 1 24 108 59 49 164 44 65 43 21 244 1 161 51 5 165 18 39 63 45 0 0 3 0 68 0 0 1 228 2 153 0 3 0 18 0 47 0 153 0 184 0 0 69 88 184 0 45 47 27 185 0 45 0 16 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 4 62 89 185 0 0 0 1 244 184 0 45 16 184 0 44 220 185 0 41 0 1 244 184 0 36 220 184 0 0 16 184 0 28 220 186 0 39 0 36 0 28 17 18 57 184 0 39 16 185 0 4 0 1 244 184 0 36 16 185 0 7 0 1 244 184 0 28 16 185 0 15 0 1 244 186 0 24 0 28 0 36 17 18 57 184 0 24 16 185 0 18 0 1 244 184 0 41 16 184 0 21 208 184 0 28 16 184 0 23 208 184 0 44 16 184 0 47 208 48 49 55 33 21 33 1 46 1 35 34 14 2 21 20 22 51 50 54 55 19 21 7 17 35 39 35 14 1 35 34 38 53 52 62 2 51 50 22 23 39 53 35 53 51 53 51 21 79 1 103 254 153 1 1 25 40 28 21 37 28 16 51 47 26 47 24 148 78 58 6 3 22 57 35 72 85 27 46 58 32 37 47 25 4 146 146 70 49 49 1 121 22 19 18 32 43 25 62 69 25 28 1 120 44 5 254 83 43 23 30 97 92 41 66 47 25 24 22 83 34 49 67 67 0 0 0 0 4 0 10 0 0 1 228 2 126 0 8 0 13 0 19 0 50 0 155 0 184 0 0 69 88 184 0 45 47 27 185 0 45 0 14 62 89 184 0 0 69 88 184 0 36 47 27 185 0 36 0 4 62 89 187 0 34 0 1 0 13 0 4 43 184 0 45 16 185 0 14 0 1 244 186 0 8 0 13 0 14 17 18 57 184 0 8 47 184 0 7 220 184 0 8 16 184 0 12 220 184 0 7 16 184 0 15 220 184 0 7 16 184 0 21 208 184 0 8 16 184 0 27 208 184 0 12 16 184 0 30 208 184 0 12 16 184 0 37 208 184 0 8 16 184 0 40 208 184 0 7 16 184 0 41 208 184 0 15 16 184 0 44 208 184 0 15 16 184 0 49 208 48 49 1 62 1 53 52 38 39 35 21 23 50 55 35 21 17 21 51 46 1 35 5 35 30 1 21 28 1 7 51 21 35 14 1 43 1 21 35 17 35 53 55 53 35 53 55 53 51 50 22 23 51 1 87 1 1 1 1 181 32 107 32 171 169 17 69 51 1 34 63 1 1 1 62 70 20 113 77 42 79 73 73 73 73 121 76 112 21 71 1 162 6 13 7 9 16 8 59 117 76 76 1 24 63 34 29 104 8 16 9 7 13 6 41 68 65 244 1 121 36 5 59 37 4 120 55 65 0 0 0 0 1 0 47 255 146 1 204 2 236 0 41 0 97 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 14 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 186 0 0 0 17 0 7 17 18 57 184 0 0 47 184 0 7 16 184 0 4 208 184 0 17 16 184 0 20 208 184 0 17 16 185 0 27 0 1 244 184 0 7 16 185 0 35 0 1 244 184 0 0 16 185 0 40 0 1 244 48 49 1 17 14 1 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 35 34 14 2 21 20 22 51 50 54 55 53 35 53 1 204 29 71 41 60 47 78 56 31 30 55 78 49 60 42 70 26 49 23 51 34 41 63 43 22 85 77 29 49 14 101 1 75 254 242 30 36 5 100 100 6 50 84 116 72 70 114 84 53 8 101 99 4 44 31 46 27 33 37 68 98 60 123 142 22 15 169 69 0 0 0 2 0 61 255 146 1 222 2 233 0 6 0 37 0 89 0 184 0 0 69 88 184 0 23 47 27 185 0 23 0 14 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 184 0 23 16 185 0 0 0 1 244 184 0 13 16 185 0 6 0 1 244 184 0 13 16 184 0 10 208 184 0 23 16 184 0 26 208 184 0 0 16 184 0 33 208 184 0 6 16 184 0 34 208 48 49 1 14 1 21 20 22 23 55 14 1 7 21 35 53 46 3 53 52 62 2 55 53 51 21 30 1 23 7 46 1 39 17 62 1 55 1 23 65 68 69 64 199 29 72 46 52 49 80 57 32 31 57 80 50 52 42 71 25 49 18 43 28 29 48 22 2 67 16 136 106 112 139 13 24 38 47 6 100 99 5 49 84 118 73 70 115 84 52 8 98 95 3 44 31 47 24 31 3 253 241 5 35 29 0 1 0 72 0 0 1 195 2 126 0 29 0 95 0 184 0 0 69 88 184 0 28 47 27 185 0 28 0 14 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 187 0 16 0 1 0 13 0 4 43 186 0 19 0 23 0 3 43 184 0 28 16 185 0 26 0 1 244 184 0 1 208 184 0 23 16 184 0 4 208 184 0 19 16 184 0 7 208 186 0 10 0 16 0 13 17 18 57 48 49 1 35 30 1 23 51 21 35 14 1 7 19 35 39 35 53 51 50 54 55 35 53 55 51 46 1 43 1 53 33 1 195 142 29 38 7 68 66 5 82 65 188 94 178 77 71 72 83 5 231 69 160 11 81 66 71 1 123 2 77 15 53 35 49 75 87 15 254 252 252 67 58 60 44 5 46 38 68 0 0 1 0 23 255 242 1 209 2 126 0 35 0 97 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 14 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 4 62 89 185 0 0 0 1 244 186 0 17 0 16 0 25 17 18 57 184 0 17 47 184 0 20 220 184 0 21 220 184 0 24 220 184 0 27 208 184 0 21 16 184 0 30 208 184 0 20 16 184 0 31 208 184 0 17 16 184 0 34 208 48 49 55 62 3 53 52 38 39 55 22 21 20 14 2 39 17 7 53 55 53 7 53 55 53 51 21 55 21 7 21 55 21 7 21 199 33 69 56 36 1 4 70 7 53 94 128 75 92 92 92 92 84 164 164 164 164 66 1 22 41 61 39 8 21 14 18 32 25 63 94 62 29 2 1 17 48 53 48 72 48 52 49 199 158 86 53 86 72 86 52 87 236 0 0 0 1 255 89 255 244 0 251 2 156 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 1 220 48 49 7 1 51 1 167 1 106 56 254 150 12 2 168 253 88 0 0 0 255 255 255 89 255 244 0 251 2 156 2 6 2 159 0 0 255 255 255 89 255 244 0 251 2 156 2 6 2 159 0 0 255 255 0 35 255 244 3 22 2 156 0 39 2 78 0 0 1 10 0 39 2 159 1 113 0 0 0 7 2 78 1 201 0 0 0 0 0 7 0 35 255 244 4 136 2 156 0 3 0 15 0 27 0 39 0 51 0 63 0 75 0 152 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 16 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 184 0 0 69 88 184 0 52 47 27 185 0 52 0 4 62 89 187 0 16 0 1 0 4 0 4 43 187 0 34 0 1 0 46 0 4 43 184 0 10 16 185 0 22 0 1 244 184 0 28 16 185 0 40 0 1 244 184 0 34 16 184 0 58 208 184 0 40 16 184 0 64 208 184 0 46 16 184 0 70 208 48 49 23 1 51 1 3 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 1 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 5 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 200 1 106 56 254 150 72 68 81 81 68 67 82 82 67 38 48 48 38 39 48 48 1 237 67 82 82 67 68 81 81 68 39 48 48 39 38 48 48 1 154 67 82 82 67 68 82 82 68 39 48 48 39 38 48 48 12 2 168 253 88 1 10 108 100 100 106 106 100 100 108 51 79 78 79 76 76 79 78 79 254 195 108 100 99 107 107 99 100 108 51 79 78 78 77 77 78 78 79 51 108 100 99 107 107 99 100 108 51 79 78 78 77 77 78 78 79 0 255 255 0 64 255 244 2 237 2 156 0 39 2 79 255 233 1 10 0 39 2 159 1 91 0 0 0 7 2 82 1 157 0 0 0 0 255 255 0 64 255 244 2 249 2 156 0 39 2 79 255 233 1 10 0 39 2 159 1 70 0 0 0 7 2 80 1 185 0 0 0 0 255 255 0 35 255 244 2 252 2 156 0 39 2 81 0 0 1 10 0 39 2 159 1 128 0 0 0 7 2 82 1 172 0 0 0 0 255 255 0 64 255 244 2 244 2 156 0 39 2 79 255 233 1 10 0 39 2 159 1 64 0 0 0 7 2 81 1 181 0 0 0 0 255 255 0 41 255 244 3 4 2 156 0 39 2 80 0 1 1 10 0 39 2 159 1 114 0 0 0 7 2 81 1 197 0 0 0 0 255 255 0 64 255 244 2 245 2 156 0 39 2 79 255 233 1 10 0 39 2 159 1 74 0 0 0 7 2 86 1 181 0 0 0 0 255 255 0 35 255 244 3 5 2 156 0 39 2 81 0 0 1 10 0 39 2 159 1 111 0 0 0 7 2 86 1 197 0 0 0 0 255 255 0 35 255 244 3 5 2 156 0 39 2 83 0 0 1 10 0 39 2 159 1 111 0 0 0 7 2 86 1 197 0 0 0 0 255 255 0 31 255 244 2 241 2 156 0 39 2 85 255 237 1 10 0 39 2 159 1 61 0 0 0 7 2 86 1 177 0 0 0 0 0 1 0 34 0 104 1 207 2 44 0 11 0 29 0 187 0 3 0 1 0 0 0 4 43 184 0 3 16 184 0 6 208 184 0 0 16 184 0 8 208 48 49 19 35 53 51 53 51 21 51 21 35 21 35 216 182 182 65 182 182 65 1 43 62 195 195 62 195 0 0 0 0 1 0 34 1 43 1 207 1 105 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 34 1 173 254 83 1 105 62 0 0 1 0 50 0 126 1 191 2 21 0 11 0 11 0 186 0 5 0 9 0 3 43 48 49 63 1 39 55 23 55 23 7 23 7 39 7 50 155 155 44 155 154 44 155 155 44 154 155 171 159 158 45 159 159 45 158 159 45 160 160 0 0 0 0 3 0 34 0 96 1 207 2 51 0 11 0 23 0 27 0 33 0 187 0 15 0 1 0 21 0 4 43 187 0 6 0 1 0 0 0 4 43 187 0 25 0 1 0 26 0 4 43 48 49 19 34 38 53 52 54 51 50 22 21 20 6 3 52 54 51 50 22 21 20 6 35 34 38 39 33 21 33 249 23 32 32 23 23 31 31 78 32 23 23 31 31 23 23 32 160 1 173 254 83 1 200 30 24 23 30 30 23 24 30 254 206 23 30 30 23 24 30 30 235 62 0 0 255 255 0 188 1 7 1 51 1 133 0 7 1 253 0 123 1 19 0 0 255 255 0 34 0 193 1 207 1 212 2 38 2 174 0 107 0 6 2 174 0 150 0 0 0 1 0 34 0 131 1 207 2 21 0 9 0 21 0 186 0 1 0 8 0 3 43 186 0 5 0 8 0 1 17 18 57 48 49 19 37 21 15 1 21 31 1 21 37 34 1 173 211 134 134 211 254 83 1 109 168 71 78 50 4 50 78 71 168 0 0 0 0 1 0 34 0 131 1 207 2 21 0 9 0 21 0 186 0 8 0 1 0 3 43 186 0 5 0 1 0 8 17 18 57 48 49 1 5 53 63 1 53 47 1 53 5 1 207 254 83 211 134 134 211 1 173 1 43 168 71 78 50 4 50 78 71 168 0 0 0 2 0 34 0 0 1 207 2 21 0 3 0 13 0 26 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 185 0 0 0 1 244 48 49 55 33 21 33 17 37 21 15 1 21 31 1 21 37 34 1 173 254 83 1 173 210 135 135 210 254 83 62 62 1 124 153 71 73 44 4 44 73 71 153 0 0 0 2 0 34 0 0 1 207 2 21 0 3 0 13 0 26 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 185 0 0 0 1 244 48 49 55 33 21 33 1 5 53 63 1 53 47 1 53 5 34 1 173 254 83 1 173 254 83 210 135 135 210 1 173 62 62 1 50 153 71 73 44 4 44 73 71 153 0 2 0 34 0 0 1 207 2 44 0 11 0 15 0 56 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 187 0 3 0 1 0 0 0 4 43 184 0 3 16 184 0 6 208 184 0 0 16 184 0 8 208 184 0 14 16 185 0 12 0 1 244 48 49 19 35 53 51 53 51 21 51 21 35 21 35 7 33 21 33 216 182 182 65 182 182 65 182 1 173 254 83 1 48 62 190 190 62 177 65 62 0 0 0 0 1 0 60 1 28 1 181 2 158 0 9 0 26 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 185 0 5 0 1 244 48 49 19 51 19 35 47 1 35 15 1 35 212 73 152 72 65 49 4 50 65 72 2 158 254 126 176 133 133 176 0 1 0 34 0 65 1 207 2 83 0 19 0 55 0 187 0 3 0 1 0 17 0 4 43 187 0 7 0 1 0 13 0 4 43 184 0 17 16 184 0 0 208 184 0 13 16 184 0 4 208 184 0 7 16 184 0 10 208 184 0 3 16 184 0 14 208 48 49 55 35 53 51 55 35 53 33 55 51 7 51 21 35 7 51 21 33 7 35 137 103 139 91 230 1 10 76 60 76 103 139 91 230 254 246 76 60 192 62 152 62 127 127 62 152 62 127 0 0 0 0 1 0 36 1 1 1 205 1 147 0 23 0 39 0 187 0 8 0 1 0 15 0 4 43 184 0 15 16 184 0 20 220 185 0 3 0 1 244 184 0 11 208 184 0 15 16 184 0 23 208 48 49 19 62 1 51 50 30 2 51 50 54 55 23 14 1 35 34 46 2 35 34 6 7 36 27 66 32 30 47 41 38 21 22 38 17 46 27 66 32 30 47 41 38 21 22 38 17 1 57 48 42 26 32 26 29 32 34 48 41 26 32 26 29 32 255 255 0 36 0 151 1 205 1 254 2 38 2 186 0 107 0 6 2 186 0 150 0 0 0 1 0 34 0 104 1 207 1 105 0 5 0 13 0 187 0 1 0 1 0 4 0 4 43 48 49 19 33 17 35 53 33 34 1 173 66 254 149 1 105 254 255 195 0 1 0 24 255 244 2 18 1 230 0 23 0 86 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 8 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 4 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 184 0 4 16 185 0 20 0 1 244 184 0 0 208 184 0 20 16 184 0 6 208 184 0 16 16 185 0 10 0 1 244 48 49 19 35 53 55 33 21 35 17 20 22 51 50 54 55 23 6 35 34 38 53 17 35 17 35 110 86 69 1 181 74 17 17 5 11 8 11 23 32 54 43 182 81 1 162 63 5 68 254 201 24 27 3 2 63 10 67 58 1 49 254 94 0 0 0 0 3 0 40 0 147 2 230 1 255 0 39 0 53 0 65 0 68 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 8 62 89 187 0 43 0 1 0 31 0 4 43 187 0 21 0 1 0 51 0 4 43 184 0 43 16 184 0 54 208 184 0 54 47 185 0 0 0 1 244 184 0 10 16 185 0 60 0 1 244 48 49 55 34 46 2 53 52 62 2 51 50 30 2 23 51 62 3 51 50 30 2 21 20 14 2 35 34 38 39 35 14 3 55 30 1 51 50 62 2 53 52 38 35 34 6 7 50 54 55 46 1 35 34 6 21 20 22 191 31 55 41 24 25 43 60 35 30 51 42 33 14 4 18 41 48 55 32 37 63 45 26 26 46 63 37 64 93 45 4 13 34 43 52 185 42 75 47 25 40 27 14 60 54 43 76 245 42 66 26 32 66 38 41 52 55 166 25 43 57 33 40 63 44 24 19 31 37 18 24 43 34 20 26 47 64 38 43 70 49 27 65 57 15 36 31 21 174 56 59 17 30 39 22 51 63 55 163 54 38 43 52 47 42 42 56 0 0 0 1 0 82 255 56 1 212 1 230 0 23 0 36 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 185 0 5 0 1 244 186 0 20 0 17 0 5 17 18 57 48 49 19 51 17 20 22 51 50 54 55 17 51 17 35 39 35 14 1 35 34 38 39 23 21 35 82 82 44 48 38 57 35 82 68 7 2 29 69 42 29 46 17 5 82 1 230 254 215 69 61 39 43 1 89 254 26 76 39 45 17 26 90 145 0 2 0 40 255 244 1 231 2 160 0 15 0 49 0 50 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 4 62 89 187 0 19 0 1 0 46 0 4 43 187 0 37 0 1 0 6 0 4 43 184 0 27 16 185 0 0 0 1 244 48 49 55 50 54 55 46 1 35 34 14 2 21 20 30 2 3 62 1 51 50 22 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 54 52 53 52 38 35 34 6 7 230 65 89 16 34 69 33 37 55 36 18 18 31 40 90 32 79 47 97 115 38 70 98 59 36 66 50 30 30 56 80 51 41 79 29 1 76 64 32 57 23 56 108 100 42 34 24 41 57 33 30 47 34 18 2 37 32 35 152 155 84 139 99 55 27 49 71 45 49 83 60 34 38 34 8 17 8 125 112 27 24 0 1 0 52 255 98 1 51 3 21 0 38 0 23 0 187 0 2 0 1 0 35 0 4 43 187 0 15 0 1 0 22 0 4 43 48 49 23 22 51 50 54 53 52 46 2 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 21 20 14 2 35 34 39 55 62 11 23 43 24 13 16 13 11 31 54 43 15 26 6 10 7 17 11 41 24 13 15 13 11 30 54 43 32 16 10 89 4 82 78 55 126 130 127 56 48 84 61 35 4 2 62 2 2 85 77 54 126 130 127 55 49 84 61 35 7 62 0 0 0 1 0 41 255 161 2 49 3 52 0 15 0 13 0 187 0 4 0 1 0 11 0 4 43 48 49 37 30 1 23 51 62 1 55 19 51 3 35 3 7 39 55 1 34 5 8 4 4 3 6 3 178 60 217 63 150 71 19 133 59 16 32 16 16 32 16 2 249 252 109 1 172 32 45 59 0 2 0 30 0 0 2 51 2 148 0 5 0 11 0 53 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 16 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 4 62 89 185 0 6 0 1 244 184 0 1 16 185 0 8 0 1 244 48 49 55 19 51 19 21 33 37 3 39 35 7 3 30 218 96 219 253 235 1 183 106 64 4 65 106 50 2 98 253 158 50 71 1 47 200 200 254 209 0 0 1 0 43 0 0 2 131 2 160 0 49 0 65 0 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 48 47 27 185 0 48 0 4 62 89 187 0 12 0 1 0 37 0 4 43 184 0 48 16 185 0 0 0 1 244 184 0 23 208 184 0 24 208 48 49 55 51 53 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 21 51 21 35 53 62 3 53 52 46 2 35 34 14 2 21 20 30 2 23 21 35 43 133 21 43 34 21 41 75 105 65 64 106 75 41 21 34 43 21 133 238 29 51 37 21 28 51 75 46 47 74 52 27 21 37 51 29 238 68 4 21 56 69 84 50 73 119 83 45 45 83 119 73 50 84 69 56 21 4 68 56 22 58 72 88 53 56 92 66 36 36 66 92 56 53 88 72 58 22 56 0 0 0 1 0 22 255 136 1 245 2 126 0 13 0 40 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 14 62 89 187 0 10 0 1 0 11 0 4 43 184 0 2 16 185 0 4 0 1 244 48 49 1 3 53 33 21 33 21 19 3 21 33 21 33 53 1 4 227 1 184 254 175 212 222 1 119 254 33 1 3 1 70 53 71 4 254 209 254 207 4 71 53 0 0 1 0 89 255 136 2 73 2 126 0 7 0 26 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 14 62 89 185 0 4 0 1 244 48 49 19 33 17 35 17 33 17 35 89 1 240 85 254 184 83 2 126 253 10 2 173 253 83 0 0 2 0 21 255 244 1 146 2 208 0 9 0 42 0 77 0 184 0 0 69 88 184 0 29 47 27 185 0 29 0 18 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 186 0 0 0 13 0 29 17 18 57 184 0 29 16 185 0 6 0 1 244 186 0 16 0 13 0 29 17 18 57 184 0 13 16 185 0 39 0 1 244 48 49 19 62 1 53 52 38 35 34 6 21 19 14 1 35 34 38 39 14 1 7 39 62 1 55 17 52 62 2 51 50 22 21 20 6 7 21 20 22 51 50 54 55 188 59 66 33 25 27 40 214 26 66 44 63 91 5 13 26 14 33 23 43 20 22 39 54 31 57 73 103 92 52 37 31 43 18 1 51 60 128 70 50 42 67 73 254 46 23 40 86 85 9 18 9 52 15 30 16 1 11 58 82 53 24 80 75 94 172 78 35 70 58 27 17 0 0 2 0 46 255 244 2 242 2 148 0 32 0 50 0 71 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 16 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 186 0 33 0 26 0 3 43 184 0 10 16 184 0 3 220 186 0 7 0 10 0 20 17 18 57 184 0 20 16 184 0 41 220 48 49 55 30 1 51 50 54 55 51 14 1 35 34 46 2 53 52 62 2 51 50 30 2 29 1 33 34 29 1 20 22 37 50 61 1 52 39 46 1 35 34 6 7 14 1 29 1 20 51 184 41 112 65 68 118 42 52 50 146 86 74 129 96 55 55 96 129 74 73 129 96 56 253 194 4 5 1 183 6 10 42 110 62 65 111 42 3 5 4 108 47 53 61 51 60 72 53 91 122 70 70 122 91 53 53 91 122 70 8 4 184 6 9 221 6 184 12 10 44 50 53 45 5 11 6 180 6 0 0 0 0 1 0 26 255 241 2 67 2 7 0 9 0 13 0 187 0 4 0 1 0 5 0 4 43 48 49 55 1 23 7 33 21 33 23 7 1 26 1 17 42 201 1 183 254 73 201 42 254 239 254 1 9 46 187 68 187 46 1 9 0 1 0 42 255 231 2 65 2 15 0 9 0 34 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 4 220 186 0 6 0 0 0 4 17 18 57 48 49 9 1 7 39 17 35 17 7 39 1 1 55 1 10 47 187 68 187 46 1 9 2 15 254 240 42 201 254 73 1 183 201 42 1 16 0 0 1 0 39 255 241 2 79 2 7 0 9 0 13 0 187 0 6 0 1 0 3 0 4 43 48 49 37 1 39 55 33 53 33 39 55 1 2 79 254 240 43 201 254 74 1 182 201 43 1 16 250 254 247 46 187 68 187 46 254 247 0 0 0 0 1 0 42 255 231 2 65 2 15 0 9 0 34 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 10 62 89 184 0 0 220 186 0 6 0 4 0 0 17 18 57 48 49 5 1 55 23 17 51 17 55 23 1 1 51 254 247 46 187 68 187 47 254 246 25 1 17 42 201 1 182 254 74 201 42 254 239 0 0 0 1 0 54 0 162 0 252 1 109 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 19 51 21 35 54 198 198 1 109 203 0 0 1 0 12 0 123 1 37 1 147 0 3 0 11 0 186 0 1 0 3 0 3 43 48 49 19 55 23 7 12 141 140 140 1 7 140 140 140 0 0 0 3 0 41 0 79 1 147 1 191 0 11 0 31 0 51 0 33 0 187 0 32 0 1 0 12 0 4 43 187 0 22 0 1 0 42 0 4 43 187 0 6 0 1 0 0 0 4 43 48 49 55 34 38 53 52 54 51 50 22 21 20 6 7 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 62 2 53 52 46 2 35 34 14 2 21 20 30 2 222 23 34 34 23 23 35 35 23 37 66 49 29 29 49 66 37 37 66 49 29 29 49 66 37 25 47 36 21 21 36 47 25 25 46 36 21 21 36 46 202 34 27 27 33 33 27 27 34 123 26 48 68 42 42 68 48 26 26 48 68 42 42 68 48 26 49 18 35 50 32 32 51 35 18 18 35 51 32 32 50 35 18 0 0 0 2 0 54 0 122 1 66 1 139 0 3 0 9 0 23 0 187 0 0 0 1 0 8 0 4 43 187 0 6 0 1 0 1 0 4 43 48 49 55 53 35 21 39 55 51 21 7 35 250 158 38 59 209 49 219 158 165 165 188 49 215 58 0 0 1 0 23 0 38 2 36 2 22 0 5 0 11 0 186 0 2 0 4 0 3 43 48 49 55 1 51 1 21 33 23 1 5 4 1 4 253 243 40 1 238 254 18 2 0 0 0 0 2 0 23 0 38 2 36 2 22 0 2 0 8 0 13 0 187 0 0 0 1 0 7 0 4 43 48 49 37 11 1 7 1 51 1 21 33 1 190 160 159 104 1 5 4 1 4 253 243 96 1 57 254 199 56 1 238 254 18 2 0 0 0 0 1 0 57 0 19 2 41 2 32 0 5 0 11 0 186 0 1 0 4 0 3 43 48 49 19 51 1 21 1 35 57 2 1 238 254 18 2 2 32 254 252 4 254 251 0 0 0 0 2 0 57 0 19 2 41 2 32 0 2 0 8 0 41 0 186 0 4 0 7 0 3 43 186 0 0 0 7 0 4 17 18 57 186 0 1 0 7 0 4 17 18 57 186 0 2 0 7 0 4 17 18 57 48 49 1 37 17 3 51 1 21 1 35 1 170 254 202 59 2 1 238 254 18 2 1 26 159 254 193 1 166 254 252 4 254 251 0 0 0 0 1 0 23 0 30 2 36 2 13 0 5 0 45 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 10 62 89 184 0 4 220 184 0 5 208 48 49 19 53 33 21 1 35 23 2 13 254 252 4 2 11 2 2 254 19 0 0 0 0 2 0 23 0 29 2 36 2 13 0 2 0 8 0 51 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 10 62 89 184 0 0 69 88 184 0 5 47 27 185 0 5 0 10 62 89 184 0 3 16 185 0 0 0 1 244 184 0 2 208 48 49 27 2 37 33 21 1 35 1 127 159 160 254 89 2 13 254 252 4 254 251 1 211 254 198 1 58 58 2 254 18 1 238 0 0 1 0 18 0 19 2 2 2 32 0 5 0 11 0 186 0 2 0 3 0 3 43 48 49 19 1 51 17 35 1 18 1 238 2 2 254 18 1 28 1 4 253 243 1 5 0 0 0 2 0 18 0 19 2 2 2 32 0 2 0 8 0 51 0 186 0 8 0 3 0 3 43 186 0 0 0 3 0 8 17 18 57 186 0 1 0 3 0 8 17 18 57 186 0 2 0 3 0 8 17 18 57 186 0 6 0 3 0 8 17 18 57 48 49 37 17 5 1 35 1 53 1 51 1 198 254 203 1 113 2 254 18 1 238 2 122 1 63 159 254 249 1 5 4 1 4 0 0 2 0 74 255 246 2 213 2 159 0 3 0 9 0 40 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 187 0 6 0 1 0 1 0 4 43 184 0 8 16 185 0 0 0 1 244 48 49 37 17 33 17 3 55 33 17 7 33 2 138 253 235 43 61 2 78 53 253 170 33 2 52 253 204 2 75 51 253 148 61 0 2 0 74 255 246 3 37 3 27 0 18 0 30 0 40 0 184 0 0 69 88 184 0 23 47 27 185 0 23 0 4 62 89 187 0 27 0 1 0 15 0 4 43 184 0 23 16 185 0 17 0 1 244 48 49 1 14 1 15 1 46 1 39 55 30 1 23 51 62 1 55 33 17 33 19 6 7 17 7 33 17 55 33 62 1 55 2 138 68 111 36 86 27 70 43 56 37 61 20 4 32 105 66 254 39 2 21 155 41 39 53 253 170 61 1 252 26 55 28 2 54 95 227 130 10 77 136 64 38 58 126 63 110 218 97 253 204 2 200 38 45 253 157 61 2 118 51 35 61 28 0 0 1 0 0 255 236 2 104 2 172 0 19 0 0 23 46 1 39 55 30 1 23 51 62 3 55 23 14 3 7 151 30 73 48 56 42 67 23 4 27 78 96 110 59 54 59 112 98 82 28 20 83 143 69 38 63 135 67 89 178 165 146 58 50 55 139 164 185 101 0 0 0 0 1 0 29 255 232 1 225 2 182 0 38 0 21 0 186 0 5 0 36 0 3 43 186 0 8 0 36 0 5 17 18 57 48 49 55 52 62 2 51 50 22 23 17 51 30 3 23 30 3 21 20 6 7 39 62 1 53 52 38 39 17 20 14 2 35 34 38 29 23 42 58 35 20 33 7 50 4 8 15 24 19 34 44 26 10 21 11 35 8 5 65 60 28 47 63 34 41 60 52 23 42 33 19 7 5 2 25 10 15 15 19 13 24 46 47 51 28 39 69 23 13 24 41 27 48 83 19 254 105 41 63 42 21 38 0 0 2 0 56 255 246 1 205 2 158 0 5 0 15 0 53 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 16 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 4 62 89 185 0 6 0 1 244 184 0 1 16 185 0 10 0 1 244 48 49 27 1 51 19 3 35 63 2 47 1 35 15 1 31 1 56 165 75 165 165 75 40 62 65 65 62 4 63 65 65 63 1 74 1 84 254 172 254 172 69 133 138 137 134 134 137 138 133 0 0 0 0 1 0 81 1 178 0 185 2 178 0 4 0 11 0 186 0 0 0 4 0 3 43 48 49 19 51 15 1 35 104 81 16 34 54 2 178 100 156 0 255 255 0 81 1 178 1 106 2 178 0 38 2 222 0 0 0 7 2 222 0 177 0 0 255 255 0 57 1 172 0 187 2 184 2 6 2 8 0 0 255 255 0 63 1 175 0 193 2 187 2 6 2 9 0 0 0 1 0 30 2 28 0 141 2 217 0 13 0 40 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 187 0 7 0 1 0 6 0 4 43 184 0 0 16 185 0 13 0 1 244 48 49 19 50 54 53 52 38 35 53 54 22 21 20 6 39 30 35 29 29 35 54 57 57 54 2 66 31 26 25 31 36 2 51 43 44 51 2 0 0 0 1 0 20 2 28 0 131 2 217 0 13 0 40 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 12 62 89 187 0 13 0 1 0 0 0 4 43 184 0 6 16 185 0 7 0 1 244 48 49 19 34 6 21 20 22 51 21 6 38 53 52 54 23 131 35 29 29 35 54 57 57 54 2 179 31 25 26 31 36 2 51 44 43 51 2 0 0 255 255 0 160 2 61 1 80 2 202 0 7 2 246 1 15 0 0 0 0 255 255 0 206 2 61 1 126 2 202 0 7 2 248 1 15 0 0 0 0 255 255 0 142 2 61 1 144 2 202 0 7 2 250 1 15 0 0 0 0 255 255 0 142 2 61 1 144 2 202 0 7 3 12 1 15 0 0 0 0 0 1 0 22 2 21 0 92 2 204 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 184 0 2 220 48 49 19 51 7 35 22 70 6 58 2 204 183 0 0 0 255 255 0 16 2 89 1 6 2 146 0 7 2 254 0 139 0 0 0 0 255 255 0 46 2 61 0 222 2 202 0 6 2 248 111 0 255 255 0 0 2 61 0 176 2 202 0 6 2 246 111 0 0 1 0 22 255 2 0 92 255 185 0 3 0 11 0 186 0 0 0 1 0 3 43 48 49 31 1 35 55 86 6 70 6 71 183 183 255 255 0 132 2 67 1 154 2 173 0 7 2 252 1 15 0 0 0 0 255 255 0 136 2 76 1 150 2 174 0 7 3 4 1 15 0 0 0 0 255 255 0 148 2 89 1 138 2 146 0 7 2 254 1 15 0 0 0 0 255 255 0 145 2 63 1 141 2 190 0 7 3 0 1 15 0 0 0 0 255 255 0 178 2 30 1 108 2 215 0 7 3 8 1 15 0 0 0 0 255 255 0 173 2 59 1 207 2 202 0 7 3 10 1 15 0 0 0 0 255 255 0 217 2 74 1 69 2 182 0 7 3 2 1 15 0 0 0 0 255 255 0 192 255 43 1 89 0 3 0 7 3 22 1 21 0 0 0 0 255 255 0 205 255 50 1 118 0 3 0 7 3 24 1 15 0 0 0 0 0 1 255 145 2 61 0 65 2 202 0 3 0 24 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 12 62 89 184 0 1 220 48 49 3 51 23 35 111 86 90 63 2 202 141 0 0 0 0 1 255 125 2 194 0 51 3 50 0 3 0 11 0 186 0 1 0 3 0 3 43 48 49 3 51 23 35 131 94 88 69 3 50 112 0 1 255 191 2 61 0 111 2 202 0 3 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 184 0 2 220 48 49 3 35 55 51 2 63 90 86 2 61 141 0 0 0 0 1 255 205 2 194 0 131 3 50 0 3 0 11 0 186 0 2 0 0 0 3 43 48 49 19 35 55 51 18 69 88 94 2 194 112 0 1 255 127 2 61 0 129 2 202 0 7 0 55 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 12 62 89 184 0 0 69 88 184 0 3 47 27 185 0 3 0 12 62 89 184 0 6 16 184 0 0 220 186 0 5 0 0 0 6 17 18 57 48 49 3 51 23 35 39 35 7 35 34 68 95 60 67 4 67 60 2 202 141 91 91 0 0 0 1 255 120 2 194 0 136 3 50 0 7 0 23 0 186 0 6 0 1 0 3 43 184 0 6 16 184 0 7 220 184 0 3 208 48 49 3 55 51 23 35 39 35 7 136 96 80 96 67 67 4 67 2 194 112 112 68 68 0 0 1 255 117 2 67 0 139 2 173 0 22 0 65 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 12 62 89 187 0 19 0 1 0 3 0 4 43 184 0 14 16 185 0 8 0 1 244 184 0 3 16 184 0 11 208 48 49 3 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 35 139 4 40 37 19 32 27 24 12 28 9 46 4 40 37 19 31 27 24 13 28 9 46 2 67 45 61 16 19 16 51 45 61 16 19 16 51 0 0 0 0 1 255 111 2 199 0 145 3 51 0 23 0 35 0 186 0 0 0 17 0 3 43 186 0 5 0 12 0 3 43 184 0 0 16 184 0 8 208 184 0 12 16 184 0 20 208 48 49 19 34 46 2 35 34 6 7 35 62 1 51 50 30 2 51 50 54 55 51 14 1 60 20 32 27 26 14 14 22 4 46 5 44 36 20 32 27 26 14 14 22 4 46 5 44 2 199 16 20 16 26 26 47 61 16 20 16 27 25 46 62 0 0 1 255 133 2 89 0 123 2 146 0 3 0 11 0 184 0 3 47 184 0 1 220 48 49 3 51 21 35 123 246 246 2 146 57 0 0 1 255 132 2 217 0 124 3 18 0 3 0 11 0 186 0 1 0 2 0 3 43 48 49 3 51 21 35 124 248 248 3 18 57 0 0 1 255 130 2 63 0 126 2 190 0 17 0 49 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 18 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 184 0 9 220 184 0 5 16 184 0 12 208 48 49 17 34 46 2 39 51 30 1 51 50 54 55 51 14 3 32 47 30 16 1 51 4 36 35 35 36 4 51 2 15 30 47 2 63 23 37 45 22 29 47 47 29 22 45 37 23 0 0 0 0 1 255 133 2 196 0 123 3 50 0 17 0 23 0 186 0 9 0 0 0 3 43 184 0 9 16 184 0 6 220 184 0 12 208 48 49 17 34 46 2 39 51 30 1 51 50 54 55 51 14 3 30 44 30 16 3 50 5 34 34 34 34 5 50 3 16 30 44 2 196 19 30 40 21 24 39 39 24 21 40 30 19 0 0 1 255 202 2 74 0 54 2 182 0 11 0 24 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 184 0 6 220 48 49 17 34 38 53 52 54 51 50 22 21 20 6 23 31 31 23 23 31 31 2 74 30 24 23 31 31 23 24 30 0 0 1 255 199 2 202 0 57 3 53 0 11 0 11 0 186 0 6 0 0 0 3 43 48 49 17 34 38 53 52 54 51 50 22 21 20 6 24 33 33 24 24 33 33 2 202 30 24 23 30 30 23 24 30 0 0 0 2 255 121 2 76 0 135 2 174 0 11 0 23 0 40 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 12 62 89 184 0 6 220 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 3 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 86 22 27 27 22 21 28 28 151 21 28 28 21 22 27 27 2 76 28 21 21 28 28 21 21 28 28 21 21 28 28 21 21 28 0 0 0 2 255 121 2 203 0 135 3 45 0 11 0 23 0 27 0 186 0 6 0 0 0 3 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 3 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 86 22 27 27 22 21 28 28 151 21 28 28 21 22 27 27 2 203 28 21 22 27 27 22 21 28 28 21 22 27 27 22 21 28 0 0 0 0 1 255 192 2 41 0 83 2 215 0 14 0 19 0 186 0 6 0 5 0 3 43 186 0 0 0 14 0 3 43 48 49 3 62 1 53 52 39 55 30 1 21 20 14 2 7 37 24 32 83 9 66 72 18 31 40 22 2 79 7 20 19 39 3 48 2 41 38 22 31 23 13 4 0 0 0 1 255 192 2 186 0 83 3 104 0 14 0 19 0 186 0 6 0 5 0 3 43 186 0 0 0 14 0 3 43 48 49 3 62 1 53 52 39 55 30 1 21 20 14 2 7 37 24 32 83 9 66 72 18 31 40 22 2 224 7 20 19 39 3 48 2 41 38 22 31 23 13 4 0 0 0 2 255 163 2 30 0 93 2 215 0 11 0 23 0 19 0 186 0 12 0 0 0 3 43 186 0 6 0 18 0 3 43 48 49 17 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 41 52 52 41 41 52 52 41 20 28 28 20 20 28 28 2 30 51 42 42 50 50 42 42 51 37 30 26 25 30 30 25 26 30 0 0 0 0 2 255 163 2 187 0 93 3 107 0 11 0 23 0 19 0 186 0 12 0 0 0 3 43 186 0 6 0 18 0 3 43 48 49 17 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 41 52 52 41 40 53 53 40 19 28 28 19 20 28 28 2 187 47 41 40 48 48 40 41 47 36 27 25 23 28 28 23 25 27 0 0 0 0 2 255 158 2 59 0 192 2 202 0 3 0 7 0 36 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 12 62 89 184 0 0 220 184 0 5 208 184 0 2 16 184 0 6 208 48 49 3 51 7 35 55 51 7 35 28 73 88 55 218 72 88 55 2 202 143 143 143 0 0 0 0 2 255 147 2 194 0 192 3 50 0 3 0 7 0 27 0 186 0 1 0 3 0 3 43 184 0 1 16 184 0 4 208 184 0 3 16 184 0 6 208 48 49 3 55 51 7 55 51 7 35 109 66 77 83 164 77 84 59 2 194 112 112 112 112 0 0 0 0 1 255 127 2 61 0 129 2 202 0 7 0 55 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 12 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 18 62 89 186 0 2 0 0 0 7 17 18 57 184 0 7 16 184 0 5 220 48 49 3 51 23 51 55 51 7 35 129 60 67 4 67 60 95 68 2 202 92 92 141 0 0 0 1 255 120 2 194 0 136 3 50 0 7 0 23 0 186 0 5 0 2 0 3 43 184 0 5 16 184 0 4 220 184 0 7 208 48 49 19 7 35 39 51 23 51 55 136 96 80 96 67 67 4 67 3 50 112 112 68 68 0 0 2 255 64 2 59 0 98 2 202 0 3 0 7 0 36 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 12 62 89 184 0 0 208 184 0 5 16 184 0 7 220 184 0 3 208 48 49 19 35 39 51 7 35 39 51 98 55 88 73 77 55 88 72 2 59 143 143 143 0 0 0 0 2 255 64 2 194 0 109 3 50 0 3 0 7 0 27 0 186 0 2 0 0 0 3 43 184 0 0 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 19 39 51 23 43 1 39 51 49 83 77 66 158 59 84 77 2 194 112 112 112 0 1 255 203 2 33 0 46 2 220 0 16 0 11 0 186 0 5 0 11 0 3 43 48 49 19 14 1 7 54 51 50 22 21 20 6 35 34 53 52 54 55 46 29 26 2 3 5 15 26 23 17 51 38 43 2 188 14 35 23 1 19 20 23 22 69 35 63 20 0 0 0 0 1 255 209 2 32 0 51 2 218 0 15 0 11 0 186 0 10 0 4 0 3 43 48 49 3 54 55 6 35 34 38 53 52 54 51 50 21 20 6 7 47 54 3 3 6 15 26 24 17 50 38 43 2 64 26 46 1 19 20 22 22 69 35 62 20 0 0 0 1 255 247 1 178 0 143 2 99 0 15 0 11 0 186 0 0 0 15 0 3 43 48 49 3 62 1 53 52 38 39 55 30 1 21 20 14 2 7 9 42 42 8 6 59 10 13 22 39 52 31 1 219 5 30 31 11 21 10 28 14 32 18 27 40 27 16 3 0 0 0 0 1 255 202 255 50 0 54 255 157 0 11 0 11 0 186 0 6 0 0 0 3 43 48 49 21 34 38 53 52 54 51 50 22 21 20 6 23 31 31 23 23 31 31 206 30 24 23 30 30 23 24 30 0 0 0 0 2 255 121 255 55 0 135 255 153 0 11 0 23 0 27 0 186 0 6 0 0 0 3 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 86 22 27 27 22 21 28 28 151 21 28 28 21 22 27 27 201 29 20 21 28 28 21 20 29 29 20 21 28 28 21 20 29 0 1 255 171 255 40 0 68 255 208 0 16 0 19 0 186 0 0 0 15 0 3 43 186 0 9 0 8 0 3 43 48 49 7 30 1 21 20 14 2 7 39 62 1 53 52 38 39 55 29 51 46 24 40 53 28 8 40 49 30 21 18 48 8 35 34 22 32 22 13 2 40 5 21 20 20 19 5 38 0 0 1 255 171 255 43 0 68 0 3 0 17 0 19 0 186 0 2 0 17 0 3 43 186 0 11 0 10 0 3 43 48 49 39 51 7 30 1 21 20 14 2 7 39 62 1 53 52 38 39 19 53 25 24 35 24 40 53 28 8 40 49 33 30 3 53 8 32 31 22 32 22 13 3 41 5 23 20 20 21 8 0 0 0 0 1 255 171 255 43 0 68 0 3 0 17 0 19 0 186 0 17 0 2 0 3 43 186 0 10 0 11 0 3 43 48 49 39 51 7 30 1 21 20 14 2 7 39 62 1 53 52 38 39 19 53 25 24 35 24 40 53 28 8 40 49 33 30 3 53 8 32 31 22 32 22 13 3 41 5 23 20 20 21 8 0 0 0 0 1 255 190 255 50 0 103 0 3 0 18 0 11 0 186 0 16 0 10 0 3 43 48 49 7 52 54 55 51 14 1 21 20 22 51 50 55 23 14 1 35 34 38 66 46 25 58 32 36 28 18 22 18 22 14 46 19 38 52 121 41 64 19 24 55 29 23 23 13 41 11 16 43 0 0 0 1 255 190 255 44 0 109 0 3 0 21 0 11 0 186 0 13 0 6 0 3 43 48 49 55 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 62 2 55 66 32 36 30 18 12 19 9 23 14 46 20 40 55 13 21 26 12 3 24 57 29 23 23 7 7 45 11 17 44 43 21 38 33 27 9 0 0 0 1 255 130 255 50 0 126 255 177 0 17 0 23 0 186 0 0 0 9 0 3 43 184 0 9 16 184 0 6 220 184 0 12 208 48 49 21 34 46 2 39 51 30 1 51 50 54 55 51 14 3 32 47 30 16 1 51 4 36 35 35 36 4 51 2 15 30 47 206 23 37 45 22 29 47 47 29 22 45 37 23 0 0 0 1 255 132 255 85 0 123 255 143 0 3 0 11 0 186 0 3 0 0 0 3 43 48 49 23 35 53 51 123 247 247 171 58 0 0 0 3 255 124 2 76 0 132 3 29 0 11 0 23 0 27 0 35 0 186 0 6 0 0 0 3 43 186 0 25 0 26 0 3 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 48 49 3 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 39 51 21 35 86 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 230 247 247 2 76 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 209 47 0 3 255 124 2 203 0 132 3 139 0 3 0 15 0 27 0 35 0 186 0 10 0 4 0 3 43 186 0 1 0 2 0 3 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 3 51 21 35 23 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 124 248 248 38 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 139 46 146 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 3 255 124 2 76 0 132 3 55 0 3 0 15 0 27 0 35 0 186 0 10 0 4 0 3 43 186 0 0 0 2 0 3 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 19 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 29 79 103 58 33 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 55 103 132 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 0 0 0 3 255 124 2 203 0 132 3 182 0 3 0 15 0 27 0 35 0 186 0 10 0 4 0 3 43 186 0 0 0 2 0 3 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 19 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 38 91 112 68 35 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 182 111 124 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 0 0 0 3 255 124 2 76 0 132 3 55 0 7 0 19 0 31 0 43 0 186 0 14 0 8 0 3 43 186 0 4 0 6 0 3 43 184 0 4 16 184 0 0 208 184 0 8 16 184 0 20 208 184 0 14 16 184 0 26 208 48 49 3 51 23 51 55 51 7 35 7 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 126 61 63 4 63 61 91 70 51 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 3 55 64 64 103 132 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 0 3 255 120 2 203 0 136 3 182 0 11 0 23 0 31 0 43 0 186 0 6 0 0 0 3 43 186 0 31 0 25 0 3 43 184 0 0 16 184 0 12 208 184 0 6 16 184 0 18 208 184 0 31 16 184 0 27 208 48 49 3 34 38 53 52 54 51 50 22 21 20 6 51 34 38 53 52 54 51 50 22 21 20 6 55 7 35 39 51 23 51 55 86 20 26 26 20 20 25 25 152 20 25 25 20 20 26 26 30 96 80 96 67 67 4 67 2 203 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 235 111 111 68 68 0 3 255 124 2 76 0 132 3 55 0 3 0 15 0 27 0 35 0 186 0 10 0 4 0 3 43 186 0 3 0 1 0 3 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 19 35 39 51 23 34 38 53 52 54 51 50 22 21 20 6 35 34 38 53 52 54 51 50 22 21 20 6 53 58 103 79 115 20 25 25 20 20 26 26 192 20 26 26 20 20 25 25 2 208 103 235 26 19 20 26 26 20 19 26 26 19 20 26 26 20 19 26 0 0 0 0 3 255 124 2 203 0 132 3 182 0 3 0 15 0 27 0 35 0 186 0 10 0 4 0 3 43 186 0 3 0 1 0 3 43 184 0 4 16 184 0 16 208 184 0 10 16 184 0 22 208 48 49 19 35 39 51 23 34 38 53 52 54 51 50 22 21 20 6 35 34 38 53 52 54 51 50 22 21 20 6 51 68 112 91 124 20 25 25 20 20 26 26 192 20 26 26 20 20 25 25 3 71 111 235 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 0 0 0 0 2 255 140 2 61 0 232 2 242 0 7 0 11 0 27 0 186 0 8 0 10 0 3 43 186 0 0 0 6 0 3 43 184 0 6 16 184 0 3 208 48 49 3 51 23 35 39 35 7 35 37 51 7 35 34 68 82 56 58 4 58 56 1 22 70 92 51 2 180 119 73 73 181 114 0 0 2 255 128 2 194 0 234 3 113 0 3 0 11 0 27 0 186 0 0 0 2 0 3 43 186 0 4 0 10 0 3 43 184 0 10 16 184 0 7 208 48 49 19 51 7 35 39 51 23 35 39 35 7 35 162 72 91 52 127 72 92 63 63 4 63 63 3 113 111 42 106 62 62 0 0 0 2 255 140 2 61 0 201 2 242 0 7 0 11 0 27 0 186 0 11 0 9 0 3 43 186 0 0 0 6 0 3 43 184 0 6 16 184 0 3 208 48 49 3 51 23 35 39 35 7 35 37 35 39 51 34 68 82 56 58 4 58 56 1 61 51 92 69 2 180 119 73 73 67 114 0 0 2 255 128 2 194 0 184 3 113 0 3 0 11 0 27 0 186 0 3 0 1 0 3 43 186 0 4 0 10 0 3 43 184 0 10 16 184 0 7 208 48 49 19 35 39 51 7 51 23 35 39 35 7 35 184 52 91 72 149 72 92 63 63 4 63 63 3 2 111 69 106 62 62 0 0 0 2 255 140 2 61 0 209 3 16 0 7 0 23 0 35 0 186 0 1 0 3 0 3 43 186 0 15 0 14 0 3 43 186 0 8 0 23 0 3 43 184 0 3 16 184 0 6 208 48 49 3 51 23 35 39 35 7 35 55 62 1 53 52 38 39 55 30 1 21 20 14 2 7 34 68 82 56 58 4 58 56 223 19 23 32 37 7 59 63 16 26 33 18 2 180 119 73 73 90 5 18 16 20 19 2 41 2 36 35 20 28 19 12 4 0 0 2 255 128 2 194 0 207 3 138 0 13 0 21 0 35 0 186 0 15 0 17 0 3 43 186 0 7 0 6 0 3 43 186 0 0 0 13 0 3 43 184 0 17 16 184 0 20 208 48 49 19 62 1 53 52 38 39 55 30 1 21 20 6 7 39 51 23 35 39 35 7 35 104 19 26 33 38 9 59 61 56 36 151 72 92 63 63 4 63 63 3 21 5 15 16 20 17 2 42 2 36 35 38 35 6 58 106 62 62 0 0 0 2 255 125 2 59 0 131 3 34 0 7 0 29 0 51 0 186 0 0 0 6 0 3 43 186 0 16 0 22 0 3 43 186 0 11 0 27 0 3 43 184 0 6 16 184 0 3 208 184 0 11 16 184 0 18 208 184 0 22 16 184 0 29 208 48 49 3 51 23 35 39 35 7 35 39 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 38 76 86 58 64 4 64 58 7 4 40 35 19 27 23 21 12 32 7 42 4 40 35 19 27 23 21 12 32 7 2 163 104 65 65 140 40 51 13 17 13 43 40 51 13 17 13 43 0 0 2 255 124 2 194 0 132 3 171 0 7 0 30 0 51 0 186 0 11 0 28 0 3 43 186 0 16 0 23 0 3 43 186 0 0 0 6 0 3 43 184 0 6 16 184 0 3 208 184 0 11 16 184 0 19 208 184 0 23 16 184 0 30 208 48 49 3 51 23 35 39 35 7 35 39 62 1 51 50 30 2 51 50 54 55 51 14 1 35 34 46 2 35 34 7 36 72 92 63 63 4 63 63 4 4 40 35 18 28 23 22 12 15 21 4 42 4 40 35 18 28 23 22 12 32 8 3 44 106 62 62 140 40 53 14 17 14 24 21 39 54 14 17 14 45 0 0 0 2 255 130 2 63 0 126 3 21 0 3 0 21 0 31 0 186 0 0 0 2 0 3 43 186 0 13 0 4 0 3 43 184 0 13 16 184 0 10 220 184 0 16 208 48 49 19 51 7 35 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 31 68 88 48 37 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 3 21 112 102 23 37 45 22 31 49 49 31 22 45 37 23 0 2 255 134 2 196 0 122 3 139 0 3 0 21 0 31 0 186 0 0 0 2 0 3 43 186 0 13 0 4 0 3 43 184 0 13 16 184 0 10 220 184 0 16 208 48 49 19 51 7 35 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 35 72 97 49 39 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 139 105 94 18 30 38 21 26 38 38 26 21 38 30 18 0 2 255 130 2 63 0 126 3 21 0 3 0 21 0 31 0 186 0 3 0 1 0 3 43 186 0 13 0 4 0 3 43 184 0 13 16 184 0 10 220 184 0 16 208 48 49 19 35 39 51 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 37 48 88 68 31 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 2 165 112 214 23 37 45 22 31 49 49 31 22 45 37 23 0 2 255 134 2 196 0 122 3 139 0 3 0 21 0 31 0 186 0 3 0 1 0 3 43 186 0 13 0 4 0 3 43 184 0 13 16 184 0 10 220 184 0 16 208 48 49 19 35 39 51 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 49 97 72 35 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 34 105 199 18 30 38 21 26 38 38 26 21 38 30 18 0 2 255 130 2 63 0 126 3 71 0 17 0 33 0 39 0 186 0 9 0 0 0 3 43 186 0 25 0 24 0 3 43 186 0 18 0 33 0 3 43 184 0 9 16 184 0 6 220 184 0 12 208 48 49 17 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 53 52 38 39 55 30 1 21 20 14 2 7 32 47 30 16 1 43 5 40 38 38 40 5 43 2 15 30 47 67 18 24 32 37 7 59 63 16 26 34 18 2 63 23 37 45 22 31 49 49 31 22 45 37 23 143 5 18 16 20 19 2 41 2 35 36 20 28 19 12 4 0 2 255 134 2 196 0 122 3 184 0 15 0 33 0 39 0 186 0 25 0 16 0 3 43 186 0 7 0 6 0 3 43 186 0 0 0 15 0 3 43 184 0 25 16 184 0 22 220 184 0 28 208 48 49 3 62 1 53 52 38 39 55 30 1 21 20 14 2 7 23 34 46 2 39 51 30 1 51 50 54 55 51 14 3 33 18 26 33 37 8 59 62 16 25 34 18 23 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 3 67 5 15 16 20 17 2 42 2 36 35 19 27 19 11 3 92 18 30 38 21 26 38 38 26 21 38 30 18 0 0 0 0 2 255 125 2 63 0 131 3 34 0 17 0 39 0 55 0 186 0 26 0 32 0 3 43 186 0 21 0 37 0 3 43 186 0 9 0 0 0 3 43 184 0 9 16 184 0 6 220 184 0 12 208 184 0 21 16 184 0 28 208 184 0 32 16 184 0 39 208 48 49 17 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 51 50 30 2 51 50 55 51 14 1 35 34 46 2 35 34 7 32 46 30 16 1 45 5 37 38 38 37 5 45 2 15 30 46 163 4 40 35 19 27 23 21 12 32 7 42 4 40 35 19 27 23 21 12 32 7 2 63 19 30 38 20 24 38 38 24 20 38 30 19 136 40 51 13 17 13 43 40 51 13 17 13 43 0 2 255 124 2 196 0 132 3 171 0 17 0 40 0 55 0 186 0 26 0 33 0 3 43 186 0 21 0 38 0 3 43 186 0 9 0 0 0 3 43 184 0 9 16 184 0 6 220 184 0 12 208 184 0 21 16 184 0 29 208 184 0 33 16 184 0 40 208 48 49 17 34 46 2 39 51 30 1 51 50 54 55 51 14 3 39 62 1 51 50 30 2 51 50 54 55 51 14 1 35 34 46 2 35 34 7 29 43 30 17 3 45 6 35 36 36 35 6 45 3 17 30 43 161 4 40 35 18 28 23 22 12 15 21 4 42 4 40 35 18 28 23 22 12 32 8 2 196 18 30 38 21 26 38 38 26 21 38 30 18 138 40 53 14 17 14 24 21 39 54 14 17 14 45 0 0 1 255 227 2 36 0 30 2 248 0 4 0 11 0 186 0 1 0 0 0 3 43 48 49 3 39 51 15 1 25 4 59 1 14 2 36 212 57 155 0 1 255 187 2 29 0 83 2 198 0 16 0 19 0 186 0 15 0 0 0 3 43 186 0 8 0 9 0 3 43 48 49 19 46 1 53 52 62 2 55 23 14 1 21 20 22 23 7 28 51 46 24 40 52 28 8 39 49 29 22 18 2 29 8 36 33 22 32 22 13 3 41 5 21 19 20 20 5 38 0 3 0 30 0 0 2 53 2 144 0 12 0 21 0 45 0 127 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 16 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 4 62 89 186 0 6 0 31 0 36 17 18 57 184 0 6 47 184 0 31 16 185 0 12 0 1 244 186 0 11 0 12 0 6 17 18 57 184 0 11 47 185 0 8 0 1 244 184 0 6 16 185 0 14 0 1 244 184 0 36 16 185 0 21 0 1 244 186 0 22 0 6 0 14 17 18 57 184 0 11 16 184 0 32 208 184 0 8 16 184 0 35 208 48 49 37 50 54 53 52 38 43 1 21 51 21 35 21 17 51 50 54 53 52 38 43 1 23 30 1 21 20 14 2 43 1 53 35 53 55 17 51 50 30 2 21 20 6 7 1 49 85 94 93 86 115 152 152 98 84 75 79 77 101 223 72 80 36 66 91 55 210 77 77 195 50 83 59 33 56 58 63 67 70 65 60 101 47 114 1 61 57 55 54 48 238 11 80 69 50 73 49 24 177 43 4 1 176 18 38 60 42 48 75 15 0 255 255 0 8 0 0 0 254 3 50 2 38 0 12 0 0 0 7 3 1 0 131 0 0 255 255 0 52 255 244 2 101 3 50 2 38 0 18 0 0 0 7 3 1 1 76 0 0 0 2 0 8 255 244 1 251 2 200 0 13 0 44 0 100 0 184 0 0 69 88 184 0 38 47 27 185 0 38 0 18 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 4 62 89 184 0 0 69 88 184 0 27 47 27 185 0 27 0 4 62 89 187 0 17 0 1 0 11 0 4 43 187 0 37 0 1 0 34 0 4 43 184 0 27 16 185 0 3 0 1 244 184 0 37 16 184 0 40 208 184 0 34 16 184 0 43 208 48 49 55 30 1 51 50 62 2 53 52 38 35 34 7 39 62 1 51 50 30 2 21 20 14 2 35 34 38 39 35 7 35 17 35 53 55 53 51 21 51 21 35 21 164 32 63 24 30 51 37 21 59 69 59 71 2 33 78 41 47 72 49 25 34 58 76 42 34 73 32 3 7 66 74 74 82 182 182 108 28 23 25 47 68 43 76 93 66 67 29 39 34 61 88 54 60 94 65 34 31 29 48 2 59 43 5 93 93 48 73 0 0 0 255 255 255 254 0 0 0 250 2 190 2 38 1 45 0 0 0 6 3 0 124 0 0 0 255 255 0 46 255 244 1 240 2 190 2 38 0 44 0 0 0 7 3 0 1 15 0 0 0 2 255 132 2 59 0 124 3 34 0 7 0 25 0 35 0 187 0 1 0 1 0 3 0 4 43 184 0 3 16 184 0 6 208 184 0 1 16 184 0 8 220 185 0 17 0 1 244 48 49 3 51 23 35 39 35 7 35 55 34 46 2 39 51 30 1 51 50 54 55 51 14 3 38 76 86 58 64 4 64 58 124 29 41 29 15 1 45 4 33 33 33 33 4 45 2 14 29 42 2 163 104 65 65 134 16 27 35 19 22 30 30 22 19 35 27 16 0 0 0 2 255 128 2 194 0 128 3 170 0 7 0 21 0 35 0 187 0 1 0 1 0 3 0 4 43 184 0 3 16 184 0 6 208 184 0 1 16 184 0 8 220 185 0 15 0 1 244 48 49 3 51 23 35 39 35 7 35 55 34 38 39 51 30 1 51 50 54 55 51 14 1 36 72 92 63 63 4 63 63 128 58 59 5 45 6 35 36 36 35 6 45 5 59 3 44 106 62 62 135 57 40 23 30 30 23 40 57 0 0 0 255 255 0 90 255 85 2 36 2 144 2 38 0 5 0 0 0 7 3 27 1 44 0 0 255 255 0 82 255 85 1 251 2 200 2 38 0 31 0 0 0 7 3 27 1 27 0 0 255 255 0 90 255 85 2 63 2 144 2 38 0 14 0 0 0 7 3 27 1 69 0 0 255 255 0 82 255 85 1 230 2 200 2 38 0 40 0 0 0 7 3 27 1 15 0 0 255 255 0 90 0 0 1 222 3 182 2 38 0 8 0 0 0 7 4 89 1 26 0 0 255 255 0 46 255 244 1 202 3 55 2 38 0 34 0 0 0 7 4 88 1 9 0 0 255 255 0 52 255 244 2 101 3 182 2 38 0 18 0 0 0 7 4 89 1 73 0 0 255 255 0 46 255 244 1 240 3 55 2 38 0 44 0 0 0 7 4 88 1 15 0 0 0 2 0 92 255 6 1 42 2 238 0 3 0 7 0 27 0 186 0 1 0 2 0 3 43 184 0 1 16 184 0 4 208 184 0 2 16 184 0 6 208 48 49 19 51 17 35 19 51 17 35 92 58 58 148 58 58 2 238 252 24 3 232 252 24 0 0 0 0 2 0 27 255 244 1 129 2 170 0 34 0 46 0 40 0 184 0 0 69 88 184 0 41 47 27 185 0 41 0 4 62 89 187 0 15 0 1 0 8 0 4 43 184 0 41 16 185 0 35 0 1 244 48 49 19 62 3 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 4 23 43 2 47 1 51 7 3 50 22 21 20 6 35 34 38 53 52 54 223 13 29 26 17 55 53 36 64 26 47 33 92 54 40 67 46 26 25 38 43 34 20 4 8 29 21 10 5 70 2 26 25 35 35 25 25 34 34 1 82 22 39 41 45 27 44 61 32 29 43 37 46 23 42 58 34 37 60 51 47 47 53 32 251 83 83 254 177 35 29 27 35 35 27 29 35 0 0 0 0 1 0 94 0 0 1 17 2 177 0 5 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 17 35 94 179 117 62 2 177 47 253 126 0 0 0 1 0 31 0 0 0 209 2 177 0 5 0 13 0 187 0 5 0 1 0 2 0 4 43 48 49 51 35 17 35 53 51 209 62 116 178 2 130 47 0 1 0 94 255 204 1 17 2 126 0 5 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 19 51 17 51 21 35 94 62 117 179 2 126 253 125 47 0 0 0 1 0 31 255 204 0 209 2 126 0 5 0 13 0 187 0 3 0 1 0 0 0 4 43 48 49 23 35 53 51 17 51 209 178 116 62 52 47 2 131 0 0 0 0 2 0 94 255 104 1 91 2 196 0 7 0 11 0 39 0 187 0 5 0 1 0 6 0 4 43 187 0 1 0 1 0 2 0 4 43 184 0 5 16 184 0 8 208 184 0 2 16 184 0 10 208 48 49 19 51 21 35 17 51 21 35 55 51 17 35 94 253 110 110 253 51 45 45 2 196 47 253 2 47 47 2 254 0 2 0 31 255 104 1 28 2 196 0 7 0 11 0 39 0 187 0 10 0 1 0 0 0 4 43 187 0 6 0 1 0 5 0 4 43 184 0 10 16 184 0 2 208 184 0 5 16 184 0 8 208 48 49 5 35 53 51 17 35 53 51 7 17 51 17 1 28 253 110 110 253 96 44 152 47 2 254 47 47 253 2 2 254 0 0 0 0 1 0 94 1 22 1 17 2 196 0 5 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 17 35 94 179 117 62 2 196 47 254 129 0 0 0 1 0 31 1 22 0 209 2 196 0 5 0 13 0 187 0 5 0 1 0 2 0 4 43 48 49 19 35 17 35 53 51 209 62 116 178 1 22 1 127 47 0 0 0 1 0 94 255 104 1 17 1 22 0 5 0 13 0 187 0 3 0 1 0 4 0 4 43 48 49 19 51 17 51 21 35 94 62 117 179 1 22 254 129 47 0 0 0 1 0 31 255 104 0 209 1 22 0 5 0 13 0 187 0 3 0 1 0 0 0 4 43 48 49 23 35 53 51 17 51 209 178 116 62 152 47 1 127 0 0 0 0 3 0 44 255 244 1 197 2 138 0 11 0 23 0 35 0 71 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 12 0 1 244 184 0 6 16 185 0 18 0 1 244 186 0 24 0 6 0 0 17 18 57 184 0 24 16 184 0 30 220 48 49 23 34 38 53 52 54 51 50 22 21 20 6 39 50 54 53 52 38 35 34 6 21 20 22 55 34 38 53 52 54 51 50 22 21 20 6 249 97 108 108 97 96 108 108 96 56 72 72 56 57 72 72 57 26 35 35 26 25 35 35 12 172 161 161 168 168 161 161 172 66 130 137 138 125 125 138 138 129 205 34 32 32 34 34 32 32 34 0 3 0 44 255 244 1 197 2 138 0 9 0 21 0 33 0 93 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 14 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 186 0 0 0 28 0 22 17 18 57 185 0 6 0 1 244 186 0 9 0 28 0 22 17 18 57 186 0 10 0 28 0 22 17 18 57 184 0 22 16 185 0 18 0 1 244 186 0 21 0 22 0 28 17 18 57 48 49 19 14 1 21 20 22 51 50 54 63 1 62 1 53 52 46 2 35 34 6 7 55 50 22 21 20 6 35 34 38 53 52 54 130 5 5 72 57 32 51 17 18 5 5 19 34 47 28 32 52 17 101 96 108 108 96 97 108 108 1 190 26 62 37 140 130 40 43 62 26 62 37 70 100 65 31 38 41 142 168 161 161 172 172 161 161 168 0 0 0 3 0 55 255 244 1 227 2 138 0 15 0 27 0 39 0 71 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 14 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 16 0 1 244 184 0 8 16 185 0 22 0 1 244 186 0 28 0 8 0 0 17 18 57 184 0 28 16 184 0 34 220 48 49 5 34 46 2 53 52 54 51 50 22 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 55 34 38 53 52 54 51 50 22 21 20 6 1 13 50 79 56 29 114 100 100 114 29 56 79 50 62 73 74 61 62 73 73 62 25 36 36 25 25 36 36 12 45 85 124 79 159 170 171 158 79 124 85 45 68 129 136 136 124 124 136 136 129 203 34 32 32 34 34 32 32 34 0 0 3 0 55 255 244 1 227 2 138 0 10 0 19 0 35 0 93 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 14 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 186 0 0 0 28 0 20 17 18 57 185 0 7 0 1 244 186 0 10 0 28 0 20 17 18 57 186 0 11 0 28 0 20 17 18 57 184 0 20 16 185 0 16 0 1 244 186 0 19 0 20 0 28 17 18 57 48 49 19 6 21 20 30 2 51 50 54 63 1 54 53 52 38 35 34 6 7 55 50 22 21 20 14 2 35 34 46 2 53 52 54 143 12 20 37 51 30 35 55 18 18 12 77 61 34 55 19 108 100 114 29 56 79 50 50 79 56 29 114 1 193 54 74 70 102 66 32 41 42 59 54 74 139 127 38 42 143 171 158 79 124 85 45 45 85 124 79 159 170 0 0 255 255 0 67 0 0 0 181 2 180 2 6 0 38 0 0 0 2 0 3 0 0 1 212 2 6 0 9 0 17 0 84 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 10 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 4 62 89 186 0 0 0 14 0 12 17 18 57 184 0 0 47 186 0 5 0 14 0 12 17 18 57 185 0 11 0 1 244 48 49 37 39 46 1 39 35 14 1 15 1 23 35 7 35 19 51 19 35 1 56 24 14 24 14 4 14 24 14 24 176 197 48 84 185 94 186 88 208 74 43 83 43 44 82 43 74 62 146 2 6 253 250 0 3 0 90 0 0 1 229 2 6 0 19 0 28 0 37 0 87 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 186 0 35 0 0 0 18 17 18 57 184 0 35 47 185 0 20 0 1 244 186 0 9 0 20 0 35 17 18 57 184 0 0 16 185 0 26 0 1 244 184 0 18 16 185 0 29 0 1 244 48 49 19 51 50 30 2 21 20 6 7 21 30 1 21 20 14 2 43 1 19 50 54 53 52 38 43 1 21 23 50 54 53 52 38 43 1 21 90 170 43 71 52 29 45 45 55 65 31 57 78 46 183 161 69 58 62 62 81 90 65 77 73 69 90 2 6 14 30 49 35 38 61 12 4 11 59 54 39 56 38 18 1 43 42 40 40 35 157 237 43 51 45 42 181 0 0 0 1 0 52 255 244 1 215 2 18 0 29 0 57 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 10 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 5 16 185 0 12 0 1 244 184 0 25 16 185 0 18 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 35 34 46 2 52 39 67 93 54 50 79 26 47 22 51 34 77 92 88 77 39 59 25 46 34 85 54 53 90 66 37 1 2 63 101 71 37 40 26 51 22 25 106 94 95 107 29 26 50 37 38 36 69 100 0 0 0 0 2 0 90 0 0 1 247 2 6 0 8 0 17 0 53 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 185 0 9 0 1 244 184 0 0 16 185 0 15 0 1 244 48 49 19 51 50 22 21 20 6 43 1 55 50 54 53 52 38 43 1 17 90 143 129 141 140 126 147 145 93 89 89 93 62 2 6 129 128 129 132 65 99 97 91 100 254 125 0 0 0 0 1 0 90 0 0 1 170 2 6 0 11 0 77 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 184 0 0 16 185 0 2 0 1 244 186 0 6 0 0 0 10 17 18 57 184 0 6 47 185 0 4 0 1 244 184 0 10 16 185 0 8 0 1 244 48 49 19 33 21 35 21 51 21 35 21 51 21 33 90 1 70 243 206 206 253 254 176 2 6 66 150 63 173 66 0 0 1 0 90 0 0 1 161 2 6 0 9 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 187 0 5 0 1 0 6 0 4 43 184 0 0 16 185 0 2 0 1 244 48 49 19 33 21 35 21 51 21 35 21 35 90 1 71 244 207 207 83 2 6 68 163 64 223 0 0 0 1 0 52 255 244 1 227 2 18 0 33 0 67 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 10 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 187 0 25 0 1 0 22 0 4 43 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 18 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 53 35 53 51 21 14 1 35 34 46 2 52 39 70 96 56 57 78 26 46 21 53 40 81 96 90 87 29 48 16 112 188 29 90 57 56 93 68 38 1 2 64 101 70 37 41 24 51 20 26 106 96 94 107 14 14 127 61 226 26 33 36 69 100 0 0 0 1 0 90 0 0 1 248 2 6 0 11 0 81 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 10 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 4 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 187 0 3 0 1 0 8 0 4 43 48 49 19 51 21 51 53 51 17 35 53 35 21 35 90 83 248 83 83 248 83 2 6 211 211 253 250 235 235 0 0 0 1 0 90 0 0 0 173 2 6 0 3 0 37 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 48 49 19 51 17 35 90 83 83 2 6 253 250 0 0 0 1 0 31 255 244 1 95 2 6 0 15 0 43 0 184 0 0 69 88 184 0 6 47 27 185 0 6 0 10 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 185 0 2 0 1 244 48 49 55 22 51 50 54 53 17 51 17 20 14 2 35 34 39 89 36 57 42 43 84 19 39 61 42 107 52 117 58 47 57 1 99 254 151 35 61 46 27 88 0 0 0 0 1 0 90 0 0 1 254 2 6 0 12 0 101 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 10 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 3 0 7 0 0 17 18 57 186 0 6 0 0 0 7 17 18 57 186 0 9 0 7 0 0 17 18 57 48 49 19 51 21 51 55 51 7 19 35 3 7 21 35 90 83 3 218 92 173 197 89 158 90 83 2 6 246 246 200 254 194 1 4 95 165 0 0 0 1 0 90 0 0 1 154 2 6 0 5 0 43 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 4 47 27 185 0 4 0 4 62 89 185 0 2 0 1 244 48 49 19 51 17 51 21 33 90 83 237 254 192 2 6 254 63 69 0 0 0 0 1 0 90 0 0 2 45 2 6 0 29 0 111 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 10 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 184 0 0 69 88 184 0 28 47 27 185 0 28 0 4 62 89 186 0 3 0 0 0 28 17 18 57 186 0 15 0 8 0 6 17 18 57 186 0 18 0 0 0 8 17 18 57 186 0 22 0 0 0 28 17 18 57 48 49 19 51 19 23 51 55 19 51 17 35 17 52 62 2 55 35 15 1 35 47 1 35 30 3 21 17 35 90 93 102 37 4 38 100 93 75 2 2 3 2 4 45 99 40 99 45 4 1 4 3 2 75 2 6 254 248 103 103 1 8 253 250 1 0 18 42 43 43 18 117 253 253 117 18 42 44 42 18 255 0 0 0 0 0 1 0 90 0 0 1 239 2 6 0 19 0 91 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 10 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 186 0 4 0 10 0 8 17 18 57 186 0 14 0 0 0 18 17 18 57 48 49 19 51 19 23 51 46 1 61 1 51 17 35 3 39 35 30 1 29 1 35 90 84 191 60 4 3 8 77 83 192 60 4 3 8 77 2 6 254 206 111 39 93 42 243 253 250 1 50 111 41 89 42 245 0 0 0 2 0 52 255 244 2 26 2 18 0 19 0 31 0 53 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 10 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 20 0 1 244 184 0 10 16 185 0 26 0 1 244 48 49 5 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 1 39 54 89 64 36 36 64 89 54 53 89 65 36 36 65 89 53 72 85 85 72 72 85 85 12 38 70 102 63 63 100 69 37 37 69 100 63 63 102 70 38 70 109 94 94 105 105 94 94 109 0 2 0 90 0 0 1 220 2 6 0 14 0 23 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 4 62 89 187 0 15 0 1 0 11 0 4 43 184 0 0 16 185 0 21 0 1 244 48 49 19 51 50 30 2 21 20 14 2 43 1 21 35 19 50 54 53 52 38 43 1 21 90 177 46 77 55 31 31 56 76 46 94 83 171 69 65 67 69 86 2 6 16 37 60 44 42 63 40 20 196 1 0 50 51 53 42 196 0 0 2 0 51 255 104 2 35 2 18 0 11 0 44 0 75 0 184 0 0 69 88 184 0 28 47 27 185 0 28 0 10 62 89 184 0 0 69 88 184 0 18 47 27 185 0 18 0 4 62 89 187 0 41 0 1 0 15 0 4 43 184 0 18 16 185 0 3 0 1 244 184 0 28 16 185 0 9 0 1 244 184 0 18 16 184 0 38 208 48 49 19 20 22 51 50 54 53 52 38 35 34 6 1 14 1 35 34 38 39 46 3 53 52 62 2 51 50 30 2 21 20 14 2 7 30 1 51 50 54 55 137 85 72 72 85 85 72 72 85 1 154 14 44 26 81 106 25 45 74 52 29 36 64 89 54 53 89 65 36 29 53 73 45 19 69 47 18 29 12 1 5 96 111 110 97 94 105 105 254 19 7 7 80 63 7 44 69 93 57 63 100 69 37 37 69 100 63 57 93 69 44 7 42 34 5 4 0 0 2 0 90 0 0 1 231 2 6 0 7 0 23 0 84 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 10 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 187 0 1 0 1 0 9 0 4 43 184 0 13 16 185 0 6 0 1 244 186 0 22 0 1 0 9 17 18 57 48 49 19 51 50 53 52 38 43 1 19 39 35 21 35 17 51 50 30 2 21 20 6 7 23 173 87 129 67 63 86 225 129 96 83 179 43 73 53 30 65 54 138 1 12 94 50 40 254 60 208 208 2 6 15 36 58 42 59 75 15 218 0 1 0 42 255 244 1 180 2 18 0 49 0 73 0 184 0 0 69 88 184 0 22 47 27 185 0 22 0 10 62 89 184 0 0 69 88 184 0 46 47 27 185 0 46 0 4 62 89 185 0 3 0 1 244 184 0 22 16 185 0 29 0 1 244 186 0 6 0 46 0 29 17 18 57 186 0 32 0 22 0 3 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 47 1 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 31 1 30 3 21 20 14 2 35 34 38 39 86 33 81 46 51 55 13 23 31 18 65 27 47 35 21 27 48 66 39 57 86 29 43 26 66 38 45 51 45 40 66 28 48 35 19 27 50 71 45 63 101 37 120 30 36 44 35 19 26 19 15 8 26 10 26 33 44 28 32 53 37 21 38 25 54 23 28 38 35 31 34 16 26 11 23 33 45 33 32 56 40 23 42 33 0 0 0 1 0 28 0 0 1 183 2 6 0 7 0 55 0 184 0 0 69 88 184 0 2 47 27 185 0 2 0 10 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 4 62 89 184 0 2 16 185 0 0 0 1 244 184 0 4 208 184 0 5 208 48 49 19 35 53 33 21 35 17 35 192 164 1 155 164 83 1 194 68 68 254 62 0 0 0 0 1 0 87 255 244 1 240 2 6 0 25 0 60 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 10 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 185 0 7 0 1 244 48 49 19 51 17 20 30 2 51 50 62 2 53 17 51 17 20 14 2 35 34 46 2 53 87 83 18 33 45 27 27 45 33 19 79 30 54 75 45 44 75 55 31 2 6 254 209 45 60 36 16 16 36 60 45 1 47 254 210 64 87 54 23 23 54 87 64 0 0 1 0 0 0 0 1 191 2 6 0 13 0 64 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 10 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 186 0 5 0 0 0 12 17 18 57 48 49 17 51 19 30 1 23 51 62 1 55 19 51 3 35 87 85 14 24 14 4 15 23 14 83 84 175 96 2 6 254 244 45 80 45 45 80 45 1 12 253 250 0 0 1 0 23 0 0 2 148 2 6 0 33 0 118 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 10 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 10 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 4 62 89 186 0 6 0 22 0 0 17 18 57 186 0 15 0 22 0 20 17 18 57 186 0 28 0 10 0 22 17 18 57 48 49 19 51 19 30 1 23 51 62 1 55 19 51 19 30 1 23 51 62 1 55 19 51 3 35 3 46 1 39 35 14 1 7 3 35 23 82 55 8 16 8 3 9 21 10 74 72 72 10 20 11 4 8 14 8 55 77 113 97 80 8 12 6 4 7 12 8 78 96 2 6 254 242 42 83 42 42 83 42 1 14 254 242 42 83 42 42 83 42 1 14 253 250 1 34 31 59 29 29 59 31 254 222 0 0 0 1 0 15 0 0 1 182 2 6 0 25 0 111 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 10 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 10 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 4 62 89 186 0 0 0 1 0 24 17 18 57 186 0 7 0 14 0 1 17 18 57 186 0 13 0 14 0 11 17 18 57 186 0 20 0 14 0 1 17 18 57 48 49 19 39 51 23 30 1 23 51 62 1 63 1 51 7 19 35 39 46 1 39 35 14 1 15 1 35 176 150 91 70 10 19 13 4 11 19 9 67 88 150 161 92 76 11 22 13 4 11 21 11 74 88 1 11 251 122 17 37 23 23 37 17 122 255 254 249 128 20 41 24 24 41 20 128 0 0 1 255 255 0 0 1 160 2 6 0 15 0 64 0 184 0 0 69 88 184 0 1 47 27 185 0 1 0 10 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 10 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 186 0 7 0 14 0 1 17 18 57 48 49 55 3 51 23 30 1 23 51 62 1 63 1 51 3 21 35 166 167 88 66 13 27 14 4 14 25 14 66 86 167 83 196 1 66 137 29 55 29 29 55 29 137 254 190 196 0 0 1 0 45 0 0 1 177 2 6 0 9 0 61 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 10 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 55 1 33 53 33 21 1 33 21 33 45 1 27 254 254 1 103 254 229 1 31 254 124 49 1 145 68 49 254 112 69 0 0 255 255 0 3 0 0 1 212 2 191 2 38 3 91 0 0 0 7 2 247 0 234 255 141 255 255 0 3 0 0 1 212 2 191 2 38 3 91 0 0 0 7 2 249 0 234 255 141 255 255 0 3 0 0 1 212 2 191 2 38 3 91 0 0 0 7 2 251 0 234 255 141 255 255 0 3 0 0 1 212 2 192 2 38 3 91 0 0 0 7 2 253 0 234 255 141 255 255 0 3 0 0 1 212 2 186 2 38 3 91 0 0 0 7 3 5 0 234 255 141 255 255 0 3 0 0 1 212 2 159 2 38 3 91 0 0 0 7 2 255 0 234 255 141 255 255 0 3 0 0 1 212 2 191 2 38 3 91 0 0 0 7 3 1 0 234 255 141 255 255 0 3 0 0 1 212 2 248 2 38 3 91 0 0 0 7 3 9 0 234 255 141 255 255 0 3 0 0 1 212 2 191 2 38 3 91 0 0 0 7 3 13 0 234 255 141 255 255 0 3 255 50 1 212 2 6 2 38 3 91 0 0 0 7 3 19 0 234 0 0 255 255 0 3 0 0 1 212 2 245 2 38 3 91 0 0 0 7 3 7 0 234 255 141 255 255 0 3 0 0 1 212 2 254 2 38 3 91 0 0 0 7 3 37 0 234 255 141 255 255 0 3 0 0 1 212 2 254 2 38 3 91 0 0 0 7 3 39 0 234 255 141 255 255 0 3 0 0 1 212 3 23 2 38 3 91 0 0 0 7 3 41 0 234 255 141 255 255 0 3 0 0 1 212 3 56 2 38 3 91 0 0 0 7 3 43 0 234 255 141 255 255 0 3 255 50 1 212 2 191 2 38 3 91 0 0 0 39 2 251 0 234 255 141 0 7 3 19 0 234 0 0 255 255 0 3 0 0 1 212 3 24 2 38 3 91 0 0 0 7 3 45 0 234 255 141 255 255 0 3 0 0 1 212 3 24 2 38 3 91 0 0 0 7 3 47 0 234 255 141 255 255 0 3 0 0 1 212 3 69 2 38 3 91 0 0 0 7 3 49 0 234 255 141 255 255 0 3 0 0 1 212 3 56 2 38 3 91 0 0 0 7 3 51 0 234 255 141 255 255 0 3 255 50 1 212 2 191 2 38 3 91 0 0 0 39 3 1 0 234 255 141 0 7 3 19 0 234 0 0 0 2 0 3 255 44 1 242 2 6 0 9 0 37 0 126 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 10 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 4 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 184 0 0 69 88 184 0 13 47 27 185 0 13 0 6 62 89 186 0 5 0 27 0 25 17 18 57 186 0 23 0 27 0 25 17 18 57 184 0 23 47 185 0 9 0 1 244 184 0 13 16 184 0 35 220 48 49 37 39 46 1 39 35 14 1 15 1 1 14 1 35 34 38 53 52 62 2 55 35 39 35 7 35 19 51 19 14 1 21 20 22 51 50 55 1 56 24 14 24 14 4 14 24 14 24 1 86 14 45 20 40 56 14 22 26 13 18 48 197 48 84 185 94 186 35 45 28 18 23 19 208 74 43 83 43 44 82 43 74 254 120 11 17 44 43 20 38 32 26 9 146 146 2 6 253 250 14 62 31 23 23 14 0 0 2 0 8 0 0 2 151 2 6 0 6 0 22 0 104 0 184 0 0 69 88 184 0 14 47 27 185 0 14 0 10 62 89 184 0 0 69 88 184 0 8 47 27 185 0 8 0 4 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 187 0 0 0 1 0 10 0 4 43 187 0 19 0 1 0 20 0 4 43 186 0 1 0 14 0 12 17 18 57 184 0 8 16 185 0 7 0 1 244 184 0 14 16 185 0 16 0 1 244 48 49 37 53 35 14 1 15 1 5 21 33 53 35 7 35 1 33 21 35 21 51 21 35 21 1 86 3 22 43 22 48 1 203 254 191 172 76 86 1 30 1 103 227 190 190 203 252 41 83 39 89 137 66 141 141 2 6 66 150 63 173 0 3 0 33 0 0 1 249 2 6 0 12 0 21 0 45 0 97 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 10 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 4 62 89 187 0 9 0 1 0 10 0 4 43 187 0 14 0 1 0 6 0 4 43 184 0 30 16 185 0 0 0 1 244 184 0 36 16 185 0 20 0 1 244 184 0 10 16 184 0 32 208 184 0 9 16 184 0 34 208 184 0 34 47 48 49 37 50 54 53 52 38 43 1 21 51 21 35 21 53 51 50 54 53 52 38 43 1 23 30 1 21 20 14 2 43 1 53 35 53 55 17 51 50 30 2 21 20 6 7 1 27 65 77 73 69 90 126 126 78 68 59 62 62 81 191 56 65 31 57 78 46 184 76 76 170 43 72 52 29 45 46 55 45 53 47 45 73 40 77 242 45 42 42 37 188 11 59 54 39 56 38 18 132 36 4 1 90 14 30 49 35 38 61 12 255 255 0 90 255 85 1 229 2 6 2 38 3 92 0 0 0 7 3 27 1 31 0 0 255 255 0 52 255 43 1 215 2 18 2 38 3 93 0 0 0 7 3 23 1 38 0 0 255 255 0 52 255 244 1 215 2 191 2 38 3 93 0 0 0 7 2 249 1 38 255 141 255 255 0 52 255 244 1 215 2 191 2 38 3 93 0 0 0 7 2 251 1 38 255 141 255 255 0 52 255 244 1 215 2 191 2 38 3 93 0 0 0 7 3 13 1 38 255 141 255 255 0 52 255 244 1 215 2 194 2 38 3 93 0 0 0 7 3 3 1 38 255 141 255 255 0 90 0 0 1 247 2 191 0 38 3 94 0 0 0 7 3 13 1 27 255 141 255 255 0 90 255 50 1 247 2 6 0 38 3 94 0 0 0 7 3 19 1 24 0 0 255 255 0 90 255 85 1 247 2 6 0 38 3 94 0 0 0 7 3 27 1 24 0 0 255 255 0 33 0 0 2 11 2 6 2 6 4 40 0 0 255 255 0 90 0 0 1 170 2 191 2 38 3 95 0 0 0 7 2 247 1 8 255 141 255 255 0 90 0 0 1 170 2 191 2 38 3 95 0 0 0 7 2 249 1 8 255 141 255 255 0 90 0 0 1 170 2 191 2 38 3 95 0 0 0 7 2 251 1 8 255 141 255 255 0 90 0 0 1 170 2 191 2 38 3 95 0 0 0 7 3 13 1 8 255 141 255 255 0 90 0 0 1 170 2 186 2 38 3 95 0 0 0 7 3 5 1 8 255 141 255 255 0 90 0 0 1 170 2 159 2 38 3 95 0 0 0 7 2 255 1 8 255 141 255 255 0 90 0 0 1 170 2 191 2 38 3 95 0 0 0 7 3 1 1 8 255 141 255 255 0 90 0 0 1 170 2 194 2 38 3 95 0 0 0 7 3 3 1 8 255 141 255 255 0 90 255 50 1 170 2 6 2 38 3 95 0 0 0 7 3 19 1 10 0 0 255 255 0 90 0 0 1 170 2 245 2 38 3 95 0 0 0 7 3 7 1 8 255 141 255 255 0 90 0 0 1 170 2 192 2 38 3 95 0 0 0 7 2 253 1 8 255 141 255 255 0 90 0 0 1 242 2 254 2 38 3 95 0 0 0 7 3 37 1 8 255 141 255 255 0 90 0 0 1 192 2 254 2 38 3 95 0 0 0 7 3 39 1 8 255 141 255 255 0 90 0 0 1 215 3 23 2 38 3 95 0 0 0 7 3 41 1 8 255 141 255 255 0 90 0 0 1 170 3 56 2 38 3 95 0 0 0 7 3 43 1 8 255 141 255 255 0 90 255 50 1 170 2 191 2 38 3 95 0 0 0 39 2 251 1 8 255 141 0 7 3 19 1 10 0 0 0 1 0 90 255 44 1 186 2 6 0 33 0 119 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 6 62 89 184 0 0 69 88 184 0 10 47 27 185 0 10 0 4 62 89 184 0 0 69 88 184 0 32 47 27 185 0 32 0 4 62 89 184 0 0 16 185 0 2 0 1 244 186 0 6 0 0 0 10 17 18 57 184 0 6 47 185 0 5 0 1 244 184 0 32 16 185 0 8 0 1 244 184 0 26 16 184 0 19 220 48 49 19 33 21 35 21 51 21 35 21 51 21 35 14 3 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 35 90 1 70 243 206 206 253 3 17 33 26 16 30 18 12 19 9 23 14 46 20 40 55 46 28 251 2 6 66 150 63 173 66 2 19 29 37 20 23 23 7 7 45 11 17 44 43 42 65 18 0 255 255 0 90 0 0 1 170 3 67 2 38 3 95 0 0 0 7 4 89 1 8 255 141 255 255 0 52 255 244 1 227 2 191 2 38 3 97 0 0 0 7 2 251 1 52 255 141 255 255 0 52 255 244 1 227 2 191 2 38 3 97 0 0 0 7 3 1 1 52 255 141 255 255 0 52 255 244 1 227 2 194 2 38 3 97 0 0 0 7 3 3 1 52 255 141 255 255 0 52 255 40 1 227 2 18 2 38 3 97 0 0 0 7 3 21 1 49 0 0 255 255 0 52 255 244 1 227 2 191 2 38 3 97 0 0 0 7 3 13 1 52 255 141 255 255 0 52 255 244 1 227 2 159 2 38 3 97 0 0 0 7 2 255 1 52 255 141 255 255 0 52 255 244 1 227 2 192 2 38 3 97 0 0 0 7 2 253 1 52 255 141 255 255 0 90 0 0 1 248 2 191 2 38 3 98 0 0 0 7 2 251 1 41 255 141 255 255 0 90 255 50 1 248 2 6 2 38 3 98 0 0 0 7 3 19 1 41 0 0 255 255 0 90 255 50 1 248 2 6 2 38 3 98 0 0 0 7 3 26 1 41 0 0 0 2 0 32 0 0 2 86 2 6 0 3 0 23 0 133 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 10 62 89 184 0 0 69 88 184 0 21 47 27 185 0 21 0 10 62 89 184 0 0 69 88 184 0 6 47 27 185 0 6 0 4 62 89 184 0 0 69 88 184 0 11 47 27 185 0 11 0 4 62 89 186 0 3 0 16 0 11 17 18 57 184 0 3 47 184 0 0 220 184 0 4 208 184 0 3 16 185 0 9 0 1 244 184 0 0 16 184 0 13 208 184 0 0 16 185 0 19 0 1 244 184 0 14 208 184 0 19 16 184 0 23 208 48 49 1 35 21 51 55 35 17 35 53 35 21 35 17 35 53 55 53 51 21 51 53 51 21 51 1 185 248 248 157 74 83 248 83 78 78 83 248 83 74 1 128 80 80 254 128 239 239 1 128 41 5 88 88 88 88 255 255 0 0 0 0 0 182 2 191 2 38 3 99 0 0 0 7 2 247 0 131 255 141 255 255 0 80 0 0 1 6 2 191 2 38 3 99 0 0 0 7 2 249 0 131 255 141 255 255 255 251 0 0 1 11 2 191 2 38 3 99 0 0 0 7 2 251 0 131 255 141 255 255 255 242 0 0 1 20 2 192 2 38 3 99 0 0 0 7 2 253 0 131 255 141 255 255 255 252 0 0 1 10 2 186 2 38 3 99 0 0 0 7 3 5 0 131 255 141 255 255 0 7 0 0 0 255 2 159 2 38 3 99 0 0 0 7 2 255 0 131 255 141 255 255 0 74 0 0 0 188 2 194 2 38 3 99 0 0 0 7 3 3 0 131 255 141 255 255 255 251 0 0 1 11 2 191 2 38 3 99 0 0 0 7 3 13 0 131 255 141 255 255 0 67 0 0 0 214 2 245 2 38 3 99 0 0 0 7 3 7 0 131 255 141 255 255 0 77 255 50 0 185 2 6 2 38 3 99 0 0 0 7 3 19 0 131 0 0 0 1 0 43 255 44 0 219 2 6 0 21 0 75 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 2 47 27 185 0 2 0 4 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 6 62 89 184 0 8 220 48 49 19 51 17 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 54 55 35 90 83 31 34 30 17 22 19 23 15 45 20 40 56 43 24 20 2 6 253 250 24 52 31 23 23 14 45 11 17 44 43 43 60 22 0 0 255 255 0 8 0 0 0 254 2 191 2 38 3 99 0 0 0 7 3 1 0 131 255 141 255 255 0 31 255 244 1 183 2 191 2 38 3 100 0 0 0 7 2 251 1 47 255 141 255 255 0 90 255 40 1 254 2 6 2 38 3 101 0 0 0 7 3 21 1 43 0 0 255 255 0 90 255 85 1 254 2 6 2 38 3 101 0 0 0 7 3 27 1 43 0 0 255 255 0 86 0 0 1 154 2 191 2 38 3 102 0 0 0 7 2 249 0 137 255 141 255 255 0 90 0 0 1 154 2 103 2 38 3 102 0 0 0 7 3 52 1 81 255 111 255 255 0 90 255 40 1 154 2 6 2 38 3 102 0 0 0 7 3 21 1 4 0 0 255 255 0 90 0 0 1 154 2 6 2 38 3 102 0 0 0 7 1 253 0 224 0 237 255 255 0 90 255 50 1 154 2 6 2 38 3 102 0 0 0 7 3 19 1 4 0 0 255 255 0 13 255 50 1 154 2 159 2 38 3 102 0 0 0 39 2 255 0 137 255 141 0 7 3 19 1 4 0 0 255 255 0 90 255 85 1 154 2 6 2 38 3 102 0 0 0 7 3 27 1 4 0 0 0 1 0 13 0 0 1 159 2 6 0 13 0 101 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 10 62 89 184 0 0 69 88 184 0 1 47 27 185 0 1 0 4 62 89 187 0 10 0 1 0 11 0 4 43 187 0 5 0 1 0 4 0 4 43 184 0 1 16 185 0 0 0 1 244 186 0 3 0 1 0 7 17 18 57 184 0 3 16 185 0 6 0 1 244 184 0 3 16 184 0 12 208 185 0 9 0 1 244 48 49 37 21 33 53 7 53 55 17 51 21 55 21 7 21 1 159 254 192 82 82 84 155 155 69 69 174 46 65 46 1 23 241 84 66 83 143 0 255 255 0 90 255 50 2 45 2 6 2 38 3 103 0 0 0 7 3 19 1 67 0 0 255 255 0 90 0 0 1 239 2 191 2 38 3 104 0 0 0 7 2 249 1 44 255 141 255 255 0 90 0 0 1 239 2 191 2 38 3 104 0 0 0 7 3 13 1 44 255 141 255 255 0 90 0 0 1 239 2 192 2 38 3 104 0 0 0 7 2 253 1 44 255 141 255 255 0 90 255 40 1 239 2 6 2 38 3 104 0 0 0 7 3 21 1 43 0 0 255 255 0 90 0 0 1 239 2 194 2 38 3 104 0 0 0 7 3 3 1 44 255 141 255 255 0 90 255 50 1 239 2 6 2 38 3 104 0 0 0 7 3 19 1 43 0 0 255 255 0 90 255 85 1 239 2 6 2 38 3 104 0 0 0 7 3 27 1 43 0 0 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 2 247 1 38 255 141 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 2 249 1 38 255 141 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 2 251 1 38 255 141 255 255 0 52 255 244 2 26 2 192 2 38 3 105 0 0 0 7 2 253 1 38 255 141 255 255 0 52 255 244 2 26 2 186 2 38 3 105 0 0 0 7 3 5 1 38 255 141 255 255 0 52 255 244 2 26 2 159 2 38 3 105 0 0 0 7 2 255 1 38 255 141 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 3 11 1 38 255 141 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 3 13 1 38 255 141 255 255 0 52 255 50 2 26 2 18 2 38 3 105 0 0 0 7 3 19 1 39 0 0 255 255 0 52 255 244 2 26 2 245 2 38 3 105 0 0 0 7 3 7 1 38 255 141 255 255 0 52 255 244 2 26 2 254 2 38 3 105 0 0 0 7 3 37 1 38 255 141 255 255 0 52 255 244 2 26 2 254 2 38 3 105 0 0 0 7 3 39 1 38 255 141 255 255 0 52 255 244 2 26 3 23 2 38 3 105 0 0 0 7 3 41 1 38 255 141 255 255 0 52 255 244 2 26 3 56 2 38 3 105 0 0 0 7 3 43 1 38 255 141 255 255 0 52 255 50 2 26 2 191 2 38 3 105 0 0 0 39 2 251 1 38 255 141 0 7 3 19 1 39 0 0 0 3 0 47 255 233 2 31 2 30 0 7 0 15 0 42 0 133 0 184 0 0 69 88 184 0 37 47 27 185 0 37 0 10 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 4 62 89 186 0 0 0 24 0 37 17 18 57 185 0 2 0 1 244 186 0 7 0 24 0 37 17 18 57 186 0 8 0 37 0 24 17 18 57 184 0 37 16 185 0 10 0 1 244 186 0 15 0 24 0 37 17 18 57 186 0 16 0 37 0 24 17 18 57 186 0 26 0 24 0 37 17 18 57 186 0 29 0 24 0 37 17 18 57 186 0 40 0 37 0 24 17 18 57 48 49 55 22 51 50 54 53 52 47 1 38 35 34 6 21 20 23 1 30 1 21 20 14 2 35 34 39 7 39 55 46 1 53 52 62 2 51 50 22 23 55 23 188 42 65 73 87 25 28 41 66 74 87 26 1 67 26 29 36 65 89 53 93 63 56 36 60 26 29 36 64 89 54 46 78 31 56 37 99 44 110 96 70 50 39 43 107 95 73 50 1 49 34 91 57 63 102 70 38 54 65 29 70 35 93 57 63 100 69 37 27 26 65 29 0 2 0 52 0 0 2 174 2 6 0 16 0 25 0 97 0 184 0 0 69 88 184 0 3 47 27 185 0 3 0 10 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 3 16 185 0 5 0 1 244 186 0 9 0 3 0 14 17 18 57 184 0 9 47 185 0 8 0 1 244 184 0 14 16 185 0 12 0 1 244 184 0 3 16 185 0 17 0 1 244 184 0 14 16 185 0 23 0 1 244 48 49 19 52 54 51 33 21 35 21 51 21 35 21 51 21 33 34 38 1 34 6 21 20 22 59 1 17 52 143 129 1 96 229 192 192 239 254 154 132 144 1 18 97 91 91 97 38 1 1 129 132 66 150 63 173 66 129 1 68 99 97 91 100 1 131 0 0 0 0 2 0 52 255 244 2 54 2 113 0 11 0 44 0 73 0 184 0 0 69 88 184 0 36 47 27 185 0 36 0 10 62 89 184 0 0 69 88 184 0 26 47 27 185 0 26 0 4 62 89 185 0 0 0 1 244 184 0 36 16 185 0 6 0 1 244 186 0 18 0 26 0 36 17 18 57 184 0 18 16 185 0 38 0 1 244 48 49 37 50 54 53 52 38 35 34 6 21 20 22 1 30 1 21 20 6 7 30 1 21 20 14 2 35 34 46 2 53 52 62 2 51 50 23 62 1 53 52 38 39 1 39 72 85 85 72 72 85 85 1 63 11 13 52 42 32 34 36 65 89 53 54 89 64 36 36 64 89 54 77 59 33 34 8 7 58 109 94 94 105 105 94 94 109 2 55 14 32 19 42 51 11 35 98 62 63 102 70 38 38 70 102 63 63 100 69 37 39 7 29 27 11 21 10 0 0 0 255 255 0 52 255 244 2 54 2 191 2 38 3 228 0 0 0 7 2 249 1 38 255 141 255 255 0 52 255 244 2 54 2 191 2 38 3 228 0 0 0 7 2 247 1 38 255 141 255 255 0 52 255 244 2 54 2 245 2 38 3 228 0 0 0 7 3 7 1 38 255 141 255 255 0 52 255 244 2 54 2 192 2 38 3 228 0 0 0 7 2 253 1 38 255 141 255 255 0 52 255 50 2 54 2 113 2 38 3 228 0 0 0 7 3 19 1 39 0 0 0 2 0 52 255 44 2 26 2 18 0 36 0 48 0 88 0 184 0 0 69 88 184 0 32 47 27 185 0 32 0 10 62 89 184 0 0 69 88 184 0 16 47 27 185 0 16 0 6 62 89 184 0 0 69 88 184 0 22 47 27 185 0 22 0 4 62 89 184 0 3 208 184 0 16 16 185 0 9 0 1 244 184 0 22 16 185 0 37 0 1 244 184 0 32 16 185 0 43 0 1 244 48 49 1 20 6 7 14 1 21 20 22 51 50 54 55 23 14 1 35 34 38 53 52 54 55 46 3 53 52 62 2 51 50 30 2 3 50 54 53 52 38 35 34 6 21 20 22 2 26 87 80 41 37 30 18 12 19 9 23 14 46 20 40 55 35 26 55 88 62 33 36 64 89 54 53 89 65 36 243 72 85 85 72 72 85 85 1 5 105 129 34 18 56 26 23 23 7 7 45 11 17 44 43 33 59 22 1 39 71 99 62 63 100 69 37 37 69 100 254 246 109 94 94 105 105 94 94 109 0 0 255 255 0 52 255 244 2 26 2 191 2 38 3 105 0 0 0 7 3 1 1 38 255 141 255 255 0 52 255 244 2 26 3 67 2 38 3 105 0 0 0 7 4 89 1 38 255 141 255 255 0 90 0 0 1 231 2 191 2 38 3 108 0 0 0 7 2 249 1 26 255 141 255 255 0 90 0 0 1 231 2 191 2 38 3 108 0 0 0 7 3 13 1 26 255 141 255 255 0 90 255 40 1 231 2 6 2 38 3 108 0 0 0 7 3 21 1 29 0 0 255 255 0 90 255 50 1 231 2 6 2 38 3 108 0 0 0 7 3 19 1 29 0 0 255 255 0 90 255 50 1 231 2 159 2 38 3 108 0 0 0 39 2 255 1 26 255 141 0 7 3 19 1 29 0 0 255 255 0 90 255 85 1 231 2 6 2 38 3 108 0 0 0 7 3 27 1 29 0 0 255 255 0 42 255 244 1 180 2 191 2 38 3 109 0 0 0 7 2 249 0 254 255 141 255 255 0 42 255 244 1 180 2 191 2 38 3 109 0 0 0 7 2 251 0 254 255 141 255 255 0 42 255 244 1 180 2 191 2 38 3 109 0 0 0 7 3 13 0 254 255 141 255 255 0 42 255 43 1 180 2 18 2 38 3 109 0 0 0 7 3 23 0 244 0 0 255 255 0 42 255 40 1 180 2 18 2 38 3 109 0 0 0 7 3 21 1 3 0 0 255 255 0 42 255 244 1 180 2 194 2 38 3 109 0 0 0 7 3 3 0 254 255 141 255 255 0 42 255 50 1 180 2 18 2 38 3 109 0 0 0 7 3 19 1 3 0 0 255 255 0 42 255 244 3 142 2 18 0 38 3 109 0 0 0 7 3 109 1 218 0 0 0 1 0 91 255 244 2 39 2 18 0 42 0 80 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 10 62 89 184 0 0 69 88 184 0 41 47 27 185 0 41 0 4 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 4 62 89 186 0 9 0 17 0 5 17 18 57 185 0 24 0 1 244 184 0 5 16 185 0 37 0 1 244 48 49 19 52 62 2 51 50 22 23 7 30 1 21 20 14 2 35 34 38 39 55 30 1 51 50 54 53 52 46 2 47 1 55 46 1 35 34 6 21 17 35 91 30 57 82 53 73 94 22 113 84 78 23 42 60 38 50 78 26 43 24 51 29 41 44 14 35 60 45 6 113 14 54 42 63 71 84 1 71 46 75 53 29 74 59 113 17 73 58 30 54 41 23 35 26 50 23 21 46 36 18 32 27 20 6 46 114 26 37 75 75 254 199 0 0 255 255 0 28 0 0 1 183 2 191 2 38 3 110 0 0 0 7 3 13 0 233 255 141 255 255 0 28 255 43 1 183 2 6 2 38 3 110 0 0 0 7 3 23 0 228 0 0 255 255 0 28 255 40 1 183 2 6 2 38 3 110 0 0 0 7 3 21 0 233 0 0 255 255 0 28 255 50 1 183 2 6 2 38 3 110 0 0 0 7 3 19 0 233 0 0 255 255 0 28 255 85 1 183 2 6 2 38 3 110 0 0 0 7 3 27 0 233 0 0 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 2 247 1 35 255 141 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 2 249 1 35 255 141 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 2 251 1 35 255 141 255 255 0 87 255 244 1 240 2 192 2 38 3 111 0 0 0 7 2 253 1 35 255 141 255 255 0 87 255 244 1 240 2 186 2 38 3 111 0 0 0 7 3 5 1 35 255 141 255 255 0 87 255 244 1 240 2 159 2 38 3 111 0 0 0 7 2 255 1 35 255 141 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 3 1 1 35 255 141 255 255 0 87 255 244 1 240 2 248 2 38 3 111 0 0 0 7 3 9 1 35 255 141 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 3 11 1 35 255 141 255 255 0 87 255 244 1 240 2 191 2 38 3 111 0 0 0 7 3 13 1 35 255 141 255 255 0 87 255 244 1 240 3 24 2 38 3 111 0 0 0 7 3 29 1 35 255 141 255 255 0 87 255 244 1 240 3 67 2 38 3 111 0 0 0 7 3 31 1 35 255 141 255 255 0 87 255 244 1 240 3 67 2 38 3 111 0 0 0 7 3 33 1 35 255 141 255 255 0 87 255 244 1 240 3 67 2 38 3 111 0 0 0 7 3 35 1 35 255 141 255 255 0 87 255 50 1 240 2 6 2 38 3 111 0 0 0 7 3 19 1 35 0 0 255 255 0 87 255 244 1 240 2 245 2 38 3 111 0 0 0 7 3 7 1 35 255 141 0 1 0 87 255 44 1 240 2 6 0 45 0 93 0 184 0 0 69 88 184 0 31 47 27 185 0 31 0 10 62 89 184 0 0 69 88 184 0 44 47 27 185 0 44 0 10 62 89 184 0 0 69 88 184 0 17 47 27 185 0 17 0 6 62 89 184 0 0 69 88 184 0 25 47 27 185 0 25 0 4 62 89 184 0 5 208 184 0 17 16 184 0 11 220 184 0 25 16 185 0 38 0 1 244 48 49 37 20 14 2 7 14 1 21 20 22 51 50 55 23 14 1 35 34 38 53 52 62 2 55 46 3 53 17 51 17 20 30 2 51 50 62 2 53 17 51 1 240 19 33 47 28 39 40 30 17 22 19 22 14 45 20 40 56 13 19 23 9 45 74 54 29 83 18 33 45 27 27 45 33 19 79 216 53 73 50 34 13 19 56 25 23 23 14 45 11 17 44 43 21 33 28 23 9 1 25 53 86 62 1 46 254 209 45 60 36 16 16 36 60 45 1 47 0 1 0 87 255 244 2 94 2 143 0 39 0 72 0 184 0 0 69 88 184 0 20 47 27 185 0 20 0 10 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 10 62 89 184 0 0 69 88 184 0 14 47 27 185 0 14 0 4 62 89 184 0 33 16 184 0 8 220 184 0 14 16 185 0 27 0 1 244 48 49 1 30 1 21 20 14 2 7 17 20 14 2 35 34 46 2 53 17 51 17 20 30 2 51 50 62 2 53 17 51 62 1 53 52 39 2 71 10 13 18 30 40 22 30 54 75 45 44 75 55 31 83 18 33 45 27 27 45 33 19 31 42 48 14 2 143 14 32 19 25 37 25 17 4 254 246 64 87 54 23 23 54 87 64 1 46 254 209 45 60 36 16 16 36 60 45 1 47 4 28 34 22 20 0 0 0 255 255 0 87 255 244 2 94 2 191 2 38 4 18 0 0 0 7 2 249 1 35 255 141 255 255 0 87 255 244 2 94 2 191 2 38 4 18 0 0 0 7 2 247 1 35 255 141 255 255 0 87 255 244 2 94 2 245 2 38 4 18 0 0 0 7 3 7 1 35 255 141 255 255 0 87 255 244 2 94 2 192 2 38 4 18 0 0 0 7 2 253 1 35 255 141 255 255 0 87 255 50 2 94 2 143 2 38 4 18 0 0 0 7 3 19 1 35 0 0 255 255 0 23 0 0 2 148 2 191 2 38 3 113 0 0 0 7 2 247 1 86 255 141 255 255 0 23 0 0 2 148 2 191 2 38 3 113 0 0 0 7 2 249 1 86 255 141 255 255 0 23 0 0 2 148 2 191 2 38 3 113 0 0 0 7 2 251 1 86 255 141 255 255 0 23 0 0 2 148 2 186 2 38 3 113 0 0 0 7 3 5 1 86 255 141 255 255 255 255 0 0 1 160 2 191 2 38 3 115 0 0 0 7 2 247 0 208 255 141 255 255 255 255 0 0 1 160 2 191 2 38 3 115 0 0 0 7 2 249 0 208 255 141 255 255 255 255 0 0 1 160 2 191 2 38 3 115 0 0 0 7 2 251 0 208 255 141 255 255 255 255 0 0 1 160 2 186 2 38 3 115 0 0 0 7 3 5 0 208 255 141 255 255 255 255 0 0 1 160 2 194 2 38 3 115 0 0 0 7 3 3 0 208 255 141 255 255 255 255 255 50 1 160 2 6 2 38 3 115 0 0 0 7 3 19 0 207 0 0 255 255 255 255 0 0 1 160 2 245 2 38 3 115 0 0 0 7 3 7 0 208 255 141 255 255 255 255 0 0 1 160 2 192 2 38 3 115 0 0 0 7 2 253 0 208 255 141 255 255 0 45 0 0 1 177 2 191 2 38 3 116 0 0 0 7 2 249 0 250 255 141 255 255 0 45 0 0 1 177 2 191 2 38 3 116 0 0 0 7 3 13 0 250 255 141 255 255 0 45 0 0 1 177 2 194 2 38 3 116 0 0 0 7 3 3 0 250 255 141 255 255 0 45 255 50 1 177 2 6 2 38 3 116 0 0 0 7 3 19 0 253 0 0 0 2 0 33 0 0 2 11 2 6 0 12 0 25 0 89 0 184 0 0 69 88 184 0 13 47 27 185 0 13 0 10 62 89 184 0 0 69 88 184 0 19 47 27 185 0 19 0 4 62 89 185 0 0 0 1 244 184 0 13 16 185 0 6 0 1 244 186 0 10 0 13 0 19 17 18 57 184 0 10 47 185 0 9 0 1 244 184 0 10 16 184 0 22 208 184 0 9 16 184 0 23 208 48 49 55 50 54 53 52 38 43 1 21 51 21 35 21 19 50 22 21 20 6 43 1 53 35 53 55 53 255 93 88 88 93 62 126 126 60 129 141 140 126 148 76 76 65 99 97 91 100 157 47 183 1 197 129 128 129 132 248 43 4 223 0 0 0 0 2 0 90 0 0 1 220 2 6 0 16 0 25 0 57 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 10 62 89 184 0 0 69 88 184 0 15 47 27 185 0 15 0 4 62 89 187 0 17 0 1 0 13 0 4 43 187 0 23 0 1 0 3 0 4 43 48 49 19 51 21 51 50 30 2 21 20 14 2 43 1 21 35 55 50 54 53 52 38 43 1 21 90 83 94 46 76 56 31 31 56 77 45 94 83 168 69 66 67 68 85 2 6 86 16 36 60 44 42 62 41 19 112 175 48 53 53 40 194 0 0 0 2 0 58 255 244 2 18 2 18 0 6 0 35 0 73 0 184 0 0 69 88 184 0 10 47 27 185 0 10 0 10 62 89 184 0 0 69 88 184 0 20 47 27 185 0 20 0 4 62 89 185 0 3 0 1 244 186 0 6 0 10 0 20 17 18 57 184 0 6 47 185 0 28 0 1 244 184 0 10 16 185 0 32 0 1 244 48 49 55 30 1 51 50 54 55 37 62 1 51 50 30 2 21 20 14 2 35 34 46 2 53 52 54 55 33 46 1 35 34 6 7 141 5 81 63 63 84 8 254 182 30 91 58 53 87 62 34 36 63 89 52 53 85 61 33 1 1 1 130 5 81 75 39 66 25 222 78 88 86 80 243 27 38 37 70 100 63 63 100 71 38 38 71 99 60 6 11 8 86 95 31 21 0 0 3 0 32 255 244 2 7 2 18 0 11 0 23 0 68 0 150 0 184 0 0 69 88 184 0 47 47 27 185 0 47 0 10 62 89 184 0 0 69 88 184 0 29 47 27 185 0 29 0 4 62 89 184 0 0 69 88 184 0 24 47 27 185 0 24 0 4 62 89 184 0 29 16 185 0 3 0 1 244 186 0 26 0 47 0 29 17 18 57 184 0 26 16 184 0 58 220 186 0 6 0 58 0 26 17 18 57 186 0 9 0 29 0 47 17 18 57 184 0 9 16 184 0 15 220 184 0 47 16 185 0 21 0 1 244 186 0 39 0 15 0 9 17 18 57 186 0 55 0 9 0 15 17 18 57 186 0 65 0 26 0 58 17 18 57 48 49 55 20 22 51 50 54 55 46 1 39 14 1 55 20 22 23 62 1 53 52 38 35 34 6 1 38 39 14 1 35 34 46 2 53 52 62 2 55 46 1 53 52 62 2 51 50 22 21 20 14 2 7 30 1 23 62 1 55 51 14 1 7 30 1 23 108 60 45 26 51 23 40 72 29 28 36 62 14 12 38 53 23 27 30 37 1 72 62 69 32 80 51 39 64 45 24 18 30 40 21 17 20 19 35 49 30 54 59 22 35 45 23 28 72 38 25 38 12 75 17 47 33 28 52 23 140 41 48 20 17 32 74 40 20 46 233 20 43 23 22 48 33 22 33 41 254 68 15 45 27 33 23 40 53 31 26 43 35 30 13 31 60 28 26 47 35 21 63 48 25 41 36 32 15 37 69 29 31 74 42 51 91 41 17 22 6 0 0 0 2 0 55 255 244 1 194 2 18 0 15 0 27 0 53 0 184 0 0 69 88 184 0 8 47 27 185 0 8 0 10 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 185 0 16 0 1 244 184 0 8 16 185 0 22 0 1 244 48 49 23 34 46 2 53 52 54 51 50 22 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 252 45 73 51 28 106 91 91 107 28 51 74 45 51 64 64 51 50 65 64 12 38 70 102 63 127 142 142 127 63 102 70 38 66 101 106 107 96 97 106 106 101 0 0 0 0 1 0 50 0 0 0 238 2 6 0 8 0 53 0 184 0 0 69 88 184 0 5 47 27 185 0 5 0 10 62 89 184 0 0 69 88 184 0 7 47 27 185 0 7 0 4 62 89 184 0 5 16 185 0 2 0 1 244 185 0 0 0 1 244 48 49 19 35 53 62 1 55 51 17 35 156 106 41 58 26 63 82 1 169 53 7 19 14 253 250 0 0 1 0 34 0 0 1 152 2 18 0 31 0 57 0 184 0 0 69 88 184 0 15 47 27 185 0 15 0 10 62 89 184 0 0 69 88 184 0 30 47 27 185 0 30 0 4 62 89 185 0 28 0 1 244 184 0 0 208 184 0 15 16 185 0 8 0 1 244 48 49 55 62 3 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 14 2 7 62 1 59 1 21 33 40 63 99 68 35 51 52 37 61 24 46 37 86 53 40 65 45 24 35 60 82 48 22 53 27 147 254 144 48 55 91 78 67 30 44 51 35 24 45 38 42 22 41 57 34 37 73 76 81 44 2 3 70 0 1 0 23 255 244 1 151 2 18 0 47 0 77 0 184 0 0 69 88 184 0 27 47 27 185 0 27 0 10 62 89 184 0 0 69 88 184 0 44 47 27 185 0 44 0 4 62 89 187 0 12 0 1 0 11 0 4 43 184 0 44 16 185 0 3 0 1 244 184 0 27 16 185 0 20 0 1 244 186 0 36 0 11 0 12 17 18 57 48 49 55 30 1 51 50 54 53 52 46 2 35 53 50 62 2 53 52 38 35 34 6 7 39 62 1 51 50 30 2 21 20 6 7 21 30 1 21 20 14 2 35 34 38 39 63 26 71 53 48 63 18 42 69 51 45 61 37 17 50 45 35 62 26 42 34 82 51 38 65 47 26 57 46 52 71 30 53 71 40 66 95 29 114 24 36 48 40 22 35 25 14 60 14 24 33 19 36 42 28 25 51 29 37 18 35 51 32 45 60 17 3 11 66 54 35 56 39 20 44 30 0 0 2 0 36 0 0 1 191 2 6 0 9 0 20 0 87 0 184 0 0 69 88 184 0 17 47 27 185 0 17 0 10 62 89 184 0 0 69 88 184 0 12 47 27 185 0 12 0 4 62 89 186 0 10 0 17 0 12 17 18 57 184 0 10 47 185 0 20 0 1 244 184 0 0 208 186 0 4 0 17 0 12 17 18 57 184 0 10 16 184 0 14 208 184 0 0 16 184 0 16 208 48 49 37 53 52 54 55 35 14 1 15 1 5 35 21 35 53 33 53 19 51 17 51 1 37 2 1 3 13 20 14 126 1 71 77 77 254 255 241 93 77 201 133 22 59 22 20 30 21 165 63 138 138 54 1 70 254 195 0 0 1 0 31 255 244 1 158 2 6 0 36 0 67 0 184 0 0 69 88 184 0 16 47 27 185 0 16 0 10 62 89 184 0 0 69 88 184 0 33 47 27 185 0 33 0 4 62 89 187 0 23 0 1 0 11 0 4 43 184 0 33 16 185 0 3 0 1 244 184 0 16 16 185 0 18 0 1 244 48 49 55 30 1 51 50 62 2 53 52 38 35 34 6 7 39 55 33 21 35 7 62 1 51 50 30 2 21 20 14 2 35 34 38 39 69 26 67 51 25 44 32 18 64 51 31 43 25 42 18 1 36 223 12 19 41 25 36 65 49 28 33 54 71 38 68 89 30 113 23 36 15 29 40 26 50 57 17 16 25 255 68 143 9 13 20 40 61 42 43 66 45 24 44 28 0 0 2 0 62 255 244 1 186 2 18 0 11 0 44 0 77 0 184 0 0 69 88 184 0 41 47 27 185 0 41 0 10 62 89 184 0 0 69 88 184 0 31 47 27 185 0 31 0 4 62 89 187 0 23 0 1 0 6 0 4 43 184 0 31 16 185 0 0 0 1 244 184 0 41 16 185 0 15 0 1 244 186 0 20 0 31 0 41 17 18 57 48 49 37 50 54 53 52 38 35 34 6 7 30 1 19 46 1 35 34 14 2 7 62 1 51 50 22 21 20 14 2 35 34 46 2 53 52 62 2 51 50 22 23 1 11 41 57 53 53 26 63 29 8 64 173 18 51 29 30 52 41 25 1 27 74 38 75 89 28 48 64 36 44 74 55 31 37 62 81 45 48 70 26 51 57 47 47 57 29 35 74 70 1 116 18 22 21 49 80 58 29 35 81 81 38 63 44 24 31 62 95 65 77 110 70 32 33 24 0 0 0 0 1 0 33 0 0 1 140 2 6 0 15 0 51 0 184 0 0 69 88 184 0 7 47 27 185 0 7 0 10 62 89 184 0 0 69 88 184 0 0 47 27 185 0 0 0 4 62 89 184 0 7 16 185 0 5 0 1 244 184 0 9 208 48 49 51 62 3 55 33 53 33 21 14 3 7 35 142 4 20 37 58 42 254 242 1 107 51 63 36 17 4 83 71 119 107 100 53 68 49 58 104 109 122 76 0 0 0 0 3 0 54 255 244 1 181 2 18 0 13 0 27 0 65 0 93 0 184 0 0 69 88 184 0 42 47 27 185 0 42 0 10 62 89 184 0 0 69 88 184 0 61 47 27 185 0 61 0 4 62 89 185 0 3 0 1 244 186 0 11 0 61 0 42 17 18 57 186 0 14 0 42 0 61 17 18 57 184 0 42 16 185 0 20 0 1 244 186 0 34 0 61 0 42 17 18 57 186 0 51 0 61 0 42 17 18 57 48 49 55 20 22 51 50 54 53 52 46 2 39 14 1 55 62 1 53 52 38 35 34 6 21 20 30 2 7 52 62 2 55 53 46 1 53 52 62 2 51 50 22 21 20 14 2 7 21 30 3 21 20 14 2 35 34 46 2 129 69 52 51 61 24 40 56 31 33 49 156 29 31 52 47 40 51 21 36 47 205 19 31 39 20 33 49 26 45 61 35 78 90 15 23 28 14 20 36 28 17 27 50 70 43 42 70 52 29 140 41 52 46 39 23 34 26 21 11 18 53 110 22 51 26 37 49 42 36 21 33 25 19 166 26 43 34 27 10 4 20 59 41 31 51 36 19 78 60 21 38 31 26 9 3 11 24 32 41 26 30 52 38 22 21 38 52 0 2 0 49 255 244 1 170 2 18 0 10 0 43 0 77 0 184 0 0 69 88 184 0 30 47 27 185 0 30 0 10 62 89 184 0 0 69 88 184 0 40 47 27 185 0 40 0 4 62 89 187 0 0 0 1 0 22 0 4 43 184 0 30 16 185 0 5 0 1 244 184 0 40 16 185 0 14 0 1 244 186 0 19 0 40 0 30 17 18 57 48 49 19 50 54 55 38 35 34 6 21 20 22 7 30 1 51 50 62 2 55 14 1 35 34 38 53 52 62 2 51 50 30 2 21 20 14 2 35 34 38 39 229 26 63 28 15 109 39 57 52 75 18 51 29 29 52 40 24 2 26 72 37 74 90 28 47 63 35 43 75 55 31 37 61 81 43 49 72 24 1 2 29 35 145 57 48 49 55 164 17 22 22 49 79 57 29 34 81 81 38 63 44 24 31 62 96 64 78 109 70 32 33 23 0 0 0 0 1 0 41 0 239 0 237 1 46 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 51 21 35 41 196 196 1 46 63 0 0 0 0 1 0 41 0 243 1 115 1 44 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 41 1 74 254 182 1 44 57 0 0 1 0 41 0 243 2 134 1 44 0 3 0 13 0 187 0 1 0 1 0 2 0 4 43 48 49 19 33 21 33 41 2 93 253 163 1 44 57 0 255 255 0 81 1 178 0 185 2 178 2 6 2 222 0 0 0 2 255 255 1 10 1 109 2 186 0 9 0 17 0 45 0 184 0 13 47 184 0 16 47 184 0 14 47 186 0 5 0 14 0 13 17 18 57 186 0 10 0 14 0 13 17 18 57 184 0 10 16 185 0 9 0 1 244 48 49 19 39 46 1 39 35 14 1 15 1 23 35 7 35 19 51 19 35 244 19 11 21 11 2 11 21 11 19 141 156 40 64 147 72 147 67 1 187 62 36 72 35 37 71 35 62 49 128 1 176 254 80 0 0 0 0 3 0 57 1 10 1 111 2 186 0 15 0 23 0 32 0 51 0 184 0 14 47 184 0 1 47 187 0 30 0 1 0 16 0 4 43 186 0 8 0 16 0 30 17 18 57 184 0 1 16 185 0 21 0 1 244 184 0 14 16 185 0 24 0 1 244 48 49 19 51 50 22 21 20 6 7 21 30 1 21 20 6 43 1 55 50 54 53 52 43 1 21 23 50 54 53 52 38 43 1 21 57 134 67 85 38 38 48 52 93 73 144 125 54 46 98 64 73 54 59 58 55 73 2 186 48 57 32 51 11 2 8 51 45 64 63 250 36 34 64 134 201 38 43 38 37 156 0 1 0 32 1 2 1 104 2 194 0 29 0 27 0 184 0 25 47 184 0 5 47 185 0 12 0 1 244 184 0 25 16 185 0 18 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 23 14 1 35 34 46 2 32 30 53 72 42 41 61 20 35 18 41 26 60 74 71 60 30 47 20 35 26 66 43 41 71 52 29 1 225 52 83 59 31 31 23 38 17 21 91 78 79 92 24 23 38 30 33 30 57 83 0 0 2 0 57 1 10 1 122 2 186 0 8 0 16 0 31 0 184 0 7 47 184 0 1 47 184 0 7 16 185 0 9 0 1 244 184 0 1 16 185 0 14 0 1 244 48 49 19 51 50 22 21 20 6 43 1 55 50 54 53 52 43 1 17 57 112 102 107 106 100 115 111 72 73 147 46 2 186 109 104 106 113 51 86 81 164 254 181 0 1 0 57 1 10 1 63 2 186 0 11 0 41 0 184 0 0 47 184 0 11 47 187 0 5 0 1 0 6 0 4 43 184 0 0 16 185 0 2 0 1 244 184 0 11 16 185 0 9 0 1 244 48 49 19 33 21 35 21 51 21 35 21 51 21 33 57 1 0 193 164 164 199 254 250 2 186 52 127 52 148 53 0 0 1 0 57 1 10 1 58 2 186 0 9 0 31 0 184 0 9 47 184 0 0 47 187 0 5 0 1 0 6 0 4 43 184 0 0 16 185 0 2 0 1 244 48 49 19 33 21 35 21 51 21 35 21 35 57 1 1 194 165 165 63 2 186 52 138 53 189 0 1 0 32 1 2 1 114 2 194 0 33 0 41 0 184 0 5 47 184 0 29 47 187 0 22 0 1 0 24 0 4 43 184 0 5 16 185 0 12 0 1 244 184 0 29 16 185 0 18 0 1 244 48 49 19 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 22 51 50 54 55 53 35 53 51 21 14 1 35 34 46 2 32 31 55 75 44 45 62 20 36 16 43 32 64 76 72 69 23 40 12 89 146 23 70 45 43 73 54 30 1 226 52 83 58 31 32 20 40 17 22 91 78 80 92 13 11 106 52 185 21 30 30 58 83 0 1 0 57 1 10 1 122 2 186 0 11 0 29 0 184 0 0 47 184 0 4 47 184 0 11 47 184 0 7 47 187 0 8 0 1 0 2 0 4 43 48 49 19 51 21 51 53 51 17 35 53 35 21 35 57 63 195 63 63 195 63 2 186 178 178 254 80 201 201 0 0 0 1 0 57 1 10 0 120 2 186 0 3 0 11 0 184 0 0 47 184 0 2 47 48 49 19 51 17 35 57 63 63 2 186 254 80 0 1 0 18 1 2 1 10 2 186 0 16 0 17 0 184 0 6 47 184 0 13 47 185 0 2 0 1 244 48 49 19 22 51 50 54 53 17 51 17 20 14 2 35 34 38 39 62 28 45 34 34 63 14 31 48 33 43 59 20 1 104 48 41 49 1 40 254 211 29 51 37 22 36 35 0 0 1 0 57 1 10 1 131 2 186 0 12 0 49 0 184 0 12 47 184 0 8 47 184 0 0 47 184 0 4 47 186 0 2 0 0 0 12 17 18 57 186 0 6 0 0 0 8 17 18 57 186 0 9 0 12 0 0 17 18 57 48 49 19 51 21 51 55 51 7 19 35 39 7 21 35 57 63 2 174 70 136 157 69 126 72 63 2 186 209 209 164 254 244 220 84 136 0 0 0 0 1 0 57 1 10 1 52 2 186 0 5 0 17 0 184 0 0 47 184 0 5 47 185 0 3 0 1 244 48 49 19 51 17 51 21 35 57 63 188 251 2 186 254 133 53 0 0 0 1 0 57 1 10 1 174 2 186 0 25 0 59 0 184 0 25 47 184 0 9 47 184 0 0 47 184 0 7 47 186 0 4 0 7 0 9 17 18 57 186 0 13 0 9 0 7 17 18 57 186 0 17 0 25 0 0 17 18 57 186 0 20 0 0 0 25 17 18 57 48 49 19 51 31 1 51 63 1 51 17 35 53 52 54 55 35 15 1 35 47 1 35 30 1 29 1 35 57 73 83 31 3 30 80 73 59 6 2 3 35 81 33 82 36 2 2 6 58 2 186 224 86 86 224 254 80 225 29 72 29 97 216 216 97 29 72 29 225 0 1 0 57 1 10 1 118 2 186 0 19 0 39 0 184 0 0 47 184 0 9 47 184 0 10 47 184 0 19 47 186 0 4 0 10 0 9 17 18 57 186 0 14 0 0 0 19 17 18 57 48 49 19 51 19 23 51 46 1 61 1 51 17 35 3 39 35 30 1 29 1 35 57 66 151 46 3 2 5 58 65 151 47 2 2 4 58 2 186 254 250 90 32 74 35 211 254 80 1 8 89 33 70 34 216 0 0 0 2 0 32 1 2 1 155 2 194 0 19 0 31 0 27 0 184 0 10 47 184 0 0 47 185 0 20 0 1 244 184 0 10 16 185 0 26 0 1 244 48 49 19 34 46 2 53 52 62 2 51 50 30 2 21 20 14 2 39 50 54 53 52 38 35 34 6 21 20 22 221 42 69 50 28 28 50 69 42 42 70 50 28 28 50 70 42 57 68 68 57 57 67 67 1 2 32 58 84 52 52 83 57 30 31 57 82 52 52 84 58 32 54 94 78 78 91 91 78 78 94 0 0 0 2 0 57 1 10 1 103 2 186 0 12 0 20 0 31 0 184 0 0 47 184 0 12 47 187 0 13 0 1 0 9 0 4 43 184 0 0 16 185 0 18 0 1 244 48 49 19 51 50 22 21 20 14 2 43 1 21 35 55 50 53 52 38 43 1 21 57 139 73 90 24 44 59 36 76 63 132 108 54 54 69 2 186 57 71 35 51 34 16 168 218 86 45 33 164 0 2 0 31 0 158 1 165 2 194 0 11 0 40 0 49 0 184 0 18 47 184 0 26 47 187 0 37 0 1 0 15 0 4 43 184 0 18 16 185 0 3 0 1 244 184 0 26 16 185 0 9 0 1 244 184 0 18 16 184 0 34 208 48 49 19 20 22 51 50 54 53 52 38 35 34 6 1 14 1 35 34 38 39 46 1 53 52 62 2 51 50 30 2 21 20 6 7 30 1 51 50 54 55 96 67 57 57 68 68 57 57 67 1 69 10 34 21 62 83 20 72 88 28 50 69 42 42 70 50 28 84 69 16 55 35 15 22 9 1 229 80 94 94 80 78 90 90 254 117 4 6 57 45 11 117 97 52 82 57 30 31 57 82 51 94 116 14 27 25 4 2 0 2 0 57 1 10 1 112 2 186 0 7 0 23 0 45 0 184 0 12 47 184 0 8 47 184 0 13 47 187 0 1 0 1 0 9 0 4 43 184 0 13 16 185 0 6 0 1 244 186 0 22 0 1 0 9 17 18 57 48 49 19 51 50 53 52 38 43 1 19 39 35 21 35 17 51 50 30 2 21 20 6 7 23 120 70 101 51 50 70 177 101 76 63 141 33 57 42 23 52 43 110 1 239 79 41 33 254 130 179 179 1 176 13 29 46 34 51 60 12 187 0 0 0 0 1 0 26 1 2 1 76 2 195 0 45 0 51 0 184 0 42 47 184 0 20 47 184 0 42 16 185 0 3 0 1 244 186 0 6 0 20 0 3 17 18 57 184 0 20 16 185 0 27 0 1 244 186 0 30 0 3 0 20 17 18 57 48 49 19 30 1 51 50 54 53 52 38 47 1 46 3 53 52 62 2 51 50 22 23 7 46 1 35 34 6 21 20 30 2 31 1 30 1 21 20 6 35 34 38 39 63 24 64 33 42 43 40 31 63 16 32 25 16 21 38 52 31 38 69 24 33 21 48 31 35 41 13 20 25 12 63 42 47 80 71 46 79 30 1 109 25 27 37 29 31 28 13 28 7 19 26 35 24 25 43 31 18 30 24 39 18 22 33 27 15 21 16 12 5 27 18 48 45 55 74 34 31 0 1 0 17 1 10 1 84 2 186 0 7 0 21 0 184 0 7 47 184 0 2 47 185 0 1 0 1 244 184 0 4 208 48 49 19 35 53 33 21 35 17 35 148 131 1 67 130 62 2 134 52 52 254 132 0 0 1 0 56 1 2 1 120 2 186 0 25 0 21 0 184 0 0 47 184 0 13 47 184 0 20 47 185 0 7 0 1 244 48 49 19 51 21 20 30 2 51 50 62 2 61 1 51 21 20 14 2 35 34 46 2 53 56 62 15 26 37 21 21 36 27 15 60 24 42 59 34 36 59 43 23 2 186 252 38 52 31 13 13 31 52 38 252 249 53 72 46 20 20 46 72 53 0 0 0 0 1 255 254 1 10 1 92 2 186 0 13 0 25 0 184 0 0 47 184 0 10 47 184 0 13 47 186 0 5 0 0 0 13 17 18 57 48 49 3 51 23 30 1 23 51 62 1 63 1 51 3 35 2 66 69 11 18 12 3 12 17 11 67 64 138 72 2 186 227 38 66 38 38 66 38 227 254 80 0 0 1 0 13 1 10 2 1 2 186 0 33 0 53 0 184 0 33 47 184 0 23 47 184 0 0 47 184 0 10 47 184 0 21 47 186 0 5 0 0 0 33 17 18 57 186 0 15 0 10 0 23 17 18 57 186 0 28 0 33 0 10 17 18 57 48 49 19 51 23 30 1 23 51 62 1 63 1 51 23 30 1 23 51 62 1 63 1 51 3 35 39 46 1 39 35 14 1 15 1 35 13 65 43 7 12 6 3 7 14 8 59 56 59 8 15 8 2 6 11 7 44 60 90 75 63 6 10 5 2 5 11 5 61 76 2 186 228 35 69 35 35 69 35 228 228 35 69 35 35 69 35 228 254 80 250 25 48 25 25 48 25 250 0 0 1 0 8 1 10 1 82 2 186 0 25 0 59 0 184 0 1 47 184 0 12 47 184 0 14 47 184 0 25 47 186 0 0 0 1 0 25 17 18 57 186 0 6 0 14 0 12 17 18 57 186 0 13 0 14 0 12 17 18 57 186 0 20 0 1 0 25 17 18 57 48 49 19 39 51 23 30 1 23 51 62 1 63 1 51 7 23 35 39 46 1 39 35 14 1 15 1 35 135 118 69 56 8 15 10 3 9 14 8 54 67 119 127 69 60 8 18 11 3 9 18 8 60 66 1 234 208 105 15 29 20 20 29 15 105 211 221 113 16 33 20 20 33 16 113 0 0 0 1 255 253 1 10 1 67 2 186 0 15 0 25 0 184 0 1 47 184 0 12 47 184 0 15 47 186 0 6 0 1 0 15 17 18 57 48 49 19 3 51 23 30 1 23 51 62 1 63 1 51 3 21 35 129 132 66 55 11 20 11 3 11 21 10 53 65 131 63 1 176 1 10 117 25 45 25 25 45 25 117 254 246 166 0 0 0 0 1 0 27 1 10 1 76 2 186 0 9 0 35 0 184 0 3 47 184 0 8 47 185 0 6 0 1 244 184 0 0 208 184 0 3 16 185 0 1 0 1 244 184 0 5 208 48 49 27 1 35 53 33 21 3 51 21 33 27 226 206 1 27 225 227 254 207 1 48 1 86 52 37 254 170 53 0 0 0 0 2 0 43 1 176 0 134 2 241 0 11 0 23 0 27 0 184 0 9 47 187 0 21 0 1 0 15 0 4 43 184 0 9 16 185 0 3 0 1 244 48 49 19 52 54 51 50 22 21 20 6 35 34 38 53 52 54 51 50 22 21 20 6 35 34 38 43 26 20 20 25 25 20 20 26 26 20 20 25 25 20 20 26 1 223 22 26 26 22 21 26 26 247 21 27 27 21 22 26 26 0 0 0 0 1 0 41 2 101 0 197 2 147 0 3 0 26 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 185 0 2 0 1 244 48 49 19 51 21 35 41 156 156 2 147 46 0 0 0 1 0 41 2 104 1 51 2 145 0 3 0 26 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 185 0 2 0 1 244 48 49 19 33 21 33 41 1 10 254 246 2 145 41 0 1 0 41 2 104 2 10 2 145 0 3 0 26 0 184 0 0 69 88 184 0 0 47 27 185 0 0 0 16 62 89 185 0 2 0 1 244 48 49 19 33 21 33 41 1 225 254 31 2 145 41 0 2 255 133 2 89 0 123 3 55 0 3 0 7 0 40 0 184 0 0 69 88 184 0 4 47 27 185 0 4 0 16 62 89 187 0 0 0 1 0 2 0 4 43 184 0 4 16 185 0 6 0 1 244 48 49 19 51 7 35 7 51 21 35 29 79 103 58 70 246 246 3 55 103 62 57 0 2 255 132 2 217 0 129 3 182 0 3 0 7 0 23 0 187 0 5 0 1 0 6 0 4 43 187 0 0 0 1 0 2 0 4 43 48 49 19 51 7 35 7 51 21 35 38 91 112 68 73 248 248 3 182 111 53 57 0 0 0 0 36 1 182 0 1 0 0 0 0 0 0 0 69 0 0 0 1 0 0 0 0 0 1 0 15 0 69 0 1 0 0 0 0 0 2 0 7 0 84 0 1 0 0 0 0 0 3 0 38 0 91 0 1 0 0 0 0 0 4 0 15 0 69 0 1 0 0 0 0 0 5 0 65 0 129 0 1 0 0 0 0 0 6 0 21 0 194 0 1 0 0 0 0 0 7 0 96 0 215 0 1 0 0 0 0 0 8 0 26 1 55 0 1 0 0 0 0 0 9 0 12 1 81 0 1 0 0 0 0 0 11 0 25 1 93 0 1 0 0 0 0 0 13 17 217 1 118 0 1 0 0 0 0 0 14 0 36 19 79 0 1 0 0 0 0 1 0 0 12 19 115 0 1 0 0 0 0 1 1 0 10 19 127 0 1 0 0 0 0 1 2 0 11 19 137 0 1 0 0 0 0 1 3 0 11 19 148 0 1 0 0 0 0 1 4 0 9 19 159 0 3 0 1 4 9 0 0 0 138 19 168 0 3 0 1 4 9 0 1 0 30 20 50 0 3 0 1 4 9 0 2 0 14 20 80 0 3 0 1 4 9 0 3 0 76 20 94 0 3 0 1 4 9 0 4 0 30 20 50 0 3 0 1 4 9 0 5 0 130 20 170 0 3 0 1 4 9 0 6 0 42 21 44 0 3 0 1 4 9 0 7 0 192 21 86 0 3 0 1 4 9 0 8 0 52 22 22 0 3 0 1 4 9 0 9 0 24 22 74 0 3 0 1 4 9 0 11 0 50 22 98 0 3 0 1 4 9 0 13 35 182 22 148 0 3 0 1 4 9 0 14 0 72 58 74 0 3 0 1 4 9 1 0 0 24 58 146 0 3 0 1 4 9 1 1 0 20 58 170 0 3 0 1 4 9 1 2 0 22 58 190 0 3 0 1 4 9 1 3 0 22 58 212 0 3 0 1 4 9 1 4 0 18 58 234 67 111 112 121 114 105 103 104 116 32 50 48 49 48 44 32 50 48 49 50 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 46 32 65 108 108 32 82 105 103 104 116 115 32 82 101 115 101 114 118 101 100 46 83 111 117 114 99 101 32 83 97 110 115 32 80 114 111 82 101 103 117 108 97 114 49 46 48 53 48 59 65 68 66 69 59 83 111 117 114 99 101 83 97 110 115 80 114 111 45 82 101 103 117 108 97 114 59 65 68 79 66 69 86 101 114 115 105 111 110 32 49 46 48 53 48 59 80 83 32 86 101 114 115 105 111 110 32 49 46 48 48 48 59 104 111 116 99 111 110 118 32 49 46 48 46 55 48 59 109 97 107 101 111 116 102 46 108 105 98 50 46 53 46 53 57 48 48 83 111 117 114 99 101 83 97 110 115 80 114 111 45 82 101 103 117 108 97 114 83 111 117 114 99 101 32 105 115 32 97 32 116 114 97 100 101 109 97 114 107 32 111 102 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 105 110 32 116 104 101 32 85 110 105 116 101 100 32 83 116 97 116 101 115 32 97 110 100 47 111 114 32 111 116 104 101 114 32 99 111 117 110 116 114 105 101 115 46 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 80 97 117 108 32 68 46 32 72 117 110 116 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 116 121 112 101 67 111 112 121 114 105 103 104 116 32 50 48 49 48 44 32 50 48 49 50 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 40 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 41 44 32 119 105 116 104 32 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 32 39 83 111 117 114 99 101 39 46 32 65 108 108 32 82 105 103 104 116 115 32 82 101 115 101 114 118 101 100 46 32 83 111 117 114 99 101 32 105 115 32 97 32 116 114 97 100 101 109 97 114 107 32 111 102 32 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 32 105 110 32 116 104 101 32 85 110 105 116 101 100 32 83 116 97 116 101 115 32 97 110 100 47 111 114 32 111 116 104 101 114 32 99 111 117 110 116 114 105 101 115 46 13 10 13 10 84 104 105 115 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 105 115 32 108 105 99 101 110 115 101 100 32 117 110 100 101 114 32 116 104 101 32 83 73 76 32 79 112 101 110 32 70 111 110 116 32 76 105 99 101 110 115 101 44 32 86 101 114 115 105 111 110 32 49 46 49 46 13 10 13 10 84 104 105 115 32 108 105 99 101 110 115 101 32 105 115 32 99 111 112 105 101 100 32 98 101 108 111 119 44 32 97 110 100 32 105 115 32 97 108 115 111 32 97 118 97 105 108 97 98 108 101 32 119 105 116 104 32 97 32 70 65 81 32 97 116 58 32 104 116 116 112 58 47 47 115 99 114 105 112 116 115 46 115 105 108 46 111 114 103 47 79 70 76 13 10 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 13 10 83 73 76 32 79 80 69 78 32 70 79 78 84 32 76 73 67 69 78 83 69 32 86 101 114 115 105 111 110 32 49 46 49 32 45 32 50 54 32 70 101 98 114 117 97 114 121 32 50 48 48 55 13 10 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 13 10 13 10 80 82 69 65 77 66 76 69 13 10 84 104 101 32 103 111 97 108 115 32 111 102 32 116 104 101 32 79 112 101 110 32 70 111 110 116 32 76 105 99 101 110 115 101 32 40 79 70 76 41 32 97 114 101 32 116 111 32 115 116 105 109 117 108 97 116 101 32 119 111 114 108 100 119 105 100 101 32 100 101 118 101 108 111 112 109 101 110 116 32 111 102 32 99 111 108 108 97 98 111 114 97 116 105 118 101 32 102 111 110 116 32 112 114 111 106 101 99 116 115 44 32 116 111 32 115 117 112 112 111 114 116 32 116 104 101 32 102 111 110 116 32 99 114 101 97 116 105 111 110 32 101 102 102 111 114 116 115 32 111 102 32 97 99 97 100 101 109 105 99 32 97 110 100 32 108 105 110 103 117 105 115 116 105 99 32 99 111 109 109 117 110 105 116 105 101 115 44 32 97 110 100 32 116 111 32 112 114 111 118 105 100 101 32 97 32 102 114 101 101 32 97 110 100 32 111 112 101 110 32 102 114 97 109 101 119 111 114 107 32 105 110 32 119 104 105 99 104 32 102 111 110 116 115 32 109 97 121 32 98 101 32 115 104 97 114 101 100 32 97 110 100 32 105 109 112 114 111 118 101 100 32 105 110 32 112 97 114 116 110 101 114 115 104 105 112 32 119 105 116 104 32 111 116 104 101 114 115 46 13 10 13 10 84 104 101 32 79 70 76 32 97 108 108 111 119 115 32 116 104 101 32 108 105 99 101 110 115 101 100 32 102 111 110 116 115 32 116 111 32 98 101 32 117 115 101 100 44 32 115 116 117 100 105 101 100 44 32 109 111 100 105 102 105 101 100 32 97 110 100 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 102 114 101 101 108 121 32 97 115 32 108 111 110 103 32 97 115 32 116 104 101 121 32 97 114 101 32 110 111 116 32 115 111 108 100 32 98 121 32 116 104 101 109 115 101 108 118 101 115 46 32 84 104 101 32 102 111 110 116 115 44 32 105 110 99 108 117 100 105 110 103 32 97 110 121 32 100 101 114 105 118 97 116 105 118 101 32 119 111 114 107 115 44 32 99 97 110 32 98 101 32 98 117 110 100 108 101 100 44 32 101 109 98 101 100 100 101 100 44 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 97 110 100 47 111 114 32 115 111 108 100 32 119 105 116 104 32 97 110 121 32 115 111 102 116 119 97 114 101 32 112 114 111 118 105 100 101 100 32 116 104 97 116 32 97 110 121 32 114 101 115 101 114 118 101 100 32 110 97 109 101 115 32 97 114 101 32 110 111 116 32 117 115 101 100 32 98 121 32 100 101 114 105 118 97 116 105 118 101 32 119 111 114 107 115 46 32 84 104 101 32 102 111 110 116 115 32 97 110 100 32 100 101 114 105 118 97 116 105 118 101 115 44 32 104 111 119 101 118 101 114 44 32 99 97 110 110 111 116 32 98 101 32 114 101 108 101 97 115 101 100 32 117 110 100 101 114 32 97 110 121 32 111 116 104 101 114 32 116 121 112 101 32 111 102 32 108 105 99 101 110 115 101 46 32 84 104 101 32 114 101 113 117 105 114 101 109 101 110 116 32 102 111 114 32 102 111 110 116 115 32 116 111 32 114 101 109 97 105 110 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 100 111 101 115 32 110 111 116 32 97 112 112 108 121 32 116 111 32 97 110 121 32 100 111 99 117 109 101 110 116 32 99 114 101 97 116 101 100 32 117 115 105 110 103 32 116 104 101 32 102 111 110 116 115 32 111 114 32 116 104 101 105 114 32 100 101 114 105 118 97 116 105 118 101 115 46 13 10 13 10 68 69 70 73 78 73 84 73 79 78 83 13 10 34 70 111 110 116 32 83 111 102 116 119 97 114 101 34 32 114 101 102 101 114 115 32 116 111 32 116 104 101 32 115 101 116 32 111 102 32 102 105 108 101 115 32 114 101 108 101 97 115 101 100 32 98 121 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 97 110 100 32 99 108 101 97 114 108 121 32 109 97 114 107 101 100 32 97 115 32 115 117 99 104 46 32 84 104 105 115 32 109 97 121 32 105 110 99 108 117 100 101 32 115 111 117 114 99 101 32 102 105 108 101 115 44 32 98 117 105 108 100 32 115 99 114 105 112 116 115 32 97 110 100 32 100 111 99 117 109 101 110 116 97 116 105 111 110 46 13 10 13 10 34 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 110 97 109 101 115 32 115 112 101 99 105 102 105 101 100 32 97 115 32 115 117 99 104 32 97 102 116 101 114 32 116 104 101 32 99 111 112 121 114 105 103 104 116 32 115 116 97 116 101 109 101 110 116 40 115 41 46 13 10 13 10 34 79 114 105 103 105 110 97 108 32 86 101 114 115 105 111 110 34 32 114 101 102 101 114 115 32 116 111 32 116 104 101 32 99 111 108 108 101 99 116 105 111 110 32 111 102 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 99 111 109 112 111 110 101 110 116 115 32 97 115 32 100 105 115 116 114 105 98 117 116 101 100 32 98 121 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 46 13 10 13 10 34 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 100 101 114 105 118 97 116 105 118 101 32 109 97 100 101 32 98 121 32 97 100 100 105 110 103 32 116 111 44 32 100 101 108 101 116 105 110 103 44 32 111 114 32 115 117 98 115 116 105 116 117 116 105 110 103 32 45 45 32 105 110 32 112 97 114 116 32 111 114 32 105 110 32 119 104 111 108 101 32 45 45 32 97 110 121 32 111 102 32 116 104 101 32 99 111 109 112 111 110 101 110 116 115 32 111 102 32 116 104 101 32 79 114 105 103 105 110 97 108 32 86 101 114 115 105 111 110 44 32 98 121 32 99 104 97 110 103 105 110 103 32 102 111 114 109 97 116 115 32 111 114 32 98 121 32 112 111 114 116 105 110 103 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 116 111 32 97 32 110 101 119 32 101 110 118 105 114 111 110 109 101 110 116 46 13 10 13 10 34 65 117 116 104 111 114 34 32 114 101 102 101 114 115 32 116 111 32 97 110 121 32 100 101 115 105 103 110 101 114 44 32 101 110 103 105 110 101 101 114 44 32 112 114 111 103 114 97 109 109 101 114 44 32 116 101 99 104 110 105 99 97 108 32 119 114 105 116 101 114 32 111 114 32 111 116 104 101 114 32 112 101 114 115 111 110 32 119 104 111 32 99 111 110 116 114 105 98 117 116 101 100 32 116 111 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 46 13 10 13 10 80 69 82 77 73 83 83 73 79 78 32 38 32 67 79 78 68 73 84 73 79 78 83 13 10 80 101 114 109 105 115 115 105 111 110 32 105 115 32 104 101 114 101 98 121 32 103 114 97 110 116 101 100 44 32 102 114 101 101 32 111 102 32 99 104 97 114 103 101 44 32 116 111 32 97 110 121 32 112 101 114 115 111 110 32 111 98 116 97 105 110 105 110 103 32 97 32 99 111 112 121 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 116 111 32 117 115 101 44 32 115 116 117 100 121 44 32 99 111 112 121 44 32 109 101 114 103 101 44 32 101 109 98 101 100 44 32 109 111 100 105 102 121 44 32 114 101 100 105 115 116 114 105 98 117 116 101 44 32 97 110 100 32 115 101 108 108 32 109 111 100 105 102 105 101 100 32 97 110 100 32 117 110 109 111 100 105 102 105 101 100 32 99 111 112 105 101 115 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 115 117 98 106 101 99 116 32 116 111 32 116 104 101 32 102 111 108 108 111 119 105 110 103 32 99 111 110 100 105 116 105 111 110 115 58 13 10 13 10 49 41 32 78 101 105 116 104 101 114 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 110 111 114 32 97 110 121 32 111 102 32 105 116 115 32 105 110 100 105 118 105 100 117 97 108 32 99 111 109 112 111 110 101 110 116 115 44 32 105 110 32 79 114 105 103 105 110 97 108 32 111 114 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 115 44 32 109 97 121 32 98 101 32 115 111 108 100 32 98 121 32 105 116 115 101 108 102 46 13 10 13 10 50 41 32 79 114 105 103 105 110 97 108 32 111 114 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 115 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 109 97 121 32 98 101 32 98 117 110 100 108 101 100 44 32 114 101 100 105 115 116 114 105 98 117 116 101 100 32 97 110 100 47 111 114 32 115 111 108 100 32 119 105 116 104 32 97 110 121 32 115 111 102 116 119 97 114 101 44 32 112 114 111 118 105 100 101 100 32 116 104 97 116 32 101 97 99 104 32 99 111 112 121 32 99 111 110 116 97 105 110 115 32 116 104 101 32 97 98 111 118 101 32 99 111 112 121 114 105 103 104 116 32 110 111 116 105 99 101 32 97 110 100 32 116 104 105 115 32 108 105 99 101 110 115 101 46 32 84 104 101 115 101 32 99 97 110 32 98 101 32 105 110 99 108 117 100 101 100 32 101 105 116 104 101 114 32 97 115 32 115 116 97 110 100 45 97 108 111 110 101 32 116 101 120 116 32 102 105 108 101 115 44 32 104 117 109 97 110 45 114 101 97 100 97 98 108 101 32 104 101 97 100 101 114 115 32 111 114 32 105 110 32 116 104 101 32 97 112 112 114 111 112 114 105 97 116 101 32 109 97 99 104 105 110 101 45 114 101 97 100 97 98 108 101 32 109 101 116 97 100 97 116 97 32 102 105 101 108 100 115 32 119 105 116 104 105 110 32 116 101 120 116 32 111 114 32 98 105 110 97 114 121 32 102 105 108 101 115 32 97 115 32 108 111 110 103 32 97 115 32 116 104 111 115 101 32 102 105 101 108 100 115 32 99 97 110 32 98 101 32 101 97 115 105 108 121 32 118 105 101 119 101 100 32 98 121 32 116 104 101 32 117 115 101 114 46 13 10 13 10 51 41 32 78 111 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 109 97 121 32 117 115 101 32 116 104 101 32 82 101 115 101 114 118 101 100 32 70 111 110 116 32 78 97 109 101 40 115 41 32 117 110 108 101 115 115 32 101 120 112 108 105 99 105 116 32 119 114 105 116 116 101 110 32 112 101 114 109 105 115 115 105 111 110 32 105 115 32 103 114 97 110 116 101 100 32 98 121 32 116 104 101 32 99 111 114 114 101 115 112 111 110 100 105 110 103 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 46 32 84 104 105 115 32 114 101 115 116 114 105 99 116 105 111 110 32 111 110 108 121 32 97 112 112 108 105 101 115 32 116 111 32 116 104 101 32 112 114 105 109 97 114 121 32 102 111 110 116 32 110 97 109 101 32 97 115 32 112 114 101 115 101 110 116 101 100 32 116 111 32 116 104 101 32 117 115 101 114 115 46 13 10 13 10 52 41 32 84 104 101 32 110 97 109 101 40 115 41 32 111 102 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 111 114 32 116 104 101 32 65 117 116 104 111 114 40 115 41 32 111 102 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 32 115 104 97 108 108 32 110 111 116 32 98 101 32 117 115 101 100 32 116 111 32 112 114 111 109 111 116 101 44 32 101 110 100 111 114 115 101 32 111 114 32 97 100 118 101 114 116 105 115 101 32 97 110 121 32 77 111 100 105 102 105 101 100 32 86 101 114 115 105 111 110 44 32 101 120 99 101 112 116 32 116 111 32 97 99 107 110 111 119 108 101 100 103 101 32 116 104 101 32 99 111 110 116 114 105 98 117 116 105 111 110 40 115 41 32 111 102 32 116 104 101 32 67 111 112 121 114 105 103 104 116 32 72 111 108 100 101 114 40 115 41 32 97 110 100 32 116 104 101 32 65 117 116 104 111 114 40 115 41 32 111 114 32 119 105 116 104 32 116 104 101 105 114 32 101 120 112 108 105 99 105 116 32 119 114 105 116 116 101 110 32 112 101 114 109 105 115 115 105 111 110 46 13 10 13 10 53 41 32 84 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 44 32 109 111 100 105 102 105 101 100 32 111 114 32 117 110 109 111 100 105 102 105 101 100 44 32 105 110 32 112 97 114 116 32 111 114 32 105 110 32 119 104 111 108 101 44 32 109 117 115 116 32 98 101 32 100 105 115 116 114 105 98 117 116 101 100 32 101 110 116 105 114 101 108 121 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 44 32 97 110 100 32 109 117 115 116 32 110 111 116 32 98 101 32 100 105 115 116 114 105 98 117 116 101 100 32 117 110 100 101 114 32 97 110 121 32 111 116 104 101 114 32 108 105 99 101 110 115 101 46 32 84 104 101 32 114 101 113 117 105 114 101 109 101 110 116 32 102 111 114 32 102 111 110 116 115 32 116 111 32 114 101 109 97 105 110 32 117 110 100 101 114 32 116 104 105 115 32 108 105 99 101 110 115 101 32 100 111 101 115 32 110 111 116 32 97 112 112 108 121 32 116 111 32 97 110 121 32 100 111 99 117 109 101 110 116 32 99 114 101 97 116 101 100 32 117 115 105 110 103 32 116 104 101 32 70 111 110 116 32 83 111 102 116 119 97 114 101 46 13 10 13 10 84 69 82 77 73 78 65 84 73 79 78 13 10 84 104 105 115 32 108 105 99 101 110 115 101 32 98 101 99 111 109 101 115 32 110 117 108 108 32 97 110 100 32 118 111 105 100 32 105 102 32 97 110 121 32 111 102 32 116 104 101 32 97 98 111 118 101 32 99 111 110 100 105 116 105 111 110 115 32 97 114 101 32 110 111 116 32 109 101 116 46 13 10 13 10 68 73 83 67 76 65 73 77 69 82 13 10 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 32 73 83 32 80 82 79 86 73 68 69 68 32 34 65 83 32 73 83 34 44 32 87 73 84 72 79 85 84 32 87 65 82 82 65 78 84 89 32 79 70 32 65 78 89 32 75 73 78 68 44 32 69 88 80 82 69 83 83 32 79 82 32 73 77 80 76 73 69 68 44 32 73 78 67 76 85 68 73 78 71 32 66 85 84 32 78 79 84 32 76 73 77 73 84 69 68 32 84 79 32 65 78 89 32 87 65 82 82 65 78 84 73 69 83 32 79 70 32 77 69 82 67 72 65 78 84 65 66 73 76 73 84 89 44 32 70 73 84 78 69 83 83 32 70 79 82 32 65 32 80 65 82 84 73 67 85 76 65 82 32 80 85 82 80 79 83 69 32 65 78 68 32 78 79 78 73 78 70 82 73 78 71 69 77 69 78 84 32 79 70 32 67 79 80 89 82 73 71 72 84 44 32 80 65 84 69 78 84 44 32 84 82 65 68 69 77 65 82 75 44 32 79 82 32 79 84 72 69 82 32 82 73 71 72 84 46 32 73 78 32 78 79 32 69 86 69 78 84 32 83 72 65 76 76 32 84 72 69 32 67 79 80 89 82 73 71 72 84 32 72 79 76 68 69 82 32 66 69 32 76 73 65 66 76 69 32 70 79 82 32 65 78 89 32 67 76 65 73 77 44 32 68 65 77 65 71 69 83 32 79 82 32 79 84 72 69 82 32 76 73 65 66 73 76 73 84 89 44 32 73 78 67 76 85 68 73 78 71 32 65 78 89 32 71 69 78 69 82 65 76 44 32 83 80 69 67 73 65 76 44 32 73 78 68 73 82 69 67 84 44 32 73 78 67 73 68 69 78 84 65 76 44 32 79 82 32 67 79 78 83 69 81 85 69 78 84 73 65 76 32 68 65 77 65 71 69 83 44 32 87 72 69 84 72 69 82 32 73 78 32 65 78 32 65 67 84 73 79 78 32 79 70 32 67 79 78 84 82 65 67 84 44 32 84 79 82 84 32 79 82 32 79 84 72 69 82 87 73 83 69 44 32 65 82 73 83 73 78 71 32 70 82 79 77 44 32 79 85 84 32 79 70 32 84 72 69 32 85 83 69 32 79 82 32 73 78 65 66 73 76 73 84 89 32 84 79 32 85 83 69 32 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 32 79 82 32 70 82 79 77 32 79 84 72 69 82 32 68 69 65 76 73 78 71 83 32 73 78 32 84 72 69 32 70 79 78 84 32 83 79 70 84 87 65 82 69 46 104 116 116 112 58 47 47 119 119 119 46 97 100 111 98 101 46 99 111 109 47 116 121 112 101 47 108 101 103 97 108 46 104 116 109 108 83 108 97 115 104 101 100 32 122 101 114 111 83 116 114 97 105 103 104 116 32 108 65 108 116 101 114 110 97 116 101 32 97 65 108 116 101 114 110 97 116 101 32 103 83 101 114 105 102 101 100 32 73 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 50 0 48 0 49 0 48 0 44 0 32 0 50 0 48 0 49 0 50 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 46 0 32 0 65 0 108 0 108 0 32 0 82 0 105 0 103 0 104 0 116 0 115 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 46 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 83 0 97 0 110 0 115 0 32 0 80 0 114 0 111 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 49 0 46 0 48 0 53 0 48 0 59 0 65 0 68 0 66 0 69 0 59 0 83 0 111 0 117 0 114 0 99 0 101 0 83 0 97 0 110 0 115 0 80 0 114 0 111 0 45 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 59 0 65 0 68 0 79 0 66 0 69 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 48 0 53 0 48 0 59 0 80 0 83 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 48 0 48 0 48 0 59 0 104 0 111 0 116 0 99 0 111 0 110 0 118 0 32 0 49 0 46 0 48 0 46 0 55 0 48 0 59 0 109 0 97 0 107 0 101 0 111 0 116 0 102 0 46 0 108 0 105 0 98 0 50 0 46 0 53 0 46 0 53 0 57 0 48 0 48 0 83 0 111 0 117 0 114 0 99 0 101 0 83 0 97 0 110 0 115 0 80 0 114 0 111 0 45 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 105 0 115 0 32 0 97 0 32 0 116 0 114 0 97 0 100 0 101 0 109 0 97 0 114 0 107 0 32 0 111 0 102 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 85 0 110 0 105 0 116 0 101 0 100 0 32 0 83 0 116 0 97 0 116 0 101 0 115 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 99 0 111 0 117 0 110 0 116 0 114 0 105 0 101 0 115 0 46 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 80 0 97 0 117 0 108 0 32 0 68 0 46 0 32 0 72 0 117 0 110 0 116 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 116 0 121 0 112 0 101 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 50 0 48 0 49 0 48 0 44 0 32 0 50 0 48 0 49 0 50 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 40 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 41 0 44 0 32 0 119 0 105 0 116 0 104 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 32 0 39 0 83 0 111 0 117 0 114 0 99 0 101 0 39 0 46 0 32 0 65 0 108 0 108 0 32 0 82 0 105 0 103 0 104 0 116 0 115 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 46 0 32 0 83 0 111 0 117 0 114 0 99 0 101 0 32 0 105 0 115 0 32 0 97 0 32 0 116 0 114 0 97 0 100 0 101 0 109 0 97 0 114 0 107 0 32 0 111 0 102 0 32 0 65 0 100 0 111 0 98 0 101 0 32 0 83 0 121 0 115 0 116 0 101 0 109 0 115 0 32 0 73 0 110 0 99 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 101 0 100 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 85 0 110 0 105 0 116 0 101 0 100 0 32 0 83 0 116 0 97 0 116 0 101 0 115 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 99 0 111 0 117 0 110 0 116 0 114 0 105 0 101 0 115 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 83 0 73 0 76 0 32 0 79 0 112 0 101 0 110 0 32 0 70 0 111 0 110 0 116 0 32 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 44 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 49 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 105 0 115 0 32 0 99 0 111 0 112 0 105 0 101 0 100 0 32 0 98 0 101 0 108 0 111 0 119 0 44 0 32 0 97 0 110 0 100 0 32 0 105 0 115 0 32 0 97 0 108 0 115 0 111 0 32 0 97 0 118 0 97 0 105 0 108 0 97 0 98 0 108 0 101 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 32 0 70 0 65 0 81 0 32 0 97 0 116 0 58 0 32 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 115 0 99 0 114 0 105 0 112 0 116 0 115 0 46 0 115 0 105 0 108 0 46 0 111 0 114 0 103 0 47 0 79 0 70 0 76 0 13 0 10 0 13 0 10 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 13 0 10 0 83 0 73 0 76 0 32 0 79 0 80 0 69 0 78 0 32 0 70 0 79 0 78 0 84 0 32 0 76 0 73 0 67 0 69 0 78 0 83 0 69 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 49 0 32 0 45 0 32 0 50 0 54 0 32 0 70 0 101 0 98 0 114 0 117 0 97 0 114 0 121 0 32 0 50 0 48 0 48 0 55 0 13 0 10 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 45 0 13 0 10 0 13 0 10 0 80 0 82 0 69 0 65 0 77 0 66 0 76 0 69 0 13 0 10 0 84 0 104 0 101 0 32 0 103 0 111 0 97 0 108 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 79 0 112 0 101 0 110 0 32 0 70 0 111 0 110 0 116 0 32 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 40 0 79 0 70 0 76 0 41 0 32 0 97 0 114 0 101 0 32 0 116 0 111 0 32 0 115 0 116 0 105 0 109 0 117 0 108 0 97 0 116 0 101 0 32 0 119 0 111 0 114 0 108 0 100 0 119 0 105 0 100 0 101 0 32 0 100 0 101 0 118 0 101 0 108 0 111 0 112 0 109 0 101 0 110 0 116 0 32 0 111 0 102 0 32 0 99 0 111 0 108 0 108 0 97 0 98 0 111 0 114 0 97 0 116 0 105 0 118 0 101 0 32 0 102 0 111 0 110 0 116 0 32 0 112 0 114 0 111 0 106 0 101 0 99 0 116 0 115 0 44 0 32 0 116 0 111 0 32 0 115 0 117 0 112 0 112 0 111 0 114 0 116 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 105 0 111 0 110 0 32 0 101 0 102 0 102 0 111 0 114 0 116 0 115 0 32 0 111 0 102 0 32 0 97 0 99 0 97 0 100 0 101 0 109 0 105 0 99 0 32 0 97 0 110 0 100 0 32 0 108 0 105 0 110 0 103 0 117 0 105 0 115 0 116 0 105 0 99 0 32 0 99 0 111 0 109 0 109 0 117 0 110 0 105 0 116 0 105 0 101 0 115 0 44 0 32 0 97 0 110 0 100 0 32 0 116 0 111 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 32 0 97 0 32 0 102 0 114 0 101 0 101 0 32 0 97 0 110 0 100 0 32 0 111 0 112 0 101 0 110 0 32 0 102 0 114 0 97 0 109 0 101 0 119 0 111 0 114 0 107 0 32 0 105 0 110 0 32 0 119 0 104 0 105 0 99 0 104 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 115 0 104 0 97 0 114 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 105 0 109 0 112 0 114 0 111 0 118 0 101 0 100 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 110 0 101 0 114 0 115 0 104 0 105 0 112 0 32 0 119 0 105 0 116 0 104 0 32 0 111 0 116 0 104 0 101 0 114 0 115 0 46 0 13 0 10 0 13 0 10 0 84 0 104 0 101 0 32 0 79 0 70 0 76 0 32 0 97 0 108 0 108 0 111 0 119 0 115 0 32 0 116 0 104 0 101 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 100 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 98 0 101 0 32 0 117 0 115 0 101 0 100 0 44 0 32 0 115 0 116 0 117 0 100 0 105 0 101 0 100 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 102 0 114 0 101 0 101 0 108 0 121 0 32 0 97 0 115 0 32 0 108 0 111 0 110 0 103 0 32 0 97 0 115 0 32 0 116 0 104 0 101 0 121 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 115 0 111 0 108 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 109 0 115 0 101 0 108 0 118 0 101 0 115 0 46 0 32 0 84 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 44 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 105 0 110 0 103 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 119 0 111 0 114 0 107 0 115 0 44 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 98 0 117 0 110 0 100 0 108 0 101 0 100 0 44 0 32 0 101 0 109 0 98 0 101 0 100 0 100 0 101 0 100 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 115 0 111 0 108 0 100 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 110 0 121 0 32 0 115 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 100 0 32 0 116 0 104 0 97 0 116 0 32 0 97 0 110 0 121 0 32 0 114 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 110 0 97 0 109 0 101 0 115 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 117 0 115 0 101 0 100 0 32 0 98 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 119 0 111 0 114 0 107 0 115 0 46 0 32 0 84 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 97 0 110 0 100 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 115 0 44 0 32 0 104 0 111 0 119 0 101 0 118 0 101 0 114 0 44 0 32 0 99 0 97 0 110 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 114 0 101 0 108 0 101 0 97 0 115 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 116 0 121 0 112 0 101 0 32 0 111 0 102 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 32 0 114 0 101 0 113 0 117 0 105 0 114 0 101 0 109 0 101 0 110 0 116 0 32 0 102 0 111 0 114 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 114 0 101 0 109 0 97 0 105 0 110 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 100 0 111 0 101 0 115 0 32 0 110 0 111 0 116 0 32 0 97 0 112 0 112 0 108 0 121 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 101 0 100 0 32 0 117 0 115 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 111 0 114 0 32 0 116 0 104 0 101 0 105 0 114 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 115 0 46 0 13 0 10 0 13 0 10 0 68 0 69 0 70 0 73 0 78 0 73 0 84 0 73 0 79 0 78 0 83 0 13 0 10 0 34 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 115 0 101 0 116 0 32 0 111 0 102 0 32 0 102 0 105 0 108 0 101 0 115 0 32 0 114 0 101 0 108 0 101 0 97 0 115 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 97 0 110 0 100 0 32 0 99 0 108 0 101 0 97 0 114 0 108 0 121 0 32 0 109 0 97 0 114 0 107 0 101 0 100 0 32 0 97 0 115 0 32 0 115 0 117 0 99 0 104 0 46 0 32 0 84 0 104 0 105 0 115 0 32 0 109 0 97 0 121 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 101 0 32 0 115 0 111 0 117 0 114 0 99 0 101 0 32 0 102 0 105 0 108 0 101 0 115 0 44 0 32 0 98 0 117 0 105 0 108 0 100 0 32 0 115 0 99 0 114 0 105 0 112 0 116 0 115 0 32 0 97 0 110 0 100 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 97 0 116 0 105 0 111 0 110 0 46 0 13 0 10 0 13 0 10 0 34 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 110 0 97 0 109 0 101 0 115 0 32 0 115 0 112 0 101 0 99 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 115 0 32 0 115 0 117 0 99 0 104 0 32 0 97 0 102 0 116 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 115 0 116 0 97 0 116 0 101 0 109 0 101 0 110 0 116 0 40 0 115 0 41 0 46 0 13 0 10 0 13 0 10 0 34 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 108 0 108 0 101 0 99 0 116 0 105 0 111 0 110 0 32 0 111 0 102 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 32 0 97 0 115 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 46 0 13 0 10 0 13 0 10 0 34 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 114 0 105 0 118 0 97 0 116 0 105 0 118 0 101 0 32 0 109 0 97 0 100 0 101 0 32 0 98 0 121 0 32 0 97 0 100 0 100 0 105 0 110 0 103 0 32 0 116 0 111 0 44 0 32 0 100 0 101 0 108 0 101 0 116 0 105 0 110 0 103 0 44 0 32 0 111 0 114 0 32 0 115 0 117 0 98 0 115 0 116 0 105 0 116 0 117 0 116 0 105 0 110 0 103 0 32 0 45 0 45 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 119 0 104 0 111 0 108 0 101 0 32 0 45 0 45 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 44 0 32 0 98 0 121 0 32 0 99 0 104 0 97 0 110 0 103 0 105 0 110 0 103 0 32 0 102 0 111 0 114 0 109 0 97 0 116 0 115 0 32 0 111 0 114 0 32 0 98 0 121 0 32 0 112 0 111 0 114 0 116 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 116 0 111 0 32 0 97 0 32 0 110 0 101 0 119 0 32 0 101 0 110 0 118 0 105 0 114 0 111 0 110 0 109 0 101 0 110 0 116 0 46 0 13 0 10 0 13 0 10 0 34 0 65 0 117 0 116 0 104 0 111 0 114 0 34 0 32 0 114 0 101 0 102 0 101 0 114 0 115 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 101 0 115 0 105 0 103 0 110 0 101 0 114 0 44 0 32 0 101 0 110 0 103 0 105 0 110 0 101 0 101 0 114 0 44 0 32 0 112 0 114 0 111 0 103 0 114 0 97 0 109 0 109 0 101 0 114 0 44 0 32 0 116 0 101 0 99 0 104 0 110 0 105 0 99 0 97 0 108 0 32 0 119 0 114 0 105 0 116 0 101 0 114 0 32 0 111 0 114 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 112 0 101 0 114 0 115 0 111 0 110 0 32 0 119 0 104 0 111 0 32 0 99 0 111 0 110 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 46 0 13 0 10 0 13 0 10 0 80 0 69 0 82 0 77 0 73 0 83 0 83 0 73 0 79 0 78 0 32 0 38 0 32 0 67 0 79 0 78 0 68 0 73 0 84 0 73 0 79 0 78 0 83 0 13 0 10 0 80 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 32 0 105 0 115 0 32 0 104 0 101 0 114 0 101 0 98 0 121 0 32 0 103 0 114 0 97 0 110 0 116 0 101 0 100 0 44 0 32 0 102 0 114 0 101 0 101 0 32 0 111 0 102 0 32 0 99 0 104 0 97 0 114 0 103 0 101 0 44 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 112 0 101 0 114 0 115 0 111 0 110 0 32 0 111 0 98 0 116 0 97 0 105 0 110 0 105 0 110 0 103 0 32 0 97 0 32 0 99 0 111 0 112 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 116 0 111 0 32 0 117 0 115 0 101 0 44 0 32 0 115 0 116 0 117 0 100 0 121 0 44 0 32 0 99 0 111 0 112 0 121 0 44 0 32 0 109 0 101 0 114 0 103 0 101 0 44 0 32 0 101 0 109 0 98 0 101 0 100 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 121 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 44 0 32 0 97 0 110 0 100 0 32 0 115 0 101 0 108 0 108 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 97 0 110 0 100 0 32 0 117 0 110 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 99 0 111 0 112 0 105 0 101 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 115 0 117 0 98 0 106 0 101 0 99 0 116 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 102 0 111 0 108 0 108 0 111 0 119 0 105 0 110 0 103 0 32 0 99 0 111 0 110 0 100 0 105 0 116 0 105 0 111 0 110 0 115 0 58 0 13 0 10 0 13 0 10 0 49 0 41 0 32 0 78 0 101 0 105 0 116 0 104 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 110 0 111 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 105 0 116 0 115 0 32 0 105 0 110 0 100 0 105 0 118 0 105 0 100 0 117 0 97 0 108 0 32 0 99 0 111 0 109 0 112 0 111 0 110 0 101 0 110 0 116 0 115 0 44 0 32 0 105 0 110 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 111 0 114 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 115 0 44 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 115 0 111 0 108 0 100 0 32 0 98 0 121 0 32 0 105 0 116 0 115 0 101 0 108 0 102 0 46 0 13 0 10 0 13 0 10 0 50 0 41 0 32 0 79 0 114 0 105 0 103 0 105 0 110 0 97 0 108 0 32 0 111 0 114 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 115 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 98 0 117 0 110 0 100 0 108 0 101 0 100 0 44 0 32 0 114 0 101 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 97 0 110 0 100 0 47 0 111 0 114 0 32 0 115 0 111 0 108 0 100 0 32 0 119 0 105 0 116 0 104 0 32 0 97 0 110 0 121 0 32 0 115 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 112 0 114 0 111 0 118 0 105 0 100 0 101 0 100 0 32 0 116 0 104 0 97 0 116 0 32 0 101 0 97 0 99 0 104 0 32 0 99 0 111 0 112 0 121 0 32 0 99 0 111 0 110 0 116 0 97 0 105 0 110 0 115 0 32 0 116 0 104 0 101 0 32 0 97 0 98 0 111 0 118 0 101 0 32 0 99 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 110 0 111 0 116 0 105 0 99 0 101 0 32 0 97 0 110 0 100 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 115 0 101 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 105 0 110 0 99 0 108 0 117 0 100 0 101 0 100 0 32 0 101 0 105 0 116 0 104 0 101 0 114 0 32 0 97 0 115 0 32 0 115 0 116 0 97 0 110 0 100 0 45 0 97 0 108 0 111 0 110 0 101 0 32 0 116 0 101 0 120 0 116 0 32 0 102 0 105 0 108 0 101 0 115 0 44 0 32 0 104 0 117 0 109 0 97 0 110 0 45 0 114 0 101 0 97 0 100 0 97 0 98 0 108 0 101 0 32 0 104 0 101 0 97 0 100 0 101 0 114 0 115 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 116 0 104 0 101 0 32 0 97 0 112 0 112 0 114 0 111 0 112 0 114 0 105 0 97 0 116 0 101 0 32 0 109 0 97 0 99 0 104 0 105 0 110 0 101 0 45 0 114 0 101 0 97 0 100 0 97 0 98 0 108 0 101 0 32 0 109 0 101 0 116 0 97 0 100 0 97 0 116 0 97 0 32 0 102 0 105 0 101 0 108 0 100 0 115 0 32 0 119 0 105 0 116 0 104 0 105 0 110 0 32 0 116 0 101 0 120 0 116 0 32 0 111 0 114 0 32 0 98 0 105 0 110 0 97 0 114 0 121 0 32 0 102 0 105 0 108 0 101 0 115 0 32 0 97 0 115 0 32 0 108 0 111 0 110 0 103 0 32 0 97 0 115 0 32 0 116 0 104 0 111 0 115 0 101 0 32 0 102 0 105 0 101 0 108 0 100 0 115 0 32 0 99 0 97 0 110 0 32 0 98 0 101 0 32 0 101 0 97 0 115 0 105 0 108 0 121 0 32 0 118 0 105 0 101 0 119 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 117 0 115 0 101 0 114 0 46 0 13 0 10 0 13 0 10 0 51 0 41 0 32 0 78 0 111 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 109 0 97 0 121 0 32 0 117 0 115 0 101 0 32 0 116 0 104 0 101 0 32 0 82 0 101 0 115 0 101 0 114 0 118 0 101 0 100 0 32 0 70 0 111 0 110 0 116 0 32 0 78 0 97 0 109 0 101 0 40 0 115 0 41 0 32 0 117 0 110 0 108 0 101 0 115 0 115 0 32 0 101 0 120 0 112 0 108 0 105 0 99 0 105 0 116 0 32 0 119 0 114 0 105 0 116 0 116 0 101 0 110 0 32 0 112 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 32 0 105 0 115 0 32 0 103 0 114 0 97 0 110 0 116 0 101 0 100 0 32 0 98 0 121 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 114 0 114 0 101 0 115 0 112 0 111 0 110 0 100 0 105 0 110 0 103 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 46 0 32 0 84 0 104 0 105 0 115 0 32 0 114 0 101 0 115 0 116 0 114 0 105 0 99 0 116 0 105 0 111 0 110 0 32 0 111 0 110 0 108 0 121 0 32 0 97 0 112 0 112 0 108 0 105 0 101 0 115 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 112 0 114 0 105 0 109 0 97 0 114 0 121 0 32 0 102 0 111 0 110 0 116 0 32 0 110 0 97 0 109 0 101 0 32 0 97 0 115 0 32 0 112 0 114 0 101 0 115 0 101 0 110 0 116 0 101 0 100 0 32 0 116 0 111 0 32 0 116 0 104 0 101 0 32 0 117 0 115 0 101 0 114 0 115 0 46 0 13 0 10 0 13 0 10 0 52 0 41 0 32 0 84 0 104 0 101 0 32 0 110 0 97 0 109 0 101 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 111 0 114 0 32 0 116 0 104 0 101 0 32 0 65 0 117 0 116 0 104 0 111 0 114 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 32 0 115 0 104 0 97 0 108 0 108 0 32 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 117 0 115 0 101 0 100 0 32 0 116 0 111 0 32 0 112 0 114 0 111 0 109 0 111 0 116 0 101 0 44 0 32 0 101 0 110 0 100 0 111 0 114 0 115 0 101 0 32 0 111 0 114 0 32 0 97 0 100 0 118 0 101 0 114 0 116 0 105 0 115 0 101 0 32 0 97 0 110 0 121 0 32 0 77 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 44 0 32 0 101 0 120 0 99 0 101 0 112 0 116 0 32 0 116 0 111 0 32 0 97 0 99 0 107 0 110 0 111 0 119 0 108 0 101 0 100 0 103 0 101 0 32 0 116 0 104 0 101 0 32 0 99 0 111 0 110 0 116 0 114 0 105 0 98 0 117 0 116 0 105 0 111 0 110 0 40 0 115 0 41 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 67 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 72 0 111 0 108 0 100 0 101 0 114 0 40 0 115 0 41 0 32 0 97 0 110 0 100 0 32 0 116 0 104 0 101 0 32 0 65 0 117 0 116 0 104 0 111 0 114 0 40 0 115 0 41 0 32 0 111 0 114 0 32 0 119 0 105 0 116 0 104 0 32 0 116 0 104 0 101 0 105 0 114 0 32 0 101 0 120 0 112 0 108 0 105 0 99 0 105 0 116 0 32 0 119 0 114 0 105 0 116 0 116 0 101 0 110 0 32 0 112 0 101 0 114 0 109 0 105 0 115 0 115 0 105 0 111 0 110 0 46 0 13 0 10 0 13 0 10 0 53 0 41 0 32 0 84 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 44 0 32 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 32 0 111 0 114 0 32 0 117 0 110 0 109 0 111 0 100 0 105 0 102 0 105 0 101 0 100 0 44 0 32 0 105 0 110 0 32 0 112 0 97 0 114 0 116 0 32 0 111 0 114 0 32 0 105 0 110 0 32 0 119 0 104 0 111 0 108 0 101 0 44 0 32 0 109 0 117 0 115 0 116 0 32 0 98 0 101 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 101 0 110 0 116 0 105 0 114 0 101 0 108 0 121 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 44 0 32 0 97 0 110 0 100 0 32 0 109 0 117 0 115 0 116 0 32 0 110 0 111 0 116 0 32 0 98 0 101 0 32 0 100 0 105 0 115 0 116 0 114 0 105 0 98 0 117 0 116 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 97 0 110 0 121 0 32 0 111 0 116 0 104 0 101 0 114 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 46 0 32 0 84 0 104 0 101 0 32 0 114 0 101 0 113 0 117 0 105 0 114 0 101 0 109 0 101 0 110 0 116 0 32 0 102 0 111 0 114 0 32 0 102 0 111 0 110 0 116 0 115 0 32 0 116 0 111 0 32 0 114 0 101 0 109 0 97 0 105 0 110 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 100 0 111 0 101 0 115 0 32 0 110 0 111 0 116 0 32 0 97 0 112 0 112 0 108 0 121 0 32 0 116 0 111 0 32 0 97 0 110 0 121 0 32 0 100 0 111 0 99 0 117 0 109 0 101 0 110 0 116 0 32 0 99 0 114 0 101 0 97 0 116 0 101 0 100 0 32 0 117 0 115 0 105 0 110 0 103 0 32 0 116 0 104 0 101 0 32 0 70 0 111 0 110 0 116 0 32 0 83 0 111 0 102 0 116 0 119 0 97 0 114 0 101 0 46 0 13 0 10 0 13 0 10 0 84 0 69 0 82 0 77 0 73 0 78 0 65 0 84 0 73 0 79 0 78 0 13 0 10 0 84 0 104 0 105 0 115 0 32 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 32 0 98 0 101 0 99 0 111 0 109 0 101 0 115 0 32 0 110 0 117 0 108 0 108 0 32 0 97 0 110 0 100 0 32 0 118 0 111 0 105 0 100 0 32 0 105 0 102 0 32 0 97 0 110 0 121 0 32 0 111 0 102 0 32 0 116 0 104 0 101 0 32 0 97 0 98 0 111 0 118 0 101 0 32 0 99 0 111 0 110 0 100 0 105 0 116 0 105 0 111 0 110 0 115 0 32 0 97 0 114 0 101 0 32 0 110 0 111 0 116 0 32 0 109 0 101 0 116 0 46 0 13 0 10 0 13 0 10 0 68 0 73 0 83 0 67 0 76 0 65 0 73 0 77 0 69 0 82 0 13 0 10 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 32 0 73 0 83 0 32 0 80 0 82 0 79 0 86 0 73 0 68 0 69 0 68 0 32 0 34 0 65 0 83 0 32 0 73 0 83 0 34 0 44 0 32 0 87 0 73 0 84 0 72 0 79 0 85 0 84 0 32 0 87 0 65 0 82 0 82 0 65 0 78 0 84 0 89 0 32 0 79 0 70 0 32 0 65 0 78 0 89 0 32 0 75 0 73 0 78 0 68 0 44 0 32 0 69 0 88 0 80 0 82 0 69 0 83 0 83 0 32 0 79 0 82 0 32 0 73 0 77 0 80 0 76 0 73 0 69 0 68 0 44 0 32 0 73 0 78 0 67 0 76 0 85 0 68 0 73 0 78 0 71 0 32 0 66 0 85 0 84 0 32 0 78 0 79 0 84 0 32 0 76 0 73 0 77 0 73 0 84 0 69 0 68 0 32 0 84 0 79 0 32 0 65 0 78 0 89 0 32 0 87 0 65 0 82 0 82 0 65 0 78 0 84 0 73 0 69 0 83 0 32 0 79 0 70 0 32 0 77 0 69 0 82 0 67 0 72 0 65 0 78 0 84 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 44 0 32 0 70 0 73 0 84 0 78 0 69 0 83 0 83 0 32 0 70 0 79 0 82 0 32 0 65 0 32 0 80 0 65 0 82 0 84 0 73 0 67 0 85 0 76 0 65 0 82 0 32 0 80 0 85 0 82 0 80 0 79 0 83 0 69 0 32 0 65 0 78 0 68 0 32 0 78 0 79 0 78 0 73 0 78 0 70 0 82 0 73 0 78 0 71 0 69 0 77 0 69 0 78 0 84 0 32 0 79 0 70 0 32 0 67 0 79 0 80 0 89 0 82 0 73 0 71 0 72 0 84 0 44 0 32 0 80 0 65 0 84 0 69 0 78 0 84 0 44 0 32 0 84 0 82 0 65 0 68 0 69 0 77 0 65 0 82 0 75 0 44 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 82 0 73 0 71 0 72 0 84 0 46 0 32 0 73 0 78 0 32 0 78 0 79 0 32 0 69 0 86 0 69 0 78 0 84 0 32 0 83 0 72 0 65 0 76 0 76 0 32 0 84 0 72 0 69 0 32 0 67 0 79 0 80 0 89 0 82 0 73 0 71 0 72 0 84 0 32 0 72 0 79 0 76 0 68 0 69 0 82 0 32 0 66 0 69 0 32 0 76 0 73 0 65 0 66 0 76 0 69 0 32 0 70 0 79 0 82 0 32 0 65 0 78 0 89 0 32 0 67 0 76 0 65 0 73 0 77 0 44 0 32 0 68 0 65 0 77 0 65 0 71 0 69 0 83 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 76 0 73 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 44 0 32 0 73 0 78 0 67 0 76 0 85 0 68 0 73 0 78 0 71 0 32 0 65 0 78 0 89 0 32 0 71 0 69 0 78 0 69 0 82 0 65 0 76 0 44 0 32 0 83 0 80 0 69 0 67 0 73 0 65 0 76 0 44 0 32 0 73 0 78 0 68 0 73 0 82 0 69 0 67 0 84 0 44 0 32 0 73 0 78 0 67 0 73 0 68 0 69 0 78 0 84 0 65 0 76 0 44 0 32 0 79 0 82 0 32 0 67 0 79 0 78 0 83 0 69 0 81 0 85 0 69 0 78 0 84 0 73 0 65 0 76 0 32 0 68 0 65 0 77 0 65 0 71 0 69 0 83 0 44 0 32 0 87 0 72 0 69 0 84 0 72 0 69 0 82 0 32 0 73 0 78 0 32 0 65 0 78 0 32 0 65 0 67 0 84 0 73 0 79 0 78 0 32 0 79 0 70 0 32 0 67 0 79 0 78 0 84 0 82 0 65 0 67 0 84 0 44 0 32 0 84 0 79 0 82 0 84 0 32 0 79 0 82 0 32 0 79 0 84 0 72 0 69 0 82 0 87 0 73 0 83 0 69 0 44 0 32 0 65 0 82 0 73 0 83 0 73 0 78 0 71 0 32 0 70 0 82 0 79 0 77 0 44 0 32 0 79 0 85 0 84 0 32 0 79 0 70 0 32 0 84 0 72 0 69 0 32 0 85 0 83 0 69 0 32 0 79 0 82 0 32 0 73 0 78 0 65 0 66 0 73 0 76 0 73 0 84 0 89 0 32 0 84 0 79 0 32 0 85 0 83 0 69 0 32 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 32 0 79 0 82 0 32 0 70 0 82 0 79 0 77 0 32 0 79 0 84 0 72 0 69 0 82 0 32 0 68 0 69 0 65 0 76 0 73 0 78 0 71 0 83 0 32 0 73 0 78 0 32 0 84 0 72 0 69 0 32 0 70 0 79 0 78 0 84 0 32 0 83 0 79 0 70 0 84 0 87 0 65 0 82 0 69 0 46 0 13 0 10 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 100 0 111 0 98 0 101 0 46 0 99 0 111 0 109 0 47 0 116 0 121 0 112 0 101 0 47 0 108 0 101 0 103 0 97 0 108 0 46 0 104 0 116 0 109 0 108 0 83 0 108 0 97 0 115 0 104 0 101 0 100 0 32 0 122 0 101 0 114 0 111 0 83 0 116 0 114 0 97 0 105 0 103 0 104 0 116 0 32 0 108 0 65 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 32 0 97 0 65 0 108 0 116 0 101 0 114 0 110 0 97 0 116 0 101 0 32 0 103 0 83 0 101 0 114 0 105 0 102 0 101 0 100 0 32 0 73 0 0 0 2 0 0 0 0 0 0 255 181 0 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 91 0 0 1 2 1 3 0 3 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 93 0 173 0 201 0 199 0 174 0 98 1 4 1 5 0 99 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 0 144 0 100 0 253 1 20 0 255 1 21 1 22 1 23 1 24 1 25 0 203 0 101 0 200 1 26 0 202 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 0 248 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 0 207 0 204 0 205 1 49 0 206 1 50 0 250 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 0 226 1 64 1 65 1 66 0 102 1 67 1 68 1 69 1 70 0 211 0 208 0 209 0 175 0 103 1 71 1 72 1 73 1 74 1 75 1 76 1 77 1 78 1 79 1 80 0 145 0 176 1 81 1 82 1 83 1 84 1 85 1 86 1 87 1 88 1 89 1 90 1 91 1 92 1 93 1 94 1 95 0 228 1 96 1 97 1 98 1 99 1 100 1 101 1 102 1 103 1 104 1 105 0 214 0 212 0 213 1 106 0 104 1 107 1 108 1 109 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 1 121 1 122 1 123 1 124 1 125 1 126 1 127 1 128 1 129 0 235 1 130 0 187 1 131 1 132 1 133 1 134 1 135 0 230 1 136 1 137 0 233 0 237 1 138 0 106 0 105 0 107 0 109 0 108 1 139 1 140 0 110 1 141 1 142 1 143 1 144 1 145 1 146 1 147 1 148 1 149 1 150 1 151 1 152 1 153 1 154 0 160 0 111 0 254 1 155 1 0 1 156 1 157 1 158 1 159 1 1 0 113 0 112 0 114 1 160 0 115 1 161 1 162 1 163 1 164 1 165 1 166 1 167 1 168 1 169 1 170 1 171 1 172 1 173 0 249 1 174 1 175 1 176 1 177 1 178 1 179 1 180 1 181 1 182 0 117 0 116 0 118 1 183 0 119 1 184 1 185 1 186 1 187 1 188 1 189 0 215 1 190 1 191 1 192 1 193 1 194 1 195 1 196 1 197 1 198 1 199 0 227 1 200 1 201 1 202 0 120 1 203 1 204 1 205 1 206 1 207 0 122 0 121 0 123 0 125 0 124 1 208 1 209 1 210 1 211 1 212 1 213 1 214 1 215 1 216 1 217 0 161 0 177 1 218 1 219 1 220 1 221 1 222 1 223 1 224 1 225 1 226 1 227 1 228 1 229 1 230 1 231 1 232 0 229 1 233 1 234 1 235 1 236 0 137 1 237 1 238 1 239 1 240 1 241 1 242 0 127 0 126 0 128 1 243 0 129 1 244 1 245 1 246 1 247 1 248 1 249 1 250 1 251 1 252 1 253 1 254 1 255 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 0 236 2 11 0 186 2 12 2 13 2 14 2 15 2 16 0 231 2 17 2 18 0 234 0 238 2 19 2 20 2 21 2 22 2 23 0 192 0 193 2 24 2 25 2 26 2 27 2 28 2 29 2 30 2 31 2 32 2 33 2 34 2 35 2 36 2 37 2 38 2 39 2 40 2 41 2 42 2 43 2 44 2 45 2 46 2 47 2 48 2 49 2 50 2 51 2 52 2 53 2 54 2 55 2 56 2 57 2 58 2 59 2 60 2 61 2 62 2 63 2 64 2 65 2 66 2 67 2 68 2 69 2 70 2 71 2 72 2 73 2 74 2 75 2 76 2 77 0 9 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 2 78 2 79 2 80 2 81 2 82 2 83 2 84 2 85 2 86 2 87 2 88 2 89 2 90 2 91 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 106 2 107 0 17 0 15 0 29 0 30 0 171 0 4 0 163 0 34 0 162 0 10 0 5 0 182 0 183 0 180 0 181 0 196 0 197 0 190 0 191 0 169 0 170 0 16 2 108 0 178 0 179 2 109 2 110 0 195 0 135 0 66 0 11 0 12 0 62 0 64 0 94 0 96 0 18 0 95 0 63 0 232 0 13 0 130 0 194 0 134 0 136 0 139 2 111 0 138 0 140 2 112 0 35 2 113 0 6 2 114 2 115 2 116 2 117 2 118 2 119 2 120 2 121 2 122 2 123 2 124 2 125 2 126 2 127 2 128 2 129 2 130 2 131 2 132 2 133 2 134 2 135 2 136 2 137 2 138 2 139 2 140 2 141 2 142 2 143 2 144 2 145 2 146 2 147 2 148 2 149 2 150 2 151 2 152 2 153 2 154 2 155 2 156 2 157 2 158 2 159 2 160 2 161 2 162 2 163 2 164 2 165 2 166 2 167 2 168 2 169 0 157 2 170 0 158 2 171 2 172 2 173 2 174 2 175 2 176 2 177 2 178 2 179 2 180 2 181 2 182 2 183 2 184 2 185 2 186 2 187 2 188 2 189 2 190 2 191 2 192 2 193 2 194 2 195 2 196 2 197 2 198 2 199 2 200 2 201 2 202 0 131 0 189 0 7 0 133 0 150 2 203 0 132 2 204 2 205 2 206 2 207 2 208 2 209 2 210 2 211 2 212 2 213 2 214 0 188 2 215 2 216 0 8 0 198 0 245 0 244 0 246 2 217 2 218 2 219 2 220 2 221 2 222 0 14 0 239 0 240 0 184 2 223 0 32 0 31 0 33 0 148 0 149 0 147 0 65 0 143 0 97 0 167 0 164 0 155 0 146 2 224 0 152 0 156 0 165 2 225 2 226 0 153 0 154 2 227 2 228 2 229 2 230 2 231 2 232 2 233 2 234 2 235 2 236 2 237 2 238 2 239 2 240 2 241 2 242 2 243 2 244 2 245 2 246 2 247 2 248 0 185 2 249 2 250 2 251 2 252 2 253 2 254 0 67 0 141 0 216 0 225 2 255 3 0 3 1 3 2 3 3 0 217 0 142 0 218 0 219 0 221 0 223 0 220 0 222 0 224 3 4 3 5 3 6 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 3 21 3 22 3 23 3 24 3 25 3 26 3 27 3 28 3 29 3 30 3 31 3 32 3 33 3 34 3 35 3 36 3 37 3 38 3 39 3 40 3 41 3 42 3 43 3 44 3 45 3 46 3 47 3 48 3 49 3 50 3 51 3 52 3 53 3 54 3 55 3 56 3 57 3 58 3 59 3 60 3 61 3 62 3 63 3 64 3 65 3 66 3 67 3 68 3 69 3 70 3 71 3 72 3 73 3 74 3 75 3 76 3 77 3 78 3 79 3 80 3 81 3 82 3 83 3 84 3 85 3 86 3 87 3 88 3 89 3 90 3 91 3 92 3 93 3 94 3 95 3 96 3 97 3 98 3 99 3 100 3 101 3 102 3 103 3 104 3 105 3 106 3 107 3 108 3 109 3 110 3 111 3 112 3 113 3 114 3 115 3 116 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 140 3 141 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 168 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 186 3 187 3 188 3 189 3 190 3 191 3 192 3 193 3 194 3 195 3 196 3 197 3 198 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 235 3 236 3 237 3 238 3 239 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 250 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 42 4 43 4 44 4 45 4 46 4 47 4 48 4 49 4 50 4 51 4 52 4 53 4 54 4 55 4 56 4 57 4 58 4 59 4 60 4 61 4 62 4 63 4 64 4 65 4 66 4 67 4 68 4 69 4 70 4 71 4 72 4 73 4 74 4 75 4 76 4 77 4 78 4 79 4 80 4 81 4 82 4 83 4 84 4 85 4 86 4 87 4 88 4 89 4 90 4 91 4 92 4 93 4 94 4 95 4 96 4 97 4 98 4 99 4 100 4 101 4 102 4 103 4 104 4 78 85 76 76 2 67 82 7 65 109 97 99 114 111 110 6 65 98 114 101 118 101 7 117 110 105 48 49 67 68 7 117 110 105 49 69 65 48 7 117 110 105 49 69 65 50 7 117 110 105 49 69 65 52 7 117 110 105 49 69 65 54 7 117 110 105 49 69 65 56 7 117 110 105 49 69 65 65 7 117 110 105 49 69 65 67 7 117 110 105 49 69 65 69 7 117 110 105 49 69 66 48 7 117 110 105 49 69 66 50 7 117 110 105 49 69 66 52 7 117 110 105 49 69 66 54 7 65 111 103 111 110 101 107 11 67 99 105 114 99 117 109 102 108 101 120 10 67 100 111 116 97 99 99 101 110 116 6 68 99 97 114 111 110 7 117 110 105 49 69 48 67 7 117 110 105 49 69 48 69 6 68 99 114 111 97 116 6 69 99 97 114 111 110 7 69 109 97 99 114 111 110 6 69 98 114 101 118 101 10 69 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 66 56 7 117 110 105 49 69 66 65 7 117 110 105 49 69 66 67 7 117 110 105 49 69 66 69 7 117 110 105 49 69 67 48 7 117 110 105 49 69 67 50 7 117 110 105 49 69 67 52 7 117 110 105 49 69 67 54 7 69 111 103 111 110 101 107 11 71 99 105 114 99 117 109 102 108 101 120 10 71 100 111 116 97 99 99 101 110 116 7 117 110 105 48 49 50 50 6 71 99 97 114 111 110 7 117 110 105 49 69 50 48 11 117 110 105 48 48 52 55 48 51 48 51 11 72 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 50 52 7 117 110 105 49 69 50 65 4 72 98 97 114 6 73 116 105 108 100 101 7 73 109 97 99 114 111 110 7 117 110 105 48 49 67 70 7 117 110 105 49 69 67 56 7 117 110 105 49 69 67 65 7 73 111 103 111 110 101 107 11 74 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 51 54 6 76 97 99 117 116 101 6 76 99 97 114 111 110 7 117 110 105 48 49 51 66 4 76 100 111 116 7 117 110 105 49 69 51 54 7 117 110 105 49 69 51 56 7 117 110 105 49 69 51 65 7 117 110 105 49 69 52 50 6 78 97 99 117 116 101 6 78 99 97 114 111 110 7 117 110 105 48 49 52 53 7 117 110 105 49 69 52 52 7 117 110 105 49 69 52 54 7 117 110 105 49 69 52 56 7 79 109 97 99 114 111 110 13 79 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 49 7 117 110 105 49 69 67 67 7 117 110 105 49 69 67 69 7 117 110 105 49 69 68 48 7 117 110 105 49 69 68 50 7 117 110 105 49 69 68 52 7 117 110 105 49 69 68 54 7 117 110 105 49 69 68 56 5 79 104 111 114 110 7 117 110 105 49 69 68 65 7 117 110 105 49 69 68 67 7 117 110 105 49 69 68 69 7 117 110 105 49 69 69 48 7 117 110 105 49 69 69 50 7 117 110 105 48 49 69 65 6 82 97 99 117 116 101 6 82 99 97 114 111 110 7 117 110 105 48 49 53 54 7 117 110 105 49 69 53 65 7 117 110 105 49 69 53 67 7 117 110 105 49 69 53 69 6 83 97 99 117 116 101 11 83 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 53 69 7 117 110 105 48 50 49 56 7 117 110 105 49 69 54 48 7 117 110 105 49 69 54 50 7 117 110 105 49 69 57 69 6 84 99 97 114 111 110 7 117 110 105 48 49 54 50 7 117 110 105 48 50 49 65 7 117 110 105 49 69 54 67 7 117 110 105 49 69 54 69 6 85 116 105 108 100 101 7 85 109 97 99 114 111 110 6 85 98 114 101 118 101 5 85 114 105 110 103 13 85 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 51 7 117 110 105 48 49 68 53 7 117 110 105 48 49 68 55 7 117 110 105 48 49 68 57 7 117 110 105 48 49 68 66 7 117 110 105 49 69 69 52 7 117 110 105 49 69 69 54 7 85 111 103 111 110 101 107 5 85 104 111 114 110 7 117 110 105 49 69 69 56 7 117 110 105 49 69 69 65 7 117 110 105 49 69 69 67 7 117 110 105 49 69 69 69 7 117 110 105 49 69 70 48 6 87 103 114 97 118 101 6 87 97 99 117 116 101 11 87 99 105 114 99 117 109 102 108 101 120 9 87 100 105 101 114 101 115 105 115 6 89 103 114 97 118 101 11 89 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 56 69 7 117 110 105 49 69 70 52 7 117 110 105 49 69 70 54 7 117 110 105 49 69 70 56 6 90 97 99 117 116 101 10 90 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 57 50 7 117 110 105 48 49 56 70 7 97 109 97 99 114 111 110 6 97 98 114 101 118 101 7 117 110 105 48 49 67 69 7 117 110 105 49 69 65 49 7 117 110 105 49 69 65 51 7 117 110 105 49 69 65 53 7 117 110 105 49 69 65 55 7 117 110 105 49 69 65 57 7 117 110 105 49 69 65 66 7 117 110 105 49 69 65 68 7 117 110 105 49 69 65 70 7 117 110 105 49 69 66 49 7 117 110 105 49 69 66 51 7 117 110 105 49 69 66 53 7 117 110 105 49 69 66 55 7 97 111 103 111 110 101 107 11 99 99 105 114 99 117 109 102 108 101 120 10 99 100 111 116 97 99 99 101 110 116 6 100 99 97 114 111 110 7 117 110 105 49 69 48 68 7 117 110 105 49 69 48 70 6 101 99 97 114 111 110 7 101 109 97 99 114 111 110 6 101 98 114 101 118 101 10 101 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 66 57 7 117 110 105 49 69 66 66 7 117 110 105 49 69 66 68 7 117 110 105 49 69 66 70 7 117 110 105 49 69 67 49 7 117 110 105 49 69 67 51 7 117 110 105 49 69 67 53 7 117 110 105 49 69 67 55 7 101 111 103 111 110 101 107 11 103 99 105 114 99 117 109 102 108 101 120 10 103 100 111 116 97 99 99 101 110 116 7 117 110 105 48 49 50 51 6 103 99 97 114 111 110 7 117 110 105 49 69 50 49 11 117 110 105 48 48 54 55 48 51 48 51 11 104 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 50 53 7 117 110 105 49 69 50 66 4 104 98 97 114 6 105 116 105 108 100 101 7 105 109 97 99 114 111 110 7 117 110 105 48 49 68 48 7 117 110 105 49 69 67 57 7 117 110 105 49 69 67 66 7 105 111 103 111 110 101 107 9 105 111 103 111 110 101 107 46 100 11 106 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 51 55 12 107 103 114 101 101 110 108 97 110 100 105 99 6 108 97 99 117 116 101 6 108 99 97 114 111 110 4 108 100 111 116 7 117 110 105 48 49 51 67 7 117 110 105 49 69 51 55 7 117 110 105 49 69 51 57 7 117 110 105 49 69 51 66 7 117 110 105 49 69 52 51 6 110 97 99 117 116 101 6 110 99 97 114 111 110 7 117 110 105 48 49 52 54 7 117 110 105 49 69 52 53 7 117 110 105 49 69 52 55 7 117 110 105 49 69 52 57 11 110 97 112 111 115 116 114 111 112 104 101 7 111 109 97 99 114 111 110 13 111 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 50 7 117 110 105 49 69 67 68 7 117 110 105 49 69 67 70 7 117 110 105 49 69 68 49 7 117 110 105 49 69 68 51 7 117 110 105 49 69 68 53 7 117 110 105 49 69 68 55 7 117 110 105 49 69 68 57 5 111 104 111 114 110 7 117 110 105 49 69 68 66 7 117 110 105 49 69 68 68 7 117 110 105 49 69 68 70 7 117 110 105 49 69 69 49 7 117 110 105 49 69 69 51 7 117 110 105 48 49 69 66 6 114 97 99 117 116 101 7 117 110 105 48 49 53 55 6 114 99 97 114 111 110 7 117 110 105 49 69 53 66 7 117 110 105 49 69 53 68 7 117 110 105 49 69 53 70 6 115 97 99 117 116 101 11 115 99 105 114 99 117 109 102 108 101 120 7 117 110 105 48 49 53 70 7 117 110 105 48 50 49 57 7 117 110 105 49 69 54 49 7 117 110 105 49 69 54 51 6 116 99 97 114 111 110 7 117 110 105 48 49 54 51 7 117 110 105 48 50 49 66 7 117 110 105 49 69 54 68 7 117 110 105 49 69 54 70 7 117 110 105 49 69 57 55 6 117 116 105 108 100 101 7 117 109 97 99 114 111 110 6 117 98 114 101 118 101 5 117 114 105 110 103 13 117 104 117 110 103 97 114 117 109 108 97 117 116 7 117 110 105 48 49 68 52 7 117 110 105 48 49 68 54 7 117 110 105 48 49 68 56 7 117 110 105 48 49 68 65 7 117 110 105 48 49 68 67 7 117 110 105 49 69 69 53 7 117 110 105 49 69 69 55 7 117 111 103 111 110 101 107 5 117 104 111 114 110 7 117 110 105 49 69 69 57 7 117 110 105 49 69 69 66 7 117 110 105 49 69 69 68 7 117 110 105 49 69 69 70 7 117 110 105 49 69 70 49 6 119 103 114 97 118 101 6 119 97 99 117 116 101 11 119 99 105 114 99 117 109 102 108 101 120 9 119 100 105 101 114 101 115 105 115 6 121 103 114 97 118 101 11 121 99 105 114 99 117 109 102 108 101 120 7 117 110 105 49 69 56 70 7 117 110 105 49 69 70 53 7 117 110 105 49 69 70 55 7 117 110 105 49 69 70 57 6 122 97 99 117 116 101 10 122 100 111 116 97 99 99 101 110 116 7 117 110 105 49 69 57 51 7 117 110 105 48 50 51 55 7 117 110 105 48 50 53 49 7 117 110 105 48 50 53 57 7 117 110 105 48 50 54 49 3 102 95 102 3 102 95 116 3 73 46 97 8 73 103 114 97 118 101 46 97 8 73 97 99 117 116 101 46 97 13 73 99 105 114 99 117 109 102 108 101 120 46 97 8 73 116 105 108 100 101 46 97 11 73 100 105 101 114 101 115 105 115 46 97 9 73 109 97 99 114 111 110 46 97 12 73 100 111 116 97 99 99 101 110 116 46 97 9 117 110 105 48 49 67 70 46 97 9 117 110 105 49 69 67 56 46 97 9 117 110 105 49 69 67 65 46 97 9 73 111 103 111 110 101 107 46 97 3 97 46 97 8 97 103 114 97 118 101 46 97 8 97 97 99 117 116 101 46 97 13 97 99 105 114 99 117 109 102 108 101 120 46 97 8 97 116 105 108 100 101 46 97 11 97 100 105 101 114 101 115 105 115 46 97 9 97 109 97 99 114 111 110 46 97 8 97 98 114 101 118 101 46 97 7 97 114 105 110 103 46 97 9 117 110 105 48 49 67 69 46 97 9 117 110 105 49 69 65 49 46 97 9 117 110 105 49 69 65 51 46 97 9 117 110 105 49 69 65 53 46 97 9 117 110 105 49 69 65 55 46 97 9 117 110 105 49 69 65 57 46 97 9 117 110 105 49 69 65 66 46 97 9 117 110 105 49 69 65 68 46 97 9 117 110 105 49 69 65 70 46 97 9 117 110 105 49 69 66 49 46 97 9 117 110 105 49 69 66 51 46 97 9 117 110 105 49 69 66 53 46 97 9 117 110 105 49 69 66 55 46 97 9 97 111 103 111 110 101 107 46 97 3 103 46 97 13 103 99 105 114 99 117 109 102 108 101 120 46 97 8 103 98 114 101 118 101 46 97 12 103 100 111 116 97 99 99 101 110 116 46 97 9 117 110 105 48 49 50 51 46 97 8 103 99 97 114 111 110 46 97 9 117 110 105 49 69 50 49 46 97 13 117 110 105 48 48 54 55 48 51 48 51 46 97 3 108 46 97 8 108 97 99 117 116 101 46 97 8 108 99 97 114 111 110 46 97 6 108 100 111 116 46 97 9 117 110 105 48 49 51 67 46 97 9 117 110 105 49 69 51 55 46 97 9 117 110 105 49 69 51 57 46 97 9 117 110 105 49 69 51 66 46 97 8 108 115 108 97 115 104 46 97 4 102 108 46 97 9 122 101 114 111 46 112 110 117 109 8 111 110 101 46 112 110 117 109 8 116 119 111 46 112 110 117 109 10 116 104 114 101 101 46 112 110 117 109 9 102 111 117 114 46 112 110 117 109 9 102 105 118 101 46 112 110 117 109 8 115 105 120 46 112 110 117 109 10 115 101 118 101 110 46 112 110 117 109 10 101 105 103 104 116 46 112 110 117 109 9 110 105 110 101 46 112 110 117 109 9 122 101 114 111 46 116 110 117 109 8 111 110 101 46 116 110 117 109 8 116 119 111 46 116 110 117 109 10 116 104 114 101 101 46 116 110 117 109 9 102 111 117 114 46 116 110 117 109 9 102 105 118 101 46 116 110 117 109 8 115 105 120 46 116 110 117 109 10 115 101 118 101 110 46 116 110 117 109 10 101 105 103 104 116 46 116 110 117 109 9 110 105 110 101 46 116 110 117 109 9 122 101 114 111 46 111 110 117 109 8 111 110 101 46 111 110 117 109 8 116 119 111 46 111 110 117 109 10 116 104 114 101 101 46 111 110 117 109 9 102 111 117 114 46 111 110 117 109 9 102 105 118 101 46 111 110 117 109 8 115 105 120 46 111 110 117 109 10 115 101 118 101 110 46 111 110 117 109 10 101 105 103 104 116 46 111 110 117 109 9 110 105 110 101 46 111 110 117 109 7 117 110 105 48 48 65 68 10 102 105 103 117 114 101 100 97 115 104 7 117 110 105 50 48 49 53 7 117 110 105 50 49 49 55 7 117 110 105 50 49 50 48 7 97 116 46 99 97 115 101 9 122 101 114 111 46 115 117 112 115 8 111 110 101 46 115 117 112 115 8 116 119 111 46 115 117 112 115 10 116 104 114 101 101 46 115 117 112 115 9 102 111 117 114 46 115 117 112 115 9 102 105 118 101 46 115 117 112 115 8 115 105 120 46 115 117 112 115 10 115 101 118 101 110 46 115 117 112 115 10 101 105 103 104 116 46 115 117 112 115 9 110 105 110 101 46 115 117 112 115 14 112 97 114 101 110 108 101 102 116 46 115 117 112 115 15 112 97 114 101 110 114 105 103 104 116 46 115 117 112 115 11 112 101 114 105 111 100 46 115 117 112 115 10 99 111 109 109 97 46 115 117 112 115 9 122 101 114 111 46 115 117 98 115 8 111 110 101 46 115 117 98 115 8 116 119 111 46 115 117 98 115 10 116 104 114 101 101 46 115 117 98 115 9 102 111 117 114 46 115 117 98 115 9 102 105 118 101 46 115 117 98 115 8 115 105 120 46 115 117 98 115 10 115 101 118 101 110 46 115 117 98 115 10 101 105 103 104 116 46 115 117 98 115 9 110 105 110 101 46 115 117 98 115 14 112 97 114 101 110 108 101 102 116 46 115 117 98 115 15 112 97 114 101 110 114 105 103 104 116 46 115 117 98 115 11 112 101 114 105 111 100 46 115 117 98 115 10 99 111 109 109 97 46 115 117 98 115 9 122 101 114 111 46 100 110 111 109 8 111 110 101 46 100 110 111 109 8 116 119 111 46 100 110 111 109 10 116 104 114 101 101 46 100 110 111 109 9 102 111 117 114 46 100 110 111 109 9 102 105 118 101 46 100 110 111 109 8 115 105 120 46 100 110 111 109 10 115 101 118 101 110 46 100 110 111 109 10 101 105 103 104 116 46 100 110 111 109 9 110 105 110 101 46 100 110 111 109 14 112 97 114 101 110 108 101 102 116 46 100 110 111 109 15 112 97 114 101 110 114 105 103 104 116 46 100 110 111 109 11 112 101 114 105 111 100 46 100 110 111 109 10 99 111 109 109 97 46 100 110 111 109 9 122 101 114 111 46 110 117 109 114 8 111 110 101 46 110 117 109 114 8 116 119 111 46 110 117 109 114 10 116 104 114 101 101 46 110 117 109 114 9 102 111 117 114 46 110 117 109 114 9 102 105 118 101 46 110 117 109 114 8 115 105 120 46 110 117 109 114 10 115 101 118 101 110 46 110 117 109 114 10 101 105 103 104 116 46 110 117 109 114 9 110 105 110 101 46 110 117 109 114 14 112 97 114 101 110 108 101 102 116 46 110 117 109 114 15 112 97 114 101 110 114 105 103 104 116 46 110 117 109 114 11 112 101 114 105 111 100 46 110 117 109 114 10 99 111 109 109 97 46 110 117 109 114 13 111 114 100 102 101 109 105 110 105 110 101 46 97 6 97 46 115 117 112 115 6 98 46 115 117 112 115 6 99 46 115 117 112 115 6 100 46 115 117 112 115 6 101 46 115 117 112 115 6 102 46 115 117 112 115 6 103 46 115 117 112 115 6 104 46 115 117 112 115 6 105 46 115 117 112 115 6 106 46 115 117 112 115 6 107 46 115 117 112 115 6 108 46 115 117 112 115 6 109 46 115 117 112 115 6 110 46 115 117 112 115 6 111 46 115 117 112 115 6 112 46 115 117 112 115 6 113 46 115 117 112 115 6 114 46 115 117 112 115 6 115 46 115 117 112 115 6 116 46 115 117 112 115 6 117 46 115 117 112 115 6 118 46 115 117 112 115 6 119 46 115 117 112 115 6 120 46 115 117 112 115 6 121 46 115 117 112 115 6 122 46 115 117 112 115 11 101 103 114 97 118 101 46 115 117 112 115 11 101 97 99 117 116 101 46 115 117 112 115 12 117 110 105 48 50 53 57 46 115 117 112 115 6 97 46 115 117 112 97 6 103 46 115 117 112 97 6 108 46 115 117 112 97 4 69 117 114 111 7 117 110 105 48 49 57 50 13 99 111 108 111 110 109 111 110 101 116 97 114 121 4 108 105 114 97 7 117 110 105 50 48 65 54 6 112 101 115 101 116 97 4 100 111 110 103 7 117 110 105 50 48 66 49 7 117 110 105 50 48 66 50 7 117 110 105 50 48 66 53 7 117 110 105 50 48 66 57 7 117 110 105 50 48 66 65 7 117 110 105 50 50 49 53 10 115 108 97 115 104 46 102 114 97 99 8 111 110 101 116 104 105 114 100 9 116 119 111 116 104 105 114 100 115 9 111 110 101 101 105 103 104 116 104 12 116 104 114 101 101 101 105 103 104 116 104 115 11 102 105 118 101 101 105 103 104 116 104 115 12 115 101 118 101 110 101 105 103 104 116 104 115 7 117 110 105 50 50 49 57 7 117 110 105 48 48 66 53 7 117 110 105 50 50 48 54 7 117 110 105 50 49 50 54 7 117 110 105 50 49 49 51 9 101 115 116 105 109 97 116 101 100 7 117 110 105 50 49 57 48 7 97 114 114 111 119 117 112 7 117 110 105 50 49 57 50 9 97 114 114 111 119 100 111 119 110 7 117 110 105 50 53 65 48 7 117 110 105 50 53 67 54 7 117 110 105 50 53 67 57 7 117 110 105 50 55 53 50 7 116 114 105 97 103 117 112 7 117 110 105 50 53 66 51 7 117 110 105 50 53 66 54 7 117 110 105 50 53 66 55 7 116 114 105 97 103 100 110 7 117 110 105 50 53 66 68 7 117 110 105 50 53 67 48 7 117 110 105 50 53 67 49 7 117 110 105 50 54 49 48 7 117 110 105 50 54 49 49 7 117 110 105 50 55 49 51 7 117 110 105 50 54 54 65 7 117 110 105 50 48 51 50 7 117 110 105 50 48 51 51 7 117 110 105 48 50 66 66 7 117 110 105 48 50 66 67 7 117 110 105 48 50 66 69 7 117 110 105 48 50 66 70 7 117 110 105 48 50 67 56 7 117 110 105 48 50 67 57 7 117 110 105 48 50 67 65 7 117 110 105 48 50 67 66 7 117 110 105 48 50 67 67 7 117 110 105 48 51 48 48 11 117 110 105 48 51 48 48 46 99 97 112 7 117 110 105 48 51 48 49 11 117 110 105 48 51 48 49 46 99 97 112 7 117 110 105 48 51 48 50 11 117 110 105 48 51 48 50 46 99 97 112 7 117 110 105 48 51 48 51 11 117 110 105 48 51 48 51 46 99 97 112 7 117 110 105 48 51 48 52 11 117 110 105 48 51 48 52 46 99 97 112 7 117 110 105 48 51 48 54 11 117 110 105 48 51 48 54 46 99 97 112 7 117 110 105 48 51 48 55 11 117 110 105 48 51 48 55 46 99 97 112 7 117 110 105 48 51 48 56 11 117 110 105 48 51 48 56 46 99 97 112 7 117 110 105 48 51 48 57 11 117 110 105 48 51 48 57 46 99 97 112 7 117 110 105 48 51 48 65 11 117 110 105 48 51 48 65 46 99 97 112 7 117 110 105 48 51 48 66 11 117 110 105 48 51 48 66 46 99 97 112 7 117 110 105 48 51 48 67 11 117 110 105 48 51 48 67 46 99 97 112 7 117 110 105 48 51 48 70 11 117 110 105 48 51 48 70 46 99 97 112 7 117 110 105 48 51 49 50 7 117 110 105 48 51 49 51 7 117 110 105 48 51 49 66 7 117 110 105 48 51 50 51 7 117 110 105 48 51 50 52 7 117 110 105 48 51 50 54 7 117 110 105 48 51 50 55 11 117 110 105 48 51 50 55 46 99 97 112 7 117 110 105 48 51 50 56 11 117 110 105 48 51 50 56 46 99 97 112 7 117 110 105 48 51 50 69 7 117 110 105 48 51 51 49 11 117 110 105 48 51 48 56 48 51 48 52 15 117 110 105 48 51 48 56 48 51 48 52 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 49 15 117 110 105 48 51 48 56 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 67 15 117 110 105 48 51 48 56 48 51 48 67 46 99 97 112 11 117 110 105 48 51 48 56 48 51 48 48 15 117 110 105 48 51 48 56 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 49 15 117 110 105 48 51 48 50 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 48 15 117 110 105 48 51 48 50 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 57 15 117 110 105 48 51 48 50 48 51 48 57 46 99 97 112 11 117 110 105 48 51 48 50 48 51 48 51 15 117 110 105 48 51 48 50 48 51 48 51 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 49 15 117 110 105 48 51 48 54 48 51 48 49 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 48 15 117 110 105 48 51 48 54 48 51 48 48 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 57 15 117 110 105 48 51 48 54 48 51 48 57 46 99 97 112 11 117 110 105 48 51 48 54 48 51 48 51 15 117 110 105 48 51 48 54 48 51 48 51 46 99 97 112 9 117 110 105 48 51 48 67 46 97 9 117 110 105 48 51 50 54 46 97 7 117 110 105 48 48 65 48 7 117 110 105 50 48 48 55 10 115 112 97 99 101 46 102 114 97 99 12 110 98 115 112 97 99 101 46 102 114 97 99 7 117 110 105 48 50 52 51 7 117 110 105 48 49 50 67 7 117 110 105 48 49 52 69 7 117 110 105 48 49 56 48 7 117 110 105 48 49 50 68 7 117 110 105 48 49 52 70 11 117 110 105 48 51 48 50 48 51 48 54 15 117 110 105 48 51 48 50 48 51 48 54 46 99 97 112 7 117 110 105 49 69 48 54 7 117 110 105 49 69 48 55 7 117 110 105 49 69 51 52 7 117 110 105 49 69 51 53 7 117 110 105 49 69 49 54 7 117 110 105 49 69 49 55 7 117 110 105 49 69 53 50 7 117 110 105 49 69 53 51 7 117 110 105 50 48 49 54 7 117 110 105 50 48 51 68 7 117 110 105 50 51 49 67 7 117 110 105 50 51 49 68 7 117 110 105 50 51 49 69 7 117 110 105 50 51 49 70 7 117 110 105 50 55 69 54 7 117 110 105 50 55 69 55 7 117 110 105 50 69 50 50 7 117 110 105 50 69 50 51 7 117 110 105 50 69 50 52 7 117 110 105 50 69 50 53 6 122 101 114 111 46 48 7 122 101 114 111 46 48 115 7 122 101 114 111 46 48 112 8 122 101 114 111 46 48 112 115 5 105 46 116 114 107 4 65 46 115 99 4 66 46 115 99 4 67 46 115 99 4 68 46 115 99 4 69 46 115 99 4 70 46 115 99 4 71 46 115 99 4 72 46 115 99 4 73 46 115 99 4 74 46 115 99 4 75 46 115 99 4 76 46 115 99 4 77 46 115 99 4 78 46 115 99 4 79 46 115 99 4 80 46 115 99 4 81 46 115 99 4 82 46 115 99 4 83 46 115 99 4 84 46 115 99 4 85 46 115 99 4 86 46 115 99 4 87 46 115 99 4 88 46 115 99 4 89 46 115 99 4 90 46 115 99 9 65 103 114 97 118 101 46 115 99 9 65 97 99 117 116 101 46 115 99 14 65 99 105 114 99 117 109 102 108 101 120 46 115 99 9 65 116 105 108 100 101 46 115 99 12 65 100 105 101 114 101 115 105 115 46 115 99 10 65 109 97 99 114 111 110 46 115 99 9 65 98 114 101 118 101 46 115 99 8 65 114 105 110 103 46 115 99 10 117 110 105 48 49 67 68 46 115 99 10 117 110 105 49 69 65 48 46 115 99 10 117 110 105 49 69 65 50 46 115 99 10 117 110 105 49 69 65 52 46 115 99 10 117 110 105 49 69 65 54 46 115 99 10 117 110 105 49 69 65 56 46 115 99 10 117 110 105 49 69 65 65 46 115 99 10 117 110 105 49 69 65 67 46 115 99 10 117 110 105 49 69 65 69 46 115 99 10 117 110 105 49 69 66 48 46 115 99 10 117 110 105 49 69 66 50 46 115 99 10 117 110 105 49 69 66 52 46 115 99 10 117 110 105 49 69 66 54 46 115 99 10 65 111 103 111 110 101 107 46 115 99 5 65 69 46 115 99 10 117 110 105 48 50 52 51 46 115 99 10 117 110 105 49 69 48 54 46 115 99 11 67 99 101 100 105 108 108 97 46 115 99 9 67 97 99 117 116 101 46 115 99 14 67 99 105 114 99 117 109 102 108 101 120 46 115 99 9 67 99 97 114 111 110 46 115 99 13 67 100 111 116 97 99 99 101 110 116 46 115 99 9 68 99 97 114 111 110 46 115 99 10 117 110 105 49 69 48 67 46 115 99 10 117 110 105 49 69 48 69 46 115 99 9 68 99 114 111 97 116 46 115 99 9 69 103 114 97 118 101 46 115 99 9 69 97 99 117 116 101 46 115 99 14 69 99 105 114 99 117 109 102 108 101 120 46 115 99 9 69 99 97 114 111 110 46 115 99 12 69 100 105 101 114 101 115 105 115 46 115 99 10 69 109 97 99 114 111 110 46 115 99 9 69 98 114 101 118 101 46 115 99 13 69 100 111 116 97 99 99 101 110 116 46 115 99 10 117 110 105 49 69 66 56 46 115 99 10 117 110 105 49 69 66 65 46 115 99 10 117 110 105 49 69 66 67 46 115 99 10 117 110 105 49 69 66 69 46 115 99 10 117 110 105 49 69 67 48 46 115 99 10 117 110 105 49 69 67 50 46 115 99 10 117 110 105 49 69 67 52 46 115 99 10 117 110 105 49 69 67 54 46 115 99 10 69 111 103 111 110 101 107 46 115 99 10 117 110 105 49 69 49 54 46 115 99 14 71 99 105 114 99 117 109 102 108 101 120 46 115 99 9 71 98 114 101 118 101 46 115 99 13 71 100 111 116 97 99 99 101 110 116 46 115 99 10 117 110 105 48 49 50 50 46 115 99 9 71 99 97 114 111 110 46 115 99 10 117 110 105 49 69 50 48 46 115 99 14 117 110 105 48 48 52 55 48 51 48 51 46 115 99 14 72 99 105 114 99 117 109 102 108 101 120 46 115 99 10 117 110 105 49 69 50 52 46 115 99 10 117 110 105 49 69 50 65 46 115 99 7 72 98 97 114 46 115 99 9 73 103 114 97 118 101 46 115 99 9 73 97 99 117 116 101 46 115 99 14 73 99 105 114 99 117 109 102 108 101 120 46 115 99 9 73 116 105 108 100 101 46 115 99 12 73 100 105 101 114 101 115 105 115 46 115 99 10 73 109 97 99 114 111 110 46 115 99 13 73 100 111 116 97 99 99 101 110 116 46 115 99 10 117 110 105 48 49 67 70 46 115 99 10 117 110 105 49 69 67 56 46 115 99 10 117 110 105 49 69 67 65 46 115 99 10 73 111 103 111 110 101 107 46 115 99 10 117 110 105 48 49 50 67 46 115 99 14 74 99 105 114 99 117 109 102 108 101 120 46 115 99 10 117 110 105 48 49 51 54 46 115 99 10 117 110 105 49 69 51 52 46 115 99 9 76 97 99 117 116 101 46 115 99 9 76 99 97 114 111 110 46 115 99 10 117 110 105 48 49 51 66 46 115 99 7 76 100 111 116 46 115 99 10 117 110 105 49 69 51 54 46 115 99 10 117 110 105 49 69 51 56 46 115 99 10 117 110 105 49 69 51 65 46 115 99 9 76 115 108 97 115 104 46 115 99 10 117 110 105 49 69 52 50 46 115 99 9 78 97 99 117 116 101 46 115 99 9 78 99 97 114 111 110 46 115 99 9 78 116 105 108 100 101 46 115 99 10 117 110 105 48 49 52 53 46 115 99 10 117 110 105 49 69 52 52 46 115 99 10 117 110 105 49 69 52 54 46 115 99 10 117 110 105 49 69 52 56 46 115 99 9 79 103 114 97 118 101 46 115 99 9 79 97 99 117 116 101 46 115 99 14 79 99 105 114 99 117 109 102 108 101 120 46 115 99 9 79 116 105 108 100 101 46 115 99 12 79 100 105 101 114 101 115 105 115 46 115 99 10 79 109 97 99 114 111 110 46 115 99 16 79 104 117 110 103 97 114 117 109 108 97 117 116 46 115 99 10 117 110 105 48 49 68 49 46 115 99 10 117 110 105 49 69 67 67 46 115 99 10 117 110 105 49 69 67 69 46 115 99 10 117 110 105 49 69 68 48 46 115 99 10 117 110 105 49 69 68 50 46 115 99 10 117 110 105 49 69 68 52 46 115 99 10 117 110 105 49 69 68 54 46 115 99 10 117 110 105 49 69 68 56 46 115 99 9 79 115 108 97 115 104 46 115 99 5 79 69 46 115 99 8 79 104 111 114 110 46 115 99 10 117 110 105 49 69 68 65 46 115 99 10 117 110 105 49 69 68 67 46 115 99 10 117 110 105 49 69 68 69 46 115 99 10 117 110 105 49 69 69 48 46 115 99 10 117 110 105 49 69 69 50 46 115 99 10 117 110 105 48 49 69 65 46 115 99 10 117 110 105 48 49 52 69 46 115 99 10 117 110 105 49 69 53 50 46 115 99 9 82 97 99 117 116 101 46 115 99 9 82 99 97 114 111 110 46 115 99 10 117 110 105 48 49 53 54 46 115 99 10 117 110 105 49 69 53 65 46 115 99 10 117 110 105 49 69 53 67 46 115 99 10 117 110 105 49 69 53 69 46 115 99 9 83 97 99 117 116 101 46 115 99 14 83 99 105 114 99 117 109 102 108 101 120 46 115 99 9 83 99 97 114 111 110 46 115 99 10 117 110 105 48 49 53 69 46 115 99 10 117 110 105 48 50 49 56 46 115 99 10 117 110 105 49 69 54 48 46 115 99 10 117 110 105 49 69 54 50 46 115 99 13 103 101 114 109 97 110 100 98 108 115 46 115 99 10 117 110 105 49 69 57 69 46 115 99 9 84 99 97 114 111 110 46 115 99 10 117 110 105 48 49 54 50 46 115 99 10 117 110 105 48 50 49 65 46 115 99 10 117 110 105 49 69 54 67 46 115 99 10 117 110 105 49 69 54 69 46 115 99 9 85 103 114 97 118 101 46 115 99 9 85 97 99 117 116 101 46 115 99 14 85 99 105 114 99 117 109 102 108 101 120 46 115 99 9 85 116 105 108 100 101 46 115 99 12 85 100 105 101 114 101 115 105 115 46 115 99 10 85 109 97 99 114 111 110 46 115 99 9 85 98 114 101 118 101 46 115 99 8 85 114 105 110 103 46 115 99 16 85 104 117 110 103 97 114 117 109 108 97 117 116 46 115 99 10 117 110 105 48 49 68 51 46 115 99 10 117 110 105 48 49 68 53 46 115 99 10 117 110 105 48 49 68 55 46 115 99 10 117 110 105 48 49 68 57 46 115 99 10 117 110 105 48 49 68 66 46 115 99 10 117 110 105 49 69 69 52 46 115 99 10 117 110 105 49 69 69 54 46 115 99 10 85 111 103 111 110 101 107 46 115 99 8 85 104 111 114 110 46 115 99 10 117 110 105 49 69 69 56 46 115 99 10 117 110 105 49 69 69 65 46 115 99 10 117 110 105 49 69 69 67 46 115 99 10 117 110 105 49 69 69 69 46 115 99 10 117 110 105 49 69 70 48 46 115 99 9 87 103 114 97 118 101 46 115 99 9 87 97 99 117 116 101 46 115 99 14 87 99 105 114 99 117 109 102 108 101 120 46 115 99 12 87 100 105 101 114 101 115 105 115 46 115 99 9 89 103 114 97 118 101 46 115 99 9 89 97 99 117 116 101 46 115 99 14 89 99 105 114 99 117 109 102 108 101 120 46 115 99 12 89 100 105 101 114 101 115 105 115 46 115 99 10 117 110 105 49 69 56 69 46 115 99 10 117 110 105 49 69 70 52 46 115 99 10 117 110 105 49 69 70 54 46 115 99 10 117 110 105 49 69 70 56 46 115 99 9 90 97 99 117 116 101 46 115 99 9 90 99 97 114 111 110 46 115 99 13 90 100 111 116 97 99 99 101 110 116 46 115 99 10 117 110 105 49 69 57 50 46 115 99 6 69 116 104 46 115 99 8 84 104 111 114 110 46 115 99 10 117 110 105 48 49 56 70 46 115 99 12 97 109 112 101 114 115 97 110 100 46 115 99 7 122 101 114 111 46 115 99 6 111 110 101 46 115 99 6 116 119 111 46 115 99 8 116 104 114 101 101 46 115 99 7 102 111 117 114 46 115 99 7 102 105 118 101 46 115 99 6 115 105 120 46 115 99 8 115 101 118 101 110 46 115 99 8 101 105 103 104 116 46 115 99 7 110 105 110 101 46 115 99 9 104 121 112 104 101 110 46 115 99 9 101 110 100 97 115 104 46 115 99 9 101 109 100 97 115 104 46 115 99 7 117 110 105 48 50 66 57 6 65 46 115 117 112 115 6 66 46 115 117 112 115 6 67 46 115 117 112 115 6 68 46 115 117 112 115 6 69 46 115 117 112 115 6 70 46 115 117 112 115 6 71 46 115 117 112 115 6 72 46 115 117 112 115 6 73 46 115 117 112 115 6 74 46 115 117 112 115 6 75 46 115 117 112 115 6 76 46 115 117 112 115 6 77 46 115 117 112 115 6 78 46 115 117 112 115 6 79 46 115 117 112 115 6 80 46 115 117 112 115 6 81 46 115 117 112 115 6 82 46 115 117 112 115 6 83 46 115 117 112 115 6 84 46 115 117 112 115 6 85 46 115 117 112 115 6 86 46 115 117 112 115 6 87 46 115 117 112 115 6 88 46 115 117 112 115 6 89 46 115 117 112 115 6 90 46 115 117 112 115 10 99 111 108 111 110 46 115 117 112 115 11 104 121 112 104 101 110 46 115 117 112 115 11 101 110 100 97 115 104 46 115 117 112 115 11 101 109 100 97 115 104 46 115 117 112 115 11 117 110 105 48 51 48 52 48 51 48 49 15 117 110 105 48 51 48 52 48 51 48 49 46 99 97 112 7 117 110 105 70 69 70 70 0 0 0 0 0 1 255 255 0 2 0 1 0 0 0 12 0 0 0 0 1 12 0 2 0 42 0 4 0 55 0 1 0 77 0 78 0 1 0 104 0 104 0 1 0 111 0 111 0 2 0 126 0 126 0 1 0 160 0 162 0 1 0 168 0 168 0 1 0 204 0 205 0 1 0 229 0 229 0 1 0 251 0 251 0 1 1 2 1 2 0 2 1 22 1 22 0 1 1 26 1 26 0 2 1 29 1 29 0 2 1 43 1 43 0 2 1 44 1 45 0 1 1 50 1 50 0 2 1 81 1 83 0 1 1 89 1 89 0 1 1 104 1 104 0 2 1 126 1 127 0 1 1 150 1 154 0 1 1 155 1 155 0 2 1 158 1 158 0 2 1 159 1 159 0 1 1 170 1 171 0 1 1 183 1 183 0 1 1 193 1 194 0 1 1 198 1 198 0 2 1 202 1 202 0 1 2 230 2 230 0 1 2 240 2 240 0 1 2 246 3 51 0 3 3 53 3 53 0 3 3 64 3 65 0 3 3 91 3 116 0 1 3 138 3 138 0 1 3 167 3 167 0 1 3 190 3 190 0 1 3 228 3 228 0 1 3 234 3 234 0 1 4 17 4 18 0 1 0 2 0 4 2 246 3 17 0 1 3 28 3 51 0 1 3 53 3 53 0 1 3 64 3 65 0 1 0 1 0 0 0 10 0 120 1 136 0 2 68 70 76 84 0 14 108 97 116 110 0 32 0 4 0 0 0 0 255 255 0 4 0 0 0 5 0 10 0 15 0 22 0 3 65 90 69 32 0 36 67 82 84 32 0 50 84 82 75 32 0 64 0 0 255 255 0 4 0 1 0 6 0 11 0 16 0 0 255 255 0 4 0 2 0 7 0 12 0 17 0 0 255 255 0 4 0 3 0 8 0 13 0 18 0 0 255 255 0 4 0 4 0 9 0 14 0 19 0 20 107 101 114 110 0 122 107 101 114 110 0 128 107 101 114 110 0 134 107 101 114 110 0 140 107 101 114 110 0 146 109 97 114 107 0 152 109 97 114 107 0 166 109 97 114 107 0 180 109 97 114 107 0 194 109 97 114 107 0 208 109 107 109 107 0 222 109 107 109 107 0 228 109 107 109 107 0 234 109 107 109 107 0 240 109 107 109 107 0 246 115 105 122 101 0 252 115 105 122 101 1 0 115 105 122 101 1 4 115 105 122 101 1 8 115 105 122 101 1 12 0 0 0 1 0 6 0 0 0 1 0 6 0 0 0 1 0 6 0 0 0 1 0 6 0 0 0 1 0 6 0 0 0 5 0 0 0 1 0 2 0 3 0 4 0 0 0 5 0 0 0 1 0 2 0 3 0 4 0 0 0 5 0 0 0 1 0 2 0 3 0 4 0 0 0 5 0 0 0 1 0 2 0 3 0 4 0 0 0 5 0 0 0 1 0 2 0 3 0 4 0 0 0 1 0 5 0 0 0 1 0 5 0 0 0 1 0 5 0 0 0 1 0 5 0 0 0 1 0 5 0 94 0 0 0 90 0 0 0 86 0 0 0 82 0 0 0 78 0 0 0 7 0 16 0 24 0 32 0 40 0 48 0 56 0 64 0 4 0 0 0 1 0 68 0 4 0 0 0 1 4 76 0 4 0 0 0 1 4 170 0 4 0 0 0 1 7 30 0 4 0 0 0 1 7 96 0 6 1 0 0 1 8 10 0 2 0 0 0 2 9 12 14 238 0 100 0 0 0 0 0 0 0 0 0 1 62 228 63 0 0 1 0 12 0 234 0 55 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 208 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 214 0 0 1 208 0 0 1 208 0 0 1 214 0 120 0 254 1 4 1 10 1 16 1 22 1 28 1 34 1 40 1 46 1 52 1 58 1 64 1 70 1 76 1 82 1 88 1 82 1 94 1 100 1 106 1 112 1 118 1 124 1 118 1 130 1 136 1 142 1 148 1 154 1 160 1 166 1 172 1 178 1 184 1 190 1 196 1 148 1 202 1 208 1 214 1 220 1 214 1 226 1 232 1 238 1 244 1 250 2 0 2 6 2 12 2 18 2 24 2 30 2 36 1 22 1 46 2 42 2 48 2 42 2 54 1 112 2 60 2 66 1 142 1 166 2 72 2 72 1 220 2 78 1 220 1 220 2 84 1 220 1 148 2 90 2 96 2 102 2 108 2 114 2 114 2 96 2 120 2 96 2 126 1 184 2 132 2 138 2 144 2 150 2 156 2 162 2 168 2 174 2 180 2 186 2 192 2 198 2 204 2 210 2 216 2 222 2 228 2 234 2 240 2 246 2 252 2 144 3 2 3 8 3 14 3 20 3 26 3 32 2 144 2 168 2 192 2 240 2 228 3 2 3 2 0 1 0 0 1 252 0 1 0 0 2 166 0 1 1 14 2 166 0 1 1 31 2 166 0 1 1 73 2 166 0 1 1 52 2 166 0 1 1 29 2 166 0 1 1 30 2 166 0 1 1 97 2 166 0 1 1 69 2 166 0 1 0 131 2 166 0 1 1 92 2 166 0 1 1 55 2 166 0 1 0 133 2 166 0 1 1 107 2 166 0 1 1 71 2 166 0 1 1 76 2 166 0 1 1 47 2 166 0 1 1 39 2 166 0 1 1 22 2 166 0 1 1 11 2 166 0 1 1 66 2 166 0 1 1 1 2 166 0 1 1 137 2 166 0 1 0 238 2 166 0 1 1 24 2 166 0 1 1 13 1 252 0 1 0 126 2 218 0 1 1 20 1 252 0 1 1 137 2 218 0 1 1 8 1 252 0 1 0 219 2 228 0 1 1 2 1 252 0 1 0 123 2 218 0 1 0 123 2 182 0 1 0 125 2 182 0 1 0 122 2 218 0 1 1 163 1 252 0 1 1 35 1 252 0 1 1 15 1 252 0 1 1 22 1 252 0 1 0 216 1 252 0 1 0 219 1 252 0 1 0 143 2 131 0 1 1 16 1 252 0 1 0 235 1 252 0 1 1 104 1 252 0 1 0 223 1 252 0 1 0 243 1 252 0 1 0 229 1 252 0 1 1 16 2 166 0 1 2 52 2 182 0 1 1 79 2 166 0 1 2 20 2 166 0 1 1 75 2 166 0 1 1 67 2 166 0 1 1 96 2 166 0 1 0 124 1 252 0 1 1 184 1 252 0 1 1 13 1 246 0 1 0 125 1 252 0 1 1 26 1 252 0 1 0 242 1 252 0 1 1 30 1 252 0 1 0 171 2 166 0 1 1 12 1 244 0 1 1 31 1 252 0 1 1 15 2 207 0 1 1 15 2 194 0 1 0 234 2 51 0 1 1 20 2 51 0 1 1 39 2 63 0 1 1 27 2 51 0 1 1 9 2 51 0 1 1 10 2 51 0 1 1 52 2 51 0 1 1 41 2 51 0 1 0 131 2 51 0 1 1 47 2 51 0 1 1 32 2 51 0 1 0 137 2 51 0 1 1 67 2 51 0 1 1 45 2 51 0 1 1 39 2 51 0 1 1 30 2 51 0 1 1 38 2 51 0 1 1 26 2 51 0 1 0 254 2 51 0 1 1 36 2 51 0 1 0 226 2 51 0 1 1 86 2 51 0 1 0 229 2 51 0 1 0 208 2 51 0 1 0 250 2 51 0 1 59 162 59 170 0 1 0 12 0 22 0 2 0 0 0 30 0 0 0 30 0 9 0 26 0 32 0 38 0 44 0 50 0 56 0 62 0 68 0 74 0 1 0 0 0 0 0 1 1 87 0 0 0 1 1 17 0 0 0 1 1 12 0 0 0 1 1 14 0 0 0 1 0 223 0 0 0 1 0 217 0 0 0 1 1 38 0 0 0 1 0 244 0 0 0 1 0 229 0 0 0 1 59 90 59 104 0 1 0 12 0 34 0 5 0 0 0 210 0 0 0 210 0 0 0 210 0 0 0 210 0 0 0 210 0 93 0 194 0 200 0 206 0 212 0 218 0 224 0 230 0 236 0 242 0 248 0 254 1 4 1 10 1 16 1 22 1 28 1 34 1 40 1 46 1 52 1 58 1 64 1 70 1 76 1 82 1 70 1 88 0 194 1 94 1 100 1 28 1 106 1 112 1 118 1 124 1 130 1 136 1 142 1 148 1 130 1 154 1 160 1 118 1 166 1 172 1 178 1 184 1 190 1 166 1 196 1 202 1 208 1 52 1 214 1 118 1 130 1 4 1 88 1 220 1 76 1 226 1 232 1 220 1 46 1 238 1 118 1 244 1 112 1 250 2 0 2 6 0 224 0 212 2 12 0 242 2 18 2 24 2 30 2 36 2 24 2 42 1 28 2 48 2 54 1 244 2 60 2 66 2 72 2 78 2 84 0 248 2 42 2 60 0 1 0 0 255 234 0 1 1 14 255 234 0 1 1 46 255 234 0 1 1 87 255 234 0 1 1 49 255 234 0 1 1 42 255 234 0 1 0 135 255 234 0 1 1 92 255 234 0 1 1 69 255 234 0 1 0 131 255 234 0 1 0 253 255 234 0 1 1 72 255 234 0 1 1 33 255 234 0 1 1 109 255 234 0 1 1 71 255 234 0 1 1 76 255 234 0 1 0 137 255 234 0 1 1 54 255 234 0 1 1 17 255 234 0 1 1 12 255 234 0 1 1 66 255 234 0 1 1 2 255 234 0 1 1 140 255 234 0 1 0 252 255 234 0 1 0 240 255 234 0 1 1 26 255 234 0 1 1 28 255 234 0 1 1 45 255 234 0 1 1 6 255 234 0 1 0 250 255 26 0 1 1 30 255 234 0 1 0 123 255 234 0 1 0 59 255 25 0 1 1 15 255 234 0 1 0 122 255 234 0 1 1 169 255 234 0 1 1 22 255 234 0 1 0 117 255 38 0 1 1 170 255 38 0 1 0 223 255 234 0 1 0 212 255 234 0 1 1 34 255 234 0 1 0 235 255 234 0 1 1 104 255 234 0 1 0 200 255 14 0 1 0 228 255 234 0 1 1 75 255 234 0 1 1 99 255 234 0 1 1 27 255 234 0 1 1 18 255 35 0 1 0 173 255 234 0 1 1 184 255 38 0 1 0 234 255 234 0 1 1 38 255 234 0 1 1 25 255 234 0 1 1 11 255 234 0 1 1 41 255 234 0 1 0 209 255 234 0 1 1 43 255 234 0 1 1 4 255 234 0 1 1 67 255 234 0 1 1 39 255 234 0 1 1 29 255 234 0 1 1 3 255 234 0 1 1 36 255 234 0 1 0 225 255 234 0 1 1 86 255 234 0 1 0 237 255 234 0 1 0 207 255 234 0 1 57 98 57 104 0 1 0 12 0 18 0 1 0 0 0 20 0 6 0 20 0 26 0 32 0 38 0 44 0 50 0 1 0 0 1 230 0 1 1 213 2 134 0 1 2 13 2 154 0 1 1 108 1 230 0 1 1 155 1 240 0 1 1 167 1 243 0 1 1 207 2 17 0 1 57 46 57 54 0 1 0 12 0 22 0 2 0 0 0 52 0 0 0 52 0 20 0 48 0 54 0 60 0 66 0 72 0 78 0 84 0 90 0 96 0 102 0 90 0 108 0 114 0 120 0 126 0 132 0 60 0 138 0 144 0 150 0 1 0 0 0 0 0 1 1 210 0 0 0 1 1 132 0 0 0 1 0 108 0 0 0 1 1 76 0 0 0 1 1 66 0 0 0 1 1 158 0 0 0 1 1 133 0 0 0 1 0 152 0 0 0 1 1 64 0 0 0 1 1 172 0 0 0 1 0 240 0 0 0 1 0 148 0 0 0 1 1 137 0 0 0 1 1 123 0 0 0 1 1 72 0 0 0 1 1 39 0 0 0 1 1 36 0 0 0 1 1 38 0 0 0 1 54 246 56 176 0 1 0 12 0 234 0 55 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 230 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 236 0 0 0 230 0 0 0 230 0 0 0 236 0 3 0 20 0 26 0 26 0 1 0 0 1 252 0 1 0 0 2 166 0 1 0 0 2 220 0 1 0 0 2 183 0 1 55 176 0 4 0 0 0 54 0 118 0 168 0 194 0 248 1 26 1 48 1 74 1 88 1 98 1 116 1 134 1 152 1 158 1 200 1 230 2 0 2 30 2 60 2 106 2 128 2 146 2 168 2 182 2 220 2 250 3 24 3 54 3 80 3 126 3 152 3 174 3 180 3 190 3 204 3 226 3 240 4 34 4 108 4 138 4 208 4 214 4 224 4 230 4 236 4 246 5 28 5 58 5 76 5 82 5 104 5 118 5 160 5 182 5 208 0 12 0 25 0 4 0 27 255 232 0 51 255 236 0 53 255 230 1 36 0 18 1 37 0 36 1 38 0 36 1 39 0 29 2 24 255 242 2 33 255 187 2 44 0 20 2 45 0 38 0 6 0 27 255 232 0 53 255 242 2 24 255 248 2 33 255 181 2 44 0 30 3 112 0 6 0 13 0 51 255 247 0 53 255 241 1 34 0 10 1 36 0 40 1 37 0 51 1 38 0 51 1 39 0 40 1 40 0 29 2 24 255 245 2 33 255 209 2 44 0 53 2 45 0 54 3 112 0 16 0 8 0 51 255 240 0 53 255 246 2 24 255 216 2 37 255 246 2 44 0 8 2 45 0 21 3 112 0 6 3 114 0 6 0 5 0 25 255 252 2 33 255 236 2 37 255 248 2 44 0 45 2 45 0 13 0 6 0 25 255 249 0 27 255 246 2 24 255 236 2 37 255 241 2 44 0 38 2 45 0 13 0 3 2 33 255 243 2 44 0 19 2 45 0 6 0 2 2 37 255 184 2 45 255 232 0 4 2 33 255 198 2 35 255 216 2 37 255 194 2 45 255 232 0 4 0 51 255 240 0 53 0 6 2 35 255 230 2 44 255 221 0 4 1 224 255 246 1 225 255 249 1 226 255 240 1 230 255 232 0 1 1 224 255 249 0 10 1 223 255 246 1 224 255 230 1 225 255 240 1 226 255 246 1 227 255 216 1 228 255 246 1 229 255 240 1 230 255 222 1 232 255 236 2 147 255 222 0 7 1 224 255 246 1 225 255 246 1 226 255 252 1 228 255 246 1 230 255 242 1 232 255 252 2 147 255 249 0 6 1 224 255 236 1 225 255 246 1 226 255 246 1 228 255 248 1 230 255 236 1 232 255 242 0 7 1 224 255 229 1 225 255 246 1 226 255 242 1 228 255 246 1 230 255 232 1 232 255 242 2 147 255 249 0 7 1 224 255 239 1 225 255 242 1 226 255 249 1 228 255 252 1 230 255 230 1 232 255 240 2 147 255 249 0 11 1 223 255 232 1 224 255 243 1 225 255 236 1 226 255 236 1 227 255 162 1 228 255 230 1 229 255 226 1 230 255 240 1 231 255 226 1 232 255 236 2 147 255 209 0 5 1 224 255 232 1 226 255 252 1 230 255 232 1 232 255 232 2 147 255 252 0 4 1 224 255 236 1 225 255 246 1 226 255 242 1 230 255 232 0 5 1 244 255 243 1 245 255 246 1 246 255 242 1 248 255 252 1 250 255 230 0 3 1 244 255 249 1 246 255 252 1 250 255 236 0 9 1 243 255 246 1 244 255 226 1 245 255 246 1 246 255 238 1 247 255 248 1 248 255 238 1 250 255 205 1 252 255 246 2 147 255 235 0 7 1 244 255 240 1 245 255 246 1 246 255 242 1 248 255 242 1 250 255 230 1 252 255 248 2 147 255 242 0 7 1 244 255 232 1 245 255 246 1 246 255 238 1 248 255 238 1 250 255 226 1 252 255 238 2 147 255 242 0 7 1 244 255 226 1 245 255 246 1 246 255 242 1 248 255 242 1 250 255 222 1 252 255 242 2 147 255 240 0 6 1 244 255 232 1 245 255 246 1 246 255 242 1 248 255 242 1 250 255 222 1 252 255 252 0 11 1 243 255 232 1 244 255 236 1 245 255 240 1 246 255 240 1 247 255 198 1 248 255 232 1 249 255 246 1 250 255 236 1 251 255 244 1 252 255 246 2 147 255 230 0 6 1 244 255 232 1 245 255 252 1 246 255 246 1 248 255 246 1 250 255 232 1 252 255 252 0 5 1 244 255 236 1 245 255 246 1 246 255 246 1 248 255 246 1 250 255 226 0 1 0 25 255 224 0 2 0 25 255 198 0 27 255 214 0 3 0 25 255 230 0 27 255 230 0 53 255 236 0 5 0 229 255 242 1 38 0 7 1 42 0 25 1 43 0 25 3 90 0 25 0 3 0 25 255 203 0 51 255 236 0 115 255 242 0 12 1 224 255 229 1 225 255 246 1 226 255 252 1 228 255 249 1 230 255 232 1 232 255 235 1 244 255 220 1 245 255 239 1 246 255 235 1 248 255 235 1 250 255 198 1 252 255 239 0 18 1 216 255 250 1 218 255 250 1 223 255 246 1 224 255 240 1 225 255 245 1 226 255 245 1 227 255 179 1 228 255 245 1 229 255 233 1 230 255 236 1 231 255 243 1 232 255 246 1 243 255 238 1 244 255 226 1 249 255 232 1 250 255 228 1 251 255 242 1 252 255 246 0 7 1 225 255 252 1 226 255 252 1 232 255 252 1 245 255 246 1 246 255 238 1 248 255 246 1 250 255 238 0 17 1 224 0 12 1 225 0 30 1 226 0 30 1 227 255 236 1 228 0 30 1 229 255 252 1 230 0 7 1 231 0 4 1 243 255 252 1 244 255 246 1 245 0 26 1 246 0 14 1 247 0 20 1 248 0 14 1 249 255 252 1 251 0 10 1 252 255 246 0 1 3 112 0 13 0 2 3 114 255 245 4 54 255 243 0 1 4 54 255 233 0 1 4 54 255 245 0 2 4 45 255 250 4 51 255 243 0 9 4 44 255 250 4 45 255 249 4 46 255 246 4 47 255 249 4 48 255 235 4 50 255 239 4 51 255 245 4 52 255 247 4 53 255 239 0 7 4 45 255 239 4 47 255 252 4 48 255 227 4 49 255 250 4 50 255 249 4 51 255 240 4 52 255 243 0 4 4 45 255 247 4 47 255 252 4 50 255 252 4 51 255 240 0 1 4 45 255 252 0 5 4 45 255 245 4 46 255 252 4 49 255 252 4 50 255 252 4 51 255 243 0 3 4 45 255 250 4 51 255 250 4 53 255 250 0 10 4 44 255 242 4 45 255 250 4 46 255 250 4 47 255 250 4 48 255 213 4 49 255 233 4 50 255 240 4 52 255 240 4 53 255 252 4 54 255 239 0 5 4 45 255 238 4 46 255 246 4 47 255 253 4 51 255 243 4 53 255 252 0 6 4 45 255 239 4 46 255 246 4 47 255 252 4 50 255 252 4 51 255 241 4 53 255 252 0 4 3 112 255 233 3 114 255 245 4 46 255 250 4 51 255 239 0 2 50 62 0 4 0 0 51 80 55 212 0 89 0 69 0 0 255 231 255 171 255 227 255 231 255 183 0 33 0 73 255 250 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 255 211 0 0 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 255 210 255 246 255 222 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 192 0 0 0 0 255 198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 255 232 255 218 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 169 255 216 255 216 255 167 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 194 255 221 0 0 255 212 255 221 255 194 255 235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 186 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 186 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 205 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 216 0 0 0 0 0 0 255 232 0 0 255 225 255 176 0 25 0 9 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 216 255 241 0 0 255 242 0 0 0 0 255 252 255 242 255 201 0 0 0 0 0 15 0 13 0 24 0 0 0 0 0 0 255 248 255 246 0 0 255 246 0 0 0 0 0 0 255 242 255 250 255 162 255 216 255 232 255 176 255 204 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 20 0 14 255 242 0 16 0 4 0 20 255 230 255 204 255 198 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 255 252 255 242 0 0 0 0 255 246 255 242 0 0 255 253 0 0 0 16 0 6 0 0 0 0 0 0 255 242 255 252 0 0 0 0 0 0 0 0 255 240 0 0 255 246 0 0 255 226 0 0 255 236 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 4 0 16 255 250 0 10 255 252 0 0 0 0 0 0 0 0 255 242 0 6 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 255 252 255 252 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 238 255 242 255 252 255 249 255 236 0 0 255 246 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 255 246 255 227 0 0 0 0 0 0 255 246 0 0 255 242 255 246 0 0 0 0 255 204 0 14 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 252 0 15 0 0 0 0 0 0 255 242 0 7 0 0 255 230 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 255 245 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 248 255 249 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 13 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 228 0 0 0 0 0 8 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 11 255 242 0 19 0 0 0 13 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 255 242 255 246 255 240 0 0 255 246 255 240 255 236 255 238 0 26 0 0 0 9 255 249 0 6 0 0 255 246 255 242 0 0 255 234 0 0 0 0 255 249 0 0 0 0 255 230 255 242 255 236 0 0 255 210 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 16 0 8 255 244 0 9 0 0 255 249 255 249 255 236 255 238 255 236 0 20 255 240 255 226 255 246 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 255 251 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 0 0 255 250 0 0 255 249 0 0 255 252 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 136 255 227 255 200 255 180 255 252 0 0 255 222 255 220 255 178 0 0 255 212 255 242 255 202 0 0 0 0 0 3 255 234 0 0 255 230 0 0 255 242 255 244 0 0 0 0 255 236 255 246 255 104 255 176 255 164 255 164 255 158 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 180 255 229 0 0 0 0 255 224 255 167 255 178 255 220 0 16 0 0 255 202 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 176 255 219 255 196 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 239 255 246 255 226 0 0 255 196 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 255 250 255 236 0 0 0 0 0 0 0 0 0 0 255 232 0 6 0 16 0 13 0 4 0 0 255 246 0 0 255 236 0 0 0 0 0 0 0 0 255 216 0 0 0 0 0 0 255 222 0 0 0 0 0 6 255 230 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 9 0 16 255 246 0 11 255 239 0 6 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 255 242 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 10 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 242 255 246 0 0 0 0 0 0 0 0 0 4 0 6 0 13 0 16 0 10 0 0 255 246 255 242 255 246 0 0 255 246 0 0 255 246 255 238 0 0 0 0 0 0 255 246 0 0 255 246 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 6 255 242 0 13 255 246 0 6 0 0 0 0 0 0 0 0 0 14 255 242 255 218 255 226 0 0 0 0 0 0 255 242 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 255 243 0 0 255 246 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 255 252 0 6 0 19 0 13 0 6 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 255 238 0 0 255 248 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 19 0 0 0 13 0 0 0 13 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 255 236 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 183 0 0 255 222 255 223 0 0 255 136 255 238 255 237 255 237 255 218 255 150 255 216 255 217 255 202 255 232 255 183 255 238 255 190 255 130 0 0 255 238 255 210 0 0 0 0 255 192 0 20 0 34 0 0 255 167 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 196 255 197 255 218 0 0 255 237 255 236 255 237 0 0 0 0 0 0 255 223 255 193 255 217 255 176 255 209 0 0 255 210 255 197 255 181 255 216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 143 0 0 0 0 0 0 255 227 255 169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 230 255 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 246 0 0 0 0 0 0 0 0 255 223 0 10 0 10 0 19 0 0 255 240 255 238 255 246 0 0 0 0 255 252 0 0 0 0 255 209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 225 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 6 0 6 255 246 0 6 255 246 0 13 0 0 0 0 0 0 0 0 255 252 255 249 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 53 0 0 0 20 0 47 0 0 255 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 243 0 0 0 0 0 0 0 0 255 210 0 20 0 16 0 26 0 4 255 222 0 0 255 250 255 250 255 250 255 240 0 0 0 0 255 191 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 34 0 0 255 227 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 10 0 0 0 16 0 0 0 16 0 0 0 0 0 0 0 0 0 6 0 0 255 252 255 246 0 0 0 0 0 0 255 246 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 197 0 0 0 0 0 0 255 243 255 213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 246 0 0 0 0 255 196 0 0 255 232 255 242 0 9 255 156 0 10 0 6 0 14 255 241 255 165 255 242 255 240 255 230 255 242 255 189 0 0 255 215 255 156 0 0 255 242 255 222 0 0 0 0 255 210 0 33 0 46 0 0 255 189 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 229 255 221 255 250 0 0 0 13 0 0 0 0 255 249 0 0 0 0 255 242 255 229 255 222 255 190 255 201 0 0 255 216 255 215 255 209 255 211 255 250 255 231 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 163 0 0 0 0 0 0 255 236 255 175 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 239 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 255 250 255 242 255 242 0 0 255 240 255 240 0 0 0 0 0 0 0 0 0 7 0 0 0 0 255 250 255 226 255 246 255 236 255 240 255 236 255 235 255 223 0 0 255 242 255 233 0 0 0 0 255 196 0 20 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 255 250 255 250 0 0 0 7 0 0 0 0 0 0 255 240 0 7 0 0 255 222 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 237 0 0 255 250 0 0 255 243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 237 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 255 230 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 255 253 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 255 252 255 232 0 0 0 0 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 0 0 0 0 0 0 255 244 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 232 255 246 0 0 0 6 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 255 235 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 8 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 230 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 150 255 236 255 222 255 164 0 0 0 26 255 234 255 236 255 152 0 0 255 209 255 207 255 186 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 248 0 0 0 0 255 228 0 0 255 118 0 0 0 0 0 0 0 0 0 0 0 0 255 250 255 249 255 226 255 226 255 229 255 220 255 220 255 246 0 0 0 0 0 0 255 230 0 0 255 249 255 184 255 206 0 0 0 0 0 0 255 160 255 172 255 221 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 255 246 255 230 255 246 0 0 0 5 0 5 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 242 0 0 0 0 255 236 0 0 255 242 0 0 255 222 255 236 255 252 0 0 255 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 0 0 0 0 0 0 255 249 0 0 0 0 0 5 0 0 255 249 0 6 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 46 0 46 255 242 255 246 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 255 206 0 0 0 0 0 0 0 0 255 236 0 0 255 246 0 0 0 0 0 0 255 241 0 0 0 62 255 236 0 75 0 76 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 54 0 0 0 33 0 0 0 26 0 40 0 34 0 13 0 0 255 252 255 242 0 0 0 0 0 0 255 252 255 242 0 0 0 0 0 0 0 49 0 0 0 0 255 230 0 0 0 0 255 242 0 0 0 37 255 252 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 0 0 255 242 0 0 0 0 0 0 0 0 255 222 0 0 255 248 0 14 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 220 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 14 0 0 0 0 255 234 0 0 0 0 255 245 255 246 255 246 0 0 0 0 255 230 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 255 246 0 0 255 238 0 0 0 0 255 242 255 242 255 242 0 0 255 230 255 249 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 244 0 0 0 0 0 0 0 0 255 252 255 212 255 230 0 0 0 0 0 0 255 249 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 241 0 0 0 0 0 0 0 0 255 247 255 244 0 0 0 53 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 222 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 199 0 0 0 0 255 210 0 0 0 0 255 252 255 252 255 230 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 230 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 237 0 0 255 252 0 0 255 244 0 0 255 242 255 252 0 0 255 239 0 6 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 11 0 9 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 9 255 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 173 255 201 0 0 0 0 0 0 255 213 255 242 255 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 203 255 123 0 0 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 255 250 0 13 0 19 255 249 0 0 0 0 0 0 0 0 0 0 255 199 255 237 0 0 255 246 0 0 255 231 0 0 255 246 255 201 0 0 0 0 0 0 0 0 0 13 255 240 0 62 0 0 0 0 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 19 0 0 0 0 255 232 255 236 0 0 0 0 255 246 255 246 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 255 236 0 0 0 0 0 0 0 0 255 245 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 255 245 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 255 252 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 255 238 0 0 255 246 0 0 0 0 0 0 255 250 0 0 0 0 255 236 0 34 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 230 0 0 0 0 0 0 0 0 0 0 255 230 255 238 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 255 236 0 0 0 0 255 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 10 0 10 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 21 0 0 0 0 0 14 0 17 0 0 0 0 0 49 0 0 0 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 47 0 44 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 0 0 0 255 232 0 0 0 0 255 245 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 215 255 252 0 0 0 0 0 0 255 246 0 0 255 252 255 226 0 0 0 0 0 0 255 248 0 0 0 0 0 38 0 14 0 0 255 248 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 239 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 249 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 221 0 0 0 0 0 0 0 0 255 236 0 0 255 252 255 216 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 13 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 0 0 0 0 0 0 0 0 255 230 0 0 0 0 255 252 255 250 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 233 0 0 255 246 0 0 0 0 0 0 255 246 0 0 0 0 255 248 0 25 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 193 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 255 220 255 250 255 226 255 253 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 255 250 255 246 0 0 255 246 0 0 0 10 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 255 243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 255 232 0 0 255 240 255 240 0 0 255 156 0 0 0 0 0 0 255 242 255 184 255 219 255 236 255 226 255 246 255 222 0 0 255 242 255 118 0 0 255 246 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 245 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 216 0 0 0 0 255 236 255 249 255 236 255 236 255 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 167 0 6 0 6 0 13 255 246 255 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 253 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 253 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 13 0 13 0 28 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 6 0 13 0 0 0 19 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 13 0 13 0 28 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 6 0 13 0 0 0 19 0 0 0 23 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 255 239 255 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 0 0 255 236 255 246 0 0 0 0 255 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 13 0 10 0 13 0 6 255 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 217 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 3 0 9 0 0 0 13 0 0 0 6 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 222 0 0 0 0 0 0 0 0 255 229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 255 232 255 250 255 239 255 239 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 247 0 0 255 249 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 255 246 255 226 0 0 0 0 0 0 0 0 255 136 0 4 0 0 0 13 0 0 255 144 255 206 255 246 255 178 0 0 255 213 0 0 255 232 255 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 210 0 0 255 231 255 236 255 235 0 0 255 246 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 137 255 242 0 0 0 0 255 220 255 150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 247 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 220 0 0 0 0 0 0 0 0 255 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 255 235 0 0 255 247 255 247 0 0 255 200 0 20 0 10 0 20 0 0 255 191 255 242 255 240 255 237 255 246 255 234 0 0 255 241 255 183 255 253 0 0 255 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 250 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 237 255 235 0 0 255 236 255 244 255 231 255 237 255 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 193 0 0 0 0 0 0 255 240 255 196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 255 246 0 0 0 0 0 0 0 0 255 242 255 240 255 249 0 20 255 249 0 6 0 13 0 6 0 0 0 3 255 242 0 0 255 239 255 246 255 240 255 249 255 251 0 0 255 240 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 6 0 6 0 0 0 0 0 0 0 0 0 0 255 252 255 249 0 0 0 16 0 0 255 229 255 242 0 0 0 0 0 0 255 242 255 249 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 231 0 0 255 252 255 190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 230 0 0 255 230 0 0 0 0 0 0 0 0 255 252 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 240 255 200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 255 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 240 255 189 255 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 216 0 0 255 239 255 211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 239 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 210 0 0 255 246 255 201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 226 255 238 0 0 0 0 0 0 0 0 255 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 235 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 255 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 141 255 201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 124 255 198 0 0 0 0 0 0 255 222 255 240 255 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 236 0 0 0 0 255 249 0 0 255 246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 221 255 245 0 0 255 252 0 0 255 236 0 0 255 252 255 216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 249 0 0 0 0 0 0 0 0 255 232 0 0 0 0 0 0 0 0 0 0 0 0 255 223 0 0 0 0 255 241 0 0 0 0 0 0 255 242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 252 0 0 255 246 255 246 0 0 255 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 242 255 232 0 0 0 0 0 0 0 0 255 236 0 0 0 0 0 0 0 2 0 4 2 246 3 17 0 0 3 28 3 51 0 28 3 53 3 53 0 52 3 64 3 65 0 53 0 2 0 29 0 4 0 55 0 0 0 77 0 78 0 52 0 104 0 104 0 54 0 126 0 126 0 55 0 160 0 162 0 56 0 168 0 168 0 59 0 204 0 205 0 60 0 229 0 229 0 62 0 251 0 251 0 63 1 22 1 22 0 64 1 44 1 45 0 65 1 81 1 83 0 67 1 89 1 89 0 70 1 126 1 127 0 71 1 150 1 154 0 73 1 159 1 159 0 78 1 170 1 171 0 79 1 183 1 183 0 81 1 193 1 194 0 82 1 202 1 202 0 84 2 230 2 230 0 85 2 240 2 240 0 86 3 91 3 116 0 87 3 138 3 138 0 113 3 167 3 167 0 114 3 190 3 190 0 115 3 228 3 228 0 116 3 234 3 234 0 117 4 17 4 18 0 118 0 1 0 2 3 22 3 23 0 1 0 9 0 6 0 22 0 23 0 32 0 48 0 49 3 93 3 109 3 110 0 1 0 5 3 19 3 20 3 21 3 26 3 27 0 2 0 19 0 4 0 19 0 0 0 21 0 55 0 16 0 162 0 162 0 51 0 205 0 205 0 52 0 229 0 229 0 53 1 45 1 45 0 54 1 83 1 83 0 55 1 127 1 127 0 56 1 150 1 150 0 57 1 152 1 154 0 58 1 159 1 159 0 61 1 171 1 171 0 62 1 183 1 183 0 63 1 194 1 194 0 64 1 202 1 202 0 65 3 91 3 106 0 66 3 108 3 116 0 82 3 228 3 228 0 91 4 18 4 18 0 92 0 1 0 1 3 18 0 1 0 6 0 18 0 24 0 44 0 50 3 105 3 111 0 1 0 2 3 24 3 25 0 1 0 20 0 4 0 8 0 12 0 18 0 24 0 30 0 34 0 38 0 44 0 50 1 45 1 153 1 159 1 171 3 91 3 95 3 99 3 105 3 111 3 228 0 1 0 3 2 250 3 2 3 4 0 1 0 54 0 9 0 19 0 25 0 27 0 51 0 53 0 115 0 182 0 228 1 103 1 223 1 224 1 225 1 226 1 227 1 228 1 229 1 230 1 231 1 232 1 243 1 244 1 245 1 246 1 247 1 248 1 249 1 250 1 251 1 252 2 3 2 5 2 24 2 33 2 35 2 143 2 144 2 145 2 146 3 96 3 106 3 112 3 114 4 44 4 45 4 46 4 47 4 48 4 49 4 50 4 51 4 52 4 53 4 54 0 2 0 45 0 4 0 32 0 0 0 34 0 37 0 29 0 40 0 40 0 33 0 42 0 114 0 34 0 116 0 181 0 107 0 183 1 2 0 173 1 6 1 33 0 249 1 45 1 45 1 21 1 47 1 48 1 22 1 50 1 50 1 24 1 57 1 148 1 25 1 150 1 150 1 117 1 152 1 155 1 118 1 158 1 201 1 122 1 204 1 204 1 166 1 230 1 230 1 167 1 250 1 250 1 168 1 253 2 11 1 169 2 14 2 24 1 184 2 27 2 27 1 195 2 29 2 29 1 196 2 31 2 31 1 197 2 33 2 33 1 198 2 35 2 35 1 199 2 224 2 225 1 200 3 58 3 61 1 202 3 63 3 63 1 206 3 66 3 73 1 207 3 75 3 75 1 215 3 91 3 94 1 216 3 96 3 97 1 220 3 100 3 102 1 222 3 105 3 138 1 225 3 140 3 150 2 3 3 169 3 175 2 14 3 192 3 195 2 21 3 197 3 202 2 25 3 211 3 226 2 31 3 234 3 250 2 47 3 252 4 17 2 64 4 24 4 40 2 86 4 42 4 42 2 103 4 45 4 45 2 104 4 51 4 51 2 105 4 53 4 54 2 106 0 2 0 192 0 4 0 4 0 12 0 5 0 5 0 13 0 6 0 6 0 15 0 7 0 7 0 22 0 8 0 8 0 60 0 9 0 9 0 61 0 10 0 10 0 17 0 11 0 11 0 64 0 12 0 12 0 65 0 13 0 13 0 67 0 14 0 14 0 18 0 15 0 15 0 20 0 16 0 17 0 64 0 18 0 18 0 22 0 19 0 19 0 71 0 20 0 20 0 22 0 21 0 21 0 24 0 22 0 22 0 26 0 23 0 23 0 28 0 24 0 24 0 30 0 25 0 25 0 75 0 26 0 26 0 32 0 27 0 27 0 77 0 28 0 28 0 34 0 29 0 29 0 36 0 30 0 30 0 38 0 31 0 31 0 48 0 32 0 32 0 39 0 34 0 34 0 42 0 35 0 35 0 43 0 36 0 36 0 44 0 37 0 37 0 47 0 40 0 40 0 45 0 42 0 43 0 47 0 44 0 45 0 48 0 46 0 46 0 54 0 47 0 47 0 51 0 48 0 48 0 52 0 49 0 49 0 53 0 50 0 50 0 54 0 51 0 51 0 87 0 52 0 52 0 56 0 53 0 53 0 88 0 54 0 54 0 57 0 55 0 55 0 58 0 56 0 77 0 12 0 78 0 78 0 60 0 79 0 83 0 15 0 84 0 87 0 22 0 88 0 104 0 60 0 105 0 111 0 17 0 112 0 114 0 64 0 116 0 126 0 65 0 127 0 127 0 67 0 128 0 128 0 18 0 129 0 129 0 20 0 130 0 130 0 69 0 131 0 136 0 20 0 137 0 144 0 64 0 145 0 160 0 22 0 161 0 161 0 60 0 162 0 167 0 23 0 168 0 168 0 22 0 169 0 174 0 24 0 175 0 181 0 26 0 183 0 187 0 28 0 188 0 204 0 30 0 205 0 210 0 31 0 211 0 214 0 32 0 215 0 222 0 34 0 223 0 226 0 36 0 227 0 227 0 22 0 228 0 228 0 73 0 229 0 229 0 22 0 230 0 251 0 38 0 252 0 252 0 42 0 253 1 1 0 39 1 2 1 2 0 46 1 6 1 22 0 42 1 23 1 29 0 44 1 30 1 33 0 47 1 45 1 45 0 54 1 47 1 48 0 45 1 50 1 50 0 46 1 57 1 65 0 47 1 66 1 81 0 48 1 82 1 82 0 42 1 83 1 88 0 49 1 89 1 89 0 48 1 90 1 95 0 51 1 96 1 102 0 52 1 103 1 103 0 81 1 104 1 109 0 53 1 110 1 126 0 54 1 127 1 132 0 55 1 133 1 136 0 56 1 137 1 144 0 57 1 145 1 148 0 58 1 150 1 150 0 48 1 152 1 152 0 54 1 153 1 153 0 48 1 154 1 154 0 54 1 155 1 155 0 43 1 158 1 158 0 53 1 159 1 170 0 66 1 171 1 201 0 54 1 204 1 204 0 46 1 230 1 230 0 9 1 250 1 250 0 8 1 253 1 254 0 41 1 255 2 0 0 40 2 1 2 1 0 41 2 2 2 2 0 1 2 3 2 3 0 2 2 4 2 4 0 84 2 5 2 5 0 7 2 6 2 7 0 85 2 8 2 8 0 50 2 9 2 9 0 86 2 10 2 10 0 50 2 11 2 11 0 86 2 14 2 14 0 82 2 15 2 15 0 83 2 16 2 16 0 82 2 17 2 17 0 83 2 18 2 23 0 80 2 24 2 24 0 6 2 27 2 27 0 79 2 29 2 29 0 79 2 31 2 31 0 79 2 33 2 33 0 11 2 224 2 224 0 50 2 225 2 225 0 86 3 58 3 58 0 13 3 59 3 59 0 65 3 60 3 60 0 22 3 61 3 61 0 48 3 63 3 63 0 48 3 66 3 66 0 13 3 67 3 67 0 48 3 68 3 68 0 18 3 69 3 69 0 45 3 70 3 70 0 60 3 71 3 71 0 42 3 72 3 72 0 22 3 73 3 73 0 48 3 75 3 75 0 84 3 91 3 91 0 59 3 92 3 92 0 14 3 93 3 93 0 16 3 94 3 94 0 70 3 96 3 96 0 62 3 97 3 97 0 63 3 100 3 100 0 68 3 101 3 101 0 19 3 102 3 102 0 21 3 105 3 105 0 70 3 106 3 106 0 72 3 107 3 107 0 70 3 108 3 108 0 25 3 109 3 109 0 27 3 110 3 110 0 29 3 111 3 111 0 74 3 112 3 112 0 76 3 113 3 113 0 33 3 114 3 114 0 78 3 115 3 115 0 35 3 116 3 116 0 37 3 117 3 138 0 59 3 140 3 141 0 14 3 142 3 146 0 16 3 147 3 150 0 70 3 169 3 175 0 63 3 192 3 192 0 68 3 193 3 194 0 19 3 195 3 195 0 21 3 197 3 202 0 21 3 211 3 226 0 70 3 234 3 236 0 70 3 237 3 242 0 25 3 243 3 250 0 27 3 252 4 0 0 29 4 1 4 17 0 74 4 24 4 27 0 33 4 28 4 35 0 35 4 36 4 39 0 37 4 40 4 40 0 70 4 42 4 42 0 70 4 45 4 45 0 5 4 51 4 51 0 10 4 53 4 53 0 4 4 54 4 54 0 3 0 2 0 154 0 4 0 4 0 17 0 6 0 6 0 20 0 10 0 10 0 20 0 13 0 13 0 24 0 18 0 18 0 20 0 20 0 20 0 20 0 22 0 22 0 18 0 23 0 23 0 2 0 24 0 24 0 3 0 25 0 25 0 49 0 26 0 26 0 4 0 27 0 27 0 51 0 28 0 28 0 5 0 29 0 29 0 19 0 30 0 30 0 21 0 32 0 34 0 23 0 35 0 35 0 22 0 36 0 36 0 6 0 38 0 38 0 25 0 39 0 39 0 7 0 42 0 43 0 62 0 44 0 44 0 23 0 45 0 45 0 62 0 46 0 46 0 23 0 47 0 47 0 62 0 48 0 48 0 63 0 49 0 49 0 26 0 50 0 50 0 27 0 51 0 51 0 56 0 52 0 52 0 8 0 53 0 53 0 58 0 54 0 54 0 9 0 55 0 55 0 64 0 56 0 77 0 17 0 79 0 83 0 20 0 87 0 87 0 1 0 105 0 111 0 20 0 127 0 127 0 24 0 145 0 168 0 20 0 175 0 181 0 18 0 183 0 187 0 2 0 188 0 210 0 3 0 211 0 214 0 4 0 215 0 222 0 5 0 223 0 226 0 19 0 227 0 227 0 1 0 230 0 252 0 21 0 253 1 22 0 23 1 23 1 29 0 6 1 34 1 44 0 25 1 45 1 45 0 62 1 46 1 46 0 7 1 48 1 48 0 62 1 57 1 64 0 62 1 66 1 89 0 23 1 90 1 95 0 62 1 96 1 102 0 63 1 104 1 109 0 26 1 110 1 132 0 27 1 133 1 136 0 8 1 137 1 144 0 9 1 145 1 148 0 64 1 151 1 151 0 7 1 152 1 152 0 23 1 154 1 154 0 23 1 155 1 158 0 22 1 159 1 170 0 61 1 171 1 201 0 23 1 211 1 211 0 22 1 224 1 224 0 38 1 230 1 230 0 41 1 244 1 244 0 37 1 250 1 250 0 40 1 252 1 252 0 36 1 253 1 254 0 16 1 255 2 0 0 67 2 1 2 1 0 16 2 2 2 2 0 43 2 3 2 3 0 44 2 4 2 4 0 53 2 5 2 5 0 45 2 6 2 7 0 54 2 8 2 8 0 55 2 9 2 9 0 10 2 10 2 10 0 55 2 11 2 11 0 10 2 14 2 14 0 60 2 15 2 15 0 65 2 16 2 16 0 60 2 17 2 17 0 65 2 18 2 23 0 59 2 24 2 24 0 30 2 28 2 28 0 68 2 30 2 30 0 68 2 32 2 32 0 68 2 33 2 33 0 34 2 35 2 35 0 29 2 37 2 37 0 28 2 44 2 44 0 31 2 45 2 45 0 32 2 224 2 224 0 55 2 225 2 225 0 10 3 58 3 58 0 1 3 60 3 60 0 20 3 62 3 62 0 25 3 63 3 63 0 23 3 71 3 71 0 23 3 72 3 72 0 20 3 73 3 73 0 23 3 75 3 75 0 53 3 90 3 90 0 25 3 91 3 91 0 57 3 92 3 92 0 66 3 93 3 93 0 46 3 94 3 96 0 66 3 97 3 97 0 46 3 98 3 98 0 66 3 100 3 100 0 11 3 101 3 104 0 66 3 105 3 105 0 46 3 106 3 106 0 66 3 107 3 107 0 46 3 108 3 108 0 66 3 109 3 109 0 47 3 110 3 110 0 12 3 111 3 111 0 48 3 112 3 112 0 50 3 113 3 113 0 13 3 114 3 114 0 52 3 115 3 115 0 14 3 116 3 116 0 15 3 117 3 138 0 57 3 141 3 141 0 66 3 142 3 146 0 46 3 147 3 149 0 66 3 151 3 168 0 66 3 169 3 175 0 46 3 176 3 178 0 66 3 192 3 192 0 11 3 193 3 201 0 66 3 203 3 210 0 66 3 211 3 236 0 46 3 237 3 242 0 66 3 243 3 250 0 47 3 252 4 0 0 12 4 1 4 23 0 48 4 24 4 27 0 13 4 28 4 35 0 14 4 36 4 39 0 15 4 41 4 41 0 66 4 45 4 45 0 39 4 48 4 48 0 35 4 50 4 50 0 42 4 54 4 54 0 33 0 0 0 1 0 0 0 10 1 50 7 22 0 2 68 70 76 84 0 14 108 97 116 110 0 68 0 4 0 0 0 0 255 255 0 22 0 0 0 5 0 10 0 15 0 20 0 25 0 30 0 38 0 43 0 48 0 53 0 58 0 63 0 68 0 73 0 78 0 83 0 88 0 93 0 98 0 103 0 108 0 22 0 3 65 90 69 32 0 72 67 82 84 32 0 124 84 82 75 32 0 176 0 0 255 255 0 22 0 1 0 6 0 11 0 16 0 21 0 26 0 31 0 39 0 44 0 49 0 54 0 59 0 64 0 69 0 74 0 79 0 84 0 89 0 94 0 99 0 104 0 109 0 0 255 255 0 23 0 2 0 7 0 12 0 17 0 22 0 27 0 32 0 35 0 40 0 45 0 50 0 55 0 60 0 65 0 70 0 75 0 80 0 85 0 90 0 95 0 100 0 105 0 110 0 0 255 255 0 23 0 3 0 8 0 13 0 18 0 23 0 28 0 33 0 36 0 41 0 46 0 51 0 56 0 61 0 66 0 71 0 76 0 81 0 86 0 91 0 96 0 101 0 106 0 111 0 0 255 255 0 23 0 4 0 9 0 14 0 19 0 24 0 29 0 34 0 37 0 42 0 47 0 52 0 57 0 62 0 67 0 72 0 77 0 82 0 87 0 92 0 97 0 102 0 107 0 112 0 113 97 97 108 116 2 168 97 97 108 116 2 176 97 97 108 116 2 184 97 97 108 116 2 192 97 97 108 116 2 200 99 50 115 99 2 208 99 50 115 99 2 216 99 50 115 99 2 224 99 50 115 99 2 232 99 50 115 99 2 240 99 97 115 101 2 248 99 97 115 101 2 254 99 97 115 101 3 4 99 97 115 101 3 10 99 97 115 101 3 16 99 99 109 112 3 22 99 99 109 112 3 36 99 99 109 112 3 50 99 99 109 112 3 64 99 99 109 112 3 78 100 110 111 109 3 92 100 110 111 109 3 98 100 110 111 109 3 104 100 110 111 109 3 110 100 110 111 109 3 116 102 114 97 99 3 122 102 114 97 99 3 132 102 114 97 99 3 142 102 114 97 99 3 152 102 114 97 99 3 162 108 105 103 97 3 172 108 105 103 97 3 178 108 105 103 97 3 184 108 105 103 97 3 190 108 105 103 97 3 196 108 111 99 108 3 202 108 111 99 108 3 208 108 111 99 108 3 214 110 117 109 114 3 220 110 117 109 114 3 226 110 117 109 114 3 232 110 117 109 114 3 238 110 117 109 114 3 244 111 110 117 109 3 250 111 110 117 109 4 0 111 110 117 109 4 6 111 110 117 109 4 12 111 110 117 109 4 18 111 114 100 110 4 24 111 114 100 110 4 30 111 114 100 110 4 36 111 114 100 110 4 42 111 114 100 110 4 48 112 110 117 109 4 54 112 110 117 109 4 60 112 110 117 109 4 66 112 110 117 109 4 72 112 110 117 109 4 78 115 97 108 116 4 84 115 97 108 116 4 96 115 97 108 116 4 108 115 97 108 116 4 120 115 97 108 116 4 132 115 105 110 102 4 144 115 105 110 102 4 150 115 105 110 102 4 156 115 105 110 102 4 162 115 105 110 102 4 168 115 109 99 112 4 174 115 109 99 112 4 182 115 109 99 112 4 190 115 109 99 112 4 198 115 109 99 112 4 206 115 115 48 49 4 214 115 115 48 49 4 220 115 115 48 49 4 226 115 115 48 49 4 232 115 115 48 49 4 238 115 115 48 50 4 244 115 115 48 50 4 250 115 115 48 50 5 0 115 115 48 50 5 6 115 115 48 50 5 12 115 115 48 51 5 18 115 115 48 51 5 24 115 115 48 51 5 30 115 115 48 51 5 36 115 115 48 51 5 42 115 115 48 52 5 48 115 115 48 52 5 54 115 115 48 52 5 60 115 115 48 52 5 66 115 115 48 52 5 72 115 115 48 53 5 78 115 115 48 53 5 84 115 115 48 53 5 90 115 115 48 53 5 96 115 115 48 53 5 102 115 117 98 115 5 108 115 117 98 115 5 114 115 117 98 115 5 120 115 117 98 115 5 126 115 117 98 115 5 132 115 117 112 115 5 138 115 117 112 115 5 150 115 117 112 115 5 162 115 117 112 115 5 174 115 117 112 115 5 186 122 101 114 111 5 198 122 101 114 111 5 204 122 101 114 111 5 210 122 101 114 111 5 216 122 101 114 111 5 222 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 9 0 10 0 0 0 2 0 9 0 10 0 0 0 2 0 9 0 10 0 0 0 2 0 9 0 10 0 0 0 2 0 9 0 10 0 0 0 1 0 25 0 0 0 1 0 25 0 0 0 1 0 25 0 0 0 1 0 25 0 0 0 1 0 25 0 0 0 5 0 4 0 5 0 6 0 7 0 8 0 0 0 5 0 4 0 5 0 6 0 7 0 8 0 0 0 5 0 4 0 5 0 6 0 7 0 8 0 0 0 5 0 4 0 5 0 6 0 7 0 8 0 0 0 5 0 4 0 5 0 6 0 7 0 8 0 0 0 1 0 13 0 0 0 1 0 13 0 0 0 1 0 13 0 0 0 1 0 13 0 0 0 1 0 13 0 0 0 3 0 12 0 14 0 15 0 0 0 3 0 12 0 14 0 15 0 0 0 3 0 12 0 14 0 15 0 0 0 3 0 12 0 14 0 15 0 0 0 3 0 12 0 14 0 15 0 0 0 1 0 30 0 0 0 1 0 30 0 0 0 1 0 30 0 0 0 1 0 30 0 0 0 1 0 30 0 0 0 1 0 2 0 0 0 1 0 2 0 0 0 1 0 2 0 0 0 1 0 12 0 0 0 1 0 12 0 0 0 1 0 12 0 0 0 1 0 12 0 0 0 1 0 12 0 0 0 1 0 22 0 0 0 1 0 22 0 0 0 1 0 22 0 0 0 1 0 22 0 0 0 1 0 22 0 0 0 1 0 16 0 0 0 1 0 16 0 0 0 1 0 16 0 0 0 1 0 16 0 0 0 1 0 16 0 0 0 1 0 21 0 0 0 1 0 21 0 0 0 1 0 21 0 0 0 1 0 21 0 0 0 1 0 21 0 0 0 4 0 26 0 27 0 28 0 29 0 0 0 4 0 26 0 27 0 28 0 29 0 0 0 4 0 26 0 27 0 28 0 29 0 0 0 4 0 26 0 27 0 28 0 29 0 0 0 4 0 26 0 27 0 28 0 29 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 2 0 10 0 11 0 0 0 2 0 10 0 11 0 0 0 2 0 10 0 11 0 0 0 2 0 10 0 11 0 0 0 2 0 10 0 11 9 2 0 1 0 26 8 252 0 1 0 26 8 246 0 1 0 26 8 240 0 1 0 26 8 234 0 1 0 26 9 2 0 1 0 27 8 252 0 1 0 27 8 246 0 1 0 27 8 240 0 1 0 27 8 234 0 1 0 27 9 32 0 1 0 28 9 26 0 1 0 28 9 20 0 1 0 28 9 14 0 1 0 28 9 8 0 1 0 28 9 30 0 1 0 29 9 24 0 1 0 29 9 18 0 1 0 29 9 12 0 1 0 29 9 6 0 1 0 29 8 108 0 1 0 23 8 102 0 1 0 23 8 96 0 1 0 23 8 90 0 1 0 23 8 84 0 1 0 23 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 1 0 20 0 0 0 4 0 16 0 17 0 18 0 19 0 0 0 4 0 16 0 17 0 18 0 19 0 0 0 4 0 16 0 17 0 18 0 19 0 0 0 4 0 16 0 17 0 18 0 19 0 0 0 4 0 16 0 17 0 18 0 19 0 0 0 1 0 24 0 0 0 1 0 24 0 0 0 1 0 24 0 0 0 1 0 24 0 0 0 1 0 24 0 33 0 68 0 76 0 84 0 92 0 100 0 110 0 120 0 128 0 136 0 144 0 152 0 160 0 168 0 176 0 184 0 192 0 204 0 212 0 220 0 228 0 236 0 244 0 252 1 4 1 12 1 20 1 28 1 36 1 44 1 52 1 60 1 68 1 76 0 1 0 0 0 1 8 98 0 3 0 0 0 1 11 62 0 1 0 0 0 1 1 0 0 2 0 0 0 1 0 254 0 6 0 0 0 2 1 60 1 78 0 6 0 0 0 2 1 86 1 106 0 4 0 0 0 1 1 114 0 4 0 0 0 1 1 228 0 6 0 0 0 1 2 170 0 1 0 0 0 1 2 180 0 1 0 0 0 1 4 80 0 1 0 0 0 1 4 106 0 1 0 0 0 1 6 8 0 1 0 0 0 1 6 34 0 1 0 0 0 1 6 60 0 6 0 0 0 3 6 58 6 76 6 94 0 1 0 0 0 1 6 102 0 1 0 0 0 1 6 158 0 1 0 0 0 1 6 156 0 1 0 0 0 1 6 182 0 1 0 0 0 1 6 188 0 1 0 0 0 1 6 214 0 1 0 0 0 1 6 212 0 1 0 0 0 1 6 214 0 1 0 0 0 1 6 216 0 1 0 0 0 1 6 218 0 1 0 0 0 1 6 220 0 1 0 0 0 1 6 242 0 1 0 0 0 1 7 38 0 1 0 0 0 1 7 58 0 4 0 0 0 1 7 80 0 4 0 0 0 1 14 138 0 1 0 0 0 1 14 148 0 1 14 236 3 52 0 1 14 236 0 8 0 22 0 28 0 34 0 40 0 46 0 52 0 58 0 64 0 2 0 8 2 250 0 2 0 8 2 254 0 2 0 18 2 250 0 2 0 18 2 254 0 2 0 34 2 250 0 2 0 34 2 254 0 2 0 44 2 250 0 2 0 44 2 254 0 3 0 0 0 1 14 186 0 1 14 198 0 1 0 0 0 3 0 3 0 0 0 1 14 186 0 1 14 198 0 1 0 0 0 3 0 3 0 0 0 2 14 124 14 186 0 1 14 180 0 1 0 0 0 31 0 3 0 0 0 1 14 172 0 1 14 160 0 1 0 0 0 32 0 1 14 160 0 3 0 12 0 54 0 88 0 5 0 12 0 18 0 24 0 30 0 36 3 38 0 2 2 246 3 36 0 2 2 248 3 42 0 2 2 252 3 64 0 2 3 0 3 40 0 2 3 6 0 4 0 10 0 16 0 22 0 28 3 46 0 2 2 246 3 44 0 2 2 248 3 50 0 2 2 252 3 48 0 2 3 6 0 4 0 10 0 16 0 22 0 28 3 34 0 2 2 246 3 30 0 2 2 248 3 28 0 2 2 254 3 32 0 2 3 12 0 1 14 48 0 16 0 38 0 48 0 58 0 68 0 78 0 88 0 98 0 108 0 118 0 128 0 146 0 156 0 166 0 176 0 186 0 196 0 1 0 4 0 77 0 2 3 24 0 1 0 4 0 104 0 2 3 24 0 1 0 4 0 111 0 2 2 252 0 1 0 4 0 126 0 2 3 24 0 1 0 4 0 168 0 2 3 24 0 1 0 4 0 204 0 2 3 24 0 1 0 4 0 251 0 2 3 24 0 1 0 4 1 2 0 2 3 12 0 1 0 4 1 22 0 2 3 24 0 2 0 6 0 12 1 29 0 2 2 252 1 26 0 2 3 22 0 1 0 4 1 43 0 2 3 24 0 1 0 4 1 50 0 2 3 12 0 1 0 4 1 89 0 2 3 24 0 1 0 4 1 104 0 2 3 12 0 1 0 4 1 126 0 2 3 24 0 1 0 4 1 198 0 2 3 22 0 3 0 1 13 134 0 1 13 180 0 0 0 1 0 0 0 32 0 2 13 116 0 207 3 91 3 92 3 93 3 94 3 95 3 96 3 97 3 98 3 99 3 100 3 101 3 102 3 103 3 104 3 105 3 106 3 107 3 108 3 109 3 110 3 111 3 112 3 113 3 114 3 115 3 116 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 186 3 187 3 188 3 189 3 190 3 192 3 193 3 195 3 196 3 197 3 198 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 237 3 238 3 239 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 42 3 140 3 191 3 235 3 141 3 194 3 168 3 236 0 2 12 58 0 14 4 43 4 44 4 45 4 46 4 47 4 48 4 49 4 50 4 51 4 52 4 53 4 54 4 55 4 56 0 2 12 46 0 208 3 91 3 92 3 93 3 94 3 95 3 96 3 97 3 98 3 99 3 100 3 101 3 102 3 103 3 104 3 105 3 106 3 107 3 108 3 109 3 110 3 111 3 112 3 113 3 114 3 115 3 116 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 187 3 188 3 189 3 190 3 190 3 192 3 193 3 195 3 196 3 198 3 197 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 237 3 239 3 238 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 42 3 140 3 191 3 235 3 141 3 194 3 168 3 236 3 186 0 2 10 218 0 14 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 104 2 105 2 102 2 103 0 2 10 184 0 14 2 78 2 79 2 80 2 81 2 82 2 83 2 84 2 85 2 86 2 87 2 90 2 91 2 88 2 89 0 1 10 172 0 128 0 3 0 1 10 172 0 1 10 182 0 0 0 1 0 0 0 32 0 3 0 1 10 172 0 1 10 188 0 0 0 1 0 0 0 32 0 3 0 2 10 190 10 180 0 1 10 170 0 0 0 1 0 0 0 32 0 2 10 178 0 29 2 109 2 110 2 111 2 112 2 113 2 114 2 115 2 116 2 117 2 118 2 119 2 120 2 121 2 122 2 123 2 124 2 125 2 126 2 127 2 128 2 129 2 130 2 131 2 132 2 133 2 134 2 135 2 136 2 137 0 1 10 136 4 54 0 2 10 18 0 14 2 50 2 51 2 52 2 53 2 54 2 55 2 56 2 57 2 58 2 59 2 62 2 63 2 60 2 61 0 2 10 106 0 4 4 84 4 85 4 86 4 87 0 2 9 226 0 14 2 64 2 65 2 66 2 67 2 68 2 69 2 70 2 71 2 72 2 73 2 76 2 77 2 74 2 75 0 1 10 70 0 10 0 1 10 80 0 20 0 0 1 0 0 2 10 80 0 2 3 87 3 89 0 2 10 70 0 2 3 86 3 88 0 1 10 68 0 1 0 0 1 1 0 2 10 120 0 10 1 202 1 203 1 204 1 205 1 206 1 207 1 208 1 209 1 210 2 140 0 0 1 2 0 2 10 112 0 25 1 171 1 172 1 173 1 174 1 175 1 176 1 177 1 178 1 179 1 180 1 181 1 182 1 183 1 184 1 185 1 186 1 187 1 188 1 189 1 190 1 191 1 192 1 193 2 107 2 138 0 0 1 3 0 2 10 80 0 9 1 194 1 195 1 196 1 197 1 198 1 199 1 200 1 201 2 139 0 0 1 4 0 2 10 74 0 12 1 159 1 160 1 161 1 162 1 163 1 164 1 165 1 166 1 167 1 168 1 169 1 170 0 1 10 60 0 1 0 8 0 2 0 6 0 12 1 155 0 2 0 35 1 158 0 2 0 49 0 2 10 40 1 111 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 192 3 193 3 195 3 196 3 197 3 198 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 237 3 238 3 239 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 42 3 139 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 187 3 188 3 189 3 190 3 190 3 192 3 193 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 237 3 239 3 238 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 43 1 243 1 244 1 245 1 246 1 247 1 248 1 249 1 250 1 251 1 252 1 243 1 244 1 245 1 246 1 247 1 248 1 249 1 250 1 251 1 252 4 84 2 48 2 107 2 138 2 139 2 140 2 247 2 249 2 251 2 253 2 255 3 1 3 3 3 5 3 7 3 9 3 11 3 13 3 15 3 23 3 25 3 29 3 31 3 33 3 35 3 37 3 39 3 41 3 43 3 45 3 47 3 49 3 51 3 140 3 191 3 235 3 140 3 191 3 235 3 65 3 141 3 141 3 194 3 194 3 168 3 168 3 236 3 236 3 186 0 1 8 98 0 120 0 246 0 252 1 2 1 8 1 14 1 20 1 26 1 32 1 38 1 46 1 52 1 58 1 64 1 70 1 76 1 82 1 88 1 94 1 100 1 106 1 112 1 118 1 124 1 130 1 136 1 142 1 148 1 156 1 162 1 168 1 174 1 180 1 186 1 194 1 200 1 208 1 214 1 220 1 228 1 234 1 240 1 246 1 252 2 2 2 8 2 14 2 20 2 26 2 32 2 38 2 44 2 50 2 56 2 62 2 68 2 74 2 80 2 86 2 92 2 98 2 104 2 110 2 116 2 122 2 128 2 134 2 140 2 146 2 152 2 158 2 164 2 170 2 176 2 182 2 188 2 194 2 200 2 206 2 212 2 218 2 224 2 230 2 236 2 242 2 248 2 254 3 4 3 10 3 16 3 22 3 28 3 34 3 40 3 46 3 52 3 58 3 64 3 70 3 76 3 82 3 88 3 94 3 100 3 106 3 122 3 138 3 154 3 170 3 186 3 202 3 218 3 234 3 250 4 10 4 20 4 30 4 36 4 42 4 48 4 58 0 2 3 91 4 58 0 2 3 92 4 59 0 2 3 93 4 60 0 2 3 94 4 61 0 2 3 95 4 62 0 2 3 96 4 63 0 2 3 97 4 64 0 2 3 98 4 65 0 3 3 99 4 66 1 159 0 2 3 100 4 67 0 2 3 101 4 68 0 2 3 102 4 69 0 2 3 103 4 70 0 2 3 104 4 71 0 2 3 105 4 72 0 2 3 106 4 73 0 2 3 107 4 74 0 2 3 108 4 75 0 2 3 109 4 76 0 2 3 110 4 77 0 2 3 111 4 78 0 2 3 112 4 79 0 2 3 113 4 80 0 2 3 114 4 81 0 2 3 115 4 82 0 2 3 116 4 83 0 3 3 91 2 109 1 171 0 2 3 92 2 110 0 2 3 93 2 111 0 2 3 94 2 112 0 2 3 95 2 113 0 2 3 96 2 114 0 3 3 97 2 115 1 194 0 2 3 98 2 116 0 3 3 90 3 99 2 117 0 2 3 100 2 118 0 2 3 101 2 119 0 3 3 102 2 120 1 202 0 2 3 103 2 121 0 2 3 104 2 122 0 2 3 105 2 123 0 2 3 106 2 124 0 2 3 107 2 125 0 2 3 108 2 126 0 2 3 109 2 127 0 2 3 110 2 128 0 2 3 111 2 129 0 2 3 112 2 130 0 2 3 113 2 131 0 2 3 114 2 132 0 2 3 115 2 133 0 2 3 116 2 134 0 2 3 180 1 160 0 2 3 181 1 161 0 2 3 182 1 162 0 2 3 183 1 163 0 2 3 184 1 164 0 2 3 185 1 165 0 2 3 186 1 166 0 2 3 187 1 167 0 2 3 188 1 168 0 2 3 189 1 169 0 2 3 190 1 170 0 2 3 117 1 172 0 2 3 118 1 173 0 2 3 119 1 174 0 2 3 120 1 175 0 2 3 121 1 176 0 2 3 122 1 177 0 2 3 123 1 178 0 2 3 124 1 179 0 2 3 125 1 180 0 2 3 126 1 181 0 2 3 127 1 182 0 2 3 128 1 183 0 2 3 129 1 184 0 2 3 130 1 185 0 2 3 131 1 186 0 2 3 132 1 187 0 2 3 133 1 188 0 2 3 134 1 189 0 2 3 135 1 190 0 2 3 136 1 191 0 2 3 137 1 192 0 2 3 138 1 193 0 2 3 151 2 135 0 2 3 152 2 136 0 2 3 169 1 195 0 2 3 170 1 196 0 2 3 171 1 197 0 2 3 172 1 198 0 2 3 173 1 199 0 2 3 174 1 200 0 2 3 175 1 201 0 2 3 195 1 203 0 2 3 196 1 204 0 2 3 198 1 205 0 2 3 197 1 206 0 2 3 199 1 207 0 2 3 200 1 208 0 2 3 201 1 209 0 2 3 202 1 210 0 2 4 42 2 137 0 7 4 44 2 92 2 78 2 50 2 64 1 223 1 233 0 7 4 45 2 93 2 79 2 51 2 65 1 224 1 234 0 7 4 46 2 94 2 80 2 52 2 66 1 225 1 235 0 7 4 47 2 95 2 81 2 53 2 67 1 226 1 236 0 7 4 48 2 96 2 82 2 54 2 68 1 227 1 237 0 7 4 49 2 97 2 83 2 55 2 69 1 228 1 238 0 7 4 50 2 98 2 84 2 56 2 70 1 229 1 239 0 7 4 51 2 99 2 85 2 57 2 71 1 230 1 240 0 7 4 52 2 100 2 86 2 58 2 72 1 231 1 241 0 7 4 53 2 101 2 87 2 59 2 73 1 232 1 242 0 4 2 104 2 90 2 62 2 76 0 4 2 105 2 91 2 63 2 77 0 2 4 54 4 85 0 2 4 55 4 86 0 2 4 56 4 87 0 4 2 102 2 88 2 60 2 74 0 4 2 103 2 89 2 61 2 75 0 1 0 114 0 1 0 8 0 1 0 4 1 44 0 2 3 24 0 2 4 88 0 45 3 56 1 44 2 78 2 79 2 80 2 81 2 82 2 83 2 84 2 85 2 86 2 87 2 88 2 89 2 90 2 91 2 247 2 249 2 251 2 253 2 255 3 1 3 3 3 5 3 7 3 9 3 11 3 13 3 15 3 23 3 25 3 29 3 31 3 33 3 35 3 37 3 39 3 41 3 43 3 45 3 47 3 49 3 51 3 57 3 65 0 1 0 1 0 38 0 1 0 8 0 90 0 93 0 147 0 150 1 8 1 11 1 68 1 71 0 1 0 4 0 90 0 147 1 8 1 68 0 1 0 1 3 0 0 1 0 4 0 93 0 150 1 11 1 71 0 1 0 1 2 248 0 1 0 1 3 24 0 1 0 1 1 43 0 1 0 3 2 250 3 0 3 4 0 1 0 16 0 4 0 8 0 10 0 12 0 18 0 24 0 30 0 33 0 34 0 36 0 38 0 41 0 44 0 49 0 50 1 194 0 2 0 7 0 4 0 29 0 0 0 56 0 229 0 26 3 58 3 60 0 200 3 66 3 66 0 203 3 68 3 68 0 204 3 70 3 70 0 205 3 72 3 72 0 206 0 1 0 28 2 246 2 248 2 250 2 252 2 254 3 0 3 2 3 4 3 6 3 8 3 10 3 12 3 14 3 22 3 24 3 28 3 30 3 32 3 34 3 36 3 38 3 40 3 42 3 44 3 46 3 48 3 50 3 64 0 2 0 3 1 212 1 222 0 0 2 18 2 18 0 11 2 20 2 21 0 12 0 2 0 13 0 30 0 55 0 0 0 230 1 44 0 26 1 46 1 47 0 97 1 49 1 64 0 99 1 66 1 108 0 115 1 110 1 150 0 158 1 153 1 153 0 199 3 61 3 63 0 200 3 67 3 67 0 203 3 69 3 69 0 204 3 71 3 71 0 205 3 73 3 73 0 206 3 90 3 90 0 207 0 2 0 3 1 213 1 222 0 0 1 253 1 254 0 10 2 27 2 28 0 12 0 1 0 1 2 33 0 2 0 1 2 92 2 101 0 0 0 1 0 2 0 3 3 54 0 2 0 2 2 78 2 91 0 0 2 159 2 161 0 14 0 2 0 1 2 92 2 105 0 0 0 2 0 1 2 78 2 87 0 0 0 1 0 2 3 56 3 57 0 2 0 3 0 30 0 55 0 0 1 6 1 7 0 26 1 153 1 153 0 28 0 2 0 1 0 4 0 29 0 0 0 1 0 4 1 255 2 18 2 20 2 21 0 2 0 2 1 213 1 222 0 0 1 233 1 242 0 10 0 2 0 1 1 213 1 232 0 0 0 1 0 2 1 213 1 223 0 1 0 29 2 47 2 246 2 248 2 250 2 252 2 254 3 0 3 2 3 4 3 6 3 8 3 10 3 12 3 14 3 22 3 24 3 28 3 30 3 32 3 34 3 36 3 38 3 40 3 42 3 44 3 46 3 48 3 50 3 64 0 2 0 3 0 41 0 41 0 0 1 49 1 56 0 1 2 120 2 120 0 9 0 2 0 4 0 30 0 30 0 0 0 230 0 251 0 1 2 106 2 106 0 23 2 109 2 109 0 24 0 2 0 3 0 36 0 36 0 0 1 23 1 29 0 1 2 115 2 115 0 8 0 2 0 2 0 12 0 12 0 0 0 116 0 126 0 1 0 1 0 1 0 35 0 2 0 47 0 56 0 115 0 0 0 127 0 229 0 60 0 252 1 5 0 163 1 8 1 22 0 173 1 30 1 44 0 188 1 46 1 47 0 203 1 57 1 64 0 205 1 66 1 108 0 213 1 110 1 150 1 0 1 212 1 212 1 41 1 223 1 242 1 42 1 255 1 255 1 62 2 47 2 47 1 63 2 106 2 106 1 64 2 109 2 109 1 65 2 115 2 115 1 66 2 120 2 120 1 67 2 246 2 246 1 68 2 248 2 248 1 69 2 250 2 250 1 70 2 252 2 252 1 71 2 254 2 254 1 72 3 0 3 0 1 73 3 2 3 2 1 74 3 4 3 4 1 75 3 6 3 6 1 76 3 8 3 8 1 77 3 10 3 10 1 78 3 12 3 12 1 79 3 14 3 14 1 80 3 22 3 22 1 81 3 24 3 24 1 82 3 28 3 28 1 83 3 30 3 30 1 84 3 32 3 32 1 85 3 34 3 34 1 86 3 36 3 36 1 87 3 38 3 38 1 88 3 40 3 40 1 89 3 42 3 42 1 90 3 44 3 44 1 91 3 46 3 46 1 92 3 48 3 48 1 93 3 50 3 50 1 94 3 58 3 64 1 95 3 66 3 73 1 102 3 90 3 90 1 110 0 2 0 12 0 4 0 55 0 0 0 116 0 126 0 52 0 230 0 251 0 63 1 6 1 7 0 85 1 23 1 29 0 87 1 49 1 56 0 94 1 153 1 153 0 102 1 213 1 222 0 103 1 253 1 254 0 113 2 18 2 18 0 115 2 20 2 21 0 116 2 27 2 28 0 118 0 1 0 45 0 3 1 43 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 246 2 248 2 250 2 252 2 254 3 0 3 2 3 4 3 6 3 8 3 10 3 12 3 14 3 22 3 24 3 28 3 30 3 32 3 34 3 36 3 38 3 40 3 42 3 44 3 46 3 48 3 50 3 54 3 64 0 1 0 0 0 8 0 0 0 4 0 14 0 2 105 100 101 111 114 111 109 110 0 2 68 70 76 84 0 14 108 97 116 110 0 14 0 6 0 0 0 0 0 1 0 2 0 8 0 12 0 1 255 86 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 32 68 0 0 0 20 0 0 0 0 0 0 32 60 48 130 32 56 6 9 42 134 72 134 247 13 1 7 2 160 130 32 41 48 130 32 37 2 1 1 49 11 48 9 6 5 43 14 3 2 26 5 0 48 97 6 10 43 6 1 4 1 130 55 2 1 4 160 83 48 81 48 44 6 10 43 6 1 4 1 130 55 2 1 28 162 30 128 28 0 60 0 60 0 60 0 79 0 98 0 115 0 111 0 108 0 101 0 116 0 101 0 62 0 62 0 62 48 33 48 9 6 5 43 14 3 2 26 5 0 4 20 158 55 249 51 142 154 35 0 162 188 220 156 11 52 184 200 198 27 98 39 160 130 27 15 48 130 2 60 48 130 1 165 2 16 112 186 228 29 16 217 41 52 182 56 202 123 3 204 186 191 48 13 6 9 42 134 72 134 247 13 1 1 2 5 0 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 30 23 13 57 54 48 49 50 57 48 48 48 48 48 48 90 23 13 50 56 48 56 48 49 50 51 53 57 53 57 90 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 129 159 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 129 141 0 48 129 137 2 129 129 0 201 92 89 158 242 27 138 1 20 180 16 223 4 64 219 227 87 175 106 69 64 143 132 12 11 209 51 217 217 17 207 238 2 88 31 37 247 42 168 68 5 170 236 3 31 120 127 158 147 185 154 0 170 35 125 214 172 133 162 99 69 199 114 39 204 244 76 198 117 113 210 57 239 79 66 240 117 223 10 144 198 142 32 111 152 15 248 172 35 95 112 41 54 164 201 134 231 177 154 32 203 83 165 133 231 61 190 125 154 254 36 69 51 220 118 21 237 15 162 113 100 76 101 46 129 104 69 167 2 3 1 0 1 48 13 6 9 42 134 72 134 247 13 1 1 2 5 0 3 129 129 0 187 76 18 43 207 44 38 0 79 20 19 221 166 251 252 10 17 132 140 243 40 28 103 146 47 124 182 197 250 223 240 232 149 188 29 143 108 44 168 81 204 115 216 164 192 83 240 78 214 38 192 118 1 87 129 146 94 33 241 209 177 255 231 208 33 88 205 105 23 227 68 28 156 25 68 57 137 92 220 156 0 15 86 141 2 153 237 162 144 69 76 228 187 16 164 61 240 50 3 14 241 206 248 232 201 81 140 230 98 159 230 159 192 125 183 114 156 201 54 58 107 159 78 168 255 100 13 100 48 130 3 238 48 130 3 87 160 3 2 1 2 2 16 126 147 235 251 124 198 78 89 234 75 154 119 212 6 252 59 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 139 49 11 48 9 6 3 85 4 6 19 2 90 65 49 21 48 19 6 3 85 4 8 19 12 87 101 115 116 101 114 110 32 67 97 112 101 49 20 48 18 6 3 85 4 7 19 11 68 117 114 98 97 110 118 105 108 108 101 49 15 48 13 6 3 85 4 10 19 6 84 104 97 119 116 101 49 29 48 27 6 3 85 4 11 19 20 84 104 97 119 116 101 32 67 101 114 116 105 102 105 99 97 116 105 111 110 49 31 48 29 6 3 85 4 3 19 22 84 104 97 119 116 101 32 84 105 109 101 115 116 97 109 112 105 110 103 32 67 65 48 30 23 13 49 50 49 50 50 49 48 48 48 48 48 48 90 23 13 50 48 49 50 51 48 50 51 53 57 53 57 90 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 177 172 179 73 84 75 151 28 18 10 216 37 121 145 34 87 42 111 220 184 38 196 67 115 107 194 191 46 80 90 251 20 194 118 142 67 1 37 67 180 161 226 69 244 232 183 123 195 116 204 34 215 180 148 0 2 247 77 237 191 180 183 68 36 107 205 95 69 59 209 68 206 67 18 115 23 130 139 105 180 43 203 153 30 172 114 27 38 77 113 31 177 49 221 251 81 97 2 83 166 170 245 73 44 5 120 69 165 47 137 206 231 153 231 254 140 226 87 63 61 198 146 220 74 248 123 51 228 121 10 251 240 117 136 65 156 255 197 3 81 153 170 215 108 159 147 105 135 101 41 131 133 194 96 20 196 200 201 59 20 218 192 129 240 31 13 116 222 146 34 171 202 247 251 116 124 39 230 247 74 27 127 167 195 158 45 174 138 234 166 230 170 39 22 125 97 247 152 113 17 188 226 80 161 75 229 93 250 229 14 167 44 159 170 101 32 211 216 150 232 200 124 165 78 72 68 255 25 226 68 7 146 11 215 104 132 128 93 106 120 100 69 205 96 70 126 84 193 19 124 197 121 241 201 193 113 2 3 1 0 1 163 129 250 48 129 247 48 29 6 3 85 29 14 4 22 4 20 95 154 245 110 92 204 204 116 154 212 221 125 239 63 219 236 76 128 46 221 48 50 6 8 43 6 1 5 5 7 1 1 4 38 48 36 48 34 6 8 43 6 1 5 5 7 48 1 134 22 104 116 116 112 58 47 47 111 99 115 112 46 116 104 97 119 116 101 46 99 111 109 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 63 6 3 85 29 31 4 56 48 54 48 52 160 50 160 48 134 46 104 116 116 112 58 47 47 99 114 108 46 116 104 97 119 116 101 46 99 111 109 47 84 104 97 119 116 101 84 105 109 101 115 116 97 109 112 105 110 103 67 65 46 99 114 108 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 84 105 109 101 83 116 97 109 112 45 50 48 52 56 45 49 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 3 9 155 143 121 239 127 89 48 170 239 104 181 250 227 9 29 187 79 130 6 93 55 95 166 82 159 22 141 234 28 146 9 68 110 245 109 235 88 124 48 232 249 105 141 35 115 11 18 111 71 169 174 57 17 248 42 177 155 176 26 195 142 235 89 150 0 173 206 12 77 178 208 49 166 8 92 42 122 252 226 122 29 87 76 168 101 24 233 121 64 98 37 150 110 199 199 55 106 131 33 8 142 65 234 221 217 87 63 29 119 73 135 42 22 6 94 166 56 106 34 18 163 81 25 131 126 182 48 130 4 144 48 130 3 249 160 3 2 1 2 2 16 27 9 59 120 96 150 218 55 187 164 81 148 70 200 150 120 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 30 23 13 48 54 49 49 48 56 48 48 48 48 48 48 90 23 13 50 49 49 49 48 55 50 51 53 57 53 57 90 48 129 202 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 58 48 56 6 3 85 4 11 19 49 40 99 41 32 50 48 48 54 32 86 101 114 105 83 105 103 110 44 32 73 110 99 46 32 45 32 70 111 114 32 97 117 116 104 111 114 105 122 101 100 32 117 115 101 32 111 110 108 121 49 69 48 67 6 3 85 4 3 19 60 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 32 45 32 71 53 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 175 36 8 8 41 122 53 158 96 12 170 231 75 59 78 220 124 188 60 69 28 187 43 224 254 41 2 249 87 8 163 100 133 21 39 245 241 173 200 49 137 93 34 232 42 170 166 66 179 143 248 185 85 183 177 183 75 179 254 143 126 7 87 236 239 67 219 102 98 21 97 207 96 13 164 216 222 248 224 195 98 8 61 84 19 235 73 202 89 84 133 38 229 43 143 27 159 235 245 161 145 194 51 73 216 67 99 106 82 75 210 143 232 112 81 77 209 137 105 123 199 112 246 179 220 18 116 219 123 93 75 86 211 150 191 21 119 161 176 244 162 37 242 175 28 146 103 24 229 244 6 4 239 144 185 228 0 228 221 58 181 25 255 2 186 244 60 238 224 139 235 55 139 236 244 215 172 242 246 240 61 175 221 117 145 51 25 29 28 64 203 116 36 25 33 147 217 20 254 172 42 82 199 143 213 4 73 228 141 99 71 136 60 105 131 203 254 71 189 43 126 79 197 149 174 14 157 212 209 67 192 103 115 227 20 8 126 229 63 159 115 184 51 10 207 93 63 52 135 150 138 238 83 232 37 21 2 3 1 0 1 163 130 1 91 48 130 1 87 48 15 6 3 85 29 19 1 1 255 4 5 48 3 1 1 255 48 49 6 3 85 29 31 4 42 48 40 48 38 160 36 160 34 134 32 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 112 99 97 51 46 99 114 108 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 61 6 3 85 29 32 4 54 48 52 48 50 6 4 85 29 32 0 48 42 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 29 6 3 85 29 14 4 22 4 20 127 211 101 167 194 221 236 187 240 48 9 243 67 57 250 2 175 51 49 51 48 109 6 8 43 6 1 5 5 7 1 12 4 97 48 95 161 93 160 91 48 89 48 87 48 85 22 9 105 109 97 103 101 47 103 105 102 48 33 48 31 48 7 6 5 43 14 3 2 26 4 20 143 229 211 26 134 172 141 142 107 195 207 128 106 212 72 24 44 123 25 46 48 37 22 35 104 116 116 112 58 47 47 108 111 103 111 46 118 101 114 105 115 105 103 110 46 99 111 109 47 118 115 108 111 103 111 46 103 105 102 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 163 205 125 30 247 199 117 141 72 231 86 52 76 0 144 117 169 81 165 86 193 109 188 254 245 83 34 233 152 162 172 154 126 112 30 179 142 59 69 227 134 149 49 218 109 76 251 52 80 128 150 205 36 242 64 223 4 63 226 101 206 52 34 97 21 234 102 112 100 210 241 110 243 202 24 89 106 65 70 126 130 222 25 176 112 49 86 105 13 12 230 29 157 113 88 220 204 222 98 245 225 122 16 2 216 122 220 59 250 87 189 201 233 143 70 33 57 159 81 101 76 142 58 190 40 65 112 29 48 130 4 163 48 130 3 139 160 3 2 1 2 2 16 14 207 244 56 200 254 191 53 110 4 216 106 152 27 26 80 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 48 30 23 13 49 50 49 48 49 56 48 48 48 48 48 48 90 23 13 50 48 49 50 50 57 50 51 53 57 53 57 90 48 98 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 52 48 50 6 3 85 4 3 19 43 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 83 105 103 110 101 114 32 45 32 71 52 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 162 99 11 57 68 184 187 35 167 68 73 187 14 255 161 240 97 10 83 147 176 152 219 173 44 15 74 197 110 255 134 60 83 85 15 21 206 4 63 43 253 169 150 150 217 190 97 121 11 91 201 76 134 118 229 224 67 75 34 149 238 194 43 67 193 159 216 104 180 142 64 79 238 133 56 185 17 197 35 242 100 88 240 21 50 111 78 87 161 174 136 164 2 215 42 30 205 75 225 221 99 213 23 137 50 91 176 94 153 90 168 157 40 80 14 23 238 150 219 97 59 69 81 29 207 18 86 11 146 71 252 171 174 246 102 61 71 172 112 114 231 146 231 95 205 16 185 196 131 100 148 25 189 37 128 225 232 210 34 165 208 186 2 122 161 119 147 91 101 195 238 23 116 188 65 134 42 220 8 76 140 146 140 145 45 158 119 68 31 104 214 168 116 119 219 14 91 50 139 86 139 51 189 217 99 200 73 157 58 197 197 234 51 11 210 241 163 27 244 139 190 217 179 87 139 59 222 4 167 122 34 178 36 174 46 199 112 197 190 78 131 38 8 251 11 189 169 79 153 8 225 16 40 114 170 205 2 3 1 0 1 163 130 1 87 48 130 1 83 48 12 6 3 85 29 19 1 1 255 4 2 48 0 48 22 6 3 85 29 37 1 1 255 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 7 128 48 115 6 8 43 6 1 5 5 7 1 1 4 103 48 101 48 42 6 8 43 6 1 5 5 7 48 1 134 30 104 116 116 112 58 47 47 116 115 45 111 99 115 112 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 48 55 6 8 43 6 1 5 5 7 48 2 134 43 104 116 116 112 58 47 47 116 115 45 97 105 97 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 47 116 115 115 45 99 97 45 103 50 46 99 101 114 48 60 6 3 85 29 31 4 53 48 51 48 49 160 47 160 45 134 43 104 116 116 112 58 47 47 116 115 45 99 114 108 46 119 115 46 115 121 109 97 110 116 101 99 46 99 111 109 47 116 115 115 45 99 97 45 103 50 46 99 114 108 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 84 105 109 101 83 116 97 109 112 45 50 48 52 56 45 50 48 29 6 3 85 29 14 4 22 4 20 70 198 105 163 14 74 20 30 213 76 218 82 99 23 63 94 54 188 13 230 48 31 6 3 85 29 35 4 24 48 22 128 20 95 154 245 110 92 204 204 116 154 212 221 125 239 63 219 236 76 128 46 221 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 120 59 180 145 42 0 76 240 143 98 48 55 120 163 132 39 7 111 24 178 222 37 220 160 212 148 3 170 134 78 37 159 154 64 3 28 221 206 227 121 203 33 104 6 218 182 50 180 109 191 244 44 38 99 51 228 73 100 109 13 230 195 103 14 247 5 164 53 108 124 137 22 198 233 178 223 178 233 221 32 198 113 15 205 149 116 220 182 92 222 189 55 31 67 120 230 120 181 205 40 4 32 163 170 241 75 196 136 41 145 14 128 209 17 252 221 92 118 110 79 94 14 69 70 65 110 13 176 234 56 154 177 58 218 9 113 16 252 28 121 180 128 123 172 105 244 253 156 182 12 22 43 241 127 91 9 61 155 91 226 22 202 19 129 109 0 46 56 13 168 41 143 44 225 178 244 90 169 1 175 21 156 44 47 73 27 219 34 187 195 254 120 148 81 195 134 177 130 136 93 240 61 180 81 161 121 51 43 46 123 185 220 32 9 19 113 235 106 25 91 207 232 165 48 87 44 137 73 63 185 207 127 201 191 62 34 104 99 83 154 189 105 116 172 197 29 60 127 146 224 195 188 28 216 4 117 48 130 5 144 48 130 4 120 160 3 2 1 2 2 16 116 37 83 173 7 228 175 209 21 4 175 152 77 73 237 104 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 48 30 23 13 49 50 48 57 49 56 48 48 48 48 48 48 90 23 13 49 51 48 57 49 56 50 51 53 57 53 57 90 48 129 211 49 11 48 9 6 3 85 4 6 19 2 85 83 49 19 48 17 6 3 85 4 8 19 10 67 97 108 105 102 111 114 110 105 97 49 17 48 15 6 3 85 4 7 19 8 83 97 110 32 74 111 115 101 49 35 48 33 6 3 85 4 10 20 26 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 49 18 48 16 6 3 85 4 11 20 9 84 121 112 101 32 70 111 110 116 49 62 48 60 6 3 85 4 11 19 53 68 105 103 105 116 97 108 32 73 68 32 67 108 97 115 115 32 51 32 45 32 77 105 99 114 111 115 111 102 116 32 83 111 102 116 119 97 114 101 32 86 97 108 105 100 97 116 105 111 110 32 118 50 49 35 48 33 6 3 85 4 3 20 26 65 100 111 98 101 32 83 121 115 116 101 109 115 32 73 110 99 111 114 112 111 114 97 116 101 100 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 183 194 17 83 93 40 162 97 211 4 212 113 190 60 57 62 90 192 30 28 186 237 226 148 195 199 56 131 193 235 45 107 15 74 184 138 39 255 23 21 5 202 222 234 75 161 119 146 100 14 79 246 242 211 246 6 190 153 149 179 99 26 198 178 173 225 166 11 112 231 214 53 82 194 33 138 150 50 44 13 98 138 214 31 215 147 231 18 113 245 12 209 174 113 96 85 116 82 208 174 226 85 149 15 224 15 92 233 55 166 8 75 92 145 255 212 146 186 21 228 98 140 106 115 221 80 171 168 86 158 74 94 114 191 19 205 233 192 211 146 155 140 185 107 10 185 39 79 184 81 155 94 22 105 29 211 238 103 213 40 247 228 12 143 235 124 216 90 200 120 107 245 118 234 50 67 223 114 63 154 114 105 141 0 84 210 9 251 158 218 233 194 224 169 67 212 146 116 74 183 196 1 143 227 48 75 173 177 64 88 87 96 214 143 131 243 139 235 192 189 213 67 79 101 17 63 114 21 23 94 173 218 255 113 5 178 41 158 156 13 120 136 231 237 75 156 146 164 205 161 26 253 143 8 158 173 2 3 1 0 1 163 130 1 123 48 130 1 119 48 9 6 3 85 29 19 4 2 48 0 48 14 6 3 85 29 15 1 1 255 4 4 3 2 7 128 48 64 6 3 85 29 31 4 57 48 55 48 53 160 51 160 49 134 47 104 116 116 112 58 47 47 99 115 99 51 45 50 48 49 48 45 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 49 48 46 99 114 108 48 68 6 3 85 29 32 4 61 48 59 48 57 6 11 96 134 72 1 134 248 69 1 7 23 3 48 42 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 3 48 113 6 8 43 6 1 5 5 7 1 1 4 101 48 99 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 59 6 8 43 6 1 5 5 7 48 2 134 47 104 116 116 112 58 47 47 99 115 99 51 45 50 48 49 48 45 97 105 97 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 49 48 46 99 101 114 48 31 6 3 85 29 35 4 24 48 22 128 20 207 153 169 234 123 38 244 75 201 142 143 215 240 5 38 239 227 210 167 157 48 17 6 9 96 134 72 1 134 248 66 1 1 4 4 3 2 4 16 48 22 6 10 43 6 1 4 1 130 55 2 1 27 4 8 48 6 1 1 0 1 1 255 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 170 104 97 189 175 221 82 2 196 142 65 165 125 111 136 158 190 254 185 203 183 107 237 194 56 101 27 98 49 68 219 155 173 57 51 191 133 148 255 108 0 249 186 148 148 160 155 91 231 79 31 45 3 89 224 227 162 221 99 214 188 229 43 116 1 123 45 164 0 116 54 219 94 146 153 155 248 123 23 185 191 221 56 76 230 44 132 250 78 42 218 16 153 213 244 141 149 129 51 237 100 15 155 72 68 34 52 95 7 99 113 219 104 204 209 81 255 56 223 218 232 14 179 193 234 37 175 8 179 12 157 202 48 147 202 12 126 221 59 128 216 35 162 10 213 22 37 220 12 218 219 221 50 3 181 155 31 250 209 82 249 217 154 42 16 62 140 177 151 27 65 46 169 31 1 47 111 73 9 220 108 183 43 206 127 216 47 220 204 125 246 105 30 223 148 29 201 197 118 165 226 247 52 43 118 211 244 46 62 20 226 234 106 65 242 223 237 127 14 47 220 238 174 246 5 108 10 64 64 241 79 33 138 131 131 164 182 142 7 103 21 115 212 6 96 220 196 218 25 139 75 40 53 182 193 225 48 130 6 10 48 130 4 242 160 3 2 1 2 2 16 82 0 229 170 37 86 252 26 134 237 150 201 212 75 51 199 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 202 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 58 48 56 6 3 85 4 11 19 49 40 99 41 32 50 48 48 54 32 86 101 114 105 83 105 103 110 44 32 73 110 99 46 32 45 32 70 111 114 32 97 117 116 104 111 114 105 122 101 100 32 117 115 101 32 111 110 108 121 49 69 48 67 6 3 85 4 3 19 60 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 32 45 32 71 53 48 30 23 13 49 48 48 50 48 56 48 48 48 48 48 48 90 23 13 50 48 48 50 48 55 50 51 53 57 53 57 90 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 245 35 75 94 165 215 138 187 50 233 212 87 247 239 228 199 38 126 173 25 152 254 168 157 125 148 246 54 107 16 215 117 129 48 127 4 104 127 203 43 117 30 205 29 8 140 223 105 148 167 55 163 156 123 128 224 153 225 238 55 77 95 206 59 20 238 134 212 208 245 39 53 188 37 11 56 167 140 99 157 23 163 8 165 171 176 251 205 106 98 130 76 213 33 218 27 217 241 227 132 59 138 42 79 133 91 144 1 79 201 167 118 16 127 39 3 124 190 174 126 125 193 221 249 5 188 27 72 156 105 231 192 164 60 60 65 0 62 223 150 229 197 228 148 113 214 85 1 199 0 38 74 64 60 181 161 38 169 12 167 109 128 142 144 37 123 207 191 63 28 235 47 150 250 229 135 119 198 181 86 178 122 59 84 48 83 27 223 98 52 255 30 209 244 90 147 40 133 229 76 23 78 126 91 253 164 147 153 127 223 205 239 164 117 239 239 21 246 71 231 248 25 114 216 46 52 26 166 180 167 76 126 189 187 79 12 61 87 241 48 214 166 54 142 214 128 118 215 25 46 165 205 126 52 45 137 2 3 1 0 1 163 130 1 254 48 130 1 250 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 112 6 3 85 29 32 4 105 48 103 48 101 6 11 96 134 72 1 134 248 69 1 7 23 3 48 86 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 42 6 8 43 6 1 5 5 7 2 2 48 30 26 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 109 6 8 43 6 1 5 5 7 1 12 4 97 48 95 161 93 160 91 48 89 48 87 48 85 22 9 105 109 97 103 101 47 103 105 102 48 33 48 31 48 7 6 5 43 14 3 2 26 4 20 143 229 211 26 134 172 141 142 107 195 207 128 106 212 72 24 44 123 25 46 48 37 22 35 104 116 116 112 58 47 47 108 111 103 111 46 118 101 114 105 115 105 103 110 46 99 111 109 47 118 115 108 111 103 111 46 103 105 102 48 52 6 3 85 29 31 4 45 48 43 48 41 160 39 160 37 134 35 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 112 99 97 51 45 103 53 46 99 114 108 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 29 6 3 85 29 37 4 22 48 20 6 8 43 6 1 5 5 7 3 2 6 8 43 6 1 5 5 7 3 3 48 40 6 3 85 29 17 4 33 48 31 164 29 48 27 49 25 48 23 6 3 85 4 3 19 16 86 101 114 105 83 105 103 110 77 80 75 73 45 50 45 56 48 29 6 3 85 29 14 4 22 4 20 207 153 169 234 123 38 244 75 201 142 143 215 240 5 38 239 227 210 167 157 48 31 6 3 85 29 35 4 24 48 22 128 20 127 211 101 167 194 221 236 187 240 48 9 243 67 57 250 2 175 51 49 51 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 86 34 230 52 164 196 97 203 72 185 1 173 86 168 100 15 217 140 145 196 187 204 12 229 173 122 160 34 127 223 71 56 74 45 108 209 127 113 26 124 236 112 169 177 240 79 228 15 12 83 250 21 94 254 116 152 73 36 133 129 38 28 145 20 71 176 76 99 140 187 161 52 212 198 69 232 13 133 38 115 3 208 169 140 100 109 220 113 146 230 69 5 96 21 89 81 57 252 88 20 107 254 212 164 237 121 107 8 12 65 114 231 55 34 6 9 190 35 233 63 68 154 30 233 97 157 204 177 144 92 252 61 210 141 172 66 61 101 54 212 180 61 64 40 143 155 16 207 35 38 204 75 32 203 144 31 93 140 76 52 202 60 216 229 55 214 111 165 32 189 52 235 38 217 174 13 231 197 154 247 161 180 33 145 51 111 134 232 88 187 37 124 116 14 88 254 117 27 99 63 206 49 124 155 143 27 150 158 197 83 118 132 91 156 173 145 250 172 237 147 186 93 200 33 83 194 130 83 99 175 18 13 80 135 17 27 61 84 82 150 138 44 156 61 146 26 8 154 5 46 199 147 165 72 145 211 49 130 4 155 48 130 4 151 2 1 1 48 129 201 48 129 180 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 49 48 49 46 48 44 6 3 85 4 3 19 37 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 49 48 32 67 65 2 16 116 37 83 173 7 228 175 209 21 4 175 152 77 73 237 104 48 9 6 5 43 14 3 2 26 5 0 160 129 152 48 20 6 9 43 6 1 4 1 130 55 40 1 49 7 3 5 0 3 0 0 0 48 25 6 9 42 134 72 134 247 13 1 9 3 49 12 6 10 43 6 1 4 1 130 55 2 1 4 48 28 6 10 43 6 1 4 1 130 55 2 1 11 49 14 48 12 6 10 43 6 1 4 1 130 55 2 1 21 48 34 6 10 43 6 1 4 1 130 55 2 1 12 49 20 48 18 161 16 128 14 119 119 119 46 97 100 111 98 101 46 99 111 109 32 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 239 26 40 54 240 19 227 167 63 249 12 204 40 229 31 250 65 101 168 31 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 130 1 0 92 148 252 160 237 142 226 134 113 166 227 177 238 184 113 95 129 229 2 8 22 28 87 211 142 196 151 218 150 40 0 244 116 209 96 127 12 46 111 123 215 43 78 17 76 210 247 127 22 7 24 13 231 173 207 67 122 24 0 219 135 201 54 65 167 47 201 124 235 128 8 120 137 133 103 62 49 209 118 164 110 224 60 87 43 40 9 89 157 24 54 40 224 73 237 99 12 250 159 199 121 5 119 123 117 246 244 21 41 42 229 54 15 118 142 88 122 140 32 219 100 64 250 110 157 28 75 72 97 231 141 120 182 161 66 7 44 227 124 143 130 229 83 62 59 228 168 64 245 128 248 92 63 202 138 84 106 192 58 105 193 128 173 18 167 8 1 80 123 92 17 46 148 238 197 233 230 62 158 125 51 8 201 146 40 44 115 63 69 107 187 9 137 129 163 200 164 134 200 215 28 62 153 117 104 123 201 140 13 28 90 250 86 201 134 57 57 19 217 27 7 210 248 19 19 230 49 84 208 35 99 106 67 204 51 2 226 228 140 203 255 124 197 62 95 95 37 151 225 54 81 196 79 66 82 198 161 130 2 11 48 130 2 7 6 9 42 134 72 134 247 13 1 9 6 49 130 1 248 48 130 1 244 2 1 1 48 114 48 94 49 11 48 9 6 3 85 4 6 19 2 85 83 49 29 48 27 6 3 85 4 10 19 20 83 121 109 97 110 116 101 99 32 67 111 114 112 111 114 97 116 105 111 110 49 48 48 46 6 3 85 4 3 19 39 83 121 109 97 110 116 101 99 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 32 45 32 71 50 2 16 14 207 244 56 200 254 191 53 110 4 216 106 152 27 26 80 48 9 6 5 43 14 3 2 26 5 0 160 93 48 24 6 9 42 134 72 134 247 13 1 9 3 49 11 6 9 42 134 72 134 247 13 1 7 1 48 28 6 9 42 134 72 134 247 13 1 9 5 49 15 23 13 49 51 48 52 50 48 50 51 49 50 51 53 90 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 188 31 20 21 192 69 123 177 179 125 96 116 11 8 33 137 251 148 9 13 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 130 1 0 27 240 36 109 63 110 145 42 205 70 189 53 239 88 52 19 113 85 236 254 140 63 114 22 188 92 182 153 63 167 99 111 215 13 173 108 51 5 20 254 126 46 168 58 107 252 43 178 113 2 243 71 226 170 175 4 199 167 188 117 195 238 111 192 145 53 23 199 26 124 245 161 224 16 79 233 192 39 79 207 78 242 63 48 79 2 125 115 134 208 115 40 28 72 148 166 33 224 234 62 191 170 227 25 100 16 191 215 92 125 108 68 201 74 152 178 78 222 245 134 129 246 177 213 149 21 177 211 231 94 154 153 126 231 114 66 91 242 211 31 1 119 65 47 223 109 71 117 98 38 196 0 142 245 75 170 167 115 73 205 65 69 228 154 176 154 10 129 54 21 167 56 168 93 146 46 252 81 206 181 239 234 145 10 190 45 249 148 54 28 168 47 151 42 65 101 249 102 161 108 200 135 247 86 4 134 104 46 222 58 125 89 152 68 142 98 8 95 232 185 34 190 121 230 47 206 184 232 39 218 180 232 135 20 57 102 108 202 94 59 153 223 36 19 103 230 123 119 89 188 252 204 4 41 74 135]! ! !SourceSansProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:46'! install FreeTypeFontProvider current addFromFileContents: self fontContents baseName: self originalFileName! ! !SourceSansProRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 12:46'! originalFileName ^ 'SourceSansPro-Regular.ttf'! ! !EclipseUIThemeIcons commentStamp: '' prior: 70149913! An icon set pack taken from eclipse.! !EclipseUIThemeIcons class methodsFor: 'license' stamp: 'EstebanLorenzano 6/21/2013 11:18'! LICENSE ^ ' The icon pack itself is distributed under MIT license. The eclipse icons, however, have their own open source license terms, the EPL, who can be found here: http://www.eclipse.org/legal/epl-v10.html '! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! backIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0jh5ZIkdgCdpvADAHyknkFg4Ol6PcSMACEoCAwHRKHR0Ag5DMZi IY8T6IyNcDRRKPp9fhODGEMkEhEJiBGMEo4kRCEWEA8gIZYhmUYiDhUiUkIlFCWgQiYmpaml QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! bundle_exporterIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAAAAP///z8/X6CgpACAAD+/Pz+fPz9fP8DcwL+/f9/fv//ff/+/P9+f P79/P39fP18/P////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAAAEALAAAAAAQABAAAAVoYCCOZGmK0FkqziM8jqImT8NAS/MkpvIsDB1jCJGRHLbg Y9hwOErLRjPqTI0gAshj+0IgIACr6Ddk/AgEA6KEZC4JhUJ6LfIFhfC43DBKQKoNeXEEByQs YBB5hAMqKWgHjCojA5GSliEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:04'! changeAddIcon ^ self smallOkIcon! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:04'! changeRemoveIcon ^ self smallCancelIcon! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! changeSorterIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAI5GlKZ5qm92hGV9lFyFpU6PvVSLs01aXRuGe0WTiHipov///wAAAAAA AAAAAAAAACH5BAEAAAsALAAAAAAQABAAAARGcMlJq10KoaRumUi3XYY1WiWWbGeVrlJLvQgm T6mysgl6/YQLYEiUDISARWAoEVwCSqZgOrUsoZKD4GBlKrNISQD7Gy6HEQA7'! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 9/19/2013 13:04'! changeUpdateIcon ^ self smallForwardIcon! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 17:06'! classIcon ^ icons at: #'classIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self classIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! classIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGyogTOCTTaDT0CJWEKLWkaPXlSYalqbcFyccX6zkIG1ks3i1CR2Pi58 RjOBSzmGUFicbV2ecWOid6LJri18RC59RS99RjB+RjOBSUuSYEqQXneuh9jp3TKARzaESjuH Tz+JUo69mj6ITz6IUD6HUEaOV0ePWFKWYmuneo++msPdyeLv5VKWYFaaZFaZZF2caqvPs7zY wlSXYVeZZFiZZF6catrq3ebx6FKWXvH38mCgaXyyhHmugYW4jIy8k/D38VmZYWikb2GgZ2Ce Zp7Godzq3Weiam2mcHeueICzgHuxenmud4e4hYGzfeHv4JG+jLPSsLzZub7au5/HmqDHm7vY t8Lcv8bew7DQq////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFoALAAAAAAQABAAAAengFqCWgsRGQ8aEQuDjFoK D0FIkkEBCo2OHU1YVldWVEkMloMLD0tSWaioUUoBi4IHQlOoVU9QWU5MQhKDBThEWUVDwkdG RkAFgwEXKVkqFRQUFRgeIg68HxtZKyAkJBMwECbIghIjNTlZMSghWT8vLACDHAwyPDapNz40 DK6CCQ0ldOzosUPHDAEJLiWwcKKFixYnLCS8RMjAAAIDEPSjyLGjx4+NAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! configurationIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJKAiruyu4t8jYR5j4B2kXZxlXGFrH2RuX6RuYaawmJ3nWN3nHGFq4uW q1Vrj1Zrj/v9//j8//r9//H6//T7//f8/+35//D6//P7//b8//n9//z+/+z5/+/6//L7/9Xz /+v5/+76//H7//X8//j9/+z6//T8/+77//P8//f9//v+//b9//r+//n+/////////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC8ALAAA AAAQABAAAAaOwFdjSCwahZ+kcqlsIEGAKGhKnTobH0DAFQBwOKXSt3T9CFxogSWBYCweoTJh GyB0Oqf7vTwp+EWAExciFxdlHogYGB4oih6KZSZRACMjJiMUlyZlWlwAKxkrFSkVGWVnAy4C JAkHBgoOEXJ0BC0sEhq3EmUQfgUQECrCwhBlG8fIycdXRs1EL9DR0tMvQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! confirmIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQaAPb9/wJGjA5ipFWQv7bQ5MfU0PT7/5a2xff8//j9//r9//f9//z+//X8 //3+//n9/+zy9fb8/whUmPv+/wxcn/Lz9e3y9f7+/wtdn/Hy9f///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAWIoCaOZFkWgxAEwlCY2hEMRJURQ3CUh0A4AIEAcCEIdqJC 4AcIDgEOQuClGQwYTQC2yWBYRT5FU/icTIyiAOTxEAubCoUlkIYk7gAKBvC4Q+gaPggICwAS EgsLhGhVA4MIACsNABEIXxpKBA0NKysRDVJUMT4GpaZGSCMyNKU4OjAoKiwuMLUlIQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:44'! dirtyMonticelloPackageIcon ^ icons at: #'dirtyMonticelloPackageIcon' ifAbsentPut:[ (self monticelloPackageIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self overlayDirtyIconContents readStream)) ].! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:24'! dirtyPackageIcon ^ icons at: #'dirtyPackageIcon' ifAbsentPut:[ (self packageIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self overlayDirtyIconContents readStream)) ].! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:38'! emptyPackageIcon ^ icons at: #'emptyPackageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self emptyPackageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! emptyPackageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEWen39fXz9/f1+CgmKF hWWIiGiMjG2RkXKlpYWyspK5uZnDw6PS0rKbmnqjooO+vZ3x7sL///8AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKdzybAAAAEnRSTlP///////////////// /////wDiv78SAAAAAWJLR0QfBQ0QvQAAAAlwSFlzAAAASAAAAEgARslrPgAAAGVJREFUGNN1 j1sOgDAIBAH7oi/1/pe1W4xRk+7HkEzKhtL5Cy0Fv4SmEQHURNpLUQGSiV6OmgXoJqhUiAEy 0TRnZaBNwTLCbGO+iOhjINpKeEqDCf+UehMOfQK4+7BtRIC0+MsnF+ymDJF0K83MAAAAAElF TkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! forwardIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0ji5ZIsdgCd5vADAHyMnqzWMwgMPERNo1FAHAyCggAhyAw3DMaC EF/I7QyOEDPpK/4TCoGCI0IkEogRihESCYwkRCGSISCUDxAWIVIiFQ4iUiclFCWgJyYmpalS QQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 10/4/2013 15:55'! groupIcon ^ icons at: #'groupIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self groupIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 10/4/2013 15:57'! groupIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAALC91117rl99sF99r2OBs2OBsmeFtmeFtWuJuW+NvW+NvHORwGuKunOR v3WTwbzF0uPr8t7o8N7o79fk7M/f6Mba487f573V37fR277V3rfR2p27tWmdi2eaiWygjmyg jWmciqnNwG+kkHKpk3Opk3aulnmymXy1nHy2nHmymH64nbXMlb3Rl8bWmMfWmdDcm9nhneHm nuDlnubpoLeTJLmWJbuYJtC7eq6HH7GLIbSPIreSJPzejfzejvzhmf3mqPzmqP3qt/zqt/7v xv3uxf7y0v7z0v712qmBHKmAHauDHquEHq6HIP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAE0ALAAAAAAQABAAAAeZgE2Cg4SFhoeIiYQhKioh TTc2NjdNDw4OD4InMzMoTTZHRzZNDhAQDoImMTIpTTVGRTVNCxESDYIlMDAlTTtEQzRNChMT CYIjLy8kTTpCQTpNDBYUCIIiLS4iTTlAPzlNBhUVB4IfLCweTTg+PkxNBBcZBYIgKyscTUs9 PEpNAxgaBAja0KHDBkhIklACECAAAEUQI0qcWCgQADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! helpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAP78/f7+//Lz9/Hy9vv8/46Zr/z9/4+arpKdr7W9yvf6/9zj7cvT3tzk 79vj7rO9ybS+ytrk8Cphl1N/rJaxzKO706K60o2esLO9x9vl79rk7tnj7dzl7tvk7fn8//3+ /yZimClimShhlilil0Z1oU9/rVGAqlB/qVJ/qFOAqV6KsW2Tt3icvpSz0JSyzpWzz6G71Nvl 7trk7SZilidjlyhkmCdjlShilCljlU2Aq0+Aq1CBrE+AqFCAqFyJsGmUt5SyzJWzzZezy5ay yiZjkk2BqU+Bpl2NsZSyytvk69rj6ufw9/b7/62xtPj8//f7/u7y9ZOzypSzyNnm79jl7tvm 7Obv9Kuws/f8//n9//j9//b9//X9//T8/ury9Pr+//n9/vj8/fb+//T+//L8/fj+/vf9/ezy 8vz//6iysfv//vj8+6izr/3//v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAG4ALAAAAAAQABAAAAfLgG6Cg4SFhR1DOSMSOkML hm4QOkIdAgMyQjsJhQ8ISQFaY1pcAA0XGINVJxpoGyQhIjYOAR0mj25AFG1PRzYrQDc4WGpS LYI9VAYEFSxaWCYzWB9KE4IjZ1oeWV9aKiIqBltQN4I2Xk5lYlg+Nz8EYmtnNYImEQpOXGBE IFphZh4MSgiKQgHLEy1ZYFjoIoYLliBIBGXgMYUJEyzBulikYiTGoCYFOjDUIoYJGQ4HrhRi U8RFgyVWOLzIkQaSBiApaNBAMcQjpJ+EAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:21'! homeIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAACM+gCdBhNre6BM0fC5NjxI0fCE/fV17r9ne505upU9uo1Z1qld3qlh3 qlt6rlt6rVt6rF59sF58r2KCtWOCtdje5yJHeSBHednh69fe59be5+30/PL4/+bx++f0/+Xx +8zX4Ov2//H5//j8/+Dw+yRTciVUct/y/uT0/ef2//X6/eL1/+v3/eb3/+b4//T8/y1kbClh Zv7//zt/ZDZ6XTyFYD2GXzmEW2JmYWdtZWzBOmhtZW9za7reHWVmX+3rAvPzBWhoXJOTg66r cpOPW66qc//7zpOSg396TWhmW//1v5SRgZSQgP/yv//qqv/srXJtXJiTgm5pWp2Te5mRfv/e lv/fmJ6VgP/Pc6KVfP/PdP/Ug6WVeaSVeqGTeaaWe54/NaBCN59FOv///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGQALAAAAAAQABAAAAewgGSCg4SFhWJFgl+GhUNg ZF1GXIyDYURZSlBNXpRkSFdPUhhSTlOUUVZBFWMVSVVUhktbPgJjtgI+W0yER1g4CGM3NTdj CDhaQoM8Oxm2Nj82tho5PIQFIDJjNDM0YzIgA4UEYyojtmMjKmMEhQovGyIxMDEcGy8JhRMs HyEmQCUhOrCgUCgCChIeLPS4kIIECgmFIKw40cKADgMuTqxwUOgBgwUHAAQAcGBBAwiCAgEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! imageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! jmeth_objIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGiUxXSdyYKn0Ims04uu1Nfj8d7o8+Ts9UV9tE2DuEt/s06DuE2AtFGG u06BtVKGulOHu1OGuV2Ov2CRwl+PwGKSw2GRwmSTw2aUxGaUw26byG6ax3ahzHukzn6mzn2l zYKoz4is0pGz1pO015a215e215q52qjB26nC26vE3bHI4LzR5tzm8OXt9U6CtE+DtVKIulWK vFWJu1aKvFeLu1uOvl2PvmKUw1+QvmGSwKrD27DI37LK4N/p8qbE3sfa6v///////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAQABAAAAefgEGCg4SFhj8DFRMWAz+G giQTGgKUGhMkhiQ0ICY+niYgNJiDBQ0dLR2pqS0eDQWDAxsrQAcctgdAKwEigxc1KkBAPRQ9 wTs2F4MQDCdADixALA5AJwoPvTAoQC8vLNzULsmCIjMpQBHo6EA6MiWDBgg5PTn09Dw3CK+D IwkAH///cMQYYWjEAgwZEmJYQPDRjxASYEgg4OiRxYsYgwQCADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! jumpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! lockIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPz8/v39/mh2kqSwyPj6/l54qGN8qGqAqGqAp36TuZipx6260rrH3+Hp +OHp92J8qHKGp3uMp3yMp6Sxx97o+ODp+N/o9+fu+vT3/EtuonKHp3uNp3yNp/L2/Pj6/YST p2x2g4STpouXpuTt+Obu+Orx+vH2/PD1+/P3/PL2+4uYpujw+e3z+pCbpvX5/ff6/fb5/Pn7 /XqBhc/t++H0/fv9/f3+/sPEu7m3qKCYbJuVcKyoj6ecaKSaapWQdf3zy/Tmtv3vvf3wwv3y x/3yyf3zzraSJPXaiPzhj/zkmvzmnvzmn/zmoOXgz7GLIbSPI8GeOKaJOMekRbiZRNi9bfDX jtnEh+XRldzPrHhbE6d+HK6GH6uDH8WwfdLAlNHBm8Kqc8m2idbLstnQvPPt4f///////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGYALAAAAAAQABAAAAfPgGaCg4SFgzyIiYqKgj0z j5CPPJA8gjkzI5maIz4zGQw+gjozJKWmJDIzHSkygjszK7GyKwK1tYI4NCa7JiW+IAMTEyCC N2FQUF8YGCwsLQ4NFS2CYFJkZFJeLi4nKhYWFCJmYkZYZWVjRk0vKCEzFxcfZl1aYV1dYVpd MTAbERIcIph5gqSIFSA/ljypEUMDJAhmnAwREmVKECZOAgA44IkBAjNbiFzJkuWKki02bDyY 4YGAATNcqiShQiXJES4LFCQowLPAPC1Ag3YxZCYQADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! logical_package_objIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPbpu/PhsvXjtfDesu7br+zZrsGYRPLaquzXrubTrPDo2Pjw4Pjy5uzR pezSpuzTqOjMoefLoOzQpefLoeXLo+DDnOHFnuPHoODEnt7Dn93CnvPr4MWDMty/mti7mPPq 38F6Lb13LNS0kde3lNm6l9e5lrpxKtOyj9Gwj9S0kte3lfDo4Ojg2KZeI5NVH6phJLBmJ8qm h6JZInE8F3A2F55wWHlPQMCooP///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaEQJxwSCwai7MjEcQEuZqgIwjgKNUIAUzUaHhARrWJpBI6zjYf1k1BQpmG0Gfz Vqu5krhp9ZoFMQoaMEMhXmBiZAsHFy9DJh4qMTYpbSYrFx0tQjMudTaedS40BjIcQzADESI2 CYCCRi8CDSQ1CIqMRi0UFic1GZeZRhwywy7DpEpDeEdBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/14/2013 14:52'! migrate16IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJBSURBVHjaxFNLTBNRFD1v5s2n ndLOYEdIC0U0IbYYwWATY0JC7ML4C0tBN7hw5dKNC/duWLjR+FkoidGFIXHBQle4MGKQiKL1 ExsjCgH6s9YZpu18nkUjATVx0YUnuS95ue+de/LOeYQxhkbAoUHQ1M2hf08hLud57FHFsW/J gu/yXxVogjPaLPPPNZnO+jj7wsZDHuM9kYo9AUm5VLLKXX8QhERuuUWLnh3YubcnFU/2duix c4rALWzWwd6fSqagB7R01iitk3BhCY/370i0nD88gmR7Gzo1EUN9fTjSnYz6BdEKiGLOLwi5 mKZ3JiIRjA6epJHglvSK8VMJOTg27F0dPkNEpxmLpY+49+o2Fr4uId6SgB6MYenbCgSOQvXL KBg56EoQIUXHtalpp2CtnqC25xEQP5r4MHycAZ+oYldUAwGPorkInlXhugz5MoPtuniXncc2 tYx9MZ0+/LB0kUo8z6xakUx+mkHeLGK73got0ApFkJHJZ/HFMuoucGgPaZAoj4BEkcktY+rN nGnY1aNUFbyJOzOTx9pUHtOfn2Kgqx8dzRGMz07hyXymQAgp1C0kTbKkjST7w5ZNcHcuba6Y hrpVaXLIgRvHEZZp2iN8gpIKJMEHo8ZQs2svTIf1/nptgcOzQ/Hde+6/TZuL5aKqKyHnR5DW lnzF6dYl+7QDfrBiW57j2uOrnji2yUSQ+MTrl6xUMdYvrxOsIVcl1+uRqRep78Tf8u5yrsce VG3nSlBSnI098t8/U8ME3wUYAEK92uxZ9EygAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/15/2013 21:09'! modifiedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QQGEA05RBIJeAAAAlBJREFUOMulk0tPU2EQ ht+vh1OgxXohJFAQLzQR8QZeEiHRQKKRoHHTuBC5/IL2z7B2wSUQF8QFKCaAGHAjC8MGNMRC aaFATJEWOLTnfDPjwliQxpDoLCfzPvNmLkpE8D9RcDQRD4drhLhdg7rEdsoZDBG9QeA+Fhq8 8nIocrheHXawGgoHNVOP73KgwltfD3XKB2QycDYT2JqYwI+t5DoJhRr6Xg/nAVZD4SAR9Z55 0Oz13rgOWloANuOAbUOVnIaqrkZy9C3i0W97TLr7ztDYcA4QC4UuCvFM6f1Gv+d2A2hqBNZ+ BoocFLpNKBaInQHqbuL7u3GsbsYSLPpe06v3Sy4AEOIOj7/UX3ytDjQ9Bsrug7MWTCsN3k6C 0lvgjAVnZhxlLS0ozmT9xNQBAC4AYEWd3qu14C9zx05dL0dQUd8EFt2Z2wIJVRZ4PMDiIrLR JViJbQCAc1TtcsFMOSi6dRc8pytzDsR2wOk0eCcFSmVhnjDzOpMISAxozYAArDRyABJa21+J Qrw+GCcL4ezk9YahFAxFcJ89h9TyMtjRawcA1v3J2VmIP3CsA/N8ALH5KbDo/oMhih7Y9RYl kh+mYLY+BmddUIbxSwgFIgG4AL7WJ1iZfINd20qQkoE/Dunzi6dBFt1bVlLqLWt5CDsagR2J gG1G4aUA3FUXEJ8cQTS5uMeKu9tGF4bzTvnT80dBJt3jJruiqrYR7nI/AMBKxBCZn4ZFmXVW HPotzgMAwMdnzTWinXZtcJcwlYvtQBu8IUx9rPVg29jXvz/Tv8RP+TtdwOVsP3gAAAAASUVO RK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 16:43'! monticelloPackageIcon ^ icons at: #'monticelloPackageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self monticelloPackageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! monticelloPackageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPPz9f//eurqw+npy/z4pP36v/780vnqefvwofz1vefhtP7hNPLYSPnh Tsu0Q/nspvz0zPrdWvznjP3ur8+rI9KkD86jFsKhPsGeQMOTIL+dQ76bRfru0cKRIr6PI+S0 Q++/WbuYSLiWS+rMjOfPmuHNnriwn8SHDMKEDL6LJriJKfC1PuCvSLeTTuaXDb6BDr+BD/ao HbaFK9qpTrSQUfnhtuCPELx8Ebt8Ebh4E7h5E7OBLrB/MfC6XrOOU7ioje/hyfuaCbR1FbN1 FbBxF9SiVdeFFK1tGqxtGtCOMq16Ncx7GalpHax4Nubh26ZmH////wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFAALAAAAAAQABAAAAepgFBQDheFFw6CiYqEEwYJ D4eKihgjHywzRSslFBmdGRSCGiNAAAMKJBYZEgUIEJ9QG6MAFSe1JxU9PUkxHVAhI060EQQH DLcCDTEeUCLAKCAuNkZLLifIMSlQLcAwIDUcAQtBL9cqUDTAON7g4jfXMoM+Tjnr4UE61zuC DiZC9eJDrvFQRORfECLIlIBKdMQgkh9NFiaqwORbOCYVJCmq8KTjk4waQ4YMBAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 12:44'! nautilusIcon ^ self smallSystemBrowserIcon! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! objectsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! openIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPjomPjwyPjosOjQiPDYkPjgmPjgoPjYiPjQeODAePjYkPjQgNiwcLyF MsOLNrR/MqVsJK1yK7x/MsOFNq1sJJ5mJ61yL55fHZ5fII9SGf///////wAAAAAAAAAAAAAA ACH5BAEAABsALAAAAAAQABAAAAVV4CaOZGmeaGo6rKNulCZrVDoBADEkzOT7pEZgSCw2SBKB csnEkB6GqMFCrVo3EYXWUuh6uwPLBnI4WMpodFh0QVgW8Dh8LcpYEPg8nj6q+P+AL4KDIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! overlayDirtyIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAMFBMVEX6+s4dFAchFwopHQ0i FwoqHQ00JBE+LBYzJBJJNBo/LBZROR1JMxpUODD///8AAACF0F/3AAAAD3RSTlP///////// /////////wDU3JihAAAAAWJLR0QPGLoA2QAAAAlwSFlzAAAASAAAAEgARslrPgAAADBJREFU CNdjeAcEDK93797N8OYu702GV7y87AwvLjBcY3jMy8vK8Ogu7xWGh4KCggCnUxHTmTvaYgAA AABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:38'! packageIcon ^ icons at: #'packageIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self packageIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! packageIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEX58bvt0ablyaG/gjHF gzLbv57Bei3XuZi/dSrBdyvXuJe3bSi7cSrOq4upYCOTVR+uYyWlXCKgWSGiWSLHoIJxPBee cFh5T0D///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAL0p7aAAAAGXRSTlP///////////////// //////////////8AATQKtwAAAAFiS0dEHwUNEL0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABt SURBVBjTdY9JDoAgEARZVFxAVGTG/79UmkmMmtCHOlSGSlDXb6op8kvYoSwCVsTUGxMImESM RumZgFGEN1o7AryIJczuZGCpIkciYubCmOvFhh4DmzxZn+gqYn+iu4iEHgFJRHeURaBr/OWz G0x4EXacxCpnAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! paintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! processBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+1Rkg1dnhvb4/Pn6/FtriV9vjGR0kIiTqKy0wuHp+OHp92l5lG5+ mHODnLa+y+Xs+Onv+e3y+neHn3eHnpqmt+Hq+OHq9+Ts+Pb4+ytcnCtalytYkytXkEZzrVp/ r3KDm3aHn3eIn3aHnuDq9+Xt+O7z+vP2+ilvxCluwilsvipquilotSpmsSpkqythpipfoStf oStcmypalypblytblypYkypZkypXkCtYkCtXj2qa1mqRwZe44pez13aIn/P3/PL2++3z+vb5 /M/t+93y/P//n//fX7+fP//78P+/P5qNc9+fP25NJZxoVlQ4MP///wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFAALAAAAAAQABAAAAe7gFCCTk9OgoeIgk1NT0ZP i4mITUhHlUhNkYNPR0tPS0eFPTsopCgfT0pKT0moqgkIAbEBKYRKnUuqTkVEvEQCKlCTTMOX BBlDAxkDBSvBjEyPTSfTJ0EABiyHhE5AJkIm4CYSBy2HPg9FEerr6gwuhzwVRBAYGBD0ECUN L4cwIEQkFFywoGCBAgsOYhySESIEhRATRIQY8aOhhkMeatSgoZHGjBobNnrI5IGDjRsjSebQ sVJHBxwdOowMBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:22'! projectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtension2IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEVBd69ThroQXJwZY6Am a6cscKhIg7Owyd////////8AAAAAAAAAAAAAAAAAAAAAAAAAHByLAAAACnRSTlP///////// //8AsswszwAAAAFiS0dEDxi6ANkAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAtSURBVAjXY5gJ BQzEMjyhjGliUEZpayWEYdFhCWZMD2gIBzMmKSkpkWAyCAAAf19Ib5Xf/x4AAAAASUVORK5C YII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtension3IconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAABDklEQVQ4jWP8//8/AyWAiSLdNDegyF6eoP8Y0cPgYKXhf2Y2bgYGBgaG81efMRhqS8Hl bBqPMBJ0ATMbN4N5RT2DqkckAxMrB5xNtBf+/PnH8O7CLYZXT98w3H32Fc7+8+cfYS8U2cv/ VxRlZmBi5WC4++wrw/+/vxgYmdkYlKW4Gf79/sFw//Vfhr6DD1G98f//fxS8Jdfk/69vu/6/ ODblf6GdHJy9JdfkP7ra////Y3rh568/cGcrS3HD2T9//WG4PydKHF09C7rA719/GQ7MnsnA wMDA8O/3DzibgYHhlyJ/4BuMQMDmLBgutJP7////f4brCwOF////z/j//34WdDUY6YBUMMjz AjEAAFJot416CC4JAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:14'! protocolExtensionIcon ^ icons at: #'protocolExtensionIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolExtensionIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolExtensionIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAABmElEQVQ4jc2TwUtUURTGf2/m3VcwZBFGE640JmFACUShQaFN61aDazduRXdR7lon/gPm skWIiLRsMQsjok1JEMMoUjlPHZ03M83w5s2977Tq8d5YFLjxwLf4uN/57v0O51oiwkUqdaHu fxkszWSlXt2bBuzj8u6jt69eFuD7zbjGikcoPR1P5PlUbjKeG0iYDt5fvpYvFn/+5nb/rZML L+gcnXBS9ch0SozNzaKcNKffahy8WSFfvKX/GkEboXN8ig56EIYAdL0m3XoLJEQbod3O34v3 JF5ggpCa6yHa0Kq3KO+7TB01UI7C7/iYIMTyu1fI/GEGSzNZGblzlczQAwDK+24kyg1nAWj/ eEflwGflvWtFhyISYXN+VLy9Lal+WJfd7VV58vihHH5+LbWvG1Iprcnm/KjE9SKSjBD0DEql 0Y5COQ654SyOncKxNI5KEfRM/8yTBtoInnuGDnoEvg9As9ZA2RZdP0Cb81ub2IOd5xNS+eJF vKEN1+10xO/mb1B49tFKOPRnimNx+va5zP2wLvdn+p/6BQSj81S4jLsYAAAAAElFTkSuQmCC'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPrivate2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAANhCT+N3gOeIkP///////wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAA AAMcSLrc/jDKSesEGN8wArhD+EkAJ4xRplls675MAgA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:14'! protocolPrivateIcon ^ icons at: #'protocolPrivateIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolPrivateIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPrivateIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAOdgYcgpMMgwNMgpMcgdLPJNXPFNXPV2gMgZKueTi8lDPMlHPsk+OvaS judgYPV8fO2Dg////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABEALAAAAAAQABAAAAU0YCSOZGmeaKqu7Lm88JIqTV0rKdM8fMOkgoOhYDgIUgOI AwCABFKEhFRKSCGuWERry+2qQgA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolProtected2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAL6cKLuYJ7uZJ66HH7ONIrKNIqd+HKqBHaqCHq6HIP7elv7PbP////// /wAAAAAAACH5BAEAAA0ALAAAAAAQABAAAAQksMlJq70468016A2gfFugMIqgFQvjLoSWtMvA HQsCGmDv/5kIADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:15'! protocolProtectedIcon ^ icons at: #'protocolProtectedIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolProtectedIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolProtectedIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP/ysP/pkf/qkbeTJb6cKLuYJ7uZJ//mmK6HH7ONIrKNIriTJP/efad+ HKqBHaqCHq6HIP7bjP7elv7PbP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABQALAAAAAAQABAAAAUzICWOZGmeaKquJUGwFAEAr1oIeGCky8H8jMMApYhMjpNI IgWROCWIlcP5gDUasKx2CwsBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! protocolPublic2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAABCGTTSYaEShdH29n5HIrh6JUnGxdYm4gf///////wAAAAAAAAAAAAAA AAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAQpMMlJq704680xEQKxEcFxBGIWGAhiBBpwtAeg DXI9bEMB7J2gcEjURAAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 17:15'! protocolPublicIcon ^ icons at: #'protocolPublicIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self protocolPublicIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/14/2013 16:32'! protocolPublicIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAABCGTTSYaEShdH29n5HIrh6JUnGxdYm4gf///////wAAAAAAAAAAAAAA AAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAQpMMlJq704680xEQKxEcFxBGIWGAhiBBpwtAeg DXI9bEMB7J2gcEjURAAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! publishIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAL/F3UhgoExin1Fmm1hqmF5ulGV9sGRykXGEqmh1j292hHV8inmRu3WH qH6VuYSYtam/4LDI5bHI5YSQn2V9lLnS6c7g8LjT6bnT6VyFpU6PvVSLs8Hd7sDd7cHd7dTn 8sbk8Nfs9U1aXfrpnvrvwPbflv/xwv/11P301//rs//xyuzRi//lpP/tv//aif/flv/Rdf/V fePBfdmycffjy/vs4MnAwP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaIQJwQN1kYh0jk5Faj0RZJoXEyIpVWsplxYeviBhAUykQuk08agDCRarvfqs3w wKrb7y25sPB6Ff6ABQ0PGw8NOAQuigQgjY4hGyEIXzExAx4dHZgcHh8bDkICMAIXpRcYFakW ejgBARGwsRKwDBlIrri5BjgUUb5CCr9JCsTEwkMiCiLHSMs4QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recentMessagesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAK291u7z+0tuok9xpVR2qXuWwO/0+4qdtPn7/QU0YM/t++z4/fL8//b9 //nONNbQvJuFSox9ULGPPrORQKqLQfKqC7SQPeiNB6VkFaVlFaRhF4xZJ6BVGptLH5tKH5pH IP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZeQBCIICwaj0OkUkg0fjocDebYFAg3l4ojQxUWrB9PlGsEEAaC9ETBtiy/oLXB IFla45Q8ZVmEKOYQfEIPCwgBEUgHCUWKBw+ISItCCQySSpYJDZaRRZmbR4uLjYKkQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recoverLostChanges2IconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAImEhUhvwFJmj0xfhVVqlFhtmFVqk1twmkxhiE9ki1Jnj11znUhllnV/ j0tvonGq5ZLC76PL8arZ+n654On4//H6/tHy/8fp8/z4nPz4nfntWfz1m/blZPblZ/blafbl avblbffiavfia/TaT5OOc+3HL/vYTfLNTum9KvHDL/HDMMWaGfjBI8SXHO6+LsGSIKaUbL6E Fb6NJrqIK7mHK9+PD7aDMbaCMbN9NrJ+NrF9Ov///wAAAAAAAAAAAAAAACH5BAEAADsALAAA AAAQABAAAAZ+wJ1wSCwajavk6rhjCFemjSe1FAYCDoZ213KNULXYMDB07l4iDCf1GjqMMlGm k5IJteYhLf1JzcpGNyEYICo2TEI4JxolLDk7AwgJCgYFBwtCOpo6Vg8TEBESF5hHkQkCBJak RjAWrq8wTCQWFLW1JEwAFhW8vABMDcHCwUdBADs='! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 14:27'! recoverLostChangesIcon ^ icons at: #'recoverLostChangesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self recoverLostChangesIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! recoverLostChangesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJJ+itPL0MfG1MPE1VxlnVxlnLi92k1boz5Tqj9UqjFLrzFMr7K73WZy jAsaOGx8mZC27AY3d9Pi9xpJgxpJgiJQh4GPoGKk7bC+zmeq75zG8m2y8sPf+XK59Ha+9qnW +LHh/eDz/uf3//H5/eP2/+f4/+76//T8//zTrfu5f/jAmPvXvfmbePvDs////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAA AAAQABAAAAZtQJdwSCwaAUjjUZVqBZRCpMfDQQICz2IixAWsUCwAQymQdjaZi7U4SIDe8Hei WJAQPo28Pk88GA4aDSSDhA1GCBANIg4lD4yGRQsKDSYWIxgWJpAVExERQg0noqOQLpyfLnt7 RBUUUEoVr7JQQQA7'! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'EstebanLorenzano 5/14/2013 14:49'! referencesIcon ^ icons at: #'referencesIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self referencesIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! referencesIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAYlOhBrrbXe/87v/+f3/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAUALAAAAAAQABAAAAhjAAsIHEiw4MAA CBEeTBjgIIGHAQRIDPCQQEOBAQZoDACgY8aNByUKuFgg4sSFCQUUGMmQoAAAAgG8NDhw5kqZ NAXOnInTIEOSPx1CFGrxoMYBQI8CFbn0JMaWTxPmnErVYEAAADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 14:16'! removeIcon ^ self smallDeleteIcon! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! scriptManagerIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAEpZfHaEnHmGmomPj4mQj0pUM0pTKtXet9XdsdzjtdzjttXcp9zhqtzh rNzhrebqvtfbk9fblNjcltjcmObpvufpttzdidzei9zejefotdXTUdXUWvDww5eXhubjd+He fuHff+HfgeHfg/DvvfDvvs3ITc3ITs3IT83IU+zlaOzlaufidebgdPj1w/DlX/DmYPDmYuzj bOzjbaKffvjqXvjqZaKaUYp7NYp9PYp9P5GFTrKoda6ld6ujeYp7OIp/Uf///wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEAALAAAAAAQABAAAAdwgECCg4I7O4SIhDscDzyJ iDstFAqOj4UtJAkOlY+RIxUNP5ZAOzk4GQw3EwKWOgcIPjcSGCKsjz0LNhEXIR4ytokzEBYg KzEwwIkdHywqLycBo0AEKS4mANIDBSgl2KMENTQG3qMAGxoD0oMA6erugQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallBackIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0jh5ZIkdgCdpvADAHyknkFg4Ol6PcSMACEoCAwHRKHR0Ag5DMZi IY8T6IyNcDRRKPp9fhODGEMkEhEJiBGMEo4kRCEWEA8gIZYhmUYiDhUiUkIlFCWgQiYmpaml QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallCancelIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMczNfRxdPRzdPNydPNzddgqL+AsNN8sM8cpMOY2PuU2PsUgK+UwOfJV YPRja/NjavNja/Nka8UYJ8YZKMUZJ8YgLPJUYMUTJfE/UvA/UfJIWPFIWNRldN+cqMpdSc5u XspXRspYRslYRtWIfMlQQ9ymoMlHPslHP8hHP8c9OeBhW/WBfcc9OuNST/WAfvSAfuPExP// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAA AAAQABAAAAZ8wJhwSCwaj0eYZ1QceWBEWKgVYgpHohYIKiyRXCvSp/QhvcIl4ghFEKhMqkHg ZCVyWBHIw/FIcZAACg0NFgkASDEIDBsaGgwISBwVGJSUC39FHBOUBRIFGBkUmEIdF6AXHB0c phkXHUMwFwaoQ6sHF1xCsaNCq7mIwMExQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:22'! smallCenteredIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAIAAAENKh////yH5BAEAAAEALAAAAAAQABAAAAIXjI+py+1/gJwAPoqldblu 1lEfmI3mGRQAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallConfigurationIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJKAiruyu4t8jYR5j4B2kXZxlXGFrH2RuX6RuYaawmJ3nWN3nHGFq4uW q1Vrj1Zrj/v9//j8//r9//H6//T7//f8/+35//D6//P7//b8//n9//z+/+z5/+/6//L7/9Xz /+v5/+76//H7//X8//j9/+z6//T8/+77//P8//f9//v+//b9//r+//n+/////////wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC8ALAAA AAAQABAAAAaOwFdjSCwahZ+kcqlsIEGAKGhKnTobH0DAFQBwOKXSt3T9CFxogSWBYCweoTJh GyB0Oqf7vTwp+EWAExciFxdlHogYGB4oih6KZSZRACMjJiMUlyZlWlwAKxkrFSkVGWVnAy4C JAkHBgoOEXJ0BC0sEhq3EmUQfgUQECrCwhBlG8fIycdXRs1EL9DR0tMvQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallCopyIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPP1+/j5/GN6p+7y+vL1+/n6/Pj5+152o2Z+qGqCrG2ErXGIsXOJsnyS uH6Tuoygw/D0+4GXvISav4mewZGlx97o+N3n99/o9+Ts+efu+e3y+vP2+9zn99/p+N7o9+Hq +Orw+fb4++bu+fD1+/L2+/X4+/f5+5qaj6Cdi52bjq+ngaukhKiihqOfirese7Sqfse1ccWz csOydL+wdryueeDIj9SyaNSyadq9fNWyaf///wAAAAAAAAAAAAAAAAAAACH5BAEAADoALAAA AAAQABAAAAaaQJ1wSCwKYchk0qiLFZ5KJVFmChicz+wNNpyVKBGqtRrA5bg6GmFD8oIVh1AN Z5vpXCPKQ83eADaAGzQ6LxoaA3h6Eg0MCQIQLjoqIHqFh4aYGi86KyIZGZOKjI4gKjosGHqd n6wZnis6LR+zqKKNAhgsOigdFBOys8HBLTopHBwWvL4OCwgXHhUoOifUJ8bI2BYWHClF1d/f QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallCutIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAANjb5r7DzZ2nuba+zBcyXXmHnU1ge2KLs3OVuK7F3WGLsytto0d9q0h9 qxFemxJfnBJfm////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABEALAAAAAAQABAAAAVRYCSOZGmWQnCagDGsZVDAZTGL79oK0VAYI4RwJDAUCwOA SJGIJA6RAsHgKjFEiYbNqCwtEuDFoJgzPSAOHJA2GggR7AjTCaVdnQ32Nxw/p0khADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDebugIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAALGusR1ieR1jeR1jeB9leR9keCBleSJmeiFneSRoeidqeydreiptfCpt eytufCxvey1wfDhWUzFOSiA5Mi1ORThWTjFWSihBOTFORShIPShFOS1IPSM+MiNBMi1OPS5q Ijp8K1ONPJLBf3OnWJbDeZXCeZ/HgabJh67Oka/OkbXSmdvrzLbSmbjSnLjSncbcrtXnwtvq zOfz28fcr8bbrsfbr8vftNXmwsfbrv///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADkALAAA AAAQABAAAAZ5wJxQWBkaj0PJMII0AjYAIaZpkVAyEAhAE23mABBZLQvJTS5Nx+yzur0eAIDH IowwAY2YbGVzMbpGGBoKMCsiNCwnC00cCS82OCMpJgkTHkdcCC0qKCEkB1FKQxQABAYnJiUg BUh0QhMBAwIBXkMdcbVGGblGrry/QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDebugItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAALittxMTQ9fX5iAic4+QuSIpedPU4Dc/g1FapOPk7lBapFVfp1liqVli qG53s3J6tMzP40RQm0NPl0tXn09boFdip1lkqVllqWBrrmNurmRur2Vwr2Zwr2t1sjJCjTpI kENRl2Rwr255s3WAtX+Ju+bo8iU4hDxNlNjc6YyawIqZv5ypx7nD16O0y6O3y67Dz67Fz7LI 0LbL07jN08rg28ri3Mri29Lm4B+ETsLez8fg0z2WZESaaVameHOzj1erclircVircliqcU2n ZU2mZWGwYIO+gYO9gZPFh/Hx7f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEoALAAAAAAQABAAAAeegEqCgg6DhoeDGoMiiIYA CwCCGY0dGhcKHx8AE5GNSgARSTQgEhFKHhKNCDQINTczFAAADRuCIowADDZJojANnYYYExY3 SQY3Misehjg4ORAjMzQ3Dy4qJx4VgjhIOD06KC8xLQckJpEhSjhHR0Y4PAksKSQBBcxAQj8/ QTgCBAMDDuEYQmQIDh8lgAksgmOHDiUKPKlzJoiDxIuIAgEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDeleteIconContents "Private - Method generated" ^ 'R0lGODlhDgAQAOYAANDY6GiYyGiQuHCYwEiAsFCIuGCQuGiYwHCgyAhYmChwqDh4qECAsEiI uJC42LDQ6BBgmDB4qDiAsFCIsFiQuGiYuHioyAhgmEiIsBhomDiAqGCYuIiwyJC40JjA2Hio wICwyJi4yChwkCBwkIiwwKDI2BhwkDB4kHiouCh4kJi4wDiAkJjAyKDI0LDY4Dh4gECIkDiI kEiQkJjAwKDIyKjIyLjY2MDY2EiQiICooKDAuLDIwMDY0IiwoJi4qKjIuLDQwLjQwMDYyJCw mKjIsLDQuLjYwKjAqMjgyLDIqLjQsMDYuMjgwMjguMDQsNDgwNDguNDgsNjosP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAOABAAAAergFOCggSFBIODAAMGBQwR CgoLBAYAggcPLjdIT1BIPDYPB4IADQ0UAhUbFBgSDZWCMTk9MT4+MT05MYg4SU44UVI4R0Mv u0RKOFBROEpEMogwP0UwnDBFRDCIKzo7K0xNKzs6K4gnKjUnQksnNDMniCIkLSk8RiIhLCmI Jh8lIzZBRnDoMAJRhgMeMtgAksGCgwyINBBAAAEEigsTAmhANEVDgo8gN3IcyTEQADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallDoItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAACCAQSaAQSaIQUGRV16abzqITzOISGatdy2IQUiRV0iaVzqRSEGRT2at bzqIQTN3OkGISEiRT0+aV1ekXi2AMzOIOkGaSEiaTzqIOkGRQVekV0iASGakZnetd63LrbrS utXg1V6aV4i3gG+kXoCtb4i3d5rBiIi3b5G3d5G3b6TBiIDMJsLpeP///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAC4ALAAA AAAQABAAAAaYQJdwSCwWQYdCIFA4gIyug2G1MqlEnGbxkCitWqtUCoVKHIYgA+n0aYFP8JPh GZWMRm336n4/uwwhgXl6gR0GQgYbih5ujSwbHQFCAA+VjI0flQQAQgEUn5ctHp8QE5JRDBER lx6qFxIDfiAIEhmMHg4OGRcTCHRRCxMeHhUYFhoTC35DBwgKEw0NEwoIy0RIAksCTlDdRUEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallErrorIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPJ0dulqbuttcfm4uvm6vPvO0N9PV95PV+5YYuJUW+FUXO9fZvvJzM4o N84pON1ATdZMWOtVYPFea+OGjc4lNc4uPs4wQO/Jz+artc9uXNeKfduWislHPs9aUuRmYfN8 fOt8fOPExOvU1P///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACQALAAA AAAQABAAAAZqQJJwSCwaj0iSaJPpZDQiZIjjAVk9nJBRxAF8vl8AJ0qcGADoNOAwKUIChIJc ThBAihXJaM8fSSpuEQMMhIQDEXdlDwiMjQgPbUQXFAgLlpYIDhdGGA0JAaAKDhhIFxMQFhAT m0mtrq9JQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallExportIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAD8/nz9fn0xnl1FtnlFsnVRvoVBtnVNwoVFtnVJunVh0pFh0o1h1o1l1 o1x4p198q2B9q197qGN/rWR/rWaCr4WhzYahzZ2z1l99q199qmOArYWizYaizYaizJCq0qe7 2qe82q/B3TNwpDNwo0B3pw1cmv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACYALAAA AAAQABAAAAZmQJNwSCwaj0gjaVQqJYkkkfMpLEWppimJCjBGKGBiYAguh0KUYZd8pmhCGolw TJRIQpPHB/LMgDAOFw5PgQ4NHgkKDAuMjY0eCwccHBscFpUbGx0cFZQFAgYGAwgGpKEIqASo WERBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallFindIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAALClrLu1ubOpsKqdp6eapKufqMTAw7attLSrsrGnr62jq8C7v765vaeb pb22vLmyuMbCxsnGycfEx8G+wcrIysTBxUltof//yf///v70jergpPvws+nWc/npqvrpqvrp q/raffffnvXVkfTVkvXUkd+9f+SiOemvV+uyXa2OX7mYZqeIXKuNX/ClO7KQYqiIXJ59Vp19 VpFvTo9uTZBvTpNyUJNyUf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAZ4QJxwSCwajS2aS1U6DlunzcagcuKgG4sn5HJiLZ2QiHbEbj6hEapVTKVYr3OI tG5TIhVGLF0npigUEAsPAjV9Q24pEhMBCAoybEUmGRcrDgcAAzNGkxcYNzAJBQSbRJ0YqBc2 DaVEHJ6pGTStRBqfGBcZILRWvThBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallFontsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAADdSlm2LsqK1zitXj4egwEF0qMDR4v///yH5BAEAAAcALAAAAAAQABAA AAM1eLrc/jBKI5kZVV2cC+HHNhRWIXBGYVyUNrxcgRUAM1BfeB9DsOw8EgtGks1eFBkrw2w6 KwkAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallForwardIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP797/375v332f765vzyyv732f732v322f322vzpqPztuf3yyf3yyv72 2fvgjPzkmfvkmfzoqPzoqf3tufvdg/zgjPzjmb2EFq51Erd9FLd+FLV7FLV8FLyCFrmAFbuC FqtwEatxEaluEa90Eq1yEqdsEKZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACcALAAA AAAQABAAAAZkwJNwSCwaj0ji5ZIsdgCd5vADAHyMnqzWMwgMPERNo1FAHAyCggAhyAw3DMaC EF/I7QyOEDPpK/4TCoGCI0IkEogRihESCYwkRCGSISCUDxAWIVIiFQ4iUiclFCWgJyYmpalS QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHelpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP7+//Hy9fLz9czU3tvk7v3+/yhilkR2pF2JsV+KsWqSt2yUuHmdvpWy zKK701CAqvX7//r9/+jw9fT7//f8/+3y9fb8/+zy9fn9//z+//X8//j9//f9//v+//b9//// /yH5BAEAAB8ALAAAAAAQABAAAAWA4CeOZGk+j2Ggppg2hBAQzVo+cMHtHEA/JAOhQDiohETD CJfhJAyLmoGTaQA/D0Kk42DsUpwO4Wq4YDCRHcKAiEQqyk95Q+esFRj6JZ6lUHYqO38DVzh+ fw4OFh4WFFYjQhoaHCoaFhoEcS4wEDwQEz83BjASEjQ2LSgqLC2tJSEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHiararchyBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAG92hCaASDmHUkyTY0OSW1WbalWba1aYalueb1OXZ16gcVGVWlSWW2Kk Y3GucHSwcWupZ2ypaHqoa6HGhv7977qXJsSlQ6+IIK6IIK+IIf///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAVEoCaOZClaqKlWVKWaGXaNCKG8wGg8k1OogCAgAGlEAq/R gCFZDJKjhOAAJeWqo6sGZUkKASwXbhSbjbEiLdcrDKPLmhAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:23'! smallHierarchyBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAG92hCaASDmHUkyTY0OSW1WbalWba1aYalueb1OXZ16gcVGVWlSWW2Kk Y3GucHSwcWupZ2ypaHqoa6HGhv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABQALAAAAAAQABAAAAVFICVSCKGMaGo8k1OkcAA1UQCnAyMtw50mgoMPBhiVTr4i ZdV63QBQGc32FOV2vaoIKEwOiUbTUMl0JaOzmpdy5a0pXFQIADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallHomeIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAACM+gCdBhNre6BM0fC5NjxI0fCE/fV17r9ne505upU9uo1Z1qld3qlh3 qlt6rlt6rVt6rF59sF58r2KCtWOCtdje5yJHeSBHednh69fe59be5+30/PL4/+bx++f0/+Xx +8zX4Ov2//H5//j8/+Dw+yRTciVUct/y/uT0/ef2//X6/eL1/+v3/eb3/+b4//T8/y1kbClh Zv7//zt/ZDZ6XTyFYD2GXzmEW2JmYWdtZWzBOmhtZW9za7reHWVmX+3rAvPzBWhoXJOTg66r cpOPW66qc//7zpOSg396TWhmW//1v5SRgZSQgP/yv//qqv/srXJtXJiTgm5pWp2Te5mRfv/e lv/fmJ6VgP/Pc6KVfP/PdP/Ug6WVeaSVeqGTeaaWe54/NaBCN59FOv///////wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGQALAAAAAAQABAAAAewgGSCg4SFhWJFgl+GhUNg ZF1GXIyDYURZSlBNXpRkSFdPUhhSTlOUUVZBFWMVSVVUhktbPgJjtgI+W0yER1g4CGM3NTdj CDhaQoM8Oxm2Nj82tho5PIQFIDJjNDM0YzIgA4UEYyojtmMjKmMEhQovGyIxMDEcGy8JhRMs HyEmQCUhOrCgUCgCChIeLPS4kIIECgmFIKw40cKADgMuTqxwUOgBgwUHAAQAcGBBAwiCAgEA Ow=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallInfoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQaAPb9/wJGjA5ipFWQv7bQ5MfU0PT7/5a2xff8//j9//r9//f9//z+//X8 //3+//n9/+zy9fb8/whUmPv+/wxcn/Lz9e3y9f7+/wtdn/Hy9f///wAAAAAAAAAAAAAAAAAA ACH5BAEAABoALAAAAAAQABAAAAWIoCaOZFkWgxAEwlCY2hEMRJURQ3CUh0A4AIEAcCEIdqJC 4AcIDgEOQuClGQwYTQC2yWBYRT5FU/icTIyiAOTxEAubCoUlkIYk7gAKBvC4Q+gaPggICwAS EgsLhGhVA4MIACsNABEIXxpKBA0NKysRDVJUMT4GpaZGSCMyNKU4OjAoKiwuMLUlIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallInspectItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQALMAAKmyxouWqxcyXVVsh665xjJObuTo7NXz/+v6//z//////wAAAAAAAAAA AAAAAAAAACH5BAEAAAoALAAAAAAQABAAAARLUMlJax0DWFv0qEAxBFJXUqH0ZVtahkUXwwU5 FQeCdGG+UwVEIlEoCYlAQ8JVULokNBtNs6laBQpsVqC1EAQECWFcxWq5Xat6LYkAADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallJumpIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLanguageIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOZfAP79772EFqa72PzuuI6o0ODp66ZrEP30zpiw0yRonFeDqsjW47mcZfzp pJiw1Pvll9bh57fJ3v364kF4pC1tnv354ihqnurr2nqVrfvopP354a6QYqhtEbJ3E9nZwrV8 FOTr6rC7p+Hn4MLPya+hc7vBnu3nxdjd1lOBqc7Y3mGPu2iMqJWzyrqymIWpxSdqna6Ycdbh 6EmAs/30zS5tns62gdHQuMy0gLbJ3rfI3qhtEN3AgnSSrChqna50E5yeopCwyZqKWufgtcvS zb2me8avftGpVOTr66rBzKtwEanB0cjV47mcY1yFpdvj5enu6FyGpTNwoEh7pqCzp6a5srOe eLl/Ff764buBFuLize/y5sfSxr6+qr/M1kyBtP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAF8ALAAAAAAQABAAAAeagF+Cg4SFhoeIgwwBjAEM hhgKCiRcAJYAOwGECkAFNUcsSpeWWIIoBQU3BSBPWkgVVxoSElY8LhAxRRBOIhcjWwfBMx9S CwtLRAspJ1kmVAPQAx0TOBEROVVdQx5CUw0NGT5fKyoC5gIwLTYhJQ8PSYNRDgjzCD9MQRw6 RhuENAQACXihMMiAwUFNZLyw0ANKogQQE0mcSFFQIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLeftFlushIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAJEAADk7iUNKh////wAAACH5BAEAAAIALAAAAAAQABAAAAIelI+py53gngi0 MhgPrNzq/HXBBRqb6JmlcHLkCoMFADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLoadProjectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallLockIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPz8/v39/mh2kqSwyPj6/l54qGN8qGqAqGqAp36TuZipx6260rrH3+Hp +OHp92J8qHKGp3uMp3yMp6Sxx97o+ODp+N/o9+fu+vT3/EtuonKHp3uNp3yNp/L2/Pj6/YST p2x2g4STpouXpuTt+Obu+Orx+vH2/PD1+/P3/PL2+4uYpujw+e3z+pCbpvX5/ff6/fb5/Pn7 /XqBhc/t++H0/fv9/f3+/sPEu7m3qKCYbJuVcKyoj6ecaKSaapWQdf3zy/Tmtv3vvf3wwv3y x/3yyf3zzraSJPXaiPzhj/zkmvzmnvzmn/zmoOXgz7GLIbSPI8GeOKaJOMekRbiZRNi9bfDX jtnEh+XRldzPrHhbE6d+HK6GH6uDH8WwfdLAlNHBm8Kqc8m2idbLstnQvPPt4f///////wAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGYALAAAAAAQABAAAAfPgGaCg4SFgzyIiYqKgj0z j5CPPJA8gjkzI5maIz4zGQw+gjozJKWmJDIzHSkygjszK7GyKwK1tYI4NCa7JiW+IAMTEyCC N2FQUF8YGCwsLQ4NFS2CYFJkZFJeLi4nKhYWFCJmYkZYZWVjRk0vKCEzFxcfZl1aYV1dYVpd MTAbERIcIph5gqSIFSA/ljypEUMDJAhmnAwREmVKECZOAgA44IkBAjNbiFzJkuWKki02bDyY 4YGAATNcqiShQiXJES4LFCQowLPAPC1Ag3YxZCYQADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallNewIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+/j5/GN6p+7y+vL1+/n6/Pj5+152o2Z+qGqCrG2ErXGIsXOJsnyS uH6Tuoygw4GXvISav4mewZGlx97o+N3n99/o9+Ts+efu+e3y+vP2+9zn99/p+N7o9+Hq+OLr +Orw+ebu+fD1+/L2++jw+fX4+/f5+9DSy5iYkZmYipSTh/7978jGtJKQgJeVhZORg93axqSf g6GdhamigZ+agZuXhKOcfv30z52ZiMazbsOwb7ysdbiqd7Oneq2ieK6kfaiffNTInv3zz7WR I7WSI7qXJrmVKMOsZMCuc/zno555FqaBGqaCGqWCGq6KH7iUKPvdg5l0E6B7Gf///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFMALAAAAAAQABAAAAedgFOCg4SFhodFhkeLjEEw RitPhTkFlZUfQ0QrRESEOiYBBqBONzdCQjdOg0glExAKByRNTUlMS4Q7BBojGgAaJUpQUoU8 IhMPEQ0MCSVRJ4U9GRkD0tUlLIU/IMfJywIgPoUzIRjl5uRAhTEX3MoJAhc2hTIe9fb2NIU4 HBMSDgsILHSgUKNQig0bKiRMqNBFIRQQIapoQfGFCkGBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallObjectCatalogIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallObjectsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAMsuOdleZt5vd+SCiT1spgpEhBlSkCdemhBLiB5XkZq41GOph3i3mCSA TzCJWwpsNxRwPFibXVibXGqranCkZ6uEGqeBGqeAGp50Fpx0FphtFJNoFJhtFf7SfZNnE/6/ U////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACAALAAA AAAQABAAAAZ1QJBwSCwKAcjkkOFwMIaAgXQAEDIaFErjCQIIvoIqqDEpSxrHgDogfkTekccR HBYuHtnH4phEDhcQekaDhIWDCgpGFRVGBgZFFx0dFkQKCAiJQhkfnB8YQwgHBwhDm52fIAoJ BAQJmSAckhpDBbW2RB4bhoVBADs='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallOkIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAAAAAAAMwAAZgAAmQAAzAAA/zMAADMAMzMAZjMAmTMAzDMA/2YAAGYA M2YAZmYAmWYAzGYA/5kAAJkAM5kAZpkAmZkAzJkA/8wAAMwAM8wAZswAmcwAzMwA//8AAP8A M/8AZv8Amf8AzP8A/wAzAAAzMwAzZgAzmQAzzAAz/zMzADMzMzMzZjMzmTMzzDMz/2YzAGYz M2YzZmYzmWYzzGYz/5kzAJkzM5kzZpkzmZkzzJkz/8wzAMwzM8wzZswzmcwzzMwz//8zAP8z M/8zZv8zmf8zzP8z/wBmAABmMwBmZgBmmQBmzABm/zNmADNmMzNmZjNmmTNmzDNm/2ZmAGZm M2ZmZmZmmWZmzGZm/5lmAJlmM5lmZplmmZlmzJlm/8xmAMxmM8xmZsxmmcxmzMxm//9mAP9m M/9mZv9mmf9mzP9m/wCZAACZMwCZZgCZmQCZzACZ/zOZADOZMzOZZjOZmTOZzDOZ/2aZAGaZ M2aZZmaZmWaZzGaZ/5mZAJmZM5mZZpmZmZmZzJmZ/8yZAMyZM8yZZsyZmcyZzMyZ//+ZAP+Z M/+ZZv+Zmf+ZzP+Z/wDMAADMMwDMZgDMmQDMzADM/zPMADPMMzPMZjPMmTPMzDPM/2bMAGbM M2bMZmbMmWbMzGbM/5nMAJnMM5nMZpnMmZnMzJnM/8zMAMzMM8zMZszMmczMzMzM///MAP/M M//MZv/Mmf/MzP/M/wD/AAD/MwD/ZgD/mQD/zAD//zP/ADP/MzP/ZjP/mTP/zDP//2b/AGb/ M2b/Zmb/mWb/zGb//5n/AJn/M5n/Zpn/mZn/zJn//8z/AMz/M8z/Zsz/mcz/zMz/////AP// M///Zv//mf//zP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANcALAAAAAAQABAAQAg0AK8JHEiw4MBL CAUiTGiwocKFBhk6nEix4MJLES9irMixo0eJEy9aJCjSokaQGVF6XGkwIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallOpenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPjomPjwyPjosOjQiPDYkPjgmPjgoPjYiPjQeODAePjYkPjQgNiwcLyF MsOLNrR/MqVsJK1yK7x/MsOFNq1sJJ5mJ61yL55fHZ5fII9SGf///////wAAAAAAAAAAAAAA ACH5BAEAABsALAAAAAAQABAAAAVV4CaOZGmeaGo6rKNulCZrVDoBADEkzOT7pEZgSCw2SBKB csnEkB6GqMFCrVo3EYXWUuh6uwPLBnI4WMpodFh0QVgW8Dh8LcpYEPg8nj6q+P+AL4KDIQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:24'! smallPaintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAMBSU8FTVLFRU+N8fdWPkdWTl6NiaLpjbMGOldzV3P/+/+Lg5fv6//n4 /fj3/1FRU/z8/vr6/G5zkPr7//n6/vj5/Wl0lO3x/NTX4Gp1kfDz+mZ1kmh3lGd2k2h2k2h2 kcnU6vr7/W97kWx3i1BuoFRwn1VwnWd3kWh4km96jOXt+vf6/1KG0VFxoFV0omx5jFF2qn+n 25CYo1mQ01OAt16Qy1F8r5O55rfU9qS1yXR+itjl9fP4/vD1+1GHw1qSz1qQzFWIwV2RylSC toy1477FzViTz1OIvluTzG12f8XV5eny++Xu91GFtLbG1XR+h3ORqVxufJequHZ/hoKLkubv 9vf7/lySuLbEzdDt/c/s/HeAhdLs+c3u/c7u/c/s+tDt+2h1e3B9g3uIjrzc6c7u+9Ds+M/t +M3t+MPLzc/X2fr+/3iChOj2+X2IiuH6/oCKi36EhP7///H9+19lYWRqZn+FgXqAfJacmLK5 soSHfpicjoOGe4qLeYqLe3p5ZY+OeZGPdpWSc6SdZ6WeapuWcJqUcJeScqabZaidZ6ecZqac Z6acaaCXbKeaZaibZqebZ6icaKebaaWabKSZa9mqWL6kg3txZf/69ItwU5iPhv/+/WxeU7i0 sbOEaNjT0NJqUeCNf/y/urd8eM1VVMBSUdt5eJBTUpNWVbywsP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKsALAAAAAAQABAAAAj4AFcJHEiwoEBC kCAtGpTIUSRGkh5JUoRIIKUyYMyU0VKGy5kuXr5omSSwERojNZD8EELCRIkWLlQ0EmgIDAgl ey7hgGGDRpMhTAoJPATmTRROlj7FYHHER5AqggQG+oIp04M/oA5AuTIDyBJAAvt8IVXJU6g5 nTRJIXLjgh+BesAgwHMK1Q45bYo4yaGBj8A4WWSQMSBglBwMY6gk6WFH4JYscLAQAFBK1Bo2 YcTwmCLwiRYFC/IUCDBAgRo6bhzoEJhCC4RNCVKZSqNKVZ07FEQIfPHFSgUGKyhMiFChQQgr IwRKONGhwwkUFjJ04PDBw4cNBrMTDAgAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPasteIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPb3+vP1+oeUroeUrfL1+/j5+152o22ErV9zlmBzlnGCoIeVrt/o+OLq +O/z+u7y+YGXvICUtIGUtJGlx4KRqoeVrZenwJinwI6bsI2Yqq+6zN7o+Obt+PP2+4yYqq66 zN7o9+Hq+OLr+Orw+d/p9+Lr9+Xt+PP2+pKbpt7p95KcpvL2+qvB1PX4+pqfoZmgoaGknKio l6+tkru0irawjrCskuDIj9q9fPLGcfHGcfLJefHIefLMg/LNg/LQjvLRjvTVmfPVmvTZpfTd sPXhuvXkwvHFcfLIefPMg/PQjvTUmfPUmvXYpfTYpfXdsPbhuvbjwvbkwvbmyNiubMyoddCs eNSwe86secWaYcOaZM6pdseicsqldNOuesGbbMSeb76Ya62BUq+EVrGJXLONY7yWarWQZ+TW xtTBr////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGkALAAAAAAQABAAAAe6gGmCg4SFhmkYLCwYh4QU Hx8aHxSHZ1hYChcWFhcKYVhnhFZSCRISEaYSCFJXolKvsLFUhF1RUEVRM7q7WYRVRERPRDMF xQU3NIRaQ07MNC0TBgA2yINcTE1CQjUdBCsnJwEyg1tBS0BKMQ4TEAcGDzGDXz8+SUkwI/n6 MINePD1IkLzgwM6dCReDwOzQcUSHihAlGogI0QDFoDJTjODI4WEDCQYpUoDIMAiNGTJjxAhY UGHAgJYD0gQCADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPrintIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAIyZuI2auYmYuIyauau52K+82rC92hY6gxc6g0NekoqauoqZuIybuZGd tEBdlFZ0qFRvn1hxn2Z/rWmCrnaNt3qQuH+WvoOZv4ubuVFyp1FxplV1qlV2qlV0qVV1qVV0 qFV1qFV1p1Z1qFZ1p118r2KCtWB/sWWFuGWEt2iIu2iIuoKf0IGezoKfzufw/1N1qVR2qlZ3 qld4q1x9sF+As2uNv2qLvYGgzoKgzoKhzpGftL3O58jW6snW6tDc7ejx/9rj8Nni7+ny/97m 8r3P6LzO573P57/Q6MnX6sjW6dDd7tnj8Nji7/H3//j7/7zP577Q58LU6snY6snX6ebx/+fy /9nj7+nz/97n8uXx/9nk8Njj756mr+r0//D3/52mr+32//f7//f5+/L5/+3y9vj8/+jv9PX7 //r9//L6//f8//b8/+3z9vf5+vX8//r+//n+//r///v///z//6uwra2wrvv9+vz9+ri4qb68 pry5oMfCoLe1p8jBmsS/o8vClMvClczDmM7FmsG7nMzCls7FnMvDody/befNk9GjQ82gQv// /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIwALAAAAAAQABAAAAjmABkJHEiwYEFB hP4AClTIIME+iyIuUrTHkENGg944cfIG0aFEfhzqKRPGCRo5cebkcchnjQUKEiA4gIOHIIEa B+g08ZLmjBo3Y+ogqEGAkY2IX7pcqDAhQgIwXCLaYKTCTpsGVLL8EHKligsdYu6kYISCjJkF CgAwCDAAAwYBZticYFRiSBArS7ToBQJEyxYmWEowoqFECo8pSBL36JGEhxQfJhiRiHLkieUi O4g8MQLlSJQZjGTEgOGhQwcPHja8MM0hhgxGBTKwwJGjRY4VtnHfyFBAoAEND0CIGD5CRIgP GgwwCggAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPrintItIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAEOTXkiUXzKESUOUW0mRXbPSvC2ERD+VVoe9laXPsE2XX3S0g4C4jqPO rb7axcbcy8bay9fk2jyTTkOXVUGSUk2WXWCncFaSY3Kwf4G4jXOxf0GNTk6YWlKYXjyNSEqT VFGaW12kaNnm2y98OE2XVlukYyp9MjWEPUWNTFSgXMDVwi9/NT6PRESQSTp3PrbSuDeMOzZ2 OkiYTDqIPUSTRmykbbDOsbjTua3Lra3KrbfQt/X49bjSt12dWFSPT1qSVHS2bHGmZ0qIO2yj X2+kYGyjWcvcxXKmXmWjSIa0boe0bpa6gZK5eLrYpoG0WJ3VYIXOLp7VX5i/ba7ecq7cdvv/ 9vn+8P7/+Pj46P797/jwsPjomPDYgPjgiPDgqPjQYPjYePjYgLCDGbB8FKFuD5poD6l1FP// /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGgALAAAAAAQABAAAAergGhoBUA0BBUZDoKLiwgk UFNSS0EdCYyCEB9KTVZRTkxJHBGXFj1HKmdVT0hEQxqXGz8+OmdnV1RFNQqXAi4xObVnRkIX AJcGKyY4tTcnIyADlxgeLTZnLygsDxQMlyISMjw3MzAPYg/mYowNEyElKeZZYjtiWOqLDwsH AeZYWmL1vNy7hEZMFy0IEXIZQ1CQGTBbIm4BY6ahIDIYw3whY5FRmS9lOnoMKSgQADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/13/2013 19:10'! smallProfileIcon ^ icons at: #'smallProfileIcon ' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallProfileIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallProfileIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAABhHhRlEgBpFgR1JhCNVmCZYmiBKgiNNhDlnpD9spxZFgCRXmCJSjyNU kCdamiRSijxqpTBdkRZUkRdSjxdSjhhQi3KgzHSjzXOizHelznyo0QJWlwNXlwVXl3SfuXii u87k8H+pv9bs99fs993x+9vv+d7x+9Xs99ru997x+o62xoy1xarM2LLR3eb4/5C5x67O2Mrh 59Tp7tDm6tLn6+v8/+z8/9js78jf4tDl583i4uHx8fD///H//8Xc29zt7PH9/P///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAQABAAAAd0gEGCg4SFhoeIgi8NAg0v iT4EFjtAPxgEPocLOj08njwwHYYhGTWmBqY2ECGFDTkusAOwLjcUhQEzJboHuiUoCoUMOCDE D8QgMRWFHhcnIs8RIiMJH4YOLSTZJCYsHIc+BRoyKTQIG5mIKxIAEyqJ7/Dx8IEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - notused' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallProjectIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAJWBiJWBiYl7jXJxk19knWBknmBknWBlnWNnmV9lnVZfnlFco1JdokVV qEVWqEpapYWRyDlPrTlQrD9UqihGsy5JsC9KsS9KsDVOrZK17JK27JK165K2653F8p3G8p7F 8p7G8qnW+anV+KnW+LHh/frpnvbflv/xwv/rs+zRi//lpP/aif/flv/Rdf/VfePBfdmycdCs eNGtedCsef///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADUALAAA AAAQABAAAAZ8wJpwSCwaj0iZUoYczmhQWuwYCABKJVPqBQN4vYGaAHIqm88niEA4QLnfcNRg iFDZ73gVYqhgsRIGBQaDBAcEBoA1DyuMDCSPkJALNRMuLg4jIiEjIZ2bDUIYLREfHx4gHyAd ICASQxUWGRkcGxobHLMXRRS8vb5NwMFGQQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPublishIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAL/F3UhgoExin1Fmm1hqmF5ulGV9sGRykXGEqmh1j292hHV8inmRu3WH qH6VuYSYtam/4LDI5bHI5YSQn2V9lLnS6c7g8LjT6bnT6VyFpU6PvVSLs8Hd7sDd7cHd7dTn 8sbk8Nfs9U1aXfrpnvrvwPbflv/xwv/11P301//rs//xyuzRi//lpP/tv//aif/flv/Rdf/V fePBfdmycffjy/vs4MnAwP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADgALAAA AAAQABAAAAaIQJwQN1kYh0jk5Faj0RZJoXEyIpVWsplxYeviBhAUykQuk08agDCRarvfqs3w wKrb7y25sPB6Ff6ABQ0PGw8NOAQuigQgjY4hGyEIXzExAx4dHZgcHh8bDkICMAIXpRcYFakW ejgBARGwsRKwDBlIrri5BjgUUb5CCr9JCsTEwkMiCiLHSMs4QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallPushpinIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEWIla4XMl2RmqmQmqgw dLpEdqpGd6tGeKs+hcQ+hMNdm86qyuSryuTF3/RdnM6EtNqEtdrN5PZanMxvtuKz2PBYtuhz xOyZ1PG64fa94vXZ7vny+//r+f/u+v/x+//1/P/4/f/r+v/u+//v+//x/P/y/P/1/f/4/v/3 /v+doaCdoqAAcjYAYS4AUicAlT41m1hytkl9tVGjyoGfp26qqperqZe3sY6/toj///8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABs 3AP9AAAAB3RJTUUH1gUREQgiKKvoswAAAJNJREFUeJx9z9kOgjAQheGi4F73XQsULVUr7UgV fP8nsxljgsT451x9F5MMedYif0Gb/BsU3PIqaFBgHAQtvzMc9a2yFq7awXS2WK42W2XAKjwa tP1ubzyAzGQlQkkxDzL7Ab7n3OOuNxQ0YUnC5owdCoQ73YljKMK1EA+EC02jNHKbRGeEJpUn GcvYrYFAKv349gU7qSnr237mhQAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallQuestionIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAP7+//Hy9fLz9czU3tvk7v3+/yhilkR2pF2JsV+KsWqSt2yUuHmdvpWy zKK701CAqvX7//r9/+jw9fT7//f8/+3y9fb8/+zy9fn9//z+//X8//j9//f9//v+//b9//// /yH5BAEAAB8ALAAAAAAQABAAAAWA4CeOZGk+j2Ggppg2hBAQzVo+cMHtHEA/JAOhQDiohETD CJfhJAyLmoGTaQA/D0Kk42DsUpwO4Wq4YDCRHcKAiEQqyk95Q+esFRj6JZ6lUHYqO38DVzh+ fw4OFh4WFFYjQhoaHCoaFhoEcS4wEDwQEz83BjASEjQ2LSgqLC2tJSEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallQuitIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAG2LuVx8qf797/342v332vvpoPzwvPzwvfvjkPvkkPvjkfvkkfzooPzp oPzoofvooPvoofzvvPvehfvfhvvgifvhifvdg72EFrF4E7qBFbZ8FbZ9FbqBFqluEKhuEKhu Ea1yErJ3E6ZrEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACMALAAA AAAQABAAAAZgwJFwSCwaj8UAAGlUFi+Xo3N4EUSbS+GFMIB6r1OOYWyIHMiZkVPzYDgahUcD Qt+olyEFArFYJP57GHdCIBQVh4aGFSCDQh0SEx8eHR+VQlNCIhYiUllDIpxYTKOkpUNBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRedoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPz62f385vz52f797/375v352f775vvws/vwtPvxtPvpnvvpn/vjke7Y i/vllvvll/vontzKi/von+rftPvehfvfifvgifvhjfvijc24dfvjkt7VudS2X8KpZtK/htfH mLaWSceubcOrcs68k7yDFb2EFryDFrB2Erd9FLN5E7J4E7uBFbV8FLyCFrl/FbmAFbuCFrqB FqxxEapvEapwEaluEahuEa90Eq50Eq1xEqxyErB2E6dsEP///wAAAAAAACH5BAEAAD0ALAAA AAAQABAAAAaBwJ5wSCwKPaWNcVmadIil0rI1MBFJVWNsMFkNV4MBrCiaBCIvV+ZlMBBeRFFE UAA0GoWCYI8afkIICAcJB4IJgQgsQykNEgsQkAsLCo4QKkIfJw6bmw+eDg87RB84HAynDBoa DDdLIyA6MhcXGDlLRDQWFTO3RDYUNb1EPDzCxj1BADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRemoteOpenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAPcAAAAAADRhqzpnsENwuE56v1R6tleCx12Iy36cyo9SGZ5fHZ5mJ6VsJK1s JK1yK61yL612NrR/Mrx/MqyFH7CKIbyFMrqXJsOFNsOLNvjQeJmv1K/B3OjQiPjQgPjYiPvf ifjYkPXfoPjgmPjomPjgoPzqr/josMDN5PXqxvjwyPP08P///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQABAAAAiLAP8JHEiwoMGD CBMq/HdAIYaHGA4gOGDhYIMVGCVqMFDCQsWBF0aMKFDghEkCKlJSoCCwQooUAQJsmDkAhc2V AiWY2GkiAAINAj5MmEAwQggSSCE8WMqU6T8HIKI+EEG1KlUOD/4x8ODhAdevX7EKVJDhQYez aM+KFZjgQYa3cN+uHbigrt27CxMGBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallRightFlushIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAJEAADk7iUNKh////wAAACH5BAEAAAIALAAAAAAQABAAAAIglI+pyw0cohSv pWqkntiajmwB5SGdqJHlB23qCq7yfBQAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallSaveAsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPj4/IOt8F17q157q117ql57qlVvmkBTc2F9qmJ9qcnb+rvL5OTp8WWB qWSAqMjc+snc+cDP5sHQ5sbU6MfU6M3Z6mWBqGuEp7LD27vM5MDQ5s7a6tXf7dXf7GqFp3CI pc3a6t3l78/T2Oru82+IpbnF0+Tq8XWMpHWMo/D1+u/y9Vh1kXqQo3uQot7r9u/1+t/s9vD1 +X+Tod7s9t/s9YOWoPD2+fP19oSXn+/2+YiZn4iZnrfDxnGDhoqbnrG9v6Wzrv79+uTPnf// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEMALAAAAAAQABAAAAekgEOCg4SFgiI+Pj0/jD89 iSKEPjc8QZaXPDc+hDoqPi8xKTY5KT4qO4Q4Iz4wLjAwMzQ+IzWEMgw+Qrq7PiYyhC0hGInE PhghLIQnHRwdzhzN0CiEJBsgIA7ZDhUbFR+EFxQTDgDlQg4TFB6EFhEaDg8QCkAOERINhAgZ Cw66K+cZMiQgVKIAgQICBhRYKGChoYcQDRkIMGRiRYoPDxgYopGjgUAAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:25'! smallSaveIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPj4/Fp5q1t5q1t6q1t5ql57qmF9qdzj7+zv9Ft6qmB+qWR/qGSAqGiC p5ey2bXO8rfJ47rL5L7O5cTS58nW6c7a68/a68/a6vDy9WyFprrM5LLD27vM5LLD2r7P5r/P 5cPS58PS5sjW6cnW6M/b687a6tXf7dXf7Nvj7uLo8GeDp2uFpnCIpcjW6M/b6ufs8s/T2LnF 09vk7uHo8Obs83OLpHeNo+zw9Fh1kXeOo3yQouLt93uQouHt9+zz+dvo8uHt9n+Todzp8uzz +PDz9dvp8uvz+IKVoIOWoPP19oWXn4aYn4iZn4iZnrfDxnGDhoqbnrG9v4qbnPb5+ff5+aWz rv79+uTPnf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFgALAAAAAAQABAAAAfcgFiCg4SFgjBQiU9RjIxP iVAwWE1JSU5WmJlWTpVMWEoYRFBUpFRTpFChS1hINwhQPrFDRrFQNzdHWEE0L1A9vz07QEBQ Ly9BWDwpM1BFP0VCP0JFUDMzOlg2MjJQV97fV1AHKDlYNSYnHZDrGycmNVgsLhYWLhcl9PQV JCUsWBkjKARkQJDgiBYiRqzA0mBCCBAMAEgEcIUBiIsqsCyQIOEDAwcgpUhh8MGDBAZYDESI oIHBg5dVqjBYyUEBlgIQcjL4hqNiTggFsMQYQCCBAAEEAghIkIDAUgKBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallScreenshotIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJnSURBVHjapFNdSFNhGH6+s6lF ZDcpONcWJv1M66buCvrBoi5WGAh5E7SIIiIoLxoliVLgipF00U00MoKgWLoGgWFlWIxAwuzP ag5duUZzbuds7sfOOV/n+04eSgKDXnh5v/c9z/u8z3nP+aCqKhZyWbpD5fwbKn8sp3Lqoh5/ 5QL+xUrqgehmuDrbAOWbHrUcthcgbMJ86wsO0Md9/Ube6W2G6/gj+NztIMtkUNHMSXzXdukE p4+dpcnsInTfPk9Yc8MeB4iSANWmESWm+SRowsPJhNopqOHlOnPFGZCuSz4a/jwGouU/ZKI/ 0MLO3TsMBfucFVzB9bYrMBUlKGXlONJ+iisAIxALquH+u09oaHjccE2hvrDpDnrwkFdf4NQJ jmV1YSYn8ynRaAL9DwbQsHcbHGttiH2KYPDhM+w/cFOT9hZY3KhPZAJNVVhC38HjCUGYFmfx fjSKzEzekMyIQqNhfJeLuNddD3dXBoFgAkJZHQKve0GFargO+8F6zYl0EaKUAfuesXgKS0uB sfAXrLRV42jzRgy+SsFutfBaZlbHwGTR0ONgveZkugBJyvLNRSIxQ4VjTQ3SxUqsr6vk+VA8 ySPHmLbyM+s15/MKUmKGF75OpviUVbUrYLVWaXWJ1/lZq81hbtyPIy8LYL3m0hIFopgFVSkK s4S/Alsk2wOTzYwRWlbX8HNOGyBqA3NFgPWSpqYOum6THex/ZHt4/nQCPb2tHMzIXo5Ejdc6 576FLdvtRv5haALEHximl68G8fulmCNbyFpOOv9+F3qCI/SCN/hHrbXFiUbnBjIfSyil+B/7 KcAAqaNmtdvCPngAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! smallSystemBrowserIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAAFx6qmB+rWaDsZGlx2yKt3KQunaUvv///yH5BAEAAAcALAAAAAAQABAA AAMqeLrc/jA6QOUCAxzDCxFBQ2mWQpYHOUojpn2haFbRWao01GYHXOeoICQBADs='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallUndoIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAPz62f385vz52f797/375v352f775vvws/vwtPvxtPvpnvvpn/vjke7Y i/vllvvll/vontzKi/von+rftPvehfvfifvgifvhjfvijc24dfvjkt7VudS2X8KpZtK/htfH mLaWScOrcs68k7yDFb2EFryDFrN5E7qAFbqBFbV8FLyCFrh+FatxEaluEa1zEqtxErB2E6Zr EKhtEadsEf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADQALAAA AAAQABAAAAaAQJpwSCwaj7QNyXMkkYidybNIGkyF1atwNBiUhqPJQEVEEQwGVOaEigQmoeFK QC8UGg1AQRCJ01IIgQkHCAeDgSEfNCYQCxIKCwsQk44NJkMwDw4PnA6enjCKQy4MGhoMqAwc LqJELBgXFy8vICJINC0VFi23RDMUMr1EMTHCxkEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallUpdateIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAABVlg1dmQ1dmB9nnSBonR9onTR0okqBplyMql2NqnOas1yNqmmUrXig tI+xwH6mtn6mtYStt53Cw53Cwp7CwqzSxqzTxbjhybjhyLnhyMHryv797/vwtPnolPvpnvnd evHag7eUJPHTc/vehfnNX72EFrB2Erh+FLN6E7uBFbqBFbd+FbuBFqluEKhuEKxxEahuEbB1 Eq91EqxxEqtxEq91E////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADYALAAA AAAQABAAAAZtQJtQWCoNj0jixpg8slKpzUbVFJ5AnCyns2qGRJ5w+INq1kYkmQkdq85ILxuN NKvaXDAhrCVkMPp2Ngwaf4N/TQkZGAgLGRcITQcRFpQVFREHTQYQExQSEg8GdgQNDgMFBYE2 AgoBqkMAAK92QQA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallWarningIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP7bc//egf/ij/7ijv/jl/7kl//mnv7lnv/uwf7CTP7DTf7DT/7IW//N a/7Na//NbP7QdP/dmbltAIJNAF03AMSAJMSCLKqASa2DS6uBSquCSrGHTq6ETbCHT7WKUrKI UcCVXL+UXMOYX8GWXsSZYMiib6+ETbOIUcOXX86uhd3Muf///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAA AAAQABAAAAZowJVwSCwaj0ihikRSJYcoBEL0XKlGkcjImQQhJBREKFnyICoThKeE/AAW6AXg dPyUAgrLJBEo0YsbAQyDhAEdRRwDDw8OaA4NDQImRBgFEJdglxAEGEQZKQcHBqOkKRpFF6mq q1WtrUEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! smallWindowIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGh2km95jm56jS1XjzBakTRdkzdgljxkmUBnnEBonERrn0Vsn0hvoklv oktxpUxypE50p091plF2qCtWjS1YjjBbkTlnnTdhlnh/iDlonj9wpXd/iD5wpUR2qkyBtU2B tVqTxVqUxWCbzWGbzY++5K3O6bnV7MHZ7k6c1Veg12Kn2m6t3XCu3YC24J/H59Xy//L7/+v5 /+76//H7/+n5/+36//T8/+Hp7Ov6//v+//X9//j+//v//4GGgYKFgI2NeY6MeZiTcqCZbKec aKCYbdnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAQABAAAAeXgEaCg4SFhoeGExMDFQUX BwgLDA8QEoMdKCgpKiwtJC4lJieWgooUBAUGBwkKDQ4RpEZDL7S1ti9Dg7MrvCs0vb65gkIv I0VFIjErxys4RINBLx7HHzIgNzchNUGDPy8Z2BYwHBrlM0CDPS8TNDQTOjo28To+gxvrihM7 +foYgwIvcuTgMZAHwYEBBgFYyLAhQ0QQIxoKBAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:26'! testGreenIcon ^ icons at: #'testGreenIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testGreenIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testGreenIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAAOASByKVCmPWi2UXkGZZ0qgbj+XYF+oej+YX0qbZVancGywgmywg2mr f3CxhV+qdGKqcHGxdnGxdYS/hIK9goS+hIK1f4i5gYi4gYm4gZjGkJe9iKvPmavPmLTSnf// /yH5BAEAAB8ALAAAAAAQABAAAAU/4CeOZGmeaKqupAMMzlo8nvYUKaNwfKcsKAClQpxQAKgA JBKRRCAB1AFxwWQuhkOKkNhYEoRVAyBosM7otDoEADs='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testNotRunIcon ^ icons at: #'testNotRunIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testNotRunIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testNotRunIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAyElEQVQ4je1ROw6DMBRzSh9i jbLwEUs4BAMSI4dmhgTOErGQgc9AOrUqUNQDtJYsPdmWZekBf7Aro+971zQNsixDFEXI8/xj 9qNY17ULggBxHGNZFgzDgHmeUVXVKX87ClprR0QIwxDbtuF5ExG01u5rgVIKnHNM07Qj5xxK qdPa+1EQQsBaC9/3d/q6rhBCnApOC6SUsNaCiHYcxxFSyu8FZVkyADDGwPM8OOdgjAFj7OW9 4/KNbdu6ruuQpimSJEFRFJfZX8cDTFpNEGq15bYAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testRedIcon ^ icons at: #'testRedIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRedIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testRedIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7ElEQVQ4je2RMU7DQBBF3+5G srSW1mA5Tp3KVEnhK8AF0iQVXAOfAM5CSwOCPmnTAXVSRCSWXGAJYjEUpCAsFhfIl6b58+fP Hw0c0Ioyz6WwVm4jJ2WeS5tO/UU+xbF0Q0twfsHnasX2/o7Xt5qTsvT02ts8HEisFcFkAh/v 6OMjgvGYWCvK4cBL4jkW1srl2SkY80OloGm4fnjkqq73Zjq/DfpG08znqCTZ42W9pm+8wP4J IxfxUlXotIfupt+V9niuKkYu+t8gWS6VARazKSoModmymE3p7HqeQxs2WSaFtXLjnGyyrPWN B8AX1+RFw2bQv8AAAAAASUVORK5CYII='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testRunnerIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAKIAAAAAgD9fvwCAgICAAICAgAAAAP///wAAACH5BAEAAAYALAAAAAAQABAA AAM0aLrc/pANECIDpdhFANhZtnzPh2kFAREZ0QnWqW4nAD8CIXyT5rAnRefhYww3QswNyXwk AAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/14/2013 16:27'! testYellowIcon ^ icons at: #'testYellowIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testYellowIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! testYellowIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVQ4je2RMUtCURTHf+/e q2AUD7SHYE4K4uDu0ODcd7At/BxOzm75QYqmxoRAdGgIiXg4PBqKGkSre8HTEIR6e/UF/MNZ fud/DufPgZ1S5SY16Xa0XJ8bcZOapPmC32BylZEov4cqnoF9YvV2yfPrkqMT5/nVNrDjihRC UNEprD7B5FFRm0L43ft3QW8wQ4ct5ONhrR7RYYveYOZda7ZBtQyyGBNkDje4uBeqZT+ul8ne Hsg0fqfeOAbkx3Z/d0O9kiPbnG/MeBGyzXmgFSTxEPQ+iCOJhxiNN/yn7Kgk3Y6Wi74ROyql vnEn+AKLwVPWIMle+gAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! toolsIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUyALJ5KP38+v313PjQgPjgoLCLIceLN8ymcKttJfjYkPjgmMabX6ttIrqX JqtnHbp/KO7z+OHr9/jomP3y141PFPrcmujQiP3v0ZxbF/zpv/jTh9e6lvDYkKh4SKNnHd7K s7eBNdiwcPzwzv3v1L2Wavrgqvrosrp5KODAePrlsPjYiNHf7sF/K/jQeJxhH/josPjwyIGY sv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAA AAAQABAAAAZ/QJlwSCwSDUiDseggNpcylkTCsaBCrGyW+IB5v+AH8fQqm88dIoDAJgDeoMVh fljIGIk8Q8E3iQSAAhsyHioqCIaGKRMFjQVCGC0IA5QDGiUjMQ0NMUIUCC2hoRUZFzEBAZ1C LqytJB8xEagRqlAxKxAQK7VLtyu/vL0xw1DFQQA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/11/2013 13:11'! traitIcon ^ icons at: #'traitIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self traitIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! traitIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwY AAACI0lEQVQ4ja2TS0uUURjHf+e9zatzaS6m42VCiFJBElG7I1hQixZ9g2jVImjTF+gjFARt 2kS0j2hTFmlRiZUWZKljg2maw2jNODPOxfdyWoQ6by2C6r98OP/fec55/o+QUlKribFl+frZ InMzq7iuRAjY39XIwOAe+o60Cn6RqAXcvjEh344vEQyZRBvqt+vf10oU8hV6D7Vx7mKfB6LV mp+PpOjqjtPUHKIuoG8famoJkUnneTGaApC1EA0gNfNNjg7P0dkb58Llw/iDhqdN23aZmvzK 3MwKo8NJjp1ol3s7YwJAAXh0L0lbIoxlu0y/X+HDuxXKG5tYlkMmXeDLfBbdVEFKfKbg8f2k 9wmfZlcpVSyM9TI3r72k3q9z5eoZNEPj7p1JPqdyBHeZlEoWqqaQ/JjxArLZEpvVKkIIbMeh kK9g+jQURRCJBZh8tczSQg4hBNWKjWPv/KMCEInUoxkGCBBCIITArNNRVUE4FsB2JFvTUlRB NOr3AroOxNE1BV3X0HQFRRVYlgNAecPGth10Q0XVBabpo2eg1Qs4dbaDXLZMMFRHvDlM78EE 0v15o2VvousqkQY/PsPHeq7C0aH234N06/ob+eTBLK1tYaKNOyEqFioszq9hmDpWVTJ4ch/n L/V7cwBsFeXIw1kc1wV2EtqwO0wmnWfodIfH7OlgSxNjy3L86QLTU2mKxSqBgI/unhb6jyf+ vAt/I+Wf3P8D8AOoI9lGL3q6bwAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! transcriptIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAPP1+/f4+zpOgUFWiENYi0pgklBmmFZtnmB3qF11pmZ/r1Rkg1dnhvb4 /FtriV9vjGR0kOHp+OHp91priGl6lWl5lG5+mHODnOXs+Onv+e3y+m5/mHeHn3eHnuHq+OHq 9+Ts+Pb4+ytcnCtalytYkytXkEZzrVp/r3KDm3aHn3eIn3aHnuDq9+Xt+O7z+vP2+ilvxClu wilsvilruipquilotSpotSlmsCpmsSpjrCpkqyphpithpipfoStfoStcmypalypblytblypY kypZkypXkCtYkCtXj3aIn/L2++3z+vb5/Pb5+8/t+////wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAE4ALAAAAAAQABAAAAejgE6Cg4SFgycwiYqLMCeD MQuRkpMLMYMyDE2am5sMMoMzE01MIQEhSw0hDQ40gzYPTQoJBgQCL0kADzWDNxBNLi5KwMAa EDiDORSxCggHBQMCGRU6gzsbTRggIBjZGC0WPIM9KE0sER8eERIRHhc+gz8pKR0pHCopK0jy IoMmQkJB/gUBImQEQBOGnJggMYQIwoQmjByReKREkRIlHibcyHFjIAA7'! ! !EclipseUIThemeIcons methodsFor: 'nautilus' stamp: 'EstebanLorenzano 5/10/2013 16:20'! uncommentedClassIcon ^ icons at: #'uncommentedClassIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self uncommentedClassIconContents readStream) ].! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! uncommentedClassIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAMQAAPR4e8gnL/Rmb/Nnb/NYY/JXY+mkqsgZKvLFyvTQ1PT3+8lHPvaSjsk6 OPaIhvaHh////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACH5BAEAABAALAAAAAAQABAAAAVHICSOSqmMKKogy4KcqbowzALHorI8jo2TDQCgccMpAoJB oBhTHAqEAzOlMLQMU+pB+ut6IYlW4qtz9LKkg5nbXW1fZNP3GwIAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! userIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOZsAN7p7OTq7K7G4cvb6ICcxff5+vL193CVze7y89bk6+Hp6+zx89bk6mmK ydDc5Vd2rKKyzHuTwd3l6Yum1EJmqEFqtW6Tzoibv73R5Y2iw4yhxOXr7/j6+lZwobjJ3eXq 77jI4Dpjr+Lo8sPR4aq+2MfY516HxoWbv9/m8ZSs0J+63pCv21V6wNrj7H6Wu9Pg6b3M2/// /9Pd6r/M3+ft8XyQttDa42qPy9fg556109Hb5KC63dnf6W+IuC1WqWKJydri55iszZ+63T5m sr3R5PP2+L/L4NXj6p611FVyqURin1FvpomewXeNtd3l6MzZ5HmZ0H2h1fL1+Kq+2X6d0sva 6Pb4+ZiqycbX5tzk6LjF2rzQ5dje55SnxjZfrVx/wWaMyYGYvU1rpOju8WmEt+3x9lJ/w3WP t9rj6Iam2Orv9ZGw2v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGwALAAAAAAQABAAAAe4gGyCEDUXgoeIhxABQBmG iYlXWToZTYdBPRGJXTYwWlxsMUYKOASaiBozPBNfDSI0TwRkqAgcEwAvBw1SMgQdh0wBtVRH JQcsKCAPhycBwlZQWAIHFAULCstsYc5OGwYWURXWCmgOvy4BEh/fAO3iYw4jHklnEt437QAM AxRFLR5TlhwCky/BgC0ChpQhkUPMoR/t9hERoCKEGiQplBwyASBBFQwChKzxAomNGYMgd6xI 46Oky0SBAAA7'! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/23/2013 10:52'! variable_viewIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///+LmKqdprJlfJkz TG9+bST8AAAAAXRSTlMAQObYZgAAADZJREFUeNpjYMANGB0YGBxBDBEBCGYwYREQYTEAMpwZ nRyZHVxcGJyBEswOyCJwNXBdcHOIAAD04waDcvfrWwAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! versionControlIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAIOKlPr8/2iOvGyRvm+Tv1J/sFaCs1aDs1qFtVuFtV+It1+Jt2OMuWSM uWiPvGuSvW+Uv019r018rlGAsdPl9Mzi86vS7bfY78Pe8fr9/4TA5pDG6J7M6vn9/9Xz/+n5 //D7//794v794/z4o/z4pPv1pP360P771cK0Osi5VvnqdPnqd/nqefnqe/nqf/z1x/PXP/LY R/LYSPLYSvfjYpmWg5mWhPPWPPLYTPrgYX91QsOnK8aqNfrdWoV4QKGafcCcHcOiJMOjJ8up L+/LQI58Pqugdea2GfrJLpiCO+WxGfG6JvG6J/rGK6yMNaOHOOO0PbKPNPfkuuvfxLd/C8KO JcGNJuOGCbF9OujYxOV5B////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFsALAAAAAAQABAAAAejgFuCg4SFhoMpQTtCQCmH gihNOSMsMksojzxIPSSVS1SPU1IvJTdHV1aCERMGCAoMAgMQIioxTKlbGhscFhcYFRQEIiuW VYISBQcJCw0ODwQhLTNLxltRHh5G2NhRIS441IJOHh9GH+cfTiYwSlpYgk81NgA/9T9PJzRE WEOCSR4gAIAYCCJJFixYoAwq4iEAgA4QMxQ55EOHxYs6fDzayLFjIAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! warningIconContents "Private - Method generated" ^ 'R0lGODlhEAAQANUAAP7bc//egf/ij/7ijv/jl/7kl//mnv7lnv/uwf7CTP7DTf7DT/7IW//N a/7Na//NbP7QdP/dmbltAIJNAF03AMSAJMSCLKqASa2DS6uBSquCSrGHTq6ETbCHT7WKUrKI UcCVXL+UXMOYX8GWXsSZYMiib6+ETbOIUcOXX86uhd3Muf///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACsALAAA AAAQABAAAAZowJVwSCwaj0ihikRSJYcoBEL0XKlGkcjImQQhJBREKFnyICoThKeE/AAW6AXg dPyUAgrLJBEo0YsbAQyDhAEdRRwDDw8OaA4NDQImRBgFEJdglxAEGEQZKQcHBqOkKRpFF6mq q1WtrUEAOw=='! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/15/2013 21:09'! widgetIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB+UlEQVQ4jaWTy2oUURRF17m3 qvqRdHce3ZqHMYLgRIJm4sCR0whx6CQ+JhkK+iuSoYJgvkDwA/wDcZpojGny7rTRdKU6Vffh oE3FJqAB9+ge2HuzDocL/ykBWH754ZVSsqgDdaGQMc5j/dKjF/eeBwBKyeLY1WFvTSYiCq31 b2MGIgQ6AMBai/cOrQO2Ng6fAb0C5w1ZLOJciLGGpNtGqYgoLCIipOkRxmcMFIfQKsRpEcQJ QM5srGNuYYb5x7PEnZSTJOPB01nmn9zm+Dgl6WTcf3iLuYUZTGbzdRRAGEYkSYf4uwMBZx3l apibyoMhWWpQBfjZMiQnMVpp+ggQy/rqDgD18SqNsSrd2IKDxniNkUsVAL6ubAMmjwWnD68c 3z7vcfPOBFeuNajUyuxutimUIsYmh4kKPWtzrQXanx7wjKBeHyE+SsDD5HSDyxPDbDUP2G62 GJ+qMzndAANJnDA6OnKeoFdnaa4eMnVjCIDdzTbFUsTs3etUagXWV9qIdv2RPwfRno21vXw+ 2Dtif/tH7mx+2cfLXwrKgxGtnc4ZXhDg/ZmlvR9TqZX7CvpWKBXLuDTl/dtPOGcpDUSIwLs3 H9FaoUMoRIXzBcY4771HRGSgGuVwFYboV4/GOe+ddS4v6HaT11sbflHri30ma5xP0+7Shcz/ 0i8hyMm9wAyCcQAAAABJRU5ErkJggg=='! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! windowIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAGh2km95jm56jS1XjzBakTRdkzdgljxkmUBnnEBonERrn0Vsn0hvoklv oktxpUxypE50p091plF2qCtWjS1YjjBbkTlnnTdhlnh/iDlonj9wpXd/iD5wpUR2qkyBtU2B tVqTxVqUxWCbzWGbzY++5K3O6bnV7MHZ7k6c1Veg12Kn2m6t3XCu3YC24J/H59Xy//L7/+v5 /+76//H7/+n5/+36//T8/+Hp7Ov6//v+//X9//j+//v//4GGgYKFgI2NeY6MeZiTcqCZbKec aKCYbdnZ2f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEYALAAAAAAQABAAAAeXgEaCg4SFhoeGExMDFQUX BwgLDA8QEoMdKCgpKiwtJC4lJieWgooUBAUGBwkKDQ4RpEZDL7S1ti9Dg7MrvCs0vb65gkIv I0VFIjErxys4RINBLx7HHzIgNzchNUGDPy8Z2BYwHBrlM0CDPS8TNDQTOjo28To+gxvrihM7 +foYgwIvcuTgMZAHwYEBBgFYyLAhQ0QQIxoKBAA7'! ! !EclipseUIThemeIcons methodsFor: 'private' stamp: 'EstebanLorenzano 5/10/2013 12:26'! workspaceIconContents "Private - Method generated" ^ 'R0lGODlhEAAQAOYAAMzFxqeantvb3v7+//39/t7f4vL1+aG41aS61iJDZ2ePupey0Km/2ER2 qkZ3q0l5rEl6rE19r1SCsu7y9v3+/9/o8Pr9/2iz4W214m+24ni65ITA5rrb8Pf8//X6/fL4 +/n9//j8/vv9/u/6/9Xz/9bz/+j4/+r5/+76//H7//j9//b7/en5/+z6/+36//T8//P7/vf9 //X7/fv+//b9//r+//n9/vf8/fz9/fv+/dvTobu0in91Qol6P4N3QZF+PYl6QJmCO5iCO66N NaiKN6GGOaCGOcu0drKPNLmcUPDYqOnEfvbmyJN8V5R/XZWBYJN4UY9pOI5pOI9sPpBwQ5Bw RJJ0So9pOamUj/W5rKmamLZ2b8CEfcikov////7+/v39/f///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGEALAAAAAAQABAAAAfBgGGCg4SFhodhW1tdiIRP W1lbjYJOBQBckg0Omg8REgsVTUwCWliCFxgXGRobHB9QTEoBUAiCmg0QCgwTVrFLVgYHgkgk JCUmFFQ6SktVXjlHgkMkLCghXlM7O1EDXzJJgkQkJzAiCVdSUV5gMi1EgkYkKCMhCQleXgQe KC5GgkIkUqSwgM8LjhUCUwgR9IPEixc0VKiwoeLhwx+CepCI0aGDChAgVMQYGQOIIB8kLFio MaOly5Y+BPGYSbNmzTCBAAA7'! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'EstebanLorenzano 10/11/2013 13:11' prior: 50339153! licenseString ^ 'LICENSE Licensed under the MIT License with parts under the Apache License. Copyright (c) 2008-2013 The Pharo Project, and Contributors Copyright (c) 2008-2013 Inria Copyright (c) 1996-2008 Viewpoints Research Institute, and Contributors Copyright (c) 1996 Apple Computer, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0 Pharo uses icons by Mark James (http://www.famfamfam.com) under Creative Commons Attribution 2.5 License. Pharo uses icons by Eclipse under Eclipse Public License - v 1.0 http://www.eclipse.org/legal/epl-v10.html Pharo uses Source Code Pro Fonts by Adobe under SIL Open Font License, v 1.1 http://scripts.sil.org/OFL '! ! "Polymorph-Widgets"! "System-Support"! ----End fileIn----! ----QUIT----an Array(11 October 2013 1:23:24 pm) Pharo.image priorSource: 19796904! ----STARTUP----an Array(11 October 2013 1:29:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 1:29:23 pm) Pharo-30470.image priorSource: 20756772! ----STARTUP----an Array(11 October 2013 2:01:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/11/2013 13:57' prior: 70128863! commentForCurrentUpdate ^ '11847 Some classes hold on to blocks statically: make sure #cleanUp resets those caches https://pharo.fogbugz.com/f/cases/11847'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/11/2013 13:58'! script126 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.635.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1640.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-EstebanLorenzano.950.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.87.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.13.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.948.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/11/2013 13:58'! update30471 "self new update30471" self withUpdateLog: '11847 Some classes hold on to blocks statically: make sure #cleanUp resets those caches https://pharo.fogbugz.com/f/cases/11847'. self loadTogether: self script126 merge: false. ContextPart initializeTryNamedPrimitiveTemplateMethod. SourceCodeProRegular new install. SourceSansProRegular new install. FreeTypeFontProvider current updateFromSystem. SourceCodeFonts setSourceCodeFonts: 10. self flushCaches. ! ! "ScriptLoader30"! !FLCompiledMethodCluster class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/11/2013 12:37'! cleanUp self initialize ! ! !Path class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/11/2013 12:54'! cleanUp absoluteWindowsPathRegex := nil.! ! !RBTransformationRule class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/11/2013 11:21'! cleanUp RecursiveSelfRule := nil.! ! !TextSelectionColor class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/11/2013 11:04'! cleanUp PrimarySelection := nil.! ! !TextEditor class methodsFor: 'class initialization' stamp: 'MarcusDenker 10/11/2013 12:34' prior: 52668305! initialize "Initialize the keyboard shortcut maps and the shared buffers for copying text across views and managing again and undo." " TextEditor initialize " self initializeCmdKeyShortcuts. self initializeShiftCmdKeyShortcuts. ! ! !KMRepository class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/11/2013 12:31'! cleanUp self reset! ! !RBTransformationRuleTest class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/11/2013 11:19'! cleanUp self nuke! ! !ContextPart class methodsFor: 'simulation' stamp: 'MarcusDenker 10/11/2013 13:13' prior: 50308664! initializeTryNamedPrimitiveTemplateMethod | source method | source := 'tryNamedPrimitive "This method is a template that the Smalltalk simulator uses to execute primitives. See Object documentation whatIsAPrimitive." ^ ContextPart primitiveFailTokenFor: errorCode'. method := Smalltalk compiler class: UndefinedObject; source: source; compile. TryNamedPrimitiveTemplateMethod := method copyWithSource: source. ! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/11/2013 10:56'! allMethods | methods | methods := OrderedCollection new. self allBehaviorsDo: [ :behavior | methods addAll: behavior methods ]. ^methods. ! ! !RBRefactoring class methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/11/2013 11:05'! cleanUp "RefactoringOptions holds on to blocks, we should make sure to recreate them so the block references the current method" self initializeRefactoringOptions.! ! "FileSystem-Core"! "Fuel"! "Kernel"! "Keymapping-Core"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Tests-Core"! "System-Support"! "Text-Edition"! ----End fileIn----! ----QUIT----an Array(11 October 2013 2:01:23 pm) Pharo.image priorSource: 20756977! ----STARTUP----an Array(11 October 2013 2:07:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 2:07:17 pm) Pharo-30471.image priorSource: 20770462! ----STARTUP----an Array(11 October 2013 2:52:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/11/2013 14:49' prior: 71088932! commentForCurrentUpdate ^ '11839 New L&F for Pharo30 (first iteration, second try) https://pharo.fogbugz.com/f/cases/11839 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/11/2013 14:49'! script127 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-MarcusDenker.640.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1640.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-EstebanLorenzano.950.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.87.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-MarcusDenker.163.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.13.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.151.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.949.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/11/2013 14:49'! update30472 "self new update30472" self withUpdateLog: '11839 New L&F for Pharo30 (first iteration, second try) https://pharo.fogbugz.com/f/cases/11839 '. self loadTogether: self script127 merge: false. SourceCodeProRegular new install. OpenSansRegular new install. FreeTypeFontProvider current updateFromSystem. SourceCodeFonts setSourceCodeFonts: 10. self flushCaches. ! ! "ScriptLoader30"! !OpenSansRegular commentStamp: '' prior: 0! http://www.google.com/fonts/specimen/Open+Sans Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.! !OpenSansRegular commentStamp: '' prior: 71113353! http://www.google.com/fonts/specimen/Open+Sans Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.! !OpenSansRegular class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/11/2013 14:39'! initialize self new install.! ! !OpenSansRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:39'! fontContents ^#[0 1 0 0 0 19 1 0 0 4 0 48 68 83 73 71 158 18 68 29 0 3 59 156 0 0 21 116 71 68 69 70 0 38 3 175 0 3 55 124 0 0 0 30 71 80 79 83 11 55 15 55 0 3 55 156 0 0 0 56 71 83 85 66 14 43 61 183 0 3 55 212 0 0 3 198 79 83 47 50 161 62 158 201 0 0 1 184 0 0 0 96 99 109 97 112 41 171 47 104 0 0 16 180 0 0 4 26 99 118 116 32 15 77 24 164 0 0 29 144 0 0 0 162 102 112 103 109 126 97 182 17 0 0 20 208 0 0 7 180 103 97 115 112 0 21 0 35 0 3 55 108 0 0 0 16 103 108 121 102 116 56 153 75 0 0 37 140 0 1 47 180 104 101 97 100 247 118 226 166 0 0 1 60 0 0 0 54 104 104 101 97 13 204 9 115 0 0 1 116 0 0 0 36 104 109 116 120 232 53 60 221 0 0 2 24 0 0 14 154 107 101 114 110 84 43 9 126 0 1 85 64 0 1 182 54 108 111 99 97 41 20 220 241 0 0 30 52 0 0 7 86 109 97 120 112 5 67 2 10 0 0 1 152 0 0 0 32 110 97 109 101 115 176 136 133 0 3 11 120 0 0 5 199 112 111 115 116 2 67 239 108 0 3 17 64 0 0 38 43 112 114 101 112 67 183 150 164 0 0 28 132 0 0 1 9 0 1 0 0 0 1 25 154 33 199 245 95 95 15 60 245 0 9 8 0 0 0 0 0 201 53 49 139 0 0 0 0 201 232 76 76 251 154 253 213 9 162 8 98 0 0 0 9 0 2 0 0 0 0 0 0 0 1 0 0 8 141 253 168 0 0 9 172 251 154 254 123 9 162 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 163 0 1 0 0 3 170 0 138 0 22 0 86 0 5 0 2 0 16 0 47 0 92 0 0 1 14 0 248 0 3 0 1 0 3 4 182 1 144 0 5 0 8 5 154 5 51 0 0 1 31 5 154 5 51 0 0 3 209 0 102 1 241 8 2 2 11 6 6 3 5 4 2 2 4 224 0 2 239 64 0 32 91 0 0 0 40 0 0 0 0 49 65 83 67 0 64 0 32 255 253 6 31 254 20 0 132 8 141 2 88 32 0 1 159 0 0 0 0 4 72 5 182 0 0 0 32 0 3 4 205 0 193 0 0 0 0 4 20 0 0 2 20 0 0 2 35 0 152 3 53 0 133 5 43 0 51 4 147 0 131 6 150 0 104 5 215 0 113 1 197 0 133 2 94 0 82 2 94 0 61 4 106 0 86 4 147 0 104 1 246 0 63 2 147 0 84 2 33 0 152 2 240 0 20 4 147 0 102 4 147 0 188 4 147 0 100 4 147 0 94 4 147 0 43 4 147 0 133 4 147 0 117 4 147 0 94 4 147 0 104 4 147 0 106 2 33 0 152 2 33 0 63 4 147 0 104 4 147 0 119 4 147 0 104 3 111 0 27 7 49 0 121 5 16 0 0 5 47 0 201 5 12 0 125 5 213 0 201 4 115 0 201 4 33 0 201 5 211 0 125 5 231 0 201 2 170 0 84 2 35 255 96 4 233 0 201 4 39 0 201 7 57 0 201 6 8 0 201 6 59 0 125 4 209 0 201 6 59 0 125 4 242 0 201 4 100 0 106 4 109 0 18 5 211 0 186 4 195 0 0 7 104 0 27 4 158 0 8 4 123 0 0 4 145 0 82 2 162 0 166 2 240 0 23 2 162 0 51 4 86 0 49 3 150 255 252 4 158 1 137 4 115 0 94 4 231 0 176 3 207 0 115 4 231 0 115 4 125 0 115 2 182 0 29 4 98 0 39 4 233 0 176 2 6 0 162 2 6 255 145 4 51 0 176 2 6 0 176 7 113 0 176 4 233 0 176 4 213 0 115 4 231 0 176 4 231 0 115 3 68 0 176 3 209 0 106 2 211 0 31 4 233 0 164 4 2 0 0 6 57 0 23 4 49 0 39 4 8 0 2 3 190 0 82 3 8 0 61 4 104 1 238 3 8 0 72 4 147 0 104 2 20 0 0 2 35 0 152 4 147 0 190 4 147 0 63 4 147 0 123 4 147 0 31 4 104 1 238 4 33 0 123 4 158 1 53 6 168 0 100 2 213 0 70 3 250 0 82 4 147 0 104 2 147 0 84 6 168 0 100 4 0 255 250 3 109 0 127 4 147 0 104 2 199 0 49 2 199 0 33 4 158 1 137 4 244 0 176 5 61 0 113 2 33 0 152 1 209 0 37 2 199 0 76 3 0 0 66 3 250 0 80 6 61 0 75 6 61 0 46 6 61 0 26 3 111 0 51 5 16 0 0 5 16 0 0 5 16 0 0 5 16 0 0 5 16 0 0 5 16 0 0 6 252 255 254 5 12 0 125 4 115 0 201 4 115 0 201 4 115 0 201 4 115 0 201 2 170 0 60 2 170 0 84 2 170 255 255 2 170 0 60 5 199 0 47 6 8 0 201 6 59 0 125 6 59 0 125 6 59 0 125 6 59 0 125 6 59 0 125 4 147 0 133 6 59 0 125 5 211 0 186 5 211 0 186 5 211 0 186 5 211 0 186 4 123 0 0 4 227 0 201 4 250 0 176 4 115 0 94 4 115 0 94 4 115 0 94 4 115 0 94 4 115 0 94 4 115 0 94 6 221 0 94 3 207 0 115 4 125 0 115 4 125 0 115 4 125 0 115 4 125 0 115 2 6 255 218 2 6 0 169 2 6 255 179 2 6 255 236 4 197 0 113 4 233 0 176 4 213 0 115 4 213 0 115 4 213 0 115 4 213 0 115 4 213 0 115 4 147 0 104 4 213 0 115 4 233 0 164 4 233 0 164 4 233 0 164 4 233 0 164 4 8 0 2 4 231 0 176 4 8 0 2 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 12 0 125 3 207 0 115 5 12 0 125 3 207 0 115 5 12 0 125 3 207 0 115 5 12 0 125 3 207 0 115 5 213 0 201 4 231 0 115 5 199 0 47 4 231 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 5 211 0 125 4 98 0 39 5 211 0 125 4 98 0 39 5 211 0 125 4 98 0 39 5 211 0 125 4 98 0 39 5 231 0 201 4 233 0 176 5 231 0 0 4 233 0 20 2 170 255 226 2 6 255 144 2 170 0 42 2 6 255 218 2 170 0 30 2 6 255 204 2 170 0 84 2 6 0 53 2 170 0 84 2 6 0 176 4 205 0 84 4 12 0 162 2 35 255 96 2 6 255 145 4 233 0 201 4 51 0 176 4 37 0 176 4 39 0 201 2 6 0 163 4 39 0 201 2 6 0 89 4 39 0 201 2 6 0 176 4 39 0 201 2 131 0 176 4 47 0 29 2 23 255 252 6 8 0 201 4 233 0 176 6 8 0 201 4 233 0 176 6 8 0 201 4 233 0 176 5 115 0 1 6 8 0 201 4 233 0 176 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 7 98 0 125 7 137 0 113 4 242 0 201 3 68 0 176 4 242 0 201 3 68 0 96 4 242 0 201 3 68 0 130 4 100 0 106 3 209 0 106 4 100 0 106 3 209 0 106 4 100 0 106 3 209 0 106 4 100 0 106 3 209 0 106 4 109 0 18 2 211 0 31 4 109 0 18 2 211 0 31 4 109 0 18 2 211 0 31 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 7 104 0 27 6 57 0 23 4 123 0 0 4 8 0 2 4 123 0 0 4 145 0 82 3 190 0 82 4 145 0 82 3 190 0 82 4 145 0 82 3 190 0 82 2 143 0 176 4 158 0 195 5 20 0 0 4 115 0 94 6 252 255 254 6 221 0 94 6 59 0 125 4 213 0 115 4 100 0 106 3 209 0 106 4 188 1 12 4 188 1 12 4 178 1 45 4 188 1 37 2 6 0 162 4 158 1 111 1 147 0 37 4 188 1 8 4 158 0 231 4 158 1 252 4 158 1 27 5 16 0 0 2 33 0 152 4 242 255 212 6 125 255 212 3 152 255 228 6 129 255 228 5 133 255 212 6 129 255 228 2 182 255 233 5 16 0 0 5 47 0 201 4 41 0 201 4 147 0 39 4 115 0 201 4 145 0 82 5 231 0 201 6 59 0 125 2 170 0 84 4 233 0 201 4 211 0 0 7 57 0 201 6 8 0 201 4 109 0 72 6 59 0 125 5 213 0 201 4 209 0 201 4 137 0 74 4 109 0 18 4 123 0 0 6 98 0 106 4 158 0 8 6 94 0 109 6 66 0 80 2 170 0 60 4 123 0 0 4 227 0 115 3 205 0 90 4 233 0 176 2 182 0 168 4 223 0 164 4 227 0 115 5 6 0 176 4 25 0 10 4 164 0 113 3 205 0 90 3 221 0 115 4 233 0 176 4 188 0 115 2 182 0 168 4 37 0 176 4 70 255 242 4 244 0 176 4 86 0 0 3 205 0 113 4 213 0 115 5 51 0 25 4 213 0 166 3 219 0 115 4 231 0 115 3 201 0 18 4 223 0 164 5 190 0 115 4 94 255 236 6 6 0 164 6 47 0 115 2 182 0 9 4 223 0 164 4 213 0 115 4 223 0 164 6 47 0 115 4 115 0 201 5 223 0 18 4 41 0 201 5 29 0 125 4 100 0 106 2 170 0 84 2 170 0 60 2 35 255 96 7 111 0 0 7 160 0 201 5 223 0 18 4 229 0 201 4 248 0 27 5 213 0 201 5 16 0 0 4 231 0 201 5 47 0 201 4 41 0 201 5 119 0 14 4 115 0 201 6 193 0 2 4 166 0 74 6 25 0 203 6 25 0 203 4 229 0 201 5 162 0 0 7 57 0 201 5 231 0 201 6 59 0 125 5 213 0 201 4 209 0 201 5 12 0 125 4 109 0 18 4 248 0 27 6 98 0 106 4 158 0 8 5 229 0 201 5 143 0 170 8 66 0 201 8 68 0 201 5 129 0 18 6 211 0 201 5 37 0 201 5 10 0 61 8 102 0 201 5 23 0 51 4 115 0 94 4 197 0 119 4 141 0 176 3 109 0 176 4 147 0 41 4 125 0 115 5 227 0 4 3 221 0 68 5 18 0 176 5 18 0 176 4 39 0 176 4 145 0 16 5 225 0 176 5 18 0 176 4 213 0 115 4 248 0 176 4 231 0 176 3 207 0 115 3 188 0 41 4 8 0 2 5 184 0 113 4 49 0 39 5 2 0 176 4 221 0 156 7 31 0 176 7 45 0 176 5 143 0 41 6 41 0 176 4 188 0 176 3 240 0 57 6 166 0 176 4 113 0 37 4 125 0 115 4 233 0 20 3 109 0 176 3 240 0 115 3 209 0 106 2 6 0 162 2 6 255 236 2 6 255 145 6 178 0 16 7 23 0 176 4 233 0 20 4 39 0 176 4 8 0 2 4 248 0 176 4 55 0 201 3 109 0 176 7 104 0 27 6 57 0 23 7 104 0 27 6 57 0 23 7 104 0 27 6 57 0 23 4 123 0 0 4 8 0 2 4 0 0 82 8 0 0 82 8 0 0 82 3 74 255 252 1 92 0 25 1 92 0 25 1 246 0 63 1 92 0 25 2 205 0 25 2 205 0 25 3 61 0 25 4 4 0 123 4 20 0 123 3 2 0 164 6 70 0 152 9 158 0 100 1 197 0 133 3 37 0 133 2 111 0 82 2 111 0 80 3 227 0 152 1 10 254 121 3 39 0 109 4 147 0 98 4 147 0 68 6 27 0 154 4 184 0 63 6 152 0 141 4 41 0 119 8 39 0 201 6 53 0 37 6 66 0 80 4 244 0 102 6 61 0 71 6 61 0 32 6 61 0 71 6 61 0 106 4 166 0 102 4 147 0 39 5 233 0 201 5 12 0 76 4 147 0 104 4 100 0 37 5 164 0 119 3 18 0 12 4 147 0 98 4 147 0 104 4 147 0 104 4 147 0 104 4 170 0 111 4 188 0 29 4 188 0 29 4 158 0 219 2 6 255 145 4 0 1 137 4 0 1 113 4 0 1 129 2 199 0 39 2 199 0 20 2 199 0 59 2 199 0 41 2 199 0 57 2 199 0 51 2 199 0 35 4 0 0 0 8 0 0 0 4 0 0 0 8 0 0 0 2 170 0 0 2 0 0 0 1 86 0 0 4 121 0 0 2 33 0 0 1 154 0 0 0 205 0 0 0 0 0 0 0 0 0 0 8 0 0 84 8 0 0 84 2 6 255 145 1 92 0 25 4 250 0 10 4 133 0 0 6 184 0 18 7 57 0 201 7 113 0 176 5 16 0 0 4 115 0 94 6 82 254 223 2 170 0 117 3 51 0 152 7 117 0 29 7 117 0 29 6 61 0 125 4 223 0 115 6 37 0 186 5 82 0 164 0 0 252 83 0 0 253 13 0 0 252 25 0 0 253 8 0 0 253 59 4 115 0 201 6 25 0 203 4 125 0 115 5 18 0 176 8 23 0 133 6 141 0 0 5 102 0 23 5 14 0 23 7 90 0 201 5 227 0 176 5 109 0 0 4 131 0 10 7 94 0 201 6 33 0 176 5 197 0 20 5 35 0 12 7 203 0 201 6 197 0 176 4 168 0 63 3 221 0 25 6 94 0 109 6 6 0 164 6 61 0 125 4 213 0 115 5 2 0 0 4 12 0 0 5 2 0 0 4 12 0 0 9 172 0 125 8 125 0 115 6 141 0 125 5 66 0 115 7 254 0 125 6 119 0 115 7 223 0 94 6 141 0 0 5 29 0 125 3 231 0 115 4 223 0 106 4 117 0 203 4 158 0 248 4 158 1 223 4 158 1 225 7 233 0 41 7 166 0 41 6 41 0 201 5 37 0 176 4 231 0 47 4 188 0 20 4 227 0 201 4 231 0 176 4 55 0 47 3 109 0 18 5 35 0 201 4 51 0 176 7 31 0 2 6 61 0 4 4 166 0 74 3 221 0 68 5 74 0 201 4 92 0 176 4 233 0 201 4 68 0 176 4 233 0 47 4 35 0 20 5 131 0 16 4 236 0 41 5 248 0 201 5 47 0 176 6 129 0 201 5 227 0 176 8 137 0 201 6 236 0 176 6 59 0 125 5 31 0 115 5 12 0 125 3 207 0 115 4 109 0 16 3 188 0 41 4 123 0 0 4 2 0 0 4 123 0 0 4 2 0 0 4 244 0 8 4 86 0 39 6 215 0 16 5 188 0 41 5 137 0 170 4 223 0 156 5 143 0 170 4 205 0 156 5 143 0 201 4 174 0 176 6 180 0 61 5 70 0 51 6 180 0 61 5 70 0 51 2 170 0 84 6 193 0 2 5 227 0 4 5 131 0 201 4 100 0 176 5 166 0 0 4 147 0 16 5 209 0 201 4 238 0 176 5 246 0 201 5 57 0 176 5 143 0 170 4 221 0 156 7 59 0 201 5 227 0 176 2 170 0 84 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 6 252 255 254 6 221 0 94 4 115 0 201 4 125 0 115 5 215 0 117 4 121 0 102 5 215 0 117 4 121 0 102 6 193 0 2 5 227 0 4 4 166 0 74 3 221 0 68 4 170 0 74 3 233 0 27 6 25 0 203 5 18 0 176 6 25 0 203 5 18 0 176 6 59 0 125 4 213 0 115 6 61 0 125 4 213 0 115 6 61 0 125 4 213 0 115 5 10 0 61 3 240 0 57 4 248 0 27 4 8 0 2 4 248 0 27 4 8 0 2 4 248 0 27 4 8 0 2 5 143 0 170 4 221 0 156 4 55 0 201 3 109 0 176 6 211 0 201 6 41 0 176 4 55 0 47 3 109 0 18 4 248 0 8 4 82 0 39 4 158 0 6 4 49 0 39 4 231 0 131 4 231 0 115 7 49 0 131 7 43 0 115 7 59 0 78 6 106 0 80 5 0 0 78 4 47 0 80 7 217 0 0 6 207 0 16 8 25 0 201 7 78 0 176 6 12 0 125 5 31 0 115 5 174 0 16 5 45 0 41 4 170 0 111 3 205 0 90 5 154 0 0 4 145 0 16 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 45 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 5 16 0 0 4 115 0 94 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 93 4 125 0 74 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 4 115 0 201 4 125 0 115 2 170 0 84 2 6 0 123 2 170 0 84 2 6 0 157 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 97 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 6 59 0 125 4 213 0 115 6 61 0 125 4 223 0 115 6 61 0 125 4 223 0 115 6 61 0 125 4 223 0 115 6 61 0 125 4 223 0 115 6 61 0 125 4 223 0 115 5 211 0 186 4 233 0 164 5 211 0 186 4 233 0 164 6 37 0 186 5 82 0 164 6 37 0 186 5 82 0 164 6 37 0 186 5 82 0 164 6 37 0 186 5 82 0 164 6 37 0 186 5 82 0 164 4 123 0 0 4 8 0 2 4 123 0 0 4 8 0 2 4 123 0 0 4 8 0 2 4 231 0 115 0 0 251 229 0 0 252 113 0 0 251 154 0 0 252 113 0 0 252 104 0 0 252 121 0 0 252 121 0 0 252 121 0 0 252 104 1 164 0 49 1 164 0 25 1 164 0 25 3 45 0 52 4 137 0 115 2 244 0 45 4 20 0 41 4 147 0 94 4 143 0 23 4 147 0 133 4 147 0 117 4 147 0 94 4 147 0 104 4 147 0 106 5 109 0 29 6 90 0 92 4 109 0 18 2 211 0 31 4 231 0 113 4 231 0 113 4 231 0 113 4 231 0 113 4 231 0 113 2 59 0 201 2 59 0 5 2 59 0 179 2 59 255 199 2 59 0 5 2 59 255 171 2 59 255 243 2 59 255 231 2 59 0 86 2 59 0 187 4 94 0 201 2 229 255 228 2 59 0 201 0 5 0 201 0 5 0 201 0 201 0 153 0 184 0 0 0 0 0 1 0 3 0 1 0 0 0 12 0 4 4 14 0 0 0 176 0 128 0 6 0 48 0 72 0 73 0 126 0 203 0 207 1 39 1 50 1 97 1 127 1 146 1 161 1 176 1 240 1 255 2 27 2 55 2 188 2 199 2 201 2 221 2 243 3 1 3 3 3 9 3 15 3 35 3 138 3 140 3 161 3 170 3 206 3 210 3 214 4 13 4 79 4 95 4 134 4 145 4 191 4 207 5 19 30 1 30 63 30 133 30 199 30 202 30 241 30 249 31 77 32 11 32 21 32 30 32 34 32 38 32 48 32 51 32 58 32 60 32 68 32 112 32 121 32 127 32 164 32 167 32 172 33 5 33 19 33 22 33 32 33 34 33 38 33 46 33 94 34 2 34 6 34 15 34 18 34 26 34 30 34 43 34 72 34 96 34 101 37 202 251 4 254 255 255 253 255 255 0 0 0 32 0 73 0 74 0 160 0 204 0 208 1 40 1 51 1 98 1 146 1 160 1 175 1 240 1 250 2 24 2 55 2 188 2 198 2 201 2 216 2 243 3 0 3 3 3 9 3 15 3 35 3 132 3 140 3 142 3 163 3 171 3 209 3 214 4 0 4 14 4 80 4 96 4 136 4 146 4 192 4 208 30 0 30 62 30 128 30 160 30 200 30 203 30 242 31 77 32 0 32 19 32 23 32 32 32 38 32 48 32 50 32 57 32 60 32 68 32 112 32 116 32 127 32 163 32 167 32 171 33 5 33 19 33 22 33 32 33 34 33 38 33 46 33 91 34 2 34 6 34 15 34 17 34 26 34 30 34 43 34 72 34 96 34 100 37 202 251 0 254 255 255 252 255 255 255 227 0 0 255 227 255 194 0 0 255 194 0 0 255 194 0 0 255 176 0 191 0 178 0 97 255 73 0 0 0 0 255 150 254 133 254 132 254 118 255 104 255 99 255 98 255 93 0 103 255 68 0 0 253 207 0 0 0 0 253 205 254 130 254 127 0 0 253 154 0 0 254 12 0 0 254 9 0 0 254 9 228 88 228 24 227 122 228 125 0 0 228 125 0 0 227 13 226 66 225 239 225 238 225 237 225 234 225 225 225 224 225 219 225 218 225 211 225 203 225 200 225 153 225 118 225 116 0 0 225 24 225 11 225 9 226 110 224 254 224 251 224 244 224 200 224 37 224 34 224 26 224 25 224 18 224 15 224 3 223 231 223 208 223 205 220 105 0 0 3 79 2 83 0 1 0 0 0 174 0 0 0 0 0 170 0 0 0 174 0 0 0 192 0 0 0 0 0 0 0 0 0 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 234 1 16 0 0 0 0 0 0 1 24 0 0 1 48 0 0 1 76 0 0 1 92 0 0 0 0 0 0 0 0 0 0 1 112 0 0 1 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 60 0 0 0 0 0 0 3 150 3 151 3 152 3 153 3 154 3 155 0 235 3 156 0 237 3 157 0 239 3 158 0 241 3 159 0 243 3 160 3 143 3 144 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 1 73 1 74 1 36 1 37 1 84 1 85 1 86 1 87 1 88 1 89 3 161 1 92 1 93 1 94 1 95 1 96 1 97 1 98 1 99 1 100 1 101 1 102 3 162 1 104 1 105 1 106 1 107 1 108 1 109 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 3 163 2 104 1 156 1 157 1 158 1 159 1 160 3 164 3 165 1 163 1 164 1 165 1 166 1 167 2 105 2 106 1 234 1 235 1 236 1 237 1 238 1 239 1 240 1 241 1 242 1 243 1 244 1 245 2 107 1 246 1 247 2 147 2 148 2 149 2 150 2 151 2 152 2 153 2 154 1 248 1 249 3 166 2 202 2 203 2 204 2 205 2 206 2 207 2 208 2 209 2 210 2 211 2 212 2 213 2 214 2 215 3 167 3 168 3 70 3 169 2 0 2 1 3 111 3 112 3 113 3 114 3 115 3 116 3 117 2 28 3 141 2 52 2 53 2 93 2 94 0 0 64 71 91 90 89 88 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 49 48 47 46 45 44 40 39 38 37 36 35 34 33 31 24 20 17 16 15 14 13 11 10 9 8 7 6 5 4 3 2 1 0 44 32 176 1 96 69 176 3 37 32 17 70 97 35 69 35 97 72 45 44 32 69 24 104 68 45 44 69 35 70 96 176 32 97 32 176 70 96 176 4 38 35 72 72 45 44 69 35 70 35 97 176 32 96 32 176 38 97 176 32 97 176 4 38 35 72 72 45 44 69 35 70 96 176 64 97 32 176 102 96 176 4 38 35 72 72 45 44 69 35 70 35 97 176 64 96 32 176 38 97 176 64 97 176 4 38 35 72 72 45 44 1 16 32 60 0 60 45 44 32 69 35 32 176 205 68 35 32 184 1 90 81 88 35 32 176 141 68 35 89 32 176 237 81 88 35 32 176 77 68 35 89 32 176 4 38 81 88 35 32 176 13 68 35 89 33 33 45 44 32 32 69 24 104 68 32 176 1 96 32 69 176 70 118 104 138 69 96 68 45 44 1 177 11 10 67 35 67 101 10 45 44 0 177 10 11 67 35 67 11 45 44 0 176 40 35 112 177 1 40 62 1 176 40 35 112 177 2 40 69 58 177 2 0 8 13 45 44 32 69 176 3 37 69 97 100 176 80 81 88 69 68 27 33 33 89 45 44 73 176 14 35 68 45 44 32 69 176 0 67 96 68 45 44 1 176 6 67 176 7 67 101 10 45 44 32 105 176 64 97 176 0 139 32 177 44 192 138 140 184 16 0 98 96 43 12 100 35 100 97 92 88 176 3 97 89 45 44 138 3 69 138 138 135 176 17 43 176 41 35 68 176 41 122 228 24 45 44 69 101 176 44 35 68 69 176 43 35 68 45 44 75 82 88 69 68 27 33 33 89 45 44 75 81 88 69 68 27 33 33 89 45 44 1 176 5 37 16 35 32 138 245 0 176 1 96 35 237 236 45 44 1 176 5 37 16 35 32 138 245 0 176 1 97 35 237 236 45 44 1 176 6 37 16 245 0 237 236 45 44 176 2 67 176 1 82 88 33 33 33 33 33 27 70 35 70 96 138 138 70 35 32 70 138 96 138 97 184 255 128 98 35 32 16 35 138 177 12 12 138 112 69 96 32 176 0 80 88 176 1 97 184 255 186 139 27 176 70 140 89 176 16 96 104 1 58 89 45 44 32 69 176 3 37 70 82 75 176 19 81 91 88 176 2 37 70 32 104 97 176 3 37 176 3 37 63 35 33 56 27 33 17 89 45 44 32 69 176 3 37 70 80 88 176 2 37 70 32 104 97 176 3 37 176 3 37 63 35 33 56 27 33 17 89 45 44 0 176 7 67 176 6 67 11 45 44 33 33 12 100 35 100 139 184 64 0 98 45 44 33 176 128 81 88 12 100 35 100 139 184 32 0 98 27 178 0 64 47 43 89 176 2 96 45 44 33 176 192 81 88 12 100 35 100 139 184 21 85 98 27 178 0 128 47 43 89 176 2 96 45 44 12 100 35 100 139 184 64 0 98 96 35 33 45 44 75 83 88 138 176 4 37 73 100 35 69 105 176 64 139 97 176 128 98 176 32 97 106 176 14 35 68 35 16 176 14 246 27 33 35 138 18 17 32 57 47 89 45 44 75 83 88 32 176 3 37 73 100 105 32 176 5 38 176 6 37 73 100 35 97 176 128 98 176 32 97 106 176 14 35 68 176 4 38 16 176 14 246 138 16 176 14 35 68 176 14 246 176 14 35 68 176 14 237 27 138 176 4 38 17 18 32 57 35 32 57 47 47 89 45 44 69 35 69 96 35 69 96 35 69 96 35 118 104 24 176 128 98 32 45 44 176 72 43 45 44 32 69 176 0 84 88 176 64 68 32 69 176 64 97 68 27 33 33 89 45 44 69 177 48 47 69 35 69 97 96 176 1 96 105 68 45 44 75 81 88 176 47 35 112 176 20 35 66 27 33 33 89 45 44 75 81 88 32 176 3 37 69 105 83 88 68 27 33 33 89 27 33 33 89 45 44 69 176 20 67 176 0 96 99 176 1 96 105 68 45 44 176 47 69 68 45 44 69 35 32 69 138 96 68 45 44 69 35 69 96 68 45 44 75 35 81 88 185 0 51 255 224 177 52 32 27 179 51 0 52 0 89 68 68 45 44 176 22 67 88 176 3 38 69 138 88 100 102 176 31 96 27 100 176 32 96 102 32 88 27 33 176 64 89 176 1 97 89 35 88 101 89 176 41 35 68 35 16 176 41 224 27 33 33 33 33 33 89 45 44 176 2 67 84 88 75 83 35 75 81 90 88 56 27 33 33 89 27 33 33 33 33 89 45 44 176 22 67 88 176 4 37 69 100 176 32 96 102 32 88 27 33 176 64 89 176 1 97 35 88 27 101 89 176 41 35 68 176 5 37 176 8 37 8 32 88 2 27 3 89 176 4 37 16 176 5 37 32 70 176 4 37 35 66 60 176 4 37 176 7 37 8 176 7 37 16 176 6 37 32 70 176 4 37 176 1 96 35 66 60 32 88 1 27 0 89 176 4 37 16 176 5 37 176 41 224 176 41 32 69 101 68 176 7 37 16 176 6 37 176 41 224 176 5 37 176 8 37 8 32 88 2 27 3 89 176 5 37 176 3 37 67 72 176 4 37 176 7 37 8 176 6 37 176 3 37 176 1 96 67 72 27 33 89 33 33 33 33 33 33 33 45 44 2 176 4 37 32 32 70 176 4 37 35 66 176 5 37 8 176 3 37 69 72 33 33 33 33 45 44 2 176 3 37 32 176 4 37 8 176 2 37 67 72 33 33 33 45 44 69 35 32 69 24 32 176 0 80 32 88 35 101 35 89 35 104 32 176 64 80 88 33 176 64 89 35 88 101 89 138 96 68 45 44 75 83 35 75 81 90 88 32 69 138 96 68 27 33 33 89 45 44 75 84 88 32 69 138 96 68 27 33 33 89 45 44 75 83 35 75 81 90 88 56 27 33 33 89 45 44 176 0 33 75 84 88 56 27 33 33 89 45 44 176 2 67 84 88 176 70 43 27 33 33 33 33 89 45 44 176 2 67 84 88 176 71 43 27 33 33 33 89 45 44 176 2 67 84 88 176 72 43 27 33 33 33 33 89 45 44 176 2 67 84 88 176 73 43 27 33 33 33 89 45 44 32 138 8 35 75 83 138 75 81 90 88 35 56 27 33 33 89 45 44 0 176 2 37 73 176 0 83 88 32 176 64 56 17 27 33 89 45 44 1 70 35 70 96 35 70 97 35 32 16 32 70 138 97 184 255 128 98 138 177 64 64 138 112 69 96 104 58 45 44 32 138 35 73 100 138 35 83 88 60 27 33 89 45 44 75 82 88 125 27 122 89 45 44 176 18 0 75 1 75 84 66 45 44 177 2 0 66 177 35 1 136 81 177 64 1 136 83 90 88 185 16 0 0 32 136 84 88 178 2 1 2 67 96 66 89 177 36 1 136 81 88 185 32 0 0 64 136 84 88 178 2 2 2 67 96 66 177 36 1 136 84 88 178 2 32 2 67 96 66 0 75 1 75 82 88 178 2 8 2 67 96 66 89 27 185 64 0 0 128 136 84 88 178 2 4 2 67 96 66 89 185 64 0 0 128 99 184 1 0 136 84 88 178 2 8 2 67 96 66 89 185 64 0 1 0 99 184 2 0 136 84 88 178 2 16 2 67 96 66 89 177 38 1 136 81 88 185 64 0 2 0 99 184 4 0 136 84 88 178 2 64 2 67 96 66 89 185 64 0 4 0 99 184 8 0 136 84 88 178 2 128 2 67 96 66 89 89 89 89 89 89 177 0 2 67 84 88 64 10 5 64 8 64 9 64 12 2 13 2 27 177 1 2 67 84 88 178 5 64 8 186 1 0 0 9 1 0 179 12 1 13 1 27 177 128 2 67 82 88 178 5 64 8 184 1 128 177 9 64 27 178 5 64 8 186 1 128 0 9 1 64 89 185 64 0 0 128 136 85 185 64 0 2 0 99 184 4 0 136 85 90 88 179 12 0 13 1 27 179 12 0 13 1 89 89 89 66 66 66 66 66 45 44 69 24 104 35 75 81 88 35 32 69 32 100 176 64 80 88 124 89 104 138 96 89 68 45 44 176 0 22 176 2 37 176 2 37 1 176 1 35 62 0 176 2 35 62 177 1 2 6 12 176 10 35 101 66 176 11 35 66 1 176 1 35 63 0 176 2 35 63 177 1 2 6 12 176 6 35 101 66 176 7 35 66 176 1 22 1 45 44 176 128 176 2 67 80 176 1 176 2 67 84 91 88 33 35 16 176 32 26 201 27 138 16 237 89 45 44 176 89 43 45 44 138 16 229 45 64 153 9 33 72 32 85 32 1 30 85 31 72 3 85 31 30 1 15 30 63 30 175 30 3 77 75 38 31 76 75 51 31 75 70 37 31 38 52 16 85 37 51 36 85 25 19 255 31 7 4 255 31 6 3 255 31 74 73 51 31 73 70 37 31 19 51 18 85 5 1 3 85 4 51 3 85 31 3 1 15 3 63 3 175 3 3 71 70 25 31 235 70 1 35 51 34 85 28 51 27 85 22 51 21 85 17 1 15 85 16 51 15 85 15 15 79 15 2 31 15 207 15 2 15 15 255 15 2 6 2 1 0 85 1 51 0 85 111 0 127 0 175 0 239 0 4 16 0 1 128 22 1 5 1 184 1 144 177 84 83 43 43 75 184 7 255 82 75 176 9 80 91 176 1 136 176 37 83 176 1 136 176 64 81 90 176 6 136 176 0 85 90 91 88 177 1 1 142 89 133 141 141 0 66 29 75 176 50 83 88 176 32 29 89 75 176 100 83 88 176 16 29 177 22 0 66 89 115 115 43 43 94 115 116 117 43 43 43 43 43 116 43 115 116 43 43 43 43 43 43 43 43 43 43 43 43 43 115 116 43 43 43 24 94 0 0 0 6 20 0 23 0 78 5 182 0 23 0 117 5 182 5 205 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 72 0 20 0 145 0 0 255 236 0 0 0 0 255 236 0 0 0 0 255 236 0 0 254 20 255 236 0 0 5 182 0 19 252 148 255 237 254 133 255 234 254 169 255 236 0 24 254 188 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 139 0 129 0 221 0 152 0 143 0 142 0 153 0 136 0 129 1 15 0 138 0 0 0 0 0 31 0 31 0 31 0 31 0 81 0 119 0 255 1 123 1 236 2 106 2 131 2 174 2 217 3 21 3 65 3 95 3 116 3 150 3 175 3 241 4 26 4 91 4 185 4 251 5 70 5 163 5 197 6 52 6 145 6 199 6 251 7 27 7 68 7 100 7 187 8 65 8 128 8 219 9 25 9 85 9 138 9 184 10 8 10 57 10 108 10 148 10 195 10 225 11 31 11 86 11 156 11 217 12 44 12 121 12 204 12 240 13 36 13 75 13 143 13 191 13 230 14 18 14 54 14 79 14 114 14 147 14 169 14 200 15 36 15 121 15 180 16 7 16 84 16 148 17 40 17 102 17 148 17 210 18 16 18 39 18 127 18 185 18 250 19 79 19 163 19 214 20 40 20 104 20 165 20 204 21 23 21 71 21 128 21 172 21 238 22 6 22 75 22 133 22 133 22 182 23 1 23 83 23 161 23 245 24 26 24 149 24 203 25 71 25 148 25 207 25 237 25 245 26 127 26 149 26 205 26 217 27 19 27 99 27 130 27 193 27 241 28 19 28 69 28 108 28 165 28 221 28 243 29 8 29 30 29 123 29 140 29 157 29 174 29 191 29 209 29 221 30 43 30 55 30 72 30 89 30 106 30 124 30 141 30 158 30 175 30 193 31 25 31 42 31 59 31 76 31 93 31 110 31 128 31 174 32 25 32 42 32 59 32 76 32 94 32 111 32 177 33 24 33 40 33 56 33 72 33 88 33 105 33 122 34 5 34 17 34 33 34 49 34 65 34 82 34 99 34 116 34 133 34 151 34 255 35 15 35 31 35 47 35 63 35 79 35 96 35 166 36 12 36 28 36 44 36 60 36 77 36 93 36 180 36 197 36 214 36 230 36 247 37 7 37 19 37 31 37 48 37 64 37 81 37 97 37 114 37 131 37 148 37 164 37 181 37 198 37 206 38 58 38 75 38 91 38 108 38 124 38 141 38 158 38 170 38 182 38 199 38 215 38 232 38 248 39 9 39 25 39 42 39 59 39 71 39 87 39 104 39 121 39 201 40 34 40 51 40 68 40 85 40 102 40 119 40 136 40 147 40 158 40 175 40 198 40 210 40 222 40 239 41 0 41 12 41 23 41 76 41 93 41 110 41 121 41 133 41 150 41 166 41 178 41 190 41 248 42 45 42 62 42 78 42 90 42 101 42 118 42 134 42 151 42 222 43 39 43 56 43 72 43 89 43 105 43 123 43 140 43 239 44 105 44 122 44 138 44 149 44 161 44 178 44 195 44 212 44 228 44 245 45 5 45 17 45 29 45 46 45 62 45 73 45 84 45 101 45 117 45 178 46 4 46 21 46 37 46 54 46 70 46 87 46 103 46 121 46 138 46 156 46 173 46 185 46 197 46 214 46 231 46 248 47 8 47 26 47 43 47 59 47 76 47 93 47 110 47 126 47 165 47 248 48 119 49 22 49 39 49 56 49 73 49 89 49 100 49 111 49 152 49 193 49 215 49 255 50 31 50 84 50 123 50 180 50 230 51 5 51 78 51 95 51 103 51 120 51 138 51 156 51 173 51 191 51 208 51 227 51 235 51 243 52 18 52 26 52 34 52 42 52 50 52 139 52 147 52 155 52 193 52 201 52 209 53 6 53 14 53 50 53 58 53 113 53 121 53 129 53 232 53 240 54 60 54 144 54 162 54 180 54 196 54 212 54 228 54 245 55 7 55 107 55 208 56 6 56 103 56 197 57 18 57 76 57 166 57 210 57 218 58 44 58 52 58 95 58 202 58 210 59 16 59 92 59 168 59 237 60 37 60 93 60 186 61 16 61 95 61 185 61 203 61 220 61 236 61 252 62 13 62 31 62 111 62 128 62 202 62 210 62 218 62 236 62 244 63 83 63 166 63 229 63 246 64 7 64 55 64 63 64 134 64 142 64 150 64 223 64 231 65 44 65 137 65 193 65 210 66 1 66 60 66 68 66 76 66 84 66 92 66 100 66 108 66 116 66 179 66 187 66 195 66 244 67 43 67 91 67 149 67 219 68 35 68 97 68 175 69 15 69 86 69 94 69 186 70 21 70 52 70 124 70 132 70 202 71 35 71 91 71 107 71 155 71 209 72 20 72 73 72 81 72 117 72 125 72 133 72 170 72 178 73 19 73 27 73 76 73 131 73 180 73 239 74 52 74 125 74 184 75 8 75 101 75 169 75 186 76 37 76 53 76 131 76 139 76 147 76 165 76 173 77 6 77 88 77 96 77 112 77 128 77 177 77 214 77 253 78 14 78 30 78 47 78 64 78 82 78 100 78 117 78 134 78 155 78 176 78 184 78 218 78 247 79 21 79 29 79 58 79 105 79 154 79 180 79 242 80 90 80 122 80 138 81 36 81 44 81 52 81 87 81 123 81 135 81 160 81 211 82 24 82 134 82 248 83 110 83 212 84 44 84 160 84 244 84 252 85 75 85 98 85 121 85 144 85 167 86 10 86 62 86 99 86 151 86 174 86 210 87 50 87 98 87 227 88 44 88 62 88 80 88 125 88 137 88 149 88 188 88 227 89 2 89 33 89 64 89 117 89 183 89 252 90 77 90 110 90 211 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 91 39 92 113 92 204 92 221 92 229 93 108 93 167 94 11 94 28 94 45 94 57 94 69 94 87 94 140 94 195 94 211 94 227 95 64 95 151 95 224 96 49 96 58 96 67 96 76 96 122 96 153 96 170 96 187 96 203 96 219 97 78 97 153 97 237 98 59 98 155 98 254 99 63 99 128 99 214 100 44 100 143 100 244 101 105 101 224 102 140 103 48 103 56 103 64 103 157 103 246 104 47 104 103 104 121 104 139 105 1 105 13 105 128 105 243 106 157 107 59 107 209 108 58 108 125 108 191 109 3 109 51 109 96 109 134 109 172 110 144 111 27 111 129 111 223 112 49 112 130 112 215 113 67 113 123 113 180 114 6 114 85 114 168 114 251 115 7 115 19 115 80 115 140 115 205 116 16 116 88 116 172 116 230 117 30 117 93 117 162 117 221 118 29 118 115 118 198 119 66 119 185 119 197 119 209 120 2 120 52 120 60 120 111 120 173 120 241 121 48 121 113 121 174 121 236 122 48 122 115 122 191 123 11 123 67 123 122 123 232 124 75 124 193 125 45 125 53 125 70 125 87 125 172 125 252 126 68 126 135 126 204 127 21 127 85 127 150 127 218 128 30 128 111 128 189 128 197 128 214 128 230 128 248 129 9 129 17 129 25 129 42 129 58 129 139 129 218 129 236 129 253 130 15 130 33 130 51 130 68 130 144 130 218 130 235 130 251 131 13 131 30 131 48 131 65 131 73 131 81 131 99 131 116 131 134 131 151 131 168 131 184 131 202 131 219 131 237 131 254 132 16 132 33 132 76 132 119 132 137 132 155 132 167 132 178 132 190 132 202 133 16 133 86 133 148 133 156 133 246 134 100 134 201 135 39 135 129 135 212 136 43 136 121 136 196 137 19 137 102 137 176 137 239 138 45 138 138 138 146 138 158 138 170 138 182 138 194 138 211 138 228 138 246 139 8 139 26 139 44 139 62 139 80 139 98 139 116 139 137 139 157 139 175 139 193 139 211 139 229 139 247 140 9 140 27 140 45 140 66 140 86 140 98 140 110 140 127 140 144 140 161 140 177 140 195 140 213 140 231 140 249 141 11 141 29 141 47 141 65 141 86 141 106 141 123 141 140 141 152 141 164 141 176 141 188 141 205 141 222 141 240 142 2 142 20 142 38 142 56 142 74 142 92 142 110 142 131 142 151 142 168 142 184 142 201 142 217 142 234 142 251 143 12 143 28 143 40 143 52 143 64 143 76 143 93 143 110 143 127 143 143 143 160 143 176 143 193 143 210 143 227 143 243 143 255 144 11 144 23 144 35 144 52 144 69 144 86 144 102 144 114 144 166 144 225 145 29 145 106 145 194 145 250 146 50 146 123 146 205 146 245 147 24 147 59 147 68 147 131 147 173 147 238 148 78 148 147 148 222 148 230 149 9 149 17 149 110 149 122 149 246 150 2 150 14 150 113 150 129 150 145 150 162 150 178 150 199 150 216 150 233 150 250 151 12 151 29 151 46 151 63 151 74 151 91 151 103 151 121 151 129 151 147 151 155 151 173 151 181 151 189 151 206 151 218 0 0 0 2 0 193 0 0 4 10 5 182 0 3 0 7 0 21 183 4 3 5 2 4 3 7 0 0 47 50 47 51 1 47 51 47 51 49 48 19 33 17 33 55 33 17 33 193 3 73 252 183 104 2 121 253 135 5 182 250 74 104 4 230 0 2 0 152 255 227 1 137 5 182 0 3 0 14 0 43 64 20 3 9 9 2 4 4 15 16 1 1 12 2 12 6 79 89 12 22 2 3 0 63 63 43 17 18 0 57 24 47 17 18 1 57 17 51 51 17 51 49 48 1 35 3 51 3 52 51 50 22 21 20 6 35 34 38 1 70 105 51 207 225 120 58 63 64 57 52 68 1 147 4 35 250 180 136 70 66 64 71 63 0 0 2 0 133 3 166 2 176 5 182 0 3 0 7 0 31 64 13 0 3 7 4 3 4 8 9 6 2 7 3 3 0 63 51 205 50 17 18 1 57 57 17 51 17 51 49 48 1 3 35 3 33 3 35 3 1 63 40 105 41 2 43 41 104 41 5 182 253 240 2 16 253 240 2 16 0 0 2 0 51 0 0 4 246 5 182 0 27 0 31 0 153 64 85 8 31 28 21 4 20 9 17 12 12 9 18 15 14 11 4 10 19 19 20 22 29 30 7 4 6 23 4 1 0 25 4 24 5 5 6 20 6 10 33 3 26 23 3 24 10 24 32 33 8 4 12 13 12 78 89 28 1 13 31 0 16 17 16 78 89 25 21 17 79 13 1 79 17 1 13 17 13 17 5 23 19 3 10 5 0 47 51 63 51 18 57 57 47 47 93 93 17 51 51 43 17 0 51 51 17 51 51 43 17 0 51 51 17 18 1 57 57 17 23 51 17 18 57 57 17 51 17 18 23 57 17 18 23 57 17 51 17 18 23 57 50 50 17 51 17 18 23 57 49 48 1 3 33 21 33 3 35 19 33 3 35 19 33 53 33 19 33 53 33 19 51 3 33 19 51 3 33 21 1 33 19 33 3 213 66 1 27 254 205 84 137 84 254 209 82 136 80 254 250 1 31 68 254 235 1 43 82 139 82 1 49 84 134 84 1 8 252 229 1 47 66 254 209 3 131 254 172 129 254 82 1 174 254 82 1 174 129 1 84 127 1 180 254 76 1 180 254 76 127 254 172 1 84 0 3 0 131 255 137 4 12 6 18 0 32 0 38 0 45 0 102 64 53 39 17 37 29 23 4 4 42 20 13 5 33 0 0 25 5 17 9 5 46 47 37 13 6 13 77 89 3 6 36 14 42 14 76 89 29 42 43 28 20 28 77 89 23 42 20 6 20 6 20 5 22 5 0 47 47 18 57 57 47 47 18 57 50 43 17 0 51 17 51 43 17 0 51 17 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 51 51 17 51 51 51 17 51 49 48 1 20 6 7 21 35 53 34 38 39 53 22 22 51 17 38 38 53 52 54 55 53 51 21 22 23 7 38 39 17 30 2 7 52 38 39 17 54 1 20 22 23 17 6 6 4 12 204 183 129 112 210 67 83 217 89 205 165 203 167 129 184 171 52 149 154 157 156 74 170 89 128 217 253 221 90 111 99 102 1 193 136 177 23 232 223 35 31 156 37 47 1 184 65 172 136 131 168 18 182 180 5 69 131 59 11 254 78 50 95 123 101 72 89 44 254 123 30 3 7 76 92 41 1 131 16 93 0 0 5 0 104 255 236 6 45 5 203 0 9 0 21 0 33 0 45 0 49 0 69 64 36 0 16 5 10 22 40 28 34 34 46 40 10 48 16 6 50 51 3 13 31 43 13 43 13 43 48 49 6 48 24 25 37 25 7 19 7 0 63 51 63 51 63 63 18 57 57 47 47 17 51 17 51 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 19 20 22 51 50 17 16 35 34 6 5 20 6 35 34 38 53 52 54 51 50 22 1 20 22 51 50 54 53 52 38 35 34 6 5 20 6 35 34 38 53 52 54 51 50 22 1 1 35 1 242 74 83 164 164 83 74 1 202 153 148 140 155 149 146 145 156 1 166 74 84 84 80 80 84 84 74 1 203 153 148 142 153 149 146 142 159 254 254 252 213 147 3 43 4 2 170 170 1 84 1 82 168 170 228 233 238 223 227 230 238 252 219 171 169 167 173 171 165 165 171 227 233 238 222 227 230 235 3 32 250 74 5 182 0 0 3 0 113 255 236 5 211 5 205 0 11 0 21 0 53 0 81 64 48 19 22 0 29 6 35 42 43 46 43 45 35 14 38 25 29 22 9 54 55 51 12 73 89 51 19 15 39 45 14 48 5 47 3 25 38 3 42 42 32 47 18 32 9 74 89 32 4 0 63 43 0 24 63 18 57 47 23 57 18 23 57 63 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 20 22 23 54 54 53 52 38 35 34 6 19 50 55 1 14 2 21 20 22 37 52 54 55 46 2 53 52 54 51 50 22 21 20 6 7 1 54 54 55 51 2 7 1 35 39 6 6 35 34 38 1 158 72 87 129 101 103 86 89 111 155 241 159 254 75 111 92 44 155 254 185 139 180 85 61 36 196 175 162 186 136 157 1 151 56 67 23 168 68 137 1 43 229 185 118 244 150 215 237 4 147 69 125 88 75 127 83 77 97 96 251 157 154 1 168 68 89 102 65 117 137 250 130 200 102 95 98 106 57 150 168 167 149 107 181 93 254 121 62 167 99 254 226 148 254 221 178 106 92 212 0 0 1 0 133 3 166 1 63 5 182 0 3 0 20 183 0 3 3 4 5 2 3 3 0 63 205 17 18 1 57 17 51 49 48 1 3 35 3 1 63 40 105 41 5 182 253 240 2 16 0 0 1 0 82 254 188 2 33 5 182 0 13 0 28 64 12 7 0 10 4 0 4 14 15 11 39 3 3 0 63 63 17 18 1 57 57 17 51 17 51 49 48 19 16 18 55 51 6 2 21 20 18 23 35 38 2 82 155 146 162 144 145 148 139 160 147 154 2 49 1 9 1 206 174 193 254 50 244 240 254 54 189 170 1 198 0 0 1 0 61 254 188 2 12 5 182 0 13 0 28 64 12 4 10 7 0 10 0 14 15 10 3 4 39 0 63 63 17 18 1 57 57 17 51 17 51 49 48 1 16 2 7 35 54 18 53 52 2 39 51 22 18 2 12 155 146 160 139 148 145 144 162 147 154 2 49 254 249 254 58 168 188 1 203 240 244 1 206 193 175 254 49 0 1 0 86 2 127 4 14 6 20 0 14 0 48 64 27 3 5 4 1 7 13 10 9 11 9 15 16 4 10 1 13 2 12 12 13 10 7 4 6 8 14 0 0 63 196 50 23 57 17 51 17 51 17 51 17 18 1 23 57 49 48 1 3 37 23 5 19 7 3 3 39 19 37 55 5 3 2 145 43 1 142 26 254 131 248 172 176 160 176 242 254 135 29 1 135 43 6 20 254 117 111 182 31 254 186 94 1 106 254 150 94 1 70 31 182 111 1 139 0 0 1 0 104 0 227 4 41 4 195 0 11 0 40 64 19 0 4 4 9 5 5 12 13 3 7 8 7 80 89 0 15 8 1 8 0 47 93 51 43 17 0 51 17 18 1 57 17 51 51 17 51 49 48 1 33 21 33 17 35 17 33 53 33 17 51 2 141 1 156 254 100 139 254 102 1 154 139 3 23 138 254 86 1 170 138 1 172 0 1 0 63 254 248 1 109 0 238 0 8 0 17 181 5 0 9 10 5 0 0 47 205 17 18 1 57 57 49 48 37 23 6 2 7 35 54 18 55 1 94 15 26 98 53 125 27 65 13 238 23 100 254 247 114 104 1 50 92 0 1 0 84 1 217 2 63 2 113 0 3 0 17 181 2 0 5 4 0 1 0 47 51 17 18 1 57 57 49 48 19 53 33 21 84 1 235 1 217 152 152 0 1 0 152 255 227 1 137 0 242 0 11 0 24 64 11 6 0 0 12 13 9 3 79 89 9 22 0 63 43 17 18 1 57 17 51 49 48 55 52 54 51 50 22 21 20 6 35 34 38 152 61 57 58 65 66 57 51 67 106 67 69 69 67 65 70 63 0 0 1 0 20 0 0 2 219 5 182 0 3 0 19 183 2 0 4 5 3 3 2 18 0 63 63 17 18 1 57 57 49 48 1 1 35 1 2 219 253 223 166 2 33 5 182 250 74 5 182 0 2 0 102 255 236 4 45 5 205 0 11 0 23 0 40 64 20 18 0 12 6 0 6 25 24 9 21 75 89 9 7 3 15 75 89 3 25 0 63 43 0 24 63 43 17 18 1 57 57 17 51 17 51 49 48 1 16 2 35 34 2 17 16 18 51 50 18 1 16 18 51 50 18 17 16 2 35 34 2 4 45 239 246 236 246 238 244 238 247 252 225 150 164 166 149 149 166 164 150 2 221 254 133 254 138 1 127 1 114 1 126 1 114 254 126 254 146 254 193 254 221 1 39 1 59 1 59 1 37 254 223 0 1 0 188 0 0 2 203 5 182 0 10 0 36 64 16 9 0 1 8 1 11 12 4 9 7 7 1 9 6 1 24 0 63 63 18 57 47 18 57 17 18 1 57 57 17 51 51 49 48 33 35 17 52 55 6 6 7 39 1 51 2 203 162 8 21 52 212 88 1 131 140 4 18 130 116 21 46 172 114 1 43 0 1 0 100 0 0 4 37 5 203 0 25 0 43 64 23 24 1 7 19 0 19 14 1 4 26 27 16 10 75 89 16 7 1 24 76 89 1 24 0 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 33 33 53 1 62 2 53 52 38 35 34 6 7 39 54 51 50 22 21 20 2 7 1 21 33 4 37 252 63 1 129 176 112 56 142 126 91 163 100 88 202 238 206 234 156 214 254 192 2 240 143 1 131 178 152 144 83 117 137 60 79 113 168 211 178 139 254 240 208 254 199 8 0 0 1 0 94 255 236 4 27 5 203 0 39 0 67 64 36 27 0 19 7 7 0 3 22 34 13 6 40 41 3 23 22 23 22 75 89 23 23 10 37 37 30 75 89 37 7 10 17 75 89 10 25 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 49 48 1 20 6 7 21 22 22 21 20 4 33 34 38 39 53 22 22 51 32 17 16 33 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 3 238 157 144 176 170 254 222 254 245 116 193 91 95 215 96 1 123 254 94 144 146 171 200 147 126 96 170 109 84 90 235 130 213 236 4 94 140 178 30 8 22 180 146 209 225 35 44 158 47 49 1 41 1 10 143 151 134 107 122 52 70 112 71 81 195 0 0 2 0 43 0 0 4 106 5 190 0 10 0 18 0 60 64 30 18 5 9 2 2 11 7 3 0 3 5 3 19 20 1 5 18 5 76 89 9 15 7 18 18 3 7 6 3 24 0 63 63 18 57 47 18 57 51 43 17 0 51 17 18 1 23 57 17 51 51 51 17 51 17 51 49 48 1 35 17 35 17 33 53 1 51 17 51 33 17 52 55 35 6 7 1 4 106 217 159 253 57 2 182 176 217 254 136 10 8 48 42 254 55 1 80 254 176 1 80 145 3 221 252 41 1 230 143 180 96 63 253 118 0 1 0 133 255 236 4 29 5 182 0 26 0 58 64 31 15 3 25 20 8 20 23 3 4 28 27 0 17 75 89 0 0 6 21 21 24 76 89 21 6 6 12 75 89 6 25 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 50 4 21 20 0 35 34 39 53 22 22 51 50 54 53 16 33 34 7 39 19 33 21 33 3 54 2 45 231 1 9 254 223 254 247 130 70 208 101 176 195 254 137 95 159 86 55 2 215 253 183 37 115 3 125 229 199 227 254 254 79 160 45 51 166 157 1 50 29 55 2 172 153 254 73 23 0 0 2 0 117 255 236 4 47 5 203 0 22 0 36 0 68 64 35 26 17 11 33 33 0 0 6 17 3 38 37 12 11 14 29 77 89 11 14 14 20 3 20 23 75 89 20 25 3 8 77 89 3 7 0 63 43 0 24 63 43 17 18 0 57 24 47 57 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 19 16 0 33 50 23 21 38 35 34 2 3 51 54 51 50 22 21 20 2 35 34 0 5 50 54 53 52 38 35 34 6 6 21 20 22 22 117 1 79 1 72 113 65 77 99 235 248 12 12 110 238 197 227 249 212 227 254 246 1 235 142 157 146 145 90 150 89 80 147 2 113 1 175 1 171 19 143 25 254 219 254 198 172 238 204 228 254 251 1 85 200 179 169 145 166 74 130 70 103 178 104 0 1 0 94 0 0 4 43 5 182 0 6 0 31 64 16 1 5 5 0 2 3 7 8 3 2 76 89 3 6 0 24 0 63 63 43 17 18 1 23 57 17 51 49 48 33 1 33 53 33 21 1 1 29 2 94 252 227 3 205 253 170 5 29 153 133 250 207 0 3 0 104 255 236 4 41 5 203 0 22 0 34 0 46 0 77 64 41 23 15 38 20 44 3 29 9 9 3 6 17 20 15 6 47 48 6 17 41 32 41 32 75 89 41 41 12 0 12 26 77 89 12 25 0 35 77 89 0 7 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 50 22 21 20 6 7 22 22 21 20 6 35 34 38 53 52 37 38 38 53 52 54 3 20 22 51 50 54 53 52 38 39 6 6 1 34 6 21 20 22 23 54 54 53 52 38 2 72 200 234 134 147 178 150 254 221 234 252 1 50 138 120 235 119 167 151 149 166 156 194 149 134 1 58 125 142 118 159 143 119 145 5 203 186 164 108 178 73 85 187 123 182 217 205 188 251 140 78 181 112 159 189 251 166 120 134 140 122 97 151 71 64 155 3 103 120 100 92 132 66 60 138 92 101 119 0 0 2 0 106 255 236 4 37 5 203 0 23 0 37 0 65 64 34 27 17 34 10 10 0 0 4 17 3 38 39 14 30 77 89 11 20 14 14 2 20 20 24 75 89 20 7 2 7 77 89 2 25 0 63 43 0 24 63 43 17 18 0 57 24 47 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 16 33 34 39 53 22 51 50 18 19 35 6 6 35 34 38 53 52 18 51 50 22 18 1 34 6 21 20 22 51 50 54 54 53 52 38 38 4 37 253 104 116 68 80 102 240 245 11 12 55 182 114 194 228 255 208 149 223 120 254 20 143 156 144 147 91 153 88 82 147 3 70 252 166 20 143 26 1 41 1 51 83 87 232 208 228 1 8 153 254 219 1 48 184 164 144 165 74 128 70 105 178 102 0 0 2 0 152 255 227 1 137 4 100 0 11 0 21 0 40 64 20 16 6 6 12 0 0 22 23 14 19 79 89 14 16 9 3 79 89 9 22 0 63 43 0 24 63 43 17 18 1 57 17 51 51 17 51 49 48 55 52 54 51 50 22 21 20 6 35 34 38 17 52 51 50 21 20 6 35 34 38 152 61 57 58 65 66 57 51 67 118 123 66 57 51 67 106 67 69 69 67 65 70 63 3 187 135 135 65 70 63 0 2 0 63 254 248 1 133 4 100 0 8 0 18 0 34 64 16 1 13 13 5 9 9 20 19 11 16 79 89 11 16 5 0 0 47 205 63 43 17 18 1 57 17 51 51 17 51 49 48 37 23 6 2 7 35 54 18 55 3 52 51 50 21 20 6 35 34 38 1 94 15 26 98 53 125 27 65 13 21 119 123 66 57 58 61 238 23 100 254 247 114 104 1 50 92 2 239 135 135 65 70 70 0 0 1 0 104 0 242 4 41 4 217 0 6 0 21 64 9 4 0 5 1 4 7 8 3 0 0 47 47 17 18 1 23 57 49 48 37 1 53 1 21 1 1 4 41 252 63 3 193 252 242 3 14 242 1 166 98 1 223 149 254 141 254 184 0 0 2 0 119 1 193 4 25 3 227 0 3 0 7 0 42 64 21 7 2 4 0 2 0 9 8 4 5 80 89 4 1 0 80 89 15 1 1 1 0 47 93 43 0 24 47 43 17 18 1 57 57 17 51 17 51 49 48 19 53 33 21 1 53 33 21 119 3 162 252 94 3 162 3 90 137 137 254 103 137 137 0 0 1 0 104 0 242 4 41 4 217 0 6 0 21 64 9 5 1 2 0 4 7 8 6 3 0 47 47 17 18 1 23 57 49 48 19 1 1 53 1 21 1 104 3 15 252 241 3 193 252 63 1 137 1 70 1 117 149 254 33 98 254 90 0 0 2 0 27 255 227 3 57 5 203 0 27 0 38 0 57 64 29 33 28 27 0 7 19 19 0 28 14 4 39 40 0 0 36 16 36 30 79 89 36 22 16 10 73 89 16 4 0 63 43 0 24 63 43 17 18 0 57 24 47 17 18 1 23 57 17 51 17 51 17 51 49 48 1 53 52 54 55 54 54 53 52 38 35 34 6 7 39 54 51 50 22 21 20 6 6 7 6 6 21 21 3 52 51 50 22 21 20 6 35 34 38 1 33 72 98 136 71 131 123 79 150 97 59 189 206 191 212 39 76 126 101 65 178 120 58 63 64 57 52 68 1 147 54 117 151 84 115 116 82 102 111 37 49 135 99 188 171 73 111 99 110 86 114 95 33 254 215 136 70 66 64 71 63 0 2 0 121 255 70 6 184 5 180 0 53 0 63 0 69 64 34 35 46 54 14 59 7 20 27 0 0 41 20 14 46 5 64 65 24 56 56 4 61 8 17 11 17 11 17 43 31 50 3 38 43 0 47 51 63 51 18 57 57 47 47 18 57 50 51 51 17 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 20 6 6 35 34 38 39 35 6 6 35 34 38 53 52 54 51 50 22 23 3 21 20 51 50 54 53 52 2 36 35 34 4 2 21 16 0 33 50 55 21 6 35 32 0 17 16 18 36 33 50 4 18 1 20 51 50 19 19 38 35 34 6 6 184 88 160 104 86 118 11 8 40 149 102 150 169 236 192 68 172 69 25 133 91 114 148 254 239 177 223 254 182 174 1 66 1 47 210 226 192 244 254 149 254 111 214 1 140 1 0 215 1 79 183 251 246 195 207 18 14 72 85 130 147 2 217 142 236 130 104 81 87 98 205 176 204 255 25 22 254 42 22 178 215 172 181 1 16 147 185 254 169 225 254 207 254 184 86 133 84 1 143 1 102 1 4 1 150 223 181 254 179 254 164 254 1 57 1 5 20 180 0 2 0 0 0 0 5 16 5 188 0 7 0 14 0 57 64 30 2 14 11 8 1 5 0 3 0 7 3 4 7 4 16 15 14 2 73 89 11 5 14 14 4 5 3 0 4 18 0 63 51 63 18 57 47 18 57 43 17 18 1 57 57 17 51 17 51 17 18 23 57 49 48 33 3 33 3 35 1 51 1 1 3 38 39 6 7 3 4 96 182 253 182 180 172 2 66 143 2 63 254 101 170 33 35 22 41 172 1 209 254 47 5 188 250 68 2 106 1 197 86 125 96 115 254 59 0 3 0 201 0 0 4 190 5 182 0 14 0 23 0 32 0 73 64 38 19 4 29 10 15 25 25 14 10 4 7 14 4 33 34 8 15 24 15 24 74 89 15 15 14 0 14 25 74 89 14 18 0 23 74 89 0 3 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 19 33 32 4 21 20 6 7 21 4 17 20 4 35 33 19 33 50 54 53 52 38 35 35 17 17 33 50 54 53 52 38 35 201 1 157 1 35 1 4 145 139 1 77 254 247 238 254 2 170 1 24 180 158 176 192 250 1 49 177 179 183 187 5 182 174 188 130 169 25 10 57 254 219 196 220 3 68 113 134 123 109 253 145 253 221 137 146 136 128 0 0 1 0 125 255 236 4 207 5 203 0 22 0 38 64 20 3 14 20 9 14 3 23 24 18 0 73 89 18 4 11 6 73 89 11 19 0 63 43 0 24 63 43 17 18 1 23 57 17 51 49 48 1 34 0 17 16 0 51 50 55 21 6 35 32 0 17 52 18 36 51 50 23 7 38 3 59 241 254 233 1 13 249 153 196 152 223 254 189 254 161 169 1 63 216 230 172 72 166 5 51 254 191 254 233 254 225 254 199 55 149 57 1 136 1 105 226 1 84 184 84 146 78 0 0 2 0 201 0 0 5 88 5 182 0 8 0 17 0 40 64 20 14 4 9 0 4 0 18 19 5 13 74 89 5 3 4 14 74 89 4 18 0 63 43 0 24 63 43 17 18 1 57 57 17 51 17 51 49 48 1 16 0 33 33 17 33 32 0 3 16 0 33 35 17 51 32 0 5 88 254 119 254 143 254 107 1 192 1 85 1 122 180 254 225 254 229 247 207 1 48 1 50 2 233 254 150 254 129 5 182 254 134 254 167 1 30 1 34 251 112 1 43 0 0 1 0 201 0 0 3 248 5 182 0 11 0 58 64 31 6 10 10 1 4 0 8 1 4 12 13 6 9 73 89 6 6 1 2 2 5 73 89 2 3 1 10 73 89 1 18 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 33 33 17 33 21 33 17 33 21 33 17 33 3 248 252 209 3 47 253 123 2 94 253 162 2 133 5 182 151 254 41 150 253 230 0 1 0 201 0 0 3 248 5 182 0 9 0 50 64 26 6 0 0 1 3 8 1 3 10 11 6 9 73 89 6 6 1 2 2 5 73 89 2 3 1 18 0 63 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 33 35 17 33 21 33 17 33 21 33 1 115 170 3 47 253 123 2 94 253 162 5 182 151 253 233 151 0 0 1 0 125 255 236 5 61 5 203 0 27 0 58 64 31 20 8 25 2 2 14 27 8 4 28 29 0 27 73 89 0 0 5 12 12 17 73 89 12 4 5 23 73 89 5 19 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 33 17 6 6 35 32 0 17 52 18 36 51 50 23 7 38 35 32 0 17 16 0 33 50 55 17 33 3 76 1 241 116 240 158 254 180 254 142 183 1 88 231 234 202 66 198 183 254 245 254 212 1 33 1 24 152 145 254 185 2 254 253 57 37 38 1 139 1 100 228 1 87 181 86 150 84 254 194 254 230 254 216 254 206 35 1 194 0 1 0 201 0 0 5 31 5 182 0 11 0 51 64 25 9 1 1 0 8 4 4 5 0 5 13 12 8 3 73 89 8 8 5 10 6 3 1 5 18 0 63 51 63 51 18 57 47 43 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 33 35 17 33 17 35 17 51 17 33 17 51 5 31 170 252 254 170 170 3 2 170 2 176 253 80 5 182 253 146 2 110 0 0 1 0 84 0 0 2 86 5 182 0 11 0 55 64 28 5 1 10 3 8 0 0 3 1 3 12 13 9 4 6 4 74 89 6 3 10 3 1 3 74 89 1 18 0 63 43 17 0 51 24 63 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 33 33 53 55 17 39 53 33 21 7 17 23 2 86 253 254 172 172 2 2 172 172 98 35 4 170 37 98 98 37 251 86 35 0 1 255 96 254 127 1 104 5 182 0 13 0 29 64 13 11 8 8 14 15 9 3 0 5 73 89 0 34 0 63 43 0 24 63 17 18 1 57 17 51 49 48 3 34 39 53 22 51 50 54 53 17 51 17 20 6 12 94 54 71 77 99 103 170 192 254 127 27 145 20 120 113 5 182 250 88 190 209 0 0 1 0 201 0 0 4 233 5 182 0 11 0 42 64 21 8 4 4 5 5 2 11 10 0 5 13 12 2 8 5 9 6 3 1 5 18 0 63 51 63 51 18 57 57 17 18 1 23 57 17 51 17 51 49 48 33 35 1 7 17 35 17 51 17 1 51 1 4 233 200 253 235 153 170 170 2 151 201 253 180 2 197 136 253 195 5 182 253 43 2 213 253 133 0 1 0 201 0 0 3 248 5 182 0 5 0 31 64 14 3 0 0 4 6 7 1 3 0 3 73 89 0 18 0 63 43 0 24 63 17 18 1 57 57 17 51 49 48 51 17 51 17 33 21 201 170 2 133 5 182 250 228 154 0 1 0 201 0 0 6 113 5 182 0 19 0 50 64 24 8 5 5 6 11 14 14 13 6 13 20 21 1 10 17 3 6 11 7 3 14 0 6 18 0 63 51 51 63 51 18 23 57 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 33 1 35 22 21 17 35 17 33 1 51 1 51 17 35 17 52 55 35 1 3 80 254 16 8 14 157 1 0 1 207 8 1 211 254 170 14 8 254 12 5 16 154 212 252 94 5 182 251 74 4 182 250 74 3 174 162 190 250 242 0 1 0 201 0 0 5 63 5 182 0 16 0 46 64 21 9 6 6 7 1 15 15 0 7 0 17 18 11 3 7 15 8 3 1 7 18 0 63 51 63 51 18 57 57 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 33 35 1 35 22 21 17 35 17 51 1 51 38 2 55 17 51 5 63 194 252 225 8 16 157 192 3 29 8 2 14 2 159 4 203 216 180 252 193 5 182 251 58 27 1 37 63 3 71 0 0 2 0 125 255 236 5 190 5 205 0 11 0 23 0 40 64 20 18 0 12 6 0 6 25 24 9 21 73 89 9 4 3 15 73 89 3 19 0 63 43 0 24 63 43 17 18 1 57 57 17 51 17 51 49 48 1 16 0 33 32 0 17 16 0 33 32 0 1 16 18 51 50 18 17 16 2 35 34 2 5 190 254 157 254 196 254 189 254 161 1 96 1 68 1 59 1 98 251 115 253 241 243 248 247 242 243 253 2 221 254 161 254 110 1 139 1 104 1 101 1 137 254 112 254 160 254 215 254 205 1 50 1 42 1 39 1 49 254 205 0 2 0 201 0 0 4 104 5 182 0 9 0 18 0 52 64 26 10 5 5 6 14 0 6 0 19 20 10 4 74 89 10 10 6 7 7 18 74 89 7 3 6 18 0 63 63 43 17 18 0 57 24 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 1 20 4 33 35 17 35 17 33 32 1 51 50 54 53 52 38 35 35 4 104 254 209 254 230 172 170 1 123 2 36 253 11 153 226 202 190 201 190 4 12 222 239 253 193 5 182 253 27 146 161 145 142 0 0 2 0 125 254 164 5 190 5 205 0 15 0 27 0 52 64 27 16 10 22 0 0 4 3 10 4 28 29 3 13 7 13 25 73 89 13 4 7 19 73 89 5 7 19 0 63 198 43 0 24 63 43 17 18 0 57 17 18 1 23 57 17 51 17 51 49 48 1 16 2 7 1 35 1 7 32 0 17 16 0 33 32 0 1 16 18 51 50 18 17 16 2 35 34 2 5 190 226 206 1 92 247 254 227 55 254 189 254 161 1 96 1 68 1 59 1 98 251 115 253 241 243 248 247 242 243 253 2 221 254 231 254 140 66 254 150 1 74 2 1 139 1 104 1 101 1 137 254 112 254 160 254 215 254 205 1 50 1 42 1 39 1 49 254 205 0 2 0 201 0 0 4 207 5 182 0 12 0 21 0 72 64 37 13 1 1 2 12 9 17 7 11 10 10 7 9 2 4 22 23 9 13 0 13 0 74 89 13 13 2 3 3 21 73 89 3 3 11 2 18 0 63 51 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 17 35 17 33 32 4 21 16 5 1 35 1 37 51 50 54 53 52 38 35 35 1 115 170 1 145 1 13 1 1 254 218 1 141 201 254 158 254 207 233 180 168 171 189 221 2 96 253 160 5 182 206 207 254 222 102 253 111 2 96 146 143 143 145 128 0 1 0 106 255 236 4 2 5 203 0 36 0 52 64 27 30 19 12 0 0 24 19 5 4 37 38 12 30 3 22 22 27 73 89 22 4 3 9 73 89 3 19 0 63 43 0 24 63 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 49 48 1 20 4 35 32 39 53 22 22 51 50 54 53 52 38 38 39 38 38 53 52 54 51 50 23 7 38 35 34 6 21 20 22 22 23 22 22 4 2 254 232 240 254 252 140 90 212 104 170 172 61 143 146 204 175 254 209 218 183 53 181 171 135 152 56 133 137 230 173 1 133 193 216 67 164 38 44 129 115 76 97 82 52 73 200 161 169 200 80 148 76 116 103 76 97 81 49 82 188 0 0 1 0 18 0 0 4 90 5 182 0 7 0 36 64 18 0 1 5 1 3 3 8 9 7 3 4 3 73 89 4 3 1 18 0 63 63 43 17 0 51 17 18 1 23 57 17 51 49 48 33 35 17 33 53 33 21 33 2 139 170 254 49 4 72 254 49 5 31 151 151 0 0 1 0 186 255 236 5 25 5 182 0 17 0 37 64 17 16 1 10 7 1 7 19 18 17 8 3 4 13 73 89 4 19 0 63 43 0 24 63 51 17 18 1 57 57 17 51 17 51 49 48 1 17 20 0 33 32 0 53 17 51 17 20 22 51 50 54 53 17 5 25 254 210 254 248 254 248 254 223 170 200 194 185 200 5 182 252 78 250 254 226 1 32 252 3 174 252 70 183 196 197 184 3 184 0 1 0 0 0 0 4 195 5 182 0 10 0 26 64 11 1 4 12 11 8 3 0 4 3 3 18 0 63 63 51 18 57 17 18 1 57 57 49 48 1 51 1 35 1 51 1 22 23 54 55 4 12 183 253 241 168 253 244 180 1 80 58 34 36 58 5 182 250 74 5 182 252 78 163 154 162 161 0 1 0 27 0 0 7 76 5 182 0 25 0 36 64 16 25 10 27 26 21 14 14 5 9 24 17 10 3 1 9 18 0 63 51 63 51 51 18 57 57 17 51 17 18 1 57 57 49 48 33 35 1 38 38 39 6 7 1 35 1 51 19 22 23 54 55 1 51 1 22 23 54 55 19 51 5 197 168 254 217 21 52 1 22 48 254 226 168 254 123 180 231 48 22 27 53 1 6 180 1 19 48 33 19 53 230 180 3 211 65 198 20 132 157 252 51 5 182 252 121 190 154 183 175 3 121 252 127 155 195 142 204 3 133 0 0 1 0 8 0 0 4 150 5 182 0 11 0 35 64 18 4 6 5 11 10 0 6 13 12 2 8 4 9 6 3 1 4 18 0 63 51 63 51 18 57 57 17 18 1 23 57 49 48 33 35 1 1 35 1 1 51 1 1 51 1 4 150 193 254 119 254 112 180 1 230 254 59 188 1 107 1 110 181 254 59 2 131 253 125 2 252 2 186 253 189 2 67 253 76 0 0 1 0 0 0 0 4 123 5 182 0 8 0 32 64 15 4 5 2 5 7 3 9 10 0 5 1 7 3 5 18 0 63 63 51 18 57 17 18 1 23 57 17 51 49 48 1 1 51 1 17 35 17 1 51 2 61 1 134 184 254 24 172 254 25 186 2 219 2 219 252 129 253 201 2 47 3 135 0 1 0 82 0 0 4 63 5 182 0 9 0 43 64 23 8 1 3 7 0 7 4 1 4 10 11 5 4 73 89 5 3 1 8 73 89 1 18 0 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 33 33 53 1 33 53 33 21 1 33 4 63 252 19 3 8 253 16 3 191 252 248 3 30 133 4 152 153 133 251 105 0 1 0 166 254 188 2 111 5 182 0 7 0 32 64 14 6 1 4 0 1 0 8 9 5 2 3 6 1 39 0 63 51 63 51 17 18 1 57 57 17 51 17 51 49 48 1 33 17 33 21 33 17 33 2 111 254 55 1 201 254 223 1 33 254 188 6 250 141 250 33 0 0 1 0 23 0 0 2 221 5 182 0 3 0 19 183 3 1 4 5 3 3 2 18 0 63 63 17 18 1 57 57 49 48 19 1 35 1 186 2 35 166 253 224 5 182 250 74 5 182 0 0 1 0 51 254 188 1 252 5 182 0 7 0 32 64 14 3 0 1 6 0 6 8 9 0 7 39 3 4 3 0 63 51 63 51 17 18 1 57 57 17 51 17 51 49 48 23 33 17 33 53 33 17 33 51 1 33 254 223 1 201 254 55 182 5 223 141 249 6 0 0 1 0 49 2 39 4 35 5 193 0 6 0 24 64 9 0 3 7 8 5 2 0 4 2 0 47 47 51 18 57 17 18 1 57 57 49 48 19 1 51 1 35 1 1 49 1 178 99 1 221 152 254 140 254 178 2 39 3 154 252 102 2 233 253 23 0 1 255 252 254 197 3 154 255 72 0 3 0 17 181 0 5 1 4 1 2 0 47 51 17 1 51 17 51 49 48 1 33 53 33 3 154 252 98 3 158 254 197 131 0 1 1 137 4 217 3 18 6 33 0 9 0 19 182 0 4 11 10 6 128 1 0 47 26 205 17 18 1 57 57 49 48 1 35 38 38 39 53 51 22 22 23 3 18 110 65 178 40 203 32 114 44 4 217 52 192 63 21 69 181 53 0 2 0 94 255 236 3 205 4 90 0 25 0 36 0 71 64 37 34 8 11 30 30 25 25 18 8 3 37 38 1 2 11 30 71 89 2 11 11 0 21 21 15 70 89 21 16 5 26 70 89 5 22 0 21 0 63 63 43 0 24 63 43 17 18 0 57 24 47 57 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 33 39 35 6 6 35 34 38 53 16 37 55 53 52 38 35 34 7 39 54 54 51 50 22 21 17 37 50 54 53 53 7 6 6 21 20 22 3 82 33 8 82 163 122 163 185 2 19 186 111 122 137 173 51 81 193 97 196 189 254 14 155 177 166 198 175 109 156 103 73 168 155 1 76 16 6 68 129 123 84 127 44 50 174 192 253 20 117 170 153 99 7 7 109 115 90 94 0 2 0 176 255 236 4 117 6 20 0 19 0 31 0 68 64 34 10 23 23 15 15 12 29 3 12 3 32 33 13 0 12 21 18 17 10 17 6 0 6 26 70 89 6 22 0 20 70 89 0 16 0 63 43 0 24 63 43 17 18 0 57 57 17 51 24 63 63 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 1 50 18 17 16 2 35 34 38 39 35 7 35 17 51 17 20 7 51 54 23 34 6 21 20 22 51 50 54 53 52 38 2 174 216 239 241 214 107 177 60 12 35 119 166 8 8 116 204 170 150 154 170 153 150 150 4 90 254 217 254 242 254 242 254 213 79 82 141 6 20 254 134 127 101 164 139 195 231 231 199 223 209 214 210 0 0 1 0 115 255 236 3 139 4 92 0 22 0 38 64 20 15 3 3 21 9 3 24 23 6 13 70 89 6 16 0 18 70 89 0 22 0 63 43 0 24 63 43 17 18 1 23 57 17 51 49 48 5 34 0 17 16 0 51 50 22 23 7 38 38 35 32 17 20 22 51 50 55 21 6 2 102 238 254 251 1 9 245 79 158 45 51 55 130 50 254 178 163 160 137 144 110 20 1 37 1 12 1 19 1 44 34 23 141 22 29 254 86 202 216 59 147 57 0 2 0 115 255 236 4 55 6 20 0 18 0 31 0 66 64 33 29 6 23 0 14 14 17 6 17 32 33 18 21 15 0 0 1 1 12 3 9 9 26 70 89 9 16 3 19 70 89 3 22 0 63 43 0 24 63 43 17 18 0 57 57 17 51 24 63 63 17 18 1 57 57 17 51 17 51 51 17 51 49 48 37 35 6 35 34 2 17 16 18 51 50 23 51 39 39 17 51 17 35 37 50 54 53 53 52 38 35 34 6 21 20 22 3 154 9 115 229 215 239 240 214 223 119 13 7 4 166 135 254 158 170 153 155 170 146 155 154 147 167 1 38 1 15 1 15 1 44 162 79 77 1 190 249 236 119 185 206 35 233 199 227 207 210 214 0 2 0 115 255 236 4 18 4 92 0 19 0 26 0 59 64 31 24 10 23 11 3 3 17 10 3 28 27 23 11 70 89 23 23 0 6 6 20 70 89 6 16 0 14 70 89 0 22 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 51 17 51 49 48 5 34 0 17 16 0 51 50 18 21 21 33 22 22 51 50 55 21 6 6 3 34 6 7 33 52 38 2 127 243 254 231 1 5 220 206 240 253 13 5 185 168 177 173 88 157 156 132 157 14 2 61 140 20 1 40 1 7 1 9 1 56 254 241 222 105 193 200 74 148 38 33 3 229 172 152 157 167 0 0 1 0 29 0 0 3 14 6 31 0 20 0 57 64 29 20 12 12 19 2 2 7 3 5 3 21 22 10 15 70 89 10 0 1 5 7 5 70 89 19 7 15 3 21 0 63 63 51 43 17 0 51 24 63 43 17 18 1 57 57 17 51 51 17 51 51 18 57 49 48 1 33 17 35 17 35 53 55 53 16 33 50 23 7 38 35 34 6 21 21 33 2 158 254 233 166 196 196 1 97 87 117 43 96 68 94 90 1 23 3 199 252 57 3 199 75 60 61 1 148 35 133 31 125 138 71 0 0 3 0 39 254 20 4 49 4 92 0 42 0 55 0 65 0 110 64 62 43 25 56 37 12 31 61 5 49 19 1 19 5 2 42 34 28 31 37 25 10 66 67 28 15 53 15 53 70 89 8 59 71 89 10 34 8 42 15 8 15 8 22 42 42 2 71 89 42 15 40 63 71 89 40 16 22 46 71 89 22 27 0 63 43 0 24 63 43 0 24 63 43 17 18 0 57 57 24 47 47 17 18 57 57 43 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 21 7 22 22 21 20 6 35 34 39 6 21 20 22 51 51 50 22 21 20 4 33 34 38 53 52 54 55 38 38 53 52 54 55 38 38 53 52 54 51 50 23 1 20 22 51 50 54 53 52 38 35 35 34 6 19 20 22 51 50 53 52 35 34 6 4 49 203 28 44 220 192 49 43 106 74 90 194 178 191 254 220 254 232 215 233 128 116 42 57 64 69 85 107 216 198 86 69 254 17 150 140 209 201 110 152 199 113 126 90 130 116 243 246 117 126 4 72 105 24 35 113 71 161 192 8 56 85 45 43 150 143 182 191 160 146 100 146 26 19 80 53 60 90 42 35 168 108 180 195 20 251 0 89 92 125 107 89 69 108 3 60 115 118 236 247 126 0 1 0 176 0 0 4 68 6 20 0 22 0 51 64 25 14 12 8 8 9 0 22 9 22 23 24 14 9 18 18 4 70 89 18 16 10 0 0 9 21 0 63 51 63 63 43 17 18 0 57 17 18 1 57 57 17 51 17 51 17 51 51 49 48 33 17 52 38 35 34 6 21 17 35 17 51 17 20 7 51 54 54 51 50 22 21 17 3 158 122 130 173 159 166 166 8 10 49 181 116 201 201 2 197 134 132 188 214 253 195 6 20 254 41 85 56 79 91 191 208 253 53 0 0 2 0 162 0 0 1 102 5 223 0 3 0 15 0 35 64 17 10 0 0 4 1 1 16 17 13 7 72 89 13 2 15 1 21 0 63 63 206 43 17 18 1 57 17 51 51 17 51 49 48 33 35 17 51 3 52 54 51 50 22 21 20 6 35 34 38 1 86 166 166 180 56 42 40 58 58 40 42 56 4 72 1 41 57 53 54 56 56 55 55 0 0 2 255 145 254 20 1 102 5 223 0 12 0 24 0 44 64 22 19 11 11 13 8 8 25 26 22 16 72 89 22 64 9 15 0 5 70 89 0 27 0 63 43 0 24 63 26 206 43 17 18 1 57 17 51 51 17 51 49 48 19 34 39 53 22 51 50 54 53 17 51 17 16 3 52 54 51 50 22 21 20 6 35 34 38 43 95 59 69 67 78 73 166 180 56 42 40 58 58 40 42 56 254 20 25 135 20 85 87 4 252 251 16 254 188 7 93 57 53 54 56 56 55 55 0 1 0 176 0 0 4 29 6 20 0 16 0 54 64 27 16 14 10 10 11 11 8 6 4 5 8 4 17 18 12 0 0 16 16 8 8 3 7 11 21 3 15 0 63 63 51 18 57 47 57 17 51 63 17 18 1 23 57 17 57 17 51 17 51 51 49 48 1 54 55 1 51 1 1 35 1 7 17 35 17 51 17 20 7 1 84 43 88 1 98 197 254 68 1 219 201 254 125 125 164 164 8 2 49 61 99 1 119 254 45 253 139 2 6 108 254 102 6 20 252 199 55 115 0 1 0 176 0 0 1 86 6 20 0 3 0 22 64 9 0 1 1 4 5 2 0 1 21 0 63 63 17 18 1 57 17 51 49 48 33 35 17 51 1 86 166 166 6 20 0 1 0 176 0 0 6 203 4 92 0 35 0 70 64 35 21 17 17 18 8 9 0 35 9 18 35 3 36 37 28 22 21 21 18 25 4 13 25 13 70 89 31 25 16 19 15 9 0 18 21 0 63 51 51 63 63 51 43 17 0 51 17 18 57 24 47 51 51 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 33 17 52 38 35 34 6 21 17 35 17 52 38 35 34 6 21 17 35 17 51 23 51 54 54 51 32 23 51 54 54 51 50 22 21 17 6 37 112 118 155 148 166 112 119 156 145 166 135 27 8 47 171 106 1 1 79 8 49 186 119 186 185 2 201 131 131 178 185 253 156 2 201 131 131 187 213 253 193 4 72 150 80 90 186 86 100 191 210 253 53 0 0 1 0 176 0 0 4 68 4 92 0 20 0 49 64 24 0 20 12 8 8 9 20 9 22 21 12 9 16 16 4 70 89 16 16 10 15 0 9 21 0 63 51 63 63 43 17 18 0 57 17 18 1 57 57 17 51 17 51 17 51 49 48 33 17 52 38 35 34 6 21 17 35 17 51 23 51 54 54 51 50 22 21 17 3 158 122 130 172 160 166 135 27 8 51 184 113 198 200 2 197 134 132 186 214 253 193 4 72 150 81 89 191 210 253 53 0 2 0 115 255 236 4 98 4 92 0 12 0 24 0 40 64 20 19 0 13 7 0 7 26 25 10 22 70 89 10 16 3 16 70 89 3 22 0 63 43 0 24 63 43 17 18 1 57 57 17 51 17 51 49 48 1 16 0 35 34 38 2 53 16 0 51 50 0 1 20 22 51 50 54 53 52 38 35 34 6 4 98 254 242 238 147 228 124 1 12 238 230 1 15 252 189 168 163 163 169 169 165 163 166 2 37 254 244 254 211 138 1 2 173 1 12 1 43 254 206 254 251 210 220 219 211 209 217 214 0 2 0 176 254 20 4 117 4 92 0 20 0 33 0 63 64 32 25 11 4 7 7 8 31 18 8 18 34 35 4 11 0 15 15 21 70 89 15 16 9 15 8 27 0 28 70 89 0 22 0 63 43 0 24 63 63 63 43 17 18 0 57 57 17 18 1 57 57 17 51 17 51 17 51 51 51 49 48 5 34 38 39 35 22 21 17 35 17 51 23 51 54 54 51 50 18 17 16 2 3 34 6 7 21 20 22 51 50 54 53 52 38 2 174 107 177 60 12 12 166 135 23 8 64 170 110 218 237 241 238 168 150 2 154 170 142 161 161 20 79 82 96 86 254 61 6 52 150 90 80 254 214 254 243 254 242 254 213 3 227 186 203 37 231 199 230 202 205 219 0 2 0 115 254 20 4 55 4 92 0 12 0 31 0 68 64 34 10 16 29 22 3 26 26 25 16 25 32 33 26 27 23 15 29 30 30 22 13 19 19 7 70 89 19 16 13 0 70 89 13 22 0 63 43 0 24 63 43 17 18 0 57 57 17 51 24 63 63 17 18 1 57 57 17 51 17 51 51 51 17 51 49 48 37 50 54 55 53 52 38 35 34 6 21 20 22 23 34 2 17 16 18 51 50 23 51 55 51 17 35 17 52 55 35 6 2 78 166 152 5 156 169 146 155 153 125 212 238 240 214 225 121 9 24 131 166 11 13 115 119 178 211 37 230 202 227 207 207 217 139 1 42 1 11 1 13 1 46 170 150 249 204 1 213 100 70 167 0 1 0 176 0 0 3 39 4 92 0 16 0 42 64 20 13 9 9 10 10 2 17 18 11 15 13 0 10 21 0 5 70 89 0 16 0 63 43 0 24 63 18 57 63 17 18 1 57 57 17 51 17 51 49 48 1 50 23 7 38 35 34 6 21 17 35 17 51 23 51 54 54 2 164 73 58 23 68 52 133 189 166 137 19 8 61 172 4 92 12 154 15 216 161 253 180 4 72 203 107 116 0 1 0 106 255 236 3 115 4 92 0 36 0 54 64 28 30 19 12 0 0 24 5 19 4 37 38 12 30 3 22 22 27 70 89 22 16 6 3 9 70 89 3 22 0 63 43 0 24 47 63 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 49 48 1 20 6 35 34 39 53 22 22 51 50 54 53 52 38 39 46 2 53 52 54 51 50 23 7 38 35 34 6 21 20 22 22 23 22 22 3 115 228 206 218 122 79 181 84 130 140 111 161 153 129 63 218 190 177 169 59 165 134 118 120 45 100 142 195 137 1 43 153 166 69 154 40 46 83 85 64 91 62 57 85 108 75 134 155 72 135 68 74 65 44 62 56 53 71 144 0 1 0 31 255 236 2 168 5 70 0 22 0 52 64 27 16 20 20 9 11 9 18 3 4 24 23 10 19 16 19 71 89 14 64 16 15 7 0 70 89 7 22 0 63 43 0 24 63 26 205 43 17 0 51 17 18 1 23 57 17 51 17 51 49 48 37 50 54 55 21 6 6 35 32 17 17 35 53 55 55 51 21 33 21 33 17 20 22 2 18 44 82 24 27 105 42 254 194 157 157 70 96 1 62 254 194 94 117 13 7 127 13 17 1 79 2 140 80 69 234 254 129 253 123 99 106 0 0 1 0 164 255 236 4 57 4 72 0 20 0 52 64 25 1 19 7 12 12 10 19 10 21 22 12 13 13 16 8 20 15 16 4 70 89 16 22 11 21 0 63 63 43 0 24 63 51 18 57 17 51 17 18 1 57 57 17 51 17 51 17 51 49 48 1 17 20 22 51 50 54 53 17 51 17 35 39 35 6 6 35 34 38 53 17 1 76 122 130 172 159 166 137 24 9 51 181 116 200 199 4 72 253 57 134 132 188 213 2 64 251 184 147 81 86 190 209 2 205 0 0 1 0 0 0 0 4 2 4 72 0 11 0 24 64 10 1 10 12 13 5 9 1 15 0 21 0 63 63 51 57 17 18 1 57 57 49 48 33 1 51 19 22 23 51 54 18 19 51 1 1 160 254 96 178 236 80 14 8 11 117 204 178 254 96 4 72 253 118 228 68 53 1 77 2 48 251 184 0 1 0 23 0 0 6 35 4 72 0 28 0 44 64 20 9 27 29 30 23 22 14 13 3 4 13 4 8 26 18 9 15 0 8 21 0 63 51 63 51 51 18 57 57 17 51 17 51 51 51 17 18 1 57 57 49 48 33 3 38 39 35 6 7 3 35 1 51 18 18 23 51 54 54 55 19 51 19 22 23 51 54 54 19 51 1 4 47 201 19 52 8 40 30 207 192 254 213 174 106 111 8 8 11 49 18 201 180 196 56 20 8 4 35 191 172 254 209 2 131 59 209 175 95 253 127 4 72 254 99 254 80 75 57 181 53 2 117 253 139 172 117 36 150 2 220 251 184 0 0 1 0 39 0 0 4 8 4 72 0 11 0 34 64 17 7 5 6 0 1 5 12 13 9 3 1 8 11 21 4 1 15 0 63 51 63 51 18 57 57 17 18 1 23 57 49 48 1 1 51 1 1 51 1 1 35 1 1 35 1 184 254 131 189 1 33 1 32 187 254 131 1 145 188 254 205 254 202 188 2 49 2 23 254 92 1 164 253 233 253 207 1 188 254 68 0 1 0 2 254 20 4 6 4 72 0 21 0 36 64 18 9 15 0 3 22 23 4 13 0 13 18 70 89 13 27 8 0 15 0 63 50 63 43 17 18 0 57 17 18 1 23 57 49 48 19 51 19 22 23 51 54 54 19 51 1 6 6 35 34 39 53 22 51 50 55 55 2 178 240 79 19 8 13 83 230 178 254 41 70 187 136 76 74 55 68 171 73 61 4 72 253 143 214 95 51 247 2 124 251 32 185 155 17 133 12 192 156 0 0 1 0 82 0 0 3 109 4 72 0 9 0 43 64 23 8 1 3 7 0 7 4 1 4 10 11 5 4 71 89 5 15 1 8 71 89 1 21 0 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 33 33 53 1 33 53 33 21 1 33 3 109 252 229 2 86 253 207 2 231 253 178 2 93 113 3 86 129 129 252 186 0 1 0 61 254 188 2 193 5 182 0 28 0 44 64 21 25 26 26 11 23 0 0 15 7 20 3 3 7 11 3 29 30 19 3 4 39 0 63 63 17 18 1 23 57 17 51 17 51 51 17 51 17 51 17 51 49 48 37 20 22 23 21 38 38 53 17 52 38 35 53 54 54 53 17 52 54 51 21 6 21 17 20 7 21 22 21 1 219 117 113 190 208 126 120 130 116 216 182 230 223 223 12 102 92 2 140 2 170 154 1 47 104 89 141 2 92 96 1 50 155 172 139 6 193 254 217 215 39 12 39 215 0 1 1 238 254 16 2 123 6 20 0 3 0 22 64 9 2 3 3 4 5 3 27 0 0 0 63 63 17 18 1 57 17 51 49 48 1 51 17 35 1 238 141 141 6 20 247 252 0 1 0 72 254 188 2 203 5 182 0 29 0 44 64 21 21 5 10 18 18 2 25 0 29 29 14 14 25 5 3 30 31 21 39 6 3 0 63 63 17 18 1 23 57 17 51 17 51 17 51 51 17 51 17 51 49 48 1 38 53 17 52 39 53 50 22 21 17 20 22 23 21 34 6 21 17 20 6 7 53 54 54 53 17 52 54 55 2 10 223 227 184 211 118 130 122 126 205 190 111 116 110 113 2 63 39 215 1 39 193 6 139 174 153 254 206 97 91 2 141 89 104 254 209 153 171 2 140 2 92 102 1 41 114 120 20 0 0 1 0 104 2 80 4 41 3 84 0 23 0 36 64 17 3 15 24 25 18 12 80 89 3 18 15 6 6 0 80 89 6 0 47 43 0 16 24 196 47 196 43 17 18 1 57 57 49 48 1 34 6 7 53 54 51 50 22 23 22 22 51 50 54 55 21 6 35 34 38 39 38 38 1 82 53 127 54 100 144 68 113 89 66 98 47 54 128 54 102 142 72 126 72 75 90 2 201 67 54 151 109 28 38 28 27 64 57 150 110 33 32 32 24 0 0 2 0 152 254 139 1 137 4 94 0 3 0 14 0 43 64 20 2 4 4 3 9 9 15 16 0 0 3 12 12 6 79 89 12 16 3 34 0 63 63 43 17 18 0 57 24 47 17 18 1 57 17 51 51 17 51 49 48 19 51 19 35 19 20 35 34 38 53 52 54 51 50 22 219 105 51 207 225 121 60 60 63 57 51 70 2 172 251 223 5 76 135 71 64 63 72 64 0 1 0 190 255 236 3 219 5 203 0 27 0 62 64 30 22 8 13 3 3 10 4 0 16 16 4 8 3 28 29 25 5 2 19 10 13 2 13 2 13 4 11 7 4 25 0 63 63 18 57 57 47 47 17 51 51 17 51 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 37 6 7 21 35 53 38 2 53 16 37 53 51 21 22 22 23 7 38 35 34 6 21 20 22 51 50 55 3 203 105 147 133 203 193 1 140 135 75 142 49 49 133 109 172 162 159 167 141 142 240 54 6 200 206 32 1 17 250 1 252 62 172 164 3 33 23 140 51 211 217 212 203 59 0 1 0 63 0 0 4 68 5 201 0 29 0 72 64 38 24 19 9 13 13 26 22 17 2 11 22 19 5 30 31 12 24 25 24 78 89 9 25 25 19 0 19 16 76 89 19 24 0 5 75 89 0 7 0 63 43 0 24 63 43 17 18 0 57 24 47 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 17 51 49 48 1 50 23 7 38 35 34 6 21 17 33 21 33 21 20 6 7 33 21 33 53 54 53 53 35 53 51 17 52 54 2 170 190 170 61 154 143 123 125 1 166 254 90 65 74 3 27 251 251 205 198 198 224 5 201 84 133 77 124 140 254 217 127 221 100 136 44 154 141 47 244 223 127 1 60 178 205 0 0 2 0 123 1 6 4 23 4 160 0 27 0 39 0 32 64 13 28 0 34 14 0 14 40 41 31 21 21 37 7 0 47 51 51 47 51 17 18 1 57 57 17 51 17 51 49 48 19 52 55 39 55 23 54 51 50 23 55 23 7 22 21 20 7 23 7 39 6 35 34 39 7 39 55 38 55 20 22 51 50 54 53 52 38 35 34 6 184 74 135 94 135 104 130 127 102 137 95 134 74 74 131 92 137 102 127 134 100 135 92 133 74 129 157 116 116 158 160 114 116 157 2 211 122 107 140 92 133 73 73 133 92 138 113 118 131 103 135 92 133 71 73 133 92 136 107 124 112 160 159 113 114 162 164 0 0 1 0 31 0 0 4 113 5 182 0 22 0 86 64 46 18 14 7 11 11 16 12 5 9 2 9 3 12 20 14 21 7 23 24 10 14 14 7 15 6 18 18 3 0 19 21 15 19 31 19 2 15 19 15 19 12 1 21 6 12 24 0 63 63 51 18 57 57 47 47 93 17 18 57 50 50 17 51 17 51 51 17 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 1 51 1 33 21 33 21 33 21 33 17 35 17 33 53 33 53 33 53 33 1 51 2 72 1 123 174 254 96 1 6 254 195 1 61 254 195 164 254 196 1 60 254 196 1 0 254 101 178 2 223 2 215 252 254 127 170 127 254 244 1 12 127 170 127 3 2 0 2 1 238 254 16 2 123 6 20 0 3 0 7 0 36 64 16 2 6 6 3 7 7 8 9 4 3 4 3 7 27 0 0 0 63 63 57 57 47 47 17 18 1 57 17 51 51 17 51 49 48 1 51 17 35 17 51 17 35 1 238 141 141 141 141 6 20 252 248 254 13 252 247 0 2 0 123 255 248 3 150 6 29 0 49 0 61 0 67 64 38 50 0 19 6 42 30 56 25 25 30 12 6 0 35 6 62 63 21 3 59 54 28 45 6 33 9 33 39 71 89 33 21 9 16 71 89 9 0 0 63 43 0 24 63 43 17 18 0 23 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 19 52 54 55 38 38 53 52 54 51 50 22 23 7 38 38 35 34 6 21 20 22 23 22 22 21 20 6 7 22 21 20 6 35 34 39 53 22 22 51 50 54 53 52 38 38 39 46 2 55 20 22 23 23 54 53 52 38 39 6 6 139 86 78 74 84 207 197 94 159 97 53 98 135 76 116 116 123 154 186 150 82 74 153 234 212 218 128 78 194 82 134 141 48 108 115 142 134 66 146 132 167 49 137 147 185 68 85 3 41 86 137 37 40 111 85 121 139 29 39 131 39 27 59 64 60 84 55 68 151 107 90 141 41 81 146 140 153 65 148 37 45 76 71 46 58 58 43 52 90 114 98 77 105 61 19 80 111 83 112 57 19 100 0 2 1 53 5 14 3 104 5 211 0 11 0 23 0 30 64 12 6 0 12 18 0 18 24 25 15 3 21 9 0 47 51 205 50 17 18 1 57 57 17 51 17 51 49 48 1 52 54 51 50 22 21 20 6 35 34 38 37 52 54 51 50 22 21 20 6 35 34 38 1 53 53 37 38 55 55 38 37 53 1 125 53 37 37 55 55 37 37 53 5 113 52 46 46 52 50 49 49 50 52 46 46 52 50 49 49 0 0 3 0 100 255 236 6 68 5 203 0 22 0 38 0 54 0 70 64 39 39 23 3 15 47 31 31 20 9 15 23 5 55 56 6 12 0 18 15 12 31 12 2 0 18 16 18 2 12 18 12 18 27 43 35 19 51 27 4 0 63 51 63 51 18 57 57 47 47 93 93 17 51 17 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 6 21 20 22 51 50 55 21 6 6 35 34 38 53 52 54 51 50 23 7 38 1 52 18 36 51 50 4 18 21 20 2 4 35 34 36 2 55 20 18 4 51 50 36 18 53 52 2 36 35 34 4 2 3 125 125 135 127 131 86 125 48 101 70 194 208 221 191 128 118 58 108 252 151 200 1 94 202 200 1 94 202 194 254 162 208 207 254 162 195 105 174 1 45 172 174 1 42 175 174 254 215 176 174 254 214 175 4 35 174 154 168 162 45 124 20 28 241 216 209 246 60 118 51 254 184 200 1 94 202 200 254 162 202 197 254 166 208 207 1 90 198 173 254 211 173 174 1 41 176 174 1 42 175 174 254 215 0 0 2 0 70 3 20 2 113 5 199 0 22 0 31 0 55 64 28 23 6 27 10 1 1 22 22 16 6 3 32 33 28 10 10 18 25 22 0 3 16 3 2 3 13 18 31 0 63 51 212 93 196 51 18 57 47 51 17 18 1 23 57 17 51 17 51 51 17 51 49 48 1 39 6 35 34 38 53 52 54 55 55 53 52 35 34 7 39 54 51 50 22 21 17 37 20 51 50 53 53 7 6 6 2 20 24 92 140 95 111 154 165 117 148 100 104 43 114 133 130 137 254 80 112 201 98 112 103 3 33 84 97 99 102 102 105 6 4 39 133 51 96 56 105 121 254 60 188 100 180 49 4 4 57 0 2 0 82 0 117 3 170 3 190 0 6 0 13 0 41 64 19 3 6 10 13 2 4 11 9 9 4 13 6 4 14 15 12 5 8 1 0 47 51 47 51 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 19 1 23 1 1 7 1 37 1 23 1 1 7 1 82 1 86 119 254 223 1 33 119 254 170 1 139 1 88 117 254 225 1 31 117 254 168 2 39 1 151 69 254 162 254 161 71 1 151 27 1 151 69 254 162 254 161 71 1 151 0 0 1 0 104 1 8 4 41 3 23 0 5 0 27 64 12 2 1 4 1 6 7 5 4 80 89 5 2 0 47 47 43 17 18 1 57 57 17 51 49 48 1 17 35 17 33 53 4 41 137 252 200 3 23 253 241 1 133 138 0 255 255 0 84 1 217 2 63 2 113 2 6 0 16 0 0 0 4 0 100 255 236 6 68 5 203 0 8 0 22 0 38 0 54 0 93 64 51 39 23 0 17 17 18 4 9 47 31 31 13 9 12 18 23 6 55 56 12 16 16 0 0 14 19 14 18 8 19 15 18 31 18 2 0 19 16 19 2 18 19 18 19 27 43 35 19 51 27 4 0 63 51 63 51 18 57 57 47 47 93 93 17 51 17 51 17 18 57 47 51 17 51 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 51 50 54 53 52 38 35 35 5 20 6 7 19 35 3 35 17 35 17 33 50 22 1 52 18 36 51 50 4 18 21 20 2 4 35 34 36 2 55 20 18 4 51 50 36 18 53 52 2 36 35 34 4 2 2 211 108 80 97 86 93 106 1 178 85 77 238 168 207 135 148 1 5 166 155 251 223 200 1 94 202 200 1 94 202 194 254 162 208 207 254 162 195 105 174 1 45 172 174 1 42 175 174 254 215 176 174 254 214 175 2 250 83 64 75 65 136 80 123 30 254 117 1 98 254 158 3 123 130 254 197 200 1 94 202 200 254 162 202 197 254 166 208 207 1 90 198 173 254 211 173 174 1 41 176 174 1 42 175 174 254 215 0 1 255 250 6 20 4 6 6 147 0 3 0 17 181 0 5 1 4 1 2 0 47 51 17 1 51 17 51 49 48 1 33 53 33 4 6 251 244 4 12 6 20 127 0 2 0 127 3 92 2 238 5 203 0 12 0 24 0 33 64 14 13 0 19 6 0 6 25 26 16 10 192 22 3 4 0 63 51 26 204 50 17 18 1 57 57 17 51 17 51 49 48 19 52 54 51 50 22 21 20 6 6 35 34 38 55 20 22 51 50 54 53 52 38 35 34 6 127 181 130 130 182 82 146 84 130 181 115 117 81 80 115 113 82 83 115 4 147 130 182 181 131 84 143 84 180 131 82 114 113 83 84 113 114 0 255 255 0 104 0 1 4 41 4 195 2 38 0 14 0 0 0 7 2 43 0 0 253 116 0 1 0 49 2 74 2 141 5 201 0 24 0 35 64 17 7 19 23 1 1 14 19 0 4 26 25 10 16 31 23 1 32 0 63 51 63 51 17 18 1 23 57 17 51 17 51 49 48 1 33 53 55 62 2 53 52 38 35 34 6 7 39 54 51 50 22 21 20 6 7 7 33 2 141 253 164 236 89 82 33 80 63 52 98 69 66 131 152 132 147 89 147 174 1 184 2 74 104 230 86 97 76 54 68 69 38 50 88 111 130 112 80 151 138 165 0 1 0 33 2 57 2 141 5 201 0 35 0 57 64 34 15 5 5 0 3 18 30 10 6 36 37 18 93 19 109 19 2 76 19 1 11 19 27 19 2 19 19 8 26 33 31 13 8 33 0 63 51 63 51 18 57 47 93 93 93 51 17 18 1 23 57 17 51 49 48 1 20 6 7 22 21 20 6 35 34 39 53 22 51 50 53 52 35 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 2 115 82 68 176 184 168 152 116 147 123 211 231 117 119 103 99 80 67 66 112 56 69 63 140 94 136 157 4 231 80 103 23 47 162 128 143 56 123 68 162 145 107 79 68 61 68 43 35 90 45 54 119 0 1 1 137 4 217 3 18 6 33 0 9 0 19 182 9 4 10 11 4 128 9 0 47 26 205 17 18 1 57 57 49 48 1 54 54 55 51 21 6 6 7 35 1 137 48 111 32 202 44 174 64 111 4 242 62 176 65 21 65 190 52 0 1 0 176 254 20 4 68 4 72 0 22 0 53 64 26 5 10 10 8 16 0 19 19 20 8 20 24 23 6 21 15 20 27 13 2 70 89 13 22 9 21 0 63 63 43 0 24 63 63 51 17 18 1 57 57 17 51 17 51 51 17 51 17 51 49 48 1 16 51 50 54 53 17 51 17 35 39 35 6 35 34 39 35 22 21 17 35 17 51 1 86 254 171 159 166 136 26 10 111 229 150 88 10 10 166 166 1 125 254 250 189 212 2 64 251 184 147 167 92 84 160 254 192 6 52 0 1 0 113 254 252 4 96 6 20 0 15 0 39 64 18 4 5 1 0 0 5 11 3 16 17 8 8 5 3 15 5 1 5 0 47 51 63 51 18 57 47 17 18 1 23 57 17 51 17 51 49 48 1 35 17 35 17 35 17 6 35 34 38 53 16 54 51 33 4 96 114 213 115 62 84 216 203 218 232 2 45 254 252 6 176 249 80 3 51 18 250 251 1 4 254 0 1 0 152 2 76 1 137 3 90 0 11 0 23 64 10 6 0 0 13 12 3 9 79 89 3 0 47 43 17 18 1 57 17 51 49 48 19 52 54 51 50 22 21 20 6 35 34 38 152 62 56 58 65 66 57 51 67 2 211 66 69 69 66 65 70 63 0 0 1 0 37 254 20 1 180 0 0 0 18 0 36 64 16 17 14 11 0 0 14 5 3 19 20 14 17 17 8 3 16 0 47 204 50 57 47 51 17 18 1 23 57 17 51 17 51 49 48 1 20 6 35 34 39 53 22 51 50 54 53 52 38 39 55 51 7 22 1 180 153 150 51 45 45 59 79 81 79 109 88 110 55 180 254 223 97 106 9 106 8 40 54 43 53 17 178 115 39 0 1 0 76 2 74 1 225 5 182 0 10 0 32 64 14 2 0 3 3 10 12 11 9 9 3 32 6 0 30 0 63 50 63 57 47 17 18 1 57 57 17 51 51 49 48 1 51 17 35 17 52 55 6 6 7 39 1 82 143 133 6 22 54 135 67 5 182 252 148 2 67 91 90 22 45 95 96 0 2 0 66 3 20 2 190 5 199 0 11 0 23 0 37 64 18 12 6 18 0 6 0 24 25 15 0 3 16 3 2 3 21 9 31 0 63 51 196 93 50 17 18 1 57 57 17 51 17 51 49 48 1 20 6 35 34 38 53 52 54 51 50 22 5 20 22 51 50 54 53 52 38 35 34 6 2 190 171 150 146 169 168 151 152 165 253 254 91 104 105 92 92 105 103 92 4 111 164 183 186 161 163 181 182 162 122 122 122 122 123 118 118 0 2 0 80 0 117 3 168 3 190 0 6 0 13 0 35 64 17 11 9 4 2 0 3 7 2 10 9 6 14 15 12 5 8 1 0 47 51 47 51 17 18 1 23 57 17 51 17 51 49 48 1 1 39 1 1 55 1 5 1 39 1 1 55 1 3 168 254 168 117 1 31 254 225 117 1 88 254 117 254 168 117 1 31 254 225 117 1 88 2 12 254 105 71 1 95 1 94 69 254 105 27 254 105 71 1 95 1 94 69 254 105 255 255 0 75 0 0 5 209 5 182 0 39 2 23 2 131 0 0 0 38 0 123 255 0 1 7 2 60 3 29 253 183 0 9 179 3 2 18 24 0 63 53 53 0 255 255 0 46 0 0 5 219 5 182 0 39 2 23 2 63 0 0 0 38 0 123 226 0 1 7 0 116 3 78 253 183 0 7 178 2 16 24 0 63 53 0 255 255 0 26 0 0 6 33 5 201 0 38 0 117 249 0 0 39 2 23 2 223 0 0 1 7 2 60 3 109 253 183 0 9 179 3 2 43 24 0 63 53 53 0 0 2 0 51 254 119 3 84 4 94 0 29 0 40 0 65 64 34 8 20 30 35 1 28 15 28 35 20 4 41 42 0 29 1 12 3 29 29 17 38 38 32 79 89 38 16 17 11 73 89 17 35 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 17 18 1 23 57 17 51 17 51 17 51 49 48 1 21 20 6 7 14 2 21 20 22 51 50 54 55 23 6 35 34 38 53 52 62 2 55 54 54 53 53 19 20 35 34 38 53 52 54 51 50 22 2 78 75 97 121 61 25 132 122 80 150 98 59 197 198 190 216 35 64 89 54 101 65 180 121 59 62 66 55 51 70 2 172 51 122 148 84 106 75 77 56 100 113 38 48 135 96 186 170 70 105 89 82 47 88 116 93 31 1 43 135 69 66 64 71 64 255 255 0 0 0 0 5 16 7 115 2 38 0 36 0 0 1 7 0 67 255 194 1 82 0 8 179 2 16 5 38 0 43 53 255 255 0 0 0 0 5 16 7 115 2 38 0 36 0 0 1 7 0 118 0 133 1 82 0 8 179 2 24 5 38 0 43 53 255 255 0 0 0 0 5 16 7 115 2 38 0 36 0 0 1 7 1 75 0 35 1 82 0 8 179 2 29 5 38 0 43 53 255 255 0 0 0 0 5 16 7 47 2 38 0 36 0 0 1 7 1 82 0 4 1 82 0 8 179 2 24 5 38 0 43 53 255 255 0 0 0 0 5 16 7 37 2 38 0 36 0 0 1 7 0 106 0 55 1 82 0 10 180 3 2 36 5 38 0 43 53 53 255 255 0 0 0 0 5 16 7 6 2 38 0 36 0 0 0 7 1 80 0 57 0 129 0 2 255 254 0 0 6 129 5 182 0 15 0 19 0 78 64 44 10 14 14 17 1 0 8 12 1 16 5 5 21 5 20 9 19 6 19 73 89 16 3 73 89 10 13 73 89 16 10 16 10 1 6 3 5 18 1 14 73 89 1 18 0 63 43 0 24 63 63 18 57 57 47 47 43 43 43 17 0 51 17 1 51 17 18 23 57 17 51 51 17 51 49 48 33 33 17 33 3 35 1 33 21 33 17 33 21 33 17 33 1 33 17 35 6 129 253 18 253 254 227 176 2 186 3 201 253 188 2 29 253 227 2 68 251 84 1 190 118 1 209 254 47 5 182 151 254 41 150 253 230 1 210 2 181 0 255 255 0 125 254 20 4 207 5 203 2 38 0 38 0 0 0 7 0 122 2 2 0 0 255 255 0 201 0 0 3 248 7 115 2 38 0 40 0 0 1 7 0 67 255 183 1 82 0 8 179 1 13 5 38 0 43 53 255 255 0 201 0 0 3 248 7 115 2 38 0 40 0 0 1 7 0 118 0 63 1 82 0 8 179 1 21 5 38 0 43 53 255 255 0 201 0 0 3 248 7 115 2 38 0 40 0 0 1 7 1 75 255 251 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 201 0 0 3 248 7 37 2 38 0 40 0 0 1 7 0 106 0 18 1 82 0 10 180 2 1 33 5 38 0 43 53 53 255 255 0 60 0 0 2 86 7 115 2 38 0 44 0 0 1 7 0 67 254 179 1 82 0 8 179 1 13 5 38 0 43 53 255 255 0 84 0 0 2 115 7 115 2 38 0 44 0 0 1 7 0 118 255 97 1 82 0 8 179 1 21 5 38 0 43 53 255 255 255 255 0 0 2 161 7 115 2 38 0 44 0 0 1 7 1 75 254 243 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 60 0 0 2 111 7 37 2 38 0 44 0 0 1 7 0 106 255 7 1 82 0 10 180 2 1 33 5 38 0 43 53 53 0 2 0 47 0 0 5 72 5 182 0 12 0 23 0 87 64 50 17 21 21 8 4 13 0 0 19 4 6 4 24 25 20 6 7 6 73 89 17 15 7 63 7 175 7 207 7 223 7 5 11 3 7 7 4 9 9 16 74 89 9 3 4 21 74 89 4 18 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 49 48 1 16 0 33 33 17 35 53 51 17 33 32 0 3 16 33 35 17 33 21 33 17 51 32 5 72 254 119 254 143 254 123 154 154 1 178 1 81 1 124 181 253 199 231 1 123 254 133 190 2 98 2 233 254 150 254 129 2 137 150 2 151 254 137 254 164 2 64 253 252 150 254 10 255 255 0 201 0 0 5 63 7 47 2 38 0 49 0 0 1 7 1 82 0 147 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 125 255 236 5 190 7 115 2 38 0 50 0 0 1 7 0 67 0 121 1 82 0 8 179 2 25 5 38 0 43 53 255 255 0 125 255 236 5 190 7 115 2 38 0 50 0 0 1 7 0 118 1 10 1 82 0 8 179 2 33 5 38 0 43 53 255 255 0 125 255 236 5 190 7 115 2 38 0 50 0 0 1 7 1 75 0 180 1 82 0 8 179 2 38 5 38 0 43 53 255 255 0 125 255 236 5 190 7 47 2 38 0 50 0 0 1 7 1 82 0 154 1 82 0 8 179 2 33 5 38 0 43 53 255 255 0 125 255 236 5 190 7 37 2 38 0 50 0 0 1 7 0 106 0 213 1 82 0 10 180 3 2 45 5 38 0 43 53 53 0 1 0 133 1 16 4 12 4 152 0 11 0 25 64 9 7 9 3 1 9 1 12 13 8 0 25 47 17 18 1 57 57 17 51 17 51 49 48 1 23 1 1 7 1 1 39 1 1 55 1 3 172 96 254 160 1 94 96 254 158 254 164 101 1 94 254 160 100 1 97 4 152 99 254 158 254 160 99 1 95 254 161 99 1 96 1 96 101 254 157 0 0 3 0 125 255 195 5 190 5 246 0 19 0 27 0 35 0 78 64 44 22 31 23 30 4 28 20 28 10 20 0 0 18 15 5 8 10 6 36 37 22 30 33 25 13 33 73 89 15 18 8 5 4 3 16 13 4 3 25 73 89 6 3 19 0 63 198 43 0 24 63 198 18 23 57 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 18 23 57 49 48 1 16 0 33 34 39 7 39 55 38 17 16 0 33 50 23 55 23 7 22 3 16 39 1 22 51 50 18 1 16 23 1 38 35 34 2 5 190 254 157 254 196 235 148 101 120 108 178 1 96 1 68 209 157 97 120 106 192 180 110 253 96 115 176 243 248 252 39 101 2 157 106 168 243 253 2 221 254 161 254 110 100 141 79 154 198 1 109 1 101 1 137 94 135 80 148 202 254 149 1 16 154 252 76 82 1 50 1 42 254 250 154 3 175 73 254 205 0 255 255 0 186 255 236 5 25 7 115 2 38 0 56 0 0 1 7 0 67 0 70 1 82 0 8 179 1 19 5 38 0 43 53 255 255 0 186 255 236 5 25 7 115 2 38 0 56 0 0 1 7 0 118 0 207 1 82 0 8 179 1 27 5 38 0 43 53 255 255 0 186 255 236 5 25 7 115 2 38 0 56 0 0 1 7 1 75 0 125 1 82 0 8 179 1 32 5 38 0 43 53 255 255 0 186 255 236 5 25 7 37 2 38 0 56 0 0 1 7 0 106 0 152 1 82 0 10 180 2 1 39 5 38 0 43 53 53 255 255 0 0 0 0 4 123 7 115 2 38 0 60 0 0 1 7 0 118 0 49 1 82 0 8 179 1 18 5 38 0 43 53 0 2 0 201 0 0 4 121 5 182 0 12 0 21 0 54 64 28 13 9 5 5 6 17 0 6 0 22 23 13 4 74 89 9 21 74 89 13 9 13 9 6 7 3 6 18 0 63 63 18 57 57 47 47 43 43 17 18 1 57 57 17 51 17 51 17 51 51 49 48 1 20 4 33 35 17 35 17 51 17 51 32 4 1 51 50 54 53 52 38 35 35 4 121 254 209 254 225 184 170 170 215 1 25 1 22 252 250 168 226 202 190 202 204 3 16 227 238 254 193 5 182 255 0 207 253 234 143 164 149 138 0 0 1 0 176 255 236 4 156 6 31 0 48 0 65 64 34 41 42 5 29 35 0 23 12 12 0 29 17 42 5 49 50 18 18 42 46 46 38 70 89 46 0 42 21 15 21 70 89 15 22 0 63 43 0 24 63 63 43 17 18 0 57 24 47 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 20 7 6 6 21 20 22 22 23 22 22 21 20 6 35 34 39 53 22 22 51 50 53 52 38 39 38 38 53 52 54 55 54 54 53 52 38 35 32 21 17 35 17 52 54 51 50 22 4 25 143 88 56 27 71 78 140 102 194 179 188 107 63 156 72 215 83 110 127 96 69 71 75 64 136 127 254 236 166 220 222 206 225 4 242 135 115 70 67 33 32 42 57 51 95 157 101 160 171 69 154 39 47 182 75 107 70 82 123 84 63 106 53 57 90 53 80 85 223 251 76 4 178 178 187 157 255 255 0 94 255 236 3 205 6 33 2 38 0 68 0 0 1 6 0 67 142 0 0 8 179 2 38 17 38 0 43 53 255 255 0 94 255 236 3 205 6 33 2 38 0 68 0 0 1 6 0 118 43 0 0 8 179 2 46 17 38 0 43 53 255 255 0 94 255 236 3 205 6 33 2 38 0 68 0 0 1 6 1 75 216 0 0 8 179 2 51 17 38 0 43 53 255 255 0 94 255 236 3 205 5 221 2 38 0 68 0 0 1 6 1 82 189 0 0 8 179 2 46 17 38 0 43 53 255 255 0 94 255 236 3 205 5 211 2 38 0 68 0 0 1 6 0 106 226 0 0 10 180 3 2 58 17 38 0 43 53 53 255 255 0 94 255 236 3 205 6 133 2 38 0 68 0 0 1 6 1 80 247 0 0 10 180 3 2 40 17 38 0 43 53 53 0 3 0 94 255 236 6 115 4 92 0 41 0 52 0 59 0 97 64 51 42 0 36 17 48 56 25 25 4 48 57 24 24 31 48 11 0 5 60 61 27 45 39 45 70 89 25 49 4 49 71 89 56 36 39 17 4 4 14 34 39 22 53 8 14 8 70 89 20 14 16 0 63 51 43 17 0 51 24 63 51 18 57 47 57 18 57 51 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 18 57 57 17 51 49 48 19 52 54 55 55 53 52 38 35 34 7 39 54 54 51 50 22 23 54 54 51 50 18 21 21 33 18 33 50 54 55 21 6 6 35 32 39 6 6 35 34 38 55 20 22 51 50 54 53 53 7 6 6 1 34 6 7 33 52 38 94 248 254 184 116 119 144 163 52 74 199 98 130 165 41 53 171 110 192 232 253 67 8 1 58 91 157 84 86 149 101 254 223 125 81 197 134 163 185 174 107 88 145 168 158 186 164 3 189 121 139 11 2 7 128 1 47 161 179 8 6 68 129 123 84 127 41 53 87 95 88 96 254 245 222 107 254 117 35 39 148 38 33 233 127 106 170 151 95 89 169 154 99 7 8 109 2 50 166 158 156 168 0 255 255 0 115 254 20 3 139 4 92 2 38 0 70 0 0 0 7 0 122 1 70 0 0 255 255 0 115 255 236 4 18 6 33 2 38 0 72 0 0 1 6 0 67 181 0 0 8 179 2 28 17 38 0 43 53 255 255 0 115 255 236 4 18 6 33 2 38 0 72 0 0 1 6 0 118 78 0 0 8 179 2 36 17 38 0 43 53 255 255 0 115 255 236 4 18 6 33 2 38 0 72 0 0 1 6 1 75 247 0 0 8 179 2 41 17 38 0 43 53 255 255 0 115 255 236 4 18 5 211 2 38 0 72 0 0 1 6 0 106 10 0 0 10 180 3 2 48 17 38 0 43 53 53 255 255 255 218 0 0 1 99 6 33 2 38 0 243 0 0 1 7 0 67 254 81 0 0 0 8 179 1 5 17 38 0 43 53 255 255 0 169 0 0 2 50 6 33 2 38 0 243 0 0 1 7 0 118 255 32 0 0 0 8 179 1 13 17 38 0 43 53 255 255 255 179 0 0 2 85 6 33 2 38 0 243 0 0 1 7 1 75 254 167 0 0 0 8 179 1 18 17 38 0 43 53 255 255 255 236 0 0 2 31 5 211 2 38 0 243 0 0 1 7 0 106 254 183 0 0 0 10 180 2 1 25 17 38 0 43 53 53 0 2 0 113 255 236 4 98 6 33 0 27 0 38 0 74 64 43 33 6 12 28 28 0 0 24 25 22 14 17 19 16 6 9 39 40 9 31 70 89 11 3 22 17 25 14 15 5 20 9 9 3 23 20 1 3 36 70 89 3 22 0 63 43 0 24 63 51 18 57 47 18 23 57 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 16 0 35 34 0 53 52 0 51 50 23 55 38 39 5 39 55 38 39 55 22 23 55 23 7 22 18 3 52 38 35 32 17 20 22 51 50 54 4 98 254 251 247 222 254 233 1 7 220 226 100 8 57 205 254 241 73 233 92 94 69 156 102 238 76 207 152 165 168 180 156 254 175 175 162 175 161 2 51 254 231 254 210 1 13 226 230 1 6 121 4 214 191 155 108 133 62 49 117 73 75 138 107 119 143 254 114 254 232 147 170 254 152 167 183 201 0 255 255 0 176 0 0 4 68 5 221 2 38 0 81 0 0 1 6 1 82 14 0 0 8 179 1 30 17 38 0 43 53 255 255 0 115 255 236 4 98 6 33 2 38 0 82 0 0 1 6 0 67 212 0 0 8 179 2 26 17 38 0 43 53 255 255 0 115 255 236 4 98 6 33 2 38 0 82 0 0 1 6 0 118 86 0 0 8 179 2 34 17 38 0 43 53 255 255 0 115 255 236 4 98 6 33 2 38 0 82 0 0 1 6 1 75 14 0 0 8 179 2 39 17 38 0 43 53 255 255 0 115 255 236 4 98 5 221 2 38 0 82 0 0 1 6 1 82 241 0 0 8 179 2 34 17 38 0 43 53 255 255 0 115 255 236 4 98 5 211 2 38 0 82 0 0 1 6 0 106 27 0 0 10 180 3 2 46 17 38 0 43 53 53 0 3 0 104 0 252 4 41 4 168 0 3 0 15 0 27 0 51 64 24 22 10 10 16 4 2 4 1 3 28 29 25 19 19 1 7 13 13 1 1 0 80 89 1 0 47 43 17 0 51 24 47 51 17 51 47 51 17 18 1 23 57 17 51 51 17 51 49 48 19 53 33 21 1 52 54 51 50 22 21 20 6 35 34 38 17 52 54 51 50 22 21 20 6 35 34 38 104 3 193 253 174 59 54 52 58 59 51 52 61 59 54 52 58 59 51 52 61 2 141 138 138 254 232 60 61 63 58 57 64 63 2 244 60 61 63 58 57 64 63 0 3 0 115 255 188 4 98 4 135 0 19 0 27 0 35 0 75 64 41 23 31 28 20 20 10 28 0 0 18 15 5 8 10 6 36 37 22 30 33 25 13 25 70 89 15 18 8 5 4 3 16 13 16 3 33 70 89 6 3 22 0 63 198 43 0 24 63 198 18 23 57 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 18 57 57 49 48 1 16 0 35 34 39 7 39 55 38 17 16 0 51 50 23 55 23 7 22 5 20 23 1 38 35 34 6 5 52 39 1 22 51 50 54 4 98 254 242 238 154 112 84 114 94 129 1 12 238 154 116 84 117 97 127 252 189 53 1 209 75 114 163 166 2 151 51 254 47 71 113 163 169 2 37 254 244 254 211 69 117 78 131 152 1 0 1 12 1 43 76 119 76 133 152 249 171 102 2 134 53 214 212 164 100 253 125 51 219 0 255 255 0 164 255 236 4 57 6 33 2 38 0 88 0 0 1 6 0 67 196 0 0 8 179 1 22 17 38 0 43 53 255 255 0 164 255 236 4 57 6 33 2 38 0 88 0 0 1 6 0 118 113 0 0 8 179 1 30 17 38 0 43 53 255 255 0 164 255 236 4 57 6 33 2 38 0 88 0 0 1 6 1 75 18 0 0 8 179 1 35 17 38 0 43 53 255 255 0 164 255 236 4 57 5 211 2 38 0 88 0 0 1 6 0 106 33 0 0 10 180 2 1 42 17 38 0 43 53 53 255 255 0 2 254 20 4 6 6 33 2 38 0 92 0 0 1 6 0 118 18 0 0 8 179 1 31 17 38 0 43 53 0 2 0 176 254 20 4 117 6 20 0 22 0 34 0 62 64 31 32 6 27 20 16 16 17 6 17 36 35 18 0 17 27 12 22 9 3 9 30 70 89 9 22 3 23 70 89 3 16 0 63 43 0 24 63 43 17 18 0 57 57 24 63 63 17 18 1 57 57 17 51 17 51 51 17 51 49 48 1 54 54 51 50 18 17 16 2 35 34 39 35 23 22 21 17 35 17 51 17 20 7 37 34 6 7 21 20 22 51 32 17 52 38 1 88 66 170 106 215 240 241 214 222 122 12 4 8 166 166 6 1 72 168 152 2 154 170 1 47 148 3 180 89 79 254 212 254 245 254 244 254 211 161 34 77 63 254 53 8 0 254 46 52 90 27 184 201 41 231 199 1 176 215 209 255 255 0 2 254 20 4 6 5 211 2 38 0 92 0 0 1 6 0 106 181 0 0 10 180 2 1 43 17 38 0 43 53 53 255 255 0 0 0 0 5 16 6 180 2 38 0 36 0 0 1 7 1 77 0 63 1 82 0 8 179 2 18 5 38 0 43 53 255 255 0 94 255 236 3 205 5 98 2 38 0 68 0 0 1 6 1 77 245 0 0 8 179 2 40 17 38 0 43 53 255 255 0 0 0 0 5 16 7 55 2 38 0 36 0 0 1 7 1 78 0 43 1 82 0 8 179 2 15 5 38 0 43 53 255 255 0 94 255 236 3 205 5 229 2 38 0 68 0 0 1 6 1 78 228 0 0 8 179 2 37 17 38 0 43 53 255 255 0 0 254 66 5 17 5 188 2 38 0 36 0 0 0 7 1 81 3 160 0 0 255 255 0 94 254 66 4 0 4 90 2 38 0 68 0 0 0 7 1 81 2 143 0 0 255 255 0 125 255 236 4 207 7 115 2 38 0 38 0 0 1 7 0 118 1 8 1 82 0 8 179 1 32 5 38 0 43 53 255 255 0 115 255 236 3 139 6 33 2 38 0 70 0 0 1 6 0 118 68 0 0 8 179 1 32 17 38 0 43 53 255 255 0 125 255 236 4 207 7 115 2 38 0 38 0 0 1 7 1 75 0 172 1 82 0 8 179 1 37 5 38 0 43 53 255 255 0 115 255 236 3 139 6 33 2 38 0 70 0 0 1 6 1 75 212 0 0 8 179 1 37 17 38 0 43 53 255 255 0 125 255 236 4 207 7 49 2 38 0 38 0 0 1 7 1 79 2 27 1 82 0 8 179 1 32 5 38 0 43 53 255 255 0 115 255 236 3 139 5 223 2 38 0 70 0 0 1 7 1 79 1 80 0 0 0 8 179 1 32 17 38 0 43 53 255 255 0 125 255 236 4 207 7 115 2 38 0 38 0 0 1 7 1 76 0 193 1 82 0 8 179 1 34 5 38 0 43 53 255 255 0 115 255 236 3 161 6 33 2 38 0 70 0 0 1 6 1 76 243 0 0 8 179 1 34 17 38 0 43 53 255 255 0 201 0 0 5 88 7 115 2 38 0 39 0 0 1 7 1 76 0 88 1 82 0 8 179 2 29 5 38 0 43 53 255 255 0 115 255 236 5 129 6 20 2 38 0 71 0 0 1 7 2 56 3 12 0 0 0 7 178 2 35 0 0 63 53 0 255 255 0 47 0 0 5 72 5 182 2 6 0 146 0 0 0 2 0 115 255 236 4 211 6 20 0 26 0 39 0 100 64 55 37 6 18 14 0 30 30 21 25 22 25 16 6 4 40 41 26 21 24 16 17 16 71 89 21 15 17 31 17 47 17 3 9 3 17 17 9 19 0 1 12 3 9 9 34 70 89 9 16 3 27 70 89 3 22 0 63 43 0 24 63 43 17 18 0 57 57 24 63 18 57 47 95 94 93 51 43 17 0 51 24 63 17 18 1 23 57 17 51 51 17 51 51 51 17 51 49 48 37 35 6 35 34 2 17 16 18 51 50 23 51 38 53 53 33 53 33 53 51 21 51 21 35 17 35 37 50 54 53 53 52 38 35 34 6 21 20 22 3 154 9 115 229 215 239 240 214 223 119 13 11 254 64 1 192 166 156 156 135 254 158 170 153 155 170 146 155 154 147 167 1 38 1 15 1 15 1 44 162 83 73 133 129 184 184 129 251 37 119 185 206 35 233 199 227 207 210 214 255 255 0 201 0 0 3 248 6 180 2 38 0 40 0 0 1 7 1 77 0 18 1 82 0 8 179 1 15 5 38 0 43 53 255 255 0 115 255 236 4 18 5 98 2 38 0 72 0 0 1 6 1 77 10 0 0 8 179 2 30 17 38 0 43 53 255 255 0 201 0 0 3 248 7 55 2 38 0 40 0 0 1 7 1 78 0 16 1 82 0 8 179 1 12 5 38 0 43 53 255 255 0 115 255 236 4 18 5 229 2 38 0 72 0 0 1 6 1 78 251 0 0 8 179 2 27 17 38 0 43 53 255 255 0 201 0 0 3 248 7 20 2 38 0 40 0 0 1 7 1 79 1 111 1 53 0 8 179 1 21 5 38 0 43 53 255 255 0 115 255 236 4 18 5 223 2 38 0 72 0 0 1 7 1 79 1 84 0 0 0 8 179 2 36 17 38 0 43 53 255 255 0 201 254 66 3 248 5 182 2 38 0 40 0 0 0 7 1 81 2 115 0 0 255 255 0 115 254 97 4 18 4 92 2 38 0 72 0 0 0 7 1 81 2 102 0 31 255 255 0 201 0 0 3 248 7 115 2 38 0 40 0 0 1 7 1 76 0 16 1 82 0 8 179 1 23 5 38 0 43 53 255 255 0 115 255 236 4 18 6 33 2 38 0 72 0 0 1 6 1 76 251 0 0 8 179 2 38 17 38 0 43 53 255 255 0 125 255 236 5 61 7 115 2 38 0 42 0 0 1 7 1 75 0 233 1 82 0 8 179 1 42 5 38 0 43 53 255 255 0 39 254 20 4 49 6 33 2 38 0 74 0 0 1 6 1 75 202 0 0 8 179 3 80 17 38 0 43 53 255 255 0 125 255 236 5 61 7 55 2 38 0 42 0 0 1 7 1 78 1 0 1 82 0 8 179 1 28 5 38 0 43 53 255 255 0 39 254 20 4 49 5 229 2 38 0 74 0 0 1 6 1 78 206 0 0 8 179 3 66 17 38 0 43 53 255 255 0 125 255 236 5 61 7 49 2 38 0 42 0 0 1 7 1 79 2 100 1 82 0 8 179 1 37 5 38 0 43 53 255 255 0 39 254 20 4 49 5 223 2 38 0 74 0 0 1 7 1 79 1 31 0 0 0 8 179 3 75 17 38 0 43 53 255 255 0 125 254 59 5 61 5 203 2 38 0 42 0 0 0 7 2 57 1 39 0 0 255 255 0 39 254 20 4 49 6 33 2 38 0 74 0 0 1 6 2 58 68 0 0 8 179 3 70 17 38 0 43 53 255 255 0 201 0 0 5 31 7 115 2 38 0 43 0 0 1 7 1 75 0 150 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 176 0 0 4 68 7 170 2 38 0 75 0 0 1 7 1 75 0 31 1 137 0 8 179 1 37 2 38 0 43 53 0 2 0 0 0 0 5 231 5 182 0 19 0 23 0 84 64 44 23 3 15 15 0 16 20 4 12 12 7 11 8 11 16 18 4 24 25 23 14 73 89 22 10 18 19 18 74 89 7 3 19 23 19 23 19 1 12 16 18 5 1 3 0 63 51 63 51 18 57 57 47 47 17 51 51 43 17 0 51 51 43 17 18 1 23 57 17 51 51 17 51 51 17 51 51 17 51 51 49 48 19 53 51 21 33 53 51 21 51 21 35 17 35 17 33 17 35 17 35 53 1 53 33 21 201 170 3 2 170 200 200 170 252 254 170 201 4 117 252 254 4 190 248 248 248 248 141 251 207 2 176 253 80 4 49 141 254 138 233 233 0 1 0 20 0 0 4 68 6 20 0 30 0 89 64 50 22 20 16 8 8 13 9 0 30 30 18 9 11 4 31 32 23 22 26 4 70 89 19 11 12 11 71 89 16 12 15 12 31 12 47 12 3 22 26 12 12 26 22 3 9 14 0 0 9 21 0 63 51 63 18 23 57 47 47 47 93 17 51 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 51 51 49 48 33 17 52 38 35 34 6 21 17 35 17 35 53 51 53 51 21 33 21 33 21 20 7 51 54 54 51 50 22 21 17 3 158 122 130 174 158 166 156 156 166 1 193 254 63 8 10 49 181 116 201 201 2 158 134 132 186 213 253 231 4 219 127 186 186 127 196 84 56 79 91 191 210 253 92 255 255 255 226 0 0 2 202 7 47 2 38 0 44 0 0 1 7 1 82 254 218 1 82 0 8 179 1 21 5 38 0 43 53 255 255 255 144 0 0 2 120 5 221 2 38 0 243 0 0 1 7 1 82 254 136 0 0 0 8 179 1 13 17 38 0 43 53 255 255 0 42 0 0 2 130 6 180 2 38 0 44 0 0 1 7 1 77 254 253 1 82 0 8 179 1 15 5 38 0 43 53 255 255 255 218 0 0 2 50 5 98 2 38 0 243 0 0 1 7 1 77 254 173 0 0 0 8 179 1 7 17 38 0 43 53 255 255 0 30 0 0 2 138 7 55 2 38 0 44 0 0 1 7 1 78 254 249 1 82 0 8 179 1 12 5 38 0 43 53 255 255 255 204 0 0 2 56 5 229 2 38 0 243 0 0 1 7 1 78 254 167 0 0 0 8 179 1 4 17 38 0 43 53 255 255 0 84 254 66 2 86 5 182 2 38 0 44 0 0 0 6 1 81 104 0 255 255 0 53 254 66 1 129 5 223 2 38 0 76 0 0 0 6 1 81 16 0 255 255 0 84 0 0 2 86 7 49 2 38 0 44 0 0 1 7 1 79 0 80 1 82 0 8 179 1 21 5 38 0 43 53 0 1 0 176 0 0 1 86 4 72 0 3 0 22 64 9 0 1 1 5 4 2 15 1 21 0 63 63 17 18 1 57 17 51 49 48 33 35 17 51 1 86 166 166 4 72 255 255 0 84 254 127 4 16 5 182 0 38 0 44 0 0 0 7 0 45 2 168 0 0 255 255 0 162 254 20 3 108 5 223 0 38 0 76 0 0 0 7 0 77 2 6 0 0 255 255 255 96 254 127 2 101 7 115 2 38 0 45 0 0 1 7 1 75 254 183 1 82 0 8 179 1 28 5 38 0 43 53 255 255 255 145 254 20 2 79 6 33 2 38 2 55 0 0 1 7 1 75 254 161 0 0 0 8 179 1 27 17 38 0 43 53 255 255 0 201 254 59 4 233 5 182 2 38 0 46 0 0 0 7 2 57 0 137 0 0 255 255 0 176 254 59 4 29 6 20 2 38 0 78 0 0 0 6 2 57 43 0 0 1 0 176 0 0 4 27 4 70 0 13 0 47 64 25 13 11 7 7 8 3 1 2 5 8 5 14 15 2 13 5 6 4 8 0 9 15 4 8 21 0 63 51 63 51 18 23 57 17 18 1 23 57 17 51 17 51 51 49 48 1 51 1 1 35 1 7 17 35 17 51 17 20 7 3 47 207 254 98 1 187 201 254 151 135 178 178 12 4 70 254 30 253 156 1 248 113 254 121 4 70 254 229 166 113 255 255 0 201 0 0 3 248 7 115 2 38 0 47 0 0 1 7 0 118 255 99 1 82 0 8 179 1 15 5 38 0 43 53 255 255 0 163 0 0 2 44 7 172 2 38 0 79 0 0 1 7 0 118 255 26 1 139 0 8 179 1 13 2 38 0 43 53 255 255 0 201 254 59 3 248 5 182 2 38 0 47 0 0 0 6 2 57 49 0 255 255 0 89 254 59 1 87 6 20 2 38 0 79 0 0 0 7 2 57 254 232 0 0 255 255 0 201 0 0 3 248 5 183 2 38 0 47 0 0 1 7 2 56 1 29 255 163 0 7 178 1 9 3 0 63 53 0 255 255 0 176 0 0 2 160 6 20 2 38 0 79 0 0 1 6 2 56 43 0 0 7 178 1 7 0 0 63 53 0 255 255 0 201 0 0 3 248 5 182 2 38 0 47 0 0 0 7 1 79 2 4 253 103 255 255 0 176 0 0 2 168 6 20 0 38 0 79 0 0 0 7 1 79 1 66 253 56 0 1 0 29 0 0 3 248 5 182 0 13 0 61 64 33 7 11 11 4 0 12 9 0 3 4 15 14 9 7 4 10 3 1 6 8 2 8 2 8 0 5 3 0 11 73 89 0 18 0 63 43 0 24 63 18 57 57 47 47 18 23 57 17 18 1 23 57 17 51 51 17 51 49 48 51 17 7 39 55 17 51 17 37 23 5 17 33 21 201 105 67 172 170 1 41 67 254 148 2 133 1 252 59 114 101 3 30 253 70 174 121 211 254 60 154 0 1 255 252 0 0 2 39 6 20 0 11 0 55 64 28 0 4 4 9 5 5 12 2 13 8 12 0 2 9 3 8 6 6 1 7 1 7 1 5 10 0 5 21 0 63 63 18 57 57 47 47 18 23 57 17 1 51 17 51 18 57 17 51 51 17 51 49 48 1 55 23 7 17 35 17 7 39 55 17 51 1 86 137 72 209 166 110 70 180 166 3 96 94 112 141 253 63 2 84 72 113 119 3 32 0 255 255 0 201 0 0 5 63 7 115 2 38 0 49 0 0 1 7 0 118 1 2 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 176 0 0 4 68 6 33 2 38 0 81 0 0 1 6 0 118 121 0 0 8 179 1 30 17 38 0 43 53 255 255 0 201 254 59 5 63 5 182 2 38 0 49 0 0 0 7 2 57 0 205 0 0 255 255 0 176 254 59 4 68 4 92 2 38 0 81 0 0 0 6 2 57 86 0 255 255 0 201 0 0 5 63 7 115 2 38 0 49 0 0 1 7 1 76 0 166 1 82 0 8 179 1 28 5 38 0 43 53 255 255 0 176 0 0 4 68 6 33 2 38 0 81 0 0 1 6 1 76 31 0 0 8 179 1 32 17 38 0 43 53 255 255 0 1 0 0 4 203 5 182 0 39 0 81 0 135 0 0 1 6 2 7 232 0 0 7 178 1 28 3 0 63 53 0 0 1 0 201 254 127 5 63 5 182 0 25 0 56 64 28 16 13 13 14 8 20 20 23 23 2 14 3 26 27 18 10 14 21 15 3 14 18 0 5 73 89 0 34 0 63 43 0 24 63 63 51 18 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 34 39 53 22 51 50 54 53 1 35 18 21 17 35 17 51 1 51 38 53 17 51 17 20 6 3 201 98 54 71 83 105 106 252 192 8 16 157 192 3 29 8 14 159 193 254 127 27 145 20 122 111 4 203 254 248 158 252 219 5 182 251 78 149 224 3 61 250 88 195 204 0 1 0 176 254 20 4 68 4 92 0 29 0 56 64 30 19 15 15 16 7 27 27 2 16 3 30 31 23 11 70 89 23 16 19 16 17 15 16 21 0 5 70 89 0 27 0 63 43 0 24 63 63 18 57 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 39 53 22 51 50 53 17 52 38 35 34 6 21 17 35 17 51 23 51 54 54 51 50 22 21 17 20 6 3 37 86 55 60 62 140 122 130 172 160 166 135 27 10 52 180 110 203 199 140 254 20 25 135 20 172 3 121 134 132 186 214 253 193 4 72 150 82 88 191 210 252 141 154 170 255 255 0 125 255 236 5 190 6 180 2 38 0 50 0 0 1 7 1 77 0 199 1 82 0 8 179 2 27 5 38 0 43 53 255 255 0 115 255 236 4 98 5 98 2 38 0 82 0 0 1 6 1 77 18 0 0 8 179 2 28 17 38 0 43 53 255 255 0 125 255 236 5 190 7 55 2 38 0 50 0 0 1 7 1 78 0 193 1 82 0 8 179 2 24 5 38 0 43 53 255 255 0 115 255 236 4 98 5 229 2 38 0 82 0 0 1 6 1 78 14 0 0 8 179 2 25 17 38 0 43 53 255 255 0 125 255 236 5 190 7 115 2 38 0 50 0 0 1 7 1 83 1 20 1 82 0 10 180 3 2 43 5 38 0 43 53 53 255 255 0 115 255 236 4 98 6 33 2 38 0 82 0 0 1 6 1 83 90 0 0 10 180 3 2 44 17 38 0 43 53 53 0 2 0 125 255 236 6 231 5 205 0 20 0 31 0 83 64 46 24 6 15 19 19 29 0 13 17 29 6 5 32 33 15 18 73 89 15 15 0 11 11 14 73 89 11 3 9 21 73 89 9 4 3 27 73 89 3 18 0 19 73 89 0 18 0 63 43 0 24 63 43 0 24 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 33 33 6 35 32 0 17 16 0 33 50 23 33 21 33 17 33 21 33 17 33 1 34 0 17 16 0 51 50 55 17 38 6 231 253 0 102 92 254 185 254 159 1 92 1 64 102 90 3 14 253 179 2 39 253 217 2 77 252 68 249 254 255 1 1 247 112 87 87 20 1 137 1 106 1 104 1 134 23 151 254 41 150 253 230 4 157 254 207 254 217 254 215 254 205 33 4 117 30 0 3 0 113 255 236 7 31 4 90 0 30 0 42 0 49 0 85 64 45 31 8 14 2 22 22 37 47 21 21 28 37 8 4 50 51 43 40 11 40 70 89 46 22 70 89 2 5 14 11 46 46 5 17 11 16 24 34 5 34 70 89 0 5 22 0 63 51 43 17 0 51 24 63 51 18 57 47 18 57 18 57 43 43 17 0 51 17 18 1 23 57 17 51 17 51 18 57 57 17 51 49 48 5 32 39 6 6 35 34 0 17 16 0 51 50 22 23 54 54 51 50 18 21 21 33 18 33 50 54 55 21 6 6 1 20 22 51 50 54 53 52 38 35 34 6 37 34 6 7 33 52 38 5 150 254 219 125 62 209 137 223 254 244 1 6 235 131 205 62 58 192 126 201 238 253 39 8 1 74 94 161 87 88 152 251 33 152 167 163 153 155 165 166 149 4 71 127 145 12 2 32 132 20 235 116 119 1 49 1 8 1 9 1 44 119 114 112 121 254 247 226 105 254 119 35 39 148 39 32 2 57 211 219 213 209 221 213 216 216 164 158 158 164 255 255 0 201 0 0 4 207 7 115 2 38 0 53 0 0 1 7 0 118 0 121 1 82 0 8 179 2 31 5 38 0 43 53 255 255 0 176 0 0 3 39 6 33 2 38 0 85 0 0 1 6 0 118 220 0 0 8 179 1 26 17 38 0 43 53 255 255 0 201 254 59 4 207 5 182 2 38 0 53 0 0 0 6 2 57 125 0 255 255 0 96 254 59 3 39 4 92 2 38 0 85 0 0 0 7 2 57 254 239 0 0 255 255 0 201 0 0 4 207 7 115 2 38 0 53 0 0 1 7 1 76 0 27 1 82 0 8 179 2 33 5 38 0 43 53 255 255 0 130 0 0 3 39 6 33 2 38 0 85 0 0 1 7 1 76 255 118 0 0 0 8 179 1 28 17 38 0 43 53 255 255 0 106 255 236 4 2 7 115 2 38 0 54 0 0 1 7 0 118 0 80 1 82 0 8 179 1 46 5 38 0 43 53 255 255 0 106 255 236 3 115 6 33 2 38 0 86 0 0 1 6 0 118 234 0 0 8 179 1 46 17 38 0 43 53 255 255 0 106 255 236 4 2 7 115 2 38 0 54 0 0 1 7 1 75 255 234 1 82 0 8 179 1 51 5 38 0 43 53 255 255 0 106 255 236 3 115 6 33 2 38 0 86 0 0 1 6 1 75 151 0 0 8 179 1 51 17 38 0 43 53 255 255 0 106 254 20 4 2 5 203 2 38 0 54 0 0 0 7 0 122 1 39 0 0 255 255 0 106 254 20 3 115 4 92 2 38 0 86 0 0 0 7 0 122 0 213 0 0 255 255 0 106 255 236 4 2 7 115 2 38 0 54 0 0 1 7 1 76 255 228 1 82 0 8 179 1 48 5 38 0 43 53 255 255 0 106 255 236 3 115 6 33 2 38 0 86 0 0 1 6 1 76 153 0 0 8 179 1 48 17 38 0 43 53 255 255 0 18 254 59 4 90 5 182 2 38 0 55 0 0 0 6 2 57 25 0 255 255 0 31 254 59 2 168 5 70 2 38 0 87 0 0 0 6 2 57 130 0 255 255 0 18 0 0 4 90 7 115 2 38 0 55 0 0 1 7 1 76 255 220 1 82 0 8 179 1 19 5 38 0 43 53 255 255 0 31 255 236 2 215 6 20 2 38 0 87 0 0 1 6 2 56 98 0 0 7 178 1 26 0 0 63 53 0 0 1 0 18 0 0 4 90 5 182 0 15 0 63 64 33 7 11 11 0 12 4 9 12 14 2 5 16 17 10 14 15 14 74 89 7 15 15 3 12 18 6 2 3 2 73 89 3 3 0 63 43 17 0 51 24 63 18 57 47 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 1 17 33 53 33 21 33 17 33 21 33 17 35 17 33 53 1 225 254 49 4 72 254 49 1 54 254 202 170 254 199 3 47 1 240 151 151 254 16 141 253 94 2 162 141 0 1 0 31 255 236 2 168 5 70 0 28 0 76 64 41 23 19 27 27 12 8 2 21 25 8 10 14 6 29 30 14 22 19 22 71 89 26 10 11 10 71 89 23 11 11 6 17 64 19 15 6 0 70 89 6 22 0 63 43 0 24 63 26 205 18 57 47 51 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 51 49 48 37 50 55 21 6 6 35 32 17 53 35 53 51 17 35 53 55 55 51 21 33 21 33 17 33 21 33 21 20 2 23 85 60 32 106 42 254 200 141 141 157 157 70 96 1 62 254 194 1 45 254 211 117 20 127 14 16 1 92 254 129 1 0 80 69 234 254 129 255 0 129 244 221 0 255 255 0 186 255 236 5 25 7 47 2 38 0 56 0 0 1 7 1 82 0 111 1 82 0 8 179 1 27 5 38 0 43 53 255 255 0 164 255 236 4 57 5 221 2 38 0 88 0 0 1 6 1 82 247 0 0 8 179 1 30 17 38 0 43 53 255 255 0 186 255 236 5 25 6 180 2 38 0 56 0 0 1 7 1 77 0 145 1 82 0 8 179 1 21 5 38 0 43 53 255 255 0 164 255 236 4 57 5 98 2 38 0 88 0 0 1 6 1 77 25 0 0 8 179 1 24 17 38 0 43 53 255 255 0 186 255 236 5 25 7 55 2 38 0 56 0 0 1 7 1 78 0 139 1 82 0 8 179 1 18 5 38 0 43 53 255 255 0 164 255 236 4 57 5 229 2 38 0 88 0 0 1 6 1 78 18 0 0 8 179 1 21 17 38 0 43 53 255 255 0 186 255 236 5 25 7 215 2 38 0 56 0 0 1 7 1 80 0 156 1 82 0 10 180 2 1 21 5 38 0 43 53 53 255 255 0 164 255 236 4 57 6 133 2 38 0 88 0 0 1 6 1 80 35 0 0 10 180 2 1 24 17 38 0 43 53 53 255 255 0 186 255 236 5 25 7 115 2 38 0 56 0 0 1 7 1 83 0 225 1 82 0 10 180 2 1 37 5 38 0 43 53 53 255 255 0 164 255 236 4 57 6 33 2 38 0 88 0 0 1 6 1 83 104 0 0 10 180 2 1 40 17 38 0 43 53 53 255 255 0 186 254 66 5 25 5 182 2 38 0 56 0 0 0 7 1 81 2 33 0 0 255 255 0 164 254 66 4 101 4 72 2 38 0 88 0 0 0 7 1 81 2 244 0 0 255 255 0 27 0 0 7 76 7 115 2 38 0 58 0 0 1 7 1 75 1 84 1 82 0 8 179 1 40 5 38 0 43 53 255 255 0 23 0 0 6 35 6 33 2 38 0 90 0 0 1 7 1 75 0 193 0 0 0 8 179 1 43 17 38 0 43 53 255 255 0 0 0 0 4 123 7 115 2 38 0 60 0 0 1 7 1 75 255 224 1 82 0 8 179 1 23 5 38 0 43 53 255 255 0 2 254 20 4 6 6 33 2 38 0 92 0 0 1 6 1 75 173 0 0 8 179 1 36 17 38 0 43 53 255 255 0 0 0 0 4 123 7 37 2 38 0 60 0 0 1 7 0 106 255 241 1 82 0 10 180 2 1 30 5 38 0 43 53 53 255 255 0 82 0 0 4 63 7 115 2 38 0 61 0 0 1 7 0 118 0 66 1 82 0 8 179 1 19 5 38 0 43 53 255 255 0 82 0 0 3 109 6 33 2 38 0 93 0 0 1 6 0 118 232 0 0 8 179 1 19 17 38 0 43 53 255 255 0 82 0 0 4 63 7 49 2 38 0 61 0 0 1 7 1 79 1 68 1 82 0 8 179 1 19 5 38 0 43 53 255 255 0 82 0 0 3 109 5 223 2 38 0 93 0 0 1 7 1 79 0 223 0 0 0 8 179 1 19 17 38 0 43 53 255 255 0 82 0 0 4 63 7 115 2 38 0 61 0 0 1 7 1 76 255 237 1 82 0 8 179 1 21 5 38 0 43 53 255 255 0 82 0 0 3 109 6 33 2 38 0 93 0 0 1 6 1 76 134 0 0 8 179 1 21 17 38 0 43 53 0 1 0 176 0 0 2 219 6 31 0 12 0 29 64 14 0 1 1 13 6 14 4 9 70 89 4 0 1 21 0 63 63 43 17 1 51 18 57 17 51 49 48 33 35 17 16 33 50 23 7 38 35 34 6 21 1 86 166 1 103 96 100 43 87 73 97 89 4 156 1 131 37 133 30 123 122 0 0 1 0 195 254 20 4 23 5 203 0 32 0 68 64 36 26 30 30 12 8 18 28 8 10 2 5 33 34 29 10 12 10 70 89 26 12 12 16 0 16 22 70 89 16 4 0 5 70 89 0 27 0 63 43 0 24 63 43 17 18 0 57 24 47 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 1 34 39 53 22 51 50 54 53 17 35 53 55 53 52 54 51 50 23 7 7 38 35 34 6 21 21 33 21 33 17 20 6 1 72 69 64 70 61 95 77 222 222 162 182 85 120 22 21 102 60 98 80 1 26 254 234 158 254 20 19 139 18 102 113 3 205 75 60 139 195 178 43 64 65 32 105 124 149 129 252 55 184 175 0 4 0 0 0 0 5 20 7 170 0 16 0 24 0 34 0 46 0 97 64 52 17 5 4 24 6 20 7 4 3 7 8 35 0 41 11 8 11 9 34 20 2 0 29 3 9 48 47 38 14 44 2 9 24 6 73 89 9 20 14 24 34 14 24 24 14 34 3 8 28 4 8 18 0 63 51 47 18 23 57 47 47 47 17 18 57 57 43 17 0 51 51 17 51 17 18 1 23 57 17 51 17 51 17 51 17 51 17 18 57 57 17 57 57 49 48 1 20 7 1 35 3 33 3 35 1 38 53 52 54 51 50 22 19 3 38 39 6 6 7 3 19 54 54 55 51 21 6 6 7 35 19 52 38 35 34 6 21 20 22 51 50 54 3 104 104 2 20 174 176 253 158 166 174 2 20 106 122 99 100 125 27 178 25 47 14 48 9 177 152 49 102 23 203 32 168 66 111 211 66 51 51 66 60 57 53 64 5 150 133 56 251 39 1 145 254 111 4 215 52 136 101 114 117 252 54 1 176 58 145 48 135 24 254 84 4 133 59 149 42 16 46 161 45 254 245 57 60 60 57 55 61 61 0 5 0 94 255 236 3 205 7 170 0 9 0 36 0 47 0 59 0 71 0 103 64 55 45 18 66 54 60 48 41 21 21 11 36 36 6 48 0 54 29 18 7 72 73 9 9 4 63 57 69 51 17 11 12 21 41 71 89 12 21 21 15 32 32 25 70 89 32 16 15 37 70 89 15 22 10 21 4 0 47 63 63 43 0 24 63 43 17 18 0 57 24 47 57 43 17 0 51 24 63 51 196 50 17 57 47 17 18 1 23 57 17 51 51 17 51 17 51 17 51 17 51 49 48 1 53 54 54 55 33 21 6 6 7 1 39 35 6 6 35 34 38 53 16 37 55 53 52 38 35 34 6 7 39 54 54 51 50 22 21 17 37 50 54 53 53 7 6 6 21 20 22 1 20 6 35 34 38 53 52 54 51 50 22 7 52 38 35 34 6 21 20 22 51 50 54 1 215 46 106 22 1 4 21 164 128 1 2 33 8 82 163 122 163 185 2 25 180 119 133 96 167 71 55 84 208 101 209 201 254 14 155 177 166 198 175 109 1 170 123 102 101 121 121 101 101 124 109 65 51 51 66 60 57 52 64 6 217 16 42 120 31 12 24 105 68 249 39 156 103 73 168 155 1 76 16 6 68 130 122 52 32 127 43 51 174 192 253 20 117 170 153 99 7 7 109 115 90 94 5 61 98 119 116 99 98 115 119 94 56 61 61 56 56 61 61 0 255 255 255 254 0 0 6 129 7 115 2 38 0 136 0 0 1 7 0 118 2 76 1 82 0 8 179 2 29 5 38 0 43 53 255 255 0 94 255 236 6 115 6 33 2 38 0 168 0 0 1 7 0 118 1 133 0 0 0 8 179 3 69 17 38 0 43 53 255 255 0 125 255 195 5 190 7 115 2 38 0 154 0 0 1 7 0 118 1 25 1 82 0 8 179 3 45 5 38 0 43 53 255 255 0 115 255 188 4 98 6 33 2 38 0 186 0 0 1 6 0 118 86 0 0 8 179 3 45 17 38 0 43 53 255 255 0 106 254 59 4 2 5 203 2 38 0 54 0 0 0 6 2 57 6 0 255 255 0 106 254 59 3 115 4 92 2 38 0 86 0 0 0 6 2 57 185 0 0 1 1 12 4 217 3 174 6 33 0 14 0 24 64 9 7 0 16 15 11 4 128 14 9 0 47 51 26 205 50 17 18 1 57 57 49 48 1 54 54 55 51 22 22 23 21 35 38 39 6 7 35 1 12 127 102 23 166 22 109 125 119 88 133 136 83 115 4 240 136 128 41 42 133 130 23 55 131 134 52 0 0 1 1 12 4 217 3 174 6 33 0 14 0 24 64 9 6 0 16 15 5 1 128 3 11 0 47 51 26 205 50 17 18 1 57 57 49 48 1 51 22 23 54 55 51 21 7 6 7 35 38 38 39 1 12 115 114 105 130 91 119 66 144 46 166 23 102 127 6 33 74 115 130 59 25 68 148 87 41 126 136 0 0 1 1 45 4 217 3 133 5 98 0 3 0 17 181 0 1 4 5 0 3 0 47 51 17 18 1 57 57 49 48 1 33 21 33 1 45 2 88 253 168 5 98 137 0 1 1 37 4 217 3 145 5 229 0 14 0 24 64 9 12 3 16 15 11 4 128 8 0 0 47 50 26 204 50 17 18 1 57 57 49 48 1 34 38 39 51 30 2 51 50 54 55 51 6 6 2 86 140 156 9 104 6 41 73 85 101 96 10 104 10 167 4 217 137 131 49 56 26 64 67 126 142 0 0 1 0 162 5 2 1 102 5 223 0 11 0 19 182 6 0 0 12 13 3 9 0 47 205 17 18 1 57 17 51 49 48 19 52 54 51 50 22 21 20 6 35 34 38 162 56 42 40 58 58 40 42 56 5 113 57 53 54 56 56 55 55 0 0 2 1 111 4 217 3 45 6 133 0 11 0 23 0 30 64 12 18 6 12 0 6 0 24 25 15 9 21 3 0 47 51 204 50 17 18 1 57 57 17 51 17 51 49 48 1 20 6 35 34 38 53 52 54 51 50 22 7 52 38 35 34 6 21 20 22 51 50 54 3 45 123 102 101 120 121 100 101 124 108 66 51 51 66 60 57 52 65 5 178 98 119 117 98 98 115 119 94 56 61 61 56 56 61 61 0 1 0 37 254 66 1 113 0 0 0 15 0 24 64 10 0 9 4 13 9 3 16 17 2 7 0 47 51 17 18 1 23 57 17 51 49 48 23 20 51 50 55 21 6 35 34 53 52 54 55 51 6 6 178 94 42 55 65 60 207 86 72 120 68 69 238 94 13 109 18 188 70 135 53 66 109 0 0 1 1 8 4 217 3 240 5 221 0 23 0 36 64 15 9 21 24 25 17 0 5 12 0 12 0 12 21 128 9 0 47 26 204 57 57 47 47 17 51 17 51 17 18 1 57 57 49 48 1 34 46 2 35 34 6 7 35 54 54 51 50 30 2 51 50 54 55 51 6 6 3 20 43 82 79 73 34 50 51 14 98 13 115 91 46 86 78 72 32 49 48 15 99 13 113 4 219 37 45 37 60 61 121 137 37 45 37 59 62 121 137 0 0 2 0 231 4 217 3 182 6 33 0 9 0 19 0 27 64 12 14 5 19 9 4 20 21 13 4 128 19 9 0 47 51 26 205 50 17 18 1 23 57 49 48 19 54 54 55 51 21 6 6 7 35 37 54 54 55 51 21 6 6 7 35 231 36 110 31 186 37 171 58 97 1 101 49 101 26 186 37 171 58 96 4 242 48 186 69 21 63 196 48 25 68 177 58 21 63 196 48 0 0 1 1 252 4 217 3 16 6 115 0 9 0 19 182 4 0 11 10 4 128 9 0 47 26 205 17 18 1 57 57 49 48 1 54 54 55 51 21 6 6 7 35 1 252 27 53 12 184 18 109 49 100 4 246 72 227 82 23 74 237 76 0 3 1 27 5 14 3 131 6 180 0 8 0 20 0 32 0 43 64 20 15 9 21 27 27 3 8 9 4 33 34 24 12 8 12 8 12 3 30 18 0 47 51 204 57 57 47 47 17 51 17 18 1 23 57 17 51 17 51 49 48 1 54 55 51 21 6 6 7 35 39 52 54 51 50 22 21 20 6 35 34 38 37 52 54 51 50 22 21 20 6 35 34 38 2 0 65 31 189 33 121 51 80 229 52 38 41 49 55 35 38 52 1 180 52 38 41 49 55 35 38 52 5 133 169 134 20 67 179 61 4 52 46 52 46 50 49 49 50 52 46 52 46 50 49 49 255 255 0 0 0 0 5 16 6 10 2 38 0 36 0 0 1 7 1 84 254 32 255 151 0 7 178 2 18 0 0 63 53 0 255 255 0 152 2 76 1 137 3 90 2 6 0 121 0 0 255 255 255 212 0 0 4 117 6 10 0 38 0 40 125 0 1 7 1 84 253 216 255 151 0 7 178 1 16 0 0 63 53 0 255 255 255 212 0 0 5 181 6 10 0 39 0 43 0 150 0 0 1 7 1 84 253 216 255 151 0 7 178 1 16 0 0 63 53 0 255 255 255 228 0 0 3 68 6 10 0 39 0 44 0 238 0 0 1 7 1 84 253 232 255 151 0 7 178 1 16 0 0 63 53 0 255 255 255 228 255 236 6 2 6 10 0 38 0 50 68 0 1 7 1 84 253 232 255 151 0 7 178 2 28 0 0 63 53 0 255 255 255 212 0 0 5 133 6 10 0 39 0 60 1 10 0 0 1 7 1 84 253 216 255 151 0 7 178 1 13 0 0 63 53 0 255 255 255 228 0 0 6 51 6 10 0 38 1 118 63 0 1 7 1 84 253 232 255 151 0 7 178 1 35 0 0 63 53 0 255 255 255 233 255 236 2 147 6 180 2 38 1 134 0 0 1 7 1 85 254 206 0 0 0 12 181 3 2 1 46 17 38 0 43 53 53 53 255 255 0 0 0 0 5 16 5 188 2 6 0 36 0 0 255 255 0 201 0 0 4 190 5 182 2 6 0 37 0 0 0 1 0 201 0 0 3 248 5 182 0 5 0 29 64 14 3 4 4 0 6 7 5 2 73 89 5 3 4 18 0 63 63 43 17 18 1 57 57 17 51 49 48 1 21 33 17 35 17 3 248 253 123 170 5 182 153 250 227 5 182 0 255 255 0 39 0 0 4 109 5 182 2 6 2 40 0 0 255 255 0 201 0 0 3 248 5 182 2 6 0 40 0 0 255 255 0 82 0 0 4 63 5 182 2 6 0 61 0 0 255 255 0 201 0 0 5 31 5 182 2 6 0 43 0 0 0 3 0 125 255 236 5 190 5 205 0 3 0 15 0 27 0 63 64 32 2 3 16 22 16 10 22 4 10 4 28 29 0 3 73 89 0 0 7 13 13 25 73 89 13 4 7 19 73 89 7 19 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 57 57 17 51 17 51 17 18 57 57 49 48 1 33 21 33 37 16 0 33 32 0 17 16 0 33 32 0 1 16 18 51 50 18 17 16 2 35 34 2 1 227 2 117 253 139 3 219 254 157 254 196 254 189 254 161 1 96 1 68 1 59 1 98 251 115 250 244 243 248 247 242 245 251 3 51 149 63 254 161 254 110 1 139 1 104 1 101 1 137 254 112 254 160 254 216 254 204 1 48 1 44 1 42 1 46 254 206 0 255 255 0 84 0 0 2 86 5 182 2 6 0 44 0 0 255 255 0 201 0 0 4 233 5 182 2 6 0 46 0 0 0 1 0 0 0 0 4 211 5 182 0 10 0 26 64 11 8 0 12 11 4 8 9 3 1 8 18 0 63 51 63 18 57 17 18 1 57 57 49 48 33 35 1 38 39 6 7 1 35 1 51 4 211 182 254 182 87 22 33 71 254 184 182 2 16 177 3 160 252 90 139 201 252 94 5 182 255 255 0 201 0 0 6 113 5 182 2 6 0 48 0 0 255 255 0 201 0 0 5 63 5 182 2 6 0 49 0 0 0 3 0 72 0 0 4 37 5 182 0 3 0 7 0 11 0 52 64 29 10 7 3 2 6 8 6 13 12 0 3 73 89 0 0 10 4 10 11 73 89 10 18 4 7 73 89 4 3 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 49 48 19 33 21 33 3 33 21 33 1 21 33 53 195 2 231 253 25 82 3 139 252 117 3 180 252 35 3 72 150 3 4 151 251 121 152 152 255 255 0 125 255 236 5 190 5 205 2 6 0 50 0 0 0 1 0 201 0 0 5 12 5 182 0 7 0 35 64 17 1 0 4 5 0 5 9 8 6 3 73 89 6 3 1 5 18 0 63 51 63 43 17 18 1 57 57 17 51 17 51 49 48 33 35 17 33 17 35 17 33 5 12 170 253 17 170 4 67 5 31 250 225 5 182 0 255 255 0 201 0 0 4 104 5 182 2 6 0 51 0 0 0 1 0 74 0 0 4 92 5 182 0 12 0 53 64 28 8 10 10 0 9 2 11 6 3 2 0 5 13 14 7 8 4 8 73 89 4 3 0 10 73 89 0 18 0 63 43 0 24 63 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 51 53 1 1 53 33 21 33 39 1 1 33 21 74 1 225 254 43 3 203 253 92 96 1 204 254 31 3 84 141 2 111 2 43 143 153 2 253 223 253 154 152 0 255 255 0 18 0 0 4 90 5 182 2 6 0 55 0 0 255 255 0 0 0 0 4 123 5 182 2 6 0 60 0 0 0 3 0 106 255 236 5 248 5 203 0 25 0 34 0 43 0 80 64 41 39 20 26 2 13 13 43 25 14 30 7 7 14 20 3 44 45 12 16 26 42 16 42 74 89 34 36 24 36 74 89 2 24 16 24 16 24 14 19 0 4 0 63 63 57 57 47 47 17 51 43 17 0 51 43 17 0 51 17 51 17 18 1 23 57 17 51 17 51 51 51 17 51 51 17 51 49 48 1 51 21 51 50 22 22 21 20 2 4 35 35 21 35 53 35 34 36 2 53 52 54 54 51 51 19 51 50 54 53 52 38 43 3 34 6 21 20 22 51 51 2 219 172 70 171 251 133 149 254 253 176 41 172 45 176 254 254 146 135 252 171 67 172 25 201 223 206 185 58 172 57 182 209 222 202 24 5 203 180 136 248 159 166 254 253 130 225 225 132 1 4 161 158 248 139 252 69 219 195 185 210 212 183 197 217 0 255 255 0 8 0 0 4 150 5 182 2 6 0 59 0 0 0 1 0 109 0 0 5 242 5 182 0 29 0 62 64 31 10 7 17 0 0 14 1 21 24 24 1 7 3 30 31 29 3 13 3 73 89 17 13 13 1 22 15 8 3 1 18 0 63 63 51 51 18 57 47 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 33 35 17 35 34 38 38 53 17 51 17 20 22 51 51 17 51 17 51 50 54 53 17 51 17 20 6 4 35 35 3 131 170 45 176 255 144 174 207 212 27 170 29 211 207 176 144 254 253 175 45 1 190 122 247 164 1 227 254 33 188 201 3 100 252 156 198 187 1 227 254 31 165 247 123 0 0 1 0 80 0 0 5 244 5 205 0 31 0 57 64 32 3 13 29 19 24 19 22 25 7 10 13 8 8 32 33 16 0 73 89 16 4 26 22 6 9 8 9 73 89 25 8 18 0 63 51 43 17 0 51 51 51 24 63 43 17 18 1 23 57 17 51 17 51 49 48 1 34 2 21 20 18 23 21 33 53 33 38 2 53 16 0 33 32 0 17 20 2 7 33 21 33 53 54 18 53 52 2 3 33 238 250 173 180 253 182 1 108 151 160 1 98 1 58 1 59 1 98 158 151 1 107 253 182 183 169 249 5 53 254 255 253 225 254 179 132 133 152 118 1 94 203 1 54 1 96 254 165 254 199 207 254 166 120 152 133 134 1 78 222 252 1 2 255 255 0 60 0 0 2 111 7 37 2 38 0 44 0 0 1 7 0 106 255 7 1 82 0 10 180 2 1 33 5 38 0 43 53 53 255 255 0 0 0 0 4 123 7 37 2 38 0 60 0 0 1 7 0 106 255 239 1 82 0 10 180 2 1 30 5 38 0 43 53 53 255 255 0 115 255 236 4 199 6 115 2 38 1 126 0 0 1 6 1 84 29 0 0 8 179 2 52 17 38 0 43 53 255 255 0 90 255 236 3 135 6 115 2 38 1 130 0 0 1 6 1 84 200 0 0 8 179 1 47 17 38 0 43 53 255 255 0 176 254 20 4 68 6 115 2 38 1 132 0 0 1 6 1 84 59 0 0 8 179 1 30 17 38 0 43 53 255 255 0 168 255 236 2 147 6 115 2 38 1 134 0 0 1 7 1 84 254 196 0 0 0 8 179 1 25 17 38 0 43 53 255 255 0 164 255 236 4 113 6 180 2 38 1 146 0 0 1 6 1 85 59 0 0 12 181 3 2 1 52 17 38 0 43 53 53 53 0 2 0 115 255 236 4 199 4 92 0 11 0 42 0 71 64 36 9 15 39 21 4 4 29 34 29 15 3 43 44 24 15 39 40 40 22 12 18 18 7 70 89 18 16 31 0 12 0 70 89 36 12 22 0 63 51 43 17 0 51 24 63 43 17 18 0 57 57 17 51 24 63 17 18 1 23 57 17 51 17 51 51 17 51 49 48 37 50 54 53 53 52 38 35 32 17 20 22 23 34 2 17 16 18 51 50 22 23 51 54 55 51 6 6 21 17 20 51 50 55 21 6 35 34 38 39 35 6 6 2 80 169 150 152 169 254 209 147 133 214 238 244 225 121 161 54 12 24 41 129 21 28 84 29 33 46 65 81 89 18 13 59 167 119 195 218 15 229 199 254 80 212 212 139 1 41 1 12 1 18 1 41 84 84 92 56 66 246 116 254 73 114 10 119 26 81 86 86 81 0 2 0 176 254 20 4 168 6 31 0 19 0 41 0 76 64 40 24 15 15 16 39 3 30 8 8 3 5 34 16 5 42 43 16 27 35 34 70 89 14 35 14 35 11 0 11 27 70 89 11 22 0 20 70 89 0 0 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 43 0 24 63 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 50 22 21 16 5 21 4 17 20 4 35 34 38 39 17 35 17 52 54 23 34 6 21 17 22 22 51 50 54 53 52 38 35 35 53 51 50 54 53 52 38 2 147 220 249 254 199 1 121 254 248 238 109 160 79 166 253 228 158 157 93 161 86 171 173 190 177 112 92 155 162 156 6 31 208 183 254 218 51 8 42 254 145 209 225 31 38 253 227 6 52 225 246 140 172 165 252 137 49 37 150 157 157 164 142 147 137 123 133 0 1 0 10 254 20 4 14 4 72 0 18 0 33 64 16 15 4 1 5 4 19 20 10 9 9 1 14 5 15 1 27 0 63 63 51 18 57 47 51 17 18 1 23 57 49 48 1 35 52 18 55 1 51 19 22 23 51 62 2 19 51 1 6 2 2 20 180 64 43 254 63 172 240 94 19 8 5 41 43 234 172 254 107 48 53 254 20 96 1 38 114 4 60 253 184 235 103 30 142 129 2 109 251 211 124 254 220 0 2 0 113 255 236 4 96 6 18 0 30 0 42 0 59 64 32 37 28 16 3 31 22 22 9 0 3 28 5 43 44 16 0 34 3 25 6 25 40 70 89 25 22 6 13 70 89 6 0 0 63 43 0 24 63 43 17 18 0 23 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 38 38 53 52 54 51 50 22 23 7 38 38 35 34 6 21 20 22 23 22 22 21 20 0 35 34 36 53 52 18 1 52 38 39 6 6 21 20 22 51 50 54 2 33 140 116 194 164 103 189 126 72 112 159 81 85 97 107 167 210 177 254 240 236 227 254 240 226 2 97 123 141 206 191 178 147 162 174 3 168 78 159 99 130 152 45 63 135 62 44 79 66 71 111 91 115 241 164 235 254 248 248 210 177 1 5 254 115 128 183 74 53 217 160 144 171 186 0 0 1 0 90 255 236 3 135 4 92 0 37 0 77 64 43 4 16 35 23 29 11 1 19 23 16 6 38 39 20 37 2 37 2 70 89 15 37 31 37 2 11 3 37 37 13 26 26 33 70 89 26 16 13 7 70 89 13 22 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 0 57 17 18 1 23 57 17 51 17 51 49 48 1 21 35 32 21 20 22 51 50 54 55 21 6 35 34 38 53 52 54 55 53 38 38 53 52 54 51 50 22 23 7 38 38 35 34 21 20 33 2 203 148 254 201 147 146 84 166 100 137 221 210 241 110 130 98 107 224 192 97 165 100 63 94 130 79 250 1 61 2 129 141 195 90 98 39 47 148 75 169 148 98 131 41 11 28 127 92 133 158 33 45 133 42 28 162 172 0 0 1 0 115 254 111 3 160 6 20 0 32 0 48 64 24 7 25 30 19 19 14 14 3 0 25 4 33 34 17 35 30 3 0 1 0 70 89 1 0 0 63 43 17 0 51 51 24 63 17 18 1 23 57 17 51 17 51 17 51 49 48 19 53 33 21 6 0 2 21 20 22 22 23 22 22 21 20 7 35 54 53 52 38 39 38 38 53 52 62 2 55 6 33 176 2 240 215 254 224 138 59 125 172 149 136 127 166 125 111 143 203 188 59 112 201 242 40 254 241 5 135 141 129 180 254 189 254 223 166 98 118 73 37 31 109 91 149 164 161 107 56 61 26 36 219 194 114 208 195 229 218 8 0 0 1 0 176 254 20 4 68 4 92 0 20 0 47 64 24 0 20 12 8 8 9 20 9 22 21 16 4 70 89 16 16 12 9 10 15 9 21 0 27 0 63 63 63 18 57 63 43 17 18 1 57 57 17 51 17 51 17 51 49 48 1 17 52 38 35 34 6 21 17 35 17 51 23 51 54 54 51 50 22 21 17 3 158 122 130 172 160 166 135 27 8 51 184 113 198 200 254 20 4 177 134 132 186 214 253 193 4 72 150 81 89 191 210 251 73 0 3 0 115 255 236 4 74 6 43 0 11 0 18 0 25 0 73 64 39 22 16 16 6 23 15 15 0 6 0 26 27 22 16 70 89 15 22 191 22 2 11 3 22 22 3 9 9 19 70 89 9 1 3 12 70 89 3 22 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 1 16 2 35 34 2 17 16 18 51 50 18 1 50 18 19 33 18 18 19 34 2 3 33 2 2 4 74 244 250 240 249 245 244 244 250 254 18 164 156 6 253 121 4 150 167 161 150 10 2 133 11 152 3 12 254 106 254 118 1 147 1 141 1 151 1 136 254 107 251 225 1 49 1 51 254 208 254 204 5 41 254 225 254 231 1 25 1 31 0 1 0 168 255 236 2 147 4 72 0 15 0 31 64 14 1 14 7 14 17 16 15 15 11 4 70 89 11 22 0 63 43 0 24 63 17 18 1 57 57 17 51 49 48 1 17 20 22 51 50 54 55 21 6 6 35 34 38 53 17 1 78 73 87 37 101 27 31 105 50 160 145 4 72 252 250 104 101 13 7 127 13 17 168 169 3 11 255 255 0 176 0 0 4 27 4 70 2 6 0 250 0 0 0 1 255 242 255 236 4 70 6 33 0 34 0 51 64 27 8 1 21 3 36 0 0 35 24 19 70 89 24 22 30 31 31 0 11 11 6 70 89 11 1 0 21 0 63 63 43 17 18 0 57 17 51 24 63 43 17 1 51 17 18 23 57 49 48 35 1 39 46 2 35 34 7 53 54 51 50 22 22 23 1 22 22 51 50 55 21 6 35 34 38 39 3 38 39 35 6 7 3 14 1 217 58 30 50 67 49 58 57 68 63 91 121 88 54 1 107 19 42 35 27 33 48 61 74 83 29 156 84 22 9 28 88 254 4 55 162 85 70 36 13 133 17 60 130 152 252 12 49 51 10 121 24 76 83 1 180 240 96 116 209 253 182 0 255 255 0 176 254 20 4 68 4 72 2 6 0 119 0 0 0 1 0 0 0 0 4 2 4 72 0 14 0 28 64 12 9 10 10 0 16 15 5 14 21 9 0 15 0 63 50 63 57 17 18 1 57 57 17 51 49 48 17 51 19 22 22 23 51 54 18 17 51 16 2 7 35 172 219 26 83 16 8 177 159 166 207 225 186 4 72 253 178 67 238 62 175 1 189 1 81 254 149 254 4 225 0 1 0 113 254 111 3 160 6 20 0 49 0 73 64 39 4 25 45 31 29 28 19 12 12 40 0 28 31 37 25 7 50 51 28 48 1 48 1 71 89 48 48 16 38 41 37 38 37 70 89 38 0 16 35 0 63 63 43 17 0 51 17 18 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 35 34 6 21 20 30 2 23 22 22 21 20 6 7 35 54 54 53 52 38 39 38 38 53 52 54 55 53 38 53 52 54 55 6 35 35 53 33 21 35 34 6 6 21 20 22 51 51 3 86 178 176 213 50 95 135 84 142 135 54 67 156 53 66 115 143 200 199 158 128 217 139 166 128 115 68 2 186 51 130 224 127 167 175 170 2 242 178 142 80 98 61 36 18 29 110 90 65 149 99 71 147 52 55 61 25 34 200 176 140 210 39 12 64 217 117 158 50 12 141 131 80 144 95 115 108 255 255 0 115 255 236 4 98 4 92 2 6 0 82 0 0 0 1 0 25 255 236 4 244 4 72 0 21 0 54 64 29 10 11 7 19 16 3 19 11 13 5 22 23 18 9 13 15 13 70 89 15 15 11 21 5 0 70 89 5 22 0 63 43 0 24 63 63 43 17 0 51 51 17 18 1 23 57 17 51 17 51 49 48 37 50 55 21 6 35 34 53 17 33 17 35 17 35 53 55 33 21 35 17 20 22 4 125 38 48 43 84 219 254 35 166 221 143 4 76 213 51 117 18 131 24 253 2 209 252 70 3 186 74 68 142 253 60 74 55 0 2 0 166 254 20 4 98 4 92 0 16 0 28 0 54 64 27 21 9 9 10 26 0 10 0 29 30 6 3 14 14 17 70 89 14 16 10 27 3 23 70 89 3 22 0 63 43 0 24 63 63 43 17 18 0 57 17 18 1 57 57 17 51 17 51 17 51 49 48 1 16 0 35 34 39 35 22 21 17 35 17 16 18 51 50 18 37 34 6 21 17 22 51 50 54 53 52 38 4 98 255 0 233 179 120 8 8 168 251 234 219 252 254 33 158 151 122 183 159 152 144 2 37 254 241 254 214 94 61 212 254 219 4 31 1 10 1 31 254 209 162 207 209 254 174 102 208 222 214 212 0 0 1 0 115 254 111 3 162 4 92 0 32 0 46 64 23 14 7 0 21 21 7 27 3 34 33 4 18 18 24 11 24 30 70 89 24 16 11 35 0 63 63 43 17 18 0 57 17 51 17 18 1 23 57 17 51 17 51 49 48 1 20 22 22 23 22 22 21 20 6 7 35 54 54 53 52 38 38 39 38 38 53 16 0 51 50 22 23 7 38 35 34 6 1 31 59 143 160 148 131 54 67 156 54 67 51 110 97 204 195 1 20 248 79 158 54 53 130 114 176 170 2 10 135 132 80 34 32 107 90 66 152 95 70 148 50 40 47 38 18 37 254 219 1 30 1 54 33 24 141 51 218 0 2 0 115 255 236 4 182 4 72 0 13 0 25 0 48 64 25 20 0 14 7 7 12 0 11 4 27 26 12 23 9 23 70 89 9 15 4 17 70 89 4 22 0 63 43 0 24 63 43 17 0 51 17 18 1 23 57 17 51 17 51 49 48 1 20 6 6 35 34 0 53 16 33 33 21 33 22 1 20 22 51 50 54 53 16 39 35 34 6 4 96 123 229 154 235 254 248 2 80 1 243 254 248 178 252 191 170 161 159 171 174 65 222 200 1 252 157 241 130 1 32 254 2 62 142 167 254 247 194 209 197 182 1 14 186 208 0 0 1 0 18 255 231 3 147 4 72 0 19 0 44 64 23 3 15 0 9 15 17 4 20 21 2 17 19 17 70 89 19 15 12 5 70 89 12 22 0 63 43 0 24 63 43 17 0 51 17 18 1 23 57 17 51 49 48 1 21 33 17 20 51 50 54 55 21 6 6 35 34 38 53 17 33 53 55 3 147 254 80 205 47 98 27 35 111 48 181 170 254 215 148 4 72 142 253 150 223 13 7 125 15 18 170 170 2 127 74 68 0 0 1 0 164 255 236 4 113 4 72 0 21 0 37 64 17 12 19 6 3 19 3 23 22 15 4 15 0 9 70 89 0 22 0 63 43 0 24 63 51 17 18 1 57 57 17 51 17 51 49 48 5 34 38 17 17 51 17 20 22 51 50 54 53 52 38 39 51 22 22 21 16 0 2 115 231 232 166 158 153 167 161 28 34 166 36 28 254 254 20 250 1 10 2 88 253 176 192 195 238 251 130 224 136 144 214 140 254 194 254 212 0 0 2 0 115 254 20 5 76 4 92 0 24 0 34 0 65 64 35 10 4 32 24 24 12 0 25 19 19 0 7 4 4 35 36 16 28 70 89 16 16 6 15 32 12 1 12 70 89 23 1 22 0 27 0 63 63 51 43 17 0 51 24 63 63 43 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 17 36 0 17 16 55 23 6 6 21 16 5 17 52 54 51 50 18 21 20 2 6 7 17 1 52 38 35 34 6 21 17 54 54 2 131 254 252 254 244 207 131 89 81 1 104 166 149 180 218 136 248 165 1 121 124 102 73 78 179 198 254 20 1 218 11 1 35 1 15 1 40 253 90 117 224 124 254 117 35 2 108 187 190 254 219 250 178 254 251 144 8 254 38 4 39 185 219 120 114 253 146 16 236 0 1 255 236 254 20 4 80 4 78 0 32 0 57 64 33 14 7 8 5 21 24 30 7 34 23 33 5 24 8 21 4 6 23 27 17 12 70 89 17 27 6 15 0 28 70 89 0 15 0 63 43 0 24 63 63 43 0 24 63 18 23 57 17 1 51 18 23 57 49 48 19 50 22 22 23 19 1 51 1 19 22 22 51 50 55 21 6 35 34 38 39 3 1 35 1 3 38 38 35 34 7 53 54 178 54 78 62 44 145 1 62 180 254 84 190 48 82 63 45 45 60 59 115 141 59 150 254 150 178 1 208 172 38 70 43 37 27 49 4 78 43 91 112 254 143 2 97 252 252 254 28 122 74 8 129 15 118 159 1 131 253 104 3 68 1 188 99 80 11 129 17 0 1 0 164 254 20 5 135 6 18 0 26 0 61 64 31 22 19 1 14 14 25 15 4 10 10 15 19 3 27 28 26 0 7 20 15 1 25 16 25 70 89 13 16 22 15 27 0 63 63 51 43 17 0 51 24 63 51 63 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 17 54 54 53 52 38 39 51 18 21 16 0 5 17 35 17 36 0 17 17 51 17 20 22 23 17 3 90 188 203 26 37 166 63 254 227 254 240 164 254 248 254 246 166 180 184 6 18 250 105 15 231 204 120 235 168 254 240 244 254 236 254 206 16 254 38 1 218 9 1 34 1 16 2 31 253 219 195 218 13 5 153 0 1 0 115 255 236 5 188 4 72 0 39 0 61 64 30 10 3 38 19 19 16 25 32 32 16 3 3 40 41 38 17 17 0 28 6 15 22 13 0 13 70 89 35 0 22 0 63 50 43 17 0 51 24 63 51 18 57 47 57 17 18 1 23 57 17 51 17 51 18 57 17 51 49 48 5 34 2 53 52 18 55 51 6 6 21 20 22 51 50 54 53 17 51 17 20 22 51 50 54 53 52 2 39 51 22 18 21 20 2 35 34 39 35 6 1 244 182 203 55 68 172 68 57 120 107 94 105 161 106 93 107 120 55 69 172 65 57 203 182 220 68 9 65 20 1 40 254 156 1 1 153 156 255 157 193 216 143 125 1 55 254 201 128 140 216 193 151 1 4 157 146 254 249 157 252 254 214 182 182 255 255 0 9 255 236 2 147 5 211 2 38 1 134 0 0 1 7 0 106 254 212 0 0 0 10 180 2 1 37 17 38 0 43 53 53 255 255 0 164 255 236 4 113 5 211 2 38 1 146 0 0 1 6 0 106 57 0 0 10 180 2 1 43 17 38 0 43 53 53 255 255 0 115 255 236 4 98 6 115 2 38 0 82 0 0 1 6 1 84 33 0 0 8 179 2 34 17 38 0 43 53 255 255 0 164 255 236 4 113 6 115 2 38 1 146 0 0 1 6 1 84 39 0 0 8 179 1 31 17 38 0 43 53 255 255 0 115 255 236 5 188 6 115 2 38 1 150 0 0 1 7 1 84 0 201 0 0 0 8 179 1 49 17 38 0 43 53 255 255 0 201 0 0 3 248 7 37 2 38 0 40 0 0 1 7 0 106 0 39 1 82 0 10 180 2 1 33 5 38 0 43 53 53 0 1 0 18 255 236 5 66 5 182 0 29 0 70 64 38 22 14 14 15 8 27 27 20 2 15 17 5 30 31 22 13 73 89 22 22 15 18 21 17 18 17 73 89 18 3 15 18 0 5 73 89 0 19 0 63 43 0 24 63 63 43 17 0 51 17 18 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 5 34 39 53 22 51 50 54 53 53 52 38 35 33 17 35 17 33 53 33 21 33 17 33 50 22 21 21 20 6 3 207 96 54 55 91 101 104 131 140 254 131 170 254 176 3 183 254 67 1 140 205 221 196 20 22 150 19 124 112 131 128 113 253 27 5 31 151 151 254 94 191 178 143 190 211 255 255 0 201 0 0 3 248 7 115 2 38 1 97 0 0 1 7 0 118 0 90 1 82 0 8 179 1 15 5 38 0 43 53 0 1 0 125 255 236 4 227 5 205 0 24 0 56 64 30 6 3 17 22 12 5 17 4 25 26 3 6 73 89 3 3 14 20 20 0 73 89 20 4 14 9 73 89 14 19 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 51 49 48 1 34 4 7 33 21 33 18 0 51 50 55 21 6 35 32 0 17 16 0 33 50 23 7 38 3 66 226 254 243 30 2 211 253 41 10 1 11 249 162 201 161 226 254 180 254 162 1 121 1 78 237 178 71 169 5 51 250 241 150 254 238 254 227 55 149 57 1 132 1 109 1 95 1 145 88 148 82 255 255 0 106 255 236 4 2 5 203 2 6 0 54 0 0 255 255 0 84 0 0 2 86 5 182 2 6 0 44 0 0 255 255 0 60 0 0 2 111 7 37 2 38 0 44 0 0 1 7 0 106 255 7 1 82 0 10 180 2 1 33 5 38 0 43 53 53 255 255 255 96 254 127 1 104 5 182 2 6 0 45 0 0 0 2 0 0 255 233 7 35 5 182 0 26 0 35 0 71 64 38 24 27 27 4 31 0 0 4 13 3 36 37 24 35 73 89 24 24 11 22 22 6 73 89 22 3 11 16 74 89 11 18 4 27 74 89 4 18 0 63 43 0 24 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 4 33 33 17 33 2 2 6 6 35 34 39 53 22 51 50 62 2 18 19 33 17 51 32 1 51 50 54 53 52 38 35 35 7 35 254 237 254 252 254 185 254 147 57 84 80 139 107 69 64 50 63 48 65 43 55 68 65 2 166 122 2 58 253 76 133 198 183 192 220 102 1 170 206 220 5 31 254 72 253 246 251 121 25 143 26 62 103 250 1 190 1 226 253 144 253 77 139 140 138 124 0 2 0 201 0 0 7 84 5 182 0 17 0 26 0 74 64 38 11 7 7 8 15 18 18 12 4 22 0 0 4 8 3 27 28 26 6 11 6 73 89 15 11 11 4 13 9 3 8 18 4 18 74 89 4 18 0 63 43 0 24 63 63 51 18 57 47 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 17 51 49 48 1 20 4 33 33 17 33 17 35 17 51 17 33 17 51 17 51 32 1 51 50 54 53 52 38 35 35 7 84 254 240 254 251 254 183 253 125 170 170 2 131 172 121 2 57 253 78 133 196 185 193 219 102 1 170 206 220 2 176 253 80 5 182 253 146 2 110 253 144 253 77 139 140 137 125 0 0 1 0 18 0 0 5 66 5 182 0 19 0 58 64 31 0 12 12 13 6 5 5 18 13 15 4 20 21 19 15 16 15 73 89 0 11 73 89 0 0 13 16 3 6 13 18 0 63 51 63 18 57 47 43 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 33 50 22 21 17 35 17 52 38 35 33 17 35 17 33 53 33 21 33 2 12 1 144 205 217 170 125 140 254 125 170 254 176 3 246 254 4 3 125 188 181 253 244 1 246 126 113 253 27 5 31 151 151 255 255 0 201 0 0 4 229 7 115 2 38 1 180 0 0 1 7 0 118 0 162 1 82 0 8 179 1 20 5 38 0 43 53 255 255 0 27 255 236 4 248 7 94 2 38 1 189 0 0 1 7 2 54 0 68 1 82 0 8 179 1 23 5 38 0 43 53 0 1 0 201 254 131 5 12 5 182 0 11 0 48 64 24 8 5 2 3 9 0 0 3 5 3 12 13 10 6 3 5 8 73 89 1 5 18 3 34 0 63 63 51 43 0 24 63 51 17 18 1 23 57 17 51 17 51 17 51 49 48 33 33 17 35 17 33 17 51 17 33 17 51 5 12 254 47 176 254 62 170 2 239 170 254 131 1 125 5 182 250 228 5 28 0 255 255 0 0 0 0 5 16 5 188 2 6 0 36 0 0 0 2 0 201 0 0 4 125 5 182 0 13 0 22 0 61 64 32 18 0 9 14 14 4 4 7 0 3 24 23 9 22 73 89 9 9 4 5 5 8 73 89 5 3 4 14 74 89 4 18 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 4 33 33 17 33 21 33 17 51 50 22 22 1 51 50 54 53 52 38 35 35 4 125 254 253 254 251 254 84 3 94 253 76 227 193 242 116 252 246 239 190 173 176 219 207 1 170 218 208 5 182 151 254 39 89 174 254 84 130 149 142 120 0 255 255 0 201 0 0 4 190 5 182 2 6 0 37 0 0 255 255 0 201 0 0 3 248 5 182 2 6 1 97 0 0 0 2 0 14 254 131 5 74 5 182 0 13 0 19 0 67 64 36 4 5 19 7 16 10 14 12 1 0 0 12 10 7 5 5 20 21 10 16 73 89 10 3 1 5 34 19 12 6 3 6 73 89 3 18 0 63 43 17 0 51 51 24 63 51 63 43 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 35 17 33 17 35 17 51 18 18 19 33 17 51 33 17 33 6 2 7 5 74 162 252 8 162 113 154 219 12 2 145 185 254 157 254 179 18 206 137 254 131 1 125 254 131 2 23 1 3 2 230 1 51 250 228 4 131 242 253 89 234 0 255 255 0 201 0 0 3 248 5 182 2 6 0 40 0 0 0 1 0 2 0 0 6 188 5 182 0 17 0 60 64 31 6 13 13 3 14 10 9 8 1 14 0 17 7 18 19 15 12 9 6 3 0 0 1 14 11 17 18 7 4 1 3 0 63 51 51 63 51 51 18 57 17 51 51 51 51 51 17 18 1 23 57 17 51 51 17 51 49 48 1 1 51 1 17 51 17 1 51 1 1 35 1 17 35 17 1 35 2 86 253 193 190 2 57 164 2 58 190 253 192 2 82 196 253 186 164 253 187 199 2 240 2 198 253 60 2 196 253 60 2 196 253 60 253 14 2 229 253 27 2 229 253 27 0 1 0 74 255 236 4 53 5 203 0 40 0 67 64 36 28 0 19 7 7 0 3 23 35 12 6 41 42 3 24 23 24 23 74 89 24 24 10 38 38 31 74 89 38 4 10 16 74 89 10 19 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 49 48 1 20 6 7 21 22 22 21 20 4 33 34 39 53 22 22 51 50 54 53 52 38 35 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 4 25 183 161 183 189 254 206 254 233 255 163 96 223 103 198 203 225 223 218 209 205 225 162 137 110 178 117 84 101 251 135 225 255 4 96 144 180 24 8 25 180 145 205 229 79 158 46 50 150 141 134 138 143 147 132 107 128 50 74 114 75 77 197 0 1 0 203 0 0 5 82 5 182 0 15 0 52 64 24 14 2 2 15 6 9 9 8 15 8 16 17 5 4 12 13 4 13 9 15 18 6 0 3 0 63 50 63 51 57 57 17 51 17 51 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 19 51 17 20 7 51 1 51 17 35 17 52 55 35 1 35 203 159 14 8 3 52 186 160 17 9 252 203 186 5 182 252 211 225 182 4 196 250 74 3 37 201 221 251 53 0 255 255 0 203 0 0 5 82 7 94 2 38 1 178 0 0 1 7 2 54 0 225 1 82 0 8 179 1 16 5 38 0 43 53 0 1 0 201 0 0 4 229 5 182 0 10 0 45 64 22 7 3 3 4 0 9 10 4 4 11 12 10 7 2 7 4 8 5 3 1 4 18 0 63 51 63 51 18 57 57 17 51 17 18 1 23 57 17 51 17 51 49 48 33 35 1 17 35 17 51 17 1 51 1 4 229 206 253 92 170 170 2 147 195 253 121 2 229 253 27 5 182 253 60 2 196 253 58 0 1 0 0 255 231 4 217 5 182 0 19 0 45 64 24 3 18 1 0 0 18 10 3 20 21 18 3 73 89 18 3 8 13 74 89 8 19 1 18 0 63 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 33 35 17 33 7 2 2 6 39 34 39 53 22 51 50 54 54 18 19 33 4 217 170 254 37 31 61 93 152 126 74 59 54 59 53 79 61 93 56 3 18 5 31 240 254 33 254 69 174 2 25 143 26 87 215 2 89 1 184 255 255 0 201 0 0 6 113 5 182 2 6 0 48 0 0 255 255 0 201 0 0 5 31 5 182 2 6 0 43 0 0 255 255 0 125 255 236 5 190 5 205 2 6 0 50 0 0 255 255 0 201 0 0 5 12 5 182 2 6 1 110 0 0 255 255 0 201 0 0 4 104 5 182 2 6 0 51 0 0 255 255 0 125 255 236 4 207 5 203 2 6 0 38 0 0 255 255 0 18 0 0 4 90 5 182 2 6 0 55 0 0 0 1 0 27 255 236 4 248 5 182 0 22 0 42 64 21 18 8 2 9 4 23 24 14 13 8 13 0 17 9 3 0 5 73 89 0 19 0 63 43 0 24 63 51 18 57 57 17 51 17 18 1 23 57 49 48 5 34 39 53 22 51 50 54 55 1 51 1 22 23 51 54 55 1 51 1 14 2 1 37 111 84 93 96 110 133 66 253 199 188 1 176 25 14 8 28 11 1 103 180 254 45 84 135 169 20 30 166 43 101 139 4 65 252 193 49 47 84 22 3 53 251 234 187 170 79 255 255 0 106 255 236 5 248 5 203 2 6 1 115 0 0 255 255 0 8 0 0 4 150 5 182 2 6 0 59 0 0 0 1 0 201 254 131 5 184 5 182 0 11 0 50 64 25 8 5 9 0 3 2 2 0 5 3 12 13 10 6 3 0 8 5 8 73 89 5 18 3 34 0 63 63 43 17 0 51 24 63 51 17 18 1 23 57 17 51 17 51 17 51 49 48 37 51 17 35 17 33 17 51 17 33 17 51 5 12 172 161 251 178 170 2 239 170 154 253 233 1 125 5 182 250 228 5 28 0 0 1 0 170 0 0 4 199 5 182 0 19 0 45 64 22 11 8 17 1 1 0 8 0 20 21 5 14 73 89 5 5 1 18 9 3 1 18 0 63 63 51 18 57 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 33 35 17 6 6 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 4 199 170 149 198 106 207 223 170 127 143 97 177 169 170 2 92 53 39 190 179 2 69 253 207 121 116 29 55 2 202 0 1 0 201 0 0 7 121 5 182 0 11 0 49 64 24 4 1 8 5 9 0 0 5 1 3 12 13 10 6 2 3 8 4 1 4 73 89 1 18 0 63 43 17 0 51 24 63 51 51 17 18 1 23 57 17 51 17 51 17 51 49 48 33 33 17 51 17 33 17 51 17 33 17 51 7 121 249 80 170 2 88 170 2 88 172 5 182 250 228 5 28 250 228 5 28 0 1 0 201 254 131 8 4 5 182 0 15 0 59 64 30 3 0 7 4 8 11 14 13 13 11 4 0 4 16 17 14 34 9 5 1 3 11 7 3 0 3 73 89 0 18 0 63 43 17 0 51 51 24 63 51 51 63 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 51 17 51 17 33 17 51 17 33 17 51 17 51 17 35 17 201 170 2 71 172 2 72 170 172 162 5 182 250 228 5 28 250 228 5 28 250 228 253 233 1 125 0 0 2 0 18 0 0 5 23 5 182 0 12 0 21 0 61 64 32 9 13 13 4 17 0 0 4 6 3 22 23 9 21 73 89 9 9 4 7 7 6 73 89 7 3 4 13 74 89 4 18 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 4 35 33 17 33 53 33 17 51 32 4 1 51 50 54 53 52 38 35 35 5 23 254 253 249 254 71 254 176 1 250 244 1 5 1 18 252 245 252 181 169 175 203 224 1 170 206 220 5 31 151 253 144 205 254 26 139 140 136 126 0 0 3 0 201 0 0 6 10 5 182 0 10 0 19 0 23 0 63 64 32 3 11 11 0 15 7 21 20 20 7 0 3 24 25 21 18 3 19 73 89 3 3 0 22 1 3 0 11 74 89 0 18 0 63 43 0 24 63 51 18 57 47 43 0 24 63 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 51 17 51 17 51 32 4 21 20 4 35 37 51 50 54 53 52 38 35 35 1 35 17 51 201 170 239 1 5 1 18 254 253 249 254 246 247 181 170 179 200 219 4 151 170 170 5 182 253 144 205 207 206 220 145 141 140 137 123 253 82 5 182 0 2 0 201 0 0 4 186 5 182 0 10 0 18 0 50 64 25 7 11 11 4 14 0 4 0 19 20 7 18 73 89 7 7 4 5 3 4 11 74 89 4 18 0 63 43 0 24 63 18 57 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 1 20 4 35 33 17 51 17 33 32 4 1 33 32 17 52 38 35 33 4 186 254 241 251 254 25 170 1 35 1 11 1 25 252 185 1 43 1 108 187 206 254 242 1 170 203 223 5 182 253 144 211 254 32 1 23 135 127 0 1 0 61 255 236 4 137 5 203 0 26 0 58 64 31 24 21 21 9 9 22 15 3 4 27 28 23 22 73 89 23 23 12 5 12 18 73 89 12 19 5 0 73 89 5 4 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 34 7 39 54 51 50 4 18 21 16 0 33 34 39 53 22 22 51 32 0 19 33 53 33 38 0 1 211 172 162 72 172 236 217 1 57 162 254 148 254 170 227 156 83 172 99 1 15 1 20 8 253 49 2 205 22 254 241 5 51 76 144 84 176 254 186 221 254 136 254 108 57 149 21 34 1 33 1 16 152 229 1 2 0 2 0 201 255 236 7 231 5 205 0 18 0 30 0 71 64 38 12 8 8 9 19 13 6 25 0 0 6 9 3 31 32 16 28 73 89 16 4 12 7 73 89 12 12 9 10 3 9 18 3 22 73 89 3 19 0 63 43 0 24 63 63 18 57 47 43 0 24 63 43 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 16 0 33 32 0 3 33 17 35 17 51 17 33 18 0 33 32 0 1 16 18 51 50 18 17 16 2 35 34 2 7 231 254 171 254 208 254 211 254 171 11 254 158 170 170 1 100 23 1 81 1 31 1 51 1 86 251 160 238 231 234 237 235 232 233 240 2 221 254 158 254 113 1 111 1 85 253 80 5 182 253 146 1 55 1 78 254 111 254 161 254 216 254 204 1 50 1 42 1 42 1 46 254 207 0 2 0 51 0 0 4 78 5 182 0 13 0 21 0 61 64 32 21 12 12 11 18 6 2 6 3 11 4 23 22 0 20 74 89 3 9 0 0 2 9 9 15 74 89 9 3 12 2 18 0 63 51 63 43 17 18 0 57 24 47 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 1 35 1 38 38 53 52 36 33 33 17 35 17 17 35 34 6 21 16 33 51 2 123 254 129 201 1 154 161 146 1 15 1 19 1 146 170 227 183 190 1 123 221 2 98 253 158 2 127 51 207 158 196 211 250 74 2 98 2 193 126 142 254 221 255 255 0 94 255 236 3 205 4 90 2 6 0 68 0 0 0 2 0 119 255 236 4 84 6 33 0 23 0 34 0 59 64 30 26 18 32 11 0 0 6 18 3 36 35 12 11 15 28 70 89 11 15 15 21 5 21 24 70 89 21 22 5 1 0 63 63 43 17 18 0 57 24 47 57 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 19 16 18 55 36 55 23 4 7 6 6 7 51 54 54 51 50 18 21 16 0 35 34 0 5 32 17 16 33 34 6 6 7 16 18 119 212 230 1 30 218 31 254 165 149 145 145 7 12 62 196 107 202 226 254 250 234 231 254 250 1 252 1 49 254 235 76 141 117 32 166 2 145 1 104 1 147 50 61 38 146 58 34 33 246 212 84 96 254 250 232 254 255 254 223 1 98 215 1 133 1 115 63 104 55 254 249 254 237 0 3 0 176 0 0 4 76 4 72 0 14 0 22 0 31 0 73 64 38 28 20 20 11 23 0 15 7 7 0 3 11 4 32 33 4 28 19 28 19 70 89 28 28 11 12 12 27 70 89 12 15 11 20 70 89 11 21 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 20 6 7 21 22 22 21 20 6 35 33 17 33 32 3 52 38 35 33 17 33 32 3 52 38 35 33 17 33 50 54 4 41 123 111 140 129 225 216 254 29 1 225 1 152 131 135 156 254 211 1 49 1 31 31 123 125 254 199 1 25 154 126 3 53 107 111 19 9 19 126 111 153 166 4 72 253 2 89 81 254 151 2 154 80 67 254 203 76 0 0 1 0 176 0 0 3 68 4 72 0 5 0 29 64 14 2 3 0 3 7 6 4 1 70 89 4 15 3 21 0 63 63 43 17 18 1 57 57 17 51 49 48 1 33 17 35 17 33 3 68 254 18 166 2 148 3 186 252 70 4 72 0 2 0 41 254 133 4 104 4 72 0 13 0 19 0 67 64 36 4 5 19 7 16 10 14 12 1 0 0 12 10 7 5 5 20 21 10 16 71 89 10 15 1 5 34 19 12 6 3 6 70 89 3 21 0 63 43 17 0 51 51 24 63 51 63 43 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 35 17 33 17 35 17 51 54 18 19 33 17 51 33 17 35 6 2 7 4 104 161 253 2 160 86 134 152 3 2 43 157 254 195 246 13 145 108 254 133 1 123 254 133 2 10 182 1 234 1 25 252 71 3 54 222 254 57 145 0 255 255 0 115 255 236 4 18 4 92 2 6 0 72 0 0 0 1 0 4 0 0 5 223 4 70 0 17 0 60 64 31 2 9 9 17 10 6 4 5 10 14 15 13 7 19 18 17 11 8 5 2 14 14 13 3 0 15 15 10 7 13 21 0 63 51 51 63 51 51 18 57 17 51 51 51 51 51 17 18 1 23 57 17 51 51 17 51 49 48 1 51 17 1 51 1 1 35 1 17 35 17 1 35 1 1 51 1 2 164 153 1 197 182 254 54 1 241 192 254 30 153 254 31 191 1 240 254 55 182 1 195 4 70 253 237 2 19 253 237 253 205 2 43 253 213 2 43 253 213 2 51 2 19 253 237 0 1 0 68 255 236 3 127 4 92 0 34 0 77 64 43 2 13 30 19 19 13 15 33 8 24 6 35 36 16 34 33 34 33 70 89 15 34 31 34 2 11 3 34 34 22 10 22 27 70 89 22 22 10 4 70 89 10 16 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 0 57 17 18 1 23 57 17 51 17 51 49 48 1 32 53 52 35 34 6 7 39 54 51 50 22 21 20 7 21 22 22 21 20 6 35 34 39 53 22 51 50 54 53 52 33 35 53 1 129 1 55 252 77 126 102 59 170 201 189 218 205 126 116 245 216 237 129 183 187 144 147 254 201 152 2 129 172 162 28 42 135 76 155 134 184 57 8 37 137 103 152 169 71 152 86 99 93 191 141 0 1 0 176 0 0 4 98 4 72 0 13 0 52 64 25 8 4 7 7 6 11 3 3 12 6 12 15 14 3 10 12 4 13 15 12 21 7 21 4 15 0 63 63 63 63 17 18 57 57 17 18 1 57 57 17 51 17 51 17 51 17 51 51 49 48 1 17 7 7 1 51 17 35 17 55 55 1 35 17 1 76 7 3 2 81 207 155 3 5 253 176 207 4 72 253 73 182 57 3 166 251 184 2 158 132 130 252 92 4 72 0 255 255 0 176 0 0 4 98 6 12 2 38 1 210 0 0 1 6 2 54 61 0 0 8 179 1 14 17 38 0 43 53 0 1 0 176 0 0 4 12 4 72 0 10 0 45 64 22 10 6 6 7 3 1 2 7 4 12 11 2 10 5 10 7 0 8 15 4 7 21 0 63 51 63 51 18 57 57 17 51 17 18 1 23 57 17 51 17 51 49 48 1 51 1 1 35 1 17 35 17 51 17 3 47 182 254 39 2 0 194 254 12 166 166 4 72 253 239 253 201 2 43 253 213 4 72 253 235 0 1 0 16 255 242 3 225 4 72 0 16 0 45 64 24 1 0 3 15 10 15 0 3 18 17 15 3 70 89 15 15 7 12 71 89 7 22 1 21 0 63 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 33 35 17 33 2 2 6 35 34 39 53 22 51 50 18 19 33 3 225 168 254 183 27 96 153 118 54 32 22 28 115 136 35 2 129 3 186 254 156 254 94 194 12 123 6 1 230 1 239 0 1 0 176 0 0 5 47 4 70 0 20 0 53 64 25 3 6 6 5 18 15 15 16 5 16 22 21 7 14 0 14 11 3 17 15 6 16 21 11 21 0 63 63 51 63 51 18 57 57 17 51 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 37 55 55 1 51 17 35 17 7 7 1 35 1 38 39 17 35 17 51 1 22 2 233 31 43 1 41 211 147 20 58 254 229 139 254 229 53 20 148 203 1 31 43 160 93 118 2 211 251 186 3 137 58 153 253 74 2 184 134 75 252 119 4 70 253 73 110 0 1 0 176 0 0 4 98 4 72 0 11 0 57 64 30 2 6 6 5 1 9 9 10 5 10 13 12 1 8 70 89 47 1 63 1 2 1 1 10 3 11 15 6 10 21 0 63 51 63 51 18 57 47 93 43 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 1 17 33 17 51 17 35 17 33 17 35 17 1 86 2 102 166 166 253 154 166 4 72 254 53 1 203 251 184 1 238 254 18 4 72 255 255 0 115 255 236 4 98 4 92 2 6 0 82 0 0 0 1 0 176 0 0 4 72 4 72 0 7 0 35 64 17 0 1 5 4 1 4 8 9 2 7 70 89 2 15 5 1 21 0 63 51 63 43 17 18 1 57 57 17 51 17 51 49 48 33 35 17 33 17 35 17 33 1 86 166 3 152 168 253 182 4 72 251 184 3 184 0 255 255 0 176 254 20 4 117 4 92 2 6 0 83 0 0 255 255 0 115 255 236 3 139 4 92 2 6 0 70 0 0 0 1 0 41 0 0 3 147 4 72 0 7 0 36 64 18 2 3 0 3 5 3 8 9 1 5 6 5 70 89 6 15 3 21 0 63 63 43 17 0 51 17 18 1 23 57 17 51 49 48 1 33 17 35 17 33 53 33 3 147 254 156 166 254 160 3 106 3 186 252 70 3 186 142 255 255 0 2 254 20 4 6 4 72 2 6 0 92 0 0 0 3 0 113 254 20 5 70 6 20 0 17 0 24 0 30 0 76 64 39 18 9 28 15 4 4 21 12 5 25 0 0 5 9 3 31 32 13 0 27 22 12 22 70 89 15 12 16 28 21 6 21 70 89 3 6 22 5 27 0 63 63 51 43 17 0 51 24 63 51 43 17 0 51 24 63 17 18 1 23 57 17 51 17 51 51 51 17 51 51 17 51 49 48 1 20 0 7 17 35 17 38 0 53 52 0 55 17 51 17 22 0 5 20 22 23 17 6 6 5 16 37 17 54 54 5 70 254 229 254 164 248 254 224 1 31 255 158 251 1 30 251 217 176 192 185 183 3 123 254 147 190 175 2 37 249 254 217 21 254 36 1 220 19 1 46 244 249 1 38 20 1 188 254 68 23 254 212 240 192 218 18 3 84 17 207 200 1 127 39 252 174 19 218 255 255 0 39 0 0 4 8 4 72 2 6 0 91 0 0 0 1 0 176 254 133 4 221 4 72 0 11 0 50 64 25 6 3 7 10 1 0 0 10 3 3 12 13 8 4 15 10 6 3 6 70 89 3 21 1 34 0 63 63 43 17 0 51 24 63 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 35 17 33 17 51 17 33 17 51 17 51 4 221 166 252 121 166 2 70 166 155 254 133 1 123 4 72 252 71 3 185 252 71 0 1 0 156 0 0 4 45 4 72 0 18 0 45 64 22 6 10 10 9 1 17 9 17 20 19 3 14 70 89 3 3 10 7 18 15 10 21 0 63 63 51 18 57 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 1 17 20 51 50 54 55 17 51 17 35 17 6 6 35 34 38 53 17 1 66 219 91 166 105 166 166 105 179 113 164 186 4 72 254 112 192 56 67 1 213 251 184 1 240 72 59 172 147 1 156 0 1 0 176 0 0 6 111 4 72 0 11 0 49 64 24 8 5 0 9 1 4 4 9 5 3 12 13 10 2 6 15 0 8 5 8 70 89 5 21 0 63 43 17 0 51 24 63 51 51 17 18 1 23 57 17 51 17 51 17 51 49 48 37 33 17 51 17 33 17 51 17 33 17 51 3 225 1 230 168 250 65 166 1 229 166 143 3 185 251 184 4 72 252 71 3 185 0 0 1 0 176 254 135 7 10 4 70 0 15 0 59 64 30 12 9 0 13 1 4 7 6 6 4 13 9 4 16 17 14 2 10 15 4 0 12 9 12 70 89 9 21 7 34 0 63 63 43 17 0 51 51 24 63 51 51 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 37 33 17 51 17 51 17 35 17 33 17 51 17 33 17 51 3 225 1 230 166 157 168 250 78 166 1 229 166 143 3 183 252 73 253 248 1 121 4 70 252 73 3 183 0 0 2 0 41 0 0 5 29 4 72 0 12 0 20 0 61 64 32 0 18 18 8 13 4 4 8 10 3 21 22 0 17 70 89 0 0 8 11 11 10 70 89 11 15 8 18 70 89 8 21 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 33 50 22 21 20 6 35 33 17 33 53 33 1 52 38 35 33 17 33 32 2 45 1 57 224 215 223 220 254 37 254 162 2 4 2 76 124 157 254 205 1 57 1 19 2 131 154 155 166 168 3 186 142 252 252 93 83 254 151 0 0 3 0 176 0 0 5 121 4 72 0 10 0 14 0 22 0 63 64 32 0 16 16 8 4 19 12 11 11 19 8 3 23 24 12 21 0 15 70 89 0 0 8 13 9 15 8 16 70 89 8 21 0 63 43 0 24 63 51 18 57 47 43 0 24 63 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 33 50 22 21 20 6 35 33 17 51 1 35 17 51 1 17 33 32 53 52 38 35 1 86 1 43 209 201 213 207 254 57 166 4 35 166 166 251 221 1 25 1 8 122 147 2 131 155 154 165 169 4 72 251 184 4 72 253 172 254 151 185 92 84 0 2 0 176 0 0 4 76 4 72 0 9 0 18 0 50 64 25 15 3 0 11 11 7 3 7 20 19 0 10 70 89 0 0 7 8 15 7 11 70 89 7 21 0 63 43 0 24 63 18 57 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 1 33 32 17 20 6 35 33 17 51 17 17 33 50 54 53 52 38 35 1 86 1 82 1 164 219 211 254 18 166 1 64 132 140 129 148 2 131 254 203 162 172 4 72 253 172 254 151 92 93 91 85 0 1 0 57 255 236 3 125 4 92 0 26 0 68 64 38 12 9 9 24 24 10 18 2 4 27 28 11 10 70 89 15 11 31 11 2 11 3 11 11 0 21 21 15 70 89 21 16 0 6 70 89 0 22 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 1 23 57 17 51 17 51 49 48 5 34 39 53 22 22 51 50 54 55 33 53 33 38 38 35 34 7 39 54 54 51 32 0 17 16 0 1 86 167 118 60 140 91 174 189 10 253 213 2 41 16 169 161 103 151 47 55 164 80 1 0 1 10 254 223 20 57 147 23 36 186 185 141 172 160 54 140 26 35 254 219 254 236 254 243 254 214 0 2 0 176 255 236 6 51 4 92 0 18 0 30 0 81 64 45 12 8 8 9 19 13 6 25 0 0 6 9 3 31 32 16 28 70 89 16 16 12 7 70 89 15 12 31 12 2 11 3 12 12 9 10 15 9 21 3 22 70 89 3 22 0 63 43 0 24 63 63 18 57 47 95 94 93 43 0 24 63 43 17 18 1 23 57 17 51 17 51 51 17 51 17 51 49 48 1 16 0 35 34 2 39 33 17 35 17 51 17 33 54 54 51 50 0 1 20 22 51 50 54 53 52 38 35 34 6 6 51 254 255 224 213 250 14 254 225 166 166 1 33 20 252 207 220 1 1 252 238 146 161 158 149 146 161 161 146 2 37 254 243 254 212 1 11 247 254 18 4 72 254 53 228 251 254 207 254 250 211 219 213 217 210 216 216 0 2 0 37 0 0 3 193 4 72 0 13 0 20 0 61 64 32 17 11 11 10 14 5 1 5 2 10 4 22 21 13 16 70 89 2 8 13 13 1 8 8 19 70 89 8 15 11 1 21 0 63 51 63 43 17 18 0 57 24 47 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 51 35 1 38 38 53 52 54 51 33 17 35 17 33 1 20 33 33 17 33 34 231 194 1 59 127 135 202 181 1 232 166 254 235 254 246 1 20 1 11 254 211 242 1 207 28 161 122 150 172 251 184 1 182 1 78 190 1 114 255 255 0 115 255 236 4 18 5 211 2 38 0 72 0 0 1 6 0 106 8 0 0 10 180 3 2 48 17 38 0 43 53 53 0 1 0 20 254 20 4 68 6 20 0 39 0 102 64 58 29 27 23 15 15 20 16 7 37 37 25 2 16 18 5 40 41 30 29 33 11 70 89 26 18 19 18 71 89 23 19 15 19 31 19 47 19 3 9 3 29 33 19 19 33 29 3 16 21 0 16 21 0 5 70 89 0 27 0 63 43 0 24 63 63 18 23 57 47 47 47 95 94 93 17 51 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 51 51 49 48 1 34 39 53 22 51 50 53 17 52 38 35 34 6 21 17 35 17 35 53 51 53 51 21 33 21 33 21 20 7 51 54 54 51 50 22 21 17 20 6 3 47 79 52 58 55 129 122 130 173 157 168 156 156 166 1 145 254 111 8 10 49 181 116 201 201 137 254 20 25 137 20 170 3 82 134 132 188 211 253 231 4 219 127 186 186 127 196 84 56 79 91 191 210 252 182 156 170 255 255 0 176 0 0 3 68 6 33 2 38 1 205 0 0 1 6 0 118 241 0 0 8 179 1 15 17 38 0 43 53 0 1 0 115 255 236 3 170 4 92 0 25 0 68 64 38 15 18 18 3 9 24 17 3 4 26 27 15 18 70 89 15 15 31 15 2 11 3 15 15 0 6 6 12 70 89 6 16 0 21 70 89 0 22 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 1 23 57 17 51 17 51 49 48 5 34 0 17 16 0 51 50 22 23 7 38 35 34 6 7 33 21 33 22 22 51 50 55 21 6 2 121 248 254 242 1 19 251 82 158 57 49 143 109 164 170 16 2 41 253 213 9 170 167 140 151 116 20 1 35 1 16 1 19 1 42 32 25 141 51 163 169 141 190 181 59 147 57 255 255 0 106 255 236 3 115 4 92 2 6 0 86 0 0 255 255 0 162 0 0 1 102 5 223 2 6 0 76 0 0 255 255 255 236 0 0 2 31 5 211 2 38 0 243 0 0 1 7 0 106 254 183 0 0 0 10 180 2 1 25 17 38 0 43 53 53 255 255 255 145 254 20 1 102 5 223 2 6 0 77 0 0 0 2 0 16 255 242 6 66 4 72 0 21 0 29 0 76 64 41 9 20 0 27 27 7 22 4 4 7 20 14 4 30 31 0 26 70 89 0 0 12 20 20 9 70 89 20 15 12 17 71 89 12 21 7 27 70 89 7 21 0 63 43 0 24 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 51 50 22 21 16 33 33 17 33 2 2 35 34 39 53 22 51 50 18 19 33 1 52 38 35 35 17 51 32 3 176 244 211 203 254 75 254 101 254 254 40 181 171 56 32 22 28 115 136 35 2 80 1 236 125 158 231 237 1 21 2 131 155 154 254 178 3 186 253 250 254 62 12 123 6 1 230 1 239 252 252 91 85 254 151 0 2 0 176 0 0 6 164 4 70 0 17 0 25 0 74 64 38 15 11 11 12 1 19 19 16 8 22 5 5 8 12 3 26 27 18 10 15 10 70 89 1 15 15 8 17 13 15 12 21 8 19 70 89 8 21 0 63 43 0 24 63 63 51 18 57 47 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 17 51 49 48 1 17 33 50 22 21 16 33 33 17 33 17 35 17 51 17 33 17 19 17 51 32 53 52 38 35 4 0 1 0 217 203 254 78 254 96 254 10 172 172 1 250 166 240 1 20 128 153 4 70 254 59 153 154 254 178 1 238 254 18 4 70 254 55 1 201 253 174 254 151 185 92 84 0 255 255 0 20 0 0 4 68 6 20 2 6 0 233 0 0 255 255 0 176 0 0 4 12 6 33 2 38 1 212 0 0 1 6 0 118 51 0 0 8 179 1 20 17 38 0 43 53 255 255 0 2 254 20 4 6 6 12 2 38 0 92 0 0 1 6 2 54 183 0 0 8 179 1 22 17 38 0 43 53 0 1 0 176 254 135 4 70 4 70 0 11 0 50 64 25 4 1 10 11 5 8 8 11 1 3 12 13 11 34 6 2 15 9 1 1 4 70 89 1 21 0 63 43 17 0 51 24 63 51 63 17 18 1 23 57 17 51 17 51 17 51 49 48 33 33 17 51 17 33 17 51 17 33 17 35 2 47 254 129 166 2 74 166 254 143 166 4 70 252 73 3 183 251 186 254 135 0 0 1 0 201 0 0 4 8 6 227 0 7 0 35 64 17 0 3 5 6 3 6 9 8 7 4 73 89 1 7 3 6 18 0 63 63 198 43 17 18 1 57 57 17 51 17 51 49 48 1 17 51 17 33 17 35 17 3 102 162 253 107 170 5 182 1 45 254 58 250 227 5 182 0 0 1 0 176 0 0 3 68 5 137 0 7 0 39 64 18 5 0 2 3 0 3 9 8 6 4 4 1 71 89 4 15 3 21 0 63 63 43 0 24 16 198 17 18 1 57 57 17 51 17 51 49 48 1 33 17 35 17 33 17 51 3 68 254 18 166 1 238 166 3 199 252 57 4 72 1 65 0 255 255 0 27 0 0 7 76 7 115 2 38 0 58 0 0 1 7 0 67 1 23 1 82 0 8 179 1 27 5 38 0 43 53 255 255 0 23 0 0 6 35 6 33 2 38 0 90 0 0 1 6 0 67 115 0 0 8 179 1 30 17 38 0 43 53 255 255 0 27 0 0 7 76 7 115 2 38 0 58 0 0 1 7 0 118 1 176 1 82 0 8 179 1 35 5 38 0 43 53 255 255 0 23 0 0 6 35 6 33 2 38 0 90 0 0 1 7 0 118 1 27 0 0 0 8 179 1 38 17 38 0 43 53 255 255 0 27 0 0 7 76 7 37 2 38 0 58 0 0 1 7 0 106 1 100 1 82 0 10 180 2 1 47 5 38 0 43 53 53 255 255 0 23 0 0 6 35 5 211 2 38 0 90 0 0 1 7 0 106 0 207 0 0 0 10 180 2 1 50 17 38 0 43 53 53 255 255 0 0 0 0 4 123 7 115 2 38 0 60 0 0 1 7 0 67 255 148 1 82 0 8 179 1 10 5 38 0 43 53 255 255 0 2 254 20 4 6 6 33 2 38 0 92 0 0 1 7 0 67 255 97 0 0 0 8 179 1 23 17 38 0 43 53 0 1 0 82 1 217 3 174 2 113 0 3 0 17 181 0 2 4 5 0 1 0 47 51 17 18 1 57 57 49 48 19 53 33 21 82 3 92 1 217 152 152 0 1 0 82 1 217 7 174 2 113 0 3 0 17 181 0 2 4 5 0 1 0 47 51 17 18 1 57 57 49 48 19 53 33 21 82 7 92 1 217 152 152 255 255 0 82 1 217 7 174 2 113 2 6 2 3 0 0 0 2 255 252 254 49 3 78 255 211 0 3 0 7 0 28 64 11 4 0 9 5 1 1 8 5 6 2 1 0 47 51 47 51 17 1 51 17 51 17 51 50 49 48 1 33 53 33 53 33 53 33 3 78 252 174 3 82 252 174 3 82 254 49 139 140 139 0 0 1 0 25 3 193 1 68 5 182 0 7 0 18 182 1 5 8 9 0 4 3 0 63 205 17 18 1 57 57 49 48 19 39 54 18 55 51 6 7 37 12 22 98 56 123 66 37 3 193 22 90 1 12 121 254 247 0 0 1 0 25 3 193 1 68 5 182 0 7 0 18 182 5 1 8 9 5 7 3 0 63 198 17 18 1 57 57 49 48 1 23 6 2 7 35 18 55 1 53 15 26 98 53 122 70 32 5 182 22 100 254 247 114 1 29 216 0 255 255 0 63 254 248 1 109 0 238 2 6 0 15 0 0 0 1 0 25 3 193 1 70 5 182 0 7 0 18 182 2 6 9 8 3 7 3 0 63 205 17 18 1 57 57 49 48 19 22 23 35 38 2 39 55 223 37 66 123 45 109 24 14 5 182 251 250 94 1 28 101 22 0 0 2 0 25 3 193 2 180 5 182 0 7 0 15 0 26 64 12 4 1 13 9 4 16 17 0 8 3 12 3 0 63 51 205 50 17 18 1 23 57 49 48 1 39 54 19 51 6 2 7 33 39 54 18 55 51 6 7 1 150 15 56 122 123 30 59 13 253 215 12 22 98 56 123 66 37 3 193 22 215 1 8 115 254 223 97 22 90 1 12 121 254 247 0 0 2 0 25 3 193 2 180 5 182 0 7 0 16 0 26 64 12 9 13 1 5 4 17 18 13 5 16 7 3 0 63 51 198 50 17 18 1 23 57 49 48 1 23 6 2 7 35 18 55 33 23 6 2 7 35 54 18 55 1 53 15 26 98 53 122 70 32 2 39 14 24 96 56 125 26 66 13 5 182 22 100 254 247 114 1 29 216 22 91 254 246 122 100 1 52 93 0 255 255 0 25 254 249 2 180 0 238 1 7 2 11 0 0 251 56 0 32 183 1 0 7 64 13 13 72 7 184 255 192 179 12 12 72 7 184 255 192 179 9 9 72 7 0 17 43 43 43 53 53 0 1 0 123 0 0 3 137 6 20 0 11 0 67 64 33 9 2 2 8 3 10 1 1 7 4 0 4 3 5 4 12 13 0 5 5 11 6 6 7 8 0 1 4 4 10 7 3 18 0 63 46 51 51 17 51 63 18 57 47 51 51 17 51 17 18 1 23 57 17 51 51 17 51 17 51 51 17 51 49 48 1 37 19 35 19 5 53 5 3 51 3 37 3 137 254 160 49 196 49 254 180 1 76 49 196 49 1 96 3 231 31 251 250 4 6 31 170 30 1 161 254 95 30 0 1 0 123 0 0 3 154 6 20 0 21 0 117 64 58 12 7 21 16 4 4 15 10 5 20 17 0 3 3 14 11 9 6 19 1 1 6 5 7 4 22 23 1 8 8 2 7 3 6 6 0 9 20 11 11 17 14 19 12 12 18 9 14 13 7 13 7 13 5 15 0 5 18 0 63 63 18 57 57 47 47 18 57 57 50 50 17 51 17 51 51 17 51 17 51 51 17 51 17 51 51 17 51 17 18 1 23 57 17 51 17 51 51 51 51 17 51 51 51 17 51 51 51 17 51 51 17 51 49 48 1 37 21 37 19 35 19 5 53 5 3 19 5 53 5 3 51 3 37 21 37 19 2 57 1 97 254 159 49 198 49 254 166 1 90 43 43 254 166 1 90 49 198 49 1 97 254 159 43 1 231 31 168 29 254 133 1 123 29 168 31 1 43 1 27 31 168 30 1 124 254 132 30 168 31 254 229 0 1 0 164 1 244 2 94 3 227 0 11 0 19 182 6 0 0 12 13 9 3 0 47 205 17 18 1 57 17 51 49 48 19 52 54 51 50 22 21 20 6 35 34 38 164 113 108 105 116 115 106 107 114 2 236 121 126 124 123 119 129 131 0 255 255 0 152 255 227 5 174 0 242 0 38 0 17 0 0 0 39 0 17 2 18 0 0 0 7 0 17 4 37 0 0 0 7 0 100 255 236 9 59 5 203 0 9 0 20 0 24 0 36 0 47 0 59 0 70 0 91 64 48 0 16 5 10 48 66 54 60 25 43 31 37 37 43 60 21 66 10 23 16 8 71 72 28 51 51 40 63 25 3 13 34 57 57 45 68 13 68 13 68 23 24 6 23 24 7 18 7 0 63 51 63 63 18 57 57 47 47 17 51 51 17 51 17 51 63 51 51 17 51 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 17 51 49 48 19 20 22 51 50 17 16 35 34 6 5 20 6 35 34 38 53 16 33 50 22 37 1 35 1 1 20 22 51 50 54 53 52 38 35 34 6 5 20 6 35 34 38 53 16 33 50 22 5 20 22 51 50 54 53 52 38 35 34 6 5 20 6 35 34 38 53 16 33 50 22 236 83 93 180 180 93 83 1 237 161 156 149 163 1 56 152 165 2 105 252 213 148 3 43 2 160 83 93 91 89 89 91 93 83 1 237 162 155 148 163 1 55 150 167 251 56 81 93 91 89 89 91 93 81 1 235 162 155 149 163 1 56 150 167 4 2 170 170 1 84 1 82 168 170 230 231 238 223 1 201 240 219 250 74 5 182 252 2 171 169 167 173 171 165 165 171 230 230 239 221 1 201 236 221 171 169 167 173 171 165 165 171 230 230 238 222 1 201 236 0 255 255 0 133 3 166 1 63 5 182 2 6 0 10 0 0 255 255 0 133 3 166 2 176 5 182 0 6 0 5 0 0 0 1 0 82 0 117 2 31 3 190 0 6 0 26 64 10 4 2 3 6 2 6 8 7 5 1 0 47 47 17 18 1 57 57 17 51 17 51 49 48 19 1 23 1 1 7 1 82 1 86 119 254 223 1 33 119 254 170 2 39 1 151 69 254 162 254 161 71 1 151 0 1 0 80 0 117 2 29 3 190 0 6 0 26 64 10 3 0 4 2 0 2 8 7 5 1 0 47 47 17 18 1 57 57 17 51 17 51 49 48 1 1 39 1 1 55 1 2 29 254 168 117 1 31 254 225 117 1 88 2 12 254 105 71 1 95 1 94 69 254 105 0 255 255 0 152 255 227 3 74 5 182 0 38 0 4 0 0 0 7 0 4 1 193 0 0 0 1 254 121 0 0 2 143 5 182 0 3 0 19 183 0 5 2 4 3 3 2 18 0 63 63 17 1 51 17 51 49 48 1 1 35 1 2 143 252 121 143 3 135 5 182 250 74 5 182 0 1 0 109 3 33 2 195 5 199 0 18 0 38 64 17 0 18 12 8 8 9 18 9 20 19 4 15 31 0 9 10 31 0 63 205 50 63 51 17 18 1 57 57 17 51 17 51 17 51 49 48 1 17 52 38 35 34 6 21 17 35 17 51 23 51 54 51 32 21 17 2 76 78 80 114 91 116 96 14 10 75 145 1 2 3 33 1 164 84 71 105 122 254 164 2 153 88 101 250 254 84 0 1 0 98 0 0 4 35 5 182 0 17 0 75 64 40 14 0 4 4 9 5 11 16 2 5 7 5 18 19 3 7 8 7 78 89 0 8 14 17 76 89 8 14 8 14 5 10 10 13 76 89 10 6 5 24 0 63 63 43 17 18 0 57 57 24 47 47 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 51 49 48 1 33 21 33 17 35 17 35 53 51 17 33 21 33 17 33 21 33 1 184 1 52 254 204 166 176 176 3 17 253 149 2 68 253 188 1 139 129 254 246 1 10 129 4 43 151 253 233 151 0 1 0 68 0 0 4 72 5 201 0 37 0 112 64 64 13 9 17 17 34 30 26 11 15 21 2 15 26 28 32 23 7 38 39 16 28 29 28 78 89 13 29 12 32 33 32 78 89 9 33 15 33 31 33 63 33 79 33 4 9 3 29 33 29 33 23 0 23 20 76 89 23 24 0 5 75 89 0 7 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 95 94 93 17 51 43 17 0 51 17 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 51 17 51 51 49 48 1 50 23 7 38 35 34 6 21 21 33 21 33 21 33 21 33 21 20 6 7 33 21 33 53 54 53 53 35 53 51 53 35 53 51 53 52 54 2 176 201 158 60 152 147 122 126 1 164 254 92 1 164 254 92 65 74 3 27 251 252 206 200 200 200 200 224 5 201 80 131 71 135 129 186 129 166 129 33 100 136 44 154 141 48 243 35 129 166 129 207 178 205 0 0 3 0 154 255 236 5 209 5 182 0 22 0 33 0 42 0 96 64 55 34 28 28 29 38 23 16 20 20 13 9 2 18 9 23 11 29 6 43 44 27 34 75 89 16 19 78 89 3 27 11 16 14 14 16 11 27 3 5 29 30 30 42 75 89 30 6 29 24 6 0 77 89 6 25 0 63 43 0 24 63 63 43 17 18 0 23 57 24 47 47 47 47 47 43 43 17 18 1 23 57 17 51 51 17 51 17 51 17 51 17 51 49 48 37 50 54 55 21 6 35 34 38 53 17 35 53 55 55 51 21 51 21 35 17 20 22 1 20 4 33 35 17 35 17 33 32 22 1 51 50 54 53 52 38 35 35 5 78 34 86 11 60 110 109 129 157 157 62 98 221 221 52 254 145 254 235 254 246 64 165 1 6 1 0 254 253 161 52 200 185 172 183 82 117 14 4 125 30 136 138 1 207 80 69 191 211 129 254 71 77 82 3 151 227 234 253 193 5 182 211 253 238 145 162 145 142 0 0 1 0 63 255 236 4 137 5 203 0 38 0 113 64 63 29 23 31 22 22 26 11 2 7 7 26 36 17 4 10 26 23 6 39 40 11 23 24 23 78 89 8 24 5 29 30 29 78 89 2 30 15 30 31 30 47 30 3 9 3 24 30 24 30 19 34 34 0 76 89 34 7 19 14 76 89 19 25 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 95 94 93 17 51 43 17 0 51 17 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 17 51 49 48 1 32 3 33 21 33 7 21 23 33 21 33 22 22 51 50 55 21 6 35 34 0 3 35 53 51 39 53 55 35 53 51 18 0 51 50 23 7 38 3 27 254 193 79 1 254 253 244 2 2 1 207 254 65 37 203 170 156 153 146 171 237 254 223 46 166 152 2 2 152 164 39 1 36 237 201 165 71 166 5 53 254 109 129 57 64 45 129 180 197 66 150 65 1 13 1 1 129 42 44 80 129 1 5 1 36 97 139 86 0 4 0 141 255 248 6 10 5 193 0 3 0 15 0 23 0 43 0 69 64 36 37 27 32 42 16 10 20 4 4 0 10 42 2 27 6 44 45 35 30 6 18 7 24 22 13 39 24 13 24 13 24 2 3 6 2 24 0 63 63 18 57 57 47 47 17 51 17 51 63 51 63 51 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 1 35 1 1 20 6 35 34 38 53 52 54 51 50 22 5 20 51 50 53 52 35 34 37 34 38 53 52 54 51 50 23 7 38 35 34 21 20 51 50 55 21 6 5 31 252 213 148 3 43 1 127 169 148 139 170 167 148 141 170 254 21 178 176 176 178 253 202 166 182 188 171 104 88 33 81 80 224 220 98 90 78 5 182 250 74 5 182 251 152 159 183 185 157 158 184 186 156 238 238 235 219 177 161 168 179 35 103 31 238 235 33 101 37 0 2 0 119 255 236 3 156 5 203 0 28 0 36 0 61 64 31 35 26 26 15 9 29 22 3 22 9 12 4 37 38 35 15 13 25 10 5 12 19 2 12 2 12 6 31 19 0 6 0 47 51 47 51 18 57 57 47 47 17 18 23 57 17 18 1 23 57 17 51 17 51 51 17 51 49 48 37 50 55 51 6 6 35 34 38 53 53 6 7 53 54 55 17 52 54 51 50 22 21 20 2 7 17 20 22 19 52 35 34 6 21 17 36 2 125 174 18 95 8 153 142 150 160 96 96 78 114 150 135 117 135 206 175 82 174 127 67 62 1 0 111 213 166 178 181 169 243 35 22 113 21 38 1 242 138 159 161 138 185 254 208 74 254 229 104 123 4 43 194 86 108 254 75 137 0 0 4 0 201 0 0 7 195 5 182 0 15 0 27 0 39 0 43 0 95 64 49 9 6 6 7 1 13 13 0 28 22 34 16 16 43 40 22 0 7 6 44 45 31 19 37 25 11 40 19 3 25 8 19 25 19 25 40 8 40 41 74 89 40 18 14 8 3 1 7 18 0 63 51 63 51 63 43 17 18 0 57 57 24 47 47 17 18 57 17 18 57 17 51 17 51 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 17 51 49 48 33 35 1 35 18 21 17 35 17 51 1 51 38 53 17 51 1 20 6 35 34 38 53 52 54 51 50 22 5 20 22 51 50 54 53 52 38 35 34 6 3 53 33 21 4 199 187 253 76 8 16 151 194 2 170 8 14 152 2 252 161 147 139 162 161 147 139 162 254 34 81 93 91 79 79 91 92 82 86 2 0 4 203 254 224 108 252 193 5 182 251 58 245 138 3 71 252 183 163 184 187 160 163 181 187 157 114 118 117 115 115 112 112 253 32 135 135 0 2 0 37 2 229 5 133 5 182 0 7 0 24 0 79 64 39 0 1 15 12 12 13 17 20 20 19 19 13 6 1 3 5 25 26 23 22 9 10 10 17 14 14 4 7 3 3 4 16 8 8 20 13 1 4 3 0 63 196 50 50 57 47 51 17 51 17 51 17 51 17 51 51 17 51 51 51 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 35 17 35 53 33 21 35 1 3 35 23 17 35 17 51 19 19 51 17 35 17 55 35 3 1 113 123 209 2 31 211 2 88 201 8 6 119 187 196 203 180 127 6 8 211 2 229 2 103 106 106 253 153 2 47 129 254 82 2 209 253 209 2 47 253 47 1 164 137 253 211 0 255 255 0 80 0 0 5 244 5 205 2 6 1 118 0 0 0 2 0 102 255 221 4 139 4 72 0 23 0 31 0 52 64 26 31 14 14 4 24 12 12 21 4 3 32 33 13 20 47 31 63 31 2 31 31 17 28 8 17 0 0 47 50 47 51 18 57 47 93 57 51 17 18 1 23 57 17 51 17 51 17 51 49 48 5 34 38 2 53 52 54 54 51 50 22 18 21 33 17 22 22 51 50 54 55 23 6 6 19 17 38 38 35 34 7 17 2 121 157 241 133 138 244 149 152 243 135 252 197 49 166 82 131 183 81 72 98 217 147 50 163 88 173 122 35 147 1 5 157 171 255 140 142 254 253 165 254 156 53 70 105 129 41 155 124 2 139 1 21 53 66 117 254 233 255 255 0 71 255 236 5 243 5 182 0 39 2 23 2 92 0 0 0 38 0 123 251 0 1 7 2 64 3 96 253 179 0 11 180 4 3 2 25 25 0 63 53 53 53 0 255 255 0 32 255 236 6 8 5 201 0 39 2 23 2 162 0 0 0 39 2 64 3 117 253 179 1 6 0 117 255 0 0 11 180 1 3 2 14 25 0 63 53 53 53 0 255 255 0 71 255 236 6 4 5 182 0 39 2 23 2 156 0 0 0 38 2 61 12 0 1 7 2 64 3 113 253 179 0 11 180 4 3 2 44 25 0 63 53 53 53 0 255 255 0 106 255 236 6 0 5 182 0 39 2 23 2 70 0 0 0 39 2 64 3 109 253 179 1 6 2 63 49 0 0 11 180 1 3 2 14 25 0 63 53 53 53 0 0 2 0 102 255 236 4 53 5 199 0 26 0 40 0 65 64 34 38 7 31 15 15 0 0 20 7 3 41 42 11 34 71 89 14 4 11 11 24 4 24 17 70 89 24 3 4 27 70 89 4 22 0 63 43 0 24 63 43 17 18 0 57 24 47 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 16 2 4 35 34 38 53 52 18 54 51 50 22 23 55 16 33 34 6 7 53 54 54 51 50 18 1 50 54 18 55 38 38 35 34 6 6 21 20 22 4 53 167 254 236 173 172 187 136 232 151 97 146 43 4 254 230 62 144 48 47 155 74 210 216 253 162 95 166 120 22 25 128 80 101 165 101 101 3 166 254 250 254 53 233 201 192 169 1 51 161 93 75 90 1 149 44 33 159 23 37 254 236 251 198 144 1 3 150 97 108 132 250 128 118 130 0 2 0 39 0 0 4 109 5 182 0 5 0 12 0 40 64 19 9 5 10 4 5 4 14 13 6 5 1 5 9 73 89 5 18 1 3 0 63 63 43 17 18 0 57 17 18 1 57 57 17 51 17 51 49 48 55 1 51 1 21 33 1 6 7 1 33 1 38 39 1 207 166 1 209 251 186 2 33 61 40 254 252 2 209 254 254 68 104 5 78 250 176 102 4 244 225 121 252 254 2 249 202 0 0 1 0 201 254 16 5 33 5 182 0 7 0 35 64 17 0 7 3 4 7 4 9 8 5 2 73 89 5 3 0 4 27 0 63 51 63 43 17 18 1 57 57 17 51 17 51 49 48 1 17 33 17 35 17 33 17 4 119 252 252 170 4 88 254 16 7 13 248 243 7 166 248 90 0 1 0 76 254 16 4 221 5 182 0 11 0 49 64 26 7 9 9 3 0 8 2 10 6 2 0 4 12 13 4 7 73 89 4 3 0 9 73 89 0 27 0 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 51 17 51 49 48 19 53 1 1 53 33 21 33 1 1 33 21 76 2 119 253 153 4 64 252 176 2 67 253 164 3 170 254 16 107 3 156 3 51 108 151 252 252 252 141 152 0 1 0 104 2 141 4 41 3 23 0 3 0 21 64 9 2 0 5 4 1 0 80 89 1 0 47 43 17 18 1 57 57 49 48 19 53 33 21 104 3 193 2 141 138 138 0 1 0 37 255 242 4 188 6 152 0 8 0 28 64 11 8 10 3 9 3 6 4 4 1 8 1 0 47 47 18 57 47 57 51 17 1 51 17 51 49 48 5 35 1 35 53 33 19 1 51 2 111 127 254 233 180 1 33 235 2 2 137 14 3 14 135 253 84 5 189 0 0 3 0 119 1 147 5 45 4 12 0 21 0 33 0 45 0 51 64 24 31 12 43 0 0 37 25 12 4 46 47 34 28 28 17 6 9 19 15 40 22 22 3 9 0 47 51 51 17 51 47 51 18 57 57 51 17 51 17 18 1 23 57 17 51 17 51 49 48 1 20 6 35 34 38 39 6 6 35 34 38 53 52 54 51 50 23 54 51 50 22 1 50 54 55 38 38 35 34 6 21 20 22 1 34 6 7 22 22 51 50 54 53 52 38 5 45 167 128 93 153 65 60 153 88 131 168 168 131 181 122 124 185 133 162 252 125 66 109 54 50 109 72 76 100 97 2 161 66 109 55 51 110 71 76 100 101 2 207 131 185 106 116 104 113 173 142 134 179 219 215 175 254 187 91 100 97 93 105 87 83 106 1 121 92 98 97 94 107 84 85 105 0 1 0 12 254 20 2 248 6 20 0 20 0 28 64 12 8 18 2 18 13 3 21 22 16 11 5 0 0 47 50 47 51 17 18 1 23 57 17 51 49 48 1 50 23 21 38 35 34 21 17 20 6 35 34 39 53 22 51 50 53 17 16 2 125 79 44 49 62 176 165 163 74 59 61 58 182 6 20 16 137 22 243 250 225 176 187 19 135 22 243 5 31 1 106 0 0 2 0 98 1 135 4 45 4 31 0 23 0 47 0 112 64 64 40 15 27 3 15 3 49 48 39 30 30 24 80 89 15 30 31 30 47 30 3 9 3 30 42 64 42 36 80 89 27 42 64 15 6 6 0 80 89 15 6 31 6 47 6 3 9 3 6 18 64 18 12 80 89 3 0 18 16 18 32 18 3 18 0 47 93 196 43 0 26 24 16 205 95 94 93 43 0 16 24 196 26 222 196 43 0 26 24 16 205 95 94 93 43 0 16 24 196 17 18 1 57 57 17 51 17 51 49 48 1 34 6 7 53 54 51 50 22 23 22 22 51 50 54 55 21 6 35 34 38 39 38 38 3 34 6 7 53 54 51 50 22 23 22 22 51 50 54 55 21 6 35 34 38 39 38 38 1 80 54 127 57 108 148 67 112 88 77 91 45 53 128 54 101 153 67 111 88 73 91 49 57 128 53 106 150 69 116 82 69 95 49 55 129 51 100 154 69 118 79 84 85 2 0 64 57 150 110 28 37 33 25 66 57 151 109 29 37 30 25 1 150 68 53 149 109 32 34 29 26 66 55 150 110 32 33 34 24 0 0 1 0 104 0 166 4 41 5 2 0 19 0 70 64 38 5 1 16 11 11 9 10 14 4 0 19 1 8 20 21 13 5 6 5 80 89 10 8 15 6 1 9 3 6 14 2 1 2 80 89 18 17 1 0 47 51 196 43 17 0 51 24 47 95 94 93 198 51 43 17 0 51 17 18 1 23 57 17 51 17 51 49 48 1 33 53 33 19 33 53 33 19 23 7 33 21 33 3 33 21 33 3 39 1 125 254 235 1 84 127 254 45 2 19 135 125 109 1 23 254 170 129 1 215 253 233 131 125 1 193 137 1 16 137 1 31 57 230 137 254 240 137 254 229 55 255 255 0 104 0 1 4 41 4 217 2 38 0 31 0 0 1 7 2 43 0 0 253 116 0 9 179 1 0 7 18 0 63 53 53 0 255 255 0 104 0 1 4 41 4 217 2 38 0 33 0 0 1 7 2 43 0 0 253 116 0 9 179 1 0 7 18 0 63 53 53 0 0 2 0 111 0 0 4 61 5 195 0 5 0 9 0 32 64 13 8 0 6 3 0 3 10 11 9 7 2 5 2 0 47 47 18 57 57 17 18 1 57 57 17 51 17 51 49 48 19 1 51 1 1 35 9 3 111 1 194 72 1 196 254 60 72 1 98 254 195 254 195 1 61 2 223 2 228 253 28 253 33 2 225 2 19 253 237 253 236 0 255 255 0 29 0 0 4 28 6 31 0 38 0 73 0 0 0 7 0 76 2 182 0 0 255 255 0 29 0 0 4 12 6 31 0 38 0 73 0 0 0 7 0 79 2 182 0 0 0 1 0 219 4 217 3 190 6 12 0 13 0 24 64 9 11 3 15 14 10 4 128 7 0 0 47 50 26 204 50 17 18 1 57 57 49 48 1 34 38 39 51 22 22 51 50 54 55 51 6 6 2 72 185 170 10 156 9 91 113 103 99 11 157 12 178 4 217 143 164 104 82 88 98 158 149 0 0 1 255 145 254 20 1 86 4 72 0 12 0 29 64 13 11 8 8 14 13 9 15 0 5 70 89 0 27 0 63 43 0 24 63 17 18 1 57 17 51 49 48 19 34 39 53 22 51 50 54 53 17 51 17 16 43 95 59 69 67 78 73 166 254 20 25 135 20 85 87 4 252 251 16 254 188 0 0 1 1 137 4 205 2 117 6 20 0 9 0 19 182 9 4 10 11 4 128 9 0 47 26 205 17 18 1 57 57 49 48 1 54 54 55 51 21 6 6 7 35 1 137 19 39 10 168 11 88 47 90 4 229 55 167 81 18 51 188 70 0 1 1 113 254 59 2 111 255 131 0 9 0 19 182 9 4 10 11 9 128 4 0 47 26 205 17 18 1 57 57 49 48 1 54 54 55 51 21 6 6 7 35 1 113 28 51 7 168 11 98 55 90 254 84 64 186 53 18 51 193 66 0 1 1 129 4 217 2 127 6 33 0 9 0 19 182 9 4 10 11 9 128 4 0 47 26 205 17 18 1 57 57 49 48 1 6 6 7 35 53 54 54 55 51 2 127 29 53 6 166 14 99 49 92 6 8 61 193 49 19 61 191 57 0 2 0 39 2 57 2 158 5 199 0 11 0 21 0 32 64 14 6 12 0 17 12 17 23 22 9 19 31 3 14 33 0 63 51 63 51 17 18 1 57 57 17 51 17 51 49 48 19 20 22 51 50 54 53 52 38 35 34 6 5 16 33 34 38 53 16 33 50 22 176 82 94 94 86 86 94 94 82 1 238 254 196 158 157 1 59 158 158 4 0 168 166 165 171 170 164 165 169 254 55 236 221 1 197 232 0 2 0 20 2 74 2 180 5 188 0 10 0 20 0 60 64 31 20 5 11 7 3 3 9 2 0 2 5 3 21 22 1 5 5 9 15 20 31 20 2 20 20 3 14 7 31 3 32 0 63 63 51 18 57 47 93 51 51 17 51 17 18 1 23 57 17 51 51 17 51 51 17 51 49 48 1 35 21 35 53 33 53 1 51 17 51 33 53 52 55 14 3 7 7 2 180 125 145 254 110 1 152 139 125 254 242 6 5 24 30 30 11 168 3 20 202 202 101 2 67 253 205 195 134 75 12 39 45 45 17 246 0 1 0 59 2 55 2 137 5 170 0 29 0 43 64 21 16 3 28 23 9 23 26 3 4 31 30 19 0 0 6 27 24 30 13 6 33 0 63 51 63 51 18 57 47 51 17 18 1 23 57 17 51 17 51 49 48 1 50 22 21 20 6 35 34 38 39 53 22 22 51 50 54 53 52 38 35 34 6 7 39 19 33 21 33 7 54 1 72 145 176 170 166 74 139 41 56 140 54 95 110 109 102 57 76 31 59 33 1 239 254 131 20 62 4 104 143 123 140 155 31 23 131 34 38 83 89 78 88 17 8 41 1 160 104 230 12 0 0 2 0 41 2 57 2 162 5 199 0 23 0 35 0 54 64 28 27 18 33 11 0 0 6 18 3 37 36 30 11 21 0 15 16 15 2 15 15 3 24 21 33 8 3 31 0 63 51 63 51 18 57 47 93 18 57 51 17 18 1 23 57 17 51 51 17 51 49 48 19 16 54 51 50 23 21 38 35 34 6 7 51 54 54 51 50 22 21 20 6 35 34 38 5 50 54 53 52 38 35 34 6 21 20 22 41 219 219 74 49 52 83 141 150 10 8 29 113 85 125 148 166 141 153 173 1 68 81 99 88 86 85 112 106 3 195 1 5 255 15 114 18 153 166 43 59 148 126 144 164 210 99 93 99 79 91 90 59 89 124 0 0 1 0 57 2 74 2 143 5 182 0 6 0 28 64 13 1 5 5 0 2 3 7 8 2 3 30 0 32 0 63 63 51 17 18 1 23 57 17 51 49 48 19 1 33 53 33 21 1 162 1 94 254 57 2 86 254 160 2 74 2 248 116 94 252 242 0 3 0 51 2 57 2 147 5 199 0 21 0 34 0 45 0 63 64 34 22 13 38 19 43 3 28 7 7 3 5 16 19 13 6 46 47 5 16 32 32 11 41 27 41 2 41 41 25 10 33 35 0 31 0 63 50 63 51 57 47 93 51 18 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 50 22 21 20 7 22 21 20 6 35 34 38 53 52 54 55 38 38 53 52 54 3 20 22 51 50 54 53 52 38 39 39 6 6 19 34 6 21 20 22 23 54 53 52 38 1 100 124 151 148 176 165 138 146 159 73 85 74 57 157 53 84 86 90 84 93 81 28 72 70 172 68 75 68 81 140 78 5 199 118 104 130 76 74 158 113 137 128 116 69 116 46 46 93 68 102 126 253 102 60 73 73 60 63 79 28 10 34 84 1 239 60 57 47 71 33 54 97 57 60 0 2 0 35 2 57 2 156 5 201 0 22 0 34 0 60 64 31 26 17 32 10 0 0 5 17 3 35 36 29 14 10 11 11 20 15 14 31 14 2 14 14 3 23 20 31 8 3 33 0 63 51 63 51 18 57 47 93 18 57 17 51 17 51 17 18 1 23 57 17 51 51 17 51 49 48 1 16 6 35 34 39 53 22 51 32 19 35 6 6 35 34 38 53 52 54 51 50 22 37 34 6 21 20 22 51 50 54 53 52 38 2 156 218 212 83 49 49 93 1 20 21 10 35 116 65 131 153 169 136 152 176 254 184 81 95 85 87 84 115 103 4 70 254 242 255 15 116 20 1 70 51 52 146 131 136 165 202 91 95 87 81 95 85 62 97 114 0 0 22 0 84 254 129 7 193 5 238 0 5 0 11 0 17 0 23 0 27 0 31 0 35 0 39 0 43 0 47 0 51 0 55 0 59 0 63 0 67 0 71 0 83 0 91 0 107 0 116 0 124 0 137 0 248 64 135 65 64 61 60 49 48 15 5 0 12 84 78 88 72 118 107 112 96 122 103 133 134 69 68 41 40 37 36 20 10 9 23 23 134 6 18 59 27 127 103 96 56 24 55 47 107 52 44 72 35 31 32 28 3 17 78 12 25 138 139 10 0 42 66 90 81 134 92 116 92 41 65 70 62 100 117 117 108 69 61 130 125 86 75 107 118 107 38 50 37 49 21 13 0 66 1 65 62 92 61 108 13 49 50 3 107 12 92 108 107 107 108 92 3 1 45 44 29 28 25 24 19 18 15 12 57 56 53 52 33 32 7 6 4 1 0 47 51 51 51 51 51 51 51 51 51 47 51 51 51 51 51 51 51 51 51 18 23 57 47 47 47 17 18 23 57 17 57 18 57 57 17 57 57 17 51 17 51 17 51 17 51 16 196 50 196 50 17 51 17 51 18 57 17 51 17 51 17 51 16 196 196 50 17 51 17 51 17 18 1 23 57 17 51 51 51 51 51 51 51 51 51 17 51 17 51 17 51 17 51 17 51 17 51 17 51 51 51 51 51 51 51 51 51 49 48 19 17 33 21 35 21 37 53 33 17 35 53 1 17 51 21 51 21 33 53 51 53 51 17 33 53 33 21 33 53 33 21 1 53 33 21 1 35 17 51 17 35 17 51 1 53 33 21 1 35 17 51 1 53 33 21 51 53 33 21 1 35 17 51 53 35 17 51 1 35 17 51 5 20 6 35 34 38 53 52 54 51 50 22 5 20 51 50 53 52 35 34 37 51 50 22 21 20 6 7 21 22 22 21 20 6 35 35 19 51 50 54 53 52 38 35 35 21 21 51 50 54 53 52 35 1 34 39 53 22 51 50 53 17 51 17 20 6 84 1 47 192 5 206 1 48 109 249 0 111 192 5 14 195 109 253 73 1 17 251 225 1 14 254 242 1 14 4 183 109 109 109 109 251 194 1 16 252 48 111 111 2 192 1 16 119 1 17 250 168 111 111 111 111 6 254 109 109 251 159 135 127 127 135 135 127 126 136 254 115 135 135 135 135 1 225 172 109 112 46 44 61 46 109 94 207 123 66 46 36 42 47 59 74 49 37 90 1 94 52 28 43 25 86 125 105 4 190 1 48 111 193 193 111 254 208 193 249 2 1 47 194 109 109 194 254 209 109 109 109 109 6 254 111 111 250 168 1 14 2 2 1 15 250 59 109 109 1 166 1 14 4 74 111 111 111 111 252 47 1 16 121 1 15 253 104 1 16 73 145 156 156 145 146 155 154 147 197 197 196 97 67 83 49 66 8 8 14 68 53 81 89 1 98 34 32 34 29 227 154 43 37 74 254 250 10 102 8 86 1 146 254 114 95 99 0 0 3 0 84 254 193 7 170 6 20 0 3 0 30 0 42 0 46 64 25 1 11 23 37 4 30 31 17 3 9 43 44 40 30 20 14 34 30 14 14 30 34 3 2 0 0 47 47 23 57 47 47 47 17 51 17 51 17 18 1 23 57 49 48 9 3 5 53 52 54 55 54 54 53 52 38 35 34 6 7 23 54 51 50 22 21 20 6 7 6 6 21 21 3 20 22 51 50 54 53 52 38 35 34 6 3 254 3 172 252 84 252 86 3 235 44 65 103 73 187 165 79 186 71 82 160 90 63 62 49 72 84 59 27 71 70 66 73 72 67 72 69 6 20 252 86 252 87 3 169 251 47 50 65 49 82 126 88 135 154 56 42 178 80 58 47 53 75 54 68 112 74 59 254 237 63 72 73 62 64 73 72 255 255 255 145 254 20 2 87 6 33 2 38 2 55 0 0 1 7 1 76 254 169 0 0 0 8 179 1 24 17 38 0 43 53 255 255 0 25 3 193 1 68 5 182 2 6 2 7 0 0 0 2 0 10 255 236 4 223 6 43 0 45 0 54 0 102 64 57 27 7 23 11 52 37 46 31 31 43 2 45 2 37 11 7 18 6 55 56 20 14 71 89 0 33 46 33 71 89 43 46 15 46 31 46 2 9 3 20 46 20 46 5 40 40 49 70 89 40 1 5 29 70 89 5 22 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 95 94 93 17 51 43 17 0 51 43 17 18 1 23 57 17 51 51 17 51 17 51 17 51 17 51 49 48 1 22 21 16 0 33 32 17 52 55 54 53 52 38 35 34 6 7 39 54 51 50 22 21 20 7 6 21 20 51 32 17 52 39 38 36 38 53 52 54 51 50 0 19 51 21 37 38 2 35 34 6 21 20 4 4 86 4 254 224 254 253 254 119 16 15 36 32 25 54 15 33 83 95 88 93 15 16 233 1 119 4 223 254 201 160 182 168 208 1 0 42 143 254 199 28 183 123 93 97 1 19 3 78 46 65 254 159 254 110 1 88 57 123 122 23 47 35 15 9 118 39 93 93 35 131 132 58 207 2 112 63 44 2 105 188 131 144 163 254 205 254 215 129 129 211 1 0 95 75 141 154 0 1 0 0 0 0 4 123 5 195 0 21 0 40 64 20 17 18 7 18 20 3 22 23 0 18 20 3 18 18 5 10 74 89 5 4 0 63 43 0 24 63 63 18 57 17 18 1 23 57 17 51 49 48 1 18 18 54 54 51 50 23 21 38 35 34 14 3 7 17 35 17 1 51 2 57 122 141 77 92 58 48 40 26 31 40 59 86 124 101 31 172 254 35 186 2 205 1 35 1 55 108 48 15 135 6 56 161 252 236 85 253 227 2 47 3 135 0 0 2 0 18 255 236 6 119 4 72 0 20 0 41 0 76 64 39 24 3 18 33 33 30 39 13 10 13 30 3 6 5 42 43 19 31 31 0 8 21 11 6 8 6 70 89 8 15 36 27 0 27 70 89 16 0 22 0 63 50 43 17 0 51 24 63 43 17 0 51 51 17 18 57 24 47 57 17 18 1 23 57 17 51 17 51 18 57 17 51 49 48 5 34 38 53 52 19 33 53 55 33 21 35 22 21 20 6 35 34 39 35 6 1 6 2 21 20 22 51 50 54 53 53 51 21 20 22 51 50 54 53 52 39 2 41 186 199 135 254 227 142 5 215 250 117 200 185 221 68 8 68 254 207 63 66 108 117 93 108 162 107 93 117 109 111 20 231 240 240 1 7 74 68 142 252 251 240 231 182 182 3 206 132 254 254 103 174 168 143 125 188 188 122 146 169 173 254 239 0 255 255 0 201 0 0 6 113 7 117 2 38 0 48 0 0 1 7 0 118 1 156 1 84 0 8 179 1 29 5 38 0 43 53 255 255 0 176 0 0 6 203 6 33 2 38 0 80 0 0 1 7 0 118 1 205 0 0 0 8 179 1 45 17 38 0 43 53 255 255 0 0 253 213 5 16 5 188 2 38 0 36 0 0 0 7 2 91 1 53 0 0 255 255 0 94 253 213 3 205 4 90 2 38 0 68 0 0 0 7 2 91 0 199 0 0 255 255 254 223 255 236 5 210 5 205 0 38 0 50 20 0 1 7 2 92 254 71 0 0 0 9 179 3 2 26 3 0 63 53 53 0 0 2 0 117 253 213 2 53 255 131 0 11 0 23 0 30 64 12 18 6 12 0 6 0 24 25 21 3 15 9 0 47 51 204 50 17 18 1 57 57 17 51 17 51 49 48 1 20 6 35 34 38 53 52 54 51 50 22 7 52 38 35 34 6 21 20 22 51 50 54 2 53 125 102 101 120 120 101 101 126 110 66 51 51 66 60 57 53 64 254 174 97 120 117 98 98 117 118 97 57 60 60 57 56 61 61 0 2 0 152 4 104 2 207 5 197 0 8 0 23 0 30 64 14 14 9 3 8 12 19 9 5 24 25 2 11 8 21 0 47 196 220 198 17 18 1 23 57 17 51 49 48 1 54 55 51 21 6 6 7 35 37 52 55 21 6 21 20 30 2 21 20 35 34 38 1 176 70 28 189 41 119 49 78 254 232 237 121 31 37 31 93 55 67 4 135 181 122 20 78 172 57 118 163 61 72 41 53 20 19 16 26 28 74 68 0 255 255 0 29 0 0 6 211 6 31 0 39 0 73 2 176 0 0 0 38 0 73 0 0 0 7 0 76 5 109 0 0 255 255 0 29 0 0 6 195 6 31 0 39 0 73 2 176 0 0 0 38 0 73 0 0 0 7 0 79 5 109 0 0 0 2 0 125 255 236 6 100 6 20 0 21 0 33 0 60 64 31 22 6 15 17 17 28 0 0 20 11 6 4 34 35 20 11 3 9 9 31 73 89 15 9 4 3 25 73 89 3 19 0 63 43 0 24 63 198 43 17 18 0 57 57 17 18 1 23 57 17 51 51 17 51 17 51 49 48 1 16 0 33 32 0 17 16 0 33 32 23 62 2 53 51 23 6 6 7 22 1 16 18 51 50 18 17 16 2 35 34 2 5 188 254 157 254 198 254 189 254 161 1 97 1 67 1 69 179 50 58 27 182 14 29 131 104 96 251 117 250 244 243 246 245 242 243 253 2 221 254 158 254 113 1 137 1 106 1 104 1 134 215 12 67 102 105 22 155 173 39 176 254 254 254 214 254 206 1 49 1 43 1 39 1 49 254 209 0 0 2 0 115 255 236 5 25 4 240 0 22 0 34 0 60 64 31 23 7 16 18 18 29 0 0 21 12 7 4 35 36 21 12 3 10 10 32 70 89 16 10 16 3 26 70 89 3 22 0 63 43 0 24 63 198 43 17 18 0 57 57 17 18 1 23 57 17 51 51 17 51 17 51 49 48 1 16 0 35 34 38 2 53 16 0 51 50 23 62 2 53 51 23 6 6 7 22 5 20 22 51 50 54 53 52 38 35 34 6 4 98 254 242 238 147 228 124 1 12 238 217 137 51 58 26 180 15 31 121 102 71 252 189 158 173 175 157 159 175 173 156 2 37 254 244 254 211 138 1 2 173 1 12 1 43 141 15 65 99 110 23 156 175 38 138 185 211 219 219 211 210 216 216 0 1 0 186 255 236 6 123 6 20 0 27 0 51 64 24 5 7 7 1 11 20 17 11 17 29 28 10 1 14 27 5 18 3 14 23 73 89 14 19 0 63 43 0 24 63 198 51 18 57 57 17 18 1 57 57 17 51 17 51 51 17 51 49 48 1 21 62 2 53 51 23 6 6 7 17 16 0 33 32 0 53 17 51 17 20 22 51 50 54 53 17 5 25 58 70 31 181 14 33 172 149 254 225 254 248 254 244 254 212 170 204 198 184 193 5 182 198 8 62 112 110 22 182 184 25 253 141 254 254 254 234 1 31 253 3 174 252 70 183 196 193 188 3 184 0 0 1 0 164 255 236 5 150 4 242 0 29 0 68 64 34 1 28 13 15 15 19 20 7 7 10 19 28 19 30 31 21 22 10 18 22 3 20 13 8 29 15 25 4 70 89 25 22 20 21 0 63 63 43 0 24 63 51 198 18 23 57 17 51 17 18 1 57 57 17 51 51 17 51 17 51 17 51 17 51 49 48 1 17 20 22 51 50 54 53 17 51 21 54 54 53 51 23 6 6 7 17 35 39 35 6 6 35 34 38 53 17 1 76 122 130 172 159 166 82 74 178 15 32 176 141 137 24 9 52 181 111 203 200 4 70 253 59 134 132 188 213 2 62 121 11 128 154 23 186 191 14 252 172 147 82 85 190 209 2 203 0 255 255 252 83 4 217 253 220 6 33 0 7 0 67 250 202 0 0 255 255 253 13 4 217 254 150 6 33 0 7 0 118 251 132 0 0 255 255 252 25 4 217 255 1 5 221 0 7 1 82 251 17 0 0 0 1 253 8 4 184 254 115 6 143 0 17 0 30 64 12 2 5 5 13 13 8 0 0 19 11 16 4 0 47 204 50 17 1 51 17 51 51 18 57 17 51 49 48 1 20 7 7 35 39 54 54 53 52 38 35 34 7 53 54 51 32 254 115 166 10 105 12 86 78 67 73 62 32 38 69 1 0 5 215 140 34 113 176 14 50 43 43 41 6 100 10 0 1 253 59 254 160 254 2 255 125 0 11 0 17 181 6 0 0 13 9 3 0 47 205 17 1 51 17 51 49 48 5 52 54 51 50 22 21 20 6 35 34 38 253 59 59 42 40 58 58 40 42 59 242 57 54 54 57 55 55 55 0 255 255 0 201 0 0 3 248 7 115 2 38 0 40 0 0 1 7 0 67 255 216 1 82 0 8 179 1 13 5 38 0 43 53 255 255 0 203 0 0 5 82 7 115 2 38 1 178 0 0 1 7 0 67 0 104 1 82 0 8 179 1 17 5 38 0 43 53 255 255 0 115 255 236 4 18 6 33 2 38 0 72 0 0 1 6 0 67 183 0 0 8 179 2 28 17 38 0 43 53 255 255 0 176 0 0 4 98 6 33 2 38 1 210 0 0 1 6 0 67 220 0 0 8 179 1 15 17 38 0 43 53 0 1 0 133 255 236 7 145 5 201 0 49 0 69 64 36 34 22 42 39 47 9 9 4 39 27 22 5 50 51 0 31 25 31 73 89 16 40 40 19 6 25 4 44 37 19 37 73 89 12 19 19 0 63 51 43 17 0 51 24 63 51 18 57 47 57 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 6 7 39 54 51 50 0 17 16 0 35 34 38 39 35 6 6 35 32 0 17 16 18 51 50 23 7 38 38 35 34 2 17 16 18 51 50 55 17 51 17 22 51 50 18 17 16 2 5 164 60 94 45 69 126 150 228 1 1 254 229 255 108 172 83 8 80 169 107 255 0 254 229 255 228 153 124 70 45 93 60 147 165 207 187 139 102 170 102 142 187 206 165 5 47 41 31 146 80 254 136 254 173 254 141 254 97 45 51 50 46 1 155 1 119 1 83 1 120 80 146 31 41 254 215 254 246 254 211 254 178 76 1 201 254 55 76 1 75 1 48 1 11 1 40 0 1 0 0 0 0 6 29 4 72 0 29 0 40 64 22 23 0 13 14 5 5 30 31 27 21 13 0 18 10 4 4 22 14 5 15 4 21 0 63 63 51 51 18 23 57 63 17 18 1 23 57 49 48 1 6 6 3 35 1 51 19 22 23 51 54 54 19 3 51 0 22 23 51 54 18 17 51 16 2 7 35 3 38 3 39 10 20 179 213 254 127 172 246 32 46 8 19 74 142 172 178 1 9 45 10 8 173 153 166 195 219 182 125 33 1 201 26 51 254 132 4 72 253 73 93 189 53 163 1 36 1 213 252 255 144 44 184 1 179 1 82 254 150 254 7 229 1 90 92 0 2 0 23 0 0 4 252 6 20 0 17 0 26 0 76 64 40 8 4 18 18 1 15 22 11 11 6 15 0 4 27 28 7 17 0 17 73 89 4 0 8 26 73 89 0 8 0 8 15 2 0 15 18 74 89 15 18 0 63 43 0 24 63 18 57 57 47 47 43 17 0 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 51 49 48 19 33 17 51 17 33 21 33 17 51 32 17 20 4 33 33 17 33 1 51 50 54 53 52 38 35 35 23 1 63 172 1 162 254 94 201 2 49 254 247 254 251 254 104 254 193 1 235 213 192 181 186 218 182 4 250 1 26 254 230 148 254 224 254 100 208 218 4 102 252 43 137 144 138 122 0 0 2 0 23 0 0 4 156 5 39 0 17 0 25 0 71 64 38 4 0 19 19 15 11 22 7 7 2 11 13 4 26 27 3 13 14 13 70 89 4 18 70 89 4 4 11 16 0 14 15 11 19 70 89 11 21 0 63 43 0 24 63 51 198 18 57 47 43 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 51 49 48 1 33 21 33 17 33 32 17 20 6 35 33 17 35 53 51 53 51 17 17 33 32 53 52 38 35 1 168 1 88 254 168 1 63 1 181 223 220 254 33 235 235 166 1 49 1 31 135 156 4 72 140 254 197 254 205 166 168 3 188 140 223 252 205 254 151 185 92 84 0 1 0 201 255 236 7 33 5 203 0 32 0 74 64 41 23 19 19 20 6 24 29 12 5 24 17 20 6 33 34 27 0 73 89 27 4 6 18 23 18 73 89 3 23 23 20 21 3 20 18 14 9 73 89 14 19 0 63 43 0 24 63 63 18 57 47 51 43 17 0 51 24 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 4 7 33 21 33 18 0 51 50 55 21 6 35 32 0 3 33 17 35 17 51 17 33 18 0 37 50 23 7 38 38 5 143 227 254 252 31 2 191 253 61 8 1 9 247 154 194 152 222 254 193 254 165 8 254 162 170 170 1 100 30 1 113 1 48 213 182 72 100 157 5 51 250 241 150 254 239 254 226 55 149 57 1 112 1 84 253 80 5 182 253 146 1 51 1 78 2 92 146 48 38 0 0 1 0 176 255 236 5 156 4 92 0 33 0 89 64 50 22 25 25 10 3 9 5 5 6 16 32 24 3 6 5 34 35 13 19 70 89 13 16 25 4 9 4 70 89 22 15 9 31 9 2 11 3 9 9 6 7 15 6 21 0 28 70 89 0 22 0 63 43 0 24 63 63 18 57 47 95 94 93 51 43 17 0 51 24 63 43 17 18 1 23 57 17 51 17 51 17 51 51 17 51 49 48 5 34 0 39 33 17 35 17 51 17 33 54 36 51 50 22 23 7 38 35 34 6 7 33 21 33 22 22 51 50 54 55 21 6 4 119 235 254 244 11 254 225 166 166 1 33 24 1 13 223 81 154 54 50 138 101 163 167 16 2 24 253 230 9 169 164 61 119 98 110 20 1 10 248 254 18 4 72 254 51 235 246 32 25 141 51 164 170 141 188 181 22 37 147 57 0 2 0 0 0 0 5 109 5 182 0 11 0 18 0 52 64 27 2 3 7 12 3 13 10 5 20 19 1 5 12 5 73 89 16 8 12 12 7 8 3 11 3 7 18 0 63 51 51 63 18 57 47 18 57 43 17 0 51 17 18 1 23 57 17 51 49 48 1 35 17 35 17 35 1 35 1 51 1 35 1 33 39 38 39 6 7 3 152 148 156 149 254 223 178 2 104 158 2 103 183 253 92 1 76 82 56 30 24 64 2 170 253 86 2 170 253 86 5 182 250 74 3 63 207 144 100 98 164 0 0 2 0 10 0 0 4 121 4 72 0 11 0 18 0 53 64 28 5 6 10 12 6 13 3 1 6 20 19 4 8 12 8 70 89 17 11 12 12 10 11 15 6 2 10 21 0 63 51 51 63 18 57 47 18 57 43 17 0 51 17 18 1 23 57 17 51 49 48 1 1 35 3 35 17 35 17 35 3 35 1 3 33 38 38 39 35 6 2 168 1 209 172 207 113 151 115 205 172 1 209 33 1 15 43 56 34 9 28 4 72 251 184 1 233 254 23 1 233 254 23 4 72 254 45 108 138 106 92 0 0 2 0 201 0 0 7 94 5 182 0 19 0 26 0 70 64 37 14 10 10 11 2 3 18 21 3 20 8 7 11 7 27 28 5 1 9 14 9 73 89 20 24 12 14 14 11 16 12 3 19 7 3 11 18 0 63 51 51 51 63 51 18 57 47 18 57 51 43 17 0 51 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 35 17 35 17 35 1 35 1 33 17 35 17 51 17 33 1 51 1 35 1 33 2 38 39 6 6 5 133 143 154 147 254 227 186 1 34 254 95 170 170 1 225 1 6 158 2 102 188 253 102 1 62 118 28 12 19 35 2 176 253 80 2 176 253 80 2 176 253 80 5 182 253 146 2 110 250 74 3 72 1 53 86 47 67 104 0 2 0 176 0 0 6 20 4 72 0 19 0 25 0 77 64 43 17 13 13 14 5 6 1 25 6 24 11 10 14 7 26 27 8 4 12 17 12 70 89 24 21 19 47 17 63 17 2 17 17 14 19 15 15 15 10 6 2 14 21 0 63 51 51 51 63 63 18 57 47 93 18 57 51 43 17 0 51 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 1 35 3 35 17 35 17 35 3 35 19 33 17 35 17 51 17 33 19 23 35 6 6 7 33 4 70 1 206 170 208 113 152 110 209 172 209 254 223 166 166 1 94 197 104 8 10 32 89 1 12 4 72 251 184 1 238 254 18 1 238 254 18 1 238 254 18 4 72 254 51 1 205 115 34 95 217 0 0 2 0 20 0 0 5 174 5 182 0 31 0 34 0 75 64 40 32 1 15 16 33 30 30 29 16 2 1 7 6 36 35 30 1 33 31 31 33 73 89 14 18 29 18 74 89 34 2 29 29 24 31 3 16 8 24 18 0 63 51 51 63 18 57 47 51 51 43 17 0 51 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 21 1 30 2 23 19 35 3 46 2 35 35 17 35 17 35 34 6 6 7 3 35 19 62 2 55 1 53 5 33 1 5 41 254 90 118 154 100 50 133 174 137 35 68 101 89 27 170 26 91 99 65 32 135 185 136 47 99 149 118 254 101 3 190 253 10 1 123 5 182 133 254 17 6 72 139 164 254 59 1 201 111 96 38 253 66 2 190 39 95 111 254 55 1 197 159 142 73 7 1 239 133 153 254 57 0 0 2 0 12 0 0 5 20 4 72 0 32 0 35 0 78 64 42 33 1 15 16 34 31 24 31 30 16 2 1 7 7 37 36 31 1 34 32 32 34 70 89 17 14 18 30 18 71 89 35 2 30 30 24 32 15 16 8 24 21 0 63 51 51 63 18 57 47 51 51 43 17 0 51 51 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 21 1 30 3 19 35 3 46 2 35 35 17 35 17 35 34 6 6 7 3 35 19 62 3 55 1 53 5 33 1 4 139 254 174 87 111 73 49 155 172 133 34 58 84 76 10 153 11 75 82 56 39 135 170 131 24 48 73 110 87 254 177 3 32 253 180 1 37 4 72 105 254 160 7 48 80 105 254 113 1 80 87 71 28 253 246 2 10 26 64 94 254 174 1 80 61 105 79 50 8 1 96 105 140 254 193 0 0 2 0 201 0 0 7 197 5 182 0 36 0 39 0 97 64 53 33 29 29 30 38 35 15 16 2 39 37 1 7 1 39 16 34 27 35 24 30 9 41 40 35 1 36 38 36 38 73 89 18 14 28 33 28 73 89 39 2 33 33 30 36 3 31 3 24 16 8 30 18 0 63 51 51 51 63 63 18 57 47 51 51 43 17 0 51 51 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 17 51 49 48 1 21 1 30 2 23 19 35 3 46 2 35 35 17 35 17 35 34 6 6 7 3 35 19 54 55 33 17 35 17 51 17 33 1 53 5 33 1 7 61 254 93 120 153 101 45 136 168 138 31 70 105 95 24 172 25 94 100 66 33 135 178 135 55 56 254 82 170 170 2 215 254 104 3 193 253 10 1 123 5 182 133 254 14 6 72 144 156 254 59 1 201 104 99 40 253 68 2 188 40 95 108 254 55 1 190 184 58 253 80 5 182 253 146 1 233 133 153 254 55 0 0 2 0 176 0 0 6 186 4 72 0 36 0 39 0 103 64 58 33 29 29 30 38 35 15 16 2 39 37 1 7 1 39 16 34 27 35 24 30 9 41 40 35 1 36 38 36 38 70 89 18 14 28 33 28 70 89 39 2 47 33 63 33 2 33 33 30 36 15 31 15 24 16 8 30 21 0 63 51 51 51 63 63 18 57 47 93 51 51 43 17 0 51 51 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 17 51 49 48 1 21 1 30 3 19 35 3 46 2 35 35 17 35 17 35 34 6 6 7 3 35 19 54 55 33 17 35 17 51 17 33 1 53 5 33 1 6 49 254 174 88 111 73 48 155 172 133 34 58 86 74 10 154 10 75 84 55 38 135 170 131 47 37 254 205 166 166 2 53 254 176 3 33 253 180 1 37 4 72 105 254 158 7 49 78 105 254 114 1 80 86 70 28 253 248 2 8 27 63 92 254 174 1 80 120 40 254 16 4 72 254 53 1 98 105 140 254 199 0 1 0 63 254 78 4 53 6 209 0 75 0 132 64 77 0 19 33 63 25 70 70 10 63 55 67 60 42 28 45 40 19 11 76 77 73 22 74 89 73 19 57 52 49 15 46 31 46 47 46 3 9 3 46 42 64 67 29 28 29 28 74 89 29 29 16 60 42 42 36 74 89 42 4 10 9 73 89 10 16 16 3 73 89 16 35 12 7 73 89 12 34 0 63 43 0 24 63 43 0 24 16 198 43 0 24 63 43 17 0 51 18 57 24 47 43 17 18 0 57 26 24 16 221 95 94 93 57 196 50 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 23 20 22 51 50 55 54 51 50 23 21 38 35 34 7 6 35 34 38 53 52 54 55 54 54 53 16 33 35 53 51 50 54 53 52 38 35 34 6 7 39 54 55 38 39 39 53 51 22 23 54 54 51 50 23 21 38 35 34 6 7 22 22 21 20 6 7 21 22 22 21 20 4 5 6 6 240 87 89 97 120 120 70 155 71 80 160 68 105 105 105 179 184 217 232 204 181 254 64 218 209 205 225 162 137 106 187 110 86 168 190 57 117 49 123 92 131 92 131 64 50 48 24 43 44 111 48 178 193 191 170 186 203 254 229 254 230 138 134 137 55 50 7 6 39 166 51 5 5 125 133 126 129 9 8 138 141 1 12 143 147 132 107 128 55 69 114 114 28 66 121 52 27 59 136 115 86 14 113 10 82 71 23 189 143 140 184 26 8 24 178 144 208 213 9 5 55 0 0 1 0 25 254 123 3 127 5 78 0 70 0 131 64 78 23 41 54 11 46 16 16 32 11 3 14 8 62 50 64 60 41 11 71 72 68 62 65 0 5 71 89 0 15 65 31 65 47 65 3 9 3 65 62 38 26 70 89 35 29 70 89 14 51 50 51 50 70 89 38 35 51 51 35 38 3 32 62 62 56 70 89 8 62 16 32 34 19 44 71 89 19 22 0 63 43 0 24 63 63 51 43 17 18 0 23 57 24 47 47 47 43 17 18 0 57 43 43 0 24 16 212 95 94 93 196 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 50 23 21 38 35 34 6 7 22 22 21 20 7 21 22 21 20 6 7 14 2 21 20 22 51 50 55 55 50 23 21 38 38 35 7 6 35 34 38 53 52 54 55 36 53 52 38 35 35 53 51 32 53 52 35 34 6 7 39 54 55 38 39 53 51 22 23 54 54 2 248 51 45 24 41 47 103 45 122 140 211 248 242 225 93 109 48 75 89 86 122 175 125 39 21 84 55 179 130 92 144 159 190 180 1 78 156 159 148 119 1 55 252 74 143 88 59 124 126 92 103 123 75 140 88 134 5 78 15 112 10 79 62 28 138 107 184 57 8 71 202 148 168 3 2 23 42 44 49 43 5 5 39 143 19 24 5 5 119 112 116 125 3 4 190 97 90 141 172 162 34 36 135 55 15 117 98 27 52 137 110 85 255 255 0 109 0 0 5 242 5 182 2 6 1 117 0 0 255 255 0 164 254 20 5 135 6 18 2 6 1 149 0 0 0 3 0 125 255 236 5 190 5 205 0 11 0 18 0 25 0 71 64 37 22 16 16 6 23 15 15 0 6 0 26 27 22 16 73 89 15 22 1 11 3 22 22 3 9 9 19 73 89 9 4 3 12 73 89 3 19 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 1 16 0 33 32 0 17 16 0 33 32 0 1 50 18 19 33 18 18 19 34 2 3 33 38 2 5 190 254 157 254 196 254 189 254 161 1 96 1 68 1 59 1 98 253 97 229 247 13 252 43 13 249 232 224 251 19 3 211 17 244 2 221 254 161 254 110 1 139 1 104 1 101 1 137 254 112 252 68 1 17 1 12 254 245 254 238 4 180 254 254 255 0 254 1 4 0 0 3 0 115 255 236 4 98 4 92 0 12 0 19 0 26 0 73 64 39 23 17 17 7 24 16 16 0 7 0 27 28 23 17 70 89 15 23 31 23 2 11 3 23 23 3 10 10 20 70 89 10 16 3 13 70 89 3 22 0 63 43 0 24 63 43 17 18 0 57 24 47 95 94 93 43 17 18 1 57 57 17 51 17 51 17 51 17 51 49 48 1 16 0 35 34 38 2 53 16 0 51 50 0 1 50 54 55 33 22 22 19 34 6 7 33 38 38 4 98 254 242 238 147 228 124 1 12 238 230 1 15 254 8 158 164 10 253 105 9 160 160 156 158 13 2 147 15 161 2 37 254 244 254 211 138 1 2 173 1 12 1 43 254 206 253 77 184 191 186 189 3 88 173 167 168 172 0 0 1 0 0 0 0 5 72 5 195 0 21 0 32 64 16 6 22 19 23 17 0 74 89 17 4 10 5 6 3 5 18 0 63 63 18 57 63 43 17 1 51 18 57 49 48 1 34 6 7 1 35 1 51 1 22 23 54 55 19 62 2 51 50 23 21 38 4 225 59 78 57 254 184 197 253 238 180 1 82 72 35 32 70 162 59 84 110 89 42 79 56 5 55 103 181 251 229 5 182 252 86 199 143 144 223 2 6 191 152 65 19 141 20 0 1 0 0 0 0 4 61 4 82 0 22 0 30 64 15 1 23 15 24 13 18 71 89 13 16 5 1 15 0 21 0 63 63 57 63 43 17 1 51 18 57 49 48 33 1 51 19 18 23 51 54 19 19 62 2 51 50 23 21 38 35 34 6 7 3 1 150 254 106 174 225 100 19 8 23 82 96 37 71 91 84 45 30 29 38 47 58 28 248 4 72 253 155 254 244 100 118 1 11 1 53 122 123 52 10 127 8 84 92 252 223 255 255 0 0 0 0 5 72 7 115 2 38 2 128 0 0 1 7 3 118 4 215 1 82 0 10 180 2 1 33 5 38 0 43 53 53 255 255 0 0 0 0 4 61 6 33 2 38 2 129 0 0 1 7 3 118 4 100 0 0 0 10 180 2 1 34 17 38 0 43 53 53 0 3 0 125 254 20 9 162 5 205 0 11 0 23 0 46 0 68 64 38 12 6 18 0 33 46 39 24 0 6 6 47 48 37 42 74 89 37 27 29 28 28 3 32 24 15 9 21 73 89 9 4 3 15 73 89 3 19 0 63 43 0 24 63 43 0 24 63 51 18 57 17 51 63 43 17 18 1 23 57 17 51 17 51 49 48 1 16 0 33 32 0 17 16 0 33 32 0 1 16 18 51 50 18 17 16 2 35 34 2 37 51 19 22 23 51 54 54 19 51 1 6 6 35 34 39 53 22 51 50 54 55 55 5 84 254 185 254 220 254 215 254 189 1 67 1 44 1 35 1 69 251 221 223 217 218 221 220 216 218 225 4 111 176 246 78 20 8 11 83 228 176 254 43 69 188 136 76 74 55 66 94 117 35 61 2 221 254 160 254 111 1 139 1 104 1 102 1 136 254 112 254 160 254 215 254 205 1 49 1 43 1 41 1 47 254 210 65 253 139 207 102 44 251 2 131 251 32 182 158 17 133 12 103 89 156 255 255 0 115 254 20 8 123 4 92 0 38 0 82 0 0 0 7 0 92 4 117 0 0 0 2 0 125 255 135 6 16 6 45 0 19 0 40 0 81 64 42 20 10 38 13 7 17 34 34 3 28 31 0 0 28 7 23 10 5 41 42 36 34 38 13 38 73 89 17 15 13 3 28 26 23 7 23 73 89 5 3 7 18 0 63 51 51 43 17 0 51 51 24 63 51 51 43 17 0 51 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 51 17 51 49 48 1 16 0 5 6 35 34 39 36 0 17 16 0 37 54 51 50 23 4 0 1 20 18 23 54 54 51 50 23 54 18 53 52 2 39 6 35 34 39 6 2 6 16 254 209 254 248 26 119 124 20 254 244 254 209 1 43 1 16 20 124 121 22 1 12 1 45 251 33 202 189 17 73 54 110 31 189 202 202 189 31 110 113 31 189 202 2 221 254 210 254 115 44 111 111 41 1 138 1 54 1 49 1 133 44 108 108 44 254 115 254 213 244 254 207 41 48 38 86 41 1 49 244 244 1 47 39 88 86 39 254 211 0 0 2 0 115 255 147 4 207 4 180 0 23 0 45 0 80 64 42 24 12 15 9 43 27 37 21 3 35 0 0 3 32 27 9 12 6 46 47 40 37 43 15 43 70 89 21 18 15 16 32 30 27 9 27 70 89 6 3 9 21 0 63 51 51 43 17 0 51 51 24 63 51 51 43 17 0 51 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 17 51 49 48 1 20 2 7 6 6 35 34 38 39 38 2 53 52 18 55 54 54 51 50 22 23 22 18 5 20 22 23 54 54 51 50 23 54 54 53 16 37 6 6 35 34 38 39 6 6 4 207 224 204 9 64 56 57 61 9 203 229 224 208 8 62 57 56 64 9 202 226 252 80 125 137 12 60 53 103 24 134 124 254 252 13 61 51 53 60 12 137 125 2 37 233 254 223 37 54 45 43 56 36 1 38 229 233 1 32 36 56 42 43 57 38 254 220 225 177 210 31 42 34 74 31 210 175 1 96 62 42 32 32 44 31 209 0 0 3 0 125 255 236 7 127 8 59 0 21 0 69 0 84 0 85 64 46 67 55 31 43 43 1 38 70 75 80 72 60 12 55 10 85 86 21 2 2 7 7 16 12 82 64 72 58 34 64 58 64 73 89 40 58 4 28 22 52 22 73 89 46 52 19 0 63 51 43 17 0 51 24 63 51 43 17 0 51 24 16 214 26 220 212 205 50 18 57 47 51 17 18 1 23 57 17 51 17 51 49 48 1 21 35 34 46 2 35 34 6 21 21 35 53 52 54 51 50 30 2 51 1 50 54 55 22 22 51 50 18 17 16 2 35 34 6 7 39 54 51 50 0 17 16 0 33 34 38 39 6 6 35 32 0 17 16 0 51 50 23 7 38 38 35 34 2 17 16 18 1 20 7 53 54 53 52 46 2 53 52 51 50 22 5 162 17 84 142 120 102 43 47 60 125 116 112 58 112 119 133 78 253 40 88 171 61 55 171 93 188 210 165 147 60 95 43 70 121 154 228 1 1 254 224 254 253 104 170 76 75 167 110 254 252 254 227 1 1 228 154 121 70 43 94 60 148 165 210 2 128 237 120 31 36 31 92 56 67 7 199 121 36 43 36 52 51 16 28 103 110 36 44 36 248 186 66 63 57 72 1 78 1 45 1 11 1 40 43 31 146 82 254 136 254 173 254 140 254 98 40 48 45 43 1 157 1 117 1 85 1 118 82 146 31 43 254 217 254 244 254 209 254 180 6 104 162 61 72 41 53 20 18 17 26 28 73 68 0 0 3 0 115 255 236 6 4 7 6 0 42 0 63 0 78 0 92 64 51 19 7 28 40 40 44 34 64 69 13 74 66 54 7 10 79 80 50 58 63 45 45 54 76 66 10 64 31 16 10 16 70 89 2 23 70 89 2 4 37 10 16 26 21 4 21 70 89 0 4 22 0 63 51 43 17 0 51 24 63 51 18 57 43 43 17 0 51 26 24 16 222 220 212 50 17 51 205 50 17 18 1 23 57 17 51 17 51 49 48 5 34 39 6 35 34 2 17 16 18 51 50 22 23 7 38 35 34 6 21 16 33 50 55 22 22 51 32 17 52 38 35 34 7 39 54 54 51 50 18 17 16 2 3 21 35 34 46 2 35 34 21 21 35 53 52 54 51 50 30 2 51 5 20 7 53 54 53 52 46 2 53 52 51 50 22 4 43 148 94 92 143 225 250 207 186 62 119 40 57 89 71 116 109 1 49 123 112 62 111 67 1 45 110 115 71 89 57 40 119 62 187 206 247 81 16 84 143 120 101 43 107 125 115 112 58 113 118 131 78 254 240 238 119 30 36 30 92 56 67 20 65 65 1 35 1 14 1 23 1 40 32 25 139 51 214 214 254 94 80 42 38 1 162 214 214 51 139 25 32 254 215 254 234 254 245 254 218 6 165 120 36 42 36 102 17 31 100 111 37 43 37 221 161 62 72 40 56 20 17 17 25 27 74 68 0 0 2 0 94 255 236 7 127 7 4 0 13 0 64 0 95 64 52 48 36 57 54 62 23 23 1 18 54 41 12 36 7 65 66 14 45 39 45 73 89 30 55 55 33 39 5 9 9 13 64 9 15 72 13 7 3 11 64 20 39 4 59 51 33 51 73 89 26 33 19 0 63 51 43 17 0 51 24 63 51 26 222 50 50 205 43 50 17 51 17 18 57 47 57 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 21 7 35 39 35 7 35 39 35 7 35 39 53 1 34 6 7 39 54 51 50 18 17 16 0 33 34 38 39 35 6 6 35 32 0 17 16 0 51 50 23 7 38 38 35 34 2 17 16 18 51 50 54 55 17 51 17 22 51 50 18 17 16 2 5 139 80 32 50 186 49 33 49 188 47 33 80 3 67 60 93 45 70 124 153 228 255 254 226 254 253 116 172 76 9 78 172 112 254 252 254 227 1 1 229 150 126 70 45 93 60 147 165 210 190 65 130 51 170 102 145 188 212 165 7 4 27 172 103 103 103 103 172 27 254 43 41 31 146 80 254 136 254 173 254 139 254 99 48 48 49 47 1 160 1 114 1 85 1 118 80 146 31 41 254 215 254 246 254 209 254 180 38 38 1 201 254 55 76 1 74 1 49 1 11 1 40 0 0 2 0 0 0 0 6 29 5 164 0 13 0 42 0 63 64 36 36 1 14 26 27 12 18 7 43 44 40 21 14 31 22 3 17 18 5 9 9 13 64 9 15 72 13 7 3 11 35 27 18 15 17 21 0 63 63 51 51 222 50 50 205 43 50 17 51 17 18 23 57 63 17 18 1 23 57 49 48 1 21 7 35 39 35 7 35 39 35 7 35 39 53 1 7 3 35 1 51 19 22 23 51 54 54 19 3 51 0 22 23 51 54 18 17 51 16 2 7 35 3 38 4 182 82 30 50 188 49 31 49 188 50 30 80 1 172 39 170 213 254 127 172 246 39 41 8 12 35 186 172 178 1 9 45 10 8 173 153 166 195 219 182 125 33 5 164 27 172 103 103 103 103 172 27 252 37 95 254 150 4 72 253 73 111 171 35 81 1 136 1 213 252 255 144 44 184 1 179 1 82 254 150 254 7 229 1 90 92 0 0 1 0 125 254 20 4 227 5 203 0 23 0 45 64 24 3 15 9 10 21 10 15 3 24 25 19 0 73 89 19 4 12 6 73 89 12 19 10 27 0 63 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 49 48 1 34 0 17 16 0 33 50 55 17 35 17 35 32 0 17 52 18 36 51 50 23 7 38 3 72 245 254 224 1 10 1 2 111 57 170 20 254 181 254 159 175 1 72 216 237 170 71 171 5 51 254 192 254 232 254 218 254 212 23 253 116 1 216 1 132 1 109 224 1 86 184 84 146 78 0 1 0 115 254 20 3 162 4 92 0 24 0 47 64 24 15 3 23 22 9 22 3 3 25 26 23 27 6 12 70 89 6 16 0 18 70 89 0 22 0 63 43 0 24 63 43 0 24 63 17 18 1 23 57 17 51 17 51 49 48 5 34 0 17 16 0 51 50 22 23 7 38 35 34 6 21 20 22 51 50 54 55 17 35 17 2 117 254 254 252 1 17 251 79 164 48 49 142 104 177 171 171 171 53 80 57 166 20 1 31 1 18 1 20 1 43 34 23 141 51 205 221 220 200 17 26 253 110 1 216 0 0 1 0 106 255 252 4 117 5 6 0 19 0 47 64 33 4 2 8 3 6 0 17 7 10 16 13 18 12 14 14 21 20 19 0 3 17 6 15 5 16 7 13 10 9 12 11 1 18 0 63 205 23 57 17 18 1 23 57 49 48 1 3 39 19 37 55 5 19 37 55 5 19 23 3 5 7 37 3 5 7 2 2 182 121 182 254 225 66 1 33 205 254 223 67 1 33 185 118 184 1 33 68 254 225 204 1 30 65 1 57 254 195 67 1 66 166 115 168 1 100 166 117 168 1 61 67 254 192 166 115 166 254 158 168 115 0 1 0 203 4 145 3 172 5 180 0 19 0 30 64 12 0 6 10 16 6 16 20 21 3 0 13 9 0 47 51 51 50 17 18 1 57 57 17 51 17 51 49 48 1 6 6 35 34 38 53 52 54 51 33 54 54 51 50 22 21 20 6 35 1 135 6 42 48 51 41 42 54 1 193 6 43 47 51 45 44 54 4 240 45 50 50 53 53 41 46 48 49 51 56 40 0 1 0 248 4 229 3 219 5 215 0 19 0 28 64 11 7 18 21 20 0 18 18 12 4 128 9 0 47 26 204 50 51 17 51 17 18 1 57 57 49 48 1 50 55 54 51 50 22 21 21 35 53 52 35 34 14 2 35 35 53 1 4 120 150 149 81 111 116 125 106 43 102 121 142 84 16 5 98 59 58 111 100 31 17 102 36 43 36 121 0 1 1 223 4 215 2 205 6 53 0 14 0 24 64 10 10 0 12 5 0 3 15 16 3 13 0 47 204 17 18 1 23 57 17 51 49 48 1 52 54 51 50 21 20 14 2 21 20 23 21 38 1 223 67 56 92 30 36 30 119 238 5 184 56 69 76 27 25 16 18 20 54 40 74 64 0 1 1 225 4 215 2 207 6 53 0 14 0 24 64 10 5 0 0 10 2 3 15 16 12 2 0 47 204 17 18 1 23 57 17 51 49 48 1 20 7 53 54 53 52 46 2 53 52 51 50 22 2 207 238 119 30 36 30 92 56 67 5 184 161 64 74 40 54 20 18 16 25 27 76 69 0 8 0 41 254 193 7 193 5 145 0 12 0 26 0 40 0 54 0 68 0 82 0 95 0 109 0 128 64 73 95 40 68 90 34 62 12 26 7 20 82 54 109 76 48 103 16 110 111 0 7 58 72 72 65 79 69 68 62 76 86 99 99 92 106 102 95 90 109 30 44 44 37 51 47 34 40 3 54 16 23 7 79 76 106 109 51 54 23 23 54 51 109 106 76 79 7 8 9 13 20 3 9 0 47 51 47 51 18 23 57 47 47 47 47 47 47 47 47 17 51 17 23 51 17 51 51 17 51 17 51 51 51 17 51 51 17 51 17 51 51 51 17 51 51 17 51 17 51 17 18 1 23 57 49 48 1 38 38 35 34 6 7 35 54 51 50 22 23 3 38 38 35 34 6 7 35 54 54 51 50 22 23 1 38 38 35 34 6 7 35 54 54 51 50 22 23 33 38 38 35 34 6 7 35 54 54 51 50 22 23 1 38 38 35 34 6 7 35 54 54 51 50 22 23 33 38 38 35 34 6 7 35 54 54 51 50 22 23 1 38 38 35 34 6 7 35 54 51 50 22 23 33 38 38 35 34 6 7 35 54 54 51 50 22 23 4 111 5 60 69 78 50 5 75 11 197 93 113 7 79 5 60 69 78 50 5 75 5 100 103 92 115 6 1 244 5 60 68 78 50 5 76 5 101 103 92 115 6 251 47 5 60 68 78 50 5 76 5 101 103 92 115 6 4 49 5 60 68 78 50 5 76 5 101 103 92 115 6 251 47 5 60 68 78 50 5 76 5 101 103 92 115 6 4 240 5 60 68 78 51 5 75 11 198 92 115 6 249 190 5 60 68 78 50 5 76 5 101 103 92 115 6 4 207 44 44 41 47 194 101 93 249 242 44 44 41 47 89 105 102 92 1 22 45 43 39 49 90 105 102 93 45 43 39 49 90 105 102 93 3 219 45 43 39 49 90 105 102 93 45 43 39 49 90 105 102 93 254 25 44 44 40 48 194 104 90 45 43 39 49 90 104 102 92 0 0 8 0 41 254 127 7 125 5 211 0 7 0 15 0 23 0 31 0 39 0 46 0 53 0 62 0 52 64 37 21 23 37 32 62 58 5 1 41 44 31 28 50 53 9 13 16 63 64 59 43 7 46 54 25 21 29 17 47 39 15 36 51 14 5 12 5 0 47 47 18 23 57 17 18 1 23 57 49 48 5 23 6 6 7 35 54 55 3 39 54 54 55 51 6 7 1 55 22 22 23 21 38 39 5 7 38 38 39 53 22 23 1 55 54 54 55 23 6 7 1 7 6 7 39 54 55 3 39 38 39 55 22 23 1 23 22 22 23 7 38 38 39 4 55 11 17 70 36 97 53 17 59 11 19 73 31 97 52 18 2 35 14 71 200 65 221 129 251 104 14 66 191 79 221 129 3 166 2 67 190 67 69 177 120 252 234 2 155 169 69 177 120 43 17 82 69 67 123 76 3 106 17 39 90 22 67 31 130 38 35 14 66 191 79 221 129 4 152 14 71 200 65 220 130 254 22 11 19 73 31 97 53 17 59 11 17 70 36 97 53 17 1 170 16 39 88 25 68 110 88 252 149 16 89 63 68 110 88 2 222 2 140 183 70 198 99 252 233 2 69 194 60 70 50 195 52 0 0 2 0 201 254 131 6 8 7 94 0 20 0 34 0 89 64 47 13 10 12 7 14 14 9 19 2 2 20 20 24 32 9 10 5 36 35 20 18 6 5 17 18 5 18 14 0 14 9 73 89 14 18 12 34 31 15 24 1 24 28 21 7 0 3 0 63 50 222 50 205 93 50 63 63 43 17 18 0 57 57 17 51 17 51 24 63 17 18 1 23 57 17 51 17 51 17 51 17 51 51 17 51 49 48 19 51 17 20 7 7 51 1 51 17 51 3 35 19 35 17 52 55 35 1 35 1 34 38 39 51 22 22 51 50 54 55 51 6 6 201 161 10 4 8 3 52 184 184 143 197 156 160 19 9 252 201 186 2 67 186 168 10 155 10 93 110 105 99 9 158 12 181 5 182 252 209 118 206 83 4 198 250 226 253 235 1 125 3 37 175 247 251 53 6 43 143 164 108 78 93 93 159 148 0 2 0 176 254 135 5 18 6 12 0 17 0 31 0 79 64 42 10 7 9 4 11 11 6 15 1 1 16 16 21 29 6 7 5 33 32 3 14 16 17 15 11 6 70 89 11 16 21 9 34 28 15 21 1 21 25 18 4 15 0 63 222 50 205 93 50 63 63 51 43 0 24 63 18 57 57 17 18 1 23 57 17 51 17 51 17 51 17 51 51 17 51 49 48 1 17 20 7 1 51 17 51 3 35 19 35 17 52 55 1 35 17 37 34 38 39 51 22 22 51 50 54 55 51 6 6 1 76 10 2 81 207 176 129 172 125 155 8 253 174 205 1 236 185 170 10 156 7 90 116 103 100 10 157 12 178 4 72 253 106 136 136 3 166 252 71 253 248 1 121 2 160 158 104 252 90 4 72 145 143 164 102 84 90 96 158 149 0 2 0 47 0 0 4 125 5 182 0 17 0 25 0 77 64 41 8 4 18 18 1 15 21 11 11 6 15 17 4 26 27 8 25 73 89 7 17 0 17 73 89 4 0 8 0 8 0 15 2 15 18 74 89 15 18 2 3 0 63 63 43 17 18 0 57 57 24 47 47 17 51 43 17 0 51 43 17 18 1 23 57 17 51 17 51 51 17 51 51 49 48 19 51 53 51 21 33 21 33 17 51 32 17 20 4 33 33 17 35 1 51 32 17 52 38 35 35 47 154 170 1 86 254 170 192 2 74 254 236 254 241 254 111 154 1 68 221 1 123 184 201 215 4 252 186 186 150 254 224 254 100 210 216 4 102 252 43 1 25 132 128 0 0 2 0 20 0 0 4 76 6 20 0 18 0 26 0 75 64 40 4 0 20 20 16 12 23 8 8 2 12 14 4 27 28 4 19 70 89 3 14 15 14 71 89 0 15 4 15 4 15 12 17 0 12 20 70 89 12 21 0 63 43 0 24 63 18 57 57 47 47 17 51 43 17 0 51 43 17 18 1 23 57 17 51 17 51 51 17 51 51 49 48 1 33 21 33 17 33 50 22 21 20 6 35 33 17 35 53 51 53 51 17 17 33 32 53 52 38 35 1 86 1 39 254 217 1 64 223 215 224 221 254 33 156 156 166 1 49 1 31 132 159 5 31 129 253 229 154 155 164 170 4 158 129 245 251 224 254 151 185 92 84 0 0 2 0 201 0 0 4 121 5 182 0 15 0 28 0 72 64 41 16 10 10 11 24 0 0 4 5 3 22 6 21 19 20 11 10 29 30 22 19 28 16 12 28 74 89 9 16 74 89 6 3 12 9 9 11 12 3 11 18 0 63 63 18 57 47 18 57 57 43 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 6 7 23 7 39 6 35 35 17 35 17 33 32 4 1 51 50 55 39 55 23 54 53 52 38 35 35 4 121 115 108 120 100 149 102 136 184 170 1 137 1 18 1 21 252 250 166 87 76 108 108 140 127 194 202 200 4 12 127 201 57 157 84 192 27 253 193 5 182 215 253 242 10 141 82 176 72 178 145 142 0 2 0 176 254 20 4 117 4 92 0 24 0 41 0 85 64 49 29 11 4 7 7 8 39 18 18 21 22 20 37 23 34 36 35 8 10 42 43 37 34 25 32 15 25 70 89 12 11 11 4 20 23 4 0 15 16 9 15 8 27 0 32 70 89 0 22 0 63 43 0 24 63 63 63 18 23 57 17 51 43 17 18 0 57 57 17 18 1 23 57 17 51 17 51 17 51 51 51 49 48 5 34 38 39 35 22 21 17 35 17 51 23 51 54 54 51 50 18 17 16 7 23 7 39 6 3 34 6 7 21 20 22 51 50 55 39 55 23 54 53 52 38 2 174 107 177 60 12 12 166 135 25 8 64 169 109 218 237 183 115 100 131 71 109 168 150 2 154 170 47 41 121 106 129 101 150 20 79 82 148 34 254 61 6 52 150 90 80 254 214 254 243 254 174 145 156 80 174 24 3 227 186 203 37 231 199 12 158 80 170 103 249 215 209 0 0 1 0 47 0 0 4 8 5 182 0 13 0 60 64 31 3 7 7 12 8 0 5 8 10 4 14 15 6 10 11 10 73 89 3 11 11 8 13 13 2 73 89 13 3 8 18 0 63 63 43 17 18 0 57 24 47 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 1 21 33 17 33 21 33 17 35 17 35 53 51 17 4 8 253 107 1 168 254 88 170 154 154 5 182 153 254 2 150 253 119 2 137 150 2 151 0 1 0 18 0 0 3 66 4 72 0 13 0 60 64 31 2 6 6 11 7 0 4 7 9 4 14 15 5 9 10 9 71 89 2 10 10 7 12 12 1 70 89 12 15 7 21 0 63 63 43 17 18 0 57 24 47 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 1 33 17 33 21 33 17 35 17 35 53 51 17 33 3 66 254 20 1 90 254 166 166 158 158 2 146 3 188 254 168 127 254 27 1 229 127 1 228 0 0 1 0 201 254 0 4 219 5 182 0 27 0 65 64 35 9 3 3 4 25 14 14 7 20 4 4 28 29 17 23 73 89 17 28 11 0 73 89 11 11 4 5 5 8 73 89 5 3 4 18 0 63 63 43 17 18 0 57 24 47 43 0 24 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 7 17 35 17 33 21 33 17 54 51 32 0 17 16 0 33 34 38 39 53 22 51 32 17 52 0 2 49 100 90 170 3 73 253 97 90 121 1 64 1 85 254 226 254 253 83 125 70 123 137 1 127 255 0 2 143 12 253 125 5 182 153 253 252 10 254 173 254 198 254 197 254 165 21 28 152 49 1 254 245 1 4 0 0 1 0 176 254 10 3 250 4 72 0 27 0 65 64 35 8 25 20 14 14 15 15 2 18 25 4 29 28 22 11 70 89 22 22 15 16 16 19 70 89 16 15 15 21 0 5 70 89 0 27 0 63 43 0 24 63 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 39 53 22 51 50 54 53 52 38 35 34 7 17 35 17 33 21 33 17 54 51 32 0 17 16 2 2 70 145 101 116 123 133 136 178 181 69 74 166 2 154 254 12 82 59 1 16 1 7 228 254 10 60 149 63 202 215 223 208 17 254 37 4 72 142 254 183 12 254 229 254 217 254 245 254 218 0 0 1 0 2 254 131 6 248 5 182 0 21 0 77 64 41 6 17 17 3 18 13 12 12 8 9 18 0 1 21 7 22 23 18 21 18 19 16 9 6 3 0 0 15 1 15 10 73 89 15 18 13 34 7 4 1 3 0 63 51 51 63 63 43 17 18 0 57 17 51 51 51 51 51 24 63 51 17 18 1 23 57 17 51 17 51 51 17 51 49 48 1 1 51 1 17 51 17 1 51 1 1 51 17 35 17 35 1 17 35 17 1 35 2 86 253 193 190 2 57 164 2 58 190 253 192 1 218 180 162 94 253 186 164 253 187 199 2 240 2 198 253 60 2 196 253 60 2 196 253 60 253 168 253 233 1 125 2 229 253 27 2 229 253 27 0 0 1 0 4 254 135 6 31 4 72 0 21 0 75 64 40 2 13 13 21 14 9 8 8 4 5 14 18 19 17 7 22 23 21 15 12 5 2 18 18 11 3 0 19 15 14 17 21 11 6 70 89 11 21 9 34 0 63 63 43 0 24 63 51 63 51 51 18 57 17 51 51 51 51 51 17 18 1 23 57 17 51 17 51 51 17 51 49 48 1 51 17 1 51 1 1 51 17 35 17 35 1 17 35 17 1 35 1 1 51 1 2 164 153 1 197 182 254 54 1 112 193 162 94 254 30 153 254 31 191 1 240 254 55 182 1 195 4 72 253 237 2 19 253 237 254 90 253 248 1 121 2 45 253 211 2 45 253 211 2 53 2 19 253 237 0 255 255 0 74 254 66 4 53 5 203 2 38 1 177 0 0 0 7 3 127 1 88 0 0 255 255 0 68 254 66 3 127 4 92 2 38 1 209 0 0 0 7 3 127 1 8 0 0 0 1 0 201 254 131 5 43 5 182 0 15 0 59 64 32 12 8 8 9 3 2 2 14 15 6 9 5 16 17 15 12 6 3 5 13 10 3 9 18 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 63 51 18 23 57 17 18 1 23 57 17 51 17 51 17 51 49 48 37 51 17 35 17 35 1 7 17 35 17 51 17 1 51 1 4 127 172 162 102 253 233 153 170 170 2 151 201 253 180 154 253 233 1 125 2 197 136 253 195 5 182 253 43 2 213 253 133 0 1 0 176 254 133 4 61 4 72 0 14 0 58 64 31 14 10 10 11 6 5 5 1 2 11 4 15 16 2 14 9 3 8 0 12 15 11 21 8 3 70 89 8 21 6 34 0 63 63 43 0 24 63 63 51 18 23 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 51 1 1 51 17 35 17 35 1 17 35 17 51 17 3 47 182 254 39 1 127 178 159 84 254 12 166 166 4 72 253 239 254 88 253 246 1 123 2 43 253 213 4 72 253 235 0 0 1 0 201 0 0 4 233 5 182 0 18 0 56 64 30 6 2 2 3 10 17 17 7 18 14 12 18 3 4 19 20 8 10 6 0 16 18 6 3 11 4 3 15 3 18 0 63 51 63 51 18 23 57 17 18 1 23 57 17 51 51 17 51 17 51 17 51 49 48 1 7 17 35 17 51 17 55 17 51 21 1 51 1 1 35 1 17 35 1 240 125 170 170 125 125 1 155 203 253 180 2 98 200 254 76 125 2 168 107 253 195 5 182 253 37 139 1 93 211 1 198 253 133 252 197 2 92 254 207 0 1 0 176 0 0 4 59 4 72 0 19 0 58 64 31 6 2 2 3 14 10 18 18 7 19 15 12 19 3 4 20 21 8 10 6 1 17 19 6 3 11 4 15 16 3 21 0 63 51 63 51 18 23 57 17 18 1 23 57 17 51 51 17 51 51 17 51 17 51 49 48 1 39 17 35 17 51 17 55 17 51 21 1 51 1 21 1 35 1 21 35 1 205 119 166 166 119 131 1 14 182 254 60 1 235 194 254 213 129 1 178 121 253 213 4 72 253 235 121 1 74 205 1 31 254 37 107 253 254 1 59 221 0 0 1 0 47 0 0 4 233 5 182 0 19 0 71 64 38 8 4 16 16 1 17 11 14 12 10 6 14 17 19 6 20 21 7 19 0 19 73 89 4 11 8 14 3 17 0 0 2 13 17 18 9 2 3 0 63 51 63 51 18 57 47 18 23 57 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 51 49 48 19 51 53 51 21 51 21 35 17 1 51 1 1 35 1 7 17 35 17 35 47 154 170 221 221 2 149 203 253 180 2 98 206 253 241 153 170 154 5 4 178 178 151 254 110 2 219 253 133 252 197 2 197 134 253 193 4 109 0 0 1 0 20 0 0 4 27 6 20 0 25 0 77 64 43 10 8 4 22 22 1 23 18 16 6 17 23 25 6 26 27 20 10 15 19 23 21 7 25 0 25 71 89 4 15 0 31 0 47 0 3 0 0 2 15 15 2 0 0 63 63 18 57 47 93 51 43 17 0 51 24 63 51 18 57 57 17 18 1 23 57 17 51 51 17 51 51 51 49 48 19 51 53 51 21 33 21 33 17 7 7 51 55 54 54 1 51 1 1 35 1 7 17 35 17 35 20 156 164 1 125 254 131 3 3 8 18 55 40 1 112 199 254 68 1 217 199 254 125 125 164 156 5 90 186 186 127 253 232 91 55 24 74 48 1 133 254 45 253 139 2 4 106 254 102 4 219 0 1 0 16 0 0 5 131 5 182 0 13 0 53 64 27 2 10 10 11 5 8 6 4 8 11 4 14 15 8 2 0 7 11 18 3 3 0 13 73 89 0 3 0 63 43 0 24 63 63 51 18 57 57 17 18 1 23 57 17 51 17 51 17 51 49 48 19 33 17 1 51 1 1 35 1 7 17 35 17 33 16 1 252 2 150 203 253 180 2 98 201 253 236 154 170 254 174 5 182 253 37 2 219 253 133 252 197 2 197 136 253 195 5 29 0 0 1 0 41 0 0 4 227 4 72 0 12 0 53 64 27 5 1 1 9 9 10 12 10 4 6 4 14 13 8 2 0 7 10 21 3 15 0 12 70 89 0 15 0 63 43 0 24 63 63 51 18 57 57 17 18 1 23 57 17 51 17 51 17 51 49 48 19 33 17 1 51 1 1 35 1 17 35 17 33 41 2 2 1 219 182 254 39 2 0 194 254 10 164 254 162 4 72 253 235 2 21 253 237 253 203 2 43 253 213 3 188 0 1 0 201 254 131 5 193 5 182 0 15 0 68 64 36 12 8 8 9 13 5 5 0 3 2 2 0 9 3 16 17 12 7 73 89 12 12 5 14 10 3 9 18 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 37 51 17 35 17 35 17 33 17 35 17 51 17 33 17 51 5 31 162 162 170 252 254 170 170 3 2 170 154 253 233 1 125 2 176 253 80 5 182 253 146 2 110 0 0 1 0 176 254 135 4 248 4 72 0 15 0 78 64 43 1 13 13 14 2 10 10 5 8 7 7 5 14 3 16 17 1 12 70 89 15 1 31 1 2 11 3 1 1 10 3 15 15 14 21 10 5 70 89 10 21 8 34 0 63 63 43 0 24 63 63 51 18 57 47 95 94 93 43 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 49 48 1 17 33 17 51 17 51 17 35 17 35 17 33 17 35 17 1 86 2 102 166 150 166 150 253 154 166 4 72 254 53 1 203 252 71 253 248 1 121 1 238 254 18 4 72 0 0 1 0 201 0 0 6 111 5 182 0 13 0 63 64 33 10 6 6 7 11 3 3 2 0 2 7 3 14 15 10 5 73 89 10 10 7 12 12 1 73 89 12 3 8 3 3 7 18 0 63 51 63 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 33 17 35 17 33 17 35 17 51 17 33 17 33 6 111 254 176 172 253 0 170 170 3 0 1 252 5 29 250 227 2 176 253 80 5 182 253 146 2 110 0 1 0 176 0 0 5 193 4 72 0 13 0 73 64 39 1 11 11 12 2 8 8 7 4 7 12 3 14 15 13 15 1 10 70 89 15 1 31 1 2 11 3 1 1 3 8 12 21 3 6 70 89 3 15 0 63 43 0 24 63 51 18 57 47 95 94 93 43 0 24 63 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 17 33 17 33 21 33 17 35 17 33 17 35 17 1 86 2 102 2 5 254 161 166 253 154 166 4 72 254 53 1 203 140 252 68 1 238 254 18 4 72 0 1 0 201 254 0 8 29 5 182 0 29 0 71 64 38 4 5 8 0 0 1 23 13 13 18 1 5 4 30 31 16 21 73 89 16 28 10 26 73 89 10 10 5 6 6 3 73 89 6 3 1 5 18 0 63 51 63 43 17 18 0 57 24 47 43 0 24 63 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 33 35 17 33 17 35 17 33 17 54 51 32 0 17 16 0 33 34 39 53 22 51 32 17 52 2 35 34 6 7 4 217 170 253 68 170 4 16 68 125 1 50 1 81 254 229 254 254 156 123 134 127 1 122 230 232 42 127 24 5 29 250 227 5 182 253 97 12 254 168 254 200 254 199 254 166 49 152 49 1 254 242 1 5 7 5 0 0 1 0 176 254 10 6 168 4 72 0 28 0 71 64 38 17 18 21 13 13 14 7 26 26 2 14 18 4 29 30 23 10 70 89 23 23 18 19 19 16 70 89 19 15 14 18 21 0 5 70 89 0 27 0 63 43 0 24 63 51 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 34 39 53 22 51 50 17 52 38 35 34 7 17 35 17 33 17 35 17 33 17 54 51 50 0 17 16 2 5 23 131 97 109 108 240 166 172 67 72 168 253 223 166 3 111 75 66 246 1 6 209 254 10 60 149 63 1 161 223 208 21 254 41 3 184 252 72 4 72 254 39 14 254 215 254 231 254 244 254 219 0 2 0 125 255 172 5 225 5 205 0 40 0 52 0 80 64 44 27 17 47 35 41 0 8 0 3 22 32 35 17 7 53 54 38 44 74 89 12 50 38 38 14 20 20 25 73 89 20 4 10 5 73 89 10 14 14 30 73 89 14 19 0 63 43 0 24 16 196 43 0 24 63 43 17 18 0 57 24 47 57 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 2 7 22 51 50 55 21 6 35 34 39 6 35 32 0 17 16 0 33 50 23 7 38 35 32 17 16 18 51 50 55 38 2 53 52 18 51 50 18 3 52 38 35 34 6 21 20 22 23 54 54 5 184 138 116 66 90 78 61 56 91 178 148 102 144 254 202 254 161 1 73 1 58 127 92 47 84 90 254 51 255 235 54 46 86 92 198 175 181 193 176 103 93 94 103 93 83 102 115 2 166 181 254 203 86 30 22 153 25 100 36 1 137 1 86 1 120 1 138 35 145 28 253 158 254 224 254 206 10 103 1 28 160 244 1 10 254 246 254 254 177 204 201 176 140 254 85 67 255 0 0 2 0 115 255 199 4 211 4 92 0 10 0 53 0 80 64 44 30 19 0 38 6 44 52 44 47 24 36 38 19 7 54 55 41 8 71 89 13 3 41 41 15 22 22 27 70 89 22 16 11 49 70 89 11 15 15 33 70 89 15 22 0 63 43 0 24 16 196 43 0 24 63 43 17 18 0 57 24 47 57 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 22 23 54 54 53 52 35 34 6 1 34 39 6 35 34 38 38 53 16 18 51 50 23 7 38 35 34 6 21 20 22 51 50 54 55 38 53 52 54 51 50 22 21 20 6 7 22 51 50 55 21 6 2 238 68 63 68 83 135 72 75 1 102 147 130 96 123 149 226 122 248 227 91 77 37 54 79 156 145 170 164 37 53 6 139 168 151 148 157 107 94 52 67 66 49 39 1 242 94 161 53 44 158 110 235 125 253 99 77 40 139 254 164 1 19 1 48 22 138 19 209 231 206 210 9 3 148 225 173 193 189 177 125 209 64 26 14 137 14 0 255 255 0 125 254 66 4 207 5 203 2 38 0 38 0 0 0 7 3 127 2 37 0 0 255 255 0 115 254 66 3 139 4 92 2 38 0 70 0 0 0 7 3 127 1 131 0 0 0 1 0 16 254 131 4 90 5 182 0 11 0 50 64 27 6 11 8 9 3 9 11 1 4 12 13 11 6 73 89 11 18 9 34 5 1 2 1 73 89 2 3 0 63 43 17 0 51 24 63 63 43 17 18 1 23 57 17 51 17 51 49 48 1 33 53 33 21 33 17 51 17 35 17 35 1 223 254 49 4 74 254 49 162 162 172 5 29 153 153 251 125 253 233 1 125 0 0 1 0 41 254 135 3 145 4 72 0 11 0 52 64 27 6 11 8 9 3 9 11 1 4 12 13 9 34 5 1 2 1 70 89 2 15 11 6 70 89 11 21 0 63 43 0 24 63 43 17 0 51 24 63 17 18 1 23 57 17 51 17 51 49 48 1 33 53 33 21 33 17 51 17 35 17 35 1 137 254 160 3 104 254 158 150 166 150 3 188 140 140 252 211 253 248 1 121 0 255 255 0 0 0 0 4 123 5 182 2 6 0 60 0 0 0 1 0 0 254 20 4 2 4 72 0 13 0 41 64 20 0 1 12 1 3 3 14 15 8 7 13 7 2 11 3 15 2 21 1 27 0 63 63 63 51 18 57 57 17 51 17 18 1 23 57 17 51 49 48 1 35 17 1 51 19 22 23 51 54 55 19 51 1 2 84 166 254 82 172 236 83 19 8 33 70 233 172 254 82 254 20 1 232 4 76 253 155 222 97 138 181 2 101 251 180 0 0 1 0 0 0 0 4 123 5 182 0 16 0 58 64 30 4 8 8 13 9 2 6 9 11 15 5 17 18 7 11 12 11 73 89 4 0 15 12 12 9 1 15 3 9 18 0 63 63 51 18 57 47 18 57 51 43 17 0 51 17 18 1 23 57 17 51 51 17 51 49 48 1 1 51 1 21 33 21 33 17 35 17 33 53 33 53 1 51 2 61 1 134 184 254 24 1 43 254 213 172 254 211 1 45 254 25 186 2 219 2 219 252 129 59 152 254 156 1 100 152 51 3 135 0 1 0 0 254 20 4 2 4 72 0 19 0 60 64 31 17 1 1 6 2 16 19 2 4 7 5 20 21 12 11 11 5 15 7 15 0 4 5 4 71 89 17 5 21 2 27 0 63 63 51 43 17 0 51 24 63 51 18 57 17 51 17 18 1 23 57 17 51 51 17 51 49 48 5 17 35 17 33 53 33 1 51 19 22 23 51 54 55 19 51 1 33 21 2 84 166 254 234 1 20 254 84 172 236 83 19 8 33 70 233 172 254 84 1 18 129 254 149 1 107 129 4 72 253 155 222 97 138 181 2 101 251 184 129 0 0 1 0 8 254 131 4 213 5 182 0 15 0 55 64 32 3 2 2 14 15 12 6 9 10 8 8 16 17 12 15 9 6 4 5 13 10 3 8 18 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 63 51 18 23 57 17 18 1 23 57 17 51 49 48 37 51 17 35 17 35 1 1 35 1 1 51 1 1 51 1 4 51 162 162 94 254 119 254 112 180 1 230 254 59 188 1 107 1 110 181 254 59 154 253 233 1 125 2 131 253 125 2 252 2 186 253 189 2 67 253 76 0 1 0 39 254 133 4 55 4 72 0 15 0 57 64 33 10 9 9 5 6 3 13 0 1 15 8 16 17 15 21 3 6 0 13 4 12 1 12 7 70 89 12 21 10 34 4 1 15 0 63 51 63 63 43 17 18 0 23 57 24 63 17 18 1 23 57 17 51 49 48 1 1 51 1 1 51 1 1 51 17 35 17 35 1 1 35 1 184 254 131 189 1 33 1 32 187 254 131 1 43 149 166 69 254 205 254 202 188 2 49 2 23 254 92 1 164 253 233 254 94 253 246 1 123 1 188 254 68 0 0 1 0 16 254 131 6 168 5 182 0 15 0 64 64 34 12 5 0 13 3 2 2 13 10 5 7 5 16 17 14 3 11 7 8 7 73 89 8 3 0 12 5 12 73 89 5 18 3 34 0 63 63 43 17 0 51 24 63 43 17 0 51 24 63 17 18 1 23 57 17 51 17 51 17 51 49 48 37 51 17 35 17 33 17 33 53 33 21 33 17 33 17 51 5 254 170 162 251 180 254 86 4 47 254 37 2 240 170 154 253 233 1 125 5 29 153 153 251 125 5 28 0 1 0 41 254 135 5 152 4 70 0 15 0 63 64 34 2 11 6 3 9 8 8 3 0 11 13 5 16 17 1 13 14 13 70 89 14 15 6 2 11 2 70 89 11 21 9 34 4 15 0 63 63 63 43 17 0 51 24 63 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 33 17 33 17 51 17 51 17 35 17 33 17 33 53 33 3 121 254 151 2 70 166 156 166 252 120 254 191 3 80 3 186 252 213 3 183 252 73 253 248 1 121 3 186 140 0 0 1 0 170 254 131 5 104 5 182 0 23 0 59 64 31 21 0 5 3 2 15 12 2 5 12 3 24 25 18 9 73 89 18 18 5 22 13 3 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 17 51 51 49 48 37 51 17 35 17 35 17 6 6 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 4 199 161 161 170 149 198 106 207 223 170 127 143 97 177 169 170 154 253 233 1 125 2 92 53 39 190 179 2 69 253 207 121 116 29 55 2 202 0 0 1 0 156 254 133 4 195 4 72 0 22 0 59 64 31 1 21 9 6 14 12 11 11 14 21 3 23 24 3 18 70 89 3 3 14 7 22 15 14 9 70 89 14 21 12 34 0 63 63 43 0 24 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 51 17 51 49 48 1 17 20 51 50 54 55 17 51 17 51 17 35 17 35 17 6 6 35 34 38 53 17 1 66 219 91 166 105 166 150 166 150 105 179 113 164 186 4 72 254 112 192 56 67 1 213 252 71 253 246 1 123 1 240 72 59 172 147 1 156 0 1 0 170 0 0 4 199 5 182 0 22 0 74 64 38 5 2 11 21 21 8 22 13 17 17 16 16 22 2 3 23 24 20 0 8 0 73 89 11 8 22 8 9 9 8 22 3 3 17 18 14 3 3 0 63 51 63 18 23 57 47 47 47 17 51 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 51 17 51 17 51 49 48 1 32 17 17 51 17 20 22 51 17 51 17 54 55 17 51 17 35 17 6 7 17 35 2 117 254 53 170 135 154 125 134 163 172 172 168 129 125 2 0 1 113 2 69 253 207 119 118 1 92 254 170 13 60 2 207 250 74 2 88 65 17 254 207 0 1 0 156 0 0 4 29 4 72 0 23 0 74 64 38 1 22 6 16 16 3 17 8 12 12 11 11 17 22 3 24 25 15 19 3 19 70 89 6 3 17 3 4 4 3 17 3 12 9 23 15 12 21 0 63 63 51 18 23 57 47 47 47 17 51 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 51 17 51 17 51 49 48 1 17 20 23 17 51 17 54 55 17 51 17 35 17 6 7 21 35 53 35 34 38 53 17 1 66 200 119 113 133 166 166 128 118 119 22 160 184 4 72 254 112 186 6 1 45 254 221 24 89 1 213 251 184 1 240 91 26 248 234 170 149 1 156 0 1 0 201 0 0 4 229 5 182 0 18 0 47 64 23 2 17 17 18 9 8 8 18 20 19 4 13 73 89 2 18 4 4 9 18 18 0 3 0 63 63 51 57 47 18 57 43 17 18 1 57 57 17 51 17 51 17 51 49 48 19 51 17 36 51 50 22 21 17 35 17 52 38 35 34 6 7 17 35 201 170 1 0 196 207 223 170 127 143 107 186 149 170 5 182 253 164 92 191 177 253 186 2 49 120 118 34 50 253 53 0 0 1 0 176 0 0 4 66 4 72 0 18 0 47 64 23 0 18 11 7 7 8 18 8 20 19 14 3 70 89 11 14 14 8 9 15 0 8 21 0 63 51 63 18 57 47 57 43 17 18 1 57 57 17 51 17 51 17 51 49 48 33 17 52 35 34 6 7 17 35 17 51 17 54 54 51 50 22 21 17 3 154 217 88 156 119 166 166 95 186 114 163 190 1 141 193 49 74 254 45 4 72 254 14 69 62 168 151 254 102 0 2 0 61 255 236 6 63 5 205 0 32 0 39 0 81 64 42 5 3 0 36 17 17 8 30 37 16 16 24 30 0 4 40 41 17 30 7 30 73 89 36 7 2 7 2 27 12 27 20 73 89 27 19 12 33 73 89 12 4 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 51 43 17 0 51 17 18 1 23 57 17 51 17 51 51 17 51 17 51 51 49 48 19 52 55 51 6 21 20 51 51 55 18 0 33 32 0 17 21 33 18 0 51 50 54 55 21 6 6 35 32 0 3 34 38 1 34 2 7 33 16 38 61 27 145 20 113 34 5 29 1 77 1 23 1 41 1 40 251 220 14 1 5 247 101 202 141 114 221 130 254 198 254 163 19 142 155 3 175 209 240 16 3 110 203 3 135 73 54 50 60 103 43 1 42 1 71 254 133 254 143 69 254 248 254 239 31 43 156 39 30 1 100 1 76 118 2 35 254 245 249 1 9 251 0 0 2 0 51 255 236 4 221 4 90 0 31 0 38 0 76 64 40 10 8 5 22 13 36 21 21 29 13 3 5 5 39 40 22 3 12 3 70 89 35 12 7 12 7 0 17 17 32 70 89 17 16 0 25 70 89 0 22 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 51 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 51 49 48 5 34 0 39 36 53 52 55 51 6 21 20 51 51 55 54 54 51 50 18 21 21 33 22 22 51 50 54 55 21 6 6 3 34 6 7 33 52 38 3 74 243 254 236 6 254 246 25 141 20 106 21 6 34 250 183 207 241 253 12 6 172 173 101 159 98 88 157 160 134 151 14 2 61 140 20 1 30 252 4 221 69 50 47 59 103 35 202 224 254 247 226 105 198 195 32 42 148 38 33 3 227 164 158 157 165 0 2 0 61 254 131 6 63 5 205 0 34 0 41 0 93 64 49 11 9 6 38 23 23 14 3 33 34 39 22 22 30 34 3 6 5 42 43 34 34 32 19 23 3 13 3 73 89 38 13 8 13 8 0 18 18 35 73 89 18 4 0 26 74 89 0 19 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 51 43 17 0 51 24 63 63 17 18 1 23 57 17 51 17 51 17 51 51 17 51 17 51 51 49 48 5 36 0 3 34 38 53 52 55 51 6 21 20 51 51 55 18 0 33 32 0 17 21 33 18 0 51 50 54 55 21 6 7 17 35 19 34 2 7 33 16 38 3 160 254 254 254 219 19 142 155 27 145 20 113 34 5 29 1 77 1 23 1 41 1 40 251 220 14 1 5 247 101 202 141 176 235 166 76 209 240 16 3 110 203 12 29 1 90 1 49 118 117 73 54 50 60 103 43 1 42 1 71 254 133 254 143 69 254 248 254 239 31 43 156 62 5 254 149 6 178 254 245 249 1 9 251 0 2 0 51 254 135 4 221 4 90 0 33 0 40 0 88 64 47 10 8 5 22 13 32 33 38 21 21 29 33 13 3 5 6 41 42 33 34 31 22 22 3 12 3 70 89 37 12 7 12 7 0 17 17 34 70 89 17 16 0 25 70 89 0 21 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 51 43 17 0 51 24 63 63 17 18 1 23 57 17 51 17 51 17 51 17 51 51 49 48 5 38 2 39 36 53 52 55 51 6 21 20 51 51 55 54 54 51 50 18 21 21 33 22 22 51 50 54 55 21 6 7 17 35 19 34 6 7 33 52 38 2 213 191 211 6 254 246 25 141 20 106 21 6 34 250 183 207 241 253 12 6 172 173 101 159 98 142 165 166 68 134 151 14 2 61 140 10 31 1 17 224 4 221 69 50 47 59 103 35 202 224 254 247 226 105 198 195 32 42 148 65 4 254 153 5 72 164 158 157 165 0 255 255 0 84 0 0 2 86 5 182 2 6 0 44 0 0 255 255 0 2 0 0 6 188 7 96 2 38 1 176 0 0 1 7 2 54 1 16 1 84 0 8 179 1 18 5 38 0 43 53 255 255 0 4 0 0 5 223 6 12 2 38 1 208 0 0 1 7 2 54 0 164 0 0 0 8 179 1 18 17 38 0 43 53 0 1 0 201 254 0 5 25 5 182 0 28 0 66 64 37 7 3 3 4 26 14 14 9 10 20 4 5 29 30 17 23 73 89 17 28 7 2 73 89 11 0 74 89 7 11 11 4 8 5 3 4 18 0 63 63 51 18 57 47 57 43 43 0 24 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 7 17 35 17 51 17 1 51 1 55 32 0 17 16 0 33 34 38 39 53 22 51 50 18 53 52 36 2 94 140 95 170 170 2 137 205 253 133 26 1 79 1 98 254 217 254 245 82 124 70 122 152 187 200 254 235 2 123 31 253 164 5 182 253 60 2 196 253 84 2 254 187 254 207 254 198 254 164 20 29 152 49 1 13 241 232 253 0 0 1 0 176 254 10 4 33 4 72 0 28 0 66 64 37 4 0 0 1 23 10 16 10 6 7 1 5 29 30 14 20 70 89 14 27 4 28 71 89 7 26 70 89 4 7 7 1 5 2 15 1 21 0 63 63 51 18 57 47 57 43 43 0 24 63 43 17 18 1 23 57 17 51 17 51 17 51 49 48 33 35 17 51 17 1 51 1 4 18 17 20 6 6 35 34 39 53 22 22 51 50 54 53 52 38 35 34 7 1 84 164 164 1 227 183 254 55 1 0 252 110 204 133 136 95 46 108 71 135 152 187 190 82 92 4 72 253 250 2 6 254 30 4 254 228 254 245 177 252 132 60 145 25 38 217 200 211 207 24 0 1 0 0 254 131 5 145 5 182 0 23 0 57 64 31 3 0 5 4 1 1 5 14 3 24 25 22 7 73 89 22 3 12 17 74 89 12 18 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 51 49 48 37 51 3 35 19 35 17 33 7 2 2 6 39 34 39 53 22 51 50 54 54 18 19 33 4 217 184 143 197 156 170 254 37 31 61 93 152 126 74 59 54 59 53 79 61 93 56 3 18 154 253 233 1 125 5 31 240 254 33 254 69 174 2 25 143 26 87 215 2 89 1 184 0 0 1 0 16 254 135 4 143 4 70 0 20 0 57 64 31 3 0 5 4 1 1 5 13 3 21 22 19 7 70 89 19 15 11 16 71 89 11 21 5 0 70 89 5 21 3 34 0 63 63 43 0 24 63 43 0 24 63 43 17 18 1 23 57 17 51 17 51 51 49 48 37 51 3 35 19 35 17 33 2 2 6 35 34 39 53 22 51 50 18 19 33 3 223 176 129 172 125 166 254 181 28 94 152 118 58 28 22 28 113 137 34 2 129 143 253 248 1 121 3 184 254 152 254 100 192 10 127 6 1 217 1 246 0 0 1 0 201 254 0 5 31 5 182 0 21 0 61 64 32 18 14 14 15 19 11 11 0 0 6 15 3 22 23 18 13 73 89 18 18 15 20 16 3 15 18 3 9 73 89 3 28 0 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 37 16 0 33 34 38 39 53 22 51 32 17 17 33 17 35 17 51 17 33 17 51 5 31 254 230 254 251 82 122 77 123 135 1 140 252 254 170 170 3 2 170 150 254 194 254 168 19 30 150 49 1 247 2 35 253 80 5 182 253 146 2 110 0 1 0 176 254 10 4 98 4 72 0 21 0 71 64 39 15 11 11 12 16 8 8 19 19 2 12 3 22 23 15 10 70 89 15 15 31 15 2 11 3 15 15 12 17 13 15 12 21 0 5 70 89 0 27 0 63 43 0 24 63 63 51 18 57 47 95 94 93 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 34 39 53 22 51 50 54 53 17 33 17 35 17 51 17 33 17 51 17 16 2 2 211 132 93 111 102 125 118 253 156 166 166 2 100 168 207 254 10 58 149 61 198 207 1 189 254 18 4 72 254 53 1 203 251 235 254 244 254 227 0 1 0 201 254 131 5 215 5 182 0 15 0 68 64 36 12 8 8 9 13 3 0 5 4 1 1 5 9 3 16 17 12 7 73 89 12 12 5 14 10 3 9 18 5 0 73 89 5 18 3 34 0 63 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 51 51 17 51 17 51 49 48 37 51 3 35 19 35 17 33 17 35 17 51 17 33 17 51 5 31 184 145 197 158 170 252 254 170 170 3 2 170 154 253 233 1 125 2 176 253 80 5 182 253 146 2 110 0 0 1 0 176 254 135 5 18 4 70 0 15 0 68 64 36 1 13 13 14 8 5 2 10 9 6 6 10 14 3 16 17 1 12 70 89 1 1 10 3 15 15 14 21 10 5 70 89 10 21 8 34 0 63 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 51 51 17 51 17 51 49 48 1 17 33 17 51 17 51 3 35 19 35 17 33 17 35 17 1 86 2 102 166 176 129 172 125 166 253 154 166 4 70 254 55 1 201 252 73 253 248 1 121 1 238 254 18 4 70 0 0 1 0 170 254 131 4 199 5 182 0 23 0 61 64 32 15 12 2 3 21 5 5 0 0 3 12 3 24 25 18 9 73 89 18 18 1 22 13 3 3 34 1 4 73 89 1 18 0 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 33 35 17 35 17 51 17 6 6 35 34 38 53 17 51 17 20 22 51 50 54 55 17 51 4 199 170 162 162 149 198 106 207 223 170 127 143 97 177 169 170 254 131 2 23 1 194 53 39 190 179 2 69 253 207 121 116 29 55 2 202 0 1 0 156 254 133 4 45 4 72 0 22 0 61 64 32 1 21 11 12 6 14 14 9 9 12 21 3 23 24 3 18 70 89 3 3 10 7 22 15 12 34 10 13 70 89 10 21 0 63 43 0 24 63 63 51 18 57 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 49 48 1 17 20 51 50 54 55 17 51 17 35 17 35 17 51 17 6 6 35 34 38 53 17 1 66 219 91 166 105 166 149 166 149 105 179 113 164 186 4 72 254 112 192 56 67 1 213 251 184 254 133 2 10 1 97 72 59 172 147 1 156 0 1 0 201 254 131 7 41 5 182 0 24 0 72 64 37 9 6 6 7 17 14 12 19 18 15 15 19 7 3 25 26 23 22 2 11 2 19 8 19 14 73 89 19 18 17 34 12 8 3 0 7 18 0 63 51 63 51 63 63 43 17 18 0 57 57 17 51 51 17 18 1 23 57 17 51 17 51 51 51 17 51 17 51 49 48 33 1 35 23 22 21 17 35 17 33 1 51 1 51 17 51 3 35 19 35 17 52 55 35 1 3 80 254 16 8 7 7 157 1 0 1 209 8 1 209 254 184 143 199 158 170 14 8 254 12 5 16 127 192 47 252 94 5 182 251 74 4 182 250 228 253 233 1 125 3 174 132 220 250 242 0 0 1 0 176 254 135 5 223 4 70 0 24 0 63 64 32 19 20 8 5 10 9 6 6 10 20 3 25 26 11 18 0 18 15 3 21 15 20 21 10 5 70 89 10 15 21 8 34 0 63 63 51 43 0 24 63 63 51 18 57 57 17 51 17 18 1 23 57 17 51 17 51 51 17 51 49 48 37 55 55 1 51 17 51 3 35 19 35 17 7 7 1 35 1 38 39 17 35 17 51 1 22 2 233 31 43 1 41 211 176 129 172 125 147 20 58 254 229 139 254 229 53 20 148 203 1 41 45 160 93 118 2 211 252 73 253 248 1 121 3 137 58 153 253 74 2 184 134 75 252 119 4 70 253 45 110 255 255 0 84 0 0 2 86 5 182 2 6 0 44 0 0 255 255 0 0 0 0 5 16 7 94 2 38 0 36 0 0 1 7 2 54 0 57 1 82 0 8 179 2 15 5 38 0 43 53 255 255 0 94 255 236 3 205 6 12 2 38 0 68 0 0 1 6 2 54 232 0 0 8 179 2 37 17 38 0 43 53 255 255 0 0 0 0 5 16 7 37 2 38 0 36 0 0 1 7 0 106 0 61 1 82 0 10 180 3 2 36 5 38 0 43 53 53 255 255 0 94 255 236 3 205 5 211 2 38 0 68 0 0 1 6 0 106 243 0 0 10 180 3 2 58 17 38 0 43 53 53 255 255 255 254 0 0 6 129 5 182 2 6 0 136 0 0 255 255 0 94 255 236 6 115 4 92 2 6 0 168 0 0 255 255 0 201 0 0 3 248 7 94 2 38 0 40 0 0 1 7 2 54 0 16 1 82 0 8 179 1 12 5 38 0 43 53 255 255 0 115 255 236 4 18 6 12 2 38 0 72 0 0 1 6 2 54 12 0 0 8 179 2 27 17 38 0 43 53 0 2 0 117 255 236 5 88 5 205 0 18 0 25 0 61 64 32 23 14 16 22 22 9 9 2 14 3 26 27 15 23 73 89 15 15 12 6 12 19 73 89 12 19 6 0 73 89 6 4 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 34 7 53 54 54 51 32 0 17 16 0 33 32 17 53 33 2 0 3 50 18 55 33 16 22 2 152 227 226 115 210 134 1 75 1 111 254 166 254 203 253 172 4 47 17 254 249 195 210 249 16 252 135 204 5 53 76 158 38 32 254 113 254 155 254 162 254 113 2 235 70 1 10 1 14 251 78 1 13 247 254 248 252 0 0 2 0 102 255 236 4 6 4 92 0 20 0 27 0 59 64 31 25 9 24 11 3 3 17 9 3 28 29 10 25 70 89 10 10 6 0 6 21 70 89 6 22 0 14 70 89 0 16 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 51 17 51 49 48 1 50 0 17 16 0 35 34 2 53 53 33 38 38 35 34 6 7 53 54 54 19 50 54 55 33 20 22 1 250 245 1 23 254 253 218 208 243 2 244 5 179 166 98 165 95 89 162 154 133 154 12 253 195 141 4 92 254 212 254 251 254 248 254 201 1 12 225 105 204 187 33 41 147 40 34 252 27 165 156 157 164 0 255 255 0 117 255 236 5 88 7 37 2 38 2 225 0 0 1 7 0 106 0 147 1 82 0 10 180 3 2 47 5 38 0 43 53 53 255 255 0 102 255 236 4 6 5 211 2 38 2 226 0 0 1 6 0 106 234 0 0 10 180 3 2 49 17 38 0 43 53 53 255 255 0 2 0 0 6 188 7 37 2 38 1 176 0 0 1 7 0 106 1 16 1 82 0 10 180 2 1 39 5 38 0 43 53 53 255 255 0 4 0 0 5 223 5 211 2 38 1 208 0 0 1 7 0 106 0 162 0 0 0 10 180 2 1 39 17 38 0 43 53 53 255 255 0 74 255 236 4 53 7 37 2 38 1 177 0 0 1 7 0 106 255 243 1 82 0 10 180 2 1 62 5 38 0 43 53 53 255 255 0 68 255 236 3 127 5 211 2 38 1 209 0 0 1 6 0 106 148 0 0 10 180 2 1 56 17 38 0 43 53 53 0 1 0 74 255 236 4 55 5 182 0 25 0 64 64 35 0 19 21 25 15 3 3 25 19 22 8 5 26 27 25 22 23 22 73 89 0 18 74 89 0 0 6 23 3 6 12 74 89 6 19 0 63 43 0 24 63 18 57 47 43 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 4 4 21 20 4 33 32 39 53 22 22 51 50 54 53 52 38 35 35 53 1 33 53 33 21 1 252 1 23 1 36 254 205 254 234 254 255 163 96 222 106 199 202 225 223 140 1 238 253 78 3 135 3 63 9 211 193 206 232 79 158 46 50 153 144 134 138 141 1 222 153 139 0 0 1 0 27 254 20 3 166 4 72 0 25 0 64 64 35 0 19 21 25 15 4 4 25 19 22 9 5 26 27 25 22 23 22 70 89 0 18 71 89 0 0 7 23 15 7 12 70 89 7 27 0 63 43 0 24 63 18 57 47 43 43 17 0 51 17 18 1 23 57 17 51 17 51 17 51 49 48 1 30 2 21 20 0 35 34 39 53 22 51 50 54 53 52 38 35 35 53 1 33 53 33 21 1 172 149 230 127 254 216 239 234 138 183 200 161 197 214 202 121 1 197 253 137 3 56 1 207 7 114 202 136 222 254 238 70 154 86 190 160 164 170 114 1 254 142 123 0 255 255 0 203 0 0 5 82 6 180 2 38 1 178 0 0 1 7 1 77 0 180 1 82 0 8 179 1 19 5 38 0 43 53 255 255 0 176 0 0 4 98 5 98 2 38 1 210 0 0 1 6 1 77 49 0 0 8 179 1 17 17 38 0 43 53 255 255 0 203 0 0 5 82 7 37 2 38 1 178 0 0 1 7 0 106 0 190 1 82 0 10 180 2 1 37 5 38 0 43 53 53 255 255 0 176 0 0 4 98 5 211 2 38 1 210 0 0 1 6 0 106 61 0 0 10 180 2 1 35 17 38 0 43 53 53 255 255 0 125 255 236 5 190 7 37 2 38 0 50 0 0 1 7 0 106 0 209 1 82 0 10 180 3 2 45 5 38 0 43 53 53 255 255 0 115 255 236 4 98 5 211 2 38 0 82 0 0 1 6 0 106 29 0 0 10 180 3 2 46 17 38 0 43 53 53 255 255 0 125 255 236 5 190 5 205 2 6 2 126 0 0 255 255 0 115 255 236 4 98 4 92 2 6 2 127 0 0 255 255 0 125 255 236 5 190 7 37 2 38 2 126 0 0 1 7 0 106 0 209 1 82 0 10 180 4 3 47 5 38 0 43 53 53 255 255 0 115 255 236 4 98 5 211 2 38 2 127 0 0 1 6 0 106 27 0 0 10 180 4 3 48 17 38 0 43 53 53 255 255 0 61 255 236 4 137 7 37 2 38 1 199 0 0 1 7 0 106 255 237 1 82 0 10 180 2 1 48 5 38 0 43 53 53 255 255 0 57 255 236 3 125 5 211 2 38 1 231 0 0 1 6 0 106 142 0 0 10 180 2 1 48 17 38 0 43 53 53 255 255 0 27 255 236 4 248 6 180 2 38 1 189 0 0 1 7 1 77 0 47 1 82 0 8 179 1 26 5 38 0 43 53 255 255 0 2 254 20 4 6 5 98 2 38 0 92 0 0 1 6 1 77 173 0 0 8 179 1 25 17 38 0 43 53 255 255 0 27 255 236 4 248 7 37 2 38 1 189 0 0 1 7 0 106 0 59 1 82 0 10 180 2 1 44 5 38 0 43 53 53 255 255 0 2 254 20 4 6 5 211 2 38 0 92 0 0 1 6 0 106 183 0 0 10 180 2 1 43 17 38 0 43 53 53 255 255 0 27 255 236 4 248 7 115 2 38 1 189 0 0 1 7 1 83 0 141 1 82 0 10 180 2 1 42 5 38 0 43 53 53 255 255 0 2 254 20 4 6 6 33 2 38 0 92 0 0 1 6 1 83 4 0 0 10 180 2 1 41 17 38 0 43 53 53 255 255 0 170 0 0 4 199 7 37 2 38 1 193 0 0 1 7 0 106 0 106 1 82 0 10 180 2 1 41 5 38 0 43 53 53 255 255 0 156 0 0 4 45 5 211 2 38 1 225 0 0 1 6 0 106 23 0 0 10 180 2 1 40 17 38 0 43 53 53 0 1 0 201 254 131 4 8 5 182 0 9 0 45 64 24 4 9 6 7 1 7 9 3 10 11 9 4 73 89 9 18 7 34 0 3 73 89 0 3 0 63 43 0 24 63 63 43 17 18 1 23 57 17 51 17 51 49 48 19 33 21 33 17 51 17 35 17 35 201 3 63 253 107 161 161 170 5 182 153 251 125 253 233 1 125 0 1 0 176 254 135 3 66 4 70 0 9 0 45 64 24 4 9 6 7 1 7 9 3 10 11 9 4 70 89 9 21 7 34 0 3 70 89 0 15 0 63 43 0 24 63 63 43 17 18 1 23 57 17 51 17 51 49 48 19 33 21 33 17 51 17 35 17 35 176 2 146 254 20 150 166 150 4 70 140 252 213 253 248 1 121 255 255 0 201 0 0 6 10 7 37 2 38 1 197 0 0 1 7 0 106 1 27 1 82 0 10 180 4 3 45 5 38 0 43 53 53 255 255 0 176 0 0 5 121 5 211 2 38 1 229 0 0 1 7 0 106 0 197 0 0 0 10 180 4 3 44 17 38 0 43 53 53 255 255 0 47 254 117 4 8 5 182 2 38 2 155 0 0 0 7 3 128 0 147 0 0 255 255 0 18 254 117 3 66 4 72 2 38 2 156 0 0 0 6 3 129 117 0 255 255 0 8 254 117 4 201 5 182 0 38 0 59 0 0 0 7 3 128 3 88 0 0 255 255 0 39 254 117 4 52 4 72 0 38 0 91 0 0 0 7 3 129 2 195 0 0 0 1 0 6 0 0 4 150 5 182 0 17 0 59 64 34 15 2 17 1 16 13 4 10 7 9 6 11 12 19 18 10 17 0 17 73 89 7 13 15 4 0 0 2 12 15 18 5 2 3 0 63 51 63 51 18 57 47 57 18 57 51 43 17 0 51 17 18 1 23 57 49 48 19 33 1 51 1 1 51 1 33 21 33 1 35 1 1 35 1 33 127 1 51 254 119 188 1 107 1 108 183 254 112 1 60 254 186 1 189 193 254 119 254 112 182 1 191 254 186 3 84 2 98 253 187 2 69 253 158 152 253 68 2 131 253 125 2 188 0 0 1 0 39 0 0 4 8 4 72 0 17 0 59 64 34 15 2 17 1 16 13 4 10 7 9 6 11 12 19 18 10 17 0 17 71 89 7 13 15 4 0 0 2 12 15 21 5 2 15 0 63 51 63 51 18 57 47 57 18 57 51 43 17 0 51 17 18 1 23 57 49 48 19 33 1 51 1 1 51 1 33 21 33 1 35 1 1 35 1 33 117 1 18 254 180 189 1 33 1 32 187 254 178 1 24 254 226 1 104 188 254 205 254 202 188 1 102 254 232 2 119 1 209 254 92 1 164 254 47 129 254 10 1 188 254 68 1 246 0 0 2 0 131 0 0 4 55 5 182 0 10 0 19 0 52 64 26 4 19 19 7 15 0 7 0 21 20 3 12 73 89 3 3 8 5 8 18 74 89 8 18 5 3 0 63 63 43 17 18 0 57 24 47 43 17 18 1 57 57 17 51 17 51 17 51 49 48 19 52 36 33 51 17 51 17 33 32 36 1 35 34 6 21 20 22 51 51 131 1 36 1 32 198 170 254 99 254 245 254 244 3 10 186 222 194 182 203 217 1 164 212 206 2 112 250 74 213 1 219 124 142 143 132 255 255 0 115 255 236 4 55 6 20 2 6 0 71 0 0 0 2 0 131 255 236 6 119 5 182 0 25 0 35 0 70 64 36 30 3 24 10 10 7 35 15 18 18 35 3 3 36 37 6 27 73 89 24 6 16 6 16 0 8 3 12 32 0 32 74 89 21 0 19 0 63 50 43 17 0 51 24 63 18 57 57 47 47 57 43 17 18 1 23 57 17 51 17 51 51 18 57 17 51 49 48 5 34 38 53 52 36 33 51 17 51 17 20 51 50 54 53 17 51 17 20 6 35 34 38 39 6 19 35 34 6 21 16 33 50 54 53 2 78 226 233 1 42 1 34 145 170 230 100 121 170 207 184 118 159 51 113 41 151 212 194 1 33 127 141 18 209 208 217 222 2 112 251 183 236 123 110 1 230 254 24 174 206 82 90 170 2 192 139 150 254 244 119 112 0 0 2 0 115 255 236 6 135 6 20 0 34 0 46 0 81 64 41 44 19 12 32 32 29 26 38 3 6 6 38 19 3 47 48 30 0 13 16 26 22 4 4 16 22 22 42 70 89 22 16 0 35 16 35 70 89 9 16 22 0 63 51 43 17 0 51 24 63 43 17 18 0 57 24 47 18 57 18 57 63 17 18 1 23 57 17 51 17 51 51 51 18 57 17 51 49 48 37 50 54 53 17 51 17 20 6 35 34 38 39 35 6 6 35 34 2 17 16 18 51 50 22 23 51 38 38 53 17 51 17 20 22 33 50 54 53 53 52 38 35 32 17 20 22 4 254 118 107 168 200 189 129 158 43 8 75 185 129 208 232 231 207 106 159 63 12 2 8 166 109 253 185 162 146 148 162 254 226 139 119 132 136 1 57 254 189 200 197 91 113 113 91 1 41 1 12 1 12 1 47 77 85 17 112 27 1 190 251 140 160 137 185 206 35 231 201 254 78 214 210 0 1 0 78 255 236 6 129 5 203 0 42 0 75 64 40 6 19 40 25 31 34 34 22 25 19 1 13 6 43 44 23 2 1 2 1 74 89 2 32 2 32 37 16 37 28 73 89 37 19 16 9 74 89 16 4 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 21 20 6 7 21 4 19 22 22 51 50 54 53 17 51 17 20 6 35 34 38 39 38 38 1 174 201 193 192 213 154 128 103 177 103 84 93 246 130 214 245 178 156 1 98 6 2 108 124 119 112 168 210 189 202 208 2 2 205 2 172 143 147 132 108 127 55 69 114 72 80 196 167 141 183 26 8 51 254 209 150 127 121 135 1 205 254 41 198 199 209 200 150 145 0 1 0 80 255 236 5 197 4 92 0 37 0 75 64 40 18 30 10 36 2 5 5 36 30 32 14 24 6 38 39 33 15 14 15 14 70 89 15 3 15 3 8 27 27 20 70 89 27 16 8 0 70 89 8 22 0 63 43 0 24 63 43 17 18 0 57 57 24 47 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 37 50 17 17 51 17 20 6 35 32 3 38 38 35 35 53 51 32 53 52 35 34 6 7 39 54 54 51 50 22 21 20 7 21 22 22 23 22 4 66 221 166 187 196 254 134 16 5 141 148 140 111 1 33 242 75 135 77 57 85 163 104 184 211 192 99 123 5 9 119 1 12 1 57 254 189 202 195 1 77 99 88 141 172 162 36 34 135 40 36 155 134 184 57 8 20 122 106 211 0 1 0 78 254 131 4 209 5 203 0 35 0 74 64 40 25 26 30 35 33 32 32 22 26 35 4 16 6 36 37 26 5 4 5 4 74 89 5 5 35 19 35 30 73 89 35 18 33 34 19 12 74 89 19 4 0 63 43 0 24 63 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 52 38 35 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 21 20 6 7 21 22 22 21 17 51 17 35 17 35 3 131 229 226 217 209 205 225 164 135 105 195 105 84 97 254 132 220 253 189 163 184 195 172 162 172 1 156 133 139 143 147 132 107 128 58 66 114 74 78 196 167 140 183 25 8 25 179 148 254 254 253 233 1 125 0 0 1 0 80 254 135 4 16 4 90 0 30 0 74 64 40 7 18 25 30 28 27 27 21 30 18 3 13 6 32 31 21 4 3 4 3 70 89 4 4 30 15 30 25 70 89 30 21 28 34 15 10 70 89 15 16 0 63 43 0 24 63 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 52 33 35 53 51 32 53 52 38 35 34 7 39 54 51 50 22 21 20 7 21 22 22 21 21 51 17 35 17 35 2 213 254 203 150 117 1 57 133 119 153 150 61 161 203 191 213 203 126 112 157 166 149 1 45 199 141 172 82 80 70 135 74 154 135 182 57 11 37 137 102 156 253 248 1 121 0 0 1 0 0 255 233 7 33 5 182 0 35 0 58 64 29 20 35 26 29 29 35 9 3 36 37 27 27 7 18 18 1 73 89 18 3 23 12 7 12 74 89 32 7 19 0 63 51 43 17 0 51 24 63 43 17 18 0 57 24 47 17 18 1 23 57 17 51 17 51 49 48 1 33 7 2 2 6 6 35 34 39 53 22 51 50 54 54 18 18 19 33 17 20 22 51 50 54 53 17 51 17 20 6 35 34 38 53 4 12 254 72 31 43 76 83 130 100 69 64 50 63 49 64 44 56 74 55 2 239 111 115 112 113 168 205 188 196 200 5 31 240 254 174 254 68 210 102 25 143 26 62 104 1 2 1 233 1 174 251 207 137 121 121 135 1 205 254 41 193 204 204 197 0 0 1 0 16 255 236 6 41 4 70 0 29 0 58 64 29 0 14 5 8 8 14 22 3 31 30 6 6 20 28 28 16 70 89 28 15 3 25 20 25 71 89 11 20 22 0 63 51 43 17 0 51 24 63 43 17 18 0 57 24 47 17 18 1 23 57 17 51 17 51 49 48 1 20 22 51 50 17 17 51 17 20 6 35 34 38 53 17 33 2 2 6 35 34 39 53 22 51 50 18 19 33 3 207 104 119 213 166 187 190 188 203 254 197 28 94 152 118 58 28 22 28 113 137 34 2 113 1 131 137 131 1 10 1 59 254 189 202 195 196 203 2 61 254 152 254 100 192 10 127 6 1 217 1 246 0 0 1 0 201 255 236 7 94 5 182 0 25 0 67 64 35 23 0 15 6 9 22 18 18 19 9 15 19 3 26 27 22 17 73 89 22 7 22 7 19 24 20 3 19 18 12 3 73 89 12 19 0 63 43 0 24 63 63 51 18 57 57 47 47 43 17 18 1 23 57 17 51 17 51 17 51 17 51 51 49 48 1 20 22 51 50 54 53 17 51 17 20 6 35 34 38 53 17 33 17 35 17 51 17 33 17 51 4 246 110 115 112 113 166 200 191 195 200 253 39 170 170 2 217 170 1 133 137 121 121 135 1 205 254 41 191 206 203 198 1 51 253 80 5 182 253 146 2 110 0 0 1 0 176 255 236 6 168 4 72 0 24 0 77 64 42 5 2 19 10 13 1 22 22 23 13 19 23 3 25 26 1 21 70 89 15 1 31 1 2 11 3 1 11 1 11 23 3 24 15 23 21 16 8 70 89 16 22 0 63 43 0 24 63 63 51 18 57 57 47 47 95 94 93 43 17 18 1 23 57 17 51 17 51 17 51 17 51 51 49 48 1 17 33 17 51 17 20 22 51 50 17 17 51 17 20 6 35 34 38 53 53 33 17 35 17 1 86 2 80 166 106 119 213 166 187 192 186 205 253 176 166 4 72 254 53 1 203 253 61 137 133 1 12 1 57 254 189 202 195 198 201 115 254 18 4 72 0 0 1 0 125 255 236 5 154 5 203 0 28 0 58 64 31 22 8 27 2 2 15 28 8 4 29 30 0 28 73 89 0 0 5 12 12 19 73 89 12 4 5 25 73 89 5 19 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 33 21 16 0 33 32 0 17 52 18 36 51 50 22 23 7 38 38 35 32 0 17 16 0 51 32 17 33 3 102 2 52 254 204 254 201 254 187 254 147 179 1 85 234 120 237 83 66 90 214 87 254 245 254 222 1 11 247 1 180 254 127 2 240 86 254 161 254 177 1 145 1 96 229 1 84 181 49 39 148 38 46 254 197 254 227 254 227 254 195 1 215 0 0 1 0 115 255 236 4 176 4 92 0 25 0 58 64 31 18 7 24 2 2 12 25 7 4 26 27 0 25 70 89 0 0 4 10 10 15 70 89 10 16 4 21 70 89 4 22 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 33 21 16 33 32 0 17 16 0 33 50 23 7 38 35 34 6 21 20 22 51 50 54 53 33 2 178 1 254 253 254 254 238 254 215 1 67 1 33 212 175 59 168 166 205 229 204 197 169 175 254 170 2 63 67 253 240 1 39 1 16 1 14 1 43 80 131 74 222 210 207 223 160 157 0 0 1 0 16 255 236 4 244 5 182 0 20 0 57 64 29 5 19 10 13 13 3 19 0 4 21 22 11 11 16 1 16 8 73 89 16 19 4 0 1 0 73 89 1 3 0 63 43 17 0 51 24 63 43 17 18 0 57 24 47 17 18 1 23 57 17 51 17 51 49 48 19 53 33 21 33 17 20 22 51 50 17 17 51 17 20 6 35 34 38 53 17 16 4 60 254 47 119 114 232 168 211 189 198 205 5 29 153 153 252 104 137 123 1 0 1 207 254 41 192 205 206 195 3 160 0 0 1 0 41 255 236 4 135 4 70 0 20 0 54 64 28 2 16 7 10 10 0 16 18 4 21 22 1 18 19 18 70 89 8 8 13 19 15 13 5 70 89 13 22 0 63 43 0 24 63 18 57 47 43 17 0 51 17 18 1 23 57 17 51 17 51 49 48 1 33 17 20 22 51 50 17 17 51 17 20 6 35 34 38 53 17 33 53 33 3 129 254 166 109 118 215 166 189 192 192 201 254 168 3 88 3 186 253 201 137 131 1 4 1 65 254 189 202 195 203 196 2 63 140 0 1 0 111 255 236 4 88 5 203 0 38 0 71 64 38 21 32 12 0 36 35 5 27 17 35 0 32 6 39 40 35 15 18 15 18 74 89 15 15 29 3 29 24 74 89 29 19 3 9 74 89 3 4 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 19 52 36 51 32 23 7 38 38 35 34 6 21 20 22 51 51 21 35 34 6 21 20 22 51 50 55 21 6 33 32 36 53 52 54 55 53 38 38 156 1 8 225 1 2 209 94 105 181 101 140 159 209 200 217 213 222 232 202 183 233 199 175 254 251 254 244 254 219 207 188 170 180 4 92 169 198 144 120 68 52 123 114 128 147 141 142 138 142 141 92 158 77 220 197 151 192 22 8 25 178 255 255 0 90 255 236 3 135 4 92 2 6 1 130 0 0 255 255 0 0 254 117 5 107 5 182 0 38 1 181 0 0 0 7 3 128 3 250 0 0 255 255 0 16 254 117 4 115 4 72 2 38 1 213 0 0 0 7 3 129 3 2 0 0 255 255 0 0 254 160 5 16 5 188 2 38 0 36 0 0 0 7 2 103 4 233 0 0 255 255 0 94 254 160 3 205 4 90 2 38 0 68 0 0 0 7 2 103 4 121 0 0 255 255 0 0 0 0 5 16 7 225 2 38 0 36 0 0 1 7 2 102 4 252 1 82 0 8 179 2 19 5 38 0 43 53 255 255 0 94 255 236 3 205 6 143 2 38 0 68 0 0 1 7 2 102 4 166 0 0 0 8 179 2 41 17 38 0 43 53 255 255 0 0 0 0 5 16 7 209 2 38 0 36 0 0 1 7 3 119 4 229 1 82 0 10 180 3 2 21 5 38 0 43 53 53 255 255 0 94 255 236 4 65 6 127 2 38 0 68 0 0 1 7 3 119 4 147 0 0 0 10 180 3 2 43 17 38 0 43 53 53 255 255 0 0 0 0 5 16 7 209 2 38 0 36 0 0 1 7 3 120 4 221 1 82 0 10 180 3 2 21 5 38 0 43 53 53 255 255 0 45 255 236 3 205 6 127 2 38 0 68 0 0 1 7 3 120 4 147 0 0 0 10 180 3 2 43 17 38 0 43 53 53 255 255 0 0 0 0 5 16 8 74 2 38 0 36 0 0 1 7 3 121 4 217 1 82 0 10 180 3 2 21 5 38 0 43 53 53 255 255 0 94 255 236 4 23 6 248 2 38 0 68 0 0 1 7 3 121 4 156 0 0 0 10 180 3 2 43 17 38 0 43 53 53 255 255 0 0 0 0 5 16 8 98 2 38 0 36 0 0 1 7 3 122 4 229 1 82 0 10 180 3 2 45 5 38 0 43 53 53 255 255 0 94 255 236 3 205 7 16 2 38 0 68 0 0 1 7 3 122 4 145 0 0 0 10 180 3 2 67 17 38 0 43 53 53 255 255 0 0 254 160 5 16 7 115 2 38 0 36 0 0 0 39 2 103 4 233 0 0 1 7 1 75 0 43 1 82 0 8 179 3 41 5 38 0 43 53 255 255 0 94 254 160 3 205 6 33 2 38 0 68 0 0 0 39 2 103 4 121 0 0 1 6 1 75 212 0 0 8 179 3 62 17 38 0 43 53 255 255 0 0 0 0 5 16 8 19 2 38 0 36 0 0 1 7 3 123 4 236 1 82 0 10 180 3 2 23 5 38 0 43 53 53 255 255 0 94 255 236 3 205 6 193 2 38 0 68 0 0 1 7 3 123 4 154 0 0 0 10 180 3 2 45 17 38 0 43 53 53 255 255 0 0 0 0 5 16 8 19 2 38 0 36 0 0 1 7 3 124 4 233 1 82 0 10 180 3 2 23 5 38 0 43 53 53 255 255 0 94 255 236 3 205 6 193 2 38 0 68 0 0 1 7 3 124 4 152 0 0 0 10 180 3 2 45 17 38 0 43 53 53 255 255 0 0 0 0 5 16 8 88 2 38 0 36 0 0 1 7 3 125 4 233 1 82 0 10 180 3 2 33 5 38 0 43 53 53 255 255 0 94 255 236 3 205 7 6 2 38 0 68 0 0 1 7 3 125 4 160 0 0 0 10 180 3 2 55 17 38 0 43 53 53 255 255 0 0 0 0 5 16 8 94 2 38 0 36 0 0 1 7 3 126 4 227 1 82 0 10 180 3 2 39 5 38 0 43 53 53 255 255 0 94 255 236 3 205 7 12 2 38 0 68 0 0 1 7 3 126 4 152 0 0 0 10 180 3 2 61 17 38 0 43 53 53 255 255 0 0 254 160 5 16 7 73 2 38 0 36 0 0 0 39 1 78 0 45 1 100 1 7 2 103 4 233 0 0 0 8 179 2 15 5 38 0 43 53 255 255 0 94 254 160 3 205 5 229 2 38 0 68 0 0 0 38 1 78 216 0 1 7 2 103 4 121 0 0 0 8 179 2 37 17 38 0 43 53 255 255 0 201 254 160 3 248 5 182 2 38 0 40 0 0 0 7 2 103 4 193 0 0 255 255 0 115 254 160 4 18 4 92 2 38 0 72 0 0 0 7 2 103 4 184 0 0 255 255 0 201 0 0 3 248 7 225 2 38 0 40 0 0 1 7 2 102 4 209 1 82 0 8 179 1 16 5 38 0 43 53 255 255 0 115 255 236 4 18 6 143 2 38 0 72 0 0 1 7 2 102 4 201 0 0 0 8 179 2 31 17 38 0 43 53 255 255 0 201 0 0 3 248 7 47 2 38 0 40 0 0 1 7 1 82 255 228 1 82 0 8 179 1 21 5 38 0 43 53 255 255 0 115 255 236 4 18 5 221 2 38 0 72 0 0 1 6 1 82 208 0 0 8 179 2 36 17 38 0 43 53 255 255 0 201 0 0 4 111 7 209 2 38 0 40 0 0 1 7 3 119 4 193 1 82 0 10 180 2 1 18 5 38 0 43 53 53 255 255 0 115 255 236 4 92 6 127 2 38 0 72 0 0 1 7 3 119 4 174 0 0 0 10 180 3 2 33 17 38 0 43 53 53 255 255 0 93 0 0 3 248 7 209 2 38 0 40 0 0 1 7 3 120 4 195 1 82 0 10 180 2 1 18 5 38 0 43 53 53 255 255 0 74 255 236 4 18 6 127 2 38 0 72 0 0 1 7 3 120 4 176 0 0 0 10 180 3 2 33 17 38 0 43 53 53 255 255 0 201 0 0 4 57 8 74 2 38 0 40 0 0 1 7 3 121 4 190 1 82 0 10 180 2 1 18 5 38 0 43 53 53 255 255 0 115 255 236 4 29 6 248 2 38 0 72 0 0 1 7 3 121 4 162 0 0 0 10 180 3 2 33 17 38 0 43 53 53 255 255 0 201 0 0 3 248 8 98 2 38 0 40 0 0 1 7 3 122 4 184 1 82 0 10 180 2 1 42 5 38 0 43 53 53 255 255 0 115 255 236 4 18 7 16 2 38 0 72 0 0 1 7 3 122 4 162 0 0 0 10 180 3 2 57 17 38 0 43 53 53 255 255 0 201 254 160 3 248 7 115 2 38 0 40 0 0 0 39 2 103 4 190 0 0 1 7 1 75 0 2 1 82 0 8 179 2 37 5 38 0 43 53 255 255 0 115 254 160 4 18 6 33 2 38 0 72 0 0 0 39 2 103 4 176 0 0 1 6 1 75 241 0 0 8 179 3 52 17 38 0 43 53 255 255 0 84 0 0 2 86 7 225 2 38 0 44 0 0 1 7 2 102 3 201 1 82 0 8 179 1 16 5 38 0 43 53 255 255 0 123 0 0 1 230 6 143 2 38 0 243 0 0 1 7 2 102 3 115 0 0 0 8 179 1 8 17 38 0 43 53 255 255 0 84 254 160 2 86 5 182 2 38 0 44 0 0 0 7 2 103 3 180 0 0 255 255 0 157 254 160 1 102 5 223 2 38 0 76 0 0 0 7 2 103 3 98 0 0 255 255 0 125 254 160 5 190 5 205 2 38 0 50 0 0 0 7 2 103 5 127 0 0 255 255 0 115 254 160 4 98 4 92 2 38 0 82 0 0 0 7 2 103 4 201 0 0 255 255 0 125 255 236 5 190 7 225 2 38 0 50 0 0 1 7 2 102 5 143 1 82 0 8 179 2 28 5 38 0 43 53 255 255 0 115 255 236 4 98 6 143 2 38 0 82 0 0 1 7 2 102 4 217 0 0 0 8 179 2 29 17 38 0 43 53 255 255 0 125 255 236 5 190 7 209 2 38 0 50 0 0 1 7 3 119 5 125 1 82 0 10 180 3 2 30 5 38 0 43 53 53 255 255 0 115 255 236 4 117 6 127 2 38 0 82 0 0 1 7 3 119 4 199 0 0 0 10 180 3 2 31 17 38 0 43 53 53 255 255 0 125 255 236 5 190 7 209 2 38 0 50 0 0 1 7 3 120 5 125 1 82 0 10 180 3 2 30 5 38 0 43 53 53 255 255 0 97 255 236 4 98 6 127 2 38 0 82 0 0 1 7 3 120 4 199 0 0 0 10 180 3 2 31 17 38 0 43 53 53 255 255 0 125 255 236 5 190 8 74 2 38 0 50 0 0 1 7 3 121 5 123 1 82 0 10 180 3 2 30 5 38 0 43 53 53 255 255 0 115 255 236 4 98 6 248 2 38 0 82 0 0 1 7 3 121 4 199 0 0 0 10 180 3 2 31 17 38 0 43 53 53 255 255 0 125 255 236 5 190 8 98 2 38 0 50 0 0 1 7 3 122 5 121 1 82 0 10 180 3 2 54 5 38 0 43 53 53 255 255 0 115 255 236 4 98 7 16 2 38 0 82 0 0 1 7 3 122 4 197 0 0 0 10 180 3 2 55 17 38 0 43 53 53 255 255 0 125 254 160 5 190 7 115 2 38 0 50 0 0 0 39 2 103 5 127 0 0 1 7 1 75 0 193 1 82 0 8 179 3 49 5 38 0 43 53 255 255 0 115 254 160 4 98 6 33 2 38 0 82 0 0 0 39 2 103 4 205 0 0 1 6 1 75 14 0 0 8 179 3 50 17 38 0 43 53 255 255 0 125 255 236 6 100 7 115 2 38 2 95 0 0 1 7 0 118 1 43 1 82 0 8 179 2 43 5 38 0 43 53 255 255 0 115 255 236 5 25 6 33 2 38 2 96 0 0 1 6 0 118 109 0 0 8 179 2 43 17 38 0 43 53 255 255 0 125 255 236 6 100 7 115 2 38 2 95 0 0 1 7 0 67 0 135 1 82 0 8 179 2 35 5 38 0 43 53 255 255 0 115 255 236 5 25 6 33 2 38 2 96 0 0 1 6 0 67 212 0 0 8 179 2 36 17 38 0 43 53 255 255 0 125 255 236 6 100 7 225 2 38 2 95 0 0 1 7 2 102 5 143 1 82 0 8 179 2 38 5 38 0 43 53 255 255 0 115 255 236 5 25 6 143 2 38 2 96 0 0 1 7 2 102 4 217 0 0 0 8 179 2 39 17 38 0 43 53 255 255 0 125 255 236 6 100 7 47 2 38 2 95 0 0 1 7 1 82 0 160 1 82 0 8 179 2 43 5 38 0 43 53 255 255 0 115 255 236 5 25 5 221 2 38 2 96 0 0 1 6 1 82 245 0 0 8 179 2 35 17 38 0 43 53 255 255 0 125 254 160 6 100 6 20 2 38 2 95 0 0 0 7 2 103 5 123 0 0 255 255 0 115 254 160 5 25 4 240 2 38 2 96 0 0 0 7 2 103 4 201 0 0 255 255 0 186 254 160 5 25 5 182 2 38 0 56 0 0 0 7 2 103 5 74 0 0 255 255 0 164 254 160 4 57 4 72 2 38 0 88 0 0 0 7 2 103 4 184 0 0 255 255 0 186 255 236 5 25 7 225 2 38 0 56 0 0 1 7 2 102 5 84 1 82 0 8 179 1 22 5 38 0 43 53 255 255 0 164 255 236 4 57 6 143 2 38 0 88 0 0 1 7 2 102 4 213 0 0 0 8 179 1 25 17 38 0 43 53 255 255 0 186 255 236 6 123 7 115 2 38 2 97 0 0 1 7 0 118 0 238 1 82 0 8 179 1 37 5 38 0 43 53 255 255 0 164 255 236 5 150 6 33 2 38 2 98 0 0 1 6 0 118 121 0 0 8 179 1 38 17 38 0 43 53 255 255 0 186 255 236 6 123 7 115 2 38 2 97 0 0 1 7 0 67 0 90 1 82 0 8 179 1 29 5 38 0 43 53 255 255 0 164 255 236 5 150 6 33 2 38 2 98 0 0 1 6 0 67 187 0 0 8 179 1 31 17 38 0 43 53 255 255 0 186 255 236 6 123 7 225 2 38 2 97 0 0 1 7 2 102 5 96 1 82 0 8 179 1 32 5 38 0 43 53 255 255 0 164 255 236 5 150 6 143 2 38 2 98 0 0 1 7 2 102 4 219 0 0 0 8 179 1 34 17 38 0 43 53 255 255 0 186 255 236 6 123 7 47 2 38 2 97 0 0 1 7 1 82 0 127 1 82 0 8 179 1 37 5 38 0 43 53 255 255 0 164 255 236 5 150 5 221 2 38 2 98 0 0 1 6 1 82 255 0 0 8 179 1 30 17 38 0 43 53 255 255 0 186 254 160 6 123 6 20 2 38 2 97 0 0 0 7 2 103 5 76 0 0 255 255 0 164 254 160 5 150 4 242 2 38 2 98 0 0 0 7 2 103 4 178 0 0 255 255 0 0 254 160 4 123 5 182 2 38 0 60 0 0 0 7 2 103 4 156 0 0 255 255 0 2 254 20 4 6 4 72 2 38 0 92 0 0 0 7 2 103 5 158 255 253 255 255 0 0 0 0 4 123 7 225 2 38 0 60 0 0 1 7 2 102 4 170 1 82 0 8 179 1 13 5 38 0 43 53 255 255 0 2 254 20 4 6 6 143 2 38 0 92 0 0 1 7 2 102 4 106 0 0 0 8 179 1 26 17 38 0 43 53 255 255 0 0 0 0 4 123 7 47 2 38 0 60 0 0 1 7 1 82 255 194 1 82 0 8 179 1 18 5 38 0 43 53 255 255 0 2 254 20 4 6 5 221 2 38 0 92 0 0 1 6 1 82 138 0 0 8 179 1 31 17 38 0 43 53 255 255 0 115 254 197 4 211 6 20 2 38 0 211 0 0 0 7 0 66 0 180 0 0 0 2 251 229 4 217 254 180 6 33 0 9 0 19 0 30 64 12 4 10 14 14 0 0 21 15 6 128 11 1 0 47 51 26 205 50 17 1 51 17 51 18 57 57 49 48 1 35 38 38 39 53 51 22 22 23 5 35 38 38 39 53 51 22 22 23 254 180 96 52 177 37 186 28 99 49 254 156 96 56 174 37 187 28 99 49 4 217 42 202 63 21 61 174 68 25 44 200 63 21 61 174 68 0 0 2 252 113 4 217 255 174 6 127 0 13 0 21 0 40 64 17 21 0 6 17 17 23 3 6 10 21 10 21 10 17 192 6 1 0 47 51 26 204 57 57 47 47 17 18 57 17 1 51 17 51 57 57 49 48 1 35 38 39 6 7 35 53 55 54 55 51 22 23 39 54 55 51 21 6 7 35 254 211 94 112 99 114 97 94 53 112 52 176 66 151 80 73 54 172 83 120 96 4 217 75 91 101 65 25 60 123 77 94 166 194 91 112 21 110 96 0 0 2 251 154 4 217 254 215 6 127 0 13 0 21 0 42 64 18 6 14 17 17 0 0 23 3 6 10 15 10 15 10 19 192 6 1 0 47 51 26 204 57 57 47 47 17 18 57 17 1 51 17 51 18 57 57 49 48 1 35 38 39 6 7 35 53 55 54 55 51 22 23 37 35 38 39 53 51 22 23 254 215 94 97 114 106 105 94 53 112 52 176 66 151 253 238 95 120 84 172 52 75 4 217 65 101 96 70 23 60 123 77 94 166 172 94 112 21 108 97 0 2 252 113 4 217 255 123 6 248 0 13 0 31 0 52 64 24 16 19 0 19 27 3 6 6 22 14 14 33 3 10 6 18 10 18 10 25 30 192 6 1 0 47 51 26 204 50 57 57 47 47 17 18 57 17 1 51 17 51 51 18 23 57 17 51 49 48 1 35 38 39 6 7 35 53 55 54 55 51 22 23 19 20 7 7 35 39 54 54 53 52 38 35 34 7 53 54 51 50 254 211 94 112 99 114 97 94 53 112 52 176 66 151 168 127 6 80 10 57 63 57 43 46 26 25 55 195 4 217 75 91 101 65 25 60 123 77 94 166 1 123 103 29 81 131 9 32 38 37 25 6 80 6 0 2 252 104 4 217 254 231 7 16 0 23 0 37 0 58 64 27 24 30 9 9 21 21 39 27 30 34 30 25 17 9 0 5 12 34 0 12 12 0 34 3 21 192 25 0 47 26 204 23 57 47 47 47 17 51 16 196 51 17 51 17 18 57 17 1 51 17 51 18 57 57 49 48 1 34 46 2 35 34 6 7 35 54 54 51 50 30 2 51 50 54 55 51 6 6 19 35 38 39 6 7 35 53 55 54 55 51 22 23 254 45 37 71 67 63 28 40 42 14 91 13 101 75 37 73 67 62 27 40 42 12 90 11 99 94 94 97 114 106 105 94 53 112 52 176 66 151 6 53 30 37 30 49 50 106 113 30 36 30 49 49 104 115 254 164 65 101 96 70 23 60 123 77 94 166 0 2 252 121 4 217 254 199 6 193 0 7 0 20 0 36 64 15 7 4 10 10 18 18 22 3 64 7 17 10 128 14 8 0 47 51 26 221 50 212 26 205 17 1 51 17 51 18 57 57 49 48 1 54 55 51 21 6 7 35 19 32 3 51 22 22 51 50 54 55 51 6 6 253 94 80 49 172 86 119 96 62 254 236 15 102 9 76 106 98 86 8 105 11 149 5 244 104 101 21 114 93 254 252 1 4 72 57 65 64 120 140 0 2 252 121 4 217 254 199 6 193 0 7 0 20 0 36 64 15 7 4 10 10 18 18 22 4 64 1 17 10 128 14 8 0 47 51 26 221 50 212 26 205 17 1 51 17 51 18 57 57 49 48 1 35 38 39 53 51 22 23 3 32 3 51 22 22 51 50 54 55 51 6 6 253 209 94 119 86 172 52 75 53 254 236 15 102 9 76 106 98 86 8 105 11 149 5 221 93 114 21 108 97 254 229 1 4 72 57 65 64 120 140 0 2 252 121 4 217 254 199 7 6 0 17 0 30 0 46 64 21 8 0 0 5 13 3 20 20 28 28 32 11 16 4 4 24 24 27 20 128 18 0 47 26 205 50 51 17 57 47 196 50 17 1 51 17 51 18 23 57 17 51 49 48 1 20 7 7 35 39 54 54 53 52 38 35 34 7 53 54 51 50 3 32 3 51 22 22 51 50 54 55 51 6 6 254 49 127 6 82 10 57 66 57 44 37 36 22 62 192 149 254 236 15 102 9 76 106 98 86 8 105 11 149 6 121 100 29 41 90 9 32 37 37 26 6 78 8 253 211 1 4 72 57 65 64 120 140 0 2 252 104 4 217 254 231 7 12 0 23 0 36 0 48 64 21 26 34 9 9 21 38 5 12 12 30 30 24 21 64 17 9 0 33 26 128 24 0 47 26 221 50 214 196 51 26 205 17 51 17 57 47 51 17 1 51 50 17 57 57 49 48 1 34 46 2 35 34 6 7 35 54 54 51 50 30 2 51 50 54 55 51 6 6 3 32 3 51 22 22 51 50 54 55 51 6 6 254 45 37 71 67 63 28 40 42 14 91 13 100 76 37 73 67 62 27 40 42 12 90 11 99 221 254 236 15 102 9 76 106 98 86 8 105 11 149 6 51 30 36 30 48 50 104 113 30 36 30 49 49 103 114 254 166 1 4 72 57 65 64 120 140 0 1 0 49 254 66 1 109 0 0 0 15 0 26 64 11 0 5 5 2 10 3 16 17 13 8 3 0 47 204 50 17 18 1 23 57 17 51 49 48 23 52 39 51 22 21 20 6 35 34 39 53 22 51 50 54 223 139 123 158 102 99 65 50 32 54 37 51 238 103 135 120 132 91 103 16 108 10 48 0 0 1 0 25 254 117 1 113 0 154 0 11 0 24 64 9 10 0 6 0 12 13 8 3 0 0 47 204 50 17 18 1 57 57 17 51 49 48 37 17 16 35 34 39 53 22 51 50 53 17 1 113 228 56 60 41 61 94 154 254 223 254 252 24 140 19 100 1 48 0 0 1 0 25 254 117 1 113 0 143 0 11 0 24 64 9 10 0 6 0 12 13 8 3 0 0 47 204 50 17 18 1 57 57 17 51 49 48 37 17 16 35 34 39 53 22 51 50 53 17 1 113 228 56 60 41 61 94 143 254 234 254 252 24 140 19 100 1 37 0 255 255 0 52 0 0 2 67 5 182 0 7 0 20 255 120 0 0 0 2 0 115 255 236 4 23 4 115 0 11 0 23 0 40 64 20 12 6 18 0 6 0 24 25 9 21 75 89 9 38 3 15 77 89 3 25 0 63 43 0 24 63 43 17 18 1 57 57 17 51 17 51 49 48 1 16 2 35 34 2 17 16 18 51 50 18 1 20 22 51 50 54 53 52 38 35 34 6 4 23 247 222 217 246 249 218 216 249 253 4 155 142 141 158 158 143 141 154 2 47 254 245 254 200 1 53 1 14 1 15 1 53 254 203 254 241 208 232 234 206 204 236 233 0 0 1 0 45 0 0 2 55 4 94 0 10 0 38 64 17 9 1 1 0 8 0 11 12 7 4 7 4 1 9 16 1 24 0 63 63 18 57 57 47 47 17 18 1 57 57 17 51 17 51 49 48 33 35 17 52 55 6 7 7 39 1 51 2 55 161 8 67 62 150 90 1 127 139 2 49 239 140 67 48 112 114 1 35 0 1 0 41 0 0 3 215 4 115 0 25 0 44 64 24 7 19 0 19 23 14 1 5 26 27 16 10 75 89 16 38 24 23 1 23 76 89 1 24 0 63 43 17 0 51 24 63 43 17 18 1 23 57 17 51 49 48 33 33 53 1 62 2 53 52 38 35 34 6 7 39 54 51 50 22 21 20 6 7 5 23 33 3 215 252 82 1 145 157 113 44 139 119 88 156 92 90 192 242 198 218 130 186 254 185 2 2 190 133 1 47 119 104 83 65 87 103 61 74 109 168 168 150 115 187 128 231 6 0 0 1 0 94 254 149 4 27 4 116 0 39 0 71 64 38 3 4 27 0 19 7 7 0 4 22 34 13 6 40 41 4 23 22 23 22 75 89 23 23 10 37 37 30 75 89 37 38 10 17 75 89 10 37 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 0 57 17 18 1 23 57 17 51 17 51 17 51 49 48 1 20 6 7 21 22 22 21 20 4 33 34 38 39 53 22 22 51 32 17 16 33 35 53 51 50 54 53 52 38 35 34 6 7 39 54 54 51 50 22 3 238 157 144 176 170 254 222 254 245 116 193 91 95 215 96 1 123 254 94 144 146 171 200 147 126 96 170 109 84 90 235 130 213 236 3 7 140 178 30 8 22 180 146 209 225 35 44 158 47 49 1 41 1 10 143 151 134 107 122 52 70 112 71 81 195 0 0 2 0 23 254 168 4 102 4 94 0 10 0 18 0 66 64 33 18 5 9 2 2 11 7 3 0 3 5 3 19 20 1 5 18 5 77 89 9 18 14 15 15 7 18 18 3 7 16 3 36 0 63 63 18 57 47 18 57 17 51 17 51 43 17 0 51 17 18 1 23 57 17 51 51 51 17 51 17 51 49 48 37 35 17 35 17 33 53 1 51 17 51 33 17 52 55 35 6 7 1 4 102 217 168 253 50 2 190 184 217 254 134 12 10 41 68 254 57 27 254 141 1 115 125 3 198 252 68 1 92 218 222 86 92 253 158 0 0 1 0 133 254 149 4 29 4 95 0 26 0 58 64 31 15 3 25 20 8 20 23 3 4 28 27 0 17 75 89 0 0 6 21 21 24 76 89 21 16 6 12 75 89 6 37 0 63 43 0 24 63 43 17 18 0 57 24 47 43 17 18 1 23 57 17 51 17 51 49 48 1 50 4 21 20 0 35 34 39 53 22 22 51 50 54 53 16 33 34 7 39 19 33 21 33 3 54 2 45 231 1 9 254 223 254 247 130 70 208 101 176 195 254 137 94 160 86 55 2 215 253 183 37 115 2 38 229 199 227 254 254 79 160 45 51 166 157 1 50 29 55 2 172 153 254 73 23 0 255 255 0 117 255 236 4 47 5 203 2 6 0 25 0 0 0 1 0 94 254 169 4 43 4 95 0 6 0 31 64 16 1 5 5 0 2 3 7 8 3 2 76 89 3 16 0 36 0 63 63 43 17 18 1 23 57 17 51 49 48 1 1 33 53 33 21 1 1 29 2 94 252 227 3 205 253 170 254 169 5 29 153 133 250 207 255 255 0 104 255 236 4 41 5 203 2 6 0 27 0 0 0 2 0 106 254 149 4 37 4 116 0 23 0 37 0 65 64 34 27 17 34 10 10 0 0 4 17 3 38 39 14 30 77 89 10 20 14 14 2 20 20 24 75 89 20 38 2 7 77 89 2 37 0 63 43 0 24 63 43 17 18 0 57 24 47 18 57 43 17 18 1 23 57 17 51 17 51 17 51 49 48 1 16 33 34 39 53 22 51 50 18 19 35 6 6 35 34 38 53 52 18 51 50 22 18 1 34 6 21 20 22 51 50 54 54 53 52 38 38 4 37 253 104 116 68 80 102 240 245 11 12 55 182 114 194 228 255 208 149 223 120 254 20 143 156 144 147 91 153 88 82 147 1 239 252 166 20 143 26 1 41 1 51 83 87 232 208 228 1 8 153 254 219 1 48 184 164 144 165 74 128 70 105 178 102 0 255 255 0 29 0 0 5 196 6 31 0 39 0 73 2 182 0 0 0 6 0 73 0 0 0 2 0 92 2 221 5 170 5 193 0 34 0 51 0 90 64 46 44 48 48 46 42 38 38 40 10 0 28 17 5 17 22 0 40 46 6 53 52 43 49 36 3 45 47 45 41 47 35 35 40 28 10 20 8 3 3 40 41 25 20 20 41 3 0 63 51 47 51 16 205 50 47 51 18 57 57 17 51 17 51 17 51 17 18 23 57 17 18 1 23 57 17 51 17 51 17 51 17 51 17 51 17 51 49 48 1 20 6 35 34 39 53 22 51 50 53 52 38 38 39 38 38 53 52 54 51 50 23 7 38 35 34 6 21 20 22 22 23 22 22 1 3 35 23 17 35 17 51 19 19 51 17 35 17 55 35 3 2 72 149 124 145 74 106 119 148 23 54 85 120 81 142 110 125 92 34 100 83 60 75 18 43 95 129 80 1 166 201 8 6 119 188 195 203 180 127 6 8 211 3 172 98 109 33 108 40 100 33 40 33 31 44 91 76 86 105 39 99 37 46 40 29 36 28 36 50 90 254 236 2 47 129 254 82 2 209 253 209 2 47 253 47 1 164 137 253 211 255 255 0 18 254 20 4 90 5 182 2 38 0 55 0 0 0 7 0 122 1 63 0 0 255 255 0 31 254 20 2 168 5 70 2 38 0 87 0 0 0 7 0 122 0 197 0 0 0 2 0 113 254 20 4 55 4 92 0 12 0 42 0 71 64 38 10 21 26 3 42 42 30 30 36 21 3 43 44 33 39 70 89 36 33 27 28 15 26 15 24 18 24 7 70 89 24 16 18 0 70 89 18 22 0 63 43 0 24 63 43 17 18 0 57 57 24 63 63 51 43 17 18 1 23 57 17 51 17 51 51 17 51 49 48 37 50 54 55 53 52 38 35 34 6 21 20 22 5 52 55 35 6 35 34 2 17 16 18 51 50 23 51 55 51 17 20 6 35 34 39 53 22 22 51 50 54 53 2 76 170 151 4 158 171 144 153 151 1 219 9 11 112 230 217 239 243 211 223 123 11 24 131 236 249 242 149 75 210 118 142 165 119 183 202 43 226 204 224 208 209 217 107 36 99 167 1 45 1 10 1 8 1 49 166 146 251 164 236 236 70 158 42 46 169 146 255 255 0 113 254 20 4 55 6 33 2 38 3 145 0 0 1 6 1 75 6 0 0 8 179 2 57 17 38 0 43 53 255 255 0 113 254 20 4 55 5 229 2 38 3 145 0 0 1 6 1 78 12 0 0 8 179 2 43 17 38 0 43 53 255 255 0 113 254 20 4 55 5 223 2 38 3 145 0 0 1 7 1 79 1 86 0 0 0 8 179 2 52 17 38 0 43 53 255 255 0 113 254 20 4 55 6 33 2 38 3 145 0 0 1 6 2 58 119 0 0 8 179 2 47 17 38 0 43 53 0 1 0 201 0 0 1 115 5 182 0 3 0 17 182 0 4 5 1 3 0 18 0 63 63 17 18 1 57 49 48 51 17 51 17 201 170 5 182 250 74 0 255 255 0 5 0 0 1 142 7 115 2 38 3 150 0 0 1 7 0 67 254 124 1 82 0 8 179 1 5 5 38 0 43 53 255 255 0 179 0 0 2 60 7 115 2 38 3 150 0 0 1 7 0 118 255 42 1 82 0 8 179 1 13 5 38 0 43 53 255 255 255 199 0 0 2 105 7 115 2 38 3 150 0 0 1 7 1 75 254 187 1 82 0 8 179 1 18 5 38 0 43 53 255 255 0 5 0 0 2 56 7 37 2 38 3 150 0 0 1 7 0 106 254 208 1 82 0 10 180 2 1 25 5 38 0 43 53 53 255 255 255 171 0 0 2 147 7 47 2 38 3 150 0 0 1 7 1 82 254 163 1 82 0 8 179 1 13 5 38 0 43 53 255 255 255 243 0 0 2 75 6 180 2 38 3 150 0 0 1 7 1 77 254 198 1 82 0 8 179 1 7 5 38 0 43 53 255 255 255 231 0 0 2 83 7 55 2 38 3 150 0 0 1 7 1 78 254 194 1 82 0 8 179 1 4 5 38 0 43 53 255 255 0 86 254 66 1 162 5 182 2 38 3 150 0 0 0 6 1 81 49 0 255 255 0 187 0 0 1 127 7 49 2 38 3 150 0 0 1 7 1 79 0 25 1 82 0 8 179 1 13 5 38 0 43 53 255 255 0 201 254 127 3 163 5 182 0 38 3 150 0 0 0 7 0 45 2 59 0 0 255 255 255 228 0 0 2 29 6 10 0 39 3 150 0 170 0 0 1 7 1 84 253 232 255 151 0 7 178 1 8 0 0 63 53 0 255 255 0 201 0 0 1 115 5 182 2 6 3 150 0 0 255 255 0 5 0 0 2 56 7 37 2 38 3 150 0 0 1 7 0 106 254 208 1 82 0 10 180 2 1 25 5 38 0 43 53 53 255 255 0 201 0 0 1 115 5 182 2 6 3 150 0 0 255 255 0 5 0 0 2 56 7 37 2 38 3 150 0 0 1 7 0 106 254 208 1 82 0 10 180 2 1 25 5 38 0 43 53 53 255 255 0 201 0 0 1 115 5 182 2 6 3 150 0 0 255 255 0 201 0 0 1 115 5 182 2 6 3 150 0 0 255 255 0 153 0 0 2 4 7 225 2 38 3 150 0 0 1 7 2 102 3 145 1 82 0 8 179 1 8 5 38 0 43 53 255 255 0 184 254 160 1 127 5 182 2 38 3 150 0 0 0 7 2 103 3 125 0 0 0 0 0 1 0 0 182 50 0 1 73 6 128 0 0 14 54 36 0 5 0 36 255 113 0 5 0 55 0 41 0 5 0 57 0 41 0 5 0 58 0 41 0 5 0 60 0 20 0 5 0 68 255 174 0 5 0 70 255 133 0 5 0 71 255 133 0 5 0 72 255 133 0 5 0 74 255 195 0 5 0 80 255 195 0 5 0 81 255 195 0 5 0 82 255 133 0 5 0 83 255 195 0 5 0 84 255 133 0 5 0 85 255 195 0 5 0 86 255 195 0 5 0 88 255 195 0 5 0 130 255 113 0 5 0 131 255 113 0 5 0 132 255 113 0 5 0 133 255 113 0 5 0 134 255 113 0 5 0 135 255 113 0 5 0 159 0 20 0 5 0 162 255 133 0 5 0 163 255 174 0 5 0 164 255 174 0 5 0 165 255 174 0 5 0 166 255 174 0 5 0 167 255 174 0 5 0 168 255 174 0 5 0 169 255 133 0 5 0 170 255 133 0 5 0 171 255 133 0 5 0 172 255 133 0 5 0 173 255 133 0 5 0 180 255 133 0 5 0 181 255 133 0 5 0 182 255 133 0 5 0 183 255 133 0 5 0 184 255 133 0 5 0 186 255 133 0 5 0 187 255 195 0 5 0 188 255 195 0 5 0 189 255 195 0 5 0 190 255 195 0 5 0 194 255 113 0 5 0 195 255 174 0 5 0 196 255 113 0 5 0 197 255 174 0 5 0 198 255 113 0 5 0 199 255 174 0 5 0 201 255 133 0 5 0 203 255 133 0 5 0 205 255 133 0 5 0 207 255 133 0 5 0 209 255 133 0 5 0 211 255 133 0 5 0 213 255 133 0 5 0 215 255 133 0 5 0 217 255 133 0 5 0 219 255 133 0 5 0 221 255 133 0 5 0 223 255 195 0 5 0 225 255 195 0 5 0 227 255 195 0 5 0 229 255 195 0 5 0 250 255 195 0 5 1 6 255 195 0 5 1 8 255 195 0 5 1 13 255 195 0 5 1 15 255 133 0 5 1 17 255 133 0 5 1 19 255 133 0 5 1 21 255 133 0 5 1 23 255 195 0 5 1 25 255 195 0 5 1 29 255 195 0 5 1 33 255 195 0 5 1 36 0 41 0 5 1 38 0 41 0 5 1 43 255 195 0 5 1 45 255 195 0 5 1 47 255 195 0 5 1 49 255 195 0 5 1 51 255 195 0 5 1 53 255 195 0 5 1 54 0 41 0 5 1 56 0 20 0 5 1 58 0 20 0 5 1 67 255 113 0 5 1 68 255 174 0 5 1 70 255 174 0 5 1 72 255 133 0 5 1 74 255 195 0 5 1 86 255 113 0 5 1 95 255 113 0 5 1 98 255 113 0 5 1 105 255 113 0 5 1 121 255 174 0 5 1 122 255 215 0 5 1 123 255 215 0 5 1 126 255 174 0 5 1 129 255 195 0 5 1 130 255 215 0 5 1 131 255 215 0 5 1 132 255 215 0 5 1 135 255 215 0 5 1 137 255 215 0 5 1 140 255 174 0 5 1 142 255 195 0 5 1 143 255 174 0 5 1 144 255 174 0 5 1 147 255 174 0 5 1 153 255 174 0 5 1 164 255 133 0 5 1 170 255 113 0 5 1 174 255 133 0 5 1 181 255 133 0 5 1 202 255 215 0 5 1 206 255 113 0 5 1 207 255 133 0 5 1 213 255 113 0 5 1 216 255 133 0 5 1 219 255 133 0 5 1 222 255 133 0 5 1 234 255 133 0 5 1 237 255 133 0 5 1 238 255 195 0 5 1 242 255 113 0 5 1 250 0 41 0 5 1 252 0 41 0 5 1 254 0 41 0 5 2 0 0 20 0 5 2 87 255 195 0 5 2 88 255 113 0 5 2 89 255 174 0 5 2 96 255 133 0 5 2 98 255 195 0 5 2 106 255 133 0 5 2 114 255 113 0 5 2 115 255 113 0 5 2 125 255 236 0 5 2 127 255 133 0 5 2 133 255 133 0 5 2 135 255 133 0 5 2 137 255 133 0 5 2 141 255 133 0 5 2 178 255 133 0 5 2 180 255 133 0 5 2 206 255 133 0 5 2 207 255 113 0 5 2 217 255 113 0 5 2 218 255 215 0 5 2 219 255 113 0 5 2 220 255 215 0 5 2 221 255 113 0 5 2 222 255 215 0 5 2 224 255 133 0 5 2 226 255 215 0 5 2 228 255 215 0 5 2 240 255 133 0 5 2 242 255 133 0 5 2 244 255 133 0 5 3 9 255 113 0 5 3 10 255 133 0 5 3 11 255 113 0 5 3 12 255 133 0 5 3 17 255 133 0 5 3 18 255 113 0 5 3 22 255 133 0 5 3 26 255 133 0 5 3 27 255 133 0 5 3 28 255 113 0 5 3 29 255 113 0 5 3 30 255 174 0 5 3 31 255 113 0 5 3 32 255 174 0 5 3 33 255 113 0 5 3 34 255 174 0 5 3 35 255 113 0 5 3 37 255 113 0 5 3 38 255 174 0 5 3 39 255 113 0 5 3 40 255 174 0 5 3 41 255 113 0 5 3 42 255 174 0 5 3 43 255 113 0 5 3 44 255 174 0 5 3 45 255 113 0 5 3 46 255 174 0 5 3 47 255 113 0 5 3 48 255 174 0 5 3 49 255 113 0 5 3 50 255 174 0 5 3 51 255 113 0 5 3 52 255 174 0 5 3 54 255 133 0 5 3 56 255 133 0 5 3 58 255 133 0 5 3 60 255 133 0 5 3 64 255 133 0 5 3 66 255 133 0 5 3 68 255 133 0 5 3 74 255 133 0 5 3 76 255 133 0 5 3 78 255 133 0 5 3 82 255 133 0 5 3 84 255 133 0 5 3 86 255 133 0 5 3 88 255 133 0 5 3 90 255 133 0 5 3 92 255 133 0 5 3 94 255 133 0 5 3 96 255 133 0 5 3 98 255 195 0 5 3 100 255 195 0 5 3 102 255 195 0 5 3 104 255 195 0 5 3 106 255 195 0 5 3 108 255 195 0 5 3 110 255 195 0 5 3 111 0 20 0 5 3 113 0 20 0 5 3 115 0 20 0 5 3 143 0 41 0 10 0 36 255 113 0 10 0 55 0 41 0 10 0 57 0 41 0 10 0 58 0 41 0 10 0 60 0 20 0 10 0 68 255 174 0 10 0 70 255 133 0 10 0 71 255 133 0 10 0 72 255 133 0 10 0 74 255 195 0 10 0 80 255 195 0 10 0 81 255 195 0 10 0 82 255 133 0 10 0 83 255 195 0 10 0 84 255 133 0 10 0 85 255 195 0 10 0 86 255 195 0 10 0 88 255 195 0 10 0 130 255 113 0 10 0 131 255 113 0 10 0 132 255 113 0 10 0 133 255 113 0 10 0 134 255 113 0 10 0 135 255 113 0 10 0 159 0 20 0 10 0 162 255 133 0 10 0 163 255 174 0 10 0 164 255 174 0 10 0 165 255 174 0 10 0 166 255 174 0 10 0 167 255 174 0 10 0 168 255 174 0 10 0 169 255 133 0 10 0 170 255 133 0 10 0 171 255 133 0 10 0 172 255 133 0 10 0 173 255 133 0 10 0 180 255 133 0 10 0 181 255 133 0 10 0 182 255 133 0 10 0 183 255 133 0 10 0 184 255 133 0 10 0 186 255 133 0 10 0 187 255 195 0 10 0 188 255 195 0 10 0 189 255 195 0 10 0 190 255 195 0 10 0 194 255 113 0 10 0 195 255 174 0 10 0 196 255 113 0 10 0 197 255 174 0 10 0 198 255 113 0 10 0 199 255 174 0 10 0 201 255 133 0 10 0 203 255 133 0 10 0 205 255 133 0 10 0 207 255 133 0 10 0 209 255 133 0 10 0 211 255 133 0 10 0 213 255 133 0 10 0 215 255 133 0 10 0 217 255 133 0 10 0 219 255 133 0 10 0 221 255 133 0 10 0 223 255 195 0 10 0 225 255 195 0 10 0 227 255 195 0 10 0 229 255 195 0 10 0 250 255 195 0 10 1 6 255 195 0 10 1 8 255 195 0 10 1 13 255 195 0 10 1 15 255 133 0 10 1 17 255 133 0 10 1 19 255 133 0 10 1 21 255 133 0 10 1 23 255 195 0 10 1 25 255 195 0 10 1 29 255 195 0 10 1 33 255 195 0 10 1 36 0 41 0 10 1 38 0 41 0 10 1 43 255 195 0 10 1 45 255 195 0 10 1 47 255 195 0 10 1 49 255 195 0 10 1 51 255 195 0 10 1 53 255 195 0 10 1 54 0 41 0 10 1 56 0 20 0 10 1 58 0 20 0 10 1 67 255 113 0 10 1 68 255 174 0 10 1 70 255 174 0 10 1 72 255 133 0 10 1 74 255 195 0 10 1 86 255 113 0 10 1 95 255 113 0 10 1 98 255 113 0 10 1 105 255 113 0 10 1 121 255 174 0 10 1 122 255 215 0 10 1 123 255 215 0 10 1 126 255 174 0 10 1 129 255 195 0 10 1 130 255 215 0 10 1 131 255 215 0 10 1 132 255 215 0 10 1 135 255 215 0 10 1 137 255 215 0 10 1 140 255 174 0 10 1 142 255 195 0 10 1 143 255 174 0 10 1 144 255 174 0 10 1 147 255 174 0 10 1 153 255 174 0 10 1 164 255 133 0 10 1 170 255 113 0 10 1 174 255 133 0 10 1 181 255 133 0 10 1 202 255 215 0 10 1 206 255 113 0 10 1 207 255 133 0 10 1 213 255 113 0 10 1 216 255 133 0 10 1 219 255 133 0 10 1 222 255 133 0 10 1 234 255 133 0 10 1 237 255 133 0 10 1 238 255 195 0 10 1 242 255 113 0 10 1 250 0 41 0 10 1 252 0 41 0 10 1 254 0 41 0 10 2 0 0 20 0 10 2 87 255 195 0 10 2 88 255 113 0 10 2 89 255 174 0 10 2 96 255 133 0 10 2 98 255 195 0 10 2 106 255 133 0 10 2 114 255 113 0 10 2 115 255 113 0 10 2 125 255 236 0 10 2 127 255 133 0 10 2 133 255 133 0 10 2 135 255 133 0 10 2 137 255 133 0 10 2 141 255 133 0 10 2 178 255 133 0 10 2 180 255 133 0 10 2 206 255 133 0 10 2 207 255 113 0 10 2 217 255 113 0 10 2 218 255 215 0 10 2 219 255 113 0 10 2 220 255 215 0 10 2 221 255 113 0 10 2 222 255 215 0 10 2 224 255 133 0 10 2 226 255 215 0 10 2 228 255 215 0 10 2 240 255 133 0 10 2 242 255 133 0 10 2 244 255 133 0 10 3 9 255 113 0 10 3 10 255 133 0 10 3 11 255 113 0 10 3 12 255 133 0 10 3 17 255 133 0 10 3 18 255 113 0 10 3 22 255 133 0 10 3 26 255 133 0 10 3 27 255 133 0 10 3 28 255 113 0 10 3 29 255 113 0 10 3 30 255 174 0 10 3 31 255 113 0 10 3 32 255 174 0 10 3 33 255 113 0 10 3 34 255 174 0 10 3 35 255 113 0 10 3 37 255 113 0 10 3 38 255 174 0 10 3 39 255 113 0 10 3 40 255 174 0 10 3 41 255 113 0 10 3 42 255 174 0 10 3 43 255 113 0 10 3 44 255 174 0 10 3 45 255 113 0 10 3 46 255 174 0 10 3 47 255 113 0 10 3 48 255 174 0 10 3 49 255 113 0 10 3 50 255 174 0 10 3 51 255 113 0 10 3 52 255 174 0 10 3 54 255 133 0 10 3 56 255 133 0 10 3 58 255 133 0 10 3 60 255 133 0 10 3 64 255 133 0 10 3 66 255 133 0 10 3 68 255 133 0 10 3 74 255 133 0 10 3 76 255 133 0 10 3 78 255 133 0 10 3 82 255 133 0 10 3 84 255 133 0 10 3 86 255 133 0 10 3 88 255 133 0 10 3 90 255 133 0 10 3 92 255 133 0 10 3 94 255 133 0 10 3 96 255 133 0 10 3 98 255 195 0 10 3 100 255 195 0 10 3 102 255 195 0 10 3 104 255 195 0 10 3 106 255 195 0 10 3 108 255 195 0 10 3 110 255 195 0 10 3 111 0 20 0 10 3 113 0 20 0 10 3 115 0 20 0 10 3 143 0 41 0 11 0 45 0 184 0 15 0 38 255 154 0 15 0 42 255 154 0 15 0 50 255 154 0 15 0 52 255 154 0 15 0 55 255 113 0 15 0 56 255 215 0 15 0 57 255 133 0 15 0 58 255 133 0 15 0 60 255 133 0 15 0 137 255 154 0 15 0 148 255 154 0 15 0 149 255 154 0 15 0 150 255 154 0 15 0 151 255 154 0 15 0 152 255 154 0 15 0 154 255 154 0 15 0 155 255 215 0 15 0 156 255 215 0 15 0 157 255 215 0 15 0 158 255 215 0 15 0 159 255 133 0 15 0 200 255 154 0 15 0 202 255 154 0 15 0 204 255 154 0 15 0 206 255 154 0 15 0 222 255 154 0 15 0 224 255 154 0 15 0 226 255 154 0 15 0 228 255 154 0 15 1 14 255 154 0 15 1 16 255 154 0 15 1 18 255 154 0 15 1 20 255 154 0 15 1 36 255 113 0 15 1 38 255 113 0 15 1 42 255 215 0 15 1 44 255 215 0 15 1 46 255 215 0 15 1 48 255 215 0 15 1 50 255 215 0 15 1 52 255 215 0 15 1 54 255 133 0 15 1 56 255 133 0 15 1 58 255 133 0 15 1 71 255 154 0 15 1 102 255 174 0 15 1 109 255 174 0 15 1 113 255 113 0 15 1 114 255 133 0 15 1 115 255 154 0 15 1 117 255 133 0 15 1 120 255 133 0 15 1 133 255 215 0 15 1 157 255 113 0 15 1 159 255 154 0 15 1 166 255 113 0 15 1 184 255 154 0 15 1 187 255 154 0 15 1 188 255 113 0 15 1 190 255 174 0 15 1 193 255 92 0 15 1 196 255 113 0 15 1 220 255 154 0 15 1 225 255 133 0 15 1 228 255 154 0 15 1 250 255 133 0 15 1 252 255 133 0 15 1 254 255 133 0 15 2 0 255 133 0 15 2 84 255 133 0 15 2 95 255 154 0 15 2 97 255 215 0 15 2 108 255 154 0 15 2 124 255 92 0 15 2 126 255 154 0 15 2 128 255 133 0 15 2 130 255 133 0 15 2 132 255 154 0 15 2 134 255 154 0 15 2 136 255 154 0 15 2 138 255 154 0 15 2 140 255 154 0 15 2 169 255 113 0 15 2 170 255 154 0 15 2 177 255 154 0 15 2 179 255 154 0 15 2 181 255 113 0 15 2 182 255 154 0 15 2 183 255 133 0 15 2 185 255 133 0 15 2 189 255 113 0 15 2 190 255 154 0 15 2 191 255 92 0 15 2 192 255 133 0 15 2 193 255 92 0 15 2 194 255 133 0 15 2 197 255 133 0 15 2 199 255 133 0 15 2 212 255 92 0 15 2 213 255 133 0 15 2 239 255 154 0 15 2 241 255 154 0 15 2 243 255 154 0 15 2 253 255 92 0 15 2 254 255 133 0 15 3 13 255 133 0 15 3 14 255 154 0 15 3 15 255 133 0 15 3 16 255 154 0 15 3 21 255 154 0 15 3 23 255 113 0 15 3 24 255 154 0 15 3 73 255 154 0 15 3 75 255 154 0 15 3 77 255 154 0 15 3 79 255 154 0 15 3 81 255 154 0 15 3 83 255 154 0 15 3 85 255 154 0 15 3 87 255 154 0 15 3 89 255 154 0 15 3 91 255 154 0 15 3 93 255 154 0 15 3 95 255 154 0 15 3 97 255 215 0 15 3 99 255 215 0 15 3 101 255 215 0 15 3 103 255 215 0 15 3 105 255 215 0 15 3 107 255 215 0 15 3 109 255 215 0 15 3 111 255 133 0 15 3 113 255 133 0 15 3 115 255 133 0 15 3 143 255 113 0 16 0 55 255 174 0 16 1 36 255 174 0 16 1 38 255 174 0 16 1 113 255 174 0 16 1 157 255 174 0 16 1 166 255 174 0 16 1 188 255 174 0 16 1 196 255 174 0 16 1 220 255 215 0 16 1 228 255 215 0 16 2 169 255 174 0 16 2 170 255 215 0 16 2 181 255 174 0 16 2 182 255 215 0 16 2 189 255 174 0 16 2 190 255 215 0 16 3 23 255 174 0 16 3 24 255 215 0 16 3 143 255 174 0 17 0 38 255 154 0 17 0 42 255 154 0 17 0 50 255 154 0 17 0 52 255 154 0 17 0 55 255 113 0 17 0 56 255 215 0 17 0 57 255 133 0 17 0 58 255 133 0 17 0 60 255 133 0 17 0 137 255 154 0 17 0 148 255 154 0 17 0 149 255 154 0 17 0 150 255 154 0 17 0 151 255 154 0 17 0 152 255 154 0 17 0 154 255 154 0 17 0 155 255 215 0 17 0 156 255 215 0 17 0 157 255 215 0 17 0 158 255 215 0 17 0 159 255 133 0 17 0 200 255 154 0 17 0 202 255 154 0 17 0 204 255 154 0 17 0 206 255 154 0 17 0 222 255 154 0 17 0 224 255 154 0 17 0 226 255 154 0 17 0 228 255 154 0 17 1 14 255 154 0 17 1 16 255 154 0 17 1 18 255 154 0 17 1 20 255 154 0 17 1 36 255 113 0 17 1 38 255 113 0 17 1 42 255 215 0 17 1 44 255 215 0 17 1 46 255 215 0 17 1 48 255 215 0 17 1 50 255 215 0 17 1 52 255 215 0 17 1 54 255 133 0 17 1 56 255 133 0 17 1 58 255 133 0 17 1 71 255 154 0 17 1 102 255 174 0 17 1 109 255 174 0 17 1 113 255 113 0 17 1 114 255 133 0 17 1 115 255 154 0 17 1 117 255 133 0 17 1 120 255 133 0 17 1 133 255 215 0 17 1 157 255 113 0 17 1 159 255 154 0 17 1 166 255 113 0 17 1 184 255 154 0 17 1 187 255 154 0 17 1 188 255 113 0 17 1 190 255 174 0 17 1 193 255 92 0 17 1 196 255 113 0 17 1 220 255 154 0 17 1 225 255 133 0 17 1 228 255 154 0 17 1 250 255 133 0 17 1 252 255 133 0 17 1 254 255 133 0 17 2 0 255 133 0 17 2 84 255 133 0 17 2 95 255 154 0 17 2 97 255 215 0 17 2 108 255 154 0 17 2 124 255 92 0 17 2 126 255 154 0 17 2 128 255 133 0 17 2 130 255 133 0 17 2 132 255 154 0 17 2 134 255 154 0 17 2 136 255 154 0 17 2 138 255 154 0 17 2 140 255 154 0 17 2 169 255 113 0 17 2 170 255 154 0 17 2 177 255 154 0 17 2 179 255 154 0 17 2 181 255 113 0 17 2 182 255 154 0 17 2 183 255 133 0 17 2 185 255 133 0 17 2 189 255 113 0 17 2 190 255 154 0 17 2 191 255 92 0 17 2 192 255 133 0 17 2 193 255 92 0 17 2 194 255 133 0 17 2 197 255 133 0 17 2 199 255 133 0 17 2 212 255 92 0 17 2 213 255 133 0 17 2 239 255 154 0 17 2 241 255 154 0 17 2 243 255 154 0 17 2 253 255 92 0 17 2 254 255 133 0 17 3 13 255 133 0 17 3 14 255 154 0 17 3 15 255 133 0 17 3 16 255 154 0 17 3 21 255 154 0 17 3 23 255 113 0 17 3 24 255 154 0 17 3 73 255 154 0 17 3 75 255 154 0 17 3 77 255 154 0 17 3 79 255 154 0 17 3 81 255 154 0 17 3 83 255 154 0 17 3 85 255 154 0 17 3 87 255 154 0 17 3 89 255 154 0 17 3 91 255 154 0 17 3 93 255 154 0 17 3 95 255 154 0 17 3 97 255 215 0 17 3 99 255 215 0 17 3 101 255 215 0 17 3 103 255 215 0 17 3 105 255 215 0 17 3 107 255 215 0 17 3 109 255 215 0 17 3 111 255 133 0 17 3 113 255 133 0 17 3 115 255 133 0 17 3 143 255 113 0 36 0 5 255 113 0 36 0 10 255 113 0 36 0 38 255 215 0 36 0 42 255 215 0 36 0 45 1 10 0 36 0 50 255 215 0 36 0 52 255 215 0 36 0 55 255 113 0 36 0 57 255 174 0 36 0 58 255 174 0 36 0 60 255 133 0 36 0 137 255 215 0 36 0 148 255 215 0 36 0 149 255 215 0 36 0 150 255 215 0 36 0 151 255 215 0 36 0 152 255 215 0 36 0 154 255 215 0 36 0 159 255 133 0 36 0 200 255 215 0 36 0 202 255 215 0 36 0 204 255 215 0 36 0 206 255 215 0 36 0 222 255 215 0 36 0 224 255 215 0 36 0 226 255 215 0 36 0 228 255 215 0 36 1 14 255 215 0 36 1 16 255 215 0 36 1 18 255 215 0 36 1 20 255 215 0 36 1 36 255 113 0 36 1 38 255 113 0 36 1 54 255 174 0 36 1 56 255 133 0 36 1 58 255 133 0 36 1 71 255 215 0 36 1 250 255 174 0 36 1 252 255 174 0 36 1 254 255 174 0 36 2 0 255 133 0 36 2 7 255 113 0 36 2 11 255 113 0 36 2 95 255 215 0 36 3 73 255 215 0 36 3 75 255 215 0 36 3 77 255 215 0 36 3 79 255 215 0 36 3 81 255 215 0 36 3 83 255 215 0 36 3 85 255 215 0 36 3 87 255 215 0 36 3 89 255 215 0 36 3 91 255 215 0 36 3 93 255 215 0 36 3 95 255 215 0 36 3 111 255 133 0 36 3 113 255 133 0 36 3 115 255 133 0 36 3 143 255 113 0 37 0 15 255 174 0 37 0 17 255 174 0 37 0 36 255 215 0 37 0 55 255 195 0 37 0 57 255 236 0 37 0 58 255 236 0 37 0 59 255 215 0 37 0 60 255 236 0 37 0 61 255 236 0 37 0 130 255 215 0 37 0 131 255 215 0 37 0 132 255 215 0 37 0 133 255 215 0 37 0 134 255 215 0 37 0 135 255 215 0 37 0 159 255 236 0 37 0 194 255 215 0 37 0 196 255 215 0 37 0 198 255 215 0 37 1 36 255 195 0 37 1 38 255 195 0 37 1 54 255 236 0 37 1 56 255 236 0 37 1 58 255 236 0 37 1 59 255 236 0 37 1 61 255 236 0 37 1 63 255 236 0 37 1 67 255 215 0 37 1 160 255 236 0 37 1 250 255 236 0 37 1 252 255 236 0 37 1 254 255 236 0 37 2 0 255 236 0 37 2 8 255 174 0 37 2 12 255 174 0 37 2 88 255 215 0 37 3 29 255 215 0 37 3 31 255 215 0 37 3 33 255 215 0 37 3 35 255 215 0 37 3 37 255 215 0 37 3 39 255 215 0 37 3 41 255 215 0 37 3 43 255 215 0 37 3 45 255 215 0 37 3 47 255 215 0 37 3 49 255 215 0 37 3 51 255 215 0 37 3 111 255 236 0 37 3 113 255 236 0 37 3 115 255 236 0 37 3 143 255 195 0 38 0 38 255 215 0 38 0 42 255 215 0 38 0 50 255 215 0 38 0 52 255 215 0 38 0 137 255 215 0 38 0 148 255 215 0 38 0 149 255 215 0 38 0 150 255 215 0 38 0 151 255 215 0 38 0 152 255 215 0 38 0 154 255 215 0 38 0 200 255 215 0 38 0 202 255 215 0 38 0 204 255 215 0 38 0 206 255 215 0 38 0 222 255 215 0 38 0 224 255 215 0 38 0 226 255 215 0 38 0 228 255 215 0 38 1 14 255 215 0 38 1 16 255 215 0 38 1 18 255 215 0 38 1 20 255 215 0 38 1 71 255 215 0 38 2 95 255 215 0 38 3 73 255 215 0 38 3 75 255 215 0 38 3 77 255 215 0 38 3 79 255 215 0 38 3 81 255 215 0 38 3 83 255 215 0 38 3 85 255 215 0 38 3 87 255 215 0 38 3 89 255 215 0 38 3 91 255 215 0 38 3 93 255 215 0 38 3 95 255 215 0 39 0 15 255 174 0 39 0 17 255 174 0 39 0 36 255 215 0 39 0 55 255 195 0 39 0 57 255 236 0 39 0 58 255 236 0 39 0 59 255 215 0 39 0 60 255 236 0 39 0 61 255 236 0 39 0 130 255 215 0 39 0 131 255 215 0 39 0 132 255 215 0 39 0 133 255 215 0 39 0 134 255 215 0 39 0 135 255 215 0 39 0 159 255 236 0 39 0 194 255 215 0 39 0 196 255 215 0 39 0 198 255 215 0 39 1 36 255 195 0 39 1 38 255 195 0 39 1 54 255 236 0 39 1 56 255 236 0 39 1 58 255 236 0 39 1 59 255 236 0 39 1 61 255 236 0 39 1 63 255 236 0 39 1 67 255 215 0 39 1 160 255 236 0 39 1 250 255 236 0 39 1 252 255 236 0 39 1 254 255 236 0 39 2 0 255 236 0 39 2 8 255 174 0 39 2 12 255 174 0 39 2 88 255 215 0 39 3 29 255 215 0 39 3 31 255 215 0 39 3 33 255 215 0 39 3 35 255 215 0 39 3 37 255 215 0 39 3 39 255 215 0 39 3 41 255 215 0 39 3 43 255 215 0 39 3 45 255 215 0 39 3 47 255 215 0 39 3 49 255 215 0 39 3 51 255 215 0 39 3 111 255 236 0 39 3 113 255 236 0 39 3 115 255 236 0 39 3 143 255 195 0 40 0 45 0 123 0 41 0 15 255 133 0 41 0 17 255 133 0 41 0 34 0 41 0 41 0 36 255 215 0 41 0 130 255 215 0 41 0 131 255 215 0 41 0 132 255 215 0 41 0 133 255 215 0 41 0 134 255 215 0 41 0 135 255 215 0 41 0 194 255 215 0 41 0 196 255 215 0 41 0 198 255 215 0 41 1 67 255 215 0 41 2 8 255 133 0 41 2 12 255 133 0 41 2 88 255 215 0 41 3 29 255 215 0 41 3 31 255 215 0 41 3 33 255 215 0 41 3 35 255 215 0 41 3 37 255 215 0 41 3 39 255 215 0 41 3 41 255 215 0 41 3 43 255 215 0 41 3 45 255 215 0 41 3 47 255 215 0 41 3 49 255 215 0 41 3 51 255 215 0 46 0 38 255 215 0 46 0 42 255 215 0 46 0 50 255 215 0 46 0 52 255 215 0 46 0 137 255 215 0 46 0 148 255 215 0 46 0 149 255 215 0 46 0 150 255 215 0 46 0 151 255 215 0 46 0 152 255 215 0 46 0 154 255 215 0 46 0 200 255 215 0 46 0 202 255 215 0 46 0 204 255 215 0 46 0 206 255 215 0 46 0 222 255 215 0 46 0 224 255 215 0 46 0 226 255 215 0 46 0 228 255 215 0 46 1 14 255 215 0 46 1 16 255 215 0 46 1 18 255 215 0 46 1 20 255 215 0 46 1 71 255 215 0 46 2 95 255 215 0 46 3 73 255 215 0 46 3 75 255 215 0 46 3 77 255 215 0 46 3 79 255 215 0 46 3 81 255 215 0 46 3 83 255 215 0 46 3 85 255 215 0 46 3 87 255 215 0 46 3 89 255 215 0 46 3 91 255 215 0 46 3 93 255 215 0 46 3 95 255 215 0 47 0 5 255 92 0 47 0 10 255 92 0 47 0 38 255 215 0 47 0 42 255 215 0 47 0 50 255 215 0 47 0 52 255 215 0 47 0 55 255 215 0 47 0 56 255 236 0 47 0 57 255 215 0 47 0 58 255 215 0 47 0 60 255 195 0 47 0 137 255 215 0 47 0 148 255 215 0 47 0 149 255 215 0 47 0 150 255 215 0 47 0 151 255 215 0 47 0 152 255 215 0 47 0 154 255 215 0 47 0 155 255 236 0 47 0 156 255 236 0 47 0 157 255 236 0 47 0 158 255 236 0 47 0 159 255 195 0 47 0 200 255 215 0 47 0 202 255 215 0 47 0 204 255 215 0 47 0 206 255 215 0 47 0 222 255 215 0 47 0 224 255 215 0 47 0 226 255 215 0 47 0 228 255 215 0 47 1 14 255 215 0 47 1 16 255 215 0 47 1 18 255 215 0 47 1 20 255 215 0 47 1 36 255 215 0 47 1 38 255 215 0 47 1 42 255 236 0 47 1 44 255 236 0 47 1 46 255 236 0 47 1 48 255 236 0 47 1 50 255 236 0 47 1 52 255 236 0 47 1 54 255 215 0 47 1 56 255 195 0 47 1 58 255 195 0 47 1 71 255 215 0 47 1 250 255 215 0 47 1 252 255 215 0 47 1 254 255 215 0 47 2 0 255 195 0 47 2 7 255 92 0 47 2 11 255 92 0 47 2 95 255 215 0 47 2 97 255 236 0 47 3 73 255 215 0 47 3 75 255 215 0 47 3 77 255 215 0 47 3 79 255 215 0 47 3 81 255 215 0 47 3 83 255 215 0 47 3 85 255 215 0 47 3 87 255 215 0 47 3 89 255 215 0 47 3 91 255 215 0 47 3 93 255 215 0 47 3 95 255 215 0 47 3 97 255 236 0 47 3 99 255 236 0 47 3 101 255 236 0 47 3 103 255 236 0 47 3 105 255 236 0 47 3 107 255 236 0 47 3 109 255 236 0 47 3 111 255 195 0 47 3 113 255 195 0 47 3 115 255 195 0 47 3 143 255 215 0 50 0 15 255 174 0 50 0 17 255 174 0 50 0 36 255 215 0 50 0 55 255 195 0 50 0 57 255 236 0 50 0 58 255 236 0 50 0 59 255 215 0 50 0 60 255 236 0 50 0 61 255 236 0 50 0 130 255 215 0 50 0 131 255 215 0 50 0 132 255 215 0 50 0 133 255 215 0 50 0 134 255 215 0 50 0 135 255 215 0 50 0 159 255 236 0 50 0 194 255 215 0 50 0 196 255 215 0 50 0 198 255 215 0 50 1 36 255 195 0 50 1 38 255 195 0 50 1 54 255 236 0 50 1 56 255 236 0 50 1 58 255 236 0 50 1 59 255 236 0 50 1 61 255 236 0 50 1 63 255 236 0 50 1 67 255 215 0 50 1 160 255 236 0 50 1 250 255 236 0 50 1 252 255 236 0 50 1 254 255 236 0 50 2 0 255 236 0 50 2 8 255 174 0 50 2 12 255 174 0 50 2 88 255 215 0 50 3 29 255 215 0 50 3 31 255 215 0 50 3 33 255 215 0 50 3 35 255 215 0 50 3 37 255 215 0 50 3 39 255 215 0 50 3 41 255 215 0 50 3 43 255 215 0 50 3 45 255 215 0 50 3 47 255 215 0 50 3 49 255 215 0 50 3 51 255 215 0 50 3 111 255 236 0 50 3 113 255 236 0 50 3 115 255 236 0 50 3 143 255 195 0 51 0 15 254 246 0 51 0 17 254 246 0 51 0 36 255 154 0 51 0 59 255 215 0 51 0 61 255 236 0 51 0 130 255 154 0 51 0 131 255 154 0 51 0 132 255 154 0 51 0 133 255 154 0 51 0 134 255 154 0 51 0 135 255 154 0 51 0 194 255 154 0 51 0 196 255 154 0 51 0 198 255 154 0 51 1 59 255 236 0 51 1 61 255 236 0 51 1 63 255 236 0 51 1 67 255 154 0 51 2 8 254 246 0 51 2 12 254 246 0 51 2 88 255 154 0 51 3 29 255 154 0 51 3 31 255 154 0 51 3 33 255 154 0 51 3 35 255 154 0 51 3 37 255 154 0 51 3 39 255 154 0 51 3 41 255 154 0 51 3 43 255 154 0 51 3 45 255 154 0 51 3 47 255 154 0 51 3 49 255 154 0 51 3 51 255 154 0 52 0 15 255 174 0 52 0 17 255 174 0 52 0 36 255 215 0 52 0 55 255 195 0 52 0 57 255 236 0 52 0 58 255 236 0 52 0 59 255 215 0 52 0 60 255 236 0 52 0 61 255 236 0 52 0 130 255 215 0 52 0 131 255 215 0 52 0 132 255 215 0 52 0 133 255 215 0 52 0 134 255 215 0 52 0 135 255 215 0 52 0 159 255 236 0 52 0 194 255 215 0 52 0 196 255 215 0 52 0 198 255 215 0 52 1 36 255 195 0 52 1 38 255 195 0 52 1 54 255 236 0 52 1 56 255 236 0 52 1 58 255 236 0 52 1 59 255 236 0 52 1 61 255 236 0 52 1 63 255 236 0 52 1 67 255 215 0 52 1 160 255 236 0 52 1 250 255 236 0 52 1 252 255 236 0 52 1 254 255 236 0 52 2 0 255 236 0 52 2 8 255 174 0 52 2 12 255 174 0 52 2 88 255 215 0 52 3 29 255 215 0 52 3 31 255 215 0 52 3 33 255 215 0 52 3 35 255 215 0 52 3 37 255 215 0 52 3 39 255 215 0 52 3 41 255 215 0 52 3 43 255 215 0 52 3 45 255 215 0 52 3 47 255 215 0 52 3 49 255 215 0 52 3 51 255 215 0 52 3 111 255 236 0 52 3 113 255 236 0 52 3 115 255 236 0 52 3 143 255 195 0 55 0 15 255 133 0 55 0 16 255 174 0 55 0 17 255 133 0 55 0 34 0 41 0 55 0 36 255 113 0 55 0 38 255 215 0 55 0 42 255 215 0 55 0 50 255 215 0 55 0 52 255 215 0 55 0 55 0 41 0 55 0 68 255 92 0 55 0 70 255 113 0 55 0 71 255 113 0 55 0 72 255 113 0 55 0 74 255 113 0 55 0 80 255 154 0 55 0 81 255 154 0 55 0 82 255 113 0 55 0 83 255 154 0 55 0 84 255 113 0 55 0 85 255 154 0 55 0 86 255 133 0 55 0 88 255 154 0 55 0 89 255 215 0 55 0 90 255 215 0 55 0 91 255 215 0 55 0 92 255 215 0 55 0 93 255 174 0 55 0 130 255 113 0 55 0 131 255 113 0 55 0 132 255 113 0 55 0 133 255 113 0 55 0 134 255 113 0 55 0 135 255 113 0 55 0 137 255 215 0 55 0 148 255 215 0 55 0 149 255 215 0 55 0 150 255 215 0 55 0 151 255 215 0 55 0 152 255 215 0 55 0 154 255 215 0 55 0 162 255 113 0 55 0 163 255 92 0 55 0 164 255 92 0 55 0 165 255 92 0 55 0 166 255 92 0 55 0 167 255 92 0 55 0 168 255 92 0 55 0 169 255 113 0 55 0 170 255 113 0 55 0 171 255 113 0 55 0 172 255 113 0 55 0 173 255 113 0 55 0 180 255 113 0 55 0 181 255 113 0 55 0 182 255 113 0 55 0 183 255 113 0 55 0 184 255 113 0 55 0 186 255 113 0 55 0 187 255 154 0 55 0 188 255 154 0 55 0 189 255 154 0 55 0 190 255 154 0 55 0 191 255 215 0 55 0 194 255 113 0 55 0 195 255 92 0 55 0 196 255 113 0 55 0 197 255 92 0 55 0 198 255 113 0 55 0 199 255 92 0 55 0 200 255 215 0 55 0 201 255 113 0 55 0 202 255 215 0 55 0 203 255 113 0 55 0 204 255 215 0 55 0 205 255 113 0 55 0 206 255 215 0 55 0 207 255 113 0 55 0 209 255 113 0 55 0 211 255 113 0 55 0 213 255 113 0 55 0 215 255 113 0 55 0 217 255 113 0 55 0 219 255 113 0 55 0 221 255 113 0 55 0 222 255 215 0 55 0 223 255 113 0 55 0 224 255 215 0 55 0 225 255 113 0 55 0 226 255 215 0 55 0 227 255 113 0 55 0 228 255 215 0 55 0 229 255 113 0 55 0 250 255 154 0 55 1 6 255 154 0 55 1 8 255 154 0 55 1 13 255 154 0 55 1 14 255 215 0 55 1 15 255 113 0 55 1 16 255 215 0 55 1 17 255 113 0 55 1 18 255 215 0 55 1 19 255 113 0 55 1 20 255 215 0 55 1 21 255 113 0 55 1 23 255 154 0 55 1 25 255 154 0 55 1 29 255 133 0 55 1 33 255 133 0 55 1 36 0 41 0 55 1 38 0 41 0 55 1 43 255 154 0 55 1 45 255 154 0 55 1 47 255 154 0 55 1 49 255 154 0 55 1 51 255 154 0 55 1 53 255 154 0 55 1 55 255 215 0 55 1 60 255 174 0 55 1 62 255 174 0 55 1 64 255 174 0 55 1 67 255 113 0 55 1 68 255 92 0 55 1 70 255 92 0 55 1 71 255 215 0 55 1 72 255 113 0 55 1 74 255 133 0 55 1 251 255 215 0 55 1 253 255 215 0 55 2 2 255 174 0 55 2 3 255 174 0 55 2 4 255 174 0 55 2 8 255 133 0 55 2 12 255 133 0 55 2 87 255 154 0 55 2 88 255 113 0 55 2 89 255 92 0 55 2 95 255 215 0 55 2 96 255 113 0 55 2 98 255 154 0 55 3 29 255 113 0 55 3 30 255 92 0 55 3 31 255 113 0 55 3 32 255 92 0 55 3 33 255 113 0 55 3 34 255 92 0 55 3 35 255 113 0 55 3 37 255 113 0 55 3 38 255 92 0 55 3 39 255 113 0 55 3 40 255 92 0 55 3 41 255 113 0 55 3 42 255 92 0 55 3 43 255 113 0 55 3 44 255 92 0 55 3 45 255 113 0 55 3 46 255 92 0 55 3 47 255 113 0 55 3 48 255 92 0 55 3 49 255 113 0 55 3 50 255 92 0 55 3 51 255 113 0 55 3 52 255 92 0 55 3 54 255 113 0 55 3 56 255 113 0 55 3 58 255 113 0 55 3 60 255 113 0 55 3 64 255 113 0 55 3 66 255 113 0 55 3 68 255 113 0 55 3 73 255 215 0 55 3 74 255 113 0 55 3 75 255 215 0 55 3 76 255 113 0 55 3 77 255 215 0 55 3 78 255 113 0 55 3 79 255 215 0 55 3 81 255 215 0 55 3 82 255 113 0 55 3 83 255 215 0 55 3 84 255 113 0 55 3 85 255 215 0 55 3 86 255 113 0 55 3 87 255 215 0 55 3 88 255 113 0 55 3 89 255 215 0 55 3 90 255 113 0 55 3 91 255 215 0 55 3 92 255 113 0 55 3 93 255 215 0 55 3 94 255 113 0 55 3 95 255 215 0 55 3 96 255 113 0 55 3 98 255 154 0 55 3 100 255 154 0 55 3 102 255 154 0 55 3 104 255 154 0 55 3 106 255 154 0 55 3 108 255 154 0 55 3 110 255 154 0 55 3 112 255 215 0 55 3 143 0 41 0 56 0 15 255 215 0 56 0 17 255 215 0 56 0 36 255 236 0 56 0 130 255 236 0 56 0 131 255 236 0 56 0 132 255 236 0 56 0 133 255 236 0 56 0 134 255 236 0 56 0 135 255 236 0 56 0 194 255 236 0 56 0 196 255 236 0 56 0 198 255 236 0 56 1 67 255 236 0 56 2 8 255 215 0 56 2 12 255 215 0 56 2 88 255 236 0 56 3 29 255 236 0 56 3 31 255 236 0 56 3 33 255 236 0 56 3 35 255 236 0 56 3 37 255 236 0 56 3 39 255 236 0 56 3 41 255 236 0 56 3 43 255 236 0 56 3 45 255 236 0 56 3 47 255 236 0 56 3 49 255 236 0 56 3 51 255 236 0 57 0 15 255 154 0 57 0 17 255 154 0 57 0 34 0 41 0 57 0 36 255 174 0 57 0 38 255 236 0 57 0 42 255 236 0 57 0 50 255 236 0 57 0 52 255 236 0 57 0 68 255 215 0 57 0 70 255 215 0 57 0 71 255 215 0 57 0 72 255 215 0 57 0 74 255 236 0 57 0 80 255 236 0 57 0 81 255 236 0 57 0 82 255 215 0 57 0 83 255 236 0 57 0 84 255 215 0 57 0 85 255 236 0 57 0 86 255 236 0 57 0 88 255 236 0 57 0 130 255 174 0 57 0 131 255 174 0 57 0 132 255 174 0 57 0 133 255 174 0 57 0 134 255 174 0 57 0 135 255 174 0 57 0 137 255 236 0 57 0 148 255 236 0 57 0 149 255 236 0 57 0 150 255 236 0 57 0 151 255 236 0 57 0 152 255 236 0 57 0 154 255 236 0 57 0 162 255 215 0 57 0 163 255 215 0 57 0 164 255 215 0 57 0 165 255 215 0 57 0 166 255 215 0 57 0 167 255 215 0 57 0 168 255 215 0 57 0 169 255 215 0 57 0 170 255 215 0 57 0 171 255 215 0 57 0 172 255 215 0 57 0 173 255 215 0 57 0 180 255 215 0 57 0 181 255 215 0 57 0 182 255 215 0 57 0 183 255 215 0 57 0 184 255 215 0 57 0 186 255 215 0 57 0 187 255 236 0 57 0 188 255 236 0 57 0 189 255 236 0 57 0 190 255 236 0 57 0 194 255 174 0 57 0 195 255 215 0 57 0 196 255 174 0 57 0 197 255 215 0 57 0 198 255 174 0 57 0 199 255 215 0 57 0 200 255 236 0 57 0 201 255 215 0 57 0 202 255 236 0 57 0 203 255 215 0 57 0 204 255 236 0 57 0 205 255 215 0 57 0 206 255 236 0 57 0 207 255 215 0 57 0 209 255 215 0 57 0 211 255 215 0 57 0 213 255 215 0 57 0 215 255 215 0 57 0 217 255 215 0 57 0 219 255 215 0 57 0 221 255 215 0 57 0 222 255 236 0 57 0 223 255 236 0 57 0 224 255 236 0 57 0 225 255 236 0 57 0 226 255 236 0 57 0 227 255 236 0 57 0 228 255 236 0 57 0 229 255 236 0 57 0 250 255 236 0 57 1 6 255 236 0 57 1 8 255 236 0 57 1 13 255 236 0 57 1 14 255 236 0 57 1 15 255 215 0 57 1 16 255 236 0 57 1 17 255 215 0 57 1 18 255 236 0 57 1 19 255 215 0 57 1 20 255 236 0 57 1 21 255 215 0 57 1 23 255 236 0 57 1 25 255 236 0 57 1 29 255 236 0 57 1 33 255 236 0 57 1 43 255 236 0 57 1 45 255 236 0 57 1 47 255 236 0 57 1 49 255 236 0 57 1 51 255 236 0 57 1 53 255 236 0 57 1 67 255 174 0 57 1 68 255 215 0 57 1 70 255 215 0 57 1 71 255 236 0 57 1 72 255 215 0 57 1 74 255 236 0 57 2 8 255 154 0 57 2 12 255 154 0 57 2 87 255 236 0 57 2 88 255 174 0 57 2 89 255 215 0 57 2 95 255 236 0 57 2 96 255 215 0 57 2 98 255 236 0 57 3 29 255 174 0 57 3 30 255 215 0 57 3 31 255 174 0 57 3 32 255 215 0 57 3 33 255 174 0 57 3 34 255 215 0 57 3 35 255 174 0 57 3 37 255 174 0 57 3 38 255 215 0 57 3 39 255 174 0 57 3 40 255 215 0 57 3 41 255 174 0 57 3 42 255 215 0 57 3 43 255 174 0 57 3 44 255 215 0 57 3 45 255 174 0 57 3 46 255 215 0 57 3 47 255 174 0 57 3 48 255 215 0 57 3 49 255 174 0 57 3 50 255 215 0 57 3 51 255 174 0 57 3 52 255 215 0 57 3 54 255 215 0 57 3 56 255 215 0 57 3 58 255 215 0 57 3 60 255 215 0 57 3 64 255 215 0 57 3 66 255 215 0 57 3 68 255 215 0 57 3 73 255 236 0 57 3 74 255 215 0 57 3 75 255 236 0 57 3 76 255 215 0 57 3 77 255 236 0 57 3 78 255 215 0 57 3 79 255 236 0 57 3 81 255 236 0 57 3 82 255 215 0 57 3 83 255 236 0 57 3 84 255 215 0 57 3 85 255 236 0 57 3 86 255 215 0 57 3 87 255 236 0 57 3 88 255 215 0 57 3 89 255 236 0 57 3 90 255 215 0 57 3 91 255 236 0 57 3 92 255 215 0 57 3 93 255 236 0 57 3 94 255 215 0 57 3 95 255 236 0 57 3 96 255 215 0 57 3 98 255 236 0 57 3 100 255 236 0 57 3 102 255 236 0 57 3 104 255 236 0 57 3 106 255 236 0 57 3 108 255 236 0 57 3 110 255 236 0 58 0 15 255 154 0 58 0 17 255 154 0 58 0 34 0 41 0 58 0 36 255 174 0 58 0 38 255 236 0 58 0 42 255 236 0 58 0 50 255 236 0 58 0 52 255 236 0 58 0 68 255 215 0 58 0 70 255 215 0 58 0 71 255 215 0 58 0 72 255 215 0 58 0 74 255 236 0 58 0 80 255 236 0 58 0 81 255 236 0 58 0 82 255 215 0 58 0 83 255 236 0 58 0 84 255 215 0 58 0 85 255 236 0 58 0 86 255 236 0 58 0 88 255 236 0 58 0 130 255 174 0 58 0 131 255 174 0 58 0 132 255 174 0 58 0 133 255 174 0 58 0 134 255 174 0 58 0 135 255 174 0 58 0 137 255 236 0 58 0 148 255 236 0 58 0 149 255 236 0 58 0 150 255 236 0 58 0 151 255 236 0 58 0 152 255 236 0 58 0 154 255 236 0 58 0 162 255 215 0 58 0 163 255 215 0 58 0 164 255 215 0 58 0 165 255 215 0 58 0 166 255 215 0 58 0 167 255 215 0 58 0 168 255 215 0 58 0 169 255 215 0 58 0 170 255 215 0 58 0 171 255 215 0 58 0 172 255 215 0 58 0 173 255 215 0 58 0 180 255 215 0 58 0 181 255 215 0 58 0 182 255 215 0 58 0 183 255 215 0 58 0 184 255 215 0 58 0 186 255 215 0 58 0 187 255 236 0 58 0 188 255 236 0 58 0 189 255 236 0 58 0 190 255 236 0 58 0 194 255 174 0 58 0 195 255 215 0 58 0 196 255 174 0 58 0 197 255 215 0 58 0 198 255 174 0 58 0 199 255 215 0 58 0 200 255 236 0 58 0 201 255 215 0 58 0 202 255 236 0 58 0 203 255 215 0 58 0 204 255 236 0 58 0 205 255 215 0 58 0 206 255 236 0 58 0 207 255 215 0 58 0 209 255 215 0 58 0 211 255 215 0 58 0 213 255 215 0 58 0 215 255 215 0 58 0 217 255 215 0 58 0 219 255 215 0 58 0 221 255 215 0 58 0 222 255 236 0 58 0 223 255 236 0 58 0 224 255 236 0 58 0 225 255 236 0 58 0 226 255 236 0 58 0 227 255 236 0 58 0 228 255 236 0 58 0 229 255 236 0 58 0 250 255 236 0 58 1 6 255 236 0 58 1 8 255 236 0 58 1 13 255 236 0 58 1 14 255 236 0 58 1 15 255 215 0 58 1 16 255 236 0 58 1 17 255 215 0 58 1 18 255 236 0 58 1 19 255 215 0 58 1 20 255 236 0 58 1 21 255 215 0 58 1 23 255 236 0 58 1 25 255 236 0 58 1 29 255 236 0 58 1 33 255 236 0 58 1 43 255 236 0 58 1 45 255 236 0 58 1 47 255 236 0 58 1 49 255 236 0 58 1 51 255 236 0 58 1 53 255 236 0 58 1 67 255 174 0 58 1 68 255 215 0 58 1 70 255 215 0 58 1 71 255 236 0 58 1 72 255 215 0 58 1 74 255 236 0 58 2 8 255 154 0 58 2 12 255 154 0 58 2 87 255 236 0 58 2 88 255 174 0 58 2 89 255 215 0 58 2 95 255 236 0 58 2 96 255 215 0 58 2 98 255 236 0 58 3 29 255 174 0 58 3 30 255 215 0 58 3 31 255 174 0 58 3 32 255 215 0 58 3 33 255 174 0 58 3 34 255 215 0 58 3 35 255 174 0 58 3 37 255 174 0 58 3 38 255 215 0 58 3 39 255 174 0 58 3 40 255 215 0 58 3 41 255 174 0 58 3 42 255 215 0 58 3 43 255 174 0 58 3 44 255 215 0 58 3 45 255 174 0 58 3 46 255 215 0 58 3 47 255 174 0 58 3 48 255 215 0 58 3 49 255 174 0 58 3 50 255 215 0 58 3 51 255 174 0 58 3 52 255 215 0 58 3 54 255 215 0 58 3 56 255 215 0 58 3 58 255 215 0 58 3 60 255 215 0 58 3 64 255 215 0 58 3 66 255 215 0 58 3 68 255 215 0 58 3 73 255 236 0 58 3 74 255 215 0 58 3 75 255 236 0 58 3 76 255 215 0 58 3 77 255 236 0 58 3 78 255 215 0 58 3 79 255 236 0 58 3 81 255 236 0 58 3 82 255 215 0 58 3 83 255 236 0 58 3 84 255 215 0 58 3 85 255 236 0 58 3 86 255 215 0 58 3 87 255 236 0 58 3 88 255 215 0 58 3 89 255 236 0 58 3 90 255 215 0 58 3 91 255 236 0 58 3 92 255 215 0 58 3 93 255 236 0 58 3 94 255 215 0 58 3 95 255 236 0 58 3 96 255 215 0 58 3 98 255 236 0 58 3 100 255 236 0 58 3 102 255 236 0 58 3 104 255 236 0 58 3 106 255 236 0 58 3 108 255 236 0 58 3 110 255 236 0 59 0 38 255 215 0 59 0 42 255 215 0 59 0 50 255 215 0 59 0 52 255 215 0 59 0 137 255 215 0 59 0 148 255 215 0 59 0 149 255 215 0 59 0 150 255 215 0 59 0 151 255 215 0 59 0 152 255 215 0 59 0 154 255 215 0 59 0 200 255 215 0 59 0 202 255 215 0 59 0 204 255 215 0 59 0 206 255 215 0 59 0 222 255 215 0 59 0 224 255 215 0 59 0 226 255 215 0 59 0 228 255 215 0 59 1 14 255 215 0 59 1 16 255 215 0 59 1 18 255 215 0 59 1 20 255 215 0 59 1 71 255 215 0 59 2 95 255 215 0 59 3 73 255 215 0 59 3 75 255 215 0 59 3 77 255 215 0 59 3 79 255 215 0 59 3 81 255 215 0 59 3 83 255 215 0 59 3 85 255 215 0 59 3 87 255 215 0 59 3 89 255 215 0 59 3 91 255 215 0 59 3 93 255 215 0 59 3 95 255 215 0 60 0 15 255 133 0 60 0 17 255 133 0 60 0 34 0 41 0 60 0 36 255 133 0 60 0 38 255 215 0 60 0 42 255 215 0 60 0 50 255 215 0 60 0 52 255 215 0 60 0 68 255 154 0 60 0 70 255 154 0 60 0 71 255 154 0 60 0 72 255 154 0 60 0 74 255 215 0 60 0 80 255 195 0 60 0 81 255 195 0 60 0 82 255 154 0 60 0 83 255 195 0 60 0 84 255 154 0 60 0 85 255 195 0 60 0 86 255 174 0 60 0 88 255 195 0 60 0 93 255 215 0 60 0 130 255 133 0 60 0 131 255 133 0 60 0 132 255 133 0 60 0 133 255 133 0 60 0 134 255 133 0 60 0 135 255 133 0 60 0 137 255 215 0 60 0 148 255 215 0 60 0 149 255 215 0 60 0 150 255 215 0 60 0 151 255 215 0 60 0 152 255 215 0 60 0 154 255 215 0 60 0 162 255 154 0 60 0 163 255 154 0 60 0 164 255 154 0 60 0 165 255 154 0 60 0 166 255 154 0 60 0 167 255 154 0 60 0 168 255 154 0 60 0 169 255 154 0 60 0 170 255 154 0 60 0 171 255 154 0 60 0 172 255 154 0 60 0 173 255 154 0 60 0 180 255 154 0 60 0 181 255 154 0 60 0 182 255 154 0 60 0 183 255 154 0 60 0 184 255 154 0 60 0 186 255 154 0 60 0 187 255 195 0 60 0 188 255 195 0 60 0 189 255 195 0 60 0 190 255 195 0 60 0 194 255 133 0 60 0 195 255 154 0 60 0 196 255 133 0 60 0 197 255 154 0 60 0 198 255 133 0 60 0 199 255 154 0 60 0 200 255 215 0 60 0 201 255 154 0 60 0 202 255 215 0 60 0 203 255 154 0 60 0 204 255 215 0 60 0 205 255 154 0 60 0 206 255 215 0 60 0 207 255 154 0 60 0 209 255 154 0 60 0 211 255 154 0 60 0 213 255 154 0 60 0 215 255 154 0 60 0 217 255 154 0 60 0 219 255 154 0 60 0 221 255 154 0 60 0 222 255 215 0 60 0 223 255 215 0 60 0 224 255 215 0 60 0 225 255 215 0 60 0 226 255 215 0 60 0 227 255 215 0 60 0 228 255 215 0 60 0 229 255 215 0 60 0 250 255 195 0 60 1 6 255 195 0 60 1 8 255 195 0 60 1 13 255 195 0 60 1 14 255 215 0 60 1 15 255 154 0 60 1 16 255 215 0 60 1 17 255 154 0 60 1 18 255 215 0 60 1 19 255 154 0 60 1 20 255 215 0 60 1 21 255 154 0 60 1 23 255 195 0 60 1 25 255 195 0 60 1 29 255 174 0 60 1 33 255 174 0 60 1 43 255 195 0 60 1 45 255 195 0 60 1 47 255 195 0 60 1 49 255 195 0 60 1 51 255 195 0 60 1 53 255 195 0 60 1 60 255 215 0 60 1 62 255 215 0 60 1 64 255 215 0 60 1 67 255 133 0 60 1 68 255 154 0 60 1 70 255 154 0 60 1 71 255 215 0 60 1 72 255 154 0 60 1 74 255 174 0 60 2 8 255 133 0 60 2 12 255 133 0 60 2 87 255 195 0 60 2 88 255 133 0 60 2 89 255 154 0 60 2 95 255 215 0 60 2 96 255 154 0 60 2 98 255 195 0 60 3 29 255 133 0 60 3 30 255 154 0 60 3 31 255 133 0 60 3 32 255 154 0 60 3 33 255 133 0 60 3 34 255 154 0 60 3 35 255 133 0 60 3 37 255 133 0 60 3 38 255 154 0 60 3 39 255 133 0 60 3 40 255 154 0 60 3 41 255 133 0 60 3 42 255 154 0 60 3 43 255 133 0 60 3 44 255 154 0 60 3 45 255 133 0 60 3 46 255 154 0 60 3 47 255 133 0 60 3 48 255 154 0 60 3 49 255 133 0 60 3 50 255 154 0 60 3 51 255 133 0 60 3 52 255 154 0 60 3 54 255 154 0 60 3 56 255 154 0 60 3 58 255 154 0 60 3 60 255 154 0 60 3 64 255 154 0 60 3 66 255 154 0 60 3 68 255 154 0 60 3 73 255 215 0 60 3 74 255 154 0 60 3 75 255 215 0 60 3 76 255 154 0 60 3 77 255 215 0 60 3 78 255 154 0 60 3 79 255 215 0 60 3 81 255 215 0 60 3 82 255 154 0 60 3 83 255 215 0 60 3 84 255 154 0 60 3 85 255 215 0 60 3 86 255 154 0 60 3 87 255 215 0 60 3 88 255 154 0 60 3 89 255 215 0 60 3 90 255 154 0 60 3 91 255 215 0 60 3 92 255 154 0 60 3 93 255 215 0 60 3 94 255 154 0 60 3 95 255 215 0 60 3 96 255 154 0 60 3 98 255 195 0 60 3 100 255 195 0 60 3 102 255 195 0 60 3 104 255 195 0 60 3 106 255 195 0 60 3 108 255 195 0 60 3 110 255 195 0 61 0 38 255 236 0 61 0 42 255 236 0 61 0 50 255 236 0 61 0 52 255 236 0 61 0 137 255 236 0 61 0 148 255 236 0 61 0 149 255 236 0 61 0 150 255 236 0 61 0 151 255 236 0 61 0 152 255 236 0 61 0 154 255 236 0 61 0 200 255 236 0 61 0 202 255 236 0 61 0 204 255 236 0 61 0 206 255 236 0 61 0 222 255 236 0 61 0 224 255 236 0 61 0 226 255 236 0 61 0 228 255 236 0 61 1 14 255 236 0 61 1 16 255 236 0 61 1 18 255 236 0 61 1 20 255 236 0 61 1 71 255 236 0 61 2 95 255 236 0 61 3 73 255 236 0 61 3 75 255 236 0 61 3 77 255 236 0 61 3 79 255 236 0 61 3 81 255 236 0 61 3 83 255 236 0 61 3 85 255 236 0 61 3 87 255 236 0 61 3 89 255 236 0 61 3 91 255 236 0 61 3 93 255 236 0 61 3 95 255 236 0 62 0 45 0 184 0 68 0 5 255 236 0 68 0 10 255 236 0 68 2 7 255 236 0 68 2 11 255 236 0 69 0 5 255 236 0 69 0 10 255 236 0 69 0 89 255 215 0 69 0 90 255 215 0 69 0 91 255 215 0 69 0 92 255 215 0 69 0 93 255 236 0 69 0 191 255 215 0 69 1 55 255 215 0 69 1 60 255 236 0 69 1 62 255 236 0 69 1 64 255 236 0 69 1 251 255 215 0 69 1 253 255 215 0 69 2 7 255 236 0 69 2 11 255 236 0 69 3 112 255 215 0 70 0 5 0 41 0 70 0 10 0 41 0 70 2 7 0 41 0 70 2 11 0 41 0 72 0 5 255 236 0 72 0 10 255 236 0 72 0 89 255 215 0 72 0 90 255 215 0 72 0 91 255 215 0 72 0 92 255 215 0 72 0 93 255 236 0 72 0 191 255 215 0 72 1 55 255 215 0 72 1 60 255 236 0 72 1 62 255 236 0 72 1 64 255 236 0 72 1 251 255 215 0 72 1 253 255 215 0 72 2 7 255 236 0 72 2 11 255 236 0 72 3 112 255 215 0 73 0 5 0 123 0 73 0 10 0 123 0 73 2 7 0 123 0 73 2 11 0 123 0 75 0 5 255 236 0 75 0 10 255 236 0 75 2 7 255 236 0 75 2 11 255 236 0 78 0 70 255 215 0 78 0 71 255 215 0 78 0 72 255 215 0 78 0 82 255 215 0 78 0 84 255 215 0 78 0 162 255 215 0 78 0 169 255 215 0 78 0 170 255 215 0 78 0 171 255 215 0 78 0 172 255 215 0 78 0 173 255 215 0 78 0 180 255 215 0 78 0 181 255 215 0 78 0 182 255 215 0 78 0 183 255 215 0 78 0 184 255 215 0 78 0 186 255 215 0 78 0 201 255 215 0 78 0 203 255 215 0 78 0 205 255 215 0 78 0 207 255 215 0 78 0 209 255 215 0 78 0 211 255 215 0 78 0 213 255 215 0 78 0 215 255 215 0 78 0 217 255 215 0 78 0 219 255 215 0 78 0 221 255 215 0 78 1 15 255 215 0 78 1 17 255 215 0 78 1 19 255 215 0 78 1 21 255 215 0 78 1 72 255 215 0 78 2 96 255 215 0 78 3 54 255 215 0 78 3 56 255 215 0 78 3 58 255 215 0 78 3 60 255 215 0 78 3 64 255 215 0 78 3 66 255 215 0 78 3 68 255 215 0 78 3 74 255 215 0 78 3 76 255 215 0 78 3 78 255 215 0 78 3 82 255 215 0 78 3 84 255 215 0 78 3 86 255 215 0 78 3 88 255 215 0 78 3 90 255 215 0 78 3 92 255 215 0 78 3 94 255 215 0 78 3 96 255 215 0 80 0 5 255 236 0 80 0 10 255 236 0 80 2 7 255 236 0 80 2 11 255 236 0 81 0 5 255 236 0 81 0 10 255 236 0 81 2 7 255 236 0 81 2 11 255 236 0 82 0 5 255 236 0 82 0 10 255 236 0 82 0 89 255 215 0 82 0 90 255 215 0 82 0 91 255 215 0 82 0 92 255 215 0 82 0 93 255 236 0 82 0 191 255 215 0 82 1 55 255 215 0 82 1 60 255 236 0 82 1 62 255 236 0 82 1 64 255 236 0 82 1 251 255 215 0 82 1 253 255 215 0 82 2 7 255 236 0 82 2 11 255 236 0 82 3 112 255 215 0 83 0 5 255 236 0 83 0 10 255 236 0 83 0 89 255 215 0 83 0 90 255 215 0 83 0 91 255 215 0 83 0 92 255 215 0 83 0 93 255 236 0 83 0 191 255 215 0 83 1 55 255 215 0 83 1 60 255 236 0 83 1 62 255 236 0 83 1 64 255 236 0 83 1 251 255 215 0 83 1 253 255 215 0 83 2 7 255 236 0 83 2 11 255 236 0 83 3 112 255 215 0 85 0 5 0 82 0 85 0 10 0 82 0 85 0 68 255 215 0 85 0 70 255 215 0 85 0 71 255 215 0 85 0 72 255 215 0 85 0 74 255 236 0 85 0 82 255 215 0 85 0 84 255 215 0 85 0 162 255 215 0 85 0 163 255 215 0 85 0 164 255 215 0 85 0 165 255 215 0 85 0 166 255 215 0 85 0 167 255 215 0 85 0 168 255 215 0 85 0 169 255 215 0 85 0 170 255 215 0 85 0 171 255 215 0 85 0 172 255 215 0 85 0 173 255 215 0 85 0 180 255 215 0 85 0 181 255 215 0 85 0 182 255 215 0 85 0 183 255 215 0 85 0 184 255 215 0 85 0 186 255 215 0 85 0 195 255 215 0 85 0 197 255 215 0 85 0 199 255 215 0 85 0 201 255 215 0 85 0 203 255 215 0 85 0 205 255 215 0 85 0 207 255 215 0 85 0 209 255 215 0 85 0 211 255 215 0 85 0 213 255 215 0 85 0 215 255 215 0 85 0 217 255 215 0 85 0 219 255 215 0 85 0 221 255 215 0 85 0 223 255 236 0 85 0 225 255 236 0 85 0 227 255 236 0 85 0 229 255 236 0 85 1 15 255 215 0 85 1 17 255 215 0 85 1 19 255 215 0 85 1 21 255 215 0 85 1 68 255 215 0 85 1 70 255 215 0 85 1 72 255 215 0 85 2 7 0 82 0 85 2 11 0 82 0 85 2 89 255 215 0 85 2 96 255 215 0 85 3 30 255 215 0 85 3 32 255 215 0 85 3 34 255 215 0 85 3 38 255 215 0 85 3 40 255 215 0 85 3 42 255 215 0 85 3 44 255 215 0 85 3 46 255 215 0 85 3 48 255 215 0 85 3 50 255 215 0 85 3 52 255 215 0 85 3 54 255 215 0 85 3 56 255 215 0 85 3 58 255 215 0 85 3 60 255 215 0 85 3 64 255 215 0 85 3 66 255 215 0 85 3 68 255 215 0 85 3 74 255 215 0 85 3 76 255 215 0 85 3 78 255 215 0 85 3 82 255 215 0 85 3 84 255 215 0 85 3 86 255 215 0 85 3 88 255 215 0 85 3 90 255 215 0 85 3 92 255 215 0 85 3 94 255 215 0 85 3 96 255 215 0 87 0 5 0 41 0 87 0 10 0 41 0 87 2 7 0 41 0 87 2 11 0 41 0 89 0 5 0 82 0 89 0 10 0 82 0 89 0 15 255 174 0 89 0 17 255 174 0 89 0 34 0 41 0 89 2 7 0 82 0 89 2 8 255 174 0 89 2 11 0 82 0 89 2 12 255 174 0 90 0 5 0 82 0 90 0 10 0 82 0 90 0 15 255 174 0 90 0 17 255 174 0 90 0 34 0 41 0 90 2 7 0 82 0 90 2 8 255 174 0 90 2 11 0 82 0 90 2 12 255 174 0 91 0 70 255 215 0 91 0 71 255 215 0 91 0 72 255 215 0 91 0 82 255 215 0 91 0 84 255 215 0 91 0 162 255 215 0 91 0 169 255 215 0 91 0 170 255 215 0 91 0 171 255 215 0 91 0 172 255 215 0 91 0 173 255 215 0 91 0 180 255 215 0 91 0 181 255 215 0 91 0 182 255 215 0 91 0 183 255 215 0 91 0 184 255 215 0 91 0 186 255 215 0 91 0 201 255 215 0 91 0 203 255 215 0 91 0 205 255 215 0 91 0 207 255 215 0 91 0 209 255 215 0 91 0 211 255 215 0 91 0 213 255 215 0 91 0 215 255 215 0 91 0 217 255 215 0 91 0 219 255 215 0 91 0 221 255 215 0 91 1 15 255 215 0 91 1 17 255 215 0 91 1 19 255 215 0 91 1 21 255 215 0 91 1 72 255 215 0 91 2 96 255 215 0 91 3 54 255 215 0 91 3 56 255 215 0 91 3 58 255 215 0 91 3 60 255 215 0 91 3 64 255 215 0 91 3 66 255 215 0 91 3 68 255 215 0 91 3 74 255 215 0 91 3 76 255 215 0 91 3 78 255 215 0 91 3 82 255 215 0 91 3 84 255 215 0 91 3 86 255 215 0 91 3 88 255 215 0 91 3 90 255 215 0 91 3 92 255 215 0 91 3 94 255 215 0 91 3 96 255 215 0 92 0 5 0 82 0 92 0 10 0 82 0 92 0 15 255 174 0 92 0 17 255 174 0 92 0 34 0 41 0 92 2 7 0 82 0 92 2 8 255 174 0 92 2 11 0 82 0 92 2 12 255 174 0 94 0 45 0 184 0 130 0 5 255 113 0 130 0 10 255 113 0 130 0 38 255 215 0 130 0 42 255 215 0 130 0 45 1 10 0 130 0 50 255 215 0 130 0 52 255 215 0 130 0 55 255 113 0 130 0 57 255 174 0 130 0 58 255 174 0 130 0 60 255 133 0 130 0 137 255 215 0 130 0 148 255 215 0 130 0 149 255 215 0 130 0 150 255 215 0 130 0 151 255 215 0 130 0 152 255 215 0 130 0 154 255 215 0 130 0 159 255 133 0 130 0 200 255 215 0 130 0 202 255 215 0 130 0 204 255 215 0 130 0 206 255 215 0 130 0 222 255 215 0 130 0 224 255 215 0 130 0 226 255 215 0 130 0 228 255 215 0 130 1 14 255 215 0 130 1 16 255 215 0 130 1 18 255 215 0 130 1 20 255 215 0 130 1 36 255 113 0 130 1 38 255 113 0 130 1 54 255 174 0 130 1 56 255 133 0 130 1 58 255 133 0 130 1 71 255 215 0 130 1 250 255 174 0 130 1 252 255 174 0 130 1 254 255 174 0 130 2 0 255 133 0 130 2 7 255 113 0 130 2 11 255 113 0 130 2 95 255 215 0 130 3 73 255 215 0 130 3 75 255 215 0 130 3 77 255 215 0 130 3 79 255 215 0 130 3 81 255 215 0 130 3 83 255 215 0 130 3 85 255 215 0 130 3 87 255 215 0 130 3 89 255 215 0 130 3 91 255 215 0 130 3 93 255 215 0 130 3 95 255 215 0 130 3 111 255 133 0 130 3 113 255 133 0 130 3 115 255 133 0 130 3 143 255 113 0 131 0 5 255 113 0 131 0 10 255 113 0 131 0 38 255 215 0 131 0 42 255 215 0 131 0 45 1 10 0 131 0 50 255 215 0 131 0 52 255 215 0 131 0 55 255 113 0 131 0 57 255 174 0 131 0 58 255 174 0 131 0 60 255 133 0 131 0 137 255 215 0 131 0 148 255 215 0 131 0 149 255 215 0 131 0 150 255 215 0 131 0 151 255 215 0 131 0 152 255 215 0 131 0 154 255 215 0 131 0 159 255 133 0 131 0 200 255 215 0 131 0 202 255 215 0 131 0 204 255 215 0 131 0 206 255 215 0 131 0 222 255 215 0 131 0 224 255 215 0 131 0 226 255 215 0 131 0 228 255 215 0 131 1 14 255 215 0 131 1 16 255 215 0 131 1 18 255 215 0 131 1 20 255 215 0 131 1 36 255 113 0 131 1 38 255 113 0 131 1 54 255 174 0 131 1 56 255 133 0 131 1 58 255 133 0 131 1 71 255 215 0 131 1 250 255 174 0 131 1 252 255 174 0 131 1 254 255 174 0 131 2 0 255 133 0 131 2 7 255 113 0 131 2 11 255 113 0 131 2 95 255 215 0 131 3 73 255 215 0 131 3 75 255 215 0 131 3 77 255 215 0 131 3 79 255 215 0 131 3 81 255 215 0 131 3 83 255 215 0 131 3 85 255 215 0 131 3 87 255 215 0 131 3 89 255 215 0 131 3 91 255 215 0 131 3 93 255 215 0 131 3 95 255 215 0 131 3 111 255 133 0 131 3 113 255 133 0 131 3 115 255 133 0 131 3 143 255 113 0 132 0 5 255 113 0 132 0 10 255 113 0 132 0 38 255 215 0 132 0 42 255 215 0 132 0 45 1 10 0 132 0 50 255 215 0 132 0 52 255 215 0 132 0 55 255 113 0 132 0 57 255 174 0 132 0 58 255 174 0 132 0 60 255 133 0 132 0 137 255 215 0 132 0 148 255 215 0 132 0 149 255 215 0 132 0 150 255 215 0 132 0 151 255 215 0 132 0 152 255 215 0 132 0 154 255 215 0 132 0 159 255 133 0 132 0 200 255 215 0 132 0 202 255 215 0 132 0 204 255 215 0 132 0 206 255 215 0 132 0 222 255 215 0 132 0 224 255 215 0 132 0 226 255 215 0 132 0 228 255 215 0 132 1 14 255 215 0 132 1 16 255 215 0 132 1 18 255 215 0 132 1 20 255 215 0 132 1 36 255 113 0 132 1 38 255 113 0 132 1 54 255 174 0 132 1 56 255 133 0 132 1 58 255 133 0 132 1 71 255 215 0 132 1 250 255 174 0 132 1 252 255 174 0 132 1 254 255 174 0 132 2 0 255 133 0 132 2 7 255 113 0 132 2 11 255 113 0 132 2 95 255 215 0 132 3 73 255 215 0 132 3 75 255 215 0 132 3 77 255 215 0 132 3 79 255 215 0 132 3 81 255 215 0 132 3 83 255 215 0 132 3 85 255 215 0 132 3 87 255 215 0 132 3 89 255 215 0 132 3 91 255 215 0 132 3 93 255 215 0 132 3 95 255 215 0 132 3 111 255 133 0 132 3 113 255 133 0 132 3 115 255 133 0 132 3 143 255 113 0 133 0 5 255 113 0 133 0 10 255 113 0 133 0 38 255 215 0 133 0 42 255 215 0 133 0 45 1 10 0 133 0 50 255 215 0 133 0 52 255 215 0 133 0 55 255 113 0 133 0 57 255 174 0 133 0 58 255 174 0 133 0 60 255 133 0 133 0 137 255 215 0 133 0 148 255 215 0 133 0 149 255 215 0 133 0 150 255 215 0 133 0 151 255 215 0 133 0 152 255 215 0 133 0 154 255 215 0 133 0 159 255 133 0 133 0 200 255 215 0 133 0 202 255 215 0 133 0 204 255 215 0 133 0 206 255 215 0 133 0 222 255 215 0 133 0 224 255 215 0 133 0 226 255 215 0 133 0 228 255 215 0 133 1 14 255 215 0 133 1 16 255 215 0 133 1 18 255 215 0 133 1 20 255 215 0 133 1 36 255 113 0 133 1 38 255 113 0 133 1 54 255 174 0 133 1 56 255 133 0 133 1 58 255 133 0 133 1 71 255 215 0 133 1 250 255 174 0 133 1 252 255 174 0 133 1 254 255 174 0 133 2 0 255 133 0 133 2 7 255 113 0 133 2 11 255 113 0 133 2 95 255 215 0 133 3 73 255 215 0 133 3 75 255 215 0 133 3 77 255 215 0 133 3 79 255 215 0 133 3 81 255 215 0 133 3 83 255 215 0 133 3 85 255 215 0 133 3 87 255 215 0 133 3 89 255 215 0 133 3 91 255 215 0 133 3 93 255 215 0 133 3 95 255 215 0 133 3 111 255 133 0 133 3 113 255 133 0 133 3 115 255 133 0 133 3 143 255 113 0 134 0 5 255 113 0 134 0 10 255 113 0 134 0 38 255 215 0 134 0 42 255 215 0 134 0 45 1 10 0 134 0 50 255 215 0 134 0 52 255 215 0 134 0 55 255 113 0 134 0 57 255 174 0 134 0 58 255 174 0 134 0 60 255 133 0 134 0 137 255 215 0 134 0 148 255 215 0 134 0 149 255 215 0 134 0 150 255 215 0 134 0 151 255 215 0 134 0 152 255 215 0 134 0 154 255 215 0 134 0 159 255 133 0 134 0 200 255 215 0 134 0 202 255 215 0 134 0 204 255 215 0 134 0 206 255 215 0 134 0 222 255 215 0 134 0 224 255 215 0 134 0 226 255 215 0 134 0 228 255 215 0 134 1 14 255 215 0 134 1 16 255 215 0 134 1 18 255 215 0 134 1 20 255 215 0 134 1 36 255 113 0 134 1 38 255 113 0 134 1 54 255 174 0 134 1 56 255 133 0 134 1 58 255 133 0 134 1 71 255 215 0 134 1 250 255 174 0 134 1 252 255 174 0 134 1 254 255 174 0 134 2 0 255 133 0 134 2 7 255 113 0 134 2 11 255 113 0 134 2 95 255 215 0 134 3 73 255 215 0 134 3 75 255 215 0 134 3 77 255 215 0 134 3 79 255 215 0 134 3 81 255 215 0 134 3 83 255 215 0 134 3 85 255 215 0 134 3 87 255 215 0 134 3 89 255 215 0 134 3 91 255 215 0 134 3 93 255 215 0 134 3 95 255 215 0 134 3 111 255 133 0 134 3 113 255 133 0 134 3 115 255 133 0 134 3 143 255 113 0 135 0 5 255 113 0 135 0 10 255 113 0 135 0 38 255 215 0 135 0 42 255 215 0 135 0 45 1 10 0 135 0 50 255 215 0 135 0 52 255 215 0 135 0 55 255 113 0 135 0 57 255 174 0 135 0 58 255 174 0 135 0 60 255 133 0 135 0 137 255 215 0 135 0 148 255 215 0 135 0 149 255 215 0 135 0 150 255 215 0 135 0 151 255 215 0 135 0 152 255 215 0 135 0 154 255 215 0 135 0 159 255 133 0 135 0 200 255 215 0 135 0 202 255 215 0 135 0 204 255 215 0 135 0 206 255 215 0 135 0 222 255 215 0 135 0 224 255 215 0 135 0 226 255 215 0 135 0 228 255 215 0 135 1 14 255 215 0 135 1 16 255 215 0 135 1 18 255 215 0 135 1 20 255 215 0 135 1 36 255 113 0 135 1 38 255 113 0 135 1 54 255 174 0 135 1 56 255 133 0 135 1 58 255 133 0 135 1 71 255 215 0 135 1 250 255 174 0 135 1 252 255 174 0 135 1 254 255 174 0 135 2 0 255 133 0 135 2 7 255 113 0 135 2 11 255 113 0 135 2 95 255 215 0 135 3 73 255 215 0 135 3 75 255 215 0 135 3 77 255 215 0 135 3 79 255 215 0 135 3 81 255 215 0 135 3 83 255 215 0 135 3 85 255 215 0 135 3 87 255 215 0 135 3 89 255 215 0 135 3 91 255 215 0 135 3 93 255 215 0 135 3 95 255 215 0 135 3 111 255 133 0 135 3 113 255 133 0 135 3 115 255 133 0 135 3 143 255 113 0 136 0 45 0 123 0 137 0 38 255 215 0 137 0 42 255 215 0 137 0 50 255 215 0 137 0 52 255 215 0 137 0 137 255 215 0 137 0 148 255 215 0 137 0 149 255 215 0 137 0 150 255 215 0 137 0 151 255 215 0 137 0 152 255 215 0 137 0 154 255 215 0 137 0 200 255 215 0 137 0 202 255 215 0 137 0 204 255 215 0 137 0 206 255 215 0 137 0 222 255 215 0 137 0 224 255 215 0 137 0 226 255 215 0 137 0 228 255 215 0 137 1 14 255 215 0 137 1 16 255 215 0 137 1 18 255 215 0 137 1 20 255 215 0 137 1 71 255 215 0 137 2 95 255 215 0 137 3 73 255 215 0 137 3 75 255 215 0 137 3 77 255 215 0 137 3 79 255 215 0 137 3 81 255 215 0 137 3 83 255 215 0 137 3 85 255 215 0 137 3 87 255 215 0 137 3 89 255 215 0 137 3 91 255 215 0 137 3 93 255 215 0 137 3 95 255 215 0 138 0 45 0 123 0 139 0 45 0 123 0 140 0 45 0 123 0 141 0 45 0 123 0 146 0 15 255 174 0 146 0 17 255 174 0 146 0 36 255 215 0 146 0 55 255 195 0 146 0 57 255 236 0 146 0 58 255 236 0 146 0 59 255 215 0 146 0 60 255 236 0 146 0 61 255 236 0 146 0 130 255 215 0 146 0 131 255 215 0 146 0 132 255 215 0 146 0 133 255 215 0 146 0 134 255 215 0 146 0 135 255 215 0 146 0 159 255 236 0 146 0 194 255 215 0 146 0 196 255 215 0 146 0 198 255 215 0 146 1 36 255 195 0 146 1 38 255 195 0 146 1 54 255 236 0 146 1 56 255 236 0 146 1 58 255 236 0 146 1 59 255 236 0 146 1 61 255 236 0 146 1 63 255 236 0 146 1 67 255 215 0 146 1 160 255 236 0 146 1 250 255 236 0 146 1 252 255 236 0 146 1 254 255 236 0 146 2 0 255 236 0 146 2 8 255 174 0 146 2 12 255 174 0 146 2 88 255 215 0 146 3 29 255 215 0 146 3 31 255 215 0 146 3 33 255 215 0 146 3 35 255 215 0 146 3 37 255 215 0 146 3 39 255 215 0 146 3 41 255 215 0 146 3 43 255 215 0 146 3 45 255 215 0 146 3 47 255 215 0 146 3 49 255 215 0 146 3 51 255 215 0 146 3 111 255 236 0 146 3 113 255 236 0 146 3 115 255 236 0 146 3 143 255 195 0 148 0 15 255 174 0 148 0 17 255 174 0 148 0 36 255 215 0 148 0 55 255 195 0 148 0 57 255 236 0 148 0 58 255 236 0 148 0 59 255 215 0 148 0 60 255 236 0 148 0 61 255 236 0 148 0 130 255 215 0 148 0 131 255 215 0 148 0 132 255 215 0 148 0 133 255 215 0 148 0 134 255 215 0 148 0 135 255 215 0 148 0 159 255 236 0 148 0 194 255 215 0 148 0 196 255 215 0 148 0 198 255 215 0 148 1 36 255 195 0 148 1 38 255 195 0 148 1 54 255 236 0 148 1 56 255 236 0 148 1 58 255 236 0 148 1 59 255 236 0 148 1 61 255 236 0 148 1 63 255 236 0 148 1 67 255 215 0 148 1 160 255 236 0 148 1 250 255 236 0 148 1 252 255 236 0 148 1 254 255 236 0 148 2 0 255 236 0 148 2 8 255 174 0 148 2 12 255 174 0 148 2 88 255 215 0 148 3 29 255 215 0 148 3 31 255 215 0 148 3 33 255 215 0 148 3 35 255 215 0 148 3 37 255 215 0 148 3 39 255 215 0 148 3 41 255 215 0 148 3 43 255 215 0 148 3 45 255 215 0 148 3 47 255 215 0 148 3 49 255 215 0 148 3 51 255 215 0 148 3 111 255 236 0 148 3 113 255 236 0 148 3 115 255 236 0 148 3 143 255 195 0 149 0 15 255 174 0 149 0 17 255 174 0 149 0 36 255 215 0 149 0 55 255 195 0 149 0 57 255 236 0 149 0 58 255 236 0 149 0 59 255 215 0 149 0 60 255 236 0 149 0 61 255 236 0 149 0 130 255 215 0 149 0 131 255 215 0 149 0 132 255 215 0 149 0 133 255 215 0 149 0 134 255 215 0 149 0 135 255 215 0 149 0 159 255 236 0 149 0 194 255 215 0 149 0 196 255 215 0 149 0 198 255 215 0 149 1 36 255 195 0 149 1 38 255 195 0 149 1 54 255 236 0 149 1 56 255 236 0 149 1 58 255 236 0 149 1 59 255 236 0 149 1 61 255 236 0 149 1 63 255 236 0 149 1 67 255 215 0 149 1 160 255 236 0 149 1 250 255 236 0 149 1 252 255 236 0 149 1 254 255 236 0 149 2 0 255 236 0 149 2 8 255 174 0 149 2 12 255 174 0 149 2 88 255 215 0 149 3 29 255 215 0 149 3 31 255 215 0 149 3 33 255 215 0 149 3 35 255 215 0 149 3 37 255 215 0 149 3 39 255 215 0 149 3 41 255 215 0 149 3 43 255 215 0 149 3 45 255 215 0 149 3 47 255 215 0 149 3 49 255 215 0 149 3 51 255 215 0 149 3 111 255 236 0 149 3 113 255 236 0 149 3 115 255 236 0 149 3 143 255 195 0 150 0 15 255 174 0 150 0 17 255 174 0 150 0 36 255 215 0 150 0 55 255 195 0 150 0 57 255 236 0 150 0 58 255 236 0 150 0 59 255 215 0 150 0 60 255 236 0 150 0 61 255 236 0 150 0 130 255 215 0 150 0 131 255 215 0 150 0 132 255 215 0 150 0 133 255 215 0 150 0 134 255 215 0 150 0 135 255 215 0 150 0 159 255 236 0 150 0 194 255 215 0 150 0 196 255 215 0 150 0 198 255 215 0 150 1 36 255 195 0 150 1 38 255 195 0 150 1 54 255 236 0 150 1 56 255 236 0 150 1 58 255 236 0 150 1 59 255 236 0 150 1 61 255 236 0 150 1 63 255 236 0 150 1 67 255 215 0 150 1 160 255 236 0 150 1 250 255 236 0 150 1 252 255 236 0 150 1 254 255 236 0 150 2 0 255 236 0 150 2 8 255 174 0 150 2 12 255 174 0 150 2 88 255 215 0 150 3 29 255 215 0 150 3 31 255 215 0 150 3 33 255 215 0 150 3 35 255 215 0 150 3 37 255 215 0 150 3 39 255 215 0 150 3 41 255 215 0 150 3 43 255 215 0 150 3 45 255 215 0 150 3 47 255 215 0 150 3 49 255 215 0 150 3 51 255 215 0 150 3 111 255 236 0 150 3 113 255 236 0 150 3 115 255 236 0 150 3 143 255 195 0 151 0 15 255 174 0 151 0 17 255 174 0 151 0 36 255 215 0 151 0 55 255 195 0 151 0 57 255 236 0 151 0 58 255 236 0 151 0 59 255 215 0 151 0 60 255 236 0 151 0 61 255 236 0 151 0 130 255 215 0 151 0 131 255 215 0 151 0 132 255 215 0 151 0 133 255 215 0 151 0 134 255 215 0 151 0 135 255 215 0 151 0 159 255 236 0 151 0 194 255 215 0 151 0 196 255 215 0 151 0 198 255 215 0 151 1 36 255 195 0 151 1 38 255 195 0 151 1 54 255 236 0 151 1 56 255 236 0 151 1 58 255 236 0 151 1 59 255 236 0 151 1 61 255 236 0 151 1 63 255 236 0 151 1 67 255 215 0 151 1 160 255 236 0 151 1 250 255 236 0 151 1 252 255 236 0 151 1 254 255 236 0 151 2 0 255 236 0 151 2 8 255 174 0 151 2 12 255 174 0 151 2 88 255 215 0 151 3 29 255 215 0 151 3 31 255 215 0 151 3 33 255 215 0 151 3 35 255 215 0 151 3 37 255 215 0 151 3 39 255 215 0 151 3 41 255 215 0 151 3 43 255 215 0 151 3 45 255 215 0 151 3 47 255 215 0 151 3 49 255 215 0 151 3 51 255 215 0 151 3 111 255 236 0 151 3 113 255 236 0 151 3 115 255 236 0 151 3 143 255 195 0 152 0 15 255 174 0 152 0 17 255 174 0 152 0 36 255 215 0 152 0 55 255 195 0 152 0 57 255 236 0 152 0 58 255 236 0 152 0 59 255 215 0 152 0 60 255 236 0 152 0 61 255 236 0 152 0 130 255 215 0 152 0 131 255 215 0 152 0 132 255 215 0 152 0 133 255 215 0 152 0 134 255 215 0 152 0 135 255 215 0 152 0 159 255 236 0 152 0 194 255 215 0 152 0 196 255 215 0 152 0 198 255 215 0 152 1 36 255 195 0 152 1 38 255 195 0 152 1 54 255 236 0 152 1 56 255 236 0 152 1 58 255 236 0 152 1 59 255 236 0 152 1 61 255 236 0 152 1 63 255 236 0 152 1 67 255 215 0 152 1 160 255 236 0 152 1 250 255 236 0 152 1 252 255 236 0 152 1 254 255 236 0 152 2 0 255 236 0 152 2 8 255 174 0 152 2 12 255 174 0 152 2 88 255 215 0 152 3 29 255 215 0 152 3 31 255 215 0 152 3 33 255 215 0 152 3 35 255 215 0 152 3 37 255 215 0 152 3 39 255 215 0 152 3 41 255 215 0 152 3 43 255 215 0 152 3 45 255 215 0 152 3 47 255 215 0 152 3 49 255 215 0 152 3 51 255 215 0 152 3 111 255 236 0 152 3 113 255 236 0 152 3 115 255 236 0 152 3 143 255 195 0 154 0 15 255 174 0 154 0 17 255 174 0 154 0 36 255 215 0 154 0 55 255 195 0 154 0 57 255 236 0 154 0 58 255 236 0 154 0 59 255 215 0 154 0 60 255 236 0 154 0 61 255 236 0 154 0 130 255 215 0 154 0 131 255 215 0 154 0 132 255 215 0 154 0 133 255 215 0 154 0 134 255 215 0 154 0 135 255 215 0 154 0 159 255 236 0 154 0 194 255 215 0 154 0 196 255 215 0 154 0 198 255 215 0 154 1 36 255 195 0 154 1 38 255 195 0 154 1 54 255 236 0 154 1 56 255 236 0 154 1 58 255 236 0 154 1 59 255 236 0 154 1 61 255 236 0 154 1 63 255 236 0 154 1 67 255 215 0 154 1 160 255 236 0 154 1 250 255 236 0 154 1 252 255 236 0 154 1 254 255 236 0 154 2 0 255 236 0 154 2 8 255 174 0 154 2 12 255 174 0 154 2 88 255 215 0 154 3 29 255 215 0 154 3 31 255 215 0 154 3 33 255 215 0 154 3 35 255 215 0 154 3 37 255 215 0 154 3 39 255 215 0 154 3 41 255 215 0 154 3 43 255 215 0 154 3 45 255 215 0 154 3 47 255 215 0 154 3 49 255 215 0 154 3 51 255 215 0 154 3 111 255 236 0 154 3 113 255 236 0 154 3 115 255 236 0 154 3 143 255 195 0 155 0 15 255 215 0 155 0 17 255 215 0 155 0 36 255 236 0 155 0 130 255 236 0 155 0 131 255 236 0 155 0 132 255 236 0 155 0 133 255 236 0 155 0 134 255 236 0 155 0 135 255 236 0 155 0 194 255 236 0 155 0 196 255 236 0 155 0 198 255 236 0 155 1 67 255 236 0 155 2 8 255 215 0 155 2 12 255 215 0 155 2 88 255 236 0 155 3 29 255 236 0 155 3 31 255 236 0 155 3 33 255 236 0 155 3 35 255 236 0 155 3 37 255 236 0 155 3 39 255 236 0 155 3 41 255 236 0 155 3 43 255 236 0 155 3 45 255 236 0 155 3 47 255 236 0 155 3 49 255 236 0 155 3 51 255 236 0 156 0 15 255 215 0 156 0 17 255 215 0 156 0 36 255 236 0 156 0 130 255 236 0 156 0 131 255 236 0 156 0 132 255 236 0 156 0 133 255 236 0 156 0 134 255 236 0 156 0 135 255 236 0 156 0 194 255 236 0 156 0 196 255 236 0 156 0 198 255 236 0 156 1 67 255 236 0 156 2 8 255 215 0 156 2 12 255 215 0 156 2 88 255 236 0 156 3 29 255 236 0 156 3 31 255 236 0 156 3 33 255 236 0 156 3 35 255 236 0 156 3 37 255 236 0 156 3 39 255 236 0 156 3 41 255 236 0 156 3 43 255 236 0 156 3 45 255 236 0 156 3 47 255 236 0 156 3 49 255 236 0 156 3 51 255 236 0 157 0 15 255 215 0 157 0 17 255 215 0 157 0 36 255 236 0 157 0 130 255 236 0 157 0 131 255 236 0 157 0 132 255 236 0 157 0 133 255 236 0 157 0 134 255 236 0 157 0 135 255 236 0 157 0 194 255 236 0 157 0 196 255 236 0 157 0 198 255 236 0 157 1 67 255 236 0 157 2 8 255 215 0 157 2 12 255 215 0 157 2 88 255 236 0 157 3 29 255 236 0 157 3 31 255 236 0 157 3 33 255 236 0 157 3 35 255 236 0 157 3 37 255 236 0 157 3 39 255 236 0 157 3 41 255 236 0 157 3 43 255 236 0 157 3 45 255 236 0 157 3 47 255 236 0 157 3 49 255 236 0 157 3 51 255 236 0 158 0 15 255 215 0 158 0 17 255 215 0 158 0 36 255 236 0 158 0 130 255 236 0 158 0 131 255 236 0 158 0 132 255 236 0 158 0 133 255 236 0 158 0 134 255 236 0 158 0 135 255 236 0 158 0 194 255 236 0 158 0 196 255 236 0 158 0 198 255 236 0 158 1 67 255 236 0 158 2 8 255 215 0 158 2 12 255 215 0 158 2 88 255 236 0 158 3 29 255 236 0 158 3 31 255 236 0 158 3 33 255 236 0 158 3 35 255 236 0 158 3 37 255 236 0 158 3 39 255 236 0 158 3 41 255 236 0 158 3 43 255 236 0 158 3 45 255 236 0 158 3 47 255 236 0 158 3 49 255 236 0 158 3 51 255 236 0 159 0 15 255 133 0 159 0 17 255 133 0 159 0 34 0 41 0 159 0 36 255 133 0 159 0 38 255 215 0 159 0 42 255 215 0 159 0 50 255 215 0 159 0 52 255 215 0 159 0 68 255 154 0 159 0 70 255 154 0 159 0 71 255 154 0 159 0 72 255 154 0 159 0 74 255 215 0 159 0 80 255 195 0 159 0 81 255 195 0 159 0 82 255 154 0 159 0 83 255 195 0 159 0 84 255 154 0 159 0 85 255 195 0 159 0 86 255 174 0 159 0 88 255 195 0 159 0 93 255 215 0 159 0 130 255 133 0 159 0 131 255 133 0 159 0 132 255 133 0 159 0 133 255 133 0 159 0 134 255 133 0 159 0 135 255 133 0 159 0 137 255 215 0 159 0 148 255 215 0 159 0 149 255 215 0 159 0 150 255 215 0 159 0 151 255 215 0 159 0 152 255 215 0 159 0 154 255 215 0 159 0 162 255 154 0 159 0 163 255 154 0 159 0 164 255 154 0 159 0 165 255 154 0 159 0 166 255 154 0 159 0 167 255 154 0 159 0 168 255 154 0 159 0 169 255 154 0 159 0 170 255 154 0 159 0 171 255 154 0 159 0 172 255 154 0 159 0 173 255 154 0 159 0 180 255 154 0 159 0 181 255 154 0 159 0 182 255 154 0 159 0 183 255 154 0 159 0 184 255 154 0 159 0 186 255 154 0 159 0 187 255 195 0 159 0 188 255 195 0 159 0 189 255 195 0 159 0 190 255 195 0 159 0 194 255 133 0 159 0 195 255 154 0 159 0 196 255 133 0 159 0 197 255 154 0 159 0 198 255 133 0 159 0 199 255 154 0 159 0 200 255 215 0 159 0 201 255 154 0 159 0 202 255 215 0 159 0 203 255 154 0 159 0 204 255 215 0 159 0 205 255 154 0 159 0 206 255 215 0 159 0 207 255 154 0 159 0 209 255 154 0 159 0 211 255 154 0 159 0 213 255 154 0 159 0 215 255 154 0 159 0 217 255 154 0 159 0 219 255 154 0 159 0 221 255 154 0 159 0 222 255 215 0 159 0 223 255 215 0 159 0 224 255 215 0 159 0 225 255 215 0 159 0 226 255 215 0 159 0 227 255 215 0 159 0 228 255 215 0 159 0 229 255 215 0 159 0 250 255 195 0 159 1 6 255 195 0 159 1 8 255 195 0 159 1 13 255 195 0 159 1 14 255 215 0 159 1 15 255 154 0 159 1 16 255 215 0 159 1 17 255 154 0 159 1 18 255 215 0 159 1 19 255 154 0 159 1 20 255 215 0 159 1 21 255 154 0 159 1 23 255 195 0 159 1 25 255 195 0 159 1 29 255 174 0 159 1 33 255 174 0 159 1 43 255 195 0 159 1 45 255 195 0 159 1 47 255 195 0 159 1 49 255 195 0 159 1 51 255 195 0 159 1 53 255 195 0 159 1 60 255 215 0 159 1 62 255 215 0 159 1 64 255 215 0 159 1 67 255 133 0 159 1 68 255 154 0 159 1 70 255 154 0 159 1 71 255 215 0 159 1 72 255 154 0 159 1 74 255 174 0 159 2 8 255 133 0 159 2 12 255 133 0 159 2 87 255 195 0 159 2 88 255 133 0 159 2 89 255 154 0 159 2 95 255 215 0 159 2 96 255 154 0 159 2 98 255 195 0 159 3 29 255 133 0 159 3 30 255 154 0 159 3 31 255 133 0 159 3 32 255 154 0 159 3 33 255 133 0 159 3 34 255 154 0 159 3 35 255 133 0 159 3 37 255 133 0 159 3 38 255 154 0 159 3 39 255 133 0 159 3 40 255 154 0 159 3 41 255 133 0 159 3 42 255 154 0 159 3 43 255 133 0 159 3 44 255 154 0 159 3 45 255 133 0 159 3 46 255 154 0 159 3 47 255 133 0 159 3 48 255 154 0 159 3 49 255 133 0 159 3 50 255 154 0 159 3 51 255 133 0 159 3 52 255 154 0 159 3 54 255 154 0 159 3 56 255 154 0 159 3 58 255 154 0 159 3 60 255 154 0 159 3 64 255 154 0 159 3 66 255 154 0 159 3 68 255 154 0 159 3 73 255 215 0 159 3 74 255 154 0 159 3 75 255 215 0 159 3 76 255 154 0 159 3 77 255 215 0 159 3 78 255 154 0 159 3 79 255 215 0 159 3 81 255 215 0 159 3 82 255 154 0 159 3 83 255 215 0 159 3 84 255 154 0 159 3 85 255 215 0 159 3 86 255 154 0 159 3 87 255 215 0 159 3 88 255 154 0 159 3 89 255 215 0 159 3 90 255 154 0 159 3 91 255 215 0 159 3 92 255 154 0 159 3 93 255 215 0 159 3 94 255 154 0 159 3 95 255 215 0 159 3 96 255 154 0 159 3 98 255 195 0 159 3 100 255 195 0 159 3 102 255 195 0 159 3 104 255 195 0 159 3 106 255 195 0 159 3 108 255 195 0 159 3 110 255 195 0 160 0 15 254 246 0 160 0 17 254 246 0 160 0 36 255 154 0 160 0 59 255 215 0 160 0 61 255 236 0 160 0 130 255 154 0 160 0 131 255 154 0 160 0 132 255 154 0 160 0 133 255 154 0 160 0 134 255 154 0 160 0 135 255 154 0 160 0 194 255 154 0 160 0 196 255 154 0 160 0 198 255 154 0 160 1 59 255 236 0 160 1 61 255 236 0 160 1 63 255 236 0 160 1 67 255 154 0 160 2 8 254 246 0 160 2 12 254 246 0 160 2 88 255 154 0 160 3 29 255 154 0 160 3 31 255 154 0 160 3 33 255 154 0 160 3 35 255 154 0 160 3 37 255 154 0 160 3 39 255 154 0 160 3 41 255 154 0 160 3 43 255 154 0 160 3 45 255 154 0 160 3 47 255 154 0 160 3 49 255 154 0 160 3 51 255 154 0 162 0 5 255 236 0 162 0 10 255 236 0 162 2 7 255 236 0 162 2 11 255 236 0 163 0 5 255 236 0 163 0 10 255 236 0 163 2 7 255 236 0 163 2 11 255 236 0 164 0 5 255 236 0 164 0 10 255 236 0 164 2 7 255 236 0 164 2 11 255 236 0 165 0 5 255 236 0 165 0 10 255 236 0 165 2 7 255 236 0 165 2 11 255 236 0 166 0 5 255 236 0 166 0 10 255 236 0 166 2 7 255 236 0 166 2 11 255 236 0 167 0 5 255 236 0 167 0 10 255 236 0 167 2 7 255 236 0 167 2 11 255 236 0 170 0 5 255 236 0 170 0 10 255 236 0 170 0 89 255 215 0 170 0 90 255 215 0 170 0 91 255 215 0 170 0 92 255 215 0 170 0 93 255 236 0 170 0 191 255 215 0 170 1 55 255 215 0 170 1 60 255 236 0 170 1 62 255 236 0 170 1 64 255 236 0 170 1 251 255 215 0 170 1 253 255 215 0 170 2 7 255 236 0 170 2 11 255 236 0 170 3 112 255 215 0 171 0 5 255 236 0 171 0 10 255 236 0 171 0 89 255 215 0 171 0 90 255 215 0 171 0 91 255 215 0 171 0 92 255 215 0 171 0 93 255 236 0 171 0 191 255 215 0 171 1 55 255 215 0 171 1 60 255 236 0 171 1 62 255 236 0 171 1 64 255 236 0 171 1 251 255 215 0 171 1 253 255 215 0 171 2 7 255 236 0 171 2 11 255 236 0 171 3 112 255 215 0 172 0 5 255 236 0 172 0 10 255 236 0 172 0 89 255 215 0 172 0 90 255 215 0 172 0 91 255 215 0 172 0 92 255 215 0 172 0 93 255 236 0 172 0 191 255 215 0 172 1 55 255 215 0 172 1 60 255 236 0 172 1 62 255 236 0 172 1 64 255 236 0 172 1 251 255 215 0 172 1 253 255 215 0 172 2 7 255 236 0 172 2 11 255 236 0 172 3 112 255 215 0 173 0 5 255 236 0 173 0 10 255 236 0 173 0 89 255 215 0 173 0 90 255 215 0 173 0 91 255 215 0 173 0 92 255 215 0 173 0 93 255 236 0 173 0 191 255 215 0 173 1 55 255 215 0 173 1 60 255 236 0 173 1 62 255 236 0 173 1 64 255 236 0 173 1 251 255 215 0 173 1 253 255 215 0 173 2 7 255 236 0 173 2 11 255 236 0 173 3 112 255 215 0 178 0 5 255 236 0 178 0 10 255 236 0 178 0 89 255 215 0 178 0 90 255 215 0 178 0 91 255 215 0 178 0 92 255 215 0 178 0 93 255 236 0 178 0 191 255 215 0 178 1 55 255 215 0 178 1 60 255 236 0 178 1 62 255 236 0 178 1 64 255 236 0 178 1 251 255 215 0 178 1 253 255 215 0 178 2 7 255 236 0 178 2 11 255 236 0 178 3 112 255 215 0 180 0 5 255 236 0 180 0 10 255 236 0 180 0 89 255 215 0 180 0 90 255 215 0 180 0 91 255 215 0 180 0 92 255 215 0 180 0 93 255 236 0 180 0 191 255 215 0 180 1 55 255 215 0 180 1 60 255 236 0 180 1 62 255 236 0 180 1 64 255 236 0 180 1 251 255 215 0 180 1 253 255 215 0 180 2 7 255 236 0 180 2 11 255 236 0 180 3 112 255 215 0 181 0 5 255 236 0 181 0 10 255 236 0 181 0 89 255 215 0 181 0 90 255 215 0 181 0 91 255 215 0 181 0 92 255 215 0 181 0 93 255 236 0 181 0 191 255 215 0 181 1 55 255 215 0 181 1 60 255 236 0 181 1 62 255 236 0 181 1 64 255 236 0 181 1 251 255 215 0 181 1 253 255 215 0 181 2 7 255 236 0 181 2 11 255 236 0 181 3 112 255 215 0 182 0 5 255 236 0 182 0 10 255 236 0 182 0 89 255 215 0 182 0 90 255 215 0 182 0 91 255 215 0 182 0 92 255 215 0 182 0 93 255 236 0 182 0 191 255 215 0 182 1 55 255 215 0 182 1 60 255 236 0 182 1 62 255 236 0 182 1 64 255 236 0 182 1 251 255 215 0 182 1 253 255 215 0 182 2 7 255 236 0 182 2 11 255 236 0 182 3 112 255 215 0 184 0 5 255 215 0 184 0 10 255 215 0 184 2 7 255 215 0 184 2 11 255 215 0 186 0 5 255 236 0 186 0 10 255 236 0 186 0 89 255 215 0 186 0 90 255 215 0 186 0 91 255 215 0 186 0 92 255 215 0 186 0 93 255 236 0 186 0 191 255 215 0 186 1 55 255 215 0 186 1 60 255 236 0 186 1 62 255 236 0 186 1 64 255 236 0 186 1 251 255 215 0 186 1 253 255 215 0 186 2 7 255 236 0 186 2 11 255 236 0 186 3 112 255 215 0 191 0 5 0 82 0 191 0 10 0 82 0 191 0 15 255 174 0 191 0 17 255 174 0 191 0 34 0 41 0 191 2 7 0 82 0 191 2 8 255 174 0 191 2 11 0 82 0 191 2 12 255 174 0 192 0 5 255 236 0 192 0 10 255 236 0 192 0 89 255 215 0 192 0 90 255 215 0 192 0 91 255 215 0 192 0 92 255 215 0 192 0 93 255 236 0 192 0 191 255 215 0 192 1 55 255 215 0 192 1 60 255 236 0 192 1 62 255 236 0 192 1 64 255 236 0 192 1 251 255 215 0 192 1 253 255 215 0 192 2 7 255 236 0 192 2 11 255 236 0 192 3 112 255 215 0 193 0 5 0 82 0 193 0 10 0 82 0 193 0 15 255 174 0 193 0 17 255 174 0 193 0 34 0 41 0 193 2 7 0 82 0 193 2 8 255 174 0 193 2 11 0 82 0 193 2 12 255 174 0 194 0 5 255 113 0 194 0 10 255 113 0 194 0 38 255 215 0 194 0 42 255 215 0 194 0 45 1 10 0 194 0 50 255 215 0 194 0 52 255 215 0 194 0 55 255 113 0 194 0 57 255 174 0 194 0 58 255 174 0 194 0 60 255 133 0 194 0 137 255 215 0 194 0 148 255 215 0 194 0 149 255 215 0 194 0 150 255 215 0 194 0 151 255 215 0 194 0 152 255 215 0 194 0 154 255 215 0 194 0 159 255 133 0 194 0 200 255 215 0 194 0 202 255 215 0 194 0 204 255 215 0 194 0 206 255 215 0 194 0 222 255 215 0 194 0 224 255 215 0 194 0 226 255 215 0 194 0 228 255 215 0 194 1 14 255 215 0 194 1 16 255 215 0 194 1 18 255 215 0 194 1 20 255 215 0 194 1 36 255 113 0 194 1 38 255 113 0 194 1 54 255 174 0 194 1 56 255 133 0 194 1 58 255 133 0 194 1 71 255 215 0 194 1 250 255 174 0 194 1 252 255 174 0 194 1 254 255 174 0 194 2 0 255 133 0 194 2 7 255 113 0 194 2 11 255 113 0 194 2 95 255 215 0 194 3 73 255 215 0 194 3 75 255 215 0 194 3 77 255 215 0 194 3 79 255 215 0 194 3 81 255 215 0 194 3 83 255 215 0 194 3 85 255 215 0 194 3 87 255 215 0 194 3 89 255 215 0 194 3 91 255 215 0 194 3 93 255 215 0 194 3 95 255 215 0 194 3 111 255 133 0 194 3 113 255 133 0 194 3 115 255 133 0 194 3 143 255 113 0 195 0 5 255 236 0 195 0 10 255 236 0 195 2 7 255 236 0 195 2 11 255 236 0 196 0 5 255 113 0 196 0 10 255 113 0 196 0 38 255 215 0 196 0 42 255 215 0 196 0 45 1 10 0 196 0 50 255 215 0 196 0 52 255 215 0 196 0 55 255 113 0 196 0 57 255 174 0 196 0 58 255 174 0 196 0 60 255 133 0 196 0 137 255 215 0 196 0 148 255 215 0 196 0 149 255 215 0 196 0 150 255 215 0 196 0 151 255 215 0 196 0 152 255 215 0 196 0 154 255 215 0 196 0 159 255 133 0 196 0 200 255 215 0 196 0 202 255 215 0 196 0 204 255 215 0 196 0 206 255 215 0 196 0 222 255 215 0 196 0 224 255 215 0 196 0 226 255 215 0 196 0 228 255 215 0 196 1 14 255 215 0 196 1 16 255 215 0 196 1 18 255 215 0 196 1 20 255 215 0 196 1 36 255 113 0 196 1 38 255 113 0 196 1 54 255 174 0 196 1 56 255 133 0 196 1 58 255 133 0 196 1 71 255 215 0 196 1 250 255 174 0 196 1 252 255 174 0 196 1 254 255 174 0 196 2 0 255 133 0 196 2 7 255 113 0 196 2 11 255 113 0 196 2 95 255 215 0 196 3 73 255 215 0 196 3 75 255 215 0 196 3 77 255 215 0 196 3 79 255 215 0 196 3 81 255 215 0 196 3 83 255 215 0 196 3 85 255 215 0 196 3 87 255 215 0 196 3 89 255 215 0 196 3 91 255 215 0 196 3 93 255 215 0 196 3 95 255 215 0 196 3 111 255 133 0 196 3 113 255 133 0 196 3 115 255 133 0 196 3 143 255 113 0 197 0 5 255 236 0 197 0 10 255 236 0 197 2 7 255 236 0 197 2 11 255 236 0 198 0 5 255 113 0 198 0 10 255 113 0 198 0 38 255 215 0 198 0 42 255 215 0 198 0 45 1 10 0 198 0 50 255 215 0 198 0 52 255 215 0 198 0 55 255 113 0 198 0 57 255 174 0 198 0 58 255 174 0 198 0 60 255 133 0 198 0 137 255 215 0 198 0 148 255 215 0 198 0 149 255 215 0 198 0 150 255 215 0 198 0 151 255 215 0 198 0 152 255 215 0 198 0 154 255 215 0 198 0 159 255 133 0 198 0 200 255 215 0 198 0 202 255 215 0 198 0 204 255 215 0 198 0 206 255 215 0 198 0 222 255 215 0 198 0 224 255 215 0 198 0 226 255 215 0 198 0 228 255 215 0 198 1 14 255 215 0 198 1 16 255 215 0 198 1 18 255 215 0 198 1 20 255 215 0 198 1 36 255 113 0 198 1 38 255 113 0 198 1 54 255 174 0 198 1 56 255 133 0 198 1 58 255 133 0 198 1 71 255 215 0 198 1 250 255 174 0 198 1 252 255 174 0 198 1 254 255 174 0 198 2 0 255 133 0 198 2 7 255 113 0 198 2 11 255 113 0 198 2 95 255 215 0 198 3 73 255 215 0 198 3 75 255 215 0 198 3 77 255 215 0 198 3 79 255 215 0 198 3 81 255 215 0 198 3 83 255 215 0 198 3 85 255 215 0 198 3 87 255 215 0 198 3 89 255 215 0 198 3 91 255 215 0 198 3 93 255 215 0 198 3 95 255 215 0 198 3 111 255 133 0 198 3 113 255 133 0 198 3 115 255 133 0 198 3 143 255 113 0 199 0 5 255 236 0 199 0 10 255 236 0 199 2 7 255 236 0 199 2 11 255 236 0 200 0 38 255 215 0 200 0 42 255 215 0 200 0 50 255 215 0 200 0 52 255 215 0 200 0 137 255 215 0 200 0 148 255 215 0 200 0 149 255 215 0 200 0 150 255 215 0 200 0 151 255 215 0 200 0 152 255 215 0 200 0 154 255 215 0 200 0 200 255 215 0 200 0 202 255 215 0 200 0 204 255 215 0 200 0 206 255 215 0 200 0 222 255 215 0 200 0 224 255 215 0 200 0 226 255 215 0 200 0 228 255 215 0 200 1 14 255 215 0 200 1 16 255 215 0 200 1 18 255 215 0 200 1 20 255 215 0 200 1 71 255 215 0 200 2 95 255 215 0 200 3 73 255 215 0 200 3 75 255 215 0 200 3 77 255 215 0 200 3 79 255 215 0 200 3 81 255 215 0 200 3 83 255 215 0 200 3 85 255 215 0 200 3 87 255 215 0 200 3 89 255 215 0 200 3 91 255 215 0 200 3 93 255 215 0 200 3 95 255 215 0 202 0 38 255 215 0 202 0 42 255 215 0 202 0 50 255 215 0 202 0 52 255 215 0 202 0 137 255 215 0 202 0 148 255 215 0 202 0 149 255 215 0 202 0 150 255 215 0 202 0 151 255 215 0 202 0 152 255 215 0 202 0 154 255 215 0 202 0 200 255 215 0 202 0 202 255 215 0 202 0 204 255 215 0 202 0 206 255 215 0 202 0 222 255 215 0 202 0 224 255 215 0 202 0 226 255 215 0 202 0 228 255 215 0 202 1 14 255 215 0 202 1 16 255 215 0 202 1 18 255 215 0 202 1 20 255 215 0 202 1 71 255 215 0 202 2 95 255 215 0 202 3 73 255 215 0 202 3 75 255 215 0 202 3 77 255 215 0 202 3 79 255 215 0 202 3 81 255 215 0 202 3 83 255 215 0 202 3 85 255 215 0 202 3 87 255 215 0 202 3 89 255 215 0 202 3 91 255 215 0 202 3 93 255 215 0 202 3 95 255 215 0 204 0 38 255 215 0 204 0 42 255 215 0 204 0 50 255 215 0 204 0 52 255 215 0 204 0 137 255 215 0 204 0 148 255 215 0 204 0 149 255 215 0 204 0 150 255 215 0 204 0 151 255 215 0 204 0 152 255 215 0 204 0 154 255 215 0 204 0 200 255 215 0 204 0 202 255 215 0 204 0 204 255 215 0 204 0 206 255 215 0 204 0 222 255 215 0 204 0 224 255 215 0 204 0 226 255 215 0 204 0 228 255 215 0 204 1 14 255 215 0 204 1 16 255 215 0 204 1 18 255 215 0 204 1 20 255 215 0 204 1 71 255 215 0 204 2 95 255 215 0 204 3 73 255 215 0 204 3 75 255 215 0 204 3 77 255 215 0 204 3 79 255 215 0 204 3 81 255 215 0 204 3 83 255 215 0 204 3 85 255 215 0 204 3 87 255 215 0 204 3 89 255 215 0 204 3 91 255 215 0 204 3 93 255 215 0 204 3 95 255 215 0 206 0 38 255 215 0 206 0 42 255 215 0 206 0 50 255 215 0 206 0 52 255 215 0 206 0 137 255 215 0 206 0 148 255 215 0 206 0 149 255 215 0 206 0 150 255 215 0 206 0 151 255 215 0 206 0 152 255 215 0 206 0 154 255 215 0 206 0 200 255 215 0 206 0 202 255 215 0 206 0 204 255 215 0 206 0 206 255 215 0 206 0 222 255 215 0 206 0 224 255 215 0 206 0 226 255 215 0 206 0 228 255 215 0 206 1 14 255 215 0 206 1 16 255 215 0 206 1 18 255 215 0 206 1 20 255 215 0 206 1 71 255 215 0 206 2 95 255 215 0 206 3 73 255 215 0 206 3 75 255 215 0 206 3 77 255 215 0 206 3 79 255 215 0 206 3 81 255 215 0 206 3 83 255 215 0 206 3 85 255 215 0 206 3 87 255 215 0 206 3 89 255 215 0 206 3 91 255 215 0 206 3 93 255 215 0 206 3 95 255 215 0 208 0 15 255 174 0 208 0 17 255 174 0 208 0 36 255 215 0 208 0 55 255 195 0 208 0 57 255 236 0 208 0 58 255 236 0 208 0 59 255 215 0 208 0 60 255 236 0 208 0 61 255 236 0 208 0 130 255 215 0 208 0 131 255 215 0 208 0 132 255 215 0 208 0 133 255 215 0 208 0 134 255 215 0 208 0 135 255 215 0 208 0 159 255 236 0 208 0 194 255 215 0 208 0 196 255 215 0 208 0 198 255 215 0 208 1 36 255 195 0 208 1 38 255 195 0 208 1 54 255 236 0 208 1 56 255 236 0 208 1 58 255 236 0 208 1 59 255 236 0 208 1 61 255 236 0 208 1 63 255 236 0 208 1 67 255 215 0 208 1 160 255 236 0 208 1 250 255 236 0 208 1 252 255 236 0 208 1 254 255 236 0 208 2 0 255 236 0 208 2 8 255 174 0 208 2 12 255 174 0 208 2 88 255 215 0 208 3 29 255 215 0 208 3 31 255 215 0 208 3 33 255 215 0 208 3 35 255 215 0 208 3 37 255 215 0 208 3 39 255 215 0 208 3 41 255 215 0 208 3 43 255 215 0 208 3 45 255 215 0 208 3 47 255 215 0 208 3 49 255 215 0 208 3 51 255 215 0 208 3 111 255 236 0 208 3 113 255 236 0 208 3 115 255 236 0 208 3 143 255 195 0 209 0 5 0 82 0 209 0 10 0 82 0 209 0 12 0 143 0 209 0 34 0 164 0 209 0 64 0 143 0 209 0 69 0 61 0 209 0 75 0 61 0 209 0 78 0 61 0 209 0 79 0 61 0 209 0 96 0 143 0 209 0 231 0 61 0 209 0 233 0 123 0 209 2 7 0 82 0 209 2 11 0 82 0 210 0 15 255 174 0 210 0 17 255 174 0 210 0 36 255 215 0 210 0 55 255 195 0 210 0 57 255 236 0 210 0 58 255 236 0 210 0 59 255 215 0 210 0 60 255 236 0 210 0 61 255 236 0 210 0 130 255 215 0 210 0 131 255 215 0 210 0 132 255 215 0 210 0 133 255 215 0 210 0 134 255 215 0 210 0 135 255 215 0 210 0 159 255 236 0 210 0 194 255 215 0 210 0 196 255 215 0 210 0 198 255 215 0 210 1 36 255 195 0 210 1 38 255 195 0 210 1 54 255 236 0 210 1 56 255 236 0 210 1 58 255 236 0 210 1 59 255 236 0 210 1 61 255 236 0 210 1 63 255 236 0 210 1 67 255 215 0 210 1 160 255 236 0 210 1 250 255 236 0 210 1 252 255 236 0 210 1 254 255 236 0 210 2 0 255 236 0 210 2 8 255 174 0 210 2 12 255 174 0 210 2 88 255 215 0 210 3 29 255 215 0 210 3 31 255 215 0 210 3 33 255 215 0 210 3 35 255 215 0 210 3 37 255 215 0 210 3 39 255 215 0 210 3 41 255 215 0 210 3 43 255 215 0 210 3 45 255 215 0 210 3 47 255 215 0 210 3 49 255 215 0 210 3 51 255 215 0 210 3 111 255 236 0 210 3 113 255 236 0 210 3 115 255 236 0 210 3 143 255 195 0 212 0 45 0 123 0 213 0 5 255 236 0 213 0 10 255 236 0 213 0 89 255 215 0 213 0 90 255 215 0 213 0 91 255 215 0 213 0 92 255 215 0 213 0 93 255 236 0 213 0 191 255 215 0 213 1 55 255 215 0 213 1 60 255 236 0 213 1 62 255 236 0 213 1 64 255 236 0 213 1 251 255 215 0 213 1 253 255 215 0 213 2 7 255 236 0 213 2 11 255 236 0 213 3 112 255 215 0 214 0 45 0 123 0 215 0 5 255 236 0 215 0 10 255 236 0 215 0 89 255 215 0 215 0 90 255 215 0 215 0 91 255 215 0 215 0 92 255 215 0 215 0 93 255 236 0 215 0 191 255 215 0 215 1 55 255 215 0 215 1 60 255 236 0 215 1 62 255 236 0 215 1 64 255 236 0 215 1 251 255 215 0 215 1 253 255 215 0 215 2 7 255 236 0 215 2 11 255 236 0 215 3 112 255 215 0 216 0 45 0 123 0 217 0 5 255 236 0 217 0 10 255 236 0 217 0 89 255 215 0 217 0 90 255 215 0 217 0 91 255 215 0 217 0 92 255 215 0 217 0 93 255 236 0 217 0 191 255 215 0 217 1 55 255 215 0 217 1 60 255 236 0 217 1 62 255 236 0 217 1 64 255 236 0 217 1 251 255 215 0 217 1 253 255 215 0 217 2 7 255 236 0 217 2 11 255 236 0 217 3 112 255 215 0 218 0 45 0 123 0 219 0 5 255 236 0 219 0 10 255 236 0 219 0 89 255 215 0 219 0 90 255 215 0 219 0 91 255 215 0 219 0 92 255 215 0 219 0 93 255 236 0 219 0 191 255 215 0 219 1 55 255 215 0 219 1 60 255 236 0 219 1 62 255 236 0 219 1 64 255 236 0 219 1 251 255 215 0 219 1 253 255 215 0 219 2 7 255 236 0 219 2 11 255 236 0 219 3 112 255 215 0 220 0 45 0 123 0 221 0 5 255 236 0 221 0 10 255 236 0 221 0 89 255 215 0 221 0 90 255 215 0 221 0 91 255 215 0 221 0 92 255 215 0 221 0 93 255 236 0 221 0 191 255 215 0 221 1 55 255 215 0 221 1 60 255 236 0 221 1 62 255 236 0 221 1 64 255 236 0 221 1 251 255 215 0 221 1 253 255 215 0 221 2 7 255 236 0 221 2 11 255 236 0 221 3 112 255 215 0 231 0 5 255 236 0 231 0 10 255 236 0 231 2 7 255 236 0 231 2 11 255 236 0 248 0 38 255 215 0 248 0 42 255 215 0 248 0 50 255 215 0 248 0 52 255 215 0 248 0 137 255 215 0 248 0 148 255 215 0 248 0 149 255 215 0 248 0 150 255 215 0 248 0 151 255 215 0 248 0 152 255 215 0 248 0 154 255 215 0 248 0 200 255 215 0 248 0 202 255 215 0 248 0 204 255 215 0 248 0 206 255 215 0 248 0 222 255 215 0 248 0 224 255 215 0 248 0 226 255 215 0 248 0 228 255 215 0 248 1 14 255 215 0 248 1 16 255 215 0 248 1 18 255 215 0 248 1 20 255 215 0 248 1 71 255 215 0 248 2 95 255 215 0 248 3 73 255 215 0 248 3 75 255 215 0 248 3 77 255 215 0 248 3 79 255 215 0 248 3 81 255 215 0 248 3 83 255 215 0 248 3 85 255 215 0 248 3 87 255 215 0 248 3 89 255 215 0 248 3 91 255 215 0 248 3 93 255 215 0 248 3 95 255 215 0 249 0 70 255 215 0 249 0 71 255 215 0 249 0 72 255 215 0 249 0 82 255 215 0 249 0 84 255 215 0 249 0 162 255 215 0 249 0 169 255 215 0 249 0 170 255 215 0 249 0 171 255 215 0 249 0 172 255 215 0 249 0 173 255 215 0 249 0 180 255 215 0 249 0 181 255 215 0 249 0 182 255 215 0 249 0 183 255 215 0 249 0 184 255 215 0 249 0 186 255 215 0 249 0 201 255 215 0 249 0 203 255 215 0 249 0 205 255 215 0 249 0 207 255 215 0 249 0 209 255 215 0 249 0 211 255 215 0 249 0 213 255 215 0 249 0 215 255 215 0 249 0 217 255 215 0 249 0 219 255 215 0 249 0 221 255 215 0 249 1 15 255 215 0 249 1 17 255 215 0 249 1 19 255 215 0 249 1 21 255 215 0 249 1 72 255 215 0 249 2 96 255 215 0 249 3 54 255 215 0 249 3 56 255 215 0 249 3 58 255 215 0 249 3 60 255 215 0 249 3 64 255 215 0 249 3 66 255 215 0 249 3 68 255 215 0 249 3 74 255 215 0 249 3 76 255 215 0 249 3 78 255 215 0 249 3 82 255 215 0 249 3 84 255 215 0 249 3 86 255 215 0 249 3 88 255 215 0 249 3 90 255 215 0 249 3 92 255 215 0 249 3 94 255 215 0 249 3 96 255 215 0 250 0 70 255 215 0 250 0 71 255 215 0 250 0 72 255 215 0 250 0 82 255 215 0 250 0 84 255 215 0 250 0 162 255 215 0 250 0 169 255 215 0 250 0 170 255 215 0 250 0 171 255 215 0 250 0 172 255 215 0 250 0 173 255 215 0 250 0 180 255 215 0 250 0 181 255 215 0 250 0 182 255 215 0 250 0 183 255 215 0 250 0 184 255 215 0 250 0 186 255 215 0 250 0 201 255 215 0 250 0 203 255 215 0 250 0 205 255 215 0 250 0 207 255 215 0 250 0 209 255 215 0 250 0 211 255 215 0 250 0 213 255 215 0 250 0 215 255 215 0 250 0 217 255 215 0 250 0 219 255 215 0 250 0 221 255 215 0 250 1 15 255 215 0 250 1 17 255 215 0 250 1 19 255 215 0 250 1 21 255 215 0 250 1 72 255 215 0 250 2 96 255 215 0 250 3 54 255 215 0 250 3 56 255 215 0 250 3 58 255 215 0 250 3 60 255 215 0 250 3 64 255 215 0 250 3 66 255 215 0 250 3 68 255 215 0 250 3 74 255 215 0 250 3 76 255 215 0 250 3 78 255 215 0 250 3 82 255 215 0 250 3 84 255 215 0 250 3 86 255 215 0 250 3 88 255 215 0 250 3 90 255 215 0 250 3 92 255 215 0 250 3 94 255 215 0 250 3 96 255 215 0 251 0 5 255 92 0 251 0 10 255 92 0 251 0 38 255 215 0 251 0 42 255 215 0 251 0 50 255 215 0 251 0 52 255 215 0 251 0 55 255 215 0 251 0 56 255 236 0 251 0 57 255 215 0 251 0 58 255 215 0 251 0 60 255 195 0 251 0 137 255 215 0 251 0 148 255 215 0 251 0 149 255 215 0 251 0 150 255 215 0 251 0 151 255 215 0 251 0 152 255 215 0 251 0 154 255 215 0 251 0 155 255 236 0 251 0 156 255 236 0 251 0 157 255 236 0 251 0 158 255 236 0 251 0 159 255 195 0 251 0 200 255 215 0 251 0 202 255 215 0 251 0 204 255 215 0 251 0 206 255 215 0 251 0 222 255 215 0 251 0 224 255 215 0 251 0 226 255 215 0 251 0 228 255 215 0 251 1 14 255 215 0 251 1 16 255 215 0 251 1 18 255 215 0 251 1 20 255 215 0 251 1 36 255 215 0 251 1 38 255 215 0 251 1 42 255 236 0 251 1 44 255 236 0 251 1 46 255 236 0 251 1 48 255 236 0 251 1 50 255 236 0 251 1 52 255 236 0 251 1 54 255 215 0 251 1 56 255 195 0 251 1 58 255 195 0 251 1 71 255 215 0 251 1 250 255 215 0 251 1 252 255 215 0 251 1 254 255 215 0 251 2 0 255 195 0 251 2 7 255 92 0 251 2 11 255 92 0 251 2 95 255 215 0 251 2 97 255 236 0 251 3 73 255 215 0 251 3 75 255 215 0 251 3 77 255 215 0 251 3 79 255 215 0 251 3 81 255 215 0 251 3 83 255 215 0 251 3 85 255 215 0 251 3 87 255 215 0 251 3 89 255 215 0 251 3 91 255 215 0 251 3 93 255 215 0 251 3 95 255 215 0 251 3 97 255 236 0 251 3 99 255 236 0 251 3 101 255 236 0 251 3 103 255 236 0 251 3 105 255 236 0 251 3 107 255 236 0 251 3 109 255 236 0 251 3 111 255 195 0 251 3 113 255 195 0 251 3 115 255 195 0 251 3 143 255 215 0 253 0 5 255 92 0 253 0 10 255 92 0 253 0 38 255 215 0 253 0 42 255 215 0 253 0 50 255 215 0 253 0 52 255 215 0 253 0 55 255 215 0 253 0 56 255 236 0 253 0 57 255 215 0 253 0 58 255 215 0 253 0 60 255 195 0 253 0 137 255 215 0 253 0 148 255 215 0 253 0 149 255 215 0 253 0 150 255 215 0 253 0 151 255 215 0 253 0 152 255 215 0 253 0 154 255 215 0 253 0 155 255 236 0 253 0 156 255 236 0 253 0 157 255 236 0 253 0 158 255 236 0 253 0 159 255 195 0 253 0 200 255 215 0 253 0 202 255 215 0 253 0 204 255 215 0 253 0 206 255 215 0 253 0 222 255 215 0 253 0 224 255 215 0 253 0 226 255 215 0 253 0 228 255 215 0 253 1 14 255 215 0 253 1 16 255 215 0 253 1 18 255 215 0 253 1 20 255 215 0 253 1 36 255 215 0 253 1 38 255 215 0 253 1 42 255 236 0 253 1 44 255 236 0 253 1 46 255 236 0 253 1 48 255 236 0 253 1 50 255 236 0 253 1 52 255 236 0 253 1 54 255 215 0 253 1 56 255 195 0 253 1 58 255 195 0 253 1 71 255 215 0 253 1 250 255 215 0 253 1 252 255 215 0 253 1 254 255 215 0 253 2 0 255 195 0 253 2 7 255 92 0 253 2 11 255 92 0 253 2 95 255 215 0 253 2 97 255 236 0 253 3 73 255 215 0 253 3 75 255 215 0 253 3 77 255 215 0 253 3 79 255 215 0 253 3 81 255 215 0 253 3 83 255 215 0 253 3 85 255 215 0 253 3 87 255 215 0 253 3 89 255 215 0 253 3 91 255 215 0 253 3 93 255 215 0 253 3 95 255 215 0 253 3 97 255 236 0 253 3 99 255 236 0 253 3 101 255 236 0 253 3 103 255 236 0 253 3 105 255 236 0 253 3 107 255 236 0 253 3 109 255 236 0 253 3 111 255 195 0 253 3 113 255 195 0 253 3 115 255 195 0 253 3 143 255 215 0 255 0 5 255 92 0 255 0 10 255 92 0 255 0 38 255 215 0 255 0 42 255 215 0 255 0 50 255 215 0 255 0 52 255 215 0 255 0 55 255 215 0 255 0 56 255 236 0 255 0 57 255 215 0 255 0 58 255 215 0 255 0 60 255 195 0 255 0 137 255 215 0 255 0 148 255 215 0 255 0 149 255 215 0 255 0 150 255 215 0 255 0 151 255 215 0 255 0 152 255 215 0 255 0 154 255 215 0 255 0 155 255 236 0 255 0 156 255 236 0 255 0 157 255 236 0 255 0 158 255 236 0 255 0 159 255 195 0 255 0 200 255 215 0 255 0 202 255 215 0 255 0 204 255 215 0 255 0 206 255 215 0 255 0 222 255 215 0 255 0 224 255 215 0 255 0 226 255 215 0 255 0 228 255 215 0 255 1 14 255 215 0 255 1 16 255 215 0 255 1 18 255 215 0 255 1 20 255 215 0 255 1 36 255 215 0 255 1 38 255 215 0 255 1 42 255 236 0 255 1 44 255 236 0 255 1 46 255 236 0 255 1 48 255 236 0 255 1 50 255 236 0 255 1 52 255 236 0 255 1 54 255 215 0 255 1 56 255 195 0 255 1 58 255 195 0 255 1 71 255 215 0 255 1 250 255 215 0 255 1 252 255 215 0 255 1 254 255 215 0 255 2 0 255 195 0 255 2 7 255 92 0 255 2 11 255 92 0 255 2 95 255 215 0 255 2 97 255 236 0 255 3 73 255 215 0 255 3 75 255 215 0 255 3 77 255 215 0 255 3 79 255 215 0 255 3 81 255 215 0 255 3 83 255 215 0 255 3 85 255 215 0 255 3 87 255 215 0 255 3 89 255 215 0 255 3 91 255 215 0 255 3 93 255 215 0 255 3 95 255 215 0 255 3 97 255 236 0 255 3 99 255 236 0 255 3 101 255 236 0 255 3 103 255 236 0 255 3 105 255 236 0 255 3 107 255 236 0 255 3 109 255 236 0 255 3 111 255 195 0 255 3 113 255 195 0 255 3 115 255 195 0 255 3 143 255 215 1 0 0 5 0 82 1 0 0 10 0 82 1 0 0 12 0 143 1 0 0 34 0 143 1 0 0 64 0 143 1 0 0 69 0 61 1 0 0 75 0 61 1 0 0 78 0 61 1 0 0 79 0 61 1 0 0 96 0 143 1 0 0 231 0 61 1 0 0 233 0 143 1 0 2 7 0 82 1 0 2 11 0 82 1 1 0 5 255 92 1 1 0 10 255 92 1 1 0 38 255 215 1 1 0 42 255 215 1 1 0 50 255 215 1 1 0 52 255 215 1 1 0 55 255 215 1 1 0 56 255 236 1 1 0 57 255 215 1 1 0 58 255 215 1 1 0 60 255 195 1 1 0 137 255 215 1 1 0 148 255 215 1 1 0 149 255 215 1 1 0 150 255 215 1 1 0 151 255 215 1 1 0 152 255 215 1 1 0 154 255 215 1 1 0 155 255 236 1 1 0 156 255 236 1 1 0 157 255 236 1 1 0 158 255 236 1 1 0 159 255 195 1 1 0 200 255 215 1 1 0 202 255 215 1 1 0 204 255 215 1 1 0 206 255 215 1 1 0 222 255 215 1 1 0 224 255 215 1 1 0 226 255 215 1 1 0 228 255 215 1 1 1 14 255 215 1 1 1 16 255 215 1 1 1 18 255 215 1 1 1 20 255 215 1 1 1 36 255 215 1 1 1 38 255 215 1 1 1 42 255 236 1 1 1 44 255 236 1 1 1 46 255 236 1 1 1 48 255 236 1 1 1 50 255 236 1 1 1 52 255 236 1 1 1 54 255 215 1 1 1 56 255 195 1 1 1 58 255 195 1 1 1 71 255 215 1 1 1 250 255 215 1 1 1 252 255 215 1 1 1 254 255 215 1 1 2 0 255 195 1 1 2 7 255 92 1 1 2 11 255 92 1 1 2 95 255 215 1 1 2 97 255 236 1 1 3 73 255 215 1 1 3 75 255 215 1 1 3 77 255 215 1 1 3 79 255 215 1 1 3 81 255 215 1 1 3 83 255 215 1 1 3 85 255 215 1 1 3 87 255 215 1 1 3 89 255 215 1 1 3 91 255 215 1 1 3 93 255 215 1 1 3 95 255 215 1 1 3 97 255 236 1 1 3 99 255 236 1 1 3 101 255 236 1 1 3 103 255 236 1 1 3 105 255 236 1 1 3 107 255 236 1 1 3 109 255 236 1 1 3 111 255 195 1 1 3 113 255 195 1 1 3 115 255 195 1 1 3 143 255 215 1 3 0 5 255 92 1 3 0 10 255 92 1 3 0 38 255 215 1 3 0 42 255 215 1 3 0 50 255 215 1 3 0 52 255 215 1 3 0 55 255 215 1 3 0 56 255 236 1 3 0 57 255 215 1 3 0 58 255 215 1 3 0 60 255 195 1 3 0 137 255 215 1 3 0 148 255 215 1 3 0 149 255 215 1 3 0 150 255 215 1 3 0 151 255 215 1 3 0 152 255 215 1 3 0 154 255 215 1 3 0 155 255 236 1 3 0 156 255 236 1 3 0 157 255 236 1 3 0 158 255 236 1 3 0 159 255 195 1 3 0 200 255 215 1 3 0 202 255 215 1 3 0 204 255 215 1 3 0 206 255 215 1 3 0 222 255 215 1 3 0 224 255 215 1 3 0 226 255 215 1 3 0 228 255 215 1 3 1 14 255 215 1 3 1 16 255 215 1 3 1 18 255 215 1 3 1 20 255 215 1 3 1 36 255 215 1 3 1 38 255 215 1 3 1 42 255 236 1 3 1 44 255 236 1 3 1 46 255 236 1 3 1 48 255 236 1 3 1 50 255 236 1 3 1 52 255 236 1 3 1 54 255 215 1 3 1 56 255 195 1 3 1 58 255 195 1 3 1 71 255 215 1 3 1 250 255 215 1 3 1 252 255 215 1 3 1 254 255 215 1 3 2 0 255 195 1 3 2 7 255 92 1 3 2 11 255 92 1 3 2 95 255 215 1 3 2 97 255 236 1 3 3 73 255 215 1 3 3 75 255 215 1 3 3 77 255 215 1 3 3 79 255 215 1 3 3 81 255 215 1 3 3 83 255 215 1 3 3 85 255 215 1 3 3 87 255 215 1 3 3 89 255 215 1 3 3 91 255 215 1 3 3 93 255 215 1 3 3 95 255 215 1 3 3 97 255 236 1 3 3 99 255 236 1 3 3 101 255 236 1 3 3 103 255 236 1 3 3 105 255 236 1 3 3 107 255 236 1 3 3 109 255 236 1 3 3 111 255 195 1 3 3 113 255 195 1 3 3 115 255 195 1 3 3 143 255 215 1 8 0 5 255 236 1 8 0 10 255 236 1 8 2 7 255 236 1 8 2 11 255 236 1 14 0 15 255 174 1 14 0 17 255 174 1 14 0 36 255 215 1 14 0 55 255 195 1 14 0 57 255 236 1 14 0 58 255 236 1 14 0 59 255 215 1 14 0 60 255 236 1 14 0 61 255 236 1 14 0 130 255 215 1 14 0 131 255 215 1 14 0 132 255 215 1 14 0 133 255 215 1 14 0 134 255 215 1 14 0 135 255 215 1 14 0 159 255 236 1 14 0 194 255 215 1 14 0 196 255 215 1 14 0 198 255 215 1 14 1 36 255 195 1 14 1 38 255 195 1 14 1 54 255 236 1 14 1 56 255 236 1 14 1 58 255 236 1 14 1 59 255 236 1 14 1 61 255 236 1 14 1 63 255 236 1 14 1 67 255 215 1 14 1 160 255 236 1 14 1 250 255 236 1 14 1 252 255 236 1 14 1 254 255 236 1 14 2 0 255 236 1 14 2 8 255 174 1 14 2 12 255 174 1 14 2 88 255 215 1 14 3 29 255 215 1 14 3 31 255 215 1 14 3 33 255 215 1 14 3 35 255 215 1 14 3 37 255 215 1 14 3 39 255 215 1 14 3 41 255 215 1 14 3 43 255 215 1 14 3 45 255 215 1 14 3 47 255 215 1 14 3 49 255 215 1 14 3 51 255 215 1 14 3 111 255 236 1 14 3 113 255 236 1 14 3 115 255 236 1 14 3 143 255 195 1 16 0 15 255 174 1 16 0 17 255 174 1 16 0 36 255 215 1 16 0 55 255 195 1 16 0 57 255 236 1 16 0 58 255 236 1 16 0 59 255 215 1 16 0 60 255 236 1 16 0 61 255 236 1 16 0 130 255 215 1 16 0 131 255 215 1 16 0 132 255 215 1 16 0 133 255 215 1 16 0 134 255 215 1 16 0 135 255 215 1 16 0 159 255 236 1 16 0 194 255 215 1 16 0 196 255 215 1 16 0 198 255 215 1 16 1 36 255 195 1 16 1 38 255 195 1 16 1 54 255 236 1 16 1 56 255 236 1 16 1 58 255 236 1 16 1 59 255 236 1 16 1 61 255 236 1 16 1 63 255 236 1 16 1 67 255 215 1 16 1 160 255 236 1 16 1 250 255 236 1 16 1 252 255 236 1 16 1 254 255 236 1 16 2 0 255 236 1 16 2 8 255 174 1 16 2 12 255 174 1 16 2 88 255 215 1 16 3 29 255 215 1 16 3 31 255 215 1 16 3 33 255 215 1 16 3 35 255 215 1 16 3 37 255 215 1 16 3 39 255 215 1 16 3 41 255 215 1 16 3 43 255 215 1 16 3 45 255 215 1 16 3 47 255 215 1 16 3 49 255 215 1 16 3 51 255 215 1 16 3 111 255 236 1 16 3 113 255 236 1 16 3 115 255 236 1 16 3 143 255 195 1 18 0 15 255 174 1 18 0 17 255 174 1 18 0 36 255 215 1 18 0 55 255 195 1 18 0 57 255 236 1 18 0 58 255 236 1 18 0 59 255 215 1 18 0 60 255 236 1 18 0 61 255 236 1 18 0 130 255 215 1 18 0 131 255 215 1 18 0 132 255 215 1 18 0 133 255 215 1 18 0 134 255 215 1 18 0 135 255 215 1 18 0 159 255 236 1 18 0 194 255 215 1 18 0 196 255 215 1 18 0 198 255 215 1 18 1 36 255 195 1 18 1 38 255 195 1 18 1 54 255 236 1 18 1 56 255 236 1 18 1 58 255 236 1 18 1 59 255 236 1 18 1 61 255 236 1 18 1 63 255 236 1 18 1 67 255 215 1 18 1 160 255 236 1 18 1 250 255 236 1 18 1 252 255 236 1 18 1 254 255 236 1 18 2 0 255 236 1 18 2 8 255 174 1 18 2 12 255 174 1 18 2 88 255 215 1 18 3 29 255 215 1 18 3 31 255 215 1 18 3 33 255 215 1 18 3 35 255 215 1 18 3 37 255 215 1 18 3 39 255 215 1 18 3 41 255 215 1 18 3 43 255 215 1 18 3 45 255 215 1 18 3 47 255 215 1 18 3 49 255 215 1 18 3 51 255 215 1 18 3 111 255 236 1 18 3 113 255 236 1 18 3 115 255 236 1 18 3 143 255 195 1 20 0 45 0 123 1 23 0 5 0 82 1 23 0 10 0 82 1 23 0 68 255 215 1 23 0 70 255 215 1 23 0 71 255 215 1 23 0 72 255 215 1 23 0 74 255 236 1 23 0 82 255 215 1 23 0 84 255 215 1 23 0 162 255 215 1 23 0 163 255 215 1 23 0 164 255 215 1 23 0 165 255 215 1 23 0 166 255 215 1 23 0 167 255 215 1 23 0 168 255 215 1 23 0 169 255 215 1 23 0 170 255 215 1 23 0 171 255 215 1 23 0 172 255 215 1 23 0 173 255 215 1 23 0 180 255 215 1 23 0 181 255 215 1 23 0 182 255 215 1 23 0 183 255 215 1 23 0 184 255 215 1 23 0 186 255 215 1 23 0 195 255 215 1 23 0 197 255 215 1 23 0 199 255 215 1 23 0 201 255 215 1 23 0 203 255 215 1 23 0 205 255 215 1 23 0 207 255 215 1 23 0 209 255 215 1 23 0 211 255 215 1 23 0 213 255 215 1 23 0 215 255 215 1 23 0 217 255 215 1 23 0 219 255 215 1 23 0 221 255 215 1 23 0 223 255 236 1 23 0 225 255 236 1 23 0 227 255 236 1 23 0 229 255 236 1 23 1 15 255 215 1 23 1 17 255 215 1 23 1 19 255 215 1 23 1 21 255 215 1 23 1 68 255 215 1 23 1 70 255 215 1 23 1 72 255 215 1 23 2 7 0 82 1 23 2 11 0 82 1 23 2 89 255 215 1 23 2 96 255 215 1 23 3 30 255 215 1 23 3 32 255 215 1 23 3 34 255 215 1 23 3 38 255 215 1 23 3 40 255 215 1 23 3 42 255 215 1 23 3 44 255 215 1 23 3 46 255 215 1 23 3 48 255 215 1 23 3 50 255 215 1 23 3 52 255 215 1 23 3 54 255 215 1 23 3 56 255 215 1 23 3 58 255 215 1 23 3 60 255 215 1 23 3 64 255 215 1 23 3 66 255 215 1 23 3 68 255 215 1 23 3 74 255 215 1 23 3 76 255 215 1 23 3 78 255 215 1 23 3 82 255 215 1 23 3 84 255 215 1 23 3 86 255 215 1 23 3 88 255 215 1 23 3 90 255 215 1 23 3 92 255 215 1 23 3 94 255 215 1 23 3 96 255 215 1 25 0 5 0 82 1 25 0 10 0 82 1 25 0 68 255 215 1 25 0 70 255 215 1 25 0 71 255 215 1 25 0 72 255 215 1 25 0 74 255 236 1 25 0 82 255 215 1 25 0 84 255 215 1 25 0 162 255 215 1 25 0 163 255 215 1 25 0 164 255 215 1 25 0 165 255 215 1 25 0 166 255 215 1 25 0 167 255 215 1 25 0 168 255 215 1 25 0 169 255 215 1 25 0 170 255 215 1 25 0 171 255 215 1 25 0 172 255 215 1 25 0 173 255 215 1 25 0 180 255 215 1 25 0 181 255 215 1 25 0 182 255 215 1 25 0 183 255 215 1 25 0 184 255 215 1 25 0 186 255 215 1 25 0 195 255 215 1 25 0 197 255 215 1 25 0 199 255 215 1 25 0 201 255 215 1 25 0 203 255 215 1 25 0 205 255 215 1 25 0 207 255 215 1 25 0 209 255 215 1 25 0 211 255 215 1 25 0 213 255 215 1 25 0 215 255 215 1 25 0 217 255 215 1 25 0 219 255 215 1 25 0 221 255 215 1 25 0 223 255 236 1 25 0 225 255 236 1 25 0 227 255 236 1 25 0 229 255 236 1 25 1 15 255 215 1 25 1 17 255 215 1 25 1 19 255 215 1 25 1 21 255 215 1 25 1 68 255 215 1 25 1 70 255 215 1 25 1 72 255 215 1 25 2 7 0 82 1 25 2 11 0 82 1 25 2 89 255 215 1 25 2 96 255 215 1 25 3 30 255 215 1 25 3 32 255 215 1 25 3 34 255 215 1 25 3 38 255 215 1 25 3 40 255 215 1 25 3 42 255 215 1 25 3 44 255 215 1 25 3 46 255 215 1 25 3 48 255 215 1 25 3 50 255 215 1 25 3 52 255 215 1 25 3 54 255 215 1 25 3 56 255 215 1 25 3 58 255 215 1 25 3 60 255 215 1 25 3 64 255 215 1 25 3 66 255 215 1 25 3 68 255 215 1 25 3 74 255 215 1 25 3 76 255 215 1 25 3 78 255 215 1 25 3 82 255 215 1 25 3 84 255 215 1 25 3 86 255 215 1 25 3 88 255 215 1 25 3 90 255 215 1 25 3 92 255 215 1 25 3 94 255 215 1 25 3 96 255 215 1 27 0 5 0 82 1 27 0 10 0 82 1 27 0 68 255 215 1 27 0 70 255 215 1 27 0 71 255 215 1 27 0 72 255 215 1 27 0 74 255 236 1 27 0 82 255 215 1 27 0 84 255 215 1 27 0 162 255 215 1 27 0 163 255 215 1 27 0 164 255 215 1 27 0 165 255 215 1 27 0 166 255 215 1 27 0 167 255 215 1 27 0 168 255 215 1 27 0 169 255 215 1 27 0 170 255 215 1 27 0 171 255 215 1 27 0 172 255 215 1 27 0 173 255 215 1 27 0 180 255 215 1 27 0 181 255 215 1 27 0 182 255 215 1 27 0 183 255 215 1 27 0 184 255 215 1 27 0 186 255 215 1 27 0 195 255 215 1 27 0 197 255 215 1 27 0 199 255 215 1 27 0 201 255 215 1 27 0 203 255 215 1 27 0 205 255 215 1 27 0 207 255 215 1 27 0 209 255 215 1 27 0 211 255 215 1 27 0 213 255 215 1 27 0 215 255 215 1 27 0 217 255 215 1 27 0 219 255 215 1 27 0 221 255 215 1 27 0 223 255 236 1 27 0 225 255 236 1 27 0 227 255 236 1 27 0 229 255 236 1 27 1 15 255 215 1 27 1 17 255 215 1 27 1 19 255 215 1 27 1 21 255 215 1 27 1 68 255 215 1 27 1 70 255 215 1 27 1 72 255 215 1 27 2 7 0 82 1 27 2 11 0 82 1 27 2 89 255 215 1 27 2 96 255 215 1 27 3 30 255 215 1 27 3 32 255 215 1 27 3 34 255 215 1 27 3 38 255 215 1 27 3 40 255 215 1 27 3 42 255 215 1 27 3 44 255 215 1 27 3 46 255 215 1 27 3 48 255 215 1 27 3 50 255 215 1 27 3 52 255 215 1 27 3 54 255 215 1 27 3 56 255 215 1 27 3 58 255 215 1 27 3 60 255 215 1 27 3 64 255 215 1 27 3 66 255 215 1 27 3 68 255 215 1 27 3 74 255 215 1 27 3 76 255 215 1 27 3 78 255 215 1 27 3 82 255 215 1 27 3 84 255 215 1 27 3 86 255 215 1 27 3 88 255 215 1 27 3 90 255 215 1 27 3 92 255 215 1 27 3 94 255 215 1 27 3 96 255 215 1 36 0 15 255 133 1 36 0 16 255 174 1 36 0 17 255 133 1 36 0 34 0 41 1 36 0 36 255 113 1 36 0 38 255 215 1 36 0 42 255 215 1 36 0 50 255 215 1 36 0 52 255 215 1 36 0 55 0 41 1 36 0 68 255 92 1 36 0 70 255 113 1 36 0 71 255 113 1 36 0 72 255 113 1 36 0 74 255 113 1 36 0 80 255 154 1 36 0 81 255 154 1 36 0 82 255 113 1 36 0 83 255 154 1 36 0 84 255 113 1 36 0 85 255 154 1 36 0 86 255 133 1 36 0 88 255 154 1 36 0 89 255 215 1 36 0 90 255 215 1 36 0 91 255 215 1 36 0 92 255 215 1 36 0 93 255 174 1 36 0 130 255 113 1 36 0 131 255 113 1 36 0 132 255 113 1 36 0 133 255 113 1 36 0 134 255 113 1 36 0 135 255 113 1 36 0 137 255 215 1 36 0 148 255 215 1 36 0 149 255 215 1 36 0 150 255 215 1 36 0 151 255 215 1 36 0 152 255 215 1 36 0 154 255 215 1 36 0 162 255 113 1 36 0 163 255 92 1 36 0 164 255 92 1 36 0 165 255 92 1 36 0 166 255 92 1 36 0 167 255 92 1 36 0 168 255 92 1 36 0 169 255 113 1 36 0 170 255 113 1 36 0 171 255 113 1 36 0 172 255 113 1 36 0 173 255 113 1 36 0 180 255 113 1 36 0 181 255 113 1 36 0 182 255 113 1 36 0 183 255 113 1 36 0 184 255 113 1 36 0 186 255 113 1 36 0 187 255 154 1 36 0 188 255 154 1 36 0 189 255 154 1 36 0 190 255 154 1 36 0 191 255 215 1 36 0 194 255 113 1 36 0 195 255 92 1 36 0 196 255 113 1 36 0 197 255 92 1 36 0 198 255 113 1 36 0 199 255 92 1 36 0 200 255 215 1 36 0 201 255 113 1 36 0 202 255 215 1 36 0 203 255 113 1 36 0 204 255 215 1 36 0 205 255 113 1 36 0 206 255 215 1 36 0 207 255 113 1 36 0 209 255 113 1 36 0 211 255 113 1 36 0 213 255 113 1 36 0 215 255 113 1 36 0 217 255 113 1 36 0 219 255 113 1 36 0 221 255 113 1 36 0 222 255 215 1 36 0 223 255 113 1 36 0 224 255 215 1 36 0 225 255 113 1 36 0 226 255 215 1 36 0 227 255 113 1 36 0 228 255 215 1 36 0 229 255 113 1 36 0 250 255 154 1 36 1 6 255 154 1 36 1 8 255 154 1 36 1 13 255 154 1 36 1 14 255 215 1 36 1 15 255 113 1 36 1 16 255 215 1 36 1 17 255 113 1 36 1 18 255 215 1 36 1 19 255 113 1 36 1 20 255 215 1 36 1 21 255 113 1 36 1 23 255 154 1 36 1 25 255 154 1 36 1 29 255 133 1 36 1 33 255 133 1 36 1 36 0 41 1 36 1 38 0 41 1 36 1 43 255 154 1 36 1 45 255 154 1 36 1 47 255 154 1 36 1 49 255 154 1 36 1 51 255 154 1 36 1 53 255 154 1 36 1 55 255 215 1 36 1 60 255 174 1 36 1 62 255 174 1 36 1 64 255 174 1 36 1 67 255 113 1 36 1 68 255 92 1 36 1 70 255 92 1 36 1 71 255 215 1 36 1 72 255 113 1 36 1 74 255 133 1 36 1 251 255 215 1 36 1 253 255 215 1 36 2 2 255 174 1 36 2 3 255 174 1 36 2 4 255 174 1 36 2 8 255 133 1 36 2 12 255 133 1 36 2 87 255 154 1 36 2 88 255 113 1 36 2 89 255 92 1 36 2 95 255 215 1 36 2 96 255 113 1 36 2 98 255 154 1 36 3 29 255 113 1 36 3 30 255 92 1 36 3 31 255 113 1 36 3 32 255 92 1 36 3 33 255 113 1 36 3 34 255 92 1 36 3 35 255 113 1 36 3 37 255 113 1 36 3 38 255 92 1 36 3 39 255 113 1 36 3 40 255 92 1 36 3 41 255 113 1 36 3 42 255 92 1 36 3 43 255 113 1 36 3 44 255 92 1 36 3 45 255 113 1 36 3 46 255 92 1 36 3 47 255 113 1 36 3 48 255 92 1 36 3 49 255 113 1 36 3 50 255 92 1 36 3 51 255 113 1 36 3 52 255 92 1 36 3 54 255 113 1 36 3 56 255 113 1 36 3 58 255 113 1 36 3 60 255 113 1 36 3 64 255 113 1 36 3 66 255 113 1 36 3 68 255 113 1 36 3 73 255 215 1 36 3 74 255 113 1 36 3 75 255 215 1 36 3 76 255 113 1 36 3 77 255 215 1 36 3 78 255 113 1 36 3 79 255 215 1 36 3 81 255 215 1 36 3 82 255 113 1 36 3 83 255 215 1 36 3 84 255 113 1 36 3 85 255 215 1 36 3 86 255 113 1 36 3 87 255 215 1 36 3 88 255 113 1 36 3 89 255 215 1 36 3 90 255 113 1 36 3 91 255 215 1 36 3 92 255 113 1 36 3 93 255 215 1 36 3 94 255 113 1 36 3 95 255 215 1 36 3 96 255 113 1 36 3 98 255 154 1 36 3 100 255 154 1 36 3 102 255 154 1 36 3 104 255 154 1 36 3 106 255 154 1 36 3 108 255 154 1 36 3 110 255 154 1 36 3 112 255 215 1 36 3 143 0 41 1 37 0 5 0 41 1 37 0 10 0 41 1 37 2 7 0 41 1 37 2 11 0 41 1 38 0 15 255 133 1 38 0 16 255 174 1 38 0 17 255 133 1 38 0 34 0 41 1 38 0 36 255 113 1 38 0 38 255 215 1 38 0 42 255 215 1 38 0 50 255 215 1 38 0 52 255 215 1 38 0 55 0 41 1 38 0 68 255 92 1 38 0 70 255 113 1 38 0 71 255 113 1 38 0 72 255 113 1 38 0 74 255 113 1 38 0 80 255 154 1 38 0 81 255 154 1 38 0 82 255 113 1 38 0 83 255 154 1 38 0 84 255 113 1 38 0 85 255 154 1 38 0 86 255 133 1 38 0 88 255 154 1 38 0 89 255 215 1 38 0 90 255 215 1 38 0 91 255 215 1 38 0 92 255 215 1 38 0 93 255 174 1 38 0 130 255 113 1 38 0 131 255 113 1 38 0 132 255 113 1 38 0 133 255 113 1 38 0 134 255 113 1 38 0 135 255 113 1 38 0 137 255 215 1 38 0 148 255 215 1 38 0 149 255 215 1 38 0 150 255 215 1 38 0 151 255 215 1 38 0 152 255 215 1 38 0 154 255 215 1 38 0 162 255 113 1 38 0 163 255 92 1 38 0 164 255 92 1 38 0 165 255 92 1 38 0 166 255 92 1 38 0 167 255 92 1 38 0 168 255 92 1 38 0 169 255 113 1 38 0 170 255 113 1 38 0 171 255 113 1 38 0 172 255 113 1 38 0 173 255 113 1 38 0 180 255 113 1 38 0 181 255 113 1 38 0 182 255 113 1 38 0 183 255 113 1 38 0 184 255 113 1 38 0 186 255 113 1 38 0 187 255 154 1 38 0 188 255 154 1 38 0 189 255 154 1 38 0 190 255 154 1 38 0 191 255 215 1 38 0 194 255 113 1 38 0 195 255 92 1 38 0 196 255 113 1 38 0 197 255 92 1 38 0 198 255 113 1 38 0 199 255 92 1 38 0 200 255 215 1 38 0 201 255 113 1 38 0 202 255 215 1 38 0 203 255 113 1 38 0 204 255 215 1 38 0 205 255 113 1 38 0 206 255 215 1 38 0 207 255 113 1 38 0 209 255 113 1 38 0 211 255 113 1 38 0 213 255 113 1 38 0 215 255 113 1 38 0 217 255 113 1 38 0 219 255 113 1 38 0 221 255 113 1 38 0 222 255 215 1 38 0 223 255 113 1 38 0 224 255 215 1 38 0 225 255 113 1 38 0 226 255 215 1 38 0 227 255 113 1 38 0 228 255 215 1 38 0 229 255 113 1 38 0 250 255 154 1 38 1 6 255 154 1 38 1 8 255 154 1 38 1 13 255 154 1 38 1 14 255 215 1 38 1 15 255 113 1 38 1 16 255 215 1 38 1 17 255 113 1 38 1 18 255 215 1 38 1 19 255 113 1 38 1 20 255 215 1 38 1 21 255 113 1 38 1 23 255 154 1 38 1 25 255 154 1 38 1 29 255 133 1 38 1 33 255 133 1 38 1 36 0 41 1 38 1 38 0 41 1 38 1 43 255 154 1 38 1 45 255 154 1 38 1 47 255 154 1 38 1 49 255 154 1 38 1 51 255 154 1 38 1 53 255 154 1 38 1 55 255 215 1 38 1 60 255 174 1 38 1 62 255 174 1 38 1 64 255 174 1 38 1 67 255 113 1 38 1 68 255 92 1 38 1 70 255 92 1 38 1 71 255 215 1 38 1 72 255 113 1 38 1 74 255 133 1 38 1 251 255 215 1 38 1 253 255 215 1 38 2 2 255 174 1 38 2 3 255 174 1 38 2 4 255 174 1 38 2 8 255 133 1 38 2 12 255 133 1 38 2 87 255 154 1 38 2 88 255 113 1 38 2 89 255 92 1 38 2 95 255 215 1 38 2 96 255 113 1 38 2 98 255 154 1 38 3 29 255 113 1 38 3 30 255 92 1 38 3 31 255 113 1 38 3 32 255 92 1 38 3 33 255 113 1 38 3 34 255 92 1 38 3 35 255 113 1 38 3 37 255 113 1 38 3 38 255 92 1 38 3 39 255 113 1 38 3 40 255 92 1 38 3 41 255 113 1 38 3 42 255 92 1 38 3 43 255 113 1 38 3 44 255 92 1 38 3 45 255 113 1 38 3 46 255 92 1 38 3 47 255 113 1 38 3 48 255 92 1 38 3 49 255 113 1 38 3 50 255 92 1 38 3 51 255 113 1 38 3 52 255 92 1 38 3 54 255 113 1 38 3 56 255 113 1 38 3 58 255 113 1 38 3 60 255 113 1 38 3 64 255 113 1 38 3 66 255 113 1 38 3 68 255 113 1 38 3 73 255 215 1 38 3 74 255 113 1 38 3 75 255 215 1 38 3 76 255 113 1 38 3 77 255 215 1 38 3 78 255 113 1 38 3 79 255 215 1 38 3 81 255 215 1 38 3 82 255 113 1 38 3 83 255 215 1 38 3 84 255 113 1 38 3 85 255 215 1 38 3 86 255 113 1 38 3 87 255 215 1 38 3 88 255 113 1 38 3 89 255 215 1 38 3 90 255 113 1 38 3 91 255 215 1 38 3 92 255 113 1 38 3 93 255 215 1 38 3 94 255 113 1 38 3 95 255 215 1 38 3 96 255 113 1 38 3 98 255 154 1 38 3 100 255 154 1 38 3 102 255 154 1 38 3 104 255 154 1 38 3 106 255 154 1 38 3 108 255 154 1 38 3 110 255 154 1 38 3 112 255 215 1 38 3 143 0 41 1 39 0 5 0 41 1 39 0 10 0 41 1 39 2 7 0 41 1 39 2 11 0 41 1 40 0 15 255 133 1 40 0 16 255 174 1 40 0 17 255 133 1 40 0 34 0 41 1 40 0 36 255 113 1 40 0 38 255 215 1 40 0 42 255 215 1 40 0 50 255 215 1 40 0 52 255 215 1 40 0 55 0 41 1 40 0 68 255 92 1 40 0 70 255 113 1 40 0 71 255 113 1 40 0 72 255 113 1 40 0 74 255 113 1 40 0 80 255 154 1 40 0 81 255 154 1 40 0 82 255 113 1 40 0 83 255 154 1 40 0 84 255 113 1 40 0 85 255 154 1 40 0 86 255 133 1 40 0 88 255 154 1 40 0 89 255 215 1 40 0 90 255 215 1 40 0 91 255 215 1 40 0 92 255 215 1 40 0 93 255 174 1 40 0 130 255 113 1 40 0 131 255 113 1 40 0 132 255 113 1 40 0 133 255 113 1 40 0 134 255 113 1 40 0 135 255 113 1 40 0 137 255 215 1 40 0 148 255 215 1 40 0 149 255 215 1 40 0 150 255 215 1 40 0 151 255 215 1 40 0 152 255 215 1 40 0 154 255 215 1 40 0 162 255 113 1 40 0 163 255 92 1 40 0 164 255 92 1 40 0 165 255 92 1 40 0 166 255 92 1 40 0 167 255 92 1 40 0 168 255 92 1 40 0 169 255 113 1 40 0 170 255 113 1 40 0 171 255 113 1 40 0 172 255 113 1 40 0 173 255 113 1 40 0 180 255 113 1 40 0 181 255 113 1 40 0 182 255 113 1 40 0 183 255 113 1 40 0 184 255 113 1 40 0 186 255 113 1 40 0 187 255 154 1 40 0 188 255 154 1 40 0 189 255 154 1 40 0 190 255 154 1 40 0 191 255 215 1 40 0 194 255 113 1 40 0 195 255 92 1 40 0 196 255 113 1 40 0 197 255 92 1 40 0 198 255 113 1 40 0 199 255 92 1 40 0 200 255 215 1 40 0 201 255 113 1 40 0 202 255 215 1 40 0 203 255 113 1 40 0 204 255 215 1 40 0 205 255 113 1 40 0 206 255 215 1 40 0 207 255 113 1 40 0 209 255 113 1 40 0 211 255 113 1 40 0 213 255 113 1 40 0 215 255 113 1 40 0 217 255 113 1 40 0 219 255 113 1 40 0 221 255 113 1 40 0 222 255 215 1 40 0 223 255 113 1 40 0 224 255 215 1 40 0 225 255 113 1 40 0 226 255 215 1 40 0 227 255 113 1 40 0 228 255 215 1 40 0 229 255 113 1 40 0 250 255 154 1 40 1 6 255 154 1 40 1 8 255 154 1 40 1 13 255 154 1 40 1 14 255 215 1 40 1 15 255 113 1 40 1 16 255 215 1 40 1 17 255 113 1 40 1 18 255 215 1 40 1 19 255 113 1 40 1 20 255 215 1 40 1 21 255 113 1 40 1 23 255 154 1 40 1 25 255 154 1 40 1 29 255 133 1 40 1 33 255 133 1 40 1 36 0 41 1 40 1 38 0 41 1 40 1 43 255 154 1 40 1 45 255 154 1 40 1 47 255 154 1 40 1 49 255 154 1 40 1 51 255 154 1 40 1 53 255 154 1 40 1 55 255 215 1 40 1 60 255 174 1 40 1 62 255 174 1 40 1 64 255 174 1 40 1 67 255 113 1 40 1 68 255 92 1 40 1 70 255 92 1 40 1 71 255 215 1 40 1 72 255 113 1 40 1 74 255 133 1 40 1 251 255 215 1 40 1 253 255 215 1 40 2 2 255 174 1 40 2 3 255 174 1 40 2 4 255 174 1 40 2 8 255 133 1 40 2 12 255 133 1 40 2 87 255 154 1 40 2 88 255 113 1 40 2 89 255 92 1 40 2 95 255 215 1 40 2 96 255 113 1 40 2 98 255 154 1 40 3 29 255 113 1 40 3 30 255 92 1 40 3 31 255 113 1 40 3 32 255 92 1 40 3 33 255 113 1 40 3 34 255 92 1 40 3 35 255 113 1 40 3 37 255 113 1 40 3 38 255 92 1 40 3 39 255 113 1 40 3 40 255 92 1 40 3 41 255 113 1 40 3 42 255 92 1 40 3 43 255 113 1 40 3 44 255 92 1 40 3 45 255 113 1 40 3 46 255 92 1 40 3 47 255 113 1 40 3 48 255 92 1 40 3 49 255 113 1 40 3 50 255 92 1 40 3 51 255 113 1 40 3 52 255 92 1 40 3 54 255 113 1 40 3 56 255 113 1 40 3 58 255 113 1 40 3 60 255 113 1 40 3 64 255 113 1 40 3 66 255 113 1 40 3 68 255 113 1 40 3 73 255 215 1 40 3 74 255 113 1 40 3 75 255 215 1 40 3 76 255 113 1 40 3 77 255 215 1 40 3 78 255 113 1 40 3 79 255 215 1 40 3 81 255 215 1 40 3 82 255 113 1 40 3 83 255 215 1 40 3 84 255 113 1 40 3 85 255 215 1 40 3 86 255 113 1 40 3 87 255 215 1 40 3 88 255 113 1 40 3 89 255 215 1 40 3 90 255 113 1 40 3 91 255 215 1 40 3 92 255 113 1 40 3 93 255 215 1 40 3 94 255 113 1 40 3 95 255 215 1 40 3 96 255 113 1 40 3 98 255 154 1 40 3 100 255 154 1 40 3 102 255 154 1 40 3 104 255 154 1 40 3 106 255 154 1 40 3 108 255 154 1 40 3 110 255 154 1 40 3 112 255 215 1 40 3 143 0 41 1 42 0 15 255 215 1 42 0 17 255 215 1 42 0 36 255 236 1 42 0 130 255 236 1 42 0 131 255 236 1 42 0 132 255 236 1 42 0 133 255 236 1 42 0 134 255 236 1 42 0 135 255 236 1 42 0 194 255 236 1 42 0 196 255 236 1 42 0 198 255 236 1 42 1 67 255 236 1 42 2 8 255 215 1 42 2 12 255 215 1 42 2 88 255 236 1 42 3 29 255 236 1 42 3 31 255 236 1 42 3 33 255 236 1 42 3 35 255 236 1 42 3 37 255 236 1 42 3 39 255 236 1 42 3 41 255 236 1 42 3 43 255 236 1 42 3 45 255 236 1 42 3 47 255 236 1 42 3 49 255 236 1 42 3 51 255 236 1 44 0 15 255 215 1 44 0 17 255 215 1 44 0 36 255 236 1 44 0 130 255 236 1 44 0 131 255 236 1 44 0 132 255 236 1 44 0 133 255 236 1 44 0 134 255 236 1 44 0 135 255 236 1 44 0 194 255 236 1 44 0 196 255 236 1 44 0 198 255 236 1 44 1 67 255 236 1 44 2 8 255 215 1 44 2 12 255 215 1 44 2 88 255 236 1 44 3 29 255 236 1 44 3 31 255 236 1 44 3 33 255 236 1 44 3 35 255 236 1 44 3 37 255 236 1 44 3 39 255 236 1 44 3 41 255 236 1 44 3 43 255 236 1 44 3 45 255 236 1 44 3 47 255 236 1 44 3 49 255 236 1 44 3 51 255 236 1 46 0 15 255 215 1 46 0 17 255 215 1 46 0 36 255 236 1 46 0 130 255 236 1 46 0 131 255 236 1 46 0 132 255 236 1 46 0 133 255 236 1 46 0 134 255 236 1 46 0 135 255 236 1 46 0 194 255 236 1 46 0 196 255 236 1 46 0 198 255 236 1 46 1 67 255 236 1 46 2 8 255 215 1 46 2 12 255 215 1 46 2 88 255 236 1 46 3 29 255 236 1 46 3 31 255 236 1 46 3 33 255 236 1 46 3 35 255 236 1 46 3 37 255 236 1 46 3 39 255 236 1 46 3 41 255 236 1 46 3 43 255 236 1 46 3 45 255 236 1 46 3 47 255 236 1 46 3 49 255 236 1 46 3 51 255 236 1 48 0 15 255 215 1 48 0 17 255 215 1 48 0 36 255 236 1 48 0 130 255 236 1 48 0 131 255 236 1 48 0 132 255 236 1 48 0 133 255 236 1 48 0 134 255 236 1 48 0 135 255 236 1 48 0 194 255 236 1 48 0 196 255 236 1 48 0 198 255 236 1 48 1 67 255 236 1 48 2 8 255 215 1 48 2 12 255 215 1 48 2 88 255 236 1 48 3 29 255 236 1 48 3 31 255 236 1 48 3 33 255 236 1 48 3 35 255 236 1 48 3 37 255 236 1 48 3 39 255 236 1 48 3 41 255 236 1 48 3 43 255 236 1 48 3 45 255 236 1 48 3 47 255 236 1 48 3 49 255 236 1 48 3 51 255 236 1 50 0 15 255 215 1 50 0 17 255 215 1 50 0 36 255 236 1 50 0 130 255 236 1 50 0 131 255 236 1 50 0 132 255 236 1 50 0 133 255 236 1 50 0 134 255 236 1 50 0 135 255 236 1 50 0 194 255 236 1 50 0 196 255 236 1 50 0 198 255 236 1 50 1 67 255 236 1 50 2 8 255 215 1 50 2 12 255 215 1 50 2 88 255 236 1 50 3 29 255 236 1 50 3 31 255 236 1 50 3 33 255 236 1 50 3 35 255 236 1 50 3 37 255 236 1 50 3 39 255 236 1 50 3 41 255 236 1 50 3 43 255 236 1 50 3 45 255 236 1 50 3 47 255 236 1 50 3 49 255 236 1 50 3 51 255 236 1 52 0 15 255 215 1 52 0 17 255 215 1 52 0 36 255 236 1 52 0 130 255 236 1 52 0 131 255 236 1 52 0 132 255 236 1 52 0 133 255 236 1 52 0 134 255 236 1 52 0 135 255 236 1 52 0 194 255 236 1 52 0 196 255 236 1 52 0 198 255 236 1 52 1 67 255 236 1 52 2 8 255 215 1 52 2 12 255 215 1 52 2 88 255 236 1 52 3 29 255 236 1 52 3 31 255 236 1 52 3 33 255 236 1 52 3 35 255 236 1 52 3 37 255 236 1 52 3 39 255 236 1 52 3 41 255 236 1 52 3 43 255 236 1 52 3 45 255 236 1 52 3 47 255 236 1 52 3 49 255 236 1 52 3 51 255 236 1 54 0 15 255 154 1 54 0 17 255 154 1 54 0 34 0 41 1 54 0 36 255 174 1 54 0 38 255 236 1 54 0 42 255 236 1 54 0 50 255 236 1 54 0 52 255 236 1 54 0 68 255 215 1 54 0 70 255 215 1 54 0 71 255 215 1 54 0 72 255 215 1 54 0 74 255 236 1 54 0 80 255 236 1 54 0 81 255 236 1 54 0 82 255 215 1 54 0 83 255 236 1 54 0 84 255 215 1 54 0 85 255 236 1 54 0 86 255 236 1 54 0 88 255 236 1 54 0 130 255 174 1 54 0 131 255 174 1 54 0 132 255 174 1 54 0 133 255 174 1 54 0 134 255 174 1 54 0 135 255 174 1 54 0 137 255 236 1 54 0 148 255 236 1 54 0 149 255 236 1 54 0 150 255 236 1 54 0 151 255 236 1 54 0 152 255 236 1 54 0 154 255 236 1 54 0 162 255 215 1 54 0 163 255 215 1 54 0 164 255 215 1 54 0 165 255 215 1 54 0 166 255 215 1 54 0 167 255 215 1 54 0 168 255 215 1 54 0 169 255 215 1 54 0 170 255 215 1 54 0 171 255 215 1 54 0 172 255 215 1 54 0 173 255 215 1 54 0 180 255 215 1 54 0 181 255 215 1 54 0 182 255 215 1 54 0 183 255 215 1 54 0 184 255 215 1 54 0 186 255 215 1 54 0 187 255 236 1 54 0 188 255 236 1 54 0 189 255 236 1 54 0 190 255 236 1 54 0 194 255 174 1 54 0 195 255 215 1 54 0 196 255 174 1 54 0 197 255 215 1 54 0 198 255 174 1 54 0 199 255 215 1 54 0 200 255 236 1 54 0 201 255 215 1 54 0 202 255 236 1 54 0 203 255 215 1 54 0 204 255 236 1 54 0 205 255 215 1 54 0 206 255 236 1 54 0 207 255 215 1 54 0 209 255 215 1 54 0 211 255 215 1 54 0 213 255 215 1 54 0 215 255 215 1 54 0 217 255 215 1 54 0 219 255 215 1 54 0 221 255 215 1 54 0 222 255 236 1 54 0 223 255 236 1 54 0 224 255 236 1 54 0 225 255 236 1 54 0 226 255 236 1 54 0 227 255 236 1 54 0 228 255 236 1 54 0 229 255 236 1 54 0 250 255 236 1 54 1 6 255 236 1 54 1 8 255 236 1 54 1 13 255 236 1 54 1 14 255 236 1 54 1 15 255 215 1 54 1 16 255 236 1 54 1 17 255 215 1 54 1 18 255 236 1 54 1 19 255 215 1 54 1 20 255 236 1 54 1 21 255 215 1 54 1 23 255 236 1 54 1 25 255 236 1 54 1 29 255 236 1 54 1 33 255 236 1 54 1 43 255 236 1 54 1 45 255 236 1 54 1 47 255 236 1 54 1 49 255 236 1 54 1 51 255 236 1 54 1 53 255 236 1 54 1 67 255 174 1 54 1 68 255 215 1 54 1 70 255 215 1 54 1 71 255 236 1 54 1 72 255 215 1 54 1 74 255 236 1 54 2 8 255 154 1 54 2 12 255 154 1 54 2 87 255 236 1 54 2 88 255 174 1 54 2 89 255 215 1 54 2 95 255 236 1 54 2 96 255 215 1 54 2 98 255 236 1 54 3 29 255 174 1 54 3 30 255 215 1 54 3 31 255 174 1 54 3 32 255 215 1 54 3 33 255 174 1 54 3 34 255 215 1 54 3 35 255 174 1 54 3 37 255 174 1 54 3 38 255 215 1 54 3 39 255 174 1 54 3 40 255 215 1 54 3 41 255 174 1 54 3 42 255 215 1 54 3 43 255 174 1 54 3 44 255 215 1 54 3 45 255 174 1 54 3 46 255 215 1 54 3 47 255 174 1 54 3 48 255 215 1 54 3 49 255 174 1 54 3 50 255 215 1 54 3 51 255 174 1 54 3 52 255 215 1 54 3 54 255 215 1 54 3 56 255 215 1 54 3 58 255 215 1 54 3 60 255 215 1 54 3 64 255 215 1 54 3 66 255 215 1 54 3 68 255 215 1 54 3 73 255 236 1 54 3 74 255 215 1 54 3 75 255 236 1 54 3 76 255 215 1 54 3 77 255 236 1 54 3 78 255 215 1 54 3 79 255 236 1 54 3 81 255 236 1 54 3 82 255 215 1 54 3 83 255 236 1 54 3 84 255 215 1 54 3 85 255 236 1 54 3 86 255 215 1 54 3 87 255 236 1 54 3 88 255 215 1 54 3 89 255 236 1 54 3 90 255 215 1 54 3 91 255 236 1 54 3 92 255 215 1 54 3 93 255 236 1 54 3 94 255 215 1 54 3 95 255 236 1 54 3 96 255 215 1 54 3 98 255 236 1 54 3 100 255 236 1 54 3 102 255 236 1 54 3 104 255 236 1 54 3 106 255 236 1 54 3 108 255 236 1 54 3 110 255 236 1 55 0 5 0 82 1 55 0 10 0 82 1 55 0 15 255 174 1 55 0 17 255 174 1 55 0 34 0 41 1 55 2 7 0 82 1 55 2 8 255 174 1 55 2 11 0 82 1 55 2 12 255 174 1 56 0 15 255 133 1 56 0 17 255 133 1 56 0 34 0 41 1 56 0 36 255 133 1 56 0 38 255 215 1 56 0 42 255 215 1 56 0 50 255 215 1 56 0 52 255 215 1 56 0 68 255 154 1 56 0 70 255 154 1 56 0 71 255 154 1 56 0 72 255 154 1 56 0 74 255 215 1 56 0 80 255 195 1 56 0 81 255 195 1 56 0 82 255 154 1 56 0 83 255 195 1 56 0 84 255 154 1 56 0 85 255 195 1 56 0 86 255 174 1 56 0 88 255 195 1 56 0 93 255 215 1 56 0 130 255 133 1 56 0 131 255 133 1 56 0 132 255 133 1 56 0 133 255 133 1 56 0 134 255 133 1 56 0 135 255 133 1 56 0 137 255 215 1 56 0 148 255 215 1 56 0 149 255 215 1 56 0 150 255 215 1 56 0 151 255 215 1 56 0 152 255 215 1 56 0 154 255 215 1 56 0 162 255 154 1 56 0 163 255 154 1 56 0 164 255 154 1 56 0 165 255 154 1 56 0 166 255 154 1 56 0 167 255 154 1 56 0 168 255 154 1 56 0 169 255 154 1 56 0 170 255 154 1 56 0 171 255 154 1 56 0 172 255 154 1 56 0 173 255 154 1 56 0 180 255 154 1 56 0 181 255 154 1 56 0 182 255 154 1 56 0 183 255 154 1 56 0 184 255 154 1 56 0 186 255 154 1 56 0 187 255 195 1 56 0 188 255 195 1 56 0 189 255 195 1 56 0 190 255 195 1 56 0 194 255 133 1 56 0 195 255 154 1 56 0 196 255 133 1 56 0 197 255 154 1 56 0 198 255 133 1 56 0 199 255 154 1 56 0 200 255 215 1 56 0 201 255 154 1 56 0 202 255 215 1 56 0 203 255 154 1 56 0 204 255 215 1 56 0 205 255 154 1 56 0 206 255 215 1 56 0 207 255 154 1 56 0 209 255 154 1 56 0 211 255 154 1 56 0 213 255 154 1 56 0 215 255 154 1 56 0 217 255 154 1 56 0 219 255 154 1 56 0 221 255 154 1 56 0 222 255 215 1 56 0 223 255 215 1 56 0 224 255 215 1 56 0 225 255 215 1 56 0 226 255 215 1 56 0 227 255 215 1 56 0 228 255 215 1 56 0 229 255 215 1 56 0 250 255 195 1 56 1 6 255 195 1 56 1 8 255 195 1 56 1 13 255 195 1 56 1 14 255 215 1 56 1 15 255 154 1 56 1 16 255 215 1 56 1 17 255 154 1 56 1 18 255 215 1 56 1 19 255 154 1 56 1 20 255 215 1 56 1 21 255 154 1 56 1 23 255 195 1 56 1 25 255 195 1 56 1 29 255 174 1 56 1 33 255 174 1 56 1 43 255 195 1 56 1 45 255 195 1 56 1 47 255 195 1 56 1 49 255 195 1 56 1 51 255 195 1 56 1 53 255 195 1 56 1 60 255 215 1 56 1 62 255 215 1 56 1 64 255 215 1 56 1 67 255 133 1 56 1 68 255 154 1 56 1 70 255 154 1 56 1 71 255 215 1 56 1 72 255 154 1 56 1 74 255 174 1 56 2 8 255 133 1 56 2 12 255 133 1 56 2 87 255 195 1 56 2 88 255 133 1 56 2 89 255 154 1 56 2 95 255 215 1 56 2 96 255 154 1 56 2 98 255 195 1 56 3 29 255 133 1 56 3 30 255 154 1 56 3 31 255 133 1 56 3 32 255 154 1 56 3 33 255 133 1 56 3 34 255 154 1 56 3 35 255 133 1 56 3 37 255 133 1 56 3 38 255 154 1 56 3 39 255 133 1 56 3 40 255 154 1 56 3 41 255 133 1 56 3 42 255 154 1 56 3 43 255 133 1 56 3 44 255 154 1 56 3 45 255 133 1 56 3 46 255 154 1 56 3 47 255 133 1 56 3 48 255 154 1 56 3 49 255 133 1 56 3 50 255 154 1 56 3 51 255 133 1 56 3 52 255 154 1 56 3 54 255 154 1 56 3 56 255 154 1 56 3 58 255 154 1 56 3 60 255 154 1 56 3 64 255 154 1 56 3 66 255 154 1 56 3 68 255 154 1 56 3 73 255 215 1 56 3 74 255 154 1 56 3 75 255 215 1 56 3 76 255 154 1 56 3 77 255 215 1 56 3 78 255 154 1 56 3 79 255 215 1 56 3 81 255 215 1 56 3 82 255 154 1 56 3 83 255 215 1 56 3 84 255 154 1 56 3 85 255 215 1 56 3 86 255 154 1 56 3 87 255 215 1 56 3 88 255 154 1 56 3 89 255 215 1 56 3 90 255 154 1 56 3 91 255 215 1 56 3 92 255 154 1 56 3 93 255 215 1 56 3 94 255 154 1 56 3 95 255 215 1 56 3 96 255 154 1 56 3 98 255 195 1 56 3 100 255 195 1 56 3 102 255 195 1 56 3 104 255 195 1 56 3 106 255 195 1 56 3 108 255 195 1 56 3 110 255 195 1 57 0 5 0 82 1 57 0 10 0 82 1 57 0 15 255 174 1 57 0 17 255 174 1 57 0 34 0 41 1 57 2 7 0 82 1 57 2 8 255 174 1 57 2 11 0 82 1 57 2 12 255 174 1 58 0 15 255 133 1 58 0 17 255 133 1 58 0 34 0 41 1 58 0 36 255 133 1 58 0 38 255 215 1 58 0 42 255 215 1 58 0 50 255 215 1 58 0 52 255 215 1 58 0 68 255 154 1 58 0 70 255 154 1 58 0 71 255 154 1 58 0 72 255 154 1 58 0 74 255 215 1 58 0 80 255 195 1 58 0 81 255 195 1 58 0 82 255 154 1 58 0 83 255 195 1 58 0 84 255 154 1 58 0 85 255 195 1 58 0 86 255 174 1 58 0 88 255 195 1 58 0 93 255 215 1 58 0 130 255 133 1 58 0 131 255 133 1 58 0 132 255 133 1 58 0 133 255 133 1 58 0 134 255 133 1 58 0 135 255 133 1 58 0 137 255 215 1 58 0 148 255 215 1 58 0 149 255 215 1 58 0 150 255 215 1 58 0 151 255 215 1 58 0 152 255 215 1 58 0 154 255 215 1 58 0 162 255 154 1 58 0 163 255 154 1 58 0 164 255 154 1 58 0 165 255 154 1 58 0 166 255 154 1 58 0 167 255 154 1 58 0 168 255 154 1 58 0 169 255 154 1 58 0 170 255 154 1 58 0 171 255 154 1 58 0 172 255 154 1 58 0 173 255 154 1 58 0 180 255 154 1 58 0 181 255 154 1 58 0 182 255 154 1 58 0 183 255 154 1 58 0 184 255 154 1 58 0 186 255 154 1 58 0 187 255 195 1 58 0 188 255 195 1 58 0 189 255 195 1 58 0 190 255 195 1 58 0 194 255 133 1 58 0 195 255 154 1 58 0 196 255 133 1 58 0 197 255 154 1 58 0 198 255 133 1 58 0 199 255 154 1 58 0 200 255 215 1 58 0 201 255 154 1 58 0 202 255 215 1 58 0 203 255 154 1 58 0 204 255 215 1 58 0 205 255 154 1 58 0 206 255 215 1 58 0 207 255 154 1 58 0 209 255 154 1 58 0 211 255 154 1 58 0 213 255 154 1 58 0 215 255 154 1 58 0 217 255 154 1 58 0 219 255 154 1 58 0 221 255 154 1 58 0 222 255 215 1 58 0 223 255 215 1 58 0 224 255 215 1 58 0 225 255 215 1 58 0 226 255 215 1 58 0 227 255 215 1 58 0 228 255 215 1 58 0 229 255 215 1 58 0 250 255 195 1 58 1 6 255 195 1 58 1 8 255 195 1 58 1 13 255 195 1 58 1 14 255 215 1 58 1 15 255 154 1 58 1 16 255 215 1 58 1 17 255 154 1 58 1 18 255 215 1 58 1 19 255 154 1 58 1 20 255 215 1 58 1 21 255 154 1 58 1 23 255 195 1 58 1 25 255 195 1 58 1 29 255 174 1 58 1 33 255 174 1 58 1 43 255 195 1 58 1 45 255 195 1 58 1 47 255 195 1 58 1 49 255 195 1 58 1 51 255 195 1 58 1 53 255 195 1 58 1 60 255 215 1 58 1 62 255 215 1 58 1 64 255 215 1 58 1 67 255 133 1 58 1 68 255 154 1 58 1 70 255 154 1 58 1 71 255 215 1 58 1 72 255 154 1 58 1 74 255 174 1 58 2 8 255 133 1 58 2 12 255 133 1 58 2 87 255 195 1 58 2 88 255 133 1 58 2 89 255 154 1 58 2 95 255 215 1 58 2 96 255 154 1 58 2 98 255 195 1 58 3 29 255 133 1 58 3 30 255 154 1 58 3 31 255 133 1 58 3 32 255 154 1 58 3 33 255 133 1 58 3 34 255 154 1 58 3 35 255 133 1 58 3 37 255 133 1 58 3 38 255 154 1 58 3 39 255 133 1 58 3 40 255 154 1 58 3 41 255 133 1 58 3 42 255 154 1 58 3 43 255 133 1 58 3 44 255 154 1 58 3 45 255 133 1 58 3 46 255 154 1 58 3 47 255 133 1 58 3 48 255 154 1 58 3 49 255 133 1 58 3 50 255 154 1 58 3 51 255 133 1 58 3 52 255 154 1 58 3 54 255 154 1 58 3 56 255 154 1 58 3 58 255 154 1 58 3 60 255 154 1 58 3 64 255 154 1 58 3 66 255 154 1 58 3 68 255 154 1 58 3 73 255 215 1 58 3 74 255 154 1 58 3 75 255 215 1 58 3 76 255 154 1 58 3 77 255 215 1 58 3 78 255 154 1 58 3 79 255 215 1 58 3 81 255 215 1 58 3 82 255 154 1 58 3 83 255 215 1 58 3 84 255 154 1 58 3 85 255 215 1 58 3 86 255 154 1 58 3 87 255 215 1 58 3 88 255 154 1 58 3 89 255 215 1 58 3 90 255 154 1 58 3 91 255 215 1 58 3 92 255 154 1 58 3 93 255 215 1 58 3 94 255 154 1 58 3 95 255 215 1 58 3 96 255 154 1 58 3 98 255 195 1 58 3 100 255 195 1 58 3 102 255 195 1 58 3 104 255 195 1 58 3 106 255 195 1 58 3 108 255 195 1 58 3 110 255 195 1 59 0 38 255 236 1 59 0 42 255 236 1 59 0 50 255 236 1 59 0 52 255 236 1 59 0 137 255 236 1 59 0 148 255 236 1 59 0 149 255 236 1 59 0 150 255 236 1 59 0 151 255 236 1 59 0 152 255 236 1 59 0 154 255 236 1 59 0 200 255 236 1 59 0 202 255 236 1 59 0 204 255 236 1 59 0 206 255 236 1 59 0 222 255 236 1 59 0 224 255 236 1 59 0 226 255 236 1 59 0 228 255 236 1 59 1 14 255 236 1 59 1 16 255 236 1 59 1 18 255 236 1 59 1 20 255 236 1 59 1 71 255 236 1 59 2 95 255 236 1 59 3 73 255 236 1 59 3 75 255 236 1 59 3 77 255 236 1 59 3 79 255 236 1 59 3 81 255 236 1 59 3 83 255 236 1 59 3 85 255 236 1 59 3 87 255 236 1 59 3 89 255 236 1 59 3 91 255 236 1 59 3 93 255 236 1 59 3 95 255 236 1 61 0 38 255 236 1 61 0 42 255 236 1 61 0 50 255 236 1 61 0 52 255 236 1 61 0 137 255 236 1 61 0 148 255 236 1 61 0 149 255 236 1 61 0 150 255 236 1 61 0 151 255 236 1 61 0 152 255 236 1 61 0 154 255 236 1 61 0 200 255 236 1 61 0 202 255 236 1 61 0 204 255 236 1 61 0 206 255 236 1 61 0 222 255 236 1 61 0 224 255 236 1 61 0 226 255 236 1 61 0 228 255 236 1 61 1 14 255 236 1 61 1 16 255 236 1 61 1 18 255 236 1 61 1 20 255 236 1 61 1 71 255 236 1 61 2 95 255 236 1 61 3 73 255 236 1 61 3 75 255 236 1 61 3 77 255 236 1 61 3 79 255 236 1 61 3 81 255 236 1 61 3 83 255 236 1 61 3 85 255 236 1 61 3 87 255 236 1 61 3 89 255 236 1 61 3 91 255 236 1 61 3 93 255 236 1 61 3 95 255 236 1 63 0 38 255 236 1 63 0 42 255 236 1 63 0 50 255 236 1 63 0 52 255 236 1 63 0 137 255 236 1 63 0 148 255 236 1 63 0 149 255 236 1 63 0 150 255 236 1 63 0 151 255 236 1 63 0 152 255 236 1 63 0 154 255 236 1 63 0 200 255 236 1 63 0 202 255 236 1 63 0 204 255 236 1 63 0 206 255 236 1 63 0 222 255 236 1 63 0 224 255 236 1 63 0 226 255 236 1 63 0 228 255 236 1 63 1 14 255 236 1 63 1 16 255 236 1 63 1 18 255 236 1 63 1 20 255 236 1 63 1 71 255 236 1 63 2 95 255 236 1 63 3 73 255 236 1 63 3 75 255 236 1 63 3 77 255 236 1 63 3 79 255 236 1 63 3 81 255 236 1 63 3 83 255 236 1 63 3 85 255 236 1 63 3 87 255 236 1 63 3 89 255 236 1 63 3 91 255 236 1 63 3 93 255 236 1 63 3 95 255 236 1 67 0 5 255 113 1 67 0 10 255 113 1 67 0 38 255 215 1 67 0 42 255 215 1 67 0 45 1 10 1 67 0 50 255 215 1 67 0 52 255 215 1 67 0 55 255 113 1 67 0 57 255 174 1 67 0 58 255 174 1 67 0 60 255 133 1 67 0 137 255 215 1 67 0 148 255 215 1 67 0 149 255 215 1 67 0 150 255 215 1 67 0 151 255 215 1 67 0 152 255 215 1 67 0 154 255 215 1 67 0 159 255 133 1 67 0 200 255 215 1 67 0 202 255 215 1 67 0 204 255 215 1 67 0 206 255 215 1 67 0 222 255 215 1 67 0 224 255 215 1 67 0 226 255 215 1 67 0 228 255 215 1 67 1 14 255 215 1 67 1 16 255 215 1 67 1 18 255 215 1 67 1 20 255 215 1 67 1 36 255 113 1 67 1 38 255 113 1 67 1 54 255 174 1 67 1 56 255 133 1 67 1 58 255 133 1 67 1 71 255 215 1 67 1 250 255 174 1 67 1 252 255 174 1 67 1 254 255 174 1 67 2 0 255 133 1 67 2 7 255 113 1 67 2 11 255 113 1 67 2 95 255 215 1 67 3 73 255 215 1 67 3 75 255 215 1 67 3 77 255 215 1 67 3 79 255 215 1 67 3 81 255 215 1 67 3 83 255 215 1 67 3 85 255 215 1 67 3 87 255 215 1 67 3 89 255 215 1 67 3 91 255 215 1 67 3 93 255 215 1 67 3 95 255 215 1 67 3 111 255 133 1 67 3 113 255 133 1 67 3 115 255 133 1 67 3 143 255 113 1 68 0 5 255 236 1 68 0 10 255 236 1 68 2 7 255 236 1 68 2 11 255 236 1 69 0 45 0 123 1 71 0 15 255 174 1 71 0 17 255 174 1 71 0 36 255 215 1 71 0 55 255 195 1 71 0 57 255 236 1 71 0 58 255 236 1 71 0 59 255 215 1 71 0 60 255 236 1 71 0 61 255 236 1 71 0 130 255 215 1 71 0 131 255 215 1 71 0 132 255 215 1 71 0 133 255 215 1 71 0 134 255 215 1 71 0 135 255 215 1 71 0 159 255 236 1 71 0 194 255 215 1 71 0 196 255 215 1 71 0 198 255 215 1 71 1 36 255 195 1 71 1 38 255 195 1 71 1 54 255 236 1 71 1 56 255 236 1 71 1 58 255 236 1 71 1 59 255 236 1 71 1 61 255 236 1 71 1 63 255 236 1 71 1 67 255 215 1 71 1 160 255 236 1 71 1 250 255 236 1 71 1 252 255 236 1 71 1 254 255 236 1 71 2 0 255 236 1 71 2 8 255 174 1 71 2 12 255 174 1 71 2 88 255 215 1 71 3 29 255 215 1 71 3 31 255 215 1 71 3 33 255 215 1 71 3 35 255 215 1 71 3 37 255 215 1 71 3 39 255 215 1 71 3 41 255 215 1 71 3 43 255 215 1 71 3 45 255 215 1 71 3 47 255 215 1 71 3 49 255 215 1 71 3 51 255 215 1 71 3 111 255 236 1 71 3 113 255 236 1 71 3 115 255 236 1 71 3 143 255 195 1 86 0 5 255 113 1 86 0 10 255 113 1 86 1 102 255 215 1 86 1 109 255 215 1 86 1 113 255 113 1 86 1 114 255 133 1 86 1 115 255 215 1 86 1 117 255 174 1 86 1 120 255 133 1 86 2 7 255 113 1 86 2 11 255 113 1 86 2 84 255 133 1 91 0 15 255 174 1 91 0 17 255 174 1 91 1 86 255 215 1 91 1 95 255 215 1 91 1 98 255 215 1 91 1 100 255 236 1 91 1 105 255 215 1 91 1 112 255 236 1 91 1 113 255 195 1 91 1 114 255 236 1 91 1 116 255 215 1 91 1 117 255 236 1 91 1 120 255 236 1 91 1 136 255 236 1 91 2 8 255 174 1 91 2 12 255 174 1 91 2 84 255 236 1 92 0 15 255 133 1 92 0 17 255 133 1 92 1 86 255 133 1 92 1 95 255 133 1 92 1 98 255 133 1 92 1 102 255 215 1 92 1 105 255 133 1 92 1 109 255 215 1 92 1 115 255 195 1 92 1 118 255 236 1 92 1 121 255 154 1 92 1 122 255 174 1 92 1 123 255 195 1 92 1 124 255 195 1 92 1 125 255 195 1 92 1 126 255 154 1 92 1 129 255 195 1 92 1 130 255 174 1 92 1 132 255 195 1 92 1 134 255 195 1 92 1 135 255 195 1 92 1 137 255 195 1 92 1 140 255 154 1 92 1 142 255 154 1 92 1 143 255 154 1 92 1 144 255 154 1 92 1 146 255 195 1 92 1 147 255 154 1 92 1 149 255 195 1 92 1 150 255 195 1 92 1 152 255 195 1 92 1 153 255 154 1 92 1 154 255 195 1 92 1 155 255 195 1 92 2 8 255 133 1 92 2 12 255 133 1 92 2 33 255 236 1 93 1 113 255 215 1 93 1 114 255 236 1 93 1 120 255 236 1 93 2 84 255 236 1 94 0 5 255 215 1 94 0 10 255 215 1 94 2 7 255 215 1 94 2 11 255 215 1 95 0 5 255 113 1 95 0 10 255 113 1 95 1 102 255 215 1 95 1 109 255 215 1 95 1 113 255 113 1 95 1 114 255 133 1 95 1 115 255 215 1 95 1 117 255 174 1 95 1 120 255 133 1 95 2 7 255 113 1 95 2 11 255 113 1 95 2 84 255 133 1 96 0 15 255 174 1 96 0 17 255 174 1 96 1 86 255 215 1 96 1 95 255 215 1 96 1 98 255 215 1 96 1 105 255 215 1 96 1 116 255 215 1 96 2 8 255 174 1 96 2 12 255 174 1 97 0 15 255 133 1 97 0 16 255 174 1 97 0 17 255 133 1 97 1 86 255 92 1 97 1 95 255 92 1 97 1 98 255 92 1 97 1 102 255 195 1 97 1 105 255 92 1 97 1 109 255 195 1 97 1 115 255 154 1 97 1 118 255 195 1 97 1 121 255 113 1 97 1 122 255 154 1 97 1 123 255 154 1 97 1 124 255 174 1 97 1 125 255 154 1 97 1 126 255 113 1 97 1 128 255 215 1 97 1 129 255 195 1 97 1 130 255 154 1 97 1 132 255 154 1 97 1 134 255 174 1 97 1 135 255 154 1 97 1 137 255 154 1 97 1 138 255 215 1 97 1 140 255 113 1 97 1 142 255 154 1 97 1 143 255 113 1 97 1 144 255 113 1 97 1 146 255 154 1 97 1 147 255 113 1 97 1 148 255 215 1 97 1 149 255 154 1 97 1 150 255 154 1 97 1 152 255 154 1 97 1 153 255 113 1 97 1 154 255 154 1 97 1 155 255 154 1 97 2 2 255 174 1 97 2 3 255 174 1 97 2 4 255 174 1 97 2 8 255 133 1 97 2 12 255 133 1 97 2 33 255 195 1 97 2 83 255 215 1 98 0 5 255 113 1 98 0 10 255 113 1 98 1 102 255 215 1 98 1 109 255 215 1 98 1 113 255 113 1 98 1 114 255 133 1 98 1 115 255 215 1 98 1 117 255 174 1 98 1 120 255 133 1 98 2 7 255 113 1 98 2 11 255 113 1 98 2 84 255 133 1 100 1 102 255 236 1 100 1 109 255 236 1 100 1 115 255 195 1 102 0 15 255 174 1 102 0 17 255 174 1 102 1 86 255 215 1 102 1 95 255 215 1 102 1 98 255 215 1 102 1 100 255 236 1 102 1 105 255 215 1 102 1 112 255 236 1 102 1 113 255 195 1 102 1 114 255 236 1 102 1 116 255 215 1 102 1 117 255 236 1 102 1 120 255 236 1 102 1 136 255 236 1 102 2 8 255 174 1 102 2 12 255 174 1 102 2 84 255 236 1 104 1 102 255 215 1 104 1 109 255 215 1 104 1 115 255 195 1 104 1 141 255 236 1 104 1 145 255 236 1 105 0 5 255 113 1 105 0 10 255 113 1 105 1 102 255 215 1 105 1 109 255 215 1 105 1 113 255 113 1 105 1 114 255 133 1 105 1 115 255 215 1 105 1 117 255 174 1 105 1 120 255 133 1 105 2 7 255 113 1 105 2 11 255 113 1 105 2 84 255 133 1 109 0 15 255 174 1 109 0 17 255 174 1 109 1 86 255 215 1 109 1 95 255 215 1 109 1 98 255 215 1 109 1 100 255 236 1 109 1 105 255 215 1 109 1 112 255 236 1 109 1 113 255 195 1 109 1 114 255 236 1 109 1 116 255 215 1 109 1 117 255 236 1 109 1 120 255 236 1 109 1 136 255 236 1 109 2 8 255 174 1 109 2 12 255 174 1 109 2 84 255 236 1 111 0 15 254 246 1 111 0 17 254 246 1 111 1 86 255 154 1 111 1 95 255 154 1 111 1 98 255 154 1 111 1 100 255 236 1 111 1 105 255 154 1 111 1 116 255 215 1 111 1 136 255 215 1 111 2 8 254 246 1 111 2 12 254 246 1 113 0 15 255 133 1 113 0 16 255 174 1 113 0 17 255 133 1 113 1 86 255 92 1 113 1 95 255 92 1 113 1 98 255 92 1 113 1 102 255 195 1 113 1 105 255 92 1 113 1 109 255 195 1 113 1 115 255 154 1 113 1 118 255 195 1 113 1 121 255 113 1 113 1 122 255 154 1 113 1 123 255 154 1 113 1 124 255 174 1 113 1 125 255 154 1 113 1 126 255 113 1 113 1 128 255 215 1 113 1 129 255 195 1 113 1 130 255 154 1 113 1 132 255 154 1 113 1 134 255 174 1 113 1 135 255 154 1 113 1 137 255 154 1 113 1 138 255 215 1 113 1 140 255 113 1 113 1 142 255 154 1 113 1 143 255 113 1 113 1 144 255 113 1 113 1 146 255 154 1 113 1 147 255 113 1 113 1 148 255 215 1 113 1 149 255 154 1 113 1 150 255 154 1 113 1 152 255 154 1 113 1 153 255 113 1 113 1 154 255 154 1 113 1 155 255 154 1 113 2 2 255 174 1 113 2 3 255 174 1 113 2 4 255 174 1 113 2 8 255 133 1 113 2 12 255 133 1 113 2 33 255 195 1 113 2 83 255 215 1 114 0 15 255 133 1 114 0 17 255 133 1 114 1 86 255 133 1 114 1 95 255 133 1 114 1 98 255 133 1 114 1 102 255 215 1 114 1 105 255 133 1 114 1 109 255 215 1 114 1 115 255 195 1 114 1 118 255 236 1 114 1 121 255 154 1 114 1 122 255 174 1 114 1 123 255 195 1 114 1 124 255 195 1 114 1 125 255 195 1 114 1 126 255 154 1 114 1 129 255 195 1 114 1 130 255 174 1 114 1 132 255 195 1 114 1 134 255 195 1 114 1 135 255 195 1 114 1 137 255 195 1 114 1 140 255 154 1 114 1 142 255 154 1 114 1 143 255 154 1 114 1 144 255 154 1 114 1 146 255 195 1 114 1 147 255 154 1 114 1 149 255 195 1 114 1 150 255 195 1 114 1 152 255 195 1 114 1 153 255 154 1 114 1 154 255 195 1 114 1 155 255 195 1 114 2 8 255 133 1 114 2 12 255 133 1 114 2 33 255 236 1 115 0 15 255 154 1 115 0 17 255 154 1 115 1 86 255 215 1 115 1 95 255 215 1 115 1 98 255 215 1 115 1 100 255 195 1 115 1 105 255 215 1 115 1 112 255 236 1 115 1 113 255 174 1 115 1 114 255 195 1 115 1 116 255 236 1 115 1 120 255 195 1 115 1 136 255 236 1 115 2 8 255 154 1 115 2 12 255 154 1 115 2 84 255 195 1 116 1 102 255 215 1 116 1 109 255 215 1 116 1 115 255 195 1 116 1 141 255 236 1 116 1 145 255 236 1 117 0 15 255 133 1 117 0 17 255 133 1 117 1 86 255 174 1 117 1 95 255 174 1 117 1 98 255 174 1 117 1 102 255 236 1 117 1 105 255 174 1 117 1 109 255 236 1 117 2 8 255 133 1 117 2 12 255 133 1 118 1 113 255 215 1 118 1 114 255 236 1 118 1 120 255 236 1 118 2 84 255 236 1 120 0 15 255 133 1 120 0 17 255 133 1 120 1 86 255 133 1 120 1 95 255 133 1 120 1 98 255 133 1 120 1 102 255 215 1 120 1 105 255 133 1 120 1 109 255 215 1 120 1 115 255 195 1 120 1 118 255 236 1 120 1 121 255 154 1 120 1 122 255 174 1 120 1 123 255 195 1 120 1 124 255 195 1 120 1 125 255 195 1 120 1 126 255 154 1 120 1 129 255 195 1 120 1 130 255 174 1 120 1 132 255 195 1 120 1 134 255 195 1 120 1 135 255 195 1 120 1 137 255 195 1 120 1 140 255 154 1 120 1 142 255 154 1 120 1 143 255 154 1 120 1 144 255 154 1 120 1 146 255 195 1 120 1 147 255 154 1 120 1 149 255 195 1 120 1 150 255 195 1 120 1 152 255 195 1 120 1 153 255 154 1 120 1 154 255 195 1 120 1 155 255 195 1 120 2 8 255 133 1 120 2 12 255 133 1 120 2 33 255 236 1 121 1 136 0 41 1 123 0 5 255 236 1 123 0 10 255 236 1 123 2 7 255 236 1 123 2 11 255 236 1 124 0 5 255 174 1 124 0 10 255 174 1 124 1 141 255 236 1 124 1 145 255 236 1 124 2 7 255 174 1 124 2 11 255 174 1 126 1 136 0 41 1 128 0 15 255 174 1 128 0 17 255 174 1 128 1 136 255 236 1 128 2 8 255 174 1 128 2 12 255 174 1 131 0 16 255 154 1 131 1 121 255 215 1 131 1 126 255 215 1 131 1 129 255 215 1 131 1 140 255 215 1 131 1 141 255 215 1 131 1 143 255 215 1 131 1 144 255 215 1 131 1 145 255 215 1 131 1 147 255 215 1 131 1 153 255 215 1 131 2 2 255 154 1 131 2 3 255 154 1 131 2 4 255 154 1 132 0 5 255 236 1 132 0 10 255 236 1 132 2 7 255 236 1 132 2 11 255 236 1 133 0 15 255 215 1 133 0 17 255 215 1 133 2 8 255 215 1 133 2 12 255 215 1 134 0 5 255 174 1 134 0 10 255 174 1 134 1 141 255 236 1 134 1 145 255 236 1 134 2 7 255 174 1 134 2 11 255 174 1 135 1 121 255 215 1 135 1 126 255 215 1 135 1 140 255 215 1 135 1 143 255 215 1 135 1 144 255 215 1 135 1 147 255 215 1 135 1 153 255 215 1 136 0 5 255 133 1 136 0 10 255 133 1 136 1 121 255 236 1 136 1 126 255 236 1 136 1 128 255 215 1 136 1 138 255 215 1 136 1 140 255 236 1 136 1 141 255 215 1 136 1 143 255 236 1 136 1 144 255 236 1 136 1 145 255 215 1 136 1 147 255 236 1 136 1 153 255 236 1 136 2 7 255 133 1 136 2 11 255 133 1 138 0 15 255 174 1 138 0 17 255 174 1 138 1 136 255 236 1 138 2 8 255 174 1 138 2 12 255 174 1 140 0 5 255 236 1 140 0 10 255 236 1 140 1 128 255 215 1 140 1 138 255 215 1 140 2 7 255 236 1 140 2 11 255 236 1 142 0 5 255 236 1 142 0 10 255 236 1 142 1 128 255 215 1 142 1 138 255 215 1 142 2 7 255 236 1 142 2 11 255 236 1 144 0 15 255 236 1 144 0 17 255 236 1 144 2 8 255 236 1 144 2 12 255 236 1 147 0 5 255 236 1 147 0 10 255 236 1 147 1 128 255 215 1 147 1 138 255 215 1 147 2 7 255 236 1 147 2 11 255 236 1 148 0 15 255 195 1 148 0 16 255 215 1 148 0 17 255 195 1 148 1 121 255 215 1 148 1 126 255 215 1 148 1 129 255 215 1 148 1 140 255 215 1 148 1 143 255 215 1 148 1 144 255 215 1 148 1 147 255 215 1 148 1 153 255 215 1 148 2 2 255 215 1 148 2 3 255 215 1 148 2 4 255 215 1 148 2 8 255 195 1 148 2 12 255 195 1 151 0 5 255 215 1 151 0 10 255 215 1 151 2 7 255 215 1 151 2 11 255 215 1 153 0 5 255 236 1 153 0 10 255 236 1 153 1 128 255 215 1 153 1 138 255 215 1 153 2 7 255 236 1 153 2 11 255 236 1 157 0 5 255 174 1 157 0 10 255 174 1 157 1 157 255 133 1 157 1 166 255 133 1 157 1 168 255 215 1 157 1 188 255 154 1 157 1 189 255 215 1 157 1 193 255 154 1 157 1 196 255 133 1 157 1 220 255 215 1 157 1 221 255 215 1 157 1 225 255 215 1 157 1 228 255 215 1 157 1 246 255 215 1 157 2 7 255 174 1 157 2 11 255 174 1 157 2 110 255 174 1 157 2 124 255 154 1 157 2 128 255 174 1 157 2 130 255 174 1 157 2 151 255 174 1 157 2 155 255 174 1 157 2 167 255 174 1 157 2 169 255 133 1 157 2 170 255 215 1 157 2 181 255 154 1 157 2 182 255 215 1 157 2 183 255 154 1 157 2 184 255 215 1 157 2 185 255 154 1 157 2 186 255 215 1 157 2 189 255 133 1 157 2 190 255 215 1 157 2 191 255 154 1 157 2 192 255 215 1 157 2 193 255 154 1 157 2 194 255 215 1 157 2 212 255 154 1 157 2 213 255 215 1 157 2 247 255 215 1 157 2 248 255 215 1 157 2 249 255 215 1 157 2 250 255 215 1 157 2 251 255 215 1 157 2 252 255 215 1 157 2 253 255 154 1 157 2 254 255 215 1 157 3 3 255 174 1 157 3 13 255 154 1 157 3 14 255 195 1 157 3 15 255 154 1 157 3 16 255 195 1 157 3 23 255 133 1 157 3 24 255 215 1 158 0 15 255 133 1 158 0 16 255 174 1 158 0 17 255 133 1 158 1 159 255 215 1 158 1 164 255 154 1 158 1 170 255 113 1 158 1 174 255 154 1 158 1 181 255 154 1 158 1 184 255 215 1 158 1 187 255 215 1 158 1 188 0 41 1 158 1 190 255 174 1 158 1 204 255 154 1 158 1 205 255 154 1 158 1 206 255 133 1 158 1 207 255 113 1 158 1 208 255 215 1 158 1 209 255 215 1 158 1 210 255 154 1 158 1 211 255 154 1 158 1 212 255 154 1 158 1 213 255 133 1 158 1 214 255 154 1 158 1 215 255 154 1 158 1 216 255 113 1 158 1 217 255 154 1 158 1 218 255 154 1 158 1 219 255 113 1 158 1 220 255 174 1 158 1 221 255 174 1 158 1 222 255 113 1 158 1 223 255 215 1 158 1 224 255 154 1 158 1 225 255 154 1 158 1 226 255 154 1 158 1 227 255 154 1 158 1 228 255 174 1 158 1 229 255 154 1 158 1 230 255 154 1 158 1 231 255 215 1 158 1 232 255 154 1 158 1 233 255 195 1 158 1 234 255 113 1 158 1 236 255 154 1 158 1 237 255 113 1 158 1 238 255 133 1 158 1 242 255 133 1 158 1 243 255 154 1 158 1 245 255 154 1 158 1 246 255 174 1 158 1 247 255 154 1 158 1 249 255 154 1 158 2 2 255 174 1 158 2 3 255 174 1 158 2 4 255 174 1 158 2 8 255 133 1 158 2 12 255 133 1 158 2 106 255 113 1 158 2 107 255 154 1 158 2 108 255 215 1 158 2 109 255 215 1 158 2 113 255 154 1 158 2 114 255 113 1 158 2 115 255 133 1 158 2 117 255 154 1 158 2 119 255 154 1 158 2 121 255 154 1 158 2 125 255 154 1 158 2 126 255 215 1 158 2 127 255 113 1 158 2 129 255 215 1 158 2 131 255 215 1 158 2 132 255 215 1 158 2 133 255 113 1 158 2 134 255 215 1 158 2 135 255 113 1 158 2 136 255 215 1 158 2 137 255 113 1 158 2 138 255 215 1 158 2 139 255 215 1 158 2 140 255 215 1 158 2 141 255 113 1 158 2 150 255 154 1 158 2 154 255 154 1 158 2 158 255 154 1 158 2 160 255 215 1 158 2 162 255 215 1 158 2 164 255 154 1 158 2 166 255 154 1 158 2 170 255 174 1 158 2 172 255 154 1 158 2 174 255 154 1 158 2 176 255 154 1 158 2 177 255 215 1 158 2 178 255 113 1 158 2 179 255 215 1 158 2 180 255 113 1 158 2 181 0 41 1 158 2 182 255 174 1 158 2 184 255 174 1 158 2 186 255 174 1 158 2 188 255 215 1 158 2 190 255 174 1 158 2 192 255 154 1 158 2 194 255 154 1 158 2 196 255 154 1 158 2 197 255 154 1 158 2 198 255 113 1 158 2 199 255 154 1 158 2 200 255 113 1 158 2 203 255 215 1 158 2 205 255 154 1 158 2 206 255 154 1 158 2 207 255 133 1 158 2 209 255 154 1 158 2 211 255 154 1 158 2 213 255 154 1 158 2 215 255 154 1 158 2 217 255 113 1 158 2 219 255 113 1 158 2 221 255 113 1 158 2 224 255 113 1 158 2 230 255 215 1 158 2 232 255 215 1 158 2 234 255 195 1 158 2 236 255 154 1 158 2 238 255 154 1 158 2 239 255 215 1 158 2 240 255 113 1 158 2 241 255 215 1 158 2 242 255 113 1 158 2 243 255 215 1 158 2 244 255 113 1 158 2 246 255 215 1 158 2 248 255 174 1 158 2 250 255 174 1 158 2 252 255 174 1 158 2 254 255 154 1 158 3 0 255 154 1 158 3 2 255 154 1 158 3 6 255 215 1 158 3 8 255 215 1 158 3 9 255 113 1 158 3 10 255 113 1 158 3 11 255 113 1 158 3 12 255 113 1 158 3 14 255 154 1 158 3 16 255 154 1 158 3 17 255 154 1 158 3 18 255 133 1 158 3 20 255 154 1 158 3 21 255 215 1 158 3 22 255 113 1 158 3 24 255 174 1 158 3 26 255 113 1 158 3 27 255 154 1 158 3 28 255 133 1 159 1 159 255 215 1 159 1 184 255 215 1 159 1 187 255 215 1 159 1 190 255 215 1 159 1 225 255 215 1 159 2 108 255 215 1 159 2 126 255 215 1 159 2 132 255 215 1 159 2 134 255 215 1 159 2 136 255 215 1 159 2 138 255 215 1 159 2 140 255 215 1 159 2 177 255 215 1 159 2 179 255 215 1 159 2 192 255 215 1 159 2 194 255 215 1 159 2 197 255 215 1 159 2 199 255 215 1 159 2 213 255 215 1 159 2 239 255 215 1 159 2 241 255 215 1 159 2 243 255 215 1 159 2 254 255 215 1 159 3 9 255 215 1 159 3 11 255 215 1 159 3 14 255 215 1 159 3 16 255 215 1 159 3 21 255 215 1 160 3 14 255 215 1 160 3 16 255 215 1 164 0 5 255 174 1 164 0 10 255 174 1 164 1 157 255 133 1 164 1 166 255 133 1 164 1 168 255 215 1 164 1 188 255 154 1 164 1 189 255 215 1 164 1 193 255 154 1 164 1 196 255 133 1 164 1 220 255 215 1 164 1 221 255 215 1 164 1 225 255 215 1 164 1 228 255 215 1 164 1 246 255 215 1 164 2 7 255 174 1 164 2 11 255 174 1 164 2 110 255 174 1 164 2 124 255 154 1 164 2 128 255 174 1 164 2 130 255 174 1 164 2 151 255 174 1 164 2 155 255 174 1 164 2 167 255 174 1 164 2 169 255 133 1 164 2 170 255 215 1 164 2 181 255 154 1 164 2 182 255 215 1 164 2 183 255 154 1 164 2 184 255 215 1 164 2 185 255 154 1 164 2 186 255 215 1 164 2 189 255 133 1 164 2 190 255 215 1 164 2 191 255 154 1 164 2 192 255 215 1 164 2 193 255 154 1 164 2 194 255 215 1 164 2 212 255 154 1 164 2 213 255 215 1 164 2 247 255 215 1 164 2 248 255 215 1 164 2 249 255 215 1 164 2 250 255 215 1 164 2 251 255 215 1 164 2 252 255 215 1 164 2 253 255 154 1 164 2 254 255 215 1 164 3 3 255 174 1 164 3 13 255 154 1 164 3 14 255 195 1 164 3 15 255 154 1 164 3 16 255 195 1 164 3 23 255 133 1 164 3 24 255 215 1 165 0 5 255 174 1 165 0 10 255 174 1 165 1 157 255 133 1 165 1 166 255 133 1 165 1 168 255 215 1 165 1 188 255 154 1 165 1 189 255 215 1 165 1 193 255 154 1 165 1 196 255 133 1 165 1 220 255 215 1 165 1 221 255 215 1 165 1 225 255 215 1 165 1 228 255 215 1 165 1 246 255 215 1 165 2 7 255 174 1 165 2 11 255 174 1 165 2 110 255 174 1 165 2 124 255 154 1 165 2 128 255 174 1 165 2 130 255 174 1 165 2 151 255 174 1 165 2 155 255 174 1 165 2 167 255 174 1 165 2 169 255 133 1 165 2 170 255 215 1 165 2 181 255 154 1 165 2 182 255 215 1 165 2 183 255 154 1 165 2 184 255 215 1 165 2 185 255 154 1 165 2 186 255 215 1 165 2 189 255 133 1 165 2 190 255 215 1 165 2 191 255 154 1 165 2 192 255 215 1 165 2 193 255 154 1 165 2 194 255 215 1 165 2 212 255 154 1 165 2 213 255 215 1 165 2 247 255 215 1 165 2 248 255 215 1 165 2 249 255 215 1 165 2 250 255 215 1 165 2 251 255 215 1 165 2 252 255 215 1 165 2 253 255 154 1 165 2 254 255 215 1 165 3 3 255 174 1 165 3 13 255 154 1 165 3 14 255 195 1 165 3 15 255 154 1 165 3 16 255 195 1 165 3 23 255 133 1 165 3 24 255 215 1 166 0 5 255 174 1 166 0 10 255 174 1 166 1 157 255 133 1 166 1 166 255 133 1 166 1 168 255 215 1 166 1 188 255 154 1 166 1 189 255 215 1 166 1 193 255 154 1 166 1 196 255 133 1 166 1 220 255 215 1 166 1 221 255 215 1 166 1 225 255 215 1 166 1 228 255 215 1 166 1 246 255 215 1 166 2 7 255 174 1 166 2 11 255 174 1 166 2 110 255 174 1 166 2 124 255 154 1 166 2 128 255 174 1 166 2 130 255 174 1 166 2 151 255 174 1 166 2 155 255 174 1 166 2 167 255 174 1 166 2 169 255 133 1 166 2 170 255 215 1 166 2 181 255 154 1 166 2 182 255 215 1 166 2 183 255 154 1 166 2 184 255 215 1 166 2 185 255 154 1 166 2 186 255 215 1 166 2 189 255 133 1 166 2 190 255 215 1 166 2 191 255 154 1 166 2 192 255 215 1 166 2 193 255 154 1 166 2 194 255 215 1 166 2 212 255 154 1 166 2 213 255 215 1 166 2 247 255 215 1 166 2 248 255 215 1 166 2 249 255 215 1 166 2 250 255 215 1 166 2 251 255 215 1 166 2 252 255 215 1 166 2 253 255 154 1 166 2 254 255 215 1 166 3 3 255 174 1 166 3 13 255 154 1 166 3 14 255 195 1 166 3 15 255 154 1 166 3 16 255 195 1 166 3 23 255 133 1 166 3 24 255 215 1 167 1 159 255 215 1 167 1 184 255 215 1 167 1 187 255 215 1 167 1 190 255 215 1 167 1 193 255 215 1 167 1 225 255 215 1 167 2 108 255 215 1 167 2 124 255 215 1 167 2 126 255 215 1 167 2 132 255 215 1 167 2 134 255 215 1 167 2 136 255 215 1 167 2 138 255 215 1 167 2 140 255 215 1 167 2 177 255 215 1 167 2 179 255 215 1 167 2 191 255 215 1 167 2 192 255 215 1 167 2 193 255 215 1 167 2 194 255 215 1 167 2 197 255 154 1 167 2 199 255 154 1 167 2 212 255 215 1 167 2 213 255 215 1 167 2 239 255 215 1 167 2 241 255 215 1 167 2 243 255 215 1 167 2 253 255 215 1 167 2 254 255 215 1 167 3 9 255 215 1 167 3 11 255 215 1 167 3 14 255 215 1 167 3 16 255 215 1 167 3 21 255 215 1 167 3 25 255 236 1 168 0 15 255 133 1 168 0 17 255 133 1 168 1 159 255 236 1 168 1 164 255 154 1 168 1 170 255 113 1 168 1 174 255 154 1 168 1 181 255 154 1 168 1 184 255 236 1 168 1 187 255 236 1 168 1 190 255 195 1 168 1 201 255 236 1 168 1 206 255 174 1 168 1 207 255 215 1 168 1 213 255 174 1 168 1 216 255 215 1 168 1 219 255 215 1 168 1 222 255 215 1 168 1 225 255 215 1 168 1 234 255 215 1 168 1 235 0 102 1 168 1 237 255 215 1 168 1 238 255 236 1 168 1 242 255 174 1 168 1 244 0 102 1 168 2 8 255 133 1 168 2 12 255 133 1 168 2 106 255 215 1 168 2 108 255 236 1 168 2 114 255 113 1 168 2 115 255 174 1 168 2 126 255 236 1 168 2 127 255 215 1 168 2 132 255 236 1 168 2 133 255 215 1 168 2 134 255 236 1 168 2 135 255 215 1 168 2 136 255 236 1 168 2 137 255 215 1 168 2 138 255 236 1 168 2 140 255 236 1 168 2 141 255 215 1 168 2 152 0 102 1 168 2 168 0 102 1 168 2 177 255 236 1 168 2 178 255 215 1 168 2 179 255 236 1 168 2 180 255 215 1 168 2 192 255 215 1 168 2 194 255 215 1 168 2 197 255 215 1 168 2 198 255 195 1 168 2 199 255 215 1 168 2 200 255 195 1 168 2 206 255 154 1 168 2 207 255 174 1 168 2 213 255 215 1 168 2 217 255 113 1 168 2 219 255 113 1 168 2 221 255 113 1 168 2 224 255 215 1 168 2 239 255 236 1 168 2 240 255 215 1 168 2 241 255 236 1 168 2 242 255 215 1 168 2 243 255 236 1 168 2 244 255 215 1 168 2 254 255 215 1 168 3 9 255 113 1 168 3 10 255 215 1 168 3 11 255 113 1 168 3 12 255 215 1 168 3 17 255 154 1 168 3 18 255 174 1 168 3 21 255 236 1 168 3 22 255 215 1 168 3 26 255 215 1 168 3 27 255 154 1 168 3 28 255 174 1 170 0 5 255 113 1 170 0 10 255 113 1 170 1 157 255 154 1 170 1 166 255 154 1 170 1 188 255 113 1 170 1 190 255 215 1 170 1 193 255 154 1 170 1 196 255 154 1 170 1 220 255 215 1 170 1 225 255 215 1 170 1 228 255 215 1 170 2 7 255 113 1 170 2 11 255 113 1 170 2 110 255 215 1 170 2 124 255 154 1 170 2 128 255 174 1 170 2 130 255 174 1 170 2 151 255 215 1 170 2 155 255 215 1 170 2 167 255 215 1 170 2 169 255 154 1 170 2 170 255 215 1 170 2 181 255 113 1 170 2 182 255 215 1 170 2 183 255 133 1 170 2 185 255 133 1 170 2 189 255 154 1 170 2 190 255 215 1 170 2 191 255 154 1 170 2 192 255 215 1 170 2 193 255 154 1 170 2 194 255 215 1 170 2 197 255 154 1 170 2 199 255 154 1 170 2 212 255 154 1 170 2 213 255 215 1 170 2 225 255 215 1 170 2 227 255 215 1 170 2 253 255 154 1 170 2 254 255 215 1 170 3 3 255 215 1 170 3 13 255 113 1 170 3 14 255 215 1 170 3 15 255 113 1 170 3 16 255 215 1 170 3 23 255 154 1 170 3 24 255 215 1 171 0 5 255 215 1 171 0 10 255 215 1 171 1 170 255 236 1 171 1 193 255 215 1 171 2 7 255 215 1 171 2 11 255 215 1 171 2 114 255 236 1 171 2 124 255 215 1 171 2 191 255 215 1 171 2 193 255 215 1 171 2 197 255 215 1 171 2 199 255 215 1 171 2 212 255 215 1 171 2 217 255 236 1 171 2 219 255 236 1 171 2 221 255 236 1 171 2 253 255 215 1 172 0 15 255 174 1 172 0 17 255 174 1 172 2 8 255 174 1 172 2 12 255 174 1 172 2 128 255 236 1 172 2 130 255 236 1 172 2 183 255 236 1 172 2 185 255 236 1 172 3 13 255 215 1 172 3 15 255 215 1 173 0 15 255 133 1 173 0 16 255 174 1 173 0 17 255 133 1 173 1 159 255 215 1 173 1 164 255 154 1 173 1 170 255 113 1 173 1 174 255 154 1 173 1 181 255 154 1 173 1 184 255 215 1 173 1 187 255 215 1 173 1 188 0 41 1 173 1 190 255 174 1 173 1 204 255 154 1 173 1 205 255 154 1 173 1 206 255 133 1 173 1 207 255 113 1 173 1 208 255 215 1 173 1 209 255 215 1 173 1 210 255 154 1 173 1 211 255 154 1 173 1 212 255 154 1 173 1 213 255 133 1 173 1 214 255 154 1 173 1 215 255 154 1 173 1 216 255 113 1 173 1 217 255 154 1 173 1 218 255 154 1 173 1 219 255 113 1 173 1 220 255 174 1 173 1 221 255 174 1 173 1 222 255 113 1 173 1 223 255 215 1 173 1 224 255 154 1 173 1 225 255 154 1 173 1 226 255 154 1 173 1 227 255 154 1 173 1 228 255 174 1 173 1 229 255 154 1 173 1 230 255 154 1 173 1 231 255 215 1 173 1 232 255 154 1 173 1 233 255 195 1 173 1 234 255 113 1 173 1 236 255 154 1 173 1 237 255 113 1 173 1 238 255 133 1 173 1 242 255 133 1 173 1 243 255 154 1 173 1 245 255 154 1 173 1 246 255 174 1 173 1 247 255 154 1 173 1 249 255 154 1 173 2 2 255 174 1 173 2 3 255 174 1 173 2 4 255 174 1 173 2 8 255 133 1 173 2 12 255 133 1 173 2 106 255 113 1 173 2 107 255 154 1 173 2 108 255 215 1 173 2 109 255 215 1 173 2 113 255 154 1 173 2 114 255 113 1 173 2 115 255 133 1 173 2 117 255 154 1 173 2 119 255 154 1 173 2 121 255 154 1 173 2 125 255 154 1 173 2 126 255 215 1 173 2 127 255 113 1 173 2 129 255 215 1 173 2 131 255 215 1 173 2 132 255 215 1 173 2 133 255 113 1 173 2 134 255 215 1 173 2 135 255 113 1 173 2 136 255 215 1 173 2 137 255 113 1 173 2 138 255 215 1 173 2 139 255 215 1 173 2 140 255 215 1 173 2 141 255 113 1 173 2 150 255 154 1 173 2 154 255 154 1 173 2 158 255 154 1 173 2 160 255 215 1 173 2 162 255 215 1 173 2 164 255 154 1 173 2 166 255 154 1 173 2 170 255 174 1 173 2 172 255 154 1 173 2 174 255 154 1 173 2 176 255 154 1 173 2 177 255 215 1 173 2 178 255 113 1 173 2 179 255 215 1 173 2 180 255 113 1 173 2 181 0 41 1 173 2 182 255 174 1 173 2 184 255 174 1 173 2 186 255 174 1 173 2 188 255 215 1 173 2 190 255 174 1 173 2 192 255 154 1 173 2 194 255 154 1 173 2 196 255 154 1 173 2 197 255 154 1 173 2 198 255 113 1 173 2 199 255 154 1 173 2 200 255 113 1 173 2 203 255 215 1 173 2 205 255 154 1 173 2 206 255 154 1 173 2 207 255 133 1 173 2 209 255 154 1 173 2 211 255 154 1 173 2 213 255 154 1 173 2 215 255 154 1 173 2 217 255 113 1 173 2 219 255 113 1 173 2 221 255 113 1 173 2 224 255 113 1 173 2 230 255 215 1 173 2 232 255 215 1 173 2 234 255 195 1 173 2 236 255 154 1 173 2 238 255 154 1 173 2 239 255 215 1 173 2 240 255 113 1 173 2 241 255 215 1 173 2 242 255 113 1 173 2 243 255 215 1 173 2 244 255 113 1 173 2 246 255 215 1 173 2 248 255 174 1 173 2 250 255 174 1 173 2 252 255 174 1 173 2 254 255 154 1 173 3 0 255 154 1 173 3 2 255 154 1 173 3 6 255 215 1 173 3 8 255 215 1 173 3 9 255 113 1 173 3 10 255 113 1 173 3 11 255 113 1 173 3 12 255 113 1 173 3 14 255 154 1 173 3 16 255 154 1 173 3 17 255 154 1 173 3 18 255 133 1 173 3 20 255 154 1 173 3 21 255 215 1 173 3 22 255 113 1 173 3 24 255 174 1 173 3 26 255 113 1 173 3 27 255 154 1 173 3 28 255 133 1 174 1 163 0 225 1 174 2 234 0 41 1 174 3 14 255 215 1 174 3 16 255 215 1 176 1 159 255 215 1 176 1 184 255 215 1 176 1 187 255 215 1 176 1 190 255 215 1 176 1 193 255 215 1 176 1 225 255 215 1 176 2 108 255 215 1 176 2 124 255 215 1 176 2 126 255 215 1 176 2 132 255 215 1 176 2 134 255 215 1 176 2 136 255 215 1 176 2 138 255 215 1 176 2 140 255 215 1 176 2 177 255 215 1 176 2 179 255 215 1 176 2 191 255 215 1 176 2 192 255 215 1 176 2 193 255 215 1 176 2 194 255 215 1 176 2 197 255 154 1 176 2 199 255 154 1 176 2 212 255 215 1 176 2 213 255 215 1 176 2 239 255 215 1 176 2 241 255 215 1 176 2 243 255 215 1 176 2 253 255 215 1 176 2 254 255 215 1 176 3 9 255 215 1 176 3 11 255 215 1 176 3 14 255 215 1 176 3 16 255 215 1 176 3 21 255 215 1 176 3 25 255 236 1 177 0 15 255 174 1 177 0 17 255 174 1 177 2 8 255 174 1 177 2 12 255 174 1 177 2 128 255 236 1 177 2 130 255 236 1 177 2 183 255 236 1 177 2 185 255 236 1 177 3 13 255 215 1 177 3 15 255 215 1 180 1 159 255 215 1 180 1 184 255 215 1 180 1 187 255 215 1 180 1 190 255 215 1 180 1 193 255 215 1 180 1 225 255 215 1 180 2 108 255 215 1 180 2 124 255 215 1 180 2 126 255 215 1 180 2 132 255 215 1 180 2 134 255 215 1 180 2 136 255 215 1 180 2 138 255 215 1 180 2 140 255 215 1 180 2 177 255 215 1 180 2 179 255 215 1 180 2 191 255 215 1 180 2 192 255 215 1 180 2 193 255 215 1 180 2 194 255 215 1 180 2 197 255 154 1 180 2 199 255 154 1 180 2 212 255 215 1 180 2 213 255 215 1 180 2 239 255 215 1 180 2 241 255 215 1 180 2 243 255 215 1 180 2 253 255 215 1 180 2 254 255 215 1 180 3 9 255 215 1 180 3 11 255 215 1 180 3 14 255 215 1 180 3 16 255 215 1 180 3 21 255 215 1 180 3 25 255 236 1 184 0 15 255 174 1 184 0 17 255 174 1 184 1 157 255 236 1 184 1 164 255 215 1 184 1 166 255 236 1 184 1 168 255 215 1 184 1 170 255 215 1 184 1 174 255 215 1 184 1 176 255 215 1 184 1 177 255 236 1 184 1 181 255 215 1 184 1 188 255 195 1 184 1 189 255 215 1 184 1 191 255 215 1 184 1 193 255 215 1 184 1 196 255 236 1 184 1 199 255 236 1 184 1 206 255 236 1 184 1 213 255 236 1 184 1 242 255 236 1 184 2 8 255 174 1 184 2 12 255 174 1 184 2 114 255 215 1 184 2 115 255 236 1 184 2 122 255 236 1 184 2 124 255 215 1 184 2 128 255 236 1 184 2 130 255 236 1 184 2 159 255 215 1 184 2 161 255 236 1 184 2 169 255 236 1 184 2 181 255 195 1 184 2 183 255 236 1 184 2 185 255 236 1 184 2 187 255 215 1 184 2 189 255 236 1 184 2 191 255 215 1 184 2 193 255 215 1 184 2 202 255 215 1 184 2 206 255 215 1 184 2 207 255 236 1 184 2 212 255 215 1 184 2 217 255 215 1 184 2 219 255 215 1 184 2 221 255 215 1 184 2 229 255 215 1 184 2 231 255 236 1 184 2 245 255 236 1 184 2 247 255 215 1 184 2 249 255 215 1 184 2 251 255 215 1 184 2 253 255 215 1 184 3 5 255 215 1 184 3 7 255 215 1 184 3 13 255 215 1 184 3 15 255 215 1 184 3 17 255 215 1 184 3 18 255 236 1 184 3 23 255 236 1 184 3 27 255 215 1 184 3 28 255 236 1 186 0 15 254 246 1 186 0 17 254 246 1 186 1 164 255 133 1 186 1 170 255 154 1 186 1 174 255 133 1 186 1 176 255 215 1 186 1 181 255 133 1 186 1 191 255 215 1 186 1 206 255 154 1 186 1 213 255 154 1 186 1 242 255 154 1 186 2 8 254 246 1 186 2 12 254 246 1 186 2 114 255 154 1 186 2 115 255 154 1 186 2 118 255 236 1 186 2 159 255 215 1 186 2 187 255 215 1 186 2 202 255 215 1 186 2 206 255 133 1 186 2 207 255 154 1 186 2 217 255 154 1 186 2 219 255 154 1 186 2 221 255 154 1 186 2 229 255 215 1 186 3 5 255 215 1 186 3 7 255 215 1 186 3 9 255 174 1 186 3 11 255 174 1 186 3 17 255 133 1 186 3 18 255 154 1 186 3 27 255 133 1 186 3 28 255 154 1 187 1 159 255 215 1 187 1 184 255 215 1 187 1 187 255 215 1 187 1 190 255 215 1 187 1 225 255 215 1 187 2 108 255 215 1 187 2 126 255 215 1 187 2 132 255 215 1 187 2 134 255 215 1 187 2 136 255 215 1 187 2 138 255 215 1 187 2 140 255 215 1 187 2 177 255 215 1 187 2 179 255 215 1 187 2 192 255 215 1 187 2 194 255 215 1 187 2 197 255 215 1 187 2 199 255 215 1 187 2 213 255 215 1 187 2 239 255 215 1 187 2 241 255 215 1 187 2 243 255 215 1 187 2 254 255 215 1 187 3 9 255 215 1 187 3 11 255 215 1 187 3 14 255 215 1 187 3 16 255 215 1 187 3 21 255 215 1 188 0 15 255 133 1 188 0 16 255 174 1 188 0 17 255 133 1 188 1 159 255 215 1 188 1 164 255 154 1 188 1 170 255 113 1 188 1 174 255 154 1 188 1 181 255 154 1 188 1 184 255 215 1 188 1 187 255 215 1 188 1 188 0 41 1 188 1 190 255 174 1 188 1 204 255 154 1 188 1 205 255 154 1 188 1 206 255 133 1 188 1 207 255 113 1 188 1 208 255 215 1 188 1 209 255 215 1 188 1 210 255 154 1 188 1 211 255 154 1 188 1 212 255 154 1 188 1 213 255 133 1 188 1 214 255 154 1 188 1 215 255 154 1 188 1 216 255 113 1 188 1 217 255 154 1 188 1 218 255 154 1 188 1 219 255 113 1 188 1 220 255 174 1 188 1 221 255 174 1 188 1 222 255 113 1 188 1 223 255 215 1 188 1 224 255 154 1 188 1 225 255 154 1 188 1 226 255 154 1 188 1 227 255 154 1 188 1 228 255 174 1 188 1 229 255 154 1 188 1 230 255 154 1 188 1 231 255 215 1 188 1 232 255 154 1 188 1 233 255 195 1 188 1 234 255 113 1 188 1 236 255 154 1 188 1 237 255 113 1 188 1 238 255 133 1 188 1 242 255 133 1 188 1 243 255 154 1 188 1 245 255 154 1 188 1 246 255 174 1 188 1 247 255 154 1 188 1 249 255 154 1 188 2 2 255 174 1 188 2 3 255 174 1 188 2 4 255 174 1 188 2 8 255 133 1 188 2 12 255 133 1 188 2 106 255 113 1 188 2 107 255 154 1 188 2 108 255 215 1 188 2 109 255 215 1 188 2 113 255 154 1 188 2 114 255 113 1 188 2 115 255 133 1 188 2 117 255 154 1 188 2 119 255 154 1 188 2 121 255 154 1 188 2 125 255 154 1 188 2 126 255 215 1 188 2 127 255 113 1 188 2 129 255 215 1 188 2 131 255 215 1 188 2 132 255 215 1 188 2 133 255 113 1 188 2 134 255 215 1 188 2 135 255 113 1 188 2 136 255 215 1 188 2 137 255 113 1 188 2 138 255 215 1 188 2 139 255 215 1 188 2 140 255 215 1 188 2 141 255 113 1 188 2 150 255 154 1 188 2 154 255 154 1 188 2 158 255 154 1 188 2 160 255 215 1 188 2 162 255 215 1 188 2 164 255 154 1 188 2 166 255 154 1 188 2 170 255 174 1 188 2 172 255 154 1 188 2 174 255 154 1 188 2 176 255 154 1 188 2 177 255 215 1 188 2 178 255 113 1 188 2 179 255 215 1 188 2 180 255 113 1 188 2 181 0 41 1 188 2 182 255 174 1 188 2 184 255 174 1 188 2 186 255 174 1 188 2 188 255 215 1 188 2 190 255 174 1 188 2 192 255 154 1 188 2 194 255 154 1 188 2 196 255 154 1 188 2 197 255 154 1 188 2 198 255 113 1 188 2 199 255 154 1 188 2 200 255 113 1 188 2 203 255 215 1 188 2 205 255 154 1 188 2 206 255 154 1 188 2 207 255 133 1 188 2 209 255 154 1 188 2 211 255 154 1 188 2 213 255 154 1 188 2 215 255 154 1 188 2 217 255 113 1 188 2 219 255 113 1 188 2 221 255 113 1 188 2 224 255 113 1 188 2 230 255 215 1 188 2 232 255 215 1 188 2 234 255 195 1 188 2 236 255 154 1 188 2 238 255 154 1 188 2 239 255 215 1 188 2 240 255 113 1 188 2 241 255 215 1 188 2 242 255 113 1 188 2 243 255 215 1 188 2 244 255 113 1 188 2 246 255 215 1 188 2 248 255 174 1 188 2 250 255 174 1 188 2 252 255 174 1 188 2 254 255 154 1 188 3 0 255 154 1 188 3 2 255 154 1 188 3 6 255 215 1 188 3 8 255 215 1 188 3 9 255 113 1 188 3 10 255 113 1 188 3 11 255 113 1 188 3 12 255 113 1 188 3 14 255 154 1 188 3 16 255 154 1 188 3 17 255 154 1 188 3 18 255 133 1 188 3 20 255 154 1 188 3 21 255 215 1 188 3 22 255 113 1 188 3 24 255 174 1 188 3 26 255 113 1 188 3 27 255 154 1 188 3 28 255 133 1 189 0 15 255 133 1 189 0 17 255 133 1 189 1 159 255 236 1 189 1 164 255 154 1 189 1 170 255 113 1 189 1 174 255 154 1 189 1 181 255 154 1 189 1 184 255 236 1 189 1 187 255 236 1 189 1 190 255 195 1 189 1 201 255 236 1 189 1 206 255 174 1 189 1 207 255 215 1 189 1 213 255 174 1 189 1 216 255 215 1 189 1 219 255 215 1 189 1 222 255 215 1 189 1 225 255 215 1 189 1 234 255 215 1 189 1 235 0 102 1 189 1 237 255 215 1 189 1 238 255 236 1 189 1 242 255 174 1 189 1 244 0 102 1 189 2 8 255 133 1 189 2 12 255 133 1 189 2 106 255 215 1 189 2 108 255 236 1 189 2 114 255 113 1 189 2 115 255 174 1 189 2 126 255 236 1 189 2 127 255 215 1 189 2 132 255 236 1 189 2 133 255 215 1 189 2 134 255 236 1 189 2 135 255 215 1 189 2 136 255 236 1 189 2 137 255 215 1 189 2 138 255 236 1 189 2 140 255 236 1 189 2 141 255 215 1 189 2 152 0 102 1 189 2 168 0 102 1 189 2 177 255 236 1 189 2 178 255 215 1 189 2 179 255 236 1 189 2 180 255 215 1 189 2 192 255 215 1 189 2 194 255 215 1 189 2 197 255 215 1 189 2 198 255 195 1 189 2 199 255 215 1 189 2 200 255 195 1 189 2 206 255 154 1 189 2 207 255 174 1 189 2 213 255 215 1 189 2 217 255 113 1 189 2 219 255 113 1 189 2 221 255 113 1 189 2 224 255 215 1 189 2 239 255 236 1 189 2 240 255 215 1 189 2 241 255 236 1 189 2 242 255 215 1 189 2 243 255 236 1 189 2 244 255 215 1 189 2 254 255 215 1 189 3 9 255 113 1 189 3 10 255 215 1 189 3 11 255 113 1 189 3 12 255 215 1 189 3 17 255 154 1 189 3 18 255 174 1 189 3 21 255 236 1 189 3 22 255 215 1 189 3 26 255 215 1 189 3 27 255 154 1 189 3 28 255 174 1 190 0 15 255 174 1 190 0 17 255 174 1 190 1 157 255 215 1 190 1 164 255 215 1 190 1 166 255 215 1 190 1 168 255 195 1 190 1 170 255 215 1 190 1 174 255 215 1 190 1 176 255 215 1 190 1 177 255 215 1 190 1 181 255 215 1 190 1 188 255 195 1 190 1 189 255 195 1 190 1 191 255 215 1 190 1 196 255 215 1 190 1 199 255 215 1 190 1 206 255 236 1 190 1 213 255 236 1 190 1 242 255 236 1 190 2 8 255 174 1 190 2 12 255 174 1 190 2 114 255 215 1 190 2 115 255 236 1 190 2 122 255 215 1 190 2 128 255 236 1 190 2 130 255 236 1 190 2 159 255 215 1 190 2 161 255 215 1 190 2 169 255 215 1 190 2 181 255 195 1 190 2 183 255 195 1 190 2 185 255 195 1 190 2 187 255 215 1 190 2 189 255 215 1 190 2 202 255 215 1 190 2 206 255 215 1 190 2 207 255 236 1 190 2 217 255 215 1 190 2 219 255 215 1 190 2 221 255 215 1 190 2 229 255 215 1 190 2 231 255 215 1 190 2 245 255 215 1 190 2 247 255 195 1 190 2 249 255 195 1 190 2 251 255 195 1 190 3 5 255 215 1 190 3 7 255 215 1 190 3 13 255 215 1 190 3 15 255 215 1 190 3 17 255 215 1 190 3 18 255 236 1 190 3 23 255 215 1 190 3 27 255 215 1 190 3 28 255 236 1 191 1 159 255 215 1 191 1 184 255 215 1 191 1 187 255 215 1 191 1 190 255 215 1 191 1 193 255 215 1 191 1 225 255 215 1 191 2 108 255 215 1 191 2 124 255 215 1 191 2 126 255 215 1 191 2 132 255 215 1 191 2 134 255 215 1 191 2 136 255 215 1 191 2 138 255 215 1 191 2 140 255 215 1 191 2 177 255 215 1 191 2 179 255 215 1 191 2 191 255 215 1 191 2 192 255 215 1 191 2 193 255 215 1 191 2 194 255 215 1 191 2 197 255 154 1 191 2 199 255 154 1 191 2 212 255 215 1 191 2 213 255 215 1 191 2 239 255 215 1 191 2 241 255 215 1 191 2 243 255 215 1 191 2 253 255 215 1 191 2 254 255 215 1 191 3 9 255 215 1 191 3 11 255 215 1 191 3 14 255 215 1 191 3 16 255 215 1 191 3 21 255 215 1 191 3 25 255 236 1 192 1 163 0 225 1 192 2 234 0 41 1 192 3 14 255 215 1 192 3 16 255 215 1 195 1 163 0 225 1 195 2 234 0 41 1 195 3 14 255 215 1 195 3 16 255 215 1 196 0 5 255 174 1 196 0 10 255 174 1 196 1 157 255 133 1 196 1 166 255 133 1 196 1 168 255 215 1 196 1 188 255 154 1 196 1 189 255 215 1 196 1 193 255 154 1 196 1 196 255 133 1 196 1 220 255 215 1 196 1 221 255 215 1 196 1 225 255 215 1 196 1 228 255 215 1 196 1 246 255 215 1 196 2 7 255 174 1 196 2 11 255 174 1 196 2 110 255 174 1 196 2 124 255 154 1 196 2 128 255 174 1 196 2 130 255 174 1 196 2 151 255 174 1 196 2 155 255 174 1 196 2 167 255 174 1 196 2 169 255 133 1 196 2 170 255 215 1 196 2 181 255 154 1 196 2 182 255 215 1 196 2 183 255 154 1 196 2 184 255 215 1 196 2 185 255 154 1 196 2 186 255 215 1 196 2 189 255 133 1 196 2 190 255 215 1 196 2 191 255 154 1 196 2 192 255 215 1 196 2 193 255 154 1 196 2 194 255 215 1 196 2 212 255 154 1 196 2 213 255 215 1 196 2 247 255 215 1 196 2 248 255 215 1 196 2 249 255 215 1 196 2 250 255 215 1 196 2 251 255 215 1 196 2 252 255 215 1 196 2 253 255 154 1 196 2 254 255 215 1 196 3 3 255 174 1 196 3 13 255 154 1 196 3 14 255 195 1 196 3 15 255 154 1 196 3 16 255 195 1 196 3 23 255 133 1 196 3 24 255 215 1 198 0 5 255 174 1 198 0 10 255 174 1 198 1 157 255 133 1 198 1 166 255 133 1 198 1 168 255 215 1 198 1 188 255 154 1 198 1 189 255 215 1 198 1 193 255 154 1 198 1 196 255 133 1 198 1 220 255 215 1 198 1 221 255 215 1 198 1 225 255 215 1 198 1 228 255 215 1 198 1 246 255 215 1 198 2 7 255 174 1 198 2 11 255 174 1 198 2 110 255 174 1 198 2 124 255 154 1 198 2 128 255 174 1 198 2 130 255 174 1 198 2 151 255 174 1 198 2 155 255 174 1 198 2 167 255 174 1 198 2 169 255 133 1 198 2 170 255 215 1 198 2 181 255 154 1 198 2 182 255 215 1 198 2 183 255 154 1 198 2 184 255 215 1 198 2 185 255 154 1 198 2 186 255 215 1 198 2 189 255 133 1 198 2 190 255 215 1 198 2 191 255 154 1 198 2 192 255 215 1 198 2 193 255 154 1 198 2 194 255 215 1 198 2 212 255 154 1 198 2 213 255 215 1 198 2 247 255 215 1 198 2 248 255 215 1 198 2 249 255 215 1 198 2 250 255 215 1 198 2 251 255 215 1 198 2 252 255 215 1 198 2 253 255 154 1 198 2 254 255 215 1 198 3 3 255 174 1 198 3 13 255 154 1 198 3 14 255 195 1 198 3 15 255 154 1 198 3 16 255 195 1 198 3 23 255 133 1 198 3 24 255 215 1 199 0 15 255 174 1 199 0 17 255 174 1 199 1 157 255 236 1 199 1 164 255 215 1 199 1 166 255 236 1 199 1 168 255 215 1 199 1 170 255 215 1 199 1 174 255 215 1 199 1 176 255 215 1 199 1 177 255 236 1 199 1 181 255 215 1 199 1 188 255 195 1 199 1 189 255 215 1 199 1 191 255 215 1 199 1 193 255 215 1 199 1 196 255 236 1 199 1 199 255 236 1 199 1 206 255 236 1 199 1 213 255 236 1 199 1 242 255 236 1 199 2 8 255 174 1 199 2 12 255 174 1 199 2 114 255 215 1 199 2 115 255 236 1 199 2 122 255 236 1 199 2 124 255 215 1 199 2 128 255 236 1 199 2 130 255 236 1 199 2 159 255 215 1 199 2 161 255 236 1 199 2 169 255 236 1 199 2 181 255 195 1 199 2 183 255 236 1 199 2 185 255 236 1 199 2 187 255 215 1 199 2 189 255 236 1 199 2 191 255 215 1 199 2 193 255 215 1 199 2 202 255 215 1 199 2 206 255 215 1 199 2 207 255 236 1 199 2 212 255 215 1 199 2 217 255 215 1 199 2 219 255 215 1 199 2 221 255 215 1 199 2 229 255 215 1 199 2 231 255 236 1 199 2 245 255 236 1 199 2 247 255 215 1 199 2 249 255 215 1 199 2 251 255 215 1 199 2 253 255 215 1 199 3 5 255 215 1 199 3 7 255 215 1 199 3 13 255 215 1 199 3 15 255 215 1 199 3 17 255 215 1 199 3 18 255 236 1 199 3 23 255 236 1 199 3 27 255 215 1 199 3 28 255 236 1 200 0 15 255 174 1 200 0 17 255 174 1 200 1 157 255 236 1 200 1 164 255 215 1 200 1 166 255 236 1 200 1 168 255 215 1 200 1 170 255 215 1 200 1 174 255 215 1 200 1 176 255 215 1 200 1 177 255 236 1 200 1 181 255 215 1 200 1 188 255 195 1 200 1 189 255 215 1 200 1 191 255 215 1 200 1 193 255 215 1 200 1 196 255 236 1 200 1 199 255 236 1 200 1 206 255 236 1 200 1 213 255 236 1 200 1 242 255 236 1 200 2 8 255 174 1 200 2 12 255 174 1 200 2 114 255 215 1 200 2 115 255 236 1 200 2 122 255 236 1 200 2 124 255 215 1 200 2 128 255 236 1 200 2 130 255 236 1 200 2 159 255 215 1 200 2 161 255 236 1 200 2 169 255 236 1 200 2 181 255 195 1 200 2 183 255 236 1 200 2 185 255 236 1 200 2 187 255 215 1 200 2 189 255 236 1 200 2 191 255 215 1 200 2 193 255 215 1 200 2 202 255 215 1 200 2 206 255 215 1 200 2 207 255 236 1 200 2 212 255 215 1 200 2 217 255 215 1 200 2 219 255 215 1 200 2 221 255 215 1 200 2 229 255 215 1 200 2 231 255 236 1 200 2 245 255 236 1 200 2 247 255 215 1 200 2 249 255 215 1 200 2 251 255 215 1 200 2 253 255 215 1 200 3 5 255 215 1 200 3 7 255 215 1 200 3 13 255 215 1 200 3 15 255 215 1 200 3 17 255 215 1 200 3 18 255 236 1 200 3 23 255 236 1 200 3 27 255 215 1 200 3 28 255 236 1 202 0 5 255 236 1 202 0 10 255 236 1 202 2 7 255 236 1 202 2 11 255 236 1 204 1 233 0 41 1 205 0 15 255 154 1 205 0 16 255 215 1 205 0 17 255 154 1 205 1 206 255 195 1 205 1 207 255 236 1 205 1 213 255 195 1 205 1 216 255 236 1 205 1 219 255 236 1 205 1 222 255 236 1 205 1 234 255 236 1 205 1 237 255 236 1 205 1 242 255 195 1 205 2 2 255 215 1 205 2 3 255 215 1 205 2 4 255 215 1 205 2 8 255 154 1 205 2 12 255 154 1 205 2 106 255 236 1 205 2 115 255 195 1 205 2 127 255 236 1 205 2 133 255 236 1 205 2 135 255 236 1 205 2 137 255 236 1 205 2 141 255 236 1 205 2 178 255 236 1 205 2 180 255 236 1 205 2 207 255 195 1 205 2 224 255 236 1 205 2 240 255 236 1 205 2 242 255 236 1 205 2 244 255 236 1 205 3 10 255 236 1 205 3 12 255 236 1 205 3 18 255 195 1 205 3 22 255 236 1 205 3 26 255 236 1 205 3 28 255 195 1 206 0 5 255 236 1 206 0 10 255 236 1 206 2 7 255 236 1 206 2 11 255 236 1 207 0 5 255 236 1 207 0 10 255 236 1 207 2 7 255 236 1 207 2 11 255 236 1 208 1 207 255 215 1 208 1 216 255 215 1 208 1 219 255 215 1 208 1 222 255 215 1 208 1 225 255 215 1 208 1 234 255 215 1 208 1 237 255 215 1 208 2 106 255 215 1 208 2 127 255 215 1 208 2 133 255 215 1 208 2 135 255 215 1 208 2 137 255 215 1 208 2 141 255 215 1 208 2 178 255 215 1 208 2 180 255 215 1 208 2 192 255 215 1 208 2 194 255 215 1 208 2 198 255 215 1 208 2 200 255 215 1 208 2 213 255 215 1 208 2 224 255 215 1 208 2 240 255 215 1 208 2 242 255 215 1 208 2 244 255 215 1 208 2 254 255 215 1 208 3 10 255 215 1 208 3 12 255 215 1 208 3 22 255 215 1 208 3 26 255 215 1 209 1 233 0 41 1 212 1 207 255 215 1 212 1 216 255 215 1 212 1 219 255 215 1 212 1 222 255 215 1 212 1 225 255 215 1 212 1 234 255 215 1 212 1 237 255 215 1 212 2 106 255 215 1 212 2 127 255 215 1 212 2 133 255 215 1 212 2 135 255 215 1 212 2 137 255 215 1 212 2 141 255 215 1 212 2 178 255 215 1 212 2 180 255 215 1 212 2 192 255 215 1 212 2 194 255 215 1 212 2 198 255 215 1 212 2 200 255 215 1 212 2 213 255 215 1 212 2 224 255 215 1 212 2 240 255 215 1 212 2 242 255 215 1 212 2 244 255 215 1 212 2 254 255 215 1 212 3 10 255 215 1 212 3 12 255 215 1 212 3 22 255 215 1 212 3 26 255 215 1 216 0 5 255 236 1 216 0 10 255 236 1 216 1 208 255 215 1 216 1 220 255 236 1 216 1 221 255 236 1 216 1 223 255 215 1 216 1 225 255 236 1 216 1 228 255 236 1 216 1 246 255 236 1 216 2 7 255 236 1 216 2 11 255 236 1 216 2 160 255 215 1 216 2 170 255 236 1 216 2 182 255 236 1 216 2 188 255 215 1 216 2 190 255 236 1 216 2 192 255 236 1 216 2 194 255 236 1 216 2 203 255 215 1 216 2 213 255 236 1 216 2 230 255 215 1 216 2 248 255 236 1 216 2 250 255 236 1 216 2 252 255 236 1 216 2 254 255 236 1 216 3 6 255 215 1 216 3 8 255 215 1 216 3 14 255 236 1 216 3 16 255 236 1 216 3 24 255 236 1 218 0 5 255 236 1 218 0 10 255 236 1 218 1 208 255 215 1 218 1 220 255 236 1 218 1 221 255 236 1 218 1 223 255 215 1 218 1 225 255 236 1 218 1 228 255 236 1 218 1 246 255 236 1 218 2 7 255 236 1 218 2 11 255 236 1 218 2 160 255 215 1 218 2 170 255 236 1 218 2 182 255 236 1 218 2 188 255 215 1 218 2 190 255 236 1 218 2 192 255 236 1 218 2 194 255 236 1 218 2 203 255 215 1 218 2 213 255 236 1 218 2 230 255 215 1 218 2 248 255 236 1 218 2 250 255 236 1 218 2 252 255 236 1 218 2 254 255 236 1 218 3 6 255 215 1 218 3 8 255 215 1 218 3 14 255 236 1 218 3 16 255 236 1 218 3 24 255 236 1 220 0 15 255 154 1 220 0 16 255 215 1 220 0 17 255 154 1 220 1 206 255 195 1 220 1 207 255 236 1 220 1 213 255 195 1 220 1 216 255 236 1 220 1 219 255 236 1 220 1 222 255 236 1 220 1 234 255 236 1 220 1 237 255 236 1 220 1 242 255 195 1 220 2 2 255 215 1 220 2 3 255 215 1 220 2 4 255 215 1 220 2 8 255 154 1 220 2 12 255 154 1 220 2 106 255 236 1 220 2 115 255 195 1 220 2 127 255 236 1 220 2 133 255 236 1 220 2 135 255 236 1 220 2 137 255 236 1 220 2 141 255 236 1 220 2 178 255 236 1 220 2 180 255 236 1 220 2 207 255 195 1 220 2 224 255 236 1 220 2 240 255 236 1 220 2 242 255 236 1 220 2 244 255 236 1 220 3 10 255 236 1 220 3 12 255 236 1 220 3 18 255 195 1 220 3 22 255 236 1 220 3 26 255 236 1 220 3 28 255 195 1 221 0 15 255 174 1 221 0 17 255 174 1 221 1 206 255 215 1 221 1 213 255 215 1 221 1 242 255 215 1 221 2 8 255 174 1 221 2 12 255 174 1 221 2 115 255 215 1 221 2 207 255 215 1 221 3 18 255 215 1 221 3 28 255 215 1 222 0 5 255 236 1 222 0 10 255 236 1 222 1 208 255 215 1 222 1 220 255 236 1 222 1 221 255 236 1 222 1 223 255 215 1 222 1 225 255 236 1 222 1 228 255 236 1 222 1 246 255 236 1 222 2 7 255 236 1 222 2 11 255 236 1 222 2 160 255 215 1 222 2 170 255 236 1 222 2 182 255 236 1 222 2 188 255 215 1 222 2 190 255 236 1 222 2 192 255 236 1 222 2 194 255 236 1 222 2 203 255 215 1 222 2 213 255 236 1 222 2 230 255 215 1 222 2 248 255 236 1 222 2 250 255 236 1 222 2 252 255 236 1 222 2 254 255 236 1 222 3 6 255 215 1 222 3 8 255 215 1 222 3 14 255 236 1 222 3 16 255 236 1 222 3 24 255 236 1 223 1 207 255 215 1 223 1 216 255 215 1 223 1 219 255 215 1 223 1 222 255 215 1 223 1 225 255 215 1 223 1 234 255 215 1 223 1 237 255 215 1 223 2 106 255 215 1 223 2 127 255 215 1 223 2 133 255 215 1 223 2 135 255 215 1 223 2 137 255 215 1 223 2 141 255 215 1 223 2 178 255 215 1 223 2 180 255 215 1 223 2 192 255 215 1 223 2 194 255 215 1 223 2 198 255 215 1 223 2 200 255 215 1 223 2 213 255 215 1 223 2 224 255 215 1 223 2 240 255 215 1 223 2 242 255 215 1 223 2 244 255 215 1 223 2 254 255 215 1 223 3 10 255 215 1 223 3 12 255 215 1 223 3 22 255 215 1 223 3 26 255 215 1 224 0 5 255 236 1 224 0 10 255 236 1 224 2 7 255 236 1 224 2 11 255 236 1 227 0 5 255 236 1 227 0 10 255 236 1 227 2 7 255 236 1 227 2 11 255 236 1 228 0 5 255 133 1 228 0 10 255 133 1 228 1 208 255 215 1 228 1 220 255 154 1 228 1 221 255 195 1 228 1 223 255 215 1 228 1 225 255 174 1 228 1 228 255 154 1 228 1 246 255 195 1 228 2 7 255 133 1 228 2 11 255 133 1 228 2 109 255 215 1 228 2 129 255 215 1 228 2 131 255 215 1 228 2 139 255 215 1 228 2 160 255 215 1 228 2 170 255 154 1 228 2 182 255 154 1 228 2 184 255 195 1 228 2 186 255 195 1 228 2 188 255 215 1 228 2 190 255 154 1 228 2 192 255 174 1 228 2 194 255 174 1 228 2 198 255 215 1 228 2 200 255 215 1 228 2 203 255 215 1 228 2 213 255 174 1 228 2 230 255 215 1 228 2 234 255 215 1 228 2 248 255 195 1 228 2 250 255 195 1 228 2 252 255 195 1 228 2 254 255 174 1 228 3 6 255 215 1 228 3 8 255 215 1 228 3 14 255 154 1 228 3 16 255 154 1 228 3 24 255 154 1 230 0 5 255 133 1 230 0 10 255 133 1 230 1 208 255 215 1 230 1 220 255 154 1 230 1 221 255 195 1 230 1 223 255 215 1 230 1 225 255 174 1 230 1 228 255 154 1 230 1 246 255 195 1 230 2 7 255 133 1 230 2 11 255 133 1 230 2 109 255 215 1 230 2 129 255 215 1 230 2 131 255 215 1 230 2 139 255 215 1 230 2 160 255 215 1 230 2 170 255 154 1 230 2 182 255 154 1 230 2 184 255 195 1 230 2 186 255 195 1 230 2 188 255 215 1 230 2 190 255 154 1 230 2 192 255 174 1 230 2 194 255 174 1 230 2 198 255 215 1 230 2 200 255 215 1 230 2 203 255 215 1 230 2 213 255 174 1 230 2 230 255 215 1 230 2 234 255 215 1 230 2 248 255 195 1 230 2 250 255 195 1 230 2 252 255 195 1 230 2 254 255 174 1 230 3 6 255 215 1 230 3 8 255 215 1 230 3 14 255 154 1 230 3 16 255 154 1 230 3 24 255 154 1 231 0 5 255 236 1 231 0 10 255 236 1 231 1 208 255 215 1 231 1 220 255 236 1 231 1 221 255 236 1 231 1 223 255 215 1 231 1 225 255 236 1 231 1 228 255 236 1 231 1 246 255 236 1 231 2 7 255 236 1 231 2 11 255 236 1 231 2 160 255 215 1 231 2 170 255 236 1 231 2 182 255 236 1 231 2 188 255 215 1 231 2 190 255 236 1 231 2 192 255 236 1 231 2 194 255 236 1 231 2 203 255 215 1 231 2 213 255 236 1 231 2 230 255 215 1 231 2 248 255 236 1 231 2 250 255 236 1 231 2 252 255 236 1 231 2 254 255 236 1 231 3 6 255 215 1 231 3 8 255 215 1 231 3 14 255 236 1 231 3 16 255 236 1 231 3 24 255 236 1 232 0 5 255 236 1 232 0 10 255 236 1 232 1 208 255 215 1 232 1 220 255 236 1 232 1 221 255 236 1 232 1 223 255 215 1 232 1 225 255 236 1 232 1 228 255 236 1 232 1 246 255 236 1 232 2 7 255 236 1 232 2 11 255 236 1 232 2 160 255 215 1 232 2 170 255 236 1 232 2 182 255 236 1 232 2 188 255 215 1 232 2 190 255 236 1 232 2 192 255 236 1 232 2 194 255 236 1 232 2 203 255 215 1 232 2 213 255 236 1 232 2 230 255 215 1 232 2 248 255 236 1 232 2 250 255 236 1 232 2 252 255 236 1 232 2 254 255 236 1 232 3 6 255 215 1 232 3 8 255 215 1 232 3 14 255 236 1 232 3 16 255 236 1 232 3 24 255 236 1 234 0 5 255 236 1 234 0 10 255 236 1 234 2 7 255 236 1 234 2 11 255 236 1 235 0 5 255 236 1 235 0 10 255 236 1 235 2 7 255 236 1 235 2 11 255 236 1 235 3 14 255 215 1 235 3 16 255 215 1 236 0 15 255 154 1 236 0 16 255 215 1 236 0 17 255 154 1 236 1 206 255 195 1 236 1 207 255 236 1 236 1 213 255 195 1 236 1 216 255 236 1 236 1 219 255 236 1 236 1 222 255 236 1 236 1 234 255 236 1 236 1 237 255 236 1 236 1 242 255 195 1 236 2 2 255 215 1 236 2 3 255 215 1 236 2 4 255 215 1 236 2 8 255 154 1 236 2 12 255 154 1 236 2 106 255 236 1 236 2 115 255 195 1 236 2 127 255 236 1 236 2 133 255 236 1 236 2 135 255 236 1 236 2 137 255 236 1 236 2 141 255 236 1 236 2 178 255 236 1 236 2 180 255 236 1 236 2 207 255 195 1 236 2 224 255 236 1 236 2 240 255 236 1 236 2 242 255 236 1 236 2 244 255 236 1 236 3 10 255 236 1 236 3 12 255 236 1 236 3 18 255 195 1 236 3 22 255 236 1 236 3 26 255 236 1 236 3 28 255 195 1 242 0 5 255 133 1 242 0 10 255 133 1 242 1 208 255 215 1 242 1 220 255 154 1 242 1 221 255 195 1 242 1 223 255 215 1 242 1 225 255 174 1 242 1 228 255 154 1 242 1 246 255 195 1 242 2 7 255 133 1 242 2 11 255 133 1 242 2 109 255 215 1 242 2 129 255 215 1 242 2 131 255 215 1 242 2 139 255 215 1 242 2 160 255 215 1 242 2 170 255 154 1 242 2 182 255 154 1 242 2 184 255 195 1 242 2 186 255 195 1 242 2 188 255 215 1 242 2 190 255 154 1 242 2 192 255 174 1 242 2 194 255 174 1 242 2 198 255 215 1 242 2 200 255 215 1 242 2 203 255 215 1 242 2 213 255 174 1 242 2 230 255 215 1 242 2 234 255 215 1 242 2 248 255 195 1 242 2 250 255 195 1 242 2 252 255 195 1 242 2 254 255 174 1 242 3 6 255 215 1 242 3 8 255 215 1 242 3 14 255 154 1 242 3 16 255 154 1 242 3 24 255 154 1 243 0 5 255 133 1 243 0 10 255 133 1 243 1 208 255 215 1 243 1 220 255 154 1 243 1 221 255 195 1 243 1 223 255 215 1 243 1 225 255 174 1 243 1 228 255 154 1 243 1 246 255 195 1 243 2 7 255 133 1 243 2 11 255 133 1 243 2 109 255 215 1 243 2 129 255 215 1 243 2 131 255 215 1 243 2 139 255 215 1 243 2 160 255 215 1 243 2 170 255 154 1 243 2 182 255 154 1 243 2 184 255 195 1 243 2 186 255 195 1 243 2 188 255 215 1 243 2 190 255 154 1 243 2 192 255 174 1 243 2 194 255 174 1 243 2 198 255 215 1 243 2 200 255 215 1 243 2 203 255 215 1 243 2 213 255 174 1 243 2 230 255 215 1 243 2 234 255 215 1 243 2 248 255 195 1 243 2 250 255 195 1 243 2 252 255 195 1 243 2 254 255 174 1 243 3 6 255 215 1 243 3 8 255 215 1 243 3 14 255 154 1 243 3 16 255 154 1 243 3 24 255 154 1 244 0 5 255 236 1 244 0 10 255 236 1 244 2 7 255 236 1 244 2 11 255 236 1 244 3 14 255 215 1 244 3 16 255 215 1 245 1 207 255 215 1 245 1 216 255 215 1 245 1 219 255 215 1 245 1 222 255 215 1 245 1 225 255 215 1 245 1 234 255 215 1 245 1 237 255 215 1 245 2 106 255 215 1 245 2 127 255 215 1 245 2 133 255 215 1 245 2 135 255 215 1 245 2 137 255 215 1 245 2 141 255 215 1 245 2 178 255 215 1 245 2 180 255 215 1 245 2 192 255 215 1 245 2 194 255 215 1 245 2 198 255 215 1 245 2 200 255 215 1 245 2 213 255 215 1 245 2 224 255 215 1 245 2 240 255 215 1 245 2 242 255 215 1 245 2 244 255 215 1 245 2 254 255 215 1 245 3 10 255 215 1 245 3 12 255 215 1 245 3 22 255 215 1 245 3 26 255 215 1 246 0 15 255 174 1 246 0 17 255 174 1 246 1 206 255 215 1 246 1 213 255 215 1 246 1 242 255 215 1 246 2 8 255 174 1 246 2 12 255 174 1 246 2 115 255 215 1 246 2 207 255 215 1 246 3 18 255 215 1 246 3 28 255 215 1 248 0 15 255 133 1 248 0 16 255 174 1 248 0 17 255 133 1 248 1 159 255 215 1 248 1 164 255 154 1 248 1 170 255 113 1 248 1 174 255 154 1 248 1 181 255 154 1 248 1 184 255 215 1 248 1 187 255 215 1 248 1 188 0 41 1 248 1 190 255 174 1 248 1 204 255 154 1 248 1 205 255 154 1 248 1 206 255 133 1 248 1 207 255 113 1 248 1 208 255 215 1 248 1 209 255 215 1 248 1 210 255 154 1 248 1 211 255 154 1 248 1 212 255 154 1 248 1 213 255 133 1 248 1 214 255 154 1 248 1 215 255 154 1 248 1 216 255 113 1 248 1 217 255 154 1 248 1 218 255 154 1 248 1 219 255 113 1 248 1 220 255 174 1 248 1 221 255 174 1 248 1 222 255 113 1 248 1 223 255 215 1 248 1 224 255 154 1 248 1 225 255 154 1 248 1 226 255 154 1 248 1 227 255 154 1 248 1 228 255 174 1 248 1 229 255 154 1 248 1 230 255 154 1 248 1 231 255 215 1 248 1 232 255 154 1 248 1 233 255 195 1 248 1 234 255 113 1 248 1 236 255 154 1 248 1 237 255 113 1 248 1 238 255 133 1 248 1 242 255 133 1 248 1 243 255 154 1 248 1 245 255 154 1 248 1 246 255 174 1 248 1 247 255 154 1 248 1 249 255 154 1 248 2 2 255 174 1 248 2 3 255 174 1 248 2 4 255 174 1 248 2 8 255 133 1 248 2 12 255 133 1 248 2 106 255 113 1 248 2 107 255 154 1 248 2 108 255 215 1 248 2 109 255 215 1 248 2 113 255 154 1 248 2 114 255 113 1 248 2 115 255 133 1 248 2 117 255 154 1 248 2 119 255 154 1 248 2 121 255 154 1 248 2 125 255 154 1 248 2 126 255 215 1 248 2 127 255 113 1 248 2 129 255 215 1 248 2 131 255 215 1 248 2 132 255 215 1 248 2 133 255 113 1 248 2 134 255 215 1 248 2 135 255 113 1 248 2 136 255 215 1 248 2 137 255 113 1 248 2 138 255 215 1 248 2 139 255 215 1 248 2 140 255 215 1 248 2 141 255 113 1 248 2 150 255 154 1 248 2 154 255 154 1 248 2 158 255 154 1 248 2 160 255 215 1 248 2 162 255 215 1 248 2 164 255 154 1 248 2 166 255 154 1 248 2 170 255 174 1 248 2 172 255 154 1 248 2 174 255 154 1 248 2 176 255 154 1 248 2 177 255 215 1 248 2 178 255 113 1 248 2 179 255 215 1 248 2 180 255 113 1 248 2 181 0 41 1 248 2 182 255 174 1 248 2 184 255 174 1 248 2 186 255 174 1 248 2 188 255 215 1 248 2 190 255 174 1 248 2 192 255 154 1 248 2 194 255 154 1 248 2 196 255 154 1 248 2 197 255 154 1 248 2 198 255 113 1 248 2 199 255 154 1 248 2 200 255 113 1 248 2 203 255 215 1 248 2 205 255 154 1 248 2 206 255 154 1 248 2 207 255 133 1 248 2 209 255 154 1 248 2 211 255 154 1 248 2 213 255 154 1 248 2 215 255 154 1 248 2 217 255 113 1 248 2 219 255 113 1 248 2 221 255 113 1 248 2 224 255 113 1 248 2 230 255 215 1 248 2 232 255 215 1 248 2 234 255 195 1 248 2 236 255 154 1 248 2 238 255 154 1 248 2 239 255 215 1 248 2 240 255 113 1 248 2 241 255 215 1 248 2 242 255 113 1 248 2 243 255 215 1 248 2 244 255 113 1 248 2 246 255 215 1 248 2 248 255 174 1 248 2 250 255 174 1 248 2 252 255 174 1 248 2 254 255 154 1 248 3 0 255 154 1 248 3 2 255 154 1 248 3 6 255 215 1 248 3 8 255 215 1 248 3 9 255 113 1 248 3 10 255 113 1 248 3 11 255 113 1 248 3 12 255 113 1 248 3 14 255 154 1 248 3 16 255 154 1 248 3 17 255 154 1 248 3 18 255 133 1 248 3 20 255 154 1 248 3 21 255 215 1 248 3 22 255 113 1 248 3 24 255 174 1 248 3 26 255 113 1 248 3 27 255 154 1 248 3 28 255 133 1 249 0 15 255 154 1 249 0 16 255 215 1 249 0 17 255 154 1 249 1 206 255 195 1 249 1 207 255 236 1 249 1 213 255 195 1 249 1 216 255 236 1 249 1 219 255 236 1 249 1 222 255 236 1 249 1 234 255 236 1 249 1 237 255 236 1 249 1 242 255 195 1 249 2 2 255 215 1 249 2 3 255 215 1 249 2 4 255 215 1 249 2 8 255 154 1 249 2 12 255 154 1 249 2 106 255 236 1 249 2 115 255 195 1 249 2 127 255 236 1 249 2 133 255 236 1 249 2 135 255 236 1 249 2 137 255 236 1 249 2 141 255 236 1 249 2 178 255 236 1 249 2 180 255 236 1 249 2 207 255 195 1 249 2 224 255 236 1 249 2 240 255 236 1 249 2 242 255 236 1 249 2 244 255 236 1 249 3 10 255 236 1 249 3 12 255 236 1 249 3 18 255 195 1 249 3 22 255 236 1 249 3 26 255 236 1 249 3 28 255 195 1 250 0 15 255 154 1 250 0 17 255 154 1 250 0 34 0 41 1 250 0 36 255 174 1 250 0 38 255 236 1 250 0 42 255 236 1 250 0 50 255 236 1 250 0 52 255 236 1 250 0 68 255 215 1 250 0 70 255 215 1 250 0 71 255 215 1 250 0 72 255 215 1 250 0 74 255 236 1 250 0 80 255 236 1 250 0 81 255 236 1 250 0 82 255 215 1 250 0 83 255 236 1 250 0 84 255 215 1 250 0 85 255 236 1 250 0 86 255 236 1 250 0 88 255 236 1 250 0 130 255 174 1 250 0 131 255 174 1 250 0 132 255 174 1 250 0 133 255 174 1 250 0 134 255 174 1 250 0 135 255 174 1 250 0 137 255 236 1 250 0 148 255 236 1 250 0 149 255 236 1 250 0 150 255 236 1 250 0 151 255 236 1 250 0 152 255 236 1 250 0 154 255 236 1 250 0 162 255 215 1 250 0 163 255 215 1 250 0 164 255 215 1 250 0 165 255 215 1 250 0 166 255 215 1 250 0 167 255 215 1 250 0 168 255 215 1 250 0 169 255 215 1 250 0 170 255 215 1 250 0 171 255 215 1 250 0 172 255 215 1 250 0 173 255 215 1 250 0 180 255 215 1 250 0 181 255 215 1 250 0 182 255 215 1 250 0 183 255 215 1 250 0 184 255 215 1 250 0 186 255 215 1 250 0 187 255 236 1 250 0 188 255 236 1 250 0 189 255 236 1 250 0 190 255 236 1 250 0 194 255 174 1 250 0 195 255 215 1 250 0 196 255 174 1 250 0 197 255 215 1 250 0 198 255 174 1 250 0 199 255 215 1 250 0 200 255 236 1 250 0 201 255 215 1 250 0 202 255 236 1 250 0 203 255 215 1 250 0 204 255 236 1 250 0 205 255 215 1 250 0 206 255 236 1 250 0 207 255 215 1 250 0 209 255 215 1 250 0 211 255 215 1 250 0 213 255 215 1 250 0 215 255 215 1 250 0 217 255 215 1 250 0 219 255 215 1 250 0 221 255 215 1 250 0 222 255 236 1 250 0 223 255 236 1 250 0 224 255 236 1 250 0 225 255 236 1 250 0 226 255 236 1 250 0 227 255 236 1 250 0 228 255 236 1 250 0 229 255 236 1 250 0 250 255 236 1 250 1 6 255 236 1 250 1 8 255 236 1 250 1 13 255 236 1 250 1 14 255 236 1 250 1 15 255 215 1 250 1 16 255 236 1 250 1 17 255 215 1 250 1 18 255 236 1 250 1 19 255 215 1 250 1 20 255 236 1 250 1 21 255 215 1 250 1 23 255 236 1 250 1 25 255 236 1 250 1 29 255 236 1 250 1 33 255 236 1 250 1 43 255 236 1 250 1 45 255 236 1 250 1 47 255 236 1 250 1 49 255 236 1 250 1 51 255 236 1 250 1 53 255 236 1 250 1 67 255 174 1 250 1 68 255 215 1 250 1 70 255 215 1 250 1 71 255 236 1 250 1 72 255 215 1 250 1 74 255 236 1 250 2 8 255 154 1 250 2 12 255 154 1 250 2 87 255 236 1 250 2 88 255 174 1 250 2 89 255 215 1 250 2 95 255 236 1 250 2 96 255 215 1 250 2 98 255 236 1 250 3 29 255 174 1 250 3 30 255 215 1 250 3 31 255 174 1 250 3 32 255 215 1 250 3 33 255 174 1 250 3 34 255 215 1 250 3 35 255 174 1 250 3 37 255 174 1 250 3 38 255 215 1 250 3 39 255 174 1 250 3 40 255 215 1 250 3 41 255 174 1 250 3 42 255 215 1 250 3 43 255 174 1 250 3 44 255 215 1 250 3 45 255 174 1 250 3 46 255 215 1 250 3 47 255 174 1 250 3 48 255 215 1 250 3 49 255 174 1 250 3 50 255 215 1 250 3 51 255 174 1 250 3 52 255 215 1 250 3 54 255 215 1 250 3 56 255 215 1 250 3 58 255 215 1 250 3 60 255 215 1 250 3 64 255 215 1 250 3 66 255 215 1 250 3 68 255 215 1 250 3 73 255 236 1 250 3 74 255 215 1 250 3 75 255 236 1 250 3 76 255 215 1 250 3 77 255 236 1 250 3 78 255 215 1 250 3 79 255 236 1 250 3 81 255 236 1 250 3 82 255 215 1 250 3 83 255 236 1 250 3 84 255 215 1 250 3 85 255 236 1 250 3 86 255 215 1 250 3 87 255 236 1 250 3 88 255 215 1 250 3 89 255 236 1 250 3 90 255 215 1 250 3 91 255 236 1 250 3 92 255 215 1 250 3 93 255 236 1 250 3 94 255 215 1 250 3 95 255 236 1 250 3 96 255 215 1 250 3 98 255 236 1 250 3 100 255 236 1 250 3 102 255 236 1 250 3 104 255 236 1 250 3 106 255 236 1 250 3 108 255 236 1 250 3 110 255 236 1 251 0 5 0 82 1 251 0 10 0 82 1 251 0 15 255 174 1 251 0 17 255 174 1 251 0 34 0 41 1 251 2 7 0 82 1 251 2 8 255 174 1 251 2 11 0 82 1 251 2 12 255 174 1 252 0 15 255 154 1 252 0 17 255 154 1 252 0 34 0 41 1 252 0 36 255 174 1 252 0 38 255 236 1 252 0 42 255 236 1 252 0 50 255 236 1 252 0 52 255 236 1 252 0 68 255 215 1 252 0 70 255 215 1 252 0 71 255 215 1 252 0 72 255 215 1 252 0 74 255 236 1 252 0 80 255 236 1 252 0 81 255 236 1 252 0 82 255 215 1 252 0 83 255 236 1 252 0 84 255 215 1 252 0 85 255 236 1 252 0 86 255 236 1 252 0 88 255 236 1 252 0 130 255 174 1 252 0 131 255 174 1 252 0 132 255 174 1 252 0 133 255 174 1 252 0 134 255 174 1 252 0 135 255 174 1 252 0 137 255 236 1 252 0 148 255 236 1 252 0 149 255 236 1 252 0 150 255 236 1 252 0 151 255 236 1 252 0 152 255 236 1 252 0 154 255 236 1 252 0 162 255 215 1 252 0 163 255 215 1 252 0 164 255 215 1 252 0 165 255 215 1 252 0 166 255 215 1 252 0 167 255 215 1 252 0 168 255 215 1 252 0 169 255 215 1 252 0 170 255 215 1 252 0 171 255 215 1 252 0 172 255 215 1 252 0 173 255 215 1 252 0 180 255 215 1 252 0 181 255 215 1 252 0 182 255 215 1 252 0 183 255 215 1 252 0 184 255 215 1 252 0 186 255 215 1 252 0 187 255 236 1 252 0 188 255 236 1 252 0 189 255 236 1 252 0 190 255 236 1 252 0 194 255 174 1 252 0 195 255 215 1 252 0 196 255 174 1 252 0 197 255 215 1 252 0 198 255 174 1 252 0 199 255 215 1 252 0 200 255 236 1 252 0 201 255 215 1 252 0 202 255 236 1 252 0 203 255 215 1 252 0 204 255 236 1 252 0 205 255 215 1 252 0 206 255 236 1 252 0 207 255 215 1 252 0 209 255 215 1 252 0 211 255 215 1 252 0 213 255 215 1 252 0 215 255 215 1 252 0 217 255 215 1 252 0 219 255 215 1 252 0 221 255 215 1 252 0 222 255 236 1 252 0 223 255 236 1 252 0 224 255 236 1 252 0 225 255 236 1 252 0 226 255 236 1 252 0 227 255 236 1 252 0 228 255 236 1 252 0 229 255 236 1 252 0 250 255 236 1 252 1 6 255 236 1 252 1 8 255 236 1 252 1 13 255 236 1 252 1 14 255 236 1 252 1 15 255 215 1 252 1 16 255 236 1 252 1 17 255 215 1 252 1 18 255 236 1 252 1 19 255 215 1 252 1 20 255 236 1 252 1 21 255 215 1 252 1 23 255 236 1 252 1 25 255 236 1 252 1 29 255 236 1 252 1 33 255 236 1 252 1 43 255 236 1 252 1 45 255 236 1 252 1 47 255 236 1 252 1 49 255 236 1 252 1 51 255 236 1 252 1 53 255 236 1 252 1 67 255 174 1 252 1 68 255 215 1 252 1 70 255 215 1 252 1 71 255 236 1 252 1 72 255 215 1 252 1 74 255 236 1 252 2 8 255 154 1 252 2 12 255 154 1 252 2 87 255 236 1 252 2 88 255 174 1 252 2 89 255 215 1 252 2 95 255 236 1 252 2 96 255 215 1 252 2 98 255 236 1 252 3 29 255 174 1 252 3 30 255 215 1 252 3 31 255 174 1 252 3 32 255 215 1 252 3 33 255 174 1 252 3 34 255 215 1 252 3 35 255 174 1 252 3 37 255 174 1 252 3 38 255 215 1 252 3 39 255 174 1 252 3 40 255 215 1 252 3 41 255 174 1 252 3 42 255 215 1 252 3 43 255 174 1 252 3 44 255 215 1 252 3 45 255 174 1 252 3 46 255 215 1 252 3 47 255 174 1 252 3 48 255 215 1 252 3 49 255 174 1 252 3 50 255 215 1 252 3 51 255 174 1 252 3 52 255 215 1 252 3 54 255 215 1 252 3 56 255 215 1 252 3 58 255 215 1 252 3 60 255 215 1 252 3 64 255 215 1 252 3 66 255 215 1 252 3 68 255 215 1 252 3 73 255 236 1 252 3 74 255 215 1 252 3 75 255 236 1 252 3 76 255 215 1 252 3 77 255 236 1 252 3 78 255 215 1 252 3 79 255 236 1 252 3 81 255 236 1 252 3 82 255 215 1 252 3 83 255 236 1 252 3 84 255 215 1 252 3 85 255 236 1 252 3 86 255 215 1 252 3 87 255 236 1 252 3 88 255 215 1 252 3 89 255 236 1 252 3 90 255 215 1 252 3 91 255 236 1 252 3 92 255 215 1 252 3 93 255 236 1 252 3 94 255 215 1 252 3 95 255 236 1 252 3 96 255 215 1 252 3 98 255 236 1 252 3 100 255 236 1 252 3 102 255 236 1 252 3 104 255 236 1 252 3 106 255 236 1 252 3 108 255 236 1 252 3 110 255 236 1 253 0 5 0 82 1 253 0 10 0 82 1 253 0 15 255 174 1 253 0 17 255 174 1 253 0 34 0 41 1 253 2 7 0 82 1 253 2 8 255 174 1 253 2 11 0 82 1 253 2 12 255 174 1 254 0 15 255 154 1 254 0 17 255 154 1 254 0 34 0 41 1 254 0 36 255 174 1 254 0 38 255 236 1 254 0 42 255 236 1 254 0 50 255 236 1 254 0 52 255 236 1 254 0 68 255 215 1 254 0 70 255 215 1 254 0 71 255 215 1 254 0 72 255 215 1 254 0 74 255 236 1 254 0 80 255 236 1 254 0 81 255 236 1 254 0 82 255 215 1 254 0 83 255 236 1 254 0 84 255 215 1 254 0 85 255 236 1 254 0 86 255 236 1 254 0 88 255 236 1 254 0 130 255 174 1 254 0 131 255 174 1 254 0 132 255 174 1 254 0 133 255 174 1 254 0 134 255 174 1 254 0 135 255 174 1 254 0 137 255 236 1 254 0 148 255 236 1 254 0 149 255 236 1 254 0 150 255 236 1 254 0 151 255 236 1 254 0 152 255 236 1 254 0 154 255 236 1 254 0 162 255 215 1 254 0 163 255 215 1 254 0 164 255 215 1 254 0 165 255 215 1 254 0 166 255 215 1 254 0 167 255 215 1 254 0 168 255 215 1 254 0 169 255 215 1 254 0 170 255 215 1 254 0 171 255 215 1 254 0 172 255 215 1 254 0 173 255 215 1 254 0 180 255 215 1 254 0 181 255 215 1 254 0 182 255 215 1 254 0 183 255 215 1 254 0 184 255 215 1 254 0 186 255 215 1 254 0 187 255 236 1 254 0 188 255 236 1 254 0 189 255 236 1 254 0 190 255 236 1 254 0 194 255 174 1 254 0 195 255 215 1 254 0 196 255 174 1 254 0 197 255 215 1 254 0 198 255 174 1 254 0 199 255 215 1 254 0 200 255 236 1 254 0 201 255 215 1 254 0 202 255 236 1 254 0 203 255 215 1 254 0 204 255 236 1 254 0 205 255 215 1 254 0 206 255 236 1 254 0 207 255 215 1 254 0 209 255 215 1 254 0 211 255 215 1 254 0 213 255 215 1 254 0 215 255 215 1 254 0 217 255 215 1 254 0 219 255 215 1 254 0 221 255 215 1 254 0 222 255 236 1 254 0 223 255 236 1 254 0 224 255 236 1 254 0 225 255 236 1 254 0 226 255 236 1 254 0 227 255 236 1 254 0 228 255 236 1 254 0 229 255 236 1 254 0 250 255 236 1 254 1 6 255 236 1 254 1 8 255 236 1 254 1 13 255 236 1 254 1 14 255 236 1 254 1 15 255 215 1 254 1 16 255 236 1 254 1 17 255 215 1 254 1 18 255 236 1 254 1 19 255 215 1 254 1 20 255 236 1 254 1 21 255 215 1 254 1 23 255 236 1 254 1 25 255 236 1 254 1 29 255 236 1 254 1 33 255 236 1 254 1 43 255 236 1 254 1 45 255 236 1 254 1 47 255 236 1 254 1 49 255 236 1 254 1 51 255 236 1 254 1 53 255 236 1 254 1 67 255 174 1 254 1 68 255 215 1 254 1 70 255 215 1 254 1 71 255 236 1 254 1 72 255 215 1 254 1 74 255 236 1 254 2 8 255 154 1 254 2 12 255 154 1 254 2 87 255 236 1 254 2 88 255 174 1 254 2 89 255 215 1 254 2 95 255 236 1 254 2 96 255 215 1 254 2 98 255 236 1 254 3 29 255 174 1 254 3 30 255 215 1 254 3 31 255 174 1 254 3 32 255 215 1 254 3 33 255 174 1 254 3 34 255 215 1 254 3 35 255 174 1 254 3 37 255 174 1 254 3 38 255 215 1 254 3 39 255 174 1 254 3 40 255 215 1 254 3 41 255 174 1 254 3 42 255 215 1 254 3 43 255 174 1 254 3 44 255 215 1 254 3 45 255 174 1 254 3 46 255 215 1 254 3 47 255 174 1 254 3 48 255 215 1 254 3 49 255 174 1 254 3 50 255 215 1 254 3 51 255 174 1 254 3 52 255 215 1 254 3 54 255 215 1 254 3 56 255 215 1 254 3 58 255 215 1 254 3 60 255 215 1 254 3 64 255 215 1 254 3 66 255 215 1 254 3 68 255 215 1 254 3 73 255 236 1 254 3 74 255 215 1 254 3 75 255 236 1 254 3 76 255 215 1 254 3 77 255 236 1 254 3 78 255 215 1 254 3 79 255 236 1 254 3 81 255 236 1 254 3 82 255 215 1 254 3 83 255 236 1 254 3 84 255 215 1 254 3 85 255 236 1 254 3 86 255 215 1 254 3 87 255 236 1 254 3 88 255 215 1 254 3 89 255 236 1 254 3 90 255 215 1 254 3 91 255 236 1 254 3 92 255 215 1 254 3 93 255 236 1 254 3 94 255 215 1 254 3 95 255 236 1 254 3 96 255 215 1 254 3 98 255 236 1 254 3 100 255 236 1 254 3 102 255 236 1 254 3 104 255 236 1 254 3 106 255 236 1 254 3 108 255 236 1 254 3 110 255 236 1 255 0 5 0 82 1 255 0 10 0 82 1 255 0 15 255 174 1 255 0 17 255 174 1 255 0 34 0 41 1 255 2 7 0 82 1 255 2 8 255 174 1 255 2 11 0 82 1 255 2 12 255 174 2 0 0 15 255 133 2 0 0 17 255 133 2 0 0 34 0 41 2 0 0 36 255 133 2 0 0 38 255 215 2 0 0 42 255 215 2 0 0 50 255 215 2 0 0 52 255 215 2 0 0 68 255 154 2 0 0 70 255 154 2 0 0 71 255 154 2 0 0 72 255 154 2 0 0 74 255 215 2 0 0 80 255 195 2 0 0 81 255 195 2 0 0 82 255 154 2 0 0 83 255 195 2 0 0 84 255 154 2 0 0 85 255 195 2 0 0 86 255 174 2 0 0 88 255 195 2 0 0 93 255 215 2 0 0 130 255 133 2 0 0 131 255 133 2 0 0 132 255 133 2 0 0 133 255 133 2 0 0 134 255 133 2 0 0 135 255 133 2 0 0 137 255 215 2 0 0 148 255 215 2 0 0 149 255 215 2 0 0 150 255 215 2 0 0 151 255 215 2 0 0 152 255 215 2 0 0 154 255 215 2 0 0 162 255 154 2 0 0 163 255 154 2 0 0 164 255 154 2 0 0 165 255 154 2 0 0 166 255 154 2 0 0 167 255 154 2 0 0 168 255 154 2 0 0 169 255 154 2 0 0 170 255 154 2 0 0 171 255 154 2 0 0 172 255 154 2 0 0 173 255 154 2 0 0 180 255 154 2 0 0 181 255 154 2 0 0 182 255 154 2 0 0 183 255 154 2 0 0 184 255 154 2 0 0 186 255 154 2 0 0 187 255 195 2 0 0 188 255 195 2 0 0 189 255 195 2 0 0 190 255 195 2 0 0 194 255 133 2 0 0 195 255 154 2 0 0 196 255 133 2 0 0 197 255 154 2 0 0 198 255 133 2 0 0 199 255 154 2 0 0 200 255 215 2 0 0 201 255 154 2 0 0 202 255 215 2 0 0 203 255 154 2 0 0 204 255 215 2 0 0 205 255 154 2 0 0 206 255 215 2 0 0 207 255 154 2 0 0 209 255 154 2 0 0 211 255 154 2 0 0 213 255 154 2 0 0 215 255 154 2 0 0 217 255 154 2 0 0 219 255 154 2 0 0 221 255 154 2 0 0 222 255 215 2 0 0 223 255 215 2 0 0 224 255 215 2 0 0 225 255 215 2 0 0 226 255 215 2 0 0 227 255 215 2 0 0 228 255 215 2 0 0 229 255 215 2 0 0 250 255 195 2 0 1 6 255 195 2 0 1 8 255 195 2 0 1 13 255 195 2 0 1 14 255 215 2 0 1 15 255 154 2 0 1 16 255 215 2 0 1 17 255 154 2 0 1 18 255 215 2 0 1 19 255 154 2 0 1 20 255 215 2 0 1 21 255 154 2 0 1 23 255 195 2 0 1 25 255 195 2 0 1 29 255 174 2 0 1 33 255 174 2 0 1 43 255 195 2 0 1 45 255 195 2 0 1 47 255 195 2 0 1 49 255 195 2 0 1 51 255 195 2 0 1 53 255 195 2 0 1 60 255 215 2 0 1 62 255 215 2 0 1 64 255 215 2 0 1 67 255 133 2 0 1 68 255 154 2 0 1 70 255 154 2 0 1 71 255 215 2 0 1 72 255 154 2 0 1 74 255 174 2 0 2 8 255 133 2 0 2 12 255 133 2 0 2 87 255 195 2 0 2 88 255 133 2 0 2 89 255 154 2 0 2 95 255 215 2 0 2 96 255 154 2 0 2 98 255 195 2 0 3 29 255 133 2 0 3 30 255 154 2 0 3 31 255 133 2 0 3 32 255 154 2 0 3 33 255 133 2 0 3 34 255 154 2 0 3 35 255 133 2 0 3 37 255 133 2 0 3 38 255 154 2 0 3 39 255 133 2 0 3 40 255 154 2 0 3 41 255 133 2 0 3 42 255 154 2 0 3 43 255 133 2 0 3 44 255 154 2 0 3 45 255 133 2 0 3 46 255 154 2 0 3 47 255 133 2 0 3 48 255 154 2 0 3 49 255 133 2 0 3 50 255 154 2 0 3 51 255 133 2 0 3 52 255 154 2 0 3 54 255 154 2 0 3 56 255 154 2 0 3 58 255 154 2 0 3 60 255 154 2 0 3 64 255 154 2 0 3 66 255 154 2 0 3 68 255 154 2 0 3 73 255 215 2 0 3 74 255 154 2 0 3 75 255 215 2 0 3 76 255 154 2 0 3 77 255 215 2 0 3 78 255 154 2 0 3 79 255 215 2 0 3 81 255 215 2 0 3 82 255 154 2 0 3 83 255 215 2 0 3 84 255 154 2 0 3 85 255 215 2 0 3 86 255 154 2 0 3 87 255 215 2 0 3 88 255 154 2 0 3 89 255 215 2 0 3 90 255 154 2 0 3 91 255 215 2 0 3 92 255 154 2 0 3 93 255 215 2 0 3 94 255 154 2 0 3 95 255 215 2 0 3 96 255 154 2 0 3 98 255 195 2 0 3 100 255 195 2 0 3 102 255 195 2 0 3 104 255 195 2 0 3 106 255 195 2 0 3 108 255 195 2 0 3 110 255 195 2 1 0 5 0 82 2 1 0 10 0 82 2 1 0 15 255 174 2 1 0 17 255 174 2 1 0 34 0 41 2 1 2 7 0 82 2 1 2 8 255 174 2 1 2 11 0 82 2 1 2 12 255 174 2 2 0 55 255 174 2 2 1 36 255 174 2 2 1 38 255 174 2 2 1 113 255 174 2 2 1 157 255 174 2 2 1 166 255 174 2 2 1 188 255 174 2 2 1 196 255 174 2 2 1 220 255 215 2 2 1 228 255 215 2 2 2 169 255 174 2 2 2 170 255 215 2 2 2 181 255 174 2 2 2 182 255 215 2 2 2 189 255 174 2 2 2 190 255 215 2 2 3 23 255 174 2 2 3 24 255 215 2 2 3 143 255 174 2 3 0 55 255 174 2 3 1 36 255 174 2 3 1 38 255 174 2 3 1 113 255 174 2 3 1 157 255 174 2 3 1 166 255 174 2 3 1 188 255 174 2 3 1 196 255 174 2 3 1 220 255 215 2 3 1 228 255 215 2 3 2 169 255 174 2 3 2 170 255 215 2 3 2 181 255 174 2 3 2 182 255 215 2 3 2 189 255 174 2 3 2 190 255 215 2 3 3 23 255 174 2 3 3 24 255 215 2 3 3 143 255 174 2 4 0 55 255 174 2 4 1 36 255 174 2 4 1 38 255 174 2 4 1 113 255 174 2 4 1 157 255 174 2 4 1 166 255 174 2 4 1 188 255 174 2 4 1 196 255 174 2 4 1 220 255 215 2 4 1 228 255 215 2 4 2 169 255 174 2 4 2 170 255 215 2 4 2 181 255 174 2 4 2 182 255 215 2 4 2 189 255 174 2 4 2 190 255 215 2 4 3 23 255 174 2 4 3 24 255 215 2 4 3 143 255 174 2 6 0 36 255 113 2 6 0 55 0 41 2 6 0 57 0 41 2 6 0 58 0 41 2 6 0 60 0 20 2 6 0 68 255 174 2 6 0 70 255 133 2 6 0 71 255 133 2 6 0 72 255 133 2 6 0 74 255 195 2 6 0 80 255 195 2 6 0 81 255 195 2 6 0 82 255 133 2 6 0 83 255 195 2 6 0 84 255 133 2 6 0 85 255 195 2 6 0 86 255 195 2 6 0 88 255 195 2 6 0 130 255 113 2 6 0 131 255 113 2 6 0 132 255 113 2 6 0 133 255 113 2 6 0 134 255 113 2 6 0 135 255 113 2 6 0 159 0 20 2 6 0 162 255 133 2 6 0 163 255 174 2 6 0 164 255 174 2 6 0 165 255 174 2 6 0 166 255 174 2 6 0 167 255 174 2 6 0 168 255 174 2 6 0 169 255 133 2 6 0 170 255 133 2 6 0 171 255 133 2 6 0 172 255 133 2 6 0 173 255 133 2 6 0 180 255 133 2 6 0 181 255 133 2 6 0 182 255 133 2 6 0 183 255 133 2 6 0 184 255 133 2 6 0 186 255 133 2 6 0 187 255 195 2 6 0 188 255 195 2 6 0 189 255 195 2 6 0 190 255 195 2 6 0 194 255 113 2 6 0 195 255 174 2 6 0 196 255 113 2 6 0 197 255 174 2 6 0 198 255 113 2 6 0 199 255 174 2 6 0 201 255 133 2 6 0 203 255 133 2 6 0 205 255 133 2 6 0 207 255 133 2 6 0 209 255 133 2 6 0 211 255 133 2 6 0 213 255 133 2 6 0 215 255 133 2 6 0 217 255 133 2 6 0 219 255 133 2 6 0 221 255 133 2 6 0 223 255 195 2 6 0 225 255 195 2 6 0 227 255 195 2 6 0 229 255 195 2 6 0 250 255 195 2 6 1 6 255 195 2 6 1 8 255 195 2 6 1 13 255 195 2 6 1 15 255 133 2 6 1 17 255 133 2 6 1 19 255 133 2 6 1 21 255 133 2 6 1 23 255 195 2 6 1 25 255 195 2 6 1 29 255 195 2 6 1 33 255 195 2 6 1 36 0 41 2 6 1 38 0 41 2 6 1 43 255 195 2 6 1 45 255 195 2 6 1 47 255 195 2 6 1 49 255 195 2 6 1 51 255 195 2 6 1 53 255 195 2 6 1 54 0 41 2 6 1 56 0 20 2 6 1 58 0 20 2 6 1 67 255 113 2 6 1 68 255 174 2 6 1 70 255 174 2 6 1 72 255 133 2 6 1 74 255 195 2 6 1 86 255 113 2 6 1 95 255 113 2 6 1 98 255 113 2 6 1 105 255 113 2 6 1 121 255 174 2 6 1 122 255 215 2 6 1 123 255 215 2 6 1 126 255 174 2 6 1 129 255 195 2 6 1 130 255 215 2 6 1 131 255 215 2 6 1 132 255 215 2 6 1 135 255 215 2 6 1 137 255 215 2 6 1 140 255 174 2 6 1 142 255 195 2 6 1 143 255 174 2 6 1 144 255 174 2 6 1 147 255 174 2 6 1 153 255 174 2 6 1 164 255 133 2 6 1 170 255 113 2 6 1 174 255 133 2 6 1 181 255 133 2 6 1 202 255 215 2 6 1 206 255 113 2 6 1 207 255 133 2 6 1 213 255 113 2 6 1 216 255 133 2 6 1 219 255 133 2 6 1 222 255 133 2 6 1 234 255 133 2 6 1 237 255 133 2 6 1 238 255 195 2 6 1 242 255 113 2 6 1 250 0 41 2 6 1 252 0 41 2 6 1 254 0 41 2 6 2 0 0 20 2 6 2 87 255 195 2 6 2 88 255 113 2 6 2 89 255 174 2 6 2 96 255 133 2 6 2 98 255 195 2 6 2 106 255 133 2 6 2 114 255 113 2 6 2 115 255 113 2 6 2 125 255 236 2 6 2 127 255 133 2 6 2 133 255 133 2 6 2 135 255 133 2 6 2 137 255 133 2 6 2 141 255 133 2 6 2 178 255 133 2 6 2 180 255 133 2 6 2 206 255 133 2 6 2 207 255 113 2 6 2 217 255 113 2 6 2 218 255 215 2 6 2 219 255 113 2 6 2 220 255 215 2 6 2 221 255 113 2 6 2 222 255 215 2 6 2 224 255 133 2 6 2 226 255 215 2 6 2 228 255 215 2 6 2 240 255 133 2 6 2 242 255 133 2 6 2 244 255 133 2 6 3 9 255 113 2 6 3 10 255 133 2 6 3 11 255 113 2 6 3 12 255 133 2 6 3 17 255 133 2 6 3 18 255 113 2 6 3 22 255 133 2 6 3 26 255 133 2 6 3 27 255 133 2 6 3 28 255 113 2 6 3 29 255 113 2 6 3 30 255 174 2 6 3 31 255 113 2 6 3 32 255 174 2 6 3 33 255 113 2 6 3 34 255 174 2 6 3 35 255 113 2 6 3 37 255 113 2 6 3 38 255 174 2 6 3 39 255 113 2 6 3 40 255 174 2 6 3 41 255 113 2 6 3 42 255 174 2 6 3 43 255 113 2 6 3 44 255 174 2 6 3 45 255 113 2 6 3 46 255 174 2 6 3 47 255 113 2 6 3 48 255 174 2 6 3 49 255 113 2 6 3 50 255 174 2 6 3 51 255 113 2 6 3 52 255 174 2 6 3 54 255 133 2 6 3 56 255 133 2 6 3 58 255 133 2 6 3 60 255 133 2 6 3 64 255 133 2 6 3 66 255 133 2 6 3 68 255 133 2 6 3 74 255 133 2 6 3 76 255 133 2 6 3 78 255 133 2 6 3 82 255 133 2 6 3 84 255 133 2 6 3 86 255 133 2 6 3 88 255 133 2 6 3 90 255 133 2 6 3 92 255 133 2 6 3 94 255 133 2 6 3 96 255 133 2 6 3 98 255 195 2 6 3 100 255 195 2 6 3 102 255 195 2 6 3 104 255 195 2 6 3 106 255 195 2 6 3 108 255 195 2 6 3 110 255 195 2 6 3 111 0 20 2 6 3 113 0 20 2 6 3 115 0 20 2 6 3 143 0 41 2 7 0 36 255 113 2 7 0 55 0 41 2 7 0 57 0 41 2 7 0 58 0 41 2 7 0 60 0 20 2 7 0 68 255 174 2 7 0 70 255 133 2 7 0 71 255 133 2 7 0 72 255 133 2 7 0 74 255 195 2 7 0 80 255 195 2 7 0 81 255 195 2 7 0 82 255 133 2 7 0 83 255 195 2 7 0 84 255 133 2 7 0 85 255 195 2 7 0 86 255 195 2 7 0 88 255 195 2 7 0 130 255 113 2 7 0 131 255 113 2 7 0 132 255 113 2 7 0 133 255 113 2 7 0 134 255 113 2 7 0 135 255 113 2 7 0 159 0 20 2 7 0 162 255 133 2 7 0 163 255 174 2 7 0 164 255 174 2 7 0 165 255 174 2 7 0 166 255 174 2 7 0 167 255 174 2 7 0 168 255 174 2 7 0 169 255 133 2 7 0 170 255 133 2 7 0 171 255 133 2 7 0 172 255 133 2 7 0 173 255 133 2 7 0 180 255 133 2 7 0 181 255 133 2 7 0 182 255 133 2 7 0 183 255 133 2 7 0 184 255 133 2 7 0 186 255 133 2 7 0 187 255 195 2 7 0 188 255 195 2 7 0 189 255 195 2 7 0 190 255 195 2 7 0 194 255 113 2 7 0 195 255 174 2 7 0 196 255 113 2 7 0 197 255 174 2 7 0 198 255 113 2 7 0 199 255 174 2 7 0 201 255 133 2 7 0 203 255 133 2 7 0 205 255 133 2 7 0 207 255 133 2 7 0 209 255 133 2 7 0 211 255 133 2 7 0 213 255 133 2 7 0 215 255 133 2 7 0 217 255 133 2 7 0 219 255 133 2 7 0 221 255 133 2 7 0 223 255 195 2 7 0 225 255 195 2 7 0 227 255 195 2 7 0 229 255 195 2 7 0 250 255 195 2 7 1 6 255 195 2 7 1 8 255 195 2 7 1 13 255 195 2 7 1 15 255 133 2 7 1 17 255 133 2 7 1 19 255 133 2 7 1 21 255 133 2 7 1 23 255 195 2 7 1 25 255 195 2 7 1 29 255 195 2 7 1 33 255 195 2 7 1 36 0 41 2 7 1 38 0 41 2 7 1 43 255 195 2 7 1 45 255 195 2 7 1 47 255 195 2 7 1 49 255 195 2 7 1 51 255 195 2 7 1 53 255 195 2 7 1 54 0 41 2 7 1 56 0 20 2 7 1 58 0 20 2 7 1 67 255 113 2 7 1 68 255 174 2 7 1 70 255 174 2 7 1 72 255 133 2 7 1 74 255 195 2 7 1 86 255 113 2 7 1 95 255 113 2 7 1 98 255 113 2 7 1 105 255 113 2 7 1 121 255 174 2 7 1 122 255 215 2 7 1 123 255 215 2 7 1 126 255 174 2 7 1 129 255 195 2 7 1 130 255 215 2 7 1 131 255 215 2 7 1 132 255 215 2 7 1 135 255 215 2 7 1 137 255 215 2 7 1 140 255 174 2 7 1 142 255 195 2 7 1 143 255 174 2 7 1 144 255 174 2 7 1 147 255 174 2 7 1 153 255 174 2 7 1 164 255 133 2 7 1 170 255 113 2 7 1 174 255 133 2 7 1 181 255 133 2 7 1 202 255 215 2 7 1 206 255 113 2 7 1 207 255 133 2 7 1 213 255 113 2 7 1 216 255 133 2 7 1 219 255 133 2 7 1 222 255 133 2 7 1 234 255 133 2 7 1 237 255 133 2 7 1 238 255 195 2 7 1 242 255 113 2 7 1 250 0 41 2 7 1 252 0 41 2 7 1 254 0 41 2 7 2 0 0 20 2 7 2 87 255 195 2 7 2 88 255 113 2 7 2 89 255 174 2 7 2 96 255 133 2 7 2 98 255 195 2 7 2 106 255 133 2 7 2 114 255 113 2 7 2 115 255 113 2 7 2 125 255 236 2 7 2 127 255 133 2 7 2 133 255 133 2 7 2 135 255 133 2 7 2 137 255 133 2 7 2 141 255 133 2 7 2 178 255 133 2 7 2 180 255 133 2 7 2 206 255 133 2 7 2 207 255 113 2 7 2 217 255 113 2 7 2 218 255 215 2 7 2 219 255 113 2 7 2 220 255 215 2 7 2 221 255 113 2 7 2 222 255 215 2 7 2 224 255 133 2 7 2 226 255 215 2 7 2 228 255 215 2 7 2 240 255 133 2 7 2 242 255 133 2 7 2 244 255 133 2 7 3 9 255 113 2 7 3 10 255 133 2 7 3 11 255 113 2 7 3 12 255 133 2 7 3 17 255 133 2 7 3 18 255 113 2 7 3 22 255 133 2 7 3 26 255 133 2 7 3 27 255 133 2 7 3 28 255 113 2 7 3 29 255 113 2 7 3 30 255 174 2 7 3 31 255 113 2 7 3 32 255 174 2 7 3 33 255 113 2 7 3 34 255 174 2 7 3 35 255 113 2 7 3 37 255 113 2 7 3 38 255 174 2 7 3 39 255 113 2 7 3 40 255 174 2 7 3 41 255 113 2 7 3 42 255 174 2 7 3 43 255 113 2 7 3 44 255 174 2 7 3 45 255 113 2 7 3 46 255 174 2 7 3 47 255 113 2 7 3 48 255 174 2 7 3 49 255 113 2 7 3 50 255 174 2 7 3 51 255 113 2 7 3 52 255 174 2 7 3 54 255 133 2 7 3 56 255 133 2 7 3 58 255 133 2 7 3 60 255 133 2 7 3 64 255 133 2 7 3 66 255 133 2 7 3 68 255 133 2 7 3 74 255 133 2 7 3 76 255 133 2 7 3 78 255 133 2 7 3 82 255 133 2 7 3 84 255 133 2 7 3 86 255 133 2 7 3 88 255 133 2 7 3 90 255 133 2 7 3 92 255 133 2 7 3 94 255 133 2 7 3 96 255 133 2 7 3 98 255 195 2 7 3 100 255 195 2 7 3 102 255 195 2 7 3 104 255 195 2 7 3 106 255 195 2 7 3 108 255 195 2 7 3 110 255 195 2 7 3 111 0 20 2 7 3 113 0 20 2 7 3 115 0 20 2 7 3 143 0 41 2 8 0 38 255 154 2 8 0 42 255 154 2 8 0 50 255 154 2 8 0 52 255 154 2 8 0 55 255 113 2 8 0 56 255 215 2 8 0 57 255 133 2 8 0 58 255 133 2 8 0 60 255 133 2 8 0 137 255 154 2 8 0 148 255 154 2 8 0 149 255 154 2 8 0 150 255 154 2 8 0 151 255 154 2 8 0 152 255 154 2 8 0 154 255 154 2 8 0 155 255 215 2 8 0 156 255 215 2 8 0 157 255 215 2 8 0 158 255 215 2 8 0 159 255 133 2 8 0 200 255 154 2 8 0 202 255 154 2 8 0 204 255 154 2 8 0 206 255 154 2 8 0 222 255 154 2 8 0 224 255 154 2 8 0 226 255 154 2 8 0 228 255 154 2 8 1 14 255 154 2 8 1 16 255 154 2 8 1 18 255 154 2 8 1 20 255 154 2 8 1 36 255 113 2 8 1 38 255 113 2 8 1 42 255 215 2 8 1 44 255 215 2 8 1 46 255 215 2 8 1 48 255 215 2 8 1 50 255 215 2 8 1 52 255 215 2 8 1 54 255 133 2 8 1 56 255 133 2 8 1 58 255 133 2 8 1 71 255 154 2 8 1 102 255 174 2 8 1 109 255 174 2 8 1 113 255 113 2 8 1 114 255 133 2 8 1 115 255 154 2 8 1 117 255 133 2 8 1 120 255 133 2 8 1 133 255 215 2 8 1 157 255 113 2 8 1 159 255 154 2 8 1 166 255 113 2 8 1 184 255 154 2 8 1 187 255 154 2 8 1 188 255 113 2 8 1 190 255 174 2 8 1 193 255 92 2 8 1 196 255 113 2 8 1 220 255 154 2 8 1 225 255 133 2 8 1 228 255 154 2 8 1 250 255 133 2 8 1 252 255 133 2 8 1 254 255 133 2 8 2 0 255 133 2 8 2 84 255 133 2 8 2 95 255 154 2 8 2 97 255 215 2 8 2 108 255 154 2 8 2 124 255 92 2 8 2 126 255 154 2 8 2 128 255 133 2 8 2 130 255 133 2 8 2 132 255 154 2 8 2 134 255 154 2 8 2 136 255 154 2 8 2 138 255 154 2 8 2 140 255 154 2 8 2 169 255 113 2 8 2 170 255 154 2 8 2 177 255 154 2 8 2 179 255 154 2 8 2 181 255 113 2 8 2 182 255 154 2 8 2 183 255 133 2 8 2 185 255 133 2 8 2 189 255 113 2 8 2 190 255 154 2 8 2 191 255 92 2 8 2 192 255 133 2 8 2 193 255 92 2 8 2 194 255 133 2 8 2 197 255 133 2 8 2 199 255 133 2 8 2 212 255 92 2 8 2 213 255 133 2 8 2 239 255 154 2 8 2 241 255 154 2 8 2 243 255 154 2 8 2 253 255 92 2 8 2 254 255 133 2 8 3 13 255 133 2 8 3 14 255 154 2 8 3 15 255 133 2 8 3 16 255 154 2 8 3 21 255 154 2 8 3 23 255 113 2 8 3 24 255 154 2 8 3 73 255 154 2 8 3 75 255 154 2 8 3 77 255 154 2 8 3 79 255 154 2 8 3 81 255 154 2 8 3 83 255 154 2 8 3 85 255 154 2 8 3 87 255 154 2 8 3 89 255 154 2 8 3 91 255 154 2 8 3 93 255 154 2 8 3 95 255 154 2 8 3 97 255 215 2 8 3 99 255 215 2 8 3 101 255 215 2 8 3 103 255 215 2 8 3 105 255 215 2 8 3 107 255 215 2 8 3 109 255 215 2 8 3 111 255 133 2 8 3 113 255 133 2 8 3 115 255 133 2 8 3 143 255 113 2 10 0 36 255 113 2 10 0 55 0 41 2 10 0 57 0 41 2 10 0 58 0 41 2 10 0 60 0 20 2 10 0 68 255 174 2 10 0 70 255 133 2 10 0 71 255 133 2 10 0 72 255 133 2 10 0 74 255 195 2 10 0 80 255 195 2 10 0 81 255 195 2 10 0 82 255 133 2 10 0 83 255 195 2 10 0 84 255 133 2 10 0 85 255 195 2 10 0 86 255 195 2 10 0 88 255 195 2 10 0 130 255 113 2 10 0 131 255 113 2 10 0 132 255 113 2 10 0 133 255 113 2 10 0 134 255 113 2 10 0 135 255 113 2 10 0 159 0 20 2 10 0 162 255 133 2 10 0 163 255 174 2 10 0 164 255 174 2 10 0 165 255 174 2 10 0 166 255 174 2 10 0 167 255 174 2 10 0 168 255 174 2 10 0 169 255 133 2 10 0 170 255 133 2 10 0 171 255 133 2 10 0 172 255 133 2 10 0 173 255 133 2 10 0 180 255 133 2 10 0 181 255 133 2 10 0 182 255 133 2 10 0 183 255 133 2 10 0 184 255 133 2 10 0 186 255 133 2 10 0 187 255 195 2 10 0 188 255 195 2 10 0 189 255 195 2 10 0 190 255 195 2 10 0 194 255 113 2 10 0 195 255 174 2 10 0 196 255 113 2 10 0 197 255 174 2 10 0 198 255 113 2 10 0 199 255 174 2 10 0 201 255 133 2 10 0 203 255 133 2 10 0 205 255 133 2 10 0 207 255 133 2 10 0 209 255 133 2 10 0 211 255 133 2 10 0 213 255 133 2 10 0 215 255 133 2 10 0 217 255 133 2 10 0 219 255 133 2 10 0 221 255 133 2 10 0 223 255 195 2 10 0 225 255 195 2 10 0 227 255 195 2 10 0 229 255 195 2 10 0 250 255 195 2 10 1 6 255 195 2 10 1 8 255 195 2 10 1 13 255 195 2 10 1 15 255 133 2 10 1 17 255 133 2 10 1 19 255 133 2 10 1 21 255 133 2 10 1 23 255 195 2 10 1 25 255 195 2 10 1 29 255 195 2 10 1 33 255 195 2 10 1 36 0 41 2 10 1 38 0 41 2 10 1 43 255 195 2 10 1 45 255 195 2 10 1 47 255 195 2 10 1 49 255 195 2 10 1 51 255 195 2 10 1 53 255 195 2 10 1 54 0 41 2 10 1 56 0 20 2 10 1 58 0 20 2 10 1 67 255 113 2 10 1 68 255 174 2 10 1 70 255 174 2 10 1 72 255 133 2 10 1 74 255 195 2 10 1 86 255 113 2 10 1 95 255 113 2 10 1 98 255 113 2 10 1 105 255 113 2 10 1 121 255 174 2 10 1 122 255 215 2 10 1 123 255 215 2 10 1 126 255 174 2 10 1 129 255 195 2 10 1 130 255 215 2 10 1 131 255 215 2 10 1 132 255 215 2 10 1 135 255 215 2 10 1 137 255 215 2 10 1 140 255 174 2 10 1 142 255 195 2 10 1 143 255 174 2 10 1 144 255 174 2 10 1 147 255 174 2 10 1 153 255 174 2 10 1 164 255 133 2 10 1 170 255 113 2 10 1 174 255 133 2 10 1 181 255 133 2 10 1 202 255 215 2 10 1 206 255 113 2 10 1 207 255 133 2 10 1 213 255 113 2 10 1 216 255 133 2 10 1 219 255 133 2 10 1 222 255 133 2 10 1 234 255 133 2 10 1 237 255 133 2 10 1 238 255 195 2 10 1 242 255 113 2 10 1 250 0 41 2 10 1 252 0 41 2 10 1 254 0 41 2 10 2 0 0 20 2 10 2 87 255 195 2 10 2 88 255 113 2 10 2 89 255 174 2 10 2 96 255 133 2 10 2 98 255 195 2 10 2 106 255 133 2 10 2 114 255 113 2 10 2 115 255 113 2 10 2 125 255 236 2 10 2 127 255 133 2 10 2 133 255 133 2 10 2 135 255 133 2 10 2 137 255 133 2 10 2 141 255 133 2 10 2 178 255 133 2 10 2 180 255 133 2 10 2 206 255 133 2 10 2 207 255 113 2 10 2 217 255 113 2 10 2 218 255 215 2 10 2 219 255 113 2 10 2 220 255 215 2 10 2 221 255 113 2 10 2 222 255 215 2 10 2 224 255 133 2 10 2 226 255 215 2 10 2 228 255 215 2 10 2 240 255 133 2 10 2 242 255 133 2 10 2 244 255 133 2 10 3 9 255 113 2 10 3 10 255 133 2 10 3 11 255 113 2 10 3 12 255 133 2 10 3 17 255 133 2 10 3 18 255 113 2 10 3 22 255 133 2 10 3 26 255 133 2 10 3 27 255 133 2 10 3 28 255 113 2 10 3 29 255 113 2 10 3 30 255 174 2 10 3 31 255 113 2 10 3 32 255 174 2 10 3 33 255 113 2 10 3 34 255 174 2 10 3 35 255 113 2 10 3 37 255 113 2 10 3 38 255 174 2 10 3 39 255 113 2 10 3 40 255 174 2 10 3 41 255 113 2 10 3 42 255 174 2 10 3 43 255 113 2 10 3 44 255 174 2 10 3 45 255 113 2 10 3 46 255 174 2 10 3 47 255 113 2 10 3 48 255 174 2 10 3 49 255 113 2 10 3 50 255 174 2 10 3 51 255 113 2 10 3 52 255 174 2 10 3 54 255 133 2 10 3 56 255 133 2 10 3 58 255 133 2 10 3 60 255 133 2 10 3 64 255 133 2 10 3 66 255 133 2 10 3 68 255 133 2 10 3 74 255 133 2 10 3 76 255 133 2 10 3 78 255 133 2 10 3 82 255 133 2 10 3 84 255 133 2 10 3 86 255 133 2 10 3 88 255 133 2 10 3 90 255 133 2 10 3 92 255 133 2 10 3 94 255 133 2 10 3 96 255 133 2 10 3 98 255 195 2 10 3 100 255 195 2 10 3 102 255 195 2 10 3 104 255 195 2 10 3 106 255 195 2 10 3 108 255 195 2 10 3 110 255 195 2 10 3 111 0 20 2 10 3 113 0 20 2 10 3 115 0 20 2 10 3 143 0 41 2 12 0 38 255 154 2 12 0 42 255 154 2 12 0 50 255 154 2 12 0 52 255 154 2 12 0 55 255 113 2 12 0 56 255 215 2 12 0 57 255 133 2 12 0 58 255 133 2 12 0 60 255 133 2 12 0 137 255 154 2 12 0 148 255 154 2 12 0 149 255 154 2 12 0 150 255 154 2 12 0 151 255 154 2 12 0 152 255 154 2 12 0 154 255 154 2 12 0 155 255 215 2 12 0 156 255 215 2 12 0 157 255 215 2 12 0 158 255 215 2 12 0 159 255 133 2 12 0 200 255 154 2 12 0 202 255 154 2 12 0 204 255 154 2 12 0 206 255 154 2 12 0 222 255 154 2 12 0 224 255 154 2 12 0 226 255 154 2 12 0 228 255 154 2 12 1 14 255 154 2 12 1 16 255 154 2 12 1 18 255 154 2 12 1 20 255 154 2 12 1 36 255 113 2 12 1 38 255 113 2 12 1 42 255 215 2 12 1 44 255 215 2 12 1 46 255 215 2 12 1 48 255 215 2 12 1 50 255 215 2 12 1 52 255 215 2 12 1 54 255 133 2 12 1 56 255 133 2 12 1 58 255 133 2 12 1 71 255 154 2 12 1 102 255 174 2 12 1 109 255 174 2 12 1 113 255 113 2 12 1 114 255 133 2 12 1 115 255 154 2 12 1 117 255 133 2 12 1 120 255 133 2 12 1 133 255 215 2 12 1 157 255 113 2 12 1 159 255 154 2 12 1 166 255 113 2 12 1 184 255 154 2 12 1 187 255 154 2 12 1 188 255 113 2 12 1 190 255 174 2 12 1 193 255 92 2 12 1 196 255 113 2 12 1 220 255 154 2 12 1 225 255 133 2 12 1 228 255 154 2 12 1 250 255 133 2 12 1 252 255 133 2 12 1 254 255 133 2 12 2 0 255 133 2 12 2 84 255 133 2 12 2 95 255 154 2 12 2 97 255 215 2 12 2 108 255 154 2 12 2 124 255 92 2 12 2 126 255 154 2 12 2 128 255 133 2 12 2 130 255 133 2 12 2 132 255 154 2 12 2 134 255 154 2 12 2 136 255 154 2 12 2 138 255 154 2 12 2 140 255 154 2 12 2 169 255 113 2 12 2 170 255 154 2 12 2 177 255 154 2 12 2 179 255 154 2 12 2 181 255 113 2 12 2 182 255 154 2 12 2 183 255 133 2 12 2 185 255 133 2 12 2 189 255 113 2 12 2 190 255 154 2 12 2 191 255 92 2 12 2 192 255 133 2 12 2 193 255 92 2 12 2 194 255 133 2 12 2 197 255 133 2 12 2 199 255 133 2 12 2 212 255 92 2 12 2 213 255 133 2 12 2 239 255 154 2 12 2 241 255 154 2 12 2 243 255 154 2 12 2 253 255 92 2 12 2 254 255 133 2 12 3 13 255 133 2 12 3 14 255 154 2 12 3 15 255 133 2 12 3 16 255 154 2 12 3 21 255 154 2 12 3 23 255 113 2 12 3 24 255 154 2 12 3 73 255 154 2 12 3 75 255 154 2 12 3 77 255 154 2 12 3 79 255 154 2 12 3 81 255 154 2 12 3 83 255 154 2 12 3 85 255 154 2 12 3 87 255 154 2 12 3 89 255 154 2 12 3 91 255 154 2 12 3 93 255 154 2 12 3 95 255 154 2 12 3 97 255 215 2 12 3 99 255 215 2 12 3 101 255 215 2 12 3 103 255 215 2 12 3 105 255 215 2 12 3 107 255 215 2 12 3 109 255 215 2 12 3 111 255 133 2 12 3 113 255 133 2 12 3 115 255 133 2 12 3 143 255 113 2 33 1 113 255 215 2 33 1 114 255 236 2 33 1 120 255 236 2 33 2 84 255 236 2 83 0 15 255 195 2 83 0 17 255 195 2 83 2 8 255 195 2 83 2 12 255 195 2 84 0 15 255 133 2 84 0 17 255 133 2 84 1 86 255 133 2 84 1 95 255 133 2 84 1 98 255 133 2 84 1 102 255 215 2 84 1 105 255 133 2 84 1 109 255 215 2 84 1 115 255 195 2 84 1 118 255 236 2 84 1 121 255 154 2 84 1 122 255 174 2 84 1 123 255 195 2 84 1 124 255 195 2 84 1 125 255 195 2 84 1 126 255 154 2 84 1 129 255 195 2 84 1 130 255 174 2 84 1 132 255 195 2 84 1 134 255 195 2 84 1 135 255 195 2 84 1 137 255 195 2 84 1 140 255 154 2 84 1 142 255 154 2 84 1 143 255 154 2 84 1 144 255 154 2 84 1 146 255 195 2 84 1 147 255 154 2 84 1 149 255 195 2 84 1 150 255 195 2 84 1 152 255 195 2 84 1 153 255 154 2 84 1 154 255 195 2 84 1 155 255 195 2 84 2 8 255 133 2 84 2 12 255 133 2 84 2 33 255 236 2 88 0 5 255 113 2 88 0 10 255 113 2 88 0 38 255 215 2 88 0 42 255 215 2 88 0 45 1 10 2 88 0 50 255 215 2 88 0 52 255 215 2 88 0 55 255 113 2 88 0 57 255 174 2 88 0 58 255 174 2 88 0 60 255 133 2 88 0 137 255 215 2 88 0 148 255 215 2 88 0 149 255 215 2 88 0 150 255 215 2 88 0 151 255 215 2 88 0 152 255 215 2 88 0 154 255 215 2 88 0 159 255 133 2 88 0 200 255 215 2 88 0 202 255 215 2 88 0 204 255 215 2 88 0 206 255 215 2 88 0 222 255 215 2 88 0 224 255 215 2 88 0 226 255 215 2 88 0 228 255 215 2 88 1 14 255 215 2 88 1 16 255 215 2 88 1 18 255 215 2 88 1 20 255 215 2 88 1 36 255 113 2 88 1 38 255 113 2 88 1 54 255 174 2 88 1 56 255 133 2 88 1 58 255 133 2 88 1 71 255 215 2 88 1 250 255 174 2 88 1 252 255 174 2 88 1 254 255 174 2 88 2 0 255 133 2 88 2 7 255 113 2 88 2 11 255 113 2 88 2 95 255 215 2 88 3 73 255 215 2 88 3 75 255 215 2 88 3 77 255 215 2 88 3 79 255 215 2 88 3 81 255 215 2 88 3 83 255 215 2 88 3 85 255 215 2 88 3 87 255 215 2 88 3 89 255 215 2 88 3 91 255 215 2 88 3 93 255 215 2 88 3 95 255 215 2 88 3 111 255 133 2 88 3 113 255 133 2 88 3 115 255 133 2 88 3 143 255 113 2 89 0 5 255 236 2 89 0 10 255 236 2 89 2 7 255 236 2 89 2 11 255 236 2 90 0 15 255 174 2 90 0 17 255 174 2 90 1 86 255 215 2 90 1 95 255 215 2 90 1 98 255 215 2 90 1 100 255 236 2 90 1 105 255 215 2 90 1 112 255 236 2 90 1 113 255 195 2 90 1 114 255 236 2 90 1 116 255 215 2 90 1 117 255 236 2 90 1 120 255 236 2 90 1 136 255 236 2 90 2 8 255 174 2 90 2 12 255 174 2 90 2 84 255 236 2 96 0 73 0 82 2 96 0 87 0 82 2 96 0 89 0 102 2 96 0 90 0 102 2 96 0 91 0 102 2 96 0 92 0 102 2 96 0 191 0 102 2 96 1 37 0 82 2 96 1 39 0 82 2 96 1 55 0 102 2 96 1 251 0 102 2 96 1 253 0 102 2 96 2 52 0 82 2 96 2 53 0 82 2 96 2 93 0 82 2 96 2 94 0 82 2 96 3 112 0 102 2 96 3 141 0 82 2 96 3 144 0 82 2 98 0 73 0 102 2 98 0 87 0 102 2 98 0 89 0 102 2 98 0 90 0 102 2 98 0 91 0 102 2 98 0 92 0 102 2 98 0 191 0 102 2 98 1 37 0 102 2 98 1 39 0 102 2 98 1 55 0 102 2 98 1 251 0 102 2 98 1 253 0 102 2 98 2 52 0 102 2 98 2 53 0 102 2 98 2 93 0 102 2 98 2 94 0 102 2 98 3 112 0 102 2 98 3 141 0 102 2 98 3 144 0 102 2 106 0 5 255 236 2 106 0 10 255 236 2 106 2 7 255 236 2 106 2 11 255 236 2 108 0 15 255 174 2 108 0 17 255 174 2 108 1 157 255 236 2 108 1 164 255 215 2 108 1 166 255 236 2 108 1 168 255 215 2 108 1 170 255 215 2 108 1 174 255 215 2 108 1 176 255 215 2 108 1 177 255 236 2 108 1 181 255 215 2 108 1 188 255 195 2 108 1 189 255 215 2 108 1 191 255 215 2 108 1 193 255 215 2 108 1 196 255 236 2 108 1 199 255 236 2 108 1 206 255 236 2 108 1 213 255 236 2 108 1 242 255 236 2 108 2 8 255 174 2 108 2 12 255 174 2 108 2 114 255 215 2 108 2 115 255 236 2 108 2 122 255 236 2 108 2 124 255 215 2 108 2 128 255 236 2 108 2 130 255 236 2 108 2 159 255 215 2 108 2 161 255 236 2 108 2 169 255 236 2 108 2 181 255 195 2 108 2 183 255 236 2 108 2 185 255 236 2 108 2 187 255 215 2 108 2 189 255 236 2 108 2 191 255 215 2 108 2 193 255 215 2 108 2 202 255 215 2 108 2 206 255 215 2 108 2 207 255 236 2 108 2 212 255 215 2 108 2 217 255 215 2 108 2 219 255 215 2 108 2 221 255 215 2 108 2 229 255 215 2 108 2 231 255 236 2 108 2 245 255 236 2 108 2 247 255 215 2 108 2 249 255 215 2 108 2 251 255 215 2 108 2 253 255 215 2 108 3 5 255 215 2 108 3 7 255 215 2 108 3 13 255 215 2 108 3 15 255 215 2 108 3 17 255 215 2 108 3 18 255 236 2 108 3 23 255 236 2 108 3 27 255 215 2 108 3 28 255 236 2 109 0 15 255 174 2 109 0 17 255 174 2 109 1 206 255 215 2 109 1 213 255 215 2 109 1 242 255 215 2 109 2 8 255 174 2 109 2 12 255 174 2 109 2 115 255 215 2 109 2 207 255 215 2 109 3 18 255 215 2 109 3 28 255 215 2 110 0 5 255 174 2 110 0 10 255 174 2 110 1 157 255 215 2 110 1 166 255 215 2 110 1 188 255 174 2 110 1 193 255 174 2 110 1 196 255 215 2 110 1 220 255 215 2 110 1 228 255 215 2 110 2 7 255 174 2 110 2 11 255 174 2 110 2 124 255 174 2 110 2 128 255 195 2 110 2 130 255 195 2 110 2 169 255 215 2 110 2 170 255 215 2 110 2 181 255 174 2 110 2 182 255 215 2 110 2 183 255 195 2 110 2 185 255 195 2 110 2 189 255 215 2 110 2 190 255 215 2 110 2 191 255 174 2 110 2 193 255 174 2 110 2 212 255 174 2 110 2 253 255 174 2 110 3 13 255 154 2 110 3 15 255 154 2 110 3 23 255 215 2 110 3 24 255 215 2 111 0 5 255 133 2 111 0 10 255 133 2 111 1 208 255 215 2 111 1 220 255 154 2 111 1 221 255 195 2 111 1 223 255 215 2 111 1 225 255 174 2 111 1 228 255 154 2 111 1 246 255 195 2 111 2 7 255 133 2 111 2 11 255 133 2 111 2 109 255 215 2 111 2 129 255 215 2 111 2 131 255 215 2 111 2 139 255 215 2 111 2 160 255 215 2 111 2 170 255 154 2 111 2 182 255 154 2 111 2 184 255 195 2 111 2 186 255 195 2 111 2 188 255 215 2 111 2 190 255 154 2 111 2 192 255 174 2 111 2 194 255 174 2 111 2 198 255 215 2 111 2 200 255 215 2 111 2 203 255 215 2 111 2 213 255 174 2 111 2 230 255 215 2 111 2 234 255 215 2 111 2 248 255 195 2 111 2 250 255 195 2 111 2 252 255 195 2 111 2 254 255 174 2 111 3 6 255 215 2 111 3 8 255 215 2 111 3 14 255 154 2 111 3 16 255 154 2 111 3 24 255 154 2 112 1 159 255 215 2 112 1 184 255 215 2 112 1 187 255 215 2 112 1 190 255 215 2 112 1 225 255 215 2 112 2 108 255 215 2 112 2 126 255 215 2 112 2 132 255 215 2 112 2 134 255 215 2 112 2 136 255 215 2 112 2 138 255 215 2 112 2 140 255 215 2 112 2 177 255 215 2 112 2 179 255 215 2 112 2 192 255 215 2 112 2 194 255 215 2 112 2 197 255 215 2 112 2 199 255 215 2 112 2 213 255 215 2 112 2 239 255 215 2 112 2 241 255 215 2 112 2 243 255 215 2 112 2 254 255 215 2 112 3 9 255 215 2 112 3 11 255 215 2 112 3 14 255 215 2 112 3 16 255 215 2 112 3 21 255 215 2 114 0 5 255 113 2 114 0 10 255 113 2 114 1 157 255 154 2 114 1 166 255 154 2 114 1 188 255 113 2 114 1 190 255 215 2 114 1 193 255 154 2 114 1 196 255 154 2 114 1 220 255 215 2 114 1 225 255 215 2 114 1 228 255 215 2 114 2 7 255 113 2 114 2 11 255 113 2 114 2 110 255 215 2 114 2 124 255 154 2 114 2 128 255 174 2 114 2 130 255 174 2 114 2 151 255 215 2 114 2 155 255 215 2 114 2 167 255 215 2 114 2 169 255 154 2 114 2 170 255 215 2 114 2 181 255 113 2 114 2 182 255 215 2 114 2 183 255 133 2 114 2 185 255 133 2 114 2 189 255 154 2 114 2 190 255 215 2 114 2 191 255 154 2 114 2 192 255 215 2 114 2 193 255 154 2 114 2 194 255 215 2 114 2 197 255 154 2 114 2 199 255 154 2 114 2 212 255 154 2 114 2 213 255 215 2 114 2 225 255 215 2 114 2 227 255 215 2 114 2 253 255 154 2 114 2 254 255 215 2 114 3 3 255 215 2 114 3 13 255 113 2 114 3 14 255 215 2 114 3 15 255 113 2 114 3 16 255 215 2 114 3 23 255 154 2 114 3 24 255 215 2 115 0 5 255 113 2 115 0 10 255 113 2 115 1 207 255 215 2 115 1 216 255 215 2 115 1 219 255 215 2 115 1 220 255 154 2 115 1 221 255 195 2 115 1 222 255 215 2 115 1 225 255 195 2 115 1 228 255 154 2 115 1 234 255 215 2 115 1 237 255 215 2 115 1 246 255 195 2 115 2 7 255 113 2 115 2 11 255 113 2 115 2 106 255 215 2 115 2 109 255 215 2 115 2 125 255 236 2 115 2 127 255 215 2 115 2 129 255 215 2 115 2 131 255 215 2 115 2 133 255 215 2 115 2 135 255 215 2 115 2 137 255 215 2 115 2 139 255 215 2 115 2 141 255 215 2 115 2 170 255 154 2 115 2 178 255 215 2 115 2 180 255 215 2 115 2 182 255 154 2 115 2 184 255 215 2 115 2 186 255 215 2 115 2 190 255 154 2 115 2 192 255 195 2 115 2 194 255 195 2 115 2 198 255 215 2 115 2 200 255 215 2 115 2 213 255 195 2 115 2 224 255 215 2 115 2 240 255 215 2 115 2 242 255 215 2 115 2 244 255 215 2 115 2 248 255 195 2 115 2 250 255 195 2 115 2 252 255 195 2 115 2 254 255 195 2 115 3 10 255 215 2 115 3 12 255 215 2 115 3 14 255 133 2 115 3 16 255 133 2 115 3 22 255 215 2 115 3 24 255 154 2 115 3 26 255 215 2 116 0 5 255 113 2 116 0 10 255 113 2 116 1 157 255 154 2 116 1 166 255 154 2 116 1 188 255 113 2 116 1 190 255 215 2 116 1 193 255 154 2 116 1 196 255 154 2 116 1 220 255 215 2 116 1 225 255 215 2 116 1 228 255 215 2 116 2 7 255 113 2 116 2 11 255 113 2 116 2 110 255 215 2 116 2 124 255 154 2 116 2 128 255 174 2 116 2 130 255 174 2 116 2 151 255 215 2 116 2 155 255 215 2 116 2 167 255 215 2 116 2 169 255 154 2 116 2 170 255 215 2 116 2 181 255 113 2 116 2 182 255 215 2 116 2 183 255 133 2 116 2 185 255 133 2 116 2 189 255 154 2 116 2 190 255 215 2 116 2 191 255 154 2 116 2 192 255 215 2 116 2 193 255 154 2 116 2 194 255 215 2 116 2 197 255 154 2 116 2 199 255 154 2 116 2 212 255 154 2 116 2 213 255 215 2 116 2 225 255 215 2 116 2 227 255 215 2 116 2 253 255 154 2 116 2 254 255 215 2 116 3 3 255 215 2 116 3 13 255 113 2 116 3 14 255 215 2 116 3 15 255 113 2 116 3 16 255 215 2 116 3 23 255 154 2 116 3 24 255 215 2 117 0 5 255 113 2 117 0 10 255 113 2 117 1 207 255 215 2 117 1 216 255 215 2 117 1 219 255 215 2 117 1 220 255 154 2 117 1 221 255 195 2 117 1 222 255 215 2 117 1 225 255 195 2 117 1 228 255 154 2 117 1 234 255 215 2 117 1 237 255 215 2 117 1 246 255 195 2 117 2 7 255 113 2 117 2 11 255 113 2 117 2 106 255 215 2 117 2 109 255 215 2 117 2 125 255 236 2 117 2 127 255 215 2 117 2 129 255 215 2 117 2 131 255 215 2 117 2 133 255 215 2 117 2 135 255 215 2 117 2 137 255 215 2 117 2 139 255 215 2 117 2 141 255 215 2 117 2 170 255 154 2 117 2 178 255 215 2 117 2 180 255 215 2 117 2 182 255 154 2 117 2 184 255 215 2 117 2 186 255 215 2 117 2 190 255 154 2 117 2 192 255 195 2 117 2 194 255 195 2 117 2 198 255 215 2 117 2 200 255 215 2 117 2 213 255 195 2 117 2 224 255 215 2 117 2 240 255 215 2 117 2 242 255 215 2 117 2 244 255 215 2 117 2 248 255 195 2 117 2 250 255 195 2 117 2 252 255 195 2 117 2 254 255 195 2 117 3 10 255 215 2 117 3 12 255 215 2 117 3 14 255 133 2 117 3 16 255 133 2 117 3 22 255 215 2 117 3 24 255 154 2 117 3 26 255 215 2 118 3 13 255 236 2 118 3 15 255 236 2 120 3 13 255 236 2 120 3 15 255 236 2 122 0 15 255 174 2 122 0 17 255 174 2 122 2 8 255 174 2 122 2 12 255 174 2 122 2 128 255 236 2 122 2 130 255 236 2 122 2 183 255 236 2 122 2 185 255 236 2 122 3 13 255 215 2 122 3 15 255 215 2 124 0 15 255 113 2 124 0 17 255 113 2 124 1 164 255 195 2 124 1 170 255 174 2 124 1 174 255 195 2 124 1 181 255 195 2 124 1 206 255 215 2 124 1 213 255 215 2 124 1 242 255 215 2 124 2 8 255 113 2 124 2 12 255 113 2 124 2 114 255 174 2 124 2 115 255 215 2 124 2 206 255 195 2 124 2 207 255 215 2 124 2 217 255 174 2 124 2 219 255 174 2 124 2 221 255 174 2 124 3 9 255 174 2 124 3 11 255 174 2 124 3 17 255 195 2 124 3 18 255 215 2 124 3 27 255 195 2 124 3 28 255 215 2 125 0 5 255 236 2 125 0 10 255 236 2 125 1 208 255 215 2 125 1 220 255 236 2 125 1 221 255 236 2 125 1 223 255 215 2 125 1 225 255 236 2 125 1 228 255 236 2 125 1 246 255 236 2 125 2 7 255 236 2 125 2 11 255 236 2 125 2 160 255 215 2 125 2 170 255 236 2 125 2 182 255 236 2 125 2 188 255 215 2 125 2 190 255 236 2 125 2 192 255 236 2 125 2 194 255 236 2 125 2 203 255 215 2 125 2 213 255 236 2 125 2 230 255 215 2 125 2 248 255 236 2 125 2 250 255 236 2 125 2 252 255 236 2 125 2 254 255 236 2 125 3 6 255 215 2 125 3 8 255 215 2 125 3 14 255 236 2 125 3 16 255 236 2 125 3 24 255 236 2 126 0 15 255 174 2 126 0 17 255 174 2 126 1 157 255 236 2 126 1 164 255 215 2 126 1 166 255 236 2 126 1 168 255 215 2 126 1 170 255 215 2 126 1 174 255 215 2 126 1 176 255 215 2 126 1 177 255 236 2 126 1 181 255 215 2 126 1 188 255 195 2 126 1 189 255 215 2 126 1 191 255 215 2 126 1 193 255 215 2 126 1 196 255 236 2 126 1 199 255 236 2 126 1 206 255 236 2 126 1 213 255 236 2 126 1 242 255 236 2 126 2 8 255 174 2 126 2 12 255 174 2 126 2 114 255 215 2 126 2 115 255 236 2 126 2 122 255 236 2 126 2 124 255 215 2 126 2 128 255 236 2 126 2 130 255 236 2 126 2 159 255 215 2 126 2 161 255 236 2 126 2 169 255 236 2 126 2 181 255 195 2 126 2 183 255 236 2 126 2 185 255 236 2 126 2 187 255 215 2 126 2 189 255 236 2 126 2 191 255 215 2 126 2 193 255 215 2 126 2 202 255 215 2 126 2 206 255 215 2 126 2 207 255 236 2 126 2 212 255 215 2 126 2 217 255 215 2 126 2 219 255 215 2 126 2 221 255 215 2 126 2 229 255 215 2 126 2 231 255 236 2 126 2 245 255 236 2 126 2 247 255 215 2 126 2 249 255 215 2 126 2 251 255 215 2 126 2 253 255 215 2 126 3 5 255 215 2 126 3 7 255 215 2 126 3 13 255 215 2 126 3 15 255 215 2 126 3 17 255 215 2 126 3 18 255 236 2 126 3 23 255 236 2 126 3 27 255 215 2 126 3 28 255 236 2 127 0 5 255 236 2 127 0 10 255 236 2 127 1 208 255 215 2 127 1 220 255 236 2 127 1 221 255 236 2 127 1 223 255 215 2 127 1 225 255 236 2 127 1 228 255 236 2 127 1 246 255 236 2 127 2 7 255 236 2 127 2 11 255 236 2 127 2 160 255 215 2 127 2 170 255 236 2 127 2 182 255 236 2 127 2 188 255 215 2 127 2 190 255 236 2 127 2 192 255 236 2 127 2 194 255 236 2 127 2 203 255 215 2 127 2 213 255 236 2 127 2 230 255 215 2 127 2 248 255 236 2 127 2 250 255 236 2 127 2 252 255 236 2 127 2 254 255 236 2 127 3 6 255 215 2 127 3 8 255 215 2 127 3 14 255 236 2 127 3 16 255 236 2 127 3 24 255 236 2 128 0 15 255 133 2 128 0 17 255 133 2 128 1 159 255 236 2 128 1 164 255 154 2 128 1 170 255 113 2 128 1 174 255 154 2 128 1 181 255 154 2 128 1 184 255 236 2 128 1 187 255 236 2 128 1 190 255 195 2 128 1 201 255 236 2 128 1 206 255 174 2 128 1 207 255 215 2 128 1 213 255 174 2 128 1 216 255 215 2 128 1 219 255 215 2 128 1 222 255 215 2 128 1 225 255 215 2 128 1 234 255 215 2 128 1 235 0 102 2 128 1 237 255 215 2 128 1 238 255 236 2 128 1 242 255 174 2 128 1 244 0 102 2 128 2 8 255 133 2 128 2 12 255 133 2 128 2 106 255 215 2 128 2 108 255 236 2 128 2 114 255 113 2 128 2 115 255 174 2 128 2 126 255 236 2 128 2 127 255 215 2 128 2 132 255 236 2 128 2 133 255 215 2 128 2 134 255 236 2 128 2 135 255 215 2 128 2 136 255 236 2 128 2 137 255 215 2 128 2 138 255 236 2 128 2 140 255 236 2 128 2 141 255 215 2 128 2 152 0 102 2 128 2 168 0 102 2 128 2 177 255 236 2 128 2 178 255 215 2 128 2 179 255 236 2 128 2 180 255 215 2 128 2 192 255 215 2 128 2 194 255 215 2 128 2 197 255 215 2 128 2 198 255 195 2 128 2 199 255 215 2 128 2 200 255 195 2 128 2 206 255 154 2 128 2 207 255 174 2 128 2 213 255 215 2 128 2 217 255 113 2 128 2 219 255 113 2 128 2 221 255 113 2 128 2 224 255 215 2 128 2 239 255 236 2 128 2 240 255 215 2 128 2 241 255 236 2 128 2 242 255 215 2 128 2 243 255 236 2 128 2 244 255 215 2 128 2 254 255 215 2 128 3 9 255 113 2 128 3 10 255 215 2 128 3 11 255 113 2 128 3 12 255 215 2 128 3 17 255 154 2 128 3 18 255 174 2 128 3 21 255 236 2 128 3 22 255 215 2 128 3 26 255 215 2 128 3 27 255 154 2 128 3 28 255 174 2 129 0 15 255 174 2 129 0 17 255 174 2 129 1 206 255 215 2 129 1 213 255 215 2 129 1 242 255 215 2 129 2 8 255 174 2 129 2 12 255 174 2 129 2 115 255 215 2 129 2 207 255 215 2 129 3 18 255 215 2 129 3 28 255 215 2 130 0 15 255 133 2 130 0 17 255 133 2 130 1 159 255 236 2 130 1 164 255 154 2 130 1 170 255 113 2 130 1 174 255 154 2 130 1 181 255 154 2 130 1 184 255 236 2 130 1 187 255 236 2 130 1 190 255 195 2 130 1 201 255 236 2 130 1 206 255 174 2 130 1 207 255 215 2 130 1 213 255 174 2 130 1 216 255 215 2 130 1 219 255 215 2 130 1 222 255 215 2 130 1 225 255 215 2 130 1 234 255 215 2 130 1 235 0 102 2 130 1 237 255 215 2 130 1 238 255 236 2 130 1 242 255 174 2 130 1 244 0 102 2 130 2 8 255 133 2 130 2 12 255 133 2 130 2 106 255 215 2 130 2 108 255 236 2 130 2 114 255 113 2 130 2 115 255 174 2 130 2 126 255 236 2 130 2 127 255 215 2 130 2 132 255 236 2 130 2 133 255 215 2 130 2 134 255 236 2 130 2 135 255 215 2 130 2 136 255 236 2 130 2 137 255 215 2 130 2 138 255 236 2 130 2 140 255 236 2 130 2 141 255 215 2 130 2 152 0 102 2 130 2 168 0 102 2 130 2 177 255 236 2 130 2 178 255 215 2 130 2 179 255 236 2 130 2 180 255 215 2 130 2 192 255 215 2 130 2 194 255 215 2 130 2 197 255 215 2 130 2 198 255 195 2 130 2 199 255 215 2 130 2 200 255 195 2 130 2 206 255 154 2 130 2 207 255 174 2 130 2 213 255 215 2 130 2 217 255 113 2 130 2 219 255 113 2 130 2 221 255 113 2 130 2 224 255 215 2 130 2 239 255 236 2 130 2 240 255 215 2 130 2 241 255 236 2 130 2 242 255 215 2 130 2 243 255 236 2 130 2 244 255 215 2 130 2 254 255 215 2 130 3 9 255 113 2 130 3 10 255 215 2 130 3 11 255 113 2 130 3 12 255 215 2 130 3 17 255 154 2 130 3 18 255 174 2 130 3 21 255 236 2 130 3 22 255 215 2 130 3 26 255 215 2 130 3 27 255 154 2 130 3 28 255 174 2 131 0 15 255 174 2 131 0 17 255 174 2 131 1 206 255 215 2 131 1 213 255 215 2 131 1 242 255 215 2 131 2 8 255 174 2 131 2 12 255 174 2 131 2 115 255 215 2 131 2 207 255 215 2 131 3 18 255 215 2 131 3 28 255 215 2 132 0 15 255 174 2 132 0 17 255 174 2 132 1 206 255 215 2 132 1 213 255 215 2 132 1 242 255 215 2 132 2 8 255 174 2 132 2 12 255 174 2 132 2 115 255 215 2 132 2 207 255 215 2 132 3 18 255 215 2 132 3 28 255 215 2 133 0 15 255 174 2 133 0 17 255 174 2 133 1 206 255 215 2 133 1 213 255 215 2 133 1 242 255 215 2 133 2 8 255 174 2 133 2 12 255 174 2 133 2 115 255 215 2 133 2 207 255 215 2 133 3 18 255 215 2 133 3 28 255 215 2 134 0 15 255 174 2 134 0 17 255 174 2 134 1 157 255 236 2 134 1 164 255 215 2 134 1 166 255 236 2 134 1 168 255 215 2 134 1 170 255 215 2 134 1 174 255 215 2 134 1 176 255 215 2 134 1 177 255 236 2 134 1 181 255 215 2 134 1 188 255 195 2 134 1 189 255 215 2 134 1 191 255 215 2 134 1 193 255 215 2 134 1 196 255 236 2 134 1 199 255 236 2 134 1 206 255 236 2 134 1 213 255 236 2 134 1 242 255 236 2 134 2 8 255 174 2 134 2 12 255 174 2 134 2 114 255 215 2 134 2 115 255 236 2 134 2 122 255 236 2 134 2 124 255 215 2 134 2 128 255 236 2 134 2 130 255 236 2 134 2 159 255 215 2 134 2 161 255 236 2 134 2 169 255 236 2 134 2 181 255 195 2 134 2 183 255 236 2 134 2 185 255 236 2 134 2 187 255 215 2 134 2 189 255 236 2 134 2 191 255 215 2 134 2 193 255 215 2 134 2 202 255 215 2 134 2 206 255 215 2 134 2 207 255 236 2 134 2 212 255 215 2 134 2 217 255 215 2 134 2 219 255 215 2 134 2 221 255 215 2 134 2 229 255 215 2 134 2 231 255 236 2 134 2 245 255 236 2 134 2 247 255 215 2 134 2 249 255 215 2 134 2 251 255 215 2 134 2 253 255 215 2 134 3 5 255 215 2 134 3 7 255 215 2 134 3 13 255 215 2 134 3 15 255 215 2 134 3 17 255 215 2 134 3 18 255 236 2 134 3 23 255 236 2 134 3 27 255 215 2 134 3 28 255 236 2 135 0 5 255 236 2 135 0 10 255 236 2 135 1 208 255 215 2 135 1 220 255 236 2 135 1 221 255 236 2 135 1 223 255 215 2 135 1 225 255 236 2 135 1 228 255 236 2 135 1 246 255 236 2 135 2 7 255 236 2 135 2 11 255 236 2 135 2 160 255 215 2 135 2 170 255 236 2 135 2 182 255 236 2 135 2 188 255 215 2 135 2 190 255 236 2 135 2 192 255 236 2 135 2 194 255 236 2 135 2 203 255 215 2 135 2 213 255 236 2 135 2 230 255 215 2 135 2 248 255 236 2 135 2 250 255 236 2 135 2 252 255 236 2 135 2 254 255 236 2 135 3 6 255 215 2 135 3 8 255 215 2 135 3 14 255 236 2 135 3 16 255 236 2 135 3 24 255 236 2 136 0 15 255 174 2 136 0 17 255 174 2 136 1 157 255 236 2 136 1 164 255 215 2 136 1 166 255 236 2 136 1 168 255 215 2 136 1 170 255 215 2 136 1 174 255 215 2 136 1 176 255 215 2 136 1 177 255 236 2 136 1 181 255 215 2 136 1 188 255 195 2 136 1 189 255 215 2 136 1 191 255 215 2 136 1 193 255 215 2 136 1 196 255 236 2 136 1 199 255 236 2 136 1 206 255 236 2 136 1 213 255 236 2 136 1 242 255 236 2 136 2 8 255 174 2 136 2 12 255 174 2 136 2 114 255 215 2 136 2 115 255 236 2 136 2 122 255 236 2 136 2 124 255 215 2 136 2 128 255 236 2 136 2 130 255 236 2 136 2 159 255 215 2 136 2 161 255 236 2 136 2 169 255 236 2 136 2 181 255 195 2 136 2 183 255 236 2 136 2 185 255 236 2 136 2 187 255 215 2 136 2 189 255 236 2 136 2 191 255 215 2 136 2 193 255 215 2 136 2 202 255 215 2 136 2 206 255 215 2 136 2 207 255 236 2 136 2 212 255 215 2 136 2 217 255 215 2 136 2 219 255 215 2 136 2 221 255 215 2 136 2 229 255 215 2 136 2 231 255 236 2 136 2 245 255 236 2 136 2 247 255 215 2 136 2 249 255 215 2 136 2 251 255 215 2 136 2 253 255 215 2 136 3 5 255 215 2 136 3 7 255 215 2 136 3 13 255 215 2 136 3 15 255 215 2 136 3 17 255 215 2 136 3 18 255 236 2 136 3 23 255 236 2 136 3 27 255 215 2 136 3 28 255 236 2 137 0 5 255 236 2 137 0 10 255 236 2 137 1 208 255 215 2 137 1 220 255 236 2 137 1 221 255 236 2 137 1 223 255 215 2 137 1 225 255 236 2 137 1 228 255 236 2 137 1 246 255 236 2 137 2 7 255 236 2 137 2 11 255 236 2 137 2 160 255 215 2 137 2 170 255 236 2 137 2 182 255 236 2 137 2 188 255 215 2 137 2 190 255 236 2 137 2 192 255 236 2 137 2 194 255 236 2 137 2 203 255 215 2 137 2 213 255 236 2 137 2 230 255 215 2 137 2 248 255 236 2 137 2 250 255 236 2 137 2 252 255 236 2 137 2 254 255 236 2 137 3 6 255 215 2 137 3 8 255 215 2 137 3 14 255 236 2 137 3 16 255 236 2 137 3 24 255 236 2 138 0 15 255 174 2 138 0 17 255 174 2 138 1 157 255 236 2 138 1 164 255 215 2 138 1 166 255 236 2 138 1 168 255 215 2 138 1 170 255 215 2 138 1 174 255 215 2 138 1 176 255 215 2 138 1 177 255 236 2 138 1 181 255 215 2 138 1 188 255 195 2 138 1 189 255 215 2 138 1 191 255 215 2 138 1 193 255 215 2 138 1 196 255 236 2 138 1 199 255 236 2 138 1 206 255 236 2 138 1 213 255 236 2 138 1 242 255 236 2 138 2 8 255 174 2 138 2 12 255 174 2 138 2 114 255 215 2 138 2 115 255 236 2 138 2 122 255 236 2 138 2 124 255 215 2 138 2 128 255 236 2 138 2 130 255 236 2 138 2 159 255 215 2 138 2 161 255 236 2 138 2 169 255 236 2 138 2 181 255 195 2 138 2 183 255 236 2 138 2 185 255 236 2 138 2 187 255 215 2 138 2 189 255 236 2 138 2 191 255 215 2 138 2 193 255 215 2 138 2 202 255 215 2 138 2 206 255 215 2 138 2 207 255 236 2 138 2 212 255 215 2 138 2 217 255 215 2 138 2 219 255 215 2 138 2 221 255 215 2 138 2 229 255 215 2 138 2 231 255 236 2 138 2 245 255 236 2 138 2 247 255 215 2 138 2 249 255 215 2 138 2 251 255 215 2 138 2 253 255 215 2 138 3 5 255 215 2 138 3 7 255 215 2 138 3 13 255 215 2 138 3 15 255 215 2 138 3 17 255 215 2 138 3 18 255 236 2 138 3 23 255 236 2 138 3 27 255 215 2 138 3 28 255 236 2 139 0 15 255 174 2 139 0 17 255 174 2 139 1 206 255 215 2 139 1 213 255 215 2 139 1 242 255 215 2 139 2 8 255 174 2 139 2 12 255 174 2 139 2 115 255 215 2 139 2 207 255 215 2 139 3 18 255 215 2 139 3 28 255 215 2 140 1 159 255 215 2 140 1 184 255 215 2 140 1 187 255 215 2 140 1 190 255 215 2 140 1 225 255 215 2 140 2 108 255 215 2 140 2 126 255 215 2 140 2 132 255 215 2 140 2 134 255 215 2 140 2 136 255 215 2 140 2 138 255 215 2 140 2 140 255 215 2 140 2 177 255 215 2 140 2 179 255 215 2 140 2 192 255 215 2 140 2 194 255 215 2 140 2 197 255 215 2 140 2 199 255 215 2 140 2 213 255 215 2 140 2 239 255 215 2 140 2 241 255 215 2 140 2 243 255 215 2 140 2 254 255 215 2 140 3 9 255 215 2 140 3 11 255 215 2 140 3 14 255 215 2 140 3 16 255 215 2 140 3 21 255 215 2 149 1 163 0 225 2 149 2 234 0 41 2 149 3 14 255 215 2 149 3 16 255 215 2 150 0 5 255 236 2 150 0 10 255 236 2 150 2 7 255 236 2 150 2 11 255 236 2 151 0 5 255 174 2 151 0 10 255 174 2 151 1 157 255 215 2 151 1 166 255 215 2 151 1 188 255 174 2 151 1 193 255 174 2 151 1 196 255 215 2 151 1 220 255 215 2 151 1 228 255 215 2 151 2 7 255 174 2 151 2 11 255 174 2 151 2 124 255 174 2 151 2 128 255 195 2 151 2 130 255 195 2 151 2 169 255 215 2 151 2 170 255 215 2 151 2 181 255 174 2 151 2 182 255 215 2 151 2 183 255 195 2 151 2 185 255 195 2 151 2 189 255 215 2 151 2 190 255 215 2 151 2 191 255 174 2 151 2 193 255 174 2 151 2 212 255 174 2 151 2 253 255 174 2 151 3 13 255 154 2 151 3 15 255 154 2 151 3 23 255 215 2 151 3 24 255 215 2 152 0 5 255 133 2 152 0 10 255 133 2 152 1 208 255 215 2 152 1 220 255 154 2 152 1 221 255 195 2 152 1 223 255 215 2 152 1 225 255 174 2 152 1 228 255 154 2 152 1 246 255 195 2 152 2 7 255 133 2 152 2 11 255 133 2 152 2 109 255 215 2 152 2 129 255 215 2 152 2 131 255 215 2 152 2 139 255 215 2 152 2 160 255 215 2 152 2 170 255 154 2 152 2 182 255 154 2 152 2 184 255 195 2 152 2 186 255 195 2 152 2 188 255 215 2 152 2 190 255 154 2 152 2 192 255 174 2 152 2 194 255 174 2 152 2 198 255 215 2 152 2 200 255 215 2 152 2 203 255 215 2 152 2 213 255 174 2 152 2 230 255 215 2 152 2 234 255 215 2 152 2 248 255 195 2 152 2 250 255 195 2 152 2 252 255 195 2 152 2 254 255 174 2 152 3 6 255 215 2 152 3 8 255 215 2 152 3 14 255 154 2 152 3 16 255 154 2 152 3 24 255 154 2 153 0 15 254 246 2 153 0 17 254 246 2 153 1 164 255 133 2 153 1 170 255 154 2 153 1 174 255 133 2 153 1 176 255 215 2 153 1 181 255 133 2 153 1 191 255 215 2 153 1 206 255 154 2 153 1 213 255 154 2 153 1 242 255 154 2 153 2 8 254 246 2 153 2 12 254 246 2 153 2 114 255 154 2 153 2 115 255 154 2 153 2 118 255 236 2 153 2 159 255 215 2 153 2 187 255 215 2 153 2 202 255 215 2 153 2 206 255 133 2 153 2 207 255 154 2 153 2 217 255 154 2 153 2 219 255 154 2 153 2 221 255 154 2 153 2 229 255 215 2 153 3 5 255 215 2 153 3 7 255 215 2 153 3 9 255 174 2 153 3 11 255 174 2 153 3 17 255 133 2 153 3 18 255 154 2 153 3 27 255 133 2 153 3 28 255 154 2 154 0 5 255 236 2 154 0 10 255 236 2 154 1 208 255 215 2 154 1 220 255 236 2 154 1 221 255 236 2 154 1 223 255 215 2 154 1 225 255 236 2 154 1 228 255 236 2 154 1 246 255 236 2 154 2 7 255 236 2 154 2 11 255 236 2 154 2 160 255 215 2 154 2 170 255 236 2 154 2 182 255 236 2 154 2 188 255 215 2 154 2 190 255 236 2 154 2 192 255 236 2 154 2 194 255 236 2 154 2 203 255 215 2 154 2 213 255 236 2 154 2 230 255 215 2 154 2 248 255 236 2 154 2 250 255 236 2 154 2 252 255 236 2 154 2 254 255 236 2 154 3 6 255 215 2 154 3 8 255 215 2 154 3 14 255 236 2 154 3 16 255 236 2 154 3 24 255 236 2 155 0 15 255 154 2 155 0 16 255 215 2 155 0 17 255 154 2 155 1 157 0 41 2 155 1 159 255 215 2 155 1 164 255 174 2 155 1 166 0 41 2 155 1 170 255 133 2 155 1 174 255 174 2 155 1 181 255 174 2 155 1 184 255 215 2 155 1 187 255 215 2 155 1 188 0 41 2 155 1 190 255 195 2 155 1 196 0 41 2 155 1 204 255 195 2 155 1 205 255 195 2 155 1 206 255 154 2 155 1 207 255 174 2 155 1 208 255 215 2 155 1 209 255 215 2 155 1 210 255 195 2 155 1 211 255 195 2 155 1 212 255 195 2 155 1 213 255 154 2 155 1 214 255 195 2 155 1 215 255 195 2 155 1 216 255 174 2 155 1 217 255 195 2 155 1 218 255 195 2 155 1 219 255 174 2 155 1 222 255 174 2 155 1 223 255 215 2 155 1 224 255 195 2 155 1 225 255 154 2 155 1 226 255 195 2 155 1 227 255 195 2 155 1 229 255 195 2 155 1 230 255 195 2 155 1 231 255 215 2 155 1 232 255 195 2 155 1 234 255 174 2 155 1 235 0 41 2 155 1 236 255 195 2 155 1 237 255 174 2 155 1 238 255 195 2 155 1 242 255 154 2 155 1 243 255 195 2 155 1 244 0 41 2 155 1 245 255 195 2 155 1 247 255 195 2 155 1 249 255 195 2 155 2 2 255 215 2 155 2 3 255 215 2 155 2 4 255 215 2 155 2 8 255 154 2 155 2 12 255 154 2 155 2 106 255 174 2 155 2 107 255 195 2 155 2 108 255 215 2 155 2 113 255 195 2 155 2 114 255 133 2 155 2 115 255 154 2 155 2 117 255 195 2 155 2 119 255 215 2 155 2 121 255 195 2 155 2 125 255 195 2 155 2 126 255 215 2 155 2 127 255 174 2 155 2 132 255 215 2 155 2 133 255 174 2 155 2 134 255 215 2 155 2 135 255 174 2 155 2 136 255 215 2 155 2 137 255 174 2 155 2 138 255 215 2 155 2 140 255 215 2 155 2 141 255 174 2 155 2 150 255 195 2 155 2 152 0 41 2 155 2 154 255 195 2 155 2 158 255 195 2 155 2 160 255 215 2 155 2 162 255 215 2 155 2 164 255 195 2 155 2 166 255 195 2 155 2 168 0 41 2 155 2 169 0 41 2 155 2 172 255 195 2 155 2 174 255 195 2 155 2 176 255 195 2 155 2 177 255 215 2 155 2 178 255 174 2 155 2 179 255 215 2 155 2 180 255 174 2 155 2 181 0 41 2 155 2 188 255 215 2 155 2 189 0 41 2 155 2 192 255 154 2 155 2 194 255 154 2 155 2 196 255 195 2 155 2 197 255 215 2 155 2 198 255 195 2 155 2 199 255 215 2 155 2 200 255 195 2 155 2 203 255 215 2 155 2 205 255 195 2 155 2 206 255 174 2 155 2 207 255 154 2 155 2 209 255 195 2 155 2 211 255 195 2 155 2 213 255 154 2 155 2 215 255 195 2 155 2 217 255 133 2 155 2 219 255 133 2 155 2 221 255 133 2 155 2 224 255 174 2 155 2 230 255 215 2 155 2 232 255 215 2 155 2 236 255 195 2 155 2 238 255 195 2 155 2 239 255 215 2 155 2 240 255 174 2 155 2 241 255 215 2 155 2 242 255 174 2 155 2 243 255 215 2 155 2 244 255 174 2 155 2 246 255 215 2 155 2 254 255 154 2 155 3 0 255 195 2 155 3 2 255 195 2 155 3 6 255 215 2 155 3 8 255 215 2 155 3 9 255 154 2 155 3 10 255 174 2 155 3 11 255 154 2 155 3 12 255 174 2 155 3 14 255 215 2 155 3 16 255 215 2 155 3 17 255 174 2 155 3 18 255 154 2 155 3 20 255 195 2 155 3 21 255 215 2 155 3 22 255 174 2 155 3 23 0 41 2 155 3 26 255 174 2 155 3 27 255 174 2 155 3 28 255 154 2 156 0 15 255 195 2 156 0 17 255 195 2 156 1 206 255 195 2 156 1 207 255 215 2 156 1 213 255 195 2 156 1 216 255 215 2 156 1 219 255 215 2 156 1 222 255 215 2 156 1 234 255 215 2 156 1 237 255 215 2 156 1 242 255 195 2 156 2 8 255 195 2 156 2 12 255 195 2 156 2 106 255 215 2 156 2 115 255 195 2 156 2 127 255 215 2 156 2 133 255 215 2 156 2 135 255 215 2 156 2 137 255 215 2 156 2 141 255 215 2 156 2 178 255 215 2 156 2 180 255 215 2 156 2 207 255 195 2 156 2 224 255 215 2 156 2 240 255 215 2 156 2 242 255 215 2 156 2 244 255 215 2 156 3 10 255 215 2 156 3 12 255 215 2 156 3 18 255 195 2 156 3 22 255 215 2 156 3 26 255 215 2 156 3 28 255 195 2 157 0 5 255 195 2 157 0 10 255 195 2 157 1 157 255 195 2 157 1 163 0 102 2 157 1 166 255 195 2 157 1 188 255 195 2 157 1 193 255 174 2 157 1 196 255 195 2 157 1 220 255 215 2 157 1 225 255 215 2 157 1 228 255 215 2 157 2 7 255 195 2 157 2 11 255 195 2 157 2 124 255 174 2 157 2 128 255 195 2 157 2 130 255 195 2 157 2 169 255 195 2 157 2 170 255 215 2 157 2 181 255 195 2 157 2 182 255 215 2 157 2 183 255 215 2 157 2 185 255 215 2 157 2 189 255 195 2 157 2 190 255 215 2 157 2 191 255 174 2 157 2 192 255 215 2 157 2 193 255 174 2 157 2 194 255 215 2 157 2 212 255 174 2 157 2 213 255 215 2 157 2 253 255 174 2 157 2 254 255 215 2 157 3 13 255 215 2 157 3 14 255 195 2 157 3 15 255 215 2 157 3 16 255 195 2 157 3 23 255 195 2 157 3 24 255 215 2 158 0 5 255 195 2 158 0 10 255 195 2 158 2 7 255 195 2 158 2 11 255 195 2 158 3 14 255 215 2 158 3 16 255 215 2 159 1 159 255 215 2 159 1 163 0 225 2 159 1 184 255 215 2 159 1 187 255 215 2 159 1 190 255 195 2 159 1 220 255 215 2 159 1 225 255 174 2 159 1 228 255 215 2 159 2 108 255 215 2 159 2 123 0 61 2 159 2 125 255 236 2 159 2 126 255 215 2 159 2 132 255 215 2 159 2 134 255 215 2 159 2 136 255 215 2 159 2 138 255 215 2 159 2 140 255 215 2 159 2 170 255 215 2 159 2 177 255 215 2 159 2 179 255 215 2 159 2 182 255 215 2 159 2 190 255 215 2 159 2 192 255 174 2 159 2 194 255 174 2 159 2 197 255 195 2 159 2 198 255 215 2 159 2 199 255 195 2 159 2 200 255 215 2 159 2 213 255 174 2 159 2 239 255 215 2 159 2 241 255 215 2 159 2 243 255 215 2 159 2 254 255 174 2 159 3 14 255 215 2 159 3 16 255 215 2 159 3 21 255 215 2 159 3 24 255 215 2 160 1 207 255 236 2 160 1 216 255 236 2 160 1 219 255 236 2 160 1 222 255 236 2 160 1 225 255 236 2 160 1 234 255 236 2 160 1 237 255 236 2 160 2 106 255 236 2 160 2 127 255 236 2 160 2 133 255 236 2 160 2 135 255 236 2 160 2 137 255 236 2 160 2 141 255 236 2 160 2 178 255 236 2 160 2 180 255 236 2 160 2 192 255 236 2 160 2 194 255 236 2 160 2 213 255 236 2 160 2 224 255 236 2 160 2 240 255 236 2 160 2 242 255 236 2 160 2 244 255 236 2 160 2 254 255 236 2 160 3 10 255 236 2 160 3 12 255 236 2 160 3 14 255 215 2 160 3 16 255 215 2 160 3 22 255 236 2 160 3 26 255 236 2 161 0 15 255 174 2 161 0 17 255 174 2 161 2 8 255 174 2 161 2 12 255 174 2 161 2 128 255 236 2 161 2 130 255 236 2 161 2 183 255 236 2 161 2 185 255 236 2 161 3 13 255 215 2 161 3 15 255 215 2 162 1 233 0 41 2 163 1 159 255 215 2 163 1 163 0 225 2 163 1 184 255 215 2 163 1 187 255 215 2 163 1 190 255 195 2 163 1 220 255 215 2 163 1 225 255 174 2 163 1 228 255 215 2 163 2 108 255 215 2 163 2 123 0 61 2 163 2 125 255 236 2 163 2 126 255 215 2 163 2 132 255 215 2 163 2 134 255 215 2 163 2 136 255 215 2 163 2 138 255 215 2 163 2 140 255 215 2 163 2 170 255 215 2 163 2 177 255 215 2 163 2 179 255 215 2 163 2 182 255 215 2 163 2 190 255 215 2 163 2 192 255 174 2 163 2 194 255 174 2 163 2 197 255 195 2 163 2 198 255 215 2 163 2 199 255 195 2 163 2 200 255 215 2 163 2 213 255 174 2 163 2 239 255 215 2 163 2 241 255 215 2 163 2 243 255 215 2 163 2 254 255 174 2 163 3 14 255 215 2 163 3 16 255 215 2 163 3 21 255 215 2 163 3 24 255 215 2 164 1 207 255 236 2 164 1 216 255 236 2 164 1 219 255 236 2 164 1 222 255 236 2 164 1 225 255 236 2 164 1 234 255 236 2 164 1 237 255 236 2 164 2 106 255 236 2 164 2 127 255 236 2 164 2 133 255 236 2 164 2 135 255 236 2 164 2 137 255 236 2 164 2 141 255 236 2 164 2 178 255 236 2 164 2 180 255 236 2 164 2 192 255 236 2 164 2 194 255 236 2 164 2 213 255 236 2 164 2 224 255 236 2 164 2 240 255 236 2 164 2 242 255 236 2 164 2 244 255 236 2 164 2 254 255 236 2 164 3 10 255 236 2 164 3 12 255 236 2 164 3 14 255 215 2 164 3 16 255 215 2 164 3 22 255 236 2 164 3 26 255 236 2 165 1 159 255 215 2 165 1 184 255 215 2 165 1 187 255 215 2 165 1 190 255 215 2 165 1 193 255 215 2 165 1 225 255 215 2 165 2 108 255 215 2 165 2 124 255 215 2 165 2 126 255 215 2 165 2 132 255 215 2 165 2 134 255 215 2 165 2 136 255 215 2 165 2 138 255 215 2 165 2 140 255 215 2 165 2 177 255 215 2 165 2 179 255 215 2 165 2 191 255 215 2 165 2 192 255 215 2 165 2 193 255 215 2 165 2 194 255 215 2 165 2 197 255 154 2 165 2 199 255 154 2 165 2 212 255 215 2 165 2 213 255 215 2 165 2 239 255 215 2 165 2 241 255 215 2 165 2 243 255 215 2 165 2 253 255 215 2 165 2 254 255 215 2 165 3 9 255 215 2 165 3 11 255 215 2 165 3 14 255 215 2 165 3 16 255 215 2 165 3 21 255 215 2 165 3 25 255 236 2 166 1 207 255 215 2 166 1 216 255 215 2 166 1 219 255 215 2 166 1 222 255 215 2 166 1 225 255 215 2 166 1 234 255 215 2 166 1 237 255 215 2 166 2 106 255 215 2 166 2 127 255 215 2 166 2 133 255 215 2 166 2 135 255 215 2 166 2 137 255 215 2 166 2 141 255 215 2 166 2 178 255 215 2 166 2 180 255 215 2 166 2 192 255 215 2 166 2 194 255 215 2 166 2 198 255 215 2 166 2 200 255 215 2 166 2 213 255 215 2 166 2 224 255 215 2 166 2 240 255 215 2 166 2 242 255 215 2 166 2 244 255 215 2 166 2 254 255 215 2 166 3 10 255 215 2 166 3 12 255 215 2 166 3 22 255 215 2 166 3 26 255 215 2 167 1 159 255 215 2 167 1 184 255 215 2 167 1 187 255 215 2 167 1 190 255 215 2 167 1 193 255 215 2 167 1 225 255 215 2 167 2 108 255 215 2 167 2 124 255 215 2 167 2 126 255 215 2 167 2 132 255 215 2 167 2 134 255 215 2 167 2 136 255 215 2 167 2 138 255 215 2 167 2 140 255 215 2 167 2 177 255 215 2 167 2 179 255 215 2 167 2 191 255 215 2 167 2 192 255 215 2 167 2 193 255 215 2 167 2 194 255 215 2 167 2 197 255 154 2 167 2 199 255 154 2 167 2 212 255 215 2 167 2 213 255 215 2 167 2 239 255 215 2 167 2 241 255 215 2 167 2 243 255 215 2 167 2 253 255 215 2 167 2 254 255 215 2 167 3 9 255 215 2 167 3 11 255 215 2 167 3 14 255 215 2 167 3 16 255 215 2 167 3 21 255 215 2 167 3 25 255 236 2 168 1 207 255 215 2 168 1 216 255 215 2 168 1 219 255 215 2 168 1 222 255 215 2 168 1 225 255 215 2 168 1 234 255 215 2 168 1 237 255 215 2 168 2 106 255 215 2 168 2 127 255 215 2 168 2 133 255 215 2 168 2 135 255 215 2 168 2 137 255 215 2 168 2 141 255 215 2 168 2 178 255 215 2 168 2 180 255 215 2 168 2 192 255 215 2 168 2 194 255 215 2 168 2 198 255 215 2 168 2 200 255 215 2 168 2 213 255 215 2 168 2 224 255 215 2 168 2 240 255 215 2 168 2 242 255 215 2 168 2 244 255 215 2 168 2 254 255 215 2 168 3 10 255 215 2 168 3 12 255 215 2 168 3 22 255 215 2 168 3 26 255 215 2 169 1 159 255 215 2 169 1 184 255 215 2 169 1 187 255 215 2 169 1 190 255 215 2 169 1 193 255 215 2 169 1 225 255 215 2 169 2 108 255 215 2 169 2 124 255 215 2 169 2 126 255 215 2 169 2 132 255 215 2 169 2 134 255 215 2 169 2 136 255 215 2 169 2 138 255 215 2 169 2 140 255 215 2 169 2 177 255 215 2 169 2 179 255 215 2 169 2 191 255 215 2 169 2 192 255 215 2 169 2 193 255 215 2 169 2 194 255 215 2 169 2 197 255 154 2 169 2 199 255 154 2 169 2 212 255 215 2 169 2 213 255 215 2 169 2 239 255 215 2 169 2 241 255 215 2 169 2 243 255 215 2 169 2 253 255 215 2 169 2 254 255 215 2 169 3 9 255 215 2 169 3 11 255 215 2 169 3 14 255 215 2 169 3 16 255 215 2 169 3 21 255 215 2 169 3 25 255 236 2 170 1 207 255 215 2 170 1 216 255 215 2 170 1 219 255 215 2 170 1 222 255 215 2 170 1 225 255 215 2 170 1 234 255 215 2 170 1 237 255 215 2 170 2 106 255 215 2 170 2 127 255 215 2 170 2 133 255 215 2 170 2 135 255 215 2 170 2 137 255 215 2 170 2 141 255 215 2 170 2 178 255 215 2 170 2 180 255 215 2 170 2 192 255 215 2 170 2 194 255 215 2 170 2 198 255 215 2 170 2 200 255 215 2 170 2 213 255 215 2 170 2 224 255 215 2 170 2 240 255 215 2 170 2 242 255 215 2 170 2 244 255 215 2 170 2 254 255 215 2 170 3 10 255 215 2 170 3 12 255 215 2 170 3 22 255 215 2 170 3 26 255 215 2 171 1 163 0 225 2 171 2 234 0 41 2 171 3 14 255 215 2 171 3 16 255 215 2 172 0 5 255 236 2 172 0 10 255 236 2 172 2 7 255 236 2 172 2 11 255 236 2 173 0 15 255 154 2 173 0 16 255 215 2 173 0 17 255 154 2 173 1 157 0 41 2 173 1 159 255 215 2 173 1 164 255 174 2 173 1 166 0 41 2 173 1 170 255 133 2 173 1 174 255 174 2 173 1 181 255 174 2 173 1 184 255 215 2 173 1 187 255 215 2 173 1 188 0 41 2 173 1 190 255 195 2 173 1 196 0 41 2 173 1 204 255 195 2 173 1 205 255 195 2 173 1 206 255 154 2 173 1 207 255 174 2 173 1 208 255 215 2 173 1 209 255 215 2 173 1 210 255 195 2 173 1 211 255 195 2 173 1 212 255 195 2 173 1 213 255 154 2 173 1 214 255 195 2 173 1 215 255 195 2 173 1 216 255 174 2 173 1 217 255 195 2 173 1 218 255 195 2 173 1 219 255 174 2 173 1 222 255 174 2 173 1 223 255 215 2 173 1 224 255 195 2 173 1 225 255 154 2 173 1 226 255 195 2 173 1 227 255 195 2 173 1 229 255 195 2 173 1 230 255 195 2 173 1 231 255 215 2 173 1 232 255 195 2 173 1 234 255 174 2 173 1 235 0 41 2 173 1 236 255 195 2 173 1 237 255 174 2 173 1 238 255 195 2 173 1 242 255 154 2 173 1 243 255 195 2 173 1 244 0 41 2 173 1 245 255 195 2 173 1 247 255 195 2 173 1 249 255 195 2 173 2 2 255 215 2 173 2 3 255 215 2 173 2 4 255 215 2 173 2 8 255 154 2 173 2 12 255 154 2 173 2 106 255 174 2 173 2 107 255 195 2 173 2 108 255 215 2 173 2 113 255 195 2 173 2 114 255 133 2 173 2 115 255 154 2 173 2 117 255 195 2 173 2 119 255 215 2 173 2 121 255 195 2 173 2 125 255 195 2 173 2 126 255 215 2 173 2 127 255 174 2 173 2 132 255 215 2 173 2 133 255 174 2 173 2 134 255 215 2 173 2 135 255 174 2 173 2 136 255 215 2 173 2 137 255 174 2 173 2 138 255 215 2 173 2 140 255 215 2 173 2 141 255 174 2 173 2 150 255 195 2 173 2 152 0 41 2 173 2 154 255 195 2 173 2 158 255 195 2 173 2 160 255 215 2 173 2 162 255 215 2 173 2 164 255 195 2 173 2 166 255 195 2 173 2 168 0 41 2 173 2 169 0 41 2 173 2 172 255 195 2 173 2 174 255 195 2 173 2 176 255 195 2 173 2 177 255 215 2 173 2 178 255 174 2 173 2 179 255 215 2 173 2 180 255 174 2 173 2 181 0 41 2 173 2 188 255 215 2 173 2 189 0 41 2 173 2 192 255 154 2 173 2 194 255 154 2 173 2 196 255 195 2 173 2 197 255 215 2 173 2 198 255 195 2 173 2 199 255 215 2 173 2 200 255 195 2 173 2 203 255 215 2 173 2 205 255 195 2 173 2 206 255 174 2 173 2 207 255 154 2 173 2 209 255 195 2 173 2 211 255 195 2 173 2 213 255 154 2 173 2 215 255 195 2 173 2 217 255 133 2 173 2 219 255 133 2 173 2 221 255 133 2 173 2 224 255 174 2 173 2 230 255 215 2 173 2 232 255 215 2 173 2 236 255 195 2 173 2 238 255 195 2 173 2 239 255 215 2 173 2 240 255 174 2 173 2 241 255 215 2 173 2 242 255 174 2 173 2 243 255 215 2 173 2 244 255 174 2 173 2 246 255 215 2 173 2 254 255 154 2 173 3 0 255 195 2 173 3 2 255 195 2 173 3 6 255 215 2 173 3 8 255 215 2 173 3 9 255 154 2 173 3 10 255 174 2 173 3 11 255 154 2 173 3 12 255 174 2 173 3 14 255 215 2 173 3 16 255 215 2 173 3 17 255 174 2 173 3 18 255 154 2 173 3 20 255 195 2 173 3 21 255 215 2 173 3 22 255 174 2 173 3 23 0 41 2 173 3 26 255 174 2 173 3 27 255 174 2 173 3 28 255 154 2 174 0 15 255 154 2 174 0 16 255 215 2 174 0 17 255 154 2 174 1 206 255 195 2 174 1 207 255 236 2 174 1 213 255 195 2 174 1 216 255 236 2 174 1 219 255 236 2 174 1 222 255 236 2 174 1 234 255 236 2 174 1 237 255 236 2 174 1 242 255 195 2 174 2 2 255 215 2 174 2 3 255 215 2 174 2 4 255 215 2 174 2 8 255 154 2 174 2 12 255 154 2 174 2 106 255 236 2 174 2 115 255 195 2 174 2 127 255 236 2 174 2 133 255 236 2 174 2 135 255 236 2 174 2 137 255 236 2 174 2 141 255 236 2 174 2 178 255 236 2 174 2 180 255 236 2 174 2 207 255 195 2 174 2 224 255 236 2 174 2 240 255 236 2 174 2 242 255 236 2 174 2 244 255 236 2 174 3 10 255 236 2 174 3 12 255 236 2 174 3 18 255 195 2 174 3 22 255 236 2 174 3 26 255 236 2 174 3 28 255 195 2 175 0 5 255 92 2 175 0 10 255 92 2 175 1 157 255 154 2 175 1 163 0 102 2 175 1 166 255 154 2 175 1 188 255 72 2 175 1 193 255 133 2 175 1 196 255 154 2 175 1 220 255 174 2 175 1 225 255 215 2 175 1 228 255 174 2 175 2 7 255 92 2 175 2 11 255 92 2 175 2 124 255 133 2 175 2 128 255 113 2 175 2 130 255 113 2 175 2 169 255 154 2 175 2 170 255 174 2 175 2 181 255 72 2 175 2 182 255 174 2 175 2 183 255 154 2 175 2 185 255 154 2 175 2 189 255 154 2 175 2 190 255 174 2 175 2 191 255 133 2 175 2 192 255 215 2 175 2 193 255 133 2 175 2 194 255 215 2 175 2 197 255 195 2 175 2 198 255 215 2 175 2 199 255 195 2 175 2 200 255 215 2 175 2 212 255 133 2 175 2 213 255 215 2 175 2 253 255 133 2 175 2 254 255 215 2 175 3 13 255 72 2 175 3 14 255 174 2 175 3 15 255 72 2 175 3 16 255 174 2 175 3 23 255 154 2 175 3 24 255 174 2 176 0 5 255 113 2 176 0 10 255 113 2 176 1 220 255 154 2 176 1 225 255 215 2 176 1 228 255 154 2 176 2 7 255 113 2 176 2 11 255 113 2 176 2 109 255 215 2 176 2 129 255 215 2 176 2 131 255 215 2 176 2 139 255 215 2 176 2 170 255 154 2 176 2 182 255 154 2 176 2 184 255 215 2 176 2 186 255 215 2 176 2 190 255 154 2 176 2 192 255 215 2 176 2 194 255 215 2 176 2 198 255 215 2 176 2 200 255 215 2 176 2 213 255 215 2 176 2 254 255 215 2 176 3 14 255 113 2 176 3 16 255 113 2 176 3 24 255 154 2 177 1 157 255 215 2 177 1 166 255 215 2 177 1 188 255 195 2 177 1 196 255 215 2 177 2 128 255 236 2 177 2 130 255 236 2 177 2 169 255 215 2 177 2 181 255 195 2 177 2 183 255 236 2 177 2 185 255 236 2 177 2 189 255 215 2 177 3 13 255 215 2 177 3 15 255 215 2 177 3 23 255 215 2 178 0 5 255 236 2 178 0 10 255 236 2 178 1 208 255 215 2 178 1 220 255 236 2 178 1 221 255 236 2 178 1 223 255 215 2 178 1 225 255 236 2 178 1 228 255 236 2 178 1 246 255 236 2 178 2 7 255 236 2 178 2 11 255 236 2 178 2 160 255 215 2 178 2 170 255 236 2 178 2 182 255 236 2 178 2 188 255 215 2 178 2 190 255 236 2 178 2 192 255 236 2 178 2 194 255 236 2 178 2 203 255 215 2 178 2 213 255 236 2 178 2 230 255 215 2 178 2 248 255 236 2 178 2 250 255 236 2 178 2 252 255 236 2 178 2 254 255 236 2 178 3 6 255 215 2 178 3 8 255 215 2 178 3 14 255 236 2 178 3 16 255 236 2 178 3 24 255 236 2 179 1 159 255 215 2 179 1 184 255 215 2 179 1 187 255 215 2 179 1 190 255 215 2 179 1 225 255 215 2 179 2 108 255 215 2 179 2 126 255 215 2 179 2 132 255 215 2 179 2 134 255 215 2 179 2 136 255 215 2 179 2 138 255 215 2 179 2 140 255 215 2 179 2 177 255 215 2 179 2 179 255 215 2 179 2 192 255 215 2 179 2 194 255 215 2 179 2 197 255 215 2 179 2 199 255 215 2 179 2 213 255 215 2 179 2 239 255 215 2 179 2 241 255 215 2 179 2 243 255 215 2 179 2 254 255 215 2 179 3 9 255 215 2 179 3 11 255 215 2 179 3 14 255 215 2 179 3 16 255 215 2 179 3 21 255 215 2 181 0 15 255 133 2 181 0 16 255 174 2 181 0 17 255 133 2 181 1 159 255 215 2 181 1 164 255 154 2 181 1 170 255 113 2 181 1 174 255 154 2 181 1 181 255 154 2 181 1 184 255 215 2 181 1 187 255 215 2 181 1 188 0 41 2 181 1 190 255 174 2 181 1 204 255 154 2 181 1 205 255 154 2 181 1 206 255 133 2 181 1 207 255 113 2 181 1 208 255 215 2 181 1 209 255 215 2 181 1 210 255 154 2 181 1 211 255 154 2 181 1 212 255 154 2 181 1 213 255 133 2 181 1 214 255 154 2 181 1 215 255 154 2 181 1 216 255 113 2 181 1 217 255 154 2 181 1 218 255 154 2 181 1 219 255 113 2 181 1 220 255 174 2 181 1 221 255 174 2 181 1 222 255 113 2 181 1 223 255 215 2 181 1 224 255 154 2 181 1 225 255 154 2 181 1 226 255 154 2 181 1 227 255 154 2 181 1 228 255 174 2 181 1 229 255 154 2 181 1 230 255 154 2 181 1 231 255 215 2 181 1 232 255 154 2 181 1 233 255 195 2 181 1 234 255 113 2 181 1 236 255 154 2 181 1 237 255 113 2 181 1 238 255 133 2 181 1 242 255 133 2 181 1 243 255 154 2 181 1 245 255 154 2 181 1 246 255 174 2 181 1 247 255 154 2 181 1 249 255 154 2 181 2 2 255 174 2 181 2 3 255 174 2 181 2 4 255 174 2 181 2 8 255 133 2 181 2 12 255 133 2 181 2 106 255 113 2 181 2 107 255 154 2 181 2 108 255 215 2 181 2 109 255 215 2 181 2 113 255 154 2 181 2 114 255 113 2 181 2 115 255 133 2 181 2 117 255 154 2 181 2 119 255 154 2 181 2 121 255 154 2 181 2 125 255 154 2 181 2 126 255 215 2 181 2 127 255 113 2 181 2 129 255 215 2 181 2 131 255 215 2 181 2 132 255 215 2 181 2 133 255 113 2 181 2 134 255 215 2 181 2 135 255 113 2 181 2 136 255 215 2 181 2 137 255 113 2 181 2 138 255 215 2 181 2 139 255 215 2 181 2 140 255 215 2 181 2 141 255 113 2 181 2 150 255 154 2 181 2 154 255 154 2 181 2 158 255 154 2 181 2 160 255 215 2 181 2 162 255 215 2 181 2 164 255 154 2 181 2 166 255 154 2 181 2 170 255 174 2 181 2 172 255 154 2 181 2 174 255 154 2 181 2 176 255 154 2 181 2 177 255 215 2 181 2 178 255 113 2 181 2 179 255 215 2 181 2 180 255 113 2 181 2 181 0 41 2 181 2 182 255 174 2 181 2 184 255 174 2 181 2 186 255 174 2 181 2 188 255 215 2 181 2 190 255 174 2 181 2 192 255 154 2 181 2 194 255 154 2 181 2 196 255 154 2 181 2 197 255 154 2 181 2 198 255 113 2 181 2 199 255 154 2 181 2 200 255 113 2 181 2 203 255 215 2 181 2 205 255 154 2 181 2 206 255 154 2 181 2 207 255 133 2 181 2 209 255 154 2 181 2 211 255 154 2 181 2 213 255 154 2 181 2 215 255 154 2 181 2 217 255 113 2 181 2 219 255 113 2 181 2 221 255 113 2 181 2 224 255 113 2 181 2 230 255 215 2 181 2 232 255 215 2 181 2 234 255 195 2 181 2 236 255 154 2 181 2 238 255 154 2 181 2 239 255 215 2 181 2 240 255 113 2 181 2 241 255 215 2 181 2 242 255 113 2 181 2 243 255 215 2 181 2 244 255 113 2 181 2 246 255 215 2 181 2 248 255 174 2 181 2 250 255 174 2 181 2 252 255 174 2 181 2 254 255 154 2 181 3 0 255 154 2 181 3 2 255 154 2 181 3 6 255 215 2 181 3 8 255 215 2 181 3 9 255 113 2 181 3 10 255 113 2 181 3 11 255 113 2 181 3 12 255 113 2 181 3 14 255 154 2 181 3 16 255 154 2 181 3 17 255 154 2 181 3 18 255 133 2 181 3 20 255 154 2 181 3 21 255 215 2 181 3 22 255 113 2 181 3 24 255 174 2 181 3 26 255 113 2 181 3 27 255 154 2 181 3 28 255 133 2 182 0 15 255 154 2 182 0 16 255 215 2 182 0 17 255 154 2 182 1 206 255 195 2 182 1 207 255 236 2 182 1 213 255 195 2 182 1 216 255 236 2 182 1 219 255 236 2 182 1 222 255 236 2 182 1 234 255 236 2 182 1 237 255 236 2 182 1 242 255 195 2 182 2 2 255 215 2 182 2 3 255 215 2 182 2 4 255 215 2 182 2 8 255 154 2 182 2 12 255 154 2 182 2 106 255 236 2 182 2 115 255 195 2 182 2 127 255 236 2 182 2 133 255 236 2 182 2 135 255 236 2 182 2 137 255 236 2 182 2 141 255 236 2 182 2 178 255 236 2 182 2 180 255 236 2 182 2 207 255 195 2 182 2 224 255 236 2 182 2 240 255 236 2 182 2 242 255 236 2 182 2 244 255 236 2 182 3 10 255 236 2 182 3 12 255 236 2 182 3 18 255 195 2 182 3 22 255 236 2 182 3 26 255 236 2 182 3 28 255 195 2 183 0 15 255 133 2 183 0 17 255 133 2 183 1 159 255 215 2 183 1 164 255 174 2 183 1 170 255 133 2 183 1 174 255 174 2 183 1 181 255 174 2 183 1 184 255 215 2 183 1 187 255 215 2 183 1 190 255 195 2 183 1 202 255 174 2 183 1 204 255 195 2 183 1 205 255 195 2 183 1 206 255 154 2 183 1 207 255 154 2 183 1 210 255 195 2 183 1 211 255 195 2 183 1 212 255 195 2 183 1 213 255 154 2 183 1 214 255 195 2 183 1 215 255 195 2 183 1 216 255 154 2 183 1 217 255 195 2 183 1 218 255 195 2 183 1 219 255 154 2 183 1 222 255 154 2 183 1 224 255 195 2 183 1 225 255 174 2 183 1 226 255 195 2 183 1 227 255 195 2 183 1 229 255 195 2 183 1 230 255 195 2 183 1 232 255 195 2 183 1 233 255 215 2 183 1 234 255 154 2 183 1 235 0 41 2 183 1 236 255 195 2 183 1 237 255 154 2 183 1 238 255 174 2 183 1 242 255 154 2 183 1 243 255 195 2 183 1 244 0 41 2 183 1 245 255 195 2 183 1 247 255 195 2 183 1 249 255 195 2 183 2 8 255 133 2 183 2 12 255 133 2 183 2 106 255 154 2 183 2 107 255 195 2 183 2 108 255 215 2 183 2 113 255 195 2 183 2 114 255 133 2 183 2 115 255 154 2 183 2 117 255 195 2 183 2 119 255 215 2 183 2 121 255 195 2 183 2 125 255 215 2 183 2 126 255 215 2 183 2 127 255 154 2 183 2 132 255 215 2 183 2 133 255 154 2 183 2 134 255 215 2 183 2 135 255 154 2 183 2 136 255 215 2 183 2 137 255 154 2 183 2 138 255 215 2 183 2 140 255 215 2 183 2 141 255 154 2 183 2 150 255 195 2 183 2 152 0 41 2 183 2 154 255 195 2 183 2 158 255 195 2 183 2 164 255 195 2 183 2 166 255 195 2 183 2 168 0 41 2 183 2 172 255 195 2 183 2 174 255 195 2 183 2 176 255 195 2 183 2 177 255 215 2 183 2 178 255 154 2 183 2 179 255 215 2 183 2 180 255 154 2 183 2 192 255 174 2 183 2 194 255 174 2 183 2 196 255 195 2 183 2 198 255 174 2 183 2 200 255 174 2 183 2 205 255 195 2 183 2 206 255 174 2 183 2 207 255 154 2 183 2 209 255 195 2 183 2 211 255 195 2 183 2 213 255 174 2 183 2 215 255 195 2 183 2 217 255 133 2 183 2 218 255 174 2 183 2 219 255 133 2 183 2 220 255 174 2 183 2 221 255 133 2 183 2 222 255 174 2 183 2 224 255 154 2 183 2 225 255 236 2 183 2 226 255 174 2 183 2 227 255 236 2 183 2 228 255 174 2 183 2 236 255 195 2 183 2 238 255 195 2 183 2 239 255 215 2 183 2 240 255 154 2 183 2 241 255 215 2 183 2 242 255 154 2 183 2 243 255 215 2 183 2 244 255 154 2 183 2 254 255 174 2 183 3 0 255 195 2 183 3 2 255 195 2 183 3 9 255 174 2 183 3 10 255 154 2 183 3 11 255 174 2 183 3 12 255 154 2 183 3 14 255 215 2 183 3 16 255 215 2 183 3 17 255 174 2 183 3 18 255 154 2 183 3 20 255 195 2 183 3 21 255 215 2 183 3 22 255 154 2 183 3 25 255 236 2 183 3 26 255 154 2 183 3 27 255 174 2 183 3 28 255 154 2 184 0 15 255 174 2 184 0 17 255 174 2 184 1 206 255 236 2 184 1 213 255 236 2 184 1 242 255 236 2 184 2 8 255 174 2 184 2 12 255 174 2 184 2 115 255 236 2 184 2 207 255 236 2 184 3 18 255 236 2 184 3 28 255 236 2 185 0 15 255 133 2 185 0 17 255 133 2 185 1 159 255 215 2 185 1 164 255 174 2 185 1 170 255 133 2 185 1 174 255 174 2 185 1 181 255 174 2 185 1 184 255 215 2 185 1 187 255 215 2 185 1 190 255 195 2 185 1 202 255 174 2 185 1 204 255 195 2 185 1 205 255 195 2 185 1 206 255 154 2 185 1 207 255 154 2 185 1 210 255 195 2 185 1 211 255 195 2 185 1 212 255 195 2 185 1 213 255 154 2 185 1 214 255 195 2 185 1 215 255 195 2 185 1 216 255 154 2 185 1 217 255 195 2 185 1 218 255 195 2 185 1 219 255 154 2 185 1 222 255 154 2 185 1 224 255 195 2 185 1 225 255 174 2 185 1 226 255 195 2 185 1 227 255 195 2 185 1 229 255 195 2 185 1 230 255 195 2 185 1 232 255 195 2 185 1 233 255 215 2 185 1 234 255 154 2 185 1 235 0 41 2 185 1 236 255 195 2 185 1 237 255 154 2 185 1 238 255 174 2 185 1 242 255 154 2 185 1 243 255 195 2 185 1 244 0 41 2 185 1 245 255 195 2 185 1 247 255 195 2 185 1 249 255 195 2 185 2 8 255 133 2 185 2 12 255 133 2 185 2 106 255 154 2 185 2 107 255 195 2 185 2 108 255 215 2 185 2 113 255 195 2 185 2 114 255 133 2 185 2 115 255 154 2 185 2 117 255 195 2 185 2 119 255 215 2 185 2 121 255 195 2 185 2 125 255 215 2 185 2 126 255 215 2 185 2 127 255 154 2 185 2 132 255 215 2 185 2 133 255 154 2 185 2 134 255 215 2 185 2 135 255 154 2 185 2 136 255 215 2 185 2 137 255 154 2 185 2 138 255 215 2 185 2 140 255 215 2 185 2 141 255 154 2 185 2 150 255 195 2 185 2 152 0 41 2 185 2 154 255 195 2 185 2 158 255 195 2 185 2 164 255 195 2 185 2 166 255 195 2 185 2 168 0 41 2 185 2 172 255 195 2 185 2 174 255 195 2 185 2 176 255 195 2 185 2 177 255 215 2 185 2 178 255 154 2 185 2 179 255 215 2 185 2 180 255 154 2 185 2 192 255 174 2 185 2 194 255 174 2 185 2 196 255 195 2 185 2 198 255 174 2 185 2 200 255 174 2 185 2 205 255 195 2 185 2 206 255 174 2 185 2 207 255 154 2 185 2 209 255 195 2 185 2 211 255 195 2 185 2 213 255 174 2 185 2 215 255 195 2 185 2 217 255 133 2 185 2 218 255 174 2 185 2 219 255 133 2 185 2 220 255 174 2 185 2 221 255 133 2 185 2 222 255 174 2 185 2 224 255 154 2 185 2 225 255 236 2 185 2 226 255 174 2 185 2 227 255 236 2 185 2 228 255 174 2 185 2 236 255 195 2 185 2 238 255 195 2 185 2 239 255 215 2 185 2 240 255 154 2 185 2 241 255 215 2 185 2 242 255 154 2 185 2 243 255 215 2 185 2 244 255 154 2 185 2 254 255 174 2 185 3 0 255 195 2 185 3 2 255 195 2 185 3 9 255 174 2 185 3 10 255 154 2 185 3 11 255 174 2 185 3 12 255 154 2 185 3 14 255 215 2 185 3 16 255 215 2 185 3 17 255 174 2 185 3 18 255 154 2 185 3 20 255 195 2 185 3 21 255 215 2 185 3 22 255 154 2 185 3 25 255 236 2 185 3 26 255 154 2 185 3 27 255 174 2 185 3 28 255 154 2 186 0 15 255 174 2 186 0 17 255 174 2 186 1 206 255 236 2 186 1 213 255 236 2 186 1 242 255 236 2 186 2 8 255 174 2 186 2 12 255 174 2 186 2 115 255 236 2 186 2 207 255 236 2 186 3 18 255 236 2 186 3 28 255 236 2 187 1 159 255 215 2 187 1 163 0 225 2 187 1 184 255 215 2 187 1 187 255 215 2 187 1 190 255 195 2 187 1 220 255 215 2 187 1 225 255 174 2 187 1 228 255 215 2 187 2 108 255 215 2 187 2 123 0 61 2 187 2 125 255 236 2 187 2 126 255 215 2 187 2 132 255 215 2 187 2 134 255 215 2 187 2 136 255 215 2 187 2 138 255 215 2 187 2 140 255 215 2 187 2 170 255 215 2 187 2 177 255 215 2 187 2 179 255 215 2 187 2 182 255 215 2 187 2 190 255 215 2 187 2 192 255 174 2 187 2 194 255 174 2 187 2 197 255 195 2 187 2 198 255 215 2 187 2 199 255 195 2 187 2 200 255 215 2 187 2 213 255 174 2 187 2 239 255 215 2 187 2 241 255 215 2 187 2 243 255 215 2 187 2 254 255 174 2 187 3 14 255 215 2 187 3 16 255 215 2 187 3 21 255 215 2 187 3 24 255 215 2 188 1 207 255 236 2 188 1 216 255 236 2 188 1 219 255 236 2 188 1 222 255 236 2 188 1 225 255 236 2 188 1 234 255 236 2 188 1 237 255 236 2 188 2 106 255 236 2 188 2 127 255 236 2 188 2 133 255 236 2 188 2 135 255 236 2 188 2 137 255 236 2 188 2 141 255 236 2 188 2 178 255 236 2 188 2 180 255 236 2 188 2 192 255 236 2 188 2 194 255 236 2 188 2 213 255 236 2 188 2 224 255 236 2 188 2 240 255 236 2 188 2 242 255 236 2 188 2 244 255 236 2 188 2 254 255 236 2 188 3 10 255 236 2 188 3 12 255 236 2 188 3 14 255 215 2 188 3 16 255 215 2 188 3 22 255 236 2 188 3 26 255 236 2 189 1 163 0 225 2 189 2 234 0 41 2 189 3 14 255 215 2 189 3 16 255 215 2 190 0 5 255 236 2 190 0 10 255 236 2 190 2 7 255 236 2 190 2 11 255 236 2 191 1 163 0 225 2 191 2 234 0 41 2 191 3 14 255 215 2 191 3 16 255 215 2 192 0 5 255 236 2 192 0 10 255 236 2 192 2 7 255 236 2 192 2 11 255 236 2 195 0 5 255 195 2 195 0 10 255 195 2 195 1 157 255 215 2 195 1 166 255 215 2 195 1 188 255 133 2 195 1 193 255 174 2 195 1 196 255 215 2 195 1 220 255 215 2 195 1 221 255 236 2 195 1 225 255 236 2 195 1 228 255 215 2 195 1 246 255 236 2 195 2 7 255 195 2 195 2 11 255 195 2 195 2 124 255 174 2 195 2 128 255 195 2 195 2 130 255 195 2 195 2 169 255 215 2 195 2 170 255 215 2 195 2 181 255 133 2 195 2 182 255 215 2 195 2 183 255 154 2 195 2 185 255 154 2 195 2 189 255 215 2 195 2 190 255 215 2 195 2 191 255 174 2 195 2 192 255 236 2 195 2 193 255 174 2 195 2 194 255 236 2 195 2 212 255 174 2 195 2 213 255 236 2 195 2 248 255 236 2 195 2 250 255 236 2 195 2 252 255 236 2 195 2 253 255 174 2 195 2 254 255 236 2 195 3 13 255 174 2 195 3 14 255 215 2 195 3 15 255 174 2 195 3 16 255 215 2 195 3 23 255 215 2 195 3 24 255 215 2 196 0 5 255 154 2 196 0 10 255 154 2 196 1 220 255 215 2 196 1 221 255 215 2 196 1 228 255 215 2 196 1 246 255 215 2 196 2 7 255 154 2 196 2 11 255 154 2 196 2 170 255 215 2 196 2 182 255 215 2 196 2 184 255 215 2 196 2 186 255 215 2 196 2 190 255 215 2 196 2 248 255 215 2 196 2 250 255 215 2 196 2 252 255 215 2 196 3 14 255 174 2 196 3 16 255 174 2 196 3 24 255 215 2 197 1 188 255 215 2 197 2 128 255 236 2 197 2 130 255 236 2 197 2 181 255 215 2 197 2 183 255 236 2 197 2 185 255 236 2 197 3 13 255 236 2 197 3 15 255 236 2 198 0 5 255 236 2 198 0 10 255 236 2 198 2 7 255 236 2 198 2 11 255 236 2 199 1 188 255 215 2 199 2 128 255 236 2 199 2 130 255 236 2 199 2 181 255 215 2 199 2 183 255 236 2 199 2 185 255 236 2 199 3 13 255 236 2 199 3 15 255 236 2 200 0 5 255 236 2 200 0 10 255 236 2 200 2 7 255 236 2 200 2 11 255 236 2 202 1 159 255 215 2 202 1 184 255 215 2 202 1 187 255 215 2 202 1 190 255 215 2 202 1 193 255 215 2 202 1 225 255 215 2 202 2 108 255 215 2 202 2 124 255 215 2 202 2 126 255 215 2 202 2 132 255 215 2 202 2 134 255 215 2 202 2 136 255 215 2 202 2 138 255 215 2 202 2 140 255 215 2 202 2 177 255 215 2 202 2 179 255 215 2 202 2 191 255 215 2 202 2 192 255 215 2 202 2 193 255 215 2 202 2 194 255 215 2 202 2 197 255 154 2 202 2 199 255 154 2 202 2 212 255 215 2 202 2 213 255 215 2 202 2 239 255 215 2 202 2 241 255 215 2 202 2 243 255 215 2 202 2 253 255 215 2 202 2 254 255 215 2 202 3 9 255 215 2 202 3 11 255 215 2 202 3 14 255 215 2 202 3 16 255 215 2 202 3 21 255 215 2 202 3 25 255 236 2 203 1 207 255 215 2 203 1 216 255 215 2 203 1 219 255 215 2 203 1 222 255 215 2 203 1 225 255 215 2 203 1 234 255 215 2 203 1 237 255 215 2 203 2 106 255 215 2 203 2 127 255 215 2 203 2 133 255 215 2 203 2 135 255 215 2 203 2 137 255 215 2 203 2 141 255 215 2 203 2 178 255 215 2 203 2 180 255 215 2 203 2 192 255 215 2 203 2 194 255 215 2 203 2 198 255 215 2 203 2 200 255 215 2 203 2 213 255 215 2 203 2 224 255 215 2 203 2 240 255 215 2 203 2 242 255 215 2 203 2 244 255 215 2 203 2 254 255 215 2 203 3 10 255 215 2 203 3 12 255 215 2 203 3 22 255 215 2 203 3 26 255 215 2 204 0 5 255 195 2 204 0 10 255 195 2 204 1 163 0 102 2 204 1 188 255 215 2 204 1 190 255 215 2 204 1 193 255 174 2 204 1 220 255 195 2 204 1 225 255 215 2 204 1 228 255 195 2 204 2 7 255 195 2 204 2 11 255 195 2 204 2 109 255 236 2 204 2 124 255 174 2 204 2 128 255 215 2 204 2 129 255 236 2 204 2 130 255 215 2 204 2 131 255 236 2 204 2 139 255 236 2 204 2 170 255 195 2 204 2 181 255 215 2 204 2 182 255 195 2 204 2 183 255 215 2 204 2 184 255 236 2 204 2 185 255 215 2 204 2 186 255 236 2 204 2 190 255 195 2 204 2 191 255 174 2 204 2 192 255 215 2 204 2 193 255 174 2 204 2 194 255 215 2 204 2 197 255 195 2 204 2 198 255 215 2 204 2 199 255 195 2 204 2 200 255 215 2 204 2 212 255 174 2 204 2 213 255 215 2 204 2 253 255 174 2 204 2 254 255 215 2 204 3 13 255 215 2 204 3 14 255 195 2 204 3 15 255 215 2 204 3 16 255 195 2 204 3 24 255 195 2 205 1 225 255 215 2 205 2 192 255 215 2 205 2 194 255 215 2 205 2 213 255 215 2 205 2 254 255 215 2 206 1 163 0 225 2 206 2 234 0 41 2 206 3 14 255 215 2 206 3 16 255 215 2 207 0 5 255 236 2 207 0 10 255 236 2 207 2 7 255 236 2 207 2 11 255 236 2 210 1 163 0 225 2 210 2 234 0 41 2 210 3 14 255 215 2 210 3 16 255 215 2 211 0 5 255 236 2 211 0 10 255 236 2 211 2 7 255 236 2 211 2 11 255 236 2 214 1 163 0 225 2 214 2 234 0 41 2 214 3 14 255 215 2 214 3 16 255 215 2 215 0 5 255 236 2 215 0 10 255 236 2 215 2 7 255 236 2 215 2 11 255 236 2 217 0 5 255 113 2 217 0 10 255 113 2 217 1 157 255 154 2 217 1 166 255 154 2 217 1 188 255 113 2 217 1 190 255 215 2 217 1 193 255 154 2 217 1 196 255 154 2 217 1 220 255 215 2 217 1 225 255 215 2 217 1 228 255 215 2 217 2 7 255 113 2 217 2 11 255 113 2 217 2 110 255 215 2 217 2 124 255 154 2 217 2 128 255 174 2 217 2 130 255 174 2 217 2 151 255 215 2 217 2 155 255 215 2 217 2 167 255 215 2 217 2 169 255 154 2 217 2 170 255 215 2 217 2 181 255 113 2 217 2 182 255 215 2 217 2 183 255 133 2 217 2 185 255 133 2 217 2 189 255 154 2 217 2 190 255 215 2 217 2 191 255 154 2 217 2 192 255 215 2 217 2 193 255 154 2 217 2 194 255 215 2 217 2 197 255 154 2 217 2 199 255 154 2 217 2 212 255 154 2 217 2 213 255 215 2 217 2 225 255 215 2 217 2 227 255 215 2 217 2 253 255 154 2 217 2 254 255 215 2 217 3 3 255 215 2 217 3 13 255 113 2 217 3 14 255 215 2 217 3 15 255 113 2 217 3 16 255 215 2 217 3 23 255 154 2 217 3 24 255 215 2 218 0 5 255 236 2 218 0 10 255 236 2 218 2 7 255 236 2 218 2 11 255 236 2 219 0 5 255 113 2 219 0 10 255 113 2 219 1 157 255 154 2 219 1 166 255 154 2 219 1 188 255 113 2 219 1 190 255 215 2 219 1 193 255 154 2 219 1 196 255 154 2 219 1 220 255 215 2 219 1 225 255 215 2 219 1 228 255 215 2 219 2 7 255 113 2 219 2 11 255 113 2 219 2 110 255 215 2 219 2 124 255 154 2 219 2 128 255 174 2 219 2 130 255 174 2 219 2 151 255 215 2 219 2 155 255 215 2 219 2 167 255 215 2 219 2 169 255 154 2 219 2 170 255 215 2 219 2 181 255 113 2 219 2 182 255 215 2 219 2 183 255 133 2 219 2 185 255 133 2 219 2 189 255 154 2 219 2 190 255 215 2 219 2 191 255 154 2 219 2 192 255 215 2 219 2 193 255 154 2 219 2 194 255 215 2 219 2 197 255 154 2 219 2 199 255 154 2 219 2 212 255 154 2 219 2 213 255 215 2 219 2 225 255 215 2 219 2 227 255 215 2 219 2 253 255 154 2 219 2 254 255 215 2 219 3 3 255 215 2 219 3 13 255 113 2 219 3 14 255 215 2 219 3 15 255 113 2 219 3 16 255 215 2 219 3 23 255 154 2 219 3 24 255 215 2 220 0 5 255 236 2 220 0 10 255 236 2 220 2 7 255 236 2 220 2 11 255 236 2 222 0 5 255 236 2 222 0 10 255 236 2 222 2 7 255 236 2 222 2 11 255 236 2 224 0 5 255 236 2 224 0 10 255 236 2 224 2 7 255 236 2 224 2 11 255 236 2 225 0 15 255 174 2 225 0 17 255 174 2 225 1 157 255 236 2 225 1 164 255 215 2 225 1 166 255 236 2 225 1 168 255 215 2 225 1 170 255 215 2 225 1 174 255 215 2 225 1 176 255 215 2 225 1 177 255 236 2 225 1 181 255 215 2 225 1 188 255 195 2 225 1 189 255 215 2 225 1 191 255 215 2 225 1 193 255 215 2 225 1 196 255 236 2 225 1 199 255 236 2 225 1 206 255 236 2 225 1 213 255 236 2 225 1 242 255 236 2 225 2 8 255 174 2 225 2 12 255 174 2 225 2 114 255 215 2 225 2 115 255 236 2 225 2 122 255 236 2 225 2 124 255 215 2 225 2 128 255 236 2 225 2 130 255 236 2 225 2 159 255 215 2 225 2 161 255 236 2 225 2 169 255 236 2 225 2 181 255 195 2 225 2 183 255 236 2 225 2 185 255 236 2 225 2 187 255 215 2 225 2 189 255 236 2 225 2 191 255 215 2 225 2 193 255 215 2 225 2 202 255 215 2 225 2 206 255 215 2 225 2 207 255 236 2 225 2 212 255 215 2 225 2 217 255 215 2 225 2 219 255 215 2 225 2 221 255 215 2 225 2 229 255 215 2 225 2 231 255 236 2 225 2 245 255 236 2 225 2 247 255 215 2 225 2 249 255 215 2 225 2 251 255 215 2 225 2 253 255 215 2 225 3 5 255 215 2 225 3 7 255 215 2 225 3 13 255 215 2 225 3 15 255 215 2 225 3 17 255 215 2 225 3 18 255 236 2 225 3 23 255 236 2 225 3 27 255 215 2 225 3 28 255 236 2 226 0 5 255 236 2 226 0 10 255 236 2 226 1 208 255 215 2 226 1 220 255 236 2 226 1 221 255 236 2 226 1 223 255 215 2 226 1 225 255 236 2 226 1 228 255 236 2 226 1 246 255 236 2 226 2 7 255 236 2 226 2 11 255 236 2 226 2 160 255 215 2 226 2 170 255 236 2 226 2 182 255 236 2 226 2 188 255 215 2 226 2 190 255 236 2 226 2 192 255 236 2 226 2 194 255 236 2 226 2 203 255 215 2 226 2 213 255 236 2 226 2 230 255 215 2 226 2 248 255 236 2 226 2 250 255 236 2 226 2 252 255 236 2 226 2 254 255 236 2 226 3 6 255 215 2 226 3 8 255 215 2 226 3 14 255 236 2 226 3 16 255 236 2 226 3 24 255 236 2 227 0 15 255 174 2 227 0 17 255 174 2 227 1 157 255 236 2 227 1 164 255 215 2 227 1 166 255 236 2 227 1 168 255 215 2 227 1 170 255 215 2 227 1 174 255 215 2 227 1 176 255 215 2 227 1 177 255 236 2 227 1 181 255 215 2 227 1 188 255 195 2 227 1 189 255 215 2 227 1 191 255 215 2 227 1 193 255 215 2 227 1 196 255 236 2 227 1 199 255 236 2 227 1 206 255 236 2 227 1 213 255 236 2 227 1 242 255 236 2 227 2 8 255 174 2 227 2 12 255 174 2 227 2 114 255 215 2 227 2 115 255 236 2 227 2 122 255 236 2 227 2 124 255 215 2 227 2 128 255 236 2 227 2 130 255 236 2 227 2 159 255 215 2 227 2 161 255 236 2 227 2 169 255 236 2 227 2 181 255 195 2 227 2 183 255 236 2 227 2 185 255 236 2 227 2 187 255 215 2 227 2 189 255 236 2 227 2 191 255 215 2 227 2 193 255 215 2 227 2 202 255 215 2 227 2 206 255 215 2 227 2 207 255 236 2 227 2 212 255 215 2 227 2 217 255 215 2 227 2 219 255 215 2 227 2 221 255 215 2 227 2 229 255 215 2 227 2 231 255 236 2 227 2 245 255 236 2 227 2 247 255 215 2 227 2 249 255 215 2 227 2 251 255 215 2 227 2 253 255 215 2 227 3 5 255 215 2 227 3 7 255 215 2 227 3 13 255 215 2 227 3 15 255 215 2 227 3 17 255 215 2 227 3 18 255 236 2 227 3 23 255 236 2 227 3 27 255 215 2 227 3 28 255 236 2 228 0 5 255 236 2 228 0 10 255 236 2 228 1 208 255 215 2 228 1 220 255 236 2 228 1 221 255 236 2 228 1 223 255 215 2 228 1 225 255 236 2 228 1 228 255 236 2 228 1 246 255 236 2 228 2 7 255 236 2 228 2 11 255 236 2 228 2 160 255 215 2 228 2 170 255 236 2 228 2 182 255 236 2 228 2 188 255 215 2 228 2 190 255 236 2 228 2 192 255 236 2 228 2 194 255 236 2 228 2 203 255 215 2 228 2 213 255 236 2 228 2 230 255 215 2 228 2 248 255 236 2 228 2 250 255 236 2 228 2 252 255 236 2 228 2 254 255 236 2 228 3 6 255 215 2 228 3 8 255 215 2 228 3 14 255 236 2 228 3 16 255 236 2 228 3 24 255 236 2 229 1 159 255 215 2 229 1 184 255 215 2 229 1 187 255 215 2 229 1 190 255 215 2 229 1 193 255 215 2 229 1 225 255 215 2 229 2 108 255 215 2 229 2 124 255 215 2 229 2 126 255 215 2 229 2 132 255 215 2 229 2 134 255 215 2 229 2 136 255 215 2 229 2 138 255 215 2 229 2 140 255 215 2 229 2 177 255 215 2 229 2 179 255 215 2 229 2 191 255 215 2 229 2 192 255 215 2 229 2 193 255 215 2 229 2 194 255 215 2 229 2 197 255 154 2 229 2 199 255 154 2 229 2 212 255 215 2 229 2 213 255 215 2 229 2 239 255 215 2 229 2 241 255 215 2 229 2 243 255 215 2 229 2 253 255 215 2 229 2 254 255 215 2 229 3 9 255 215 2 229 3 11 255 215 2 229 3 14 255 215 2 229 3 16 255 215 2 229 3 21 255 215 2 229 3 25 255 236 2 230 1 207 255 215 2 230 1 216 255 215 2 230 1 219 255 215 2 230 1 222 255 215 2 230 1 225 255 215 2 230 1 234 255 215 2 230 1 237 255 215 2 230 2 106 255 215 2 230 2 127 255 215 2 230 2 133 255 215 2 230 2 135 255 215 2 230 2 137 255 215 2 230 2 141 255 215 2 230 2 178 255 215 2 230 2 180 255 215 2 230 2 192 255 215 2 230 2 194 255 215 2 230 2 198 255 215 2 230 2 200 255 215 2 230 2 213 255 215 2 230 2 224 255 215 2 230 2 240 255 215 2 230 2 242 255 215 2 230 2 244 255 215 2 230 2 254 255 215 2 230 3 10 255 215 2 230 3 12 255 215 2 230 3 22 255 215 2 230 3 26 255 215 2 231 0 15 255 174 2 231 0 17 255 174 2 231 2 8 255 174 2 231 2 12 255 174 2 231 2 128 255 236 2 231 2 130 255 236 2 231 2 183 255 236 2 231 2 185 255 236 2 231 3 13 255 215 2 231 3 15 255 215 2 232 1 233 0 41 2 233 0 5 255 236 2 233 0 10 255 236 2 233 2 7 255 236 2 233 2 11 255 236 2 233 3 14 255 215 2 233 3 16 255 215 2 239 0 15 255 174 2 239 0 17 255 174 2 239 1 157 255 236 2 239 1 164 255 215 2 239 1 166 255 236 2 239 1 168 255 215 2 239 1 170 255 215 2 239 1 174 255 215 2 239 1 176 255 215 2 239 1 177 255 236 2 239 1 181 255 215 2 239 1 188 255 195 2 239 1 189 255 215 2 239 1 191 255 215 2 239 1 193 255 215 2 239 1 196 255 236 2 239 1 199 255 236 2 239 1 206 255 236 2 239 1 213 255 236 2 239 1 242 255 236 2 239 2 8 255 174 2 239 2 12 255 174 2 239 2 114 255 215 2 239 2 115 255 236 2 239 2 122 255 236 2 239 2 124 255 215 2 239 2 128 255 236 2 239 2 130 255 236 2 239 2 159 255 215 2 239 2 161 255 236 2 239 2 169 255 236 2 239 2 181 255 195 2 239 2 183 255 236 2 239 2 185 255 236 2 239 2 187 255 215 2 239 2 189 255 236 2 239 2 191 255 215 2 239 2 193 255 215 2 239 2 202 255 215 2 239 2 206 255 215 2 239 2 207 255 236 2 239 2 212 255 215 2 239 2 217 255 215 2 239 2 219 255 215 2 239 2 221 255 215 2 239 2 229 255 215 2 239 2 231 255 236 2 239 2 245 255 236 2 239 2 247 255 215 2 239 2 249 255 215 2 239 2 251 255 215 2 239 2 253 255 215 2 239 3 5 255 215 2 239 3 7 255 215 2 239 3 13 255 215 2 239 3 15 255 215 2 239 3 17 255 215 2 239 3 18 255 236 2 239 3 23 255 236 2 239 3 27 255 215 2 239 3 28 255 236 2 240 0 5 255 236 2 240 0 10 255 236 2 240 1 208 255 215 2 240 1 220 255 236 2 240 1 221 255 236 2 240 1 223 255 215 2 240 1 225 255 236 2 240 1 228 255 236 2 240 1 246 255 236 2 240 2 7 255 236 2 240 2 11 255 236 2 240 2 160 255 215 2 240 2 170 255 236 2 240 2 182 255 236 2 240 2 188 255 215 2 240 2 190 255 236 2 240 2 192 255 236 2 240 2 194 255 236 2 240 2 203 255 215 2 240 2 213 255 236 2 240 2 230 255 215 2 240 2 248 255 236 2 240 2 250 255 236 2 240 2 252 255 236 2 240 2 254 255 236 2 240 3 6 255 215 2 240 3 8 255 215 2 240 3 14 255 236 2 240 3 16 255 236 2 240 3 24 255 236 2 241 0 15 255 174 2 241 0 17 255 174 2 241 1 157 255 236 2 241 1 164 255 215 2 241 1 166 255 236 2 241 1 168 255 215 2 241 1 170 255 215 2 241 1 174 255 215 2 241 1 176 255 215 2 241 1 177 255 236 2 241 1 181 255 215 2 241 1 188 255 195 2 241 1 189 255 215 2 241 1 191 255 215 2 241 1 193 255 215 2 241 1 196 255 236 2 241 1 199 255 236 2 241 1 206 255 236 2 241 1 213 255 236 2 241 1 242 255 236 2 241 2 8 255 174 2 241 2 12 255 174 2 241 2 114 255 215 2 241 2 115 255 236 2 241 2 122 255 236 2 241 2 124 255 215 2 241 2 128 255 236 2 241 2 130 255 236 2 241 2 159 255 215 2 241 2 161 255 236 2 241 2 169 255 236 2 241 2 181 255 195 2 241 2 183 255 236 2 241 2 185 255 236 2 241 2 187 255 215 2 241 2 189 255 236 2 241 2 191 255 215 2 241 2 193 255 215 2 241 2 202 255 215 2 241 2 206 255 215 2 241 2 207 255 236 2 241 2 212 255 215 2 241 2 217 255 215 2 241 2 219 255 215 2 241 2 221 255 215 2 241 2 229 255 215 2 241 2 231 255 236 2 241 2 245 255 236 2 241 2 247 255 215 2 241 2 249 255 215 2 241 2 251 255 215 2 241 2 253 255 215 2 241 3 5 255 215 2 241 3 7 255 215 2 241 3 13 255 215 2 241 3 15 255 215 2 241 3 17 255 215 2 241 3 18 255 236 2 241 3 23 255 236 2 241 3 27 255 215 2 241 3 28 255 236 2 242 0 5 255 236 2 242 0 10 255 236 2 242 1 208 255 215 2 242 1 220 255 236 2 242 1 221 255 236 2 242 1 223 255 215 2 242 1 225 255 236 2 242 1 228 255 236 2 242 1 246 255 236 2 242 2 7 255 236 2 242 2 11 255 236 2 242 2 160 255 215 2 242 2 170 255 236 2 242 2 182 255 236 2 242 2 188 255 215 2 242 2 190 255 236 2 242 2 192 255 236 2 242 2 194 255 236 2 242 2 203 255 215 2 242 2 213 255 236 2 242 2 230 255 215 2 242 2 248 255 236 2 242 2 250 255 236 2 242 2 252 255 236 2 242 2 254 255 236 2 242 3 6 255 215 2 242 3 8 255 215 2 242 3 14 255 236 2 242 3 16 255 236 2 242 3 24 255 236 2 243 0 15 255 174 2 243 0 17 255 174 2 243 1 157 255 236 2 243 1 164 255 215 2 243 1 166 255 236 2 243 1 168 255 215 2 243 1 170 255 215 2 243 1 174 255 215 2 243 1 176 255 215 2 243 1 177 255 236 2 243 1 181 255 215 2 243 1 188 255 195 2 243 1 189 255 215 2 243 1 191 255 215 2 243 1 193 255 215 2 243 1 196 255 236 2 243 1 199 255 236 2 243 1 206 255 236 2 243 1 213 255 236 2 243 1 242 255 236 2 243 2 8 255 174 2 243 2 12 255 174 2 243 2 114 255 215 2 243 2 115 255 236 2 243 2 122 255 236 2 243 2 124 255 215 2 243 2 128 255 236 2 243 2 130 255 236 2 243 2 159 255 215 2 243 2 161 255 236 2 243 2 169 255 236 2 243 2 181 255 195 2 243 2 183 255 236 2 243 2 185 255 236 2 243 2 187 255 215 2 243 2 189 255 236 2 243 2 191 255 215 2 243 2 193 255 215 2 243 2 202 255 215 2 243 2 206 255 215 2 243 2 207 255 236 2 243 2 212 255 215 2 243 2 217 255 215 2 243 2 219 255 215 2 243 2 221 255 215 2 243 2 229 255 215 2 243 2 231 255 236 2 243 2 245 255 236 2 243 2 247 255 215 2 243 2 249 255 215 2 243 2 251 255 215 2 243 2 253 255 215 2 243 3 5 255 215 2 243 3 7 255 215 2 243 3 13 255 215 2 243 3 15 255 215 2 243 3 17 255 215 2 243 3 18 255 236 2 243 3 23 255 236 2 243 3 27 255 215 2 243 3 28 255 236 2 244 0 5 255 236 2 244 0 10 255 236 2 244 1 208 255 215 2 244 1 220 255 236 2 244 1 221 255 236 2 244 1 223 255 215 2 244 1 225 255 236 2 244 1 228 255 236 2 244 1 246 255 236 2 244 2 7 255 236 2 244 2 11 255 236 2 244 2 160 255 215 2 244 2 170 255 236 2 244 2 182 255 236 2 244 2 188 255 215 2 244 2 190 255 236 2 244 2 192 255 236 2 244 2 194 255 236 2 244 2 203 255 215 2 244 2 213 255 236 2 244 2 230 255 215 2 244 2 248 255 236 2 244 2 250 255 236 2 244 2 252 255 236 2 244 2 254 255 236 2 244 3 6 255 215 2 244 3 8 255 215 2 244 3 14 255 236 2 244 3 16 255 236 2 244 3 24 255 236 2 245 0 15 255 174 2 245 0 17 255 174 2 245 1 157 255 236 2 245 1 164 255 215 2 245 1 166 255 236 2 245 1 168 255 215 2 245 1 170 255 215 2 245 1 174 255 215 2 245 1 176 255 215 2 245 1 177 255 236 2 245 1 181 255 215 2 245 1 188 255 195 2 245 1 189 255 215 2 245 1 191 255 215 2 245 1 193 255 215 2 245 1 196 255 236 2 245 1 199 255 236 2 245 1 206 255 236 2 245 1 213 255 236 2 245 1 242 255 236 2 245 2 8 255 174 2 245 2 12 255 174 2 245 2 114 255 215 2 245 2 115 255 236 2 245 2 122 255 236 2 245 2 124 255 215 2 245 2 128 255 236 2 245 2 130 255 236 2 245 2 159 255 215 2 245 2 161 255 236 2 245 2 169 255 236 2 245 2 181 255 195 2 245 2 183 255 236 2 245 2 185 255 236 2 245 2 187 255 215 2 245 2 189 255 236 2 245 2 191 255 215 2 245 2 193 255 215 2 245 2 202 255 215 2 245 2 206 255 215 2 245 2 207 255 236 2 245 2 212 255 215 2 245 2 217 255 215 2 245 2 219 255 215 2 245 2 221 255 215 2 245 2 229 255 215 2 245 2 231 255 236 2 245 2 245 255 236 2 245 2 247 255 215 2 245 2 249 255 215 2 245 2 251 255 215 2 245 2 253 255 215 2 245 3 5 255 215 2 245 3 7 255 215 2 245 3 13 255 215 2 245 3 15 255 215 2 245 3 17 255 215 2 245 3 18 255 236 2 245 3 23 255 236 2 245 3 27 255 215 2 245 3 28 255 236 2 246 0 5 255 236 2 246 0 10 255 236 2 246 1 208 255 215 2 246 1 220 255 236 2 246 1 221 255 236 2 246 1 223 255 215 2 246 1 225 255 236 2 246 1 228 255 236 2 246 1 246 255 236 2 246 2 7 255 236 2 246 2 11 255 236 2 246 2 160 255 215 2 246 2 170 255 236 2 246 2 182 255 236 2 246 2 188 255 215 2 246 2 190 255 236 2 246 2 192 255 236 2 246 2 194 255 236 2 246 2 203 255 215 2 246 2 213 255 236 2 246 2 230 255 215 2 246 2 248 255 236 2 246 2 250 255 236 2 246 2 252 255 236 2 246 2 254 255 236 2 246 3 6 255 215 2 246 3 8 255 215 2 246 3 14 255 236 2 246 3 16 255 236 2 246 3 24 255 236 2 247 0 15 255 133 2 247 0 17 255 133 2 247 1 159 255 236 2 247 1 164 255 154 2 247 1 170 255 113 2 247 1 174 255 154 2 247 1 181 255 154 2 247 1 184 255 236 2 247 1 187 255 236 2 247 1 190 255 195 2 247 1 201 255 236 2 247 1 206 255 174 2 247 1 207 255 215 2 247 1 213 255 174 2 247 1 216 255 215 2 247 1 219 255 215 2 247 1 222 255 215 2 247 1 225 255 215 2 247 1 234 255 215 2 247 1 235 0 102 2 247 1 237 255 215 2 247 1 238 255 236 2 247 1 242 255 174 2 247 1 244 0 102 2 247 2 8 255 133 2 247 2 12 255 133 2 247 2 106 255 215 2 247 2 108 255 236 2 247 2 114 255 113 2 247 2 115 255 174 2 247 2 126 255 236 2 247 2 127 255 215 2 247 2 132 255 236 2 247 2 133 255 215 2 247 2 134 255 236 2 247 2 135 255 215 2 247 2 136 255 236 2 247 2 137 255 215 2 247 2 138 255 236 2 247 2 140 255 236 2 247 2 141 255 215 2 247 2 152 0 102 2 247 2 168 0 102 2 247 2 177 255 236 2 247 2 178 255 215 2 247 2 179 255 236 2 247 2 180 255 215 2 247 2 192 255 215 2 247 2 194 255 215 2 247 2 197 255 215 2 247 2 198 255 195 2 247 2 199 255 215 2 247 2 200 255 195 2 247 2 206 255 154 2 247 2 207 255 174 2 247 2 213 255 215 2 247 2 217 255 113 2 247 2 219 255 113 2 247 2 221 255 113 2 247 2 224 255 215 2 247 2 239 255 236 2 247 2 240 255 215 2 247 2 241 255 236 2 247 2 242 255 215 2 247 2 243 255 236 2 247 2 244 255 215 2 247 2 254 255 215 2 247 3 9 255 113 2 247 3 10 255 215 2 247 3 11 255 113 2 247 3 12 255 215 2 247 3 17 255 154 2 247 3 18 255 174 2 247 3 21 255 236 2 247 3 22 255 215 2 247 3 26 255 215 2 247 3 27 255 154 2 247 3 28 255 174 2 248 0 15 255 174 2 248 0 17 255 174 2 248 1 206 255 215 2 248 1 213 255 215 2 248 1 242 255 215 2 248 2 8 255 174 2 248 2 12 255 174 2 248 2 115 255 215 2 248 2 207 255 215 2 248 3 18 255 215 2 248 3 28 255 215 2 249 0 15 255 133 2 249 0 17 255 133 2 249 1 159 255 236 2 249 1 164 255 154 2 249 1 170 255 113 2 249 1 174 255 154 2 249 1 181 255 154 2 249 1 184 255 236 2 249 1 187 255 236 2 249 1 190 255 195 2 249 1 201 255 236 2 249 1 206 255 174 2 249 1 207 255 215 2 249 1 213 255 174 2 249 1 216 255 215 2 249 1 219 255 215 2 249 1 222 255 215 2 249 1 225 255 215 2 249 1 234 255 215 2 249 1 235 0 102 2 249 1 237 255 215 2 249 1 238 255 236 2 249 1 242 255 174 2 249 1 244 0 102 2 249 2 8 255 133 2 249 2 12 255 133 2 249 2 106 255 215 2 249 2 108 255 236 2 249 2 114 255 113 2 249 2 115 255 174 2 249 2 126 255 236 2 249 2 127 255 215 2 249 2 132 255 236 2 249 2 133 255 215 2 249 2 134 255 236 2 249 2 135 255 215 2 249 2 136 255 236 2 249 2 137 255 215 2 249 2 138 255 236 2 249 2 140 255 236 2 249 2 141 255 215 2 249 2 152 0 102 2 249 2 168 0 102 2 249 2 177 255 236 2 249 2 178 255 215 2 249 2 179 255 236 2 249 2 180 255 215 2 249 2 192 255 215 2 249 2 194 255 215 2 249 2 197 255 215 2 249 2 198 255 195 2 249 2 199 255 215 2 249 2 200 255 195 2 249 2 206 255 154 2 249 2 207 255 174 2 249 2 213 255 215 2 249 2 217 255 113 2 249 2 219 255 113 2 249 2 221 255 113 2 249 2 224 255 215 2 249 2 239 255 236 2 249 2 240 255 215 2 249 2 241 255 236 2 249 2 242 255 215 2 249 2 243 255 236 2 249 2 244 255 215 2 249 2 254 255 215 2 249 3 9 255 113 2 249 3 10 255 215 2 249 3 11 255 113 2 249 3 12 255 215 2 249 3 17 255 154 2 249 3 18 255 174 2 249 3 21 255 236 2 249 3 22 255 215 2 249 3 26 255 215 2 249 3 27 255 154 2 249 3 28 255 174 2 250 0 15 255 174 2 250 0 17 255 174 2 250 1 206 255 215 2 250 1 213 255 215 2 250 1 242 255 215 2 250 2 8 255 174 2 250 2 12 255 174 2 250 2 115 255 215 2 250 2 207 255 215 2 250 3 18 255 215 2 250 3 28 255 215 2 251 0 15 255 133 2 251 0 17 255 133 2 251 1 159 255 236 2 251 1 164 255 154 2 251 1 170 255 113 2 251 1 174 255 154 2 251 1 181 255 154 2 251 1 184 255 236 2 251 1 187 255 236 2 251 1 190 255 195 2 251 1 201 255 236 2 251 1 206 255 174 2 251 1 207 255 215 2 251 1 213 255 174 2 251 1 216 255 215 2 251 1 219 255 215 2 251 1 222 255 215 2 251 1 225 255 215 2 251 1 234 255 215 2 251 1 235 0 102 2 251 1 237 255 215 2 251 1 238 255 236 2 251 1 242 255 174 2 251 1 244 0 102 2 251 2 8 255 133 2 251 2 12 255 133 2 251 2 106 255 215 2 251 2 108 255 236 2 251 2 114 255 113 2 251 2 115 255 174 2 251 2 126 255 236 2 251 2 127 255 215 2 251 2 132 255 236 2 251 2 133 255 215 2 251 2 134 255 236 2 251 2 135 255 215 2 251 2 136 255 236 2 251 2 137 255 215 2 251 2 138 255 236 2 251 2 140 255 236 2 251 2 141 255 215 2 251 2 152 0 102 2 251 2 168 0 102 2 251 2 177 255 236 2 251 2 178 255 215 2 251 2 179 255 236 2 251 2 180 255 215 2 251 2 192 255 215 2 251 2 194 255 215 2 251 2 197 255 215 2 251 2 198 255 195 2 251 2 199 255 215 2 251 2 200 255 195 2 251 2 206 255 154 2 251 2 207 255 174 2 251 2 213 255 215 2 251 2 217 255 113 2 251 2 219 255 113 2 251 2 221 255 113 2 251 2 224 255 215 2 251 2 239 255 236 2 251 2 240 255 215 2 251 2 241 255 236 2 251 2 242 255 215 2 251 2 243 255 236 2 251 2 244 255 215 2 251 2 254 255 215 2 251 3 9 255 113 2 251 3 10 255 215 2 251 3 11 255 113 2 251 3 12 255 215 2 251 3 17 255 154 2 251 3 18 255 174 2 251 3 21 255 236 2 251 3 22 255 215 2 251 3 26 255 215 2 251 3 27 255 154 2 251 3 28 255 174 2 252 0 15 255 174 2 252 0 17 255 174 2 252 1 206 255 215 2 252 1 213 255 215 2 252 1 242 255 215 2 252 2 8 255 174 2 252 2 12 255 174 2 252 2 115 255 215 2 252 2 207 255 215 2 252 3 18 255 215 2 252 3 28 255 215 2 255 0 15 255 133 2 255 0 16 255 174 2 255 0 17 255 133 2 255 1 159 255 215 2 255 1 164 255 154 2 255 1 170 255 113 2 255 1 174 255 154 2 255 1 181 255 154 2 255 1 184 255 215 2 255 1 187 255 215 2 255 1 188 0 41 2 255 1 190 255 174 2 255 1 204 255 154 2 255 1 205 255 154 2 255 1 206 255 133 2 255 1 207 255 113 2 255 1 208 255 215 2 255 1 209 255 215 2 255 1 210 255 154 2 255 1 211 255 154 2 255 1 212 255 154 2 255 1 213 255 133 2 255 1 214 255 154 2 255 1 215 255 154 2 255 1 216 255 113 2 255 1 217 255 154 2 255 1 218 255 154 2 255 1 219 255 113 2 255 1 220 255 174 2 255 1 221 255 174 2 255 1 222 255 113 2 255 1 223 255 215 2 255 1 224 255 154 2 255 1 225 255 154 2 255 1 226 255 154 2 255 1 227 255 154 2 255 1 228 255 174 2 255 1 229 255 154 2 255 1 230 255 154 2 255 1 231 255 215 2 255 1 232 255 154 2 255 1 233 255 195 2 255 1 234 255 113 2 255 1 236 255 154 2 255 1 237 255 113 2 255 1 238 255 133 2 255 1 242 255 133 2 255 1 243 255 154 2 255 1 245 255 154 2 255 1 246 255 174 2 255 1 247 255 154 2 255 1 249 255 154 2 255 2 2 255 174 2 255 2 3 255 174 2 255 2 4 255 174 2 255 2 8 255 133 2 255 2 12 255 133 2 255 2 106 255 113 2 255 2 107 255 154 2 255 2 108 255 215 2 255 2 109 255 215 2 255 2 113 255 154 2 255 2 114 255 113 2 255 2 115 255 133 2 255 2 117 255 154 2 255 2 119 255 154 2 255 2 121 255 154 2 255 2 125 255 154 2 255 2 126 255 215 2 255 2 127 255 113 2 255 2 129 255 215 2 255 2 131 255 215 2 255 2 132 255 215 2 255 2 133 255 113 2 255 2 134 255 215 2 255 2 135 255 113 2 255 2 136 255 215 2 255 2 137 255 113 2 255 2 138 255 215 2 255 2 139 255 215 2 255 2 140 255 215 2 255 2 141 255 113 2 255 2 150 255 154 2 255 2 154 255 154 2 255 2 158 255 154 2 255 2 160 255 215 2 255 2 162 255 215 2 255 2 164 255 154 2 255 2 166 255 154 2 255 2 170 255 174 2 255 2 172 255 154 2 255 2 174 255 154 2 255 2 176 255 154 2 255 2 177 255 215 2 255 2 178 255 113 2 255 2 179 255 215 2 255 2 180 255 113 2 255 2 181 0 41 2 255 2 182 255 174 2 255 2 184 255 174 2 255 2 186 255 174 2 255 2 188 255 215 2 255 2 190 255 174 2 255 2 192 255 154 2 255 2 194 255 154 2 255 2 196 255 154 2 255 2 197 255 154 2 255 2 198 255 113 2 255 2 199 255 154 2 255 2 200 255 113 2 255 2 203 255 215 2 255 2 205 255 154 2 255 2 206 255 154 2 255 2 207 255 133 2 255 2 209 255 154 2 255 2 211 255 154 2 255 2 213 255 154 2 255 2 215 255 154 2 255 2 217 255 113 2 255 2 219 255 113 2 255 2 221 255 113 2 255 2 224 255 113 2 255 2 230 255 215 2 255 2 232 255 215 2 255 2 234 255 195 2 255 2 236 255 154 2 255 2 238 255 154 2 255 2 239 255 215 2 255 2 240 255 113 2 255 2 241 255 215 2 255 2 242 255 113 2 255 2 243 255 215 2 255 2 244 255 113 2 255 2 246 255 215 2 255 2 248 255 174 2 255 2 250 255 174 2 255 2 252 255 174 2 255 2 254 255 154 2 255 3 0 255 154 2 255 3 2 255 154 2 255 3 6 255 215 2 255 3 8 255 215 2 255 3 9 255 113 2 255 3 10 255 113 2 255 3 11 255 113 2 255 3 12 255 113 2 255 3 14 255 154 2 255 3 16 255 154 2 255 3 17 255 154 2 255 3 18 255 133 2 255 3 20 255 154 2 255 3 21 255 215 2 255 3 22 255 113 2 255 3 24 255 174 2 255 3 26 255 113 2 255 3 27 255 154 2 255 3 28 255 133 3 0 0 15 255 154 3 0 0 16 255 215 3 0 0 17 255 154 3 0 1 206 255 195 3 0 1 207 255 236 3 0 1 213 255 195 3 0 1 216 255 236 3 0 1 219 255 236 3 0 1 222 255 236 3 0 1 234 255 236 3 0 1 237 255 236 3 0 1 242 255 195 3 0 2 2 255 215 3 0 2 3 255 215 3 0 2 4 255 215 3 0 2 8 255 154 3 0 2 12 255 154 3 0 2 106 255 236 3 0 2 115 255 195 3 0 2 127 255 236 3 0 2 133 255 236 3 0 2 135 255 236 3 0 2 137 255 236 3 0 2 141 255 236 3 0 2 178 255 236 3 0 2 180 255 236 3 0 2 207 255 195 3 0 2 224 255 236 3 0 2 240 255 236 3 0 2 242 255 236 3 0 2 244 255 236 3 0 3 10 255 236 3 0 3 12 255 236 3 0 3 18 255 195 3 0 3 22 255 236 3 0 3 26 255 236 3 0 3 28 255 195 3 3 0 15 255 154 3 3 0 16 255 215 3 3 0 17 255 154 3 3 1 157 0 41 3 3 1 159 255 215 3 3 1 164 255 174 3 3 1 166 0 41 3 3 1 170 255 133 3 3 1 174 255 174 3 3 1 181 255 174 3 3 1 184 255 215 3 3 1 187 255 215 3 3 1 188 0 41 3 3 1 190 255 195 3 3 1 196 0 41 3 3 1 204 255 195 3 3 1 205 255 195 3 3 1 206 255 154 3 3 1 207 255 174 3 3 1 208 255 215 3 3 1 209 255 215 3 3 1 210 255 195 3 3 1 211 255 195 3 3 1 212 255 195 3 3 1 213 255 154 3 3 1 214 255 195 3 3 1 215 255 195 3 3 1 216 255 174 3 3 1 217 255 195 3 3 1 218 255 195 3 3 1 219 255 174 3 3 1 222 255 174 3 3 1 223 255 215 3 3 1 224 255 195 3 3 1 225 255 154 3 3 1 226 255 195 3 3 1 227 255 195 3 3 1 229 255 195 3 3 1 230 255 195 3 3 1 231 255 215 3 3 1 232 255 195 3 3 1 234 255 174 3 3 1 235 0 41 3 3 1 236 255 195 3 3 1 237 255 174 3 3 1 238 255 195 3 3 1 242 255 154 3 3 1 243 255 195 3 3 1 244 0 41 3 3 1 245 255 195 3 3 1 247 255 195 3 3 1 249 255 195 3 3 2 2 255 215 3 3 2 3 255 215 3 3 2 4 255 215 3 3 2 8 255 154 3 3 2 12 255 154 3 3 2 106 255 174 3 3 2 107 255 195 3 3 2 108 255 215 3 3 2 113 255 195 3 3 2 114 255 133 3 3 2 115 255 154 3 3 2 117 255 195 3 3 2 119 255 215 3 3 2 121 255 195 3 3 2 125 255 195 3 3 2 126 255 215 3 3 2 127 255 174 3 3 2 132 255 215 3 3 2 133 255 174 3 3 2 134 255 215 3 3 2 135 255 174 3 3 2 136 255 215 3 3 2 137 255 174 3 3 2 138 255 215 3 3 2 140 255 215 3 3 2 141 255 174 3 3 2 150 255 195 3 3 2 152 0 41 3 3 2 154 255 195 3 3 2 158 255 195 3 3 2 160 255 215 3 3 2 162 255 215 3 3 2 164 255 195 3 3 2 166 255 195 3 3 2 168 0 41 3 3 2 169 0 41 3 3 2 172 255 195 3 3 2 174 255 195 3 3 2 176 255 195 3 3 2 177 255 215 3 3 2 178 255 174 3 3 2 179 255 215 3 3 2 180 255 174 3 3 2 181 0 41 3 3 2 188 255 215 3 3 2 189 0 41 3 3 2 192 255 154 3 3 2 194 255 154 3 3 2 196 255 195 3 3 2 197 255 215 3 3 2 198 255 195 3 3 2 199 255 215 3 3 2 200 255 195 3 3 2 203 255 215 3 3 2 205 255 195 3 3 2 206 255 174 3 3 2 207 255 154 3 3 2 209 255 195 3 3 2 211 255 195 3 3 2 213 255 154 3 3 2 215 255 195 3 3 2 217 255 133 3 3 2 219 255 133 3 3 2 221 255 133 3 3 2 224 255 174 3 3 2 230 255 215 3 3 2 232 255 215 3 3 2 236 255 195 3 3 2 238 255 195 3 3 2 239 255 215 3 3 2 240 255 174 3 3 2 241 255 215 3 3 2 242 255 174 3 3 2 243 255 215 3 3 2 244 255 174 3 3 2 246 255 215 3 3 2 254 255 154 3 3 3 0 255 195 3 3 3 2 255 195 3 3 3 6 255 215 3 3 3 8 255 215 3 3 3 9 255 154 3 3 3 10 255 174 3 3 3 11 255 154 3 3 3 12 255 174 3 3 3 14 255 215 3 3 3 16 255 215 3 3 3 17 255 174 3 3 3 18 255 154 3 3 3 20 255 195 3 3 3 21 255 215 3 3 3 22 255 174 3 3 3 23 0 41 3 3 3 26 255 174 3 3 3 27 255 174 3 3 3 28 255 154 3 4 0 15 255 195 3 4 0 17 255 195 3 4 1 206 255 195 3 4 1 207 255 215 3 4 1 213 255 195 3 4 1 216 255 215 3 4 1 219 255 215 3 4 1 222 255 215 3 4 1 234 255 215 3 4 1 237 255 215 3 4 1 242 255 195 3 4 2 8 255 195 3 4 2 12 255 195 3 4 2 106 255 215 3 4 2 115 255 195 3 4 2 127 255 215 3 4 2 133 255 215 3 4 2 135 255 215 3 4 2 137 255 215 3 4 2 141 255 215 3 4 2 178 255 215 3 4 2 180 255 215 3 4 2 207 255 195 3 4 2 224 255 215 3 4 2 240 255 215 3 4 2 242 255 215 3 4 2 244 255 215 3 4 3 10 255 215 3 4 3 12 255 215 3 4 3 18 255 195 3 4 3 22 255 215 3 4 3 26 255 215 3 4 3 28 255 195 3 5 1 159 255 215 3 5 1 163 0 225 3 5 1 184 255 215 3 5 1 187 255 215 3 5 1 190 255 195 3 5 1 220 255 215 3 5 1 225 255 174 3 5 1 228 255 215 3 5 2 108 255 215 3 5 2 123 0 61 3 5 2 125 255 236 3 5 2 126 255 215 3 5 2 132 255 215 3 5 2 134 255 215 3 5 2 136 255 215 3 5 2 138 255 215 3 5 2 140 255 215 3 5 2 170 255 215 3 5 2 177 255 215 3 5 2 179 255 215 3 5 2 182 255 215 3 5 2 190 255 215 3 5 2 192 255 174 3 5 2 194 255 174 3 5 2 197 255 195 3 5 2 198 255 215 3 5 2 199 255 195 3 5 2 200 255 215 3 5 2 213 255 174 3 5 2 239 255 215 3 5 2 241 255 215 3 5 2 243 255 215 3 5 2 254 255 174 3 5 3 14 255 215 3 5 3 16 255 215 3 5 3 21 255 215 3 5 3 24 255 215 3 6 1 207 255 236 3 6 1 216 255 236 3 6 1 219 255 236 3 6 1 222 255 236 3 6 1 225 255 236 3 6 1 234 255 236 3 6 1 237 255 236 3 6 2 106 255 236 3 6 2 127 255 236 3 6 2 133 255 236 3 6 2 135 255 236 3 6 2 137 255 236 3 6 2 141 255 236 3 6 2 178 255 236 3 6 2 180 255 236 3 6 2 192 255 236 3 6 2 194 255 236 3 6 2 213 255 236 3 6 2 224 255 236 3 6 2 240 255 236 3 6 2 242 255 236 3 6 2 244 255 236 3 6 2 254 255 236 3 6 3 10 255 236 3 6 3 12 255 236 3 6 3 14 255 215 3 6 3 16 255 215 3 6 3 22 255 236 3 6 3 26 255 236 3 7 1 159 255 215 3 7 1 184 255 215 3 7 1 187 255 215 3 7 1 190 255 215 3 7 1 193 255 215 3 7 1 225 255 215 3 7 2 108 255 215 3 7 2 124 255 215 3 7 2 126 255 215 3 7 2 132 255 215 3 7 2 134 255 215 3 7 2 136 255 215 3 7 2 138 255 215 3 7 2 140 255 215 3 7 2 177 255 215 3 7 2 179 255 215 3 7 2 191 255 215 3 7 2 192 255 215 3 7 2 193 255 215 3 7 2 194 255 215 3 7 2 197 255 154 3 7 2 199 255 154 3 7 2 212 255 215 3 7 2 213 255 215 3 7 2 239 255 215 3 7 2 241 255 215 3 7 2 243 255 215 3 7 2 253 255 215 3 7 2 254 255 215 3 7 3 9 255 215 3 7 3 11 255 215 3 7 3 14 255 215 3 7 3 16 255 215 3 7 3 21 255 215 3 7 3 25 255 236 3 8 1 207 255 236 3 8 1 216 255 236 3 8 1 219 255 236 3 8 1 222 255 236 3 8 1 225 255 236 3 8 1 234 255 236 3 8 1 237 255 236 3 8 2 106 255 236 3 8 2 127 255 236 3 8 2 133 255 236 3 8 2 135 255 236 3 8 2 137 255 236 3 8 2 141 255 236 3 8 2 178 255 236 3 8 2 180 255 236 3 8 2 192 255 236 3 8 2 194 255 236 3 8 2 213 255 236 3 8 2 224 255 236 3 8 2 240 255 236 3 8 2 242 255 236 3 8 2 244 255 236 3 8 2 254 255 236 3 8 3 10 255 236 3 8 3 12 255 236 3 8 3 14 255 215 3 8 3 16 255 215 3 8 3 22 255 236 3 8 3 26 255 236 3 11 0 5 255 154 3 11 0 10 255 154 3 11 1 157 255 174 3 11 1 166 255 174 3 11 1 168 255 195 3 11 1 170 255 195 3 11 1 176 255 195 3 11 1 188 255 113 3 11 1 189 255 195 3 11 1 191 255 195 3 11 1 193 255 195 3 11 1 196 255 174 3 11 1 208 255 215 3 11 1 220 255 195 3 11 1 223 255 215 3 11 1 225 255 215 3 11 1 228 255 195 3 11 2 7 255 154 3 11 2 11 255 154 3 11 2 114 255 195 3 11 2 118 255 215 3 11 2 124 255 195 3 11 2 128 255 195 3 11 2 130 255 195 3 11 2 159 255 195 3 11 2 160 255 215 3 11 2 169 255 174 3 11 2 170 255 195 3 11 2 181 255 113 3 11 2 182 255 195 3 11 2 183 255 195 3 11 2 185 255 195 3 11 2 187 255 195 3 11 2 188 255 215 3 11 2 189 255 174 3 11 2 190 255 195 3 11 2 191 255 195 3 11 2 192 255 215 3 11 2 193 255 195 3 11 2 194 255 215 3 11 2 202 255 195 3 11 2 203 255 215 3 11 2 212 255 195 3 11 2 213 255 215 3 11 2 217 255 195 3 11 2 219 255 195 3 11 2 221 255 195 3 11 2 229 255 195 3 11 2 230 255 215 3 11 2 247 255 195 3 11 2 249 255 195 3 11 2 251 255 195 3 11 2 253 255 195 3 11 2 254 255 215 3 11 3 5 255 195 3 11 3 6 255 215 3 11 3 7 255 195 3 11 3 8 255 215 3 11 3 13 255 215 3 11 3 14 255 215 3 11 3 15 255 215 3 11 3 16 255 215 3 11 3 23 255 174 3 11 3 24 255 195 3 12 0 5 255 154 3 12 0 10 255 154 3 12 1 208 255 215 3 12 1 220 255 195 3 12 1 221 255 215 3 12 1 223 255 215 3 12 1 225 255 215 3 12 1 228 255 195 3 12 1 246 255 215 3 12 2 7 255 154 3 12 2 11 255 154 3 12 2 160 255 215 3 12 2 170 255 195 3 12 2 182 255 195 3 12 2 188 255 215 3 12 2 190 255 195 3 12 2 192 255 215 3 12 2 194 255 215 3 12 2 203 255 215 3 12 2 213 255 215 3 12 2 230 255 215 3 12 2 248 255 215 3 12 2 250 255 215 3 12 2 252 255 215 3 12 2 254 255 215 3 12 3 6 255 215 3 12 3 8 255 215 3 12 3 14 255 154 3 12 3 16 255 154 3 12 3 24 255 195 3 13 0 5 255 154 3 13 0 10 255 154 3 13 1 157 255 174 3 13 1 166 255 174 3 13 1 168 255 195 3 13 1 170 255 195 3 13 1 176 255 195 3 13 1 188 255 113 3 13 1 189 255 195 3 13 1 191 255 195 3 13 1 193 255 195 3 13 1 196 255 174 3 13 1 208 255 215 3 13 1 220 255 195 3 13 1 223 255 215 3 13 1 225 255 215 3 13 1 228 255 195 3 13 2 7 255 154 3 13 2 11 255 154 3 13 2 114 255 195 3 13 2 118 255 215 3 13 2 124 255 195 3 13 2 128 255 195 3 13 2 130 255 195 3 13 2 159 255 195 3 13 2 160 255 215 3 13 2 169 255 174 3 13 2 170 255 195 3 13 2 181 255 113 3 13 2 182 255 195 3 13 2 183 255 195 3 13 2 185 255 195 3 13 2 187 255 195 3 13 2 188 255 215 3 13 2 189 255 174 3 13 2 190 255 195 3 13 2 191 255 195 3 13 2 192 255 215 3 13 2 193 255 195 3 13 2 194 255 215 3 13 2 202 255 195 3 13 2 203 255 215 3 13 2 212 255 195 3 13 2 213 255 215 3 13 2 217 255 195 3 13 2 219 255 195 3 13 2 221 255 195 3 13 2 229 255 195 3 13 2 230 255 215 3 13 2 247 255 195 3 13 2 249 255 195 3 13 2 251 255 195 3 13 2 253 255 195 3 13 2 254 255 215 3 13 3 5 255 195 3 13 3 6 255 215 3 13 3 7 255 195 3 13 3 8 255 215 3 13 3 13 255 215 3 13 3 14 255 215 3 13 3 15 255 215 3 13 3 16 255 215 3 13 3 23 255 174 3 13 3 24 255 195 3 14 0 5 255 154 3 14 0 10 255 154 3 14 1 208 255 215 3 14 1 220 255 195 3 14 1 221 255 215 3 14 1 223 255 215 3 14 1 225 255 215 3 14 1 228 255 195 3 14 1 246 255 215 3 14 2 7 255 154 3 14 2 11 255 154 3 14 2 160 255 215 3 14 2 170 255 195 3 14 2 182 255 195 3 14 2 188 255 215 3 14 2 190 255 195 3 14 2 192 255 215 3 14 2 194 255 215 3 14 2 203 255 215 3 14 2 213 255 215 3 14 2 230 255 215 3 14 2 248 255 215 3 14 2 250 255 215 3 14 2 252 255 215 3 14 2 254 255 215 3 14 3 6 255 215 3 14 3 8 255 215 3 14 3 14 255 154 3 14 3 16 255 154 3 14 3 24 255 195 3 15 1 163 0 225 3 15 2 234 0 41 3 15 3 14 255 215 3 15 3 16 255 215 3 16 0 5 255 236 3 16 0 10 255 236 3 16 2 7 255 236 3 16 2 11 255 236 3 17 0 5 255 154 3 17 0 10 255 154 3 17 1 157 255 174 3 17 1 166 255 174 3 17 1 168 255 195 3 17 1 170 255 195 3 17 1 176 255 195 3 17 1 188 255 113 3 17 1 189 255 195 3 17 1 191 255 195 3 17 1 193 255 195 3 17 1 196 255 174 3 17 1 208 255 215 3 17 1 220 255 195 3 17 1 223 255 215 3 17 1 225 255 215 3 17 1 228 255 195 3 17 2 7 255 154 3 17 2 11 255 154 3 17 2 114 255 195 3 17 2 118 255 215 3 17 2 124 255 195 3 17 2 128 255 195 3 17 2 130 255 195 3 17 2 159 255 195 3 17 2 160 255 215 3 17 2 169 255 174 3 17 2 170 255 195 3 17 2 181 255 113 3 17 2 182 255 195 3 17 2 183 255 195 3 17 2 185 255 195 3 17 2 187 255 195 3 17 2 188 255 215 3 17 2 189 255 174 3 17 2 190 255 195 3 17 2 191 255 195 3 17 2 192 255 215 3 17 2 193 255 195 3 17 2 194 255 215 3 17 2 202 255 195 3 17 2 203 255 215 3 17 2 212 255 195 3 17 2 213 255 215 3 17 2 217 255 195 3 17 2 219 255 195 3 17 2 221 255 195 3 17 2 229 255 195 3 17 2 230 255 215 3 17 2 247 255 195 3 17 2 249 255 195 3 17 2 251 255 195 3 17 2 253 255 195 3 17 2 254 255 215 3 17 3 5 255 195 3 17 3 6 255 215 3 17 3 7 255 195 3 17 3 8 255 215 3 17 3 13 255 215 3 17 3 14 255 215 3 17 3 15 255 215 3 17 3 16 255 215 3 17 3 23 255 174 3 17 3 24 255 195 3 18 0 5 255 154 3 18 0 10 255 154 3 18 1 208 255 215 3 18 1 220 255 195 3 18 1 221 255 215 3 18 1 223 255 215 3 18 1 225 255 215 3 18 1 228 255 195 3 18 1 246 255 215 3 18 2 7 255 154 3 18 2 11 255 154 3 18 2 160 255 215 3 18 2 170 255 195 3 18 2 182 255 195 3 18 2 188 255 215 3 18 2 190 255 195 3 18 2 192 255 215 3 18 2 194 255 215 3 18 2 203 255 215 3 18 2 213 255 215 3 18 2 230 255 215 3 18 2 248 255 215 3 18 2 250 255 215 3 18 2 252 255 215 3 18 2 254 255 215 3 18 3 6 255 215 3 18 3 8 255 215 3 18 3 14 255 154 3 18 3 16 255 154 3 18 3 24 255 195 3 19 0 5 255 154 3 19 0 10 255 154 3 19 1 157 255 174 3 19 1 166 255 174 3 19 1 168 255 195 3 19 1 170 255 195 3 19 1 176 255 195 3 19 1 188 255 113 3 19 1 189 255 195 3 19 1 191 255 195 3 19 1 193 255 195 3 19 1 196 255 174 3 19 1 208 255 215 3 19 1 220 255 195 3 19 1 223 255 215 3 19 1 225 255 215 3 19 1 228 255 195 3 19 2 7 255 154 3 19 2 11 255 154 3 19 2 114 255 195 3 19 2 118 255 215 3 19 2 124 255 195 3 19 2 128 255 195 3 19 2 130 255 195 3 19 2 159 255 195 3 19 2 160 255 215 3 19 2 169 255 174 3 19 2 170 255 195 3 19 2 181 255 113 3 19 2 182 255 195 3 19 2 183 255 195 3 19 2 185 255 195 3 19 2 187 255 195 3 19 2 188 255 215 3 19 2 189 255 174 3 19 2 190 255 195 3 19 2 191 255 195 3 19 2 192 255 215 3 19 2 193 255 195 3 19 2 194 255 215 3 19 2 202 255 195 3 19 2 203 255 215 3 19 2 212 255 195 3 19 2 213 255 215 3 19 2 217 255 195 3 19 2 219 255 195 3 19 2 221 255 195 3 19 2 229 255 195 3 19 2 230 255 215 3 19 2 247 255 195 3 19 2 249 255 195 3 19 2 251 255 195 3 19 2 253 255 195 3 19 2 254 255 215 3 19 3 5 255 195 3 19 3 6 255 215 3 19 3 7 255 195 3 19 3 8 255 215 3 19 3 13 255 215 3 19 3 14 255 215 3 19 3 15 255 215 3 19 3 16 255 215 3 19 3 23 255 174 3 19 3 24 255 195 3 20 0 5 255 154 3 20 0 10 255 154 3 20 1 208 255 215 3 20 1 220 255 195 3 20 1 221 255 215 3 20 1 223 255 215 3 20 1 225 255 215 3 20 1 228 255 195 3 20 1 246 255 215 3 20 2 7 255 154 3 20 2 11 255 154 3 20 2 160 255 215 3 20 2 170 255 195 3 20 2 182 255 195 3 20 2 188 255 215 3 20 2 190 255 195 3 20 2 192 255 215 3 20 2 194 255 215 3 20 2 203 255 215 3 20 2 213 255 215 3 20 2 230 255 215 3 20 2 248 255 215 3 20 2 250 255 215 3 20 2 252 255 215 3 20 2 254 255 215 3 20 3 6 255 215 3 20 3 8 255 215 3 20 3 14 255 154 3 20 3 16 255 154 3 20 3 24 255 195 3 21 0 15 255 174 3 21 0 17 255 174 3 21 1 170 255 236 3 21 1 176 255 215 3 21 1 188 255 215 3 21 1 191 255 215 3 21 2 8 255 174 3 21 2 12 255 174 3 21 2 114 255 236 3 21 2 128 255 236 3 21 2 130 255 236 3 21 2 159 255 215 3 21 2 181 255 215 3 21 2 183 255 236 3 21 2 185 255 236 3 21 2 187 255 215 3 21 2 202 255 215 3 21 2 217 255 236 3 21 2 219 255 236 3 21 2 221 255 236 3 21 2 229 255 215 3 21 3 5 255 215 3 21 3 7 255 215 3 22 0 5 255 215 3 22 0 10 255 215 3 22 1 208 255 236 3 22 1 221 255 236 3 22 1 223 255 236 3 22 1 246 255 236 3 22 2 7 255 215 3 22 2 11 255 215 3 22 2 160 255 236 3 22 2 188 255 236 3 22 2 203 255 236 3 22 2 230 255 236 3 22 2 248 255 236 3 22 2 250 255 236 3 22 2 252 255 236 3 22 3 6 255 236 3 22 3 8 255 236 3 22 3 14 255 215 3 22 3 16 255 215 3 23 0 5 255 174 3 23 0 10 255 174 3 23 1 157 255 195 3 23 1 166 255 195 3 23 1 170 255 215 3 23 1 176 255 215 3 23 1 188 255 195 3 23 1 191 255 215 3 23 1 193 255 215 3 23 1 196 255 195 3 23 1 220 255 215 3 23 1 228 255 215 3 23 2 7 255 174 3 23 2 11 255 174 3 23 2 114 255 215 3 23 2 124 255 215 3 23 2 128 255 215 3 23 2 130 255 215 3 23 2 159 255 215 3 23 2 169 255 195 3 23 2 170 255 215 3 23 2 181 255 195 3 23 2 182 255 215 3 23 2 183 255 215 3 23 2 185 255 215 3 23 2 187 255 215 3 23 2 189 255 195 3 23 2 190 255 215 3 23 2 191 255 215 3 23 2 193 255 215 3 23 2 202 255 215 3 23 2 212 255 215 3 23 2 217 255 215 3 23 2 219 255 215 3 23 2 221 255 215 3 23 2 229 255 215 3 23 2 253 255 215 3 23 3 5 255 215 3 23 3 7 255 215 3 23 3 13 255 215 3 23 3 15 255 215 3 23 3 23 255 195 3 23 3 24 255 215 3 24 0 5 255 154 3 24 0 10 255 154 3 24 1 208 255 215 3 24 1 220 255 195 3 24 1 221 255 215 3 24 1 223 255 215 3 24 1 225 255 215 3 24 1 228 255 195 3 24 1 246 255 215 3 24 2 7 255 154 3 24 2 11 255 154 3 24 2 160 255 215 3 24 2 170 255 195 3 24 2 182 255 195 3 24 2 188 255 215 3 24 2 190 255 195 3 24 2 192 255 215 3 24 2 194 255 215 3 24 2 203 255 215 3 24 2 213 255 215 3 24 2 230 255 215 3 24 2 248 255 215 3 24 2 250 255 215 3 24 2 252 255 215 3 24 2 254 255 215 3 24 3 6 255 215 3 24 3 8 255 215 3 24 3 14 255 154 3 24 3 16 255 154 3 24 3 24 255 195 3 25 1 225 255 215 3 25 2 192 255 215 3 25 2 194 255 215 3 25 2 213 255 215 3 25 2 254 255 215 3 27 1 163 0 225 3 27 2 234 0 41 3 27 3 14 255 215 3 27 3 16 255 215 3 28 0 5 255 236 3 28 0 10 255 236 3 28 2 7 255 236 3 28 2 11 255 236 3 29 0 5 255 113 3 29 0 10 255 113 3 29 0 38 255 215 3 29 0 42 255 215 3 29 0 45 1 10 3 29 0 50 255 215 3 29 0 52 255 215 3 29 0 55 255 113 3 29 0 57 255 174 3 29 0 58 255 174 3 29 0 60 255 133 3 29 0 137 255 215 3 29 0 148 255 215 3 29 0 149 255 215 3 29 0 150 255 215 3 29 0 151 255 215 3 29 0 152 255 215 3 29 0 154 255 215 3 29 0 159 255 133 3 29 0 200 255 215 3 29 0 202 255 215 3 29 0 204 255 215 3 29 0 206 255 215 3 29 0 222 255 215 3 29 0 224 255 215 3 29 0 226 255 215 3 29 0 228 255 215 3 29 1 14 255 215 3 29 1 16 255 215 3 29 1 18 255 215 3 29 1 20 255 215 3 29 1 36 255 113 3 29 1 38 255 113 3 29 1 54 255 174 3 29 1 56 255 133 3 29 1 58 255 133 3 29 1 71 255 215 3 29 1 250 255 174 3 29 1 252 255 174 3 29 1 254 255 174 3 29 2 0 255 133 3 29 2 7 255 113 3 29 2 11 255 113 3 29 2 95 255 215 3 29 3 73 255 215 3 29 3 75 255 215 3 29 3 77 255 215 3 29 3 79 255 215 3 29 3 81 255 215 3 29 3 83 255 215 3 29 3 85 255 215 3 29 3 87 255 215 3 29 3 89 255 215 3 29 3 91 255 215 3 29 3 93 255 215 3 29 3 95 255 215 3 29 3 111 255 133 3 29 3 113 255 133 3 29 3 115 255 133 3 29 3 143 255 113 3 30 0 5 255 236 3 30 0 10 255 236 3 30 2 7 255 236 3 30 2 11 255 236 3 31 0 5 255 113 3 31 0 10 255 113 3 31 0 38 255 215 3 31 0 42 255 215 3 31 0 45 1 10 3 31 0 50 255 215 3 31 0 52 255 215 3 31 0 55 255 113 3 31 0 57 255 174 3 31 0 58 255 174 3 31 0 60 255 133 3 31 0 137 255 215 3 31 0 148 255 215 3 31 0 149 255 215 3 31 0 150 255 215 3 31 0 151 255 215 3 31 0 152 255 215 3 31 0 154 255 215 3 31 0 159 255 133 3 31 0 200 255 215 3 31 0 202 255 215 3 31 0 204 255 215 3 31 0 206 255 215 3 31 0 222 255 215 3 31 0 224 255 215 3 31 0 226 255 215 3 31 0 228 255 215 3 31 1 14 255 215 3 31 1 16 255 215 3 31 1 18 255 215 3 31 1 20 255 215 3 31 1 36 255 113 3 31 1 38 255 113 3 31 1 54 255 174 3 31 1 56 255 133 3 31 1 58 255 133 3 31 1 71 255 215 3 31 1 250 255 174 3 31 1 252 255 174 3 31 1 254 255 174 3 31 2 0 255 133 3 31 2 7 255 113 3 31 2 11 255 113 3 31 2 95 255 215 3 31 3 73 255 215 3 31 3 75 255 215 3 31 3 77 255 215 3 31 3 79 255 215 3 31 3 81 255 215 3 31 3 83 255 215 3 31 3 85 255 215 3 31 3 87 255 215 3 31 3 89 255 215 3 31 3 91 255 215 3 31 3 93 255 215 3 31 3 95 255 215 3 31 3 111 255 133 3 31 3 113 255 133 3 31 3 115 255 133 3 31 3 143 255 113 3 32 0 5 255 236 3 32 0 10 255 236 3 32 2 7 255 236 3 32 2 11 255 236 3 33 0 5 255 113 3 33 0 10 255 113 3 33 0 38 255 215 3 33 0 42 255 215 3 33 0 45 1 10 3 33 0 50 255 215 3 33 0 52 255 215 3 33 0 55 255 113 3 33 0 57 255 174 3 33 0 58 255 174 3 33 0 60 255 133 3 33 0 137 255 215 3 33 0 148 255 215 3 33 0 149 255 215 3 33 0 150 255 215 3 33 0 151 255 215 3 33 0 152 255 215 3 33 0 154 255 215 3 33 0 159 255 133 3 33 0 200 255 215 3 33 0 202 255 215 3 33 0 204 255 215 3 33 0 206 255 215 3 33 0 222 255 215 3 33 0 224 255 215 3 33 0 226 255 215 3 33 0 228 255 215 3 33 1 14 255 215 3 33 1 16 255 215 3 33 1 18 255 215 3 33 1 20 255 215 3 33 1 36 255 113 3 33 1 38 255 113 3 33 1 54 255 174 3 33 1 56 255 133 3 33 1 58 255 133 3 33 1 71 255 215 3 33 1 250 255 174 3 33 1 252 255 174 3 33 1 254 255 174 3 33 2 0 255 133 3 33 2 7 255 113 3 33 2 11 255 113 3 33 2 95 255 215 3 33 3 73 255 215 3 33 3 75 255 215 3 33 3 77 255 215 3 33 3 79 255 215 3 33 3 81 255 215 3 33 3 83 255 215 3 33 3 85 255 215 3 33 3 87 255 215 3 33 3 89 255 215 3 33 3 91 255 215 3 33 3 93 255 215 3 33 3 95 255 215 3 33 3 111 255 133 3 33 3 113 255 133 3 33 3 115 255 133 3 33 3 143 255 113 3 34 0 5 255 236 3 34 0 10 255 236 3 34 2 7 255 236 3 34 2 11 255 236 3 35 0 5 255 113 3 35 0 10 255 113 3 35 0 38 255 215 3 35 0 42 255 215 3 35 0 45 1 10 3 35 0 50 255 215 3 35 0 52 255 215 3 35 0 55 255 113 3 35 0 57 255 174 3 35 0 58 255 174 3 35 0 60 255 133 3 35 0 137 255 215 3 35 0 148 255 215 3 35 0 149 255 215 3 35 0 150 255 215 3 35 0 151 255 215 3 35 0 152 255 215 3 35 0 154 255 215 3 35 0 159 255 133 3 35 0 200 255 215 3 35 0 202 255 215 3 35 0 204 255 215 3 35 0 206 255 215 3 35 0 222 255 215 3 35 0 224 255 215 3 35 0 226 255 215 3 35 0 228 255 215 3 35 1 14 255 215 3 35 1 16 255 215 3 35 1 18 255 215 3 35 1 20 255 215 3 35 1 36 255 113 3 35 1 38 255 113 3 35 1 54 255 174 3 35 1 56 255 133 3 35 1 58 255 133 3 35 1 71 255 215 3 35 1 250 255 174 3 35 1 252 255 174 3 35 1 254 255 174 3 35 2 0 255 133 3 35 2 7 255 113 3 35 2 11 255 113 3 35 2 95 255 215 3 35 3 73 255 215 3 35 3 75 255 215 3 35 3 77 255 215 3 35 3 79 255 215 3 35 3 81 255 215 3 35 3 83 255 215 3 35 3 85 255 215 3 35 3 87 255 215 3 35 3 89 255 215 3 35 3 91 255 215 3 35 3 93 255 215 3 35 3 95 255 215 3 35 3 111 255 133 3 35 3 113 255 133 3 35 3 115 255 133 3 35 3 143 255 113 3 36 0 5 255 236 3 36 0 10 255 236 3 36 2 7 255 236 3 36 2 11 255 236 3 37 0 5 255 113 3 37 0 10 255 113 3 37 0 38 255 215 3 37 0 42 255 215 3 37 0 45 1 10 3 37 0 50 255 215 3 37 0 52 255 215 3 37 0 55 255 113 3 37 0 57 255 174 3 37 0 58 255 174 3 37 0 60 255 133 3 37 0 137 255 215 3 37 0 148 255 215 3 37 0 149 255 215 3 37 0 150 255 215 3 37 0 151 255 215 3 37 0 152 255 215 3 37 0 154 255 215 3 37 0 159 255 133 3 37 0 200 255 215 3 37 0 202 255 215 3 37 0 204 255 215 3 37 0 206 255 215 3 37 0 222 255 215 3 37 0 224 255 215 3 37 0 226 255 215 3 37 0 228 255 215 3 37 1 14 255 215 3 37 1 16 255 215 3 37 1 18 255 215 3 37 1 20 255 215 3 37 1 36 255 113 3 37 1 38 255 113 3 37 1 54 255 174 3 37 1 56 255 133 3 37 1 58 255 133 3 37 1 71 255 215 3 37 1 250 255 174 3 37 1 252 255 174 3 37 1 254 255 174 3 37 2 0 255 133 3 37 2 7 255 113 3 37 2 11 255 113 3 37 2 95 255 215 3 37 3 73 255 215 3 37 3 75 255 215 3 37 3 77 255 215 3 37 3 79 255 215 3 37 3 81 255 215 3 37 3 83 255 215 3 37 3 85 255 215 3 37 3 87 255 215 3 37 3 89 255 215 3 37 3 91 255 215 3 37 3 93 255 215 3 37 3 95 255 215 3 37 3 111 255 133 3 37 3 113 255 133 3 37 3 115 255 133 3 37 3 143 255 113 3 38 0 5 255 236 3 38 0 10 255 236 3 38 2 7 255 236 3 38 2 11 255 236 3 39 0 5 255 113 3 39 0 10 255 113 3 39 0 38 255 215 3 39 0 42 255 215 3 39 0 45 1 10 3 39 0 50 255 215 3 39 0 52 255 215 3 39 0 55 255 113 3 39 0 57 255 174 3 39 0 58 255 174 3 39 0 60 255 133 3 39 0 137 255 215 3 39 0 148 255 215 3 39 0 149 255 215 3 39 0 150 255 215 3 39 0 151 255 215 3 39 0 152 255 215 3 39 0 154 255 215 3 39 0 159 255 133 3 39 0 200 255 215 3 39 0 202 255 215 3 39 0 204 255 215 3 39 0 206 255 215 3 39 0 222 255 215 3 39 0 224 255 215 3 39 0 226 255 215 3 39 0 228 255 215 3 39 1 14 255 215 3 39 1 16 255 215 3 39 1 18 255 215 3 39 1 20 255 215 3 39 1 36 255 113 3 39 1 38 255 113 3 39 1 54 255 174 3 39 1 56 255 133 3 39 1 58 255 133 3 39 1 71 255 215 3 39 1 250 255 174 3 39 1 252 255 174 3 39 1 254 255 174 3 39 2 0 255 133 3 39 2 7 255 113 3 39 2 11 255 113 3 39 2 95 255 215 3 39 3 73 255 215 3 39 3 75 255 215 3 39 3 77 255 215 3 39 3 79 255 215 3 39 3 81 255 215 3 39 3 83 255 215 3 39 3 85 255 215 3 39 3 87 255 215 3 39 3 89 255 215 3 39 3 91 255 215 3 39 3 93 255 215 3 39 3 95 255 215 3 39 3 111 255 133 3 39 3 113 255 133 3 39 3 115 255 133 3 39 3 143 255 113 3 40 0 5 255 236 3 40 0 10 255 236 3 40 2 7 255 236 3 40 2 11 255 236 3 41 0 5 255 113 3 41 0 10 255 113 3 41 0 38 255 215 3 41 0 42 255 215 3 41 0 45 1 10 3 41 0 50 255 215 3 41 0 52 255 215 3 41 0 55 255 113 3 41 0 57 255 174 3 41 0 58 255 174 3 41 0 60 255 133 3 41 0 137 255 215 3 41 0 148 255 215 3 41 0 149 255 215 3 41 0 150 255 215 3 41 0 151 255 215 3 41 0 152 255 215 3 41 0 154 255 215 3 41 0 159 255 133 3 41 0 200 255 215 3 41 0 202 255 215 3 41 0 204 255 215 3 41 0 206 255 215 3 41 0 222 255 215 3 41 0 224 255 215 3 41 0 226 255 215 3 41 0 228 255 215 3 41 1 14 255 215 3 41 1 16 255 215 3 41 1 18 255 215 3 41 1 20 255 215 3 41 1 36 255 113 3 41 1 38 255 113 3 41 1 54 255 174 3 41 1 56 255 133 3 41 1 58 255 133 3 41 1 71 255 215 3 41 1 250 255 174 3 41 1 252 255 174 3 41 1 254 255 174 3 41 2 0 255 133 3 41 2 7 255 113 3 41 2 11 255 113 3 41 2 95 255 215 3 41 3 73 255 215 3 41 3 75 255 215 3 41 3 77 255 215 3 41 3 79 255 215 3 41 3 81 255 215 3 41 3 83 255 215 3 41 3 85 255 215 3 41 3 87 255 215 3 41 3 89 255 215 3 41 3 91 255 215 3 41 3 93 255 215 3 41 3 95 255 215 3 41 3 111 255 133 3 41 3 113 255 133 3 41 3 115 255 133 3 41 3 143 255 113 3 42 0 5 255 236 3 42 0 10 255 236 3 42 2 7 255 236 3 42 2 11 255 236 3 43 0 5 255 113 3 43 0 10 255 113 3 43 0 38 255 215 3 43 0 42 255 215 3 43 0 45 1 10 3 43 0 50 255 215 3 43 0 52 255 215 3 43 0 55 255 113 3 43 0 57 255 174 3 43 0 58 255 174 3 43 0 60 255 133 3 43 0 137 255 215 3 43 0 148 255 215 3 43 0 149 255 215 3 43 0 150 255 215 3 43 0 151 255 215 3 43 0 152 255 215 3 43 0 154 255 215 3 43 0 159 255 133 3 43 0 200 255 215 3 43 0 202 255 215 3 43 0 204 255 215 3 43 0 206 255 215 3 43 0 222 255 215 3 43 0 224 255 215 3 43 0 226 255 215 3 43 0 228 255 215 3 43 1 14 255 215 3 43 1 16 255 215 3 43 1 18 255 215 3 43 1 20 255 215 3 43 1 36 255 113 3 43 1 38 255 113 3 43 1 54 255 174 3 43 1 56 255 133 3 43 1 58 255 133 3 43 1 71 255 215 3 43 1 250 255 174 3 43 1 252 255 174 3 43 1 254 255 174 3 43 2 0 255 133 3 43 2 7 255 113 3 43 2 11 255 113 3 43 2 95 255 215 3 43 3 73 255 215 3 43 3 75 255 215 3 43 3 77 255 215 3 43 3 79 255 215 3 43 3 81 255 215 3 43 3 83 255 215 3 43 3 85 255 215 3 43 3 87 255 215 3 43 3 89 255 215 3 43 3 91 255 215 3 43 3 93 255 215 3 43 3 95 255 215 3 43 3 111 255 133 3 43 3 113 255 133 3 43 3 115 255 133 3 43 3 143 255 113 3 44 0 5 255 236 3 44 0 10 255 236 3 44 2 7 255 236 3 44 2 11 255 236 3 45 0 5 255 113 3 45 0 10 255 113 3 45 0 38 255 215 3 45 0 42 255 215 3 45 0 45 1 10 3 45 0 50 255 215 3 45 0 52 255 215 3 45 0 55 255 113 3 45 0 57 255 174 3 45 0 58 255 174 3 45 0 60 255 133 3 45 0 137 255 215 3 45 0 148 255 215 3 45 0 149 255 215 3 45 0 150 255 215 3 45 0 151 255 215 3 45 0 152 255 215 3 45 0 154 255 215 3 45 0 159 255 133 3 45 0 200 255 215 3 45 0 202 255 215 3 45 0 204 255 215 3 45 0 206 255 215 3 45 0 222 255 215 3 45 0 224 255 215 3 45 0 226 255 215 3 45 0 228 255 215 3 45 1 14 255 215 3 45 1 16 255 215 3 45 1 18 255 215 3 45 1 20 255 215 3 45 1 36 255 113 3 45 1 38 255 113 3 45 1 54 255 174 3 45 1 56 255 133 3 45 1 58 255 133 3 45 1 71 255 215 3 45 1 250 255 174 3 45 1 252 255 174 3 45 1 254 255 174 3 45 2 0 255 133 3 45 2 7 255 113 3 45 2 11 255 113 3 45 2 95 255 215 3 45 3 73 255 215 3 45 3 75 255 215 3 45 3 77 255 215 3 45 3 79 255 215 3 45 3 81 255 215 3 45 3 83 255 215 3 45 3 85 255 215 3 45 3 87 255 215 3 45 3 89 255 215 3 45 3 91 255 215 3 45 3 93 255 215 3 45 3 95 255 215 3 45 3 111 255 133 3 45 3 113 255 133 3 45 3 115 255 133 3 45 3 143 255 113 3 46 0 5 255 236 3 46 0 10 255 236 3 46 2 7 255 236 3 46 2 11 255 236 3 47 0 5 255 113 3 47 0 10 255 113 3 47 0 38 255 215 3 47 0 42 255 215 3 47 0 45 1 10 3 47 0 50 255 215 3 47 0 52 255 215 3 47 0 55 255 113 3 47 0 57 255 174 3 47 0 58 255 174 3 47 0 60 255 133 3 47 0 137 255 215 3 47 0 148 255 215 3 47 0 149 255 215 3 47 0 150 255 215 3 47 0 151 255 215 3 47 0 152 255 215 3 47 0 154 255 215 3 47 0 159 255 133 3 47 0 200 255 215 3 47 0 202 255 215 3 47 0 204 255 215 3 47 0 206 255 215 3 47 0 222 255 215 3 47 0 224 255 215 3 47 0 226 255 215 3 47 0 228 255 215 3 47 1 14 255 215 3 47 1 16 255 215 3 47 1 18 255 215 3 47 1 20 255 215 3 47 1 36 255 113 3 47 1 38 255 113 3 47 1 54 255 174 3 47 1 56 255 133 3 47 1 58 255 133 3 47 1 71 255 215 3 47 1 250 255 174 3 47 1 252 255 174 3 47 1 254 255 174 3 47 2 0 255 133 3 47 2 7 255 113 3 47 2 11 255 113 3 47 2 95 255 215 3 47 3 73 255 215 3 47 3 75 255 215 3 47 3 77 255 215 3 47 3 79 255 215 3 47 3 81 255 215 3 47 3 83 255 215 3 47 3 85 255 215 3 47 3 87 255 215 3 47 3 89 255 215 3 47 3 91 255 215 3 47 3 93 255 215 3 47 3 95 255 215 3 47 3 111 255 133 3 47 3 113 255 133 3 47 3 115 255 133 3 47 3 143 255 113 3 48 0 5 255 236 3 48 0 10 255 236 3 48 2 7 255 236 3 48 2 11 255 236 3 49 0 5 255 113 3 49 0 10 255 113 3 49 0 38 255 215 3 49 0 42 255 215 3 49 0 45 1 10 3 49 0 50 255 215 3 49 0 52 255 215 3 49 0 55 255 113 3 49 0 57 255 174 3 49 0 58 255 174 3 49 0 60 255 133 3 49 0 137 255 215 3 49 0 148 255 215 3 49 0 149 255 215 3 49 0 150 255 215 3 49 0 151 255 215 3 49 0 152 255 215 3 49 0 154 255 215 3 49 0 159 255 133 3 49 0 200 255 215 3 49 0 202 255 215 3 49 0 204 255 215 3 49 0 206 255 215 3 49 0 222 255 215 3 49 0 224 255 215 3 49 0 226 255 215 3 49 0 228 255 215 3 49 1 14 255 215 3 49 1 16 255 215 3 49 1 18 255 215 3 49 1 20 255 215 3 49 1 36 255 113 3 49 1 38 255 113 3 49 1 54 255 174 3 49 1 56 255 133 3 49 1 58 255 133 3 49 1 71 255 215 3 49 1 250 255 174 3 49 1 252 255 174 3 49 1 254 255 174 3 49 2 0 255 133 3 49 2 7 255 113 3 49 2 11 255 113 3 49 2 95 255 215 3 49 3 73 255 215 3 49 3 75 255 215 3 49 3 77 255 215 3 49 3 79 255 215 3 49 3 81 255 215 3 49 3 83 255 215 3 49 3 85 255 215 3 49 3 87 255 215 3 49 3 89 255 215 3 49 3 91 255 215 3 49 3 93 255 215 3 49 3 95 255 215 3 49 3 111 255 133 3 49 3 113 255 133 3 49 3 115 255 133 3 49 3 143 255 113 3 50 0 5 255 236 3 50 0 10 255 236 3 50 2 7 255 236 3 50 2 11 255 236 3 51 0 5 255 113 3 51 0 10 255 113 3 51 0 38 255 215 3 51 0 42 255 215 3 51 0 45 1 10 3 51 0 50 255 215 3 51 0 52 255 215 3 51 0 55 255 113 3 51 0 57 255 174 3 51 0 58 255 174 3 51 0 60 255 133 3 51 0 137 255 215 3 51 0 148 255 215 3 51 0 149 255 215 3 51 0 150 255 215 3 51 0 151 255 215 3 51 0 152 255 215 3 51 0 154 255 215 3 51 0 159 255 133 3 51 0 200 255 215 3 51 0 202 255 215 3 51 0 204 255 215 3 51 0 206 255 215 3 51 0 222 255 215 3 51 0 224 255 215 3 51 0 226 255 215 3 51 0 228 255 215 3 51 1 14 255 215 3 51 1 16 255 215 3 51 1 18 255 215 3 51 1 20 255 215 3 51 1 36 255 113 3 51 1 38 255 113 3 51 1 54 255 174 3 51 1 56 255 133 3 51 1 58 255 133 3 51 1 71 255 215 3 51 1 250 255 174 3 51 1 252 255 174 3 51 1 254 255 174 3 51 2 0 255 133 3 51 2 7 255 113 3 51 2 11 255 113 3 51 2 95 255 215 3 51 3 73 255 215 3 51 3 75 255 215 3 51 3 77 255 215 3 51 3 79 255 215 3 51 3 81 255 215 3 51 3 83 255 215 3 51 3 85 255 215 3 51 3 87 255 215 3 51 3 89 255 215 3 51 3 91 255 215 3 51 3 93 255 215 3 51 3 95 255 215 3 51 3 111 255 133 3 51 3 113 255 133 3 51 3 115 255 133 3 51 3 143 255 113 3 52 0 5 255 236 3 52 0 10 255 236 3 52 2 7 255 236 3 52 2 11 255 236 3 53 0 45 0 123 3 54 0 5 255 236 3 54 0 10 255 236 3 54 0 89 255 215 3 54 0 90 255 215 3 54 0 91 255 215 3 54 0 92 255 215 3 54 0 93 255 236 3 54 0 191 255 215 3 54 1 55 255 215 3 54 1 60 255 236 3 54 1 62 255 236 3 54 1 64 255 236 3 54 1 251 255 215 3 54 1 253 255 215 3 54 2 7 255 236 3 54 2 11 255 236 3 54 3 112 255 215 3 55 0 45 0 123 3 56 0 5 255 236 3 56 0 10 255 236 3 56 0 89 255 215 3 56 0 90 255 215 3 56 0 91 255 215 3 56 0 92 255 215 3 56 0 93 255 236 3 56 0 191 255 215 3 56 1 55 255 215 3 56 1 60 255 236 3 56 1 62 255 236 3 56 1 64 255 236 3 56 1 251 255 215 3 56 1 253 255 215 3 56 2 7 255 236 3 56 2 11 255 236 3 56 3 112 255 215 3 57 0 45 0 123 3 58 0 5 255 236 3 58 0 10 255 236 3 58 0 89 255 215 3 58 0 90 255 215 3 58 0 91 255 215 3 58 0 92 255 215 3 58 0 93 255 236 3 58 0 191 255 215 3 58 1 55 255 215 3 58 1 60 255 236 3 58 1 62 255 236 3 58 1 64 255 236 3 58 1 251 255 215 3 58 1 253 255 215 3 58 2 7 255 236 3 58 2 11 255 236 3 58 3 112 255 215 3 59 0 45 0 123 3 60 0 5 255 236 3 60 0 10 255 236 3 60 0 89 255 215 3 60 0 90 255 215 3 60 0 91 255 215 3 60 0 92 255 215 3 60 0 93 255 236 3 60 0 191 255 215 3 60 1 55 255 215 3 60 1 60 255 236 3 60 1 62 255 236 3 60 1 64 255 236 3 60 1 251 255 215 3 60 1 253 255 215 3 60 2 7 255 236 3 60 2 11 255 236 3 60 3 112 255 215 3 61 0 45 0 123 3 62 0 5 255 236 3 62 0 10 255 236 3 62 0 89 255 215 3 62 0 90 255 215 3 62 0 91 255 215 3 62 0 92 255 215 3 62 0 93 255 236 3 62 0 191 255 215 3 62 1 55 255 215 3 62 1 60 255 236 3 62 1 62 255 236 3 62 1 64 255 236 3 62 1 251 255 215 3 62 1 253 255 215 3 62 2 7 255 236 3 62 2 11 255 236 3 62 3 112 255 215 3 63 0 45 0 123 3 64 0 5 255 236 3 64 0 10 255 236 3 64 0 89 255 215 3 64 0 90 255 215 3 64 0 91 255 215 3 64 0 92 255 215 3 64 0 93 255 236 3 64 0 191 255 215 3 64 1 55 255 215 3 64 1 60 255 236 3 64 1 62 255 236 3 64 1 64 255 236 3 64 1 251 255 215 3 64 1 253 255 215 3 64 2 7 255 236 3 64 2 11 255 236 3 64 3 112 255 215 3 65 0 45 0 123 3 66 0 5 255 236 3 66 0 10 255 236 3 66 0 89 255 215 3 66 0 90 255 215 3 66 0 91 255 215 3 66 0 92 255 215 3 66 0 93 255 236 3 66 0 191 255 215 3 66 1 55 255 215 3 66 1 60 255 236 3 66 1 62 255 236 3 66 1 64 255 236 3 66 1 251 255 215 3 66 1 253 255 215 3 66 2 7 255 236 3 66 2 11 255 236 3 66 3 112 255 215 3 67 0 45 0 123 3 68 0 5 255 236 3 68 0 10 255 236 3 68 0 89 255 215 3 68 0 90 255 215 3 68 0 91 255 215 3 68 0 92 255 215 3 68 0 93 255 236 3 68 0 191 255 215 3 68 1 55 255 215 3 68 1 60 255 236 3 68 1 62 255 236 3 68 1 64 255 236 3 68 1 251 255 215 3 68 1 253 255 215 3 68 2 7 255 236 3 68 2 11 255 236 3 68 3 112 255 215 3 73 0 15 255 174 3 73 0 17 255 174 3 73 0 36 255 215 3 73 0 55 255 195 3 73 0 57 255 236 3 73 0 58 255 236 3 73 0 59 255 215 3 73 0 60 255 236 3 73 0 61 255 236 3 73 0 130 255 215 3 73 0 131 255 215 3 73 0 132 255 215 3 73 0 133 255 215 3 73 0 134 255 215 3 73 0 135 255 215 3 73 0 159 255 236 3 73 0 194 255 215 3 73 0 196 255 215 3 73 0 198 255 215 3 73 1 36 255 195 3 73 1 38 255 195 3 73 1 54 255 236 3 73 1 56 255 236 3 73 1 58 255 236 3 73 1 59 255 236 3 73 1 61 255 236 3 73 1 63 255 236 3 73 1 67 255 215 3 73 1 160 255 236 3 73 1 250 255 236 3 73 1 252 255 236 3 73 1 254 255 236 3 73 2 0 255 236 3 73 2 8 255 174 3 73 2 12 255 174 3 73 2 88 255 215 3 73 3 29 255 215 3 73 3 31 255 215 3 73 3 33 255 215 3 73 3 35 255 215 3 73 3 37 255 215 3 73 3 39 255 215 3 73 3 41 255 215 3 73 3 43 255 215 3 73 3 45 255 215 3 73 3 47 255 215 3 73 3 49 255 215 3 73 3 51 255 215 3 73 3 111 255 236 3 73 3 113 255 236 3 73 3 115 255 236 3 73 3 143 255 195 3 74 0 5 255 236 3 74 0 10 255 236 3 74 0 89 255 215 3 74 0 90 255 215 3 74 0 91 255 215 3 74 0 92 255 215 3 74 0 93 255 236 3 74 0 191 255 215 3 74 1 55 255 215 3 74 1 60 255 236 3 74 1 62 255 236 3 74 1 64 255 236 3 74 1 251 255 215 3 74 1 253 255 215 3 74 2 7 255 236 3 74 2 11 255 236 3 74 3 112 255 215 3 75 0 15 255 174 3 75 0 17 255 174 3 75 0 36 255 215 3 75 0 55 255 195 3 75 0 57 255 236 3 75 0 58 255 236 3 75 0 59 255 215 3 75 0 60 255 236 3 75 0 61 255 236 3 75 0 130 255 215 3 75 0 131 255 215 3 75 0 132 255 215 3 75 0 133 255 215 3 75 0 134 255 215 3 75 0 135 255 215 3 75 0 159 255 236 3 75 0 194 255 215 3 75 0 196 255 215 3 75 0 198 255 215 3 75 1 36 255 195 3 75 1 38 255 195 3 75 1 54 255 236 3 75 1 56 255 236 3 75 1 58 255 236 3 75 1 59 255 236 3 75 1 61 255 236 3 75 1 63 255 236 3 75 1 67 255 215 3 75 1 160 255 236 3 75 1 250 255 236 3 75 1 252 255 236 3 75 1 254 255 236 3 75 2 0 255 236 3 75 2 8 255 174 3 75 2 12 255 174 3 75 2 88 255 215 3 75 3 29 255 215 3 75 3 31 255 215 3 75 3 33 255 215 3 75 3 35 255 215 3 75 3 37 255 215 3 75 3 39 255 215 3 75 3 41 255 215 3 75 3 43 255 215 3 75 3 45 255 215 3 75 3 47 255 215 3 75 3 49 255 215 3 75 3 51 255 215 3 75 3 111 255 236 3 75 3 113 255 236 3 75 3 115 255 236 3 75 3 143 255 195 3 76 0 5 255 236 3 76 0 10 255 236 3 76 0 89 255 215 3 76 0 90 255 215 3 76 0 91 255 215 3 76 0 92 255 215 3 76 0 93 255 236 3 76 0 191 255 215 3 76 1 55 255 215 3 76 1 60 255 236 3 76 1 62 255 236 3 76 1 64 255 236 3 76 1 251 255 215 3 76 1 253 255 215 3 76 2 7 255 236 3 76 2 11 255 236 3 76 3 112 255 215 3 77 0 15 255 174 3 77 0 17 255 174 3 77 0 36 255 215 3 77 0 55 255 195 3 77 0 57 255 236 3 77 0 58 255 236 3 77 0 59 255 215 3 77 0 60 255 236 3 77 0 61 255 236 3 77 0 130 255 215 3 77 0 131 255 215 3 77 0 132 255 215 3 77 0 133 255 215 3 77 0 134 255 215 3 77 0 135 255 215 3 77 0 159 255 236 3 77 0 194 255 215 3 77 0 196 255 215 3 77 0 198 255 215 3 77 1 36 255 195 3 77 1 38 255 195 3 77 1 54 255 236 3 77 1 56 255 236 3 77 1 58 255 236 3 77 1 59 255 236 3 77 1 61 255 236 3 77 1 63 255 236 3 77 1 67 255 215 3 77 1 160 255 236 3 77 1 250 255 236 3 77 1 252 255 236 3 77 1 254 255 236 3 77 2 0 255 236 3 77 2 8 255 174 3 77 2 12 255 174 3 77 2 88 255 215 3 77 3 29 255 215 3 77 3 31 255 215 3 77 3 33 255 215 3 77 3 35 255 215 3 77 3 37 255 215 3 77 3 39 255 215 3 77 3 41 255 215 3 77 3 43 255 215 3 77 3 45 255 215 3 77 3 47 255 215 3 77 3 49 255 215 3 77 3 51 255 215 3 77 3 111 255 236 3 77 3 113 255 236 3 77 3 115 255 236 3 77 3 143 255 195 3 79 0 15 255 174 3 79 0 17 255 174 3 79 0 36 255 215 3 79 0 55 255 195 3 79 0 57 255 236 3 79 0 58 255 236 3 79 0 59 255 215 3 79 0 60 255 236 3 79 0 61 255 236 3 79 0 130 255 215 3 79 0 131 255 215 3 79 0 132 255 215 3 79 0 133 255 215 3 79 0 134 255 215 3 79 0 135 255 215 3 79 0 159 255 236 3 79 0 194 255 215 3 79 0 196 255 215 3 79 0 198 255 215 3 79 1 36 255 195 3 79 1 38 255 195 3 79 1 54 255 236 3 79 1 56 255 236 3 79 1 58 255 236 3 79 1 59 255 236 3 79 1 61 255 236 3 79 1 63 255 236 3 79 1 67 255 215 3 79 1 160 255 236 3 79 1 250 255 236 3 79 1 252 255 236 3 79 1 254 255 236 3 79 2 0 255 236 3 79 2 8 255 174 3 79 2 12 255 174 3 79 2 88 255 215 3 79 3 29 255 215 3 79 3 31 255 215 3 79 3 33 255 215 3 79 3 35 255 215 3 79 3 37 255 215 3 79 3 39 255 215 3 79 3 41 255 215 3 79 3 43 255 215 3 79 3 45 255 215 3 79 3 47 255 215 3 79 3 49 255 215 3 79 3 51 255 215 3 79 3 111 255 236 3 79 3 113 255 236 3 79 3 115 255 236 3 79 3 143 255 195 3 81 0 15 255 174 3 81 0 17 255 174 3 81 0 36 255 215 3 81 0 55 255 195 3 81 0 57 255 236 3 81 0 58 255 236 3 81 0 59 255 215 3 81 0 60 255 236 3 81 0 61 255 236 3 81 0 130 255 215 3 81 0 131 255 215 3 81 0 132 255 215 3 81 0 133 255 215 3 81 0 134 255 215 3 81 0 135 255 215 3 81 0 159 255 236 3 81 0 194 255 215 3 81 0 196 255 215 3 81 0 198 255 215 3 81 1 36 255 195 3 81 1 38 255 195 3 81 1 54 255 236 3 81 1 56 255 236 3 81 1 58 255 236 3 81 1 59 255 236 3 81 1 61 255 236 3 81 1 63 255 236 3 81 1 67 255 215 3 81 1 160 255 236 3 81 1 250 255 236 3 81 1 252 255 236 3 81 1 254 255 236 3 81 2 0 255 236 3 81 2 8 255 174 3 81 2 12 255 174 3 81 2 88 255 215 3 81 3 29 255 215 3 81 3 31 255 215 3 81 3 33 255 215 3 81 3 35 255 215 3 81 3 37 255 215 3 81 3 39 255 215 3 81 3 41 255 215 3 81 3 43 255 215 3 81 3 45 255 215 3 81 3 47 255 215 3 81 3 49 255 215 3 81 3 51 255 215 3 81 3 111 255 236 3 81 3 113 255 236 3 81 3 115 255 236 3 81 3 143 255 195 3 83 0 15 255 174 3 83 0 17 255 174 3 83 0 36 255 215 3 83 0 55 255 195 3 83 0 57 255 236 3 83 0 58 255 236 3 83 0 59 255 215 3 83 0 60 255 236 3 83 0 61 255 236 3 83 0 130 255 215 3 83 0 131 255 215 3 83 0 132 255 215 3 83 0 133 255 215 3 83 0 134 255 215 3 83 0 135 255 215 3 83 0 159 255 236 3 83 0 194 255 215 3 83 0 196 255 215 3 83 0 198 255 215 3 83 1 36 255 195 3 83 1 38 255 195 3 83 1 54 255 236 3 83 1 56 255 236 3 83 1 58 255 236 3 83 1 59 255 236 3 83 1 61 255 236 3 83 1 63 255 236 3 83 1 67 255 215 3 83 1 160 255 236 3 83 1 250 255 236 3 83 1 252 255 236 3 83 1 254 255 236 3 83 2 0 255 236 3 83 2 8 255 174 3 83 2 12 255 174 3 83 2 88 255 215 3 83 3 29 255 215 3 83 3 31 255 215 3 83 3 33 255 215 3 83 3 35 255 215 3 83 3 37 255 215 3 83 3 39 255 215 3 83 3 41 255 215 3 83 3 43 255 215 3 83 3 45 255 215 3 83 3 47 255 215 3 83 3 49 255 215 3 83 3 51 255 215 3 83 3 111 255 236 3 83 3 113 255 236 3 83 3 115 255 236 3 83 3 143 255 195 3 85 0 15 255 174 3 85 0 17 255 174 3 85 0 36 255 215 3 85 0 55 255 195 3 85 0 57 255 236 3 85 0 58 255 236 3 85 0 59 255 215 3 85 0 60 255 236 3 85 0 61 255 236 3 85 0 130 255 215 3 85 0 131 255 215 3 85 0 132 255 215 3 85 0 133 255 215 3 85 0 134 255 215 3 85 0 135 255 215 3 85 0 159 255 236 3 85 0 194 255 215 3 85 0 196 255 215 3 85 0 198 255 215 3 85 1 36 255 195 3 85 1 38 255 195 3 85 1 54 255 236 3 85 1 56 255 236 3 85 1 58 255 236 3 85 1 59 255 236 3 85 1 61 255 236 3 85 1 63 255 236 3 85 1 67 255 215 3 85 1 160 255 236 3 85 1 250 255 236 3 85 1 252 255 236 3 85 1 254 255 236 3 85 2 0 255 236 3 85 2 8 255 174 3 85 2 12 255 174 3 85 2 88 255 215 3 85 3 29 255 215 3 85 3 31 255 215 3 85 3 33 255 215 3 85 3 35 255 215 3 85 3 37 255 215 3 85 3 39 255 215 3 85 3 41 255 215 3 85 3 43 255 215 3 85 3 45 255 215 3 85 3 47 255 215 3 85 3 49 255 215 3 85 3 51 255 215 3 85 3 111 255 236 3 85 3 113 255 236 3 85 3 115 255 236 3 85 3 143 255 195 3 88 0 73 0 82 3 88 0 87 0 82 3 88 0 89 0 102 3 88 0 90 0 102 3 88 0 91 0 102 3 88 0 92 0 102 3 88 0 191 0 102 3 88 1 37 0 82 3 88 1 39 0 82 3 88 1 55 0 102 3 88 1 251 0 102 3 88 1 253 0 102 3 88 2 52 0 82 3 88 2 53 0 82 3 88 2 93 0 82 3 88 2 94 0 82 3 88 3 112 0 102 3 88 3 141 0 82 3 88 3 144 0 82 3 90 0 73 0 82 3 90 0 87 0 82 3 90 0 89 0 102 3 90 0 90 0 102 3 90 0 91 0 102 3 90 0 92 0 102 3 90 0 191 0 102 3 90 1 37 0 82 3 90 1 39 0 82 3 90 1 55 0 102 3 90 1 251 0 102 3 90 1 253 0 102 3 90 2 52 0 82 3 90 2 53 0 82 3 90 2 93 0 82 3 90 2 94 0 82 3 90 3 112 0 102 3 90 3 141 0 82 3 90 3 144 0 82 3 92 0 73 0 82 3 92 0 87 0 82 3 92 0 89 0 102 3 92 0 90 0 102 3 92 0 91 0 102 3 92 0 92 0 102 3 92 0 191 0 102 3 92 1 37 0 82 3 92 1 39 0 82 3 92 1 55 0 102 3 92 1 251 0 102 3 92 1 253 0 102 3 92 2 52 0 82 3 92 2 53 0 82 3 92 2 93 0 82 3 92 2 94 0 82 3 92 3 112 0 102 3 92 3 141 0 82 3 92 3 144 0 82 3 94 0 73 0 82 3 94 0 87 0 82 3 94 0 89 0 102 3 94 0 90 0 102 3 94 0 91 0 102 3 94 0 92 0 102 3 94 0 191 0 102 3 94 1 37 0 82 3 94 1 39 0 82 3 94 1 55 0 102 3 94 1 251 0 102 3 94 1 253 0 102 3 94 2 52 0 82 3 94 2 53 0 82 3 94 2 93 0 82 3 94 2 94 0 82 3 94 3 112 0 102 3 94 3 141 0 82 3 94 3 144 0 82 3 96 0 73 0 82 3 96 0 87 0 82 3 96 0 89 0 102 3 96 0 90 0 102 3 96 0 91 0 102 3 96 0 92 0 102 3 96 0 191 0 102 3 96 1 37 0 82 3 96 1 39 0 82 3 96 1 55 0 102 3 96 1 251 0 102 3 96 1 253 0 102 3 96 2 52 0 82 3 96 2 53 0 82 3 96 2 93 0 82 3 96 2 94 0 82 3 96 3 112 0 102 3 96 3 141 0 82 3 96 3 144 0 82 3 97 0 15 255 215 3 97 0 17 255 215 3 97 0 36 255 236 3 97 0 130 255 236 3 97 0 131 255 236 3 97 0 132 255 236 3 97 0 133 255 236 3 97 0 134 255 236 3 97 0 135 255 236 3 97 0 194 255 236 3 97 0 196 255 236 3 97 0 198 255 236 3 97 1 67 255 236 3 97 2 8 255 215 3 97 2 12 255 215 3 97 2 88 255 236 3 97 3 29 255 236 3 97 3 31 255 236 3 97 3 33 255 236 3 97 3 35 255 236 3 97 3 37 255 236 3 97 3 39 255 236 3 97 3 41 255 236 3 97 3 43 255 236 3 97 3 45 255 236 3 97 3 47 255 236 3 97 3 49 255 236 3 97 3 51 255 236 3 102 0 73 0 102 3 102 0 87 0 102 3 102 0 89 0 102 3 102 0 90 0 102 3 102 0 91 0 102 3 102 0 92 0 102 3 102 0 191 0 102 3 102 1 37 0 102 3 102 1 39 0 102 3 102 1 55 0 102 3 102 1 251 0 102 3 102 1 253 0 102 3 102 2 52 0 102 3 102 2 53 0 102 3 102 2 93 0 102 3 102 2 94 0 102 3 102 3 112 0 102 3 102 3 141 0 102 3 102 3 144 0 102 3 104 0 73 0 102 3 104 0 87 0 102 3 104 0 89 0 102 3 104 0 90 0 102 3 104 0 91 0 102 3 104 0 92 0 102 3 104 0 191 0 102 3 104 1 37 0 102 3 104 1 39 0 102 3 104 1 55 0 102 3 104 1 251 0 102 3 104 1 253 0 102 3 104 2 52 0 102 3 104 2 53 0 102 3 104 2 93 0 102 3 104 2 94 0 102 3 104 3 112 0 102 3 104 3 141 0 102 3 104 3 144 0 102 3 106 0 73 0 102 3 106 0 87 0 102 3 106 0 89 0 102 3 106 0 90 0 102 3 106 0 91 0 102 3 106 0 92 0 102 3 106 0 191 0 102 3 106 1 37 0 102 3 106 1 39 0 102 3 106 1 55 0 102 3 106 1 251 0 102 3 106 1 253 0 102 3 106 2 52 0 102 3 106 2 53 0 102 3 106 2 93 0 102 3 106 2 94 0 102 3 106 3 112 0 102 3 106 3 141 0 102 3 106 3 144 0 102 3 108 0 73 0 102 3 108 0 87 0 102 3 108 0 89 0 102 3 108 0 90 0 102 3 108 0 91 0 102 3 108 0 92 0 102 3 108 0 191 0 102 3 108 1 37 0 102 3 108 1 39 0 102 3 108 1 55 0 102 3 108 1 251 0 102 3 108 1 253 0 102 3 108 2 52 0 102 3 108 2 53 0 102 3 108 2 93 0 102 3 108 2 94 0 102 3 108 3 112 0 102 3 108 3 141 0 102 3 108 3 144 0 102 3 110 0 73 0 102 3 110 0 87 0 102 3 110 0 89 0 102 3 110 0 90 0 102 3 110 0 91 0 102 3 110 0 92 0 102 3 110 0 191 0 102 3 110 1 37 0 102 3 110 1 39 0 102 3 110 1 55 0 102 3 110 1 251 0 102 3 110 1 253 0 102 3 110 2 52 0 102 3 110 2 53 0 102 3 110 2 93 0 102 3 110 2 94 0 102 3 110 3 112 0 102 3 110 3 141 0 102 3 110 3 144 0 102 3 111 0 15 255 133 3 111 0 17 255 133 3 111 0 34 0 41 3 111 0 36 255 133 3 111 0 38 255 215 3 111 0 42 255 215 3 111 0 50 255 215 3 111 0 52 255 215 3 111 0 68 255 154 3 111 0 70 255 154 3 111 0 71 255 154 3 111 0 72 255 154 3 111 0 74 255 215 3 111 0 80 255 195 3 111 0 81 255 195 3 111 0 82 255 154 3 111 0 83 255 195 3 111 0 84 255 154 3 111 0 85 255 195 3 111 0 86 255 174 3 111 0 88 255 195 3 111 0 93 255 215 3 111 0 130 255 133 3 111 0 131 255 133 3 111 0 132 255 133 3 111 0 133 255 133 3 111 0 134 255 133 3 111 0 135 255 133 3 111 0 137 255 215 3 111 0 148 255 215 3 111 0 149 255 215 3 111 0 150 255 215 3 111 0 151 255 215 3 111 0 152 255 215 3 111 0 154 255 215 3 111 0 162 255 154 3 111 0 163 255 154 3 111 0 164 255 154 3 111 0 165 255 154 3 111 0 166 255 154 3 111 0 167 255 154 3 111 0 168 255 154 3 111 0 169 255 154 3 111 0 170 255 154 3 111 0 171 255 154 3 111 0 172 255 154 3 111 0 173 255 154 3 111 0 180 255 154 3 111 0 181 255 154 3 111 0 182 255 154 3 111 0 183 255 154 3 111 0 184 255 154 3 111 0 186 255 154 3 111 0 187 255 195 3 111 0 188 255 195 3 111 0 189 255 195 3 111 0 190 255 195 3 111 0 194 255 133 3 111 0 195 255 154 3 111 0 196 255 133 3 111 0 197 255 154 3 111 0 198 255 133 3 111 0 199 255 154 3 111 0 200 255 215 3 111 0 201 255 154 3 111 0 202 255 215 3 111 0 203 255 154 3 111 0 204 255 215 3 111 0 205 255 154 3 111 0 206 255 215 3 111 0 207 255 154 3 111 0 209 255 154 3 111 0 211 255 154 3 111 0 213 255 154 3 111 0 215 255 154 3 111 0 217 255 154 3 111 0 219 255 154 3 111 0 221 255 154 3 111 0 222 255 215 3 111 0 223 255 215 3 111 0 224 255 215 3 111 0 225 255 215 3 111 0 226 255 215 3 111 0 227 255 215 3 111 0 228 255 215 3 111 0 229 255 215 3 111 0 250 255 195 3 111 1 6 255 195 3 111 1 8 255 195 3 111 1 13 255 195 3 111 1 14 255 215 3 111 1 15 255 154 3 111 1 16 255 215 3 111 1 17 255 154 3 111 1 18 255 215 3 111 1 19 255 154 3 111 1 20 255 215 3 111 1 21 255 154 3 111 1 23 255 195 3 111 1 25 255 195 3 111 1 29 255 174 3 111 1 33 255 174 3 111 1 43 255 195 3 111 1 45 255 195 3 111 1 47 255 195 3 111 1 49 255 195 3 111 1 51 255 195 3 111 1 53 255 195 3 111 1 60 255 215 3 111 1 62 255 215 3 111 1 64 255 215 3 111 1 67 255 133 3 111 1 68 255 154 3 111 1 70 255 154 3 111 1 71 255 215 3 111 1 72 255 154 3 111 1 74 255 174 3 111 2 8 255 133 3 111 2 12 255 133 3 111 2 87 255 195 3 111 2 88 255 133 3 111 2 89 255 154 3 111 2 95 255 215 3 111 2 96 255 154 3 111 2 98 255 195 3 111 3 29 255 133 3 111 3 30 255 154 3 111 3 31 255 133 3 111 3 32 255 154 3 111 3 33 255 133 3 111 3 34 255 154 3 111 3 35 255 133 3 111 3 37 255 133 3 111 3 38 255 154 3 111 3 39 255 133 3 111 3 40 255 154 3 111 3 41 255 133 3 111 3 42 255 154 3 111 3 43 255 133 3 111 3 44 255 154 3 111 3 45 255 133 3 111 3 46 255 154 3 111 3 47 255 133 3 111 3 48 255 154 3 111 3 49 255 133 3 111 3 50 255 154 3 111 3 51 255 133 3 111 3 52 255 154 3 111 3 54 255 154 3 111 3 56 255 154 3 111 3 58 255 154 3 111 3 60 255 154 3 111 3 64 255 154 3 111 3 66 255 154 3 111 3 68 255 154 3 111 3 73 255 215 3 111 3 74 255 154 3 111 3 75 255 215 3 111 3 76 255 154 3 111 3 77 255 215 3 111 3 78 255 154 3 111 3 79 255 215 3 111 3 81 255 215 3 111 3 82 255 154 3 111 3 83 255 215 3 111 3 84 255 154 3 111 3 85 255 215 3 111 3 86 255 154 3 111 3 87 255 215 3 111 3 88 255 154 3 111 3 89 255 215 3 111 3 90 255 154 3 111 3 91 255 215 3 111 3 92 255 154 3 111 3 93 255 215 3 111 3 94 255 154 3 111 3 95 255 215 3 111 3 96 255 154 3 111 3 98 255 195 3 111 3 100 255 195 3 111 3 102 255 195 3 111 3 104 255 195 3 111 3 106 255 195 3 111 3 108 255 195 3 111 3 110 255 195 3 112 0 5 0 82 3 112 0 10 0 82 3 112 0 15 255 174 3 112 0 17 255 174 3 112 0 34 0 41 3 112 2 7 0 82 3 112 2 8 255 174 3 112 2 11 0 82 3 112 2 12 255 174 3 113 0 15 255 133 3 113 0 17 255 133 3 113 0 34 0 41 3 113 0 36 255 133 3 113 0 38 255 215 3 113 0 42 255 215 3 113 0 50 255 215 3 113 0 52 255 215 3 113 0 68 255 154 3 113 0 70 255 154 3 113 0 71 255 154 3 113 0 72 255 154 3 113 0 74 255 215 3 113 0 80 255 195 3 113 0 81 255 195 3 113 0 82 255 154 3 113 0 83 255 195 3 113 0 84 255 154 3 113 0 85 255 195 3 113 0 86 255 174 3 113 0 88 255 195 3 113 0 93 255 215 3 113 0 130 255 133 3 113 0 131 255 133 3 113 0 132 255 133 3 113 0 133 255 133 3 113 0 134 255 133 3 113 0 135 255 133 3 113 0 137 255 215 3 113 0 148 255 215 3 113 0 149 255 215 3 113 0 150 255 215 3 113 0 151 255 215 3 113 0 152 255 215 3 113 0 154 255 215 3 113 0 162 255 154 3 113 0 163 255 154 3 113 0 164 255 154 3 113 0 165 255 154 3 113 0 166 255 154 3 113 0 167 255 154 3 113 0 168 255 154 3 113 0 169 255 154 3 113 0 170 255 154 3 113 0 171 255 154 3 113 0 172 255 154 3 113 0 173 255 154 3 113 0 180 255 154 3 113 0 181 255 154 3 113 0 182 255 154 3 113 0 183 255 154 3 113 0 184 255 154 3 113 0 186 255 154 3 113 0 187 255 195 3 113 0 188 255 195 3 113 0 189 255 195 3 113 0 190 255 195 3 113 0 194 255 133 3 113 0 195 255 154 3 113 0 196 255 133 3 113 0 197 255 154 3 113 0 198 255 133 3 113 0 199 255 154 3 113 0 200 255 215 3 113 0 201 255 154 3 113 0 202 255 215 3 113 0 203 255 154 3 113 0 204 255 215 3 113 0 205 255 154 3 113 0 206 255 215 3 113 0 207 255 154 3 113 0 209 255 154 3 113 0 211 255 154 3 113 0 213 255 154 3 113 0 215 255 154 3 113 0 217 255 154 3 113 0 219 255 154 3 113 0 221 255 154 3 113 0 222 255 215 3 113 0 223 255 215 3 113 0 224 255 215 3 113 0 225 255 215 3 113 0 226 255 215 3 113 0 227 255 215 3 113 0 228 255 215 3 113 0 229 255 215 3 113 0 250 255 195 3 113 1 6 255 195 3 113 1 8 255 195 3 113 1 13 255 195 3 113 1 14 255 215 3 113 1 15 255 154 3 113 1 16 255 215 3 113 1 17 255 154 3 113 1 18 255 215 3 113 1 19 255 154 3 113 1 20 255 215 3 113 1 21 255 154 3 113 1 23 255 195 3 113 1 25 255 195 3 113 1 29 255 174 3 113 1 33 255 174 3 113 1 43 255 195 3 113 1 45 255 195 3 113 1 47 255 195 3 113 1 49 255 195 3 113 1 51 255 195 3 113 1 53 255 195 3 113 1 60 255 215 3 113 1 62 255 215 3 113 1 64 255 215 3 113 1 67 255 133 3 113 1 68 255 154 3 113 1 70 255 154 3 113 1 71 255 215 3 113 1 72 255 154 3 113 1 74 255 174 3 113 2 8 255 133 3 113 2 12 255 133 3 113 2 87 255 195 3 113 2 88 255 133 3 113 2 89 255 154 3 113 2 95 255 215 3 113 2 96 255 154 3 113 2 98 255 195 3 113 3 29 255 133 3 113 3 30 255 154 3 113 3 31 255 133 3 113 3 32 255 154 3 113 3 33 255 133 3 113 3 34 255 154 3 113 3 35 255 133 3 113 3 37 255 133 3 113 3 38 255 154 3 113 3 39 255 133 3 113 3 40 255 154 3 113 3 41 255 133 3 113 3 42 255 154 3 113 3 43 255 133 3 113 3 44 255 154 3 113 3 45 255 133 3 113 3 46 255 154 3 113 3 47 255 133 3 113 3 48 255 154 3 113 3 49 255 133 3 113 3 50 255 154 3 113 3 51 255 133 3 113 3 52 255 154 3 113 3 54 255 154 3 113 3 56 255 154 3 113 3 58 255 154 3 113 3 60 255 154 3 113 3 64 255 154 3 113 3 66 255 154 3 113 3 68 255 154 3 113 3 73 255 215 3 113 3 74 255 154 3 113 3 75 255 215 3 113 3 76 255 154 3 113 3 77 255 215 3 113 3 78 255 154 3 113 3 79 255 215 3 113 3 81 255 215 3 113 3 82 255 154 3 113 3 83 255 215 3 113 3 84 255 154 3 113 3 85 255 215 3 113 3 86 255 154 3 113 3 87 255 215 3 113 3 88 255 154 3 113 3 89 255 215 3 113 3 90 255 154 3 113 3 91 255 215 3 113 3 92 255 154 3 113 3 93 255 215 3 113 3 94 255 154 3 113 3 95 255 215 3 113 3 96 255 154 3 113 3 98 255 195 3 113 3 100 255 195 3 113 3 102 255 195 3 113 3 104 255 195 3 113 3 106 255 195 3 113 3 108 255 195 3 113 3 110 255 195 3 114 0 5 0 82 3 114 0 10 0 82 3 114 0 15 255 174 3 114 0 17 255 174 3 114 0 34 0 41 3 114 2 7 0 82 3 114 2 8 255 174 3 114 2 11 0 82 3 114 2 12 255 174 3 115 0 15 255 133 3 115 0 17 255 133 3 115 0 34 0 41 3 115 0 36 255 133 3 115 0 38 255 215 3 115 0 42 255 215 3 115 0 50 255 215 3 115 0 52 255 215 3 115 0 68 255 154 3 115 0 70 255 154 3 115 0 71 255 154 3 115 0 72 255 154 3 115 0 74 255 215 3 115 0 80 255 195 3 115 0 81 255 195 3 115 0 82 255 154 3 115 0 83 255 195 3 115 0 84 255 154 3 115 0 85 255 195 3 115 0 86 255 174 3 115 0 88 255 195 3 115 0 93 255 215 3 115 0 130 255 133 3 115 0 131 255 133 3 115 0 132 255 133 3 115 0 133 255 133 3 115 0 134 255 133 3 115 0 135 255 133 3 115 0 137 255 215 3 115 0 148 255 215 3 115 0 149 255 215 3 115 0 150 255 215 3 115 0 151 255 215 3 115 0 152 255 215 3 115 0 154 255 215 3 115 0 162 255 154 3 115 0 163 255 154 3 115 0 164 255 154 3 115 0 165 255 154 3 115 0 166 255 154 3 115 0 167 255 154 3 115 0 168 255 154 3 115 0 169 255 154 3 115 0 170 255 154 3 115 0 171 255 154 3 115 0 172 255 154 3 115 0 173 255 154 3 115 0 180 255 154 3 115 0 181 255 154 3 115 0 182 255 154 3 115 0 183 255 154 3 115 0 184 255 154 3 115 0 186 255 154 3 115 0 187 255 195 3 115 0 188 255 195 3 115 0 189 255 195 3 115 0 190 255 195 3 115 0 194 255 133 3 115 0 195 255 154 3 115 0 196 255 133 3 115 0 197 255 154 3 115 0 198 255 133 3 115 0 199 255 154 3 115 0 200 255 215 3 115 0 201 255 154 3 115 0 202 255 215 3 115 0 203 255 154 3 115 0 204 255 215 3 115 0 205 255 154 3 115 0 206 255 215 3 115 0 207 255 154 3 115 0 209 255 154 3 115 0 211 255 154 3 115 0 213 255 154 3 115 0 215 255 154 3 115 0 217 255 154 3 115 0 219 255 154 3 115 0 221 255 154 3 115 0 222 255 215 3 115 0 223 255 215 3 115 0 224 255 215 3 115 0 225 255 215 3 115 0 226 255 215 3 115 0 227 255 215 3 115 0 228 255 215 3 115 0 229 255 215 3 115 0 250 255 195 3 115 1 6 255 195 3 115 1 8 255 195 3 115 1 13 255 195 3 115 1 14 255 215 3 115 1 15 255 154 3 115 1 16 255 215 3 115 1 17 255 154 3 115 1 18 255 215 3 115 1 19 255 154 3 115 1 20 255 215 3 115 1 21 255 154 3 115 1 23 255 195 3 115 1 25 255 195 3 115 1 29 255 174 3 115 1 33 255 174 3 115 1 43 255 195 3 115 1 45 255 195 3 115 1 47 255 195 3 115 1 49 255 195 3 115 1 51 255 195 3 115 1 53 255 195 3 115 1 60 255 215 3 115 1 62 255 215 3 115 1 64 255 215 3 115 1 67 255 133 3 115 1 68 255 154 3 115 1 70 255 154 3 115 1 71 255 215 3 115 1 72 255 154 3 115 1 74 255 174 3 115 2 8 255 133 3 115 2 12 255 133 3 115 2 87 255 195 3 115 2 88 255 133 3 115 2 89 255 154 3 115 2 95 255 215 3 115 2 96 255 154 3 115 2 98 255 195 3 115 3 29 255 133 3 115 3 30 255 154 3 115 3 31 255 133 3 115 3 32 255 154 3 115 3 33 255 133 3 115 3 34 255 154 3 115 3 35 255 133 3 115 3 37 255 133 3 115 3 38 255 154 3 115 3 39 255 133 3 115 3 40 255 154 3 115 3 41 255 133 3 115 3 42 255 154 3 115 3 43 255 133 3 115 3 44 255 154 3 115 3 45 255 133 3 115 3 46 255 154 3 115 3 47 255 133 3 115 3 48 255 154 3 115 3 49 255 133 3 115 3 50 255 154 3 115 3 51 255 133 3 115 3 52 255 154 3 115 3 54 255 154 3 115 3 56 255 154 3 115 3 58 255 154 3 115 3 60 255 154 3 115 3 64 255 154 3 115 3 66 255 154 3 115 3 68 255 154 3 115 3 73 255 215 3 115 3 74 255 154 3 115 3 75 255 215 3 115 3 76 255 154 3 115 3 77 255 215 3 115 3 78 255 154 3 115 3 79 255 215 3 115 3 81 255 215 3 115 3 82 255 154 3 115 3 83 255 215 3 115 3 84 255 154 3 115 3 85 255 215 3 115 3 86 255 154 3 115 3 87 255 215 3 115 3 88 255 154 3 115 3 89 255 215 3 115 3 90 255 154 3 115 3 91 255 215 3 115 3 92 255 154 3 115 3 93 255 215 3 115 3 94 255 154 3 115 3 95 255 215 3 115 3 96 255 154 3 115 3 98 255 195 3 115 3 100 255 195 3 115 3 102 255 195 3 115 3 104 255 195 3 115 3 106 255 195 3 115 3 108 255 195 3 115 3 110 255 195 3 116 0 5 0 82 3 116 0 10 0 82 3 116 0 15 255 174 3 116 0 17 255 174 3 116 0 34 0 41 3 116 2 7 0 82 3 116 2 8 255 174 3 116 2 11 0 82 3 116 2 12 255 174 3 141 0 5 0 123 3 141 0 10 0 123 3 141 2 7 0 123 3 141 2 11 0 123 3 143 0 15 255 133 3 143 0 16 255 174 3 143 0 17 255 133 3 143 0 34 0 41 3 143 0 36 255 113 3 143 0 38 255 215 3 143 0 42 255 215 3 143 0 50 255 215 3 143 0 52 255 215 3 143 0 55 0 41 3 143 0 68 255 92 3 143 0 70 255 113 3 143 0 71 255 113 3 143 0 72 255 113 3 143 0 74 255 113 3 143 0 80 255 154 3 143 0 81 255 154 3 143 0 82 255 113 3 143 0 83 255 154 3 143 0 84 255 113 3 143 0 85 255 154 3 143 0 86 255 133 3 143 0 88 255 154 3 143 0 89 255 215 3 143 0 90 255 215 3 143 0 91 255 215 3 143 0 92 255 215 3 143 0 93 255 174 3 143 0 130 255 113 3 143 0 131 255 113 3 143 0 132 255 113 3 143 0 133 255 113 3 143 0 134 255 113 3 143 0 135 255 113 3 143 0 137 255 215 3 143 0 148 255 215 3 143 0 149 255 215 3 143 0 150 255 215 3 143 0 151 255 215 3 143 0 152 255 215 3 143 0 154 255 215 3 143 0 162 255 113 3 143 0 163 255 92 3 143 0 164 255 92 3 143 0 165 255 92 3 143 0 166 255 92 3 143 0 167 255 92 3 143 0 168 255 92 3 143 0 169 255 113 3 143 0 170 255 113 3 143 0 171 255 113 3 143 0 172 255 113 3 143 0 173 255 113 3 143 0 180 255 113 3 143 0 181 255 113 3 143 0 182 255 113 3 143 0 183 255 113 3 143 0 184 255 113 3 143 0 186 255 113 3 143 0 187 255 154 3 143 0 188 255 154 3 143 0 189 255 154 3 143 0 190 255 154 3 143 0 191 255 215 3 143 0 194 255 113 3 143 0 195 255 92 3 143 0 196 255 113 3 143 0 197 255 92 3 143 0 198 255 113 3 143 0 199 255 92 3 143 0 200 255 215 3 143 0 201 255 113 3 143 0 202 255 215 3 143 0 203 255 113 3 143 0 204 255 215 3 143 0 205 255 113 3 143 0 206 255 215 3 143 0 207 255 113 3 143 0 209 255 113 3 143 0 211 255 113 3 143 0 213 255 113 3 143 0 215 255 113 3 143 0 217 255 113 3 143 0 219 255 113 3 143 0 221 255 113 3 143 0 222 255 215 3 143 0 223 255 113 3 143 0 224 255 215 3 143 0 225 255 113 3 143 0 226 255 215 3 143 0 227 255 113 3 143 0 228 255 215 3 143 0 229 255 113 3 143 0 250 255 154 3 143 1 6 255 154 3 143 1 8 255 154 3 143 1 13 255 154 3 143 1 14 255 215 3 143 1 15 255 113 3 143 1 16 255 215 3 143 1 17 255 113 3 143 1 18 255 215 3 143 1 19 255 113 3 143 1 20 255 215 3 143 1 21 255 113 3 143 1 23 255 154 3 143 1 25 255 154 3 143 1 29 255 133 3 143 1 33 255 133 3 143 1 36 0 41 3 143 1 38 0 41 3 143 1 43 255 154 3 143 1 45 255 154 3 143 1 47 255 154 3 143 1 49 255 154 3 143 1 51 255 154 3 143 1 53 255 154 3 143 1 55 255 215 3 143 1 60 255 174 3 143 1 62 255 174 3 143 1 64 255 174 3 143 1 67 255 113 3 143 1 68 255 92 3 143 1 70 255 92 3 143 1 71 255 215 3 143 1 72 255 113 3 143 1 74 255 133 3 143 1 251 255 215 3 143 1 253 255 215 3 143 2 2 255 174 3 143 2 3 255 174 3 143 2 4 255 174 3 143 2 8 255 133 3 143 2 12 255 133 3 143 2 87 255 154 3 143 2 88 255 113 3 143 2 89 255 92 3 143 2 95 255 215 3 143 2 96 255 113 3 143 2 98 255 154 3 143 3 29 255 113 3 143 3 30 255 92 3 143 3 31 255 113 3 143 3 32 255 92 3 143 3 33 255 113 3 143 3 34 255 92 3 143 3 35 255 113 3 143 3 37 255 113 3 143 3 38 255 92 3 143 3 39 255 113 3 143 3 40 255 92 3 143 3 41 255 113 3 143 3 42 255 92 3 143 3 43 255 113 3 143 3 44 255 92 3 143 3 45 255 113 3 143 3 46 255 92 3 143 3 47 255 113 3 143 3 48 255 92 3 143 3 49 255 113 3 143 3 50 255 92 3 143 3 51 255 113 3 143 3 52 255 92 3 143 3 54 255 113 3 143 3 56 255 113 3 143 3 58 255 113 3 143 3 60 255 113 3 143 3 64 255 113 3 143 3 66 255 113 3 143 3 68 255 113 3 143 3 73 255 215 3 143 3 74 255 113 3 143 3 75 255 215 3 143 3 76 255 113 3 143 3 77 255 215 3 143 3 78 255 113 3 143 3 79 255 215 3 143 3 81 255 215 3 143 3 82 255 113 3 143 3 83 255 215 3 143 3 84 255 113 3 143 3 85 255 215 3 143 3 86 255 113 3 143 3 87 255 215 3 143 3 88 255 113 3 143 3 89 255 215 3 143 3 90 255 113 3 143 3 91 255 215 3 143 3 92 255 113 3 143 3 93 255 215 3 143 3 94 255 113 3 143 3 95 255 215 3 143 3 96 255 113 3 143 3 98 255 154 3 143 3 100 255 154 3 143 3 102 255 154 3 143 3 104 255 154 3 143 3 106 255 154 3 143 3 108 255 154 3 143 3 110 255 154 3 143 3 112 255 215 3 143 3 143 0 41 3 144 0 5 0 41 3 144 0 10 0 41 3 144 2 7 0 41 3 144 2 11 0 41 0 0 0 0 0 26 1 62 0 1 0 0 0 0 0 0 0 57 0 0 0 1 0 0 0 0 0 1 0 9 0 57 0 1 0 0 0 0 0 2 0 7 0 66 0 1 0 0 0 0 0 3 0 30 0 73 0 1 0 0 0 0 0 4 0 9 0 57 0 1 0 0 0 0 0 5 0 12 0 103 0 1 0 0 0 0 0 6 0 8 0 115 0 1 0 0 0 0 0 7 0 82 0 123 0 1 0 0 0 0 0 8 0 20 0 205 0 1 0 0 0 0 0 11 0 28 0 225 0 1 0 0 0 0 0 12 0 46 0 253 0 1 0 0 0 0 0 13 0 46 1 43 0 1 0 0 0 0 0 14 0 42 1 89 0 3 0 1 4 9 0 0 0 114 1 131 0 3 0 1 4 9 0 1 0 18 1 245 0 3 0 1 4 9 0 2 0 14 2 7 0 3 0 1 4 9 0 3 0 60 2 21 0 3 0 1 4 9 0 4 0 18 1 245 0 3 0 1 4 9 0 5 0 24 2 81 0 3 0 1 4 9 0 6 0 16 2 105 0 3 0 1 4 9 0 7 0 164 2 121 0 3 0 1 4 9 0 8 0 40 3 29 0 3 0 1 4 9 0 11 0 56 3 69 0 3 0 1 4 9 0 12 0 92 3 125 0 3 0 1 4 9 0 13 0 92 3 217 0 3 0 1 4 9 0 14 0 84 4 53 68 105 103 105 116 105 122 101 100 32 100 97 116 97 32 99 111 112 121 114 105 103 104 116 32 169 32 50 48 49 48 45 50 48 49 49 44 32 71 111 111 103 108 101 32 67 111 114 112 111 114 97 116 105 111 110 46 79 112 101 110 32 83 97 110 115 82 101 103 117 108 97 114 65 115 99 101 110 100 101 114 32 45 32 79 112 101 110 32 83 97 110 115 32 66 117 105 108 100 32 49 48 48 86 101 114 115 105 111 110 32 49 46 49 48 79 112 101 110 83 97 110 115 79 112 101 110 32 83 97 110 115 32 105 115 32 97 32 116 114 97 100 101 109 97 114 107 32 111 102 32 71 111 111 103 108 101 32 97 110 100 32 109 97 121 32 98 101 32 114 101 103 105 115 116 101 114 101 100 32 105 110 32 99 101 114 116 97 105 110 32 106 117 114 105 115 100 105 99 116 105 111 110 115 46 65 115 99 101 110 100 101 114 32 67 111 114 112 111 114 97 116 105 111 110 104 116 116 112 58 47 47 119 119 119 46 97 115 99 101 110 100 101 114 99 111 114 112 46 99 111 109 47 104 116 116 112 58 47 47 119 119 119 46 97 115 99 101 110 100 101 114 99 111 114 112 46 99 111 109 47 116 121 112 101 100 101 115 105 103 110 101 114 115 46 104 116 109 108 76 105 99 101 110 115 101 100 32 117 110 100 101 114 32 116 104 101 32 65 112 97 99 104 101 32 76 105 99 101 110 115 101 44 32 86 101 114 115 105 111 110 32 50 46 48 104 116 116 112 58 47 47 119 119 119 46 97 112 97 99 104 101 46 111 114 103 47 108 105 99 101 110 115 101 115 47 76 73 67 69 78 83 69 45 50 46 48 0 68 0 105 0 103 0 105 0 116 0 105 0 122 0 101 0 100 0 32 0 100 0 97 0 116 0 97 0 32 0 99 0 111 0 112 0 121 0 114 0 105 0 103 0 104 0 116 0 32 0 169 0 32 0 50 0 48 0 49 0 48 0 45 0 50 0 48 0 49 0 49 0 44 0 32 0 71 0 111 0 111 0 103 0 108 0 101 0 32 0 67 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 105 0 111 0 110 0 46 0 79 0 112 0 101 0 110 0 32 0 83 0 97 0 110 0 115 0 82 0 101 0 103 0 117 0 108 0 97 0 114 0 65 0 115 0 99 0 101 0 110 0 100 0 101 0 114 0 32 0 45 0 32 0 79 0 112 0 101 0 110 0 32 0 83 0 97 0 110 0 115 0 32 0 66 0 117 0 105 0 108 0 100 0 32 0 49 0 48 0 48 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 49 0 46 0 49 0 48 0 79 0 112 0 101 0 110 0 83 0 97 0 110 0 115 0 79 0 112 0 101 0 110 0 32 0 83 0 97 0 110 0 115 0 32 0 105 0 115 0 32 0 97 0 32 0 116 0 114 0 97 0 100 0 101 0 109 0 97 0 114 0 107 0 32 0 111 0 102 0 32 0 71 0 111 0 111 0 103 0 108 0 101 0 32 0 97 0 110 0 100 0 32 0 109 0 97 0 121 0 32 0 98 0 101 0 32 0 114 0 101 0 103 0 105 0 115 0 116 0 101 0 114 0 101 0 100 0 32 0 105 0 110 0 32 0 99 0 101 0 114 0 116 0 97 0 105 0 110 0 32 0 106 0 117 0 114 0 105 0 115 0 100 0 105 0 99 0 116 0 105 0 111 0 110 0 115 0 46 0 65 0 115 0 99 0 101 0 110 0 100 0 101 0 114 0 32 0 67 0 111 0 114 0 112 0 111 0 114 0 97 0 116 0 105 0 111 0 110 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 115 0 99 0 101 0 110 0 100 0 101 0 114 0 99 0 111 0 114 0 112 0 46 0 99 0 111 0 109 0 47 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 115 0 99 0 101 0 110 0 100 0 101 0 114 0 99 0 111 0 114 0 112 0 46 0 99 0 111 0 109 0 47 0 116 0 121 0 112 0 101 0 100 0 101 0 115 0 105 0 103 0 110 0 101 0 114 0 115 0 46 0 104 0 116 0 109 0 108 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 100 0 32 0 117 0 110 0 100 0 101 0 114 0 32 0 116 0 104 0 101 0 32 0 65 0 112 0 97 0 99 0 104 0 101 0 32 0 76 0 105 0 99 0 101 0 110 0 115 0 101 0 44 0 32 0 86 0 101 0 114 0 115 0 105 0 111 0 110 0 32 0 50 0 46 0 48 0 104 0 116 0 116 0 112 0 58 0 47 0 47 0 119 0 119 0 119 0 46 0 97 0 112 0 97 0 99 0 104 0 101 0 46 0 111 0 114 0 103 0 47 0 108 0 105 0 99 0 101 0 110 0 115 0 101 0 115 0 47 0 76 0 73 0 67 0 69 0 78 0 83 0 69 0 45 0 50 0 46 0 48 0 0 2 0 0 0 0 0 0 255 102 0 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 170 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 1 66 1 67 1 68 1 69 1 70 1 71 1 72 1 73 1 74 1 75 1 76 1 77 1 78 1 79 1 80 1 81 1 82 1 83 1 84 1 85 1 86 1 87 1 88 1 89 1 90 1 91 1 92 1 93 1 94 1 95 1 96 1 97 1 98 1 99 1 100 1 101 1 102 1 103 1 104 1 105 1 106 1 107 1 108 1 109 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 1 121 1 122 1 123 1 124 1 125 1 126 1 127 1 128 1 129 1 130 1 131 1 132 1 133 1 134 1 135 1 136 1 137 1 138 1 139 1 140 1 141 1 142 1 143 1 144 1 145 1 146 1 147 1 148 1 149 1 150 1 151 1 152 1 153 1 154 1 155 1 156 1 157 1 158 1 159 1 160 1 161 1 162 1 163 1 164 1 165 1 166 1 167 1 168 1 169 1 170 1 171 1 172 1 173 1 174 1 175 1 176 1 177 1 178 1 179 1 180 1 181 1 182 1 183 1 184 1 185 1 186 1 187 1 188 1 189 1 190 1 191 1 192 1 193 1 194 1 195 1 196 1 197 1 198 1 199 1 200 1 201 1 202 1 203 1 204 1 205 1 206 1 207 1 208 1 209 1 210 1 211 1 212 1 213 1 214 1 215 1 216 1 217 1 218 1 219 1 220 1 221 1 222 1 223 1 224 1 225 1 226 1 227 1 228 1 229 1 230 1 231 1 232 1 233 1 234 1 235 1 236 1 237 1 238 1 239 1 240 1 241 1 242 1 243 1 244 1 245 1 246 1 247 1 248 1 249 1 250 1 251 1 252 1 253 1 254 1 255 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 2 11 2 12 2 13 2 14 2 15 2 16 2 17 2 18 2 19 2 20 2 21 2 22 2 23 2 24 2 25 2 26 2 27 2 28 2 29 2 30 2 31 2 32 2 33 2 34 2 35 2 36 2 37 2 38 2 39 2 40 2 41 2 42 2 43 2 44 2 45 2 46 2 47 2 48 2 49 2 50 2 51 2 52 2 53 2 54 2 55 2 56 2 57 2 58 2 59 2 60 2 61 2 62 2 63 2 64 2 65 2 66 2 67 2 68 2 69 2 70 2 71 2 72 2 73 2 74 2 75 2 76 2 77 2 78 2 79 2 80 2 81 2 82 2 83 2 84 2 85 2 86 2 87 2 88 2 89 2 90 2 91 2 92 2 93 2 94 2 95 2 96 2 97 2 98 2 99 2 100 2 101 2 102 2 103 2 104 2 105 2 106 2 107 2 108 2 109 2 110 2 111 2 112 2 113 2 114 2 115 2 116 2 117 2 118 2 119 2 120 2 121 2 122 2 123 2 124 2 125 2 126 2 127 2 128 2 129 2 130 2 131 2 132 2 133 2 134 2 135 2 136 2 137 2 138 2 139 2 140 2 141 2 142 2 143 2 144 2 145 2 146 2 147 2 148 2 149 2 150 2 151 2 152 2 153 2 154 2 155 2 156 2 157 2 158 2 159 2 160 2 161 2 162 2 163 2 164 2 165 2 166 2 167 2 168 2 169 2 170 2 171 2 172 2 173 2 174 2 175 2 176 2 177 2 178 2 179 2 180 2 181 2 182 2 183 2 184 2 185 2 186 2 187 2 188 2 189 2 190 2 191 2 192 2 193 2 194 2 195 2 196 2 197 2 198 2 199 2 200 2 201 2 202 2 203 2 204 2 205 2 206 2 207 2 208 2 209 2 210 2 211 2 212 2 213 2 214 2 215 2 216 2 217 2 218 2 219 2 220 2 221 2 222 2 223 2 224 2 225 2 226 2 227 2 228 2 229 2 230 2 231 2 232 2 233 2 234 2 235 2 236 2 237 2 238 2 239 2 240 2 241 2 242 2 243 2 244 2 245 2 246 2 247 2 248 2 249 2 250 2 251 2 252 2 253 2 254 2 255 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 14 3 15 3 16 3 17 3 18 3 19 3 20 3 21 3 22 3 23 3 24 3 25 3 26 3 27 3 28 3 29 3 30 3 31 3 32 3 33 3 34 3 35 3 36 3 37 3 38 3 39 3 40 3 41 3 42 3 43 3 44 3 45 3 46 3 47 3 48 3 49 3 50 3 51 3 52 3 53 3 54 3 55 3 56 3 57 3 58 3 59 3 60 3 61 3 62 3 63 3 64 3 65 3 66 3 67 3 68 3 69 3 70 3 71 3 72 3 73 3 74 3 75 3 76 3 77 3 78 3 79 3 80 3 81 3 82 3 83 3 84 3 85 3 86 3 87 3 88 3 89 3 90 3 91 3 92 3 93 3 94 3 95 3 96 3 97 3 98 3 99 3 100 3 101 3 102 3 103 3 104 3 105 3 106 3 107 3 108 3 109 3 110 3 111 3 112 3 113 3 114 3 115 3 116 3 117 3 118 3 119 3 120 3 121 3 122 3 123 3 124 3 125 3 126 3 127 3 128 3 129 3 130 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 140 3 141 3 142 3 143 3 144 3 145 3 146 3 147 3 148 3 149 3 150 3 151 3 152 3 153 3 154 3 155 3 156 3 157 3 158 3 159 3 160 3 161 3 162 3 163 3 164 3 165 3 166 3 167 3 168 3 169 3 170 3 171 3 172 3 173 3 174 3 175 3 176 3 177 3 178 3 179 3 180 3 181 3 182 3 183 3 184 3 185 3 186 3 187 3 188 3 189 3 190 3 191 3 192 3 193 3 194 3 195 3 196 3 197 3 198 3 199 3 200 3 201 3 202 3 203 3 204 3 205 3 206 3 207 3 208 3 209 3 210 3 211 3 212 3 213 3 214 3 215 3 216 3 217 3 218 3 219 3 220 3 221 3 222 3 223 3 224 3 225 3 226 3 227 3 228 3 229 3 230 3 231 3 232 3 233 3 234 3 235 3 236 3 237 3 238 3 239 3 240 3 241 3 242 3 243 3 244 3 245 3 246 3 247 3 248 3 249 3 250 3 251 3 252 3 253 3 254 3 255 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 4 11 4 12 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 4 22 4 23 4 24 4 25 4 26 4 27 4 28 4 29 4 30 4 31 4 32 4 33 4 34 4 35 4 36 4 37 4 38 4 39 4 40 4 41 4 42 4 43 4 44 4 45 4 46 4 47 4 48 4 49 4 50 4 51 4 52 4 53 4 54 4 55 4 56 4 57 4 58 4 59 4 60 4 61 4 62 4 63 4 64 4 65 4 66 4 67 4 68 4 69 4 70 4 71 4 72 4 73 4 74 4 75 4 76 4 77 4 78 4 79 4 80 4 81 4 82 4 83 4 84 4 85 4 86 4 87 4 88 4 89 4 90 4 91 4 92 4 93 4 94 4 95 4 96 4 97 4 98 4 99 4 100 4 101 4 102 4 103 4 104 4 105 4 106 4 107 4 108 4 109 4 110 4 111 4 112 4 113 4 114 4 115 4 116 4 117 4 118 4 119 4 120 4 121 4 122 4 123 4 124 4 125 4 126 4 127 4 128 4 129 4 130 4 131 4 132 4 133 4 134 4 135 4 136 4 137 4 138 4 139 4 140 4 141 4 142 4 143 4 144 4 145 4 146 4 147 4 148 4 149 4 150 4 151 4 152 4 153 4 154 4 155 4 156 4 157 4 158 4 159 4 160 4 161 4 162 4 163 4 164 4 165 4 166 4 167 4 168 4 169 4 170 4 171 7 46 110 111 116 100 101 102 4 110 117 108 108 16 110 111 110 109 97 114 107 105 110 103 114 101 116 117 114 110 5 115 112 97 99 101 6 101 120 99 108 97 109 8 113 117 111 116 101 100 98 108 10 110 117 109 98 101 114 115 105 103 110 6 100 111 108 108 97 114 7 112 101 114 99 101 110 116 9 97 109 112 101 114 115 97 110 100 11 113 117 111 116 101 115 105 110 103 108 101 9 112 97 114 101 110 108 101 102 116 10 112 97 114 101 110 114 105 103 104 116 8 97 115 116 101 114 105 115 107 4 112 108 117 115 5 99 111 109 109 97 6 104 121 112 104 101 110 6 112 101 114 105 111 100 5 115 108 97 115 104 4 122 101 114 111 3 111 110 101 3 116 119 111 5 116 104 114 101 101 4 102 111 117 114 4 102 105 118 101 3 115 105 120 5 115 101 118 101 110 5 101 105 103 104 116 4 110 105 110 101 5 99 111 108 111 110 9 115 101 109 105 99 111 108 111 110 4 108 101 115 115 5 101 113 117 97 108 7 103 114 101 97 116 101 114 8 113 117 101 115 116 105 111 110 2 97 116 1 65 1 66 1 67 1 68 1 69 1 70 1 71 1 72 5 73 46 97 108 116 1 74 1 75 1 76 1 77 1 78 1 79 1 80 1 81 1 82 1 83 1 84 1 85 1 86 1 87 1 88 1 89 1 90 11 98 114 97 99 107 101 116 108 101 102 116 9 98 97 99 107 115 108 97 115 104 12 98 114 97 99 107 101 116 114 105 103 104 116 11 97 115 99 105 105 99 105 114 99 117 109 10 117 110 100 101 114 115 99 111 114 101 5 103 114 97 118 101 1 97 1 98 1 99 1 100 1 101 1 102 1 103 1 104 1 105 1 106 1 107 1 108 1 109 1 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 1 121 1 122 9 98 114 97 99 101 108 101 102 116 3 98 97 114 10 98 114 97 99 101 114 105 103 104 116 10 97 115 99 105 105 116 105 108 100 101 16 110 111 110 98 114 101 97 107 105 110 103 115 112 97 99 101 10 101 120 99 108 97 109 100 111 119 110 4 99 101 110 116 8 115 116 101 114 108 105 110 103 8 99 117 114 114 101 110 99 121 3 121 101 110 9 98 114 111 107 101 110 98 97 114 7 115 101 99 116 105 111 110 8 100 105 101 114 101 115 105 115 9 99 111 112 121 114 105 103 104 116 11 111 114 100 102 101 109 105 110 105 110 101 13 103 117 105 108 108 101 109 111 116 108 101 102 116 10 108 111 103 105 99 97 108 110 111 116 7 117 110 105 48 48 65 68 10 114 101 103 105 115 116 101 114 101 100 9 111 118 101 114 115 99 111 114 101 6 100 101 103 114 101 101 9 112 108 117 115 109 105 110 117 115 11 116 119 111 115 117 112 101 114 105 111 114 13 116 104 114 101 101 115 117 112 101 114 105 111 114 5 97 99 117 116 101 2 109 117 9 112 97 114 97 103 114 97 112 104 14 112 101 114 105 111 100 99 101 110 116 101 114 101 100 7 99 101 100 105 108 108 97 11 111 110 101 115 117 112 101 114 105 111 114 12 111 114 100 109 97 115 99 117 108 105 110 101 14 103 117 105 108 108 101 109 111 116 114 105 103 104 116 10 111 110 101 113 117 97 114 116 101 114 7 111 110 101 104 97 108 102 13 116 104 114 101 101 113 117 97 114 116 101 114 115 12 113 117 101 115 116 105 111 110 100 111 119 110 6 65 103 114 97 118 101 6 65 97 99 117 116 101 11 65 99 105 114 99 117 109 102 108 101 120 6 65 116 105 108 100 101 9 65 100 105 101 114 101 115 105 115 5 65 114 105 110 103 2 65 69 8 67 99 101 100 105 108 108 97 6 69 103 114 97 118 101 6 69 97 99 117 116 101 11 69 99 105 114 99 117 109 102 108 101 120 9 69 100 105 101 114 101 115 105 115 10 73 103 114 97 118 101 46 97 108 116 10 73 97 99 117 116 101 46 97 108 116 15 73 99 105 114 99 117 109 102 108 101 120 46 97 108 116 13 73 100 105 101 114 101 115 105 115 46 97 108 116 3 69 116 104 6 78 116 105 108 100 101 6 79 103 114 97 118 101 6 79 97 99 117 116 101 11 79 99 105 114 99 117 109 102 108 101 120 6 79 116 105 108 100 101 9 79 100 105 101 114 101 115 105 115 8 109 117 108 116 105 112 108 121 6 79 115 108 97 115 104 6 85 103 114 97 118 101 6 85 97 99 117 116 101 11 85 99 105 114 99 117 109 102 108 101 120 9 85 100 105 101 114 101 115 105 115 6 89 97 99 117 116 101 5 84 104 111 114 110 10 103 101 114 109 97 110 100 98 108 115 6 97 103 114 97 118 101 6 97 97 99 117 116 101 11 97 99 105 114 99 117 109 102 108 101 120 6 97 116 105 108 100 101 9 97 100 105 101 114 101 115 105 115 5 97 114 105 110 103 2 97 101 8 99 99 101 100 105 108 108 97 6 101 103 114 97 118 101 6 101 97 99 117 116 101 11 101 99 105 114 99 117 109 102 108 101 120 9 101 100 105 101 114 101 115 105 115 6 105 103 114 97 118 101 6 105 97 99 117 116 101 11 105 99 105 114 99 117 109 102 108 101 120 9 105 100 105 101 114 101 115 105 115 3 101 116 104 6 110 116 105 108 100 101 6 111 103 114 97 118 101 6 111 97 99 117 116 101 11 111 99 105 114 99 117 109 102 108 101 120 6 111 116 105 108 100 101 9 111 100 105 101 114 101 115 105 115 6 100 105 118 105 100 101 6 111 115 108 97 115 104 6 117 103 114 97 118 101 6 117 97 99 117 116 101 11 117 99 105 114 99 117 109 102 108 101 120 9 117 100 105 101 114 101 115 105 115 6 121 97 99 117 116 101 5 116 104 111 114 110 9 121 100 105 101 114 101 115 105 115 7 65 109 97 99 114 111 110 7 97 109 97 99 114 111 110 6 65 98 114 101 118 101 6 97 98 114 101 118 101 7 65 111 103 111 110 101 107 7 97 111 103 111 110 101 107 6 67 97 99 117 116 101 6 99 97 99 117 116 101 11 67 99 105 114 99 117 109 102 108 101 120 11 99 99 105 114 99 117 109 102 108 101 120 4 67 100 111 116 4 99 100 111 116 6 67 99 97 114 111 110 6 99 99 97 114 111 110 6 68 99 97 114 111 110 6 100 99 97 114 111 110 6 68 99 114 111 97 116 6 100 99 114 111 97 116 7 69 109 97 99 114 111 110 7 101 109 97 99 114 111 110 6 69 98 114 101 118 101 6 101 98 114 101 118 101 10 69 100 111 116 97 99 99 101 110 116 10 101 100 111 116 97 99 99 101 110 116 7 69 111 103 111 110 101 107 7 101 111 103 111 110 101 107 6 69 99 97 114 111 110 6 101 99 97 114 111 110 11 71 99 105 114 99 117 109 102 108 101 120 11 103 99 105 114 99 117 109 102 108 101 120 6 71 98 114 101 118 101 6 103 98 114 101 118 101 4 71 100 111 116 4 103 100 111 116 12 71 99 111 109 109 97 97 99 99 101 110 116 12 103 99 111 109 109 97 97 99 99 101 110 116 11 72 99 105 114 99 117 109 102 108 101 120 11 104 99 105 114 99 117 109 102 108 101 120 4 72 98 97 114 4 104 98 97 114 10 73 116 105 108 100 101 46 97 108 116 6 105 116 105 108 100 101 11 73 109 97 99 114 111 110 46 97 108 116 7 105 109 97 99 114 111 110 10 73 98 114 101 118 101 46 97 108 116 6 105 98 114 101 118 101 11 73 111 103 111 110 101 107 46 97 108 116 7 105 111 103 111 110 101 107 14 73 100 111 116 97 99 99 101 110 116 46 97 108 116 8 100 111 116 108 101 115 115 105 6 73 74 46 97 108 116 2 105 106 11 74 99 105 114 99 117 109 102 108 101 120 11 106 99 105 114 99 117 109 102 108 101 120 12 75 99 111 109 109 97 97 99 99 101 110 116 12 107 99 111 109 109 97 97 99 99 101 110 116 12 107 103 114 101 101 110 108 97 110 100 105 99 6 76 97 99 117 116 101 6 108 97 99 117 116 101 12 76 99 111 109 109 97 97 99 99 101 110 116 12 108 99 111 109 109 97 97 99 99 101 110 116 6 76 99 97 114 111 110 6 108 99 97 114 111 110 4 76 100 111 116 4 108 100 111 116 6 76 115 108 97 115 104 6 108 115 108 97 115 104 6 78 97 99 117 116 101 6 110 97 99 117 116 101 12 78 99 111 109 109 97 97 99 99 101 110 116 12 110 99 111 109 109 97 97 99 99 101 110 116 6 78 99 97 114 111 110 6 110 99 97 114 111 110 11 110 97 112 111 115 116 114 111 112 104 101 3 69 110 103 3 101 110 103 7 79 109 97 99 114 111 110 7 111 109 97 99 114 111 110 6 79 98 114 101 118 101 6 111 98 114 101 118 101 13 79 104 117 110 103 97 114 117 109 108 97 117 116 13 111 104 117 110 103 97 114 117 109 108 97 117 116 2 79 69 2 111 101 6 82 97 99 117 116 101 6 114 97 99 117 116 101 12 82 99 111 109 109 97 97 99 99 101 110 116 12 114 99 111 109 109 97 97 99 99 101 110 116 6 82 99 97 114 111 110 6 114 99 97 114 111 110 6 83 97 99 117 116 101 6 115 97 99 117 116 101 11 83 99 105 114 99 117 109 102 108 101 120 11 115 99 105 114 99 117 109 102 108 101 120 8 83 99 101 100 105 108 108 97 8 115 99 101 100 105 108 108 97 6 83 99 97 114 111 110 6 115 99 97 114 111 110 12 84 99 111 109 109 97 97 99 99 101 110 116 12 116 99 111 109 109 97 97 99 99 101 110 116 6 84 99 97 114 111 110 6 116 99 97 114 111 110 4 84 98 97 114 4 116 98 97 114 6 85 116 105 108 100 101 6 117 116 105 108 100 101 7 85 109 97 99 114 111 110 7 117 109 97 99 114 111 110 6 85 98 114 101 118 101 6 117 98 114 101 118 101 5 85 114 105 110 103 5 117 114 105 110 103 13 85 104 117 110 103 97 114 117 109 108 97 117 116 13 117 104 117 110 103 97 114 117 109 108 97 117 116 7 85 111 103 111 110 101 107 7 117 111 103 111 110 101 107 11 87 99 105 114 99 117 109 102 108 101 120 11 119 99 105 114 99 117 109 102 108 101 120 11 89 99 105 114 99 117 109 102 108 101 120 11 121 99 105 114 99 117 109 102 108 101 120 9 89 100 105 101 114 101 115 105 115 6 90 97 99 117 116 101 6 122 97 99 117 116 101 10 90 100 111 116 97 99 99 101 110 116 10 122 100 111 116 97 99 99 101 110 116 6 90 99 97 114 111 110 6 122 99 97 114 111 110 5 108 111 110 103 115 6 102 108 111 114 105 110 10 65 114 105 110 103 97 99 117 116 101 10 97 114 105 110 103 97 99 117 116 101 7 65 69 97 99 117 116 101 7 97 101 97 99 117 116 101 11 79 115 108 97 115 104 97 99 117 116 101 11 111 115 108 97 115 104 97 99 117 116 101 12 83 99 111 109 109 97 97 99 99 101 110 116 12 115 99 111 109 109 97 97 99 99 101 110 116 10 99 105 114 99 117 109 102 108 101 120 5 99 97 114 111 110 6 109 97 99 114 111 110 5 98 114 101 118 101 9 100 111 116 97 99 99 101 110 116 4 114 105 110 103 6 111 103 111 110 101 107 5 116 105 108 100 101 12 104 117 110 103 97 114 117 109 108 97 117 116 5 116 111 110 111 115 13 100 105 101 114 101 115 105 115 116 111 110 111 115 10 65 108 112 104 97 116 111 110 111 115 9 97 110 111 116 101 108 101 105 97 12 69 112 115 105 108 111 110 116 111 110 111 115 8 69 116 97 116 111 110 111 115 13 73 111 116 97 116 111 110 111 115 46 97 108 116 12 79 109 105 99 114 111 110 116 111 110 111 115 12 85 112 115 105 108 111 110 116 111 110 111 115 10 79 109 101 103 97 116 111 110 111 115 17 105 111 116 97 100 105 101 114 101 115 105 115 116 111 110 111 115 5 65 108 112 104 97 4 66 101 116 97 5 71 97 109 109 97 7 117 110 105 48 51 57 52 7 69 112 115 105 108 111 110 4 90 101 116 97 3 69 116 97 5 84 104 101 116 97 8 73 111 116 97 46 97 108 116 5 75 97 112 112 97 6 76 97 109 98 100 97 2 77 117 2 78 117 2 88 105 7 79 109 105 99 114 111 110 2 80 105 3 82 104 111 5 83 105 103 109 97 3 84 97 117 7 85 112 115 105 108 111 110 3 80 104 105 3 67 104 105 3 80 115 105 7 117 110 105 48 51 65 57 16 73 111 116 97 100 105 101 114 101 115 105 115 46 97 108 116 15 85 112 115 105 108 111 110 100 105 101 114 101 115 105 115 10 97 108 112 104 97 116 111 110 111 115 12 101 112 115 105 108 111 110 116 111 110 111 115 8 101 116 97 116 111 110 111 115 9 105 111 116 97 116 111 110 111 115 20 117 112 115 105 108 111 110 100 105 101 114 101 115 105 115 116 111 110 111 115 5 97 108 112 104 97 4 98 101 116 97 5 103 97 109 109 97 5 100 101 108 116 97 7 101 112 115 105 108 111 110 4 122 101 116 97 3 101 116 97 5 116 104 101 116 97 4 105 111 116 97 5 107 97 112 112 97 6 108 97 109 98 100 97 7 117 110 105 48 51 66 67 2 110 117 2 120 105 7 111 109 105 99 114 111 110 2 112 105 3 114 104 111 6 115 105 103 109 97 49 5 115 105 103 109 97 3 116 97 117 7 117 112 115 105 108 111 110 3 112 104 105 3 99 104 105 3 112 115 105 5 111 109 101 103 97 12 105 111 116 97 100 105 101 114 101 115 105 115 15 117 112 115 105 108 111 110 100 105 101 114 101 115 105 115 12 111 109 105 99 114 111 110 116 111 110 111 115 12 117 112 115 105 108 111 110 116 111 110 111 115 10 111 109 101 103 97 116 111 110 111 115 9 97 102 105 105 49 48 48 50 51 9 97 102 105 105 49 48 48 53 49 9 97 102 105 105 49 48 48 53 50 9 97 102 105 105 49 48 48 53 51 9 97 102 105 105 49 48 48 53 52 13 97 102 105 105 49 48 48 53 53 46 97 108 116 13 97 102 105 105 49 48 48 53 54 46 97 108 116 9 97 102 105 105 49 48 48 53 55 9 97 102 105 105 49 48 48 53 56 9 97 102 105 105 49 48 48 53 57 9 97 102 105 105 49 48 48 54 48 9 97 102 105 105 49 48 48 54 49 9 97 102 105 105 49 48 48 54 50 9 97 102 105 105 49 48 49 52 53 9 97 102 105 105 49 48 48 49 55 9 97 102 105 105 49 48 48 49 56 9 97 102 105 105 49 48 48 49 57 9 97 102 105 105 49 48 48 50 48 9 97 102 105 105 49 48 48 50 49 9 97 102 105 105 49 48 48 50 50 9 97 102 105 105 49 48 48 50 52 9 97 102 105 105 49 48 48 50 53 9 97 102 105 105 49 48 48 50 54 9 97 102 105 105 49 48 48 50 55 9 97 102 105 105 49 48 48 50 56 9 97 102 105 105 49 48 48 50 57 9 97 102 105 105 49 48 48 51 48 9 97 102 105 105 49 48 48 51 49 9 97 102 105 105 49 48 48 51 50 9 97 102 105 105 49 48 48 51 51 9 97 102 105 105 49 48 48 51 52 9 97 102 105 105 49 48 48 51 53 9 97 102 105 105 49 48 48 51 54 9 97 102 105 105 49 48 48 51 55 9 97 102 105 105 49 48 48 51 56 9 97 102 105 105 49 48 48 51 57 9 97 102 105 105 49 48 48 52 48 9 97 102 105 105 49 48 48 52 49 9 97 102 105 105 49 48 48 52 50 9 97 102 105 105 49 48 48 52 51 9 97 102 105 105 49 48 48 52 52 9 97 102 105 105 49 48 48 52 53 9 97 102 105 105 49 48 48 52 54 9 97 102 105 105 49 48 48 52 55 9 97 102 105 105 49 48 48 52 56 9 97 102 105 105 49 48 48 52 57 9 97 102 105 105 49 48 48 54 53 9 97 102 105 105 49 48 48 54 54 9 97 102 105 105 49 48 48 54 55 9 97 102 105 105 49 48 48 54 56 9 97 102 105 105 49 48 48 54 57 9 97 102 105 105 49 48 48 55 48 9 97 102 105 105 49 48 48 55 50 9 97 102 105 105 49 48 48 55 51 9 97 102 105 105 49 48 48 55 52 9 97 102 105 105 49 48 48 55 53 9 97 102 105 105 49 48 48 55 54 9 97 102 105 105 49 48 48 55 55 9 97 102 105 105 49 48 48 55 56 9 97 102 105 105 49 48 48 55 57 9 97 102 105 105 49 48 48 56 48 9 97 102 105 105 49 48 48 56 49 9 97 102 105 105 49 48 48 56 50 9 97 102 105 105 49 48 48 56 51 9 97 102 105 105 49 48 48 56 52 9 97 102 105 105 49 48 48 56 53 9 97 102 105 105 49 48 48 56 54 9 97 102 105 105 49 48 48 56 55 9 97 102 105 105 49 48 48 56 56 9 97 102 105 105 49 48 48 56 57 9 97 102 105 105 49 48 48 57 48 9 97 102 105 105 49 48 48 57 49 9 97 102 105 105 49 48 48 57 50 9 97 102 105 105 49 48 48 57 51 9 97 102 105 105 49 48 48 57 52 9 97 102 105 105 49 48 48 57 53 9 97 102 105 105 49 48 48 57 54 9 97 102 105 105 49 48 48 57 55 9 97 102 105 105 49 48 48 55 49 9 97 102 105 105 49 48 48 57 57 9 97 102 105 105 49 48 49 48 48 9 97 102 105 105 49 48 49 48 49 9 97 102 105 105 49 48 49 48 50 9 97 102 105 105 49 48 49 48 51 9 97 102 105 105 49 48 49 48 52 9 97 102 105 105 49 48 49 48 53 9 97 102 105 105 49 48 49 48 54 9 97 102 105 105 49 48 49 48 55 9 97 102 105 105 49 48 49 48 56 9 97 102 105 105 49 48 49 48 57 9 97 102 105 105 49 48 49 49 48 9 97 102 105 105 49 48 49 57 51 9 97 102 105 105 49 48 48 53 48 9 97 102 105 105 49 48 48 57 56 6 87 103 114 97 118 101 6 119 103 114 97 118 101 6 87 97 99 117 116 101 6 119 97 99 117 116 101 9 87 100 105 101 114 101 115 105 115 9 119 100 105 101 114 101 115 105 115 6 89 103 114 97 118 101 6 121 103 114 97 118 101 6 101 110 100 97 115 104 6 101 109 100 97 115 104 9 97 102 105 105 48 48 50 48 56 13 117 110 100 101 114 115 99 111 114 101 100 98 108 9 113 117 111 116 101 108 101 102 116 10 113 117 111 116 101 114 105 103 104 116 14 113 117 111 116 101 115 105 110 103 108 98 97 115 101 13 113 117 111 116 101 114 101 118 101 114 115 101 100 12 113 117 111 116 101 100 98 108 108 101 102 116 13 113 117 111 116 101 100 98 108 114 105 103 104 116 12 113 117 111 116 101 100 98 108 98 97 115 101 6 100 97 103 103 101 114 9 100 97 103 103 101 114 100 98 108 6 98 117 108 108 101 116 8 101 108 108 105 112 115 105 115 11 112 101 114 116 104 111 117 115 97 110 100 6 109 105 110 117 116 101 6 115 101 99 111 110 100 13 103 117 105 108 115 105 110 103 108 108 101 102 116 14 103 117 105 108 115 105 110 103 108 114 105 103 104 116 9 101 120 99 108 97 109 100 98 108 8 102 114 97 99 116 105 111 110 9 110 115 117 112 101 114 105 111 114 5 102 114 97 110 99 9 97 102 105 105 48 56 57 52 49 6 112 101 115 101 116 97 4 69 117 114 111 9 97 102 105 105 54 49 50 52 56 9 97 102 105 105 54 49 50 56 57 9 97 102 105 105 54 49 51 53 50 9 116 114 97 100 101 109 97 114 107 5 79 109 101 103 97 9 101 115 116 105 109 97 116 101 100 9 111 110 101 101 105 103 104 116 104 12 116 104 114 101 101 101 105 103 104 116 104 115 11 102 105 118 101 101 105 103 104 116 104 115 12 115 101 118 101 110 101 105 103 104 116 104 115 11 112 97 114 116 105 97 108 100 105 102 102 5 68 101 108 116 97 7 112 114 111 100 117 99 116 9 115 117 109 109 97 116 105 111 110 5 109 105 110 117 115 7 114 97 100 105 99 97 108 8 105 110 102 105 110 105 116 121 8 105 110 116 101 103 114 97 108 11 97 112 112 114 111 120 101 113 117 97 108 8 110 111 116 101 113 117 97 108 9 108 101 115 115 101 113 117 97 108 12 103 114 101 97 116 101 114 101 113 117 97 108 7 108 111 122 101 110 103 101 7 117 110 105 70 66 48 49 7 117 110 105 70 66 48 50 13 99 121 114 105 108 108 105 99 98 114 101 118 101 8 100 111 116 108 101 115 115 106 16 99 97 114 111 110 99 111 109 109 97 97 99 99 101 110 116 11 99 111 109 109 97 97 99 99 101 110 116 17 99 111 109 109 97 97 99 99 101 110 116 114 111 116 97 116 101 12 122 101 114 111 115 117 112 101 114 105 111 114 12 102 111 117 114 115 117 112 101 114 105 111 114 12 102 105 118 101 115 117 112 101 114 105 111 114 11 115 105 120 115 117 112 101 114 105 111 114 13 115 101 118 101 110 115 117 112 101 114 105 111 114 13 101 105 103 104 116 115 117 112 101 114 105 111 114 12 110 105 110 101 115 117 112 101 114 105 111 114 7 117 110 105 50 48 48 48 7 117 110 105 50 48 48 49 7 117 110 105 50 48 48 50 7 117 110 105 50 48 48 51 7 117 110 105 50 48 48 52 7 117 110 105 50 48 48 53 7 117 110 105 50 48 48 54 7 117 110 105 50 48 48 55 7 117 110 105 50 48 48 56 7 117 110 105 50 48 48 57 7 117 110 105 50 48 48 65 7 117 110 105 50 48 48 66 7 117 110 105 70 69 70 70 7 117 110 105 70 70 70 67 7 117 110 105 70 70 70 68 7 117 110 105 48 49 70 48 7 117 110 105 48 50 66 67 7 117 110 105 48 51 68 49 7 117 110 105 48 51 68 50 7 117 110 105 48 51 68 54 7 117 110 105 49 69 51 69 7 117 110 105 49 69 51 70 7 117 110 105 49 69 48 48 7 117 110 105 49 69 48 49 7 117 110 105 49 70 52 68 7 117 110 105 48 50 70 51 9 100 97 115 105 97 111 120 105 97 7 117 110 105 70 66 48 51 7 117 110 105 70 66 48 52 5 79 104 111 114 110 5 111 104 111 114 110 5 85 104 111 114 110 5 117 104 111 114 110 7 117 110 105 48 51 48 48 7 117 110 105 48 51 48 49 7 117 110 105 48 51 48 51 4 104 111 111 107 8 100 111 116 98 101 108 111 119 7 117 110 105 48 52 48 48 7 117 110 105 48 52 48 68 7 117 110 105 48 52 53 48 7 117 110 105 48 52 53 68 7 117 110 105 48 52 54 48 7 117 110 105 48 52 54 49 7 117 110 105 48 52 54 50 7 117 110 105 48 52 54 51 7 117 110 105 48 52 54 52 7 117 110 105 48 52 54 53 7 117 110 105 48 52 54 54 7 117 110 105 48 52 54 55 7 117 110 105 48 52 54 56 7 117 110 105 48 52 54 57 7 117 110 105 48 52 54 65 7 117 110 105 48 52 54 66 7 117 110 105 48 52 54 67 7 117 110 105 48 52 54 68 7 117 110 105 48 52 54 69 7 117 110 105 48 52 54 70 7 117 110 105 48 52 55 48 7 117 110 105 48 52 55 49 7 117 110 105 48 52 55 50 7 117 110 105 48 52 55 51 7 117 110 105 48 52 55 52 7 117 110 105 48 52 55 53 7 117 110 105 48 52 55 54 7 117 110 105 48 52 55 55 7 117 110 105 48 52 55 56 7 117 110 105 48 52 55 57 7 117 110 105 48 52 55 65 7 117 110 105 48 52 55 66 7 117 110 105 48 52 55 67 7 117 110 105 48 52 55 68 7 117 110 105 48 52 55 69 7 117 110 105 48 52 55 70 7 117 110 105 48 52 56 48 7 117 110 105 48 52 56 49 7 117 110 105 48 52 56 50 7 117 110 105 48 52 56 51 7 117 110 105 48 52 56 52 7 117 110 105 48 52 56 53 7 117 110 105 48 52 56 54 7 117 110 105 48 52 56 56 7 117 110 105 48 52 56 57 7 117 110 105 48 52 56 65 7 117 110 105 48 52 56 66 7 117 110 105 48 52 56 67 7 117 110 105 48 52 56 68 7 117 110 105 48 52 56 69 7 117 110 105 48 52 56 70 7 117 110 105 48 52 57 50 7 117 110 105 48 52 57 51 7 117 110 105 48 52 57 52 7 117 110 105 48 52 57 53 7 117 110 105 48 52 57 54 7 117 110 105 48 52 57 55 7 117 110 105 48 52 57 56 7 117 110 105 48 52 57 57 7 117 110 105 48 52 57 65 7 117 110 105 48 52 57 66 7 117 110 105 48 52 57 67 7 117 110 105 48 52 57 68 7 117 110 105 48 52 57 69 7 117 110 105 48 52 57 70 7 117 110 105 48 52 65 48 7 117 110 105 48 52 65 49 7 117 110 105 48 52 65 50 7 117 110 105 48 52 65 51 7 117 110 105 48 52 65 52 7 117 110 105 48 52 65 53 7 117 110 105 48 52 65 54 7 117 110 105 48 52 65 55 7 117 110 105 48 52 65 56 7 117 110 105 48 52 65 57 7 117 110 105 48 52 65 65 7 117 110 105 48 52 65 66 7 117 110 105 48 52 65 67 7 117 110 105 48 52 65 68 7 117 110 105 48 52 65 69 7 117 110 105 48 52 65 70 7 117 110 105 48 52 66 48 7 117 110 105 48 52 66 49 7 117 110 105 48 52 66 50 7 117 110 105 48 52 66 51 7 117 110 105 48 52 66 52 7 117 110 105 48 52 66 53 7 117 110 105 48 52 66 54 7 117 110 105 48 52 66 55 7 117 110 105 48 52 66 56 7 117 110 105 48 52 66 57 7 117 110 105 48 52 66 65 7 117 110 105 48 52 66 66 7 117 110 105 48 52 66 67 7 117 110 105 48 52 66 68 7 117 110 105 48 52 66 69 7 117 110 105 48 52 66 70 11 117 110 105 48 52 67 48 46 97 108 116 7 117 110 105 48 52 67 49 7 117 110 105 48 52 67 50 7 117 110 105 48 52 67 51 7 117 110 105 48 52 67 52 7 117 110 105 48 52 67 53 7 117 110 105 48 52 67 54 7 117 110 105 48 52 67 55 7 117 110 105 48 52 67 56 7 117 110 105 48 52 67 57 7 117 110 105 48 52 67 65 7 117 110 105 48 52 67 66 7 117 110 105 48 52 67 67 7 117 110 105 48 52 67 68 7 117 110 105 48 52 67 69 11 117 110 105 48 52 67 70 46 97 108 116 7 117 110 105 48 52 68 48 7 117 110 105 48 52 68 49 7 117 110 105 48 52 68 50 7 117 110 105 48 52 68 51 7 117 110 105 48 52 68 52 7 117 110 105 48 52 68 53 7 117 110 105 48 52 68 54 7 117 110 105 48 52 68 55 7 117 110 105 48 52 68 56 7 117 110 105 48 52 68 57 7 117 110 105 48 52 68 65 7 117 110 105 48 52 68 66 7 117 110 105 48 52 68 67 7 117 110 105 48 52 68 68 7 117 110 105 48 52 68 69 7 117 110 105 48 52 68 70 7 117 110 105 48 52 69 48 7 117 110 105 48 52 69 49 7 117 110 105 48 52 69 50 7 117 110 105 48 52 69 51 7 117 110 105 48 52 69 52 7 117 110 105 48 52 69 53 7 117 110 105 48 52 69 54 7 117 110 105 48 52 69 55 7 117 110 105 48 52 69 56 7 117 110 105 48 52 69 57 7 117 110 105 48 52 69 65 7 117 110 105 48 52 69 66 7 117 110 105 48 52 69 67 7 117 110 105 48 52 69 68 7 117 110 105 48 52 69 69 7 117 110 105 48 52 69 70 7 117 110 105 48 52 70 48 7 117 110 105 48 52 70 49 7 117 110 105 48 52 70 50 7 117 110 105 48 52 70 51 7 117 110 105 48 52 70 52 7 117 110 105 48 52 70 53 7 117 110 105 48 52 70 54 7 117 110 105 48 52 70 55 7 117 110 105 48 52 70 56 7 117 110 105 48 52 70 57 7 117 110 105 48 52 70 65 7 117 110 105 48 52 70 66 7 117 110 105 48 52 70 67 7 117 110 105 48 52 70 68 7 117 110 105 48 52 70 69 7 117 110 105 48 52 70 70 7 117 110 105 48 53 48 48 7 117 110 105 48 53 48 49 7 117 110 105 48 53 48 50 7 117 110 105 48 53 48 51 7 117 110 105 48 53 48 52 7 117 110 105 48 53 48 53 7 117 110 105 48 53 48 54 7 117 110 105 48 53 48 55 7 117 110 105 48 53 48 56 7 117 110 105 48 53 48 57 7 117 110 105 48 53 48 65 7 117 110 105 48 53 48 66 7 117 110 105 48 53 48 67 7 117 110 105 48 53 48 68 7 117 110 105 48 53 48 69 7 117 110 105 48 53 48 70 7 117 110 105 48 53 49 48 7 117 110 105 48 53 49 49 7 117 110 105 48 53 49 50 7 117 110 105 48 53 49 51 7 117 110 105 49 69 65 48 7 117 110 105 49 69 65 49 7 117 110 105 49 69 65 50 7 117 110 105 49 69 65 51 7 117 110 105 49 69 65 52 7 117 110 105 49 69 65 53 7 117 110 105 49 69 65 54 7 117 110 105 49 69 65 55 7 117 110 105 49 69 65 56 7 117 110 105 49 69 65 57 7 117 110 105 49 69 65 65 7 117 110 105 49 69 65 66 7 117 110 105 49 69 65 67 7 117 110 105 49 69 65 68 7 117 110 105 49 69 65 69 7 117 110 105 49 69 65 70 7 117 110 105 49 69 66 48 7 117 110 105 49 69 66 49 7 117 110 105 49 69 66 50 7 117 110 105 49 69 66 51 7 117 110 105 49 69 66 52 7 117 110 105 49 69 66 53 7 117 110 105 49 69 66 54 7 117 110 105 49 69 66 55 7 117 110 105 49 69 66 56 7 117 110 105 49 69 66 57 7 117 110 105 49 69 66 65 7 117 110 105 49 69 66 66 7 117 110 105 49 69 66 67 7 117 110 105 49 69 66 68 7 117 110 105 49 69 66 69 7 117 110 105 49 69 66 70 7 117 110 105 49 69 67 48 7 117 110 105 49 69 67 49 7 117 110 105 49 69 67 50 7 117 110 105 49 69 67 51 7 117 110 105 49 69 67 52 7 117 110 105 49 69 67 53 7 117 110 105 49 69 67 54 7 117 110 105 49 69 67 55 11 117 110 105 49 69 67 56 46 97 108 116 7 117 110 105 49 69 67 57 11 117 110 105 49 69 67 65 46 97 108 116 7 117 110 105 49 69 67 66 7 117 110 105 49 69 67 67 7 117 110 105 49 69 67 68 7 117 110 105 49 69 67 69 7 117 110 105 49 69 67 70 7 117 110 105 49 69 68 48 7 117 110 105 49 69 68 49 7 117 110 105 49 69 68 50 7 117 110 105 49 69 68 51 7 117 110 105 49 69 68 52 7 117 110 105 49 69 68 53 7 117 110 105 49 69 68 54 7 117 110 105 49 69 68 55 7 117 110 105 49 69 68 56 7 117 110 105 49 69 68 57 7 117 110 105 49 69 68 65 7 117 110 105 49 69 68 66 7 117 110 105 49 69 68 67 7 117 110 105 49 69 68 68 7 117 110 105 49 69 68 69 7 117 110 105 49 69 68 70 7 117 110 105 49 69 69 48 7 117 110 105 49 69 69 49 7 117 110 105 49 69 69 50 7 117 110 105 49 69 69 51 7 117 110 105 49 69 69 52 7 117 110 105 49 69 69 53 7 117 110 105 49 69 69 54 7 117 110 105 49 69 69 55 7 117 110 105 49 69 69 56 7 117 110 105 49 69 69 57 7 117 110 105 49 69 69 65 7 117 110 105 49 69 69 66 7 117 110 105 49 69 69 67 7 117 110 105 49 69 69 68 7 117 110 105 49 69 69 69 7 117 110 105 49 69 69 70 7 117 110 105 49 69 70 48 7 117 110 105 49 69 70 49 7 117 110 105 49 69 70 52 7 117 110 105 49 69 70 53 7 117 110 105 49 69 70 54 7 117 110 105 49 69 70 55 7 117 110 105 49 69 70 56 7 117 110 105 49 69 70 57 7 117 110 105 50 48 65 66 7 117 110 105 48 51 48 70 19 99 105 114 99 117 109 102 108 101 120 97 99 117 116 101 99 111 109 98 19 99 105 114 99 117 109 102 108 101 120 103 114 97 118 101 99 111 109 98 18 99 105 114 99 117 109 102 108 101 120 104 111 111 107 99 111 109 98 19 99 105 114 99 117 109 102 108 101 120 116 105 108 100 101 99 111 109 98 14 98 114 101 118 101 97 99 117 116 101 99 111 109 98 14 98 114 101 118 101 103 114 97 118 101 99 111 109 98 13 98 114 101 118 101 104 111 111 107 99 111 109 98 14 98 114 101 118 101 116 105 108 100 101 99 111 109 98 16 99 121 114 105 108 108 105 99 104 111 111 107 108 101 102 116 17 99 121 114 105 108 108 105 99 98 105 103 104 111 111 107 85 67 17 99 121 114 105 108 108 105 99 98 105 103 104 111 111 107 76 67 8 111 110 101 46 112 110 117 109 7 122 101 114 111 46 111 115 6 111 110 101 46 111 115 6 116 119 111 46 111 115 8 116 104 114 101 101 46 111 115 7 102 111 117 114 46 111 115 7 102 105 118 101 46 111 115 6 115 105 120 46 111 115 8 115 101 118 101 110 46 111 115 8 101 105 103 104 116 46 111 115 7 110 105 110 101 46 111 115 2 102 102 7 117 110 105 50 49 50 48 8 84 99 101 100 105 108 108 97 8 116 99 101 100 105 108 108 97 5 103 46 97 108 116 15 103 99 105 114 99 117 109 102 108 101 120 46 97 108 116 10 103 98 114 101 118 101 46 97 108 116 8 103 100 111 116 46 97 108 116 16 103 99 111 109 109 97 97 99 99 101 110 116 46 97 108 116 1 73 6 73 103 114 97 118 101 6 73 97 99 117 116 101 11 73 99 105 114 99 117 109 102 108 101 120 9 73 100 105 101 114 101 115 105 115 6 73 116 105 108 100 101 7 73 109 97 99 114 111 110 6 73 98 114 101 118 101 7 73 111 103 111 110 101 107 10 73 100 111 116 97 99 99 101 110 116 2 73 74 9 73 111 116 97 116 111 110 111 115 4 73 111 116 97 12 73 111 116 97 100 105 101 114 101 115 105 115 9 97 102 105 105 49 48 48 53 53 9 97 102 105 105 49 48 48 53 54 7 117 110 105 48 52 67 48 7 117 110 105 48 52 67 70 7 117 110 105 49 69 67 56 7 117 110 105 49 69 67 65 0 0 1 0 3 0 8 0 10 0 13 0 7 255 255 0 15 0 1 0 0 0 12 0 0 0 22 0 0 0 2 0 1 0 0 3 169 0 1 0 4 0 0 0 1 0 0 0 0 0 1 0 0 0 10 0 52 0 54 0 1 108 97 116 110 0 8 0 16 0 2 77 79 76 32 0 22 82 79 77 32 0 28 0 0 255 255 0 0 0 0 255 255 0 0 0 0 255 255 0 0 0 0 0 0 0 1 0 0 0 10 0 110 1 228 0 1 108 97 116 110 0 8 0 16 0 2 77 79 76 32 0 40 82 79 77 32 0 66 0 0 255 255 0 9 0 3 0 8 0 11 0 0 0 14 0 17 0 20 0 23 0 26 0 0 255 255 0 10 0 4 0 6 0 9 0 12 0 1 0 15 0 18 0 21 0 24 0 27 0 0 255 255 0 10 0 5 0 7 0 10 0 13 0 2 0 16 0 19 0 22 0 25 0 28 0 29 108 105 103 97 0 176 108 105 103 97 0 182 108 105 103 97 0 188 108 110 117 109 0 194 108 110 117 109 0 200 108 110 117 109 0 206 108 111 99 108 0 212 108 111 99 108 0 218 111 110 117 109 0 224 111 110 117 109 0 232 111 110 117 109 0 240 112 110 117 109 0 248 112 110 117 109 0 254 112 110 117 109 1 4 115 97 108 116 1 10 115 97 108 116 1 18 115 97 108 116 1 26 115 115 48 49 1 34 115 115 48 49 1 42 115 115 48 49 1 50 115 115 48 50 1 58 115 115 48 50 1 64 115 115 48 50 1 70 115 115 48 51 1 76 115 115 48 51 1 82 115 115 48 51 1 88 116 110 117 109 1 94 116 110 117 109 1 102 116 110 117 109 1 110 0 0 0 1 0 9 0 0 0 1 0 9 0 0 0 1 0 9 0 0 0 1 0 7 0 0 0 1 0 7 0 0 0 1 0 7 0 0 0 1 0 8 0 0 0 1 0 8 0 0 0 2 0 2 0 3 0 0 0 2 0 2 0 3 0 0 0 2 0 2 0 3 0 0 0 1 0 4 0 0 0 1 0 4 0 0 0 1 0 4 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 2 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 2 0 5 0 6 0 0 0 2 0 5 0 6 0 0 0 2 0 5 0 6 0 10 0 22 0 30 0 38 0 46 0 54 0 62 0 70 0 78 0 86 0 94 0 1 0 0 0 1 0 80 0 1 0 0 0 1 0 122 0 1 0 0 0 1 0 170 0 1 0 0 0 1 0 198 0 1 0 0 0 1 0 238 0 1 0 0 0 1 0 244 0 1 0 0 0 1 1 16 0 1 0 0 0 1 1 22 0 1 0 0 0 1 1 50 0 4 0 0 0 1 1 72 0 2 0 16 0 5 3 145 3 146 3 147 3 148 3 149 0 2 0 5 0 74 0 74 0 0 0 223 0 223 0 1 0 225 0 225 0 2 0 227 0 227 0 3 0 229 0 229 0 4 0 2 0 46 0 20 0 44 0 142 0 143 0 144 0 145 0 234 0 236 0 238 0 240 0 242 0 244 1 90 1 103 1 119 1 161 1 162 2 201 2 216 3 69 3 71 0 2 0 1 3 150 3 169 0 0 0 2 0 26 0 10 3 131 3 132 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 140 0 2 0 1 0 19 0 28 0 0 0 2 0 26 0 10 3 131 3 133 3 134 3 135 3 136 3 137 3 138 3 139 3 140 3 132 0 2 0 3 0 19 0 19 0 0 0 21 0 28 0 1 3 130 3 130 0 9 0 2 0 8 0 1 3 130 0 1 0 1 0 20 0 2 0 26 0 10 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 2 0 1 3 131 3 140 0 0 0 2 0 8 0 1 0 20 0 1 0 1 3 130 0 2 0 26 0 10 0 19 3 130 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 2 0 1 3 131 3 140 0 0 0 2 0 14 0 4 3 143 3 144 1 32 1 33 0 2 0 2 1 36 1 37 0 0 1 73 1 74 0 2 0 1 0 54 0 1 0 8 0 5 0 12 0 20 0 28 0 34 0 40 2 94 0 3 0 73 0 79 2 93 0 3 0 73 0 76 3 141 0 2 0 73 2 53 0 2 0 79 2 52 0 2 0 76 0 1 0 1 0 73 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 21 94 0 0 0 20 0 0 0 0 0 0 21 86 48 130 21 82 6 9 42 134 72 134 247 13 1 7 2 160 130 21 67 48 130 21 63 2 1 1 49 11 48 9 6 5 43 14 3 2 26 5 0 48 97 6 10 43 6 1 4 1 130 55 2 1 4 160 83 48 81 48 44 6 10 43 6 1 4 1 130 55 2 1 28 162 30 128 28 0 60 0 60 0 60 0 79 0 98 0 115 0 111 0 108 0 101 0 116 0 101 0 62 0 62 0 62 48 33 48 9 6 5 43 14 3 2 26 5 0 4 20 130 184 185 128 143 217 245 64 166 109 110 179 21 84 65 54 153 222 211 125 160 130 17 93 48 130 3 122 48 130 2 98 160 3 2 1 2 2 16 56 37 215 250 248 97 175 158 244 144 231 38 181 214 90 213 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 83 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 43 48 41 6 3 85 4 3 19 34 86 101 114 105 83 105 103 110 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 48 30 23 13 48 55 48 54 49 53 48 48 48 48 48 48 90 23 13 49 50 48 54 49 52 50 51 53 57 53 57 90 48 92 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 52 48 50 6 3 85 4 3 19 43 86 101 114 105 83 105 103 110 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 83 105 103 110 101 114 32 45 32 71 50 48 129 159 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 129 141 0 48 129 137 2 129 129 0 196 181 242 82 21 188 136 134 96 41 22 74 91 47 75 145 107 135 145 243 53 84 88 53 234 209 54 94 98 77 82 81 52 113 194 123 102 29 137 200 221 42 196 106 10 246 55 217 152 116 145 246 146 174 176 181 118 150 241 169 74 99 69 71 46 107 11 146 78 75 43 140 238 88 74 139 212 7 228 26 44 248 130 170 88 217 205 66 243 45 192 117 222 141 171 199 142 29 154 108 76 8 149 30 222 219 239 103 225 114 194 73 194 158 96 60 225 226 190 22 163 99 120 105 20 123 173 45 2 3 1 0 1 163 129 196 48 129 193 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 12 6 3 85 29 19 1 1 255 4 2 48 0 48 51 6 3 85 29 31 4 44 48 42 48 40 160 38 160 36 134 34 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 116 115 115 45 99 97 46 99 114 108 48 22 6 3 85 29 37 1 1 255 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 6 192 48 30 6 3 85 29 17 4 23 48 21 164 19 48 17 49 15 48 13 6 3 85 4 3 19 6 84 83 65 49 45 50 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 80 197 75 200 36 128 223 228 13 36 194 222 26 177 161 2 161 166 130 45 12 131 21 129 55 10 130 14 44 176 90 23 97 181 216 5 254 136 219 241 145 145 179 86 26 64 166 235 146 190 56 57 176 117 54 116 58 152 79 228 55 186 153 137 202 149 66 29 176 185 199 160 141 87 224 250 213 100 4 66 53 78 1 209 51 162 23 200 77 170 39 199 242 225 134 76 2 56 77 131 120 198 252 83 224 235 224 6 135 221 164 150 158 94 12 152 226 165 190 191 130 133 195 96 225 223 173 40 216 199 165 75 100 218 199 27 91 189 172 57 8 213 56 34 161 51 139 47 138 154 235 188 7 33 63 68 65 9 7 181 101 28 36 188 72 211 68 128 235 161 207 201 2 180 20 207 84 199 22 163 128 92 249 121 62 93 114 125 136 23 158 44 67 162 202 83 206 125 61 246 42 58 184 79 148 0 165 109 10 131 93 249 94 83 244 24 179 87 15 112 195 251 245 173 149 160 14 23 222 196 22 128 96 201 15 43 110 134 4 241 235 244 120 39 209 5 197 238 52 91 94 185 73 50 242 51 48 130 3 196 48 130 3 45 160 3 2 1 2 2 16 71 191 25 149 223 141 82 70 67 247 219 109 72 13 49 164 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 139 49 11 48 9 6 3 85 4 6 19 2 90 65 49 21 48 19 6 3 85 4 8 19 12 87 101 115 116 101 114 110 32 67 97 112 101 49 20 48 18 6 3 85 4 7 19 11 68 117 114 98 97 110 118 105 108 108 101 49 15 48 13 6 3 85 4 10 19 6 84 104 97 119 116 101 49 29 48 27 6 3 85 4 11 19 20 84 104 97 119 116 101 32 67 101 114 116 105 102 105 99 97 116 105 111 110 49 31 48 29 6 3 85 4 3 19 22 84 104 97 119 116 101 32 84 105 109 101 115 116 97 109 112 105 110 103 32 67 65 48 30 23 13 48 51 49 50 48 52 48 48 48 48 48 48 90 23 13 49 51 49 50 48 51 50 51 53 57 53 57 90 48 83 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 43 48 41 6 3 85 4 3 19 34 86 101 114 105 83 105 103 110 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 169 202 178 164 204 205 32 175 10 125 137 172 135 117 240 180 78 241 223 193 15 191 103 97 189 163 100 28 218 187 249 202 51 171 132 48 137 88 126 140 219 107 221 54 158 15 191 209 236 120 242 119 166 126 111 60 191 147 175 13 186 104 244 108 148 202 189 82 45 171 72 61 245 182 213 93 95 27 2 159 250 47 107 30 164 247 163 154 166 26 200 2 225 127 76 82 227 14 96 236 64 28 126 185 13 222 63 199 180 223 135 189 95 122 106 49 46 3 153 129 19 168 71 32 206 49 115 13 87 45 205 120 52 51 149 18 153 18 185 222 104 47 170 230 227 194 138 140 42 195 139 33 135 102 189 131 88 87 111 117 191 60 170 38 135 93 202 16 21 60 159 132 234 84 193 10 110 196 254 197 74 221 185 7 17 151 34 124 219 62 39 209 30 120 236 159 49 201 241 230 34 25 219 196 179 71 67 154 26 95 160 30 144 228 94 245 238 124 241 125 171 98 1 143 245 77 11 222 208 34 86 168 149 205 174 136 118 174 238 186 13 243 228 77 217 160 251 104 160 174 20 59 179 135 193 187 2 3 1 0 1 163 129 219 48 129 216 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 65 6 3 85 29 31 4 58 48 56 48 54 160 52 160 50 134 48 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 84 104 97 119 116 101 84 105 109 101 115 116 97 109 112 105 110 103 67 65 46 99 114 108 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 8 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 36 6 3 85 29 17 4 29 48 27 164 25 48 23 49 21 48 19 6 3 85 4 3 19 12 84 83 65 50 48 52 56 45 49 45 53 51 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 74 107 249 234 88 194 68 28 49 137 121 153 43 150 191 130 172 1 214 28 76 205 176 138 88 110 223 8 41 163 94 200 202 147 19 231 4 82 13 239 71 39 47 0 56 176 228 201 147 78 154 212 34 98 21 247 63 55 33 79 112 49 128 241 139 56 135 179 232 232 151 0 254 207 85 150 78 36 210 169 39 78 122 174 183 97 65 243 42 206 231 201 217 94 221 187 43 133 62 181 157 181 217 225 87 255 190 180 197 126 245 207 12 158 240 151 254 43 211 59 82 27 27 56 39 247 63 74 48 130 4 252 48 130 4 101 160 3 2 1 2 2 16 101 82 38 225 178 46 24 225 89 15 41 133 172 34 231 92 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 95 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 55 48 53 6 3 85 4 11 19 46 67 108 97 115 115 32 51 32 80 117 98 108 105 99 32 80 114 105 109 97 114 121 32 67 101 114 116 105 102 105 99 97 116 105 111 110 32 65 117 116 104 111 114 105 116 121 48 30 23 13 48 57 48 53 50 49 48 48 48 48 48 48 90 23 13 49 57 48 53 50 48 50 51 53 57 53 57 90 48 129 182 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 48 57 49 48 48 46 6 3 85 4 3 19 39 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 48 57 45 50 32 67 65 48 130 1 34 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 130 1 15 0 48 130 1 10 2 130 1 1 0 190 103 29 180 96 170 16 73 111 86 23 124 102 201 94 134 13 213 241 172 167 113 131 142 139 137 248 136 4 137 21 6 186 45 132 33 149 228 209 156 80 76 251 210 34 189 218 242 178 53 59 30 143 195 9 251 252 19 46 90 191 137 124 61 59 37 30 246 243 88 123 156 244 1 181 198 10 184 128 206 190 39 116 97 103 39 77 106 229 236 129 97 88 121 163 224 23 16 18 21 39 176 225 77 52 127 43 71 32 68 185 222 102 36 102 138 205 79 186 31 197 56 200 84 144 225 114 246 25 102 117 106 185 73 104 207 56 121 13 170 48 168 219 44 96 72 158 215 170 20 1 169 131 215 56 145 48 57 19 150 3 58 124 64 84 182 173 224 47 27 131 220 168 17 82 62 2 179 215 43 253 33 182 167 92 163 15 11 169 166 16 80 14 52 46 77 167 206 201 94 37 212 140 188 243 110 124 41 188 1 93 252 49 135 90 213 140 133 103 88 136 25 160 191 53 240 234 43 163 33 231 144 246 131 229 168 237 96 120 94 123 96 131 253 87 11 93 65 13 99 84 96 214 67 33 239 2 3 1 0 1 163 130 1 219 48 130 1 215 48 18 6 3 85 29 19 1 1 255 4 8 48 6 1 1 255 2 1 0 48 112 6 3 85 29 32 4 105 48 103 48 101 6 11 96 134 72 1 134 248 69 1 7 23 3 48 86 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 99 112 115 48 42 6 8 43 6 1 5 5 7 2 2 48 30 26 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 48 14 6 3 85 29 15 1 1 255 4 4 3 2 1 6 48 109 6 8 43 6 1 5 5 7 1 12 4 97 48 95 161 93 160 91 48 89 48 87 48 85 22 9 105 109 97 103 101 47 103 105 102 48 33 48 31 48 7 6 5 43 14 3 2 26 4 20 143 229 211 26 134 172 141 142 107 195 207 128 106 212 72 24 44 123 25 46 48 37 22 35 104 116 116 112 58 47 47 108 111 103 111 46 118 101 114 105 115 105 103 110 46 99 111 109 47 118 115 108 111 103 111 46 103 105 102 48 29 6 3 85 29 37 4 22 48 20 6 8 43 6 1 5 5 7 3 2 6 8 43 6 1 5 5 7 3 3 48 52 6 8 43 6 1 5 5 7 1 1 4 40 48 38 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 49 6 3 85 29 31 4 42 48 40 48 38 160 36 160 34 134 32 104 116 116 112 58 47 47 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 112 99 97 51 46 99 114 108 48 41 6 3 85 29 17 4 34 48 32 164 30 48 28 49 26 48 24 6 3 85 4 3 19 17 67 108 97 115 115 51 67 65 50 48 52 56 45 49 45 53 53 48 29 6 3 85 29 14 4 22 4 20 151 208 107 168 38 112 200 161 63 148 31 8 45 196 53 155 164 161 30 242 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 129 129 0 139 3 192 221 148 216 65 162 97 105 176 21 168 120 199 48 198 144 60 126 66 247 36 182 228 131 115 23 4 127 4 16 156 161 226 250 129 47 235 192 202 68 231 114 224 80 182 85 16 32 131 110 150 146 228 154 81 106 180 55 49 220 165 45 235 140 0 199 29 79 231 77 50 186 133 248 78 190 250 103 85 101 240 106 190 122 202 100 56 26 16 16 120 69 118 49 243 134 122 3 15 96 194 179 93 157 246 139 102 118 130 27 89 225 131 229 189 73 165 56 86 229 222 65 119 14 88 15 48 130 5 19 48 130 3 251 160 3 2 1 2 2 16 102 227 240 103 121 202 21 22 109 80 83 111 136 25 26 131 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 48 129 182 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 48 57 49 48 48 46 6 3 85 4 3 19 39 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 48 57 45 50 32 67 65 48 30 23 13 49 48 48 55 50 57 48 48 48 48 48 48 90 23 13 49 50 48 56 48 56 50 51 53 57 53 57 90 48 129 208 49 11 48 9 6 3 85 4 6 19 2 85 83 49 22 48 20 6 3 85 4 8 19 13 77 97 115 115 97 99 104 117 115 101 116 116 115 49 15 48 13 6 3 85 4 7 19 6 87 111 98 117 114 110 49 30 48 28 6 3 85 4 10 20 21 77 111 110 111 116 121 112 101 32 73 109 97 103 105 110 103 32 73 110 99 46 49 62 48 60 6 3 85 4 11 19 53 68 105 103 105 116 97 108 32 73 68 32 67 108 97 115 115 32 51 32 45 32 77 105 99 114 111 115 111 102 116 32 83 111 102 116 119 97 114 101 32 86 97 108 105 100 97 116 105 111 110 32 118 50 49 24 48 22 6 3 85 4 11 20 15 84 121 112 101 32 79 112 101 114 97 116 105 111 110 115 49 30 48 28 6 3 85 4 3 20 21 77 111 110 111 116 121 112 101 32 73 109 97 103 105 110 103 32 73 110 99 46 48 129 159 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 3 129 141 0 48 129 137 2 129 129 0 148 68 160 149 105 124 85 13 208 219 22 141 50 53 138 76 51 171 94 32 161 76 215 42 135 56 215 152 165 64 240 25 73 11 34 30 83 79 194 67 166 202 139 169 86 239 110 72 6 168 5 21 57 30 99 59 36 18 144 185 152 207 202 8 53 125 114 227 71 87 253 121 203 138 74 231 64 112 45 53 99 127 174 128 207 196 175 216 251 247 201 252 137 216 215 164 160 219 9 242 162 242 123 239 205 117 193 247 101 80 100 34 157 189 125 188 173 184 75 204 88 69 14 77 209 89 76 77 2 3 1 0 1 163 130 1 131 48 130 1 127 48 9 6 3 85 29 19 4 2 48 0 48 14 6 3 85 29 15 1 1 255 4 4 3 2 7 128 48 68 6 3 85 29 31 4 61 48 59 48 57 160 55 160 53 134 51 104 116 116 112 58 47 47 99 115 99 51 45 50 48 48 57 45 50 45 99 114 108 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 48 57 45 50 46 99 114 108 48 68 6 3 85 29 32 4 61 48 59 48 57 6 11 96 134 72 1 134 248 69 1 7 23 3 48 42 48 40 6 8 43 6 1 5 5 7 2 1 22 28 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 48 19 6 3 85 29 37 4 12 48 10 6 8 43 6 1 5 5 7 3 3 48 117 6 8 43 6 1 5 5 7 1 1 4 105 48 103 48 36 6 8 43 6 1 5 5 7 48 1 134 24 104 116 116 112 58 47 47 111 99 115 112 46 118 101 114 105 115 105 103 110 46 99 111 109 48 63 6 8 43 6 1 5 5 7 48 2 134 51 104 116 116 112 58 47 47 99 115 99 51 45 50 48 48 57 45 50 45 97 105 97 46 118 101 114 105 115 105 103 110 46 99 111 109 47 67 83 67 51 45 50 48 48 57 45 50 46 99 101 114 48 31 6 3 85 29 35 4 24 48 22 128 20 151 208 107 168 38 112 200 161 63 148 31 8 45 196 53 155 164 161 30 242 48 17 6 9 96 134 72 1 134 248 66 1 1 4 4 3 2 4 16 48 22 6 10 43 6 1 4 1 130 55 2 1 27 4 8 48 6 1 1 0 1 1 255 48 13 6 9 42 134 72 134 247 13 1 1 5 5 0 3 130 1 1 0 78 230 34 135 223 103 65 21 23 226 210 238 126 14 206 194 153 214 99 189 240 181 147 229 106 114 98 225 245 210 60 56 238 168 61 8 95 186 71 129 130 95 91 75 73 244 29 32 250 15 147 9 208 29 25 86 68 23 162 136 243 251 141 157 174 247 13 53 222 60 12 172 68 148 96 69 42 155 254 155 111 76 59 177 52 103 112 16 134 255 90 57 92 90 227 108 130 171 53 124 101 75 253 152 109 181 21 148 73 156 136 112 16 190 61 177 98 149 180 219 180 212 218 232 157 65 144 126 254 125 185 164 146 235 110 242 34 138 198 119 54 77 138 90 11 83 5 49 211 43 40 175 82 225 141 122 107 181 119 68 189 12 173 244 93 37 44 227 205 138 48 62 75 3 156 121 202 166 78 174 11 194 204 36 7 11 193 148 130 246 16 241 186 144 182 155 154 216 92 60 19 241 234 2 6 24 39 77 60 137 111 51 138 211 134 222 233 88 51 117 61 235 147 105 226 68 111 78 0 108 207 213 133 218 86 166 154 166 63 203 76 33 104 144 242 96 186 225 232 6 93 57 33 19 50 237 49 130 3 103 48 130 3 99 2 1 1 48 129 203 48 129 182 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 31 48 29 6 3 85 4 11 19 22 86 101 114 105 83 105 103 110 32 84 114 117 115 116 32 78 101 116 119 111 114 107 49 59 48 57 6 3 85 4 11 19 50 84 101 114 109 115 32 111 102 32 117 115 101 32 97 116 32 104 116 116 112 115 58 47 47 119 119 119 46 118 101 114 105 115 105 103 110 46 99 111 109 47 114 112 97 32 40 99 41 48 57 49 48 48 46 6 3 85 4 3 19 39 86 101 114 105 83 105 103 110 32 67 108 97 115 115 32 51 32 67 111 100 101 32 83 105 103 110 105 110 103 32 50 48 48 57 45 50 32 67 65 2 16 102 227 240 103 121 202 21 22 109 80 83 111 136 25 26 131 48 9 6 5 43 14 3 2 26 5 0 160 112 48 16 6 10 43 6 1 4 1 130 55 2 1 12 49 2 48 0 48 25 6 9 42 134 72 134 247 13 1 9 3 49 12 6 10 43 6 1 4 1 130 55 2 1 4 48 28 6 10 43 6 1 4 1 130 55 2 1 11 49 14 48 12 6 10 43 6 1 4 1 130 55 2 1 21 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 72 227 234 219 23 99 143 198 177 21 87 39 32 183 101 244 25 83 149 24 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 129 128 69 59 188 212 186 239 218 27 191 98 59 222 18 236 74 6 132 69 113 65 201 2 254 46 14 149 243 137 177 82 244 65 235 109 50 44 72 191 41 145 188 178 47 93 100 36 52 46 186 150 180 182 74 115 151 224 246 159 65 247 247 104 182 245 128 6 120 65 190 83 144 192 126 120 82 91 28 170 14 33 66 220 190 9 156 51 211 70 80 144 59 5 153 16 43 89 105 236 133 216 99 209 45 195 6 150 52 237 20 163 156 242 241 84 64 213 71 23 160 11 0 31 140 102 239 222 62 27 161 130 1 127 48 130 1 123 6 9 42 134 72 134 247 13 1 9 6 49 130 1 108 48 130 1 104 2 1 1 48 103 48 83 49 11 48 9 6 3 85 4 6 19 2 85 83 49 23 48 21 6 3 85 4 10 19 14 86 101 114 105 83 105 103 110 44 32 73 110 99 46 49 43 48 41 6 3 85 4 3 19 34 86 101 114 105 83 105 103 110 32 84 105 109 101 32 83 116 97 109 112 105 110 103 32 83 101 114 118 105 99 101 115 32 67 65 2 16 56 37 215 250 248 97 175 158 244 144 231 38 181 214 90 213 48 9 6 5 43 14 3 2 26 5 0 160 93 48 24 6 9 42 134 72 134 247 13 1 9 3 49 11 6 9 42 134 72 134 247 13 1 7 1 48 28 6 9 42 134 72 134 247 13 1 9 5 49 15 23 13 49 49 48 53 48 53 49 54 53 53 49 48 90 48 35 6 9 42 134 72 134 247 13 1 9 4 49 22 4 20 84 23 8 43 11 189 238 26 39 14 31 141 252 83 147 244 56 86 16 15 48 13 6 9 42 134 72 134 247 13 1 1 1 5 0 4 129 128 29 193 119 137 174 155 111 34 227 107 229 69 218 78 145 64 240 159 239 59 31 39 74 86 172 58 253 168 148 106 124 247 156 193 127 123 147 96 78 27 196 43 87 149 148 203 22 225 154 103 51 209 43 41 19 200 236 190 188 89 177 3 164 41 153 236 29 136 153 36 135 119 15 155 202 20 251 212 212 73 76 116 14 200 61 46 111 32 201 3 205 232 229 15 208 33 57 179 86 25 213 251 172 189 172 169 56 189 176 213 12 163 217 99 173 176 149 180 104 88 195 226 215 41 255 145 164 199 0 0]! ! !OpenSansRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:39'! install FreeTypeFontProvider current addFromFileContents: self fontContents baseName: self originalFileName! ! !OpenSansRegular methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:39'! originalFileName ^ 'OpenSans-Regular.ttf'! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:06'! codeFontName ^ 'Source Code Pro'! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:34'! defaultFontName ^ 'Open Sans'! ! !SourceCodeFonts class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/11/2013 14:19' prior: 70216304! setSourceCodeFonts: pointSize StandardFonts setAllStandardFontsTo: (LogicalFont familyName: self defaultFontName pointSize: pointSize); haloFont: (LogicalFont familyName: self defaultFontName pointSize: pointSize - 1); balloonFont: (LogicalFont familyName: self defaultFontName pointSize: pointSize - 1); windowTitleFont: (LogicalFont familyName: self defaultFontName pointSize: pointSize + 1); listFont: (LogicalFont familyName: self defaultFontName pointSize: pointSize); menuFont: (LogicalFont familyName: self defaultFontName pointSize: pointSize); codeFont: (LogicalFont familyName: self fontName pointSize: pointSize)! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'EstebanLorenzano 10/11/2013 14:42' prior: 71086617! licenseString ^ 'LICENSE Licensed under the MIT License with parts under the Apache License. Copyright (c) 2008-2013 The Pharo Project, and Contributors Copyright (c) 2008-2013 Inria Copyright (c) 1996-2008 Viewpoints Research Institute, and Contributors Copyright (c) 1996 Apple Computer, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0 Pharo uses icons by Mark James (http://www.famfamfam.com) under Creative Commons Attribution 2.5 License. Pharo uses icons by Eclipse under Eclipse Public License - v 1.0 http://www.eclipse.org/legal/epl-v10.html Pharo uses Source Code Pro Fonts by Adobe under SIL Open Font License, v 1.1 http://scripts.sil.org/OFL Pharo uses Open Sans by Steve Matteson under Apache License, 2.0 http://www.apache.org/licenses/LICENSE-2.0.html '! ! SourceSansProRegular removeSelector: #originalFileName! SourceSansProRegular removeSelector: #install! SourceSansProRegular removeSelector: #fontContents! SourceSansProRegular class removeSelector: #initialize! Smalltalk globals removeClassNamed: #SourceSansProRegular! "FreeType"! "System-Support"! ----End fileIn----! ----QUIT----an Array(11 October 2013 2:52:18 pm) Pharo.image priorSource: 20770667! ----STARTUP----an Array(11 October 2013 2:58:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 2:58:10 pm) Pharo-30472.image priorSource: 21473012! ----STARTUP----an Array(11 October 2013 3:02:10 pm) as /Users/denker/Desktop/30472/Pharo-30472.image! ----QUIT----an Array(11 October 2013 3:02:26 pm) Pharo-30472.image priorSource: 21473217! ----STARTUP----an Array(11 October 2013 3:05:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(11 October 2013 3:05:29 pm) Pharo.image priorSource: 21473416! ----STARTUP----an Array(11 October 2013 3:11:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 3:11:40 pm) Pharo-30472.image priorSource: 21473627! ----STARTUP----an Array(11 October 2013 6:32:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/11/2013 18:29' prior: 71102622! commentForCurrentUpdate ^ '11848 debugger should set code font https://pharo.fogbugz.com/f/cases/11848/ 11851 MessageBrowser text should be codeFont https://pharo.fogbugz.com/f/cases/11851/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/11/2013 18:29'! script128 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.2.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1640.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-EstebanLorenzano.950.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.87.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.177.mcz Spec-Debugger-EstebanLorenzano.165.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.949.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/11/2013 18:29'! update30473 "self new update30473" self withUpdateLog: '11848 debugger should set code font https://pharo.fogbugz.com/f/cases/11848/ 11851 MessageBrowser text should be codeFont https://pharo.fogbugz.com/f/cases/11851/ '. self loadTogether: self script128 merge: false. SourceCodeProRegular new install. OpenSansRegular new install. FreeTypeFontProvider current updateFromSystem. SourceCodeFonts setSourceCodeFonts: 10. self flushCaches. ! ! "ScriptLoader30"! !MessageBrowser methodsFor: 'private' stamp: 'EstebanLorenzano 10/11/2013 16:53'! codeFont ^ StandardFonts codeFont! ! !MessageBrowser methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/11/2013 16:52' prior: 36576002! initializeWidgets self instantiateModels: #( listModel MultiColumnListModel textModel TextModel toolbarModel MethodToolbar ). listModel displayBlock: [ :item | self wrapItem: item ]. textModel aboutToStyle: true. textModel whenBuiltDo: [ :ann | ann widget font: self codeFont ]. refreshingBlockHolder := [ :item | true ] asValueHolder. self setListMenu; initializeDropList; setFocus. ! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'EstebanLorenzano 10/11/2013 15:57'! font: aFont self widgetDo: [ :w | w font: aFont ]! ! !SpecDebugger methodsFor: 'private' stamp: 'EstebanLorenzano 10/11/2013 15:58'! codeFont ^ StandardFonts codeFont! ! !SpecDebugger methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/11/2013 15:58' prior: 69329442! initializeWidgets self instantiateModels: {(#stack -> #SpecDebuggerStack). (#toolbar -> #SpecDebuggerDynamicToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorNavigator). (#contextInspector -> #EyeDebuggerContextInspector)}. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self code whenBuiltDo: [ :ann | ann widget font: self codeFont ]. self setFocusOrder! ! !SourceCodeFonts class methodsFor: 'font registration' stamp: 'IgorStasenko 10/11/2013 17:21'! registerFonts: freeTypeFontManager { OpenSansRegular. SourceCodeProRegular } do: [ :each | | font | font := each new. freeTypeFontManager addFromFileContents: font fontContents baseName: font originalFileName ]! ! !FreeTypeFontProvider methodsFor: 'loading and updating' stamp: 'IgorStasenko 10/11/2013 17:23' prior: 22752336! updateFontsFromSystem | done | FT2Library current ifNil: [ ^ self ]. SourceCodeFonts registerFonts: self. "Add all the embedded file infos" embeddedFileInfoCache valuesDo:[:eachSet | eachSet do:[:each | fileInfos addFirst: each]]. done := Set new. "visited directories are tracked in done, so that they are not processed twice" self platformImageRelativeDirectories do:[:each | self updateFromDirectory: each done: done] displayingProgress: 'Loading image relative font files'. self platformVMRelativeDirectories do:[:each | self updateFromDirectory: each done: done] displayingProgress: 'Loading vm relative font files'. self platformAbsoluteDirectories do:[:each | self updateFromDirectory: each done: done ] displayingProgress: 'Loading platform font files'.! ! "FreeType"! "Spec-Debugger"! "Spec-MorphicAdapters"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(11 October 2013 6:32:18 pm) Pharo.image priorSource: 21473832! ----STARTUP----an Array(11 October 2013 6:38:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(11 October 2013 6:38:11 pm) Pharo-30473.image priorSource: 21487833! ----STARTUP----an Array(12 October 2013 8:50:16 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/12/2013 08:47' prior: 71805791! commentForCurrentUpdate ^ '11844 Move TabModel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11844 11850 Add support for selectedItem in TreeModel https://pharo.fogbugz.com/f/cases/11850 -> add argumentNames to BlockClosure'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/12/2013 08:47'! script129 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.4.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.143.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-EstebanLorenzano.950.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.87.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-EstebanLorenzano.165.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.949.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1309.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/12/2013 08:47'! update30474 "self new update30474" self withUpdateLog: '11844 Move TabModel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11844 11850 Add support for selectedItem in TreeModel https://pharo.fogbugz.com/f/cases/11850 -> add argumentNames to BlockClosure'. self loadTogether: self script129 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BlockClosure methodsFor: 'accessing' stamp: 'MarcusDenker 10/12/2013 08:46'! argumentNames ^ self sourceNode arguments collect: [ :each | each name ] ! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/11/2013 15:03' prior: 69540971! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TabModel methodsFor: '*deprecated30' stamp: 'BenjaminVanRyseghem 9/28/2013 21:09' prior: 69509300! morph self deprecated: 'Use #contents instead'. ^ self contents! ! !TabModel methodsFor: '*deprecated30' stamp: 'BenjaminVanRyseghem 9/28/2013 21:10' prior: 69509476! morph: aMorph self deprecated: 'Use #contents: instead'. self contents: aMorph! ! "Deprecated30"! "Kernel"! "Spec-Core"! ----End fileIn----! ----QUIT----an Array(12 October 2013 8:50:24 am) Pharo.image priorSource: 21488038! ----STARTUP----an Array(12 October 2013 8:56:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 October 2013 8:56:24 am) Pharo-30474.image priorSource: 21500379! ----STARTUP----an Array(12 October 2013 1:14:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/12/2013 13:09' prior: 71819993! commentForCurrentUpdate ^ '11855 Code Critic tests failing https://pharo.fogbugz.com/f/cases/11855 11611 Pharo3.0 DockingBarMorph>>updatePosition error (Compiler problem ?) https://pharo.fogbugz.com/f/cases/11611 11836 add #allStoresInto: instVarName of: aClass to SystemNavigation https://pharo.fogbugz.com/f/cases/11836 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/12/2013 13:10'! script130 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.4.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.147.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.11.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.952.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-EstebanLorenzano.165.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.949.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1311.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/12/2013 13:10'! update30475 "self new update30475" self withUpdateLog: '11855 Code Critic tests failing https://pharo.fogbugz.com/f/cases/11855 11611 Pharo3.0 DockingBarMorph>>updatePosition error (Compiler problem ?) https://pharo.fogbugz.com/f/cases/11611 11836 add #allStoresInto: instVarName of: aClass to SystemNavigation https://pharo.fogbugz.com/f/cases/11836 '. self loadTogether: self script130 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'MarcusDenker 10/12/2013 10:52'! allStoresInto: instVarName of: aClass | coll | coll := OrderedCollection new. aClass withAllSubAndSuperclassesDo: [ :class | (class whichSelectorsStoreInto: instVarName) do: [ :sel | coll add: (self createMethodNamed: sel realParent: class) ] ]. ^ coll! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'MarcusDenker 10/12/2013 10:54' prior: 51535002! browseAllStoresInto: instVarName from: aClass "Create and schedule a Message Set browser for all the receiver's methods or any methods of a subclass/superclass that refer to the instance variable name." "self new browseAllStoresInto: 'youpi' from: BalloonEdgeData class." ^ self browseMessageList: (self allStoresInto: instVarName of: aClass) name: 'Stores into ' , instVarName autoSelect: instVarName ! ! !RBTransformationRule class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/11/2013 11:21' prior: 71100088! cleanUp RecursiveSelfRule := nil.! ! !RBTransformationRule class methodsFor: 'accessing' stamp: 'MarcusDenker 10/12/2013 00:09' prior: 31473571! recursiveSelfRule ^ RecursiveSelfRule ifNil: [ self initializeRecursiveSelfRule ]! ! !DockingBarMorph methodsFor: 'private - layout' stamp: 'MarcusDenker 10/12/2013 11:38' prior: 20958907! updateExtent "private - update the receiver's extent" | margin usedHeight | self fullBounds. self fillsOwner ifFalse: [^ self]. margin := self avoidVisibleBordersAtEdge ifTrue: [self borderWidth * 2] ifFalse: [0]. self isHorizontal ifTrue: [self width: self owner width + margin]. self isVertical ifTrue: [ usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top #bottom ). self height: self owner height + margin - usedHeight]! ! !DockingBarMorph methodsFor: 'private - layout' stamp: 'MarcusDenker 10/12/2013 11:37' prior: 20940196! updatePosition "private - update the receiver's position. Fixed so as not to keep changing position!! (called twice if adhereing)" | edgeSymbol margin usedHeight usedWidth | edgeSymbol := self edgeToAdhereTo. edgeSymbol == #none ifTrue: [self perform: (edgeSymbol , ':') asSymbol with: (self owner perform: edgeSymbol)]. margin := self avoidVisibleBordersAtEdge ifTrue: [self borderWidth asPoint] ifFalse: [0 asPoint]. self isAdheringToTop ifTrue: [ usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). self topLeft: self owner topLeft - margin + (0 @ usedHeight)]. self isAdheringToBottom ifTrue: [ usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#bottom ). self bottomLeft: self owner bottomLeft + (-1 @ 1 * margin) - (0 @ usedHeight)]. self isAdheringToLeft ifTrue: [ usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). usedWidth := self usedWidthByPredominantDockingBarsOfChastes: #(#left ). self topLeft: self owner topLeft - margin + (usedWidth @ usedHeight)]. self isAdheringToRight ifTrue: [ usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). usedWidth := self usedWidthByPredominantDockingBarsOfChastes: #(#right ). self topRight: self owner topRight + (1 @ -1 * margin) + (usedWidth negated @ usedHeight)]! ! !DockingBarMorph methodsFor: 'private - accessing' stamp: 'MarcusDenker 10/12/2013 11:40' prior: 20957205! usedHeightByPredominantDockingBarsOfChastes: predominantChastes "Private - convenience" ^(self predominantDockingBarsOfChastes: predominantChastes) ifEmpty: [0] ifNotEmpty: [:predominants | (predominants collect: [:each | each height]) sum] ! ! !DockingBarMorph methodsFor: 'private - accessing' stamp: 'MarcusDenker 10/12/2013 11:41' prior: 20957577! usedWidthByPredominantDockingBarsOfChastes: predominantChastes "Private - convenience" ^(self predominantDockingBarsOfChastes: predominantChastes) ifEmpty: [0] ifNotEmpty: [:predominants | (predominants collect: [:each | each width]) sum]! ! "Morphic-Base"! "Polymorph-Widgets"! "Refactoring-Critics"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 October 2013 1:14:25 pm) Pharo.image priorSource: 21500584! ----STARTUP----an Array(12 October 2013 1:20:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 October 2013 1:20:23 pm) Pharo-30475.image priorSource: 21515966! ----STARTUP----an Array(12 October 2013 5:37:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/12/2013 17:33' prior: 71832539! commentForCurrentUpdate ^ '11860 NonInteractiveTranscript should not close stderr on shutdown https://pharo.fogbugz.com/f/cases/11860 11858 remove #inspectGlobals move some methods out of Tools-Inspector https://pharo.fogbugz.com/f/cases/11858 11849 Add better support for selection in MorphTreeMorph https://pharo.fogbugz.com/f/cases/11849'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/12/2013 17:34'! script131 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-EstebanLorenzano.52.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.4.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-StephaneDucasse.258.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.148.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.170.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.119.mcz Polymorph-Widgets-MarcusDenker.952.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-EstebanLorenzano.165.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.951.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.17.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1313.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.576.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/12/2013 17:34'! update30476 "self new update30476" self withUpdateLog: '11860 NonInteractiveTranscript should not close stderr on shutdown https://pharo.fogbugz.com/f/cases/11860 11858 remove #inspectGlobals move some methods out of Tools-Inspector https://pharo.fogbugz.com/f/cases/11858 11849 Add better support for selection in MorphTreeMorph https://pharo.fogbugz.com/f/cases/11849'. self loadTogether: self script131 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Association methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 10/11/2013 15:17'! head ^ (key isKindOf: Association) ifTrue: [ key head ] ifFalse: [ key ]! ! !Association methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 10/11/2013 15:20'! tail ^ (key isKindOf: Association) ifTrue: [ key tail -> value ] ifFalse: [ value ]! ! !SystemNavigation methodsFor: 'query' stamp: 'BenjaminVanRyseghem 6/20/2013 23:52' prior: 49788257! allAccessesTo: instVarName from: aClass | coll | coll := OrderedCollection new. aClass withAllSubAndSuperclassesDo: [ :class | (class whichSelectorsAccess: instVarName) do: [ :sel | coll add: (self createMethodNamed: sel realParent: class) ] ]. ^ coll! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/12/2013 10:52' prior: 71843572! allStoresInto: instVarName of: aClass | coll | coll := OrderedCollection new. aClass withAllSubAndSuperclassesDo: [ :class | (class whichSelectorsStoreInto: instVarName) do: [ :sel | coll add: (self createMethodNamed: sel realParent: class) ] ]. ^ coll! ! !SystemNavigation methodsFor: '*Tools' stamp: 'MarcusDenker 10/12/2013 13:53' prior: 70083632! browseUnsentMessagesInClass: aClass "SystemNavigation new browseUnsentMessagesInClass: SystemNavigation" | unsentMessages | unsentMessages := self unsentMessagesWithProgressBarInClass: aClass. ^self browseMessageList: unsentMessages name: 'Unsent messages in class ', aClass name ! ! !SystemNavigation methodsFor: '*Tools' stamp: 'BenjaminVanRyseghem 4/4/2011 14:28' prior: 51550263! classFromPattern: pattern withCaption: aCaption "If there is a class whose name exactly given by pattern, return it. If there is only one class in the system whose name matches pattern, return it. Otherwise, put up a menu offering the names of all classes that match pattern, and return the class chosen, else nil if nothing chosen. This method ignores tab, space, & cr characters in the pattern" | toMatch potentialClassNames classNames exactMatch index | (toMatch := pattern copyWithoutAll: {(Character space). (Character cr). (Character tab)}) isEmpty ifTrue: [ ^ nil ]. Symbol hasInterned: toMatch ifTrue: [ :patternSymbol | self environment at: patternSymbol ifPresent: [ :maybeClass | ((maybeClass isKindOf: Class) or: [ maybeClass isKindOf: Trait ]) ifTrue: [ ^ maybeClass ] ] ]. toMatch := (toMatch copyWithout: $.) asLowercase. potentialClassNames := (self environment classNames , self environment traitNames) asOrderedCollection. classNames := pattern last = $. ifTrue: [ potentialClassNames select: [ :nm | nm asLowercase = toMatch ] ] ifFalse: [ potentialClassNames select: [ :n | n includesSubstring: toMatch caseSensitive: false ] ]. classNames isEmpty ifTrue: [ ^ nil ]. exactMatch := classNames detect: [ :each | each asLowercase = toMatch ] ifNone: [ nil ]. index := classNames size = 1 ifTrue: [ 1 ] ifFalse: [ exactMatch ifNil: [ UIManager default chooseFrom: classNames lines: #() title: aCaption ] ifNotNil: [ classNames addFirst: exactMatch. UIManager default chooseFrom: classNames lines: #(1) title: aCaption ] ]. index = 0 ifTrue: [ ^ nil ]. ^ self environment at: (classNames at: index) asSymbol " self default classFromPattern: 'znak' withCaption: '' self default classFromPattern: 'orph' withCaption: '' self default classFromPattern: 'TCompil' withCaption: '' "! ! !SystemNavigation methodsFor: '*Tools' stamp: 'StephaneDucasse 8/9/2011 17:57' prior: 51552244! confirmRemovalOf: aSelector on: aClass "Determine if it is okay to remove the given selector. Answer 1 if it should be removed, 2 if it should be removed followed by a senders browse, and 3 if it should not be removed." | count answer caption allCalls | allCalls := self allCallsOn: aSelector. (count := allCalls size) = 0 ifTrue: [^ 1]. "no senders -- let the removal happen without warning" count = 1 ifTrue: [(allCalls first actualClass == aClass and: [allCalls first selector == aSelector]) ifTrue: [^ 1]]. "only sender is itself" caption := 'The message ', aSelector printString ,' has ' , count printString , ' sender'. count > 1 ifTrue: [caption := caption copyWith: $s]. answer := UIManager default chooseFrom: #('Remove it' 'Remove, then browse senders' 'Don''t remove, but show me those senders' 'Forget it -- do nothing -- sorry I asked') title: caption. answer = 3 ifTrue: [self browseMessageList: allCalls name: 'Senders of ' , aSelector autoSelect: aSelector keywords first]. answer = 0 ifTrue: [answer := 3]. "If user didn't answer, treat it as cancel" ^ answer min: 3! ! !SystemNavigation methodsFor: '*Tools' stamp: 'sd 4/15/2003 15:34' prior: 51553477! showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Evaluate choiceBlock if a message is chosen." ^ self showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: nil! ! !SystemNavigation methodsFor: '*Tools' stamp: 'StephaneDucasse 10/4/2010 19:35' prior: 51553912! showMenuOf: selectorCollection withFirstItem: firstItem ifChosenDo: choiceBlock withCaption: aCaption "Show a sorted menu of the given selectors, preceded by firstItem, and all abbreviated to 40 characters. Use aCaption as the menu title, if it is not nil. Evaluate choiceBlock if a message is chosen." | index menuLabels sortedList | sortedList := selectorCollection asSortedCollection. menuLabels := Array streamContents: [:strm | strm nextPut: (firstItem contractTo: 40). sortedList do: [:sel | strm nextPut: (sel contractTo: 40)]]. index := UIManager default chooseFrom: menuLabels lines: #(1). index = 1 ifTrue: [choiceBlock value: firstItem]. index > 1 ifTrue: [choiceBlock value: (sortedList at: index - 1)]! ! !Object methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 10/11/2013 15:27'! head ^ self! ! !Object methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 10/11/2013 15:28'! tail ^ nil! ! !NonInteractiveTranscript methodsFor: 'initialize-release' stamp: 'CamilloBruni 10/12/2013 16:40' prior: 28453401! close self critical: [ stream ifNotNil: [ (self isStdout or: [ self isStderr ]) ifTrue: [ stream flush ] ifFalse: [ stream close ]. stream := nil ] ]! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 10/11/2013 15:12' prior: 26919074! addAllToSelection: aCollection self searchedElement: nil. aCollection do: [:m | m highlight; selected: true ]! ! !MorphTreeListManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/11/2013 16:02' prior: 26909726! nodeMorphsWithAllNodeItems: aNodeItemList | result | result := OrderedCollection new. self allNodeMorphs do: [:m | aNodeItemList do: [ :sel | (m expandPath: sel) ] ]. self allNodeMorphs do: [:m | aNodeItemList do: [ :sel | (m matchPath: sel) ifNotNil: [:col | result addAll: col ] ] ]. ^ result flattened! ! !MorphTreeNodeMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 10/11/2013 16:05'! expandPath: anAssociation anAssociation ifNil: [ ^ false ]. ^ anAssociation head = self complexContents withoutListWrapper ifFalse: [ false ] ifTrue: [ anAssociation tail ifNil: [ ^ true ]. (self isExpanded not and: [ self canExpand ]) ifTrue: [ self toggleExpandedState. container innerWidgetChanged ]. self children anySatisfy: [:child | child expandPath: anAssociation tail ]]! ! !MorphTreeNodeMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 10/11/2013 16:07'! matchPath: anAssociation anAssociation ifNil: [ ^ nil ]. ^ anAssociation head = self complexContents withoutListWrapper ifFalse: [ nil ] ifTrue: [ | matchingChildren | anAssociation tail ifNil: [ ^ { self } ]. matchingChildren := self children collect: [:child | child matchPath: anAssociation tail ]. ^ matchingChildren select: [ :e | e notNil ] ]! ! SystemDictionary removeSelector: #inspectGlobals! SystemNavigation removeSelector: #allUnimplementedNonPrimitiveCalls! "Morphic-Base"! "NonInteractiveTranscript"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(12 October 2013 5:37:22 pm) Pharo.image priorSource: 21516171! ----STARTUP----an Array(12 October 2013 5:43:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(12 October 2013 5:43:18 pm) Pharo-30476.image priorSource: 21535765! ----STARTUP----an Array(13 October 2013 9:57:14 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/13/2013 09:52' prior: 71848126! commentForCurrentUpdate ^ '11856 Some trivial critic changes related to ifNotNil: https://pharo.fogbugz.com/f/cases/11856 11861 Deprecated #browseAllCallsOn:, use #browseAllSendersOf: https://pharo.fogbugz.com/f/cases/11861 11857 add #cleanUp to SystemProgressMorph to reset singleton https://pharo.fogbugz.com/f/cases/11857'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/13/2013 09:53'! script132 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.149.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.167.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.107.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.951.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1315.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.579.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/13/2013 09:53'! update30477 "self new update30477" self withUpdateLog: '11856 Some trivial critic changes related to ifNotNil: https://pharo.fogbugz.com/f/cases/11856 11861 Deprecated #browseAllCallsOn:, use #browseAllSendersOf: https://pharo.fogbugz.com/f/cases/11861 11857 add #cleanUp to SystemProgressMorph to reset singleton https://pharo.fogbugz.com/f/cases/11857'. self loadTogether: self script132 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDebuggerStack methodsFor: 'actions browsing' stamp: 'MarcusDenker 10/13/2013 07:58' prior: 69337367! browseSendersOfMessages "Present a menu of the current message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self currentMessageName ifNotNil: [ self systemNavigation browseAllSendersOf: self currentMessageName ]! ! !SystemNavigation methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/13/2013 08:03' prior: 51526929! browseAllCallsOn: aLiteral self deprecated: 'use #browseAllSendersOf:'. ^ self browseAllSendersOf: aLiteral! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'MarcusDenker 10/13/2013 08:02'! browseAllReferencesTo: aLiteral "Create and schedule a message browser on each method that refers to aLiteral. For example, SystemNavigation new browseAllSendersOf: #printOn:." ^ self openBrowserFor: aLiteral withMethods: (self allCallsOn: aLiteral) asSortedCollection ! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'MarcusDenker 10/13/2013 08:07' prior: 51537471! browseClassVarRefs: aClass "Put up a menu offering all class variable names; if the user chooses one, open up a message-list browser on all methods that refer to the selected class variable" | lines labelStream allVars index owningClasses | lines := OrderedCollection new. allVars := OrderedCollection new. owningClasses := OrderedCollection new. labelStream := (String new: 200) writeStream. aClass withAllSuperclasses reverseDo: [:class | | vars | vars := class classVarNames. vars do: [:var | labelStream nextPutAll: var; cr. allVars add: var. owningClasses add: class]. vars isEmpty ifFalse: [lines add: allVars size]]. labelStream contents isEmpty ifTrue: [^Beeper beep]. "handle nil superclass better" labelStream skip: -1 "cut last CR". index := (UIManager default chooseFrom: (labelStream contents substrings) lines: lines). index = 0 ifTrue: [^ self]. ^ self browseAllReferencesTo: ((owningClasses at: index) classPool associationAt: (allVars at: index))! ! !SystemNavigation methodsFor: '*NautilusCommon' stamp: 'MarcusDenker 10/13/2013 07:59' prior: 51515564! confirmRemovalOfSelectors: aCollection on: aClass "Determine if it is okay to remove the given selector. Answer 1 if it should be removed, 2 if it should be removed followed by a senders browse, and 3 if it should not be removed." | collection count answer caption allCalls selectors oneCalls | collection := aCollection asOrderedCollection. oneCalls := OrderedCollection new. aCollection do: [:sel | allCalls := self allCallsOn: sel. (count := allCalls size) = 0 "no senders -- let the removal happen without warning" ifTrue: [ collection remove: sel ]. count = 1 "only sender is itself" ifTrue: [ (allCalls first actualClass == aClass and: [ allCalls first selector == sel ]) ifTrue: [ oneCalls add: sel. collection remove: sel.]]]. "collection removeAll: (self buildSelfContainedCallsFrom: aCollection in: aClass)." collection ifEmpty: [ ^ 1 ]. count := collection inject: 0 into: [:sum :sel | sum + (self allCallsOn: sel) size]. selectors := collection joinUsing: ', #' last: ' and #'. caption := 'The messages #', selectors,' have ' , count printString , ' sender'. "ugly but faster" caption := (count = 1 ifTrue: [ 'The messages #', selectors,' have ' , count printString , ' sender' ] ifFalse: [ 'The messages #', selectors,' have ' , count printString , ' senders' ]). answer := UIManager default chooseFrom: #('Remove them' 'Remove, then browse senders (if still existing)' 'Don''t remove, but show me those senders' 'Forget it -- do nothing -- sorry I asked') title: caption. answer = 3 ifTrue: [ collection do: [:aSelector | self browseAllSendersOf: aSelector ]]. answer = 0 ifTrue: [answer := 3]. "If user didn't answer, treat it as cancel" ^ answer min: 3! ! !LegacyWeakSubscription methodsFor: 'finalization' stamp: 'MarcusDenker 10/10/2013 23:38' prior: 24349615! unregister self subscriber ifNotNil: [:sub | self weakRegistry remove: sub ] ! ! !AbstractTool methodsFor: 'method' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 17458814! browseSendersOfMessagesFrom: aSelector "Present a menu of the currently selected message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self getSelectorAndSendQuery: #browseAllSendersOf: to: self systemNavigation with: {} selector: aSelector! ! !AbstractTool methodsFor: 'method' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 17465463! removeMethod: aMethod inClass: aClass "If a message is selected, create a Confirmer so the user can verify that the currently selected message should be removed from the system. If so, remove it. " | messageName confirmation | aMethod ifNil: [^ false]. messageName := aMethod selector. confirmation := self systemNavigation confirmRemovalOf: messageName on: aClass. confirmation = 3 ifTrue: [^ false]. (aClass includesLocalSelector: messageName) ifTrue: [ aClass removeSelector: messageName ] ifFalse: [ self removeNonLocalSelector: messageName ]. "In case organization not cached" confirmation = 2 ifTrue: [self systemNavigation browseAllSendersOf: messageName]. ^ true! ! !AbstractTool methodsFor: 'method' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 17466243! removeMethods: aCollection inClass: aClass "If a message is selected, create a Confirmer so the user can verify that the currently selected message should be removed from the system. If so, remove it. " | messagesName confirmation | aCollection isEmptyOrNil ifTrue: [^ false]. aCollection size = 1 ifTrue: [ ^ self removeMethod: aCollection first inClass: aClass ]. messagesName := aCollection collect: #selector. confirmation := self systemNavigation confirmRemovalOfSelectors: messagesName on: aClass. confirmation = 3 ifTrue: [ ^ false ]. aCollection do: [:message|| messageName | messageName := message selector. (aClass includesLocalSelector: messageName) ifTrue: [ aClass removeSelector: messageName ] ifFalse: [ self removeNonLocalSelector: messageName ]]. "In case organization not cached" confirmation = 2 ifTrue: [ aCollection do: [:message || messageName | messageName := message selector. ((self systemNavigation allCallsOn: messageName) size > 0) ifTrue: [ self systemNavigation browseAllSendersOf: messageName ]]]. ^ true! ! !AbstractTool methodsFor: 'method' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 17468691! selectThenBrowseSendersOfMessagesFrom: aSelector "Present a menu of the currently selected message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self selectThenGetSelectorAndSendQuery: #browseAllSendersOf: to: self systemNavigation with: {} selector: aSelector! ! !Browser methodsFor: 'message functions' stamp: 'MarcusDenker 10/13/2013 07:59' prior: 18487154! removeMessage "If a message is selected, create a Confirmer so the user can verify that the currently selected message should be removed from the system. If so, remove it. " | messageName confirmation | messageListIndex = 0 ifTrue: [^ self]. self okToChange ifFalse: [^ self]. messageName := self selectedMessageName. confirmation := self systemNavigation confirmRemovalOf: messageName on: self selectedClassOrMetaClass. confirmation = 3 ifTrue: [^ self]. (self selectedClassOrMetaClass includesLocalSelector: messageName) ifTrue: [self selectedClassOrMetaClass removeSelector: messageName] ifFalse: [self removeNonLocalSelector: messageName]. self messageListIndex: 0. self changed: #messageList. self setClassOrganizer. "In case organization not cached" confirmation = 2 ifTrue: [self systemNavigation browseAllSendersOf: messageName]! ! !PSMCPatchMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 28978938! browseSenders "Browse the method senders." self systemNavigation browseAllSendersOf: (self selectedMessageName ifNil: [^self])! ! !WorldMorph methodsFor: 'geometry' stamp: 'MarcusDenker 10/10/2013 23:48' prior: 43527089! position: aPoint "Prevent moving a world (e.g. via HandMorph>>specialGesture:)" super position: aPoint. self viewBox ifNotNil: [:viewBox | self viewBox: (aPoint extent: viewBox extent)]. ! ! !DictionaryInspector methodsFor: 'menu' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 20740305! selectionReferences "Create a browser on all references to the association of the current selection." self selectionIndex = 0 ifTrue: [^ self changed: #flash]. object class == MethodDictionary ifTrue: [^ self changed: #flash]. self systemNavigation browseAllSendersOf: (object associationAt: (keyArray at: selectionIndex - self numberOfFixedFields)). ! ! !DictionaryInspector methodsFor: 'menu' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 20740744! sendersOfSelectedKey "Create a browser on all senders of the selected key" | aKey | self selectionIndex = 0 ifTrue: [^ self changed: #flash]. ((aKey := keyArray at: selectionIndex - self numberOfFixedFields) isSymbol) ifFalse: [^ self changed: #flash]. SystemNavigation new browseAllSendersOf: aKey! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'MarcusDenker 10/13/2013 08:31' prior: 26925077! setSelectedMorph: aMorph | path | path := aMorph ifNotNil: [ aMorph path collect: [ :m | m complexContents ] ]. lastClickedMorph := aMorph. self emptySelection. aMorph ifNotNil: [ self addToSelection: lastClickedMorph ]. self selectionUpdateFromViewWhile: [ self listModel selection: (self newSelectionHolderWithNodePath: path) ]! ! !StringHolder methodsFor: '*Tools' stamp: 'MarcusDenker 10/13/2013 07:58' prior: 51144361! browseSendersOfMessages "Present a menu of the currently selected message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self getSelectorAndSendQuery: #browseAllSendersOf: to: self systemNavigation! ! !StringHolder methodsFor: '*Tools' stamp: 'MarcusDenker 10/13/2013 07:58' prior: 51148193! messageListKey: aChar from: view "Respond to a Command key. I am a model with a code pane, and I also have a listView that has a list of methods. The view knows how to get the list and selection." | sel class | aChar == $D ifTrue: [^ self toggleDiffing]. sel := self selectedMessageName. aChar == $m ifTrue: "These next two put up a type in if no message selected" [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllImplementorsOf: to: self systemNavigation]. aChar == $n ifTrue: [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllSendersOf: to: self systemNavigation]. "The following require a class selection" (class := self selectedClassOrMetaClass) ifNil: [^ self arrowKey: aChar from: view]. aChar == $b ifTrue: [^ Smalltalk tools browser fullOnClass: class selector: sel]. aChar == $N ifTrue: [^ self browseClassRefs]. aChar == $i ifTrue: [^ self methodHierarchy]. aChar == $h ifTrue: [^ self classHierarchy]. "The following require a method selection" sel ifNotNil: [aChar == $o ifTrue: [^ self fileOutMessage]. aChar == $c ifTrue: [^ self copySelector]. aChar == $v ifTrue: [^ self browseVersions]. aChar == $x ifTrue: [^ self removeMessage]]. ^ self arrowKey: aChar from: view! ! !TClass methodsFor: 'compiling' stamp: 'MarcusDenker 10/13/2013 08:32' prior: 40985982! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" "First look in classVar dictionary." (self classPool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]. "Next look in shared pools." self sharedPools do: [:pool | (pool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]]. self superclass ifNotNil: [:supercl | ^ supercl innerBindingOf: aSymbol]. ^ nil! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'MarcusDenker 10/10/2013 23:47' prior: 42849659! drawBackgroundSketchOn: aCanvas backgroundMorph ifNil: [ ^ self ]. self clipSubmorphs ifTrue: [ aCanvas clipBy: self clippingBounds during: [ :canvas | canvas fullDrawMorph: backgroundMorph ] ] ifFalse: [ aCanvas fullDrawMorph: backgroundMorph ]! ! !SmalltalkEditor methodsFor: 'menu messages' stamp: 'MarcusDenker 10/13/2013 08:02' prior: 33465923! referencesTo: aVariableOrClassName "Open a references browser on the given symbol" | env ref | " ugly dispatch, but current Browser protocol names aren't really cool " env := self modelCurrentSelectedClass ifNil: [ Smalltalk globals ]. env isBehavior ifTrue: [ (env instVarIndexFor: aVariableOrClassName) > 0 ifTrue: [ ^ self systemNavigation browseAllAccessesTo: aVariableOrClassName from: env]]. ref:= (env bindingOf: aVariableOrClassName) ifNil: [ ^ self ]. self systemNavigation browseAllReferencesTo: ref! ! !SmalltalkEditor methodsFor: 'menu messages' stamp: 'MarcusDenker 10/13/2013 07:58' prior: 33467471! sendersOf: selectedSelector " opens a Browser on the given selector" self model systemNavigation browseAllSendersOf: selectedSelector! ! !CodeHolder methodsFor: 'commands' stamp: 'MarcusDenker 10/13/2013 07:58' prior: 19426317! browseSenders "Create and schedule a message set browser on all senders of the currently selected message selector. Of there is no message currently selected, offer a type-in" self sendQuery: #browseAllSendersOf: to: self systemNavigation! ! !CodeHolder methodsFor: 'message list menu' stamp: 'MarcusDenker 10/13/2013 07:59' prior: 19454259! messageListKey: aChar from: view "Respond to a Command key. I am a model with a code pane, and I also have a listView that has a list of methods. The view knows how to get the list and selection." | sel class | aChar == $D ifTrue: [^ self toggleDiffing]. sel := self selectedMessageName. aChar == $m ifTrue: "These next two put up a type in if no message selected" [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllImplementorsOf: to: self systemNavigation]. aChar == $n ifTrue: [^ self useSelector: sel orGetSelectorAndSendQuery: #browseAllSendersOf: to: self systemNavigation]. "The following require a class selection" (class := self selectedClassOrMetaClass) ifNil: [^ self arrowKey: aChar from: view]. aChar == $b ifTrue: [^ Smalltalk tools browser fullOnClass: class selector: sel]. aChar == $N ifTrue: [^ self browseClassRefs]. aChar == $i ifTrue: [^ self methodHierarchy]. aChar == $h ifTrue: [^ self classHierarchy]. "The following require a method selection" sel ifNotNil: [aChar == $o ifTrue: [^ self fileOutMessage]. aChar == $c ifTrue: [^ self copySelector]. aChar == $v ifTrue: [^ self browseVersions]. aChar == $x ifTrue: [^ self removeMessage]. aChar == $d ifTrue: [^ self removeMessageFromBrowser]. (aChar == $C and: [self canShowMultipleMessageCategories]) ifTrue: [^ self showHomeCategory]]. ^ self arrowKey: aChar from: view! ! !SystemProgressMorph class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/12/2013 11:32'! cleanUp self reset! ! !FinderMethodNode methodsFor: 'private' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 22138236! browseSenders SystemNavigation new browseAllSendersOf: self item.! ! !MCCodeTool methodsFor: 'menus' stamp: 'MarcusDenker 10/13/2013 07:57' prior: 24659965! browseSendersOfMessages "Present a menu of the currently selected message, as well as all messages sent by it. Open a message set browser of all senders of the selector chosen." self systemNavigation browseAllSendersOf: (self selectedMessageName ifNil: [ ^nil ])! ! !FileContentsBrowser methodsFor: 'other' stamp: 'MarcusDenker 10/13/2013 07:59' prior: 21802080! browseSenders "Create and schedule a message set browser on all senders of the currently selected message selector. Do nothing if no message is selected." messageListIndex ~= 0 ifTrue: [self systemNavigation browseAllSendersOf: self selectedMessageName]! ! !TClassDescription methodsFor: 'organization' stamp: 'MarcusDenker 10/13/2013 08:38' prior: 44274529! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ ClassOrganization new ] ifFalse: [ ClassOrganization forClass: self ]) ]. ^self basicOrganization setSubject: self. "Making sure that subject is set correctly. It should not be necessary." ! ! !HandMorph methodsFor: 'balloon help' stamp: 'MarcusDenker 10/10/2013 23:45' prior: 23221096! balloonHelp: aBalloonMorph "Return the balloon morph associated with this hand" self balloonHelp ifNotNil:[:oldHelp |oldHelp delete]. aBalloonMorph ifNil:[self removeProperty: #balloonHelpMorph] ifNotNil:[self setProperty: #balloonHelpMorph toValue: aBalloonMorph]! ! !TransformWithLayoutMorph methodsFor: 'layout' stamp: 'MarcusDenker 10/10/2013 23:44' prior: 53495811! doLayoutIn: layoutBounds "Compute a new layout based on the given layout bounds." "Note: Testing for #bounds or #layoutBounds would be sufficient to figure out if we need an invalidation afterwards but #outerBounds is what we need for all leaf nodes so we use that." | box priorBounds | priorBounds := self outerBounds. submorphs isEmpty ifTrue: [^fullBounds := priorBounds]. "Send #ownerChanged to our children" submorphs do: [:m | m ownerChanged]. self layoutPolicy ifNotNil: [:layout | layout layout: self in: (0@0 extent: layoutBounds extent // self scale)]. self adjustLayoutBounds. fullBounds := self privateFullBounds. box := self outerBounds. box = priorBounds ifFalse: [self invalidRect: (priorBounds quickMerge: box)]! ! !Trait method! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" "First look in classVar dictionary." (self classPool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]. "Next look in shared pools." self sharedPools do: [:pool | (pool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]]. self superclass ifNotNil: [:supercl | ^ supercl innerBindingOf: aSymbol]. ^ nil! ! !Trait method! innerBindingOf: aSymbol "Answer the binding of some variable resolved in the scope of the receiver, or one of its superclass but do not look up binding in receiver's environment. Use #bindingOf: for looking up the variable binding in a full scope, including receiver's environment" "First look in classVar dictionary." (self classPool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]. "Next look in shared pools." self sharedPools do: [:pool | (pool bindingOf: aSymbol) ifNotNil: [:binding | ^binding]]. self superclass ifNotNil: [:supercl | ^ supercl innerBindingOf: aSymbol]. ^ nil! ! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ ClassOrganization new ] ifFalse: [ ClassOrganization forClass: self ]) ]. ^self basicOrganization setSubject: self. "Making sure that subject is set correctly. It should not be necessary." ! ! !Trait method! organization "Answer the instance of ClassOrganizer that represents the organization of the messages of the receiver." self basicOrganization ifNil: [ self basicOrganization: (self isTrait ifTrue: [ ClassOrganization new ] ifFalse: [ ClassOrganization forClass: self ]) ]. ^self basicOrganization setSubject: self. "Making sure that subject is set correctly. It should not be necessary." ! ! "Announcements-Core"! "Deprecated30"! "MonticelloGUI"! "Morphic-Base"! "NautilusCommon"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Spec-Debugger"! "Text-Edition"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(13 October 2013 9:57:31 am) Pharo.image priorSource: 21535970! ----STARTUP----an Array(13 October 2013 10:03:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(13 October 2013 10:03:24 am) Pharo-30477.image priorSource: 21567457! ----STARTUP----an Array(14 October 2013 8:21:15 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/14/2013 08:18' prior: 71867925! commentForCurrentUpdate ^ '11864 More cleanups in SystemNavigation https://pharo.fogbugz.com/f/cases/11864 11868 Fixing users DNU on CS dropping on desktop https://pharo.fogbugz.com/f/cases/11868'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/14/2013 08:18'! script133 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.149.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.167.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.953.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1317.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/14/2013 08:18'! update30478 "self new update30478" self withUpdateLog: '11864 More cleanups in SystemNavigation https://pharo.fogbugz.com/f/cases/11864 11868 Fixing users DNU on CS dropping on desktop https://pharo.fogbugz.com/f/cases/11868'. self loadTogether: self script133 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Browser methodsFor: 'message functions' stamp: 'MarcusDenker 10/13/2013 11:17' prior: 18488296! shiftedMessageListMenu: aMenu "Fill aMenu with the items appropriate when the shift key is held down" aMenu addStayUpItem. aMenu addList: #( ('Toggle diffing (D)' toggleDiffing) ('Implementors of sent messages' browseAllMessages) - ('Local senders of...' browseLocalSendersOfMessages) ('Local implementors of...' browseLocalImplementors) - ('Inspect instances' inspectInstances) ('Inspect subinstances' inspectSubInstances)). self addExtraShiftedItemsTo: aMenu. aMenu addList: #( - ('Change category...' changeCategory)). self canShowMultipleMessageCategories ifTrue: [aMenu addList: #(('Show category (C)' showHomeCategory))]. aMenu addList: #( - ('More...' unshiftedYellowButtonActivity)). ^ aMenu ! ! !PseudoClass methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 21:00'! users ^ #()! ! !TClassDescription methodsFor: 'authors' stamp: 'MarcusDenker 10/13/2013 11:16' prior: 40846236! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." ^(self methods, self class methods) collect: [ :each | each author ] as: Bag . ! ! TClassDescription removeSelector: #addAuthorsTo:! CodeHolder removeSelector: #copyUpOrCopyDown! SystemNavigation removeSelector: #isThereAnImplementorOf:! SystemNavigation removeSelector: #hierarchyOfImplementorsOf:forClass:! SystemNavigation removeSelector: #hierarchyOfClassesSurrounding:! !Trait method! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." ^(self methods, self class methods) collect: [ :each | each author ] as: Bag . ! ! !Trait method! authors "Returns a bag representing the author frequency based on the latest version of the methods of the receiver." ^(self methods, self class methods) collect: [ :each | each author ] as: Bag . ! ! "System-FilePackage"! "System-Support"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(14 October 2013 8:21:24 am) Pharo.image priorSource: 21567663! ----STARTUP----an Array(14 October 2013 8:27:25 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 8:27:25 am) Pharo-30478.image priorSource: 21580748! ----STARTUP----an Array(14 October 2013 10:12:37 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/14/2013 10:01' prior: 71899619! commentForCurrentUpdate ^ '11014 Remove old Debugger https://pharo.fogbugz.com/f/cases/11014/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/14/2013 10:02'! script134 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.8.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.60.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.149.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.139.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.41.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.28.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-StephaneDucasse.195.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.110.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.168.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.953.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.638.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1318.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.8.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/14/2013 10:02'! update30479 "self new update30479" self withUpdateLog: '11014 Remove old Debugger https://pharo.fogbugz.com/f/cases/11014/ '. self loadTogether: self script134 merge: false. self flushCaches. ! ! "ScriptLoader30"! ContextVariablesInspector removeSelector: #selection! ContextVariablesInspector removeSelector: #replaceSelectionValue:! ContextVariablesInspector removeSelector: #inspect:! ContextVariablesInspector removeSelector: #fieldList! ContextVariablesInspector removeSelector: #doItReceiver! ContextVariablesInspector removeSelector: #doItContext! ContextVariablesInspector removeSelector: #contentsIsString! Smalltalk globals removeClassNamed: #ContextVariablesInspector! PreDebugWindow removeSelector: #storeLog! PreDebugWindow removeSelector: #spawnSpecDebugger! PreDebugWindow removeSelector: #setLabelWidgetAllowance! PreDebugWindow removeSelector: #setBalloonTextForCloseBox! PreDebugWindow removeSelector: #proceed! PreDebugWindow removeSelector: #debug! PreDebugWindow removeSelector: #createMethod! Smalltalk globals removeClassNamed: #PreDebugWindow! SpecProxyDebugger removeSelector: #spawnSpecDebugger! SpecProxyDebugger removeSelector: #preDebugButtonQuads! SpecProxyDebugger removeSelector: #debuggerClass! SpecProxyDebugger class removeSelector: #initialize! Smalltalk globals removeClassNamed: #SpecProxyDebugger! Debugger removeSelector: #windowIsClosing! Debugger removeSelector: #widget:! Debugger removeSelector: #widget! Debugger removeSelector: #where! Debugger removeSelector: #wantsSteps! Debugger removeSelector: #wantsOptionalButtons! Debugger removeSelector: #updateInspectors! Debugger removeSelector: #up! Debugger removeSelector: #toggleContextStackIndex:! Debugger removeSelector: #tally! Debugger removeSelector: #storeLog! Debugger removeSelector: #stepIntoBlock! Debugger removeSelector: #step! Debugger removeSelector: #stackActionMenu:! Debugger removeSelector: #shouldDisplayContext:! Debugger removeSelector: #send! Debugger removeSelector: #selectedMessageName! Debugger removeSelector: #selectedMessage! Debugger removeSelector: #selectedContext! Debugger removeSelector: #selectedClass! Debugger removeSelector: #runToSelection:! Debugger removeSelector: #runToSelection! Debugger removeSelector: #returnValue! Debugger removeSelector: #resumeProcess:! Debugger removeSelector: #restartRecompiledMethod:! Debugger removeSelector: #restart! Debugger removeSelector: #resetContext:! Debugger removeSelector: #release! Debugger removeSelector: #recompileCurrentMethodTo:notifying:! Debugger removeSelector: #receiverInspector! Debugger removeSelector: #receiver! Debugger removeSelector: #process:controller:context:! Debugger removeSelector: #proceedValue:! Debugger removeSelector: #proceed:! Debugger removeSelector: #proceed! Debugger removeSelector: #prepareTestToRunAgain! Debugger removeSelector: #preDebugNotifierContentsFrom:! Debugger removeSelector: #preDebugButtonQuads! Debugger removeSelector: #postMortemStackActionMenu:! Debugger removeSelector: #postMortemPreDebugButtonQuads! Debugger removeSelector: #postMortemCustomeButtonSpecs! Debugger removeSelector: #populateImplementInMenu:! Debugger removeSelector: #perform:orSendTo:! Debugger removeSelector: #peelToFirst! Debugger removeSelector: #pcRange! Debugger removeSelector: #pc! Debugger removeSelector: #partiallyExpandStack! Debugger removeSelector: #optionalButtonRow! Debugger removeSelector: #openNotifierContents:label:! Debugger removeSelector: #openFullNoSuspendLabel:! Debugger removeSelector: #openFullMorphicLabel:! Debugger removeSelector: #newStack:! Debugger removeSelector: #messageListMenu:shifted:! Debugger removeSelector: #messageListIndex! Debugger removeSelector: #lowSpaceChoices! Debugger removeSelector: #labelString:! Debugger removeSelector: #labelString! Debugger removeSelector: #isTestObject:! Debugger removeSelector: #isTestMethod:of:! Debugger removeSelector: #isPostMortem! Debugger removeSelector: #isInterruptedContextDoesNotUnderstand! Debugger removeSelector: #isInterruptedContextATest! Debugger removeSelector: #interruptedProcess! Debugger removeSelector: #interruptedContext! Debugger removeSelector: #initialExtent! Debugger removeSelector: #implementStackMenu:! Debugger removeSelector: #implement:inClass:! Debugger removeSelector: #getTextMorph! Debugger removeSelector: #fullyExpandStack! Debugger removeSelector: #fullStack! Debugger removeSelector: #filterStack:! Debugger removeSelector: #expandStack! Debugger removeSelector: #errorWasInUIProcess:! Debugger removeSelector: #down! Debugger removeSelector: #doStep! Debugger removeSelector: #doItReceiver! Debugger removeSelector: #doItContext! Debugger removeSelector: #delete! Debugger removeSelector: #debugProceedMenu:! Debugger removeSelector: #debugAt:! Debugger removeSelector: #debug! Debugger removeSelector: #customButtonSpecs! Debugger removeSelector: #customButtonRow! Debugger removeSelector: #createMethod! Debugger removeSelector: #createColumnsFor:! Debugger removeSelector: #copyToClipboard! Debugger removeSelector: #contextVariablesInspector! Debugger removeSelector: #contextStackMenu:! Debugger removeSelector: #contextStackList! Debugger removeSelector: #contextStackKey:from:! Debugger removeSelector: #contextStackIndex:oldContextWas:! Debugger removeSelector: #contextStackIndex! Debugger removeSelector: #contentsSelection! Debugger removeSelector: #contents:notifying:! Debugger removeSelector: #contents! Debugger removeSelector: #codePaneMenu:shifted:! Debugger removeSelector: #close:! Debugger removeSelector: #close! Debugger removeSelector: #checkContextSelection! Debugger removeSelector: #buttonRowForPreDebugWindow:! Debugger removeSelector: #buildNotifyTextPane:! Debugger removeSelector: #buildNotifyListPane:! Debugger removeSelector: #buildMorphicNotifierLabelled:message:! Debugger removeSelector: #buildListOfFieldsFor:! Debugger removeSelector: #buildListOfElementsFor:! Debugger removeSelector: #buildListOfContextFor:! Debugger removeSelector: #buildFieldInspectorFor:! Debugger removeSelector: #buildContextInspectorFor:! Debugger removeSelector: #buildClassNameFor:! Debugger removeSelector: #browseVersions! Debugger removeSelector: #browseSendersOfMessages! Debugger removeSelector: #browseMessages! Debugger removeSelector: #blockNotFoundDialog:with:! Debugger removeSelector: #blockContents:notifying:! Debugger removeSelector: #askForSuperclassOf:toImplement:ifCancel:! Debugger removeSelector: #askForCategoryIn:default:! Debugger removeSelector: #addOptionalButtonsTo:at:plus:! Debugger class removeSelector: #restartAlsoProceeds:! Debugger class removeSelector: #restartAlsoProceeds! Debugger class removeSelector: #registerToolsOn:! Debugger class removeSelector: #patchworkUIThemeColor! Debugger class removeSelector: #openOn:context:label:contents:fullView:! Debugger class removeSelector: #openInterrupt:onProcess:! Debugger class removeSelector: #openContext:label:contents:! Debugger class removeSelector: #menuStackProceed:! Debugger class removeSelector: #menuStackPostMortemAction:! Debugger class removeSelector: #menuStackImplement:! Debugger class removeSelector: #menuStackAction:! Debugger class removeSelector: #menuStack:! Debugger class removeSelector: #menuCodePane:! Debugger class removeSelector: #logFileName:! Debugger class removeSelector: #logFileName! Debugger class removeSelector: #logDebuggerStackToFile:! Debugger class removeSelector: #logDebuggerStackToFile! Debugger class removeSelector: #initialize! Debugger class removeSelector: #informExistingDebugger:label:! Debugger class removeSelector: #filterCommonMessageSends:! Debugger class removeSelector: #filterCommonMessageSends! Debugger class removeSelector: #extraDebuggerButtons:! Debugger class removeSelector: #extraDebuggerButtons! Debugger class removeSelector: #defaultLogFileName! Debugger class removeSelector: #debugError:! Debugger class removeSelector: #context:! Debugger class removeSelector: #closeAllDebuggers! Debugger class removeSelector: #alwaysOpenFullDebugger:! Debugger class removeSelector: #alwaysOpenFullDebugger! Smalltalk globals removeClassNamed: #Debugger! "Spec-Debugger"! "Tools"! ----End fileIn----! ----QUIT----an Array(14 October 2013 10:12:45 am) Pharo.image priorSource: 21580953! ----STARTUP----an Array(14 October 2013 10:19:19 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 10:19:19 am) Pharo-30479.image priorSource: 21599880! ----STARTUP----an Array(14 October 2013 11:01:11 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/14/2013 10:57' prior: 71912909! commentForCurrentUpdate ^ '11865 Fixing Author annoying resetting behavior https://pharo.fogbugz.com/f/cases/11865'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/14/2013 10:58'! script135 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-MarcusDenker.20.mcz Metacello-Core-EstebanLorenzano.500.mcz Metacello-MC-EstebanLorenzano.675.mcz Metacello-Platform.pharo20-MarcusDenker.35.mcz Metacello-ToolBox-MarcusDenker.137.mcz Monticello-MarcusDenker.867.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core.pharo30-EstebanLorenzano.158.mcz MonticelloFileTree-FileSystem-Utilities.pharo30-dkh.27.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.149.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.168.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.954.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.640.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1318.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/14/2013 10:58'! update30480 "self new update30480" self withUpdateLog: '11865 Fixing Author annoying resetting behavior https://pharo.fogbugz.com/f/cases/11865'. self loadTogether: self script135 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UserManager commentStamp: '' prior: 42776094! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !UserManager commentStamp: '' prior: 71942607! An UsersManager is xxxxxxxxx. |- user1 -> keyChain1 |- user2 -> keyChain2! !UserManager class methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 17:57'! default ^ default ifNil: [ default := self new ]! ! !UserManager class methodsFor: 'initialization' stamp: 'IgorStasenko 10/13/2013 17:55'! initialize self registerToolsOn: Smalltalk tools ! ! !UserManager class methodsFor: 'tool registration' stamp: 'IgorStasenko 10/13/2013 17:53'! registerToolsOn: registry "Add ourselves to registry. See [Smalltalk tools]" registry register: self default as: #userManager ! ! !Author class methodsFor: 'convenience' stamp: 'Zork 10/13/2013 17:35' prior: 17782015! fullNamePerSe ^ Author uniqueInstance fullNamePerSe ! ! !Author class methodsFor: 'instance creation' stamp: 'IgorStasenko 10/13/2013 18:09' prior: 17782345! reset #UserManager asClassIfPresent: [ :userManager | userManager default currentUser setUserName: nil forGroup: #author ]. ^ uniqueInstance := nil! ! !AuthorTest methodsFor: 'tests' stamp: 'on 5/10/2008 13:35' prior: 17785445! testUniqueness self should: [ Author new ] raise: Error.! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'StephaneDucasse 10/13/2013 17:29' prior: 49382703! openSourceFiles self imagePath = LastImagePath ifFalse: ["Reset the author full name to blank when the image gets moved" LastImagePath := self imagePath. Author reset]. PharoFilesOpener default checkAndOpenSourcesAndChanges. SourceFileArray install! ! Author class removeSelector: #uniqueInstance:! AuthorTest removeSelector: #tearDown! AuthorTest removeSelector: #setUp! "KeyChain"! "System-Support"! "Tests"! ----End fileIn----! ----QUIT----an Array(14 October 2013 11:01:25 am) Pharo.image priorSource: 21600087! ----STARTUP----an Array(14 October 2013 11:07:16 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 11:07:16 am) Pharo-30480.image priorSource: 21612786! ----STARTUP----an Array(14 October 2013 2:14:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/14/2013 13:37' prior: 71932044! commentForCurrentUpdate ^ '10821 Integrate Metacello 2 https://pharo.fogbugz.com/f/cases/10821 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/14/2013 13:37'! script136 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.149.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.168.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.954.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.640.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1318.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/14/2013 13:38'! update30481 "self new update30481" self withUpdateLog: '10821 Integrate Metacello 2 https://pharo.fogbugz.com/f/cases/10821 '. self loadTogether: self script136 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ProfStefHelpTutorialBuilder commentStamp: '' prior: 0! I build HelpSystem topics to browse ProfStef tutorials! !MetacelloMCBaselineProject commentStamp: 'dkh 5/5/2012 08:47' prior: 0! The **MetacelloMCBaselineProject** is a wrapper for the **BaselineOf** version specification for file-based repositories. There is a single version in a **MetacelloMCBaselineProject**, named *'baseline'*. A typical **BaselineOf** is specification: ```Smalltalk baseline: spec spec package: 'External-Core'; package: 'External-Tests' with: [ spec requires: 'External-Core' ]; yourself. spec group: 'Core' with: #('External-Core'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-Tests'); yourself ``` The `` pragma marks the method containing the baseline specification.! !MetacelloPharoCommonPlatform commentStamp: '' prior: 0! MetacelloPharoPlatform contains all Pharo specific code to load Metacello.! !MetacelloPharo30Platform commentStamp: '' prior: 0! Class used to abstract specific code for the Pharo 3.0 platform. ! !MetacelloMCVersionValidator commentStamp: 'dkh 1/26/2012 09:49' prior: 42423184! Performs configuration validation. For programmatically decoding reason codes use: MetacellMCVersionValidator fullDescriptionForReasonCode: Warning reason codes: #notDevelopmentVersion - the symbolic version #development refers to a non-development literal version. #loadWarning - Warning signalled during load [load validation]. #onlyBaselineVersion - one or more baseline versions have been defined, but no non-baseline versions are defined. #stableDevelopmentVersion - a version whose blessing is #development has been declared as a #stable version Critical Warning reason codes: #duplicateVersionDefinitions - there are multiple pragma methods specifying the same version #loadDeprecation - deprecation warning signalled while loading configuration [load validation] #missingRecommendedProjectSpecField - missing recommended fields in project reference (versionString). The versionString should be specified so that #bleedingEdge loads will be predictable and repeatable #noLoadableVersions - no non #baseline versions defined in configuration #noTests - no test cases defined in loaded configuration [load validation] #noVersionSpecified - no version defined for the project reference or package. The version specified in the baseline or the latest version of the project or package in the repository will be used. #packageNameMismatch - the name in the packageSpec does not match the name of the mcz file #projectClassNameFileMismatch - the class name of the configuration does not match the mcz file containing the configuration #testDeprecation - deprecation warning signalled while running configuration tests [load validation] Error reason codes: #cannotResolveVersion - the version (project reference or symbolic version) was not found in the specified configuration #duplicateNames - multiple independent definitions for an entity with same name (project, package, or group) #incompleteProjectSpec - missing required fields in project reference (className and/or repository) #incorrectVersionString - the version declared in pragma doesn't match version in versionSpec #invalidDoItSelector - doit select must be a Symbol #invalidVersionString - versionString must be a String #loadError - error occured while loading configuration [load validation] #missingVersionImport - version specified in import pragma not defined in configuration #noVersionsDefined - no usable baseline or version defined in configuration ... configuration cannot be loaded #projectCreationError - error occured while resolving project reference #shadowedNames - name duplication between packages and projects #testFailures - test failures while running tests [load validation] #versionCompositionError - error while creating versionSpec from pragmas ! !MetacelloSemanticVersionNumber commentStamp: 'dkh 6/24/2012 18:20' prior: 0! MetacelloSemanticVersionNumber conforms to version 2.0.0-rc.1 of [Semantic Versioning 2.0.0-rc.1](http://semver.org/) The most important thing that you need to know is that: **A normal version number MUST take the form X.Y.Z where X, Y, and Z are non-negative integers.** **Semantic Versioning Specification** extracted from [Semantic versioning 2.0.0-rc.1](https://github.com/mojombo/semver/blob/3c7f2e8df747ea0ca15208fdfc90e3275240184f/semver.md): Semantic Versioning Specification (SemVer) ------------------------------------------ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. 1. Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it should be precise and comprehensive. 1. A normal version number MUST take the form X.Y.Z where X, Y, and Z are non-negative integers. X is the major version, Y is the minor version, and Z is the patch version. Each element MUST increase numerically by increments of one. For instance: 1.9.0 -> 1.10.0 -> 1.11.0. 1. Once a versioned package has been released, the contents of that version MUST NOT be modified. Any modifications must be released as a new version. 1. Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable. 1. Version 1.0.0 defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes. 1. Patch version Z (x.y.Z | x > 0) MUST be incremented if only backwards compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior. 1. Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backwards compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated. It MAY be incremented if substantial new functionality or improvements are introduced within the private code. It MAY include patch level changes. Patch version MUST be reset to 0 when minor version is incremented. 1. Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API. It MAY include minor and patch level changes. Patch and minor version MUST be reset to 0 when major version is incremented. 1. A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. Identifiers MUST be comprised of only ASCII alphanumerics and dash [0-9A-Za-z-]. Pre-release versions satisfy but have a lower precedence than the associated normal version. Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92. 1. A build version MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch version or pre-release version. Identifiers MUST be comprised of only ASCII alphanumerics and dash [0-9A-Za-z-]. Build versions satisfy and have a higher precedence than the associated normal version. Examples: 1.0.0+build.1, 1.3.7+build.11.e0f985a. 1. Precedence MUST be calculated by separating the version into major, minor, patch, pre-release, and build identifiers in that order. Major, minor, and patch versions are always compared numerically. Pre-release and build version precedence MUST be determined by comparing each dot separated identifier as follows: identifiers consisting of only digits are compared numerically and identifiers with letters or dashes are compared lexically in ASCII sort order. Numeric identifiers always have lower precedence than non-numeric identifiers. Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build < 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a. About ----- The Semantic Versioning specification is authored by [Tom Preston-Werner](http://tom.preston-werner.com), inventor of Gravatars and cofounder of GitHub. If you'd like to leave feedback, please [open an issue on GitHub](https://github.com/mojombo/semver/issues). License ------- Creative Commons - CC BY 3.0 http://creativecommons.org/licenses/by/3.0/ ! !ProfStefHelp commentStamp: 'LaurentLaffont 2/15/2011 22:17' prior: 0! HelpSystem book documenting ProfStef! !ProfStefAPIHelp commentStamp: 'LaurentLaffont 2/15/2011 22:18' prior: 0! I'm a ProfStef which build a HelpSystem book by collecting comment from classes and method.! !ProfStefTutorialsHelp commentStamp: 'LaurentLaffont 2/15/2011 22:18' prior: 0! I'm a HelpSystem book which list all ProfStef tutorials! !MetacelloLookupProjectSpec commentStamp: 'dkh 6/1/2012 10:02' prior: 0! **MetacelloLookupProjectSpec** is signalled to allow a handler to substitute a different (equivalent) project spec for fetching or loading purposes! !MetacelloLookupProjectSpecForLoad commentStamp: 'dkh 6/1/2012 10:55' prior: 0! **MetacelloLookupProjectSpecForLoad** ends up returning an instance of **MetacelloProjectSpecForLoad**! !MetacelloProjectSpecLoadedNotification commentStamp: 'dkh 6/1/2012 09:32' prior: 0! **MetacelloLoadProjectSpecVersionNotification** is signalled to indicate that the given project spec was loaded into the image.! !MetacelloTestsPackageSet commentStamp: '' prior: 0! This class is used to speed up Metacello tests. ! !MetacelloBaselineConfigurationTestCase commentStamp: 'dkh 5/4/2012 17:06' prior: 0! ##MetacelloBaselineConfigurationTestCase **MetacelloBaselineConfigurationTestCase** implements the test suite that validates the **MetacelloBaselineConstructor** behavior. ! !MetacelloCurrentVersionScriptTestCase commentStamp: 'dkh 6/7/2012 10:15' prior: 0! **MetacelloCurrentVersionScriptTestCase** takes the **MetacelloCurrentVersionTest** test cases and casts them use the scripting api! !MetacelloDetermineCurrentVersionForLoadScriptTest commentStamp: 'dkh 6/14/2012 14:55' prior: 0! **MetacelloDetermineCurrentVersionForLoadScriptTest** takes the **MetacelloDetermineCurrentVersionForLoadTest** test cases and casts them use the scripting api! !MetacelloGoferBasedLoaderScriptTestCase commentStamp: 'dkh 6/7/2012 13:31' prior: 0! **MetacelloGoferBasedLoaderScriptTestCase** takes the **MetacelloGoferBasedLoaderTest** test cases and casts them use the scripting api! !MetacelloRegistryLoadScriptHarness commentStamp: 'dkh 6/8/2012 13:03' prior: 0! MetacelloRegistryLoadScriptHarness tests are designed to 1. verfy that the registry is used to correctly supply versions under a variety of loading scenarios 2. ensure that the `classic` behavior does indeed load **exactly** the same code as the original configuration-based loads! !MetacelloClassicLoadScriptTestCase commentStamp: 'dkh 6/8/2012 13:01' prior: 0! MetacelloClassicLoadScriptTestCase is segregated because while the scripting API is used for some of these test cases ... parts of the system not normally used by the scripting api are triggered here ...! !MetacelloRegistryLoadScriptTestCase commentStamp: 'dkh 6/8/2012 13:04' prior: 0! MetacelloRegistryLoadScriptTestCase has the test cases that exihibit the different load behavior (as expected) by the scripting api! !MetacelloScriptingTestCase commentStamp: 'dkh 5/5/2012 19:52' prior: 0! ##MetacelloScriptingTestCase **MetacelloScriptingTestCase** implements the test suite that validates the **Metacello** scripting API. ! !MetacelloBaselineConstructor commentStamp: 'dkh 5/4/2012 17:05' prior: 0! ##MetacelloBaselineConstructor **MetacelloBaselineConstructor** extracts the #baseline pragma from a **BaselineOfConfiguration** and produces a **MetacelloVersion**:. ```Smalltalk MetacelloBaselineConstructor on: BaselineOfExample ``` ! !AbstractTutorial commentStamp: 'LaurentLaffont 1/21/2010 16:53' prior: 0! Parent class of all ProfStef tutorials. To create your own tutorial: - subclass AbstractTutorial - implement a few methods which returns a Lesson instance - implement tutorial which returns a Collection of selectors to the methods you've created. For example, see MockTutorial (minimalist) and SmalltalkSyntaxTutorial (default ProfStef one). See ProfStef comment to execute your own tutorial.! !HowToMakeYourOwnTutorial commentStamp: 'LaurentLaffont 2/15/2011 22:20' prior: 0! I'm a ProfStef tutorial which teach to create a ProfStef tutorial. Open me with ProfStef goOn: HowToMakeYourOwnTutorial.! !SmalltalkSyntaxTutorial commentStamp: 'LaurentLaffont 1/21/2010 16:50' prior: 0! The default ProfStef tutorial to learn Smalltalk syntax! !ConfigurationOf commentStamp: 'dkh 5/30/2012 16:31' prior: 0! You must use a *configuration* when your project is stored in a repository using `.mcz` files. If you are using a source code manager (SCM) like [git][1] and have created a *baseline* (see the [**BaselineOf** class comment][3] for more info) you may use a *configuration* to associate a specific git commit (SHA, branch name, tag name) with a [Metacello version][2]. To create a new Metacello configuration: 1. Create a subclass of the **ConfigurationOf** class. The configuration class for your project should be names by appending the name of your project to the string `ConfigurationOf`. The name of the category and package should be the same as the name of the class: ```Smalltalk ConfigurationOf subclass: #ConfigurationOfExample instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ConfigurationOfExample' ``` 2. Create a **baselineXXXX:** method where you specify the structure of your project: ```Smalltalk baseline0100: spec spec for: #common do: [ spec repository: 'http://ss3.gemstone.com/ss/Example'. spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]]. ``` 3. Create a **versionXXXX:** method where you specify the specific versions of the packages to be loaded for this version: ```Smalltalk version01000: spec spec for: #common do: [ spec blessing: #release. spec package: 'Example-Core' with: 'Example-Core'; package: 'Example-Tests' with: 'Example-Tests' ]. ``` 4. Create a Monticello package for your **ConfigurationOf** class and save it in the repository where your packages are stored. [1]: http://git-scm.com/ [2]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-version-numbers [3]: https://github.com/dalehenrich/metacello-work/blob/master/repository/Metacello-Base.package/BaselineOf.class/README.md ! !BaselineOf commentStamp: 'dkh 5/30/2012 16:30' prior: 0! You should use a *baseline* when you are using a disk-based source code manager (SCM) like [git][1]. When using a disk-based SCM it is not necessary to use the Metacello *version* method, because it is intended for use with `.mcz` files. With a disk-based SCM you only need a single `baseline:` method. When you change the structure of your project you can change the baseline and save everything in a single commit. So multiple `baseline:` methods are no longer needed. You may still need a *configuration* when using a *baseline*. The [Sample project][3] on GitHub has a good example of a configuration used in conjunction with a *baseline*. See the [**ConfigurationOf** class comment][2] for information on creating a *configuration*. To create a new Metacello baseline: 1. Create a subclass of the **BaselineOf** class. The baseline class for your project should be named by appending the name of your project to the string `BaselineOf`. The name of the category and package should be the same as the name of the class: ```Smalltalk BaselineOf subclass: #BaselineOfExample instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BaselineOfExample' ``` 2. Create a **baseline:** method where you specify the structure of your project: ```Smalltalk baseline: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]]. ``` 3. Create a Monticello package for your **BaselineOf** class and save it in the repository where your packages are stored. [1]: http://git-scm.com/ [2]: https://github.com/dalehenrich/metacello-work/blob/master/repository/Metacello-Base.package/ConfigurationOf.class/README.md [3]: https://github.com/dalehenrich/sample/tree/configuration/ConfigurationOfSample.package/ConfigurationOfSample.class ! !MetacelloBaseConfiguration commentStamp: 'dkh 5/30/2012 13:50' prior: 42420423! You should be using ConfigurationOf instead of MetacelloBaseConfiguration. The class is being kept around because many extant Metacello configurations use MetacelloBaseConfiguration as a sentinel class to indicate whether or not Metacello is loaded.. Once the Metacello scripting API becomes prevalent (the api has it's own ensureMetacello logic) this class can be removed.! !Lesson commentStamp: 'LaurentLaffont 1/15/2010 10:25' prior: 0! See class side messages #welcome, #doingVSPrinting.... ! !LessonView commentStamp: 'LaurentLaffont 1/15/2010 10:24' prior: 0! A LessonView displays a Lesson instance! !Metacello commentStamp: 'dkh 7/28/2012 20:04' prior: 0! # Metacello User Guide In this guide we'll take a walk through a couple of common development scenarios and highlight some of the features of the *Metacello Scripting API*. *For installatation and more detailed documentation on the Metacello Scripting API, see the [Metcello Scripting API Documentation][1].* ## Introduction The number one job of the *Metacello Scripting API* is to simplify the job of loading projects into your image. As you are probably all too aware, today it's a two step process where you first load the configuration into your image using [Gofer][2] and then load your project using Metacello: ```Smalltalk Gofer new package: 'ConfigurationOfSeaside30'; squeaksource: 'MetacelloRepository'; load. ((Smalltalk at: #ConfigurationOfSeaside30) version: #stable) load. ``` In the early days of Metacello (and Gofer) this was a great improvement over the alternatives, but today, 3 years after the introduction of Metacello, there should be a better way...and there is. Using the *Metacello Scripting API* the above expression reduces to the following: ```Smalltalk Metacello new configuration: 'Seaside30'; load. ``` ## Loading In this example of the [`load` command][5] we are leveraging a couple of default values, namely the `version` of the project and the `repository` where the **ConfigurationOfSeaside** package can be found: ```Smalltalk Metacello new configuration: 'Seaside30'; load. ``` Here is a variant of the same expression with the (current) default values explicitly specified: ```Smalltalk Metacello new configuration: 'Seaside30'; version: #stable; squeaksource: 'MetacelloRepository'; load. ``` The `version` attribute can be any legal [version number][10]. `squeaksource` is a [repository shortcut][4]. You can also specify the full [repository description][3] as follows: ```Smalltalk Metacello new configuration: 'Seaside30'; version: #stable; repository: 'http://www.squeaksource.com/MetacelloRepository'; load. ``` ##Listing Once you've loaded one or more projects into your image, you may want to list them. The following is an example of the [`list` command][6]: ```Smalltalk Metacello image configuration: [:spec | true ]; list. ``` The `image` message tells Metacello that you'd like to look at only loaded configurations. The *block* argument to the `configuration:` message is used to *select* against the list of loaded [MetacelloProjectSpec][7] instances in the [registry][8]. The `list` command itself returns a list of [MetacelloProjectSpec][7] instances that can be printed, inspected or otherwise manipulated. In addition to a *select block*, you can specify a *select collection* specifying the names of the projects you'd like to select: ```Smalltalk Metacello registry configuration: #('Seaside30' 'MetacelloPreview'); list. ``` The `registry` message tells Metacello that you'd like to look at all projects in the [registry][8] whether or not they are loaded. The *collection* argument to the `configuration:` message is used to *select* against the list of project names in the [registry][8]. The `list` command can also be used to look at configurations in Monticello repositories. For example: ```Smalltalk Metacello new configuration: [:spec | spec name beginsWith: 'Seaside']; squeaksource: 'MetacelloRepository'; list. ``` lists the configurations whose names (sans the `ConfigurationOf`) begin with `Seaside` in the `MetacelloRepositry` in the [Squeaksource](http://www.squeaksource.com) repostory. ## Getting Once you've loaded a project into your image the next logical step is upgrading your project to a new version. Let's say that a new `#stable` version of Seaside30 has been released and that you want to upgrade. This is a two step process: * [get a new version of the configuration][11] * [load the new version][12] ### Get a new version of the configuration The following expression gets the latest version of the configuration: ```Smalltalk Metacello image configuration: 'Seaside30'; get. ``` By using the `image` message, you can leverage the fact that the [registry][8] remembers from which repository you loaded the original version of the configuration. The `get` command simply downloads the latest version of the configuration package from the repository. You may download the configuration from a different repository: ```Smalltalk Metacello image configuration: 'Seaside30'; squeaksource: 'Seaside30; get. ``` The `get` command will update the [registry][8] with the new repository location information. You may also use the `get` command to load a configuration for a project into your image without actually loading the project itself: ```Smalltalk Metacello image configuration: 'SeasideRest'; squeaksource: 'Seaside30'; get. ``` The 'SeasideRest' project information will be registered in the [registry][8] and marked as *unloaded*. ### Load the new version Once you've got a new copy of the Seaside30 configuration loaded into your image, you may upgrade your image with the following expression: ```Smalltalk Metacello image configuration: 'Seaside30'; version: #stable; load. ``` By using the `image` message, you are asking Metacello to look the project up in the [registry][8] before performing the operation, so it isn't necessary to supply all of the project details for every command operation. Of course, the `load` command updates the [registry][8]. If you want to load a project for which you've already done a `get` (like the SeasideRest project earlier), you can do the following: ```Smalltalk Metacello registry configuration: 'SeasideRest'; version: #stable; load. ``` In this case you use the `registry` message to indicate that you are interested in both *loaded* and *unloaded* projects. ##Locking Let's say that you are using an older version of Seaside30 (say 3.0.5) instead of the #stable version (3.0.7) and that your application doesn't work with newer versions of Seaside30 (you've tried and it's more work to get you application to work with the newer version of Seaside30 than it's worth). Let's also say that you want to try out something in the SeasideRest project, but when you try loading SeasideRest, you end up having Seaside 3.0.7 loaded as well. This is an unfortunate side effect of Metacello trying to *do the right thing*, only in your case it is the wrong thing. Fortunately, the [`lock` command][9] can give you control. First you need to `lock` the Seaside30 project: ```Smalltalk Metacello image configuration: 'Seaside30'; lock. ``` The `image` message tells Metacello to do a lookup in the list of loaded projects and then to put a lock on the loaded version of the project. If you want you can specify which version of the project you want locked: ```Smalltalk Metacello image configuration: 'Seaside30'; version: '3.0.5'; lock. ``` After a project is locked an error (**MetacelloLockedProjectError**) is thrown when you attempt to load a project that has a dependency upon a different version of Seaside30. The error is thrown before any packages are actually loaded. ### Bypassing locks Let's say that you want to load the SeasideRest project even though it may require a version of Seaside30 that is later than the version that you have locked. To do that you need to suppress the upgrade of the Seaside30 project during the load of the SeasideRest project and you can do that with the use of the `onUpgrade:` message: ```Smalltalk Metacello new configuration: 'SeasideRest'; version: #stable; onUpgrade: [:ex :existing :new | existing baseName = 'Seaside30' ifTrue: [ ex disallow ]. ex pass ]; load. ``` The `onUpgrade:` block tells Metacello to disallow the upgrade of any project whose `baseName` is `Seaside30` and to continue with the load. Of course if there are any explicit dependencies between SeasideRest and the later version of Seaside30 (missing classes, etc.) then you may very well get load errors or errors while using the SeasideRest, but that's the price you pay for not upgrading. ### Upgrading a locked project If you want to explicitly upgrade a locked project, you can use the `load` command. The following command will upgrade Seaside30 to version 3.0.6 even if it is locked: ```Smalltalk Metacello image configuration: 'Seaside30'; version: '3.0.6'; lock. ``` The newly loaded of the project will continue to be locked. [1]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md [2]: http://www.lukas-renggli.ch/blog/gofer [3]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#repository-descriptions [4]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#repository-shortcuts [5]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#loading [6]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#listing [7]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacelloprojectspec [8]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-project-registry [9]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#locking [10]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-version-numbers [11]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloUserGuide.md#get-a-new-version-of-the-configuration [12]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloUserGuide.md#load-the-new-version! !MetacelloScriptEngine commentStamp: 'dkh 7/12/2012 14:48' prior: 0! MetacelloScriptEngine runs the execution of the script for one projectSpec! !MetacelloScriptExecutor commentStamp: 'dkh 7/12/2012 14:49' prior: 0! MetacelloScriptExecutor decodes script args and launches MetacelloScriptEngine to run for each projectSpec encounters...i,e., primarily here to handl array and block args to configuration:, baseline: or project:.! !MetacelloScriptApiExecutor commentStamp: 'dkh 7/12/2012 14:49' prior: 0! MetacelloScriptExecutor decodes script args and launches MetacelloScriptEngine to run for each projectSpec encounters...i,e., primarily here to handl array and block args to configuration:, baseline: or project:.! !ProfStef commentStamp: '' prior: 0! A ProfStef is the Smalltalk teacher. To start the tutorial, evaluate: ProfStef go. To go to the next lesson evaluate: ProfStef next. To execute your own tutorial: ProfStef goOn: MyOwnTutorial To see a table of contents with all defined tutorials: ProfStef contents! !TutorialPlayer commentStamp: 'LaurentLaffont 1/21/2010 20:34' prior: 0! I can navigate through an AbstractTutorial subclass. With #next and #previous you can go forward and backward through the tutorial. ! !TTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 21:57'! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self tutorial respondsTo: aSelector) ]! ! !TTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 21:59'! testEachSelectorReturnsALesson | answer | self testedTutorial tutorial do: [:aSelector| answer := (self testedTutorial perform: aSelector). self assert: (answer isKindOf: Lesson). ]! ! !TTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 21:59'! testLessonAtReturnsCorrespondingLesson | answer | 1 to: (self testedTutorial tutorial size) do: [:index| answer := self testedTutorial lessonAt: index. self assert: (answer isKindOf: Lesson) ] ! ! !TTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:00'! testNotEmpty self assert: self testedTutorial tutorial notEmpty.! ! !TTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:00'! testSizeReturnsNumberOfSelectors self assert: (self testedTutorial tutorial size) equals: self testedTutorial size.! ! !TTutorialTest methodsFor: 'requirements' stamp: 'LaurentLaffont 2/1/2010 22:04'! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ self explicitRequirement! ! !ProfStefHelpTutorialBuilder commentStamp: '' prior: 71956555! I build HelpSystem topics to browse ProfStef tutorials! !ProfStefHelpTutorialBuilder class methodsFor: 'instance creation' stamp: 'LaurentLaffont 4/26/2011 13:00'! new "We prohibid new" ^ (self class lookupSelector: #buildHelpTopicFrom:) == thisContext sender method ifFalse:[self error: 'Please use buildHelpTopicFrom: instead'] ifTrue: [super new]! ! !ProfStefHelpTutorialBuilder methodsFor: 'building' stamp: 'LaurentLaffont 9/19/2010 15:25'! build topicToBuild := HelpTopic named: rootToBuildFrom bookName. AbstractTutorial tutorials do: [:aTutorial| topicToBuild addSubtopic: (self buildTutorialTopicFor: aTutorial) ]. ^ topicToBuild.! ! !ProfStefHelpTutorialBuilder methodsFor: 'building' stamp: 'LaurentLaffont 9/19/2010 15:30'! buildTutorialTopicFor: aTutorial |tutorialTopic| tutorialTopic := HelpTopic named: aTutorial title. aTutorial new lessons do:[:aLesson| tutorialTopic addSubtopic: (HelpTopic title: aLesson title contents: aLesson lesson) ]. ^ tutorialTopic ! ! !MetacelloVersion class methodsFor: 'instance creation' stamp: 'dkh 6/22/2012 12:34' prior: 26232174! fromSpec: aMetacelloVersionSpec ^ (self new versionNumber: aMetacelloVersionSpec versionNumber) spec: aMetacelloVersionSpec; yourself! ! !MetacelloVersion class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26232397! fromString: aString ^self new versionNumber: aString asMetacelloVersionNumber! ! !MetacelloVersion methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227873! < aMetacelloVersion aMetacelloVersion species = self species ifFalse: [ ^false ]. ^self versionNumber < aMetacelloVersion versionNumber! ! !MetacelloVersion methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26228088! = aMetacelloVersion aMetacelloVersion species = self species ifFalse: [ ^false ]. ^self versionNumber = aMetacelloVersion versionNumber! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229186! author ^self spec author value! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! basicSpec ^ self spec! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229293! blessing ^ self basicSpec blessing value! ! !MetacelloVersion methodsFor: 'private' stamp: 'dkh 9/10/2012 15:43' prior: 26231534! computeVersionStatus ^ #'noStatus'! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229405! description ^ self basicSpec description value! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:53'! difference: aMetacelloVersion "Return a a dictionary of additions, removals and modifications" ^self spec difference: aMetacelloVersion spec! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 12:09'! expandToLoadableSpecNames: nameList "Just like #resolveToLoadableSpecs:, but returns list of spec names instead of specs" ^self spec expandToLoadableSpecNames: nameList! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:16'! groups "Answers the list of groups associated with this version" | groups | groups := OrderedCollection new. self spec projectDo: [:ignored | ] packageDo: [:ignored | ] groupDo: [:grp | groups add: grp ]. ^groups ! ! !MetacelloVersion methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26228303! hash ^self versionNumber hash! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226312! importedVersions importedVersions == nil ifTrue: [ importedVersions := #() ]. ^importedVersions! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226486! importedVersions: aCollection importedVersions := aCollection! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26230538! isAllLoadedToSpec "all projects and packages are loaded and match specification" ^self spec isAllLoadedToSpec! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26230734! isLoadedMatchConstraints "all loaded projects and packages match constraints" ^self spec isLoadedMatchConstraints! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26230934! isLoadedToSpec "all loaded projects and packages match specifications" ^self spec isLoadedToSpec! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26231117! isPossibleBaseline ^self spec isPossibleBaseline! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26231250! isSomethingLoaded "at least one project or package has been loaded" ^self spec isSomethingLoaded! ! !MetacelloVersion methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227539! load ^self subclassResponsibility! ! !MetacelloVersion methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227648! load: required ^self subclassResponsibility! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229533! loader ^self spec loader! ! !MetacelloVersion methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26231433! name ^self versionString! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:35'! packageNamed: aString ^self packageNamed: aString ifAbsent: [ ^nil ]. ! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:35'! packageNamed: aString ifAbsent: aBlock | pkg | (pkg := self spec packageNamed: aString ifAbsent: []) == nil ifTrue: [ ^aBlock value ]. ^pkg referencedSpec! ! !MetacelloVersion methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26228638! printOn: aStream | label vs | (#(structural broken) includes: self blessing) not ifTrue: [ (vs := self versionStatus) == #'somethingLoaded' ifTrue: [ aStream nextPutAll: '<>' ]. vs == #'loadedMatchConstraints' ifTrue: [ aStream nextPutAll: '>=' ]. vs == #'loadedToSpec' ifTrue: [ aStream nextPut: $~ ] ]. self versionNumber printOn: aStream. self basicSpec ~~ nil ifTrue: [ (label := self projectLabel) isEmpty ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ] ! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229634! project ^ self basicSpec project! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226634! projectLabel ^ self basicSpec projectLabel! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:16'! projects "Answers the list of projects associated with this version" | projects | projects := OrderedCollection new. self spec projectDo: [:prj | projects add: prj projectReference ] packageDo: [:ignored | ] groupDo: [:ignored | ]. ^projects ! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:40'! resolveToLoadableSpecs: nameList "Resolves names in namelist to the list of packages and projects in the version that would be loaded. Projects are not traversed during the transitive closure. The scope is that of the version itself. If the spec is a package, answer a list including the package and the transitive closure on its #requires: and #includes: fields. If the spec is a project, answer the project. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" ^self spec resolveToLoadableSpecs: nameList! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226750! spec ^spec! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226840! spec: aMetacellVersionSpec spec := aMetacellVersionSpec! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229739! timestamp ^ self basicSpec timestamp value! ! !MetacelloVersion methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227769! unload ^self spec unload! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26229862! versionKey "version printString, without the versionStatus decorations, suitable for using as a unique key for the receiver in a dictionary" ^ String streamContents: [ :aStream | | label | self versionNumber printOn: aStream. self basicSpec ~~ nil ifTrue: [ (label := self projectLabel) isEmpty ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ] ]! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26230298! versionNumber ^versionNumber! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26226974! versionNumber: aVersionNumber versionNumber := aVersionNumber! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/22/2012 12:38'! versionNumberFrom: aString ^ self versionNumber class fromString: aString! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227114! versionSpec ^self spec! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227223! versionStatus versionStatus == nil ifTrue: [ versionStatus := self computeVersionStatus]. ^versionStatus! ! !MetacelloVersion methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26227415! versionStatus: aSymbol versionStatus := aSymbol! ! !MetacelloVersion methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26230404! versionString ^self versionNumber versionString! ! !MetacelloVersion methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26228411! ~> aMetacelloVersion aMetacelloVersion species = self species ifFalse: [ ^false ]. ^self versionNumber ~> aMetacelloVersion versionNumber! ! !MetacelloAbstractPackageSpec methodsFor: 'adding' stamp: 'dkh 6/5/2012 19:01:24' prior: 25750221! addToMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec addMember name: self name; spec: self; yourself)! ! !MetacelloAbstractPackageSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 25754588! answers answers == nil ifTrue: [ answers := #() ]. ^answers! ! !MetacelloAbstractPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25749529! answers: aListOfPairs self setAnswers: aListOfPairs! ! !MetacelloAbstractPackageSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25752009! configMethodBodyOn: aStream hasName: hasName cascading: cascading indent: indent | hasCascading hasRequires hasIncludes hasAnswers | hasCascading := cascading. hasRequires := self requires isEmpty not. hasIncludes := self includes isEmpty not. hasAnswers := self answers isEmpty not. hasRequires ifTrue: [ hasName | hasIncludes | hasAnswers | hasCascading ifTrue: [ aStream cr; tab: indent ]. aStream nextPutAll: 'requires: #('. self requires do: [:str | aStream nextPutAll: str printString, ' ' ]. hasIncludes | hasAnswers | hasCascading ifTrue: [ aStream nextPutAll: ');' ] ifFalse: [ aStream nextPut: $) ]]. hasIncludes ifTrue: [ hasName | hasRequires | hasAnswers | hasCascading ifTrue: [ aStream cr; tab: indent ]. aStream nextPutAll: 'includes: #('. self includes do: [:str | aStream nextPutAll: str printString, ' ' ]. hasAnswers | hasCascading ifTrue: [ aStream nextPutAll: ');' ] ifFalse: [ aStream nextPut: $) ]]. hasAnswers ifTrue: [ hasName | hasRequires | hasIncludes | hasCascading ifTrue: [ aStream cr; tab: indent ]. aStream nextPutAll: 'supplyingAnswers: #( '. self answers do: [:ar | aStream nextPutAll: '#( '. ar do: [:val | (val isString or: [ val isNumber or: [ val isSymbol or: [ val isCharacter ]]]) ifTrue: [ aStream nextPutAll: val printString, ' ' ]. val == true ifTrue: [ aStream nextPutAll: 'true ' ]. val == false ifTrue: [ aStream nextPutAll: 'false ' ]]. aStream nextPutAll: ') ' ]. hasCascading ifTrue: [ aStream nextPutAll: ');' ] ifFalse: [ aStream nextPut: $) ]]. ! ! !MetacelloAbstractPackageSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25753736! configMethodCascadeOn: aStream member: aMember last: lastCascade indent: indent self subclassResponsibility ! ! !MetacelloAbstractPackageSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25753944! configMethodOn: aStream for: aValue selector: selector cascading: cascading cascade: cascade indent: indent | valuePrintString | aValue == nil ifTrue: [ ^self ]. cascading ifTrue: [ aStream cr; tab: indent ]. valuePrintString := aValue value isSymbol ifTrue: [ '#' , aValue value asString printString ] ifFalse: [ aValue value printString ]. aStream nextPutAll: selector, valuePrintString. cascade ifTrue: [ aStream nextPut: $; ] ! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc-querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25748976! file "MetacelloPackageSpec compatibility" ^nil! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25745955! forceUpdatePackageSpec: updatedSpecs using: anMCLoader ^self updatePackageSpec: updatedSpecs using: anMCLoader! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc-querying' stamp: 'dkh 03/12/2013 20:25'! getFile "MetacelloPackageSpec compatibility" ^ nil! ! !MetacelloAbstractPackageSpec methodsFor: 'testing' stamp: 'dkh 6/30/2012 13:21'! hasRepository ^ false! ! !MetacelloAbstractPackageSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 25754738! includes includes == nil ifTrue: [ includes := #() ]. ^includes! ! !MetacelloAbstractPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25749671! includes: aCollection aCollection setIncludesInMetacelloPackage: self! ! !MetacelloAbstractPackageSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755598! includesForPackageOrdering ^#()! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc-querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25749139! isPackageLoaded ^false! ! !MetacelloAbstractPackageSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25754482! label ^self name! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25746168! loadUsing: aLoader gofer: gofer ^self subclassResponsibility! ! !MetacelloAbstractPackageSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 25750673! mergeIntoMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec mergeMember name: self name; spec: self; yourself)! ! !MetacelloAbstractPackageSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 25750943! mergeMap | map | map := super mergeMap. map at: #requires put: requires. map at: #includes put: includes. map at: #answers put: answers. ^map! ! !MetacelloAbstractPackageSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 25751187! mergeSpec: anotherSpec | newSpec map anotherRequires anotherIncludes anotherAnswers | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. anotherSpec name ~~ nil ifTrue: [ newSpec name: anotherSpec name ]. (anotherRequires := map at: #requires) ~~ nil ifTrue: [ newSpec setRequires: self requires, anotherRequires ]. (anotherIncludes := map at: #includes) ~~ nil ifTrue: [ newSpec setIncludes: self includes, anotherIncludes ]. (anotherAnswers := map at: #answers) ~~ nil ifTrue: [ newSpec setAnswers: self answers, anotherAnswers ]. ^newSpec ! ! !MetacelloAbstractPackageSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 25754892! name ^name! ! !MetacelloAbstractPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25749831! name: aString ((aString at: 1) isSeparator or: [ (aString at: aString size) isSeparator ]) ifTrue: [ self error: 'Names are not allowed to have leading or trailing blanks: ' , aString printString ]. name := aString! ! !MetacelloAbstractPackageSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 25751863! nonOverridable ^#( includes requires answers )! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25746443! packagesNeedSavingVisited: visitedProjects using: repos into: aCollection "noop by default" ! ! !MetacelloAbstractPackageSpec methodsFor: 'copying' stamp: 'dkh 6/5/2012 19:01:24' prior: 25750476! postCopy super postCopy. requires := requires copy. includes := includes copy. answers := answers copy. ! ! !MetacelloAbstractPackageSpec methodsFor: 'visiting' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755412! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock self subclassResponsibility! ! !MetacelloAbstractPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25749952! referencedSpec ^self! ! !MetacelloAbstractPackageSpec methodsFor: 'removing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755147! removeFromMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec removeMember name: self name; spec: self; yourself)! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc-querying' stamp: 'dkh 6/30/2012 12:32' prior: 25749265! repository self deprecated: 'Use repositories or repositorySpecs'. ^ nil! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25746630! repositorySpecs ^#()! ! !MetacelloAbstractPackageSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 25754992! requires requires == nil ifTrue: [ requires := #() ]. ^requires! ! !MetacelloAbstractPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25750063! requires: aCollection aCollection setRequiresInMetacelloPackage: self! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25746746! resolveToAllPackagesIn: aVersionSpec into: packages visited: visited visited visit: self doing: [:spec | self visitingWithPackages: packages. (spec includes, spec requires) do: [:pkgName | (aVersionSpec packageNamed: pkgName) projectDo: [:prj | (prj resolveToAllPackagesIn: aVersionSpec visited: visited) do: [:pkg | packages at: pkg name put: pkg ]] packageDo: [:pkg | packages at: pkg name put: pkg. (pkg resolveToAllPackagesIn: aVersionSpec visited: visited) do: [:rpkg | packages at: rpkg name put: rpkg ] ] groupDo: [:grp | grp resolveToAllPackagesIn: aVersionSpec into: packages visited: visited ]]]! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25747515! resolveToAllPackagesIn: aVersionSpec visited: visited | packages | packages := Dictionary new. self resolveToAllPackagesIn: aVersionSpec into: packages visited: visited. ^packages values asOrderedCollection ! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25747820! resolveToLoadableSpec ^self! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25747943! resolveToPackagesIn: aVersionSpec visited: visited ^self subclassResponsibility! ! !MetacelloAbstractPackageSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755717! setAnswers: aCollection answers := aCollection! ! !MetacelloAbstractPackageSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755852! setIncludes: aCollection includes := aCollection! ! !MetacelloAbstractPackageSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25755989! setRequires: aCollection requires := aCollection! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25748127! updateForSpawnMethod: sourceSpec "This means that this spec was used in a baseline and will be used in a version .... drop all information that isn't useful" answers := name := requires := includes := nil! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25748428! updatePackageRepositoriesFor: aVersionSpec "noop by default" ^true ! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25748592! updatePackageSpec: updatedSpecs using: anMCLoader "Add pkg copy to updatedSpecs if the file in current image is different from the receiver's file" ! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc-querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25749386! version "MetacelloPackageSpec compatibility" ^nil! ! !MetacelloAbstractPackageSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25748835! visitingWithPackages: packages "noop"! ! !MetacelloLoadingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25849187! actionLabel ^'Loading '! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25849699! copySpec: pkgSpec from: repositorySpecs to: repository | gofer | gofer := MetacelloGofer new. (self repositoriesFrom: repositorySpecs) do: [:repo | gofer repository: repo ]. ^self copySpec: pkgSpec with: gofer to: repository! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25850037! copySpec: pkgSpec with: gofer to: aRepository | repository resolvedReference | [resolvedReference := pkgSpec goferLoaderReference resolveWith: gofer] on: Error do: [:ignored | ^nil ]. repository := MCRepositoryGroup default repositories detect: [ :each | each = aRepository ] ifNone: [ aRepository ]. repository storeVersion: resolvedReference version. ^resolvedReference repository! ! !MetacelloLoadingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25849586! doLoad "NOOP"! ! !MetacelloLoadingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25849310! fetchingSpecLoader ^(MetacelloFetchingMCSpecLoader on: self spec) shouldDisablePackageCache: self shouldDisablePackageCache; loaderPolicy: self loaderPolicy copy; yourself! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25850532! goferCommitBranchPackage: branchName using: repositorySpecs commitMessage: commitMessage | gofer repoSpecs wc | repoSpecs := self spec repositorySpecs notEmpty ifTrue: [ self spec repositorySpecs ] ifFalse: [ repositorySpecs ]. gofer := MetacelloGofer new. gofer disablePackageCache. wc := self spec workingCopy. repositorySpecs do: [ :repoSpec | | repo | repo := repoSpec createRepository. (wc possiblyNewerVersionsIn: repo) notEmpty ifTrue: [ self notify: 'There are possibly newer versions of the package ' , self spec name printString , ' in the repository ' , repo description printString , '. Cancel and manually merge if you want to pick up the changes from the later version.' ]. gofer repository: repo ]. gofer package: self spec name. [ gofer interactiveCommit ] on: MCVersionNameAndMessageRequest do: [ :ex | | ref | ref := GoferVersionReference name: ex suggestedName. ex resume: {(ref packageName , '.' , branchName , '-' , ref author , '.' , ref versionNumber printString). commitMessage} ]. ^ true! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25851737! goferCommitPackageUsing: repositorySpecs commitMessage: commitMessage | gofer repoSpecs wc | repoSpecs := self spec repositorySpecs notEmpty ifTrue: [ self spec repositorySpecs ] ifFalse: [ repositorySpecs ]. gofer := MetacelloGofer new. gofer disablePackageCache. wc := self spec workingCopy. repositorySpecs do: [:repoSpec | | repo | repo := repoSpec createRepository. (wc possiblyNewerVersionsIn: repo) notEmpty ifTrue: [ self notify: 'There are possibly newer versions of the package ', self spec name printString, ' in the repository ', repo description printString, '. Cancel and manually merge if you want to pick up the changes from the later version.' ]. gofer repository: repo ]. gofer package: self spec name. gofer commit: commitMessage. ^true! ! !MetacelloLoadingMCSpecLoader methodsFor: 'packages' stamp: 'dkh 6/8/2012 14:04:22' prior: 25856086! latestPackage: aString fromRepository: repositorySpecs | gofer | gofer := MetacelloGofer new. gofer disablePackageCache. (self repositoriesFrom: repositorySpecs) do: [:repo | gofer repository: repo ]. ^([(GoferPackageReference name: aString) resolveWith: gofer] on: Error do: [:ignored | ^ nil ]) name ! ! !MetacelloLoadingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25856485! linearLoadPackageSpec: packageSpec gofer: gofer MetacelloPlatform current do: [ | loadBlock goferLoad answers resolvedReference repo | resolvedReference := self resolvePackageSpec: packageSpec gofer: gofer. resolvedReference isNil ifTrue: [ "Package version already loaded into image" ^self ]. loadBlock := [ self preLoad: packageSpec. goferLoad := MetacelloGoferLoad on: MetacelloGofer new. goferLoad addResolved: resolvedReference. goferLoad execute. MetacelloPlatform current clearCurrentVersionCache. self postLoad: packageSpec ]. (answers := packageSpec answers) notEmpty ifTrue: [ loadBlock valueSupplyingMetacelloAnswers: answers ] ifFalse: [ loadBlock value]. repo := resolvedReference repository. self hasRepositoryOverrides ifTrue: [ repo := self loaderPolicy repositoryMap at: resolvedReference name ifAbsent: [ resolvedReference repository ]. resolvedReference workingCopy repositoryGroup addRepository: repo ] ifFalse: [ resolvedReference workingCopy repositoryGroup addRepository: resolvedReference repository ]. Transcript cr; show: 'Loaded -> ', resolvedReference name, ' --- ', repo description, ' --- ', resolvedReference repository description ] displaying: 'Loading ', packageSpec file! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25852626! packagesNeedSavingUsing: repositorySpecs into: aCollection | wc repoSpecs repo | (wc := self spec workingCopy) == nil ifTrue: [ ^self ]. (wc ancestry ancestors notEmpty and: [ wc modified not]) ifTrue: [ ^self ]. repoSpecs := self spec repositorySpecs notEmpty ifTrue: [ self spec repositorySpecs ] ifFalse: [ repositorySpecs ]. repo := (self spec getFile == nil or: [ wc ancestry ancestors isEmpty ]) ifTrue: [ (self repositoriesFrom: repoSpecs ignoreOverrides: true) first ] ifFalse: [ ([ self resolveSpec: self spec from: repoSpecs ] on: Error do: [:ignored | ^self ]) repository ]. aCollection add: self spec -> repo! ! !MetacelloLoadingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25855556! postLoad: packageOrVersionSpec | block | (block := packageOrVersionSpec postLoadDoItBlock) ~~ nil ifTrue: [ block valueWithPossibleArgs: { self. packageOrVersionSpec. } ]! ! !MetacelloLoadingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25855825! preLoad: packageOrVersionSpec | block | (block := packageOrVersionSpec preLoadDoItBlock) ~~ nil ifTrue: [ block valueWithPossibleArgs: { self. packageOrVersionSpec. } ]! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25853388! repositoryFor: pkgSpec from: repositorySpecs ^([self resolveSpec: pkgSpec from: repositorySpecs] on: Error do: [:ignored | ^nil ]) repository! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25853643! repositoryFor: pkgSpec with: gofer ^([self resolveSpec: pkgSpec with: gofer] on: Error do: [:ignored | ^nil ]) repository! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25853868! resolveSpec: pkgSpec from: repositorySpecs | gofer | gofer := MetacelloGofer new. gofer disablePackageCache. (self repositoriesFrom: repositorySpecs ignoreOverrides: true) do: [:repo | gofer repository: repo ]. ^self resolveSpec: pkgSpec with: gofer! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25854234! resolveSpec: pkgSpec with: gofer ^pkgSpec goferLoaderReference resolveWith: gofer! ! !MetacelloLoadingMCSpecLoader methodsFor: 'development support' stamp: 'ChristopheDemarey 9/11/2013 13:21' prior: 67281819! savePackageUsing: repositorySpecs | wc repo repoSpecs newVersion | (wc := self spec workingCopy) == nil ifTrue: [ ^false ]. (wc ancestry ancestors notEmpty and: [ wc modified not]) ifTrue: [ ^false ]. repoSpecs := self spec repositorySpecs notEmpty ifTrue: [ self spec repositorySpecs ] ifFalse: [ repositorySpecs ]. (self spec getFile == nil or: [ wc ancestry ancestors isEmpty ]) ifTrue: [ repo := (self repositoriesFrom: repoSpecs ignoreOverrides: true) first ] ifFalse: [ [ | newer | repo := (self resolveSpec: self spec from: repoSpecs) repository. newer := wc possiblyNewerVersionsIn: repo. newer isEmpty not ifTrue: [ (MetacelloPlatform current confirm: 'CAUTION!! These versions in the repository may be newer:', String cr, newer printString, String cr, 'Do you really want to save this version?') ifFalse: [ ^false ]] ] on: Error do: [:ignored | ^false ] ]. (newVersion := MetacelloPlatform current newVersionForWorkingCopy: wc) == nil ifTrue: [ ^false ]. repo storeVersion: newVersion. ^true! ! !MetacelloValidationError methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26218874! isError ^true! ! !MetacelloValidationError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26218765! label ^'Error'! ! !MCDictionaryRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 24747298! asRepositorySpecFor: aMetacelloMCProject | desc | desc := self description. desc ifNil: [ desc := 'dictionary://Metacello_Dictionary' ]. ^(aMetacelloMCProject repositorySpec) description: desc; type: 'dictionary'; yourself! ! !MCDictionaryRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 24747553! versionInfoFromVersionNamed: aString | versions | versions := self dictionary values select: [:version | version info name beginsWith: aString ]. versions isEmpty ifTrue: [ ^ nil ]. versions := versions asSortedCollection: [ :a :b | ([ (a info name copyAfterLast: $.) asNumber ] on: Error do: [:ex | ex return: 0 ]) <= ([ (b info name copyAfterLast: $.) asNumber ] on: Error do: [:ex | ex return: 0 ]) ]. ^ versions last info! ! !MCWorkingCopy methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25141758! metacelloPackageNameWithBranch "answer array with package name and package name with branch name" ancestry ancestors isEmpty ifTrue: [ ^ {(package name). (package name)} ]. ^ (GoferVersionReference name: self ancestors first name) metacelloPackageNameWithBranch! ! !MCVersionLoader methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25117742! versions ^versions! ! !MetacelloGoferLoad methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25831093! updateCategories MetacelloPlatform current bypassGoferLoadUpdateCategories ifFalse: [ super updateCategories ]! ! !MetacelloGoferLoad methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25831291! updateRepositories "Noop for Metacello...done by loader itself" ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. "using #atomic loadType means that package order isn't important ... linear load order is GoferBar, GoferBeau, GoferFoo to test atomic load order, force an incorrect load order - which shouldn't matter for atomic loads" spec package: 'GoferBar'; package: 'GoferFoo' with: [ spec requires: 'GoferBar' ]; package: 'GoferBeau' with: [ spec requires: 'GoferFoo' ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #baseline. "using #atomic loadType means that package order isn't important" spec project: 'GoferFoo' with: [ "requires: 'GoferBeau'" spec className: 'MetacelloTestConfigurationOfAtomicFoo'; versionString: '2.0-baseline'; loads: 'GoferFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GoferBar'; package: 'GoferFaux' with: [ spec requires: 'GoferFoo' ]; package: 'GoferBeau'; "requires: 'GoferBar'" yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline30: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferBar'; package: 'GoferBeau' with: [ spec requires: 'GoferBar'; includes: #('GoferFoo' ) ]; package: 'GoferFar' with: [ spec requires: #('GoferFoo' ) ]; yourself. spec project: 'GoferFoo' with: [ "requires GoferBeau" spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '2.0'; loads: 'GoferFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline31: spec spec for: #common do: [ spec project: 'AtomicFan' with: [ spec className: 'MetacelloTestConfigurationOfAtomicFan'; versionString: '3.1-baseline'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline35: spec "loads correctly with atomic load, gives warning if loaded linearly...the explicit load of MetacelloTestConfigurationOfAtomicFan shouldn't break the chain of the atomic load" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferBar'; package: 'GoferBeau' with: [ spec requires: 'GoferBar'; includes: #('GoferFoo' ) ]; package: 'GoferFar' with: [ spec requires: #('GoferFoo' ) ]; "Far loaded after Foo, but Fan depends upon Far" yourself. spec project: 'GoferFoo' with: [ spec className: 'MetacelloTestConfigurationOfAtomicFoo'; versionString: '2.5-baseline'; loads: 'GoferFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferUmbrella'; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline50: spec spec for: #common do: [ spec project: 'UmbrellaA' with: [ spec className: 'MetacelloTestConfigurationOfUmbrellaA'; versionString: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'UmbrellaB' with: [ spec className: 'MetacelloTestConfigurationOfUmbrellaB'; versionString: '5.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.0'; loads: '1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Issue86' with: [ spec className: 'MetacelloTestConfigurationOfProjectIssue86'; versionString: '6.0'; loads: 'A'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFoo' with: [ spec file: 'GeauxFoo-lr.1'; requires: #('Foo') ]; package: 'GeauxBeau' with: [ spec file: 'GeauxBeau-dkh.55'; requires: #('GeauxFoo' 'Issue86') ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.1'; loads: '1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Issue86' with: [ spec className: 'MetacelloTestConfigurationOfProjectIssue86'; versionString: '6.1'; loads: 'A'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFoo' with: [ spec file: 'GeauxFoo-lr.1'; requires: #('Foo') ]; package: 'GeauxBeau' with: [ spec file: 'GeauxBeau-dkh.55'; requires: #('GeauxFoo' 'Issue86') ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline62: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.2'; loads: '1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Issue86' with: [ spec className: 'MetacelloTestConfigurationOfProjectIssue86'; versionString: '6.2'; loads: 'A'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFoo' with: [ spec file: 'GeauxFoo-lr.1'; requires: #('Foo') ]; package: 'GeauxBeau' with: [ spec file: 'GeauxBeau-dkh.55'; requires: #('GeauxFoo' 'Issue86') ]; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationRepository "MetacelloConfigurationResource reset" ^ MetacelloAtomicConfigurationResource current monticelloRepository! ! !MetacelloAtomicLoadOrderTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! loadType loadType ~~ nil ifTrue: [ ^loadType ]. ^#atomic! ! !MetacelloAtomicLoadOrderTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository "MetacelloMonticelloResource reset" ^ MetacelloAtomicMonticelloResource current monticelloRepository! ! !MetacelloAtomicLoadOrderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. loadType := nil.! ! !MetacelloAtomicLoadOrderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. loadType := nil.! ! !MetacelloAtomicLoadOrderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. (self hasPackage: 'GeauxFoo') ifTrue: [ aGoferInstance package: 'GeauxFoo' ]. (self hasPackage: 'GeauxBeau') ifTrue: [ aGoferInstance package: 'GeauxBeau' ]. (self hasPackage: 'GoferFar') ifTrue: [ aGoferInstance package: 'GoferFar' ]. (self hasPackage: 'GoferFan') ifTrue: [ aGoferInstance package: 'GoferFan' ]. (self hasPackage: 'GoferUmbrella') ifTrue: [ aGoferInstance package: 'GoferUmbrella' ]. (self hasPackage: 'GoferBarDependency') ifTrue: [ aGoferInstance package: 'GoferBarDependency' ]. (self hasPackage: 'GoferFooDependency') ifTrue: [ aGoferInstance package: 'GoferFooDependency' ]. (self hasPackage: 'MetacelloTestConfigurationOfAtomicFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfAtomicFoo' ]. (self hasPackage: 'MetacelloTestConfigurationOfAtomicFan') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfAtomicFan' ]. (self hasPackage: 'MetacelloTestConfigurationOfLinearFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfLinearFoo' ]. (self hasPackage: 'MetacelloTestConfigurationOfUmbrellaA') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfUmbrellaA' ]. (self hasPackage: 'MetacelloTestConfigurationOfUmbrellaB') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfUmbrellaB' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectIssue86') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectIssue86' ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10LoadAtomic | project version wc | project := self project. version := project version: '1.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.5'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10LoadLinear | project version | loadType := #linear. project := self project. version := project version: '1.0-baseline'. self should: [ version load ] raise: Warning ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20LoadAtomic | project version wc | project := self project. version := project version: '2.0-baseline'. self shouldnt: [ version load ] raise: Warning. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.5'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20LoadLinear | project version | loadType := #linear. project := self project. version := project version: '2.0-baseline'. self should: [ version load ] raise: Warning ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30LoadAtomic | project version wc | project := self project. version := project version: '3.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferFar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFar-dkh.4'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.4'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30LoadLinear | project version wc | loadType := #linear. project := self project. version := project version: '3.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferFar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFar-dkh.4'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.4'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline31LoadAtomic "coverage for postload doits with linear load nested inside an atomic load" | project version | project := self project. version := project version: '3.1-baseline'. self shouldnt: [ version load ] raise: Error. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline35LoadAtomic | project version wc | project := self project. version := project version: '3.5-baseline'. version load. wc := (GoferPackageReference name: 'GoferFan') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFan-dkh.1'). wc := (GoferPackageReference name: 'GoferFar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFar-dkh.4'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.5'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline35LoadLinear | project version wc | loadType := #linear. project := self project. version := project version: '3.5-baseline'. self should: [ version load ] raise: Warning ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline40LoadAtomic | project version wc | project := self project. version := project version: '4.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferUmbrella') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferUmbrella-lr.5'). wc := (GoferPackageReference name: 'GoferBarDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBarDependency-lr.35'). wc := (GoferPackageReference name: 'GoferFooDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFooDependency-lr.35'). ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline40LoadLinear | project version wc | loadType := #linear. project := self project. version := project version: '4.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferUmbrella') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferUmbrella-lr.5'). wc := (GoferPackageReference name: 'GoferBarDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBarDependency-lr.35'). wc := (GoferPackageReference name: 'GoferFooDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFooDependency-lr.35'). ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue66 "http://code.google.com/p/metacello/issues/detail?id=66" | project version wc | project := self project. version := project version: '2.0'. self shouldnt: [ version load ] raise: Warning. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.4'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'. version := project version: '2.0-baseline'. self shouldnt: [ version load ] raise: Warning. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.5'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue81A "http://code.google.com/p/metacello/issues/detail?id=81 Verify that the old version of umbrella file loads in as expected" | project version wc | loadType := #linear. project := self project. version := project version: '5.0-baseline'. version load: 'UmbrellaA'. wc := (GoferPackageReference name: 'GoferUmbrella') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferUmbrella-dkh.4'). wc := (GoferPackageReference name: 'GoferBarDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBarDependency-lr.30'). wc := (GoferPackageReference name: 'GoferFooDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFooDependency-lr.30'). ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue81B "http://code.google.com/p/metacello/issues/detail?id=81 Note: for this bug to express itself, the dependent mcz version numbers (in this case 35) must be greater than the umbrella mcz file version number (in this case 5)" | project version wc | loadType := #linear. project := self project. version := project version: '5.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferUmbrella') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferUmbrella-lr.5'). wc := (GoferPackageReference name: 'GoferBarDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBarDependency-lr.35'). wc := (GoferPackageReference name: 'GoferFooDependency') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFooDependency-lr.35'). ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue86A "Issue 86: http://code.google.com/p/metacello/issues/detail?id=86 This configuration reproduces the Grease-Core vs Grease-Slime problem. " | project version loadDirective repo wc | loadType := #linear. project := self project. version := project version: '6.0-baseline'. repo := MetacelloAtomicConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. repo := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. loadDirective := (version load: #('GeauxBeau')) loaderPolicy loadDirective. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue86B "" | project version loadDirective repo wc | loadType := #linear. project := self project. version := project version: '6.1-baseline'. repo := MetacelloAtomicConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. repo := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. loadDirective := (version load: #('GeauxBeau')) loaderPolicy loadDirective. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'test issues' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue86C "" | project version loadDirective repo wc | loadType := #linear. project := self project. version := project version: '6.2-baseline'. repo := MetacelloAtomicConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. repo := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. loadDirective := (version load: #('GeauxBeau')) loaderPolicy loadDirective. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion20LoadAtomic | project version wc | project := self project. version := project version: '2.0'. self shouldnt: [ version load ] raise: Warning. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-dkh.4'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.1'! ! !MetacelloAtomicLoadOrderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion21ProjectLoadError | project version | project := self project. version := project version: '2.1'. self should: [ version load ] raise: MetacelloProjectSpecLoadError. [ version load ] on: MetacelloProjectSpecLoadError do: [ :ex | self assert: ex versionDoesNotExistException class == MetacelloVersionDoesNotExistError. self assert: ex versionString = '20.0'. self shouldnt: [ ex possibleVersions ] raise: Error ]! ! !MetacelloAtomicLoadOrderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version20: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. "using #atomic loadType means that package order isn't important" spec project: 'GoferFoo' with: '2.0'; yourself. spec package: 'GoferBar' with: 'GoferBar-dkh.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.15'; yourself ]. ! ! !MetacelloAtomicLoadOrderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version21: spec spec for: #'common' do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'GoferFoo' with: '20.0'; yourself. spec package: 'GoferBar' with: 'GoferBar-dkh.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.15'; yourself ]! ! !MetacelloCurrentVersionTest methodsFor: 'private' stamp: 'dkh 07/19/2013 23:19'! assertProject: project expectedVersionString: expectedVersionString expectedFidelity: expectedVersionStatus | cv versionStatus | cv := project currentVersion. expectedVersionString == nil ifTrue: [ ^ cv == nil ifFalse: [ self assert: cv versionStatus == #'somethingLoaded' ] ]. "validate current version" self assert: cv = (project version: expectedVersionString). self assert: (versionStatus := cv versionStatus) == expectedVersionStatus! ! !MetacelloCurrentVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! defaultTimeout ^MetacelloPlatform current defaultTimeout! ! !MetacelloCurrentVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := self configurationRepository. self tempRepositories add: repo. gofer repository: repo! ! !MetacelloCurrentVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. (self hasPackage: 'GeauxFoo') ifTrue: [ aGoferInstance package: 'GeauxFoo' ]. (self hasPackage: 'GeauxBar') ifTrue: [ aGoferInstance package: 'GeauxBar' ]. (self hasPackage: 'GeauxFaux') ifTrue: [ aGoferInstance package: 'GeauxFaux' ]. (self hasPackage: 'GeauxBeau') ifTrue: [ aGoferInstance package: 'GeauxBeau' ]. (self hasPackage: 'MetacelloTestConfigurationOfFum') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFum' ]. (self hasPackage: 'MetacelloTestConfigurationOfFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFoo' ]. (self hasPackage: 'MetacelloTestConfigurationOfFeaux') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFeaux' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectFie') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectFie' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectFoe') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectFoe' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectFee') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectFee' ]. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 07/19/2013 22:51'! testCompareCurrentVersion | version cv fum projectFie projectFee projectFoe foo feaux map wc | Transcript cr; show: 'STARTING testCompareCurrentVersion'. Transcript cr; show: 'GoferBar'. self should: [ wc := (GoferPackageReference name: 'GoferBar') workingCopy ] raise: Error. Transcript cr; show: 'GoferFoo'. self should: [ wc := (GoferPackageReference name: 'GoferFoo') workingCopy ] raise: Error. Transcript cr; show: 'GoferFaux'. self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. Transcript cr; show: 'GoferBeau'. self should: [ wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55' ] raise: Error. Transcript cr; show: 'Pre-validation Issue #48'. gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #'MetacelloTestConfigurationOfFum') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. feaux := (Smalltalk at: #'MetacelloTestConfigurationOfFeaux') new project. projectFie := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') new project. projectFee := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFee') new project. projectFoe := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFoe') new project. gofer version: 'GeauxBeau-dkh.56'; load. version := feaux version: '4.0'. version load: 'GeauxFoo'. version := projectFoe version: '4.0'. version load: #('ALL'). Transcript cr; show: 'Post load'. Transcript cr; show: 'GoferBar'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. Transcript cr; show: 'GoferFoo'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.1'. Transcript cr; show: 'GoferFaux'. self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. Transcript cr; show: 'GoferBeau'. self should: [ wc := (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. Transcript cr; show: 'A'. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #'loadedToSpec'. Transcript cr; show: 'B'. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #'loadedToSpec'. Transcript cr; show: 'C'. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #'loadedToSpec'. Transcript cr; show: 'D'. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #'loadedMatchConstraints'. Transcript cr; show: 'E'. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #'allLoadedToSpec'. Transcript cr; show: 'F'. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #'loadedMatchConstraints'. foo currentVersion packages do: [ :pkg | pkg isPackageLoaded ifTrue: [ Transcript cr; show: '1 -' , pkg name. self assert: (pkg compareRelativeCurrentVersion: #'=' targetVersionStatus: nil using: pkg loader). Transcript cr; show: '2 -' , pkg name. self assert: (pkg compareCurrentVersion: #'=' targetVersionStatus: nil using: pkg loader) ] ]. feaux currentVersion packages do: [ :pkg | pkg isPackageLoaded ifTrue: [ Transcript cr; show: '3 -' , pkg name. self assert: (pkg compareRelativeCurrentVersion: #'=' targetVersionStatus: nil using: pkg loader). Transcript cr; show: '4 -' , pkg name. self assert: (pkg compareCurrentVersion: #'=' targetVersionStatus: nil using: pkg loader) ] ]. projectFie currentVersion projects do: [ :prj | Transcript cr; show: '5 -' , prj name. self assert: (prj compareRelativeCurrentVersion: #'=' targetVersionStatus: #(#'loadedToSpec') using: prj loader). Transcript cr; show: '6 -' , prj name. self assert: (prj compareCurrentVersion: #'=' targetVersionStatus: #(#'loadedToSpec') using: prj loader) ]. projectFee currentVersion packages do: [ :pkg | pkg isPackageLoaded ifTrue: [ Transcript cr; show: '7 -' , pkg name. self assert: (pkg compareRelativeCurrentVersion: #'>' targetVersionStatus: nil using: pkg loader). Transcript cr; show: '8 -' , pkg name. self assert: (pkg compareCurrentVersion: #'>' targetVersionStatus: nil using: pkg loader) ] ]. projectFee currentVersion projects do: [ :prj | Transcript cr; show: '9 -' , prj name. self assert: (prj compareRelativeCurrentVersion: #'=' targetVersionStatus: #(#'loadedToSpec') using: prj loader). Transcript cr; show: '10 -' , prj name. self assert: (prj compareCurrentVersion: #'=' targetVersionStatus: #(#'loadedToSpec') using: prj loader) ]. projectFoe currentVersion projects do: [ :prj | Transcript cr; show: '11 -' , prj name. self assert: (prj compareRelativeCurrentVersion: #'=' targetVersionStatus: #(#'allLoadedToSpec') using: prj loader). Transcript cr; show: '12 -' , prj name. self deny: (prj compareCurrentVersion: #'=' targetVersionStatus: #(#'allLoadedToSpec') using: prj loader) ]. map := Dictionary new. map at: 'Feaux' put: #(#'loadedToSpec'). map at: 'Foo' put: #(#'loadedToSpec'). map at: 'ProjectFie' put: #(#'loadedToSpec'). map at: 'ProjectFee' put: #(#'loadedMatchConstraints'). fum currentVersion projects do: [ :prj | Transcript cr; show: '13 -' , prj name. self assert: (prj compareRelativeCurrentVersion: #'>=' targetVersionStatus: (map at: prj name) using: prj loader). Transcript cr; show: '14 -' , prj name. self assert: (prj compareCurrentVersion: #'>=' targetVersionStatus: (map at: prj name) using: prj loader) ]. Transcript cr; show: 'END testCompareCurrentVersion'! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFeaux40Loaded | version fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Feaux'). self assertProject: foo expectedVersionString: nil expectedFidelity: nil. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40AllLoaded | version cv fum projectFie projectFee projectFoe foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := feaux version: '4.0'. version load: 'GeauxFoo'. version := projectFoe version: '4.0'. version load: #('ALL'). gofer version: 'GeauxBeau-dkh.56'; load. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40AllLoadedDefaultPackageNamesToLoad | version fum projectFie projectFee projectFoe foo feaux packageNames | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := feaux version: '4.0'. packageNames := version defaultPackageNamesToLoad. self assert: packageNames size == 2. self assert: (packageNames includes: 'GeauxFoo'). self assert: (packageNames includes: 'GeauxBar'). packageNames := version defaultPackageNamesToLoad: #( 'GeauxFoo' ). self assert: packageNames size == 1. self assert: (packageNames includes: 'GeauxFoo'). version load: 'GeauxFoo'. packageNames := version defaultPackageNamesToLoad: #( 'GeauxFoo' ). self assert: packageNames size == 1. self assert: (packageNames includes: 'GeauxFoo'). version := projectFoe version: '4.0'. version load: #('ALL'). packageNames := (foo version: '4.0') defaultPackageNamesToLoad. self assert: packageNames size == 6. self assert: (packageNames includes: 'GoferFoo'). self assert: (packageNames includes: 'GoferBar'). packageNames := (foo version: '4.0') defaultPackageNamesToLoad: #(). self assert: packageNames size == 2. self assert: (packageNames includes: 'GoferFoo'). self assert: (packageNames includes: 'GoferBar'). ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40Loaded | version cv fum projectFie projectFee projectFoe foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := projectFoe version: '4.0'. version load: #('Foo'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40LoadedFoo40Loaded | version cv fum projectFie projectFee projectFoe foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := projectFoe version: '4.0'. version load: #('Foo'). version := foo version: '4.0'. version load. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40LoadedFoo40Loaded1LaterPackage | version cv fum projectFie projectFee projectFoe foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := projectFoe version: '4.0'. version load: #('Foo'). version := foo version: '4.0'. version load. gofer version: 'GoferFaux-tg.34'; load. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoe40LoadedFoo50Loaded "isCurrent and findCurrentVersion gave wrong answers for this scenario in 1.0-beta.22" | version cv fum projectFie projectFee projectFoe foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; package: 'MetacelloTestConfigurationOfProjectFoe'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. projectFoe := (Smalltalk at: #MetacelloTestConfigurationOfProjectFoe) new project. version := foo version: '5.0'. version load. self assertProject: foo expectedVersionString: '5.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFoe expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo20Feaux40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Feaux'). version := foo version: '2.0'. version load: #('ALL'). self assertProject: foo expectedVersionString: '2.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil.! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo20Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := foo version: '2.0'. version load: #('ALL'). self assertProject: foo expectedVersionString: '2.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo4020Loaded | version cv fum projectFie projectFee foo feaux repo | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. repo := self monticelloRepository. version := foo version: '3.0'. version load. self assertProject: foo expectedVersionString: '3.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. "Load exact match to 2.0" Gofer it repository: repo; version: 'GoferBeau-dkh.25'; metacelloLoad. self assertProject: foo expectedVersionString: '2.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo403540Loaded1PackageLater | version cv fum projectFie projectFee foo feaux repo | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. repo := self monticelloRepository. version := foo version: '4.0'. version load: #('1' ). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. "Load partial exact match to 3.5" Gofer it repository: repo; version: 'GoferBeau-dkh.54'; version: 'GoferFoo-lr.1'; metacelloLoad. self assertProject: foo expectedVersionString: '3.5' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '3.5' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. "reload version 4.0" version load: '1'. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. "Later package version matches constraints" Gofer it repository: repo; version: 'GoferFaux-tg.34'; metacelloLoad. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40Feaux40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Feaux' 'Foo'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Foo'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40Loaded1Package1EarlierPackage | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := foo version: '4.0'. version load: #('GoferFaux' 'GoferBeau' ). gofer version: 'GoferFaux-tg.31'; load. self assertProject: foo expectedVersionString: '3.5' expectedFidelity: #loadedMatchConstraints. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '3.5' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 07/19/2013 23:17'! testFoo40Loaded1Package1LaterPackage | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #'MetacelloTestConfigurationOfFum') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. feaux := (Smalltalk at: #'MetacelloTestConfigurationOfFeaux') new project. projectFie := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') new project. projectFee := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFee') new project. version := foo version: '4.0'. version load: #('GoferFaux' 'GoferBar'). gofer version: 'GoferFaux-tg.34'; load. self assertProject: foo expectedVersionString: '5.0' expectedFidelity: #'loadedToSpec'. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #'loadedMatchConstraints'. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #'loadedMatchConstraints'! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40Loaded2Packages | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := foo version: '4.0'. version load: #('GoferFoo' 'GoferBeau' ). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40LoadedEarlierPackage | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Foo'). gofer version: 'GoferFaux-tg.31'; load. self assertProject: foo expectedVersionString: '3.5' expectedFidelity: #loadedMatchConstraints. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '3.5' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo40LoadedLaterPackage | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('Foo'). gofer version: 'GoferFaux-tg.34'; load. self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testFoo50Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := foo version: '5.0'. version load: #('ALL'). self assertProject: foo expectedVersionString: '5.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedMatchConstraints. ! ! !MetacelloCurrentVersionTest methodsFor: 'test packages only' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue118 | version cv foo packageSpec versionInfo53 wc | gofer package: 'MetacelloTestConfigurationOfFoo'; load. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. version := foo version: '3.0'. version load. packageSpec := version packageNamed: 'GoferBeau'. versionInfo53 := packageSpec workingCopy ancestry ancestors first. self assertProject: foo expectedVersionString: '3.0' expectedFidelity: #allLoadedToSpec. gofer version: 'GoferBeau-dkh.25'; load. self assertProject: foo expectedVersionString: '2.0' expectedFidelity: #allLoadedToSpec. "set up Issue 118 conditions ... simulate a merge of GoferBeau-dkh.53 by adding versionInfo as ancestor" packageSpec := version packageNamed: 'GoferBeau'. wc := packageSpec workingCopy. wc ancestry addAncestor: versionInfo53. self assertProject: foo expectedVersionString: '3.0' expectedFidelity: #allLoadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects and packages' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFee40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('ProjectFee'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects and packages' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFee40Loaded2Packages | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := projectFee version: '4.0'. version load: #('GeauxFaux' 'GeauxBeau'). self assertProject: foo expectedVersionString: nil expectedFidelity: nil. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects and packages' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFee40Loaded2PackagesEarlierFoo | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := projectFee version: '4.0'. version load: #('GeauxFaux' 'GeauxBeau'). version := foo version: '2.0'. version load: #('ALL'). self assertProject: foo expectedVersionString: '2.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFie expectedVersionString: nil expectedFidelity: nil. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #somethingLoaded. self assertProject: fum expectedVersionString: nil expectedFidelity: nil. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFie40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('ProjectFie'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFee expectedVersionString: nil expectedFidelity: nil. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #loadedToSpec. ! ! !MetacelloCurrentVersionTest methodsFor: 'test projects only' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFie40ProjectFee40Loaded | version cv fum projectFie projectFee foo feaux | gofer package: 'MetacelloTestConfigurationOfFum'; package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfFeaux'; package: 'MetacelloTestConfigurationOfProjectFie'; package: 'MetacelloTestConfigurationOfProjectFee'; load. fum := (Smalltalk at: #MetacelloTestConfigurationOfFum) new project. foo := (Smalltalk at: #MetacelloTestConfigurationOfFoo) new project. feaux := (Smalltalk at: #MetacelloTestConfigurationOfFeaux) new project. projectFie := (Smalltalk at: #MetacelloTestConfigurationOfProjectFie) new project. projectFee := (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project. version := fum version: '4.0'. version load: #('ProjectFee' 'ProjectFie'). self assertProject: foo expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: feaux expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFie expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: projectFee expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. self assertProject: fum expectedVersionString: '4.0' expectedFidelity: #allLoadedToSpec. ! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := self configurationRepository. self tempRepositories add: repo. gofer repository: repo! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. (self hasPackage: 'MetacelloTestConfigurationOfFan') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFan' ]. (self hasPackage: 'MetacelloTestConfigurationOfFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFoo' ]. ! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 16:39'! test001 | version foo fan wc | gofer package: 'MetacelloTestConfigurationOfFan'; package: 'MetacelloTestConfigurationOfFoo'; load. fan := (Smalltalk at: #'MetacelloTestConfigurationOfFan') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. version := foo version: '3.0'. version load: #('GoferBar' 'GoferFaux'). "When we load version 2.0 of fan, we recognize that '3.0' of foo is the currentVersion (#allLoadedToSpec or #loadedToSpec and latestVersion), so we load the packages from version 3.0 of foo instead" version := fan version: '2.0'. version load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.53'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 16:40'! test002 | version foo fan wc | gofer package: 'MetacelloTestConfigurationOfFan'; package: 'MetacelloTestConfigurationOfFoo'; load. fan := (Smalltalk at: #'MetacelloTestConfigurationOfFan') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. version := foo version: '5.0'. version load: #('GoferBar' 'GoferFaux'). "load older version of 1 package (that doesn't match spec of earlier version)" gofer version: 'GoferFaux-tg.33'; load. version := fan version: '2.0'. version load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.33'! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 16:45'! test003 | version foo fan wc | gofer package: 'MetacelloTestConfigurationOfFan'; package: 'MetacelloTestConfigurationOfFoo'; load. fan := (Smalltalk at: #'MetacelloTestConfigurationOfFan') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. version := foo version: '5.0'. version load: #('GoferBar' 'GoferFaux'). "load later version of 1 package beyond the last version of foo 5.0" gofer version: 'GoferFaux-tg.35'; load. version := fan version: '2.0'. version load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.35'! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 16:48'! test004 | version foo fan wc | gofer package: 'MetacelloTestConfigurationOfFan'; package: 'MetacelloTestConfigurationOfFoo'; load. fan := (Smalltalk at: #'MetacelloTestConfigurationOfFan') new project. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. version := foo version: '5.0'. version load: #('GoferBar' 'GoferFaux'). version := fan version: '2.0'. version load: 'Far'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34'! ! !MetacelloDetermineCurrentVersionForLoadTest methodsFor: 'tests' stamp: 'dkh 07/19/2013 22:52'! testIssue112 | version foo wc | gofer package: 'MetacelloTestConfigurationOfFoo'; load. foo := (Smalltalk at: #'MetacelloTestConfigurationOfFoo') new project. version := foo version: '3.0'. version load: #('GoferBar' 'GoferFaux'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. "A load of GoferBeau for version 3.5, should also load the correct package for GoferFaux (GoferFaux-tg.31)" version := foo version: '3.5'. version load: 'GoferBeau'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.54'. "this is the crux of Issue 112" wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.31'! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! alternateRepository "MetacelloAlternateResource reset" ^ MetacelloAlternateResource current monticelloRepository! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationRepository "MetacelloConfigurationResource reset" ^ MetacelloConfigurationResource current monticelloRepository! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! defaultTimeout "I don't want no stkinkin' timeouts" ^60000! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! doSilently ^true! ! !MetacelloDictionaryRepositoryTest methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloDictionaryRepositoryTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! loadType ^#linear! ! !MetacelloDictionaryRepositoryTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository "MetacelloMonticelloResource reset" ^ MetacelloMonticelloResource current monticelloRepository! ! !MetacelloDictionaryRepositoryTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: self loadType. ^project! ! !MetacelloDictionaryRepositoryTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: self loadType. ^project ! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:22'! runCase | original | (self doSilently) ifFalse: [ ^super runCase ]. original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. MetacelloConfigurationResource projectAttributes: nil. repo := self monticelloRepository. self tempRepositories add: repo. gofer repository: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. repo := self alternateRepository. self tempRepositories add: repo. Smalltalk at: #'Metacello_Configuration_Test_Alternate_Repository' put: repo. repo := self configurationRepository. self tempRepositories add: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. ! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackages: aGofer. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_Alternate_Repository' ifAbsent: []. self tempRepositories do: [:repo | MCRepositoryGroup default removeRepository: repo ]. ! ! !MetacelloDictionaryRepositoryTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance (self hasPackage: 'GoferFoo') ifTrue: [ aGoferInstance package: 'GoferFoo' ]. (self hasPackage: 'GoferBar') ifTrue: [ aGoferInstance package: 'GoferBar' ]. (self hasPackage: 'GoferFaux') ifTrue: [ aGoferInstance package: 'GoferFaux' ]. (self hasPackage: 'GoferBeau') ifTrue: [ aGoferInstance package: 'GoferBeau' ]. (self hasPackage: 'MetacelloTestConfigurationOfFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFoo' ]. ! ! !MetacelloDictionaryRepositoryTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! tempRepositories tempRepositories ifNil: [ tempRepositories := OrderedCollection new ]. ^tempRepositories! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec super baseline10: spec ! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline11: spec super baseline11: spec ! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue40: spec super baselineIssue40: spec ! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue77: spec super baselineIssue77: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue95: spec super baselineIssue95: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineMoose: spec super baselineMoose: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! loadType ^#atomic! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec super version10: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version11: spec super version11: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version30: spec super version30: spec ! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version31: spec super version31: spec ! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version40: spec super version40: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version50: spec super version50: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version60: spec super version60: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version61: spec super version61: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version62: spec super version62: spec! ! !MetacelloGoferBasedAtomicLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version63: spec super version63: spec! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar'; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline11: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: [ spec preLoadDoIt: #preloadExecute; postLoadDoIt: #postloadExecute ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue40: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar' with: [ spec repository: 'dictionary://Metacello_Configuration_Test_Alternate_Repository' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue77: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'B' with: [ spec className: 'MetacelloTestConfigurationOfIssue77B'; versionString: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'D' with: [ spec className: 'MetacelloTestConfigurationOfIssue77D'; versionString: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineIssue95: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Issue95' with: [ spec className: 'MetacelloTestConfigurationOfProjectIssue95'; versionString: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineMoose: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFaux' with: [ spec file: 'GoferFaux-' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadExecute postLoadExecuted := true! ! !MetacelloGoferBasedLoaderTest methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadSupplyingAnswers postloadAnswer := ProvideAnswerNotification signal: 'postload'. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadExecute preLoadExecuted := true! ! !MetacelloGoferBasedLoaderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result' put: false. preLoadExecuted := postLoadExecuted := false. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. Smalltalk removeKey: #'Metacello_Configuration_Test_DoIt_Result' ifAbsent: []. MetacelloConfigurationResource projectAttributes: nil.! ! !MetacelloGoferBasedLoaderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. (self hasPackage: 'GeauxBar') ifTrue: [ aGoferInstance package: 'GeauxBar' ]. (self hasPackage: 'GeauxBeau') ifTrue: [ aGoferInstance package: 'GeauxBeau' ]. (self hasPackage: 'MetacelloTestConfigurationOfFix') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFix' ]. (self hasPackage: 'MetacelloTestConfigurationOfIssue77B') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfIssue77B' ]. (self hasPackage: 'MetacelloTestConfigurationOfIssue77C') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfIssue77C' ]. (self hasPackage: 'MetacelloTestConfigurationOfIssue77D') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfIssue77D' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectLoop') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectLoop' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectInfinite') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectInfinite' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectIssue95') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectIssue95' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectToolBox') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectToolBox' ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline11PrePostLoadFetch | project version | project := self project. version := project version: '1.1-baseline'. self deny: preLoadExecuted. self deny: postLoadExecuted. version fetch. self deny: preLoadExecuted. self deny: postLoadExecuted. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline11PrePostLoadLoad | project version loader | project := self project. version := project version: '1.1-baseline'. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: preLoadExecuted. self assert: postLoadExecuted. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaselineFetch | project version loader files | project := self project. version := project version: '1.0-baseline'. loader := version fetch. files := #('GoferFoo-lr.4' 'GoferBar-lr.1') asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | files remove: pkgDirective file ifAbsent: [ self assert: false ]]. loader loadDirective versionDirectivesDo: [:vrsnDirective | vrsnDirective loader ~~ nil ifTrue: [ | spec | spec := vrsnDirective spec. self assert: (spec isKindOf: MetacelloVersionSpec) ]]. self assert: files isEmpty ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaselineLoad | project version wc | project := self project. version := project version: '1.0-baseline'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaselineRecord | project version loader files | project := self project. version := project version: '1.0-baseline'. loader := version record. files := #('GoferFoo' 'GoferBar') asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | files remove: pkgDirective packageName ifAbsent: [ self assert: false ]]. self assert: files isEmpty ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'cache repository' stamp: 'ChristopheDemarey 5/31/2013 13:54'! testIssue163PackageSpecCacheRepository "test for Issue 163: http://code.google.com/p/metacello/issues/detail?id=163" | project version loader cacheRepository mcVersion mcVersionInfo files | cacheRepository := MCDictionaryRepository new. "preload cacheRepository with all of the files ... only the configurations should be fetched" #('MetacelloTestConfigurationOfIssue77B-dkh.1' 'MetacelloTestConfigurationOfIssue77C-dkh.1' 'MetacelloTestConfigurationOfIssue77D-dkh.1') do: [ :file | mcVersionInfo := self configurationRepository sortedVersionInfos detect: [ :info | info name = file ]. mcVersion := self configurationRepository versionWithInfo: mcVersionInfo ifAbsent: [ ]. cacheRepository storeVersion: mcVersion "preload cache with one of the configurations, shouldn't prevent the successful fetch of packages" ]. #('GoferBar-lr.1' 'GoferBeau-dkh.53' 'GoferFoo-lr.1' 'GoferFoo-lr.4') do: [ :file | mcVersionInfo := self monticelloRepository sortedVersionInfos detect: [ :info | info name = file ]. mcVersion := self monticelloRepository versionWithInfo: mcVersionInfo ifAbsent: [ ]. cacheRepository storeVersion: mcVersion "preload cache with one of the configurations, shouldn't prevent the successful fetch of packages" ]. project := self project. version := project version: 'Issue77-baseline'. version cacheRepository: cacheRepository. loader := version fetch. self assert: cacheRepository dictionary size = 7. #('GoferBar-lr.1' 'GoferBeau-dkh.53' 'GoferFoo-lr.1' 'GoferFoo-lr.4' 'MetacelloTestConfigurationOfIssue77B-dkh.1' 'MetacelloTestConfigurationOfIssue77C-dkh.1' 'MetacelloTestConfigurationOfIssue77D-dkh.1') do: [ :file | self assert: (cacheRepository includesVersionNamed: file) ]. files := #('MetacelloTestConfigurationOfIssue77B-dkh.1' 'MetacelloTestConfigurationOfIssue77D-dkh.1' 'MetacelloTestConfigurationOfIssue77C-dkh.1') asOrderedCollection. loader loadDirective packageDirectivesDo: [ :pkgDirective | | file | file := pkgDirective file. (MetacelloPlatform current string: file includesSubstring: 'Configuration') ifTrue: [ self assert: (files includes: file) ] ifFalse: [ self assert: (files indexOf: file) = 1 ]. files remove: file ifAbsent: [ self assert: false ] ]. self assert: files isEmpty! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue40Baseline | project version wc1 wc2 | project := self project. version := project version: 'Issue40-baseline'. version load. wc1 := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc1 repositoryGroup repositories size = 2. self assert: (wc1 repositoryGroup includes: (Smalltalk at: #'Metacello_Gofer_Test_Repository')). self assert: (wc1 ancestry ancestors first name = 'GoferFoo-lr.4'). wc2 := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc2 ancestry ancestors first name = 'GoferBar-dkh.25'). self assert: wc2 repositoryGroup repositories size = 2. self assert: (wc2 repositoryGroup includes: (Smalltalk at: #'Metacello_Configuration_Test_Alternate_Repository')). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 07/19/2013 22:52'! testIssue49PartialLoadA | project version wc | project := self project. version := project version: '4.0'. version load: '1'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.1'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue49PartialLoadB | project version wc | project := self project. version := project version: '5.0'. version load: '2'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). self should: [ (GoferPackageReference name: 'GoferBar') workingCopy ] raise: Error. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 07/19/2013 22:52'! testIssue49PartialLoadC | project version wc | project := self project. version := project version: '4.0'. version load: '1'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.1'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. version := project version: '5.0'. version load: '2'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.2'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue49PartialLoadD | project version wc | project := self project. version := project version: '5.0'. version load: '2'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). self should: [ (GoferPackageReference name: 'GoferBar') workingCopy ] raise: Error. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. version := project version: '4.0'. version load: '1'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue49PartialLoadE | project version wc | project := self project. version := project version: '5.0'. version load: '2'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). self should: [ (GoferPackageReference name: 'GoferBar') workingCopy ] raise: Error. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. version := project version: '4.0'. version load: '3'. "should get error, since there is no GoferBeau package in 5.0" ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue49PartialLoadF | project version wc | project := self project. version := project version: '5.0'. version load: '4'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. version := project version: '4.0'. version load: '4'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.2'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.34'). self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 07/19/2013 22:52'! testIssue49PartialLoadG | project version wc | project := self project. version := project version: '4.0'. version load: '4'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.1'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.32'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. version := project version: '5.0'. version load: '4'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFoo-lr.2'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue59PackageSpecRepositoryOverrides "test for Issue 59: http://code.google.com/p/metacello/issues/detail?id=59" | project version wc repoSpec pkg loader | project := self project. version := project version: '1.0'. repoSpec := version spec repositorySpecs first. pkg := version packageNamed: 'GoferBar'. pkg repository: repoSpec. loader := pkg loader. loader loaderPolicy: (MetacelloLoaderPolicy overrideRepositories: (OrderedCollection with: MCDictionaryRepository new)). self should: [ pkg load ] raise: Error. loader loaderPolicy: (MetacelloLoaderPolicy overrideRepositories: (OrderedCollection with: (Smalltalk at: #'Metacello_Gofer_Test_Repository'))). pkg load. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue77 "The following project structure is loaded: project A 1.0 project B 1.0 project C 1.2 project D 1.0 [without a direct load reference for C, but specifying version 1.3 of C] project C 1.3 and with the bug, project C version 1.3 is _not_ loaded. " | project version loader wc | project := self project. version := project version: 'Issue77-baseline'. loader := version load. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.53'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). self should: [ (GoferPackageReference name: 'GeauxBeau') workingCopy ] raise: Error! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue95 | project version wc | project := self project. version := project version: 'Issue95-baseline'. gofer version: 'GoferFaux-tg.30'; version: 'GeauxBeau-dkh.55'; version: 'GeauxBar.branch-lr.2'; load. version load. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.30'). wc := (GoferPackageReference name: 'GeauxBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GeauxBeau-dkh.55'). wc := (GoferPackageReference name: 'GeauxBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GeauxBar.branch-lr.2'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMczFileExplicitLoad "Older files will be loaded if directly referenced from the project being loaded (explicit version request)" | project version wc | project := self project. version := project version: '6.2'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.35'). version := project version: '6.3'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.53'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. "explicit load older mcz file IS loaded ... see testMczFileImplicitLoad for alternate case" self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.31'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMczFileImplicitLoad "when loading a project reference, do not load mcz files that are older than the currently loaded mcz files (implicit version request)" | project version wc | project := self project. version := project version: '6.0'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.35'). version := project version: '6.1'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.53'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. "implicit load older mcz file NOT loaded ... see testMczFileExplicitLoad for alternate case" self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.35'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMooseBaselineLoad | project version wc test | project := self project. version := project version: '1.0-Moose'. version load. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.35'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedLoad1 | project version loader wc configurationName | configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer repository: self configurationRepository. gofer package: configurationName. gofer load. MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level3_2' #'level2_1'). project := (Smalltalk at: configurationName asSymbol) project. version := project version: '1.3.3-baseline'. loader := version load. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). wc := (GoferPackageReference name: 'GeauxBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GeauxBar.branch-lr.2'). wc := (GoferPackageReference name: 'GeauxBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GeauxBeau-dkh.55'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.1'). self should: [ (GoferPackageReference name: 'GoferFaux') workingCopy ] raise: Error! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedLoad2 | project version loader wc configurationName | configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer repository: self configurationRepository. gofer package: configurationName. gofer load. MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level3_2' #'level2_1'). project := (Smalltalk at: configurationName asSymbol) project. version := project version: '1.3.2-baseline'. loader := version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.25'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedLoad3 | project version loader wc configurationName | configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer repository: self configurationRepository. gofer package: configurationName. gofer load. MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level2_1' #'level3_2' ). project := (Smalltalk at: configurationName asSymbol) project. version := project version: '1.3.2-baseline'. loader := version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.55'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'cache repository' stamp: 'ChristopheDemarey 5/31/2013 13:55'! testPackageSpecCacheRepository | project version loader cacheRepository files | project := self project. version := project version: 'Issue77-baseline'. version cacheRepository: (cacheRepository := MCDictionaryRepository new). loader := version fetch. self assert: cacheRepository dictionary size = 7. #('GoferBar-lr.1' 'GoferBeau-dkh.53' 'GoferFoo-lr.1' 'GoferFoo-lr.4' 'MetacelloTestConfigurationOfIssue77B-dkh.1' 'MetacelloTestConfigurationOfIssue77C-dkh.1' 'MetacelloTestConfigurationOfIssue77D-dkh.1') do: [ :file | self assert: (cacheRepository includesVersionNamed: file) ]. files := #('GoferFoo-lr.1' 'GoferBeau-dkh.53' 'GoferFoo-lr.4' 'GoferBar-lr.1') asOrderedCollection. loader loadDirective packageDirectivesDo: [ :pkgDirective | | file | file := pkgDirective file. (MetacelloPlatform current string: file includesSubstring: 'Configuration') ifTrue: [ "ignore" ] ifFalse: [ self assert: (files indexOf: file) = 1. files remove: file ifAbsent: [ self assert: false ] ] ]. self assert: files isEmpty! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectFetch | project version wc files loader | project := self project. version := project version: '3.0'. loader := version fetch. files := #('MetacelloTestConfigurationOfFoo-dkh.1' 'GoferFoo-lr.1' 'GoferBar.branch-lr.1' 'GoferFaux-tg.30' 'GoferBeau-dkh.53' ) asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | | file | file := pkgDirective file. self assert: (files indexOf: file) = 1. files remove: file ifAbsent: [ self assert: false ]]. loader loadDirective versionDirectivesDo: [:vrsnDirective | vrsnDirective loader ~~ nil ifTrue: [ | spec | spec := vrsnDirective spec. self assert: (spec isKindOf: MetacelloVersionSpec) ]]. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result') ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectLoad | project version wc | project := self project. version := project version: '3.0'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.1'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar.branch-lr.1'). wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.53'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.30'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result') ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPrePostLoad | project version | project := self project. version := project version: '3.1'. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: preLoadExecuted. self assert: postLoadExecuted. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectRecord | project version names loader | project := self project. version := project version: '3.0'. loader := version record. names := #('MetacelloTestConfigurationOfFoo' 'MetacelloTestConfigurationOfFoo' 'GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau') asOrderedCollection. loader loadDirective packageDirectivesDo: [ :pkgDirective | | name | name := pkgDirective packageName. self assert: (names indexOf: name) = 1. names remove: name ifAbsent: [ self assert: false ] ]. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result')! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositoryOverrides | project version wc | project := self project. version := project version: '1.0'. version repositoryOverrides: (OrderedCollection with: MCDictionaryRepository new). self should: [ version load ] raise: Error. version repositoryOverrides: (OrderedCollection with: (Smalltalk at: #'Metacello_Gofer_Test_Repository')). version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.1'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositoryOverridesFetch | project version loader names | project := self project. version := project version: '1.0'. version repositoryOverrides: (OrderedCollection with: MCDictionaryRepository new). self should: [ version fetch ] raise: Error. version repositoryOverrides: (OrderedCollection with: (Smalltalk at: #'Metacello_Gofer_Test_Repository')). loader := version fetch. names := #('GoferFoo-lr.1' 'GoferBar-jf.1' ) asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | | name | name := pkgDirective file. self assert: (names indexOf: name) = 1. names remove: name ifAbsent: [ self assert: false ]]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositoryOverridesRecord | project version loader names | project := self project. version := project version: '1.0'. version repositoryOverrides: (OrderedCollection with: MCDictionaryRepository new). self shouldnt: [ version record ] raise: Error. version repositoryOverrides: (OrderedCollection with: (Smalltalk at: #'Metacello_Gofer_Test_Repository')). loader := version record. names := #('GoferFoo' 'GoferBar' ) asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | | name | name := pkgDirective packageName. self assert: (names indexOf: name) = 1. names remove: name ifAbsent: [ self assert: false ]]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testSupplyingAnswerLoad | project version wc | project := self project. version := project version: '1.1'. self deny: postloadAnswer = 'postload answer'. version load. self assert: postloadAnswer = 'postload answer'. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.1'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionFetch | project version loader names | project := self project. version := project version: '1.0'. loader := version fetch. names := #('GoferFoo-lr.1' 'GoferBar-jf.1' ) asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | | name | name := pkgDirective file. self assert: (names indexOf: name) = 1. names remove: name ifAbsent: [ self assert: false ]]. loader loadDirective versionDirectivesDo: [:vrsnDirective | vrsnDirective loader ~~ nil ifTrue: [ | spec | spec := vrsnDirective spec. self assert: (spec isKindOf: MetacelloVersionSpec) ]]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionLoad | project version wc | project := self project. version := project version: '1.0'. version load. wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.1'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionRecord | project version loader names | project := self project. version := project version: '1.0'. loader := version record. names := #('GoferFoo' 'GoferBar' ) asOrderedCollection. loader loadDirective packageDirectivesDo: [:pkgDirective | | name | name := pkgDirective packageName. self assert: (names indexOf: name) = 1. names remove: name ifAbsent: [ self assert: false ]]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-jf.1'; yourself. ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version11: spec spec for: #common do: [ spec package: 'GoferFoo' with: [ spec file: 'GoferFoo-lr.1'; supplyingAnswers: #(#('postload' 'postload answer')); postLoadDoIt: #postloadSupplyingAnswers ]; package: 'GoferBar' with: 'GoferBar-jf.1'; yourself. ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version30: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: '1' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version31: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: '1' with: [ spec preLoadDoIt: #preloadExecute; postLoadDoIt: #postloadExecute; className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version40: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: '1' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; loads: #('1'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: '2' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; loads: #('2'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: '3' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; loads: #('GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec group: '4' with: #('1' '2') ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version50: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: '1' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '5.0'; loads: #('1'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: '2' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '5.0'; loads: #('2'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec group: '4' with: #('1' '2') ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version60: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFix'; versionString: '6.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version61: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFix'; versionString: '6.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version62: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.35'; yourself. ]. ! ! !MetacelloGoferBasedLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version63: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; package: 'GoferFaux' with: 'GoferFaux-tg.31'; yourself. ]. ! ! !MetacelloGoferFunctionalTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar'; package: 'GoferFaux'; yourself ]. ! ! !MetacelloGoferFunctionalTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec package: 'GoferFoo' with: [spec repository: 'dictionary://Metacello_Gofer_Test_Repository' ]; package: 'GoferBar' with: [spec repository: 'dictionary://Metacello_Gofer_Test_Repository' ]; package: 'GoferFaux' with: [spec repository: 'dictionary://Metacello_Gofer_Test_Repository' ]; yourself ]. ! ! !MetacelloGoferFunctionalTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! doSilently ^(#(#testCommitPackageSpec #testCommitPackageVersion #testPackagesNeedSaving #testIssue155) includes: testSelector asSymbol) not! ! !MetacelloGoferFunctionalTest methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! repositorySpec | project version | project := self project. version := project version: '1.0-baseline'. ^version spec repositorySpecs first. ! ! !MetacelloGoferFunctionalTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. MetacelloMonticelloResource reset. "testCommitPackageSpec modifies the repository resource"! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBasics | repoSpec repo | repoSpec := self repositorySpec. repo := repoSpec createRepository. self assert: repoSpec type = 'dictionary'. self assert: repo class == MCDictionaryRepository. ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCommitNewPackageSpec | repoSpec repo project packagesNeedSaving allVersionsSize packageName | project := self project. repoSpec := self repositorySpec. repo := repoSpec createRepository. allVersionsSize := repo allVersionInfos size. gofer repository: repo. gofer package: 'GoferFoo'; package: 'GoferBar'; metacelloLoad. "Create new package" packageName := 'GoferFaux'. PackageInfo registerPackageName: packageName. MCWorkingCopy forPackage: (MetacelloTestsMCPackage new name: packageName). (MCClassDefinition name: (packageName copyWithout: $-) asSymbol superclassName: #Object category: packageName asSymbol instVarNames: #() comment: '') createClass. self assert: (packagesNeedSaving := project packagesNeedSaving: '1.0-baseline') notEmpty. packagesNeedSaving do: [:assoc | | gof | gof := Gofer new. gof disablePackageCache. gof repository: assoc value. gof package: assoc key name. gof commit: 'testing' ]. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCommitPackageSpec | repoSpec repo project packagesNeedSaving allVersionsSize | project := self project. repoSpec := self repositorySpec. repo := repoSpec createRepository. allVersionsSize := repo allVersionInfos size. gofer repository: repo. gofer package: 'GoferFoo'; package: 'GoferBar'; metacelloLoad. (Smalltalk classNamed: #GoferBar) compile: 'foo'. self assert: (packagesNeedSaving := project packagesNeedSaving: '1.0-baseline') notEmpty. packagesNeedSaving do: [:assoc | | gof | gof := Gofer new. gof disablePackageCache. gof repository: assoc value. gof package: assoc key name. gof commit: 'testing' ]. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCommitPackageVersion | repoSpec repo project packagesNeedSaving allVersionsSize | project := self project. repoSpec := self repositorySpec. repo := repoSpec createRepository. allVersionsSize := repo allVersionInfos size. gofer repository: repo. gofer package: 'GoferFoo'; package: 'GoferBar'; metacelloLoad. (Smalltalk classNamed: #GoferBar) compile: 'foo'. self assert: (packagesNeedSaving := project packagesNeedSaving: '1.0') notEmpty. packagesNeedSaving do: [:assoc | | gof | gof := Gofer new. gof disablePackageCache. gof repository: assoc value. gof package: assoc key name. gof commit: 'testing' ]. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComparison | blk | blk := [:file1 :operator :file2 | | ref1 ref2 | ref1 := GoferResolvedReference name: file1. ref2 := GoferResolvedReference name: file2. ref1 compare: ref2 using: operator]. self assert: (blk value: 'GoferFaux-tg.34' value: #>= value: 'GoferFaux-tg.32'). self assert: (blk value: 'GoferFaux-tg.32' value: #<= value: 'GoferFaux-tg.34'). self assert: (blk value: 'GoferBar.branch-lr.2' value: #> value: 'GoferBar.branch-lr.1'). self deny: (blk value: 'GoferBar-lr.1' value: #> value: 'GoferBar.branch-lr.1'). self assert: (blk value: 'GoferBar-lr.1' value: #< value: 'GoferBar.branch-lr.1'). self deny: (blk value: 'GoferBar-lr.1' value: #= value: 'GoferBar.branch-lr.1'). self assert: (blk value: 'GoferBar.branch-lr.1' value: #> value: 'GoferBar-lr.1'). self deny: (blk value: 'GoferBar.branch-lr.1' value: #< value: 'GoferBar-lr.1'). self deny: (blk value: 'GoferBar.branch-lr.1' value: #= value: 'GoferBar-lr.1'). self assert: (blk value: 'GoferBar-lr.1' value: #> value: 'GoferBar-jf.1'). self deny: (blk value: 'GoferBar-lr.1' value: #< value: 'GoferBar-jf.1'). self deny: (blk value: 'GoferBar-lr.1' value: #= value: 'GoferBar-jf.1'). self assert: (blk value: 'Bootstrap.232-dkh.163' value: #< value: 'Bootstrap-dkh.178'). self deny: (blk value: 'Bootstrap.232-dkh.163' value: #> value: 'Bootstrap-dkh.178'). self deny: (blk value: 'Bootstrap.232-dkh.163' value: #= value: 'Bootstrap-dkh.178'). self assert: (blk value: 'Bootstrap.232-dkh.178' value: #> value: 'Bootstrap-dkh.163'). self deny: (blk value: 'Bootstrap.232-dkh.178' value: #< value: 'Bootstrap-dkh.163'). self deny: (blk value: 'Bootstrap.232-dkh.178' value: #= value: 'Bootstrap-dkh.163'). ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComparison01 | ref1 ref2 | ref1 := GoferResolvedReference name: 'Bootstrap.232-dkh.163'. ref2 := GoferResolvedReference name: 'Bootstrap-dkh.178'. self assert: (ref1 compare: ref2 using: #<). self assert: (ref2 compare: ref1 using: #>). self deny: (ref2 compare: ref1 using: #=). ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 7/5/2012 18:28'! testIssue155 "self debug: #testIssue155" | repoSpec repo project dirty | project := self class new project. repoSpec := self repositorySpec. repo := repoSpec createRepository. gofer repository: repo. gofer package: 'GoferFoo'; package: 'GoferBar'; load. self assert: (project packagesNeedSaving: '2.0-baseline') isEmpty. (Smalltalk classNamed: #GoferBar) compile: 'foo'. self assert: (dirty := project packagesNeedSaving: '2.0') notEmpty. dirty do: [:assoc | assoc key load]. self assert: (dirty := project packagesNeedSaving: '2.0') notEmpty. dirty do: [:assoc | [ assoc key load ] on: MetacelloSkipDirtyPackageLoad do: [:ex | ex resume: true ]]. self assert: (dirty := project packagesNeedSaving: '2.0') notEmpty. dirty do: [:assoc | [ [ assoc key load ] on: MetacelloSkipDirtyPackageLoad do: [:ex | ex resume: false ] ] on: Warning do: [:ex | ex resume: true ]]. self assert: (dirty := project packagesNeedSaving: '2.0') isEmpty. ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue178A | ref pkg | pkg := MetacelloGoferPackage name: 'ConfigurationOfNautilusRefactoring' packageFilename: 'ConfigurationOfNautilus'. ref := pkg resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 56! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue178B | ref pkg | pkg := MetacelloGoferPackage name: 'Glamour for Petit' packageFilename: 'ConfigurationOfGlamour'. ref := pkg resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref packageName = 'ConfigurationOfGlamour'. self assert: ref versionNumber = 56! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue40PackageResolution | ref pkgBar pkgFoo | pkgBar := GoferPackageReference name: 'GoferFoo'. ref := pkgBar resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 4. gofer repository: self alternateRepository. pkgBar := GoferPackageReference name: 'GoferBar'. ref := pkgBar resolveWith: gofer. self assert: ref repository == self alternateRepository. self assert: ref versionNumber = 25. self assert: ref author = 'dkh'. pkgFoo := GoferPackageReference name: 'GoferFoo'. ref := pkgFoo resolveWith: gofer. self assert: ref repository == self alternateRepository. self assert: ref versionNumber = 104. gofer package: 'GoferBar'; package: 'GoferFoo'; load. self assert: pkgBar workingCopy ancestry ancestors first name = 'GoferBar-dkh.25'. self assert: pkgFoo workingCopy ancestry ancestors first name = 'GoferFoo-dkh.104'.! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue40VersionResolution | ref pkgBar pkgFoo | pkgBar := GoferVersionReference name: 'GoferFoo-lr.2'. ref := pkgBar resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 2. gofer repository: self alternateRepository. pkgBar := GoferVersionReference name: 'GoferBar-jf.1'. ref := pkgBar resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 1. self assert: ref author = 'jf'. ref := (GoferVersionReference name: 'GoferBar-dkh.24') resolveWith: gofer. self assert: ref repository == self alternateRepository. self assert: ref versionNumber = 24. self assert: ref author = 'dkh'. pkgFoo := GoferVersionReference name: 'GoferFoo-dkh.75'. ref := pkgFoo resolveWith: gofer. self assert: ref repository == self alternateRepository. self assert: ref versionNumber = 75. gofer version: 'GoferBar-jf.1'; version: 'GoferFoo-dkh.75'; load. self assert: pkgBar workingCopy ancestry ancestors first name = 'GoferBar-jf.1'. self assert: (pkgBar workingCopy repositoryGroup includes: self monticelloRepository). self assert: pkgBar workingCopy repositoryGroup repositories size = 3. self assert: pkgFoo workingCopy ancestry ancestors first name = 'GoferFoo-dkh.75'. self assert: (pkgFoo workingCopy repositoryGroup includes: self alternateRepository). self assert: pkgFoo workingCopy repositoryGroup repositories size = 3. ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMoosePackageResolution | ref pkg | pkg := GoferPackageReference name: 'GoferFaux'. ref := pkg resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 35. pkg := MetacelloGoferPackage name: 'GoferFaux' packageFilename: 'GoferFaux-'. ref := pkg resolveWith: gofer. self assert: ref repository == self monticelloRepository. self assert: ref versionNumber = 35. pkg := GoferPackageReference name: 'GoferFaux-'. self should: [ pkg resolveWith: gofer ] raise: Error. pkg := GoferVersionReference name: 'GoferFaux-'. self should: [ pkg resolveWith: gofer ] raise: Error. ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageResolution | project version repo pkg ref | project := self project. version := project version: '1.0-baseline'. repo := version spec repositorySpecs first createRepository. gofer repository: repo. pkg := GoferPackageReference name: 'GoferFoo'. ref := pkg resolveWith: gofer. self assert: ref versionNumber = 4. pkg := GoferPackageReference name: 'GoferBar'. ref := pkg resolveWith: gofer. self assert: ref versionNumber = 1. self assert: ref author = 'lr'. ! ! !MetacelloGoferFunctionalTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagesNeedSaving | repoSpec repo project | project := self class new project. repoSpec := self repositorySpec. repo := repoSpec createRepository. gofer repository: repo. gofer package: 'GoferFoo'; package: 'GoferBar'; load. self assert: (project packagesNeedSaving: '1.0-baseline') isEmpty. (Smalltalk classNamed: #GoferBar) compile: 'foo'. self assert: (project packagesNeedSaving: '1.0-baseline') notEmpty. ! ! !MetacelloGoferFunctionalTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-jf.1'; package: 'Faux-Smalltalk' with: 'Faux-Smalltalk-tg.32'; yourself. ]. ! ! !MetacelloGoferFunctionalTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version20: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-jf.1'; package: 'Faux-Smalltalk' with: 'Faux-Smalltalk-tg.32'; yourself. ]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar'; package: 'GoferFaux'; yourself ]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaselineFetch | project version repo map pkgSpecs | project := self project. version := project version: '1.0-baseline'. repo := version loaderPolicy cacheRepository. self assert: repo allVersionInfos isEmpty. version fetch: 'default'. self deny: repo allVersionInfos isEmpty. map := Dictionary new. (Gofer new allResolvedIn: repo) do: [:resolvedRef | map at: resolvedRef packageName put: resolvedRef ]. pkgSpecs := version packages. self assert: map size = pkgSpecs size. pkgSpecs do: [:pkgSpec | map at: pkgSpec name ifAbsent: [ self assert: false ]]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaselineLoad | project version wc | project := self project. version := project version: '1.0-baseline'. version load: #('default'). wc := (GoferPackageReference name: 'GoferFoo') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFoo-lr.4'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-lr.1'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferFaux-tg.35'). ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testDualFetch | project version repo map pkgSpecs | project := self project. version := project version: '2.0'. repo := version loaderPolicy cacheRepository. self assert: repo allVersionInfos isEmpty. version fetch: 'default'. self deny: repo allVersionInfos isEmpty. version := project version: '1.0-baseline'. version fetch: #('default'). self deny: repo allVersionInfos isEmpty. map := Dictionary new. (Gofer new allResolvedIn: repo) do: [:resolvedRef | map at: resolvedRef packageName put: resolvedRef ]. pkgSpecs := version packages. self assert: map size = pkgSpecs size. pkgSpecs do: [:pkgSpec | map at: pkgSpec name ifAbsent: [ self assert: false ]]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10Fetch | project version repo map pkgSpecs | project := self project. version := project version: '1.0'. repo := version loaderPolicy cacheRepository. self assert: repo allVersionInfos isEmpty. version fetch: #('default'). self deny: repo allVersionInfos isEmpty. map := Dictionary new. (Gofer new allResolvedIn: repo) do: [:resolvedRef | map at: resolvedRef name put: resolvedRef ]. pkgSpecs := version packages. self assert: map size = pkgSpecs size. pkgSpecs do: [:pkgSpec | map at: pkgSpec file ifAbsent: [ self assert: false ]]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-jf.1'; package: 'GoferFaux' with: 'GoferFaux-tg.32'; yourself. ]. ! ! !MetacelloMCCachingLoaderTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version20: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.35'; yourself. ]. ! ! !MetacelloMCSpecLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar'; package: 'GoferFaux'; yourself ]. ! ! !MetacelloMCSpecLoaderTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec repository: 'dictionary://Metacello_Configuration_Test_Alternate_Repository'. spec package: 'GoferFoo'; package: 'GoferBar'; yourself ]. ! ! !MetacelloMCSpecLoaderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! doSilently ^(#(#testPackageSave ) includes: testSelector asSymbol) not! ! !MetacelloMCSpecLoaderTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. MetacelloMonticelloResource reset. "testCommitPackageSpec modifies the repository resource"! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCopySpec | project version loader repo fakePackage | project := self project. version := project version: '1.0-baseline'. loader := version spec loader. repo := MCDictionaryRepository new. self assert: repo allVersionInfos size = 0. loader copySpec: (version packageNamed: 'GoferFoo') from: version spec repositorySpecs to: repo. self assert: repo allVersionInfos size = 1. "error condition" fakePackage := version packageNamed: 'GoferFoo'. fakePackage name: 'MetacelloTestConfigurationOfFoo'. self assert: (loader copySpec: fakePackage from: version spec repositorySpecs to: repo) == nil ! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testGoferCommit | project version repoSpec repo allVersionsSize pkg | project := self project. version := project version: '1.0'. repoSpec := version spec repositorySpecs first. repo := repoSpec createRepository. allVersionsSize := repo allVersionInfos size. version load. (Smalltalk classNamed: #GoferBar) compile: 'foo'. pkg := version packageNamed: 'GoferBar'. pkg repository: repoSpec. pkg goferCommitPackage: 'commit message'. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testLatestPackage | project version loader latestFile | project := self project. version := project version: '1.0-baseline'. loader := version spec loader. latestFile := loader latestPackage: 'GoferFoo' fromRepository: version spec repositorySpecs. self assert: latestFile = 'GoferFoo-lr.4'. latestFile := loader latestPackage: 'GoferBar' fromRepository: version spec repositorySpecs. self assert: latestFile = 'GoferBar-lr.1'. latestFile := loader latestPackage: 'GoferFaux' fromRepository: version spec repositorySpecs. self assert: latestFile = 'GoferFaux-tg.35'. "error condition" latestFile := loader latestPackage: 'MetacelloTestConfigurationOfFoo' fromRepository: version spec repositorySpecs. self assert: latestFile == nil. ! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageSave | project version repoSpec repo allVersionsSize pkg | project := self project. version := project version: '1.0'. repoSpec := version spec repositorySpecs first. repo := repoSpec createRepository. allVersionsSize := repo allVersionInfos size. version load. (Smalltalk classNamed: #GoferBar) compile: 'foo'. pkg := version packageNamed: 'GoferBar'. pkg repository: repoSpec. [ pkg savePackage ] on: MCVersionNameAndMessageRequest do: [ :notifcation | notifcation resume: (Array with: notifcation suggestedName with: 'xxx') ]. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageSpecLoad | project version repoSpec pkg wc | project := self project. version := project version: '1.0'. repoSpec := version spec repositorySpecs first. pkg := version packageNamed: 'GoferBar'. pkg repository: repoSpec. pkg load. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBar-jf.1'). ! ! !MetacelloMCSpecLoaderTest methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositoryFor | project version loader pkgSpec repo1 repo2 | project := self project. version := project version: '2.0-baseline'. loader := version spec loader. pkgSpec := version packageNamed: 'GoferBar'. repo1 := self monticelloRepository. repo2 := self alternateRepository. pkgSpec file: 'GoferBar.branch-lr.1'. self assert: (loader repositoryFor: pkgSpec from: version spec repositorySpecs) == repo1. pkgSpec file: 'GoferBar-dkh.25'. self assert: (loader repositoryFor: pkgSpec from: version spec repositorySpecs) == repo2. "error condition" pkgSpec file: 'MetacelloTestConfigurationOfFoo-dkh.1'. self assert: (loader repositoryFor: pkgSpec from: version spec repositorySpecs) == nil. ! ! !MetacelloMCSpecLoaderTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec spec for: #common do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-jf.1'; package: 'GoferFaux' with: 'GoferFaux-tg.32'; yourself. ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec blessing: #baseline. spec project: 'Symbolic' with: [ spec className: 'MetacelloTestConfigurationOfSymbolic'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! bleedingEdge: spec spec for: #'platformVersion1.x' version: '2.0-baseline'. ! ! !MetacelloSymbolicVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := self configurationRepository. self tempRepositories add: repo. gofer repository: repo! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! stableVersion: spec spec for: #'platformVersion1.x' version: '1.1'. ! ! !MetacelloSymbolicVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. MetacelloConfigurationResource projectAttributes: nil! ! !MetacelloSymbolicVersionTest methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. (self hasPackage: 'MetacelloTestConfigurationOfSymbolic') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfSymbolic' ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testBasicStableVersion | project version wc | project := self projectWith: #(#'platformVersion1.x'). version := project version: #stable. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.25'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.31'.! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testBleedingEdgeMethod | project version | project := self projectWith: #(#'platformVersion1.x'). self assert: (project version: #bleedingEdge) = project bleedingEdge. ! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersion | project version wc | project := self project. version := project version: '2.0'. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.53'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.32'. ! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersion10x | project version wc | MetacelloConfigurationResource projectAttributes: #(#'platformVersion1.x' #'platformVersion1.0.x' ). project := self project. version := project version: '2.0'. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.25'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.31'! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersion11x | project version wc | MetacelloConfigurationResource projectAttributes: #(#'platformVersion1.x' #'platformVersion1.1.x' ). project := self project. version := project version: '2.0'. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.53'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.32'! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersion12x | project version wc | MetacelloConfigurationResource projectAttributes: #(#'platformVersion1.x' #'platformVersion1.2.x' ). project := self project. version := project version: '2.0'. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.54'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.33'! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersion1x | project version wc | MetacelloConfigurationResource projectAttributes: #(#'platformVersion1.x'). project := self project. version := project version: '2.0'. version load. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: (wc ancestry ancestors first name = 'GoferBeau-dkh.15'). wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'! ! !MetacelloSymbolicVersionTest methodsFor: 'tests stable' stamp: 'dkh 6/12/2012 15:41:23.319'! testStableVersionMethod | project version | project := self projectWith: #(#'platformVersion1.x'). self assert: (project version: #stable) = project stableVersion. ! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.15'; package: 'GoferFaux' with:'GoferFaux-tg.30'; yourself ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version11: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.25'; package: 'GoferFaux' with:'GoferFaux-tg.31'; yourself ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version12: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.53'; package: 'GoferFaux' with:'GoferFaux-tg.32'; yourself ]. ! ! !MetacelloSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version20: spec spec for: #common do: [ spec project: 'Symbolic' with: #stable ]. ! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString | cl original modified constructor pragma | constructor := MetacelloToolBoxConstructor new. constructor configuration: (cl := Smalltalk at: configurationName asSymbol) new. pragma := (constructor extractAllVersionPragmas at: versionString) at: 1. original := (cl sourceCodeAt: pragma selector) asString. [ (MetacelloToolBox configurationNamed: configurationName) modifyVersionMethodForVersion: versionString; commitMethod ] on: MetacelloCannotUpdateReleasedVersionError do: [ :ex | ex resume ]. modified := (cl sourceCodeAt: pragma selector) asString. self assert: original = modified. ! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString | original modified | original := ((Smalltalk at: configurationName asSymbol) project version: versionString) versionSpec printString. [ (MetacelloToolBox configurationNamed: configurationName) modifyVersionMethodForVersion: versionString; commitMethod ] on: MetacelloCannotUpdateReleasedVersionError do: [ :ex | ex resume ]. modified := ((Smalltalk at: configurationName asSymbol) project version: versionString) versionSpec printString. self assert: original = modified. ! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! atomicConfigurationRepository ^MetacelloAtomicConfigurationResource current monticelloRepository! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationNameList ^ #( 'MetacelloTestConfigurationOfIssue77B' 'MetacelloTestConfigurationOfIssue77C' 'MetacelloTestConfigurationOfIssue77D' 'MetacelloTestConfigurationOfAtomicFan' 'MetacelloTestConfigurationOfAtomicFoo' 'MetacelloTestConfigurationOfFan' 'MetacelloTestConfigurationOfFeaux' 'MetacelloTestConfigurationOfFix' 'MetacelloTestConfigurationOfFoo' 'MetacelloTestConfigurationOfFum' 'MetacelloTestConfigurationOfLinearFoo' 'MetacelloTestConfigurationOfProjectFee' 'MetacelloTestConfigurationOfProjectFie' 'MetacelloTestConfigurationOfProjectFoe' 'MetacelloTestConfigurationOfProjectInfinite' 'MetacelloTestConfigurationOfProjectIssue86' 'MetacelloTestConfigurationOfProjectIssue95' 'MetacelloTestConfigurationOfProjectLoop' 'MetacelloTestConfigurationOfUmbrellaA' 'MetacelloTestConfigurationOfUmbrellaB')! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! fullConfigurationNameList ^self configurationNameList, #('MetacelloTestConfigurationOfProjectToolBox')! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := MetacelloAtomicConfigurationResource current monticelloRepository. self tempRepositories add: repo. Smalltalk at: #'Metacello_Atomic_Configuration_Test_Repository' put: repo.! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown | aGofer | super tearDown. Smalltalk removeKey: #'Metacello_Atomic_Configuration_Test_Repository' ifAbsent: []. MetacelloConfigurationResource projectAttributes: nil! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance super tearDownPackages: aGoferInstance. self fullConfigurationNameList do: [ :configurationName | (self hasPackage: configurationName) ifTrue: [ aGoferInstance package: configurationName ] ]! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testConfigurationResources gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. self configurationNameList do: [ :configurationName | gofer package: configurationName ]. gofer load. self configurationNameList do: [ :configurationName | ((Smalltalk at: configurationName asSymbol) new project versions collect: [ :each | each versionString ]) do: [ :versionString | self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString ] ]! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox | configurationName rejects | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. rejects := #('1.0.4-baseline' '1.0.6-baseline' '1.0.7-baseline' '1.1.0-baseline' '1.1.4-baseline' '1.1.6-baseline' '1.2.8-baseline' '1.2.9-baseline' ). (((Smalltalk at: configurationName asSymbol) new project versions collect: [ :each | each versionString ]) reject: [ :each | rejects includes: each ]) do: [ :versionString | self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString ]! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox104Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.0.4-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString. ! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox106Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.0.6-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox107Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.0.7-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox110Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.0-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox114Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.4-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox116Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.6-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox128Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.2.8-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBox129Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.2.9-baseline'. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxA | configurationName rejects | gofer repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. self assertVersionSpecFor: configurationName isEqualAfterModifyingVersion: '1.3.0-baseline'! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison | configurationName rejects | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. rejects := #('1.0.6-baseline' '1.1.1-baseline' '1.1.2-baseline' '1.1.3' '1.3.0-baseline' '1.3.1-baseline' '1.3.2-baseline' '1.3.3-baseline'). (((Smalltalk at: configurationName asSymbol) new project versions collect: [ :each | each versionString ]) reject: [ :each | rejects includes: each ]) do: [ :versionString | self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString ]! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison106Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.0.6-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison111Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.1-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison112Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.2-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison113 | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.1.3'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString. ! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison130Baseline | configurationName versionString | gofer repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.3.0-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison131Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.3.1-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison132Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.3.2-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectToolBoxSourceComparison133Baseline | configurationName versionString | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.3.3-baseline'. self assertMethodSourceFor: configurationName isEqualAfterModifyingVersion: versionString! ! !MetacelloToolBoxConstructorTestCase methodsFor: 'tests' stamp: 'dkh 9/8/2012 06:10'! testProjectToolBoxTraversal131Baseline | configurationName versionString expected toolbox attributes | gofer repository: self atomicConfigurationRepository; repository: self alternateRepository; repository: self configurationRepository. configurationName := 'MetacelloTestConfigurationOfProjectToolBox'. gofer package: configurationName. gofer load. versionString := '1.3.1-baseline'. attributes := #(#'level1_1' #'level2_2' #'level3_2' #'level2_1'). MetacelloConfigurationResource projectAttributes: attributes. toolbox := MetacelloToolBox new project: (Smalltalk at: configurationName asSymbol) project. expected := Dictionary new. expected at: #(#(#'level1_1') #(#'level2_1')) asMetacelloAttributePath put: 'spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ].'. expected at: #(#(#'level1_1') #(#'level2_2') #(#'level3_2')) asMetacelloAttributePath put: 'spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/7''. ].'. expected at: #(#(#'level1_1') #(#'level2_2')) asMetacelloAttributePath put: 'spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ].'. expected at: #'level1_1' asMetacelloAttributePath put: 'spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ].'. toolbox updateVersionMethodForVersion: versionString updateProjects: false updatePackages: false versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath ~~ #'common' ifTrue: [ | string | string := versionSpec printString. self assert: string = (expected at: attributeOrPath asMetacelloAttributePath) ]. false ]! ! !MCFileBasedRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 24764788! versionInfoFromVersionNamed: aString | versions | versions := self allVersionNames select: [ :each | each beginsWith: aString ]. versions isEmpty ifTrue: [ ^ nil ]. versions := versions asSortedCollection: [ :a :b | ([ (a copyAfterLast: $.) asNumber ] on: Error do: [:ex | ex return: 0 ]) <= ([ (b copyAfterLast: $.) asNumber ] on: Error do: [:ex | ex return: 0 ]) ]. ^ self versionInfoFromFileNamed: versions last , '.mcz' ! ! !MetacelloRepositoriesSpec methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26049397! add: aStringOrSpec aStringOrSpec addToMetacelloRepositories: self! ! !MetacelloRepositoriesSpec methodsFor: 'scripting' stamp: 'dkh 6/15/2012 13:40'! compareEqual: aMetacelloProjectSpec | repositorySpecs anotherRepositorySpecs | repositorySpecs := (self map values sort: [ :a :b | a description <= b description ]) collect: [ :each | each description ]. anotherRepositorySpecs := (aMetacelloProjectSpec map values sort: [ :a :b | a description <= b description ]) collect: [ :each | each description ]. ^ repositorySpecs = anotherRepositorySpecs! ! !MetacelloRepositoriesSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26051026! configMethodCascadeOn: aStream indent: indent | repositorySpecs | repositorySpecs := self map values sort: [:a :b | a description <= b description ]. repositorySpecs size = 1 ifTrue: [ repositorySpecs first configMethodCascadeOn: aStream lastCascade: true ] ifFalse: [ 1 to: repositorySpecs size do: [:index | | repositorySpec | aStream tab: indent + 1. (repositorySpecs at: index) configMethodCascadeOn: aStream lastCascade: index >= repositorySpecs size ]]! ! !MetacelloRepositoriesSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26051598! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec'; cr. self configMethodCascadeOn: aStream indent: indent! ! !MetacelloRepositoriesSpec methodsFor: 'scripting' stamp: 'dkh 07/16/2013 19:15'! hasNoLoadConflicts: aMetacelloProjectSpec | repositorySpecs anotherRepositorySpecs | repositorySpecs := self map values sort: [ :a :b | a description <= b description ]. anotherRepositorySpecs := aMetacelloProjectSpec map values sort: [ :a :b | a description <= b description ]. repositorySpecs size ~= anotherRepositorySpecs size ifTrue: [ ^ false ]. 1 to: repositorySpecs size do: [ :index | | repoSpec anotherRepoSpec | repoSpec := repositorySpecs at: index. anotherRepoSpec := anotherRepositorySpecs at: index. (repoSpec hasNoLoadConflicts: anotherRepoSpec) ifFalse: [ ^ false ] ]. ^ true! ! !MetacelloRepositoriesSpec methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26049852! merge: aRepositorySpec aRepositorySpec mergeIntoMetacelloRepositories: self! ! !MetacelloRepositoriesSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! metacelloRegistrationHash ^ ((self map values sort: [ :a :b | a description <= b description ]) collect: [ :each | each description ]) hash! ! !MetacelloRepositoriesSpec methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26050321! remove: aRepositorySpec aRepositorySpec removeFromMetacelloRepositories: self! ! !MetacelloRepositoriesSpec methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26050484! repository: aStringOrSpec aStringOrSpec addToMetacelloRepositories: self! ! !MetacelloRepositoriesSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! repository: anObject constructor: aVersionConstructor aVersionConstructor repositoryForRepositories: anObject! ! !MetacelloRepositoriesSpec methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26050643! repository: description username: username password: password | spec | spec := (self project repositorySpec) description: description; username: username; password: password; yourself. self addMember: (self addMember name: spec name; spec: spec; yourself)! ! !MetacelloRepositoriesSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! repository: aString username: username password: password constructor: aVersionConstructor aVersionConstructor repositoryForRepositories: aString username: username password: password! ! !MetacelloCannotUpdateReleasedVersionError methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25788728! isResumable "Determine whether an exception is resumable." ^ true! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! description "Return a textual description of the exception." ^ 'Could not resolve: ' , packageSpec name , ' [' , packageSpec file , ']' , ' in' , self repositoryString , (repositoryError == nil ifTrue: [ '' ] ifFalse: [ "report repository error to user here, since failure here is likely to be due to earlier repository error" ' ERROR: ' , repositoryError description printString ])! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! packageSpec ^ packageSpec! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! packageSpec: anObject packageSpec := anObject! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repositories ^ repositories! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repositories: anObject repositories := anObject! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repositoryError ^ repositoryError! ! !MetacelloPackageSpecResolutionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repositoryError: anObject repositoryError := anObject! ! !MetacelloPackageSpecResolutionError methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! repositoryString | repositoryString | repositoryString := ''. self repositories do: [ :repo | repositoryString := repositoryString , ' ' , repo description ]. ^ repositoryString! ! !MetacelloProjectSpecLoadConflict methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26047503! isResumable "Determine whether an exception is resumable." ^ true! ! !MetacelloProjectSpecLoadConflict methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! possibleVersions "not applicable to a Conflict error" self shouldNotImplement! ! !MetacelloProjectSpecLoadConflict methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionString "not applicable to a Conflict error" self shouldNotImplement! ! !MetacelloProjectSpecLoadError class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26048446! projectSpec: aMetacelloMCProjectSpec ^self new projectSpec: aMetacelloMCProjectSpec; yourself! ! !MetacelloProjectSpecLoadError methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! isResumable "Determine whether an exception is resumable." ^ false! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! possibleVersions ^ self versionDoesNotExistException possibleVersions! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26047841! projectSpec ^projectSpec! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26047966! projectSpec: aMetacelloMCProjectSpec projectSpec := aMetacelloMCProjectSpec! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionDoesNotExistException ^ versionDoesNotExistException! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionDoesNotExistException: anObject versionDoesNotExistException := anObject! ! !MetacelloProjectSpecLoadError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionString ^ self versionDoesNotExistException versionString! ! !MetacelloValidationFailure class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26219523! issues: anObject message: aString ^ self new issues: anObject; signal: aString! ! !MetacelloValidationFailure methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26219140! issues ^ issues! ! !MetacelloValidationFailure methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26219254! issues: anObject issues := anObject! ! !MetacelloSymbolicVersionDoesNotExistError methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26117837! description "Return a textual description of the exception." ^ 'The symbolic version ' , self versionString printString , ' is not defined in ' , self project label , ' for the current platform. Possible symbolic version values include: ' , self possibleVersions printString! ! !MetacelloSymbolicVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! possibleVersions ^ self project symbolicVersionSymbols! ! !MetacelloSymbolicVersionNotDefinedError methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26120362! description "Return a textual description of the exception." ^ 'The symbolic version ' , self versionString printString , ' is EXPLICITLY not defined in ' , self project label , ' for the current platform (i.e., symbolic version defined as #notDefined).'! ! !MetacelloVersionDefinitionError methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24'! description "Return a textual description of the exception." ^ 'The version ' , self versionString printString , ' is not defined in ' , self project label , ' for the current platform, because an exception occurred while creating the version:. ' , self exception description , '. Evaluate the following to see the error: ''[' , self project configuration class name asString , ' project ] on: MetacelloErrorInProjectConstructionNotification do: [:ex | ex resume: true ].''' , ' Possible versions include: ' , self possibleVersions printString! ! !MetacelloVersionDefinitionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! exception ^ exception! ! !MetacelloVersionDefinitionError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! exception: anObject exception := anObject! ! !MetacelloVersionDoesNotExistError class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26255079! project: aMetacelloProject versionString: aVersionString ^(self new) project: aMetacelloProject; versionString: aVersionString; yourself! ! !MetacelloVersionDoesNotExistError methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26254684! description "Return a textual description of the exception." ^ 'Version ' , self versionString printString , ' is not defined in ' , self project label , '. Possible versions include: ' , self possibleVersions printString! ! !MetacelloVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! possibleVersions ^ self project symbolicVersionSymbols , (self project versions collect: [ :each | each versionString ])! ! !MetacelloVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26254136! project ^ project! ! !MetacelloVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26254257! project: anObject project := anObject! ! !MetacelloVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26254398! versionString ^ versionString! ! !MetacelloVersionDoesNotExistError methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26254531! versionString: anObject versionString := anObject! ! !MetacelloExplicitLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25821057! explicitLoadUsing: aLoaderDirective gofer: aGofer aLoaderDirective loadLinearLoadDirective: self gofer: aGofer. ! ! !MetacelloExplicitLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25821259! explicitLoadWithPolicy: aLoadPolicy | gofer | gofer := MetacelloGofer new. gofer disablePackageCache. gofer repository: aLoadPolicy cacheRepository. self explicitLoadUsing: self gofer: gofer! ! !MetacelloExplicitLoadDirective methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25821760! isExplicit ^true! ! !MetacelloExplicitLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25821553! loadUsing: aLoaderDirective gofer: aGofer aLoaderDirective loadExplicitLoadDirective: self gofer: aGofer. ! ! !MetacelloExplicitLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25820934! title ^'explicit load'! ! !MetacelloMemberListSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25957164! mapCopy: aMemberSpec into: map | spec | spec := map at: aMemberSpec sourceName ifAbsent: [ ]. spec == nil ifTrue: [ ^ self error: 'Source spec named ' , aMemberSpec sourceName printString , ' not found' ] ifFalse: [ spec aboutToCopy. map at: aMemberSpec name put: (spec copy mergeSpec: aMemberSpec spec copy) ]! ! !MetacelloMCBaselineProject commentStamp: 'dkh 5/5/2012 08:47' prior: 71956684! The **MetacelloMCBaselineProject** is a wrapper for the **BaselineOf** version specification for file-based repositories. There is a single version in a **MetacelloMCBaselineProject**, named *'baseline'*. A typical **BaselineOf** is specification: ```Smalltalk baseline: spec spec package: 'External-Core'; package: 'External-Tests' with: [ spec requires: 'External-Core' ]; yourself. spec group: 'Core' with: #('External-Core'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-Tests'); yourself ``` The `` pragma marks the method containing the baseline specification.! !MetacelloMCBaselineProject class methodsFor: 'accessing' stamp: 'dkh 6/13/2012 13:51'! singletonVersionName ^ 'baseline'! ! !MetacelloMCBaselineProject class methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! versionConstructorClass ^ MetacelloBaselineConstructor! ! !MetacelloMCBaselineProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asBaselineProject ^ self! ! !MetacelloMCBaselineProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asConfigurationProject ^ MetacelloMCProject new! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! bleedingEdge ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 7/20/2012 12:12'! currentVersion ^ self version isSomethingLoaded ifTrue: [ self version ] ifFalse: [ nil ]! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! currentVersionAgainst: resolvedPackageAndProjectNames ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! development ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! hasVersion: versionString ^ versionString = 'baseline'! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! lastVersion ^ self version! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersion ^ self version! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersion: blessing ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersionMatching: versionPatternString ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersionMatching: versionPatternString excludedBlessings: excluded ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersionMatching: versionPatternString includedBlessings: included ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! latestVersionMatching: versionPatternString includedBlessings: included excludedBlessings: excludedBlessings ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool ^ aMetacelloScriptEngine getBaselineProjectUnconditionalLoad: aBool! ! !MetacelloMCBaselineProject methodsFor: 'as yet unclassified' stamp: 'dkh 7/2/2012 16:42'! setBaselineRepositoryDescription: aListOrRepositoryDescriptions "set #version repositories to < aListOrRepositoryDescriptions>. Should be the directory where the BaselineOf is located." aListOrRepositoryDescriptions do: [:desc | self version spec repository: desc]! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/13/2012 13:51'! singletonVersionName ^ self class singletonVersionName! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! stableVersion ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! symbolicVersionSymbols ^ nil! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 6/8/2012 14:04:22'! version ^ self version: self singletonVersionName! ! !MetacelloMCBaselineProject methodsFor: 'versions' stamp: 'dkh 05/15/2013 21:02'! versions ^ [ {(self version)} ] on: MetacelloVersionDoesNotExistError do: [ :ex | ^ #() ]! ! !MetacelloMCProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asBaselineProject ^ MetacelloMCBaselineProject new! ! !MetacelloMCProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asConfigurationProject ^ self! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22'! baselineOfProjectSpecClass ^ MetacelloMCBaselineOfProjectSpec! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22'! configurationOfProjectSpecClass ^ MetacelloMCConfigurationOfProjectSpec! ! !MetacelloMCProject methodsFor: 'repository creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25870497! createRepository: aRepositorySpec ^ MetacelloPlatform current createRepository: aRepositorySpec! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25870997! defaultLoaderClass ^MetacelloLoadingMCSpecLoader! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25866386! fetchProject "fetch the latest version of the configuration package" ^self fetchProject: MetacelloLoaderPolicy new! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25866601! fetchProject: aLoaderPolicy "fetch the latest version of the configuration package" | mcLoader | (mcLoader := self loader) == nil ifTrue: [ mcLoader := self project loaderClass on: nil ]. mcLoader loaderPolicy: aLoaderPolicy. mcLoader doingLoads: [ MCWorkingCopy managersForClass: self configuration class do: [:mgr | | pkg | pkg := self packageSpec. mgr repositoryGroup repositories do: [:repo | pkg repositories repository: (repo asRepositorySpecFor: self) ]. pkg name: mgr packageName. pkg fetchUsing: mcLoader. ^true ]]. ^true ! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25867260! goferBranch: branchName project: commitMessage | pkgSpec | pkgSpec := self projectPackage. pkgSpec file: pkgSpec name , '.' , branchName. ^ pkgSpec goferBranchPackage: branchName message: commitMessage! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25867589! goferCommitProject: commitMessage | pkgSpec | (pkgSpec := self projectPackage) == nil ifTrue: [ ^false ]. ^pkgSpec goferCommitPackage: commitMessage! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871130! packageSpec ^self packageSpecClass for: self! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871259! packageSpecClass ^MetacelloPackageSpec! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25867831! packagesNeedSaving: aVersionString "Answer a collection of associations (package -> repository) representing the packages reachable from this project that need to be saved" | packages | packages := Set new. (self version: aVersionString) spec packagesNeedSavingVisited: (Set with: self configuration class name asString) into: packages. ^packages! ! !MetacelloMCProject methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25872166! pragmaKeywords ^super pragmaKeywords, #(projectPackage:attribute: packages:attribute: repositories:attribute: )! ! !MetacelloMCProject methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool ^ aMetacelloScriptEngine getConfigurationProjectUnconditionalLoad: aBool! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25868290! projectPackage MCWorkingCopy managersForClass: self configuration class do: [:mgr | | pkgSpec repo | pkgSpec := self packageSpec name: mgr packageName; yourself. mgr ancestors notEmpty ifTrue: [ pkgSpec file: mgr ancestors first name ]. repo := mgr repositoryGroup repositories detect: [:each | each ~~ MCCacheRepository default ] ifNone: [ Transcript cr; show: 'Using cache repository for ', self label, ' project package'. MCCacheRepository default ]. pkgSpec repository: (repo asRepositorySpecFor: self). ^pkgSpec]. ^nil! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871391! projectSpecClass ^MetacelloMCProjectSpec! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871514! repositoriesSpec ^self repositoriesSpecClass for: self! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871651! repositoriesSpecClass ^MetacelloRepositoriesSpec! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871784! repositorySpec ^self repositorySpecClass for: self! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25871919! repositorySpecClass ^MetacelloRepositorySpec! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25868958! saveProject | pkgSpec | (pkgSpec := self projectPackage) == nil ifTrue: [ ^false ]. ^pkgSpec savePackage! ! !MetacelloMCProject methodsFor: 'as yet unclassified' stamp: 'dkh 7/2/2012 16:41'! setBaselineRepositoryDescription: aListOrRepositoryDescriptions "noop " ! ! !MetacelloMCProject methodsFor: 'repository updating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25870683! updatePackageRepositoriesFor: versionString | versionSpec | (versionSpec := (self version: versionString) versionSpec) packageSpecsInLoadOrder do: [:pkgSpec | pkgSpec updatePackageRepositoriesFor: versionSpec ]. ^true! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25869164! updateProject "load the latest version of the configuration package" "WARNING: don't forget to refresh your project instance after doing an #updateProject, otherwise your instance won't reflect the info in the freshly loaded configuration" ^self updateProject: MetacelloLoaderPolicy new! ! !MetacelloMCProject methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25869547! updateProject: aLoaderPolicy "load the latest version of the configuration package" "WARNING: don't forget to refresh your project instance after doing an #updateProject, otherwise your instance won't reflect the info in the freshly loaded configuration" | mcLoader | (mcLoader := self loader) == nil ifTrue: [ mcLoader := self project loaderClass on: nil ]. mcLoader loaderPolicy: aLoaderPolicy. mcLoader doingLoads: [ MCWorkingCopy managersForClass: self configuration class do: [ :mgr | | pkg ar | pkg := self packageSpec. mgr repositoryGroup repositories do: [ :repo | pkg repositories repository: (repo asRepositorySpecFor: self) ]. ar := mgr metacelloPackageNameWithBranch. pkg name: (ar at: 1). (ar at: 2) notEmpty ifTrue: [ pkg file: (ar at: 2) ]. pkg load. ^ true ] ]. ^ true! ! !MetacelloMCProject methodsFor: 'spec classes' stamp: 'dkh 6/8/2012 14:04:22' prior: 25872046! versionSpecClass ^MetacelloMCVersionSpec! ! !MetacelloValidationCriticalWarning methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26218284! isCriticalWarning ^true! ! !MetacelloValidationCriticalWarning methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26218154! label ^'Critical Warning'! ! !MetacelloTestsMCPackage methodsFor: 'accessing' stamp: 'dkh 6/17/2013 16:24:12'! packageInfo "Aiming for speeding up the running of the tests" ^ MetacelloTestsPackageSet named: name ! ! !MetacelloTestsMCPackage methodsFor: 'accessing' stamp: 'dkh 6/17/2013 16:41:23.319'! packageSet "Aiming for speeding up the running of the tests" ^ MetacelloTestsPackageSet named: name ! ! !MetacelloMCPartiallyLoadedStatus class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22'! new ^ self basicNew initialize! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25858296! aLoadedPackageIsCurrent ^ aLoadedPackageIsCurrent! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25858439! aLoadedPackageIsCurrent: aBoolean aLoadedPackageIsCurrent := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25858602! aLoadedPackageIsExact ^ aLoadedPackageIsExact! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25858741! aLoadedPackageIsExact: aBoolean aLoadedPackageIsExact := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25858900! aLoadedPackageIsNotCurrent ^ aLoadedPackageIsNotCurrent! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859049! aLoadedPackageIsNotCurrent: aBoolean aLoadedPackageIsNotCurrent := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859218! aLoadedProjectIsCurrent: aBoolean aLoadedProjectIsCurrent := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859381! aLoadedProjectIsExact ^ aLoadedProjectIsExact! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859520! aLoadedProjectIsExact: aBoolean aLoadedProjectIsExact := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859679! aLoadedProjectIsNotCurrent ^ aLoadedProjectIsNotCurrent! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859828! aLoadedProjectIsNotCurrent: aBoolean aLoadedProjectIsNotCurrent := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25859997! aPackageIsLoaded ^aPackageIsLoaded! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860125! aPackageIsLoaded: aBoolean aPackageIsLoaded := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860274! aPackageNotLoaded ^aPackageNotLoaded! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860404! aPackageNotLoaded: aBoolean aPackageNotLoaded := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860555! aProjectIsLoaded ^aProjectIsLoaded! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860683! aProjectIsLoaded: aBoolean aProjectIsLoaded := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860832! aProjectNotLoaded ^aProjectNotLoaded! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25860962! aProjectNotLoaded: aBoolean aProjectNotLoaded := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861113! abort ^ abort! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861220! abort: aBoolean abort := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'evaulation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861989! evaluateStatus: validStatusList ^self abort ifTrue: [ false ] ifFalse: [ (self hasNoProject or: [ self vrsnStatus isEmpty ]) ifTrue: [ true ] ifFalse: [ | valid | valid := true. vrsnStatus do: [ :status | (validStatusList includes: status) ifFalse: [ valid := false ] ]. valid ] ]! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861347! hasNoPackage ^ hasNoPackage! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861468! hasNoPackage: aBoolean hasNoPackage := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861609! hasNoProject ^ hasNoProject! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861730! hasNoProject: aBoolean hasNoProject := aBoolean! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'initialization' stamp: 'dkh 6/8/2012 14:04:22' prior: 25862428! initialize super initialize. hasNoPackage := hasNoProject := true. aProjectIsLoaded := aPackageIsLoaded := false. aLoadedProjectIsExact := aLoadedPackageIsExact := false. aLoadedProjectIsCurrent := aLoadedPackageIsCurrent := false. aLoadedProjectIsNotCurrent := aLoadedPackageIsNotCurrent := false. aProjectNotLoaded := aPackageNotLoaded := false. vrsnStatus := Set new. abort := false! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25862914! isAllLoadedToSpec: matchBlock "all projects and packages are loaded and match specification" (self evaluateStatus: #(#allLoadedToSpec)) ifTrue: [ ((hasNoPackage or: [ aPackageIsLoaded & aPackageNotLoaded not & aLoadedPackageIsExact & aLoadedPackageIsNotCurrent not & aLoadedPackageIsCurrent not ]) and: [ hasNoProject or: [ aProjectIsLoaded & aProjectNotLoaded not & aLoadedProjectIsExact & aLoadedProjectIsNotCurrent not & aLoadedProjectIsCurrent not ] ]) ifTrue: [ matchBlock value: #allLoadedToSpec ] ]! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25863578! isLoadedMatchConstraints: matchBlock "all loaded projects and packages match constraints (at least one package loaded)" | matchStatus | matchStatus := #loadedMatchConstraints. (self evaluateStatus: #(#allLoadedToSpec #loadedToSpec #loadedMatchConstraints)) ifTrue: [ aPackageIsLoaded & aProjectIsLoaded ifTrue: [ (aLoadedPackageIsExact | aLoadedPackageIsCurrent & aLoadedPackageIsNotCurrent not and: [ aLoadedProjectIsExact | aLoadedProjectIsCurrent & aLoadedProjectIsNotCurrent not ]) ifTrue: [ matchBlock value: matchStatus ] ] ifFalse: [ aPackageIsLoaded ifTrue: [ aLoadedPackageIsExact | aLoadedPackageIsCurrent & aLoadedPackageIsNotCurrent not ifTrue: [ matchBlock value: matchStatus ] ] ifFalse: [ hasNoPackage & (aLoadedProjectIsExact | aLoadedProjectIsCurrent) & aLoadedProjectIsNotCurrent not ifTrue: [ matchBlock value: matchStatus ] ] ] ]! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25864605! isLoadedToSpec: matchBlock "all loaded projects and packages match specifications (at least one package loaded)" | matchStatus | matchStatus := #loadedToSpec. (self evaluateStatus: #(#allLoadedToSpec #loadedToSpec)) ifTrue: [ aPackageIsLoaded & aProjectIsLoaded ifTrue: [ (aLoadedPackageIsExact & aLoadedPackageIsCurrent not & aLoadedPackageIsNotCurrent not and: [ aLoadedProjectIsExact & aLoadedProjectIsCurrent not & aLoadedProjectIsNotCurrent not ]) ifTrue: [ matchBlock value: matchStatus ] ] ifFalse: [ aPackageIsLoaded ifTrue: [ aLoadedPackageIsExact & aLoadedPackageIsCurrent not & aLoadedPackageIsNotCurrent not ifTrue: [ matchBlock value: matchStatus ] ] ifFalse: [ hasNoPackage & aLoadedProjectIsExact & aLoadedProjectIsCurrent not & aLoadedProjectIsNotCurrent not ifTrue: [ matchBlock value: matchStatus ] ] ] ]! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25865605! isSomethingLoaded: somethingLoadedBlock "at least one package loaded" (self evaluateStatus: #(#allLoadedToSpec #loadedToSpec #loadedMatchConstraints #somethingLoaded)) ifTrue: [ aPackageIsLoaded ifTrue: [ somethingLoadedBlock value: #somethingLoaded ] ]! ! !MetacelloMCPartiallyLoadedStatus methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25861871! vrsnStatus ^vrsnStatus! ! !MetacelloAddMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25771791! applyAdd: addBlock copy: copyBlock merge: mergeBlock remove: removeBlock addBlock value: self! ! !MetacelloAddMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25771968! applyToList: aListSpec aListSpec add: self! ! !MetacelloAddMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25771674! methodUpdateSelector ^#overrides:! ! !MetacelloPharoCommonPlatform commentStamp: '' prior: 71957437! MetacelloPharoPlatform contains all Pharo specific code to load Metacello.! !MetacelloPharo30Platform commentStamp: '' prior: 71957578! Class used to abstract specific code for the Pharo 3.0 platform. ! !MetacelloPharo30Platform class methodsFor: 'initialize-release' stamp: 'ChristopheDemarey 4/29/2013 14:22'! initialize self select ! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 14:17'! defaultDirectory "Get the image default directory" ^FileLocator imageDirectory asFileReference! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 15:14'! directoryFromPath: adirectoryPath relativeTo: anotherDirectoryPath "Get a handle on the following path: anotherDirectoryPath/adirectoryPath" ^ anotherDirectoryPath resolveString: adirectoryPath! ! !MetacelloPharo30Platform methodsFor: 'github support' stamp: 'ChristopheDemarey 9/19/2013 11:02'! downloadFile: url to: outputFileName "download a Zip file from into " outputFileName asFileReference ensureDelete. ZnClient new url: url; downloadTo: outputFileName. ^ ZipArchive new readFrom: outputFileName asFileReference! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 7/22/2013 11:20'! ensureDirectoryExists: aDirectoryHandle "Ensure the directory exists." ^ aDirectoryHandle ensureCreateDirectory ; yourself! ! !MetacelloPharo30Platform methodsFor: 'github support' stamp: 'ChristopheDemarey 9/19/2013 10:35'! extractRepositoryFrom: zipFile to: directory "unzip into " ZipArchive new readFrom: zipFile; extractAllTo: directory asFileReference.! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 15:58'! fileDirectoryClass ^FileSystem! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/14/2013 17:44'! fileFromPath: aFileName relativeTo: aDirectoryPath "Get a handle on the following path: anotherDirectoryPath/aFileName" ^ aDirectoryPath / aFileName! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 13:16'! fileHandleOn: aPath "Get an handle on a file." ^ aPath asFileReference! ! !MetacelloPharo30Platform methodsFor: 'monticello' stamp: 'ChristopheDemarey 9/12/2013 10:28'! newVersionForWorkingCopy: aWorkingCopy ^aWorkingCopy newVersionIn: aWorkingCopy repositoryGroup! ! !MetacelloPharo30Platform methodsFor: 'pharo 2.0 compat' stamp: 'dkh 5/8/2013 09:40'! packageInfoFor: aMCWorkingCopy "MCPackageManager>>packageInfo is deprecated in Pharo2.0" ^ aMCWorkingCopy packageSet! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/29/2013 18:16'! parentDirectoryOf: aFileHandler "Get the parent directory of this file." ^ aFileHandler parent! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/14/2013 17:55'! readStreamOn: aFileHandle do: aBlock "Get a read stream on the file handle and execute some actions on it." ^ aFileHandle readStreamDo: aBlock! ! !MetacelloPharo30Platform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/27/2013 17:43'! recursiveDelete: aDirectory "delete this directory and all children of it" ^ aDirectory deleteAll! ! !MetacelloPharo30Platform methodsFor: 'utilities' stamp: 'ChristopheDemarey 5/31/2013 13:02'! string: aString includesSubstring: aSubstring "abstract String>>includesSubstring: to have the same message on all supported platforms." ^aString includesSubstring: aSubstring! ! !MetacelloPharo30Platform methodsFor: 'system' stamp: 'ChristopheDemarey 5/27/2013 16:18'! suspendSystemUpdateEventsDuring: aBlock "Wraps call to the system evetn manager to tell it that we want to suspend events during execution of aBlock" "From Pharo2, we cannot suspend system events since missing events brak the image (rpackage at least should be notified." "SystemAnnouncer uniqueInstance suspendAllWhile: aBlock" ^ aBlock value ! ! !MetacelloPharoCommonPlatform methodsFor: 'utilities' stamp: 'ChristopheDemarey 4/30/2013 09:23'! authorName ^Author fullName! ! !MetacelloPharoCommonPlatform methodsFor: 'utilities' stamp: 'ChristopheDemarey 4/30/2013 09:23'! authorName: aString Author fullName: aString! ! !MetacelloPharoCommonPlatform methodsFor: 'notification' stamp: 'ChristopheDemarey 4/30/2013 09:24'! collection: aCollection do: aBlock displaying: aString self bypassProgressBars ifTrue: [ ^super collection: aCollection do: aBlock displaying: aString ]. aCollection do: aBlock displayingProgress: aString! ! !MetacelloPharoCommonPlatform methodsFor: 'reflection' stamp: 'ChristopheDemarey 4/30/2013 09:24'! copyClass: oldClass as: newName inCategory: newCategoryName | copysName class newDefinition | copysName := newName asSymbol. copysName = oldClass name ifTrue: [ ^ oldClass ]. (Smalltalk includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := oldClass definition copyReplaceAll: '#' , oldClass name asString with: '#' , copysName asString printString. newDefinition := newDefinition copyReplaceAll: 'category: ' , (SystemOrganization categoryOfElement: oldClass name) asString printString with: 'category: ' , newCategoryName printString. class := Compiler evaluate: newDefinition logged: true. class class instanceVariableNames: oldClass class instanceVariablesString. class copyAllCategoriesFrom: oldClass. class class copyAllCategoriesFrom: oldClass class. class category: newCategoryName. ^ class! ! !MetacelloPharoCommonPlatform methodsFor: 'repository creation' stamp: 'ChristopheDemarey 4/30/2013 09:24'! createRepository: aRepositorySpec | type | type := aRepositorySpec type. type = 'ftp' ifTrue: [ | description headerSize index host directory | description := aRepositorySpec description. headerSize := 'ftp://' size. index := description indexOf: $/ startingAt: headerSize + 1. host := description copyFrom: headerSize + 1 to: index - 1. directory := description copyFrom: index + 1 to: description size. ^ MCFtpRepository host: host directory: directory user: aRepositorySpec username password: aRepositorySpec password]. ^ super createRepository: aRepositorySpec! ! !MetacelloPharoCommonPlatform methodsFor: 'attributes' stamp: 'ChristopheDemarey 4/30/2013 09:24'! defaultPlatformAttributes | attributes versionString | ((Smalltalk respondsTo: #image) and: [ Smalltalk image respondsTo: #metacelloPlatformAttributes ]) ifTrue: [ ^ Smalltalk image metacelloPlatformAttributes ]. attributes := OrderedCollection with: #squeakCommon with: #pharo. Smalltalk at: #SystemVersion ifPresent: [ :cl | versionString := cl current version. (((versionString beginsWith: 'Pharo-1') or: [ versionString beginsWith: 'PharoCore1' ]) or: [ versionString beginsWith: 'Pharo1' ]) ifTrue: [ attributes add: #'pharo1.x'. ((versionString beginsWith: 'Pharo-1.0') or: [ versionString beginsWith: 'PharoCore1.0' ]) ifTrue: [ attributes add: #'pharo1.0.x' ] ifFalse: [ ((versionString beginsWith: 'Pharo-1.1') or: [ versionString beginsWith: 'Pharo1.1' ]) ifTrue: [ attributes add: #'pharo1.1.x' ] ifFalse: [ ((versionString beginsWith: 'Pharo-1.2') or: [ versionString beginsWith: 'Pharo1.2' ]) ifTrue: [ attributes add: #'pharo1.2.x' ] ifFalse: [ (versionString beginsWith: 'Pharo1.3') ifTrue: [ attributes add: #'pharo1.3.x' ] ] ] ] ] ]. ^ attributes! ! !MetacelloPharoCommonPlatform methodsFor: 'github support' stamp: 'ChristopheDemarey 4/30/2013 09:24'! downloadFile: url to: outputFileName "download from into " | in out err proc archive zipfile | in := (' -L ' , url) readStream. out := FileStream forceNewFileNamed: outputFileName. err := FileStream forceNewFileNamed: '/tmp/curl.err'. proc := OSProcess thisOSProcess forkJob: '/usr/bin/curl' arguments: {'-L'. url} environment: nil descriptors: (Array with: nil with: out with: err). proc ifNil: [ OSProcess noAccessorAvailable ]. [ proc isRunning ] whileTrue: [ (Delay forMilliseconds: 100) wait ]. out close. err close. archive := ZipArchive new. zipfile := FileDirectory on: outputFileName. zipfile containingDirectory readOnlyFileNamed: zipfile localName do: [ :fileStream | archive readFrom: fileStream ]. ^ archive! ! !MetacelloPharoCommonPlatform methodsFor: 'github support' stamp: 'ChristopheDemarey 4/30/2013 09:25'! extractRepositoryFrom: zipFile to: directory "unzip into " | out err proc errorMessage | out := FileStream forceNewFileNamed: '/tmp/zip.out'. err := FileStream forceNewFileNamed: '/tmp/zip.err'. errorMessage := ''. [ proc := OSProcess thisOSProcess forkJob: '/usr/bin/unzip' arguments: {'-u'. zipFile. '-d'. directory} environment: nil descriptors: (Array with: nil with: out with: err). proc ifNil: [ self noAccessorAvailable ]. [ proc isRunning ] whileTrue: [ (Delay forMilliseconds: 100) wait ] ] ensure: [ out close. err close ]. FileStream fileNamed: '/tmp/zip.err' do: [ :fileStream | (errorMessage := fileStream contentsOfEntireFile) notEmpty ifTrue: [ self error: 'unzip failure: ' , errorMessage printString ] ]! ! !MetacelloPharoCommonPlatform methodsFor: 'repository creation' stamp: 'ChristopheDemarey 4/30/2013 09:25'! extractTypeFromDescription: description (description beginsWith: 'ftp://') ifTrue: [ ^'ftp' ]. ^super extractTypeFromDescription: description! ! !MetacelloPharoCommonPlatform methodsFor: 'utilities' stamp: 'ChristopheDemarey 4/30/2013 09:25'! timestamp ^Date today mmddyyyy, ' ', ((String streamContents: [:s | Time now print24: true on: s]) copyFrom: 1 to: 5)! ! !MetacelloPlatform class methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26014057! current Current ifNil: [Current := MetacelloPlatform new]. ^ Current! ! !MetacelloPlatform class methodsFor: 'initialize-release' stamp: 'dkh 05/05/2013 13:39' prior: 26014223! initialize "noop ... use #select" ! ! !MetacelloPlatform class methodsFor: 'initialize-release' stamp: 'dkh 05/05/2013 13:39'! select Current := self new! ! !MetacelloPlatform class methodsFor: 'initialize-release' stamp: 'dkh 05/05/2013 13:39'! unselect MetacelloPlatform current class = self ifTrue: [ Current := nil ]! ! !MetacelloPlatform methodsFor: 'utilities' stamp: 'dkh 6/5/2012 19:01:24' prior: 26013483! authorName Smalltalk at: #Author ifPresent: [:cl | ^cl perform: #initials ]. ^'no developer initials'! ! !MetacelloPlatform methodsFor: 'utilities' stamp: 'dkh 6/5/2012 19:01:24' prior: 26013664! authorName: aString "Primarily used for testing" self subclassResponsibility! ! !MetacelloPlatform methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26006773! bypassGoferLoadUpdateCategories bypassGoferLoadUpdateCategories == nil ifTrue: [ bypassGoferLoadUpdateCategories := false ]. ^ bypassGoferLoadUpdateCategories! ! !MetacelloPlatform methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26007022! bypassGoferLoadUpdateCategories: anObject bypassGoferLoadUpdateCategories := anObject! ! !MetacelloPlatform methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26007195! bypassProgressBars bypassProgressBars == nil ifTrue: [ bypassProgressBars := false ]. ^ bypassProgressBars! ! !MetacelloPlatform methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26007391! bypassProgressBars: anObject bypassProgressBars := anObject! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24' prior: 26008229! clearCurrentVersionCache MetacelloClearStackCacheNotification signal: #(#currentVersion #currentVersionAgainst: #currentVersionInfo)! ! !MetacelloPlatform methodsFor: 'notification' stamp: 'dkh 6/5/2012 19:01:24' prior: 26010787! collection: aCollection do: aBlock displaying: aString aCollection do: aBlock! ! !MetacelloPlatform methodsFor: 'user interaction' stamp: 'dkh 6/5/2012 19:01:24' prior: 26013146! confirm: aString ^(Smalltalk hasClassNamed: #UIManager) ifTrue: [ (Smalltalk classNamed: #UIManager) default perform: #confirm: with: aString ] ifFalse: [ "throw warning and answer true, if no way to announce" Warning signal: aString. true ]! ! !MetacelloPlatform methodsFor: 'reflection' stamp: 'dkh 6/5/2012 19:01:24' prior: 26011092! copyClass: oldClass as: newName inCategory: newCategoryName self subclassResponsibility! ! !MetacelloPlatform methodsFor: 'repository creation' stamp: 'ChristopheDemarey 4/29/2013 13:22' prior: 26011584! createRepository: aRepositorySpec | type | type := aRepositorySpec type. type = 'http' ifTrue: [ ^ MCHttpRepository location: aRepositorySpec description user: aRepositorySpec username password: aRepositorySpec password ]. type = 'directory' ifTrue: [ ^ MCDirectoryRepository new directory: (self fileHandleOn: aRepositorySpec description) ]. Smalltalk at: #'MCFileTreeRepository' ifPresent: [ :cl | type = 'filetree' ifTrue: [ | description headerSize | description := aRepositorySpec description. headerSize := 'filetree://' size. ^ cl new directory: (self fileHandleOn: (aRepositorySpec description copyFrom: headerSize + 1 to: description size)) ] ]. Smalltalk at: #'MCGitHubRepository' ifPresent: [ :cl | type = 'github' ifTrue: [ ^ cl location: aRepositorySpec description ] ]. type = 'dictionary' ifTrue: [ | description headerSize globalName | description := aRepositorySpec description. headerSize := 'dictionary://' size. globalName := (description copyFrom: headerSize + 1 to: description size) asSymbol. ^ Smalltalk at: globalName ifAbsent: [ Smalltalk at: globalName put: (MCDictionaryRepository new description: description; yourself) ] ]. ^ nil! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 14:17'! defaultDirectory "Get the image default directory" ^self fileDirectoryClass default! ! !MetacelloPlatform methodsFor: 'attributes' stamp: 'ChristopheDemarey 5/31/2013 14:04' prior: 26007530! defaultPlatformAttributes | versionString | Smalltalk at: #SystemVersion ifPresent: [:cl | versionString := cl current version. (versionString beginsWith: 'Pharo') ifTrue: [ ^ #(#squeakCommon #pharo ) ]. (versionString beginsWith: 'Squeak') ifTrue: [^ #(#squeakCommon #squeak )]. "see http://code.google.com/p/metacello/issues/detail?id=146" (self string: versionString includesSubstring: 'Pharo') ifTrue: [ ^ #(#squeakCommon #pharo ) ]. (versionString includesSubstring: 'Squeak') ifTrue: [^ #(#squeakCommon #squeak )]. self error: 'Unrecognized version of Squeak/Pharo: ', versionString ]. ^ #(#gemstone )! ! !MetacelloPlatform methodsFor: 'scripting' stamp: 'dkh 7/23/2012 11:05'! defaultRepositoryDescription ^ 'http://www.squeaksource.com/MetacelloRepository'! ! !MetacelloPlatform methodsFor: 'tests' stamp: 'dkh 6/5/2012 19:01:24' prior: 26012705! defaultTimeout "squeak compatability" ^60! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 15:11'! directoryFromPath: adirectoryPath relativeTo: anotherDirectoryPath "Get a handle on the following path: anotherDirectoryPath/adirectoryPath" ^ anotherDirectoryPath directoryNamed: adirectoryPath! ! !MetacelloPlatform methodsFor: 'notification' stamp: 'dkh 6/5/2012 19:01:24' prior: 26010957! do: aBlock displaying: aString aBlock value! ! !MetacelloPlatform methodsFor: 'as yet unclassified' stamp: 'dkh 07/01/2013 08:49'! downloadErrorFileNameFor: zipFileName ^ '/tmp/curl-' , (zipFileName select: [ :c | c isAlphaNumeric ]) , '.err'! ! !MetacelloPlatform methodsFor: 'github support' stamp: 'dkh 7/7/2012 07:37'! downloadFile: url to: outputFileName "download from into " self subclassResponsibility! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 15:17'! ensureDirectoryExists: aDirectoryHandle "Ensure the directory exists." ^ aDirectoryHandle assureExistence ; yourself! ! !MetacelloPlatform methodsFor: 'github support' stamp: 'dkh 7/7/2012 07:36'! extractRepositoryFrom: zipFile to: directory "unzip into " self subclassResponsibility! ! !MetacelloPlatform methodsFor: 'repository creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26012384! extractTypeFromDescription: description description == nil ifTrue: [ ^ nil ]. ((description beginsWith: '/') or: [ description second = $: ]) ifTrue: [ ^ 'directory' ]. (description beginsWith: 'dictionary://') ifTrue: [ ^ 'dictionary' ]. (description beginsWith: 'filetree://') ifTrue: [ ^ 'filetree' ]. (description beginsWith: 'github://') ifTrue: [ ^ 'github' ]. ^ 'http'! ! !MetacelloPlatform methodsFor: 'github support' stamp: 'dkh 07/09/2012 04:45'! fileDirectoryClass ^FileDirectory! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 4/29/2013 15:37'! fileHandleOn: aPath "Get an handle on a file." ^ self fileDirectoryClass on: aPath! ! !MetacelloPlatform methodsFor: 'reflection' stamp: 'dkh 6/5/2012 19:01:24' prior: 26011260! globalNamed: globalName ^Smalltalk at: globalName! ! !MetacelloPlatform methodsFor: 'reflection' stamp: 'dkh 6/5/2012 19:01:24' prior: 26011390! globalNamed: globalName ifAbsent: absentBlock ^Smalltalk at: globalName ifAbsent: absentBlock! ! !MetacelloPlatform methodsFor: 'monticello' stamp: 'dkh 09/23/2013 13:59'! newVersionForWorkingCopy: aWorkingCopy ^ aWorkingCopy newVersion! ! !MetacelloPlatform methodsFor: 'repository creation' stamp: 'dkh 05/08/2013 09:33'! packageInfoFor: aMCWorkingCopy ^ aMCWorkingCopy packageInfo ! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/29/2013 18:16'! parentDirectoryOf: aFileHandler "Get the parent directory of this file." ^ aFileHandler containingDirectory! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24'! primeStackCacheFor: cacheName doing: noArgBlock defaultDictionary: aDictionary self deprecated: 'use #primeStackCacheWith:doing:'. self useStackCacheDuring: [:dict | | cache | cache := dict at: cacheName ifAbsent: []. cache == nil ifTrue: [ cache := Dictionary new. dict at: cacheName put: cache ]. ^noArgBlock value ] defaultDictionary: aDictionary! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24' prior: 26008914! primeStackCacheWith: aDictionary doing: noArgBlock self useStackCacheDuring: [:dict | ^noArgBlock value ] defaultDictionary: aDictionary! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/14/2013 18:04'! readStreamOn: aFileHandle do: aBlock "Get a read stream on the file handle and execute some actions on it." | stream | stream := aFileHandle readStream. ^ [ aBlock value: stream ] ensure: [ stream close ]! ! !MetacelloPlatform methodsFor: 'file system' stamp: 'ChristopheDemarey 5/27/2013 17:42'! recursiveDelete: aDirectory "delete this directory and all children of it" ^ aDirectory recursiveDelete! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24' prior: 26009133! stackCacheFor: cacheName at: key doing: aBlock ^self stackCacheFor: cacheName cacheClass: Dictionary at: key doing: aBlock! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24' prior: 26009332! stackCacheFor: cacheName cacheClass: cacheClass at: key doing: aBlock self useStackCacheDuring: [:dict | | cache | cache := dict at: cacheName ifAbsent: []. cache ~~ nil ifTrue: [ | value hasEntry | hasEntry := true. value := cache at: key ifAbsent: [ hasEntry := false ]. hasEntry ifTrue: [ ^value ]] ifFalse: [ cache := cacheClass new. dict at: cacheName put: cache ]. ^aBlock value: cache ] defaultDictionary: nil! ! !MetacelloPlatform methodsFor: 'utilities' stamp: 'ChristopheDemarey 5/31/2013 13:02'! string: aString includesSubstring: aSubstring "abstract String>>includesSubstring: to have the same message on all supported platforms." ^aString includesSubString: aSubstring! ! !MetacelloPlatform methodsFor: 'system' stamp: 'ChristopheDemarey 4/29/2013 16:17'! suspendSystemUpdateEventsDuring: aBlock "Wraps call to the system evetn manager to tell it that we want to suspend events during execution of aBlock" SystemChangeNotifier uniqueInstance doSilently: aBlock! ! !MetacelloPlatform methodsFor: 'utilities' stamp: 'dkh 6/5/2012 19:01:24' prior: 26013821! timestamp ^DateAndTime now printString! ! !MetacelloPlatform methodsFor: 'transactions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26012831! transact: aBlock "On GemStone, we want to optionally abort before command execution and commit after common execution. Other plaforms don't need to do anything special. Returning out of block, skips commit." aBlock value! ! !MetacelloPlatform methodsFor: 'caching' stamp: 'dkh 6/5/2012 19:01:24' prior: 26009874! useStackCacheDuring: aBlock defaultDictionary: defaultDictionary | dict | dict := MetacelloStackCacheNotification signal. dict == nil ifTrue: [ dict := defaultDictionary == nil ifTrue: [ Dictionary new ] ifFalse: [ defaultDictionary ] ]. [ ^ aBlock value: dict ] on: MetacelloStackCacheNotification , MetacelloClearStackCacheNotification do: [ :ex | (ex isKindOf: MetacelloStackCacheNotification) ifTrue: [ ex resume: dict ]. (ex isKindOf: MetacelloClearStackCacheNotification) ifTrue: [ | keys | keys := ex cacheNames. keys ifNil: [ keys := dict keys ]. keys do: [ :k | (dict includesKey: k) ifTrue: [ | c | c := dict at: k. c keys do: [ :ck | c removeKey: ck ]. dict removeKey: k ] ]. ex resume ] ]! ! !Gofer methodsFor: '*metacello-testsmc' stamp: 'dkh 6/12/2012 15:41:23.319'! metacelloCleanup "Cleans the specified packages." ^ self execute: MetacelloTestsGoferCleanup! ! !Gofer methodsFor: '*metacello-testsmc' stamp: 'dkh 6/12/2012 15:41:23.319'! metacelloLoad "Load the specified packages into the image." ^ self execute: MetacelloGoferLoad! ! !Gofer methodsFor: '*metacello-testsmc' stamp: 'dkh 6/12/2012 15:41:23.319'! metacelloUnload "Unload the specified packages." ^ self execute: MetacelloTestsGoferUnload! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 18:06'! asMetacelloSemanticVersionNumber ^ MetacelloSemanticVersionNumber fromString: ''! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54476472! asMetacelloVersionNumber ^MetacelloVersionNumber fromString: ''! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! metacelloRegistrationHash ^ self hash! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! registrationsCompareEqual: aMetacelloProjectSpec ^ self = aMetacelloProjectSpec! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54476619! setAuthorInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setAuthor: self! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54476790! setBlessingInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setBlessing: self! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54476965! setDescriptionInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setDescription: self! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54477157! setPostLoadDoItInMetacelloSpec: aMetacelloSpec aMetacelloSpec setPostLoadDoIt: (aMetacelloSpec project valueHolderSpec value: self; yourself)! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54477401! setPreLoadDoItInMetacelloSpec: aMetacelloSpec aMetacelloSpec setPreLoadDoIt: (aMetacelloSpec project valueHolderSpec value: self; yourself)! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54477634! setProject: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setProject: aString withString: self! ! !UndefinedObject methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 54477831! setTimestampInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setTimestamp: self! ! !MetacelloDirective class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25819856! loadPackage: aPackageSpec externalReference: externalReference loader: aLoader ^MetacelloPackageLoadDirective new spec: aPackageSpec externalReference: externalReference loader: aLoader! ! !MetacelloDirective class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25820148! loader: aLoader ^self new loader: aLoader! ! !MetacelloDirective class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25820294! postLoadSpec: packageOrVersionSpec loader: aLoader ^MetacelloPostLoadDirective new spec: packageOrVersionSpec loader: aLoader! ! !MetacelloDirective class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25820524! preLoadSpec: packageOrVersionSpec loader: aLoader ^MetacelloPreLoadDirective new spec: packageOrVersionSpec loader: aLoader! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817342! addTo: aLoaderDirective aLoaderDirective add: self! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818056! directivesDo: aBlock aBlock value: self! ! !MetacelloDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818970! label ^self spec label! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817479! loadUsing: aLoaderDirective gofer: aGofer self subclassResponsibility! ! !MetacelloDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25816896! loader ^loader! ! !MetacelloDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25816999! loader: aLoader loader := aLoader! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818187! packageDirectivesDo: aBlock ! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817636! packageDo: aBlock ! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817739! postLoadDo: aBlock ! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817845! preLoadDo: aBlock! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818304! prepostLoadDirectivesDo: aBlock ! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818425! prepostLoadDo: aBlock ! ! !MetacelloDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25819080! printOn: aStream self printOn: aStream indent: 0! ! !MetacelloDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25819216! printOn: aStream indent: indent indent timesRepeat: [ aStream tab ]. aStream nextPutAll: self title; nextPutAll: ' : '; nextPutAll: self label. ! ! !MetacelloDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25819456! printString "Explicit override of superclass implementation. When you are printing a loadDirective it is annoying to have it truncated." ^String streamContents: [:s | self printOn: s]! ! !MetacelloDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817122! spec ^spec! ! !MetacelloDirective methodsFor: 'initialize-release' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818790! spec: packageOrVersionSpec loader: aLoader spec := packageOrVersionSpec. loader := aLoader! ! !MetacelloDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817221! title self subclassResponsibility! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818537! versionDirectivesDepthFirstDo: aBlock ! ! !MetacelloDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25818665! versionDirectivesDo: aBlock ! ! !MetacelloDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25817947! versionDo: aBlock ! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51033519! addToMetacelloPackages: aMetacelloPackagesSpec | spec | spec := (aMetacelloPackagesSpec project packageSpec) file: self; yourself. aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec addMember name: spec name; spec: spec; yourself)! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51037645! addToMetacelloRepositories: aMetacelloRepositoriesSpec | spec | spec := (aMetacelloRepositoriesSpec project repositorySpec) description: self; yourself. aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec addMember name: spec name; spec: spec; yourself)! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 18:06'! asMetacelloSemanticVersionNumber ^ MetacelloSemanticVersionNumber fromString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51033855! asMetacelloVersionNumber ^MetacelloVersionNumber fromString: self! ! !String methodsFor: '*metacello-core-scripting' stamp: 'dkh 7/16/2012 10:51'! execute: projectSpecBlock against: aScriptExecutor aScriptExecutor executeString: self do: projectSpecBlock! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51038017! fetchRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doFetchRequiredFromArray: (Array with: self).! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51038220! loadRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doLoadRequiredFromArray: (Array with: self).! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51033994! mergeIntoMetacelloPackages: aMetacelloPackagesSpec | spec | spec := (aMetacelloPackagesSpec project packageSpec) file: self; yourself. aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec mergeMember name: spec name; spec: spec; yourself) ! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51038412! mergeIntoMetacelloRepositories: aMetacelloRepositoriesSpec | spec | spec := (aMetacelloRepositoriesSpec project repositorySpec) description: self; yourself. aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec mergeMember name: spec name; spec: spec; yourself) ! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/5/2012 19:01:24' prior: 51037103! metacelloIntegerLessThanSelf: anInteger "integer version components are always '>' string component" ^false! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/21/2012 20:44'! metacelloSemanticIntegerLessThanSelf: anInteger "integer version components are always '>' string component" ^ true! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/21/2012 20:43'! metacelloSemanticStringLessThanSelf: aString ^ aString < self! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/21/2012 20:43'! metacelloSemanticVersionComponentLessThan: aMetacelloVersonComponent ^ aMetacelloVersonComponent metacelloSemanticStringLessThanSelf: self! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/5/2012 19:01:24' prior: 51037305! metacelloStringLessThanSelf: aString ^aString < self! ! !String methodsFor: '*metacello-core-version comparison' stamp: 'dkh 6/5/2012 19:01:24' prior: 51037451! metacelloVersionComponentLessThan: aMetacelloVersonComponent ^aMetacelloVersonComponent metacelloStringLessThanSelf: self! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51038783! packageFileSpecFor: aMetacelloPackagesSpec ^(aMetacelloPackagesSpec project packageSpec) file: self; yourself ! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51038981! recordRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doRecordRequiredFromArray: (Array with: self).! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51034336! removeFromMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec removeMember name: self; yourself)! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51039177! removeFromMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec removeMember name: self; yourself)! ! !String methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 51039421! resolvePackageSpecsNamedForMetacelloMCVersion: aMetacelloMCVersion visited: visited ifAbsent: aBlock ^ aMetacelloMCVersion allPackagesForSpecs: {(aMetacelloMCVersion packageNamed: self ifAbsent: aBlock)} visited: visited! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51034565! setAuthorInMetacelloConfig: aMetacelloConfig aMetacelloConfig setAuthorWithString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51034727! setAuthorInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setAuthor: (aMetacelloVersionSpec project valueHolderSpec value: self; yourself)! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51034964! setBlessingInMetacelloConfig: aMetacelloConfig aMetacelloConfig setBlessingWithString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51035129! setBlessingInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setBlessing: (aMetacelloVersionSpec project valueHolderSpec value: self; yourself)! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51035370! setDescriptionInMetacelloConfig: aMetacelloConfig aMetacelloConfig setDescriptionWithString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51035541! setDescriptionInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setDescription: (aMetacelloVersionSpec project valueHolderSpec value: self; yourself)! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51035788! setIncludesInMetacelloPackage: aMetacelloPackageSpec aMetacelloPackageSpec setIncludes: { self }.! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51035959! setLoadsInMetacelloProject: aMetacelloPackageSpec aMetacelloPackageSpec setLoads: { self }.! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51036125! setPackage: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setPackage: aString withString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! setPostLoadDoItInMetacelloSpec: aMetacelloSpec self asSymbol setPostLoadDoItInMetacelloSpec: aMetacelloSpec! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! setPreLoadDoItInMetacelloSpec: aMetacelloSpec self asSymbol setPreLoadDoItInMetacelloSpec: aMetacelloSpec! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51036313! setProject: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setProject: aString withString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51036500! setRequiresInMetacelloPackage: aMetacelloPackageSpec aMetacelloPackageSpec setRequires: { self }.! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51036672! setTimestampInMetacelloConfig: aMetacelloConfig aMetacelloConfig setTimestampWithString: self! ! !String methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 51036840! setTimestampInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setTimestamp: (aMetacelloVersionSpec project valueHolderSpec value: self; yourself)! ! !MetacelloAbstractConstructor methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25743400! configurationClass ^self subclassResponsibility! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25743556! extractAllVersionPragmas | aDict | aDict := Dictionary new. self extractPragmas: #version: into: aDict. self extractPragmas: #version:imports: into: aDict. ^aDict! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25743830! extractCommonDefaultSymbolicVersionPragmas | aDict | aDict := Dictionary new. self extractPragmas: #defaultSymbolicVersion: for: ConfigurationOf into: aDict. ^aDict! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25744116! extractDefaultSymbolicVersionPragmas | aDict | aDict := Dictionary new. self extractPragmas: #defaultSymbolicVersion: into: aDict. ^aDict! ! !MetacelloAbstractConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25745039! extractPragmas: pragmaKeyword for: aClass into: versionDict | versionString pragmas | (Pragma allNamed: pragmaKeyword in: aClass) do: [:pragma | versionString := pragma argumentAt: 1. pragmas := versionDict at: versionString ifAbsent: [ | list | list := OrderedCollection new. versionDict at: versionString put: list. list ]. pragmas add: pragma ]. ! ! !MetacelloAbstractConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 25745527! extractPragmas: pragmaKeyword into: versionDict ^self extractPragmas: pragmaKeyword for: self configurationClass into: versionDict ! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25744364! extractSymbolicVersionPragmas | aDict | aDict := Dictionary new. self extractPragmas: #symbolicVersion: into: aDict. ^aDict! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25744598! extractVersionImportPragmas | aDict | aDict := Dictionary new. self extractPragmas: #version:imports: into: aDict. ^aDict! ! !MetacelloAbstractConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 25744830! extractVersionPragmas | aDict | aDict := Dictionary new. self extractPragmas: #version: into: aDict. ^aDict! ! !MetacelloEnsureFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! ensureSpecLoader ^ self! ! !MetacelloEnsureFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec cachedReference: reference "reference already in the cache during fetch ...schedule a load directive for reference, so ensured load will come from cache" ^ self scheduleFetchFor: packageSpec reference: reference message: 'Fetched -> (cached) ' , reference name , ' --- ' , reference repository description , ' --- ' , reference repository description! ! !MetacelloEnsureFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec nearestReference: reference "latest version in repository already matches the cached reference...schedule a load directive for reference, so ensured load will come from cache" ^ self scheduleFetchFor: packageSpec reference: reference message: 'Fetched -> (nearest) ' , reference name , ' --- ' , reference repository description , ' --- ' , reference repository description! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822054! actionLabel ^'Fetching '! ! !MetacelloFetchingMCSpecLoader methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25826480! ancestorsFor: packageSpec ^self loadData ancestorsFor: packageSpec ifAbsent: [ super ancestorsFor: packageSpec ]! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25826943! atomicLoadPackageSpecs: packageSpecs repositories: repositories self loaderPolicy pushAtomicLoadDirectivesDuring: [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ] for: self ! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822179! cacheRepository ^self loaderPolicy cacheRepository! ! !MetacelloFetchingMCSpecLoader methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25826700! currentVersionInfoFor: packageSpec ^self loadData currentVersionInfoFor: packageSpec ifAbsent: [ super currentVersionInfoFor: packageSpec ]! ! !MetacelloFetchingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25823030! doLoad self loaderPolicy copy load! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! ensureSpecLoader ^ (MetacelloEnsureFetchingMCSpecLoader on: self spec) shouldDisablePackageCache: self shouldDisablePackageCache; loaderPolicy: self loaderPolicy; "explicitly share the loaderPolicy" yourself! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822330! ensuredMap ^self loaderPolicy ensuredMap! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25827245! explicitLoadPackageSpecs: packageSpecs repositories: repositories | directive | directive := self loaderPolicy pushExplicitLoadDirectivesDuring: [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ] for: self. directive explicitLoadWithPolicy: self loaderPolicy.! ! !MetacelloFetchingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25823153! linearLoadPackageSpec: packageSpec gofer: gofer MetacelloPlatform current do: [ | references nearestReference cachedReference externalReference mcVersion loadedVersionInfos | "check to see if mcz file is already in cacheRepository" cachedReference := self resolvePackageSpec: packageSpec cachedGofer: self loaderPolicy cacheGofer. (cachedReference ~~ nil and: [ packageSpec getFile ~~ nil ]) ifTrue: [ cachedReference name = packageSpec file ifTrue: [ "exact match between packageSpec file and cache" ^ self scheduleFetchFor: packageSpec cachedReference: cachedReference ] ]. "look up mcz file" references := self retryingResolvePackageSpecReferences: packageSpec gofer: gofer. nearestReference := references last asMetacelloCachingResolvedReference. "If the mcz is already in the cacheRepository, no need to copy" (cachedReference ~~ nil and: [ cachedReference name = nearestReference name ]) ifTrue: [ "latest reference in repository matches cachedReference ... " ^ self scheduleFetchFor: packageSpec nearestReference: nearestReference ]. "If the mcz is already loaded into the image, no need to copy" (self ignoreImage not and: [ (loadedVersionInfos := self ancestorsFor: packageSpec) ~~ nil ]) ifTrue: [ loadedVersionInfos do: [ :info | info name = nearestReference name ifTrue: [ ^ self ] ] ]. externalReference := (references select: [ :ref | ref name = nearestReference name ]) first asMetacelloCachingResolvedReference. self repositoryMap at: externalReference name put: externalReference repository. (self resolveDependencies: externalReference nearest: nearestReference into: (OrderedCollection with: nearestReference)) do: [ :reference | | pSpec l | mcVersion := reference version. (l := (GoferVersionReference name: reference name) resolveAllWith: self loaderPolicy cacheGofer) isEmpty ifTrue: [ self cacheRepository storeVersion: mcVersion. reference == nearestReference ifTrue: [ pSpec := packageSpec ] ifFalse: [ pSpec := packageSpec project packageSpec. pSpec name: mcVersion package name ]. self loadData addVersion: mcVersion versionInfo: mcVersion info resolvedReference: reference packageSpec: pSpec ] ]. self scheduleFetchFor: packageSpec externalReference: externalReference ] displaying: 'Fetching ' , packageSpec file! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25827633! linearLoadPackageSpecs: packageSpecs repositories: repositories self loaderPolicy pushLinearLoadDirectivesDuring: [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ] for: self! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822471! loadData ^self loaderPolicy loadData! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822608! loadDirective ^self loaderPolicy loadDirective! ! !MetacelloFetchingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25822755! loadingSpecLoader ^(MetacelloLoadingMCSpecLoader on: self spec) shouldDisablePackageCache: self shouldDisablePackageCache; loaderPolicy: self loaderPolicy copy; yourself! ! !MetacelloFetchingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25825815! postLoad: packageOrVersionSpec (MetacelloDirective postLoadSpec: packageOrVersionSpec loader: self) addTo: self loadDirective ! ! !MetacelloFetchingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25826040! preLoad: packageOrVersionSpec (MetacelloDirective preLoadSpec: packageOrVersionSpec loader: self) addTo: self loadDirective ! ! !MetacelloFetchingMCSpecLoader methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25826265! printOn: aStream super printOn: aStream. aStream nextPut: $(. self loadDirective printOn: aStream. aStream nextPut: $)! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25827927! resolveDependencies: aResolvedReference nearest: nearestReference into: aCollection | block retryCount coll notDone | self flag: 'Not used, but retained to avoid upgrade issues'. block := [ :dependency | | reference | reference := MetacelloCachingGoferResolvedReference name: dependency versionInfo name repository: aResolvedReference repository. coll add: reference. Transcript cr; show: 'Fetched dependency -> ', reference name, ' --- ', reference repository description. self resolveDependencies: reference nearest: reference into: coll]. retryCount := 0. notDone := true. coll := OrderedCollection new. [ notDone and: [ retryCount < 3 ]] whileTrue: [ retryCount > 0 ifTrue: [ Transcript cr; show: '...RETRY' ]. [ "ensure that all resolved references have cached their version while wrapped by error handler" aCollection do: [:each | each version ]. nearestReference version dependencies do: block. notDone := false ] on: Error do: [:ex | retryCount := retryCount + 1. retryCount >= 3 ifTrue: [ ex pass ]. coll := OrderedCollection new ]]. aCollection addAll: coll. ^aCollection! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25829185! resolvePackageSpec: packageSpec cachedGofer: gofer | versionReference references | versionReference := packageSpec goferLoaderReference. (references := versionReference resolveAllWith: gofer) isEmpty ifTrue: [ ^nil ]. ^references last asMetacelloCachingResolvedReference. ! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec cachedReference: reference "reference already in the cache during fetch ...no need to schedule fetch" ^ self! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec externalReference: reference ^ self scheduleFetchFor: packageSpec reference: reference message: 'Fetched -> ' , reference name , ' --- ' , reference repository description , ' --- ' , reference repository description! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec nearestReference: reference "latest version in repository already matches the cached reference...no need to schedule fetch" ^ self! ! !MetacelloFetchingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! scheduleFetchFor: packageSpec reference: reference message: message self loaderPolicy resetCacheGofer. self preLoad: packageSpec. (MetacelloDirective loadPackage: packageSpec externalReference: reference loader: self) addTo: self loadDirective. self postLoad: packageSpec. Transcript cr; show: message! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 23737340! metacelloIntegerLessThanSelf: anInteger ^anInteger < self! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:44'! metacelloSemanticIntegerLessThanSelf: anInteger ^ anInteger < self! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:44'! metacelloSemanticStringLessThanSelf: aString "string version components are always '<' integer component" ^ true! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:47'! metacelloSemanticVersionComponentLessThan: aMetacelloVersonComponent ^ aMetacelloVersonComponent metacelloSemanticIntegerLessThanSelf: self! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 23737473! metacelloStringLessThanSelf: aString "string version components are always '<' integer component" ^true! ! !Integer methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 23737654! metacelloVersionComponentLessThan: aMetacelloVersonComponent ^aMetacelloVersonComponent metacelloIntegerLessThanSelf: self! ! !BlockClosure methodsFor: '*metacello-core-scripting' stamp: 'dkh 7/16/2012 10:51'! execute: projectSpecBlock against: aScriptExecutor aScriptExecutor executeBlock: self do: projectSpecBlock! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18214117! setAuthorInMetacelloConfig: aMetacelloConfig aMetacelloConfig setAuthorWithBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! setBaseline: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setBaseline: aString withBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18214284! setBlessingInMetacelloConfig: aMetacelloConfig aMetacelloConfig setBlessingWithBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! setConfiguration: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setConfiguration: aString withBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18214455! setDescriptionInMetacelloConfig: aMetacelloConfig aMetacelloConfig setDescriptionWithBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18214632! setPackage: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setPackage: aString withBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18214825! setProject: aString withInMetacelloConfig: aMetacelloConfig aMetacelloConfig setProject: aString withBlock: self! ! !BlockClosure methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 18215018! setTimestampInMetacelloConfig: aMetacelloConfig aMetacelloConfig setTimestampWithBlock: self! ! !BlockClosure methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 18215199! valueSupplyingMetacelloAnswers: aListOfPairs "evaluate the block using a list of questions / answers that might be called upon to automatically respond to Object>>confirm: or FillInTheBlank requests" ^ [self value] on: ProvideAnswerNotification do: [:notify | | answer caption | caption := notify messageText withSeparatorsCompacted. "to remove new lines" answer := aListOfPairs detect: [:each | caption = each first or: [(caption includesSubstring: each first caseSensitive: false) or: [(each first match: caption) or: [(String includesSelector: #matchesRegex:) and: [ [ caption matchesRegex: each first ] on: Error do: [:ignored | false ]]]]]] ifNone: [nil]. answer ifNotNil: [notify resume: answer second] ifNil: [ | outerAnswer | outerAnswer := ProvideAnswerNotification signal: notify messageText. outerAnswer ifNil: [notify resume] ifNotNil: [notify resume: outerAnswer]]]! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19509825! addToMetacelloRepositories: aMetacelloRepositoriesSpec self do: [:each | each addToMetacelloRepositories: aMetacelloRepositoriesSpec ] ! ! !Collection methodsFor: '*metacello-core' stamp: 'dkh 9/7/2012 13:10' prior: 19508231! asMetacelloAttributeList ^ self! ! !Collection methodsFor: '*metacello-core' stamp: 'dkh 9/8/2012 05:30' prior: 19508345! asMetacelloAttributePath ^ MetacelloMethodSectionPath withAll: self! ! !Collection methodsFor: '*metacello-core-scripting' stamp: 'dkh 9/5/2012 06:26:03.064'! execute: projectSpecBlock against: aScriptExecutor aScriptExecutor executeCollection: self do: projectSpecBlock! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19510045! fetchRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doFetchRequiredFromArray: self.! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19510238! loadRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doLoadRequiredFromArray: self.! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19510420! mergeIntoMetacelloRepositories: aMetacelloRepositoriesSpec self do: [:each | each mergeIntoMetacelloRepositories: aMetacelloRepositoriesSpec ] ! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19510649! recordRequiredForMetacelloMCVersion: aMetacelloMCVersion ^aMetacelloMCVersion doRecordRequiredFromArray: self.! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19510835! removeFromMetacelloRepositories: aMetacelloRepositoriesSpec self do: [:each | each removeFromMetacelloRepositories: aMetacelloRepositoriesSpec ] ! ! !Collection methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 19511058! resolvePackageSpecsNamedForMetacelloMCVersion: aMetacelloMCVersion visited: visited ifAbsent: aBlock ^ aMetacelloMCVersion allPackagesForSpecs: (self collect: [ :ea | aMetacelloMCVersion packageNamed: ea ifAbsent: aBlock ]) visited: visited! ! !Collection methodsFor: '*metacello-core' stamp: 'dkh 9/5/2012 06:26:03.064' prior: 19508904! setForDo: aBlock withInMetacelloConfig: aMetacelloConstructore aMetacelloConstructore setFor: self do: aBlock! ! !Collection methodsFor: '*metacello-core' stamp: 'dkh 9/5/2012 06:26:03.064' prior: 19509093! setForVersion: aString withInMetacelloConfig: aMetacelloConstructore aMetacelloConstructore setFor: self version: aString! ! !MetacelloVersionNumber class methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26280837! extractNumericComponent: subString "$. separated components are integers" | number | number := [subString asNumber] on: Error do: [:ex | ex return: subString ]. ^number asString = subString ifTrue: [ number ] ifFalse: [ subString ]! ! !MetacelloVersionNumber class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26280214! fromString: aString | new components | components := OrderedCollection new. (aString findTokens: '.') do: [:subString | | strs | strs := subString findTokens: '-'. "first subString token could be an integer" components add: (self extractNumericComponent: strs first). strs size > 1 ifTrue: [ "remaining are uncoditionally Strings, because of leading $-" components addAll: strs allButFirst ]]. new := self new: components size. 1 to: components size do: [:i | new at: i put: (components at: i) ]. ^new! ! !MetacelloVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26270908! < aMetacelloVersionNumber | condensed aCondensed | aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. condensed := self collapseZeros. aCondensed := aMetacelloVersionNumber collapseZeros. (condensed ~~ self or: [ aCondensed ~~ aMetacelloVersionNumber ]) ifTrue: [ ^ condensed compareLessThan: aCondensed ]. ^ self compareLessThan: aMetacelloVersionNumber! ! !MetacelloVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26271383! = aMetacelloVersionNumber | condensed aCondensed | aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. condensed := self collapseZeros. aCondensed := aMetacelloVersionNumber collapseZeros. (condensed ~~ self or: [ aCondensed ~~ aMetacelloVersionNumber ]) ifTrue: [ ^ condensed compareEqualTo: aCondensed ]. ^ self compareEqualTo: aMetacelloVersionNumber! ! !MetacelloVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26270505! approximateBase | base | base := self copyFrom: 1 to: self size - 1. base at: base size put: (base at: base size) + 1. ^base! ! !MetacelloVersionNumber methodsFor: 'converting' stamp: 'dkh 6/5/2012 19:01:24' prior: 26275174! asMetacelloVersionNumber ^self! ! !MetacelloVersionNumber methodsFor: 'printing' stamp: 'dkh 07/09/2012 16:15'! asString "Answer a string that represents the receiver." ^ self printString! ! !MetacelloVersionNumber methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26277219! collapseZeros "the rule must be that zeros can be collapsed as long as the series of zeros ends in a string term" | collection newSize new j lastElementIsStringOrZero canCollapse | (self size = 0 or: [ self at: 1 ]) == 0 ifTrue: [ ^ self ]. collection := OrderedCollection new. lastElementIsStringOrZero := true. canCollapse := true. self size to: 1 by: -1 do: [ :i | | element | element := self at: i. (canCollapse and: [ element == 0 ]) ifTrue: [ lastElementIsStringOrZero ifFalse: [ canCollapse := false. collection addFirst: element.]] ifFalse: [ collection addFirst: element. canCollapse := lastElementIsStringOrZero := element isString ] ]. collection size = self size ifTrue: [ ^ self ]. newSize := collection size. new := self species new: newSize. j := 0. collection do: [ :element | new at: j + 1 put: element. j := j + 1 ]. ^ new! ! !MetacelloVersionNumber methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26278221! compareEqualTo: aMetacelloVersionNumber | mySize | aMetacelloVersionNumber species = self species ifFalse: [ ^false ]. mySize := self size. mySize = aMetacelloVersionNumber size ifFalse: [ ^false ]. 1 to: mySize do: [:i | (self at: i) = (aMetacelloVersionNumber at: i) ifFalse: [ ^false ]]. ^true! ! !MetacelloVersionNumber methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26278619! compareLessThan: aMetacelloVersionNumber | mySize aSize commonSize count more | mySize := self size. aSize := aMetacelloVersionNumber size. commonSize := mySize min: aSize. count := 0. more := true. [ more and: [ count < commonSize ]] whileTrue: [ (self at: count + 1) = (aMetacelloVersionNumber at: count + 1) ifTrue: [ count := count + 1 ] ifFalse: [ more := false ]]. count < commonSize ifTrue: [ ^(self at: count + 1) metacelloVersionComponentLessThan: (aMetacelloVersionNumber at: count + 1) ]. mySize < aSize ifTrue: [ mySize = 0 ifTrue: [ ^true ]. "if the versions at commonSize are equal and the next version slot in aMetacelloVersionNumber is a string, then it's considered that I'm > aMetacelloVersionNumber (i.e., '2.9.9' is greater than '2.9.9-alpha.2')" (self at: commonSize) = (aMetacelloVersionNumber at: commonSize) ifFalse: [ ^true ]. ^(aMetacelloVersionNumber at: commonSize+1) isString not] ifFalse: [ mySize = aSize ifTrue: [ ^false ]. aSize <= 0 ifTrue: [ ^false ]. "if the versions at commonSize are equal and the next version slot is a string, then it's considered that I'm < aMetacelloVersionNumber (i.e., '2.9.9-alpha.2' is less than '2.9.9')" (self at: commonSize) = (aMetacelloVersionNumber at: commonSize) ifFalse: [ ^false ]. ^(self at: commonSize+1) isString] ! ! !MetacelloVersionNumber methodsFor: 'copying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26275288! copyFrom: start to: stop "Answer a copy of a subset of the receiver, starting from element at index start until element at index stop." | newSize new j | newSize := stop - start + 1. new := self species new: newSize. j := 0. start to: stop do: [:i | new at: j + 1 put: (self at: i). j := j + 1 ]. ^new! ! !MetacelloVersionNumber methodsFor: 'operations' stamp: 'dkh 6/5/2012 19:01:24' prior: 26276312! decrementMinorVersionNumber | int | self size to: 1 by: -1 do: [ :index | (int := self at: index) isString ifFalse: [ int > 0 ifTrue: [ self at: index put: int - 1 ]. ^ self ] ]! ! !MetacelloVersionNumber methodsFor: 'enumerating' stamp: 'dkh 6/5/2012 19:01:24' prior: 26275690! do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]! ! !MetacelloVersionNumber methodsFor: 'enumerating' stamp: 'dkh 6/5/2012 19:01:24' prior: 26275894! do: elementBlock separatedBy: separatorBlock "Evaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between." | beforeFirst | beforeFirst := true. self do: [:each | beforeFirst ifTrue: [beforeFirst := false] ifFalse: [separatorBlock value]. elementBlock value: each]! ! !MetacelloVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26271848! hash "Returns a numeric hash key for the receiver." | mySize interval hashValue | (mySize := self size) == 0 ifTrue: [ ^15243 ]. "Choose an interval so that we sample at most 5 elements of the receiver" interval := ((mySize - 1) // 4) max: 1. hashValue := 4459. 1 to: mySize by: interval do: [ :i | | anElement | anElement := self at: i. (anElement isKindOf: SequenceableCollection) ifTrue: [ hashValue := (hashValue bitShift: -1) bitXor: anElement size. ] ifFalse: [ hashValue := (hashValue bitShift: -1) bitXor: anElement hash. ]. ]. ^ hashValue abs ! ! !MetacelloVersionNumber methodsFor: 'operations' stamp: 'dkh 6/5/2012 19:01:24' prior: 26276595! incrementMinorVersionNumber | int | self size to: 1 by: -1 do: [:index | (int := self at: index) isString ifFalse: [ self at: index put: int + 1. ^self ]].! ! !MetacelloVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26272530! match: aVersionPattern "Answer whether the version number of the receiver matches the given pattern string. A Metacello version number is made up of version sequences delimited by the characters $. and $-. The $. introduces a numeric version sequence and $- introduces an alphanumeric version sequence. A version pattern is made up of version pattern match sequences. also delimited by the characters $. and $-.. Each pattern match sequence is tested against the corresponding version sequence of the receiver, using the 'standard' pattern matching rules. All sequences must answer true for a match. The special pattern sequence '?' is a match for the corresponding version sequence and all subsequent version sequences. '?' as the version pattern matches all versions. No more version pattern sequences are permitted once the '?' sequence is used. If used, it is the last version pattern sequence. " | patternVersion mySize patternSize | patternVersion := aVersionPattern asMetacelloVersionNumber. mySize := self size. patternSize := patternVersion size. mySize = patternSize ifFalse: [ mySize < patternSize ifTrue: [ ^false ]. (patternVersion at: patternSize) ~= '?' ifTrue: [ ^false ]. mySize := patternSize ]. 1 to: mySize do: [:i | | pattern | pattern := (patternVersion at: i) asString. pattern = '?' ifTrue: [i = mySize ifFalse: [ ^self error: 'Invalid version match pattern: ', aVersionPattern printString ]] ifFalse: [ (pattern match: (self at: i) asString) ifFalse: [ ^false ]]]. ^true " '1.1.1' asMetacelloVersionNumber match: '*.*.*'. -> true '1.1.1' asMetacelloVersionNumber match: '*.#.*'. -> true '1.10.1' asMetacelloVersionNumber match: '*.#.*'. -> false '1.1.1' asMetacelloVersionNumber match: '*.*'. -> false '1.1.1' asMetacelloVersionNumber match: '*.?'. -> true '1.0' asMetacelloVersionNumber match: '1.?'. -> true '2.0' asMetacelloVersionNumber match: '1.?'. -> false '1.1.1' asMetacelloVersionNumber match: '?'. -> true '1' asMetacelloVersionNumber match: '*.?'. -> false '1-alpha5.0' asMetacelloVersionNumber match: '1-alpha*.?'. -> true '1-alpha15.0.1' asMetacelloVersionNumber match: '1-alpha*.?'. -> true '1.1' asMetacelloVersionNumber match: '?.?'. -> ERROR: invalid version match pattern " ! ! !MetacelloVersionNumber methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26276852! printOn: aStream | beforeFirst | beforeFirst := true. self do: [:each | beforeFirst ifTrue: [beforeFirst := false] ifFalse: [ each isString ifTrue: [ aStream nextPut: $- ] ifFalse: [ aStream nextPut: $. ] ]. aStream nextPutAll: each asString ] ! ! !MetacelloVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26270717! versionString | strm | strm := WriteStream on: String new. self printOn: strm. ^strm contents! ! !MetacelloVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26274917! ~> aMetacelloVersionNumber aMetacelloVersionNumber size == 1 ifTrue: [ ^false ]. ^self >= aMetacelloVersionNumber and: [ self < aMetacelloVersionNumber approximateBase ]! ! !MetacelloMCVersionValidator commentStamp: 'dkh 1/26/2012 09:49' prior: 71957727! Performs configuration validation. For programmatically decoding reason codes use: MetacellMCVersionValidator fullDescriptionForReasonCode: Warning reason codes: #notDevelopmentVersion - the symbolic version #development refers to a non-development literal version. #loadWarning - Warning signalled during load [load validation]. #onlyBaselineVersion - one or more baseline versions have been defined, but no non-baseline versions are defined. #stableDevelopmentVersion - a version whose blessing is #development has been declared as a #stable version Critical Warning reason codes: #duplicateVersionDefinitions - there are multiple pragma methods specifying the same version #loadDeprecation - deprecation warning signalled while loading configuration [load validation] #missingRecommendedProjectSpecField - missing recommended fields in project reference (versionString). The versionString should be specified so that #bleedingEdge loads will be predictable and repeatable #noLoadableVersions - no non #baseline versions defined in configuration #noTests - no test cases defined in loaded configuration [load validation] #noVersionSpecified - no version defined for the project reference or package. The version specified in the baseline or the latest version of the project or package in the repository will be used. #packageNameMismatch - the name in the packageSpec does not match the name of the mcz file #projectClassNameFileMismatch - the class name of the configuration does not match the mcz file containing the configuration #testDeprecation - deprecation warning signalled while running configuration tests [load validation] Error reason codes: #cannotResolveVersion - the version (project reference or symbolic version) was not found in the specified configuration #duplicateNames - multiple independent definitions for an entity with same name (project, package, or group) #incompleteProjectSpec - missing required fields in project reference (className and/or repository) #incorrectVersionString - the version declared in pragma doesn't match version in versionSpec #invalidDoItSelector - doit select must be a Symbol #invalidVersionString - versionString must be a String #loadError - error occured while loading configuration [load validation] #missingVersionImport - version specified in import pragma not defined in configuration #noVersionsDefined - no usable baseline or version defined in configuration ... configuration cannot be loaded #projectCreationError - error occured while resolving project reference #shadowedNames - name duplication between packages and projects #testFailures - test failures while running tests [load validation] #versionCompositionError - error while creating versionSpec from pragmas ! !MetacelloMCVersionValidator class methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25950238! populateReasonCodeDescriptions "update MetacelloMCVersionValidator class comment to include any changes to descriptions" | dict | dict := super populateReasonCodeDescriptions. dict at: #'notDevelopmentVersion' put: 'the symbolic version #development refers to a non-development literal version.'; at: #'loadWarning' put: 'Warning signalled during load [load validation].'; at: #'stableDevelopmentVersion' put: 'a version whose blessing is #development has been declared as a #stable version.'. "Warnings" dict at: #'loadDeprecation' put: 'deprecation warning signalled while loading configuration [load validation].'; at: #'missingRecommendedProjectSpecField' put: 'missing recommended fields in project reference (versionString). The versionString should be specified so that #bleedingEdge loads will be predictable and repeatable.'; at: #'noLoadableVersions' put: 'no non #baseline versions defined in configuration.'; at: #'noTests' put: 'no test cases defined in loaded configuration [load validation].'; at: #'noVersionSpecified' put: 'no version defined for the project reference or package. The version specified in the baseline or the latest version of the project or package in the repository will be used.'; at: #'testDeprecation' put: 'deprecation warning signalled while running configuration tests [load validation].'. "Critical Warnings" dict at: #'loadError' put: 'error occured while loading configuration [load validation].'; at: #'testFailures' put: 'test failures while running tests [load validation].'. "Errors" ^ dict! ! !MetacelloMCVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25949413! validateConfigurationLoad: configurationClass ^ ((self new) configurationClass: configurationClass; yourself) validateProjectLoad! ! !MetacelloMCVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25949658! validateConfigurationLoad: configurationClass version: versionString ^self validateConfigurationLoad: configurationClass version: versionString loads: #() ! ! !MetacelloMCVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25949925! validateConfigurationLoad: configurationClass version: versionString loads: loadList ^ ((self new) configurationClass: configurationClass; yourself) validateProjectVersionLoad: versionString loads: loadList! ! !MetacelloMCVersionValidator methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25944624! criticalWarningReasonCodes ^ super criticalWarningReasonCodes , #(#noLoadableVersions #noTests #testDeprecation #loadDeprecation #noVersionSpecified #'missingRecommendedProjectSpecField' )! ! !MetacelloMCVersionValidator methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25944872! errorReasonCodes ^ super errorReasonCodes, #(#loadError #testFailures )! ! !MetacelloMCVersionValidator methodsFor: 'validation' stamp: 'dkh 7/2/2012 17:32' prior: 25939600! validateBaselineVersionSpec: versionSpec | projectNames packageNames groupNames versionMessage | self validateDoIts: versionSpec versionString: versionSpec versionString errorMessage: ' version ' , versionSpec versionString printString. projectNames := Set new. packageNames := Set new. groupNames := Set new. versionMessage := ' in version ' , versionSpec versionString printString. versionSpec projectDo: [ :projectSpec | projectSpec resolveProjectSpec className == nil ifTrue: [ self recordValidationError: 'Missing required field (className:) for project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'incompleteProjectSpec' ]. projectSpec resolveProjectSpec versionString == nil ifTrue: [ self recordValidationCriticalWarning: 'Missing recommended field (versionString:) for project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'missingRecommendedProjectSpecField' ]. projectSpec hasRepository ifTrue: [ (self recurse and: [ projectSpec versionString ~~ nil ]) ifTrue: [ | project | projectSpec resolveProjectSpec ensureProjectLoaded. project := self validateProjectCreationFrom: projectSpec resolveProjectSpec projectClass onError: [ :ex | self recordValidationError: 'Error creating project reference: ' , ex description versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'projectCreationError'. nil ]. project ~~ nil ifTrue: [ self validationReport addAll: (self class validateProject: project version: projectSpec versionString debug: self debug recurse: self recurse visited: self visited) ] ] ] ifFalse: [ self recordValidationError: 'Missing required field (repository:) for project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'incompleteProjectSpec' ]. self validateDoIts: projectSpec versionString: versionSpec versionString errorMessage: projectSpec name printString , versionMessage. (projectNames includes: projectSpec name) ifTrue: [ self recordValidationError: 'Duplicate projects named' , projectSpec name printString , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'duplicateNames' ] ifFalse: [ projectNames add: projectSpec name ] ] packageDo: [ :packageSpec | self validateDoIts: packageSpec versionString: versionSpec versionString errorMessage: packageSpec name printString , versionMessage. (packageNames includes: packageSpec name) ifTrue: [ self recordValidationError: 'Duplicate packages named' , packageSpec name printString , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'duplicateNames' ] ifFalse: [ projectNames add: packageSpec name ] ] groupDo: [ :groupSpec | (groupNames includes: groupSpec name) ifTrue: [ self recordValidationError: 'Duplicate groups named' , groupSpec name printString , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'duplicateNames' ] ifFalse: [ projectNames add: groupSpec name ] ]. (packageNames intersection: projectNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between packages and projects' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]. (groupNames intersection: projectNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between groups and projects' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]. (projectNames intersection: packageNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between projects and packages' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]. (groupNames intersection: packageNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between groups and packages' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]. (projectNames intersection: groupNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between projects and groups' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]. (packageNames intersection: groupNames) notEmpty ifTrue: [ self recordValidationError: 'Names duplicated between packages and groups' , versionMessage versionString: versionSpec versionString callSite: #'validateBaselineVersionSpec:' reasonCode: #'shadowedNames' ]! ! !MetacelloMCVersionValidator methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25933500! validateCleanLoadAndTestsForVersion: version loads: loadList | cleanLoad cleanTests | cleanTests := cleanLoad := false. [ self validateVersionLoad: version loads: loadList. cleanLoad := true ] on: Error , Warning do: [ :ex | (ex isKindOf: Error) ifTrue: [ self recordValidationError: 'Error while loading version ' , version versionString printString , ' in ' , self configurationClass name asString , ' ' , ex description versionString: version versionString callSite: #validateCleanLoadAndTestsForVersion:loads: reasonCode: #loadError ]. (ex isKindOf: Warning) ifTrue: [ (ex isKindOf: Deprecation) ifTrue: [ self recordValidationCriticalWarning: 'Deprecation while loading version ' , version versionString printString , ' in ' , self configurationClass name asString , ' ' , ex description versionString: version versionString callSite: #validateCleanLoadAndTestsForVersion:loads: reasonCode: #loadDeprecation ] ifFalse: [ self recordValidationWarning: 'Warning while loading version ' , version versionString printString , ' in ' , self configurationClass name asString , ' ' , ex description versionString: version versionString callSite: #validateCleanLoadAndTestsForVersion:loads: reasonCode: #loadWarning. Smalltalk at: #UndeclaredVariableWarning ifPresent: [ :undeclaredWrning | (ex isKindOf: undeclaredWrning) ifTrue: [ ex resume: true ] ]. ex resume ] ] ]. cleanLoad ifTrue: [ cleanTests := [ self validateVersionTests: version ] on: Deprecation do: [ :ex | | message | message := 'Deprecation warning while running tests for version ' , version versionString printString , ' in ' , self configurationClass name asString , ' ' , ex description. "Deprecation warning for release tests is the same as a test failure" self recordValidationCriticalWarning: message versionString: version versionString callSite: #validateCleanLoadAndTestsForVersion:loads: reasonCode: #testDeprecation. ex return: false ]. cleanTests ifTrue: [ MetacelloCleanLoadAndTestsNotification signal: version ] ifFalse: [ MetacelloCleanLoadNotification signal: version ] ]! ! !MetacelloMCVersionValidator methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25935980! validateProjectLoad | issues project versions currentVersion collectedIssues | (issues := self validateProject select: [ :issue | issue isError ]) notEmpty ifTrue: [ ^ issues ]. project := self configurationClass project. collectedIssues := issues. versions := project versions select: [ :version | validationReport := nil. version blessing ~~ #broken and: [ version blessing ~~ #baseline and: [ (issues := (self validateProject: project version: version versionString) select: [ :issue | issue isCritical ]) isEmpty ] ] ]. validationReport := collectedIssues. versions isEmpty ifTrue: [ self recordValidationCriticalWarning: 'No non #baseline versions available in ' , self configurationClass name asString callSite: #validateProjectLoad reasonCode: #noLoadableVersions. ^ self validationReport ]. (currentVersion := project currentVersion) ~~ nil ifTrue: [ | index | index := versions indexOf: currentVersion. versions := versions copyFrom: index to: versions size ]. versions do: [ :version | self validateCleanLoadAndTestsForVersion: version loads: #('ALL') ]. ^ self validationReport! ! !MetacelloMCVersionValidator methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25937236! validateProjectVersionLoad: versionString loads: loadList | issues project currentVersion version | (issues := (self validateProjectVersion: versionString) select: [ :issue | issue isError ]) notEmpty ifTrue: [ ^ issues ]. project := self configurationClass project. version := project version: versionString ifAbsent: [ self recordValidationError: 'Version ' , versionString printString , ' does not exist.' callSite: #validateProjectVersionLoad:loads: reasonCode: #cannotResolveVersion. ^ self validationReport ]. version blessing = #broken ifTrue: [ self error: 'The specified version is #broken' ]. self validateCleanLoadAndTestsForVersion: version loads: loadList. ^ self validationReport! ! !MetacelloMCVersionValidator methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25938058! validateVersionLoad: version loads: loadList | list | list := loadList asOrderedCollection. list isEmpty ifTrue: [ list add: 'default' ]. (version groups includes: 'Tests') ifTrue: [ list add: 'Tests' ]. version load: list! ! !MetacelloMCVersionValidator methodsFor: 'private' stamp: 'dkh 6/30/2012 13:24' prior: 25945031! validateVersionSpec: versionSpec versionSpec blessing value == #'broken' ifTrue: [ ^ self ]. versionSpec projectDo: [ :projectSpec | | referencedProjectSpec | projectSpec versionString == nil ifTrue: [ self recordValidationCriticalWarning: 'No version specified for the project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'noVersionSpecified' ]. referencedProjectSpec := projectSpec referencedSpec. versionSpec blessing value == #'baseline' ifTrue: [ referencedProjectSpec hasRepository ifTrue: [ (referencedProjectSpec file beginsWith: referencedProjectSpec className) ifFalse: [ self recordValidationCriticalWarning: 'The class name of project ' , referencedProjectSpec className printString , ' does not match the file name ' , referencedProjectSpec file printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'projectClassNameFileMismatch' ] ] ifFalse: [ self recordValidationError: 'The specification for the project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString , ' is missing the required repository field' versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'incompleteProjectSpec' ] ]. referencedProjectSpec ensureProjectLoaded ifTrue: [ [ projectSpec version ] on: MetacelloVersionDoesNotExistError do: [ :ex | | explanation | explanation := projectSpec versionString == nil ifTrue: [ 'the default version' ] ifFalse: [ 'version ' , projectSpec versionString printString ]. self recordValidationError: 'Cannot resolve ' , explanation , ' for the project reference ' , projectSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'cannotResolveVersion' ] ] ] packageDo: [ :packageSpec | (packageSpec file beginsWith: packageSpec name) ifFalse: [ self recordValidationCriticalWarning: 'The name of package ' , packageSpec name printString , ' does not match the file name ' , packageSpec file printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'packageNameMismatch' ]. packageSpec file = packageSpec name ifTrue: [ self recordValidationCriticalWarning: 'No version specified for the package ' , packageSpec name printString , ' in version ' , versionSpec versionString printString versionString: versionSpec versionString callSite: #'validateVersionSpec:' reasonCode: #'noVersionSpecified' ] ] groupDo: [ :ignored | ]. self validateBaselineVersionSpec: versionSpec! ! !MetacelloMCVersionValidator methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25948285! validateVersionSpecForSymbolicVersion: versionSpec symbolicVersion: symbolicVersionString | blessing | versionSpec blessing value == #broken ifTrue: [ ^ self ]. blessing := versionSpec blessing value. (symbolicVersionString == #development and: [ blessing ~~ #development ]) ifTrue: [ self recordValidationWarning: 'Symbolic version ' , symbolicVersionString printString , ' refers to a version' , versionSpec versionString printString , ' whose blessing ' , blessing printString , ' is not #development' versionString: versionSpec versionString callSite: #validateVersionSpecForSymbolicVersion:symbolicVersion: reasonCode: #notDevelopmentVersion ]! ! !MetacelloMCVersionValidator methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25938384! validateVersionTests: version | testCases cleanTests | testCases := IdentitySet new. cleanTests := true. version currentlyLoadedClassesInVersion do: [ :class | ((class inheritsFrom: TestCase) and: [ class isAbstract not ]) ifTrue: [ testCases add: class ] ]. testCases do: [ :testCase | | testResults | testResults := testCase suite run. testResults defects notEmpty ifTrue: [ self recordValidationError: 'Test failures in tests ' , testCase name asString , ' for ' , version versionString printString , ' in ' , self configurationClass name asString , ' ' , testResults printString versionString: version versionString callSite: #validateVersionTests: reasonCode: #testFailures. cleanTests := false ] ]. testCases isEmpty ifTrue: [ self recordValidationCriticalWarning: 'No test cases for ' , version versionString printString , ' in ' , self configurationClass name asString versionString: version versionString callSite: #validateVersionTests: reasonCode: #noTests. cleanTests := false ]. ^ cleanTests! ! !MetacelloMCVersionValidator methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25949067! warningReasonCodes ^ super warningReasonCodes, #(#loadWarning #notDevelopmentVersion #stableDevelopmentVersion)! ! !MetacelloVersionValidator class methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26306512! descriptionForReasonCode: reasonCode ^ self reasonCodeDescriptions at: reasonCode ifAbsent: [ self error: 'Unknown reasonCode: ' , reasonCode printString ]! ! !MetacelloVersionValidator class methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26309902! populateReasonCodeDescriptions "update MetacelloMCVersionValidator class comment to include any changes to descriptions" | dict | dict := Dictionary new. dict at: #'onlyBaselineVersion' put: 'one or more baseline versions have been defined, but no non-baseline versions are defined.'. dict at: #'duplicateVersionDefinitions' put: 'there are multiple pragma methods specifying the same version.'; at: #'packageNameMismatch' put: 'the name in the packageSpec does not match the name of the mcz file.'; at: #'projectClassNameFileMismatch' put: 'the class name of the configuration does not match the mcz file containing the configuration.'; at: #'cannotResolveVersion' put: 'the version (project reference or symbolic version) was not found in the specified configuration.'. dict at: #'duplicateNames' put: 'multiple independent definitions for an entity with same name (project, package, or group).'; at: #'incompleteProjectSpec' put: 'missing required fields in project reference (repository, className).'; at: #'incorrectVersionString' put: 'the version declared in pragma doesn''t match version in versionSpec.'; at: #'invalidDoItSelector' put: 'doit select must be a Symbol.'; at: #'invalidVersionString' put: 'versionString must be a String.'; at: #'missingVersionImport' put: 'version specified in import pragma not defined in configuration.'; at: #'noVersionsDefined' put: 'no usable baseline or version defined in configuration ... configuration cannot be loaded.'; at: #'projectCreationError' put: 'error occured while resolving project reference.'; at: #'versionCreationError' put: 'error occured while resolving version specification, error will be thrown if an attempt is made to use the version.'; at: #'shadowedNames' put: 'name duplication between packages and projects.'; at: #'versionCompositionError' put: 'error while creating versionSpec from pragmas.'. ^ dict! ! !MetacelloVersionValidator class methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26306770! reasonCodeDescriptions reasonCodeDescriptions ifNil: [ reasonCodeDescriptions := self populateReasonCodeDescriptions ]. ^reasonCodeDescriptions! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26307026! validateConfiguration: configurationClass ^self validateConfiguration: configurationClass debug: #() recurse: false! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26307253! validateConfiguration: configurationClass debug: debugList recurse: aBool ^ ((self new) configurationClass: configurationClass; debug: debugList; recurse: aBool; yourself) validate! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26307551! validateConfiguration: configurationClass recurse: aBool ^self validateConfiguration: configurationClass debug: #() recurse: aBool! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26307792! validateProject: aMetacelloProject ^self validateProject: aMetacelloProject debug: #() recurse: false! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26308005! validateProject: aMetacelloProject debug: debugList recurse: aBool ^ ((self new) recurse: aBool; debug: debugList; configurationClass: aMetacelloProject configuration class; yourself) validateProject: aMetacelloProject! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26308341! validateProject: aMetacelloProject recurse: aBool ^self validateProject: aMetacelloProject debug: #() recurse: aBool! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26308568! validateProject: aMetacelloProject version: versionString ^self validateProject: aMetacelloProject version: versionString debug: #() recurse: false ! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26308827! validateProject: aMetacelloProject version: versionString debug: debugList ^self validateProject: aMetacelloProject version: versionString debug: debugList recurse: false ! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26309109! validateProject: aMetacelloProject version: versionString debug: debugList recurse: aBool ^ ((self new) configurationClass: aMetacelloProject configuration class; debug: debugList; recurse: aBool; yourself) validateProject: aMetacelloProject version: versionString! ! !MetacelloVersionValidator class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26309492! validateProject: aMetacelloProject version: versionString debug: debugList recurse: aBool visited: visitied ^(self new configurationClass: aMetacelloProject configuration class; debug: debugList; recurse: aBool; visited: visitied; yourself) validateProject: aMetacelloProject version: versionString! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26289822! configurationClass ^ configurationClass! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26289957! configurationClass: anObject configurationClass := anObject! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26299611! criticalWarningReasonCodes ^ #(#'packageNameMismatch' #'projectClassNameFileMismatch' #'duplicateVersionDefinitions')! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26290113! debug debug == nil ifTrue: [ debug := #() ]. ^ debug! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26290264! debug: aCollection "Any combination of: #error, #criticalWarning, #warning" debug := aCollection! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26299817! errorReasonCodes ^ #(#'duplicateNames' #'shadowedNames' #'invalidDoItSelector' #'invalidVersionString' #'missingVersionImport' #'projectCreationError' #'noVersionsDefined' #'cannotResolveVersion' #'incompleteProjectSpec' #'incorrectVersionString' #'versionCompositionError' #'versionCreationError')! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26290459! exludededValidations exludededValidations == nil ifTrue: [ exludededValidations := self extractExcludedValidations ]. ^exludededValidations! ! !MetacelloVersionValidator methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24' prior: 26295252! extractExcludedValidations | exclusionDict | exclusionDict := Dictionary new. (Pragma allNamed: #excludedValidationIssues: in: self configurationClass) do: [:pragma | | exclusions | exclusions := pragma argumentAt: 1. 1 to: exclusions size by: 2 do: [:index | exclusionDict at: (exclusions at: index) put: (exclusions at: index + 1) ]]. ^exclusionDict! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26290697! recordValidationCriticalWarning: aString callSite: callSite reasonCode: aSymbol ^self recordValidationCriticalWarning: aString versionString: nil callSite: callSite reasonCode: aSymbol ! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26290980! recordValidationCriticalWarning: aString versionString: versionString callSite: callSite reasonCode: aSymbol "reasonCodes: #packageNameMismatch #projectClassNameFileMismatch #duplicateVersionDefinitions #duplicateAttributeBlocks " (self criticalWarningReasonCodes includes: aSymbol) ifFalse: [ self error: 'Unknown critical warning reason code' ]. ((self exludededValidations at: versionString ifAbsent: [ #() ]) includes: aSymbol) ifTrue: [ ^self ]. (self debug includes: #criticalWarning) ifTrue: [ self halt: 'Debug triggered for critical warning: ', aString ]. self validationReport add: (MetacelloValidationCriticalWarning configurationClass: (self recurse ifTrue: [ self configurationClass ] ifFalse: [ nil ]) reasonCode: aSymbol callSite: callSite explanation: aString)! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26291908! recordValidationError: aString callSite: callSite reasonCode: aSymbol ^self recordValidationError: aString versionString: nil callSite: callSite reasonCode: aSymbol ! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26292171! recordValidationError: aString versionString: versionString callSite: callSite reasonCode: aSymbol "reasonCodes: #noVersionForSymbolicVersion #duplicateNames #shadowedNames #invalidDoItSelector #invalidVersionString #missingVersionImport #projectCreationError #noVersionsDefined #cannotResolveVersion #incompleteProjectSpec #incorrectVersionString " (self errorReasonCodes includes: aSymbol) ifFalse: [ self error: 'Unknown error reason code' ]. ((self exludededValidations at: versionString ifAbsent: [ #() ]) includes: aSymbol) ifTrue: [ ^self ]. (self debug includes: #error) ifTrue: [ self halt: 'Debug triggered for error: ', aString ]. self validationReport add: (MetacelloValidationError configurationClass: (self recurse ifTrue: [ self configurationClass ] ifFalse: [ nil ]) reasonCode: aSymbol callSite: callSite explanation: aString)! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26293181! recordValidationWarning: aString callSite: callSite reasonCode: aSymbol ^self recordValidationWarning: aString versionString: nil callSite: callSite reasonCode: aSymbol ! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26293453! recordValidationWarning: aString versionString: versionString callSite: callSite reasonCode: aSymbol "reasonCodes: #onlyBaselineVersion #noVersionSpecified " (self warningReasonCodes includes: aSymbol) ifFalse: [ self error: 'Unknown warning reason code' ]. ((self exludededValidations at: versionString ifAbsent: [ #() ]) includes: aSymbol) ifTrue: [ ^self ]. (self debug includes: #warning) ifTrue: [ self halt: 'Debug triggered for critical warning: ', aString ]. self validationReport add: (MetacelloValidationWarning configurationClass: (self recurse ifTrue: [ self configurationClass ] ifFalse: [ nil ]) reasonCode: aSymbol callSite: callSite explanation: aString)! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26294271! recurse recurse == nil ifTrue: [ recurse := false ]. ^ recurse! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26294430! recurse: anObject recurse := anObject! ! !MetacelloVersionValidator methodsFor: 'validation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26295729! validate "Issue 5: []no shadowing of names across project/package/group boundaries Issue 6: []package version supplied for each package []no released (stable/bleedingEdge) versions (only development version) package spec used instead of project spec in baseline (ConfigurationOfPharo-DaleHenrichs.50) Issue 20: []pre and post load doits must be symbols, not blocks Others: []symbolic versions can be resolved. []Ensure that versions are Strings and symbolic versions are symbols. []Ensure that imported versions are defined." self validatePragmas. ^self validateProject! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26300163! validateBaselineVersionSpec: versionSpec self subclassResponsibility! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26300327! validateDoIts: aSpec versionString: versionString errorMessage: errorMessage | ar | ar := { #preLoadDoIt. 'preLoadDoIt selector for '. #postLoadDoIt. 'postLoadDoIt selector for '. }. 1 to: ar size by: 2 do: [ :i | | selector | selector := (aSpec perform: (ar at: i)) value. selector ~~ nil ifTrue: [ selector isSymbol ifFalse: [ self recordValidationError: (ar at: i + 1) , errorMessage , ' is not a symbol' versionString: versionString callSite: #validateDoIts:versionString:errorMessage: reasonCode: #invalidDoItSelector ] ] ]! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26301012! validatePragmas "Ensure that versions are Strings and symbolic versions are symbols. Ensure that imported versions are defined" | versionPragmas versionImportPragmas symbolicVersionPragmas versionStrings | versionPragmas := self extractVersionPragmas. versionImportPragmas := self extractVersionImportPragmas. symbolicVersionPragmas := self extractSymbolicVersionPragmas. versionStrings := Set new. versionPragmas keys , versionImportPragmas keys , symbolicVersionPragmas keys do: [ :versionString | (versionStrings includes: versionString) ifTrue: [ self recordValidationCriticalWarning: 'version ' , versionString printString , ' is defined multiple times.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'duplicateVersionDefinitions' ] ifFalse: [ versionStrings add: versionString ] ]. versionPragmas keysAndValuesDo: [ :versionString :pragmaList | versionString isString ifFalse: [ self recordValidationError: 'version ' , versionString printString , ' is not a String.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'invalidVersionString' ]. pragmaList size > 1 ifTrue: [ self recordValidationCriticalWarning: 'version ' , versionString printString , ' is defined multiple times.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'duplicateVersionDefinitions' ] ]. symbolicVersionPragmas keysAndValuesDo: [ :versionString :pragmaList | versionString isSymbol ifFalse: [ self recordValidationError: 'symbolic version ' , versionString printString , ' is not a Symbol.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'invalidVersionString' ]. pragmaList size > 1 ifTrue: [ self recordValidationCriticalWarning: 'version ' , versionString printString , ' is defined multiple times.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'duplicateVersionDefinitions' ] ]. versionImportPragmas keysAndValuesDo: [ :versionString :pragmaList | versionString isString ifFalse: [ self recordValidationError: 'version ' , versionString printString , ' is not a String.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'invalidVersionString' ]. pragmaList size > 1 ifTrue: [ self recordValidationCriticalWarning: 'version ' , versionString printString , ' is defined multiple times.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'duplicateVersionDefinitions' ]. pragmaList do: [ :versionImportPragma | (versionImportPragma arguments at: 2) do: [ :importedVersionString | (versionStrings includes: importedVersionString) ifFalse: [ self recordValidationError: 'version ' , importedVersionString printString , ' referenced in import list of version ' , versionString printString , ' has not been defined.' versionString: versionString callSite: #'validatePragmas' reasonCode: #'missingVersionImport' ] ] ] ]! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26304331! validateProject | project | project := self validateProjectCreationFrom: self configurationClass onError: [ :ex | self recordValidationError: 'Error creating project: ' , ex description , ' to reproduce evalutate the following: ''' , self configurationClass name asString , ' project''' callSite: #validateProject reasonCode: #projectCreationError. ^ self validationReport ]. ^ self validateProject: project! ! !MetacelloVersionValidator methodsFor: 'validation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26296422! validateProject: project | hasNoBaseline hasNoVersion | (self visited includes: project configuration class) ifTrue: [ ^ self validationReport ]. self visited add: project configuration class. hasNoBaseline := hasNoVersion := true. project versions do: [ :version | | spec | spec := version spec. [ spec blessing value == #baseline ifTrue: [ hasNoBaseline := false. self validateBaselineVersionSpec: spec ] ifFalse: [ hasNoVersion := false. self validateVersionSpec: spec ] ] on: Error do: [ :ex | self recordValidationError: 'Error composing version ' , version versionString printString , ': ' , ex description versionString: version versionString callSite: #validateProject: reasonCode: #versionCompositionError ] ]. project symbolicVersionMap keys do: [ :symbolicVersion | | version | version := [ project version: symbolicVersion ] on: Error , MetacelloSymbolicVersionNotDefinedError do: [ :ex | "MetacelloSymbolicVersionNotDefinedError are explicitly not defined, so are not validation errors" (ex isKindOf: MetacelloSymbolicVersionNotDefinedError) ifFalse: [ self recordValidationError: 'symbolic version ' , symbolicVersion printString , ' does not resolve to a literal version.' callSite: #validatePragmas reasonCode: #cannotResolveVersion ]. ex return: nil ]. version ~~ nil ifTrue: [ self validateVersionSpecForSymbolicVersion: version spec symbolicVersion: symbolicVersion ] ]. hasNoVersion ifTrue: [ hasNoBaseline ifTrue: [ self recordValidationError: 'No usable baseline or versions defined.' callSite: #validatePragmas reasonCode: #noVersionsDefined ] ifFalse: [ self recordValidationWarning: 'Only baseline defined (no version defined).' callSite: #validatePragmas reasonCode: #onlyBaselineVersion ] ]. ^ self validationReport! ! !MetacelloVersionValidator methodsFor: 'validation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26298504! validateProject: project version: versionString | version spec | (self visited includes: project configuration class) ifTrue: [ ^ self validationReport ]. self visited add: project configuration class. [ version := project version: versionString ] on: Error do: [ :ex | self recordValidationError: 'Could not resolve version ' , versionString printString , ' due to error: ' , ex description versionString: versionString callSite: #validateProject:version: reasonCode: #cannotResolveVersion. ^ self validationReport ]. spec := version spec. [ spec blessing value == #baseline ifTrue: [ self validateBaselineVersionSpec: spec ] ifFalse: [ self validateVersionSpec: spec ] ] on: Error do: [ :ex | self recordValidationError: 'Error composing version ' , version versionString printString , ': ' , ex description versionString: version versionString callSite: #validateProject:version: reasonCode: #versionCompositionError ]. ^ self validationReport! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26304868! validateProjectCreationFrom: aConfigurationClass onError: aBlock [ ^ aConfigurationClass project ] on: Error , MetacelloValidationNotification , MetacelloErrorInProjectConstructionNotification do: [ :ex | (ex isKindOf: MetacelloValidationNotification) ifTrue: [ self validationReport add: ex issue. ex resume ]. (ex isKindOf: MetacelloErrorInProjectConstructionNotification) ifTrue: [ self recordValidationError: 'Error creating version: ' , ex versionString , ' error: ' , ex exception description , ' to reproduce evalutate the following: ''[' , self configurationClass name asString , ' project ] on: MetacelloErrorInProjectConstructionNotification do: [:ex | ex resume: true ]''' callSite: #'validateProjectCreationFrom:onError:' reasonCode: #'versionCreationError'. ex resume: false ]. ^ aBlock value: ex ]! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26305270! validateProjectVersion: versionString | project | project := self validateProjectCreationFrom: self configurationClass onError: [ :ex | self recordValidationError: 'Error creating project: ' , ex description , ' to reproduce evalutate the following: ''' , self configurationClass name asString , ' project''' callSite: #validateProject reasonCode: #projectCreationError. ^ self validationReport ]. ^ self validateProject: project version: versionString! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26305853! validateVersionSpec: versionSpec self subclassResponsibility! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26306009! validateVersionSpecForSymbolicVersion: versionSpec symbolicVersion: symbolicVersionString self subclassResponsibility! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26294563! validationReport validationReport == nil ifTrue: [ validationReport := OrderedCollection new ]. ^ validationReport! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26294776! validationReport: anObject validationReport := anObject! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26294928! visited visited == nil ifTrue: [ visited := IdentitySet new ]. ^visited! ! !MetacelloVersionValidator methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26295098! visited: anIdentitySet visited := anIdentitySet! ! !MetacelloVersionValidator methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26306222! warningReasonCodes ^ #(#onlyBaselineVersion )! ! !MetacelloGoferPackage class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25834143! name: aString packageFilename: packageFilename ^ self basicNew initializeName: aString packageFilename: packageFilename! ! !MetacelloGoferPackage class methodsFor: 'package name matching' stamp: 'dkh 6/8/2012 14:04:22' prior: 25834373! packageFileName: pkgFileName matchesPackageName: wcPkgName ^(pkgFileName beginsWith: wcPkgName) ifTrue: [ (pkgFileName size = wcPkgName size) or: [ ((pkgFileName at: wcPkgName size + 1) = $-) or: [ ((pkgFileName at: wcPkgName size + 1) = $.) or: [ (pkgFileName at: wcPkgName size + 1) isDigit ]]]] ifFalse: [ pkgFileName size >= wcPkgName size ifTrue: [ ^false ]. (wcPkgName beginsWith: pkgFileName) ifFalse: [ ^false ]. ^(wcPkgName at: pkgFileName size + 1) = $. ] ! ! !MetacelloGoferPackage methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25832130! ancestors | wc | (wc := self workingCopy) ~~ nil ifTrue: [ wc ancestry ancestors isEmpty not ifTrue: [ ^wc ancestry ancestors ]]. ^nil! ! !MetacelloGoferPackage methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25832359! currentVersionInfo | wc | (wc := self workingCopy) ~~ nil ifTrue: [ wc ancestry ancestors isEmpty not ifTrue: [ ^wc ancestry ancestors first ]]. ^nil! ! !MetacelloGoferPackage methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25832604! findWorkingCopy "Answer a working copy, or nil if the package is not loaded." | wcs | wcs := MCWorkingCopy allManagers select: [ :each | self matchesWorkingCopy: each ]. wcs isEmpty ifTrue: [ ^nil ]. ^wcs detectMax: [:ea | ea package name size ]! ! !MetacelloGoferPackage methodsFor: 'initialization' stamp: 'dkh 6/8/2012 14:04:22' prior: 25831937! initializeName: aString packageFilename: packagefilename name := aString. packageFilename := packagefilename! ! !MetacelloGoferPackage methodsFor: 'private' stamp: 'dkh 6/30/2012 07:54' prior: 25832944! matches: aLoadableReference "does Monticello-style #versionInfoFromVersionNamed: matching" | pFilename refFilename char | ((pFilename := self packageFilename) == nil or: [ self name = self packageFilename ]) ifTrue: [ ^ super matches: aLoadableReference ]. aLoadableReference name = pFilename ifTrue: [ ^ true ]. (aLoadableReference name beginsWith: pFilename) ifFalse: [ ^ false ]. refFilename := aLoadableReference metacelloPackageNameWithBranch at: 2. refFilename = pFilename ifTrue: [ ^ true ]. pFilename size < refFilename size ifTrue: [ (refFilename beginsWith: pFilename) ifFalse: [ ^ false ]. (char := pFilename at: pFilename size) ~= $- ifTrue: [ char := refFilename at: pFilename size + 1 ] ] ifFalse: [ (pFilename beginsWith: refFilename) ifFalse: [ ^ false ]. (char := refFilename at: refFilename size) ~= $- ifTrue: [ char := pFilename at: refFilename size + 1 ] ]. ^ char = $. or: [ char = $- ]! ! !MetacelloGoferPackage methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25833329! matchesWorkingCopy: aWorkingCopy "check that the working copy package name matches the package file name and that the first ancestor's package file name matches the packageName" | pFilename | (pFilename := self packageFilename) == nil ifTrue: [ ^self error: 'cannot match working copy' ]. (self class packageFileName: pFilename matchesPackageName: aWorkingCopy package name) ifTrue: [ aWorkingCopy ancestry ancestors isEmpty ifTrue: [ ^true ]. ^self class packageFileName: aWorkingCopy ancestry ancestors first name matchesPackageName: self packageName ]. ^false ! ! !MetacelloGoferPackage methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25831635! packageFilename ^packageFilename! ! !MetacelloGoferPackage methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25831752! workingCopy workingCopy == nil ifTrue: [ workingCopy := self findWorkingCopy ]. ^workingCopy! ! !MetacelloProjectReferenceSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! aboutToCopy self projectReference className! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033088! answers: aListOfPairs self shouldNotImplement! ! !MetacelloProjectReferenceSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26034929! configMethodCascadeOn: aStream member: aMember last: lastCascade indent: indent aMember methodUpdateSelector == #'remove:' ifTrue: [ aStream nextPutAll: 'removeProject: ' , self name printString ] ifFalse: [ self projectReference == nil ifTrue: [ ^ self ]. aStream nextPutAll: self projectLabel , ': ' , self projectName printString , ' '. (aMember methodUpdateSelector == #'copy:' and: [ self projectReference hasNonVersionStringField ]) ifTrue: [ aStream nextPutAll: 'copyFrom: ' , aMember sourceName printString , ' ' ]. self projectReference configShortCutMethodOn: aStream member: aMember indent: indent + 1 ]. lastCascade ifTrue: [ aStream nextPut: $. ] ifFalse: [ aStream nextPut: $;; cr ]! ! !MetacelloProjectReferenceSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26035740! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec '; cr; tab: indent + 1; nextPutAll: 'name: ', self name printString; nextPut: $;; cr; tab: indent + 1; nextPutAll: 'projectReference: '; nextPut: $[; cr. aStream tab: indent + 2; nextPutAll: 'spec'. self projectReference ifNotNil: [ self projectReference configMethodBodyOn: aStream indent: indent + 2]. aStream nextPutAll: ' ].'! ! !MetacelloProjectReferenceSpec methodsFor: 'testing' stamp: 'dkh 6/30/2012 13:22'! hasRepository ^ self projectReference hasRepository! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033225! includes: aCollection self shouldNotImplement! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26030572! loadUsing: aLoader gofer: ignored | required | required := self resolveToLoadableSpec. required loader: aLoader. ^required load! ! !MetacelloProjectReferenceSpec methodsFor: 'importing' stamp: 'dkh 6/26/2012 10:48'! mergeImportLoads: aLoadList self projectReference mergeImportLoads: aLoadList! ! !MetacelloProjectReferenceSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26034074! mergeMap | map | map := super mergeMap. map at: #projectReference put: projectReference. ^map! ! !MetacelloProjectReferenceSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26034269! mergeSpec: anotherSpec | newSpec map anotherProjectReference | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. (anotherProjectReference := map at: #projectReference) ~~ nil ifTrue: [ newSpec projectReference: (newSpec projectReference == nil ifTrue: [ anotherProjectReference ] ifFalse: [ newSpec projectReference mergeSpec: anotherProjectReference ])]. ^newSpec! ! !MetacelloProjectReferenceSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26034768! nonOverridable ^super nonOverridable, #( projectReference )! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26030807! packagesNeedSavingVisited: visitedProjects using: repos into: aCollection | prjct clsName vrsn | prjct := self resolveToLoadableSpec. (visitedProjects includes: (clsName := prjct className)) ifTrue: [ ^self ]. visitedProjects add: clsName. (vrsn := self versionOrNil) == nil ifTrue: [ ^self ]. vrsn spec packagesNeedSavingVisited: visitedProjects into: aCollection! ! !MetacelloProjectReferenceSpec methodsFor: 'copying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033914! postCopy super postCopy. projectReference := projectReference copy. ! ! !MetacelloProjectReferenceSpec methodsFor: 'visiting' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036993! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock projectBlock value: self! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectLabel ^ self projectReference projectLabel! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033362! projectName ^self projectReference name! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036252! projectReference ^ projectReference! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033492! projectReference: anObject projectReference := anObject! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033639! referencedSpec ^self projectReference! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036385! relativeCurrentVersion ^self projectReference relativeCurrentVersion! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24'! repositories ^ self referencedSpec repositories! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26031279! repository: aStringOrMetacelloRepositorySpec ^ self projectReference repository: aStringOrMetacelloRepositorySpec! ! !MetacelloProjectReferenceSpec methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24'! repositorySpecs ^self repositories map values! ! !MetacelloProjectReferenceSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26033768! requires: aCollection self shouldNotImplement! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26031490! resolveProjectSpec ^self projectReference! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26031628! resolveToAllPackagesIn: aVersionSpec into: packages visited: visited (self resolveProjectSpec resolveToAllPackagesIn: aVersionSpec visited: visited) do: [:pkg | packages at: pkg put: pkg ]! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26031915! resolveToLoadableSpec ^self resolveProjectSpec resolveToLoadableSpec! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26032080! resolveToPackagesIn: aVersionSpec visited: visited ^#()! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26032241! updateForSpawnMethod: sourceSpec "This means that this spec was used in a baseline and will be used in a version .... drop all information that isn't useful" | nm | nm := name. self projectReference updateForSpawnMethod: sourceSpec. super updateForSpawnMethod: sourceSpec. name := nm. ! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26032628! updatePackageSpec: updatedSpecs using: anMCLoader "Add project copy to updatedSpecs if the current version of the project is different from the receiver's version" self projectReference updatePackageSpec: updatedSpecs! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036545! version ^self projectReference version! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036683! versionOrNil ^self projectReference versionOrNil! ! !MetacelloProjectReferenceSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 26032946! versionString ^self projectReference versionString! ! !MetacelloProjectReferenceSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26036832! versionString: aString ^self projectReference versionString: aString! ! !MetacelloCommonMCSpecLoader class methodsFor: 'utilities' stamp: 'dkh 6/8/2012 14:04:22' prior: 38732255! nameComponentsFrom: aVersionName | ar | ar := (aVersionName last isDigit and: [ (aVersionName indexOf: $.) > 0 ])ifFalse: [Array with: aVersionName with: '' with: 0 with: aVersionName with: self] ifTrue: [ | vrsn str | str := ((aVersionName copyAfterLast: $-) copyAfterLast: $.). vrsn := str isEmpty ifTrue: [0] ifFalse: [str asInteger]. Array with: (aVersionName copyUpToLast: $-) "base pkg name" with: ((aVersionName copyAfterLast: $-) copyUpTo: $.) "user" with: vrsn "version" with: aVersionName with: self ]. ^ar! ! !MetacelloCommonMCSpecLoader class methodsFor: 'accessing' stamp: 'dkh 6/17/2012 19:51'! retryPackageResolution "if true, errors during #retryingResolvePackageSpecReferences:gofer: are caught and the resolution is retried 3 times. After the thrid time, a MetacelloPackageSpecResolutionError is thrown if false, an error during #retryingResolvePackageSpecReferences:gofer: will be passed, likely resulting in a walkback ... useful for debugging." RetryPackageResolution ifNil: [ RetryPackageResolution := true ]. ^ RetryPackageResolution! ! !MetacelloCommonMCSpecLoader class methodsFor: 'accessing' stamp: 'dkh 6/17/2012 19:48'! retryPackageResolution: aBool RetryPackageResolution := aBool! ! !MetacelloCommonMCSpecLoader methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25798677! ancestorsFor: packageSpec | cacheKey vi | cacheKey := packageSpec file. ^MetacelloPlatform current stackCacheFor: #ancestors at: cacheKey doing: [ :cache | vi := packageSpec ancestors. cache at: cacheKey put: vi ]. ! ! !MetacelloCommonMCSpecLoader methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25799008! currentVersionInfoFor: packageSpec | cacheKey vi | cacheKey := packageSpec file. ^MetacelloPlatform current stackCacheFor: #currentVersionInfo at: cacheKey doing: [ :cache | vi := packageSpec currentVersionInfo. cache at: cacheKey put: vi ]. ! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792854! doLoad self subclassResponsibility! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792984! doingLoads: aBlock "escape mechanism for recording and null loaders to skip doing loaderlike things" aBlock value! ! !MetacelloCommonMCSpecLoader methodsFor: 'testing' stamp: 'dkh 07/28/2013 16:10' prior: 25798397! ensureForDevelopment ^ true! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! ensureSpecLoader ^ self! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791045! fetchingSpecLoader ^self! ! !MetacelloCommonMCSpecLoader methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25798520! hasRepositoryOverrides ^self loaderPolicy hasRepositoryOverrides! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791168! ignoreImage ^self loaderPolicy ignoreImage! ! !MetacelloCommonMCSpecLoader methodsFor: 'initialize-release' stamp: 'dkh 6/8/2012 14:04:22' prior: 48981706! initialize self loaderPolicy! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25793195! linearLoadPackageSpec: packageSpec gofer: gofer self subclassResponsibility! ! !MetacelloCommonMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25799353! linearLoadPackageSpecs: packageSpecs repositories: repositories | gofer | gofer := MetacelloGofer new. repositories do: [:repo | gofer repository: repo ]. packageSpecs do: [:pkg | pkg loadUsing: self gofer: gofer ]. ! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25793367! load | repos | repos := self repositoriesFrom: self spec repositorySpecs. ^ self loadType == #atomic ifTrue: [self atomicLoadPackageSpecs: self spec packageSpecsInLoadOrder repositories: repos] ifFalse: ["assume #linear" self linearLoadPackageSpecs: self spec packageSpecsInLoadOrder repositories: repos ] ! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 7/5/2012 20:26' prior: 25793768! loadPackageDirective: aPackageLoadDirective gofer: aGofer | packageSpec | packageSpec := aPackageLoadDirective spec. MetacelloPlatform current do: [ | loadBlock goferLoad answers resolvedReference | aGofer disablePackageCache. "for good luck:)" resolvedReference := self resolvePackageSpec: packageSpec gofer: aGofer. resolvedReference isNil ifTrue: [ "Package version already loaded into image" ^ self ]. loadBlock := [ "mcLoader preLoad: packageSpec." goferLoad := MetacelloGoferLoad on: aGofer. goferLoad addResolved: resolvedReference. goferLoad execute. MetacelloPlatform current clearCurrentVersionCache "mcLoader postLoad: packageSpec" ]. (answers := packageSpec answers) notEmpty ifTrue: [ loadBlock valueSupplyingMetacelloAnswers: answers ] ifFalse: [ loadBlock value ]. resolvedReference workingCopy repositoryGroup addRepository: aPackageLoadDirective repository. Transcript cr; show: 'Loaded -> ' , resolvedReference name , ' --- ' , aPackageLoadDirective repository description , ' --- ' , resolvedReference repository description ] displaying: 'Loading ' , packageSpec file! ! !MetacelloCommonMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25795018! loadPackageDirectives: pkgLoads gofer: aGofer MetacelloPlatform current do: [ | goferLoad loadBlock answers | goferLoad := MetacelloGoferLoad on: aGofer. answers := OrderedCollection new. pkgLoads do: [:packageLoadDirective | | resolvedReference | aGofer disablePackageCache. "for good luck:)" (resolvedReference := self resolvePackageSpec: packageLoadDirective spec gofer: aGofer) ~~ nil ifTrue: [ goferLoad addResolved: resolvedReference. answers addAll: packageLoadDirective spec answers. packageLoadDirective resolvedReference: resolvedReference ]]. Transcript cr; show: 'Starting atomic load'. loadBlock := [ "pkgLoads do: [:packageLoadDirective | mcLoader preLoad: packageLoadDirective spec ]." goferLoad execute. pkgLoads do: [:packageLoadDirective | packageLoadDirective resolvedReference == nil ifTrue: [ Transcript cr; tab; show: 'Already Loaded -> ', packageLoadDirective file ] ifFalse: [ Transcript cr; tab; show: 'Loaded -> ', packageLoadDirective file, ' --- ', packageLoadDirective repository description, ' --- ', packageLoadDirective resolvedReference repository description. packageLoadDirective resolvedReference workingCopy repositoryGroup addRepository: packageLoadDirective repository ]]. MetacelloPlatform current clearCurrentVersionCache. "pkgLoads do: [:packageLoadDirective | packageLoadDirective resolvedReference ~~ nil ifTrue: [mcLoader postLoad: packageLoadDirective spec ]]"]. answers notEmpty ifTrue: [ loadBlock valueSupplyingMetacelloAnswers: answers ] ifFalse: [ loadBlock value]. Transcript cr; show: 'Finished atomic load' ] displaying: 'Atomic Load...'. ! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791309! loaderPolicy loaderPolicy == nil ifTrue: [ loaderPolicy := MetacelloLoaderPolicy new ]. ^loaderPolicy! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791510! loaderPolicy: anObject loaderPolicy := anObject! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791654! loadingSpecLoader ^self! ! !MetacelloCommonMCSpecLoader methodsFor: 'packages' stamp: 'dkh 6/8/2012 14:04:22' prior: 25797338! nameComponentsFrom: aVersionName ^self class nameComponentsFrom: aVersionName! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791768! operator operator == nil ifTrue: [ ^#= ]. ^operator! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25791911! operator: aSymbol operator := aSymbol! ! !MetacelloCommonMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25796845! postLoad: packageOrVersionSpec "subclassResponsibility, but it gets called during an upgrade, so leave it as NOOP"! ! !MetacelloCommonMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25797053! preLoad: packageOrVersionSpec self subclassResponsibility! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792047! recordingSpecLoader ^(MetacelloNullRecordingMCSpecLoader on: self spec) shouldDisablePackageCache: self shouldDisablePackageCache; loaderPolicy: self loaderPolicy copy; yourself! ! !MetacelloCommonMCSpecLoader methodsFor: 'repositories' stamp: 'dkh 6/8/2012 14:04:22' prior: 25797518! repositoriesFrom: aMetacelloMVRepositorySpecs ^self repositoriesFrom: aMetacelloMVRepositorySpecs ignoreOverrides: false! ! !MetacelloCommonMCSpecLoader methodsFor: 'repositories' stamp: 'dkh 6/8/2012 14:04:22' prior: 25797740! repositoriesFrom: aMetacelloMVRepositorySpecs ignoreOverrides: ignoreOverrides | repositories repos | (ignoreOverrides not and: [self hasRepositoryOverrides]) ifTrue: [ ^self loaderPolicy overrideRepositories ]. repositories := MCRepositoryGroup default repositories. repos := OrderedCollection new. aMetacelloMVRepositorySpecs do: [:aSpec | | description repo | description := aSpec description. (repo := repositories detect: [:rep | rep description = description ] ifNone: [ aSpec createRepository ]) ~~ nil ifTrue: [ repos add: repo ]]. ^repos ! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792329! repositoryMap ^self loaderPolicy repositoryMap! ! !MetacelloCommonMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25799661! resolvePackageSpec: packageSpec gofer: gofer | references resolvedReference mcVersion loadedVersionInfos | references := self retryingResolvePackageSpecReferences: packageSpec gofer: gofer. resolvedReference := references last asMetacelloCachingResolvedReference. mcVersion := resolvedReference version. (loadedVersionInfos := self ancestorsFor: packageSpec) ~~ nil ifTrue: [ loadedVersionInfos do: [:info | info name = mcVersion info name ifTrue: [ "package already loaded, don't load again" ^nil ]]]. ^resolvedReference! ! !MetacelloCommonMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25800297! resolvePackageSpecReferences: packageSpec gofer: gofer | versionReference references localGofer | localGofer := gofer. self hasRepositoryOverrides not ifTrue: [ packageSpec repositorySpecs notEmpty ifTrue: [ localGofer := MetacelloGofer new. (self repositoriesFrom: packageSpec repositorySpecs) do: [:repo | localGofer repository: repo ]]]. (packageSpec getFile == nil or: [ self shouldDisablePackageCache ]) ifTrue: [ "don't use package-cache when trying to get latest version" localGofer disablePackageCache ]. versionReference := packageSpec goferLoaderReference. references := versionReference resolveAllWith: localGofer. localGofer enablePackageCache. ^references! ! !MetacelloCommonMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/17/2012 19:52' prior: 25801090! retryingResolvePackageSpecReferences: packageSpec gofer: gofer | retryCount references repositoryError | retryCount := 0. references := #(). [ references isEmpty and: [ retryCount < 3 ] ] whileTrue: [ retryCount > 0 ifTrue: [ Transcript cr; show: '...RETRY->' , packageSpec file ]. references := [ self resolvePackageSpecReferences: packageSpec gofer: gofer ] on: Error , GoferRepositoryError do: [ :ex | self class retryPackageResolution ifFalse: [ ex pass ]. retryCount >= 2 ifTrue: [ (ex isKindOf: GoferRepositoryError) ifTrue: [ "ignore repository errors at this point, in case an alternate repository is in the list " Transcript cr; show: 'gofer repository error: ' , ex description printString , '...ignoring'. repositoryError := ex. ex resume: #() ] ifFalse: [ ex pass ] ]. ex return: #() ]. retryCount := retryCount + 1 ]. references isEmpty ifTrue: [ Transcript cr; show: '...FAILED->' , packageSpec file. (MetacelloPackageSpecResolutionError new packageSpec: packageSpec; repositories: gofer repositories; repositoryError: repositoryError; yourself) signal ]. ^ references! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792474! shouldDisablePackageCache disablePackageCache == nil ifTrue: [ disablePackageCache := false ]. ^ disablePackageCache! ! !MetacelloCommonMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25792690! shouldDisablePackageCache: anObject disablePackageCache := anObject! ! !MetacelloSpecLoader class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26117283! on: aMetacelloPackagesSpec ^(self new) spec: aMetacelloPackagesSpec; yourself! ! !MetacelloSpecLoader methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116925! load self subclassResponsibility! ! !MetacelloSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116446! loadType "#atomic or #linear" ^self project loadType! ! !MetacelloSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116582! project ^self spec project! ! !MetacelloSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116691! spec ^spec! ! !MetacelloSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116784! spec: aMetacelloPackagesSpec spec := aMetacelloPackagesSpec! ! !MetacelloSpecLoader methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26117038! unload self subclassResponsibility! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966046! actionLabel ^'Recording '! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966177! afterLoads afterLoads == nil ifTrue: [ afterLoads := OrderedCollection new ]. ^afterLoads! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966373! beforeLoads beforeLoads == nil ifTrue: [ beforeLoads := OrderedCollection new ]. ^beforeLoads! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25970150! currentVersionInfoFor: packageSpec ^self loadData currentVersionInfoFor: packageSpec ifAbsent: [ nil ] ! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25967919! doingLoads: aBlock "escape mechanism for recording and null loaders to skip doing loaderlike things" ! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25970022! ensureForDevelopment ^false! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966573! evalDoits evalDoits == nil ifTrue: [ evalDoits := false ]. ^evalDoits! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966750! evalDoits: aBool evalDoits := aBool! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25968122! linearLoadPackageSpec: packageSpec gofer: gofer MetacelloPlatform current do: [ | externalReference loadBlock answers fake | externalReference := self resolveRecordingPackageSpecReference: packageSpec gofer: gofer. loadBlock := [ self preLoad: packageSpec. (MetacelloDirective loadPackage: packageSpec externalReference: externalReference loader: self) addTo: self loadDirective. self postLoad: packageSpec ]. (answers := packageSpec answers) notEmpty ifTrue: [ loadBlock valueSupplyingMetacelloAnswers: answers ] ifFalse: [ loadBlock value ]. fake := packageSpec copy. fake name: fake file. self loadData addVersion: fake versionInfo: fake resolvedReference: externalReference packageSpec: packageSpec ] displaying: 'Recording ', packageSpec file! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25969057! loadPackageDirective: aPackageLoadDirective gofer: aGofer "Noop"! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25969223! loadPackageDirectives: pkgLoads gofer: aGofer "Noop"! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25966891! loadedPackages | packages | packages := OrderedCollection new. self loadDirective packageDirectivesDo: [:directive | packages add: directive file ]. ^packages! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25967158! loadedRepositories | repos | repos := OrderedCollection new. self repositoryMap values collect: [:coll | repos addAll: coll ]. ^repos! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25967399! loadingSpecLoader ^self! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25967528! packages | packages | packages := OrderedCollection new. self loadDirective packageDirectivesDo: [:directive | packages add: directive spec ]. ^packages! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25969376! postLoad: packageOrVersionSpec self evalDoits ifFalse: [ ^self ]. packageOrVersionSpec postLoadDoItBlock ~~ nil ifTrue: [ self afterLoads add: packageOrVersionSpec name, ' load' ]. super postLoad: packageOrVersionSpec! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'doits' stamp: 'dkh 6/8/2012 14:04:22' prior: 25969698! preLoad: packageOrVersionSpec self evalDoits ifFalse: [ ^self ]. packageOrVersionSpec preLoadDoItBlock ~~ nil ifTrue: [ self beforeLoads add: packageOrVersionSpec name, ' load' ]. super preLoad: packageOrVersionSpec! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25967789! recordingSpecLoader ^self! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! resolvePackageSpecReferences: packageSpec gofer: gofer | versionReference references localGofer | localGofer := gofer. self hasRepositoryOverrides not ifTrue: [ packageSpec repositorySpecs notEmpty ifTrue: [ localGofer := MetacelloGofer new. (self repositoriesFrom: packageSpec repositorySpecs) do: [:repo | localGofer repository: repo ]]]. (packageSpec getFile == nil or: [ self shouldDisablePackageCache ]) ifTrue: [ "don't use package-cache when trying to get latest version" localGofer disablePackageCache ]. versionReference := packageSpec goferLoaderReference. references := versionReference resolveAllWith: localGofer. localGofer enablePackageCache. ^references! ! !MetacelloNullRecordingMCSpecLoader methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25971163! resolveRecordingPackageSpecReference: packageSpec gofer: gofer | externalPackageReference | externalPackageReference := packageSpec file == nil ifTrue: [ GoferPackageReference name: packageSpec name ] ifFalse: [ GoferResolvedReference name: packageSpec file repository: nil ]. packageSpec repositorySpecs isEmpty ifTrue: [ self repositoryMap at: externalPackageReference packageName put: (gofer repositories reject: [:repo | repo = MCCacheRepository default ]) ] ifFalse: [ self repositoryMap at: externalPackageReference packageName put: (packageSpec repositorySpecs collect: [:repoSpec | repoSpec createRepository ]) ]. ^externalPackageReference! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25889321! allPackagesForSpecNamed: aStringOrArray "resolves list of packages associated with the named spec. If the spec is a packages, answer a list including the package and the transitive closure on its #requires: and #includes: fields. If the spec is a project, answer a list of the packages associated with the project, following the transitive closure on packages reachable starting with the #loads: field. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" "In essence, this query answers the list of all packages that would be loaded if the package named were loaded." "If there is no spec named , answers an empty list" ^self allPackagesForSpecNamed: aStringOrArray ifAbsent: [ ^#() ]! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25890261! allPackagesForSpecNamed: aStringOrArray ifAbsent: aBlock "resolves list of packages associated with the named spec. If the spec is a packages, answer a list including the package and the transitive closure on its #requires: and #includes: fields. If the spec is a project, answer a list of the packages associated with the project, following the transitive closure on packages reachable starting with the #loads: field. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" "In essence, this query answers the list of all packages that would be loaded if the package named were loaded." "If there is no spec named , aBlock is evaluated" ^aStringOrArray resolvePackageSpecsNamedForMetacelloMCVersion: self visited: MetacelloVisitedPackages new ifAbsent: aBlock ! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25897803! allPackagesForSpecs: pkgSpecs visited: visited | coll | coll := Dictionary new. pkgSpecs do: [:pkgSpec | (pkgSpec resolveToAllPackagesIn: self spec visited: visited) do: [:pkg | coll at: pkg name put: pkg ]]. ^ coll values asOrderedCollection ! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25887306! cacheRepository: repository "by default cacheRepository is an MCDictionaryRepository" self loaderPolicy cacheRepository: repository! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 9/10/2012 15:43'! computeVersionStatus " #allLoadedToSpec - all projects and packages are loaded and match specification #loadedToSpec - all loaded projects and packages match specifications (at least one package loaded) #loadedMatchConstraints - all loaded projects and packages match constraints (at least one package loaded) #somethingLoaded - at least one package loaded " self spec computeVersionStatus: [ :status | ^ status ]. ^ #noStatus! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25891294! currentlyLoadedClassesInVersion ^self spec currentlyLoadedClassesInVersion! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25891448! currentlyLoadedExtensionClassesInVersion ^self spec currentlyLoadedExtensionClassesInVersion! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:53' prior: 25891620! defaultPackageNamesToLoad "Answer the list of packages and projects to be loaded --> packages already loaded" ^ self defaultPackageNamesToLoad: self spec defaultPackageNames! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:53' prior: 25891885! defaultPackageNamesToLoad: defaultList "Answer the list of packages and projects to be loaded: packages already loaded plust defaultList" ^ self packageAndProjectNamesToLoad: defaultList loader: self loader! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25898144! doFetchRequiredFromArray: anArray | oldPolicy oldBypassProgress displayString | displayString := self versionNumber printString, ' of ', self spec projectLabel. Transcript cr; show: 'Fetching ', displayString, '...'. oldPolicy := loaderPolicy. oldBypassProgress := MetacelloPlatform current bypassProgressBars. self loaderPolicy silently ifTrue: [ MetacelloPlatform current bypassProgressBars: true ]. [ | ans | ans := self fetchRequiredFromArray: anArray. Transcript cr; show: '...finished ', self versionNumber printString. ^ans ] ensure: [ MetacelloPlatform current bypassProgressBars: oldBypassProgress. loaderPolicy := oldPolicy ] ! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25898885! doLoadRequiredFromArray: anArray | displayString oldPolicy oldBypassProgress | displayString := self versionNumber printString, ' of ', self spec projectLabel. Transcript cr; show: 'Loading ', displayString, '...'. oldPolicy := loaderPolicy. oldBypassProgress := MetacelloPlatform current bypassProgressBars. self loaderPolicy silently ifTrue: [ MetacelloPlatform current bypassProgressBars: true ]. [ | fetchLoader | fetchLoader := self fetchRequiredFromArray: (self defaultPackageNamesToLoad: anArray). MetacelloPlatform current do: [ fetchLoader doLoad ] displaying: 'Loading ', displayString. Transcript cr; show: '...finished ', self versionNumber printString. ^fetchLoader ] ensure: [ MetacelloPlatform current bypassProgressBars: oldBypassProgress. loaderPolicy := oldPolicy ] ! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25899788! doRecordRequiredFromArray: anArray | originalLoader oldPolicy displayString oldBypassProgress | displayString := self versionNumber printString, ' of ', self spec projectLabel. Transcript cr; show: 'Recording ', displayString, '...'. originalLoader := self versionSpec loader. oldPolicy := loaderPolicy. oldBypassProgress := MetacelloPlatform current bypassProgressBars. self loaderPolicy silently ifTrue: [ MetacelloPlatform current bypassProgressBars: true ]. [ MetacelloPlatform current do: [ | ans | self versionSpec loader: originalLoader recordingSpecLoader. ans := (self executeLoadFromArray: anArray) copy. Transcript cr; show: '...finished ', self versionNumber printString. ^ans ] displaying: 'Recording ', displayString ] ensure: [ MetacelloPlatform current bypassProgressBars: oldBypassProgress. self versionSpec loader: originalLoader. loaderPolicy := oldPolicy ]! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25900802! executeLoadFromArray: anArray | loader mcLoader | loader := MetacelloMCVersionSpecLoader on: self spec. loader required: anArray. loaderPolicy notNil ifTrue: [ loader loaderPolicy: loaderPolicy ]. ^loader load! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888408! fetch ^self doFetchRequiredFromArray: self spec defaultPackageNames! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888562! fetch: required ^required fetchRequiredForMetacelloMCVersion: self ! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25901093! fetchRequiredFromArray: anArray | originalLoader displayString newLoader | originalLoader := self versionSpec loader. newLoader := originalLoader fetchingSpecLoader. displayString := newLoader actionLabel , self versionNumber printString , ' of ' , self spec projectLabel. MetacelloPlatform current do: [ [ self versionSpec loader: newLoader. MetacelloPlatform current useStackCacheDuring: [ :dict | ^ self executeLoadFromArray: anArray ] defaultDictionary: Dictionary new ] ensure: [ self versionSpec loader: originalLoader ] ] displaying: displayString! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25887531! ignoreImage: aBool "by default ignoreImage is false" self loaderPolicy ignoreImage: aBool! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888716! load ^self doLoadRequiredFromArray: self spec defaultPackageNames! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888860! load: required ^required loadRequiredForMetacelloMCVersion: self ! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25901761! loadRequiredFromArray: anArray | displayString | displayString := 'Loading ', self versionNumber printString, ' of ', self spec projectLabel. MetacelloPlatform current do: [ ^self executeLoadFromArray: anArray ] displaying: displayString! ! !MetacelloMCVersion methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25902083! loader: aLoader self versionSpec loader: aLoader! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25887713! loaderPolicy loaderPolicy == nil ifTrue: [ loaderPolicy := MetacelloLoaderPolicy new ]. ^ loaderPolicy! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25887905! loaderPolicy: anObject loaderPolicy := anObject! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:53' prior: 25892971! packageAndProjectNamesToLoad: defaultList loader: aLoader "Answer the list of packages and projects to be loaded: packages already loaded plust defaultList" | loadedPackageNames projectMap loadedProjectNames list | loadedPackageNames := ((self packages select: [:pkg | pkg isPackageLoaded: aLoader ]) collect: [:pkg | pkg name ]) asSet, defaultList. projectMap := Dictionary new. self projects do: [:prj | prj className ~~ nil ifTrue: [ | coll loaded | coll := projectMap at: prj className ifAbsent: [ coll := OrderedCollection new. projectMap at: prj className put: coll. coll]. (loaded := prj loadedPackageNames: aLoader) isEmpty ifFalse: [ coll add: prj -> (loaded -> prj loadPackageList) ]]]. loadedProjectNames := Set new. projectMap keysAndValuesDo: [:prjClass :coll | coll size <= 1 ifTrue: [ coll do: [:assoc | loadedProjectNames add: assoc key name ]] ifFalse: [ "multiple project references against the same configuration ... only count project as loaded if there is an exact match for loaded projects... See http://code.google.com/p/metacello/issues/detail?id=86" coll do: [:assoc | | loaded packageList | loaded := assoc value key. "loaded packages from project" packageList := assoc value value. "loadlist for project" (packageList difference: loaded) isEmpty ifTrue: [ loadedProjectNames add: assoc key name ]]]]. list := loadedPackageNames, loadedProjectNames. list isEmpty ifTrue: [ ^self spec defaultPackageNames]. ^list! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:16' prior: 25894981! packages "Answers the list of packages associated with this version" | packages | packages := OrderedCollection new. self spec projectDo: [:ignored | ] packageDo: [:pkg | packages add: pkg ] groupDo: [:ignored | ]. ^packages ! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25895291! packagesForSpecNamed: aString "resolves list of packages associated with the named spec. If the spec is a packages, answer a list including only the package. #requires: and #includes: fields in the package are ignored. If the spec is a project, answers an empty list. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" "If there is no spec named , answers an empty list" ^self packagesForSpecNamed: aString ifAbsent: [ ^#() ]! ! !MetacelloMCVersion methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25895955! packagesForSpecNamed: aString ifAbsent: aBlock "resolves list of packages associated with the named spec. If the spec is a packages, answer a list including only the package. #requires: and #includes: fields in the package are ignored. If the spec is a project, answers an empty list. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" "If there is no spec named , aBlock is evaluated" | pkgSpec | pkgSpec := self spec packageNamed: aString ifAbsent: aBlock. ^pkgSpec resolveToPackagesIn: self spec visited: MetacelloVisitedPackages new! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25889013! record ^self doRecordRequiredFromArray: self spec defaultPackageNames! ! !MetacelloMCVersion methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25889170! record: required ^required recordRequiredForMetacelloMCVersion: self ! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888040! repositoryOverrides: repositoriesCollection self loaderPolicy overrideRepositories: repositoriesCollection! ! !MetacelloMCVersion methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25888237! silently: aBool "by default silently is false" self loaderPolicy silently: aBool! ! !MetacelloSemanticVersionNumber commentStamp: 'dkh 6/24/2012 18:20' prior: 71960763! MetacelloSemanticVersionNumber conforms to version 2.0.0-rc.1 of [Semantic Versioning 2.0.0-rc.1](http://semver.org/) The most important thing that you need to know is that: **A normal version number MUST take the form X.Y.Z where X, Y, and Z are non-negative integers.** **Semantic Versioning Specification** extracted from [Semantic versioning 2.0.0-rc.1](https://github.com/mojombo/semver/blob/3c7f2e8df747ea0ca15208fdfc90e3275240184f/semver.md): Semantic Versioning Specification (SemVer) ------------------------------------------ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. 1. Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it should be precise and comprehensive. 1. A normal version number MUST take the form X.Y.Z where X, Y, and Z are non-negative integers. X is the major version, Y is the minor version, and Z is the patch version. Each element MUST increase numerically by increments of one. For instance: 1.9.0 -> 1.10.0 -> 1.11.0. 1. Once a versioned package has been released, the contents of that version MUST NOT be modified. Any modifications must be released as a new version. 1. Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable. 1. Version 1.0.0 defines the public API. The way in which the version number is incremented after this release is dependent on this public API and how it changes. 1. Patch version Z (x.y.Z | x > 0) MUST be incremented if only backwards compatible bug fixes are introduced. A bug fix is defined as an internal change that fixes incorrect behavior. 1. Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backwards compatible functionality is introduced to the public API. It MUST be incremented if any public API functionality is marked as deprecated. It MAY be incremented if substantial new functionality or improvements are introduced within the private code. It MAY include patch level changes. Patch version MUST be reset to 0 when minor version is incremented. 1. Major version X (X.y.z | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the public API. It MAY include minor and patch level changes. Patch and minor version MUST be reset to 0 when major version is incremented. 1. A pre-release version MAY be denoted by appending a hyphen and a series of dot separated identifiers immediately following the patch version. Identifiers MUST be comprised of only ASCII alphanumerics and dash [0-9A-Za-z-]. Pre-release versions satisfy but have a lower precedence than the associated normal version. Examples: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92. 1. A build version MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch version or pre-release version. Identifiers MUST be comprised of only ASCII alphanumerics and dash [0-9A-Za-z-]. Build versions satisfy and have a higher precedence than the associated normal version. Examples: 1.0.0+build.1, 1.3.7+build.11.e0f985a. 1. Precedence MUST be calculated by separating the version into major, minor, patch, pre-release, and build identifiers in that order. Major, minor, and patch versions are always compared numerically. Pre-release and build version precedence MUST be determined by comparing each dot separated identifier as follows: identifiers consisting of only digits are compared numerically and identifiers with letters or dashes are compared lexically in ASCII sort order. Numeric identifiers always have lower precedence than non-numeric identifiers. Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build < 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a. About ----- The Semantic Versioning specification is authored by [Tom Preston-Werner](http://tom.preston-werner.com), inventor of Gravatars and cofounder of GitHub. If you'd like to leave feedback, please [open an issue on GitHub](https://github.com/mojombo/semver/issues). License ------- Creative Commons - CC BY 3.0 http://creativecommons.org/licenses/by/3.0/ ! !MetacelloSemanticVersionNumber class methodsFor: 'private' stamp: 'dkh 6/22/2012 14:53'! extractNumericComponent: subString forPattern: forPattern "$. separated components are integers" | number | forPattern ifTrue: [ ^ subString ]. number := [ subString asNumber ] on: Error do: [ :ex | ex return: subString ]. ^ number asString = subString ifTrue: [ number ] ifFalse: [ subString ]! ! !MetacelloSemanticVersionNumber class methodsFor: 'instance creation' stamp: 'dkh 6/22/2012 14:50'! fromString: aString ^ self fromString: aString forPattern: false! ! !MetacelloSemanticVersionNumber class methodsFor: 'instance creation' stamp: 'dkh 6/22/2012 16:48'! fromString: aString forPattern: forPattern | new tokens preRelease build versionString identifierCount normalEnd preReleaseEnd normalComponents preReleaseComponents buildComponents | normalComponents := OrderedCollection new. preReleaseComponents := OrderedCollection new. buildComponents := OrderedCollection new. preRelease := aString indexOf: $- startingAt: 1. build := aString indexOf: $+ startingAt: 1. (build > 0 and: [ preRelease > build ]) ifTrue: [ preRelease := 0 ]. normalEnd := preRelease = 0 ifTrue: [ build = 0 ifTrue: [ aString size ] ifFalse: [ build - 1 ] ] ifFalse: [ preRelease - 1 ]. versionString := aString copyFrom: 1 to: normalEnd. identifierCount := 0. (versionString findTokens: '.') do: [ :subString | | integer | forPattern ifTrue: [ integer := subString ] ifFalse: [ integer := subString asInteger. integer < 0 ifTrue: [ self error: 'invalid version number: normal version component must be integer ' , subString printString ] ]. normalComponents add: integer. identifierCount := identifierCount + 1 ]. (forPattern not and: [ identifierCount ~= 3 ]) ifTrue: [ self error: 'invalid version number: normal version must have only 3 components' ]. preReleaseEnd := build = 0 ifTrue: [ aString size ] ifFalse: [ build - 1 ]. preRelease > 0 ifTrue: [ versionString := aString copyFrom: preRelease + 1 to: preReleaseEnd. (versionString findTokens: '.') do: [ :subString | (forPattern or: [ self isSemanticIdentifier: subString ]) ifFalse: [ self error: 'invalid version number: preRelease version component must be one of [0-9A-Za-z-]' ]. preReleaseComponents add: (self extractNumericComponent: subString forPattern: forPattern) ] ]. build > 0 ifTrue: [ versionString := aString copyFrom: build + 1 to: aString size. (versionString findTokens: '.') do: [ :subString | (forPattern or: [ self isSemanticIdentifier: subString ]) ifFalse: [ self error: 'invalid version number: build version component must be one of [0-9A-Za-z-]' ]. buildComponents add: (self extractNumericComponent: subString forPattern: forPattern) ] ]. ^ self new normalVersion: normalComponents; preReleaseVersion: preReleaseComponents; buildVersion: buildComponents; yourself! ! !MetacelloSemanticVersionNumber class methodsFor: 'private' stamp: 'dkh 6/21/2012 18:43'! isSemanticIdentifier: aString "whether the receiver is composed entirely of alphanumerics" aString do: [ :c | c isAlphaNumeric ifFalse: [ c = $- ifFalse: [ ^ false ] ] ]. ^ true! ! !MetacelloSemanticVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/21/2012 19:52'! < aMetacelloVersionNumber aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. ^ self compareLessThan: aMetacelloVersionNumber! ! !MetacelloSemanticVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/21/2012 19:53'! = aMetacelloVersionNumber aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. ^ self compareEqualTo: aMetacelloVersionNumber! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 17:59'! approximateBase | base | base := self copyFrom: 1 to: self size - 1. base at: base size put: (base at: base size) + 1. ^base! ! !MetacelloSemanticVersionNumber methodsFor: 'converting' stamp: 'dkh 6/21/2012 18:02'! asMetacelloSemanticVersionNumber ^ self! ! !MetacelloSemanticVersionNumber methodsFor: 'printing' stamp: 'dkh 07/09/2012 16:15'! asString "Answer a string that represents the receiver." ^ self printString! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:06'! buildVersion buildVersion ifNil: [ buildVersion := #() ]. ^ buildVersion! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:05'! buildVersion: anObject buildVersion := anObject! ! !MetacelloSemanticVersionNumber methodsFor: 'private' stamp: 'dkh 6/22/2012 11:02'! compareEqualTo: aMetacelloVersionNumber aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. (self compareEqualTo: self normalVersion other: aMetacelloVersionNumber normalVersion) ifFalse: [ ^ false ]. (self compareEqualTo: self preReleaseVersion other: aMetacelloVersionNumber preReleaseVersion) ifFalse: [ ^ false ]. ^ self compareEqualTo: self buildVersion other: aMetacelloVersionNumber buildVersion! ! !MetacelloSemanticVersionNumber methodsFor: 'private' stamp: 'dkh 6/21/2012 21:26'! compareEqualTo: myComponents other: otherComponents | mySize | mySize := myComponents size. mySize = otherComponents size ifFalse: [ ^ false ]. 1 to: mySize do: [ :i | (myComponents at: i) = (otherComponents at: i) ifFalse: [ ^ false ] ]. ^ true! ! !MetacelloSemanticVersionNumber methodsFor: 'private' stamp: 'dkh 6/22/2012 15:20'! compareLessThan: aMetacelloVersionNumber | myComponents otherComponents defaultResult | aMetacelloVersionNumber species = self species ifFalse: [ ^ false ]. myComponents := self normalVersion. otherComponents := aMetacelloVersionNumber normalVersion. defaultResult := true. (self compareEqualTo: myComponents other: otherComponents) ifTrue: [ defaultResult := false ] ifFalse: [ (self compareLessThan: myComponents other: otherComponents version: #'normal') ifFalse: [ ^ false ] ]. myComponents := self preReleaseVersion. otherComponents := aMetacelloVersionNumber preReleaseVersion. (self compareEqualTo: myComponents other: otherComponents) ifTrue: [ myComponents size > 0 ifTrue: [ defaultResult := false ] ] ifFalse: [ ^ self compareLessThan: myComponents other: otherComponents version: #'preRelease' ]. myComponents := self buildVersion. otherComponents := aMetacelloVersionNumber buildVersion. ^ (self compareEqualTo: myComponents other: otherComponents) ifTrue: [ defaultResult ] ifFalse: [ self compareLessThan: myComponents other: otherComponents version: #'build' ]! ! !MetacelloSemanticVersionNumber methodsFor: 'private' stamp: 'dkh 6/22/2012 15:28'! compareLessThan: myComponents other: otherComponents version: version | mySize aSize commonSize count more | mySize := myComponents size. aSize := otherComponents size. commonSize := mySize min: aSize. count := 0. more := true. [ more and: [ count < commonSize ] ] whileTrue: [ (myComponents at: count + 1) = (otherComponents at: count + 1) ifTrue: [ count := count + 1 ] ifFalse: [ more := false ] ]. count < commonSize ifTrue: [ ^ (myComponents at: count + 1) metacelloSemanticVersionComponentLessThan: (otherComponents at: count + 1) ]. mySize < aSize ifTrue: [ mySize = 0 ifTrue: [ #'preRelease' == version ifTrue: [ ^ false ]. ^ true ]. (myComponents at: commonSize) = (otherComponents at: commonSize) ifFalse: [ ^ true ]. ^ true ] ifFalse: [ mySize = aSize ifTrue: [ ^ false ]. aSize = 0 ifTrue: [ #'build' == version ifTrue: [ ^ false ]. ^ true ]. (myComponents at: commonSize) = (otherComponents at: commonSize) ifFalse: [ ^ false ]. ^ true ]! ! !MetacelloSemanticVersionNumber methodsFor: 'copying' stamp: 'dkh 6/21/2012 17:59'! copyFrom: start to: stop "Answer a copy of a subset of the receiver, starting from element at index start until element at index stop." | newSize new j | newSize := stop - start + 1. new := self species new: newSize. j := 0. start to: stop do: [:i | new at: j + 1 put: (self at: i). j := j + 1 ]. ^new! ! !MetacelloSemanticVersionNumber methodsFor: 'operations' stamp: 'dkh 6/21/2012 17:59'! decrementMinorVersionNumber | int | self size to: 1 by: -1 do: [ :index | (int := self at: index) isString ifFalse: [ int > 0 ifTrue: [ self at: index put: int - 1 ]. ^ self ] ]! ! !MetacelloSemanticVersionNumber methodsFor: 'enumerating' stamp: 'dkh 6/21/2012 17:59'! do: aBlock "Refer to the comment in Collection|do:." 1 to: self size do: [:index | aBlock value: (self at: index)]! ! !MetacelloSemanticVersionNumber methodsFor: 'enumerating' stamp: 'dkh 6/21/2012 17:59'! do: elementBlock separatedBy: separatorBlock "Evaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between." | beforeFirst | beforeFirst := true. self do: [:each | beforeFirst ifTrue: [beforeFirst := false] ifFalse: [separatorBlock value]. elementBlock value: each]! ! !MetacelloSemanticVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/22/2012 16:10'! hash ^ self versionComponents hash! ! !MetacelloSemanticVersionNumber methodsFor: 'operations' stamp: 'dkh 6/21/2012 17:59'! incrementMinorVersionNumber | int | self size to: 1 by: -1 do: [:index | (int := self at: index) isString ifFalse: [ self at: index put: int + 1. ^self ]].! ! !MetacelloSemanticVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/22/2012 14:57'! match: aVersionPattern "Answer whether the version number of the receiver matches the given pattern string. A Metacello version number is made up of version sequences delimited by the characters $. and $-. The $. introduces a numeric version sequence and $- introduces an alphanumeric version sequence. A version pattern is made up of version pattern match sequences. also delimited by the characters $. and $-.. Each pattern match sequence is tested against the corresponding version sequence of the receiver, using the 'standard' pattern matching rules. All sequences must answer true for a match. The special pattern sequence '?' is a match for the corresponding version sequence and all subsequent version sequences. '?' as the version pattern matches all versions. No more version pattern sequences are permitted once the '?' sequence is used. If used, it is the last version pattern sequence. " | patternVersion mySize patternSize components | patternVersion := (self class fromString: aVersionPattern forPattern: true) versionComponents. components := self versionComponents. mySize := components size. patternSize := patternVersion size. mySize = patternSize ifFalse: [ mySize < patternSize ifTrue: [ ^ false ]. (patternVersion at: patternSize) ~= '?' ifTrue: [ ^ false ]. mySize := patternSize ]. 1 to: mySize do: [ :i | | pattern | pattern := (patternVersion at: i) asString. pattern = '?' ifTrue: [ i = mySize ifFalse: [ ^ self error: 'Invalid version match pattern: ' , aVersionPattern printString ] ] ifFalse: [ (pattern match: (components at: i) asString) ifFalse: [ ^ false ] ] ]. ^ true! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:06'! normalVersion normalVersion ifNil: [ normalVersion := #() ]. ^ normalVersion! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:05'! normalVersion: anObject normalVersion := anObject! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:06'! preReleaseVersion preReleaseVersion ifNil: [ preReleaseVersion := #() ]. ^ preReleaseVersion! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 21:05'! preReleaseVersion: anObject preReleaseVersion := anObject! ! !MetacelloSemanticVersionNumber methodsFor: 'printing' stamp: 'dkh 6/21/2012 21:16'! print: components prefix: prefixChar on: aStream | beforeFirst | beforeFirst := true. components do: [ :component | beforeFirst ifTrue: [ beforeFirst := false. prefixChar ifNotNil: [ aStream nextPut: prefixChar ] ] ifFalse: [ aStream nextPut: $. ]. aStream nextPutAll: component asString ]! ! !MetacelloSemanticVersionNumber methodsFor: 'printing' stamp: 'dkh 6/21/2012 21:17'! printOn: aStream self print: self normalVersion prefix: nil on: aStream. self print: self preReleaseVersion prefix: $- on: aStream. self print: self buildVersion prefix: $+ on: aStream! ! !MetacelloSemanticVersionNumber methodsFor: 'private' stamp: 'dkh 6/22/2012 14:44'! versionComponents ^ self normalVersion , self preReleaseVersion , self buildVersion! ! !MetacelloSemanticVersionNumber methodsFor: 'accessing' stamp: 'dkh 6/21/2012 17:59'! versionString | strm | strm := WriteStream on: String new. self printOn: strm. ^strm contents! ! !MetacelloSemanticVersionNumber methodsFor: 'comparing' stamp: 'dkh 6/21/2012 17:59'! ~> aMetacelloVersionNumber aMetacelloVersionNumber size == 1 ifTrue: [ ^false ]. ^self >= aMetacelloVersionNumber and: [ self < aMetacelloVersionNumber approximateBase ]! ! !MetacelloTestsGoferUnload methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! execute self workingCopies do: [ :copy | self unload: copy ]. self model load. self gofer metacelloCleanup. self workingCopies do: [ :copy | self unregister: copy ]! ! !MetacelloTestsGoferUnload methodsFor: 'unloading' stamp: 'dkh 6/12/2012 15:41:23.319'! unloadClasses: aWorkingCopy "skip this so that tests run faster"! ! !MetacelloAtomicLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25774452! directivesDo: aBlock aBlock value: self. self preloads do: [:directive | directive directivesDo: aBlock ]. self loadDirectives do: [:directive | directive directivesDo: aBlock ]. self postloads do: [:directive | directive directivesDo: aBlock ]. ! ! !MetacelloAtomicLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25773151! finalizeLoad: aGofer "load the accumulated packages (if any), reset the package list" | pkgLoads | self preloads do: [:directive | super loadPreloadDirective: directive ]. preloads := nil. (pkgLoads := self packageloads) notEmpty ifTrue: [ self loader loadingSpecLoader loadPackageDirectives: pkgLoads gofer: aGofer. self packageloads: nil ]. self postloads do: [:directive | super loadPostloadDirective: directive ]. postloads := nil! ! !MetacelloAtomicLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25773708! loadAtomicLoadDirective: aLoaderDirective gofer: aGofer aLoaderDirective loadDirectives do: [:directive | directive loadUsing: self gofer: aGofer ]. ! ! !MetacelloAtomicLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25773955! loadLinearLoadDirective: aLoaderDirective gofer: aGofer self finalizeLoad: aGofer. super loadLinearLoadDirective: aLoaderDirective gofer: aGofer! ! !MetacelloAtomicLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25775507! loadPackageDirective: aPackageLoadDirective gofer: aGofer "accumulate packages" self packageloads add: aPackageLoadDirective! ! !MetacelloAtomicLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25775731! loadPostloadDirective: aPostloadDirective "accumulate postloads" self postloads add: aPostloadDirective! ! !MetacelloAtomicLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25775933! loadPreloadDirective: aPreloadDirective "accumulate preloads" self preloads add: aPreloadDirective! ! !MetacelloAtomicLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25774198! loadUsing: aLoaderDirective gofer: aGofer self loadDirectives isEmpty ifTrue: [ ^self ]. aLoaderDirective loadAtomicLoadDirective: self gofer: aGofer. ! ! !MetacelloAtomicLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25772321! packageloads packageloads == nil ifTrue: [ packageloads := OrderedCollection new ]. ^ packageloads! ! !MetacelloAtomicLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25772519! packageloads: anObject packageloads := anObject! ! !MetacelloAtomicLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25772664! postloads postloads == nil ifTrue: [ postloads := OrderedCollection new ]. ^ postloads! ! !MetacelloAtomicLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25772850! preloads preloads == nil ifTrue: [ preloads := OrderedCollection new ]. ^ preloads! ! !MetacelloAtomicLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25774802! prepostLoadDirectivesDo: aBlock self preloads do: [:directive | directive prepostLoadDirectivesDo: aBlock ]. self loadDirectives do: [:directive | directive prepostLoadDirectivesDo: aBlock ]. self postloads do: [:directive | directive prepostLoadDirectivesDo: aBlock ].! ! !MetacelloAtomicLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25775174! prepostLoadsDo: aBlock self preloads do: [:directive | directive prepostLoadDo: aBlock ]. self loadDirectives do: [:directive | directive prepostLoadDo: aBlock ]. self postloads do: [:directive | directive prepostLoadDo: aBlock ]. ! ! !MetacelloAtomicLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25773032! title ^'atomic load'! ! !ProfStefHelp commentStamp: 'LaurentLaffont 2/15/2011 22:17' prior: 71965246! HelpSystem book documenting ProfStef! !ProfStefAPIHelp commentStamp: 'LaurentLaffont 2/15/2011 22:18' prior: 71965358! I'm a ProfStef which build a HelpSystem book by collecting comment from classes and method.! !ProfStefAPIHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:14'! bookName ^ 'Reference'! ! !ProfStefAPIHelp class methodsFor: 'defaults' stamp: 'LaurentLaffont 9/19/2010 15:14'! builder ^ PackageAPIHelpBuilder! ! !ProfStefAPIHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:15'! packages ^ #('ProfStef-Core')! ! !ProfStefHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:07'! bookName ^ 'ProfStef'! ! !ProfStefHelp class methodsFor: 'testing' stamp: 'AlainPantec 2/23/2012 08:16'! canHaveSyntaxHighlighting ^ true ! ! !ProfStefHelp class methodsFor: 'pages' stamp: 'LaurentLaffont 9/19/2010 15:13'! createATutorial ^ HelpTopic title: 'Create a tutorial' contents: 'See AbstractTutorial comment: ', AbstractTutorial comment.! ! !ProfStefHelp class methodsFor: 'pages' stamp: 'LaurentLaffont 9/19/2010 16:38'! introduction ^ HelpTopic title: 'Introduction' contents: 'ProfStef is a framework to create interactive tutorials'.! ! !ProfStefHelp class methodsFor: 'pages' stamp: 'LaurentLaffont 9/19/2010 15:11'! listOfTutorials |contents| contents := String streamContents: [:aStream| AbstractTutorial tutorials do: [:aTutorial| aStream nextPutAll: aTutorial title; cr; tab; nextPutAll: 'ProfStef goOn:'; nextPutAll: aTutorial name; cr;cr. ] ]. ^ HelpTopic title: 'List of tutorials' contents: contents.! ! !ProfStefHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:13'! pages ^ #(introduction listOfTutorials createATutorial)! ! !ProfStefTutorialsHelp commentStamp: 'LaurentLaffont 2/15/2011 22:18' prior: 71965531! I'm a HelpSystem book which list all ProfStef tutorials! !ProfStefTutorialsHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:16'! bookName ^ 'Browse tutorials'! ! !ProfStefTutorialsHelp class methodsFor: 'defaults' stamp: 'LaurentLaffont 9/19/2010 15:17'! builder ^ ProfStefHelpTutorialBuilder! ! !ProfStefTutorialsHelp class methodsFor: 'menu' stamp: 'LaurentLaffont 11/22/2010 22:00'! menuCommandOn: aBuilder (aBuilder item: #'ProfStef Tutorials') parent: #Help; action:[ HelpBrowser openOn: self ]; help: 'Browse and create ProfStef tutorials'..! ! !MetacelloPrePostLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26016587! evaluateSupplyingAnswers: loadBlock | answers | (answers := self spec answers) notEmpty ifTrue: [ loadBlock valueSupplyingMetacelloAnswers: answers ] ifFalse: [ loadBlock value]! ! !MetacelloPrePostLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26016872! prepostLoadDirectivesDo: aBlock aBlock value: self! ! !MetacelloPrePostLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26017024! prepostLoadDo: aBlock aBlock value: self! ! !Symbol methodsFor: '*metacello-core' stamp: 'dkh 9/7/2012 13:11' prior: 51351485! asMetacelloAttributeList ^ {self}! ! !Symbol methodsFor: '*metacello-core' stamp: 'dkh 9/7/2012 13:44' prior: 51351597! asMetacelloAttributePath ^ MetacelloMethodSectionPath with: {self}! ! !Symbol methodsFor: '*metacello-core' stamp: 'DaleHenrichs 12/21/2010 13:54' prior: 51352150! setPostLoadDoItInMetacelloSpec: aMetacelloSpec self precedence == 0 ifTrue: [ self error: 'Invalid selector' ]. aMetacelloSpec setPostLoadDoIt: (aMetacelloSpec project valueHolderSpec value: self; yourself)! ! !Symbol methodsFor: '*metacello-core' stamp: 'DaleHenrichs 12/21/2010 13:55' prior: 51352385! setPreLoadDoItInMetacelloSpec: aMetacelloSpec self precedence == 0 ifTrue: [ self error: 'Invalid selector' ]. aMetacelloSpec setPreLoadDoIt: (aMetacelloSpec project valueHolderSpec value: self; yourself)! ! !MetacelloConfigTemplate class methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25805861! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !MetacelloConfigTemplate class methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25808174! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #'ConfigurationOf' ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #'ConfigurationOf' ifAbsent: aBlock ]. ! ! !MetacelloConfigTemplate class methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25808479! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !MetacelloConfigTemplate class methodsFor: 'private' stamp: 'dkh 05/08/2013 11:39' prior: 25808651! ensureMetacelloBaseConfiguration Smalltalk at: #'ConfigurationOf' ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/dkh/metacello/main' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-dkh.107' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !MetacelloConfigTemplate class methodsFor: 'metacello tool support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25807991! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !MetacelloConfigTemplate class methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25806983! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !MetacelloConfigTemplate class methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25807298! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !MetacelloConfigTemplate class methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25807632! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !MetacelloConfigTemplate class methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25805723! project ^self new project! ! !MetacelloConfigTemplate class methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25806233! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !MetacelloConfigTemplate methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25804722! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !MetacelloConfigTemplate methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25805072! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project" (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !MetacelloGroupSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25836193! answers: aListOfPairs self shouldNotImplement! ! !MetacelloGroupSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25836446! configMethodCascadeOn: aStream member: aMember last: lastCascade indent: indent aMember methodUpdateSelector == #remove: ifTrue: [ aStream nextPutAll: 'removeGroup: ', self name printString. ] ifFalse: [ aStream nextPutAll: 'group: ', self name printString; space; nextPutAll: aMember methodUpdateSelector asString, ' #('. self includes do: [:str | aStream nextPutAll: str printString, ' ' ]. aStream nextPut: $) ]. lastCascade ifTrue: [ aStream nextPut: $. ] ifFalse: [ aStream nextPut: $;; cr ]. ! ! !MetacelloGroupSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25837055! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec '; cr; tab: indent + 1; nextPutAll: 'name: ', self name printString, ';'. self configMethodBodyOn: aStream hasName: true cascading: false indent: indent + 1. aStream nextPut: $. ! ! !MetacelloGroupSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25835132! loadUsing: aLoader gofer: gofer "noop"! ! !MetacelloGroupSpec methodsFor: 'visiting' stamp: 'dkh 6/5/2012 19:01:24' prior: 25837403! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock groupBlock value: self! ! !MetacelloGroupSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25836319! requires: aCollection self shouldNotImplement! ! !MetacelloGroupSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25835263! resolveToLoadableSpec ^nil! ! !MetacelloGroupSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25835383! resolveToPackagesIn: aVersionSpec into: packages visited: visited visited visit: self doing: [:aSpec | | map | map := aVersionSpec packages map. aSpec includes do: [:pkgName | (aVersionSpec packageNamed: pkgName forMap: map ifAbsent: []) projectDo: [:ignored | ] packageDo: [:pkg | packages at: pkg name put: pkg ] groupDo: [:grp | grp resolveToPackagesIn: aVersionSpec into: packages visited: visited ]]]! ! !MetacelloGroupSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25835908! resolveToPackagesIn: aVersionSpec visited: visited | packages | packages := Dictionary new. self resolveToPackagesIn: aVersionSpec into: packages visited: visited. ^packages values asOrderedCollection ! ! !MCDirectoryRepository methodsFor: '*metacello-mc' stamp: 'dkh 02/25/2013 16:13' prior: 24755477! asRepositorySpecFor: aMetacelloMCProject "" ^ directory asRepositorySpecFor: aMetacelloMCProject! ! !FileReference methodsFor: '*metacello-platform' stamp: 'ChristopheDemarey 5/24/2013 14:54'! asRepositorySpecFor: aMetacelloMCProject ^ aMetacelloMCProject repositorySpec description: self fullName; type: 'directory'; yourself! ! !MetacelloMCVersionSpecLoader class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25930408! on: aVersionSpec ^(self new) versionSpec: aVersionSpec; yourself! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25926583! label ^self versionSpec label! ! !MetacelloMCVersionSpecLoader methodsFor: 'loading' stamp: 'dkh 6/26/2012 11:50' prior: 25928262! load | mcLoader | packages := Dictionary new. self resolveToLoadableSpecs. mcLoader := self loader. packages values do: [ :pkg | pkg ensureLoadedForDevelopmentUsing: mcLoader. mcLoader ignoreImage ifFalse: [ (pkg compareCurrentVersion: self operator targetVersionStatus: #(#'allLoadedToSpec') using: mcLoader) ifTrue: [ packages removeKey: pkg name ] ] ]. packages notEmpty ifTrue: [ mcLoader preLoad: self versionSpec. mcLoader load. mcLoader postLoad: self versionSpec ]. ^ mcLoader! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25926711! loader loader == nil ifTrue: [ loader := self versionSpec loader copy. loader spec: self. loaderPolicy notNil ifTrue: [ loader loaderPolicy: loaderPolicy] ]. ^loader! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25926988! loaderPolicy ^ loaderPolicy! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927113! loaderPolicy: anObject loaderPolicy := anObject! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927251! name ^self versionSpec name! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927370! operator ^self loader operator! ! !MetacelloMCVersionSpecLoader methodsFor: 'spec compatibility' stamp: 'dkh 6/26/2012 12:11' prior: 25929227! packageSpecsInLoadOrder ^ self versionSpec packageSpecsInLoadOrderForMap: packages! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927500! packages ^packages! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927609! project ^self versionSpec project! ! !MetacelloMCVersionSpecLoader methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25928880! repositories ^self repositorySpecs! ! !MetacelloMCVersionSpecLoader methodsFor: 'spec compatibility' stamp: 'dkh 6/8/2012 14:04:22' prior: 25929650! repositorySpecs | repositoryMap | repositoryMap := self versionSpec repositories ~~ nil ifTrue: [ self versionSpec repositories map ] ifFalse: [ Dictionary new ]. ^repositoryMap values.! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927732! required required == nil ifTrue: [ ^#() ]. ^ required! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25927876! required: anObject required := anObject! ! !MetacelloMCVersionSpecLoader methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25929003! resolvePackageNames packages := Dictionary new. self resolveToLoadableSpecs. ^packages values collect: [:pkg | pkg name ]! ! !MetacelloMCVersionSpecLoader methodsFor: 'private' stamp: 'dkh 6/26/2012 16:12' prior: 25930094! resolveToLoadableSpecs self versionSpec resolveToLoadableSpecs: required forLoad: true map: packages! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25928004! versionSpec ^ versionSpec! ! !MetacelloMCVersionSpecLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25928118! versionSpec: anObject versionSpec := anObject! ! !MetacelloMCVersionSpecLoader methodsFor: 'spec compatibility' stamp: 'dkh 6/8/2012 14:04:22' prior: 25929950! versionString ^self versionSpec versionString! ! !MetacelloVersionMethodSpec methodsFor: 'adding' stamp: 'dkh 9/8/2012 05:47' prior: 26264309! addMethodSection: attributePath versionSpec: versionSpec | attributeList methodSection index sections found | attributeList := attributePath last. methodSection := MetacelloVersionMethodSection new attributes: attributeList; versionSpec: versionSpec; yourself. attributePath size > 1 ifTrue: [ index := 1. sections := self methodSections. found := true. [ found ] whileTrue: [ found := false. sections do: [ :ms | ms attributes = (attributePath at: index) ifTrue: [ index == (attributePath size -1) ifTrue: [ ms methodSections add: methodSection. ^ self ]. sections := ms methodSections. index := index + 1. found := true ] ] ]. self error: 'Method section for attribute: ' , (attributePath at: index) printString , ' not found.' ] ifFalse: [ self methodSections add: methodSection ]! ! !MetacelloVersionMethodSpec methodsFor: 'adding' stamp: 'dkh 9/8/2012 05:10' prior: 26265711! findMethodSection: attributeOrPath sectionIndex: sectionIndex | attributePath index sections found | attributePath := attributeOrPath asMetacelloAttributePath. index := 1. sections := self methodSections. found := true. [ found ] whileTrue: [ found := false. sections do: [ :ms | ms attributes = (attributePath at: index) ifTrue: [ index == attributePath size ifTrue: [ ^ ms ]. sections := ms methodSections. index := index + 1. found := true ] ] ]. self error: 'Method section for attribute: ' , attributePath printString , ' not found.'! ! !MetacelloVersionMethodSpec methodsFor: 'method generation' stamp: 'dkh 9/7/2012 07:03' prior: 26267157! methodSource | strm | strm := WriteStream on: String new. self methodSelectorAndPragma: self selector imports: self imports versionString: self versionString on: strm. self methodSection: self pre: [ :methodSection :indent | strm cr; tab: indent; nextPutAll: 'spec for: ' , methodSection attributePrintString , ' do: ['; cr. methodSection versionSpec configMethodOn: strm last: methodSection methodSections isEmpty indent: indent + 1 ] last: false post: [ :methodSection :indent :last | strm nextPutAll: ' ].'. (last or: [ indent = 1 or: [ methodSection methodSections isEmpty and: [ indent = 1 ] ] ]) ifTrue: [ strm cr ] ] indent: 0. ^ strm contents! ! !MetacelloVisitedPackages methodsFor: 'initialize-release' stamp: 'dkh 6/8/2012 14:04:22' prior: 48882096! initialize groups := Set new. packages := Set new. projects := Set new.! ! !MetacelloVisitedPackages methodsFor: 'visiting' stamp: 'dkh 6/8/2012 14:04:22' prior: 26312064! pushProject: aBlock | oldGroups oldPackages oldProjects | oldGroups := groups. oldPackages := packages. oldProjects := projects. groups := Set new. packages := Set new. ^aBlock ensure: [ groups := oldGroups. packages := oldPackages. projects := oldProjects ]! ! !MetacelloVisitedPackages methodsFor: 'visiting' stamp: 'dkh 6/8/2012 14:04:22' prior: 26312421! visit: aSpec doing: aBlock aSpec projectDo: [:spec | (projects includes: spec name) ifTrue: [ ^self ]. projects add: spec name ] packageDo: [:spec | (packages includes: spec name) ifTrue: [ ^self ]. packages add: spec name ] groupDo: [:spec | (groups includes: spec name) ifTrue: [ ^self ]. groups add: spec name ]. aBlock value: aSpec! ! !GoferPackageReference methodsFor: '*metacello-mc' stamp: 'dkh 6/30/2012 07:52'! metacelloPackageNameWithBranch "answer array with package name and package name with branch name .. no branch name" ^ {(self packageName). (self packageName)}! ! !MetacelloMergeMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25961036! applyAdd: addBlock copy: copyBlock merge: mergeBlock remove: removeBlock mergeBlock value: self ! ! !MetacelloMergeMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25961216! applyToList: aListSpec aListSpec merge: self! ! !MetacelloMergeMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25960922! methodUpdateSelector ^#with:! ! !MetacelloSymbolicVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26120856! versionString ^ versionString! ! !MetacelloSymbolicVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26120985! versionString: anObject versionString := anObject! ! !MetacelloValidationWarning methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224224! isWarning ^true! ! !MetacelloValidationWarning methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224111! label ^'Warning'! ! !MetacelloCleanNotification class methodsFor: 'exceptioninstantiator' stamp: 'dkh 6/5/2012 19:01:24' prior: 25789998! signal: aMetacelloVersion ^ self new signal: aMetacelloVersion! ! !MetacelloCleanNotification methodsFor: 'signaling' stamp: 'dkh 6/5/2012 19:01:24' prior: 25789687! signal: aMetacelloVersion self version: aMetacelloVersion. ^ self signal! ! !MetacelloCleanNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25789436! version ^ version! ! !MetacelloCleanNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25789551! version: anObject version := anObject! ! !MetacelloClearStackCacheNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25790342! cacheNames ^ cacheNames! ! !MetacelloClearStackCacheNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25790462! cacheNames: anArray cacheNames := anArray! ! !MetacelloClearStackCacheNotification methodsFor: 'signaling' stamp: 'dkh 6/5/2012 19:01:24' prior: 25790601! signal: anArray "Signal the occurrence of an exceptional condition with a specified cacheName." self cacheNames: anArray. ^ self signal! ! !MetacelloErrorInProjectConstructionNotification class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24'! versionString: aString exception: anException ^ self new versionString: aString; exception: anException; signal! ! !MetacelloErrorInProjectConstructionNotification methodsFor: 'exception description' stamp: 'dkh 6/5/2012 19:01:24'! defaultAction "Answer false if you want the version recorded in the errorMap. Answer true if you want to go ahead and throw the error" ^ false! ! !MetacelloErrorInProjectConstructionNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! exception ^ exception! ! !MetacelloErrorInProjectConstructionNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! exception: anObject exception := anObject! ! !MetacelloErrorInProjectConstructionNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionString ^ versionString! ! !MetacelloErrorInProjectConstructionNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionString: anObject versionString := anObject! ! !MetacelloScriptGitHubDownloadNotification methodsFor: 'accessing' stamp: 'dkh 7/24/2012 22:11'! projectPath ^ projectPath! ! !MetacelloScriptGitHubDownloadNotification methodsFor: 'accessing' stamp: 'dkh 7/24/2012 22:11'! projectPath: anObject projectPath := anObject! ! !MetacelloScriptGitHubDownloadNotification methodsFor: 'accessing' stamp: 'dkh 7/24/2012 22:11'! versionString ^ versionString! ! !MetacelloScriptGitHubDownloadNotification methodsFor: 'accessing' stamp: 'dkh 7/24/2012 22:11'! versionString: anObject versionString := anObject! ! !MetacelloAllowConflictingProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 7/18/2012 11:06'! defaultAction ^ MetacelloConflictingProjectError signal: 'Load Conflict between existing ' , self existingProjectRegistration printString , ' and ' , self newProjectRegistration printString! ! !MetacelloAllowConflictingProjectUpgrade methodsFor: 'handlers' stamp: 'dkh 6/7/2012 15:50'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleConflict: self! ! !MetacelloAllowConflictingProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 07/29/2013 16:44'! operationString ^ 'load with conflicts'! ! !MetacelloAllowLockedProjectChange methodsFor: 'private' stamp: 'dkh 07/25/2013 04:42'! checkAllowed "noop ... if user decided to allow lock to be broken, then so be it" ! ! !MetacelloAllowLockedProjectChange methodsFor: 'exception handling' stamp: 'dkh 07/30/2013 07:51'! defaultAction Warning signal: 'LOCK ENFORCED: Attempt to ' , self operationString printString , ' new project: ' , self newProjectRegistration printString printString , ' when existing project: ' , self existingProjectRegistration printString printString , ' is locked. New project not loaded. Use #onLock: to intercept.'. ^ self disallow! ! !MetacelloAllowLockedProjectChange methodsFor: 'handlers' stamp: 'dkh 07/24/2013 16:58'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleLock: self! ! !MetacelloAllowLockedProjectChange methodsFor: 'accessing' stamp: 'dkh 07/24/2013 17:00'! operationString ^ operationString! ! !MetacelloAllowLockedProjectChange methodsFor: 'accessing' stamp: 'dkh 07/24/2013 17:00'! operationString: aString operationString := aString! ! !MetacelloAllowProjectDowngrade methodsFor: 'handlers' stamp: 'dkh 7/18/2012 16:46'! handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ^ onDownGradeBlock cull: self cull: self existingProjectRegistration cull: self newProjectRegistration! ! !MetacelloAllowProjectDowngrade methodsFor: 'handlers' stamp: 'dkh 6/8/2012 10:41'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleDowngrade: self! ! !MetacelloAllowProjectDowngrade methodsFor: 'accessing' stamp: 'dkh 07/29/2013 16:49'! operationString ^ 'downgrade to'! ! !MetacelloAllowProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 7/18/2012 16:43'! defaultAction "Default for Upgrade is to allow" self checkAllowed. ^ self newProjectRegistration! ! !MetacelloAllowProjectUpgrade methodsFor: 'handlers' stamp: 'dkh 7/18/2012 16:46'! handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ^ onUpgradeBlock cull: self cull: self existingProjectRegistration cull: self newProjectRegistration! ! !MetacelloAllowProjectUpgrade methodsFor: 'handlers' stamp: 'dkh 6/7/2012 15:50'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleUpgrade: self! ! !MetacelloAllowProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 07/29/2013 16:49'! operationString ^ 'upgrade to'! ! !MetacelloResolveProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 7/18/2012 16:40'! allow self checkAllowed. self resume: self newProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 07/25/2013 11:57'! allowEvenIfLocked "for internal ScriptEngine use only. from the Scripting API use: onLocked: [:ex | ex allow] " self resume: self newProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'private' stamp: 'dkh 07/25/2013 04:44'! checkAllowed self existingProjectRegistration locked ifTrue: [ self resume: (MetacelloAllowLockedProjectChange new operationString: self operationString; existingProjectRegistration: self existingProjectRegistration; newProjectRegistration: self newProjectRegistration; signal) ]! ! !MetacelloResolveProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 7/18/2012 16:42'! defaultAction "Result of signal should be the projectRegistration to be used to perform the load ... default is to disallow" ^ self existingProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'exception handling' stamp: 'dkh 6/7/2012 15:25'! disallow "default action" self resume: self existingProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 5/29/2012 16:30'! existingProjectRegistration ^ existingProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 5/29/2012 16:30'! existingProjectRegistration: anObject existingProjectRegistration := anObject! ! !MetacelloResolveProjectUpgrade methodsFor: 'handlers' stamp: 'dkh 7/24/2012 11:37'! handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock self subclassResponsibility! ! !MetacelloResolveProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 5/29/2012 16:30'! newProjectRegistration ^ newProjectRegistration! ! !MetacelloResolveProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 5/29/2012 16:30'! newProjectRegistration: anObject newProjectRegistration := anObject! ! !MetacelloResolveProjectUpgrade methodsFor: 'accessing' stamp: 'dkh 7/18/2012 17:08'! operationString self subclassResponsibility! ! !MetacelloScriptEnsureProjectLoadedForDevelopment methodsFor: 'exception handling' stamp: 'dkh 7/24/2012 11:40'! defaultAction "Go ahead and download a new copy of configuration because blessing is #development" ^ true! ! !MetacelloScriptEnsureProjectLoadedForDevelopment methodsFor: 'handlers' stamp: 'dkh 7/24/2012 11:42'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleEnsureProjectLoadedForDevelopment: self! ! !MetacelloScriptNotification methodsFor: 'handlers' stamp: 'dkh 6/7/2012 16:07'! handleResolutionFor: aScriptEngine self subclassResponsibility! ! !MetacelloLookupBaselineSpecForEnsureLoad methodsFor: 'exception description' stamp: 'dkh 7/27/2012 00:36'! defaultAction "Answer if you want to ensure the load of the baseline ... default is to load the baseline" ^ true! ! !MetacelloLookupBaselineSpecForEnsureLoad methodsFor: 'handlers' stamp: 'dkh 7/27/2012 00:30'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleLookupBaselineSpecForEnsureLoad: self! ! !MetacelloLookupProjectSpec commentStamp: 'dkh 6/1/2012 10:02' prior: 71965661! **MetacelloLookupProjectSpec** is signalled to allow a handler to substitute a different (equivalent) project spec for fetching or loading purposes! !MetacelloLookupProjectSpec methodsFor: 'handlers' stamp: 'dkh 6/7/2012 16:21'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleLookupProjectSpec: self! ! !MetacelloLookupProjectSpecForLoad commentStamp: 'dkh 6/1/2012 10:55' prior: 71965890! **MetacelloLookupProjectSpecForLoad** ends up returning an instance of **MetacelloProjectSpecForLoad**! !MetacelloLookupProjectSpecForLoad methodsFor: 'exception description' stamp: 'dkh 6/5/2012 19:01:24'! defaultAction "Result of signal should be the MetacelloProjectSpecForLoad to be used to perform the load. Create a MetacelloProjectSpecForLoad and use the overrideProjectSpec: if you want to supply a different projectSpec" ^ MetacelloProjectSpecForLoad new projectSpec: self projectSpec; yourself! ! !MetacelloLookupProjectSpecForLoad methodsFor: 'handlers' stamp: 'dkh 6/7/2012 16:23'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleLookupProjectSpecForLoad: self! ! !MetacelloProjectSpecLoadedNotification commentStamp: 'dkh 6/1/2012 09:32' prior: 71966079! **MetacelloLoadProjectSpecVersionNotification** is signalled to indicate that the given project spec was loaded into the image.! !MetacelloProjectSpecLoadedNotification methodsFor: 'exception description' stamp: 'dkh 6/5/2012 19:01:24'! defaultAction ^ nil! ! !MetacelloProjectSpecLoadedNotification methodsFor: 'handlers' stamp: 'dkh 6/7/2012 16:19'! handleResolutionFor: aScriptEngine ^ aScriptEngine handleProjectSpecLoaded: self! ! !MetacelloScriptProjectSpecNotification methodsFor: 'exception description' stamp: 'dkh 6/5/2012 19:01:24'! defaultAction "Result of signal should be the projectSpec to be used to perform the load" ^ self projectSpec! ! !MetacelloScriptProjectSpecNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectSpec ^ projectSpec! ! !MetacelloScriptProjectSpecNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectSpec: anObject projectSpec := anObject! ! !MetacelloSkipDirtyPackageLoad class methodsFor: 'signalling' stamp: 'dkh 6/5/2012 19:01:24' prior: 26111842! signal: aMetacelloPackageSpec ^(self new packageSpec: aMetacelloPackageSpec) signal! ! !MetacelloSkipDirtyPackageLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26111261! defaultAction "Default action is to skip the load of a dirty package" ^true! ! !MetacelloSkipDirtyPackageLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26111430! packageSpec ^packageSpec! ! !MetacelloSkipDirtyPackageLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26111547! packageSpec: aMetacelloPackageSpec packageSpec := aMetacelloPackageSpec! ! !MetacelloValidationNotification class methodsFor: 'exceptioninstantiator' stamp: 'dkh 6/5/2012 19:01:24' prior: 26223563! signal: aMetacelloValidationIssue ^ self new signal: aMetacelloValidationIssue! ! !MetacelloValidationNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26222978! issue ^ issue! ! !MetacelloValidationNotification methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26223093! issue: anObject issue := anObject! ! !MetacelloValidationNotification methodsFor: 'signaling' stamp: 'dkh 6/5/2012 19:01:24' prior: 26223229! signal: aMetacelloValidationIssue self issue: aMetacelloValidationIssue. ^ self signal! ! !MCFileTreeWriter methodsFor: 'writing' stamp: 'ChristopheDemarey 8/21/2013 16:56' prior: 67393037! addString: string at: fileNameOrPath encodedTo: ignored "fileNameOrPath may have one or two elements" "encodeTo: arg, because FileTree uses UTF8 by default" | utils fullPath path | utils := MCFileTreeFileUtils current. path := MCFileTreePackageStructureStWriter useCypressWriter ifTrue: [ fullPath := utils buildPathFrom: {(MCFileTreeStCypressWriter monticelloMetaDirName). fileNameOrPath}. utils ensureFilePathExists: fullPath relativeTo: self packageFileDirectory. fullPath ] ifFalse: [ fileNameOrPath ]. string isEmpty ifFalse: [ utils writeStreamFor: path in: self packageFileDirectory do: [ :file | file nextPutAll: string ] ]! ! !MetacelloCopyMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25816426! applyAdd: addBlock copy: copyBlock merge: mergeBlock remove: removeBlock copyBlock value: self! ! !MetacelloCopyMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25816605! applyToList: aListSpec aListSpec copy: self! ! !MetacelloCopyMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25816078! methodUpdateSelector ^#copy:! ! !MetacelloCopyMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25816192! sourceName ^sourceName! ! !MetacelloCopyMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25816300! sourceName: aString sourceName := aString! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25958204! addToMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: self! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25958374! addToMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: self! ! !MetacelloMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959935! applyAdd: addBlock copy: copyBlock merge: mergeBlock remove: removeBlock self subclassResponsibility ! ! !MetacelloMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25960118! applyToList: aListSpec self subclassResponsibility! ! !MetacelloMemberSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25960250! configMethodCascadeOn: aStream last: lastCascade indent: indent self spec configMethodCascadeOn: aStream member: self last: lastCascade indent: indent! ! !MetacelloMemberSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25960494! configMethodOn: aStream indent: indent aStream nextPutAll: self class name asString, ' member: ('. self spec configMethodOn: aStream indent: indent. aStream nextPutAll: ')'.! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25958556! mergeIntoMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: self! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25958730! mergeIntoMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: self ! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959278! methodUpdateSelector ^self subclassResponsibility! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959410! name ^name! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959503! name: aString name := aString! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25958917! removeFromMetacelloPackages: aMetacelloPackagesSpec aMetacelloPackagesSpec addMember: self! ! !MetacelloMemberSpec methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 25959092! removeFromMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: self ! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959614! sourceName ^self name! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959718! spec ^spec! ! !MetacelloMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25959811! spec: aMetacelloSpec spec := aMetacelloSpec! ! !MetacelloMethodSection methodsFor: 'accessing' stamp: 'dkh 9/7/2012 10:45'! attribute self deprecated: 'Use attributes instead'. self attributes size > 1 ifTrue: [ self error: 'invalid use of attribute' ]. self attributes isEmpty ifTrue: [ ^ nil ]. ^ self attributes first! ! !MetacelloMethodSection methodsFor: 'accessing' stamp: 'dkh 9/7/2012 10:49'! attribute: anObject self deprecated: 'Use attributes: instead'. self attributes size > 1 ifTrue: [ self error: 'invalid use of attribute:' ]. attributes := OrderedCollection with: anObject! ! !MetacelloRemoveMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26048915! applyAdd: addBlock copy: copyBlock merge: mergeBlock remove: removeBlock removeBlock value: self ! ! !MetacelloRemoveMemberSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26049099! applyToList: aListSpec aListSpec remove: self! ! !MetacelloRemoveMemberSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26048798! methodUpdateSelector ^#remove:! ! !MetacelloPreLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26015751! addTo: aLoaderDirective spec preLoadDoIt value ~~ nil ifTrue: [ aLoaderDirective add: self ]! ! !MetacelloPreLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26016254! label ^super label, ' >> ', self spec preLoadDoIt value asString! ! !MetacelloPreLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26015938! loadUsing: aLoaderDirective gofer: aGofer aLoaderDirective loadPreloadDirective: self. ! ! !MetacelloPreLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26016120! preLoadDo: aBlock aBlock value: self! ! !MetacelloPreLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26015638! title ^'preload'! ! !MetacelloLoadData methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25838305! addVersion: version versionInfo: versionInfo resolvedReference: resolvedReference packageSpec: packageSpec | vis | "check for duplicates and use the one that is being added" (vis := self packageNameMap at: packageSpec name ifAbsent: [ ]) ~~ nil ifTrue: [ "remove old references" vis do: [ :vi | self dataMap removeKey: vi name. self versionInfoMap removeKey: vi name ] ]. self dataMap at: version info name put: {version. resolvedReference. packageSpec}. self versionInfoMap at: versionInfo name put: {versionInfo}. self packageNameMap at: packageSpec name put: {versionInfo}! ! !MetacelloLoadData methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839814! ancestorsFor: packageSpec ifAbsent: aBlock ^self versionInfoMap at: packageSpec file ifAbsent: [ self packageNameMap at: packageSpec name ifAbsent: aBlock ]! ! !MetacelloLoadData methodsFor: 'versionInfo' stamp: 'dkh 6/8/2012 14:04:22' prior: 25840073! currentVersionInfoFor: packageSpec ifAbsent: aBlock ^self versionInfoMap at: packageSpec file ifAbsent: [ self packageNameMap at: packageSpec name ifAbsent: aBlock ]! ! !MetacelloLoadData methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839003! dataMap dataMap == nil ifTrue: [ dataMap := Dictionary new ]. ^dataMap! ! !MetacelloLoadData methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839517! do: aBlock self dataMap valuesDo: [:ar | aBlock value: (ar at: 1) value: (ar at: 2) value: (ar at: 3) ]! ! !MetacelloLoadData methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839702! isEmpty ^self dataMap isEmpty! ! !MetacelloLoadData methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839155! packageNameMap packageNameMap == nil ifTrue: [ packageNameMap := Dictionary new ]. ^packageNameMap! ! !MetacelloLoadData methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25839335! versionInfoMap versionInfoMap == nil ifTrue: [ versionInfoMap := Dictionary new ]. ^versionInfoMap! ! !MetacelloLinearLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25837892! loadUsing: aLoaderDirective gofer: aGofer self loadDirectives isEmpty ifTrue: [ ^self ]. aLoaderDirective loadLinearLoadDirective: self gofer: aGofer. ! ! !MetacelloLinearLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25837773! title ^'linear load'! ! !GoferVersionReference methodsFor: '*metacello-mc' stamp: 'dkh 07/19/2013 15:25'! compare: aLoadableReference using: aComparisonOperator "Compare versions using . package names #= then compare based upon version number Branches and Author names are used in the case of a version number tie, because we need to avoid seesaw loading." self packageName = aLoadableReference packageName ifFalse: [ ^false ]. self versionNumber = aLoadableReference versionNumber ifFalse: [ ^ self versionNumber perform: aComparisonOperator with: aLoadableReference versionNumber ]. self branch = aLoadableReference branch ifFalse: [ ^ self branch perform: aComparisonOperator with: aLoadableReference branch ]. ^ self author perform: aComparisonOperator with: aLoadableReference author! ! !GoferVersionReference methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 22957995! metacelloPackageNameWithBranch "answer array with package name and package name with branch name" self branch isEmpty ifTrue: [ ^ {(self packageName). (self packageName)} ]. ^ {(self packageName). (self packageName , '.' , self branch)}! ! !MetacelloPostLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26014791! addTo: aLoaderDirective spec postLoadDoIt value ~~ nil ifTrue: [ aLoaderDirective add: self ]! ! !MetacelloPostLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26015299! label ^super label, ' >> ', self spec postLoadDoIt value asString! ! !MetacelloPostLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26014980! loadUsing: aLoaderDirective gofer: aGofer aLoaderDirective loadPostloadDirective: self. ! ! !MetacelloPostLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26015163! postLoadDo: aBlock aBlock value: self! ! !MetacelloPostLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26014676! title ^'postload'! ! !MetacelloTestsGoferCleanup methodsFor: 'cleaning' stamp: 'dkh 6/12/2012 15:41:23.319'! cleanupProtocols: aWorkingCopy "Not needed - for faster test running"! ! !MetacelloGoferCommit methodsFor: 'running' stamp: 'ChristopheDemarey 9/11/2013 13:21' prior: 67281475! execute: aWorkingCopy | version | version := MetacelloPlatform current newVersionForWorkingCopy: aWorkingCopy. self gofer repositories do: [ :repository | repository storeVersion: version ]! ! !MCFileTreeRepository methodsFor: '*metacello-filetree' stamp: 'dkh 5/16/2012 21:21:27'! metacelloProjectClassFor: aScriptEngine aScriptEngine versionString isEmptyOrNil ifFalse: [ "If we have a version in the script, then a BaselineOf is not being referenced...use a MetacelloMCProject see https://github.com/dalehenrich/metacello-work/issues/7" ^ super metacelloProjectClassFor: aScriptEngine ]. ^ MetacelloMCBaselineProject! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'dkh 07/12/2013 11:52'! cacheDirectory self resetCacheDirectoryIfInvalid. CacheDirectory ifNil: [ CacheDirectory := self defaultCacheDirectory ]. ^ CacheDirectory! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'dkh 07/12/2013 11:36'! cacheDirectory: aDirectory "explicitly set CacheDirectory" CacheDirectory := aDirectory! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'ChristopheDemarey 4/29/2013 15:24'! cacheDirectoryFor: projectPath | cacheDirectory projectDirectory | cacheDirectory := self cacheDirectory. projectDirectory := MetacelloPlatform current directoryFromPath: projectPath relativeTo: cacheDirectory. MetacelloPlatform current ensureDirectoryExists: projectDirectory. ^ projectDirectory! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'dkh 07/12/2013 11:36'! defaultCacheDirectory | defaultDirectory cacheDirectory | defaultDirectory := MetacelloPlatform current defaultDirectory. cacheDirectory := MetacelloPlatform current directoryFromPath: 'github-cache' relativeTo: defaultDirectory. MetacelloPlatform current ensureDirectoryExists: cacheDirectory. ^ cacheDirectory! ! !MCGitHubRepository class methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! description ^ 'github://'! ! !MCGitHubRepository class methodsFor: 'accessing' stamp: 'dkh 6/16/2012 08:29'! downloadCache DownloadCache ifNil: [ DownloadCache := Dictionary new ]. ^ DownloadCache! ! !MCGitHubRepository class methodsFor: 'accessing' stamp: 'dkh 7/24/2012 21:50'! downloadCacheKey: projectPath version: versionString ^ projectPath , ':::' , versionString! ! !MCGitHubRepository class methodsFor: 'initialization' stamp: 'dkh 6/16/2012 08:25'! flushDownloadCache "self flushDownloadCache" DownloadCache := nil! ! !MCGitHubRepository class methodsFor: 'utility' stamp: 'dkh 7/24/2012 21:50'! flushProjectEntry: projectPath version: versionString self downloadCache removeKey: (self downloadCacheKey: projectPath version: versionString) ifAbsent: [ ]! ! !MCGitHubRepository class methodsFor: 'initialization' stamp: 'dkh 07/12/2013 11:52'! initialize "self initialize" Smalltalk addToStartUpList: self. self flushDownloadCache. self resetCacheDirectoryIfInvalid! ! !MCGitHubRepository class methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! isAbstract "abstract as far as creating new repositories interactively? yes" ^ true! ! !MCGitHubRepository class methodsFor: 'instance creation' stamp: 'dkh 5/16/2012 14:52:41'! location: locationUrl ^ self location: locationUrl version: nil! ! !MCGitHubRepository class methodsFor: 'instance creation' stamp: 'dkh 6/16/2012 09:08'! location: locationUrl version: versionString ^ self parseLocation: locationUrl version: versionString! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'dkh 5/16/2012 14:52:41'! parseLocation: locationUrl version: versionString "self parseLocation: 'github://dalehenrich/MetacelloRepository:master/monticello/repos/itory/path' version: nil " | projectPath projectVersion repoPath headerSize desc projectDelim repoDelim versionDelim | headerSize := 'github://' size. desc := locationUrl. desc := desc copyFrom: headerSize + 1 to: desc size. projectVersion := repoPath := nil. projectDelim := desc indexOf: $/. repoDelim := desc indexOf: $/ startingAt: projectDelim + 1. (versionDelim := desc indexOf: $:) == 0 ifTrue: [ repoDelim == 0 ifTrue: [ projectPath := desc ] ifFalse: [ projectPath := desc copyFrom: 1 to: repoDelim - 1. repoPath := desc copyFrom: repoDelim + 1 to: desc size ] ] ifFalse: [ projectPath := desc copyFrom: 1 to: versionDelim - 1. repoDelim == 0 ifTrue: [ projectVersion := desc copyFrom: versionDelim + 1 to: desc size ] ifFalse: [ projectVersion := desc copyFrom: versionDelim + 1 to: repoDelim - 1. repoPath := desc copyFrom: repoDelim + 1 to: desc size ] ]. versionString ~~ nil ifTrue: [ projectVersion := versionString ]. ^ self new projectPath: projectPath; projectVersion: projectVersion; repoPath: repoPath; yourself ! ! !MCGitHubRepository class methodsFor: 'utility' stamp: 'dkh 07/01/2013 08:48'! projectDirectoryFrom: projectPath version: versionString | mcPlatform githubCacheDirectory projectDirectory downloadCacheKey cachePath | downloadCacheKey := self downloadCacheKey: projectPath version: versionString. mcPlatform := MetacelloPlatform current. githubCacheDirectory := mcPlatform directoryFromPath: versionString relativeTo: (self cacheDirectoryFor: projectPath). cachePath := self downloadCache at: downloadCacheKey ifAbsent: [ ]. (cachePath isNil or: [ (projectDirectory := mcPlatform directoryFromPath: cachePath relativeTo: githubCacheDirectory) exists not ]) ifTrue: [ | url archive directory zipFileName | MetacelloScriptGitHubDownloadNotification new projectPath: projectPath; versionString: versionString; signal. "for testing purposes" mcPlatform ensureDirectoryExists: githubCacheDirectory. url := 'https://github.com/' , projectPath , '/zipball/' , versionString. zipFileName := '/tmp/github-' , (downloadCacheKey select: [ :c | c isAlphaNumeric ]) , '.zip'. archive := MetacelloPlatform current downloadFile: url to: zipFileName. directory := mcPlatform directoryFromPath: (cachePath := archive members first fileName) relativeTo: githubCacheDirectory. directory exists ifFalse: [ MetacelloPlatform current extractRepositoryFrom: zipFileName to: githubCacheDirectory fullName ]. self downloadCache at: downloadCacheKey put: cachePath. projectDirectory := mcPlatform directoryFromPath: cachePath relativeTo: githubCacheDirectory ]. ^ projectDirectory! ! !MCGitHubRepository class methodsFor: 'private' stamp: 'dkh 07/12/2013 11:51'! resetCacheDirectoryIfInvalid "Reset if invalid" CacheDirectory notNil and: [ (MCFileTreeFileUtils current directoryExists: CacheDirectory) ifFalse: [ CacheDirectory := nil ] ]! ! !MCGitHubRepository class methodsFor: 'system startup' stamp: 'dkh 6/16/2012 08:24'! startUp: resuming "Flush the GitHub download cache" resuming ifTrue: [ self flushDownloadCache ]! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! asRepositorySpecFor: aMetacelloMCProject ^ aMetacelloMCProject repositorySpec description: self description; type: 'github'; yourself! ! !MCGitHubRepository methodsFor: 'descriptions' stamp: 'dkh 5/16/2012 14:52:41'! description | desc | desc := self class description , self projectPath , ':' , self projectVersion. self repoPath ifNil: [ ^ desc ]. ^ desc , '/' , self repoPath! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 07/01/2013 13:23'! directory directory ifNil: [ directory := self class projectDirectoryFrom: self projectPath version: self projectVersion. self repoPath ifNotNil: [ directory := MetacelloPlatform current directoryFromPath: self repoPath relativeTo: directory ] ] ifNotNil: [ (MCFileTreeFileUtils current directoryExists: directory) ifFalse: [ self flushCache. ^ self directory ] ]. ^ directory! ! !MCGitHubRepository methodsFor: 'descriptions' stamp: 'dkh 6/16/2012 09:03'! directoryDescription ^ self directory pathName! ! !MCGitHubRepository methodsFor: 'initialize-release' stamp: 'dkh 6/16/2012 09:11'! flushCache "the directory acts like a cache since we download the directory from github" super flushCache. self class flushDownloadCache. directory := nil! ! !MCGitHubRepository methodsFor: 'initialize-release' stamp: 'dkh 7/24/2012 21:52'! flushForScriptGet self class flushProjectEntry: self projectPath version: self projectVersion. directory := nil! ! !MCGitHubRepository methodsFor: 'initialize-release' stamp: 'dkh 08/22/2013 07:40'! hasNoLoadConflicts: anMCGitHubRepository (anMCGitHubRepository isKindOf: self class) ifFalse: [ ^ false ]. ^ self projectPath = anMCGitHubRepository projectPath and: [ self repoPath = anMCGitHubRepository repoPath ]! ! !MCGitHubRepository methodsFor: 'comparing' stamp: 'dkh 6/16/2012 08:57'! hash ^ self description hash! ! !MCGitHubRepository methodsFor: 'initialize-release' stamp: 'dkh 6/16/2012 09:09'! initialize super initialize. directory := nil. "we'll lazily create the directory instance" self readonly: true! ! !MCGitHubRepository methodsFor: 'testing' stamp: 'dkh 6/16/2012 09:00'! isValid ^ true! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! metacelloProjectClassFor: aScriptEngine ^ MetacelloMCBaselineProject! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! projectPath ^ projectPath! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! projectPath: anObject projectPath := anObject! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! projectVersion (projectVersion == nil or: [ projectVersion isEmpty ]) ifTrue: [ projectVersion := 'master' ]. ^ projectVersion! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! projectVersion: anObject projectVersion := anObject! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! repoPath ^ repoPath! ! !MCGitHubRepository methodsFor: 'accessing' stamp: 'dkh 5/16/2012 14:52:41'! repoPath: anObject repoPath := anObject! ! !MetacelloCachingGoferResolvedReference methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25787877! version "Answer a Monticello version of the receiver." cachedVersion == nil ifTrue: [ cachedVersion := super version ]. ^cachedVersion! ! !MetacelloCachingGoferResolvedReference methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25788124! workingCopy "Answer a working copy or throw an error if not present." | pName | cachedVersion == nil ifTrue: [ ^super workingCopy ]. pName := cachedVersion package name. ^MCWorkingCopy allManagers detect: [ :each | pName = each packageName ] ifNone: [ self error: 'Working copy for ' , self name , ' not found' ]! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26256189! add: aDirective self loadDirectives add: aDirective! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26257573! directivesDo: aBlock aBlock value: self. self loadDirectives do: [:directive | directive directivesDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26256339! finalizeLoad: aGofer "nothing special for linear loads"! ! !MetacelloVersionLoadDirective methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26261344! isExplicit ^false! ! !MetacelloVersionLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26260728! label self spec == nil ifTrue: [ ^'' ]. ^self spec label! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26256492! loadAtomicLoadDirective: aLoaderDirective gofer: aGofer aLoaderDirective loadDirectives do: [:directive | directive loadUsing: aLoaderDirective gofer: aGofer ]. aLoaderDirective finalizeLoad: aGofer.! ! !MetacelloVersionLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26255506! loadDirectives loadDirectives == nil ifTrue: [ loadDirectives := OrderedCollection new ]. ^ loadDirectives! ! !MetacelloVersionLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26255713! loadDirectives: anObject loadDirectives := anObject! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26256791! loadExplicitLoadDirective: aLoaderDirective gofer: aGofer "load has already been performed, no need to load again"! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26257003! loadLinearLoadDirective: aLoaderDirective gofer: aGofer aLoaderDirective loadDirectives do: [:directive | directive loadUsing: aLoaderDirective gofer: aGofer ]. aLoaderDirective finalizeLoad: aGofer.! ! !MetacelloVersionLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 26259407! loadPackageDirective: aPackageLoadDirective gofer: aGofer aPackageLoadDirective loader loadingSpecLoader loadPackageDirective: aPackageLoadDirective gofer: aGofer! ! !MetacelloVersionLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 26259675! loadPostloadDirective: aPostloadDirective | block | (block := aPostloadDirective spec postLoadDoItBlock) ~~ nil ifTrue: [ aPostloadDirective evaluateSupplyingAnswers: [ block valueWithPossibleArgs: (Array with: aPostloadDirective loader with: aPostloadDirective spec) ]. Transcript cr; show: 'Evaluated -> ', aPostloadDirective spec label, ' >> ', aPostloadDirective spec postLoadDoIt value asString]! ! !MetacelloVersionLoadDirective methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 26260206! loadPreloadDirective: aPreloadDirective | block | (block := aPreloadDirective spec preLoadDoItBlock) ~~ nil ifTrue: [ aPreloadDirective evaluateSupplyingAnswers: [ block valueWithPossibleArgs: (Array with: aPreloadDirective loader with: aPreloadDirective spec) ]. Transcript cr; show: 'Evaluated -> ', aPreloadDirective spec label, ' >> ', aPreloadDirective spec preLoadDoIt value asString]! ! !MetacelloVersionLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 26257292! loadWithPolicy: aLoadPolicy | gofer | gofer := MetacelloGofer new. gofer disablePackageCache. gofer repository: aLoadPolicy cacheRepository. self loadUsing: self gofer: gofer! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26257789! packageDirectivesDo: aBlock self loadDirectives do: [:directive | directive packageDirectivesDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26257998! packagesDo: aBlock self loadDirectives do: [:directive | directive packageDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26258187! prepostLoadDirectivesDo: aBlock self loadDirectives do: [:directive | directive prepostLoadDirectivesDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26258403! prepostLoadsDo: aBlock self loadDirectives do: [:directive | directive prepostLoadDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26260884! printLoadDirectivesOn: aStream indent: indent self loadDirectives do: [:each | aStream cr. each printOn: aStream indent: indent + 1 ].! ! !MetacelloVersionLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26261122! printOn: aStream indent: indent super printOn: aStream indent: indent. self printLoadDirectivesOn: aStream indent: indent! ! !MetacelloVersionLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26255865! spec "Expected to be a MetacelloVersionSpec" (spec == nil and: [ self loader ~~ nil ]) ifTrue: [ ^[ self loader spec versionSpec ] on: MessageNotUnderstood do: [:ex | ex return: self loader spec ]]. ^spec! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26258601! versionDirectivesDepthFirstDo: aBlock self loadDirectives do: [:directive | directive versionDirectivesDepthFirstDo: aBlock ]. aBlock value: self. ! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26258852! versionDirectivesDo: aBlock aBlock value: self. self loadDirectives do: [:directive | directive versionDirectivesDo: aBlock ].! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26259081! versionDo: aBlock aBlock value: self. ! ! !MetacelloVersionLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 26259221! versionsDo: aBlock self loadDirectives do: [:directive | directive versionDo: aBlock ].! ! !GoferResolvedReference methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 22946924! asMetacelloCachingResolvedReference ^MetacelloCachingGoferResolvedReference name: self name repository: self repository! ! !MetacelloVersionMethodSection methodsFor: 'accessing' stamp: 'dkh 9/8/2012 06:02' prior: 26261866! attributeOrPath ^ self parent == nil ifTrue: [ self attributes size == 1 ifTrue: [ self attributes first ] ifFalse: [ self attributes ] ] ifFalse: [ self attributePath ]! ! !MetacelloVersionMethodSection methodsFor: 'accessing' stamp: 'dkh 9/7/2012 13:54' prior: 26262192! attributePath | path | path := MetacelloMethodSectionPath with: self attributes. ^ self parent == nil ifTrue: [ path ] ifFalse: [ self parent attributePath , path ]! ! !MetacelloVersionMethodSection methodsFor: 'accessing' stamp: 'dkh 03/12/2013 20:14'! printOn: aStream aStream nextPutAll: self class name asString; nextPut: $(. self versionSpec printOn: aStream. aStream nextPut: $)! ! !MetacelloValidationIssue class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26222491! configurationClass: aClass reasonCode: aSymbol callSite: aCallSite explanation: aString ^(self new) configurationClass: aClass; reasonCode: aSymbol; callSite: aCallSite; explanation: aString; yourself! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26219905! callSite ^ callSite! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220020! callSite: anObject callSite := anObject! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220154! configurationClass ^ configurationClass! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220288! configurationClass: aClass configurationClass := aClass! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220438! explanation ^ explanation! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220558! explanation: aString explanation := aString! ! !MetacelloValidationIssue methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26221870! isCritical ^self isError or: [ self isCriticalWarning ]! ! !MetacelloValidationIssue methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26222019! isCriticalWarning ^false! ! !MetacelloValidationIssue methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26222137! isError ^false! ! !MetacelloValidationIssue methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26222245! isWarning ^false! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220696! label ^''! ! !MetacelloValidationIssue methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26221110! printOn: aStream aStream nextPutAll: self label; nextPut: $:; space; nextPutAll: self explanation. self reasonCode ~~ #none ifTrue: [ aStream space; nextPut: ${; space; nextPutAll: self reasonCode asString; space; nextPut: $} ]. (self configurationClass ~~ nil or: [ self callSite ~~ nil ]) ifTrue: [ aStream space; nextPut: $[; space. self configurationClass ~~ nil ifTrue: [ aStream nextPutAll: self configurationClass name asString; space ]. self callSite ~~ nil ifTrue: [ aStream nextPutAll: self callSite name asString; space ]. aStream nextPut: $] ]! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220801! reasonCode reasonCode == nil ifTrue: [ reasonCode := #none ]. ^ reasonCode! ! !MetacelloValidationIssue methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26220972! reasonCode: anObject reasonCode := anObject! ! !MetacelloToolBox class methodsFor: 'utility' stamp: 'dkh 07/18/2013 07:42' prior: 26207221! baseNameOf: configurationClassName "Return the baseName for the given configuration class name." ^ (configurationClassName beginsWith: 'ConfigurationOf') ifTrue: [ configurationClassName copyFrom: 'ConfigurationOf' size + 1 to: configurationClassName size ] ifFalse: [ configurationClassName ]! ! !MetacelloToolBox class methodsFor: 'utility' stamp: 'dkh 05/15/2013 20:36'! baselineNameFrom: baseName "Return the fully-qualified baseline class name." ^ MetacelloScriptEngine baselineNameFrom: baseName! ! !MetacelloToolBox class methodsFor: 'instance creation' stamp: 'dkh 05/15/2013 20:15'! baselineNamed: baseName ^ self new baselineNamed: baseName; yourself! ! !MetacelloToolBox class methodsFor: 'tool support' stamp: 'dkh 3/7/2012 17:08:50' prior: 26206865! compiledMethodForVersion: aMetacelloVersion | toolbox pragma | toolbox := MetacelloToolBox new project: aMetacelloVersion project. pragma := (toolbox constructor extractAllVersionPragmas at: aMetacelloVersion versionString ifAbsent: [ ^ nil ]) first. ^pragma method! ! !MetacelloToolBox class methodsFor: 'utility' stamp: 'dkh 6/13/2012 13:07' prior: 26208314! configurationClasses "Return a set of the Metacello configuration classes that have been loaded into the image." ^ MetacelloProjectRegistration configurationClasses! ! !MetacelloToolBox class methodsFor: 'utility' stamp: 'dkh 3/7/2012 17:08:50' prior: 26208771! configurationNameFrom: baseName "Return the fully-qualified configuration class name." ^ MetacelloScriptEngine configurationNameFrom: baseName! ! !MetacelloToolBox class methodsFor: 'deprecated' stamp: 'dkh 3/7/2012 17:08:50'! createBaseline: baselineVersionString for: configurationBasename repository: repositoryDescription requiredProjects: projectList packages: packageList dependencies: dependencies groups: groups "Create a new baseline version based on the specified project structure. repositoryDescription - metacello repository string projectList - collection of project base names (without ConfigurationOf prefix) packageList - collection of package base names dependencies - collection of associations where key is name of package and value is collection of required packages and projects groups - collection of associations where key is the name of the group and value is the collection of group members " self deprecated: 'Use createBaseline:for: repository:requiredProjects:packages:repositories:dependencies:groups: instead'. ^ self createBaseline: baselineVersionString for: configurationBasename repository: repositoryDescription requiredProjects: projectList packages: packageList repositories: #() dependencies: dependencies groups: groups! ! !MetacelloToolBox methodsFor: 'private' stamp: 'dkh 05/15/2013 20:39'! baselineNameFrom: baseName ^ self class baselineNameFrom: baseName! ! !MetacelloToolBox methodsFor: 'api-configuration' stamp: 'dkh 05/15/2013 20:17'! baselineNamed: baseName | baselineName | "Check if the class does not exist" baselineName := self baselineNameFrom: baseName. (Smalltalk includesKey: baselineName asSymbol) ifFalse: [ "Create the configuration class" self ensureMetacello. BaselineOf subclass: baselineName instVarNames: #() classVars: #() classInstVars: #() poolDictionaries: #() category: baselineName. PackageInfo registerPackageName: baselineName ]. project := (MetacelloPlatform current globalNamed: baselineName asSymbol) project! ! !MetacelloToolBox methodsFor: 'validation' stamp: 'dkh 3/7/2012 17:08:50' prior: 26153718! validateConfiguration | issues | issues := (MetacelloMCVersionValidator validateConfiguration: project configuration class recurse: false) select: [ :issue | issue isCritical ]. issues notEmpty ifTrue: [ MetacelloValidationFailure issues: issues message: 'There are critical issues in the configuration' ]! ! !MetacelloGofer methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25829809! basicReferencesIn: aRepository ((aRepository isKindOf: MCDictionaryRepository) or: [aRepository isKindOf: MCDirectoryRepository]) ifTrue: [ "No need to cache references for a dictionary repository" ^ super basicReferencesIn: aRepository ]. "Use cache for network-based repositories - the contents of repository is cached based on first access and is _not_ updated afterword, so any mcz files added after the initial cache is created won't be seen" ^ MetacelloPlatform current stackCacheFor: #goferRepository cacheClass: IdentityDictionary at: aRepository doing: [ :cache | ^ cache at: aRepository put: (super basicReferencesIn: aRepository) ]! ! !MetacelloGofer methodsFor: 'operations' stamp: 'dkh 6/8/2012 14:04:22' prior: 25829680! interactiveCommit ^ self execute: MetacelloGoferCommit! ! !MetacelloTestsPackageSet commentStamp: '' prior: 71966273! This class is used to speed up Metacello tests. ! !MetacelloTestsPackageSet methodsFor: 'listing' stamp: 'EstebanLorenzano 5/29/2013 16:09'! extensionMethods "Test packages don't extend classes and skipping this operation is a significant performance gain for running tests" ^ #()! ! !MetacelloTestsPackageSet methodsFor: 'listing' stamp: 'EstebanLorenzano 5/29/2013 16:09'! overriddenMethods "Test packages don't override methods and skipping this operation is a significant performance gain for running tests" ^ #()! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964082! category ^ category! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964192! category: anObject category := anObject! ! !MetacelloMethodSpec methodsFor: 'method generation' stamp: 'dkh 6/5/2012 19:01:24' prior: 25965422! compileMethod (project configuration class compile: self methodSource classified: self category) == nil ifTrue: [ self error: 'Error compiling the method' ]! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964322! methodSections methodSections == nil ifTrue: [ methodSections := OrderedCollection new ]. ^ methodSections! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964521! methodSections: anObject methodSections := anObject! ! !MetacelloMethodSpec methodsFor: 'method generation' stamp: 'dkh 6/5/2012 19:01:24' prior: 25965684! methodSource self subclassResponsibility! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964663! project ^ project! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964771! project: anObject project := anObject! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25964899! selector ^ selector! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25965009! selector: anObject selector := anObject! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25965139! versionString ^ versionString! ! !MetacelloMethodSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25965259! versionString: aStringOrSymbol versionString := aStringOrSymbol! ! !MCHttpRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 24799426! asRepositorySpecFor: aMetacelloMCProject ^(aMetacelloMCProject repositorySpec) description: self description; type: 'http'; yourself! ! !DateAndTime methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24'! setTimestampInMetacelloConfig: aMetacelloConfig aMetacelloConfig setTimestampWithString: self printString! ! !DateAndTime methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 20339527! setTimestampInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setTimestamp: (aMetacelloVersionSpec project valueHolderSpec value: self printString; yourself)! ! !MCFtpRepository methodsFor: '*metacello-pharocommonplatform' stamp: 'dkh 4/30/2013 13:26' prior: 24791678! asRepositorySpecFor: aMetacelloMCProject | dir | dir := directory. (directory at: 1) = $/ ifFalse: [ dir := '/', dir ]. ^(aMetacelloMCProject repositorySpec) description: 'ftp://', host, dir; type: 'ftp'; username: user; password: password; yourself! ! !MCFtpRepository methodsFor: '*metacello-testsplatform' stamp: 'dkh 6/12/2012 10:19:43.983'! directory ^directory! ! !MCFtpRepository methodsFor: '*metacello-testsplatform' stamp: 'dkh 6/12/2012 10:19:43.983'! host ^host! ! !MetacelloAlternateResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloAlternateResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. self setUpVersionReferences; setUpMonticelloRepository! ! !MetacelloAlternateResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." monticelloRepository := MCDictionaryRepository new. versionReferences do: [ :reference | monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: reference packageName asSymbol superclassName: #Object category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: #()) ]! ! !MetacelloAlternateResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpVersionReferences "self reset" versionReferences := OrderedCollection new. versionReferences add: (GoferVersionReference name: 'GoferBar-dkh.24'); add: (GoferVersionReference name: 'GoferBar-dkh.25'); add: (GoferVersionReference name: 'GoferFoo-dkh.75'); add: (GoferVersionReference name: 'GoferFoo-dkh.104')! ! !MetacelloAlternateResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! versionReferences ^ versionReferences! ! !MetacelloAtomicConfigurationResource class methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^self new project! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #baseline. spec package: 'GoferFan'; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #baseline. spec package: 'GoferBar'; package: 'GoferFoo'; package: 'GoferBeau'; package: 'GoferFaux'; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20MethodSourceFan ^(self class sourceCodeAt: #baseline20Fan:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20MethodSourceFoo ^(self class sourceCodeAt: #baseline20Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline25Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #baseline. spec package: 'GoferFoo' with: [spec requires: 'GoferFan' ]; yourself. spec project: 'GoferFan' with: [ "requires GoferBeau" spec className: 'MetacelloTestConfigurationOfAtomicFan'; versionString: '2.0-baseline'; loads: 'GoferFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline25MethodSourceFoo ^(self class sourceCodeAt: #baseline25Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline31Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec postLoadDoIt: #postLoad31baseline. spec package: 'GoferBar'; package: 'GoferBeau' with: [ spec requires: 'GoferBar'; includes: #('GoferFoo' ) ]; package: 'GoferFar' with: [ spec requires: #('GoferFoo' ) ]; yourself. spec project: 'GoferFoo' with: [ "requires GoferBeau" spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '2.0'; loads: 'GoferFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline31MethodSourceFan ^(self class sourceCodeAt: #baseline31Fan:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with:'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.34'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('1' 'GoferFaux'); yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60MethodSourceFoo ^(self class sourceCodeAt: #baseline60Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60MethodSourceProjectIssue86 ^(self class sourceCodeAt: #baseline60ProjectIssue86:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60ProjectIssue86: spec "projects and packages" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'A' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.0'; loads: #('1'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'B' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.0'; loads: #('2'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with:'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.34'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('GoferFoo' 'GoferBeau'); yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61MethodSourceFoo ^(self class sourceCodeAt: #baseline61Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61MethodSourceProjectIssue86 ^(self class sourceCodeAt: #baseline61ProjectIssue86:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61ProjectIssue86: spec "projects and packages" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'A' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.1'; loads: #('1'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'B' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.1'; loads: #('2'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline62Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with:'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.34'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('GoferFoo' ); yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline62MethodSourceFoo ^(self class sourceCodeAt: #baseline62Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline62MethodSourceProjectIssue86 ^(self class sourceCodeAt: #baseline62ProjectIssue86:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline62ProjectIssue86: spec "projects and packages" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'A' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.2'; loads: #('1'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'B' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '6.2'; loads: #('2'); repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! linearProjectMethodSource ^(self class sourceCodeAt: #project) asString copyReplaceAll: 'atomic' with: 'linear' ! ! !MetacelloAtomicConfigurationResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! postLoad31baseline "Throw an error if GoferFar isn't loaded" Smalltalk at: #GoferFar ifAbsent: [ self error: 'GoferFar should be loaded' ]! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! postLoad31baselineMethodSource ^(self class sourceCodeAt: #postLoad31baseline) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! project "self reset" | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: #atomic. ^project ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClassMethodSource ^(self class class sourceCodeAt: #project) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! projectMethodSource ^(self class sourceCodeAt: #project) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. self setUpMonticelloRepository; setUpConfigurationOfAtomicFoo; setUpConfigurationOfLinearFoo; setUpConfigurationOfAtomicFan; setUpConfigurationOfUmbrellaA; setUpConfigurationOfUmbrellaB; setUpConfigurationOfProjectIssue86; yourself! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFan' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfAtomicFan "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfAtomicFan-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline20Fan:' category: 'cat' timeStamp: '' source: self baseline20MethodSourceFan). (MCMethodDefinition className: className asString selector: 'baseline31Fan:' category: 'cat' timeStamp: '' source: self baseline31MethodSourceFan). (MCMethodDefinition className: className asString selector: 'postLoad31baseline' category: 'cat' timeStamp: '' source: self postLoad31baselineMethodSource)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfAtomicFoo "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfAtomicFoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline20Foo:' category: 'cat' timeStamp: '' source: self baseline20MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline25Foo:' category: 'cat' timeStamp: '' source: self baseline25MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'version20Foo:' category: 'cat' timeStamp: '' source: self version20MethodSourceFoo)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfLinearFoo "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfLinearFoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self linearProjectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline20Foo:' category: 'cat' timeStamp: '' source: self baseline20MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'version20Foo:' category: 'cat' timeStamp: '' source: self version20MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'version50Foo:' category: 'cat' timeStamp: '' source: self version50MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'version51Foo:' category: 'cat' timeStamp: '' source: self version51MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline60Foo:' category: 'cat' timeStamp: '' source: self baseline60MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline61Foo:' category: 'cat' timeStamp: '' source: self baseline61MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline62Foo:' category: 'cat' timeStamp: '' source: self baseline62MethodSourceFoo)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'Issue 86' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue86 "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue86-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self linearProjectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline60ProjectIssue86:' category: 'cat' timeStamp: '' source: self baseline60MethodSourceProjectIssue86). (MCMethodDefinition className: className asString selector: 'baseline61ProjectIssue86:' category: 'cat' timeStamp: '' source: self baseline61MethodSourceProjectIssue86). (MCMethodDefinition className: className asString selector: 'baseline62ProjectIssue86:' category: 'cat' timeStamp: '' source: self baseline62MethodSourceProjectIssue86)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfUmbrellaA "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfUmbrellaA-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'version50Umbrella:' category: 'cat' timeStamp: '' source: self version50MethodSourceUmbrella)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfUmbrellaB "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfUmbrellaB-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'version51Umbrella:' category: 'cat' timeStamp: '' source: self version51MethodSourceUmbrella)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloAtomicConfigurationResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." "self reset" monticelloRepository := MCDictionaryRepository new. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version20Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBar' with: 'GoferBar-dkh.1'; package: 'GoferFoo' with: 'GoferFoo-dkh.4'; package: 'GoferBeau' with: 'GoferBeau-dkh.15'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version20MethodSourceFoo ^(self class sourceCodeAt: #version20Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version50Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferUmbrella' with: 'GoferUmbrella-dkh.4'; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version50MethodSourceFoo ^(self class sourceCodeAt: #version50Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! version50MethodSourceUmbrella ^(self class sourceCodeAt: #version50Umbrella:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! version50Umbrella: spec "self reset" spec for: #common do: [ spec project: 'Umbrella' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version51Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferUmbrella' with: 'GoferUmbrella-lr.5'; yourself ]. ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfAtomicFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! version51MethodSourceFoo ^(self class sourceCodeAt: #version51Foo:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! version51MethodSourceUmbrella ^(self class sourceCodeAt: #version51Umbrella:) asString ! ! !MetacelloAtomicConfigurationResource methodsFor: 'ConfigurationOfUmbrella' stamp: 'dkh 6/12/2012 15:41:23.319'! version51Umbrella: spec "self reset" spec for: #common do: [ spec project: 'Umbrella' with: [ spec className: 'MetacelloTestConfigurationOfLinearFoo'; versionString: '5.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloAtomicMonticelloResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloAtomicMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. self setUpVersionReferences; setUpMonticelloRepository; setUpDependency; setUpNewerDependency! ! !MetacelloAtomicMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpDependency "self reset" | reference | reference := GoferVersionReference name: 'GoferUmbrella-dkh.4'. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: (reference packageName copyWithout: $-) asSymbol superclassName: #Object category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: (Array with: (MCVersionDependency package: (MetacelloTestsMCPackage new name: 'GoferBarDependency') info: (monticelloRepository versionInfoFromVersionNamed: 'GoferBarDependency-lr.30')) with: (MCVersionDependency package: (MetacelloTestsMCPackage new name: 'GoferFooDependency') info: (monticelloRepository versionInfoFromVersionNamed: 'GoferFooDependency-lr.30'))))! ! !MetacelloAtomicMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." monticelloRepository := MCDictionaryRepository new. versionReferences do: [ :assoc | | reference superclassName | reference := assoc key. superclassName := assoc value. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: (reference packageName copyWithout: $-) asSymbol superclassName: superclassName category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: #()) ]! ! !MetacelloAtomicMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpNewerDependency "self reset" | reference | reference := GoferVersionReference name: 'GoferUmbrella-lr.5'. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: (reference packageName copyWithout: $-) asSymbol superclassName: #Object category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: (Array with: (MCVersionDependency package: (MetacelloTestsMCPackage new name: 'GoferBarDependency') info: (monticelloRepository versionInfoFromVersionNamed: 'GoferBarDependency-lr.35')) with: (MCVersionDependency package: (MetacelloTestsMCPackage new name: 'GoferFooDependency') info: (monticelloRepository versionInfoFromVersionNamed: 'GoferFooDependency-lr.35'))))! ! !MetacelloAtomicMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpVersionReferences "self reset" versionReferences := OrderedCollection new. versionReferences add: ((GoferVersionReference name: 'GoferFan-dkh.1') -> #GoferFar); add: ((GoferVersionReference name: 'GoferBar-dkh.1') -> #Object); add: ((GoferVersionReference name: 'GoferFoo-dkh.4') -> #GoferBeau); add: ((GoferVersionReference name: 'GoferFoo-dkh.5') -> #GoferBeau); add: ((GoferVersionReference name: 'GoferBeau-dkh.15') -> #GoferBar); add: ((GoferVersionReference name: 'GoferFaux-tg.30') -> #Object); add: ((GoferVersionReference name: 'GoferFar-dkh.4') -> #GoferFoo); add: ((GoferVersionReference name: 'GoferBarDependency-dkh.4') -> #Object); add: ((GoferVersionReference name: 'GoferFooDependency-lr.4') -> #Object); add: ((GoferVersionReference name: 'GoferBarDependency-lr.30') -> #Object); add: ((GoferVersionReference name: 'GoferFooDependency-lr.30') -> #Object); add: ((GoferVersionReference name: 'GoferBarDependency-lr.35') -> #Object); add: ((GoferVersionReference name: 'GoferFooDependency-lr.35') -> #Object); yourself ! ! !MetacelloAtomicMonticelloResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! versionReferences ^ versionReferences! ! !MetacelloConfigurationResource class methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^self new project! ! !MetacelloConfigurationResource class methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectAttributes ProjectAttributes == nil ifTrue: [ ^#() ]. ^ProjectAttributes! ! !MetacelloConfigurationResource class methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectAttributes: aCollection ProjectAttributes := aCollection! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10B: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'C' with: [ spec className: 'MetacelloTestConfigurationOfIssue77C'; loads: #('GoferFoo'); versionString: '1.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10D: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'C' with: [ spec className: 'MetacelloTestConfigurationOfIssue77C'; loads: #('GoferFoo'); versionString: '1.3'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; package: 'GoferBar' with: [ spec file:'GoferBar-lr.1' ]; group: 'default' with: #('GoferBar'); yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10MethodSourceB ^(self class sourceCodeAt: #baseline10B:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10MethodSourceD ^(self class sourceCodeAt: #baseline10D:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFum' stamp: 'dkh 7/19/2012 07:30'! baseline10ProjectFum: spec "self reset" spec for: #'common' do: [ spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Fie' with: [ spec className: 'MetacelloTestConfigurationOfProjectFie'; versionString: '2.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline12C: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GeauxBeau' with: 'GeauxBeau-dkh.55'; yourself. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline12MethodSourceC ^(self class sourceCodeAt: #baseline12C:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline13C: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GeauxBeau' with: 'GeauxBeau-dkh.56'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline13MethodSourceC ^(self class sourceCodeAt: #baseline13C:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFie' stamp: 'dkh 6/26/2012 16:25'! baseline15ProjectFie: spec "self reset" "shouldn't affect anything ... the import: should only take effect on a load" spec for: #'common' do: [ spec configuration: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; import: 'Foo' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '2.0'; loads: #('GoferFaux' 'GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Far' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '2.0'; loads: #('GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar.branch-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.25'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20MethodSourceFan ^(self class sourceCodeAt: #baseline20Fan:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20MethodSourceFoo ^(self class sourceCodeAt: #baseline20Foo:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFie' stamp: 'dkh 6/26/2012 14:48'! baseline25ProjectFie: spec "self reset" spec for: #'common' do: [ spec configuration: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; import: 'Foo' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline30Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.0'; loads: #('GoferFaux' 'GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline30Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: [ spec preLoadDoIt: #preloadDoIt; file: 'GoferFoo-lr.1' ]; package: 'GoferBar' with: 'GoferBar.branch-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline30MethodSourceFan ^(self class sourceCodeAt: #baseline30Fan:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline30MethodSourceFoo ^(self class sourceCodeAt: #baseline30Foo:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline35Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.5'; loads: #('GoferFaux' 'GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 07/19/2013 22:50'! baseline35Foo: spec "self reset" spec for: #'common' do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.31'; package: 'GoferBeau' with: 'GoferBeau-dkh.54'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('GoferFoo' 'GoferFaux'); yourself ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline35MethodSourceFan ^(self class sourceCodeAt: #baseline35Fan:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline35MethodSourceFoo ^(self class sourceCodeAt: #baseline35Foo:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFie' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline35ProjectFie: spec "just projects" "self reset" spec for: #common do: [ spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '3.5'; file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Feaux' with: [ spec className: 'MetacelloTestConfigurationOfFeaux'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFeaux'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; loads: #('GoferFaux' 'GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFeaux' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40Feaux: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GeauxFoo' with:'GeauxFoo-lr.1'; package: 'GeauxBar' with: 'GeauxBar.branch-lr.2'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 07/19/2013 22:50'! baseline40Foo: spec "self reset" spec for: #'common' do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.32'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('GoferFoo' 'GoferFaux'); yourself ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceFan ^(self class sourceCodeAt: #baseline40Fan:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFeaux' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceFeaux ^(self class sourceCodeAt: #baseline40Feaux:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceFoo ^(self class sourceCodeAt: #baseline40Foo:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFee' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectFee ^(self class sourceCodeAt: #baseline40ProjectFee:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFoe' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectFoe ^(self class sourceCodeAt: #baseline40ProjectFoe:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFum' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectFum ^(self class sourceCodeAt: #baseline40ProjectFum:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectInfinite ^(self class sourceCodeAt: #baseline40ProjectInfinite:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectIssue95 ^(self class sourceCodeAt: #baseline40ProjectIssue95:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40MethodSourceProjectLoop ^(self class sourceCodeAt: #baseline40ProjectLoop:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFee' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectFee: spec "projects and packages" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFaux' with: 'GeauxFaux-tg.32'; package: 'GeauxBeau' with: 'GeauxBeau-dkh.55'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFie' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectFie: spec "just projects" "self reset" spec for: #common do: [ spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Feaux' with: [ spec className: 'MetacelloTestConfigurationOfFeaux'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFeaux'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFoe' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectFoe: spec "projects and packages" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; loads: '1'; file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFum' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectFum: spec "master" "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Feaux' with: [ spec className: 'MetacelloTestConfigurationOfFeaux'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFeaux'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'ProjectFie' with: [ spec className: 'MetacelloTestConfigurationOfProjectFie'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfProjectFie'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'ProjectFee' with: [ spec className: 'MetacelloTestConfigurationOfProjectFee'; versionString: '4.0'; file: 'MetacelloTestConfigurationOfProjectFee'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectInfinite: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Loop' with: [ spec className: 'MetacelloTestConfigurationOfProjectLoop'; versionString: '4.0'; loads: 'GeauxBeau'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxBar' with: [ spec file: 'GeauxBar.branch-lr.2'; requires: 'Loop'; yourself ]; package: 'GoferBar' with: 'GoferBar-lr.1'; yourself ].! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectIssue95: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Loop' with: [ spec className: 'MetacelloTestConfigurationOfProjectLoop'; versionString: '4.0'; loads: 'GoferFaux'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; project: 'Infinite' with: [ spec className: 'MetacelloTestConfigurationOfProjectInfinite'; versionString: '4.0'; loads: 'GeauxBar'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ].! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline40ProjectLoop: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Infinite' with: [ spec className: 'MetacelloTestConfigurationOfProjectInfinite'; versionString: '4.0'; loads: 'GoferBar'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; package: 'GoferFaux' with: [ spec file:'GoferFaux-tg.30'; requires: 'Infinite'; yourself ]; package: 'GeauxBeau' with: [ spec file: 'GeauxBeau-dkh.55'; yourself ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline50Fan: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; versionString: '5.0'; loads: #('GoferFaux' 'GoferBeau'); file: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline50Foo: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with:'GoferFoo-lr.2'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.34'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself. spec group: '1' with: #('GoferFoo' 'GoferBar'); group: '2' with: #('GoferFoo' 'GoferFaux'); yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline50MethodSourceFan ^(self class sourceCodeAt: #baseline50Fan:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline50MethodSourceFoo ^(self class sourceCodeAt: #baseline50Foo:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFix' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60Fix: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.35'; yourself. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFix' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline60MethodSourceFix ^(self class sourceCodeAt: #baseline60Fix:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFix' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61Fix: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-lr.1'; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; package: 'GoferFaux' with: 'GoferFaux-tg.31'; yourself. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFix' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline61MethodSourceFix ^(self class sourceCodeAt: #baseline61Fix:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/11/2013 08:33'! baselineGoo300Issue156Configuration: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferGoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar.branch-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/11/2013 08:37'! baselineGoo400Issue156Configuration: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec baseline: 'Goo' with: [ spec repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; import: 'Goo' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/11/2013 08:38'! baselineGoo500Issue156Configuration: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec baseline: 'Goo' with: [ spec repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; import: 'Goo' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/10/2013 17:13'! baselineGooIssue156Baseline: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'; package: 'GoferBar' with: 'GoferBar.branch-lr.1'; package: 'GoferFaux' with: 'GoferFaux-tg.30'; package: 'GoferBeau' with: 'GoferBeau-dkh.53'; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion10Issue115: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec versionString: #'bleedingEdge'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFoo' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion10Issue119: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo ' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GoferBar ' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion10Issue136: spec spec for: #'common' do: [ spec blessing: #baseline. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferBeau'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion10Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; projectPackage: [ spec name: 'ConfigurationOfMetacelloExample'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion10MetacelloExample: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion113ProjectToolBox: spec spec for: #'outer' do: [ spec package: 'Example-Core'; package: 'Example-Test'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion11Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; projectPackage: [ spec name: 'MetacelloExampleTestConfigurationIssue154'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion124ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://www.example.com/aa'. ]. spec for: #'common' do: [ spec repository: 'http://www.example.com/ab'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion12Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; projectPackage: [ spec name: 'MetacelloExampleTestConfigurationIssue154'; file: 'MetacelloExampleTestConfigurationIssue154.gemstone'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion13Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; projectPackage: [ spec file: 'MetacelloExampleTestConfigurationIssue154.gemstone'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion20Issue119: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec versionString: #'bleedingEdge'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GoferBar ' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 125' stamp: 'dkh 9/11/2012 15:13'! baselineVersion20Issue125: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'MetacelloConfigurationResource>>baselineVersion20Issue125:'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec package: 'GoferFoo'; package: 'GoferBar' with: [ spec requires: 'GoferFoo' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion20Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion20Issue171: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GeauxFoo' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion21Issue171: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec className: 'MetacelloTestConfigurationOfFoo' ]; yourself. spec package: 'GeauxFoo' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion30Issue119: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo ' with: [ spec versionString: #'bleedingEdge'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GoferBar' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 125' stamp: 'dkh 9/11/2012 15:14'! baselineVersion30Issue125: spec spec for: #(#'attribute1' #'attribute2') do: [ spec description: 'MetacelloConfigurationResource>>baselineVersion30Issue125:'. spec package: 'GoferFaux' with: [ spec requires: 'GoferFoo' ]; package: 'GoferBeau' with: [ spec requires: 'GoferFaux' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion30Issue154: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'MetacelloExample' with: [ spec className: 'ConfigurationOfMetacelloExample'; versionString: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineVersion40Issue119: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec project: 'Foo' with: [ spec versionString: #'bleedingEdge'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ]; yourself. spec package: 'GoferBar' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 9/13/2012 15:54'! bleedingEdgeVersion: spec "self reset" spec for: #'common' version: '4.0'! ! !MetacelloConfigurationResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadDoIt "self reset" Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result' put: true! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadDoIt "self reset" Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result' put: true! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadDoItMethodSource ^(self class sourceCodeAt: #preloadDoIt) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! project "self reset" | constructor project | "Construct Metacello project" project := MetacelloMCProject new. "Allow for customization of #projectAttributes" project projectAttributes: MetacelloConfigurationResource projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: #linear. ^project ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClassMethodSource ^(self class class sourceCodeAt: #project) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 6/12/2012 15:41:23.319'! projectMethodSource ^(self class sourceCodeAt: #project) asString ! ! !MetacelloConfigurationResource methodsFor: 'running' stamp: 'dkh 07/28/2013 10:40'! setUp "self reset" super setUp. self setUpMonticelloRepository; setUpConfigurationOfFoo; setUpConfigurationOfFeaux; setUpConfigurationOfProjectFie; setUpConfigurationOfProjectFee; setUpConfigurationOfFum; setUpConfigurationOfProjectFoe; setUpConfigurationOfFan; setUpConfigurationOfFix; setUpIssue77; setUpIssue95; setUpConfigurationOfSymbolic; setUpConfigurationOfProjectToolBox; setUpConfigurationOfProjectIssue115; setUpConfigurationOfProjectIssue136; setUpConfigurationOfProjectIssue119; setUpConfigurationOfProjectIssue171; setUpConfigurationOfProjectIssue154; setUpConfigurationOfProjectIssue156; setUpIssue156ConfigurationOfProjectGoo; setUpIssue156ConfigurationOfProjectSoo; setUpConfigurationOfProjectFum; setUpConfigurationOfProjectIssue125; yourself! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFan' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfFan "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfFan-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline20Fan:' category: 'cat' timeStamp: '' source: self baseline20MethodSourceFan. MCMethodDefinition className: className asString selector: 'baseline30Fan:' category: 'cat' timeStamp: '' source: self baseline30MethodSourceFan. MCMethodDefinition className: className asString selector: 'baseline35Fan:' category: 'cat' timeStamp: '' source: self baseline35MethodSourceFan. MCMethodDefinition className: className asString selector: 'baseline40Fan:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceFan. MCMethodDefinition className: className asString selector: 'baseline50Fan:' category: 'cat' timeStamp: '' source: self baseline50MethodSourceFan. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFeaux' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfFeaux "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfFeaux-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40Feaux:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceFeaux. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFix' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfFix "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfFix-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline60Fix:' category: 'cat' timeStamp: '' source: self baseline60MethodSourceFix. MCMethodDefinition className: className asString selector: 'baseline61Fix:' category: 'cat' timeStamp: '' source: self baseline61MethodSourceFix. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 9/13/2012 15:55'! setUpConfigurationOfFoo "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfFoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'bleedingEdgeVersion:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'bleedingEdgeVersion:') asString). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'baseline20Foo:' category: 'cat' timeStamp: '' source: self baseline20MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline30Foo:' category: 'cat' timeStamp: '' source: self baseline30MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline35Foo:' category: 'cat' timeStamp: '' source: self baseline35MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline40Foo:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'baseline50Foo:' category: 'cat' timeStamp: '' source: self baseline50MethodSourceFoo). (MCMethodDefinition className: className asString selector: 'preloadDoIt' category: 'cat' timeStamp: '' source: self preloadDoItMethodSource)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFum' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfFum "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfFum-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectFum:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectFum. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfMetacelloExampledkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMetacelloExample-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion10MetacelloExample:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion10MetacelloExample:') asString). (MCMethodDefinition className: className asString selector: 'version10MetacelloExample:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10MetacelloExample:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFee' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectFee "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectFee-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectFee:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectFee. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFie' stamp: 'dkh 6/26/2012 14:56'! setUpConfigurationOfProjectFie "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectFie-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline15ProjectFie:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baseline15ProjectFie:') asString). (MCMethodDefinition className: className asString selector: 'baseline25ProjectFie:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baseline25ProjectFie:') asString). (MCMethodDefinition className: className asString selector: 'baseline35ProjectFie:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baseline35ProjectFie:') asString). (MCMethodDefinition className: className asString selector: 'baseline40ProjectFie:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baseline40ProjectFie:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFoe' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectFoe "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectFoe-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectFoe:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectFoe. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectFum' stamp: 'dkh 7/19/2012 07:32'! setUpConfigurationOfProjectFum "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectFum-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baseline10ProjectFum:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baseline10ProjectFum:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectInfinite "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectInfinite-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectInfinite:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectInfinite. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue115 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfProjectIssue115dkh1. versionInfo := self setUpConfigurationOfProjectIssue115dkh2: {versionInfo}. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue115dkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue115-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baselineVersion10Issue115:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baselineVersion10Issue115:) asString. MCMethodDefinition className: className asString selector: 'version10Issue115:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10Issue115:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue115dkh2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue115-dkh.2'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baselineVersion10Issue115:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baselineVersion10Issue115:) asString. MCMethodDefinition className: className asString selector: 'version10Issue115:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10Issue115:) asString. MCMethodDefinition className: className asString selector: 'version11Issue115:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11Issue115:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfProjectIssue119dkh1. versionInfo := self setUpConfigurationOfProjectIssue119dkh2: {versionInfo}. versionInfo := self setUpConfigurationOfProjectIssue119dkh3: {versionInfo}. versionInfo := self setUpConfigurationOfProjectIssue119dkh4: {versionInfo}. versionInfo := self setUpConfigurationOfProjectIssue119dkh5: {versionInfo}. versionInfo := self setUpConfigurationOfProjectIssue119dkh6: {versionInfo}. versionInfo := self setUpConfigurationOfProjectIssue119dkh7: {versionInfo}! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh1 "version 1.0" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion10Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion10Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version10Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh2: ancestors "version 2.0" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.2'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion20Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion20Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version20Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version20Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh3: ancestors "version 3.0" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.3'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion30Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion30Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version30Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version30Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh4: ancestors "version 4.0" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.4'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version40Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh5: ancestors "versions, 4.0, 4.1, 4.2, 4.3, 4.4" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.5'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version41Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version41Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version42Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version42Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version43Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version43Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version44Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version44Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh6: ancestors "versions 1.0, 2.0. 3.0,4.0, 4.1, 4.2, 4.3, 4.4" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.6'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion10Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion10Issue119:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion20Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion20Issue119:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion30Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion30Issue119:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version10Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version20Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version20Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version30Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version30Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version41Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version41Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version42Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version42Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version43Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version43Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version44Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version44Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue119dkh7: ancestors "versions 5.0" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue119-dkh.7'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion40Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion40Issue119:') asString). (MCMethodDefinition className: className asString selector: 'version50Issue119:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version50Issue119:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 125' stamp: 'dkh 9/11/2012 15:33'! setUpConfigurationOfProjectIssue125 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue125-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'version30Issue125:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version30Issue125:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion20Issue125:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion20Issue125:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion30Issue125:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion30Issue125:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue136 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfProjectIssue136dkh1. versionInfo := self setUpConfigurationOfProjectIssue136dkh2: {versionInfo}. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue136dkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue136-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baselineVersion10Issue136:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baselineVersion10Issue136:) asString. MCMethodDefinition className: className asString selector: 'version10Issue136:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10Issue136:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue136dkh2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue136-dkh.2'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baselineVersion10Issue136:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baselineVersion10Issue136:) asString. MCMethodDefinition className: className asString selector: 'version10Issue136:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10Issue136:) asString. MCMethodDefinition className: className asString selector: 'version11Issue136:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11Issue136:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo ! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue154 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfMetacelloExampledkh1. versionInfo := self setUpConfigurationOfProjectIssue154dkh1! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue154dkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion10Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion10Issue154:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion11Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion11Issue154:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion12Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion12Issue154:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion13Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion13Issue154:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion20Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion20Issue154:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion30Issue154:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion30Issue154:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 05/10/2013 17:13'! setUpConfigurationOfProjectIssue156 "https://github.com/dalehenrich/metacello-work/issues/156" "self reset" self setUpIssue156BaselineOfGoo; setUpIssue156ConfigurationOfGoo! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue171 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfProjectIssue171dkh1. versionInfo := self setUpConfigurationOfProjectIssue171dkh2: {versionInfo}! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue171dkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue171-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion20Issue171:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion20Issue171:') asString). (MCMethodDefinition className: className asString selector: 'version20Issue171:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version20Issue171:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue171dkh2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue171-dkh.2'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'baselineVersion21Issue171:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion21Issue171:') asString). (MCMethodDefinition className: className asString selector: 'version21Issue171:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version21Issue171:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectIssue95 "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectIssue95-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectIssue95:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectIssue95. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectLoop "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectLoop-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline40ProjectLoop:' category: 'cat' timeStamp: '' source: self baseline40MethodSourceProjectLoop. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfProjectToolBox "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfProjectToolBox-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCClassDefinition name: className superclassName: #'Object' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource). (MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource). (MCMethodDefinition className: className asString selector: 'postloadDoIt' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'postloadDoIt') asString). (MCMethodDefinition className: className asString selector: 'preloadDoIt' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'preloadDoIt') asString). (MCMethodDefinition className: className asString selector: 'symbolicVersionExplicitlyDoesNotExistProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'symbolicVersionExplicitlyDoesNotExistProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version100ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version100ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version101ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version101ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version102ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version102ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version103ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version103ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version104ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version104ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version105ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version105ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version106ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version106ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version107ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version107ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version108ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version108ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version109ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version109ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version110ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version110ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version111ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version111ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version112ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version112ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion113ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion113ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version113ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version113ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version114ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version114ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version115ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version115ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version116ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version116ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version117ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version117ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version118ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version118ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version119ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version119ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version120ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version120ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version121ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version121ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version122ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version122ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version123ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version123ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'baselineVersion124ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineVersion124ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version124ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version124ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version125ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version125ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version126ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version126ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version127ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version127ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version128ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version128ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version129ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version129ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version130ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version130ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version131ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version131ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version132ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version132ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version133ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version133ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version134ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version134ProjectToolBox:') asString). (MCMethodDefinition className: className asString selector: 'version135ProjectToolBox:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version135ProjectToolBox:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfSymbolic "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfSymbolic-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'stableVersionD:' category: 'cat' timeStamp: '' source: self stableVersionDMethodSourceSymbolic. MCMethodDefinition className: className asString selector: 'version40Symbolic:' category: 'cat' timeStamp: '' source: self version40SymbolicMethodSourceSymbolic. MCMethodDefinition className: className asString selector: 'version41Symbolic:' category: 'cat' timeStamp: '' source: self version41SymbolicMethodSourceSymbolic. MCMethodDefinition className: className asString selector: 'version42Symbolic:' category: 'cat' timeStamp: '' source: self version42SymbolicMethodSourceSymbolic. MCMethodDefinition className: className asString selector: 'version43Symbolic:' category: 'cat' timeStamp: '' source: self version43SymbolicMethodSourceSymbolic. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/10/2013 17:13'! setUpIssue156BaselineOfGoo "https://github.com/dalehenrich/metacello-work/issues/156" "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'BaselineOfGoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString selector: 'baselineGooIssue156Baseline:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGooIssue156Baseline:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/11/2013 08:38'! setUpIssue156ConfigurationOfGoo "https://github.com/dalehenrich/metacello-work/issues/156" "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'ConfigurationOfGoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString selector: 'baselineGoo300Issue156Configuration:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGoo300Issue156Configuration:') asString). (MCMethodDefinition className: className asString selector: 'baselineGoo400Issue156Configuration:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGoo400Issue156Configuration:') asString). (MCMethodDefinition className: className asString selector: 'baselineGoo500Issue156Configuration:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGoo500Issue156Configuration:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 05/11/2013 08:50'! setUpIssue156ConfigurationOfProjectGoo "https://github.com/dalehenrich/metacello-work/issues/156" "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'ConfigurationOfProjectGoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString selector: 'version10Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version11Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version11Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version20Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version20Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version30Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version30Issue156:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfFoo' stamp: 'dkh 07/28/2013 10:40'! setUpIssue156ConfigurationOfProjectSoo "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'ConfigurationOfProjectSoo-dkh.1'. className := reference packageName asSymbol. definitionArray := {(MCOrganizationDefinition categories: (Array with: className)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: className instVarNames: #() comment: ''). (MCMethodDefinition className: className asString selector: 'version10Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version11Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version11Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version20Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version20Issue156:') asString). (MCMethodDefinition className: className asString selector: 'version30Issue156:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version30Issue156:') asString)}. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #())! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpIssue77 "self reset" self setUpIssue77B; setUpIssue77C; setUpIssue77D ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpIssue77B "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfIssue77B-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline10B:' category: 'cat' timeStamp: '' source: self baseline10MethodSourceB. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpIssue77C "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfIssue77C-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline12C:' category: 'cat' timeStamp: '' source: self baseline12MethodSourceC. MCMethodDefinition className: className asString selector: 'baseline13C:' category: 'cat' timeStamp: '' source: self baseline13MethodSourceC. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 77' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpIssue77D "self reset" | reference className definitionArray | reference := GoferVersionReference name: 'MetacelloTestConfigurationOfIssue77D-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: className). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: self projectClassMethodSource. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: self projectMethodSource. MCMethodDefinition className: className asString selector: 'baseline10D:' category: 'cat' timeStamp: '' source: self baseline10MethodSourceD. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()) ! ! !MetacelloConfigurationResource methodsFor: 'Issue 95' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpIssue95 "self reset" self setUpConfigurationOfProjectInfinite; setUpConfigurationOfProjectLoop; setUpConfigurationOfProjectIssue95; yourself ! ! !MetacelloConfigurationResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." "self reset" monticelloRepository := MCDictionaryRepository new. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! stableVersionC: spec "self reset" spec for: #'common' do: [ spec version: '4.2']. spec for: #'platformVersion1.x' do: [ spec version: '4.0']. spec for: #'platformVersion1.0.x' do: [ spec version: '4.1']. spec for: #'platformVersion1.1.x' do: [ spec version: '4.2']. spec for: #'platformVersion1.2.x' do: [ spec version: '4.3']. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! stableVersionD: spec "self reset" spec for: #'common' version: '4.2'. spec for: #'platformVersion1.x' version: '4.0'. spec for: #'platformVersion1.0.x' version: '4.1'. spec for: #'platformVersion1.1.x' version: '4.2'. spec for: #'platformVersion1.2.x' version: '4.3'. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! stableVersionDMethodSourceSymbolic ^(self class sourceCodeAt: #stableVersionD:) asString ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! symbolicVersionExplicitlyDoesNotExistProjectToolBox: spec spec for: #'common' version: #'notDefined'! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version100ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'testBlessing'. spec package: 'Example-Core' with: [ spec includes: #('Example-AddOn' ); file: 'Example-Core-anon.1'; repository: 'http://www.example.com/or'; preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:'. ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ). ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version101ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'testBlessing'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version102ProjectToolBox: spec spec for: #'common' do: [ spec preLoadDoIt: #'preloadForCore'. spec postLoadDoIt: #'postloadForCore:package:'. spec package: 'Example-Core' with: [ spec includes: #('Example-AddOn' ). ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ). ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version103ProjectToolBox: spec spec for: #'common' do: [ spec preLoadDoIt: #'alternatePreloadForCore'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version104ProjectToolBox: spec spec for: #'common' do: [ spec preLoadDoIt: nil. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version105ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/ob'. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version106ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec repositories: [ spec repository: 'http://www.example.com/ob'; repository: 'http://www.example.com/or' ]. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version107ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec supplyingAnswers: #( #( 'preload' 'preload answer' ) #( 'postload' 'postload answer' ) ); preLoadDoIt: #'preloadForSupplyingAnswers'; postLoadDoIt: #'postloadForSupplyingAnswers'. ]; package: 'Example-Tests' with: [ spec supplyingAnswers: #( #( 'string' 'preload answer' ) #( 'symbol' #'abc def' ) #( 'integer' 1 ) #( 'boolean' true ) #( 'another boolean' false ) #( 'character' $a ) ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version108ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: #('Example-Core' ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version109ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec includes: #('Example-Core' ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! version10Issue115: spec spec for: #'common' do: [ spec blessing: #development. spec project: 'Foo' . spec package: 'GeauxFoo' with: 'GeauxFoo-lr.1'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version10Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! version10Issue136: spec spec for: #'common' do: [ spec blessing: #development. spec package: 'GoferBeau' with: 'GoferBeau-dkh.15'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 05/10/2013 17:13'! version10Issue156: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec configuration: 'Goo' with: [ spec versionString: '3.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 154' stamp: 'dkh 6/12/2012 15:41:23.319'! version10MetacelloExample: spec spec for: #'common' do: [ spec blessing: #'release'. spec package: 'GoferFoo' with: 'GoferFoo-lr.2' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version110ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core'; package: 'Example-Base'; package: 'Example-Test1' with: [ spec requires: #('Example-Base' ); includes: #('Example-Core' ). ]; package: 'Example-Test2' with: [ spec includes: #('Example-Core' ); supplyingAnswers: #( #( 'captionMatch' 'answer' ) ). ]; package: 'Example-Test3' with: [ spec requires: #('Example-Base' ); supplyingAnswers: #( #( 'captionMatch' 'answer' ) ). ]; package: 'Example-Test4' with: [ spec requires: #('Example-Base' ); includes: #('Example-Core' ); supplyingAnswers: #( #( 'captionMatch' 'answer' ) ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version111ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core'. spec for: #'nested' do: [ spec package: 'Example-Base'. ]. ]. spec for: #'extra' do: [ spec package: 'Example-Test'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version112ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core'. spec for: #'nested' do: [ spec package: 'Example-Base'; package: 'Example-Test-Nested'. ]. ]. spec for: #'extra' do: [ spec package: 'Example-Test'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version113ProjectToolBox: spec spec for: #'outer' do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.1'; package: 'Example-Test' with: 'Example-Test-dkh.1'. spec for: #'nested' do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.2'. ]. ]. spec for: #'extra' do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.3'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version114ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; repository: 'http://www.example.com/ob' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version115ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: #'alternatePreloadForCore' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version116ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: #'alternatePreloadForCore' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version117ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' overrides: [ spec preLoadDoIt: #'alternatePreloadForCore'. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version118ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec preLoadDoIt: #'alternatePreloadForCore'. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version119ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' overrides: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'alternatePreloadForCore'; repository: 'http://www.example.com/ob' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 6/12/2012 15:41:23.319'! version11Issue115: spec spec for: #'common' do: [ spec blessing: #development. spec project: 'Foo' with: ''. spec package: 'GeauxFoo' with: 'GeauxFoo-lr.1'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 136' stamp: 'dkh 6/12/2012 15:41:23.319'! version11Issue136: spec spec for: #'common' do: [ spec blessing: #development. spec package: 'GoferBeau' with: 'GoferBeau-dkh.25'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 05/10/2013 17:13'! version11Issue156: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec baseline: 'Goo' with: [ spec repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version120ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Copied Example' copyFrom: 'Example Project' with: [ spec preLoadDoIt: #'alternatePreloadForCore' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version121ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'testBlessing'. spec repository: 'http://www.example.com/vor'. spec package: 'Example-Core' with: [ spec includes: #('Example-AddOn' ); file: 'Example-Core-anon.1'; repository: 'http://www.example.com/or'; preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:'. ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ). ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ). ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version122ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; repository: 'http://www.example.com/ob' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version123ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; repository: 'http://www.example.com/ob'; repository: 'http://www.example.com/or' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version124ProjectToolBox: spec spec for: #'common' do: [ spec repository: 'http://www.example.com/ac'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version125ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec preLoadDoIt: #'preloadDoIt'; postLoadDoIt: #'postloadDoIt'. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version126ProjectToolBox: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec preLoadDoIt: nil; postLoadDoIt: nil. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version127ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadDoIt'; postLoadDoIt: #'postloadDoIt'; repository: 'http://www.example.com/ob' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version128ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: nil; postLoadDoIt: nil ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version129ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadDoIt'; postLoadDoIt: #'postloadDoIt'; repository: 'http://www.example.com/ob' ]; project: 'Copy Project' copyFrom: 'Example Project' with: [ spec preLoadDoIt: nil; postLoadDoIt: nil ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version130ProjectToolBox: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadDoIt'; postLoadDoIt: #'postloadDoIt'; repository: 'http://www.example.com/ob' ]; project: 'Copy Project' copyFrom: 'Example Project' with: [ spec repository: 'http://www.example.com/or' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version131ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'baseline'. ]. spec for: #'level1_1' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/1'. ]; package: 'Example-Core' with: [ spec repository: 'http://www.example.com/2'. ]; package: 'Example-Core' with: [ spec repository: 'http://www.example.com/3'. ]. spec for: #'level2_1' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/4'. ]. spec for: #'level3_1' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/5'. ]. ]. ]. spec for: #'level2_2' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/6'. ]. spec for: #'level3_2' do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/7'. ]. ]. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version132ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. ]. spec for: #'level1_1' do: [ spec package: 'GoferBeau' with: 'GoferBeau-dkh.15'. spec for: #'level2_1' do: [ spec package: 'GoferBeau' with: 'GoferBeau-dkh.25'. spec for: #'level3_1' do: [ spec package: 'GoferBeau' with: 'GoferBeau-dkh.53'. ]. ]. spec for: #'level2_2' do: [ spec package: 'GoferBeau' with: 'GoferBeau-dkh.54'. spec for: #'level3_2' do: [ spec package: 'GoferBeau' with: 'GoferBeau-dkh.55'. ]. ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version133ProjectToolBox: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. ]. spec for: #'level1_1' do: [ spec package: 'GoferBar' with: 'GoferBar-jf.1'. spec for: #'level2_1' do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1'. spec for: #'level3_1' do: [ spec package: 'GoferFaux' with: 'GoferFaux-tg.30'. ]. ]. spec for: #'level2_2' do: [ spec package: 'GeauxBar' with: 'GeauxBar.branch-lr.2'. spec for: #'level3_2' do: [ spec package: 'GeauxBeau' with: 'GeauxBeau-dkh.55'. ]. ]. ]. spec for: #'pharo' do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version134ProjectToolBox: spec spec for: #'common' do: [ ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfProjectToolBox' stamp: 'dkh 6/12/2012 15:41:23.319'! version135ProjectToolBox: spec spec for: #'common' do: [ spec repositories: [ spec repository: 'http://www.example.com/ab'; repository: 'http://www.example.com/ac' ]. ]. ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version20Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 05/11/2013 08:49'! version20Issue156: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec configuration: 'Goo' with: [ spec versionString: '4.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! version20Issue171: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GeauxFoo' with: 'GeauxFoo-lr.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 171' stamp: 'dkh 6/12/2012 15:41:23.319'! version21Issue171: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GeauxFoo' with: 'GeauxFoo-lr.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version30Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 125' stamp: 'dkh 9/11/2012 15:46'! version30Issue125: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloConfigurationResource>>version30Issue125:'. spec package: 'GoferFoo' with: 'GoferFoo-lr.4'; package: 'GoferBar' with: 'GoferBar-jf.1'; yourself ]. spec for: #'attribute1' do: [ spec package: 'GoferFaux' with: 'GoferFaux-tg.32'; package: 'GoferBeau' with: 'GoferBeau-dkh.55'; yourself ]. spec for: #'attribute2' do: [ spec package: 'GoferFaux' with: 'GoferFaux-tg.33'; package: 'GoferBeau' with: 'GoferBeau-dkh.56'; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 115' stamp: 'dkh 05/11/2013 08:51'! version30Issue156: spec "https://github.com/dalehenrich/metacello-work/issues/156" spec for: #'common' do: [ spec configuration: 'Goo' with: [ spec versionString: '5.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository' ]; yourself ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version40Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version40Symbolic: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.15'; package: 'GoferFaux' with:'GoferFaux-tg.30'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version40SymbolicMethodSourceSymbolic ^(self class sourceCodeAt: #version40Symbolic:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version41Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo ' with: '2.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version41Symbolic: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.25'; package: 'GoferFaux' with:'GoferFaux-tg.31'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version41SymbolicMethodSourceSymbolic ^(self class sourceCodeAt: #version41Symbolic:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version42Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '2.0'. spec package: 'GoferBar ' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version42Symbolic: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #release. spec package: 'GoferBeau' with: 'GoferBeau-dkh.53'; package: 'GoferFaux' with:'GoferFaux-tg.32'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version42SymbolicMethodSourceSymbolic ^(self class sourceCodeAt: #version42Symbolic:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version43Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo ' with: '2.0'. spec package: 'GoferBar ' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version43Symbolic: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://Metacello_Gofer_Test_Repository'. spec blessing: #development. spec package: 'GoferBeau' with: 'GoferBeau-dkh.54'; package: 'GoferFaux' with:'GoferFaux-tg.33'; yourself ]. ! ! !MetacelloConfigurationResource methodsFor: 'ConfigurationOfSymbolic' stamp: 'dkh 6/12/2012 15:41:23.319'! version43SymbolicMethodSourceSymbolic ^(self class sourceCodeAt: #version43Symbolic:) asString ! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version44Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: 2.0. spec package: 'GoferBar ' with: 'GoferBar-jf.1' ]! ! !MetacelloConfigurationResource methodsFor: 'Issue 119' stamp: 'dkh 6/12/2012 15:41:23.319'! version50Issue119: spec spec for: #'common' do: [ spec blessing: #'development'. spec project: 'Foo' with: '1.0'. spec package: 'GoferBar' with: 'GoferBar-jf.1' ]! ! !MetacelloIssue108Resource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloIssue108Resource methodsFor: 'running' stamp: 'dkh 05/09/2013 12:02'! setUp "https://code.google.com/p/metacello/issues/detail?id=108" super setUp. self setUpVersionReferences; setUpMonticelloRepository! ! !MetacelloIssue108Resource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." monticelloRepository := MCDictionaryRepository new. versionReferences do: [ :reference | monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: (reference packageName copyWithout: $-) asSymbol superclassName: #Object category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: #()) ]! ! !MetacelloIssue108Resource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpVersionReferences "self reset" versionReferences := OrderedCollection new. versionReferences add: (GoferVersionReference name: 'GoferBar.gemstone-dkh.68'); add: (GoferVersionReference name: 'GoferBar.gemstone-dkh.69'); add: (GoferVersionReference name: 'GoferBar.gemstone-dkh.70'); add: (GoferVersionReference name: 'GoferBar-dkh.68'); add: (GoferVersionReference name: 'GoferBar-dkh.69'); add: (GoferVersionReference name: 'GoferBar-dkh.70'); yourself ! ! !MetacelloIssue108Resource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! versionReferences ^ versionReferences! ! !MetacelloMonticelloResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository ^ monticelloRepository! ! !MetacelloMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. self setUpVersionReferences; setUpMonticelloRepository! ! !MetacelloMonticelloResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." monticelloRepository := MCDictionaryRepository new. versionReferences do: [ :reference | monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: (Array with: (MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)) with: (MCClassDefinition name: (reference packageName copyWithout: $-) asSymbol superclassName: #Object category: reference packageName asSymbol instVarNames: #() comment: ''))) dependencies: #()) ]! ! !MetacelloMonticelloResource methodsFor: 'running' stamp: 'dkh 07/19/2013 22:53'! setUpVersionReferences "self reset" versionReferences := OrderedCollection new. versionReferences add: (GoferVersionReference name: 'GoferBar.branch-lr.1'); add: (GoferVersionReference name: 'GoferBar.branch-lr.2'); add: (GoferVersionReference name: 'GoferBar-jf.1'); add: (GoferVersionReference name: 'GoferBar-lr.1'); add: (GoferVersionReference name: 'GoferFoo-lr.1'); add: (GoferVersionReference name: 'GoferFoo-lr.2'); add: (GoferVersionReference name: 'GoferFoo-lr.4'); add: (GoferVersionReference name: 'GoferBeau-dkh.15'); add: (GoferVersionReference name: 'GoferBeau-dkh.25'); add: (GoferVersionReference name: 'GoferBeau-dkh.53'); add: (GoferVersionReference name: 'GoferBeau-dkh.54'); add: (GoferVersionReference name: 'GoferBeau-dkh.55'); add: (GoferVersionReference name: 'GoferBeau-dkh.56'); add: (GoferVersionReference name: 'GoferFaux-tg.30'); add: (GoferVersionReference name: 'GoferFaux-tg.31'); add: (GoferVersionReference name: 'GoferFaux-tg.32'); add: (GoferVersionReference name: 'GoferFaux-tg.33'); add: (GoferVersionReference name: 'GoferFaux-tg.34'); add: (GoferVersionReference name: 'GoferFaux-tg.35'); add: (GoferVersionReference name: 'GeauxBar.branch-lr.2'); add: (GoferVersionReference name: 'GeauxFoo-lr.1'); add: (GoferVersionReference name: 'GeauxFaux-tg.32'); add: (GoferVersionReference name: 'GeauxBeau-dkh.55'); add: (GoferVersionReference name: 'GeauxBeau-dkh.56'); add: (GoferVersionReference name: 'ConfigurationOfNautilusWithoutPackages-dkh.55'); add: (GoferVersionReference name: 'ConfigurationOfNautilusWithoutPackages-dkh.56'); add: (GoferVersionReference name: 'ConfigurationOfNautilusWithoutPackages-dkh.57'); add: (GoferVersionReference name: 'ConfigurationOfNautilus-dkh.56'); add: (GoferVersionReference name: 'ConfigurationOfGlamourSeaside-dkh.55'); add: (GoferVersionReference name: 'ConfigurationOfGlamourSeaside-dkh.56'); add: (GoferVersionReference name: 'ConfigurationOfGlamourSeaside-dkh.57'); add: (GoferVersionReference name: 'ConfigurationOfGlamour-dkh.56'); yourself! ! !MetacelloMonticelloResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! versionReferences ^ versionReferences! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 6/22/2012 17:37'! externalConfigurationSHA "SHA of commit on 'configuration' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" "self reset" ^ 'd91949731736bf48879781c29c7365feca461cde'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/16/2013 14:08'! externalCustomIssue181SHA "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ '36ac04abfc3a173de9432a134a718bf14b0a6968'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/19/2013 12:56'! externalCustomIssue185SHA "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ '29efb3d9cb86da55402a543cbef5771e39f864e7'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/20/2013 03:58'! externalCustomIssue185SHA1 "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ '96cf2ed0a252ce55b7fd5ec4bedf3ad999ca6d23'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/20/2013 03:58'! externalCustomIssue185SHA2 "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ '9e79d0e165bd51f7476d10a07968706f6034a6e6'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/20/2013 03:58'! externalCustomIssue185SHA3 "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ '11dfa72bc4a956ce0cb5a7603ea39f5abf73ff1c'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 07/20/2013 03:58'! externalCustomIssue185SHA4 "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" ^ 'e36dcd023518f4d2a209a482097f5a8ef745ef25'! ! !MetacelloScriptingResource class methodsFor: 'accessing' stamp: 'dkh 6/22/2012 17:26'! externalCustomSHA "SHA of commit on 'custom' branch that should be used with this version of tests (https://github.com/dalehenrich/external)" "it's too dangerous to use the HEAD of a branch in tests, because over time the HEAD will change to match latest testing needs, but old tests will likely break" "self reset" ^ '1ac58502ade7814e1590f71d615cca434b1a4fd5'! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 06/29/2013 12:27'! baselineGithubReferenceIV: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineGithubReferenceIV:'. spec baseline: 'External' with: [ spec repository: 'http://ss3.gemtalksystems.com/ss/external' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineGithubReferenceV: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineGithubReferenceV:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineGithubReferenceVI: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineGithubReferenceVI:'. spec baseline: 'External Core' with: [ spec className: 'BaselineOfExternal'; loads: 'Core'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ]; baseline: 'External Tests' with: [ spec className: 'BaselineOfExternal'; loads: 'Tests'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineGithubReferenceVII: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineGithubReferenceVII:'. spec baseline: 'External Core' with: [ spec className: 'BaselineOfExternal'; loads: 'Core'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ]; project: 'External Tests' copyFrom: 'External Core' with: [ spec loads: 'Tests' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineGithubReferenceXX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineGithubReferenceXX:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/18/2012 14:38'! baselineIssue32: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>baselineIssue32:'. spec package: 'External-CoreX'; package: 'External-TestsX' with: [ spec requires: 'External-CoreX' ]; preLoadDoIt: #'preloadDoIt'; postLoadDoIt: #'postloadDoIt'; yourself. spec group: 'Core' with: #('External-CoreX'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-TestsX'); yourself ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/16/2013 14:11'! configuration091Issue181: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration091Issue181:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/16/2013 14:11'! configuration091Issue63: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration091Issue63:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/16/2013 14:11'! configuration092Issue181: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration092Issue181:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue181SHA , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/16/2013 14:11'! configuration092Issue63: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration092Issue63:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ]; package: 'GoferBar' with: [ spec file: 'GoferBar-lr.1'; repository: 'dictionary://Metacello_Gofer_Test_Repository' ]; package: 'GoferFoo' with: [ spec file: 'GoferFoo-lr.2'; requires: 'External'; repository: 'dictionary://Metacello_Gofer_Test_Repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/19/2013 12:52'! configuration093Issue185: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration093Issue185:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue185SHA , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/20/2013 03:58'! configuration094Issue185: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration094Issue185:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue185SHA1 , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/20/2013 03:58'! configuration095Issue185: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration095Issue185:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue185SHA2 , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/20/2013 03:59'! configuration096Issue185: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration0956Issue185:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue185SHA3 , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/20/2013 03:59'! configuration097Issue185: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configuration0957Issue185:'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomIssue185SHA4 , '/repository' ]; import: 'External' ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 07/29/2013 07:47'! configurationExternalRef090: spec spec for: #'common' do: [ spec blessing: #'version'. spec description: 'MetacelloScriptingResource>>configurationExternalRef090:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 07/29/2013 07:47'! configurationExternalRef091: spec spec for: #'common' do: [ spec blessing: #'version'. spec description: 'MetacelloScriptingResource>>configurationExternalRef090:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/22/2012 17:22'! configurationGithubReferenceIV: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configurationGithubReferenceIV:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.0'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/22/2012 17:22'! configurationGithubReferenceV: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configurationGithubReferenceV:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.0'; loads: 'Core'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ]; project: 'External Tests' copyFrom: 'External' with: [ spec loads: 'Tests' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/22/2012 17:22'! configurationGithubReferenceX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configurationGithubReferenceX:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.0'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/22/2012 17:22'! configurationGithubReferenceXX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configurationGithubReferenceXX:'. spec configuration: 'External' with: [ spec version: '0.9.0'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 06/29/2013 12:27'! configurationGithubReferenceXXX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>configurationGithubReferenceXXX:'. spec configuration: 'External' with: [ spec version: '0.9.0'; repository: 'http://ss3.gemtalksystems.com/ss/external' ] ]! ! !MetacelloScriptingResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationRepository ^ configurationRepository! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/22/2012 17:23'! conflictOf10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>conflictOf10:'. spec author: 'dkh'. spec timestamp: '6/1/2012 14:46' ]. spec for: #'custom' do: [ spec configuration: 'ExternalX' with: [ spec version: '0.9.1'; repository: 'dictionary://Metacello_Conflict_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/22/2012 17:23'! conflictOf11: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>conflictOf11:'. spec author: 'dkh'. spec timestamp: '6/1/2012 14:46' ]. spec for: #'custom' do: [ spec configuration: 'ExternalX' with: [ spec version: '0.9.0'; repository: 'dictionary://Metacello_Conflict_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/22/2012 17:23'! conflictOf12: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>conflictOf12:'. spec author: 'dkh'. spec timestamp: '6/1/2012 14:46' ]. spec for: #'custom' do: [ spec configuration: 'ExternalX' with: [ spec operator: #'='; version: '0.9.2'; repository: 'dictionary://Metacello_Conflict_Test_Repository' "#= forces conflict" ] ]! ! !MetacelloScriptingResource methodsFor: 'external repository' stamp: 'dkh 6/12/2012 15:41:23.319'! customProjectAttributes ^ #(#custom)! ! !MetacelloScriptingResource methodsFor: 'external core' stamp: 'dkh 6/12/2012 15:41:23.319'! externalAuthorName ^ 'dkh'! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! externalBaselineX: spec spec description: 'MetacelloScriptingResource>>externalBaselineX:'. spec package: 'External-CoreX'; package: 'External-TestsX' with: [ spec requires: 'External-CoreX' ]; yourself. spec group: 'Core' with: #('External-CoreX'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-TestsX'); yourself! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! externalBaselineXX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>externalBaselineXX:'. spec package: 'External-CoreX'; package: 'External-TestsX' with: [ spec requires: 'External-CoreX' ]; yourself. spec group: 'Core' with: #('External-CoreX'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-TestsX'); yourself ]! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! externalBaselineXXX: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>externalBaselineXXX:'. spec package: 'External-CoreX'; package: 'External-TestsX' with: [ spec requires: 'External-CoreX' ]; yourself. spec group: 'Core' with: #('External-CoreX'); group: 'default' with: #('Core'); group: 'Tests' with: #('External-TestsX'); yourself ]. spec for: #'custom' do: [ spec package: 'External-UIX'. spec group: 'UI' with: #('External-UIX') ]! ! !MetacelloScriptingResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! externalRepository ^ externalRepository! ! !MetacelloScriptingResource methodsFor: 'invalid configurations' stamp: 'dkh 6/22/2012 17:23'! invalidConfiguration10: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>invalidConfiguration10: ... missing className:'. spec project: 'External' with: [ spec version: '0.9.0'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'invalid configurations' stamp: 'dkh 6/22/2012 17:23'! invalidConfiguration20: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>invalidConfiguration20: ... missing version:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'invalid configurations' stamp: 'dkh 6/22/2012 17:24'! invalidConfiguration30: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>invalidConfiguration30: ... missing repository:'. spec project: 'External' with: [ spec className: 'ConfigurationOfExternal'; version: '0.9.0' ] ]! ! !MetacelloScriptingResource methodsFor: 'external core' stamp: 'dkh 6/12/2012 15:41:23.319'! isExternal ^ false! ! !MetacelloScriptingResource methodsFor: 'sample repository' stamp: 'dkh 6/12/2012 15:41:23.319'! isSample ^ false! ! !MetacelloScriptingResource methodsFor: 'locking' stamp: 'dkh 7/20/2012 16:48'! lockConfiguration10: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>lockConfiguration10: '. spec configuration: 'ExternalX' with: [ spec version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'locking' stamp: 'dkh 7/20/2012 16:48'! lockConfiguration11: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>lockConfiguration10: '. spec configuration: 'ExternalX' with: [ spec version: '0.9.1'; repository: 'dictionary://Metacello_Config_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/18/2012 14:37'! postloadDoIt "self reset" Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result' put: true! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/18/2012 14:37'! preloadDoIt "self reset" Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result' put: true! ! !MetacelloScriptingResource methodsFor: 'sample repository' stamp: 'dkh 6/12/2012 15:41:23.319'! sampleAuthorName ^ (Smalltalk at: #'ExternalCore') new externalAuthorName! ! !MetacelloScriptingResource methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! sampleRepository ^ sampleRepository! ! !MetacelloScriptingResource methodsFor: 'running' stamp: 'dkh 07/29/2013 07:34'! setUp "self reset" super setUp. self setUpRepositories; setUpExternalCore; setUpExternalCoreX; setUpSampleCore; setUpBaselineOfExternalX; setUpBaselineOfExternalXX; setUpBaselineOfExternalXXX; setUpConfigurationOfExternaldkh1; setUpConfigurationOfExternaldkh2; setUpConfigurationExternalRef; setUpConfigurationOfExternalX; setUpConfigurationOfExternalXX; setUpConfigurationOfExternalXXX; setUpConfigurationOfExternalIV; setUpBaselineGithubReferenceXX; setUpBaselineGithubReferenceIV; setUpBaselineGithubReferenceV; setUpBaselineGithubReferenceVI; setUpBaselineGithubReferenceVII; setUpBaselineGithubReferenceVIII; setUpBaselineGithubReferenceIX; setUpBaselineGithubReferenceXI; setUpBaselineGithubReferenceXII; setUpBaselineGithubReferenceXIII; setUpMarianosImage; setUpConfigurationOfConflict; setUpInvalidConfigurations; setUpConfigurationIssue32; setUpBaselineIssue32; setUpConfigurationIssue59; setUpConfiguration63; setUpLockConfigurations; setUpConfigurationIssue84; setUpConfigurationNextedIssue84; setUpConfiguration181; yourself! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceIV "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefIV-dkh.1'. className := #'BaselineOfGithubRefIV'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationGithubReferenceX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationGithubReferenceX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceIX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefIX-dkh.1'. className := #'BaselineOfGithubRefIX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationGithubReferenceIV:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationGithubReferenceIV:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceV "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefV-dkh.1'. className := #'BaselineOfGithubRefV'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationGithubReferenceXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationGithubReferenceXX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceVI "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefVI-dkh.1'. className := #'BaselineOfGithubRefVI'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationGithubReferenceXXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationGithubReferenceXXX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceVII "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefVII-dkh.1'. className := #'BaselineOfGithubRefVII'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineGithubReferenceIV:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGithubReferenceIV:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceVIII "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefVIII-dkh.1'. className := #'BaselineOfGithubRefVIII'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineGithubReferenceV:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGithubReferenceV:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceXI "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefXI-dkh.1'. className := #'BaselineOfGithubRefXI'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationGithubReferenceV:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationGithubReferenceV:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceXII "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefXII-dkh.1'. className := #'BaselineOfGithubRefXII'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineGithubReferenceVI:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGithubReferenceVI:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceXIII "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefXIII-dkh.1'. className := #'BaselineOfGithubRefXIII'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineGithubReferenceVII:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGithubReferenceVII:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineGithubReferenceXX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfGithubRefXX-dkh.1'. className := #'BaselineOfGithubRefXX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineGithubReferenceXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineGithubReferenceXX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/18/2012 15:07'! setUpBaselineIssue32 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfIssue32-dkh.1'. className := #'BaselineOfIssue32'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'postloadDoIt' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'postloadDoIt') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'preloadDoIt' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'preloadDoIt') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'baselineIssue32:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'baselineIssue32:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineOfExternalX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfExternalX-dkh.1'. className := #'BaselineOfExternalX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'externalBaselineX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'externalBaselineX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineOfExternalXX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfExternalXX-dkh.1'. className := #'BaselineOfExternalXX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'externalBaselineXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'externalBaselineXX:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - external' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpBaselineOfExternalXXX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'BaselineOfExternalXXX-dkh.1'. className := #'BaselineOfExternalXXX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'BaselineOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'externalBaselineXXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'externalBaselineXXX:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 07/19/2013 15:32'! setUpConfiguration181 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfIssue181-dkh.1'. className := #'ConfigurationOfIssue181'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration091Issue181:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration091Issue181:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration092Issue181:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration092Issue181:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration093Issue185:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration093Issue185:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration094Issue185:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration094Issue185:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration095Issue185:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration095Issue185:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration096Issue185:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration096Issue185:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration097Issue185:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration097Issue185:') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 63' stamp: 'dkh 6/26/2012 16:45'! setUpConfiguration63 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfIssue63-dkh.1'. className := #'ConfigurationOfIssue63'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration091Issue63:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration091Issue63:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configuration092Issue63:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configuration092Issue63:') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline pragma - github reference' stamp: 'dkh 07/29/2013 07:34'! setUpConfigurationExternalRef "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalRef-dkh.1'. className := #'ConfigurationOfExternalRef'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationExternalRef090:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationExternalRef090:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'configurationExternalRef091:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'configurationExternalRef091:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/18/2012 15:47'! setUpConfigurationIssue32 "see https://github.com/dalehenrich/metacello-work/issues/32" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfIssue32-dkh.1'. className := #'ConfigurationOfIssue32'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version10Issue47:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue47:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version09Issue32:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version09Issue32:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 59' stamp: 'dkh 6/22/2012 18:13'! setUpConfigurationIssue59 "see https://github.com/dalehenrich/metacello-work/issues/59" "Use MetacelloVersionNumber instead of MetacelloSematicVersionNumber" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfIssue59-dkh.1'. className := #'ConfigurationOfIssue59'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version10Issue59:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue59:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionNumberClass' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionNumberClass') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 7/24/2012 19:21'! setUpConfigurationIssue84 "see https://github.com/dalehenrich/metacello-work/issues/84" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfIssue84-dkh.1'. className := #'ConfigurationOfIssue84'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version10Issue84:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10Issue84:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 8/3/2012 17:24'! setUpConfigurationNextedIssue84 "see https://github.com/dalehenrich/metacello-work/issues/84" "self reset" | versionInfo | versionInfo := self setUpConfigurationNextedIssue84dkh1. self setUpConfigurationNextedIssue84dkh2: {versionInfo}! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 7/24/2012 20:20'! setUpConfigurationNextedIssue84dkh1 "see https://github.com/dalehenrich/metacello-work/issues/84" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfNestedIssue84-dkh.1'. className := #'ConfigurationOfNestedIssue84'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version10NestedIssue84:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10NestedIssue84:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionNumberClass' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionNumberClass') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 7/24/2012 20:37'! setUpConfigurationNextedIssue84dkh2: ancestors "see https://github.com/dalehenrich/metacello-work/issues/84" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfNestedIssue84-dkh.2'. className := #'ConfigurationOfNestedIssue84'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'version10NestedIssue84:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'version10NestedIssue84:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionNumberClass' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionNumberClass') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpConfigurationOfConflict "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfConflict-dkh.1'. className := #'ConfigurationOfConflict'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'conflictOf10:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'conflictOf10:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'conflictOf11:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'conflictOf11:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'conflictOf12:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'conflictOf12:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:32'! setUpConfigurationOfExternalIV "see https://github.com/dalehenrich/metacello-work/issues/6" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalIV-dkh.1'. className := #'ConfigurationOfExternalIV'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfIV:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfIV:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:17'! setUpConfigurationOfExternalX "self reset" | versionInfo | versionInfo := self setUpConfigurationOfExternalXdkh1. versionInfo := self setUpConfigurationOfExternalXdkh2: {versionInfo}! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 7/21/2012 14:20'! setUpConfigurationOfExternalXX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalXX-dkh.1'. className := #'ConfigurationOfExternalXX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfXX:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:16'! setUpConfigurationOfExternalXXX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalXXX-dkh.1'. className := #'ConfigurationOfExternalXXX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfXXX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfXXX:') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:16'! setUpConfigurationOfExternalXdkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalX-dkh.1'. className := #'ConfigurationOfExternalX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'stableVersionOfX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'stableVersionOfX:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfX090:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfX090:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:16'! setUpConfigurationOfExternalXdkh2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternalX-dkh.2'. className := #'ConfigurationOfExternalX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'stableVersionOfX:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'stableVersionOfX:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfX090:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfX090:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfX091:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfX091:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 07/29/2013 13:46'! setUpConfigurationOfExternaldkh1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternal-dkh.1'. className := #'ConfigurationOfExternal'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfExternal090:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfExternal090:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 07/29/2013 13:46'! setUpConfigurationOfExternaldkh2 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfExternal-dkh.2'. className := #'ConfigurationOfExternal'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfExternal090:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfExternal090:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfExternal091:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfExternal091:') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external core' stamp: 'ChristopheDemarey 9/12/2013 18:36'! setUpExternalCore "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'External-Core-dkh.1'. className := #'ExternalCore'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'Object' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'externalAuthorName' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'externalAuthorName') asString). (MCMethodDefinition className: 'Object' classIsMeta: true selector: 'isExternal' category: '*external-core' timeStamp: '' source: (self class sourceCodeAt: #'isExternal') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external core' stamp: 'dkh 07/26/2013 09:48'! setUpExternalCoreX "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'External-CoreX-dkh.1'. className := #'ExternalCoreX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'Object' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'externalAuthorName' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'externalAuthorName') asString). (MCMethodDefinition className: 'Object' classIsMeta: true selector: 'isExternal' category: '*external-corex' timeStamp: '' source: (self class sourceCodeAt: #'isExternal') asString)}. externalRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'invalid configurations' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpInvalidConfigurations "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfInvalidConfigurations-dkh.1'. className := #'ConfigurationOfInvalidConfigurations'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'invalidConfiguration10:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'invalidConfiguration10:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'invalidConfiguration20:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'invalidConfiguration20:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'invalidConfiguration30:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'invalidConfiguration30:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'locking' stamp: 'dkh 7/20/2012 16:50'! setUpLockConfigurations "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfLockConfigurations-dkh.1'. className := #'ConfigurationOfLockConfigurations'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'lockConfiguration10:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'lockConfiguration10:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'lockConfiguration11:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'lockConfiguration11:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpMarianosImage "className: test case seehttps://github.com/dalehenrich/metacello-work/issues/24" "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'MarianosImage-dkh.1'. className := #'MarianosImage'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'ConfigurationOf' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: false selector: 'versionOfMariano:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'versionOfMariano:') asString). (MCMethodDefinition className: className asString classIsMeta: false selector: 'customProjectAttributes' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'customProjectAttributes') asString)}. configurationRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositories "self reset" configurationRepository := MCDictionaryRepository new. externalRepository := MCDictionaryRepository new. sampleRepository := MCDictionaryRepository new! ! !MetacelloScriptingResource methodsFor: 'sample repository' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpSampleCore "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'Sample-CoreX-dkh.1'. className := #'SampleCoreX'. definitionArray := {(MCOrganizationDefinition categories: (Array with: reference packageName asSymbol)). (MCClassDefinition name: className superclassName: #'Object' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: className asString classIsMeta: true selector: 'sampleAuthorName' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #'sampleAuthorName') asString). (MCClassDefinition name: #'Object' superclassName: #'ProtoObject' category: reference packageName instVarNames: #() comment: ''). (MCMethodDefinition className: 'Object' classIsMeta: true selector: 'isSample' category: '*sample-core' timeStamp: '' source: (self class sourceCodeAt: #'isSample') asString)}. sampleRepository basicStoreVersion: (MCVersion new setPackage: (MetacelloTestsMCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^ versionInfo! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:03'! stableVersionOfX: spec "self reset" spec for: #'common' version: '0.9.0'! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/22/2012 17:24'! version09Issue32: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>baselineOfIssue32:'. spec author: 'dkh'. spec timestamp: '6/18/2012 14:34' ]. spec for: #'custom' do: [ spec baseline: 'Issue32' with: [ spec repository: 'dictionary://Metacello_External_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/22/2012 17:24'! version10Issue47: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>version10Issue47:'. spec author: 'dkh'. spec timestamp: '6/18/2012 14:34'. spec baseline: 'Issue32' ]. spec for: #'custom' do: [ spec baseline: 'Issue32' with: [ spec repository: 'dictionary://Metacello_External_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 32' stamp: 'dkh 6/22/2012 18:11'! version10Issue59: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>version10Issue59:'. spec author: 'dkh'. spec timestamp: '6/18/2012 14:34'. spec baseline: 'Issue32' ]. spec for: #'custom' do: [ spec baseline: 'Issue32' with: [ spec repository: 'dictionary://Metacello_External_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 7/24/2012 19:34'! version10Issue84: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'MetacelloScriptingResource>>version10Issue84:'. spec author: 'dkh'. spec timestamp: '7/24/2012 19:23'. spec configuration: 'NestedIssue84' with: [ spec version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'issue 84' stamp: 'dkh 7/24/2012 20:11'! version10NestedIssue84: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>version10NestedIssue84:'. spec author: 'dkh'. spec timestamp: '7/24/2012 19:23'. spec repository: 'dictionary://Metacello_Configuration_Test_Repository'. spec package: 'External-CoreX' ]! ! !MetacelloScriptingResource methodsFor: 'issue 59' stamp: 'dkh 6/22/2012 18:07'! versionNumberClass ^ MetacelloVersionNumber! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 07/26/2013 10:08'! versionOfExternal090: spec spec for: #'common' do: [ spec description: 'MetacelloScriptingResource>>versionOfExternal090:'. spec repository: 'dictionary://Metacello_Configuration_Test_Repository'. spec package: 'External-Core' with: 'External-Core-dkh.1'; yourself ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 07/26/2013 09:58'! versionOfExternal091: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfExternal091:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 7/21/2012 14:21'! versionOfIV: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>baselineOfIV:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16' ]. spec for: #'custom' do: [ spec baseline: 'ExternalX' with: [ spec repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'baseline:with:' stamp: 'dkh 6/22/2012 17:24'! versionOfMariano: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfMariano:'. spec author: 'dkh'. spec timestamp: '5/31/2012 16:04' ]. spec for: #'custom' do: [ spec baseline: 'ExternalX' with: [ spec repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 6/22/2012 17:24'! versionOfX090: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfX090:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16' ]. spec for: #'custom' do: [ spec baseline: 'ExternalX' with: [ spec repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 6/12/2012 15:41:23.319'! versionOfX091: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfX091:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16' ]. spec for: #'custom' do: [ spec baseline: 'ExternalX' with: [ spec repository: 'dictionary://Metacello_Configuration_Test_Repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 6/22/2012 17:25'! versionOfXX: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfXX:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16' ]. spec for: #'custom' do: [ spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloScriptingResource methodsFor: 'external configurations' stamp: 'dkh 6/22/2012 17:25'! versionOfXXX: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'MetacelloScriptingResource>>versionOfXXX:'. spec author: 'dkh'. spec timestamp: '5/4/2012 14:16'. spec baseline: 'External' with: [ spec repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository' ] ]! ! !MetacelloValueHolderSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224766! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec value: ', self value printString! ! !MetacelloValueHolderSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224605! mergeMap | map | map := super mergeMap. map at: #value put: value. ^map! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225060! setAuthorInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setAuthor: self! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225232! setBlessingInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setBlessing: self! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225408! setDescriptionInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setDescription: self! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225601! setPostLoadDoItInMetacelloSpec: aMetacelloSpec aMetacelloSpec setPostLoadDoIt: self! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225779! setPreLoadDoItInMetacelloSpec: aMetacelloSpec aMetacelloSpec setPreLoadDoIt: self! ! !MetacelloValueHolderSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26225945! setTimestampInMetacelloVersion: aMetacelloVersionSpec aMetacelloVersionSpec setTimestamp: self! ! !MetacelloValueHolderSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224962! value ^ value! ! !MetacelloValueHolderSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26224488! value: anObject value := anObject! ! !MetacelloValueHolderSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! value: anObject constructor: aVersionConstructor aVersionConstructor valueForValueHolder: anObject! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 9/21/2010 20:32'! testLessonsReturnsAllLessonInstances |lessons| lessons := MockTutorial new lessons. self assert:3 equals:lessons size. self assert: 'first' equals: lessons first title. self assert: 'second' equals: (lessons at:2 ) title. self assert: 'third' equals: lessons last title.! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 1/27/2010 21:05'! testTitleHumanizeClassName self assert: 'How To Make Your Own Tutorial' equals: HowToMakeYourOwnTutorial title. self assert: 'Smalltalk Syntax Tutorial' equals: SmalltalkSyntaxTutorial title.! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 12:46'! testTutorialRaisesShouldBeImplemented | tutorial | tutorial := AbstractTutorial new. self should: [tutorial tutorial] raise: Error withExceptionDo: [:anException | self assert: ShouldBeImplemented equals: anException class ]. ! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 1/30/2010 09:36'! testTutorialsReturnsAllButMockTutorial | tutorials | tutorials := AbstractTutorial tutorials. self assert: (tutorials includes: SmalltalkSyntaxTutorial). self assert: (tutorials includes: HowToMakeYourOwnTutorial). self deny: (tutorials includes: MockTutorial).! ! !HowToMakeYourOwnTutorialTest methodsFor: 'as yet unclassified' stamp: 'LaurentLaffont 2/1/2010 22:05'! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self testedTutorial respondsTo: aSelector) ]! ! !HowToMakeYourOwnTutorialTest methodsFor: 'as yet unclassified' stamp: 'LaurentLaffont 2/1/2010 22:04'! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ HowToMakeYourOwnTutorial new! ! !LessonTestInstanciation methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 15:12'! testNewLessonHaveEmptyStringForTitleLesson | newLesson | newLesson := Lesson new. self assert: newLesson title equals: ''. self assert: newLesson lesson equals: ''.! ! !LessonTestInstanciation methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 15:10'! testTitleLessonCreation | firstLesson secondLesson | firstLesson := Lesson title: 'First lesson' lesson: 'Smalltalk rules!!'. secondLesson := Lesson title: 'Second lesson' lesson: 'ProfStef is cool'. self assert: firstLesson title equals: 'First lesson'. self assert: firstLesson lesson equals: 'Smalltalk rules!!'. self assert: secondLesson title equals: 'Second lesson'. self assert: secondLesson lesson equals: 'ProfStef is cool'.! ! !MetacelloCleanUpChangeSetsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCleanUpChangeSets "excess change sets can cause a noticeable slow down in monticello performance, so this test just cleans them up" | removals set| (ChangeSet respondsTo: #allChangeSets) ifFalse: [ ^self ]. removals := OrderedCollection new. (set := ChangeSet perform: #allChangeSets) do: [:cs | (cs name beginsWith: 'MC') ifTrue: [ cs name size >= 3 ifTrue: [ | post | post := cs name copyFrom: 3 to: cs name size. post asInteger printString = post ifTrue: [ removals add: cs ]]]]. removals do: [:cs | set remove: cs ]. removals := OrderedCollection new. (set := ChangeSet perform: #allChangeSets) do: [:cs | ((cs name beginsWith: 'GoferBar') or: [ (cs name beginsWith: 'GoferFoo') or: [ (cs name beginsWith: 'GoferFaux') or: [ (cs name beginsWith: 'GoferBeau') or: [ (cs name beginsWith: 'MetacelloTestConfiguration')]]]]) ifTrue: [removals add: cs ]]. removals do: [:cs | set remove: cs ]. ! ! !MetacelloCommonVersionNumberTestCase class methodsFor: 'testing' stamp: 'dkh 6/22/2012 12:13'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^ self name = #'MetacelloCommonVersionNumberTestCase'! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'test alpha/numeric version numbers' stamp: 'dkh 6/22/2012 15:02'! testAlphaNumericVersion1 "Use numeric comparison for pure numbers. If you non-numeric version separate with '-'" | x y | self assert: ((x := self versionClass fromString: '2.9.0') < (y := self versionClass fromString: '2.10.0')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'test alpha/numeric version numbers' stamp: 'dkh 6/22/2012 14:40'! testAlphaNumericVersion2 self assert: ((self versionClass fromString: '2.9.0-alpha.2') < (self versionClass fromString: '2.9.0-alpha.3')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'test alpha/numeric version numbers' stamp: 'dkh 6/22/2012 14:40'! testAlphaNumericVersion3 self assert: ((self versionClass fromString: '2.9.9-alpha.2') < (self versionClass fromString: '2.9.10')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'test alpha/numeric version numbers' stamp: 'dkh 6/22/2012 14:40'! testAlphaNumericVersion4 self assert: ((self versionClass fromString: '2.9.9-alpha.2') < (self versionClass fromString: '2.9.9')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:36'! testVersion01 self assert: ((self versionClass fromString: '1.1.1') versionString = '1.1.1')! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:36'! testVersion02 | v1 v2 | v1 := self versionClass fromString: '1.1.1'. v2 := self versionClass fromString: '1.0.0'. self assert: (v1 = v1). self assert: (v2 = v2). self assert: (v1 > v2)! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:36'! testVersion04 | v1 v2 | v1 := self versionClass fromString: '1.0.1'. v2 := self versionClass fromString: '1.0.0'. self assert: (v1 > v2)! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:37'! testVersion14 self assert: ((self versionClass fromString: '2.9.0-alpha02') < (self versionClass fromString: '2.9.0-alpha03')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:39'! testVersion22 self assert: (MetacelloVersionNumber fromString: '3.0.0') collapseZeros size = 1. self assert: (MetacelloVersionNumber fromString: '3.0.0') = (MetacelloVersionNumber fromString: '3.0'). self assert: (MetacelloVersionNumber fromString: '3.0') = (MetacelloVersionNumber fromString: '3.0.0'). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:39'! testVersion23 self assert: (MetacelloVersionNumber fromString: '3.0.0.-rc.1') = (MetacelloVersionNumber fromString: '3.0.0-rc.1'). self assert: (MetacelloVersionNumber fromString: '3.0') > (MetacelloVersionNumber fromString: '3.0-rc.1'). self assert: (MetacelloVersionNumber fromString: '3') > (MetacelloVersionNumber fromString: '3-rc.1'). self assert: (MetacelloVersionNumber fromString: '3.-rc.1') = (MetacelloVersionNumber fromString: '3.0.0-rc.1'). self assert: (MetacelloVersionNumber fromString: '3.0.-rc.1') = (MetacelloVersionNumber fromString: '3.0.0-rc.1'). self assert: (MetacelloVersionNumber fromString: '3') > (MetacelloVersionNumber fromString: '3.0-rc.1'). self assert: (MetacelloVersionNumber fromString: '3.0') > (MetacelloVersionNumber fromString: '3.0.0-rc.1'). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 14:39'! testVersion25 self assert: ((MetacelloVersionNumber fromString: '1.0-beta.24.0.1') < (MetacelloVersionNumber fromString: '1.0-beta.28')). ! ! !MetacelloCommonVersionNumberTestCase methodsFor: 'private' stamp: 'dkh 6/22/2012 12:13'! versionClass ^ self subclassResponsibility! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 11:18'! sampleVersionStrings ^ #('1.0.0+-' '1.0.0-alpha' '1.0.0-alpha.1' '1.0.0-0.3.7' '1.0.0-x.7.z.92') , #('1.0.0+build.1' '1.3.7+build.11.e0f985a') , #('1.0.0-alpha' '1.0.0-alpha.1' '1.0.0-beta.2' '1.0.0-beta.11' '1.0.0-rc.1' '1.0.0-rc.1+build.1' '1.0.0' '1.0.0+0.3.7' '1.3.7+build' '1.3.7+build.2.b8f12d7' '1.3.7+build.11.e0f985a') , #('1.0.0-alp-h-a' '1.0.0-r-c.1' '1.0.0+alp-h-a' '1.0.0+r-c.1')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 09:00'! testEqualityComparison self deny: '1.0.0+-' asMetacelloSemanticVersionNumber = '1.0.0--' asMetacelloSemanticVersionNumber. self sampleVersionStrings do: [ :versionString | self assert: versionString asMetacelloSemanticVersionNumber = versionString asMetacelloSemanticVersionNumber ]! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 6/22/2012 12:15'! testInvalidSpecialMatch self should: [ (self versionClass fromString: '1.1.1') match: '?.?.?' ] raise: Error! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 11:29'! testLessThanComparison self assert: '1.0.0-rc.1+build.1' asMetacelloSemanticVersionNumber < '1.0.0' asMetacelloSemanticVersionNumber. self assert: '1.0.0-rc.1+build.1' asMetacelloSemanticVersionNumber < '1.0.0+build.0' asMetacelloSemanticVersionNumber. self assert: '1.0.0-alpha.1' asMetacelloSemanticVersionNumber < '1.0.0-0.3.7' asMetacelloSemanticVersionNumber. self assert: '1.0.0-alpha' asMetacelloSemanticVersionNumber < '1.0.0-alpha.1' asMetacelloSemanticVersionNumber. self assert: '1.0.0+-' asMetacelloSemanticVersionNumber < '1.0.0+a' asMetacelloSemanticVersionNumber. self assert: '1.0.0-0.3.7' asMetacelloSemanticVersionNumber < '1.0.0-x.7.z.92' asMetacelloSemanticVersionNumber! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 08:59'! testPrinting | x vrsn | self sampleVersionStrings do: [ :versionString | self assert: versionString = (x := (vrsn := versionString asMetacelloSemanticVersionNumber) printString) ]! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 15:34'! testSemanticVersioning self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0-rc.1+build.2' '1.0.0-rc.2+build.0'). self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0+build.0'). self validateSemanticVersionStrings: #('1.0.0-alpha' '1.0.0-1'). self validateSemanticVersionStrings: #('1.0.0-1' '1.0.0+alpha'). self validateSemanticVersionStrings: #('1.0.0-alpha' '1.0.0+1'). self validateSemanticVersionStrings: #('1.0.0+alpha' '1.0.0+1'). self validateSemanticVersionStrings: #('1.0.0--' '1.0.0-a'). self validateSemanticVersionStrings: #('1.0.0+-' '1.0.0+a'). self validateSemanticVersionStrings: #('1.0.0-rc.1' '1.0.0' '1.0.0+build.1'). self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0-rc.1+build.2' '1.0.0-rc.2+build.3'). self validateSemanticVersionStrings: #('1.0.0-rc.1' '1.0.0-rc.1+build.2' '1.0.0-rc.2'). self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0-rc.1+build.2' '1.0.0-rc.2'). self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0-rc.1+build.2' '1.0.0-rc.2+build.2'). self validateSemanticVersionStrings: #('1.0.0-rc.1+build.1' '1.0.0' '1.0.0+build.0'). self validateSemanticVersionStrings: #('1.0.0+10000' '1.0.0+a'). self validateSemanticVersionStrings: #('1.0.0-10000' '1.0.0-a')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 18:08'! testSemanticVersioningSpecItem10 "[Semantic Versioning 2.0.0-rc.1](http://semver.org/)" self validateSemanticVersionStrings: #('1.0.0-alpha' '1.0.0-alpha.1' '1.0.0-0.3.7' '1.0.0-x.7.z.92')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 18:08'! testSemanticVersioningSpecItem11 "[Semantic Versioning 2.0.0-rc.1](http://semver.org/)" self validateSemanticVersionStrings: #('1.0.0+build.1' '1.3.7+build.11.e0f985a')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 18:08'! testSemanticVersioningSpecItem12 "According to [Semantic Versioning 2.0.0-rc.1](http://semver.org/), the following expression should be true: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build < 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a" self validateSemanticVersionStrings: #('1.0.0-alpha' '1.0.0-alpha.1' '1.0.0-beta.2' '1.0.0-beta.11' '1.0.0-rc.1' '1.0.0-rc.1+build.1' '1.0.0' '1.0.0+0.3.7' '1.3.7+build' '1.3.7+build.2.b8f12d7' '1.3.7+build.11.e0f985a')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 18:11'! testSemanticVersioningSubsetCompliance "subset of sample versions that are compatible with MetacellVersionNumber syntax" self validateSemanticVersionStrings: #('1.0.0-alpha' '1.0.0-alpha.1' '1.0.0-beta.2' '1.0.0-beta.11' '1.0.0-rc.1' '1.0.0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 6/22/2012 15:00'! testSpecialMatch self assert: ((self versionClass fromString: '1.1.0') match: '?'). self assert: ((self versionClass fromString: '1.0.0-alpha') match: '?'). self assert: ((self versionClass fromString: '1.0.0-rc.1+build.1') match: '?'). self assert: ((self versionClass fromString: '1.1.0') match: '*.*.?'). self assert: ((self versionClass fromString: '1.3.7+build.2.b8f12d7') match: '?'). self assert: ((self versionClass fromString: '1.3.7+build.11.e0f985a') match: '?'). self deny: ((self versionClass fromString: '1.1.0') match: '*.*.*-?'). self deny: ((self versionClass fromString: '1.1.0') match: '*.*.*+?'). self assert: ((self versionClass fromString: '1.1.1') match: '*.?')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 6/22/2012 16:50'! testStandardMatch self assert: ((self versionClass fromString: '1.0.0+alpha5.0') match: '1.0.0+alpha#.0'). self assert: ((self versionClass fromString: '1.1.1') match: '*.*.*'). self deny: ((self versionClass fromString: '1.1.1') match: '*.*'). self assert: ((self versionClass fromString: '1.1.0') match: '1.1.*'). self assert: ((self versionClass fromString: '1.1.0') match: '1.#.*'). self deny: ((self versionClass fromString: '1.10.0+build.0') match: '1.#.*'). self assert: ((self versionClass fromString: '1.0.0-alpha5.0') match: '1.0.0-alpha#.0'). self assert: ((self versionClass fromString: '1.0.0-alpha5+build5.0') match: '1.0.0-alpha5+build#.0'). self deny: ((self versionClass fromString: '1.0.0-alpha10.0') match: '1.0.0-alpha#.0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:54'! testVersion05 | v1 v2 | v1 := self versionClass fromString: '3.0.0'. v2 := self versionClass fromString: '2.0.0'. self assert: v1 > v2! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:55'! testVersion09 | v1 v2 | v1 := self versionClass fromString: '1.0.0'. v2 := self versionClass fromString: '0.7.0'. self assert: v1 >= v2. self assert: v2 <= v1! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:50'! testVersion10 | x y | self assert: (x := (({(self versionClass fromString: '1.0.0'). (self versionClass fromString: '0.7.0'). (self versionClass fromString: '0.8.0'). (self versionClass fromString: '0.9.0'). (self versionClass fromString: '1.0.1')} sort: [ :a :b | a <= b ]) collect: [ :each | each versionString ]) asArray) = (y := #('0.7.0' '0.8.0' '0.9.0' '1.0.0' '1.0.1'))! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:55'! testVersion12 self deny: (self versionClass fromString: '1.0.0') <= (self versionClass fromString: '0.7.0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:55'! testVersion15 self assert: (self versionClass fromString: '1.0.0-beta.0') < (self versionClass fromString: '1.0.0-beta.1')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:56'! testVersion16 self assert: (self versionClass fromString: '1.0.0-beta.0') < (self versionClass fromString: '1.0.0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:57'! testVersion17 self assert: (self versionClass fromString: '1.0.0') > (self versionClass fromString: '1.0.0-0'). self assert: (self versionClass fromString: '1.0.0') > (self versionClass fromString: '1.0.0-beta.0'). self assert: (self versionClass fromString: '1.0.0') > (self versionClass fromString: '1.0.0-beta')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:51'! testVersion18 | x y | self deny: (x := self versionClass fromString: '1.0.0') < (y := self versionClass fromString: '1.0.0-0'). self assert: (x := self versionClass fromString: '1.0.0') > (y := self versionClass fromString: '1.0.0-0'). self assert: (x := self versionClass fromString: '1.0.0') < (y := self versionClass fromString: '1.0.0+0'). self deny: (x := self versionClass fromString: '1.0.0') > (y := self versionClass fromString: '1.0.0+0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:57'! testVersion19 self assert: (self versionClass fromString: '1.0.0-beta.0') < (self versionClass fromString: '1.0.0')! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 18:08'! validateSemanticVersionStrings: versionStrings | versions version | versions := versionStrings collect: [ :each | each asMetacelloSemanticVersionNumber ]. version := versions at: 1. 2 to: versions size do: [ :index | | nextVersion | nextVersion := versions at: index. self assert: version < nextVersion. version := nextVersion ]! ! !MetacelloSemanticVersionNumberTestCase methodsFor: 'private' stamp: 'dkh 6/22/2012 14:41'! versionClass ^ MetacelloSemanticVersionNumber! ! !MetacelloVersionNumberTestCase methodsFor: 'test approximately greater than' stamp: 'dkh 5/4/2012 20:37:12'! testApproxVersion01 self assert: '1.1.1' asMetacelloVersionNumber ~> '1.1' asMetacelloVersionNumber! ! !MetacelloVersionNumberTestCase methodsFor: 'test approximately greater than' stamp: 'dkh 5/4/2012 20:37:12'! testApproxVersion02 self deny: '1.1' asMetacelloVersionNumber ~> '1' asMetacelloVersionNumber! ! !MetacelloVersionNumberTestCase methodsFor: 'test approximately greater than' stamp: 'dkh 5/4/2012 20:37:12'! testApproxVersion03 self assert: '1.1' asMetacelloVersionNumber ~> '1.1' asMetacelloVersionNumber! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCollapseZeros self assert: (MetacelloVersionNumber fromString: '1.0-beta.24.0.1') collapseZeros printString = '1-beta.24.0.1'. self assert: (MetacelloVersionNumber fromString: '1.0-beta.24.0.0.1') collapseZeros printString = '1-beta.24.0.0.1'. self assert: (MetacelloVersionNumber fromString: '1.0.0-beta.24.0.0.1') collapseZeros printString = '1-beta.24.0.0.1'. ! ! !MetacelloVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 5/4/2012 20:37:12'! testInvalidSpecialMatch self should: [ ((self versionClass fromString: '1.1') match: '?.?') ] raise: Error. ! ! !MetacelloVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 5/4/2012 20:37:12'! testSpecialMatch self assert: ((self versionClass fromString: '1.1') match: '?'). self assert: ((self versionClass fromString: 'alpha') match: '?'). self assert: ((self versionClass fromString: '1.1.1.1.1') match: '?'). self assert: ((self versionClass fromString: '1.alpha5') match: '?'). self assert: ((self versionClass fromString: '1.1') match: '*.?'). self assert: ((self versionClass fromString: '1.1') match: '?'). self assert: ((self versionClass fromString: '10.1.1.1.1') match: '?'). self deny: ((self versionClass fromString: '1.1') match: '*.*.?'). self assert: ((self versionClass fromString: '1.1.1') match: '*.?'). ! ! !MetacelloVersionNumberTestCase methodsFor: 'test matching' stamp: 'dkh 5/4/2012 20:37:12'! testStandardMatch self assert: ((self versionClass fromString: '1.1.1') match: '*.*.*'). self deny: ((self versionClass fromString: '1.1.1') match: '*.*'). self assert: ((self versionClass fromString: '1.1.0') match: '1.1.*'). self assert: ((self versionClass fromString: '1.1.0') match: '1.#.*'). self deny: ((self versionClass fromString: '1.10.0') match: '1.#.*'). self assert: ((self versionClass fromString: '1-alpha5.0') match: '1-alpha#.0'). self assert: ((self versionClass fromString: '1.alpha5.0') match: '1-alpha#.0'). self assert: ((self versionClass fromString: '1.alpha5.0') match: '1.alpha#.0'). self deny: ((self versionClass fromString: '1-alpha10.0') match: '1-alpha#.0'). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion03 | v1 v2 | v1 := self versionClass fromString: '1.0.0.1'. v2 := self versionClass fromString: '1.0.0'. self assert: (v1 > v2)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:52'! testVersion05 | v1 v2 | v1 := self versionClass fromString: '3'. v2 := self versionClass fromString: '2'. self assert: (v1 > v2)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion06 | v1 v2 | v1 := self versionClass fromString: '3.'. v2 := self versionClass fromString: '2'. self assert: (v1 > v2)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:52'! testVersion07 | v1 v2 | v1 := self versionClass fromString: '3.0.0'. v2 := self versionClass fromString: '2'. self assert: (v1 > v2)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion08 | v1 v2 | v1 := self versionClass fromString: '1.0a6'. v2 := self versionClass fromString: '1.0a5'. self assert: (v1 > v2)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:52'! testVersion09 | v1 v2 | v1 := self versionClass fromString: '1.0'. v2 := self versionClass fromString: '0.7'. self assert: (v1 >= v2). self assert: (v2 <= v1)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 15:10'! testVersion10 | x y | self assert: ((x := (({ self versionClass fromString: '1.0'. self versionClass fromString: '0.7'. self versionClass fromString: '0.8'. self versionClass fromString: '0.9'. self versionClass fromString: '1.0.1' } sort: [:a :b | a <= b ]) collect: [:each | each versionString ]) asArray) = (y := #( '0.7' '0.8' '0.9' '1.0' '1.0.1')))! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion11 | v1 v2 | v1 := self versionClass fromString: '1.0.1b'. v2 := self versionClass fromString: '1.0.1a'. self assert: (v1 >= v2). self assert: (v2 <= v1)! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:52'! testVersion12 self deny: ((self versionClass fromString: '1.0') <= (self versionClass fromString: '0.7'))! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion13 self deny: ((self versionClass fromString: '0.8') <= (self versionClass fromString: '0.7')). self deny: ((self versionClass fromString: '0.8.1.8') <= (self versionClass fromString: '0.7.0.5')). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:52'! testVersion15 self assert: ((self versionClass fromString: '1.0-beta.0') < (self versionClass fromString: '1.0-beta.1')). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:54'! testVersion16 self assert: (self versionClass fromString: '1.0-beta.0') < (self versionClass fromString: '1.0'). self assert: (self versionClass fromString: '1.0-beta.0') < (self versionClass fromString: '1.0.0'). self assert: (self versionClass fromString: '1.0-beta.0') < (self versionClass fromString: '1.0.0.0')! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:53'! testVersion17 self assert: ((self versionClass fromString: '1.0') = (self versionClass fromString: '1.0.0')). self assert: ((self versionClass fromString: '1') = (self versionClass fromString: '1.0')). self assert: ((self versionClass fromString: '1') > (self versionClass fromString: '1-0')). self assert: ((self versionClass fromString: '1') > (self versionClass fromString: '1.0-beta.0')). self assert: ((self versionClass fromString: '1') > (self versionClass fromString: '1-beta.0')). self assert: ((self versionClass fromString: '1') > (self versionClass fromString: '1-beta')). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 15:10'! testVersion18 self deny: ((self versionClass fromString: '1.0') < (self versionClass fromString: '1')). self deny: ((self versionClass fromString: '1.0') < (self versionClass fromString: '1-0')). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 16:53'! testVersion19 self assert: ((self versionClass fromString: '1.0-beta.0') < (self versionClass fromString: '1')). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion20 self assert: (MetacelloVersionNumber fromString: '') printString = ''. ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion21 self deny: (MetacelloVersionNumber fromString: '') > (MetacelloVersionNumber fromString: '0'). self assert: (MetacelloVersionNumber fromString: '') < (MetacelloVersionNumber fromString: '0'). self assert: (MetacelloVersionNumber fromString: '') = (MetacelloVersionNumber fromString: ''). ! ! !MetacelloVersionNumberTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersion24 self assert: (MetacelloVersionNumber fromString: '3.0.3.-rc.1') ~= (MetacelloVersionNumber fromString: '3.0.0.3-rc.1'). self assert: (MetacelloVersionNumber fromString: '1.0.0.1.0.0') = (MetacelloVersionNumber fromString: '1.0.0.1'). self assert: (MetacelloVersionNumber fromString: '1.0.0.1') ~= (MetacelloVersionNumber fromString: '1..1'). ! ! !MetacelloVersionNumberTestCase methodsFor: 'private' stamp: 'dkh 5/4/2012 20:37:12'! versionClass ^MetacelloVersionNumber! ! !MetacelloConfigAbstractAPITestCase class methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^self name = #MetacelloConfigAbstractAPITestCase ! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^self projectWith: #()! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes self subclassResponsibility! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testBlessing | project version | project := self project. version := project version: '1.0-baseline'. self assert: version blessing = #testBlessing! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testBlessingBlock | project version | project := self project. version := project version: '1.0.1-baseline'. self assert: version blessing = #testBlessing! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:42'! testProjectPackage | project version projectSpec | project := self project. version := project version: '1.1.4-baseline'. projectSpec := version packageNamed: 'Example Project' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #preloadForProject. self assert: projectSpec postLoadDoIt value = #postloadForProject. ! ! !MetacelloConfigAbstractAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionErrors | project | project := self project. self should: [project version: 'does not exist' ] raise: MetacelloVersionDoesNotExistError. self should: [project version: #'does not exist' ] raise: MetacelloSymbolicVersionDoesNotExistError. ! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:27'! baseline100: spec spec for: #'common' do: [ spec blessing: #'testBlessing'. spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; yourself ] ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:27'! baseline101: spec spec for: #common do: [ spec blessing: [ spec value: #testBlessing ]]. ! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:53'! baseline102: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:' ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:51'! baseline103: spec spec for: #common do: [ spec preLoadDoIt: #alternatePreloadForCore ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:57'! baseline104: spec spec for: #common do: [ spec preLoadDoIt: nil ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:03'! baseline111: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'Example Project' with: [ spec className: 'ConfigurationOfExampleProject'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; loads: #('core'); yourself ]; yourself. spec group: 'Core' with: #('Example Project'). spec for: #'nested' do: [ spec group: 'Nested' with: #('Example Project'); yourself ] ]. spec for: #'extra' do: [ spec group: 'Extra' with: #('Example Project'); yourself ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:24'! baseline114: spec spec for: #'common' do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; yourself ]; yourself ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:50'! baseline116: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:47'! baseline119: spec spec for: #common do: [ spec project: 'Example Project' overrides: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #alternatePreloadForCore; yourself.]]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 10:44'! baseline120: spec spec for: #common do: [ spec project: 'Copied Example' copyFrom: 'Example Project' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 09:46'! baseline124: spec spec for: #'common' do: [ spec blessing: #'baseline'; preLoadDoIt: #'preloadForCoreA'; yourself ]. spec for: #'common' do: [ spec preLoadDoIt: #'preloadForCoreB'; yourself ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:10'! baseline200: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:'. spec project: 'Example Project' with: [ spec className: 'ConfigurationOfExampleProject'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; loads: #('core'); yourself ]; yourself. spec group: 'Core' with: #('Example Project') ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:10'! baseline201: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:'. spec project: 'Example Project' with: [ spec className: 'ConfigurationOfExampleProject'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; loads: #('core'); yourself ]; yourself. spec group: 'Core' with: #('Example Project') ]. spec for: #'outer' do: [ spec preLoadDoIt: nil; postLoadDoIt: nil ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:10'! baseline202: spec spec for: #'common' do: [ spec project: 'Copied Example' copyFrom: 'Example Project' with: [ spec preLoadDoIt: #'alternatePreloadForCore' ] ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:10'! baseline203: spec spec for: #'common' do: [ spec project: 'Example Project' overrides: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'alternatePreloadForCore'; yourself ] ]! ! !MetacelloConfigCoreAPITestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 09:49'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. ^ project! ! !MetacelloConfigCoreAPITestCase methodsFor: 'symbolic versions' stamp: 'dkh 9/11/2012 11:15'! symbolicVersionExplicitlyDoesNotExist: spec spec for: #'common' version: #'notDefined'! ! !MetacelloConfigCoreAPITestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:10'! testBaseline200 | project version expected actual | project := self project. version := project version: '2.0-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:10'! testBaseline201 | project version expected actual | project := self projectWith: #(). version := project version: '2.0.1-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:10'! testBaseline201Outer | project version expected actual | project := self projectWith: #(#'outer'). version := project version: '2.0.1-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: nil. spec postLoadDoIt: nil. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:10'! testBaseline202 | project version expected actual | project := self projectWith: #(#'outer'). version := project version: '2.0.2-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: nil. spec postLoadDoIt: nil. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Copied Example'' copyFrom: ''Example Project'' with: [ spec preLoadDoIt: #''alternatePreloadForCore'' ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:10'! testBaseline203 | project version expected actual | project := self projectWith: #(). version := project version: '2.0.3-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Example Project'' overrides: [ spec className: ''MetacelloExampleProjectConfig''; versionString: ''1.0-baseline''; preLoadDoIt: #''alternatePreloadForCore'' ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test version' stamp: 'dkh 9/11/2012 09:52'! testIssue100 "Issue 100: last block wins when there are duplicate attribute blocks" | project version repositoryDescriptions expected actual | project := self project. version := project version: '1.2.4-baseline'. self assert: version blessing = #'baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCoreB''.'. actual := version spec printString. self assert: expected = actual. version := project version: '1.2.4'. self assert: version blessing = #'baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCoreC''.'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test baselines' stamp: 'dkh 9/11/2012 10:17'! testNestedBaseline | project version packageNames | project := self projectWith: #(). version := project version: '1.1.1-baseline'. packageNames := version groups collect: [ :pkg | pkg name ]. self assert: packageNames size = 1. self assert: (packageNames includes: 'Core'). project := self projectWith: #(#'extra'). version := project version: '1.1.1-baseline'. packageNames := version groups collect: [ :pkg | pkg name ]. self assert: packageNames size = 2. self assert: (packageNames includes: 'Core'). self assert: (packageNames includes: 'Extra'). project := self projectWith: #(#'nested'). version := project version: '1.1.1-baseline'. packageNames := version groups collect: [ :pkg | pkg name ]. self assert: packageNames size = 2. self assert: (packageNames includes: 'Core'). self assert: (packageNames includes: 'Nested'). project := self projectWith: #(#'nested' #'extra'). version := project version: '1.1.1-baseline'. packageNames := version groups collect: [ :pkg | pkg name ]. self assert: packageNames size = 3. self assert: (packageNames includes: 'Core'). self assert: (packageNames includes: 'Nested'). self assert: (packageNames includes: 'Extra')! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:45'! testProjectPackage | project version projectSpec | project := self project. version := project version: '1.1.4-baseline'. projectSpec := version packageNamed: 'Example Project' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #preloadForProject. self assert: projectSpec postLoadDoIt value = #postloadForProject. ! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:46'! testProjectPackageCopy | project version projectSpec | project := self project. version := project version: '1.2.0-baseline'. projectSpec := version packageNamed: 'Example Project' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #'preloadForProject'. self assert: projectSpec postLoadDoIt value = #'postloadForProject'. projectSpec := version packageNamed: 'Copied Example' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #'alternatePreloadForCore'. self assert: projectSpec postLoadDoIt value = #'postloadForProject'! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:49'! testProjectPackageOverride | project version projectSpec | project := self project. version := project version: '1.1.9-baseline'. projectSpec := version packageNamed: 'Example Project' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #'alternatePreloadForCore'. self assert: projectSpec postLoadDoIt value == nil! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:51'! testProjectPackageWith | project version projectSpec | project := self project. version := project version: '1.1.6-baseline'. projectSpec := version packageNamed: 'Example Project' ifAbsent: [ self assert: false ]. self assert: projectSpec className = 'MetacelloExampleProjectConfig'. self assert: projectSpec preLoadDoIt value = #'alternatePreloadForCore'. self assert: projectSpec postLoadDoIt value = #'postloadForProject'! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test symbolic version' stamp: 'dkh 9/11/2012 11:14'! testSymbolicVersionNotDefinedError | project | project := self project. self should: [ project version: #'explicitly does not exist' ] raise: MetacelloSymbolicVersionNotDefinedError! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test version' stamp: 'dkh 9/11/2012 10:55'! testVersionPrePostload | project expected version actual | project := self project. version := project version: '1.0.2-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''.'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test version' stamp: 'dkh 9/11/2012 10:56'! testVersionPreloadOverride | project expected version actual | project := self project. version := project version: '1.0.3-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''alternatePreloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''.'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'test version' stamp: 'dkh 9/11/2012 10:57'! testVersionPreloadRemove | project expected version actual | project := self project. version := project version: '1.0.4-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: nil. spec postLoadDoIt: #''postloadForCore:package:''.'. actual := version spec printString. self assert: expected = actual! ! !MetacelloConfigCoreAPITestCase methodsFor: 'versions' stamp: 'dkh 9/11/2012 09:48'! version124: spec spec for: #'common' do: [ spec preLoadDoIt: #'preloadForCoreC'; yourself ]! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! alternatePreloadForCore alternatePreLoadExecuted := true ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline100: spec spec for: #common do: [ spec blessing: #testBlessing. spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'http://www.example.com/or'; preLoadDoIt: #preloadForCore; postLoadDoIt: #postloadForCore:package: ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline101: spec spec for: #common do: [ spec blessing: [ spec value: #testBlessing ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline102: spec spec for: #common do: [ spec preLoadDoIt: #preloadForCore; postLoadDoIt: #postloadForCore:package:. spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn' ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline103: spec spec for: #common do: [ spec preLoadDoIt: #alternatePreloadForCore ]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline104: spec spec for: #common do: [ spec preLoadDoIt: nil ]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline105: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec repository: 'http://www.example.com/ob' ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline106: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec repositories: [ spec repository: 'http://www.example.com/or'; repository: 'http://www.example.com/ob' ]]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline107: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec preLoadDoIt: #preloadForSupplyingAnswers; postLoadDoIt: #postloadForSupplyingAnswers; supplyingAnswers: #(#('preload' 'preload answer') #('postload' 'postload answer')) ]; package: 'Example-Tests' with: [ spec supplyingAnswers: #( #('string' 'preload answer') #('symbol' #'default') #('integer' 1) #('boolean' true) #('another boolean' false) #('character' $a) )]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline108: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline109: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec includes: 'Example-Core' ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline110: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-Base'; package: 'Example-Test1' with: [ spec includes: 'Example-Core'; requires: 'Example-Base' ]; package: 'Example-Test2' with: [ spec includes: 'Example-Core'; supplyingAnswers: #(#('captionMatch' 'answer')) ]; package: 'Example-Test3' with: [ spec supplyingAnswers: #(#('captionMatch' 'answer')); requires: 'Example-Base' ]; package: 'Example-Test4' with: [ spec includes: 'Example-Core'; supplyingAnswers: #(#('captionMatch' 'answer')); requires: 'Example-Base' ]; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline111: spec spec for: #common do: [ spec package: 'Example-Core'. spec for: #nested do: [ spec package: 'Example-Base'; yourself ]]. spec for: #extra do: [ spec package: 'Example-Test'; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline112: spec spec for: #common do: [ spec package: 'Example-Core'. spec for: #nested do: [ spec package: 'Example-Base'; package: 'Example-Test-Nested'; yourself ]]. spec for: #extra do: [ spec package: 'Example-Test'; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline113: spec spec for: #outer do: [ spec package: 'Example-Core'; package: 'Example-Test'; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline114: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #preloadForProject; postLoadDoIt: #postloadForProject; repository: 'http://www.example.com/ob'; yourself. ]; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline115: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline116: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline117: spec spec for: #common do: [ spec package: 'Example-Core' overrides: [ spec preLoadDoIt: #alternatePreloadForCore ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline118: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline119: spec spec for: #common do: [ spec project: 'Example Project' overrides: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #alternatePreloadForCore; yourself.]]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline120: spec spec for: #common do: [ spec project: 'Copied Example' copyFrom: 'Example Project' with: [ spec preLoadDoIt: #alternatePreloadForCore ]]! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline121: spec spec for: #common do: [ spec blessing: #testBlessing. spec repository: 'http://www.example.com/vor'. spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'http://www.example.com/or'; preLoadDoIt: #preloadForCore; postLoadDoIt: #postloadForCore:package: ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline122: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; repository: 'http://www.example.com/ob'; yourself. ]; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline123: spec spec for: #common do: [ spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; repository: 'http://www.example.com/ob'; repository: 'http://www.example.com/or'; yourself. ]; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline124: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.example.com/aa'; yourself.]. spec for: #common do: [ spec repository: 'http://www.example.com/ab'; yourself.]. ! ! !MetacelloConfigAPITestCase methodsFor: 'private' stamp: 'dkh 9/11/2012 11:19'! conditionResult: resultString "GemStone unconditionally prints Symbols with quotes, Squeak and Pharo do not" ^(((resultString copyReplaceAll: '#preloadForSupplyingAnswers' with: '#''preloadForSupplyingAnswers''') copyReplaceAll: '#postloadForSupplyingAnswers' with: '#''postloadForSupplyingAnswers''') copyReplaceAll: '#default' with: '#''default''') ! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadForCore: mcLoader package: pkgSpec postLoadExecuted := true! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadForProject postLoadExecuted := true! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! postloadForSupplyingAnswers postloadAnswer := ProvideAnswerNotification signal: 'postload'! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadForCore preLoadExecuted := true ! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadForProject preLoadExecuted := true ! ! !MetacelloConfigAPITestCase methodsFor: 'doits' stamp: 'dkh 6/12/2012 15:41:23.319'! preloadForSupplyingAnswers preloadAnswer := ProvideAnswerNotification signal: 'preload'! ! !MetacelloConfigAPITestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: MetacelloNullRecordingMCSpecLoader new. project loader evalDoits: true. ^project! ! !MetacelloConfigAPITestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. alternatePreLoadExecuted := preLoadExecuted := postLoadExecuted := false! ! !MetacelloConfigAPITestCase methodsFor: 'test null loader' stamp: 'dkh 6/12/2012 15:41:23.319'! testNullLoaderLoadedRepositories | project version loader repositories | project := self project. version := project version: '1.2.1-baseline'. loader := version load. repositories := loader loadedRepositories. self assert: repositories size = 2. repositories do: [:repo | self assert: repo class == MCHttpRepository. self assert: (#('http://www.example.com/vor' 'http://www.example.com/or') includes: repo description) ].! ! !MetacelloConfigAPITestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagePreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.1.7-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagePreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.0-baseline') spec. self assert: (versionSpec packages map at: 'Example-Core') preLoadDoIt value == #preloadForCore. self assert: (versionSpec packages map at: 'Example-Core') postLoadDoIt value == #postloadForCore:package:. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagePreloadWith | project versionSpec version | project := self project. versionSpec := (version := project version: '1.1.8-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageSupplyingAnswers | project versionSpec version pkg string expected | project := self project. versionSpec := (version := project version: '1.0.7-baseline') spec. pkg := version packageNamed: 'Example-Core'. string := self conditionResult: pkg printString. expected := 'spec name: ''Example-Core''; supplyingAnswers: #( #( ''preload'' ''preload answer'' ) #( ''postload'' ''postload answer'' ) ); preLoadDoIt: #''preloadForSupplyingAnswers''; postLoadDoIt: #''postloadForSupplyingAnswers''.'. self assert: string = expected. self assert: pkg answers = #(#('preload' 'preload answer') #('postload' 'postload answer')). self deny: preloadAnswer = 'preload answer'. self deny: postloadAnswer = 'postload answer'. version load. self assert: preloadAnswer = 'preload answer'. self assert: postloadAnswer = 'postload answer'. pkg := version packageNamed: 'Example-Tests'. string := self conditionResult: pkg printString. expected := 'spec name: ''Example-Tests''; supplyingAnswers: #( #( ''string'' ''preload answer'' ) #( ''symbol'' #''default'' ) #( ''integer'' 1 ) #( ''boolean'' true ) #( ''another boolean'' false ) #( ''character'' $a ) ).'. self assert: string = expected. ! ! !MetacelloConfigAPITestCase methodsFor: 'test directives' stamp: 'dkh 6/12/2012 15:41:23.319'! testPrePostPackageLoadsDo | project version loader loadDirective preloaded count pkgloaded postloaded | project := self project. version := project version: '1.0-baseline'. loader := version fetch. loadDirective := loader loadDirective. pkgloaded := postloaded := preloaded := false. loadDirective directivesDo: [:directive | directive preLoadDo: [:pre | self deny: preloaded. self deny: pkgloaded. self deny: postloaded. preloaded := true. self assert: (#preloadForCore == pre spec preLoadDoIt value) ]. directive packageDo: [:pkg | preloaded ifTrue: [ self deny: postloaded. pkgloaded := true. pkg spec name = 'Example-Core' ]]. directive postLoadDo: [:post | self assert: preloaded. self assert: pkgloaded. self deny: postloaded. preloaded := false. postloaded := true. self assert: (#postloadForCore:package: == post spec postLoadDoIt value) ]]. self assert: postloaded! ! !MetacelloConfigAPITestCase methodsFor: 'test directives' stamp: 'dkh 6/12/2012 15:41:23.319'! testPrepostProjectLoadsDo | project version loader loadDirective x | project := self project. version := project version: '1.1.6-baseline'. loader := version fetch. loadDirective := loader loadDirective. loadDirective prepostLoadDirectivesDo: [:directive | directive preLoadDo: [:pre | self assert: (#alternatePreloadForCore == directive spec preLoadDoIt value) ]. directive postLoadDo: [:post | self assert: (#postloadForProject == directive spec postLoadDoIt value) ]]. ! ! !MetacelloConfigAPITestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadCopyFrom | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.0-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load: 'Copied Example'. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadCopyFromB | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.0-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load: 'Example Project'. self deny: alternatePreLoadExecuted. self assert: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.1.9-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.1.4-baseline') spec. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadWith | project versionSpec version | project := self project. versionSpec := (version := project version: '1.1.6-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionPreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.0.3-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: alternatePreLoadExecuted. self deny: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionPreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.0.2-baseline') spec. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self assert: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'test version' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersionPreloadRemove | project versionSpec version | project := self project. versionSpec := (version := project version: '1.0.4-baseline') spec. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self deny: postLoadExecuted. version load. self deny: alternatePreLoadExecuted. self deny: preLoadExecuted. self assert: postLoadExecuted.! ! !MetacelloConfigAPITestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version113: spec spec for: #outer do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.1'; package: 'Example-Test' with: 'Example-Test-dkh.1'. spec for: #nested do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.2'; yourself ]]. spec for: #extra do: [ spec package: 'Example-Core' with: 'Example-Core-dkh.3'; yourself]. ! ! !MetacelloConfigAPITestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version124: spec spec for: #common do: [ spec repository: 'http://www.example.com/ac'; yourself.]. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationRepository "MetacelloConfigurationResource reset" ^ MetacelloConfigurationResource current monticelloRepository! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'utilities' stamp: 'dkh 9/11/2012 09:40'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository "MetacelloMonticelloResource reset" ^ MetacelloMonticelloResource current monticelloRepository! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: (Smalltalk at: #MetacelloTestConfigurationOfProjectToolBox) new project: project. project loader: MetacelloNullRecordingMCSpecLoader new. project loader evalDoits: true. ^project! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:22'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. MetacelloConfigurationResource projectAttributes: nil. repo := self monticelloRepository. gofer := Gofer new. gofer disablePackageCache. gofer repository: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. repo := self configurationRepository. gofer repository: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. gofer package: 'MetacelloTestConfigurationOfProjectToolBox'. gofer metacelloLoad. Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result' put: false. Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result' put: false. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown | aGofer | super tearDown. aGofer := Gofer new. (self hasPackage: 'MetacelloTestConfigurationOfProjectToolBox') ifTrue: [ aGofer package: 'MetacelloTestConfigurationOfProjectToolBox' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectIssue115') ifTrue: [ aGofer package: 'MetacelloTestConfigurationOfProjectIssue115' ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_DoIt_Result' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_POST_DoIt_Result' ifAbsent: []. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder1 "evaluation of nested for:do: blocks is in breadth first order" | project version string expected | project := self projectWith: #(#'level1_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder2 | project version string expected | project := self projectWith: #(#'level1_1' #'level2_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder3 | project version string expected | project := self projectWith: #(#'level1_1' #'level2_1' #'level3_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/5''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder4 | project version string expected | project := self projectWith: #(#'level1_1' #'level2_1' #'level2_2'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder5 | project version string expected | project := self projectWith: #(#'level1_1' #'level2_2' #'level2_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder6 | project version string expected | project := self projectWith: #(#'level1_1' #'level2_1' #'level2_2' #'level3_2'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/7''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder7 | project version string expected | project := self projectWith: #( #'level1_1' #'level2_1' #'level2_2' #'level3_2' #'level3_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/7''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/5''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test nested for:do:' stamp: 'dkh 6/12/2012 15:41:23.319'! testNestedForDoOrder8 | project version string expected | project := self projectWith: #( #'level1_1' #'level2_2' #'level3_2' #'level2_1'). version := project version: '1.3.1-baseline'. string := version spec printString. expected := 'spec blessing: #''baseline''. spec package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/1''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/2''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/3''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/6''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/7''. ]; package: ''Example-Core'' with: [ spec repository: ''http://www.example.com/4''. ].'. self assert: string = expected. ! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagePreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.6-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test package' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackagePreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.5-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load. self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectCopyPackageRepositories | project version ref repositoryDescriptions string pkg expected | project := self project. version := project version: '1.3.0-baseline'. ref := version packageNamed: 'Copy Project'. repositoryDescriptions := ref repositorySpecs collect: [ :repoSpec | repoSpec description ]. self assert: repositoryDescriptions size = 2. self assert: (repositoryDescriptions includes: 'http://www.example.com/ob'). self assert: (repositoryDescriptions includes: 'http://www.example.com/or'). string := ref printString. expected := 'spec name: ''Copy Project''; className: ''MetacelloExampleProjectConfig''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadDoIt''; postLoadDoIt: #''postloadDoIt''; repository: ''http://www.example.com/ob''; repository: ''http://www.example.com/or''.'. self assert: string = expected! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectCopyPreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.9-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load: 'Copy Project'. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectCopyPreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.9-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load: 'Example Project'. self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadOverride | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.8-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load: 'Example Project'. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test project' stamp: 'dkh 6/12/2012 15:41:23.319'! testProjectPreloadPostload | project versionSpec version | project := self project. versionSpec := (version := project version: '1.2.7-baseline') spec. self deny: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self deny: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). version load: 'Example Project'. self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result').! ! !MetacelloConfigAPIToolBoxTestCase methodsFor: 'test symbolic version' stamp: 'dkh 9/11/2012 11:13'! testSymbolicVersionNotDefinedError | project | project := self project. self should: [ project version: #'explicitly does not exist' ] raise: MetacelloSymbolicVersionNotDefinedError! ! !MetacelloConfigMCAPITestCase class methodsFor: 'testing' stamp: 'dkh 9/11/2012 09:43'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^ self name = #'MetacelloConfigMCAPITestCase'! ! !MetacelloConfigMCAPITestCase methodsFor: 'test version' stamp: 'dkh 9/11/2012 09:43'! testIssue100 "Issue 100: last block wins when there are duplicate attribute blocks" | project version repositoryDescriptions | project := self project. version := project version: '1.2.4-baseline'. self assert: version blessing = #baseline. repositoryDescriptions := version spec repositorySpecs collect: [:repoSpec | repoSpec description ]. self assert: repositoryDescriptions size = 2. self assert: (repositoryDescriptions includes: 'http://www.example.com/aa'). self assert: (repositoryDescriptions includes: 'http://www.example.com/ab'). version := project version: '1.2.4'. self assert: version blessing = #baseline. repositoryDescriptions := version spec repositorySpecs collect: [:repoSpec | repoSpec description ]. self assert: repositoryDescriptions size = 3. self assert: (repositoryDescriptions includes: 'http://www.example.com/aa'). self assert: (repositoryDescriptions includes: 'http://www.example.com/ab'). self assert: (repositoryDescriptions includes: 'http://www.example.com/ac'). ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test baselines' stamp: 'dkh 9/11/2012 10:01'! testNestedBaseline | project version packageNames | project := self projectWith: #(). version := project version: '1.1.1-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 1. self assert: (packageNames includes: 'Example-Core'). project := self projectWith: #(#extra). version := project version: '1.1.1-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 2. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Test'). project := self projectWith: #(#nested). version := project version: '1.1.1-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 2. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Base'). project := self projectWith: #(nested extra). version := project version: '1.1.1-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 3. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Base'). self assert: (packageNames includes: 'Example-Test'). ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test baselines' stamp: 'dkh 9/11/2012 10:22'! testNestedBaselineOrder | project version packageNames | project := self projectWith: #(). version := project version: '1.1.2-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 1. self assert: (packageNames includes: 'Example-Core'). project := self projectWith: #(#extra). version := project version: '1.1.2-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 2. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Test'). project := self projectWith: #(#nested). version := project version: '1.1.2-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 3. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Base'). self assert: (packageNames includes: 'Example-Test-Nested'). project := self projectWith: #(nested extra). version := project version: '1.1.2-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 4. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Base'). self assert: (packageNames includes: 'Example-Test'). self assert: (packageNames includes: 'Example-Test-Nested'). project := self projectWith: #(extra nested). version := project version: '1.1.2-baseline'. packageNames := version packages collect: [:pkg | pkg name]. self assert: packageNames size = 4. self assert: (packageNames includes: 'Example-Core'). self assert: (packageNames includes: 'Example-Base'). self assert: (packageNames includes: 'Example-Test'). self assert: (packageNames includes: 'Example-Test-Nested'). ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test baselines' stamp: 'dkh 9/11/2012 10:23'! testNestedVersionOrder | project version fileNames | project := self projectWith: #(outer). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: fileNames size = 2. self assert: (fileNames includes: 'Example-Core-dkh.1'). self assert: (fileNames includes: 'Example-Test-dkh.1'). project := self projectWith: #(extra). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: fileNames size = 1. self assert: (fileNames includes: 'Example-Core-dkh.3'). project := self projectWith: #(extra nested). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: fileNames size = 1. self assert: (fileNames includes: 'Example-Core-dkh.3'). project := self projectWith: #(outer extra). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: fileNames size = 2. self assert: (fileNames includes: 'Example-Core-dkh.3'). self assert: (fileNames includes: 'Example-Test-dkh.1'). project := self projectWith: #(outer #nested). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: (fileNames includes: 'Example-Core-dkh.2'). project := self projectWith: #(outer nested extra). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: (fileNames includes: 'Example-Core-dkh.3'). project := self projectWith: #(outer extra nested). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: (fileNames includes: 'Example-Core-dkh.2'). project := self projectWith: #(extra nested outer ). version := project version: '1.1.3'. fileNames := version packages collect: [:pkg | pkg file]. self assert: (fileNames includes: 'Example-Core-dkh.1'). ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test package' stamp: 'dkh 9/11/2012 09:56'! testPackageIncludes | project versionSpec version pkg string expected | project := self project. versionSpec := (version := project version: '1.0.9-baseline') spec. pkg := version packageNamed: 'Example-Core'. string := pkg printString. expected := 'spec name: ''Example-Core'''. self assert: string = expected. pkg := version packageNamed: 'Example-Tests'. string := pkg printString. expected := 'spec name: ''Example-Tests''; includes: #(''Example-Core'' ).'. self assert: string = expected ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test package' stamp: 'dkh 9/11/2012 09:56'! testPackageIncludesRequiresSupplyingAnswers | project versionSpec version pkg string expected | project := self project. versionSpec := (version := project version: '1.1.0-baseline') spec. pkg := version packageNamed: 'Example-Test1'. string := pkg printString. expected := 'spec name: ''Example-Test1''; requires: #(''Example-Base'' ); includes: #(''Example-Core'' ).'. self assert: string = expected. pkg := version packageNamed: 'Example-Test2'. string := pkg printString. expected := 'spec name: ''Example-Test2''; includes: #(''Example-Core'' ); supplyingAnswers: #( #( ''captionMatch'' ''answer'' ) ).'. self assert: string = expected. pkg := version packageNamed: 'Example-Test3'. string := pkg printString. expected := 'spec name: ''Example-Test3''; requires: #(''Example-Base'' ); supplyingAnswers: #( #( ''captionMatch'' ''answer'' ) ).'. self assert: string = expected. pkg := version packageNamed: 'Example-Test4'. string := pkg printString. expected := 'spec name: ''Example-Test4''; requires: #(''Example-Base'' ); includes: #(''Example-Core'' ); supplyingAnswers: #( #( ''captionMatch'' ''answer'' ) ).'. self assert: string = expected. ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test package' stamp: 'dkh 9/11/2012 09:56'! testPackageRepositories | project versionSpec version pkg repositoryDescriptions string expected | project := self project. versionSpec := (version := project version: '1.0.6-baseline') spec. pkg := version packageNamed: 'Example-Core'. repositoryDescriptions := pkg repositorySpecs collect: [:repoSpec | repoSpec description ]. self assert: repositoryDescriptions size = 2. self assert: (repositoryDescriptions includes: 'http://www.example.com/ob'). self assert: (repositoryDescriptions includes: 'http://www.example.com/or'). string := pkg printString. expected := 'spec name: ''Example-Core''; repositories: [ spec repository: ''http://www.example.com/ob''; repository: ''http://www.example.com/or'' ].'. self assert: string = expected ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test package' stamp: 'dkh 9/11/2012 09:56'! testPackageRepository | project versionSpec version pkg | project := self project. versionSpec := (version := project version: '1.0.5-baseline') spec. pkg := version packageNamed: 'Example-Core'. self assert: pkg repositorySpecs first description = 'http://www.example.com/ob'! ! !MetacelloConfigMCAPITestCase methodsFor: 'test package' stamp: 'dkh 9/11/2012 09:56'! testPackageRequires | project versionSpec version pkg string expected | project := self project. versionSpec := (version := project version: '1.0.8-baseline') spec. pkg := version packageNamed: 'Example-Core'. string := pkg printString. expected := 'spec name: ''Example-Core'''. self assert: string = expected. pkg := version packageNamed: 'Example-Tests'. string := pkg printString. expected := 'spec name: ''Example-Tests''; requires: #(''Example-Core'' ).'. self assert: string = expected ! ! !MetacelloConfigMCAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:32'! testProjectPackageRecord | project version loader | project := self project. version := project version: '1.1.4-baseline'. loader := version record. loader loadDirective versionDirectivesDo: [ :directive | | versionSpec | (versionSpec := directive spec) ~~ nil ifTrue: [ versionSpec versionString = '1.1.4-baseline' ifTrue: [ | projectSpec | projectSpec := (versionSpec packageNamed: 'Example Project' ifAbsent: [ self assert: false ]) projectReference. self assert: projectSpec file = projectSpec file ] ] ]! ! !MetacelloConfigMCAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:24'! testProjectPackageRepositories | project version ref repositoryDescriptions string pkg expected | project := self project. version := project version: '1.2.3-baseline'. ref := version packageNamed: 'Example Project'. repositoryDescriptions := ref repositorySpecs collect: [ :repoSpec | repoSpec description ]. self assert: repositoryDescriptions size = 2. self assert: (repositoryDescriptions includes: 'http://www.example.com/ob'). self assert: (repositoryDescriptions includes: 'http://www.example.com/or'). string := ref printString. expected := 'spec name: ''Example Project''; className: ''MetacelloExampleProjectConfig''; repository: ''http://www.example.com/ob''; repository: ''http://www.example.com/or''.'. self assert: string = expected! ! !MetacelloConfigMCAPITestCase methodsFor: 'test project' stamp: 'dkh 9/11/2012 10:24'! testProjectPackageRepository | project version ref string expected | project := self project. version := project version: '1.2.2-baseline'. ref := version packageNamed: 'Example Project'. self assert: ref repositorySpecs first description = 'http://www.example.com/ob'. string := ref printString. expected := 'spec name: ''Example Project''; className: ''MetacelloExampleProjectConfig''; repository: ''http://www.example.com/ob''.'. self assert: string = expected! ! !MetacelloCoreIssue125TestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 14:59'! baseline200: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec preLoadDoIt: #'preloadForCore'; postLoadDoIt: #'postloadForCore:package:'. spec project: 'Example Project' with: [ spec className: 'ConfigurationOfExampleProject'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; loads: #('core'); yourself ]; yourself. spec group: 'Core' with: #('Example Project') ]! ! !MetacelloCoreIssue125TestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 14:57'! baseline300: spec spec for: #(#'attribute1' #'attribute2') do: [ spec project: 'Extra Project' with: [ spec className: 'ConfigurationOfExtraProject'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; loads: #('core'); yourself ]; yourself. spec group: 'Core' with: #('Extra Project') ]! ! !MetacelloCoreIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 14:57'! project ^self projectWith: #()! ! !MetacelloCoreIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 14:57'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. ^ project! ! !MetacelloCoreIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 10:54'! testForDoListAtrribute1Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version expected actual | project := self projectWith: #(#'attribute1'). version := project version: '3.0-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Extra Project'' with: [ spec className: ''ConfigurationOfExtraProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ); group: ''Core'' with: #(''Extra Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 10:58'! testForDoListAtrribute2Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version expected actual | project := self projectWith: #(#'attribute2'). version := project version: '3.0-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Extra Project'' with: [ spec className: ''ConfigurationOfExtraProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ); group: ''Core'' with: #(''Extra Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 10:59'! testForDoListAttribute1Atrribute2Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version expected actual | project := self projectWith: #(#'attribute1' #'attribute2'). version := project version: '3.0-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Extra Project'' with: [ spec className: ''ConfigurationOfExtraProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]; project: ''Extra Project'' with: [ spec className: ''ConfigurationOfExtraProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ); group: ''Core'' with: #(''Extra Project'' ); group: ''Core'' with: #(''Extra Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 11:02'! testForDoListNotActive "https://github.com/dalehenrich/metacello-work/issues/125" | project version expected actual | project := self projectWith: #(). version := project version: '3.0-baseline'. expected := 'spec blessing: #''baseline''. spec preLoadDoIt: #''preloadForCore''. spec postLoadDoIt: #''postloadForCore:package:''. spec project: ''Example Project'' with: [ spec className: ''ConfigurationOfExampleProject''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; loads: #(''core'' ) ]. spec group: ''Core'' with: #(''Example Project'' ).'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:25'! baseline10: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; yourself ] ]! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:25'! baseline20: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec project: 'Example Project' with: [ spec className: 'MetacelloExampleProjectConfig'; versionString: '1.0-baseline'; preLoadDoIt: #'preloadForProject'; postLoadDoIt: #'postloadForProject'; yourself ] ]! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 9/11/2012 11:26'! bleedingEdge: spec spec for: #'platformVersion1.x' version: '1.0-baseline'! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'accessing' stamp: 'dkh 9/11/2012 11:23'! project ^self projectWith: #()! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'accessing' stamp: 'dkh 9/11/2012 11:23'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. ^ project! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 9/11/2012 11:26'! stableVersion: spec spec for: #'platformVersion1.x' version: '1.0'! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:29'! testBasicBleedingEdgeVersion | project version wc expected actual | project := self projectWith: #(#'platformVersion1.x'). version := project version: #'bleedingEdge'. expected := 'spec blessing: #''baseline''. spec project: ''Example Project'' with: [ spec className: ''MetacelloExampleProjectConfig''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject'' ].'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:27'! testBasicStableVersion | project version wc expected actual | project := self projectWith: #(#'platformVersion1.x'). version := project version: #'stable'. expected := 'spec blessing: #''release''. spec project: ''Example Project'' with: [ spec className: ''MetacelloExampleProjectConfig''; versionString: ''1.0-baseline''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject'' ].'. actual := version spec printString. self assert: expected = actual! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:27'! testBleedingEdgeMethod | project version | project := self projectWith: #(#'platformVersion1.x'). self assert: (project version: #'bleedingEdge') = project bleedingEdge! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:28'! testStableVersionMethod | project version | project := self projectWith: #(#'platformVersion1.x'). self assert: (project version: #'stable') = project stableVersion! ! !MetacelloCoreSymbolicVersionTest methodsFor: 'versions' stamp: 'dkh 9/11/2012 11:26'! version10: spec spec for: #'common' do: [ spec blessing: #'release' ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 11:38'! baseline10: spec spec for: #'common' do: [ spec project: 'UTF8' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; versionString: '1.0-baseline'; loads: #('Misc-UTF8') ]. spec group: 'Core' with: #('UTF8'); group: 'Tests' with: #('UTF8'); group: 'Recursive' with: #('Core' 'Recursive') "recursive group definition" ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 12:07'! baseline11: spec spec for: #'common' do: [ spec project: 'UTF7' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; versionString: '1.0-baseline'; loads: #('Misc-UTF7') ]. spec group: 'Core' with: #('UTF7'); group: 'Tests' with: #('UTF7'); yourself ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'baselines' stamp: 'dkh 9/11/2012 12:03'! baseline20: spec spec for: #'common' do: [ spec project: 'UTF8' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; versionString: #'stable'; loads: #('Misc-UTF8') ]. spec project: 'UTF9' with: [ spec className: 'MetacelloVersionQueryOtherConfig'; versionString: '1.0-baseline'; loads: #('Misc-UTF8') ]. spec group: 'Core' with: #('UTF8' 'UTF9'); group: 'Tests' with: #('UTF8'); group: 'Recursive' with: #('Core' 'Recursive') "recursive group definition" ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 11:36'! project ^self projectWith: #()! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 11:36'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. ^ project! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:36'! testBaseline10Groups | project version expected list | project := self project. version := project version: '1.0-baseline'. expected := #('Core' 'Tests' 'Recursive'). list := version groups. self assert: list size = expected size. list do: [ :pkg | self assert: (expected includes: pkg name) ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:38'! testBaseline10Projects | project version expected list | project := self project. version := project version: '1.0-baseline'. expected := #('UTF8'). list := version projects. self assert: list size = expected size. list do: [ :pkg | self assert: (expected includes: pkg name) ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 11:40'! testBaseline10ResolveToLoadableSpecs01 | project version expected list | project := self project. version := project version: '1.0-baseline'. expected := #('UTF8'). list := version resolveToLoadableSpecs: #('UTF8'). self assert: list size = expected size. list do: [ :pkg | self assert: (expected includes: pkg name) ]. expected := #('UTF8'). list := version resolveToLoadableSpecs: #('Recursive'). self assert: list size = expected size. list do: [ :pkg | self assert: (expected includes: pkg name) ]! ! !MetacelloCoreVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 9/11/2012 12:08'! testDifference | project expected fromVersionString toVersionString report actual | project := self project. fromVersionString := '1.1-baseline'. toVersionString := '2.0-baseline'. report := (project version: fromVersionString) difference: (project version: toVersionString). report from: fromVersionString; to: toVersionString; configuration: 'Test Configuration'. expected := 'Test Configuration ''1.1-baseline'' to ''2.0-baseline'' Additions: UTF9 '''' to ''1.0-baseline'' Modifications: UTF8 ''1.0-baseline'' to ''stable'' Removals: UTF7 ''1.0-baseline'' to '''' '. actual := report printString. self assert: expected = actual! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 1/5/2011 15:16'! alternatRepositoryName ^#'Metacello_Dev_Cycle_Alternate_Repository'! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 01/16/2011 14:27'! configurationName ^#'ConfigurationOfMetacello_Dev_Cycle'! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'dkh 3/7/2012 15:59:13'! createConfiguration MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxFaux' 'GeauxBeau') repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} dependencies: {('GeauxFaux' -> #('MetacelloTestConfigurationOfFoo')). ('GeauxBeau' -> #('GeauxFaux'))} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux')). ('Tests' -> #('GeauxBeau')). ('Core Tests' -> #('Core' 'Tests'))}! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 16:10'! createDevelopment MetacelloToolBox createDevelopment: '1.0' for: self configurationName asString importFromBaseline: '1.0-baseline' description: 'initial version'. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'DaleHenrichs 12/18/2010 12:31'! createNewBaseline MetacelloToolBox createNewBaselineVersionIn: (Smalltalk at: self configurationName) description: ''. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'dkh 1/16/2011 10:54'! createNewDevelopment MetacelloToolBox createNewDevelopmentVersionIn: (Smalltalk at: self configurationName) description: ''. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:06.921'! defaultTimeout "I don't want no stkinkin' timeouts" ^60000! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 12/17/2010 16:25'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 16:35'! releaseDevelopment MetacelloToolBox releaseDevelopmentVersionIn: (Smalltalk at: self configurationName) description: '- release version 1.0'. MetacelloToolBox copyConfiguration: (Smalltalk at: self configurationName) to: 'dictionary://', self alternatRepositoryName asString! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 1/5/2011 15:16'! repositoryName ^#'Metacello_Dev_Cycle_Repository'! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'running' stamp: 'ChristopheDemarey 5/24/2013 15:05'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'running' stamp: 'dkh 4/18/2011 18:21'! setUp | repo gofer | super setUp. repo := MCDictionaryRepository new. repo description: 'dictionary://', self repositoryName asString. self tempRepositories add: repo. Smalltalk at: self repositoryName put: repo. repo := MCDictionaryRepository new. repo description: 'dictionary://', self alternatRepositoryName asString. self tempRepositories add: repo. Smalltalk at: self alternatRepositoryName put: repo. Smalltalk at: self configurationName ifPresent: [:cl | cl removeFromSystem ]. repo := MetacelloConfigurationResource current monticelloRepository. self tempRepositories add: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. gofer := Gofer new repository: repo; package: 'MetacelloTestConfigurationOfProjectFee'; metacelloLoad. repo := MetacelloMonticelloResource current monticelloRepository. repo description: 'dictionary://Metacello_Gofer_Test_Repository'. self tempRepositories add: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project load: '4.0'. authorName := MetacelloPlatform current authorName. MetacelloPlatform current authorName: 'TesterBob'. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'running' stamp: 'dkh 4/18/2011 18:21'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackages: aGofer. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: self repositoryName ifAbsent: [ ]. Smalltalk removeKey: self alternatRepositoryName ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: []. Smalltalk at: self configurationName ifPresent: [ :cl | cl removeFromSystem ]. self tempRepositories do: [:repo | MCRepositoryGroup default removeRepository: repo ]. (self hasPackage: self configurationName asString) ifTrue: [ (Gofer new) package: self configurationName asString; metacelloUnload ]. MetacelloPlatform current authorName: authorName.! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'running' stamp: 'DaleHenrichs 12/18/2010 11:58'! tearDownPackages: aGoferInstance (self hasPackage: 'GoferFoo') ifTrue: [ aGoferInstance package: 'GoferFoo' ]. (self hasPackage: 'GoferBar') ifTrue: [ aGoferInstance package: 'GoferBar' ]. (self hasPackage: 'GoferFaux') ifTrue: [ aGoferInstance package: 'GoferFaux' ]. (self hasPackage: 'GoferBeau') ifTrue: [ aGoferInstance package: 'GoferBeau' ]. (self hasPackage: 'GeauxFaux') ifTrue: [ aGoferInstance package: 'GeauxFaux' ]. (self hasPackage: 'GeauxBeau') ifTrue: [ aGoferInstance package: 'GeauxBeau' ]. (self hasPackage: 'MetacelloTestConfigurationOfFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFoo' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectFee') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectFee' ]. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'accessing' stamp: 'dkh 4/18/2011 18:20'! tempRepositories tempRepositories ifNil: [ tempRepositories := OrderedCollection new ]. ^tempRepositories! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 12/18/2010 12:38'! testCreateConfiguration | expected output | self createConfiguration. expected := self versionCommonBaselineSpecString. Smalltalk at: self configurationName ifPresent: [ :cl | output := (cl project version: '1.0-baseline') versionSpec printString. self assert: output = expected ]! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 12/18/2010 12:15'! testCreateDevelopment | expected output | self createConfiguration; createDevelopment; yourself. expected := self version10DevelopmentVersionSpecString. Smalltalk at: self configurationName ifPresent: [ :cl | | versionSpec | versionSpec := (cl project version: '1.0') versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected. versionSpec := (cl project version: #development) versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected ]! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 12/18/2010 12:38'! testCreateNewBaseline | expected output | self createConfiguration; createDevelopment; validateAndSave; releaseDevelopment; createNewDevelopment; createNewBaseline; yourself. expected := self versionCommonBaselineSpecString. Smalltalk at: self configurationName ifPresent: [ :cl | output := (cl project version: '1.1-baseline') versionSpec printString. self assert: output = expected ]! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 01/16/2011 14:38'! testCreateNewDevelopment | expected output cl versionSpec report | self createConfiguration; createDevelopment; validateAndSave; releaseDevelopment; createNewDevelopment; yourself. cl := Smalltalk at: self configurationName. expected := self version10ReleaseVersionSpecString. versionSpec := (cl project version: '1.0') versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected. expected := self version11DevelopmentVersionSpecString. versionSpec := (cl project version: '1.1') versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected. versionSpec := (cl project version: #development) versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected. report := MetacelloToolBox compareVersionsIn: cl. #(additions modifications removals) do: [:key | self assert: (report perform: key) keys size = 0 ]. self assert: (report configuration) = self configurationName asString. self assert: (report from) = '1.0'. self assert: (report to) = '1.1'.! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 12/18/2010 12:15'! testReleaseDevelopment | repo repoVersionsSize altRepo altRepoVersionsSize output expected | repo := Smalltalk at: self repositoryName. repoVersionsSize := repo allVersionInfos size. altRepo := Smalltalk at: self alternatRepositoryName. altRepoVersionsSize := altRepo allVersionInfos size. self createConfiguration; createDevelopment; validateAndSave; releaseDevelopment; yourself. self assert: repo allVersionInfos size = (repoVersionsSize + 2). self assert: altRepo allVersionInfos size = (altRepoVersionsSize + 1). expected := self version10ReleaseVersionSpecString. Smalltalk at: self configurationName ifPresent: [ :cl | | versionSpec | versionSpec := (cl project version: '1.0') versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected. self should: [ cl project version: #development ] raise: Error. versionSpec := (cl project version: #stable) versionSpec. versionSpec timestamp: ''. output := versionSpec printString. self assert: output = expected ]! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'tests' stamp: 'DaleHenrichs 12/17/2010 16:24'! testValidateAndSave | repo allVersionsSize | repo := Smalltalk at: self repositoryName. allVersionsSize := repo allVersionInfos size. self createConfiguration; createDevelopment; validateAndSave; yourself. self assert: (MetacelloToolBox validateConfiguration: (Smalltalk at: self configurationName)) isEmpty. self assert: repo allVersionInfos size = (allVersionsSize + 1)! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'lessons' stamp: 'DaleHenrichs 01/24/2011 14:14'! validateAndSave | wc | MetacelloToolBox validateConfiguration: (Smalltalk at: self configurationName). PackageInfo registerPackageName: self configurationName asString. "register workingCopy for gofer to use" wc := MCWorkingCopy forPackage: (MetacelloTestsMCPackage new name: self configurationName asString). (wc repositoryGroup respondsTo: #disableCache) ifTrue: [wc repositoryGroup perform: #disableCache]. Gofer new disablePackageCache; repository: (Smalltalk at: self repositoryName); package: self configurationName asString; commit: 'Initial configuration'. "fix it so that the directory repository is used for subsequent saves" wc := (Smalltalk at: self configurationName) project projectPackage workingCopy. wc repositoryGroup addRepository: (Smalltalk at: self repositoryName). MetacelloToolBox saveConfigurationPackageFor: self configurationName asString description: 'commit message'. ! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'dkh 3/7/2012 15:59:13'! version10CommonVersionSpecString ^ ' spec description: ''initial version''. spec author: ''TesterBob''. spec timestamp: ''''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]; project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ).'! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 12/18/2010 12:16'! version10DevelopmentVersionSpecString ^'spec blessing: #''development''.', self version10CommonVersionSpecString! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 12/18/2010 12:17'! version10ReleaseVersionSpecString ^'spec blessing: #''release''.', self version10CommonVersionSpecString! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'dkh 3/7/2012 15:59:13'! version11CommonVersionSpecString ^ ' spec description: ''''. spec author: ''TesterBob''. spec timestamp: ''''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]; project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ).'! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'DaleHenrichs 12/18/2010 12:21'! version11DevelopmentVersionSpecString ^'spec blessing: #''development''.', self version11CommonVersionSpecString! ! !MetacelloDevelopmentCycleTutorialTests methodsFor: 'private' stamp: 'dkh 3/7/2012 15:59:13'! versionCommonBaselineSpecString ^ 'spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ).'! ! !MetacelloGithubIssue111TestCase methodsFor: 'utilities' stamp: 'dkh 9/5/2012 16:23'! getTestRepository | repo | repo := MCFileTreeRepository new directory: self getTestRepositoryDirectory. ^ MCRepositoryGroup default repositories detect: [ :each | each = repo ] ifNone: [ repo ]! ! !MetacelloGithubIssue111TestCase methodsFor: 'utilities' stamp: 'ChristopheDemarey 5/31/2013 13:11'! getTestRepositoryDirectory | fileTreeRepo wc | MCWorkingCopy registry do: [:mgr | ((MetacelloPlatform current packageInfoFor: mgr) includesClass: self class) ifTrue: [wc := mgr]]. wc ifNil: [^ self assert: false]. fileTreeRepo := (wc repositoryGroup repositories reject: [:repo | MCCacheRepository default = repo]) detect: [:repo | repo isKindOf: MCFileTreeRepository] ifNone: [^ nil]. ^ MetacelloPlatform current directoryFromPath: 'tests/repositories/issue111Packages' relativeTo: (MetacelloPlatform current parentDirectoryOf: fileTreeRepo directory) ! ! !MetacelloGithubIssue111TestCase methodsFor: 'utilities' stamp: 'dkh 9/5/2012 16:00'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloGithubIssue111TestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:23'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloGithubIssue111TestCase methodsFor: 'running' stamp: 'dkh 9/5/2012 16:08'! setUp super setUp! ! !MetacelloGithubIssue111TestCase methodsFor: 'running' stamp: 'dkh 9/5/2012 16:33'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackageNames do: [ :pName | (self hasPackage: pName) ifTrue: [ aGofer package: pName ] ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]! ! !MetacelloGithubIssue111TestCase methodsFor: 'running' stamp: 'dkh 9/5/2012 16:09'! tearDownPackageNames ^ {'ConfigurationOfIssue111'}! ! !MetacelloGithubIssue111TestCase methodsFor: 'tests' stamp: '07/12/2013 07:56'! testIssue111 "https://github.com/dalehenrich/metacello-work/issues/111" "expect record to run without error ... leave potential error unhandled for ease of debugging" "use timeout pragma because squeak's default test timeout is too low" | dir repo | dir := self getTestRepositoryDirectory. dir ifNil: [ Transcript cr; show: 'skipping MetacelloGithubIssue111TestCase>>test Issue111 because package not installed from FileTree repo'. ^ self ]. self assert: dir exists. repo := self getTestRepository. Metacello new configuration: 'Issue111'; repository: (repo asRepositorySpecFor: MetacelloMCProject new) description; version: '3.1.0'; silently; record! ! !MetacelloGithubIssue175TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/12/2013 12:59'! testIssue175 " 1. specify a different github cache directory 2. create repository referencing github://dalehenrich/external:master/repository 3. verify that BaselineOfExternal is in repo 4. delete the github cache directory to simulate image move 5. verify that BaselineOfExternal can be seen " | oldCacheDir fileUtils workingDir newCacheDir | oldCacheDir := MCGitHubRepository cacheDirectory. fileUtils := MCFileTreeFileUtils current. workingDir := fileUtils default. newCacheDir := fileUtils directoryFromPath: 'tempCache' relativeTo: workingDir. [ | externalRepo | fileUtils ensureDirectoryExists: newCacheDir. MCGitHubRepository cacheDirectory: newCacheDir. externalRepo := MCGitHubRepository location: 'github://dalehenrich/external:master/repository'. externalRepo allFileNames detect: [ :filename | filename beginsWith: 'BaselineOfExternal' ] ifNone: [ "fail if BaselineOfExternal not arround" self assert: false ]. fileUtils deleteAll: newCacheDir. externalRepo allFileNames detect: [ :filename | filename beginsWith: 'BaselineOfExternal' ] ifNone: [ "fail if BaselineOfExternal not arround" self assert: false ] ] ensure: [ MCGitHubRepository cacheDirectory: oldCacheDir. (fileUtils directoryExists: newCacheDir) ifTrue: [ fileUtils deleteAll: newCacheDir ] ]! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassMatch self assert: (MetacelloGoferPackage packageFileName: 'JQuery-Core.gemstone' matchesPackageName: 'JQuery-Core'). self assert: (MetacelloGoferPackage packageFileName: 'JQuery-Core.gemstone-dkh.100' matchesPackageName: 'JQuery-Core'). self assert: (MetacelloGoferPackage packageFileName: 'Sport-2.031' matchesPackageName: 'Sport'). ! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testInstanceMatch01 self assert: ((MetacelloGoferPackage name: 'Faux-Smalltalk' packageFilename: 'Faux-Smalltalk-') matches: (GoferVersionReference name: 'Faux-Smalltalk-tg.34')). self deny: ((MetacelloGoferPackage name: 'Faux-Smalltalk' packageFilename: 'Faux-Smalltalk-') matches: (GoferVersionReference name: 'Faux-SmalltalkTesting-tg.34')). ! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testInstanceMatch02 self deny: ((MetacelloGoferPackage name: 'GoferBar' packageFilename: 'GoferBar.branch-lr.2') matches: (GoferVersionReference name: 'GoferBar-jf.1')). ! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testInstanceMatch03 self assert: ((MetacelloGoferPackage name: 'Faux-Smalltalk' packageFilename: 'Faux-Smalltalk-') matches: (GoferVersionReference name: 'Faux-Smalltalk-Testing-tg.34')). ! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testInstanceMatch04 self deny: ((MetacelloGoferPackage name: 'ConfigurationOfMagritte' packageFilename: 'ConfigurationOfMagritte') matches: (GoferVersionReference name: 'ConfigurationOfMagritte2-dkh.137')). ! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/30/2012 07:57'! testInstanceMatch05 "used to allow this, but we need exact matches on the branch names ... otherwise we can't control which branch is loaded" self deny: ((MetacelloGoferPackage name: 'Seaside2' packageFilename: 'Seaside2.8') matches: (GoferVersionReference name: 'Seaside2.8a1-lr.597'))! ! !MetacelloGoferPackageTestCase methodsFor: 'tests' stamp: 'dkh 6/30/2012 07:54'! testInstanceMatch06 self deny: ((MetacelloGoferPackage name: 'Metacello-Platform' packageFilename: 'Metacello-Platform.pharo') matches: (GoferVersionReference name: 'Metacello-Platform.pharo20-lr.597')). self assert: ((MetacelloGoferPackage name: 'Metacello-Platform' packageFilename: 'Metacello-Platform.pharo') matches: (GoferVersionReference name: 'Metacello-Platform.pharo-lr.597'))! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'assertions' stamp: 'dkh 6/12/2012 15:41:23.319'! assertClass: aClassSymbol self assert: (Smalltalk hasClassNamed: aClassSymbol)! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'assertions' stamp: 'dkh 6/12/2012 15:41:23.319'! assertClass: aClassSymbol selector: aMethodSymbol self assertClass: aClassSymbol. self assert: ((Smalltalk at: aClassSymbol) includesSelector: aMethodSymbol)! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline: spec spec for: #common do: [spec project: 'Bogus Project' with: [ spec className: 'BogusConfiguration'; file: 'BogusConfiguration'; version: 'default'; repository: 'http://seaside.gemstone.com/ss/bogus']]! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineAuthentication: spec spec for: #common do: [spec project: 'Bogus Project' with: [ spec className: 'BogusConfiguration'; file: 'BogusConfiguration'; version: 'default'; repository: 'http://seaside.gemstone.com/ss/authenticationRequired' username: 'foo' password: 'bar']]! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! enabled "return true to actually run tests ... don't need to test loading all of the time ... before enabling this, see #testAuthentication" ^false! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^(MetacelloVersionConstructor on: self) project ! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp super setUp. gofer := Gofer new. gofer gemsource: 'bogus'; package: 'BogusConfiguration'; package: 'Bogus'; package: 'BogusExt' ! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. [ gofer metacelloUnload ] on: Error do: [ :err | "assume it is not there" ]! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAuthentication "test _should_ fail because you are not authorized to access the repository... to test with your own private repository copy the package BogusConfiguration from http://seaside.gemstone.com/ss/bogus to your repository and edit the #baselineAuthentication: appropriately. " self enabled ifFalse: [ ^self ]. (self project version: 'authentication') load. self assert: (self hasPackage: 'Bogus'); assertClass: #BogusA. self assert: (self hasPackage: 'BogusExt'); assertClass: #BogusA selector: #isFake. ! ! !MetacelloHTTPRepositoryLoadTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testLoad self enabled ifFalse: [ ^self ]. (self project version: 'default') load. self assert: (self hasPackage: 'Bogus'); assertClass: #BogusA. self assert: (self hasPackage: 'BogusExt'); assertClass: #BogusA selector: #isFake. ! ! !MetacelloImportsTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10beta0: spec spec for: #common do: [ spec package: 'Metacello-Core' with: [spec includes: #('Metacello-MC' 'Metacello-Platform' )]; package: 'Metacello-MC'; package: 'Metacello-Platform' with: [spec requires: #('Metacello-MC' )]]. ! ! !MetacelloImportsTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10beta3: spec spec for: #common do: [ spec package: 'Metacello-TestsCore' with: [spec requires: #('Metacello-Core' )]; package: 'Metacello-Tutorial' with: [spec requires: #('Metacello-Core' )]; package: 'Metacello-TutorialTests' with: [spec requires: #('Metacello-Tutorial' )]]! ! !MetacelloImportsTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: MetacelloNullRecordingMCSpecLoader new. ^project! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10beta0 | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.0-baseline'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'Metacello-Core') > 0. self assert: (loadedPackages indexOf: 'Metacello-MC') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-Platform') > (loadedPackages indexOf: 'Metacello-Core'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10beta3 | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.3-baseline'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 6. self assert: (loadedPackages indexOf: 'Metacello-Core') > 0. self assert: (loadedPackages indexOf: 'Metacello-MC') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-Platform') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-TestsCore') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-Tutorial') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-TutorialTests') > (loadedPackages indexOf: 'Metacello-Tutorial'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta3 | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.3'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 6. self assert: (loadedPackages indexOf: 'Metacello-Core') > 0. self assert: (loadedPackages indexOf: 'Metacello-MC') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-Platform') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-TestsCore') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-Tutorial') > (loadedPackages indexOf: 'Metacello-Core'). self assert: (loadedPackages indexOf: 'Metacello-TutorialTests') > (loadedPackages indexOf: 'Metacello-Tutorial'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta3Extra | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.3-extra'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 6. self assert: (loadedPackages indexOf: 'Metacello-Core-dkh.1') > 0. self assert: (loadedPackages indexOf: 'Metacello-MC-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-Platform-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-TestsCore-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-Tutorial-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-TutorialTests-dkh.1') > (loadedPackages indexOf: 'Metacello-Tutorial-dkh.1'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta3ImportedVersions | project version | project := self project. version := project version: '1.0-beta.3-baseline'. self assert: version importedVersions size = 1. self assert: (version importedVersions includes: '1.0-beta.0-baseline'). version := project version: '1.0-beta.3'. self assert: version importedVersions size = 1. self assert: (version importedVersions includes: '1.0-beta.3-baseline'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta4 | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.4'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 6. self assert: (loadedPackages indexOf: 'Metacello-Core-dkh.1') > 0. self assert: (loadedPackages indexOf: 'Metacello-MC-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-Platform-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-TestsCore-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-Tutorial-dkh.1') > (loadedPackages indexOf: 'Metacello-Core-dkh.1'). self assert: (loadedPackages indexOf: 'Metacello-TutorialTests-dkh.1') > (loadedPackages indexOf: 'Metacello-Tutorial-dkh.1'). ! ! !MetacelloImportsTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta4ImportedVersions | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.4'. self assert: version importedVersions size = 2. self assert: (version importedVersions includes: '1.0-beta.3'). self assert: (version importedVersions includes: '1.0-beta.3-extra'). ! ! !MetacelloImportsTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10beta3: spec spec for: #common do: [ spec blessing: #development]. ! ! !MetacelloImportsTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10beta3Extra: spec spec for: #common do: [ spec package: 'Metacello-Core' with: 'Metacello-Core-dkh.1'; package: 'Metacello-MC' with: 'Metacello-MC-dkh.1'; package: 'Metacello-Platform' with: 'Metacello-Platform-dkh.1'; package: 'Metacello-TestsCore' with: 'Metacello-TestsCore-dkh.1'; package: 'Metacello-Tutorial' with: 'Metacello-Tutorial-dkh.1'; package: 'Metacello-TutorialTests' with: 'Metacello-TutorialTests-dkh.1' ]. ! ! !MetacelloImportsTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10beta4: spec spec for: #common do: [ spec blessing: #release]. ! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! EXAMPLE "At the moment these guys match up with the code in the ProfStef toolbox tutorial" self example1. "create baseline version 1.0-baseline" self example2. "open version 1.0 for development" self example3. "update package specs and description in version 1.0" self example4. "release versionn 1.0" self example5. "open version 1.1 for development" self example6. "add new baseline version 1.1 with #pharo section, update version 1.1 dev method" self example7. "release version 1.1 on pharo only" ! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'ChristopheDemarey 6/4/2013 18:22'! example1 "create baseline version 1.0-baseline" "self example1" (MetacelloToolBox configurationNamed: 'Example') createVersionMethod: 'baseline10:' inCategory: 'baselines' forVersion: '1.0-baseline'; addSection: #common repository: 'http://smalltalkhub.com/mc/PharoExtras/ProfStef/main' requiredProjects: #() packages: #('ProfStef-Core' 'ProfStef-Tests') repositories: {} dependencies: {('ProfStef-Tests' -> #('ProfStef-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('ProfStef-Core')). ('Tests' -> #('ProfStef-Tests')). ('Core Tests' -> #('Core' 'Tests'))} versionSpecsDo: [ :versionSpec | versionSpec blessing: #'baseline' ]; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! example2 "open version 1.0 for development" "self example2" | message | message := '- fixed a bug'. (MetacelloToolBox configurationNamed: 'Example') createVersionMethod: 'version10:' inCategory: 'versions' forVersion: '1.0'; importFrom: '1.0-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, blessing and timeStamp" versionSpec author: MetacelloPlatform current authorName; blessing: #development; description: message; timestamp: MetacelloPlatform current timestamp ]. true ]; commitMethod; symbolicVersionMethod: #development; addSymbolicSection: #common version: '1.0'; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! example3 "update package specs and description in version 1.0" "self example3" | message | message := '- fixed a bug'. (MetacelloToolBox configurationNamed: 'Example') updateVersionMethodForVersion: '1.0' versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, blessing and timeStamp" versionSpec author: MetacelloPlatform current authorName; timestamp: MetacelloPlatform current timestamp. versionSpec description value isEmpty ifTrue: [ versionSpec description: message ] ifFalse: [ | strm | strm := WriteStream on: String new. strm nextPutAll: versionSpec description value; cr; nextPutAll: message. versionSpec description: strm contents ] ]. true ]; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! example4 "release version 1.0" "self example4" (MetacelloToolBox configurationNamed: 'Example') modifyVersionMethodForVersion: '1.0' versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ versionSpec blessing: #release ]. true ]; commitMethod; modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | symbolicVersionSpec versionString ~= '1.0' ]; commitMethod; symbolicVersionMethod: #stable; addSymbolicSection: #common version: '1.0'; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! example5 "open version 1.1 for development" "self example5" | message | message := ''. (MetacelloToolBox configurationNamed: 'Example') createVersionMethod: 'version11:' inCategory: 'versions' forVersion: '1.1'; addSectionsFrom: '1.0' forBaseline: false updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, blessing and timeStamp" versionSpec author: MetacelloPlatform current authorName; description: message; blessing: #development; timestamp: MetacelloPlatform current timestamp ]. true ]; commitMethod; modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; addSymbolicSection: #common version: '1.1'; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 3/7/2012 17:08:21'! example6 "add new baseline version 1.1 with #pharo section, update version 1.1 dev method" "self example6" | message | message := ''. (MetacelloToolBox configurationNamed: 'Example') createVersionMethod: 'baseline11:' inCategory: 'baselines' forVersion: '1.1-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; addSection: #pharo repository: nil requiredProjects: #() packages: #('ProfStefBrowser') dependencies: {('ProfStefBrowser' -> #('ProfStef-Core'))} groups: {('UI' -> #('ProfStefBrowser'))} versionSpecsDo: [ :versionSpec | ]; commitMethod; modifyVersionMethodForVersion: '1.1' versionSpecsDo: [ :attribute :versionSpec | false ]; importFrom: '1.1-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, blessing and timeStamp" versionSpec author: MetacelloPlatform current authorName; blessing: #development; description: message; timestamp: MetacelloPlatform current timestamp ]. true ]; commitMethod; modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; addSymbolicSection: #pharo version: '1.1'; commitMethod! ! !MetacelloInsideToolBoxTutorialTests class methodsFor: 'examples' stamp: 'dkh 9/7/2012 07:48'! example7 "release version 1.1 on pharo only" "self example7" (MetacelloToolBox configurationNamed: 'Example') modifyVersionMethodForVersion: '1.1' versionSpecsDo: [ :attribute :versionSpec | attribute == #'pharo' ifTrue: [ versionSpec blessing: #'release' ]. true ]; commitMethod; modifySymbolicVersionMethodFor: #'development' symbolicVersionSpecsDo: [ :symbolicVersionSpec | (symbolicVersionSpec attributes includes: #'pharo') not ]; commitMethod; modifySymbolicVersionMethodFor: #'stable' symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; addSymbolicSection: #'pharo' version: '1.1'; commitMethod! ! !MetacelloInsideToolBoxTutorialTests methodsFor: 'running' stamp: 'dkh 3/7/2012 17:08:21'! setUp super setUp. Smalltalk at: #ConfigurationOfExample ifPresent: [:cl | cl removeFromSystem ] ! ! !MetacelloInsideToolBoxTutorialTests methodsFor: 'running' stamp: 'dkh 3/7/2012 17:08:21'! tearDown super tearDown. Smalltalk at: #ConfigurationOfExample ifPresent: [:cl | cl removeFromSystem ] ! ! !MetacelloInsideToolBoxTutorialTests methodsFor: 'tests' stamp: 'dkh 3/7/2012 17:08:21'! testExamples "right now just make sure that things don't fail" self class EXAMPLE! ! !MetacelloIssue108TestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Repository'. spec package: 'GoferBar'; yourself ]. ! ! !MetacelloIssue108TestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Repository'. spec package: 'GoferBar' with: [ spec file: 'GoferBar.gemstone' ]; yourself ]. ! ! !MetacelloIssue108TestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! expectedFailures true ifTrue: [ self flag: 'incomplete test coverage?'. ^#() ]. ^#( testMore "place holder to complete test coverage" )! ! !MetacelloIssue108TestCase methodsFor: 'utilities' stamp: 'dkh 7/23/2012 19:15'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloIssue108TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: #linear. ^project! ! !MetacelloIssue108TestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! repositoryName ^#'Metacello_Repository'! ! !MetacelloIssue108TestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:23'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloIssue108TestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := MetacelloIssue108Resource current monticelloRepository. self tempRepositories add: repo. Smalltalk at: self repositoryName put: repo. ! ! !MetacelloIssue108TestCase methodsFor: 'running' stamp: 'dkh 7/23/2012 19:21'! tearDown | aGofer | super tearDown. Smalltalk removeKey: self repositoryName ifAbsent: [ ]. self tempRepositories do: [ :repo | MCRepositoryGroup default removeRepository: repo ]. aGofer := Gofer new. self tearDownPackageNames do: [ :pName | (self hasPackage: pName) ifTrue: [ aGofer package: pName ] ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]! ! !MetacelloIssue108TestCase methodsFor: 'running' stamp: 'dkh 7/23/2012 19:16'! tearDownPackageNames ^ #('GoferBar')! ! !MetacelloIssue108TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! tempRepositories tempRepositories ifNil: [ tempRepositories := OrderedCollection new ]. ^tempRepositories! ! !MetacelloIssue108TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:02'! testBaseline10 "https://code.google.com/p/metacello/issues/detail?id=108" | wc project loader | project := self class new project. loader := project load: '1.0-baseline'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-dkh.70'! ! !MetacelloIssue108TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:02'! testBaseline20 "https://code.google.com/p/metacello/issues/detail?id=108" | wc project loader | project := self class new project. loader := project load: '2.0-baseline'. wc := (GoferVersionReference name: 'GoferBar.gemstone') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.gemstone-dkh.70'! ! !MetacelloIssue108TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:02'! testLatestPackage "https://code.google.com/p/metacello/issues/detail?id=108" "illustrate different behavior for GoferPackageReference, GoferVersionReference and MetacelloGoferPackage" | gofer repositorySpecs aString | gofer := Gofer new. gofer disablePackageCache. gofer repository: (Smalltalk at: self repositoryName). "GoferPackageReference" self assert: 'GoferBar-dkh.70' = ((GoferPackageReference name: 'GoferBar') resolveWith: gofer) name. self should: [ (GoferPackageReference name: 'GoferBar.gemstone') resolveWith: gofer ] raise: Error. "GoferVersionReference" self should: [ (GoferVersionReference name: 'GoferBar') resolveWith: gofer ] raise: Error. self should: [ (GoferVersionReference name: 'GoferBar.gemstone') resolveWith: gofer ] raise: Error. "MetacelloGoferPackage" self assert: 'GoferBar-dkh.70' = ((MetacelloGoferPackage name: 'GoferBar' packageFilename: 'GoferBar') resolveWith: gofer) name. self assert: 'GoferBar.gemstone-dkh.70' = ((MetacelloGoferPackage name: 'GoferBar' packageFilename: 'GoferBar.gemstone') resolveWith: gofer) name! ! !MetacelloIssue188TestCase methodsFor: 'specs' stamp: 'dkh 7/23/2013 14:08'! baseline10: spec spec for: #common do: [ spec repository: 'dictionary://Metacello_Repository'. spec blessing: #baseline. spec package: 'GoferBar'; package: 'GoferFoo'; yourself ]. ! ! !MetacelloIssue188TestCase methodsFor: 'accessing' stamp: 'dkh 7/23/2013 08:14'! project | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: #linear. ^project! ! !MetacelloIssue188TestCase methodsFor: 'specs' stamp: 'dkh 7/23/2013 14:11'! structural10A: spec spec for: #common do: [ spec blessing: #structural; package: 'GoferBar' with: 'GoferBar.lr.0' ]. ! ! !MetacelloIssue188TestCase methodsFor: 'specs' stamp: 'dkh 7/23/2013 14:17'! structural10B: spec spec for: #common do: [ spec blessing: #structural ]. spec for: #xxx do: [ spec package: 'GoferFoo' with: 'GoferFoo-lr.1' ]. ! ! !MetacelloIssue188TestCase methodsFor: 'tests' stamp: 'dkh 7/23/2013 11:50'! testCurrentVersion | cv | cv := self project currentVersion. self assert: cv == nil. ! ! !MetacelloIssue188TestCase methodsFor: 'tests' stamp: 'dkh 7/23/2013 14:24'! testLatestVersion | version | version := self project latestVersion. self assert: version versionString = '0.9'! ! !MetacelloIssue188TestCase methodsFor: 'tests' stamp: 'dkh 7/23/2013 11:48'! testOrderedVersions | versions | versions := self project versions sorted collect: [:each | each versionString]. self assert: versions = #('0.9' '1.0-a' '1.0-b' '1.0-baseline' '1.0')! ! !MetacelloIssue188TestCase methodsFor: 'specs' stamp: 'dkh 7/23/2013 11:47'! version09: spec spec for: #common do: [ spec blessing: #release; package: 'GoferBar' with: 'GoferBar.lr.0'; package: 'GoferFoo' with: 'GoferFoo-lr.1' ]. ! ! !MetacelloIssue188TestCase methodsFor: 'specs' stamp: 'dkh 7/23/2013 14:58'! version10: spec spec for: #common do: [ spec blessing: #development. ]. ! ! !MetacelloIssue115TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ 'MetacelloTestConfigurationOfProjectIssue115'! ! !MetacelloIssue115TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:04'! testIssue115a "https://code.google.com/p/metacello/issues/detail?id=115" | project versionSpec version validations | gofer version: 'MetacelloTestConfigurationOfProjectIssue115-dkh.1'. gofer metacelloLoad. project := self project. self shouldnt: [ versionSpec := (version := project version: '1.0') spec ] raise: Error. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'cannotResolveVersion' ] ifNone: [ self assert: false ]! ! !MetacelloIssue115TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:04'! testIssue115b "https://code.google.com/p/metacello/issues/detail?id=115" | project versionSpec version validations | gofer version: 'MetacelloTestConfigurationOfProjectIssue115-dkh.2'. gofer metacelloLoad. project := self project. self shouldnt: [ versionSpec := (version := project version: '1.1') spec ] raise: Error. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 2. validations do: [ :validation | self assert: validation reasonCode == #'cannotResolveVersion' ]! ! !MetacelloIssue119TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ 'MetacelloTestConfigurationOfProjectIssue119'! ! !MetacelloIssue119TestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageNames ^ super tearDownPackageNames , #('MetacelloTestConfigurationOfFoo')! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119a "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.1'. gofer metacelloLoad. project := self project. "no errors" self should: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 3. #(#'versionCreationError' #'noVersionsDefined') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self should: [ project version: '1.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '1.0' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119b "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.2'. gofer metacelloLoad. project := self project. "no errors" self should: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 3. #(#'versionCreationError' #'noVersionsDefined') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self should: [ project version: '2.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '2.0' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119c "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.3'. gofer metacelloLoad. project := self project. "no errors" self should: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 3. #(#'versionCreationError' #'noVersionsDefined') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self should: [ project version: '3.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '3.0' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119d "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.4'. gofer metacelloLoad. project := self project. "no errors" [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ]. "no error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes isEmpty. self assert: project versions size = 2. project versions do: [ :vrsn | self assert: (#('4.0' '4.0-baseline') includes: vrsn versionString) ]. self shouldnt: [ project version: '4.0-baseline' ] raise: MetacelloVersionDefinitionError. self shouldnt: [ project version: '4.0' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119e "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.5'. gofer metacelloLoad. project := self project. "no errors" self should: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 4. #(#'versionCreationError') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self assert: project versions size = 2. project versions do: [ :vrsn | self assert: (#('4.0' '4.0-baseline') includes: vrsn versionString) ]. self shouldnt: [ project version: '4.0-baseline' ] raise: MetacelloVersionDefinitionError. self shouldnt: [ project version: '4.0' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.1' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.2' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.3' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.4' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119f "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.6'. gofer metacelloLoad. project := self project. "no errors" self should: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 10. #(#'versionCreationError') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self assert: project versions size = 2. project versions do: [ :vrsn | self assert: (#('4.0' '4.0-baseline') includes: vrsn versionString) ]. self should: [ project version: '1.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '1.0' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '2.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '2.0' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '3.0-baseline' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '3.0' ] raise: MetacelloVersionDefinitionError. self shouldnt: [ project version: '4.0-baseline' ] raise: MetacelloVersionDefinitionError. self shouldnt: [ project version: '4.0' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.1' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.2' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.3' ] raise: MetacelloVersionDefinitionError. self should: [ project version: '4.4' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue119TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:07'! testIssue119g "https://code.google.com/p/metacello/issues/detail?id=119" | project issues reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue119-dkh.7'. gofer metacelloLoad. project := self project. "no errors" self shouldnt: [ [ self project ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ] ] raise: Error. "expect error" issues := MetacelloToolBox validateConfiguration: (Smalltalk at: #'MetacelloTestConfigurationOfProjectIssue119'). reasonCodes := issues collect: [ :each | each reasonCode ]. self assert: reasonCodes size = 1. #(#'cannotResolveVersion') do: [ :expectedReasonCode | self assert: (reasonCodes includes: expectedReasonCode) ]. self shouldnt: [ project version: '4.0-baseline' ] raise: MetacelloVersionDefinitionError. self shouldnt: [ project version: '5.0' ] raise: MetacelloVersionDefinitionError! ! !MetacelloIssue136TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ 'MetacelloTestConfigurationOfProjectIssue136'! ! !MetacelloIssue136TestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCachedIssue136 self shouldnt: [ MetacelloPlatform current stackCacheFor: #issue136 at: #testing doing: [:cache | self testIssue136 ]] raise: MetacelloProjectSpecLoadError! ! !MetacelloIssue136TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:09'! testIssue136 "https://code.google.com/p/metacello/issues/detail?id=136" | project projectReferenceProject configurationName projectBaseName projectSpec projectPackage | gofer version: 'MetacelloTestConfigurationOfProjectIssue136-dkh.1'. gofer metacelloLoad. project := self project. configurationName := 'MetacelloTestConfigurationOfProjectIssue136'. projectBaseName := 'Issue136'. projectReferenceProject := (MetacelloPlatform current globalNamed: configurationName asSymbol ifAbsent: [ self assert: false ]) project. projectPackage := projectReferenceProject projectPackage. projectPackage repository: 'dictionary://Metacello_Configuration_Test_Repository'. projectSpec := project projectSpec name: projectBaseName; className: configurationName; versionString: '1.0'; projectPackage: projectPackage; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectSpec load. projectReferenceProject := (MetacelloPlatform current globalNamed: configurationName asSymbol ifAbsent: [ self assert: false ]) project. projectPackage := projectReferenceProject projectPackage. projectPackage repository: 'dictionary://Metacello_Configuration_Test_Repository'. projectPackage file: 'MetacelloTestConfigurationOfProjectIssue136-dkh.2'. projectSpec := project projectSpec name: projectBaseName; className: configurationName; versionString: '1.1'; projectPackage: projectPackage; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectSpec load! ! !MetacelloIssue154TestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec self assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: 'MetacelloExample' className: 'ConfigurationOfMetacelloExample' packageName: 'MetacelloExample' fileName: 'ConfigurationOfMetacelloExample'! ! !MetacelloIssue154TestCase methodsFor: 'private' stamp: 'dkh 7/2/2012 17:52'! assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: projectName className: className packageName: packageName fileName: fileName | projectSpec projectPackage | self assert: projectReferenceSpec projectName = projectName. self assert: projectReferenceSpec versionString = '1.0'. projectSpec := projectReferenceSpec referencedSpec. self assert: projectSpec name = projectName. self assert: projectSpec versionString = '1.0'. self assert: projectSpec className = className. projectPackage := projectSpec projectPackage. projectPackage name ifNotNil: [ self assert: projectPackage name = className ]. projectPackage file ifNotNil: [ self assert: projectPackage file = fileName ]. self assert: (projectPackage repositoryDescriptions includes: 'dictionary://Metacello_Configuration_Test_Repository')! ! !MetacelloIssue154TestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! assertMetacelloExampleVersionSpec: versionSpec self assertMetacelloExampleProjectReferenceSpec: (versionSpec packages packageNamed: 'MetacelloExample' ifAbsent: [ self assert: false ])! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! expectedFailures ^ #(#'testProjectCreationA' #'testProjectCreationB' #'testProjectCreationC' #'testProjectCreationD' #'testClassicProjectReferenceSpecificationA' #'testClassicProjectReferenceSpecificationB' #'testClassicProjectReferenceSpecificationC' #'testClassicProjectReferenceSpecificationD')! ! !MetacelloIssue154TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ 'ConfigurationOfMetacelloProjectIssue154'! ! !MetacelloIssue154TestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageNames ^ super tearDownPackageNames , #('MetacelloTestConfigurationOfFoo' 'ConfigurationOfMetacelloExample')! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 11:20'! testClassicProjectReferenceSpecificationA "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '1.0-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleVersionSpec: versionSpec. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testClassicProjectReferenceSpecificationB "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '1.1-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleProjectReferenceSpec: (versionSpec packages packageNamed: 'MetacelloExample' ifAbsent: [ self assert: false ]) projectName: 'MetacelloExample' className: 'ConfigurationOfMetacelloExample' packageName: 'MetacelloExampleTestConfigurationIssue154' fileName: 'MetacelloExampleTestConfigurationIssue154'. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; file: ''MetacelloExampleTestConfigurationIssue154''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testClassicProjectReferenceSpecificationC "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '1.2-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleProjectReferenceSpec: (versionSpec packages packageNamed: 'MetacelloExample' ifAbsent: [ self assert: false ]) projectName: 'MetacelloExample' className: 'ConfigurationOfMetacelloExample' packageName: 'MetacelloExampleTestConfigurationIssue154' fileName: 'MetacelloExampleTestConfigurationIssue154.gemstone'. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; projectPackage: [ spec name: ''MetacelloExampleTestConfigurationIssue154''; file: ''MetacelloExampleTestConfigurationIssue154.gemstone''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ] ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testClassicProjectReferenceSpecificationD "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '1.3-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleProjectReferenceSpec: (versionSpec packages packageNamed: 'MetacelloExample' ifAbsent: [ self assert: false ]) projectName: 'MetacelloExample' className: 'ConfigurationOfMetacelloExample' packageName: 'MetacelloExampleTestConfigurationIssue154.gemstone' fileName: 'MetacelloExampleTestConfigurationIssue154.gemstone'. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; projectPackage: [ spec name: ''MetacelloExampleTestConfigurationIssue154''; <<<<--------------------- not sure what should be done here, since the branch is not really correct ... if branch legal then if is okay to collapse the file out ... same as 1.1 except file is specified instead of name .... but they are equivalent file: ''MetacelloExampleTestConfigurationIssue154.gemstone''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ] ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 11:27'! testNewProjectReferenceSpecification "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '3.0-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleVersionSpec: versionSpec. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/11/2013 11:26'! testOldProjectReferenceSpecification "https://code.google.com/p/metacello/issues/detail?id=154" | project versionSpec validations x | gofer version: 'ConfigurationOfMetacelloProjectIssue154-dkh.1'. gofer metacelloLoad. project := self project. versionSpec := (project version: '2.0-baseline') spec. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'onlyBaselineVersion' ] ifNone: [ self assert: false ]. self assertMetacelloExampleVersionSpec: versionSpec. self assert: (x := versionSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testProjectCreationA "https://code.google.com/p/metacello/issues/detail?id=154" | project projectReferenceSpec projectSpec x | project := MetacelloMCProject new. projectSpec := project projectSpec name: 'MetacelloExample'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectReferenceSpec := project projectReferenceSpec name: 'MetacelloExample'; projectReference: projectSpec; versionString: '1.0'; yourself. self assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: 'MetacelloExample' className: 'ConfigurationOfMetacelloExample' packageName: 'MetacelloExample' fileName: 'ConfigurationOfMetacelloExample'. self assert: (x := projectReferenceSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''ConfigurationOfMetacelloExample''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].' "might need to cast these as versionSpecs so that the correct printing algorithms are used"! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testProjectCreationB "https://code.google.com/p/metacello/issues/detail?id=154" | project projectReferenceSpec projectSpec x | project := MetacelloMCProject new. projectSpec := project projectSpec name: 'MetacelloExample'; className: 'MetacelloExampleConfigurationClass'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectReferenceSpec := project projectReferenceSpec name: 'MetacelloExample'; projectReference: projectSpec; versionString: '1.0'; yourself. self assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: 'MetacelloExample' className: 'MetacelloExampleConfigurationClass' packageName: 'MetacelloExample' fileName: 'MetacelloExampleConfigurationClass'. self assert: (x := projectReferenceSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''MetacelloExampleConfigurationClass''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].' "might need to cast these as versionSpecs so that the correct printing algorithms are used"! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:11'! testProjectCreationC "https://code.google.com/p/metacello/issues/detail?id=154" | project projectReferenceSpec projectSpec x | project := MetacelloMCProject new. projectSpec := project projectSpec name: 'MetacelloExample'; className: 'MetacelloExampleConfigurationClass'; file: 'MetacelloExampleConfigurationFile'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectReferenceSpec := project projectReferenceSpec name: 'MetacelloExample'; projectReference: projectSpec; versionString: '1.0'; yourself. self assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: 'MetacelloExample' className: 'MetacelloExampleConfigurationClass' packageName: 'MetacelloExample' fileName: 'MetacelloExampleConfigurationFile'. self assert: (x := projectReferenceSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''MetacelloExampleConfigurationClass''; file: ''MetacelloExampleConfigurationFile''; versionString: ''1.0''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].' "might need to cast these as versionSpecs so that the correct printing algorithms are used"! ! !MetacelloIssue154TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:12'! testProjectCreationD "https://code.google.com/p/metacello/issues/detail?id=154" | project projectReferenceSpec projectSpec x | project := MetacelloMCProject new. projectSpec := project projectSpec name: 'MetacelloExample'; className: 'MetacelloExampleConfigurationClass'; file: 'MetacelloExampleConfigurationFile.gemstone'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; yourself. projectReferenceSpec := project projectReferenceSpec name: 'MetacelloExample'; projectReference: projectSpec; versionString: '1.0'; yourself. self assertMetacelloExampleProjectReferenceSpec: projectReferenceSpec projectName: 'MetacelloExample' className: 'MetacelloExampleConfigurationClass' packageName: 'MetacelloExample' fileName: 'MetacelloExampleConfigurationFile.gemstone'. self assert: (x := projectReferenceSpec printString) = 'spec blessing: #''baseline''. spec project: ''MetacelloExample'' with: [ spec className: ''MetacelloExampleConfigurationClass''; versionString: ''1.0''; projectPackage: [ spec name: ''MetacelloExampleConfigurationFile''; <<<<--------------------- not sure what should be done here, since the branch is not really correct ... if branch legal then if is okay to collapse the file out ... same as 1.1 except file is specified instead of name .... but they are equivalent file: ''MetacelloExampleConfigurationFile.gemstone''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ] ].'! ! !MetacelloIssue171TestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ 'MetacelloTestConfigurationOfProjectIssue171'! ! !MetacelloIssue171TestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageNames ^ super tearDownPackageNames , {'MetacelloTestConfigurationOfFoo'}! ! !MetacelloIssue171TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:12'! testIssue171a "https://code.google.com/p/metacello/issues/detail?id=171" | project versionSpec version validations | gofer version: 'MetacelloTestConfigurationOfProjectIssue171-dkh.1'. gofer metacelloLoad. project := self project. self shouldnt: [ versionSpec := (version := project version: '2.0') spec ] raise: Error. validations := MetacelloToolBox validateConfiguration: self projectClass. self assert: validations size = 1. validations detect: [ :validation | validation reasonCode == #'missingRecommendedProjectSpecField' ] ifNone: [ self assert: false ]! ! !MetacelloIssue171TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:12'! testIssue171b "https://code.google.com/p/metacello/issues/detail?id=171" | project versionSpec version validations expectedReasonCodes reasonCodes | gofer version: 'MetacelloTestConfigurationOfProjectIssue171-dkh.2'. gofer metacelloLoad. project := self project. self shouldnt: [ versionSpec := (version := project version: '2.1') spec ] raise: Error. validations := MetacelloToolBox validateConfiguration: self projectClass. expectedReasonCodes := #(#'missingRecommendedProjectSpecField' #'incompleteProjectSpec' #'versionCompositionError'). reasonCodes := (validations collect: [ :each | each reasonCode ]) asSet. self assert: reasonCodes size = expectedReasonCodes size. expectedReasonCodes do: [ :reasonCode | reasonCodes includes: reasonCode ]! ! !MetacelloIssueTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationRepository "MetacelloConfigurationResource reset" ^ MetacelloConfigurationResource current monticelloRepository! ! !MetacelloIssueTestCase methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloIssueTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! monticelloRepository "MetacelloMonticelloResource reset" ^ MetacelloMonticelloResource current monticelloRepository! ! !MetacelloIssueTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^self projectWith: #()! ! !MetacelloIssueTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ Smalltalk at: self projectName asSymbol! ! !MetacelloIssueTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectName ^ self subclassResponsibility! ! !MetacelloIssueTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self projectClass new project: project. project loader: MetacelloNullRecordingMCSpecLoader new. project loader evalDoits: false. ^ project! ! !MetacelloIssueTestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:31'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloIssueTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo | super setUp. repo := self monticelloRepository. gofer := Gofer new. gofer disablePackageCache. gofer repository: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. repo := self configurationRepository. gofer repository: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. ! ! !MetacelloIssueTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackageNames do: [ :pName | (self hasPackage: pName) ifTrue: [ aGofer package: pName ] ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]! ! !MetacelloIssueTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageNames ^ {(self projectName)}! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]]. ! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline11: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec includes: #('Example-AddOn' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]]. ! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline12: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]. spec group: 'Core' with: #('Example-Core' 'Example-AddOn' ); group: 'Tests' with: #('Example-Tests' 'Example-TestsUI' ); group: 'No UI' with: #('Core' 'Example-Tests' ).]. ! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline13: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]. spec group: 'Core' with: #('Example-Core' 'Example-AddOn' ); group: 'Tests' with: #('Example-Tests' 'Example-TestsUI' ); group: 'No UI' with: #('Core' 'Example-Tests' ). spec package: 'Example-Group-Test' with: [ spec requires: #('Tests') ]]. ! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline14: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec includes: #('Example-GemStone-Core') ]; package: 'Example-2' with: [ spec requires: #('Example-Core') ]; package: 'Example-3' with: [ spec requires: #('Example-Core') ]; package: 'Example-Core'; package: 'Example-1' with: [ spec requires: #('Example-Core') ]; package: 'Example-GemStone300-Core' with: [ spec requires: #('Example-Core'); includes: #('Example-GemStone-Core') ]; package: 'Example-GemStone-Core' with: [ spec requires: #('Example-Core') ]; package: 'Example-Core' with: [ spec includes: #('Example-GemStone300-Core') ]; yourself.]! ! !MetacelloLoadOrderTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline300alpha5: spec spec for: #common do: [ spec blessing: #baseline. spec description: '3.0.0 baseline based on 3.0.0-alpha5'. spec repository: 'http://www.squeaksource.com/Seaside30'. spec package: 'Grease-Core'; package: 'Seaside-Core' with: [ spec requires: #('Grease-Core' ). ]; package: 'Seaside-Canvas' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-Session' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-Component' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-RenderLoop' with: [ spec requires: #('Seaside-Component' 'Seaside-Session' ). ]; package: 'Seaside-Tools-Core' with: [ spec requires: #('Seaside-Core' 'Seaside-Component' 'Seaside-RenderLoop' 'Seaside-Session' ). ]; package: 'Seaside-Widgets' with: [ spec requires: #('Seaside-Component' 'Seaside-Canvas' ). ]; package: 'Seaside-Environment' with: [ spec requires: #('Seaside-Core' 'Seaside-Canvas' 'Seaside-Session' 'Seaside-Component' 'Seaside-RenderLoop' 'Seaside-Tools-Core' 'Seaside-Widgets' ). ]; package: 'Seaside-Flow' with: [ spec requires: #('Seaside-Core' 'Seaside-Component' 'Seaside-RenderLoop' 'Seaside-Tools-Core' ). ]; package: 'Seaside-Development' with: [ spec requires: #('Seaside-Tools-Web' 'Seaside-Flow' ). ]; package: 'Seaside-Examples' with: [ spec requires: #('Seaside-Component' 'Seaside-Canvas' 'Seaside-Tools-Core' ). ]; package: 'Seaside-Tools-Web' with: [ spec requires: #('Seaside-Tools-Core' 'Seaside-RenderLoop' 'Seaside-Widgets' ). ]; package: 'Seaside-Tools-OmniBrowser' with: [ spec requires: #('Seaside-Tools-Core' ). ]; package: 'RSS-Core' with: [ spec requires: #('Seaside-Canvas' ). ]; package: 'RSS-Examples' with: [ spec requires: #('RSS-Core' ). ]; package: 'Javascript-Core' with: [ spec requires: #('Seaside-Core' 'Seaside-Canvas' ). ]; package: 'JQuery-Core' with: [ spec requires: #('Javascript-Core' ). ]; package: 'JQuery-UI' with: [ spec requires: #('JQuery-Core' ). ]; package: 'Prototype-Core' with: [ spec requires: #('Javascript-Core' ). ]; package: 'Scriptaculous-Core' with: [ spec requires: #('Prototype-Core' ). ]; package: 'Scriptaculous-Components' with: [ spec requires: #('Scriptaculous-Core' 'Seaside-Component' 'Seaside-Flow' ). ]; package: 'Seaside-HTML5' with: [ spec requires: #('Seaside-Canvas' ). ]; package: 'Seaside-InternetExplorer' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-Email' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-FileSystem' with: [ spec requires: #('Seaside-Core' ). ]; package: 'Seaside-Slime' with: [ spec requires: #('Grease-Core' ). ]; package: 'Grease-Tests-Core' with: [ spec requires: #('Grease-Core' ). ]; package: 'Seaside-Tests-Core' with: [ spec requires: #('Seaside-Core' 'Grease-Tests-Core' ). ]; package: 'Seaside-Tests-UTF8' with: [ spec requires: #('Seaside-Tests-Core' ). ]; package: 'Seaside-Tests-Canvas' with: [ spec requires: #('Seaside-Tests-Core' 'Seaside-Canvas' ). ]; package: 'Seaside-Tests-Session' with: [ spec requires: #('Seaside-Tests-Core' 'Seaside-Session' ). ]; package: 'Seaside-Tests-Component' with: [ spec requires: #('Seaside-Component' 'Seaside-Tests-Core' ). ]; package: 'Seaside-Tests-RenderLoop' with: [ spec requires: #('Seaside-RenderLoop' 'Seaside-Tests-Session' ). ]; package: 'Seaside-Tests-Environment' with: [ spec requires: #('Seaside-Environment' 'Seaside-Tests-Component' 'Seaside-Tests-RenderLoop' 'Seaside-Tests-Session' 'Seaside-Tests-Canvas' ). ]; package: 'Seaside-Tests-Functional' with: [ spec requires: #('Seaside-Environment' 'Seaside-Tests-Core' ). ]; package: 'Seaside-Tests-Flow' with: [ spec requires: #('Seaside-Flow' 'Seaside-Tests-Functional' ). ]; package: 'Seaside-Tests-Tools-Web' with: [ spec requires: #('Seaside-Tools-Web' 'Seaside-Tests-Environment' ). ]; package: 'Seaside-Tests-Development' with: [ spec requires: #('Seaside-Development' 'Seaside-Tests-Tools-Web' ). ]; package: 'Seaside-Tests-Examples' with: [ spec requires: #('Seaside-Examples' 'Seaside-Tests-Environment' ). ]; package: 'RSS-Tests-Core' with: [ spec requires: #('RSS-Core' ). ]; package: 'Javascript-Tests-Core' with: [ spec requires: #('Seaside-Tests-Core' 'Javascript-Core' ). ]; package: 'JQuery-Tests-Core' with: [ spec requires: #('JQuery-Core' 'Javascript-Tests-Core' 'Seaside-Development' 'Seaside-Tests-Functional' ). ]; package: 'JQuery-Tests-UI' with: [ spec requires: #('JQuery-UI' 'JQuery-Tests-Core' ). ]; package: 'Prototype-Tests-Core' with: [ spec requires: #('Prototype-Core' 'Javascript-Tests-Core' 'Seaside-Tests-Functional' ). ]; package: 'Scriptaculous-Tests-Core' with: [ spec requires: #('Scriptaculous-Core' 'Prototype-Tests-Core' ). ]; package: 'Scriptaculous-Tests-Components' with: [ spec requires: #('Scriptaculous-Components' 'Scriptaculous-Tests-Core' ). ]; package: 'Seaside-Tests-HTML5' with: [ spec requires: #('Seaside-HTML5' 'Seaside-Tests-Functional' ). ]; package: 'Seaside-Tests-InternetExplorer' with: [ spec requires: #('Seaside-InternetExplorer' 'Seaside-Tests-Core' ). ]; package: 'Seaside-Tests-Email' with: [ spec requires: #('Seaside-Email' 'Seaside-Tools-Core' ) ]; package: 'Seaside-Tests-FileSystem' with: [ spec requires: #('Seaside-FileSystem' ). ]; package: 'Seaside-Tests-Slime' with: [ spec requires: #('Seaside-Slime' ). ]]. spec for: #squeakCommon do: [ spec package: 'Grease-Core' with: [ spec includes: #('Grease-Pharo-Core' ) ]; package: 'Seaside-Core' with: [ spec includes: #('Seaside-Pharo-Core' ) ]; package: 'Seaside-Environment' with: [ spec includes: #('Seaside-Pharo-Environment' ) ]; package: 'Seaside-Flow' with: [ spec includes: #('Seaside-Pharo-Flow' ) ]; package: 'Seaside-Tools-Web' with: [ spec includes: #('Seaside-Pharo-Tools-Web' ) ]; package: 'Seaside-Development' with: [ spec includes: #('Seaside-Pharo-Development' ) ]; package: 'Seaside-Tools-OmniBrowser' with: [ spec includes: #('Seaside-Pharo-Tools-OmniBrowser' ) ]; package: 'Seaside-Email' with: [ spec includes: #('Seaside-Pharo-Email' ) ]; package: 'Javascript-Core' with: [ spec includes: #('Javascript-Pharo-Core' ) ]; package: 'Grease-Tests-Core' with: [ spec includes: #('Grease-Tests-Pharo-Core' ). ]; package: 'Seaside-Tests-Core' with: [ spec includes: #('Seaside-Tests-Pharo-Core' ). ]; package: 'Seaside-Tests-Functional' with: [ spec includes: #('Seaside-Tests-Pharo-Functional' ). ]; package: 'Seaside-Tests-Flow' with: [ spec includes: #('Seaside-Tests-Pharo-Continuation' ). ]; package: 'Seaside-Tests-Development' with: [ spec includes: #('Seaside-Tests-Pharo-Development' ). ]; package: 'Grease-Pharo-Core' with: [ spec requires: #('Grease-Core' ) ]; package: 'Seaside-Pharo-Core' with: [ spec requires: #('Seaside-Core' ) ]; package: 'Seaside-Pharo-Environment' with: [ spec requires: #('Seaside-Environment' ) ]; package: 'Seaside-Pharo-Continuation' with: [ spec requires: #('Grease-Core' ) ]; package: 'Seaside-Pharo-Flow' with: [ spec requires: #('Seaside-Flow' 'Grease-Core' 'Seaside-Pharo-Continuation' ) ]; package: 'Seaside-Pharo-Tools-Web' with: [ spec requires: #('Seaside-Tools-Web' ) ]; package: 'Seaside-Pharo-Development' with: [ spec requires: #('Seaside-Development' ) ]; package: 'Seaside-Pharo-Tools-OmniBrowser' with: [ spec requires: #('Seaside-Tools-OmniBrowser' ) ]; package: 'Seaside-Pharo-Email' with: [ spec requires: #('Seaside-Email' ) ]; package: 'Comet-Pharo-Core' with: [ spec requires: #('Comet-Core' ) ]; package: 'Javascript-Pharo-Core' with: [ spec requires: #('Javascript-Core' ) ]; package: 'DynamicBindings' with: [ spec repository: 'http://www.squeaksource.com/KomHttpServer' ]; package: 'KomServices' with: [ spec repository: 'http://www.squeaksource.com/KomHttpServer' ]; package: 'KomHttpServer' with: [ spec repository: 'http://www.squeaksource.com/KomHttpServer' ]; package: 'Seaside-Adaptors-Comanche' with: [ spec requires: #('Seaside-Core' 'DynamicBindings' 'KomServices' 'KomHttpServer' ) ]; package: 'Seaside-Adaptors-Swazoo' with: [ spec requires: #('Seaside-Core' 'Seaside-Swazoo' ) ]; package: 'Comet-Core' with: [ spec includes: #('Comet-Pharo-Core' ). spec requires: #('Seaside-Canvas' 'Javascript-Core' ) ]; package: 'Comet-Examples' with: [ spec requires: #('JQuery-UI' 'Comet-Core' ) ]; package: 'Seaside-Swazoo' with: [ spec requires: #('Grease-Core' ). ]; package: 'Grease-Tests-Pharo-Core' with: [ spec requires: #('Grease-Tests-Core' ) ]; package: 'Seaside-Tests-Pharo-Core' with: [ spec requires: #('Seaside-Tests-Core' ) ]; package: 'Seaside-Tests-Pharo-Functional' with: [ spec requires: #('Seaside-Tests-Functional' ) ]; package: 'Seaside-Tests-Pharo-Continuation' with: [ spec requires: #('Seaside-Pharo-Continuation' 'Grease-Tests-Core' ) ]; package: 'Seaside-Tests-Pharo-Development' with: [ spec requires: #('Seaside-Tests-Development' ) ]; package: 'Seaside-Tests-Adaptors-Comanche' with: [ spec requires: #('Seaside-Adaptors-Comanche' 'Seaside-Tests-Core' )]; package: 'Comet-Tests-Core' with: [ spec requires: #('Javascript-Tests-Core' 'Comet-Core' ) ]]. ! ! !MetacelloLoadOrderTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: MetacelloNullRecordingMCSpecLoader new. ^project! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10 | loadedPackages project loader | project := self class new project. loader := project load: '1.0-baseline'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-UI'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-Tests'). ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline11 | loadedPackages project loader | project := self class new project. loader := project load: '1.1-baseline'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-UI'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-Tests'). ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline12 | loadedPackages project loader | project := self class new project. loader := (project version: '1.2-baseline') load: 'No UI'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') = 0. self assert: (loadedPackages indexOf: 'Example-TestsUI') = 0. ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline13 | loadedPackages project loader | project := self class new project. loader := (project version: '1.3-baseline') load: 'Example-Group-Test'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-UI'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-Tests'). self assert: (loadedPackages indexOf: 'Example-Group-Test') > (loadedPackages indexOf: 'Example-Tests'). self assert: (loadedPackages indexOf: 'Example-Group-Test') > (loadedPackages indexOf: 'Example-TestsUI'). ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline13a | loadedPackages project loader | project := self class new project. loader := (project version: '1.3-baseline') load: 'Example-Group-Test'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-UI'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-Tests'). self assert: (loadedPackages indexOf: 'Example-Group-Test') > (loadedPackages indexOf: 'Example-Tests'). self assert: (loadedPackages indexOf: 'Example-Group-Test') > (loadedPackages indexOf: 'Example-TestsUI'). ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline14 "test for http://code.google.com/p/metacello/issues/detail?id=90" | loadedPackages project loader | project := self class new project. loader := (project version: '1.4-baseline') load: #('Example-3' 'Example-2' 'Example-1'). loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-GemStone300-Core') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-GemStone-Core') > (loadedPackages indexOf: 'Example-GemStone300-Core'). self assert: (loadedPackages indexOf: 'Example-3') > (loadedPackages indexOf: 'Example-GemStone-Core'). ! ! !MetacelloLoadOrderTestCase methodsFor: 'testing' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline300alpha5IncludesX "make sure that includes: constraints are met" "the includes: directive should slave the included package such that included packages are loaded before any of the packages that require the base package." | project loadedPackageNames loadedPackageSpecs baseSpecName loader | project := self class new project. loader := project load: '3.0.0-alpha5-baseline'. loadedPackageNames := loader loadedPackages asArray. loadedPackageSpecs := loader packages. loadedPackageSpecs do: [:baseSpec | baseSpecName := baseSpec name. "this only applies to packageSpecs, groups are not treated this way" baseSpec includes do: [:includedSpecName | loadedPackageSpecs do: [:spec | (spec requires includes: baseSpecName) ifTrue: [ self assert: ((loadedPackageNames indexOf: spec name) >= (loadedPackageNames indexOf: includedSpecName)). self assert: ((loadedPackageNames indexOf: spec name) > (loadedPackageNames indexOf: baseSpecName)) ]. (spec requires includes: includedSpecName) ifTrue: [ self assert: ((loadedPackageNames indexOf: spec name) > (loadedPackageNames indexOf: includedSpecName)) ]]]].! ! !MetacelloMCIssue125TestCase methodsFor: 'running' stamp: 'dkh 9/11/2012 15:16'! configurationRepository "MetacelloConfigurationResource reset" ^ MetacelloConfigurationResource current monticelloRepository! ! !MetacelloMCIssue125TestCase methodsFor: 'utilities' stamp: 'dkh 9/11/2012 15:16'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloMCIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 15:16'! monticelloRepository "MetacelloMonticelloResource reset" ^ MetacelloMonticelloResource current monticelloRepository! ! !MetacelloMCIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 15:16'! project ^self projectWith: #()! ! !MetacelloMCIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 15:16'! projectClass ^ Smalltalk at: self projectName asSymbol! ! !MetacelloMCIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 15:17'! projectName ^ 'MetacelloTestConfigurationOfProjectIssue125'! ! !MetacelloMCIssue125TestCase methodsFor: 'accessing' stamp: 'dkh 9/11/2012 15:43'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self projectClass new project: project. ^ project! ! !MetacelloMCIssue125TestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:31'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloMCIssue125TestCase methodsFor: 'running' stamp: 'dkh 9/11/2012 15:32'! setUp | repo | super setUp. repo := self monticelloRepository. gofer := Gofer new. gofer disablePackageCache. gofer repository: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. repo := self configurationRepository. gofer repository: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. gofer version: 'MetacelloTestConfigurationOfProjectIssue125-dkh.1'. gofer metacelloLoad! ! !MetacelloMCIssue125TestCase methodsFor: 'running' stamp: 'dkh 9/11/2012 15:16'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackageNames do: [ :pName | (self hasPackage: pName) ifTrue: [ aGofer package: pName ] ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]! ! !MetacelloMCIssue125TestCase methodsFor: 'running' stamp: 'dkh 9/11/2012 15:18'! tearDownPackageNames ^ {(self projectName). 'GoferFoo'. 'GoferBar'. 'GoferFaux'. 'GoferBeau'}! ! !MetacelloMCIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:13'! testForDoListAtrribute1Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version wc | project := self projectWith: #(#'attribute1'). version := project version: '3.0'. version load. {('GoferFoo' -> 'GoferFoo-lr.4'). ('GoferBar' -> 'GoferBar-jf.1'). ('GoferFaux' -> 'GoferFaux-tg.32'). ('GoferBeau' -> 'GoferBeau-dkh.55')} do: [ :assoc | wc := (GoferPackageReference name: assoc key) workingCopy. self assert: wc ancestry ancestors first name = assoc value ]! ! !MetacelloMCIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:13'! testForDoListAtrribute2Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version wc | project := self projectWith: #(#'attribute2'). version := project version: '3.0'. version load. {('GoferFoo' -> 'GoferFoo-lr.4'). ('GoferBar' -> 'GoferBar-jf.1'). ('GoferFaux' -> 'GoferFaux-tg.33'). ('GoferBeau' -> 'GoferBeau-dkh.56')} do: [ :assoc | wc := (GoferPackageReference name: assoc key) workingCopy. self assert: wc ancestry ancestors first name = assoc value ]! ! !MetacelloMCIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:13'! testForDoListAttribute1Atrribute2Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version wc | project := self projectWith: #(#'attribute1' #'attribute2'). version := project version: '3.0'. version load. {('GoferFoo' -> 'GoferFoo-lr.4'). ('GoferBar' -> 'GoferBar-jf.1'). ('GoferFaux' -> 'GoferFaux-tg.33'). ('GoferBeau' -> 'GoferBeau-dkh.56')} do: [ :assoc | wc := (GoferPackageReference name: assoc key) workingCopy. self assert: wc ancestry ancestors first name = assoc value ]! ! !MetacelloMCIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:13'! testForDoListAttribute2Atrribute1Active "https://github.com/dalehenrich/metacello-work/issues/125" | project version wc | project := self projectWith: #(#'attribute2' #'attribute1'). version := project version: '3.0'. version load. {('GoferFoo' -> 'GoferFoo-lr.4'). ('GoferBar' -> 'GoferBar-jf.1'). ('GoferFaux' -> 'GoferFaux-tg.32'). ('GoferBeau' -> 'GoferBeau-dkh.55')} do: [ :assoc | wc := (GoferPackageReference name: assoc key) workingCopy. self assert: wc ancestry ancestors first name = assoc value ]! ! !MetacelloMCIssue125TestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:13'! testForDoListNotActive "https://github.com/dalehenrich/metacello-work/issues/125" | project version wc | project := self projectWith: #(). version := project version: '3.0'. version load. {('GoferFoo' -> 'GoferFoo-lr.4'). ('GoferBar' -> 'GoferBar-jf.1')} do: [ :assoc | wc := (GoferPackageReference name: assoc key) workingCopy. self assert: wc ancestry ancestors first name = assoc value ]! ! !MetacelloPlatformAttributesTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline011: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'FFI project '. spec repository: 'source.squeakfoundation.org/FFI'. spec package: 'FFI-Kernel'; package: 'FFI-Examples' with: [ spec requires: #('FFI-Kernel' ) ]; package: 'FFI-Tests' with: [ spec requires: #('FFI-Examples' ) ]]. ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10beta0: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'GemTools client for Pharo/Squeak'. spec repository: 'http://seaside.gemstone.com/ss/GLASSClient'. spec package: 'OB-SUnitGUI' with: [ spec repository: 'http://seaside.gemstone.com/ss/obsunit' ]; package: 'GemTools-Client' with: [ spec requires: #('OB-SUnitGUI' ) ]; package: 'GemTools-Platform' with: [ spec requires: #('GemTools-Client' ) ]]. ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project ^self projectWith: #()! ! !MetacelloPlatformAttributesTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectWith: projectAttributes | project | "Construct Metacello project" project := MetacelloMCProject new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: MetacelloNullRecordingMCSpecLoader new. ^project! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline011 | project loadedPackages version loader | project := self project. version := project version: '0.11-baseline'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'FFI-Kernel') > 0. self assert: (loadedPackages indexOf: 'FFI-Examples') > (loadedPackages indexOf: 'FFI-Kernel'). self assert: (loadedPackages indexOf: 'FFI-Tests') > (loadedPackages indexOf: 'FFI-Examples'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline011Pharo10Beta | project loadedPackages version loader | project := self projectWith: #(#'pharo1.0Beta'). version := project version: '0.11-baseline'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'FFI-Kernel') > 0. self assert: (loadedPackages indexOf: 'FFI-Examples') > (loadedPackages indexOf: 'FFI-Kernel'). self assert: (loadedPackages indexOf: 'FFI-Tests') > (loadedPackages indexOf: 'FFI-Examples'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testLastVersion | project version | project := self project. version := project lastVersion. self assert: version versionString = '1.0-beta.0'! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion011 | project loadedPackages version loader | project := self project. version := project version: '0.11'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'FFI-Kernel-ar.8') > 0. self assert: (loadedPackages indexOf: 'FFI-Examples-ar.1') > (loadedPackages indexOf: 'FFI-Kernel-ar.8'). self assert: (loadedPackages indexOf: 'FFI-Tests-ar.2') > (loadedPackages indexOf: 'FFI-Examples-ar.1'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion011Pharo10Beta | project loadedPackages version loader | project := self projectWith: #(#'pharo1.0Beta'). version := project version: '0.11'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'FFI-Kernel-ar.11') > 0. self assert: (loadedPackages indexOf: 'FFI-Examples-ar.1') > (loadedPackages indexOf: 'FFI-Kernel-ar.11'). self assert: (loadedPackages indexOf: 'FFI-Tests-ar.3') > (loadedPackages indexOf: 'FFI-Examples-ar.1'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta0 | project loadedPackages version loader | project := self project. version := project version: '1.0-beta.0'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'OB-SUnitGUI-dkh.52') > (loadedPackages indexOf: 'FFI-Tests-ar.3'). self assert: (loadedPackages indexOf: 'GemTools-Client.experimental-dkh.493') > (loadedPackages indexOf: 'OB-SUnitGUI-dkh.52'). self assert: (loadedPackages indexOf: 'GemTools-Platform.squeakCommon-dkh.2') > (loadedPackages indexOf: 'GemTools-Client.experimental-dkh.493'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testVersion10beta0Pharo10Beta | project loadedPackages version loader | project := self projectWith: #(#'pharo1.0Beta'). version := project version: '1.0-beta.0'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'OB-SUnitGUI-dkh.52') > (loadedPackages indexOf: 'FFI-Tests-ar.3'). self assert: (loadedPackages indexOf: 'GemTools-Client.experimental-dkh.493') > (loadedPackages indexOf: 'OB-SUnitGUI-dkh.52'). self assert: (loadedPackages indexOf: 'GemTools-Platform.pharo10beta-dkh.2') > (loadedPackages indexOf: 'GemTools-Client.experimental-dkh.493'). ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version011: spec spec for: #common do: [ spec blessing: #release. spec description: 'FFI project ... used by GemTools for Pharo 1.0beta #10440'. spec package: 'FFI-Kernel' with: 'FFI-Kernel-ar.8'; package: 'FFI-Examples' with: 'FFI-Examples-ar.1'; package: 'FFI-Tests' with: 'FFI-Tests-ar.2' ]. spec for: #'pharo1.0Beta' do: [ spec package: 'FFI-Kernel' with: 'FFI-Kernel-ar.11'; package: 'FFI-Tests' with: 'FFI-Tests-ar.3' ]. ! ! !MetacelloPlatformAttributesTestCase methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version10beta0: spec spec for: #common do: [ spec blessing: #beta. spec description: 'GemTools client for Pharo/Squeak'. spec package: 'OB-SUnitGUI' with: 'OB-SUnitGUI-dkh.52'; package: 'GemTools-Client' with: 'GemTools-Client.experimental-dkh.493'; package: 'GemTools-Platform' with: 'GemTools-Platform.squeakCommon-dkh.2' ]. spec for: #'pharo1.0Beta' do: [ spec package: 'GemTools-Platform' with: 'GemTools-Platform.pharo10beta-dkh.2' ]. ! ! !MetacelloProjectRegistrationTestCase methodsFor: 'private' stamp: 'dkh 07/28/2013 14:48'! baselineProjectSpec | registration projectSpec project | project := MetacelloMCBaselineProject new. projectSpec := project baselineOfProjectSpec. ^ projectSpec name: 'DiscGolf'; className: 'ConfigurationOfDiscGolf'; versionString: project singletonVersionName; repository: 'http://example.com/repository/OrchardPark'; yourself! ! !MetacelloProjectRegistrationTestCase methodsFor: 'private' stamp: 'dkh 07/28/2013 14:48'! configurationProjectSpec | registration projectSpec project | project := MetacelloMCProject new. projectSpec := project configurationOfProjectSpec. ^ projectSpec name: 'DiscGolf'; className: 'ConfigurationOfDiscGolf'; versionString: '1.0'; repository: 'http://example.com/repository/OrchardPark'; yourself! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBasicBaselineRegistration | registration projectSpec | projectSpec := self baselineProjectSpec. registration := projectSpec asProjectRegistration. self assert: registration isValid. self assert: registration = registration. self assert: registration hash = registration hash! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBasicConfigurationRegistration | registration projectSpec | projectSpec := self configurationProjectSpec. registration := projectSpec asProjectRegistration. self assert: registration isValid. self assert: registration = registration. self assert: registration hash = registration hash! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 14:28'! testBasicHasLoadConflicts | registrationA registrationB baselineProjectSpecA configurationProjectSpecA baselineProjectSpecB configurationProjectSpecB | baselineProjectSpecA := self baselineProjectSpec. configurationProjectSpecA := self configurationProjectSpec. baselineProjectSpecB := self baselineProjectSpec className: 'BaselineOfNotDiscGolf'. configurationProjectSpecB := self configurationProjectSpec className: 'ConfigurationOfNotDiscGolf'. registrationA := MetacelloProjectRegistration new. registrationB := MetacelloProjectRegistration new. self should: [ registrationA hasLoadConflicts: registrationB ] raise: Error. registrationA projectName: baselineProjectSpecA name. registrationB projectName: baselineProjectSpecA name. self should: [ registrationA hasLoadConflicts: registrationB ] raise: Error. registrationA configurationProjectSpec: nil. registrationA baselineProjectSpec: baselineProjectSpecA. registrationB configurationProjectSpec: nil. registrationB baselineProjectSpec: baselineProjectSpecB. self assert: (registrationA hasLoadConflicts: registrationB). registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: baselineProjectSpecA. self deny: registrationA isValid. registrationB configurationProjectSpec: configurationProjectSpecB. registrationB baselineProjectSpec: baselineProjectSpecA. self deny: registrationB isValid. registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: baselineProjectSpecA. self deny: registrationA isValid. registrationB configurationProjectSpec: configurationProjectSpecA. registrationB baselineProjectSpec: baselineProjectSpecB. self deny: registrationB isValid. registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: nil. registrationB configurationProjectSpec: configurationProjectSpecB. registrationB baselineProjectSpec: nil. self assert: (registrationA hasLoadConflicts: registrationB). registrationA configurationProjectSpec: nil. registrationA baselineProjectSpec: baselineProjectSpecA. registrationB configurationProjectSpec: configurationProjectSpecA. registrationB baselineProjectSpec: nil. self assert: (registrationA hasLoadConflicts: registrationB)! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 14:51'! testBasicNoLoadConflicts "5 combinations of loads with no load conflicts: No configs and baselines = configs = and no baselines configs = and baselines = configs = and no baseline loaded with a baseline to load config loaded, no config to load and no baseline loaded with a baseline to load " | registrationA registrationB baselineProjectSpecA configurationProjectSpecA baselineProjectSpecB configurationProjectSpecB | baselineProjectSpecA := self baselineProjectSpec. configurationProjectSpecA := self configurationProjectSpec. baselineProjectSpecB := self baselineProjectSpec name: 'NotDiscGolf'. configurationProjectSpecB := self configurationProjectSpec name: 'NotDiscGolf'. registrationA := MetacelloProjectRegistration new. registrationB := MetacelloProjectRegistration new. registrationA projectName: baselineProjectSpecA name. registrationB projectName: baselineProjectSpecA name. registrationA configurationProjectSpec: nil. registrationA baselineProjectSpec: baselineProjectSpecA. registrationB configurationProjectSpec: nil. registrationB baselineProjectSpec: baselineProjectSpecA. self deny: (registrationA hasLoadConflicts: registrationB). registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: nil. registrationB configurationProjectSpec: configurationProjectSpecA. registrationB baselineProjectSpec: nil. self deny: (registrationA hasLoadConflicts: registrationB). registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: baselineProjectSpecA. self deny: registrationA isValid. registrationB configurationProjectSpec: configurationProjectSpecA. registrationB baselineProjectSpec: baselineProjectSpecA. self deny: registrationB isValid. registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: nil. self assert: registrationA isValid. registrationB configurationProjectSpec: configurationProjectSpecA. registrationB baselineProjectSpec: baselineProjectSpecA. self deny: registrationB isValid. registrationA configurationProjectSpec: configurationProjectSpecA. registrationA baselineProjectSpec: nil. registrationB configurationProjectSpec: nil. registrationB baselineProjectSpec: baselineProjectSpecA. self deny: (registrationA hasLoadConflicts: registrationB)! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 14:53'! testBasicRegistration | registration projectSpec | projectSpec := self configurationProjectSpec. registration := projectSpec asProjectRegistration. self assert: registration isValid. self assert: registration = registration. self assert: registration hash = registration hash. projectSpec := self baselineProjectSpec. registration := projectSpec asProjectRegistration. self assert: registration isValid. self assert: registration = registration. self assert: registration hash = registration hash! ! !MetacelloProjectRegistrationTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 14:53'! testBasicValidRegistration | registration projectSpec | registration := MetacelloProjectRegistration new. self deny: registration isValid. registration projectName: 'DiscGolf'. self deny: registration isValid. registration configurationProjectSpec: nil. registration baselineProjectSpec: self baselineProjectSpec. self assert: registration isValid. registration configurationProjectSpec: self configurationProjectSpec. registration baselineProjectSpec: nil. self assert: registration isValid! ! !MetacelloReferenceTestCase methodsFor: 'testing' stamp: 'dkh 3/6/2012 19:34:54'! conditionResult: resultString "GemStone unconditionally prints Symbols with quotes, Squeak and Pharo do not" ^((((((resultString copyReplaceAll: '#preloadForAddOn' with: '#''preloadForAddOn''') copyReplaceAll: '#postloadForAddOn' with: '#''postloadForAddOn''') copyReplaceAll: '#baseline' with: '#''baseline''') copyReplaceAll: '#preloadForVersion' with: '#''preloadForVersion''') copyReplaceAll: '#postloadForVersion' with: '#''postloadForVersion''') copyReplaceAll: '#preloadForProject' with: '#''preloadForProject''') copyReplaceAll: '#postloadForProject' with: '#''postloadForProject'''! ! !MetacelloReferenceTestCase methodsFor: 'testing' stamp: 'dkh 3/6/2012 19:34:54'! expectedPrintString ^ 'spec blessing: #''baseline''. spec description: ''Descriptive comment''. spec preLoadDoIt: #''preloadForVersion''. spec postLoadDoIt: #''postloadForVersion''. spec author: ''dkh''. spec timestamp: ''10/7/2009 14:40''. spec repositories: [ spec repository: ''/opt/mc/repository''; repository: ''c:\pharo\myapp\repo\''; repository: ''dictionary://GlobalName''; repository: ''ftp://ftp.example.com/repo''; repository: ''http://www.example.com/ar''; repository: ''http://www.example.com/private'' username: ''foo'' password: ''bar''; repository: ''http://www.example.com/rr'' ]. spec project: ''UI Support'' with: [ spec className: ''ConfigurationOfUI''; versionString: ''1.0''; preLoadDoIt: #''preloadForProject''; postLoadDoIt: #''postloadForProject''; operator: #''~>''; loads: #(''UI-Core'' ); repository: ''http://www.example.com/r'' ]; project: ''UI Support'' overrides: [ spec className: ''ConfigurationOfUINew''; versionString: ''1.0''; operator: #''>=''; loads: #(''UI-Core'' ''UI-Tests'' ); repository: ''http://www.example.com/r'' username: ''foo'' password: ''bar'' ]; project: ''UI Tests'' copyFrom: ''UI Support'' with: [ spec className: ''ConfigurationOfUI''; versionString: ''1.0''; operator: #''~>''; loads: #(''UI-Core'' ''UI-Tests'' ); repository: ''http://www.example.com/r'' ]; project: ''UI Support'' with: ''1.0.1''; removeProject: ''UI Tests''; project: ''UI Multi'' with: [ spec className: ''ConfigurationOfMulti''; repository: ''http://www.example.com/r''; repository: ''http://www.example.com/s'' ]. spec package: ''Example-AddOn'' with: [ spec requires: #(''Example-Core'' ); includes: #(''Example-UI'' ); file: ''Example-AddOn-anon.3''; repositories: [ spec repository: ''http://www.example.com/yar''; repository: ''http://www.example.com/yas'' ]; preLoadDoIt: #''preloadForAddOn''; postLoadDoIt: #''postloadForAddOn''. ]; package: ''Example-AddOn'' overrides: [ spec requires: #(''Example-Core'' ''UI Support'' ); includes: #(''Example-UI'' ); supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''Example-AddOn-anon.7''; repository: ''http://www.example.com/or'' username: ''foo'' password: ''bar''; preLoadDoIt: #''preloadForAddOn''; postLoadDoIt: #''postloadForAddOn''. ]; package: ''Example-AddOn'' with: ''Example-AddOn-anon.5''; package: ''Example-Core''; package: ''Example-Tests'' with: [ spec requires: #(''Example-Core'' ). ]; package: ''Example-TestsUI'' with: [ spec requires: #(''Example-UI'' ). ]; package: ''Example-UI'' with: [ spec requires: #(''Example-AddOn'' ). ]; removePackage: ''Example-Tests''. spec group: ''default'' with: #(''Example-Core'' ''Example-AddOn'' ); group: ''default'' overrides: #(''Example-Core'' ''Example-Tests'' ); removeGroup: ''default''.'! ! !MetacelloReferenceTestCase methodsFor: 'testing' stamp: 'dkh 3/6/2012 19:34:54'! testReferenceConfig | spec map string expected | spec := (MetacelloReferenceConfig project version: '1.0-baseline') spec. map := spec packages map. string := self conditionResult: (map at: 'Example-AddOn') printString. expected := 'spec name: ''Example-AddOn''; requires: #(''Example-Core'' ''UI Support'' ); includes: #(''Example-UI'' ); supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''Example-AddOn-anon.5''; repository: ''http://www.example.com/or'' username: ''foo'' password: ''bar''; preLoadDoIt: #''preloadForAddOn''; postLoadDoIt: #''postloadForAddOn''.'. self assert: string = expected. string := (map at: 'Example-Core') printString. self assert: string = 'spec name: ''Example-Core'''. string := (map at: 'Example-TestsUI') printString. self assert: string = 'spec name: ''Example-TestsUI''; requires: #(''Example-UI'' ).'. string := (map at: 'UI Support') printString. self assert: string = 'spec name: ''UI Support''; projectReference: [ spec className: ''ConfigurationOfUINew''; versionString: ''1.0.1''; operator: #''>=''; loads: #(''UI-Core'' ''UI-Tests'' ); repository: ''http://www.example.com/r'' username: ''foo'' password: ''bar'' ].'. ! ! !MetacelloReferenceTestCase methodsFor: 'testing' stamp: 'dkh 3/6/2012 19:34:54'! testReferenceConfigPrintString | version string expected x y | version := MetacelloReferenceConfig project version: '1.0-baseline'. string := self conditionResult: version spec printString. expected := self expectedPrintString. 1 to: string size do: [: i | (i > expected size or: [ (string at: i) ~= (expected at: i) ]) ifTrue: [ x := string copyFrom: ((i- 25) max: 1) to: ((i + 25) min: string size). y := expected copyFrom: (((i- 25) max: 1) min: expected size) to: ((i + 25) min: expected size). (Array with: x with: y) "halt" ]]. self assert: string = expected! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 10:19:43.983'! baseline10: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: '/opt/mcexamples' ] ]! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 10:19:43.983'! baseline13: spec spec for: #'squeakCommon' do: [ spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'ftp://ftp.example.com/examples' ] ]! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 10:19:43.983'! baseline14: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'http://example.com/examples' ] ]! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'baselines' stamp: 'dkh 6/12/2012 10:19:43.983'! baseline15: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'dictionary://Metacello_Platform_Test_GlobalDictionary' ] ]! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'baselines' stamp: 'dkh 7/12/2013 07:03'! baseline16: spec spec for: #'common' do: [ spec package: 'Example-Core' with: [ spec includes: 'Example-AddOn'; file: 'Example-Core-anon.1'; repository: 'filetree://' , MCFileTreeFileUtils current default fullName , '/temp/repo' ] ] ! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'accessing' stamp: 'dkh 5/7/2013 19:11'! project "force new version as workaround for https://code.google.com/p/smalltalk-hub/issues/detail?id=21" | constructor project | "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: MetacelloNullRecordingMCSpecLoader new. ^project! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 10:19:43.983'! setUp super setUp. Smalltalk at: #'Metacello_Platform_Test_GlobalDictionary' put: (MCDictionaryRepository new description: 'dictionary://Metacello_Platform_Test_GlobalDictionary'; yourself)! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 10:19:43.983'! tearDown super tearDown. Smalltalk removeKey: #'Metacello_Platform_Test_GlobalDictionary' ifAbsent: [ ]! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 10:19:43.983'! testAsRepositorySpecFor | project testBlock | project := self project. testBlock := [ :pkg :expectedType1 :expectedType2 | | repoSpec1 repo repoSpec2 | repoSpec1 := pkg repositorySpecs first. self assert: repoSpec1 type = expectedType1. repo := repoSpec1 createRepository. repoSpec2 := repo asRepositorySpecFor: project. self assert: repoSpec2 type = expectedType2. expectedType1 = expectedType2 ifTrue: [ self assert: repoSpec1 description = repoSpec2 description ] ifFalse: [ "special case for standard directory type that defaults to MCServerDirectoryRepository" self assert: (repoSpec1 description copyFrom: 'server://' size + 1 to: repoSpec1 description size) = repoSpec2 description ] ]. testBlock value: ((project version: '1.0-baseline') packageNamed: 'Example-Core') value: 'directory' value: 'directory'. testBlock value: ((project version: '1.3-baseline') packageNamed: 'Example-Core') value: 'ftp' value: 'ftp'. testBlock value: ((project version: '1.4-baseline') packageNamed: 'Example-Core') value: 'http' value: 'http'. testBlock value: ((project version: '1.5-baseline') packageNamed: 'Example-Core') value: 'dictionary' value: 'dictionary'! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 10:19:43.983'! testDictionaryRepository | project pkg repoSpec repo | project := self project. pkg := (project version: '1.5-baseline') packageNamed: 'Example-Core'. repoSpec := pkg repositorySpecs first. self assert: repoSpec type = 'dictionary'. repo := repoSpec createRepository. self assert: repo class == MCDictionaryRepository. self assert: repo dictionary == (Smalltalk at: #'Metacello_Platform_Test_GlobalDictionary') dictionary! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 10:19:43.983'! testDirectoryRepository | project pkg repoSpec repo | project := self project. pkg := (project version: '1.0-baseline') packageNamed: 'Example-Core'. repoSpec := pkg repositorySpecs first. self assert: repoSpec type = 'directory'. repo := repoSpec createRepository. self assert: repo class == MCDirectoryRepository. self assert: repo description = '/opt/mcexamples'! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 7/12/2013 07:03'! testFileTreeRepository "must create repository against an existing directory" | project pkg repoSpec repo fileUtils workingDir tempDir repoDir | fileUtils := MCFileTreeFileUtils current. workingDir := fileUtils default. tempDir := fileUtils directoryFromPath: 'temp' relativeTo: workingDir. [ fileUtils ensureDirectoryExists: tempDir. repoDir := fileUtils directoryFromPath: 'repo' relativeTo: tempDir. fileUtils ensureDirectoryExists: repoDir. project := self project. pkg := (project version: '1.6-baseline') packageNamed: 'Example-Core'. repoSpec := pkg repositorySpecs first. self assert: repoSpec type = 'filetree'. repo := repoSpec createRepository. self assert: repo class == (Smalltalk at: #'MCFileTreeRepository' ifAbsent: [ ]). self assert: repo description = ('filetree://' , fileUtils default fullName , '/temp/repo') ] ensure: [ (fileUtils directoryExists: tempDir) ifTrue: [ fileUtils deleteAll: tempDir ] ] ! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 10:19:43.983'! testFtpRepository | project pkg repoSpec repo | project := self project. pkg := (project version: '1.3-baseline') packageNamed: 'Example-Core'. repoSpec := pkg repositorySpecs first. self assert: repoSpec type = 'ftp'. repo := repoSpec createRepository. self assert: repo class == MCFtpRepository. self assert: repo host = 'ftp.example.com'. self assert: repo directory = 'examples'! ! !MetacelloRepositorySqueakCommonTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 10:19:43.983'! testHttpRepository | project pkg repoSpec repo | project := self project. pkg := (project version: '1.4-baseline') packageNamed: 'Example-Core'. repoSpec := pkg repositorySpecs first. self assert: repoSpec type = 'http'. repo := repoSpec createRepository. self assert: repo class == MCHttpRepository. self assert: repo description = 'http://example.com/examples'! ! !MetacelloBaselineConfigurationTestCase commentStamp: 'dkh 5/4/2012 17:06' prior: 71966408! ##MetacelloBaselineConfigurationTestCase **MetacelloBaselineConfigurationTestCase** implements the test suite that validates the **MetacelloBaselineConstructor** behavior. ! !MetacelloBaselineConfigurationTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageList ^ #('BaselineOfExternalX' 'BaselineOfExternalXX' 'BaselineOfExternalXXX' 'BaselineOfGithubRefV' 'BaselineOfGithubRefVI' 'BaselineOfGithubRefIV' 'BaselineOfGithubRefIX' 'BaselineOfGithubRefXI' 'BaselineOfGithubRefXII' 'BaselineOfGithubRefXIII')! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. MCRepositoryGroup default removeRepository: MetacelloScriptingResource current externalRepository! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testExernalX "no #for:do: in spec" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfExternalX'; load. version := (Smalltalk at: #'BaselineOfExternalX') project version. expected := 'spec description: ''MetacelloScriptingResource>>externalBaselineX:''. spec package: ''External-CoreX''; package: ''External-TestsX'' with: [ spec requires: #(''External-CoreX'' ). ]. spec group: ''Core'' with: #(''External-CoreX'' ); group: ''default'' with: #(''Core'' ); group: ''Tests'' with: #(''External-TestsX'' ).'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testExernalXX "#for:do: in spec" | version expected repo constructor | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfExternalXX'; load. version := (Smalltalk at: #'BaselineOfExternalXX') project version. expected := 'spec description: ''MetacelloScriptingResource>>externalBaselineXX:''. spec package: ''External-CoreX''; package: ''External-TestsX'' with: [ spec requires: #(''External-CoreX'' ). ]. spec group: ''Core'' with: #(''External-CoreX'' ); group: ''default'' with: #(''Core'' ); group: ''Tests'' with: #(''External-TestsX'' ).'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testExernalXXXa "#for:do: in spec#custom attribute not defined" | version expected repo constructor project | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfExternalXXX'; load. project := MetacelloMCBaselineProject new projectAttributes: #(); yourself. version := (constructor := MetacelloBaselineConstructor on: (Smalltalk at: #'BaselineOfExternalXXX') new project: project) project version. expected := 'spec description: ''MetacelloScriptingResource>>externalBaselineXXX:''. spec package: ''External-CoreX''; package: ''External-TestsX'' with: [ spec requires: #(''External-CoreX'' ). ]. spec group: ''Core'' with: #(''External-CoreX'' ); group: ''default'' with: #(''Core'' ); group: ''Tests'' with: #(''External-TestsX'' ).'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testExernalXXXb "#for:do: in spec. #custom attribute defined" | version expected repo constructor project | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfExternalXXX'; load. project := MetacelloMCBaselineProject new projectAttributes: #(#'custom'); yourself. version := (constructor := MetacelloBaselineConstructor on: (Smalltalk at: #'BaselineOfExternalXXX') new project: project) project version. expected := 'spec description: ''MetacelloScriptingResource>>externalBaselineXXX:''. spec package: ''External-CoreX''; package: ''External-TestsX'' with: [ spec requires: #(''External-CoreX'' ). ]; package: ''External-UIX''. spec group: ''Core'' with: #(''External-CoreX'' ); group: ''default'' with: #(''Core'' ); group: ''Tests'' with: #(''External-TestsX'' ); group: ''UI'' with: #(''External-UIX'' ).'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/22/2012 18:19'! testGithubRefIV "project:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefIV'; load. version := (Smalltalk at: #'BaselineOfGithubRefIV') project version. expected := 'spec description: ''MetacelloScriptingResource>>configurationGithubReferenceX:''. spec project: ''External'' with: [ spec className: ''ConfigurationOfExternal''; versionString: ''0.9.0''; repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository'' ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/22/2012 18:17'! testGithubRefIX "project:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefIX'; load. version := (Smalltalk at: #'BaselineOfGithubRefIX') project version. expected := 'spec description: ''MetacelloScriptingResource>>configurationGithubReferenceIV:''. spec project: ''External'' with: [ spec className: ''ConfigurationOfExternal''; versionString: ''0.9.0''; repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository'' ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/22/2012 18:16'! testGithubRefV "configuration:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefV'; load. version := (Smalltalk at: #'BaselineOfGithubRefV') project version. expected := 'spec description: ''MetacelloScriptingResource>>configurationGithubReferenceXX:''. spec configuration: ''External'' with: [ spec versionString: ''0.9.0''; repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository'' ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 06/29/2013 12:26'! testGithubRefVI "configuration:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefVI'; load. version := (Smalltalk at: #'BaselineOfGithubRefVI') project version. expected := 'spec description: ''MetacelloScriptingResource>>configurationGithubReferenceXXX:''. spec configuration: ''External'' with: [ spec versionString: ''0.9.0''; repository: ''http://ss3.gemtalksystems.com/ss/external'' ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/22/2012 18:16'! testGithubRefXI "project:copyFrom:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefXI'; load. version := (Smalltalk at: #'BaselineOfGithubRefXI') project version. expected := 'spec description: ''MetacelloScriptingResource>>configurationGithubReferenceV:''. spec project: ''External'' with: [ spec className: ''ConfigurationOfExternal''; versionString: ''0.9.0''; loads: #(''Core'' ); repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository'' ]; project: ''External Tests'' copyFrom: ''External'' with: [ spec loads: #(''Tests'' ) ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/12/2012 15:41:23.319'! testGithubRefXII "baseline:with: and className:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefXII'; load. version := (Smalltalk at: #'BaselineOfGithubRefXII') project version. expected := 'spec description: ''MetacelloScriptingResource>>baselineGithubReferenceVI:''. spec baseline: ''External Core'' with: [ spec className: ''BaselineOfExternal''; loads: #(''Core'' ); repository: ''github://dalehenrich/external:1ac58502ade7814e1590f71d615cca434b1a4fd5/repository'' ]; baseline: ''External Tests'' with: [ spec className: ''BaselineOfExternal''; loads: #(''Tests'' ); repository: ''github://dalehenrich/external:1ac58502ade7814e1590f71d615cca434b1a4fd5/repository'' ].'. self assert: version versionSpec printString = expected! ! !MetacelloBaselineConfigurationTestCase methodsFor: 'tests project spec' stamp: 'dkh 6/12/2012 15:41:23.319'! testGithubRefXIII "baseline:with: and className: and project:copyFrom:with:" | version expected repo | repo := MetacelloScriptingResource current externalRepository. Gofer new repository: repo; package: 'BaselineOfGithubRefXIII'; load. version := (Smalltalk at: #'BaselineOfGithubRefXIII') project version. expected := 'spec description: ''MetacelloScriptingResource>>baselineGithubReferenceVII:''. spec baseline: ''External Core'' with: [ spec className: ''BaselineOfExternal''; loads: #(''Core'' ); repository: ''github://dalehenrich/external:1ac58502ade7814e1590f71d615cca434b1a4fd5/repository'' ]; project: ''External Tests'' copyFrom: ''External Core'' with: [ spec loads: #(''Tests'' ) ].'. self assert: version versionSpec printString = expected! ! !MetacelloConfigurationTestCase methodsFor: 'running' stamp: 'ChristopheDemarey 9/12/2013 22:12'! tearDownPackageList ^ #('ConfigurationOfInvalidConfigurations' 'ConfigurationOfExternal')! ! !MetacelloConfigurationTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. MCRepositoryGroup default removeRepository: MetacelloScriptingResource current externalRepository! ! !MetacelloConfigurationTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:56'! testInvalidConfigurations | project repo issues validationError x | repo := MetacelloScriptingResource current configurationRepository. Gofer new repository: repo; package: 'ConfigurationOfInvalidConfigurations'; load. project := (Smalltalk at: #'ConfigurationOfInvalidConfigurations') project. issues := MetacelloToolBox validateProject: project version: '1.0.0'. self assert: issues size == 1. validationError := issues at: 1. self assert: (validationError isKindOf: MetacelloValidationError). self assert: validationError reasonCode == #'incompleteProjectSpec'. self assert: validationError callSite == #'validateBaselineVersionSpec:'. issues := MetacelloToolBox validateProject: project version: '2.0.0'. self assert: issues size == 3. self assert: (x := issues collect: [ :each | each class ]) asArray = {MetacelloValidationCriticalWarning. MetacelloValidationError. MetacelloValidationCriticalWarning}. self assert: (x := issues collect: [ :each | each reasonCode ]) asArray = #(#'noVersionSpecified' #'cannotResolveVersion' #'missingRecommendedProjectSpecField'). self assert: (x := issues collect: [ :each | each callSite ]) asArray = #(#'validateVersionSpec:' #'validateVersionSpec:' #'validateBaselineVersionSpec:'). issues := MetacelloToolBox validateProject: project version: '3.0.0'. self assert: issues size == 1. validationError := issues at: 1. self assert: (validationError isKindOf: MetacelloValidationError). self assert: validationError reasonCode == #'incompleteProjectSpec'. self assert: validationError callSite == #'validateBaselineVersionSpec:'. ! ! !MetacelloCurrentVersionScriptTestCase commentStamp: 'dkh 6/7/2012 10:15' prior: 71966667! **MetacelloCurrentVersionScriptTestCase** takes the **MetacelloCurrentVersionTest** test cases and casts them use the scripting api! !MetacelloCurrentVersionScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositories super setUpRepositories. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: monticelloRepository. configurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'running' stamp: 'dkh 07/14/2013 11:31'! tearDownPackageList ^ #('GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau' 'MetacelloTestConfigurationOfFoo') , #('GeauxFoo' 'GeauxBar' 'GeauxFaux' 'GeauxBeau' 'MetacelloTestConfigurationOfFum' 'MetacelloTestConfigurationOfFoo' 'MetacelloTestConfigurationOfFeaux' 'MetacelloTestConfigurationOfProjectFie' 'MetacelloTestConfigurationOfProjectFoe' 'MetacelloTestConfigurationOfProjectFee' 'MetacelloTestConfigurationOfFan')! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. MCRepositoryGroup default removeRepository: monticelloRepository; removeRepository: configurationRepository! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 12:55'! testBleedingEdgeLocking | wc sawLock sawLockWarning | Metacello new project: 'Foo'; className: 'MetacelloTestConfigurationOfFoo'; version: #'bleedingEdge'; lock. self should: [ Metacello new project: 'Fan'; className: 'MetacelloTestConfigurationOfFan'; version: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo' ] raise: Warning. sawLockWarning := sawLock := false. Metacello new project: 'Fan'; className: 'MetacelloTestConfigurationOfFan'; version: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; onWarning: [ :ex | sawLockWarning := true. ex resume ]; onLock: [ :ex :existing :new | existing projectName = 'Foo' ifTrue: [ sawLock := true ]. ex pass ]; load: 'Foo'. self assert: sawLock. self assert: sawLockWarning. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.32'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 18:55'! testCompareCurrentVersion Transcript cr; show: 'STARTING SCRIPTING testCompareCurrentVersion'. Metacello new project: 'Feaux'; className: 'MetacelloTestConfigurationOfFeaux'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'GeauxFoo'. Transcript cr; show: 'GeauxFoo'. self verify: 'GeauxFoo' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. Transcript cr; show: 'MetacelloTestConfigurationOfFeaux'. self validateProjects: {{'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}. Metacello new project: 'Project Foe'; className: 'MetacelloTestConfigurationOfProjectFoe'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'ALL'. Transcript cr; show: 'GeauxFoo'. self verify: 'GeauxFoo' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. Transcript cr; show: 'GoferFoo'. self verify: 'GoferFoo' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. Transcript cr; show: 'GoferBar'. self verify: 'GoferBar' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. Transcript cr; show: 'MetacelloTestConfigurationOfFeaux'. self validateProjects: {{'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfProjectFoe'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}. Transcript cr; show: 'ENDING SCRIPTING testCompareCurrentVersion'. ! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:30'! testFeaux40Loaded Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfFum'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self verify: 'GeauxFoo' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self verify: 'GeauxBar' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self validateProjects: {{'MetacelloTestConfigurationOfFum'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFum'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}! ! !MetacelloCurrentVersionScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:30'! testFoe40LoadedFoo50Loaded Metacello new project: 'Foo'; className: 'MetacelloTestConfigurationOfFoo'; version: '5.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. self verify: 'GoferFoo' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self verify: 'GoferBar' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self verify: 'GoferFaux' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self verify: 'GoferBeau' loadedFrom: 'dictionary://Metacello_Gofer_Test_Repository'. self validateProjects: {{'MetacelloTestConfigurationOfFoo'. '5.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}! ! !MetacelloDetermineCurrentVersionForLoadScriptTest commentStamp: 'dkh 6/14/2012 14:55' prior: 71966897! **MetacelloDetermineCurrentVersionForLoadScriptTest** takes the **MetacelloDetermineCurrentVersionForLoadTest** test cases and casts them use the scripting api! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'running' stamp: 'dkh 6/14/2012 14:59'! setUpRepositories super setUpRepositories. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: monticelloRepository. configurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'running' stamp: 'dkh 6/14/2012 14:57'! tearDownPackageList ^ #('GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau' 'MetacelloTestConfigurationOfFoo') , #('MetacelloTestConfigurationOfFan' 'MetacelloTestConfigurationOfFoo')! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests classic' stamp: 'dkh 6/14/2012 16:37'! test001 | wc | Metacello classic project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Metacello classic project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.53'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 18:58'! test001new | wc | Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.53'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests classic' stamp: 'dkh 6/14/2012 19:03'! test002 | wc | Metacello classic project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Gofer new repository: monticelloRepository; version: 'GoferFaux-tg.33'; load. "The maual load of a package changes the currentVersion of the image, so GoferFaux not reloaded" Metacello classic project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.33'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 19:04'! test002new | wc | Metacello new project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Gofer new repository: monticelloRepository; version: 'GoferFaux-tg.33'; load. "The maual load of a package does not change the currentVersion recorded in the registry, so the net is no impact" Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34' "GoferFaux-tg.33 in classic"! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests classic' stamp: 'dkh 6/14/2012 16:45'! test003 | wc | Metacello classic project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Gofer new repository: monticelloRepository; version: 'GoferFaux-tg.35'; load. Metacello classic project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.35'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests' stamp: 'dkh 6/14/2012 19:07'! test003new | wc | Metacello new project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Gofer new repository: monticelloRepository; version: 'GoferFaux-tg.35'; load. "later version of pkg than in any configuration" Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.35' "no downgrade of mcz file"! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests classic' stamp: 'dkh 6/14/2012 16:48'! test004 | wc | Metacello classic project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). Metacello classic project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Far'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests' stamp: 'dkh 7/17/2012 11:15'! test004new | wc | Metacello new project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: #('GoferBar' 'GoferFaux'). Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; onConflict: [ :ex | ex disallow ]; load: 'Far'. wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.55'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.34'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests classic' stamp: 'dkh 07/19/2013 22:51'! testIssue112 | wc | Metacello classic project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. Metacello classic project: 'Foo'; version: '3.5'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBeau'). "A load of GoferBeau for version 3.5, should also load the correct package for GoferFaux (GoferFaux-tg.31)" wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.54'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. "this is the crux of Issue 112" self assert: wc ancestry ancestors first name = 'GoferFaux-tg.31'! ! !MetacelloDetermineCurrentVersionForLoadScriptTest methodsFor: 'tests' stamp: 'dkh 07/19/2013 22:51'! testIssue112new | wc | Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBar' 'GoferFaux'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar.branch-lr.1'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. self assert: wc ancestry ancestors first name = 'GoferFaux-tg.30'. self should: [ (GoferPackageReference name: 'GoferBeau') workingCopy ] raise: Error. Metacello new project: 'Foo'; version: '3.5'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: #('GoferBeau'). wc := (GoferPackageReference name: 'GoferBar') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBar-lr.1'. wc := (GoferPackageReference name: 'GoferBeau') workingCopy. self assert: wc ancestry ancestors first name = 'GoferBeau-dkh.54'. wc := (GoferPackageReference name: 'GoferFaux') workingCopy. "this is the crux of Issue 112" self assert: wc ancestry ancestors first name = 'GoferFaux-tg.31'! ! !MetacelloGoferBasedLoaderScriptTestCase commentStamp: 'dkh 6/7/2012 13:31' prior: 71967144! **MetacelloGoferBasedLoaderScriptTestCase** takes the **MetacelloGoferBasedLoaderTest** test cases and casts them use the scripting api! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositories super setUpRepositories. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: monticelloRepository. configurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown super tearDown. MetacelloConfigurationResource projectAttributes: nil! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageList ^ #('GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau' 'MetacelloTestConfigurationOfFoo' 'GeauxBar' 'GeauxBeau' 'MetacelloTestConfigurationOfFix' 'MetacelloTestConfigurationOfIssue77B' 'MetacelloTestConfigurationOfIssue77C' 'MetacelloTestConfigurationOfIssue77D' 'MetacelloTestConfigurationOfProjectLoop' 'MetacelloTestConfigurationOfProjectInfinite' 'MetacelloTestConfigurationOfProjectIssue95' 'MetacelloTestConfigurationOfProjectToolBox')! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. MCRepositoryGroup default removeRepository: monticelloRepository; removeRepository: configurationRepository! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:30'! testNestedLoad1 MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level3_2' #'level2_1'). Metacello new project: 'ToolBox'; className: 'MetacelloTestConfigurationOfProjectToolBox'; version: '1.3.3-baseline'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. self verify: 'GoferBar' version: 'GoferBar-jf.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2'. self verify: 'GeauxBeau' version: 'GeauxBeau-dkh.55'. self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verifyPackageNotLoaded: 'GoferFaux'. self validateProjects: {{'MetacelloTestConfigurationOfProjectToolBox'. '1.3.3-baseline'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:30'! testNestedLoad2 MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level3_2' #'level2_1'). Metacello new project: 'ToolBox'; className: 'MetacelloTestConfigurationOfProjectToolBox'; version: '1.3.2-baseline'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. self verify: 'GoferBeau' version: 'GoferBeau-dkh.25'. self verifyPackageNotLoaded: 'GeauxBar'. self verifyPackageNotLoaded: 'GeauxBeau'. self verifyPackageNotLoaded: 'GoferFoo'. self verifyPackageNotLoaded: 'GoferFaux'. self validateProjects: {{'MetacelloTestConfigurationOfProjectToolBox'. '1.3.2-baseline'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}! ! !MetacelloGoferBasedLoaderScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:31'! testNestedLoad3 MetacelloConfigurationResource projectAttributes: #(#'level1_1' #'level2_2' #'level2_1' #'level3_2'). Metacello new project: 'ToolBox'; className: 'MetacelloTestConfigurationOfProjectToolBox'; version: '1.3.2-baseline'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. self verify: 'GoferBeau' version: 'GoferBeau-dkh.55'. self verifyPackageNotLoaded: 'GeauxBar'. self verifyPackageNotLoaded: 'GeauxBeau'. self verifyPackageNotLoaded: 'GoferFoo'. self verifyPackageNotLoaded: 'GoferFaux'. self validateProjects: {{'MetacelloTestConfigurationOfProjectToolBox'. '1.3.2-baseline'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}}! ! !MetacelloRegistryLoadScriptHarness commentStamp: 'dkh 6/8/2012 13:03' prior: 71967362! MetacelloRegistryLoadScriptHarness tests are designed to 1. verfy that the registry is used to correctly supply versions under a variety of loading scenarios 2. ensure that the `classic` behavior does indeed load **exactly** the same code as the original configuration-based loads! !MetacelloClassicLoadScriptTestCase commentStamp: 'dkh 6/8/2012 13:01' prior: 71967727! MetacelloClassicLoadScriptTestCase is segregated because while the scripting API is used for some of these test cases ... parts of the system not normally used by the scripting api are triggered here ...! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassicFie35Feaux40FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FeauxLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassicFie35Foo35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FooFeuxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassicFie35Foo40FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FooFeuxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassicFie35Foo40FooLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 7/18/2012 20:05'! testClassicFie40Feaux35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockClassicFie4035FeauxFeauxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 6/12/2012 15:41:23.319'! testClassicFie40Foo35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockClassicFie35FooFeuxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'tests classic' stamp: 'dkh 7/18/2012 20:15'! testClassicFie40Foo35FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockClassicFie40Foo35FooLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie35Feaux40FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FeauxLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '4.0') load: 'Feaux'. self validateBlockOriginalFie40FeauxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie35Foo35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '3.5') load: 'Feaux'. self validateBlockOriginalFie35FooFeuxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie35Foo40FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '4.0') load: 'Feaux'. self validateBlockOriginalFie40FeauxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie35Foo40FooLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '4.0') load: 'Foo'. self validateBlockOriginalFie40FooLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie40Feaux35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '3.5') load: 'Feaux'. self validateBlockOriginalFie4035FeauxFeauxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie40Foo35FeauxLoad Metacello classic project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '3.5') load: 'Feaux'. self validateBlockOriginalFie4035FooFeuxLoad value! ! !MetacelloClassicLoadScriptTestCase methodsFor: 'test original' stamp: 'dkh 6/12/2012 15:41:23.319'! testOriginalFie40Foo35FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. ((Smalltalk at: #'MetacelloTestConfigurationOfProjectFie') project version: '3.5') load: 'Foo'. self validateBlockOriginalFie40FooLoad value! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositories super setUpRepositories. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: monticelloRepository. configurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageList ^ #('GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau' 'MetacelloTestConfigurationOfFoo' 'GeauxFoo' 'GeauxBar' 'GeauxFaux' 'GeauxBeau' 'MetacelloTestConfigurationOfFum' 'MetacelloTestConfigurationOfFoo' 'MetacelloTestConfigurationOfFeaux' 'MetacelloTestConfigurationOfProjectFie' 'MetacelloTestConfigurationOfProjectFoe' 'MetacelloTestConfigurationOfProjectFee')! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. MCRepositoryGroup default removeRepository: monticelloRepository; removeRepository: configurationRepository! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 7/18/2012 20:08'! validateBlockClassicFie35FooFeuxLoad ^ [ self validateBlockOriginalFie4035FooFeuxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 7/18/2012 20:05'! validateBlockClassicFie4035FeauxFeauxLoad ^ [ self validateOriginalBlockFie35FeauxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 7/18/2012 20:15'! validateBlockClassicFie40Foo35FooLoad ^ [ self validateBlockOriginalFie40FooLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/15/2012 05:32'! validateBlockFie35FeauxLoad ^ [ self validateOriginalBlockFie35FeauxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/15/2012 05:33'! validateBlockFie35FooFeuxLoad ^ [ self validateBlockOriginalFie35FooFeuxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:53'! validateBlockFie35FooLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.31'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.54'. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 7/18/2012 20:43'! validateBlockFie40Feaux35FieLoad ^ [ self validateBlockOriginalFie40FeauxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/15/2012 05:34'! validateBlockFie40FeauxLoad ^ [ self validateBlockOriginalFie40FeauxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 7/18/2012 21:00'! validateBlockFie40Foo35FieLoad ^ [ self validateBlockOriginalFie40FooLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:53'! validateBlockFie40FooFeux35FieLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.32'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.55'. self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2'. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '3.5'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:53'! validateBlockFie40FooFeuxLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.32'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.55'. self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2'. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/15/2012 05:36'! validateBlockFie40FooLoad ^ [ self validateBlockOriginalFie40FooLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFoo'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! validateBlockOriginalFie35FooFeuxLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.31'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.54'. self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2' ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/15/2012 05:36'! validateBlockOriginalFie4035FeauxFeauxLoad ^ [ self validateOriginalBlockFie35FeauxLoad value. self validateProjects: {{'MetacelloTestConfigurationOfProjectFie'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}. {'MetacelloTestConfigurationOfFeaux'. '4.0'. 'dictionary://Metacello_Configuration_Test_Repository'. nil. nil. nil}} ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! validateBlockOriginalFie4035FooFeuxLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.32'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.55'. self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2' ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! validateBlockOriginalFie40FeauxLoad ^ [ self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2' ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! validateBlockOriginalFie40FooLoad ^ [ self verify: 'GoferFoo' version: 'GoferFoo-lr.1'. self verify: 'GoferBar' version: 'GoferBar-lr.1'. self verify: 'GoferFaux' version: 'GoferFaux-tg.32'. self verify: 'GoferBeau' version: 'GoferBeau-dkh.55' ]! ! !MetacelloRegistryLoadScriptHarness methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! validateOriginalBlockFie35FeauxLoad ^ [ self verify: 'GeauxFoo' version: 'GeauxFoo-lr.1'. self verify: 'GeauxBar' version: 'GeauxBar.branch-lr.2' ]! ! !MetacelloRegistryLoadScriptTestCase commentStamp: 'dkh 6/8/2012 13:04' prior: 71968014! MetacelloRegistryLoadScriptTestCase has the test cases that exihibit the different load behavior (as expected) by the scripting api! !MetacelloRegistryLoadScriptTestCase methodsFor: 'test import' stamp: 'dkh 6/26/2012 16:38'! testFie25Loadb self should: [ Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '2.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: '1' ] raise: Error! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'test import' stamp: 'dkh 6/26/2012 16:39'! testFie25Loadc self should: [ Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '2.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'GoferBeau' ] raise: Error! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 15:55'! testFie35Feaux40FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FeauxLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testFie35FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FeauxLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testFie35Foo35FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie35FooFeuxLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 16:07'! testFie35Foo40FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FooFeuxLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 11:48'! testFie35Foo40FeauxLoadLockError Metacello new project: 'Foo'; className: 'MetacelloTestConfigurationOfFoo'; version: '3.5'; lock. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; onWarning: [ :ex | self assert: false "shouldn't trigger a Warning" ]; load: 'Foo'. self validateBlockFie35FooLoad value. self should: [ Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux' ] raise: Warning! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 11:52'! testFie35Foo40FeauxLoadLockNAllowEvenIfLockedUpgrade Metacello new project: 'Foo'; className: 'MetacelloTestConfigurationOfFoo'; version: '3.5'; lock. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; onLock: [ :ex | ex allow ]; load: 'Feaux'! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 11:36'! testFie35Foo40FeauxLoadLockNAllowUpgradeError Metacello new project: 'Foo'; className: 'MetacelloTestConfigurationOfFoo'; version: '3.5'; lock. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. self should: [ Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; onUpgrade: [ :ex | ex allow ]; load: 'Feaux' ] raise: Warning! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/21/2012 16:10'! testFie35Foo40FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testFie35FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie35FooLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 7/18/2012 20:43'! testFie40Feaux35FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40Feaux35FieLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testFie40FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FeauxLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 7/18/2012 20:48'! testFie40Foo35FeauxLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Feaux'. self validateBlockFie40FooFeux35FieLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 7/18/2012 21:00'! testFie40Foo35FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value. Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '3.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40Foo35FieLoad value! ! !MetacelloRegistryLoadScriptTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testFie40FooLoad Metacello new project: 'Fie'; className: 'MetacelloTestConfigurationOfProjectFie'; version: '4.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load: 'Foo'. self validateBlockFie40FooLoad value! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! defaultTimeout "I don't want no stkinkin' timeouts" ^60000! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! doSilently ^ true! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:31'! runCase | original | self doSilently ifFalse: [ ^ super runCase ]. original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 7/19/2012 11:44'! setUp super setUp. registry := MetacelloProjectRegistration registry. self setUpRepositories. self setUpRepositoryContents. MetacelloProjectRegistration resetRegistry! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositories ! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositoryContents ! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 7/19/2012 11:45'! tearDown super tearDown. self tearDownPackages. self tearDownRepositories. MetacelloProjectRegistration registry: registry! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageList ^ #()! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages | aGofer | aGofer := Gofer new. self tearDownPackageList do: [ :packageName | (self hasPackage: packageName) ifTrue: [ aGofer package: packageName ] ]. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]! ! !MetacelloScriptingStandardTestHarness methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories ! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 07/26/2013 14:38'! validateExpectedConfigurationClassName: expectedConfigurationClassName expectedConfigurationVersion: expectedConfigurationVersion expectedConfigurationRepository: expectedConfigurationRepository expectedBaselineClassName: expectedBaselineClassName expectedBaselineVersion: expectedBaselineVersion expectedBaselineRepository: expectedBaselineRepository Transcript cr; show: 'expectedConfigurationClassName: ' , expectedConfigurationClassName printString , ' expectedConfigurationVersion: ' , expectedConfigurationVersion printString , ' expectedConfigurationRepository: ' , expectedConfigurationRepository printString , ' expectedBaselineClassName: ' , expectedBaselineClassName printString , ' expectedBaselineVersion: ' , expectedBaselineVersion printString , ' expectedBaselineRepository: ' , expectedBaselineRepository printString. MetacelloProjectRegistration registry configurationRegistry at: expectedConfigurationClassName ifPresent: [ :existing | | spec x | spec := existing configurationProjectSpec. Transcript cr; show: 'configuration [1]'. self assert: (x := spec version versionString) = expectedConfigurationVersion. Transcript cr; show: 'configuration [2]'. self assert: (spec repositoryDescriptions includes: expectedConfigurationRepository). Transcript cr; show: 'configuration [3]' ] ifAbsent: [ Transcript cr; show: 'configuration [4]'. self assert: expectedConfigurationVersion == nil. Transcript cr; show: 'configuration [5]' ]. MetacelloProjectRegistration registry baselineRegistry at: expectedBaselineClassName ifPresent: [ :existing | | spec | spec := existing baselineProjectSpec. Transcript cr; show: 'baseline [1]'. self assert: spec versionString = expectedBaselineVersion. Transcript cr; show: 'baseline [2]'. self assert: (spec repositoryDescriptions includes: expectedBaselineRepository). Transcript cr; show: 'baseline [3]' ] ifAbsent: [ Transcript cr; show: 'baseline [4]'. self assert: expectedBaselineVersion == nil. Transcript cr; show: 'baseline [5]' ]! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 6/15/2012 05:26'! validateProjects: specArrays specArrays do: [ :array | self validateExpectedConfigurationClassName: (array at: 1) expectedConfigurationVersion: (array at: 2) expectedConfigurationRepository: (array at: 3) expectedBaselineClassName: (array at: 4) expectedBaselineVersion: (array at: 5) expectedBaselineRepository: (array at: 6) ]! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! verify: packageName loadedFrom: repositoryDescription | externalCoreWorkingCopy | externalCoreWorkingCopy := MCWorkingCopy allManagers detect: [ :wc | wc packageName = packageName ]. self assert: (externalCoreWorkingCopy repositoryGroup repositories includes: (MetacelloMCProject new repositorySpec description: repositoryDescription) createRepository)! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! verify: packageName version: fileName | externalCoreWorkingCopy x | externalCoreWorkingCopy := MCWorkingCopy allManagers detect: [ :wc | wc packageName = packageName ]. self assert: (x := externalCoreWorkingCopy ancestors first name) = fileName! ! !MetacelloScriptingStandardTestHarness methodsFor: 'utilities' stamp: 'dkh 6/12/2012 15:41:23.319'! verifyPackageNotLoaded: packageName self assert: (MCWorkingCopy allManagers detect: [ :wc | wc packageName = packageName ] ifNone: [ ]) == nil! ! !MetacelloScriptingTestCase commentStamp: 'dkh 5/5/2012 19:52' prior: 71968220! ##MetacelloScriptingTestCase **MetacelloScriptingTestCase** implements the test suite that validates the **Metacello** scripting API. ! !MetacelloBasicScriptingTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 14:39'! configurationRepositoryContents ^ #('ConfigurationOfExternalX-dkh.1' 'ConfigurationOfExternalXX-dkh.1' 'ConfigurationOfExternalXXX-dkh.1' 'ConfigurationOfExternalIV-dkh.1' 'MarianosImage-dkh.1')! ! !MetacelloBasicScriptingTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 14:39'! externalRepositoryContents ^ #('External-CoreX-dkh.1' 'BaselineOfExternalX-dkh.1' 'BaselineOfGithubRefXX-dkh.1' 'BaselineOfGithubRefIV-dkh.1' 'BaselineOfGithubRefV-dkh.1' 'BaselineOfGithubRefVI-dkh.1' 'BaselineOfGithubRefVII-dkh.1' 'BaselineOfGithubRefVIII-dkh.1' 'BaselineOfGithubRefIX-dkh.1' 'BaselineOfGithubRefXI-dkh.1' 'BaselineOfGithubRefXII-dkh.1' 'BaselineOfGithubRefXIII-dkh.1')! ! !MetacelloBasicScriptingTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 14:40'! setUpRepositoryContents super setUpRepositoryContents. self setUpRepositoryContents: self configurationRepositoryContents sourceRepo: MetacelloScriptingResource current configurationRepository targetRepo: (MCFileTreeRepository new directory: configurationDirectory). self setUpRepositoryContents: self externalRepositoryContents sourceRepo: MetacelloScriptingResource current externalRepository targetRepo: (MCFileTreeRepository new directory: externalDirectory). self setUpRepositoryContents: #('Sample-CoreX-dkh.1') sourceRepo: MetacelloScriptingResource current sampleRepository targetRepo: (MCFileTreeRepository new directory: sampleDirectory)! ! !MetacelloBasicScriptingTestCase methodsFor: 'running' stamp: 'dkh 07/26/2013 09:56'! tearDownPackageList ^ #('ConfigurationOfExternalX' 'ConfigurationOfExternalXX' 'ConfigurationOfExternalXXX' 'ConfigurationOfExternalIV' 'ConfigurationOfExternalIV' 'BaselineOfExternalX' 'BaselineOfGithubRefXX' 'BaselineOfGithubRefIV' 'BaselineOfGithubRefV' 'BaselineOfGithubRefVI' 'BaselineOfGithubRefVII' 'BaselineOfExternal' 'BaselineOfExternalX' 'External-CoreX' 'Sample-CoreX' 'ConfigurationOfMetacelloExample' 'GoferFoo' 'Sample-Core' 'Sample-Platform' 'Sample-Tests' 'External-Core' 'External-Tests' 'BaselineOfGithubRefVIII' 'BaselineOfGithubRefIX' 'MarianosImage' 'BaselineOfGithubRefXI' 'BaselineOfGithubRefXII' 'BaselineOfGithubRefXIII')! ! !MetacelloExternalScriptingTestCase methodsFor: 'running' stamp: 'dkh 7/21/2012 14:38'! setUpRepositoryContents super setUpRepositoryContents. Smalltalk at: #'Metacello_Config_Test_Repository' put: configurationRepository! ! !MetacelloExternalScriptingTestCase methodsFor: 'running' stamp: 'dkh 7/21/2012 14:39'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Config_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_XXX_Test_Repository' ifAbsent: [ ]! ! !MetacelloScriptingGetTestCase methodsFor: 'running' stamp: 'dkh 7/17/2012 07:18'! setUpRepositoryContents super setUpRepositoryContents. Smalltalk at: #'Metacello_Config_Test_Repository' put: configurationRepository! ! !MetacelloScriptingGetTestCase methodsFor: 'running' stamp: 'dkh 7/17/2012 07:36'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Config_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_XXX_Test_Repository' ifAbsent: [ ]! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 10:11'! testFileTreeGetBaseline | project versionSpec expected | project := Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; get. versionSpec := project version versionSpec. expected := 'spec description: ''MetacelloScriptingResource>>externalBaselineX:''. spec package: ''External-CoreX''; package: ''External-TestsX'' with: [ spec requires: #(''External-CoreX'' ). ]. spec group: ''Core'' with: #(''External-CoreX'' ); group: ''default'' with: #(''Core'' ); group: ''Tests'' with: #(''External-TestsX'' ).'. self assert: versionSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:42'! testFileTreeGetConfigurationBasicSpecIV "avoid resolving to BaselineOf .... use basicSpec" | project basicSpec expected | project := Metacello new configuration: 'ExternalIV'; repository: 'filetree://' , configurationDirectory fullName; get. basicSpec := (project version: '0.9.0') basicSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>baselineOfIV:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''ExternalX'' with: [ spec repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'. self assert: basicSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:42'! testFileTreeGetConfigurationBasicSpecX "avoid resolving to BaselineOf .... use basicSpec" | project basicSpec expected | project := Metacello new configuration: 'ExternalX'; repository: 'filetree://' , configurationDirectory fullName; get. basicSpec := (project version: '0.9.0') basicSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfX090:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''ExternalX'' with: [ spec repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'. self assert: basicSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:42'! testFileTreeGetConfigurationBasicSpecXX "avoid resolving to BaselineOf .... use basicSpec" | project basicSpec expected | project := Metacello new configuration: 'ExternalXX'; repository: 'filetree://' , configurationDirectory fullName; get. basicSpec := (project version: '0.9.0') basicSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfXX:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''External'' with: [ spec repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'' ].'. self assert: basicSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:43'! testFileTreeGetConfigurationBasicSpecXXX "avoid resolving to BaselineOf .... use basicSpec" | project basicSpec expected | [ project := Metacello new configuration: 'ExternalXXX'; repository: 'filetree://' , configurationDirectory fullName; get. basicSpec := (project version: '0.9.0') basicSpec ] on: MetacelloErrorInProjectConstructionNotification do: [ :ex | ex resume: true ]. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfXXX:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''External'' with: [ spec repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'' ].'. self assert: basicSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:43'! testFileTreeGetConfigurationVersionSpecIV "resolve to BaselineOf ... use spec or versionSpec" | project versionSpec expected | project := Metacello new configuration: 'ExternalIV'; repository: 'filetree://' , configurationDirectory fullName; get. versionSpec := (project version: '0.9.0') versionSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>baselineOfIV:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''ExternalX'' with: [ spec repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'. self assert: versionSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:43'! testFileTreeGetConfigurationVersionSpecX "resolve to BaselineOf ... use spec or versionSpec" | project versionSpec expected | project := Metacello new configuration: 'ExternalX'; repository: 'filetree://' , configurationDirectory fullName; get. versionSpec := (project version: '0.9.0') versionSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfX090:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''ExternalX'' with: [ spec repository: ''dictionary://Metacello_Configuration_Test_Repository'' ].'. self assert: versionSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:43'! testFileTreeGetConfigurationVersionSpecXX "resolve to BaselineOf ... use spec or versionSpec" | project versionSpec expected | project := Metacello new configuration: 'ExternalXX'; repository: 'filetree://' , configurationDirectory fullName; get. versionSpec := (project version: '0.9.0') versionSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfXX:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''External'' with: [ spec repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'' ].'. self assert: versionSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:43'! testFileTreeGetConfigurationVersionSpecXXX "resolve to BaselineOf ... use spec or versionSpec" | project versionSpec expected | project := Metacello new configuration: 'ExternalXXX'; repository: 'filetree://' , configurationDirectory fullName; get. versionSpec := (project version: '0.9.0') versionSpec. expected := 'spec blessing: #''development''. spec description: ''MetacelloScriptingResource>>versionOfXXX:''. spec author: ''dkh''. spec timestamp: ''5/4/2012 14:16''. spec baseline: ''External'' with: [ spec repository: ''github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'' ].'. self assert: versionSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 10:23'! testGetBaseline | projectSpec expected | Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; get. projectSpec := Metacello registry baseline: 'ExternalX'; list. expected := 'spec name: ''ExternalX''; versionString: ''baseline''; repository: ''filetree://' , externalDirectory fullName, '''.'. self assert: projectSpec printString = expected! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 15:37'! testGetNLoad [ Transcript cr; show: 'GetNLoad'. Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; get. Metacello registry baseline: 'ExternalX'; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternalX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName ] on: Warning do: [ :ex | Transcript cr; show: ex description. ex resume ]! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 07:38'! testGetRefresh "do load of 0.9.0, then `commit` new version and get ... should have ConfigurationOfExternalX-dkh.2" | projectSpec xxx | Smalltalk at: #'Metacello_XXX_Test_Repository' put: (xxx := MCDictionaryRepository new). self setUpRepositoryContents: #('ConfigurationOfExternalX-dkh.1') sourceRepo: configurationRepository targetRepo: xxx. Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_XXX_Test_Repository'; load. self verify: 'ConfigurationOfExternalX' version: 'ConfigurationOfExternalX-dkh.1'. self setUpRepositoryContents: #('ConfigurationOfExternalX-dkh.2') sourceRepo: configurationRepository targetRepo: xxx. Metacello image configuration: 'ExternalX'; get. self verify: 'ConfigurationOfExternalX' version: 'ConfigurationOfExternalX-dkh.2'! ! !MetacelloScriptingGetTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 07:27'! testLoadNGet "explicitly load ConfigurationOfExternalX-dkh.1 do load of 0.9.0, then get ... should have ConfigurationOfExternalX-dkh.2" | projectSpec | Gofer new version: 'ConfigurationOfExternalX-dkh.1'; repository: configurationRepository; load. Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_XXX_Test_Repository'; load. self verify: 'ConfigurationOfExternalX' version: 'ConfigurationOfExternalX-dkh.1'. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec repositoryDescriptions asArray = #('dictionary://Metacello_XXX_Test_Repository'). Metacello new configuration: 'ExternalX'; repository: 'dictionary://Metacello_Config_Test_Repository'; get. self verify: 'ConfigurationOfExternalX' version: 'ConfigurationOfExternalX-dkh.2'. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec repositoryDescriptions asArray = #('dictionary://Metacello_Config_Test_Repository')! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 05/10/2013 14:48'! setUpRepositoryContents | dict | super setUpRepositoryContents. Smalltalk at: #'Metacello_MczConfiguration_Test_Repository' put: (MCDictionaryRepository new dictionary: mczConfigurationRepository dictionary copy). dict := (Smalltalk at: #'Metacello_MczConfiguration_Test_Repository') dictionary. monticelloRepository dictionary keysAndValuesDo: [ :info :version | "Horrible hack...shoudl use #storeVersion: ... but this hack is too simple" dict at: info put: version ]! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/28/2013 10:41'! tearDownPackageList ^ super tearDownPackageList , #('GoferBar' 'GoferBeau' 'GoferFaux' 'BaselineOfGoo' 'ConfigurationOfGoo' 'ConfigurationOfProjectGoo' 'ConfigurationOfProjectSoo')! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/28/2013 10:44'! testBaselineThenConfigurationConflict "Correct behavior - load BaselineOfGoo indirectly through ConfigurationOfProjectGoo - load ConfigurationOfGoo indirectly through ConfigurationOfProjectSoo - create conflict, because parent configs not the same" | triggered | Metacello new configuration: 'ProjectGoo'; version: '1.1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. triggered := false. Metacello new configuration: 'ProjectSoo'; version: '1.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; onConflict: [ :ex | triggered := true. ex allow ]; load. self assert: triggered! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/28/2013 10:42'! testBaselineThenConfigurationCorrect "https://github.com/dalehenrich/metacello-work/issues/156" "Correct behavior - load BaselineOfGoo indirectly through ConfigurationOfProjectGoo - load ConfigurationOfGoo indirectly through ConfigurationOfProjectGoo - load without errors: same parent project" Metacello new configuration: 'ProjectGoo'; version: '1.1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '1.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/28/2013 10:34'! testConfigurationLoadingBaseline "https://github.com/dalehenrich/metacello-work/issues/156" "ConfigurationOfGoo 4.0.0 and 5.0.0 load the BaselineOfGoo ... this should be a valid seuquence with no errors." Metacello new configuration: 'Goo'; version: '3.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'Goo'; version: '4.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'Goo'; version: '5.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 05/11/2013 08:15'! testConfigurationThenBaselineMNU "https://github.com/dalehenrich/metacello-work/issues/156" "MNU for #compareEqual: - preload BaselineOfGoo package - load ConfigurationOfGoo indirectly through ConfigurationOfProjectGoo - attempt to load BaselineOfGoo indirectly through ConfigurationOfProjectGoo ...SHOULD LOAD WITHOUT ERRORS ... baseline trumps configuration, because it is expected to have a baseline loaded by a configuration" Gofer new repository: mczConfigurationRepository; package: 'ConfigurationOfProjectGoo'; package: 'ConfigurationOfGoo'; package: 'BaselineOfGoo'; load. Metacello new configuration: 'ProjectGoo'; version: '1.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '1.1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 05/11/2013 07:38'! testConfigurationThenBaselineNoPreload "https://github.com/dalehenrich/metacello-work/issues/156" "If you don't preload BaselineOfGoo package the MNU for compareEqual: doesn't happen? Yes, because the error is occuring while ensuring that the configuration/baseline is present in the image ... if the class isn't present we unconditionally load the configuration/baseline...so the following should load without error" Metacello new configuration: 'ProjectGoo'; version: '1.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '1.1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load! ! !MetacelloScriptingIssue156TestCase methodsFor: 'as yet unclassified' stamp: 'dkh 05/11/2013 08:55'! testIndirectConfigurationLoadingBaseline "https://github.com/dalehenrich/metacello-work/issues/156" "ConfigurationOfProjectGoo loads ConfigurationOfGoo 1.0.0, BaselineOfGoo 1.1.0, then ConfigurationOfGoo 4.0.0 (2.0.0) and 5.0.0 (3.0.0) both of which are configurations that load baselines" Metacello new configuration: 'ProjectGoo'; version: '1.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '1.1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '2.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load. Metacello new configuration: 'ProjectGoo'; version: '3.0.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; silently; load! ! !MetacelloScriptingLoadTestCase methodsFor: 'running' stamp: 'dkh 7/24/2012 20:07'! tearDownPackageList ^ super tearDownPackageList , #('ConfigurationOfIssue84' 'ConfigurationOfNestedIssue84')! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 07/24/2012 04:21'! testDefaultRepository | projectSpec | Metacello new configuration: 'Sample'; lock. projectSpec := Metacello registry configuration: 'Sample'; list. self assert: projectSpec repositoryDescriptions asArray = {(MetacelloScriptEngine defaultRepositoryDescription)}! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 10:03'! testDefaultVersion | projectSpec | Metacello new configuration: 'ExternalX'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = MetacelloScriptEngine defaultVersionString! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/24/2012 20:50'! testIssue84 | loadDirective loaded | Gofer new repository: (Smalltalk at: #'Metacello_Config_Test_Repository'); version: 'ConfigurationOfNestedIssue84-dkh.1'; load. loadDirective := Metacello new configuration: 'Issue84'; version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. loaded := false. loadDirective packageDirectivesDo: [ :packageDirective | packageDirective packageName = 'ConfigurationOfNestedIssue84' ifTrue: [ loaded := true ] ]. self deny: loaded. loadDirective := Metacello classic configuration: 'Issue84'; version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. loaded := false. loadDirective packageDirectivesDo: [ :packageDirective | packageDirective packageName = 'ConfigurationOfNestedIssue84' ifTrue: [ loaded := true ] ]. self assert: loaded! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/24/2012 22:14'! testIssue87 Metacello new configuration: 'ExternalXX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. self should: [ Metacello image baseline: 'External'; get ] raise: MetacelloScriptGitHubDownloadNotification! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/21/2012 14:42'! testStableLoadA | projectSpec | Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = #'stable'! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/21/2012 14:43'! testStableLoadB | projectSpec | Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = #'stable'. Metacello image configuration: 'ExternalX'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = #'stable'! ! !MetacelloScriptingLoadTestCase methodsFor: 'tests' stamp: 'dkh 7/21/2012 15:01'! testStableLoadC | projectSpec | Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = #'stable'. Metacello image configuration: 'ExternalX'; version: '0.9.1'; load. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec versionString = '0.9.1'! ! !MetacelloScriptingLockTestCase methodsFor: 'running' stamp: 'dkh 7/20/2012 16:37'! tearDownPackageList ^ super tearDownPackageList , #('ConfigurationOfLockConfigurations')! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 11:22'! testBasicLock | projectSpec | Metacello new configuration: 'ExternalX'; version: '0.9.0'; lock. self assert: (Metacello image configuration: 'ExternalX'; list) isEmpty. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec registration locked! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:22'! testBasicLockNLoad Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:22'! testBasicLockNLockedProjectBreak1 Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onLock: [ :ex | ex allow "break lock" ]; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:22'! testBasicLockNLockedProjectEnforce1 | sawLockWarning | Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. sawLockWarning := false. Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onWarning: [ :ex | sawLockWarning := true. ex resume ]; load. self assert: sawLockWarning. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testBasicLockNLockedProjectEnforce2 | sawLock | Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. sawLock := false. Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onLock: [ :ex | sawLock := true. ex pass ]; onUpgrade: [ :ex :existing :new | existing baseName = 'ExternalX' ifTrue: [ ex disallow "lock not triggered" ]. ex pass ]; load. self deny: sawLock. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testBasicLockNLockedProjectEnforce3 | sawLock | Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. sawLock := false. Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onUpgrade: [ :ex :existing :new | ex allow "trigger lock" ]; onLock: [ :ex | sawLock := true. ex pass ]; onWarning: [ :ex | ex resume ]; load. self assert: sawLock. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testBasicLockNLockedProjectEnforce4 Metacello new configuration: 'ExternalX'; version: '0.9.1'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello new configuration: 'LockConfigurations'; version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onDowngrade: [ :ex | ex allow "trigger lock" ]; onLock: [ :ex :existing :new | existing baseName = 'ExternalX' ifTrue: [ "use locked version" ex disallow ]. ex pass ]; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 12:04'! testBasicLockNLockedProjectWarning1 Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. self should: [ Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load ] raise: Warning! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 12:04'! testBasicLockNLockedProjectWarning2 Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello new configuration: 'LockConfigurations'; version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. self should: [ Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load ] raise: Warning! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testBasicLockNUnlockNload Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; unlock. Metacello registry configuration: 'ExternalX'; version: '0.9.1'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:22'! testBasicLockedLoad Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. Metacello registry configuration: 'ExternalX'; version: '0.9.1'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 7/17/2012 12:34'! testBasicUnlock | projectSpec | Metacello new configuration: 'ExternalX'; version: '0.9.0'; lock. self assert: (Metacello image configuration: 'ExternalX'; list) isEmpty. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec registration locked. Metacello registry configuration: 'ExternalX'; unlock. projectSpec := Metacello registry configuration: 'ExternalX'; list. self deny: projectSpec registration locked! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/13/2013 11:45'! testSymbolicLock | projectSpec | Metacello new configuration: 'ExternalX'; version: #'stable'; lock. self assert: (Metacello image configuration: 'ExternalX'; list) isEmpty. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec registration locked! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testSymbolicLockNLoad Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testSymbolicLockNLockedProjectEnforce1 | sawLockWarning | Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. sawLockWarning := false. Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; onWarning: [ :ex | sawLockWarning := true. ex resume ]; load. self assert: sawLockWarning. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 12:05'! testSymbolicLockNLockedProjectWarning1 Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. self should: [ Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load ] raise: Warning! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/25/2013 12:06'! testSymbolicLockNLockedProjectWarning2 Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello new configuration: 'LockConfigurations'; version: '1.0.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load. self should: [ Metacello new configuration: 'LockConfigurations'; version: '1.1.0'; repository: 'dictionary://Metacello_Config_Test_Repository'; load ] raise: Warning! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:23'! testSymbolicLockNUnlockNload Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; unlock. Metacello registry configuration: 'ExternalX'; version: '0.9.1'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 09:48'! testSymbolicLockedLoad Metacello new configuration: 'ExternalX'; version: #'stable'; repository: 'dictionary://Metacello_Config_Test_Repository'; lock. Metacello registry configuration: 'ExternalX'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. Metacello registry configuration: 'ExternalX'; version: '0.9.1'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Config_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingLockTestCase methodsFor: 'tests' stamp: 'dkh 07/13/2013 12:00'! testSymbolicUnlock | projectSpec | Metacello new configuration: 'ExternalX'; version: #'stable'; lock. self assert: (Metacello image configuration: 'ExternalX'; list) isEmpty. projectSpec := Metacello registry configuration: 'ExternalX'; list. self assert: projectSpec registration locked. Metacello registry configuration: 'ExternalX'; unlock. projectSpec := Metacello registry configuration: 'ExternalX'; list. self deny: projectSpec registration locked! ! !MetacelloScriptingEnsureLoadedTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 07:56'! tearDownPackageList ^ super tearDownPackageList , #('ConfigurationOfExternal' 'ConfigurationOfExternalRef')! ! !MetacelloScriptingEnsureLoadedTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 13:47'! testBasicDefaultVersion "https://github.com/dalehenrich/metacello-work/issues/198" | registration spec | Gofer new version: 'ConfigurationOfExternal-dkh.1'; repository: externalRepository; load. Metacello new configuration: 'ExternalRef'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; get. registration := Metacello registrations detect: [ :each | each projectName = 'ExternalRef' ]. spec := registration projectSpec. self assert: spec versionString = #'stable'! ! !MetacelloScriptingEnsureLoadedTestCase methodsFor: 'running' stamp: 'dkh 09/23/2013 21:29'! testDefaultVersionUpgrade "https://github.com/dalehenrich/metacello-work/issues/198" | registration spec | Transcript cr; show: 'MetacelloScriptingEnsureLoadedTestCase>>testDefaultVersionUpgrade [0]'. Gofer new version: 'ConfigurationOfExternal-dkh.1'; repository: externalRepository; load. Metacello new configuration: 'ExternalRef'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; get. Metacello new configuration: 'ExternalRef'; version: '0.9.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. registration := Metacello registrations detect: [ :each | each projectName = 'ExternalRef' ]. spec := registration projectSpec. Transcript cr; show: 'MetacelloScriptingEnsureLoadedTestCase>>testDefaultVersionUpgrade [1]: ' , spec versionString printString. self assert: spec versionString = '0.9.0'! ! !MetacelloScriptingEnsureLoadedTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 13:47'! testEnsureLoad "https://github.com/dalehenrich/metacello-work/issues/199" "preload ConfigurationOfExternal-dkh.1 and force ensureLoad ConfigurationOfExternal-dkh.2 which has version 0.9.1" Gofer new version: 'ConfigurationOfExternal-dkh.1'; repository: externalRepository; load. Metacello new configuration: 'ExternalRef'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; get. Metacello new configuration: 'ExternalRef'; version: '0.9.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load. Metacello new configuration: 'ExternalRef'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; load! ! !MetacelloScriptingErrorsTestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! handleExpectedValidationFailure: aBlock self handleExpectedValidationFailure: aBlock reasonCode: #'incompleteProjectSpec'! ! !MetacelloScriptingErrorsTestCase methodsFor: 'private' stamp: 'dkh 7/23/2012 11:54'! handleExpectedValidationFailure: aBlock reasonCode: reasonCode | issues validationError | issues := #(). aBlock on: MetacelloValidationFailure do: [ :ex | issues := ex issues ]. self assert: issues size == 1. validationError := issues at: 1. self assert: validationError reasonCode == reasonCode. self assert: validationError callSite == #'validateForScriptLoad:withDefaultVersionString:withDefaultRepositoryDecription:'! ! !MetacelloScriptingErrorsTestCase methodsFor: 'tests configurations' stamp: 'dkh 7/12/2012 16:57'! testFileTreeGetBaseline self should: [ Metacello new configuration: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; get ] raise: MetacelloPackageSpecResolutionError! ! !MetacelloScriptingErrorsTestCase methodsFor: 'tests configurations' stamp: 'dkh 6/12/2012 15:41:23.319'! testFileTreeGetConfigurationBasicSpecIV self should: [ Metacello new baseline: 'ExternalIV'; repository: 'filetree://' , configurationDirectory fullName; get ] raise: MetacelloPackageSpecResolutionError! ! !MetacelloScriptingErrorsTestCase methodsFor: 'tests scripts' stamp: 'dkh 6/12/2012 15:41:23.319'! testMissingClassName self handleExpectedValidationFailure: [ Metacello new project: 'ExternalX'; version: '0.9'; repository: 'filetree://' , configurationDirectory fullName; silently; load ]! ! !MetacelloScriptingErrorsTestCase methodsFor: 'tests scripts' stamp: 'dkh 7/12/2012 16:27'! testMissingProject self should: [ Metacello new className: 'ConfigurationExternalX'; version: '0.9'; repository: 'filetree://' , configurationDirectory fullName; silently; load ] raise: Error! ! !MetacelloScriptingErrorsTestCase methodsFor: 'tests scripts' stamp: 'dkh 6/12/2012 15:41:23.319'! testPresentVersion3 self handleExpectedValidationFailure: [ Metacello new baseline: 'ExternalX'; version: '1.0'; repository: 'filetree://' , externalDirectory fullName; silently; load ] reasonCode: #'invalidVersionString'! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'running' stamp: 'dkh 7/19/2012 10:26'! setUp super setUp. (Metacello registry project: [ :spec | spec className beginsWith: 'MetacelloTest' ]; list) do: [ :spec | spec unregisterProject ]! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'running' stamp: 'dkh 7/23/2012 16:31'! setUpRepositories super setUpRepositories. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: monticelloRepository. configurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository. Smalltalk at: #'Metacello_Cache_Test_Repository' put: MCDictionaryRepository new! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'running' stamp: 'dkh 7/19/2012 10:26'! tearDown super tearDown. (Metacello registry project: [ :spec | spec className beginsWith: 'MetacelloTest' ]; list) do: [ :spec | spec unregisterProject ]! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'running' stamp: 'dkh 7/23/2012 15:14'! tearDownPackageList ^ #('GoferFoo' 'GoferBar' 'GoferFaux' 'GoferBeau' 'MetacelloTestConfigurationOfFoo' 'GeauxFoo' 'GeauxBar' 'GeauxFaux' 'GeauxBeau' 'MetacelloTestConfigurationOfFum' 'MetacelloTestConfigurationOfFoo' 'MetacelloTestConfigurationOfFan' 'MetacelloTestConfigurationOfFeaux' 'MetacelloTestConfigurationOfProjectFie' 'MetacelloTestConfigurationOfProjectFoe' 'MetacelloTestConfigurationOfProjectFee' 'MetacelloTestConfigurationOfProjectFum')! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'running' stamp: 'dkh 7/23/2012 19:46'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Cache_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_NewCache_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_OverrideCache_Test_Repository' ifAbsent: [ ]. MCRepositoryGroup default removeRepository: monticelloRepository; removeRepository: configurationRepository! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:00'! testBasicFetch001 | result expected | result := (Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.0') fetch: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: 'Foo') printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFan') project version: '2.0') fetch: #('Foo')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:00'! testBasicFetch002 | result expected | result := (Metacello new project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '5.0') fetch: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: 'Foo') printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFan') project version: '2.0') fetch: #('Foo')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:01'! testBasicFetch003 | result expected | result := (Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.0') fetch: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Foo'; version: '3.5'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch: #('GoferBeau')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.5') fetch: #('GoferBeau')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:02'! testBasicFetch004a | result expected version | result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch) printString. version := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFum') project version: '1.0'. expected := version fetch loadDirective printString. result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch) printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:02'! testBasicFetch004b | result expected version | Gofer new repository: (Smalltalk at: #'Metacello_Configuration_Test_Repository'); package: 'MetacelloTestConfigurationOfProjectFum'; load. version := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFum') project version: '1.0'. expected := version fetch loadDirective printString. result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch) printString. expected := version fetch loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 15:15'! testBasicRecord001 | result expected | result := (Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.0') record: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: 'Foo') printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFan') project version: '2.0') record: #('Foo')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 15:16'! testBasicRecord002 | result expected | result := (Metacello new project: 'Foo'; version: '5.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '5.0') record: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Fan'; version: '2.0'; className: 'MetacelloTestConfigurationOfFan'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: 'Foo') printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFan') project version: '2.0') record: #('Foo')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 15:18'! testBasicRecord003 | result expected | result := (Metacello new project: 'Foo'; version: '3.0'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: #('GoferBar' 'GoferFaux')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.0') record: #('GoferBar' 'GoferFaux')) loadDirective printString. self assert: expected = result. result := (Metacello new project: 'Foo'; version: '3.5'; className: 'MetacelloTestConfigurationOfFoo'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record: #('GoferBeau')) printString. expected := (((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '3.5') record: #('GoferBeau')) loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 15:29'! testBasicRecord004a | result expected version | result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record) printString. version := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFum') project version: '1.0'. expected := version record loadDirective printString. result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record) printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 15:28'! testBasicRecord004b | result expected version | Gofer new repository: (Smalltalk at: #'Metacello_Configuration_Test_Repository'); package: 'MetacelloTestConfigurationOfProjectFum'; load. version := (Smalltalk at: #'MetacelloTestConfigurationOfProjectFum') project version: '1.0'. expected := version record loadDirective printString. result := (Metacello classic project: 'Fum'; version: '1.0'; className: 'MetacelloTestConfigurationOfProjectFum'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record) printString. expected := version record loadDirective printString. self assert: expected = result! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:44'! testFetchCacheRepository | cacheRepository | Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfProjectFum'; version: '1.0'; cacheRepository: 'dictionary://Metacello_Cache_Test_Repository'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch. cacheRepository := Smalltalk at: #'Metacello_Cache_Test_Repository'. #('GoferBar-lr.1' 'GoferBeau-dkh.55' 'GoferFaux-tg.34' 'GoferFoo-lr.2' 'MetacelloTestConfigurationOfFoo-dkh.1' 'MetacelloTestConfigurationOfProjectFie-dkh.1') do: [ :file | self assert: (cacheRepository includesVersionNamed: file) ]! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:02'! testFetchIssue83 Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfProjectFum'; version: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch. self assert: (Metacello registry project: [ :spec | spec className beginsWith: 'MetacelloTest' ]; list) isEmpty! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 19:58'! testFetchRepositoryOverrides | cacheRepository newCacheRepository | Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfProjectFum'; version: '1.0'; cacheRepository: 'dictionary://Metacello_Cache_Test_Repository'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch. cacheRepository := Smalltalk at: #'Metacello_Cache_Test_Repository'. #('GoferBar-lr.1' 'GoferBeau-dkh.55' 'GoferFaux-tg.34' 'GoferFoo-lr.2' 'MetacelloTestConfigurationOfFoo-dkh.1' 'MetacelloTestConfigurationOfProjectFie-dkh.1') do: [ :file | self assert: (cacheRepository includesVersionNamed: file) ]. Smalltalk at: #'Metacello_OverrideCache_Test_Repository' put: (Smalltalk at: #'Metacello_Cache_Test_Repository'). Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Cache_Test_Repository' ifAbsent: [ ]. Gofer new package: 'MetacelloTestConfigurationOfFoo'; package: 'MetacelloTestConfigurationOfProjectFie'; unload. Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfProjectFum'; version: '1.0'; cacheRepository: 'dictionary://Metacello_NewCache_Test_Repository'; repositoryOverrides: #('dictionary://Metacello_OverrideCache_Test_Repository'); repository: 'dictionary://Metacello_Configuration_Test_Repository'; fetch. newCacheRepository := Smalltalk at: #'Metacello_NewCache_Test_Repository'. #('GoferBar-lr.1' 'GoferBeau-dkh.55' 'GoferFaux-tg.34' 'GoferFoo-lr.2' 'MetacelloTestConfigurationOfFoo-dkh.1' 'MetacelloTestConfigurationOfProjectFie-dkh.1') do: [ :file | self assert: (newCacheRepository includesVersionNamed: file) ]! ! !MetacelloScriptingFetchRecordTestCase methodsFor: 'tests' stamp: 'dkh 7/23/2012 16:03'! testRecordIssue83 Metacello new project: 'Fum'; className: 'MetacelloTestConfigurationOfProjectFum'; version: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; record. self assert: (Metacello registry project: [ :spec | spec className beginsWith: 'MetacelloTest' ]; list) isEmpty! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'running' stamp: 'dkh 7/16/2012 11:59'! setUpRepositories super setUpRepositories. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository. Smalltalk at: #'Metacello_External_Test_Repository' put: externalRepository! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 21:14'! tearDownPackageList ^ super tearDownPackageList , #('ConfigurationOfIssue32' 'BaselineOfIssue32' 'ConfigurationOfExternal')! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'running' stamp: 'dkh 7/16/2012 11:59'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_External_Test_Repository' ifAbsent: [ ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'get tests' stamp: 'dkh 7/16/2012 16:59'! testGetBlockFilter | result expected | expected := #('GithubRefXII' 'GithubRefVIII' 'GithubRefXX' 'ExternalX' 'GithubRefIX' 'GithubRefV' 'GithubRefVII' 'GithubRefIV' 'GithubRefXIII' 'GithubRefVI' 'GithubRefXI'). result := Metacello new baseline: [ :projectSpec | true ]; repository: 'filetree://' , externalDirectory fullName; silently; get. self assert: expected size = result size. result do: [ :project | self verify: project configuration class name asString loadedFrom: 'filetree://' , externalDirectory fullName ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'get tests' stamp: 'dkh 7/16/2012 16:57'! testGetCollectionFilter | expected result | expected := #('GithubRefXII' 'GithubRefVIII' 'GithubRefXX' 'ExternalX' 'GithubRefIX' 'GithubRefV'). result := Metacello new baseline: expected; repository: 'filetree://' , externalDirectory fullName; silently; get. self assert: expected size = result size. result do: [ :project | self verify: project configuration class name asString loadedFrom: 'filetree://' , externalDirectory fullName ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'list tests' stamp: 'dkh 7/16/2012 16:46'! testListBlockFilter | result expected | expected := #('GithubRefXII' 'GithubRefVIII' 'GithubRefXX' 'ExternalX' 'GithubRefIX' 'GithubRefV' 'GithubRefVII' 'GithubRefIV' 'GithubRefXIII' 'GithubRefVI' 'GithubRefXI'). result := (Metacello new baseline: [ :projectSpec | true ]; repository: 'filetree://' , externalDirectory fullName; silently; list) collect: [ :each | each name ]. self assert: result size = expected size. expected do: [ :name | self assert: (result includes: name) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'list tests' stamp: 'dkh 7/16/2012 16:46'! testListCollectionFilter | result expected | expected := #('GithubRefXII' 'GithubRefVIII' 'GithubRefXX' 'ExternalX' 'GithubRefIX' 'GithubRefV'). result := (Metacello new baseline: expected; repository: 'filetree://' , externalDirectory fullName; silently; list) collect: [ :each | each name ]. self assert: result size = expected size. expected do: [ :name | self assert: (result includes: name) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 09:59'! testListFilters Metacello new baseline: 'GithubRefIV'; repository: 'filetree://' , externalDirectory fullName; silently; load. Metacello new configuration: 'Issue32'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; get. Metacello new baseline: 'Issue32'; repository: 'dictionary://Metacello_External_Test_Repository'; silently; get. self validateImageNameFilter; validateImageCollectionFilter; validateImageBlockFilter. self validateRegistryNameFilter; validateRegistryCollectionFilter; validateRegistryBlockFilter! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'load tests' stamp: 'dkh 7/16/2012 15:58'! testLoadBlockFilter Metacello new baseline: [ :projectSpec | projectSpec name = 'GithubRefIV' ]; repository: 'filetree://' , externalDirectory fullName; silently; load. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'load tests' stamp: 'dkh 7/16/2012 15:57'! testLoadCollectionFilter Metacello new baseline: #('GithubRefIV'); repository: 'filetree://' , externalDirectory fullName; silently; load. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'list tests' stamp: 'dkh 07/25/2013 16:00'! testLockedFilter | validationBlock | validationBlock := [ :expected | | result | result := Metacello registry locked collect: [ :each | each name ]. self assert: result size = expected size. expected do: [ :name | self assert: (result includes: name) ] ]. validationBlock value: #(). Metacello new baseline: #('GithubRefIV'); repository: 'filetree://' , externalDirectory fullName; lock. Metacello new configuration: 'Issue32'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; lock. validationBlock value: #('GithubRefIV' 'Issue32')! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 09:56'! validateImageBlockFilter | baselineList configurationList projectList | baselineList := Metacello image baseline: [ :spec | true ]; list. self assert: baselineList size = 1. baselineList do: [ :spec | self assert: (#('BaselineOfGithubRefIV') includes: spec className) ]. configurationList := Metacello image configuration: [ :spec | true ]; list. self assert: configurationList size = 1. configurationList do: [ :spec | self assert: (#('ConfigurationOfExternal') includes: spec className) ]. projectList := Metacello image project: [ :spec | true ]; list. self assert: projectList size = 2. projectList do: [ :spec | self assert: (#('ConfigurationOfExternal' 'BaselineOfGithubRefIV') includes: spec className) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 10:23'! validateImageCollectionFilter | baselineList configurationList projectList | baselineList := Metacello image baseline: #('Issue32' 'External' 'GithubRefIV'); list. self assert: baselineList size = 1. baselineList do: [ :spec | self assert: (#('BaselineOfGithubRefIV') includes: spec className) ]. configurationList := Metacello image configuration: #('Issue32' 'External' 'GithubRefIV'); list. self assert: configurationList size = 1. configurationList do: [ :spec | self assert: (#('ConfigurationOfExternal') includes: spec className) ]. projectList := Metacello image project: #('Issue32' 'External' 'GithubRefIV'); list. self assert: projectList size = 2. projectList do: [ :spec | self assert: (#('ConfigurationOfExternal' 'BaselineOfGithubRefIV') includes: spec className) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 10:22'! validateImageNameFilter | spec | spec := Metacello image baseline: 'GithubRefIV'; list. self assert: 'BaselineOfGithubRefIV' = spec className. spec := Metacello image configuration: 'External'; list. self assert: 'ConfigurationOfExternal' = spec className. spec := Metacello image project: 'External'; list. self assert: 'ConfigurationOfExternal' = spec className! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 10:15'! validateRegistryBlockFilter | baselineList configurationList projectList | baselineList := Metacello registry baseline: [ :spec | true ]; list. self assert: baselineList size = 1. baselineList do: [ :spec | self assert: (#('BaselineOfGithubRefIV') includes: spec className) ]. configurationList := Metacello registry configuration: [ :spec | true ]; list. self assert: configurationList size = 2. configurationList do: [ :spec | self assert: (#('ConfigurationOfExternal' 'ConfigurationOfIssue32') includes: spec className) ]. projectList := Metacello registry project: [ :spec | true ]; list. self assert: projectList size = 3. projectList do: [ :spec | self assert: (#('BaselineOfGithubRefIV' 'ConfigurationOfIssue32' 'ConfigurationOfExternal') includes: spec className) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 10:24'! validateRegistryCollectionFilter | baselineList configurationList projectList | baselineList := Metacello registry baseline: #('Issue32' 'External' 'GithubRefIV'); list. self assert: baselineList size = 1. baselineList do: [ :spec | self assert: (#('BaselineOfGithubRefIV') includes: spec className) ]. configurationList := Metacello registry configuration: #('Issue32' 'External' 'GithubRefIV'); list. self assert: configurationList size = 2. configurationList do: [ :spec | self assert: (#('ConfigurationOfIssue32' 'ConfigurationOfExternal') includes: spec className) ]. projectList := Metacello registry project: #('Issue32' 'External' 'GithubRefIV'); list. self assert: projectList size = 3. projectList do: [ :spec | self assert: (#('ConfigurationOfIssue32' 'BaselineOfIssue32' 'ConfigurationOfExternal' 'BaselineOfGithubRefIV') includes: spec className) ]! ! !MetacelloScriptingProjectFilterTestCase methodsFor: 'validation' stamp: 'dkh 07/28/2013 10:26'! validateRegistryNameFilter | spec | spec := Metacello registry baseline: 'GithubRefIV'; list. self assert: 'BaselineOfGithubRefIV' = spec className. spec := Metacello registry configuration: 'Issue32'; list. self assert: 'ConfigurationOfIssue32' = spec className. spec := Metacello registry project: 'Issue32'; list. self assert: 'ConfigurationOfIssue32' = spec className! ! !MetacelloScriptingRegistryTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 14:40'! externalRepositoryContents ^ super externalRepositoryContents , #('External-Core-dkh.1' 'ConfigurationOfExternal-dkh.2')! ! !MetacelloScriptingRegistryTestCase methodsFor: 'running' stamp: 'dkh 07/26/2013 09:55'! tearDownPackageList ^ super tearDownPackageList , #('ConfigurationOfExternal')! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:43'! testLoadConfigurationThenBaseline "Load project from configuration, then load project from baseline" Metacello new configuration: 'External'; version: '0.9.0'; repository: 'filetree://' , externalDirectory fullName; load. Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; load. self validateBaseline: MetacelloProjectRegistration registry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:43'! testLoadConfigurationWithBaseline "Load project from configuration that directly loads a baseline" Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; load. self validateConfiguration: MetacelloProjectRegistration registry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:43'! testPrimeRegistryFromImage1 "Load naked Configuration then Configuration/Baseline" "Cover case where a BaselineOf is loaded in after a standard ConfigurationOf https://github.com/dalehenrich/metacello-work/issues/197#issuecomment-21625223" | rgstry | Metacello new configuration: 'External'; version: '0.9.0'; repository: 'filetree://' , externalDirectory fullName; load. self validateConfiguration: MetacelloProjectRegistration registry. Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; load. self validateConfiguration: MetacelloProjectRegistration registry. MetacelloProjectRegistration resetRegistry. rgstry := MetacelloProjectRegistration registry. rgstry primeRegistryFromImage: {(Smalltalk at: #'ConfigurationOfExternal')} baselineClasses: {(Smalltalk at: #'BaselineOfExternal')}. self validateConfiguration: rgstry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:43'! testPrimeRegistryFromImage2 "Load Configuration/Baseline then naked Configuration" | rgstry original | Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; load. self validateConfiguration: MetacelloProjectRegistration registry. Metacello new configuration: 'External'; version: '0.9.0'; repository: 'filetree://' , externalDirectory fullName; load. original := MetacelloProjectRegistration registry copy. self validateConfiguration: MetacelloProjectRegistration registry. MetacelloProjectRegistration resetRegistry. rgstry := MetacelloProjectRegistration registry. rgstry primeRegistryFromImage: {(Smalltalk at: #'ConfigurationOfExternal')} baselineClasses: {(Smalltalk at: #'BaselineOfExternal')}. self validateConfiguration: rgstry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:44'! testPrimeRegistryFromImage3 "Get Configuration as decoy. Load naked Baseline" | rgstry original | Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; get. Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; load. self validateBaseline: MetacelloProjectRegistration registry. MetacelloProjectRegistration resetRegistry. rgstry := MetacelloProjectRegistration registry. rgstry primeRegistryFromImage: {} baselineClasses: {(Smalltalk at: #'BaselineOfExternal')}. self validateBaseline: rgstry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:44'! testPrimeRegistryFromImage4 "Get Configuration as decoy load naked Baseline ... wrong answer, but acceptable compromise ... naked baselines are a development time thing and often have locks associated with them testPrimeRegistryFromImage5 will validate lock usecase " | rgstry original | Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; get. Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; load. self validateBaseline: MetacelloProjectRegistration registry. MetacelloProjectRegistration resetRegistry. rgstry := MetacelloProjectRegistration registry. rgstry primeRegistryFromImage: {(Smalltalk at: #'ConfigurationOfExternal')} baselineClasses: {(Smalltalk at: #'BaselineOfExternal')}. self validateConfiguration: rgstry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/29/2013 14:44'! testPrimeRegistryFromImage5 "Get Configuration as decoy. Load naked Baseline. Lock naked Baseline" | rgstry original | Metacello new configuration: 'External'; version: '0.9.1'; repository: 'filetree://' , externalDirectory fullName; get. Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; load. self validateBaseline: MetacelloProjectRegistration registry. MetacelloProjectRegistration resetRegistry. Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; lock. rgstry := MetacelloProjectRegistration registry. rgstry primeRegistryFromImage: {(Smalltalk at: #'ConfigurationOfExternal')} baselineClasses: {(Smalltalk at: #'BaselineOfExternal')}. self validateBaseline: rgstry! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/27/2013 07:56'! validateBaseline: rgstry | spec | spec := self validateRegistrations: rgstry. self assert: spec == spec asBaselineProjectSpec! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/27/2013 07:49'! validateConfiguration: rgstry | spec | spec := self validateRegistrations: rgstry. self assert: spec == spec asConfigurationProjectSpec! ! !MetacelloScriptingRegistryTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/27/2013 07:48'! validateRegistrations: rgstry | specs | specs := Metacello image project: [ :spec | spec name = 'External' ]; list. self assert: specs size = 1. ^ specs first! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 15:12'! testFileTreeLoadBaseline1 Transcript cr; show: '----->>>>>testFileTreeLoadBaseline1[1]'. Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; silently; load. Transcript cr; show: '----->>>>>testFileTreeLoadBaseline1[2]'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternalX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. Transcript cr; show: '----->>>>>testFileTreeLoadBaseline1[3]'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/26/2013 15:21'! testFileTreeLoadBaseline2 Transcript cr; show: '----->>>>>testFileTreeLoadBaseline2'. Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; get. Metacello new baseline: 'ExternalX'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternalX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:24'! testFileTreeLoadConfiguration1 Metacello new project: 'ExternalX'; className: 'ConfigurationOfExternalX'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:24'! testFileTreeLoadConfiguration2 Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/14/2012 23:25'! testFileTreeLoadGithubRefBaseline2 "BaselineOfExternal reference from github://dalehenrich/external:957492f31b77026d81dcb165c07c69b2ad897781/repository using #baseline:with:" Metacello new baseline: 'GithubRefXX'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefXX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:24'! testFileTreeLoadGithubRefBaseline4 "ConfigurationOfExternal reference from github://dalehenrich/external:configuration/repository using #project:with: with className:" Metacello new baseline: 'GithubRefIV'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefIV' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfExternal' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:25'! testFileTreeLoadGithubRefBaseline5 "ConfigurationOfExternal reference from github://dalehenrich/external:configuration/repository using #configuration:with:" Metacello new baseline: 'GithubRefV'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefV' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfExternal' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:25'! testFileTreeLoadGithubRefBaseline6 "ConfigurationOfExternal reference from http://ss3.gemstone.com/ss/external.html using #configuration:with:" Metacello new baseline: 'GithubRefVI'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefVI' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfExternal' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'http://ss3.gemtalksystems.com/ss/external' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 06/29/2013 12:27'! testFileTreeLoadGithubRefBaseline7 "BaselineOfExternal reference from http://ss3.gemstone.com/ss/external.html using #baseline:with:" Metacello new baseline: 'GithubRefVII'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefVII' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'http://ss3.gemtalksystems.com/ss/external'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'http://ss3.gemtalksystems.com/ss/external'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:12'! testFileTreeLoadGithubRefBaseline8 "BaselineOfExternal reference from github://dalehenrich/external:957492f31b77026d81dcb165c07c69b2ad897781/repository using #baseline:with:" Metacello new baseline: 'GithubRefVIII'; repository: 'filetree://' , externalDirectory fullName; silently; get. Metacello new baseline: 'GithubRefVIII'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefVIII' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:25'! testFileTreeLoadGithubRefBaseline9 "ConfigurationOfExternal reference from github://dalehenrich/external:configuration/repository using #project:with: no className:" Metacello new baseline: 'GithubRefIX'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefIX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfExternal' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalConfigurationSHA , '/repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:53'! testFileTreeLoadMarianosImage1 Metacello new project: 'MarianosImage'; className: 'MarianosImage'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'MarianosImage' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternalX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'dictionary://Metacello_Configuration_Test_Repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/22/2012 17:54'! testFileTreeLoadMarianosImage2 Metacello new project: 'DifferentName'; className: 'MarianosImage'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'MarianosImage' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternalX' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'dictionary://Metacello_Configuration_Test_Repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:18'! testGitHubLoad1 Metacello new baseline: 'External'; repository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'; load. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:20'! testGithubRefBaselineLoad1 "loading 'Core' group only" Metacello new baseline: 'GithubRefXII'; repository: 'filetree://' , externalDirectory fullName; silently; load: 'External Core'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefXII' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:21'! testGithubRefBaselineLoad2 "loading 'Core' and 'Tests' groups " Metacello new baseline: 'GithubRefXII'; repository: 'filetree://' , externalDirectory fullName; silently; load: #('External Core' 'External Tests'). self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefXII' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verify: 'External-Tests' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:22'! testGithubRefBaselineLoad3 "loading 'Core' and 'Tests' groups using project:copyFrom:with:" Metacello new baseline: 'GithubRefXIII'; repository: 'filetree://' , externalDirectory fullName; silently; load: #('External Core' 'External Tests'). self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfGithubRefXIII' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'filetree://' , externalDirectory fullName. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verify: 'External-Tests' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 06/29/2013 12:28'! testIssue136Loading "https://github.com/dalehenrich/metacello-work/issues/136" "already baseline should have precedence over one being requested during load of different package. Both BaselineOfGithubRefVII --> MetacelloScriptingResource>>baselineGithubReferenceIV: BaselineOfGithubRefVIII --> MetacelloScriptingResource>>baselineGithubReferenceV: reference the External project, but each reference is for a different repository: BaselineOfGithubRefVII --> MetacelloScriptingResource>>baselineGithubReferenceIV: --> http://ss3.gemstone.com/ss/external BaselineOfGithubRefVIII --> MetacelloScriptingResource>>baselineGithubReferenceV: --> github://dalehenrich/external:XXXXXXXXX/repository the first one loaded (BaselineOfGithubRefVII) should win " Metacello new baseline: 'GithubRefVII'; repository: 'filetree://' , externalDirectory fullName; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'http://ss3.gemtalksystems.com/ss/external'. Metacello new baseline: 'GithubRefVIII'; repository: 'filetree://' , externalDirectory fullName; onConflict: [ :ex | ex existingProjectRegistration name = 'External' ifTrue: [ ex allow ] ifFalse: [ ex ] ]; silently; load. self validateExpectedConfigurationClassName: nil expectedConfigurationVersion: nil expectedConfigurationRepository: nil expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'http://ss3.gemtalksystems.com/ss/external'! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'ChristopheDemarey 5/29/2013 18:21'! testIssue27Caching | repoDescription githubRepo platform | repoDescription := 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. Metacello new baseline: 'External'; repository: repoDescription; get. githubRepo := MCRepositoryGroup default repositories detect: [ :repo | repo description = repoDescription ]. platform := MetacelloPlatform current. platform recursiveDelete: (platform parentDirectoryOf: (platform parentDirectoryOf: (platform parentDirectoryOf: githubRepo directory))). githubRepo flushCache. Metacello new baseline: 'External'; repository: repoDescription; get! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:23'! testMczLoad1 Metacello new project: 'MetacelloExample'; className: 'ConfigurationOfMetacelloExample'; version: '1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfMetacelloExample' expectedConfigurationVersion: '1.0' expectedConfigurationRepository: 'dictionary://Metacello_MczConfiguration_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingSuccessTestCase methodsFor: 'tests' stamp: 'dkh 6/15/2012 05:24'! testMczLoad2 Metacello new configuration: 'MetacelloExample'; version: '1.0'; repository: 'dictionary://Metacello_MczConfiguration_Test_Repository'; load. self validateExpectedConfigurationClassName: 'ConfigurationOfMetacelloExample' expectedConfigurationVersion: '1.0' expectedConfigurationRepository: 'dictionary://Metacello_MczConfiguration_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositoryContents super setUpRepositoryContents. self setUpRepositoryContents: #('ConfigurationOfConflict-dkh.1' 'ConfigurationOfExternalX-dkh.2') sourceRepo: MetacelloScriptingResource current configurationRepository targetRepo: (MCFileTreeRepository new directory: configurationDirectory). Smalltalk at: #'Metacello_Conflict_Test_Repository' put: configurationRepository! ! !MetacelloScriptingConflictsTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackageList ^ #('ConfigurationOfExternalX' 'BaselineOfExternalX' 'External-CoreX' 'ConfigurationOfConflict')! ! !MetacelloScriptingConflictsTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_Conflict_Test_Repository' ifAbsent: [ ]! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:16'! testConfigurationConflict1 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification1" self testFileTreeLoadConfigurationVersion. Metacello new configuration: 'Conflict'; version: '1.0.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.0.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Conflict_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:16'! testConfigurationConflict2 "disallow upgrade (non-default)" "variant of testFileTreeLoadConfigurationVersionsNotification2" self testFileTreeLoadConfigurationVersion. [ Metacello new configuration: 'Conflict'; version: '1.0.0'; repository: 'filetree://' , configurationDirectory fullName; silently; onConflict: [ :ex | ex disallow ]; load ] on: MetacelloAllowProjectUpgrade do: [ :ex | ex disallow ]. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.0.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:17'! testConfigurationConflict3 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification3" self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'Conflict'; version: '1.1.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.1.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:17'! testConfigurationConflict4 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification4" "explicitly a downgrade" self testFileTreeLoadConfigurationVersions. [ Metacello new configuration: 'Conflict'; version: '1.1.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load ] on: MetacelloAllowProjectDowngrade do: [ :ex | ex allow ]. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.1.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Conflict_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:18'! testConfigurationConflict5 "Conflict must show up in a configuration loaded from a project spec ... using onUpgrade:" "variant of testFileTreeLoadConfigurationVersionsNotification2" | baseName | self testFileTreeLoadConfigurationVersion. Metacello new configuration: 'Conflict'; version: '1.0.0'; repository: 'filetree://' , configurationDirectory fullName; onUpgrade: [ :ex :existing | baseName := existing baseName. ex allow ]; silently; load. self assert: baseName = 'ExternalX'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.0.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Conflict_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:18'! testConfigurationConflict6 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification5" "detect and disallow conflict" | newVersion existingVersion baseName | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'Conflict'; version: '1.2.0'; repository: 'filetree://' , configurationDirectory fullName; onConflict: [ :ex :existing :new | baseName := existing baseName. existingVersion := existing configurationProjectSpec versionString. newVersion := new configurationProjectSpec versionString. ex disallow ]; silently; load. self assert: baseName = 'ExternalX'. self assert: existingVersion = '0.9.1'. self assert: newVersion = '0.9.2'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.2.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:14'! testConfigurationConflict6WithLock1 | newVersion existingVersion baseName | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'ExternalX'; version: '0.9.1'; repository: 'filetree://' , configurationDirectory fullName; lock. Metacello new configuration: 'Conflict'; version: '1.2.0'; repository: 'filetree://' , configurationDirectory fullName; onLock: [ :ex | ex disallow ]; onConflict: [ :ex :existing :new | baseName := existing baseName. existingVersion := existing configurationProjectSpec versionString. newVersion := new configurationProjectSpec versionString. ex allow "trigger lock" ]; silently; load. self assert: baseName = 'ExternalX'. self assert: existingVersion = '0.9.1'. self assert: newVersion = '0.9.2'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.2.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:18'! testConfigurationConflict6WithLock2 | newVersion existingVersion baseName sawLockWarning | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'ExternalX'; version: '0.9.1'; repository: 'filetree://' , configurationDirectory fullName; lock. sawLockWarning := false. Metacello new configuration: 'Conflict'; version: '1.2.0'; repository: 'filetree://' , configurationDirectory fullName; onWarning: [ :ex | sawLockWarning := true. ex resume ]; onConflict: [ :ex :existing :new | baseName := existing baseName. existingVersion := existing configurationProjectSpec versionString. newVersion := new configurationProjectSpec versionString. ex allow "trigger lock" ]; silently; load. self assert: sawLockWarning. self assert: baseName = 'ExternalX'. self assert: existingVersion = '0.9.1'. self assert: newVersion = '0.9.2'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.2.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:19'! testConfigurationConflict7 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification4" "explicitly downgrade" | baseName existingVersion newVersion | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'Conflict'; version: '1.1.0'; repository: 'filetree://' , configurationDirectory fullName; onDowngrade: [ :ex :existing :new | baseName := existing baseName. existingVersion := existing configurationProjectSpec versionString. newVersion := new configurationProjectSpec versionString. ex allow ]; silently; load. self assert: baseName = 'ExternalX'. self assert: existingVersion = '0.9.1'. self assert: newVersion = '0.9.0'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.1.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Conflict_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:19'! testConfigurationConflict8 "Conflict must show up in a configuration loaded from a project spec" "variant of testFileTreeLoadConfigurationVersionsNotification4" "explicitly adowngrade" | newVersion existingVersion baseName | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'Conflict'; version: '1.1.0'; repository: 'filetree://' , configurationDirectory fullName; onDowngrade: [ :ex :existing :new | baseName := existing baseName. existingVersion := existing configurationProjectSpec versionString. newVersion := new configurationProjectSpec versionString. ex allow ]; silently; load. self assert: baseName = 'ExternalX'. self assert: existingVersion = '0.9.1'. self assert: newVersion = '0.9.0'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.1.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Conflict_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:19'! testConfigurationConflict9 "Conflict must show up in a configuration loaded from a project spec" "variant of testConfigurationConflict3" | disallowed | self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'Conflict'; version: '1.1.0'; repository: 'filetree://' , configurationDirectory fullName; silently; onDowngrade: [ :ex :existing :new | existing baseName = 'ExternalX' ifTrue: [ disallowed := existing baseName. ex disallow ]. ex pass ]; load. self assert: disallowed = 'ExternalX'. self validateExpectedConfigurationClassName: 'ConfigurationOfConflict' expectedConfigurationVersion: '1.1.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:12'! testFileTreeLoadConfigurationVersion Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:13'! testFileTreeLoadConfigurationVersions self testFileTreeLoadConfigurationVersion. Metacello new configuration: 'ExternalX'; version: '0.9.1'; repository: 'filetree://' , configurationDirectory fullName; silently; onUpgrade: [ :ex | ex allow ]; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:19'! testFileTreeLoadConfigurationVersionsNotification1 "MetacelloSkippedProjectSpecLoadUpgradeNotAllowedNotification not handled ... default action is to use existingRegistration" self testFileTreeLoadConfigurationVersion. Metacello new configuration: 'ExternalX'; version: '0.9.1'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingConflictsTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:19'! testFileTreeLoadConfigurationVersionsNotification3 "MetacelloSkippedProjectSpecLoadConflictsNotification not handled ... default action is to use existingRegistration" self testFileTreeLoadConfigurationVersions. Metacello new configuration: 'ExternalX'; version: '0.9.0'; repository: 'filetree://' , configurationDirectory fullName; silently; load. self validateExpectedConfigurationClassName: 'ConfigurationOfExternalX' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'filetree://' , configurationDirectory fullName expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/16/2013 14:01'! setUpRepositories super setUpRepositories. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 20:38'! tearDownPackageList ^ #('External-Core' 'ConfigurationOfIssue181' 'BaselineOfExternal' 'ExternalCore')! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/16/2013 19:15'! testBaselineLoad "https://github.com/dalehenrich/metacello-work/issues/181" | wc | Metacello new configuration: 'Issue181'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. " --- Issue181 0.9.1 BaselineOfExternal-dkh.3" wc := (GoferPackageReference name: 'BaselineOfExternal') workingCopy. self assert: wc ancestry ancestors first name = 'BaselineOfExternal-dkh.3'. Metacello new configuration: 'Issue181'; version: '0.9.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. " --- Issue181 0.9.2 BaselineOfExternal-dkh.4" wc := (GoferPackageReference name: 'BaselineOfExternal') workingCopy. self assert: wc ancestry ancestors first name = 'BaselineOfExternal-dkh.4'! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/19/2013 14:29'! testIssue185a "https://github.com/dalehenrich/metacello-work/issues/185" | wc | Metacello new configuration: 'Issue181'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. " --- Issue181 0.9.1 BaselineOfExternal-dkh.3 EExternal-Core-dkh.5" wc := (GoferPackageReference name: 'External-Core') workingCopy. self assert: wc ancestry ancestors first name = 'External-Core-dkh.5'. Metacello new configuration: 'Issue181'; version: '0.9.3'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. " --- Issue181 0.9.2 BaselineOfExternal-dkh.4 External-Core-dkh.5" wc := (GoferPackageReference name: 'External-Core') workingCopy. self assert: wc ancestry ancestors first name = 'External-Core-dkh.6'! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/19/2013 15:30'! testIssue185b "https://github.com/dalehenrich/metacello-work/issues/185" | wc | Metacello new configuration: 'Issue181'; version: '0.9.4'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. wc := (GoferPackageReference name: 'External-Core') workingCopy. self assert: wc ancestry ancestors first name = 'External-Core.branch-dkh.8'. Metacello new configuration: 'Issue181'; version: '0.9.5'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. wc := (GoferPackageReference name: 'External-Core') workingCopy. self assert: wc ancestry ancestors first name = 'External-Core.branch-dkh.9'! ! !MetacelloScriptingIssue181TestCase methodsFor: 'running' stamp: 'dkh 07/19/2013 15:45'! testIssue185c "https://github.com/dalehenrich/metacello-work/issues/185" | wc | Metacello new configuration: 'Issue181'; version: '0.9.6'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. wc := (GoferPackageReference name: 'ExternalCore') workingCopy. self assert: wc ancestry ancestors first name = 'ExternalCore.branch-dkh.1'. Metacello new configuration: 'Issue181'; version: '0.9.7'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. wc := (GoferPackageReference name: 'ExternalCore') workingCopy. self assert: wc ancestry ancestors first name = 'ExternalCore.branch-dkh.2'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'running' stamp: 'dkh 6/18/2012 14:40'! setUp super setUp. Smalltalk removeKey: #'Metacello_Configuration_Test_POST_DoIt_Result' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Configuration_Test_DoIt_Result' ifAbsent: [ ]! ! !MetacelloScriptingIssuesTestCase methodsFor: 'running' stamp: 'dkh 6/18/2012 14:32'! setUpRepositories super setUpRepositories. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository. Smalltalk at: #'Metacello_External_Test_Repository' put: externalRepository! ! !MetacelloScriptingIssuesTestCase methodsFor: 'running' stamp: 'dkh 6/18/2012 14:40'! tearDown super tearDown. Smalltalk removeKey: #'Metacello_Configuration_Test_POST_DoIt_Result' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Configuration_Test_DoIt_Result' ifAbsent: [ ]! ! !MetacelloScriptingIssuesTestCase methodsFor: 'running' stamp: 'dkh 6/26/2012 16:53'! tearDownPackageList ^ #('ConfigurationOfIssue32' 'BaselineOfIssue32' 'External-CoreX' 'External-TestsX' 'ConfigurationOfIssue59' 'External-Core' 'External-Tests' 'ConfigurationOfIssue63' 'BaselineOfExternal' 'GoferFoo' 'GoferBar')! ! !MetacelloScriptingIssuesTestCase methodsFor: 'running' stamp: 'dkh 6/18/2012 14:33'! tearDownRepositories super tearDownRepositories. Smalltalk removeKey: #'Metacello_External_Test_Repository' ifAbsent: [ ]! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:20'! testIssue32 "https://github.com/dalehenrich/metacello-work/issues/32" Metacello new configuration: 'Issue32'; version: '0.9.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self validateExpectedConfigurationClassName: 'ConfigurationOfIssue32' expectedConfigurationVersion: '0.9.0' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:20'! testIssue47 "https://github.com/dalehenrich/metacello-work/issues/47" "load with no errors" Metacello new configuration: 'Issue32'; version: '1.0.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self validateExpectedConfigurationClassName: 'ConfigurationOfIssue32' expectedConfigurationVersion: '1.0.0' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:33'! testIssue59 "https://github.com/dalehenrich/metacello-work/issues/59" "load with no errors" "same as testIssue47, except that ConfigurationOfIssue59 uses MetacelloVersionNumber instead of MetacelloSemanticVersionNumber, so 1.0 is a valid version number" Metacello new configuration: 'Issue59'; version: '1.0'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. self assert: (Smalltalk at: #'Metacello_Configuration_Test_POST_DoIt_Result'). self assert: (Smalltalk at: #'Metacello_Configuration_Test_DoIt_Result'). self validateExpectedConfigurationClassName: 'ConfigurationOfIssue59' expectedConfigurationVersion: '1.0' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfIssue32' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'dictionary://Metacello_External_Test_Repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:35'! testIssue63a091 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'; verifyPackageNotLoaded: 'GoferFoo'; verifyPackageNotLoaded: 'GoferBar'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:36'! testIssue63a092 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'; verify: 'GoferFoo' version: 'GoferFoo-lr.2'; verify: 'GoferBar' version: 'GoferBar-lr.1'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.2' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:37'! testIssue63b "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'default'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:37'! testIssue63c "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'ALL'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verify: 'External-Tests' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:37'! testIssue63d091 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'Core'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'; verifyPackageNotLoaded: 'GoferFoo'; verifyPackageNotLoaded: 'GoferBar'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:38'! testIssue63d092 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'Core'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'; verifyPackageNotLoaded: 'GoferFoo'; verifyPackageNotLoaded: 'GoferBar'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.2' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:38'! testIssue63e "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'Tests'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verify: 'External-Tests' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:38'! testIssue63f "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'External-Core'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:39'! testIssue63g "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'External-Tests'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verify: 'External-Tests' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.1' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 07/28/2013 08:39'! testIssue63h092 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'GoferFoo'. self verify: 'External-Core' loadedFrom: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'. self verifyPackageNotLoaded: 'External-Tests'; verify: 'GoferFoo' version: 'GoferFoo-lr.2'; verifyPackageNotLoaded: 'GoferBar'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.2' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: 'BaselineOfExternal' expectedBaselineVersion: 'baseline' expectedBaselineRepository: 'github://dalehenrich/external:' , MetacelloScriptingResource externalCustomSHA , '/repository'! ! !MetacelloScriptingIssuesTestCase methodsFor: 'tests' stamp: 'dkh 05/09/2013 12:17'! testIssue63i092 "https://github.com/dalehenrich/metacello-work/issues/63" Metacello new configuration: 'Issue63'; version: '0.9.2'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load: 'GoferBar'. self verifyPackageNotLoaded: 'External-Core'; verifyPackageNotLoaded: 'External-Tests'; verify: 'GoferBar' version: 'GoferBar-lr.1'; verifyPackageNotLoaded: 'GoferFoo'. self validateExpectedConfigurationClassName: 'ConfigurationOfIssue63' expectedConfigurationVersion: '0.9.2' expectedConfigurationRepository: 'dictionary://Metacello_Configuration_Test_Repository' expectedBaselineClassName: nil expectedBaselineVersion: nil expectedBaselineRepository: nil! ! !MetacelloScriptingTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationPath ^ 'metacello-tests/configuration'! ! !MetacelloScriptingTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! externalPath ^ 'metacello-tests/external'! ! !MetacelloScriptingTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! samplePath ^ 'metacello-tests/sample'! ! !MetacelloScriptingTestCase methodsFor: 'running' stamp: 'ChristopheDemarey 5/27/2013 18:11'! setUpRepositories | defaultDirectory | super setUpRepositories. defaultDirectory := MetacelloPlatform current defaultDirectory. configurationDirectory := MetacelloPlatform current directoryFromPath: self configurationPath relativeTo: defaultDirectory. externalDirectory := MetacelloPlatform current directoryFromPath: self externalPath relativeTo: defaultDirectory. sampleDirectory := MetacelloPlatform current directoryFromPath: self samplePath relativeTo: defaultDirectory. configurationDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: configurationDirectory ]. MetacelloPlatform current ensureDirectoryExists: configurationDirectory. externalDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: externalDirectory ]. MetacelloPlatform current ensureDirectoryExists: externalDirectory. sampleDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: sampleDirectory ]. MetacelloPlatform current ensureDirectoryExists: sampleDirectory. configurationRepository := MetacelloScriptingResource current configurationRepository. externalRepository := MetacelloScriptingResource current externalRepository. Smalltalk at: 'Metacello_Configuration_Test_Repository' asSymbol put: externalRepository. monticelloRepository := MetacelloMonticelloResource current monticelloRepository. Smalltalk at: 'Metacello_Gofer_Test_Repository' asSymbol put: monticelloRepository. mczConfigurationRepository := MetacelloConfigurationResource current monticelloRepository. Smalltalk at: 'Metacello_MczConfiguration_Test_Repository' asSymbol put: mczConfigurationRepository! ! !MetacelloScriptingTestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUpRepositoryContents: packageList sourceRepo: sourceRepo targetRepo: targetRepo packageList do: [ :package | | versionInfo | versionInfo := sourceRepo versionInfoFromVersionNamed: package. targetRepo storeVersion: (sourceRepo versionWithInfo: versionInfo ifAbsent: [ self assert: false ]) ]! ! !MetacelloScriptingTestCase methodsFor: 'running' stamp: 'ChristopheDemarey 5/27/2013 18:12'! tearDownRepositories super tearDownRepositories. configurationDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: configurationDirectory ]. externalDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: externalDirectory ]. sampleDirectory exists ifTrue: [ MetacelloPlatform current recursiveDelete: sampleDirectory ]. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_MczConfiguration_Test_Repository' ifAbsent: [ ]. MCRepositoryGroup default removeRepository: externalRepository; removeRepository: monticelloRepository; removeRepository: mczConfigurationRepository; removeRepository: configurationRepository! ! !MetacelloScriptingWarningTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 07/24/2013 16:08'! doSilently ^ false! ! !MetacelloScriptingWarningTestCase methodsFor: 'running' stamp: 'dkh 07/24/2013 18:28'! setUpRepositories super setUpRepositories. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: configurationRepository! ! !MetacelloScriptingWarningTestCase methodsFor: 'running' stamp: 'dkh 07/29/2013 20:28'! tearDownPackageList ^ #('External-Core' 'ConfigurationOfIssue181' 'BaselineOfExternal')! ! !MetacelloScriptingWarningTestCase methodsFor: 'as yet unclassified' stamp: 'dkh 09/23/2013 20:59'! testWarningDuringLoad [ | producedWarning externalCoreClass | Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [0]: '. Metacello new configuration: 'Issue181'; version: '0.9.1'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; load. producedWarning := false. Smalltalk at: #'SystemChangeNotifier' ifPresent: [ :cl | Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [1]: ' , cl uniqueInstance silenceLevel printString ]. externalCoreClass := Smalltalk at: #'ExternalCore' ifAbsent: [ Transcript cr; show: 'Missing class: ExternalCore'. MCWorkingCopy allManagers do: [ :wc | (wc packageName beginsWith: 'External') ifTrue: [ Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [6]: ' , wc description ] ]. self assert: false ]. Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [2]: '. self deny: (externalCoreClass selectors includes: #'forceWarning'). externalCoreClass compile: 'forceWarning ^self'. "dirty the package" Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [3]: '. self assert: (externalCoreClass selectors includes: #'forceWarning'). Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [4]: '. Metacello new configuration: 'Issue181'; version: '0.9.3'; repository: 'dictionary://Metacello_Configuration_Test_Repository'; silently; onWarning: [ :ex | Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [5]: ' , ex description. producedWarning := true. ex resume ]; load. Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [6]: '. self assert: producedWarning ] on: Error do: [ :ex | Transcript cr; show: 'MetacelloScriptingWarningTestCase>>testWarningDuringLoad [7]: ' , ex description ]! ! !MetacelloGroupSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testGroupMergeSpec | groupA groupB group | groupA := self groupSpec name: 'Platform'; includes: 'Core'; yourself. groupB := self groupSpec name: 'Platform'; includes: 'Tests'; yourself. group := groupA mergeSpec: groupB. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloGroupSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testGroupSpec | group | group := self groupSpec name: 'Platform'; includes: 'Core'; yourself. self assert: group name = 'Platform'. self assert: (group includes includes: 'Core'). group := self groupSpec name: 'Platform'; includes: #('Core'); yourself. self assert: group name = 'Platform'. self assert: (group includes includes: 'Core'). self should: [ group requires: #() ] raise: Error. self should: [ group answers: #() ] raise: Error. group projectDo: [ :ignored | self assert: false ] packageDo: [ :ignored | self assert: false ] groupDo: [ :grp | self assert: group == grp ]! ! !MetacelloMCGroupSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloPackageSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloPackageSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageMergeSpec | packageA packageB package repository | packageA := self packageSpec name: 'Package'; name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. packageB := self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; includes: 'AndIncludedPackage'; answers: #(#('xpostload' 'xpostload answer')); file: 'Package-dkh.2'; repository: 'http://example.com/repository' username: 'DaleHenrichs' password: 'secret'; repository: '/opt/gemstone/repo'; yourself. package := packageA mergeSpec: packageB. self assert: package name = 'Package'. self assert: package requires = #('AnotherPackage' 'AndAnotherPackage'). self assert: package includes = #('IncludedPackage' 'AndIncludedPackage'). self assert: package answers = #(#('preload' 'preload answer') #('postload' 'postload answer') #('xpostload' 'xpostload answer')). self assert: package file = 'Package-dkh.2'. self assert: package preLoadDoIt value == #'preLoadDoIt'. self assert: package postLoadDoIt value == #'postLoadDoIt'. repository := package repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := package repositories map at: '/opt/gemstone/repo' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := package repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloPackageSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testPackageSpec | package repository | package := self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. self assert: package name = 'Package'. self assert: package requires = #('AnotherPackage'). self assert: package includes = #('IncludedPackage'). self assert: package answers = #(#('preload' 'preload answer') #('postload' 'postload answer')). self assert: package file = 'Package-dkh.1'. self assert: package preLoadDoIt value == #'preLoadDoIt'. self assert: package postLoadDoIt value == #'postLoadDoIt'. repository := package repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := package repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'dkh'. self assert: repository password = 'password'! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddPackageA "used by MetacelloAbstractVersionConstructor>>package: and MetacelloAbstractVersionConstructor>>package:overrides:" | packages package | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages add: (self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; includes: 'AndIncludedPackage'; answers: #(#('postload' 'postload answer')); file: 'Package-dkh.2'; yourself). package := packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. self assert: package requires = #('AndAnotherPackage'). self assert: package includes = #('AndIncludedPackage'). self assert: package answers = #(#('postload' 'postload answer')). self assert: package file = 'Package-dkh.2'. self assert: package preLoadDoIt value == nil. self assert: package postLoadDoIt value == nil! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddPackageB "used by MetacelloAbstractVersionConstructor>>package: and MetacelloAbstractVersionConstructor>>package:overrides:" | packages package | packages := self packagesSpec. packages add: {(self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). (self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; includes: 'AndIncludedPackage'; answers: #(#('postload' 'postload answer')); file: 'Package-dkh.2'; yourself)}. package := packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. self assert: package requires = #('AndAnotherPackage'). self assert: package includes = #('AndIncludedPackage'). self assert: package answers = #(#('postload' 'postload answer')). self assert: package file = 'Package-dkh.2'. self assert: package preLoadDoIt value == nil. self assert: package postLoadDoIt value == nil! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddPackageC "used by MetacelloAbstractVersionConstructor>>package: and MetacelloAbstractVersionConstructor>>package:overrides:" | packages | packages := self packagesSpec. packages add: {'Platform'. 'Base'. 'Tests'}. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. packages packageNamed: 'Base' ifAbsent: [ self assert: false ]. packages packageNamed: 'Tests' ifAbsent: [ self assert: false ]! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddPackageD "used by MetacelloAbstractVersionConstructor>>package: and MetacelloAbstractVersionConstructor>>package:overrides:" | packages | packages := self packagesSpec. packages add: 'Platform'. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCopyToPackage "not currently used by MetacelloAbstractVersionConstructor" | packages package | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages copy: 'Package' to: (self packageSpec name: 'PackageCopy'; yourself). package := packages packageNamed: 'PackageCopy' ifAbsent: [ self assert: false ]. self assert: package name = 'PackageCopy'. self assert: package requires = #('AnotherPackage'). self assert: package includes = #('IncludedPackage'). self assert: package answers = #(#('preload' 'preload answer') #('postload' 'postload answer')). self assert: package file = 'Package-dkh.1'. self assert: package preLoadDoIt value == #'preLoadDoIt'. self assert: package postLoadDoIt value == #'postLoadDoIt'! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergePackageA "used by MetacelloAbstractVersionConstructor>>package:with:" | packages package | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages merge: (self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; includes: 'AndIncludedPackage'; answers: #(#('xpostload' 'xpostload answer')); file: 'Package-dkh.2'; yourself). package := packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. self assert: package requires = #('AnotherPackage' 'AndAnotherPackage'). self assert: package includes = #('IncludedPackage' 'AndIncludedPackage'). self assert: package answers = #(#('preload' 'preload answer') #('postload' 'postload answer') #('xpostload' 'xpostload answer')). self assert: package file = 'Package-dkh.2'. self assert: package preLoadDoIt value == #'preLoadDoIt'. self assert: package postLoadDoIt value == #'postLoadDoIt'! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergePackageB "used by MetacelloAbstractVersionConstructor>>package:with:" | packages package | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages merge: {(self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; includes: 'AndIncludedPackage'; answers: #(#('xpostload' 'xpostload answer')); file: 'Package-dkh.2'; yourself)}. package := packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. self assert: package requires = #('AnotherPackage' 'AndAnotherPackage'). self assert: package includes = #('IncludedPackage' 'AndIncludedPackage'). self assert: package answers = #(#('preload' 'preload answer') #('postload' 'postload answer') #('xpostload' 'xpostload answer')). self assert: package file = 'Package-dkh.2'. self assert: package preLoadDoIt value == #'preLoadDoIt'. self assert: package postLoadDoIt value == #'postLoadDoIt'! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergePackageD "used by MetacelloAbstractVersionConstructor>>package:with:" | packages | packages := self packagesSpec. packages add: 'Platform'; merge: 'Tests'. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. packages packageNamed: 'Tests' ifAbsent: [ self assert: false ]! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemovePackageA "used by MetacelloAbstractVersionConstructor>>removePackage:" | packages removed | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages remove: (self packageSpec name: 'Package'; yourself). removed := false. packages packageNamed: 'Package' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemovePackageB "used by MetacelloAbstractVersionConstructor>>removePackage:" | packages removed | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages remove: {(self packageSpec name: 'Package'; yourself)}. removed := false. packages packageNamed: 'Package' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemovePackageC "used by MetacelloAbstractVersionConstructor>>removePackage:" | packages removed | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages remove: {'Package'}. removed := false. packages packageNamed: 'Package' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloMCPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemovePackageD "used by MetacelloAbstractVersionConstructor>>removePackage:" | packages removed | packages := self packagesSpec. packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). packages remove: 'Package'. removed := false. packages packageNamed: 'Package' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testAddGroupA "used by MetacelloAbstractVersionConstructor>>group:overrides:" | packages group | packages := self packagesSpec. packages add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). packages add: (self groupSpec name: 'Platform'; includes: 'Tests'; yourself). group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self deny: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testAddGroupB "used by MetacelloAbstractVersionConstructor>>group:overrides:" | packages group | packages := self packagesSpec. packages add: {(self groupSpec name: 'Platform'; includes: 'Core'; yourself). (self groupSpec name: 'Platform'; includes: 'Tests'; yourself)}. group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self deny: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testAddProjectA "used by MetacelloAbstractVersionConstructor>>project:overrides:" | packages project projectReferenceSpec | packages := self packagesSpec. packages add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself). packages add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. self assert: projectReferenceSpec projectName = 'Project'. self assert: projectReferenceSpec versionString = '1.0'. self should: [ projectReferenceSpec includes: #() ] raise: Error. self should: [ projectReferenceSpec requires: #() ] raise: Error. self should: [ projectReferenceSpec answers: #() ] raise: Error. projectReferenceSpec projectDo: [ :prjct | self assert: projectReferenceSpec == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. project projectDo: [ :prjct | self assert: project == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testAddProjectB "used by MetacelloAbstractVersionConstructor>>project:overrides:" | packages project projectReferenceSpec | packages := self packagesSpec. packages add: {(self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself). (self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself)}. projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. self assert: projectReferenceSpec projectName = 'Project'. self assert: projectReferenceSpec versionString = '1.0'. self should: [ projectReferenceSpec includes: #() ] raise: Error. self should: [ projectReferenceSpec requires: #() ] raise: Error. self should: [ projectReferenceSpec answers: #() ] raise: Error. projectReferenceSpec projectDo: [ :prjct | self assert: projectReferenceSpec == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. project projectDo: [ :prjct | self assert: project == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCopyToGroup "not currently used by MetacelloAbstractVersionConstructor" | packages group | packages := self packagesSpec. packages add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). packages merge: (self groupSpec name: 'Platform'; includes: 'Tests'; yourself). group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests'). group := self groupSpec name: 'PlatformCopy'; includes: 'Copy'; yourself. packages copy: 'Platform' to: group. group := packages packageNamed: 'PlatformCopy' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Copy'). self assert: (group includes includes: 'Tests')! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCopyToProject "used by MetacelloAbstractVersionConstructor>>project:copyFrom:with:" | packages project referenceSpec | packages := self packagesSpec. packages add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself). project := self projectSpec name: 'ProjectCopy'; yourself. referenceSpec := self project projectReferenceSpec name: 'ProjectCopy'; projectReference: project; yourself. packages copy: 'Project' to: referenceSpec. project := (packages packageNamed: 'ProjectCopy' ifAbsent: [ self assert: false ]) referencedSpec. self assert: project name = 'ProjectCopy'. self assert: project className = 'ConfigurationOfProjectA'. self assert: project versionString = #'stable'. self assert: project operator == #'>='. self assert: project loads = #('MyPackage' 'MyTests'). self assert: project preLoadDoIt value == #'preLoadDoItB'. self assert: project postLoadDoIt value == #'postLoadDoItB'! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testMergeGroupA "used by MetacelloAbstractVersionConstructor>>group:with:" | packages group | packages := self packagesSpec. packages add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). packages merge: (self groupSpec name: 'Platform'; includes: 'Tests'; yourself). group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testMergeGroupB "used by MetacelloAbstractVersionConstructor>>group:with:" | packages group | packages := self packagesSpec. packages add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). packages merge: {(self groupSpec name: 'Platform'; includes: 'Tests'; yourself)}. group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testMergeProjectA "used by MetacelloAbstractVersionConstructor>>project:with:" | packages project projectReferenceSpec referenceSpec | packages := self packagesSpec. project := self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself. referenceSpec := self project projectReferenceSpec name: project name; projectReference: project; yourself. packages add: referenceSpec. project := self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. referenceSpec := self project projectReferenceSpec name: project name; projectReference: project; yourself. packages merge: referenceSpec. projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. project projectDo: [ :prjct | self assert: project == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testMergeProjectB "used by MetacelloAbstractVersionConstructor>>project:with:" | packages project projectReferenceSpec referenceSpec | packages := self packagesSpec. project := self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself. referenceSpec := self project projectReferenceSpec name: project name; projectReference: project; yourself. packages add: referenceSpec. project := self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. referenceSpec := self project projectReferenceSpec name: project name; projectReference: project; yourself. packages merge: {referenceSpec}. projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. project projectDo: [ :prjct | self assert: project == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testRemoveGroupA "used by MetacelloAbstractVersionConstructor>>removeGroup:" | packages group removed | packages := self packagesSpec. packages add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). packages merge: (self groupSpec name: 'Platform'; includes: 'Tests'; yourself). group := packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests'). packages remove: (self groupSpec name: 'Platform'; includes: 'Core'; yourself). removed := false. packages packageNamed: 'Platform' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testRemoveGroupB "used by MetacelloAbstractVersionConstructor>>removeGroup:" | packages group removed | packages := self packagesSpec. packages add: {(self groupSpec name: 'Platform'; includes: 'Core'; yourself). (self groupSpec name: 'Base'; includes: 'Base'; yourself). (self groupSpec name: 'Tests'; includes: 'Tests'; yourself)}. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. packages packageNamed: 'Base' ifAbsent: [ self assert: false ]. packages packageNamed: 'Tests' ifAbsent: [ self assert: false ]. packages remove: {'Base'. 'Tests'}. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. removed := false. packages packageNamed: 'Base' ifAbsent: [ removed := true ]. self assert: removed. removed := false. packages packageNamed: 'Tests' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testRemoveGroupC "used by MetacelloAbstractVersionConstructor>>removeGroup:" | packages group removed | packages := self packagesSpec. packages add: {(self groupSpec name: 'Platform'; includes: 'Core'; yourself). (self groupSpec name: 'Base'; includes: 'Base'; yourself). (self groupSpec name: 'Tests'; includes: 'Tests'; yourself)}. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. packages packageNamed: 'Base' ifAbsent: [ self assert: false ]. packages packageNamed: 'Tests' ifAbsent: [ self assert: false ]. packages remove: 'Tests'. packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. packages packageNamed: 'Base' ifAbsent: [ self assert: false ]. removed := false. packages packageNamed: 'Tests' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testRemoveProjectA "used by MetacelloAbstractVersionConstructor>>removeProject:" | packages project projectReferenceSpec removed | packages := self packagesSpec. packages add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. packages remove: (self projectReferenceSpec name: 'Project'; yourself). removed := false. packages packageNamed: 'Project' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloPackagesSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testRemoveProjectB "used by MetacelloAbstractVersionConstructor>>removeProject:" | packages project projectReferenceSpec removed | packages := self packagesSpec. packages add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; operator: #'<'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself). projectReferenceSpec := packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. project := projectReferenceSpec referencedSpec. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = '1.0'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. packages remove: {(self projectReferenceSpec name: 'Project'; yourself)}. removed := false. packages packageNamed: 'Project' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloMCProjectReferenceSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloProjectReferenceSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testProjectReferenceMergeSpec | projectReferenceA projectReferenceB projectReference project | projectReferenceA := self projectReferenceSpec name: 'Project'; projectReference: (self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; yourself); yourself. projectReferenceB := self projectReferenceSpec name: 'Project'; projectReference: (self projectSpec name: 'Project'; className: 'ConfigurationOfProjectB'; versionString: '1.0'; yourself); yourself. projectReference := projectReferenceA mergeSpec: projectReferenceB. self assert: projectReference name = 'Project'. self assert: projectReference projectName = 'Project'. project := projectReference projectReference. self assert: project className = 'ConfigurationOfProjectB'. self assert: project versionString = '1.0'! ! !MetacelloProjectReferenceSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testProjectReferenceSpec | projectReference project | projectReference := self projectReferenceSpec name: 'Project'; projectReference: (project := self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; yourself); yourself. self assert: projectReference name = 'Project'. self assert: projectReference projectName = 'Project'. self assert: projectReference projectReference == project. self should: [ projectReference includes: #() ] raise: Error. self should: [ projectReference requires: #() ] raise: Error. self should: [ projectReference answers: #() ] raise: Error. projectReference projectDo: [ :prjct | self assert: projectReference == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]! ! !MetacelloMCProjectSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloMCProjectSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMCProjectMergeSpec | projectA projectB project packageA packageB repository | projectA := self projectSpec name: 'Project'; projectPackage: self project packageSpec; className: 'ConfigurationOfProject'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. projectB := self projectSpec name: 'Project'; projectPackage: self project packageSpec; className: 'ConfigurationOfProjectB'; repository: 'http://example.com/repository' username: 'DaleHenrichs' password: 'secret'; repository: '/opt/gemstone/repo'; yourself. project := projectA mergeSpec: projectB. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProjectB'. self assert: project projectPackage name = project className. self assert: project projectPackage file = project className. repository := project repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := project repositories map at: '/opt/gemstone/repo' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := project repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloMCProjectSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMCProjectSpec | project repository | project := self projectSpec. project name: 'Project'; projectPackage: self project packageSpec; className: 'ConfigurationOfProject'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project projectPackage name = project className. self assert: project projectPackage file = project className. repository := project repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := project repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'dkh'. self assert: repository password = 'password'! ! !MetacelloProjectSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testProjectMergeSpec | projectA projectB project | projectA := self projectSpec name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; loads: #('MyPackage'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. projectB := self projectSpec name: 'Project'; className: 'ConfigurationOfProjectB'; versionString: #'stable'; operator: #'<'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself. project := projectA mergeSpec: projectB. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProjectB'. self assert: project versionString = #'stable'. self assert: project operator == #'<'. self assert: project loads = #('MyPackage' 'MyTests'). self assert: project preLoadDoIt value == #'preLoadDoItB'. self assert: project postLoadDoIt value == #'postLoadDoItB'! ! !MetacelloProjectSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testProjectSpec | project | project := self projectSpec. project name: 'Project'; className: 'ConfigurationOfProject'; versionString: '1.0'; versionString: #'stable'; operator: #'<'; operator: nil; loads: 'MyPackage'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. self assert: project name = 'Project'. self assert: project className = 'ConfigurationOfProject'. self assert: project versionString = #'stable'. self assert: project operator == #'>='. self assert: project loads = #('MyPackage' 'MyTests'). self assert: project preLoadDoIt value == #'preLoadDoIt'. self assert: project postLoadDoIt value == #'postLoadDoIt'. self should: [ project includes: #() ] raise: Error. self should: [ project requires: #() ] raise: Error. self should: [ project answers: #() ] raise: Error. project projectDo: [ :prjct | self assert: project == prjct ] packageDo: [ :ignored | self assert: false ] groupDo: [ :ignored | self assert: false ]. self should: [ project preLoadDoIt: '' ] raise: Error. self should: [ project postLoadDoIt: '' ] raise: Error! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddA | repositories repository | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); add: (self repositorySpec description: 'http://example.com/repository'; username: 'DaleHenrichs'; password: 'secret'; yourself). repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddB | repositories repository | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); add: '/opt/gemstone/repository'. repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'dkh'. self assert: repository password = 'password'. repository := repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository description = '/opt/gemstone/repository'. self assert: repository type = 'directory'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddC | repositories repository | repositories := self repositoriesSpec. repositories add: #('http://example.com/repository' '/opt/gemstone/repository'). repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. repository := repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository description = '/opt/gemstone/repository'. self assert: repository type = 'directory'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddE | repositories repository | repositories := self repositoriesSpec. repositories repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'. repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. repository := repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository description = '/opt/gemstone/repository'. self assert: repository type = 'directory'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddF | repositories repository | repositories := self repositoriesSpec. repositories repository: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); repository: (self repositorySpec description: 'http://example.com/repository'; username: 'DaleHenrichs'; password: 'secret'; yourself). repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testCopyTo | repositories | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself). self should: [ repositories copy: 'http://example.com/repository' to: (self repositorySpec description: 'http://example.com/alternate/repository'; yourself) ] raise: Error! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergeA | repositories repository | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); merge: (self repositorySpec description: 'http://example.com/repository'; username: 'DaleHenrichs'; password: 'secret'; yourself). repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergeB | repositories repository | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); merge: 'http://example.com/repository'. repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'dkh'. self assert: repository password = 'password'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMergeC | repositories repository | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself); merge: {(self repositorySpec description: 'http://example.com/repository'; password: 'secret'; yourself). (self repositorySpec description: 'http://example.com/repository'; username: 'DaleHenrichs'; yourself)}. repository := repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemoveA | repositories removed | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself). repositories remove: (self repositorySpec description: 'http://example.com/repository'; yourself). removed := false. repositories map at: 'http://example.com/repository' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemoveB | repositories removed | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself). repositories remove: {(self repositorySpec description: 'http://example.com/repository'; yourself)}. removed := false. repositories map at: 'http://example.com/repository' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemoveC | repositories removed | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself). repositories remove: {'http://example.com/repository'}. removed := false. repositories map at: 'http://example.com/repository' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloRepositoriesSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRemoveD | repositories removed | repositories := self repositoriesSpec. repositories add: (self repositorySpec description: 'http://example.com/repository'; username: 'dkh'; password: 'password'; yourself). repositories remove: 'http://example.com/repository'. removed := false. repositories map at: 'http://example.com/repository' ifAbsent: [ removed := true ]. self assert: removed! ! !MetacelloRepositorySpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloRepositorySpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositoryMergeSpec | repositoryA repositoryB repository | repositoryA := self repositorySpec description: '/opt/gemstone/repository'; username: 'dkh'; password: 'password'; type: 'directory'; yourself. repositoryB := self repositorySpec description: 'http://example.com/repository'; password: 'secret'; yourself. repository := repositoryA mergeSpec: repositoryB. self assert: repository description = 'http://example.com/repository'. self assert: repository username = 'dkh'. self assert: repository password = 'secret'. self assert: repository type = 'http'! ! !MetacelloRepositorySpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testRepositorySpec | repository | repository := self repositorySpec description: '/opt/gemstone/repository'; username: 'dkh'; password: 'password'; type: 'directory'; yourself. self assert: repository name = repository description. self assert: repository description = '/opt/gemstone/repository'. self assert: repository username = 'dkh'. self assert: repository password = 'password'. self assert: repository type = 'directory'. repository := self repositorySpec description: '/opt/gemstone/repository'; yourself. self assert: repository description = '/opt/gemstone/repository'. self assert: repository type = 'directory'. repository := self repositorySpec description: 'http://example.com/repository'; yourself. self assert: repository description = 'http://example.com/repository'. self assert: repository type = 'http'! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! groupSpec ^ self project groupSpec! ! !MetacelloSpecTestCase methodsFor: '*metacello-testsmccore' stamp: 'dkh 6/12/2012 15:41:23.319'! packageSpec ^ self project packageSpec! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! packagesSpec ^ self project packagesSpec! ! !MetacelloSpecTestCase methodsFor: 'accessing' stamp: 'dkh 5/4/2012 20:37:12'! project ^ self projectWith: #()! ! !MetacelloSpecTestCase methodsFor: 'accessing' stamp: 'dkh 5/4/2012 20:37:12'! projectClass ^ MetacelloProject! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! projectReferenceSpec ^ self project projectReferenceSpec! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! projectSpec ^ self project projectSpec! ! !MetacelloSpecTestCase methodsFor: 'accessing' stamp: 'dkh 5/4/2012 20:37:12'! projectWith: projectAttributes | project | "Construct Metacello project" project := self projectClass new. project projectAttributes: projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: MetacelloNullRecordingMCSpecLoader new. ^ project! ! !MetacelloSpecTestCase methodsFor: '*metacello-testsmccore' stamp: 'dkh 6/12/2012 15:41:23.319'! repositoriesSpec ^ self project repositoriesSpec! ! !MetacelloSpecTestCase methodsFor: '*metacello-testsmccore' stamp: 'dkh 6/12/2012 15:41:23.319'! repositorySpec ^ self project repositorySpec! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! valueHolderSpec ^ self project valueHolderSpec! ! !MetacelloSpecTestCase methodsFor: 'specs' stamp: 'dkh 5/4/2012 20:37:12'! versionSpec ^ self project versionSpec! ! !MetacelloMCValueHolderSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloValueHolderSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testValueHolderMergeSpec | valueHolderA valueHolderB valueHolder | valueHolderA := self valueHolderSpec value: 'an Object'; yourself. valueHolderB := self valueHolderSpec value: 1.1; yourself. valueHolder := valueHolderA mergeSpec: valueHolderB. self assert: valueHolder value = 1.1! ! !MetacelloValueHolderSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testValueHolderSpec | valueHolder | valueHolder := self valueHolderSpec value: 'an Object'; yourself. self assert: valueHolder value = 'an Object'! ! !MetacelloMCVersionSpecTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectClass ^ MetacelloMCProject! ! !MetacelloMCVersionSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMCVersionMergeSpec | versionA versionB version repository package group projectReferenceSpec | versionA := self versionSpec blessing: #'baseline'; versionString: '1.0'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. versionA packages merge: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; yourself); merge: (self groupSpec name: 'Platform'; includes: 'Core'; yourself); merge: (self projectReferenceSpec name: 'Project'; projectReference: (self projectSpec name: 'Project'; projectPackage: self project packageSpec; className: 'ConfigurationOfProjectA'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself)); yourself. versionB := self versionSpec blessing: #'release'; versionString: '1.1'; repository: 'http://example.com/repository' username: 'DaleHenrichs' password: 'secret'; repository: '/opt/gemstone/repo'; yourself. versionB packages merge: (self packageSpec name: 'Package'; requires: 'AndAnotherPackage'; yourself); merge: (self groupSpec name: 'Platform'; includes: 'Tests'; yourself); merge: (self projectReferenceSpec name: 'Project'; projectReference: (self projectSpec name: 'Project'; projectPackage: self project packageSpec; className: 'ConfigurationOfProjectA'; repository: 'http://example.com/repository' username: 'DaleHenrichs' password: 'secret'; repository: '/opt/gemstone/repo'; yourself)); yourself. version := versionA mergeSpec: versionB. self assert: version blessing value = #'release'. self assert: version versionString value = '1.1'. repository := version repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := version repositories map at: '/opt/gemstone/repo' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := version repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'. package := version packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. projectReferenceSpec := version packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. self assert: projectReferenceSpec projectName = 'Project'. repository := projectReferenceSpec repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := projectReferenceSpec repositories map at: '/opt/gemstone/repo' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := projectReferenceSpec repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'DaleHenrichs'. self assert: repository password = 'secret'. group := version packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). self assert: (group includes includes: 'Tests')! ! !MetacelloMCVersionSpecTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testMCVersionSpec | version projectReferenceSpec group package repository | version := self versionSpec blessing: #'baseline'; versionString: '1.0'; repository: 'http://example.com/repository' username: 'dkh' password: 'password'; repository: '/opt/gemstone/repository'; yourself. version packages add: (self packageSpec name: 'Package'; requires: 'AnotherPackage'; includes: 'IncludedPackage'; answers: #(#('preload' 'preload answer') #('postload' 'postload answer')); file: 'Package-dkh.1'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself); add: (self groupSpec name: 'Platform'; includes: 'Core'; yourself); add: (self projectSpec name: 'Project'; className: 'ConfigurationOfProjectA'; versionString: #'stable'; loads: #('MyPackage' 'MyTests'); preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself); yourself. self assert: version blessing value = #'baseline'. self assert: version versionString value = '1.0'. repository := version repositories map at: '/opt/gemstone/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'directory'. repository := version repositories map at: 'http://example.com/repository' ifAbsent: [ self assert: false ]. self assert: repository type = 'http'. self assert: repository username = 'dkh'. self assert: repository password = 'password'. package := version packages packageNamed: 'Package' ifAbsent: [ self assert: false ]. self assert: package name = 'Package'. group := version packages packageNamed: 'Platform' ifAbsent: [ self assert: false ]. self assert: (group includes includes: 'Core'). projectReferenceSpec := version packages packageNamed: 'Project' ifAbsent: [ self assert: false ]. self assert: projectReferenceSpec projectName = 'Project'. self assert: projectReferenceSpec versionString = #'stable'. version projectDo: [ :prjct | prjct == projectReferenceSpec ] packageDo: [ :pkg | pkg == package ] groupDo: [ :grp | grp == group ]! ! !MetacelloVersionSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersionMergeSpec | versionA versionB version | versionA := self versionSpec blessing: #'baseline'; versionString: '1.0'; description: 'A description'; author: 'dkh'; timestamp: '1/24/2012 09:59'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. versionB := self versionSpec blessing: #'release'; versionString: '1.1'; description: 'A FULL description'; author: 'DaleHenrichs'; timestamp: '1/24/2012 10:22'; preLoadDoIt: #'preLoadDoItB'; postLoadDoIt: #'postLoadDoItB'; yourself. version := versionA mergeSpec: versionB. self assert: version blessing value = #'release'. self assert: version versionString value = '1.1'. self assert: version description value = 'A FULL description'. self assert: version author value = 'DaleHenrichs'. self assert: version timestamp value = '1/24/2012 10:22'. self assert: version preLoadDoIt value == #'preLoadDoItB'. self assert: version postLoadDoIt value == #'postLoadDoItB'! ! !MetacelloVersionSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersionSpec | version | version := self versionSpec blessing: #'baseline'; versionString: '1.0'; description: 'A description'; author: 'dkh'; timestamp: '1/24/2012 09:59'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. self assert: version blessing value = #'baseline'. self assert: version versionString value = '1.0'. self assert: version description value = 'A description'. self assert: version author value = 'dkh'. self assert: version timestamp value = '1/24/2012 09:59'. self assert: version preLoadDoIt value == #'preLoadDoIt'. self assert: version postLoadDoIt value == #'postLoadDoIt'. self should: [ version preLoadDoIt: '' ] raise: Error. self should: [ version postLoadDoIt: '' ] raise: Error! ! !MetacelloVersionSpecTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testVersionSpecCreateVersion | spec version | spec := self versionSpec blessing: #'baseline'; versionString: '1.0'; description: 'A description'; author: 'dkh'; timestamp: '1/24/2012 09:59'; preLoadDoIt: #'preLoadDoIt'; postLoadDoIt: #'postLoadDoIt'; yourself. version := spec createVersion. self assert: version class == spec versionClass. self assert: version spec == spec. self assert: version versionNumber asString = '1.0'. self assert: version blessing = #'baseline'. self assert: version versionString = '1.0'. self assert: version description = 'A description'. self assert: version author = 'dkh'. self assert: version timestamp = '1/24/2012 09:59'! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! cacheNil ^MetacelloPlatform current stackCacheFor: #cacheNil at: #key doing: [:cache | | value | cache at: #key put: nil. self cacheNil ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! cachedReturnOfValue ^MetacelloPlatform current stackCacheFor: #cached at: #key doing: [:cache | | value | value := cache at: #x ifAbsent: [ 0 ]. value > 5 ifTrue: [ cache at: #key put: value ] ifFalse: [ value := value + 1. cache at: #x put: value ]. self cachedReturnOfValue ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! collectionCacheKey | key | key := Array with: self class with: (Array with: #x with: #y). ^MetacelloPlatform current stackCacheFor: #collection at: key doing: [:cache | | value | value := cache at: #x ifAbsent: [ 0 ]. value > 5 ifTrue: [ cache at: key put: value ] ifFalse: [ value := value + 1. cache at: #x put: value ]. self collectionCacheKey ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! directReturnOfValue ^MetacelloPlatform current stackCacheFor: #direct at: #key doing: [:cache | | value | value := cache at: #x ifAbsent: [ 0 ]. value > 5 ifTrue: [ ^value ]. value := value + 1. cache at: #x put: value. self directReturnOfValue ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! mixedStack ^MetacelloPlatform current stackCacheFor: #mixed at: #key doing: [:cache | | value | value := cache at: #x ifAbsent: [ 0 ]. value > 3 ifTrue: [ ^value ]. value := value + 1. cache at: #x put: value. self assert: self directReturnOfValue == 6. self assert: self mixedStackCall == 4. self mixedStack ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! mixedStackCall ^MetacelloPlatform current stackCacheFor: #mixedStack at: #key doing: [:cache | | value | value := cache at: #x ifAbsent: [ 0 ]. value > 3 ifTrue: [ ^value ]. value := value + 1. cache at: #x put: value. self assert: self cachedReturnOfValue == 6. self mixedStackCall ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCacheNil | x | self assert: (x := self cacheNil) == nil! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCachedReturn | x | self assert: (x := self cachedReturnOfValue) == 6! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testClearCache MetacelloPlatform current stackCacheFor: #cached at: #key doing: [:cache | | value | cache at: #x put: 1. self assert: (cache at: #x ifAbsent: []) == 1. MetacelloClearStackCacheNotification signal. self assert: (cache at: #x ifAbsent: []) == nil ] ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testCollectionCacheKey | x | self assert: (Array with: self class with: (Array with: 'faux' with: 'foobar')) = (Array with: self class with: (Array with: 'faux' with: 'foobar')). self deny: (Array with: self class with: (Array with: 'faux' with: 'foobar')) = (Array with: self class with: (Array with: 'faux' with: 'foobar' with: 'foobaz')). self assert: (x := self collectionCacheKey) == 6. ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testDefaultDictionary | defaultDictionary | defaultDictionary := Dictionary new. MetacelloPlatform current useStackCacheDuring: [:dict | self cachedReturnOfValue; collectionCacheKey; cacheNil; directReturnOfValue; mixedStack; mixedStackCall ] defaultDictionary: defaultDictionary. self assert: (defaultDictionary includesKey: #cached). self assert: (defaultDictionary includesKey: #cacheNil). self assert: (defaultDictionary includesKey: #collection). self assert: (defaultDictionary includesKey: #direct). self assert: (defaultDictionary includesKey: #mixed). self assert: (defaultDictionary includesKey: #mixedStack). ! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testDirectReturn | x | self assert: (x := self directReturnOfValue) == 6! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testMixedStack | x | self assert: (x := self mixedStack) == 4! ! !MetacelloStackCacheTestCase methodsFor: 'tests' stamp: 'dkh 5/4/2012 20:37:12'! testPrimeStackCache | cached collection cacheNil direct mixed mixedStack block defaultDictionary | defaultDictionary := Dictionary new. block := [ cached := Dictionary new. collection := Dictionary new. cacheNil := Dictionary new. direct := Dictionary new. mixed := Dictionary new. mixedStack := Dictionary new. MetacelloPlatform current useStackCacheDuring: [ :dict | self cachedReturnOfValue ] defaultDictionary: cached. MetacelloPlatform current useStackCacheDuring: [ :dict | self collectionCacheKey ] defaultDictionary: collection. MetacelloPlatform current useStackCacheDuring: [ :dict | self cacheNil ] defaultDictionary: cacheNil. MetacelloPlatform current useStackCacheDuring: [ :dict | self directReturnOfValue ] defaultDictionary: direct. MetacelloPlatform current useStackCacheDuring: [ :dict | self mixedStack ] defaultDictionary: mixed. MetacelloPlatform current useStackCacheDuring: [ :dict | self mixedStackCall ] defaultDictionary: mixedStack ]. "Test without priming stack cache ... each defaultDictionary is used independently" block value. self assert: ((cached at: #cached) at: #key) == 6. self assert: ((collection at: #collection) at: #x) == 6. self assert: ((cacheNil at: #cacheNil) at: #key) == nil. self assert: ((direct at: #direct) at: #x) == 6. self assert: ((mixed at: #cached) at: #key) == 6. self assert: ((mixed at: #mixed) at: #x) == 4. self assert: ((mixed at: #mixedStack) at: #x) == 4. self assert: ((mixed at: #direct) at: #x) == 6. self assert: ((mixedStack at: #cached) at: #key) == 6. self assert: ((mixedStack at: #mixedStack) at: #x) == 4. "Prime stack cache with defaultDictionary .... all values should be stored there instead of individual defaults." MetacelloPlatform current primeStackCacheWith: defaultDictionary doing: block. self assert: ((defaultDictionary at: #cached) at: #key) == 6. self assert: ((defaultDictionary at: #collection) at: #x) == 6. self assert: ((defaultDictionary at: #cacheNil) at: #key) == nil. self assert: ((defaultDictionary at: #direct) at: #x) == 6. self assert: ((defaultDictionary at: #cached) at: #key) == 6. self assert: ((defaultDictionary at: #mixed) at: #x) == 4. self assert: ((defaultDictionary at: #mixedStack) at: #x) == 4. self assert: ((defaultDictionary at: #direct) at: #x) == 6. self assert: ((defaultDictionary at: #cached) at: #key) == 6. self assert: ((defaultDictionary at: #mixedStack) at: #x) == 4! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! alternatRepositoryName ^#'Metacello_Dev_Cycle_Alternate_Repository'! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/12/2012 09:51'! baseline10Issue125AddSourceString ^ 'baseline100: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. spec for: #(#''pharo1.0.x'' #''pharo1.3.x'' ) do: [ spec blessing: #''baseline''. spec package: ''GeauxFaux'' with: [ spec includes: #(''GoferFaux'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GoferBar'' with: [ spec repositories: [ spec repository: ''http://example.com/repo1''; repository: ''http://example.com/repo2'' ]; preLoadDoIt: #''preloadGoferBar''. ]; package: ''GoferBeau'' with: [ spec supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''GoferBeau.pharo''; postLoadDoIt: #''postloadGoferBar''. ]; package: ''GoferFaux'' with: [ spec repository: ''http://example.com/repo2''. ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/12/2012 09:56'! baseline10Issue125ModifySourceString ^ 'baseline100: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. spec for: #(#''pharo1.0.x'' #''pharo1.3.x'' ) do: [ spec blessing: #''baseline''. spec package: ''GeauxFaux'' with: [ spec requires: #(''GoferFoo'' ); includes: #(''GoferFaux'' ); repository: ''http://www.squeaksource.com/CommandShell''. ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GoferBar'' with: [ spec repositories: [ spec repository: ''http://example.com/repo1''; repository: ''http://example.com/repo2'' ]; preLoadDoIt: #''preloadGoferBar''. ]; package: ''GoferBeau'' with: [ spec supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''GoferBeau.pharo''; postLoadDoIt: #''postloadGoferBar''. ]; package: ''GoferFaux'' with: [ spec repository: ''http://example.com/repo2''. ]; package: ''GoferFoo''. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline11SourceString ^ 'baseline11: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. spec for: #''pharo'' do: [ spec package: ''GoferFoo''; package: ''GoferBar'' with: [ spec requires: #(''GoferFoo'' ). ]. spec group: ''UI'' with: #(''GoferBar'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/12/2012 16:26'! baseline12SourceString ^ 'baseline12: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). spec for: #''nested'' do: [ spec package: ''GoferFoo''. spec group: ''UI'' with: #(''GoferFoo'' ). ]. ]. spec for: #''outer'' do: [ spec package: ''GoferFaux'' with: [ spec requires: #(''GoferFoo'' ). ]. spec for: #''nested'' do: [ spec package: ''GoferBeau''. ]. ]. spec for: #''other'' do: [ spec package: ''GoferBeau'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ). ]; package: ''GoferBar'' with: [ spec requires: #(''GeauxFaux'' ). ]. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/14/2012 09:57'! baseline14SourceString ^ 'baseline14: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec package: ''GeauxFaux''; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ). ]. spec for: #''platform'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferBar''. ]. spec for: #''platform1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GeauxBeau''. ]. spec for: #''platform2.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFaux''. ]. spec for: #''platform2.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFoo''; package: ''GoferFaux'' with: [ spec requires: #(''GoferFoo'' ). ]. ]. spec for: #''platform3.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFoo''. ]. spec for: #''platform3.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFoo'' with: [ spec requires: #(''GoferFaux'' ). ]; package: ''GoferFaux''. ]. spec for: #''platform4.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFoo''. ]. spec for: #''platform4.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Configuration_Test_Repository'' ]. spec package: ''GoferFoo'' with: [ spec requires: #(''GoferFaux'' ). ]; package: ''GoferFaux''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! complexBaseline11SourceString ^ 'baseline11: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ); includes: #(''GoferFaux'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GoferBar'' with: [ spec repositories: [ spec repository: ''http://example.com/repo1''; repository: ''http://example.com/repo2'' ]; preLoadDoIt: #''preloadGoferBar''. ]; package: ''GoferBeau'' with: [ spec supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''GoferBeau.pharo''; postLoadDoIt: #''postloadGoferBar''. ]; package: ''GoferFaux'' with: [ spec repository: ''http://example.com/repo2''. ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! complexBaseline11SourceString2 ^ 'baseline11: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ''GoferFoo'' ); includes: #(''GoferFaux'' ). ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GoferBar'' with: [ spec repositories: [ spec repository: ''http://example.com/repo1''; repository: ''http://example.com/repo2'' ]; preLoadDoIt: #''preloadGoferBar''. ]; package: ''GoferBeau'' with: [ spec supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''GoferBeau.pharo''; postLoadDoIt: #''postloadGoferBar''. ]; package: ''GoferFaux'' with: [ spec repository: ''http://example.com/repo2''. ]; package: ''GoferFoo''. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! complexBaseline11SourceString3 ^ 'baseline11: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec repository: ''dictionary://Metacello_Dev_Cycle_Repository''. spec project: ''MetacelloTestConfigurationOfFoo'' with: [ spec className: ''MetacelloTestConfigurationOfFoo''; versionString: #''bleedingEdge''; repository: ''dictionary://Metacello_Dev_Cycle_Repository'' ]. spec package: ''GeauxFaux'' with: [ spec requires: #(''MetacelloTestConfigurationOfFoo'' ); includes: #(''GoferFaux'' ); repository: ''http://www.squeaksource.com/CommandShell''. ]; package: ''GeauxBeau'' with: [ spec requires: #(''GeauxFaux'' ). ]; package: ''GoferBar'' with: [ spec repositories: [ spec repository: ''http://example.com/repo1''; repository: ''http://example.com/repo2'' ]; preLoadDoIt: #''preloadGoferBar''. ]; package: ''GoferBeau'' with: [ spec supplyingAnswers: #( #( ''list of packages'' ''Kernel* Collection*'' ) ); file: ''GoferBeau.pharo''; postLoadDoIt: #''postloadGoferBar''. ]; package: ''GoferFaux'' with: [ spec repository: ''http://example.com/repo2''. ]. spec group: ''default'' with: #(''Core'' ); group: ''Core'' with: #(''GeauxFaux'' ); group: ''Tests'' with: #(''GeauxBeau'' ); group: ''Core Tests'' with: #(''Core'' ''Tests'' ). ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! configurationName ^#'ConfigurationOfMetacello_Dev_Cycle'! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 6/12/2012 15:41:23.319'! create10Baseline MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxFaux' 'GeauxBeau') repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} dependencies: {('GeauxFaux' -> #('MetacelloTestConfigurationOfFoo')). ('GeauxBeau' -> #('GeauxFaux'))} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux')). ('Tests' -> #('GeauxBeau')). ('Core Tests' -> #('Core' 'Tests'))}! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 10:59'! create10BaselineIssue115 (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline100:' inCategory: 'baselines' forVersion: '1.0-baseline'; addSection: #'common' repository: nil requiredProjects: #() packages: #('GoferFoo' 'GoferBar') dependencies: {('GoferBar' -> #('GoferFoo'))} groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'nested' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo') dependencies: {('GoferFoo' -> #('MetacelloTestConfigurationOfFoo'))} includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 09:44'! create10BaselineIssue125 (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline100:' inCategory: 'baselines' forVersion: '1.0-baseline'; addSection: #'common' repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxFaux' 'GeauxBeau') repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} dependencies: {('GeauxFaux' -> #('MetacelloTestConfigurationOfFoo')). ('GeauxBeau' -> #('GeauxFaux'))} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux')). ('Tests' -> #('GeauxBeau')). ('Core Tests' -> #('Core' 'Tests'))} versionSpecsDo: [ :versionSpec | versionSpec blessing: #'baseline' ]; commitMethod; modifyVersionMethodForVersion: '1.0-baseline' versionSpecsDo: [ :attribute :versionSpec | true ]; addSection: (MetacelloMethodSectionPath with: #(#'pharo1.0.x' #'pharo1.3.x')) repository: nil requiredProjects: #() packages: #('GeauxFaux' 'GeauxBeau' 'GoferBar' 'GoferBeau' 'GoferFaux') dependencies: {('GeauxBeau' -> #('GeauxFaux'))} includes: {('GeauxFaux' -> #('GoferFaux'))} files: {('GoferBeau' -> 'GoferBeau.pharo')} repositories: {('GoferBar' -> #('http://example.com/repo1' 'http://example.com/repo2')). ('GoferFaux' -> #('http://example.com/repo2'))} preLoadDoIts: {('GoferBar' -> #'preloadGoferBar')} postLoadDoIts: {('GoferBeau' -> #'postloadGoferBar')} supplyingAnswers: {('GoferBeau' -> {{'list of packages'. 'Kernel* Collection*'}})} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux')). ('Tests' -> #('GeauxBeau')). ('Core Tests' -> #('Core' 'Tests'))} versionSpecsDo: [ :versionSpec | versionSpec blessing: #'baseline' ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 11:17'! create10VersionIssue115 MetacelloConfigurationResource projectAttributes: #(#'nested'). self create10BaselineIssue115. (Smalltalk at: self configurationName) compile: self projectSourceString classified: 'cat'. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version10:' inCategory: 'versions' forVersion: '1.0'; importFrom: '1.0-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 16:43'! create11Baseline MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxFaux') repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} dependencies: {('GeauxFaux' -> #('MetacelloTestConfigurationOfFoo'))} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux'))}! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/13/2012 12:15'! create12Baseline MetacelloToolBox createBaseline: '1.2-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #() packages: #('GeauxFaux' 'GeauxBeau') repositories: #() dependencies: {('GeauxBeau' -> #('GeauxFaux'))} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux'))}! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/14/2012 09:53'! create14Baseline MetacelloConfigurationResource projectAttributes: #(#'platform' #'platform1.x' #'platform2.x'). self create12Baseline. (Smalltalk at: self configurationName) compile: self projectSourceString classified: 'cat'. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline14:' inCategory: 'baselines' forVersion: '1.4-baseline'; addSectionsFrom: '1.2-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod; modifyVersionMethodForVersion: '1.4-baseline'; addSection: #'platform' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferBar') dependencies: {} includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform1.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxBeau') dependencies: #() includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform2.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFaux') dependencies: #() includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform2.1.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo' 'GoferFaux') dependencies: {('GoferFaux' -> #('GoferFoo'))} includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform3.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo') dependencies: #() includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform3.1.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo' 'GoferFaux') dependencies: {('GoferFoo' -> #('GoferFaux'))} includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform4.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo') dependencies: #() includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'platform4.1.x' repository: nil requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GoferFoo' 'GoferFaux') dependencies: {('GoferFoo' -> #('GoferFaux'))} includes: #() files: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {'dictionary://Metacello_Configuration_Test_Repository'})} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #() versionSpecsDo: [ :versionSpec | ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/14/2012 09:51'! create14Version self create14Baseline. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version14:' inCategory: 'versions' forVersion: '1.4'; importFrom: '1.4-baseline' projectAttributes: #(#'common' #'platform' #'platform1.x') inactiveAttributes: #(#(#'platform2.x' #'platform2.1.x') #(#'platform3.x' #'platform3.1.x')) updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/13/2012 15:13'! create15Baseline MetacelloConfigurationResource projectAttributes: #(#'nested' #'outer' #'other'). self create10Baseline. (Smalltalk at: self configurationName) compile: self projectSourceString classified: 'cat'. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline15:' inCategory: 'baselines' forVersion: '1.5-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod; modifyVersionMethodForVersion: '1.5-baseline'; addSection: #(#(#'outer' #'nested')) repository: nil requiredProjects: #() packages: #('GoferFaux') dependencies: #() groups: #() versionSpecsDo: [ :versionSpec | ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 6/12/2012 15:41:23.319'! createComplex11Baseline MetacelloToolBox createBaseline: '1.1-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('GeauxFaux' 'GeauxBeau' 'GoferBar' 'GoferBeau' 'GoferFaux') dependencies: {('GeauxFaux' -> #('MetacelloTestConfigurationOfFoo')). ('GeauxBeau' -> #('GeauxFaux'))} includes: {('GeauxFaux' -> #('GoferFaux'))} files: {('GoferBeau' -> 'GoferBeau.pharo')} repositories: {('GoferBar' -> #('http://example.com/repo1' 'http://example.com/repo2')). ('GoferFaux' -> #('http://example.com/repo2')). ('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} preLoadDoIts: {('GoferBar' -> #'preloadGoferBar')} postLoadDoIts: {('GoferBeau' -> #'postloadGoferBar')} supplyingAnswers: {('GoferBeau' -> {{'list of packages'. 'Kernel* Collection*'}})} groups: {('default' -> #('Core')). ('Core' -> #('GeauxFaux')). ('Tests' -> #('GeauxBeau')). ('Core Tests' -> #('Core' 'Tests'))}! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 16:19'! createNested12Baseline MetacelloConfigurationResource projectAttributes: #(#'nested' #'outer' #'other'). self create10Baseline. (Smalltalk at: self configurationName) compile: self projectSourceString classified: 'cat'. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline12:' inCategory: 'baselines' forVersion: '1.2-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod; modifyVersionMethodForVersion: '1.2-baseline'; addSection: #(#(#'common') #(#'nested')) asMetacelloAttributePath repository: nil requiredProjects: #() packages: #('GoferFoo') dependencies: {} groups: {('UI' -> #('GoferFoo'))} versionSpecsDo: [ :versionSpec | ]; addSection: #'outer' repository: nil requiredProjects: #() packages: #('GoferFaux') dependencies: {('GoferFaux' -> #('GoferFoo'))} groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #(#(#'outer') #(#'nested')) repository: nil requiredProjects: #() packages: #('GoferBeau') dependencies: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'other' repository: nil requiredProjects: #() packages: #('GoferBeau' 'GoferBar') dependencies: {('GoferBeau' -> #('MetacelloTestConfigurationOfFoo')). ('GoferBar' -> #('GeauxFaux'))} groups: #() versionSpecsDo: [ :versionSpec | ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'utility' stamp: 'dkh 9/12/2012 16:54'! createNested13Baseline MetacelloConfigurationResource projectAttributes: #(#'nested' #'outer' #'other'). self create11Baseline. (Smalltalk at: self configurationName) compile: self projectSourceString classified: 'cat'. (MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline13:' inCategory: 'baselines' forVersion: '1.3-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod; modifyVersionMethodForVersion: '1.3-baseline'; addSection: #(#(#'common') #(#'nested')) asMetacelloAttributePath repository: nil requiredProjects: #() packages: #('GoferFoo') dependencies: {} groups: {('UI' -> #('GoferFoo'))} versionSpecsDo: [ :versionSpec | ]; addSection: #'outer' repository: nil requiredProjects: #() packages: #('GoferFaux' 'GeauxBeau') dependencies: {('GoferFaux' -> #('GoferFoo'))} groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #(#(#'outer') #(#'nested')) repository: nil requiredProjects: #() packages: #('GoferBeau') dependencies: #() groups: #() versionSpecsDo: [ :versionSpec | ]; addSection: #'other' repository: nil requiredProjects: #() packages: #('GoferBeau' 'GoferBar' 'GeauxBeau') dependencies: {('GoferBeau' -> #('MetacelloTestConfigurationOfFoo')). ('GoferBar' -> #('GeauxFaux'))} groups: #() versionSpecsDo: [ :versionSpec | ]; commitMethod! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! projectSourceString ^'project | constructor | project := MetacelloMCProject new. project projectAttributes: MetacelloConfigurationResource projectAttributes. MetacelloVersionConstructor on: self project: project. project loadType: #linear. ^project '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! repositoryName ^#'Metacello_Dev_Cycle_Repository'! ! !MetacelloToolBoxAPITestCase methodsFor: 'running' stamp: 'ChristopheDemarey 4/29/2013 16:31'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. ^ MetacelloPlatform current suspendSystemUpdateEventsDuring: [ super runCase ] ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ]! ! !MetacelloToolBoxAPITestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! setUp | repo gofer | super setUp. repo := MCDictionaryRepository new. repo description: 'dictionary://', self repositoryName asString. self tempRepositories add: repo. Smalltalk at: self repositoryName put: repo. repo := MCDictionaryRepository new. repo description: 'dictionary://', self alternatRepositoryName asString. self tempRepositories add: repo. Smalltalk at: self alternatRepositoryName put: repo. Smalltalk at: self configurationName ifPresent: [:cl | cl removeFromSystem ]. repo := MetacelloConfigurationResource current monticelloRepository. self tempRepositories add: repo. Smalltalk at: #'Metacello_Configuration_Test_Repository' put: repo. gofer := Gofer new repository: repo; package: 'MetacelloTestConfigurationOfProjectFee'; metacelloLoad. repo := MetacelloMonticelloResource current monticelloRepository. repo description: 'dictionary://Metacello_Gofer_Test_Repository'. self tempRepositories add: repo. Smalltalk at: #'Metacello_Gofer_Test_Repository' put: repo. (Smalltalk at: #MetacelloTestConfigurationOfProjectFee) new project load: '4.0'. ! ! !MetacelloToolBoxAPITestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDown | aGofer | super tearDown. aGofer := Gofer new. self tearDownPackages: aGofer. aGofer references notEmpty ifTrue: [ aGofer metacelloUnload ]. Smalltalk removeKey: self repositoryName ifAbsent: [ ]. Smalltalk removeKey: self alternatRepositoryName ifAbsent: [ ]. Smalltalk removeKey: #'Metacello_Gofer_Test_Repository' ifAbsent: []. Smalltalk removeKey: #'Metacello_Configuration_Test_Repository' ifAbsent: []. Smalltalk at: self configurationName ifPresent: [ :cl | cl removeFromSystem ]. self tempRepositories do: [:repo | MCRepositoryGroup default removeRepository: repo ]. (self hasPackage: self configurationName asString) ifTrue: [ (Gofer new) package: self configurationName asString; metacelloUnload ]. MetacelloConfigurationResource projectAttributes: nil. ! ! !MetacelloToolBoxAPITestCase methodsFor: 'running' stamp: 'dkh 6/12/2012 15:41:23.319'! tearDownPackages: aGoferInstance (self hasPackage: 'GoferFoo') ifTrue: [ aGoferInstance package: 'GoferFoo' ]. (self hasPackage: 'GoferBar') ifTrue: [ aGoferInstance package: 'GoferBar' ]. (self hasPackage: 'GoferFaux') ifTrue: [ aGoferInstance package: 'GoferFaux' ]. (self hasPackage: 'GoferBeau') ifTrue: [ aGoferInstance package: 'GoferBeau' ]. (self hasPackage: 'GeauxFaux') ifTrue: [ aGoferInstance package: 'GeauxFaux' ]. (self hasPackage: 'GeauxBeau') ifTrue: [ aGoferInstance package: 'GeauxBeau' ]. (self hasPackage: 'MetacelloTestConfigurationOfFoo') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfFoo' ]. (self hasPackage: 'MetacelloTestConfigurationOfProjectFee') ifTrue: [ aGoferInstance package: 'MetacelloTestConfigurationOfProjectFee' ]. ! ! !MetacelloToolBoxAPITestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! tempRepositories tempRepositories ifNil: [ tempRepositories := OrderedCollection new ]. ^tempRepositories! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddNestedSection2 "Add nested section as addition to existing version" | source | self createNested12Baseline. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #baseline12:) asString) = self baseline12SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddSection1 "Add section as part of creating a new version" | toolbox | self create10Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline11:' inCategory: 'baselines' forVersion: '1.1-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; addSection: #pharo repository: nil requiredProjects: #() packages: #('GoferFoo' 'GoferBar') dependencies: {('GoferBar' -> #('GoferFoo'))} groups: {('UI' -> #('GoferBar'))} versionSpecsDo: [ :versionSpec | ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'baseline11:') = self baseline11SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testAddSection2 "Add section as addition to existing version" | toolbox | self create10Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'baseline11:' inCategory: 'baselines' forVersion: '1.1-baseline'; addSectionsFrom: '1.0-baseline' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod. toolbox modifyVersionMethodForVersion: '1.1-baseline'; addSection: #pharo repository: nil requiredProjects: #() packages: #('GoferFoo' 'GoferBar') dependencies: {('GoferBar' -> #('GoferFoo'))} groups: {('UI' -> #('GoferBar'))} versionSpecsDo: [ :versionSpec | ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'baseline11:') = self baseline11SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComplexCreateBaseline self createComplex11Baseline. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #baseline11:) = self complexBaseline11SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComplexModifyBaseline self createComplex11Baseline. MetacelloToolBox modifyVersion: '1.1-baseline' section: #common for: self configurationName asString repository: nil requiredProjects: #() packages: #('GoferFoo') dependencies: {'GeauxFaux' -> #('GoferFoo').} includes: #() files: #() repositories: #() preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #(). self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #baseline11:) = self complexBaseline11SourceString2! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComplexModifyBaselineWithRepositoryIssue157 | x | self createComplex11Baseline. MetacelloToolBox modifyVersion: '1.1-baseline' section: #'common' for: self configurationName asString repository: nil requiredProjects: #() packages: #() dependencies: #() includes: #() files: #() repositories: {('GeauxFaux' -> #('http://www.squeaksource.com/CommandShell'))} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #(). self assert: (x := (Smalltalk at: self configurationName) sourceCodeAt: #'baseline11:') = self complexBaseline11SourceString3! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testComplexNullModifyBaseline self createComplex11Baseline. MetacelloToolBox modifyVersion: '1.1-baseline' section: #common for: self configurationName asString repository: nil requiredProjects: #() packages: #() dependencies: #() includes: #() files: #() repositories: #() preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #(). self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #baseline11:) = self complexBaseline11SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/7/2012 14:00'! testImportFrom1 | toolbox | self create10Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version10:' inCategory: 'versions' forVersion: '1.0'; importFrom: '1.0-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version10:') = self version10SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/12/2012 16:40'! testImportFrom2 | toolbox source | self createNested12Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version12:' inCategory: 'versions' forVersion: '1.2'; importFrom: '1.2-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. attributeOrPath = #(#(#'common') #(#'nested')) asMetacelloAttributePath ifTrue: [ versionSpec description: 'nested for:do: section' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version12:') asString) = self version12SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 16:06'! testImportFrom3 "change order of project attributes...i.e., not reversed which is default" | toolbox source | self createNested13Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version13:' inCategory: 'versions' forVersion: '1.3'; importFrom: '1.3-baseline' projectAttributes: #(#'common' #'nested' #'outer' #'other') inactiveAttributes: #() updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. attributeOrPath = #(#(#'common') #(#'nested')) asMetacelloAttributePath ifTrue: [ versionSpec description: 'nested for:do: section' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version13:') asString) = self version13SourceString3! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 16:06'! testImportFrom4 "change order of project attributes relative to import3...i.e., not reversed which is default" | toolbox source | self createNested13Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version13:' inCategory: 'versions' forVersion: '1.3'; importFrom: '1.3-baseline' projectAttributes: #(#'common' #'other' #'nested' #'outer') inactiveAttributes: #() updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. attributeOrPath = #(#(#'common') #(#'nested')) asMetacelloAttributePath ifTrue: [ versionSpec description: 'nested for:do: section' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version13:') asString) = self version13SourceString4! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/14/2012 09:58'! testImportFrom5 "#platform4 is left untouched ..." self create14Version. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'baseline14:') asString = self baseline14SourceString. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version14:') asString = self version14SourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 15:15'! testImportFrom6A | toolbox source | self create15Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version15:' inCategory: 'versions' forVersion: '1.5'; importFrom: '1.5-baseline' updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version15:') asString) = self version15SourceStringA! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 19:07'! testImportFrom6B | toolbox source | self create15Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version15:' inCategory: 'versions' forVersion: '1.5'; importFrom: '1.5-baseline' projectAttributes: #(#'common') inactiveAttributes: #() updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version15:') asString) = self version15SourceStringB! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 16:06'! testImportFrom6C | toolbox source | self create15Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version15:' inCategory: 'versions' forVersion: '1.5'; importFrom: '1.5-baseline' projectAttributes: #(#'common' #'nested') inactiveAttributes: #() updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version15:') asString) = self version15SourceStringA! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 16:06'! testImportFrom6D | toolbox source | self create15Baseline. (toolbox := MetacelloToolBox configurationNamed: self configurationName asString) createVersionMethod: 'version15:' inCategory: 'versions' forVersion: '1.5'; importFrom: '1.5-baseline' projectAttributes: #(#'common' #'outer') inactiveAttributes: #() updateProjects: true updatePackages: true versionSpecsDo: [ :attributeOrPath :versionSpec | attributeOrPath == #'common' ifTrue: [ versionSpec blessing: #'development' ]. true ]; commitMethod. self assert: (source := ((Smalltalk at: self configurationName) sourceCodeAt: #'version15:') asString) = self version15SourceStringA! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/12/2012 14:18'! testIssue115CreateVersion self create10VersionIssue115. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version10:') = self version10Issue115CreateVersionSourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/12/2012 14:22'! testIssue115UpdateVersion self create10VersionIssue115. ((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '5.0') load. (MetacelloToolBox configurationNamed: self configurationName asString) updateVersionMethodForVersion: '1.0' updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version10:') = self version10Issue115UpdatedVersionSourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/12/2012 09:51'! testIssue125AddSection "https://github.com/dalehenrich/metacello-work/issues/125" self create10BaselineIssue125. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'baseline100:') = self baseline10Issue125AddSourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/12/2012 09:56'! testIssue125ModifySection "https://github.com/dalehenrich/metacello-work/issues/125" self create10BaselineIssue125. MetacelloToolBox modifyVersion: '1.0-baseline' section: (MetacelloMethodSectionPath with: #(#'pharo1.0.x' #'pharo1.3.x')) for: self configurationName asString repository: nil requiredProjects: #() packages: #('GoferFoo') dependencies: {('GeauxFaux' -> #('GoferFoo'))} includes: #() files: #() repositories: {('GeauxFaux' -> #('http://www.squeaksource.com/CommandShell'))} preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: #(). self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'baseline100:') = self baseline10Issue125ModifySourceString! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue5A | expectException issues validationError | expectException := false. [ MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #('MetacelloTestConfigurationOfFoo') repositories: #() dependencies: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} groups: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} ] on: MetacelloValidationFailure do: [ :ex | issues := ex issues. expectException := true ]. self assert: expectException. self assert: issues size == 1. validationError := issues at: 1. self assert: validationError reasonCode == #'versionCompositionError'. self assert: validationError callSite == #'validateProject:version:'! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue5B | expectException issues validationError | expectException := false. [ MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #() packages: #('MetacelloTestConfigurationOfFoo') repositories: #() dependencies: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} groups: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} ] on: MetacelloValidationFailure do: [ :ex | issues := ex issues. expectException := true ]. self assert: expectException. self assert: issues size == 1. validationError := issues at: 1. self assert: validationError reasonCode == #'versionCompositionError'. self assert: validationError callSite == #'validateProject:version:'! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue5C | expectException issues validationError | expectException := false. [ MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #() packages: #('MetacelloTestConfigurationOfFoo') repositories: #() dependencies: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} groups: #() ] on: MetacelloValidationFailure do: [ :ex | issues := ex issues. expectException := true ]. self assert: expectException. self assert: issues size == 1. validationError := issues at: 1. self assert: validationError reasonCode == #'versionCompositionError'. self assert: validationError callSite == #'validateProject:version:'! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testIssue5D | expectException issues validationError | expectException := false. [ MetacelloToolBox createBaseline: '1.0-baseline' for: self configurationName asString repository: 'dictionary://' , self repositoryName asString requiredProjects: #('MetacelloTestConfigurationOfFoo') packages: #() repositories: {('MetacelloTestConfigurationOfFoo' -> {('dictionary://' , self repositoryName asString)})} dependencies: #() groups: {('MetacelloTestConfigurationOfFoo' -> #('MetacelloTestConfigurationOfFoo'))} ] on: MetacelloValidationFailure do: [ :ex | issues := ex issues. expectException := true ]. self assert: expectException. self assert: issues size == 1. validationError := issues at: 1. self assert: validationError reasonCode == #'versionCompositionError'. self assert: validationError callSite == #'validateProject:version:'! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testReasonCodes self assert: (MetacelloToolBox descriptionForValidationReasonCode: #noVersionSpecified) = 'no version defined for the project reference or package. The version specified in the baseline or the latest version of the project or package in the repository will be used.'. self assert: (MetacelloToolBox descriptionForValidationReasonCode: #duplicateNames) = 'multiple independent definitions for an entity with same name (project, package, or group).'. ! ! !MetacelloToolBoxAPITestCase methodsFor: 'tests' stamp: 'dkh 9/13/2012 16:59'! testUpdateVersionMethod "see testImportFrom5" self create14Version. (MetacelloToolBox configurationNamed: self configurationName asString) updateVersionMethodForVersion: '1.4' projectAttributes: #(#'common' #'platform' #'platform2.x' #'platform2.1.x') updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version14:') asString = self version14SourceStringUpdated. ((Smalltalk at: #'MetacelloTestConfigurationOfFoo') project version: '5.0') load. (MetacelloToolBox configurationNamed: self configurationName asString) updateVersionMethodForVersion: '1.4' projectAttributes: #(#'common' #'platform' #'platform2.x' #'platform2.1.x') updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | true ]; commitMethod. self assert: ((Smalltalk at: self configurationName) sourceCodeAt: #'version14:') asString = self version14SourceStringUpdated50! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! version10Issue115CreateVersionSourceString ^ 'version10: spec spec for: #''common'' do: [ spec blessing: #''development''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.1''; package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. spec for: #''nested'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/12/2012 14:24'! version10Issue115UpdatedVersionSourceString ^ 'version10: spec spec for: #''common'' do: [ spec blessing: #''development''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.2''; package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. spec for: #''nested'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''5.0''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 6/12/2012 15:41:23.319'! version10SourceString ^'version10: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! version12SourceString ^ 'version12: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. spec for: #''nested'' do: [ spec description: ''nested for:do: section''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.1''. ]. ]. spec for: #''outer'' do: [ spec package: ''GoferFaux'' with: ''GoferFaux-tg.32''. spec for: #''nested'' do: [ spec package: ''GoferBeau'' with: ''GoferBeau-dkh.55''. ]. ]. spec for: #''other'' do: [ spec package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! version13SourceString3 ^ 'version13: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''. spec for: #''nested'' do: [ spec description: ''nested for:do: section''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.1''. ]. ]. spec for: #''outer'' do: [ spec package: ''GoferFaux'' with: ''GoferFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. spec for: #''nested'' do: [ spec package: ''GoferBeau'' with: ''GoferBeau-dkh.55''. ]. ]. spec for: #''other'' do: [ spec package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:54'! version13SourceString4 ^ 'version13: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''. spec for: #''nested'' do: [ spec description: ''nested for:do: section''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.1''. ]. ]. spec for: #''outer'' do: [ spec package: ''GoferFaux'' with: ''GoferFaux-tg.32''. spec for: #''nested'' do: [ spec package: ''GoferBeau'' with: ''GoferBeau-dkh.55''. ]. ]. spec for: #''other'' do: [ spec package: ''GoferBar'' with: ''GoferBar-lr.1''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:55'! version14SourceString ^ 'version14: spec spec for: #''common'' do: [ spec blessing: #''development''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''. ]. spec for: #''platform'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. spec for: #''platform1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. spec for: #''platform2.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFaux'' with: ''''. ]. spec for: #''platform2.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform3.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform3.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFaux'' with: ''''. ]. spec for: #''platform4.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform4.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo''; package: ''GoferFaux'' with: ''''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 07/19/2013 22:55'! version14SourceStringUpdated ^ 'version14: spec spec for: #''common'' do: [ spec blessing: #''development''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''. ]. spec for: #''platform'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. spec for: #''platform1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. spec for: #''platform2.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GoferFaux'' with: ''GoferFaux-tg.32''. ]. spec for: #''platform2.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.1''. ]. spec for: #''platform3.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform3.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFaux'' with: ''''. ]. spec for: #''platform4.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform4.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo''; package: ''GoferFaux'' with: ''''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/14/2012 10:04'! version14SourceStringUpdated50 ^ 'version14: spec spec for: #''common'' do: [ spec blessing: #''development''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''. ]. spec for: #''platform'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''5.0''. spec package: ''GoferBar'' with: ''GoferBar-lr.1''. ]. spec for: #''platform1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. spec for: #''platform2.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''5.0''. spec package: ''GoferFaux'' with: ''GoferFaux-tg.34''. ]. spec for: #''platform2.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: ''5.0''. spec package: ''GoferFoo'' with: ''GoferFoo-lr.2''. ]. spec for: #''platform3.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform3.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFaux'' with: ''''. ]. spec for: #''platform4.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo'' with: ''''. ]. spec for: #''platform4.1.x'' do: [ spec project: ''MetacelloTestConfigurationOfFoo'' with: #''bleedingEdge''. spec package: ''GoferFoo''; package: ''GoferFaux'' with: ''''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/13/2012 15:15'! version15SourceStringA ^ 'version15: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. spec for: #(#''outer'' #''nested'' ) do: [ spec package: ''GoferFaux'' with: ''GoferFaux-tg.32''. ]. '! ! !MetacelloToolBoxAPITestCase methodsFor: 'private' stamp: 'dkh 9/13/2012 19:23'! version15SourceStringB ^ 'version15: spec spec for: #''common'' do: [ spec blessing: #''development''. spec project: ''MetacelloTestConfigurationOfFoo'' with: ''4.0''. spec package: ''GeauxFaux'' with: ''GeauxFaux-tg.32''; package: ''GeauxBeau'' with: ''GeauxBeau-dkh.55''. ]. spec for: #(#''outer'' #''nested'' ) do: [ spec package: ''GoferFaux'' with: ''''. ]. '! ! !MetacelloTutorialTestCase methodsFor: 'private' stamp: 'dkh 10/17/2009 13:17'! project ^MetacelloTutorialConfig project! ! !MetacelloTutorialTestCase methodsFor: 'private' stamp: 'dkh 10/17/2009 13:18'! projectRefProject ^MetacelloProjectRefTutorialConfig project! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 1/2/2010 14:07'! test01 | project versionSpec | project := self project. versionSpec := (project version: '0.1') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.8'. self assert: versionSpec packages map keys size = 1. self assert: (versionSpec packages map at: 'Example-Core') repositorySpecs first description = 'http://www.example.com/Example'! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 1/2/2010 14:07'! test02 | project versionSpec | project := self project. versionSpec := (project version: '0.2') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.9'. self assert: versionSpec packages map keys size = 1. self assert: (versionSpec packages map at: 'Example-Core') repositorySpecs first description = 'http://www.example.com/Example'! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 1/2/2010 14:07'! test03 | project versionSpec | project := self project. versionSpec := (project version: '0.3') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.10'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.3'. self assert: versionSpec packages map keys size = 2. self assert: (versionSpec packages map at: 'Example-Core') repositorySpecs first description = 'http://www.example.com/Example'! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/13/2009 14:56'! test04 | project versionSpec | project := self project. versionSpec := (project version: '0.4') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.10'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.3'. self assert: versionSpec packages map keys size = 2. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/13/2009 15:36'! test05 | project versionSpec | project := self project. versionSpec := (project version: '0.5') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.11'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.3'. self assert: (versionSpec packages map at: 'Example-AddOn') file = 'Example-AddOn-anon.1'. self assert: versionSpec packages map keys size = 3. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:17'! test06 | project versionSpec loadedPackages loader | project := self project. versionSpec := (project version: '0.6') spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.12'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.3'. self assert: (versionSpec packages map at: 'Example-AddOn') file = 'Example-AddOn-anon.1'. self assert: versionSpec packages map keys size = 3. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := (project version: '0.6') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'Example-Core-anon.12') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.12'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.12'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:17'! test07 | project versionSpec loadedPackages version loader | project := self project. version := project version: '0.7'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.12'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.3'. self assert: (versionSpec packages map at: 'Example-AddOn') file = 'Example-AddOn-anon.1'. self assert: versionSpec packages map keys size = 3. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'Example-Core-anon.12') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.12'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.12'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:18'! test07a | project versionSpec loadedPackages version loader | project := self project. version := project version: '0.7-baseline'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests'. self assert: (versionSpec packages map at: 'Example-AddOn') file = 'Example-AddOn'. self assert: versionSpec packages map keys size = 3. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:18'! test08 | project versionSpec loadedPackages version loader | project := self project. version := project version: '0.8'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec packages map includesKey: 'Example-Core'). self assert: (versionSpec packages map at: 'Example-Core') file = 'Example-Core-anon.15'. self assert: (versionSpec packages map at: 'Example-Tests') file = 'Example-Tests-anon.6'. self assert: (versionSpec packages map at: 'Example-AddOn') file = 'Example-AddOn-anon.2'. self assert: versionSpec packages map keys size = 3. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 3. self assert: (loadedPackages indexOf: 'Example-Core-anon.15') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.6') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.2') > (loadedPackages indexOf: 'Example-Core-anon.15'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:19'! test10a | project versionSpec loadedPackages version loader | project := self project. version := project version: '1.0'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 2. self assert: (loadedPackages indexOf: 'Example-Core-anon.14') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') = 0. self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') = 0. ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:19'! test10b | project versionSpec loadedPackages version loader | project := self project. version := project version: '1.0'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load: 'ALL'. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 4. self assert: (loadedPackages indexOf: 'Example-Core-anon.14') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.3'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:19'! test10c | project versionSpec loadedPackages version loader | project := self project. version := project version: '1.0'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load: 'Tests'. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 4. self assert: (loadedPackages indexOf: 'Example-Core-anon.14') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.3'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 10:20'! test10d | project versionSpec loadedPackages version loader | project := self project. version := project version: '1.0'. self assert: version blessing == #baseline. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load: { 'Example-Tests'. 'Example-AddOnTests'. }. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 4. self assert: (loadedPackages indexOf: 'Example-Core-anon.14') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.3'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 17:28'! test11 | project versionSpec loadedPackages version loader | project := self project. version := project version: '1.1'. self assert: version blessing == #development. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load: 'ALL'. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 4. self assert: (loadedPackages indexOf: 'Example-Core-anon.15') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.4') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.4'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/13/2009 15:57'! test11Author | project | project := self project. self assert: ((project version: '1.1') author) = 'dkh'. ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'DaleHenrichs 11/3/2010 10:01'! test11Blessing | project | project := self project. self assert: ((project version: '1.1') blessing) == #development. self assert: ((project version: '0.5') blessing) == #release. self assert: ((project version: '1.0-baseline') blessing) == #baseline. self assert: (project latestVersion: #release) versionString = '0.6'. ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/13/2009 15:59'! test11Descripton | project | project := self project. self assert: ((project version: '1.1') description) = 'Example of a complete version specification'. ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/13/2009 15:58'! test11Timestamp | project | project := self project. self assert: ((project version: '1.1') timestamp) = '10/12/2009 09:26'. ! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'DaleHenrichs 12/21/2010 11:47'! test12 | project versionSpec | project := self project. versionSpec := (project version: '1.2') spec. self assert: (versionSpec packages map at: 'Example-Core') preLoadDoIt value == #preloadForCore. self assert: (versionSpec packages map at: 'Example-Core') postLoadDoIt value == #postloadForCore:package:. (project version: '1.2') load "execute without error"! ! !MetacelloTutorialTestCase methodsFor: 'tests' stamp: 'dkh 10/17/2009 17:29'! test13 | project versionSpec loadedPackages version platformPackage loader | project := self project. version := project version: '1.3'. self assert: version blessing == #development. versionSpec := version spec. self assert: (versionSpec repositories map at: 'http://www.example.com/Example') description = 'http://www.example.com/Example'. loader := version load: 'ALL'. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 5. self assert: (loadedPackages indexOf: 'Example-Core-anon.17') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.6') > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.6'). platformPackage := loadedPackages detect: [:pkgName | pkgName beginsWith: 'Example-Platform']. self assert: (loadedPackages indexOf: 'Example-Tests-anon.6') > (loadedPackages indexOf: platformPackage). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: platformPackage). self assert: (loadedPackages indexOf: platformPackage) > (loadedPackages indexOf: 'Example-Core-anon.17'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'TestRunner 10/19/2009 13:26'! testProjectRef07 | project loadedPackages loader | project := self projectRefProject. loader := (project version: '0.7') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 5. self assert: (loadedPackages indexOf: 'Example-Core-anon.12') > 0. self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.12'). self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.12'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Project-Core-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.3'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.12'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'dkh 7/18/2012 12:54'! testProjectRef10 | project loadedPackages loader | project := self projectRefProject. loader := (project version: '1.0') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 6. self assert: (loadedPackages indexOf: 'Example-Core-anon.14') > 0. self assert: (loadedPackages indexOf: 'Example-Tests-anon.3') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.11'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.14'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.3'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-AddOnTests-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Project-Core-anon.1')! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'DaleHenrichs 3/11/2010 21:15'! testProjectRef11 | project loadedPackages loader | project := self projectRefProject. loader := (project version: '1.1') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 8. self assert: (loadedPackages indexOf: 'Example-Core-anon.15') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-Tests-anon.4') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.4'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.15'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Project-Core-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.4'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-AddOnTests-anon.1'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'DaleHenrichs 3/11/2010 21:15'! testProjectRef12 | project loadedPackages loader | project := self projectRefProject. loader := (project version: '1.2') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 8. self assert: (loadedPackages indexOf: 'Example-Core-anon.16') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.16'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-Tests-anon.5') > (loadedPackages indexOf: 'Example-Core-anon.16'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.5'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.16'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Project-Core-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.5'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-AddOnTests-anon.1'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'DaleHenrichs 3/11/2010 21:16'! testProjectRef13 | project loadedPackages loader platformPackage | project := self projectRefProject. loader := (project version: '1.3') load. loadedPackages := loader loadedPackages asArray. self assert: loadedPackages size = 9. self assert: (loadedPackages indexOf: 'Example-Core-anon.17') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Example-Tests-anon.6') > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Example-AddOnTests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.6'). platformPackage := loadedPackages detect: [:pkgName | pkgName beginsWith: 'Example-Platform']. self assert: (loadedPackages indexOf: 'Example-Tests-anon.6') > (loadedPackages indexOf: platformPackage). self assert: (loadedPackages indexOf: 'Example-AddOn-anon.1') > (loadedPackages indexOf: platformPackage). self assert: (loadedPackages indexOf: platformPackage) > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-Core-anon.17'). self assert: (loadedPackages indexOf: 'Project-Core-anon.1') > (loadedPackages indexOf: 'Example-AddOn-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Project-Core-anon.1'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-Tests-anon.6'). self assert: (loadedPackages indexOf: 'Project-Tests-anon.1') > (loadedPackages indexOf: 'Example-AddOnTests-anon.1'). ! ! !MetacelloTutorialTestCase methodsFor: 'tests-project ref' stamp: 'dkh 07/09/2012 16:17'! testProjectRef14 | project version string | project := self projectRefProject. version := project version: '1.4'. self shouldnt: [ version packages ] raise: Error. self shouldnt: [ version projects ] raise: Error. self shouldnt: [ version groups ] raise: Error. string := (version packageNamed: 'Project-Core') printString. self assert: string = 'spec name: ''Project-Core''; requires: #(''Example Default'' ); includes: #(''Project-Extra'' ); file: ''Project-Core-anon.2''.'. string := (version packageNamed: 'Example Default') printString. self assert: string = 'spec name: ''Example Default''; className: ''MetacelloTutorialConfig''; versionString: ''1.3''; loads: #(''default'' ); file: ''Metacello-Tutorial''; repository: ''http://seaside.gemstone.com/ss/metacello''.'. string := (version packageNamed: 'Core') printString. self assert: string = 'spec name: ''Core''; includes: #(''default'' ).'. self shouldnt: [ (version packageNamed: 'Project-Core') requires ] raise: Error. self assert: ((version packageNamed: 'Example Default') repositoryDescriptions) asArray = #('http://seaside.gemstone.com/ss/metacello'). self shouldnt: [ (version packageNamed: 'default') requires ] raise: Error. self shouldnt: [ version packagesForSpecNamed: 'Core' ] raise: Error. self shouldnt: [ version load: 'Core' ] raise: Error. self shouldnt: [ version allPackagesForSpecNamed: 'Core' ] raise: Error. self shouldnt: [ version load: 'Example Default' ] raise: Error. self shouldnt: [ version allPackagesForSpecNamed: 'Example Default' ] raise: Error. self shouldnt: [ (version packageNamed: 'Example Default') version ] raise: Error! ! !MetacelloVersionQueryTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! exampleProject ^MetacelloVersionQueryExampleConfig new project! ! !MetacelloVersionQueryTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! masterProject ^MetacelloVersionQueryMasterConfig new project! ! !MetacelloVersionQueryTestCase methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! projectProject ^MetacelloVersionQueryProjectConfig new project! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10Groups | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Core' 'Tests' 'No UI' 'UI'). list := version groups. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10Load | loadedPackages project loader | project := self exampleProject. loader := (project version: '1.0-baseline') load: 'UI'. loadedPackages := loader loadedPackages asArray. self assert: (loadedPackages indexOf: 'Example-Core') > 0. self assert: (loadedPackages indexOf: 'Example-AddOn') > (loadedPackages indexOf: 'Example-Core'). self assert: (loadedPackages indexOf: 'Example-Tests') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-UI') > (loadedPackages indexOf: 'Example-AddOn'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-UI'). self assert: (loadedPackages indexOf: 'Example-TestsUI') > (loadedPackages indexOf: 'Example-Tests'). ! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10Packages | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-UI' 'Example-TestsUI'). list := version packages. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed01 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core'). list := version packagesForSpecNamed: 'Example-Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed02 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #(). list := version packagesForSpecNamed: 'None existent'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed03 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-UI' 'Example-TestsUI'). list := version packagesForSpecNamed: 'ALL'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed04 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' ). list := version packagesForSpecNamed: 'Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed05 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' ). list := version packagesForSpecNamed: 'No UI'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed06 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-TestsUI'). list := version packagesForSpecNamed: 'UI'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed07 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-UI' 'Example-TestsUI'). list := version packagesForSpecNamed: 'default'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10PackagesForSpecNamed08 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-TestsUI' 'Example-UI' 'Misc-UTF8' ). list := version allPackagesForSpecNamed: { 'No UI'. 'UI'. 'Tests'. }. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10Projects | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('UTF8'). list := version projects. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'test resolveToLoadableSpecs' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline10ResolveToLoadableSpecs01 | project version expected list | project := self exampleProject. version := project version: '1.0-baseline'. expected := #('Example-Core' 'UTF8'). list := version resolveToLoadableSpecs: #('Example-Core'). self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ]. expected := #('Example-AddOn' 'Example-Core' 'UTF8'). list := version resolveToLoadableSpecs: #('Example-AddOn'). self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ]. expected := #('Example-Core' 'Example-AddOn' 'Example-Tests' 'UTF8'). list := version resolveToLoadableSpecs: #('No UI'). self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ]. ! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20Groups | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Core' 'Tests'). list := version groups. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20Load | project version | project := self exampleProject. version := project currentVersionAgainst: #('Core') "in 2.1 'Core' is a package and in 2.0 'Core' is a group ... no errors"! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20Packages | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Project-Core' 'Project-Tests'). list := version packages. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20PackagesForSpecNamed01 | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Project-Core'). list := version packagesForSpecNamed: 'Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20PackagesForSpecNamed02 | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Project-Core' 'Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-UI' 'Example-TestsUI' 'Misc-UTF8'). list := version allPackagesForSpecNamed: 'Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20PackagesForSpecNamed03 | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Project-Core' 'Project-Tests'). list := version packagesForSpecNamed: 'ALL'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20PackagesForSpecNamed04 | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Project-Core' 'Project-Tests' 'Example-Core' 'Example-AddOn' 'Example-Tests' 'Example-UI' 'Example-TestsUI' 'Misc-UTF8'). list := version allPackagesForSpecNamed: 'ALL'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline20Projects | project version expected list | project := self projectProject. version := project version: '2.0-baseline'. expected := #('Example ALL'). list := version projects. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline21PackagesForSpecNamed01 | project version expected list | project := self projectProject. version := project version: '2.1-baseline'. expected := #('Project-Core' 'Example-Core' 'Example-AddOn' 'Misc-UTF8' 'Misc-MD5'). list := version allPackagesForSpecNamed: 'Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline21PackagesForSpecNamed02 | project version expected list | project := self projectProject. version := project version: '2.1-baseline'. expected := #('Project-Core' 'Example-Core' 'Example-AddOn' 'Project-Tests' 'Example-Tests' 'Misc-UTF8' 'Misc-MD5'). list := version allPackagesForSpecNamed: 'Tests'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30Groups | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Core' 'Tests'). list := version groups. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30Packages | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Master-Core' 'Master-Tests' 'Master-Platform' ). list := version packages. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30PackagesForSpecNamed01 | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Master-Core' 'Master-Platform' 'Project-Core' 'Example-Core' 'Example-AddOn' 'Misc-UTF8' 'Misc-MD5' 'Misc-XML'). list := version allPackagesForSpecNamed: 'Core'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30PackagesForSpecNamed02 | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Master-Core' 'Master-Platform' 'Project-Core' 'Example-Core' 'Example-AddOn' 'Project-Tests' 'Example-Tests' 'Master-Tests' 'Misc-UTF8' 'Misc-MD5' 'Misc-XML'). list := version allPackagesForSpecNamed: 'Tests'. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30PackagesForSpecNamed03 | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Master-Core' 'Master-Platform' 'Project-Core' 'Example-Core' 'Example-AddOn' 'Project-Tests' 'Example-Tests' 'Master-Tests' 'Misc-UTF8' 'Misc-MD5' 'Misc-XML'). list := version allPackagesForSpecNamed: { 'Tests'. }. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30Projects | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Project Core' 'Project Tests' 'XML'). list := version projects. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'test resolveToLoadableSpecs' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline30ResolveToLoadableSpecs01 | project version expected list | project := self masterProject. version := project version: '3.0-baseline'. expected := #('Master-Core' 'Master-Platform' 'Project Core' 'XML'). list := version resolveToLoadableSpecs: #('Core'). self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ]. ! ! !MetacelloVersionQueryTestCase methodsFor: 'tests' stamp: 'dkh 6/12/2012 15:41:23.319'! testBaseline31PackagesForSpecNamed03 | project version expected list | project := self masterProject. version := project version: '3.1-baseline'. expected := #('Master-Core' 'Master-Platform' 'Project-Core' 'Example-Core' 'Example-AddOn' 'Project-Tests' 'Example-Tests' 'Master-Tests' 'Misc-UTF8' 'Misc-MD5' 'Misc-XML'). list := version allPackagesForSpecNamed: { 'Tests'. }. self assert: (list size = expected size). list do: [:pkg | self assert: (expected includes: pkg name) ].! ! !MetacelloVersionQueryTestCase methodsFor: 'test latest filter' stamp: 'dkh 6/12/2012 15:41:23.319'! testLatestFilter | project | project := MetacelloVersionQueryLatestVersionConfig new project. self assert: (project latestVersionMatching: '*.*') versionString = '1.2'. self assert: (project latestVersionMatching: '*.*.*') versionString = '1.1.2'. self assert: (project latestVersionMatching: '*.*' includedBlessings: #(#development)) versionString = '1.3'. self assert: (project latestVersionMatching: '*.*.*' includedBlessings: #(#development)) versionString = '1.3.2'. self assert: (project latestVersionMatching: '*.*' excludedBlessings: #()) versionString = '1.3'. self assert: (project latestVersionMatching: '*.?' includedBlessings: #(#development)) versionString = '1.3.2'. self assert: (project latestVersionMatching: '*.?' excludedBlessings: #()) versionString = '1.3.2'. self assert: (project latestVersionMatching: '*') = nil ! ! !ProfStefHelpTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 16:50'! testBookName self assert: ProfStefHelp bookName isString! ! !ProfStefHelpTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 16:53'! testCreateATutorial | helpTopic | helpTopic := ProfStefHelp createATutorial. self assert: helpTopic notNil. self assert: helpTopic class == HelpTopic. self assert: helpTopic title = 'Create a tutorial'! ! !ProfStefHelpTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 16:54'! testIntroduction | helpTopic | helpTopic := ProfStefHelp introduction. self assert: helpTopic notNil. self assert: helpTopic class == HelpTopic. self assert: helpTopic title = 'Introduction'! ! !ProfStefHelpTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 16:49'! testListOfTutorials | helpTopic | helpTopic := ProfStefHelp listOfTutorials. self assert: (helpTopic notNil). self assert: (helpTopic title = 'List of tutorials' )! ! !ProfStefHelpTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 16:51'! testPages self assert: ProfStefHelp pages isCollection. self assert: (ProfStefHelp pages allSatisfy: #isSymbol).! ! !ProfStefHelpTutorialBuilderTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 17:13'! testBuild | helpTopic builder tutorial | tutorial := ProfStefTutorialsHelp. helpTopic := ProfStefHelpTutorialBuilder buildHelpTopicFrom: tutorial. self assert: helpTopic notNil! ! !ProfStefHelpTutorialBuilderTest methodsFor: 'tests' stamp: 'AlexandreBergel 4/18/2011 17:00'! testInstantiation self should: [ ProfStefHelpTutorialBuilder new ] raise: Error! ! !ProfStefTestGo methodsFor: 'running' stamp: 'LaurentLaffont 1/21/2010 20:53'! tearDown ProfStef default close! ! !ProfStefTestGo methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 21:08'! testGoOnMockTutorial | displayedText expected | ProfStef goOn: MockTutorial. displayedText := ProfStef default lessonView text. expected := MockTutorial new firstLesson lesson. self assert: displayedText equals: expected.! ! !ProfStefTestGo methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 21:06'! testGoOpenSmalltalkSyntaxTutorial | displayedText expected | ProfStef go. displayedText := ProfStef default lessonView text. expected := SmalltalkSyntaxTutorial new welcome lesson. self assert: displayedText equals: expected.! ! !ProfStefTestGo methodsFor: 'tests' stamp: 'LaurentLaffont 9/18/2011 20:10'! testGoTwiceShowLessonViewIfNotVisible | firstLessonView | ProfStef go. firstLessonView := ProfStef default lessonView. firstLessonView close. ProfStef goOn: SmalltalkSyntaxTutorial. self assert: (World systemWindows includes: firstLessonView window).! ! !ProfStefTestGo methodsFor: 'tests' stamp: 'LaurentLaffont 9/18/2011 20:00'! testGoTwiceUseSameLessonView | firstLessonView | ProfStef go. firstLessonView := ProfStef default lessonView. ProfStef goOn: SmalltalkSyntaxTutorial. self assert: (firstLessonView == ProfStef default lessonView).! ! !ProfStefTestGoOnMockTutorial methodsFor: 'running' stamp: 'LaurentLaffont 4/26/2011 13:54'! setUp ProfStef tutorial: MockTutorial lesson: #firstLesson ! ! !ProfStefTestGoOnMockTutorial methodsFor: 'running' stamp: 'LaurentLaffont 4/26/2011 13:26'! tearDown ProfStef default close! ! !ProfStefTestGoOnMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 13:26'! testFirstLessonShouldBeDisplayed. self assert: 'First lesson' equals: ProfStef default lessonView text! ! !ProfStefTestGoOnMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 13:34'! testLastShouldGoToThirdLesson ProfStef last. self assert: 'Third lesson' equals: ProfStef default lessonView text! ! !ProfStefTestGoOnMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 13:35'! testLastThenFirstShouldGoToFirstLesson ProfStef last; first. self assert: 'First lesson' equals: ProfStef default lessonView text! ! !ProfStefTestGoOnMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 13:35'! testLastThenPreviousShouldGoToSecondLesson ProfStef last; previous. self assert: 'Second lesson' equals: ProfStef default lessonView text! ! !ProfStefTestGoOnMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 4/26/2011 13:33'! testNextShouldGoToSecondLesson ProfStef next. self assert: 'Second lesson' equals: ProfStef default lessonView text! ! !ProfStefTestNavigation methodsFor: 'running' stamp: 'LaurentLaffont 1/21/2010 21:13'! setUp prof := ProfStef new. prof player: ( TutorialPlayer new tutorial: MockTutorial new; yourself). mockView := MockLessonView new. prof lessonView: mockView. prof open.! ! !ProfStefTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:13'! testNextOpenSecondLesson prof next. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !ProfStefTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:12'! testSequenceNextNextOpenThirdLesson prof next; next. self assert: mockView title equals: 'third (3/3)'. self assert: mockView lesson lesson equals: 'Third lesson'.! ! !ProfStefTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:11'! testSequenceNextNextPreviousOpenSecondLesson prof next; next; previous. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !ProfStefTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 16:27'! testShowFirstLessonOnGo | lesson | lesson := mockView lesson. self assert: lesson title equals: 'first'. self assert: lesson lesson equals: 'First lesson'.! ! !ProfStefTestNavigation methodsFor: 'as yet unclassified' stamp: 'LaurentLaffont 2/15/2011 22:12'! testShowingLessonByIndex prof tutorial: MockTutorial lessonAt: 2. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !ProfStefTestNavigation methodsFor: 'as yet unclassified' stamp: 'LaurentLaffont 2/15/2011 22:12'! testShowingLessonBySelector prof tutorial: MockTutorial lesson: #firstLesson. self assert: mockView title equals: 'first (1/3)'. self assert: mockView lesson lesson equals: 'First lesson'.! ! !SmalltalkSyntaxTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 12/12/2010 22:20'! testDivideTwoByZeroSignalsZeroDivide [self testedTutorial divideTwoByZero. self fail] on: ZeroDivide do: []! ! !SmalltalkSyntaxTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:07'! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self testedTutorial respondsTo: aSelector) ]! ! !SmalltalkSyntaxTutorialTest methodsFor: 'requirements' stamp: 'LaurentLaffont 2/1/2010 22:06'! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ SmalltalkSyntaxTutorial new! ! !TutorialPlayerTestTutorialAccessor methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 21:18'! testDefaultsToSmalltalkSyntaxTutorial | player | player := TutorialPlayer new. self assert: (player tutorial isKindOf: SmalltalkSyntaxTutorial).! ! !TutorialPlayerTestTutorialAccessor methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 21:19'! testWithMockTutorial | mockTutorial player | mockTutorial := MockTutorial new. player := TutorialPlayer new tutorial: mockTutorial; yourself. self assert: player tutorial equals: mockTutorial.! ! !TutorialPlayerTestWithMockTutorial methodsFor: 'running' stamp: 'LaurentLaffont 1/21/2010 20:40'! setUp | tutorial | tutorial := MockTutorial new. player := TutorialPlayer new tutorial: (MockTutorial new)! ! !TutorialPlayerTestWithMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 20:40'! testCurrentLessonIsFirstOneAtCreation self assert: player currentLesson title equals: 'first'.! ! !TutorialPlayerTestWithMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 20:40'! testNavigation self assert: player next title equals: 'second'. self assert: player currentLesson title equals: 'second'. self assert: player next title equals: 'third'. self assert: player currentLesson title equals: 'third'. self assert: player next title equals: 'third'. self assert: player currentLesson title equals: 'third'. self assert: player previous title equals: 'second'. self assert: player currentLesson title equals: 'second'. self assert: player previous title equals: 'first'. self assert: player currentLesson title equals: 'first'. self assert: player previous title equals: 'first'. self assert: player currentLesson title equals: 'first'.! ! !TutorialPlayerTestWithMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 20:43'! testResetTutorialGoBackToFirstLesson player next; next. self assert: player currentLesson title equals: 'third'. player rewind. self assert: player currentLesson title equals: 'first'.! ! !TutorialPlayerTestWithMockTutorial methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 20:40'! testSizeReturnsThree self assert: player size equals: 3.! ! !MetacelloLoaderPolicy class methodsFor: 'instance creation' stamp: 'dkh 6/8/2012 14:04:22' prior: 25848833! overrideRepositories: aCollection ^self new overrideRepositories: aCollection ! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25844268! cacheGofer cacheGofer == nil ifTrue: [ "don't use a caching Gofer here, since we expect the contents to change during a fetch operation" cacheGofer := Gofer new. cacheGofer disablePackageCache. cacheGofer repository: self cacheRepository. ]. ^ cacheGofer! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25844632! cacheRepository cacheRepository == nil ifTrue: [ cacheRepository := MCDictionaryRepository new ]. ^ cacheRepository! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25844831! cacheRepository: anMCRepository cacheRepository := anMCRepository. "getting a new repository, so wipe out the cacheGofer and ensureMap" ensuredMap := cacheGofer := nil! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845094! ensuredMap ensuredMap == nil ifTrue: [ ensuredMap := Dictionary new ]. ^ensuredMap! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845271! ensuredMap: anObject ensuredMap := anObject! ! !MetacelloLoaderPolicy methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25848248! hasRepositoryOverrides ^self overrideRepositories ~~ nil! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845405! ignoreImage ^ ignoreImage! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845521! ignoreImage: anObject ignoreImage := anObject! ! !MetacelloLoaderPolicy methodsFor: 'initialize-release' stamp: 'dkh 6/8/2012 14:04:22' prior: 48888493! initialize self repositoryMap; cacheRepository; ensuredMap. ignoreImage := false ! ! !MetacelloLoaderPolicy methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25847074! load overrideRepositories := Array with: self cacheRepository. "ensure that hasRepositoryOverrides is true" self loadDirective loadWithPolicy: self! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845658! loadData loadData == nil ifTrue: [ loadData := MetacelloLoadData new ]. ^loadData ! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25845835! loadDirective loadDirective == nil ifTrue: [ loadDirective := MetacelloLinearLoadDirective new ]. ^ loadDirective! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846041! overrideRepositories ^ overrideRepositories! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846175! overrideRepositories: anObject overrideRepositories := anObject! ! !MetacelloLoaderPolicy methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25847312! pushAtomicLoadDirectivesDuring: aBlock for: aLoader self pushLoadDirective: (MetacelloAtomicLoadDirective loader: aLoader) during: aBlock. ! ! !MetacelloLoaderPolicy methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25847542! pushExplicitLoadDirectivesDuring: aBlock for: aLoader | directive | directive := MetacelloExplicitLoadDirective loader: aLoader. self pushLoadDirective: directive during: aBlock. ^directive! ! !MetacelloLoaderPolicy methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25847824! pushLinearLoadDirectivesDuring: aBlock for: aLoader self pushLoadDirective: (MetacelloLinearLoadDirective loader: aLoader) during: aBlock. ! ! !MetacelloLoaderPolicy methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25848395! pushLoadDirective: aLoaderDirective during: aBlock | oldRoot | self loadDirective add: aLoaderDirective. oldRoot := loadDirective. loadDirective := aLoaderDirective. aBlock ensure: [ loadDirective := oldRoot ]. ! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846329! repositoryMap repositoryMap == nil ifTrue: [ repositoryMap := Dictionary new ]. ^repositoryMap! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846516! repositoryMap: anObject repositoryMap := anObject! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846658! resetCacheGofer cacheGofer := nil! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846784! silently silently == nil ifTrue: [ silently := false ]. ^ silently! ! !MetacelloLoaderPolicy methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25846944! silently: anObject silently := anObject! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972133! externalReference ^ externalReference! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972269! file ^self externalReference name! ! !MetacelloPackageLoadDirective methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25973854! label ^self file! ! !MetacelloPackageLoadDirective methodsFor: 'actions' stamp: 'dkh 6/8/2012 14:04:22' prior: 25973099! loadUsing: aLoaderDirective gofer: aGofer aLoaderDirective loadPackageDirective: self gofer: aGofer! ! !MetacelloPackageLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25973302! packageDirectivesDo: aBlock aBlock value: self! ! !MetacelloPackageLoadDirective methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25973451! packageDo: aBlock aBlock value: self! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972403! packageName ^self externalReference packageName! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972550! repository ^self externalReference repository! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972695! resolvedReference ^ resolvedReference! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972831! resolvedReference: anObject resolvedReference := anObject! ! !MetacelloPackageLoadDirective methodsFor: 'initialize-release' stamp: 'dkh 6/8/2012 14:04:22' prior: 25973597! spec: aPackageSpec externalReference: anExternalReference loader: aLoader super spec: aPackageSpec loader: aLoader. externalReference := anExternalReference! ! !MetacelloPackageLoadDirective methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25972987! title ^'load'! ! !MetacelloAbstractVersionConstructor class methodsFor: 'method generation' stamp: 'dkh 6/5/2012 19:01:24' prior: 25771164! symbolicMethodSelectorAndPragma: selector symbolicVersionSymbol: symbolicVersionSymbol on: strm strm nextPutAll: selector asString , ' spec'; cr; tab; nextPutAll: ''; cr! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25758295! author: aBlockOrString "Define author field of version spec (MetacelloMCVersionSpec). If is a String, the version spec author is set to the String. If is a Block, the specifications in are applied to the author spec (MetacelloValueHolderSpec). Not Recommended!! spec author: 'dkh'. spec author: [ spec value: 'dkh'. ]. " self root author: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! authorForVersion: aBlockOrString aBlockOrString setAuthorInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'dkh 9/5/2012 06:26:03.064'! baseline: aString self root baseline: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'dkh 9/5/2012 06:26:03.064'! baseline: aString with: aBlockOrString self root baseline: aString with: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! baselineForVersion: aString self setBaseline: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! baselineForVersion: aString with: aBlock aBlock setBaseline: aString withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25758467! blessing: aBlockOrString "Define blessing field of version spec (MetacelloMCVersionSpec). If is a String, the version spec blessing is set to the String. It is recommended to use a Symbol. If is a Block, the specifications in are applied to the blessing spec (MetacelloValueHolderSpec). Not Recommended!! spec blessing: #release. spec blessing: [ spec value: #release. ]. The blessing should typically be set to one of three values: #baseline - indicating that the version spec is specifying a baseline version #development - indicating that the version spec is not stabilized and will change over time #release - indicating that the version spec has stabilized and will NOT change over time " self root blessing: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! blessingForVersion: aBlockOrString aBlockOrString setBlessingInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25758643! className: aString "Define className field of a project spec (MetacelloMCProjectSpec). spec project: 'CoolBrowser' with: [ spec className: 'ConfigurationOfCoolBrowser'. ]. The className field is OPTIONAL in the project spec. If omitted, the className will be created by prepending 'ConfigurationOf' to the project name. " self root className: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! classNameForProject: aString self root className: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'dkh 9/5/2012 06:26:03.064'! configuration: aString with: aBlockOrString self root configuration: aString with: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! configurationForVersion: aString with: aBlock aBlock setConfiguration: aString withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25758794! description: aBlockOrString "Define description field of version spec (MetacelloMCVersionSpec). If is a String, the version spec blessing is set to the String. It is recommended to use a Symbol. If is a Block, the specifications in are applied to the blessing spec (MetacelloValueHolderSpec). Not Recommended!! spec description: 'Descriptive comment'. spec description: [ spec value: 'Descriptive comment'. " self root description: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! descriptionForVersion: aBlockOrString aBlockOrString setDescriptionInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25758976! file: aString "Define file field of a package spec (MetacelloPackageSpec) or project spec (MetacelloMCProjectSpec). For a package spec, the file: field is optional in a baseline. In a baseline, the file field may be used to specify a package branch for the package: spec package: 'MyPackage' with: [ spec file: 'MyPackage.gemstone'. ]'. The file: field is required in a version. In a version, the file field defines the explicit version of the package to be loaded: spec package: 'MyPackage' with: [ spec file: 'MyPackage.gemstone-dkh.1'. ]'. The following may be used as a short cut for specifying the file field in a version: spec package: 'MyPackage' with: 'MyPackage.gemstone-dkh.1'. For a project spec, the file field specifies the name of the Monticello package that contains the configuration. If you are using the convention of naming the class and package usingthe 'ConfigurationOf' prefix, then there is no need to specify the file field: spec project: 'MyProject' with: [ spec file: 'ConfigurationMyProject'. It should only be used when the package name for the configuration is different from the name of the project: spec project: 'MyProject' with: [ spec file: 'MyProject-Metacello'. " self root file: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! fileForPackage: aString self root file: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! fileForProject: aString self root file: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 11:38' prior: 25759106! for: attributeListOrSymbol do: aBlock "conditional version support" attributeListOrSymbol setForDo: aBlock withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 11:37' prior: 25759338! for: attributeListOrSymbol version: aString "conditional symbolicVersion support" attributeListOrSymbol setForVersion: aString withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25759601! group: aString overrides: aStringOrCollection self root group: aString overrides: aStringOrCollection constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25759891! group: aString with: aStringOrCollection self root group: aString with: aStringOrCollection constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! groupForVersion: aString overrides: aStringOrCollection | spec | spec := self project groupSpec name: aString; includes: aStringOrCollection; yourself. self root packages add: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! groupForVersion: aString with: aStringOrCollection | spec | spec := self project groupSpec name: aString; includes: aStringOrCollection; yourself. self root packages merge: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'dkh 9/5/2012 06:26:03.064'! import: aString "import names defined in baseline to be used when loading the version spec baseline: 'Sample' with: [ spec repository: 'github://dalehenrich/sample:master/repository' ]. spec import: 'Sample' ] " self root import: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! importForVersion: aString self root import: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760178! includes: anObject self root includes: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! includesForPackage: anObject self root includes: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760327! loads: anObject self root loads: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! loadsForProject: anObject self root loads: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760470! name: anObject self root name: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! nameForProject: aString self root name: aString! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760611! operator: anObject self root operator: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! operatorForProject: anObject self root operator: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760760! package: aString self root package: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25760989! package: aString overrides: aBlock self root package: aString overrides: aBlock constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25761268! package: packageName with: aBlockOrString "Define specification for package . If is a String (or Symbol), the String is expected to be a version (or symbolic version). If is a Block, the specifications in are applied to the project: spec package: 'MyPackage' with: '1.0'. spec package: 'MyPackage' with: [ spec file:'MyPackage-dkh.1'. spec repository: '/opt/gemstone/repository'. " self root package: packageName with: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! packageForVersion: aString | spec | spec := self project packageSpec name: aString; yourself. self root packages add: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! packageForVersion: aString overrides: aBlock | spec | spec := self project packageSpec name: aString; yourself. self root packages add: spec. self with: spec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! packageForVersion: packageName with: aBlockOrString aBlockOrString setPackage: packageName withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25761470! postLoadDoIt: aSymbol self root postLoadDoIt: aSymbol constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! postLoadDoItForPackage: aSymbol self postLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! postLoadDoItForProject: aSymbol self postLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! postLoadDoItForSpec: aSymbol self validateDoItSelector: aSymbol. self root postLoadDoIt: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! postLoadDoItForVersion: aSymbol self postLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25761662! preLoadDoIt: aSymbol self root preLoadDoIt: aSymbol constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! preLoadDoItForPackage: aSymbol self preLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! preLoadDoItForProject: aSymbol self preLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! preLoadDoItForSpec: aSymbol self validateDoItSelector: aSymbol. self root preLoadDoIt: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! preLoadDoItForVersion: aSymbol self preLoadDoItForSpec: aSymbol! ! !MetacelloAbstractVersionConstructor methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25756435! project project == nil ifTrue: [ project := self projectClass new ]. ^ project! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 03/12/2011 22:11' prior: 25761852! project: aString self root project: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25762002! project: aString copyFrom: oldSpecName with: aBlock self root project: aString copyFrom: oldSpecName with: aBlock constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25762498! project: aString overrides: aBlock self root project: aString overrides: aBlock constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25763017! project: aString with: aBlockOrString self root project: aString with: aBlockOrString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: '*metacello-mc-accessing' stamp: 'dkh 6/8/2012 14:04:22'! projectClass ^ MetacelloMCProject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! projectForVersion: aString self project: aString with: ''! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! projectForVersion: aString copyFrom: oldSpecName with: aBlock | spec projectSpec | projectSpec := self project projectSpec name: aString; yourself. spec := self project projectReferenceSpec name: aString; projectReference: projectSpec; yourself. self root packages copy: oldSpecName to: spec. self with: projectSpec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! projectForVersion: aString overrides: aBlock | spec projectSpec | projectSpec := self project projectSpec name: aString; yourself. spec := self project projectReferenceSpec name: aString; projectReference: projectSpec; yourself. self root packages add: spec. self with: projectSpec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! projectForVersion: aString with: aBlockOrString aBlockOrString setProject: aString withInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25763220! projectPackage: aBlock "projectPackage spec data folded into project spec" self root projectPackage: aBlock constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! projectPackageForProject: aBlock self with: self root during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25763515! removeGroup: aString self root removeGroup: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! removeGroupForVersion: aString | spec | spec := self project groupSpec name: aString; yourself. self root packages remove: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25763749! removePackage: aString self root removePackage: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! removePackageForVersion: aString | spec | spec := self project packageSpec name: aString; yourself. self root packages remove: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25763987! removeProject: aString self root removeProject: aString constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! removeProjectForVersion: aString | spec | spec := self project projectReferenceSpec name: aString; yourself. self root packages remove: spec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25764234! repositories: aBlock self root repositories: aBlock constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoriesForPackage: aBlock self repositoriesForSpec: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoriesForProject: aBlock self repositoriesForSpec: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoriesForSpec: aBlock self with: self root repositories during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoriesForVersion: aBlock self repositoriesForSpec: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25764405! repository: anObject self root repository: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25764558! repository: description username: username password: password self root repository: description username: username password: password constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForPackage: anObject self repositoryForSpec: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForPackage: aString username: username password: password self repositoryForSpec: aString username: username password: password! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForProject: anObject self repositoryForSpec: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForProject: aString username: username password: password self repositoryForSpec: aString username: username password: password! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForRepositories: anObject self repositoryForSpec: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForRepositories: aString username: username password: password self repositoryForVersion: aString username: username password: password! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForSpec: anObject self root repository: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForSpec: aString username: username password: password self root repository: aString username: username password: password! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForVersion: anObject self repositoryForSpec: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! repositoryForVersion: aString username: username password: password self repositoryForSpec: aString username: username password: password! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25764793! requires: anObject self root requires: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! requiresForPackage: anObject self root requires: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'initialization' stamp: 'dkh 10/5/2009 16:42' prior: 25770089! reset attributeMap := attributeOrder := nil! ! !MetacelloAbstractVersionConstructor methodsFor: 'accessing' stamp: 'dkh 10/3/2009 16:37' prior: 25757704! root: aMetacelloSpec root := aMetacelloSpec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! setBaseline: aString | spec projectSpec | projectSpec := self project baselineOfProjectSpec name: aString; className: 'BaselineOf' , aString; yourself. spec := self project projectReferenceSpec name: aString; projectReference: projectSpec; yourself. self root packages merge: spec. ^ projectSpec! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! setBaseline: aString withBlock: aBlock | projectSpec | projectSpec := self setBaseline: aString. self with: projectSpec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! setConfiguration: aString withBlock: aBlock | spec projectSpec | projectSpec := self project configurationOfProjectSpec name: aString; yourself. spec := self project projectReferenceSpec name: aString; projectReference: projectSpec; yourself. self root packages merge: spec. self with: projectSpec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/7/2012 13:11' prior: 35772189! setFor: attributeList do: aBlock "conditional version support" attributeList asMetacelloAttributeList do: [ :attribute | | blockList | blockList := self attributeMap at: attribute ifAbsent: [ self attributeMap at: attribute put: (blockList := OrderedCollection new) ]. blockList add: aBlock. self addAttribute: attribute ]! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/7/2012 13:11' prior: 25767712! setFor: attributeList version: aString "conditional symbolicVersion support" attributeList asMetacelloAttributeList do: [ :attribute | self attributeMap at: attribute put: aString. self addAttribute: attribute ]! ! !MetacelloAbstractVersionConstructor methodsFor: 'api callbacks' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25768646! setProject: aString withBlock: aBlock | spec projectSpec | projectSpec := self project projectSpec name: aString; yourself. spec := self project projectReferenceSpec name: aString; projectReference: projectSpec; yourself. self root packages merge: spec. self with: projectSpec during: aBlock! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25764942! supplyingAnswers: aCollection self root supplyingAnswers: aCollection constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! supplyingAnswersForPackage: anObject self root answers: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25765104! timestamp: aBlockOrStringOrDateAndTime "Define timestamp field of version spec (MetacelloMCVersionSpec). If is a String, the version spec timetamp is set to the String. If is a DateAndTime, the version spec timetamp is set to the printString of the DateAndTime. If is a Block, the specifications in are applied to the timestamp spec (MetacelloValueHolderSpec). Not Recommended!! spec timestamp: '10/7/2009 14:40'. spec timestamp: DateAndTime now'. spec timestamp: [ spec value: '10/7/2009 14:40'. ]. " self root timestamp: aBlockOrStringOrDateAndTime constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! timestampForVersion: aBlockOrStringOrDateAndTime aBlockOrStringOrDateAndTime setTimestampInMetacelloConfig: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25765282! value: anObject self root value: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! valueForValueHolder: anObject self root value: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25765425! version: anObject self root version: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! versionForProject: anObject self versionStringForProject: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! versionForVersion: anObject self versionStringForVersion: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api' stamp: 'DaleHenrichs 11/12/2010 09:54' prior: 25765578! versionString: anObject self root versionString: anObject constructor: self! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! versionStringForProject: anObject self root versionString: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'api spec callbacks' stamp: 'dkh 9/5/2012 06:26:03.064'! versionStringForVersion: anObject self versionStringForProject: anObject! ! !MetacelloAbstractVersionConstructor methodsFor: 'private' stamp: 'dkh 10/3/2009 16:31' prior: 25770759! with: aMetacelloSpec during: aBlock | previousRoot | previousRoot := self root. self root: aMetacelloSpec. aBlock ensure: [ self root: previousRoot ]! ! !MetacelloBaselineConstructor commentStamp: 'dkh 5/4/2012 17:05' prior: 71968432! ##MetacelloBaselineConstructor **MetacelloBaselineConstructor** extracts the #baseline pragma from a **BaselineOfConfiguration** and produces a **MetacelloVersion**:. ```Smalltalk MetacelloBaselineConstructor on: BaselineOfExample ``` ! !MetacelloBaselineConstructor class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24'! on: aConfig ^ self new on: aConfig; yourself! ! !MetacelloBaselineConstructor class methodsFor: 'instance creation' stamp: 'dkh 6/18/2012 14:49'! on: aConfig project: aProject ^ self new on: aConfig project: aProject; yourself! ! !MetacelloBaselineConstructor methodsFor: 'private' stamp: 'dkh 6/18/2012 15:05'! calculate: aConfig project: aProject | pragma versionMap versionSpec | self configuration: aConfig. pragma := self extractBaselinePragmaFor: aConfig class. self setProject: (aProject ifNil: [ [ aConfig class project ] on: MessageNotUnderstood do: [ :ex | ex return: nil ] ]). versionSpec := self project versionSpec. self root: versionSpec. self evaluatePragma: pragma. versionMap := Dictionary new. self project attributes do: [ :attribute | | blockList | (blockList := self attributeMap at: attribute ifAbsent: [ ]) ~~ nil ifTrue: [ blockList do: [ :block | self with: versionSpec during: block ] ] ]. versionSpec versionString: self project singletonVersionName. versionMap at: versionSpec versionString put: versionSpec createVersion. self project map: versionMap. self project configuration: aConfig! ! !MetacelloBaselineConstructor methodsFor: 'pragma extraction' stamp: 'dkh 6/5/2012 19:01:24'! extractBaselinePragmaFor: aClass | pragmas | pragmas := Pragma allNamed: #'baseline' in: aClass. pragmas isEmpty ifTrue: [ ^ self error: 'No #baseline pragma found' ]. ^ pragmas first! ! !MetacelloBaselineConstructor methodsFor: 'initialization' stamp: 'dkh 6/5/2012 19:01:24'! on: aConfig self calculate: aConfig project: nil! ! !MetacelloBaselineConstructor methodsFor: 'initialization' stamp: 'dkh 6/5/2012 19:01:24'! on: aConfig project: aProject self calculate: aConfig project: aProject! ! !MetacelloBaselineConstructor methodsFor: '*metacello-mc-accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectClass ^ MetacelloMCBaselineProject! ! !MetacelloVersionConstructor class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26253598! on: aConfig ^(self new) on: aConfig; yourself! ! !MetacelloVersionConstructor class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26253761! on: aConfig project: aProject ^(self new) on: aConfig project: aProject; yourself! ! !MetacelloVersionConstructor class methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24' prior: 26251545! spawnPackageMethodIn: aConfig category: methodCategory named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: blessing self deprecated: 'see MetacelloToolBox class>>createDevelopment:for:importFromBaseline:description: for a similar example'. ^self new spawnPackageMethodIn: aConfig category: methodCategory named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: blessing! ! !MetacelloVersionConstructor class methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24'! spawnPackageMethodIn: aConfig named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString self deprecated: 'see MetacelloToolBox class>>createDevelopment:for:importFromBaseline:description: for a similar example'. ^self spawnPackageMethodIn: aConfig category: 'versions' named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: #development! ! !MetacelloVersionConstructor class methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24'! spawnPackageMethodIn: aConfig named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: blessing self deprecated: 'see MetacelloToolBox class>>createDevelopment:for:importFromBaseline:description: for a similar example'. ^self new spawnPackageMethodIn: aConfig category: 'versions' named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: blessing! ! !MetacelloVersionConstructor class methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24' prior: 26253216! updatePackageMethodIn: aConfig sourceVersion: sourceVersionString self deprecated: 'see MetacelloToolBox class>>updateDevelopment:for:updateProjects:description: for a similar example'. ^self new updatePackageMethodIn: aConfig sourceVersion: sourceVersionString! ! !MetacelloVersionConstructor methodsFor: 'initialization' stamp: 'dkh 6/22/2012 12:43' prior: 26240042! calculate: aConfig project: aProject | versionMap symbolicVersionMap executionBlock pragmaDict | self setProject: aProject. self configuration: aConfig. versionMap := Dictionary new. symbolicVersionMap := Dictionary new. executionBlock := self specResolverBlock. self collectAllVersionsFromVersionPragmasInto: versionMap using: executionBlock. pragmaDict := self extractVersionImportPragmas. self verifyVersionImportPragmas: pragmaDict definedIn: versionMap. self collectAllVersionsFromVersionImportPragmasInto: versionMap using: executionBlock satisfiedPragmas: pragmaDict. self collectAllSymbolicVersionsFromVersionPragmasInto: symbolicVersionMap using: self symbolicVersionResolverBlock. self project map: versionMap. self project errorMap: self errorMap. self project symbolicVersionMap: symbolicVersionMap. self project configuration: aConfig. "now that we have a nearly complete project, we can collect the defaultSymbolicVersions, which expect the project to be fully constructed" self collectDefaultSymbolicVersionsFromVersionPragmasFrom: self extractDefaultSymbolicVersionPragmas into: symbolicVersionMap using: self defaultSymbolicVersionResolverBlock. "Pick up defaults from MetacelloBaseConfiguration" self collectDefaultSymbolicVersionsFromVersionPragmasFrom: self extractCommonDefaultSymbolicVersionPragmas into: symbolicVersionMap using: self commonDefaultSymbolicVersionResolverBlock. "now resolive symbolicVersions defined as symbolicVersions" symbolicVersionMap copy keysAndValuesDo: [ :symbolic :original | | versionString visited | versionString := original. visited := Set new. [ visited add: versionString. versionString isSymbol and: [ versionString ~~ #'notDefined' ] ] whileTrue: [ versionString := symbolicVersionMap at: versionString ifAbsent: [ self error: 'Cannot resolve symbolic version ' , original printString ]. (visited includes: versionString) ifTrue: [ self error: 'Loop detected resolving symbolic version ' , original printString ] ]. symbolicVersionMap at: symbolic put: versionString ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26243688! collectAllSymbolicVersionsFromVersionPragmasInto: symbolicVersionMap using: executionBlock | defined versionPragmaDict versionString | versionPragmaDict := self extractSymbolicVersionPragmas. versionPragmaDict keysAndValuesDo: [ :versionSymbol :pragmaColl | defined := false. pragmaColl do: [ :pragma | defined := true. versionString := executionBlock value: versionSymbol value: pragma ]. defined ifTrue: [ versionString == nil ifFalse: [ symbolicVersionMap at: versionSymbol put: versionString ]]. self reset ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 9/6/2012 03:05' prior: 26244334! collectAllVersionsFromVersionImportPragmasInto: versionMap using: executionBlock satisfiedPragmas: pragmaDict | defined done completed count | done := false. completed := IdentitySet new. count := 0. [ count := count + 1. count > 10000 ifTrue: [ self error: 'Apparent loop in import expansion' ]. done ] whileFalse: [ done := true. pragmaDict keysAndValuesDo: [ :versionString :pragmaColl | | versionSpec | versionSpec := nil. defined := false. [ pragmaColl do: [ :pragma | (completed includes: pragma) ifFalse: [ | imports | done := false. imports := pragma argumentAt: 2. imports detect: [ :importedVersion | (versionMap includesKey: importedVersion) not ] ifNone: [ imports do: [ :importedVersion | | version | (version := versionMap at: importedVersion ifAbsent: [ ]) ~~ nil ifTrue: [ defined := true. completed add: pragma. versionSpec == nil ifTrue: [ versionSpec := version spec copy ] ifFalse: [ versionSpec := versionSpec mergeSpec: version spec copy ]. versionSpec versionString: versionString. executionBlock value: versionSpec value: pragma ] ] ] ] ] ] on: Error do: [ :ex | (MetacelloErrorInProjectConstructionNotification versionString: versionSpec versionString exception: ex) ifTrue: [ ^ ex pass ] ifFalse: [ self errorMap at: versionSpec versionString put: ex. done := true. defined := false ] ]. defined ifTrue: [ | version importedVersions | importedVersions := OrderedCollection new. version := versionSpec createVersion. pragmaColl do: [ :pragma | importedVersions addAll: (pragma argumentAt: 2) ]. version importedVersions: importedVersions. self validateVersionString: versionString againstSpec: versionSpec. versionMap at: versionSpec versionString put: version ]. self reset ] ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26247307! collectAllVersionsFromVersionPragmasInto: versionMap using: executionBlock | defined versionPragmaDict | versionPragmaDict := self extractVersionPragmas. versionPragmaDict keysAndValuesDo: [ :versionString :pragmaColl | | versionSpec | versionSpec := self project versionSpec. versionSpec versionString: versionString. defined := false. [ pragmaColl do: [ :pragma | executionBlock value: versionSpec value: pragma. defined := true ] ] on: Error do: [ :ex | (MetacelloErrorInProjectConstructionNotification versionString: versionSpec versionString exception: ex) ifTrue: [ ^ ex pass ] ifFalse: [ self errorMap at: versionSpec versionString put: ex. defined := false ] ]. defined ifTrue: [ self validateVersionString: versionString againstSpec: versionSpec. versionMap at: versionSpec versionString put: versionSpec createVersion ]. self reset ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26248065! collectDefaultSymbolicVersionsFromVersionPragmasFrom: versionPragmaDict into: symbolicVersionMap using: executionBlock | defined versionString | versionPragmaDict keysAndValuesDo: [ :versionSymbol :pragmaColl | defined := false. symbolicVersionMap at: versionSymbol ifAbsent: [ "process the defaultSymbolicVersion only if the symbolicVersion is not defined yet" pragmaColl do: [ :pragma | defined := true. versionString := executionBlock value: versionSymbol value: pragma ]. defined ifTrue: [ versionString == nil ifFalse: [ symbolicVersionMap at: versionSymbol put: versionString ] ]. self reset ] ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26248845! commonDefaultSymbolicVersionResolverBlock ^ self defaultSymbolicVersionResolverBlock: (ConfigurationOf new project: self project) ! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26249083! defaultSymbolicVersionResolverBlock ^ self defaultSymbolicVersionResolverBlock: self configuration ! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26249279! defaultSymbolicVersionResolverBlock: receiver ^ [ :symbolicVrsn :pragma | | result | result := nil. (pragma argumentAt: 1) = symbolicVrsn ifTrue: [ self symbolicVersion: symbolicVrsn. result := [ receiver perform: pragma selector ] on: MetacelloVersionDoesNotExistError do: [ :ex | ex return: nil ] ]. result ]! ! !MetacelloVersionConstructor methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! errorMap errorMap ifNil: [ errorMap := Dictionary new ]. ^ errorMap! ! !MetacelloVersionConstructor methodsFor: 'initialization' stamp: 'dkh 6/5/2012 19:01:24' prior: 26242131! on: aConfig | cacheKey | cacheKey := aConfig class. project := MetacelloPlatform current stackCacheFor: #versionConstructor at: cacheKey doing: [ :cache | self calculate: aConfig project: nil. cache at: cacheKey put: self project ]. self setProject: project.! ! !MetacelloVersionConstructor methodsFor: 'initialization' stamp: 'dkh 6/5/2012 19:01:24' prior: 26242500! on: aConfig project: aProject | cacheKey cachedProject | cacheKey := aConfig class. cachedProject := MetacelloPlatform current stackCacheFor: #'versionConstructor' at: cacheKey doing: [ :cache | self calculate: aConfig project: aProject. cache at: cacheKey put: self project. ^ self ]. aProject map: cachedProject map. aProject errorMap: cachedProject errorMap. aProject symbolicVersionMap: cachedProject symbolicVersionMap. aProject configuration: aConfig. self setProject: aProject! ! !MetacelloVersionConstructor methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24' prior: 26232765! prepareForMethodUpdate: aConfig sourceVersion: sourceVersionString forceUpdate: forceUpdate generating: generateBlock | pragmaDict versionSpecs pragmaMap updatedPackageSpecs updatedPackageSpecsMap reversed pragmaColl seenUpdatedPackageSpecs | self deprecated: 'see MetacelloToolBox for replacement methods'. self configuration: aConfig. versionSpecs := Dictionary new. pragmaMap := Dictionary new. pragmaDict := self extractAllVersionPragmas. pragmaColl := pragmaDict at: sourceVersionString ifAbsent: [ ^ self ]. pragmaColl do: [ :pragma | | specs versionSpec | specs := Dictionary new. self evaluatePragma: pragma. self attributeMap keysAndValuesDo: [ :attribute :blockList | versionSpec := self project versionSpec. versionSpec versionString: sourceVersionString. specs at: attribute put: versionSpec. blockList do: [ :block | self with: versionSpec during: block ] ]. versionSpecs at: pragma selector put: {specs. (self attributeOrder). nil}. pragmaMap at: pragma selector put: pragma. self reset ]. versionSpecs keysAndValuesDo: [ :selector :ar | updatedPackageSpecsMap := Dictionary new. seenUpdatedPackageSpecs := Dictionary new. ar at: 3 put: updatedPackageSpecsMap. reversed := aConfig project attributes reverse. reversed do: [ :attribute | | vs | (vs := (ar at: 1) at: attribute ifAbsent: [ ]) ~~ nil ifTrue: [ updatedPackageSpecs := forceUpdate ifTrue: [ vs forceUpdatedPackageSpecs ] ifFalse: [ vs updatedPackageSpecs ]. updatedPackageSpecs associations do: [ :assoc | | filename | (filename := seenUpdatedPackageSpecs at: assoc key ifAbsent: [ ]) == nil ifTrue: [ assoc value == #uptodate ifTrue: [ "#uptodate means that the spec is up-to-date and we mark it as seen so that the spec is not update for a 'later' spec" seenUpdatedPackageSpecs at: assoc key put: #uptodate ] ifFalse: [ seenUpdatedPackageSpecs at: assoc key put: assoc value file ] ] ifFalse: [ "if the spec was already seen as up-to-date or the file is the same as the one already seen don't propogate the file" (filename == #uptodate or: [ assoc value == #uptodate or: [ filename = assoc value file ] ]) ifTrue: [ updatedPackageSpecs removeKey: assoc key ] ] ]. updatedPackageSpecsMap at: attribute put: updatedPackageSpecs ] ]. "clear out #uptodate markers" updatedPackageSpecsMap valuesDo: [ :d | d associations do: [ :assoc | assoc value == #uptodate ifTrue: [ d removeKey: assoc key ] ] ]. "remove shadowed packages" 1 to: reversed size do: [ :index | | attribute d | attribute := reversed at: index. ((d := updatedPackageSpecsMap at: attribute ifAbsent: [ ]) ~~ nil and: [ d keys size > 0 ]) ifTrue: [ index + 1 to: reversed size do: [ :shadowIndex | d keysDo: [ :key | | dict | (dict := updatedPackageSpecsMap at: (reversed at: shadowIndex) ifAbsent: [ ]) ~~ nil ifTrue: [ dict removeKey: key ifAbsent: [ ] ] ] ] ] ]. updatedPackageSpecsMap keys do: [ :key | | d | d := updatedPackageSpecsMap at: key. d isEmpty ifTrue: [ updatedPackageSpecsMap removeKey: key ] ]. "ready to generate source for method" generateBlock value: selector value: pragmaMap value: ar value: updatedPackageSpecsMap ]! ! !MetacelloVersionConstructor methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24' prior: 26236425! spawnPackageMethodIn: aConfig category: methodCategory named: newSelector sourceVersion: sourceVersionString targetVersion: targetVersionString blessing: blessing self deprecated: 'see MetacelloToolBox class>>createBaseline:for:from:description: for replacement method'. self prepareForMethodUpdate: aConfig sourceVersion: sourceVersionString forceUpdate: blessing ~~ #baseline generating: [:selector :pragmaMap :ar :updatedPackageSpecsMap | | strm | strm := WriteStream on: String new. strm nextPutAll: newSelector asString, ' spec'; cr; tab; nextPutAll: '';cr. (ar at: 2) do: [:attribute | | vs d | vs := (ar at: 1) at: attribute. (d := updatedPackageSpecsMap at: attribute ifAbsent: []) ~~ nil ifTrue: [ vs packagesSpec list do: [:member | | x | x := d at: member spec name ifAbsent: []. member spec updateForSpawnMethod: x ]] ifFalse: [ vs packagesSpec list do: [:member | member spec updateForSpawnMethod: member spec copy ]]. strm cr; tab; nextPutAll: 'spec for: ', attribute printString, ' do: ['; cr. attribute == #common ifTrue: [ vs author: MetacelloPlatform current authorName; timestamp: MetacelloPlatform current timestamp. blessing ~~ nil ifTrue: [ vs blessing: blessing ]]. vs configSpawnMethodOn: strm indent: 2. strm nextPutAll: '].']. (aConfig class compile: strm contents classified: methodCategory) == nil ifTrue: [ self error: 'Error compiling the method' ]]. ^true ! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26249700! specResolverBlock ^ [ :versionSpec :pragma | (pragma argumentAt: 1) = versionSpec versionString ifTrue: [ self evaluatePragma: pragma. self project attributes do: [ :attribute | | blockList | (blockList := self attributeMap at: attribute ifAbsent: [ ]) ~~ nil ifTrue: [ blockList do: [ :block | self with: versionSpec during: block ] ] ] ] ]! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26250171! symbolicVersionResolverBlock ^ [ :symbolicVrsn :pragma | | result | result := nil. (pragma argumentAt: 1) = symbolicVrsn ifTrue: [ self symbolicVersion: symbolicVrsn. self evaluatePragma: pragma. self project attributes do: [ :attribute | | versionString | versionString := self attributeMap at: attribute ifAbsent: [ ]. versionString ~~ nil ifTrue: [ result := versionString ] ] ]. result ]! ! !MetacelloVersionConstructor methodsFor: 'deprecated' stamp: 'dkh 6/5/2012 19:01:24' prior: 26238199! updatePackageMethodIn: aConfig sourceVersion: sourceVersionString self deprecated: 'see MetacelloToolBox class>>updateDevelopment:for:updateProjects:description: for replacement method'. self prepareForMethodUpdate: aConfig sourceVersion: sourceVersionString forceUpdate: false generating: [:selector :pragmaMap :ar :updatedPackageSpecsMap | | strm pragma | updatedPackageSpecsMap isEmpty ifTrue: [ ^false ]. strm := WriteStream on: String new. strm nextPutAll: selector asString, ' spec'; cr; tab; nextPutAll: '';cr. (ar at: 2) do: [:attribute | | vs d | vs := (ar at: 1) at: attribute. (d := updatedPackageSpecsMap at: attribute ifAbsent: []) ~~ nil ifTrue: [ vs packagesSpec list do: [:member | member spec file ~~ nil ifTrue: [ | x | (((x := d at: member spec name ifAbsent: []) ~~ nil) and: [ x ~~ #uptodate ]) ifTrue: [ member spec file: x file ]]]]. strm cr; tab; nextPutAll: 'spec for: ', attribute printString, ' do: ['; cr. attribute == #common ifTrue: [ vs author: MetacelloPlatform current authorName; timestamp: MetacelloPlatform current timestamp ]. vs configMethodOn: strm indent: 2. strm nextPutAll: '].']. (aConfig class compile: strm contents classified: (aConfig class whichCategoryIncludesSelector: pragma selector)) == nil ifTrue: [ self error: 'Error compiling the method' ]]. ^true ! ! !MetacelloVersionConstructor methodsFor: 'validation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26243062! validateVersionString: versionString againstSpec: versionSpec versionString = versionSpec versionString ifFalse: [ MetacelloValidationNotification signal: (MetacelloValidationError configurationClass: self configurationClass reasonCode: #incorrectVersionString callSite: #validateVersionString:againstSpec explanation: 'The version declared in the pragma ', versionString printString , ' does not match the version in the spec ' , versionSpec versionString printString) ]. ! ! !MetacelloVersionConstructor methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! verifyVersionImportPragmas: pragmaDict definedIn: versionMap pragmaDict copy keysAndValuesDo: [ :versionString :pragmaColl | [ pragmaColl do: [ :pragma | (pragma argumentAt: 2) do: [ :importedVersion | versionMap at: importedVersion ifAbsent: [ pragmaDict at: importedVersion ifAbsent: [ ^ self error: 'The imported version:' , importedVersion printString , ' for version: ' , versionString , ' referenced from the method: ' , pragma selector printString , ' in configuration ' , configuration class printString , ' has not been defined.' ] ] ] ] ] on: Error do: [ :ex | (MetacelloErrorInProjectConstructionNotification versionString: versionString exception: ex) ifTrue: [ ^ ex pass ] ifFalse: [ pragmaDict removeKey: versionString. self errorMap at: versionString put: ex ] ] ]! ! !MetacelloGenericProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/15/2012 13:37'! compareEqual: aMetacelloProjectSpec "'projectPackage repositories'" ^ (super compareEqual: aMetacelloProjectSpec) and: [ self repositories compareEqual: aMetacelloProjectSpec repositories ]! ! !MetacelloGenericProjectSpec methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24'! determineCurrentVersionForLoad self subclassResponsibility! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! getRepositories "raw access to iv" ^ repositories! ! !MetacelloGenericProjectSpec methodsFor: 'scripting' stamp: 'dkh 04/02/2013 20:22'! hasNoLoadConflicts: aMetacelloProjectSpec "'projectPackage repositories'" ^ (super hasNoLoadConflicts: aMetacelloProjectSpec) and: [ (self repositories isEmpty or: [ aMetacelloProjectSpec repositories isEmpty ]) or: [ self repositories hasNoLoadConflicts: aMetacelloProjectSpec repositories ] ]! ! !MetacelloGenericProjectSpec methodsFor: 'testing' stamp: 'dkh 6/30/2012 13:18'! hasRepository ^ self repositorySpecs notEmpty! ! !MetacelloGenericProjectSpec methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24'! load (MetacelloLookupProjectSpecForLoad new projectSpec: self; yourself) signal performLoad! ! !MetacelloGenericProjectSpec methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24'! loadVersion: aVersionOrNil self subclassResponsibility! ! !MetacelloGenericProjectSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! mergeMap | map | map := super mergeMap. map at: #'repositories' put: repositories. ^ map! ! !MetacelloGenericProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/17/2012 07:04'! mergeScriptRepository: anotherSpec self repositories: anotherSpec repositories! ! !MetacelloGenericProjectSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! mergeSpec: anotherSpec | newSpec map anotherRepositories | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. (anotherRepositories := map at: #'repositories') ~~ nil ifTrue: [ newSpec repositories: (self getRepositories == nil ifTrue: [ anotherRepositories ] ifFalse: [ self repositories mergeSpec: anotherRepositories ]) ]. ^ newSpec! ! !MetacelloGenericProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/5/2012 19:01:24'! metacelloRegistrationHash "projectPackage (ignored) repositories" ^ super metacelloRegistrationHash bitXor: self repositories metacelloRegistrationHash! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! name: aString super name: aString. self projectPackage: nil! ! !MetacelloGenericProjectSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! nonOverridable ^ super nonOverridable , #(#'projectPackage' #'repositories')! ! !MetacelloGenericProjectSpec methodsFor: 'copying' stamp: 'dkh 6/5/2012 19:01:24'! postCopy super postCopy. repositories := repositories copy. projectPackage := nil! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectPackage self subclassResponsibility! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:02'! projectPackage: aProjectPackage self shouldBeMutable. projectPackage := aProjectPackage! ! !MetacelloGenericProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! projectPackage: aBlock constructor: aVersionConstructor aVersionConstructor projectPackageForProject: aBlock! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repositories repositories ifNil: [ repositories := self project repositoriesSpec ]. ^ repositories! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:02'! repositories: anObject self shouldBeMutable. repositories := anObject. self projectPackage: nil! ! !MetacelloGenericProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repositories: aBlock constructor: aVersionConstructor aVersionConstructor repositoriesForProject: aBlock! ! !MetacelloGenericProjectSpec methodsFor: 'querying' stamp: 'dkh 6/30/2012 12:32'! repository | specs | self deprecated: 'Use repositories or repositorySpecs'. (specs := self repositorySpecs) isEmpty ifTrue: [ ^ nil ]. ^ specs first! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repository: aStringOrMetacelloRepositorySpec self repositories repository: aStringOrMetacelloRepositorySpec. self projectPackage: nil! ! !MetacelloGenericProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repository: anObject constructor: aVersionConstructor aVersionConstructor repositoryForProject: anObject! ! !MetacelloGenericProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! repository: aString username: username password: password self repositories repository: aString username: username password: password. self projectPackage: nil! ! !MetacelloGenericProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repository: aString username: username password: password constructor: aVersionConstructor aVersionConstructor repositoryForProject: aString username: username password: password! ! !MetacelloGenericProjectSpec methodsFor: 'querying' stamp: 'dkh 6/30/2012 14:19'! repositoryDescriptions ^ self repositorySpecs collect: [ :repoSpec | repoSpec description ]! ! !MetacelloGenericProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24'! repositorySpecs repositories ifNil: [ ^ #() ]. ^ self repositories map values! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asBaselineProjectSpec ^ self! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectRegistration ^ MetacelloProjectRegistration fromMCBaselineProjectSpec: self! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectSpec ^ self copyForScriptingInto: (MetacelloMCProjectSpec for: self project asConfigurationProject)! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! canDowngradeTo: aProjectSpec "cannot upgrade between baselines" ^ false! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! canUpgradeTo: aProjectSpec "cannot upgrade between baselines" ^ false! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! constructClassName ^ 'BaselineOf' , self name! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 20:42'! copyForRegistration: aMetacelloProjectRegistration onWrite: aBlock | copy | aMetacelloProjectRegistration baselineProjectSpecIfPresent: [ :spec | copy := spec copy. aBlock value: copy. aMetacelloProjectRegistration baselineProjectSpec: copy ] ifAbsent: [ aMetacelloProjectRegistration configurationProjectSpecIfPresent: [ :spec | copy := spec copy. aBlock value: copy. aMetacelloProjectRegistration configurationProjectSpec: copy ] ifAbsent: [ aBlock value: nil ] ]! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22'! determineCurrentVersionForLoad ^ self version! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'loading' stamp: 'dkh 07/16/2013 15:06'! ensureConfigurationLoaded: vrsn ensured: ensured "answer true if the configuration should be reloaded" "see Issue #181 for details ... basically we always want to consider loading the baseline from a project reference, especially if the two project specs are not the same..." "https://github.com/dalehenrich/metacello-work/issues/181" ^ true! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22'! hasClassName ^ className ~~ nil and: [ className ~= self constructClassName ]! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'private' stamp: 'dkh 07/28/2013 08:06'! hasConflictWithConfiguration: aConfigurationProjectSpec self name = aConfigurationProjectSpec name ifFalse: [ ^ true ]. self project configuration className = aConfigurationProjectSpec project configuration className ifFalse: [ ^ true ]. ^ ((self repositories isEmpty or: [ aConfigurationProjectSpec repositories isEmpty ]) or: [ self repositories hasNoLoadConflicts: aConfigurationProjectSpec repositories ]) not! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'importing' stamp: 'dkh 6/26/2012 16:34'! mergeImportLoads: aLoadList aLoadList ifNotNil: [ :otherLoads | self loads ifNil: [ loads := otherLoads ] ifNotNil: [ loads := loads , otherLoads ] ]! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22'! mergeSpec: anotherSpec ^ super mergeSpec: anotherSpec asBaselineProjectSpec! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22'! projectLabel ^ 'baseline'! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/23/2012 14:29'! validateVersionString: issues withDefaultVersionString: ignored self versionString ifNotNil: [ :vs | | prj | prj := self project asBaselineProject. vs ~= prj singletonVersionName ifTrue: [ issues add: (MetacelloValidationError configurationClass: self projectClass reasonCode: #'invalidVersionString' callSite: #'validateForScriptLoad:withDefaultVersionString:withDefaultRepositoryDecription:' explanation: 'version field is incorrect, should be: ' , prj singletonVersionName printString) ] ]! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22'! version self projectClass == nil ifTrue: [ ^ nil ]. ^ self projectClassProject version! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! version: anObject constructor: aVersionConstructor self error: 'version: not allowed in a baseline project spec'! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22'! versionString ^ versionString ifNil: [ self version ifNotNil: [:v | v versionString] ]! ! !MetacelloMCBaselineOfProjectSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! versionString: anObject constructor: aVersionConstructor self error: 'versionString: not allowed in a baseline project spec'! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asConfigurationProjectSpec ^ self! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectRegistration ^ MetacelloProjectRegistration fromMCConfigurationProjectSpec: self! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectSpec ^ self copyForScriptingInto: (MetacelloMCProjectSpec for: self project asConfigurationProject)! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22'! constructClassName ^ 'ConfigurationOf' , self name! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 20:42'! copyForRegistration: aMetacelloProjectRegistration onWrite: aBlock | copy | aMetacelloProjectRegistration configurationProjectSpecIfPresent: [ :spec | copy := spec copy. aBlock value: copy. aMetacelloProjectRegistration configurationProjectSpec: copy ] ifAbsent: [ aMetacelloProjectRegistration baselineProjectSpecIfPresent: [ :spec | copy := spec copy. aBlock value: copy. aMetacelloProjectRegistration baselineProjectSpec: copy ] ifAbsent: [ aBlock value: nil ] ]! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22'! hasClassName ^ className ~~ nil and: [ className ~= self constructClassName ]! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22'! mergeSpec: anotherSpec ^ super mergeSpec: anotherSpec asConfigurationProjectSpec! ! !MetacelloMCConfigurationOfProjectSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22'! projectLabel ^ 'configuration'! ! !MetacelloMCProjectSpec methodsFor: 'testing' stamp: 'dkh 6/14/2012 15:53'! allPackagesLoaded: aLoader "answer true if all of the packages (excluding projects) are loaded" | vrsn pkgs | (vrsn := self versionOrNil) == nil ifTrue: [ ^ false ]. pkgs := OrderedCollection new. (self loadListForVersion: vrsn) do: [ :nm | vrsn packages do: [ :pkg | (pkg isPackageLoaded: aLoader) ifFalse: [ ^ false ] ] ]. ^ true! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asBaselineProjectSpec ^ self copyForScriptingInto: (MetacelloMCBaselineOfProjectSpec for: self project asBaselineProject)! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asConfigurationProjectSpec ^ self copyForScriptingInto: (MetacelloMCConfigurationOfProjectSpec for: self project asConfigurationProject)! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectRegistration (self className beginsWith: 'BaselineOf') ifTrue: [ ^ MetacelloProjectRegistration fromMCBaselineProjectSpec: self ]. ^ MetacelloProjectRegistration fromMCConfigurationProjectSpec: self! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! asProjectSpec ^ self! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! canDowngradeTo: aMetacelloProjectSpec ^ (super canDowngradeTo: aMetacelloProjectSpec) and: [ self file = aMetacelloProjectSpec file ]! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! canUpgradeTo: aMetacelloProjectSpec ^ (super canUpgradeTo: aMetacelloProjectSpec) and: [ self file = aMetacelloProjectSpec file ]! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25872537! className: aString super className: aString. self projectPackage: nil! ! !MetacelloMCProjectSpec methodsFor: 'testing' stamp: 'dkh 6/13/2012 16:30' prior: 25883797! compareCurrentVersion: anOperator targetVersionStatus: targetVersionStatus using: anMCLoader ^ (MetacelloLookupProjectSpecForLoad new projectSpec: self; yourself) signal performCurrentVersionTestAgainst: self versionOrNil operator: anOperator targetVersionStatus: targetVersionStatus using: anMCLoader! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/15/2012 13:40'! compareEqual: aMetacelloProjectSpec "'projectPackage repositories'" ^ (super compareEqual: aMetacelloProjectSpec) and: [ self file = aMetacelloProjectSpec file ]! ! !MetacelloMCProjectSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25884287! compareRelativeCurrentVersion: anOperator targetVersionStatus: targetVersionStatus using: anMCLoader | cv vrsn | (vrsn := self versionOrNil) == nil ifTrue: [ ^false ]. (cv := self relativeCurrentVersion) == nil ifTrue: [ ^false ]. (targetVersionStatus includes: cv versionStatus) ifTrue: [ ^cv perform: anOperator with: vrsn ]. ^false ! ! !MetacelloMCProjectSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 20:26'! copyForRegistration: aMetacelloProjectRegistration onWrite: aBlock self subclassResponsibility! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! copyForScriptingInto: aProjectSpec ^aProjectSpec setName: name; className: className; versionString: versionString; operator: operator; setLoads: loads; preLoadDoIt: preLoadDoIt; postLoadDoIt: postLoadDoIt; repositories: repositories copy; file: file! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 7/7/2012 07:16' prior: 25875621! determineCurrentVersionForLoad "don't use self currentVersion, because we are interested in the currentVersion of the project as loaded in image, not the current version relative to our load list" | prjct version currentVersion packageAndProjectNames cvs | self projectClass == nil ifTrue: [ ^ nil ]. (version := self versionOrNil) == nil ifTrue: [ ^ nil ]. version blessing == #'baseline' ifTrue: [ ^ version ]. self loader ignoreImage ifTrue: [ ^ version ]. prjct := self projectClass new project. prjct loader: self loader. (currentVersion := prjct currentVersion) == nil ifTrue: [ ^ nil ]. (cvs := currentVersion versionStatus) == #'somethingLoaded' ifTrue: [ ^ nil ]. (#(#'allLoadedToSpec' #'loadedToSpec' #'loadedMatchConstraints') includes: (cvs := currentVersion versionStatus)) ifTrue: [ (currentVersion perform: self operator with: version) ifTrue: [ "load currentVersion" ^ currentVersion ]. "load version" ^ nil ]. version = currentVersion ifTrue: [ ^ currentVersion ]. "I don't believe that it is possible to reach this point in the method, so I will be interested if I run across a case that produces this error" (MetacelloProjectSpecLoadConflict projectSpec: self) signal: 'Project load conflict for' , prjct label printString , ' between current version ' , currentVersion printString , '(' , cvs asString , ') and specified version ' , version printString , '. Press resume to continue with load anyway'. ^ nil! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 07/16/2013 15:05'! ensureConfigurationLoaded: vrsn ensured: ensured "answer true if the configuration should be reloaded" vrsn blessing == #'development' ifTrue: [ ensured ~~ #'latest' ifTrue: [ ^ MetacelloScriptEnsureProjectLoadedForDevelopment signal ] ]. ^ false! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22'! ensureLoadUsing: aLoader (MetacelloLookupProjectSpec new projectSpec: self; yourself) signal projectPackage ensureLoadUsing: aLoader! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 07/29/2013 07:16' prior: 25877020! ensureLoadedForDevelopmentUsing: mcLoader "for #development projects, always need latest version of package when contemplating a load" | ensured | ensured := mcLoader ensuredMap at: self name ifAbsent: [ nil ]. self projectClass ~~ nil ifTrue: [ | vrsn | vrsn := self versionOrNil. vrsn ~~ nil ifTrue: [ (self ensureConfigurationLoaded: vrsn ensured: ensured) ifTrue: [ mcLoader ensureForDevelopment ifTrue: [ | pc | (pc := self projectClass) ~~ nil ifTrue: [ MetacelloClearStackCacheNotification signal: #(#'currentVersion' #'currentVersionAgainst:' #'currentVersionInfo' #'versionConstructor' #'loadableSpecNames') , {pc} ]. self ensureLoadUsing: mcLoader ] ifFalse: [ self projectPackage fetchUsing: mcLoader ]. mcLoader ensuredMap at: self name put: #'latest' ]. ^ self ] ]. ensured == nil ifTrue: [ "projectClass == nil or version == nil" mcLoader ensureForDevelopment ifTrue: [ | pc | (pc := self projectClass) ~~ nil ifTrue: [ MetacelloClearStackCacheNotification signal: #(#'currentVersion' #'currentVersionAgainst:' #'currentVersionInfo' #'versionConstructor' #'loadableSpecNames') , {pc} ]. self ensureLoadUsing: mcLoader ] ifFalse: [ self fetchUsing: mcLoader ]. mcLoader ensuredMap at: self name put: #'present' ]! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 03/13/2013 15:18' prior: 25878251! ensureProjectLoaded "Ensure that the MetacelloProject is loaded in image. projectClass == nil or requested version non-existent warrants a project package load." "answer true if the projectClass exists" (self projectClass == nil or: [ self versionOrNil == nil or: [ (loader notNil or: [ self isMutable ]) and: [ self loader ignoreImage ] ] ]) ifTrue: [ | pc | (pc := self projectClass) ~~ nil ifTrue: [ MetacelloClearStackCacheNotification signal: #(#'currentVersion' #'currentVersionAgainst:' #'currentVersionInfo' #'versionConstructor' #'loadableSpecNames') , {pc} ]. self projectPackage ifNil: [ ^ true ]. self ensureLoadUsing: self loader ]. ^ self projectClass ~~ nil! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22'! fetchUsing: aLoader (MetacelloLookupProjectSpec new projectSpec: self; yourself) signal projectPackage fetchUsing: aLoader! ! !MetacelloMCProjectSpec methodsFor: 'querying' stamp: 'dkh 9/10/2012 16:05' prior: 25881371! file file ifNil: [ ^ self className ]. ^ file! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03' prior: 25872788! file: aString self shouldBeMutable. file := aString. self projectPackage: nil! ! !MetacelloMCProjectSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! file: aString constructor: aVersionConstructor aVersionConstructor fileForProject: aString! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! getFile "raw access to iv" ^ file! ! !MetacelloMCProjectSpec methodsFor: 'as yet unclassified' stamp: 'dkh 07/28/2013 09:45'! hasConflictWithBaseline: aBaselineProjectSpec "baseline may not trump a configuration" ^ false! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 04/02/2013 20:23'! hasNoLoadConflicts: aMetacelloProjectSpec "'projectPackage repositories'" ^ (super hasNoLoadConflicts: aMetacelloProjectSpec) and: [ self file = aMetacelloProjectSpec file ]! ! !MetacelloMCProjectSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25885434! isPartiallyLoaded: aLoader | vrsn | (vrsn := self versionOrNil) == nil ifTrue: [ ^false ]. (self loadListForVersion: vrsn) do: [:nm | (vrsn packagesForSpecNamed: nm ) do: [:pkg | (pkg isPackageLoaded: aLoader) ifTrue: [ ^true ]]]. ^false! ! !MetacelloMCProjectSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25885771! isPossibleBaseline | vrsn | (vrsn := self versionOrNil) == nil ifTrue: [ ^false ]. (vrsn allPackagesForSpecNamed: (self loadListForVersion: vrsn)) do: [:pkg | pkg workingCopy == nil ifTrue: [ ^false ]]. ^true! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25873000! loadPackageList | vrsn pkgs | (vrsn := self versionOrNil) == nil ifTrue: [ ^#() ]. pkgs := OrderedCollection new. (self loadListForVersion: vrsn) do: [:nm | pkgs addAll: ((vrsn packagesForSpecNamed: nm ) collect: [:each | each name ])]. ^pkgs! ! !MetacelloMCProjectSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25879130! loadVersion: aVersionOrNil "Load the correct version of the project" | vrsn mcLoader list | self ensureProjectLoaded. vrsn := aVersionOrNil. vrsn == nil ifTrue: [ [ vrsn := self version ] on: MetacelloVersionDoesNotExistError do: [ :ex | ^ (MetacelloProjectSpecLoadError projectSpec: self) versionDoesNotExistException: ex; signal: 'No version found for ' , self versionString printString , ' of ' , self className asString , ' because: ' , ex description ] ]. mcLoader := self loader copy. mcLoader operator: self operator. vrsn loader: mcLoader. list := (mcLoader ignoreImage ifTrue: [ self loadListForVersion: vrsn ] ifFalse: [ vrsn packageAndProjectNamesToLoad: (self loadListForVersion: vrsn) loader: mcLoader ]) asSet. MetacelloPlatform current useStackCacheDuring: [ :dict | | projectCache cachedList | projectCache := dict at: self projectClass ifAbsent: [ dict at: self projectClass put: Dictionary new ]. (cachedList := projectCache at: vrsn ifAbsent: [ ]) == nil ifTrue: [ projectCache at: vrsn put: list ] ifFalse: [ (cachedList size = list size and: [ cachedList includesAllOf: list ]) ifTrue: [ "no need to refetch list ... recursion stoppper (Issue 95)" ^ self ] ifFalse: [ projectCache at: vrsn put: list ] ]. vrsn versionString ~= self versionString ifTrue: [ Transcript show: ' [' , vrsn versionString , ']' ]. mcLoader preLoad: self. vrsn fetchRequiredFromArray: list. "do the load" (MetacelloProjectSpecLoadedNotification new projectSpec: (self copy versionString: vrsn versionString)) signal. mcLoader postLoad: self ] defaultDictionary: Dictionary new! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25873342! loadedPackageNames: aLoader | vrsn pkgs | (vrsn := self versionOrNil) == nil ifTrue: [ ^#() ]. pkgs := OrderedCollection new. (self loadListForVersion: vrsn) do: [:nm | (vrsn packagesForSpecNamed: nm ) do: [:pkg | (pkg isPackageLoaded: aLoader) ifTrue: [ pkgs add: pkg name ]]]. ^pkgs! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/8/2012 14:04:22'! metacelloRegistrationHash "file" ^ String stringHash: self file initialHash: super metacelloRegistrationHash! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25873720! packageFileSpecFor: aMetacelloPackagesSpec ^(aMetacelloPackagesSpec project projectReferenceSpec) name: self name; projectReference: self copy; yourself. ! ! !MetacelloMCProjectSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25881604! projectClass self className == nil ifTrue: [ ^ nil ]. ^ Smalltalk at: self className asSymbol ifAbsent: [ ]! ! !MetacelloMCProjectSpec methodsFor: 'querying' stamp: 'dkh 7/2/2012 16:40' prior: 25881794! projectClassProject "indirection needed when projectClass is _not_ a subclass of MetacelloProject" ^ self projectClass new project setBaselineRepositoryDescription: self repositoryDescriptions; yourself! ! !MetacelloMCProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25882008! projectPackage projectPackage ifNil: [ self className ifNil: [ ^ nil ]. projectPackage := self project packageSpec. projectPackage name: self className. self getFile ifNotNil: [ projectPackage file: self file ]. projectPackage repositories: self getRepositories ]. ^ projectPackage! ! !MetacelloMCProjectSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25882121! relativeCurrentVersion "currentVersion calculated relative to the loadList" | vrsn expanded loadList | (vrsn := self versionOrNil) == nil ifTrue: [ ^ nil ]. expanded := [ vrsn expandToLoadableSpecNames: (loadList := self loadListForVersion: vrsn) ] on: Error do: [ :ex | vrsn blessing == #'development' ifTrue: [ self ensureLoadUsing: self loader. vrsn := self versionOrNil. ex return: (vrsn expandToLoadableSpecNames: loadList) ]. ex pass ]. ^ self projectClassProject currentVersionAgainst: expanded! ! !MetacelloMCProjectSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25886480! resolveToAllPackagesIn: aVersionSpec visited: visited | vrsn | visited pushProject: [ visited visit: self doing: [ :spec | spec ensureProjectLoaded. vrsn := spec version. ^ vrsn allPackagesForSpecNamed: (self loadListForVersion: vrsn) ifAbsent: [ self error: 'invalid loads: spec' ] ] ]. ^ #()! ! !MetacelloMCProjectSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25874647! updateForSpawnMethod: sourceSpec "This means that this spec was used in a baseline and will be used in a version .... drop all information that isn't useful" repositories := className := operator := loads := projectPackage := nil. sourceSpec ~~ nil ifTrue: [ versionString := sourceSpec versionString ].! ! !MetacelloMCProjectSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25875041! updatePackageSpec: updatedSpecs "Add project copy to updatedSpecs if the current version of the project is different from the receiver's version" | prj currentVersion spec | className == nil ifTrue: [ ^ self ]. prj := self projectClassProject. (currentVersion := prj currentVersion) = self versionOrNil ifTrue: [ ^ self ]. currentVersion == nil ifTrue: [ ^ self ]. spec := self copy. spec versionString: currentVersion versionString. updatedSpecs at: spec name put: spec! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/23/2012 11:17'! validateForScriptLoad: aScriptEngine withDefaultVersionString: defaultVersionString withDefaultRepositoryDecription: defaultRepositoryDecription | issues callSite | issues := OrderedCollection new. callSite := #'validateForScriptLoad:withDefaultVersionString:withDefaultRepositoryDecription:'. self name ifNil: [ issues add: (MetacelloValidationError configurationClass: self projectClass reasonCode: #'incompleteProjectSpec' callSite: callSite explanation: 'name field required') ]. self className ifNil: [ issues add: (MetacelloValidationError configurationClass: self projectClass reasonCode: #'incompleteProjectSpec' callSite: callSite explanation: 'className field required') ]. self repositories isEmpty ifTrue: [ defaultRepositoryDecription ifNotNil: [ self repository: defaultRepositoryDecription ] ifNil: [ issues add: (MetacelloValidationError configurationClass: self projectClass reasonCode: #'incompleteProjectSpec' callSite: callSite explanation: 'repository field required') ] ]. self validateVersionString: issues withDefaultVersionString: defaultVersionString. ^ issues! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/23/2012 11:56'! validateVersionString: issues withDefaultVersionString: defaultVersionString self versionString ifNil: [ defaultVersionString ifNotNil: [ self versionString: defaultVersionString ] ifNil: [ issues add: (MetacelloValidationError configurationClass: self projectClass reasonCode: #'incompleteProjectSpec' callSite: #'validateForScriptLoad:withDefaultVersionString:withDefaultRepositoryDecription:' explanation: 'version field required') ] ]! ! !MetacelloMCProjectSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25882896! version "Empty version string means use latestVersion or #bleedingEdge" self projectClass == nil ifTrue: [ ^ nil ]. ^ self versionString == nil ifTrue: [ | vrsn | "Eventually it will become an error to not specify a project reference version as default: #stable is the preferred default" "self deprecated: 'Must specify a project reference version.'." self flag: 'deprecate after version 1.0'. (vrsn := self projectClassProject latestVersion) == nil ifTrue: [ self projectClassProject version: #bleedingEdge ] ifFalse: [ vrsn ] ] ifFalse: [ self projectClassProject version: self versionString ]! ! !MetacelloMCProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/27/2012 04:59'! versionForScriptEngine: aMetacelloScriptEngine | prj | prj := self projectClass ifNil: [ self project ] ifNotNil: [ self projectClassProject ]. ^ ((prj projectForScriptEngine: aMetacelloScriptEngine) version: self versionString) silently: aMetacelloScriptEngine silently; ignoreImage: aMetacelloScriptEngine ignoreImage; cacheRepository: aMetacelloScriptEngine cacheRepository; repositoryOverrides: aMetacelloScriptEngine repositoryOverrides! ! !MetacelloProjectSpec methodsFor: 'adding' stamp: 'dkh 6/5/2012 19:01:24' prior: 26038653! addToMetacelloPackages: aMetacelloPackagesSpec | spec | spec := (aMetacelloPackagesSpec project projectReferenceSpec) name: self name; projectReference: self copy; yourself. aMetacelloPackagesSpec addMember: (aMetacelloPackagesSpec addMember name: spec name; spec: spec; yourself) ! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/29/2013 11:18'! canDowngradeTo: aMetacelloProjectSpec (self className = aMetacelloProjectSpec className and: [ self operator == aMetacelloProjectSpec operator ]) ifFalse: [ ^ false ]. self versionOrNil == nil ifTrue: [ "https://github.com/dalehenrich/metacello-work/issues/198#issuecomment-21737458" ^ true ]. ^ (self compareVersions: aMetacelloProjectSpec usingOperator: self operator) not! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/29/2013 11:18'! canUpgradeTo: aMetacelloProjectSpec (self className = aMetacelloProjectSpec className and: [ self operator == aMetacelloProjectSpec operator ]) ifFalse: [ ^ false ]. self versionOrNil == nil ifTrue: [ "https://github.com/dalehenrich/metacello-work/issues/198#issuecomment-21737458" ^ true ]. ^ self compareVersions: aMetacelloProjectSpec usingOperator: self operator! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26045857! className className ifNil: [ self name ifNotNil: [ self className: self constructClassName ] ]. ^ className! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03' prior: 26037391! className: aString self shouldBeMutable. className := aString! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! className: aString constructor: aVersionConstructor aVersionConstructor classNameForProject: aString! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/13/2013 14:22'! compareEqual: aMetacelloProjectSpec "name className versionString operator loads preLoadDoIt postLoadDoIt" ^ self className = aMetacelloProjectSpec className and: [ (self compareVersionsEqual: aMetacelloProjectSpec) and: [ self operator == aMetacelloProjectSpec operator and: [ self loads = aMetacelloProjectSpec loads and: [ self preLoadDoIt value == aMetacelloProjectSpec preLoadDoIt value and: [ self postLoadDoIt value == aMetacelloProjectSpec postLoadDoIt value ] ] ] ] ]! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/29/2013 11:18'! compareVersions: aMetacelloProjectSpec usingOperator: anOperator ^ aMetacelloProjectSpec versionOrNil == nil ifTrue: [ "https://github.com/dalehenrich/metacello-work/issues/199#issuecomment-21739622" aMetacelloProjectSpec versionString asMetacelloVersionNumber perform: anOperator with: self version versionNumber ] ifFalse: [ ^ aMetacelloProjectSpec version perform: anOperator with: self version ]! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/13/2013 14:21'! compareVersionsEqual: aMetacelloProjectSpec | vrsn otherVrsn | vrsn := self versionOrNil. otherVrsn := aMetacelloProjectSpec versionOrNil. vrsn ifNil: [ ^ vrsn = otherVrsn ]. otherVrsn ifNil: [ ^ false ]. ^ vrsn versionNumber = otherVrsn versionNumber! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 9/10/2012 16:17' prior: 26039555! configMethodBodyOn: aStream indent: indent | hasVersionString hasOperator hasProjectPackage hasLoads hasClassName hasPreLoadDoIt hasPostLoadDoIt | hasClassName := self hasClassName. hasVersionString := self versionString ~~ nil. hasOperator := operator ~~ nil. hasProjectPackage := self hasRepository or: [ hasClassName & (self getFile ~~ nil) ]. hasLoads := self loads ~~ nil. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. hasClassName ifTrue: [ hasVersionString | hasOperator | hasProjectPackage | hasLoads ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'className: ' , self className printString. hasVersionString | hasPreLoadDoIt | hasPostLoadDoIt | hasOperator | hasLoads | hasProjectPackage ifTrue: [ aStream nextPut: $; ] ]. hasVersionString ifTrue: [ | vs | hasClassName | hasOperator | hasProjectPackage | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. vs := self versionString. aStream nextPutAll: 'versionString: '. vs isSymbol ifTrue: [ aStream nextPut: $# ]. aStream nextPutAll: vs asString printString. hasPreLoadDoIt | hasPostLoadDoIt | hasOperator | hasProjectPackage | hasLoads ifTrue: [ aStream nextPut: $; ] ]. hasPreLoadDoIt ifTrue: [ hasClassName | hasOperator | hasProjectPackage | hasLoads | hasPreLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'preLoadDoIt: '. self preLoadDoIt value isSymbol ifTrue: [ aStream nextPut: $#; nextPutAll: self preLoadDoIt value asString printString ] ifFalse: [ aStream nextPutAll: self preLoadDoIt value asString ]. hasPostLoadDoIt | hasOperator | hasProjectPackage | hasLoads ifTrue: [ aStream nextPut: $; ] ]. hasPostLoadDoIt ifTrue: [ hasClassName | hasOperator | hasProjectPackage | hasLoads | hasPostLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'postLoadDoIt: '. self postLoadDoIt value isSymbol ifTrue: [ aStream nextPut: $#; nextPutAll: self postLoadDoIt value asString printString ] ifFalse: [ aStream nextPutAll: self postLoadDoIt value asString ]. hasOperator | hasProjectPackage | hasLoads ifTrue: [ aStream nextPut: $; ] ]. hasOperator ifTrue: [ hasClassName | hasVersionString | hasProjectPackage | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'operator: #' , self operator asString printString. hasProjectPackage | hasLoads ifTrue: [ aStream nextPut: $; ] ]. hasLoads ifTrue: [ hasClassName | hasVersionString | hasOperator | hasProjectPackage | hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'loads: #('. self loads do: [ :str | aStream nextPutAll: str printString , ' ' ]. aStream nextPut: $). hasProjectPackage ifTrue: [ aStream nextPut: $; ] ]. hasProjectPackage ifTrue: [ | hasName hasRepo | hasRepo := self hasRepository. hasName := self file ~= self className. hasName ifTrue: [ hasClassName | hasVersionString | hasOperator | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. aStream nextPutAll: 'file: ' , self file printString. hasRepo ifTrue: [ aStream nextPut: $; ] ]. hasRepo ifTrue: [ | repos | repos := self repositories map values. repos size = 1 ifTrue: [ hasClassName | hasVersionString | hasOperator | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt | hasName ifTrue: [ aStream cr; tab: indent + 1 ] ifFalse: [ aStream space ]. repos first configMethodCascadeOn: aStream lastCascade: true ] ifFalse: [ aStream cr. self repositories configMethodCascadeOn: aStream indent: indent ] ] ]! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26044094! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec '; cr; tab: indent + 1; nextPutAll: 'name: ', self name printString, ';'. self configMethodBodyOn: aStream indent: indent. aStream nextPut: $.! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 6/30/2012 13:25' prior: 26044416! configShortCutMethodOn: aStream member: aMember indent: indent | hasVersionString hasOperator hasProjectPackage hasLoads hasClassName hasPreLoadDoIt hasPostLoadDoIt | hasClassName := self hasClassName. hasVersionString := self versionString ~~ nil. hasOperator := operator ~~ nil. hasProjectPackage := self hasRepository or: [ hasClassName & (self getFile ~~ nil or: [ className ~= self name ]) ]. hasLoads := self loads ~~ nil. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. hasClassName | hasOperator | hasProjectPackage | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ (aMember methodUpdateSelector == #'copy:' or: [ aMember methodUpdateSelector == #'with:' ]) ifTrue: [ aStream nextPutAll: 'with: ['; cr ] ifFalse: [ aStream nextPutAll: 'overrides: ['; cr ]. aStream tab: indent; nextPutAll: 'spec'. self configMethodBodyOn: aStream indent: indent. aStream nextPutAll: ' ]'. ^ self ]. hasVersionString ifTrue: [ | vs | vs := self versionString. aStream nextPutAll: 'with: '. vs isSymbol ifTrue: [ aStream nextPut: $# ]. aStream nextPutAll: vs asString printString ]! ! !MetacelloProjectSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! constructClassName ^ nil! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/24/2012 11:39'! currentlyLoadedClassesInVersion self versionOrNil ifNotNil: [ :vrsn | ^ vrsn currentlyLoadedClassesInVersion ]. ^ #()! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 9/10/2012 16:05'! file ^ self className! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! getClassName "raw access to iv" ^ className! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! getFile "raw access to iv" ^ nil! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! getOperator ^operator! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26045969! getPostLoadDoIt ^postLoadDoIt! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046090! getPreLoadDoIt ^preLoadDoIt! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! getRepositories "raw access to iv" ^ nil! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24'! hasClassName ^ className ~~ nil! ! !MetacelloProjectSpec methodsFor: 'as yet unclassified' stamp: 'dkh 04/02/2013 20:28'! hasLoadConflicts: aMetacelloProjectSpec ^ (self hasNoLoadConflicts: aMetacelloProjectSpec) not! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/13/2013 14:22'! hasNoLoadConflicts: aMetacelloProjectSpec "same as compareEqual:, except if versionString and/or repositories are not specified for either one, then there are not conflicts" ^ self className = aMetacelloProjectSpec className and: [ ((self versionString == nil or: [ aMetacelloProjectSpec versionString == nil ]) or: [ self compareVersionsEqual: aMetacelloProjectSpec ]) and: [ self operator == aMetacelloProjectSpec operator ] ]! ! !MetacelloProjectSpec methodsFor: 'testing' stamp: 'dkh 9/11/2012 09:24'! hasNonVersionStringField | hasVersionString hasOperator hasProjectPackage hasLoads hasClassName hasPreLoadDoIt hasPostLoadDoIt | hasClassName := self hasClassName. hasVersionString := self versionString ~~ nil. hasOperator := operator ~~ nil. hasProjectPackage := (self file ~~ nil and: [ hasClassName and: [ self className ~= self name ] ]) or: [ self hasRepository ]. hasLoads := self loads ~~ nil. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. ^ hasClassName | hasOperator | hasProjectPackage | hasLoads | hasPreLoadDoIt | hasPostLoadDoIt! ! !MetacelloProjectSpec methodsFor: 'testing' stamp: 'dkh 9/10/2012 15:49'! hasRepository ^ false! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 07/25/2013 15:43'! isLocked ^ self registration locked! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26045757! label ^self name! ! !MetacelloProjectSpec methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24' prior: 26039043! load self subclassResponsibility! ! !MetacelloProjectSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! loadListForVersion: vrsn ^ (self loads == nil or: [self loads isEmpty]) ifTrue: [vrsn spec defaultPackageNames] ifFalse: [self loads]! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046199! loads ^ loads! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26037513! loads: aCollection aCollection setLoadsInMetacelloProject: self! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! loads: anObject constructor: aVersionConstructor aVersionConstructor loadsForProject: anObject! ! !MetacelloProjectSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26039166! mergeMap | map | map := super mergeMap. map at: #name put: name. map at: #className put: className. map at: #versionString put: versionString. map at: #operator put: operator. map at: #loads put: loads. map at: #preLoadDoIt put: preLoadDoIt. map at: #postLoadDoIt put: postLoadDoIt. ^map! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/21/2012 14:12'! mergeScriptLoads: aSpec self shouldBeMutable. aSpec loads ifNotNil: [ :otherLoads | self loads ifNil: [ loads := otherLoads ] ifNotNil: [ loads := (loads , otherLoads) asSet asArray ] ]. self loader: aSpec loader! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/5/2012 19:01:24'! metacelloRegistrationHash "name className versionString operator loads preLoadDoIt postLoadDoIt" | hash | hash := String stringHash: name initialHash: 0. hash := String stringHash: self className initialHash: hash. hash := String stringHash: self versionString initialHash: hash. hash := String stringHash: self operator asString initialHash: hash. hash := String stringHash: self preLoadDoIt asString initialHash: hash. hash := String stringHash: self postLoadDoIt asString initialHash: hash. ^ hash bitXor: loads hash! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046294! name ^name! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03' prior: 26037660! name: aString ((aString at: 1) isSeparator or: [ (aString at: aString size) isSeparator ]) ifTrue: [ self error: 'Names are not allowed to have leading or trailing blanks: ' , aString printString ]. self shouldBeMutable. name := aString! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! name: aString constructor: aVersionConstructor aVersionConstructor nameForProject: aString! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046386! operator operator == nil ifTrue: [ ^#>= ]. ^ operator! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03' prior: 26037772! operator: anObject " #= #~= #> #< #>= #<= #~> " self shouldBeMutable. operator := anObject! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! operator: anObject constructor: aVersionConstructor aVersionConstructor operatorForProject: anObject! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046531! postLoadDoIt ^postLoadDoIt! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26037935! postLoadDoIt: anObject anObject setPostLoadDoItInMetacelloSpec: self! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! postLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor postLoadDoItForProject: aSymbol! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046649! preLoadDoIt ^preLoadDoIt! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26038096! preLoadDoIt: anObject anObject setPreLoadDoItInMetacelloSpec: self! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! preLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor preLoadDoItForProject: aSymbol! ! !MetacelloProjectSpec methodsFor: 'visiting' stamp: 'dkh 6/5/2012 19:01:24'! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock projectBlock value: self! ! !MetacelloProjectSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24'! projectLabel ^ 'project'! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046755! projectPackage ^nil! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/17/2012 11:19'! registration ^ MetacelloProjectRegistration registrationForProjectSpec: self ifAbsent: [ :ignored | ] ifPresent: [ :existing :new | existing ]! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 6/6/2012 16:05'! registrationsCompareEqual: aMetacelloProjectSpec "name className versionString operator loads preLoadDoIt postLoadDoIt" ^ self className = aMetacelloProjectSpec className and: [ self versionString = aMetacelloProjectSpec versionString and: [ self operator == aMetacelloProjectSpec operator ] ]! ! !MetacelloProjectSpec methodsFor: 'private' stamp: 'dkh 9/11/2012 11:50'! resolveToLoadableSpec ^self copy! ! !MetacelloProjectSpec methodsFor: 'private' stamp: 'dkh 7/19/2012 16:02' prior: 26047173! setLoads: aCollection self shouldBeMutable. loads := aCollection! ! !MetacelloProjectSpec methodsFor: 'private' stamp: 'dkh 7/19/2012 16:02'! setName: aStringOrNil self shouldBeMutable. name := aStringOrNil! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 15:09' prior: 26038255! setPostLoadDoIt: aSymbol self shouldBeMutable. postLoadDoIt := aSymbol! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 15:09' prior: 26038396! setPreLoadDoIt: aSymbol self shouldBeMutable. preLoadDoIt := aSymbol! ! !MetacelloProjectSpec methodsFor: 'scripting' stamp: 'dkh 7/19/2012 10:19'! unregisterProject ^ MetacelloProjectRegistration registrationForProjectSpec: self ifAbsent: [ ] ifPresent: [ :existing :new | existing unregisterProject ]! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24'! version self subclassResponsibility! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! version: anObject constructor: aVersionConstructor aVersionConstructor versionForProject: anObject! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26046865! versionKey "suitable for using as a unique key for the receiver's version in a dictionary" ^ self version versionKey! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24'! versionOrNil ^[ self version ] on: MetacelloVersionDoesNotExistError do: [:ex | ^nil ]. ! ! !MetacelloProjectSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26047063! versionString ^ versionString! ! !MetacelloProjectSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 15:09' prior: 26038524! versionString: anObject self shouldBeMutable. versionString := anObject! ! !MetacelloProjectSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! versionString: anObject constructor: aVersionConstructor aVersionConstructor versionStringForProject: anObject! ! !MetacelloToolBoxConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/7/2012 13:12' prior: 26212898! setFor: attributeList do: aBlock "conditional version support" | methodSection | methodSection := MetacelloVersionMethodSection new attributes: attributeList asMetacelloAttributeList; block: aBlock; yourself. currentSection ~~ nil ifTrue: [ currentSection addMethodSection: methodSection ] ifFalse: [ self methodSections add: methodSection ]! ! !MetacelloToolBoxConstructor methodsFor: 'api callbacks' stamp: 'dkh 9/7/2012 13:12' prior: 26213394! setFor: attributeList version: aString "conditional symbolicVersion support" self methodSections add: (MetacelloSymbolicVersionSpec new attributes: attributeList asMetacelloAttributeList; versionString: aString; yourself)! ! !MetacelloRepositorySpec methodsFor: 'adding' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052507! addToMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec addMember name: self name; spec: self; yourself)! ! !MetacelloRepositorySpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26053185! configMethodCascadeOn: aStream lastCascade: lastCascade aStream nextPutAll: 'repository: ', self description printString. (self username isEmpty not or: [ self password isEmpty not ]) ifTrue: [ aStream nextPutAll: ' username: ', self username printString, ' password: ', self password printString ]. lastCascade ifFalse: [ aStream nextPut: $;; cr ]. ! ! !MetacelloRepositorySpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26053625! configMethodOn: aStream indent: indent aStream tab: indent; nextPutAll: 'spec '. self configMethodCascadeOn: aStream lastCascade: true! ! !MetacelloRepositorySpec methodsFor: 'mc support' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052778! createRepository | repo | repo := self project createRepository: self. ^ MCRepositoryGroup default repositories detect: [ :each | each = repo ] ifNone: [ repo ]! ! !MetacelloRepositorySpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 26053853! description ^description! ! !MetacelloRepositorySpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052017! description: aString description := aString! ! !MetacelloRepositorySpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054535! extractTypeFromDescription ^MetacelloPlatform current extractTypeFromDescription: self description! ! !MetacelloRepositorySpec methodsFor: 'mc support' stamp: 'dkh 07/16/2013 19:35'! hasNoLoadConflicts: aMetacelloProjectSpec self description = aMetacelloProjectSpec description ifTrue: [ ^ true ]. self type = 'github' ifTrue: [ ^ self createRepository hasNoLoadConflicts: aMetacelloProjectSpec createRepository ]. ^ false! ! !MetacelloRepositorySpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054716! mergeIntoMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec mergeMember name: self name; spec: self; yourself)! ! !MetacelloRepositorySpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052918! mergeMap | map | map := super mergeMap. map at: #'description' put: description. map at: #'type' put: self type. map at: #'username' put: username. map at: #'password' put: password. ^ map! ! !MetacelloRepositorySpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 26053961! name ^self description! ! !MetacelloRepositorySpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054069! password password == nil ifTrue: [ password := '' ]. ^password! ! !MetacelloRepositorySpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052147! password: aString password := aString! ! !MetacelloRepositorySpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054987! removeFromMetacelloRepositories: aMetacelloRepositoriesSpec aMetacelloRepositoriesSpec addMember: (aMetacelloRepositoriesSpec removeMember name: self name; spec: self; yourself)! ! !MetacelloRepositorySpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054218! type type == nil ifTrue: [ type := self extractTypeFromDescription ]. ^type! ! !MetacelloRepositorySpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052271! type: aString type := aString! ! !MetacelloRepositorySpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 26054380! username username == nil ifTrue: [ username := '' ]. ^username! ! !MetacelloRepositorySpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 26052387! username: aString username := aString! ! !MetacelloPackagesSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25999239! add: aSpec aSpec addToMetacelloPackages: self! ! !MetacelloPackagesSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25994891! applyIncludesTo: orderedSpecs for: pkgSpec firstTime: firstTime | movedSpecs baseIndex includedSpec result | movedSpecs := Set new. baseIndex := orderedSpecs indexOf: pkgSpec. pkgSpec includesForPackageOrdering do: [:includedSpecName | includedSpec := orderedSpecs detect: [:spec | spec name = includedSpecName ] ifNone: []. (self slideIn: orderedSpecs spec: includedSpec baseIndex: baseIndex seen: IdentitySet new firstTime: firstTime) ifTrue: [ movedSpecs add: includedSpec name ]]. ^ movedSpecs! ! !MetacelloPackagesSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25999855! configMethodOn: aStream indent: indent | packageSpecs | packageSpecs := self map values. packageSpecs size = 0 ifTrue: [ ^aStream nextPutAll: 'spec add: []' ]. packageSpecs size = 1 ifTrue: [ aStream tab: indent; nextPutAll: 'spec add: ['; cr. packageSpecs first configMethodOn: aStream indent: indent + 1. aStream nextPut: $]; cr ] ifFalse: [ aStream tab: indent; nextPutAll: 'spec'. 1 to: packageSpecs size do: [:index | | packageSpec | packageSpec := packageSpecs at: index. aStream tab: indent + 1; nextPutAll: 'add: ['; cr. packageSpec configMethodOn: aStream indent: indent + 2. aStream nextPut: $]. index < packageSpecs size ifTrue: [ aStream nextPut: $; ]. aStream cr ]]! ! !MetacelloPackagesSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25999366! copy: specNamed to: spec self addMember: (self copyMember name: spec name; sourceName: specNamed; spec: spec; yourself) ! ! !MetacelloPackagesSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25999584! merge: aSpec aSpec mergeIntoMetacelloPackages: self! ! !MetacelloPackagesSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25995500! packageNamed: aString ifAbsent: aBlock ^self map at: aString ifAbsent: aBlock! ! !MetacelloPackagesSpec methodsFor: 'accessing' stamp: 'dkh 9/6/2012 03:05' prior: 25995660! packageSpecsInLoadOrder | orderedSpecs moved lastMovedSpecs count terminationLimit map specsWithIncludes firstTime | "specification order is the default order" map := self map. orderedSpecs := OrderedCollection new. self list do: [ :member | | spec | spec := map at: member name ifAbsent: [ ]. (spec == nil or: [ orderedSpecs includes: spec ]) ifFalse: [ orderedSpecs add: spec ] ]. orderedSpecs isEmpty ifTrue: [ ^ orderedSpecs ]. moved := true. count := 0. terminationLimit := orderedSpecs size * 2. [ moved ] whileTrue: [ count := count + 1. count > terminationLimit ifTrue: [ "Cheap termination hack - an APPARENT loop" self error: 'Apparent loop in before/after dependency definitions' ]. moved := false. orderedSpecs do: [ :packageSpec | moved := moved or: [ self sortPackageSpecs: orderedSpecs for: packageSpec ] ] ]. lastMovedSpecs := Set new. moved := true. count := 0. specsWithIncludes := orderedSpecs select: [ :pkgSpec | pkgSpec includesForPackageOrdering isEmpty not ]. firstTime := true. [ moved ] whileTrue: [ | result | count := count + 1. "count > terminationLimit" count > 14 ifTrue: [ "Cheap termination hack - an APPARENT loop" self error: 'Apparent loop in before/after dependency definitions' ]. moved := false. result := Set new. specsWithIncludes do: [ :packageSpec | result addAll: (self applyIncludesTo: orderedSpecs for: packageSpec firstTime: firstTime) ]. result size = lastMovedSpecs size ifTrue: [ result do: [ :name | (lastMovedSpecs includes: name) ifFalse: [ moved := true ] ] ] ifFalse: [ moved := true ]. lastMovedSpecs := result. firstTime := false ]. ^ orderedSpecs! ! !MetacelloPackagesSpec methodsFor: 'actions' stamp: 'dkh 6/5/2012 19:01:24' prior: 25999717! remove: aSpec aSpec removeFromMetacelloPackages: self! ! !MetacelloPackagesSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 25997951! slideIn: orderedSpecs spec: targetSpec baseIndex: baseIndex seen: seen firstTime: firstTime | targetIndex requires targetRequires targetRequiresIndexes minIndex baseSpec required | (seen includes: targetSpec) ifTrue: [ ^false ]. targetIndex := orderedSpecs indexOf: targetSpec. baseIndex >= targetIndex ifTrue: [ ^false ]. required := false. baseSpec := orderedSpecs at: baseIndex. baseIndex + 1 to: targetIndex - 1 do: [:index | | spec | spec := orderedSpecs at: index. (spec requires includes: baseSpec name) ifTrue: [ required := true ]]. firstTime ifFalse: [ required ifFalse: [ ^false ]]. requires := targetSpec requires. targetRequires := orderedSpecs select: [:spec | requires includes: spec name]. targetRequiresIndexes := targetRequires collect: [:spec | orderedSpecs indexOf: spec]. targetRequiresIndexes add: baseIndex. minIndex := targetRequiresIndexes detectMax: [:each | each]. minIndex + 1 < targetIndex ifTrue: [ orderedSpecs remove: targetSpec. orderedSpecs add: targetSpec afterIndex: minIndex. seen add: targetSpec ] ifFalse: [ ^self slideIn: orderedSpecs spec: (orderedSpecs at: minIndex) baseIndex: 1 seen: seen firstTime: firstTime]. ^true ! ! !MetacelloPackagesSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26000699! sortPackageSpecs: orderedSpecs for: packageSpec | packageIndex moved movePackage targetPackage targetIndex targetPackages | packageIndex := orderedSpecs indexOf: packageSpec. moved := movePackage := false. targetPackages := packageSpec requires. targetPackages do: [:targetPackageName | targetPackage := orderedSpecs detect: [:each | each name = targetPackageName ] ifNone: []. targetIndex := orderedSpecs indexOf: targetPackage. movePackage := movePackage or: [ packageIndex <= targetIndex ]]. movePackage ifTrue: [ moved := true. orderedSpecs remove: packageSpec ifAbsent: [ ^self error: 'unexpected error removing package' ]. targetIndex := 0. targetPackages do: [:targetPackageName | (targetPackage := orderedSpecs detect: [:each | each name = targetPackageName ] ifNone: []) ~~ nil ifTrue: [ targetIndex := targetIndex max: (orderedSpecs indexOf: targetPackage) ]]. targetIndex == 0 ifTrue: [ orderedSpecs add: packageSpec beforeIndex: packageIndex ] ifFalse: [ orderedSpecs add: packageSpec afterIndex: targetIndex ]]. ^moved! ! !AbstractTutorial commentStamp: 'LaurentLaffont 1/21/2010 16:53' prior: 71968746! Parent class of all ProfStef tutorials. To create your own tutorial: - subclass AbstractTutorial - implement a few methods which returns a Lesson instance - implement tutorial which returns a Collection of selectors to the methods you've created. For example, see MockTutorial (minimalist) and SmalltalkSyntaxTutorial (default ProfStef one). See ProfStef comment to execute your own tutorial.! !AbstractTutorial class methodsFor: 'tutorial metainfo' stamp: 'LaurentLaffont 1/27/2010 21:02'! title "Return the title of the tutorial by parsing the class name like a Wiki link and interspersing whitespaces between the tokens" | className separators groups | className := self name. separators := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. groups := className findTokens: separators keep: separators. ^' ' join: (groups pairsCollect: [ :sep :rest | sep , rest ]). ! ! !AbstractTutorial class methodsFor: 'tutorial metainfo' stamp: 'LaurentLaffont 11/22/2010 21:36'! tutorials ^ (self subclasses sort: [:a :b | a name < b name]) select: [:aTutorial | (aTutorial category = 'ProfStef-Tests') not ]. ! ! !AbstractTutorial methodsFor: 'tutorial' stamp: 'DannyChan 2/1/2010 21:21'! indexOfLesson: aSelector ^self tutorial indexOf: aSelector.! ! !AbstractTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 1/21/2010 13:51'! lessonAt: anInteger | lessonSelector | lessonSelector := self tutorial at: anInteger. ^ self perform: lessonSelector.! ! !AbstractTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 16:35'! lessons ^ self tutorial collect: [:aSelector| self perform: aSelector]! ! !AbstractTutorial methodsFor: 'printing' stamp: 'LaurentLaffont 2/15/2011 22:47'! printOn: aStream aStream nextPutAll: 'a ProfStef Tutorial ('; nextPutAll: self class title; nextPutAll: ')'. ! ! !AbstractTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 13:49'! size ^ self tutorial size! ! !AbstractTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 1/21/2010 13:44'! tutorial "Should return an Array of selectors which returns Lesson instances. See SmalltalkSyntaxTutorial." ^ self shouldBeImplemented.! ! !HowToMakeYourOwnTutorial commentStamp: 'LaurentLaffont 2/15/2011 22:20' prior: 71969226! I'm a ProfStef tutorial which teach to create a ProfStef tutorial. Open me with ProfStef goOn: HowToMakeYourOwnTutorial.! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 9/21/2010 20:28'! createLessonFactoryMethods ^ Lesson title: 'Lesson factory methods' lesson: '"Next, create category ''lessons'' and add a method per lesson. Each method must return a Lesson object. Your can use Lesson class>>title:lesson: to create Lesson object." HowToDebug compile: ''useSelfHalt ^ Lesson title: ''''self halt'''' lesson: ''''"Put self halt. in the method you want to debug." ProfStef next.'''''' classified: ''lessons''. HowToDebug compile: ''examineStackTrace ^ Lesson title: ''''self halt'''' lesson: ''''"Look at PharoDebug.log." ProfStef next.'''''' classified: ''lessons''. HowToDebug compile: ''changeReturnValue ^ Lesson title: ''''Change return value'''' lesson: ''''"Easy in the debugger !!"'''''' classified: ''lessons''. ProfStef next.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 22:26'! implementTutorial ^ Lesson title: 'Implement tutorial method' lesson: '"Finally implement the tutorial method to return an Array of your lesson factory methods:" HowToDebug compile: ''tutorial ^ #( #useSelfHalt #examineStackTrace #changeReturnValue )'' classified: ''tutorial''. ProfStef next.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 22:29'! runYourTutorial ^ Lesson title: 'Run your tutorial' lesson: '"You can run your fresh new tutorial like this:" ProfStef goOn: HowToDebug.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 21:55'! subclassAbstractTutorial ^ Lesson title: 'AbstractTutorial' lesson: '"Here are the steps to create your own ProfStef tutorial. First, create a subclass of AbstractTutorial. For example:" AbstractTutorial subclass: #HowToDebug instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''ProfStef''. ProfStef next.'! ! !HowToMakeYourOwnTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 1/21/2010 21:45'! tutorial ^ #( subclassAbstractTutorial createLessonFactoryMethods implementTutorial runYourTutorial )! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'intro' stamp: 'DaleHenrichs 11/15/2010 12:14'! introductionText ^'Convers basic Metacello configuration specifications: 1. Open a code browser on the MetacelloTutorialConfig class:" MetacelloTutorialConfig browse. "2. In the browser view the ''--all--'' category. 3. Have fun!!"'! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:13'! lesson01 ^Lesson title: 'Lesson 1' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version01:. "Version 0.1 represents the simplest version specification possible. In the method #version01, version 0.1 is defined with a single package ''Example-Core-anon.8'' that is loaded from the repository ''http://www.example.com/Example''. Looking at this method you will notice a couple of things. Immediately after the method selector you see the pragma definition: The pragma indicates that the version created in this method should be associated with version ''0.1'' of the Tutorial project. Looking a little closer you see that the argument to the method, , is the only variable in the method and it is used as the receiver to four different messages: - #for:do: - #package:with: - #file: - #repository: With the evaluation of each block expression, a new object is pushed on a stack and the messages within the block are sent to the object on the top of the stack. So the method should be read as: Create version ''0.1''. The #common code for version ''0.1'' (#for:do:) consists of a package named ''Example-Core'' (#package:with:) whose file attribute is ''Example-Core-anon.8'' (#file:) and whose repository attribute is ''http://www.example.com/Example'' (#repository:). We can see the spec created for version 0.1 by printing the following expression:" (MetacelloTutorialConfig project version: ''0.1'') spec. "Note that in creating version ''0.1'' the #common attribute is extracted out. In addition to #common, there are pre-defined attributes for each of the platforms upon which Metacello runs (#pharo, #squeak, #gemstone and #squeakCommon). #squeakCommon is used for both #pharo and #squeak." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:13'! lesson02 ^Lesson title: 'Lesson 2' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version02:. "For version 0.2, we''ve simply updated the package version to ''Example-Core-anon.9'', which can be confirmed by printing the following expression:" (MetacelloTutorialConfig project version: ''0.2'') spec. ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:13'! lesson03 ^Lesson title: 'Lesson 3' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version03:. "For version 0.3, we''ve updated the package version to ''Example-Core-anon.10'' and added an additional package ''Example-Tests-anon.3'', which can be confirmed by printing the following expression:" (MetacelloTutorialConfig project version: ''0.3'') spec "As is often the case, the two packages share the same repository, so specifying a repository with each package is redundant." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson04 ^Lesson title: 'Lesson 4' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version04:. "The specification for version 0.4 is basically the same as version 0.3. Instead of listing a repository with each package we specify a project repository that applies to all packages. Compare the printStrings for the specs for each version:" (MetacelloTutorialConfig project version: ''0.3'') spec. (MetacelloTutorialConfig project version: ''0.4'') spec. ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson05 ^Lesson title: 'Lesson 5' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version05:. "For version 0.5 we''ve added an additional package to the mix: ''Example-AddOn'':" (MetacelloTutorialConfig project version: ''0.5'') spec. "Of course, the point of specifiying packages in Metacello is to be able to load versions. Here are a couple examples of loading versions of the Tutorial. If you print the result of each expression, you will see the list of packages in load order (note that for the tutorial, we are using the MetacelloNullRecordingMCSpecLoader. This class records which packages are loaded and the order that they are loaded in among other things instead of actually loading the packages." (MetacelloTutorialConfig project version: ''0.1'') load. (MetacelloTutorialConfig project version: ''0.4'') load. (MetacelloTutorialConfig project version: ''0.5'') load. "You will note that in each case, all of the packages associated with the version are loaded, which is the default. If you want to load a subset of the packages in a project, you may list the packages that you are interested in as an argument to the #load: method:" (MetacelloTutorialConfig project version: ''0.5'') load: { ''Example-Tests''. ''Example-Core'' }. "Note that the ordering of the packages is based on the order in which the packages are specified. If you evaluate the following expression:" (MetacelloTutorialConfig project version: ''0.5'') load: { ''Example-Tests''. }. "Only the package is ''Example-Tests''. By default the packages are ordered, but there are no implicit dependencies." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson06 ^Lesson title: 'Lesson 6' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version06:. "In version 0.6 we''ve added dependency information in the form of the #requires: directive. Both ''Example-Tests'' and ''Example-AddOn'' require ''Example-Core'' to be loaded before they are loaded. Print the following expressions to see that the requires directives are being followed:" (MetacelloTutorialConfig project version: ''0.5'') load: { ''Example-Tests''. }. (MetacelloTutorialConfig project version: ''0.6'') load: { ''Example-Tests''. }. (MetacelloTutorialConfig project version: ''0.6'') load: ''Example-AddOn''. (MetacelloTutorialConfig project version: ''0.6'') load: { ''Example-AddOn''. ''Example-Tests''. }. "With version 0.6 we are mixing structural information (required packages and repository) with the dynamic file version info. It is expected that over time the file version info will change from version to version while the structural information will remain relatively static." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson07 ^Lesson title: 'Lesson 7' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #baseline07:. Smalltalk tools browse: MetacelloTutorialConfig selector: #version07:. "For version 0.7, we are ceating a baseline version specification which is expected to be used across several versions and the version specification which is restricted to the file versions. In method #baseline07: the structure of version ''0.7-baseline'' is specified. The repository is listed, the packages are listed and the required packages are defined. We''ll cover the #blessing: in a later lesson. In method #version07: the file versions are specified. You will note that the pragma as an #imports: component that specifies the list of versions that this version (version ''0.7'') is based upon. In fact, if you print the spec for ''0.7-baseline'' and then print the spec for ''0.7'' you can see that ''0.7'' is a composition of both versions:" (MetacelloTutorialConfig project version: ''0.7-baseline'') spec. (MetacelloTutorialConfig project version: ''0.7'') spec. "Of course if you print the ''0.6'' spec and the ''0.7'' spec you can see that they specify exactly the same information in a slightly different way:" (MetacelloTutorialConfig project version: ''0.6'') spec. (MetacelloTutorialConfig project version: ''0.7'') spec. "and if you load each of the versions, you will see that they load the same packages, in the same order:" (MetacelloTutorialConfig project version: ''0.6'') load. (MetacelloTutorialConfig project version: ''0.7'') load. "Finally, even though version ''0.7-baseline'' does not have explicit package versions, you may load the version. When the ''real'' loader encounters a package name (without version information) it will attempt to load the latest version of the package from the repository. With the MetacelloNullRecordingMCSpecLoader the packages names are ''loaded'':" (MetacelloTutorialConfig project version: ''0.7-baseline'') load. "Of course when a number of developers are working on a project it may be useful to load a #baseline version so that you get the latest work from all of the project members. " ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson08 ^Lesson title: 'Lesson 8' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version08:. "In version 0.8 we''ve simply updated the package versions, which can be seen by comparing the results of loading version 0.7 and 0.8:" (MetacelloTutorialConfig project version: ''0.7'') load. (MetacelloTutorialConfig project version: ''0.8'') load. ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson10 ^Lesson title: 'Lesson 10' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #baseline10:. Smalltalk tools browse: MetacelloTutorialConfig selector: #version10:. "In #baseline10: we''ve added two things: the ''Example-AddOnTests'' package and a specification for groups. The ''Example-AddOnTests'' package has been added to make the idea of needing to group packages a little more appealing. The package requires ''Example-AddOn'' and ''Example-Tests''. With two Test packages it would be convenient to be able to load all of the tests with a simple expression like the following:" (MetacelloTutorialConfig project version: ''1.0'') load: { ''Tests''. }. "instead of having to explicitly list all of the test projects like this:" (MetacelloTutorialConfig project version: ''1.0'') load: { ''Example-Tests''. ''Example-AddOnTests''. }. "This becomes especially useful if over time the project evolves to have more component and test packages. The ''default'' group is special in that when a ''default'' group is defined, the #load method loads the members of the ''default'' group instead of loading all of the packages:" (MetacelloTutorialConfig project version: ''1.0'') load. "If you want to load all of the packages in a project, then the pseudo group ''ALL'' may be used as follows:" (MetacelloTutorialConfig project version: ''1.0'') load: ''ALL''. ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson11 ^Lesson title: 'Lesson 11' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version11:. "In version 0.11 we''ve defined a couple of attributes that are expected to be used all of the time in a version specification: #blessing: #description: #author: #timestamp: The following lessons cover each of these attributes in more detail. " ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson11Author ^Lesson title: 'Lesson 11 (Author)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version11:. "The author of a version can be defined:" (MetacelloTutorialConfig project version: ''1.1'') author. "When using the OB-Metacello tools the author field is automatically updated to reflect the current author as defined in the image." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson11Blessing ^Lesson title: 'Lesson 11 (Blessing)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version11:. "A version can be tagged with a blessing like #alpha, #beta, #release, #development or any other tag that you find useful. The blessing for version 1.1 is #development" (MetacelloTutorialConfig project version: ''1.1'') blessing. "The default blessing is #release, so even though we didn''t specify a blessing for version 0.5, the blessing is set:" (MetacelloTutorialConfig project version: ''0.5'') blessing. "For version 1.1, it is important to explicitly set the blessing, because it imports version ''1.0-baseline'' whose blessing is #baseline:" (MetacelloTutorialConfig project version: ''1.0-baseline'') blessing. "Blessings can be used as a filter. For example, you will notice that the result of the following expression is version 0.6, because #stableVersion answers the latest version whose blessing is _not_ #development, #broken, or #blessing: " MetacelloTutorialConfig project stableVersion. MetacelloTutorialConfig project stableVersion load. "The blessing of version 1.1 is #development. To find the latest #development version you would execute this expression:" MetacelloTutorialConfig project latestVersion: #development. (MetacelloTutorialConfig project latestVersion: #development) load. "You can get the very last version independent of blessing by executing this expression:" MetacelloTutorialConfig project bleedingEdge. MetacelloTutorialConfig project bleedingEdge load. "In general, the #development blessing should be used for any version that is unstable. Once a version has stabilized, a different blessing should be applied. The following expression will load the latest version of all of the packages for the latest #baseline version:" (MetacelloTutorialConfig project latestVersion: #baseline) load. "Since the latest #baseline version should reflect the most up-to-date project structure, executing the previous expression should load the absolute bleeding edge of the project. " ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson11Descripton ^Lesson title: 'Lesson 11 (Description)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version11:. "A description can be defined for a version:" (MetacelloTutorialConfig project version: ''1.1'') description. ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson11Timestamp ^Lesson title: 'Lesson 11 (Timestamp)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version11:. "The timestamp of a version can be defined:" (MetacelloTutorialConfig project version: ''1.1'') timestamp. "When using the OB-Metacello tools the timestamp field is automatically updated to reflect the current DateAndTime that the update was made. The timestamp is a String" ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:14'! lesson12DoIts ^Lesson title: 'Lesson 12 (DoIts)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #version12:. Smalltalk tools browse: MetacelloTutorialConfig selector: #preloadForCore. Smalltalk tools browse: MetacelloTutorialConfig selector: #postloadForCore:package:. "Occassionally, you find that you need to perform an expression either before a package is loaded, or after a package is loaded. To do that in Metacello, you can define a preLoadDoIt selector and a postLoadDoIt selector:" (MetacelloTutorialConfig project version: ''1.2'') spec. "If you open a Transcript and execute the following expression, you will see that the pre load and post load methods were executed:" (MetacelloTutorialConfig project version: ''1.2'') load. "The pre/post load methods may take 0, 1 or 2 args. The loader is the first optional argument and the loaded packageSpec is the second optional argument." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson13 ^Lesson title: 'Lesson 12 (DoIts)' lesson: ' Smalltalk tools browse: MetacelloTutorialConfig selector: #baseline13:. Smalltalk tools browse: MetacelloTutorialConfig selector: #version13:. "For version 1.3 we are adding a platform specific package ''Example-Platform''. ''Example-Platform'' requires ''Example-Core''. On GemStone, Pharo and Squeak, a branch of the ''Example-Platform'' package will be loaded: ''Example-Platform.gemstone'', ''Example-Platform.pharo'', ''Example-Platform.squeak'' respectively will be loaded. Consequently we''ve updated the baselines with #baseline13: to reflect the structural changes and #version13: reflects the package versions. The platform-specific versions and branches are defined in the #for:do: block for the corresponding platforms: #gemstone, #pharo, #squeak (in both methods) The result of the following expression will depend on the platform upon which you are running:" (MetacelloTutorialConfig project version: ''1.3'') load. "Note that when you execute the following expresson to load ''Example-Core'' that the correct ''Example-Platform'' is loaded as well:" (MetacelloTutorialConfig project version: ''1.3'') load: ''Example-Core''. "If you look at the specification for ''Example-Core'' (in #baseline13:) you will note that ''Example-Core'' #includes: ''Example-Platform''. The #includes: directive means that the package ''Example-Platform'' should be loaded whenever the ''Example-Core'' package is loaded. Also note when you evaluate the following expression that the ''Example-Platform'' package is loaded before ''Example-Tests'' as if ''Example-Tests'' #requires: ''Example-Platform'':" (MetacelloTutorialConfig project version: ''1.3'') load: ''Example-Tests''. "When you use the #includes: directive, you are not only specifying that the listed packages should be loaded when the parent package is loaded, but that the #included: packages should be loaded _before_ any packages that require the parent package." ProfStef next. '! ! !MetacelloConfigurationTutorialPart1 methodsFor: 'tutorial' stamp: 'DaleHenrichs 11/15/2010 12:10'! tutorial ^ #(#lesson01 #lesson02 #lesson03 #lesson04 #lesson05 #lesson06 #lesson07 #lesson08 #lesson10 #lesson11 #lesson11Author #lesson11Blessing #lesson11Descripton #lesson11Timestamp #lesson12DoIts #lesson13)! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'intro' stamp: 'DaleHenrichs 11/15/2010 12:14'! introductionText ^'Covers project reference specifications: 1. Open a code browser on the MetacelloTutorialConfig class:" MetacelloTutorialConfig browse. "2. In the browser view the ''--all--'' category. 3. Have fun!!"'! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson07 ^Lesson title: 'Lesson 7' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline07:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version07:. "NOTE: you should run through the lessons in Part 1 first. In this configuration we are defining a project that utilizes the packages from the Example project (MetacelloTutorialConfig): ''Example-Core'', ''Example-AddOn'', ''Example-Tests'' and 2 packages specific to the project: ''Project-Core'' and ''Project-Tests'':" (MetacelloProjectRefTutorialConfig project version: ''0.7'') load. ProfStef next. '! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson10 ^Lesson title: 'Lesson 10' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline10:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version10:. "In lesson07 it was obvious that we copied the configuration information from MetacelloTutorialConfig and adapted it to our project. There is a better way. In #baseline10: we''ve created a project reference for the Example project. The #className: specifies the name of the class that contains the project metadata. If the class is not present in the image, then we know that we need to load the configuration for the project. The #file: and #repository: specifications give us the information needed to load the project metadata from a repository. Finally, the #versionString: and #loads: tell us which version of the project to load and which packages to load from the project. We''ve named the project reference ''Example ALL'' and in the specification for the ''Project-Core'' package, we''ve specified that ''Example ALL'' is required:" (MetacelloProjectRefTutorialConfig project version: ''1.0'') load. "Note that the entire Example project is loaded before ''Project-Core''" ProfStef next. ' ! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson11 ^Lesson title: 'Lesson 11' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline11:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version11:. "As is often the case, it is useful to separate the test package from the core packages for a project. In #baseline11: we''ve created two project references. The reference named ''Example Default'' loads the ''default'' group and the reference named ''Example Tests'' loads the ''Tests'' group. We then made ''Project-Core'' require ''Example Default'' and ''Project-Tests'' requires ''Project-Core'' and ''Example Tests''. Now it is possible to load just the core packages:" (MetacelloProjectRefTutorialConfig project version: ''1.1'') load: ''Project-Core''. "or the whole enchilada including tests:" (MetacelloProjectRefTutorialConfig project version: ''1.1'') load: ''Project-Tests''. ProfStef next. '! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson12 ^Lesson title: 'Lesson 12' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline11:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline12:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version12:. "In #baseline11: there is redundant information for each of the project references. In #baseline12: we use the #project:copyFrom:with: method to eliminate the need to specify the bulk of the project information twice. Evaluate and compare the results of the following expressions:" (MetacelloProjectRefTutorialConfig project version: ''1.1'') load: ''Project-Core''. (MetacelloProjectRefTutorialConfig project version: ''1.2'') load: ''Project-Core''. (MetacelloProjectRefTutorialConfig project version: ''1.1'') load: ''Project-Tests''. (MetacelloProjectRefTutorialConfig project version: ''1.2'') load: ''Project-Tests''. ProfStef next. '! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:15'! lesson13 ^Lesson title: 'Lesson 13' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version13:. "In #version13: we are importing the ''1.2-baseline'', but changing the Example project version to 1.3, so project versions can be updated in the verson method jus like package versions. Evaluate and compare the results of these expressions:" (MetacelloProjectRefTutorialConfig project version: ''1.2'') load: ''Project-Core''. (MetacelloProjectRefTutorialConfig project version: ''1.3'') load: ''Project-Core''. (MetacelloProjectRefTutorialConfig project version: ''1.2'') load: ''Project-Tests''. (MetacelloProjectRefTutorialConfig project version: ''1.3'') load: ''Project-Tests''. "It is worth noting that in version 1.3 of the Example project, the platform-specific ''Example-Platform'' was introduced and nothing special had to be done in the project reference to get the package included." ProfStef next. '! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:16'! lesson14 ^Lesson title: 'Lesson 14' lesson: ' Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #baseline14:. Smalltalk tools browse: MetacelloProjectRefTutorialConfig selector: #version14:. "In this lesson we''ll cover the querying API for Metacello. The querying API is useful for analyzing the contents and structure of a version. To start with we''ll look at version ''1.4'' of the MetacelloProjectRefTutorialConfig. You can list the packages in the version:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packages. "The list project references:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') projects. "And the groups:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') groups. "You can access individual packages/project refs/groups using the #packageNamed: method. Here you can access the package named: ''Project-Core'':" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Project-Core''. "The project reference named ''Example Default'':" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Example Default''. "The group named ''Core'':" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Core''. "Each of the attributes of the package can be accessed (#requires, #includes, #file, #repository, #preLoadDoIt, and #postLoadDoit). For example:" ((MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Project-Core'') requires. "Each of the attributes of the project can be accessed (#className, #versionString, #operator, #loads, #file, and #repository). For example:" ((MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Example Default'') repository. "Each of the attributes of the group can be accessed (#includes). For example:" ((MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''default'') includes. "When looking at the ''Core'' group, there is only one package listed:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Core''. "In the case of the ''Core'' group, it is defined in terms of the ''default'', which isn''t very useful. When looking at the contents of groups you''d like to see the complete list of packages, without having to explicitly expanding each group you encounter. #packagesForSpecNamed: does just that:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') packagesForSpecNamed: ''Core''. "If you were to load the ''Core'' package:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') load: ''Core''. "You end up seeing the packages from the Example project. If you want to get the list of packages that _would_ be loaded, you can use #allPackagesForSpecNamed:. For example:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') allPackagesForSpecNamed: ''Core''. "If you use #allPackagesForSpecNamed: with a project refernce name, you''ll see the packages that _would_ be loaded:" (MetacelloProjectRefTutorialConfig project version: ''1.4'') load: ''Example Default''. (MetacelloProjectRefTutorialConfig project version: ''1.4'') allPackagesForSpecNamed: ''Example Default''. "You can also send #version to a project reference. This is useful if you want to explicitly walk the tree of projects:" ((MetacelloProjectRefTutorialConfig project version: ''1.4'') packageNamed: ''Example Default'') version. ProfStef next. '! ! !MetacelloConfigurationTutorialPart2 methodsFor: 'tutorial' stamp: 'DaleHenrichs 11/15/2010 12:24'! tutorial ^ #(#lesson07 #lesson10 #lesson11 #lesson12 #lesson13 #lesson14)! ! !MetacelloDevelopmentProcess class methodsFor: 'tutorial metainfo' stamp: 'DaleHenrichs 12/17/2010 10:31'! title ^'Metacello Development Cycle'! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 11:28'! checkpointSave ^Lesson title: '4. Checkpoint save' lesson: '"After having done development for awhile, you may want to checkpoint your work to share with others, test in another development environment or just to backup your work. You can save the modified mcz files, update the development version spec with the new mcz file names and then save the configuration:" MetacelloToolBox saveModifiedPackagesAndConfigurationIn: ConfigurationOfExample description: ''- fixed Issue 1090''. "Or you can arrange to just save the modified mcz files and update the development version spec with the new mcz file names:" MetacelloToolBox saveModifiedPackagesIn: ConfigurationOfExample description: ''- fixed Issue 1090''. ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:21'! compareVersions ^Lesson title: '6. Compare versions' lesson: '"Occasionally, it is useful to view the mcz and project version changes between the #development symbolic version and the #stable symbolic version:" (MetacelloToolBox compareVersionsIn: ConfigurationOfExample) inspect. ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:16'! createConfigurationAndBaseline ^Lesson title: '1. Create configuration' lesson: '"The MetacelloToolBox class provides programmatic support for creating and maintaining your configuration. Use the following expression to create your configuration class and initial baseline version. Edit the expression to specifiy the required projects, packages, dependencies and groups for your project:" MetacelloToolBox createBaseline: ''1.0-baseline'' for: ''Example'' repository: ''http://www.squeaksource.com/ProfStef'' requiredProjects: #(''Shout'') packages: #(''ProfStef-Core'' ''ProfStef-Tests'') dependencies: {(''ProfStef-Core'' -> #(''Shout'')). (''ProfStef-Tests'' -> #(''ProfStef-Core''))} groups: {(''default'' -> #(''Core'')). (''Core'' -> #(''ProfStef-Core'')). (''Tests'' -> #(''ProfStef-Tests'')). (''Core Tests'' -> #(''Core'' ''Tests''))}. "After evaluating the above expression, browse the configuration:" Smalltalk tools browse: ConfigurationOfExample selector: #baseline10:. "Edit the #baseline10 method in the browser to fine tune the baseline specification." ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'dkh 9/11/2012 17:16'! createDevelopmentVersion ^Lesson title: '2. Create development version' lesson: '"After the configuration and initial baseline version have been created, define the initial development version:" MetacelloToolBox createDevelopment: ''1.0'' for: ''Example'' importFromBaseline: ''1.0-baseline'' description: ''initial version''. "After evaluating the above expression, take a look at the #version10: method in ConfigurationOfExample:" Smalltalk tools browse: ConfigurationOfExample selector: #version10:. "The current version of the Shout project has been filled in as well as the current version of the ProfStef packages. When a new development version is created the #development symbolic version is defined as well:" Smalltalk tools browse: ConfigurationOfExample selector: #development:. "The #development version is defined as 1.0 for all platforms. Note that the #development symbolic version is used in a number of the Development Support scripts, so you want to make sure that it is kept up-to-date." ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 12:24'! createNewDevelopmentVersion ^Lesson title: '8. Create new development version' lesson: '"After releasing a version it isn''t a bad idea to open a new development version for the next phase of development:" MetacelloToolBox createNewDevelopmentVersionIn: ConfigurationOfExample description: ''- aim at implementing new features''. "The above expression uses the #release version as a template for the new version with the #release minor version number incremented." ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 11:37'! integrateCodeContributions ^Lesson title: '5. Integrate code contributions' lesson: '"If other developers have commited new versions of the packages in your project you can integrate the changes into your configuration by first loading the latest packages in your project:" (ConfigurationOfExample project version: #baseline) load. "Then updating the mcz file specifications in #development version:" MetacelloToolBox updateToLatestPackageVersionsIn: ConfigurationOfExample description: ''- integrated code from Barney and Fred''. "Then checkpoint the configuration:" MetacelloToolBox saveConfigurationPackageFor: ''Example'' description: ''- integrated code from Barney and Fred''. ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'intro' stamp: 'dkh 9/11/2012 17:16'! introductionText ^'This tutorial covers some of the methods that can be found in the MetacelloToolBox. CREATE PROJECT 1. Create configuration and baseline version 2. Create development version 3. Validate and save configuration in project repository DEVELOPMENT 4. Checkpoint save 5. Integrate code contributions 6. Compare versions RELEASE 7. Release development version 8. Create new development version For convenience, a number of the methods covered in these sections can be found in the ''development support'' category on the class-side of MetacelloBaseConfiguration." Smalltalk tools browse: MetacelloBaseConfiguration class selector: #DevelopmentProcess. "After deciding which of the development support methods you will use in your project, copy the methods of interest to the the class-side of your own configuration or implement your own ''development support'' methods using the MetacelloToolBox API:" HelpBrowser openOn: MetacelloAPIDocumentation "'! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 12:14'! releaseVersion ^Lesson title: '7. Release development version' lesson: '"When you ready to release the #development version of your project, the following things need to be done: 1. Change #blessing of version to #release 2. Set the #development symbolic version to #notFound (no longer in development) 3. Set the #stable symbolic version to the current #development version 4. Save the configuration 5. Copy the configuration to http://www.squeaksource.com/MetacelloRepository (optional). Steps 1-4 are performed by the following expression:" MetacelloToolBox releaseDevelopmentVersionIn: ConfigurationOfExample description: ''- release version 1.0''. "If you want to copy the saved configuration to another repository, use the following expression:" MetacelloToolBox copyConfiguration: ConfigurationOfExample to: ''http://www.example.com/MetacelloRepository''. ProfStef next. '! ! !MetacelloDevelopmentProcess methodsFor: 'tutorial' stamp: 'DaleHenrichs 12/17/2010 12:16'! tutorial ^#( createConfigurationAndBaseline createDevelopmentVersion validateAndSaveConfiguration checkpointSave integrateCodeContributions compareVersions releaseVersion createNewDevelopmentVersion)! ! !MetacelloDevelopmentProcess methodsFor: 'lessons' stamp: 'DaleHenrichs 12/17/2010 11:09'! validateAndSaveConfiguration ^Lesson title: '3. Validate and save configuration in project repository' lesson: '"Before saving a configuration into the project repository, the configuration should be validated and any Critical Issues should be addressed:" (MetacelloToolBox validateConfiguration: ConfigurationOfExample) explore. "Use Gofer to save the configuration to your project repository:" Gofer new url: ''http://www.example.com/ExampleRepository''; package: ''ConfigurationOfExample''; commit: ''Initial configuration''. "Once you''ve done your initial commit, you can use the following expression to save the configuration to your project repository:" MetacelloToolBox saveConfigurationPackageFor: ''Example'' description: ''commit message''. "Note that MetacelloToolBox class>>saveConfigurationPackageFor:description: validates the configuration before saving." ProfStef next. '! ! !MetacelloToolBoxTutorial class methodsFor: 'tutorial metainfo' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! title ^'Inside Metacello Toolbox API'! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! create10Baseline ^Lesson title: 'Create 1.0 Baseline' lesson: '" 1. Create configuration - class named ConfigurationOfExample created if it does not already exist. 2. Prepare to define baseline version method - selector, category and version number defined 3. Define baseline project structure - repository - external project ''Shout'' - packages ''ProfStef-Core'' and ''ProfStef-Tests'', plus dependencies 4. Compile the #baseline10: method - version method compiled and validated " "1." (MetacelloToolBox configurationNamed: ''Example'') "2." createVersionMethod: ''baseline10:'' inCategory: ''baselines'' forVersion: ''1.0-baseline''; "3." addSection: #common repository: ''http://www.squeaksource.com/ProfStef'' requiredProjects: #(''Shout'') packages: #(''ProfStef-Core'' ''ProfStef-Tests'') dependencies: {(''ProfStef-Core'' -> #(''Shout'')). (''ProfStef-Tests'' -> #(''ProfStef-Core''))} groups: {(''default'' -> #(''Core'')). (''Core'' -> #(''ProfStef-Core'')). (''Tests'' -> #(''ProfStef-Tests'')). (''Core Tests'' -> #(''Core'' ''Tests''))} versionSpecsDo: [ :versionSpec | versionSpec blessing: #baseline ]; "4." commitMethod. "After evaluating the above expression, browse the configuration:" ConfigurationOfExample browse. "and look at the generated method #baseline10:. Note that the symbolic version #bleedingEdge is used for the Shout project." ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! create11Baseline ^Lesson title: 'Create 1.1 Baseline' lesson: '" 1. Create configuration 2. Prepare to define baseline version method 3. Copy specs from 1.0-baseline. This is a copy not an import, so all specs are preserved - with #updateProjects set to false, the version of the project Shout is preserved - with #updatePackages set to false, the specification of the mcz files for the packages ProfStef-Core ProfStef-Tests are preserved (typically not specified) 4. Add and additional section for the attribute #pharo - the package ProfStefBrowser and it''s dependencies are added - the package is added to the UI group 5. Compile and validate #baseline11: method 6. Prepare to modify the method defining version 1.1. - false as return value in block means that all existing version specs in 1.1 are dropped on floor. Basically just the method name and pragma are preserved 7. Import the versionSpecs from 1.1-baseline into version 1.1 8. Compile and validate the #version11: method 9. Prepare to modify the method defining symbolic version #development. Preserve existing symbolic version specs 10. add symbolic version spec for #pharo 11. Compile and validate the #development: method " | description | description := ''''. "1." (MetacelloToolBox configurationNamed: ''Example'') "2" createVersionMethod: ''baseline11:'' inCategory: ''baselines'' forVersion: ''1.1-baseline''; "3." addSectionsFrom: ''1.0-baseline'' forBaseline: true updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | true ]; "4" addSection: #pharo repository: nil requiredProjects: #() packages: #(''ProfStefBrowser'') dependencies: {(''ProfStefBrowser'' -> #(''ProfStef-Core''))} groups: {(''UI'' -> #(''ProfStefBrowser''))} versionSpecsDo: [ :versionSpec | ]; "5." commitMethod; "6." modifyVersionMethodForVersion: ''1.1'' versionSpecsDo: [ :attribute :versionSpec | false ]; "7." importFrom: ''1.1-baseline'' updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, blessing and timeStamp" versionSpec author: MetacelloPlatform current authorName; blessing: #development; description: description; timestamp: MetacelloPlatform current timestamp ]. true ]; "8." commitMethod; "9" modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; "10." addSymbolicSection: #pharo version: ''1.1''; "11." commitMethod. "Look at the generated methods: #baseline11: #version11: #development:" ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! intro ^Lesson title: 'Intro' lesson: '"The lessons in this section cover some of the same material that was covered in the development process tutorial, but we take a closer look at the implementation using the instance-side protocol instead of the class-side protocol" ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'intro' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! introductionText ^'Dive down into the MetacelloToolBox API to take a closer look at the implementation of the development support methods.'! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! open10ForDevelopment ^Lesson title: 'Open version 1.0 for development' lesson: '" 1. Create configuration - always start a toolbox expression this way 2. Prepare to define version method #version10: - similar expression used to create baseline method 3. Import specification from version 1.0-baseline - specs that are not needed in a version are dropped - import is added to pragma - with #updateProjects set to true, the current version of the project Shout will set - with #updatePackages set to true, the current mcz files for the packages ProfStef-Core ProfStef-Tests will be set 4. Define desired versionSpec attributes - current author and timestamp - set blessing to #development - set the description - return value of true in block, means the versionSpec is added to current method being defined 5. Compile the #version10: method - compile and validate 6. Prepare to define symbolic version method #development: 7. Define symbolic version - symbolic version #development maps to version 1.0 for the #common attributes - multiple addSymbolicSection: expressions may be used 8. Compile the #development: method - compile and validate" | description | description := ''- fixed a bug''. "1." (MetacelloToolBox configurationNamed: ''Example'') "2." createVersionMethod: ''version10:'' inCategory: ''versions'' forVersion: ''1.0''; "3." importFrom: ''1.0-baseline'' updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "4." versionSpec author: MetacelloPlatform current authorName; blessing: #development; description: description; timestamp: MetacelloPlatform current timestamp ]. true ]; "5." commitMethod; "6." createSymbolicVersionMethod: ''development:'' inCategory: ''symbolic versions'' forVersion: #development; "7." addSymbolicSection: #common version: ''1.0''; "8." commitMethod. "After evaluating the above expression, take a look at the generated methods: - #version10: - #development:" ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! open11ForDevelopment ^Lesson title: 'Open version 1.1 for development' lesson: '" 1. Create configuration 2. Prepare to define version method #version11: 3. Use version 1.0 as basis for version 1.1. basically a copy. Differs from import. 4. Update project and package versions - with #updateProjects set to true, the current version of the project Shout will set - with #updatePackages set to true, the current mcz files for the packages ProfStef-Core ProfStef-Tests will be set 5. Define desired versionSpec attributes - current author and timestamp - set blessing to #development - set the description 6. Compile and validate the #version11: method 7. Prepare to modify symbolic version method #development: - keep all of the existing symbolic version specs in the method 8. Define/change the symbolic version for #development to 1.1 9. Compile and validate the #development: method" | description | description := ''''. "1." (MetacelloToolBox configurationNamed: ''Example'') "2." createVersionMethod: ''version11:'' inCategory: ''versions'' forVersion: ''1.1''; "3." addSectionsFrom: ''1.0'' forBaseline: false "4." updateProjects: true updatePackages: true versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "5." versionSpec author: MetacelloPlatform current authorName; description: description; blessing: #development; timestamp: MetacelloPlatform current timestamp ]. true ]; "6." commitMethod; "7." modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; "8." addSymbolicSection: #common version: ''1.1''; "9." commitMethod. "After evaluating the above expression, take a look at the generated methods: - #version11: - #development:" ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! releaseVersion10 ^Lesson title: 'Release version 1.0' lesson: '" 1. Create configuration 2. Prepare to modify the version method for version 1.0: - the project and package versions are not updated 3. Change the blessing to #release for the #common attribute 4. Note that the return value for the #attributeBlocksDo: block is true. If the return value is false, the versionSpec would not be included in the updated mehtod. 5. Compile and validate the #version10: method . 6. Remove version 1.0 from the definition of the #development symbolic version - the version is no longer in development - the return value for the #methodSectionsDo: block (like the #versionSpecsDo: block) determins whether the methodSection is carried forward or not 7. Compile and validate the #development: method 8. Prepare to define the symbolic version method #stable: 9. Define version 1.0 as the #stable symbolic version for #common 10. Compile and validate the #stable: method" "1" (MetacelloToolBox configurationNamed: ''Example'') "2." modifyVersionMethodForVersion: ''1.0'' versionSpecsDo: [ :attribute :versionSpec | attribute == #common "3." ifTrue: [ versionSpec blessing: #release ]. "4." true ]; "5." commitMethod; "6." modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :methodSection | methodSection versionString ~= ''1.0'' ]; "7." commitMethod; "8." createSymbolicVersionMethod: ''stable:'' inCategory: ''symbolic versions'' forVersion: #stable; "9." addSymbolicSection: #common version: ''1.0''; "10." commitMethod. "After evaluating the above expression, take a look at the updated method #version10, where you will see that the blessing has been updated to #release. Look at the #development: method (which should be empty) and the #stable: method" ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! releaseVersion11PharoOnly ^Lesson title: 'Release version 1.1 (#pharo only)' lesson: '" 1. Create configuration 2. Prepare to modify the version method for version 1.1: 3. Change the blessing to #release for the #pharo attribute 4. Compile and validate the #version11: method . 5. Remove version 1.0 from the definition of the #development symbolic version 6. Compile and validate the #development: method 7. Prepare to define the symbolic version method #stable: 8. Define version 1.1 as the #stable symbolic version for #common 9. Compile and validate the #stable: method" "1." (MetacelloToolBox configurationNamed: ''Example'') "2." modifyVersionMethodForVersion: ''1.1'' versionSpecsDo: [ :attribute :versionSpec | attribute == #pharo "3." ifTrue: [ versionSpec blessing: #release ]. true ]; "4." commitMethod; "5." modifySymbolicVersionMethodFor: #development symbolicVersionSpecsDo: [ :symbolicVersionSpec | symbolicVersionSpec attribute ~~ #pharo ]; "6." commitMethod; "7." modifySymbolicVersionMethodFor: #stable symbolicVersionSpecsDo: [ :symbolicVersionSpec | true ]; "8." addSymbolicSection: #pharo version: ''1.1''; "9." commitMethod. "After evaluating the above expression, take a look at the generated methods: #version11: #development: #stable: " ProfStef next. ' ! ! !MetacelloToolBoxTutorial methodsFor: 'tutorial' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! tutorial ^#( intro create10Baseline open10ForDevelopment updateVersion10 releaseVersion10 open11ForDevelopment create11Baseline releaseVersion11PharoOnly )! ! !MetacelloToolBoxTutorial methodsFor: 'lessons' stamp: 'DaleHenrichs 1/14/2011 12:22:17'! updateVersion10 ^Lesson title: 'Update specs for version 1.0' lesson: '" 1. Create configuration 2. Prepare to update the version method for version 1.0: - with #updateProjects set to true, the current version of the project Shout will set - with #updatePackages set to true, the current mcz files for the packages ProfStef-Core ProfStef-Tests will be set 3. Define desired versionSpec attributes - current author and timestamp 4. Append the #logEntry to the version descripttion 5. Compile the #version10: method - compile and validate" | logEntry | logEntry := ''- fixed a bug''. "1." (MetacelloToolBox configurationNamed: ''Example'') "2." updateVersionMethodForVersion: ''1.0'' versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "3." versionSpec author: MetacelloPlatform current authorName; timestamp: MetacelloPlatform current timestamp. "4." versionSpec description value isEmpty ifTrue: [ versionSpec description: logEntry ] ifFalse: [ | strm | strm := WriteStream on: String new. strm nextPutAll: versionSpec description value; cr; nextPutAll: logEntry. versionSpec description: strm contents ] ]. true ]; "5." commitMethod. "After evaluating the above expression, take a look at the updated method #version10. Unless you changed the packages that were loaded in your image, you should just see the #timestamp and #description fields updated." ProfStef next. ' ! ! !MockTutorial methodsFor: 'lesson' stamp: 'LaurentLaffont 1/21/2010 15:15'! firstLesson ^ Lesson title: 'first' lesson: 'First lesson'.! ! !MockTutorial methodsFor: 'lesson' stamp: 'LaurentLaffont 1/21/2010 15:15'! secondLesson ^ Lesson title: 'second' lesson: 'Second lesson'.! ! !MockTutorial methodsFor: 'lesson' stamp: 'LaurentLaffont 1/21/2010 15:15'! thirdLesson ^ Lesson title: 'third' lesson: 'Third lesson'.! ! !MockTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 1/21/2010 15:14'! tutorial ^ #( firstLesson secondLesson thirdLesson )! ! !SmalltalkSyntaxTutorial commentStamp: 'LaurentLaffont 1/21/2010 16:50' prior: 71969431! The default ProfStef tutorial to learn Smalltalk syntax! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:31'! basicTypesArray ^ Lesson title: 'Basic types: Array' lesson: '"Literal arrays are created at parse time:" #(1 2 3). #( 1 2 3 #(4 5 6)) size. #(1 2 4) isEmpty. #(1 2 3) first. #(''hello'' ''Squeak'') at: 2 put: ''Pharo''; yourself. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:31'! basicTypesCharacters ^ Lesson title: 'Basic types: Characters' lesson: '"A Character can be instantiated using $ operator:" $A. $A class. $B charCode. Character cr. Character space. "You can print all 256 characters of the ASCII extended set:" Character allByteCharacters. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:31'! basicTypesDynamicArray ^ Lesson title: 'Basic types: Dynamic Array' lesson: '"Dynamic Arrays are created at execution time:" { (2+3) . (6*6) }. { (2+3) . (6*6) . ''hello'', '' Stef''} size. { ProfStef } first next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 12/13/2010 21:06'! basicTypesNumbers ^ Lesson title: 'Basic types: Numbers' lesson: '"You now know how to execute Smalltalk code. Now let''s talk about basic objects. 1, 2, 100, 2/3 ... are Numbers, and respond to many messages evaluating mathematical expressions. Evaluate these ones:" 2. 20 factorial. 1000 factorial / 999 factorial. (1/3). (1/3) + (4/5). (1/3) asFloat. 1 class. 1 class maxVal class. (1 class maxVal + 1) class. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/27/2010 21:33'! basicTypesString ^ Lesson title: 'Basic types: Strings' lesson: '"A String is a collection of characters. Use single quotes to create a String object. Print these expressions:" ''ProfStef''. ''ProfStef'' size. ''abc'' asUppercase. ''Hello World'' reverse. "You can access each character using at: message" ''ProfStef'' at: 1. "String concatenation uses the comma operator:" ''ProfStef'', '' is cool''. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:32'! basicTypesSymbol ^ Lesson title: 'Basic types: Symbols' lesson: '"A Symbol is a String which is guaranteed to be globally unique. There is one and only one Symbol #ProfStef. There may be several ''ProfStef'' String objects. (Message == returns true if the two objects are the SAME)" ''ProfStef'' asSymbol. #ProfStef asString. (2 asString) == (2 asString). (2 asString) asSymbol == (2 asString) asSymbol. (Smalltalk at: #ProfStef) next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:33'! blocks ^ Lesson title: 'Blocks' lesson: '"Cascade is cool !! Let''s talk about blocks. Blocks are anonymous methods that can be stored into variables and executed on demand. Blocks are delimited by square brackets: []" [Browser open]. "does not open a Browser because the block is not executed. Here is a block that adds 2 to its argument (its argument is named x):" [:x | x+2]. "We can execute a block by sending it value messages." [:x | x+2] value: 5. [Browser open] value. [:x | x+2] value: 10. [:x :y| x + y] value:3 value:5. [ProfStef next] value.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:33'! blocksAssignation ^ Lesson title: 'Block assignation' lesson: '"Blocks can be assigned to a variable then executed later. Note that |b| is the declaration of a variable named ''b'' and that '':='' assigns a value to a variable. Select the three lines then Print It:" |b| b := [:x | x+2]. b value: 12. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:33'! conditionals ^ Lesson title: 'Conditionals' lesson: '"Conditionals are just messages sent to Boolean objects" 1 < 2 ifTrue: [100] ifFalse: [42]. "Here the message is ifTrue:ifFalse Try this:" Transcript open. 3 > 10 ifTrue: [Transcript show: ''maybe there''''s a bug ....''] ifFalse: [Transcript show: ''No : 3 is less than 10'']. 3 = 3 ifTrue: [ProfStef next].'.! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 12/12/2010 18:30'! debugger ^ Lesson title: 'Debugger' lesson: '"The Debugger may be the most famous tool of Smalltalk environments. It will open as soon as an unmanaged Exception occurs. The following code will open the debugger on the message stack, select SmalltalkSyntaxTutorial>>divideTwoByZero". SmalltalkSyntaxTutorial new divideTwoByZero. '! ! !SmalltalkSyntaxTutorial methodsFor: 'interactive' stamp: 'EstebanLorenzano 7/31/2013 11:09'! divideTwoByZero 2/0. "Oups!! 2/0 raises a ZeroDivide exception. So the debugger opens to let you fix the code. - Remove the line of code above. - Right-click and select 'Accept' to compile the new version of the method - click the button 'Proceed' to continue execution. ". ProfStef next. ! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 16:42'! doingVSPrinting ^ Lesson title: 'Doing VS Printing: Doing' lesson: '"Cool !! (I like to say Cooool :) ). You''ve just executed a Smalltalk expression. More precisely, you sent the message ''next'' to ProfStef class (it''s me !!). Note you can run this tutorial again by evaluating: ''ProfStef go''. ''ProfStef previous'' returns to the previous lesson. You can also Do It using the keyboard shortcut ''ALT d'' (this varies according to your operating system/computer: it can be ''CMD d'' or ''CTRL d''). Try to evaluate these expressions:" Browser open. SmalltalkImage current aboutThisSystem. "Then go to the next lesson:" ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'initialize-release' stamp: 'LaurentLaffont 12/12/2010 17:18'! initialize super initialize. self prepareDebuggerExample.! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 2/15/2011 22:22'! instanciation ^ Lesson title: 'Instanciation' lesson: '"Objects are instances of their class. Usually, we send the message #new to a class for creating an instance of this class. The message #allInstances sent to a class answers an Array with all instances of this class. For example, let''s look at how many instances of SimpleButtonMorph exist:" SimpleButtonMorph allInstances size. "Now create a new instance of it:" SimpleButtonMorph new label: ''A nice button''; openCenteredInWorld. "See the button centered on the world ? The list of all instances should contains one more instance:" SimpleButtonMorph allInstances size. "Let''s play with it:" SimpleButtonMorph allInstances last label: ''ProfStef is cooooool !!''; color: Color cyan. "Let''s delete it and ask the system to clean the memory:" SimpleButtonMorph allInstances last delete. Smalltalk garbageCollect. SimpleButtonMorph allInstances size. "Click on the button to go to next lesson:" SimpleButtonMorph new label: ''Go to next lesson''; target: [ProfStef next. SimpleButtonMorph allInstances last delete]; actionSelector: #value; openCenteredInWorld.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:34'! iterators ^ Lesson title: 'Iterators' lesson: '"The message do: is sent to a collection of objects (Array, Set, OrderedCollection), evaluating the block for each element. Here we want to print all the numbers on the Transcript (a console)" #(11 38 3 -2 10) do: [:each | Transcript show: each printString; cr]. "Some other really nice iterators" #(11 38 3 -2 10) collect: [:each | each abs]. #(11 38 3 -2 10) collect: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each > 10]. #(11 38 3 -2 10) reject: [:each | each > 10]. #(11 38 3 -2 10) do: [:each | Transcript show: each printString] separatedBy: [Transcript show: ''.'']. ProfStef allInstances do: [:aProfStef | aProfStef next].'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:34'! loops ^ Lesson title: 'Loops' lesson: '"Loops are high-level collection iterators, implemented as regular methods." "Basic loops: to:do: to:by:do" 1 to: 100 do: [:i | Transcript show: i asString; cr ]. 1 to: 100 by: 3 do: [:i | Transcript show: i asString; cr]. 100 to: 0 by: -2 do: [:i | Transcript show: i asString; cr]. 1 to: 1 do: [:i | ProfStef next].'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:34'! mathematicalPrecedence ^ Lesson title: 'Mathematical precedence' lesson: '"Traditional precedence rules from mathematics do not follow in Smalltalk." 2 * 10 + 2. "Here the message * is sent to 2, which answers 20, then 20 receive the message + Remember that all messages always follow a simple left-to-right precedence rule, * without exceptions *." 2 + 2 * 10. 2 + (2 * 10). 8 - 5 / 2. (8 - 5) / 2. 8 - (5 / 2). ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/27/2010 21:27'! messageSyntaxBinary ^ Lesson title: 'Message syntax: Binary messages' lesson: '"Binary messages have the following form: anObject + anotherObject" 3 * 2. Date today + 3 weeks. false | false. true & true. true & false. 10 @ 100. 10 <= 12. ''ab'', ''cd''. Date today < Date yesterday. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:35'! messageSyntaxCascade ^ Lesson title: 'Message syntax: Cascade' lesson: '"; is the cascade operator. It''s useful to send message to the SAME receiver Open a Transcript (console):" Transcript open. "Then:" Transcript show: ''hello''. Transcript show: ''Smalltalk''. Transcript cr. "is equivalent to:" Transcript show: ''hello''; show: ''Smalltalk'' ; cr. "Try to go to the next lesson with a cascade of two ''next'' messages:" ProfStef'.! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:35'! messageSyntaxCascadeShouldNotBeHere ^ Lesson title: 'Lost ?' lesson: '"Hey, you should not be here !!!! Go back and use a cascade !!" ProfStef previous.'.! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 12/13/2010 21:09'! messageSyntaxExecutionOrder ^ Lesson title: 'Message syntax: Execution order' lesson: '"Unary messages are executed first, then binary messages and finally keyword messages: Unary > Binary > Keywords" 2 + 3 squared. 2 raisedTo: 3 + 2. (0@0) class. 0@0 corner: 100@200. (0@0 corner: 100@200) class. "Between messages of similar precedence, expressions are executed from left to right" -3 abs negated reciprocal. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:35'! messageSyntaxExecutionOrderParentheses ^ Lesson title: 'Message syntax: Parentheses' lesson: '"Use parentheses to change order of evaluation" (2 + 3) squared. (2 raisedTo: 3) + 2. (0@0 extent: 100@200) bottomRight. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:35'! messageSyntaxKeyword ^ Lesson title: 'Message syntax: Keyword messages' lesson: '"Keyword Messages are messages with arguments. They have the following form: anObject akey: anotherObject akey2: anotherObject2" 4 between: 0 and: 10. "The message is between:and: sent to the Number 4" 1 max: 3. Color r:1 g:0 b:0. "The message is r:g:b: implemented on class Color. Note you can also write" Color r:1 g:1 b:0. ProfStef perform: #next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/27/2010 21:40'! messageSyntaxUnary ^ Lesson title: 'Message syntax: Unary messages' lesson: '"Messages are sent to objects. There are three types of message: Unary, Binary and Keyword. Unary messages have the following form: anObject aMessage You''ve already sent unary messages. For example:" 1 class. false not. Time now. Date today. Float pi. "And of course: " ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/27/2010 21:41'! pharoEnvironment ^ Lesson title: 'Pharo environment' lesson: '"Every Smalltalk system is full of objects. There are windows, text, numbers, dates, colors, points and much more. You can interact with objects in a much more direct way than is possible with other programming languages. Every object understands the message ''explore''. As a result, you get an Explorer window that shows details about the object." Date today explore. "This shows that the date object consists of a point in time (start) and a duration (one day long)." ProfStef explore. "You see, ProfStef class has a lot of objects. Let''s take a look at my code:" ProfStef browse. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'interactive' stamp: 'LaurentLaffont 12/12/2010 17:16'! prepareDebuggerExample self class compile: 'divideTwoByZero 2/0. "Oups!! 2/0 raises a ZeroDivide exception. So the debugger opens to let you fix the code. - Remove the line of code above. - Right-click and select ''Accept'' to compile the new version of the method - click the button ''Proceed'' to continue execution. ". ProfStef next. ' classified: 'interactive'.! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:36'! printing ^ Lesson title: 'Doing VS Printing: Printing' lesson: '"Now you''re a Do It master !! Let''s talk about printing. It''s a Do It which prints the result next to the expression you''ve selected. For example, select the text below, open the menu and click on ''print it (p)'':" 1 + 2. "You''ve seen the letter ''p'' between parentheses next to ''print it'' ? It indicates the ALT- shortcut to execute this command. Try ALT-p on the following expressions:" Date today. Time now. "The result is selected, so you can erase it using the backspace key. Try it !!" SmalltalkImage current datedVersion. ProfStef next.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 12/13/2010 21:57'! reflection ^ Lesson title: 'Reflection' lesson: '"You can inspect and change the system at runtime. Take a look at method #ifFalse:ifTrue: source code of class True:" (True>>#ifFalse:ifTrue:) definition. "Or just its comment:" (True>>#ifFalse:ifTrue:) comment. "Here''s all the methods I implement:" ProfStef selectors. "Let''s create a new method to go to the next lesson:" ProfStef class compile:''goToNextLesson self next''. "Wow !! I can''t wait to use my new method !! " ProfStef goToNextLesson.'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 12/13/2010 22:06'! reflectionContinued ^ Lesson title: 'Reflection continued' lesson: '"So cool, isn''t it ? Before going further, let''s remove this method:" ProfStef respondsTo: #goToNextLesson. ProfStef class removeSelector: #goToNextLesson. ProfStef respondsTo: #goToNextLesson. "Then move forward:" ProfStef default executeMethod: (ProfStef lookupSelector:#next).'! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/27/2010 21:09'! theEnd ^ Lesson title: 'Tutorial done !!' lesson: '"This tutorial is done. Enjoy programming Smalltalk with Pharo. Don''t forget to read ''Pharo By Example'' found here: http://pharo-project.org/PharoByExample. You can run this tutorial again by evaluating: ProfStef go. Do you want to create your own interactive tutorial with ProfStef ? That''s very easy!!!! How ? There''s a ProfStef interactive tutorial for that :D Just evaluate the following code: ProfStef goOn: HowToMakeYourOwnTutorial See you soon !!" '! ! !SmalltalkSyntaxTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 2/6/2011 19:05'! tutorial ^ #( welcome doingVSPrinting printing basicTypesNumbers basicTypesCharacters basicTypesString basicTypesSymbol basicTypesArray basicTypesDynamicArray messageSyntaxUnary messageSyntaxBinary messageSyntaxKeyword messageSyntaxExecutionOrder messageSyntaxExecutionOrderParentheses mathematicalPrecedence messageSyntaxCascade messageSyntaxCascadeShouldNotBeHere blocks blocksAssignation conditionals loops iterators instanciation reflection reflectionContinued pharoEnvironment debugger theEnd )! ! !SmalltalkSyntaxTutorial methodsFor: 'lessons' stamp: 'LaurentLaffont 1/21/2010 13:36'! welcome ^ Lesson title: 'Welcome' lesson: '"Hello!! I''m Professor Stef. You must want me to help you learn Smalltalk. So let''s go to the first lesson. Select the text below, right-click and choose ''do it (d)''" ProfStef next.'! ! !ConfigurationOf commentStamp: 'dkh 5/30/2012 16:31' prior: 71969551! You must use a *configuration* when your project is stored in a repository using `.mcz` files. If you are using a source code manager (SCM) like [git][1] and have created a *baseline* (see the [**BaselineOf** class comment][3] for more info) you may use a *configuration* to associate a specific git commit (SHA, branch name, tag name) with a [Metacello version][2]. To create a new Metacello configuration: 1. Create a subclass of the **ConfigurationOf** class. The configuration class for your project should be names by appending the name of your project to the string `ConfigurationOf`. The name of the category and package should be the same as the name of the class: ```Smalltalk ConfigurationOf subclass: #ConfigurationOfExample instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'ConfigurationOfExample' ``` 2. Create a **baselineXXXX:** method where you specify the structure of your project: ```Smalltalk baseline0100: spec spec for: #common do: [ spec repository: 'http://ss3.gemstone.com/ss/Example'. spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]]. ``` 3. Create a **versionXXXX:** method where you specify the specific versions of the packages to be loaded for this version: ```Smalltalk version01000: spec spec for: #common do: [ spec blessing: #release. spec package: 'Example-Core' with: 'Example-Core'; package: 'Example-Tests' with: 'Example-Tests' ]. ``` 4. Create a Monticello package for your **ConfigurationOf** class and save it in the repository where your packages are stored. [1]: http://git-scm.com/ [2]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-version-numbers [3]: https://github.com/dalehenrich/metacello-work/blob/master/repository/Metacello-Base.package/BaselineOf.class/README.md ! !BaselineOf commentStamp: 'dkh 5/30/2012 16:30' prior: 71971723! You should use a *baseline* when you are using a disk-based source code manager (SCM) like [git][1]. When using a disk-based SCM it is not necessary to use the Metacello *version* method, because it is intended for use with `.mcz` files. With a disk-based SCM you only need a single `baseline:` method. When you change the structure of your project you can change the baseline and save everything in a single commit. So multiple `baseline:` methods are no longer needed. You may still need a *configuration* when using a *baseline*. The [Sample project][3] on GitHub has a good example of a configuration used in conjunction with a *baseline*. See the [**ConfigurationOf** class comment][2] for information on creating a *configuration*. To create a new Metacello baseline: 1. Create a subclass of the **BaselineOf** class. The baseline class for your project should be named by appending the name of your project to the string `BaselineOf`. The name of the category and package should be the same as the name of the class: ```Smalltalk BaselineOf subclass: #BaselineOfExample instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'BaselineOfExample' ``` 2. Create a **baseline:** method where you specify the structure of your project: ```Smalltalk baseline: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]]. ``` 3. Create a Monticello package for your **BaselineOf** class and save it in the repository where your packages are stored. [1]: http://git-scm.com/ [2]: https://github.com/dalehenrich/metacello-work/blob/master/repository/Metacello-Base.package/ConfigurationOf.class/README.md [3]: https://github.com/dalehenrich/sample/tree/configuration/ConfigurationOfSample.package/ConfigurationOfSample.class ! !BaselineOf methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! projectClass ^ MetacelloMCBaselineProject! ! !BaselineOf methodsFor: 'accessing' stamp: 'dkh 6/22/2012 12:09'! versionNumberClass ^ MetacelloVersionNumber! ! !BaselineOfFileTree methodsFor: 'baseline' stamp: 'dkh 8/10/2012 22:25'! baseline: spec spec for: #'common' do: [ spec configuration: 'OSProcess' with: [ spec versionString: #'stable'; repository: 'http://ss3.gemtalksystems.com/ss/MetaRepoForPharo20' ]; yourself. spec package: 'MonticelloFileTree-Core'; package: 'MonticelloFileTree-Tests' with: [ spec requires: #('default') ]; package: 'MonticelloFileTree-FileSystem-Utilities' with: [ spec requires: #('MonticelloFileTree-Core') ]; package: 'MonticelloFileTree-FileSystem-Tests' with: [ spec requires: #('MonticelloFileTree-Tests') ]; package: 'MonticelloFileTree-Git' with: [ spec requires: #('MonticelloFileTree-Core' 'OSProcess') ]; package: 'MonticelloFileTree-GitTests' with: [ spec requires: #('MonticelloFileTree-Git' 'MonticelloFileTree-Tests') ]; yourself. spec group: 'default' with: #('MonticelloFileTree-Core' 'MonticelloFileTree-FileSystem-Utilities'); group: 'Tests' with: #('MonticelloFileTree-Tests' 'MonticelloFileTree-FileSystem-Tests'); group: 'Git' with: #('MonticelloFileTree-Git'); group: 'Git Tests' with: #('MonticelloFileTree-GitTests'); group: 'TravisCI' with: #('Tests'); yourself ] ! ! !BaselineOfMetacello methodsFor: 'baseline' stamp: 'ChristopheDemarey 9/19/2013 16:18'! baseline: spec spec for: #'common' do: [ spec postLoadDoIt: #'reprimeRegistryIssue197'. spec baseline: 'FileTree'. spec project: 'Gofer' with: [ spec className: 'ConfigurationOfGofer'; versionString: #'stable'; loads: #('Core'); repository: 'http://seaside.gemtalksystems.com/ss/metacello' ]; project: 'Gofer Tests' copyFrom: 'Gofer' with: [ spec loads: #('Tests') ]; yourself. spec package: 'Metacello-Base'; package: 'Metacello-ToolBox' with: [ spec requires: #('Metacello-Base' 'Metacello-Core') ]; package: 'Metacello-Core' with: [ spec requires: 'Metacello-Base'; includes: #('Metacello-MC' 'Metacello-Platform') ]; package: 'Metacello-Cypress' with: [ spec requires: 'Metacello-Core' ]; package: 'Metacello-FileTree' with: [ spec requires: #('Metacello-MC' 'FileTree') ]; package: 'Metacello-GitHub' with: [ spec requires: #('Metacello-MC' 'Metacello-FileTree') ]; package: 'Metacello-MC' with: [ spec requires: #('Metacello-Core' 'Gofer') ]; package: 'Metacello-Platform' with: [ spec requires: #('Metacello-MC') ]; package: 'Metacello-Reference' with: [ spec requires: #('Metacello-MC') ]; package: 'Metacello-Tutorial' with: [ spec requires: #('Metacello-Core') ]; package: 'Metacello-TestsCore' with: [ spec requires: #('Metacello-Core') ]; package: 'Metacello-TestsMCResources' with: [ spec postLoadDoIt: #'testResourcePostLoadDoIt'; includes: #('Metacello-TestsCommonMC'); requires: #('Metacello-Core') ]; package: 'Metacello-TestsMCCore' with: [ spec requires: #('Metacello-Core' 'Metacello-TestsCore' 'Metacello-ToolBox' 'Metacello-TestsMCResources') ]; package: 'Metacello-TestsMC' with: [ spec requires: #('Metacello-MC' 'Gofer Tests' 'Metacello-ToolBox' 'Metacello-GitHub' 'Metacello-TestsMCResources') ]; package: 'Metacello-TestsMCA' with: [ spec requires: #('Metacello-TestsMC') ]; package: 'Metacello-TestsMCB' with: [ spec requires: #('Metacello-TestsMC') ]; package: 'Metacello-TestsCommonMC' with: [ spec file: 'Metacello-TestsCommonMC.common'; requires: 'Metacello-TestsMCResources' ]; package: 'Metacello-TestsReference' with: [ spec requires: #('Metacello-Reference') ]; package: 'Metacello-TestsTutorial' with: [ spec requires: #('Metacello-Tutorial' 'Metacello-TestsMCResources') ]; yourself. spec group: 'default' with: #('batch' 'Metacello-ToolBox'); group: 'batch' with: #('Metacello-Core' 'Metacello-GitHub'); group: 'Base Configuration' with: #('Metacello-Base'); group: 'Core' with: #('default'); group: 'Cypress' with: #('Metacello-Cypress'); group: 'Tutorial' with: #('Metacello-Tutorial' 'Metacello-Reference'); group: 'UI' with: #('default'); group: 'TravisCI_1' with: #('Metacello-TestsCore' 'Metacello-TestsReference' 'Metacello-TestsMCCore'); group: 'TravisCI_2' with: #('Metacello-TestsMCA'); group: 'TravisCI_3' with: #('Metacello-TestsMCB' 'Metacello-TestsTutorial'); group: 'TravisCI' with: #('TravisCI_1' 'TravisCI_2' 'TravisCI_3'); group: 'Tests' with: #('Metacello-TestsCore' 'Metacello-TestsTutorial' 'Metacello-TestsMCA' 'Metacello-TestsMCB' 'Metacello-TestsReference' 'Metacello-TestsMCCore'); yourself ]. spec for: #'squeakCommon' do: [ spec configuration: 'HelpSystem' with: [ spec versionString: '1.1'; loads: #('Core'); repository: 'http://www.squeaksource.com/MetacelloRepository' ]; configuration: 'OSProcess' with: [ spec versionString: '4.4.5'; repository: 'http://www.squeaksource.com/MetacelloRepository'; repository: 'http://seaside.gemtalksystems.com/ss/metacello' ]; yourself. spec package: 'Metacello-TestsPlatform' with: [ spec requires: #('Metacello-Platform'); file: 'Metacello-TestsPlatform.squeakCommon' ]; package: 'Metacello-Help' with: [ spec requires: 'HelpSystem' ]; yourself. spec group: 'Tests' with: #('Metacello-TestsPlatform'); group: 'TravisCI_1' with: #('Metacello-TestsPlatform'); yourself ]. spec for: #'pharo' do: [ spec project: 'ProfStef' with: [ spec className: 'ConfigurationOfProfStef'; versionString: #'stable'; repository: 'http://smalltalkhub.com/mc/PharoExtras/ProfStef/main' ]; configuration: 'OSProcess' with: [ spec versionString: #'stable' ]; yourself. spec package: 'Metacello-ProfStef' with: [ spec requires: #('Metacello-Core' 'ProfStef' 'Metacello-ToolBox') ]; package: 'Metacello-TestsProfStef' with: [ spec requires: #('Metacello-ProfStef') ]; package: 'Metacello-PharoCommonPlatform' with: [ spec requires: #('Metacello-MC') ]; package: 'Metacello-Platform' with: [ spec requires: #('Metacello-PharoCommonPlatform') ]; yourself. spec group: 'Tests' with: #('Metacello-TestsProfStef'); group: 'Tutorial' with: #('Metacello-ProfStef'); yourself ]. spec for: #'pharo1.x' do: [ spec package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.pharo'; requires: #('OSProcess') ] ]. spec for: #'pharo1.1.x' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo1.1/repository' ] ]. spec for: #'pharo1.2.x' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo1.1/repository' ] ]. spec for: #'pharo1.3.x' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo1.3/repository' ] ]. spec for: #'pharo1.4.x' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo1.4/repository' ] ]. spec for: #'pharo2.x' do: [ spec configuration: 'OSProcess' with: [ spec repository: 'http://ss3.gemtalksystems.com/ss/MetaRepoForPharo20' ]; yourself. spec package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.pharo20'; requires: #('OSProcess') ]; package: 'Metacello-TestsCommonMC' with: [ spec file: 'Metacello-TestsCommonMC.pharo20' ]; yourself. spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo2.0/repository' ] ]. spec for: #'pharo3.x' do: [ spec removeProject: 'OSProcess'. spec package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.pharo30' ]; package: 'Metacello-TestsCommonMC' with: [ spec file: 'Metacello-TestsCommonMC.pharo20' ]; yourself. spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:pharo3.0/repository' ] ]. spec for: #'squeak' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:squeak4.3/repository' ]; yourself. spec package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.squeak'; requires: #('OSProcess') ]; yourself ]. spec for: #'gemstone' do: [ spec baseline: 'FileTree' with: [ spec repository: 'github://dalehenrich/filetree:gemstone2.4/repository' ]; project: 'GsCore' with: [ spec className: 'ConfigurationOfGsCore'; versionString: '0.247'; repository: 'http://seaside.gemtalksystems.com/ss/MetacelloRepository' ]; project: 'GsMonticello' with: [ spec className: 'ConfigurationOfGsMonticello'; versionString: '0.242'; repository: 'http://seaside.gemtalksystems.com/ss/MetacelloRepository' ]; yourself. spec package: 'Metacello-GitHub' with: [ spec requires: #('GsCore') ]; package: 'Metacello-Platform' with: [ spec file: 'Metacello-Platform.gemstone'; postLoadDoIt: #'gemstone10beta311PostLoadDoIt'; requires: 'GsMonticello' ]; package: 'Metacello-TestsPlatform' with: [ spec requires: #('Metacello-Platform'); file: 'Metacello-TestsPlatform.gemstone' ]; yourself. spec group: 'Tests' with: #('Metacello-TestsPlatform'); group: 'TravisCI_1' with: #('Metacello-TestsPlatform'); yourself ]! ! !BaselineOfMetacello methodsFor: 'doits' stamp: 'dkh 07/24/2012 18:09'! gemstone10beta311PostLoadDoIt (Smalltalk at: #MetacelloGemStonePlatform) initialize! ! !BaselineOfMetacello methodsFor: 'doits' stamp: 'dkh 07/29/2013 16:20'! reprimeRegistryIssue197 MetacelloProjectRegistration registry baselineRegistry values detect: [ :registration | registration isValid not ] ifNone: [ "no invalid registrations, don't reset and prime" ^ self ]. Transcript cr; show: 'priming registry from image. See https://github.com/dalehenrich/metacello-work/issues/197'. [ MetacelloProjectRegistration resetRegistry; primeRegistryFromImage ] on: Warning do: [ :ex | Transcript cr; show: 'Warning resumed: ' , ex description. ex resume ]! ! !BaselineOfMetacello methodsFor: 'doits' stamp: 'dkh 6/1/2012 09:18:17'! testResourcePostLoadDoIt "reset test resources" #(#'MetacelloAlternateResource' #'MetacelloAtomicConfigurationResource' #'MetacelloAtomicMonticelloResource' #'MetacelloConfigurationResource' #'MetacelloMonticelloResource' #'MetacelloScriptingResource' #'MetacelloIssue108Resource') do: [ :className | Smalltalk at: className ifPresent: [ :cls | cls reset ] ]! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 05/08/2013 11:39'! bootstrapMetacelloFrom: repositoryUrl "Corresponds to version 1.0.0-beta.32.6" "KEEP MetacelloConfigTemplate class>>ensureMetacelloBaseConfiguration in synch!!" | platformPkg | self ensureGoferVersion: 'Gofer-Core-lr.115' repositoryUrl: repositoryUrl. #('Metacello-Core-dkh.678' 'Metacello-MC-dkh.674') do: [ :pkg | self bootstrapPackage: pkg from: repositoryUrl ]. platformPkg := Smalltalk at: #'SystemVersion' ifPresent: [ :cl | | versionString | versionString := cl current version. (versionString beginsWith: 'Squeak') ifTrue: [ (versionString beginsWith: 'Squeak3') ifTrue: [ 'Metacello-Platform.squeak-dkh.5' ] ifFalse: [ 'Metacello-Platform.squeak-dkh.22' ] ] ifFalse: [ (versionString beginsWith: 'Pharo') ifTrue: [ self bootstrapPackage: 'Metacello-PharoCommonPlatform-dkh.2' from: repositoryUrl. (versionString beginsWith: 'Pharo2') ifTrue: [ 'Metacello-Platform.pharo20-dkh.33' ] ifFalse: [ 'Metacello-Platform.pharo-dkh.34' ] ] ] ]. self bootstrapPackage: platformPkg from: repositoryUrl! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 9/4/2012 17:09'! bootstrapPackage: aString from: aPath | repository version | repository := (MCCacheRepository default includesVersionNamed: aString) ifTrue: [ MCCacheRepository default ] ifFalse: [ MCHttpRepository location: aPath user: '' password: '' ]. self retry: [ repository versionReaderForFileNamed: aString , '.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 6/10/2012 22:01'! ensureGoferVersion: goferVersion repositoryUrl: repositoryUrl "load the p=file goferVersion if Gofer isn't loaded or an earlier version of Gofer is currently loaded" | goferVersionNumber wc pName | (Smalltalk at: #'Gofer' ifAbsent: [ ]) == nil ifTrue: [ ^ self bootstrapPackage: goferVersion from: repositoryUrl ]. goferVersionNumber := (goferVersion copyAfterLast: $.) asNumber. wc := [ ((Smalltalk at: #'GoferPackageReference') name: 'Gofer') workingCopy ] on: Error do: [ :ex | ex return: ((Smalltalk at: #'GoferPackageReference') name: 'Gofer-Core') workingCopy ]. pName := wc ancestry ancestors first name. (pName copyAfterLast: $.) asNumber <= goferVersionNumber ifTrue: [ self bootstrapPackage: goferVersion from: repositoryUrl ]! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 6/11/2012 11:05'! ensureMetacello "Bootstrap Metacello and load the 'botstrap' group" self ensureMetacello: #('batch')! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 06/28/2013 16:07'! ensureMetacello: loadList "Bootstrap Metacello, retry using alternate repository, if primary repository is not accessible" Smalltalk at: #'MetacelloProject' ifAbsent: [ | version error gofer | (Array with: 'http://smalltalkhub.com/mc/dkh/metacello/main' with: 'http://seaside.gemtalksystems.com/ss/metacello') do: [ :repositoryUrl | "bootstrap Metacello" [ self bootstrapMetacelloFrom: repositoryUrl. Smalltalk at: #'ConfigurationOfMetacello' ifAbsent: [ self retry: [ gofer := (Smalltalk at: #'Gofer') new. gofer perform: #'url:' with: repositoryUrl; perform: #'package:' with: 'ConfigurationOfMetacello'; perform: #'load' ] ]. version := (Smalltalk at: #'ConfigurationOfMetacello') project version: #'previewBootstrap'. version load: loadList. self retry: [ gofer := (Smalltalk at: #'Gofer') new. Smalltalk at: #'ConfigurationOfMetacelloPreview' ifAbsent: [ gofer perform: #'url:' with: repositoryUrl; perform: #'package:' with: 'ConfigurationOfMetacelloPreview'; perform: #'load' ] ]. version := (Smalltalk at: #'ConfigurationOfMetacelloPreview') project version: #'stable'. "load latest from GitHub" version load: loadList. ^ self ] on: Error do: [ :ex | error := ex. Transcript cr; show: 'failed ensureMetacello using '; show: repositoryUrl printString; show: ' : '; show: ex description printString; show: '...retrying'. "try again" ex return: nil ] ]. "shouldn't get here unless the load failed ... throw an error" self error: 'retry with alternate repository failed: ' , error description printString ]! ! !ConfigurationOf class methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! project ^self new project! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 9/4/2012 17:09'! retry: aBlock self retry: aBlock retryCount: 3! ! !ConfigurationOf class methodsFor: 'private' stamp: 'dkh 9/4/2012 20:50'! retry: aBlock retryCount: retryCount | count | count := 1. [ true ] whileTrue: [ [ aBlock value. ^ self ] on: Error do: [ :ex | count < retryCount ifTrue: [ Transcript cr; show: 'RETRYING AFTER:'; cr; show: ex description printString. (Delay forSeconds: 5) wait ] ifFalse: [ Transcript cr; show: 'FAILED RETRYING:'; cr; show: ex description printString. ex pass ] ]. count := count + 1 ]! ! !ConfigurationOf class methodsFor: 'unloading Metacello' stamp: 'dkh 5/31/2012 17:57:13'! unloadMetacello "Unload the classes that implement Metacello. Metacello is not needed once a project has been loaded, so it can safely be unloaded." "self unloadMetacello" | gofer | gofer := (Smalltalk at: #Gofer) new. MCWorkingCopy allManagers do: [:wc | ((wc packageName beginsWith: 'Metacello') or: [ wc packageName beginsWith: 'OB-Metacello' ]) ifTrue: [ gofer package: wc packageName ]]. gofer unload.! ! !ConfigurationOf class methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOf methodsFor: 'defaults' stamp: 'dkh 5/31/2012 17:57:13'! bleedingEdge "override if different behavior desired. Use: self versionDoesNotExistError: #bleedingEdge if #bleedingEdge version is disallowed." ^self defaultBleedingEdgeVersion! ! !ConfigurationOf methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !ConfigurationOf methodsFor: 'defaults' stamp: 'dkh 5/31/2012 17:57:13'! defaultBleedingEdgeVersion | bleedingEdgeVersion | bleedingEdgeVersion := (self project map values select: [ :version | version blessing == #baseline ]) detectMax: [ :version | version ]. bleedingEdgeVersion ifNil: [ ^#'notDefined' ]. ^ bleedingEdgeVersion versionString! ! !ConfigurationOf methodsFor: 'accessing' stamp: 'dkh 6/22/2012 14:31'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := self projectClass new projectAttributes: self customProjectAttributes. "Create the Metacello project" project versionNumberClass: self versionNumberClass. project class versionConstructorClass on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !ConfigurationOf methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! project: aProject project ifNil: [ self class ensureMetacello ]. project := aProject! ! !ConfigurationOf methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! projectClass ^ MetacelloMCProject! ! !ConfigurationOf methodsFor: 'private' stamp: 'dkh 5/31/2012 17:57:13'! versionDoesNotExistError: versionStringOrSymbol ((Smalltalk at: #MetacelloSymbolicVersionDoesNotExistError) project: self project versionString: versionStringOrSymbol) signal! ! !ConfigurationOf methodsFor: 'accessing' stamp: 'dkh 6/22/2012 12:09'! versionNumberClass ^ MetacelloSemanticVersionNumber! ! !MetacelloBaseConfiguration commentStamp: 'dkh 5/30/2012 13:50' prior: 71973752! You should be using ConfigurationOf instead of MetacelloBaseConfiguration. The class is being kept around because many extant Metacello configurations use MetacelloBaseConfiguration as a sentinel class to indicate whether or not Metacello is loaded.. Once the Metacello scripting API becomes prevalent (the api has it's own ensureMetacello logic) this class can be removed.! !MetacelloExampleProjectConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]]. ! ! !MetacelloMCTestsAbstractConfig methodsFor: 'accessing' stamp: 'dkh 6/12/2012 15:41:23.319'! project | constructor | ^project ifNil: [ "Construct Metacello project" constructor := MetacelloVersionConstructor on: self. project := constructor project. project loader: MetacelloNullRecordingMCSpecLoader new. project]. ! ! !MetacelloVersionQueryExampleConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec project: 'UTF8' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; file: 'MetacelloVersionQueryMiscConfig'; versionString: '1.0-baseline'; loads: #('Misc-UTF8' ) ]. spec package: 'Example-Core' with: [ spec requires: #('UTF8' ) ]; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-Tests' with: [ spec requires: #('Example-AddOn' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' 'Example-Tests' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]. spec group: 'Core' with: #('Example-Core' 'Example-AddOn' ); group: 'Tests' with: #('Example-Tests' 'Example-TestsUI' ); group: 'No UI' with: #('Core' 'Example-Tests' ); "recursive group definition" group: 'UI' with: #('No UI' 'UI' 'Tests' ).]. ! ! !MetacelloVersionQueryExampleConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline20: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Example-AddOn' with: [ spec requires: #('Example-Core' ) ]. spec group: 'Core' with: #('default' ); group: 'default' with: #('Example-Core' ) ]. ! ! !MetacelloVersionQueryExampleConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline21: spec spec for: #common do: [ spec package: 'Example-Core'; package: 'Core' with: [ spec requires: #('Example-Core' ) ]. spec group: 'default' with: #('Example-Core' ) ]. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'simple baseleine:)']. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version112: spec spec for: #common do: [ spec blessing: #stable ]. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version120: spec spec for: #common do: [ spec blessing: #stable ]. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version130: spec spec for: #common do: [ spec blessing: #development ]. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version131: spec spec for: #common do: [ spec blessing: #development ]. ! ! !MetacelloVersionQueryLatestVersionConfig methodsFor: 'versions' stamp: 'dkh 6/12/2012 15:41:23.319'! version132: spec spec for: #common do: [ spec blessing: #development ]. ! ! !MetacelloVersionQueryMasterConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineProject30: spec spec for: #common do: [ spec project: 'XML' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; versionString: '1.0-baseline'; loads: #('Misc-XML') ]; project: 'Project Core' with: [ spec className: 'MetacelloVersionQueryProjectConfig'; versionString: '2.1-baseline'; loads: #('Core') ]; project: 'Project Tests' with: [ spec className: 'MetacelloVersionQueryProjectConfig'; versionString: '2.1-baseline'; loads: #('Tests') ]. spec package: 'Master-Core' with: [ spec includes: #('Master-Platform'); requires: #('Project Core' 'XML') ]; package: 'Master-Platform'; package: 'Master-Tests' with: [ spec requires: #('Master-Core' 'Project Tests') ]. spec group: 'Core' with: #('Master-Core'); group: 'Tests' with: #('Master-Tests').]. ! ! !MetacelloVersionQueryMasterConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineProject31: spec spec for: #common do: [ spec project: 'XML' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; loads: #('Misc-XML') ]; project: 'Project Core' with: [ spec className: 'MetacelloVersionQueryProjectConfig'; versionString: '2.1-baseline'; loads: #('Core') ]; project: 'Project Tests' with: [ spec className: 'MetacelloVersionQueryProjectConfig'; versionString: '2.1-baseline'; loads: #('Tests') ]. spec package: 'Master-Core' with: [ spec includes: #('Master-Platform'); requires: #('Project Core' 'XML') ]; package: 'Master-Platform'; package: 'Master-Tests' with: [ spec requires: #('Master-Core' 'Project Tests') ]. spec group: 'Core' with: #('Master-Core'); group: 'Tests' with: #('Master-Tests').]. ! ! !MetacelloVersionQueryMiscConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec package: 'Misc-UTF8'; package: 'Misc-MD5'; package: 'Misc-XML'.]. ! ! !MetacelloVersionQueryProjectConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineProject20: spec spec for: #common do: [ spec project: 'Example ALL' with: [ spec className: 'MetacelloVersionQueryExampleConfig'; versionString: '1.0-baseline'; loads: #('ALL' ) ]. spec package: 'Project-Core' with: [ spec requires: 'Example ALL' ]; package: 'Project-Tests' with: [ spec requires: 'Project-Core' ]. spec group: 'Core' with: #('Project-Core' ); group: 'Tests' with: #('Project-Tests' ).]. ! ! !MetacelloVersionQueryProjectConfig methodsFor: 'baselines' stamp: 'dkh 6/12/2012 15:41:23.319'! baselineProject21: spec spec for: #common do: [ spec project: 'MD5' with: [ spec className: 'MetacelloVersionQueryMiscConfig'; versionString: '1.0-baseline'; loads: #('Misc-MD5' ) ]; project: 'Example Core' with: [ spec className: 'MetacelloVersionQueryExampleConfig'; versionString: '1.0-baseline'; loads: #('Core' ) ]; project: 'Example Tests' with: [ spec className: 'MetacelloVersionQueryExampleConfig'; versionString: '1.0-baseline'; loads: #('Example-Tests' ) ]. spec package: 'Project-Core' with: [ spec requires: #('Example Core' 'MD5' ) ]; package: 'Project-Tests' with: [ spec requires: #('Project-Core' 'Example Tests' ) ]. spec group: 'Core' with: #('Project-Core' ); group: 'Tests' with: #('Project-Tests' ).]. ! ! !Lesson commentStamp: 'LaurentLaffont 1/15/2010 10:25' prior: 71974195! See class side messages #welcome, #doingVSPrinting.... ! !Lesson class methodsFor: 'instance creation' stamp: 'LaurentLaffont 1/15/2010 09:27'! title: aStringForTitle lesson: aStringForLesson ^ self new title: aStringForTitle; lesson: aStringForLesson; yourself.! ! !Lesson methodsFor: 'accessing' stamp: 'LaurentLaffont 1/15/2010 09:25'! lesson ^ lesson ifNil: [lesson := '']! ! !Lesson methodsFor: 'accessing' stamp: 'LaurentLaffont 1/15/2010 09:25'! lesson: aString lesson := aString! ! !Lesson methodsFor: 'printing' stamp: 'LaurentLaffont 2/15/2011 22:46'! printOn: aStream super printOn: aStream. aStream nextPutAll: '('; nextPutAll: self title; nextPutAll: ')'. ! ! !Lesson methodsFor: 'accessing' stamp: 'LaurentLaffont 1/15/2010 09:25'! title ^ title ifNil: [title := '']! ! !Lesson methodsFor: 'accessing' stamp: 'LaurentLaffont 1/15/2010 09:25'! title: aString title := aString! ! !LessonView commentStamp: 'LaurentLaffont 1/15/2010 10:24' prior: 71974321! A LessonView displays a Lesson instance! !LessonView methodsFor: 'gui' stamp: 'LaurentLaffont 1/21/2010 21:01'! close self window delete.! ! !LessonView methodsFor: 'gui' stamp: 'LaurentLaffont 1/27/2010 21:21'! menu ^ MenuMorph fromArray: { {'do it (d)' translated. #doIt}. {'print it (p)' translated. #printIt}}.! ! !LessonView methodsFor: 'gui' stamp: 'AlainPlantec 8/28/2011 13:54'! open shoutMorph := PluggableTextMorph on: self text: nil accept: nil readSelection: nil menu: #shoutMorphFillMenu:. shoutMorph setText: ''. window := SystemWindow labelled: 'PrStef lesson'. window addMorph: shoutMorph frame: (0@0 corner: 1@1). window openInWorld.! ! !LessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 2/26/2012 14:13'! shoutAboutToStyle: aPluggableShoutMorphOrView ^ true! ! !LessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:58'! shoutMorph ^ shoutMorph ifNil: [self open. shoutMorph]! ! !LessonView methodsFor: 'gui' stamp: 'LaurentLaffont 1/21/2010 21:00'! shoutMorphFillMenu: aMenu ^ aMenu addAllFrom: self menu! ! !LessonView methodsFor: 'gui' stamp: 'EstebanLorenzano 7/31/2013 11:16'! showLesson: aLesson withTitle: aString self window setLabel: aString. self shoutMorph selectFrom: 0 to: 0; setText: aLesson lesson. (World systemWindows includes: self window) ifFalse: [self window openInWorld] ! ! !LessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 21:06'! text ^ self shoutMorph text asString! ! !LessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 21:02'! window ^ window ifNil: [self open. window]! ! !Metacello commentStamp: 'dkh 7/28/2012 20:04' prior: 71974419! # Metacello User Guide In this guide we'll take a walk through a couple of common development scenarios and highlight some of the features of the *Metacello Scripting API*. *For installatation and more detailed documentation on the Metacello Scripting API, see the [Metcello Scripting API Documentation][1].* ## Introduction The number one job of the *Metacello Scripting API* is to simplify the job of loading projects into your image. As you are probably all too aware, today it's a two step process where you first load the configuration into your image using [Gofer][2] and then load your project using Metacello: ```Smalltalk Gofer new package: 'ConfigurationOfSeaside30'; squeaksource: 'MetacelloRepository'; load. ((Smalltalk at: #ConfigurationOfSeaside30) version: #stable) load. ``` In the early days of Metacello (and Gofer) this was a great improvement over the alternatives, but today, 3 years after the introduction of Metacello, there should be a better way...and there is. Using the *Metacello Scripting API* the above expression reduces to the following: ```Smalltalk Metacello new configuration: 'Seaside30'; load. ``` ## Loading In this example of the [`load` command][5] we are leveraging a couple of default values, namely the `version` of the project and the `repository` where the **ConfigurationOfSeaside** package can be found: ```Smalltalk Metacello new configuration: 'Seaside30'; load. ``` Here is a variant of the same expression with the (current) default values explicitly specified: ```Smalltalk Metacello new configuration: 'Seaside30'; version: #stable; squeaksource: 'MetacelloRepository'; load. ``` The `version` attribute can be any legal [version number][10]. `squeaksource` is a [repository shortcut][4]. You can also specify the full [repository description][3] as follows: ```Smalltalk Metacello new configuration: 'Seaside30'; version: #stable; repository: 'http://www.squeaksource.com/MetacelloRepository'; load. ``` ##Listing Once you've loaded one or more projects into your image, you may want to list them. The following is an example of the [`list` command][6]: ```Smalltalk Metacello image configuration: [:spec | true ]; list. ``` The `image` message tells Metacello that you'd like to look at only loaded configurations. The *block* argument to the `configuration:` message is used to *select* against the list of loaded [MetacelloProjectSpec][7] instances in the [registry][8]. The `list` command itself returns a list of [MetacelloProjectSpec][7] instances that can be printed, inspected or otherwise manipulated. In addition to a *select block*, you can specify a *select collection* specifying the names of the projects you'd like to select: ```Smalltalk Metacello registry configuration: #('Seaside30' 'MetacelloPreview'); list. ``` The `registry` message tells Metacello that you'd like to look at all projects in the [registry][8] whether or not they are loaded. The *collection* argument to the `configuration:` message is used to *select* against the list of project names in the [registry][8]. The `list` command can also be used to look at configurations in Monticello repositories. For example: ```Smalltalk Metacello new configuration: [:spec | spec name beginsWith: 'Seaside']; squeaksource: 'MetacelloRepository'; list. ``` lists the configurations whose names (sans the `ConfigurationOf`) begin with `Seaside` in the `MetacelloRepositry` in the [Squeaksource](http://www.squeaksource.com) repostory. ## Getting Once you've loaded a project into your image the next logical step is upgrading your project to a new version. Let's say that a new `#stable` version of Seaside30 has been released and that you want to upgrade. This is a two step process: * [get a new version of the configuration][11] * [load the new version][12] ### Get a new version of the configuration The following expression gets the latest version of the configuration: ```Smalltalk Metacello image configuration: 'Seaside30'; get. ``` By using the `image` message, you can leverage the fact that the [registry][8] remembers from which repository you loaded the original version of the configuration. The `get` command simply downloads the latest version of the configuration package from the repository. You may download the configuration from a different repository: ```Smalltalk Metacello image configuration: 'Seaside30'; squeaksource: 'Seaside30; get. ``` The `get` command will update the [registry][8] with the new repository location information. You may also use the `get` command to load a configuration for a project into your image without actually loading the project itself: ```Smalltalk Metacello image configuration: 'SeasideRest'; squeaksource: 'Seaside30'; get. ``` The 'SeasideRest' project information will be registered in the [registry][8] and marked as *unloaded*. ### Load the new version Once you've got a new copy of the Seaside30 configuration loaded into your image, you may upgrade your image with the following expression: ```Smalltalk Metacello image configuration: 'Seaside30'; version: #stable; load. ``` By using the `image` message, you are asking Metacello to look the project up in the [registry][8] before performing the operation, so it isn't necessary to supply all of the project details for every command operation. Of course, the `load` command updates the [registry][8]. If you want to load a project for which you've already done a `get` (like the SeasideRest project earlier), you can do the following: ```Smalltalk Metacello registry configuration: 'SeasideRest'; version: #stable; load. ``` In this case you use the `registry` message to indicate that you are interested in both *loaded* and *unloaded* projects. ##Locking Let's say that you are using an older version of Seaside30 (say 3.0.5) instead of the #stable version (3.0.7) and that your application doesn't work with newer versions of Seaside30 (you've tried and it's more work to get you application to work with the newer version of Seaside30 than it's worth). Let's also say that you want to try out something in the SeasideRest project, but when you try loading SeasideRest, you end up having Seaside 3.0.7 loaded as well. This is an unfortunate side effect of Metacello trying to *do the right thing*, only in your case it is the wrong thing. Fortunately, the [`lock` command][9] can give you control. First you need to `lock` the Seaside30 project: ```Smalltalk Metacello image configuration: 'Seaside30'; lock. ``` The `image` message tells Metacello to do a lookup in the list of loaded projects and then to put a lock on the loaded version of the project. If you want you can specify which version of the project you want locked: ```Smalltalk Metacello image configuration: 'Seaside30'; version: '3.0.5'; lock. ``` After a project is locked an error (**MetacelloLockedProjectError**) is thrown when you attempt to load a project that has a dependency upon a different version of Seaside30. The error is thrown before any packages are actually loaded. ### Bypassing locks Let's say that you want to load the SeasideRest project even though it may require a version of Seaside30 that is later than the version that you have locked. To do that you need to suppress the upgrade of the Seaside30 project during the load of the SeasideRest project and you can do that with the use of the `onUpgrade:` message: ```Smalltalk Metacello new configuration: 'SeasideRest'; version: #stable; onUpgrade: [:ex :existing :new | existing baseName = 'Seaside30' ifTrue: [ ex disallow ]. ex pass ]; load. ``` The `onUpgrade:` block tells Metacello to disallow the upgrade of any project whose `baseName` is `Seaside30` and to continue with the load. Of course if there are any explicit dependencies between SeasideRest and the later version of Seaside30 (missing classes, etc.) then you may very well get load errors or errors while using the SeasideRest, but that's the price you pay for not upgrading. ### Upgrading a locked project If you want to explicitly upgrade a locked project, you can use the `load` command. The following command will upgrade Seaside30 to version 3.0.6 even if it is locked: ```Smalltalk Metacello image configuration: 'Seaside30'; version: '3.0.6'; lock. ``` The newly loaded of the project will continue to be locked. [1]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md [2]: http://www.lukas-renggli.ch/blog/gofer [3]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#repository-descriptions [4]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#repository-shortcuts [5]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#loading [6]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#listing [7]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacelloprojectspec [8]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-project-registry [9]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#locking [10]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#metacello-version-numbers [11]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloUserGuide.md#get-a-new-version-of-the-configuration [12]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloUserGuide.md#load-the-new-version! !Metacello class methodsFor: 'instance creation' stamp: 'dkh 6/13/2012 16:09'! classic "set the options such that the load performed will be identical to the classic ConfigurationOf load: (ConfigurationOfExample project version: '1.0') load #classic forces Metacello to look at image state to determine which version of a project is loaded instead of using the registry to tell us explicitly which version of a project is loaded .. image state is not PRECISE" "useCurrentVersion is a 'private' option for enforcing classic rules, so it's not part of scripting api" ^ self new onUpgrade: [ :ex | ex allow ]; onConflict: [ :ex | ex allow ]; addStatement: #'useCurrentVersion:' args: {true}; yourself! ! !Metacello class methodsFor: 'instance creation' stamp: 'dkh 7/16/2012 10:12'! image ^ self new executorSpec: #'MetacelloScriptImageExecutor' -> 'batch'; yourself! ! !Metacello class methodsFor: 'instance creation' stamp: 'dkh 07/27/2013 08:45'! registrations ^ MetacelloProjectRegistration registry registrations! ! !Metacello class methodsFor: 'instance creation' stamp: 'dkh 7/13/2012 09:13'! registry ^ self new executorSpec: #'MetacelloScriptRegistryExecutor' -> 'batch'; yourself! ! !Metacello class methodsFor: 'private' stamp: 'dkh 7/13/2012 09:08'! scriptExecutorClass ^ self scriptExecutorClass: {(#'MetacelloScriptApiExecutor' -> 'batch')}! ! !Metacello class methodsFor: 'private' stamp: 'dkh 7/13/2012 09:15'! scriptExecutorClass: anExecutorSpec Smalltalk at: anExecutorSpec key ifAbsent: [ ConfigurationOf ensureMetacello: anExecutorSpec value ]. ^ Smalltalk at: anExecutorSpec key! ! !Metacello methodsFor: 'private' stamp: 'dkh 5/31/2012 17:57:13'! addStatement: selector args: args self statements add: selector -> args! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:45'! baseline: projectName self addStatement: #'baselineArg:' args: {projectName}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:46'! blueplane: projectName self repository: 'http://squeaksource.blueplane.jp/' , projectName! ! !Metacello methodsFor: 'api options' stamp: 'dkh 7/23/2012 16:17'! cacheRepository: aRepositoryDescription self addStatement: #'cacheRepository:' args: {aRepositoryDescription}! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:45'! className: className self addStatement: #'classNameArg:' args: {className}! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:46'! configuration: projectName self addStatement: #'configurationArg:' args: {projectName}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:48'! croquet: projectName self repository: 'http://hedgehog.software.umn.edu:8888/' , projectName! ! !Metacello methodsFor: 'private' stamp: 'dkh 7/12/2012 14:29'! execute | script | script := self statements. self statements: nil. ^ self scriptExecutor execute: script! ! !Metacello methodsFor: 'accessing' stamp: 'dkh 7/13/2012 09:12'! executorSpec executorSpec ifNil: [ executorSpec := #'MetacelloScriptApiExecutor' -> 'batch' ]. ^ executorSpec! ! !Metacello methodsFor: 'accessing' stamp: 'dkh 7/13/2012 09:13'! executorSpec: anAssoc executorSpec := anAssoc! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/23/2012 15:55'! fetch self addStatement: #'fetch:' args: #(#()). ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/23/2012 15:49'! fetch: required self addStatement: #'fetch:' args: {required}. ^ self execute! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 07/25/2013 15:21'! filetreeDirectory: directoryName self repository: 'filetree://' , directoryName! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 06/28/2013 16:52'! gemsource: projectName self repository: 'http://seaside.gemtalksystems.com/ss/' , projectName! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 5/31/2012 17:57:13'! get "resolve project name in given repository and return an instance of MetacelloProject resolved from a ConfigurationOf or BaselineOf" self addStatement: #'get' args: #(). ^ self execute! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 07/25/2013 15:26'! githubUser: userName project: projectName commitish: commitish path: path | branchOrCommitOrTag | branchOrCommitOrTag := commitish. branchOrCommitOrTag isEmpty ifTrue: [ branchOrCommitOrTag := 'master' ]. self repository: 'github://' , userName , '/' , projectName , ':' , branchOrCommitOrTag , '/' , path! ! !Metacello methodsFor: 'api options' stamp: 'dkh 6/13/2012 16:05'! ignoreImage "ignore image state" self addStatement: #'ignoreImage:' args: {true}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:48'! impara: projectName self repository: 'http://source.impara.de/' , projectName! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/13/2012 16:35'! list "list projects in registry" self addStatement: #'list' args: #(). ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/23/2012 15:56'! load self addStatement: #'load:' args: #(#()). ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 5/31/2012 17:57:13'! load: required self addStatement: #'load:' args: {required}. ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/17/2012 10:53'! lock "lock projects in registry" self addStatement: #'lock' args: #(). ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 07/25/2013 15:45'! locked "list of locked projects in registry" ^ self project: [ :projectSpec | projectSpec isLocked ]; list! ! !Metacello methodsFor: 'api options' stamp: 'dkh 6/7/2012 15:34'! onConflict: aBlock self addStatement: #'onConflict:' args: {aBlock}! ! !Metacello methodsFor: 'api options' stamp: 'dkh 6/8/2012 14:03:46'! onDowngrade: aBlock self addStatement: #'onDowngrade:' args: {aBlock}! ! !Metacello methodsFor: 'api options' stamp: 'dkh 07/24/2013 17:09'! onLock: aBlock self addStatement: #'onLock:' args: {aBlock}! ! !Metacello methodsFor: 'api options' stamp: 'dkh 6/7/2012 15:33'! onUpgrade: aBlock self addStatement: #'onUpgrade:' args: {aBlock}! ! !Metacello methodsFor: 'api options' stamp: 'dkh 07/24/2013 15:22'! onWarning: aBlock self addStatement: #'onWarning:' args: {aBlock}! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:46'! project: projectName self addStatement: #'projectArg:' args: {projectName}! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/23/2012 15:56'! record self addStatement: #'record:' args: #(#()). ^ self execute! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/19/2012 07:40'! record: required self addStatement: #'record:' args: {required}. ^ self execute! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:48'! renggli: projectName self repository: 'http://source.lukas-renggli.ch/' , projectName! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:46'! repository: repositoryDescription self addStatement: #'repositoryArg:' args: {repositoryDescription}! ! !Metacello methodsFor: 'api options' stamp: 'dkh 7/23/2012 19:27'! repositoryOverrides: aRepositoryDescriptionCollection self addStatement: #'repositoryOverrides:' args: {aRepositoryDescriptionCollection}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:49'! saltypickle: projectName self repository: 'http://squeak.saltypickle.com/' , projectName! ! !Metacello methodsFor: 'accessing' stamp: 'dkh 7/13/2012 09:16'! scriptExecutor ^ (self class scriptExecutorClass: self executorSpec) new! ! !Metacello methodsFor: 'api options' stamp: 'dkh 5/31/2012 17:57:13'! silently "no progress bars" self addStatement: #'silently:' args: {true}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 07/25/2013 15:20'! smalltalkhubUser: userName project: projectName self repository: 'http://smalltalkhub.com/mc/' , userName , '/' , projectName , '/main'! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:49'! squeakfoundation: projectName self repository: 'http://source.squeakfoundation.org/' , projectName! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 07/25/2013 15:17'! squeaksource3: projectName self repository: 'http://ss3.gemtalksystems.com/ss/' , projectName! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:50'! squeaksource: projectName self repository: 'http://www.squeaksource.com/' , projectName! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:46'! ss3: projectName self squeaksource3: projectName! ! !Metacello methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! statements statements ifNil: [ statements := OrderedCollection new ]. ^ statements! ! !Metacello methodsFor: 'accessing' stamp: 'dkh 5/31/2012 17:57:13'! statements: anObject statements := anObject! ! !Metacello methodsFor: 'api actions' stamp: 'dkh 7/17/2012 12:31'! unlock "unlock projects in registry" self addStatement: #'unlock' args: #(). ^ self execute! ! !Metacello methodsFor: 'api projectSpec' stamp: 'dkh 7/12/2012 13:46'! version: versionString self addStatement: #'versionArg:' args: {versionString}! ! !Metacello methodsFor: 'api repository shortcuts' stamp: 'dkh 7/17/2012 16:50'! wiresong: projectName self repository: 'http://source.wiresong.ca/' , projectName! ! !MetacelloProject class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26030050! new | inst | inst := self basicNew. ^inst configuration: inst; yourself! ! !MetacelloProject class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26030215! on: aConfig ^self basicNew configuration: aConfig; yourself! ! !MetacelloProject class methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! versionConstructorClass ^ MetacelloVersionConstructor! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028335! attributes ^(OrderedCollection with: #common) addAll: self platformAttributes; yourself ! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24'! baselineOfProjectSpec ^ self baselineOfProjectSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24'! baselineOfProjectSpecClass ^ self subclassResponsibility! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24'! baselineOfVersionSpecClass ^ self subclassResponsibility! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021571! bleedingEdge ^self version: #bleedingEdge! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017374! configuration ^ configuration! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017480! configuration: anObject configuration := anObject! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24'! configurationOfProjectSpec ^ self configurationOfProjectSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24'! configurationOfProjectSpecClass ^ self subclassResponsibility! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021689! currentVersion | cacheKey cv | cacheKey := self configuration class. ^ MetacelloPlatform current stackCacheFor: #currentVersion at: cacheKey doing: [ :cache | cv := self currentVersionAgainst: nil. ^ cache at: cacheKey put: cv ]! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26022009! currentVersionAgainst: resolvedPackageAndProjectNames | cacheKey | cacheKey := resolvedPackageAndProjectNames isNil ifTrue: [ Array with: self configuration class with: nil ] ifFalse: [ Array with: self configuration class with: (resolvedPackageAndProjectNames sort: [ :a :b | a <= b ]) ]. ^ MetacelloPlatform current stackCacheFor: #currentVersionAgainst: at: cacheKey doing: [ :cache | | cv versions latestSomethingLoaded | cv := nil. versions := self sortedAndFilteredVersions. versions do: [ :version | | status matchBlock | status := resolvedPackageAndProjectNames isNil ifTrue: [ version spec isPartiallyCurrent ] ifFalse: [ version spec isPartiallyCurrentAgainst: resolvedPackageAndProjectNames ]. matchBlock := [ :matchStatus | cv := version copy. cv versionStatus: matchStatus. ^ cache at: cacheKey put: cv ]. status isAllLoadedToSpec: matchBlock. status isLoadedToSpec: matchBlock. status isLoadedMatchConstraints: matchBlock. status isSomethingLoaded: [ :matchStatus | latestSomethingLoaded isNil ifTrue: [ cv := version copy. cv versionStatus: matchStatus. latestSomethingLoaded := cv ] ] ]. latestSomethingLoaded ifNotNil: [ ^ cache at: cacheKey put: latestSomethingLoaded ]. ^ cache at: cacheKey put: nil ]! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017607! defaultBlessing ^#release! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019366! defaultLoaderClass ^MetacelloSpecLoader! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028504! defaultPlatformAttributes ^ MetacelloPlatform current defaultPlatformAttributes! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26023464! development ^self version: #development! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! errorMap ^ errorMap! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! errorMap: anObject errorMap ifNil: [ errorMap := Dictionary new ]. errorMap := anObject! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028660! excludeFromLatestVersion ^#(structural development broken baseline) ! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019487! groupSpec ^self groupSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019609! groupSpecClass ^MetacelloGroupSpec! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26023591! hasVersion: versionString self version: versionString ifAbsent: [ ^false ]. ^true! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017711! label ^self configuration class name! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26023761! lastVersion | coll | coll := (self map values asArray sort: [:a :b | a <= b ]) asOrderedCollection. coll isEmpty ifTrue: [ ^nil ]. ^coll last! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26023992! latestVersion | excluded | " self deprecated: 'Please use #stableVersion instead.'. " self flag: 'deprecate after version 1.0'. excluded := self excludeFromLatestVersion. ^(self map values select: [:version | (excluded includes: version blessing) not ]) detectMax: [:version | version ]! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26024362! latestVersion: blessing ^(self map values select: [:version | blessing = version blessing ]) detectMax: [:version | version ]! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26024564! latestVersionMatching: versionPatternString "Answer whether the version number of the receiver matches the given pattern string. A Metacello version number is made up of version sequences delimited by the characters $. and $-. The $. introduces a numeric version sequence and $- introduces an alphanumeric version sequence. A version pattern is made up of version pattern match sequences. also delimited by the characters $. and $-.. Each pattern match sequence is tested against the corresponding version sequence of the receiver, using the 'standard' pattern matching rules. All sequences must answer true for a match. The special pattern sequence '?' is a match for the corresponding version sequence and all subsequent version sequences. '?' as the version pattern matches all versions. No more version pattern sequences are permitted once the '?' sequence is used. If used, it is the last version pattern sequence." ^self latestVersionMatching: versionPatternString includedBlessings: #() excludedBlessings: self excludeFromLatestVersion ! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26025723! latestVersionMatching: versionPatternString excludedBlessings: excluded ^self latestVersionMatching: versionPatternString includedBlessings: #() excludedBlessings: excluded ! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26025983! latestVersionMatching: versionPatternString includedBlessings: included ^self latestVersionMatching: versionPatternString includedBlessings: included excludedBlessings: self excludeFromLatestVersion ! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26026269! latestVersionMatching: versionPatternString includedBlessings: included excludedBlessings: excludedBlessings | excluded | excluded := excludedBlessings asSet copy. excluded removeAllFoundIn: included. ^(self map values select: [:version | (included isEmpty or: [ included includes: version blessing ]) and: [ (excluded includes: version blessing) not and: [ version versionNumber match: versionPatternString ]]]) detectMax: [:version | version ]! ! !MetacelloProject methodsFor: 'loading' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018767! load: aVersionString ^(self version: aVersionString) load ! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017826! loadType "#atomic or #linear" loadType == nil ifTrue: [ ^#atomic ]. ^loadType! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26017984! loadType: aSymbol "#atomic or #linear" loadType := aSymbol! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019725! loader ^loader! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019821! loader: aLoader loader := aLoader! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26019935! loaderClass loaderClass == nil ifTrue: [ loaderClass := self defaultLoaderClass ]. ^loaderClass! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020112! loaderClass: aMetacelloSpecLoader loaderClass := aMetacelloSpecLoader! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24'! lookupVersion: aVersionString ifAbsent: aBlock "please use version:...this is a private method" ^ self map at: aVersionString ifAbsent: [ (MetacelloVersionDefinitionError project: self project versionString: aVersionString) exception: (self errorMap at: aVersionString ifAbsent: [ ^ aBlock value ]); signal ]! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018122! map versionMap ifNil: [ ^ Dictionary new ]. ^ versionMap! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018257! map: aDictionary versionMap := aDictionary! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020263! packagesSpec ^self packagesSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020391! packagesSpecClass ^MetacelloPackagesSpec! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028794! platformAttributes ^self projectPlatformAttributes! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028922! pragmaKeywords ^#(version:attribute: blessing:attribute: description:attribute: required:attribute: groups:attribute: doits:attribute:)! ! !MetacelloProject methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018913! printOn: aStream | label | self configuration class printOn: aStream. aStream nextPut: $(. self versions do: [ :vrsn | aStream nextPutAll: vrsn versionString. vrsn spec ~~ nil ifTrue: [ (label := vrsn spec projectLabel) isEmpty ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ]. aStream nextPut: $,; space ]. aStream nextPut: $)! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018377! project ^self! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26029133! projectAttributes projectAttributes ~~ nil ifTrue: [ ^projectAttributes ]. ^#()! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26029289! projectAttributes: aList projectAttributes := aList! ! !MetacelloProject methodsFor: 'scripting' stamp: 'dkh 6/5/2012 19:01:24'! projectForScriptEngine: aMetacelloScriptEngine ^ self projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: false! ! !MetacelloProject methodsFor: 'scripting' stamp: 'dkh 6/5/2012 19:01:24'! projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool ^ self subclassResponsibility! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26029416! projectPlatformAttributes | list aBlock | list := OrderedCollection new. (aBlock := self projectAttributes) ~~ nil ifTrue: [ list addAll: aBlock value ]. ^self defaultPlatformAttributes, list! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020513! projectReferenceSpec ^self projectReferenceSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020657! projectReferenceSpecClass ^MetacelloProjectReferenceSpec! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020796! projectSpec ^self projectSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26020932! projectSpecClass ^ MetacelloProjectSpec! ! !MetacelloProject methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26029700! sortedAndFilteredVersions ^(self map values asArray sort: [:a :b | a >= b ]) select: [:vrsn | (#(structural broken baseline) includes: vrsn blessing) not ]. ! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26026817! stableVersion ^self version: #stable! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018478! symbolicVersionMap ^symbolicVersionMap ! ! !MetacelloProject methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26018614! symbolicVersionMap: aDictionary symbolicVersionMap := aDictionary ! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26026941! symbolicVersionSymbols ^self symbolicVersionMap keys asArray sort: [:a :b | a <= b ]! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021058! valueHolderSpec ^self valueHolderSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021191! valueHolderSpecClass ^MetacelloValueHolderSpec! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26027113! version: aVersionString | vrsn | aVersionString isSymbol ifTrue: [ | symbolicVersionString | symbolicVersionString := self symbolicVersionMap at: aVersionString ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ]. symbolicVersionString == #'notDefined' ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ]. ^ self lookupVersion: symbolicVersionString ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ]. ^ self lookupVersion: aVersionString ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26027972! version: aVersionString ifAbsent: aBlock ^[ self version: aVersionString ] on: MetacelloVersionDoesNotExistError do: [:ex | aBlock value ].! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/22/2012 12:41'! versionNumberClass versionNumberClass ifNil: [ versionNumberClass := MetacelloVersionNumber ]. ^ versionNumberClass! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/22/2012 12:41'! versionNumberClass: aClass versionNumberClass := aClass! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021320! versionSpec ^self versionSpecClass for: self! ! !MetacelloProject methodsFor: 'spec classes' stamp: 'dkh 6/5/2012 19:01:24' prior: 26021445! versionSpecClass ^MetacelloVersionSpec! ! !MetacelloProject methodsFor: 'versions' stamp: 'dkh 6/5/2012 19:01:24' prior: 26028199! versions ^self map values asArray sort: [:a :b | a <= b ]! ! !MetacelloProjectRefTutorialConfig class methodsFor: 'private' stamp: 'dkh 3/18/2011 14:15:41'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !MetacelloProjectRefTutorialConfig class methodsFor: 'private' stamp: 'dkh 3/18/2011 14:15:41'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.15" self bootstrapPackage: 'Gofer-lr.83' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !MetacelloProjectRefTutorialConfig class methodsFor: 'metacello tool support' stamp: 'dkh 3/18/2011 14:15:41'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !MetacelloProjectRefTutorialConfig class methodsFor: 'accessing' stamp: 'dkh 3/18/2011 14:15:41'! project ^self new project! ! !MetacelloProjectRefTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline07: spec spec for: #common do: [spec blessing: #baseline. spec repository: 'http://www.example.com/Project'. spec package: 'Project-Core' with: [ spec requires: 'Example-Core' ]; package: 'Project-Tests' with: [ spec requires: #('Project-Core' 'Example-Tests' )]; package: 'Example-Core' with: [ spec repository: 'http://www.example.com/Example']; package: 'Example-Tests' with: [ spec requires: 'Example-Core'; repository: 'http://www.example.com/Example']; package: 'Example-AddOn' with: [ spec requires: 'Example-Core'; repository: 'http://www.example.com/Example']]! ! !MetacelloProjectRefTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Project'. spec project: 'Example ALL' with: [ spec className: 'MetacelloTutorialConfig'; versionString: '1.0'; loads: #('ALL' ); file: 'MetacelloTutorialConfig'; repository: 'http://seaside.gemstone.com/ss/metacello' ]. spec package: 'Project-Core' with: [ spec requires: 'Example ALL' ]; package: 'Project-Tests' with: [ spec requires: 'Project-Core' ].]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline11: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Project'. spec project: 'Example Default' with: [ spec className: 'MetacelloTutorialConfig'; versionString: '1.1'; loads: #('default' ); file: 'Metacello-Tutorial'; repository: 'http://seaside.gemstone.com/ss/metacello' ]; project: 'Example Tests' with: [ spec className: 'MetacelloTutorialConfig'; versionString: '1.1'; loads: #('Tests' ); file: 'Metacello-Tutorial'; repository: 'http://seaside.gemstone.com/ss/metacello' ]. spec package: 'Project-Core' with: [ spec requires: 'Example Default' ]; package: 'Project-Tests' with: [ spec requires: #('Project-Core' 'Example Tests' ).].]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline12: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Project'. spec project: 'Example Default' with: [ spec className: 'MetacelloTutorialConfig'; versionString: '1.2'; loads: #('default' ); file: 'Metacello-Tutorial'; repository: 'http://seaside.gemstone.com/ss/metacello' ]; project: 'Example Tests' copyFrom: 'Example Default' with: [ spec loads: #('Tests' ).]. spec package: 'Project-Core' with: [ spec requires: 'Example Default' ]; package: 'Project-Tests' with: [ spec requires: #('Project-Core' 'Example Tests' ).].]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline14: spec spec for: #common do: [ spec description: 'Add groups and Project-Extra, extending 1.2-baseline'. spec package: 'Project-Core' with: [ spec includes: 'Project-Extra' ]; package: 'Project-Extra' with: [ spec requires: 'Project-Core' ]. spec group: 'default' with: #('Project-Core' 'Project-Extra' ); group: 'Core' with: #('default' ); group: 'Tests' with: #('Project-Tests' ).]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson07 " [ see method: #baseline07: #version07: ] NOTE: you should run through the lessons in MetacellTutorialConfig first. In this configuration we are defining a project that utilizes the packages from the Example project (MetacelloTutorialConfig): 'Example-Core', 'Example-AddOn', 'Example-Tests' and 2 packages specific to the project: 'Project-Core' and 'Project-Tests': (MetacelloProjectRefTutorialConfig project version: '0.7') load. "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson10 " [ see method: #baseline10: #version10: ] In lesson07 it was obvious that we copied the configuration information from MetacelloTutorialConfig and adapted it to our project. There is a better way. In #baseline10: we've created a project reference for the Example project. The #className: specifies the name of the class that contains the project metadata. If the class is not present in the image, then we know that we need to load the configuration for the project. The #file: and #repository: specifications give us the information needed to load the project metadata from a repository. Finally, the #versionString: and #loads: tell us which version of the project to load and which packages to load from the project. We've named the project reference 'Example ALL' and in the specification for the 'Project-Core' package, we've specified that 'Example ALL' is required: (MetacelloProjectRefTutorialConfig project version: '1.0') load. Note that the entire Example project is loaded before 'Project-Core' "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11 " [ see method: #baseline11: #version11: ] As is often the case, it is useful to separate the test package from the core packages for a project. In #baseline11: we've created two project references. The reference named 'Example Default' loads the 'default' group and the reference named 'Example Tests' loads the 'Tests' group. We then made 'Project-Core' require 'Example Default' and 'Project-Tests' requires 'Project-Core' and 'Example Tests'. Now it is possible to load just the core packages: (MetacelloProjectRefTutorialConfig project version: '1.1') load: 'Project-Core'. or the whole enchilada including tests: (MetacelloProjectRefTutorialConfig project version: '1.1') load: 'Project-Tests'. "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson12 " [ see method: #baseline11: #baseline12: #version12: ] In #baseline11: there is redundant information for each of the project references. In #baseline12: we use the #project:copyFrom:with: method to eliminate the need to specify the bulk of the project information twice. Evaluate and compare the results of the following expressions: (MetacelloProjectRefTutorialConfig project version: '1.1') load: 'Project-Core'. (MetacelloProjectRefTutorialConfig project version: '1.2') load: 'Project-Core'. (MetacelloProjectRefTutorialConfig project version: '1.1') load: 'Project-Tests'. (MetacelloProjectRefTutorialConfig project version: '1.2') load: 'Project-Tests'. "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson13 " [ see method: #version13: ] In #version13: we are importing the '1.2-baseline', but changing the Example project version to 1.3, so project versions can be updated in the verson method jus like package versions. Evaluate and compare the results of these expressions: (MetacelloProjectRefTutorialConfig project version: '1.2') load: 'Project-Core'. (MetacelloProjectRefTutorialConfig project version: '1.3') load: 'Project-Core'. (MetacelloProjectRefTutorialConfig project version: '1.2') load: 'Project-Tests'. (MetacelloProjectRefTutorialConfig project version: '1.3') load: 'Project-Tests'. It is worth noting that in version 1.3 of the Example project, the platform-specific 'Example-Platform' was introduced and nothing special had to be done in the project reference to get the package included. "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson14 " [ see method: #baseline14: #version14: ] In this lesson we'll cover the querying API for Metacello. The querying API is useful for analyzing the contents and structure of a version. To start with we'll look at version '1.4' of the MetacelloProjectRefTutorialConfig. You can list the packages in the version: (MetacelloProjectRefTutorialConfig project version: '1.4') packages The list project references: (MetacelloProjectRefTutorialConfig project version: '1.4') projects And the groups: (MetacelloProjectRefTutorialConfig project version: '1.4') groups You can access individual packages/project refs/groups using the #packageNamed: method. Here you can access the package named: 'Project-Core': (MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Project-Core' The project reference named 'Example Default': (MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Example Default' The group named 'Core': (MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Core' Each of the attributes of the package can be accessed (#requires, #includes, #file, #repository, #preLoadDoIt, and #postLoadDoit). For example: ((MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Project-Core') requires Each of the attributes of the project can be accessed (#className, #versionString, #operator, #loads, #file, and #repository). For example: ((MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Example Default') repository Each of the attributes of the group can be accessed (#includes). For example: ((MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'default') includes When looking at the 'Core' group, there is only one package listed: (MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Core' In the case of the 'Core' group, it is defined in terms of the 'default', which isn't very useful. When looking at the contents of groups you'd like to see the complete list of packages, without having to explicitly expanding each group you encounter. #packagesForSpecNamed: does just that: (MetacelloProjectRefTutorialConfig project version: '1.4') packagesForSpecNamed: 'Core' If you were to load the 'Core' package: (MetacelloProjectRefTutorialConfig project version: '1.4') load: 'Core' You end up seeing the packages from the Example project. If you want to get the list of packages that _would_ be loaded, you can use #allPackagesForSpecNamed:. For example: (MetacelloProjectRefTutorialConfig project version: '1.4') allPackagesForSpecNamed: 'Core' If you use #allPackagesForSpecNamed: with a project refernce name, you'll see the packages that _would_ be loaded: (MetacelloProjectRefTutorialConfig project version: '1.4') load: 'Example Default' (MetacelloProjectRefTutorialConfig project version: '1.4') allPackagesForSpecNamed: 'Example Default' You can also send #version to a project reference. This is useful if you want to explicitly walk the tree of projects: ((MetacelloProjectRefTutorialConfig project version: '1.4') packageNamed: 'Example Default') version "! ! !MetacelloProjectRefTutorialConfig methodsFor: 'accessing' stamp: 'dkh 3/18/2011 14:15:41'! project "NOTE: The MetacelloNullRecordingMCSpecLoader is being used to prevent packages from being loaded, see MetacelloConfigTemplate>>project for an example #project method that loads the package for real" ^ project ifNil: [ | constructor loader | "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. loader := MetacelloNullRecordingMCSpecLoader new. loader evalDoits: true. project loader: loader. project ]! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version07: spec spec for: #common do: [ spec blessing: #release. spec package: 'Project-Core' with: 'Project-Core-anon.1'; package: 'Project-Tests' with: 'Project-Tests-anon.1'; package: 'Example-Core' with: 'Example-Core-anon.12'; package: 'Example-Tests' with: 'Example-Tests-anon.3'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1'.]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version10: spec spec for: #common do: [ spec blessing: #beta. spec package: 'Project-Core' with: 'Project-Core-anon.1'; package: 'Project-Tests' with: 'Project-Tests-anon.1'.]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version11: spec spec for: #common do: [ spec blessing: #beta. spec package: 'Project-Core' with: 'Project-Core-anon.1'; package: 'Project-Tests' with: 'Project-Tests-anon.1'.]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version12: spec spec for: #common do: [ spec blessing: #beta. spec package: 'Project-Core' with: 'Project-Core-anon.1'; package: 'Project-Tests' with: 'Project-Tests-anon.1'.]. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version13: spec spec for: #common do: [ spec blessing: #beta. spec description: 'Import functionality from the example project, different packages'. spec package: 'Project-Core' with: 'Project-Core-anon.1'; package: 'Project-Tests' with: 'Project-Tests-anon.1'; project: 'Example Default' with: '1.3'; project: 'Example Tests' with: '1.3']. ! ! !MetacelloProjectRefTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version14: spec spec for: #common do: [ spec blessing: #beta. spec description: 'Add groups and Project-Extra'. spec project: 'Example Default' with: '1.3'; project: 'Example Tests' with: '1.3'. spec package: 'Project-Core' with: 'Project-Core-anon.2'; package: 'Project-Tests' with: 'Project-Tests-anon.2'; package: 'Project-Extra' with: 'Project-Extra-anon.1'.]. ! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 6/13/2012 13:18'! baselineClasses "Return a set of the Metacello baseline classes that have been loaded into the image." "self baselineClasses" ^ BaselineOf allSubclasses! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:18'! baselineProjectSpecs "MetacelloProjectRegistration baselineProjectSpecs" ^ self registry baselineProjectSpecs! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 6/13/2012 13:37'! configurationClasses "Return a set of the Metacello configuration classes that have been loaded into the image." "self configurationClasses" | answer | answer := IdentitySet new. ConfigurationOf allSubclasses do: [ :cl | (cl == BaselineOf or: [ cl inheritsFrom: BaselineOf ]) ifFalse: [ answer add: cl ] ]. Object allSubclasses do: [ :cl | (answer includes: cl) ifFalse: [ (([ cl isMetacelloConfig ] on: Error do: [ :ex | ex return: false ]) and: [ cl name asString beginsWith: 'ConfigurationOf' ]) ifTrue: [ answer add: cl ] ] ]. ^ answer! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:47'! configurationProjectSpecs "MetacelloProjectRegistration configurationProjectSpecs" ^ self registry configurationProjectSpecs! ! !MetacelloProjectRegistration class methodsFor: 'mutability' stamp: 'dkh 7/20/2012 11:37'! copyRegistryRestoreOnErrorWhile: aBlock "install copy of registry for duration of execution." "registrations will be copied on write during execution." "if does not return control to this context, revert to the original version of the registry. Otherwise leave the new copy installed." | oldRegistry newRegistry | oldRegistry := self registry. newRegistry := self registry copy. self registry: newRegistry. aBlock ensure: [ "install old version of registry" self registry: oldRegistry ]. self registry: newRegistry "if control returned, install newRegistry"! ! !MetacelloProjectRegistration class methodsFor: 'mutability' stamp: 'dkh 7/20/2012 11:37'! copyRegistryWhile: aBlock "install copy of registry for duration of execution." "registrations will be copied on write during execution." "Unconditionally revert to the original version of the registry. Otherwise leave the new copy installed." | oldRegistry newRegistry | oldRegistry := self registry. newRegistry := self registry copy. self registry: newRegistry. aBlock ensure: [ "install old version of registry" self registry: oldRegistry ]! ! !MetacelloProjectRegistration class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24'! fromMCBaselineProjectSpec: aProjectSpec ^ self new projectName: aProjectSpec name; baselineProjectSpec: aProjectSpec; yourself! ! !MetacelloProjectRegistration class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24'! fromMCConfigurationProjectSpec: aProjectSpec ^ self new projectName: aProjectSpec name; configurationProjectSpec: aProjectSpec; yourself! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:51'! primeRegistryFromImage "MetacelloProjectRegistration primeRegistryFromImage" self registry primeRegistryFromImage! ! !MetacelloProjectRegistration class methodsFor: 'querying' stamp: 'dkh 7/19/2012 11:34'! projectSpecForClassNamed: aClassName ifAbsent: absentBlock ^ self registry projectSpecForClassNamed: aClassName ifAbsent: absentBlock! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/14/2012 07:47'! projectSpecs "MetacelloProjectRegistration projectSpecs" ^ self configurationProjectSpecs , self baselineProjectSpecs! ! !MetacelloProjectRegistration class methodsFor: 'registration' stamp: 'dkh 7/19/2012 21:33'! registerProjectSpec: aProjectSpec ifPresent: presentBlock | newRegistration | newRegistration := aProjectSpec asProjectRegistration. ^ self registry registrationFor: newRegistration ifPresent: [ :existing | presentBlock value: existing value: newRegistration ] ifAbsent: [ newRegistration registerProject ]! ! !MetacelloProjectRegistration class methodsFor: 'querying' stamp: 'dkh 7/19/2012 12:47'! registrationForClassNamed: aClassName ifAbsent: absentBlock ^ self registry registrationForClassNamed: aClassName ifAbsent: absentBlock! ! !MetacelloProjectRegistration class methodsFor: 'querying' stamp: 'dkh 7/19/2012 12:01'! registrationForProjectSpec: aProjectSpec ifAbsent: absentBlock ifPresent: presentBlock | newRegistration | newRegistration := aProjectSpec asProjectRegistration. self registry registrationFor: newRegistration ifPresent: [ :existing | ^ presentBlock value: existing value: newRegistration ] ifAbsent: [ ^ absentBlock value: newRegistration ]! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:17'! registry Registry ifNil: [ Registry := MetacelloProjectRegistry new ]. ^ Registry! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:17'! registry: aMetacelloProjectRegistry Registry := aMetacelloProjectRegistry! ! !MetacelloProjectRegistration class methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:52'! resetRegistry Registry := nil! ! !MetacelloProjectRegistration methodsFor: 'comparision' stamp: 'dkh 6/5/2012 19:01:24'! = aRegistration aRegistration class == self class ifFalse: [ ^ false ]. ^ (configurationProjectSpec registrationsCompareEqual: aRegistration configurationProjectSpec) and: [ baselineProjectSpec registrationsCompareEqual: aRegistration baselineProjectSpec ]! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/7/2012 17:37'! baseName ^ MetacelloScriptEngine baseNameOf: (configurationProjectSpec ifNil: [ baselineProjectSpec ]) className! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/26/2013 15:55'! baselineProjectSpec "only one of baselineProjectSpec or configurationProjectSpec should ever be set" ^ baselineProjectSpec! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/26/2013 16:01'! baselineProjectSpec: anObject "only one of baselineProjectSpec or configurationProjectSpec should ever be set" self shouldBeMutable. baselineProjectSpec := anObject! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! baselineProjectSpecIfAbsent: absentBlock ^ baselineProjectSpec ifNil: absentBlock! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/24/2012 17:49'! baselineProjectSpecIfPresent: presentBlock ifAbsent: absentBlock ^ baselineProjectSpec ifNotNil: [ presentBlock cull: baselineProjectSpec ] ifNil: absentBlock ! ! !MetacelloProjectRegistration methodsFor: 'testing' stamp: 'dkh 7/18/2012 11:39'! canDowngradeTo: aProjectRegistration "true if there are no load conflicts OR if the load conflicts involved two cofigurations ONLY and a downgrade is allowed" (self hasLoadConflicts: aProjectRegistration) ifFalse: [ ^ true ]. configurationProjectSpec ifNotNil: [ aProjectRegistration configurationProjectSpec ifNotNil: [ configurationProjectSpec ensureProjectLoaded. ^ configurationProjectSpec canDowngradeTo: aProjectRegistration configurationProjectSpec ] ]. ^ false! ! !MetacelloProjectRegistration methodsFor: 'testing' stamp: 'dkh 7/19/2012 21:03'! canUpgradeTo: aProjectRegistration "true if there are no load conflicts OR if the load conflicts involved two cofigurations ONLY and an upgrade is allowed" (self hasLoadConflicts: aProjectRegistration) ifFalse: [ ^ true ]. configurationProjectSpec ifNotNil: [ aProjectRegistration configurationProjectSpec ifNotNil: [ configurationProjectSpec copy ensureProjectLoaded. ^ configurationProjectSpec canUpgradeTo: aProjectRegistration configurationProjectSpec ] ]. ^ false! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/26/2013 16:01'! configurationProjectSpec "only one of baselineProjectSpec or configurationProjectSpec should ever be set" ^ configurationProjectSpec! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/26/2013 16:01'! configurationProjectSpec: anObject "only one of baselineProjectSpec or configurationProjectSpec should ever be set" self shouldBeMutable. configurationProjectSpec := anObject! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! configurationProjectSpecIfAbsent: absentBlock ^ configurationProjectSpec ifNil: absentBlock! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/24/2012 17:38'! configurationProjectSpecIfPresent: presentBlock ifAbsent: absentBlock ^ configurationProjectSpec ifNotNil: [ presentBlock cull: configurationProjectSpec ] ifNil: absentBlock! ! !MetacelloProjectRegistration methodsFor: 'mutability' stamp: 'dkh 7/19/2012 16:45'! copyOnWrite: aBlock "assume that only registered projects are immutable ... otherwise you'll get an error" | copy | self class registry registrationFor: self ifPresent: [ :existing | ] ifAbsent: [ aBlock value: self. ^ self ]. self unregisterProject. copy := self copy. aBlock value: copy. copy registerProject. ^ copy! ! !MetacelloProjectRegistration methodsFor: 'querying' stamp: 'dkh 6/24/2012 13:57'! currentlyLoadedClassesInProject | classes | classes := Set new. self configurationProjectSpecIfPresent: [ :spec | classes addAll: spec currentlyLoadedClassesInVersion ] ifAbsent: [ ]. self baselineProjectSpecIfPresent: [ :spec | classes addAll: spec currentlyLoadedClassesInVersion ] ifAbsent: [ ]. ^ classes! ! !MetacelloProjectRegistration methodsFor: 'testing' stamp: 'dkh 07/28/2013 08:07'! hasLoadConflicts: aProjectRegistration "5 combinations of loads with no load conflicts: No configs and baselines = configs = and no baselines configs = and baselines = configs = and no baseline loaded (self) with a baseline to load (aProjectRegistration) config loaded (self), no config to load (aProjectRegistration) and no baseline loaded(self) with a baseline to load (aProjectRegistration) " self isValid ifFalse: [ self error: 'Invalid projectRegistration: ' , self printString ]. aProjectRegistration isValid ifFalse: [ self error: 'Invalid projectRegistration: ' , aProjectRegistration printString ]. configurationProjectSpec ifNil: [ aProjectRegistration configurationProjectSpec notNil ifTrue: [ ^ baselineProjectSpec hasConflictWithConfiguration: aProjectRegistration configurationProjectSpec ] ] ifNotNil: [ aProjectRegistration configurationProjectSpec ifNotNil: [ (aProjectRegistration configurationProjectSpec hasLoadConflicts: configurationProjectSpec) ifTrue: [ ^ true ] ] ]. ^ baselineProjectSpec ifNil: [ ^ configurationProjectSpec hasConflictWithBaseline: aProjectRegistration baselineProjectSpec ] ifNotNil: [ baselineProjectSpec hasLoadConflicts: aProjectRegistration baselineProjectSpec ]! ! !MetacelloProjectRegistration methodsFor: 'comparision' stamp: 'dkh 6/5/2012 19:01:24'! hash ^ ((String stringHash: projectName initialHash: 0) bitXor: configurationProjectSpec metacelloRegistrationHash) bitXor: baselineProjectSpec metacelloRegistrationHash! ! !MetacelloProjectRegistration methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:11'! immutable mutable := false! ! !MetacelloProjectRegistration methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:11'! isMutable mutable ifNil: [ ^ true ]. ^ mutable! ! !MetacelloProjectRegistration methodsFor: 'testing' stamp: 'dkh 07/26/2013 16:05'! isValid " has a name and one or the other of the projectSpecs is non-nil" "only one of baselineProjectSpec or configurationProjectSpec should ever be set" projectName ifNil: [ ^ false ]. ^ (configurationProjectSpec notNil and: [ baselineProjectSpec isNil ]) or: [ baselineProjectSpec notNil and: [ configurationProjectSpec isNil ] ]! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 7/16/2012 12:23'! loadedInImage loadedInImage ifNil: [ loadedInImage := false ]. ^ loadedInImage! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03'! loadedInImage: anObject self shouldBeMutable. loadedInImage := anObject! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 7/17/2012 12:36'! locked locked ifNil: [ locked := false ]. ^ locked! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03'! locked: anObject self shouldBeMutable. locked := anObject! ! !MetacelloProjectRegistration methodsFor: 'lookup' stamp: 'dkh 7/19/2012 20:58'! lookupBaselineSpec baselineProjectSpec ifNotNil: [ :spec | ^ spec ]. ^ configurationProjectSpec! ! !MetacelloProjectRegistration methodsFor: 'lookup' stamp: 'dkh 7/19/2012 20:58'! lookupConfigurationSpec configurationProjectSpec ifNotNil: [ :spec | ^ spec ]. ^ baselineProjectSpec! ! !MetacelloProjectRegistration methodsFor: 'lookup' stamp: 'dkh 05/10/2013 08:28'! lookupSpec: aProjectSpec self configurationProjectSpec ifNotNil: [ :spec | spec className = aProjectSpec className ifTrue: [ ^ spec ] ]. self baselineProjectSpec ifNotNil: [ :spec | spec className = aProjectSpec className ifTrue: [ ^ spec ] ]. ^ nil! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/26/2013 16:42'! merge: aProjectRegistration " ... merge is done when a spec has been loaded into the image" "only one of baselineProjectSpec or configurationProjectSpec should ever be set" self shouldBeMutable. (self isValid and: [ aProjectRegistration isValid ]) ifFalse: [ self error: 'Invalid registrations' ]. aProjectRegistration configurationProjectSpec ifNotNil: [ "use aProjectRegistration's configurationProjectSpec and nil my baselineProjectSpec" configurationProjectSpec := aProjectRegistration configurationProjectSpec. baselineProjectSpec := nil. ^ self ]. aProjectRegistration baselineProjectSpec ifNotNil: [ "use aProjectRegistration's baselineProjectSpec and nil my configurationProjectSpec" configurationProjectSpec := nil. baselineProjectSpec := aProjectRegistration baselineProjectSpec ]! ! !MetacelloProjectRegistration methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:11'! mutable mutable := true! ! !MetacelloProjectRegistration methodsFor: 'copying' stamp: 'dkh 7/19/2012 15:12'! postCopy super postCopy. mutable := nil! ! !MetacelloProjectRegistration methodsFor: 'printing' stamp: 'dkh 6/30/2012 14:24'! printOn: aStream | label versionString descriptions | self configurationProjectSpecIfPresent: [ :spec | label := spec className. versionString := spec versionString ] ifAbsent: [ "baseline" label := self baselineProjectSpec className. versionString := '[baseline]' ]. aStream nextPutAll: label; space; nextPutAll: versionString. (descriptions := self repositoryDescriptions) isEmpty ifTrue: [ ^ self ]. aStream nextPutAll: ' from '. descriptions size = 1 ifTrue: [ aStream nextPutAll: descriptions first ] ifFalse: [ aStream nextPut: ${. descriptions do: [ :description | aStream nextPutAll: description ]. aStream nextPut: $} ]! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectName ^ projectName! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 7/19/2012 16:03'! projectName: anObject self shouldBeMutable. projectName := anObject! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 07/29/2013 10:30'! projectSpec ^ self configurationProjectSpecIfPresent: [ :spec | spec ] ifAbsent: [ self baselineProjectSpec ]! ! !MetacelloProjectRegistration methodsFor: 'registration' stamp: 'dkh 7/19/2012 11:25'! registerProject "unconditionally register ... use with care" self class registry registerProjectRegistration: self! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/30/2012 14:25'! repositoryDescriptions ^ (self configurationProjectSpecIfAbsent: [ self baselineProjectSpec ]) repositoryDescriptions! ! !MetacelloProjectRegistration methodsFor: 'mutability' stamp: 'dkh 7/19/2012 16:06'! shouldBeMutable self isMutable ifTrue: [ ^ self ]. self error: 'Not allowed to modify an immutable object'! ! !MetacelloProjectRegistration methodsFor: 'registration' stamp: 'dkh 7/19/2012 11:33'! unregisterProject self class registry unregisterProjectRegistration: self! ! !MetacelloProjectRegistration methodsFor: 'accessing' stamp: 'dkh 6/13/2012 13:52'! version ^ (self configurationProjectSpecIfAbsent: [ ^ MetacelloMCBaselineProject singletonVersionName ]) versionString! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:09'! baselineProjectSpecs "MetacelloProjectRegistration baselineProjectSpecs" | projectSpecs | projectSpecs := OrderedCollection new. self baselineRegistry keysAndValuesDo: [ :className :registration | projectSpecs add: (self projectSpecForClassNamed: className ifAbsent: [ self error: 'not expected' ]) ]. ^ projectSpecs asArray! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:11'! baselineRegistry baselineRegistry ifNil: [ baselineRegistry := Dictionary new ]. ^ baselineRegistry! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 7/19/2012 12:11'! configurationProjectSpecs "MetacelloProjectRegistration configurationProjectSpecs" | projectSpecs | projectSpecs := OrderedCollection new. self configurationRegistry keysAndValuesDo: [ :className :registration | projectSpecs add: (self projectSpecForClassNamed: className ifAbsent: [ self error: 'not expected' ]) ]. ^ projectSpecs asArray! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:13'! configurationRegistry configurationRegistry ifNil: [ configurationRegistry := Dictionary new ]. ^ configurationRegistry! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 05/10/2013 16:42'! isEmpty ^ self configurationProjectSpecs isEmpty and: [ self baselineProjectSpecs isEmpty ]! ! !MetacelloProjectRegistry methodsFor: 'copying' stamp: 'dkh 7/20/2012 11:13'! postCopy super postCopy. baselineRegistry := self baselineRegistry copy. configurationRegistry := self configurationRegistry copy! ! !MetacelloProjectRegistry methodsFor: 'initialization' stamp: 'dkh 07/27/2013 08:36'! primeRegisterLoadedProjectSpec: projectSpec MetacelloProjectRegistration registrationForProjectSpec: projectSpec ifAbsent: [ :new | new loadedInImage: true; registerProject ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | existingCopy loadedInImage: true. existing locked ifFalse: [ "lock takes precedence when priming from image" existingCopy merge: new ] ] ]! ! !MetacelloProjectRegistry methodsFor: 'initialization' stamp: 'dkh 07/29/2013 16:58'! primeRegistryCurrentVersionFor: cl ^ [ cl project currentVersion ] on: Error do: [ :ex | Warning signal: 'Error finding current version of ' , cl name asString , '. Probably an invalid specification.'. nil ]! ! !MetacelloProjectRegistry methodsFor: 'initialization' stamp: 'dkh 07/26/2013 07:16'! primeRegistryFromImage "MetacelloProjectRegistration primeRegistryFromImage" self primeRegistryFromImage: MetacelloProjectRegistration configurationClasses baselineClasses: MetacelloProjectRegistration baselineClasses! ! !MetacelloProjectRegistry methodsFor: 'initialization' stamp: 'dkh 07/29/2013 16:18'! primeRegistryFromImage: configurationClasses baselineClasses: baselineClasses "MetacelloProjectRegistration primeRegistryFromImage" baselineClasses do: [ :cl | (self baselineRegistry includesKey: cl name asString) ifFalse: [ "not registered" (self primeRegistryCurrentVersionFor: cl) ifNotNil: [ :version | | projectSpec | projectSpec := (version project projectSpec name: (MetacelloScriptEngine baseNameOf: cl name asString); repositories: version project projectPackage repositories copy; yourself) asBaselineProjectSpec. self primeRegisterLoadedProjectSpec: projectSpec ] ] ]. configurationClasses do: [ :cl | (self configurationRegistry includesKey: cl name asString) ifFalse: [ "not registered" (self primeRegistryCurrentVersionFor: cl) ifNotNil: [ :version | | projectSpec repos projectPackage project | project := version project. projectPackage := project projectPackage. repos := nil. projectPackage ~~ nil ifTrue: [ repos := projectPackage repositories copy ]. projectSpec := (version project projectSpec name: (MetacelloScriptEngine baseNameOf: cl name asString); className: cl name asString; versionString: version versionString; repositories: repos; yourself) asConfigurationProjectSpec. self primeRegisterLoadedProjectSpec: projectSpec ] ] ]! ! !MetacelloProjectRegistry methodsFor: 'querying' stamp: 'dkh 7/19/2012 11:14'! projectSpecForClassNamed: aClassName ifAbsent: absentBlock ^ (self configurationRegistry at: aClassName ifAbsent: [ ^ (self baselineRegistry at: aClassName ifAbsent: [^absentBlock value]) baselineProjectSpec ]) configurationProjectSpec! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 7/19/2012 11:13'! projectSpecs "MetacelloProjectRegistration projectSpecs" ^ self configurationProjectSpecs , self baselineProjectSpecs! ! !MetacelloProjectRegistry methodsFor: 'registration' stamp: 'dkh 7/19/2012 15:27'! registerProjectRegistration: aMetacelloProjectRegistration "unconditionally register ... use with care" aMetacelloProjectRegistration configurationProjectSpec ifNotNil: [ :spec | self configurationRegistry at: spec className ifPresent: [ :existing | (existing configurationProjectSpec registrationsCompareEqual: spec) ifFalse: [ Transcript cr; show: 'REGISTRATION OF INCOMPATABLE PROJECTS: ' , existing printString , ' REPLACED BY ' , aMetacelloProjectRegistration printString ] ]. spec immutable. self configurationRegistry at: spec className put: aMetacelloProjectRegistration ]. aMetacelloProjectRegistration baselineProjectSpec ifNotNil: [ :spec | self baselineRegistry at: spec className ifPresent: [ :existing | (existing baselineProjectSpec registrationsCompareEqual: spec) ifFalse: [ Transcript cr; show: 'REGISTRATION OF INCOMPATABLE PROJECTS: ' , existing printString , ' REPLACED BY ' , aMetacelloProjectRegistration printString ] ]. spec immutable. self baselineRegistry at: spec className put: aMetacelloProjectRegistration ]. aMetacelloProjectRegistration immutable! ! !MetacelloProjectRegistry methodsFor: 'registration' stamp: 'dkh 7/19/2012 11:30'! registrationFor: aMetacelloProjectRegistration ifPresent: presentBlock ifAbsent: absentBlock | baseName | baseName := aMetacelloProjectRegistration baseName. aMetacelloProjectRegistration configurationProjectSpec ifNotNil: [ :spec | self configurationRegistry at: spec className ifPresent: [ :existing | ^ presentBlock value: existing ] ]. aMetacelloProjectRegistration baselineProjectSpec ifNotNil: [ :spec | self baselineRegistry at: spec className ifPresent: [ :existing | ^ presentBlock value: existing ] ]. self configurationRegistry at: 'ConfigurationOf' , baseName ifPresent: [ :existing | ^ presentBlock value: existing ]. self baselineRegistry at: 'BaselineOf' , baseName ifPresent: [ :existing | ^ presentBlock value: existing ]. ^ absentBlock value! ! !MetacelloProjectRegistry methodsFor: 'querying' stamp: 'dkh 7/19/2012 12:45'! registrationForClassNamed: aClassName ifAbsent: absentBlock | baseName | baseName := MetacelloScriptEngine baseNameOf: aClassName. self configurationRegistry at: aClassName ifPresent: [ :registration | ^ registration ]. self baselineRegistry at: aClassName ifPresent: [ :registration | ^ registration ]. self configurationRegistry at: 'ConfigurationOf' , baseName ifPresent: [ :registration | ^ registration ]. self baselineRegistry at: 'BaselineOf' , baseName ifPresent: [ :registration | ^ registration ]. ^ absentBlock value! ! !MetacelloProjectRegistry methodsFor: 'accessing' stamp: 'dkh 07/27/2013 08:45'! registrations ^ self baselineRegistry values , self configurationRegistry values! ! !MetacelloProjectRegistry methodsFor: 'registration' stamp: 'dkh 7/19/2012 11:33'! unregisterProjectRegistration: aMetacelloProjectRegistration aMetacelloProjectRegistration configurationProjectSpec ifNotNil: [ :spec | self configurationRegistry removeKey: spec className ifAbsent: [ self error: 'unexpectedly missing project registration' ] ]. aMetacelloProjectRegistration baselineProjectSpec ifNotNil: [ :spec | self baselineRegistry removeKey: spec className ifAbsent: [ self error: 'unexpectedly missing project registration' ] ]! ! !MetacelloProjectSpecForLoad methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24'! hasOverride ^ self overrideProjectSpec ~~ nil! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! overrideProjectSpec ^ overrideProjectSpec! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! overrideProjectSpec: anObject overrideProjectSpec := anObject! ! !MetacelloProjectSpecForLoad methodsFor: 'operations' stamp: 'dkh 07/10/2013 22:36'! performCurrentVersionTestAgainst: vrsn operator: anOperator targetVersionStatus: targetVersionStatus using: anMCLoader "answer true if the current state of image is to be left as is" | currentVersion existing new | vrsn ifNil: [ ^ false ]. self useDetermineVersionForLoad ifTrue: [ | prjct cv | self hasOverride ifTrue: [ self error: 'unexpected logic combination: useDeterminVersionForLoad & hasOverride' ]. prjct := self projectSpec projectClassProject. prjct loader: anMCLoader. (cv := prjct currentVersion) == nil ifTrue: [ ^ false ]. (targetVersionStatus includes: cv versionStatus) ifTrue: [ ^ cv perform: anOperator with: vrsn ]. ^ false ]. (self hasOverride not or: [ targetVersionStatus ~= #(#'allLoadedToSpec') ]) ifTrue: [ ^ false ]. (self overrideProjectSpec allPackagesLoaded: anMCLoader) ifFalse: [ "roughly equivalent to versionStatus test above (#'allLoadedToSpec')" ^ false ]. (self overrideProjectSpec isPartiallyLoaded: self overrideProjectSpec copy loader) ifFalse: [ "if the project is not loaded at all" ^ false ]. (currentVersion := self overrideProjectSpec versionOrNil) ifNil: [ ^ false ]. currentVersion = vrsn ifTrue: [ ^ true ]. existing := self overrideProjectSpec asProjectRegistration. new := self projectSpec asProjectRegistration. ^ currentVersion > vrsn ifTrue: [ "answer false if downgrade allowed" (MetacelloAllowProjectDowngrade new existingProjectRegistration: existing; newProjectRegistration: new; signal) == existing ] ifFalse: [ "answer false if upgrade allowed" (MetacelloAllowProjectUpgrade new existingProjectRegistration: existing; newProjectRegistration: new; signal) == existing ]! ! !MetacelloProjectSpecForLoad methodsFor: 'operations' stamp: 'dkh 6/14/2012 17:39'! performLoad | displayString spec | spec := self projectSpec. displayString := 'Project: ' , spec name. spec versionString ~~ nil ifTrue: [ displayString := displayString , ' ' , spec versionString ]. Transcript cr; show: displayString. self hasOverride ifTrue: [ | override | override := self overrideProjectSpec copy. override mergeScriptLoads: spec. override loadVersion: nil ] ifFalse: [ spec loadVersion: (self useDetermineVersionForLoad ifTrue: [ spec determineCurrentVersionForLoad ] ifFalse: [ spec versionOrNil ]) ]! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectSpec ^ projectSpec! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24'! projectSpec: anObject projectSpec := anObject! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/13/2012 15:40'! useDetermineVersionForLoad useDetermineVersionForLoad ifNil: [ useDetermineVersionForLoad := true ]. ^ useDetermineVersionForLoad! ! !MetacelloProjectSpecForLoad methodsFor: 'accessing' stamp: 'dkh 6/13/2012 15:39'! useDetermineVersionForLoad: anObject useDetermineVersionForLoad := anObject! ! !MetacelloBaselineSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:43'! projectSpecCreationBlock ^ [ :projectName | {(MetacelloMCBaselineProject new baselineOfProjectSpec name: projectName)} ]! ! !MetacelloBaselineSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:44'! projectSpecListBlock ^ [ MetacelloProjectRegistration baselineProjectSpecs ]! ! !MetacelloBaselineSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 11:28'! projectSpecLookupBlock ^ [ :projectName | {(MetacelloProjectRegistration projectSpecForClassNamed: (MetacelloScriptEngine baselineNameFrom: projectName) ifAbsent: [ ])} ]! ! !MetacelloConfigurationSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:43'! projectSpecCreationBlock ^ [ :projectName | {(MetacelloMCProject new configurationOfProjectSpec name: projectName)} ]! ! !MetacelloConfigurationSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:45'! projectSpecListBlock ^ [ MetacelloProjectRegistration configurationProjectSpecs ]! ! !MetacelloConfigurationSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 11:28'! projectSpecLookupBlock ^ [ :projectName | {(MetacelloProjectRegistration projectSpecForClassNamed: (MetacelloScriptEngine configurationNameFrom: projectName) ifAbsent: [ ])} ]! ! !MetacelloProjectSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:42'! projectSpecCreationBlock ^ [ :projectName | {(MetacelloMCProject new projectSpec name: projectName)} ]! ! !MetacelloProjectSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:44'! projectSpecListBlock ^ [ MetacelloProjectRegistration projectSpecs ]! ! !MetacelloProjectSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 11:27'! projectSpecLookupBlock ^ [ :projectName | {(MetacelloProjectRegistration projectSpecForClassNamed: (MetacelloScriptEngine baselineNameFrom: projectName) ifAbsent: [ ]). (MetacelloProjectRegistration projectSpecForClassNamed: (MetacelloScriptEngine configurationNameFrom: projectName) ifAbsent: [ ])} ]! ! !MetacelloProjectSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:34'! target ^ target! ! !MetacelloProjectSpecGenerator methodsFor: 'accessing' stamp: 'dkh 7/16/2012 10:34'! target: anObject target := anObject! ! !MetacelloReferenceConfig class methodsFor: 'accessing' stamp: 'dkh 05/07/2013 16:05'! project "force new version as workaround for https://code.google.com/p/smalltalk-hub/issues/detail?id=21" ^ self new project! ! !MetacelloReferenceConfig methodsFor: 'baseline 1.0' stamp: 'dkh 1/26/2012 11:26:02'! baseline10: spec spec for: #common do: [ "alternate methods for specifying author, blessing, description, timestamp, preLoadDoIt, postLoadDoit (not recommended)" spec blessing: [ spec value: #baseline. ]. spec description: [ spec value: 'Descriptive comment'. ]. spec author: [ spec value: 'dkh'. ]. spec timestamp: [ spec value: '10/7/2009 14:40'. ]. spec timestamp: [ spec value: (DateAndTime fromString: '10/7/2009 14:40'). ]. "recommended methods for specifying author, blessing, description, timestamp, preLoadDoIt, postLoadDoit" "#development, #baseline, #release, #beta, etc." spec blessing: #baseline. spec description: 'Descriptive comment'. spec author: 'dkh'. spec timestamp: (DateAndTime fromString: '10/7/2009 14:40'). spec timestamp: '10/7/2009 14:40'. spec "Before loading packages or projects in this version, send #preloadForVersion to an instance of this config" preLoadDoIt: #preloadForVersion; "After loading packages or projects in this version, send #postloadForVersion to an instance of this config" postLoadDoIt: #postloadForVersion. spec repository: 'http://www.example.com/rr'. spec repository: 'http://www.example.com/private' username: 'foo' password: 'bar'. spec repositories: [ "One or more repositories may be defined (MCReposioryGroup). Previous forms useful when specifying a single reposiory." spec "directory-based repositories" repository: '/opt/mc/repository'; repository: 'c:\pharo\myapp\repo\'; "ftp-based repository ... note, supported in Pharo/Squeak only" repository: 'ftp://ftp.example.com/repo'; "dictionary-based repository ... repository stored at `Smalltalk at: #GlobalName`" repository: 'dictionary://GlobalName'; repository: 'http://www.example.com/rr'; repository: 'http://www.example.com/ar'; repository: 'http://www.example.com/private' username: 'foo' password: 'bar' ]. spec "Create or update a project reference named 'UI Support'" project: 'UI Support' with: [ "One or more of the following attributes may be defined or changed" spec "OPTIONAL: Name of config class (i.e., ConfigurationOfXXX), if not specified, className is assumed to be the name of the project prependended with 'ConfigurationOf'" className: 'ConfigurationOfUI'; "Version of project to be loaded. if theversionString is not specified, then the latest version of the project is used." versionString: '1.0'; "Before loading this project, send #preloadForProject to an instance of this config" preLoadDoIt: #preloadForProject; "After loading this project, send #postloadForProject to an instance of this config" postLoadDoIt: #postloadForProject; "OPTIONAL: Version comparison operator #= #~= #> #< #>= #<= #~> " operator: #~>; "OPTIONAL: List of packages to be loaded from project" loads: #('UI-Core' ); "Optional: Name of package containing the config, by convention same as className" file: 'ConfigurationOfUI'; "Repository where package resides" repository: 'http://www.example.com/r' ]; "Create a new project reference to replace existing project reference" project: 'UI Support' overrides: [ "One or more of the following attributes may be defined" spec className: 'ConfigurationOfUINew'; versionString: '1.0'; operator: #>=; loads: #('UI-Core' 'UI-Tests' ); repository: 'http://www.example.com/r' username: 'foo' password: 'bar' ]; "Create project reference named 'UI Tests'" project: 'UI Tests' "based on c copy of 'UI Support' project" copyFrom: 'UI Support' with: [ "One or more of the following attributes may be changed" spec className: 'ConfigurationOfUI'; versionString: '1.0'; operator: #~>; loads: #('UI-Core' 'UI-Tests' ); repository: 'http://www.example.com/r']; "Change the versionString for 'UI Support' to '1.0.1'" project: 'UI Support' with: '1.0.1'; "Remove the project reference 'UI Tests'" removeProject: 'UI Tests'; "Multiple repositories for configuration - config may be found in either repository. Secondary repository is useful when primary repository may not be available" project: 'UI Multi' with: [ spec className: 'ConfigurationOfMulti'; repository: 'http://www.example.com/r'; repository: 'http://www.example.com/s' ]. "Create or update 'Example-AddOn' package" spec package: 'Example-AddOn' with: [ "One or more of the following attributes may be defined or changed" spec "'Example-Core' must be loaded before 'Example-AddOn'" requires: #('Example-Core' ); "When 'Example-AddOn' is loaded, load 'Example-UI'" includes: #('Example-UI' ); "Explicitly oad version 'Example-AddOn-anon.3' of the package" file: 'Example-AddOn-anon.3'; repositories: [ spec "Load 'Example-AddOn' from the 'http://www.example.com/yar'" repository: 'http://www.example.com/yar'; "or 'http://www.example.com/yas' repositores" repository: 'http://www.example.com/yas']; "Before loading 'Example-AddOn' send #preloadForAddOn to an instance of this config" preLoadDoIt: #preloadForAddOn; "After loading 'Example-AddOn' send #postloadForAddOn to an instance of this config" postLoadDoIt: #postloadForAddOn ]; "Create a new package to replace existing package" package: 'Example-AddOn' overrides: [ "One or more of the following attributes may be defined" spec requires: #('Example-Core' 'UI Support' ); includes: #('Example-UI' ); file: 'Example-AddOn-anon.7'; supplyingAnswers: #( #('list of packages' 'Kernel* Collection*')); repository: 'http://www.example.com/or' username: 'foo' password: 'bar' ; preLoadDoIt: #preloadForAddOn; postLoadDoIt: #postloadForAddOn ]; "Change the package version loaded" package: 'Example-AddOn' with:'Example-AddOn-anon.5'; "Create 'Example-Core' package in project" package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: #('Example-Core' ) ]; package: 'Example-TestsUI' with: [ spec requires: #('Example-UI' ) ]; package: 'Example-UI' with: [ spec requires: #('Example-AddOn' ) ]; "Remove the package 'Example-Tests'" removePackage: 'Example-Tests'. spec "Create or update the group 'default', adding 'Example-Core' and 'Example-AddOn' to the group." group: 'default' with: #('Example-Core' 'Example-AddOn' ); "Create the group 'default' to replace existing group, consisting of 'Example-Core' and 'Example-AddOn'" group: 'default' overrides: #('Example-Core' 'Example-Tests' ); "Remove the group 'default'" removeGroup: 'default' ]. ! ! !MetacelloReferenceConfig methodsFor: 'accessing' stamp: 'dkh 1/26/2012 11:26:02'! project ^ project ifNil: [ | constructor | "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project ]! ! !MetacelloScriptEngine commentStamp: 'dkh 7/12/2012 14:48' prior: 71984226! MetacelloScriptEngine runs the execution of the script for one projectSpec! !MetacelloScriptEngine class methodsFor: 'utility' stamp: 'dkh 07/14/2013 12:01'! baseNameOf: className ^ (className beginsWith: 'BaselineOf') ifTrue: [ className copyFrom: 'BaselineOf' size + 1 to: className size ] ifFalse: [ (className beginsWith: 'ConfigurationOf') ifTrue: [ className copyFrom: 'ConfigurationOf' size + 1 to: className size ] ifFalse: [ className ] ]! ! !MetacelloScriptEngine class methodsFor: 'utility' stamp: 'dkh 7/12/2012 15:04'! baselineNameFrom: baseName "Return the fully-qualified configuration class name." ^ (baseName indexOfSubCollection: 'BaselineOf') > 0 ifTrue: [ baseName ] ifFalse: [ 'BaselineOf' , baseName ]! ! !MetacelloScriptEngine class methodsFor: 'utility' stamp: 'dkh 07/14/2013 12:00'! baselineProjectNameOf: baselineClassName ^ (baselineClassName beginsWith: 'BaselineOf') ifTrue: [ baselineClassName copyFrom: 'BaselineOf' size + 1 to: baselineClassName size ] ifFalse: [ baselineClassName ]! ! !MetacelloScriptEngine class methodsFor: 'utility' stamp: 'dkh 7/12/2012 15:04'! configurationNameFrom: baseName "Return the fully-qualified configuration class name." ^ (baseName indexOfSubCollection: 'ConfigurationOf') > 0 ifTrue: [ baseName ] ifFalse: [ 'ConfigurationOf' , baseName ]! ! !MetacelloScriptEngine class methodsFor: 'utility' stamp: 'dkh 07/14/2013 12:01'! configurationProjectNameOf: configurationClassName ^ (configurationClassName beginsWith: 'ConfigurationOf') ifTrue: [ configurationClassName copyFrom: 'ConfigurationOf' size + 1 to: configurationClassName size ] ifFalse: [ configurationClassName ]! ! !MetacelloScriptEngine class methodsFor: 'defaults' stamp: 'dkh 7/23/2012 11:09'! defaultRepositoryDescription DefaultRepositoryDescription ifNil: [ DefaultRepositoryDescription := MetacelloPlatform current defaultRepositoryDescription ]. ^ DefaultRepositoryDescription! ! !MetacelloScriptEngine class methodsFor: 'defaults' stamp: 'dkh 7/23/2012 10:03'! defaultVersionString DefaultVersionString ifNil: [ DefaultVersionString := #'stable' ]. ^ DefaultVersionString! ! !MetacelloScriptEngine methodsFor: 'options' stamp: 'dkh 7/23/2012 16:30'! cacheRepository ^ (MetacelloMCProject new repositorySpec description: (self options at: #'cacheRepository' ifAbsent: [ ^ nil ])) createRepository! ! !MetacelloScriptEngine methodsFor: 'defaults' stamp: 'dkh 7/23/2012 11:09'! defaultRepositoryDescription ^ self class defaultRepositoryDescription! ! !MetacelloScriptEngine methodsFor: 'defaults' stamp: 'dkh 7/23/2012 10:02'! defaultVersionString ^ self class defaultVersionString! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 7/23/2012 15:53'! fetch: required self fetchRecord: [ :version | required isEmpty ifTrue: [ version fetch ] ifFalse: [ version fetch: required ] ] required: required! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 04/03/2013 12:30'! fetchRecord: fetchRecordBlock required: required MetacelloProjectRegistration copyRegistryWhile: [ self handleNotificationsForAction: [ | version loadedSpec | self setDefaultsAndValidateProjectSpec. [ loadedSpec := self lookupProjectSpecFor: self projectSpec ] on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade do: [ :notification | notification handleOnDownGrade: [ :ex :existing :new | ex allowEvenIfLocked ] onUpgrade: [ :ex :existing :new | ex allowEvenIfLocked ] ]. version := loadedSpec versionForScriptEngine: self. self root: (fetchRecordBlock value: version) loadDirective ] ]! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 04/03/2013 12:30'! get " load a fresh copy from repo" | spec projectPackage | MetacelloProjectRegistration copyRegistryRestoreOnErrorWhile: [ self setDefaultsAndValidateProjectSpec. spec := self projectSpec. projectPackage := spec projectPackage. projectPackage repositorySpecs do: [ :repoSpec | repoSpec createRepository flushForScriptGet ]. projectPackage load. self root: (Smalltalk at: spec className asSymbol) project. MetacelloProjectRegistration registrationForProjectSpec: spec ifAbsent: [ :new | new registerProject ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | spec copyForRegistration: existingCopy onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ] ifNotNil: [ specCopy mergeScriptRepository: spec ] ] ] ] ]! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 7/12/2012 14:25'! getBaselineProjectUnconditionalLoad: unconditionalLoad | project | project := (self getBaselineUnconditionalLoad: unconditionalLoad) project. project version spec repositories: self repositories copy. ^ project! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 7/12/2012 14:25'! getBaselineUnconditionalLoad: unconditionalLoad | spec | spec := self projectSpec. Smalltalk at: spec className asSymbol ifPresent: [ :cl | unconditionalLoad ifFalse: [ ^ cl ] ]. (spec := self lookupProjectSpecFor: spec) projectPackage load. ^ Smalltalk at: spec className asSymbol! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 7/12/2012 14:25'! getConfigurationProjectUnconditionalLoad: unconditionalLoad ^ (self getConfigurationUnconditionalLoad: unconditionalLoad) project! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 7/12/2012 14:25'! getConfigurationUnconditionalLoad: unconditionalLoad | spec | spec := self projectSpec. Smalltalk at: spec className asSymbol ifPresent: [ :cl | unconditionalLoad ifFalse: [ ^ cl ] ]. (spec := self lookupProjectSpecFor: spec) projectPackage load. ^ Smalltalk at: spec className asSymbol! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/12/2012 14:25'! handleConflict: exception ^ (self options at: #'onConflict' ifAbsent: [ ^ exception pass ]) cull: exception cull: exception existingProjectRegistration cull: exception newProjectRegistration! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/12/2012 14:25'! handleDowngrade: exception ^ (self options at: #'onDowngrade' ifAbsent: [ ^ exception pass ]) cull: exception cull: exception existingProjectRegistration cull: exception newProjectRegistration! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/24/2012 11:43'! handleEnsureProjectLoadedForDevelopment: exception "if useCurrentVersion resume with true, else resume with false" ^ exception resume: self useCurrentVersion! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 07/24/2013 17:08'! handleLock: exception ^ (self options at: #'onLock' ifAbsent: [ ^ exception pass ]) cull: exception cull: exception existingProjectRegistration cull: exception newProjectRegistration! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 05/11/2013 07:53'! handleLookupBaselineSpecForEnsureLoad: exception "if requested and registered don't compare equal, then ensure the new baseline is loaded" | requested registered | requested := exception projectSpec. registered := self lookupProjectSpecFor: exception projectSpec. ^ exception resume: (registered compareEqual: requested) not! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/12/2012 14:25'! handleLookupProjectSpec: exception ^ exception resume: ((self lookupProjectSpecFor: exception projectSpec) ifNil: [ ^ exception resume: exception projectSpec ])! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 05/11/2013 07:51'! handleLookupProjectSpecForLoad: exception "if overrideProjectSpec is nil, use currentVersion in image, ignoreImage is false" | requested override | requested := exception projectSpec. override := self useCurrentVersion ifTrue: [ "don't do lookup in registry if we expect to use the #currentVersion calculation" nil ] ifFalse: [ | registered | registered := self lookupProjectSpecFor: exception projectSpec. (registered compareEqual: requested) ifFalse: [ "counts as override, only if they differ in some aspect" override := registered ] ]. ^ exception resume: (MetacelloProjectSpecForLoad new projectSpec: requested; useDetermineVersionForLoad: self useCurrentVersion; overrideProjectSpec: override; yourself)! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 07/24/2013 17:07'! handleNotificationsForAction: actionBlock [ [ [ actionBlock on: MetacelloLookupProjectSpec , MetacelloLookupProjectSpecForLoad , MetacelloProjectSpecLoadedNotification , MetacelloScriptEnsureProjectLoadedForDevelopment , MetacelloLookupBaselineSpecForEnsureLoad do: [ :ex | "lookup and registration handlers need to be innermost set of handlers ...they may throw option notifications" ex handleResolutionFor: self ] ] on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade , MetacelloAllowConflictingProjectUpgrade do: [ :ex | "option handlers need to be outermost set of handlers ... last line of defense before users are involved" ex handleResolutionFor: self ] ] on: MetacelloAllowLockedProjectChange do: [ :ex | "MetacelloAllowLockedProjectChange need to be outermost handler ... since it is signaled from second line of handlers" ex handleResolutionFor: self ] ] on: Warning do: [ :ex | "Warning is absolute outermost handler" self handleWarning: ex ]! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/19/2012 20:48'! handleProjectSpecLoaded: exception MetacelloProjectRegistration registrationForProjectSpec: exception projectSpec ifAbsent: [ :new | new loadedInImage: true; registerProject ] ifPresent: [ :existing :new | "unconditionally merge new with existing (updates registration)" existing copyOnWrite: [ :existingCopy | existingCopy loadedInImage: true; merge: new ] ]. exception resume! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 7/12/2012 14:25'! handleUpgrade: exception ^ (self options at: #'onUpgrade' ifAbsent: [ ^ exception pass ]) cull: exception cull: exception existingProjectRegistration cull: exception newProjectRegistration! ! !MetacelloScriptEngine methodsFor: 'handlers' stamp: 'dkh 07/24/2013 15:38'! handleWarning: exception ^ (self options at: #'onWarning' ifAbsent: [ ^ exception pass ]) cull: exception! ! !MetacelloScriptEngine methodsFor: 'options' stamp: 'dkh 7/12/2012 14:25'! ignoreImage ^ self options at: #'ignoreImage' ifAbsent: [ false ]! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 04/03/2013 12:30'! list self setDefaultsAndValidateProjectSpec. self root: self projectSpec! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 7/20/2012 16:17'! load: required self load: required onProjectDownGrade: [ :ex :existing :new | ex allowEvenIfLocked ] onProjectUpgrade: [ :ex :existing :new | ex allowEvenIfLocked ]! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 07/01/2013 06:09'! load: required onProjectDownGrade: onDownGradeBlock onProjectUpgrade: onUpgradeBlock MetacelloProjectRegistration copyRegistryRestoreOnErrorWhile: [ self handleNotificationsForAction: [ | version loadedSpec | self setDefaultsAndValidateProjectSpec. [ loadedSpec := (self lookupProjectSpecFor: self projectSpec) copy ] on: MetacelloAllowProjectDowngrade , MetacelloAllowProjectUpgrade do: [ :ex | ex handleOnDownGrade: onDownGradeBlock onUpgrade: onUpgradeBlock ]. version := loadedSpec versionForScriptEngine: self. self root: (required isEmpty ifTrue: [ version load ] ifFalse: [ version load: required ]) loadDirective. loadedSpec loads: required. MetacelloProjectRegistration registrationForProjectSpec: loadedSpec ifAbsent: [ :new | new loadedInImage: true; registerProject ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | existingCopy loadedInImage: true; merge: new ] ] ] ]! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 04/03/2013 12:31'! lock | spec | MetacelloProjectRegistration copyRegistryRestoreOnErrorWhile: [ self setDefaultsAndValidate: self projectSpec copy. "don't add defaults" spec := self projectSpec. MetacelloProjectRegistration registrationForProjectSpec: spec ifAbsent: [ :new | new locked: true; registerProject ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | existingCopy locked: true. spec copyForRegistration: existingCopy onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ] ifNotNil: [ specCopy mergeScriptRepository: spec. spec := specCopy ] ] ] ]. self root: spec ]! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 05/11/2013 07:45'! lookupProjectSpecFor: aProjectSpec "if there is no conflict, choose new spec" | registration loadedSpec | registration := MetacelloProjectRegistration registrationForProjectSpec: aProjectSpec ifAbsent: [ :new | new ] ifPresent: [ :existing :new | (existing hasLoadConflicts: new) ifTrue: [ ((existing canUpgradeTo: new) ifTrue: [ MetacelloAllowProjectUpgrade new ] ifFalse: [ (existing canDowngradeTo: new) ifTrue: [ MetacelloAllowProjectDowngrade new ] ifFalse: [ MetacelloAllowConflictingProjectUpgrade new ] ]) existingProjectRegistration: existing; newProjectRegistration: new; signal ] ifFalse: [ new ] ]. ^ registration lookupSpec: aProjectSpec! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:25'! options options ifNil: [ options := Dictionary new ]. ^ options! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:33'! options: aDictionary options := aDictionary! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:25'! projectName ^ self projectSpec name! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:26'! projectSpec ^ projectSpec! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:26'! projectSpec: aProjectSpec projectSpec := aProjectSpec! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 7/23/2012 15:53'! record: required self fetchRecord: [ :version | required isEmpty ifTrue: [ version record ] ifFalse: [ version record: required ] ] required: required! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:25'! repositories ^ self projectSpec repositories! ! !MetacelloScriptEngine methodsFor: 'options' stamp: 'dkh 7/23/2012 19:31'! repositoryOverrides ^ (self options at: #'repositoryOverrides' ifAbsent: [ ^ nil ]) collect: [ :description | (MetacelloMCProject new repositorySpec description: description) createRepository ]! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:25'! root ^ root! ! !MetacelloScriptEngine methodsFor: 'accessing' stamp: 'dkh 7/12/2012 14:25'! root: anObject root := anObject! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 04/03/2013 12:29'! setDefaultsAndValidate: aProjectSpec "NOTE: aProjectSpec has defaults assigned if versionString or repository missing" | issues | issues := aProjectSpec validateForScriptLoad: self withDefaultVersionString: self defaultVersionString withDefaultRepositoryDecription: self defaultRepositoryDescription. issues isEmpty ifTrue: [ ^ self ]. (MetacelloValidationFailure issues: issues message: 'Project spec validation failure') signal! ! !MetacelloScriptEngine methodsFor: 'project lookup' stamp: 'dkh 04/03/2013 12:34'! setDefaultsAndValidateProjectSpec "NOTE: projectSpec has defaults assigned if versionString or repository missing" self setDefaultsAndValidate: self projectSpec! ! !MetacelloScriptEngine methodsFor: 'options' stamp: 'dkh 7/12/2012 14:25'! silently ^ self options at: #'silently' ifAbsent: [ false ]! ! !MetacelloScriptEngine methodsFor: 'actions api' stamp: 'dkh 04/03/2013 12:31'! unlock | spec | MetacelloProjectRegistration copyRegistryRestoreOnErrorWhile: [ self setDefaultsAndValidate: self projectSpec copy. "don't add defaults" spec := self projectSpec. MetacelloProjectRegistration registrationForProjectSpec: spec ifAbsent: [ :ignored | ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | existingCopy locked: false ] ]. self root: spec ]! ! !MetacelloScriptEngine methodsFor: 'options' stamp: 'dkh 7/12/2012 14:25'! useCurrentVersion "private option used to implement the classic mode" ^ self options at: #'useCurrentVersion' ifAbsent: [ false ]! ! !MetacelloScriptExecutor commentStamp: 'dkh 7/12/2012 14:49' prior: 71984373! MetacelloScriptExecutor decodes script args and launches MetacelloScriptEngine to run for each projectSpec encounters...i,e., primarily here to handl array and block args to configuration:, baseline: or project:.! !MetacelloScriptApiExecutor commentStamp: 'dkh 7/12/2012 14:49' prior: 71984661! MetacelloScriptExecutor decodes script args and launches MetacelloScriptEngine to run for each projectSpec encounters...i,e., primarily here to handl array and block args to configuration:, baseline: or project:.! !MetacelloScriptApiExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 15:59'! executeBlock: selectBlock do: projectSpecBlock (self projectSpecsFromRepositoryArg select: selectBlock) do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ]! ! !MetacelloScriptApiExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 15:56'! executeCollection: aCollection do: projectSpecBlock self projectSpecsFromRepositoryArg do: [ :projectSpec | (aCollection includes: (MetacelloScriptEngine baseNameOf: projectSpec className)) ifTrue: [ projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ] ]! ! !MetacelloScriptApiExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 17:10'! executeString: aString do: projectSpecBlock self singleRoot: true. (projectSpecGenerator projectSpecCreationBlock value: aString) do: [ :projectSpec | projectSpec ifNotNil: [ projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ] ]! ! !MetacelloScriptApiExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 16:38'! projectSpecsFromRepositoryArg | spec repo projectSpecs | repositoryArg ifNil: [ ^ #() ]. spec := (projectSpecGenerator projectSpecCreationBlock value: 'xxx') first. repo := spec project createRepository: (spec project repositorySpec description: repositoryArg). projectSpecs := OrderedCollection new. ((Gofer new disablePackageCache repository: repo; allResolved) collect: [ :resolvedReference | resolvedReference packageName ]) asSet do: [ :packageName | (projectSpecGenerator projectSpecCreationBlock value: (MetacelloScriptEngine baseNameOf: packageName)) do: [ :projectSpec | projectSpec className = packageName ifTrue: [ projectSpecs add: (self applyArgsToProjectSpec: projectSpec copy) ] ] ]. ^ projectSpecs! ! !MetacelloScriptExecutor methodsFor: 'execution' stamp: 'dkh 7/13/2012 09:33'! applyArgsToProjectSpec: aProjectSpec classNameArg ifNotNil: [ aProjectSpec className: classNameArg ]. versionArg ifNotNil: [ aProjectSpec versionString: versionArg ]. repositoryArg ifNotNil: [ aProjectSpec repository: repositoryArg ]. ^ aProjectSpec! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! baselineArg ^ baselineArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! baselineArg: anObject baselineArg := anObject! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/23/2012 16:18'! cacheRepository: aRepositoryDescription self options at: #'cacheRepository' put: aRepositoryDescription! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! classNameArg ^ classNameArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! classNameArg: anObject classNameArg := anObject! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! configurationArg ^ configurationArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! configurationArg: anObject configurationArg := anObject! ! !MetacelloScriptExecutor methodsFor: 'execution' stamp: 'dkh 7/16/2012 17:10'! execute: statements statements do: [ :assoc | assoc value ifNil: [ self perform: assoc key ] ifNotNil: [ self perform: assoc key withArguments: assoc value ] ]. projectSpecGenerator := self projectSpecGenerator. projectSpecGenerator target execute: [ :projectSpec | | engine | engine := MetacelloScriptEngine new options: self options copy; projectSpec: projectSpec; yourself. engine perform: actionArg key withArguments: actionArg value. engine root ifNotNil: [ :root | self roots add: root ] ] against: self. ^ (self singleRoot and: [ self roots size == 1 ]) ifTrue: [ self roots first ] ifFalse: [ self roots ]! ! !MetacelloScriptExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 14:56'! executeBlock: selectBlock do: projectSpecBlock ((projectSpecGenerator projectSpecListBlock value select: selectBlock) select: self projectSpecSelectBlock) do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ]! ! !MetacelloScriptExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 14:57'! executeCollection: aCollection do: projectSpecBlock aCollection do: [ :projectName | ((projectSpecGenerator projectSpecLookupBlock value: projectName) select: self projectSpecSelectBlock) do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ] ]! ! !MetacelloScriptExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 17:09'! executeString: aString do: projectSpecBlock self singleRoot: true. ((projectSpecGenerator projectSpecLookupBlock value: aString) select: self projectSpecSelectBlock) do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ]! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/23/2012 15:58'! fetch: required actionArg := #'fetch:' -> {required}! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/16/2012 10:17'! get actionArg := #'get' -> #()! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! ignoreImage: aBool self options at: #'ignoreImage' put: aBool! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/16/2012 10:17'! list actionArg := #'list' -> #()! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/16/2012 10:17'! load: required actionArg := #'load:' -> {required}! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/17/2012 10:53'! lock actionArg := #'lock' -> #()! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! onConflict: aBlock self options at: #'onConflict' put: aBlock! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! onDowngrade: aBlock self options at: #'onDowngrade' put: aBlock! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 07/24/2013 17:10'! onLock: aBlock self options at: #'onLock' put: aBlock! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! onUpgrade: aBlock self options at: #'onUpgrade' put: aBlock! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 07/24/2013 18:37'! onWarning: aBlock self options at: #'onWarning' put: aBlock! ! !MetacelloScriptExecutor methodsFor: 'accessing' stamp: 'dkh 7/13/2012 09:02'! options options ifNil: [ options := Dictionary new ]. ^ options! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! projectArg ^ projectArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! projectArg: anObject projectArg := anObject! ! !MetacelloScriptExecutor methodsFor: 'execution' stamp: 'dkh 7/16/2012 11:06'! projectSpecGenerator baselineArg ifNotNil: [ configurationArg ifNotNil: [ self error: ' baseline: and configuration: are both be specified' ]. projectArg ifNotNil: [ self error: ' baseline: and project are both be specified' ]. ^ MetacelloBaselineSpecGenerator new target: baselineArg; yourself ]. configurationArg ifNotNil: [ baselineArg ifNotNil: [ self error: ' baseline: and configuration: are both be specified' ]. projectArg ifNotNil: [ self error: ' configuration and project are both be specified' ]. ^ MetacelloConfigurationSpecGenerator new target: configurationArg; yourself ]. projectArg ifNotNil: [ configurationArg ifNotNil: [ self error: ' project and configuration: are both be specified' ]. baselineArg ifNotNil: [ self error: ' baseline: and project are both be specified' ]. ^ MetacelloProjectSpecGenerator new target: projectArg; yourself ]. self error: 'project, baseline, or configuration not specified'! ! !MetacelloScriptExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 11:34'! projectSpecSelectBlock ^ [ :projectSpec | true ]! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/19/2012 07:45'! record: required actionArg := #'record:' -> {required}! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! repositoryArg ^ repositoryArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! repositoryArg: anObject repositoryArg := anObject! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/23/2012 19:28'! repositoryOverrides: aRepositoryDescriptionList self options at: #'repositoryOverrides' put: aRepositoryDescriptionList! ! !MetacelloScriptExecutor methodsFor: 'accessing' stamp: 'dkh 7/13/2012 09:02'! roots roots ifNil: [ roots := OrderedCollection new ]. ^ roots! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! silently: aBool self options at: #'silently' put: aBool! ! !MetacelloScriptExecutor methodsFor: 'accessing' stamp: 'dkh 7/16/2012 17:09'! singleRoot singleRoot ifNil: [ singleRoot := false ]. ^ singleRoot! ! !MetacelloScriptExecutor methodsFor: 'accessing' stamp: 'dkh 7/16/2012 17:09'! singleRoot: aBool singleRoot := aBool! ! !MetacelloScriptExecutor methodsFor: 'actions api' stamp: 'dkh 7/17/2012 12:31'! unlock actionArg := #'unlock' -> #()! ! !MetacelloScriptExecutor methodsFor: 'options api' stamp: 'dkh 7/13/2012 09:31'! useCurrentVersion: aBool "private option used to implement the classic mode" self options at: #'useCurrentVersion' put: aBool! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! versionArg ^ versionArg! ! !MetacelloScriptExecutor methodsFor: 'args' stamp: 'dkh 7/13/2012 09:30'! versionArg: anObject versionArg := anObject! ! !MetacelloScriptImageExecutor methodsFor: 'execution callback' stamp: 'dkh 7/16/2012 14:53'! projectSpecSelectBlock ^ [ :projectSpec | projectSpec ifNil: [ false ] ifNotNil: [ MetacelloProjectRegistration registrationForProjectSpec: projectSpec ifAbsent: [ false ] ifPresent: [ :existingRegistration :newRegistration | existingRegistration loadedInImage ] ] ]! ! !MetacelloScriptRegistryExecutor methodsFor: 'actions api' stamp: 'dkh 7/20/2012 12:00'! prime ! ! !MetacelloScriptRegistryExecutor methodsFor: 'execution callback' stamp: 'dkh 07/28/2013 10:07'! projectSpecSelectBlock ^ [ :projectSpec | projectSpec notNil ]! ! !MetacelloScriptRegistryExecutor methodsFor: 'actions api' stamp: 'dkh 7/13/2012 09:37'! remove ! ! !MetacelloScriptRegistryExecutor methodsFor: 'actions api' stamp: 'dkh 7/13/2012 09:36'! reset ! ! !MetacelloSpec class methodsFor: 'instance creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116139! for: aVersionMap ^(self platformClass new) for: aVersionMap; yourself! ! !MetacelloSpec class methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26116028! platformClass ^self! ! !MetacelloSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! aboutToCopy ! ! !MetacelloSpec methodsFor: 'spec creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115379! addMember ^MetacelloAddMemberSpec for: self project! ! !MetacelloSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115193! answers ^#()! ! !MetacelloSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26114664! configMethodOn: aStream self configMethodOn: aStream indent: 0 ! ! !MetacelloSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26114803! configMethodOn: aStream indent: indent self subclassResponsibility ! ! !MetacelloSpec methodsFor: 'spec creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115510! copyMember ^MetacelloCopyMemberSpec for: self project! ! !MetacelloSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 16:44'! copyOnWrite: aBlock "assume that only registered projects are immutable ... otherwise you'll get an error" | copy | copy := self copy. aBlock value: copy. ^ copy! ! !MetacelloSpec methodsFor: 'doits' stamp: 'dkh 6/5/2012 19:01:24' prior: 26112799! doItBlock: selector selector == nil ifTrue: [ ^nil ]. selector numArgs = 0 ifTrue: [ ^[ self project configuration perform: selector ] ]. selector numArgs = 1 ifTrue: [ ^[:aLoader | self project configuration perform: selector with: aLoader ] ]. selector numArgs = 2 ifTrue: [ ^[:aLoader :pkgSpec | self project configuration perform: selector with: aLoader with: pkgSpec ] ]. ^nil ! ! !MetacelloSpec methodsFor: 'initialization' stamp: 'dkh 7/19/2012 15:09' prior: 26113810! for: aProject self shouldBeMutable. project := aProject! ! !MetacelloSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:03'! immutable mutable := false! ! !MetacelloSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:03'! isMutable mutable ifNil: [ ^ true ]. ^ mutable! ! !MetacelloSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26114954! label ^self printString! ! !MetacelloSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26112155! loader loader == nil ifTrue: [ | prjctLoader | (prjctLoader := self project loader) == nil ifTrue: [ self loader: (self project loaderClass on: self) ] ifFalse: [ self loader: prjctLoader ]]. ^loader! ! !MetacelloSpec methodsFor: 'accessing' stamp: 'dkh 7/19/2012 15:07' prior: 26112445! loader: aLoader "We're interested in propogating the loader state, _except_ for the spec" self shouldBeMutable. loader := aLoader copy. loader spec: self! ! !MetacelloSpec methodsFor: 'importing' stamp: 'dkh 6/26/2012 16:34'! mergeImportLoads: aLoadList self error: 'import: can only be used with baseline project specs'! ! !MetacelloSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26113919! mergeMap ^Dictionary new. ! ! !MetacelloSpec methodsFor: 'spec creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115644! mergeMember ^MetacelloMergeMemberSpec for: self project! ! !MetacelloSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26114029! mergeSpec: aSpec | newSpec nonOverridable | self validateMergeForSpec: aSpec. newSpec := self copy. nonOverridable := self nonOverridable. aSpec mergeMap keysAndValuesDo: [ :key :value | (nonOverridable includes: key) ifFalse: [ value ~~ nil ifTrue: [ newSpec instVarNamed: key asString put: value ] ] ]. ^ newSpec! ! !MetacelloSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:03'! mutable mutable := true! ! !MetacelloSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24' prior: 26114569! nonOverridable ^#()! ! !MetacelloSpec methodsFor: 'copying' stamp: 'dkh 7/19/2012 21:12' prior: 26112653! postCopy super postCopy. mutable := nil. loader ~~ nil ifTrue: [ self loader: loader ]. ! ! !MetacelloSpec methodsFor: 'doits' stamp: 'dkh 6/5/2012 19:01:24' prior: 26113264! postLoadDoIt "noop unless non-nil value returned" ^nil! ! !MetacelloSpec methodsFor: 'doits' stamp: 'dkh 6/5/2012 19:01:24' prior: 26113401! postLoadDoItBlock ^self doItBlock: self postLoadDoIt value ! ! !MetacelloSpec methodsFor: 'doits' stamp: 'dkh 6/5/2012 19:01:24' prior: 26113533! preLoadDoIt "noop unless non-nil value returned" ^nil! ! !MetacelloSpec methodsFor: 'doits' stamp: 'dkh 6/5/2012 19:01:24' prior: 26113670! preLoadDoItBlock ^self doItBlock: self preLoadDoIt value ! ! !MetacelloSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115052! printOn: aStream self configMethodOn: aStream indent: 0 ! ! !MetacelloSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115281! project ^project! ! !MetacelloSpec methodsFor: 'spec creation' stamp: 'dkh 6/5/2012 19:01:24' prior: 26115780! removeMember ^MetacelloRemoveMemberSpec for: self project! ! !MetacelloSpec methodsFor: 'mutability' stamp: 'dkh 7/19/2012 15:06'! shouldBeMutable self isMutable ifTrue: [ ^ self ]. self error: 'Not allowed to modify an immutable object'! ! !MetacelloSpec methodsFor: 'merging' stamp: 'dkh 6/5/2012 19:01:24'! validateMergeForSpec: aSpec aSpec class = self class ifFalse: [ self error: 'The project spec ' , self name printString , ' in project ' , self project label , ' has incompatible specs. ' , aSpec class name asString , ' and ' , self class name asString , ' are not compatible.' ]! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25905125! computeVersionStatus: matchBlock self computeVersionStatus: (self expandToLoadableSpecNames: #('ALL')) matchBlock: matchBlock! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25905334! computeVersionStatus: resolvedPackageAndProjectNames matchBlock: matchBlock | status | status := resolvedPackageAndProjectNames isNil ifTrue: [ self isPartiallyCurrent ] ifFalse: [ self isPartiallyCurrentAgainst: resolvedPackageAndProjectNames ]. status isAllLoadedToSpec: matchBlock. status isLoadedToSpec: matchBlock. status isLoadedMatchConstraints: matchBlock. status isSomethingLoaded: matchBlock! ! !MetacelloMCVersionSpec methodsFor: 'printing' stamp: 'dkh 9/10/2012 15:57' prior: 25913354! configMethodOn: aStream last: last indent: indent | spec hasRepositories hasPackageSpecs hasImport | hasRepositories := (spec := self repositoriesSpec) ~~ nil and: [ spec list isEmpty not ]. hasImport := self import ~~ nil. hasPackageSpecs := false. self packagesSpec list do: [ :member | member spec projectDo: [ :proj | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] packageDo: [ :package | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] groupDo: [ :group | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] ]. self configMethodBasicOn: aStream last: (hasRepositories | hasPackageSpecs | hasImport) not indent: indent. hasImport ifTrue: [ self configMethodValueOn: aStream for: self import selector: 'import:' last: (hasRepositories | hasPackageSpecs) not indent: indent ]. hasRepositories ifTrue: [ spec map values size = 1 ifTrue: [ aStream tab: indent; nextPutAll: 'spec repository: '; nextPutAll: spec map values first description printString , '.'. hasPackageSpecs ifTrue: [ aStream cr ] ] ifFalse: [ self configMethodOn: aStream for: spec selector: 'repositories:' last: hasPackageSpecs not indent: indent ] ]. self configPackagesSpecMethodOn: aStream indent: indent. last ifFalse: [ aStream cr ]! ! !MetacelloMCVersionSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25916460! configSpawnMethodOn: aStream indent: indent super configSpawnMethodOn: aStream indent: indent. self configPackagesSpecMethodOn: aStream indent: indent.! ! !MetacelloMCVersionSpec methodsFor: 'querying' stamp: 'dkh 05/08/2013 09:32' prior: 25916707! currentlyLoadedClassesInVersion | classes | classes := Set new. self projectDo: [ :ignored | ] packageDo: [ :packageSpec | | wc | wc := [ packageSpec workingCopy ] on: Error do: [ :ex | ex return: nil ]. wc ~~ nil ifTrue: [ classes addAll: (MetacelloPlatform current packageInfoFor: wc) classes ] ] groupDo: [ :ignored | ]. ^ classes! ! !MetacelloMCVersionSpec methodsFor: 'querying' stamp: 'dkh 05/08/2013 09:32' prior: 25917116! currentlyLoadedExtensionClassesInVersion | classes | classes := Dictionary new. self projectDo: [ :ignored | ] packageDo: [ :packageSpec | | wc | wc := [ packageSpec workingCopy ] on: Error do: [ :ex | ex return: nil ]. wc ~~ nil ifTrue: [ | packageInfo | packageInfo := MetacelloPlatform current packageInfoFor: wc. packageInfo extensionClasses do: [ :cl | classes at: cl put: (packageInfo extensionCategoriesForClass: cl) ] ] ] groupDo: [ :ignored | ]. ^ classes! ! !MetacelloMCVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:57' prior: 25917629! difference: otherVersionSpec "Return a dictionary of additions, removals and modifications" | report myProjectSpecs myPackageSpecs otherProjectSpecs otherPackageSpecs | report := MetacelloVersionDiffReport new. myProjectSpecs := Dictionary new. myPackageSpecs := Dictionary new. self projectDo: [ :projectSpec | myProjectSpecs at: projectSpec name put: projectSpec ] packageDo: [ :packageSpec | myPackageSpecs at: packageSpec name put: packageSpec ] groupDo: [ :ignored | ]. otherProjectSpecs := Dictionary new. otherPackageSpecs := Dictionary new. otherVersionSpec projectDo: [ :projectSpec | otherProjectSpecs at: projectSpec name put: projectSpec ] packageDo: [ :packageSpec | otherPackageSpecs at: packageSpec name put: packageSpec ] groupDo: [ :ignored | ]. myProjectSpecs valuesDo: [ :myProjectSpec | | otherProjectSpec | otherProjectSpec := otherProjectSpecs at: myProjectSpec name ifAbsent: [ ]. otherProjectSpec == nil ifTrue: [ report removals at: myProjectSpec name put: {(myProjectSpec versionString). ''} ] ifFalse: [ myProjectSpec versionString = otherProjectSpec versionString ifFalse: [ report modifications at: myProjectSpec name put: {(myProjectSpec versionString). (otherProjectSpec versionString)} ] ] ]. otherProjectSpecs valuesDo: [ :otherProjectSpec | (myProjectSpecs at: otherProjectSpec name ifAbsent: [ ]) == nil ifTrue: [ report additions at: otherProjectSpec name put: {''. (otherProjectSpec versionString)} ] ]. myPackageSpecs valuesDo: [ :myPackageSpec | | otherPackageSpec | otherPackageSpec := otherPackageSpecs at: myPackageSpec name ifAbsent: [ ]. otherPackageSpec == nil ifTrue: [ report removals at: myPackageSpec name put: {(myPackageSpec file). ''} ] ifFalse: [ myPackageSpec file = otherPackageSpec file ifFalse: [ report modifications at: myPackageSpec name put: {(myPackageSpec file). (otherPackageSpec file)} ] ] ]. otherPackageSpecs valuesDo: [ :otherPackageSpec | (myPackageSpecs at: otherPackageSpec name ifAbsent: [ ]) == nil ifTrue: [ report additions at: otherPackageSpec name put: {''. (otherPackageSpec file)} ] ]. ^ report! ! !MetacelloMCVersionSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25907230! forceUpdatedPackageSpecs | updatedSpecs mcLoader | updatedSpecs := Dictionary new. mcLoader := self loader. self packages map valuesDo: [:pkg | pkg forceUpdatePackageSpec: updatedSpecs using: mcLoader]. ^updatedSpecs! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25921230! isAllLoadedToSpec "all projects and packages are loaded and match specification" self isPartiallyCurrent isAllLoadedToSpec: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25921469! isAllLoadedToSpecAgainst: resolvedPackageAndProjectNames "all projects and packages are loaded and match specification" (self isPartiallyCurrentAgainst: resolvedPackageAndProjectNames) isAllLoadedToSpec: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25921789! isLoadedMatchConstraints "all loaded projects and packages match constraints (at least one package loaded)" self isPartiallyCurrent isLoadedMatchConstraints: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25922063! isLoadedMatchConstraintsAgainst: resolvedPackageAndProjectNames "all loaded projects and packages match constraints (at least one package loaded)" (self isPartiallyCurrentAgainst: resolvedPackageAndProjectNames) isLoadedMatchConstraints: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25922417! isLoadedToSpec "all loaded projects and packages match specifications (at least one package loaded)" self isPartiallyCurrent isLoadedToSpec: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25922675! isLoadedToSpecAgainst: resolvedPackageAndProjectNames "all loaded projects and packages match specifications (at least one package loaded)" (self isPartiallyCurrentAgainst: resolvedPackageAndProjectNames) isLoadedToSpec: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25923010! isPartiallyCurrent ^self isPartiallyCurrentAgainst: (self expandToLoadableSpecNames: #('ALL'))! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25923187! isPartiallyCurrentAgainst: resolvedPackageAndProjectNames | mcLoader status | status := MetacelloMCPartiallyLoadedStatus new. mcLoader := self loader. self specsNamed: resolvedPackageAndProjectNames projectDo: [ :prj | | vrsn currentVersion | status hasNoProject: false. vrsn := prj versionOrNil. vrsn ~~ nil ifTrue: [ (currentVersion := prj relativeCurrentVersion) ~~ nil ifTrue: [ status vrsnStatus add: currentVersion versionStatus ] ]. currentVersion ~~ nil ifTrue: [ status aProjectIsLoaded: true. (currentVersion perform: #= with: vrsn) ifTrue: [ status aLoadedProjectIsExact: true ] ifFalse: [ (currentVersion perform: prj projectReference operator with: vrsn) ifTrue: [ status aLoadedProjectIsCurrent: true ] ifFalse: [ status aLoadedProjectIsNotCurrent: true ] ] ] ifFalse: [ status aProjectNotLoaded: true ] ] packageDo: [ :pkg | status hasNoPackage: false. pkg currentPackageLoaded: [ :versionInfos :file | | wcName wcRef fileRef exact current | status aPackageIsLoaded: true. versionInfos isEmpty ifTrue: [ status aLoadedPackageIsNotCurrent: true ] ifFalse: [ exact := current := false. versionInfos do: [ :vi | wcName := vi name. fileRef := GoferResolvedReference name: file. wcRef := GoferResolvedReference name: wcName. (wcRef compare: fileRef using: #=) ifTrue: [ exact := true ] ]. exact ifTrue: [ status aLoadedPackageIsExact: true ] ifFalse: [ versionInfos do: [ :vi | wcName := vi name. fileRef := GoferResolvedReference name: file. wcRef := GoferResolvedReference name: wcName. (wcRef compare: fileRef using: #>=) ifTrue: [ current := true ] ]. current ifTrue: [ status aLoadedPackageIsCurrent: true ] ifFalse: [ status aLoadedPackageIsNotCurrent: true ] ] ] ] notLoaded: [ status aPackageNotLoaded: true ] using: mcLoader ] groupDo: [ :ignoredGroup | "if we encounter a group, trouble" status abort: true. ^ status ]. ^ status! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25925481! isPossibleBaseline self projectDo: [:prj | prj isPossibleBaseline ifFalse: [ ^false ]] packageDo: [:pkg | pkg isPackageLoaded ifFalse: [ ^false ]] groupDo: [:ignored | ]. ^true! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25925751! isSomethingLoaded "at least one package loaded" self isPartiallyCurrent isSomethingLoaded: [ :ignored | ^ true ]. ^ false! ! !MetacelloMCVersionSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25925959! isSomethingLoadedAgainst: resolvedPackageAndProjectNames "at least one package loaded" (self isPartiallyCurrentAgainst: resolvedPackageAndProjectNames) isSomethingLoaded: [ :ignored | ^ true ]. ^ false ! ! !MetacelloMCVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 12:11' prior: 25912293! mergeMap | map | map := super mergeMap. map at: #'repositories' put: self repositories. ^ map! ! !MetacelloMCVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 12:12' prior: 25912508! mergeSpec: anotherSpec | newSpec map anotherRepositories | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. (anotherRepositories := map at: #'repositories') isEmpty not ifTrue: [ newSpec repositories: (self repositories isEmpty ifTrue: [ anotherRepositories ] ifFalse: [ self repositories mergeSpec: anotherRepositories ]) ]. ^ newSpec! ! !MetacelloMCVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 12:11' prior: 25913196! nonOverridable ^ super nonOverridable , #(#'repositories')! ! !MetacelloMCVersionSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! package: aString constructor: aVersionConstructor aVersionConstructor packageForVersion: aString! ! !MetacelloMCVersionSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! package: aString overrides: aBlock constructor: aVersionConstructor aVersionConstructor packageForVersion: aString overrides: aBlock! ! !MetacelloMCVersionSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! package: packageName with: aBlockOrString constructor: aVersionConstructor aVersionConstructor packageForVersion: packageName with: aBlockOrString! ! !MetacelloMCVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 13:42' prior: 25920921! packageNames "leave reference to packages for upgrade purposes" packages == nil ifTrue: [ ^ super packageNames ]. ^ self packages map keys asSet! ! !MetacelloMCVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 12:26'! packageSpecsInLoadOrderForMap: packageMap | loadOrder pkgs packageNames importNames importProjectSpec importSpec | loadOrder := self packageSpecsInLoadOrder. importNames := (packageNames := (packageMap values collect: [ :pkg | pkg name ]) asSet) copy. self import ifNil: [ ^ loadOrder select: [ :pkg | packageNames includes: pkg name ] ]. loadOrder do: [ :pkg | importNames remove: pkg name ifAbsent: [ ] ]. pkgs := OrderedCollection new. importProjectSpec := loadOrder detect: [ :pkg | pkg name = self import ]. loadOrder do: [ :pkg | (packageNames includes: pkg name) ifTrue: [ pkgs add: pkg ]. pkg name = self import ifTrue: [ "insert the imports at this point" importNames do: [ :importedName | pkgs add: (importSpec := importProjectSpec copy name: importedName; mergeImportLoads: {importedName}; yourself). importSpec projectReference name: importedName ] ] ]. ^ pkgs! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/11/2012 13:41' prior: 25905828! packages "leave reference to packages for upgrade purposes" packages == nil ifTrue: [ ^ super packages ]. ^ packages! ! !MetacelloMCVersionSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25907546! packagesNeedSavingVisited: visitedProjects into: aCollection self packages map valuesDo: [:pkg | pkg packagesNeedSavingVisited: visitedProjects using: self repositories map values into: aCollection ]. ! ! !MetacelloMCVersionSpec methodsFor: 'copying' stamp: 'dkh 9/11/2012 13:42' prior: 25907034! postCopy super postCopy. repositories := repositories copy. packages := packages copy "leave reference to packages for upgrade purposes"! ! !MetacelloMCVersionSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! removePackage: aString constructor: aVersionConstructor aVersionConstructor removePackageForVersion: aString! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25906234! repositories repositories == nil ifTrue: [ repositories := self project repositoriesSpec ]. ^ repositories! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25906424! repositories: anObject repositories := anObject! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25906555! repositoriesSpec ^self repositories! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25906675! repository: aString self repositoriesSpec add: aString! ! !MetacelloMCVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25906814! repository: aString username: username password: password self repositoriesSpec repository: aString username: username password: password! ! !MetacelloMCVersionSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25910219! repositorySpecs ^self repositories map values! ! !MetacelloMCVersionSpec methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25908747! specListProjectDo: projectBlock packageDo: packageBlock groupDo: groupBlock self packages specListDo: [:pkgSpec | pkgSpec projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock ]! ! !MetacelloMCVersionSpec methodsFor: 'enumerating' stamp: 'dkh 6/8/2012 14:04:22' prior: 25909037! specsNamed: packageAndProjectNames projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock | map | map := self packages map. packageAndProjectNames do: [:name | | pkgSpec | (pkgSpec := map at: name ifAbsent: [ ]) ~~ nil ifTrue: [ pkgSpec projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock ]]! ! !MetacelloMCVersionSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25907852! updateForSpawnMethod: sourceSpec "This means that this spec was used in a baseline and will be used in a version .... drop all information that isn't useful" repositories := preLoadDoIt := postLoadDoIt := nil. ! ! !MetacelloMCVersionSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25908159! updatedPackageSpecs | updatedSpecs mcLoader | updatedSpecs := Dictionary new. mcLoader := self loader. self packages map valuesDo: [:pkg | pkg updatePackageSpec: updatedSpecs using: mcLoader]. ^updatedSpecs! ! !MetacelloMCVersionSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25926247! versionClass ^MetacelloMCVersion! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26281402! author author == nil ifTrue: [ ^self project valueHolderSpec value: ''; yourself]. ^ author! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26281591! author: anObject anObject setAuthorInMetacelloVersion: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! author: aBlockOrString constructor: aVersionConstructor aVersionConstructor authorForVersion: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:23'! baseline: aString constructor: aVersionConstructor aVersionConstructor baselineForVersion: aString! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:23'! baseline: aString with: aBlockOrString constructor: aVersionConstructor aVersionConstructor baselineForVersion: aString with: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26281733! blessing blessing == nil ifTrue: [ ^self project valueHolderSpec value: self project defaultBlessing; yourself]. ^ blessing! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26281953! blessing: anObject anObject setBlessingInMetacelloVersion: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! blessing: aBlockOrString constructor: aVersionConstructor aVersionConstructor blessingForVersion: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 9/10/2012 15:56'! configMethodBasicOn: aStream last: last indent: indent | values lastIndex lastBlock | last ifTrue: [ "need to calculate last statement with a value" values := {(self getBlessing). (self getDescription). (self getPreLoadDoIt). (self getPostLoadDoIt). (self getAuthor). (self getTimestamp)}. 1 to: values size do: [ :index | (values at: index) ~~ nil ifTrue: [ lastIndex := index ] ]. lastBlock := [ :arg | arg = lastIndex ] ] ifFalse: [ lastBlock := [ :arg | false ] ]. self configMethodValueOn: aStream for: self getBlessing selector: 'blessing:' last: (lastBlock value: 1) indent: indent. self configMethodValueOn: aStream for: self getDescription selector: 'description:' last: (lastBlock value: 2) indent: indent. self configMethodValueOn: aStream for: self getPreLoadDoIt selector: 'preLoadDoIt:' last: (lastBlock value: 3) indent: indent. self configMethodValueOn: aStream for: self getPostLoadDoIt selector: 'postLoadDoIt:' last: (lastBlock value: 4) indent: indent. self configMethodValueOn: aStream for: self getAuthor selector: 'author:' last: (lastBlock value: 5) indent: indent. self configMethodValueOn: aStream for: self getTimestamp selector: 'timestamp:' last: (lastBlock value: 6) indent: indent! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26285418! configMethodOn: aStream for: spec selector: selector last: last indent: indent spec == nil ifTrue: [ ^ self ]. aStream tab: indent; nextPutAll: 'spec ' , selector , ' ['; cr. spec configMethodOn: aStream indent: indent + 1. aStream nextPutAll: ' ].'. last ifFalse: [ aStream cr ]! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26285802! configMethodOn: aStream indent: indent self configMethodOn: aStream last: true indent: indent! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 9/10/2012 15:58' prior: 26285987! configMethodOn: aStream last: last indent: indent | spec hasPackageSpecs | hasPackageSpecs := false. self packagesSpec list do: [ :member | member spec projectDo: [ :proj | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] packageDo: [ :package | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] groupDo: [ :group | member spec name ~~ nil ifTrue: [ hasPackageSpecs := true ] ] ]. self configMethodBasicOn: aStream last: hasPackageSpecs not indent: indent. self configPackagesSpecMethodOn: aStream indent: indent. last ifFalse: [ aStream cr ]! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26287393! configMethodValueOn: aStream for: spec selector: selector last: last indent: indent | valuePrintString | spec == nil ifTrue: [ ^ self ]. valuePrintString := spec value isSymbol ifTrue: [ '#' , spec value asString printString ] ifFalse: [ spec value printString ]. aStream tab: indent; nextPutAll: 'spec ' , selector , ' ' , valuePrintString , '.'. last ifFalse: [ aStream cr ]! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 9/10/2012 15:58'! configPackagesSpecMethodOn: aStream indent: indent | projectSpecs packageSpecs groupSpecs | projectSpecs := OrderedCollection new. packageSpecs := OrderedCollection new. groupSpecs := OrderedCollection new. self packagesSpec list do: [:member | member spec projectDo: [:proj | member spec name ~~ nil ifTrue: [ projectSpecs add: member ]] packageDo: [:package | member spec name ~~ nil ifTrue: [ packageSpecs add: member ]] groupDo: [:group | member spec name ~~ nil ifTrue: [ groupSpecs add: member ]]]. projectSpecs isEmpty not ifTrue: [ aStream tab: indent; nextPutAll: 'spec '. projectSpecs size > 1 ifTrue: [ aStream cr; tab: indent + 1 ]. 1 to: projectSpecs size do: [:index | (projectSpecs at: index) configMethodCascadeOn: aStream last: index == projectSpecs size indent: indent + 1. index ~= projectSpecs size ifTrue: [ aStream tab: indent + 1 ]]]. packageSpecs isEmpty not ifTrue: [ projectSpecs isEmpty not ifTrue: [ aStream cr ]. aStream tab: indent; nextPutAll: 'spec '. packageSpecs size > 1 ifTrue: [ aStream cr; tab: indent + 1 ]. 1 to: packageSpecs size do: [:index | (packageSpecs at: index) configMethodCascadeOn: aStream last: index == packageSpecs size indent: indent + 1. index ~= packageSpecs size ifTrue: [ aStream tab: indent + 1 ]]]. groupSpecs isEmpty not ifTrue: [ projectSpecs isEmpty not | packageSpecs isEmpty not ifTrue: [ aStream cr ]. aStream tab: indent; nextPutAll: 'spec '. groupSpecs size > 1 ifTrue: [ aStream cr; tab: indent + 1 ]. 1 to: groupSpecs size do: [:index | (groupSpecs at: index) configMethodCascadeOn: aStream last: index == groupSpecs size indent: indent + 1. index ~= groupSpecs size ifTrue: [ aStream tab: indent + 1 ]]]. ! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26287876! configSpawnMethodOn: aStream indent: indent self configMethodValueOn: aStream for: self getBlessing selector: 'blessing:' last: false indent: indent. self configMethodValueOn: aStream for: self getAuthor selector: 'author:' last: false indent: indent. self configMethodValueOn: aStream for: self getTimestamp selector: 'timestamp:' last: false indent: indent. ! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:23'! configuration: aString with: aBlockOrString constructor: aVersionConstructor aVersionConstructor configurationForVersion: aString with: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26289310! createVersion ^self versionClass fromSpec: self! ! !MetacelloVersionSpec methodsFor: 'loading' stamp: 'dkh 9/11/2012 12:13'! defaultPackageNames "if there is a package named 'default' (a group) then it defines the default package names, otherwise answer a list of all of the package names in this version" self packages packageNamed: 'default' ifAbsent: [ ^self packageNames ]. ^#('default')! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282099! description description == nil ifTrue: [ ^self project valueHolderSpec value: ''; yourself]. ^ description! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282302! description: anObject anObject setDescriptionInMetacelloVersion: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! description: aBlockOrString constructor: aVersionConstructor aVersionConstructor descriptionForVersion: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 11:57'! difference: otherVersionSpec "Return a dictionary of additions, removals and modifications" | report myProjectSpecs otherProjectSpecs | report := MetacelloVersionDiffReport new. myProjectSpecs := Dictionary new. self projectDo: [ :projectSpec | myProjectSpecs at: projectSpec name put: projectSpec ] packageDo: [ :ignored | ] groupDo: [ :ignored | ]. otherProjectSpecs := Dictionary new. otherVersionSpec projectDo: [ :projectSpec | otherProjectSpecs at: projectSpec name put: projectSpec ] packageDo: [ :ignored | ] groupDo: [ :ignored | ]. myProjectSpecs valuesDo: [ :myProjectSpec | | otherProjectSpec | otherProjectSpec := otherProjectSpecs at: myProjectSpec name ifAbsent: [ ]. otherProjectSpec == nil ifTrue: [ report removals at: myProjectSpec name put: {(myProjectSpec versionString). ''} ] ifFalse: [ myProjectSpec versionString = otherProjectSpec versionString ifFalse: [ report modifications at: myProjectSpec name put: {(myProjectSpec versionString). (otherProjectSpec versionString)} ] ] ]. otherProjectSpecs valuesDo: [ :otherProjectSpec | (myProjectSpecs at: otherProjectSpec name ifAbsent: [ ]) == nil ifTrue: [ report additions at: otherProjectSpec name put: {''. (otherProjectSpec versionString)} ] ]. ^ report! ! !MetacelloVersionSpec methodsFor: 'loading' stamp: 'dkh 9/11/2012 12:09'! expandToLoadableSpecNames: nameList | cacheKey names | cacheKey := Array with: self label with: nameList. ^MetacelloPlatform current stackCacheFor: #loadableSpecNames at: cacheKey doing: [ :cache | names := (self resolveToLoadableSpecs: nameList) collect: [:spec | spec name ]. cache at: cacheKey put: names ]. ! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282454! getAuthor ^author! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282553! getBlessing ^blessing! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282656! getDescription ^description! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282766! getPostLoadDoIt ^postLoadDoIt! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282878! getPreLoadDoIt ^preLoadDoIt! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26282987! getTimestamp ^timestamp! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:22'! group: aString overrides: aStringOrCollection constructor: aVersionConstructor aVersionConstructor groupForVersion: aString overrides: aStringOrCollection! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:22'! group: aString with: aStringOrCollection constructor: aVersionConstructor aVersionConstructor groupForVersion: aString with: aStringOrCollection! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/11/2012 12:13'! import ^ importName! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/11/2012 10:38'! import: anObject importName := anObject! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! import: aString constructor: aVersionConstructor aVersionConstructor importForVersion: aString! ! !MetacelloVersionSpec methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26288833! isPartiallyCurrent: notLoadedMatters useEquality: useEquality self subclassResponsibility! ! !MetacelloVersionSpec methodsFor: 'testing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26289004! isPossibleBaseline self subclassResponsibility! ! !MetacelloVersionSpec methodsFor: 'printing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26288329! label ^self versionString, ' [', self projectLabel, ']'! ! !MetacelloVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 14:20' prior: 26285013! mergeMap | map | map := super mergeMap. map at: #'versionString' put: versionString. map at: #'blessing' put: blessing. map at: #'description' put: description. map at: #'author' put: author. map at: #'timestamp' put: timestamp. map at: #'preLoadDoIt' put: preLoadDoIt. map at: #'postLoadDoIt' put: postLoadDoIt. map at: #'packageList' put: self packages. ^ map! ! !MetacelloVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 14:18'! mergeSpec: anotherSpec | newSpec map anotherPackages | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. (anotherPackages := map at: #'packageList') isEmpty not ifTrue: [ newSpec packages: (self packages isEmpty ifTrue: [ anotherPackages ] ifFalse: [ self packages mergeSpec: anotherPackages ]) ]. ^ newSpec! ! !MetacelloVersionSpec methodsFor: 'merging' stamp: 'dkh 9/11/2012 12:11'! nonOverridable ^ super nonOverridable , #(#'packageList')! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:36'! packageNamed: aString ^self packageNamed: aString ifAbsent: [ nil ]! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:37'! packageNamed: aString forLoad: forLoad forMap: map ifAbsent: absentBlock | importSpec | ^ map at: aString ifAbsent: [ (forLoad and: [ self import notNil ]) ifTrue: [ "expect the 'missing' name to be satisfied within context of imported project" importSpec := (map at: self import ifAbsent: absentBlock) copy name: aString; mergeImportLoads: {aString}; yourself. importSpec projectReference name: aString. importSpec ] ifFalse: [ (aString = 'default' or: [ aString = 'ALL' ]) ifTrue: [ self project groupSpec name: aString; includes: self packageNames; yourself ] ifFalse: [ absentBlock value ] ] ]! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:36'! packageNamed: aString forMap: map ifAbsent: absentBlock "import: only allowed to be used with baseline project specs" ^ self packageNamed: aString forLoad: true forMap: map ifAbsent: absentBlock! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:36'! packageNamed: aString ifAbsent: aBlock ^self packageNamed: aString forMap: self packages map ifAbsent: aBlock! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/10/2012 15:40'! packageNames packageList == nil ifTrue: [ ^ #() ]. ^ self packages map keys asSet! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 9/11/2012 10:09'! packageSpecsInLoadOrder ^ self packages packageSpecsInLoadOrder! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/10/2012 15:39'! packages packageList == nil ifTrue: [ packageList := self project packagesSpec ]. ^ packageList! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/10/2012 15:39'! packages: anObject packageList := anObject! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 9/10/2012 15:54'! packagesSpec ^self packages! ! !MetacelloVersionSpec methodsFor: 'copying' stamp: 'dkh 9/10/2012 15:40' prior: 26284788! postCopy super postCopy. blessing := blessing copy. description := description copy. author := author copy. timestamp := timestamp copy. packageList := packageList copy! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26288468! postLoadDoIt ^postLoadDoIt! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283102! postLoadDoIt: anObject anObject setPostLoadDoItInMetacelloSpec: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! postLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor postLoadDoItForVersion: aSymbol! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26288577! preLoadDoIt ^preLoadDoIt! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283263! preLoadDoIt: anObject anObject setPreLoadDoItInMetacelloSpec: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! preLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor preLoadDoItForVersion: aSymbol! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:23'! project: aString constructor: aVersionConstructor aVersionConstructor projectForVersion: aString! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:23'! project: aString copyFrom: oldSpecName with: aBlock constructor: aVersionConstructor aVersionConstructor projectForVersion: aString copyFrom: oldSpecName with: aBlock! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! project: aString overrides: aBlock constructor: aVersionConstructor aVersionConstructor projectForVersion: aString overrides: aBlock! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! project: aString with: aBlockOrString constructor: aVersionConstructor aVersionConstructor projectForVersion: aString with: aBlockOrString! ! !MetacelloVersionSpec methodsFor: 'enumerating' stamp: 'dkh 9/11/2012 10:08'! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock self packageSpecsInLoadOrder do: [:pkgSpec | pkgSpec projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock ]! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283420! projectLabel ^self project label! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! removeGroup: aString constructor: aVersionConstructor aVersionConstructor removeGroupForVersion: aString! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! removeProject: aString constructor: aVersionConstructor aVersionConstructor removeProjectForVersion: aString! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repositories: aBlock constructor: aVersionConstructor aVersionConstructor repositoriesForVersion: aBlock! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repository: anObject constructor: aVersionConstructor aVersionConstructor repositoryForVersion: anObject! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! repository: aString username: username password: password constructor: aVersionConstructor aVersionConstructor repositoryForVersion: aString username: username password: password! ! !MetacelloVersionSpec methodsFor: 'loading' stamp: 'dkh 9/11/2012 11:49'! resolveToLoadableSpec: aString forLoad: forLoad forMap: map packages: packageMap | package | package := self packageNamed: aString forLoad: forLoad forMap: map ifAbsent: [ ^ self error: 'Name not found: ' , aString ]. packageMap at: package name put: package. ^ {package}! ! !MetacelloVersionSpec methodsFor: 'loading' stamp: 'dkh 9/11/2012 11:49'! resolveToLoadableSpecs: nameList "Resolves names in namelist to the list of packages and projects in the version that would be loaded. Projects are not traversed during the transitive closure. The scope is that of the version itself. If the spec is a package, answer a list including the package and the transitive closure on its #requires: and #includes: fields. If the spec is a project, answer the project. If the spec is a group, answers the list of packages in the #includes: field of the group. Groups in the #includes: field are expanded following the transitive closure on groups" | map | map := Dictionary new. self resolveToLoadableSpecs: nameList forLoad: false map: map. ^ map values! ! !MetacelloVersionSpec methodsFor: 'loading' stamp: 'dkh 9/11/2012 11:49'! resolveToLoadableSpecs: required forLoad: forLoad map: packageMap | reqd allReqd map newReqd spec | reqd := required copy. allReqd := Set new. map := self packages map. [ reqd isEmpty ] whileFalse: [ newReqd := Set new. reqd do: [ :req | (self resolveToLoadableSpec: req forLoad: forLoad forMap: map packages: packageMap) do: [ :loadableSpec | newReqd addAll: loadableSpec requires. newReqd addAll: loadableSpec includes ] ]. allReqd addAll: reqd. newReqd removeAllFoundIn: allReqd. reqd := newReqd ]. packageMap keys do: [ :pkgName | (spec := (packageMap at: pkgName) resolveToLoadableSpec) == nil ifTrue: [ packageMap removeKey: pkgName ] ifFalse: [ packageMap at: pkgName put: (packageMap at: pkgName) resolveToLoadableSpec ] ]! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283535! setAuthor: anObject author := anObject! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283654! setBlessing: anObject blessing := anObject! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283777! setDescription: anObject description := anObject! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26283917! setPostLoadDoIt: aSymbol postLoadDoIt := aSymbol! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26284058! setPreLoadDoIt: aSymbol preLoadDoIt := aSymbol! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26284187! setTimestamp: anObject timestamp := anObject! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26284313! timestamp timestamp == nil ifTrue: [ ^self project valueHolderSpec value: ''; yourself]. ^ timestamp! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26284511! timestamp: anObject anObject setTimestampInMetacelloVersion: self! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 6/5/2012 19:01:24'! timestamp: aBlockOrStringOrDateAndTime constructor: aVersionConstructor aVersionConstructor timestampForVersion: aBlockOrStringOrDateAndTime! ! !MetacelloVersionSpec methodsFor: 'private' stamp: 'dkh 6/5/2012 19:01:24' prior: 26289438! versionClass ^MetacelloVersion! ! !MetacelloVersionSpec methodsFor: 'private' stamp: 'dkh 6/22/2012 12:35'! versionNumber ^ self project versionNumberClass fromString: self versionString! ! !MetacelloVersionSpec methodsFor: 'querying' stamp: 'dkh 6/5/2012 19:01:24' prior: 26288683! versionString versionString == nil ifTrue: [ ^'' ]. ^ versionString! ! !MetacelloVersionSpec methodsFor: 'accessing' stamp: 'dkh 6/5/2012 19:01:24' prior: 26284658! versionString: anObject versionString := anObject! ! !MetacelloVersionSpec methodsFor: 'construction' stamp: 'dkh 9/10/2012 15:24'! versionString: anObject constructor: aVersionConstructor aVersionConstructor versionStringForVersion: anObject! ! !MetacelloTutorialConfig class methodsFor: 'private' stamp: 'dkh 3/18/2011 14:15:41'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !MetacelloTutorialConfig class methodsFor: 'private' stamp: 'dkh 3/18/2011 14:15:41'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.15" self bootstrapPackage: 'Gofer-lr.83' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !MetacelloTutorialConfig class methodsFor: 'metacello tool support' stamp: 'dkh 3/18/2011 14:15:41'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !MetacelloTutorialConfig class methodsFor: 'accessing' stamp: 'dkh 3/18/2011 14:15:41'! project ^self new project! ! !MetacelloTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline07: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]; package: 'Example-AddOn' with: [ spec requires: 'Example-Core' ] ]. ! ! !MetacelloTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core'; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]; package: 'Example-AddOn' with: [ spec requires: 'Example-Core' ]; package: 'Example-AddOnTests' with: [ spec requires: #('Example-AddOn' 'Example-Tests' ) ]. spec group: 'default' with: #('Example-Core' 'Example-AddOn' ); group: 'Tests' with: #('Example-Tests' 'Example-AddOnTests' ) ]. ! ! !MetacelloTutorialConfig methodsFor: 'baselines' stamp: 'dkh 3/18/2011 14:15:41'! baseline13: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core' with: [ spec includes: #('Example-Platform' ) ]; package: 'Example-Tests' with: [ spec requires: 'Example-Core' ]; package: 'Example-AddOn' with: [ spec requires: 'Example-Core' ]; package: 'Example-Platform' with: [ spec requires: 'Example-Core' ]; package: 'Example-AddOnTests' with: [ spec requires: #('Example-AddOn' 'Example-Tests' ) ]. spec group: 'default' with: #('Example-Core' 'Example-AddOn' ); group: 'Tests' with: #('Example-Tests' 'Example-AddOnTests' ) ]. spec for: #gemstone do: [ spec package: 'Example-Platform' with: 'Example-Platform.gemstone'.]. spec for: #pharo do: [ spec package: 'Example-Platform' with: 'Example-Platform.pharo'.]. spec for: #squeak do: [ spec package: 'Example-Platform' with: 'Example-Platform.squeak'.].! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson01 " [ see metod: #version01: ] Version 0.1 represents the simplest version specification possible. In the method #version01, version 0.1 is defined with a single package 'Example-Core-anon.8' that is loaded from the repository 'http://www.example.com/Example'. Looking at this method you will notice a couple of things. Immediately after the method selector you see the pragma definition: The pragma indicates that the version created in this method should be associated with version '0.1' of the Tutorial project. Looking a little closer you see that the argument to the method, , is the only variable in the method and it is used as the receiver to four different messages: - #for:do: - #package:with: - #file: - #repository: With the evaluation of each block expression, a new object is pushed on a stack and the messages within the block are sent to the object on the top of the stack. So the method should be read as: Create version '0.1'. The #common code for version '0.1' (#for:do:) consists of a package named 'Example-Core' (#package:with:) whose file attribute is 'Example-Core-anon.8' (#file:) and whose repository attribute is 'http://www.example.com/Example' (#repository:). We can see the spec created for version 0.1 by printing the following expression: (MetacelloTutorialConfig project version: '0.1') spec Note that in creating version '0.1' the #common attribute is extracted out. In addition to #common, there are pre-defined attributes for each of the platforms upon which Metacello runs (#pharo, #squeak, #gemstone and #squeakCommon). #squeakCommon is used for both #pharo and #squeak. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson02 " [ see method: #version02: ] For version 0.2, we've simply updated the package version to 'Example-Core-anon.9', which can be confirmed by printing the following expression: (MetacelloTutorialConfig project version: '0.2') spec "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson03 " [ see method: #version03: ] For version 0.3, we've updated the package version to 'Example-Core-anon.10' and added an additional package 'Example-Tests-anon.3', which can be confirmed by printing the following expression: (MetacelloTutorialConfig project version: '0.3') spec As is often the case, the two packages share the same repository, so specifying a repository with each package is redundant. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson04 " [ see method: #version04: ] The specification for version 0.4 is basically the same as version 0.3. Instead of listing a repository with each package we specify a project repository that applies to all packages. Compare the printStrings for the specs for each version: (MetacelloTutorialConfig project version: '0.3') spec (MetacelloTutorialConfig project version: '0.4') spec "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson05 " [ see method: #version05: ] For version 0.5 we've added an additional package to the mix: 'Example-AddOn': (MetacelloTutorialConfig project version: '0.5') spec Of course, the point of specifiying packages in Metacello is to be able to load versions. Here are a couple examples of loading versions of the Tutorial. If you print the result of each expression, you will see the list of packages in load order (note that for the tutorial, we are using the MetacelloNullRecordingMCSpecLoader. This class records which packages are loaded and the order that they are loaded in among other things instead of actually loading the packages. (MetacelloTutorialConfig project version: '0.1') load. (MetacelloTutorialConfig project version: '0.4') load. (MetacelloTutorialConfig project version: '0.5') load. You will note that in each case, all of the packages associated with the version are loaded, which is the default. If you want to load a subset of the packages in a project, you may list the packages that you are interested in as an argument to the #load: method: (MetacelloTutorialConfig project version: '0.5') load: { 'Example-Tests'. 'Example-Core' }. Note that the ordering of the packages is based on the order in which the packages are specified. If you evaluate the following expression: (MetacelloTutorialConfig project version: '0.5') load: { 'Example-Tests'. }. Only the package is 'Example-Tests'. By default the packages are ordered, but there are no implicit dependencies. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson06 " [ see method: #version06: ] In version 0.6 we've added dependency information in the form of the #requires: directive. Both 'Example-Tests' and 'Example-AddOn' require 'Example-Core' to be loaded before they are loaded. Print the following expressions to see that the requires directives are being followed: (MetacelloTutorialConfig project version: '0.5') load: { 'Example-Tests'. }. (MetacelloTutorialConfig project version: '0.6') load: { 'Example-Tests'. }. (MetacelloTutorialConfig project version: '0.6') load: 'Example-AddOn'. (MetacelloTutorialConfig project version: '0.6') load: { 'Example-AddOn'. 'Example-Tests'. }. With version 0.6 we are mixing structural information (required packages and repository) with the dynamic file version info. It is expected that over time the file version info will change from version to version while the structural information will remain relatively static. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson07 " [ see method: #baseline07: and #version07: ] For version 0.7, we are ceating a baseline version specification which is expected to be used across several versions and the version specification which is restricted to the file versions. In method #baseline07: the structure of version '0.7-baseline' is specified. The repository is listed, the packages are listed and the required packages are defined. We'll cover the #blessing: in a later lesson. In method #version07: the file versions are specified. You will note that the pragma as an #imports: component that specifies the list of versions that this version (version '0.7') is based upon. In fact, if you print the spec for '0.7-baseline' and then print the spec for '0.7' you can see that '0.7' is a composition of both versions: (MetacelloTutorialConfig project version: '0.7-baseline') spec. (MetacelloTutorialConfig project version: '0.7') spec. Of course if you print the '0.6' spec and the '0.7' spec you can see that they specify exactly the same information in a slightly different way: (MetacelloTutorialConfig project version: '0.6') spec. (MetacelloTutorialConfig project version: '0.7') spec. and if you load each of the versions, you will see that they load the same packages, in the same order: (MetacelloTutorialConfig project version: '0.6') load. (MetacelloTutorialConfig project version: '0.7') load. Finally, even though version '0.7-baseline' does not have explicit package versions, you may load the version. When the 'real' loader encounters a package name (without version information) it will attempt to load the latest version of the package from the repository. With the MetacelloNullRecordingMCSpecLoader the packages names are 'loaded': (MetacelloTutorialConfig project version: '0.7-baseline') load. Of course when a number of developers are working on a project it may be useful to load a #baseline version so that you get the latest work from all of the project members. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson08 " [ see method: #version08: ] In version 0.8 we've simply updated the package versions, which can be seen by comparing the results of loading version 0.7 and 0.8: (MetacelloTutorialConfig project version: '0.7') load. (MetacelloTutorialConfig project version: '0.8') load. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson10 " [ see method: #baseline10: #version10: ] In #baseline10: we've added two things: the 'Example-AddOnTests' package and a specification for groups. The 'Example-AddOnTests' package has been added to make the idea of needing to group packages a little more appealing. The package requires 'Example-AddOn' and 'Example-Tests'. With two Test packages it would be convenient to be able to load all of the tests with a simple expression like the following: (MetacelloTutorialConfig project version: '1.0') load: { 'Tests'. }. instead of having to explicitly list all of the test projects like this: (MetacelloTutorialConfig project version: '1.0') load: { 'Example-Tests'. 'Example-AddOnTests'. }. This becomes especially useful if over time the project evolves to have more component and test packages. The 'default' group is special in that when a 'default' group is defined, the #load method loads the members of the 'default' group instead of loading all of the packages: (MetacelloTutorialConfig project version: '1.0') load. If you want to load all of the packages in a project, then the pseudo group 'ALL' may be used as follows: (MetacelloTutorialConfig project version: '1.0') load: 'ALL'. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11 " [ see method: #version11: ] In version 0.11 we've defined a couple of attributes that are expected to be used all of the time in a version specification: #blessing: #description: #author: #timestamp: The following lessons cover each of these attributes in more detail. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11Author " [ see method: #version11: ] The author of a version can be defined: (MetacelloTutorialConfig project version: '1.1') author. When using the OB-Metacello tools the author field is automatically updated to reflect the current author as defined in the image. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11Blessing " [ see method: #version11: ] A version can be tagged with a blessing like #alpha, #beta, #release, #development or any other tag that you find useful. The blessing for version 1.1 is #development (MetacelloTutorialConfig project version: '1.1') blessing. The default blessing is #release, so even though we didn't specify a blessing for version 0.5, the blessing is set: (MetacelloTutorialConfig project version: '0.5') blessing. For version 1.1, it is important to explicitly set the blessing, because it imports version '1.0-baseline' whose blessing is #baseline: (MetacelloTutorialConfig project version: '1.0-baseline') blessing. Blessings can be used as a filter. For example, you will notice that the result of the following expression is version 0.6, because #stableVersion answers the latest version whose blessing is _not_ #development, #broken, or #blessing: MetacelloTutorialConfig project stableVersion. MetacelloTutorialConfig project stableVersion load. The blessing of version 1.1 is #development. To find the latest #development version you would execute this expression: MetacelloTutorialConfig project latestVersion: #development. (MetacelloTutorialConfig project latestVersion: #development) load. You can get the very last version independent of blessing by executing this expression: MetacelloTutorialConfig project bleedingEdge. MetacelloTutorialConfig project bleedingEdge load. In general, the #development blessing should be used for any version that is unstable. Once a version has stabilized, a different blessing should be applied. The following expression will load the latest version of all of the packages for the latest #baseline version: (MetacelloTutorialConfig project latestVersion: #baseline) load. Since the latest #baseline version should reflect the most up-to-date project structure, executing the previous expression should load the absolute bleeding edge of the project. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11Descripton " [ see method: #version11: ] A description can be defined for a version: (MetacelloTutorialConfig project version: '1.1') description. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson11Timestamp " [ see method: #version11: ] The timestamp of a version can be defined: (MetacelloTutorialConfig project version: '1.1') timestamp. When using the OB-Metacello tools the timestamp field is automatically updated to reflect the current DateAndTime that the update was made. The timestamp is a String "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson12DoIts " [ see methods: #version12: #preloadForCore #postloadForCore:package: ] Occassionally, you find that you need to perform an expression either before a package is loaded, or after a package is loaded. To do that in Metacello, you can define a preLoadDoIt selector and a postLoadDoIt selector: (MetacelloTutorialConfig project version: '1.2') spec. If you open a Transcript and execute the following expression, you will see that the pre load and post load methods were executed: (MetacelloTutorialConfig project version: '1.2') load. The pre/post load methods may take 0, 1 or 2 args. The loader is the first optional argument and the loaded packageSpec is the second optional argument. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson13 " [ see methods: #baseline13: #version13: ] For version 1.3 we are adding a platform specific package 'Example-Platform'. 'Example-Platform' requires 'Example-Core'. On GemStone, Pharo and Squeak, a branch of the 'Example-Platform' package will be loaded: 'Example-Platform.gemstone', 'Example-Platform.pharo', 'Example-Platform.squeak' respectively will be loaded. Consequently we've updated the baselines with #baseline13: to reflect the structural changes and #version13: reflects the package versions. The platform-specific versions and branches are defined in the #for:do: block for the corresponding platforms: #gemstone, #pharo, #squeak (in both methods) The result of the following expression will depend on the platform upon which you are running: (MetacelloTutorialConfig project version: '1.3') load. Note that when you execute the following expresson to load 'Example-Core' that the correct 'Example-Platform' is loaded as well: (MetacelloTutorialConfig project version: '1.3') load: 'Example-Core'. If you look at the specification for 'Example-Core' (in #baseline13:) you will note that 'Example-Core' #includes: 'Example-Platform'. The #includes: directive means that the package 'Example-Platform' should be loaded whenever the 'Example-Core' package is loaded. Also note when you evaluate the following expression that the 'Example-Platform' package is loaded before 'Example-Tests' as if 'Example-Tests' #requires: 'Example-Platform': (MetacelloTutorialConfig project version: '1.3') load: 'Example-Tests'. When you use the #includes: directive, you are not only specifying that the listed packages should be loaded when the parent package is loaded, but that the #included: packages should be loaded _before_ any packages that require the parent package. "! ! !MetacelloTutorialConfig methodsFor: 'lessons' stamp: 'dkh 3/18/2011 14:15:41'! lesson14 " STILL UNDER CONSTRUCTION: Open your browsers on the class MetacelloProjectRefTutorial to continue the tutorial. "! ! !MetacelloTutorialConfig methodsFor: 'doits' stamp: 'dkh 3/18/2011 14:15:41'! postloadForCore: loader package: packageSpec Transcript cr; show: '#postloadForCore executed, Loader: ', loader printString, ' spec: ', packageSpec printString.! ! !MetacelloTutorialConfig methodsFor: 'doits' stamp: 'dkh 3/18/2011 14:15:41'! preloadForCore Transcript cr; show: '#preloadForCore executed'.! ! !MetacelloTutorialConfig methodsFor: 'accessing' stamp: 'dkh 3/18/2011 14:15:41'! project "NOTE: The MetacelloNullRecordingMCSpecLoader is being used to prevent packages from being loaded, see MetacelloConfigTemplate>>project for an example #project method that loads the package for real" ^ project ifNil: [ | constructor loader | "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. loader := MetacelloNullRecordingMCSpecLoader new. loader evalDoits: true. project loader: loader. project ]! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version01: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec file: 'Example-Core-anon.8'; repository: 'http://www.example.com/Example' ] ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version02: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec file: 'Example-Core-anon.9'; repository: 'http://www.example.com/Example' ] ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version03: spec spec for: #common do: [ spec package: 'Example-Core' with: [ spec file: 'Example-Core-anon.10'; repository: 'http://www.example.com/Example' ]; package: 'Example-Tests' with: [ spec file: 'Example-Tests-anon.3'; repository: 'http://www.example.com/Example' ]]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version04: spec spec for: #common do: [ spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core' with: 'Example-Core-anon.10'; package: 'Example-Tests' with: 'Example-Tests-anon.3' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version05: spec spec for: #common do: [ spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core' with: 'Example-Core-anon.11'; package: 'Example-Tests' with: 'Example-Tests-anon.3'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version06: spec spec for: #common do: [ spec repository: 'http://www.example.com/Example'. spec package: 'Example-Core' with: 'Example-Core-anon.12'; package: 'Example-Tests' with: [ spec file: 'Example-Tests-anon.3'; requires: 'Example-Core' ]; package: 'Example-AddOn' with: [ spec file: 'Example-AddOn-anon.1'; requires: 'Example-Core' ]]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version07: spec spec for: #common do: [ spec package: 'Example-Core' with: 'Example-Core-anon.12'; package: 'Example-Tests' with: 'Example-Tests-anon.3'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version08: spec spec for: #common do: [ spec package: 'Example-Core' with: 'Example-Core-anon.15'; package: 'Example-Tests' with: 'Example-Tests-anon.6'; package: 'Example-AddOn' with: 'Example-AddOn-anon.2' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version10: spec spec for: #common do: [ spec package: 'Example-Core' with: 'Example-Core-anon.14'; package: 'Example-Tests' with: 'Example-Tests-anon.3'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1'; package: 'Example-AddOnTests' with: 'Example-AddOnTests-anon.1' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version11: spec spec for: #common do: [ spec blessing: #development. spec description: 'Example of a complete version specification'. spec author: 'dkh'. spec timestamp: '10/12/2009 09:26'. spec package: 'Example-Core' with: 'Example-Core-anon.15'; package: 'Example-Tests' with: 'Example-Tests-anon.4'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1'; package: 'Example-AddOnTests' with: 'Example-AddOnTests-anon.1' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version12: spec spec for: #common do: [ spec blessing: #development. spec description: 'Add in doits for Example-Core'. spec author: 'dkh'. spec timestamp: '10/12/2009 09:26'. spec package: 'Example-Core' with: [ spec file: 'Example-Core-anon.16'; preLoadDoIt: #preloadForCore; postLoadDoIt: #postloadForCore:package: ]; package: 'Example-Tests' with: 'Example-Tests-anon.5'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1'; package: 'Example-AddOnTests' with: 'Example-AddOnTests-anon.1' ]. ! ! !MetacelloTutorialConfig methodsFor: 'versions' stamp: 'dkh 3/18/2011 14:15:41'! version13: spec spec for: #common do: [ spec blessing: #development. spec description: 'Add in doits for Example-Core'. spec author: 'dkh'. spec timestamp: '10/13/2009 14:27'. spec package: 'Example-Core' with: 'Example-Core-anon.17'; package: 'Example-Tests' with: 'Example-Tests-anon.6'; package: 'Example-AddOn' with: 'Example-AddOn-anon.1'; package: 'Example-AddOnTests' with: 'Example-AddOnTests-anon.1' ]. spec for: #gemstone do: [ spec package: 'Example-Platform' with: 'Example-Platform.gemstone-dkh.4'.]. spec for: #pharo do: [ spec package: 'Example-Platform' with: 'Example-Platform.pharo-dkh.7'.]. spec for: #squeak do: [ spec package: 'Example-Platform' with: 'Example-Platform.squeak-dkh.3'.].! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! additions additions ifNil: [ additions := Dictionary new ]. ^ additions! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! additions: anObject additions := anObject! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! configuration ^ configuration! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! configuration: anObject configuration := anObject! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! from ^ from! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! from: anObject from := anObject! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! modifications modifications ifNil: [ modifications := Dictionary new ]. ^ modifications! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! modifications: anObject modifications := anObject! ! !MetacelloVersionDiffReport methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22'! printOn: aStream | printBlock | printBlock := [ :pkgName :ar | aStream tab: 2; nextPutAll: pkgName asString; cr. aStream tab: 3; nextPutAll: (ar at: 1) asString printString; nextPutAll: ' to '; nextPutAll: (ar at: 2) asString printString; cr ]. aStream nextPutAll: self configuration asString; space; nextPutAll: from asString printString; nextPutAll: ' to '; nextPutAll: to asString printString; cr. aStream tab; nextPutAll: 'Additions:'; cr. self additions keysAndValuesDo: printBlock. aStream tab; nextPutAll: 'Modifications:'; cr. self modifications keysAndValuesDo: printBlock. aStream tab; nextPutAll: 'Removals:'; cr. self removals keysAndValuesDo: printBlock! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! removals removals ifNil: [ removals := Dictionary new ]. ^ removals! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! removals: anObject removals := anObject! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! to ^ to! ! !MetacelloVersionDiffReport methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! to: anObject to := anObject! ! !MockLessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 16:09'! lesson ^ lesson! ! !MockLessonView methodsFor: 'gui' stamp: 'LaurentLaffont 1/21/2010 16:10'! showLesson: aLesson withTitle: aString lesson := aLesson. title := aString.! ! !MockLessonView methodsFor: 'gui' stamp: 'DannyChan 2/1/2010 22:02'! showTutorialNode: aTutorialNode lesson:= aTutorialNode lessonInstance. title := aTutorialNode title.! ! !MockLessonView methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 16:10'! title ^ title! ! !Object class methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 28652327! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version. See MetacelloConfigTemplate." ^nil -> 'default'! ! !Object class methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 28652563! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'. See MetacelloConfigTemplate for example" "noop by default"! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 28581496! metacelloIntegerLessThanSelf: anInteger ^self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:08'! metacelloSemanticIntegerLessThanSelf: anInteger ^ self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:09'! metacelloSemanticStringLessThanSelf: anInteger ^ self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/21/2012 20:08'! metacelloSemanticVersionComponentLessThan: aMetacelloVersonComponent ^ self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 28581691! metacelloStringLessThanSelf: anInteger ^self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*metacello-core' stamp: 'dkh 6/5/2012 19:01:24' prior: 28581885! metacelloVersionComponentLessThan: aMetacelloVersonComponent ^self error: 'Invalid Metacello verson component - should be String or Integer.'! ! !Object methodsFor: '*monticellofiletree-core' stamp: 'ChristopheDemarey 9/8/2013 18:34' prior: 67483452! writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent "by default ignore ... is used for Dictionary and Array, i.e., container objects and String which actually encodes itself differently for HTML" ^ SubclassResponsibility signalFor: thisContext sender selector! ! !ProfStef commentStamp: '' prior: 71984924! A ProfStef is the Smalltalk teacher. To start the tutorial, evaluate: ProfStef go. To go to the next lesson evaluate: ProfStef next. To execute your own tutorial: ProfStef goOn: MyOwnTutorial To see a table of contents with all defined tutorials: ProfStef contents! !ProfStef class methodsFor: 'class initialization' stamp: 'LaurentLaffont 1/21/2010 17:15'! default ^ instance ifNil: [instance := self new]! ! !ProfStef class methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:30'! first ^ self default first.! ! !ProfStef class methodsFor: 'navigating' stamp: 'LaurentLaffont 9/18/2011 20:01'! go ^ self default go.! ! !ProfStef class methodsFor: 'navigating' stamp: 'LaurentLaffont 9/18/2011 20:01'! goOn: aTutorialClass ^ self default goOn: aTutorialClass.! ! !ProfStef class methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:30'! last ^ self default last.! ! !ProfStef class methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:01'! next ^ self default next.! ! !ProfStef class methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:01'! previous ^ self default previous.! ! !ProfStef class methodsFor: 'class initialization' stamp: 'LaurentLaffont 9/18/2011 20:13'! reset instance := nil! ! !ProfStef class methodsFor: 'starting' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lesson: aSelector self default tutorial: aTutorialClass lesson: aSelector.! ! !ProfStef class methodsFor: 'starting' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lessonAt: lessonIndex self default tutorial: aTutorialClass lessonAt: lessonIndex.! ! !ProfStef methodsFor: 'gui' stamp: 'LaurentLaffont 1/21/2010 21:05'! close self lessonView close! ! !ProfStef methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:28'! first self player first. ^ self showCurrentLesson.! ! !ProfStef methodsFor: 'starting' stamp: 'tg 2/1/2010 16:02'! go ^ self goOn: SmalltalkSyntaxTutorial.! ! !ProfStef methodsFor: 'starting' stamp: 'tg 2/1/2010 16:02'! goOn: aTutorialClass self player tutorial: aTutorialClass new. ^ self open.! ! !ProfStef methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:28'! last self player last. ^ self showCurrentLesson.! ! !ProfStef methodsFor: 'accessing' stamp: 'DannyChan 2/2/2010 19:39'! lessonView ^ lessonView ifNil: [lessonView := LessonView new]! ! !ProfStef methodsFor: 'accessing' stamp: 'DannyChan 2/2/2010 19:16'! lessonView: aLessonView lessonView := aLessonView.! ! !ProfStef methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:02'! next self player next. ^ self showCurrentLesson.! ! !ProfStef methodsFor: 'gui' stamp: 'tg 2/1/2010 16:02'! open self player first. ^ self showCurrentLesson.! ! !ProfStef methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:38'! player ^ player ifNil: [player := TutorialPlayer new]! ! !ProfStef methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:39'! player: aTutorialPlayer player := aTutorialPlayer.! ! !ProfStef methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:02'! previous self player previous. ^ self showCurrentLesson.! ! !ProfStef methodsFor: 'gui' stamp: 'EstebanLorenzano 7/31/2013 11:10'! showCurrentLesson | progressInfo lesson position size | lesson := self player currentLesson. progressInfo := '(', self tutorialPositionString, '/', self tutorialSizeString, ')'. ^ self lessonView showLesson: lesson withTitle: lesson title, ' ', progressInfo.! ! !ProfStef methodsFor: 'navigating' stamp: 'DannyChan 2/1/2010 21:23'! tutorial: aTutorialClass lesson: aSelector | tutorial | tutorial := aTutorialClass new. self player tutorial: tutorial. self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).! ! !ProfStef methodsFor: 'navigating' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lessonAt: lessonIndex self player tutorial: aTutorialClass new. self player tutorialPosition: lessonIndex. self showCurrentLesson.! ! !ProfStef methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:37'! tutorialPositionString ^ player tutorialPosition asString.! ! !ProfStef methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:38'! tutorialSizeString ^ self player size asString! ! !TutorialPlayer commentStamp: 'LaurentLaffont 1/21/2010 20:34' prior: 71985266! I can navigate through an AbstractTutorial subclass. With #next and #previous you can go forward and backward through the tutorial. ! !TutorialPlayer methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 15:37'! currentLesson ^ self tutorial lessonAt: self tutorialPosition.! ! !TutorialPlayer methodsFor: 'navigating' stamp: 'LaurentLaffont 1/21/2010 20:43'! first self rewind. ^ self currentLesson! ! !TutorialPlayer methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:29'! last tutorialPosition := self size. ^ self currentLesson! ! !TutorialPlayer methodsFor: 'navigating' stamp: 'LaurentLaffont 1/21/2010 15:40'! next self tutorialPosition < self size ifTrue: [tutorialPosition := tutorialPosition + 1]. ^ self currentLesson! ! !TutorialPlayer methodsFor: 'navigating' stamp: 'LaurentLaffont 1/18/2010 12:53'! previous tutorialPosition > 1 ifTrue: [tutorialPosition := tutorialPosition - 1]. ^ self currentLesson! ! !TutorialPlayer methodsFor: 'navigating' stamp: 'LaurentLaffont 1/21/2010 20:43'! rewind tutorialPosition := 1.! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 13:40'! size ^ self tutorial size! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 15:19'! tutorial ^ tutorial ifNil: [tutorial := SmalltalkSyntaxTutorial new]! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 15:22'! tutorial: aTutorial tutorial := aTutorial! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:43'! tutorialPosition ^ tutorialPosition ifNil: [ self rewind. tutorialPosition. ]. ! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'DannyChan 2/1/2010 19:25'! tutorialPosition: aTutorialPosition tutorialPosition := aTutorialPosition ! ! !MCRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22' prior: 24942199! asRepositorySpecFor: aMetacelloMCProject self subclassResponsibility! ! !MCRepository methodsFor: '*metacello-core' stamp: 'dkh 7/24/2012 21:46'! flushForScriptGet "noop" ! ! !MCRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22'! metacelloProjectClassFor: aScriptEngine ^ MetacelloMCProject! ! !MCRepository methodsFor: '*metacello-mc' stamp: 'dkh 6/8/2012 14:04:22'! projectVersion: aString "noop" ! ! !MetacelloPackageSpec methodsFor: 'gofer' stamp: 'dkh 6/8/2012 14:04:22' prior: 25981446! ancestors ^self goferPackage ancestors! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25991701! compareCurrentVersion: anOperator targetVersionStatus: statusIgnored using: anMCLoader self currentPackageLoaded: [:bool | ^bool ] comparing: anOperator notLoaded: [:ignored | ^false ] using: anMCLoader ! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25992004! compareRelativeCurrentVersion: anOperator targetVersionStatus: statusIgnored using: anMCLoader ^self compareCurrentVersion: anOperator targetVersionStatus: statusIgnored using: anMCLoader ! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25992272! compareWorkingCopyNamed: wcName using: comarisonOperator | fileRef wcRef | fileRef := GoferResolvedReference name: self file. wcRef := GoferResolvedReference name: wcName. ^ wcRef compare: fileRef using: comarisonOperator! ! !MetacelloPackageSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25985354! configMethodBodyOn: aStream hasName: hasName indent: indent | hasFile hasRepositories hasPreLoadDoIt hasPostLoadDoIt hasRequiresOrIncludesOrAnswers | hasFile := file ~~ nil. hasRepositories := self repositorySpecs size > 0. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. hasRequiresOrIncludesOrAnswers := (self requires isEmpty and: [ self includes isEmpty and: [self answers isEmpty ]]) not. hasRequiresOrIncludesOrAnswers ifTrue: [ self configMethodBodyOn: aStream hasName: hasName cascading: hasFile | hasRepositories | hasPreLoadDoIt | hasPostLoadDoIt indent: indent ]. self configMethodOn: aStream for: file selector: 'file: ' cascading: hasName | hasRepositories | hasPreLoadDoIt | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers cascade: hasRepositories | hasPreLoadDoIt | hasPostLoadDoIt indent: indent. hasRepositories ifTrue: [ (self repositorySpecs size > 1) ifTrue: [ hasName | hasFile | hasPreLoadDoIt | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers ifTrue: [ aStream cr; tab: indent. ]. aStream nextPutAll: 'repositories: ['; cr; tab: indent + 1; nextPutAll: 'spec'; cr. self repositories configMethodCascadeOn: aStream indent: indent + 1. aStream nextPutAll: ' ]' ] ifFalse: [ hasName | hasFile | hasPreLoadDoIt | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers ifTrue: [ aStream cr; tab: indent ]. self repositories configMethodCascadeOn: aStream indent: indent ]. hasPreLoadDoIt | hasPostLoadDoIt ifTrue: [ aStream nextPut: $; ] ]. self configMethodOn: aStream for: self getPreLoadDoIt selector: 'preLoadDoIt: ' cascading: hasName | hasFile | hasRepositories | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers cascade: hasPostLoadDoIt indent: indent. self configMethodOn: aStream for: self getPostLoadDoIt selector: 'postLoadDoIt: ' cascading: hasName | hasFile | hasRepositories | hasPreLoadDoIt | hasRequiresOrIncludesOrAnswers cascade: false indent: indent. aStream nextPut: $.! ! !MetacelloPackageSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25987583! configMethodCascadeOn: aStream member: aMember last: lastCascade indent: indent aMember methodUpdateSelector == #remove: ifTrue: [ aStream nextPutAll: 'removePackage: ', self name printString ] ifFalse: [ self configShortCutMethodBodyOn: aStream member: aMember indent: indent ]. lastCascade ifTrue: [ aStream nextPut: $. ] ifFalse: [ aStream nextPut: $;; cr ]! ! !MetacelloPackageSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25988046! configMethodOn: aStream indent: indent | hasRepositories hasPreLoadDoIt hasPostLoadDoIt hasRequiresOrIncludesOrAnswers hasFile | hasFile := file ~~ nil. hasRepositories := self repositorySpecs size > 0. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. hasRequiresOrIncludesOrAnswers := (self requires isEmpty and: [ self includes isEmpty and: [self answers isEmpty ]]) not. aStream tab: indent; nextPutAll: 'spec '. hasFile | hasRepositories | hasPreLoadDoIt | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers ifTrue: [ aStream cr; tab: indent + 1; nextPutAll: 'name: ', self name printString; nextPut: $;. self configMethodBodyOn: aStream hasName: true indent: indent + 1 ] ifFalse: [ aStream nextPutAll: 'name: ', self name printString ]! ! !MetacelloPackageSpec methodsFor: 'printing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25988942! configShortCutMethodBodyOn: aStream member: aMember indent: indent | hasFile hasRepositories hasPreLoadDoIt hasPostLoadDoIt hasRequiresOrIncludesOrAnswers | hasFile := file ~~ nil. hasRepositories := self repositorySpecs size > 0. hasPreLoadDoIt := self getPreLoadDoIt ~~ nil. hasPostLoadDoIt := self getPostLoadDoIt ~~ nil. hasRequiresOrIncludesOrAnswers := (self requires isEmpty and: [ self includes isEmpty and: [self answers isEmpty ]]) not. hasRepositories | hasPreLoadDoIt | hasPostLoadDoIt | hasRequiresOrIncludesOrAnswers ifTrue: [ aStream nextPutAll: 'package: ', self name printString, ' '; nextPutAll: aMember methodUpdateSelector asString, ' ['; cr. aStream tab: indent + 1; nextPutAll: 'spec '. self configMethodBodyOn: aStream hasName: false indent: indent + 2. aStream nextPutAll: ' ]'. ^self ]. aStream nextPutAll: 'package: ', self name printString. hasFile ifTrue: [ aStream nextPutAll: ' with: ', file printString ]! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25976262! copySpecTo: aRepositorySpec "Copy current mcz file to the repository named in aRepositorySpec" self loader copySpec: self from: self repositorySpecs to: aRepositorySpec createRepository! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 07/19/2013 15:50' prior: 25992576! currentPackageLoaded: loadedBlock comparing: comarisonOperator notLoaded: notLoadedBlock using: anMCLoader "Use currentVersionInfoFor: because it involves the loader and returns versionInfo for a planned load (atomic loaders) or currently loaded package" | wcName vis | vis := anMCLoader ancestorsFor: self. vis notNil ifTrue: [ | fileRef wcRef | self getFile == nil ifTrue: [ ^ loadedBlock value: false ]. vis do: [ :vi | wcName := vi name. fileRef := GoferVersionReference name: self file. fileRef versionNumber = 0 ifTrue: [ "a shame that GoferVersionReference doesn't have better method for recognizing a missing verion number" "fix for: https://github.com/dalehenrich/metacello-work/issues/185" ^ loadedBlock value: false ]. wcRef := GoferVersionReference name: wcName. (wcRef compare: fileRef using: comarisonOperator) ifTrue: [ ^ loadedBlock value: true ] ]. ^ loadedBlock value: false ]. ^ notLoadedBlock value: true! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25993401! currentPackageLoaded: loadedBlock notLoaded: notLoadedBlock using: anMCLoader "Use currentVersionInfoFor: because it involves the loader and returns versionInfo for a planned load (atomic loaders) or currently loaded package" | wcName vis | vis := anMCLoader ancestorsFor: self. vis notNil ifTrue: [ self getFile == nil ifTrue: [ ^ loadedBlock value: #() value: self file ]. ^ loadedBlock value: vis value: self file ]. ^ notLoadedBlock value! ! !MetacelloPackageSpec methodsFor: 'gofer' stamp: 'dkh 6/8/2012 14:04:22' prior: 25981563! currentVersionInfo ^self goferPackage currentVersionInfo! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22'! ensureLoadUsing: mcLoader self explicitLoadUsing: mcLoader ensureSpecLoader! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25982272! ensureLoadedForDevelopmentUsing: mcLoader "noop" ^true! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25982410! explicitLoadUsing: mcLoader | wc fetchingSpecLoader | ((wc := self workingCopy) ~~ nil and: [ wc needsSaving ]) ifTrue: [ (MetacelloSkipDirtyPackageLoad signal: self) ifTrue: [ Transcript cr; show: 'Skipping load of modified package: ', self file. ^self] ifFalse: [Transcript cr; show: 'Load over modified package: ', self file] ]. "fetch and explicitly load it" fetchingSpecLoader := mcLoader fetchingSpecLoader. fetchingSpecLoader explicitLoadPackageSpecs: (Array with: self) repositories: (fetchingSpecLoader repositoriesFrom: self repositorySpecs). ! ! !MetacelloPackageSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25994266! extractNameFromFile file == nil ifTrue: [ ^nil ]. ^(self loader nameComponentsFrom: self file) first! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25983087! fetch self fetchUsing: self loader! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25983211! fetchPackage: aLoaderPolicy self fetchUsing: (self loader loaderPolicy: aLoaderPolicy; yourself)! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25983405! fetchUsing: mcLoader | fetchingSpecLoader | fetchingSpecLoader := mcLoader fetchingSpecLoader. fetchingSpecLoader linearLoadPackageSpecs: (Array with: self) repositories: (fetchingSpecLoader repositoriesFrom: self repositorySpecs). ! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25989996! file file == nil ifTrue: [ ^self name ]. ^file ! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25974176! file: aString file := aString! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! file: aString constructor: aVersionConstructor aVersionConstructor fileForPackage: aString! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25976551! forceUpdatePackageSpec: updatedSpecs using: anMCLoader self updatePackageSpec: updatedSpecs force: true using: anMCLoader! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25974289! getFile "raw access to iv" ^file! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! getName "raw access to iv" ^ name! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990136! getPostLoadDoIt ^postLoadDoIt! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990257! getPreLoadDoIt ^preLoadDoIt! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22'! getRepositories "raw access to iv" ^ repositories! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25976766! goferBranchPackage: branchName message: commitMessage "uses gofer to do commit ... non-interactive" | latestFile pkgSpec | (file notNil and: [ (self name, '.', branchName) = self file ]) ifTrue: [ latestFile := self loader latestPackage: self file fromRepository: self repositorySpecs. pkgSpec := self copy. latestFile ~~ nil ifTrue: [ pkgSpec file: latestFile. pkgSpec goferCommitPackage: commitMessage. ^ self ] ]. self loader goferCommitBranchPackage: branchName using: self repositorySpecs commitMessage: commitMessage! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25977427! goferCommitPackage: commitMessage "uses gofer to do commit ... non-interactive" | latestFile pkgSpec | ^(file notNil and: [ self name = self file ]) ifTrue: [ latestFile := self loader latestPackage: self name fromRepository: self repositorySpecs. pkgSpec := self copy. pkgSpec file: latestFile. pkgSpec goferCommitPackage: commitMessage ] ifFalse: [ self loader goferCommitPackageUsing: self repositorySpecs commitMessage: commitMessage ] ! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25974406! goferLoaderReference ^file == nil ifTrue: [ GoferPackageReference name: self name ] ifFalse: [ "does Monticello-style #versionInfoFromVersionNamed: matching" MetacelloGoferPackage name: self name packageFilename: self file ]! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25974726! goferPackage goferPackage == nil ifTrue: [ goferPackage := MetacelloGoferPackage name: self name packageFilename: self file ]. ^goferPackage! ! !MetacelloPackageSpec methodsFor: 'testing' stamp: 'dkh 6/30/2012 13:23'! hasRepository ^ self repositorySpecs notEmpty! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! includes: anObject constructor: aVersionConstructor aVersionConstructor includesForPackage: anObject! ! !MetacelloPackageSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25994449! includesForPackageOrdering ^self includes! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25974952! info "test compatibility method" ^self! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990366! isPackageLoaded ^self isPackageLoaded: self loader! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990498! isPackageLoaded: aLoader ^(self workingCopyNameFor: aLoader) ~~ nil! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25983733! load self explicitLoadUsing: self loader! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25983863! loadUsing: mcLoader self loader doingLoads: [ self explicitLoadUsing: mcLoader ] ! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25984033! loadUsing: aLoader gofer: gofer ^aLoader linearLoadPackageSpec: self gofer: gofer! ! !MetacelloPackageSpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22' prior: 25984445! mergeMap | map | map := super mergeMap. map at: #file put: file. map at: #repositories put: self repositories. map at: #preLoadDoIt put: preLoadDoIt. map at: #postLoadDoIt put: postLoadDoIt. ^map! ! !MetacelloPackageSpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22' prior: 25984737! mergeSpec: anotherSpec | newSpec map anotherPackages anotherRepositories | newSpec := super mergeSpec: anotherSpec. map := anotherSpec mergeMap. (anotherRepositories := map at: #repositories) notEmpty ifTrue: [ newSpec repositories: (self repositories isEmpty ifTrue: [ anotherRepositories ] ifFalse: [ self repositories mergeSpec: anotherRepositories ]) ]. ^newSpec! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990648! name name == nil ifTrue: [ name := self extractNameFromFile ]. ^name! ! !MetacelloPackageSpec methodsFor: 'merging' stamp: 'dkh 6/8/2012 14:04:22' prior: 25985208! nonOverridable ^super nonOverridable, #( repositories)! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25984194! packageSpecsInLoadOrder ^{ self. }! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25977980! packagesNeedSavingVisited: visitedProjects using: repos into: aCollection ^self loader packagesNeedSavingUsing: repos into: aCollection! ! !MetacelloPackageSpec methodsFor: 'copying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25976076! postCopy super postCopy. goferPackage := nil. repositories := repositories copy. ! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25990983! postLoadDoIt ^postLoadDoIt! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975084! postLoadDoIt: anObject anObject setPostLoadDoItInMetacelloSpec: self! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! postLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor postLoadDoItForPackage: aSymbol! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25991100! preLoadDoIt ^preLoadDoIt! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975245! preLoadDoIt: anObject anObject setPreLoadDoItInMetacelloSpec: self! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! preLoadDoIt: aSymbol constructor: aVersionConstructor aVersionConstructor preLoadDoItForPackage: aSymbol! ! !MetacelloPackageSpec methodsFor: 'visiting' stamp: 'dkh 6/8/2012 14:04:22' prior: 25993946! projectDo: projectBlock packageDo: packageBlock groupDo: groupBlock packageBlock value: self! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25991205! repositories repositories == nil ifTrue: [ repositories := self project repositoriesSpec ]. ^ repositories! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/8/2012 14:04:22' prior: 25991393! repositories: anObject repositories := anObject! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! repositories: aBlock constructor: aVersionConstructor aVersionConstructor repositoriesForPackage: aBlock! ! !MetacelloPackageSpec methodsFor: 'querying' stamp: 'dkh 6/30/2012 13:30' prior: 25991520! repository self deprecated: 'Use repositories or repositorySpecs'. self repositorySpecs isEmpty ifTrue: [ ^ nil ]. ^ self repositorySpecs first! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975393! repository: aStringOrMetacelloRepositorySpec self repositories repository: aStringOrMetacelloRepositorySpec! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! repository: anObject constructor: aVersionConstructor aVersionConstructor repositoryForPackage: anObject! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975582! repository: aString username: username password: password self repositories repository: aString username: username password: password! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! repository: aString username: username password: password constructor: aVersionConstructor aVersionConstructor repositoryForPackage: aString username: username password: password! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 7/2/2012 18:49'! repositoryDescriptions ^ self repositorySpecs collect: [ :repoSpec | repoSpec description ]! ! !MetacelloPackageSpec methodsFor: 'loading' stamp: 'dkh 6/8/2012 14:04:22' prior: 25984308! repositorySpecs ^self repositories map values! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! requires: anObject constructor: aVersionConstructor aVersionConstructor requiresForPackage: anObject! ! !MetacelloPackageSpec methodsFor: 'private' stamp: 'dkh 6/8/2012 14:04:22' prior: 25994572! resolveToPackagesIn: aVersionSpec visited: visited ^{ self } ! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25978217! savePackage "Interactive save ... prompted for commit message and package name unless MCVersionNameAndMessageRequest handled" | latestFile pkgSpec | ^(file notNil and: [ self name = self file ]) ifTrue: [ latestFile := self loader latestPackage: self name fromRepository: self repositorySpecs. pkgSpec := self copy. pkgSpec file: latestFile. pkgSpec savePackage ] ifFalse: [ self loader savePackageUsing: self repositorySpecs ] ! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975808! setPostLoadDoIt: aSymbol postLoadDoIt := aSymbol! ! !MetacelloPackageSpec methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 25975949! setPreLoadDoIt: aSymbol preLoadDoIt := aSymbol! ! !MetacelloPackageSpec methodsFor: 'construction' stamp: 'dkh 6/8/2012 14:04:22'! supplyingAnswers: anObject constructor: aVersionConstructor aVersionConstructor supplyingAnswersForPackage: anObject! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 9/12/2012 12:14' prior: 25978766! updateForSpawnMethod: sourceSpec "This means that this spec was used in a baseline and will be used in a version .... drop all information that isn't useful" | nm fl | nm := name. fl := file. fl == nil ifTrue: [ "if only name has been set, then force the file to be non-nil, if any attribute besides file is set, then leave file nil" {answers. requires. includes. repositories. preLoadDoIt. postLoadDoIt} detect: [ :each | each ~~ nil ] ifNone: [ fl := name ] ]. super updateForSpawnMethod: sourceSpec. file := repositories := goferPackage := preLoadDoIt := postLoadDoIt := nil. name := nm. file := fl. ^ file == nil! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25979608! updatePackageRepositories: repositorySpecs | resolvedPackageRef | Transcript cr; show: ' Looking up version -> ', self file. resolvedPackageRef := self loader resolveSpec: self from: repositorySpecs. Transcript cr; show: 'Update repositoryGroup -> ', resolvedPackageRef name, ' ' , resolvedPackageRef repository description. resolvedPackageRef version workingCopy repositoryGroup addRepository: resolvedPackageRef repository ! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25980132! updatePackageRepositoriesFor: aVersionSpec "Don't update the repository unless the package is loaded in the image" self workingCopy == nil ifTrue: [ ^self ]. self updatePackageRepositories: self repositorySpecs, aVersionSpec repositorySpecs. ! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25980481! updatePackageSpec: updatedSpecs force: force using: anMCLoader "Add pkg copy to updatedSpecs if the file in current image is different from the receiver's file" | viName | (force not and: [ self getFile == nil ]) ifTrue: [ ^ self ]. "no file explicitly specified in this spec" (viName := self workingCopyNameFor: anMCLoader) == nil ifTrue: [ ^ self ]. "no working copy" viName ~= self file ifTrue: [ | spec | spec := self copy. spec file: viName. updatedSpecs at: spec name put: spec ] ifFalse: [ updatedSpecs at: self name put: #uptodate ]! ! !MetacelloPackageSpec methodsFor: 'development support' stamp: 'dkh 6/8/2012 14:04:22' prior: 25981149! updatePackageSpec: updatedSpecs using: anMCLoader "Add pkg copy to updatedSpecs if the file in current image is different from the receiver's file" self updatePackageSpec: updatedSpecs force: false using: anMCLoader! ! !MetacelloPackageSpec methodsFor: 'visiting' stamp: 'dkh 6/8/2012 14:04:22' prior: 25994121! visitingWithPackages: packages packages at: self name put: self! ! !MetacelloPackageSpec methodsFor: 'gofer' stamp: 'dkh 6/8/2012 14:04:22' prior: 25981698! workingCopy ^self goferPackage workingCopy! ! !MetacelloPackageSpec methodsFor: 'gofer' stamp: 'dkh 6/8/2012 14:04:22' prior: 25981820! workingCopyName | wc | (wc := self workingCopy) == nil ifTrue: [ ^nil ]. wc ancestry ancestors isEmpty not ifTrue: [ ^wc ancestry ancestors first name ]. ^nil! ! !MetacelloPackageSpec methodsFor: 'gofer' stamp: 'dkh 6/8/2012 14:04:22' prior: 25982062! workingCopyNameFor: anMCLoader | vi | (vi := anMCLoader currentVersionInfoFor: self) == nil ifTrue: [ ^nil ]. ^vi name! ! MetacelloMCVersionDiffReport removeSelector: #to:! MetacelloMCVersionDiffReport removeSelector: #to! MetacelloMCVersionDiffReport removeSelector: #removals:! MetacelloMCVersionDiffReport removeSelector: #removals! MetacelloMCVersionDiffReport removeSelector: #printOn:! MetacelloMCVersionDiffReport removeSelector: #modifications:! MetacelloMCVersionDiffReport removeSelector: #modifications! MetacelloMCVersionDiffReport removeSelector: #from:! MetacelloMCVersionDiffReport removeSelector: #from! MetacelloMCVersionDiffReport removeSelector: #configuration:! MetacelloMCVersionDiffReport removeSelector: #configuration! MetacelloMCVersionDiffReport removeSelector: #additions:! MetacelloMCVersionDiffReport removeSelector: #additions! Smalltalk globals removeClassNamed: #MetacelloMCVersionDiffReport! GoferResolvedReference removeSelector: #compare:using:! MetacelloRepositoriesSpec removeSelector: #merge:type:! MetacelloRepositoriesSpec removeSelector: #add:type:! MetacelloVersionConstructor removeSelector: #versionImportPragmasVerifiedDefinedIn:! MetacelloAbstractPackageSpec removeSelector: #packageRepository! MetacelloConfigTemplate removeSelector: #versionDevelopment:! MetacelloConfigTemplate removeSelector: #version10:! MetacelloConfigTemplate removeSelector: #stable:! MetacelloConfigTemplate removeSelector: #fuelMetalevel:! MetacelloConfigTemplate removeSelector: #fileSystemLegacy:! MetacelloConfigTemplate removeSelector: #development:! MetacelloConfigTemplate removeSelector: #baseline10:! MetacelloMCProjectSpec removeSelector: #versionOrNil! MetacelloMCProjectSpec removeSelector: #resolveToLoadableSpec! MetacelloMCProjectSpec removeSelector: #repository:username:password:! MetacelloMCProjectSpec removeSelector: #repository:! MetacelloMCProjectSpec removeSelector: #repository! MetacelloMCProjectSpec removeSelector: #projectPackage:! MetacelloMCProjectSpec removeSelector: #projectDo:packageDo:groupDo:! MetacelloMCProjectSpec removeSelector: #postCopy! MetacelloMCProjectSpec removeSelector: #packageRepository! MetacelloMCProjectSpec removeSelector: #nonOverridable! MetacelloMCProjectSpec removeSelector: #mergeSpec:! MetacelloMCProjectSpec removeSelector: #mergeMap! MetacelloMCProjectSpec removeSelector: #loadListForVersion:! MetacelloMCProjectSpec removeSelector: #load! MetacelloMCProjectSpec removeSelector: #hasNonVersionStringField! MetacelloMCVersionSpec removeSelector: #resolveToLoadableSpecs:map:! MetacelloMCVersionSpec removeSelector: #resolveToLoadableSpecs:! MetacelloMCVersionSpec removeSelector: #resolveToLoadableSpec:forMap:packages:! MetacelloMCVersionSpec removeSelector: #projectDo:packageDo:groupDo:! MetacelloMCVersionSpec removeSelector: #packagesSpec! MetacelloMCVersionSpec removeSelector: #packages:! MetacelloMCVersionSpec removeSelector: #packageSpecsInLoadOrder! MetacelloMCVersionSpec removeSelector: #packageNamed:ifAbsent:! MetacelloMCVersionSpec removeSelector: #packageNamed:forMap:ifAbsent:! MetacelloMCVersionSpec removeSelector: #packageNamed:! MetacelloMCVersionSpec removeSelector: #expandToLoadableSpecNames:! MetacelloMCVersionSpec removeSelector: #defaultPackageNames! MetacelloMCVersionSpec removeSelector: #configPackagesSpecMethodOn:indent:! MetacelloPackageSpec removeSelector: #packageRepository! MetacelloMCVersion removeSelector: #resolveToLoadableSpecs:! MetacelloMCVersion removeSelector: #projects! MetacelloMCVersion removeSelector: #packageNamed:ifAbsent:! MetacelloMCVersion removeSelector: #packageNamed:! MetacelloMCVersion removeSelector: #groups! MetacelloMCVersion removeSelector: #expandToLoadableSpecNames:! MetacelloMCVersion removeSelector: #difference:! MetacelloBaseConfiguration removeSelector: #versionDoesNotExistError:! MetacelloBaseConfiguration removeSelector: #project:! MetacelloBaseConfiguration removeSelector: #project! MetacelloBaseConfiguration removeSelector: #defaultBleedingEdgeVersion! MetacelloBaseConfiguration removeSelector: #bleedingEdge! MetacelloBaseConfiguration class removeSelector: #validate! MetacelloBaseConfiguration class removeSelector: #updateToLatestPackageVersions:! MetacelloBaseConfiguration class removeSelector: #unloadMetacello! MetacelloBaseConfiguration class removeSelector: #saveModifiedPackagesAndConfiguration:! MetacelloBaseConfiguration class removeSelector: #saveConfiguration:! MetacelloBaseConfiguration class removeSelector: #releaseDevelopmentVersion:! MetacelloBaseConfiguration class removeSelector: #project! MetacelloBaseConfiguration class removeSelector: #loadDevelopment! MetacelloBaseConfiguration class removeSelector: #loadBleedingEdge! MetacelloBaseConfiguration class removeSelector: #load! MetacelloBaseConfiguration class removeSelector: #isMetacelloConfig! MetacelloBaseConfiguration class removeSelector: #ensureMetacello! MetacelloBaseConfiguration class removeSelector: #createNewDevelopmentVersion! MetacelloBaseConfiguration class removeSelector: #createNewBaselineVersion! MetacelloBaseConfiguration class removeSelector: #compareVersions! MetacelloBaseConfiguration class removeSelector: #bootstrapPackage:from:! MetacelloBaseConfiguration class removeSelector: #DevelopmentProcess! !Trait method! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self tutorial respondsTo: aSelector) ]! ! !Trait method! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self tutorial respondsTo: aSelector) ]! ! !Trait method! testEachSelectorReturnsALesson | answer | self testedTutorial tutorial do: [:aSelector| answer := (self testedTutorial perform: aSelector). self assert: (answer isKindOf: Lesson). ]! ! !Trait method! testEachSelectorReturnsALesson | answer | self testedTutorial tutorial do: [:aSelector| answer := (self testedTutorial perform: aSelector). self assert: (answer isKindOf: Lesson). ]! ! !Trait method! testLessonAtReturnsCorrespondingLesson | answer | 1 to: (self testedTutorial tutorial size) do: [:index| answer := self testedTutorial lessonAt: index. self assert: (answer isKindOf: Lesson) ] ! ! !Trait method! testLessonAtReturnsCorrespondingLesson | answer | 1 to: (self testedTutorial tutorial size) do: [:index| answer := self testedTutorial lessonAt: index. self assert: (answer isKindOf: Lesson) ] ! ! !Trait method! testNotEmpty self assert: self testedTutorial tutorial notEmpty.! ! !Trait method! testNotEmpty self assert: self testedTutorial tutorial notEmpty.! ! !Trait method! testSizeReturnsNumberOfSelectors self assert: (self testedTutorial tutorial size) equals: self testedTutorial size.! ! !Trait method! testSizeReturnsNumberOfSelectors self assert: (self testedTutorial tutorial size) equals: self testedTutorial size.! ! !Trait method! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ self explicitRequirement! ! !Trait method! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ self explicitRequirement! ! "BaselineOfFileTree"! "BaselineOfMetacello"! "Metacello-Base"! "Metacello-Core"! "Metacello-FileTree"! "Metacello-GitHub"! "Metacello-MC"! "Metacello-PharoCommonPlatform"! "Metacello-Platform"! "Metacello-Platform.pharo30"! "Metacello-ProfStef"! "Metacello-Reference"! "Metacello-TestsCore"! "Metacello-TestsMC"! "Metacello-TestsMCA"! "Metacello-TestsMCB"! "Metacello-TestsMCCore"! "Metacello-TestsMCResources"! "Metacello-TestsPharo20MC"! "Metacello-TestsPlatform"! "Metacello-TestsProfStef"! "Metacello-TestsReference"! "Metacello-TestsTutorial"! "Metacello-ToolBox"! "Metacello-Tutorial"! "Monticello"! "MonticelloFileTree-Core"! "ProfStef-Core"! "ProfStef-Help"! "ProfStef-Tests"! ----End fileIn----! ----QUIT----an Array(14 October 2013 2:14:51 pm) Pharo.image priorSource: 21612993! ----STARTUP----an Array(14 October 2013 2:21:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 2:21:02 pm) Pharo-30481.image priorSource: 23608173! ----STARTUP----an Array(14 October 2013 4:40:02 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(14 October 2013 4:40:05 pm) Pharo.image priorSource: 23608378! ----STARTUP----an Array(14 October 2013 4:46:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 4:46:30 pm) Pharo-30481.image priorSource: 23608593! ----STARTUP----an Array(14 October 2013 6:10:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(14 October 2013 6:10:32 pm) Pharo.image priorSource: 23608798! ----STARTUP----an Array(14 October 2013 6:27:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(14 October 2013 6:27:11 pm) Pharo-30481.image priorSource: 23609013! ----STARTUP----an Array(15 October 2013 1:49:50 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/14/2013 18:07' prior: 71944953! commentForCurrentUpdate ^ '11681 Fix Debugger column printing https://pharo.fogbugz.com/f/cases/11681 4993 Typing cmd+L cancel all typing and we can not undo it https://pharo.fogbugz.com/f/cases/4993 11871 Small reoganization in tools https://pharo.fogbugz.com/f/cases/11871'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/14/2013 18:07'! script137 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.7.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.6.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.565.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-StephaneDucasse.44.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.151.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.97.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.149.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.954.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.640.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1320.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/14/2013 18:07'! update30482 "self new update30482" self withUpdateLog: '11681 Fix Debugger column printing https://pharo.fogbugz.com/f/cases/11681 4993 Typing cmd+L cancel all typing and we can not undo it https://pharo.fogbugz.com/f/cases/4993 11871 Small reoganization in tools https://pharo.fogbugz.com/f/cases/11871'. self loadTogether: self script137 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractMethodConverter commentStamp: '' prior: 68707706! An AbstractMessageConverter is a wrapper used to switch which information to retrieve from a method. This way, you can avoid switch case, you just have to use set the correct filter! !ByteCodeMethodConverter commentStamp: '' prior: 42145473! A ByteCodeMessageConverter is a wrapper wich display the bytecode of the provided message! !SourceMethodConverter commentStamp: '' prior: 42697281! A SourceMessageConverter is a wrapper wich display the source code of the provided message! !TimeStampMethodConverter commentStamp: '' prior: 42758796! A TimeStampMessageConverter is a wrapper wich display the timestamp of the provided message! !SearchFacade commentStamp: '' prior: 42653791! SearchFacade is a facade for creating searching dialog window! !AbstractMethodConverter commentStamp: '' prior: 73953140! An AbstractMessageConverter is a wrapper used to switch which information to retrieve from a method. This way, you can avoid switch case, you just have to use set the correct filter! !ByteCodeMethodConverter commentStamp: '' prior: 73953395! A ByteCodeMessageConverter is a wrapper wich display the bytecode of the provided message! !SourceMethodConverter commentStamp: '' prior: 73953555! A SourceMessageConverter is a wrapper wich display the source code of the provided message! !TimeStampMethodConverter commentStamp: '' prior: 73953719! A TimeStampMessageConverter is a wrapper wich display the timestamp of the provided message! !Object methodsFor: '*Tools-Browser' stamp: 'bkv 7/1/2003 12:33' prior: 28582228! break "This is a simple message to use for inserting breakpoints during debugging. The debugger is opened by sending a signal. This gives a chance to restore invariants related to multiple processes." BreakPoint signal. "nil break."! ! !SearchFacade commentStamp: '' prior: 73953872! SearchFacade is a facade for creating searching dialog window! !SpecDebuggerStack methodsFor: 'printing' stamp: 'AndreiChis 10/14/2013 10:24' prior: 69338505! "protocol: printing" columnsFor: anEntry "Answer the array of contexts." | method classLocation receiverClass | method := anEntry home method. classLocation := method methodClass. receiverClass := anEntry receiver class. "If the receiver is differen from the implementor, show the original method implementor" classLocation = receiverClass ifTrue: [ classLocation := classLocation name ] ifFalse: [ classLocation := receiverClass name, '(', classLocation name, ')' ]. anEntry isBlockContext ifTrue: [ classLocation := '[...] in ', classLocation ]. ^ {classLocation. method selector asString}! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'kilonalios 10/13/2013 13:58' prior: 29569321! cancel (self confirm: 'This action will cancel your changes. Is it OK to cancel changes?' translated) ifTrue: [self setText: self getText. self setSelection: self getSelection.]! ! SpecDebuggerStack removeSelector: #buildClassNameFor:! "Morphic-Base"! "Spec-Debugger"! "Tools"! ----End fileIn----! ----QUIT----an Array(15 October 2013 1:50:02 am) Pharo.image priorSource: 23609218! ----STARTUP----an Array(15 October 2013 1:57:43 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 1:57:43 am) Pharo-30482.image priorSource: 23624603! ----STARTUP----an Array(15 October 2013 8:05:21 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/15/2013 08:01' prior: 73941173! commentForCurrentUpdate ^ '11877 Improve testClassRespectsPolymorphismWithTrait error message https://pharo.fogbugz.com/f/cases/11877 11870 move shrinking methods to own class https://pharo.fogbugz.com/f/cases/11870 11878 Move KMBuilder deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11878 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/15/2013 08:01'! script138 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.9.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-MarcusDenker.122.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-MarcusDenker.42.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-MarcusDenker.25.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1641.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.151.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.550.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.953.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-EstebanLorenzano.153.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.109.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1320.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/15/2013 08:01'! update30483 "self new update30483" self withUpdateLog: '11877 Improve testClassRespectsPolymorphismWithTrait error message https://pharo.fogbugz.com/f/cases/11877 11870 move shrinking methods to own class https://pharo.fogbugz.com/f/cases/11870 11878 Move KMBuilder deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11878 '. self loadTogether: self script138 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMBuilder methodsFor: '*Deprecated30' stamp: 'GuillermoPolito 5/4/2013 16:29' prior: 36806711! attachShortcutCategory: aByteSymbol to: aClass self deprecated: 'Static shortcuts should not be used. Configure them locally in your morph, or use #setAsGlobalCategory: to configure a globally system category'. KMRepository default attachCategoryName: aByteSymbol to: aClass.! ! !ClassTest methodsFor: 'testing' stamp: 'CamilloBruni 10/15/2013 01:27' prior: 49979837! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !ChunkImportTestCase methodsFor: 'importing-code' stamp: 'CamilloBruni 10/15/2013 01:17' prior: 45452493! testImportAClassCategory | class classOrganizationString chunk | classOrganizationString := '(#testing testImportAMethod testImportAClass) (#auxiliar importAClass)'. chunk := '!!{1} reorganize!!'. SystemAnnouncer uniqueInstance suspendAllWhile: [ [ class := self importAClass. "we write the methods we will categorize" class compileSilently: 'testImportAClass'. class compileSilently: 'testImportAMethod'. class compileSilently: 'importAClass'. CodeImporter evaluateString: (chunk format: { class name asString }), classOrganizationString. "we do not care about the order of the output just that all the elements are present" self assertCollection: (classOrganizationString trimBoth findTokens: String cr, ' ') sorted equals: (class organization stringForFileOut findTokens: String cr, ' ') sorted. ] ensure: [ class ifNotNil: [ class removeFromSystem ] ] ]! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'CamilloBruni 10/15/2013 01:20' prior: 45453469! testBytecode self assertCollection: (Object>>#halt) bytecode equals: #[64 209 135 120]! ! !CommandLineArgumentsTest methodsFor: 'tests' stamp: 'CamilloBruni 10/15/2013 01:19' prior: 19729900! testAllParameters self assertCollection: self commandLine arguments equals: self parameters! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 01:03'! assertCollection: actual equals: expected "Specialized test method that generates a proper error message for collection" ^ self assert: expected = actual description: [ self comparingCollectionBetween: actual and: expected ]! ! !TAssertable methodsFor: 'private' stamp: 'CamilloBruni 10/15/2013 01:16'! comparingCollectionBetween: left and: right | additionalLeft additionalRight sortBlock| "use a very slow sort block" sortBlock := [ :a :b | a asString <= b asString ]. additionalLeft := (left difference: right) sorted: sortBlock. additionalRight := (right difference: left) sorted: sortBlock. ^ String streamContents: [:stream | stream nextPutAll: 'Given Collections do not match. Got '; lf; tab; nextPutAll: 'left := '; print: left; nextPut: $.; lf; nextPutAll: ' instead of '; tab; nextPutAll: ' right :='; print: left; nextPut: $.; lf. left size = right size ifFalse: [ stream nextPutAll: 'Collection size does not match: left='; print: left size; nextPutAll: ' vs. right='; print: right size; lf ]. additionalLeft isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalLeft size; nextPutAll: ' additional element(s) in the left collection: '; tab; print: additionalLeft ]. additionalRight isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalRight size; nextPutAll: ' additional element(s) in the right collection: '; tab; print: additionalRight ]]! ! !ConfigurationCommandLineHandlerTest methodsFor: 'tests' stamp: 'CamilloBruni 10/15/2013 01:20' prior: 69106454! testGroups | cli | cli := self command: #('http://ss3.gemstone.com/ss/MetaRepoForPharo20' '--group=foo'). self assertCollection: cli groups equals: {'foo'}. cli := self command: #('http://ss3.gemstone.com/ss/MetaRepoForPharo20' '--group=foo,boo'). self assertCollection: cli groups equals: {'foo' . 'boo'}.! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'CamilloBruni 10/15/2013 01:19' prior: 68680311! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | (TClassDescription >> selector) sourceCode. self assert: (TClassDescription >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list #superclass:layout, #initializeLayout, #initializeLayoutWithSlots: abd #layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription #layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) #baseClass and #classClass have their equivalens in TraitDescription (baseTrait classTrait )" self assertCollection: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #initializeLayout #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: ) asSet. "#isClassTrait, #baseTrait, #isBaseTrait and #classTrait have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names #copyTraitExpresion and #addExclusionOf: have no equivalent in classes" self assertCollection: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #isBaseTrait #classTrait) asSet! ! SmalltalkImage removeSelector: #shrinkToKernelWith:! SmalltalkImage removeSelector: #shrinkToKernel! SmalltalkImage removeSelector: #privShrinkingProcessWith:! SmalltalkImage removeSelector: #privShrinkingProcess! SmalltalkImage removeSelector: #privShrinkUnicodeTables! SmalltalkImage removeSelector: #privRecompileAll! SmalltalkImage removeSelector: #privCleanUnloadMethods! SmalltalkImage removeSelector: #privCleanTextConstants! SmalltalkImage removeSelector: #privCleanStartUpList! SmalltalkImage removeSelector: #privCleanShutDownList! SmalltalkImage removeSelector: #privCleanProcesses! SmalltalkImage removeSelector: #privCleanMonticello! SmalltalkImage removeSelector: #privCleanGlobals! SmalltalkImage removeSelector: #privCleanChangeSets! SmalltalkImage removeSelector: #kernelPackageNames! ShrinkingCommandLineHandler removeSelector: #activate! ShrinkingCommandLineHandler class removeSelector: #description! ShrinkingCommandLineHandler class removeSelector: #commandName! Smalltalk globals removeClassNamed: #ShrinkingCommandLineHandler! !Trait method! assertCollection: actual equals: expected "Specialized test method that generates a proper error message for collection" ^ self assert: expected = actual description: [ self comparingCollectionBetween: actual and: expected ]! ! !Trait method! assertCollection: actual equals: expected "Specialized test method that generates a proper error message for collection" ^ self assert: expected = actual description: [ self comparingCollectionBetween: actual and: expected ]! ! !Trait method! comparingCollectionBetween: left and: right | additionalLeft additionalRight sortBlock| "use a very slow sort block" sortBlock := [ :a :b | a asString <= b asString ]. additionalLeft := (left difference: right) sorted: sortBlock. additionalRight := (right difference: left) sorted: sortBlock. ^ String streamContents: [:stream | stream nextPutAll: 'Given Collections do not match. Got '; lf; tab; nextPutAll: 'left := '; print: left; nextPut: $.; lf; nextPutAll: ' instead of '; tab; nextPutAll: ' right :='; print: left; nextPut: $.; lf. left size = right size ifFalse: [ stream nextPutAll: 'Collection size does not match: left='; print: left size; nextPutAll: ' vs. right='; print: right size; lf ]. additionalLeft isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalLeft size; nextPutAll: ' additional element(s) in the left collection: '; tab; print: additionalLeft ]. additionalRight isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalRight size; nextPutAll: ' additional element(s) in the right collection: '; tab; print: additionalRight ]]! ! !Trait method! comparingCollectionBetween: left and: right | additionalLeft additionalRight sortBlock| "use a very slow sort block" sortBlock := [ :a :b | a asString <= b asString ]. additionalLeft := (left difference: right) sorted: sortBlock. additionalRight := (right difference: left) sorted: sortBlock. ^ String streamContents: [:stream | stream nextPutAll: 'Given Collections do not match. Got '; lf; tab; nextPutAll: 'left := '; print: left; nextPut: $.; lf; nextPutAll: ' instead of '; tab; nextPutAll: ' right :='; print: left; nextPut: $.; lf. left size = right size ifFalse: [ stream nextPutAll: 'Collection size does not match: left='; print: left size; nextPutAll: ' vs. right='; print: right size; lf ]. additionalLeft isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalLeft size; nextPutAll: ' additional element(s) in the left collection: '; tab; print: additionalLeft ]. additionalRight isEmpty ifFalse: [ stream nextPutAll: 'Got '; print: additionalRight size; nextPutAll: ' additional element(s) in the right collection: '; tab; print: additionalRight ]]! ! "ConfigurationCommandLineHandler-Tests"! "Deprecated30"! "KernelTests"! "Keymapping-Pragmas"! "SUnit-Core"! "System-CommandLine"! "System-Support"! "Tests"! ----End fileIn----! ----QUIT----an Array(15 October 2013 8:05:32 am) Pharo.image priorSource: 23624808! ----STARTUP----an Array(15 October 2013 8:12:13 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 8:12:13 am) Pharo-30483.image priorSource: 23649747! ----STARTUP----an Array(15 October 2013 9:46:18 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 10/15/2013 09:41' prior: 73956763! commentForCurrentUpdate ^ ' issue 11867: GrowlEnhancements so that we can see the text when Sunit is running https://pharo.fogbugz.com/f/cases/11867 issue 11866 More Degenerated Rectangle fixed https://pharo.fogbugz.com/f/cases/11866 issue 11519 Merge Color and Translucent Color (part 1) Just the little improvements first https://pharo.fogbugz.com/f/cases/11519'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/15/2013 09:41'! script139 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.9.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.781.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-StephaneDucasse.1643.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.166.mcz Manifest-CriticBrowser-MarcusDenker.124.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.152.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-StephaneDucasse.110.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.19.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1320.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/15/2013 09:42'! update30484 "self new update30484" self withUpdateLog: ' issue 11867: GrowlEnhancements so that we can see the text when Sunit is running https://pharo.fogbugz.com/f/cases/11867 issue 11866 More Degenerated Rectangle fixed https://pharo.fogbugz.com/f/cases/11866 issue 11519 Merge Color and Translucent Color (part 1) Just the little improvements first https://pharo.fogbugz.com/f/cases/11519'. self loadTogether: self script139 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GrowlMorph commentStamp: 'TudorGirba 10/25/2011 17:14' prior: 42326518! A GrowlMorph is a little Morph to announce event happening. Freely inspired from the MIT Snarl developed by Tony Garnock-Jones. GrowlMorph new openInWorld 10 timesRepeat: [ (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) " vanishDelay: 1000; resetVanishTimer". World doOneCycle ] (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) actionBlock: [Transcript open]! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/13/2013 16:52'! testWithBottomDoesNotProduceInvalidRectangle "self debug: #testWithBottomDoesNotProduceInvalidRectangle" | rect1 rect2 | rect1 := 0@10 corner: 50@60. "it is possible to adjust the bottom below the current bottom side" rect2 := rect1 withBottom: 100. self assert: rect2 bottom equals: 100. "it is possible to adjust the bottom above the current bottom side" rect2 := rect1 withBottom: 40. self assert: rect2 bottom equals: 40. "it is possible to adjust the bottom above the current bottom side but not above the top" rect2 := rect1 withBottom: -10. self assert: rect2 bottom equals: 10. self assert: rect2 height isZero ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/13/2013 16:39'! testWithLeftDoesNotProduceInvalidRectangle "self debug: #testWithLeftDoesNotProduceInvalidRectangle" | rect1 rect2 | rect1 := 0@10 corner: 50@60. "it is possible to adjust the left to the left of the current left side" rect2 := rect1 withLeft: -10. self assert: rect2 left equals: -10. "it is possible to adjust the left to the right of the current left side but not over the righ side!!!!!!!!" rect2 := rect1 withLeft: 40. self assert: rect2 left equals: 40. "it is possible to adjust the left to be to the right of the current left side but not over the righ side, at the maximum you will a zero width rectangle!!!!!!!!" rect2 := rect1 withLeft: 80. self assert: rect2 left equals: 50. self assert: rect2 width isZero ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/13/2013 16:44'! testWithRightDoesNotProduceInvalidRectangle "self debug: #testWithRightDoesNotProduceInvalidRectangle" | rect1 rect2 | rect1 := 0@10 corner: 50@60. "it is possible to adjust the right to the right of the current right side" rect2 := rect1 withRight: 100. self assert: rect2 right equals: 100. "it is possible to adjust the right to the left of the current right side but not over the left side!!!!!!!!" rect2 := rect1 withRight: 40. self assert: rect2 right equals: 40. "it is possible to adjust the right to be to the left of the current right side but not over the left side itself, at the maximum you will a zero width rectangle!!!!!!!!" rect2 := rect1 withRight: -10. self assert: rect2 right equals: 0. self assert: rect2 width isZero ! ! !RectangleTest methodsFor: 'tests' stamp: 'StephaneDucasse 10/13/2013 16:47'! testWithTopDoesNotProduceInvalidRectangle "self debug: #testWithTopDoesNotProduceInvalidRectangle" | rect1 rect2 | rect1 := 0@10 corner: 50@60. "it is possible to adjust the top above of the current top side" rect2 := rect1 withTop: -10. self assert: rect2 top equals: -10. "it is possible to adjust the top below of the current top side" rect2 := rect1 withTop: 40. self assert: rect2 top equals: 40. "it is possible to adjust the top below of the current top side but not below the bottom" rect2 := rect1 withTop: 70. self assert: rect2 top equals: 60. self assert: rect2 height isZero ! ! !PolygonMorph methodsFor: 'access' stamp: 'FernandoOlivero 9/5/2013 10:55' prior: 67573263! borderColor: aColor super borderColor: aColor. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) == (aColor isColor and: [aColor isTranslucentButNotTransparent]) ifFalse: ["Need to recompute fillForm and borderForm if translucency of border changes." self releaseCachedState]! ! !PolygonMorph methodsFor: 'drawing' stamp: 'FernandoOlivero 9/5/2013 10:55' prior: 68971841! drawOnFormCanvas: aCanvas "Display the receiver, a spline curve, approximated by straight line segments." | | vertices size < 1 ifTrue: [self error: 'a polygon must have at least one point']. closed & color isTransparent not ifTrue: [aCanvas stencil: self filledForm at: bounds topLeft - 1 color: color]. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: [aCanvas stencil: self borderForm at: bounds topLeft color: borderColor] ifFalse: [self drawBorderOn: aCanvas]. self arrowForms do: [:f | aCanvas stencil: f at: f offset color: (borderColor isColor ifTrue: [borderColor] ifFalse: [color])]! ! !PolygonMorph methodsFor: 'private' stamp: 'FernandoOlivero 9/18/2013 11:15' prior: 29731595! filledForm "Note: The filled form is actually 2 pixels bigger than bounds, and the point corresponding to this morphs' position is at 1@1 in the form. This is due to the details of the fillig routines, at least one of which requires an extra 1-pixel margin around the outside. Computation of the filled form is done only on demand." | bb origin | closed ifFalse: [^ filledForm := nil]. filledForm ifNotNil: [^ filledForm]. filledForm := Form extent: bounds extent+2. "Draw the border..." bb := (BitBlt current toForm: filledForm) sourceForm: nil; fillColor: Color black; combinationRule: Form over; width: 1; height: 1. origin := bounds topLeft asIntegerPoint-1. self lineSegmentsDo: [:p1 :p2 | bb drawFrom: p1 asIntegerPoint-origin to: p2 asIntegerPoint-origin]. "Fill it in..." filledForm convexShapeFill: Color black. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: ["If border is stored as a form, then erase any overlap now." filledForm copy: self borderForm boundingBox from: self borderForm to: 1@1 rule: Form erase]. ^ filledForm! ! !Color methodsFor: 'queries' stamp: 'StephaneDucasse 10/13/2013 21:42'! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." ^ self isTranslucent and: [ self isTransparent not ]! ! !Color methodsFor: 'transformations' stamp: 'StephaneDucasse 10/13/2013 21:46' prior: 19614126! orColorUnlike: theOther "If this color is a lot like theOther, then return its complement, otherwide, return self" ^ (self diff: theOther) < 0.3 ifTrue: [ theOther negated ] ifFalse: [ self ]! ! !ThemeSettings methodsFor: 'accessing' stamp: 'FernandoOlivero 9/18/2013 11:15' prior: 53067976! menuShadowColor ^ Color r: 0.0 g: 0.0 b: 0.0 alpha: 0.666! ! !ThemeSettings methodsFor: 'accessing' stamp: 'FernandoOlivero 9/18/2013 11:15' prior: 53071326! secondarySelectionColor "Answer the value of selectionColor" ^ secondarySelectionColor ifNil: [secondarySelectionColor := (Color r: 0.351 g: 0.939 b: 0.46 alpha: 0.35)]! ! !ThemeSettings methodsFor: 'accessing' stamp: 'FernandoOlivero 9/18/2013 11:15' prior: 53072508! selectionColor "Answer the value of selectionColor" Display depth = 1 ifTrue: [^ Color veryLightGray]. Display depth = 2 ifTrue: [^ Color gray]. ^self autoSelectionColor ifTrue: [self derivedSelectionColor] ifFalse: [selectionColor ifNil: [selectionColor := Color r: 0.0 g: 0.0 b: 0.8 alpha: 0.25]]! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 15:59' prior: 27033135! spacerWidth | sRect baseRect | sRect := bounds. baseRect := self mustTakeIntoAccountCheckSpace ifTrue: [self checkRectangle] ifFalse: [self toggleRectangle]. ^ (self mustTakeIntoAccountToggleSpace or: [self mustTakeIntoAccountCheckSpace]) ifTrue: [ baseRect right + container gapAfterToggle - bounds left] ifFalse: [ baseRect left - bounds left]. ! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:56' prior: 26621847! hasTranslucentColor "Answer true if this any of this morph is translucent but not transparent." self deprecated: 'Use isTranslucentButNotTransparent' on: '14/10/2013' in: #Pharo30. ^ self isTranslucentButNotTransparent! ! !Morph methodsFor: 'testing' stamp: 'StephaneDucasse 10/13/2013 21:49'! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." ^ color isColor and: [ color isTranslucentButNotTransparent ] ! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:50' prior: 26626709! wantsToBeCachedByHand "Return true if the receiver wants to be cached by the hand when it is dragged around. Note: The default implementation queries all submorphs since subclasses may have shapes that do not fill the receiver's bounds completely." self isTranslucentButNotTransparent ifTrue: [ ^ false ]. self submorphsDo: [ :m | m wantsToBeCachedByHand ifFalse: [ ^ false ] ]. ^ true! ! !GrowlMorph commentStamp: 'TudorGirba 10/25/2011 17:14' prior: 73994106! A GrowlMorph is a little Morph to announce event happening. Freely inspired from the MIT Snarl developed by Tony Garnock-Jones. GrowlMorph new openInWorld 10 timesRepeat: [ (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) " vanishDelay: 1000; resetVanishTimer". World doOneCycle ] (GrowlMorph openWithLabel: 'The time' contents: TimeStamp now) actionBlock: [Transcript open]! !GrowlMorph class methodsFor: 'instance creation' stamp: 'IgorStasenko 10/13/2013 18:33'! openWithLabel: aString contents: contentString backgroundColor: aColor labelColor: aLabelColor ^ (self label: aString contents: contentString) backgroundColor: aColor; labelColor: aLabelColor; contentsColor: aLabelColor; openInWorld! ! !GrowlMorph methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 18:47' prior: 23095561! alpha: newAlpha "self alpha = newAlpha ifTrue: [^ self]." alpha := newAlpha. labelAttr color: (self labelColor alpha: alpha). contentsAttr color: (self contentsColor alpha: alpha). self backgroundColor: (self nextColorStep: self backgroundColor). self allMorphsDo: [:m | m borderColor: (self nextColorStep: m borderColor). m color: (self nextColorStep: m color)]. self borderColor isTransparent ifTrue: [self delete].! ! !GrowlMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/2/2012 00:12' prior: 23098086! contentsAttributes ^ { contentsAttr. TextAlignment centered. TextFontChange font2. }! ! !GrowlMorph methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 18:32' prior: 23096244! contentsColor ^ contentsColor ifNil: [ contentsColor := self theme growlContentsColorFor: self ] ! ! !GrowlMorph methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 18:45'! contentsColor: aColor "when you set this contentsColor, it takes precedence over theme one. In certain case (such as for green as in SUnit) it is needed, normally you do not need it." contentsColor := aColor. contentsAttr color: aColor. ! ! !GrowlMorph methodsFor: 'initialization' stamp: 'TudorGirba 8/8/2011 11:32' prior: 23098249! createDismissHandle | handle | handle := self theme growlDismissHandleFor: self. handle on: #mouseUp send: #delete to: self. ^ handle! ! !GrowlMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 8/7/2011 18:10' prior: 23098923! initializeContentsAttributes contentsAttr := TextColor color: self contentsColor. ! ! !GrowlMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 8/7/2011 18:10' prior: 23099090! initializeLabelAttributes labelAttr := TextColor color: self labelColor. ! ! !GrowlMorph methodsFor: 'building' stamp: 'IgorStasenko 10/13/2013 18:54' prior: 23097119! label: labelString contents: contentsString self streamDo: [ :w | w withAttributes: self labelAttributes do: [w nextPutAll: labelString asString; cr]. w withAttributes: self contentsAttributes do: [w nextPutAll: contentsString asString]. ].! ! !GrowlMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/2/2012 00:12' prior: 23099252! labelAttributes ^ { labelAttr. TextAlignment centered. TextFontChange font4. TextEmphasis bold. }! ! !GrowlMorph methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 18:25' prior: 23096377! labelColor ^ labelColor ifNil: [ labelColor := self theme growlLabelColorFor: self ]! ! !GrowlMorph methodsFor: 'accessing' stamp: 'IgorStasenko 10/13/2013 18:43'! labelColor: aColor "when you set this labelColor, it takes precedence over theme one. In certain case (such as for green as in SUnit) it is needed, normally you do not need it." labelColor := aColor. labelAttr color: self labelColor.! ! !GrowlMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 7/19/2011 19:21' prior: 23099434! nextColorStep: aColor ^ aColor alpha: self alpha! ! !TextMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:54'! isTranslucentButNotTransparent "Overridden from BorderedMorph to test backgroundColor instead of (text) color." backgroundColor ifNil: [ ^ true ]. (backgroundColor isColor and: [ backgroundColor isTranslucentButNotTransparent ]) ifTrue: [ ^ true ]. (borderColor isColor and: [ borderColor isTranslucentButNotTransparent ]) ifTrue: [ ^ true ]. ^ false! ! !MorphTreeMorph methodsFor: 'column handling' stamp: 'IgorStasenko 10/13/2013 16:27' prior: 26957688! headerBounds "return the bounds of each top header button (one per column)" | positions controlBounds currPos currLeft | controlBounds := OrderedCollection new. currPos := scroller left. (positions := self columnResizers asOrderedCollection collect: [:r | r position]) ifNotEmpty: [ | currRight | currPos := positions removeFirst x. currLeft := scroller left - scroller offset x. currRight := currPos. controlBounds add: (currLeft @ topHeader top corner: currRight @ topHeader bottom). [positions notEmpty] whileTrue: [ currLeft := currPos + self resizerWidth. currPos := positions removeFirst x. currRight := currPos. controlBounds add: (currLeft @ topHeader top corner: currRight @ topHeader bottom)]. ]. self columnResizers size < self columns size ifTrue: [ currLeft := currPos + self resizerWidth . controlBounds add: ( (currLeft min: scroller right) @ topHeader top corner: (scroller right) @ topHeader bottom)]. ^ controlBounds ! ! !NautilusUI methodsFor: 'widget - method' stamp: 'IgorStasenko 10/13/2013 19:07' prior: 28323913! notifyTitle: title contents: contents GrowlMorph openWithLabel: title contents: contents! ! !NautilusUI methodsFor: 'widget - method' stamp: 'IgorStasenko 10/13/2013 18:36' prior: 28324106! notifyTitle: title contents: contents color: aColor GrowlMorph openWithLabel: title contents: contents backgroundColor: aColor labelColor: Color black ! ! !BorderedMorph methodsFor: 'testing' stamp: 'FernandoOlivero 9/5/2013 10:55'! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." (color isColor and: [color isTranslucentButNotTransparent]) ifTrue: [^ true]. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: [^ true]. ^ false ! ! !ColorEditor methodsFor: 'initialization' stamp: 'StephaneDucasse 10/13/2013 21:42' prior: 19662422! updateColor | newColor | newColor := Color r: r value g: g value b: b value range: 256. newColor := newColor alpha: (a value) / 256. r color: (Color r: r value g: 0 b: 0 range: 256). g color: (Color r: 0 g: g value b: 0 range: 256). b color: (Color r: 0 g: 0 b: b value range: 256). self color: newColor. morph color: newColor! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'IgorStasenko 10/13/2013 18:28' prior: 17366917! runPackagesTestsNotifying: aBoolean self selectedPackages ifNotNil: [:packages || classes label | packages size > 1 ifTrue: [ label := 'Packages: ' ] ifFalse: [ label := 'Package: ' ]. classes := packages gather: [:package | package definedClasses ]. classes := classes select: [:class | class inheritsFrom: TestCase ]. self runClassTests: classes notifying: false. aBoolean ifTrue: [ | color | (classes anySatisfy:[:e | e hasPassedTest ]) ifTrue: [ color := Color green ]. (classes anySatisfy:[:e | e hasFailedTest ]) ifTrue: [ color := Color yellow ]. (classes anySatisfy:[:e | e hasErrorTest ]) ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: label , ((packages collect: #name) joinUsing: ', ') color: color ]].! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'IgorStasenko 10/13/2013 16:11' prior: 32178064! withBottom: y "Return a copy of me with a different bottom y" ^ origin x @ origin y corner: corner x @ (y max: origin y)! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'IgorStasenko 10/13/2013 16:09' prior: 32178388! withLeft: x "Return a copy of me with a different left x (but not going over right side)" ^ (x min: corner x) @ origin y corner: corner x @ corner y! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'IgorStasenko 10/13/2013 16:10' prior: 32178542! withRight: x "Return a copy of me with a different right x" ^ origin x @ origin y corner: (x max: origin x) @ corner y! ! !Rectangle methodsFor: 'rectangle functions' stamp: 'IgorStasenko 10/13/2013 16:10' prior: 32180631! withTop: y "Return a copy of me with a different top y" ^ origin x @ (y min: corner y) corner: corner x @ corner y! ! !StringMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:53'! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." ^ true! ! !SystemWindow methodsFor: 'testing' stamp: 'StephaneDucasse 10/13/2013 21:53' prior: 51776705! wantsToBeCachedByHand "Return true if the receiver wants to be cached by the hand when it is dragged around." self isTranslucentButNotTransparent ifTrue: [ ^ false ]. self clipSubmorphs ifTrue: [ ^ true ]. self bounds = self fullBounds ifTrue: [ ^ true ]. self submorphsDo: [ :m | (self bounds containsRect: m fullBounds) ifFalse: [ m wantsToBeCachedByHand ifFalse: [ ^ false ] ] ]. ^ true! ! !Paragraph class methodsFor: 'settings' stamp: 'FernandoOlivero 9/18/2013 11:15' prior: 29092639! insertionPointColor ^ InsertionPointColor ifNil: [InsertionPointColor := (Color r: 0.0 g: 0.0 b: 0.8 alpha: 0.8)]! ! !Paragraph methodsFor: 'selection' stamp: 'StephaneDucasse 10/13/2013 17:23' prior: 29087009! selectionRectsFrom: characterBlock1 to: characterBlock2 "Return an array of rectangles representing the area between the two character blocks given as arguments." | line1 line2 rects cb1 cb2 w | characterBlock1 <= characterBlock2 ifTrue: [cb1 := characterBlock1. cb2 := characterBlock2] ifFalse: [cb2 := characterBlock1. cb1 := characterBlock2]. cb1 = cb2 ifTrue: [w := self caretWidth. ^ Array with: (cb1 topLeft - (w@0) corner: cb1 bottomLeft + ((w+1)@0))]. line1 := self lineIndexForCharacter: cb1 stringIndex. line2 := self lineIndexForCharacter: cb2 stringIndex. line1 = line2 ifTrue: [^ Array with: (cb1 topLeft corner: cb2 bottomRight)]. rects := OrderedCollection new. rects addLast: (cb1 topLeft corner: (lines at: line1) bottomRight). line1+1 to: line2-1 do: [ :i | | line | line := lines at: i. (line left = rects last left and: [ line right = rects last right ]) ifTrue: [ "new line has same margins as old one -- merge them, so that the caller gets as few rectangles as possible" | lastRect | lastRect := rects removeLast. rects add: (lastRect bottom: line bottom) ] ifFalse: [ "differing margins; cannot merge" rects add: line rectangle ] ]. rects addLast: ((lines at: line2) topLeft rectangle: cb2 bottomLeft). ^ rects! ! StringMorph removeSelector: #hasTranslucentColor! BorderedMorph removeSelector: #hasTranslucentColor! TextMorph removeSelector: #hasTranslucentColor! "Graphics-Primitives"! "Graphics-Tests"! "Growl"! "Kernel"! "Morphic-Base"! "Nautilus"! "Polymorph-Widgets"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(15 October 2013 9:46:36 am) Pharo.image priorSource: 23649952! ----STARTUP----an Array(15 October 2013 9:54:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 9:54:24 am) Pharo-30484.image priorSource: 23682355! ----STARTUP----an Array(15 October 2013 11:13:28 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(15 October 2013 11:13:32 am) Pharo.image priorSource: 23682560! ----STARTUP----an Array(15 October 2013 11:37:32 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 11:37:32 am) Pharo-30484.image priorSource: 23682776! ----STARTUP----an Array(15 October 2013 1:27:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/15/2013 13:07' prior: 73981910! commentForCurrentUpdate ^ '11883 Clean 2 classes from Startup and Shutdownlist each https://pharo.fogbugz.com/f/cases/11883 11884 Remove global ImageImports https://pharo.fogbugz.com/f/cases/11884 11882 Small cleanup in Manifest https://pharo.fogbugz.com/f/cases/11882'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/15/2013 13:07'! script140 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-StephaneDucasse.8.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.9.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-StephaneDucasse.1643.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-StephaneDucasse.110.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1320.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/15/2013 13:08'! update30485 "self new update30485" self withUpdateLog: '11883 Clean 2 classes from Startup and Shutdownlist each https://pharo.fogbugz.com/f/cases/11883 11884 Remove global ImageImports https://pharo.fogbugz.com/f/cases/11884 11882 Small cleanup in Manifest https://pharo.fogbugz.com/f/cases/11882'. self loadTogether: self script140 merge: false. Smalltalk removeFromStartUpList: EditorFindReplaceDialogWindow. Smalltalk removeFromStartUpList: PasteUpMorph. Smalltalk removeFromShutDownList: HttpUrl. Smalltalk removeFromShutDownList: PasteUpMorph. Smalltalk globals removeKey: #ImageImports. self flushCaches. ! ! "ScriptLoader30"! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'MarcusDenker 10/15/2013 07:33' prior: 68398731! setTextModelForClassOrMethod: aCritic | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: aCritic definition. sourceCodeModel behavior: aCritic methodClass. interval := self selectionIntervalFor: aCritic definition. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !WorldMorph class methodsFor: 'system startup' stamp: 'MarcusDenker 10/15/2013 10:32' prior: 41965774! shutDown World ifNotNil: [:world | world triggerEvent: #aboutToLeaveWorld ]! ! !WorldMorph class methodsFor: 'system startup' stamp: 'MarcusDenker 10/15/2013 10:31' prior: 41965935! startUp World ifNotNil: [:world | world restoreMorphicDisplay]! ! !EditorFindReplaceDialogWindow class methodsFor: 'initializing' stamp: 'MarcusDenker 10/15/2013 10:35'! cleanUp Singleton ifNotNil: [ Singleton close. Singleton := nil ]! ! !EditorFindReplaceDialogWindow class methodsFor: 'initializing' stamp: 'MarcusDenker 10/15/2013 10:36' prior: 21144936! initialize "EditorFindReplaceDialogWindow initialize" Singleton := nil.! ! !FLAnalyzer class methodsFor: 'accessing' stamp: 'MarcusDenker 10/15/2013 12:53' prior: 21422333! defaultGlobalSymbols ^ #(#Smalltalk #SourceFiles #Transcript #Undeclared #Display #TextConstants #ActiveWorld #ActiveHand #ActiveEvent #Sensor #Processor #SystemOrganization #World) select: [:each | self environment includesKey: each ]! ! TClassDescription removeSelector: #textBehavior! CompiledMethod removeSelector: #textBehavior! EditorFindReplaceDialogWindow class removeSelector: #startUp! "Fuel"! "Manifest-Core"! "Manifest-CriticBrowser"! "Morphic-Base"! "Text-Edition"! ----End fileIn----! ----QUIT----an Array(15 October 2013 1:27:49 pm) Pharo.image priorSource: 23682983! ----STARTUP----an Array(15 October 2013 1:48:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 1:48:05 pm) Pharo-30485.image priorSource: 23697214! ----STARTUP----an Array(15 October 2013 2:44:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/15/2013 14:42' prior: 74014939! commentForCurrentUpdate ^ '11874 Deadly Delay and Startup Interaction https://pharo.fogbugz.com/f/cases/11874'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/15/2013 14:42'! script141 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-StephaneDucasse.110.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.9.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1644.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.140.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.29.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.196.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-StephaneDucasse.110.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1320.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/15/2013 14:42'! update30486 "self new update30486" self withUpdateLog: '11874 Deadly Delay and Startup Interaction https://pharo.fogbugz.com/f/cases/11874'. self loadTogether: self script141 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InputEventFetcher methodsFor: 'initialize-release' stamp: 'CamilloBruni 10/14/2013 22:25' prior: 23627410! startUp inputSemaphore := Semaphore new. self primSetInputSemaphore: (Smalltalk registerExternalObject: inputSemaphore). inputSemaphore consumeAllSignals. self installEventLoop! ! !AtomicSharedQueue methodsFor: 'signaling' stamp: 'CamilloBruni 10/14/2013 22:25' prior: 17775383! signalNoMoreItems "queue is empty, reset sema signals" availSema consumeAllSignals ! ! !Semaphore methodsFor: 'initialize-release' stamp: 'CamilloBruni 10/14/2013 22:01'! consumeAllSignals "Consume any excess signals the receiver may have accumulated." excessSignals := 0.! ! !Delay class methodsFor: 'timer process' stamp: 'CamilloBruni 10/14/2013 22:25' prior: 41585931! handleTimerEvent "Handle a timer event; which can be either: - a schedule request (ScheduledDelay notNil) - an unschedule request (FinishedDelay notNil) - a timer signal (not explicitly specified) We check for timer expiry every time we get a signal." | nowTick nextTick | "Wait until there is work to do." TimingSemaphore wait. "Process any schedule requests" ScheduledDelay ifNotNil: [ "Schedule the given delay" self scheduleDelay: ScheduledDelay. ScheduledDelay := nil ]. "Process any unschedule requests" FinishedDelay ifNotNil: [ self unscheduleDelay: FinishedDelay. FinishedDelay := nil ]. "Check for clock wrap-around." nowTick := Time millisecondClockValue. nowTick < ActiveDelayStartTime ifTrue: [ "clock wrapped" self saveResumptionTimes. self restoreResumptionTimes ]. ActiveDelayStartTime := nowTick. "Signal any expired delays" [ ActiveDelay notNil and:[ nowTick >= ActiveDelay resumptionTime ]] whileTrue: [ ActiveDelay signalWaitingProcess. SuspendedDelays isEmpty ifTrue: [ ActiveDelay := nil ] ifFalse:[ ActiveDelay := SuspendedDelays removeFirst ]]. "And signal when the next request is due. We sleep at most 1sec here as a soft busy-loop so that we don't accidentally miss signals." nextTick := nowTick + 1000. ActiveDelay ifNotNil: [ nextTick := nextTick min: ActiveDelay resumptionTime ]. nextTick := nextTick min: SmallInteger maxVal. "Since we have processed all outstanding requests, reset the timing semaphore so that only new work will wake us up again. Do this RIGHT BEFORE setting the next wakeup call from the VM because it is only signaled once so we mustn't miss it." TimingSemaphore consumeAllSignals. Delay primSignal: TimingSemaphore atMilliseconds: nextTick. "This last test is necessary for the obscure case that the msecs clock rolls over after nowTick has been computed (unlikely but not impossible). In this case we'd wait for MillisecondClockMask msecs (roughly six days) or until another delay gets scheduled (which may not be any time soon). In any case, since handling the condition is easy, let's just deal with it" Time millisecondClockValue < nowTick ifTrue:[ TimingSemaphore signal ]. "retry" ! ! !Delay class methodsFor: 'snapshotting' stamp: 'CamilloBruni 10/14/2013 22:00' prior: 20639753! shutDown "Suspend the active delay, if any, before snapshotting. It will be reactived when the snapshot is resumed." "Details: This prevents a timer interrupt from waking up the active delay in the midst snapshoting, since the active delay will be restarted when resuming the snapshot and we don't want to process the delay twice." AccessProtect consumeAllSignals. self primSignal: nil atMilliseconds: 0. self saveResumptionTimes. DelaySuspended := true.! ! !Delay class methodsFor: 'snapshotting' stamp: 'CamilloBruni 10/14/2013 21:41' prior: 41591390! startUp "Restart active delay, if any, when resuming a snapshot." "Compare to false since it can be nil" (DelaySuspended = false) ifTrue:[ ^self error: 'Trying to activate Delay twice' ]. DelaySuspended := false. ActiveDelayStartTime := Time millisecondClockValue. self restoreResumptionTimes. AccessProtect signal. ! ! "Collections-Atomic"! "Kernel"! ----End fileIn----! ----QUIT----an Array(15 October 2013 2:44:39 pm) Pharo.image priorSource: 23697419! ----STARTUP----an Array(15 October 2013 2:52:38 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 2:52:38 pm) Pharo-30486.image priorSource: 23713327! ----STARTUP----an Array(15 October 2013 5:54:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/15/2013 16:06' prior: 74029374! commentForCurrentUpdate ^ '11015 Remove old Inspector https://pharo.fogbugz.com/f/cases/11015'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/15/2013 16:06'! script142 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.9.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1644.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.169.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.179.mcz Spec-Debugger-MarcusDenker.169.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.108.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.15.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-StephaneDucasse.110.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1322.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/15/2013 16:06'! update30487 "self new update30487" self withUpdateLog: '11015 Remove old Inspector https://pharo.fogbugz.com/f/cases/11015'. self loadTogether: self script142 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TBehavior methodsFor: '*Tools' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44344948! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !TBehavior methodsFor: '*Tools' stamp: 'SebastianTleye 7/9/2013 11:07' prior: 44345837! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! WeakSetInspector removeSelector: #initialize! WeakSetInspector removeSelector: #fieldList! Smalltalk globals removeClassNamed: #WeakSetInspector! SetInspector removeSelector: #selection! SetInspector removeSelector: #replaceSelectionValue:! SetInspector removeSelector: #removeSelection! SetInspector removeSelector: #fieldListMenu:! SetInspector removeSelector: #fieldList! SetInspector removeSelector: #copyName! SetInspector removeSelector: #arrayIndexForSelection! SetInspector class removeSelector: #menuDictionaryFieldList:! Smalltalk globals removeClassNamed: #SetInspector! OrderedCollectionInspector removeSelector: #selection! OrderedCollectionInspector removeSelector: #selectedObjectIndex! OrderedCollectionInspector removeSelector: #replaceSelectionValue:! OrderedCollectionInspector removeSelector: #fieldList! Smalltalk globals removeClassNamed: #OrderedCollectionInspector! IntegerInspector removeSelector: #selection! IntegerInspector removeSelector: #representations! IntegerInspector removeSelector: #replaceSelectionValue:! IntegerInspector removeSelector: #printStringBase:! IntegerInspector removeSelector: #octal! IntegerInspector removeSelector: #hex! IntegerInspector removeSelector: #fieldList! IntegerInspector removeSelector: #binary! Smalltalk globals removeClassNamed: #IntegerInspector! Inspector removeSelector: #wantsSteps! Inspector removeSelector: #update! Inspector removeSelector: #trashSelector! Inspector removeSelector: #trash:! Inspector removeSelector: #toggleIndex:! Inspector removeSelector: #timeOfLastListUpdate! Inspector removeSelector: #taskbarIcon! Inspector removeSelector: #stepTimeIn:! Inspector removeSelector: #stepAt:in:! Inspector removeSelector: #shoutParser:! Inspector removeSelector: #shoutAboutToStyle:! Inspector removeSelector: #selectionUnmodifiable! Inspector removeSelector: #selectionPrintString! Inspector removeSelector: #selectionIndex! Inspector removeSelector: #selection! Inspector removeSelector: #selectedSlotName! Inspector removeSelector: #selectedClassOrMetaClass! Inspector removeSelector: #selectedClass! Inspector removeSelector: #replaceSelectionValue:! Inspector removeSelector: #referencesToSelection! Inspector removeSelector: #printStringErrorText! Inspector removeSelector: #object:! Inspector removeSelector: #object! Inspector removeSelector: #numberOfFixedFields! Inspector removeSelector: #noteSelectionIndex:for:! Inspector removeSelector: #modelWakeUpIn:! Inspector removeSelector: #isCodeCompletionAllowed! Inspector removeSelector: #inspectorKey:from:! Inspector removeSelector: #inspectSelection! Inspector removeSelector: #inspectElement! Inspector removeSelector: #inspectBasic! Inspector removeSelector: #inspect:! Inspector removeSelector: #initialize! Inspector removeSelector: #initialExtent! Inspector removeSelector: #i2! Inspector removeSelector: #i1! Inspector removeSelector: #guessTypeForName:! Inspector removeSelector: #fieldListMenu:! Inspector removeSelector: #fieldList! Inspector removeSelector: #exploreStrongPointers! Inspector removeSelector: #exploreSelection! Inspector removeSelector: #explorePointers! Inspector removeSelector: #doItReceiver! Inspector removeSelector: #doItContext! Inspector removeSelector: #defsOfSelection! Inspector removeSelector: #copyName! Inspector removeSelector: #contentsSelection! Inspector removeSelector: #contentsIsString! Inspector removeSelector: #contents! Inspector removeSelector: #codePaneMenu:shifted:! Inspector removeSelector: #classVarRefs! Inspector removeSelector: #classOfSelection! Inspector removeSelector: #classHierarchy! Inspector removeSelector: #browseMethodFull! Inspector removeSelector: #browseInstVarRefs! Inspector removeSelector: #browseInstVarDefs! Inspector removeSelector: #browseClassVariables! Inspector removeSelector: #browseClassRefs! Inspector removeSelector: #browseClass! Inspector removeSelector: #baseFieldList! Inspector removeSelector: #accept:! Inspector class removeSelector: #verticalDividerProportion! Inspector class removeSelector: #taskbarIcon! Inspector class removeSelector: #registerToolsOn:! Inspector class removeSelector: #openOn:withEvalPane:withLabel:! Inspector class removeSelector: #openOn:withEvalPane:! Inspector class removeSelector: #openOn:! Inspector class removeSelector: #openAsMorphOn:withLabel:! Inspector class removeSelector: #openAsMorphOn:withEvalPane:withLabel:valueViewClass:! Inspector class removeSelector: #menuFieldList:! Inspector class removeSelector: #inspect:! Inspector class removeSelector: #horizontalDividerProportion! FloatInspector removeSelector: #selection! FloatInspector removeSelector: #replaceSelectionValue:! FloatInspector removeSelector: #numberOfFixedFields! FloatInspector removeSelector: #fieldList! FloatInspector removeSelector: #elements! Smalltalk globals removeClassNamed: #FloatInspector! DictionaryInspector removeSelector: #sendersOfSelectedKey! DictionaryInspector removeSelector: #selectionReferences! DictionaryInspector removeSelector: #selection! DictionaryInspector removeSelector: #replaceSelectionValue:! DictionaryInspector removeSelector: #renameEntry! DictionaryInspector removeSelector: #removeSelection! DictionaryInspector removeSelector: #refreshView! DictionaryInspector removeSelector: #initialize! DictionaryInspector removeSelector: #fieldListMenu:! DictionaryInspector removeSelector: #fieldList! DictionaryInspector removeSelector: #copyName! DictionaryInspector removeSelector: #contentsIsString! DictionaryInspector removeSelector: #calculateKeyArray! DictionaryInspector removeSelector: #addEntry:! DictionaryInspector removeSelector: #addEntry! DictionaryInspector class removeSelector: #menuDictionaryFieldList:! Smalltalk globals removeClassNamed: #DictionaryInspector! ContextInspector removeSelector: #selection! ContextInspector removeSelector: #fieldList! Smalltalk globals removeClassNamed: #ContextInspector! CompiledMethodInspector removeSelector: #selectionUnmodifiable! CompiledMethodInspector removeSelector: #selection! CompiledMethodInspector removeSelector: #fieldList! CompiledMethodInspector removeSelector: #contentsIsString! Smalltalk globals removeClassNamed: #CompiledMethodInspector! BasicInspector removeSelector: #inspect:! BasicInspector class removeSelector: #registerToolsOn:! Smalltalk globals removeClassNamed: #BasicInspector! AIContextInspector removeSelector: #selectionPrintString! AIContextInspector removeSelector: #selection! AIContextInspector removeSelector: #printSelection! AIContextInspector removeSelector: #fieldList! AIContextInspector removeSelector: #contextStack! Smalltalk globals removeClassNamed: #AIContextInspector! Smalltalk globals removeClassNamed: #Inspector! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !Trait method! inspectAllInstances "Inspect all instances of the receiver." | all allSize prefix | all := self allInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name]. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name)! ! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! !Trait method! inspectSubInstances "Inspect all instances of the receiver and all its subclasses. CAUTION - don't do this for something as generic as Object!!" | all allSize prefix | all := self allSubInstances. (allSize := all size) isZero ifTrue: [^ self inform: 'There are no instances of ', self name, ' or any of its subclasses']. prefix := allSize = 1 ifTrue: ['The lone instance'] ifFalse: ['The ', allSize printString, ' instances']. all asArray inspectWithLabel: (prefix, ' of ', self name, ' & its subclasses')! ! "AST-Interpreter-Core"! "NECompletion"! "Polymorph-TaskbarIcons"! "Shout"! "Tools"! ----End fileIn----! ----QUIT----an Array(15 October 2013 5:54:16 pm) Pharo.image priorSource: 23713532! ----STARTUP----an Array(15 October 2013 6:00:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(15 October 2013 6:00:35 pm) Pharo-30487.image priorSource: 23735301! ----STARTUP----an Array(16 October 2013 7:49:32 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/16/2013 07:45' prior: 74045487! commentForCurrentUpdate ^ '11896 Sorted methods in FileContentsBrowser https://pharo.fogbugz.com/f/cases/11896 11892 Small critic cleanup of Tools https://pharo.fogbugz.com/f/cases/11892 11897 Move KMRepository deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11897 11885 Inspector double click not working https://pharo.fogbugz.com/f/cases/11885'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/16/2013 07:46'! script143 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.11.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1644.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-EstebanLorenzano.720.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-EstebanLorenzano.687.mcz Metacello-PharoCommonPlatform-EstebanLorenzano.4.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.870.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.181.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.17.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1324.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/16/2013 07:46'! update30488 "self new update30488" self withUpdateLog: '11896 Sorted methods in FileContentsBrowser https://pharo.fogbugz.com/f/cases/11896 11892 Small critic cleanup of Tools https://pharo.fogbugz.com/f/cases/11892 11897 Move KMRepository deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11897 11885 Inspector double click not working https://pharo.fogbugz.com/f/cases/11885'. self loadTogether: self script143 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TInspectorActions commentStamp: '' prior: 0! I contain common actions for inspectors and inspector elements/wrappers! !AbstractEyeElement commentStamp: '' prior: 42093948! I represent an abstract inspection element. In an EyeInspector, a eye element corresponds to a wrapper around a field element. Public API : label: display on left list panel of the eye inspector description: printed on the right panel of the eye inspector host: object inspected in the eye inspector value: object represented by this eye element ! !EyeAbstractInspector commentStamp: '' prior: 68581798! I am the abstract superclass for all kind of inspectors! !EyeInspector commentStamp: '' prior: 68586106! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !TInspectorActions commentStamp: '' prior: 74079625! I contain common actions for inspectors and inspector elements/wrappers! !TInspectorActions methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:16'! browseSelectedObject self selectedObjectDo: [ :anObject | anObject browse ]! ! !TInspectorActions methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:17'! browseSelectedObjectClassHierarchy self selectedObjectDo: [ :anObject | anObject class browseHierarchy ]! ! !TInspectorActions methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:17'! exploreSelectedObject self selectedObjectDo: [ :anObject | anObject explore ].! ! !TInspectorActions methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:17'! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | anObject inspect ].! ! !MetacelloConfigurationBrowserPane class methodsFor: 'accessing' stamp: 'MarcusDenker 10/15/2013 18:16' prior: 43748769! retrieveConfigurationsFrom: locationString " self retrieveConfigurationsFrom: self pharoDistribution " | repo reductionMap split configName author version last topMostItems | repo := MCHttpRepository location: locationString. "Reduce to display only the latest" reductionMap := Dictionary new. (repo allVersionNames reverse select: [ :each | each beginsWith: 'ConfigurationOf' ]) do: [:each | split := each findTokens: '-.'. configName := split first. author := split second. version := Integer readFrom: split last. last := reductionMap at: configName ifAbsentPut: [ author -> version]. version > last value ifTrue: [ reductionMap at: configName put: (author -> version) ] ]. topMostItems := SortedCollection sortBlock: [:e1 :e2 | e1 asString <= e2 asString ]. reductionMap keysAndValuesDo: [:key :val | topMostItems add: (key, '-', val key, '.', val value asString) ]. ^topMostItems! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'nk 7/24/2003 09:14' prior: 28672964! parent ^parent! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'nk 7/24/2003 09:14' prior: 28673070! parent: anObject parent := anObject! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'nk 7/24/2003 09:49' prior: 28673197! selector parent ifNil: [ ^nil ]. ^(parent withoutListWrapper class allInstVarNames includes: itemName) ifTrue: [ itemName asSymbol ]! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'RAA 6/21/1999 10:49' prior: 28673423! setItem: anObject name: aString model: aModel item := anObject. model := aModel. itemName := aString.! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'nk 7/24/2003 09:14' prior: 28673619! setItem: anObject name: aString model: aModel parent: itemParent parent := itemParent. self setItem: anObject name: aString model: aModel! ! !TreeModel methodsFor: 'protocol' stamp: 'CamilloBruni 10/15/2013 18:41'! hasSelectedItem < api: #inspect> "Return true if the tree contains any selected items" ^ selectionHolder contents isNotEmpty! ! !FileList class methodsFor: 'morphic ui' stamp: 'MarcusDenker 10/15/2013 18:13' prior: 21900619! morphicViewFolderSelector: aDir "Answer a tool that allows the user to select a folder" | aFileList | aFileList := self new directory: aDir. aFileList optionalButtonSpecs: aFileList servicesForFolderSelector. ^ self morphicViewOnFile: aDir contents: nil fileList: aFileList! ! !FileList methodsFor: 'drag''n''drop' stamp: 'MarcusDenker 10/15/2013 18:18' prior: 21856751! acceptDroppingMorph: aTransferMorph event: evt inMorph: dest | oldEntry destDirectory newEntry response | destDirectory := self dropDestinationDirectory: dest event: evt. oldEntry := FileSystem disk referenceTo: aTransferMorph passenger. newEntry := destDirectory / oldEntry basename. oldEntry = newEntry ifTrue: [ "Transcript nextPutAll: 'same as old name'; cr." ^ true ]. newEntry ifNotNil: [ | msg | msg := String streamContents: [ :s | s nextPutAll: 'destination file '; nextPutAll: newEntry parent fullName; nextPutAll: ' exists already,'; cr; nextPutAll: 'and is '; nextPutAll: (oldEntry modificationTime < newEntry modificationTime ifTrue: [ 'newer' ] ifFalse: [ 'not newer' ]); nextPutAll: ' than source file '; nextPutAll: oldEntry parent fullName; nextPut: $.; cr; nextPutAll: 'Overwrite file '; nextPutAll: newEntry basename; nextPut: $? ]. response := self confirm: msg. response ifFalse: [ ^false ]. ]. aTransferMorph shouldCopy ifTrue: [ oldEntry copyAs: newEntry ] ifFalse: [ oldEntry renameTo: newEntry ]. self updateFileList; fileListIndex: 0. aTransferMorph source model ~= self ifTrue: [ aTransferMorph source model updateFileList; fileListIndex: 0 ]. "Transcript nextPutAll: 'copied'; cr." ^true! ! !FileList methodsFor: 'own services' stamp: 'MarcusDenker 10/15/2013 18:13' prior: 21870726! basicDeleteDirectory "Remove the currently selected directory" reference entries isEmpty ifFalse:[^self inform:'Directory must be empty']. (self confirm: 'Really delete ' , reference basename , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. reference delete.! ! !FileList methodsFor: 'accessing' stamp: 'MarcusDenker 10/15/2013 18:16' prior: 21854777! fileListIndex: anInteger "Select the file name having the given index, and display its contents." | item | self okToChange ifFalse: [^ self]. listIndex := anInteger. listIndex = 0 ifFalse: [ item := (list at: anInteger). item isDirectory ifTrue: [ listIndex := 0. brevityState := #FileList. self addPath: item fullName. self directory: item ] ifFalse: [reference := item]]. "open the file selected" brevityState := #needToGetBrief. self changed: #fileListIndex. self changed: #contents. self updateButtonRow! ! !EyeTreeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:58'! initializeShortcuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | self tree bindKeyCombination: key toAction: value ]! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:41' prior: 68639021! selectedElement self tree hasSelectedItem ifFalse: [ ^ nil ]. ^ self tree selectedItem! ! !EyeTreeInspector methodsFor: 'private-focus' stamp: 'CamilloBruni 10/15/2013 18:24'! takeKeyboardFocus ^ self tree takeKeyboardFocus! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 17:20' prior: 68594435! text ^ text ifNil: [ text := self instantiate: TextModel. text aboutToStyle: true. ]! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:29' prior: 68639291! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree whenBuiltDo: [ self initializeShortcuts ]. tree childrenBlock: [ :anObject | self childrenFor: anObject ]; iconBlock: [ :treeNode | self iconFor: treeNode item ]; displayBlock: [ :anObject | self labelFor: anObject ]; menu: [ :menu | self inspectionMenu: menu ]; doubleClick: [ self diveInto: self selectedObject ]; yourself]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'CamilloBruni 10/15/2013 20:42'! color: color self widget ifNotNil: [ :w | w color: color ]! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'CamilloBruni 10/15/2013 20:56'! extent ^ self widget extent! ! !EyeMorphViewer methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 20:42' prior: 68640204! container ^ container ifNil: [ container := Morph new asSpecAdapter. container color: Color white; hSpaceFill; vSpaceFill ]! ! !EyeMorphViewer methodsFor: 'event-handling' stamp: 'CamilloBruni 10/15/2013 20:57' prior: 68640692! objectChanged | newThumbnail | newThumbnail := self thumbnailMorph. newThumbnail hResizing: #spaceFill; vResizing: #spaceFill. self container removeSubWidgets. self container morph addMorphCentered: newThumbnail! ! !CPUWatcher class methodsFor: 'accessing' stamp: 'nk 3/8/2001 18:45' prior: 18651266! current ^CurrentCPUWatcher ! ! !CPUWatcher class methodsFor: 'class initialization' stamp: 'nk 6/18/2003 07:15' prior: 18651764! initialize "CPUWatcher initialize" Smalltalk addToStartUpList: self. Smalltalk addToShutDownList: self.! ! !CPUWatcher class methodsFor: 'testing' stamp: 'nk 3/14/2001 08:06' prior: 18651956! isMonitoring ^CurrentCPUWatcher notNil and: [ CurrentCPUWatcher isMonitoring ] ! ! !CPUWatcher class methodsFor: 'system startup' stamp: 'nk 6/18/2003 07:14' prior: 18652123! shutDown self stopMonitoring.! ! !CPUWatcher class methodsFor: 'startup-shutdown' stamp: 'nk 3/14/2001 08:17' prior: 18652239! startMonitoring "CPUWatcher startMonitoring" ^self startMonitoringPeriod: 20 rate: 100 threshold: 0.8! ! !CPUWatcher class methodsFor: 'system startup' stamp: 'nk 6/18/2003 07:14' prior: 18652791! startUp self monitorPreferenceChanged.! ! !CPUWatcher class methodsFor: 'monitoring' stamp: 'sd 11/20/2005 21:28' prior: 18652917! stopMonitoring "CPUWatcher stopMonitoring" CurrentCPUWatcher ifNotNil: [ CurrentCPUWatcher stopMonitoring. ]. CurrentCPUWatcher := nil. ! ! !FinderUI methodsFor: 'items creation' stamp: 'MarcusDenker 10/15/2013 18:14' prior: 22155323! addAllItems: aWindow | toolbar height btnFont btnToolbar cst | toolbar := self buildSearchModeToolBar: aWindow. height := toolbar minExtent y. cst := 15. aWindow addMorph: toolbar fullFrame: ( (0 @ 0 corner: 1 @ 0) asLayoutFrame bottomOffset: height). aWindow addMorph: self buildPackagesTree buildContents fullFrame: ((0@0 corner: 1@0.58) asLayoutFrame topOffset: height). btnFont := StandardFonts buttonFont. btnToolbar := self buildBrowseToolBar: aWindow. aWindow addMorph: btnToolbar fullFrame: ((0@0.58 corner: 1@0.58) asLayoutFrame bottomOffset: (btnFont height +cst)). aWindow addMorph: self sourceTextArea fullFrame: ((0@0.58 corner: 1@1) asLayoutFrame topOffset: btnFont height +cst) ! ! !FinderUI methodsFor: 'private' stamp: 'MarcusDenker 10/15/2013 18:15' prior: 22167076! autoSelection | aString firstIndex interval string size | (self searchingString isEmpty or: [ self useRegEx] ) ifTrue: [^ 0 to:0 ]. self isSourceSymbol ifFalse: [^ 0 to: 0]. aString := sourceTextArea text asString asLowercase. aString = self defaultExplanation asLowercase ifTrue: [ ^ 0 to: 0]. string := self searchingString asLowercase. (string includes: $*) ifTrue: [| list lastIndex| list := string subStrings: '*'. firstIndex := aString findString: list first. lastIndex := (aString findString: list last startingAt: firstIndex) + list last size - 1. interval := firstIndex to: lastIndex] ifFalse: [ firstIndex := aString findString: string. size := string size. interval := firstIndex to: (firstIndex + size - 1)]. ^ firstIndex = 0 ifTrue: [ 0 to:0 ] ifFalse: [interval]! ! !FinderUI methodsFor: 'text areas behavior' stamp: 'MarcusDenker 10/15/2013 18:16' prior: 22165259! compileSource: aString notifying: aController | class method | (self selectedClass isNil or: [ self selectedMethod isNil ]) ifTrue:[ self changed: #clearUserEdits. ^self]. class := self selectedClass. method := class methodDict at: self selectedMethod. (class compile: (aString asString) classified: method category notifying: aController) ifNil: [^ self ] ifNotNil: [:selector | self changed: #clearUserEdits ]! ! !AbstractTool methodsFor: 'class' stamp: 'MarcusDenker 10/15/2013 18:07' prior: 17446385! browseUnusedMethodsOf: aClass | classes unsent messageList | aClass ifNil: [^ self]. classes := Array with: aClass with: aClass class. unsent := Set new. classes do: [:c | unsent addAll: c selectors ]. unsent := self systemNavigation allUnsentMessagesIn: unsent. messageList := OrderedCollection new. classes do: [:c | (c selectors select: [:s | unsent includes: s]) asSortedCollection do: [:sel | messageList add: ((c compiledMethodAt: sel) methodReference) ]]. self systemNavigation browseMessageList: messageList name: 'Unsent Methods in ' , aClass name! ! !AbstractTool methodsFor: 'method' stamp: 'MarcusDenker 10/15/2013 18:09' prior: 42037583! categorizeMethods: aCollection of: aClass from: aCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | labels lines oldIndex newName | aCollection ifEmpty: [^ self]. aClass ifNil: [^self]. labels := OrderedCollection new. labels addAll: aClass organization categories copy sort; add: Protocol unclassified. lines := OrderedCollection new. lines add: labels size -1. newName := UIManager default chooseOrRequestFrom: labels lines: lines title: ('Change Protocol (current: ', aCategory, ')'). newName ifNil: [ ^self ]. newName := newName asSymbol. aCollection do: [:item | item methodClass organization classify: item selector under: newName suppressIfDefault: true ].! ! !Browser methodsFor: 'system category functions' stamp: 'MarcusDenker 10/15/2013 18:09' prior: 68706792! findClass "Search for a class from a pattern or from the recent list" | foundClassOrTrait | self okToChange ifFalse: [^ self classNotFound]. foundClassOrTrait := SearchFacade classSearch chooseFromOwner: self dependents first. foundClassOrTrait ifNil: [^ self classNotFound]. self selectCategoryForClass: foundClassOrTrait. self selectClass: foundClassOrTrait ! ! !SpaceTally methodsFor: 'fileout' stamp: 'MarcusDenker 10/15/2013 18:10' prior: 50654346! printSpaceAnalysis: threshold on: aStream "SpaceTally new printSpaceAnalysis: 1 on:(FileStream forceNewFileNamed: 'STspace.text')" "sd-This method should be rewrote to be more coherent within the rest of the class ie using preAllocate and spaceForInstanceOf:" "If threshold > 0, then only those classes with more than that number of instances will be shown, and they will be sorted by total instance space. If threshold = 0, then all classes will appear, sorted by name." | totalCodeSpace totalInstCount totalInstSpace n totalPercent | Smalltalk garbageCollect. totalCodeSpace := totalInstCount := totalInstSpace := n := 0. results := OrderedCollection new: Smalltalk classNames size. 'Taking statistics...' displayProgressFrom: 0 to: Smalltalk classNames size during: [:bar | (Smalltalk globals allClasses) do: [:cl | | codeSpace instCount instSpace | codeSpace := cl spaceUsed. bar current: (n := n+1). Smalltalk garbageCollectMost. instCount := cl instanceCount. instSpace := cl instancesSizeInMemory. totalCodeSpace := totalCodeSpace + codeSpace. totalInstCount := totalInstCount + instCount. totalInstSpace := totalInstSpace + instSpace. results add: (SpaceTallyItem analyzedClassName: cl name codeSize: codeSpace instanceCount: instCount spaceForInstances: instSpace).]]. totalPercent := 0.0. "aStream timeStamp." aStream nextPutAll: ('Class' padRightTo: 45); nextPutAll: ('code space' padLeftTo: 12); nextPutAll: ('# instances' padLeftTo: 12); nextPutAll: ('inst space' padLeftTo: 12); nextPutAll: ('percent' padLeftTo: 12); nextPutAll: ('inst average size' padLeftTo: 20); cr. threshold > 0 ifTrue: [ "If inst count threshold > 0, then sort by space" results := (results select: [:s | s instanceCount >= threshold or: [s spaceForInstances > (totalInstSpace // 500)]]) asSortedCollection: [:s :s2 | s spaceForInstances > s2 spaceForInstances]]. results do: [:s | | percent | aStream nextPutAll: (s analyzedClassName padRightTo: 45); nextPutAll: (s codeSize printString padLeftTo: 12); nextPutAll: (s instanceCount printString padLeftTo: 12); nextPutAll: (s spaceForInstances printString padLeftTo: 14). percent := s spaceForInstances*100.0/totalInstSpace roundTo: 0.1. totalPercent := totalPercent + percent. aStream nextPutAll: ((percent printShowingDecimalPlaces: 2) padLeftTo: 12). aStream nextPutAll: (((s spaceForInstances / s instanceCount) asFloat printShowingDecimalPlaces: 2) padLeftTo: 20). aStream cr]. aStream cr; nextPutAll: ('Total' padRightTo: 45); nextPutAll: (totalCodeSpace printString padLeftTo: 12); nextPutAll: (totalInstCount printString padLeftTo: 12); nextPutAll: (totalInstSpace printString padLeftTo: 14); nextPutAll: ((totalPercent roundTo: 0.1) printString padLeftTo: 12).! ! !EyeInspectorToolBar class methodsFor: 'specs' stamp: 'CamilloBruni 10/15/2013 17:24' prior: 68595763! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #previousButton width: 24; add: #nextButton width: 24; add: #inspectorChoice ]; yourself.! ! !KMRepository methodsFor: '*Deprecated30' stamp: 'GuillermoPolito 5/4/2013 16:06' prior: 36809699! categoriesForClass: aClass | classCategories superclassCategories | self deprecated: 'Static shortcuts are not used any more'. aClass == Object ifTrue: [ ^ Set new ]. classCategories := self categoryHolders at: aClass ifAbsent: [ Set new ]. superclassCategories := self categoriesForClass: aClass superclass. ^ classCategories union: superclassCategories! ! !InspectorNavigator methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:49' prior: 68600613! customMenuActions ^ [:aMenu | aMenu add: 'Dive Into (d)' translated target: self selector: #dive. (history hasPrevious or: [ history hasNext ]) ifTrue: [ aMenu addLine ]. history hasPrevious ifTrue: [ aMenu add: 'Back ([)' translated target: self selector: #inspectPrevious ]. history hasNext ifTrue: [ aMenu add: 'Forward (])' translated target: self selector: #inspectNext ]. ]! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:33' prior: 68601064! dive self inspector diveIntoSelectedObject! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:21' prior: 68602077! initializeShortcuts self bindKeyCombination: $[ command toAction: [ self inspectPrevious ]. self bindKeyCombination: $] command toAction: [ self inspectNext ]. self bindKeyCombination: $[ shift command toAction: [ self usePreviousInspectorType ]. self bindKeyCombination: $] shift command toAction: [ self useNextInspectorType ]. self bindKeyCombination: $0 command toAction: [ self useBasicInspector ]. self bindKeyCombination: $0 shift command toAction: [ self useDefaultInspector ]. "code duplication? yes, but still easier than capturing arguments ;)" self bindKeyCombination: $1 command toAction: [ self useInspectorAt: 1 ]. self bindKeyCombination: $2 command toAction: [ self useInspectorAt: 2 ]. self bindKeyCombination: $3 command toAction: [ self useInspectorAt: 3 ]. self bindKeyCombination: $4 command toAction: [ self useInspectorAt: 4 ]. self bindKeyCombination: $5 command toAction: [ self useInspectorAt: 5 ]. self bindKeyCombination: $6 command toAction: [ self useInspectorAt: 6 ]. self bindKeyCombination: $7 command toAction: [ self useInspectorAt: 7 ]. self bindKeyCombination: $8 command toAction: [ self useInspectorAt: 8 ]. self bindKeyCombination: $9 command toAction: [ self useInspectorAt: 9 ].! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 16:49' prior: 68603629! inspect: anObject | oldInspectorType | oldInspectorType := self inspectorType. self inspector: anObject inspector. self inspectorType: oldInspectorType. ! ! !CodeHolder methodsFor: 'construction' stamp: 'MarcusDenker 10/15/2013 18:16' prior: 19432114! addOptionalButtonsTo: window at: fractions plus: verticalOffset "If the receiver wishes it, add a button pane to the window, and answer the verticalOffset plus the height added" | delta buttons | self wantsOptionalButtons ifFalse: [^ verticalOffset]. buttons := self optionalButtonRow color: Color white. buttons layoutInset: (0@0 corner: 0@4). buttons := OverflowRowMorph new baseMorph: buttons; height: buttons minExtent y; setNameTo: buttons assureExtension externalName. delta := buttons minExtent y. window addMorph: buttons fullFrame: (fractions asLayoutFrame topOffset: verticalOffset; bottomOffset: (verticalOffset + delta)). ^ verticalOffset + delta! ! !PseudoClass methodsFor: 'methods' stamp: 'StephaneDucasse 10/15/2013 22:19' prior: 30106089! selectors ^self sourceCode keys sorted! ! !TBehavior methodsFor: '*Tools-Inspector' stamp: 'CamilloBruni 10/15/2013 17:02'! browseHierarchy self systemNavigation browseHierarchy: self! ! !FinderMethodNode methodsFor: 'private' stamp: 'MarcusDenker 10/15/2013 18:08' prior: 22138384! inspectItem self hasParentNode ifTrue: [ (self parentNode item compiledMethodAt: self item) inspect ].! ! !Workspace methodsFor: 'file support' stamp: 'MarcusDenker 10/15/2013 18:10' prior: 68714168! suggestedFileName "If the workspace has an associated fileName use that, otherwise derive a reasonable file-name from the window label" self fileName ifNotNil: [ :f | ^ f ]. ^ (self containingWindow ifNil: ['Untitled'] ifNotNilDo: [ :window | window label ]), '.ws'! ! !TimeProfiler class methodsFor: 'opening' stamp: 'MarcusDenker 10/15/2013 18:17' prior: 53180214! spyOnProcess: aProcess forMilliseconds: msecDuration "Run aProcess for msecDuration milliseconds, then open a TimeProfiler on the results." | inst | inst := self new. inst withBlockCodePane: false. inst runProcess: aProcess forMilliseconds: msecDuration pollingEvery: MessageTally defaultPollPeriod. inst open. ^ inst! ! !Finder methodsFor: 'private' stamp: 'MarcusDenker 10/15/2013 18:14' prior: 22119838! constructDictionary "I construct the adequate dictionary regarding the search mode" self searchingString isEmpty ifTrue: [ ^ self resultDictionary: Dictionary new]. [ :job| job title: 'Searching...'. self isSelectorsSymbol ifTrue: [ self constructDictionaryWithMessagesNameSearch: self searchingString]. self isClassNamesSymbol ifTrue: [ self constructClassNamesDictionary]. self isSourceSymbol ifTrue: [ self constructSourceDictionary]. self isExamplesSymbol ifTrue: [ self constructDictionaryWithMethodFinder: self searchingString]. self isPragmasSymbol ifTrue: [ self constructDictionaryWithPragmaSearch: self searchingString ]. ] asJob run! ! !Finder methodsFor: 'private-example' stamp: 'MarcusDenker 10/15/2013 18:15' prior: 68831880! constructDictionaryWithMethodFinder: aString "construct dictionary when searching patterns" | result listOfStrings listOfSelectors | result := Dictionary new. listOfStrings := self computeWithMethodFinder: aString. listOfSelectors := listOfStrings collect: [ :each | self findSelector: each ]. self packagesSelection do: [ :class | class methodDict do: [ :method | | index | (index := listOfSelectors indexOf: method selector) = 0 ifFalse: [ | key value | key := listOfStrings at: index. value := method methodClass. (result includesKey: key) ifTrue: [ (result at: key) add: value ] ifFalse: [ result at: key put: (OrderedCollection new add: value; yourself) ] ] ] ]. self resultDictionary: result! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 10/15/2013 18:10' prior: 18747593! browseVersions | change browser | listIndex = 0 ifTrue: [^ nil ]. change := changeList at: listIndex. change classIncludesSelector ifFalse: [ ^nil ]. browser := super browseVersions. browser ifNotNil: [ browser addedChangeRecord: change ]. ^browser! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 10/15/2013 18:11' prior: 18750104! destroyCurrentCodeOfSelections "Actually remove from the system any in-memory methods with class and selector identical to items current selected. This may seem rather arcane but believe me it has its great uses, when trying to split out code. To use effectively, first file out a change set that you wish to split off. Then open a ChangeList browser on that fileout. Now look through the methods, and select any of them which you want to remove completely from the system, then issue this command. For those methods where you have made changes to pre-existing versions, of course, you won't want to remove them from the system, so use this mechanism with care!!" | aChange aList | aList := OrderedCollection new. 1 to: changeList size do: [:index | (listSelections at: index) ifTrue: [aChange := changeList at: index. aChange isMethodDefinedInImage ifTrue: [aList add: {aClass. aChange methodSelector}]]]. aList size > 0 ifTrue: [(self confirm: 'Warning!! This will actually remove ', aList size printString, ' method(s) from the system!!') ifFalse: [^ self]]. aList do: [:aPair | self traceCr: 'Removed: ', aPair first printString, '.', aPair second. aPair first removeSelector: aPair second]! ! !ChangeList methodsFor: 'menu actions' stamp: 'MarcusDenker 10/15/2013 18:13' prior: 18759260! selectNewMethods "Selects all method definitions for which there is no counterpart method in the current image" Cursor read showWhile: [ | change | 1 to: changeList size do: [:i | change := changeList at: i. listSelections at: i put: change isMethodNotDefinedInImage]]. self changed: #allSelections! ! !AbstractEyeElement commentStamp: '' prior: 74079764! I represent an abstract inspection element. In an EyeInspector, a eye element corresponds to a wrapper around a field element. Public API : label: display on left list panel of the eye inspector description: printed on the right panel of the eye inspector host: object inspected in the eye inspector value: object represented by this eye element ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:22' prior: 36465719! browseSubMenu: aMenu aMenu add: 'Browse Full (b)' translated target: self selector: #browseSelectedObject; add: 'Browse Class' translated target: self selector: #browseSelectedObjectClass; add: 'Browse Hierarchy (h)' translated target: self selector: #browseSelectedObjectClassHierarchy. aMenu addLine. ! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 10/15/2013 17:03' prior: 36466227! browseValueClass "Open an class browser on the selectObject (class side)" ^ self valueClass browse! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 10/15/2013 17:03' prior: 36466441! browseValueClassHierarchy "Create and schedule a class list browser on the receiver's hierarchy." ^ self valueClass browseHierarchy! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:22' prior: 68877640! endSubMenu: aMenu aMenu add: 'Copy Name (c)' translated target: self selector: #copyAccessorCode! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:22' prior: 36467659! exploreSubMenu: aMenu aMenu add: 'Explore Pointers' target: self selector: #explorePointers; addLine! ! !AbstractEyeElement methodsFor: 'testing' stamp: 'CamilloBruni 10/15/2013 17:14'! hasSelectedObject ^ true! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 17:17' prior: 68609450! icon ^ (self value iconOrThumbnailOfSize: 16) ifNil: [ self value class nautilusIcon ]! ! !AbstractEyeElement methodsFor: 'action' stamp: 'CamilloBruni 10/15/2013 17:03' prior: 49518616! inspectValue "Bring up a non-special inspector" ^ self value inspect! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 17:16' prior: 49518782! mainInspectSubMenu: aMenu aMenu add: 'Inspect (i)' translated target: self selector: #inspectSelectedObjectInNewWindow. aMenu add: 'Explore (I)' translated target: self selector: #exploreSelectedObject.! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 17:14'! selectedObject ^ self value! ! !InstanceVariableEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:21' prior: 36475410! customSubMenu: aMenu aMenu add: 'List Methods Using "', self instVarName, '"' target: self selector: #referencesToInstanceVariable; add: 'List Methods Storing into "', self instVarName, '"' target: self selector: #storingsIntoInstanceVariable. aMenu addLine. ! ! !NewListModel methodsFor: 'initialize' stamp: 'CamilloBruni 10/15/2013 13:52' prior: 69481150! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self changed: { #hasHeader: . title notNil } ]. deSelectOnReclick whenChangedDo: [ :bool | self changed: { #deSelectOnReclick: . bool } ]. isMultipleSelection whenChangedDo: [ :bool | self changed: { #isMultipleSelection: . bool } ]. unselectOnChange whenChangedDo: [ :bool | self changed: { #unselectOnChange: . bool } ]. handlesDoubleClick whenChangedDo: [ :bool | self changed: { #handlesDoubleClick . bool } ].! ! !EyeAbstractInspector commentStamp: '' prior: 74080182! I am the abstract superclass for all kind of inspectors! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:26'! customMenuActions ^ customMenuActions ifNil: [ customMenuActions := [ ] ]! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:26'! customMenuActions: anObject customMenuActions := anObject! ! !EyeAbstractInspector methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 18:19'! diveIntoSelectedObject self selectedObjectDo: [ :anObject | self diveInto: anObject ]! ! !EyeAbstractInspector methodsFor: 'testing' stamp: 'CamilloBruni 10/15/2013 18:11'! hasSelectedObject ^ self selectedElement isNotNil! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:31' prior: 68582885! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged:" object := nil asValueHolder. super initialize. ! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:32' prior: 68583144! initializePresenter object whenChangedDo: [ self objectChanged ]. self initializeShortcuts.! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:25'! initializeShortcuts "override to add custom shortcuts to your model"! ! !EyeAbstractInspector methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:29'! inspectionMenu: aMenu self hasSelectedObject ifFalse: [ ^ aMenu ]. self inspectionSubMenu: aMenu. self selectedElement inspectionMenu: aMenu. ^aMenu! ! !EyeAbstractInspector methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:34'! inspectionSubMenu: aMenu aMenu add: 'Inspect (i)' translated target: self selector: #inspectSelectedObject. aMenu add: 'Explore (I)' translated target: self selector: #exploreSelectedObject. self customMenuActions cull: aMenu. aMenu addLine.! ! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 10/15/2013 18:25' prior: 68583984! ownerChanged self customMenuActions: self owner customMenuActions; takeKeyboardFocus! ! !EyeAbstractInspector methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:43'! refreshSubMenu: aMenu "Add a refresh button in the inspector. Not used anymore since there is this loop in initializeInspectorLoop." aMenu add: 'Refresh Inspector' translated target: self selector: #refresh. aMenu addLine. ! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:11'! selectedElement "return the currently selected object wrapper / eye-element" ^ self subclassResponsibility! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:13'! selectedElementDo: aBlock self selectedElement ifNotNilDo: aBlock! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 17:05'! selectedObject ^ self subclassResponsibility! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'CamilloBruni 10/15/2013 18:14'! selectedObjectDo: aBlock self selectedElement ifNotNilDo: [ :element | aBlock value: element value ]! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:12'! shortCuts "Answers a dictionary of the shortcuts usable in EyeInspector" |shortCuts| shortCuts := Dictionary new. shortCuts at: $d command put: [ self diveIntoSelectedObject ]. shortCuts at: $i command put: [ self inspectSelectedObjectInNewWindow ]. shortCuts at: $i command shift put: [ self exploreSelectedObject ]. shortCuts at: $b command put: [ self browseSelectedObject ]. shortCuts at: $h command put: [ self browseSelectedObjectClassHierarchy ]. ^shortCuts! ! !EyeAbstractInspector methodsFor: 'private-focus' stamp: 'CamilloBruni 10/15/2013 18:26'! takeKeyboardFocus super takeKeyboardFocus! ! !EyeInspector commentStamp: '' prior: 74080299! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>eyeClass so it returns your new inspector! !EyeInspector methodsFor: 'actions' stamp: 'CamilloBruni 10/15/2013 17:05'! copySelectedItemAccessorCode self hasSelectedObject ifFalse: [ ^ self ]. self selectedItem copyAccessorCode.! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 10/15/2013 16:45' prior: 68769350! dive ^ self owner ifNotNil: [ :o | "nil in case of basicInspect" (o respondsTo: #dive) "does not respond if owner is SpecDebugger" ifTrue: [ o dive ] ]! ! !EyeInspector methodsFor: 'initialization' stamp: 'ClementBera 9/26/2013 15:49' prior: 68769616! initializeAutoRefresh refreshLoop := self useAutoRefresh ifTrue: [ [ self refresh. self hasWindow ifFalse: [ refreshLoop terminate ] ] valueWithInterval: self updateTime ]! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:25' prior: 68588187! initializePresenter "initialize the event handlings" super initializePresenter. description whenTextIsAccepted: [ :newText | self saveElement: newText. self refreshDescription ].! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 17:24' prior: 68588511! initializeShortcuts "initialize the inspector' shortcuts with the dictionary defined in self shortCuts" self shortCuts keysAndValuesDo: [ :key :value | self list bindKeyCombination: key toAction: value ] ! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 9/21/2013 15:28' prior: 68588826! initializeWidgets description := self instantiate: TextModel. ! ! !EyeInspector methodsFor: 'menu' stamp: 'CamilloBruni 10/15/2013 18:29' prior: 36494210! inspectionMenu: aMenu self hasSelectedObject ifFalse: [ ^ aMenu ]. self useAutoRefresh ifFalse: [ self refreshSubMenu: aMenu ]. super inspectionMenu: aMenu.! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 10/15/2013 18:25' prior: 68589841! ownerChanged super ownerChanged. self initializeAutoRefresh! ! !EyeInspector methodsFor: 'initialization' stamp: 'ClementBera 9/26/2013 17:29' prior: 68769881! resetAutoRefresh "autoRefresh is disabled when the inspector has no window. If by any chance another window on the same inspector is shown after killing the previous window, call this method to restart the refreshProcess." refreshLoop ifNotNil: [ :updateProcess | updateProcess isTerminated ifTrue: [ self initializeAutoRefresh ] ]! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 10/15/2013 16:58' prior: 68591395! shortCuts | shortCuts | shortCuts := super shortCuts. shortCuts at: $c command put: [ self copySelectedItemAccessorCode ]. ^ shortCuts! ! EyeInspector removeSelector: #refreshSubMenu:! EyeInspector removeSelector: #inspectionSubMenu:! EyeInspector removeSelector: #inspectInNewWindow:! EyeInspector removeSelector: #customMenuActions:! EyeInspector removeSelector: #customMenuActions! CodeHolder removeSelector: #spawnToCollidingClass:! CodeHolder removeSelector: #spawnToClass:! CodeHolder removeSelector: #buildClassBrowserEditString:! !Trait method! browseSelectedObject self selectedObjectDo: [ :anObject | anObject browse ]! ! !Trait method! browseSelectedObject self selectedObjectDo: [ :anObject | anObject browse ]! ! !Trait method! browseSelectedObjectClassHierarchy self selectedObjectDo: [ :anObject | anObject class browseHierarchy ]! ! !Trait method! browseSelectedObjectClassHierarchy self selectedObjectDo: [ :anObject | anObject class browseHierarchy ]! ! !Trait method! exploreSelectedObject self selectedObjectDo: [ :anObject | anObject explore ].! ! !Trait method! exploreSelectedObject self selectedObjectDo: [ :anObject | anObject explore ].! ! !Trait method! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | anObject inspect ].! ! !Trait method! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | anObject inspect ].! ! !Trait method! browseHierarchy self systemNavigation browseHierarchy: self! ! !Trait method! browseHierarchy self systemNavigation browseHierarchy: self! ! "Deprecated30"! "Keymapping-Core"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-MorphicAdapters"! "System-FilePackage"! "Tools"! ----End fileIn----! ----QUIT----an Array(16 October 2013 7:49:44 am) Pharo.image priorSource: 23735506! ----STARTUP----an Array(16 October 2013 7:55:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 October 2013 7:55:01 am) Pharo-30488.image priorSource: 23786248! ----STARTUP----an Array(16 October 2013 9:54:30 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/16/2013 09:51' prior: 74067461! commentForCurrentUpdate ^ '11893 move MCVersionLoader>>#versions https://pharo.fogbugz.com/f/cases/11893 11898 Move DialogWindowModel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11886 11810 undeclared MailSender https://pharo.fogbugz.com/f/cases/11810 11881 Metacello references non-existing classes FileDirectory SystemChangeNotifier and OSProcess https://pharo.fogbugz.com/f/cases/11881'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/16/2013 09:51'! script144 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.288.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.171.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.537.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1644.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.6.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.424.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.17.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1324.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/16/2013 09:52'! update30489 "self new update30489" self withUpdateLog: '11893 move MCVersionLoader>>#versions https://pharo.fogbugz.com/f/cases/11893 11898 Move DialogWindowModel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11886 11810 undeclared MailSender https://pharo.fogbugz.com/f/cases/11810 11881 Metacello references non-existing classes FileDirectory SystemChangeNotifier and OSProcess https://pharo.fogbugz.com/f/cases/11881'. self loadTogether: self script144 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloPlatform methodsFor: 'github support' stamp: 'CamilloBruni 10/15/2013 21:36' prior: 72243454! fileDirectoryClass ^Smalltalk at: #FileDirectory! ! !MetacelloPlatform methodsFor: 'system' stamp: 'CamilloBruni 10/15/2013 21:37' prior: 72246838! suspendSystemUpdateEventsDuring: aBlock "Wraps call to the system evetn manager to tell it that we want to suspend events during execution of aBlock" (Smalltalk at: #SystemChangeNotifier) uniqueInstance doSilently: aBlock! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! isSmtpServerSet ^ SmtpServer notNil and: [SmtpServer notEmpty] ! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! sendMessage: aMailMessage self default ifNotNil: [self default sendMailMessage: aMailMessage]! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! setSmtpServer "Set the SMTP server used to send outgoing messages via" SmtpServer ifNil: [SmtpServer := '']. SmtpServer := UIManager default request: 'What is your mail server for outgoing mail?' initialAnswer: SmtpServer. ! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! setSmtpServer: aString SmtpServer := aString! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! setUserName "Change the user's email name for use in composing messages." (UserName isNil) ifTrue: [UserName := '']. UserName := UIManager default request: 'What is your email address?\(This is the address other people will reply to you)' withCRs initialAnswer: UserName. UserName ifNotNil: [UserName := UserName]! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! smtpServer "Answer the server for sending email" self isSmtpServerSet ifFalse: [self setSmtpServer]. SmtpServer isEmpty ifTrue: [ self error: 'no SMTP server specified' ]. ^SmtpServer! ! !MailSender class methodsFor: 'deprecated' stamp: 'CamilloBruni 10/15/2013 22:01'! userName "Answer the user name to be used in composing messages." (UserName isNil or: [UserName isEmpty]) ifTrue: [self setUserName]. UserName isEmpty ifTrue: [ self error: 'no user name specified' ]. ^UserName! ! !DialogWindowModel methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 9/28/2013 23:47' prior: 69548179! toolbar self deprecated: 'widget should not be accessed directly'. ^ self widget ifNotNil: [:w | w toolbar ]! ! !MetacelloPharoCommonPlatform methodsFor: 'github support' stamp: 'CamilloBruni 10/15/2013 21:35' prior: 72233385! downloadFile: url to: outputFileName "download from into " | in out err proc archive zipfile | in := (' -L ' , url) readStream. out := FileStream forceNewFileNamed: outputFileName. err := FileStream forceNewFileNamed: '/tmp/curl.err'. proc := #OSProcess asClass thisOSProcess forkJob: '/usr/bin/curl' arguments: {'-L'. url} environment: nil descriptors: (Array with: nil with: out with: err). proc ifNil: [ #OSProcess asClass noAccessorAvailable ]. [ proc isRunning ] whileTrue: [ (Delay forMilliseconds: 100) wait ]. out close. err close. archive := ZipArchive new. zipfile := #FileDirectory asClass on: outputFileName. zipfile containingDirectory readOnlyFileNamed: zipfile localName do: [ :fileStream | archive readFrom: fileStream ]. ^ archive! ! !MCVersionLoader methodsFor: 'accessing' stamp: 'dkh 6/8/2012 14:04:22' prior: 72018459! versions ^versions! ! "Deprecated30"! "Metacello-Core"! "Metacello-MC"! "Metacello-PharoCommonPlatform"! "Monticello"! "Spec-Core"! ----End fileIn----! ----QUIT----an Array(16 October 2013 9:54:40 am) Pharo.image priorSource: 23786453! ----STARTUP----an Array(16 October 2013 10:00:03 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 October 2013 10:00:03 am) Pharo-30489.image priorSource: 23802681! ----STARTUP----an Array(16 October 2013 10:23:29 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/16/2013 10:20' prior: 74118408! commentForCurrentUpdate ^ '11107 never call decompiler, add a #codeForNoSource backstop to CompiledMethod https://pharo.fogbugz.com/f/cases/11107 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/16/2013 10:20'! script145 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.179.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1645.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.6.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.17.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1324.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/16/2013 10:20'! update30490 "self new update30490" self withUpdateLog: '11107 never call decompiler, add a #codeForNoSource backstop to CompiledMethod https://pharo.fogbugz.com/f/cases/11107 '. self loadTogether: self script145 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Dictionary methodsFor: 'accessing' stamp: 'ar 5/17/2003 14:07' prior: 20713878! bindingOf: varName ^self associationAt: varName ifAbsent:[nil]! ! !Dictionary methodsFor: 'enumerating' stamp: 'ar 5/18/2003 20:33' prior: 20714011! bindingsDo: aBlock ^self associationsDo: aBlock! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 37276967! decompile: aSelector in: aClass self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass ! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 37277228! decompile: aSelector in: aClass method: aMethod self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass method: aMethod! ! !OpalCompiler class methodsFor: 'old - decompiler' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 36528624! decompileMethod: aCompiledMethod self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompileMethod: aCompiledMethod! ! !OpalCompiler methodsFor: 'old - decompiler' stamp: 'MarcusDenker 10/11/2013 10:31' prior: 43810366! decompileMethod: aCompiledMethod self deprecated: 'decompiling bc->text is not supported'. ^self parse: aCompiledMethod codeForNoSource. ! ! !Symbol methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 10/11/2013 10:21'! asMethodPreamble self numArgs = 0 ifTrue: [ ^self asString]. ^ String streamContents: [ :str | self keywords doWithIndex: [ :each :index | str nextPutAll: each; nextPutAll: ' var' , index asString ] ]! ! !Symbol methodsFor: 'converting' stamp: 'MarcusDenker 10/11/2013 10:07' prior: 51354155! separateKeywords "#'foo:zork:' separateKeywords -> 'foo: zork:'" self isKeyword ifFalse: [ ^ self ]. ^ String streamContents: [ :stream | (self findTokens: $:) do: [ :each | stream nextPutAll: each; nextPut: $: ] separatedBy: [ stream nextPutAll: ' ' ] ]! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 10/11/2013 10:28'! codeForNoSource "this is the marker we use for method that have no source" ^String streamContents: [:str | str nextPutAll: self selector asMethodPreamble; cr;tab; nextPutAll: 'self methodHasNoSourceCode'].! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 10/11/2013 10:30' prior: 68739318! decompile self deprecated: 'decompiling bc->text is not supported'. ^self class compiler decompileMethod: self.! ! !CompiledMethod methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 10/11/2013 10:30' prior: 68739538! decompileString self deprecated: 'decompiling bc->text is not supported'. ^self codeForNoSource.! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 10/11/2013 10:29' prior: 36913239! sourceCode "Retrieve or reconstruct the source code for this method." | trailer source | trailer := self trailer. trailer sourceCode ifNotNil: [:code | ^ code ]. trailer hasSourcePointer ifFalse: [^ self codeForNoSource]. "Situation normal; read the sourceCode from the file" source := [self getSourceFromFile] on: Error do: [ :ex | ex return: nil]. source isEmptyOrNil ifTrue: [^ self codeForNoSource]. ^source! ! "Collections-Strings"! "Collections-Unordered"! "Compiler"! "Kernel"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(16 October 2013 10:23:40 am) Pharo.image priorSource: 23802887! ----STARTUP----an Array(16 October 2013 10:31:58 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 October 2013 10:31:59 am) Pharo-30490.image priorSource: 23818259! ----STARTUP----an Array(16 October 2013 11:45:30 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/16/2013 11:42' prior: 74134844! commentForCurrentUpdate ^ '11891 Remove Slowest Metacello Tests https://pharo.fogbugz.com/f/cases/11891 11904 Fix some Undeclared https://pharo.fogbugz.com/f/cases/11904 11905 testBlockNumberingForInjectInto should generate method with emedded source https://pharo.fogbugz.com/f/cases/11905 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/16/2013 11:42'! script146 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.47.mcz Kernel-MarcusDenker.1645.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCA-EstebanLorenzano.13.mcz Metacello-TestsMCB-EstebanLorenzano.54.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.552.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.142.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.54.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.17.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1326.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/16/2013 11:42'! update30491 "self new update30491" self withUpdateLog: '11891 Remove Slowest Metacello Tests https://pharo.fogbugz.com/f/cases/11891 11904 Fix some Undeclared https://pharo.fogbugz.com/f/cases/11904 11905 testBlockNumberingForInjectInto should generate method with emedded source https://pharo.fogbugz.com/f/cases/11905 '. self loadTogether: self script146 merge: false. ScriptLoader new unloadPackageNamed: 'Metacello-TestsMCA'. ScriptLoader new unloadPackageNamed: 'Metacello-TestsMCB'. self flushCaches. ! ! "ScriptLoader30"! !ClosureCompilerTest methodsFor: 'tests' stamp: 'MarcusDenker 10/16/2013 10:36' prior: 37205143! testBlockNumberingForInjectInto "Test that the compiler and CompiledMethod agree on the block numbering of Collection>>inject:into: and that temp names for inject:into: are recorded." "self new testBlockNumberingForInjectInto" | methodNode method tempRefs | methodNode := Parser new encoderClass: EncoderForV3PlusClosures; parse: (Collection sourceCodeAt: #inject:into:) class: Collection. method := methodNode generateWithSource. tempRefs := methodNode encoder blockExtentsToTempsMap. self assert: tempRefs keys asSet = (method debuggerMap startpcsToBlockExtents: method) values asSet. self assert: ((tempRefs includesKey: (0 to: 6)) and: [((tempRefs at: (0 to: 6)) collect: [:e | e first]) hasEqualElements: {'thisValue'. 'binaryBlock'. 'nextValue'}]). self assert: ((tempRefs includesKey: (2 to: 4)) and: [((tempRefs at: (2 to: 4)) collect: [:e | e first]) hasEqualElements: {'each'. 'binaryBlock'. 'nextValue'}])! ! !ChangeList class methodsFor: 'menu' stamp: 'MarcusDenker 10/16/2013 10:38' prior: 18779110! changeListMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'FileIn selections') help: 'Import the selected items into the image'; target: target; selector: #fileInSelections. (aBuilder item: #'FileOut selections...') help: 'Create a new file containing the selected items'; target: target; selector: #fileOutSelections; withSeparatorAfter. (aBuilder item: #'Compare to current') help: 'Open a separate window which shows the text differences between the on-file version and the in-image version'; target: target; selector: #compareToCurrentVersion. (aBuilder item: #'Toggle diffing') keyText: 'D'; help: 'Start or stop showing diffs in the code pane'; target: target; selector: #toggleDiffing; withSeparatorAfter. (aBuilder item: #'Select conflicts with any changeset') help: 'Select methods in the file which also occur in any change-set in the system'; target: target; selector: #selectAllConflicts. (aBuilder item: #'Select conflicts with current changeset') help: 'Select methods in the file which also occur in the current change-set'; target: target; selector: #selectConflicts. (aBuilder item: #'Select conflicts with...') help: 'Allows you to designate a file or change-set against which to check for code conflicts'; target: target; selector: #selectConflictsWith; withSeparatorAfter. (aBuilder item: #'Select unchanged definitions') help: 'Select class definitions, class comments and methods in the file whose in-image versions are the same as their in-file counterparts'; target: target; selector: #selectUnchangedDefinitions. (aBuilder item: #'Select unchanged methods') help: 'Select methods in the file whose in-image versions are the same as their in-file counterparts'; target: target; selector: #selectUnchangedMethods. (aBuilder item: #'Select new methods') help: 'Select methods in the file that do not current occur in the image'; target: target; selector: #selectNewMethods. (aBuilder item: #'Select methods for this class') help: 'Select all methods in the file that belong to the currently-selected class'; target: target; selector: #selectMethodsForThisClass. (aBuilder item: #'Select methods for classes in image') help: 'Select all methods in the file that belong to a class that exists in the image'; target: target; selector: #selectMethodsForExtantClasses. (aBuilder item: #'Select changes with contents matching') help: 'Select all changes in the file whose text includes a pattern'; target: target; selector: #selectContentsMatching; withSeparatorAfter. (aBuilder item: #'Select all') keyText: 'a'; help: 'Select all the items in the list'; target: target; selector: #selectAll. (aBuilder item: #'Deselect all') help: 'Deselect all the items in the list'; target: target; selector: #deselectAll. (aBuilder item: #'Invert selections') help: 'Select every item that is not currently selected, and deselect every item that *is* currently selected'; target: target; selector: #invertSelections; withSeparatorAfter. (aBuilder item: #'Browse all versions of single selection') help: 'Open a version browser showing the versions of the currently selected method'; target: target; selector: #browseVersions. (aBuilder item: #'Browse all versions of selections') help: 'Open a version browser showing all the versions of all the selected methods'; target: target; selector: #browseAllVersionsOfSelections. (aBuilder item: #'Browse current versions of selections') help: 'Open a message-list browser showing the current (in-image) counterparts of the selected methods'; target: target; selector: #browseCurrentVersionsOfSelections. (aBuilder item: #'Remove doIts') help: 'Remove all items that are doIts rather than methods'; target: target; selector: #removeDoIts. (aBuilder item: #'Remove older versions') help: 'Remove all but the most recent versions of methods in the list'; target: target; selector: #removeOlderMethodVersions. (aBuilder item: #'Remove up-to-date versions') help: 'Remove all items whose code is the same as the counterpart in-image code'; target: target; selector: #removeExistingMethodVersions. (aBuilder item: #'Remove selected items') help: 'Remove the selected items from the change-list'; target: target; selector: #removeSelections. (aBuilder item: #'Remove unselected items') help: 'Remove all the items not currently selected from the change-list'; target: target; selector: #removeNonSelections. ! ! !MetacelloPharoCommonPlatform methodsFor: 'github support' stamp: 'MarcusDenker 10/16/2013 10:39' prior: 72234347! extractRepositoryFrom: zipFile to: directory "unzip into " | out err proc errorMessage | out := FileStream forceNewFileNamed: '/tmp/zip.out'. err := FileStream forceNewFileNamed: '/tmp/zip.err'. errorMessage := ''. [ proc := #OSProcess asClass thisOSProcess forkJob: '/usr/bin/unzip' arguments: {'-u'. zipFile. '-d'. directory} environment: nil descriptors: (Array with: nil with: out with: err). proc ifNil: [ self noAccessorAvailable ]. [ proc isRunning ] whileTrue: [ (Delay forMilliseconds: 100) wait ] ] ensure: [ out close. err close ]. FileStream fileNamed: '/tmp/zip.err' do: [ :fileStream | (errorMessage := fileStream contentsOfEntireFile) notEmpty ifTrue: [ self error: 'unzip failure: ' , errorMessage printString ] ]! ! ChangeList removeSelector: #destroyCurrentCodeOfSelections! "CompilerTests"! "Metacello-PharoCommonPlatform"! "Tools"! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxTraversal131Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison133Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison132Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison131Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison130Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison113! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison112Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison111Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison106Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxSourceComparison! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBoxA! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox129Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox128Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox116Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox114Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox110Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox107Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox106Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox104Baseline! MetacelloToolBoxConstructorTestCase removeSelector: #testProjectToolBox! MetacelloToolBoxConstructorTestCase removeSelector: #testConfigurationResources! MetacelloToolBoxConstructorTestCase removeSelector: #tearDownPackages:! MetacelloToolBoxConstructorTestCase removeSelector: #tearDown! MetacelloToolBoxConstructorTestCase removeSelector: #setUp! MetacelloToolBoxConstructorTestCase removeSelector: #fullConfigurationNameList! MetacelloToolBoxConstructorTestCase removeSelector: #configurationNameList! MetacelloToolBoxConstructorTestCase removeSelector: #atomicConfigurationRepository! MetacelloToolBoxConstructorTestCase removeSelector: #assertVersionSpecFor:isEqualAfterModifyingVersion:! MetacelloToolBoxConstructorTestCase removeSelector: #assertMethodSourceFor:isEqualAfterModifyingVersion:! Smalltalk globals removeClassNamed: #MetacelloToolBoxConstructorTestCase! MetacelloSymbolicVersionTest removeSelector: #version20:! MetacelloSymbolicVersionTest removeSelector: #version12:! MetacelloSymbolicVersionTest removeSelector: #version11:! MetacelloSymbolicVersionTest removeSelector: #version10:! MetacelloSymbolicVersionTest removeSelector: #testStableVersionMethod! MetacelloSymbolicVersionTest removeSelector: #testStableVersion1x! MetacelloSymbolicVersionTest removeSelector: #testStableVersion12x! MetacelloSymbolicVersionTest removeSelector: #testStableVersion11x! MetacelloSymbolicVersionTest removeSelector: #testStableVersion10x! MetacelloSymbolicVersionTest removeSelector: #testStableVersion! MetacelloSymbolicVersionTest removeSelector: #testBleedingEdgeMethod! MetacelloSymbolicVersionTest removeSelector: #testBasicStableVersion! MetacelloSymbolicVersionTest removeSelector: #tearDownPackages:! MetacelloSymbolicVersionTest removeSelector: #tearDown! MetacelloSymbolicVersionTest removeSelector: #stableVersion:! MetacelloSymbolicVersionTest removeSelector: #setUp! MetacelloSymbolicVersionTest removeSelector: #bleedingEdge:! MetacelloSymbolicVersionTest removeSelector: #baseline20:! Smalltalk globals removeClassNamed: #MetacelloSymbolicVersionTest! MetacelloMCSpecLoaderTest removeSelector: #version10:! MetacelloMCSpecLoaderTest removeSelector: #testRepositoryFor! MetacelloMCSpecLoaderTest removeSelector: #testPackageSpecLoad! MetacelloMCSpecLoaderTest removeSelector: #testPackageSave! MetacelloMCSpecLoaderTest removeSelector: #testLatestPackage! MetacelloMCSpecLoaderTest removeSelector: #testGoferCommit! MetacelloMCSpecLoaderTest removeSelector: #testCopySpec! MetacelloMCSpecLoaderTest removeSelector: #tearDown! MetacelloMCSpecLoaderTest removeSelector: #doSilently! MetacelloMCSpecLoaderTest removeSelector: #baseline20:! MetacelloMCSpecLoaderTest removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloMCSpecLoaderTest! MetacelloMCCachingLoaderTestCase removeSelector: #version20:! MetacelloMCCachingLoaderTestCase removeSelector: #version10:! MetacelloMCCachingLoaderTestCase removeSelector: #testVersion10Fetch! MetacelloMCCachingLoaderTestCase removeSelector: #testDualFetch! MetacelloMCCachingLoaderTestCase removeSelector: #testBaselineLoad! MetacelloMCCachingLoaderTestCase removeSelector: #testBaselineFetch! MetacelloMCCachingLoaderTestCase removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloMCCachingLoaderTestCase! MetacelloGoferFunctionalTest removeSelector: #version20:! MetacelloGoferFunctionalTest removeSelector: #version10:! MetacelloGoferFunctionalTest removeSelector: #testPackagesNeedSaving! MetacelloGoferFunctionalTest removeSelector: #testPackageResolution! MetacelloGoferFunctionalTest removeSelector: #testMoosePackageResolution! MetacelloGoferFunctionalTest removeSelector: #testIssue40VersionResolution! MetacelloGoferFunctionalTest removeSelector: #testIssue40PackageResolution! MetacelloGoferFunctionalTest removeSelector: #testIssue178B! MetacelloGoferFunctionalTest removeSelector: #testIssue178A! MetacelloGoferFunctionalTest removeSelector: #testIssue155! MetacelloGoferFunctionalTest removeSelector: #testComparison01! MetacelloGoferFunctionalTest removeSelector: #testComparison! MetacelloGoferFunctionalTest removeSelector: #testCommitPackageVersion! MetacelloGoferFunctionalTest removeSelector: #testCommitPackageSpec! MetacelloGoferFunctionalTest removeSelector: #testCommitNewPackageSpec! MetacelloGoferFunctionalTest removeSelector: #testBasics! MetacelloGoferFunctionalTest removeSelector: #tearDown! MetacelloGoferFunctionalTest removeSelector: #repositorySpec! MetacelloGoferFunctionalTest removeSelector: #doSilently! MetacelloGoferFunctionalTest removeSelector: #baseline20:! MetacelloGoferFunctionalTest removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloGoferFunctionalTest! MetacelloGoferBasedLoaderTest removeSelector: #version63:! MetacelloGoferBasedLoaderTest removeSelector: #version62:! MetacelloGoferBasedLoaderTest removeSelector: #version61:! MetacelloGoferBasedLoaderTest removeSelector: #version60:! MetacelloGoferBasedLoaderTest removeSelector: #version50:! MetacelloGoferBasedLoaderTest removeSelector: #version40:! MetacelloGoferBasedLoaderTest removeSelector: #version31:! MetacelloGoferBasedLoaderTest removeSelector: #version30:! MetacelloGoferBasedLoaderTest removeSelector: #version11:! MetacelloGoferBasedLoaderTest removeSelector: #version10:! MetacelloGoferBasedLoaderTest removeSelector: #testVersionRecord! MetacelloGoferBasedLoaderTest removeSelector: #testVersionLoad! MetacelloGoferBasedLoaderTest removeSelector: #testVersionFetch! MetacelloGoferBasedLoaderTest removeSelector: #testSupplyingAnswerLoad! MetacelloGoferBasedLoaderTest removeSelector: #testRepositoryOverridesRecord! MetacelloGoferBasedLoaderTest removeSelector: #testRepositoryOverridesFetch! MetacelloGoferBasedLoaderTest removeSelector: #testRepositoryOverrides! MetacelloGoferBasedLoaderTest removeSelector: #testProjectRecord! MetacelloGoferBasedLoaderTest removeSelector: #testProjectPrePostLoad! MetacelloGoferBasedLoaderTest removeSelector: #testProjectLoad! MetacelloGoferBasedLoaderTest removeSelector: #testProjectFetch! MetacelloGoferBasedLoaderTest removeSelector: #testPackageSpecCacheRepository! MetacelloGoferBasedLoaderTest removeSelector: #testNestedLoad3! MetacelloGoferBasedLoaderTest removeSelector: #testNestedLoad2! MetacelloGoferBasedLoaderTest removeSelector: #testNestedLoad1! MetacelloGoferBasedLoaderTest removeSelector: #testMooseBaselineLoad! MetacelloGoferBasedLoaderTest removeSelector: #testMczFileImplicitLoad! MetacelloGoferBasedLoaderTest removeSelector: #testMczFileExplicitLoad! MetacelloGoferBasedLoaderTest removeSelector: #testIssue95! MetacelloGoferBasedLoaderTest removeSelector: #testIssue77! MetacelloGoferBasedLoaderTest removeSelector: #testIssue59PackageSpecRepositoryOverrides! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadG! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadF! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadE! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadD! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadC! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadB! MetacelloGoferBasedLoaderTest removeSelector: #testIssue49PartialLoadA! MetacelloGoferBasedLoaderTest removeSelector: #testIssue40Baseline! MetacelloGoferBasedLoaderTest removeSelector: #testIssue163PackageSpecCacheRepository! MetacelloGoferBasedLoaderTest removeSelector: #testBaselineRecord! MetacelloGoferBasedLoaderTest removeSelector: #testBaselineLoad! MetacelloGoferBasedLoaderTest removeSelector: #testBaselineFetch! MetacelloGoferBasedLoaderTest removeSelector: #testBaseline11PrePostLoadLoad! MetacelloGoferBasedLoaderTest removeSelector: #testBaseline11PrePostLoadFetch! MetacelloGoferBasedLoaderTest removeSelector: #tearDownPackages:! MetacelloGoferBasedLoaderTest removeSelector: #tearDown! MetacelloGoferBasedLoaderTest removeSelector: #setUp! MetacelloGoferBasedLoaderTest removeSelector: #preloadExecute! MetacelloGoferBasedLoaderTest removeSelector: #postloadSupplyingAnswers! MetacelloGoferBasedLoaderTest removeSelector: #postloadExecute! MetacelloGoferBasedLoaderTest removeSelector: #baselineMoose:! MetacelloGoferBasedLoaderTest removeSelector: #baselineIssue95:! MetacelloGoferBasedLoaderTest removeSelector: #baselineIssue77:! MetacelloGoferBasedLoaderTest removeSelector: #baselineIssue40:! MetacelloGoferBasedLoaderTest removeSelector: #baseline11:! MetacelloGoferBasedLoaderTest removeSelector: #baseline10:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version63:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version62:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version61:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version60:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version50:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version40:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version31:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version30:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version11:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #version10:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #loadType! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baselineMoose:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baselineIssue95:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baselineIssue77:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baselineIssue40:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baseline11:! MetacelloGoferBasedAtomicLoaderTest removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloGoferBasedAtomicLoaderTest! Smalltalk globals removeClassNamed: #MetacelloGoferBasedLoaderTest! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #testIssue112! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #test004! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #test003! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #test002! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #test001! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #tearDownPackages:! MetacelloDetermineCurrentVersionForLoadTest removeSelector: #setUp! Smalltalk globals removeClassNamed: #MetacelloDetermineCurrentVersionForLoadTest! MetacelloCurrentVersionTest removeSelector: #testProjectFie40ProjectFee40Loaded! MetacelloCurrentVersionTest removeSelector: #testProjectFie40Loaded! MetacelloCurrentVersionTest removeSelector: #testProjectFee40Loaded2PackagesEarlierFoo! MetacelloCurrentVersionTest removeSelector: #testProjectFee40Loaded2Packages! MetacelloCurrentVersionTest removeSelector: #testProjectFee40Loaded! MetacelloCurrentVersionTest removeSelector: #testIssue118! MetacelloCurrentVersionTest removeSelector: #testFoo50Loaded! MetacelloCurrentVersionTest removeSelector: #testFoo40LoadedLaterPackage! MetacelloCurrentVersionTest removeSelector: #testFoo40LoadedEarlierPackage! MetacelloCurrentVersionTest removeSelector: #testFoo40Loaded2Packages! MetacelloCurrentVersionTest removeSelector: #testFoo40Loaded1Package1LaterPackage! MetacelloCurrentVersionTest removeSelector: #testFoo40Loaded1Package1EarlierPackage! MetacelloCurrentVersionTest removeSelector: #testFoo40Loaded! MetacelloCurrentVersionTest removeSelector: #testFoo40Feaux40Loaded! MetacelloCurrentVersionTest removeSelector: #testFoo403540Loaded1PackageLater! MetacelloCurrentVersionTest removeSelector: #testFoo4020Loaded! MetacelloCurrentVersionTest removeSelector: #testFoo20Loaded! MetacelloCurrentVersionTest removeSelector: #testFoo20Feaux40Loaded! MetacelloCurrentVersionTest removeSelector: #testFoe40LoadedFoo50Loaded! MetacelloCurrentVersionTest removeSelector: #testFoe40LoadedFoo40Loaded1LaterPackage! MetacelloCurrentVersionTest removeSelector: #testFoe40LoadedFoo40Loaded! MetacelloCurrentVersionTest removeSelector: #testFoe40Loaded! MetacelloCurrentVersionTest removeSelector: #testFoe40AllLoadedDefaultPackageNamesToLoad! MetacelloCurrentVersionTest removeSelector: #testFoe40AllLoaded! MetacelloCurrentVersionTest removeSelector: #testFeaux40Loaded! MetacelloCurrentVersionTest removeSelector: #testCompareCurrentVersion! MetacelloCurrentVersionTest removeSelector: #tearDownPackages:! MetacelloCurrentVersionTest removeSelector: #setUp! MetacelloCurrentVersionTest removeSelector: #defaultTimeout! MetacelloCurrentVersionTest removeSelector: #assertProject:expectedVersionString:expectedFidelity:! Smalltalk globals removeClassNamed: #MetacelloCurrentVersionTest! MetacelloVersionQueryProjectConfig removeSelector: #baselineProject21:! MetacelloVersionQueryProjectConfig removeSelector: #baselineProject20:! Smalltalk globals removeClassNamed: #MetacelloVersionQueryProjectConfig! MetacelloVersionQueryMiscConfig removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloVersionQueryMiscConfig! MetacelloVersionQueryMasterConfig removeSelector: #baselineProject31:! MetacelloVersionQueryMasterConfig removeSelector: #baselineProject30:! Smalltalk globals removeClassNamed: #MetacelloVersionQueryMasterConfig! MetacelloVersionQueryLatestVersionConfig removeSelector: #version132:! MetacelloVersionQueryLatestVersionConfig removeSelector: #version131:! MetacelloVersionQueryLatestVersionConfig removeSelector: #version130:! MetacelloVersionQueryLatestVersionConfig removeSelector: #version120:! MetacelloVersionQueryLatestVersionConfig removeSelector: #version112:! MetacelloVersionQueryLatestVersionConfig removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloVersionQueryLatestVersionConfig! MetacelloVersionQueryExampleConfig removeSelector: #baseline21:! MetacelloVersionQueryExampleConfig removeSelector: #baseline20:! MetacelloVersionQueryExampleConfig removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloVersionQueryExampleConfig! MetacelloVersionQueryTestCase removeSelector: #testLatestFilter! MetacelloVersionQueryTestCase removeSelector: #testBaseline31PackagesForSpecNamed03! MetacelloVersionQueryTestCase removeSelector: #testBaseline30ResolveToLoadableSpecs01! MetacelloVersionQueryTestCase removeSelector: #testBaseline30Projects! MetacelloVersionQueryTestCase removeSelector: #testBaseline30PackagesForSpecNamed03! MetacelloVersionQueryTestCase removeSelector: #testBaseline30PackagesForSpecNamed02! MetacelloVersionQueryTestCase removeSelector: #testBaseline30PackagesForSpecNamed01! MetacelloVersionQueryTestCase removeSelector: #testBaseline30Packages! MetacelloVersionQueryTestCase removeSelector: #testBaseline30Groups! MetacelloVersionQueryTestCase removeSelector: #testBaseline21PackagesForSpecNamed02! MetacelloVersionQueryTestCase removeSelector: #testBaseline21PackagesForSpecNamed01! MetacelloVersionQueryTestCase removeSelector: #testBaseline20Projects! MetacelloVersionQueryTestCase removeSelector: #testBaseline20PackagesForSpecNamed04! MetacelloVersionQueryTestCase removeSelector: #testBaseline20PackagesForSpecNamed03! MetacelloVersionQueryTestCase removeSelector: #testBaseline20PackagesForSpecNamed02! MetacelloVersionQueryTestCase removeSelector: #testBaseline20PackagesForSpecNamed01! MetacelloVersionQueryTestCase removeSelector: #testBaseline20Packages! MetacelloVersionQueryTestCase removeSelector: #testBaseline20Load! MetacelloVersionQueryTestCase removeSelector: #testBaseline20Groups! MetacelloVersionQueryTestCase removeSelector: #testBaseline10ResolveToLoadableSpecs01! MetacelloVersionQueryTestCase removeSelector: #testBaseline10Projects! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed08! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed07! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed06! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed05! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed04! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed03! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed02! MetacelloVersionQueryTestCase removeSelector: #testBaseline10PackagesForSpecNamed01! MetacelloVersionQueryTestCase removeSelector: #testBaseline10Packages! MetacelloVersionQueryTestCase removeSelector: #testBaseline10Load! MetacelloVersionQueryTestCase removeSelector: #testBaseline10Groups! MetacelloVersionQueryTestCase removeSelector: #projectProject! MetacelloVersionQueryTestCase removeSelector: #masterProject! MetacelloVersionQueryTestCase removeSelector: #exampleProject! Smalltalk globals removeClassNamed: #MetacelloVersionQueryTestCase! MetacelloToolBoxAPITestCase removeSelector: #version15SourceStringB! MetacelloToolBoxAPITestCase removeSelector: #version15SourceStringA! MetacelloToolBoxAPITestCase removeSelector: #version14SourceStringUpdated50! MetacelloToolBoxAPITestCase removeSelector: #version14SourceStringUpdated! MetacelloToolBoxAPITestCase removeSelector: #version14SourceString! MetacelloToolBoxAPITestCase removeSelector: #version13SourceString4! MetacelloToolBoxAPITestCase removeSelector: #version13SourceString3! MetacelloToolBoxAPITestCase removeSelector: #version12SourceString! MetacelloToolBoxAPITestCase removeSelector: #version10SourceString! MetacelloToolBoxAPITestCase removeSelector: #version10Issue115UpdatedVersionSourceString! MetacelloToolBoxAPITestCase removeSelector: #version10Issue115CreateVersionSourceString! MetacelloToolBoxAPITestCase removeSelector: #testUpdateVersionMethod! MetacelloToolBoxAPITestCase removeSelector: #testReasonCodes! MetacelloToolBoxAPITestCase removeSelector: #testIssue5D! MetacelloToolBoxAPITestCase removeSelector: #testIssue5C! MetacelloToolBoxAPITestCase removeSelector: #testIssue5B! MetacelloToolBoxAPITestCase removeSelector: #testIssue5A! MetacelloToolBoxAPITestCase removeSelector: #testIssue125ModifySection! MetacelloToolBoxAPITestCase removeSelector: #testIssue125AddSection! MetacelloToolBoxAPITestCase removeSelector: #testIssue115UpdateVersion! MetacelloToolBoxAPITestCase removeSelector: #testIssue115CreateVersion! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom6D! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom6C! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom6B! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom6A! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom5! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom4! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom3! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom2! MetacelloToolBoxAPITestCase removeSelector: #testImportFrom1! MetacelloToolBoxAPITestCase removeSelector: #testComplexNullModifyBaseline! MetacelloToolBoxAPITestCase removeSelector: #testComplexModifyBaselineWithRepositoryIssue157! MetacelloToolBoxAPITestCase removeSelector: #testComplexModifyBaseline! MetacelloToolBoxAPITestCase removeSelector: #testComplexCreateBaseline! MetacelloToolBoxAPITestCase removeSelector: #testAddSection2! MetacelloToolBoxAPITestCase removeSelector: #testAddSection1! MetacelloToolBoxAPITestCase removeSelector: #testAddNestedSection2! MetacelloToolBoxAPITestCase removeSelector: #tempRepositories! MetacelloToolBoxAPITestCase removeSelector: #tearDownPackages:! MetacelloToolBoxAPITestCase removeSelector: #tearDown! MetacelloToolBoxAPITestCase removeSelector: #setUp! MetacelloToolBoxAPITestCase removeSelector: #runCase! MetacelloToolBoxAPITestCase removeSelector: #repositoryName! MetacelloToolBoxAPITestCase removeSelector: #projectSourceString! MetacelloToolBoxAPITestCase removeSelector: #hasPackage:! MetacelloToolBoxAPITestCase removeSelector: #createNested13Baseline! MetacelloToolBoxAPITestCase removeSelector: #createNested12Baseline! MetacelloToolBoxAPITestCase removeSelector: #createComplex11Baseline! MetacelloToolBoxAPITestCase removeSelector: #create15Baseline! MetacelloToolBoxAPITestCase removeSelector: #create14Version! MetacelloToolBoxAPITestCase removeSelector: #create14Baseline! MetacelloToolBoxAPITestCase removeSelector: #create12Baseline! MetacelloToolBoxAPITestCase removeSelector: #create11Baseline! MetacelloToolBoxAPITestCase removeSelector: #create10VersionIssue115! MetacelloToolBoxAPITestCase removeSelector: #create10BaselineIssue125! MetacelloToolBoxAPITestCase removeSelector: #create10BaselineIssue115! MetacelloToolBoxAPITestCase removeSelector: #create10Baseline! MetacelloToolBoxAPITestCase removeSelector: #configurationName! MetacelloToolBoxAPITestCase removeSelector: #complexBaseline11SourceString3! MetacelloToolBoxAPITestCase removeSelector: #complexBaseline11SourceString2! MetacelloToolBoxAPITestCase removeSelector: #complexBaseline11SourceString! MetacelloToolBoxAPITestCase removeSelector: #baseline14SourceString! MetacelloToolBoxAPITestCase removeSelector: #baseline12SourceString! MetacelloToolBoxAPITestCase removeSelector: #baseline11SourceString! MetacelloToolBoxAPITestCase removeSelector: #baseline10Issue125ModifySourceString! MetacelloToolBoxAPITestCase removeSelector: #baseline10Issue125AddSourceString! MetacelloToolBoxAPITestCase removeSelector: #alternatRepositoryName! Smalltalk globals removeClassNamed: #MetacelloToolBoxAPITestCase! MetacelloProjectRegistrationTestCase removeSelector: #testBasicValidRegistration! MetacelloProjectRegistrationTestCase removeSelector: #testBasicRegistration! MetacelloProjectRegistrationTestCase removeSelector: #testBasicNoLoadConflicts! MetacelloProjectRegistrationTestCase removeSelector: #testBasicHasLoadConflicts! MetacelloProjectRegistrationTestCase removeSelector: #testBasicConfigurationRegistration! MetacelloProjectRegistrationTestCase removeSelector: #testBasicBaselineRegistration! MetacelloProjectRegistrationTestCase removeSelector: #configurationProjectSpec! MetacelloProjectRegistrationTestCase removeSelector: #baselineProjectSpec! Smalltalk globals removeClassNamed: #MetacelloProjectRegistrationTestCase! MetacelloPlatformAttributesTestCase removeSelector: #version10beta0:! MetacelloPlatformAttributesTestCase removeSelector: #version011:! MetacelloPlatformAttributesTestCase removeSelector: #testVersion10beta0Pharo10Beta! MetacelloPlatformAttributesTestCase removeSelector: #testVersion10beta0! MetacelloPlatformAttributesTestCase removeSelector: #testVersion011Pharo10Beta! MetacelloPlatformAttributesTestCase removeSelector: #testVersion011! MetacelloPlatformAttributesTestCase removeSelector: #testLastVersion! MetacelloPlatformAttributesTestCase removeSelector: #testBaseline011Pharo10Beta! MetacelloPlatformAttributesTestCase removeSelector: #testBaseline011! MetacelloPlatformAttributesTestCase removeSelector: #projectWith:! MetacelloPlatformAttributesTestCase removeSelector: #project! MetacelloPlatformAttributesTestCase removeSelector: #baseline10beta0:! MetacelloPlatformAttributesTestCase removeSelector: #baseline011:! Smalltalk globals removeClassNamed: #MetacelloPlatformAttributesTestCase! MetacelloMCIssue125TestCase removeSelector: #testForDoListNotActive! MetacelloMCIssue125TestCase removeSelector: #testForDoListAttribute2Atrribute1Active! MetacelloMCIssue125TestCase removeSelector: #testForDoListAttribute1Atrribute2Active! MetacelloMCIssue125TestCase removeSelector: #testForDoListAtrribute2Active! MetacelloMCIssue125TestCase removeSelector: #testForDoListAtrribute1Active! MetacelloMCIssue125TestCase removeSelector: #tearDownPackageNames! MetacelloMCIssue125TestCase removeSelector: #tearDown! MetacelloMCIssue125TestCase removeSelector: #setUp! MetacelloMCIssue125TestCase removeSelector: #runCase! MetacelloMCIssue125TestCase removeSelector: #projectWith:! MetacelloMCIssue125TestCase removeSelector: #projectName! MetacelloMCIssue125TestCase removeSelector: #projectClass! MetacelloMCIssue125TestCase removeSelector: #project! MetacelloMCIssue125TestCase removeSelector: #monticelloRepository! MetacelloMCIssue125TestCase removeSelector: #hasPackage:! MetacelloMCIssue125TestCase removeSelector: #configurationRepository! Smalltalk globals removeClassNamed: #MetacelloMCIssue125TestCase! MetacelloLoadOrderTestCase removeSelector: #testBaseline300alpha5IncludesX! MetacelloLoadOrderTestCase removeSelector: #testBaseline14! MetacelloLoadOrderTestCase removeSelector: #testBaseline13a! MetacelloLoadOrderTestCase removeSelector: #testBaseline13! MetacelloLoadOrderTestCase removeSelector: #testBaseline12! MetacelloLoadOrderTestCase removeSelector: #testBaseline11! MetacelloLoadOrderTestCase removeSelector: #testBaseline10! MetacelloLoadOrderTestCase removeSelector: #project! MetacelloLoadOrderTestCase removeSelector: #baseline300alpha5:! MetacelloLoadOrderTestCase removeSelector: #baseline14:! MetacelloLoadOrderTestCase removeSelector: #baseline13:! MetacelloLoadOrderTestCase removeSelector: #baseline12:! MetacelloLoadOrderTestCase removeSelector: #baseline11:! MetacelloLoadOrderTestCase removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloLoadOrderTestCase! MetacelloIssueTestCase removeSelector: #tearDownPackageNames! MetacelloIssueTestCase removeSelector: #tearDown! MetacelloIssueTestCase removeSelector: #setUp! MetacelloIssueTestCase removeSelector: #runCase! MetacelloIssueTestCase removeSelector: #projectWith:! MetacelloIssueTestCase removeSelector: #projectName! MetacelloIssueTestCase removeSelector: #projectClass! MetacelloIssueTestCase removeSelector: #project! MetacelloIssueTestCase removeSelector: #monticelloRepository! MetacelloIssueTestCase removeSelector: #hasPackage:! MetacelloIssueTestCase removeSelector: #configurationRepository! MetacelloIssue171TestCase removeSelector: #testIssue171b! MetacelloIssue171TestCase removeSelector: #testIssue171a! MetacelloIssue171TestCase removeSelector: #tearDownPackageNames! MetacelloIssue171TestCase removeSelector: #projectName! Smalltalk globals removeClassNamed: #MetacelloIssue171TestCase! MetacelloIssue154TestCase removeSelector: #testProjectCreationD! MetacelloIssue154TestCase removeSelector: #testProjectCreationC! MetacelloIssue154TestCase removeSelector: #testProjectCreationB! MetacelloIssue154TestCase removeSelector: #testProjectCreationA! MetacelloIssue154TestCase removeSelector: #testOldProjectReferenceSpecification! MetacelloIssue154TestCase removeSelector: #testNewProjectReferenceSpecification! MetacelloIssue154TestCase removeSelector: #testClassicProjectReferenceSpecificationD! MetacelloIssue154TestCase removeSelector: #testClassicProjectReferenceSpecificationC! MetacelloIssue154TestCase removeSelector: #testClassicProjectReferenceSpecificationB! MetacelloIssue154TestCase removeSelector: #testClassicProjectReferenceSpecificationA! MetacelloIssue154TestCase removeSelector: #tearDownPackageNames! MetacelloIssue154TestCase removeSelector: #projectName! MetacelloIssue154TestCase removeSelector: #expectedFailures! MetacelloIssue154TestCase removeSelector: #assertMetacelloExampleVersionSpec:! MetacelloIssue154TestCase removeSelector: #assertMetacelloExampleProjectReferenceSpec:projectName:className:packageName:fileName:! MetacelloIssue154TestCase removeSelector: #assertMetacelloExampleProjectReferenceSpec:! Smalltalk globals removeClassNamed: #MetacelloIssue154TestCase! MetacelloIssue136TestCase removeSelector: #testIssue136! MetacelloIssue136TestCase removeSelector: #testCachedIssue136! MetacelloIssue136TestCase removeSelector: #projectName! Smalltalk globals removeClassNamed: #MetacelloIssue136TestCase! MetacelloIssue119TestCase removeSelector: #testIssue119g! MetacelloIssue119TestCase removeSelector: #testIssue119f! MetacelloIssue119TestCase removeSelector: #testIssue119e! MetacelloIssue119TestCase removeSelector: #testIssue119d! MetacelloIssue119TestCase removeSelector: #testIssue119c! MetacelloIssue119TestCase removeSelector: #testIssue119b! MetacelloIssue119TestCase removeSelector: #testIssue119a! MetacelloIssue119TestCase removeSelector: #tearDownPackageNames! MetacelloIssue119TestCase removeSelector: #projectName! Smalltalk globals removeClassNamed: #MetacelloIssue119TestCase! MetacelloIssue115TestCase removeSelector: #testIssue115b! MetacelloIssue115TestCase removeSelector: #testIssue115a! MetacelloIssue115TestCase removeSelector: #projectName! Smalltalk globals removeClassNamed: #MetacelloIssue115TestCase! Smalltalk globals removeClassNamed: #MetacelloIssueTestCase! MetacelloIssue188TestCase removeSelector: #version10:! MetacelloIssue188TestCase removeSelector: #version09:! MetacelloIssue188TestCase removeSelector: #testOrderedVersions! MetacelloIssue188TestCase removeSelector: #testLatestVersion! MetacelloIssue188TestCase removeSelector: #testCurrentVersion! MetacelloIssue188TestCase removeSelector: #structural10B:! MetacelloIssue188TestCase removeSelector: #structural10A:! MetacelloIssue188TestCase removeSelector: #project! MetacelloIssue188TestCase removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloIssue188TestCase! MetacelloIssue108TestCase removeSelector: #testLatestPackage! MetacelloIssue108TestCase removeSelector: #testBaseline20! MetacelloIssue108TestCase removeSelector: #testBaseline10! MetacelloIssue108TestCase removeSelector: #tempRepositories! MetacelloIssue108TestCase removeSelector: #tearDownPackageNames! MetacelloIssue108TestCase removeSelector: #tearDown! MetacelloIssue108TestCase removeSelector: #setUp! MetacelloIssue108TestCase removeSelector: #runCase! MetacelloIssue108TestCase removeSelector: #repositoryName! MetacelloIssue108TestCase removeSelector: #project! MetacelloIssue108TestCase removeSelector: #hasPackage:! MetacelloIssue108TestCase removeSelector: #expectedFailures! MetacelloIssue108TestCase removeSelector: #baseline20:! MetacelloIssue108TestCase removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloIssue108TestCase! MetacelloImportsTestCase removeSelector: #version10beta4:! MetacelloImportsTestCase removeSelector: #version10beta3Extra:! MetacelloImportsTestCase removeSelector: #version10beta3:! MetacelloImportsTestCase removeSelector: #testVersion10beta4ImportedVersions! MetacelloImportsTestCase removeSelector: #testVersion10beta4! MetacelloImportsTestCase removeSelector: #testVersion10beta3ImportedVersions! MetacelloImportsTestCase removeSelector: #testVersion10beta3Extra! MetacelloImportsTestCase removeSelector: #testVersion10beta3! MetacelloImportsTestCase removeSelector: #testBaseline10beta3! MetacelloImportsTestCase removeSelector: #testBaseline10beta0! MetacelloImportsTestCase removeSelector: #project! MetacelloImportsTestCase removeSelector: #baseline10beta3:! MetacelloImportsTestCase removeSelector: #baseline10beta0:! Smalltalk globals removeClassNamed: #MetacelloImportsTestCase! MetacelloHTTPRepositoryLoadTestCase removeSelector: #testLoad! MetacelloHTTPRepositoryLoadTestCase removeSelector: #testAuthentication! MetacelloHTTPRepositoryLoadTestCase removeSelector: #tearDown! MetacelloHTTPRepositoryLoadTestCase removeSelector: #setUp! MetacelloHTTPRepositoryLoadTestCase removeSelector: #project! MetacelloHTTPRepositoryLoadTestCase removeSelector: #hasPackage:! MetacelloHTTPRepositoryLoadTestCase removeSelector: #enabled! MetacelloHTTPRepositoryLoadTestCase removeSelector: #baselineAuthentication:! MetacelloHTTPRepositoryLoadTestCase removeSelector: #baseline:! MetacelloHTTPRepositoryLoadTestCase removeSelector: #assertClass:selector:! MetacelloHTTPRepositoryLoadTestCase removeSelector: #assertClass:! Smalltalk globals removeClassNamed: #MetacelloHTTPRepositoryLoadTestCase! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch06! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch05! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch04! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch03! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch02! MetacelloGoferPackageTestCase removeSelector: #testInstanceMatch01! MetacelloGoferPackageTestCase removeSelector: #testClassMatch! Smalltalk globals removeClassNamed: #MetacelloGoferPackageTestCase! MetacelloGithubIssue175TestCase removeSelector: #testIssue175! Smalltalk globals removeClassNamed: #MetacelloGithubIssue175TestCase! MetacelloGithubIssue111TestCase removeSelector: #testIssue111! MetacelloGithubIssue111TestCase removeSelector: #tearDownPackageNames! MetacelloGithubIssue111TestCase removeSelector: #tearDown! MetacelloGithubIssue111TestCase removeSelector: #setUp! MetacelloGithubIssue111TestCase removeSelector: #runCase! MetacelloGithubIssue111TestCase removeSelector: #hasPackage:! MetacelloGithubIssue111TestCase removeSelector: #getTestRepositoryDirectory! MetacelloGithubIssue111TestCase removeSelector: #getTestRepository! Smalltalk globals removeClassNamed: #MetacelloGithubIssue111TestCase! MetacelloConfigMCAPITestCase removeSelector: #testProjectPackageRepository! MetacelloConfigMCAPITestCase removeSelector: #testProjectPackageRepositories! MetacelloConfigMCAPITestCase removeSelector: #testProjectPackageRecord! MetacelloConfigMCAPITestCase removeSelector: #testPackageRequires! MetacelloConfigMCAPITestCase removeSelector: #testPackageRepository! MetacelloConfigMCAPITestCase removeSelector: #testPackageRepositories! MetacelloConfigMCAPITestCase removeSelector: #testPackageIncludesRequiresSupplyingAnswers! MetacelloConfigMCAPITestCase removeSelector: #testPackageIncludes! MetacelloConfigMCAPITestCase removeSelector: #testNestedVersionOrder! MetacelloConfigMCAPITestCase removeSelector: #testNestedBaselineOrder! MetacelloConfigMCAPITestCase removeSelector: #testNestedBaseline! MetacelloConfigMCAPITestCase removeSelector: #testIssue100! MetacelloConfigMCAPITestCase class removeSelector: #isAbstract! MetacelloConfigAPIToolBoxTestCase removeSelector: #testSymbolicVersionNotDefinedError! MetacelloConfigAPIToolBoxTestCase removeSelector: #testProjectPreloadPostload! MetacelloConfigAPIToolBoxTestCase removeSelector: #testProjectPreloadOverride! MetacelloConfigAPIToolBoxTestCase removeSelector: #testProjectCopyPreloadPostload! MetacelloConfigAPIToolBoxTestCase removeSelector: #testProjectCopyPreloadOverride! MetacelloConfigAPIToolBoxTestCase removeSelector: #testProjectCopyPackageRepositories! MetacelloConfigAPIToolBoxTestCase removeSelector: #testPackagePreloadPostload! MetacelloConfigAPIToolBoxTestCase removeSelector: #testPackagePreloadOverride! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder8! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder7! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder6! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder5! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder4! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder3! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder2! MetacelloConfigAPIToolBoxTestCase removeSelector: #testNestedForDoOrder1! MetacelloConfigAPIToolBoxTestCase removeSelector: #tearDown! MetacelloConfigAPIToolBoxTestCase removeSelector: #setUp! MetacelloConfigAPIToolBoxTestCase removeSelector: #runCase! MetacelloConfigAPIToolBoxTestCase removeSelector: #projectWith:! MetacelloConfigAPIToolBoxTestCase removeSelector: #monticelloRepository! MetacelloConfigAPIToolBoxTestCase removeSelector: #hasPackage:! MetacelloConfigAPIToolBoxTestCase removeSelector: #configurationRepository! Smalltalk globals removeClassNamed: #MetacelloConfigAPIToolBoxTestCase! MetacelloConfigAPITestCase removeSelector: #version124:! MetacelloConfigAPITestCase removeSelector: #version113:! MetacelloConfigAPITestCase removeSelector: #testVersionPreloadRemove! MetacelloConfigAPITestCase removeSelector: #testVersionPreloadPostload! MetacelloConfigAPITestCase removeSelector: #testVersionPreloadOverride! MetacelloConfigAPITestCase removeSelector: #testProjectPreloadWith! MetacelloConfigAPITestCase removeSelector: #testProjectPreloadPostload! MetacelloConfigAPITestCase removeSelector: #testProjectPreloadOverride! MetacelloConfigAPITestCase removeSelector: #testProjectPreloadCopyFromB! MetacelloConfigAPITestCase removeSelector: #testProjectPreloadCopyFrom! MetacelloConfigAPITestCase removeSelector: #testPrepostProjectLoadsDo! MetacelloConfigAPITestCase removeSelector: #testPrePostPackageLoadsDo! MetacelloConfigAPITestCase removeSelector: #testPackageSupplyingAnswers! MetacelloConfigAPITestCase removeSelector: #testPackagePreloadWith! MetacelloConfigAPITestCase removeSelector: #testPackagePreloadPostload! MetacelloConfigAPITestCase removeSelector: #testPackagePreloadOverride! MetacelloConfigAPITestCase removeSelector: #testNullLoaderLoadedRepositories! MetacelloConfigAPITestCase removeSelector: #setUp! MetacelloConfigAPITestCase removeSelector: #projectWith:! MetacelloConfigAPITestCase removeSelector: #preloadForSupplyingAnswers! MetacelloConfigAPITestCase removeSelector: #preloadForProject! MetacelloConfigAPITestCase removeSelector: #preloadForCore! MetacelloConfigAPITestCase removeSelector: #postloadForSupplyingAnswers! MetacelloConfigAPITestCase removeSelector: #postloadForProject! MetacelloConfigAPITestCase removeSelector: #postloadForCore:package:! MetacelloConfigAPITestCase removeSelector: #conditionResult:! MetacelloConfigAPITestCase removeSelector: #baseline124:! MetacelloConfigAPITestCase removeSelector: #baseline123:! MetacelloConfigAPITestCase removeSelector: #baseline122:! MetacelloConfigAPITestCase removeSelector: #baseline121:! MetacelloConfigAPITestCase removeSelector: #baseline120:! MetacelloConfigAPITestCase removeSelector: #baseline119:! MetacelloConfigAPITestCase removeSelector: #baseline118:! MetacelloConfigAPITestCase removeSelector: #baseline117:! MetacelloConfigAPITestCase removeSelector: #baseline116:! MetacelloConfigAPITestCase removeSelector: #baseline115:! MetacelloConfigAPITestCase removeSelector: #baseline114:! MetacelloConfigAPITestCase removeSelector: #baseline113:! MetacelloConfigAPITestCase removeSelector: #baseline112:! MetacelloConfigAPITestCase removeSelector: #baseline111:! MetacelloConfigAPITestCase removeSelector: #baseline110:! MetacelloConfigAPITestCase removeSelector: #baseline109:! MetacelloConfigAPITestCase removeSelector: #baseline108:! MetacelloConfigAPITestCase removeSelector: #baseline107:! MetacelloConfigAPITestCase removeSelector: #baseline106:! MetacelloConfigAPITestCase removeSelector: #baseline105:! MetacelloConfigAPITestCase removeSelector: #baseline104:! MetacelloConfigAPITestCase removeSelector: #baseline103:! MetacelloConfigAPITestCase removeSelector: #baseline102:! MetacelloConfigAPITestCase removeSelector: #baseline101:! MetacelloConfigAPITestCase removeSelector: #baseline100:! MetacelloConfigAPITestCase removeSelector: #alternatePreloadForCore! Smalltalk globals removeClassNamed: #MetacelloConfigAPITestCase! Smalltalk globals removeClassNamed: #MetacelloConfigMCAPITestCase! MetacelloConfigCoreAPITestCase removeSelector: #version124:! MetacelloConfigCoreAPITestCase removeSelector: #testVersionPreloadRemove! MetacelloConfigCoreAPITestCase removeSelector: #testVersionPreloadOverride! MetacelloConfigCoreAPITestCase removeSelector: #testVersionPrePostload! MetacelloConfigCoreAPITestCase removeSelector: #testSymbolicVersionNotDefinedError! MetacelloConfigCoreAPITestCase removeSelector: #testProjectPackageWith! MetacelloConfigCoreAPITestCase removeSelector: #testProjectPackageOverride! MetacelloConfigCoreAPITestCase removeSelector: #testProjectPackageCopy! MetacelloConfigCoreAPITestCase removeSelector: #testProjectPackage! MetacelloConfigCoreAPITestCase removeSelector: #testNestedBaseline! MetacelloConfigCoreAPITestCase removeSelector: #testIssue100! MetacelloConfigCoreAPITestCase removeSelector: #testBaseline203! MetacelloConfigCoreAPITestCase removeSelector: #testBaseline202! MetacelloConfigCoreAPITestCase removeSelector: #testBaseline201Outer! MetacelloConfigCoreAPITestCase removeSelector: #testBaseline201! MetacelloConfigCoreAPITestCase removeSelector: #testBaseline200! MetacelloConfigCoreAPITestCase removeSelector: #symbolicVersionExplicitlyDoesNotExist:! MetacelloConfigCoreAPITestCase removeSelector: #projectWith:! MetacelloConfigCoreAPITestCase removeSelector: #baseline203:! MetacelloConfigCoreAPITestCase removeSelector: #baseline202:! MetacelloConfigCoreAPITestCase removeSelector: #baseline201:! MetacelloConfigCoreAPITestCase removeSelector: #baseline200:! MetacelloConfigCoreAPITestCase removeSelector: #baseline124:! MetacelloConfigCoreAPITestCase removeSelector: #baseline120:! MetacelloConfigCoreAPITestCase removeSelector: #baseline119:! MetacelloConfigCoreAPITestCase removeSelector: #baseline116:! MetacelloConfigCoreAPITestCase removeSelector: #baseline114:! MetacelloConfigCoreAPITestCase removeSelector: #baseline111:! MetacelloConfigCoreAPITestCase removeSelector: #baseline104:! MetacelloConfigCoreAPITestCase removeSelector: #baseline103:! MetacelloConfigCoreAPITestCase removeSelector: #baseline102:! MetacelloConfigCoreAPITestCase removeSelector: #baseline101:! MetacelloConfigCoreAPITestCase removeSelector: #baseline100:! Smalltalk globals removeClassNamed: #MetacelloConfigCoreAPITestCase! MetacelloConfigAbstractAPITestCase removeSelector: #testVersionErrors! MetacelloConfigAbstractAPITestCase removeSelector: #testProjectPackage! MetacelloConfigAbstractAPITestCase removeSelector: #testBlessingBlock! MetacelloConfigAbstractAPITestCase removeSelector: #testBlessing! MetacelloConfigAbstractAPITestCase removeSelector: #projectWith:! MetacelloConfigAbstractAPITestCase removeSelector: #project! MetacelloConfigAbstractAPITestCase class removeSelector: #isAbstract! Smalltalk globals removeClassNamed: #MetacelloConfigAbstractAPITestCase! MetacelloCleanUpChangeSetsTestCase removeSelector: #testCleanUpChangeSets! Smalltalk globals removeClassNamed: #MetacelloCleanUpChangeSetsTestCase! MetacelloScriptingWarningTestCase removeSelector: #testWarningDuringLoad! MetacelloScriptingWarningTestCase removeSelector: #tearDownPackageList! MetacelloScriptingWarningTestCase removeSelector: #setUpRepositories! MetacelloScriptingWarningTestCase removeSelector: #doSilently! Smalltalk globals removeClassNamed: #MetacelloScriptingWarningTestCase! MetacelloScriptingTestCase removeSelector: #tearDownRepositories! MetacelloScriptingTestCase removeSelector: #setUpRepositoryContents:sourceRepo:targetRepo:! MetacelloScriptingTestCase removeSelector: #setUpRepositories! MetacelloScriptingTestCase removeSelector: #samplePath! MetacelloScriptingTestCase removeSelector: #externalPath! MetacelloScriptingTestCase removeSelector: #configurationPath! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63i092! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63h092! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63g! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63f! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63e! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63d092! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63d091! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63c! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63b! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63a092! MetacelloScriptingIssuesTestCase removeSelector: #testIssue63a091! MetacelloScriptingIssuesTestCase removeSelector: #testIssue59! MetacelloScriptingIssuesTestCase removeSelector: #testIssue47! MetacelloScriptingIssuesTestCase removeSelector: #testIssue32! MetacelloScriptingIssuesTestCase removeSelector: #tearDownRepositories! MetacelloScriptingIssuesTestCase removeSelector: #tearDownPackageList! MetacelloScriptingIssuesTestCase removeSelector: #tearDown! MetacelloScriptingIssuesTestCase removeSelector: #setUpRepositories! MetacelloScriptingIssuesTestCase removeSelector: #setUp! Smalltalk globals removeClassNamed: #MetacelloScriptingIssuesTestCase! MetacelloScriptingIssue181TestCase removeSelector: #testIssue185c! MetacelloScriptingIssue181TestCase removeSelector: #testIssue185b! MetacelloScriptingIssue181TestCase removeSelector: #testIssue185a! MetacelloScriptingIssue181TestCase removeSelector: #testBaselineLoad! MetacelloScriptingIssue181TestCase removeSelector: #tearDownPackageList! MetacelloScriptingIssue181TestCase removeSelector: #setUpRepositories! Smalltalk globals removeClassNamed: #MetacelloScriptingIssue181TestCase! MetacelloScriptingConflictsTestCase removeSelector: #testFileTreeLoadConfigurationVersionsNotification3! MetacelloScriptingConflictsTestCase removeSelector: #testFileTreeLoadConfigurationVersionsNotification1! MetacelloScriptingConflictsTestCase removeSelector: #testFileTreeLoadConfigurationVersions! MetacelloScriptingConflictsTestCase removeSelector: #testFileTreeLoadConfigurationVersion! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict9! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict8! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict7! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict6WithLock2! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict6WithLock1! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict6! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict5! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict4! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict3! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict2! MetacelloScriptingConflictsTestCase removeSelector: #testConfigurationConflict1! MetacelloScriptingConflictsTestCase removeSelector: #tearDownRepositories! MetacelloScriptingConflictsTestCase removeSelector: #tearDownPackageList! MetacelloScriptingConflictsTestCase removeSelector: #setUpRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloScriptingConflictsTestCase! MetacelloScriptingSuccessTestCase removeSelector: #testMczLoad2! MetacelloScriptingSuccessTestCase removeSelector: #testMczLoad1! MetacelloScriptingSuccessTestCase removeSelector: #testIssue27Caching! MetacelloScriptingSuccessTestCase removeSelector: #testIssue136Loading! MetacelloScriptingSuccessTestCase removeSelector: #testGithubRefBaselineLoad3! MetacelloScriptingSuccessTestCase removeSelector: #testGithubRefBaselineLoad2! MetacelloScriptingSuccessTestCase removeSelector: #testGithubRefBaselineLoad1! MetacelloScriptingSuccessTestCase removeSelector: #testGitHubLoad1! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadMarianosImage2! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadMarianosImage1! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline9! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline8! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline7! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline6! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline5! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline4! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadGithubRefBaseline2! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadConfiguration2! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadConfiguration1! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadBaseline2! MetacelloScriptingSuccessTestCase removeSelector: #testFileTreeLoadBaseline1! Smalltalk globals removeClassNamed: #MetacelloScriptingSuccessTestCase! MetacelloScriptingRegistryTestCase removeSelector: #validateRegistrations:! MetacelloScriptingRegistryTestCase removeSelector: #validateConfiguration:! MetacelloScriptingRegistryTestCase removeSelector: #validateBaseline:! MetacelloScriptingRegistryTestCase removeSelector: #testPrimeRegistryFromImage5! MetacelloScriptingRegistryTestCase removeSelector: #testPrimeRegistryFromImage4! MetacelloScriptingRegistryTestCase removeSelector: #testPrimeRegistryFromImage3! MetacelloScriptingRegistryTestCase removeSelector: #testPrimeRegistryFromImage2! MetacelloScriptingRegistryTestCase removeSelector: #testPrimeRegistryFromImage1! MetacelloScriptingRegistryTestCase removeSelector: #testLoadConfigurationWithBaseline! MetacelloScriptingRegistryTestCase removeSelector: #testLoadConfigurationThenBaseline! MetacelloScriptingRegistryTestCase removeSelector: #tearDownPackageList! MetacelloScriptingRegistryTestCase removeSelector: #externalRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloScriptingRegistryTestCase! MetacelloScriptingProjectFilterTestCase removeSelector: #validateRegistryNameFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #validateRegistryCollectionFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #validateRegistryBlockFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #validateImageNameFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #validateImageCollectionFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #validateImageBlockFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testLockedFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testLoadCollectionFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testLoadBlockFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testListFilters! MetacelloScriptingProjectFilterTestCase removeSelector: #testListCollectionFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testListBlockFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testGetCollectionFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #testGetBlockFilter! MetacelloScriptingProjectFilterTestCase removeSelector: #tearDownRepositories! MetacelloScriptingProjectFilterTestCase removeSelector: #tearDownPackageList! MetacelloScriptingProjectFilterTestCase removeSelector: #setUpRepositories! Smalltalk globals removeClassNamed: #MetacelloScriptingProjectFilterTestCase! MetacelloScriptingFetchRecordTestCase removeSelector: #testRecordIssue83! MetacelloScriptingFetchRecordTestCase removeSelector: #testFetchRepositoryOverrides! MetacelloScriptingFetchRecordTestCase removeSelector: #testFetchIssue83! MetacelloScriptingFetchRecordTestCase removeSelector: #testFetchCacheRepository! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicRecord004b! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicRecord004a! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicRecord003! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicRecord002! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicRecord001! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicFetch004b! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicFetch004a! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicFetch003! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicFetch002! MetacelloScriptingFetchRecordTestCase removeSelector: #testBasicFetch001! MetacelloScriptingFetchRecordTestCase removeSelector: #tearDownRepositories! MetacelloScriptingFetchRecordTestCase removeSelector: #tearDownPackageList! MetacelloScriptingFetchRecordTestCase removeSelector: #tearDown! MetacelloScriptingFetchRecordTestCase removeSelector: #setUpRepositories! MetacelloScriptingFetchRecordTestCase removeSelector: #setUp! Smalltalk globals removeClassNamed: #MetacelloScriptingFetchRecordTestCase! MetacelloScriptingErrorsTestCase removeSelector: #testPresentVersion3! MetacelloScriptingErrorsTestCase removeSelector: #testMissingProject! MetacelloScriptingErrorsTestCase removeSelector: #testMissingClassName! MetacelloScriptingErrorsTestCase removeSelector: #testFileTreeGetConfigurationBasicSpecIV! MetacelloScriptingErrorsTestCase removeSelector: #testFileTreeGetBaseline! MetacelloScriptingErrorsTestCase removeSelector: #handleExpectedValidationFailure:reasonCode:! MetacelloScriptingErrorsTestCase removeSelector: #handleExpectedValidationFailure:! Smalltalk globals removeClassNamed: #MetacelloScriptingErrorsTestCase! MetacelloScriptingEnsureLoadedTestCase removeSelector: #testEnsureLoad! MetacelloScriptingEnsureLoadedTestCase removeSelector: #testDefaultVersionUpgrade! MetacelloScriptingEnsureLoadedTestCase removeSelector: #testBasicDefaultVersion! MetacelloScriptingEnsureLoadedTestCase removeSelector: #tearDownPackageList! Smalltalk globals removeClassNamed: #MetacelloScriptingEnsureLoadedTestCase! MetacelloScriptingLockTestCase removeSelector: #testSymbolicUnlock! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockedLoad! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockNUnlockNload! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockNLockedProjectWarning2! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockNLockedProjectWarning1! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockNLockedProjectEnforce1! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLockNLoad! MetacelloScriptingLockTestCase removeSelector: #testSymbolicLock! MetacelloScriptingLockTestCase removeSelector: #testBasicUnlock! MetacelloScriptingLockTestCase removeSelector: #testBasicLockedLoad! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNUnlockNload! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectWarning2! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectWarning1! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectEnforce4! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectEnforce3! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectEnforce2! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectEnforce1! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLockedProjectBreak1! MetacelloScriptingLockTestCase removeSelector: #testBasicLockNLoad! MetacelloScriptingLockTestCase removeSelector: #testBasicLock! MetacelloScriptingLockTestCase removeSelector: #tearDownPackageList! Smalltalk globals removeClassNamed: #MetacelloScriptingLockTestCase! MetacelloScriptingLoadTestCase removeSelector: #testStableLoadC! MetacelloScriptingLoadTestCase removeSelector: #testStableLoadB! MetacelloScriptingLoadTestCase removeSelector: #testStableLoadA! MetacelloScriptingLoadTestCase removeSelector: #testIssue87! MetacelloScriptingLoadTestCase removeSelector: #testIssue84! MetacelloScriptingLoadTestCase removeSelector: #testDefaultVersion! MetacelloScriptingLoadTestCase removeSelector: #testDefaultRepository! MetacelloScriptingLoadTestCase removeSelector: #tearDownPackageList! Smalltalk globals removeClassNamed: #MetacelloScriptingLoadTestCase! MetacelloScriptingIssue156TestCase removeSelector: #testIndirectConfigurationLoadingBaseline! MetacelloScriptingIssue156TestCase removeSelector: #testConfigurationThenBaselineNoPreload! MetacelloScriptingIssue156TestCase removeSelector: #testConfigurationThenBaselineMNU! MetacelloScriptingIssue156TestCase removeSelector: #testConfigurationLoadingBaseline! MetacelloScriptingIssue156TestCase removeSelector: #testBaselineThenConfigurationCorrect! MetacelloScriptingIssue156TestCase removeSelector: #testBaselineThenConfigurationConflict! MetacelloScriptingIssue156TestCase removeSelector: #tearDownPackageList! MetacelloScriptingIssue156TestCase removeSelector: #setUpRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloScriptingIssue156TestCase! MetacelloScriptingGetTestCase removeSelector: #testLoadNGet! MetacelloScriptingGetTestCase removeSelector: #testGetRefresh! MetacelloScriptingGetTestCase removeSelector: #testGetNLoad! MetacelloScriptingGetTestCase removeSelector: #testGetBaseline! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationVersionSpecXXX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationVersionSpecXX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationVersionSpecX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationVersionSpecIV! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationBasicSpecXXX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationBasicSpecXX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationBasicSpecX! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetConfigurationBasicSpecIV! MetacelloScriptingGetTestCase removeSelector: #testFileTreeGetBaseline! MetacelloScriptingGetTestCase removeSelector: #tearDownRepositories! MetacelloScriptingGetTestCase removeSelector: #setUpRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloScriptingGetTestCase! MetacelloExternalScriptingTestCase removeSelector: #tearDownRepositories! MetacelloExternalScriptingTestCase removeSelector: #setUpRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloExternalScriptingTestCase! MetacelloBasicScriptingTestCase removeSelector: #tearDownPackageList! MetacelloBasicScriptingTestCase removeSelector: #setUpRepositoryContents! MetacelloBasicScriptingTestCase removeSelector: #externalRepositoryContents! MetacelloBasicScriptingTestCase removeSelector: #configurationRepositoryContents! Smalltalk globals removeClassNamed: #MetacelloBasicScriptingTestCase! Smalltalk globals removeClassNamed: #MetacelloScriptingTestCase! MetacelloScriptingStandardTestHarness removeSelector: #verifyPackageNotLoaded:! MetacelloScriptingStandardTestHarness removeSelector: #verify:version:! MetacelloScriptingStandardTestHarness removeSelector: #verify:loadedFrom:! MetacelloScriptingStandardTestHarness removeSelector: #validateProjects:! MetacelloScriptingStandardTestHarness removeSelector: #validateExpectedConfigurationClassName:expectedConfigurationVersion:expectedConfigurationRepository:expectedBaselineClassName:expectedBaselineVersion:expectedBaselineRepository:! MetacelloScriptingStandardTestHarness removeSelector: #tearDownRepositories! MetacelloScriptingStandardTestHarness removeSelector: #tearDownPackages! MetacelloScriptingStandardTestHarness removeSelector: #tearDownPackageList! MetacelloScriptingStandardTestHarness removeSelector: #tearDown! MetacelloScriptingStandardTestHarness removeSelector: #setUpRepositoryContents! MetacelloScriptingStandardTestHarness removeSelector: #setUpRepositories! MetacelloScriptingStandardTestHarness removeSelector: #setUp! MetacelloScriptingStandardTestHarness removeSelector: #runCase! MetacelloScriptingStandardTestHarness removeSelector: #hasPackage:! MetacelloScriptingStandardTestHarness removeSelector: #doSilently! MetacelloScriptingStandardTestHarness removeSelector: #defaultTimeout! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie40FooLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie40Foo35FooLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie40Foo35FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie40FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie40Feaux35FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35FooLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo40FooLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo40FeauxLoadLockNAllowUpgradeError! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo40FeauxLoadLockNAllowEvenIfLockedUpgrade! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo40FeauxLoadLockError! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo40FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Foo35FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie35Feaux40FeauxLoad! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie25Loadc! MetacelloRegistryLoadScriptTestCase removeSelector: #testFie25Loadb! Smalltalk globals removeClassNamed: #MetacelloRegistryLoadScriptTestCase! MetacelloRegistryLoadScriptHarness removeSelector: #validateOriginalBlockFie35FeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockOriginalFie40FooLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockOriginalFie40FeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockOriginalFie4035FooFeuxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockOriginalFie4035FeauxFeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockOriginalFie35FooFeuxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40FooLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40FooFeuxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40FooFeux35FieLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40Foo35FieLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40FeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie40Feaux35FieLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie35FooLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie35FooFeuxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockFie35FeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockClassicFie40Foo35FooLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockClassicFie4035FeauxFeauxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #validateBlockClassicFie35FooFeuxLoad! MetacelloRegistryLoadScriptHarness removeSelector: #tearDownRepositories! MetacelloRegistryLoadScriptHarness removeSelector: #tearDownPackageList! MetacelloRegistryLoadScriptHarness removeSelector: #setUpRepositories! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie40Foo35FooLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie40Foo35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie40Feaux35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie35Foo40FooLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie35Foo40FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie35Foo35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testOriginalFie35Feaux40FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie40Foo35FooLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie40Foo35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie40Feaux35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie35Foo40FooLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie35Foo40FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie35Foo35FeauxLoad! MetacelloClassicLoadScriptTestCase removeSelector: #testClassicFie35Feaux40FeauxLoad! Smalltalk globals removeClassNamed: #MetacelloClassicLoadScriptTestCase! Smalltalk globals removeClassNamed: #MetacelloRegistryLoadScriptHarness! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #testNestedLoad3! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #testNestedLoad2! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #testNestedLoad1! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #tearDownRepositories! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #tearDownPackageList! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #tearDown! MetacelloGoferBasedLoaderScriptTestCase removeSelector: #setUpRepositories! Smalltalk globals removeClassNamed: #MetacelloGoferBasedLoaderScriptTestCase! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #testIssue112new! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #testIssue112! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test004new! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test004! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test003new! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test003! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test002new! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test002! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test001new! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #test001! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #tearDownPackageList! MetacelloDetermineCurrentVersionForLoadScriptTest removeSelector: #setUpRepositories! Smalltalk globals removeClassNamed: #MetacelloDetermineCurrentVersionForLoadScriptTest! MetacelloCurrentVersionScriptTestCase removeSelector: #testFoe40LoadedFoo50Loaded! MetacelloCurrentVersionScriptTestCase removeSelector: #testFeaux40Loaded! MetacelloCurrentVersionScriptTestCase removeSelector: #testCompareCurrentVersion! MetacelloCurrentVersionScriptTestCase removeSelector: #testBleedingEdgeLocking! MetacelloCurrentVersionScriptTestCase removeSelector: #tearDownRepositories! MetacelloCurrentVersionScriptTestCase removeSelector: #tearDownPackageList! MetacelloCurrentVersionScriptTestCase removeSelector: #setUpRepositories! Smalltalk globals removeClassNamed: #MetacelloCurrentVersionScriptTestCase! MetacelloConfigurationTestCase removeSelector: #testInvalidConfigurations! MetacelloConfigurationTestCase removeSelector: #tearDownRepositories! MetacelloConfigurationTestCase removeSelector: #tearDownPackageList! Smalltalk globals removeClassNamed: #MetacelloConfigurationTestCase! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefXIII! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefXII! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefXI! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefVI! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefV! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefIX! MetacelloBaselineConfigurationTestCase removeSelector: #testGithubRefIV! MetacelloBaselineConfigurationTestCase removeSelector: #testExernalXXXb! MetacelloBaselineConfigurationTestCase removeSelector: #testExernalXXXa! MetacelloBaselineConfigurationTestCase removeSelector: #testExernalXX! MetacelloBaselineConfigurationTestCase removeSelector: #testExernalX! MetacelloBaselineConfigurationTestCase removeSelector: #tearDownRepositories! MetacelloBaselineConfigurationTestCase removeSelector: #tearDownPackageList! Smalltalk globals removeClassNamed: #MetacelloBaselineConfigurationTestCase! Smalltalk globals removeClassNamed: #MetacelloScriptingStandardTestHarness! MetacelloAtomicLoadOrderTest removeSelector: #version21:! MetacelloAtomicLoadOrderTest removeSelector: #version20:! MetacelloAtomicLoadOrderTest removeSelector: #testVersion21ProjectLoadError! MetacelloAtomicLoadOrderTest removeSelector: #testVersion20LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testIssue86C! MetacelloAtomicLoadOrderTest removeSelector: #testIssue86B! MetacelloAtomicLoadOrderTest removeSelector: #testIssue86A! MetacelloAtomicLoadOrderTest removeSelector: #testIssue81B! MetacelloAtomicLoadOrderTest removeSelector: #testIssue81A! MetacelloAtomicLoadOrderTest removeSelector: #testIssue66! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline40LoadLinear! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline40LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline35LoadLinear! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline35LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline31LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline30LoadLinear! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline30LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline20LoadLinear! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline20LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline10LoadLinear! MetacelloAtomicLoadOrderTest removeSelector: #testBaseline10LoadAtomic! MetacelloAtomicLoadOrderTest removeSelector: #tearDownPackages:! MetacelloAtomicLoadOrderTest removeSelector: #tearDown! MetacelloAtomicLoadOrderTest removeSelector: #setUp! MetacelloAtomicLoadOrderTest removeSelector: #monticelloRepository! MetacelloAtomicLoadOrderTest removeSelector: #loadType! MetacelloAtomicLoadOrderTest removeSelector: #configurationRepository! MetacelloAtomicLoadOrderTest removeSelector: #baseline62:! MetacelloAtomicLoadOrderTest removeSelector: #baseline61:! MetacelloAtomicLoadOrderTest removeSelector: #baseline60:! MetacelloAtomicLoadOrderTest removeSelector: #baseline50:! MetacelloAtomicLoadOrderTest removeSelector: #baseline40:! MetacelloAtomicLoadOrderTest removeSelector: #baseline35:! MetacelloAtomicLoadOrderTest removeSelector: #baseline31:! MetacelloAtomicLoadOrderTest removeSelector: #baseline30:! MetacelloAtomicLoadOrderTest removeSelector: #baseline20:! MetacelloAtomicLoadOrderTest removeSelector: #baseline10:! Smalltalk globals removeClassNamed: #MetacelloAtomicLoadOrderTest! ----End fileIn----! ----QUIT----an Array(16 October 2013 11:46:01 am) Pharo.image priorSource: 23818466! ----STARTUP----an Array(16 October 2013 11:51:05 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 October 2013 11:51:05 am) Pharo-30491.image priorSource: 23910135! ----STARTUP----an Array(16 October 2013 3:56:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/16/2013 15:53' prior: 74150423! commentForCurrentUpdate ^ '11907 add Nautilus to shutDownList https://pharo.fogbugz.com/f/cases/11907 11906 HDTestReport measures the wrong duration https://pharo.fogbugz.com/f/cases/11906 5548 author should be added to RGMethodDefinition and authors to RGClassDefinition https://pharo.fogbugz.com/f/cases/5548/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/16/2013 15:53'! script147 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.24.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1645.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.153.mcz Morphic-Examples-StephaneDucasse.13.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.555.mcz NautilusCommon-MarcusDenker.172.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.955.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.200.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.227.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.17.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.281.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.956.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.642.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1326.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/16/2013 15:54'! update30492 "self new update30492" self withUpdateLog: '11907 add Nautilus to shutDownList https://pharo.fogbugz.com/f/cases/11907 11906 HDTestReport measures the wrong duration https://pharo.fogbugz.com/f/cases/11906 5548 author should be added to RGMethodDefinition and authors to RGClassDefinition https://pharo.fogbugz.com/f/cases/5548/'. self loadTogether: self script147 merge: false. Smalltalk addToShutDownList: Nautilus. . self flushCaches. ! ! "ScriptLoader30"! !Nautilus class methodsFor: 'system startup' stamp: 'MarcusDenker 10/16/2013 14:32'! shutDown self cleanUp! ! !RGMethodDefinition methodsFor: 'stamp values' stamp: 'MarcusDenker 10/16/2013 13:44'! author ^self annotationNamed: self class authorKey ifAbsentPut: [ self class parseAuthorAliasFrom: self stamp ]! ! !RGMethodDefinition methodsFor: 'stamp values' stamp: 'MarcusDenker 10/16/2013 13:44'! author: aString self annotationNamed: self class authorKey put: aString ! ! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 10/16/2013 12:41' prior: 23131453! beginTestCase: aTestCase time: time stream tab; nextPutAll: ''; nextPut: Character lf. progressFile nextPutAll: 'starting testcase: ' ; nextPutAll: aTestCase class name; nextPutAll:'>>'; nextPutAll: aTestCase selector; nextPutAll: ' ... '; flush. ! ! !RGNamedDefinition class methodsFor: 'annotations' stamp: 'MarcusDenker 10/16/2013 13:44'! authorKey ^#author! ! !RGCommentDefinition methodsFor: 'stamp values' stamp: 'MarcusDenker 10/16/2013 13:44'! author ^self annotationNamed: self class authorKey ifAbsentPut:[ self class parseAuthorAliasFrom: stamp ]! ! !RGCommentDefinition methodsFor: 'stamp values' stamp: 'MarcusDenker 10/16/2013 13:44'! author: aString self annotationNamed: self class authorKey put: aString ! ! !RGCommentDefinition methodsFor: 'testing' stamp: 'MarcusDenker 10/16/2013 13:43'! hasAuthor ^self hasStamp and:[ self author isEmptyOrNil not ]! ! !RGCommentDefinitionTest methodsFor: 'testing' stamp: 'MarcusDenker 10/16/2013 13:43' prior: 31632654! testCommentWithoutAuthor | newComment | newComment:= RGFactory current createComment content: 'This is a comment for test'; stamp: '3/22/2011 14:51'; yourself. self assert: (newComment hasAuthor not).! ! !RGCommentDefinitionTest methodsFor: 'testing' stamp: 'MarcusDenker 10/16/2013 13:43' prior: 31632979! testNewComment | newComment | newComment:= RGFactory current createComment content: 'This is a comment for test'; stamp: 'VeronicaUquillas 3/22/2011 14:51'; yourself. self assert: newComment isComment. self assert: newComment isPassive. self assert: newComment name = #Comment. self assert: newComment hasStamp. self assert: newComment hasAuthor. self assert: newComment timeStamp notNil. self assert: (newComment author = 'VeronicaUquillas'). self assert: (newComment timeStamp = '3/22/2011 14:51' asDateAndTime). self assert: (newComment parent = nil). self assert: (newComment environment = Smalltalk globals).! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MarcusDenker 10/16/2013 13:41' prior: 31609647! testWithComment | newClass newComment | newClass:= RGFactory current createClassNamed: #Object. newComment:= RGFactory current createComment parent: newClass; content: 'This is a comment for test'; stamp: 'VeronicaUquillas 3/22/2011 14:51'; yourself. newClass comment: newComment. self assert: (newClass hasComment). self assert: (newClass hasStamp). self assert: (newClass = newComment parent). self assert: (newComment content = 'This is a comment for test'). self assert: (newComment author = 'VeronicaUquillas'). self assert: (newComment timeStamp = '3/22/2011 14:51' asDateAndTime). newClass comment: nil. self assert: (newClass hasComment not). newClass comment: 'This is a comment for test'; stamp: 'VeronicaUquillas 3/22/2011 14:51'. self assert: (newClass comment isRingObject). ! ! !RGMethodDefinitionTest methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 10/16/2013 13:44' prior: 49962832! foo ^ 'second version'! ! RGMethodDefinition removeSelector: #authorAlias:! RGMethodDefinition removeSelector: #authorAlias! RGNamedDefinition class removeSelector: #authorAliasKey! RGCommentDefinition removeSelector: #hasAuthorAlias! RGCommentDefinition removeSelector: #authorAlias:! RGCommentDefinition removeSelector: #authorAlias! "HudsonBuildTools20"! "Nautilus"! "Ring-Core-Kernel"! "Ring-Tests-Kernel"! ----End fileIn----! ----QUIT----an Array(16 October 2013 3:56:39 pm) Pharo.image priorSource: 23910342! ----STARTUP----an Array(16 October 2013 4:01:48 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(16 October 2013 4:01:48 pm) Pharo-30492.image priorSource: 23926933! ----STARTUP----an Array(17 October 2013 7:50:33 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/17/2013 07:44' prior: 74242298! commentForCurrentUpdate ^ '11912 faster #allMethods on SystemNavigation https://pharo.fogbugz.com/f/cases/11912 11894 Tests.Release.ReleaseTest.testKernelExtensions fails https://pharo.fogbugz.com/f/cases/11894 11909 MorphTreeMorph lacks enable/disable https://pharo.fogbugz.com/f/cases/11909 11886 Typo at method name: RBMoveMethodRefactor>>compileDelagatorMethod https://pharo.fogbugz.com/f/cases/11886'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/17/2013 07:46'! script148 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.633.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.567.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.155.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.556.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.58.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.956.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.100.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.25.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.111.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.18.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1328.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/17/2013 07:46'! update30493 "self new update30493" self withUpdateLog: '11912 faster #allMethods on SystemNavigation https://pharo.fogbugz.com/f/cases/11912 11894 Tests.Release.ReleaseTest.testKernelExtensions fails https://pharo.fogbugz.com/f/cases/11894 11909 MorphTreeMorph lacks enable/disable https://pharo.fogbugz.com/f/cases/11909 11886 Typo at method name: RBMoveMethodRefactor>>compileDelagatorMethod https://pharo.fogbugz.com/f/cases/11886'. self loadTogether: self script148 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphTreeMorph commentStamp: 'AlainPlantec 2/13/2010 07:41' prior: 42448538! A MorphTreeMorph is a list and a tree in one easily customizable widget. A list or tree is made of nodes. Each node can be made of whatever object . This allows the use of morphs inside the tree. A MorphTreeMorph works with a model which must use the TMorphTreeModel trait. MorphTreeModel uses it and can serves as the model or as a superclass for a specific tree model. Customizable columns: Several customizable columns can be viewed. Columns are separated by resizers used in order to increase or decrease the columns width with the mouse. A MorphTreeMorph can have a top header composed of buttons, one button per column. Such a button can have an icon and/or a title and may run some action when clicked on (a typical action is the ordering of the list). You can also allow column drag-and-drop so that a column can be dynamically moved with a simple drop. See this in action with following example: ----------- ClassListExample new openOn: Collection ----------- By default, the last column is not bounded, so that no resizer is added for it and threre exists no unused space between the last scroller and the right side of the whole tree. But, in some case one want to have a resizer also for the last column. This is the case for data grid as an example This is possible by sending #makeLastColumnBounded to the MorphTreeMorph. Try it with: ----------- SimpleGridExample new open ----------- Single and multi-selection: A MorphTreeMorph implements single and multiple selection. Multi-selection is allowed by sending #multiSelection: with true as argument. Several items can be selected with ctrl-click (or cmd-click on mac) or with shift-click (see MorphTreeMorphModel comments to see how to handle selection from the model). Try multi-selection with following example: ------------ SimplestClassListExample new openOn: Collection ------------ Double-click handling: You can allow double-click just by indicating the message to send to the model with the doubleClickSelector: selector. Try this with the package-tree example where double-clicking on a class node or or a method node open a browser on the class or on the method: ------------ PackageTreeExample new open ------------ Long list handling: For very long lists or trees, two kind of pager can be used to limit the number of items visible in the list. The idea is that when you have very long lists, you most of the time do not want to see all details but just want some visual support for what is in the list: - with a simple pager, you indicate how much items are to be seen in one page, the list items are viewed page by page, - with a chunk pager you can expand either incrementally or all-together the number of items once you get to the bottom of the existing items. See SimplestClassListWithPagerExample and SimplestClassListWithChunkExample examples. Try them with: ------------ SimplestClassListWithPagerExample new openOn: Object. SimplestClassListWithChunkExample new openOn: Object. ------------ Columns/rows coloring: MorphTreeMorph makes it possible the coloring of either the columns or the rows. A MorphTreeMorph understands #rowColorForEven:odd: for rows coloring and columnColorForEven:odd: for columns coloring with two colors passed as argument (nil means no color). See following examples: ------------- PackageTreeExample new open. "For row coloring" ClassListExample new openOn: Collection. "For column coloring" ------------- Column drag and drop A column can be dragged. Inside the tree, a column can be dropped into another one. Then, the two columns are swapped (the roughly implemented) Try it with: ------------- ClassListExample new openOn: Collection. ------------- Instance Variables autoDeselection: autoMultiSelection: columnColors: columnDropUnabled: columnInset: columnResizers: columns: doubleClickSelector: expandedToggleImage: gapAfterIcon: gapAfterToggle: getListSelector: getSelectionSelector: hasToggleAtRoot: iconReservedExtent: indentGap: keystrokeActionSelector: lastSelectedMorph: lineColor: multipleSelection: nodeList: nodeSortBlock: notExpandedToggleImage: pager: potentialDropMorph: preferedPaneColor: resizerWidth: rowColors: rowInset: scrollDeltaHeight: selectedMorphList: setSelectionSelector: shiftSelectedMorph: topHeader: topHeaderBackground: unboundLastColumn: withHLines: autoDeselection - xxxxx autoMultiSelection - xxxxx columnColors - xxxxx columnDropUnabled - xxxxx columnInset - xxxxx columnResizers - xxxxx columns - xxxxx doubleClickSelector - xxxxx expandedToggleImage - xxxxx gapAfterIcon - xxxxx gapAfterToggle - xxxxx getListSelector - xxxxx getSelectionSelector - xxxxx hasToggleAtRoot - xxxxx iconReservedExtent - xxxxx indentGap - xxxxx keystrokeActionSelector - xxxxx lastSelectedMorph - xxxxx lineColor - xxxxx multipleSelection - xxxxx nodeList - xxxxx nodeSortBlock - xxxxx notExpandedToggleImage - xxxxx pager - xxxxx potentialDropMorph - xxxxx preferedPaneColor - xxxxx resizerWidth - xxxxx rowColors - xxxxx rowInset - xxxxx scrollDeltaHeight - xxxxx selectedMorphList - xxxxx setSelectionSelector - xxxxx shiftSelectedMorph - xxxxx topHeader - xxxxx topHeaderBackground - xxxxx unboundLastColumn - xxxxx withHLines - xxxxx ! !MorphTreeModel commentStamp: '' prior: 42448462! I'm the base class for tree models. See ClassListExample for basic usage.! !MorphTreeTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 10/16/2013 14:14' prior: 27067307! drawRawColorOn: aCanvas forSubmorph: aSubMorph | c frame | frame := aSubMorph fullBounds withRight: owner right + owner scroller offset x. aSubMorph = owner listManager searchedElement ifTrue: [ aCanvas fillRectangle: frame color: owner secondarySelectionColor. ^ self ]. owner listManager isCheckList ifTrue: [ aSubMorph = owner listManager lastClickedMorph ifTrue: [ aCanvas fillRectangle: frame color: owner selectionColorToUse. ^ self ] ] ifFalse: [ aSubMorph selected ifTrue: [ aCanvas fillRectangle: frame color: owner selectionColorToUse. ^ self ] ]. (c := aSubMorph color) notNil ifTrue: [ c isColor ifTrue: [ aCanvas frameAndFillRectangle: frame fillColor: c borderWidth: 0 borderColor: Color transparent ] ifFalse: [ c origin: aSubMorph bounds topLeft. c direction: aSubMorph bounds width @ 0. aCanvas fillRectangle: frame basicFillStyle: c ] ]! ! !MorphTreeTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 10/16/2013 13:57' prior: 27068372! drawSubmorphsOn: aCanvas submorphs ifEmpty: [^ self]. aCanvas transformBy: transform clippingTo: (aCanvas clipRect intersect: (owner clippingBounds) ifNone: ["we're done here" ^ self ]) during: [:myCanvas | | top bottom | top := self topVisibleRowForCanvas: myCanvas. bottom := self bottomVisibleRowForCanvas: myCanvas startingAt: top. bottom to: top by: -1 do: [:row | | m | m := submorphs basicAt: row. self drawRawColorOn: myCanvas forSubmorph: m. myCanvas fullDrawMorph: m] ] smoothing: smoothing. owner withTreeLines ifTrue: [owner drawLinesOn: aCanvas]. owner enabled ifFalse: [ aCanvas fillRectangle: owner innerBounds fillStyle: (owner paneColor alpha: 0.2) ] ! ! !CompiledMethod methodsFor: 'accessing' stamp: 'MarcusDenker 10/16/2013 21:59' prior: 38487786! category ^self methodClass organization categoryOfElement: self selector! ! !MorphTreeNodeMorph methodsFor: 'mouse events' stamp: 'AlainPlantec 10/16/2013 13:00' prior: 27042657! handleMouseUp: anEvent container enabled ifFalse: [ ^ false ]. (container commandOrCrontrolKeyPressed: anEvent) ifTrue: [^ container listManager mouseUp: anEvent on: self]. ^ super handleMouseUp: anEvent! ! !MorphTreeNodeMorph methodsFor: 'mouse events' stamp: 'AlainPlantec 10/16/2013 13:00' prior: 43542160! mouseDown: event container enabled ifFalse: [ ^self ]. complexContents mouseDown: event! ! !RBMoveMethodRefactoring methodsFor: 'transforming' stamp: 'PabloHerrero 10/15/2013 16:30'! compileDelegatorMethod | statementNode delegatorNode tree | delegatorNode := RBMessageNode receiver: (RBVariableNode named: variable) selectorParts: parseTree selectorParts arguments: (parseTree argumentNames collect: [:each | RBVariableNode named: (each = selfVariableName ifTrue: ['self'] ifFalse: [each])]). self hasOnlySelfReturns ifFalse: [delegatorNode := RBReturnNode value: delegatorNode]. statementNode := RBSequenceNode temporaries: #() statements: (Array with: delegatorNode). (tree := class parseTreeFor: selector) body: statementNode. class compileTree: tree! ! !RBMoveMethodRefactoring methodsFor: 'transforming' stamp: 'PabloHerrero 10/15/2013 16:30' prior: 30822831! transform self abstractVariables; addSelfReturn; replaceSelfReferences; replaceVariableReferences; compileNewMethods; compileDelegatorMethod! ! !FileList class methodsFor: 'file reader registration' stamp: 'MarcusDenker 10/16/2013 21:56' prior: 21894999! allRegisteredServices "self allRegisteredServices" ^self registeredFileReaderClasses flatCollect: [:each | each services] ! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'MarcusDenker 10/16/2013 18:22'! allBehaviors "Return all the classes and traits defined in the Smalltalk SystemDictionary" ^ self allClassesAndTraits flatCollect: [:each | {each . each classSide} ]! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/16/2013 18:26'! allBehaviors ^self environment allBehaviors! ! !SystemNavigation methodsFor: 'query' stamp: 'MarcusDenker 10/16/2013 18:26' prior: 71101509! allMethods ^self allBehaviors flatCollect: [ :behavior | behavior methods] ! ! !MorphTreeMorph commentStamp: 'AlainPlantec 2/13/2010 07:41' prior: 74271226! A MorphTreeMorph is a list and a tree in one easily customizable widget. A list or tree is made of nodes. Each node can be made of whatever object . This allows the use of morphs inside the tree. A MorphTreeMorph works with a model which must use the TMorphTreeModel trait. MorphTreeModel uses it and can serves as the model or as a superclass for a specific tree model. Customizable columns: Several customizable columns can be viewed. Columns are separated by resizers used in order to increase or decrease the columns width with the mouse. A MorphTreeMorph can have a top header composed of buttons, one button per column. Such a button can have an icon and/or a title and may run some action when clicked on (a typical action is the ordering of the list). You can also allow column drag-and-drop so that a column can be dynamically moved with a simple drop. See this in action with following example: ----------- ClassListExample new openOn: Collection ----------- By default, the last column is not bounded, so that no resizer is added for it and threre exists no unused space between the last scroller and the right side of the whole tree. But, in some case one want to have a resizer also for the last column. This is the case for data grid as an example This is possible by sending #makeLastColumnBounded to the MorphTreeMorph. Try it with: ----------- SimpleGridExample new open ----------- Single and multi-selection: A MorphTreeMorph implements single and multiple selection. Multi-selection is allowed by sending #multiSelection: with true as argument. Several items can be selected with ctrl-click (or cmd-click on mac) or with shift-click (see MorphTreeMorphModel comments to see how to handle selection from the model). Try multi-selection with following example: ------------ SimplestClassListExample new openOn: Collection ------------ Double-click handling: You can allow double-click just by indicating the message to send to the model with the doubleClickSelector: selector. Try this with the package-tree example where double-clicking on a class node or or a method node open a browser on the class or on the method: ------------ PackageTreeExample new open ------------ Long list handling: For very long lists or trees, two kind of pager can be used to limit the number of items visible in the list. The idea is that when you have very long lists, you most of the time do not want to see all details but just want some visual support for what is in the list: - with a simple pager, you indicate how much items are to be seen in one page, the list items are viewed page by page, - with a chunk pager you can expand either incrementally or all-together the number of items once you get to the bottom of the existing items. See SimplestClassListWithPagerExample and SimplestClassListWithChunkExample examples. Try them with: ------------ SimplestClassListWithPagerExample new openOn: Object. SimplestClassListWithChunkExample new openOn: Object. ------------ Columns/rows coloring: MorphTreeMorph makes it possible the coloring of either the columns or the rows. A MorphTreeMorph understands #rowColorForEven:odd: for rows coloring and columnColorForEven:odd: for columns coloring with two colors passed as argument (nil means no color). See following examples: ------------- PackageTreeExample new open. "For row coloring" ClassListExample new openOn: Collection. "For column coloring" ------------- Column drag and drop A column can be dragged. Inside the tree, a column can be dropped into another one. Then, the two columns are swapped (the roughly implemented) Try it with: ------------- ClassListExample new openOn: Collection. ------------- Instance Variables autoDeselection: autoMultiSelection: columnColors: columnDropUnabled: columnInset: columnResizers: columns: doubleClickSelector: expandedToggleImage: gapAfterIcon: gapAfterToggle: getListSelector: getSelectionSelector: hasToggleAtRoot: iconReservedExtent: indentGap: keystrokeActionSelector: lastSelectedMorph: lineColor: multipleSelection: nodeList: nodeSortBlock: notExpandedToggleImage: pager: potentialDropMorph: preferedPaneColor: resizerWidth: rowColors: rowInset: scrollDeltaHeight: selectedMorphList: setSelectionSelector: shiftSelectedMorph: topHeader: topHeaderBackground: unboundLastColumn: withHLines: autoDeselection - xxxxx autoMultiSelection - xxxxx columnColors - xxxxx columnDropUnabled - xxxxx columnInset - xxxxx columnResizers - xxxxx columns - xxxxx doubleClickSelector - xxxxx expandedToggleImage - xxxxx gapAfterIcon - xxxxx gapAfterToggle - xxxxx getListSelector - xxxxx getSelectionSelector - xxxxx hasToggleAtRoot - xxxxx iconReservedExtent - xxxxx indentGap - xxxxx keystrokeActionSelector - xxxxx lastSelectedMorph - xxxxx lineColor - xxxxx multipleSelection - xxxxx nodeList - xxxxx nodeSortBlock - xxxxx notExpandedToggleImage - xxxxx pager - xxxxx potentialDropMorph - xxxxx preferedPaneColor - xxxxx resizerWidth - xxxxx rowColors - xxxxx rowInset - xxxxx scrollDeltaHeight - xxxxx selectedMorphList - xxxxx setSelectionSelector - xxxxx shiftSelectedMorph - xxxxx topHeader - xxxxx topHeaderBackground - xxxxx unboundLastColumn - xxxxx withHLines - xxxxx ! !MorphTreeMorph methodsFor: 'accessing colors' stamp: 'AlainPlantec 10/16/2013 12:24' prior: 26950769! adoptPaneColor: paneColor "Pass on to the selection, the border" super adoptPaneColor: paneColor. paneColor ifNil: [^self]. self color: (self preferedPaneColor ifNil: [paneColor veryMuchLighter]). ! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 12:15'! disable self enabled: false! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 12:15'! enable self enabled: true! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 12:15'! enabled ^ enabled ifNil: [ enabled := super enabled ]! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 13:56'! enabled: aBoolean enabled := aBoolean. self submorphsDo: [ :sm | sm allMorphsDo: [ :m | (m respondsTo: #enabled:) ifTrue: [ m enabled: aBoolean ] ] ]. self changed: #enabled. self changed! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'AlainPlantec 10/16/2013 16:57'! enabledFromModel | val | self model ifNil: [ ^ self ]. val := self model enabled. val ~= self enabled ifTrue: [ self enabled: val ] ! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 12:18'! fillStyleToUse "Answer the fillStyle that should be used for the receiver." ^self enabled ifTrue: [self theme listNormalFillStyleFor: self] ifFalse: [self theme listDisabledFillStyleFor: self]! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'AlainPlantec 10/16/2013 12:36' prior: 26967857! mouseDown: event "Changed to take keybaord focus." | targetMorph selectors | self enabled ifFalse: [ ^self ]. mouseOverAllowed := true. self wantsKeyboardFocus ifTrue: [self takeKeyboardFocus]. (event yellowButtonPressed and: [(self commandOrCrontrolKeyPressed: event) not]) ifTrue: ["First check for option (menu) click" ^ self yellowButtonEvent: event]. (targetMorph := self scrollerSubMorphFromPoint: event position) ifNotNil: [targetMorph hasToggle ifTrue: [(targetMorph inToggleArea: (targetMorph point: event position from: self)) ifTrue: [^ self toggleExpandedState: targetMorph event: event]]]. targetMorph ifNil: [^ super mouseDown: event]. targetMorph highlightForMouseDown. selectors := Array with: #click: with: #doubleClick: with: nil with: (self dragEnabled ifTrue: [#startDrag:]). event hand waitForClicksOrDrag: self event: event selectors: selectors threshold: 10. self listManager mouseDown: event on: targetMorph ! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'AlainPlantec 10/16/2013 12:35' prior: 26970063! mouseMove: evt | targetMorph | self enabled ifFalse: [ ^self ]. targetMorph := self scrollerSubMorphFromPoint: evt position. evt hand hasSubmorphs ifFalse: [(self innerBounds containsPoint: evt position) ifTrue: [self listManager mouseMove: evt on: targetMorph]]. (self dropEnabled and: [evt hand hasSubmorphs]) ifFalse:[^super mouseMove: evt]. potentialDropMorph ifNotNil:[ (potentialDropMorph containsPoint: (potentialDropMorph point: evt position from: self)) ifTrue:[^self]]. self mouseLeaveDragging: evt. (self containsPoint: evt position) ifTrue: [self mouseEnterDragging: evt].! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'AlainPlantec 10/16/2013 12:35' prior: 68528127! mouseUp: event "Fixed up highlight problems." | nodeMorph wasHigh | self enabled ifFalse: [ ^self ]. mouseOverAllowed := false. nodeMorph := self scrollerSubMorphFromPoint: event position. wasHigh := nodeMorph notNil ifTrue: [nodeMorph highlightedForMouseDown] ifFalse: [false]. self allNodeMorphs do: [:m | m highlightedForMouseDown ifTrue: [m highlightForMouseDown: false]]. wasHigh ifFalse: [ nodeMorph ifNotNil: [^self]]. self listManager mouseUp: event on: nodeMorph. ! ! !MorphTreeMorph methodsFor: 'selection' stamp: 'AlainPlantec 10/16/2013 14:12' prior: 26987819! selectionColorToUse "Answer the colour to use for selected items." self enabled ifFalse: [ ^ self paneColor ]. ^ self valueOfProperty: #selectionColorToUse ifAbsent: [self theme settings selectionColor]. ! ! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'AlainPlantec 10/16/2013 12:34' prior: 26973610! takesKeyboardFocus "Answer whether the receiver can normally take keyboard focus." ^ self enabled! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'AlainPlantec 10/16/2013 16:55' prior: 39400040! update: aSymbol aSymbol == #enabled ifTrue: [ self enabledFromModel ]. aSymbol == #selection ifTrue: [^ self listManager updateSelectionFromModel]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == #selectItems and: [aSymbol second isCollection]]]) ifTrue: [^ self selectedItems: aSymbol second]. ((aSymbol isKindOf: Array) and: [ aSymbol size == 2 and: [ aSymbol first == #autoDeselection ] ] ) ifTrue: [ ^ self autoDeselection: aSymbol second ]. aSymbol == self nodeListSelector ifTrue: [^ self updateList]. aSymbol == #selectAll ifTrue: [^ self listManager selectAll]. aSymbol == #deselectAll ifTrue: [^ self listManager deselectAll]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #openPath]]]) "allow directed path opening where multiple trees exist" ifTrue: [^(self allNodeMorphs at: 1 ifAbsent: [^self]) openPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #openItemPath]]]) "allow directed path opening where multiple trees exist" ifTrue: [^ (self allNodeMorphs at: 1 ifAbsent: [^self]) openItemPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #expandAllFromNode:]]]) ifTrue: [^ self expandAllFromNode: aSymbol third]. ((aSymbol isKindOf: Array) and: [aSymbol size > 1 and: [aSymbol first == self nodeListSelector and: [ aSymbol second == #closeItemPath]]]) "allow directed path closing where multiple trees exist" ifTrue: [^ (self allNodeMorphs at: 1 ifAbsent: [^self]) closeItemPath: (aSymbol allButFirst: 2)]. ((aSymbol isKindOf: Array) and: [aSymbol notEmpty and: [aSymbol first == #openPath]]) ifTrue: [^(self allNodeMorphs at: 1 ifAbsent: [^self]) openPath: aSymbol allButFirst]. ((aSymbol isKindOf: Array) and: [aSymbol size = 2 and: [aSymbol first = self nodeListSelector and: [ aSymbol second == #expandRoots]]]) ifTrue: [^self expandRoots]. ((aSymbol isKindOf: Array) and: [aSymbol size = 2 and: [aSymbol first = self nodeListSelector]]) ifTrue: [aSymbol second = #expandAll ifTrue: [^ self expandAll]. aSymbol second = #collapseAll ifTrue: [^ self collapseAll]]! ! !MorphTreeModel commentStamp: '' prior: 74276960! I'm the base class for tree models. See ClassListExample for basic usage.! !MorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 16:52'! disable self enabled: false! ! !MorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 16:52'! enable self enabled: true! ! !MorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 16:52'! enabled ^ enabled ifNil: [ enabled := true ]! ! !MorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/16/2013 16:51'! enabled: aBoolean aBoolean ~= enabled ifTrue: [ enabled := aBoolean. self changed: #enabled ]! ! ReleaseTest removeSelector: #testKernelExtensions! RBMoveMethodRefactoring removeSelector: #compileDelagatorMethod! SystemNavigation removeSelector: #browseAllUnimplementedCalls! "GroupManagerUI"! "Kernel"! "Morphic-Base"! "Morphic-Examples"! "Nautilus"! "NautilusCommon"! "Polymorph-Widgets"! "RecentSubmissions"! "Refactoring-Core"! "Spec-MorphicAdapters"! "System-Settings"! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(17 October 2013 7:50:57 am) Pharo.image priorSource: 23927138! ----STARTUP----an Array(17 October 2013 7:57:18 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 7:57:18 am) Pharo-30493.image priorSource: 23963650! ----STARTUP----an Array(17 October 2013 8:55:29 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/17/2013 08:49' prior: 74259093! commentForCurrentUpdate ^ '11913 Trivial critic clean NewList https://pharo.fogbugz.com/f/cases/11913 11876 Do not allow shouldnt:raise: Error https://pharo.fogbugz.com/f/cases/11876 11879 Obtain selected statements for suggestions https://pharo.fogbugz.com/f/cases/11879'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/17/2013 08:49'! script149 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-MarcusDenker.12.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-StephaneDucasse.50.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.872.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.155.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.556.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-MarcusDenker.126.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.956.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.259.mcz RPackage-SystemIntegration-MarcusDenker.176.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.18.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1328.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/17/2013 08:49'! update30494 "self new update30494" self withUpdateLog: '11913 Trivial critic clean NewList https://pharo.fogbugz.com/f/cases/11913 11876 Do not allow shouldnt:raise: Error https://pharo.fogbugz.com/f/cases/11876 11879 Obtain selected statements for suggestions https://pharo.fogbugz.com/f/cases/11879'. self loadTogether: self script149 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SugsAbstractContext commentStamp: '' prior: 42714688! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SUnitExtensionsTest methodsFor: 'tests' stamp: 'CamilloBruni 10/16/2013 18:13' prior: 32639243! testExceptionWithoutMatchingString self should: [ Object obsolete ] raise: Error whoseDescriptionDoesNotInclude: 'Zero' description: 'tested obsoleting Object'! ! !SUnitExtensionsTest methodsFor: 'tests' stamp: 'CamilloBruni 10/16/2013 18:12' prior: 32639477! testNoExceptionWithMatchingString self shouldnt: [ Object messageNotUnderstoodByObject ] raise: MessageNotUnderstood whoseDescriptionIncludes: 'Zero' description: 'tested obsoleting Object'! ! !SUnitExtensionsTest methodsFor: 'tests' stamp: 'CamilloBruni 10/16/2013 18:13' prior: 32639706! testNoExceptionWithNoMatchingString self shouldnt: [ Object messageNotUnderstoodByObject ] raise: MessageNotUnderstood whoseDescriptionDoesNotInclude: 'messageNotUnderstoodByObject' description: 'tested obsoleting Object'! ! !NewListExample methodsFor: 'initialize' stamp: 'MarcusDenker 10/16/2013 18:02' prior: 36223257! buildMorphWithOld pluggable := true. ^ PluggableListMorph on: self list: #getItems selected: #getIndex changeSelected: #setIndex: menu: #menu:shifted:! ! !NewListExample methodsFor: 'initialize' stamp: 'MarcusDenker 10/16/2013 18:00' prior: 36225693! openInWindow | panel | panel := PanelMorph new. panel changeProportionalLayout; addMorph: listMorph fullFrame: ((0@0 corner: 1@0.5) asLayoutFrame); addMorph: textMorph fullFrame: ((0@0.5 corner: 1@1) asLayoutFrame). panel openInWindow! ! !NewListExample methodsFor: 'initialize' stamp: 'MarcusDenker 10/16/2013 18:00' prior: 36226037! openInWorld | panel | panel := PanelMorph new. panel changeProportionalLayout; addMorph: listMorph fullFrame: ((0@0 corner: 1@0.5) asLayoutFrame); addMorph: textMorph fullFrame: ((0@0.5 corner: 1@1) asLayoutFrame). panel openInWorld! ! !NewListExample methodsFor: 'morphic' stamp: 'MarcusDenker 10/16/2013 18:02' prior: 36226383! setIndex: idx pluggable ifFalse: [ ^ self ]. index := idx = index ifTrue: [ 0 ] ifFalse: [ idx ]. self changed: #getIndex! ! !WideCharacterSetTest methodsFor: 'testing' stamp: 'CamilloBruni 10/16/2013 18:14' prior: 54862809! testAddingToCharacterSet | cs wcs wc | cs := CharacterSet newFrom: 'aeiouy'. wcs := cs copy. wc := 4452 asCharacter. "adding a WideCharacter to an ordinary CharacterSet should turn it into a WideCharacterSet" wcs add: wc. self should: [wcs size = (cs size + 1)] description: 'We just added a Character, size should be increased by one'. self shouldnt: [wcs = cs] description: 'We just added a Character, sets should not be equal'. self shouldnt: [cs = wcs] description: 'We just added a Character, sets should not be equal'. self should: [cs allSatisfy: [:char | wcs includes: char]] description: 'Each character of the original CharacterSet should be included in the WideCharacterSet'. self should: [wcs hasWideCharacters] description: 'We just added a WideCharacter, so this WideCharacterSet definitely has one'. self should: [wcs includes: wc] description: 'We just added this WideCharacter, so this WideCharacterSet should include it'. wcs add: wc. self should: [wcs size = (cs size + 1)] description: 'We just added a Character already included in the set, size should be unchanged'. wcs remove: wc. self should: [wcs size = cs size] description: 'We added then removed a Character, now size should be equal to original'. self shouldnt: [wcs hasWideCharacters] description: 'We just removed the only WideCharacter, so this WideCharacterSet definitely has no WideCharacter'. self should: [wcs = cs] description: 'A WideCharacterSet can be equal to an Ordinary CharacterSet'. self should: [cs = wcs] description: 'An ordinary CharacterSet can be equal to a WideCharacterSet'. self should: [cs hash = wcs hash] description: 'If some objects are equal, then they should have same hash code'. ! ! !SugsAbstractContext commentStamp: '' prior: 74307660! I'm the API used by smart suggestions with facilities to know the selected text, and having all the needed information for execute the commands.! !SugsAbstractContext methodsFor: 'accesing' stamp: 'GiselaDecuzzi 10/14/2013 19:09'! isMethodSelected ^selectedNode isMethod ! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 9/11/2013 11:15' prior: 41917806! selectTheTextForTheNode selectionPreviousHighligth := self selectedInterval . selectedNode ifNotNil: [ self sourceTextArea selectFrom: self nodeStart to: self nodeStop]! ! !SugsAbstractContext methodsFor: 'private' stamp: 'GiselaDecuzzi 10/14/2013 18:59'! selectedStatements selectedNode isMessage ifTrue: [ ^{selectedNode} ]. ^(selectedNode statements select: [ :stat | stat containedBy: selectionPreviousHighligth ]).! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 10/14/2013 18:25'! selectedStatementsAsSequence | statements temporaries | temporaries := self selectedTemporaryVariables. statements:= self selectedStatements. ^RBSequenceNode temporaries: temporaries statements: statements ! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 10/14/2013 19:46'! selectedStatementsAsText | sequenceNode| sequenceNode := self selectedStatementsAsSequence. ^ sequenceNode formattedCode ! ! !SugsAbstractContext methodsFor: 'private' stamp: 'GiselaDecuzzi 10/14/2013 19:02'! selectedTemporaryVariables selectedNode isSequence ifFalse: [ ^#() ]. selectedNode temporaries ifEmpty: [^OrderedCollection new]. ^ ((selectedNode temporaries at: 1) containedBy: selectionPreviousHighligth ) ifTrue: [ selectedNode temporaries ] ifFalse: [#()]. ! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'MarcusDenker 10/16/2013 18:02' prior: 28409561! getMenu: shiftKeyState "Answer the menu for this text view, supplying an empty menu to be filled in. If the menu selector takes an extra argument, pass in the current state of the shift key." | menu aMenu aTitle | self getMenuSelector isNil ifTrue: [ ^ nil ]. menu := UIManager default newMenuIn: self for: self model. aTitle := self getMenuTitleSelector ifNotNil: [ self model perform: self getMenuTitleSelector ]. self getMenuSelector numArgs = 1 ifTrue: [ aMenu := self model perform: self getMenuSelector with: menu. aTitle ifNotNil: [ aMenu addTitle: aTitle ]. ^ aMenu ]. self getMenuSelector numArgs = 2 ifTrue: [ aMenu := self model perform: self getMenuSelector with: menu with: shiftKeyState. aTitle ifNotNil: [ aMenu addTitle: aTitle ]. ^ aMenu ]. ^ self error: 'The getMenuSelector must be a 1- or 2-keyword symbol'! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 00:36' prior: 51819031! shouldnt: aBlock raise: anExceptionalEvent self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 00:36' prior: 51819236! shouldnt: aBlock raise: anExceptionalEvent description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 00:35' prior: 51819485! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 00:35' prior: 51819813! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! !TAssertable methodsFor: 'asserting' stamp: 'CamilloBruni 10/15/2013 00:35'! validateShouldntException: anExceptionalEvent (anExceptionalEvent == Error or: [ anExceptionalEvent == Exception ]) ifTrue: [ Error signal: 'Use #shouldnt:raise: only with specific errors, or evaluate the given expression directly' ].! ! !NewList methodsFor: 'events - keyboard' stamp: 'MarcusDenker 10/16/2013 18:01' prior: 28377647! basicKeyPressed: aChar | nextSelection milliSeconds slowKeyStroke oldSelection | nextSelection := oldSelection := self selectedIndex. milliSeconds := Time millisecondClockValue. slowKeyStroke := milliSeconds - lastKeystrokeTime > 500. lastKeystrokeTime := milliSeconds. aChar = Character space ifTrue: [ self clickOnSelectedItem. ^ self secondSelection: 0 ]. self ensureFullDisplayListCache. slowKeyStroke ifTrue: ["forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString.] ifFalse: ["append quick keystrokes but don't move selection if it still matches" lastKeystrokes :=String streamContents: [:s | s << lastKeystrokes << aChar asLowercase asString ]]. "Get rid of blanks and style used in some lists" nextSelection := displayListCache findFirst: [:a | a ifNil: [ false "in case it's not loaded yet" ] ifNotNil: [:e | e beginsWith: lastKeystrokes fromList: self ]]. nextSelection isZero ifTrue: [ ^ self secondSelection: 0 ]. "No change if model is locked" model okToChange ifFalse: [ ^ self ]. "No change if model is locked" "The following line is a workaround around the behaviour of OBColumn>>selection:, which deselects when called twice with the same argument." oldSelection = nextSelection ifTrue: [ ^ self ]. self secondSelection: nextSelection. ! ! !NewList methodsFor: 'updating - private' stamp: 'MarcusDenker 10/16/2013 18:02' prior: 28394728! updateHeaderHeight self isInitialized ifFalse: [ ^ self ]. headerHeight contents: self model getHeaderHeight.! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString self validateShouldntException: anExceptionalEvent. ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! !Trait method! validateShouldntException: anExceptionalEvent (anExceptionalEvent == Error or: [ anExceptionalEvent == Exception ]) ifTrue: [ Error signal: 'Use #shouldnt:raise: only with specific errors, or evaluate the given expression directly' ].! ! !Trait method! validateShouldntException: anExceptionalEvent (anExceptionalEvent == Error or: [ anExceptionalEvent == Exception ]) ifTrue: [ Error signal: 'Use #shouldnt:raise: only with specific errors, or evaluate the given expression directly' ].! ! "CollectionsTests"! "NewList"! "SUnit-Core"! "SUnit-Tests"! "SmartSuggestions"! ----End fileIn----! ----QUIT----an Array(17 October 2013 8:55:40 am) Pharo.image priorSource: 23963855! ----STARTUP----an Array(17 October 2013 9:02:01 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 9:02:01 am) Pharo-30494.image priorSource: 23988973! ----STARTUP----an Array(17 October 2013 12:07:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/17/2013 12:01' prior: 74295810! commentForCurrentUpdate ^ '11910 1 RPackage should be = 1 MCPackage https://pharo.fogbugz.com/f/cases/11910 11911 Nautilus should show a package tree instead a simple list https://pharo.fogbugz.com/f/cases/11911 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/17/2013 12:02'! script150 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsProfStef-EstebanLorenzano.6.mcz Metacello-TestsReference-EstebanLorenzano.21.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.155.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.570.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.956.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.18.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/17/2013 12:02'! update30495 "self new update30495" self withUpdateLog: '11910 1 RPackage should be = 1 MCPackage https://pharo.fogbugz.com/f/cases/11910 11911 Nautilus should show a package tree instead a simple list https://pharo.fogbugz.com/f/cases/11911 '. self loadTogether: self script150 merge: false. RPackageOrganizer initialize. PackageTreeNautilus registerToolsOn: Smalltalk tools. . self flushCaches. ! ! "ScriptLoader30"! !PackageTreeNautilusUI commentStamp: '' prior: 0! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !PackageTreeModel commentStamp: '' prior: 0! I'm a tree model for managing grouos, packages and tags.! !PackageTreeNodeModel commentStamp: '' prior: 0! I'm a generic model for package tree nodes. ! !PackageTreeGroupNodeModel commentStamp: '' prior: 0! I'm a group node model.! !PackageTreePackageNodeModel commentStamp: '' prior: 0! I'm a package node model.! !PackageTreeTagNodeModel commentStamp: '' prior: 0! I'm a tag node model.! !PackageTreeNautilus commentStamp: '' prior: 0! I'm a model for Nautilus with package tree.! !PackageTreeSelection commentStamp: '' prior: 0! I'm a base selection of an item from package tree. ! !PackageTreeGroupSelection commentStamp: '' prior: 0! I'm a group selection.! !PackageTreePackageSelection commentStamp: '' prior: 0! I'm a package selection.! !PackageTreeTagSelection commentStamp: '' prior: 0! I'm a tag selection.! !RPackageTag commentStamp: '' prior: 0! I'm a class tag for an RPackage. Class tags can be any kind of metadata the user needs, but they are for now equivallent to class categories. ! !NautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/9/2013 16:19' prior: 28299012! generateTestMethodsAndFocus: aBoolean "generate testing methods for the selected methods in the test class" "I assume the test class is named #{MyClassName}Test" | focus | self selectedMethods ifEmpty: [^ self]. self selectedMethods reverse do: [:method | focus := self generateTestMethodFor: method ]. focus ifNil: [ ^ self ]. (aBoolean and: [ self okToChange ]) ifTrue: [ self showGroups: false. self selectedPackage: (self parentOfClass: focus methodClass). self selectedClass: focus methodClass. self selectedCategory: 'tests'. methodWidget selectMethod: focus. self selectedMethod: focus. self updateBothView ]! ! !NautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 13:15'! isSelectedPackage: package ^ package = self selectedPackage.! ! !NautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/14/2013 15:48'! parentOfClass: aClass ^ self model parentOfClass: aClass! ! !NautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 13:49' prior: 37012154! selectedClassWithoutChangingSelection: aClass categoryWidget resetCategoryCache. commentTextArea ifNotNil: [ aClass ifNil: [ commentTextArea disable ] ifNotNil: [ commentTextArea enable ]]. self okToChangeBoth ifTrue: [| package packageChanged cl | package := self selectedPackage. (self showPackages not or: [self showGroups ]) ifTrue: [ aClass ifNotNil: [ package := self parentOfClass: aClass ] ]. aClass ifNil: [ acceptor := ClassDefinitionAcceptor model: self. classesSelection removeAll ] ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self ]. packageChanged := (package ~= self selectedPackage). self model package: package class: aClass category: nil method: nil. cl := aClass. cl ifNotNil: [ cl := cl theNonMetaClass ]. classesSelection at: cl put: true. self changed: #toggleButtonEnabled. self setWindowTitle. packageChanged ifTrue: [ packagesSelection removeAll. packagesSelection at: package put: true. self showGroups ifTrue: [ self updateClassView ] ifFalse: [ self updateBothView ]]. self resetCategoriesListSelection. self resetMethodsListSelection. self update. self changed: #isAClassSelected. self changed: #getComments. self changed: #instanceButtonLabel. self changed: #sourceCodeFrom:]! ! !PackageTreeNautilusUI commentStamp: '' prior: 74332983! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !PackageTreeNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 10/15/2013 18:37'! packagesFixMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Class...') keyText: 'f, c' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [target findClass]; order: 0; help: 'Search for a class by name'. (aBuilder item: #'Find Package...') keyText: 'f, p' if: Nautilus useOldStyleKeys not; keyText: 'F' if: Nautilus useOldStyleKeys; action: [ target findPackage ]; order: 100; help: 'Search for a package by name'; withSeparatorAfter. (aBuilder item: #'Add package...') keyText: 'n, p' if: Nautilus useOldStyleKeys not; keyText: 'n' if: Nautilus useOldStyleKeys; action: [target addPackage]; order: 200; help: 'Add a package'. (aBuilder item: #'Add category...') action: [ target addClassCategory ]; order: 210; help: 'Add a category in package'; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [target fullBrowse]; order: 999; help: 'Open the same browser'.! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/15/2013 18:24'! addClassCategory | package | package := self addClassCategoryBasedOn: self selectedPackage. package ifNotNil: [ self selectedPackage: package. self updatePackageView ]! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/15/2013 17:35'! addClassCategoryBasedOn: aSelection | name package packageTag | packageTag := nil. package := aSelection package. name := UIManager default request: ('New category: {1}-' format: { package name }) initialAnswer: '' title: 'Create a new category'. (self isValidPackageName: name) ifTrue: [ | categoryName | categoryName := (package name, '-', name) asSymbol. SystemOrganization addCategory: categoryName. packageTag := package classTagNamed: categoryName ifAbsent: [ self error: 'Ther was a problem with package registration' ] ] ifFalse: [ self alertInvalidPackageName: name ]. ^ packageTag! ! !PackageTreeNautilusUI methodsFor: 'class' stamp: 'EstebanLorenzano 10/14/2013 16:20'! addClassIn: aPackage super addClassIn: aPackage asNautilusSelection package name.! ! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'EstebanLorenzano 10/10/2013 13:19'! addPackagesAsGroup: aCollection | group | aCollection isEmptyOrNil ifTrue: [ ^ nil ]. group := super addPackagesAsGroup: aCollection. self updatePackageView. ^ group! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 17:01'! basicRemoveClasses: aCollection aCollection do: #removeFromSystem.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 16:14'! basicSelectPackage: aPackage | selection | selection := aPackage asNautilusSelection. self giveFocusTo: list. self selectedPackageWithoutChangingSelection: selection. self listSelectItem: selection.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 14:19'! basicShowHierarchy "Prepares the class panel to show hierarchies" | class | class := self selectedClass theNonMetaClass. classesSelection at: class put: true. self hierarchyClass: class. listElements := nil. list2Elements := nil ! ! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 10/9/2013 15:29'! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton; addMorph: self buildToggleButton fullFrame: ((0@0 corner: 0.5@0) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ firstColumn := PanelMorph new changeProportionalLayout; addMorph: self buildList fullFrame: ( LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !PackageTreeNautilusUI methodsFor: 'items creation' stamp: 'EstebanLorenzano 10/9/2013 18:01'! buildList | treeModel | treeModel := PackageTreeModel new model: self; yourself. list := (MorphTreeMorph on: treeModel) multiSelection: true; dropEnabled: true; getMenuSelector: #menu:shifted:; hResizing: #spaceFill; vResizing: #spaceFill. treeModel announcer when: MorphTreeSelectionChanged do: [ :ann | self selected: ann selection ]. list buildContents. self selectedPackage ifNotNil: [ self listSelectItem: self selectedPackage ]. ^ list.! ! !PackageTreeNautilusUI methodsFor: 'class' stamp: 'EstebanLorenzano 10/14/2013 16:48'! classAdded: anAnnouncement | class | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement classAdded. ((self parentOfClass: class) nodePath anySatisfy: [ :node | node item = class package ]) ifTrue: [ self updateClassView. self removeFromPackagesIconsCache: class package ] ! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/9/2013 17:41'! clearPackageSelections listElements := nil. list2Elements := nil. packagesSelection removeAll. groupsSelection removeAll.! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/9/2013 17:07'! fullBrowse "I override my parent to call with proper package selection" self model class openOnPackage: self selectedPackage package class: self selectedClass category: self selectedCategory method: self selectedMethod group: self selectedGroup showGroups: self showGroups showHierarchy: self showHierarchy showPackages: self showPackages showComment: self showComment showInstance: self showInstance showCategories: true ! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 16:57'! groups ^ self model groupsManager groups.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 13:17'! isSelectedPackage: aSelection ^ aSelection asNautilusSelection = self selectedPackage! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/10/2013 16:13'! listClearSelection list model deselectAll.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/14/2013 15:41'! listSelectItem: anObject | selection | selection := anObject asNautilusSelection. list model expandAllFromNode: selection nodePath first; selectItems: { selection item }. list scrollSelectionIntoView.! ! !PackageTreeNautilusUI methodsFor: 'menus' stamp: 'EstebanLorenzano 10/9/2013 12:57'! menu: aMenu shifted: aBoolean self selectedPackage ifNil: [ ^ aMenu ]. ^ self selectedPackage menu: aMenu shifted: aBoolean target: self! ! !PackageTreeNautilusUI methodsFor: 'menu pragmas' stamp: 'EstebanLorenzano 10/15/2013 18:37'! packageFixPragma ^ 'nautilusGlobalPackageTreeFixMenu'! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:09'! packages ^ self model packages! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/14/2013 15:24'! registerSelectionGroup: aSelection self model selectedGroup: aSelection item. self flag: #todo. "I need to refactor to remove the need of groups" "I select also group-as-a-package, because I will be filtering with package selection, not with group selection (which actually does not has much sense now)" self model package: aSelection class: self selectedClass category: nil method: nil. groupsSelection at: aSelection item put: true. ! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/14/2013 12:54'! registerSelectionPackage: aSelection self model package: aSelection class: self selectedClass category: nil method: nil. packagesSelection at: aSelection item put: true.! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/16/2013 17:00'! removeClassCategory: packageTag self basicRemoveClasses: packageTag classes. ! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/10/2013 13:34'! removeGroups self okToChange ifFalse: [ ^ self ]. super removeGroups. self updatePackageView.! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/16/2013 17:00'! removePackageCategory: package self basicRemoveClasses: package definedClasses. self browsedEnvironment packageOrganizer unregisterPackage: package ! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/16/2013 17:14'! removePackages | names packages | packages := self selectedPackages. packages ifEmpty: [ ^ self ]. names := (packages collect: [:package | package name ]) joinUsing: String cr. (UIManager default confirm: ('Are you sure you want to delete the selection(s) named ', String cr, names, ' and their classes ?')) ifTrue: [ packages do: [ :each | each asNautilusSelection removeTarget: self ] ]! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/16/2013 15:24'! renameClassCategory: packageTag | newName oldName | oldName := packageTag nameWthoutPackagePrefix. newName := UIManager default request: ('New name of category {1}' format: { packageTag name }) initialAnswer: oldName title: 'Rename a category'. newName = oldName ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ packageTag renameWithPackagePrefixTo: newName ] ifFalse: [ self alertInvalidPackageName:newName ]. ! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 15:02'! renamePackage: aSelection aSelection asNautilusSelection renameTarget: self. ! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 10/16/2013 14:59'! renamePackageCategory: package super renamePackage: package! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 14:21'! resetShowHierarchy "If I'm showing hierarchy, goint back to show simple class list" self model showHierarchy ifFalse: [ ^ self ]. self showPackages: true.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 14:21'! selected: aNode | selection | self clearPackageSelections. self resetShowHierarchy. selection := aNode selectedNodes do: [ :each | self selectedPackageWithoutChangingSelection: each asNautilusSelection ]. self changed: #selected. self changed: #currentHistoryIndex. ! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 14:12'! selectedClassWithoutChangingSelection: aClass | package | categoryWidget resetCategoryCache. commentTextArea ifNotNil: [ aClass ifNil: [ commentTextArea disable ] ifNotNil: [ commentTextArea enable ] ]. self okToChangeBoth ifFalse: [ ^ self ]. package := self selectedPackage. aClass ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self. classesSelection at: aClass theNonMetaClass put: true ] ifNil: [ acceptor := ClassDefinitionAcceptor model: self. classesSelection removeAll ]. self model package: package class: aClass category: nil method: nil. self changed: #toggleButtonEnabled. self setWindowTitle. (self isSelectedPackage: package) ifFalse: [ packagesSelection removeAll. packagesSelection at: package put: true. self updateBothView ]. self resetCategoriesListSelection. self resetMethodsListSelection. self update. self changed: #isAClassSelected. self changed: #getComments. self changed: #instanceButtonLabel. self changed: #sourceCodeFrom:! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 16:15'! selectedGroup: aGroup " Force package selection, not used by the lists " self okToChange ifFalse: [ ^ self ]. acceptor := ClassDefinitionAcceptor model: self. packagesSelection removeAll. groupsSelection removeAll. groupsSelection at: aGroup put: true. aGroup ifNotNil: [ self basicSelectPackage: aGroup ] ifNil: [ self selectedPackageWithoutChangingSelection: nil. self listClearSelection ]. ! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 14:21'! selectedPackage: aPackage " Force package selection, not used by the lists " self okToChange ifFalse: [ ^ self ]. acceptor := ClassDefinitionAcceptor model: self. groupsSelection removeAll. packagesSelection removeAll. packagesSelection at: aPackage put: true. aPackage ifNotNil: [ self basicSelectPackage: aPackage ] ifNil: [ self selectedPackageWithoutChangingSelection: nil. self listClearSelection ]. ! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 17:32'! selectedPackageWithoutChangingSelection: aSelection | class | self okToChange ifFalse: [ ^ self ]. class := self selectedClass. (class notNil and: [ (aSelection includesClass: class) not ]) ifTrue: [ self selectedClass: nil ]. aSelection ifNotNil: [ aSelection registerSelectionTarget: self ]. self updateClassView. self update. self changed: #getComments. self changed: #sourceCodeFrom:.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 13:08'! showGroups: aBoolean "Do nothing, this option is cancelled for PackageTree browser"! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 14:18'! showPackages: aBoolean self okToChange ifFalse: [ ^ nil ]. list enabled: aBoolean. aBoolean ifFalse: [ self basicShowHierarchy ]. listElements := nil. list2Elements := nil. self model showPackages: aBoolean. self changed: #groupsButtonLabel. self updateClassView. self changed: #toggleButtonState. self changed: #toggleButtonLabel. self changedLabels.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/14/2013 12:37'! updateBothView | selectedPackage selectedClass | super updateBothView. selectedPackage := self selectedPackage. selectedClass := self selectedClass. self updatePackageView. "I need to restore selection (otherwise, nothing goes to the right position)" self selectedPackage: selectedPackage. self selectedClass: selectedClass.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/9/2013 17:40'! updateGroupView self updatePackageView! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/9/2013 15:55'! updatePackageView list model changed: #rootNodes.! ! !RPackageSet methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 18:36'! categoryNames ^ self packages inject: #() into: [ :all :each | all, (each classTagNames asArray) ]! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 16:22'! extensionProtocols ^ self protocolOrganizer extensionProtocols.! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 16:21'! protocols ^ self protocolOrganizer protocols.! ! !GroupHolder methodsFor: 'protocol' stamp: 'EstebanLorenzano 10/10/2013 13:13' prior: 45502482! groupNamed: aString ^ self groups detect: [:each | each name = aString]! ! !AbstractTool class methodsFor: 'private' stamp: 'EstebanLorenzano 10/14/2013 16:17'! defineClassTemplate ^ 'Object subclass: #{1} instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''{2}'''! ! !AbstractTool class methodsFor: 'private' stamp: 'EstebanLorenzano 10/14/2013 16:53'! defineTraitTemplate ^ 'Trait named: #{1} uses: {2} category: ''{3}'''! ! !AbstractTool methodsFor: 'class' stamp: 'EstebanLorenzano 10/14/2013 16:51' prior: 36332647! addClassIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | classSymbol systemCategory classDefinition | classSymbol := #NameOfSubclass. systemCategory := aPackage ifNil: [ 'Unknown' ]. classDefinition := self class defineClassTemplate format: { classSymbol. systemCategory } . classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. classDefinition isEmptyOrNil ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !AbstractTool methodsFor: 'class' stamp: 'EstebanLorenzano 10/14/2013 16:53' prior: 36333450! addTraitIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | systemCategory classDefinition | systemCategory := aPackage ifNil: [ 'Unknown' ]. classDefinition := self class defineTraitTemplate format: { #TNameOfTrait. '{}'. systemCategory name}. classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !AbstractTool methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 15:05' prior: 17474012! renamePackage: anRPackage | newName | newName := UIManager default request: 'New name of the package' initialAnswer: anRPackage name title: 'Rename a package'. newName = anRPackage name ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ self browsedEnvironment packageOrganizer renamePackage: anRPackage in: newName ] ifFalse: [ self alertInvalidPackageName:newName ].! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:23' prior: 31788189! addClassDefinitionName: aClassName toClassTag: aSymbol "Tags the class aClass with the tag aSymbol" (self addClassTag: aSymbol) addClassNamed: aClassName.! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 15:55' prior: 31788551! addClassTag: aSymbol "Add the class tag from the receiver, if already added do nothing." ^ self classTagNamed: aSymbol ifAbsent: [ classTags add: (RPackageTag package: self name: aSymbol) ] ! ! !RPackage methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 10/14/2013 13:20'! asNautilusSelection ^ PackageTreePackageSelection package: self.! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:29'! basicRemoveTag: tag classTags remove: tag.! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:25' prior: 31788775! classNamesForClassTag: aSymbol "Returns the classes tagged using aSymbol" ^ self classTagNamed: aSymbol ifAbsent: [ ^ #() ]. ! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 16:08'! classTagForClass: aClass ^ self classTagNamed: aClass category ifAbsent: [ nil ]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:34'! classTagNamed: aSymbol ifAbsent: aBlock ^ classTags detect: [ :each | each name = aSymbol ] ifNone: aBlock! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/16/2013 15:36'! classTagNamed: aSymbol ifPresent: aBlock ^ (classTags detect: [ :each | each name = aSymbol ] ifNone: [ nil ]) ifNotNil: [ :tag | aBlock cull: tag ]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/16/2013 18:36'! classTagNames ^ (Set with: self packageName), (self classTags collect: #name).! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:25' prior: 31788984! classTags "Returns the tags of the receiver" ^ classTags! ! !RPackage methodsFor: 'all accessing' stamp: 'EstebanLorenzano 10/8/2013 12:56' prior: 31784313! classes "Return all the classes" ^ self definedClasses, self extendedClasses ! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:25' prior: 31789135! classesForClassTag: aSymbol "Returns the classes tagged using aSymbol" ^ (self classTagNamed: aSymbol ifAbsent: [ ^ #() ]) classes! ! !RPackage methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/10/2013 14:33' prior: 48955344! initialize super initialize. classes := Set new. metaclassExtensionSelectors := Dictionary new. classExtensionSelectors := Dictionary new. classDefinedSelectors := Dictionary new. metaclassDefinedSelectors := Dictionary new. classTags := Set new.! ! !RPackage methodsFor: 'all accessing' stamp: 'EstebanLorenzano 10/8/2013 16:36' prior: 31784939! methods | methods | methods := OrderedCollection new. metaclassExtensionSelectors keysAndValuesDo: [:key :val | val do: [:sel | methods add: ((Smalltalk at: key) theMetaClass >> sel)]]. classExtensionSelectors keysAndValuesDo: [:key :val | val do: [:sel | methods add: ((Smalltalk at: key) >> sel)]]. metaclassDefinedSelectors keysAndValuesDo: [:key :val | val do: [:sel | methods add: ((Smalltalk at: key) theMetaClass >> sel)]]. classDefinedSelectors keysAndValuesDo: [:key :val | val do: [:sel | methods add: ((Smalltalk at: key) >> sel)]]. ^ methods! ! !RPackage methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 10/8/2013 17:26'! packages "Compatibility with monticello and old PackageInfo" ^ self classTags! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 17:07' prior: 31781391! removeClass: aClass "Remove the class and all its methods from the receiver" (self definedMethodsForClass: aClass instanceSide) do: [ :aCompiledMethod | self removeMethod: aCompiledMethod ]. "we also have also have to remove methods from class side" (self definedMethodsForClass: aClass classSide) do: [ :aCompiledMethod | self removeMethod: aCompiledMethod ]. self removeClassDefinitionWithoutCheckingMethods: aClass. self removeClassTagsForClassNamed: aClass name.! ! !RPackage methodsFor: 'class addition' stamp: 'EstebanLorenzano 10/10/2013 14:46' prior: 31787185! removeClassDefinitionName: aClassName "remove the class definition from the package but not its method" | removed aClassNameSymbol | ('* class' match: aClassName) ifTrue: [^ self error: 'no metaclass name']. aClassNameSymbol := aClassName asSymbol. "clean up class tags" classTags do: [ :tag| tag removeClassNamed: aClassName ]. (classTags select: #isEmpty) do: [ :eachTag | self basicRemoveTag: eachTag ]. "remove the class definition" removed := classes remove: aClassNameSymbol ifAbsent: [nil]. removed ifNotNil: [ self definedMethodsShouldBecomeExtensionWhenRemovingClass: aClassName. self unregisterClassName: aClassNameSymbol ] ! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/16/2013 17:08' prior: 31789623! removeClassDefinitionName: aClassName fromClassTag: aSymbol "Detags the class aClass with the tag aSymbol" | tag | tag := self classTagNamed: aSymbol ifAbsent: [ ^ self ]. tag removeClassNamed: aClassName. tag isEmpty ifTrue: [ self basicRemoveTag: tag ]. ! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 16:11' prior: 31782597! removeClassDefinitionWithoutCheckingMethods: aClass "Same than 'removeClassDefinition', excepts that it does not make any check to set defined methods as extensions" | removed aClassName| aClassName := aClass theNonMetaClass name. removed := classes remove: aClassName ifAbsent: [nil]. removed ifNotNil: [ self unregisterClass: aClass.] ! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 17:10'! removeClassNamed: className self removeClassDefinitionName: className. self removeAllMethodsFromClassNamed: className. self removeClassTagsForClassNamed: className.! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/10/2013 14:29' prior: 31789967! removeClassTag: aSymbol "Remove the class tag from the receiver." self basicRemoveTag: (self classTagNamed: aSymbol ifAbsent: [ ^ self ])! ! !RPackage methodsFor: 'as yet unclassified' stamp: 'EstebanLorenzano 10/16/2013 17:08'! removeClassTagsForClassNamed: aString (self classTags select: [ :eachTag | eachTag hasClassNamed: aString ]) do: [ :eachTag | self removeClassDefinitionName: aString fromClassTag: eachTag name ]! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'EstebanLorenzano 10/3/2013 16:16' prior: 48420668! groupRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNotNil: [ target selectedClass groupRefactoring: aBuilder ].! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'EstebanLorenzano 10/10/2013 13:24' prior: 47958798! packageRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Rewrite Code') order: 100; withSeparatorAfter. (aBuilder item: #'Rewrite Code') action: [ target refactor rewriteCode ]; parent: #'Rewrite Code'; order: 0. (aBuilder item: #'Search Code') action: [ target refactor searchCode ]; parent: #'Rewrite Code'; order: 100. ! ! !MCPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 18:34' prior: 24891061! snapshot | packageInfo definitions categories | packageInfo := self packageSet. definitions := OrderedCollection new. categories := packageInfo categoryNames asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ]. packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition] displayingProgress: [ :ea| 'Snapshotting methods...' ]. packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition] displayingProgress: [ :ea| 'Searching for overrides in ', ea asString ]. packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions] displayingProgress: [ :ea| 'Snapshotting class ', ea asString ]. (packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions ! ! !Behavior methodsFor: '*Nautilus' stamp: '' prior: 44351191! realClass ^ self! ! !Protocol methodsFor: 'accessing' stamp: 'SebastianTleye 8/28/2013 17:22' prior: 69752816! addAllMethodsFrom: aProtocol aProtocol methods do: [ :each | self addMethod: each ].! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 10/2/2013 16:23'! isExtensionProtocol ^ self name first = $*.! ! !RPackageOrganizer class methodsFor: 'singleton' stamp: 'EstebanLorenzano 10/16/2013 17:38' prior: 32021128! fillUp "self fillUp" self default initializeFromSystemStartingFromPackageOrganizer. "initializing from system might have generated some new packageInfo (because Package Inof lazily register system categories). Therefore, we should iterate a second time over all package infos:" self default initializeFromSystemStartingFromPackageOrganizer. ! ! !RPackageOrganizer class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/16/2013 17:35' prior: 32019335! initialize self initializeDefaultFromMC.! ! !RPackageOrganizer class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/16/2013 17:37' prior: 32019476! initializeDefault "self initializeDefault" default ifNotNil: [ default unregister ]. default := nil. self setDefault: self new. self fillUp.! ! !RPackageOrganizer class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/16/2013 17:36' prior: 32019658! initializeDefaultFromMC "self initializeDefault" self setDefault: self new initializeFromMC.! ! !RPackageOrganizer class methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 17:37'! setDefault: anOrganizer default ifNotNil: [ default unregister ]. default := anOrganizer. default register. RPackage organizer: nil.! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/16/2013 17:11' prior: 31963476! fullyRemoveClassNamed: className "Remove the class, the class backpointer, the extensions and the extension backPointer from the receiver and the class involved with the class named: className. className is a class name and should not be a metaclass one. " | rPackage | rPackage := self packageOfClassNamed: className. rPackage ifNil: [ ^ self ]. rPackage removeClassNamed: className. (self extendingPackagesOfClassNamed: className) do: [:each | each removeAllMethodsFromClassNamed: className. ]. ! ! !RPackageOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/8/2013 18:40'! initializeFromMC self allManagers do: [ :workingCopy | self basicRegisterPackage: (RPackage named: workingCopy packageName) ] displayingProgress: 'Importing monticello packages'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCFor: eachBehavior ] displayingProgress: 'Importing behaviors'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCMethodsFor: eachBehavior. self initializeFromMCMethodsFor: eachBehavior class ] displayingProgress: 'Importing methods'. Smalltalk allClassesAndTraits do: [ :eachBehavior | eachBehavior organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior protocol: eachProtocol ]. eachBehavior class organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior class protocol: eachProtocol ] ] displayingProgress: 'Importing extensions'. ! ! !RPackageOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/16/2013 12:49'! initializeFromMCExtensionsFor: aBehavior protocol: aProtocol | package protocolName | protocolName := (aProtocol name allButFirst) trimBoth. package := self packageMatchingExtensionName: protocolName. package ifNil: [ package := self basicRegisterPackage: (RPackage named: protocolName) ]. self registerExtendingPackage: package forClass: aBehavior. (aProtocol methods select: [ :eachSelector | (aBehavior >> eachSelector) origin = aBehavior ]) do: [ :eachSelector | package addMethod: aBehavior >> eachSelector ]! ! !RPackageOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/16/2013 15:58'! initializeFromMCFor: aBehavior | package | package := self packageMatchingExtensionName: aBehavior category. package ifNil: [ "It should not happen. But actually could happen that one class is in a SystemCategory and not in a MC" package := self basicRegisterPackage: (RPackage named: aBehavior category) ]. package addClassDefinition: aBehavior. package addClassDefinition: aBehavior toClassTag: aBehavior category asSymbol. self registerPackage: package forClass: aBehavior.! ! !RPackageOrganizer methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/16/2013 12:48'! initializeFromMCMethodsFor: aBehavior | package | package := aBehavior package. (aBehavior organization protocols select: [ :each | each isExtensionProtocol not ]) do: [ :eachProtocol | (eachProtocol methods select: [ :eachSelector | (aBehavior >> eachSelector) origin = aBehavior ]) do: [ :eachSelector | package addMethod: (aBehavior >> eachSelector) ] ]! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/9/2013 14:54' prior: 70014219! packageMatchingExtensionName: anExtensionName "return nil if no package is not found" | tmpPackageName | "we first look if their is a package matching exactly the name specified" (self packageExactlyMatchingExtensionName: anExtensionName) ifNotNil: [ :package | ^ package ]. "if no package was found, we try to find one matching the begining of the name specified" tmpPackageName := ''. packages keysDo: [:aSymbol | (anExtensionName beginsWithEmpty: (aSymbol, '-') caseSensitive: false) ifTrue: [ "we keep the longest package name found" (aSymbol size > tmpPackageName size) ifTrue: [ tmpPackageName := aSymbol ]]]. ^ tmpPackageName = '' ifTrue: [ nil ] ifFalse: [ self packageNamed: tmpPackageName ]! ! !RPackageOrganizer methodsFor: 'public registration' stamp: 'EstebanLorenzano 10/15/2013 18:24' prior: 32006847! registerPackage: aPackage "A new package is now available and declared in the receiver. " self basicRegisterPackage: aPackage. aPackage extendedClasses do: [ :extendedClass | self registerExtendingPackage: aPackage forClass: extendedClass]. aPackage definedClasses do: [ :definedClass | self registerPackage: aPackage forClass: definedClass]. self announcer announce: (RPackageCreated to: aPackage). ^ aPackage! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/16/2013 15:33'! renamePackage: rPackage from: oldName to: newName | classesAndProtocolsToRename | rPackage name: newName. "we update the organizer" packages at: newName put: rPackage. packages removeKey: oldName ifAbsent: [ self reportBogusBehaviorOf: #systemCategoryRenamedActionFrom: ]. "we also rename all the extension protocols in the system with the new name" classesAndProtocolsToRename := rPackage extensionMethods asIdentitySet. classesAndProtocolsToRename do: [:method | method methodClass organization silentlyRenameCategory: method category toBe: '*', newName ]! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/15/2013 18:23' prior: 31969220! systemCategoryAddedActionFrom: ann | package | package := self packageMatchingExtensionName: ann categoryName asString. package ifNil: [ package := self registerPackage: (self packageClass named: ann categoryName asSymbol) ]. package addClassTag: ann categoryName asSymbol.! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/16/2013 17:47' prior: 31970368! systemCategoryRenamedActionFrom: ann | rPackage oldName newName | oldName := ann oldCategoryName asSymbol. newName := ann newCategoryName asSymbol. rPackage := self packageMatchingExtensionName: ann oldCategoryName. rPackage ifNil: [ rPackage := (RPackage named: newName) register ]. rPackage name = ann oldCategoryName ifTrue: [ self renamePackage: rPackage from: oldName to: newName ]. rPackage classTagNamed: oldName ifPresent: [ :tag | tag basicRenameTo: newName ] ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/9/2013 14:55' prior: 31971583! systemClassAddedActionFrom: ann | class rPackage categoryNameSymbol | class := ann classAffected. categoryNameSymbol := class category. rPackage := (self packageMatchingExtensionName: categoryNameSymbol) ifNil: [ self registerPackage: (self packageClass named: categoryNameSymbol) ]. "when we add the class, the parent category should normally already be register correctly at the RPackageOrganizer" "this next line should import the class and all its methods: " rPackage importClass: class. rPackage addClassDefinition: class toClassTag: class category asSymbol. rPackage importClass: class theMetaClass "maybe the last update should be (is?) automatically done when adding or removing from a RPackage." "self default registerPackage: rPackage forClass: class" "maybe have to check for class and metaClass that will maybe both throw an event? => seems to be correctly handled by RPackage"! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 10/16/2013 16:39' prior: 31972699! systemClassRecategorizedActionFrom: ann | class newRPackage oldRPackage newCategoryName oldCategoryName| class := ann classAffected. newCategoryName := ann newCategory asSymbol. oldCategoryName := ann oldCategory asSymbol. oldRPackage := self packageMatchingExtensionName: oldCategoryName. newRPackage := (self packageMatchingExtensionName: newCategoryName) ifNil: [ self registerPackage: (self packageClass named: newCategoryName) ]. oldRPackage removeClass: class. newRPackage importClass: class. newRPackage addClassDefinition: class toClassTag: class category asSymbol. newRPackage importClass: class theMetaClass . SystemAnnouncer uniqueInstance classRepackaged: class from: oldRPackage to: newRPackage.! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'we are not sure' stamp: 'EstebanLorenzano 10/8/2013 13:09' prior: 31881485! testAddMethodInExtensionCategoryBestMatchingNameAddMethodToTheExtendingPackage "test that when we add a method  in an extension category ( beginning with*) that enlarge a package name (for example *mondrian-accessing for Mondrian), this method is added to the corresponding extending package" | class XPackage YPackage | self addXYCategory. self addXMatchCategory. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. self createMethodNamed: #newMethod inClass: class inCategory: '*XXXXX-YYYY'. self deny: (YPackage includesDefinedSelector: #newMethod ofClass: class). self assert: (XPackage includesExtensionSelector: #newMethod ofClass: class). self assert: ((class >> #newMethod) packageFromOrganizer: self organizer ) = XPackage! ! !TraitBehavior methodsFor: '*Nautilus' stamp: '' prior: 44866112! realClass ^ self! ! !GroupManager methodsFor: 'registering' stamp: 'MarianoMartinezPeck 8/5/2012 15:56' prior: 45506545! register: aGroup groups add: aGroup. GroupAnnouncer uniqueInstance announce: (AGroupHasBeenRegistered with: aGroup)! ! !GroupManager methodsFor: 'registering' stamp: 'MarianoMartinezPeck 8/5/2012 15:56' prior: 45506749! unregister: aGroup groups remove: aGroup. GroupAnnouncer uniqueInstance announce: (AGroupHasBeenUnregistered with: aGroup)! ! !MCVersionLoader methodsFor: 'private' stamp: 'EstebanLorenzano 10/4/2013 13:13'! ensurePackage: mcPackage RPackageOrganizer default packageNamed: mcPackage name ifAbsent: [ (RPackage named: mcPackage name) register ]! ! !MCVersionLoader methodsFor: 'loading' stamp: 'EstebanLorenzano 10/4/2013 12:48' prior: 48019110! load RPackageSet withCacheDo: [ | version | version := versions first. self ensurePackage: version package. self loadWithNameLike: version info name ].! ! !PackageTreeModel commentStamp: '' prior: 74333501! I'm a tree model for managing grouos, packages and tags.! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 15:32'! groupIconFor: aPackage ^ self model groupIconFor: aPackage.! ! !PackageTreeModel methodsFor: 'private' stamp: 'EstebanLorenzano 10/3/2013 15:24'! groupsAsNodes ^ (self model groups collect: [ :each | PackageTreeGroupNodeModel with: each model: self ]) sorted: [ :a :b | a name < b name ]! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 13:18'! menu: menu shifted: b ^ self model menu: menu shifted: b! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 18:46'! model ^ model! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 18:46'! model: anObject model := anObject! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:10'! packageIconFor: aPackage ^ self model packageIconFor: aPackage.! ! !PackageTreeModel methodsFor: 'private' stamp: 'EstebanLorenzano 10/3/2013 15:23'! packagesAsNodes ^ (self model packages collect: [ :each | PackageTreePackageNodeModel with: each model: self ]) sorted: [ :a :b | a name < b name ]! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 15:23'! rootNodes ^ self groupsAsNodes, (self packagesAsNodes)! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:20'! tagIconFor: aTag ^ nil! ! !PackageTreeNodeModel commentStamp: '' prior: 74333620! I'm a generic model for package tree nodes. ! !PackageTreeGroupNodeModel commentStamp: '' prior: 74333732! I'm a group node model.! !PackageTreeGroupNodeModel methodsFor: 'converting' stamp: 'EstebanLorenzano 10/14/2013 13:16'! asNautilusSelection ^ PackageTreeGroupSelection node: self! ! !PackageTreeGroupNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 15:32'! icon ^ self model groupIconFor: self item.! ! !PackageTreeGroupNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 15:31'! rowMorphForColumn: aTreeColumn ^ self item name asMorph! ! !PackageTreeNodeModel methodsFor: 'comparing' stamp: 'EstebanLorenzano 10/14/2013 15:02'! = aNode self class = aNode class ifFalse: [ ^ false ]. ^ self item = aNode item.! ! !PackageTreeNodeModel methodsFor: 'converting' stamp: 'EstebanLorenzano 10/10/2013 16:46'! asNautilusSelection "Answers a pair RPackage->Tag to express the correct selection" ^ self subclassResponsibility! ! !PackageTreeNodeModel methodsFor: 'comparing' stamp: 'EstebanLorenzano 10/14/2013 15:02'! hash ^ self class hash bitXor: self item hash! ! !PackageTreePackageNodeModel commentStamp: '' prior: 74333825! I'm a package node model.! !PackageTreePackageNodeModel methodsFor: 'converting' stamp: 'EstebanLorenzano 10/10/2013 16:46'! asNautilusSelection ^ PackageTreePackageSelection package: self item ! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:29'! childNodeClassFromItem: anItem ^ PackageTreeTagNodeModel! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 14:40'! childrenItems | tags | tags := self item classTags. "If there is just one, do not show" ^ (tags size = 1 and: [ tags anyOne name = self item name ]) ifTrue: [ #() ] ifFalse: [ tags sorted: [ :a :b | a name < b name ] ]! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:22'! icon ^ self model packageIconFor: self item.! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:06'! rowMorphForColumn: aTreeColumn ^ self item name asMorph! ! !PackageTreeTagNodeModel commentStamp: '' prior: 74333916! I'm a tag node model.! !PackageTreeTagNodeModel methodsFor: 'converting' stamp: 'EstebanLorenzano 10/14/2013 13:23'! asNautilusSelection ^ PackageTreeTagSelection node: self! ! !PackageTreeTagNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/2/2013 19:21'! icon ^ self model tagIconFor: self item! ! !PackageTreeTagNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:37'! rowMorphForColumn: aTreeColumn ^ self item name asMorph! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 10/10/2013 13:25' prior: 37840711! packagesChangesMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := (NautilusMCBindings default mcPackageFor: package). mcpackage ifNil: [ ^ self ]. mcpackage isDirty ifTrue: [ (aBuilder item: #('Changes with ',package name)) label: 'Changes with...'; order: 1295; help: 'Changes'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. mcpackage workingCopy repositoryGroup repositories doWithIndex: [:repo : index | (aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Changes with ',package name); order: index; action: [ self default viewChangesFor: mcpackage in: repo ]]]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 10/10/2013 13:25' prior: 37841671! packagesCommitsMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := (NautilusMCBindings default mcPackageFor: package). mcpackage ifNil: [ ^self ]. mcpackage isDirty ifTrue: [ | last group | (aBuilder item: #('Commit in ',package name)) label: 'Commit in...'; order: 1296; help: 'Commit'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. (group := mcpackage workingCopy repositoryGroup) repositories doWithIndex: [:repo : index | last := ((aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Commit in ',package name); order: index; action: [ self default commit: mcpackage workingCopy in: repo ])]. last withSeparatorAfter. (aBuilder item: 'Add a repository') parent: #('Commit in ',package name); order: 99; action: [ self default addRepositoryTo: group ]]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 10/10/2013 13:25' prior: 37842835! packagesCreateMenu: aBuilder | package mcpackage target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := NautilusMCBindings default mcPackageFor: package. mcpackage ifNotNil: [ ^ self ]. (aBuilder item: #'Create a MC package') order: 1297; help: 'Create a MC package corresponding to my name'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); action: [ self default createMCPackageFor: target selectedPackage ]; enabledBlock: [ target selectedPackages size < 2 ].! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 10/10/2013 13:25' prior: 37843527! packagesOpenMenu: aBuilder | package mcpackage target last group | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. mcpackage := NautilusMCBindings default mcPackageFor: package. mcpackage ifNil: [ ^ self ]. (aBuilder item: #('Open ',package name)) label: 'Open...'; order: 1297; help: 'Open'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); enabledBlock: [ target selectedPackages size < 2 ]. (group := mcpackage workingCopy repositoryGroup) repositories doWithIndex: [:repo : index | last := (aBuilder item: ('Repo',index printString)) label: repo description; parent: #('Open ',package name); order: index; action: [ self default open: mcpackage in: repo ]]. last withSeparatorAfter. (aBuilder item: 'Add a repository') parent: #('Open ',package name); order: 99; action: [ self default addRepositoryTo: group ]! ! !NautilusMonticello class methodsFor: 'monticello menus' stamp: 'EstebanLorenzano 10/10/2013 13:25' prior: 37844601! packagesSliceMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Create Slice and commit it') order: 1298; help: 'Create a slice and commit it into PharoInbox'; action: [ self default postNewSliceFor: target window ]; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon). (aBuilder item: #'Create Slice') order: 1299; help: 'Create a slice'; action: [ self default addSliceFor: target window ]; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); withSeparatorAfter.! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - adding classes' stamp: 'EstebanLorenzano 10/8/2013 13:08' prior: 31840290! testAddClassAddItIntoPackageBestMatchName "self debug: #testAddCategoryCreatesPackage" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #'XXXXX'. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. self assert: (tmpPackage definesClass: class). self assert: class package equals: tmpPackage! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'EstebanLorenzano 10/8/2013 13:08' prior: 31858055! testRecategorizeClassRegisterTheClassInTheBestMatchPackage "test that when we recategorize a class, the new package in which it is defined include it" |XPackage YPackage class| self addXCategory. self addXMatchCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. class category: 'XXXXX-YYYY'. self assert: (self organizer packageOf: class) = XPackage. self deny: (self organizer packageOf: class) = YPackage. ! ! !AbstractGroup methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 10/10/2013 16:10'! asNautilusSelection ^ PackageTreeGroupSelection group: self! ! !AbstractGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/18/2011 14:00' prior: 17229935! beReadOnly readOnly := true! ! !AbstractGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/18/2011 14:22' prior: 17230053! elements ^ self subclassResponsibility! ! !AbstractGroup methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 4/14/2011 21:55' prior: 17230182! isReadOnly ^ readOnly == true! ! !AbstractGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/18/2011 14:03' prior: 17230302! name ^ name! ! !AbstractGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/18/2011 14:04' prior: 17230404! name: aString self ifAllowed: [ name := aString ]! ! !AbstractGroup methodsFor: 'queries' stamp: 'EstebanLorenzano 10/9/2013 17:23'! packages ^ (self classes collect: #package as: Set) asArray! ! !AbstractGroup methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 3/24/2011 13:41' prior: 17230544! removable ^ removable ifNil: [ removable := true ]! ! !AbstractGroup methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/24/2011 13:39' prior: 17230685! removable: aBoolean removable := aBoolean! ! !AbstractGroup methodsFor: 'registry' stamp: 'MarcusDenker 7/19/2013 10:59' prior: 45496817! unregister GroupManager unregister: self! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on traits' stamp: 'EstebanLorenzano 10/8/2013 13:10' prior: 32079115! testAddTraitAddItIntoPackageBestMatchName "self debug: #testAddTraitAddItIntoPackageBestMatchName" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #'XXXXX'. class := self createNewTraitNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. self assert: (tmpPackage definesClass: class). self assert: tmpPackage equals: class package.! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 10/9/2013 17:34' prior: 46594747! groupsMenu: aBuilder | target | target := aBuilder model. target selectedGroup ifNil: [ ^ target ]. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; action: [ target restrictedBrowseGroups: target selectedGroups ]; order: 1000; withSeparatorAfter. (aBuilder item: #'Run tests') keyText: 'j, g' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runTestsOfGroups: target selectedGroups notifying: true ]; order: 1100. (aBuilder item: #'Merge groups') action: [target mergeGroups]; enabledBlock: [ target selectedGroups size > 1]; order: 1200. target selectedGroup ifNotNil: [ target selectedGroup isReadOnly ifFalse: [ (aBuilder item: #'Rename...') keyText: 'r, g' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [ target renameGroup ]; enabledBlock: [ target selectedGroups size <= 1]; order: 1300 ]. target selectedGroup removable ifTrue: [ (aBuilder item: #'Remove groups') keyText: 'x, g' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; icon: (Smalltalk ui icons iconNamed: #removeIcon); action: [target removeGroups]; order: 1400 ] ]! ! !AbstractNautilusUI class methodsFor: 'menu pragmas' stamp: 'EstebanLorenzano 10/15/2013 18:36'! packageFixPragma ^ 'nautilusGlobalPackageFixMenu'! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'EstebanLorenzano 10/10/2013 13:14' prior: 17285468! addPackageAsGroupAndBrowse self addPackageAsGroup ifNotNil: [:group | self selectedGroup: group. self showGroups: true] ifNil: [ | group | group := self model groupsManager groupNamed: self selectedPackage name. group ifNotNil: [ self selectedGroup: group. self showGroups: true ]]! ! !AbstractNautilusUI methodsFor: 'plugins announcements' stamp: 'EstebanLorenzano 10/9/2013 16:18' prior: 17330443! browseClass: aClass self showGroups: false. self selectedPackage: (self parentOfClass: aClass). self selectedClass: aClass. self updateBothView! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/3/2013 14:51' prior: 36584187! buildTabbedNameOf: anElement | tab result size | tab := ' '. size := cachedHierarchy indentationFor: anElement. result := String new: (size * (tab size)) streamContents: [ :s| 1 to: size do: [:i | s nextPutAll: tab ]]. ^ self selectedPackage ifNil: [result, anElement name] ifNotNil: [:package | (package includesClass: anElement) ifTrue: [ (result, anElement name) asStringMorph ] ifFalse: [ (result , anElement name",' (', anElement package name,')'")asStringMorph color: self extensionColor;yourself]]! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'EstebanLorenzano 10/14/2013 16:23' prior: 17343486! classAdded: anAnnouncement | class | window ifNil: [^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement classAdded. ((self showGroups and: [ self selectedGroup ifNil: [ ^ self ] ifNotNil: [:gp | gp elements includes: class ]]) or: [ self selectedPackage = (self parentOfClass: class)]) ifTrue: [ self updateClassView. self removeFromPackagesIconsCache: class package ]! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'EstebanLorenzano 10/2/2013 17:27' prior: 17345397! classRemoved: anAnnouncement | class oldPackage | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement classRemoved. ((self showGroups and: [ self selectedGroup ifNil: [ ^self ] ifNotNil: [:gp | gp elements includes: class ]]) or: [ self getList2 includes: class ]) ifTrue: [ self selectedClass = class ifTrue: [ self selectedClass: nil ]. window isDisplayed ifFalse: [ ^ self ]. oldPackage := RPackageOrganizer default packageMatchingExtensionName: (anAnnouncement categoryName). self removeFromPackagesIconsCache: oldPackage. self updateBothView ]. ! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'EstebanLorenzano 10/9/2013 16:18' prior: 17336657! compileAClassFrom: aString notifying: aController sourceTextArea update: #clearUserEdits. ( self compileANewClassFrom: aString notifying: aController startingFrom: self selectedClass ) ifNil: [^ sourceTextArea hasUnacceptedEdits: true. ] ifNotNil: [:class | self selectedPackage: (self parentOfClass: class). self selectedClass: class. self showHierarchy ifTrue: [ self hierarchyClass: class ]. self showGroups ifTrue: [ self updateClassView ] ifFalse: [ self updateBothView ]]! ! !AbstractNautilusUI methodsFor: 'test creation' stamp: 'EstebanLorenzano 10/9/2013 16:19' prior: 17350031! createTestForClass: aClass | definition testClass className | aClass ifNil: [ ^ nil ]. (aClass inheritsFrom: TestCase) ifTrue: [ ^ nil ]. aClass isMeta ifTrue: [ ^ nil ]. className := self buildTestClassNameFrom: aClass. testClass := self class environment at: className ifPresent: [:class | class ] ifAbsent: [ definition := self buildTestClassDefinitionFrom: aClass. testClass := self compileANewClassFrom: definition notifying: nil startingFrom: self selectedClass. self class environment at: className. testClass comment: (self generateCommentForTestClass: testClass from: aClass)]. self showGroups: false. self selectedPackage: (self parentOfClass: testClass). self selectedClass: testClass. self updateBothView. ^ testClass! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 10/10/2013 16:52' prior: 68836739! findClass: aSearchInstance "select the class returned by the search block" | aClass | self okToChange ifFalse: [^ self flashPackage ]. aClass := aSearchInstance chooseFromOwner: self window. aClass ifNil: [^ self flashPackage]. self showGroups: false. self selectedPackage: (self parentOfClass: aClass). self selectedClass: aClass. self updateBothView! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/3/2013 14:52' prior: 17361711! listWrapper2: anElement "anElement is a Class" ^ self showHierarchy ifTrue: [ self buildTabbedNameOf: anElement ] ifFalse: [ self selectedPackage ifNil: [anElement name] ifNotNil: [ :package | (package includesClass: anElement) ifTrue: [ anElement name asStringMorph ] ifFalse: [ anElement name asStringMorph color: self extensionColor;yourself]]]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/9/2013 16:18'! parentOfClass: aClass ^ aClass package.! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 10/16/2013 14:57' prior: 17365500! renamePackage: aPackage | isCurrent | isCurrent := self isSelectedPackage: aPackage. super renamePackage: aPackage. isCurrent ifTrue: [ self selectedPackage: aPackage ]. packagesSelection at: aPackage put: true.! ! !Nautilus class methodsFor: 'opening' stamp: 'EstebanLorenzano 10/14/2013 15:49' prior: 27973507! openOnClass: aClass inEnvironment: anEnvironment | instance | instance := self new. instance browsedEnvironment: anEnvironment; showInstance: aClass isMeta not; showGroups: false; package: (self parentOfClass: aClass) class: aClass category: nil method: nil; open. instance ui showPackages: (self switchClassesAndPackages not); giveFocusToProtocol. ^ instance! ! !Nautilus class methodsFor: 'opening' stamp: 'EstebanLorenzano 10/14/2013 17:32' prior: 27975875! openOnMethod: aMethod inEnvironment: anEnvironment | instance class | class := aMethod methodClass. instance := self new. instance browsedEnvironment: anEnvironment; showInstance: class isMeta not; showGroups: false; package: (self parentOfClass: class) class: class category: aMethod protocol asString method: aMethod; open. instance ui showPackages: (self switchClassesAndPackages not); giveFocusToMethod. ^ instance! ! !Nautilus class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 15:48'! parentOfClass: aClass ^ aClass package! ! !Nautilus methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 15:49'! parentOfClass: aClass ^ self class parentOfClass: aClass! ! !Nautilus methodsFor: 'browser compatibility' stamp: 'EstebanLorenzano 10/9/2013 16:20' prior: 27960665! setClass: aClass selector: aSelector | method protocol | method := aClass methodDict at: aSelector ifAbsent: [ nil ]. protocol := method ifNil: [ nil ] ifNotNil: [ method protocol ]. self showGroups: false; selectedPackage: (self parentOfClass: aClass); selectedClass: aClass; showInstance: aClass isMeta not; selectedCategory: protocol; selectedMethod: method ! ! !PackageTreeNautilus commentStamp: '' prior: 74333999! I'm a model for Nautilus with package tree.! !PackageTreeNautilus class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 15:51'! parentOfClass: aClass "I can answer an RPackage or an RPackageTag, depending on the presence of Tags in package. This is an UI optimization to not show a tree RPackage->RPackageTag when there is just one tag in package, named in the same way as his parent" | package tag | package := aClass package. tag := package classTagForClass: aClass. ^ (((tag name = package name) and: [ package classTags size <= 1 ]) ifTrue: [ package ] ifFalse: [ tag ]) asNautilusSelection! ! !PackageTreeNautilus class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 16:51'! resetGroups groups := nil.! ! !PackageTreeNautilus methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 14:30'! uiClass ^ PackageTreeNautilusUI! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'EstebanLorenzano 10/16/2013 17:41' prior: 31838775! testRenameCategoryUpdateTheOrganizer "test that when we rename a category, the organizer dictionary is update with this new name, so that we can access the package with this new name as key" |XPackage| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. Smalltalk organization renameCategory: 'XXXXX' toBe: 'YYYYY'. self assert: (self organizer packageNamed: 'YYYYY' asSymbol) = XPackage. self deny: (self organizer includesPackageNamed: #XXXXX).! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 14:17' prior: 48583842! allMethods ^ self protocols gather: [:p | p methods ].! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 15:10' prior: 48584142! allProtocols ^ { allProtocol }, protocols asArray! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/4/2013 14:45'! extensionProtocols ^ self protocols select: #isExtensionProtocol! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/12/2012 16:55' prior: 48587496! protocols ^ protocols! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/24/2012 14:38' prior: 48588459! removeMethod: aSymbol (self protocolsOfSelector: aSymbol) do: [ :p | p removeMethod: aSymbol ]! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'SebastianTleye 8/29/2013 10:38' prior: 50157044! renameProtocol: oldName into: newName (self existsProtocolNamed: newName) ifTrue: [ self moveMethodsFrom: oldName to: newName. self removeProtocolNamed: oldName ] ifFalse: [ ^ (self getProtocolNamed: oldName) name: newName; yourself].! ! !PackageTreeSelection commentStamp: '' prior: 74334105! I'm a base selection of an item from package tree. ! !PackageTreeGroupSelection commentStamp: '' prior: 74334225! I'm a group selection.! !PackageTreeGroupSelection class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/14/2013 16:11'! group: aGroup ^ self node: (PackageTreeGroupNodeModel with: aGroup)! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:14'! definedClasses ^ self item classes! ! !PackageTreeGroupSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/3/2013 15:36'! includesClass: aClass ^ self definedClasses includes: aClass! ! !PackageTreeGroupSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/3/2013 16:09'! isGroup ^ true! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 12:56'! menu: aMenu shifted: aBoolean target: aTarget ^ aTarget groupsMenu: aMenu shifted: aBoolean! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:15'! package ^ self item packages ifNotEmpty: [ :packages | packages first ]! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 17:35'! registerSelectionTarget: aTarget aTarget registerSelectionGroup: self.! ! !PackageTreePackageSelection commentStamp: '' prior: 74334317! I'm a package selection.! !PackageTreePackageSelection class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/14/2013 13:21'! package: aPackage ^ self node: (PackageTreePackageNodeModel with: aPackage)! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:18'! classes ^ self item classes! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:18'! definedClasses ^ self item definedClasses! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:18'! extendedClasses ^ self item extendedClasses! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:18'! extensionClasses ^ self item extensionClasses! ! !PackageTreePackageSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/14/2013 13:22'! includesClass: aClass ^ self item includesClass: aClass! ! !PackageTreePackageSelection methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/3/2013 13:42'! initializePackage: aPackage self initialize. package := aPackage.! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 12:56'! menu: aMenu shifted: aBoolean target: aTarget ^ aTarget packagesMenu: aMenu shifted: aBoolean! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 16:06'! package ^ self item! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 17:36'! registerSelectionTarget: aTarget aTarget registerSelectionPackage: self.! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 16:48'! removeTarget: target target removePackageCategory: self.! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:01'! renameTarget: target target renamePackageCategory: self item.! ! !PackageTreeTagSelection commentStamp: '' prior: 74334407! I'm a tag selection.! !PackageTreeTagSelection class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/14/2013 14:56'! tag: aTag ^ self node: ((PackageTreeTagNodeModel with: aTag) parentNode: (PackageTreePackageNodeModel with: aTag package); yourself)! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 16:14'! classes ^ self definedClasses! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:16'! definedClasses ^ self item classes! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 14:21'! extendedClasses ^ #()! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 14:19'! extensionClasses ^ #()! ! !PackageTreeTagSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/14/2013 13:16'! includesClass: aClass ^ self item classNames includes: aClass instanceSide name.! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 16:07'! package ^ self item package! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 16:48'! removeTarget: target target removeClassCategory: self.! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:02'! renameTarget: target target renameClassCategory: self item.! ! !PackageTreeSelection class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/14/2013 13:19'! new self error: 'Use #node:'! ! !PackageTreeSelection class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/14/2013 13:13'! node: aNode ^ self basicNew initializeNode: aNode; yourself! ! !PackageTreeSelection methodsFor: 'comparing' stamp: 'EstebanLorenzano 10/16/2013 13:19'! = other self class = other class ifFalse: [ ^ false ]. self item = other item ifFalse: [ ^ false ]. ^ true! ! !PackageTreeSelection methodsFor: 'converting' stamp: 'EstebanLorenzano 10/10/2013 16:00'! asNautilusSelection ^ self! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 14:17'! definedClasses ^ self subclassResponsibility! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 14:21'! extendedClasses ^ #()! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/3/2013 15:34'! extensionClasses ^ #()! ! !PackageTreeSelection methodsFor: 'comparing' stamp: 'EstebanLorenzano 10/16/2013 13:19'! hash ^ self class hash bitXor: self item hash! ! !PackageTreeSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/3/2013 14:42'! includesClass: aClass ^ self subclassResponsibility! ! !PackageTreeSelection methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/14/2013 13:13'! initializeNode: aNode self initialize. node := aNode. ! ! !PackageTreeSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 10/3/2013 16:09'! isGroup ^ false! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:14'! item ^ self node item.! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 12:56'! menu: aMenu shifted: aBoolean target: aTarget ^ self subclassResponsibility! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:23'! name ^ self item name! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/14/2013 13:13'! node ^ node! ! !PackageTreeSelection methodsFor: 'converting' stamp: 'EstebanLorenzano 10/14/2013 14:43'! nodePath ^ self node path! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/9/2013 12:52'! registerSelectionTarget: aTarget self subclassResponsibility! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 16:47'! removeTarget: target self subclassResponsibility.! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:01'! renameTarget: target ! ! !RPackageTag commentStamp: '' prior: 74334481! I'm a class tag for an RPackage. Class tags can be any kind of metadata the user needs, but they are for now equivallent to class categories. ! !RPackageTag class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/10/2013 15:55'! new self error: 'Use #package:name:'! ! !RPackageTag class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/10/2013 15:55'! package: aPackage name: aString ^ self basicNew initializePackage: aPackage name: aString; yourself! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:11'! addClass: aClass ^ self addClassNamed: aClass name.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:11'! addClassNamed: aSymbol ^ classNames add: aSymbol.! ! !RPackageTag methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 10/14/2013 13:23'! asNautilusSelection ^ PackageTreeTagSelection tag: self! ! !RPackageTag methodsFor: 'private ' stamp: 'EstebanLorenzano 10/16/2013 15:36'! basicRenameTo: aString name := aString.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:11'! classNames ^ classNames! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:12'! classes ^ self classNames collect: [ :each | self class environment at: each ]! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 10/16/2013 16:17'! hasClass: aClass ^ self hasClassNamed: aClass name! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 10/16/2013 16:18'! hasClassNamed: aSymbol ^ self classNames includes: aSymbol! ! !RPackageTag methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/10/2013 14:10'! initialize super initialize. classNames := Set new.! ! !RPackageTag methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/10/2013 15:54'! initializePackage: aPackage name: aString package := aPackage. name := aString. self initialize.! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 10/16/2013 16:34'! isEmpty ^ self classNames isEmpty! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 13:51'! name ^ name! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:11'! nameWthoutPackagePrefix ^ self name = self packageName ifTrue: [ '' ] ifFalse: [ self name allButFirst: self packageName size + 1 "the extra is for the -" ]! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 16:06'! package ^ package! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:08'! packageName ^ self package name! ! !RPackageTag methodsFor: 'printing' stamp: 'EstebanLorenzano 10/10/2013 14:35'! printOn: aStream aStream nextPutAll: self name.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:11'! removeClass: aClass ^ self removeClassNamed: aClass name.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/10/2013 14:11'! removeClassNamed: aSymbol ^ classNames remove: aSymbol ifAbsent: [].! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 16:04'! renameTo: aString | oldName | self name = aString ifTrue: [ ^ self ]. oldName := self name. self basicRenameTo: aString. SystemAnnouncer uniqueInstance suspendAllWhile: [ self class environment organization renameCategory: oldName toBe: aString ].! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/16/2013 15:25'! renameWithPackagePrefixTo: aString self renameTo: (self packageName, '-', aString).! ! RPackageOrganizer removeSelector: #systemClassReorganizedActionFromBis:! RPackageOrganizer class removeSelector: #registerDefault! RPackageOrganizer class removeSelector: #fillUpFromMC! "ClassOrganizer-Core"! "GroupManager"! "Monticello"! "Nautilus"! "NautilusRefactoring"! "RPackage-Core"! "RPackage-SystemIntegration"! "Tools"! ----End fileIn----! ----QUIT----an Array(17 October 2013 12:07:47 pm) Pharo.image priorSource: 23989178! ----STARTUP----an Array(17 October 2013 12:13:39 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 12:13:39 pm) Pharo-30495.image priorSource: 24080189! ----STARTUP----an Array(17 October 2013 5:32:22 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/17/2013 17:20' prior: 74321138! commentForCurrentUpdate ^ '11917 add setting to choose IconSet https://pharo.fogbugz.com/f/cases/11917 11918 division by zero when creating a new method https://pharo.fogbugz.com/f/cases/11918 11919 unload more metacello tests https://pharo.fogbugz.com/f/cases/11919 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/17/2013 17:20'! script151 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.155.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-EstebanLorenzano.959.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.182.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.18.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/17/2013 17:20'! update30496 "self new update30496" self withUpdateLog: '11917 add setting to choose IconSet https://pharo.fogbugz.com/f/cases/11917 11918 division by zero when creating a new method https://pharo.fogbugz.com/f/cases/11918 11919 unload more metacello tests https://pharo.fogbugz.com/f/cases/11919 '. self loadTogether: self script151 merge: false. ScriptLoader new unloadPackageNamed: 'Metacello-TestsReference'. ScriptLoader new unloadPackageNamed: 'Metacello-TestsProfStef'. self flushCaches. ! ! "ScriptLoader30"! !IconSetChanged commentStamp: '' prior: 0! I'm announced when an IconSet has been changed. ! !UITheme methodsFor: 'initialization' stamp: 'EstebanLorenzano 10/17/2013 13:22' prior: 48939327! initialize "Initialize the receiver." super initialize. self initializeForms; settings: self defaultSettings.! ! !NautilusUI methodsFor: 'widget - method' stamp: 'EstebanLorenzano 10/17/2013 16:08' prior: 67512585! highlightCategory: aMethod methodWidget resetMethodCache. aMethod ifNotNil: [ | category index | category := aMethod protocol. category = self selectedCategory ifFalse:[ index := self getCategories indexOf: ( category ). index > 0 ifTrue: [ categoryWidget searchedElement: index] ] ]! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/17/2013 13:28'! allIconSetClasses "Answer the subclasses of the receiver that are considered to be concrete (useable as a theme)." ^(self allSubclasses reject: #isAbstract) asSortedCollection: [:a :b | a iconSetName <= b iconSetName]! ! !ThemeIcons class methodsFor: 'instance creation' stamp: 'EstebanLorenzano 10/17/2013 13:52' prior: 37397466! current: aThemeIcons current := aThemeIcons. "Polymorph depends on Morphic, so coupling with WorldState is ok, the problem is with other tools (like Nautilus), that may need to refresh its icon caches" World resetWorldMenu. SystemAnnouncer uniqueInstance announce: IconSetChanged! ! !ThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/17/2013 16:27'! iconSetName ^ nil! ! !ThemeIcons class methodsFor: 'testing' stamp: 'EstebanLorenzano 10/17/2013 13:29'! isAbstract ^ true! ! !ThemeIcons class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/17/2013 14:05'! settingsOn: aBuilder (aBuilder pickOne: #uiIconClass) parent: #appearance; label: 'Icon Set' translated; target: self; order: 2; domainValues: self uiIconSetChoises! ! !ThemeIcons class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/17/2013 13:36'! uiIconClass ^ self current class! ! !ThemeIcons class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/17/2013 13:36'! uiIconClass: aClass self current: aClass new.! ! !ThemeIcons class methodsFor: 'settings' stamp: 'EstebanLorenzano 10/17/2013 13:35'! uiIconSetChoises ^ ThemeIcons allIconSetClasses collect: [:c | c iconSetName -> c]! ! !IconSetChanged commentStamp: '' prior: 74424261! I'm announced when an IconSet has been changed. ! !PharoUIThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/17/2013 13:33'! iconSetName ^ 'FamFamFam'! ! !PharoUIThemeIcons class methodsFor: 'testing' stamp: 'EstebanLorenzano 10/17/2013 13:34'! isAbstract ^ self ~= PharoUIThemeIcons! ! !EclipseUIThemeIcons class methodsFor: 'accessing' stamp: 'EstebanLorenzano 10/17/2013 13:33'! iconSetName ^ 'Eclipse'! ! !EclipseUIThemeIcons class methodsFor: 'testing' stamp: 'EstebanLorenzano 10/17/2013 13:34'! isAbstract ^ self ~= EclipseUIThemeIcons! ! !AbstractNautilusUI class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/17/2013 13:55' prior: 37879643! initialize " self initialize " ClassesIconsCache := WeakIdentityKeyDictionary new. GroupsIconsCache := WeakIdentityKeyDictionary new. PackagesIconsCache := WeakIdentityKeyDictionary new. NextFocusKey := Character arrowRight. PreviousFocusKey := Character arrowLeft. self registerSystemAnnouncements.! ! !AbstractNautilusUI class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 10/17/2013 13:55'! registerSystemAnnouncements SystemAnnouncer uniqueInstance unsubscribe: self. SystemAnnouncer uniqueInstance weak when: IconSetChanged send: #resetIconCaches to: self! ! "Nautilus"! "Polymorph-Widgets"! MetacelloReferenceTestCase removeSelector: #testReferenceConfigPrintString! MetacelloReferenceTestCase removeSelector: #testReferenceConfig! MetacelloReferenceTestCase removeSelector: #expectedPrintString! MetacelloReferenceTestCase removeSelector: #conditionResult:! Smalltalk globals removeClassNamed: #MetacelloReferenceTestCase! MetacelloInsideToolBoxTutorialTests removeSelector: #testExamples! MetacelloInsideToolBoxTutorialTests removeSelector: #tearDown! MetacelloInsideToolBoxTutorialTests removeSelector: #setUp! MetacelloInsideToolBoxTutorialTests class removeSelector: #example7! MetacelloInsideToolBoxTutorialTests class removeSelector: #example6! MetacelloInsideToolBoxTutorialTests class removeSelector: #example5! MetacelloInsideToolBoxTutorialTests class removeSelector: #example4! MetacelloInsideToolBoxTutorialTests class removeSelector: #example3! MetacelloInsideToolBoxTutorialTests class removeSelector: #example2! MetacelloInsideToolBoxTutorialTests class removeSelector: #example1! MetacelloInsideToolBoxTutorialTests class removeSelector: #EXAMPLE! Smalltalk globals removeClassNamed: #MetacelloInsideToolBoxTutorialTests! ----End fileIn----! ----QUIT----an Array(17 October 2013 5:32:31 pm) Pharo.image priorSource: 24080396! ----STARTUP----an Array(17 October 2013 5:37:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 5:37:52 pm) Pharo-30496.image priorSource: 24097528! ----STARTUP----an Array(17 October 2013 7:00:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/17/2013 18:56' prior: 74412356! commentForCurrentUpdate ^ '11916 openWithDialogWindow is broken https://pharo.fogbugz.com/f/cases/11916 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/17/2013 18:56'! script152 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.155.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-EstebanLorenzano.959.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/17/2013 18:56'! update30497 "self new update30497" self withUpdateLog: '11916 openWithDialogWindow is broken https://pharo.fogbugz.com/f/cases/11916 '. self loadTogether: self script152 merge: false. StandardFonts setFontsToSmall. self flushCaches. ! ! "ScriptLoader30"! !MorphicDialogWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/17/2013 11:47' prior: 69679109! defaultSpec ^ #( SpecDialogWindow specWidget: #(model contentMorph) initialize model: model )! ! !MorphicDialogWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 11:53'! open self widget openInWorld! ! !OkCancelToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/17/2013 11:58' prior: 37103977! defaultSpec ^ SpecLayout composed add: #okButton origin: 1@0 corner: 1@1 offsetOrigin: (2*(self buttonWidth negated))@0 offsetCorner: (self buttonWidth negated)@0; add: #cancelButton origin: 1@0 corner: 1@1 offsetOrigin: (self buttonWidth negated)@0 offsetCorner: 0@0; send: #vShrinkWrap; yourself! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 11:56' prior: 69409393! newButtonRow ^ self toolbar buildWithSpec" vResizing: #shrinkWrap; yourself"! ! !OkToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 10/17/2013 11:58' prior: 37106038! defaultSpec ^ SpecLayout composed add: #okButton origin: 1@0 corner: 1@1 offsetOrigin: (self buttonWidth negated)@0 offsetCorner: 0@0; send: #vShrinkWrap; yourself! ! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----an Array(17 October 2013 7:00:38 pm) Pharo.image priorSource: 24097733! ----STARTUP----an Array(17 October 2013 7:06:07 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 7:06:07 pm) Pharo-30497.image priorSource: 24110793! ----STARTUP----an Array(17 October 2013 8:41:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/17/2013 20:33' prior: 74429692! commentForCurrentUpdate ^ '11901 introduce Morphic-Core package https://pharo.fogbugz.com/f/cases/11901 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/17/2013 20:33'! script153 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.158.mcz Morphic-Core-EstebanLorenzano.5.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-EstebanLorenzano.959.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.644.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/17/2013 20:33'! update30498 "self new update30498" self withUpdateLog: '11901 introduce Morphic-Core package https://pharo.fogbugz.com/f/cases/11901 '. self loadTogether: self script153 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphAnnouncement commentStamp: '' prior: 42445680! I am an abstract announcement for morphic events. I carry the morph where the event has ocurred. My subclasses should add information for more precise events.! !MorphChanged commentStamp: '' prior: 46286330! I am raised when a morph property changed, and should be propagated to dependents! !MorphChangedWithArguments commentStamp: '' prior: 46286722! I am an announcement raised when a Morph changed and need to propagate the information to dependents. In addition, I also propagate a value! !MorphDeleted commentStamp: '' prior: 42445842! I'm an announcement raised when a morph is deleted. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is deleted, all it's children also get deleted and they raise a similar announcement.! !MorphGotFocus commentStamp: '' prior: 42447737! I'm an announcement raised when a morph gets keyboard focus. ! !MorphLostFocus commentStamp: '' prior: 42447800! I'm an announcement raised when a morph losts keyboard focus.! !MorphOpened commentStamp: '' prior: 42447863! I'm an announcement raised when a morph is opened. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is opened, all it's children also get opened and they raise a similar announcement.! !BorderStyle commentStamp: 'kfr 10/27/2003 10:19' prior: 42142511! See BorderedMorph BorderedMorh new borderStyle: (BorderStyle inset width: 2); openInWorld.! !Canvas commentStamp: '' prior: 42152795! A canvas is a two-dimensional medium on which morphs are drawn in a device-independent manner. Canvases keep track of the origin and clipping rectangle, as well as the underlying drawing medium (such as a window, pixmap, or postscript script). Subclasses must implement (at least) the following methods: * Drawing: #fillOval:color:borderWidth:borderColor: #frameAndFillRectangle:fillColor:borderWidth:borderColor: #drawPolygon:color:borderWidth:borderColor: #image:at:sourceRect:rule: #stencil:at:sourceRect:rule: #line:to:width:color: #paragraph:bounds:color: #text:bounds:font:color: * Support #clipBy:during: #translateBy:during: #translateBy:clippingTo:during: #transformBy:clippingTo:during: ! !ColorMappingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 42189147! I'm an abstract class which introduce a filter between a drawing request and the final output, handled by #mapColor: For each potential pixel operation like: source -> op -> output it introducing a color mapping stage: source -> op -> mapping -> output Then #mapColor: can be redefined in subclasses to implement more specific behavior. For example: - ShadowDrawingCanvas will replace the rendered color with the color of shadow (if not transparent). - AlphaBlendingCanvas will add or intensify alpha of rendered color. For an easy to understand example see #drawPolygon:color:borderWidth:borderColor:! !ShadowDrawingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 42675264! see ColorMappingCanvas comment.! !FormCanvas commentStamp: '' prior: 67628637! Note that when shadowDrawing is true, shadowStipple may be either a color, for a solid shadow of the given color, or it may be a stipple used to simulate gray shading when the display cannot support alpha blending.! !Morph commentStamp: 'efc 2/26/2003 20:01' prior: 42444019! A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30. Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method. The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain. My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly. Structure: instance var Type Description bounds Rectangle A Rectangle indicating my position and a size that will enclose me. owner Morph My parent Morph, or nil for the top-level Morph, which is a or nil world, typically a PasteUpMorph. submorphs Array My child Morphs. fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs. color Color My primary color. Subclasses can use this in different ways. extension MorphExtension Allows extra properties to be stored without adding a or nil storage burden to all morphs. By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning. Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.! !BorderedMorph commentStamp: 'kfr 10/27/2003 11:17' prior: 42142604! BorderedMorph introduce borders to morph. Borders have the instanceVariables borderWidth and borderColor. BorderedMorph new borderColor: Color red; borderWidth: 10; openInWorld. BorderedMorph also have a varaity of border styles: simple, inset, raised, complexAltFramed, complexAltInset, complexAltRaised, complexFramed, complexInset, complexRaised. These styles are set using the classes BorderStyle, SimpleBorder, RaisedBorder, InsetBorder and ComplexBorder. BorderedMorph new borderStyle: (SimpleBorder width: 1 color: Color white); openInWorld. BorderedMorph new borderStyle: (BorderStyle inset width: 2); openInWorld. ! !PasteUpMorph commentStamp: '' prior: 42849043! A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph. Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided. ! !WorldMorph commentStamp: '' prior: 42792822! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld.! !MorphExtension commentStamp: '' prior: 42446310! MorphExtension provides access to extra instance state that is not required in most simple morphs. This allows simple morphs to remain relatively lightweight while still admitting more complex structures as necessary. The otherProperties field takes this policy to the extreme of allowing any number of additional named attributes, albeit at a certain cost in speed and space.! !MorphicEvent commentStamp: '' prior: 42455825! This class represents the base for all events. Instance variables: stamp The millisecond clock time stamp (based on Time millisecondClock) source If non-nil the hand that generated the event.! !DropEvent commentStamp: 'LaurentLaffont 3/15/2011 20:47' prior: 42238325! I model the event produced when a hand drops a (grabbed) morph into another morph. I know the position of the drop, the dropped morph and the hand that produced me. To handle this event a morph should override one of these methods: #acceptDroppingMorph:event: #justDroppedInto:event: Additionaly, a morph can specify if it wants to accept a dropped morph by overriding #wantsDroppedMorph:event:. Symmetrically, the morph being dropped can specify if it wants to be dropped in another morph by overriding #wantsToBeDroppedInto:. Note that for a successful drop operation both parties need to agree. See HandMorph>>dropMorph:event: for an example of usage. ! !MorphicEventDispatcher commentStamp: '' prior: 42456044! The class represents a strategy for dispatching events to some immediate child of a morph. It is used by morphs to delegate the somewhat complex action of dispatching events accurately. ! !WorldState commentStamp: 'ls 7/10/2003 19:30' prior: 42793018! The state of a Morphic world. (This needs some serious commenting!!!!) The MinCycleLapse variable holds the minimum amount of time that a morphic cycle is allowed to take. If a cycle takes less than this, then interCyclePause: will wait until the full time has been used up.! !HandMorph commentStamp: '' prior: 42328414! The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging. There is some minimal support for multiple hands in the same world.! !KeyboardEvent commentStamp: '' prior: 42372217! I am a keyboard event. I contain the char code of the event pressed, the modifiers pressed, and the keycode of the key pressed.! !MouseWheelEvent commentStamp: 'gvc 9/23/2008 11:46' prior: 42459231! A mouse event generated by intercepting the keyboard events (ctrl+up/down arrow) generated by the VM in response to mouse wheel activity.! !MorphAnnouncement commentStamp: '' prior: 74454452! I am an abstract announcement for morphic events. I carry the morph where the event has ocurred. My subclasses should add information for more precise events.! !MorphAnnouncement class methodsFor: 'instance creation' stamp: 'GuillermoPolito 5/1/2012 19:48' prior: 26851820! morph: aMorph ^self new morph: aMorph; yourself! ! !MorphAnnouncement methodsFor: 'accessing' stamp: 'GuillermoPolito 5/1/2012 19:47' prior: 26851468! morph ^ morph! ! !MorphAnnouncement methodsFor: 'accessing' stamp: 'GuillermoPolito 5/1/2012 19:47' prior: 26851571! morph: anObject morph := anObject! ! !MorphChanged commentStamp: '' prior: 74454674! I am raised when a morph property changed, and should be propagated to dependents! !MorphChanged methodsFor: 'delivering' stamp: 'IgorStasenko 8/27/2013 16:27' prior: 49423652! deliverTo: aHandler ^ aHandler update: selector ! ! !MorphChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 15:05' prior: 46286497! selector ^ selector! ! !MorphChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/22/2013 15:05' prior: 46286605! selector: anObject selector := anObject! ! !MorphChangedWithArguments commentStamp: '' prior: 74454830! I am an announcement raised when a Morph changed and need to propagate the information to dependents. In addition, I also propagate a value! !MorphChangedWithArguments methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/23/2013 12:32' prior: 46286960! arguments ^ arguments! ! !MorphChangedWithArguments methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/23/2013 12:32' prior: 46287083! arguments: anObject arguments := anObject! ! !MorphChangedWithArguments methodsFor: 'delivering' stamp: 'IgorStasenko 8/27/2013 16:28' prior: 49432755! deliverTo: aHandler ^ aHandler update: selector with: arguments ! ! !MorphDeleted commentStamp: '' prior: 74455031! I'm an announcement raised when a morph is deleted. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is deleted, all it's children also get deleted and they raise a similar announcement.! !MorphGotFocus commentStamp: '' prior: 74455338! I'm an announcement raised when a morph gets keyboard focus. ! !MorphLostFocus commentStamp: '' prior: 74455463! I'm an announcement raised when a morph losts keyboard focus.! !MorphOpened commentStamp: '' prior: 74455585! I'm an announcement raised when a morph is opened. Subscribe to me when you want to do things after the morph is opened. Take into account that when a morph is opened, all it's children also get opened and they raise a similar announcement.! !BorderStyle commentStamp: 'kfr 10/27/2003 10:19' prior: 74455896! See BorderedMorph BorderedMorh new borderStyle: (BorderStyle inset width: 2); openInWorld.! !BorderStyle class methodsFor: 'instance creation' stamp: 'sw 11/26/2001 16:05' prior: 18374662! borderStyleChoices "Answer the superset of all supported borderStyle symbols" ^ #(simple inset raised complexAltFramed complexAltInset complexAltRaised complexFramed complexInset complexRaised)! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'MarcusDenker 7/18/2010 15:43' prior: 18374953! borderStyleForSymbol: sym "Answer a border style corresponding to the given symbol" | aSymbol | aSymbol := sym == #none ifTrue: [#simple] ifFalse: [sym]. ^ self perform: aSymbol! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 8/25/2001 23:52' prior: 18375220! color: aColor width: aNumber ^self width: aNumber color: aColor! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:01' prior: 18375370! complexAltFramed ^ComplexBorder style: #complexAltFramed! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:01' prior: 18375513! complexAltInset ^ComplexBorder style: #complexAltInset! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:00' prior: 18375654! complexAltRaised ^ComplexBorder style: #complexAltRaised! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:00' prior: 18375797! complexFramed ^ComplexBorder style: #complexFramed! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:00' prior: 18375934! complexInset ^ComplexBorder style: #complexInset! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 15:00' prior: 18376069! complexRaised ^ComplexBorder style: #complexRaised! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 8/25/2001 17:26' prior: 18376205! default ^Default ifNil:[Default := self new]! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 14:59' prior: 18376336! inset ^InsetBorder new! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 11/26/2001 14:59' prior: 18376445! raised ^RaisedBorder new! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'sw 11/27/2001 15:22' prior: 18376556! simple "Answer a simple border style" ^ SimpleBorder new! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'rr 6/21/2005 13:50' prior: 18376700! thinGray ^ self width: 1 color: Color gray! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 8/25/2001 16:19' prior: 18376828! width: aNumber ^self width: aNumber color: Color black! ! !BorderStyle class methodsFor: 'instance creation' stamp: 'ar 8/25/2001 16:19' prior: 18376968! width: aNumber color: aColor ^SimpleBorder new color: aColor; width: aNumber; yourself! ! !BorderStyle methodsFor: 'comparing' stamp: 'ar 8/25/2001 18:38' prior: 18371733! = aBorderStyle ^self species = aBorderStyle species and:[self style == aBorderStyle style and:[self width = aBorderStyle width and:[self color = aBorderStyle color]]].! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 18:15' prior: 18370434! baseColor ^Color transparent! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 18:15' prior: 18370534! baseColor: aColor "Ignored"! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:07' prior: 18370633! color ^Color transparent! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:07' prior: 18370729! color: aColor "Ignored"! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 11/26/2001 15:22' prior: 18370825! colorsAtCorners ^Array new: 4 withAll: self color! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:07' prior: 18370946! dotOfSize: diameter forDirection: aDirection | form | form := Form extent: diameter@diameter depth: Display depth. form getCanvas fillOval: form boundingBox color: self color. ^form! ! !BorderStyle methodsFor: 'drawing' stamp: 'ar 8/25/2001 17:01' prior: 18372171! drawLineFrom: startPoint to: stopPoint on: aCanvas ^aCanvas line: startPoint to: stopPoint width: self width color: self color! ! !BorderStyle methodsFor: 'drawing' stamp: 'ar 8/25/2001 16:24' prior: 18372367! frameOval: aRectangle on: aCanvas "Frame the given rectangle on aCanvas" aCanvas frameOval: aRectangle width: self width color: self color! ! !BorderStyle methodsFor: 'drawing' stamp: 'ar 8/25/2001 16:57' prior: 18372576! framePolygon: vertices on: aCanvas "Frame the given rectangle on aCanvas" self framePolyline: vertices on: aCanvas. self drawLineFrom: vertices last to: vertices first on: aCanvas.! ! !BorderStyle methodsFor: 'drawing' stamp: 'dgd 2/21/2003 22:59' prior: 18372829! framePolyline: vertices on: aCanvas "Frame the given rectangle on aCanvas" | prev next | prev := vertices first. 2 to: vertices size do: [:i | next := vertices at: i. self drawLineFrom: prev to: next on: aCanvas. prev := next]! ! !BorderStyle methodsFor: 'drawing' stamp: 'ar 8/25/2001 16:24' prior: 18373159! frameRectangle: aRectangle on: aCanvas "Frame the given rectangle on aCanvas" aCanvas frameRectangle: aRectangle width: self width color: self color! ! !BorderStyle methodsFor: 'testing' stamp: 'gvc 6/25/2008 12:09' prior: 18374005! hasFillStyle "Answer false." ^false! ! !BorderStyle methodsFor: 'comparing' stamp: 'ar 8/25/2001 16:08' prior: 18371978! hash "hash is implemented because #= is implemented" ^self species hash bitXor: (self width hash bitXor: self color hash)! ! !BorderStyle methodsFor: 'testing' stamp: 'ar 8/25/2001 16:08' prior: 18374112! isBorderStyle ^true! ! !BorderStyle methodsFor: 'testing' stamp: 'ar 8/26/2001 19:30' prior: 18374201! isComplex ^false! ! !BorderStyle methodsFor: 'testing' stamp: 'gvc 3/14/2007 10:31' prior: 18374288! isComposite "Answer false." ^false! ! !BorderStyle methodsFor: 'printing' stamp: 'gvc 2/25/2009 15:35' prior: 18373511! printOn: aStream "Print a description of the receiver on the given stream." self storeOn: aStream! ! !BorderStyle methodsFor: 'initialize' stamp: 'ar 8/25/2001 16:06' prior: 18373382! releaseCachedState "Release any associated cached state"! ! !BorderStyle methodsFor: 'printing' stamp: 'gvc 2/25/2009 15:34' prior: 18373683! storeOn: aStream "Store a reconstructable representation of the receiver on the given stream." aStream nextPutAll: '(' , self class name; nextPutAll: ' width: '; print: self width; nextPutAll: ' color: '; print: self color; nextPutAll: ')'! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 17:51' prior: 18371202! style ^#none! ! !BorderStyle methodsFor: 'color tracking' stamp: 'ar 8/25/2001 17:29' prior: 18371568! trackColorFrom: aMorph "If necessary, update our color to reflect a change in aMorphs color"! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:07' prior: 18371286! width ^0! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:07' prior: 18371366! width: aNumber "Ignored"! ! !BorderStyle methodsFor: 'accessing' stamp: 'ar 8/25/2001 16:08' prior: 18371462! widthForRounding ^self width! ! !Canvas commentStamp: '' prior: 74456043! A canvas is a two-dimensional medium on which morphs are drawn in a device-independent manner. Canvases keep track of the origin and clipping rectangle, as well as the underlying drawing medium (such as a window, pixmap, or postscript script). Subclasses must implement (at least) the following methods: * Drawing: #fillOval:color:borderWidth:borderColor: #frameAndFillRectangle:fillColor:borderWidth:borderColor: #drawPolygon:color:borderWidth:borderColor: #image:at:sourceRect:rule: #stencil:at:sourceRect:rule: #line:to:width:color: #paragraph:bounds:color: #text:bounds:font:color: * Support #clipBy:during: #translateBy:during: #translateBy:clippingTo:during: #transformBy:clippingTo:during: ! !Canvas methodsFor: 'converting' stamp: 'ar 8/8/2001 14:22' prior: 18675939! asAlphaBlendingCanvas: alpha ^(AlphaBlendingCanvas on: self) alpha: alpha! ! !Canvas methodsFor: 'converting' stamp: 'ar 6/24/1999 17:46' prior: 18676080! asShadowDrawingCanvas ^self asShadowDrawingCanvas: (Color black alpha: 0.5).! ! !Canvas methodsFor: 'converting' stamp: 'ar 8/8/2001 14:14' prior: 18676223! asShadowDrawingCanvas: aColor ^(ShadowDrawingCanvas on: self) shadowColor: aColor! ! !Canvas methodsFor: 'drawing-support' stamp: 'gm 2/22/2003 14:53' prior: 18694801! cache: aRectangle using: aCache during: aBlock "Cache the execution of aBlock by the given cache. Note: At some point we may want to actually *create* the cache here; for now we're only using it." (aCache notNil and: [(aCache isForm) and: [aCache extent = aRectangle extent]]) ifTrue: [^self paintImage: aCache at: aRectangle origin]. aBlock value: self! ! !Canvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 02:53' prior: 18695241! clipBy: aRectangle during: aBlock "Set a clipping rectangle active only during the execution of aBlock. Note: In the future we may want to have more general clip shapes - not just rectangles" ^self subclassResponsibility! ! !Canvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 14:07' prior: 18674620! clipRect "Return the currently active clipping rectangle" ^self subclassResponsibility! ! !Canvas methodsFor: 'accessing' stamp: 'ar 2/12/2000 18:17' prior: 18674774! contentsOfArea: aRectangle "Return the contents of the given area" ^self contentsOfArea: aRectangle into: (Form extent: aRectangle extent depth: self depth)! ! !Canvas methodsFor: 'accessing' stamp: 'ar 2/12/2000 18:17' prior: 18674998! contentsOfArea: aRectangle into: aForm "Return the contents of the given area" ^self subclassResponsibility! ! !Canvas methodsFor: 'copying' stamp: 'ls 3/20/2000 21:24' prior: 18676370! copyClipRect: newClipRect ^ ClippingCanvas canvas: self clipRect: newClipRect ! ! !Canvas methodsFor: 'accessing' stamp: '' prior: 18675145! depth ^ Display depth ! ! !Canvas methodsFor: 'testing' stamp: 'di 8/12/2000 15:04' prior: 18700343! doesRoundedCorners ^ true! ! !Canvas methodsFor: 'drawing-general' stamp: 'ar 5/29/1999 05:14' prior: 18682543! draw: anObject ^anObject drawOn: self! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 2/16/2000 23:45' prior: 18684040! drawImage: aForm at: aPoint "Draw the given Form, which is assumed to be a Form or ColorForm" self drawImage: aForm at: aPoint sourceRect: aForm boundingBox! ! !Canvas methodsFor: 'drawing-images' stamp: 'IgorStasenko 7/18/2011 18:08' prior: 18684284! drawImage: aForm at: aPoint sourceRect: sourceRect "Draw the given form." ^self image: aForm at: aPoint sourceRect: sourceRect rule: Form over! ! !Canvas methodsFor: 'drawing-general' stamp: 'StephaneDucasse 2/8/2011 09:10' prior: 18682665! drawMorph: aMorph "Draw the receiver morph on the receiver" "Changed to improve performance. Have seen a 30% improvement." (aMorph fullBounds intersects: self clipRect) ifFalse: [^self]. self draw: aMorph! ! !Canvas methodsFor: 'drawing-polygons' stamp: 'ar 6/18/1999 08:56' prior: 18688473! drawPolygon: vertices color: aColor borderWidth: bw borderColor: bc "Draw the given polygon." ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-polygons' stamp: 'ar 6/25/1999 12:18' prior: 18688670! drawPolygon: vertices fillStyle: aFillStyle "Fill the given polygon." self drawPolygon: vertices fillStyle: aFillStyle borderWidth: 0 borderColor: Color transparent! ! !Canvas methodsFor: 'drawing-polygons' stamp: 'ar 6/18/1999 08:58' prior: 18688909! drawPolygon: vertices fillStyle: aFillStyle borderWidth: bw borderColor: bc "Fill the given polygon. Note: The default implementation does not recognize any enhanced fill styles" self drawPolygon: vertices color: aFillStyle asColor borderWidth: bw borderColor: bc! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/30/2001 20:35' prior: 18697261! drawString: s at: pt ^ self drawString: s from: 1 to: s size at: pt font: nil color: Color black! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/31/2001 02:25' prior: 18697429! drawString: s at: pt font: aFont color: aColor ^ self drawString: s from: 1 to: s size at: pt font: aFont color: aColor! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/30/2001 20:36' prior: 18697620! drawString: s from: firstIndex to: lastIndex at: pt font: font color: aColor self drawString: s from: firstIndex to: lastIndex in: (pt extent: 10000@10000) font: font color: aColor! ! !Canvas methodsFor: 'drawing-text' stamp: 'tween 3/10/2009 08:07' prior: 18697873! drawString: s from: firstIndex to: lastIndex at: pt font: font color: aColor underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc self drawString: s from: firstIndex to: lastIndex in: (pt extent: 10000@10000) font: font color: aColor underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/30/2001 20:37' prior: 18698308! drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: c ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-text' stamp: 'tween 3/10/2009 07:42' prior: 18698494! drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: c underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/31/2001 02:39' prior: 18698770! drawString: s in: boundsRect ^self drawString: s from: 1 to: s size in: boundsRect font: nil color: Color black! ! !Canvas methodsFor: 'drawing-text' stamp: 'ar 12/31/2001 02:13' prior: 18698952! drawString: s in: boundsRect font: fontOrNil color: c ^self drawString: s from: 1 to: s size in: boundsRect font: fontOrNil color: c! ! !Canvas methodsFor: 'drawing-text' stamp: 'tween 3/10/2009 08:12' prior: 18699157! drawString: s in: boundsRect font: fontOrNil color: c underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc ^self drawString: s from: 1 to: s size in: boundsRect font: fontOrNil color: c underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc! ! !Canvas methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 5/4/2012 16:47' prior: 18676531! encryptedParagraph: para bounds: bounds color: c "Draw the given paragraph" ^self subclassResponsibility! ! !Canvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 14:15' prior: 18675235! extent "Return the physical extent of the output device" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing' stamp: 'ar 6/17/1999 01:18' prior: 18676701! fillColor: aColor "Fill the receiver with the given color. Note: This method should be named differently since it is intended to fill the background and thus fills even if the color is transparent" ^self fillRectangle: self clipRect color: (aColor alpha: 1.0).! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:45' prior: 18687203! fillOval: r color: c self fillOval: r color: c borderWidth: 0 borderColor: Color transparent. ! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:45' prior: 18687369! fillOval: r color: c borderWidth: borderWidth borderColor: borderColor "Fill the given oval." ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:51' prior: 18687563! fillOval: aRectangle fillStyle: aFillStyle "Fill the given oval." ^self fillOval: aRectangle fillStyle: aFillStyle borderWidth: 0 borderColor: Color transparent! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:50' prior: 18687795! fillOval: aRectangle fillStyle: aFillStyle borderWidth: bw borderColor: bc "Fill the given oval. Note: The default implementation does not recognize any enhanced fill styles" self fillOval: aRectangle color: aFillStyle asColor borderWidth: bw borderColor: bc! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'gvc 3/21/2008 16:34' prior: 18689252! fillRectangle: aRectangle basicFillStyle: aFillStyle "Fill the given rectangle with the given, non-composite, fill style Note: The default implementation does not recognize any enhanced fill styles." self fillRectangle: aRectangle color: aFillStyle asColor.! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'ar 6/18/1999 07:32' prior: 18689589! fillRectangle: r color: c "Fill the rectangle using the given color" ^self frameAndFillRectangle: r fillColor: c borderWidth: 0 borderColor: Color transparent! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'StephaneDucasse 2/9/2011 14:36' prior: 18689845! fillRectangle: aRectangle fillStyle: aFillStyle "Fill the given rectangle. Double-dispatched via the fill style." aFillStyle fillRectangle: aRectangle on: self! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'AlexandreBergel 1/29/2013 14:13' prior: 18690096! fillRectangle: aRectangle fillStyle: aFillStyle borderStyle: aBorderStyle "Fill the given rectangle." aFillStyle isTransparent ifFalse: [ self fillRectangle: (aRectangle insetBy: aBorderStyle width) fillStyle: aFillStyle ]. (aBorderStyle notNil and: [aBorderStyle width]) >= 0 ifTrue: [ aBorderStyle frameRectangle: aRectangle on: self ]. ! ! !Canvas methodsFor: 'initialization' stamp: 'ar 5/27/2000 21:50' prior: 18699546! finish "If there are any pending operations on the receiver complete them. Do not return before all modifications have taken effect." ^self flush! ! !Canvas methodsFor: 'initialization' stamp: 'ar 2/9/1999 06:29' prior: 18699763! flush! ! !Canvas methodsFor: 'other' stamp: 'StephaneDucasse 2/9/2011 14:51' prior: 18699990! flushDisplay "Empty hook method."! ! !Canvas methodsFor: 'other' stamp: 'StephaneDucasse 2/9/2011 14:51' prior: 18700098! forceToScreen: rect "Empty hook method" ! ! !Canvas methodsFor: 'accessing' stamp: 'jm 6/2/1998 06:39' prior: 18675387! form ^ Display ! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'ar 6/18/1999 07:32' prior: 18690555! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth borderColor: borderColor "Draw the rectangle using the given attributes" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'RAA 8/14/2000 14:22' prior: 18690805! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth topLeftColor: topLeftColor bottomRightColor: bottomRightColor "Draw the rectangle using the given attributes. Note: This is a *very* simple implementation" | bw pt | self frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth borderColor: bottomRightColor. bottomRightColor = topLeftColor ifFalse: [ bw := borderWidth asPoint. pt := r topLeft + (bw // 2). self line: pt to: pt + ((r extent x - bw x)@0) width: borderWidth color: topLeftColor. self line: pt to: pt + (0@(r extent y - bw y)) width: borderWidth color: topLeftColor. ].! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:45' prior: 18688126! frameOval: r color: c self fillOval: r color: Color transparent borderWidth: 1 borderColor: c. ! ! !Canvas methodsFor: 'drawing-ovals' stamp: 'ar 6/18/1999 08:45' prior: 18688293! frameOval: r width: w color: c self fillOval: r color: Color transparent borderWidth: w borderColor: c. ! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'ar 6/18/1999 07:33' prior: 18691519! frameRectangle: r color: c self frameRectangle: r width: 1 color: c. ! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'marcus.denker 8/15/2008 17:43' prior: 18691676! frameRectangle: r width: w color: c "Draw a frame around the given rectangle" ^self frameAndFillRectangle: r fillColor: Color transparent borderWidth: w borderColor: c! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'gvc 9/14/2006 14:33' prior: 18691930! frameRectangle: aRectangle width: width colors: colors dashes: dashes "Draw a rectangle with the given width, colors and dash lengths." self frameRectangle: aRectangle width: width colors: colors dashes: dashes offset: self origin! ! !Canvas methodsFor: 'drawing-rectangles' stamp: 'gvc 9/18/2006 16:52' prior: 18692249! frameRectangle: aRectangle width: width colors: colors dashes: dashes offset: offset "Draw a rectangle with the given width, colors and dash lengths. The offset specifies how the coordinate system is translated from the screen origin (infinite forms are 0@0 screen based)." |o s hf vf c r ds di d os l| width < 1 ifTrue: [^self]. dashes size < 2 ifTrue: [^self frameRectangle: aRectangle width: width color: colors first]. r := aRectangle. s := dashes sum * width. ds := dashes size. di := 1. d := (dashes at: di) * width. c := colors at: di. hf := Form extent: s @ 1 depth: 32. r height >= width ifTrue: [ o := r left + offset x \\ s. 0 to: s - 1 do: [:x | hf colorAt: x + o \\ s @ 0 put: c. d := d - 1. d = 0 ifTrue: [ di := di \\ ds + 1. d := (dashes at: di) * width. c := colors at: di]]. os := 0. l := r width truncateTo: width. self fillRectangle: (r topLeft + (os@0) extent: l@width) color: (InfiniteForm with: hf)]. vf := Form extent: 1 @ s depth: 32. r width >= width ifTrue: [ o := r top + offset y + width + (s - (r width \\ s)) \\ s. 0 to: s - 1 do: [:y | vf colorAt: 0 @ (y + o \\ s) put: c. d := d - 1. d = 0 ifTrue: [ di := di \\ ds + 1. d := (dashes at: di) * width. c := colors at: di]]. os := width - (r width \\ width). l := r height - os truncateTo: width. self fillRectangle: (r topRight + (width negated @ os) extent: width@l) color: (InfiniteForm with: vf)]. r height > width ifTrue: [ o := r right + offset x - (width * 2) + (r height \\ s) + (r width \\ s) \\ s. 0 to: s - 1 do: [:x | hf colorAt: o + s -1 - x \\ s @ 0 put: c. d := d - 1. d = 0 ifTrue: [ di := di \\ ds + 1. d := (dashes at: di) * width. c := colors at: di]]. os := width - (r width \\ width + (r height \\ width) \\ width). l := r width - os truncateTo: width. os := (r width - os) \\ width. self fillRectangle: (r bottomLeft + (os @ width negated) extent: l@width) color: (InfiniteForm with: hf)]. r width > width ifTrue: [ o := r top + offset y + (r height * 2 \\ s) + (r width * 2 \\ s) - (width * 3) \\ s. 0 to: s - 1 do: [:y | vf colorAt: 0 @ (o + s -1 - y \\ s) put: c. d := d - 1. d = 0 ifTrue: [ di := di \\ ds + 1. d := (dashes at: di) * width. c := colors at: di]]. l := r height - (2 * width) + os. os := width. self fillRectangle: (r topLeft + (0@os) extent: width@l) color: (InfiniteForm with: vf)]! ! !Canvas methodsFor: 'drawing-general' stamp: '' prior: 18682922! fullDraw: anObject ^anObject fullDrawOn: self! ! !Canvas methodsFor: 'drawing-general' stamp: 'StephaneDucasse 2/8/2011 09:30' prior: 18683052! fullDrawMorph: aMorph "Hook method for potential other canvases. In the core, this method looks supefluous but PostscriptCanvases and other canvases can specialized it for Morph rendering. Therefore it should not be merged with fullDraw:." self fullDraw: aMorph! ! !Canvas methodsFor: 'private' stamp: 'ar 2/12/2000 18:12' prior: 18701017! image: aForm at: aPoint sourceRect: sourceRect rule: rule "Note: The public use of this protocol is deprecated. It will become private. Nobody in the outside world must assume that a thing like a combination rule has any specific effect." ^self subclassResponsibility! ! !Canvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:21' prior: 18701349! image: aForm at: aPoint sourceRect: sourceRect rule: rule alpha: sourceAlpha "Privately used for blending forms w/ constant alpha. Fall back to simpler case by defaul." ^self image: aForm at: aPoint sourceRect: sourceRect rule: rule! ! !Canvas methodsFor: 'testing' stamp: 'ar 11/13/1998 13:19' prior: 18700436! isBalloonCanvas ^false! ! !Canvas methodsFor: 'testing' stamp: 'IgorStasenko 7/18/2011 18:53' prior: 18700533! isShadowDrawing ^false! ! !Canvas methodsFor: 'testing' stamp: 'ar 6/22/1999 14:10' prior: 18700620! isVisible: aRectangle "Return true if the given rectangle is (partially) visible" ^self clipRect intersects: aRectangle ! ! !Canvas methodsFor: 'drawing' stamp: 'jm 8/2/97 13:54' prior: 18677025! line: pt1 to: pt2 color: c self line: pt1 to: pt2 width: 1 color: c. ! ! !Canvas methodsFor: 'drawing' stamp: 'ar 6/17/1999 01:31' prior: 18677160! line: pt1 to: pt2 width: w color: c "Draw a line using the given width and color" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing' stamp: 'aoy 2/15/2003 21:41' prior: 18677337! line: pt1 to: pt2 width: width color: color1 dashLength: s1 secondColor: color2 secondDashLength: s2 startingOffset: startingOffset "Draw a line using the given width, colors and dash lengths. Originally written by Stephan Rudlof; tweaked by Dan Ingalls to use startingOffset for sliding offset as in 'ants' animations. Returns the sum of the starting offset and the length of this line." | dist deltaBig colors nextPhase segmentOffset phase segmentLength startPoint distDone endPoint segLens | dist := pt1 dist: pt2. dist = 0 ifTrue: [^startingOffset]. s1 = 0 & (s2 = 0) ifTrue: [^startingOffset]. deltaBig := pt2 - pt1. colors := { color1. color2}. segLens := { s1 asFloat. s2 asFloat}. nextPhase := { 2. 1}. "Figure out what phase we are in and how far, given startingOffset." segmentOffset := startingOffset \\ (s1 + s2). segmentLength := segmentOffset < s1 ifTrue: [phase := 1. s1 - segmentOffset] ifFalse: [phase := 2. s1 + s2 - segmentOffset]. startPoint := pt1. distDone := 0.0. [distDone < dist] whileTrue: [segmentLength := segmentLength min: dist - distDone. endPoint := startPoint + (deltaBig * segmentLength / dist). self line: startPoint truncated to: endPoint truncated width: width color: (colors at: phase). distDone := distDone + segmentLength. phase := nextPhase at: phase. startPoint := endPoint. segmentLength := segLens at: phase]. ^startingOffset + dist! ! !Canvas methodsFor: 'drawing' stamp: 'sr 4/27/2000 03:31' prior: 18678885! line: pt1 to: pt2 width: w1 color: c1 stepWidth: s1 secondWidth: w2 secondColor: c2 secondStepWidth: s2 "Draw a line using the given width, colors and steps; both steps can have different stepWidths (firstStep, secondStep), draw widths and colors." | bigSteps offsetPoint dist p1p2Vec deltaBig delta1 delta2 lastPoint bigStep | s1 = 0 & (s2 = 0) ifTrue: [^ self]. dist := pt1 dist: pt2. dist = 0 ifTrue: [^ self]. bigStep := s1 + s2. bigSteps := dist / bigStep. p1p2Vec := pt2 - pt1. deltaBig := p1p2Vec / bigSteps. delta1 := deltaBig * (s1 / bigStep). delta2 := deltaBig * (s2 / bigStep). dist <= s1 ifTrue: [self line: pt1 rounded to: pt2 rounded width: w1 color: c1. ^ self]. 0 to: bigSteps truncated - 1 do: [:bigStepIx | self line: (pt1 + (offsetPoint := deltaBig * bigStepIx)) rounded to: (pt1 + (offsetPoint := offsetPoint + delta1)) rounded width: w1 color: c1. self line: (pt1 + offsetPoint) rounded to: (pt1 + (offsetPoint + delta2)) rounded width: w2 color: c2]. "if there was no loop, offsetPoint is nil" lastPoint := pt1 + ((offsetPoint ifNil: [0 @ 0]) + delta2). (lastPoint dist: pt2) <= s1 ifTrue: [self line: lastPoint rounded to: pt2 rounded width: w1 color: c1] ifFalse: [self line: lastPoint rounded to: (lastPoint + delta1) rounded width: w1 color: c1. self line: (lastPoint + delta1) rounded to: pt2 width: w1 color: c2]! ! !Canvas methodsFor: 'drawing' stamp: 'gvc 6/17/2006 10:42' prior: 18680437! line: pt1 to: pt2 width: width colors: colors dashes: dashes startingOffset: startingOffset "Draw a line using the given width, colors and dash lengths. Dash lengths are considered as multiples of width." |dist deltaBig segmentOffset phase segmentLength startPoint distDone endPoint segLens lens l ep| width = 0 ifTrue: [^startingOffset]. dist := pt1 dist: pt2. dist = 0 ifTrue: [^startingOffset]. (dashes allSatisfy: [:d | d = 0]) ifTrue: [^startingOffset]. deltaBig := pt2 - pt1. segLens := dashes collect: [:d | d * width]. "Figure out what phase we are in and how far, given startingOffset." segmentOffset := startingOffset \\ segLens sum. lens := segLens readStream. l := 0. [lens atEnd or: [segmentOffset <= (l := l + lens next)]] whileFalse: []. segmentLength := lens atEnd ifTrue: [phase := segLens size. segLens sum - segmentOffset] ifFalse: [phase := lens position. (segLens first: phase) sum - segmentOffset.]. startPoint := pt1. distDone := 0.0. segmentLength < (segLens at: phase) ifTrue: [startPoint := startPoint + (deltaBig * segmentLength / dist). distDone := distDone + segmentLength. phase := phase \\ segLens size + 1. segmentLength := (segLens at: phase)]. [distDone < dist] whileTrue: [segmentLength := segmentLength min: dist - distDone. endPoint := startPoint + (deltaBig * segmentLength / dist). ep := startPoint + (deltaBig * (segmentLength - width max: 0) / dist). self line: startPoint truncated to: ep truncated width: width color: (colors at: phase). distDone := distDone + segmentLength. phase := phase \\ segLens size + 1. startPoint := endPoint. segmentLength := segLens at: phase]. ^startingOffset + distDone! ! !Canvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 14:11' prior: 18675470! origin "Return the current origin for drawing operations" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 2/16/2000 23:48' prior: 18684506! paintImage: aForm at: aPoint "Draw the given Form, which is assumed to be a Form or ColorForm following the convention that zero is the transparent pixel value." self paintImage: aForm at: aPoint sourceRect: aForm boundingBox ! ! !Canvas methodsFor: 'drawing-images' stamp: 'IgorStasenko 7/18/2011 18:08' prior: 18684820! paintImage: aForm at: aPoint sourceRect: sourceRect "Draw the given Form, which is assumed to be a Form or ColorForm following the convention that zero is the transparent pixel value." ^self image: aForm at: aPoint sourceRect: sourceRect rule: Form paint! ! !Canvas methodsFor: 'drawing' stamp: 'ar 6/17/1999 01:31' prior: 18682236! paragraph: paragraph bounds: bounds color: c "Draw the given paragraph" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 01:43' prior: 18695536! preserveStateDuring: aBlock "Preserve the full canvas state during the execution of aBlock" ^aBlock value: self copy! ! !Canvas methodsFor: 'drawing' stamp: 'ar 2/5/1999 18:28' prior: 18682401! render: anObject "Do some 3D operations with the object if possible"! ! !Canvas methodsFor: 'initialization' stamp: 'di 9/22/1999 19:21' prior: 18699839! reset "Reset the canvas." super initWithTarget:self class defaultTarget. ! ! !Canvas methodsFor: 'drawing-general' stamp: 'ar 12/30/2001 18:47' prior: 18683389! roundCornersOf: aMorph during: aBlock ^self roundCornersOf: aMorph in: aMorph bounds during: aBlock! ! !Canvas methodsFor: 'drawing-general' stamp: 'ar 12/30/2001 18:47' prior: 18683562! roundCornersOf: aMorph in: bounds during: aBlock ^aBlock value! ! !Canvas methodsFor: 'drawing-general' stamp: 'GaryChambers 9/8/2011 14:47' prior: 18683706! roundShadowCornersOf: aMorph during: aBlock ^self roundShadowCornersOf: aMorph in: aMorph bounds during: aBlock! ! !Canvas methodsFor: 'drawing-general' stamp: 'GaryChambers 9/8/2011 14:47' prior: 18683899! roundShadowCornersOf: aMorph in: bounds during: aBlock ^aBlock value! ! !Canvas methodsFor: 'testing' stamp: 'di 9/24/2000 16:10' prior: 18700806! seesNothingOutside: aRectangle "Return true if this canvas will not touch anything outside aRectangle" ^ aRectangle containsRect: self clipRect ! ! !Canvas methodsFor: 'accessing' stamp: 'ar 2/17/2000 01:46' prior: 18675624! shadowColor "Return the current override color or nil if no such color exists" ^nil! ! !Canvas methodsFor: 'accessing' stamp: 'ar 2/17/2000 01:46' prior: 18675775! shadowColor: aColor "Set a shadow color. If set this color overrides any client-supplied color."! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 6/25/1999 12:17' prior: 18685154! stencil: stencilForm at: aPoint color: aColor "Flood this canvas with aColor wherever stencilForm has non-zero pixels" ^self stencil: stencilForm at: aPoint sourceRect: stencilForm boundingBox color: aColor! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 6/25/1999 12:17' prior: 18685439! stencil: stencilForm at: aPoint sourceRect: sourceRect color: aColor "Flood this canvas with aColor wherever stencilForm has non-zero pixels" ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-support' stamp: 'di 10/16/1999 16:02' prior: 18695727! transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock "Transform the receiver by the given display transformation during the execution of aBlock. The given clip rectangle defines the *global* (e.g., outer) rectangle against which the receiver should clip (which would be equivalent to 'self clipRect: aClipRect; transformBy: aDisplayTransform')." ^ self transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock smoothing: 1 ! ! !Canvas methodsFor: 'drawing-support' stamp: 'di 10/16/1999 15:56' prior: 18696251! transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock smoothing: cellSize "Transform the receiver by the given display transformation during the execution of aBlock. The given clip rectangle defines the *global* (e.g., outer) rectangle against which the receiver should clip (which would be equivalent to 'self clipRect: aClipRect; transformBy: aDisplayTransform')." ^ self subclassResponsibility! ! !Canvas methodsFor: 'other' stamp: '' prior: 18700173! translateBy:aPoint clippingTo:aRect during:aBlock ^aBlock value:(self copyOffset:aPoint clipRect:aRect).! ! !Canvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 03:00' prior: 18696735! translateBy: delta during: aBlock "Set a translation only during the execution of aBlock." ^self subclassResponsibility! ! !Canvas methodsFor: 'drawing-support' stamp: 'ar 6/22/1999 14:08' prior: 18696928! translateTo: newOrigin clippingTo: aRectangle during: aBlock "Set a new origin and clipping rectangle only during the execution of aBlock." self translateBy: newOrigin - self origin clippingTo: (aRectangle translateBy: self origin negated) during: aBlock! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 2/17/2000 14:05' prior: 18685682! translucentImage: aForm at: aPoint "Draw a translucent image using the best available way of representing translucency." self translucentImage: aForm at: aPoint sourceRect: aForm boundingBox! ! !Canvas methodsFor: 'drawing-images' stamp: 'IgorStasenko 7/18/2011 18:08' prior: 18685959! translucentImage: aForm at: aPoint sourceRect: sourceRect "Draw a translucent image using the best available way of representing translucency. Note: This will be fixed in the future." (self depth < 32 or:[aForm isTranslucent not]) ifTrue:[^self paintImage: aForm at: aPoint sourceRect: sourceRect]. self image: aForm at: aPoint sourceRect: sourceRect rule: Form blend! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 12/28/2001 23:44' prior: 18686412! warpImage: aForm transform: aTransform "Warp the given form using aTransform" ^self warpImage: aForm transform: aTransform at: 0@0! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 12/28/2001 23:54' prior: 18686616! warpImage: aForm transform: aTransform at: extraOffset "Warp the given form using aTransform. TODO: Use transform to figure out appropriate cell size" ^self warpImage: aForm transform: aTransform at: extraOffset sourceRect: aForm boundingBox cellSize: 1! ! !Canvas methodsFor: 'drawing-images' stamp: 'ar 12/29/2001 00:20' prior: 18686944! warpImage: aForm transform: aTransform at: extraOffset sourceRect: sourceRect cellSize: cellSize "Warp the given using the appropriate transform and offset." ^self subclassResponsibility! ! !ColorMappingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 74456853! I'm an abstract class which introduce a filter between a drawing request and the final output, handled by #mapColor: For each potential pixel operation like: source -> op -> output it introducing a color mapping stage: source -> op -> mapping -> output Then #mapColor: can be redefined in subclasses to implement more specific behavior. For example: - ShadowDrawingCanvas will replace the rendered color with the color of shadow (if not transparent). - AlphaBlendingCanvas will add or intensify alpha of rendered color. For an easy to understand example see #drawPolygon:color:borderWidth:borderColor:! !ColorMappingCanvas class methodsFor: 'instance creation' stamp: 'ar 6/22/1999 18:23' prior: 19700477! on: aCanvas ^self new on: aCanvas! ! !ColorMappingCanvas methodsFor: 'drawing-support' stamp: 'ar 6/22/1999 18:19' prior: 19695784! clipBy: aRectangle during: aBlock "Set a clipping rectangle active only during the execution of aBlock. Note: In the future we may want to have more general clip shapes - not just rectangles" | oldCanvas | oldCanvas := myCanvas. myCanvas clipBy: aRectangle during:[:newCanvas| myCanvas := newCanvas. aBlock value: self]. myCanvas := oldCanvas! ! !ColorMappingCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 17:40' prior: 19692683! clipRect ^myCanvas clipRect! ! !ColorMappingCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 17:39' prior: 19692789! depth ^myCanvas depth! ! !ColorMappingCanvas methodsFor: 'drawing-polygons' stamp: 'mir 9/12/2001 14:24' prior: 19694646! drawPolygon: vertices color: aColor borderWidth: bw borderColor: bc "Draw the given polygon." ^myCanvas drawPolygon: vertices color: aColor borderWidth: bw borderColor: (self mapColor: bc)! ! !ColorMappingCanvas methodsFor: 'drawing-text' stamp: 'ar 12/31/2001 02:28' prior: 19698018! drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: c "Draw the given string in the given font and color clipped to the given rectangle. If the font is nil, the default font is used." myCanvas drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: (self mapColor: c)! ! !ColorMappingCanvas methodsFor: 'drawing-text' stamp: 'tween 3/10/2009 07:45' prior: 19698440! drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: c underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc "Draw the given string in the given font and color clipped to the given rectangle. If the font is nil, the default font is used." myCanvas drawString: s from: firstIndex to: lastIndex in: boundsRect font: fontOrNil color: (self mapColor: c) underline: underline underlineColor: (self mapColor: uc) strikethrough: strikethrough strikethroughColor: (self mapColor: sc)! ! !ColorMappingCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 17:39' prior: 19692889! extent ^myCanvas extent! ! !ColorMappingCanvas methodsFor: 'drawing-ovals' stamp: 'ar 6/22/1999 17:59' prior: 19694342! fillOval: r color: c borderWidth: borderWidth borderColor: borderColor "Fill the given oval." myCanvas fillOval: r color: (self mapColor: c) borderWidth: borderWidth borderColor: (self mapColor: borderColor)! ! !ColorMappingCanvas methodsFor: 'initialization' stamp: 'ar 6/22/1999 18:24' prior: 19699098! flush myCanvas flush.! ! !ColorMappingCanvas methodsFor: 'accessing' stamp: 'ar 6/24/1999 17:54' prior: 19692991! form ^myCanvas form! ! !ColorMappingCanvas methodsFor: 'drawing-rectangles' stamp: 'ar 6/22/1999 17:59' prior: 19694932! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth borderColor: borderColor "Draw the rectangle using the given attributes" myCanvas frameAndFillRectangle: r fillColor: (self mapColor: fillColor) borderWidth: borderWidth borderColor: (self mapColor: borderColor)! ! !ColorMappingCanvas methodsFor: 'drawing-rectangles' stamp: 'ar 6/22/1999 18:01' prior: 19695311! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth topLeftColor: topLeftColor bottomRightColor: bottomRightColor "Draw the rectangle using the given attributes" myCanvas frameAndFillRectangle: r fillColor: (self mapColor: fillColor) borderWidth: borderWidth topLeftColor: (self mapColor: topLeftColor) bottomRightColor: (self mapColor: bottomRightColor)! ! !ColorMappingCanvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:15' prior: 19699929! image: aForm at: aPoint sourceRect: sourceRect rule: rule "Draw the given form. For the 'paint' combination rule use stenciling otherwise simply fill the source rectangle." ^myCanvas image: aForm at: aPoint sourceRect: sourceRect rule: rule.! ! !ColorMappingCanvas methodsFor: 'testing' stamp: 'ar 8/8/2001 14:16' prior: 19699811! isShadowDrawing ^myCanvas isShadowDrawing! ! !ColorMappingCanvas methodsFor: 'drawing' stamp: 'ar 6/22/1999 18:15' prior: 19693450! line: pt1 to: pt2 width: w color: c "Draw a line using the given width and color" myCanvas line: pt1 to: pt2 width: w color: (self mapColor: c).! ! !ColorMappingCanvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:15' prior: 19700247! mapColor: aColor ^aColor! ! !ColorMappingCanvas methodsFor: 'initialization' stamp: 'ar 8/8/2001 14:14' prior: 19699202! on: aCanvas myCanvas := aCanvas.! ! !ColorMappingCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 17:39' prior: 19693089! origin ^myCanvas origin! ! !ColorMappingCanvas methodsFor: 'drawing' stamp: 'ar 6/22/1999 18:16' prior: 19693680! paragraph: paragraph bounds: bounds color: c "Draw the given paragraph" myCanvas paragraph: paragraph bounds: bounds color: (self mapColor: c)! ! !ColorMappingCanvas methodsFor: 'drawing-support' stamp: 'nice 12/26/2009 19:22' prior: 19696223! preserveStateDuring: aBlock "Preserve the full canvas state during the execution of aBlock" | oldCanvas result | oldCanvas := myCanvas. result := myCanvas preserveStateDuring:[:newCanvas| myCanvas := newCanvas. aBlock value: self]. myCanvas := oldCanvas. ^result! ! !ColorMappingCanvas methodsFor: 'initialization' stamp: 'ar 6/22/1999 18:23' prior: 19699318! reset myCanvas reset.! ! !ColorMappingCanvas methodsFor: 'drawing-images' stamp: 'ar 6/24/1999 18:26' prior: 19693914! stencil: aForm at: aPoint color: aColor myCanvas stencil: aForm at: aPoint color: (self mapColor: aColor)! ! !ColorMappingCanvas methodsFor: 'drawing-images' stamp: 'ar 6/24/1999 18:26' prior: 19694109! stencil: aForm at: aPoint sourceRect: aRect color: aColor myCanvas stencil: aForm at: aPoint sourceRect: aRect color: (self mapColor: aColor)! ! !ColorMappingCanvas methodsFor: 'drawing-support' stamp: 'di 10/16/1999 16:01' prior: 19696580! transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock smoothing: cellSize "Transform the receiver by the given display transformation during the execution of aBlock. The given clip rectangle defines the *global* (e.g., outer) rectangle against which the receiver should clip (which would be equivalent to 'self clipRect: aClipRect; transformBy: aDisplayTransform')." | oldCanvas | oldCanvas := myCanvas. myCanvas transformBy: aDisplayTransform clippingTo: aClipRect during: [:newCanvas | myCanvas := newCanvas. aBlock value: self] smoothing: cellSize. myCanvas := oldCanvas.! ! !ColorMappingCanvas methodsFor: 'other' stamp: 'ar 6/22/1999 18:21' prior: 19699415! translateBy: delta clippingTo: aRectangle during: aBlock "Set a translation and clipping rectangle only during the execution of aBlock." | oldCanvas | oldCanvas := myCanvas. myCanvas translateBy: delta clippingTo: aRectangle during:[:newCanvas| myCanvas := newCanvas. aBlock value: self]. myCanvas := oldCanvas.! ! !ColorMappingCanvas methodsFor: 'drawing-support' stamp: 'ar 6/22/1999 18:22' prior: 19697273! translateBy: delta during: aBlock "Set a translation only during the execution of aBlock." | oldCanvas | oldCanvas := myCanvas. myCanvas translateBy: delta during:[:newCanvas| myCanvas := newCanvas. aBlock value: self]. myCanvas := oldCanvas.! ! !ColorMappingCanvas methodsFor: 'drawing-support' stamp: 'ar 6/22/1999 18:22' prior: 19697608! translateTo: newOrigin clippingTo: aRectangle during: aBlock "Set a new origin and clipping rectangle only during the execution of aBlock." | oldCanvas | oldCanvas := myCanvas. myCanvas translateTo: newOrigin clippingTo: aRectangle during:[:newCanvas| myCanvas := newCanvas. aBlock value: self]. myCanvas := oldCanvas.! ! !ShadowDrawingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 74457545! see ColorMappingCanvas comment.! !ShadowDrawingCanvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:13' prior: 33201601! image: aForm at: aPoint sourceRect: sourceRect rule: rule "Draw the given form. For the 'paint' combination rule use stenciling otherwise simply fill the source rectangle." rule = Form paint ifTrue:[ ^myCanvas stencil: aForm at: aPoint sourceRect: sourceRect color: shadowColor ] ifFalse:[ ^myCanvas fillRectangle: (sourceRect translateBy: aPoint) color: shadowColor ].! ! !ShadowDrawingCanvas methodsFor: 'testing' stamp: 'IgorStasenko 7/18/2011 18:53' prior: 33201502! isShadowDrawing ^true! ! !ShadowDrawingCanvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:14' prior: 33202072! mapColor: aColor aColor isColor ifFalse:[^aColor]. "Should not happen but who knows..." ^aColor isTransparent ifTrue:[aColor] ifFalse:[shadowColor]! ! !ShadowDrawingCanvas methodsFor: 'initialization' stamp: 'ar 8/8/2001 14:14' prior: 33201352! on: aCanvas myCanvas := aCanvas. shadowColor := Color black.! ! !ShadowDrawingCanvas methodsFor: 'accessing' stamp: 'ar 8/8/2001 14:14' prior: 33201123! shadowColor ^shadowColor! ! !ShadowDrawingCanvas methodsFor: 'accessing' stamp: 'ar 8/8/2001 14:14' prior: 33201226! shadowColor: aColor shadowColor := aColor! ! !FormCanvas commentStamp: '' prior: 74457636! Note that when shadowDrawing is true, shadowStipple may be either a color, for a solid shadow of the given color, or it may be a stipple used to simulate gray shading when the display cannot support alpha blending.! !FormCanvas class methodsFor: 'instance creation' stamp: '' prior: 22581192! extent: aPoint ^ self extent: aPoint depth: Display depth ! ! !FormCanvas class methodsFor: 'instance creation' stamp: '' prior: 22581308! extent: extent depth: depth ^ self new setForm: (Form extent: extent depth: depth)! ! !FormCanvas class methodsFor: 'instance creation' stamp: 'nk 7/4/2003 10:11' prior: 22581475! extent: extent depth: depth origin: aPoint clipRect: aRectangle ^ self new setForm: (Form extent: extent depth: depth); setOrigin: aPoint clipRect: aRectangle; yourself! ! !FormCanvas class methodsFor: 'caching' stamp: 'FernandoOlivero 9/12/2013 13:35' prior: 67667975! initializeTranslucentPatterns TranslucentPatterns := Array new: 8. #(1 2 4 8 ) do: [ :d | | mask bits pattern patternList | patternList := Array new: 5. mask := (1 bitShift: d) - 1. bits := 2 * d. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. "0% pattern" pattern := Bitmap with: 0 with: 0. patternList at: 1 put: pattern. "25% pattern" pattern := Bitmap with: mask with: 0. patternList at: 2 put: pattern. "50% pattern" pattern := Bitmap with: mask with: mask bitInvert32. patternList at: 3 put: pattern. "75% pattern" pattern := Bitmap with: mask with: 4294967295. patternList at: 4 put: pattern. "100% pattern" pattern := Bitmap with: 4294967295 with: 4294967295. patternList at: 5 put: pattern. TranslucentPatterns at: d put: patternList ]! ! !FormCanvas class methodsFor: 'instance creation' stamp: 'jm 8/2/97 13:54' prior: 22581737! on: aForm ^ self new setForm: aForm ! ! !FormCanvas class methodsFor: 'caching' stamp: 'FernandoOlivero 9/12/2013 13:36' prior: 67669014! translucentPatterns TranslucentPatterns isNil ifTrue:[ self initializeTranslucentPatterns ]. ^ TranslucentPatterns ! ! !FormCanvas methodsFor: 'accessing' stamp: 'ar 5/28/2000 17:11' prior: 22556541! allocateForm: extentPoint "Allocate a new form which is similar to the receiver" ^form allocateForm: extentPoint! ! !FormCanvas methodsFor: 'Morphic-Base-Balloon' stamp: 'ar 11/11/1998 22:57' prior: 22556183! asBalloonCanvas ^(BalloonCanvas on: form) setOrigin: origin clipRect: clipRect! ! !FormCanvas methodsFor: 'drawing-ovals' stamp: 'RAA 11/6/2000 15:21' prior: 22562245! balloonFillOval: aRectangle fillStyle: aFillStyle borderWidth: bw borderColor: bc self asBalloonCanvas fillOval: aRectangle fillStyle: aFillStyle borderWidth: bw borderColor: bc! ! !FormCanvas methodsFor: 'Morphic-Base-Balloon' stamp: 'gvc 3/16/2009 13:36' prior: 22556340! balloonFillRectangle: aRectangle fillStyle: aFillStyle self asBalloonCanvas fillRectangle: aRectangle basicFillStyle: aFillStyle! ! !FormCanvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 03:02' prior: 22567660! clipBy: aRectangle during: aBlock "Set a clipping rectangle active only during the execution of aBlock. Note: In the future we may want to have more general clip shapes - not just rectangles" ^aBlock value: (self copyClipRect: aRectangle)! ! !FormCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 14:06' prior: 22556725! clipRect "Return the currently active clipping rectangle" ^ clipRect translateBy: origin negated! ! !FormCanvas methodsFor: 'accessing' stamp: 'ar 12/31/2001 03:26' prior: 22556894! contentsOfArea: aRectangle into: aForm | bb | self flush. bb := BitBlt toForm: aForm. bb sourceForm: form; combinationRule: Form over; sourceX: (aRectangle left + origin x); sourceY: (aRectangle top + origin y); width: aRectangle width; height: aRectangle height; copyBits. ^aForm! ! !FormCanvas methodsFor: 'copying' stamp: 'ar 6/17/1999 02:51' prior: 22558013! copyClipRect: aRectangle ^ self copyOrigin: origin clipRect: (aRectangle translateBy: origin) ! ! !FormCanvas methodsFor: 'copying' stamp: 'ar 6/17/1999 02:52' prior: 22558176! copyOffset: aPoint ^ self copyOrigin: origin + aPoint clipRect: clipRect! ! !FormCanvas methodsFor: 'copying' stamp: 'IgorStasenko 12/22/2012 03:26' prior: 22558328! copyOffset: aPoint clipRect: sourceClip "Make a copy of me offset by aPoint, and further clipped by sourceClip, a rectangle in the un-offset coordinates" ^ self copyOrigin: aPoint + origin clipRect: ((sourceClip translateBy: origin) intersect: clipRect ifNone: [ 0@0 corner: 0@0 ])! ! !FormCanvas methodsFor: 'copying' stamp: 'IgorStasenko 12/22/2012 03:26' prior: 22558693! copyOrigin: aPoint clipRect: aRectangle "Return a copy of this canvas with the given origin. The clipping rectangle of this canvas is the intersection of the given rectangle and the receiver's current clipping rectangle. This allows the clipping rectangles of nested clipping morphs to be composed." ^ self copy setOrigin: aPoint clipRect: (clipRect intersect: aRectangle ifNone: ["well, now we will clip everything" 0@0 corner: 0@0])! ! !FormCanvas methodsFor: 'accessing' stamp: '' prior: 22557227! depth ^ form depth ! ! !FormCanvas methodsFor: 'drawing-polygons' stamp: 'ar 6/18/1999 08:57' prior: 22563859! drawPolygon: vertices color: aColor borderWidth: bw borderColor: bc "Generalize for the BalloonCanvas" ^self drawPolygon: vertices fillStyle: aColor borderWidth: bw borderColor: bc! ! !FormCanvas methodsFor: 'drawing-polygons' stamp: 'IgorStasenko 7/18/2011 18:11' prior: 22564128! drawPolygon: vertices fillStyle: aFillStyle borderWidth: bw borderColor: bc "Use a BalloonCanvas" self asBalloonCanvas drawPolygon: vertices asArray fillStyle: aFillStyle borderWidth: bw borderColor: bc! ! !FormCanvas methodsFor: 'drawing-text' stamp: 'IgorStasenko 7/18/2011 18:12' prior: 22570083! drawString: aString from: firstIndex to: lastIndex at: aPoint font: fontOrNil color: c | font | port colorMap: nil. font := fontOrNil ifNil: [TextStyle defaultFont]. port combinationRule: Form paint. font installOn: port foregroundColor: c backgroundColor: Color transparent. font displayString: aString on: port from: firstIndex to: lastIndex at: (origin + aPoint) kern: 0.! ! !FormCanvas methodsFor: 'drawing-text' stamp: 'IgorStasenko 7/18/2011 18:12' prior: 22570553! drawString: aString from: firstIndex to: lastIndex autoBoundAt: aPoint font: fontOrNil color: c | font textStyle portRect bounds character width carriageReturn lineWidth lineHeight | carriageReturn := Character cr. width := lineWidth := 0. font := StandardFonts codeFont. textStyle := font textStyle. lineHeight := textStyle lineGrid. 1 to: aString size do: [:i | character := aString at: i. character = carriageReturn ifTrue: [lineWidth := lineWidth max: width. lineHeight := lineHeight + textStyle lineGrid. width := 0] ifFalse: [width := width + (font widthOf: character)]]. lineWidth := lineWidth max: width. bounds := aPoint extent: (lineWidth @ lineHeight). port colorMap: nil. portRect := port clipRect. port clipByX1: bounds left + origin x y1: bounds top + origin y x2: bounds right + origin x y2: bounds bottom + origin y. port combinationRule: Form paint. port fill: bounds fillColor: Color white rule: Form paint. font installOn: port foregroundColor: c backgroundColor: Color white. aString lines doWithIndex: [:line :index | font displayString: line on: port from: 1 to: line size at: (bounds topLeft + origin + (0@(index-1)*textStyle lineGrid)) kern: 0. ]. port clipRect: portRect.! ! !FormCanvas methodsFor: 'drawing-text' stamp: 'IgorStasenko 7/18/2011 18:12' prior: 22571900! drawString: aString from: firstIndex to: lastIndex in: bounds font: fontOrNil color: c | font portRect | port colorMap: nil. portRect := port clipRect. port clipByX1: bounds left + origin x y1: bounds top + origin y x2: bounds right + origin x y2: bounds bottom + origin y. font := fontOrNil ifNil: [TextStyle defaultFont]. port combinationRule: Form paint. font installOn: port foregroundColor: c backgroundColor: Color transparent. font displayString: aString asString on: port from: firstIndex to: lastIndex at: (bounds topLeft + origin) kern: 0. port clipRect: portRect.! ! !FormCanvas methodsFor: 'drawing-text' stamp: 'IgorStasenko 7/18/2011 18:12' prior: 22572582! drawString: aString from: firstIndex to: lastIndex in: bounds font: fontOrNil color: c underline: underline underlineColor: uc strikethrough: strikethrough strikethroughColor: sc | font portRect endPoint | port colorMap: nil. portRect := port clipRect. port clipByX1: bounds left + origin x y1: bounds top + origin y x2: bounds right + origin x y2: bounds bottom + origin y. font := fontOrNil ifNil: [TextStyle defaultFont]. port combinationRule: Form paint. font installOn: port foregroundColor: c backgroundColor: Color transparent. endPoint := font displayString: aString asString on: port from: firstIndex to: lastIndex at: (bounds topLeft + origin) kern: 0. underline ifTrue:[ font installOn: port foregroundColor: uc backgroundColor: Color transparent. font displayUnderlineOn: port from: (bounds topLeft + origin + (0@font ascent)) to: endPoint. ]. port clipRect: portRect.! ! !FormCanvas methodsFor: 'accessing' stamp: '' prior: 22557290! extent ^ form extent! ! !FormCanvas methodsFor: 'drawing' stamp: 'ar 5/14/2000 15:50' prior: 22559384! fillColor: c "Note: This always fills, even if the color is transparent." self setClearColor: c. port fillRect: form boundingBox offset: origin.! ! !FormCanvas methodsFor: 'drawing-ovals' stamp: 'di 5/25/2001 01:40' prior: 22562506! fillOval: r color: fillColor borderWidth: borderWidth borderColor: borderColor | rect | "draw the border of the oval" rect := (r translateBy: origin) truncated. (borderWidth = 0 or: [borderColor isTransparent]) ifFalse:[ self setFillColor: borderColor. (r area > 10000 or: [fillColor isTranslucent]) ifTrue: [port frameOval: rect borderWidth: borderWidth] ifFalse: [port fillOval: rect]]. "faster this way" "fill the inside" fillColor isTransparent ifFalse: [self setFillColor: fillColor. port fillOval: (rect insetBy: borderWidth)]. ! ! !FormCanvas methodsFor: 'drawing-ovals' stamp: 'IgorStasenko 7/18/2011 18:13' prior: 22563145! fillOval: aRectangle fillStyle: aFillStyle borderWidth: bw borderColor: bc "Fill the given oval." self flag: #bob. "this and its siblings could be moved up to Canvas with the right #balloonFillOval:..." (aFillStyle isBitmapFill and:[aFillStyle isKindOf: InfiniteForm]) ifTrue:[ self flag: #fixThis. ^self fillOval: aRectangle color: aFillStyle borderWidth: bw borderColor: bc]. (aFillStyle isSolidFill) ifTrue:[ ^self fillOval: aRectangle color: aFillStyle asColor borderWidth: bw borderColor: bc]. "Use a BalloonCanvas instead" self balloonFillOval: aRectangle fillStyle: aFillStyle borderWidth: bw borderColor: bc! ! !FormCanvas methodsFor: 'drawing-rectangles' stamp: 'IgorStasenko 7/18/2011 18:14' prior: 22564432! fillRectangle: aRectangle basicFillStyle: aFillStyle "Fill the given rectangle with the given, non-composite, fill style." | pattern | (aFillStyle isKindOf: InfiniteForm) ifTrue: [ ^self infiniteFillRectangle: aRectangle fillStyle: aFillStyle ]. (aFillStyle isSolidFill) ifTrue:[^self fillRectangle: aRectangle color: aFillStyle asColor]. "We have a very special case for filling with infinite forms" (aFillStyle isBitmapFill and:[aFillStyle origin = (0@0)]) ifTrue:[ pattern := aFillStyle form. (aFillStyle direction = (pattern width @ 0) and:[aFillStyle normal = (0@pattern height)]) ifTrue:[ "Can use an InfiniteForm" ^self fillRectangle: aRectangle color: (InfiniteForm with: pattern)]. ]. "Use a BalloonCanvas instead" self balloonFillRectangle: aRectangle fillStyle: aFillStyle.! ! !FormCanvas methodsFor: 'initialization' stamp: 'ar 5/27/2000 21:51' prior: 22573577! finish "If there are any pending operations on the receiver complete them. Do not return before all modifications have taken effect." form finish! ! !FormCanvas methodsFor: 'other' stamp: '' prior: 22574006! flushDisplay Display deferUpdates: false; forceDisplayUpdate.! ! !FormCanvas methodsFor: 'other' stamp: 'StephaneDucasse 2/9/2011 14:51' prior: 22574147! forceToScreen: rect ^Display forceToScreen: rect. ! ! !FormCanvas methodsFor: 'accessing' stamp: '' prior: 22557354! form ^ form! ! !FormCanvas methodsFor: 'drawing-rectangles' stamp: 'ar 5/14/2000 15:50' prior: 22565330! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth borderColor: borderColor | rect | rect := r translateBy: origin. "draw the border of the rectangle" borderColor isTransparent ifFalse:[ self setFillColor: borderColor. (r area > 10000 or: [fillColor isTranslucent]) ifTrue: [ port frameRect: rect borderWidth: borderWidth. ] ifFalse: ["for small rectangles, it's faster to fill the entire outer rectangle than to compute and fill the border rects" port fillRect: rect offset: origin]]. "fill the inside" fillColor isTransparent ifFalse: [self setFillColor: fillColor. port fillRect: (rect insetBy: borderWidth) offset: origin].! ! !FormCanvas methodsFor: 'drawing-rectangles' stamp: 'ar 2/16/2000 22:07' prior: 22566086! frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth topLeftColor: topLeftColor bottomRightColor: bottomRightColor | w h rect | "First use quick code for top and left borders and fill" self frameAndFillRectangle: r fillColor: fillColor borderWidth: borderWidth borderColor: topLeftColor. "Now use slow code for bevelled bottom and right borders" bottomRightColor isTransparent ifFalse: [ borderWidth isNumber ifTrue: [w := h := borderWidth] ifFalse: [w := borderWidth x. h := borderWidth y]. rect := r translateBy: origin. self setFillColor: bottomRightColor. port frameRectRight: rect width: w; frameRectBottom: rect height: h]. ! ! !FormCanvas methodsFor: 'private' stamp: 'ar 5/14/2001 23:34' prior: 22575485! image: aForm at: aPoint sourceRect: sourceRect rule: rule "Draw the portion of the given Form defined by sourceRect at the given point using the given BitBlt combination rule." port colorMap: (aForm colormapIfNeededFor: form); fillColor: nil. port image: aForm at: aPoint + origin sourceRect: sourceRect rule: rule.! ! !FormCanvas methodsFor: 'private' stamp: 'ar 8/8/2001 14:21' prior: 22575871! image: aForm at: aPoint sourceRect: sourceRect rule: rule alpha: sourceAlpha "Draw the portion of the given Form defined by sourceRect at the given point using the given BitBlt combination rule." port colorMap: (aForm colormapIfNeededFor: form); fillColor: nil. port image: aForm at: aPoint + origin sourceRect: sourceRect rule: rule alpha: sourceAlpha.! ! !FormCanvas methodsFor: 'drawing-rectangles' stamp: 'IgorStasenko 12/22/2012 03:25' prior: 22566862! infiniteFillRectangle: aRectangle fillStyle: aFillStyle | additionalOffset rInPortTerms clippedPort targetTopLeft clipOffset ex | "this is a bit of a kludge to get the form to be aligned where I *think* it should be. something better is needed, but not now" additionalOffset := 0@0. ex := aFillStyle form extent. rInPortTerms := (aRectangle intersect: aFillStyle boundingBox ifNone: ["nothing to draw" ^ self ]) translateBy: origin. clippedPort := port clippedBy: rInPortTerms. targetTopLeft := clippedPort clipRect topLeft truncateTo: ex. clipOffset := rInPortTerms topLeft - targetTopLeft. additionalOffset := (clipOffset \\ ex) - ex. ^aFillStyle displayOnPort: clippedPort offsetBy: additionalOffset ! ! !FormCanvas methodsFor: 'initialization' stamp: 'FernandoOlivero 9/11/2013 13:29' prior: 67628952! initializeTranslucentPatterns TranslucentPatterns := Array new: 8. #(1 2 4 8 ) do: [ :d | | mask bits pattern patternList | patternList := Array new: 5. mask := (1 bitShift: d) - 1. bits := 2 * d. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. "0% pattern" pattern := Bitmap with: 0 with: 0. patternList at: 1 put: pattern. "25% pattern" pattern := Bitmap with: mask with: 0. patternList at: 2 put: pattern. "50% pattern" pattern := Bitmap with: mask with: mask bitInvert32. patternList at: 3 put: pattern. "75% pattern" pattern := Bitmap with: mask with: 4294967295. patternList at: 4 put: pattern. "100% pattern" pattern := Bitmap with: 4294967295 with: 4294967295. patternList at: 5 put: pattern. TranslucentPatterns at: d put: patternList ]! ! !FormCanvas methodsFor: 'testing' stamp: 'ar 6/22/1999 14:08' prior: 22575106! isVisible: aRectangle "Optimization" (aRectangle right + origin x) < clipRect left ifTrue: [^ false]. (aRectangle left + origin x) > clipRect right ifTrue: [^ false]. (aRectangle bottom + origin y) < clipRect top ifTrue: [^ false]. (aRectangle top + origin y) > clipRect bottom ifTrue: [^ false]. ^ true ! ! !FormCanvas methodsFor: 'drawing' stamp: 'ar 2/16/2000 22:07' prior: 22559599! line: pt1 to: pt2 width: w color: c | offset | offset := origin - (w // 2) asPoint. self setFillColor: c. port width: w; height: w; drawFrom: (pt1 + offset) to: (pt2 + offset)! ! !FormCanvas methodsFor: 'accessing' stamp: 'ar 6/22/1999 14:10' prior: 22557437! origin "Return the current origin for drawing operations" ^ origin! ! !FormCanvas methodsFor: 'drawing' stamp: 'IgorStasenko 7/18/2011 18:15' prior: 22559858! paragraph: para bounds: bounds color: c | scanner | self setPaintColor: c. scanner := (port clippedBy: (bounds translateBy: origin)) displayScannerFor: para foreground: c background: Color transparent ignoreColorChanges: false. para displayOn: (self copyClipRect: bounds) using: scanner at: origin+ bounds topLeft. ! ! !FormCanvas methodsFor: 'copying' stamp: 'nice 1/13/2010 21:21' prior: 22559203! postCopy "The copy share same underlying Form but with its own grafPort." super postCopy. self resetGrafPort! ! !FormCanvas methodsFor: 'printing' stamp: 'ar 5/28/2000 17:07' prior: 22574954! printOn: aStream super printOn: aStream. aStream nextPutAll:' on: '; print: form.! ! !FormCanvas methodsFor: 'private' stamp: 'RAA 12/17/2000 13:24' prior: 22576297! privateClipRect ^clipRect! ! !FormCanvas methodsFor: 'private' stamp: 'RAA 12/17/2000 13:25' prior: 22576394! privatePort ^port! ! !FormCanvas methodsFor: 'private' stamp: 'yo 6/18/2004 15:11' prior: 22576481! privateWarp: aForm transform: aTransform at: extraOffset sourceRect: sourceRect cellSize: cellSize "Warp the given using the appropriate transform and offset." | globalRect sourceQuad warp tfm | tfm := aTransform. globalRect := tfm localBoundsToGlobal: sourceRect. sourceQuad := (tfm sourceQuadFor: globalRect) collect:[:p| p - sourceRect topLeft]. extraOffset ifNotNil:[globalRect := globalRect translateBy: extraOffset]. warp := (WarpBlt current toForm: port destForm) combinationRule: Form paint; sourceQuad: sourceQuad destRect: (globalRect origin corner: globalRect corner+(1@1)); clipRect: port clipRect. warp cellSize: cellSize. warp sourceForm: aForm. warp warpBits! ! !FormCanvas methodsFor: 'drawing' stamp: 'ar 9/9/2000 22:18' prior: 22560249! render: anObject "Do some 3D operations with the object if possible" ^self asBalloonCanvas render: anObject! ! !FormCanvas methodsFor: 'initialization' stamp: 'ar 2/17/2000 00:21' prior: 22573799! reset origin := 0@0. "origin of the top-left corner of this cavas" clipRect := (0@0 corner: 10000@10000). "default clipping rectangle" self shadowColor: nil.! ! !FormCanvas methodsFor: 'private' stamp: 'MarcusDenker 3/24/2012 21:31' prior: 22577294! resetGrafPort "Private!! Create a new grafPort for a new copy." port := GrafPort toForm: form. port clipRect: clipRect. ! ! !FormCanvas methodsFor: 'drawing-general' stamp: 'ar 12/30/2001 18:58' prior: 22560436! roundCornersOf: aMorph in: bounds during: aBlock aMorph wantsRoundedCorners ifFalse:[^aBlock value]. (self seesNothingOutside: (CornerRounder rectWithinCornersOf: bounds)) ifTrue: ["Don't bother with corner logic if the region is inside them" ^ aBlock value]. CornerRounder roundCornersOf: aMorph on: self in: bounds displayBlock: aBlock borderWidth: aMorph borderWidthForRounding corners: aMorph roundedCorners! ! !FormCanvas methodsFor: 'drawing-general' stamp: 'GaryChambers 9/8/2011 14:48' prior: 22560947! roundShadowCornersOf: aMorph in: bounds during: aBlock aMorph wantsRoundedCorners ifFalse:[^aBlock value]. (self seesNothingOutside: (CornerRounder rectWithinCornersOf: bounds)) ifTrue: ["Don't bother with corner logic if the region is inside them" ^ aBlock value]. CornerRounder roundShadowCornersOf: aMorph on: self in: bounds displayBlock: aBlock borderWidth: aMorph borderWidthForRounding corners: aMorph roundedCorners! ! !FormCanvas methodsFor: 'private' stamp: 'tpr 9/15/2004 10:28' prior: 22577487! setClearColor: aColor "Install a new clear color - e.g., a color is used for clearing the background" | clearColor | clearColor := aColor ifNil:[Color transparent]. clearColor isColor ifFalse:[ (clearColor isKindOf: InfiniteForm) ifFalse:[^self error:'Cannot install color']. ^port fillPattern: clearColor; combinationRule: Form over]. "Okay, so clearColor really *is* a color" port sourceForm: nil. port combinationRule: Form over. port fillPattern: clearColor. self depth = 8 ifTrue:[ "Use a stipple pattern" port fillColor: (form balancedPatternFor: clearColor)]. ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:51' prior: 67608188! setFillColor: aColor "Install a new color used for filling." | screen patternWord fillColor | fillColor := aColor. fillColor ifNil:[fillColor := Color transparent]. fillColor isColor ifFalse:[ (fillColor isKindOf: InfiniteForm) ifFalse:[^self error:'Cannot install color']. ^port fillPattern: fillColor; combinationRule: Form over]. "Okay, so fillColor really *is* a color" port sourceForm: nil. fillColor isTranslucent ifFalse:[ port combinationRule: Form over. port fillPattern: fillColor. self depth = 8 ifTrue:[ "In 8 bit depth it's usually a good idea to use a stipple pattern" port fillColor: (form balancedPatternFor: fillColor)]. ^self]. "fillColor is some translucent color" self depth > 8 ifTrue:[ "BitBlt setup for alpha masked transfer" port fillPattern: fillColor. self depth = 16 ifTrue:[port alphaBits: fillColor privateAlpha; combinationRule: 30] ifFalse:[port combinationRule: Form blend]. ^self]. "Can't represent actual transparency -- use stipple pattern" screen := self translucentMaskFor: fillColor alpha depth: self depth. patternWord := form pixelWordFor: fillColor. port fillPattern: (screen collect: [:maskWord | maskWord bitAnd: patternWord]). port combinationRule: Form paint. ! ! !FormCanvas methodsFor: 'private' stamp: 'MarcusDenker 3/24/2012 21:31' prior: 22579481! setForm: aForm self reset. form := aForm. port := GrafPort toForm: form. ! ! !FormCanvas methodsFor: 'private' stamp: 'ar 6/22/1999 14:06' prior: 22579626! setOrigin: aPoint clipRect: aRectangle origin := aPoint. clipRect := aRectangle. port clipRect: aRectangle. ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/9/2013 11:52' prior: 67609536! setPaintColor: aColor "Install a new color used for filling." | paintColor screen patternWord | paintColor := aColor. paintColor ifNil: [paintColor := Color transparent]. paintColor isColor ifFalse: [ (paintColor isKindOf: InfiniteForm) ifFalse: [^self error:'Cannot install color']. ^port fillPattern: paintColor; combinationRule: Form paint]. "Okay, so paintColor really *is* a color" port sourceForm: nil. (paintColor isTranslucent) ifFalse: [ port fillPattern: paintColor. port combinationRule: Form paint. self depth = 8 ifTrue: [ port fillColor: (form balancedPatternFor: paintColor)]. ^self]. "paintColor is translucent color" self depth > 8 ifTrue: [ "BitBlt setup for alpha mapped transfer" port fillPattern: paintColor. self depth = 16 ifTrue: [port alphaBits: paintColor privateAlpha; combinationRule: 31] ifFalse: [port combinationRule: Form blend]. ^self]. "Can't represent actual transparency -- use stipple pattern" screen := self translucentMaskFor: paintColor alpha depth: self depth. patternWord := form pixelWordFor: paintColor. port fillPattern: (screen collect: [:maskWord | maskWord bitAnd: patternWord]). port combinationRule: Form paint ! ! !FormCanvas methodsFor: 'other' stamp: '' prior: 22574236! showAt: pt ^ form displayAt: pt! ! !FormCanvas methodsFor: 'other' stamp: 'ar 5/28/2000 12:09' prior: 22574335! showAt: pt invalidRects: updateRects | blt | blt := (BitBlt current toForm: Display) sourceForm: form; combinationRule: Form over. updateRects do: [:rect | blt sourceRect: rect; destOrigin: rect topLeft + pt; copyBits]! ! !FormCanvas methodsFor: 'drawing-images' stamp: 'tpr 9/15/2004 10:27' prior: 22561462! stencil: stencilForm at: aPoint sourceRect: sourceRect color: aColor "Flood this canvas with aColor wherever stencilForm has non-zero pixels" self setPaintColor: aColor. port colorMap: stencilForm maskingMap. port stencil: stencilForm at: aPoint + origin sourceRect: sourceRect.! ! !FormCanvas methodsFor: 'drawing-support' stamp: 'IgorStasenko 7/18/2011 18:21' prior: 22567987! transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock smoothing: cellSize "Note: This method has been originally copied from TransformationMorph." | innerRect patchRect sourceQuad warp start subCanvas rule| (aDisplayTransform isPureTranslation) ifTrue:[ ^aBlock value: (self copyOffset: aDisplayTransform offset negated truncated clipRect: aClipRect) ]. "Prepare an appropriate warp from patch to innerRect" innerRect := aClipRect. patchRect := (aDisplayTransform globalBoundsToLocal: innerRect) truncated. sourceQuad := (aDisplayTransform sourceQuadFor: innerRect) collect: [:p | p - patchRect topLeft]. warp := self warpFrom: sourceQuad toRect: innerRect. warp cellSize: cellSize. "Render the submorphs visible in the clipping rectangle, as patchForm" start := (self depth = 1) "If this is true B&W, then we need a first pass for erasure." ifTrue: [1] ifFalse: [2]. "If my depth has alpha, do blending rather than paint" rule := self depth = 32 ifTrue: [Form blend] ifFalse: [Form paint]. start to: 2 do: [:i | "If i=1 we first make a shadow and erase it for opaque whites in B&W" subCanvas := self class extent: patchRect extent depth: self depth. i=1 ifTrue: [ warp combinationRule: Form erase ] ifFalse: [ warp combinationRule: rule]. subCanvas translateBy: patchRect topLeft negated during:[:offsetCanvas| aBlock value: offsetCanvas]. warp sourceForm: subCanvas form; warpBits. warp sourceForm: nil. subCanvas := nil "release space for next loop"] ! ! !FormCanvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 03:02' prior: 22569586! translateBy: delta during: aBlock "Set a translation only during the execution of aBlock." ^aBlock value: (self copyOffset: delta)! ! !FormCanvas methodsFor: 'drawing-support' stamp: 'ar 6/17/1999 02:55' prior: 22569794! translateTo: newOrigin clippingTo: aRectangle during: aBlock "Set a new origin and clipping rectangle only during the execution of aBlock." aBlock value: (self copyOrigin: newOrigin clipRect: aRectangle)! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/12/2013 13:36' prior: 67669229! translucentMaskFor: alphaValue depth: d "Return a pattern representing a mask usable for stipple transparency" ^(self translucentPatterns at: d) at: ((alphaValue min: 1.0 max: 0.0) * 4) rounded + 1 ! ! !FormCanvas methodsFor: 'private' stamp: 'FernandoOlivero 9/12/2013 13:36' prior: 67669525! translucentPatterns ^ self class translucentPatterns! ! !FormCanvas methodsFor: 'other' stamp: 'ar 5/28/2000 12:12' prior: 22574636! warpFrom: sourceQuad toRect: destRect ^ (WarpBlt current toForm: port destForm) combinationRule: Form paint; sourceQuad: sourceQuad destRect: (destRect translateBy: origin); clipRect: clipRect! ! !FormCanvas methodsFor: 'drawing-images' stamp: 'ar 12/30/2001 16:36' prior: 22561824! warpImage: aForm transform: aTransform at: extraOffset sourceRect: sourceRect cellSize: cellSize "Warp the given using the appropriate transform and offset." | tfm | tfm := (MatrixTransform2x3 withOffset: origin) composedWithLocal: aTransform. ^self privateWarp: aForm transform: tfm at: extraOffset sourceRect: sourceRect cellSize: cellSize! ! !DamageRecorder class methodsFor: 'instance creation' stamp: '' prior: 20320098! new ^ super new reset ! ! !DamageRecorder methodsFor: 'recording' stamp: '' prior: 20317506! doFullRepaint "Record that a full redisplay is needed. No further damage rectangles will be recorded until after the next reset." ^ totalRepaint := true. ! ! !DamageRecorder methodsFor: 'recording' stamp: 'StephaneDucasse 2/7/2011 22:25' prior: 20317749! invalidRectsFullBounds: aRectangle "Return a collection of damaged rectangles for the given canvas. If a total repaint has been requested, return the given rectangle." ^ totalRepaint ifTrue: [ Array with: aRectangle] ifFalse: [ invalidRects copy]. ! ! !DamageRecorder methodsFor: 'recording' stamp: 'IgorStasenko 12/22/2012 03:41' prior: 20318090! recordInvalidRect: newRect "Record the given rectangle in my damage list, a list of rectangular areas of the display that should be redraw on the next display cycle." "Details: Damaged rectangles are often identical or overlap significantly. In these cases, we merge them to reduce the number of damage rectangles that must be processed when the display is updated. Moreover, above a certain threshold, we ignore the individual rectangles completely, and simply do a complete repaint on the next cycle." | mergeRect zeroRect | totalRepaint ifTrue: [^ self]. "planning full repaint; don't bother collecting damage" zeroRect := 0@0 corner: 0@0. invalidRects do: [:rect | | a | ((a := (rect intersect: newRect ifNone: [ zeroRect ]) area) > 40 and: ["Avoid combining a vertical and horizontal rects. Can make a big diff and we only test when likely." a > (newRect area // 4) or: [a > (rect area // 4)]]) ifTrue: ["merge rectangle in place (see note below) if there is significant overlap" rect setOrigin: (rect origin min: newRect origin) truncated corner: (rect corner max: newRect corner) truncated. ^ self]]. invalidRects size >= 50 ifTrue: ["if there are too many separate areas, merge them all" mergeRect := Rectangle merging: invalidRects. self reset. invalidRects addLast: mergeRect]. "add the given rectangle to the damage list" "Note: We make a deep copy of all rectangles added to the damage list, since rectangles in this list may be extended in place." newRect hasPositiveExtent ifTrue: [ invalidRects addLast: (newRect topLeft truncated corner: newRect bottomRight truncated). ].! ! !DamageRecorder methodsFor: 'initialization' stamp: 'sma 6/5/2000 11:55' prior: 20317359! reset "Clear the damage list." invalidRects := OrderedCollection new: 15. totalRepaint := false ! ! !DamageRecorder methodsFor: 'testing' stamp: 'dgd 2/22/2003 14:43' prior: 20319820! updateIsNeeded "Return true if the display needs to be updated." ^totalRepaint or: [invalidRects notEmpty]! ! !Morph commentStamp: 'efc 2/26/2003 20:01' prior: 74457912! A Morph (from the Greek "shape" or "form") is an interactive graphical object. General information on the Morphic system can be found at http://minnow.cc.gatech.edu/squeak/30. Morphs exist in a tree, rooted at a World (generally a PasteUpMorph). The morphs owned by a morph are its submorphs. Morphs are drawn recursively; if a Morph has no owner it never gets drawn. To hide a Morph and its submorphs, set its #visible property to false using the #visible: method. The World (screen) coordinate system is used for most coordinates, but can be changed if there is a TransformMorph somewhere in the owner chain. My instance variables have accessor methods (e.g., #bounds, #bounds:). Most users should use the accessor methods instead of using the instance variables directly. Structure: instance var Type Description bounds Rectangle A Rectangle indicating my position and a size that will enclose me. owner Morph My parent Morph, or nil for the top-level Morph, which is a or nil world, typically a PasteUpMorph. submorphs Array My child Morphs. fullBounds Rectangle A Rectangle minimally enclosing me and my submorphs. color Color My primary color. Subclasses can use this in different ways. extension MorphExtension Allows extra properties to be stored without adding a or nil storage burden to all morphs. By default, Morphs do not position their submorphs. Morphs may position their submorphs directly or use a LayoutPolicy to automatically control their submorph positioning. Although Morph has some support for BorderStyle, most users should use BorderedMorph if they want borders.! !BorderedMorph commentStamp: 'kfr 10/27/2003 11:17' prior: 74459642! BorderedMorph introduce borders to morph. Borders have the instanceVariables borderWidth and borderColor. BorderedMorph new borderColor: Color red; borderWidth: 10; openInWorld. BorderedMorph also have a varaity of border styles: simple, inset, raised, complexAltFramed, complexAltInset, complexAltRaised, complexFramed, complexInset, complexRaised. These styles are set using the classes BorderStyle, SimpleBorder, RaisedBorder, InsetBorder and ComplexBorder. BorderedMorph new borderStyle: (SimpleBorder width: 1 color: Color white); openInWorld. BorderedMorph new borderStyle: (BorderStyle inset width: 2); openInWorld. ! !BorderedMorph class methodsFor: 'examples' stamp: 'MarcusDenker 7/8/2012 12:09' prior: 18391383! exampleGradient "self exampleGradient" | morph fs | morph := BorderedMorph new. fs := GradientFillStyle ramp: {0.0 -> Color red. 1.0 -> Color green}. fs origin: morph bounds center. fs direction: (morph bounds width // 2) @ 0. fs radial: true. morph fillStyle: fs. World primaryHand attachMorph: morph.! ! !BorderedMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 5/28/2011 13:31' prior: 18381665! acquireBorderWidth: aBorderWidth "Gracefully acquire the new border width, keeping the interior area intact and not seeming to shift" | delta | (delta := aBorderWidth- self borderWidth) = 0 ifTrue: [^ self]. self bounds: ((self bounds origin - (delta @ delta)) corner: (self bounds corner + (delta @ delta))). self borderWidth: aBorderWidth. self layoutChanged! ! !BorderedMorph methodsFor: 'menu' stamp: 'StephaneDucasse 2/25/2011 18:34' prior: 18389576! addBorderStyleMenuItems: aMenu hand: aHandMorph "Add border-style menu items" | subMenu | subMenu := UIManager default newMenuIn: self for: self. subMenu addStayUpItemSpecial. subMenu addList: {{'border color...' translated. #changeBorderColor:}. {'border width...' translated. #changeBorderWidth:}}. subMenu addLine. BorderStyle borderStyleChoices do: [:sym | (self borderStyleForSymbol: sym) ifNotNil: [subMenu add: sym translated target: self selector: #setBorderStyle: argument: sym]]. aMenu add: 'border style' translated subMenu: subMenu ! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'StephaneDucasse 5/30/2013 21:34' prior: 39520416! addCornerGrips self addMorphBack: (TopLeftGripMorph new target: self; position: self position). self addMorphBack: (TopRightGripMorph new target: self; position: self position). self addMorphBack: (BottomLeftGripMorph new target: self; position: self position). self addMorphBack: (BottomRightGripMorph new target: self; position: self position)! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'IgorStasenko 12/19/2012 17:19' prior: 18385224! addPaneSplitters | splitter remaining target targetX sameX minY maxY targetY sameY minX maxX | self removePaneSplitters. self removeCornerGrips. remaining := submorphs reject: [:each | each layoutFrame rightFraction = 1]. [remaining notEmpty] whileTrue: [target := remaining first. targetX := target layoutFrame rightFraction. sameX := submorphs select: [:each | each layoutFrame rightFraction = targetX]. minY := (sameX detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction. maxY := (sameX detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction. splitter := ProportionalSplitterMorph new. splitter layoutFrame: ( (targetX @ minY corner: targetX @ maxY) asLayoutFrame leftOffset: target layoutFrame rightOffset; topOffset: target layoutFrame topOffset; rightOffset: 4 + target layoutFrame rightOffset; bottomOffset: target layoutFrame bottomOffset). self addMorphBack: (splitter position: self position). remaining := remaining copyWithoutAll: sameX]. remaining := submorphs copy reject: [:each | each layoutFrame bottomFraction = 1]. [remaining notEmpty] whileTrue: [target := remaining first. targetY := target layoutFrame bottomFraction. sameY := submorphs select: [:each | each layoutFrame bottomFraction = targetY]. minX := (sameY detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction. maxX := (sameY detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction. splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself. splitter layoutFrame: ( (minX @ targetY corner: maxX @ targetY) asLayoutFrame leftOffset: target layoutFrame leftOffset; topOffset: target layoutFrame bottomOffset; rightOffset: target layoutFrame rightOffset; bottomOffset: 4 + target layoutFrame bottomOffset ). self addMorphBack: (splitter position: self position). remaining := remaining copyWithoutAll: sameY]. self linkSubmorphsToSplitters. self splitters do: [:each | each comeToFront]. ! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'IgorStasenko 12/19/2012 17:23' prior: 18387391! addPaneVSplitterBetween: leftMorph and: rightMorphs | targetX minY maxY splitter | targetX := leftMorph layoutFrame rightFraction. minY := (rightMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction. maxY := (rightMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction. splitter := ProportionalSplitterMorph new. splitter layoutFrame: ( (targetX @ minY corner: targetX @ maxY) asLayoutFrame leftOffset: leftMorph layoutFrame rightOffset; rightOffset: 4+ leftMorph layoutFrame rightOffset; topOffset: leftMorph layoutFrame topOffset; bottomOffset: leftMorph layoutFrame bottomOffset). self addMorphBack: (splitter position: self position).! ! !BorderedMorph methodsFor: 'accessing' stamp: 'sw 8/6/97 14:34' prior: 18378222! borderColor ^ borderColor! ! !BorderedMorph methodsFor: 'accessing' stamp: 'ar 8/17/2001 16:52' prior: 18378321! borderColor: colorOrSymbolOrNil self doesBevels ifFalse:[ colorOrSymbolOrNil isColor ifFalse:[^self]]. borderColor = colorOrSymbolOrNil ifFalse: [ borderColor := colorOrSymbolOrNil. self changed]. ! ! !BorderedMorph methodsFor: 'initialization' stamp: 'dgd 3/7/2003 15:53' prior: 18383103! borderInitialize "initialize the receiver state related to border" borderColor:= self defaultBorderColor. borderWidth := self defaultBorderWidth! ! !BorderedMorph methodsFor: 'accessing' stamp: 'di 6/20/97 11:24' prior: 18378597! borderInset self borderColor: #inset! ! !BorderedMorph methodsFor: 'accessing' stamp: 'di 6/20/97 11:25' prior: 18378705! borderRaised self borderColor: #raised! ! !BorderedMorph methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:17' prior: 18378818! borderStyle "Work around the borderWidth/borderColor pair" | style | borderColor ifNil: [^BorderStyle default]. borderWidth isZero ifTrue: [^BorderStyle default]. self assureExtension. style := extension borderStyle ifNil: [BorderStyle default]. (borderWidth = style width and: ["Hah!! Try understanding this..." borderColor == style style or: ["#raised/#inset etc" #simple == style style and: [borderColor = style color]]]) ifFalse: [style := borderColor isColor ifTrue: [BorderStyle width: borderWidth color: borderColor] ifFalse: [(BorderStyle perform: borderColor) width: borderWidth "argh."]. extension borderStyle: style]. ^style trackColorFrom: self! ! !BorderedMorph methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:16' prior: 18379596! borderStyle: aBorderStyle "Work around the borderWidth/borderColor pair" aBorderStyle = self borderStyle ifTrue: [^self]. self assureExtension. "secure against invalid border styles" (self canDrawBorder: aBorderStyle) ifFalse: ["Replace the suggested border with a simple one" ^self borderStyle: (BorderStyle width: aBorderStyle width color: (aBorderStyle trackColorFrom: self) color)]. aBorderStyle width = self borderStyle width ifFalse: [self changed]. (aBorderStyle isNil or: [aBorderStyle == BorderStyle default]) ifTrue: [extension borderStyle: nil. borderWidth := 0. ^self changed]. extension borderStyle: aBorderStyle. borderWidth := aBorderStyle width. borderColor := aBorderStyle style == #simple ifTrue: [aBorderStyle color] ifFalse: [aBorderStyle style]. self changed! ! !BorderedMorph methodsFor: 'accessing' stamp: 'di 6/20/97 11:09' prior: 18380498! borderWidth ^ borderWidth! ! !BorderedMorph methodsFor: 'accessing' stamp: 'di 6/4/1999 09:42' prior: 18380596! borderWidth: anInteger borderColor ifNil: [borderColor := Color black]. borderWidth := anInteger max: 0. self changed! ! !BorderedMorph methodsFor: 'menu' stamp: 'dik 6/28/2010 00:41' prior: 18390218! changeBorderColor: evt UIManager default chooseColor: self borderColor for: [:newColor | self borderColor: newColor]! ! !BorderedMorph methodsFor: 'menu' stamp: 'MarcusDenker 9/13/2013 15:55' prior: 68521608! changeBorderWidth: evt | aHand origin handle newWidth | aHand := evt ifNil: [self primaryHand] ifNotNil: [evt hand]. origin := aHand position. handle := HandleMorph new forEachPointDo: [:newPoint | handle removeAllMorphs. handle addMorph: (LineMorph from: origin to: newPoint color: Color black width: 1). newWidth := (newPoint - origin) r asInteger // 5. self borderWidth: newWidth] lastPointDo: [:newPoint | handle deleteBalloon. self halo ifNotNil: [:halo | halo addHandles]]. aHand attachMorph: handle. handle setProperty: #helpAtCenter toValue: true. handle showBalloon: 'Move cursor farther from this point to increase border width. Click when done.' translated hand: evt hand. handle startStepping! ! !BorderedMorph methodsFor: 'geometry' stamp: 'nk 4/5/2001 14:24' prior: 18382103! closestPointTo: aPoint "account for round corners. Still has a couple of glitches at upper left and right corners" | pt | pt := self bounds pointNearestTo: aPoint. self wantsRoundedCorners ifFalse: [ ^pt ]. self bounds corners with: (self bounds insetBy: 6) corners do: [ :out :in | (pt - out) abs < (6@6) ifTrue: [ ^(in + (Point r: 5.0 degrees: (pt - in) degrees)) asIntegerPoint ]. ]. ^pt.! ! !BorderedMorph methodsFor: 'accessing' stamp: 'gvc 5/9/2006 15:50' prior: 39520853! colorForInsets "Return the color to be used for shading inset borders." self owner isSystemWindow ifTrue: [^self owner colorForInsets]. ^super colorForInsets! ! !BorderedMorph methodsFor: 'initialization' stamp: 'dgd 2/14/2003 22:33' prior: 18383329! defaultBorderColor "answer the default border color/fill style for the receiver" ^ Color black! ! !BorderedMorph methodsFor: 'initialization' stamp: 'dgd 2/14/2003 22:36' prior: 18383504! defaultBorderWidth "answer the default border width for the receiver" ^ 2! ! !BorderedMorph methodsFor: 'accessing' stamp: 'di 6/20/97 11:19' prior: 18380787! doesBevels "To return true means that this object can show bevelled borders, and therefore can accept, eg, #raised or #inset as valid borderColors. Must be overridden by subclasses that do not support bevelled borders." ^ true! ! !BorderedMorph methodsFor: 'initialization' stamp: 'MarcusDenker 12/11/2009 23:56' prior: 18383668! initialize "initialize the state of the receiver" super initialize. self borderInitialize! ! !BorderedMorph methodsFor: 'geometry' stamp: 'nk 4/5/2001 14:23' prior: 18382577! intersectionWithLineSegmentFromCenterTo: aPoint "account for round corners. Still has a couple of glitches at upper left and right corners" | pt | pt := super intersectionWithLineSegmentFromCenterTo: aPoint. self wantsRoundedCorners ifFalse: [ ^pt ]. self bounds corners with: (self bounds insetBy: 6) corners do: [ :out :in | (pt - out) abs < (6@6) ifTrue: [ ^(in + (Point r: 5.0 degrees: (pt - in) degrees)) asIntegerPoint ]. ]. ^pt.! ! !BorderedMorph methodsFor: 'testing' stamp: 'FernandoOlivero 9/5/2013 10:55' prior: 74008785! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." (color isColor and: [color isTranslucentButNotTransparent]) ifTrue: [^ true]. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: [^ true]. ^ false ! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'jrp 7/23/2005 22:16' prior: 18388193! linkSubmorphsToSplitters self splitters do: [:each | each splitsTopAndBottom ifTrue: [self submorphsDo: [:eachMorph | (eachMorph ~= each and: [eachMorph layoutFrame bottomFraction = each layoutFrame topFraction]) ifTrue: [each addLeftOrTop: eachMorph]. (eachMorph ~= each and: [eachMorph layoutFrame topFraction = each layoutFrame bottomFraction]) ifTrue: [each addRightOrBottom: eachMorph]]] ifFalse: [self submorphsDo: [:eachMorph | (eachMorph ~= each and: [eachMorph layoutFrame rightFraction = each layoutFrame leftFraction]) ifTrue: [each addLeftOrTop: eachMorph]. (eachMorph ~= each and: [eachMorph layoutFrame leftFraction = each layoutFrame rightFraction]) ifTrue: [each addRightOrBottom: eachMorph]]]]! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'jrp 7/23/2005 00:03' prior: 18389034! removeCornerGrips | corners | corners := self submorphsSatisfying: [:each | each isKindOf: CornerGripMorph]. corners do: [:each | each delete]! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'jrp 7/23/2005 22:28' prior: 18389261! removePaneSplitters self splitters do: [:each | each delete]! ! !BorderedMorph methodsFor: 'lookenhancements' stamp: 'jrp 7/23/2005 22:16' prior: 18389404! splitters ^ self submorphsSatisfying: [:each | each isKindOf: ProportionalSplitterMorph]! ! !BorderedMorph methodsFor: 'accessing' stamp: 'sw 11/29/1999 17:37' prior: 18381536! useSquareCorners self cornerStyle: #square! ! !PasteUpMorph commentStamp: '' prior: 74460333! A morph whose submorphs comprise a paste-up of rectangular subparts which "show through". Anything called a 'Playfield' is a PasteUpMorph. Facilities commonly needed on pages of graphical presentations and on simulation playfields, such as the painting of new objects, turtle trails, gradient fills, background paintings, parts-bin behavior, collision-detection, etc., are (or will be) provided. ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 7/2/2013 17:26' prior: 43518608! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. super acceptDroppingMorph: aMorph event: evt. aMorph submorphsDo: [ :m | (m isKindOf: HaloMorph) ifTrue: [ m delete ] ]. self bringTopmostsToFront! ! !PasteUpMorph methodsFor: 'world state' stamp: 'di 7/15/1999 09:51' prior: 29230142! addMorph: aMorph centeredNear: aPoint "Add the given morph to this world, attempting to keep its center as close to the given point possible while also keeping the it entirely within the bounds of this world." | trialRect delta | trialRect := Rectangle center: aPoint extent: aMorph fullBounds extent. delta := trialRect amountToTranslateWithin: bounds. aMorph position: trialRect origin + delta. self addMorph: aMorph. ! ! !PasteUpMorph methodsFor: 'submorphs-add/remove' stamp: 'RAA 12/16/2000 18:37' prior: 29217201! addMorphFront: aMorph ^self addMorphInFrontOfLayer: aMorph ! ! !PasteUpMorph methodsFor: 'wiw support' stamp: 'dgd 8/31/2004 16:25' prior: 29219689! addMorphInLayer: aMorph super addMorphInLayer: aMorph. aMorph wantsToBeTopmost ifFalse:[self bringTopmostsToFront].! ! !PasteUpMorph methodsFor: 'world state' stamp: 'MarcusDenker 9/13/2013 15:50' prior: 68523426! addMorphs: aMorphOrList "Dump in submorphs, and stepList from aMorphOrList. Used to bring a world, paste-up, or other morph in from an object file." aMorphOrList isMorph ifTrue: [ aMorphOrList privateOwner: nil. aMorphOrList isWorldMorph ifFalse: [ self firstHand attachMorph: aMorphOrList. self startSteppingSubmorphsOf: aMorphOrList] ifTrue: [ self addMorph: aMorphOrList ]. aMorphOrList privateSubmorphs reverseDo: [:m | m privateOwner: nil. self addMorph: m. m changed]. (aMorphOrList instVarNamed: 'stepList') do: [:entry | entry first startSteppingIn: self]] ifFalse: ["list, add them all" aMorphOrList reverseDo: [:m | m privateOwner: nil. self addMorph: m. self startSteppingSubmorphsOf: m. "It may not want this!!" m changed]]! ! !PasteUpMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 3/3/2010 15:49' prior: 29208167! addWorldHaloMenuItemsTo: aMenu hand: aHandMorph "Add standard halo items to the menu, given that the receiver is a World" self addFillStyleMenuItems: aMenu hand: aHandMorph. self addLayoutMenuItems: aMenu hand: aHandMorph. aMenu addLine. self addWorldToggleItemsToHaloMenu: aMenu. aMenu addLine. self addExportMenuItems: aMenu hand: aHandMorph. self addMiscExtrasTo: aMenu. self addDebuggingItemsTo: aMenu hand: aHandMorph. aMenu addLine. aMenu defaultTarget: aHandMorph. ! ! !PasteUpMorph methodsFor: 'menu & halo' stamp: 'sw 4/20/2002 01:38' prior: 29208727! addWorldToggleItemsToHaloMenu: aMenu "Add toggle items for the world to the halo menu" #( (hasDragAndDropEnabledString changeDragAndDrop 'whether I am open to having objects dropped into me') (roundedCornersString toggleCornerRounding 'whether the world should have rounded corners')) do: [:trip | aMenu addUpdating: trip first action: trip second. aMenu balloonTextForLastItem: trip third]! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'ClementBera 10/3/2013 10:30' prior: 69145931! becomeActiveDuring: aBlock "Make the receiver the ActiveWorld during the evaluation of aBlock. Note that this method does deliberately *not* use #ensure: to prevent re-installation of the world on project switches." | priorWorld priorHand priorEvent | priorWorld := ActiveWorld. priorHand := ActiveHand. priorEvent := ActiveEvent. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. "not in event cycle" aBlock on: Error do: [:ex | ActiveWorld := priorWorld. ActiveEvent := priorEvent. ActiveHand := priorHand. ex pass]! ! !PasteUpMorph methodsFor: 'viewing' stamp: 'dgd 4/4/2006 13:58' prior: 29219508! bringTopmostsToFront submorphs select:[:m| m wantsToBeTopmost] thenDo:[:m| self addMorphInLayer: m].! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'MarcusDenker 9/13/2013 16:28' prior: 68524416! bringWindowsFullOnscreen "Make ever SystemWindow on the desktop be totally on-screen, whenever possible." | r | bounds allAreasOutsideList: (self taskbars collect: [ :t | t bounds ]) do: [ :e | r isNil ifTrue: [ r := e ] ifFalse: [ r area > e area ifTrue: [ r ] ifFalse: [ e ] ] ]. (self windowsSatisfying: [ :w | true ]) do: [ :aWindow | aWindow right: (aWindow right min: r right). aWindow bottom: (aWindow bottom min: r bottom). aWindow left: (aWindow left max: r left). aWindow top: (aWindow top max: r top) ]! ! !PasteUpMorph methodsFor: 'world state' stamp: 'alain.plantec 2/6/2009 11:39' prior: 29231758! checkCurrentHandForObjectToPaste | response | self primaryHand pasteBuffer ifNil: [^self]. response := self confirm: ('Hand is holding a Morph in its paste buffer:' translated, '\') withCRs, self primaryHand pasteBuffer printString, ('\', 'Delete it ?' translated) withCRs. response = 1 ifTrue: [self primaryHand pasteBuffer: nil]. ! ! !PasteUpMorph methodsFor: 'world state' stamp: 'IgorStasenko 1/2/2012 19:04' prior: 29232185! chooseClickTarget Cursor crossHair showWhile: [self activeHand waitButton]. Cursor down showWhile: [self activeHand anyButtonPressed]. ^ (self morphsAt: self activeHand cursorPoint) first! ! !PasteUpMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 11/7/2011 22:43' prior: 29213671! cleanseOtherworldlySteppers "If the current project is a morphic one, then remove from its steplist those morphs that are not really in the world" "Utilities cleanseOtherworldlySteppers" | old delta | old := self currentWorld stepListSize. self currentWorld steppingMorphsNotInWorld do: [:m | m delete]. self currentWorld cleanseStepList. (delta := old - self currentWorld stepListSize) > 0 ifTrue: [ self crTrace: delta asString , ' morphs removed from steplist' ]! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'MarianoMartinezPeck 5/2/2012 23:49' prior: 29185091! closeAllWindowsDiscardingChanges World systemWindows do: [:w | [w delete] valueSupplyingAnswer: false]! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'alain.plantec 2/6/2009 17:17' prior: 29185283! closeUnchangedWindows "Present a menu of window titles for all windows with changes, and activate the one that gets chosen." (self confirm: 'Do you really want to close all windows except those with unaccepted edits?' translated) ifFalse: [^ self]. (self windowsSatisfying: [:w | w model canDiscardEdits]) do: [:w | w delete]! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'AlainPlantec 1/9/2010 06:22' prior: 29185706! collapseAll "Collapse all windows" (self windowsSatisfying: [:w | w isCollapsed not]) reverseDo: [:w | w collapseOrExpand. self displayWorld]. self collapseNonWindows! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 1/9/2010 06:07' prior: 29220119! collapseNonWindows self nonWindows reject: [:m | m isSticky] thenDo: [:m | m collapse]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'sw 3/13/2003 13:52' prior: 29220279! commandKeySelectors "Answer my command-key table" | aDict | aDict := self valueOfProperty: #commandKeySelectors ifAbsentPut: [self initializeDesktopCommandKeySelectors]. ^ aDict! ! !PasteUpMorph methodsFor: 'taskbar' stamp: 'MarcusDenker 3/23/2011 15:30' prior: 29217343! createTaskbarIfNecessary "Private - create a new taskbar if not present." self taskbars ifEmpty: [ TaskbarMorph new openInWorld: self. self moveCollapsedWindowsToTaskbar]! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'dgd 2/14/2003 22:35' prior: 29207245! defaultBorderColor "answer the default border color/fill style for the receiver" ^ Color r: 0.861 g: 1.0 b: 0.722! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'dgd 2/14/2003 22:38' prior: 29207444! defaultBorderWidth "answer the default border width for the receiver" ^ 1! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'dgd 2/14/2003 22:29' prior: 29207597! defaultColor "answer the default color/fill style for the receiver" ^ Color r: 0.8 g: 1.0 b: 0.6! ! !PasteUpMorph methodsFor: 'halos and balloon help' stamp: 'sw 1/10/2000 16:44' prior: 29206022! defersHaloOnClickTo: aSubMorph "If a cmd-click on aSubMorph would make it a preferred recipient of the halo, answer true" ^ true ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'dgd 9/11/2004 20:45' prior: 29220535! delayedInvokeWorldMenu: evt self addAlarm: #invokeWorldMenu: with: evt after: 200! ! !PasteUpMorph methodsFor: 'world state' stamp: 'StephaneDucasse 2/9/2011 17:59' prior: 29232598! deleteAllHalos "self halt. self haloMorphs do: [:each | (each target isKindOf: SelectionMorph) ifTrue: [each target delete]]. self hands do: [:each | each removeHalo]"! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:20' prior: 42849528! discoveredWorldMenu ^ owner discoveredWorldMenu ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'sw 3/13/2003 12:19' prior: 29220897! dispatchCommandKeyInWorld: aChar event: evt "Dispatch the desktop command key if possible. Answer whether handled" | aMessageSend | aMessageSend := self commandKeySelectors at: aChar ifAbsent: [^ false]. aMessageSend selector numArgs = 0 ifTrue: [aMessageSend value] ifFalse: [aMessageSend valueWithArguments: (Array with: evt)]. ^ true ! ! !PasteUpMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:29' prior: 43519072! dispatchKeystroke: anEvent anEvent keyCharacter == Character tab ifTrue: [ self tabAmongFields ifTrue: [ ^ self tabHitWithEvent: anEvent ] ]! ! !PasteUpMorph methodsFor: 'world state' stamp: 'di 9/19/2000 22:17' prior: 29233446! dragThroughOnDesktop: evt "Draw out a selection rectangle" | selection | selection := SelectionMorph newBounds: (evt cursorPoint extent: 8@8). self addMorph: selection. ^ selection extendByHand: evt hand ! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'MarcusDenker 10/10/2013 23:47' prior: 71891088! drawBackgroundSketchOn: aCanvas backgroundMorph ifNil: [ ^ self ]. self clipSubmorphs ifTrue: [ aCanvas clipBy: self clippingBounds during: [ :canvas | canvas fullDrawMorph: backgroundMorph ] ] ifFalse: [ aCanvas fullDrawMorph: backgroundMorph ]! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 22:54' prior: 42849997! drawGridOn: aCanvas (self griddingOn and: [ self gridVisible ]) ifTrue: [ aCanvas fillRectangle: self bounds fillStyle: (self gridFormOrigin: self gridOrigin grid: self gridModulus background: nil line: Color lightGray) ]! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 22:54' prior: 42850361! drawOn: aCanvas "Draw in order: - background color - grid, if any - background sketch, if any Later (in drawSubmorphsOn:) I will skip drawing the background sketch." super drawOn: aCanvas. self drawGridOn: aCanvas. self drawBackgroundSketchOn: aCanvas! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 6/27/2013 19:19' prior: 42850721! drawSubmorphsOn: aCanvas "Display submorphs back to front, but skip my background sketch." | drawBlock | submorphs isEmpty ifTrue: [ ^ self ]. drawBlock := [ :canvas | submorphs reverseDo: [ :m | m ~~ backgroundMorph ifTrue: [ canvas fullDrawMorph: m ] ] ]. self clipSubmorphs ifTrue: [ aCanvas clipBy: (aCanvas clipRect intersect: self clippingBounds ifNone: [ ^ self ]) during: drawBlock ] ifFalse: [ drawBlock value: aCanvas ]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 3/3/2010 15:32' prior: 29221336! drawingClass ^ ImageMorph! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'sw 2/4/2001 00:54' prior: 29196398! dropEnabled "Get this morph's ability to add and remove morphs via drag-n-drop." ^ (self valueOfProperty: #dropEnabled) ~~ false ! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 38058996! dropFiles: anEvent "Handle a number of dropped files from the OS. TODO: - use a more general mechanism for figuring out what to do with the file (perhaps even offering a choice from a menu) - remember the resource location or (when in browser) even the actual file handle" | numFiles stream handler | Smalltalk tools userManager canDropOSFile ifFalse: [ ^ self ]. numFiles := anEvent contents. 1 to: numFiles do: [:i | (stream := FileStream requestDropStream: i) ifNotNil: [ handler := ExternalDropHandler lookupExternalDropHandler: stream. [handler ifNotNil: [handler handle: stream in: self dropEvent: anEvent]] ensure: [stream close]]].! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'stephane.ducasse 9/25/2008 13:33' prior: 29185971! expandAll "Expand all windows" (self windowsSatisfying: [:w | w isCollapsed]) reverseDo: [:w | w collapseOrExpand. self displayWorld]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'nk 1/6/2004 12:38' prior: 29221435! extractScreenRegion: poly andPutSketchInHand: hand "The user has specified a polygonal area of the Display. Now capture the pixels from that region, and put in the hand as a Sketch." | screenForm outline topLeft innerForm exterior | outline := poly shadowForm. topLeft := outline offset. exterior := (outline offset: 0@0) anyShapeFill reverse. screenForm := Form fromDisplay: (topLeft extent: outline extent). screenForm eraseShape: exterior. innerForm := screenForm trimBordersOfColor: Color transparent. innerForm isAllWhite ifFalse: [hand attachMorph: (self drawingClass withForm: innerForm)]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'MarcusDenker 9/29/2013 15:30' prior: 68892470! findAChangeSorter: evt "Locate a change sorter, open it, and bring it to the front. Create one if necessary" | changeSorterClass | changeSorterClass := Smalltalk tools changeSorter. self findAWindowSatisfying: [:aWindow | aWindow model isKindOf: changeSorterClass] orMakeOneUsing: [changeSorterClass open]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'nice 1/5/2010 15:59' prior: 29222552! findAWindowSatisfying: qualifyingBlock orMakeOneUsing: makeBlock "Locate a window satisfying a block, open it, and bring it to the front. Create one if necessary, by using the makeBlock" submorphs do: [:aMorph | | aWindow | (((aWindow := aMorph renderedMorph) isSystemWindow) and: [qualifyingBlock value: aWindow]) ifTrue: [aWindow isCollapsed ifTrue: [aWindow expand]. aWindow activateAndForceLabelToShow. ^self]]. "None found, so create one" makeBlock value openInWorld! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'ClementBera 9/30/2013 11:02' prior: 68976383! findWindow: evt "Present a menu names of windows and naked morphs, and activate the one that gets chosen. Collapsed windows appear below line, expand if chosen; naked morphs appear below second line; if any of them has been given an explicit name, that is what's shown, else the class-name of the morph shows; if a naked morph is chosen, bring it to front and have it don a halo." | menu expanded collapsed nakedMorphs | menu := UIManager default newMenuIn: self for: self. expanded := self windowsSatisfying: [:w | w isCollapsed not]. collapsed := self windowsSatisfying: [:w | w isCollapsed]. nakedMorphs := self submorphsSatisfying:[:m | m isSystemWindow not]. (expanded isEmpty and: [collapsed isEmpty and: [nakedMorphs isEmpty]]) ifTrue: [^ Beeper beep]. (expanded asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #activateAndForceLabelToShow. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. (expanded isEmpty or: [ collapsed isEmpty and: [ nakedMorphs isEmpty ]]) ifFalse: [menu addLine]. (collapsed asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #collapseOrExpand. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. nakedMorphs isEmpty ifFalse: [menu addLine]. (nakedMorphs asSortedCollection: [:w1 :w2 | w1 class name caseInsensitiveLessOrEqual: w2 class name]) do: [:w | menu add: w class name target: w action: #comeToFrontAndAddHalo]. menu addTitle: 'find window' translated. menu popUpEvent: evt in: self.! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'janniklaval 3/8/2011 12:31' prior: 29187910! fitAll "Fit all windows as visible" |allowedArea| allowedArea := RealEstateAgent maximumUsableAreaInWorld: World. (self windowsSatisfying: [:w | w isCollapsed not]) reverseDo:[:w | w extent: w initialExtent. w bounds:((w position extent: w initialExtent) translatedAndSquishedToBeWithin: allowedArea). ]. self displayWorld! ! !PasteUpMorph methodsFor: 'world state' stamp: 'nice 1/5/2010 15:59' prior: 29233730! flashRects: rectangleList color: aColor "For testing. Flashes the given list of rectangles on the Display so you can watch incremental redisplay at work." "Details: Uses two reverses so that the display is restored to its original state. This is necessary when in deferred update mode." | blt | blt := (BitBlt current toForm: Display) sourceForm: nil; sourceOrigin: 0@0; clipRect: self viewBox; combinationRule: Form reverse. rectangleList do: [:r | | screenRect | screenRect := r translateBy: self viewBox origin. blt destRect: screenRect; copyBits. Display forceToScreen: screenRect; forceDisplayUpdate. (Delay forMilliseconds: 15) wait. blt destRect: screenRect; copyBits. Display forceToScreen: screenRect; forceDisplayUpdate]. ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'IgorStasenko 1/2/2012 19:05' prior: 29223152! grabDrawingFromScreen: evt "Allow the user to specify a rectangular area of the Display, capture the pixels from that area, and use them to create a new drawing morph. Attach the result to the hand." | m | m := self drawingClass withForm: Form fromUser. evt hand position: self activeHand cursorPoint. "update hand pos after Sensor loop in fromUser" evt hand attachMorph: m.! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'di 10/18/2001 02:58' prior: 29223607! grabLassoFromScreen: evt "Allow the user to specify a polygonal area of the Display, capture the pixels from that area, and use them to create a new drawing morph. Attach the result to the hand." self extractScreenRegion: (PolygonMorph fromHandFreehand: evt hand) andPutSketchInHand: evt hand ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'di 10/18/2001 01:13' prior: 29223979! grabRubberBandFromScreen: evt "Allow the user to specify a polygonal area of the Display, capture the pixels from that area, and use them to create a new drawing morph. Attach the result to the hand." self extractScreenRegion: (PolygonMorph fromHand: evt hand) andPutSketchInHand: evt hand! ! !PasteUpMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/8/2010 00:31' prior: 29194931! gridFormOrigin: origin grid: smallGrid background: backColor line: lineColor | bigGrid gridForm gridOrigin | gridOrigin := origin \\ smallGrid. bigGrid := (smallGrid asPoint x) @ (smallGrid asPoint y). gridForm := Form extent: bigGrid depth: Display depth. backColor ifNotNil: [gridForm fillWithColor: backColor]. gridOrigin x to: gridForm width by: smallGrid x do: [:x | gridForm fill: (x@0 extent: 1@gridForm height) fillColor: lineColor]. gridOrigin y to: gridForm height by: smallGrid y do: [:y | gridForm fill: (0@y extent: gridForm width@1) fillColor: lineColor]. ^ InfiniteForm with: gridForm ! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:29' prior: 29203534! gridModulus ^ self gridSpec extent! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 16:47' prior: 29203641! gridModulus: newModulus self gridSpecPut: (self gridOrigin extent: newModulus). self changed! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:28' prior: 29203807! gridOrigin ^ self gridSpec origin! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:29' prior: 29203913! gridOrigin: newOrigin ^ self gridSpecPut: (newOrigin extent: self gridModulus)! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:26' prior: 29204064! gridSpec "Gridding rectangle provides origin and modulus" ^ self valueOfProperty: #gridSpec ifAbsent: [0@0 extent: 8@8]! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:28' prior: 29204257! gridSpecPut: newSpec "Gridding rectangle provides origin and modulus" ^ self setProperty: #gridSpec toValue: newSpec! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 16:11' prior: 29204447! gridVisible ^ self hasProperty: #gridVisible! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 16:47' prior: 29204564! gridVisibleOnOff self setProperty: #gridVisible toValue: self gridVisible not. self changed! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'dgd 12/13/2003 19:30' prior: 29204731! gridVisibleString "Answer a string to be used in a menu offering the opportunity to show or hide the grid" ^ (self gridVisible ifTrue: [''] ifFalse: ['']) , 'show grid when gridding' translated! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 13:15' prior: 29203006! griddingOn ^ griddingOn ifNil: [false]! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'di 8/24/2000 16:48' prior: 29203117! griddingOnOff griddingOn := self griddingOn not. self changed! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'dgd 12/13/2003 19:30' prior: 29203254! griddingString "Answer a string to use in a menu offering the user the opportunity to start or stop using gridding" ^ (self griddingOn ifTrue: [''] ifFalse: ['']) , 'use gridding' translated! ! !PasteUpMorph methodsFor: 'world state' stamp: 'alain.plantec 5/30/2008 14:07' prior: 29234736! handleFatalDrawingError: errMsg "Handle a fatal drawing error." Display deferUpdates: false. "Just in case" self primitiveError: errMsg. "Hm... we should jump into a 'safe' worldState here, but how do we find it?!!"! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:27' prior: 43519327! handlesKeyboard: evt ^ evt keyCharacter == Character tab and: [ self tabAmongFields ]! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'ar 10/3/2000 22:46' prior: 29198917! handlesMouseDown: evt ^true! ! !PasteUpMorph methodsFor: 'thumbnail' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37846190! icon ^ Smalltalk ui icons homeIcon! ! !PasteUpMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 7/18/2010 15:20' prior: 29207791! initialize "initialize the state of the receiver" super initialize. self enableDragNDrop. self clipSubmorphs: true! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'nice 1/5/2010 15:59' prior: 29224347! initializeDesktopCommandKeySelectors "Provide the starting settings for desktop command key selectors. Answer the dictionary." "ActiveWorld initializeDesktopCommandKeySelectors" | dict | dict := IdentityDictionary new. self defaultDesktopCommandKeyTriplets do: [:trip | | messageSend | messageSend := MessageSend receiver: trip second selector: trip third. dict at: trip first put: messageSend]. self setProperty: #commandKeySelectors toValue: dict. ^ dict ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 2/17/2010 09:35' prior: 29224905! invokeWorldMenu: evt "Put up the world menu, triggered by the passed-in event." | menu | self bringTopmostsToFront. "put up screen menu" (menu := self worldMenu) popUpEvent: evt in: self. ^ menu! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 2/17/2010 01:53' prior: 29225188! invokeWorldMenuFromEscapeKey self invokeWorldMenu: ActiveEvent! ! !PasteUpMorph methodsFor: 'testing' stamp: 'StephaneDucasse 6/28/2013 13:17' prior: 42851272! isEasySelecting "This is to isolate easySelection predicate. Selectors in holders make no sense so we are limiting easy selection to the worldMorph. It would also make sense in playfield so feel free to adjust this predicate. Selection can always be forced by using the shift before mouse down." ^ false! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:28' prior: 43519517! keyStroke: anEvent "A keystroke has been made. Service event handlers and, if it's a keystroke presented to the world, dispatch it to #unfocusedKeystroke:" super keyStroke: anEvent. "Give event handlers a chance" self selectedObject ifNotNil: [ :selected | selected moveOrResizeFromKeystroke: anEvent ]. self dispatchKeystroke: anEvent! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'tbn 11/4/2008 09:15' prior: 29225325! keyboardNavigationHandler "Answer the receiver's existing keyboardNavigationHandler, or nil if none." | aHandler | aHandler := self valueOfProperty: #keyboardNavigationHandler ifAbsent: [^ nil]. (aHandler hasProperty: #moribund) ifTrue: "got clobbered in another project" [self removeProperty: #keyboardNavigationHandler. ^ nil]. ^ aHandler! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'sw 3/18/2003 23:10' prior: 29225749! keyboardNavigationHandler: aHandler "Set the receiver's keyboard navigation handler as indicated. A nil argument means to remove the handler" aHandler ifNil: [self removeProperty: #keyboardNavigationHandler] ifNotNil: [self setProperty: #keyboardNavigationHandler toValue: aHandler]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'GuillermoPolito 9/4/2010 17:37' prior: 29226130! keystrokeInWorld: evt "A keystroke was hit when no keyboard focus was set, so it is sent here to the world instead." | aChar ascii | aChar := evt keyCharacter. (ascii := aChar asciiValue) = 27 ifTrue: "escape key" [^ self invokeWorldMenuFromEscapeKey]. (self navigationKey: evt) ifTrue: [^self]. (evt controlKeyPressed not and: [(#(1 4 8 28 29 30 31 32) includes: ascii) "home, end, backspace, arrow keys, space" and: [self keyboardNavigationHandler notNil]]) ifTrue: [self keyboardNavigationHandler navigateFromKeystroke: aChar]. (evt commandKeyPressed and: [Editor cmdKeysInText]) ifTrue: [^ self dispatchCommandKeyInWorld: aChar event: evt]. "It was unhandled. Remember the keystroke." self lastKeystroke: evt keyString. self triggerEvent: #keyStroke! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 12/13/2009 08:11' prior: 29226999! lastKeystroke "Answer the last keystroke fielded by the receiver" ^ self valueOfProperty: #lastKeystroke ifAbsent: ['']! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 12/13/2009 08:12' prior: 29227206! lastKeystroke: aString "Remember the last keystroke fielded by the receiver" ^ self setProperty: #lastKeystroke toValue: aString! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/22/2012 18:54' prior: 29227424! makeAScreenshot | filePrefix | filePrefix := 'PharoScreenshot'. (UIManager default chooseFrom: {'The entire world' translated. 'A selected area' translated} values: #(#world #area ) message: 'What do you want to shoot ?' translated title: 'Make a screenshot') ifNotNil: [:choice | |form | form := choice = #world ifTrue: [World imageForm] ifFalse: [Form fromUser]. PNGReadWriter putForm: form onFileNamed: (FileSystem workingDirectory / filePrefix , 'png') nextVersion] ! ! !PasteUpMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 6/27/2013 19:34' prior: 42851683! modalWindow: aMorph (self valueOfProperty: #modalWindow) ifNotNil: [ :morph | morph doCancel ]. self setProperty: #modalWindow toValue: aMorph. aMorph ifNotNil: [ self when: #aboutToLeaveWorld send: #removeModalWindow to: self ]! ! !PasteUpMorph methodsFor: 'user interface' stamp: 'dgd 2/22/2003 14:11' prior: 29219084! modelWakeUp "I am the model of a SystemWindow, that has just been activated" | aWindow | owner isNil ifTrue: [^self]. "Not in Morphic world" (owner isKindOf: TransformMorph) ifTrue: [^self viewBox: self fullBounds]. (aWindow := self containingWindow) ifNotNil: [self viewBox = aWindow panelRect ifFalse: [self viewBox: aWindow panelRect]]! ! !PasteUpMorph methodsFor: 'Morphic-Base-Basic' stamp: 'adrian_lienhard 7/19/2009 20:50' prior: 29176582! morphToDropFrom: aMorph "Given a morph being carried by the hand, which the hand is about to drop, answer the actual morph to be deposited. Normally this would be just the morph itself, but several unusual cases arise, which this method is designed to service." ^aMorph ! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'ar 2/23/2001 16:44' prior: 29199642! morphToGrab: event "Return the morph to grab from a mouse down event. If none, return nil." self submorphsDo:[:m| ((m rejectsEvent: event) not and:[m fullContainsPoint: event cursorPoint]) ifTrue:[^m]. ]. ^nil! ! !PasteUpMorph methodsFor: 'submorphs-accessing' stamp: 'nk 7/4/2003 16:49' prior: 29216384! morphsInFrontOf: someMorph overlapping: aRectangle do: aBlock "Include hands if the receiver is the World" self handsDo:[:m| m == someMorph ifTrue:["Try getting out quickly" owner ifNil:[^self]. ^owner morphsInFrontOf: self overlapping: aRectangle do: aBlock]. "The hand only overlaps if it's not the hardware cursor" m needsToBeDrawn ifTrue:[ (m fullBoundsInWorld intersects: aRectangle) ifTrue:[aBlock value: m]]]. ^super morphsInFrontOf: someMorph overlapping: aRectangle do: aBlock! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 7/2/2013 17:40' prior: 43519965! mouseDown: evt "Handle a mouse down event." | grabbedMorph handHadHalos | (self defaultYellowButtonMenuEnabled and: [evt yellowButtonPressed]) ifTrue: [ (self yellowButtonActivity: evt shiftPressed) ifTrue: [ ^ self ]]. grabbedMorph := self morphToGrab: evt. grabbedMorph ifNotNil: [ grabbedMorph isSticky ifTrue: [^self]. ^evt hand grabMorph: grabbedMorph]. (super handlesMouseDown: evt) ifTrue: [^super mouseDown: evt]. handHadHalos := evt hand halo notNil. evt hand removeHalo. "shake off halos" self isWorldMorph ifTrue: [ self currentWindow ifNotNil: [:topWindow | SystemWindow passivateTopWindow]]. "since pasteup will release keyboard focus now" evt hand releaseKeyboardFocus. "shake of keyboard foci" (evt shiftPressed not and: [ self isWorldMorph not and: [ self wantsEasySelection not ]]) ifTrue: [ "explicitly ignore the event if we're not the world and we'll not select, so that we could be picked up if need be" evt wasHandled: false. ^ self. ]. ( evt shiftPressed or: [ self wantsEasySelection ] ) ifTrue: [ "We'll select on drag, let's decide what to do on click" | clickSelector | clickSelector := nil. evt shiftPressed ifTrue: [ clickSelector := #findWindow:.] ifFalse: [self isWorldMorph ifTrue: [clickSelector := handHadHalos ifTrue: [ #delayedInvokeWorldMenu: ] ifFalse: [ #invokeWorldMenu: ]]]. evt hand waitForClicksOrDrag: self event: evt selectors: { clickSelector. nil. nil. #dragThroughOnDesktop: } threshold: 5. ] ifFalse: [ "We wont select, just bring world menu if I'm the world" self isWorldMorph ifTrue: [ handHadHalos ifTrue: [ self delayedInvokeWorldMenu: evt ] ifFalse: [ self invokeWorldMenu: evt ] ] ]. ! ! !PasteUpMorph methodsFor: 'taskbar' stamp: 'MarcusDenker 3/23/2011 15:29' prior: 29217600! moveCollapsedWindowsToTaskbar "Move collapsed windows to the taskbar." (self systemWindows select: [:w | w isCollapsed]) do: [:w | w restore; minimize]! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'AlainPlantec 10/17/2009 17:32' prior: 29228044! nonWindows ^ (self submorphs select: [:m | (m isSystemWindow) not and: [m wantsToBeTopmost not]])! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'sw 7/6/1999 13:26' prior: 29196609! originAtCenter ^ self hasProperty: #originAtCenter! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'stephane.ducasse 5/21/2009 15:15' prior: 29196754! positionNear: aPoint forExtent: anExtent adjustmentSuggestion: adjustmentPoint "Compute a plausible positioning for adding a subpart of size anExtent, somewhere near aPoint, using adjustmentPoint as the unit of adjustment" | adjustedPosition | adjustedPosition := aPoint. [((self morphsAt: (adjustedPosition + (anExtent // 2))) size > 1) and: "that 1 is self here" [bounds containsPoint: adjustedPosition]] whileTrue: [adjustedPosition := adjustedPosition + adjustmentPoint]. ^ adjustedPosition! ! !PasteUpMorph methodsFor: 'private' stamp: 'nk 7/8/2003 09:18' prior: 29238906! privateRemoveMorph: aMorph backgroundMorph == aMorph ifTrue: [ backgroundMorph := nil ]. ^super privateRemoveMorph: aMorph. ! ! !PasteUpMorph methodsFor: 'caching' stamp: 'StephaneDucasse 7/2/2013 17:33' prior: 43521845! releaseCachedState super releaseCachedState. self removeModalWindow. ! ! !PasteUpMorph methodsFor: 'accessing' stamp: 'tak 3/15/2005 17:31' prior: 29189519! removeModalWindow self modalWindow: nil! ! !PasteUpMorph methodsFor: 'taskbar' stamp: 'MarcusDenker 3/23/2011 15:37' prior: 29217837! removeTaskbar "Remove the receiver's taskbars." self taskbars do: [:each | each removeFromWorld]! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:22' prior: 29197342! repelsMorph: aMorph event: ev (aMorph wantsToBeDroppedInto: self) ifFalse: [^ false]. self dropEnabled ifFalse: [^ true]. (self wantsDroppedMorph: aMorph event: ev) ifFalse: [^ true]. ^ super repelsMorph: aMorph event: ev "consults #repelling flag"! ! !PasteUpMorph methodsFor: 'options' stamp: 'ar 11/9/2000 12:49' prior: 29209404! resizeToFit ^self vResizing == #shrinkWrap! ! !PasteUpMorph methodsFor: 'options' stamp: 'dgd 12/13/2003 19:30' prior: 29209519! resizeToFitString "Answer a string, to be used in a self-updating menu, to represent whether the receiver is currently using resize-to-fit or not" ^ (self resizeToFit ifTrue: [''] ifFalse: ['']) , 'resize to fit' translated! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'sw 3/13/2003 13:56' prior: 29228550! respondToCommand: aCharacter bySending: aSelector to: aReceiver "Respond to the command-key use of the given character by sending the given selector to the given receiver. If the selector is nil, retract any prior such setting" aSelector ifNil: [self commandKeySelectors removeKey: aCharacter] ifNotNil: [self commandKeySelectors at: aCharacter put: (MessageSend receiver: aReceiver selector: aSelector)]! ! !PasteUpMorph methodsFor: 'world state' stamp: 'ar 3/18/2001 00:35' prior: 29236743! restoreDisplay World restoreMorphicDisplay. "I don't actually expect this to be called"! ! !PasteUpMorph methodsFor: 'world state' stamp: 'dgd 9/5/2004 19:46' prior: 29236906! restoreMainDockingBarDisplay "Restore the display of docking bars" self dockingBars do: [:each | each updateBounds]! ! !PasteUpMorph methodsFor: 'world state' stamp: 'AlainPlantec 7/9/2013 12:39' prior: 44999197! restoreMorphicDisplay DisplayScreen startUp. ThumbnailMorph recursionReset. self extent: Display extent; viewBox: Display boundingBox; handsDo: [:h | h visible: true; showTemporaryCursor: nil]; resizeBackgroundMorph; restoreMainDockingBarDisplay; fullRepaintNeeded. self defer: [Cursor normal show]. self layoutChanged. ! ! !PasteUpMorph methodsFor: 'gridding' stamp: 'MarcusDenker 5/2/2013 11:35' prior: 36318978! setGridSpec "Gridding rectangle provides origin and modulus" | response result | response := UIManager default request: 'New grid origin (usually 0@0):' translated initialAnswer: self gridOrigin printString. response isEmpty ifTrue: [^ self]. result := [self class compiler evaluate: response] ifError: [^ self]. (result isPoint and: [(result >= (0@0))]) ifTrue: [self gridOrigin: result] ifFalse: [self inform: ('Must be a Point with coordinates (for example 10@10)' translated )]. response := UIManager default request: 'New grid spacing:' translated initialAnswer: self gridModulus printString. response isEmptyOrNil ifTrue: [^ self]. result := [self class compiler evaluate: response] ifError: [^ self]. (result isPoint and: [(result > (0@0)) ]) ifTrue: [self gridModulus: result] ifFalse: [self inform: ('Must be a Point with coordinates (for example 10@10)' translated )]. ! ! !PasteUpMorph methodsFor: 'wiw support' stamp: 'RAA 8/14/2000 12:10' prior: 29219881! shouldGetStepsFrom: aWorld (self isWorldMorph and: [owner notNil]) ifTrue: [ ^self outermostWorldMorph == aWorld ]. ^super shouldGetStepsFrom: aWorld! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 2/13/2010 11:38' prior: 29229054! showImage: aForm "Show an image, possibly attached to the pointer for positioning" HandMorph attach: (World drawingClass withForm: aForm)! ! !PasteUpMorph methodsFor: 'taskbar' stamp: 'MarcusDenker 3/23/2011 15:37' prior: 29218017! showWorldTaskbar: aBoolean "Change the receiver to show the taskbar." aBoolean ifTrue: [self createTaskbarIfNecessary] ifFalse: [self removeTaskbar]! ! !PasteUpMorph methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:39' prior: 29214679! startStepping: aMorph "Add the given morph to the step list. Do nothing if it is already being stepped." ^self startStepping: aMorph at: Time millisecondClockValue selector: #stepAt: arguments: nil stepTime: nil! ! !PasteUpMorph methodsFor: 'project state' stamp: 'MarcusDenker 9/13/2013 15:51' prior: 68525084! steppingMorphsNotInWorld | all | all := self allMorphs. ^ self listOfSteppingMorphs reject: [ :m | all includes: m ] "self currentWorld steppingMorphsNotInWorld do: [:m | m delete]"! ! !PasteUpMorph methodsFor: 'options' stamp: 'sw 7/6/1999 13:36' prior: 29209832! toggleOriginAtCenter | hasIt | hasIt := self hasProperty: #originAtCenter. hasIt ifTrue: [self removeProperty: #originAtCenter] ifFalse: [self setProperty: #originAtCenter toValue: true]! ! !PasteUpMorph methodsFor: 'options' stamp: 'tk 10/30/2001 18:41' prior: 29210102! toggleResizeToFit "Toggle whether the receiver is set to resize-to-fit" self vResizeToFit: self resizeToFit not! ! !PasteUpMorph methodsFor: 'accessing' stamp: 'ar 4/25/2001 17:15' prior: 29189631! useRoundedCorners "Somewhat special cased because we do have to fill Display for this" super useRoundedCorners. self == World ifTrue:[Display bits primFill: 0]. "done so that we *don't* get a flash"! ! !PasteUpMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:14' prior: 42854894! viewBox: newViewBox "I am now displayed within newViewBox; react." super position: newViewBox topLeft. fullBounds := bounds := newViewBox. ! ! !PasteUpMorph methodsFor: 'dropping/grabbing' stamp: 'StephaneDucasse 6/27/2013 19:32' prior: 42855148! wantsDroppedMorph: aMorph event: evt self visible ifFalse: [^ false]. "will be a call to #hidden again very soon" self dropEnabled ifFalse: [^ false]. ^ true! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'AlainPlantec 12/10/2009 11:38' prior: 29200240! wantsEasySelection "Answer if the receiver want easy selection mode" ^ self isEasySelecting ! ! !PasteUpMorph methodsFor: 'halos and balloon help' stamp: 'StephaneDucasse 2/19/2010 16:02' prior: 29206419! wantsHaloFromClick (owner isSystemWindow) ifTrue: [^ false]. ^ true. ! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/18/2010 16:37' prior: 29200424! wantsKeyboardFocusFor: aSubmorph aSubmorph wouldAcceptKeyboardFocus ifTrue: [ ^ true]. ^ super wantsKeyboardFocusFor: aSubmorph! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:28' prior: 43522020! wantsWindowEvent: anEvent ^ self windowEventHandler notNil! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'HenrikSperreJohansen 4/7/2010 09:58' prior: 29200808! windowEvent: anEvent self windowEventHandler ifNotNil: [^self windowEventHandler windowEvent: anEvent]. anEvent type == #windowClose ifTrue: [WorldState quitSession]. ! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'tbn 3/12/2010 01:47' prior: 29201060! windowEventHandler "This is a class variable so it is global to all projects and does not get saved" ^WindowEventHandler! ! !PasteUpMorph methodsFor: 'event handling' stamp: 'tbn 3/12/2010 01:47' prior: 29201260! windowEventHandler: anObject "This is a class variable so it is global to all projects and does not get saved" WindowEventHandler := anObject ! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'nice 1/5/2010 15:59' prior: 29188528! windowsSatisfying: windowBlock | windows | windows := OrderedCollection new. self submorphs do: [:m | | s | ((m isSystemWindow) and: [windowBlock value: m]) ifTrue: [windows addLast: m] ifFalse: [((m isKindOf: TransformationMorph) and: [m submorphs size = 1]) ifTrue: [s := m firstSubmorph. ((s isSystemWindow) and: [windowBlock value: s]) ifTrue: [windows addLast: s]]]]. ^ windows! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04' prior: 42855412! worldMenu ^ owner worldMenu ! ! !PasteUpMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04' prior: 42855527! worldMenuAt: aMenuItemName ^ owner worldMenuAt: aMenuItemName ! ! !WorldMorph commentStamp: '' prior: 74460795! A WorldMorph is a special morph that represents the world. It is a paste up and it holds active hand. A World, the entire Smalltalk screen, is a PasteUpMorph. A World responds true to isWorld.! !WorldMorph class methodsFor: 'system startup' stamp: 'StephaneDucasse 6/27/2013 17:00' prior: 41965496! cleanUp World cleanseOtherworldlySteppers.! ! !WorldMorph class methodsFor: 'setting' stamp: 'StephaneDucasse 6/27/2013 19:29' prior: 41965625! defaultWorldColor ^ Color r: 0.937 g: 0.937 b: 0.937. ! ! !WorldMorph class methodsFor: 'world creation' stamp: 'StephaneDucasse 7/2/2013 16:07' prior: 43523062! installNewWorld "let us play God." [ | man | man := MorphicUIManager new. "we do not use UIManager default because in headless mode there is not such process." man uiProcess ifNotNil: [ man terminateUIProcess ]. self new installForUIProcessReinstall. man spawnNewProcess. ] forkAt: Processor userInterruptPriority! ! !WorldMorph class methodsFor: 'system startup' stamp: 'MarcusDenker 10/15/2013 10:32' prior: 74027624! shutDown World ifNotNil: [:world | world triggerEvent: #aboutToLeaveWorld ]! ! !WorldMorph class methodsFor: 'system startup' stamp: 'MarcusDenker 10/15/2013 10:31' prior: 74027807! startUp World ifNotNil: [:world | world restoreMorphicDisplay]! ! !WorldMorph methodsFor: 'submorphs-add/remove' stamp: 'StephaneDucasse 7/2/2013 17:25' prior: 43523532! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. "Add the given morph to this world and start stepping it if it wants to be." self addMorphFront: aMorph. (aMorph fullBounds intersects: self viewBox) ifFalse: [ Beeper beep. aMorph position: self bounds center ]. aMorph submorphsDo: [ :m | (m isKindOf: HaloMorph) ifTrue: [ m delete ] ]. self bringTopmostsToFront! ! !WorldMorph methodsFor: 'structure' stamp: 'StephaneDucasse 6/27/2013 17:46' prior: 41966122! activeHand ^ worldState activeHand! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57' prior: 41966242! activeHand: aHandMorph "temporarily retained for old main event loops" worldState activeHand: aHandMorph. ! ! !WorldMorph methodsFor: 'alarms-scheduler' stamp: 'StephaneDucasse 6/27/2013 17:23' prior: 41966440! addAlarm: aSelector withArguments: argArray for: aTarget at: scheduledTime "Add a new alarm with the given set of parameters" worldState addAlarm: aSelector withArguments: argArray for: aTarget at: scheduledTime.! ! !WorldMorph methodsFor: 'submorphs-add/remove' stamp: 'StephaneDucasse 7/2/2013 16:30' prior: 43524180! addAllMorphs: array super addAllMorphs: array. array do: [:m | self startSteppingSubmorphsOf: m]. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:56' prior: 41966738! addHand: aHandMorph "Add the given hand to the list of hands for this world." aHandMorph owner ifNotNil: [ aHandMorph owner removeHand: aHandMorph ]. worldState addHand: aHandMorph. aHandMorph privateOwner: self! ! !WorldMorph methodsFor: 'submorphs-accessing' stamp: 'StephaneDucasse 6/27/2013 17:51' prior: 41967046! allMorphsDo: aBlock "Enumerate all morphs in the world, including those held in hands." super allMorphsDo: aBlock. worldState handsReverseDo: [ :h | h allMorphsDo: aBlock ]! ! !WorldMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 6/27/2013 17:22' prior: 41967304! announcer WorldAnnouncer ifNil: [ WorldAnnouncer := Announcer new ]. ^ WorldAnnouncer! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57' prior: 41967475! assuredCanvas ^ worldState assuredCanvas! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 17:50' prior: 41967602! canvas ^ worldState canvas! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:12' prior: 41967711! cleanseStepList "Remove morphs from the step list that are not in this World." worldState cleanseStepListForWorld: self! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 17:31' prior: 41967917! defaultWorldColor ^ self class defaultWorldColor! ! !WorldMorph methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 13:40' prior: 44995720! defer: aValuable worldState defer: aValuable! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 6/27/2013 20:07' prior: 41968050! deleteBalloonTarget: aMorph "Delete the balloon help targeting the given morph" self handsDo: [ :h | h deleteBalloonTarget: aMorph ]! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:20' prior: 41968268! discoveredWorldMenu ^ worldState discoveredWorldMenu! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:29' prior: 43524364! dispatchKeystroke: anEvent "A keystroke was hit when no keyboard focus was set, so it is sent here to the world instead." | aChar ascii | aChar := anEvent keyCharacter. (ascii := aChar asciiValue) = 27 ifTrue: "escape key" [^ self invokeWorldMenuFromEscapeKey]. (self navigationKey: anEvent) ifTrue: [^self]. (anEvent controlKeyPressed not and: [(#(1 4 8 28 29 30 31 32) includes: ascii) "home, end, backspace, arrow keys, space" and: [self keyboardNavigationHandler notNil]]) ifTrue: [self keyboardNavigationHandler navigateFromKeystroke: aChar]. (anEvent commandKeyPressed and: [Editor cmdKeysInText]) ifTrue: [^ self dispatchCommandKeyInWorld: aChar event: anEvent]. "It was unhandled. Remember the keystroke." self lastKeystroke: anEvent keyString. self triggerEvent: #keyStroke. super dispatchKeystroke: anEvent! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:55' prior: 41968405! displayWorld worldState displayWorld: self submorphs: submorphs! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:57' prior: 41968553! displayWorldSafely worldState displayWorldSafely: self. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 17:57' prior: 41968694! doOneCycle "see the comment in doOneCycleFor:" worldState doOneCycleFor: self! ! !WorldMorph methodsFor: 'interaction loop' stamp: 'StephaneDucasse 6/27/2013 19:00' prior: 41968863! doOneCycleNow "see the comment in doOneCycleNowFor:" worldState doOneCycleNowFor: self. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:12' prior: 41969037! doOneSubCycle "Like doOneCycle, but preserves activeHand." worldState doOneSubCycleFor: self! ! !WorldMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 6/27/2013 18:51' prior: 41969213! extent: aPoint super extent: aPoint. worldState viewBox ifNotNil: [ worldState canvas: nil. worldState viewBox: bounds ]! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:51' prior: 41969430! firstHand ^ worldState hands first! ! !WorldMorph methodsFor: 'geometry testing' stamp: 'StephaneDucasse 6/28/2013 13:23' prior: 41969554! fullContainsPoint: pt ^bounds containsPoint: pt ! ! !WorldMorph methodsFor: 'Morphic-Base-Windows' stamp: 'StephaneDucasse 6/28/2013 13:25' prior: 41969697! fullRepaintNeeded worldState doFullRepaint. self windowsSatisfying: [:w | w makeMeVisible. false]. ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:53' prior: 41969885! haloMorphs ^ self hands collect: [ :h | h halo ] thenSelect: [ :halo | halo notNil ]! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:47' prior: 41970057! hands ^ worldState hands! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:57' prior: 41970169! handsDo: aBlock ^ worldState handsDo: aBlock ! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:58' prior: 41970303! handsReverseDo: aBlock ^ worldState handsReverseDo: aBlock! ! !WorldMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 7/1/2013 10:09' prior: 48903696! initialize worldState := WorldState new. super initialize! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/2/2013 16:10' prior: 43525312! install "this method was used to be invoked from onPrimitiveError: the problem is that it cannot be used to recreate the world instance. For this have a look class side installNewWorld." owner := nil. "since we may have been inside another world previously" ActiveWorld := self. World := self. ActiveHand := self hands first. "default" ActiveEvent := nil. submorphs do: [:ss | ss owner isNil ifTrue: [ss privateOwner: self]]. "Transcript that was in outPointers and then got deleted." self viewBox: Display boundingBox. Sensor flushAllButDandDEvents. worldState handsDo: [:h | h initForEvents]. self borderWidth: 0. "default" SystemWindow noteTopWindowIn: self. self displayWorldSafely! ! !WorldMorph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 7/2/2013 16:07' prior: 43526105! installForUIProcessReinstall "This method should be changed because it cannot be invoked from onPrimitiveError: as the previous PasteUpMorph method was used to." | morphs | owner := nil. morphs := World submorphs. "we should decide if we get morph or not. Now submorphs returns an array and this is strange that this is not an OrderedCollection" Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [ :h | h releaseCachedState ]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !WorldMorph methodsFor: 'change reporting' stamp: 'StephaneDucasse 6/27/2013 18:52' prior: 41971371! invalidRect: damageRect from: aMorph "Clip damage reports to my bounds, since drawing is clipped to my bounds." worldState recordDamagedRect: (damageRect intersect: self bounds ifNone: [ ^ self ])! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:17' prior: 41971653! isEasySelecting "This is to isolate easySelection predicate. Selectors in holders make no sense so we are limiting easy selection to the worldMorph. It would also make sense in playfield so feel free to adjust this predicate. Selection can always be forced by using the shift before mouse down." ^ worldState isEasySelecting! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:11' prior: 41972071! isStepping: aMorph ^ worldState isStepping: aMorph! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:10' prior: 41972208! isStepping: aMorph selector: aSelector ^ worldState isStepping: aMorph selector: aSelector! ! !WorldMorph methodsFor: 'classification' stamp: 'StephaneDucasse 6/27/2013 16:48' prior: 41972386! isWorldMorph ^ true! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:09' prior: 41972493! listOfSteppingMorphs ^ worldState listOfSteppingMorphs "self currentWorld listOfSteppingMorphs"! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 6/27/2013 19:43' prior: 41972677! mouseUp: evt self removeAlarm: #invokeWorldMenu:. super mouseUp: evt.! ! !WorldMorph methodsFor: 'geometry' stamp: 'MarcusDenker 10/10/2013 23:48' prior: 71887096! position: aPoint "Prevent moving a world (e.g. via HandMorph>>specialGesture:)" super position: aPoint. self viewBox ifNotNil: [:viewBox | self viewBox: (aPoint extent: viewBox extent)]. ! ! !WorldMorph methodsFor: 'printing' stamp: 'StephaneDucasse 6/27/2013 19:02' prior: 41972829! printOn: aStream "Reimplemented to add a tag showing that the receiver is currently functioning as a 'world', if it is" super printOn: aStream. aStream nextPutAll: ' [world]'! ! !WorldMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/27/2013 19:24' prior: 41973087! privateMoveBy: delta super privateMoveBy: delta. worldState viewBox ifNotNil: [ worldState viewBox: bounds ]! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:33' prior: 43527361! releaseCachedState super releaseCachedState. self cleanseStepList.! ! !WorldMorph methodsFor: 'alarms-scheduler' stamp: 'StephaneDucasse 6/27/2013 18:51' prior: 41973286! removeAlarm: aSelector for: aTarget "Remove the alarm with the given selector" worldState removeAlarm: aSelector for: aTarget! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/27/2013 18:51' prior: 41973499! removeHand: aHandMorph "Remove the given hand from the list of hands for this world." (worldState hands includes: aHandMorph) ifFalse: [ ^ self ]. aHandMorph dropMorphs. self invalidRect: aHandMorph fullBounds. worldState removeHand: aHandMorph! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:08' prior: 41973834! resetWorldMenu worldState resetWorldMenu ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:08' prior: 41973959! runLocalStepMethods worldState runLocalStepMethodsIn: self ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07' prior: 41974101! runStepMethods worldState runStepMethodsIn: self ! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:15' prior: 41974236! sleep worldState canvas ifNil: [^ self "already called (clean this up)"]. Cursor normal show. "restore the normal cursor" worldState canvas: nil. "free my canvas to save space" self fullReleaseCachedState. ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07' prior: 41974530! startStepping: aMorph at: scheduledTime selector: aSelector arguments: args stepTime: stepTime worldState startStepping: aMorph at: scheduledTime selector: aSelector arguments: args stepTime: stepTime.! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 7/2/2013 17:21' prior: 43527512! startSteppingSubmorphsOf: aMorph "Ensure that all submorphs of the given morph that want to be stepped are added to the step list. Typically used after adding a morph to the world." aMorph allMorphsDo: [:m | m wantsSteps ifTrue: [m arrangeToStartSteppingIn: m world]. ] ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 7/2/2013 16:50' prior: 43527871! step owner ifNotNil: [ ^ self runLocalStepMethods ]. ^ super step! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/28/2013 13:07' prior: 41974818! stepListSize ^ worldState stepListSize "Transcript cr; show: self currentWorld stepListSize printString, ' items on steplist as of ', Date dateAndTimeNow printString"! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:07' prior: 41975067! stopStepping: aMorph "Remove the given morph from the step list." worldState stopStepping: aMorph ! ! !WorldMorph methodsFor: 'stepping' stamp: 'StephaneDucasse 6/28/2013 13:06' prior: 41975249! stopStepping: aMorph selector: aSelector "Remove the given morph from the step list." worldState stopStepping: aMorph selector: aSelector ! ! !WorldMorph methodsFor: 'copying' stamp: 'StephaneDucasse 6/27/2013 18:51' prior: 41975470! veryDeepCopyWith: deepCopier "never copy the World" ^ self! ! !WorldMorph methodsFor: 'project state' stamp: 'StephaneDucasse 6/27/2013 18:58' prior: 41975617! viewBox ^ worldState viewBox! ! !WorldMorph methodsFor: 'world state' stamp: 'StephaneDucasse 6/28/2013 13:15' prior: 41975731! viewBox: newViewBox "I am now displayed within newViewBox; react." (self viewBox isNil or: [ self viewBox extent ~= newViewBox extent ]) ifTrue: [ worldState canvas: nil ]. worldState viewBox: newViewBox. super viewBox: newViewBox. worldState handsDo: [ :hand | hand releaseKeyboardFocus ]. self fullRepaintNeeded! ! !WorldMorph methodsFor: 'halos and balloon help' stamp: 'StephaneDucasse 7/2/2013 17:19' prior: 43528032! wantsDirectionHandles ^ false! ! !WorldMorph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 17:13' prior: 43528149! wantsDropFiles: anEvent ^ true! ! !WorldMorph methodsFor: 'private' stamp: 'StephaneDucasse 6/27/2013 19:33' prior: 41976133! wantsDroppedMorph: aMorph event: evt ^ true! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'StephaneDucasse 7/2/2013 17:30' prior: 43528263! wantsWindowEvent: anEvent ^ true! ! !WorldMorph methodsFor: 'structure' stamp: 'StephaneDucasse 6/27/2013 19:03' prior: 41976261! world ^self! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:05' prior: 41976358! worldMenu ^ worldState worldMenu ! ! !WorldMorph methodsFor: 'world menu' stamp: 'StephaneDucasse 6/28/2013 13:04' prior: 41976476! worldMenuAt: aMenuItemName ^ worldState worldMenuAt: aMenuItemName! ! !Morph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 18:27' prior: 41632664! announcer ^ announcer ifNil: [ announcer := Announcer new ].! ! !Morph class methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:12' prior: 26848849! cmdGesturesEnabled ^ CmdGesturesEnabled ifNil: [CmdGesturesEnabled := true]! ! !Morph class methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:12' prior: 26849006! cmdGesturesEnabled: aBoolean CmdGesturesEnabled := aBoolean! ! !Morph class methodsFor: 'settings' stamp: 'SeanDeNigris 4/24/2012 19:51' prior: 26849146! cycleHalosBothDirections ^ CycleHalosBothDirections ifNil: [ CycleHalosBothDirections := false ].! ! !Morph class methodsFor: 'settings' stamp: 'SeanDeNigris 4/24/2012 19:52' prior: 26849325! cycleHalosBothDirections: aBoolean CycleHalosBothDirections := aBoolean.! ! !Morph class methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 13:09' prior: 26849480! defaultYellowButtonMenuEnabled ^ DefaultYellowButtonMenuEnabled ifNil: [DefaultYellowButtonMenuEnabled := false]! ! !Morph class methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 13:02' prior: 26849674! defaultYellowButtonMenuEnabled: aBoolean DefaultYellowButtonMenuEnabled := aBoolean! ! !Morph class methodsFor: 'settings' stamp: 'usmanbhatti 3/6/2012 19:23' prior: 26849836! halosEnabled ^ HalosEnabled ifNil: [ HalosEnabled := true ]! ! !Morph class methodsFor: 'settings' stamp: 'BenjaminVanRyseghem 3/6/2012 19:38' prior: 26849983! halosEnabled: aBoolean HalosEnabled := aBoolean! ! !Morph class methodsFor: 'initialize-release' stamp: '' prior: 26847149! initialize "Morph initialize" "this empty array object is shared by all morphs with no submorphs:" EmptyArray := Array new. ! ! !Morph class methodsFor: 'settings' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 33982936! morphNavigationShortcutsOn: aBuilder "Basic, general navigation shortcut among morphs. #MorphNoCtrl will not work for TextMorphs." (aBuilder shortcut: #navigateFocusForwardCtrl) category: #MorphFocusCtrlNavigation default: Character tab ctrl asKeyCombination do: [ :target :morph :event | morph navigateFocusForward ]. (aBuilder shortcut: #navigateFocusBackwardCtrl) category: #MorphFocusCtrlNavigation default: Character tab shift ctrl asKeyCombination do: [ :target :morph :event | morph navigateFocusBackward ]. (aBuilder shortcut: #navigateFocusForward) category: #MorphFocusNavigation default: Character tab asKeyCombination do: [ :target :morph :event | morph navigateFocusForward ]. (aBuilder shortcut: #navigateFocusBackward) category: #MorphFocusNavigation default: Character tab shift asKeyCombination do: [ :target :morph :event | morph navigateFocusBackward ]! ! !Morph class methodsFor: 'misc' stamp: 'nice 1/5/2010 15:59' prior: 26847874! morphsUnknownToTheirOwners "Return a list of all morphs (other than HandMorphs) whose owners do not contain them in their submorph lists" "Morph morphsUnknownToTheirOwners" | problemMorphs | problemMorphs := OrderedCollection new. self allSubInstances do: [:m | | itsOwner | (m isHandMorph not and: [((itsOwner := m owner) ~~ nil and: [(itsOwner submorphs includes: m) not])]) ifTrue: [problemMorphs add: m]]. ^ problemMorphs! ! !Morph class methodsFor: 'instance creation' stamp: '' prior: 26847480! newBounds: bounds ^ self new privateBounds: bounds! ! !Morph class methodsFor: 'instance creation' stamp: 'jm 5/29/1998 21:28' prior: 26847611! newBounds: bounds color: color ^ (self new privateBounds: bounds) privateColor: color ! ! !Morph class methodsFor: 'instance creation' stamp: 'sw 8/4/97 12:05' prior: 26847775! newSticky ^ self new beSticky! ! !Morph class methodsFor: 'misc' stamp: 'PeterHugossonMiller 9/2/2009 16:13' prior: 26848396! obtainArrowheadFor: aPrompt defaultValue: defaultPoint "Allow the user to supply a point to serve as an arrowhead size. Answer nil if we fail to get a good point" | result | result := UIManager default request: aPrompt initialAnswer: defaultPoint asString. result isEmptyOrNil ifTrue: [^ nil]. ^ [(Point readFrom: result readStream)] on: Error do: [:ex | nil].! ! !Morph class methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/15/2011 17:22' prior: 26847367! unload Smalltalk tools fileList unregisterFileReader: self ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'tk 12/15/1998 14:23' prior: 26821658! abandon "Like delete, but we really intend not to use this morph again. Clean up a few things." self delete! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'AlainPlantec 12/1/2010 09:32' prior: 26662037! aboutToBeGrabbedBy: aHand "The receiver is being grabbed by a hand. Perform necessary adjustments (if any) and return the actual morph that should be added to the hand." | extentToHandToHand | self formerOwner: owner. self formerPosition: self position. (extentToHandToHand := self valueOfProperty: #expandedExtent) ifNotNil: [self removeProperty: #expandedExtent. self extent: extentToHandToHand]. ^self "Grab me"! ! !Morph methodsFor: 'layout' stamp: 'ar 11/12/2000 17:33' prior: 26731449! acceptDroppingMorph: aMorph event: evt "This message is sent when a morph is dropped onto a morph that has agreed to accept the dropped morph by responding 'true' to the wantsDroppedMorph:Event: message. This default implementation just adds the given morph to the receiver." | layout | layout := self layoutPolicy. layout ifNil:[^self addMorph: aMorph]. self privateAddMorph: aMorph atIndex: (layout indexForInserting: aMorph at: evt position in: self).! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 14:10' prior: 46642569! actAsExecutor "Prepare the receiver to act as executor for any resources associated with it" self breakDependents! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'sw 9/28/2001 08:39' prior: 26821845! actWhen "Answer when the receiver, probably being used as a button, should have its action triggered" ^ self valueOfProperty: #actWhen ifAbsentPut: [#buttonDown]! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'sw 9/25/2001 10:23' prior: 26822085! actWhen: aButtonPhase "Set the receiver's actWhen trait" self setProperty: #actWhen toValue: aButtonPhase! ! !Morph methodsFor: 'events-accessing' stamp: 'gvc 9/11/2009 17:43' prior: 40099022! actionMap "Answer an action map" ^self updateableActionMap! ! !Morph methodsFor: 'structure' stamp: 'ar 3/18/2001 00:11' prior: 26806345! activeHand ^ActiveHand! ! !Morph methodsFor: 'menus' stamp: 'sw 11/27/2001 14:36' prior: 26769491! addAddHandMenuItemsForHalo: aMenu hand: aHandMorph "The former charter of this method was to add halo menu items that pertained specifically to the hand. Over time this charter has withered, and most morphs reimplement this method simply to add their morph-specific menu items. So in the latest round, all other implementors in the standard image have been removed. However, this is left here as a hook for the benefit of existing code in client uses." ! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26686625! addAlarm: aSelector after: delayTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: #() after: delayTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26686882! addAlarm: aSelector at: scheduledTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: #() at: scheduledTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26687811! addAlarm: aSelector with: arg1 after: delayTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: (Array with: arg1) after: delayTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26688094! addAlarm: aSelector with: arg1 at: scheduledTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: (Array with: arg1) at: scheduledTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26688379! addAlarm: aSelector with: arg1 with: arg2 after: delayTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: (Array with: arg1 with: arg2) after: delayTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26688684! addAlarm: aSelector with: arg1 with: arg2 at: scheduledTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: (Array with: arg1 with: arg2) at: scheduledTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:35' prior: 26687141! addAlarm: aSelector withArguments: args after: delayTime "Add an alarm (that is an action to be executed once) with the given set of parameters" ^self addAlarm: aSelector withArguments: args at: Time millisecondClockValue + delayTime! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/14/2000 12:15' prior: 26687445! addAlarm: aSelector withArguments: args at: scheduledTime "Add an alarm (that is an action to be executed once) with the given set of parameters" | scheduler | scheduler := self alarmScheduler. scheduler ifNotNil:[scheduler addAlarm: aSelector withArguments: args for: self at: scheduledTime].! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 8/12/2003 23:28' prior: 26822269! addAllMorphs: aCollection ^self privateAddAllMorphs: aCollection atIndex: submorphs size! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 8/12/2003 23:29' prior: 26822434! addAllMorphs: aCollection after: anotherMorph ^self privateAddAllMorphs: aCollection atIndex: (submorphs indexOf: anotherMorph ifAbsent: [submorphs size])! ! !Morph methodsFor: 'menu' stamp: 'sw 11/27/2001 15:21' prior: 26764373! addBorderStyleMenuItems: aMenu hand: aHandMorph "Probably one could offer border-style items even if it's not a borderedMorph, so this remains a loose end for the moment" ! ! !Morph methodsFor: 'layout-menu' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26737081! addCellLayoutMenuItems: aMenu hand: aHand "Cell (e.g., child) related items" | menu sub | menu := UIManager default newMenuIn: self for: self. menu addUpdating: #hasDisableTableLayoutString action: #changeDisableTableLayout. menu addLine. sub := UIManager default newMenuIn: self for: self. #(rigid shrinkWrap spaceFill) do:[:sym| sub addUpdating: #hResizingString: target: self selector: #hResizing: argumentList: (Array with: sym)]. menu add:'horizontal resizing' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(rigid shrinkWrap spaceFill) do:[:sym| sub addUpdating: #vResizingString: target: self selector: #vResizing: argumentList: (Array with: sym)]. menu add:'vertical resizing' translated subMenu: sub. aMenu ifNotNil:[aMenu add: 'child layout' translated subMenu: menu]. ^menu! ! !Morph methodsFor: 'menus' stamp: 'sw 4/27/1998 03:44' prior: 26770010! addCustomHaloMenuItems: aMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand from the halo. To get started, we defer to the counterpart method used with the option-menu, but in time we can have separate menu choices for halo-menus and for option-menus" self addCustomMenuItems: aMenu hand: aHandMorph! ! !Morph methodsFor: 'menus' stamp: 'sw 11/27/2001 07:17' prior: 26770426! addCustomMenuItems: aCustomMenu hand: aHandMorph "Add morph-specific items to the given menu which was invoked by the given hand. This method provides is invoked both from the halo-menu and from the control-menu regimes." ! ! !Morph methodsFor: 'debug and other' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37759791! addDebuggingItemsTo: aMenu hand: aHandMorph aMenu add: 'debug...' translated subMenu: (self buildDebugMenu: aHandMorph). aMenu lastItem icon: Smalltalk ui icons smallDebugIcon! ! !Morph methodsFor: 'updating' stamp: 'IgorStasenko 8/27/2013 16:29' prior: 49418842! addDependent: anObject self announcer weak on: MorphChanged , MorphChangedWithArguments send: #handleUpdate: to: anObject. ^ anObject! ! !Morph methodsFor: 'drop shadows' stamp: 'RAA 1/19/2001 07:51' prior: 26658358! addDropShadow self hasDropShadow ifTrue:[^self]. self changed. self hasDropShadow: true. self shadowOffset: 3@3. self layoutChanged. self changed.! ! !Morph methodsFor: 'drop shadows' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26658592! addDropShadowMenuItems: aMenu hand: aHand | menu | menu := UIManager default newMenuIn: self for: self. menu addUpdating: #hasDropShadowString action: #toggleDropShadow. menu addLine. menu add: 'shadow color...' translated target: self selector: #changeShadowColor. menu add: 'shadow offset...' translated target: self selector: #setShadowOffset:. aMenu add: 'drop shadow' translated subMenu: menu.! ! !Morph methodsFor: 'meta-actions' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26783375! addEmbeddingMenuItemsTo: aMenu hand: aHandMorph "Construct a menu offerring embed targets for the receiver. If the incoming menu is is not degenerate, add the constructed menu as a submenu; in any case, answer the embed-target menu" | menu potentialEmbeddingTargets | potentialEmbeddingTargets := self potentialEmbeddingTargets. potentialEmbeddingTargets size > 1 ifFalse:[^ self]. menu := UIManager default newMenuIn: self for: self. potentialEmbeddingTargets reverseDo: [:m | menu add: (m class name asString) target: m selector: #addMorphFrontFromWorldPosition: argument: self topRendererOrSelf. menu lastItem icon: (m iconOrThumbnailOfSize: 16). self owner == m ifTrue:[menu lastItem emphasis: 1]. ]. aMenu add:'embed into' translated subMenu: menu. ^ menu! ! !Morph methodsFor: 'menus' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37760059! addExportMenuItems: aMenu hand: aHandMorph "Add export items to the menu" aMenu ifNotNil: [ | aSubMenu | aSubMenu := UIManager default newMenuIn: self for: self. aSubMenu add: 'BMP file' translated action: #exportAsBMP. aSubMenu add: 'GIF file' translated action: #exportAsGIF. aSubMenu add: 'JPEG file' translated action: #exportAsJPEG. aSubMenu add: 'PNG file' translated action: #exportAsPNG. aMenu add: 'export...' translated icon: Smalltalk ui icons smallExportIcon subMenu: aSubMenu. aMenu lastItem icon: Smalltalk ui icons smallExportIcon ]. ! ! !Morph methodsFor: 'menus' stamp: 'MarcusDenker 10/26/2011 14:49' prior: 26771345! addFillStyleMenuItems: aMenu hand: aHand "Add the items for changing the current fill style of the Morph" | menu | menu := UIManager default newMenuIn: self for: self. self fillStyle addFillStyleMenuItems: menu hand: aHand from: self. menu addLine. menu add: 'solid fill' translated action: #useSolidFill. menu add: 'gradient fill' translated action: #useGradientFill. menu add: 'bitmap fill' translated action: #useBitmapFill. menu add: 'default fill' translated action: #useDefaultFill. aMenu add: 'fill style' translated subMenu: menu. ! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'sw 3/30/2005 03:44' prior: 26797651! addFlexShell "Wrap a rotating and scaling shell around this morph." | oldHalo flexMorph myWorld anIndex | myWorld := self world. oldHalo := self halo. anIndex := self owner submorphIndexOf: self. self owner addMorph: (flexMorph := self newTransformationMorph asFlexOf: self) asElementNumber: anIndex. self transferStateToRenderer: flexMorph. oldHalo ifNotNil: [oldHalo setTarget: flexMorph]. myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: flexMorph]. ^ flexMorph! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 11/7/1999 18:57' prior: 26714547! addHalo "Invoke a halo programatically (e.g., not from a meta gesture)" ^self addHalo: nil! ! !Morph methodsFor: 'halos and balloon help' stamp: 'BenjaminVanRyseghem 5/4/2013 12:54' prior: 38059770! addHalo: evt | halo prospectiveHaloClass | Smalltalk tools userManager canShowMorphHalo ifFalse: [ ^ self ]. prospectiveHaloClass := Smalltalk globals at: self haloClass ifAbsent: [ HaloMorph ]. halo := prospectiveHaloClass new. halo bounds: (halo worldBoundsForMorph: self). halo popUpFor: self event: evt. ^ halo! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 11/7/1999 21:55' prior: 26715141! addHalo: evt from: formerHaloOwner "Transfer a halo from the former halo owner to the receiver" ^self addHalo: evt! ! !Morph methodsFor: 'menus' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26771968! addHaloActionsTo: aMenu "Add items to aMenu representing actions requestable via halo" | subMenu | subMenu := UIManager default newMenuIn: self for: self. subMenu addTitle: self externalName. subMenu addStayUpItemSpecial. subMenu addLine. subMenu add: 'delete' translated action: #dismissViaHalo. subMenu balloonTextForLastItem: 'Delete this object -- warning -- can be destructive!!' translated. self maybeAddCollapseItemTo: subMenu. subMenu add: 'grab' translated action: #openInHand. subMenu balloonTextForLastItem: 'Pick this object up -- warning, since this removes it from its container, it can have adverse effects.' translated. subMenu addLine. subMenu add: 'resize' translated action: #resizeFromMenu. subMenu balloonTextForLastItem: 'Change the size of this object' translated. subMenu add: 'duplicate' translated action: #maybeDuplicateMorph. subMenu balloonTextForLastItem: 'Hand me a copy of this object' translated. subMenu addLine. subMenu add: 'set color' translated target: self renderedMorph action: #changeColor. subMenu balloonTextForLastItem: 'Change the color of this object' translated. subMenu addLine. subMenu add: 'inspect' translated target: self action: #inspect. subMenu balloonTextForLastItem: 'Open an Inspector on this object' translated. aMenu add: 'halo actions...' translated subMenu: subMenu ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'SeanDeNigris 1/29/2013 13:10' prior: 26715345! addHandlesTo: aHaloMorph box: box "Add halo handles to the halo. Apply the halo filter if appropriate" aHaloMorph haloBox: box. HaloMorph currentHaloSpecifications do: [:aSpec | | wantsIt aSelector | aSelector := aSpec addHandleSelector. (wantsIt := self wantsHaloHandleWithSelector: aSelector inHalo: aHaloMorph) ifTrue: [(#(addDupHandle:) includes: aSelector) ifTrue: [wantsIt := self preferredDuplicationHandleSelector = aSelector]]. wantsIt ifTrue: [aHaloMorph perform: aSelector with: aSpec]]. aHaloMorph innerTarget addOptionalHandlesTo: aHaloMorph box: box! ! !Morph methodsFor: 'layout-menu' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26738006! addLayoutMenuItems: topMenu hand: aHand | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addUpdating: #hasNoLayoutString action: #changeNoLayout. aMenu addUpdating: #hasProportionalLayoutString action: #changeProportionalLayout. aMenu addUpdating: #hasTableLayoutString action: #changeTableLayout. aMenu addLine. aMenu add: 'change layout inset...' translated action: #changeLayoutInset:. aMenu addLine. self addCellLayoutMenuItems: aMenu hand: aHand. self addTableLayoutMenuItems: aMenu hand: aHand. topMenu ifNotNil:[topMenu add: 'layout' translated subMenu: aMenu]. ^aMenu! ! !Morph methodsFor: 'menus' stamp: 'GuillermoPolito 5/29/2011 14:48' prior: 26773403! addMiscExtrasTo: aMenu "Add a submenu of miscellaneous extra items to the menu." | subMenu | subMenu := UIManager default newMenuIn: self for: self. (self isWorldMorph not and: [(self renderedMorph isSystemWindow) not]) ifTrue: [subMenu add: 'put in a window' translated action: #embedInWindow]. self isWorldMorph ifFalse: [subMenu add: 'adhere to edge...' translated action: #adhereToEdge. subMenu addLine]. subMenu add: 'add mouse up action' translated action: #addMouseUpAction; add: 'remove mouse up action' translated action: #removeMouseUpAction. subMenu addLine. aMenu add: 'extras...' translated subMenu: subMenu! ! !Morph methodsFor: 'menu' stamp: 'marcus.denker 11/10/2008 10:04' prior: 26764617! addModelYellowButtonItemsTo: aCustomMenu event: evt "Give my models a chance to add their context-menu items to aCustomMenu." self model ifNotNil: [:mod | mod addModelYellowButtonMenuItemsTo: aCustomMenu forMorph: self hand: evt hand]! ! !Morph methodsFor: 'submorphs-add/remove' stamp: '' prior: 26823526! addMorph: aMorph self addMorphFront: aMorph.! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 1/31/2001 12:54' prior: 26823648! addMorph: newMorph after: aMorph "Add the given morph as one of my submorphs, inserting it after anotherMorph" ^self privateAddMorph: newMorph atIndex: (submorphs indexOf: aMorph)+1! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'sw 9/7/2000 08:29' prior: 26823906! addMorph: aMorph asElementNumber: aNumber "Add the given morph so that it becomes the aNumber'th element of my submorph list. If aMorph is already one of my submorphs, reposition it" (submorphs includes: aMorph) ifTrue: [aMorph privateDelete]. (aNumber <= submorphs size) ifTrue: [self addMorph: aMorph inFrontOf: (submorphs at: aNumber)] ifFalse: [self addMorphBack: aMorph] ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 1/31/2001 12:44' prior: 26824375! addMorph: newMorph behind: aMorph "Add a morph to the list of submorphs behind the specified morph" ^self privateAddMorph: newMorph atIndex: (submorphs indexOf: aMorph) + 1. ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'StephaneDucasse 12/21/2012 18:11' prior: 26824641! addMorph: aMorph fullFrame: aLayoutFrame aMorph layoutFrame: aLayoutFrame asLayoutFrame. aMorph hResizing: #spaceFill; vResizing: #spaceFill. self addMorph: aMorph. ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 1/31/2001 12:45' prior: 26824887! addMorph: newMorph inFrontOf: aMorph "Add a morph to the list of submorphs in front of the specified morph" ^self privateAddMorph: newMorph atIndex: ((submorphs indexOf: aMorph) max: 1).! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 1/31/2001 12:55' prior: 26822669! addMorphBack: aMorph ^self privateAddMorph: aMorph atIndex: submorphs size+1! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'RAA 12/15/2000 19:34' prior: 26822824! addMorphCentered: aMorph aMorph position: bounds center - (aMorph extent // 2). self addMorphFront: aMorph. ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 1/31/2001 12:54' prior: 26823198! addMorphFront: aMorph ^self privateAddMorph: aMorph atIndex: 1! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 11/15/1998 23:42' prior: 26823338! addMorphFront: aMorph fromWorldPosition: wp self addMorphFront: aMorph. aMorph position: (self transformFromWorld globalPointToLocal: wp)! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 12/16/2001 21:08' prior: 26823012! addMorphFrontFromWorldPosition: aMorph ^self addMorphFront: aMorph fromWorldPosition: aMorph positionInWorld.! ! !Morph methodsFor: 'wiw support' stamp: 'nice 1/5/2010 15:59' prior: 26841321! addMorphInFrontOfLayer: aMorph | targetLayer | targetLayer := aMorph morphicLayerNumberWithin: self. submorphs do: [ :each | | layerHere | each == aMorph ifTrue: [^self]. layerHere := each morphicLayerNumberWithin: self. "the <= is the difference - it insures we go to the front of our layer" targetLayer <= layerHere ifTrue: [ ^self addMorph: aMorph inFrontOf: each ]. ]. self addMorphBack: aMorph. ! ! !Morph methodsFor: 'wiw support' stamp: 'RAA 6/29/2000 10:49' prior: 26841809! addMorphInLayer: aMorph submorphs do: [ :each | each == aMorph ifTrue: [^self]. aMorph morphicLayerNumber < each morphicLayerNumber ifTrue: [ ^self addMorph: aMorph inFrontOf: each ]. ]. self addMorphBack: aMorph ! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 1/19/2001 07:51' prior: 26640886! addMouseActionIndicatorsWidth: anInteger color: aColor self deleteAnyMouseActionIndicators. self changed. self hasRolloverBorder: true. self setProperty: #rolloverWidth toValue: anInteger@anInteger. self setProperty: #rolloverColor toValue: aColor. self layoutChanged. self changed. ! ! !Morph methodsFor: 'debug and other' stamp: 'alain.plantec 2/6/2009 15:31' prior: 26641260! addMouseUpAction | codeToRun oldCode | oldCode := self valueOfProperty: #mouseUpCodeToRun ifAbsent: ['']. codeToRun := UIManager default request: 'MouseUp expression:' translated initialAnswer: oldCode. self addMouseUpActionWith: codeToRun! ! !Morph methodsFor: 'debug and other' stamp: 'gm 2/22/2003 13:41' prior: 26641582! addMouseUpActionWith: codeToRun ((codeToRun isMessageSend) not and: [codeToRun isEmptyOrNil]) ifTrue: [^self]. self setProperty: #mouseUpCodeToRun toValue: codeToRun. self on: #mouseUp send: #programmedMouseUp:for: to: self. self on: #mouseDown send: #programmedMouseDown:for: to: self. self on: #mouseEnter send: #programmedMouseEnter:for: to: self. self on: #mouseLeave send: #programmedMouseLeave:for: to: self! ! !Morph methodsFor: 'menu' stamp: 'nk 3/10/2004 19:49' prior: 26764934! addMyYellowButtonMenuItemsToSubmorphMenus "Answer true if I have items to add to the context menus of my submorphs" ^true! ! !Morph methodsFor: 'menu' stamp: 'GuillermoPolito 5/29/2011 14:49' prior: 26765131! addNestedYellowButtonItemsTo: aMenu event: evt "Add items to aMenu starting with me and proceeding down through my submorph chain, letting any submorphs that include the event position contribute their items to the bottom of the menu, separated by a line." | underMouse | self addYellowButtonMenuItemsTo: aMenu event: evt. underMouse := self submorphThat: [:each | each containsPoint: evt position] ifNone: [^ self]. (underMouse addMyYellowButtonMenuItemsToSubmorphMenus and: [underMouse hasYellowButtonMenu]) ifTrue: [| submenu | aMenu addLine. submenu := UIManager default newMenuIn: underMouse for: underMouse. underMouse addNestedYellowButtonItemsTo: submenu event: evt. aMenu add: underMouse externalName icon: (underMouse iconOrThumbnailOfSize: 16) subMenu: submenu ] ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 5/7/2010 23:29' prior: 26716031! addOptionalHandlesTo: aHalo box: box ! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 3/3/2010 15:49' prior: 26774117! addStandardHaloMenuItemsTo: aMenu hand: aHandMorph "Add standard halo items to the menu" self isWorldMorph ifTrue: [^ self addWorldHaloMenuItemsTo: aMenu hand: aHandMorph]. aMenu add: 'send to back' translated action: #goBehind. aMenu add: 'bring to front' translated action: #comeToFront. self addEmbeddingMenuItemsTo: aMenu hand: aHandMorph. aMenu addLine. self addFillStyleMenuItems: aMenu hand: aHandMorph. self addBorderStyleMenuItems: aMenu hand: aHandMorph. self addDropShadowMenuItems: aMenu hand: aHandMorph. self addLayoutMenuItems: aMenu hand: aHandMorph. self addHaloActionsTo: aMenu. owner isTextMorph ifTrue:[self addTextAnchorMenuItems: aMenu hand: aHandMorph]. aMenu addLine. self addToggleItemsToHaloMenu: aMenu. aMenu addLine. self addExportMenuItems: aMenu hand: aHandMorph. self addMiscExtrasTo: aMenu. self addDebuggingItemsTo: aMenu hand: aHandMorph. aMenu addLine. aMenu defaultTarget: aHandMorph. ! ! !Morph methodsFor: 'layout-menu' stamp: 'GuillermoPolito 5/29/2011 14:50' prior: 26738694! addTableLayoutMenuItems: aMenu hand: aHand | menu sub | menu := UIManager default newMenuIn: self for: self. menu addUpdating: #hasReverseCellsString action: #changeReverseCells. menu addUpdating: #hasClipLayoutCellsString action: #changeClipLayoutCells. menu addUpdating: #hasRubberBandCellsString action: #changeRubberBandCells. menu addLine. menu add: 'change cell inset...' translated action: #changeCellInset:. menu add: 'change min cell size...' translated action: #changeMinCellSize:. menu add: 'change max cell size...' translated action: #changeMaxCellSize:. menu addLine. sub := UIManager default newMenuIn: self for: self. #(leftToRight rightToLeft topToBottom bottomToTop) do:[:sym| sub addUpdating: #listDirectionString: target: self selector: #changeListDirection: argumentList: (Array with: sym)]. menu add: 'list direction' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(none leftToRight rightToLeft topToBottom bottomToTop) do:[:sym| sub addUpdating: #wrapDirectionString: target: self selector: #wrapDirection: argumentList: (Array with: sym)]. menu add: 'wrap direction' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(center topLeft topRight bottomLeft bottomRight topCenter leftCenter rightCenter bottomCenter) do:[:sym| sub addUpdating: #cellPositioningString: target: self selector: #cellPositioning: argumentList: (Array with: sym)]. menu add: 'cell positioning' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(topLeft bottomRight center justified) do:[:sym| sub addUpdating: #listCenteringString: target: self selector: #listCentering: argumentList: (Array with: sym)]. menu add: 'list centering' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(topLeft bottomRight center justified) do:[:sym| sub addUpdating: #wrapCenteringString: target: self selector: #wrapCentering: argumentList: (Array with: sym)]. menu add: 'wrap centering' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(none equal) do:[:sym| sub addUpdating: #listSpacingString: target: self selector: #listSpacing: argumentList: (Array with: sym)]. menu add: 'list spacing' translated subMenu: sub. sub := UIManager default newMenuIn: self for: self. #(none localRect localSquare globalRect globalSquare) do:[:sym| sub addUpdating: #cellSpacingString: target: self selector: #cellSpacing: argumentList: (Array with: sym)]. menu add: 'cell spacing' translated subMenu: sub. aMenu ifNotNil:[aMenu add: 'table layout' translated subMenu: menu]. ^menu! ! !Morph methodsFor: 'text-anchor' stamp: 'GuillermoPolito 5/29/2011 14:50' prior: 26831821! addTextAnchorMenuItems: topMenu hand: aHand | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addUpdating: #hasInlineAnchorString action: #changeInlineAnchor. aMenu addUpdating: #hasParagraphAnchorString action: #changeParagraphAnchor. aMenu addUpdating: #hasDocumentAnchorString action: #changeDocumentAnchor. topMenu ifNotNil:[topMenu add: 'text anchor' subMenu: aMenu]. ^aMenu! ! !Morph methodsFor: 'menu' stamp: 'MarcusDenker 9/7/2010 17:41' prior: 26766030! addTitleForHaloMenu: aMenu aMenu addTitle: self externalName icon: (self iconOrThumbnailOfSize: 28)! ! !Morph methodsFor: 'menus' stamp: 'marcus.denker 11/19/2008 13:44' prior: 26775136! addToggleItemsToHaloMenu: aMenu "Add standard true/false-checkbox items to the memu" #( (resistsRemovalString toggleResistsRemoval 'whether I should be reistant to easy deletion via the pink X handle' true) (stickinessString toggleStickiness 'whether I should be resistant to a drag done by mousing down on me' true) (lockedString lockUnlockMorph 'when "locked", I am inert to all user interactions' true) (hasClipSubmorphsString changeClipSubmorphs 'whether the parts of objects within me that are outside my bounds should be masked.' false) (hasDirectionHandlesString changeDirectionHandles 'whether direction handles are shown with the halo' false) (hasDragAndDropEnabledString changeDragAndDrop 'whether I am open to having objects dropped into me' false) ) do: [:each | aMenu addUpdating: each first action: each second. aMenu balloonTextForLastItem: each third translated]. self couldHaveRoundedCorners ifTrue: [aMenu addUpdating: #roundedCornersString action: #toggleCornerRounding. aMenu balloonTextForLastItem: 'whether my corners should be rounded' translated]! ! !Morph methodsFor: 'utilities' stamp: 'sw 10/23/1998 12:00' prior: 26837163! addTransparentSpacerOfSize: aPoint self addMorphBack: (self transparentSpacerOfSize: aPoint)! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/12/2009 09:54' prior: 26716157! addWorldHandlesTo: aHaloMorph box: box aHaloMorph haloBox: box. HaloMorph haloSpecificationsForWorld do: [:aSpec | aHaloMorph perform: aSpec addHandleSelector with: aSpec]. aHaloMorph innerTarget addOptionalHandlesTo: aHaloMorph box: box! ! !Morph methodsFor: 'menu' stamp: 'AlainPlantec 12/19/2009 23:13' prior: 26766206! addYellowButtonMenuItemsTo: aMenu event: evt "Populate aMenu with appropriate menu items for a yellow-button (context menu) click." aMenu defaultTarget: self. self defaultYellowButtonMenuEnabled ifFalse: [^ self]. aMenu addStayUpItem. self addModelYellowButtonItemsTo: aMenu event: evt. self cmdGesturesEnabled ifTrue: [ aMenu addLine. aMenu add: 'inspect' translated action: #inspect]. aMenu addLine. self isWorldMorph ifFalse: [aMenu add: 'delete' translated action: #delete]. self world selectedObject == self ifTrue: [aMenu add: 'halo off' translated action: #removeHalo] ifFalse: [aMenu add: 'halo on' translated action: #addHalo]. (self isWorldMorph or: [self wantsToBeTopmost]) ifFalse: [ aMenu addLine. aMenu add: 'send to back' translated action: #goBehind. aMenu add: 'bring to front' translated action: #comeToFront. self addEmbeddingMenuItemsTo: aMenu hand: evt hand]. self isWorldMorph ifFalse: [ self isFullOnScreen ifFalse: [aMenu add: 'move onscreen' translated action: #goHome]]. self addLayoutMenuItems: aMenu hand: evt hand. (owner notNil and: [owner isTextMorph]) ifTrue: [self addTextAnchorMenuItems: aMenu hand: evt hand]. self isWorldMorph ifFalse: [ aMenu addLine. self addToggleItemsToHaloMenu: aMenu]. aMenu addLine. self isWorldMorph ifFalse: [aMenu add: 'copy to paste buffer' translated action: #copyToPasteBuffer:]. (self allStringsAfter: nil) isEmpty ifFalse: [aMenu add: 'copy text' translated action: #clipText]. self addExportMenuItems: aMenu hand: evt hand. aMenu addLine. aMenu add: 'adhere to edge...' translated action: #adhereToEdge. self addCustomMenuItems: aMenu hand: evt hand! ! !Morph methodsFor: 'change reporting' stamp: 'ar 8/12/2003 21:50' prior: 26635009! addedMorph: aMorph "Notify the receiver that the given morph was just added." ! ! !Morph methodsFor: 'menus' stamp: 'GuillermoPolito 5/29/2011 14:50' prior: 26776308! adhereToEdge | menu | menu := UIManager default newMenuIn: self for: self. #(top right bottom left - center - topLeft topRight bottomRight bottomLeft - none) do: [:each | each == #- ifTrue: [menu addLine] ifFalse: [menu add: each asString translated selector: #setToAdhereToEdge: argument: each]]. menu popUpEvent: self currentEvent in: self world! ! !Morph methodsFor: 'menus' stamp: 'wiz 10/19/2006 00:35' prior: 26776735! adhereToEdge: edgeSymbol | edgeMessage | (owner isNil or: [owner isHandMorph]) ifTrue: [^self]. (owner class canUnderstand: edgeSymbol) ifFalse: [^self]. (self class canUnderstand: ( edgeMessage := (edgeSymbol , ':') asSymbol )) ifFalse: [^self]. self perform: edgeMessage withArguments: (Array with: (owner perform: edgeSymbol))! ! !Morph methodsFor: 'layout' stamp: 'ar 11/12/2000 17:34' prior: 26731974! adjustLayoutBounds "Adjust the receivers bounds depending on the resizing strategy imposed" | hFit vFit box myExtent extent | hFit := self hResizing. vFit := self vResizing. (hFit == #shrinkWrap or:[vFit == #shrinkWrap]) ifFalse:[^self]. "not needed" box := self layoutBounds. myExtent := box extent. extent := self submorphBounds corner - box origin. hFit == #shrinkWrap ifTrue:[myExtent := extent x @ myExtent y]. vFit == #shrinkWrap ifTrue:[myExtent := myExtent x @ extent y]. "Make sure we don't get smaller than minWidth/minHeight" myExtent x < self minWidth ifTrue:[ myExtent := (myExtent x max: (self minWidth - self bounds width + self layoutBounds width)) @ myExtent y]. myExtent y < self minHeight ifTrue:[ myExtent := myExtent x @ (myExtent y max: (self minHeight - self bounds height + self layoutBounds height))]. self layoutBounds: (box origin extent: myExtent).! ! !Morph methodsFor: 'menus' stamp: 'sw 2/3/2000 00:14' prior: 26777140! adjustedCenter "Provides a hook for objects to provide a reference point other than the receiver's center,for the purpose of centering a submorph under special circumstances, such as BalloonMorph" ^ self center! ! !Morph methodsFor: 'menus' stamp: 'sw 2/3/2000 00:12' prior: 26777413! adjustedCenter: c "Set the receiver's position based on the #adjustedCenter protocol for adhereToEdge. By default this simply sets the receiver's center. Though there are (at its inception anyway) no other implementors of this method, it is required in use with the #adhereToEdge when the centering of a submorph is to be with reference to a rectangle other than the receiver's center." self center: c! ! !Morph methodsFor: 'accessing' stamp: 'ar 12/18/2001 20:09' prior: 26615958! adoptPaneColor: paneColor self submorphsDo:[:m| m adoptPaneColor: paneColor].! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/11/2000 16:34' prior: 26688991! alarmScheduler "Return the scheduler being responsible for triggering alarms" ^self world! ! !Morph methodsFor: 'geometry' stamp: 'di 7/24/97 11:55' prior: 26700160! align: aPoint1 with: aPoint2 "Translate by aPoint2 - aPoint1." ^ self position: self position + (aPoint2 - aPoint1)! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'AlainPlantec 2/17/2010 14:53' prior: 26810911! allMorphs "Return a collection containing all morphs in this composite morph (including the receiver)." | all | all := (Array new: submorphs size) writeStream. self allMorphsDo: [:m | all nextPut: m]. ^ all contents! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 2/22/2003 14:27' prior: 26811208! allMorphsDo: aBlock "Evaluate the given block for all morphs in this composite morph (including the receiver)." submorphs do: [:m | m allMorphsDo: aBlock]. aBlock value: self! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'alain.plantec 6/8/2009 23:41' prior: 26811472! allMorphsInto: aSet "Return a set of all submorphs. Don't forget the hidden ones. Consider only objects that are in memory (see allNonSubmorphMorphs)." submorphs do: [:m | m allMorphsInto: aSet]. self allNonSubmorphMorphs do: [:m | (aSet includes: m) ifFalse: ["Stop infinite recursion" m allMorphsInto: aSet]]. aSet add: self. ^ aSet! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'alain.plantec 6/8/2009 23:44' prior: 26811907! allNonSubmorphMorphs "Return a collection containing all morphs in this morph which are not currently in the submorph containment hierarchy" ^ OrderedCollection new! ! !Morph methodsFor: 'structure' stamp: 'di 11/13/2000 01:00' prior: 26806434! allOwners "Return the owners of the reciever" ^ Array streamContents: [:strm | self allOwnersDo: [:m | strm nextPut: m]]! ! !Morph methodsFor: 'structure' stamp: 'ar 9/14/2000 16:47' prior: 26806622! allOwnersDo: aBlock "Evaluate aBlock with all owners of the receiver" owner ifNotNil:[^owner withAllOwnersDo: aBlock].! ! !Morph methodsFor: 'debug and other' stamp: 'nice 1/5/2010 15:59' prior: 26642105! allStringsAfter: aSubmorph "return an OrderedCollection of strings of text in my submorphs. If aSubmorph is non-nil, begin with that container." | list ok | list := OrderedCollection new. ok := aSubmorph isNil. self allMorphsDo: [:sub | | string | ok ifFalse: [ok := sub == aSubmorph]. "and do this one too" ok ifTrue: [(string := sub userString) ifNotNil: [string isString ifTrue: [list add: string] ifFalse: [list addAll: string]]]]. ^list! ! !Morph methodsFor: 'announcements' stamp: 'GuillermoPolito 5/3/2012 20:54' prior: 26631179! announceDeleted self announcer announce: (MorphDeleted morph: self). self submorphs do: #announceDeleted! ! !Morph methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 6/25/2013 18:40' prior: 41632827! announceKeyboardFocusChange: gotFocus | announcement | announcement := gotFocus ifTrue: [ MorphGotFocus morph: self ] ifFalse: [ MorphLostFocus morph: self ]. self announcer announce: announcement. Morph announcer announce: announcement.! ! !Morph methodsFor: 'announcements' stamp: 'GuillermoPolito 5/1/2012 20:01' prior: 26631659! announceOpened self announcer announce: (MorphOpened morph: self). self submorphs do: #announceOpened! ! !Morph methodsFor: 'announcements' stamp: 'GuillermoPolito 5/1/2012 17:01' prior: 26631843! announcer ^self valueOfProperty: #announcer ifAbsentPut: [ Announcer new ]! ! !Morph methodsFor: 'drawing' stamp: 'Henrik Sperre Johansen 3/15/2009 00:03' prior: 26647441! areasRemainingToFill: aRectangle "Pushed up from BorderedMorph, all cases tested for there are supported by basic Morph." "Morphs which achieve translucency by other means than fillStyle will have to reimplement this" "Fixed here to test the fillStyle rather than color for translucency. Since can have a translucent fillStyle while the (calculated) color is not." self fillStyle isTranslucent ifTrue: [^ Array with: aRectangle]. self wantsRoundedCorners ifTrue: [(self borderWidth > 0 and: [self borderColor isColor and: [self borderColor isTranslucent]]) ifTrue: [^ aRectangle areasOutside: (self innerBounds intersect: self boundsWithinCorners)] ifFalse: [^ aRectangle areasOutside: self boundsWithinCorners]] ifFalse: [(self borderWidth > 0 and: [self borderColor isColor and: [self borderColor isTranslucent]]) ifTrue: [^ aRectangle areasOutside: self innerBounds] ifFalse: [^ aRectangle areasOutside: self bounds]]! ! !Morph methodsFor: 'stepping and presenter' stamp: 'sw 3/22/2000 14:27' prior: 26802068! arrangeToStartStepping "Arrange to start getting sent the 'step' message, but don't do that initial #step call that startStepping does" self arrangeToStartSteppingIn: self world! ! !Morph methodsFor: 'stepping and presenter' stamp: 'sw 3/22/2000 14:26' prior: 26802326! arrangeToStartSteppingIn: aWorld "Start getting sent the 'step' message in aWorld. Like startSteppingIn:, but without the initial one to get started'" aWorld ifNotNil: [aWorld startStepping: self. self changed]! ! !Morph methodsFor: 'converting' stamp: '' prior: 26637902! asDraggableMorph ^self! ! !Morph methodsFor: 'creation' stamp: 'tk 2/6/1999 22:43' prior: 26640547! asMorph ^ self! ! !Morph methodsFor: 'accessing - extension' stamp: 'md 2/27/2006 08:46' prior: 26627336! assureExtension "creates an extension for the receiver if needed" extension ifNil: [self initializeExtension]. ^ extension! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 17:56' prior: 26746476! assureLayoutProperties | props | props := self layoutProperties. props == self ifTrue:[props := nil]. props ifNil:[ props := LayoutProperties new initializeFrom: self. self layoutProperties: props]. ^props! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 17:57' prior: 26746764! assureTableProperties | props | props := self layoutProperties. props == self ifTrue:[props := nil]. props ifNil:[ props := TableLayoutProperties new initializeFrom: self. self layoutProperties: props]. props includesTableProperties ifFalse:[self layoutProperties: (props := props asTableLayoutProperties)]. ^props! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sma 11/11/2000 14:54' prior: 26716480! balloonColor ^ self valueOfProperty: #balloonColor ifAbsent: [self defaultBalloonColor]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sma 11/11/2000 14:55' prior: 26716652! balloonColor: aColor ^ self setProperty: #balloonColor toValue: aColor! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sd 12/5/2001 20:29' prior: 26716805! balloonFont ^ self valueOfProperty: #balloonFont ifAbsent: [self defaultBalloonFont]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sd 12/5/2001 20:30' prior: 26716972! balloonFont: aFont ^ self setProperty: #balloonFont toValue: aFont! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 2/7/2000 11:27' prior: 26717117! balloonHelpAligner "Answer the morph to which the receiver's balloon help should point" ^ (self valueOfProperty: #balloonTarget) ifNil: [self]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/19/2009 23:30' prior: 26717350! balloonHelpDelayTime "Return the number of milliseconds before a balloon help should be put up on the receiver. The balloon help will only be put up if the receiver responds to #wantsBalloon by returning true." ^ self theme settings balloonHelpDelayTime! ! !Morph methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:16' prior: 26801516! balloonHelpEnabled ^ self theme settings balloonHelpEnabled! ! !Morph methodsFor: 'halos and balloon help' stamp: 'SeanDeNigris 1/29/2013 13:57' prior: 26717693! balloonHelpTextForHandle: aHandle "Answer a string providing balloon help for the given halo handle" (aHandle eventHandler mouseSelectorsInclude: #doRecolor:with:) ifTrue: [^ 'Change color']. (aHandle eventHandler mouseSelectorsInclude: #mouseDownInDimissHandle:with:) ifTrue: [^ 'Remove from screen' translated]. #(#(#addFullHandles 'More halo handles') #(#chooseEmphasisOrAlignment 'Emphasis & alignment') #(#chooseFont 'Change font') #(#chooseNewGraphicFromHalo 'Choose a new graphic') #(#chooseStyle 'Change style') #(#doDebug:with: 'Debug') #(#doDirection:with: 'Choose forward direction') #(#doDup:with: 'Duplicate') #(#doMenu:with: 'Menu') #(#doGrab:with: 'Pick up') #(#mouseDownInCollapseHandle:with: 'Collapse') #(#mouseDownOnHelpHandle: 'Help') #(#prepareToTrackCenterOfRotation:with: 'Move object or set center of rotation') #(#startDrag:with: 'Move') #(#startGrow:with: 'Change size') #(#startRot:with: 'Rotate') #(#startScale:with: 'Change scale')#(#trackCenterOfRotation:with: 'Set center of rotation') ) do: [:pair | (aHandle eventHandler mouseSelectorsInclude: pair first) ifTrue: [^ pair last]]. ^ 'unknown halo handle' translated! ! !Morph methodsFor: 'accessing' stamp: 'MarcusDenker 9/7/2010 16:59' prior: 26616110! balloonText "Answer balloon help text or nil, if no help is available. NB: subclasses may override such that they programatically construct the text, for economy's sake, such as model phrases in a Viewer" extension ifNil: [^nil]. ^extension balloonText ifNotNil: [:text | text asString withNoLineLongerThan: self theme settings maxBalloonHelpLineLength]! ! !Morph methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:57' prior: 26616546! beSticky "make the receiver sticky" self assureExtension sticky: true! ! !Morph methodsFor: 'accessing' stamp: 'sw 10/23/1998 12:01' prior: 26616683! beTransparent self color: Color transparent! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 09:52' prior: 26616792! beUnsticky "If the receiver is marked as sticky, make it now be unsticky" extension ifNotNil: [extension sticky: false]! ! !Morph methodsFor: 'user interface' stamp: 'tak 3/15/2005 17:36' prior: 26836094! becomeModal self currentWorld ifNotNil: [self currentWorld modalWindow: self]! ! !Morph methodsFor: 'Morphic-Base-Pluggable Widgets' stamp: 'BenjaminVanRyseghem 5/7/2012 15:03' prior: 26587436! beginsWith: aString fromList: aMorph | string | string := self userString ifNil: [(self submorphs collect: [:m | m userString]) detect: [:us | us notNil] ifNone: ['']]. ^ string asString beginsWith: aString fromList: aMorph! ! !Morph methodsFor: 'meta-actions' stamp: 'yo 3/15/2005 14:45' prior: 26784248! blueButtonDown: anEvent "Special gestures (cmd-mouse on the Macintosh; Alt-mouse on Windows and Unix) allow a mouse-sensitive morph to be moved or bring up a halo for the morph." | h tfm doNotDrag | h := anEvent hand halo. "Prevent wrap around halo transfers originating from throwing the event back in" doNotDrag := false. h ifNotNil:[ (h innerTarget == self) ifTrue:[doNotDrag := true]. (h innerTarget hasOwner: self) ifTrue:[doNotDrag := true]. (self hasOwner: h target) ifTrue:[doNotDrag := true]]. tfm := (self transformedFrom: nil) inverseTransformation. "cmd-drag on flexed morphs works better this way" h := self addHalo: (anEvent transformedBy: tfm). h ifNil: [^ self]. doNotDrag ifTrue:[^self]. "Initiate drag transition if requested" anEvent hand waitForClicksOrDrag: h event: (anEvent transformedBy: tfm) selectors: { nil. nil. nil. #dragTarget:. } threshold: 5. "Pass focus explicitly here" anEvent hand newMouseFocus: h.! ! !Morph methodsFor: 'meta-actions' stamp: 'ar 9/15/2000 20:25' prior: 26785282! blueButtonUp: anEvent "Ignored. Theoretically we should never get here since control is transferred to the halo on #blueButtonDown: but subclasses may implement this differently."! ! !Morph methodsFor: 'accessing' stamp: 'ar 8/25/2001 18:28' prior: 26616978! borderColor ^self borderStyle color! ! !Morph methodsFor: 'accessing' stamp: 'nk 4/15/2004 10:55' prior: 26617079! borderColor: aColorOrSymbolOrNil "Unfortunately, the argument to borderColor could be more than just a color. It could also be a symbol, in which case it is to be interpreted as a style identifier. But I might not be able to draw that kind of border, so it may have to be ignored. Or it could be nil, in which case I should revert to the default border." | style newStyle | style := self borderStyle. style baseColor = aColorOrSymbolOrNil ifTrue: [^ self]. aColorOrSymbolOrNil isColor ifTrue: [style style = #none "default border?" ifTrue: [self borderStyle: (SimpleBorder width: 0 color: aColorOrSymbolOrNil)] ifFalse: [style baseColor: aColorOrSymbolOrNil. self changed]. ^ self]. self borderStyle: ( ({ nil. #none } includes: aColorOrSymbolOrNil) ifTrue: [BorderStyle default] ifFalse: [ "a symbol" self doesBevels ifFalse: [ ^self ]. newStyle := (BorderStyle perform: aColorOrSymbolOrNil) color: style color; width: style width; yourself. (self canDrawBorder: newStyle) ifTrue: [newStyle] ifFalse: [style]])! ! !Morph methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:09' prior: 26618252! borderStyle extension ifNil: [^BorderStyle default trackColorFrom: self]. ^(extension borderStyle ifNil: [BorderStyle default]) trackColorFrom: self! ! !Morph methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:09' prior: 26618952! borderStyle: newStyle newStyle = self borderStyle ifFalse:[ (self canDrawBorder: newStyle) ifFalse:[ "Replace the suggested border with a simple one" ^self borderStyle: (BorderStyle width: newStyle width color: (newStyle trackColorFrom: self) color)]. self assureExtension. self extension borderStyle: newStyle. self changed].! ! !Morph methodsFor: 'accessing' stamp: 'sw 11/26/2001 16:18' prior: 26618469! borderStyleForSymbol: aStyleSymbol "Answer a suitable BorderStyle for me of the type represented by a given symbol" | aStyle existing | aStyle := BorderStyle borderStyleForSymbol: aStyleSymbol asSymbol. aStyle ifNil: [self error: 'bad style']. existing := self borderStyle. aStyle width: existing width; baseColor: existing baseColor. ^ (self canDrawBorder: aStyle) ifTrue: [aStyle] ifFalse: [nil]! ! !Morph methodsFor: 'accessing' stamp: 'ar 8/25/2001 18:28' prior: 26619358! borderWidth ^self borderStyle width! ! !Morph methodsFor: 'accessing' stamp: 'nk 4/14/2004 17:48' prior: 26619566! borderWidth: aNumber | style | style := self borderStyle. style width = aNumber ifTrue: [ ^self ]. style style = #none ifTrue: [ self borderStyle: (SimpleBorder width: aNumber color: Color transparent) ] ifFalse: [ style width: aNumber. self changed ]. ! ! !Morph methodsFor: 'accessing' stamp: 'di 2/6/2001 14:02' prior: 26619458! borderWidthForRounding ^ self borderWidth! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:17' prior: 26700343! bottom " Return the y-coordinate of my bottom side " ^ bounds bottom! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:14' prior: 26701263! bottom: aNumber " Move me so that my bottom is at the y-coordinate aNumber. My extent (width & height) are unchanged " self position: (bounds left @ (aNumber - self height))! ! !Morph methodsFor: 'geometry' stamp: 'di 3/6/2002 13:06' prior: 26700477! bottomCenter ^ bounds bottomCenter! ! !Morph methodsFor: 'geometry' stamp: 'tk 9/8/97 10:44' prior: 26700574! bottomLeft ^ bounds bottomLeft! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:08' prior: 26700671! bottomLeft: aPoint " Move me so that my bottom left corner is at aPoint. My extent (width & height) are unchanged " self position: ((aPoint x) @ (aPoint y - self height)). ! ! !Morph methodsFor: 'geometry' stamp: 'di 6/12/97 11:17' prior: 26700908! bottomRight ^ bounds bottomRight! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:09' prior: 26701007! bottomRight: aPoint " Move me so that my bottom right corner is at aPoint. My extent (width & height) are unchanged " self position: ((aPoint x - bounds width) @ (aPoint y - self height)) ! ! !Morph methodsFor: 'drawing' stamp: 'sw 6/4/2000 22:02' prior: 26648484! boundingBoxOfSubmorphs | aBox | aBox := bounds origin extent: self minimumExtent. "so won't end up with something empty" submorphs do: [:m | m visible ifTrue: [aBox := aBox quickMerge: m fullBounds]]. ^ aBox ! ! !Morph methodsFor: 'geometry' stamp: 'jm 8/3/97 15:50' prior: 26701500! bounds "Return the bounds of this morph." "Note: It is best not to override this method because many methods in Morph and its subclasses use the instance variable directly rather than 'self bounds'. Instead, subclasses should be sure that the bounds instance variable is correct." ^ bounds ! ! !Morph methodsFor: 'geometry' stamp: 'ar 12/14/2000 13:48' prior: 26702182! bounds: newBounds | oldExtent newExtent | oldExtent := self extent. newExtent := newBounds extent. (oldExtent dotProduct: oldExtent) <= (newExtent dotProduct: newExtent) ifTrue:[ "We're growing. First move then resize." self position: newBounds topLeft; extent: newExtent. ] ifFalse:[ "We're shrinking. First resize then move." self extent: newExtent; position: newBounds topLeft. ].! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:04' prior: 26702644! bounds: aRectangle from: referenceMorph "Return the receiver's bounds as seen by aMorphs coordinate frame" owner ifNil: [^ aRectangle]. ^(owner transformFrom: referenceMorph) globalBoundsToLocal: aRectangle ! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:04' prior: 26702919! bounds: aRectangle in: referenceMorph "Return the receiver's bounds as seen by aMorphs coordinate frame" owner ifNil: [^ aRectangle]. ^(owner transformFrom: referenceMorph) localBoundsToGlobal: aRectangle ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'RAA 7/21/2000 11:10' prior: 26718936! boundsForBalloon "some morphs have bounds that are way too big" ^self boundsInWorld! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:04' prior: 26701979! boundsIn: referenceMorph "Return the receiver's bounds as seen by aMorphs coordinate frame" ^self bounds: self bounds in: referenceMorph! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:05' prior: 26701859! boundsInWorld ^self bounds: self bounds in: self world! ! !Morph methodsFor: 'updating' stamp: 'StephaneDucasse 8/8/2013 21:03' prior: 48422937! breakDependents self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super breakDependents ] on: Error do: []. self removeProperty: #announcer! ! !Morph methodsFor: 'debug and other' stamp: 'BenjaminVanRyseghem 9/29/2013 14:54' prior: 68892892! buildDebugMenu: aHand "Answer a debugging menu for the receiver. The hand argument is seemingly historical and plays no role presently" | aMenu | aMenu := UIManager default newMenuIn: self for: self. aMenu addStayUpItem. (self hasProperty: #errorOnDraw) ifTrue: [aMenu add: 'start drawing again' translated action: #resumeAfterDrawError.]. (self hasProperty: #drawError) ifTrue: [aMenu add: 'debug drawing error' translated action: #debugDrawError. aMenu addLine]. (self hasProperty: #errorOnStep) ifTrue: [aMenu add: 'start stepping again' translated action: #resumeAfterStepError. aMenu addLine]. aMenu add: 'inspect morph' translated action: #inspectInMorphic:. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu add: 'inspect owner chain' translated action: #inspectOwnerChain. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. self isMorphicModel ifTrue: [ aMenu add: 'inspect model' translated target: self model action: #inspect. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon ]. aMenu add: 'explore morph' translated target: self selector: #explore. aMenu lastItem icon: Smalltalk ui icons smallInspectItIcon. aMenu addLine. aMenu add: 'browse morph class' translated target: self selector: #browseHierarchy. (self isMorphicModel) ifTrue: [aMenu add: 'browse model class' target: self model selector: #browseHierarchy]. ^ aMenu! ! !Morph methodsFor: 'meta-actions' stamp: 'GuillermoPolito 5/29/2011 14:50' prior: 26785543! buildHandleMenu: aHand "Build the morph menu for the given morph's halo's menu handle. This menu has two sections. The first section contains commands that are interpreted by the hand; the second contains commands provided by the target morph. This method allows the morph to decide which items should be included in the hand's section of the menu." | menu | menu := UIManager default newMenuIn: self for: self. menu addStayUpItem. menu addLine. self addStandardHaloMenuItemsTo: menu hand: aHand. menu defaultTarget: aHand. self addAddHandMenuItemsForHalo: menu hand: aHand. menu defaultTarget: self. self addCustomHaloMenuItems: menu hand: aHand. menu defaultTarget: aHand. ^ menu ! ! !Morph methodsFor: 'meta-actions' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37762548! buildMetaMenu: evt "Build the morph menu. This menu has two sections. The first section contains commands that are handled by the hand; the second contains commands handled by the argument morph." | menu | menu := UIManager default newMenuIn: self for: self. menu addStayUpItem. menu add: 'grab' translated action: #grabMorph:. menu add: 'copy to paste buffer' translated action: #copyToPasteBuffer:. self maybeAddCollapseItemTo: menu. menu add: 'delete' translated action: #dismissMorph:. menu addLine. menu add: 'copy text' translated action: #clipText. menu addLine. menu add: 'go behind' translated action: #goBehind. menu add: 'add halo' translated action: #addHalo:. menu add: 'duplicate' translated action: #maybeDuplicateMorph:. self addEmbeddingMenuItemsTo: menu hand: evt hand. menu add: 'resize' translated action: #resizeMorph:. "Give the argument control over what should be done about fill styles" self addFillStyleMenuItems: menu hand: evt hand. self addDropShadowMenuItems: menu hand: evt hand. self addLayoutMenuItems: menu hand: evt hand. menu addUpdating: #hasClipSubmorphsString target: self selector: #changeClipSubmorphs argumentList: #(). menu addLine. menu add: 'inspect' translated selector: #inspectAt:event: argument: evt position. menu add: 'explore' translated action: #explore. menu lastItem icon: Smalltalk ui icons smallInspectItIcon. menu addLine.. menu add: 'show actions' translated action: #showActions. menu addLine. self addDebuggingItemsTo: menu hand: evt hand. self addCustomMenuItems: menu hand: evt hand. ^ menu ! ! !Morph methodsFor: 'menu' stamp: 'AlainPlantec 11/5/2011 14:27' prior: 26767970! buildYellowButtonMenu: aHand "build the morph menu for the yellow button" | menu | menu := UIManager default newMenuIn: self for: self. self addNestedYellowButtonItemsTo: menu event: ActiveEvent. ^ menu! ! !Morph methodsFor: 'testing' stamp: 'ar 8/25/2001 19:14' prior: 26829268! canDrawBorder: aBorderStyle "Return true if the receiver can be drawn with the given border style." ^true! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:54' prior: 26747165! cellInset "Layout specific. This property specifies an extra inset for each cell in the layout." | props | props := self layoutProperties. ^props ifNil:[0] ifNotNil:[props cellInset].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:54' prior: 26747426! cellInset: aNumber "Layout specific. This property specifies an extra inset for each cell in the layout." self assureTableProperties cellInset: aNumber. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:54' prior: 26747675! cellPositioning "Layout specific. This property describes how the receiver should be layed out in its owner when the bounds of the cell assigned to the receiver do not exactly match its bounds. Possible values are: #topLeft, #topRight, #bottomLeft, #bottomRight, #topCenter, #leftCenter, #rightCenter, #bottomCenter, #center which align the receiver's bounds with the cell at the given point." | props | props := self layoutProperties. ^props ifNil:[#center] ifNotNil:[props cellPositioning].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 17:39' prior: 26748421! cellPositioning: aSymbol "Layout specific. This property describes how the receiver should be layed out in its owner when the bounds of the cell assigned to the receiver do not exactly match its bounds. Possible values are: #topLeft, #topRight, #bottomLeft, #bottomRight, #topCenter, #leftCenter, #rightCenter, #bottomCenter, #center which align the receiver's bounds with the cell at the given point." self assureTableProperties cellPositioning: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 02:48' prior: 26748249! cellPositioningString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self cellPositioning! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:55' prior: 26748977! cellSpacing "Layout specific. This property describes how the cell size for each element in a list should be computed. #globalRect - globally equal rectangular cells #globalSquare - globally equal square cells #localRect - locally (e.g., per row/column) equal rectangular cells #localSquare - locally (e.g., per row/column) equal square cells #none - cells are sized based on available row/column constraints " | props | props := self layoutProperties. ^props ifNil:[#none] ifNotNil:[props cellSpacing].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:56' prior: 26749733! cellSpacing: aSymbol "Layout specific. This property describes how the cell size for each element in a list should be computed. #globalRect - globally equal rectangular cells #globalSquare - globally equal square cells #localRect - locally (e.g., per row/column) equal rectangular cells #localSquare - locally (e.g., per row/column) equal square cells #none - cells are sized based on available row/column constraints " self assureTableProperties cellSpacing: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 02:47' prior: 26749569! cellSpacingString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self cellSpacing! ! !Morph methodsFor: 'geometry' stamp: '' prior: 26703163! center ^ bounds center! ! !Morph methodsFor: 'geometry' stamp: 'sw 6/11/1999 18:48' prior: 26703251! center: aPoint self position: (aPoint - (self extent // 2))! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:08' prior: 26741406! changeCellInset: evt | handle | handle := HandleMorph new forEachPointDo:[:newPoint | self cellInset: (newPoint - evt cursorPoint) asIntegerPoint // 5]. evt hand attachMorph: handle. handle startStepping. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 18:54' prior: 26741685! changeClipLayoutCells self invalidRect: self fullBounds. self clipLayoutCells: self clipLayoutCells not. self invalidRect: self fullBounds.! ! !Morph methodsFor: 'drawing' stamp: 'ar 11/4/2000 23:39' prior: 26648762! changeClipSubmorphs self clipSubmorphs: self clipSubmorphs not.! ! !Morph methodsFor: 'menus' stamp: 'tbn 5/10/2011 09:22' prior: 26777883! changeColor "Change the color of the receiver -- triggered, e.g. from a menu" |d| d := self openModal: ( ColorSelectorDialogWindow new title: 'Choose color'; selectedColor: self color). d cancelled ifFalse: [self fillStyle: d selectedColor] ! ! !Morph methodsFor: 'meta-actions' stamp: 'HenrikSperreJohansen 5/21/2010 13:33' prior: 26787984! changeColorTarget: anObject selector: aSymbol originalColor: aColor hand: aHand "Put up a color picker for changing some kind of color." (UIManager default chooseColor: aColor) ifNotNil: [:nc | anObject perform: aSymbol with: nc]. ! ! !Morph methodsFor: 'menus' stamp: 'ar 11/29/2001 19:57' prior: 26778206! changeDirectionHandles ^self wantsDirectionHandles: self wantsDirectionHandles not! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 10/31/2000 19:19' prior: 26741895! changeDisableTableLayout self disableTableLayout: self disableTableLayout not. self layoutChanged.! ! !Morph methodsFor: 'text-anchor' stamp: 'aoy 2/15/2003 21:47' prior: 26832295! changeDocumentAnchor "Change the anchor from/to document anchoring" | newType | newType := self textAnchorType == #document ifTrue: [#paragraph] ifFalse: [ #document]. owner isTextMorph ifTrue: [owner anchorMorph: self at: self position type: newType]! ! !Morph methodsFor: 'menus' stamp: 'ar 11/2/2000 15:04' prior: 26778350! changeDragAndDrop ^self enableDragNDrop: self dragNDropEnabled not! ! !Morph methodsFor: 'text-anchor' stamp: 'aoy 2/15/2003 21:48' prior: 26832644! changeInlineAnchor "Change the anchor from/to line anchoring" | newType | newType := self textAnchorType == #inline ifTrue: [#paragraph] ifFalse: [#inline]. owner isTextMorph ifTrue: [owner anchorMorph: self at: self position type: newType]! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:09' prior: 26742063! changeLayoutInset: evt | handle | handle := HandleMorph new forEachPointDo:[:newPoint | self layoutInset: (newPoint - evt cursorPoint) asIntegerPoint // 5]. evt hand attachMorph: handle. handle startStepping. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:10' prior: 26742346! changeListDirection: aSymbol | listDir wrapDir | self listDirection: aSymbol. (self wrapDirection == #none) ifTrue:[^self]. "otherwise automatically keep a valid table layout" listDir := self listDirection. wrapDir := self wrapDirection. (listDir == #leftToRight or:[listDir == #rightToLeft]) ifTrue:[ wrapDir == #leftToRight ifTrue:[^self wrapDirection: #topToBottom]. wrapDir == #rightToLeft ifTrue:[^self wrapDirection: #bottomToTop]. ] ifFalse:[ wrapDir == #topToBottom ifTrue:[^self wrapDirection: #leftToRight]. wrapDir == #bottomToTop ifTrue:[^self wrapDirection: #rightToLeft]. ]. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:10' prior: 26743020! changeMaxCellSize: evt | handle | handle := HandleMorph new forEachPointDo:[:newPoint | self maxCellSize: (newPoint - evt cursorPoint) asIntegerPoint]. evt hand attachMorph: handle. handle startStepping. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:10' prior: 26743298! changeMinCellSize: evt | handle | handle := HandleMorph new forEachPointDo:[:newPoint | self minCellSize: (newPoint - evt cursorPoint) asIntegerPoint]. evt hand attachMorph: handle. handle startStepping. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 10/31/2000 19:19' prior: 26743576! changeNoLayout self layoutPolicy ifNil:[^self]. "already no layout" self layoutPolicy: nil. self layoutChanged.! ! !Morph methodsFor: 'text-anchor' stamp: 'aoy 2/15/2003 21:48' prior: 26832987! changeParagraphAnchor "Change the anchor from/to paragraph anchoring" | newType | newType := self textAnchorType == #paragraph ifTrue: [#document] ifFalse: [#paragraph]. owner isTextMorph ifTrue: [owner anchorMorph: self at: self position type: newType]! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 10/31/2000 19:19' prior: 26743758! changeProportionalLayout | layout | ((layout := self layoutPolicy) notNil and:[layout isProportionalLayout]) ifTrue:[^self]. "already proportional layout" self layoutPolicy: ProportionalLayout new. self layoutChanged.! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:10' prior: 26744049! changeReverseCells self reverseTableCells: self reverseTableCells not.! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 11/13/2000 19:10' prior: 26744188! changeRubberBandCells self rubberBandCells: self rubberBandCells not.! ! !Morph methodsFor: 'drop shadows' stamp: 'HenrikSperreJohansen 5/21/2010 13:34' prior: 26659087! changeShadowColor "Change the shadow color of the receiver -- triggered, e.g. from a menu" (UIManager default chooseColor: self shadowColor) ifNotNil: [:nc | self shadowColor: nc]. ! ! !Morph methodsFor: 'layout-menu' stamp: 'ar 10/31/2000 19:20' prior: 26744326! changeTableLayout | layout | ((layout := self layoutPolicy) notNil and:[layout isTableLayout]) ifTrue:[^self]. "already table layout" self layoutPolicy: TableLayout new. self layoutChanged.! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/22/2013 15:32' prior: 46285289! changed: anAspect self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super changed: anAspect ] on: Exception do: []. self announcer announce: (MorphChanged new morph: self; selector: anAspect)! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/23/2013 12:33' prior: 46285643! changed: anAspect with: anObject self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super changed: anAspect ] on: Exception do: []. self announcer announce: (MorphChangedWithArguments new morph: self; selector: anAspect; arguments: anObject)! ! !Morph methodsFor: 'Morphic-Base-Worlds' stamp: 'dgd 9/1/2004 16:10' prior: 26588293! clearArea "Answer the clear area of the receiver. It means the area free of docking bars." | visTop visBottom visLeft visRight | visTop := self top. visBottom := self bottom. visLeft := self left. visRight := self right. self dockingBars do: [:each | (each isAdheringToTop and: [each bottom > visTop]) ifTrue: [visTop := each bottom]. (each isAdheringToBottom and: [each top < visBottom]) ifTrue: [visBottom := each top]. (each isAdheringToLeft and: [each right > visLeft]) ifTrue: [visLeft := each right]. (each isAdheringToRight and: [each left < visRight]) ifTrue: [visRight := each left] ]. ^ Rectangle left: visLeft right: visRight top: visTop bottom: visBottom ! ! !Morph methodsFor: 'event handling' stamp: 'tk 9/6/2000 12:42' prior: 26670918! click "Pretend the user clicked on me." (self handlesMouseDown: nil) ifTrue: [ self mouseDown: nil. self mouseUp: nil].! ! !Morph methodsFor: 'event handling' stamp: 'CamilloBruni 8/1/2012 16:02' prior: 26671123! click: evt "Handle a single-click event. This message is only sent to clients that request it by sending #waitForClicksOrDrag:event: to the initiating hand in their mouseDown: method. This default implementation does nothing." ^ self eventHandler ifNotNil: [self eventHandler click: evt fromMorph: self].! ! !Morph methodsFor: 'drawing' stamp: 'dgd 2/16/2003 20:02' prior: 26648890! clipLayoutCells "Drawing/layout specific. If this property is set, clip the submorphs of the receiver by its cell bounds." ^ self valueOfProperty: #clipLayoutCells ifAbsent: [false]! ! !Morph methodsFor: 'drawing' stamp: 'ar 10/29/2000 19:22' prior: 26649144! clipLayoutCells: aBool "Drawing/layout specific. If this property is set, clip the submorphs of the receiver by its cell bounds." aBool == false ifTrue:[self removeProperty: #clipLayoutCells] ifFalse:[self setProperty: #clipLayoutCells toValue: aBool]. self changed.! ! !Morph methodsFor: 'drawing' stamp: 'gvc 9/11/2009 17:59' prior: 26649663! clipSubmorphs "Drawing specific. If this property is set, clip the receiver's submorphs to the receiver's clipping bounds." extension ifNil: [^false]. ^extension clipSubmorphs ifNil: [false]! ! !Morph methodsFor: 'drawing' stamp: 'gvc 9/11/2009 17:59' prior: 26649925! clipSubmorphs: aBool "Drawing specific. If this property is set, clip the receiver's submorphs to the receiver's clipping bounds." self invalidRect: self fullBounds. aBool == self clipSubmorphs ifFalse:[ self assureExtension. extension clipSubmorphs: aBool. self invalidRect: self fullBounds]! ! !Morph methodsFor: 'printing' stamp: 'bf 7/17/2003 12:53' prior: 26796238! clipText "Copy the text in the receiver or in its submorphs to the clipboard" | content | "My own text" content := self userString. "Or in my submorphs" content ifNil: [ | list | list := self allStringsAfter: nil. list notEmpty ifTrue: [ content := String streamContents: [:stream | list do: [:each | stream nextPutAll: each; cr]]]]. "Did we find something?" content ifNil: [self flash "provide feedback"] ifNotNil: [Clipboard clipboardText: content].! ! !Morph methodsFor: 'drawing' stamp: 'ar 10/29/2000 19:16' prior: 26649481! clippingBounds "Return the bounds to which any submorphs should be clipped if the property is set" ^self innerBounds! ! !Morph methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:12' prior: 26801651! cmdGesturesEnabled ^ self class cmdGesturesEnabled! ! !Morph methodsFor: 'menus' stamp: 'sw 2/21/2000 15:21' prior: 26778478! collapse CollapsedMorph new beReplacementFor: self! ! !Morph methodsFor: 'accessing' stamp: 'tk 2/15/2001 15:55' prior: 26619893! color ^ color "has already been set to ((self valueOfProperty: #fillStyle) asColor)"! ! !Morph methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:52' prior: 26620592! color: aColor "Set the receiver's color. Directly set the color if appropriate, else go by way of fillStyle" (aColor isColor or: [aColor isKindOf: InfiniteForm]) ifFalse:[^ self fillStyle: aColor]. color = aColor ifFalse: [self assureExtension. extension fillStyle: nil. color := aColor. self changed]! ! !Morph methodsFor: 'change reporting' stamp: 'sw 9/10/1998 08:18' prior: 26635160! colorChangedForSubmorph: aSubmorph "The color associated with aSubmorph was changed through the UI; react if needed"! ! !Morph methodsFor: 'accessing' stamp: 'ar 8/15/2001 22:40' prior: 26620045! colorForInsets "Return the color to be used for shading inset borders. The default is my own color, but it might want to be, eg, my owner's color. Whoever's color ends up prevailing, the color itself gets the last chance to determine, so that when, for example, an InfiniteForm serves as the color, callers won't choke on some non-Color object being returned" (color isColor and:[color isTransparent and:[owner notNil]]) ifTrue:[^owner colorForInsets]. ^ color colorForInsets ! ! !Morph methodsFor: 'printing' stamp: 'StephaneDucasse 8/2/2011 22:46' prior: 26796790! colorString: aColor aColor ifNil: [ ^'nil' ]. ^aColor name ifNil: [ aColor storeString ] ifNotNil: [ :colorName | 'Color ', colorName ]! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'dgd 2/22/2003 14:30' prior: 26825152! comeToFront | outerMorph | outerMorph := self topRendererOrSelf. (outerMorph owner isNil or: [outerMorph owner hasSubmorphs not]) ifTrue: [^self]. outerMorph owner firstSubmorph == outerMorph ifFalse: [outerMorph owner addMorphFront: outerMorph]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 3/1/2000 11:39' prior: 26719099! comeToFrontAndAddHalo self comeToFront. self addHalo! ! !Morph methodsFor: 'layout' stamp: 'StephaneDucasse 5/31/2013 19:18' prior: 39519199! computeBounds [ self doLayoutIn: self layoutBounds ] on: Error do: [ :ex | "This should do it unless you don't screw up the bounds" fullBounds := bounds. ex pass ]! ! !Morph methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 6/2/2013 14:18' prior: 39519463! computeFullBounds [ self doLayoutIn: self layoutBounds ] on: Error do: [ :ex | "This should do it unless you don't screw up the bounds" fullBounds := bounds. ex pass ]! ! !Morph methodsFor: 'structure' stamp: 'alain.plantec 6/19/2008 09:34' prior: 26806818! containingWindow "Answer a window that contains the receiver" ^ self ownerThatIsA: SystemWindow! ! !Morph methodsFor: 'geometry testing' stamp: '' prior: 26714082! containsPoint: aPoint ^ self bounds containsPoint: aPoint! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/13/2000 17:58' prior: 26689389! containsPoint: aPoint event: anEvent "Return true if aPoint is considered to be inside the receiver for the given event. The default implementation treats locked children as integral part of their owners." (self fullBounds containsPoint: aPoint) ifFalse:[^false]. (self containsPoint: aPoint) ifTrue:[^true]. self submorphsDo:[:m| (m isLocked and:[m fullContainsPoint: ((m transformedFrom: self) globalPointToLocal: aPoint)]) ifTrue:[^true]]. ^false! ! !Morph methodsFor: 'copying' stamp: 'tk 2/19/2001 18:21' prior: 26637989! copy ^ self veryDeepCopy! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 11/7/2009 18:52' prior: 26788299! copyToPasteBuffer: evt ^evt hand copyToPasteBuffer: self.! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'pmm 3/13/2010 11:32' prior: 26825484! copyWithoutSubmorph: sub "Needed to get a morph to draw without one of its submorphs. NOTE: This must be thrown away immediately after use." ^ self shallowCopy privateSubmorphs: (submorphs copyWithout: sub)! ! !Morph methodsFor: 'visual properties' stamp: 'gvc 9/11/2009 17:27' prior: 26838456! cornerStyle "Returns one of the following symbols: #square #rounded according to the current corner style." self assureExtension. ^extension cornerStyle ifNil: [#square]! ! !Morph methodsFor: 'rounding' stamp: 'gvc 9/11/2009 17:28' prior: 26800180! cornerStyle: aSymbol "This method makes it possible to set up desired corner style. aSymbol has to be one of: #square #rounded" aSymbol == self cornerStyle ifFalse:[ self assureExtension. extension cornerStyle: aSymbol. self changed]! ! !Morph methodsFor: 'accessing' stamp: 'ar 12/27/2001 17:56' prior: 26620972! couldHaveRoundedCorners ^ true! ! !Morph methodsFor: 'event handling' stamp: 'sw 3/8/1999 00:17' prior: 26671501! cursorPoint ^ self currentHand lastEvent cursorPoint! ! !Morph methodsFor: 'debug and other' stamp: 'CamilloBruni 5/29/2012 17:17' prior: 26644438! debugDrawError (self valueOfProperty: #drawError) debug.! ! !Morph methodsFor: 'copying' stamp: 'tk 2/14/2001 12:47' prior: 26638078! deepCopy self error: 'Please use veryDeepCopy'. ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sma 11/11/2000 16:15' prior: 26719233! defaultBalloonColor ^ Display depth <= 2 ifTrue: [Color white] ifFalse: [BalloonMorph balloonColor]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sd 12/5/2001 20:23' prior: 26719415! defaultBalloonFont ^ BalloonMorph balloonFont! ! !Morph methodsFor: 'visual properties' stamp: 'nk 8/28/2003 15:56' prior: 26838707! defaultBitmapFillForm ^ImageMorph defaultForm. ! ! !Morph methodsFor: 'initialize' stamp: 'dgd 3/7/2003 15:06' prior: 26728689! defaultBounds "answer the default bounds for the receiver" ^ 0 @ 0 corner: 50 @ 40! ! !Morph methodsFor: 'initialize' stamp: 'dgd 2/14/2003 22:28' prior: 26728839! defaultColor "answer the default color/fill style for the receiver" ^ Color blue! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/13/2000 14:51' prior: 26689923! defaultEventDispatcher "Return the default event dispatcher to use with events that are directly sent to the receiver" ^MorphicEventDispatcher new! ! !Morph methodsFor: 'as yet unclassified' stamp: 'cb 6/25/2013 13:25' prior: 41604985! defaultLabel "Answer the default label to be used" ^ super printString truncateTo: 40! ! !Morph methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 13:03' prior: 26801777! defaultYellowButtonMenuEnabled ^ self class defaultYellowButtonMenuEnabled! ! !Morph methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 11:26' prior: 45003836! defer: aValuable self owner ifNotNil: [:o | o defer: aValuable] ifNil: [ UIManager default defer: aValuable ]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 1/11/2000 18:24' prior: 26719539! defersHaloOnClickTo: aSubMorph "If a cmd-click on aSubMorph would make it a preferred recipient of the halo, answer true" "May want to add a way (via a property) for morphs to assert true here -- this would let certain kinds of morphs that are unusually reluctant to take the halo on initial click" ^ false ! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'AlainPlantec 5/7/2010 23:44' prior: 26798220! degreesOfFlex "Return any rotation due to flexing" "NOTE: because renderedMorph, which is used by the halo to set heading, goes down through dropShadows as well as transformations, we need this method (and its other implems) to come back up through such a chain." ^ 0.0! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'GuillermoPolito 5/3/2012 21:05' prior: 26825782! delete "Remove the receiver as a submorph of its owner and make its new owner be nil." self removeHalo. self activeHand releaseKeyboardFocus: self; releaseMouseFocus: self. owner ifNotNil:[ self privateDelete. self announceDeleted. ].! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 1/19/2001 07:51' prior: 26644569! deleteAnyMouseActionIndicators self changed. (self valueOfProperty: #mouseActionIndicatorMorphs ifAbsent: [#()]) do: [ :each | each deleteWithSiblings "one is probably enough, but be safe" ]. self removeProperty: #mouseActionIndicatorMorphs. self hasRolloverBorder: false. self removeProperty: #rolloverWidth. self removeProperty: #rolloverColor. self layoutChanged. self changed. ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 10/3/2000 17:03' prior: 26719929! deleteBalloon "If I am showing a balloon, delete it." | w | w := self world ifNil:[^self]. w deleteBalloonTarget: self.! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'dgd 9/1/2004 16:26' prior: 26826111! deleteDockingBars "Delete the receiver's docking bars" self dockingBars do: [:each | each delete]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:41' prior: 26662540! disableDragNDrop self enableDragNDrop: false! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:56' prior: 26750309! disableTableLayout "Layout specific. Disable laying out the receiver in table layout" | props | props := self layoutProperties. ^props ifNil:[false] ifNotNil:[props disableTableLayout].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:06' prior: 26750572! disableTableLayout: aBool "Layout specific. Disable laying out the receiver in table layout" self assureLayoutProperties disableTableLayout: aBool. self layoutChanged.! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 7/9/2012 15:31' prior: 26788434! dismissMorph "This is called from an explicit halo destroy/delete action." | w | w := self world ifNil:[^self]. w deleteAllHalos; stopStepping: self. self delete! ! !Morph methodsFor: 'meta-actions' stamp: 'mir 3/17/2006 18:01' prior: 26788670! dismissMorph: evt self dismissMorph! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'AlainPlantec 12/1/2010 09:39' prior: 26826298! dismissViaHalo "The user has clicked in the delete halo-handle. This provides a hook in case some concomitant action should be taken, or if the particular morph is not one which should be put in the trash can, for example." self setProperty: #lastPosition toValue: self positionInWorld. self dismissMorph! ! !Morph methodsFor: 'button' stamp: 'sw 2/6/2001 23:09' prior: 26632374! doButtonAction "If the receiver has a button-action defined, do it now. The default button action of any morph is, well, to do nothing. Note that there are several ways -- too many ways -- for morphs to have button-like actions. This one refers not to the #mouseUpCodeToRun feature, nor does it refer to the Player-scripting mechanism. Instead it is intended for morph classes whose very nature is to be buttons -- this method provides glue so that arbitrary buttons on the UI can be 'fired' programatticaly from user scripts"! ! !Morph methodsFor: 'user interface' stamp: 'tak 3/15/2005 17:10' prior: 26836455! doCancel self delete! ! !Morph methodsFor: 'user interface' stamp: 'StephaneDucasse 5/13/2012 20:49' prior: 26836559! doFastReframe: ptName | newBounds | "For fast display, only higlight the rectangle during loop" newBounds := self boundsInWorld newRectButtonPressedDo: [:f :pt | f withSideOrCorner: ptName setToPoint: pt minExtent: self minimumExtent]. Display deferUpdatesIn: Display boundingBox while: [ self bounds: newBounds]. ^newBounds.! ! !Morph methodsFor: 'layout' stamp: 'MarcusDenker 10/3/2013 23:34' prior: 69231546! doLayoutIn: layoutBounds "Compute a new layout based on the given layout bounds." "Note: Testing for #bounds or #layoutBounds would be sufficient to figure out if we need an invalidation afterwards but #outerBounds is what we need for all leaf nodes so we use that." | box priorBounds | priorBounds := self outerBounds. submorphs isEmpty ifTrue: [^fullBounds := priorBounds]. "Send #ownerChanged to our children" submorphs do: [:m | m ownerChanged]. self layoutPolicy ifNotNil: [:layout | layout layout: self in: layoutBounds]. self adjustLayoutBounds. fullBounds := self privateFullBounds. box := self outerBounds. box = priorBounds ifFalse: [self invalidRect: (priorBounds quickMerge: box)]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 8/31/2004 16:53' prior: 26812150! dockingBars "Answer the receiver's dockingBars" ^ self submorphs select: [:each | each isDockingBar] ! ! !Morph methodsFor: 'accessing' stamp: 'nk 4/15/2004 07:50' prior: 26621068! doesBevels "To return true means that this object can show bevelled borders, and therefore can accept, eg, #raised or #inset as valid borderColors. Must be overridden by subclasses that do not support bevelled borders." ^ false! ! !Morph methodsFor: 'drawing' stamp: 'tk 8/2/1998 14:33' prior: 26650290! doesOwnRotation "Some morphs don't want to TransformMorph to rotate their images, but we do" ^ false! ! !Morph methodsFor: 'event handling' stamp: 'CamilloBruni 8/1/2012 16:04' prior: 26672063! doubleClick: evt "Handle a double-click event. This message is only sent to clients that request it by sending #waitForClicksOrDrag:event: to the initiating hand in their mouseDown: method. This default implementation does nothing." ^ self eventHandler ifNotNil: [self eventHandler doubleClick: evt fromMorph: self].! ! !Morph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 1/18/2012 18:46' prior: 26671641! doubleClickTimeout: evt "Handle a double-click timeout event. This message is only sent to clients that request it by sending #waitForClicksOrDrag:event: to the initiating hand in their mouseDown: method. This default implementation does nothing." ^ self eventHandler ifNotNil: [self eventHandler doubleClickTimeout: evt fromMorph: self].! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:50' prior: 26662661! dragEnabled "Get this morph's ability to add and remove morphs via drag-n-drop." ^(self valueOfProperty: #dragEnabled) == true ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:18' prior: 26662864! dragEnabled: aBool ^self enableDrag: aBool! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:20' prior: 26662981! dragNDropEnabled "Note: This method is only useful for dragEnabled == dropEnabled at all times" self separateDragAndDrop. ^self dragEnabled and:[self dropEnabled]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 18:36' prior: 26663222! dragSelectionColor ^ Color magenta! ! !Morph methodsFor: 'drawing' stamp: 'panda 4/28/2000 11:59' prior: 26650458! drawDropHighlightOn: aCanvas self highlightedForDrop ifTrue: [ aCanvas frameRectangle: self fullBounds color: self dropHighlightColor].! ! !Morph methodsFor: 'drawing' stamp: 'GaryChambers 9/8/2011 14:55' prior: 26650668! drawDropShadowOn: aCanvas aCanvas translateBy: self shadowOffset during: [ :shadowCanvas | shadowCanvas roundShadowCornersOf: self during: [ (shadowCanvas isVisible: self bounds) ifTrue: [ shadowCanvas fillRectangle: self bounds fillStyle: self shadowColor ] ] ]. ! ! !Morph methodsFor: 'drawing' stamp: 'CamilloBruni 5/29/2012 17:13' prior: 26651034! drawErrorOn: aCanvas "The morph (or one of its submorphs) had an error in its drawing method." aCanvas frameAndFillRectangle: bounds fillColor: Color red borderWidth: 1 borderColor: Color yellow. aCanvas line: bounds topLeft to: bounds bottomRight width: 1 color: Color yellow. aCanvas line: bounds topRight to: bounds bottomLeft width: 1 color: Color yellow. self valueOfProperty: #drawError ifPresentDo: [ :error| | trace stringBounds | trace := String streamContents: [ :s| error signalerContext shortDebugStackOn: s]. stringBounds := bounds insetBy: 5. trace linesDo: [ :aString| aCanvas drawString: aString in: stringBounds. stringBounds := stringBounds top: stringBounds top + (TextStyle defaultFont pixelSize * 1.2) ]]! ! !Morph methodsFor: 'drawing' stamp: ' 9/3/2000 13:55' prior: 26651848! drawMouseDownHighlightOn: aCanvas self highlightedForMouseDown ifTrue: [ aCanvas frameRectangle: self fullBounds color: self color darker darker].! ! !Morph methodsFor: 'drawing' stamp: 'IgorStasenko 7/18/2011 17:48' prior: 26652070! drawOn: aCanvas aCanvas fillRectangle: self bounds fillStyle: self fillStyle borderStyle: self borderStyle! ! !Morph methodsFor: 'drawing' stamp: 'IgorStasenko 7/18/2011 18:44' prior: 26652251! drawRolloverBorderOn: aCanvas | colorToUse offsetToUse myShadow newForm f | colorToUse := self valueOfProperty: #rolloverColor ifAbsent: [Color blue alpha: 0.5]. offsetToUse := self valueOfProperty: #rolloverWidth ifAbsent: [10 @ 10]. self hasRolloverBorder: false. myShadow := self shadowForm. self hasRolloverBorder: true. myShadow offset: 0 @ 0. f := ColorForm extent: myShadow extent depth: 1. myShadow displayOn: f. f colors: {Color transparent. colorToUse}. newForm := Form extent: offsetToUse * 2 + myShadow extent depth: 32. (WarpBlt current toForm: newForm) sourceForm: f; cellSize: 1; combinationRule: 3; copyQuad: f boundingBox innerCorners toRect: newForm boundingBox. aCanvas translateBy: offsetToUse negated during: [:shadowCanvas | (shadowCanvas asShadowDrawingCanvas: colorToUse) paintImage: newForm at: self position] ! ! !Morph methodsFor: 'drawing' stamp: 'IgorStasenko 12/22/2012 03:14' prior: 26653215! drawSubmorphsOn: aCanvas "Display submorphs back to front" | drawBlock | submorphs isEmpty ifTrue: [^self]. drawBlock := [:canvas | submorphs reverseDo: [:m | canvas fullDrawMorph: m]]. self clipSubmorphs ifTrue: [aCanvas clipBy: (aCanvas clipRect intersect: self clippingBounds ifNone: [ ^ self ]) during: drawBlock] ifFalse: [drawBlock value: aCanvas]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:51' prior: 26663333! dropEnabled "Get this morph's ability to add and remove morphs via drag-n-drop." ^(self valueOfProperty: #dropEnabled) == true ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:18' prior: 26663536! dropEnabled: aBool ^self enableDrop: aBool! ! !Morph methodsFor: 'event handling' stamp: 'ar 1/10/2001 21:28' prior: 26672454! dropFiles: anEvent "Handle a number of files dropped from the OS" ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/28/2000 10:52' prior: 26663655! dropHighlightColor ^ Color blue! ! !Morph methodsFor: 'copying' stamp: 'MarcusDenker 9/13/2013 16:20' prior: 68527117! duplicate "Make and return a duplicate of the receiver" | newMorph topRend | ((topRend := self topRendererOrSelf) ~~ self) ifTrue: [^ topRend duplicate]. newMorph := self veryDeepCopy. newMorph arrangeToStartStepping. newMorph privateOwner: nil. "no longer in world" ^newMorph! ! !Morph methodsFor: 'meta-actions' stamp: 'ar 11/4/2000 17:56' prior: 26788774! duplicateMorph: evt "Make and return a duplicate of the receiver's argument" | dup | dup := self duplicate. evt hand grabMorph: dup from: owner. "duplicate was ownerless so use #grabMorph:from: here" ^dup! ! !Morph methodsFor: 'halos and balloon help' stamp: 'StephaneDucasse 9/7/2011 21:23' prior: 26720142! editBalloonHelpContent: aString | reply | reply := UIManager default multiLineRequest: 'Edit the balloon help text for ' translated, self externalName initialAnswer: (aString ifNil: [self noHelpString] ifNotNil: [aString]) answerHeight: 200. reply ifNil: [^ self]. "User cancelled out of the dialog" (reply isEmpty or: [reply asString = self noHelpString]) ifTrue: [self setBalloonText: nil] ifFalse: [self setBalloonText: reply]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sma 12/23/1999 13:24' prior: 26720666! editBalloonHelpText "Modify the receiver's balloon help text." self editBalloonHelpContent: self balloonText! ! !Morph methodsFor: 'utilities' stamp: 'cb 6/25/2013 13:24' prior: 41605152! embedInWindow | window worldToUse | worldToUse := self world. "I'm assuming we are already in a world" window := (SystemWindow labelled: self defaultLabel) model: nil. window bounds: ((self position - ((0@window labelHeight) + window borderWidth)) corner: self bottomRight + window borderWidth). window addMorph: self frame: (0@0 extent: 1@1). window updatePaneColors. worldToUse addMorph: window. window activate! ! !Morph methodsFor: 'utilities' stamp: 'AlainPlantec 12/16/2009 12:27' prior: 26837840! embeddedInMorphicWindowLabeled: labelString | window | window := (SystemWindow labelled: labelString) model: nil. window setStripeColorsFrom: (self theme windowColorFor: self). window addMorph: self frame: (0@0 extent: 1@1). ^ window! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:50' prior: 26664095! enableDrag: aBoolean self setProperty: #dragEnabled toValue: aBoolean! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:41' prior: 26663763! enableDragNDrop self enableDragNDrop: true! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:21' prior: 26663880! enableDragNDrop: aBoolean "Set both properties at once" self separateDragAndDrop. self enableDrag: aBoolean. self enableDrop: aBoolean.! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:51' prior: 26664241! enableDrop: aBoolean self setProperty: #dropEnabled toValue: aBoolean! ! !Morph methodsFor: 'accessing' stamp: 'gvc 1/11/2007 12:21' prior: 39519726! enabled "Answer whether the receiver is enabled." ^true! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 5/31/2013 17:45' prior: 39519861! enabled: aBoolean "does nothing" ! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 09:53' prior: 26621365! eventHandler "answer the receiver's eventHandler" ^ extension ifNotNil: [extension eventHandler] ! ! !Morph methodsFor: 'accessing' stamp: 'dgd 2/16/2003 19:25' prior: 26621530! eventHandler: anEventHandler "Note that morphs can share eventHandlers and all is OK. " self assureExtension eventHandler: anEventHandler! ! !Morph methodsFor: 'drawing' stamp: 'ar 11/8/2000 19:29' prior: 26653643! expandFullBoundsForRolloverBorder: aRectangle | delta | delta := self valueOfProperty: #rolloverWidth ifAbsent: [10@10]. ^aRectangle expandBy: delta. ! ! !Morph methodsFor: 'menus' stamp: 'DamienCassou 9/29/2009 13:01' prior: 26778600! exportAsBMP | fName | fName := UIManager default request:'Please enter the name' translated initialAnswer: self externalName,'.bmp'. fName isEmptyOrNil ifTrue:[^self]. self imageForm writeBMPfileNamed: fName.! ! !Morph methodsFor: 'menus' stamp: 'DamienCassou 9/29/2009 13:01' prior: 26778883! exportAsGIF | fName | fName := UIManager default request:'Please enter the name' translated initialAnswer: self externalName,'.gif'. fName isEmptyOrNil ifTrue:[^self]. GIFReadWriter putForm: self imageForm onFileNamed: fName.! ! !Morph methodsFor: 'menus' stamp: 'DamienCassou 9/29/2009 13:01' prior: 26779183! exportAsJPEG "Export the receiver's image as a JPEG" | fName | fName := UIManager default request: 'Please enter the name' translated initialAnswer: self externalName,'.jpeg'. fName isEmptyOrNil ifTrue: [^ self]. self imageForm writeJPEGfileNamed: fName! ! !Morph methodsFor: 'menus' stamp: 'DamienCassou 9/29/2009 13:01' prior: 26779513! exportAsPNG | fName | fName := UIManager default request:'Please enter the name' translated initialAnswer: self externalName,'.png'. fName isEmptyOrNil ifTrue:[^self]. PNGReadWriter putForm: self imageForm onFileNamed: fName.! ! !Morph methodsFor: 'accessing - extension' stamp: 'dgd 2/16/2003 19:22' prior: 26627539! extension "answer the recevier's extension" ^ extension! ! !Morph methodsFor: 'geometry' stamp: '' prior: 26703347! extent ^ bounds extent! ! !Morph methodsFor: 'geometry' stamp: 'MarianoMartinezPeck 8/24/2012 15:26' prior: 26703452! extent: aPoint |newExtent| newExtent := aPoint rounded. (bounds extent closeTo: newExtent) ifTrue: [^ self]. self changed. bounds := (bounds topLeft extent: newExtent). self layoutChanged. self changed. ! ! !Morph methodsFor: 'viewer' stamp: 'AlainPlantec 1/14/2010 09:41' prior: 26838304! externalName ^ self assureExtension externalName ifNil: [super externalName]! ! !Morph methodsFor: 'visual properties' stamp: 'gvc 9/11/2009 16:35' prior: 26838829! fillStyle "Return the current fillStyle of the receiver." ^extension ifNil: [^color] ifNotNil: [extension fillStyle ifNil: [color]]! ! !Morph methodsFor: 'visual properties' stamp: 'gvc 9/11/2009 16:39' prior: 26839042! fillStyle: aFillStyle "Set the current fillStyle of the receiver. Optimized for no change." self assureExtension. extension fillStyle = aFillStyle ifTrue: [^self]. "no change optimization" extension fillStyle: aFillStyle. color := aFillStyle asColor. self changed! ! !Morph methodsFor: 'visual properties' stamp: 'dgd 1/7/2005 19:31' prior: 26839389! fillWithRamp: rampSpecsOrColor oriented: aRatio rampSpecsOrColor isColor ifTrue: [self color: rampSpecsOrColor". self borderColor: rampSpecsOrColor muchDarker"] ifFalse: [| fill | fill := GradientFillStyle ramp: rampSpecsOrColor. fill origin: self bounds topLeft. fill direction: (self bounds extent * aRatio) truncated. fill radial: false. self fillStyle: fill. self borderColor: (rampSpecsOrColor first value mixed: 0.5 with: rampSpecsOrColor last value) muchDarker]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'rhi 9/10/2000 12:12' prior: 26812331! findA: aClass "Return the first submorph of the receiver that is descended from the given class. Return nil if there is no such submorph. Clients of this code should always check for a nil return value so that the code will be robust if the user takes the morph apart." ^self submorphs detect: [:p | p isKindOf: aClass] ifNone: [nil]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'LC 9/28/1999 19:12' prior: 26813194! findDeepSubmorphThat: block1 ifAbsent: block2 self allMorphsDo: [:m | (block1 value: m) == true ifTrue: [^ m]]. ^ block2 value! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'sw 1/9/2001 12:30' prior: 26812745! findDeeplyA: aClass "Return a morph in the submorph tree of the receiver that is descended from the given class. Return nil if there is no such morph. Clients of this code should always check for a nil return value so that the code will be robust if the user takes the morph apart." ^ (self allMorphs copyWithout: self) detect: [:p | p isKindOf: aClass] ifNone: [nil]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'BenjaminVanRyseghem 3/19/2011 22:09' prior: 26813421! findSubmorphBinary: aBlock "Use binary search for finding a specific submorph of the receiver. Caller must be certain that the ordering holds for the submorphs." ^submorphs findBinary: aBlock do: [ :found | found ] ifNone: [:a :b | ]! ! !Morph methodsFor: 'button' stamp: 'marcus.denker 8/24/2008 21:42' prior: 26632978! firedMouseUpCode "If the user has special mouseUpCodeToRun, then fire it once right now and return true, else return false" | evt | (self world isNil or: [self mouseUpCodeOrNil isNil]) ifTrue: [^false]. evt := MouseEvent basicNew setType: nil position: self center buttons: 0 hand: self world activeHand. self programmedMouseUp: evt for: self. ^true! ! !Morph methodsFor: 'structure' stamp: 'di 11/13/2000 00:48' prior: 26806982! firstOwnerSuchThat: conditionBlock self allOwnersDo: [:m | (conditionBlock value: m) ifTrue: [^ m]]. ^ nil ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 2/22/2003 14:31' prior: 26813732! firstSubmorph ^submorphs first! ! !Morph methodsFor: 'geometry' stamp: 'SeanDeNigris 5/4/2013 11:17' prior: 36787138! fitInWorld self bounds: (self bounds translatedAndSquishedToBeWithin: self world bounds).! ! !Morph methodsFor: 'macpal' stamp: 'GaryChambers 12/21/2011 11:10' prior: 26764170! flash | fs w | fs := self fillStyle. self fillStyle: Color black. (w := self world) ifNotNil: [w displayWorldSafely]. self fillStyle: fs! ! !Morph methodsFor: 'drawing' stamp: 'sw 11/26/2003 17:43' prior: 26653861! flashBounds "Flash the receiver's bounds -- does not use the receiver's color, thus works with StringMorphs and SketchMorphs, etc., for which #flash is useless. No senders initially, but useful to send this from a debugger or inspector" 5 timesRepeat: [Display flash: self boundsInWorld andWait: 120]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/5/2000 18:13' prior: 26664384! formerOwner ^self valueOfProperty: #formerOwner! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'GuillermoPolito 9/1/2010 18:40' prior: 26664517! formerOwner: aMorphOrNil aMorphOrNil ifNil: [self removeProperty: #formerOwner] ifNotNil: [self setProperty: #formerOwner toValue: aMorphOrNil]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/5/2000 18:13' prior: 26664737! formerPosition ^self valueOfProperty: #formerPosition! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'GuillermoPolito 9/1/2010 18:41' prior: 26664876! formerPosition: formerPosition formerPosition ifNil: [self removeProperty: #formerPosition] ifNotNil: [self setProperty: #formerPosition toValue: formerPosition]! ! !Morph methodsFor: 'layout' stamp: 'StephaneDucasse 6/2/2013 14:18' prior: 39519986! fullBounds "Return the bounding box of the receiver and all its children. Recompute the layout if necessary." fullBounds ifNotNil: [ ^ fullBounds ]. "Errors at this point can be critical so make sure we catch 'em all right" self computeFullBounds. "This should do it unless you don't screw up the bounds" ^ fullBounds! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:06' prior: 26703728! fullBoundsInWorld ^self bounds: self fullBounds in: self world! ! !Morph methodsFor: 'geometry testing' stamp: 'di 5/3/2000 19:05' prior: 26714212! fullContainsPoint: aPoint (self fullBounds containsPoint: aPoint) ifFalse: [^ false]. "quick elimination" (self containsPoint: aPoint) ifTrue: [^ true]. "quick acceptance" submorphs do: [:m | (m fullContainsPoint: aPoint) ifTrue: [^ true]]. ^ false ! ! !Morph methodsFor: 'drawing' stamp: 'CamilloBruni 5/29/2012 16:51' prior: 26654242! fullDrawOn: aCanvas "Draw the full Morphic structure on the given Canvas" self visible ifFalse: [^ self]. (aCanvas isVisible: self fullBounds) ifFalse:[^self]. (self hasProperty: #errorOnDraw) ifTrue:[^self drawErrorOn: aCanvas]. [ "Note: At some point we should generalize this into some sort of multi-canvas so that we can cross-optimize some drawing operations." "Pass 1: Draw eventual drop-shadow" self hasDropShadow ifTrue: [ self drawDropShadowOn: aCanvas ]. (self hasRolloverBorder and: [(aCanvas seesNothingOutside: self bounds) not]) ifTrue: [self drawRolloverBorderOn: aCanvas]. "Pass 2: Draw receiver itself" aCanvas roundCornersOf: self during:[ (aCanvas isVisible: self bounds) ifTrue:[aCanvas drawMorph: self]. self drawSubmorphsOn: aCanvas. self drawDropHighlightOn: aCanvas. self drawMouseDownHighlightOn: aCanvas] ] on: Error do: [:err | self setProperty: #errorOnDraw toValue: true. self setProperty: #drawError toValue: err freeze. ^ self drawErrorOn: aCanvas ]! ! !Morph methodsFor: 'caching' stamp: 'jm 11/13/97 16:34' prior: 26633414! fullReleaseCachedState "Release the cached state of the receiver and its full submorph tree." self allMorphsDo: [:m | m releaseCachedState]. ! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:06' prior: 26703856! globalPointToLocal: aPoint ^self point: aPoint from: nil! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'michael.rueger 3/9/2009 18:48' prior: 26826694! goBehind owner addMorphBack: self. ! ! !Morph methodsFor: 'geometry' stamp: 'ClementBera 7/30/2013 11:03' prior: 46532339! goHome | box fb | owner ifNil: [^ self]. self visible ifFalse: [^ self]. box := owner visibleClearArea. fb := self fullBounds. fb left < box left ifTrue: [self left: box left - fb left + self left]. fb right > box right ifTrue: [self right: box right - fb right + self right]. fb top < box top ifTrue: [self top: box top - fb top + self top]. fb bottom > box bottom ifTrue: [self bottom: box bottom - fb bottom + self bottom]. ! ! !Morph methodsFor: 'meta-actions' stamp: 'ar 10/6/2000 16:37' prior: 26789051! grabMorph: evt evt hand grabMorph: self! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/6/2000 15:13' prior: 26665114! grabTransform "Return the transform for the receiver which should be applied during grabbing" ^owner ifNil:[IdentityTransform new] ifNotNil:[owner grabTransform]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:57' prior: 26750816! hResizing "Layout specific. This property describes how the receiver should be resized with respect to its owner and its children. Possible values are: #rigid - do not resize the receiver #spaceFill - resize to fill owner's available space #shrinkWrap - resize to fit children " | props | props := self layoutProperties. ^props ifNil:[#rigid] ifNotNil:[props hResizing].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:06' prior: 26751434! hResizing: aSymbol "Layout specific. This property describes how the receiver should be resized with respect to its owner and its children. Possible values are: #rigid - do not resize the receiver #spaceFill - resize to fill owner's available space #shrinkWrap - resize to fit children " self assureLayoutProperties hResizing: aSymbol. self layoutChanged. ! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/31/2000 20:45' prior: 26751274! hResizingString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self hResizing! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 5/7/2010 21:44' prior: 26720864! halo ^ self outermostWorldMorph ifNotNil: [:w | w haloMorphs detect: [:h | h target == self] ifNone: []]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 9/15/2000 16:13' prior: 26721050! haloClass "Answer the name of the desired kind of HaloMorph to launch on behalf of the receiver" ^ #HaloMorph ! ! !Morph methodsFor: 'accessing' stamp: 'usmanbhatti 3/6/2012 19:23' prior: 26621743! halosEnabled ^ self class halosEnabled! ! !Morph methodsFor: 'events-processing' stamp: 'ar 1/10/2001 21:35' prior: 26690144! handleDropFiles: anEvent "Handle a drop from the OS." anEvent wasHandled ifTrue:[^self]. "not interested" (self wantsDropFiles: anEvent) ifFalse:[^self]. anEvent wasHandled: true. self dropFiles: anEvent. ! ! !Morph methodsFor: 'events-processing' stamp: 'AlainPlantec 12/1/2010 09:33' prior: 26690437! handleDropMorph: anEvent "Handle a dropping morph." | aMorph localPt | aMorph := anEvent contents. "Do a symmetric check if both morphs like each other" ((self wantsDroppedMorph: aMorph event: anEvent) "I want her" and: [aMorph wantsToBeDroppedInto: self]) "she wants me" ifFalse: [^ self]. anEvent wasHandled: true. "Transform the morph into the receiver's coordinate frame. This is currently incomplete since it only takes the offset into account where it really should take the entire transform." localPt := (self transformedFrom: anEvent hand world) "full transform down" globalPointToLocal: aMorph referencePosition. aMorph referencePosition: localPt. self acceptDroppingMorph: aMorph event: anEvent. aMorph justDroppedInto: self event: anEvent. ! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/15/2000 21:13' prior: 26691281! handleEvent: anEvent "Handle the given event" ^anEvent sentTo: self.! ! !Morph methodsFor: 'events-processing' stamp: 'ar 10/4/2000 18:48' prior: 26691424! handleFocusEvent: anEvent "Handle the given event. This message is sent if the receiver currently has the focus and is therefore receiving events directly from some hand." ^self handleEvent: anEvent! ! !Morph methodsFor: 'events-processing' stamp: 'GuillermoPolito 4/22/2012 17:20' prior: 26691710! handleKeyDown: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. (self handlesKeyDown: anEvent) ifFalse:[^self]. anEvent wasHandled: true. ^self keyDown: anEvent! ! !Morph methodsFor: 'events-processing' stamp: 'GuillermoPolito 4/22/2012 17:19' prior: 26691986! handleKeyUp: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. (self handlesKeyUp: anEvent) ifFalse:[^self]. anEvent wasHandled: true. ^self keyUp: anEvent! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/16/2000 14:22' prior: 26692243! handleListenEvent: anEvent "Handle the given event. This message is sent if the receiver is a registered listener for the given event." ^anEvent sentTo: self.! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 6/28/2012 12:58' prior: 26692493! handleMouseDown: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" anEvent hand removePendingBalloonFor: self. anEvent wasHandled: true. (anEvent controlKeyPressed and: [self cmdGesturesEnabled and: [ anEvent shiftPressed]]) ifTrue: [ self invokeMetaMenu: anEvent. ^ self eventHandler ifNotNil: [:handler | handler mouseDown: anEvent fromMorph: self ].]. "Make me modal during mouse transitions" anEvent hand newMouseFocus: self event: anEvent. anEvent blueButtonChanged ifTrue:[^self blueButtonDown: anEvent]. self mouseDown: anEvent. anEvent hand removeHaloFromClick: anEvent on: self. (self handlesMouseStillDown: anEvent) ifTrue:[ self startStepping: #handleMouseStillDown: at: Time millisecondClockValue + self mouseStillDownThreshold arguments: {anEvent copy resetHandlerFields} stepTime: self mouseStillDownStepRate ].! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 1/18/2012 19:06' prior: 26693490! handleMouseEnter: anEvent "System level event handling." (anEvent isDraggingEvent) ifTrue:[ (self handlesMouseOverDragging: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseEnterDragging: anEvent]. ^ self eventHandler ifNotNil: [:handler | handler mouseEnterDragging: anEvent fromMorph: self ]]. self wantsBalloon ifTrue:[anEvent hand triggerBalloonFor: self after: self balloonHelpDelayTime]. (self handlesMouseOver: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseEnter: anEvent ]. ^ self eventHandler ifNotNil: [:handler | handler mouseEnter: anEvent fromMorph: self ].! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 1/18/2012 18:58' prior: 26694184! handleMouseLeave: anEvent "System level event handling." anEvent hand removePendingBalloonFor: self. anEvent isDraggingEvent ifTrue:[ (self handlesMouseOverDragging: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseLeaveDragging: anEvent]. ^ self eventHandler ifNotNil: [:handler | handler mouseLeave: anEvent fromMorph: self ]]. (self handlesMouseOver: anEvent) ifTrue:[ anEvent wasHandled: true. self mouseLeave: anEvent ]. ^ self eventHandler ifNotNil: [:handler | handler mouseLeave: anEvent fromMorph: self ]! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 1/18/2012 18:58' prior: 26694811! handleMouseMove: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" "Rules say that by default a morph gets #mouseMove iff * the hand is not dragging anything, + and some button is down, + and the receiver is the current mouse focus." (anEvent hand hasSubmorphs) ifTrue:[^self]. (anEvent anyButtonPressed and:[anEvent hand mouseFocus == self]) ifFalse:[^self]. anEvent wasHandled: true. self mouseMove: anEvent. (self handlesMouseStillDown: anEvent) ifTrue:[ "Step at the new location" self startStepping: #handleMouseStillDown: at: Time millisecondClockValue arguments: {anEvent copy resetHandlerFields} stepTime: self mouseStillDownStepRate ]. ^ self eventHandler ifNotNil: [:handler | handler mouseMove: anEvent fromMorph: self ] ! ! !Morph methodsFor: 'events-processing' stamp: 'ar 4/23/2001 17:24' prior: 26695688! handleMouseOver: anEvent "System level event handling." anEvent hand mouseFocus == self ifTrue:[ "Got this directly through #handleFocusEvent: so check explicitly" (self containsPoint: anEvent position event: anEvent) ifFalse:[^self]]. anEvent hand noticeMouseOver: self event: anEvent! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 1/18/2012 18:59' prior: 26696070! handleMouseStillDown: anEvent "Called from the stepping mechanism for morphs wanting continuously repeated 'yes the mouse is still down, yes it is still down, yes it has not changed yet, no the mouse is still not up, yes the button is down' etc messages" (anEvent hand mouseFocus == self) ifFalse:[^self stopSteppingSelector: #handleMouseStillDown:]. self mouseStillDown: anEvent. ^ self eventHandler ifNotNil: [:handler | handler mouseStillDown: anEvent fromMorph: self ] ! ! !Morph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 1/18/2012 19:01' prior: 26696640! handleMouseUp: anEvent "System level event handling." anEvent wasHandled ifTrue:[^self]. "not interested" anEvent hand mouseFocus == self ifFalse:[^self]. "Not interested in other parties" anEvent hand releaseMouseFocus: self. anEvent wasHandled: true. anEvent blueButtonChanged ifTrue:[self blueButtonUp: anEvent] ifFalse:[self mouseUp: anEvent. self stopSteppingSelector: #handleMouseStillDown:]. ^ self eventHandler ifNotNil: [:handler | handler mouseUp: anEvent fromMorph: self ]! ! !Morph methodsFor: 'events-processing' stamp: 'md 10/22/2003 15:55' prior: 26697212! handleUnknownEvent: anEvent "An event of an unknown type was sent to the receiver. What shall we do?!!" Beeper beep. anEvent printString displayAt: 0@0. anEvent wasHandled: true.! ! !Morph methodsFor: 'updating' stamp: 'IgorStasenko 8/27/2013 16:25' prior: 49419061! handleUpdate: aMorphChangedAnnouncement ^ aMorphChangedAnnouncement deliverTo: self! ! !Morph methodsFor: 'event handling' stamp: 'tbn 3/12/2010 01:55' prior: 26672592! handleWindowEvent: anEvent "Handle an event concerning our host window" anEvent wasHandled ifTrue:[^self]. "not interested" (self wantsWindowEvent: anEvent) ifFalse:[^self]. anEvent wasHandled: true. self windowEvent: anEvent. ! ! !Morph methodsFor: 'meta-actions' stamp: 'SeanDeNigris 4/24/2012 19:49' prior: 26789170! handlerForBlueButtonDown: anEvent "Return the (prospective) handler for a mouse down event. The handler is temporarily installed and can be used for morphs further down the hierarchy to negotiate whether the inner or the outer morph should finally handle the event. Note: Halos handle blue button events themselves so we will only be asked if there is currently no halo on top of us. Check whtehr halods are enabled (for deployment)." self wantsHaloFromClick ifFalse:[^nil]. self class cycleHalosBothDirections ifTrue: [ anEvent handler ifNil:[^self]. (anEvent handler isKindOf: PasteUpMorph) ifTrue:[^self] ]. (anEvent shiftPressed) ifFalse:[^nil] "let outer guy have it" ifTrue:[^self] "let me have it" ! ! !Morph methodsFor: 'meta-actions' stamp: 'ar 10/12/2000 17:07' prior: 26789964! handlerForMetaMenu: evt "Return the prospective handler for invoking the meta menu. By default, the top-most morph in the innermost world gets this menu" self isWorldMorph ifTrue:[^self]. evt handler ifNotNil:[evt handler isWorldMorph ifTrue:[^self]]. ^nil! ! !Morph methodsFor: 'event handling' stamp: 'nk 3/10/2004 19:47' prior: 26672894! handlerForMouseDown: anEvent "Return the (prospective) handler for a mouse down event. The handler is temporarily installed and can be used for morphs further down the hierarchy to negotiate whether the inner or the outer morph should finally handle the event." anEvent blueButtonPressed ifTrue: [^ self handlerForBlueButtonDown: anEvent]. anEvent yellowButtonPressed ifTrue: [^ self handlerForYellowButtonDown: anEvent]. anEvent controlKeyPressed ifTrue: [^ self handlerForMetaMenu: anEvent]. (self handlesMouseDown: anEvent) ifFalse: [^ nil]. "not interested" anEvent handler ifNil: [^ self ]. "Same priority but I am innermost" "Nobody else was interested" ^self mouseDownPriority >= anEvent handler mouseDownPriority ifTrue: [ self] ifFalse: [ nil]! ! !Morph methodsFor: 'event handling' stamp: 'nk 3/10/2004 19:48' prior: 26673746! handlerForYellowButtonDown: anEvent "Return the (prospective) handler for a mouse down event with the yellow button pressed. The handler is temporarily installed and can be used for morphs further down the hierarchy to negotiate whether the inner or the outer morph should finally handle the event." (self hasYellowButtonMenu or: [ self handlesMouseDown: anEvent ]) ifFalse: [ ^ nil]. "Not interested." anEvent handler ifNil: [^ self]. "Nobody else was interested" "Same priority but I am innermost." ^ self mouseDownPriority >= anEvent handler mouseDownPriority ifFalse: [nil ] ifTrue: [self]! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 4/22/2012 17:19' prior: 26674445! handlesKeyDown: evt ^self handlesKeyboard: evt! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 4/22/2012 17:20' prior: 26674575! handlesKeyStroke: evt ^self handlesKeyboard: evt! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 4/22/2012 17:19' prior: 26674707! handlesKeyUp: evt ^self handlesKeyboard: evt! ! !Morph methodsFor: 'event handling' stamp: 'ar 10/28/2000 22:18' prior: 26674823! handlesKeyboard: evt "Return true if the receiver wishes to handle the given keyboard event" self eventHandler ifNotNil: [^ self eventHandler handlesKeyboard: evt]. ^ false ! ! !Morph methodsFor: 'event handling' stamp: 'nk 2/14/2004 18:42' prior: 26675069! handlesMouseDown: evt "Do I want to receive mouseDown events (mouseDown:, mouseMove:, mouseUp:)?" "NOTE: The default response is false, except if you have added sensitivity to mouseDown events using the on:send:to: mechanism. Subclasses that implement these messages directly should override this one to return true." self eventHandler ifNotNil: [^ self eventHandler handlesMouseDown: evt]. ^ false! ! !Morph methodsFor: 'event handling' stamp: 'di 9/14/1998 07:31' prior: 26675544! handlesMouseOverDragging: evt "Return true if I want to receive mouseEnterDragging: and mouseLeaveDragging: when the hand drags something over me (button up or button down), or when the mouse button is down but there is no mouseDown recipient. The default response is false, except if you have added sensitivity to mouseEnterLaden: or mouseLeaveLaden:, using the on:send:to: mechanism." "NOTE: If the hand state matters in these cases, it may be tested by constructs such as event anyButtonPressed event hand hasSubmorphs" self eventHandler ifNotNil: [^ self eventHandler handlesMouseOverDragging: evt]. ^ false! ! !Morph methodsFor: 'event handling' stamp: 'ar 10/22/2000 17:06' prior: 26676237! handlesMouseStillDown: evt "Return true if the receiver wants to get repeated #mouseStillDown: messages between #mouseDown: and #mouseUp" self eventHandler ifNotNil: [^ self eventHandler handlesMouseStillDown: evt]. ^ false ! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:49' prior: 26744601! hasClipLayoutCellsString ^ (self clipLayoutCells) -> 'clip to cell size' translated! ! !Morph methodsFor: 'drawing' stamp: 'StephaneDucasse 4/22/2012 16:50' prior: 26655353! hasClipSubmorphsString "Answer a string that represents the clip-submophs checkbox" ^ (self clipSubmorphs) -> 'provide clipping' translated! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 4/22/2012 16:50' prior: 26779816! hasDirectionHandlesString ^ (self wantsDirectionHandles) -> 'direction handles' translated! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:50' prior: 26744765! hasDisableTableLayoutString ^ (self disableTableLayout) -> 'disable layout in tables' translated! ! !Morph methodsFor: 'text-anchor' stamp: 'StephaneDucasse 4/22/2012 16:50' prior: 26833350! hasDocumentAnchorString ^ (self textAnchorType == #document) -> 'Document' translated! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 4/22/2012 16:51' prior: 26779982! hasDragAndDropEnabledString "Answer a string to characterize the drag & drop status of the receiver" ^ (self dragNDropEnabled) -> 'accept drops' translated! ! !Morph methodsFor: 'drop shadows' stamp: 'dgd 2/16/2003 21:42' prior: 26659342! hasDropShadow "answer whether the receiver has DropShadow" ^ self valueOfProperty: #hasDropShadow ifAbsent: [false]! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 10/26/2000 19:03' prior: 26659685! hasDropShadow: aBool aBool ifTrue:[self setProperty: #hasDropShadow toValue: true] ifFalse:[self removeProperty: #hasDropShadow]! ! !Morph methodsFor: 'drop shadows' stamp: 'StephaneDucasse 4/22/2012 16:51' prior: 26659544! hasDropShadowString ^ (self hasDropShadow) -> 'show shadow' translated! ! !Morph methodsFor: 'accessing - extension' stamp: 'md 2/27/2006 08:31' prior: 26627673! hasExtension "answer whether the receiver has extention" ^ extension notNil! ! !Morph methodsFor: 'event handling' stamp: 'sw 4/2/98 14:16' prior: 26676531! hasFocus ^ false! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 9/15/2000 16:16' prior: 26721241! hasHalo ^self hasProperty: #hasHalo.! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 9/28/2000 17:54' prior: 26721356! hasHalo: aBool aBool ifTrue:[self setProperty: #hasHalo toValue: true] ifFalse:[self removeProperty: #hasHalo]! ! !Morph methodsFor: 'text-anchor' stamp: 'StephaneDucasse 4/22/2012 16:51' prior: 26833517! hasInlineAnchorString ^ (self textAnchorType == #inline)-> 'Inline' translated! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:52' prior: 26744942! hasNoLayoutString ^ (self layoutPolicy isNil) -> 'no layout' translated! ! !Morph methodsFor: 'structure' stamp: 'ar 10/3/2000 15:36' prior: 26807157! hasOwner: aMorph "Return true if the receiver has aMorph in its owner chain" aMorph ifNil:[^true]. self allOwnersDo:[:m| m = aMorph ifTrue:[^true]]. ^false! ! !Morph methodsFor: 'text-anchor' stamp: 'StephaneDucasse 4/22/2012 16:52' prior: 26833676! hasParagraphAnchorString ^ (self textAnchorType == #paragraph) -> 'Paragraph' translated! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 09:47' prior: 26628407! hasProperty: aSymbol "Answer whether the receiver has the property named aSymbol" extension ifNil: [^ false]. ^extension hasProperty: aSymbol! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:52' prior: 26745094! hasProportionalLayoutString | layout | ^ ((layout := self layoutPolicy) notNil and: [layout isProportionalLayout]) -> 'proportional layout' translated! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:52' prior: 26745329! hasReverseCellsString ^ (self reverseTableCells) -> 'reverse table cells' translated! ! !Morph methodsFor: 'drop shadows' stamp: 'dgd 2/16/2003 21:58' prior: 26659887! hasRolloverBorder "answer whether the receiver has RolloverBorder" ^ self valueOfProperty: #hasRolloverBorder ifAbsent: [false]! ! !Morph methodsFor: 'drop shadows' stamp: 'RAA 11/7/2000 15:54' prior: 26660089! hasRolloverBorder: aBool aBool ifTrue:[self setProperty: #hasRolloverBorder toValue: true] ifFalse:[self removeProperty: #hasRolloverBorder]! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:52' prior: 26745494! hasRubberBandCellsString ^ (self rubberBandCells) -> 'rubber band cells' translated! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 2/22/2003 14:32' prior: 26813839! hasSubmorphs ^submorphs notEmpty! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/22/2012 16:53' prior: 26745658! hasTableLayoutString | layout | ^ ((layout := self layoutPolicy) notNil and: [layout isTableLayout]) -> 'table layout' translated! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:56' prior: 74001895! hasTranslucentColor "Answer true if this any of this morph is translucent but not transparent." self deprecated: 'Use isTranslucentButNotTransparent' on: '14/10/2013' in: #Pharo30. ^ self isTranslucentButNotTransparent! ! !Morph methodsFor: 'menu' stamp: 'StephaneDucasse 7/18/2010 16:17' prior: 26768251! hasYellowButtonMenu "Answer true if I have any items at all for a context (yellow button) menu." ^ self wantsYellowButtonMenu or: [self modelOrNil ifNil: [false] ifNotNilDo: [:aModel | aModel hasModelYellowButtonMenuItems]]! ! !Morph methodsFor: 'geometry' stamp: '' prior: 26704900! height ^ bounds height! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:22' prior: 26704989! height: aNumber " Set my height; my position (top-left corner) and width will remain the same " self extent: self width@aNumber asInteger. ! ! !Morph methodsFor: 'Morphic-Base-Widgets' stamp: 'BenjaminVanRyseghem 7/25/2012 11:42' prior: 26587754! heightToDisplayInList: aList ^ self minExtent y! ! !Morph methodsFor: 'drawing' stamp: 'sw 10/30/1998 18:27' prior: 26655558! hide owner ifNil: [^ self]. self visible ifTrue: [self visible: false. self changed]! ! !Morph methodsFor: 'accessing' stamp: 'sw 11/30/1998 12:44' prior: 26622060! highlight "The receiver is being asked to appear in a highlighted state. Mostly used for textual morphs" self color: self highlightColor! ! !Morph methodsFor: 'accessing' stamp: 'MarcusDenker 10/3/2013 23:47' prior: 69232348! highlightColor ^ (self valueOfProperty: #highlightColor) ifNotNil: [:val | val ifNil: [self error: 'nil highlightColor']] ifNil: [owner ifNil: [self color] ifNotNil: [owner highlightColor]]! ! !Morph methodsFor: 'accessing' stamp: 'sw 7/2/1998 13:51' prior: 26622538! highlightColor: aColor self setProperty: #highlightColor toValue: aColor! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/28/2000 11:51' prior: 26665501! highlightForDrop self highlightForDrop: true! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/28/2000 12:01' prior: 26665622! highlightForDrop: aBoolean self setProperty: #highlightedForDrop toValue: aBoolean. self changed! ! !Morph methodsFor: 'drawing' stamp: 'LC 5/18/2000 08:51' prior: 26655853! highlightForMouseDown self highlightForMouseDown: true! ! !Morph methodsFor: 'drawing' stamp: 'ar 3/17/2001 15:56' prior: 26655971! highlightForMouseDown: aBoolean aBoolean ifTrue:[self setProperty: #highlightedForMouseDown toValue: aBoolean] ifFalse:[self removeProperty: #highlightedForMouseDown. self resetExtension]. self changed! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/28/2000 10:53' prior: 26665353! highlightedForDrop ^(self valueOfProperty: #highlightedForDrop) == true! ! !Morph methodsFor: 'drawing' stamp: 'LC 5/18/2000 08:48' prior: 26655708! highlightedForMouseDown ^(self valueOfProperty: #highlightedForMouseDown) == true! ! !Morph methodsFor: 'thumbnail' stamp: 'dgd 9/12/2004 21:12' prior: 26834514! icon "Answer a form with an icon to represent the receiver" ^ self valueOfProperty: #icon! ! !Morph methodsFor: 'thumbnail' stamp: 'dgd 9/12/2004 20:33' prior: 26834671! iconOrThumbnail "Answer an appropiate form to represent the receiver" ^ self icon ifNil: [ | maxExtent fb |maxExtent := 320 @ 240. fb := self fullBounds. fb area <= (maxExtent x * maxExtent y) ifTrue: [self imageForm] ifFalse: [self imageFormForRectangle: (fb topLeft extent: maxExtent)] ] ! ! !Morph methodsFor: 'thumbnail' stamp: 'dgd 9/13/2004 12:43' prior: 26835048! iconOrThumbnailOfSize: aNumberOrPoint "Answer an appropiate form to represent the receiver" ^ self iconOrThumbnail scaledIntoFormOfSize: aNumberOrPoint ! ! !Morph methodsFor: 'drawing' stamp: 'jm 6/11/97 17:21' prior: 26656240! imageForm ^ self imageFormForRectangle: self fullBounds ! ! !Morph methodsFor: 'drawing' stamp: 'nk 9/1/2004 15:08' prior: 26656643! imageForm: depth backgroundColor: aColor forRectangle: rect | canvas | canvas := Display defaultCanvasClass extent: rect extent depth: depth. canvas translateBy: rect topLeft negated during:[:tempCanvas| tempCanvas fillRectangle: rect color: aColor. tempCanvas fullDrawMorph: self]. ^ canvas form offset: rect topLeft! ! !Morph methodsFor: 'drawing' stamp: 'ar 9/1/2000 14:23' prior: 26657035! imageForm: depth forRectangle: rect | canvas | canvas := Display defaultCanvasClass extent: rect extent depth: depth. canvas translateBy: rect topLeft negated during:[:tempCanvas| tempCanvas fullDrawMorph: self]. ^ canvas form offset: rect topLeft! ! !Morph methodsFor: 'drawing' stamp: 'di 7/8/1998 12:42' prior: 26656360! imageFormDepth: depth ^ self imageForm: depth forRectangle: self fullBounds ! ! !Morph methodsFor: 'drawing' stamp: 'di 9/9/1998 22:25' prior: 26656500! imageFormForRectangle: rect ^ self imageForm: Display depth forRectangle: rect ! ! !Morph methodsFor: 'user interface' stamp: 'MarianoMartinezPeck 8/24/2012 15:28' prior: 26836993! initialExtent | ext | (ext := self valueOfProperty: #initialExtent) ifNotNil: [^ ext]. ^700@500! ! !Morph methodsFor: 'initialization' stamp: 'alain.plantec 5/28/2009 10:09' prior: 48928738! initialize "initialize the state of the receiver" super initialize. owner := nil. submorphs := EmptyArray. bounds := self defaultBounds. color := self defaultColor! ! !Morph methodsFor: 'accessing - extension' stamp: 'md 2/27/2006 08:35' prior: 26627827! initializeExtension "private - initializes the receiver's extension" extension := MorphExtension new! ! !Morph methodsFor: 'geometry' stamp: 'ar 12/22/2001 22:43' prior: 26705196! innerBounds "Return the inner rectangle enclosed by the bounds of this morph excluding the space taken by its borders. For an unbordered morph, this is just its bounds." ^ self bounds insetBy: self borderWidth! ! !Morph methodsFor: 'accessing' stamp: 'tk 1/31/2002 10:25' prior: 26622676! insetColor owner ifNil:[^self color]. ^ self colorForInsets! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 11/28/2009 14:34' prior: 26790303! inspectAt: aPoint event: evt | morphs target | morphs := self morphsAt: aPoint. (morphs includes: self) ifFalse:[morphs := morphs copyWith: self]. target := UIManager default chooseFrom: (morphs collect: [:t |t class name asString]) values: morphs title: ('inspect whom? (deepest at top)' translated). target ifNil:[^self]. target inspectInMorphic: evt! ! !Morph methodsFor: 'menus' stamp: 'MarcusDenker 9/28/2013 15:50' prior: 68878049! inspectInMorphic: evt Smalltalk tools inspector inspect: self! ! !Morph methodsFor: 'debug and other' stamp: 'sw 11/5/1998 20:31' prior: 26645035! inspectOwnerChain self ownerChain inspectWithLabel: 'Owner chain for ', self printString! ! !Morph methodsFor: 'geometry' stamp: 'nk 4/27/2003 16:16' prior: 26705472! intersects: aRectangle "Answer whether aRectangle, which is in World coordinates, intersects me." ^self fullBoundsInWorld intersects: aRectangle! ! !Morph methodsFor: 'initialize' stamp: 'ar 1/31/2001 13:57' prior: 26729233! intoWorld: aWorld "The receiver has just appeared in a new world. Note: * aWorld can be nil (due to optimizations in other places) * owner is already set * owner's submorphs may not include receiver yet. Important: Keep this method fast - it is run whenever morphs are added." aWorld ifNil:[^self]. self wantsSteps ifTrue:[aWorld startStepping: self]. self submorphsDo:[:m| m intoWorld: aWorld]. ! ! !Morph methodsFor: 'change reporting' stamp: 'ar 11/12/2000 18:50' prior: 26635350! invalidRect: damageRect ^self invalidRect: damageRect from: self! ! !Morph methodsFor: 'change reporting' stamp: 'IgorStasenko 12/22/2012 03:13' prior: 26635498! invalidRect: aRectangle from: aMorph | damageRect | aRectangle hasPositiveExtent ifFalse: [ ^self ]. damageRect := aRectangle. aMorph == self ifFalse:[ "Clip to receiver's clipping bounds if the damage came from a child" self clipSubmorphs ifTrue:[damageRect := aRectangle intersect: self clippingBounds ifNone: [ ^ self ]]]. owner ifNotNil: [owner invalidRect: damageRect from: self].! ! !Morph methodsFor: 'meta-actions' stamp: 'BenjaminVanRyseghem 5/4/2013 12:55' prior: 38060194! invokeMetaMenu: evt | menu | Smalltalk tools userManager canShowMorphHalo ifFalse: [ ^ self ]. menu := self buildMetaMenu: evt. menu addTitle: self externalName. self world ifNotNil: [ menu popUpEvent: evt in: self world ]! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 11/28/2009 14:34' prior: 26790759! invokeMetaMenuAt: aPoint event: evt | morphs target | morphs := self morphsAt: aPoint. (morphs includes: self) ifFalse: [morphs := morphs copyWith: self]. morphs size = 1 ifTrue: [morphs anyOne invokeMetaMenu: evt] ifFalse: [target := UIManager default chooseFrom: (morphs collect: [:t | t class name asString]) values: morphs. target ifNil: [^ self]. target invokeMetaMenu: evt]! ! !Morph methodsFor: 'classification' stamp: 'di 5/7/1998 01:21' prior: 26636680! isAlignmentMorph ^ false! ! !Morph methodsFor: 'testing' stamp: 'dgd 8/31/2004 15:00' prior: 26829439! isDockingBar "Return true if the receiver is a docking bar" ^ false! ! !Morph methodsFor: 'classification' stamp: 'jm 4/17/1998 00:44' prior: 26636776! isFlexMorph ^ false ! ! !Morph methodsFor: 'testing' stamp: 'AlainPlantec 5/5/2010 17:55' prior: 26829580! isFlexed "Return true if the receiver is currently flexed" ^ owner notNil and: [owner isFlexMorph]! ! !Morph methodsFor: 'testing' stamp: 'MarcusDenker 3/21/2010 20:16' prior: 26829753! isFullOnScreen "Answer if the receiver is full contained in the owner visible area." owner ifNil: [^ true]. self visible ifFalse: [^ true]. ^ owner clearArea containsRect: self fullBounds! ! !Morph methodsFor: 'classification' stamp: '' prior: 26636840! isHandMorph ^ false! ! !Morph methodsFor: 'structure' stamp: 'dgd 9/1/2004 17:17' prior: 26807381! isInDockingBar "answer if the receiver is in a menu bar" ^ (owner notNil) and: [owner isDockingBar]! ! !Morph methodsFor: 'structure' stamp: 'dgd 9/18/2004 15:56' prior: 26807548! isInSystemWindow "answer if the receiver is in a system window" ^ owner isMorph and:[owner isSystemWindow or:[owner isInSystemWindow]]! ! !Morph methodsFor: 'structure' stamp: 'dgd 2/22/2003 19:05' prior: 26807750! isInWorld "Return true if this morph is in a world." ^self world notNil! ! !Morph methodsFor: 'testing' stamp: 'nk 10/13/2003 18:36' prior: 26830011! isLineMorph ^false! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 09:53' prior: 26622802! isLocked "answer whether the receiver is Locked" extension ifNil: [^ false]. ^ extension locked! ! !Morph methodsFor: 'testing' stamp: '' prior: 26830065! isMorph ^ true! ! !Morph methodsFor: 'classification' stamp: 'jm 5/7/1998 13:45' prior: 26636930! isRenderer "A *renderer* morph transforms the appearance of its submorph in some manner. For example, it might supply a drop shadow or scale and rotate the morph it encases. Answer true if this morph acts as a renderer. This default implementation returns false." "Details: A renderer is assumed to have a single submorph. Renderers may be nested to concatenate their transformations. It is useful to be able to find the outer-most renderer. This can be done by ascending the owner chain from the rendered morph. To find the morph being rendered, one can descend through the (singleton) submorph lists of the renderer chain until a non-renderer is encountered." ^ false ! ! !Morph methodsFor: 'stepping and presenter' stamp: 'sw 3/22/2000 14:28' prior: 26802621! isStepping "Return true if the receiver is currently stepping in its world" | aWorld | ^ (aWorld := self world) ifNil: [false] ifNotNil: [aWorld isStepping: self]! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 10/22/2000 16:43' prior: 26802870! isSteppingSelector: aSelector "Return true if the receiver is currently stepping in its world" | aWorld | ^ (aWorld := self world) ifNil: [false] ifNotNil: [aWorld isStepping: self selector: aSelector]! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 09:57' prior: 26622965! isSticky "answer whether the receiver is Sticky" extension ifNil: [^ false]. ^ extension sticky! ! !Morph methodsFor: 'classification' stamp: 'ar 12/16/2001 18:28' prior: 26637675! isTextMorph ^false! ! !Morph methodsFor: 'testing' stamp: 'StephaneDucasse 10/13/2013 21:49' prior: 74002192! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." ^ color isColor and: [ color isTranslucentButNotTransparent ] ! ! !Morph methodsFor: 'classification' stamp: '' prior: 26637736! isWorldMorph ^ false! ! !Morph methodsFor: 'classification' stamp: '' prior: 26637800! isWorldOrHandMorph ^ self isWorldMorph or: [self isHandMorph]! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'BenjaminVanRyseghem 6/21/2013 17:53' prior: 41378242! justDroppedInto: aMorph event: anEvent "This message is sent to a dropped morph after it has been dropped on -- and been accepted by -- a drop-sensitive morph" | aWindow | (self formerOwner notNil and: [self formerOwner ~~ aMorph]) ifTrue: [self removeHalo]. self formerOwner: nil. self formerPosition: nil. (aWindow := aMorph ownerThatIsA: SystemWindow) ifNotNil: [aWindow isActive ifFalse: [aWindow activate]]. "An object launched by certain parts-launcher mechanisms should end up fully visible..." (self hasProperty: #beFullyVisibleAfterDrop) ifTrue: [aMorph == ActiveWorld ifTrue: [self goHome]. self removeProperty: #beFullyVisibleAfterDrop]. ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 2/6/2001 22:12' prior: 26666633! justGrabbedFrom: formerOwner "The receiver was just grabbed from its former owner and is now attached to the hand. By default, we pass this message on if we're a renderer." (self isRenderer and:[self hasSubmorphs]) ifTrue:[self firstSubmorph justGrabbedFrom: formerOwner].! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'ar 11/24/1998 14:19' prior: 26798570! keepsTransform "Return true if the receiver will keep it's transform while being grabbed by a hand." ^false! ! !Morph methodsFor: 'event handling' stamp: 'ar 9/14/2000 18:23' prior: 26677104! keyDown: anEvent "Handle a key down event. The default response is to do nothing."! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 3/15/2013 16:17' prior: 33983945! keyStroke: anEvent "Handle a keystroke event. The default response is to let my eventHandler, if any, handle it." ^false! ! !Morph methodsFor: 'event handling' stamp: 'KTT 6/1/2004 11:41' prior: 26677459! keyUp: anEvent "Handle a key up event. The default response is to do nothing."! ! !Morph methodsFor: 'event handling' stamp: 'CamilloBruni 10/10/2012 13:37' prior: 26676629! keyboardFocusChange: gotFocus "The message is sent to a morph when its keyboard focus change. The given argument indicates that the receiver is gaining keyboard focus (versus losing) the keyboard focus. Morphs that accept keystrokes should change their appearance in some way when they are the current keyboard focus. This default implementation does nothing." self announceKeyboardFocusChange: gotFocus! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 2/22/2003 14:32' prior: 26813948! lastSubmorph ^submorphs last! ! !Morph methodsFor: 'layout' stamp: 'ar 11/12/2000 23:10' prior: 26734177! layoutBounds "Return the bounds for laying out children of the receiver" | inset box | inset := self layoutInset. box := self innerBounds. inset isZero ifTrue:[^box]. ^box insetBy: inset.! ! !Morph methodsFor: 'layout' stamp: 'ar 10/31/2000 21:09' prior: 26734433! layoutBounds: aRectangle "Set the bounds for laying out children of the receiver. Note: written so that #layoutBounds can be changed without touching this method" | outer inner | outer := self bounds. inner := self layoutBounds. bounds := aRectangle origin + (outer origin - inner origin) corner: aRectangle corner + (outer corner - inner corner).! ! !Morph methodsFor: 'layout-properties' stamp: 'md 2/27/2006 09:59' prior: 26751876! layoutFrame "Layout specific. Return the layout frame describing where the receiver should appear in a proportional layout" ^ extension ifNotNil: [extension layoutFrame]! ! !Morph methodsFor: 'layout-properties' stamp: 'StephaneDucasse 12/21/2012 18:15' prior: 26752137! layoutFrame: aLayoutFrame "Layout specific. Return the layout frame describing where the receiver should appear in a proportional layout" self layoutFrame == aLayoutFrame ifTrue: [^self]. self assureExtension layoutFrame: aLayoutFrame asLayoutFrame. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'MarcusDenker 10/3/2013 23:32' prior: 69232648! layoutInset "Return the extra inset for layouts" ^ self layoutProperties ifNil: [ 0 ] ifNotNil: [ :props | props layoutInset ]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 16:38' prior: 26752699! layoutInset: aNumber "Return the extra inset for layouts" self assureTableProperties layoutInset: aNumber. self layoutChanged.! ! !Morph methodsFor: 'layout-menu' stamp: 'StephaneDucasse 4/23/2012 10:21' prior: 26745874! layoutMenuPropertyString: aSymbol from: currentSetting | wording | wording := String streamContents: [:stream | | index | index := 1. aSymbol keysAndValuesDo: [:idx :ch | ch isUppercase ifTrue: [stream nextPutAll: (aSymbol copyFrom: index to: idx - 1) asLowercase. stream nextPutAll: ' '. index := idx]]. index < aSymbol size ifTrue: [stream nextPutAll: (aSymbol copyFrom: index to: aSymbol size) asLowercase]]. ^ (aSymbol == currentSetting) -> wording translated! ! !Morph methodsFor: 'layout-properties' stamp: 'md 2/27/2006 10:00' prior: 26752901! layoutPolicy "Layout specific. Return the layout policy describing how children of the receiver should appear." ^ extension ifNotNil: [ extension layoutPolicy]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 17:21' prior: 26753138! layoutPolicy: aLayoutPolicy "Layout specific. Return the layout policy describing how children of the receiver should appear." self layoutPolicy == aLayoutPolicy ifTrue:[^self]. self assureExtension layoutPolicy: aLayoutPolicy. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'md 2/27/2006 09:58' prior: 26753462! layoutProperties "Return the current layout properties associated with the receiver" ^ extension ifNotNil: [ extension layoutProperties]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/14/2000 17:21' prior: 26753677! layoutProperties: newProperties "Return the current layout properties associated with the receiver" self layoutProperties == newProperties ifTrue:[^self]. self assureExtension layoutProperties: newProperties. ! ! !Morph methodsFor: 'layout' stamp: 'ar 11/12/2000 17:35' prior: 26734853! layoutProportionallyIn: newBounds "Layout specific. Apply the given bounds to the receiver." | box frame | frame := self layoutFrame ifNil:[^self]. "before applying the proportional values make sure the receiver's layout is computed" self fullBounds. "sigh..." "compute the cell size the receiver has given its layout frame" box := frame layout: self bounds in: newBounds. (box = self bounds) ifTrue:[^self]. "no change" ^self layoutInBounds: box.! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:16' prior: 26705684! left " Return the x-coordinate of my left side " ^ bounds left! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:15' prior: 26705909! left: aNumber " Move me so that my left side is at the x-coordinate aNumber. My extent (width & height) are unchanged " self position: (aNumber @ bounds top)! ! !Morph methodsFor: 'geometry' stamp: 'di 3/6/2002 13:06' prior: 26705812! leftCenter ^ bounds leftCenter! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:58' prior: 26753963! listCentering "Layout specific. This property describes how the rows/columns in a list-like layout should be centered. #topLeft - center at start of primary direction #bottomRight - center at end of primary direction #center - center in the middle of primary direction #justified - insert extra space inbetween rows/columns " | props | props := self layoutProperties. ^props ifNil:[#topLeft] ifNotNil:[props listCentering].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:05' prior: 26754641! listCentering: aSymbol "Layout specific. This property describes how the rows/columns in a list-like layout should be centered. #topLeft - center at start of primary direction #bottomRight - center at end of primary direction #center - center in the middle of primary direction #justified - insert extra space inbetween rows/columns " self assureTableProperties listCentering: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 02:47' prior: 26754473! listCenteringString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self listCentering! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:59' prior: 26755132! listDirection "Layout specific. This property describes the direction in which a list-like layout should be applied. Possible values are: #leftToRight #rightToLeft #topToBottom #bottomToTop indicating the direction in which any layout should take place" | props | props := self layoutProperties. ^props ifNil:[#topToBottom] ifNotNil:[props listDirection].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26755742! listDirection: aSymbol "Layout specific. This property describes the direction in which a list-like layout should be applied. Possible values are: #leftToRight #rightToLeft #topToBottom #bottomToTop indicating the direction in which any layout should take place" self assureTableProperties listDirection: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 02:47' prior: 26755574! listDirectionString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self listDirection! ! !Morph methodsFor: 'Morphic-Base-Widgets' stamp: 'BenjaminVanRyseghem 5/21/2013 18:02' prior: 39403437! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph self bounds: drawBounds. self fullDrawOn: aCanvas. (aMorph submorphs includes: self) ifFalse: [ aMorph addMorph: self ]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:59' prior: 26756161! listSpacing "Layout specific. This property describes how the heights for different rows in a table layout should be handled. #equal - all rows have the same height #none - all rows may have different heights " | props | props := self layoutProperties. ^props ifNil:[#none] ifNotNil:[props listSpacing].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26756711! listSpacing: aSymbol "Layout specific. This property describes how the heights for different rows in a table layout should be handled. #equal - all rows have the same height #none - all rows may have different heights " self assureTableProperties listSpacing: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 02:47' prior: 26756547! listSpacingString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self listSpacing! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:07' prior: 26706134! localPointToGlobal: aPoint ^self point: aPoint in: nil! ! !Morph methodsFor: 'accessing' stamp: 'sw 8/4/97 12:05' prior: 26623125! lock self lock: true! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 09:58' prior: 26623211! lock: aBoolean "change the receiver's lock property" (extension isNil and: [aBoolean not]) ifTrue: [^ self]. self assureExtension locked: aBoolean! ! !Morph methodsFor: 'menus' stamp: 'sw 9/21/2000 22:50' prior: 26780575! lockUnlockMorph "If the receiver is locked, unlock it; if unlocked, lock it" self isLocked ifTrue: [self unlock] ifFalse: [self lock]! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 4/22/2012 16:53' prior: 26780381! lockedString "Answer the string to be shown in a menu to represent the 'locked' status" ^ (self isLocked) -> 'be locked' translated! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 9/6/2004 14:17' prior: 26814052! mainDockingBars "Answer the receiver's main dockingBars" ^ self dockingBars select: [:each | each hasProperty: #mainDockingBarTimeStamp]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 19:59' prior: 26757081! maxCellSize "Layout specific. This property specifies the maximum size of a table cell." | props | props := self layoutProperties. ^props ifNil:[SmallInteger maxVal] ifNotNil:[props maxCellSize].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26757354! maxCellSize: aPoint "Layout specific. This property specifies the maximum size of a table cell." self assureTableProperties maxCellSize: aPoint. self layoutChanged.! ! !Morph methodsFor: 'menus' stamp: 'dgd 8/30/2003 20:15' prior: 26780773! maybeAddCollapseItemTo: aMenu "If appropriate, add a collapse item to the given menu" | anOwner | (anOwner := self topRendererOrSelf owner) ifNotNil: [anOwner isWorldMorph ifTrue: [aMenu add: 'collapse' translated target: self action: #collapse]]! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 3/27/2011 17:12' prior: 26791581! maybeDuplicateMorph "Maybe duplicate the morph" ^self duplicate openInHand! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 11/7/2009 18:50' prior: 26791736! maybeDuplicateMorph: evt ^self duplicateMorph: evt! ! !Morph methodsFor: 'other events' stamp: 'sw 8/1/2001 14:08' prior: 26795832! menuButtonMouseEnter: event "The mouse entered a menu-button area; show the menu cursor temporarily" event hand showTemporaryCursor: Cursor menu! ! !Morph methodsFor: 'other events' stamp: 'sw 8/1/2001 14:09' prior: 26796046! menuButtonMouseLeave: event "The mouse left a menu-button area; restore standard cursor" event hand showTemporaryCursor: nil! ! !Morph methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:23' prior: 26801927! menuKeyboardControl ^ self theme settings menuKeyboardControl! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:00' prior: 26757595! minCellSize "Layout specific. This property specifies the minimal size of a table cell." | props | props := self layoutProperties. ^props ifNil:[0] ifNotNil:[props minCellSize].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26757850! minCellSize: aPoint "Layout specific. This property specifies the minimal size of a table cell." self assureTableProperties minCellSize: aPoint. self layoutChanged.! ! !Morph methodsFor: 'layout' stamp: 'dgd 2/16/2003 21:52' prior: 26735372! minHeight "answer the receiver's minHeight" ^ self valueOfProperty: #minHeight ifAbsent: [2]! ! !Morph methodsFor: 'layout' stamp: 'ClementBera 7/30/2013 11:04' prior: 46535310! minHeight: aNumber aNumber ifNil: [self removeProperty: #minHeight] ifNotNil: [self setProperty: #minHeight toValue: aNumber]. self layoutChanged! ! !Morph methodsFor: 'layout' stamp: 'dgd 2/16/2003 21:54' prior: 26735755! minWidth "answer the receiver's minWidth" ^ self valueOfProperty: #minWidth ifAbsent: [2]! ! !Morph methodsFor: 'layout' stamp: 'ClementBera 7/30/2013 11:04' prior: 46535549! minWidth: aNumber aNumber ifNil: [self removeProperty: #minWidth] ifNotNil: [self setProperty: #minWidth toValue: aNumber]. self layoutChanged! ! !Morph methodsFor: 'geometry' stamp: 'sw 6/4/2000 21:59' prior: 26706252! minimumExtent | ext | "This returns the minimum extent that the morph may be shrunk to. Not honored in too many places yet, but respected by the resizeToFit feature, at least. copied up from SystemWindow 6/00" (ext := self valueOfProperty: #minimumExtent) ifNotNil: [^ ext]. ^ 100 @ 80! ! !Morph methodsFor: 'geometry' stamp: 'sw 6/4/2000 22:00' prior: 26706611! minimumExtent: aPoint "Remember a minimumExtent, for possible future use" self setProperty: #minimumExtent toValue: aPoint ! ! !Morph methodsFor: 'menus' stamp: 'dgd 9/22/2004 20:30' prior: 26781092! model ^ nil ! ! !Morph methodsFor: 'accessing' stamp: 'sw 10/23/1999 22:35' prior: 26623427! modelOrNil ^ nil! ! !Morph methodsFor: 'structure' stamp: 'sw 8/29/2000 14:55' prior: 26807889! morphPreceding: aSubmorph "Answer the morph immediately preceding aSubmorph, or nil if none" | anIndex | anIndex := submorphs indexOf: aSubmorph ifAbsent: [^ nil]. ^ anIndex > 1 ifTrue: [submorphs at: (anIndex - 1)] ifFalse: [nil]! ! !Morph methodsFor: 'wiw support' stamp: 'RAA 7/19/2000 20:44' prior: 26842103! morphicLayerNumber "helpful for insuring some morphs always appear in front of or behind others. smaller numbers are in front" ^(owner isNil or: [owner isWorldMorph]) ifTrue: [ self valueOfProperty: #morphicLayerNumber ifAbsent: [100] ] ifFalse: [ owner morphicLayerNumber ]. "leave lots of room for special things"! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ar 10/8/2000 15:40' prior: 26814267! morphsAt: aPoint "Return a collection of all morphs in this morph structure that contain the given point, possibly including the receiver itself. The order is deepest embedding first." ^self morphsAt: aPoint unlocked: false! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'nice 1/5/2010 15:59' prior: 26814569! morphsAt: aPoint behind: aMorph unlocked: aBool "Return all morphs at aPoint that are behind frontMorph; if aBool is true return only unlocked, visible morphs." | isBack all tfm | all := (aMorph isNil or: [owner isNil]) ifTrue: ["Traverse down" (self fullBounds containsPoint: aPoint) ifFalse: [^#()]. (aBool and: [self isLocked or: [self visible not]]) ifTrue: [^#()]. nil] ifFalse: ["Traverse up" tfm := self transformedFrom: owner. all := owner morphsAt: (tfm localPointToGlobal: aPoint) behind: self unlocked: aBool. WriteStream with: all]. isBack := aMorph isNil. self submorphsDo: [:m | | found | isBack ifTrue: [tfm := m transformedFrom: self. found := m morphsAt: (tfm globalPointToLocal: aPoint) behind: nil unlocked: aBool. found notEmpty ifTrue: [all ifNil: [all := Array new writeStream]. all nextPutAll: found]]. m == aMorph ifTrue: [isBack := true]]. (isBack and: [self containsPoint: aPoint]) ifTrue: [all ifNil: [^Array with: self]. all nextPut: self]. ^all ifNil: [#()] ifNotNil: [all contents]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'PeterHugossonMiller 9/3/2009 10:06' prior: 26815848! morphsAt: aPoint unlocked: aBool "Return a collection of all morphs in this morph structure that contain the given point, possibly including the receiver itself. The order is deepest embedding first." | mList | mList := Array new writeStream. self morphsAt: aPoint unlocked: aBool do:[:m| mList nextPut: m]. ^mList contents! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'nice 1/5/2010 15:59' prior: 26816253! morphsAt: aPoint unlocked: aBool do: aBlock "Evaluate aBlock with all the morphs starting at the receiver which appear at aPoint. If aBool is true take only visible, unlocked morphs into account." (self fullBounds containsPoint: aPoint) ifFalse:[^self]. (aBool and:[self isLocked or:[self visible not]]) ifTrue:[^self]. self submorphsDo:[:m| | tfm | tfm := m transformedFrom: self. m morphsAt: (tfm globalPointToLocal: aPoint) unlocked: aBool do: aBlock]. (self containsPoint: aPoint) ifTrue:[aBlock value: self].! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ar 9/9/2000 17:31' prior: 26816851! morphsInFrontOf: someMorph overlapping: aRectangle do: aBlock "Evaluate aBlock with all top-level morphs in front of someMorph that overlap with the given rectangle. someMorph is either an immediate child of the receiver or nil (in which case all submorphs of the receiver are enumerated)." self submorphsDo:[:m| m == someMorph ifTrue:["Try getting out quickly" owner ifNil:[^self]. ^owner morphsInFrontOf: self overlapping: aRectangle do: aBlock]. (m fullBoundsInWorld intersects: aRectangle) ifTrue:[aBlock value: m]]. owner ifNil:[^self]. ^owner morphsInFrontOf: self overlapping: aRectangle do: aBlock.! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'PeterHugossonMiller 9/3/2009 10:06' prior: 26817565! morphsInFrontOverlapping: aRectangle "Return all top-level morphs in front of someMorph that overlap with the given rectangle." | morphList | morphList := Array new writeStream. self morphsInFrontOf: nil overlapping: aRectangle do:[:m | morphList nextPut: m]. ^morphList contents! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ar 9/9/2000 17:31' prior: 26817923! morphsInFrontOverlapping: aRectangle do: aBlock "Evaluate aBlock with all top-level morphs in front of someMorph that overlap with the given rectangle." ^self morphsInFrontOf: nil overlapping: aRectangle do: aBlock! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 5/3/2013 10:58' prior: 36439762! mouseDown: evt "Handle a mouse down event. The default response is to let my eventHandler, if any, handle it." self eventHandler ifNotNil: [self eventHandler mouseDown: evt fromMorph: self] ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 10/3/2000 17:05' prior: 26721549! mouseDownOnHelpHandle: anEvent "The mouse went down in the show-balloon handle" | str | anEvent shiftPressed ifTrue: [^ self editBalloonHelpText]. str := self balloonText. str ifNil: [str := self noHelpString]. self showBalloon: str hand: anEvent hand. ! ! !Morph methodsFor: 'events-processing' stamp: 'StephaneDucasse 7/18/2010 16:22' prior: 26697481! mouseDownPriority "Return the default mouse down priority for the receiver" ^ 0 ! ! !Morph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 1/18/2012 18:53' prior: 26678464! mouseEnter: evt "Handle a mouseEnter event, meaning the mouse just entered my bounds with no button pressed. The default response is to let my eventHandler, if any, handle it." ^ self eventHandler ifNotNil: [self eventHandler mouseEnter: evt fromMorph: self]. ! ! !Morph methodsFor: 'event handling' stamp: 'di 9/14/1998 07:33' prior: 26678041! mouseEnterDragging: evt "Handle a mouseEnterDragging event, meaning the mouse just entered my bounds with a button pressed or laden with submorphs. The default response is to let my eventHandler, if any, handle it, or else to do nothing." self eventHandler ifNotNil: [^ self eventHandler mouseEnterDragging: evt fromMorph: self]. ! ! !Morph methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 1/18/2012 18:54' prior: 26679208! mouseLeave: evt "Handle a mouseLeave event, meaning the mouse just left my bounds with no button pressed. The default response is to let my eventHandler, if any, handle it." ^ self eventHandler ifNotNil: [self eventHandler mouseLeave: evt fromMorph: self]. ! ! !Morph methodsFor: 'event handling' stamp: 'di 9/14/1998 07:38' prior: 26678799! mouseLeaveDragging: evt "Handle a mouseLeaveLaden event, meaning the mouse just left my bounds with a button pressed or laden with submorphs. The default response is to let my eventHandler, if any, handle it; else to do nothing." self eventHandler ifNotNil: [self eventHandler mouseLeaveDragging: evt fromMorph: self]! ! !Morph methodsFor: 'event handling' stamp: 'ar 10/25/2000 18:04' prior: 26679541! mouseMove: evt "Handle a mouse move event. The default response is to let my eventHandler, if any, handle it." self eventHandler ifNotNil: [self eventHandler mouseMove: evt fromMorph: self]. ! ! !Morph methodsFor: 'event handling' stamp: 'ar 10/22/2000 17:08' prior: 26679987! mouseStillDown: evt "Handle a mouse move event. The default response is to let my eventHandler, if any, handle it." self eventHandler ifNotNil: [self eventHandler mouseStillDown: evt fromMorph: self]. ! ! !Morph methodsFor: 'geniestubs' stamp: 'nk 3/11/2004 17:30' prior: 26700002! mouseStillDownStepRate "At what rate do I want to receive #mouseStillDown: notifications?" ^1! ! !Morph methodsFor: 'event handling' stamp: 'ar 10/25/2000 18:02' prior: 26679807! mouseStillDownThreshold "Return the number of milliseconds after which mouseStillDown: should be sent" ^200! ! !Morph methodsFor: 'event handling' stamp: 'tk 8/10/1998 16:05' prior: 26680263! mouseUp: evt "Handle a mouse up event. The default response is to let my eventHandler, if any, handle it." self eventHandler ifNotNil: [self eventHandler mouseUp: evt fromMorph: self]. ! ! !Morph methodsFor: 'debug and other' stamp: 'sw 2/6/2001 22:35' prior: 26645194! mouseUpCodeOrNil "If the receiver has a mouseUpCodeToRun, return it, else return nil" ^ self valueOfProperty: #mouseUpCodeToRun ifAbsent: [nil]! ! !Morph methodsFor: 'event handling' stamp: 'StephaneDucasse 7/2/2013 16:26' prior: 43522176! moveOrResizeFromKeystroke: anEvent "move or resize the receiver based on a keystroke" | dir | anEvent keyValue = 28 ifTrue: [ dir := -1 @ 0 ]. anEvent keyValue = 29 ifTrue: [ dir := 1 @ 0 ]. anEvent keyValue = 30 ifTrue: [ dir := 0 @ -1 ]. anEvent keyValue = 31 ifTrue: [ dir := 0 @ 1 ]. dir notNil ifTrue: [ anEvent controlKeyPressed ifTrue: [ dir := dir * 10 ]. anEvent shiftPressed ifTrue: [ self extent: self extent + dir ] ifFalse: [ self position: self position + dir ] ]! ! !Morph methodsFor: 'naming' stamp: 'gm 2/22/2003 13:16' prior: 26795261! name: aName (aName isString) ifTrue: [self setNameTo: aName]! ! !Morph methodsFor: 'structure' stamp: 'di 11/12/2000 16:13' prior: 26808200! nearestOwnerThat: conditionBlock "Return the first enclosing morph for which aBlock evaluates to true, or nil if none" ^ self firstOwnerSuchThat: conditionBlock ! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'ar 2/16/1999 18:59' prior: 26798756! newTransformationMorph ^TransformationMorph new! ! !Morph methodsFor: 'halos and balloon help' stamp: 'em 3/24/2005 10:05' prior: 26721888! noHelpString ^ 'Help not yet supplied' translated! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ar 8/13/2003 11:32' prior: 26818214! noteNewOwner: aMorph "I have just been added as a submorph of aMorph"! ! !Morph methodsFor: 'halos and balloon help' stamp: 'MarcusDenker 11/7/2009 21:51' prior: 26722026! okayToAddDismissHandle "Answer whether a halo on the receiver should offer a dismiss handle. This provides a hook for making it harder to disassemble some strucures even momentarily" ^self resistsRemoval not! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 11/27/2001 14:50' prior: 26722316! okayToBrownDragEasily "Answer whether it it okay for the receiver to be brown-dragged easily -- i.e. repositioned within its container without extracting it. At present this is just a hook -- nobody declines." ^ true " ^ (self topRendererOrSelf owner isKindOf: PasteUpMorph) and: [self layoutPolicy isNil]"! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 11/29/2001 06:29' prior: 26722711! okayToResizeEasily "Answer whether it is appropriate to have the receiver be easily resized by the user from the halo" ^ true "This one was too jarring, not that it didn't most of the time do the right thing but because some of the time it didn't, such as in a holder. If we pursue this path, the test needs to be airtight, obviously... ^ (self topRendererOrSelf owner isKindOf: PasteUpMorph) and: [self layoutPolicy isNil]"! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 5/7/2010 22:53' prior: 26723232! okayToRotateEasily "Answer whether it is appropriate for a rotation handle to be shown for the receiver. This is a hook -- at present nobody declines." ^ self respondsTo: #prepareForRotating! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 7/24/2012 13:07' prior: 26681132! on: eventName send: selector to: recipient self eventHandler ifNil: [self eventHandler: MorphicEventHandler new]. self eventHandler on: eventName send: selector to: recipient! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 7/24/2012 13:08' prior: 26681391! on: eventName send: selector to: recipient withValue: value "NOTE: selector must take 3 arguments, of which value will be the *** FIRST ***" self eventHandler ifNil: [self eventHandler: MorphicEventHandler new]. self eventHandler on: eventName send: selector to: recipient withValue: value ! ! !Morph methodsFor: 'announcements' stamp: 'StephaneDucasse 8/22/2013 23:38' prior: 49419380! onAnnouncement: anAnnouncement do: aValuable self announcer when: anAnnouncement do: aValuable.! ! !Morph methodsFor: 'announcements' stamp: 'GuillermoPolito 5/1/2012 19:50' prior: 26632174! onAnnouncement: anAnnouncement send: aMessageSelector to: anObject self announcer on: anAnnouncement send: aMessageSelector to: anObject.! ! !Morph methodsFor: 'initialize' stamp: 'RAA 10/18/2000 12:33' prior: 26729708! openCenteredInWorld self fullBounds; position: Display extent - self extent // 2; openInWorld.! ! !Morph methodsFor: 'initialize' stamp: 'sw 3/21/2000 14:46' prior: 26729877! openInHand "Attach the receiver to the current hand in the current morphic world" self currentHand attachMorph: self! ! !Morph methodsFor: 'initialize' stamp: 'cb 6/25/2013 13:24' prior: 41605663! openInWindow ^self openInWindowLabeled: self defaultLabel ! ! !Morph methodsFor: 'initialize' stamp: 'sma 4/22/2000 20:28' prior: 26730203! openInWindowLabeled: aString ^self openInWindowLabeled: aString inWorld: self currentWorld! ! !Morph methodsFor: 'initialize' stamp: 'alain.plantec 6/10/2008 18:35' prior: 26730372! openInWorld "Add this morph to the world." self openInWorld: self currentWorld! ! !Morph methodsFor: 'initialize' stamp: 'GuillermoPolito 5/1/2012 20:01' prior: 26730545! openInWorld: aWorld "Add this morph to the requested World." (aWorld visibleClearArea origin ~= (0@0) and: [self position = (0@0)]) ifTrue: [self position: aWorld visibleClearArea origin]. aWorld addMorph: self. aWorld startSteppingSubmorphsOf: self. self announceOpened.! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 09:47' prior: 26628630! otherProperties "answer the receiver's otherProperties" ^ extension ifNotNil: [extension otherProperties]! ! !Morph methodsFor: 'initialize' stamp: 'ar 1/31/2001 13:58' prior: 26730891! outOfWorld: aWorld "The receiver has just appeared in a new world. Notes: * aWorld can be nil (due to optimizations in other places) * owner is still valid Important: Keep this method fast - it is run whenever morphs are removed." aWorld ifNil:[^self]. "ar 1/31/2001: We could explicitly stop stepping the receiver here but for the sake of speed I'm for now relying on the lazy machinery in the world itself." "aWorld stopStepping: self." self submorphsDo:[:m| m outOfWorld: aWorld]. ! ! !Morph methodsFor: 'geometry' stamp: 'ar 11/12/2000 22:06' prior: 26706802! outerBounds "Return the 'outer' bounds of the receiver, e.g., the bounds that need to be invalidated when the receiver changes." | box | box := self bounds. self hasDropShadow ifTrue:[box := self expandFullBoundsForDropShadow: box]. self hasRolloverBorder ifTrue:[box := self expandFullBoundsForRolloverBorder: box]. ^box! ! !Morph methodsFor: 'structure' stamp: 'di 11/13/2000 00:50' prior: 26808430! outermostMorphThat: conditionBlock "Return the outermost containing morph for which aBlock is true, or nil if none" | outermost | self allOwnersDo: [:m | (conditionBlock value: m) ifTrue: [outermost := m]]. ^ outermost! ! !Morph methodsFor: 'menu' stamp: 'nk 3/10/2004 19:51' prior: 26768550! outermostOwnerWithYellowButtonMenu "Answer me or my outermost owner that is willing to contribute menu items to a context menu. Don't include the world." | outermost | outermost := self outermostMorphThat: [ :ea | ea isWorldMorph not and: [ ea hasYellowButtonMenu ]]. ^outermost ifNil: [ self hasYellowButtonMenu ifTrue: [ self ] ifFalse: []] ! ! !Morph methodsFor: 'structure' stamp: 'marcus.denker 7/24/2009 14:07' prior: 26808729! outermostWorldMorph ^World.! ! !Morph methodsFor: 'geometry' stamp: 'IgorStasenko 12/22/2012 03:13' prior: 26707204! overlapsShadowForm: itsShadow bounds: itsBounds "Answer true if itsShadow and my shadow overlap at all" | andForm overlapExtent | overlapExtent := (itsBounds intersect: self fullBounds ifNone: [ ^ false ]) extent. overlapExtent > (0 @ 0) ifFalse: [^ false]. andForm := self shadowForm. overlapExtent ~= self fullBounds extent ifTrue: [andForm := andForm contentsOfArea: (0 @ 0 extent: overlapExtent)]. andForm := andForm copyBits: (self fullBounds translateBy: itsShadow offset negated) from: itsShadow at: 0 @ 0 clippingBox: (0 @ 0 extent: overlapExtent) rule: Form and fillColor: nil. ^ andForm bits anySatisfy: [:w | w ~= 0]! ! !Morph methodsFor: 'structure' stamp: '' prior: 26808795! owner "Returns the owner of this morph, which may be nil." ^ owner! ! !Morph methodsFor: 'debug and other' stamp: 'dgd 2/22/2003 19:05' prior: 26645412! ownerChain "Answer a list of objects representing the receiver and all of its owners. The first element is the receiver, and the last one is typically the world in which the receiver resides" | c next | c := OrderedCollection with: self. next := self. [(next := next owner) notNil] whileTrue: [c add: next]. ^c asArray! ! !Morph methodsFor: 'change reporting' stamp: 'sw 7/8/1998 13:21' prior: 26635967! ownerChanged "The receiver's owner, some kind of a pasteup, has changed its layout." self snapToEdgeIfAppropriate! ! !Morph methodsFor: 'structure' stamp: 'di 11/12/2000 16:18' prior: 26808930! ownerThatIsA: aClass "Return the first enclosing morph that is a kind of aClass, or nil if none" ^ self firstOwnerSuchThat: [:m | m isKindOf: aClass]! ! !Morph methodsFor: 'Morphic-Base-Worlds' stamp: 'sw 7/1/1998 18:02' prior: 26589088! pasteUpMorph "Answer the closest containing morph that is a PasteUp morph" ^ self ownerThatIsA: PasteUpMorph! ! !Morph methodsFor: 'Morphic-Base-Worlds' stamp: 'dgd 8/28/2004 18:43' prior: 26589270! pasteUpMorphHandlingTabAmongFields "Answer the nearest PasteUpMorph in my owner chain that has the tabAmongFields property, or nil if none" | aPasteUp | aPasteUp := self owner. [aPasteUp notNil] whileTrue: [aPasteUp tabAmongFields ifTrue: [^ aPasteUp]. aPasteUp := aPasteUp owner]. ^ nil! ! !Morph methodsFor: 'thumbnail' stamp: 'sw 6/16/1999 11:29' prior: 26835269! permitsThumbnailing ^ true! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:01' prior: 26708186! point: aPoint from: aReferenceMorph owner ifNil: [^ aPoint]. ^ (owner transformFrom: aReferenceMorph) globalPointToLocal: aPoint. ! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:01' prior: 26708384! point: aPoint in: aReferenceMorph owner ifNil: [^ aPoint]. ^ (owner transformFrom: aReferenceMorph) localPointToGlobal: aPoint. ! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:02' prior: 26707940! pointFromWorld: aPoint ^self point: aPoint from: self world! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/25/2000 15:03' prior: 26708065! pointInWorld: aPoint ^self point: aPoint in: self world! ! !Morph methodsFor: 'geometry' stamp: '' prior: 26708551! position ^ bounds topLeft! ! !Morph methodsFor: 'geometry' stamp: 'wiz 11/25/2004 12:54' prior: 26708907! position: aPoint "Change the position of this morph and and all of its submorphs. " | delta box | delta := aPoint asNonFractionalPoint - bounds topLeft. (delta x = 0 and: [delta y = 0]) ifTrue: [^ self]. "Null change" box := self fullBounds. (delta dotProduct: delta) > 100 ifTrue: ["e.g., more than 10 pixels moved" self invalidRect: box. self invalidRect: (box translateBy: delta)] ifFalse: [self invalidRect: (box merge: (box translateBy: delta))]. self privateFullMoveBy: delta. owner ifNotNil: [owner layoutChanged]! ! !Morph methodsFor: 'geometry' stamp: 'di 9/30/1998 12:11' prior: 26708642! positionInWorld ^ self pointInWorld: self position. ! ! !Morph methodsFor: 'geometry' stamp: 'sw 10/9/1998 08:56' prior: 26708760! positionSubmorphs self submorphsDo: [:aMorph | aMorph snapToEdgeIfAppropriate]! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 9/13/2013 15:50' prior: 68527495! potentialEmbeddingTargets "Return the potential targets for embedding the receiver" | oneUp topRend | (oneUp := (topRend := self topRendererOrSelf) owner) ifNil: [ ^ #() ]. ^ (oneUp morphsAt: topRend referencePosition behind: topRend unlocked: true) reject: [ :m | m isFlexMorph ]! ! !Morph methodsFor: 'meta-actions' stamp: 'wiz 7/17/2004 22:17' prior: 26792210! potentialTargets "Return the potential targets for the receiver. This is derived from Morph>>potentialEmbeddingTargets." owner ifNil:[^#()]. ^owner morphsAt: self referencePosition behind: self unlocked: true not! ! !Morph methodsFor: 'meta-actions' stamp: 'wiz 11/9/2006 23:04' prior: 26792495! potentialTargetsAt: aPoint "Return the potential targets for the receiver. This is derived from Morph>>potentialEmbeddingTargets." | realOwner | realOwner := self topRendererOrSelf owner ifNil: [^ #()]. ^ realOwner morphsAt: aPoint ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'stephane.ducasse 9/20/2008 21:57' prior: 26723518! preferredDuplicationHandleSelector "Answer the selector, either #addMakeSiblingHandle: or addDupHandle:, to be offered as the default in a halo open on me" ^ #addDupHandle:! ! !Morph methodsFor: 'event handling' stamp: 'fbs 1/7/2005 15:43' prior: 26681755! preferredKeyboardBounds ^ self bounds: self bounds in: World. ! ! !Morph methodsFor: 'event handling' stamp: 'fbs 1/7/2005 15:42' prior: 26681889! preferredKeyboardPosition ^ (self bounds: self bounds in: World) topLeft. ! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'AlainPlantec 5/7/2010 21:27' prior: 26798890! prepareForScaling "If this morph requires a flex shell to scale, then wrap it in one and return it. Polygons, eg, may override to return themselves." ^ self addFlexShell! ! !Morph methodsFor: 'copying' stamp: 'AlainPlantec 12/1/2010 09:35' prior: 26638562! prepareToBeSaved "Prepare this morph to be saved to disk. Subclasses should nil out any instance variables that holds state that should not be saved, such as cached Forms. Note that this operation may take more drastic measures than releaseCachedState; for example, it might discard the transcript of an interactive chat session." self releaseCachedState. self formerOwner: nil. self formerPosition: nil. fullBounds := nil! ! !Morph methodsFor: 'menus' stamp: 'sw 6/12/2001 21:08' prior: 26781166! presentHelp "Present a help message if there is one available" self inform: 'Sorry, no help has been provided here yet.'! ! !Morph methodsFor: 'structure' stamp: 'RAA 6/13/2000 15:01' prior: 26809148! primaryHand | outer | outer := self outermostWorldMorph ifNil: [^ nil]. ^ outer activeHand ifNil: [outer firstHand]! ! !Morph methodsFor: 'printing' stamp: 'MarcusDenker 10/28/2010 14:02' prior: 26797191! printOn: aStream super printOn: aStream. aStream nextPutAll: '('. aStream print: self identityHash; nextPutAll: ')'! ! !Morph methodsFor: 'printing' stamp: 'jm 5/28/1998 18:00' prior: 26797378! printStructureOn: aStream indent: tabCount tabCount timesRepeat: [aStream tab]. self printOn: aStream. aStream cr. self submorphsDo: [:m | m printStructureOn: aStream indent: tabCount + 1]. ! ! !Morph methodsFor: 'private' stamp: 'AlainPlantec 10/3/2011 01:21' prior: 26842621! privateAddAllMorphs: aCollection atIndex: index "Private. Add aCollection of morphs to the receiver" | myWorld otherSubmorphs | myWorld := self world. otherSubmorphs := submorphs copyWithoutAll: aCollection. (index between: 0 and: otherSubmorphs size) ifFalse: [^ self error: 'index out of range']. index = 0 ifTrue:[ submorphs := aCollection asArray, otherSubmorphs] ifFalse:[ index = otherSubmorphs size ifTrue:[ submorphs := otherSubmorphs, aCollection] ifFalse:[ submorphs := otherSubmorphs copyReplaceFrom: index + 1 to: index with: aCollection ]]. aCollection do: [:m | | itsOwner itsWorld | itsOwner := m owner. itsOwner ifNotNil: [ itsWorld := m world. (itsWorld == myWorld) ifFalse: [ itsWorld ifNotNil: [self privateInvalidateMorph: m]. m outOfWorld: itsWorld]. (itsOwner ~~ self) ifTrue: [ m owner privateRemove: m. m owner removedMorph: m ]]. m privateOwner: self. myWorld ifNotNil: [self privateInvalidateMorph: m]. (myWorld == itsWorld) ifFalse: [m intoWorld: myWorld]. itsOwner == self ifFalse: [ self addedMorph: m. m noteNewOwner: self ]. ]. self layoutChanged. ! ! !Morph methodsFor: 'private' stamp: 'nk 10/11/2003 16:08' prior: 26843828! privateAddMorph: aMorph atIndex: index | oldIndex myWorld itsWorld oldOwner | ((index >= 1) and: [index <= (submorphs size + 1)]) ifFalse: [^ self error: 'index out of range']. myWorld := self world. oldOwner := aMorph owner. (oldOwner == self and: [(oldIndex := submorphs indexOf: aMorph) > 0]) ifTrue:[ "aMorph's position changes within in the submorph chain" oldIndex < index ifTrue:[ "moving aMorph to back" submorphs replaceFrom: oldIndex to: index-2 with: submorphs startingAt: oldIndex+1. submorphs at: index-1 put: aMorph. ] ifFalse:[ "moving aMorph to front" oldIndex-1 to: index by: -1 do:[:i| submorphs at: i+1 put: (submorphs at: i)]. submorphs at: index put: aMorph. ]. ] ifFalse:[ "adding a new morph" oldOwner ifNotNil:[ itsWorld := aMorph world. itsWorld ifNotNil: [self privateInvalidateMorph: aMorph]. (itsWorld == myWorld) ifFalse: [aMorph outOfWorld: itsWorld]. oldOwner privateRemove: aMorph. oldOwner removedMorph: aMorph. ]. aMorph privateOwner: self. submorphs := submorphs copyReplaceFrom: index to: index-1 with: (Array with: aMorph). (itsWorld == myWorld) ifFalse: [aMorph intoWorld: myWorld]. ]. myWorld ifNotNil:[self privateInvalidateMorph: aMorph]. self layoutChanged. oldOwner == self ifFalse: [ self addedMorph: aMorph. aMorph noteNewOwner: self ]. ! ! !Morph methodsFor: 'private' stamp: '' prior: 26845219! privateBounds: boundsRect "Private!! Use position: and/or extent: instead." fullBounds := nil. bounds := boundsRect.! ! !Morph methodsFor: 'private' stamp: 'jm 5/29/1998 21:28' prior: 26845402! privateColor: aColor color := aColor. ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 8/10/2003 18:31' prior: 26826807! privateDelete "Remove the receiver as a submorph of its owner" owner ifNotNil:[owner removeMorph: self].! ! !Morph methodsFor: 'accessing - extension' stamp: 'md 2/27/2006 08:46' prior: 26628006! privateExtension: aMorphExtension "private - change the receiver's extension" extension := aMorphExtension! ! !Morph methodsFor: 'layout' stamp: 'IgorStasenko 12/22/2012 03:11' prior: 26736142! privateFullBounds "Private. Compute the actual full bounds of the receiver" | box | submorphs isEmpty ifTrue: [^self outerBounds]. box := self outerBounds copy. box := box quickMerge: (self clipSubmorphs ifTrue: [self submorphBounds intersect: self clippingBounds ifNone: [ self clippingBounds ]] ifFalse: [self submorphBounds]). ^box origin asIntegerPoint corner: box corner asIntegerPoint! ! !Morph methodsFor: 'private' stamp: 'tk 8/30/1998 09:58' prior: 26845505! privateFullBounds: boundsRect "Private!! Computed automatically." fullBounds := boundsRect.! ! !Morph methodsFor: 'private' stamp: 'ar 12/16/2001 21:47' prior: 26845663! privateFullMoveBy: delta "Private!! Relocate me and all of my subMorphs by recursion. Subclasses that implement different coordinate systems may override this method." self privateMoveBy: delta. 1 to: submorphs size do: [:i | (submorphs at: i) privateFullMoveBy: delta]. owner ifNotNil:[ owner isTextMorph ifTrue:[owner adjustTextAnchor: self]].! ! !Morph methodsFor: 'change reporting' stamp: 'ar 8/12/2003 22:26' prior: 26636155! privateInvalidateMorph: aMorph "Private. Invalidate the given morph after adding or removing. This method is private because a) we're invalidating the morph 'remotely' and b) it forces a fullBounds computation which should not be necessary for a general morph c) the morph may or may not actually invalidate anything (if it's not in the world nothing will happen) and d) the entire mechanism should be rewritten." aMorph fullBounds. aMorph changed! ! !Morph methodsFor: 'private' stamp: '' prior: 26846052! privateOwner: aMorph "Private!! Should only be used by methods that maintain the ower/submorph invariant." owner := aMorph.! ! !Morph methodsFor: 'private' stamp: 'di 10/18/2004 21:49' prior: 26846242! privateRemove: aMorph "Private!! Should only be used by methods that maintain the ower/submorph invariant." submorphs := submorphs copyWithout: aMorph. self layoutChanged.! ! !Morph methodsFor: 'private' stamp: '' prior: 26846452! privateSubmorphs "Private!! Use 'submorphs' instead." ^ submorphs! ! !Morph methodsFor: 'private' stamp: '' prior: 26846555! privateSubmorphs: aCollection "Private!! Should only be used by methods that maintain the ower/submorph invariant." submorphs := aCollection.! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/13/2000 17:14' prior: 26697637! processEvent: anEvent "Process the given event using the default event dispatcher." ^self processEvent: anEvent using: self defaultEventDispatcher! ! !Morph methodsFor: 'events-processing' stamp: 'ar 9/18/2000 19:14' prior: 26697858! processEvent: anEvent using: defaultDispatcher "This is the central entry for dispatching events in morphic. Given some event and a default dispatch strategy, find the right receiver and let him handle it. WARNING: This is a powerful hook. If you want to use a different event dispatcher from the default, here is the place to hook it in. Depending on how the dispatcher is written (e.g., whether it calls simply #processEvent: or #processEvent:using:) you can change the dispatch strategy for entire trees of morphs. Similarly, you can disable entire trees of morphs from receiving any events whatsoever. Read the documentation in class MorphicEventDispatcher before playing with it. " (self rejectsEvent: anEvent) ifTrue:[^#rejected]. ^defaultDispatcher dispatchEvent: anEvent with: self! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 7/12/2000 11:16' prior: 26645811! programmedMouseDown: anEvent for: aMorph aMorph addMouseActionIndicatorsWidth: 15 color: (Color blue alpha: 0.7). ! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 7/12/2000 11:16' prior: 26646000! programmedMouseEnter: anEvent for: aMorph aMorph addMouseActionIndicatorsWidth: 10 color: (Color blue alpha: 0.3). ! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 7/12/2000 11:10' prior: 26646190! programmedMouseLeave: anEvent for: aMorph self deleteAnyMouseActionIndicators. ! ! !Morph methodsFor: 'debug and other' stamp: 'MarcusDenker 2/25/2010 08:47' prior: 26646352! programmedMouseUp: anEvent for: aMorph | aCodeString | self deleteAnyMouseActionIndicators. aCodeString := self valueOfProperty: #mouseUpCodeToRun ifAbsent: [^self]. (self fullBounds containsPoint: anEvent cursorPoint) ifFalse: [^self]. aCodeString value. ! ! !Morph methodsFor: 'accessing' stamp: 'dgd 3/7/2003 15:24' prior: 26623509! raisedColor "Return the color to be used for shading raised borders. The default is my own color, but it might want to be, eg, my owner's color. Whoever's color ends up prevailing, the color itself gets the last chance to determine, so that when, for example, an InfiniteForm serves as the color, callers won't choke on some non-Color object being returned" (color isColor and: [color isTransparent and: [owner notNil]]) ifTrue: [^ owner raisedColor]. ^ color asColor raisedColor! ! !Morph methodsFor: 'geometry' stamp: 'ar 9/22/2000 20:12' prior: 26709536! referencePosition "Return the current reference position of the receiver" | box | box := self bounds. ^box origin + (self rotationCenter * box extent). ! ! !Morph methodsFor: 'geometry' stamp: 'ar 9/27/2000 14:04' prior: 26709756! referencePosition: aPosition "Move the receiver to match its reference position with aPosition" | newPos intPos | newPos := self position + (aPosition - self referencePosition). intPos := newPos asIntegerPoint. newPos = intPos ifTrue:[self position: intPos] ifFalse:[self position: newPos].! ! !Morph methodsFor: 'geometry' stamp: 'sw 10/25/1999 16:49' prior: 26710121! referencePositionInWorld ^ self pointInWorld: self referencePosition ! ! !Morph methodsFor: 'geometry' stamp: 'sw 10/25/1999 23:33' prior: 26710257! referencePositionInWorld: aPoint | localPosition | localPosition := owner ifNil: [aPoint] ifNotNil: [(owner transformFrom: self world) globalPointToLocal: aPoint]. self referencePosition: localPosition ! ! !Morph methodsFor: 'drawing' stamp: 'sw 10/10/1999 23:25' prior: 26657352! refreshWorld | aWorld | (aWorld := self world) ifNotNil: [aWorld displayWorldSafely] ! ! !Morph methodsFor: 'events-processing' stamp: 'ar 10/5/2000 19:25' prior: 26698724! rejectDropEvent: anEvent "This hook allows the receiver to repel a drop operation currently executed. The method is called prior to checking children so the receiver must validate that the event was really designated for it. Note that the ordering of the tests below is designed to avoid a (possibly expensive) #fullContainsPoint: test. If the receiver doesn't want to repel the morph anyways we don't need to check after all." (self repelsMorph: anEvent contents event: anEvent) ifFalse:[^self]. "not repelled" (self fullContainsPoint: anEvent position) ifFalse:[^self]. "not for me" "Throw it away" anEvent wasHandled: true. anEvent contents rejectDropMorphEvent: anEvent.! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'AlainPlantec 12/1/2010 09:35' prior: 26667279! rejectDropMorphEvent: evt "The receiver has been rejected, and must be put back somewhere. There are three cases: (1) It remembers its former owner and position, and goes right back there (2) It remembers its former position only, in which case it was torn off from a parts bin, and the UI is that it floats back to its donor position and then vanishes." self formerOwner notNil ifTrue: [^ self slideBackToFormerSituation: evt]. self formerPosition "Position but no owner -- can just make it vanish" ifNotNil: [^ self vanishAfterSlidingTo: self formerPosition event: evt].! ! !Morph methodsFor: 'text-anchor' stamp: 'ar 12/16/2001 19:47' prior: 26833833! relativeTextAnchorPosition ^self valueOfProperty: #relativeTextAnchorPosition! ! !Morph methodsFor: 'text-anchor' stamp: 'ar 12/16/2001 19:22' prior: 26833979! relativeTextAnchorPosition: aPoint ^self setProperty: #relativeTextAnchorPosition toValue: aPoint! ! !Morph methodsFor: 'events-removing' stamp: 'rw 4/25/2002 07:18' prior: 26699857! releaseActionMap "Release the action map" self removeProperty: #actionMap! ! !Morph methodsFor: 'caching' stamp: 'md 4/3/2006 12:02' prior: 26633620! releaseCachedState "Release any state that can be recomputed on demand, such as the pixel values for a color gradient or the editor state for a TextMorph. This method may be called to save space when a morph becomes inaccessible. Implementations of this method should do 'super releaseCachedState'." self borderStyle releaseCachedState. ! ! !Morph methodsFor: 'events-alarms' stamp: 'ar 9/14/2000 12:14' prior: 26689151! removeAlarm: aSelector "Remove the given alarm" | scheduler | scheduler := self alarmScheduler. scheduler ifNotNil:[scheduler removeAlarm: aSelector for: self].! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'nk 10/16/2003 14:08' prior: 26826990! removeAllMorphs | oldMorphs myWorld | myWorld := self world. (fullBounds notNil or:[myWorld notNil]) ifTrue:[self invalidRect: self fullBounds]. submorphs do: [:m | myWorld ifNotNil: [ m outOfWorld: myWorld ]. m privateOwner: nil]. oldMorphs := submorphs. submorphs := EmptyArray. oldMorphs do: [ :m | self removedMorph: m ]. self layoutChanged. ! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'nk 10/16/2003 14:02' prior: 26827421! removeAllMorphsIn: aCollection "greatly speeds up the removal of *lots* of submorphs" | set myWorld | set := IdentitySet new: aCollection size * 4 // 3. aCollection do: [:each | each owner == self ifTrue: [ set add: each]]. myWorld := self world. (fullBounds notNil or:[myWorld notNil]) ifTrue:[self invalidRect: self fullBounds]. set do: [:m | myWorld ifNotNil: [ m outOfWorld: myWorld ]. m privateOwner: nil]. submorphs := submorphs reject: [ :each | set includes: each]. set do: [ :m | self removedMorph: m ]. self layoutChanged. ! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/31/2013 14:14' prior: 46643990! removeDependent: anObject self flag: #GSoC. "Flag added by Benjamin Van Ryseghem the July 22, 2013 to remember to remove this line in a while" [ super removeDependent: anObject ] on: Error do: []. self announcer unsubscribe: anObject! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 11/12/2000 18:57' prior: 26660303! removeDropShadow self hasDropShadow ifFalse:[^self]. self changed. self hasDropShadow: false. fullBounds ifNotNil:[fullBounds := self privateFullBounds]. self changed.! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'AlainPlantec 5/8/2010 00:33' prior: 26799150! removeFlexShell self isFlexed ifTrue: [self owner removeFlexShell]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ClementBera 7/30/2013 11:04' prior: 46536104! removeHalo "remove the surrounding halo (if any)" self halo ifNotNil: [self primaryHand removeHalo]! ! !Morph methodsFor: 'event handling' stamp: 'tk 8/10/1998 16:02' prior: 26682035! removeLink: actionCode self eventHandler ifNotNil: [self eventHandler on: actionCode send: nil to: nil]! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'di 10/18/2004 21:50' prior: 26828208! removeMorph: aMorph "Remove the given morph from my submorphs" | aWorld | aMorph owner == self ifFalse:[^self]. aWorld := self world. aWorld ifNotNil:[ aMorph outOfWorld: aWorld. self privateInvalidateMorph: aMorph. ]. self privateRemove: aMorph. aMorph privateOwner: nil. self removedMorph: aMorph. ! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 7/7/2000 16:43' prior: 26646687! removeMouseUpAction self primaryHand showTemporaryCursor: nil. self removeProperty: #mouseUpCodeToRun. #(mouseUp mouseEnter mouseLeave mouseDown) do: [ :sym | self on: sym send: #yourself to: nil. ] ! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 09:48' prior: 26628815! removeProperty: aSymbol "removes the property named aSymbol if it exists" extension ifNil: [^ self]. extension removeProperty: aSymbol! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'ar 8/12/2003 22:01' prior: 26828040! removedMorph: aMorph "Notify the receiver that aMorph was just removed from its children" ! ! !Morph methodsFor: 'testing' stamp: 'stephane.ducasse 11/14/2008 21:48' prior: 26830159! renameTo: aName "Set The morph name." self topRendererOrSelf setNameTo: aName. ^aName! ! !Morph methodsFor: 'structure' stamp: 'wiz 12/7/2006 15:12' prior: 26809354! renderedMorph "This now gets overridden by rendering morphs." ^self! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'sw 1/11/1999 20:07' prior: 26667940! repelsMorph: aMorph event: ev ^ false! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'sw 10/25/1999 23:34' prior: 26828598! replaceSubmorph: oldMorph by: newMorph | index itsPosition w | oldMorph stopStepping. itsPosition := oldMorph referencePositionInWorld. index := submorphs indexOf: oldMorph. oldMorph privateDelete. self privateAddMorph: newMorph atIndex: index. newMorph referencePositionInWorld: itsPosition. (w := newMorph world) ifNotNil: [w startSteppingSubmorphsOf: newMorph]! ! !Morph methodsFor: 'accessing - extension' stamp: 'md 2/27/2006 08:47' prior: 26628191! resetExtension "reset the extension slot if it is not needed" (extension notNil and: [extension isDefault]) ifTrue: [extension := nil] ! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/28/2000 12:02' prior: 26668054! resetHighlightForDrop self highlightForDrop: false! ! !Morph methodsFor: 'accessing' stamp: 'sw 11/15/2001 16:33' prior: 26624077! resistsRemoval "Answer whether the receiver is marked as resisting removal" ^ self hasProperty: #resistsRemoval! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 4/22/2012 16:35' prior: 26624269! resistsRemoval: aBoolean "Set the receiver's resistsRemoval property as indicated" aBoolean ifTrue: [ self setProperty: #resistsRemoval toValue: true ] ifFalse: [ self removeProperty: #resistsRemoval ]! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 4/22/2012 16:53' prior: 26781363! resistsRemovalString "Answer the string to be shown in a menu to represent the 'resistsRemoval' status" ^ (self resistsRemoval) -> 'resist being deleted' translated! ! !Morph methodsFor: 'meta-actions' stamp: 'sw 11/27/2001 14:59' prior: 26792811! resizeFromMenu "Commence an interaction that will resize the receiver" self resizeMorph: ActiveEvent! ! !Morph methodsFor: 'meta-actions' stamp: 'StephaneDucasse 6/28/2013 11:26' prior: 42848794! resizeMorph: evt | handle | handle := HandleMorph new forEachPointDo: [ :newPoint | self extent: newPoint - self bounds topLeft ]. evt hand attachMorph: handle. handle startStepping! ! !Morph methodsFor: 'event handling' stamp: 'sw 11/16/1998 08:06' prior: 26682212! restoreSuspendedEventHandler | savedHandler | (savedHandler := self valueOfProperty: #suspendedEventHandler) ifNotNil: [self eventHandler: savedHandler]. submorphs do: [:m | m restoreSuspendedEventHandler] ! ! !Morph methodsFor: 'debug and other' stamp: 'CamilloBruni 5/29/2012 16:51' prior: 26646986! resumeAfterDrawError self changed. self removeProperty:#errorOnDraw. self removeProperty:#drawError. self changed.! ! !Morph methodsFor: 'debug and other' stamp: 'RAA 5/24/2000 18:20' prior: 26647177! resumeAfterStepError "Resume stepping after an error has occured." self startStepping. "Will #step" self removeProperty:#errorOnStep. "Will remove prop only if #step was okay" ! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:01' prior: 26758091! reverseTableCells "Layout specific. This property describes if the cells should be treated in reverse order of submorphs." | props | props := self layoutProperties. ^props ifNil:[false] ifNotNil:[props reverseTableCells].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26758390! reverseTableCells: aBool "Layout specific. This property describes if the cells should be treated in reverse order of submorphs." self assureTableProperties reverseTableCells: aBool. self layoutChanged.! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:16' prior: 26710532! right " Return the x-coordinate of my right side " ^ bounds right! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:15' prior: 26710761! right: aNumber " Move me so that my right side is at the x-coordinate aNumber. My extent (width & height) are unchanged " self position: ((aNumber - bounds width) @ bounds top)! ! !Morph methodsFor: 'geometry' stamp: 'di 3/6/2002 13:06' prior: 26710662! rightCenter ^ bounds rightCenter! ! !Morph methodsFor: 'structure' stamp: 'dgd 2/22/2003 14:34' prior: 26809491! root "Return the root of the composite morph containing the receiver. The owner of the root is either nil, a WorldMorph, or a HandMorph. If the receiver's owner is nil, the root is the receiver itself. This method always returns a morph." (owner isNil or: [owner isWorldOrHandMorph]) ifTrue: [^self]. ^owner root! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ar 10/8/2000 15:44' prior: 26818359! rootMorphsAt: aPoint "Return the list of root morphs containing the given point, excluding the receiver. ar 11/8/1999: Moved into morph for an incredibly ugly hack in 3D worlds" self flag: #arNote. "check this at some point" ^ self submorphs select: [:m | (m fullContainsPoint: aPoint) and: [m isLocked not]]! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'AlainPlantec 5/8/2010 00:13' prior: 26799303! rotationCenter "Return the rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." ^self valueOfProperty: #rotationCenter ifAbsent: [0.5@0.5] ! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'ClementBera 7/30/2013 11:05' prior: 46536306! rotationCenter: aPointOrNil "Set the new rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." aPointOrNil ifNil: [self removeProperty: #rotationCenter] ifNotNil:[self setProperty: #rotationCenter toValue: aPointOrNil] ! ! !Morph methodsFor: 'rounding' stamp: 'AlainPlantec 12/20/2009 00:20' prior: 26800501! roundedCornersString "Answer the string to put in a menu that will invite the user to switch to the opposite corner-rounding mode" ^ (self wantsRoundedCorners ifTrue: ['' translated] ifFalse: ['' translated]) , ('round corners' translated)! ! !Morph methodsFor: 'Morphic-Base-MorphTreeWidget' stamp: 'AlainPlantec 9/30/2011 15:59' prior: 26586697! rowMorphForNode: aNode inColumn: aColumn | rm | rm := Morph new color: Color transparent; layoutPolicy: RowLayout new; hResizing: #shrinkWrap; vResizing: #shrinkWrap; layoutInset: aColumn container columnInset @ aColumn container rowInset; listDirection: #leftToRight; cellPositioning: #leftCenter; cellInset: 4@0; yourself. rm addMorph: self. aColumn isFirstColumn ifTrue: [ | icon | icon := aColumn container iconBlock value: aNode. icon ifNotNil: [ rm addMorph: icon asMorph ]. "for first column we don't use horizontal inset" rm layoutInset: 0 @ aColumn container rowInset. ]. ^ rm ! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:01' prior: 26758669! rubberBandCells "Layout specific. This property describes if a parent that is #shrinkWrapped around its children should ignore any #spaceFill children. E.g., when #rubberBandCells is true, the compound layout will always stay at the smallest available size, even though some child may be able to grow." | props | props := self layoutProperties. ^props ifNil:[false] ifNotNil:[props rubberBandCells].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:04' prior: 26759146! rubberBandCells: aBool "Layout specific. This property describes if a parent that is #shrinkWrapped around its children should ignore any #spaceFill children. E.g., when #rubberBandCells is true, the compound layout will always stay at the smallest available size, even though some child may be able to grow." self assureTableProperties rubberBandCells: aBool. self layoutChanged.! ! !Morph methodsFor: 'rotate scale and flex' stamp: 'nk 9/4/2004 11:00' prior: 26800016! scale: newScale "Backstop for morphs that don't have to do something special to set their scale" ! ! !Morph methodsFor: 'accessing' stamp: 'nk 9/4/2004 10:49' prior: 26624541! scaleFactor ^self valueOfProperty: #scaleFactor ifAbsent: [ 1.0 ] ! ! !Morph methodsFor: 'geometry' stamp: 'bf 1/5/2000 19:08' prior: 26711003! screenLocation "For compatibility only" ^ self fullBounds origin! ! !Morph methodsFor: 'geometry' stamp: 'sma 2/5/2000 13:58' prior: 26711134! screenRectangle "For compatibility only" ^ self fullBounds! ! !Morph methodsFor: 'selected object' stamp: 'dgd 8/28/2004 16:30' prior: 26801333! selectedObject "answer the selected object for the hand or nil is none" ^ self primaryHand selectedObject! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:24' prior: 26668179! separateDragAndDrop "Conversion only. Separate the old #dragNDropEnabled into #dragEnabled and #dropEnabled and remove the old property." | dnd | (self hasProperty: #dragNDropEnabled) ifFalse:[^self]. dnd := (self valueOfProperty: #dragNDropEnabled) == true. self dragEnabled: dnd. self dropEnabled: dnd. self removeProperty: #dragNDropEnabled. ! ! !Morph methodsFor: 'menus' stamp: 'AlainPlantec 12/19/2009 23:35' prior: 26781603! setArrowheads "Let the user edit the size of arrowheads for this object" | aParameter result | aParameter := self renderedMorph valueOfProperty: #arrowSpec ifAbsent: [PolygonMorph defaultArrowSpec]. result := Morph obtainArrowheadFor: 'Head size for arrowheads: ' translated defaultValue: aParameter asString. result ifNotNil: [self renderedMorph setProperty: #arrowSpec toValue: result] ifNil: [Beeper beep]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/19/2009 23:40' prior: 26723968! setBalloonText: stringOrText "Set receiver's balloon help text. Pass nil to remove the help." self setBalloonText: stringOrText maxLineLength: self theme settings maxBalloonHelpLineLength! ! !Morph methodsFor: 'halos and balloon help' stamp: 'md 2/27/2006 09:54' prior: 26724236! setBalloonText: stringOrText maxLineLength: aLength "Set receiver's balloon help text. Pass nil to remove the help." (extension isNil and: [stringOrText isNil]) ifTrue: [^ self]. self assureExtension balloonText: (stringOrText ifNotNil: [stringOrText asString withNoLineLongerThan: aLength])! ! !Morph methodsFor: 'accessing' stamp: 'sw 11/26/2001 16:16' prior: 26624674! setBorderStyle: aSymbol "Set the border style of my costume" | aStyle | aStyle := self borderStyleForSymbol: aSymbol. aStyle ifNil: [^ self]. (self canDrawBorder: aStyle) ifTrue: [self borderStyle: aStyle]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 10/29/1999 17:38' prior: 26724613! setCenteredBalloonText: aString self setBalloonText: aString. self setProperty: #helpAtCenter toValue: true! ! !Morph methodsFor: 'geometry' stamp: 'tk 7/14/2001 11:11' prior: 26711259! setConstrainedPosition: aPoint hangOut: partiallyOutside "Change the position of this morph and and all of its submorphs to aPoint, but don't let me go outside my owner's bounds. Let me go within two pixels of completely outside if partiallyOutside is true." | trialRect delta boundingMorph bRect | owner ifNil:[^self]. trialRect := aPoint extent: self bounds extent. boundingMorph := self topRendererOrSelf owner. delta := boundingMorph ifNil: [0@0] ifNotNil: [ bRect := partiallyOutside ifTrue: [boundingMorph bounds insetBy: self extent negated + boundingMorph borderWidth + (2@2)] ifFalse: [boundingMorph bounds]. trialRect amountToTranslateWithin: bRect]. self position: aPoint + delta. self layoutChanged "So that, eg, surrounding text will readjust" ! ! !Morph methodsFor: 'miscellaneous' stamp: 'sw 7/20/2001 00:15' prior: 26795041! setExtentFromHalo: anExtent "The user has dragged the grow box such that the receiver's extent would be anExtent. Do what's needed" self extent: anExtent! ! !Morph methodsFor: 'naming' stamp: 'dgd 2/16/2003 21:57' prior: 26795386! setNamePropertyTo: aName "change the receiver's externalName" self assureExtension externalName: aName! ! !Morph methodsFor: 'naming' stamp: 'yo 12/3/2004 17:02' prior: 26795553! setNameTo: aName | nameToUse nameString | nameToUse := aName ifNotNil: [(nameString := aName asString) notEmpty ifTrue: [nameString] ifFalse: ['*']]. self setNamePropertyTo: nameToUse "no Texts here!!"! ! !Morph methodsFor: 'accessing - properties' stamp: 'tk 10/9/2002 08:30' prior: 26629032! setProperties: aList "Set many properties at once from a list of prop, value, prop, value" 1 to: aList size by: 2 do: [:ii | self setProperty: (aList at: ii) toValue: (aList at: ii+1)].! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 09:48' prior: 26629300! setProperty: aSymbol toValue: anObject "change the receiver's property named aSymbol to anObject" anObject ifNil: [^ self removeProperty: aSymbol]. self assureExtension setProperty: aSymbol toValue: anObject! ! !Morph methodsFor: 'menus' stamp: 'ar 9/22/2000 20:14' prior: 26782089! setRotationCenterFrom: aPoint self rotationCenter: (aPoint - self bounds origin) / self bounds extent asFloatPoint.! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 10/26/2000 18:58' prior: 26660544! setShadowOffset: evt | handle | handle := HandleMorph new forEachPointDo: [:newPoint | self shadowPoint: newPoint]. evt hand attachMorph: handle. handle startStepping. ! ! !Morph methodsFor: 'menus' stamp: 'di 12/21/2000 17:18' prior: 26782267! setToAdhereToEdge: anEdge anEdge ifNil: [^ self]. anEdge == #none ifTrue: [^ self removeProperty: #edgeToAdhereTo]. self setProperty: #edgeToAdhereTo toValue: anEdge. ! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 10/26/2000 18:59' prior: 26660787! shadowColor ^self valueOfProperty: #shadowColor ifAbsent:[Color black]! ! !Morph methodsFor: 'drop shadows' stamp: 'AlainPlantec 12/14/2009 11:09' prior: 26660937! shadowColor: aColor self shadowColor = aColor ifFalse: [self changed]. self setProperty: #shadowColor toValue: aColor.! ! !Morph methodsFor: 'drawing' stamp: 'JW 7/12/2005 20:12' prior: 26657502! shadowForm "Return a form representing the 'shadow' of the receiver - e.g., all pixels that are occupied by the receiver are one, all others are zero." | canvas | canvas := (Display defaultCanvasClass extent: self fullBounds extent depth: 1) asShadowDrawingCanvas: Color black. "Color black represents one for 1bpp" canvas translateBy: bounds topLeft negated during:[:tempCanvas| tempCanvas fullDrawMorph: self]. ^ canvas form offset: bounds topLeft ! ! !Morph methodsFor: 'drop shadows' stamp: 'marcus.denker 8/24/2008 22:50' prior: 26661136! shadowOffset "Return the current shadow offset" extension ifNil: [^0@0]. ^self valueOfProperty: #shadowOffset ifAbsent:[0@0]! ! !Morph methodsFor: 'drop shadows' stamp: 'ClementBera 9/30/2013 11:00' prior: 68983746! shadowOffset: aPoint "Set the current shadow offset" (aPoint isNil or:[(aPoint x isZero) and: [ aPoint y isZero ]]) ifTrue:[ self removeProperty: #shadowOffset ] ifFalse:[ self setProperty: #shadowOffset toValue: aPoint ].! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 11/12/2000 18:58' prior: 26661622! shadowPoint: newPoint self changed. self shadowOffset: newPoint - self center // 5. fullBounds ifNotNil:[fullBounds := self privateFullBounds]. self changed.! ! !Morph methodsFor: 'geometry' stamp: 'sw 2/16/1999 22:05' prior: 26712128! shiftSubmorphsOtherThan: listNotToShift by: delta | rejectList | rejectList := listNotToShift ifNil: [OrderedCollection new]. (submorphs copyWithoutAll: rejectList) do: [:m | m position: (m position + delta)]! ! !Morph methodsFor: 'testing' stamp: 'ar 12/3/2001 12:33' prior: 26830312! shouldDropOnMouseUp | former | former := self formerPosition ifNil:[^false]. ^(former dist: self position) > 10! ! !Morph methodsFor: 'testing' stamp: 'WilliamSix 1/14/2013 19:43' prior: 26830497! shouldFlex ^ self isFlexMorph.! ! !Morph methodsFor: 'wiw support' stamp: 'ar 3/18/2001 00:14' prior: 26842498! shouldGetStepsFrom: aWorld ^self world == aWorld! ! !Morph methodsFor: 'drawing' stamp: 'sw 10/22/1998 20:29' prior: 26658027! show "Make sure this morph is on-stage." self visible ifFalse: [self visible: true. self changed]! ! !Morph methodsFor: 'meta-actions' stamp: 'BernardoContreras 1/18/2012 23:06' prior: 26793274! showActions "Put up a message list browser of all the code that this morph would run for mouseUp, mouseDown, mouseMove, mouseEnter, mouseLeave, and mouseLinger." | list cls selector adder | list := SortedCollection new. adder := [:mrClass :mrSel | list add: (RGMethodDefinition realClass: mrClass selector: mrSel)]. "the eventHandler" self eventHandler ifNotNil: [list := self eventHandler methodRefList. (self eventHandler handlesMouseDown: nil) ifFalse: [adder value: HandMorph value: #grabMorph:]]. "If not those, then non-default raw events" #(#keyStroke: #mouseDown: #mouseEnter: #mouseLeave: #mouseMove: #mouseUp: #doButtonAction ) do: [:sel | cls := self class whichClassIncludesSelector: sel. cls ifNotNil: ["want more than default behavior" cls == Morph ifFalse: [adder value: cls value: sel]]]. "The mechanism on a Button" (self respondsTo: #actionSelector) ifTrue: ["A button" selector := self actionSelector. cls := self target class whichClassIncludesSelector: selector. cls ifNotNil: ["want more than default behavior" cls == Morph ifFalse: [adder value: cls value: selector]]]. Smalltalk tools messageList openMessageList: list name: 'Actions of ' , self printString autoSelect: ''! ! !Morph methodsFor: 'halos and balloon help' stamp: 'ar 10/3/2000 17:06' prior: 26724800! showBalloon: msgString "Pop up a balloon containing the given string, first removing any existing BalloonMorphs in the world." | w | self showBalloon: msgString hand: ((w := self world) ifNotNil:[w activeHand]).! ! !Morph methodsFor: 'accessing' stamp: 'wiz 11/6/2005 17:10' prior: 26624956! simplySetVisible: aBoolean "Set the receiver's visibility property. This mild circumlocution is because my TransfomationMorph #visible: method would also set the visibility flag of my flexee, which in this case is pointless because it's the flexee that calls this. This appears in morph as a backstop for morphs that don't inherit from TFMorph" self visible: aBoolean! ! !Morph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/28/2012 00:58' prior: 26830609! simulateKeyStroke: aCharacter | event | event := KeyboardEvent new setType: #keystroke buttons: 0 position: 0@0 keyValue: aCharacter charCode charCode: aCharacter charCode hand: ActiveHand stamp: 0. self keyStroke: event! ! !Morph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/28/2012 00:59' prior: 26830948! simulateKeyStrokes: aString aString do: [:c | self simulateKeyStroke: c ].! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 8/12/2003 23:35' prior: 26668604! slideBackToFormerSituation: evt | slideForm formerOwner formerPosition aWorld startPoint endPoint trans | formerOwner := self formerOwner. formerPosition := self formerPosition. aWorld := evt hand world. trans := formerOwner transformFromWorld. slideForm := trans isPureTranslation ifTrue: [self imageForm offset: 0 @ 0] ifFalse: [((TransformationMorph new asFlexOf: self) transform: trans) imageForm offset: 0 @ 0]. startPoint := evt hand fullBounds origin. endPoint := trans localPointToGlobal: formerPosition. owner removeMorph: self. aWorld displayWorld. slideForm slideFrom: startPoint to: endPoint nSteps: 12 delay: 15. formerOwner addMorph: self. self position: formerPosition. self justDroppedInto: formerOwner event: evt! ! !Morph methodsFor: 'menus' stamp: 'sw 8/30/1998 09:42' prior: 26782498! snapToEdgeIfAppropriate | edgeSymbol oldBounds aWorld | (edgeSymbol := self valueOfProperty: #edgeToAdhereTo) ifNotNil: [oldBounds := bounds. self adhereToEdge: edgeSymbol. bounds ~= oldBounds ifTrue: [(aWorld := self world) ifNotNil: [aWorld viewBox ifNotNil: [aWorld displayWorld]]]]! ! !Morph methodsFor: 'layout-properties' stamp: 'dgd 2/16/2003 20:02' prior: 26759603! spaceFillWeight "Layout specific. This property describes the relative weight that should be given to the receiver when extra space is distributed between different #spaceFill cells." ^ self valueOfProperty: #spaceFillWeight ifAbsent: [1]! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/15/2000 14:16' prior: 26759926! spaceFillWeight: aNumber "Layout specific. This property describes the relative weight that should be given to the receiver when extra space is distributed between different #spaceFill cells." aNumber = 1 ifTrue:[self removeProperty: #spaceFillWeight] ifFalse:[self setProperty: #spaceFillWeight toValue: aNumber]. self layoutChanged.! ! !Morph methodsFor: 'stepping and presenter' stamp: '' prior: 26803129! start "Start running my script. For ordinary morphs, this means start stepping." self startStepping. ! ! !Morph methodsFor: 'event handling' stamp: 'mir 5/23/2000 17:43' prior: 26682494! startDrag: evt "Handle a double-click event. This message is only sent to clients that request it by sending #waitForClicksOrDrag:event: to the initiating hand in their mouseDown: method. This default implementation does nothing." self eventHandler ifNotNil: [self eventHandler startDrag: evt fromMorph: self].! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'mir 1/4/2001 11:02' prior: 26669453! startDrag: anItem with: anObject self currentHand attachMorph: anObject! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 1/31/2001 13:07' prior: 26803311! startStepping "Start getting sent the 'step' message." self startStepping: #stepAt: at: Time millisecondClockValue arguments: nil stepTime: nil.! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 10/22/2000 16:36' prior: 26804032! startStepping: aSelector at: scheduledTime arguments: args stepTime: stepTime "Start stepping the receiver" | w | w := self world. w ifNotNil: [ w startStepping: self at: scheduledTime selector: aSelector arguments: args stepTime: stepTime. self changed].! ! !Morph methodsFor: 'stepping and presenter' stamp: 'sw 7/19/1998 11:51' prior: 26803535! startSteppingIn: aWorld "Start getting sent the 'step' message in aWorld" self step. "one to get started!!" aWorld ifNotNil: [aWorld startStepping: self]. self changed! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 10/22/2000 16:42' prior: 26803787! startSteppingSelector: aSelector "Start getting sent the 'step' message." self startStepping: aSelector at: Time millisecondClockValue arguments: nil stepTime: nil.! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 2/12/2001 17:04' prior: 26804373! step "Do some periodic activity. Use startStepping/stopStepping to start and stop getting sent this message. The time between steps is specified by this morph's answer to the stepTime message. The generic version dispatches control to the player, if any. The nasty circumlocation about owner's transformation is necessitated by the flexing problem that the player remains in the properties dictionary both of the flex and the real morph. In the current architecture, only the top renderer's pointer to the player should actually be honored for the purpose of firing." ! ! !Morph methodsFor: 'stepping and presenter' stamp: 'stephane.ducasse 11/27/2008 22:31' prior: 26805038! stepAt: millisecondClockValue "Do some periodic activity. Use startStepping/stopStepping to start and stop getting sent this message. The time between steps is specified by this morph's answer to the stepTime message. The millisecondClockValue parameter gives the value of the millisecond clock at the moment of dispatch. Default is to dispatch to the parameterless step method for the morph, but this protocol makes it possible for some morphs to do differing things depending on the clock value" self step ! ! !Morph methodsFor: 'menus' stamp: 'StephaneDucasse 4/22/2012 16:35' prior: 26782868! stickinessString "Answer the string to be shown in a menu to represent the stickiness status" ^ (self isSticky) -> 'resist being picked up' translated! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 08:33' prior: 26625393! sticky: aBoolean "change the receiver's sticky property" extension sticky: aBoolean! ! !Morph methodsFor: 'stepping and presenter' stamp: '' prior: 26805601! stop "Stop running my script. For ordinary morphs, this means stop stepping." self stopStepping. ! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 12/15/2000 00:00' prior: 26805780! stopStepping "Stop getting sent the 'step' message." | w | w := self world. w ifNotNil: [w stopStepping: self]. ! ! !Morph methodsFor: 'stepping and presenter' stamp: 'ar 12/15/2000 00:00' prior: 26805976! stopSteppingSelector: aSelector "Stop getting sent the given message." | w | w := self world. w ifNotNil: [w stopStepping: self selector: aSelector]. ! ! !Morph methodsFor: 'stepping and presenter' stamp: 'sw 10/11/1999 12:59' prior: 26806209! stopSteppingSelfAndSubmorphs self allMorphsDo: [:m | m stopStepping] ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'tk 10/20/2000 13:12' prior: 26818748! submorphAfter "Return the submorph after (behind) me, or nil" | ii | owner ifNil: [^ nil]. ^ (ii := owner submorphIndexOf: self) = owner submorphs size ifTrue: [nil] ifFalse: [owner submorphs at: ii+1]. ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'tk 10/20/2000 13:13' prior: 26819038! submorphBefore "Return the submorph after (behind) me, or nil" | ii | owner ifNil: [^ nil]. ^ (ii := owner submorphIndexOf: self) = 1 ifTrue: [nil] ifFalse: [owner submorphs at: ii-1]. ! ! !Morph methodsFor: 'layout' stamp: 'nice 1/5/2010 15:59' prior: 26736615! submorphBounds "Private. Compute the actual full bounds of the receiver" | box | submorphs do: [:m | | subBox | (m visible) ifTrue: [ subBox := m fullBounds. box ifNil:[box := subBox copy] ifNotNil:[box := box quickMerge: subBox]]]. box ifNil:[^self bounds]. "e.g., having submorphs but not visible" ^ box origin asIntegerPoint corner: box corner asIntegerPoint ! ! !Morph methodsFor: 'submorphs-accessing' stamp: '' prior: 26819281! submorphCount ^ submorphs size! ! !Morph methodsFor: 'submorphs-add/remove' stamp: 'sw 9/1/2000 10:16' prior: 26829046! submorphIndexOf: aMorph "Assuming aMorph to be one of my submorphs, answer where it occurs in my submorph list" ^ submorphs indexOf: aMorph ifAbsent: [nil]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'sw 4/9/98 14:26' prior: 26819385! submorphNamed: aName ^ self submorphNamed: aName ifNone: [nil]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'nice 1/5/2010 15:59' prior: 26819524! submorphNamed: aName ifNone: aBlock "Find the first submorph with this name, or a button with an action selector of that name" self submorphs do: [:button | | sub args | (button respondsTo: #actionSelector) ifTrue: [button actionSelector == aName ifTrue: [^button]]. ((button respondsTo: #arguments) and: [(args := button arguments) notNil]) ifTrue: [(args at: 2 ifAbsent: [nil]) == aName ifTrue: [^button]]. (button isAlignmentMorph) ifTrue: [(sub := button submorphNamed: aName ifNone: [nil]) ifNotNil: [^sub]]]. ^aBlock value! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'ClementBera 10/3/2013 10:29' prior: 69144384! submorphThat: block1 ifNone: block2 ^ submorphs detect: [:m | (block1 value: m) == true] ifNone: block2 ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'sw 7/3/1998 18:47' prior: 26821476! submorphWithProperty: aSymbol ^ submorphs detect: [:aMorph | aMorph hasProperty: aSymbol] ifNone: [nil]! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'efc 8/6/2005 11:35' prior: 26820163! submorphs "This method returns my actual submorphs collection. Modifying the collection directly could be dangerous; make a copy if you need to alter it." ^ submorphs ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'di 11/4/97 14:30' prior: 26820405! submorphsBehind: aMorph do: aBlock | behind | behind := false. submorphs do: [:m | m == aMorph ifTrue: [behind := true] ifFalse: [behind ifTrue: [aBlock value: m]]]. ! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'dgd 2/22/2003 14:35' prior: 26820658! submorphsDo: aBlock submorphs do: aBlock! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'di 11/4/97 14:29' prior: 26820773! submorphsInFrontOf: aMorph do: aBlock | behind | behind := false. submorphs do: [:m | m == aMorph ifTrue: [behind := true] ifFalse: [behind ifFalse: [aBlock value: m]]]. ! ! !Morph methodsFor: 'submorphs-accessing' stamp: '' prior: 26821001! submorphsReverseDo: aBlock submorphs reverseDo: aBlock.! ! !Morph methodsFor: 'submorphs-accessing' stamp: 'sw 8/15/97 22:03' prior: 26821131! submorphsSatisfying: aBlock ^ submorphs select: [:m | (aBlock value: m) == true]! ! !Morph methodsFor: 'event handling' stamp: 'sw 11/16/1998 08:07' prior: 26682880! suspendEventHandler self eventHandler ifNotNil: [self setProperty: #suspendedEventHandler toValue: self eventHandler. self eventHandler: nil]. submorphs do: [:m | m suspendEventHandler]. "All those rectangles"! ! !Morph methodsFor: 'event handling' stamp: 'AlainPlantec 12/19/2009 23:25' prior: 26683177! tabAmongFields ^ self theme settings tabAmongFields or: [self hasProperty: #tabAmongFields] ! ! !Morph methodsFor: 'card in a stack' stamp: 'stephane.ducasse 11/15/2008 14:34' prior: 26634047! tabHitWithEvent: anEvent "The tab key was hit. The keyboard focus has referred this event to me, though this perhaps seems rather backwards. Anyway, the assumption is that I have the property #tabAmongFields, so now the task is to tab to the next field." | currentFocus fieldList anIndex itemToHighlight | currentFocus := anEvent hand keyboardFocus. fieldList := self allMorphs select: [:aMorph | (aMorph wouldAcceptKeyboardFocusUponTab) and: [aMorph isLocked not]]. fieldList isEmpty ifTrue:[^ self]. anIndex := fieldList indexOf: currentFocus ifAbsent: [nil]. itemToHighlight := fieldList atWrap: (anIndex ifNotNil: [anEvent shiftPressed ifTrue: [anIndex - 1] ifFalse: [anIndex + 1]] ifNil: [1]). anEvent hand newKeyboardFocus: itemToHighlight. self flag: #arNote. "really???" itemToHighlight editor selectAll. itemToHighlight invalidRect: itemToHighlight bounds ! ! !Morph methodsFor: 'accessing-backstop' stamp: 'wiz 2/14/2006 19:02' prior: 26630930! target: aMorph "Morphs with targets will override. This backstop does nothing." "This is here because targeting meta-actions are taken at morph level. Do not remove."! ! !Morph methodsFor: 'meta-actions' stamp: 'MarcusDenker 11/28/2009 14:25' prior: 26794631! targetWith: evt "Some other morph become target of the receiver" | newTarget | newTarget := UIManager default chooseFrom: (self potentialTargets collect: [:t | t class name asString]) values: self potentialTargets title: (self externalName, ' targets...' translated). newTarget ifNil:[^self]. self target: newTarget.! ! !Morph methodsFor: 'text-anchor' stamp: 'ar 12/16/2001 18:36' prior: 26834145! textAnchorType ^self valueOfProperty: #textAnchorType ifAbsent:[#document]! ! !Morph methodsFor: 'text-anchor' stamp: 'ar 12/16/2001 18:37' prior: 26834288! textAnchorType: aSymbol aSymbol == #document ifTrue:[^self removeProperty: #textAnchorType] ifFalse:[^self setProperty: #textAnchorType toValue: aSymbol].! ! !Morph methodsFor: 'rounding' stamp: 'ar 12/25/2001 19:44' prior: 26800824! toggleCornerRounding self cornerStyle == #rounded ifTrue: [self cornerStyle: #square] ifFalse: [self cornerStyle: #rounded]. self changed! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'panda 4/25/2000 15:46' prior: 26669601! toggleDragNDrop "Toggle this morph's ability to add and remove morphs via drag-n-drop." self enableDragNDrop: self dragNDropEnabled not. ! ! !Morph methodsFor: 'drop shadows' stamp: 'ar 10/26/2000 20:16' prior: 26661852! toggleDropShadow self hasDropShadow ifTrue:[self removeDropShadow] ifFalse:[self addDropShadow].! ! !Morph methodsFor: 'accessing' stamp: 'RAA 2/19/2001 17:38' prior: 26625545! toggleLocked self lock: self isLocked not! ! !Morph methodsFor: 'accessing' stamp: 'sw 11/15/2001 12:21' prior: 26625655! toggleResistsRemoval "Toggle the resistsRemoval property" self resistsRemoval ifTrue: [self removeProperty: #resistsRemoval] ifFalse: [self setProperty: #resistsRemoval toValue: true]! ! !Morph methodsFor: 'accessing' stamp: 'md 2/27/2006 08:53' prior: 26625916! toggleStickiness "togle the receiver's Stickiness" extension ifNil: [^ self beSticky]. extension sticky: extension sticky not! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:17' prior: 26712406! top " Return the y-coordinate of my top side " ^ bounds top! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:14' prior: 26713240! top: aNumber " Move me so that my top is at the y-coordinate aNumber. My extent (width & height) are unchanged " self position: (bounds left @ aNumber)! ! !Morph methodsFor: 'geometry' stamp: 'di 3/6/2002 13:06' prior: 26712531! topCenter ^ bounds topCenter! ! !Morph methodsFor: 'geometry' stamp: 'di 6/12/97 11:07' prior: 26712623! topLeft ^ bounds topLeft! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:10' prior: 26712714! topLeft: aPoint " Move me so that my top left corner is at aPoint. My extent (width & height) are unchanged " self position: aPoint ! ! !Morph methodsFor: 'Morphic-Base-Worlds' stamp: 'sw 8/30/1998 09:47' prior: 26589641! topPasteUp "If the receiver is in a world, return that; otherwise return the outermost pasteup morph" ^ self outermostMorphThat: [:m | m isKindOf: PasteUpMorph]! ! !Morph methodsFor: 'structure' stamp: 'dgd 2/22/2003 19:06' prior: 26809873! topRendererOrSelf "Answer the topmost renderer for this morph, or this morph itself if it has no renderer. See the comment in Morph>isRenderer." | top topsOwner | owner ifNil: [^self]. self isWorldMorph ifTrue: [^self]. "ignore scaling of this world" top := self. topsOwner := top owner. [topsOwner notNil and: [topsOwner isRenderer]] whileTrue: [top := topsOwner. topsOwner := top owner]. ^top! ! !Morph methodsFor: 'geometry' stamp: 'sw 8/20/97 23:04' prior: 26712911! topRight ^ bounds topRight! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:12' prior: 26713004! topRight: aPoint " Move me so that my top right corner is at aPoint. My extent (width & height) are unchanged " self position: ((aPoint x - bounds width) @ (aPoint y)) ! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/12/2009 07:10' prior: 26725104! transferHalo: event from: formerHaloOwner "Progressively transfer the halo to the next likely recipient" | localEvt w target | self flag: #workAround. "For halo's distinction between 'target' and 'innerTarget' we need to bypass any renderers." (formerHaloOwner == self and:[self isRenderer and:[self wantsHaloFromClick not]]) ifTrue:[ event shiftPressed ifTrue:[ target := owner. localEvt := event transformedBy: (self transformedFrom: owner). ] ifFalse:[ target := self renderedMorph. localEvt := event transformedBy: (target transformedFrom: self). ]. ^target transferHalo: localEvt from: target]. " formerHaloOwner == self ifTrue:[^ self removeHalo]." "Never transfer halo to top-most world" (self isWorldMorph and:[owner isNil]) ifFalse:[ (self wantsHaloFromClick and:[formerHaloOwner ~~ self]) ifTrue:[^self addHalo: event from: formerHaloOwner]]. event shiftPressed ifTrue:[ "Pass it outwards" owner ifNotNil:[^owner transferHalo: event from: formerHaloOwner]. "We're at the top level; throw the event back in to find recipient" formerHaloOwner removeHalo. ^self processEvent: event copy resetHandlerFields. ]. self submorphsDo:[:m| localEvt := event transformedBy: (m transformedFrom: self). (m fullContainsPoint: localEvt position) ifTrue:[^m transferHalo: event from: formerHaloOwner]. ]. "We're at the bottom most level; throw the event back up to the root to find recipient" formerHaloOwner removeHalo. (w := self world) ifNil: [ ^self ]. localEvt := event transformedBy: (self transformedFrom: w) inverseTransformation. ^ w processEvent: localEvt resetHandlerFields. ! ! !Morph methodsFor: 'menus' stamp: 'MarcusDenker 11/28/2009 14:25' prior: 26783095! transferStateToRenderer: aRenderer "Transfer knownName, and visible over to aRenderer, which is being imposed above me as a transformation shell" aRenderer simplySetVisible: self visible ! ! !Morph methodsFor: 'event handling' stamp: 'dgd 2/22/2003 14:36' prior: 26683784! transformFrom: uberMorph "Return a transform to be used to map coordinates in a morph above me into my childrens coordinates, or vice-versa. This is used to support scrolling, scaling, and/or rotation. This default implementation just returns my owner's transform or the identity transform if my owner is nil. Note: This method cannot be used to map into the receiver's coordinate system!!" (self == uberMorph or: [owner isNil]) ifTrue: [^IdentityTransform new]. ^owner transformFrom: uberMorph! ! !Morph methodsFor: 'event handling' stamp: 'RAA 6/19/2000 07:13' prior: 26683343! transformFromOutermostWorld "Return a transform to map world coordinates into my local coordinates" "self isWorldMorph ifTrue: [^ MorphicTransform identity]." ^ self transformFrom: self outermostWorldMorph! ! !Morph methodsFor: 'event handling' stamp: '' prior: 26683594! transformFromWorld "Return a transform to map world coordinates into my local coordinates" ^ self transformFrom: nil! ! !Morph methodsFor: 'geometry' stamp: 'ar 10/22/2000 18:03' prior: 26713459! transformedBy: aTransform aTransform isIdentity ifTrue:[^self]. aTransform isPureTranslation ifTrue:[ ^self position: (aTransform localPointToGlobal: self position). ]. ^self addFlexShell transformedBy: aTransform! ! !Morph methodsFor: 'events-processing' stamp: 'marcus.denker 8/24/2008 22:02' prior: 26699489! transformedFrom: uberMorph "Return a transform to map coordinates of uberMorph, a morph above me in my owner chain, into the coordinates of MYSELF not any of my children." "self flag: #arNote." "rename this method" owner ifNil:[^IdentityTransform basicNew]. ^ (owner transformFrom: uberMorph)! ! !Morph methodsFor: 'utilities' stamp: 'sw 10/23/1998 11:50' prior: 26838145! transparentSpacerOfSize: aPoint ^ (Morph new extent: aPoint) color: Color transparent! ! !Morph methodsFor: 'undo' stamp: 'md 10/22/2003 15:56' prior: 26835358! undoMove: cmd redo: redo owner: formerOwner bounds: formerBounds predecessor: formerPredecessor "Handle undo and redo of move commands in morphic" self owner ifNil: [^Beeper beep]. redo ifFalse: ["undo sets up the redo state first" cmd redoTarget: self selector: #undoMove:redo:owner:bounds:predecessor: arguments: { cmd. true. owner. bounds. owner morphPreceding: self}]. formerOwner ifNotNil: [formerPredecessor ifNil: [formerOwner addMorphFront: self] ifNotNil: [formerOwner addMorph: self after: formerPredecessor]]. self bounds: formerBounds. (self isSystemWindow) ifTrue: [self activate]! ! !Morph methodsFor: 'accessing' stamp: 'di 8/11/1998 12:33' prior: 26626109! unlock self lock: false! ! !Morph methodsFor: 'accessing' stamp: 'sw 8/15/97 23:59' prior: 26626196! unlockContents self submorphsDo: [:m | m unlock]! ! !Morph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 7/24/2013 13:35' prior: 46312339! update: anAspect ^ self! ! !Morph methodsFor: 'events-accessing' stamp: 'gvc 9/11/2009 17:43' prior: 26686286! updateableActionMap "Answer an updateable action map, saving it in my #actionMap property" | actionMap | self assureExtension. actionMap := extension actionMap. actionMap ifNil: [actionMap := self createActionMap. extension actionMap: actionMap]. ^actionMap! ! !Morph methodsFor: 'visual properties' stamp: 'nk 8/28/2003 15:57' prior: 26839958! useBitmapFill "Make receiver use a solid fill style (e.g., a simple color)" | fill | self fillStyle isBitmapFill ifTrue:[^self]. "Already done" fill := BitmapFillStyle fromForm: self defaultBitmapFillForm. "Note: Must fix the origin due to global coordinates" fill origin: self bounds origin. self fillStyle: fill.! ! !Morph methodsFor: 'visual properties' stamp: 'ar 6/25/1999 11:11' prior: 26840352! useDefaultFill "Make receiver use a solid fill style (e.g., a simple color)" self fillStyle: self defaultColor.! ! !Morph methodsFor: 'visual properties' stamp: 'nk 2/27/2003 11:48' prior: 26840538! useGradientFill "Make receiver use a solid fill style (e.g., a simple color)" | fill color1 color2 | self fillStyle isGradientFill ifTrue:[^self]. "Already done" color1 := self color asColor. color2 := color1 negated. fill := GradientFillStyle ramp: {0.0 -> color1. 1.0 -> color2}. fill origin: self topLeft. fill direction: 0 @ self bounds extent y. fill normal: self bounds extent x @ 0. fill radial: false. self fillStyle: fill! ! !Morph methodsFor: 'rounding' stamp: 'MarcusDenker 10/26/2011 14:58' prior: 26801042! useRoundedCorners self cornerStyle: #rounded! ! !Morph methodsFor: 'visual properties' stamp: 'ar 6/18/1999 06:57' prior: 26841052! useSolidFill "Make receiver use a solid fill style (e.g., a simple color)" self fillStyle isSolidFill ifTrue:[^self]. "Already done" self fillStyle: self fillStyle asColor. "Try minimizing changes"! ! !Morph methodsFor: 'accessing' stamp: 'tk 12/16/1998 11:54' prior: 26626313! userString "Do I have a text string to be searched on?" ^ nil! ! !Morph methodsFor: 'layout-properties' stamp: 'tk 10/30/2001 18:39' prior: 26760341! vResizeToFit: aBoolean aBoolean ifTrue:[ self vResizing: #shrinkWrap. ] ifFalse:[ self vResizing: #rigid. ].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:02' prior: 26760530! vResizing "Layout specific. This property describes how the receiver should be resized with respect to its owner and its children. Possible values are: #rigid - do not resize the receiver #spaceFill - resize to fill owner's available space #shrinkWrap - resize to fit children " | props | props := self layoutProperties. ^props ifNil:[#rigid] ifNotNil:[props vResizing].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:03' prior: 26761148! vResizing: aSymbol "Layout specific. This property describes how the receiver should be resized with respect to its owner and its children. Possible values are: #rigid - do not resize the receiver #spaceFill - resize to fill owner's available space #shrinkWrap - resize to fit children " self assureLayoutProperties vResizing: aSymbol. self layoutChanged. ! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/31/2000 20:45' prior: 26760988! vResizingString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self vResizing! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 08:53' prior: 26629589! valueOfProperty: aSymbol "answer the value of the receiver's property named aSymbol" ^ extension ifNotNil: [extension valueOfProperty: aSymbol]! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 08:50' prior: 26630213! valueOfProperty: aSymbol ifAbsent: aBlock "if the receiver possesses a property of the given name, answer its value. If not then evaluate aBlock and answer the result of this block evaluation" ^ extension ifNotNil: [extension valueOfProperty: aSymbol ifAbsent: aBlock] ifNil: [aBlock value]! ! !Morph methodsFor: 'accessing - properties' stamp: 'dgd 2/16/2003 20:55' prior: 26629814! valueOfProperty: aSymbol ifAbsentPut: aBlock "If the receiver possesses a property of the given name, answer its value. If not, then create a property of the given name, give it the value obtained by evaluating aBlock, then answer that value" ^ self assureExtension valueOfProperty: aSymbol ifAbsentPut: aBlock! ! !Morph methodsFor: 'accessing - properties' stamp: 'md 2/27/2006 08:49' prior: 26630595! valueOfProperty: aSymbol ifPresentDo: aBlock "If the receiver has a property of the given name, evaluate aBlock on behalf of the value of that property" extension ifNil: [^ self]. ^ aBlock value: (extension valueOfProperty: aSymbol ifAbsent: [^ self])! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'adrian_lienhard 7/19/2009 17:35' prior: 26669828! vanishAfterSlidingTo: aPosition event: evt | aForm aWorld startPoint endPoint | aForm := self imageForm offset: 0@0. aWorld := self world. startPoint := evt hand fullBounds origin. self delete. aWorld displayWorld. endPoint := aPosition. aForm slideFrom: startPoint to: endPoint nSteps: 12 delay: 15.! ! !Morph methodsFor: 'copying' stamp: 'tk 1/6/1999 17:27' prior: 26639052! veryDeepCopyWith: deepCopier "Copy me and the entire tree of objects I point to. An object in the tree twice is copied once, and both references point to him. deepCopier holds a dictionary of objects we have seen. See veryDeepInner:, veryDeepFixupWith:" self prepareToBeSaved. ^ super veryDeepCopyWith: deepCopier! ! !Morph methodsFor: 'copying' stamp: 'tk 2/3/2001 14:29' prior: 26639434! veryDeepFixupWith: deepCopier "If some fields were weakly copied, fix new copy here." "super veryDeepFixupWith: deepCopier. Object has no fixups, so don't call it" "If my owner is being duplicated too, then store his duplicate. If I am owned outside the duplicated tree, then I am no longer owned!!" owner := deepCopier references at: owner ifAbsent: [nil]. ! ! !Morph methodsFor: 'copying' stamp: 'pmm 3/13/2010 11:32' prior: 26639865! veryDeepInner: deepCopier "The inner loop, so it can be overridden when a field should not be traced." "super veryDeepInner: deepCopier. know Object has no inst vars" bounds := bounds shallowCopy. "Points are shared with original" "owner := owner. special, see veryDeepFixupWith:" submorphs := submorphs veryDeepCopyWith: deepCopier. "each submorph's fixup will install me as the owner" "fullBounds := fullBounds. fullBounds is shared with original!!" color := color veryDeepCopyWith: deepCopier. "color, if simple, will return self. may be complex" extension := (extension veryDeepCopyWith: deepCopier)! ! !Morph methodsFor: 'Morphic-Base-Worlds' stamp: 'dgd 9/27/2004 11:45' prior: 26589875! viewBox ^ self pasteUpMorph viewBox! ! !Morph methodsFor: 'drawing' stamp: 'md 2/27/2006 08:49' prior: 26658190! visible "answer whether the receiver is visible" extension ifNil: [^ true]. ^ extension visible! ! !Morph methodsFor: 'accessing' stamp: 'IgorStasenko 12/22/2012 03:10' prior: 26626453! visibleClearArea "Answer the receiver visible clear area. The intersection between the clear area and the viewbox." ^ self viewBox intersect: self clearArea ifNone: [ (0@0 corner: 0@0 ) ]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/19/2009 23:17' prior: 26726838! wantsBalloon "Answer true if receiver wants to show a balloon help text is a few moments." ^ (self balloonText notNil) and: [self balloonHelpEnabled]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/19/2009 23:40' prior: 26727079! wantsDirectionHandles ^self valueOfProperty: #wantsDirectionHandles ifAbsent:[false]! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 12/19/2009 23:41' prior: 26727253! wantsDirectionHandles: aBool self setProperty: #wantsDirectionHandles toValue: aBool ! ! !Morph methodsFor: 'event handling' stamp: 'ar 1/10/2001 21:28' prior: 26684356! wantsDropFiles: anEvent "Return true if the receiver wants files dropped from the OS." ^false! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 10/11/2000 18:24' prior: 26670212! wantsDroppedMorph: aMorph event: evt "Return true if the receiver wishes to accept the given morph, which is being dropped by a hand in response to the given event. Note that for a successful drop operation both parties need to agree. The symmetric check is done automatically via aMorph wantsToBeDroppedInto: self." ^self dropEnabled! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 4/8/98 13:26' prior: 26727414! wantsHaloFor: aSubMorph ^ false! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 1/25/2000 17:43' prior: 26727524! wantsHaloFromClick ^ true! ! !Morph methodsFor: 'halos and balloon help' stamp: 'AlainPlantec 5/7/2010 22:56' prior: 26727637! wantsHaloHandleWithSelector: aSelector inHalo: aHaloMorph "Answer whether the receiver would like to offer the halo handle with the given selector (e.g. #addCollapseHandle:)" (#(addDismissHandle:) includes: aSelector) ifTrue: [^ self resistsRemoval not]. (#( addDragHandle: ) includes: aSelector) ifTrue: [^ self okayToBrownDragEasily]. (#(addGrowHandle: addScaleHandle:) includes: aSelector) ifTrue: [^ self okayToResizeEasily]. (#( addRotateHandle: ) includes: aSelector) ifTrue: [^ self okayToRotateEasily]. (#(addRecolorHandle:) includes: aSelector) ifTrue: [^ self renderedMorph wantsRecolorHandle]. ^ true ! ! !Morph methodsFor: 'event handling' stamp: 'sw 11/3/97 02:11' prior: 26684519! wantsKeyboardFocusFor: aSubmorph "Answer whether a plain mouse click on aSubmorph, a text-edit-capable thing, should result in a text selection there" ^ false! ! !Morph methodsFor: 'halos and balloon help' stamp: 'sw 11/27/2001 14:52' prior: 26728352! wantsRecolorHandle "Answer whether the receiver would like a recoloring halo handle to be put up. Since this handle also presently affords access to the property-sheet, it is presently always allowed, even though SketchMorphs don't like regular recoloring" ^ true ! ! !Morph methodsFor: 'rounding' stamp: 'ar 12/22/2001 22:45' prior: 26801152! wantsRoundedCorners "Return true if the receiver wants its corners rounded" ^ self cornerStyle == #rounded! ! !Morph methodsFor: 'testing' stamp: 'StephaneDucasse 7/18/2010 16:33' prior: 26831444! wantsSteps "Return true if the receiver overrides the default Morph step method." "Details: Find first class in superclass chain that implements #step and return true if it isn't class Morph." | c | c := self class. [c includesSelector: #step] whileFalse: [c := c superclass]. ^ c ~= Morph! ! !Morph methodsFor: 'accessing' stamp: 'StephaneDucasse 10/13/2013 21:50' prior: 74002458! wantsToBeCachedByHand "Return true if the receiver wants to be cached by the hand when it is dragged around. Note: The default implementation queries all submorphs since subclasses may have shapes that do not fill the receiver's bounds completely." self isTranslucentButNotTransparent ifTrue: [ ^ false ]. self submorphsDo: [ :m | m wantsToBeCachedByHand ifFalse: [ ^ false ] ]. ^ true! ! !Morph methodsFor: 'dropping/grabbing' stamp: 'ar 9/18/2000 18:34' prior: 26670622! wantsToBeDroppedInto: aMorph "Return true if it's okay to drop the receiver into aMorph. This check is symmetric to #wantsDroppedMorph:event: to give both parties a chance of figuring out whether they like each other." ^true! ! !Morph methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2009 17:11' prior: 26627156! wantsToBeTopmost "Answer if the receiver want to be one of the topmost objects in its owner" ^ false! ! !Morph methodsFor: 'menu' stamp: 'AlainPlantec 12/10/2009 13:05' prior: 26768972! wantsYellowButtonMenu "Answer true if the receiver wants a yellow button menu" self valueOfProperty: #wantsYellowButtonMenu ifPresentDo: [:value | ^ value]. self isInSystemWindow ifTrue: [^ false]. ^ self defaultYellowButtonMenuEnabled! ! !Morph methodsFor: 'menu' stamp: 'dgd 9/18/2004 18:35' prior: 26769276! wantsYellowButtonMenu: aBoolean "Change the receiver to wants or not a yellow button menu" self setProperty: #wantsYellowButtonMenu toValue: aBoolean! ! !Morph methodsFor: 'geometry' stamp: '' prior: 26713714! width ^ bounds width! ! !Morph methodsFor: 'geometry' stamp: 'efc 2/13/2003 18:22' prior: 26713801! width: aNumber " Set my width; my position (top-left corner) and height will remain the same " self extent: aNumber asInteger@self height. ! ! !Morph methodsFor: 'Morphic-Base-Widgets' stamp: 'BenjaminVanRyseghem 2/12/2012 00:22' prior: 26588173! widthToDisplayInList: aList ^ self minExtent x! ! !Morph methodsFor: 'event handling' stamp: 'tbn 3/12/2010 01:55' prior: 26684750! windowEvent: anEvent "Host window event"! ! !Morph methodsFor: 'structure' stamp: 'di 11/13/2000 00:59' prior: 26810349! withAllOwners "Return the receiver and all its owners" ^ Array streamContents: [:strm | self withAllOwnersDo: [:m | strm nextPut: m]]! ! !Morph methodsFor: 'structure' stamp: 'ar 9/14/2000 16:48' prior: 26810550! withAllOwnersDo: aBlock "Evaluate aBlock with the receiver and all of its owners" aBlock value: self. owner ifNotNil:[^owner withAllOwnersDo: aBlock].! ! !Morph methodsFor: 'structure' stamp: 'ClementBera 7/30/2013 11:05' prior: 46536715! world ^owner ifNotNil: [owner world]! ! !Morph methodsFor: 'geometry' stamp: 'di 2/23/98 11:36' prior: 26714005! worldBounds ^ self world bounds! ! !Morph methodsFor: 'event handling' stamp: 'sw 5/6/1998 12:54' prior: 26684860! wouldAcceptKeyboardFocus "Answer whether a plain mouse click on the receiver should result in a text selection there" ^ false! ! !Morph methodsFor: 'event handling' stamp: 'sw 8/29/2000 14:57' prior: 26685057! wouldAcceptKeyboardFocusUponTab "Answer whether the receiver is in the running as the new keyboard focus if the tab key were hit at a meta level. This provides the leverage for tabbing among fields of a card, for example." ^ false! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:02' prior: 26761591! wrapCentering "Layout specific. This property describes how the rows/columns in a list-like layout should be centered. #topLeft - center at start of secondary direction #bottomRight - center at end of secondary direction #center - center in the middle of secondary direction #justified - insert extra space inbetween rows/columns " | props | props := self layoutProperties. ^props ifNil:[#topLeft] ifNotNil:[props wrapCentering].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:03' prior: 26762275! wrapCentering: aSymbol "Layout specific. This property describes how the rows/columns in a list-like layout should be centered. #topLeft - center at start of secondary direction #bottomRight - center at end of secondary direction #center - center in the middle of secondary direction #justified - insert extra space inbetween rows/columns " self assureTableProperties wrapCentering: aSymbol. self layoutChanged.! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 03:00' prior: 26762107! wrapCenteringString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self wrapCentering! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:03' prior: 26762772! wrapDirection "Layout specific. This property describes the direction along which a list-like layout should be wrapped. Possible values are: #leftToRight #rightToLeft #topToBottom #bottomToTop #none indicating in which direction wrapping should occur. This direction must be orthogonal to the list direction, that is if listDirection is #leftToRight or #rightToLeft then wrapDirection must be #topToBottom or #bottomToTop and vice versa." | props | props := self layoutProperties. ^props ifNil:[#none] ifNotNil:[props wrapDirection].! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 11/13/2000 20:03' prior: 26763563! wrapDirection: aSymbol "Layout specific. This property describes the direction along which a list-like layout should be wrapped. Possible values are: #leftToRight #rightToLeft #topToBottom #bottomToTop #none indicating in which direction wrapping should occur. This direction must be orthogonal to the list direction, that is if listDirection is #leftToRight or #rightToLeft then wrapDirection must be #topToBottom or #bottomToTop and vice versa." self assureTableProperties wrapDirection: aSymbol. self layoutChanged. ! ! !Morph methodsFor: 'layout-properties' stamp: 'ar 10/29/2000 03:00' prior: 26763394! wrapDirectionString: aSymbol ^self layoutMenuPropertyString: aSymbol from: self wrapDirection ! ! !Morph methodsFor: 'event handling' stamp: 'CamilloBruni 2/4/2012 14:43' prior: 26685370! yellowButtonActivity: shiftState "Find me or my outermost owner that has items to add to a yellow button menu. shiftState is true if the shift was pressed. Otherwise, build a menu that contains the contributions from myself and my interested submorphs, and present it to the user." | menu | self isWorldMorph ifFalse: [| outerOwner | outerOwner := self outermostOwnerWithYellowButtonMenu. outerOwner ifNil: [^ false]. outerOwner == self ifFalse: [^ outerOwner yellowButtonActivity: shiftState]]. menu := self buildYellowButtonMenu: ActiveHand. menu addTitle: self externalName icon: (self iconOrThumbnailOfSize: 28). menu popUpInWorld: self currentWorld. ^ true! ! !MorphExtension commentStamp: '' prior: 74461053! MorphExtension provides access to extra instance state that is not required in most simple morphs. This allows simple morphs to remain relatively lightweight while still admitting more complex structures as necessary. The otherProperties field takes this policy to the extreme of allowing any number of additional named attributes, albeit at a certain cost in speed and space.! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:41' prior: 26860761! actionMap "Answer the value of actionMap" ^actionMap ifNil: [self valueOfProperty: #actionMap ifAbsent: []]! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:39' prior: 26860946! actionMap: anObject "Set the value of actionMap" actionMap := anObject! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'md 2/27/2006 08:41' prior: 26864607! assureOtherProperties "creates an otherProperties for the receiver if needed" otherProperties ifNil: [self initializeOtherProperties]. ^ otherProperties! ! !MorphExtension methodsFor: 'accessing' stamp: 'di 8/10/1998 12:52' prior: 26861093! balloonText ^ balloonText! ! !MorphExtension methodsFor: 'accessing' stamp: 'di 8/10/1998 12:55' prior: 26861193! balloonText: newValue balloonText := newValue! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 18:10' prior: 26861314! borderStyle "Answer the value of borderStyle" ^borderStyle! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:08' prior: 26861450! borderStyle: anObject "Set the value of borderStyle" borderStyle := anObject! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 18:10' prior: 26861604! clipSubmorphs "Answer the value of clipSubmorphs" ^clipSubmorphs! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:58' prior: 26861746! clipSubmorphs: anObject "Set the value of clipSubmorphs" clipSubmorphs := anObject! ! !MorphExtension methodsFor: 'connectors-copying' stamp: 'StephaneDucasse 4/3/2011 22:27' prior: 26868080! copyWeakly "list of names of properties whose values should be weak-copied when veryDeepCopying a morph. See DeepCopier." ^ #(formerOwner) "add yours to this list" "formerOwner should really be nil at the time of the copy, but this will work just fine."! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 18:10' prior: 26861906! cornerStyle "Answer the value of cornerStyle" ^cornerStyle! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 17:23' prior: 26862042! cornerStyle: anObject "Set the value of cornerStyle" cornerStyle := anObject! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:51' prior: 26862196! eventHandler "answer the receiver's eventHandler" ^ eventHandler ! ! !MorphExtension methodsFor: 'accessing' stamp: 'di 8/10/1998 12:56' prior: 26862337! eventHandler: newValue eventHandler := newValue! ! !MorphExtension methodsFor: 'viewer' stamp: 'di 8/10/1998 14:47' prior: 26873556! externalName ^ externalName! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:57' prior: 26862460! externalName: aString "change the receiver's externalName" externalName := aString! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 18:12' prior: 26862620! fillStyle "Answer the value of fillStyle" ^ fillStyle! ! !MorphExtension methodsFor: 'accessing' stamp: 'gvc 9/11/2009 16:55' prior: 26862751! fillStyle: anObject "Set the value of fillStyle" fillStyle := anObject! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'ClementBera 7/30/2013 11:07' prior: 46541854! hasProperty: aSymbol "Answer whether the receiver has the property named aSymbol" | property | otherProperties ifNil: [^ false]. property := otherProperties at: aSymbol ifAbsent: []. property ifNil: [^ false]. property == false ifTrue: [^ false]. ^ true! ! !MorphExtension methodsFor: 'initialization' stamp: 'StephaneDucasse 7/18/2010 16:28' prior: 26871384! initialize locked := false. visible := true. sticky := false. ! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'marcus.denker 9/17/2008 17:39' prior: 26865227! initializeOtherProperties "private - initializes the receiver's otherProperties" otherProperties := SmallIdentityDictionary new! ! !MorphExtension methodsFor: 'other' stamp: 'alain.plantec 2/6/2009 17:09' prior: 26871533! inspectElement "Create and schedule an Inspector on the otherProperties and the named properties." | key obj | key := UIManager default chooseFrom: self sortedPropertyNames values: self sortedPropertyNames title: 'Inspect which property?' translated. key ifNil: [^ self]. obj := otherProperties at: key ifAbsent: ['nOT a vALuE']. obj = 'nOT a vALuE' ifTrue: [(self perform: key) inspect "named properties"] ifFalse: [obj inspect]! ! !MorphExtension methodsFor: 'other' stamp: 'ClementBera 7/30/2013 11:07' prior: 46542209! isDefault "Return true if the receiver is a default and can be omitted" locked == true ifTrue: [^ false]. visible == false ifTrue: [^ false]. sticky == true ifTrue: [^ false]. balloonText ifNotNil: [^ false]. externalName ifNotNil: [^ false]. eventHandler ifNotNil: [^ false]. otherProperties ifNotNil: [otherProperties isEmpty ifFalse: [^ false]]. ^ true! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 18:10' prior: 26863695! layoutFrame ^layoutFrame! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 16:45' prior: 26863816! layoutFrame: aLayoutFrame layoutFrame := aLayoutFrame! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 18:12' prior: 26863966! layoutPolicy ^layoutPolicy! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 16:47' prior: 26864089! layoutPolicy: aLayoutPolicy layoutPolicy := aLayoutPolicy! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 18:12' prior: 26864245! layoutProperties ^layoutProperties! ! !MorphExtension methodsFor: 'accessing - layout properties' stamp: 'gvc 9/11/2009 16:47' prior: 26864376! layoutProperties: newProperties "Return the current layout properties associated with the receiver" layoutProperties := newProperties! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:38' prior: 26862899! locked "answer whether the receiver is Locked" ^ locked! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:48' prior: 26863031! locked: aBoolean "change the receiver's locked property" locked := aBoolean! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'dgd 2/16/2003 21:04' prior: 26865451! otherProperties "answer the receiver's otherProperties" ^ otherProperties! ! !MorphExtension methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 12/4/2012 19:03' prior: 26872562! printOn: aStream "Append to the argument, aStream, a sequence of characters that identifies the receiver." super printOn: aStream. aStream space; nextPut: $(; print: self identityHash; nextPut: $). locked == true ifTrue: [aStream nextPutAll: ' [locked] ']. visible == false ifTrue: [aStream nextPutAll: '[not visible] ']. sticky == true ifTrue: [aStream nextPutAll: ' [sticky] ']. balloonText ifNotNil: [aStream nextPutAll: ' [balloonText] ']. externalName ifNotNil: [aStream nextPutAll: ' [externalName = ' , externalName , ' ] ']. eventHandler ifNotNil: [aStream nextPutAll: ' [eventHandler = ' , eventHandler printString , '] ']. (otherProperties isNil or: [otherProperties isEmpty ]) ifTrue: [^ self]. aStream nextPutAll: ' [other: '. self otherProperties keysDo: [:aKey | aStream nextPutAll: ' (' , aKey , ' -> ' , (self otherProperties at: aKey) printString , ')']. aStream nextPut: $]! ! !MorphExtension methodsFor: 'connectors-copying' stamp: 'nk 5/1/2004 17:23' prior: 26868423! propertyNamesNotCopied "list of names of properties whose values should be deleted when veryDeepCopying a morph. See DeepCopier." ^ #(connectedConstraints connectionHighlights highlightedTargets) "add yours to this list" ! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'md 2/27/2006 08:37' prior: 26865619! removeOtherProperties "Remove the 'other' properties" otherProperties := nil! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'md 2/27/2006 08:43' prior: 26865790! removeProperty: aSymbol "removes the property named aSymbol if it exists" otherProperties ifNil: [^ self]. otherProperties removeKey: aSymbol ifAbsent: []. otherProperties isEmpty ifTrue: [self removeOtherProperties]! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'dgd 2/16/2003 21:49' prior: 26866105! setProperty: aSymbol toValue: abObject "change the receiver's property named aSymbol to anObject" self assureOtherProperties at: aSymbol put: abObject! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'ClementBera 7/30/2013 11:07' prior: 46542696! sortedPropertyNames "answer the receiver's property names in a sorted way" | props | props := (Array new: 10) writeStream. locked == true ifTrue: [props nextPut: #locked]. visible == false ifTrue: [props nextPut: #visible]. sticky == true ifTrue: [props nextPut: #sticky]. balloonText ifNotNil: [props nextPut: #balloonText]. externalName ifNotNil: [props nextPut: #externalName]. eventHandler ifNotNil: [props nextPut: #eventHandler]. otherProperties ifNotNil: [otherProperties associationsDo: [:a | props nextPut: a key]]. ^props contents sort: [:s1 :s2 | s1 <= s2]! ! !MorphExtension methodsFor: 'accessing' stamp: 'di 8/14/1998 13:07' prior: 26863183! sticky ^ sticky! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:47' prior: 26863274! sticky: aBoolean "change the receiver's sticky property" sticky := aBoolean! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'dgd 2/16/2003 21:00' prior: 26867049! valueOfProperty: aSymbol "answer the value of the receiver's property named aSymbol" ^ self valueOfProperty: aSymbol ifAbsent: []! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'md 2/27/2006 08:43' prior: 26867277! valueOfProperty: aSymbol ifAbsent: aBlock "if the receiver possesses a property of the given name, answer its value. If not then evaluate aBlock and answer the result of this block evaluation" otherProperties ifNil: [^ aBlock value]. ^ otherProperties at: aSymbol ifAbsent: [^ aBlock value]! ! !MorphExtension methodsFor: 'accessing - other properties' stamp: 'dgd 2/16/2003 21:28' prior: 26867671! valueOfProperty: aSymbol ifAbsentPut: aBlock "If the receiver possesses a property of the given name, answer its value. If not, then create a property of the given name, give it the value obtained by evaluating aBlock, then answer that value" ^self assureOtherProperties at: aSymbol ifAbsentPut: aBlock! ! !MorphExtension methodsFor: 'connectors-copying' stamp: 'nk 5/1/2004 17:39' prior: 26868732! veryDeepFixupWith: deepCopier "If target and arguments fields were weakly copied, fix them here. If they were in the tree being copied, fix them up, otherwise point to the originals!!!!" super veryDeepFixupWith: deepCopier. otherProperties ifNil: [ ^self ]. "Properties whose values are only copied weakly replace those values if they were copied via another path" self copyWeakly do: [ :propertyName | otherProperties at: propertyName ifPresent: [ :property | otherProperties at: propertyName put: (deepCopier references at: property ifAbsent: [ property ])]]. ! ! !MorphExtension methodsFor: 'connectors-copying' stamp: 'MarcusDenker 9/7/2010 17:00' prior: 26869404! veryDeepInner: deepCopier "Copy all of my instance variables. Some otherProperties need to be not copied at all, but shared. Their names are given by copyWeakly. Some otherProperties should not be copied or shared. Their names are given by propertyNamesNotCopied. This is special code for the dictionary. See DeepCopier, and veryDeepFixupWith:." | namesOfWeaklyCopiedProperties weaklyCopiedValues | super veryDeepInner: deepCopier. locked := locked veryDeepCopyWith: deepCopier. visible := visible veryDeepCopyWith: deepCopier. sticky := sticky veryDeepCopyWith: deepCopier. balloonText := balloonText veryDeepCopyWith: deepCopier. externalName := externalName veryDeepCopyWith: deepCopier. eventHandler := eventHandler veryDeepCopyWith: deepCopier. "has its own restrictions" fillStyle := fillStyle veryDeepCopyWith: deepCopier. layoutPolicy := layoutPolicy veryDeepCopyWith: deepCopier. layoutFrame := layoutFrame veryDeepCopyWith: deepCopier. layoutProperties := layoutProperties veryDeepCopyWith: deepCopier. borderStyle := borderStyle veryDeepCopyWith: deepCopier. cornerStyle := cornerStyle veryDeepCopyWith: deepCopier. actionMap := actionMap veryDeepCopyWith: deepCopier. clipSubmorphs := clipSubmorphs veryDeepCopyWith: deepCopier. otherProperties ifNil: [ ^self ]. otherProperties := otherProperties copy. self propertyNamesNotCopied do: [ :propName | otherProperties removeKey: propName ifAbsent: [] ]. namesOfWeaklyCopiedProperties := self copyWeakly. weaklyCopiedValues := namesOfWeaklyCopiedProperties collect: [ :propName | otherProperties removeKey: propName ifAbsent: [] ]. "Now copy all the others." otherProperties := otherProperties veryDeepCopyWith: deepCopier. "And replace the weak ones." namesOfWeaklyCopiedProperties with: weaklyCopiedValues do: [ :name :value | value ifNotNil: [ otherProperties at: name put: value ]]. ! ! !MorphExtension methodsFor: 'accessing' stamp: 'dgd 2/16/2003 21:41' prior: 26863427! visible "answer whether the receiver is visible" ^ visible! ! !MorphExtension methodsFor: 'accessing' stamp: 'di 8/10/1998 12:55' prior: 26863561! visible: newValue visible := newValue! ! !MorphicEvent commentStamp: '' prior: 74461493! This class represents the base for all events. Instance variables: stamp The millisecond clock time stamp (based on Time millisecondClock) source If non-nil the hand that generated the event.! !DropEvent commentStamp: 'LaurentLaffont 3/15/2011 20:47' prior: 74461787! I model the event produced when a hand drops a (grabbed) morph into another morph. I know the position of the drop, the dropped morph and the hand that produced me. To handle this event a morph should override one of these methods: #acceptDroppingMorph:event: #justDroppedInto:event: Additionaly, a morph can specify if it wants to accept a dropped morph by overriding #wantsDroppedMorph:event:. Symmetrically, the morph being dropped can specify if it wants to be dropped in another morph by overriding #wantsToBeDroppedInto:. Note that for a successful drop operation both parties need to agree. See HandMorph>>dropMorph:event: for an example of usage. ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 18:33' prior: 20968337! contents ^contents! ! !DropEvent methodsFor: 'initialize' stamp: 'ar 10/10/2000 01:19' prior: 20969126! copyHandlerState: anEvent "Copy the handler state from anEvent. Used for quickly transferring handler information between transformed events." wasHandled := anEvent wasHandled.! ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 19:21' prior: 20968425! cursorPoint "For compatibility with mouse events" ^position! ! !DropEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 18:33' prior: 20969864! isDropEvent ^true! ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 18:33' prior: 20968555! position ^position! ! !DropEvent methodsFor: 'printing' stamp: 'JMM 9/29/2004 13:24' prior: 20969589! printOn: aStream aStream nextPut: $[. aStream nextPutAll: self position printString; space. aStream nextPutAll: self type; space. aStream nextPutAll: self windowIndex printString. aStream nextPut: $].! ! !DropEvent methodsFor: 'initialize' stamp: 'ar 10/10/2000 01:18' prior: 20969375! resetHandlerFields "Reset anything that is used to cross-communicate between two eventual handlers during event dispatch" wasHandled := false.! ! !DropEvent methodsFor: 'dispatching' stamp: 'ar 1/10/2001 21:24' prior: 20968932! sentTo: anObject "Dispatch the receiver into anObject" self type == #dropEvent ifTrue:[^anObject handleDropMorph: self].! ! !DropEvent methodsFor: 'private' stamp: 'ar 9/13/2000 19:23' prior: 20970417! setPosition: pos contents: aMorph hand: aHand position := pos. contents := aMorph. source := aHand. wasHandled := false.! ! !DropEvent methodsFor: 'transforming' stamp: 'ar 10/7/2000 18:28' prior: 20969955! transformBy: aMorphicTransform "Transform the receiver into a local coordinate system." position := aMorphicTransform globalPointToLocal: position.! ! !DropEvent methodsFor: 'transforming' stamp: 'ar 10/7/2000 18:28' prior: 20970177! transformedBy: aMorphicTransform "Return the receiver transformed by the given transform into a local coordinate system." ^self shallowCopy transformBy: aMorphicTransform! ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 18:33' prior: 20968643! type ^#dropEvent! ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 18:44' prior: 20968729! wasHandled ^wasHandled! ! !DropEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 18:44' prior: 20968821! wasHandled: aBool wasHandled := aBool.! ! !MorphicEvent methodsFor: 'comparing' stamp: 'ar 9/13/2000 15:36' prior: 27080598! = anEvent anEvent isMorphicEvent ifFalse:[^false]. ^self type = anEvent type! ! !MorphicEvent methodsFor: 'initialize' stamp: 'ar 10/10/2000 01:18' prior: 27081010! copyHandlerState: anEvent "Copy the handler state from anEvent. Used for quickly transferring handler information between transformed events." ! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 10/10/2000 21:28' prior: 27079188! cursorPoint "Backward compatibility. Use #position instead" ^ self position! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 16:48' prior: 27079337! hand "Return the source that generated the event" ^source! ! !MorphicEvent methodsFor: 'comparing' stamp: 'ar 9/13/2000 15:36' prior: 27080748! hash ^self type hash! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/22/2000 10:36' prior: 27081575! isDraggingEvent ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 19:17' prior: 27081668! isDropEvent ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 19:19' prior: 27081757! isKeyboard ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 10/10/2000 21:27' prior: 27081846! isKeystroke ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:37' prior: 27081935! isMorphicEvent ^true! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 19:19' prior: 27082026! isMouse ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'ar 9/14/2000 18:21' prior: 27082111! isMouseOver ^self type == #mouseOver! ! !MorphicEvent methodsFor: 'testing' stamp: 'JMM 10/6/2004 21:23' prior: 27082219! isMove ^false! ! !MorphicEvent methodsFor: 'testing' stamp: 'JMM 10/6/2004 21:35' prior: 27082304! isWindowEvent ^false! ! !MorphicEvent methodsFor: 'accessing' stamp: 'wiz 12/8/2004 23:13' prior: 27079469! position "Since cursorPoint is defined and refers to position it should be defined here as well" ^ self subclassResponsibility! ! !MorphicEvent methodsFor: 'initialize' stamp: 'ar 10/10/2000 01:18' prior: 27081228! resetHandlerFields "Reset anything that is used to cross-communicate between two eventual handlers during event dispatch"! ! !MorphicEvent methodsFor: 'dispatching' stamp: 'ar 9/15/2000 21:12' prior: 27080844! sentTo: anObject "Dispatch the receiver into anObject" ^anObject handleUnknownEvent: self! ! !MorphicEvent methodsFor: 'private' stamp: 'ar 10/25/2000 21:26' prior: 27082596! setHand: aHand source := aHand! ! !MorphicEvent methodsFor: 'private' stamp: 'ar 10/25/2000 20:53' prior: 27082698! setTimeStamp: stamp timeStamp := stamp.! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:29' prior: 27079670! timeStamp "Return the millisecond clock value at which the event was generated" ^timeStamp ifNil:[timeStamp := Time millisecondClockValue]! ! !MorphicEvent methodsFor: 'transforming' stamp: 'ar 9/13/2000 15:47' prior: 27082401! transformedBy: aMorphicTransform "Return the receiver transformed by the given transform into a local coordinate system." ! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:34' prior: 27079882! type "Return a symbol indicating the type this event." ^self subclassResponsibility! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 10/10/2000 01:19' prior: 27080040! wasHandled "Return true if this event was handled. May be ignored for some types of events." ^false! ! !MorphicEvent methodsFor: 'accessing' stamp: 'ar 10/10/2000 01:20' prior: 27080214! wasHandled: aBool "Determine if this event was handled. May be ignored for some types of events."! ! !MorphicEvent methodsFor: 'accessing' stamp: 'JMM 7/20/2004 22:10' prior: 27080385! windowIndex ^windowIndex! ! !MorphicEvent methodsFor: 'accessing' stamp: 'JMM 7/20/2004 22:10' prior: 27080483! windowIndex: aValue windowIndex := aValue! ! !MorphicEventDispatcher commentStamp: '' prior: 74462520! The class represents a strategy for dispatching events to some immediate child of a morph. It is used by morphs to delegate the somewhat complex action of dispatching events accurately. ! !MorphicEventDispatcher methodsFor: 'dispatching' stamp: 'ar 10/10/2000 01:20' prior: 27084682! dispatchDefault: anEvent with: aMorph "Dispatch the given event. The event will be passed to the front-most visible submorph that contains the position wrt. to the event." | localEvt index child morphs inside | "See if we're fully outside aMorphs bounds" (aMorph fullBounds containsPoint: anEvent position) ifFalse:[^#rejected]. "outside" "Traverse children" index := 1. morphs := aMorph submorphs. inside := false. [index <= morphs size] whileTrue:[ child := morphs at: index. localEvt := anEvent transformedBy: (child transformedFrom: aMorph). (child processEvent: localEvt using: self) == #rejected ifFalse:[ "Not rejected. The event was in some submorph of the receiver" inside := true. localEvt wasHandled ifTrue:[anEvent copyHandlerState: localEvt]. index := morphs size. "break" ]. index := index + 1. ]. "Check for being inside the receiver" inside ifFalse:[inside := aMorph containsPoint: anEvent position event: anEvent]. inside ifTrue:[^aMorph handleEvent: anEvent]. ^#rejected ! ! !MorphicEventDispatcher methodsFor: 'dispatching' stamp: 'ar 10/10/2000 21:13' prior: 27085793! dispatchDropEvent: anEvent with: aMorph "Find the appropriate receiver for the event and let it handle it. The dispatch is similar to the default dispatch with one difference: Morphs are given the chance to reject an entire drop operation. If the operation is rejected, no drop will be executed." | inside index morphs child localEvt | "Try to get out quickly" (aMorph fullBounds containsPoint: anEvent cursorPoint) ifFalse:[^#rejected]. "Give aMorph a chance to repel the dropping morph" aMorph rejectDropEvent: anEvent. anEvent wasHandled ifTrue:[^self]. "Go looking if any of our submorphs wants it" index := 1. inside := false. morphs := aMorph submorphs. [index <= morphs size] whileTrue:[ child := morphs at: index. localEvt := anEvent transformedBy: (child transformedFrom: aMorph). (child processEvent: localEvt using: self) == #rejected ifFalse:[ localEvt wasHandled ifTrue:[^anEvent wasHandled: true]. "done" inside := true. index := morphs size]. "break" index := index + 1. ]. inside ifFalse:[inside := aMorph containsPoint: anEvent cursorPoint event: anEvent]. inside ifTrue:[^aMorph handleEvent: anEvent]. ^#rejected! ! !MorphicEventDispatcher methodsFor: 'dispatching' stamp: 'tbn 3/12/2010 01:53' prior: 27087045! dispatchEvent: anEvent with: aMorph "Dispatch the given event for a morph that has chosen the receiver to dispatch its events. The method implements a shortcut for repeated dispatches of events using the same dispatcher." anEvent type == lastType ifTrue:[^self perform: lastDispatch with: anEvent with: aMorph]. "Otherwise classify" lastType := anEvent type. anEvent isMouse ifTrue:[ anEvent isMouseDown ifTrue:[ lastDispatch := #dispatchMouseDown:with:. ^self dispatchMouseDown: anEvent with: aMorph]]. anEvent type == #dropEvent ifTrue:[ lastDispatch := #dispatchDropEvent:with:. ^self dispatchDropEvent: anEvent with: aMorph]. anEvent isWindowEvent ifTrue:[ lastDispatch := #dispatchWindowEvent:with:. ^self dispatchWindowEvent: anEvent with: aMorph]. lastDispatch := #dispatchDefault:with:. ^self dispatchDefault: anEvent with: aMorph! ! !MorphicEventDispatcher methodsFor: 'dispatching' stamp: 'ar 10/10/2000 21:14' prior: 27087994! dispatchMouseDown: anEvent with: aMorph "Find the appropriate receiver for the event and let it handle it. Default rules: * The top-most chain of visible, unlocked morphs containing the event position will get a chance to handle the event. * When travelling down the hierarchy a prospective handler for the event is installed. This prospective handler can be used by submorphs wishing to handle the mouse down for negotiating who the receiver is. * When travelling up, the prospective handler is always executed. The handler needs to check if the event was handled before as well as checking if somebody else's handler has been installed. * If another handler has been installed but the event was not handled it means that somebody up in the hierarchy wants to handle the event. " | globalPt localEvt index child morphs handler inside lastHandler | "Try to get out quickly" globalPt := anEvent cursorPoint. (aMorph fullBounds containsPoint: globalPt) ifFalse:[^#rejected]. "Install the prospective handler for the receiver" lastHandler := anEvent handler. "in case the mouse wasn't even in the receiver" handler := aMorph handlerForMouseDown: anEvent. handler ifNotNil:[anEvent handler: handler]. "Now give our submorphs a chance to handle the event" index := 1. morphs := aMorph submorphs. [index <= morphs size] whileTrue:[ child := morphs at: index. localEvt := anEvent transformedBy: (child transformedFrom: aMorph). (child processEvent: localEvt using: self) == #rejected ifFalse:[ "Some child did contain the point so we're part of the top-most chain." inside := false. localEvt wasHandled ifTrue:[anEvent copyHandlerState: localEvt]. index := morphs size]. index := index + 1. ]. (inside == false or:[aMorph containsPoint: anEvent cursorPoint event: anEvent]) ifTrue:[ "Receiver is in the top-most unlocked, visible chain." handler ifNotNil:[handler handleEvent: anEvent]. "Note: Re-installing the handler is not really necessary but good style." anEvent handler: lastHandler. ^self ]. "Mouse was not on receiver nor any of its children" anEvent handler: lastHandler. ^#rejected! ! !MorphicEventDispatcher methodsFor: 'dispatching' stamp: 'tbn 3/12/2010 01:53' prior: 27090220! dispatchWindowEvent: anEvent with: aMorph "Host window events do not have a position and are only dispatched to the World" aMorph isWorldMorph ifFalse: [^#rejected]. anEvent wasHandled ifTrue:[^self]. ^aMorph handleEvent: anEvent ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:33' prior: 27206637! handleAsMouseEnter: anEvent | asMouseEnterEvent | asMouseEnterEvent := anEvent asMouseEnter. enteredMorphs := enteredMorphs contents. enteredMorphs reverseDo: [ :anEnteredMorph | self inform: asMouseEnterEvent to: anEnteredMorph originatedFrom: anEvent ifNotFocusedDo: [] ]! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 08:44' prior: 27207025! handleAsMouseLeave: anEvent self keepLeftMorphsOrder. self informMouseLeaveToLeftMorphsUsing: anEvent ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 11:59' prior: 27207235! handleAsMouseOver: anEvent anEvent hand handleEvent: anEvent asMouseOver. ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 11:56' prior: 27207416! hasLeftMorphsChanged ^(leftMorphs isEmpty and: [ enteredMorphs position = 0 ]) not! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:36' prior: 27207604! inform: evt to: aLeftMorph originatedFrom: anEvent ifNotFocusedDo: aBlock ^ (self is: anEvent withFocusOver: aLeftMorph) ifTrue: [ self transform: evt from: anEvent andSendTo: aLeftMorph ] ifFalse: aBlock! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 11:41' prior: 27207919! informMouseLeaveToLeftMorphsUsing: anEvent | asMouseLeaveEvent | asMouseLeaveEvent := anEvent asMouseLeave. leftMorphs do: [ :aLeftMorph | self inform: asMouseLeaveEvent to: aLeftMorph originatedFrom: anEvent ifNotFocusedDo: [ overMorphs nextPut: aLeftMorph ] ]! ! !MouseOverHandler methodsFor: 'initialization' stamp: 'HernanWilkinson 6/4/2009 14:10' prior: 27209517! initialize mouseOverMorphs := #(). self initializeTrackedMorphs ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:29' prior: 27208296! initializeProcessMouseOver leftMorphs := mouseOverMorphs asIdentitySet. overMorphs := WriteStream on: (Array new: leftMorphs size). enteredMorphs := WriteStream on: #()! ! !MouseOverHandler methodsFor: 'initialization' stamp: 'HernanWilkinson 6/12/2009 13:48' prior: 27209680! initializeTrackedMorphs leftMorphs := OrderedCollection new. overMorphs := WriteStream on: #(). enteredMorphs := WriteStream on: #(). ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:37' prior: 27208572! is: anEvent withFocusOver: aMorph | focusedMorph | focusedMorph := anEvent hand mouseFocus. ^ aMorph = focusedMorph or: [ aMorph hasOwner: focusedMorph ]! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:32' prior: 27208836! keepLeftMorphsOrder leftMorphs size > 1 ifTrue: [ leftMorphs := mouseOverMorphs intersection: leftMorphs ] ! ! !MouseOverHandler methodsFor: 'event handling' stamp: 'HernanWilkinson 6/12/2009 13:40' prior: 27205975! noticeMouseOver: aMorph event: anEvent "Remember that the mouse is currently over some morph" leftMorphs remove: aMorph ifAbsent: [ enteredMorphs nextPut: aMorph ]. overMorphs nextPut: aMorph. ! ! !MouseOverHandler methodsFor: 'event handling' stamp: 'HernanWilkinson 6/12/2009 13:51' prior: 27206266! processMouseOver: anEvent self initializeProcessMouseOver. self handleAsMouseOver: anEvent. self hasLeftMorphsChanged ifTrue: [ self handleAsMouseLeave: anEvent. self handleAsMouseEnter: anEvent. self rememberOverList ]. self initializeTrackedMorphs ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 11:58' prior: 27209050! rememberOverList mouseOverMorphs := overMorphs contents. ! ! !MouseOverHandler methodsFor: 'event handling - private' stamp: 'HernanWilkinson 6/12/2009 13:38' prior: 27209213! transform: anEvent from: originalEvent andSendTo: aMorph | transformedEvent | transformedEvent := anEvent transformedBy: (aMorph transformedFrom: originalEvent hand). ^ aMorph handleEvent: transformedEvent! ! !WorldState commentStamp: 'ls 7/10/2003 19:30' prior: 74462772! The state of a Morphic world. (This needs some serious commenting!!!!) The MinCycleLapse variable holds the minimum amount of time that a morphic cycle is allowed to take. If a cycle takes less than this, then interCyclePause: will wait until the full time has been used up.! !WorldState class methodsFor: 'accessing' stamp: 'AlainPlantec 12/6/2009 21:40' prior: 54986104! MinCycleLapse: milliseconds "set the minimum amount of time that may transpire between two calls to doOneCycle" MinCycleLapse := milliseconds ifNotNil: [ milliseconds rounded ].! ! !WorldState class methodsFor: 'deferred message' stamp: 'RAA 7/15/2000 12:58' prior: 44993945! addDeferredUIMessage: valuableObject self deferredUIMessages nextPut: valuableObject. ! ! !WorldState class methodsFor: 'testing os' stamp: 'RAA 8/14/2000 16:40' prior: 44994127! canSurrenderToOS: aBoolean CanSurrenderToOS := aBoolean! ! !WorldState class methodsFor: 'world menu items' stamp: 'SeanDeNigris 8/29/2011 17:33' prior: 54989603! clearHaltOnce Halt disableHaltOnce. World resetWorldMenu! ! !WorldState class methodsFor: 'accessing' stamp: 'AlainPlantec 12/6/2009 21:42' prior: 54986502! debugShowDamage ^ DebugShowDamage ifNil: [DebugShowDamage := false]! ! !WorldState class methodsFor: 'accessing' stamp: 'AlainPlantec 12/6/2009 21:42' prior: 54986656! debugShowDamage: aBoolean DebugShowDamage := aBoolean! ! !WorldState class methodsFor: 'settings' stamp: 'HilaireFernandes 9/9/2010 15:25' prior: 54987741! defaultWorldMenu self desktopMenuTitle: 'World'. self desktopMenuPragmaKeyword: 'worldMenu'.! ! !WorldState class methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 12:48' prior: 44994275! defer: valuableObject self addDeferredUIMessage: valuableObject. ! ! !WorldState class methodsFor: 'deferred message' stamp: 'IgorStasenko 6/22/2012 01:42' prior: 44994451! deferredUIMessages ^DeferredUIMessages ifNil: [DeferredUIMessages := WaitfreeQueue new]. ! ! !WorldState class methodsFor: 'settings' stamp: 'HilaireFernandes 9/9/2010 15:25' prior: 54988112! desktopMenuPragmaKeyword: aString DesktopMenuPragmaKeyword := aString. World resetWorldMenu. ! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 12/19/2009 23:56' prior: 54988452! desktopMenuTitle: aString DesktopMenuTitle := aString! ! !WorldState class methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 01:52' prior: 41886638! discoveredMenuPragmaKeyword ^ DesktopMenuPragmaKeyword ifNil: [DesktopMenuPragmaKeyword := 'worldMenu']! ! !WorldState class methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 02:15' prior: 41886826! discoveredMenuTitle ^ DesktopMenuTitle ifNil: [DesktopMenuTitle := 'World']! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 11:34' prior: 54988592! easySelectingWorld ^ EasySelectingWorld ifNil: [EasySelectingWorld := false]! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 11:34' prior: 54988755! easySelectingWorld: aBoolean EasySelectingWorld := aBoolean! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37972950! helpOn: aBuilder (aBuilder item: #Help) order: 4.0; icon: Smalltalk ui icons smallHelpIcon; withSeparatorAfter ! ! !WorldState class methodsFor: 'initialization' stamp: 'IgorStasenko 6/22/2012 01:45' prior: 54987532! initialize "WorldState initialize" MinCycleLapse := 20. "allows 50 frames per second..." DeferredUIMessages := nil.! ! !WorldState class methodsFor: 'accessing' stamp: 'RAA 7/23/2000 17:28' prior: 44994635! lastCycleTime ^LastCycleTime! ! !WorldState class methodsFor: 'world menu items' stamp: 'IgorStasenko 4/26/2011 16:57' prior: 54989979! mostUsedToolsOn: aBuilder (aBuilder group: #MostUsedTools) withSeparatorAfter; order: 0; with: [ (aBuilder item: #'System Browser') action: [Smalltalk tools openClassBrowser]; icon: Smalltalk tools browser taskbarIcon. (aBuilder item: #Workspace) action: [Smalltalk tools openWorkspace]; icon: Smalltalk tools workspace taskbarIcon. Smalltalk globals at: #TestRunner ifPresent: [ :class | (aBuilder item: #'Test Runner') action: [Smalltalk tools openTestRunner]; icon: class taskbarIcon. ]. (aBuilder item: #'Monticello Browser') action: [Smalltalk tools openMonticelloBrowser]; icon: Smalltalk tools monticelloBrowser taskbarIcon]! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37973200! quitItemsOn: aBuilder (aBuilder group: #QuitPharo) order: 9999; with: [ (aBuilder item: #'Save') target: self; selector: #saveSession; help: 'save the current version of the image on disk'; icon: Smalltalk ui icons smallSaveIcon. (aBuilder item: #'Save as...') target: self; selector: #saveAs; help: 'save the current version of the image on disk under a new name.'; icon: Smalltalk ui icons smallSaveAsIcon. (aBuilder item: #'Save and quit') target: self; selector: #saveAndQuit; help: 'save the current image on disk, and quit Pharo.'; icon: Smalltalk ui icons smallQuitIcon. (aBuilder item: #'Quit') target: self; selector: #quitSession; help: 'quit Pharo.'; icon: Smalltalk ui icons smallQuitIcon ]! ! !WorldState class methodsFor: 'world menu items' stamp: 'BenjaminVanRyseghem 9/25/2013 12:24' prior: 68727048! quitSession | save | Smalltalk tools userManager canSaveImage ifFalse: [ save := false ] ifTrue: [ save := (self confirm: 'Save changes before quitting?' translated orCancel: [ ^ self ]) ]. Cursor write showWhile: [ Smalltalk snapshot: save andQuit: true. ]! ! !WorldState class methodsFor: 'world menu items' stamp: 'GuillermoPolito 3/16/2012 11:54' prior: 54992192! saveAndQuit Cursor write showWhile: [ Smalltalk snapshot: true andQuit: true ]! ! !WorldState class methodsFor: 'world menu items' stamp: 'StephaneDucasse 6/11/2012 18:12' prior: 54992370! saveAs Smalltalk saveAs.! ! !WorldState class methodsFor: 'world menu items' stamp: '' prior: 54992450! saveSession Cursor write showWhile: [ Smalltalk snapshot: true andQuit: false. ]! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37974110! screenShotCommandOn: aBuilder (aBuilder item: #Screenshot) parent: #Tools; target: World; selector: #makeAScreenshot; label: 'Screenshot' translated; icon: Smalltalk ui icons smallScreenshotIcon! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 14:02' prior: 54988901! serverMode ^ ServerMode ifNil: [ServerMode := false]! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 14:07' prior: 54989040! serverMode: aBoolean (aBoolean = true or: [aBoolean = false or: [aBoolean isNil]]) ifTrue: [ServerMode := aBoolean]! ! !WorldState class methodsFor: 'world menu items' stamp: 'SeanDeNigris 8/29/2011 17:30' prior: 54992942! setHaltOnce Halt enableHaltOnce. World resetWorldMenu! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 4/15/2010 15:59' prior: 54989243! showUpdateOptionInWorldMenu ^ ShowUpdateOptionInWorldMenu ifNil: [ShowUpdateOptionInWorldMenu := true]! ! !WorldState class methodsFor: 'settings' stamp: 'AlainPlantec 4/15/2010 15:59' prior: 54989431! showUpdateOptionInWorldMenu: aBoolean ShowUpdateOptionInWorldMenu := aBoolean! ! !WorldState class methodsFor: 'world menu items' stamp: 'IgorStasenko 1/2/2012 19:09' prior: 54993089! startMessageTally (self confirm: 'MessageTally will start now, and stop when the cursor goes to the top of the screen' translated) ifTrue: [TimeProfiler spyAllOn: [[World activeHand position y > 0] whileTrue: [World doOneCycle]]]! ! !WorldState class methodsFor: 'world menu items' stamp: 'IgorStasenko 1/2/2012 19:10' prior: 54993420! startThenBrowseMessageTally "Tally only the UI process" (self confirm: 'MessageTally the UI process until the mouse pointer goes to the top of the screen') ifTrue: [TimeProfiler onBlock: [[World activeHand position y > 10] whileTrue: [World doOneCycle]]]! ! !WorldState class methodsFor: 'world menu items' stamp: 'MarcusDenker 10/5/2013 17:41' prior: 69845672! systemOn: aBuilder (aBuilder item: #System) order: 3.0; icon: Smalltalk ui icons smallConfigurationIcon; with: [ (aBuilder item: #'About...') order: 0; icon: Smalltalk ui icons smallLanguageIcon; action: [Smalltalk aboutThisSystem]. (aBuilder item: #'Software update') order: 2; icon: Smalltalk ui icons smallUpdateIcon; precondition: [self showUpdateOptionInWorldMenu]; action: [ UpdateStreamer new updateFromServer ]; help: 'Load latest code updates via the internet'; withSeparatorAfter. (aBuilder item: #'Start profiling all Processes') action: [self startMessageTally]. (aBuilder item: #'Start profiling UI ') action: [self startThenBrowseMessageTally]. (aBuilder item: #'Space left') action: [Smalltalk informSpaceLeftAfterGarbageCollection]. (aBuilder item: #'Do Image Cleanup') action: [Smalltalk cleanUp: true ]; withSeparatorAfter. (aBuilder item: #'Start drawing again') action: [World resumeAfterDrawError]. (aBuilder item: #'Start stepping again') action: [World resumeAfterStepError]; withSeparatorAfter. (aBuilder item: #'Restore display (r)') action: [World restoreMorphicDisplay]. (aBuilder item: #'Clear all breakpoints') action: [BreakpointManager clear]. Halt isHaltOnceEnabled ifTrue: [(aBuilder item: 'Disable halt/inspect once') action: [self clearHaltOnce]] ifFalse: [(aBuilder item: 'Enable halt/inspect once') action: [self setHaltOnce]]].! ! !WorldState class methodsFor: 'accessing' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 37975995! theme ^ Smalltalk ui theme! ! !WorldState class methodsFor: 'world menu items' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37976134! windowsOn: aBuilder (aBuilder item: #Windows) order: 4.0; withSeparatorAfter ; icon: Smalltalk ui icons smallWindowIcon; with: [ (aBuilder item: # 'Collapse all windows') action: [World collapseAll]; help: 'Reduce all open windows to collapsed forms that only show titles' translated. (aBuilder item: # 'Expand all windows') action: [World expandAll]; help: 'Expand all collapsed windows back to their expanded forms' translated. (aBuilder item: # 'Fit all windows') action: [World fitAll]; help: 'Fit all open windows as visible in World' translated. (aBuilder item: #'Close all debuggers') action: [Smalltalk tools debugger closeAllDebuggers]. (aBuilder item: # 'Send top window to back (\)') action: [SystemWindow sendTopWindowToBack]; help: 'Make the topmost window become the backmost one, and activate the window just beneath it.' translated. (aBuilder item: # 'Move windows onscreen') action: [World bringWindowsFullOnscreen]; help: 'Make all windows fully visible on the screen' translated. (aBuilder item: # 'Delete unchanged windows') action: [World closeUnchangedWindows]; help: 'Deletes all windows that do not have unsaved text edits.' translated. (aBuilder item: # 'Delete all windows discarding edits') action: [World closeAllWindowsDiscardingChanges]; help: 'Deletes all windows even if they have unsaved text edits.' translated. ]! ! !WorldState methodsFor: 'hands' stamp: 'ar 1/22/2001 14:26' prior: 54966473! activeHand ^ ActiveHand! ! !WorldState methodsFor: 'alarms' stamp: 'ar 9/11/2000 16:43' prior: 54963480! addAlarm: aSelector withArguments: argArray for: aTarget at: scheduledTime "Add a new alarm with the given set of parameters" self alarms add: (MorphicAlarm scheduledAt: scheduledTime receiver: aTarget selector: aSelector arguments: argArray).! ! !WorldState methodsFor: 'hands' stamp: 'ar 10/26/2000 14:51' prior: 54966565! addHand: aHandMorph "Add the given hand to the list of hands for this world." hands := (hands copyWithout: aHandMorph) copyWith: aHandMorph. ! ! !WorldState methodsFor: 'alarms' stamp: 'ar 9/11/2000 17:11' prior: 54963808! adjustAlarmTimes: nowTime "Adjust the alarm times after some clock weirdness (such as roll-over, image-startup etc)" | deltaTime | deltaTime := nowTime - lastAlarmTime. self alarms do:[:alarm| alarm scheduledTime: alarm scheduledTime + deltaTime].! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:23' prior: 54969666! adjustWakeupTimes: now "Fix the wakeup times in my step list. This is necessary when this world has been restarted after a pause, say because some other view had control, after a snapshot, or because the millisecond clock has wrapped around. (The latter is a rare occurence with a 32-bit clock!!)" | deltaTime | deltaTime := now - lastStepTime. stepList do:[:entry| entry scheduledTime: entry scheduledTime + deltaTime]. lastStepTime := now. ! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 15:22' prior: 54970183! adjustWakeupTimesIfNecessary "Fix the wakeup times in my step list if necessary. This is needed after a snapshot, after a long pause (say because some other view had control or because the user was selecting from an MVC-style menu) or when the millisecond clock wraps around (a very rare occurence with a 32-bit clock!!)." | now | now := Time millisecondClockValue. ((now < lastStepTime) or: [(now - lastStepTime) > 5000]) ifTrue: [self adjustWakeupTimes: now]. "clock slipped" ! ! !WorldState methodsFor: 'alarms' stamp: 'nice 4/16/2009 19:03' prior: 54964128! alarmSortBlock ^[ :alarm1 :alarm2 | alarm1 scheduledTime < alarm2 scheduledTime. ]! ! !WorldState methodsFor: 'alarms' stamp: 'RAA 1/5/2001 10:46' prior: 54964282! alarms ^alarms ifNil: [alarms := Heap sortBlock: self alarmSortBlock]! ! !WorldState methodsFor: 'canvas' stamp: 'stephane.ducasse 9/25/2008 18:10' prior: 54965269! assuredCanvas (canvas isNil or: [(canvas extent ~= viewBox extent) or: [canvas form depth ~= Display depth]]) ifTrue: ["allocate a new offscreen canvas the size of the window" self canvas: (Display defaultCanvasClass extent: viewBox extent)]. ^ self canvas! ! !WorldState methodsFor: 'canvas' stamp: 'di 6/7/1999 17:44' prior: 54965602! canvas ^ canvas! ! !WorldState methodsFor: 'canvas' stamp: 'ClementBera 7/26/2013 17:06' prior: 46496904! canvas: x canvas := x. damageRecorder ifNil: [damageRecorder := DamageRecorder new] ifNotNil: [damageRecorder doFullRepaint]! ! !WorldState methodsFor: 'update cycle' stamp: 'RAA 5/24/2000 13:13' prior: 54975253! checkIfUpdateNeeded damageRecorder updateIsNeeded ifTrue: [^true]. hands do: [:h | (h hasChanged and: [h needsToBeDrawn]) ifTrue: [^true]]. ^false "display is already up-to-date" ! ! !WorldState methodsFor: 'stepping' stamp: 'AlainPlantec 10/17/2009 19:02' prior: 54970750! cleanseStepListForWorld: aWorld "Remove morphs from the step list that are not in this World" | deletions morphToStep | deletions := nil. stepList do: [:entry | morphToStep := entry receiver. morphToStep world == aWorld ifFalse:[ deletions ifNil: [deletions := OrderedCollection new]. deletions addLast: entry]]. deletions ifNotNil:[ deletions do: [:entry| self stopStepping: entry receiver]]. self alarms copy do:[:entry| morphToStep := entry receiver. (morphToStep isMorph and:[morphToStep world == aWorld]) ifFalse:[self removeAlarm: entry selector for: entry receiver]].! ! !WorldState methodsFor: 'object filein' stamp: 'RAA 1/5/2001 10:51' prior: 54968309! convertAlarms alarms ifNotNil: [alarms sortBlock: self alarmSortBlock]. "ensure cleaner block" ! ! !WorldState methodsFor: 'object filein' stamp: 'nice 1/5/2010 15:59' prior: 54968483! convertStepList "Convert the old-style step list (an Array of Arrays) into the new-style StepMessage heap" | newList | (stepList isKindOf: Heap) ifTrue: [^stepList sortBlock: self stepListSortBlock "ensure that we have a cleaner block"]. newList := Heap sortBlock: self stepListSortBlock. stepList do: [:entry | | wakeupTime morphToStep | wakeupTime := entry second. morphToStep := entry first. newList add: (StepMessage scheduledAt: wakeupTime stepTime: nil receiver: morphToStep selector: #stepAt: arguments: nil)]. stepList := newList! ! !WorldState methodsFor: 'deferred message' stamp: 'AlainPlantec 7/9/2013 12:49' prior: 44994750! defer: aValuable self class defer: aValuable! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/14/2013 02:53' prior: 41886990! discoveredMenuOn: aBuilder ^ aBuilder menuEntitled: self discoveredMenuTitle! ! !WorldState methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 01:52' prior: 41887146! discoveredMenuPragmaKeyword ^ self class discoveredMenuPragmaKeyword! ! !WorldState methodsFor: 'settings' stamp: 'SeanDeNigris 6/14/2013 02:15' prior: 41887293! discoveredMenuTitle ^ self class discoveredMenuTitle! ! !WorldState methodsFor: 'update cycle' stamp: 'nice 1/5/2010 15:59' prior: 54975511! displayWorld: aWorld submorphs: submorphs "Update this world's display." | deferredUpdateMode handsToDraw allDamage | submorphs do: [:m | m fullBounds]. "force re-layout if needed" self checkIfUpdateNeeded ifFalse: [^ self]. "display is already up-to-date" deferredUpdateMode := self doDeferredUpdatingFor: aWorld. deferredUpdateMode ifFalse: [self assuredCanvas]. canvas roundCornersOf: aWorld during:[ | worldDamageRects handDamageRects | worldDamageRects := self drawWorld: aWorld submorphs: submorphs invalidAreasOn: canvas. "repair world's damage on canvas" "self handsDo:[:h| h noticeDamageRects: worldDamageRects]." handsToDraw := self selectHandsToDrawForDamage: worldDamageRects. handDamageRects := handsToDraw collect: [:h | h savePatchFrom: canvas]. allDamage := worldDamageRects, handDamageRects. handsToDraw reverseDo: [:h | canvas fullDrawMorph: h]. "draw hands onto world canvas" ]. "*make this true to flash damaged areas for testing*" self class debugShowDamage ifTrue: [aWorld flashRects: allDamage color: Color black]. canvas finish. "quickly copy altered rects of canvas to Display:" deferredUpdateMode ifTrue: [self forceDamageToScreen: allDamage] ifFalse: [canvas showAt: aWorld viewBox origin invalidRects: allDamage]. handsToDraw do: [:h | h restoreSavedPatchOn: canvas]. "restore world canvas under hands" Display deferUpdates: false; forceDisplayUpdate. ! ! !WorldState methodsFor: 'update cycle' stamp: 'ar 6/28/2003 01:07' prior: 54977005! displayWorldSafely: aWorld "Update this world's display and keep track of errors during draw methods." [aWorld displayWorld] ifError: [:err :rcvr | "Handle a drawing error" | errCtx errMorph | errCtx := thisContext. [ errCtx := errCtx sender. "Search the sender chain to find the morph causing the problem" [errCtx notNil and:[(errCtx receiver isMorph) not]] whileTrue:[errCtx := errCtx sender]. "If we're at the root of the context chain then we have a fatal drawing problem" errCtx ifNil:[^self handleFatalDrawingError: err]. errMorph := errCtx receiver. "If the morph causing the problem has already the #drawError flag set, then search for the next morph above in the caller chain." errMorph hasProperty: #errorOnDraw ] whileTrue. errMorph setProperty: #errorOnDraw toValue: true. "Install the old error handler, so we can re-raise the error" rcvr error: err. ].! ! !WorldState methodsFor: 'update cycle' stamp: 'MarcusDenker 7/9/2012 15:28' prior: 54978005! doDeferredUpdatingFor: aWorld "If this platform supports deferred updates, then make my canvas be the Display (or a rectangular portion of it), set the Display to deferred update mode, and answer true. Otherwise, do nothing and answer false. One can set the class variable DisableDeferredUpdates to true to completely disable the deferred updating feature." (Display deferUpdates: true) ifNil: [^ false]. "deferred updates not supported" (canvas notNil and: [canvas form == Display]) ifFalse: [ aWorld viewBox: Display boundingBox. "do first since it may clear canvas" self canvas: (Display getCanvas copyClipRect: Display boundingBox)]. ^ true ! ! !WorldState methodsFor: 'canvas' stamp: 'RAA 5/25/2000 15:12' prior: 54965893! doFullRepaint damageRecorder doFullRepaint ! ! !WorldState methodsFor: 'update cycle' stamp: 'adrian_lienhard 7/18/2009 15:30' prior: 54978758! doOneCycleFor: aWorld "Do one cycle of the interaction loop. This method is called repeatedly when the world is running. This is a moderately private method; a better alternative is usually either to wait for events or to check the state of things from #step methods." self interCyclePause: MinCycleLapse. self doOneCycleNowFor: aWorld.! ! !WorldState methodsFor: 'update cycle' stamp: 'md 4/30/2008 16:33' prior: 54979171! doOneCycleNowFor: aWorld "Immediately do one cycle of the interaction loop. This should not be called directly, but only via doOneCycleFor:" DisplayScreen checkForNewScreenSize. "process user input events" LastCycleTime := Time millisecondClockValue. self handsDo: [:h | ActiveHand := h. h processEvents. ActiveHand := nil ]. "the default is the primary hand" ActiveHand := self hands first. aWorld runStepMethods. "there are currently some variations here" self displayWorldSafely: aWorld.! ! !WorldState methodsFor: 'update cycle' stamp: 'ar 1/22/2001 14:26' prior: 54979756! doOneSubCycleFor: aWorld "Like doOneCycle, but preserves activeHand." | currentHand | currentHand := ActiveHand. self doOneCycleFor: aWorld. ActiveHand := currentHand! ! !WorldState methodsFor: 'update cycle' stamp: 'nice 1/5/2010 15:59' prior: 54980002! drawWorld: aWorld submorphs: submorphs invalidAreasOn: aCanvas "Redraw the damaged areas of the given canvas and clear the damage list. Return a collection of the areas that were redrawn." | rectList n morphs rects validList | rectList := damageRecorder invalidRectsFullBounds: aWorld viewBox. "sort by areas to draw largest portions first" rectList := rectList asArray sort: [:r1 :r2 | r1 area > r2 area]. damageRecorder reset. n := submorphs size. morphs := OrderedCollection new: n * 2. rects := OrderedCollection new: n * 2. validList := OrderedCollection new: n * 2. rectList do: [:dirtyRect | dirtyRect allAreasOutsideList: validList do: [:r | | mm rect i c remnantIntersects remnants rectToFill | "Experimental top-down drawing -- Traverses top to bottom, stopping if the entire area is filled. If only a single rectangle remains, then continue with the reduced rectangle." rectToFill := r. remnants := OrderedCollection with: r. i := 1. [remnants isEmpty or: [i > n]] whileFalse: [mm := submorphs at: i. ((remnantIntersects := remnants select: [:each | (mm fullBounds intersects: each)]) notEmpty and: [mm visible]) ifTrue: [morphs addLast: mm. rects addLast: (Rectangle merging: (remnantIntersects collect: [:each | mm fullBounds intersect: each])). remnants removeAll: remnantIntersects. remnantIntersects do: [:eachIntersect | remnants addAll: (mm areasRemainingToFill: eachIntersect)]. remnants size = 1 ifTrue: [rectToFill := remnants first]. remnants isEmpty ifTrue: [rectToFill := nil]]. i := i + 1]. "Now paint from bottom to top, but using the reduced rectangles." rectToFill ifNotNil: [aWorld drawOn: (c := aCanvas copyClipRect: rectToFill)]. [morphs isEmpty] whileFalse: [(rect := rects removeLast) == rectToFill ifFalse: [c := aCanvas copyClipRect: (rectToFill := rect)]. c fullDrawMorph: morphs removeLast]. morphs reset. rects reset. validList add: r]]. ^validList! ! !WorldState methodsFor: 'worldmenu building' stamp: 'MarcusDenker 9/29/2013 09:00' prior: 68862747! fallbackMenuOn: menu "Build the menu that is put up if something is going wrong with the menubuilder" menu addTitle: 'Fallback menu'. menu commandKeyHandler: self. menu addLine. menu defaultTarget: Smalltalk tools; addList: Smalltalk tools menuItems. menu addLine. menu add: 'Save' target: self class selector: #saveSession. menu add: 'Save as...' target: self class selector: #saveAs. menu add: 'Save and quit' target: self class selector: #saveAndQuit. menu add: 'Quit' target: self class selector: #quitSession.! ! !WorldState methodsFor: 'update cycle' stamp: 'stephane.ducasse 9/25/2008 18:11' prior: 54982197! forceDamageToScreen: allDamage Display forceDamageToScreen: allDamage. ! ! !WorldState methodsFor: 'update cycle' stamp: 'alain.plantec 6/2/2008 08:45' prior: 54982354! handleFatalDrawingError: errMsg "Handle a fatal drawing error." Display deferUpdates: false. "Just in case" self primitiveError: errMsg. "Hm... we should jump into a 'safe' worldState here, but how do we find it?!!"! ! !WorldState methodsFor: 'hands' stamp: 'di 6/7/1999 17:40' prior: 54966774! hands ^ hands! ! !WorldState methodsFor: 'hands' stamp: 'RAA 5/24/2000 10:13' prior: 54966856! handsDo: aBlock ^ hands do: aBlock! ! !WorldState methodsFor: 'hands' stamp: 'RAA 5/24/2000 12:09' prior: 54966959! handsReverseDo: aBlock ^ hands reverseDo: aBlock! ! !WorldState methodsFor: 'initialization' stamp: 'StephaneDucasse 7/2/2013 16:48' prior: 43528398! initialize super initialize. hands := Array new. damageRecorder:= DamageRecorder new. stepList := Heap sortBlock: self stepListSortBlock. lastStepTime := 0. lastAlarmTime := 0. self viewBox: Display boundingBox! ! !WorldState methodsFor: 'update cycle' stamp: 'AlainPlantec 1/7/2010 22:54' prior: 54982656! interCyclePause: milliSecs "delay enough that the previous cycle plus the amount of delay will equal milliSecs. If the cycle is already expensive, then no delay occurs. However, if the system is idly waiting for interaction from the user, the method will delay for a proportionally long time and cause the overall CPU usage of Squeak to be low. If self serverMode returns true then, always do a complete delay of 50ms, independant of my argument. This prevents the freezing problem described in Mantis #6581" | currentTime wait | self serverMode ifFalse: [ (lastCycleTime notNil and: [CanSurrenderToOS ~~ false]) ifTrue: [ currentTime := Time millisecondClockValue. wait := lastCycleTime + milliSecs - currentTime. (wait > 0 and: [ wait <= milliSecs ] ) ifTrue: [ (Delay forMilliseconds: wait) wait ] ] ] ifTrue: [ (Delay forMilliseconds: 50) wait ]. lastCycleTime := Time millisecondClockValue. CanSurrenderToOS := true.! ! !WorldState methodsFor: 'settings' stamp: 'AlainPlantec 12/10/2009 11:37' prior: 54969432! isEasySelecting ^ self class easySelectingWorld! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:09' prior: 54971426! isStepping: aMorph "Return true if the given morph is in the step list." lastStepMessage ifNotNil:[(lastStepMessage receiver == aMorph) ifTrue:[^true]]. stepList do:[:entry| entry receiver == aMorph ifTrue:[^true]]. ^ false! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:09' prior: 54971723! isStepping: aMorph selector: aSelector "Return true if the given morph is in the step list." lastStepMessage ifNotNil:[ (lastStepMessage receiver == aMorph and:[lastStepMessage selector == aSelector]) ifTrue:[^true]]. stepList do:[:entry| (entry receiver == aMorph and:[entry selector == aSelector]) ifTrue:[^true]]. ^ false! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:05' prior: 54972126! listOfSteppingMorphs ^stepList collect:[:entry| entry receiver]. ! ! !WorldState methodsFor: 'worldmenu building' stamp: 'SeanDeNigris 6/14/2013 03:09' prior: 41888090! menuBuilder ^ menuBuilder ifNil: [menuBuilder := PragmaMenuBuilder pragmaKeyword: self discoveredMenuPragmaKeyword model: self ]! ! !WorldState methodsFor: 'canvas' stamp: 'ar 1/30/2001 23:25' prior: 54966005! recordDamagedRect: damageRect damageRecorder ifNotNil: [damageRecorder recordInvalidRect: damageRect truncated] ! ! !WorldState methodsFor: 'alarms' stamp: 'ClementBera 7/26/2013 17:07' prior: 46497127! removeAlarm: aSelector for: aTarget "Remove the alarm with the given selector" | alarm | alarm := self alarms detect: [:any | any receiver == aTarget and: [any selector == aSelector]] ifNone: [nil]. alarm ifNotNil: [self alarms remove: alarm]! ! !WorldState methodsFor: 'hands' stamp: 'ar 1/22/2001 14:26' prior: 54967075! removeHand: aHandMorph "Remove the given hand from the list of hands for this world." (hands includes: aHandMorph) ifFalse: [^self]. hands := hands copyWithout: aHandMorph. ActiveHand == aHandMorph ifTrue: [ActiveHand := nil]. ! ! !WorldState methodsFor: 'canvas' stamp: 'RAA 5/25/2000 15:10' prior: 54966187! resetDamageRecorder damageRecorder reset ! ! !WorldState methodsFor: 'worldmenu building' stamp: 'HilaireFernandes 9/9/2010 14:55' prior: 54985400! resetWorldMenu menuBuilder ifNotNil: [menuBuilder reset. menuBuilder := nil]! ! !WorldState methodsFor: 'stepping' stamp: 'dgd 2/22/2003 13:31' prior: 54972262! runLocalStepMethodsIn: aWorld "Run morph 'step' methods (LOCAL TO THIS WORLD) whose time has come. Purge any morphs that are no longer in this world. ar 3/13/1999: Remove buggy morphs from the step list so that they don't raise repeated errors." | now morphToStep stepTime priorWorld | now := Time millisecondClockValue. priorWorld := ActiveWorld. ActiveWorld := aWorld. self triggerAlarmsBefore: now. stepList isEmpty ifTrue: [ActiveWorld := priorWorld. ^self]. (now < lastStepTime or: [now - lastStepTime > 5000]) ifTrue: [self adjustWakeupTimes: now]. "clock slipped" [stepList isEmpty not and: [stepList first scheduledTime < now]] whileTrue: [lastStepMessage := stepList removeFirst. morphToStep := lastStepMessage receiver. (morphToStep shouldGetStepsFrom: aWorld) ifTrue: [lastStepMessage value: now. lastStepMessage ifNotNil: [stepTime := lastStepMessage stepTime ifNil: [morphToStep stepTime]. lastStepMessage scheduledTime: now + (stepTime max: 1). stepList add: lastStepMessage]]. lastStepMessage := nil]. lastStepTime := now. ActiveWorld := priorWorld! ! !WorldState methodsFor: 'stepping' stamp: 'StephaneDucasse 1/31/2011 16:51' prior: 54973488! runStepMethodsIn: aWorld "Perform periodic activity inbetween event cycles" | queue nextInQueue| "If available dispatch some deferred UI Message" queue := self class deferredUIMessages. [(nextInQueue := queue nextOrNil) isNil] whileFalse: [ nextInQueue value]. self runLocalStepMethodsIn: aWorld.! ! !WorldState methodsFor: 'hands' stamp: 'nice 1/5/2010 15:59' prior: 54967374! selectHandsToDrawForDamage: damageList "Select the set of hands that must be redrawn because either (a) the hand itself has changed or (b) the hand intersects some damage rectangle." | result | result := OrderedCollection new. hands do: [:h | | hBnds | h needsToBeDrawn ifTrue: [ h hasChanged ifTrue: [result add: h] ifFalse: [ hBnds := h fullBounds. (damageList detect: [:r | r intersects: hBnds] ifNone: [nil]) ifNotNil: [result add: h]]]]. ^ result ! ! !WorldState methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 14:01' prior: 54969560! serverMode ^ self class serverMode! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:36' prior: 54973864! startStepping: aMorph at: scheduledTime selector: aSelector arguments: args stepTime: stepTime "Add the given morph to the step list. Do nothing if it is already being stepped." self stopStepping: aMorph selector: aSelector. self adjustWakeupTimesIfNecessary. stepList add:( StepMessage scheduledAt: scheduledTime stepTime: stepTime receiver: aMorph selector: aSelector arguments: args)! ! !WorldState methodsFor: 'initialization' stamp: 'sw 9/5/2000 06:39' prior: 54968205! stepListSize ^ stepList size! ! !WorldState methodsFor: 'stepping' stamp: 'nice 4/16/2009 19:03' prior: 54974344! stepListSortBlock ^[ :stepMsg1 :stepMsg2 | stepMsg1 scheduledTime <= stepMsg2 scheduledTime ]! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:10' prior: 54974512! stopStepping: aMorph "Remove the given morph from the step list." lastStepMessage ifNotNil:[ (lastStepMessage receiver == aMorph) ifTrue:[lastStepMessage := nil]]. stepList removeAll: (stepList select:[:stepMsg| stepMsg receiver == aMorph]). ! ! !WorldState methodsFor: 'stepping' stamp: 'ar 10/22/2000 16:10' prior: 54974829! stopStepping: aMorph selector: aSelector "Remove the given morph from the step list." lastStepMessage ifNotNil:[ (lastStepMessage receiver == aMorph and:[lastStepMessage selector == aSelector]) ifTrue:[lastStepMessage := nil]]. stepList removeAll: (stepList select:[:stepMsg| stepMsg receiver == aMorph and:[stepMsg selector == aSelector]]).! ! !WorldState methodsFor: 'alarms' stamp: 'ar 10/22/2000 16:55' prior: 54964751! triggerAlarmsBefore: nowTime "Trigger all pending alarms that are to be executed before nowTime." | pending | lastAlarmTime ifNil:[lastAlarmTime := nowTime]. (nowTime < lastAlarmTime or:[nowTime - lastAlarmTime > 10000]) ifTrue:[self adjustAlarmTimes: nowTime]. pending := self alarms. [pending isEmpty not and:[pending first scheduledTime < nowTime]] whileTrue:[pending removeFirst value: nowTime]. lastAlarmTime := nowTime.! ! !WorldState methodsFor: 'canvas' stamp: 'di 6/7/1999 17:44' prior: 54966296! viewBox ^ viewBox! ! !WorldState methodsFor: 'canvas' stamp: 'di 6/7/1999 17:58' prior: 54966381! viewBox: x viewBox := x! ! !WorldState methodsFor: 'worldmenu building' stamp: 'MarcusDenker 6/28/2013 12:48' prior: 41902910! worldMenu ^self menuBuilder menuEntitled: self discoveredMenuTitle.! ! !HandMorph commentStamp: '' prior: 74463109! The cursor may be thought of as the HandMorph. The hand's submorphs hold anything being carried by dragging. There is some minimal support for multiple hands in the same world.! !HandMorph class methodsFor: 'utilities' stamp: 'sma 4/30/2000 10:34' prior: 23263731! attach: aMorph "Attach aMorph the current world's primary hand." self currentWorld primaryHand attachMorph: aMorph! ! !HandMorph class methodsFor: 'accessing' stamp: '' prior: 23263146! doubleClickTime ^ DoubleClickTime ! ! !HandMorph class methodsFor: 'accessing' stamp: '' prior: 23263229! doubleClickTime: milliseconds DoubleClickTime := milliseconds. ! ! !HandMorph class methodsFor: 'class initialization' stamp: 'kfr 7/13/2003 14:15' prior: 23263382! initialize "HandMorph initialize" PasteBuffer := nil. DoubleClickTime := 350. NormalCursor := CursorWithMask normal asCursorForm. ! ! !HandMorph class methodsFor: 'utilities' stamp: 'MarcusDenker 7/28/2013 13:03' prior: 46244481! showEvents: aBool "HandMorph showEvents: true" "HandMorph showEvents: false" ShowEvents := aBool. aBool ifFalse: [ World invalidRect: (0@0 extent: 500@120) ].! ! !HandMorph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:43' prior: 41633411! upperHandLimit ^ UpperHandLimit ifNil: [ UpperHandLimit := 0 ]! ! !HandMorph class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:45' prior: 41633566! upperHandLimit: anInteger UpperHandLimit := anInteger! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/24/2000 20:43' prior: 23248198! addEventListener: anObject "Make anObject a listener for all events. All events will be reported to the object." self eventListeners: (self addListener: anObject to: self eventListeners)! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/24/2000 20:40' prior: 23248456! addListener: anObject to: aListenerGroup "Add anObject to the given listener group. Return the new group." | listeners | listeners := aListenerGroup. (listeners notNil and:[listeners includes: anObject]) ifFalse:[ listeners ifNil:[listeners := WeakArray with: anObject] ifNotNil:[listeners := listeners copyWith: anObject]]. listeners := listeners copyWithout: nil. "obsolete entries" ^listeners! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/24/2000 20:42' prior: 23248935! addMouseListener: anObject "Make anObject a listener for mouse events. All mouse events will be reported to the object." self mouseListeners: (self addListener: anObject to: self mouseListeners)! ! !HandMorph methodsFor: 'accessing' stamp: 'tk 10/20/2004 15:54' prior: 23218883! anyButtonPressed ^lastMouseEvent anyButtonPressed! ! !HandMorph methodsFor: 'accessing' stamp: 'IgorStasenko 1/22/2012 18:24' prior: 23219012! anyModifierKeyPressed ^recentModifiers anyMask: 16r0E "cmd | opt | ctrl"! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'ar 10/8/2000 23:42' prior: 23241914! attachMorph: m "Position the center of the given morph under this hand, then grab it. This method is used to grab far away or newly created morphs." | delta | self releaseMouseFocus. "Break focus" delta := m bounds extent // 2. m position: (self position - delta). m formerPosition: m position. targetOffset := m position - self position. self addMorphBack: m.! ! !HandMorph methodsFor: 'balloon help' stamp: 'ar 10/3/2000 16:49' prior: 23220917! balloonHelp "Return the balloon morph associated with this hand" ^self valueOfProperty: #balloonHelpMorph! ! !HandMorph methodsFor: 'balloon help' stamp: 'MarcusDenker 10/10/2013 23:45' prior: 71895667! balloonHelp: aBalloonMorph "Return the balloon morph associated with this hand" self balloonHelp ifNotNil:[:oldHelp |oldHelp delete]. aBalloonMorph ifNil:[self removeProperty: #balloonHelpMorph] ifNotNil:[self setProperty: #balloonHelpMorph toValue: aBalloonMorph]! ! !HandMorph methodsFor: 'events-processing' stamp: 'IgorStasenko 1/2/2012 18:58' prior: 23234719! captureEventsUntil: aBlock " Capture all input events, bypassing normal processing flow and redirect all events into block instead. Repeat until block will answer true. World activeHand captureEventsUntil: [:evt | evt isKeyboard and: [ evt keyCharacter = $a ] ] " | release | release := false. captureBlock := [:evt | release := aBlock value: evt ]. [ [ self world doOneCycle. release ] whileFalse. ] ensure: [ captureBlock := nil. ]! ! !HandMorph methodsFor: 'events-processing' stamp: 'IgorStasenko 1/2/2012 18:40' prior: 23235261! captureEventsWhile: aBlock " Capture all input events, bypassing normal processing flow and redirect all events into block instead. Repeat until block will answer false. " ^ self captureEventsUntil: [:evt | (aBlock value: evt) not ]! ! !HandMorph methodsFor: 'updating' stamp: 'jm 2/20/98 19:54' prior: 23252416! changed hasChanged := true. ! ! !HandMorph methodsFor: 'accessing' stamp: 'sw 2/11/98 18:00' prior: 23219152! colorForInsets "Morphs being dragged by the hand use the world's color" ^ owner colorForInsets! ! !HandMorph methodsFor: 'meta-actions' stamp: 'ar 11/6/2000 13:07' prior: 23250671! copyToPasteBuffer: aMorph "Save this morph in the paste buffer. This is mostly useful for copying morphs between projects." aMorph ifNil:[^PasteBuffer := nil]. Cursor wait showWhile:[ PasteBuffer := aMorph topRendererOrSelf veryDeepCopy. PasteBuffer privateOwner: nil]. ! ! !HandMorph methodsFor: 'accessing' stamp: 'MarcusDenker 9/13/2013 16:31' prior: 68530245! cursorBounds temporaryCursor ifNil: [^ self position extent: NormalCursor extent] ifNotNil: [^ self position + temporaryCursorOffset extent: temporaryCursor extent]! ! !HandMorph methodsFor: 'event handling' stamp: 'dgd 2/21/2003 22:43' prior: 23234026! cursorPoint "Implemented for allowing embedded worlds in an event cycle to query a hand's position and get it in its coordinates. The same can be achieved by #point:from: but this is simply much more convenient since it will look as if the hand is in the lower world." | pos | pos := self position. (ActiveWorld isNil or: [ActiveWorld == owner]) ifTrue: [^pos]. ^ActiveWorld point: pos from: owner! ! !HandMorph methodsFor: 'balloon help' stamp: 'sw 10/15/2002 20:01' prior: 23221464! deleteBalloonTarget: aMorph "Delete any existing balloon help. This is now done unconditionally, whether or not the morph supplied is the same as the current balloon target" self balloonHelp: nil " | h | h := self balloonHelp ifNil: [^ self]. h balloonOwner == aMorph ifTrue: [self balloonHelp: nil]"! ! !HandMorph methodsFor: 'drawing' stamp: 'ClementBera 7/30/2013 11:06' prior: 46525632! drawOn: aCanvas "Draw the hand itself (i.e., the cursor)." temporaryCursor ifNil: [aCanvas paintImage: NormalCursor at: bounds topLeft] ifNotNil: [aCanvas paintImage: temporaryCursor at: bounds topLeft]. ! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'ar 8/13/2003 11:39' prior: 23242772! dropMorph: aMorph event: anEvent "Drop the given morph which was carried by the hand" | event dropped | (anEvent isMouseUp and:[aMorph shouldDropOnMouseUp not]) ifTrue:[^self]. "Note: For robustness in drag and drop handling we remove the morph BEFORE we drop him, but we keep his owner set to the hand. This prevents system lockups when there is a problem in drop handling (for example if there's an error in #wantsToBeDroppedInto:). THIS TECHNIQUE IS NOT RECOMMENDED FOR CASUAL USE." self privateRemove: aMorph. aMorph privateOwner: self. dropped := aMorph. (dropped hasProperty: #addedFlexAtGrab) ifTrue:[dropped := aMorph removeFlexShell]. event := DropEvent new setPosition: self position contents: dropped hand: self. self sendEvent: event focus: nil. event wasHandled ifFalse:[aMorph rejectDropMorphEvent: event]. aMorph owner == self ifTrue:[aMorph delete]. self mouseOverHandler processMouseOver: anEvent.! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'ar 10/5/2000 16:23' prior: 23242360! dropMorphs "Drop the morphs at the hands position" self dropMorphs: lastMouseEvent.! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'ar 9/14/2000 11:22' prior: 23242522! dropMorphs: anEvent "Drop the morphs at the hands position" self submorphsReverseDo:[:m| "Drop back to front to maintain z-order" self dropMorph: m event: anEvent. ].! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/26/2000 01:27' prior: 23249201! eventListeners ^eventListeners! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/26/2000 01:27' prior: 23249302! eventListeners: anArrayOrNil eventListeners := anArrayOrNil! ! !HandMorph methodsFor: 'layout' stamp: 'jm 2/20/98 18:55' prior: 23247902! fullBounds "Extend my bounds by the shadow offset when carrying morphs." | bnds | bnds := super fullBounds. submorphs isEmpty ifTrue: [^ bnds ] ifFalse: [^ bnds topLeft corner: bnds bottomRight + self shadowOffset]. ! ! !HandMorph methodsFor: 'private events' stamp: 'dgd 3/31/2003 18:22' prior: 23252522! generateDropFilesEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" "Note: This is still in an experimental phase and will need more work" | position buttons modifiers stamp numFiles dragType | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. dragType := evtBuf third. position := evtBuf fourth @ evtBuf fifth. buttons := 0. modifiers := evtBuf sixth. buttons := buttons bitOr: (modifiers bitShift: 3). numFiles := evtBuf seventh. dragType = 4 ifTrue: ["e.g., drop" owner borderWidth: 0. ^DropFilesEvent new setPosition: position contents: numFiles hand: self]. "the others are currently not handled by morphs themselves" dragType = 1 ifTrue: ["experimental drag enter" owner borderWidth: 4; borderColor: owner color asColor negated]. dragType = 2 ifTrue: ["experimental drag move" ]. dragType = 3 ifTrue: ["experimental drag leave" owner borderWidth: 0]. ^nil! ! !HandMorph methodsFor: 'private events' stamp: 'GuillermoPolito 6/28/2013 13:15' prior: 41991936! generateKeyboardEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | buttons modifiers type pressType stamp charCode keyValue keyEvent | stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. pressType := evtBuf fourth. pressType = EventKeyDown ifTrue: [ type := #keyDown. lastKeyScanCode := evtBuf third]. pressType = EventKeyUp ifTrue: [type := #keyUp]. pressType = EventKeyChar ifTrue: [ type := #keystroke]. modifiers := evtBuf fifth. buttons := modifiers bitShift: 3. keyValue := evtBuf third. charCode := evtBuf sixth. type = #keystroke ifTrue: [combinedChar ifNil: [ | peekedEvent | peekedEvent := Sensor peekEvent. (peekedEvent notNil and: [peekedEvent fourth = EventKeyDown]) ifTrue: [ (CombinedChar isCompositionCharacter: charCode) ifTrue: [ combinedChar := CombinedChar new. combinedChar simpleAdd: charCode asCharacter. (combinedChar combinesWith: peekedEvent third asCharacter) ifTrue: [^nil]. ]]] ifNotNil: [ (combinedChar simpleAdd: charCode asCharacter) ifTrue: [charCode := combinedChar combined charCode]. combinedChar := nil]]. self flag: #fixme. "This piece of code handles the creation of scrolling events. When a scroll is done by the user, the VM forwards a keystroke event with the up/down key. So we reconvert it to a MouseWheelEvent in that case." (type = #keystroke and: [(buttons anyMask: 16) and: [charCode = 30 or: [charCode = 31]]]) ifTrue: [^MouseWheelEvent new setType: #mouseWheel position: lastMouseEvent cursorPoint direction: (charCode = 30 ifTrue: [#up] ifFalse: [#down]) buttons: buttons hand: self stamp: stamp]. keyEvent := KeyboardEvent new setType: type buttons: buttons position: self position keyValue: keyValue charCode: charCode hand: self stamp: stamp. keyEvent scanCode: lastKeyScanCode. ^keyEvent ! ! !HandMorph methodsFor: 'private events' stamp: 'BenjaminVanRyseghem 7/6/2012 14:00' prior: 23256011! generateMouseEvent: evtBuf "Generate the appropriate mouse event for the given raw event buffer" | position buttons modifiers type trail stamp oldButtons evtChanged | KMBuffer uniqueInstance clearBuffer. evtBuf first = lastEventBuffer first ifTrue: ["Workaround for Mac VM bug, *always* generating 3 events on clicks" evtChanged := false. 3 to: evtBuf size do: [:i | (lastEventBuffer at: i) = (evtBuf at: i) ifFalse: [evtChanged := true]]. evtChanged ifFalse: [^nil]]. stamp := evtBuf second. stamp = 0 ifTrue: [stamp := Time millisecondClockValue]. position := evtBuf third @ evtBuf fourth. buttons := evtBuf fifth. modifiers := evtBuf sixth. type := buttons = 0 ifTrue: [lastEventBuffer fifth = 0 ifTrue: [#mouseMove] ifFalse: [#mouseUp]] ifFalse: [lastEventBuffer fifth = 0 ifTrue: [#mouseDown] ifFalse: [#mouseMove]]. buttons := buttons bitOr: (modifiers bitShift: 3). oldButtons := lastEventBuffer fifth bitOr: (lastEventBuffer sixth bitShift: 3). lastEventBuffer := evtBuf. type == #mouseMove ifTrue: [trail := self mouseTrailFrom: evtBuf. ^MouseMoveEvent basicNew setType: type startPoint: (self position) endPoint: trail last trail: trail buttons: buttons hand: self stamp: stamp]. ^MouseButtonEvent basicNew setType: type position: position which: (oldButtons bitXor: buttons) buttons: buttons hand: self stamp: stamp! ! !HandMorph methodsFor: 'private events' stamp: 'tbn 3/12/2010 01:38' prior: 23257533! generateWindowEvent: evtBuf "Generate the appropriate window event for the given raw event buffer" | evt | evt := WindowEvent new. evt setTimeStamp: evtBuf second. evt timeStamp = 0 ifTrue: [evt setTimeStamp: Time millisecondClockValue]. evt action: evtBuf third. evt rectangle: (Rectangle origin: evtBuf fourth @ evtBuf fifth corner: evtBuf sixth @ evtBuf seventh ). ^evt ! ! !HandMorph methodsFor: 'meta-actions' stamp: 'adrian_lienhard 3/5/2009 22:44' prior: 23251033! grabMorph: aMorph "Grab the given morph (i.e., add it to this hand and remove it from its current owner) without changing its position. This is used to pick up a morph under the hand's current position, versus attachMorph: which is used to pick up a morph that may not be near this hand." | grabbed | aMorph = World ifTrue: [^ self]. self releaseMouseFocus. grabbed := aMorph aboutToBeGrabbedBy: self. grabbed ifNil: [^self]. grabbed := grabbed topRendererOrSelf. ^self grabMorph: grabbed from: grabbed owner! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'AlainPlantec 5/7/2010 22:28' prior: 23243790! grabMorph: aMorph from: formerOwner "Grab the given morph (i.e., add it to this hand and remove it from its current owner) without changing its position. This is used to pick up a morph under the hand's current position, versus attachMorph: which is used to pick up a morph that may not be near this hand." | grabbed offset targetPoint grabTransform fullTransform | self releaseMouseFocus. "Break focus" grabbed := aMorph. aMorph keepsTransform ifTrue: [grabTransform := fullTransform := IdentityTransform new] ifFalse: ["Compute the transform to apply to the grabbed morph" grabTransform := formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner grabTransform]. fullTransform := formerOwner ifNil: [IdentityTransform new] ifNotNil: [formerOwner transformFrom: owner]]. "targetPoint is point in aMorphs reference frame" targetPoint := fullTransform globalPointToLocal: self position. "but current position will be determined by grabTransform, so compute offset" offset := targetPoint - (grabTransform globalPointToLocal: self position). "apply the transform that should be used after grabbing" grabbed := grabbed transformedBy: grabTransform. grabbed == aMorph ifFalse: [grabbed setProperty: #addedFlexAtGrab toValue: true]. "offset target to compensate for differences in transforms" grabbed position: grabbed position - offset asIntegerPoint. "And compute distance from hand's position" targetOffset := grabbed position - self position. self addMorphBack: grabbed. grabbed justGrabbedFrom: formerOwner! ! !HandMorph methodsFor: 'halos and balloon help' stamp: 'ar 10/4/2000 13:40' prior: 23246805! halo "Return the halo associated with this hand, if any" ^self valueOfProperty: #halo! ! !HandMorph methodsFor: 'halo handling' stamp: 'ar 10/4/2000 13:40' prior: 23245443! halo: newHalo "Set halo associated with this hand" | oldHalo | oldHalo := self halo. (oldHalo isNil or:[oldHalo == newHalo]) ifFalse:[oldHalo delete]. newHalo ifNil:[self removeProperty: #halo] ifNotNil:[self setProperty: #halo toValue: newHalo]! ! !HandMorph methodsFor: 'events-processing' stamp: 'BenjaminVanRyseghem 6/25/2013 17:43' prior: 41633730! handleEvent: anEvent | evt | owner ifNil:[^self]. evt := anEvent. self logEventStats: evt. evt isMouse ifTrue:[ "just for record, to be used by capture block" lastMouseEvent := evt]. captureBlock ifNotNil: [ ^ captureBlock value: anEvent ]. evt isMouseOver ifTrue:[^self sendMouseEvent: evt]. self showDebugEvent: evt. "Notify listeners" self sendListenEvent: evt to: self eventListeners. evt isWindowEvent ifTrue: [ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isKeyboard ifTrue:[ self sendListenEvent: evt to: self keyboardListeners. self sendKeyboardEvent: evt. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isDropEvent ifTrue:[ self sendEvent: evt focus: nil. ^self mouseOverHandler processMouseOver: lastMouseEvent]. evt isMouse ifTrue:[ self sendListenEvent: evt to: self mouseListeners. lastMouseEvent := evt]. "Check for pending drag or double click operations." mouseClickState ifNotNil:[ (mouseClickState handleEvent: evt from: self) ifFalse:[ "Possibly dispatched #click: or something and will not re-establish otherwise" ^self mouseOverHandler processMouseOver: lastMouseEvent]]. evt isMove ifTrue:[ | pos | pos := evt position. evt isDraggingEvent ifTrue: [ | treshold | treshold := 0. (self submorphs at: 1 ifAbsent: [ nil ]) ifNotNil: [ :first | treshold := self top-first top ]. pos y < (self class upperHandLimit+treshold) ifTrue: [ pos := pos x @ (self class upperHandLimit + treshold)] ]. self position: pos. self sendMouseEvent: evt. ] ifFalse:[ "Issue a synthetic move event if we're not at the position of the event" (evt position = self position) ifFalse:[self moveToEvent: evt]. "Drop submorphs on button events" (self hasSubmorphs) ifTrue:[self dropMorphs: evt] ifFalse:[self sendMouseEvent: evt]. ]. self showMouseFocusEvent: evt. self mouseOverHandler processMouseOver: lastMouseEvent. ! ! !HandMorph methodsFor: 'drawing' stamp: 'ls 4/3/2000 20:30' prior: 23227269! hasChanged "Return true if this hand has changed, either because it has moved or because some morph it is holding has changed." ^ hasChanged ifNil: [ true ] ! ! !HandMorph methodsFor: 'initialization' stamp: 'IgorStasenko 1/22/2012 18:19' prior: 23246977! initForEvents mouseOverHandler := nil. lastMouseEvent := MouseEvent basicNew setType: #mouseMove position: 0@0 buttons: 0 hand: self. lastEventBuffer := {1. 0. 0. 0. 0. 0. nil. nil}. recentModifiers := 0. self resetClickState.! ! !HandMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 12/26/2011 10:18' prior: 23247296! initialize super initialize. self initForEvents. keyboardFocus := nil. mouseFocus := nil. bounds := 0@0 extent: Cursor normal extent. damageRecorder := DamageRecorder new. cachedCanvasHasHoles := false. temporaryCursor := temporaryCursorOffset := nil. self initForEvents.! ! !HandMorph methodsFor: 'initialization' stamp: 'nk 2/14/2004 18:28' prior: 23247650! interrupted "Something went wrong - we're about to bring up a debugger. Release some stuff that could be problematic." self releaseAllFoci. "or else debugger might not handle clicks" ! ! !HandMorph methodsFor: 'change reporting' stamp: 'ar 12/30/2001 17:32' prior: 23222723! invalidRect: damageRect from: aMorph "Note that a change has occurred and record the given damage rectangle relative to the origin this hand's cache." hasChanged := true. aMorph == self ifTrue:[^self]. damageRecorder recordInvalidRect: damageRect. ! ! !HandMorph methodsFor: 'classification' stamp: '' prior: 23223022! isHandMorph ^ true! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:09' prior: 23238501! keyboardFocus ^ keyboardFocus! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/26/2000 01:30' prior: 23238607! keyboardFocus: aMorphOrNil keyboardFocus := aMorphOrNil! ! !HandMorph methodsFor: 'listeners' stamp: 'MarcusDenker 9/13/2013 15:53' prior: 68530634! keyboardListeners ^nil! ! !HandMorph methodsFor: 'accessing' stamp: 'ar 10/5/2000 23:17' prior: 23219571! lastEvent ^ lastMouseEvent! ! !HandMorph methodsFor: 'events-processing' stamp: 'StephaneDucasse 12/26/2011 10:45' prior: 23237357! logEventStats: evt EventStats ifNil:[EventStats := IdentityDictionary new]. EventStats at: #count put: (EventStats at: #count ifAbsent:[0]) + 1. EventStats at: evt type put: (EventStats at: evt type ifAbsent:[0]) + 1.! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:10' prior: 23238737! mouseFocus ^mouseFocus! ! !HandMorph methodsFor: 'focus handling' stamp: 'nk 2/14/2004 18:44' prior: 23238834! mouseFocus: aMorphOrNil mouseFocus := aMorphOrNil! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/26/2000 01:28' prior: 23249539! mouseListeners ^mouseListeners! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/26/2000 01:27' prior: 23249640! mouseListeners: anArrayOrNil mouseListeners := anArrayOrNil! ! !HandMorph methodsFor: 'accessing' stamp: 'ar 9/25/2000 14:24' prior: 23219667! mouseOverHandler ^mouseOverHandler ifNil:[mouseOverHandler := MouseOverHandler new].! ! !HandMorph methodsFor: 'private events' stamp: 'PavelKrivanek 6/21/2011 13:05' prior: 23258003! mouseTrailFrom: currentBuf "Current event, a mouse event buffer, is about to be processed. If there are other similar mouse events queued up, then drop them from the queue, and report the positions inbetween." | nextEvent trail | trail := (Array new: 1) writeStream. trail nextPut: currentBuf third @ currentBuf fourth. [(nextEvent := Sensor peekEvent) isNil] whileFalse: [nextEvent first = currentBuf first ifFalse: [^trail contents "different event type"]. nextEvent fifth = currentBuf fifth ifFalse: [^trail contents "buttons changed"]. nextEvent sixth = currentBuf sixth ifFalse: [^trail contents "modifiers changed"]. "nextEvent is similar. Remove it from the queue, and check the next." nextEvent := Sensor nextEvent. nextEvent ifNotNil: [ trail nextPut: nextEvent third @ nextEvent fourth ]]. ^trail contents! ! !HandMorph methodsFor: 'private events' stamp: 'marcus.denker 8/24/2008 21:40' prior: 23258992! moveToEvent: anEvent "Issue a mouse move event to make the receiver appear at the given position" self handleEvent: (MouseMoveEvent basicNew setType: #mouseMove startPoint: self position endPoint: anEvent position trail: (Array with: self position with: anEvent position) buttons: anEvent buttons hand: self stamp: anEvent timeStamp)! ! !HandMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 12/26/2011 10:19' prior: 23227510! needsToBeDrawn "Return true if this hand must be drawn explicitely instead of being drawn via the hardware cursor. This is the case if it (a) it is a remote hand, (b) it is showing a temporary cursor, or (c) it is not empty and there are any visible submorphs. If using the software cursor, ensure that the hardware cursor is hidden." "Details: Return true if this hand has a saved patch to ensure that is is processed by the world. This saved patch will be deleted after one final display pass when it becomes possible to start using the hardware cursor again. This trick gives us one last display cycle to allow us to remove the software cursor and shadow from the display." | cursor | (savedPatch notNil or: [ (submorphs anySatisfy: [ :ea | ea visible ]) or: [ (temporaryCursor notNil and: [hardwareCursor isNil]) ]]) ifTrue: [ "using the software cursor; hide the hardware one" Cursor blank isCurrent ifFalse: [Cursor blank show]. ^ true]. "Switch from one hardware cursor to another, if needed." cursor := hardwareCursor ifNil: [Cursor normal]. cursor isCurrent ifFalse: [cursor show]. ^ false ! ! !HandMorph methodsFor: 'focus handling' stamp: 'BenjaminVanRyseghem 7/3/2012 12:25' prior: 23238974! newKeyboardFocus: aMorphOrNil "Make the given morph the new keyboard focus, canceling the previous keyboard focus if any. If the argument is nil, the current keyboard focus is cancelled." | oldFocus | oldFocus := self keyboardFocus. self keyboardFocus: aMorphOrNil. oldFocus ifNotNil: [oldFocus == aMorphOrNil ifFalse: [oldFocus keyboardFocusChange: false]]. aMorphOrNil ifNotNil: [ aMorphOrNil keyboardFocusChange: true ]. ! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/26/2000 01:32' prior: 23239481! newMouseFocus: aMorphOrNil "Make the given morph the new mouse focus, canceling the previous mouse focus if any. If the argument is nil, the current mouse focus is cancelled." self mouseFocus: aMorphOrNil. ! ! !HandMorph methodsFor: 'focus handling' stamp: 'ClementBera 7/30/2013 11:06' prior: 46525944! newMouseFocus: aMorph event: event aMorph ifNotNil: [targetOffset := event cursorPoint - aMorph position]. ^self newMouseFocus: aMorph! ! !HandMorph methodsFor: 'accessing' stamp: 'tk 10/20/2004 15:54' prior: 23219822! noButtonPressed "Answer whether any mouse button is not being pressed." ^self anyButtonPressed not! ! !HandMorph methodsFor: 'drawing' stamp: 'nice 1/5/2010 15:59' prior: 23228706! nonCachingFullDrawOn: aCanvas "A HandMorph has unusual drawing requirements: 1. the hand itself (i.e., the cursor) appears in front of its submorphs 2. morphs being held by the hand cast a shadow on the world/morphs below The illusion is that the hand plucks up morphs and carries them above the world." "Note: This version does not cache an image of the morphs being held by the hand. Thus, it is slower for complex morphs, but consumes less space." submorphs isEmpty ifTrue: [^ self drawOn: aCanvas]. "just draw the hand itself" aCanvas asShadowDrawingCanvas translateBy: self shadowOffset during:[:shadowCanvas| | shadowForm | "Note: We use a shadow form here to prevent drawing overlapping morphs multiple times using the transparent shadow color." shadowForm := self shadowForm. " shadowForm displayAt: shadowForm offset negated. Display forceToScreen: (0@0 extent: shadowForm extent). " shadowCanvas paintImage: shadowForm at: shadowForm offset. "draw shadows" ]. "draw morphs in front of shadows" self drawSubmorphsOn: aCanvas. self drawOn: aCanvas. "draw the hand itself in front of morphs" ! ! !HandMorph methodsFor: 'event handling' stamp: 'ar 9/25/2000 14:27' prior: 23234503! noticeMouseOver: aMorph event: anEvent mouseOverHandler ifNil:[^self]. mouseOverHandler noticeMouseOver: aMorph event: anEvent.! ! !HandMorph methodsFor: 'paste buffer' stamp: 'ar 10/5/2000 19:10' prior: 23251624! objectToPaste "It may need to be sent #startRunning by the client" ^ Cursor wait showWhile: [PasteBuffer veryDeepCopy] "PasteBuffer usableDuplicateIn: self world" ! ! !HandMorph methodsFor: 'halo handling' stamp: 'ar 10/24/2000 18:40' prior: 23245771! obtainHalo: aHalo "Used for transfering halos between hands" | formerOwner | self halo == aHalo ifTrue:[^self]. "Find former owner" formerOwner := self world hands detect:[:h| h halo == aHalo] ifNone:[nil]. formerOwner ifNotNil:[formerOwner releaseHalo: aHalo]. self halo: aHalo! ! !HandMorph methodsFor: 'paste buffer' stamp: 'ar 10/5/2000 19:10' prior: 23251863! pasteBuffer "Return the paste buffer associated with this hand" ^ PasteBuffer! ! !HandMorph methodsFor: 'paste buffer' stamp: 'ar 10/5/2000 19:11' prior: 23252014! pasteBuffer: aMorphOrNil "Set the contents of the paste buffer." PasteBuffer := aMorphOrNil. ! ! !HandMorph methodsFor: 'geometry' stamp: 'ar 3/20/2001 20:34' prior: 23240910! position ^temporaryCursor ifNil: [bounds topLeft] ifNotNil: [bounds topLeft - temporaryCursorOffset]! ! !HandMorph methodsFor: 'geometry' stamp: 'nk 8/20/2003 17:39' prior: 23241084! position: aPoint "Overridden to align submorph origins to the grid if gridding is on." | adjustedPosition delta box | adjustedPosition := aPoint. temporaryCursor ifNotNil: [adjustedPosition := adjustedPosition + temporaryCursorOffset]. "Copied from Morph to avoid owner layoutChanged" "Change the position of this morph and and all of its submorphs." delta := adjustedPosition - bounds topLeft. (delta x = 0 and: [delta y = 0]) ifTrue: [^ self]. "Null change" box := self fullBounds. (delta dotProduct: delta) > 100 ifTrue:[ "e.g., more than 10 pixels moved" self invalidRect: box. self invalidRect: (box translateBy: delta). ] ifFalse:[ self invalidRect: (box merge: (box translateBy: delta)). ]. self privateFullMoveBy: delta. ! ! !HandMorph methodsFor: 'private events' stamp: 'IgorStasenko 1/22/2012 18:30' prior: 23259428! processEvents "Process user input events from the local input devices." | evt evtBuf type hadAny | ActiveEvent ifNotNil: ["Meaning that we were invoked from within an event response. Make sure z-order is up to date" self mouseOverHandler processMouseOver: lastMouseEvent]. hadAny := false. [(evtBuf := Sensor nextEvent) isNil] whileFalse: [evt := nil. "for unknown event types" type := evtBuf first. type = EventTypeMouse ifTrue: [recentModifiers := evtBuf sixth. evt := self generateMouseEvent: evtBuf]. type = EventTypeKeyboard ifTrue: [recentModifiers := evtBuf fifth. evt := self generateKeyboardEvent: evtBuf]. type = EventTypeDragDropFiles ifTrue: [evt := self generateDropFilesEvent: evtBuf]. type = EventTypeWindow ifTrue:[evt := self generateWindowEvent: evtBuf]. "All other events are ignored" (type ~= EventTypeDragDropFiles and: [evt isNil]) ifTrue: [^self]. evt isNil ifFalse: ["Finally, handle it" self handleEvent: evt. hadAny := true. "For better user feedback, return immediately after a mouse event has been processed." (evt isMouse and: [evt isMouseWheel not]) ifTrue: [^self]]]. "note: if we come here we didn't have any mouse events" mouseClickState notNil ifTrue: ["No mouse events during this cycle. Make sure click states time out accordingly" mouseClickState handleEvent: lastMouseEvent asMouseMove from: self]. hadAny ifFalse: ["No pending events. Make sure z-order is up to date" self mouseOverHandler processMouseOver: lastMouseEvent]! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:09' prior: 23239983! releaseAllFoci mouseFocus := nil. keyboardFocus := nil. ! ! !HandMorph methodsFor: 'caching' stamp: 'StephaneDucasse 12/26/2011 10:39' prior: 23222452! releaseCachedState | oo | super releaseCachedState. cacheCanvas := nil. oo := owner. self removeAllMorphs. self initialize. "nuke everything" self privateOwner: oo. self releaseAllFoci.! ! !HandMorph methodsFor: 'halo handling' stamp: 'ar 10/24/2000 18:40' prior: 23246130! releaseHalo: aHalo "Used for transfering halos between hands" self removeProperty: #halo! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:09' prior: 23240115! releaseKeyboardFocus "Release the current keyboard focus unconditionally" self newKeyboardFocus: nil. ! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/26/2000 01:31' prior: 23240294! releaseKeyboardFocus: aMorph "If the given morph had the keyboard focus before, release it" self keyboardFocus == aMorph ifTrue:[self releaseKeyboardFocus].! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:10' prior: 23240526! releaseMouseFocus "Release the current mouse focus unconditionally." self newMouseFocus: nil.! ! !HandMorph methodsFor: 'focus handling' stamp: 'ar 10/6/2000 00:10' prior: 23240695! releaseMouseFocus: aMorph "If the given morph had the mouse focus before, release it" self mouseFocus == aMorph ifTrue:[self releaseMouseFocus].! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/24/2000 20:41' prior: 23249770! removeEventListener: anObject "Remove anObject from the current event listeners." self eventListeners: (self removeListener: anObject from: self eventListeners).! ! !HandMorph methodsFor: 'halo handling' stamp: 'dgd 4/4/2006 16:14' prior: 23246293! removeHalo "remove the receiver's halo (if any)" | halo | halo := self halo. halo ifNil: [^ self]. halo delete. self removeProperty: #halo! ! !HandMorph methodsFor: 'halo handling' stamp: 'dgd 9/9/2004 22:44' prior: 23246512! removeHaloFromClick: anEvent on: aMorph | halo | halo := self halo ifNil: [^ self]. (halo target hasOwner: self) ifTrue: [^ self]. (halo staysUpWhenMouseIsDownIn: aMorph) ifFalse: [self removeHalo]! ! !HandMorph methodsFor: 'listeners' stamp: 'dgd 2/21/2003 22:48' prior: 23250003! removeListener: anObject from: aListenerGroup "Remove anObject from the given listener group. Return the new group." | listeners | aListenerGroup ifNil: [^nil]. listeners := aListenerGroup. listeners := listeners copyWithout: anObject. listeners := listeners copyWithout: nil. "obsolete entries" listeners isEmpty ifTrue: [listeners := nil]. ^listeners! ! !HandMorph methodsFor: 'listeners' stamp: 'ar 10/24/2000 20:41' prior: 23250435! removeMouseListener: anObject "Remove anObject from the current mouse listeners." self mouseListeners: (self removeListener: anObject from: self mouseListeners).! ! !HandMorph methodsFor: 'balloon help' stamp: 'ar 10/6/2000 00:14' prior: 23221844! removePendingBalloonFor: aMorph "Get rid of pending balloon help." self removeAlarm: #spawnBalloonFor:. self deleteBalloonTarget: aMorph.! ! !HandMorph methodsFor: 'double click support' stamp: 'ar 9/18/2000 17:16' prior: 23224363! resetClickState "Reset the double-click detection state to normal (i.e., not waiting for a double-click)." mouseClickState := nil.! ! !HandMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 12/26/2011 10:19' prior: 23229919! restoreSavedPatchOn: aCanvas "Clear the changed flag and restore the part of the given canvas under this hand from the previously saved patch. If necessary, handle the transition to using the hardware cursor." | cursor | hasChanged := false. savedPatch ifNotNil: [aCanvas drawImage: savedPatch at: savedPatch offset. submorphs notEmpty ifTrue: [^self]. (temporaryCursor notNil and: [hardwareCursor isNil]) ifTrue: [^self]. "Make the transition to using hardware cursor. Clear savedPatch and report one final damage rectangle to erase the image of the software cursor." super invalidRect: (savedPatch offset extent: savedPatch extent + self shadowOffset) from: self. cursor := hardwareCursor ifNil: [Cursor normal]. cursor isCurrent ifFalse: [cursor show]. "show hardware cursor" savedPatch := nil]! ! !HandMorph methodsFor: 'drawing' stamp: 'dgd 2/21/2003 22:49' prior: 23230830! savePatchFrom: aCanvas "Save the part of the given canvas under this hand as a Form and return its bounding rectangle." "Details: The previously used patch Form is recycled when possible to reduce the burden on storage management." | damageRect myBnds | damageRect := myBnds := self fullBounds. savedPatch ifNotNil: [damageRect := myBnds merge: (savedPatch offset extent: savedPatch extent)]. (savedPatch isNil or: [savedPatch extent ~= myBnds extent]) ifTrue: ["allocate new patch form if needed" savedPatch := aCanvas form allocateForm: myBnds extent]. aCanvas contentsOfArea: (myBnds translateBy: aCanvas origin) into: savedPatch. savedPatch offset: myBnds topLeft. ^damageRect! ! !HandMorph methodsFor: 'selected object' stamp: 'ClementBera 7/30/2013 11:06' prior: 46526180! selectedObject "answer the selected object for the hand or nil is none" | halo | halo := self halo. halo ifNil: [^ nil]. ^ halo target renderedMorph! ! !HandMorph methodsFor: 'private events' stamp: 'ar 3/18/2001 01:43' prior: 23261084! sendEvent: anEvent focus: focusHolder "Send the event to the morph currently holding the focus, or if none to the owner of the hand." ^self sendEvent: anEvent focus: focusHolder clear:[nil]! ! !HandMorph methodsFor: 'private events' stamp: 'ar 3/18/2001 01:42' prior: 23261349! sendEvent: anEvent focus: focusHolder clear: aBlock "Send the event to the morph currently holding the focus, or if none to the owner of the hand." | result | focusHolder ifNotNil:[^self sendFocusEvent: anEvent to: focusHolder clear: aBlock]. ActiveEvent := anEvent. result := owner processEvent: anEvent. ActiveEvent := nil. ^result! ! !HandMorph methodsFor: 'private events' stamp: 'ar 3/18/2001 01:42' prior: 23261763! sendFocusEvent: anEvent to: focusHolder clear: aBlock "Send the event to the morph currently holding the focus" | result w | w := focusHolder world ifNil:[^ aBlock value]. w becomeActiveDuring:[ ActiveHand := self. ActiveEvent := anEvent. result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)). ]. ^result! ! !HandMorph methodsFor: 'private events' stamp: 'AlainPlantec 1/7/2010 19:44' prior: 23262213! sendKeyboardEvent: anEvent "Send the event to the morph currently holding the focus, or if none to the owner of the hand." ^ self sendEvent: anEvent focus: self keyboardFocus clear: [self keyboardFocus: nil]! ! !HandMorph methodsFor: 'private events' stamp: 'ar 10/26/2000 01:43' prior: 23262505! sendListenEvent: anEvent to: listenerGroup "Send the event to the given group of listeners" listenerGroup ifNil:[^self]. listenerGroup do:[:listener| listener ifNotNil:[listener handleListenEvent: anEvent copy]].! ! !HandMorph methodsFor: 'private events' stamp: 'ar 3/18/2001 01:45' prior: 23262797! sendMouseEvent: anEvent "Send the event to the morph currently holding the focus, or if none to the owner of the hand." ^self sendEvent: anEvent focus: self mouseFocus clear:[self mouseFocus: nil]! ! !HandMorph methodsFor: 'drawing' stamp: 'JW 7/12/2005 20:13' prior: 68284068! shadowForm "Return a 1-bit shadow of my submorphs. Assumes submorphs is not empty" | bnds canvas | bnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). canvas := (Display defaultCanvasClass extent: bnds extent depth: 1) asShadowDrawingCanvas: Color black. canvas translateBy: bnds topLeft negated during:[:tempCanvas| self drawSubmorphsOn: tempCanvas]. ^ canvas form offset: bnds topLeft! ! !HandMorph methodsFor: 'drop shadows' stamp: '' prior: 23233930! shadowOffset ^ 6@8! ! !HandMorph methodsFor: 'accessing' stamp: 'ar 12/22/2008 12:04' prior: 23219993! shiftPressed ^lastMouseEvent shiftPressed! ! !HandMorph methodsFor: 'events-processing' stamp: 'MarcusDenker 7/28/2013 13:03' prior: 46244745! showDebugEvent: evt ShowEvents == true ifTrue: [ | ofs| Display fill: (0@0 extent: 500@120) rule: Form over fillColor: Color white. ofs := (owner hands indexOf: self) - 1 * 60. evt printString displayAt: (0@ofs) + (evt isKeyboard ifTrue: [0@30] ifFalse: [0@0]). self keyboardFocus printString displayAt: (0@ofs)+(0@45). ].! ! !HandMorph methodsFor: 'events-processing' stamp: 'StephaneDucasse 12/26/2011 10:49' prior: 23238096! showMouseFocusEvent: evt ShowEvents == true ifTrue: [ | ofs| ofs := (owner hands indexOf: self) - 1 * 60. self mouseFocus printString displayAt: (0@ofs) + (0@15)]. ! ! !HandMorph methodsFor: 'cursor' stamp: 'di 3/6/1999 23:52' prior: 23223257! showTemporaryCursor: cursorOrNil "Set the temporary cursor to the given Form. If the argument is nil, revert to the normal cursor." self showTemporaryCursor: cursorOrNil hotSpotOffset: 0@0 ! ! !HandMorph methodsFor: 'cursor' stamp: 'ClementBera 7/30/2013 11:06' prior: 46526423! showTemporaryCursor: cursorOrNil hotSpotOffset: hotSpotOffset "Set the temporary cursor to the given Form. If the argument is nil, revert to the normal hardware cursor." self changed. temporaryCursorOffset ifNotNil: [bounds := bounds translateBy: temporaryCursorOffset negated]. cursorOrNil ifNil: [temporaryCursor := temporaryCursorOffset := hardwareCursor := nil] ifNotNil: [temporaryCursor := cursorOrNil asCursorForm. temporaryCursorOffset := temporaryCursor offset - hotSpotOffset. (cursorOrNil isKindOf: Cursor) ifTrue: [hardwareCursor := cursorOrNil]]. bounds := self cursorBounds. self layoutChanged; changed! ! !HandMorph methodsFor: 'balloon help' stamp: 'ar 10/3/2000 17:15' prior: 23222056! spawnBalloonFor: aMorph aMorph showBalloon: aMorph balloonText hand: self.! ! !HandMorph methodsFor: 'accessing' stamp: '' prior: 23220076! targetOffset "Return the offset of the last mouseDown location relative to the origin of the recipient morph. During menu interactions, this is the absolute location of the mouse down event that invoked the menu." ^ targetOffset ! ! !HandMorph methodsFor: 'accessing' stamp: 'wiz 12/4/2006 00:16' prior: 23220378! targetPoint "Return the new position of the target. I.E. return the position of the hand less the original distance between hand and target position" ^ self position - targetOffset ! ! !HandMorph methodsFor: 'cursor' stamp: 'NS 2/17/2001 11:01' prior: 23224248! temporaryCursor ^ temporaryCursor! ! !HandMorph methodsFor: 'balloon help' stamp: 'ar 10/3/2000 17:14' prior: 23222203! triggerBalloonFor: aMorph after: timeOut "Trigger balloon help after the given time out for some morph" self addAlarm: #spawnBalloonFor: with: aMorph after: timeOut.! ! !HandMorph methodsFor: 'drawing' stamp: 'dgd 2/21/2003 22:49' prior: 23232089! updateCacheCanvas: aCanvas "Update the cached image of the morphs being held by this hand." "Note: The following is an attempt to quickly get out if there's no change" | subBnds rectList nPix | subBnds := Rectangle merging: (submorphs collect: [:m | m fullBounds]). rectList := damageRecorder invalidRectsFullBounds: subBnds. damageRecorder reset. (rectList isEmpty and: [cacheCanvas notNil and: [cacheCanvas extent = subBnds extent]]) ifTrue: [^self]. "Always check for real translucency -- can't be cached in a form" self submorphsDo: [:m | m wantsToBeCachedByHand ifFalse: [cacheCanvas := nil. cachedCanvasHasHoles := true. ^self]]. (cacheCanvas isNil or: [cacheCanvas extent ~= subBnds extent]) ifTrue: [cacheCanvas := (aCanvas allocateForm: subBnds extent) getCanvas. cacheCanvas translateBy: subBnds origin negated during: [:tempCanvas | self drawSubmorphsOn: tempCanvas]. self submorphsDo: [:m | (m areasRemainingToFill: subBnds) isEmpty ifTrue: [^cachedCanvasHasHoles := false]]. nPix := cacheCanvas form tallyPixelValues first. "--> begin rounded corners hack <---" cachedCanvasHasHoles := (nPix = 48 and: [submorphs size = 1 and: [submorphs first wantsRoundedCorners]]) ifTrue: [false] ifFalse: [nPix > 0]. "--> end rounded corners hack <---" ^self]. "incrementally update the cache canvas" cacheCanvas translateBy: subBnds origin negated during: [:cc | rectList do: [:r | cc clipBy: r during: [:c | c fillColor: Color transparent. self drawSubmorphsOn: c]]]! ! !HandMorph methodsFor: 'copying' stamp: 'ar 10/6/2000 00:11' prior: 23223110! veryDeepCopyWith: deepCopier "Return self. Do not copy hands this way." ^ self! ! !HandMorph methodsFor: 'drawing' stamp: 'nk 10/24/2003 22:12' prior: 23233802! visible: aBoolean self needsToBeDrawn ifFalse: [ ^self ]. super visible: aBoolean! ! !HandMorph methodsFor: 'events-processing' stamp: 'IgorStasenko 1/2/2012 18:41' prior: 23238357! waitButton self captureEventsUntil: [:evt | self anyButtonPressed ] ! ! !HandMorph methodsFor: 'double click support' stamp: 'nk 7/26/2004 10:29' prior: 23224575! waitForClicksOrDrag: aMorph event: evt "Wait for mouse button and movement events, informing aMorph about events interesting to it via callbacks. This message is typically sent to the Hand by aMorph when it first receives a mouse-down event. The callback methods invoked on aMorph (which are passed a copy of evt) are: #click: sent when the mouse button goes up within doubleClickTime. #doubleClick: sent when the mouse goes up, down, and up again all within DoubleClickTime. #doubleClickTimeout: sent when the mouse does not have a doubleClick within DoubleClickTime. #startDrag: sent when the mouse moves more than 10 pixels from evt's position within DoubleClickTime. Note that mouseMove: and mouseUp: events are not sent to aMorph until it becomes the mouse focus, which is typically done by aMorph in its click:, doubleClick:, or drag: methods." ^self waitForClicksOrDrag: aMorph event: evt selectors: #( #click: #doubleClick: #doubleClickTimeout: #startDrag:) threshold: 10 ! ! !HandMorph methodsFor: 'double click support' stamp: 'nk 7/26/2004 10:32' prior: 23225652! waitForClicksOrDrag: aMorph event: evt selectors: clickAndDragSelectors threshold: threshold "Wait for mouse button and movement events, informing aMorph about events interesting to it via callbacks. This message is typically sent to the Hand by aMorph when it first receives a mouse-down event. The callback methods, named in clickAndDragSelectors and passed a copy of evt, are: 1 (click) sent when the mouse button goes up within doubleClickTime. 2 (doubleClick) sent when the mouse goes up, down, and up again all within DoubleClickTime. 3 (doubleClickTimeout) sent when the mouse does not have a doubleClick within DoubleClickTime. 4 (startDrag) sent when the mouse moves more than threshold pixels from evt's position within DoubleClickTime. Note that mouseMove: and mouseUp: events are not sent to aMorph until it becomes the mouse focus, which is typically done by aMorph in its click:, doubleClick:, or drag: methods." mouseClickState := MouseClickState new client: aMorph click: clickAndDragSelectors first dblClick: clickAndDragSelectors second dblClickTime: DoubleClickTime dblClickTimeout: clickAndDragSelectors third drag: clickAndDragSelectors fourth threshold: threshold event: evt. ! ! !KeyboardEvent commentStamp: '' prior: 74463352! I am a keyboard event. I contain the char code of the event pressed, the modifiers pressed, and the keycode of the key pressed.! !KeyboardEvent methodsFor: 'comparing' stamp: 'ar 10/24/2000 17:44' prior: 24211550! = aMorphicEvent super = aMorphicEvent ifFalse:[^false]. buttons = aMorphicEvent buttons ifFalse: [^ false]. keyValue = aMorphicEvent keyValue ifFalse: [^ false]. ^ true ! ! !KeyboardEvent methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 6/28/2013 13:03' prior: 41919973! asShortcut ^ self asKeyCombination! ! !KeyboardEvent methodsFor: 'testing' stamp: 'DenisKudryashov 7/20/2013 17:29' prior: 48653923! hasSpecialCTRLKeyValue " 4 - Character end 1 - Character home " ^ self controlKeyPressed and: [ keyValue <= 26 & (keyValue ~= 4) & (keyValue ~= 1) ]! ! !KeyboardEvent methodsFor: 'comparing' stamp: 'ar 9/13/2000 15:50' prior: 24211796! hash ^buttons hash + keyValue hash ! ! !KeyboardEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:49' prior: 24215718! isKeyDown ^self type == #keyDown! ! !KeyboardEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:49' prior: 24215822! isKeyUp ^self type == #keyUp! ! !KeyboardEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:49' prior: 24215922! isKeyboard ^true! ! !KeyboardEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:49' prior: 24216010! isKeystroke ^self type == #keystroke! ! !KeyboardEvent methodsFor: 'testing' stamp: 'ar 10/9/2000 00:43' prior: 24216118! isMouseMove ^false! ! !KeyboardEvent methodsFor: 'testing' stamp: 'SeanDeNigris 1/29/2013 11:22' prior: 24216218! isUserInterrupt ^ UserInterruptHandler cmdDotEnabled and: [ self keyCharacter = $. and: [ self commandKeyPressed ] ]. ! ! !KeyboardEvent methodsFor: 'keyboard' stamp: 'michael.rueger 3/11/2009 11:21' prior: 24212653! keyCharacter "Answer the character corresponding this keystroke. This is defined only for keystroke events." ^Unicode value: charCode! ! !KeyboardEvent methodsFor: 'keyboard' stamp: 'nk 10/13/2004 10:43' prior: 24212862! keyString "Answer the string value for this keystroke. This is defined only for keystroke events." ^ String streamContents: [ :s | self printKeyStringOn: s ]! ! !KeyboardEvent methodsFor: 'keyboard' stamp: 'ar 9/13/2000 15:51' prior: 24213094! keyValue "Answer the ascii value for this keystroke. This is defined only for keystroke events." ^ keyValue! ! !KeyboardEvent methodsFor: 'printing' stamp: 'DenisKudryashov 7/20/2013 17:32' prior: 48654658! printKeyStringOn: aStream "Print a readable string representing the receiver on a given stream" | kc inBrackets firstBracket keyString | kc := self keyCharacter. inBrackets := false. firstBracket := [ inBrackets ifFalse: [ aStream nextPut: $<. inBrackets := true ]]. self controlKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Ctrl-' ]. self commandKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Cmd-' ]. (buttons anyMask: 32) ifTrue: [ firstBracket value. aStream nextPutAll: 'Opt-' ]. (self shiftPressed and: [ keyValue between: 1 and: 31 ]) ifTrue: [ firstBracket value. aStream nextPutAll: 'Shift-' ]. self hasSpecialCTRLKeyValue ifTrue: [aStream nextPut: (keyValue + $a asciiValue - 1) asCharacter] ifFalse: [keyString := (kc caseOf: { [ Character space ] -> [ ' ' ]. [ Character tab ] -> [ 'tab' ]. [ Character cr ] -> [ 'cr' ]. [ Character lf ] -> [ 'lf' ]. [ Character enter ] -> [ 'enter' ]. [ Character backspace ] -> [ 'backspace' ]. [ Character delete ] -> [ 'delete' ]. [ Character escape ] -> [ 'escape' ]. [ Character arrowDown ] -> [ 'down' ]. [ Character arrowUp ] -> [ 'up' ]. [ Character arrowLeft ] -> [ 'left' ]. [ Character arrowRight ] -> [ 'right' ]. [ Character end ] -> [ 'end' ]. [ Character home ] -> [ 'home' ]. [ Character pageDown ] -> [ 'pageDown' ]. [ Character pageUp ] -> [ 'pageUp' ]. [ Character euro ] -> [ 'euro' ]. [ Character insert ] -> [ 'insert' ]. } otherwise: [ String with: kc ]). keyString size > 1 ifTrue: [ firstBracket value ]. aStream nextPutAll: keyString]. inBrackets ifTrue: [aStream nextPut: $> ]! ! !KeyboardEvent methodsFor: 'printing' stamp: 'nk 10/13/2004 10:42' prior: 24215196! printOn: aStream "Print the receiver on a stream" aStream nextPut: $[. aStream nextPutAll: type; nextPutAll: ' '''. self printKeyStringOn: aStream. aStream nextPut: $'. aStream nextPut: $]! ! !KeyboardEvent methodsFor: 'keyboard' stamp: 'michael.rueger 2/25/2009 22:19' prior: 24213288! scanCode ^scanCode! ! !KeyboardEvent methodsFor: 'initialize' stamp: 'michael.rueger 2/24/2009 14:08' prior: 24212250! scanCode: anInt scanCode := anInt! ! !KeyboardEvent methodsFor: 'dispatching' stamp: 'ar 9/15/2000 21:13' prior: 24211908! sentTo: anObject "Dispatch the receiver into anObject" type == #keystroke ifTrue:[^anObject handleKeystroke: self]. type == #keyDown ifTrue:[^anObject handleKeyDown: self]. type == #keyUp ifTrue:[^anObject handleKeyUp: self]. ^super sentTo: anObject.! ! !KeyboardEvent methodsFor: 'private' stamp: 'michael.rueger 2/23/2009 11:49' prior: 24216423! setType: aSymbol buttons: anInteger position: pos keyValue: aValue charCode: anInt hand: aHand stamp: stamp type := aSymbol. buttons := anInteger. position := pos. keyValue := aValue. charCode := anInt. source := aHand. wasHandled := false. timeStamp := stamp.! ! !KeyboardEvent methodsFor: 'private' stamp: 'ar 10/5/2000 23:54' prior: 24216762! setType: aSymbol buttons: anInteger position: pos keyValue: aValue hand: aHand stamp: stamp type := aSymbol. buttons := anInteger. position := pos. keyValue := aValue. source := aHand. wasHandled := false. timeStamp := stamp.! ! !KeyboardEvent methodsFor: 'printing' stamp: 'ar 10/25/2000 22:07' prior: 24215464! storeOn: aStream aStream nextPutAll: type. aStream space. self timeStamp storeOn: aStream. aStream space. buttons storeOn: aStream. aStream space. keyValue storeOn: aStream. ! ! !MouseButtonEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 19:58' prior: 27189151! blueButtonChanged "Answer true if the blue mouse button has changed. This is the third mouse button or cmd+click on the Mac." ^ whichButton anyMask: 1! ! !MouseButtonEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 19:58' prior: 27189380! redButtonChanged "Answer true if the red mouse button has changed. This is the first mouse button." ^ whichButton anyMask: 4! ! !MouseButtonEvent methodsFor: 'dispatching' stamp: 'ar 9/16/2000 13:05' prior: 27189924! sentTo: anObject "Dispatch the receiver into anObject" type == #mouseDown ifTrue:[^anObject handleMouseDown: self]. type == #mouseUp ifTrue:[^anObject handleMouseUp: self]. ^super sentTo: anObject! ! !MouseButtonEvent methodsFor: 'private' stamp: 'ar 10/5/2000 23:55' prior: 27190579! setType: evtType position: evtPos which: button buttons: evtButtons hand: evtHand stamp: stamp type := evtType. position := evtPos. buttons := evtButtons. source := evtHand. wasHandled := false. whichButton := button. timeStamp := stamp.! ! !MouseButtonEvent methodsFor: 'printing' stamp: 'ar 10/24/2000 16:29' prior: 27190416! storeOn: aStream super storeOn: aStream. aStream space. whichButton storeOn: aStream.! ! !MouseButtonEvent methodsFor: 'accessing' stamp: 'nk 3/11/2004 17:44' prior: 27189583! whichButton ^whichButton! ! !MouseButtonEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 19:59' prior: 27189684! yellowButtonChanged "Answer true if the yellow mouse button has changed. This is the second mouse button or option+click on the Mac." ^ whichButton anyMask: 2! ! !MouseEvent class methodsFor: 'constants' stamp: 'NS 5/19/2003 15:16' prior: 27202163! anyButton ^ 7! ! !MouseEvent class methodsFor: 'constants' stamp: 'NS 5/19/2003 15:16' prior: 27202253! blueButton ^ 1! ! !MouseEvent class methodsFor: 'constants' stamp: 'NS 5/19/2003 15:16' prior: 27202344! redButton ^ 4! ! !MouseEvent class methodsFor: 'constants' stamp: 'NS 5/19/2003 15:16' prior: 27202434! yellowButton ^ 2! ! !MouseEvent methodsFor: 'comparing' stamp: 'ar 9/15/2000 22:50' prior: 27198168! = aMorphicEvent super = aMorphicEvent ifFalse:[^false]. position = aMorphicEvent position ifFalse: [^ false]. buttons = aMorphicEvent buttons ifFalse: [^ false]. ^ true ! ! !MouseEvent methodsFor: 'button state' stamp: 'NS 5/19/2003 15:17' prior: 27197016! anyButtonPressed "Answer true if any mouse button is being pressed." ^ buttons anyMask: self class anyButton! ! !MouseEvent methodsFor: 'converting' stamp: 'pmm 3/13/2010 11:33' prior: 27198520! asMouseEnter ^self shallowCopy setType: #mouseEnter! ! !MouseEvent methodsFor: 'converting' stamp: 'pmm 3/13/2010 11:33' prior: 27198644! asMouseLeave ^self shallowCopy setType: #mouseLeave! ! !MouseEvent methodsFor: 'converting' stamp: 'marcus.denker 8/24/2008 21:41' prior: 27198778! asMouseMove "Convert the receiver into a mouse move" ^MouseMoveEvent basicNew setType: #mouseMove startPoint: position endPoint: position trail: {position. position} buttons: buttons hand: source stamp: Time millisecondClockValue.! ! !MouseEvent methodsFor: 'converting' stamp: 'marcus.denker 8/24/2008 21:42' prior: 27199092! asMouseOver "Convert the receiver into a mouse over event" ^MouseEvent basicNew setType: #mouseOver position: position buttons: buttons hand: source! ! !MouseEvent methodsFor: 'button state' stamp: 'NS 5/19/2003 15:17' prior: 27197200! blueButtonPressed "Answer true if the blue mouse button is being pressed. This is the third mouse button or cmd+click on the Mac." ^ buttons anyMask: self class blueButton! ! !MouseEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 22:51' prior: 27196846! cursorPoint "Answer the location of the cursor's hotspot when this event occured." ^ position! ! !MouseEvent methodsFor: 'comparing' stamp: 'ar 9/15/2000 22:47' prior: 27198411! hash ^ position hash + buttons hash! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 10/5/2000 19:43' prior: 27200718! isDraggingEvent source ifNil:[^false]. source hasSubmorphs ifTrue:[^true]. self anyButtonPressed ifTrue:[^true]. ^false! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:30' prior: 27200909! isMouse ^true! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:32' prior: 27200991! isMouseDown ^self type == #mouseDown! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:32' prior: 27201096! isMouseEnter ^self type == #mouseEnter! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:32' prior: 27201203! isMouseLeave ^self type == #mouseLeave! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:32' prior: 27201310! isMouseMove ^self type == #mouseMove! ! !MouseEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 15:32' prior: 27201415! isMouseUp ^self type == #mouseUp! ! !MouseEvent methodsFor: 'testing' stamp: 'gvc 1/28/2008 13:14' prior: 27201517! isMouseWheel "Answer whether the receiver is a mouse wheel event." ^false! ! !MouseEvent methodsFor: 'printing' stamp: 'JMM 9/29/2004 13:25' prior: 27200012! printOn: aStream aStream nextPut: $[. aStream nextPutAll: self cursorPoint printString; space. aStream nextPutAll: type; space. aStream nextPutAll: self modifierString. aStream nextPutAll: self buttonString. aStream nextPutAll: timeStamp printString; space. aStream nextPutAll: self windowIndex printString. aStream nextPut: $].! ! !MouseEvent methodsFor: 'button state' stamp: 'NS 5/19/2003 15:17' prior: 27197447! redButtonPressed "Answer true if the red mouse button is being pressed. This is the first mouse button." ^ buttons anyMask: self class redButton! ! !MouseEvent methodsFor: 'dispatching' stamp: 'ar 10/10/2000 21:15' prior: 27199316! sentTo: anObject "Dispatch the receiver into anObject" type == #mouseOver ifTrue:[^anObject handleMouseOver: self]. type == #mouseEnter ifTrue:[^anObject handleMouseEnter: self]. type == #mouseLeave ifTrue:[^anObject handleMouseLeave: self]. ^super sentTo: anObject.! ! !MouseEvent methodsFor: 'private' stamp: 'ar 10/10/2000 21:15' prior: 27201664! setType: aSymbol "For quick conversion between event types" type := aSymbol.! ! !MouseEvent methodsFor: 'private' stamp: 'ar 9/15/2000 22:53' prior: 27201810! setType: evtType position: evtPos buttons: evtButtons hand: evtHand type := evtType. position := evtPos. buttons := evtButtons. source := evtHand. wasHandled := false.! ! !MouseEvent methodsFor: 'printing' stamp: 'ar 10/25/2000 22:09' prior: 27200420! storeOn: aStream aStream nextPutAll: type. aStream space. self timeStamp storeOn: aStream. aStream space. position x storeOn: aStream. aStream space. position y storeOn: aStream. aStream space. buttons storeOn: aStream.! ! !MouseEvent methodsFor: 'button state' stamp: 'ar 9/15/2000 22:51' prior: 27197667! targetPoint "Answer the location of the cursor's hotspot, adjusted by the offset of the last mouseDown relative to the recipient morph." ^ position - source targetOffset! ! !MouseEvent methodsFor: 'button state' stamp: 'NS 5/19/2003 15:17' prior: 27197913! yellowButtonPressed "Answer true if the yellow mouse button is being pressed. This is the second mouse button or option+click on the Mac." ^ buttons anyMask: self class yellowButton! ! !MouseMoveEvent methodsFor: 'comparing' stamp: 'ar 9/15/2000 22:49' prior: 27203136! = aMorphicEvent super = aMorphicEvent ifFalse:[^false]. position = aMorphicEvent position ifFalse: [^ false]. startPoint = aMorphicEvent startPoint ifFalse: [^ false]. buttons = aMorphicEvent buttons ifFalse: [^ false]. ^ true ! ! !MouseMoveEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 22:51' prior: 27202680! endPoint "Return the point where the movement ended." ^position! ! !MouseMoveEvent methodsFor: 'comparing' stamp: 'ar 9/15/2000 22:49' prior: 27203442! hash ^ position hash + startPoint hash + buttons hash! ! !MouseMoveEvent methodsFor: 'testing' stamp: 'ar 9/13/2000 19:29' prior: 27204810! isMove ^true! ! !MouseMoveEvent methodsFor: 'printing' stamp: 'JMM 9/29/2004 13:25' prior: 27204076! printOn: aStream aStream nextPut: $[. aStream nextPutAll: self startPoint printString; space. aStream nextPutAll: self endPoint printString; space. aStream nextPutAll: self type; space. aStream nextPutAll: self modifierString. aStream nextPutAll: self buttonString. aStream nextPutAll: timeStamp printString; space. aStream nextPutAll: self windowIndex printString. aStream nextPut: $].! ! !MouseMoveEvent methodsFor: 'dispatching' stamp: 'ar 10/10/2000 21:15' prior: 27203574! sentTo: anObject "Dispatch the receiver into anObject" type == #mouseMove ifTrue:[^anObject handleMouseMove: self]. ^super sentTo: anObject. ! ! !MouseMoveEvent methodsFor: 'private' stamp: 'ar 10/5/2000 23:55' prior: 27205405! setType: evtType startPoint: evtStart endPoint: evtEnd trail: evtTrail buttons: evtButtons hand: evtHand stamp: stamp type := evtType. startPoint := evtStart. position := evtEnd. trail := evtTrail. buttons := evtButtons. source := evtHand. wasHandled := false. timeStamp := stamp.! ! !MouseMoveEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 16:25' prior: 27202819! startPoint "Return the point where the movement started." ^startPoint! ! !MouseMoveEvent methodsFor: 'printing' stamp: 'ar 10/24/2000 16:30' prior: 27204547! storeOn: aStream super storeOn: aStream. aStream space. self startPoint x storeOn: aStream. aStream space. self startPoint y storeOn: aStream. aStream space. "trail storeOn: aStream."! ! !MouseMoveEvent methodsFor: 'accessing' stamp: 'ar 10/24/2000 16:33' prior: 27202965! trail "Return any immediate points that have been assembled along the move" ^trail ifNil:[#()]! ! !MouseMoveEvent methodsFor: 'transforming' stamp: 'ar 9/15/2000 22:52' prior: 27204901! transformBy: aMorphicTransform "Transform the receiver into a local coordinate system." position := aMorphicTransform globalPointToLocal: position. startPoint := aMorphicTransform globalPointToLocal: startPoint.! ! !MouseMoveEvent methodsFor: 'transforming' stamp: 'ar 9/15/2000 22:52' prior: 27205194! translateBy: delta "add delta to cursorPoint, and return the new event" position := position + delta. startPoint := startPoint + delta.! ! !MouseWheelEvent commentStamp: 'gvc 9/23/2008 11:46' prior: 74463551! A mouse event generated by intercepting the keyboard events (ctrl+up/down arrow) generated by the VM in response to mouse wheel activity.! !MouseWheelEvent methodsFor: 'accessing' stamp: 'gvc 1/25/2008 17:40' prior: 27210247! direction "Answer the value of direction" ^ direction! ! !MouseWheelEvent methodsFor: 'accessing' stamp: 'gvc 1/25/2008 17:40' prior: 27210379! direction: anObject "Set the value of direction" direction := anObject! ! !MouseWheelEvent methodsFor: 'as yet unclassified' stamp: 'gvc 1/28/2008 13:14' prior: 27210539! isMouseWheel "Answer whether the receiver is a mouse wheel event." ^true! ! !MouseWheelEvent methodsFor: 'printing' stamp: 'GaryChambers 9/5/2011 13:44' prior: 48623543! printOn: aStream aStream nextPut: $[. aStream nextPutAll: self cursorPoint printString; space. aStream nextPutAll: type; space. aStream nextPutAll: self direction; space. aStream nextPutAll: self modifierString. aStream nextPutAll: self buttonString. aStream nextPutAll: timeStamp printString; space. aStream nextPutAll: self windowIndex printString. aStream nextPut: $].! ! !MouseWheelEvent methodsFor: 'as yet unclassified' stamp: 'gvc 1/25/2008 17:42' prior: 27211177! sentTo: anObject "Dispatch the receiver into anObject" type == #mouseWheel ifTrue:[^anObject handleMouseWheel: self]. ^super sentTo: anObject. ! ! !MouseWheelEvent methodsFor: 'as yet unclassified' stamp: 'gvc 1/28/2008 15:31' prior: 27211411! setType: evtType position: evtPos direction: dirSymbol buttons: evtButtons hand: evtHand stamp: stamp "Set the state for the receiver." type := evtType. position := evtPos. buttons := evtButtons. source := evtHand. wasHandled := false. direction := dirSymbol. timeStamp := stamp.! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:28' prior: 36455408! altKeyPressed "Answer true if the alt/option key on the keyboard was being held down when this event occurred." "00100000 is the bit that marks that option/alt has been pressed" ^self optionKeyPressed! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:31' prior: 36455719! anyModifierKeyPressed "ignore, however, the shift keys 'cause that's not REALLY a command key " ^ self buttons anyMask: 2r01110000 "cmd | opt | ctrl"! ! !UserInputEvent methodsFor: 'printing' stamp: 'ar 10/7/2000 21:57' prior: 54595253! buttonString "Return a string identifying the currently pressed buttons" | string | string := ''. self redButtonPressed ifTrue:[string := string,'red ']. self yellowButtonPressed ifTrue:[string := string,'yellow ']. self blueButtonPressed ifTrue:[string := string,'blue ']. ^string! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:45' prior: 54593052! buttons "Return the a word encoding the mouse and modifier buttons for this event." ^ buttons! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:32' prior: 36455978! commandKeyPressed "Answer true if the command key on the keyboard was being held down when this event occurred." "The mask for command bit pressed" ^ buttons anyMask: 2r01000000! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:32' prior: 36456266! controlKeyPressed "Answer true if the control key on the keyboard was being held down when this event occurred." "The mask for control bit pressed" ^ buttons anyMask: 2r00010000! ! !UserInputEvent methodsFor: 'initialize' stamp: 'ar 9/13/2000 15:54' prior: 54593868! copyHandlerState: anEvent "Copy the handler state from anEvent. Used for quickly transferring handler information between transformed events." handler := anEvent handler. wasHandled := anEvent wasHandled.! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:54' prior: 54593222! handler ^handler! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:54' prior: 54593313! handler: anObject handler := anObject! ! !UserInputEvent methodsFor: 'printing' stamp: 'ar 10/7/2000 21:56' prior: 54595614! modifierString "Return a string identifying the currently pressed modifiers" | string | string := ''. self commandKeyPressed ifTrue:[string := string,'CMD ']. self shiftPressed ifTrue:[string := string,'SHIFT ']. self controlKeyPressed ifTrue:[string := string,'CTRL ']. ^string! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'GuillermoPolito 4/21/2013 19:28' prior: 36456538! optionKeyPressed "Answer true if the alt/option key on the keyboard was being held down when this event occurred." "00100000 is the bit that marks that option/alt has been pressed" ^ buttons anyMask: 2r00100000! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/15/2000 22:45' prior: 54593425! position ^position! ! !UserInputEvent methodsFor: 'initialize' stamp: 'ar 9/13/2000 15:54' prior: 54594150! resetHandlerFields "Reset anything that is used to cross-communicate between two eventual handlers during event dispatch" handler := nil. wasHandled := false.! ! !UserInputEvent methodsFor: 'private' stamp: 'ar 10/24/2000 16:33' prior: 54596818! setPosition: aPoint position := aPoint! ! !UserInputEvent methodsFor: 'modifier state' stamp: 'ar 9/13/2000 15:44' prior: 54595049! shiftPressed "Answer true if the shift key on the keyboard was being held down when this event occurred." ^ buttons anyMask: 8 ! ! !UserInputEvent methodsFor: 'transforming' stamp: 'ar 10/9/2000 00:38' prior: 54595977! transformBy: aMorphicTransform "Transform the receiver into a local coordinate system." position := aMorphicTransform globalPointToLocal: position.! ! !UserInputEvent methodsFor: 'transforming' stamp: 'ar 10/9/2000 00:38' prior: 54596204! transformedBy: aMorphicTransform "Return the receiver transformed by the given transform into a local coordinate system." ^self shallowCopy transformBy: aMorphicTransform! ! !UserInputEvent methodsFor: 'transforming' stamp: 'ar 10/9/2000 00:37' prior: 54596453! translateBy: delta "add delta to cursorPoint, and return the new event" position := position + delta.! ! !UserInputEvent methodsFor: 'transforming' stamp: 'ar 10/9/2000 00:38' prior: 54596633! translatedBy: delta "add delta to cursorPoint, and return the new event" ^self shallowCopy translateBy: delta! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:45' prior: 54593518! type "Return a symbol indicating the type this event." ^ type! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:54' prior: 54593656! wasHandled ^wasHandled! ! !UserInputEvent methodsFor: 'accessing' stamp: 'ar 9/13/2000 15:54' prior: 54593753! wasHandled: aBool wasHandled := aBool.! ! !GrafPort methodsFor: 'accessing' stamp: 'ar 2/17/2000 01:07' prior: 23016754! alphaBits: a alpha := a! ! !GrafPort methodsFor: 'copying' stamp: 'ar 12/30/2001 20:32' prior: 23018089! clippedBy: aRectangle ^ self copy clipBy: aRectangle! ! !GrafPort methodsFor: 'accessing' stamp: 'ar 5/28/2000 14:41' prior: 23016846! contentsOfArea: aRectangle into: aForm destForm displayOn: aForm at: aRectangle origin clippingBox: (0@0 extent: aRectangle extent). ^aForm! ! !GrafPort methodsFor: 'copying' stamp: 'GuillermoPolito 9/1/2010 18:39' prior: 23018220! copyBits "Override copybits to do translucency if desired" (combinationRule >= 30 and: [combinationRule <= 31]) ifTrue: [self copyBitsTranslucent: (alpha ifNil:[255])] ifFalse: [super copyBits]! ! !GrafPort methodsFor: 'accessing' stamp: 'MarcusDenker 5/25/2011 21:08' prior: 23017074! displayScannerFor: para foreground: foreColor background: backColor ignoreColorChanges: shadowMode ^ (MultiDisplayScanner new text: para text textStyle: para textStyle foreground: foreColor background: backColor fillBlt: self ignoreColorChanges: shadowMode) setPort: self shallowCopy! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/16/2000 22:32' prior: 23018496! fillOval: rect | centerX centerY nextY yBias xBias outer nextOuterX | rect area <= 0 ifTrue: [^ self]. height := 1. yBias := rect height odd ifTrue: [0] ifFalse: [-1]. xBias := rect width odd ifTrue: [1] ifFalse: [0]. centerX := rect center x. centerY := rect center y. outer := EllipseMidpointTracer new on: rect. nextY := rect height // 2. [nextY > 0] whileTrue:[ nextOuterX := outer stepInY. width := (nextOuterX bitShift: 1) + xBias. destX := centerX - nextOuterX. destY := centerY - nextY. self copyBits. destY := centerY + nextY + yBias. self copyBits. nextY := nextY - 1. ]. destY := centerY. height := 1 + yBias. width := rect width. destX := rect left. self copyBits. ! ! !GrafPort methodsFor: 'accessing' stamp: 'ar 2/17/2000 01:09' prior: 23017828! fillPattern: anObject fillPattern := anObject. self fillColor: anObject.! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 5/17/2000 21:20' prior: 23019279! fillRect: rect offset: aPoint "The offset is really just for stupid InfiniteForms." | fc | fillPattern class == InfiniteForm ifTrue:[ fc := halftoneForm. self fillColor: nil. fillPattern displayOnPort: ((self clippedBy: rect) colorMap: nil) at: aPoint. halftoneForm := fc. ^self]. destX := rect left. destY := rect top. sourceX := 0. sourceY := 0. width := rect width. height := rect height. self copyBits.! ! !GrafPort methodsFor: 'drawing support' stamp: 'MarcusDenker 10/28/2010 14:02' prior: 23019791! frameOval: rect borderWidth: borderWidth | centerX centerY nextY yBias xBias wp outer inner nextOuterX nextInnerX | rect area <= 0 ifTrue: [^ self]. height := 1. wp := borderWidth asPoint. yBias := rect height odd ifTrue: [0] ifFalse: [-1]. xBias := rect width odd ifTrue: [1] ifFalse: [0]. centerX := rect center x. centerY := rect center y. outer := EllipseMidpointTracer new on: rect. inner := EllipseMidpointTracer new on: (rect insetBy: wp). nextY := rect height // 2. 1 to: (wp y min: nextY) do:[:i| nextOuterX := outer stepInY. width := (nextOuterX bitShift: 1) + xBias. destX := centerX - nextOuterX. destY := centerY - nextY. self copyBits. destY := centerY + nextY + yBias. self copyBits. nextY := nextY - 1. ]. [nextY > 0] whileTrue:[ nextOuterX := outer stepInY. nextInnerX := inner stepInY. destX := centerX - nextOuterX. destY := centerY - nextY. width := nextOuterX - nextInnerX. self copyBits. destX := centerX + nextInnerX + xBias. self copyBits. destX := centerX - nextOuterX. destY := centerY + nextY + yBias. self copyBits. destX := centerX + nextInnerX + xBias. self copyBits. nextY := nextY - 1. ]. destY := centerY. height := 1 + yBias. width := wp x. destX := rect left. self copyBits. destX := rect right - wp x. self copyBits. ! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/17/2000 14:44' prior: 23021184! frameRect: rect borderWidth: borderWidth sourceX := 0. sourceY := 0. (rect areasOutside: (rect insetBy: borderWidth)) do: [:edgeStrip | self destRect: edgeStrip; copyBits]. ! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/17/2000 01:08' prior: 23021436! frameRectBottom: rect height: h destX := rect left + 1. destY := rect bottom - 1. width := rect width - 2. height := 1. 1 to: h do: [:i | self copyBits. destX := destX + 1. destY := destY - 1. width := width - 2]. ! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/17/2000 01:08' prior: 23021738! frameRectRight: rect width: w width := 1. height := rect height - 1. destX := rect right - 1. destY := rect top + 1. 1 to: w do: [:i | self copyBits. destX := destX - 1. destY := destY + 1. height := height - 2]. ! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/17/2000 01:08' prior: 23022039! image: aForm at: aPoint sourceRect: sourceRect rule: rule "Draw the portion of the given Form defined by sourceRect at the given point using the given BitBlt combination rule." sourceForm := aForm. combinationRule := rule. self sourceRect: sourceRect. self destOrigin: aPoint. self copyBits! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 8/8/2001 14:26' prior: 23022409! image: aForm at: aPoint sourceRect: sourceRect rule: rule alpha: sourceAlpha "Draw the portion of the given Form defined by sourceRect at the given point using the given BitBlt combination rule." sourceForm := aForm. combinationRule := rule. self sourceRect: sourceRect. self destOrigin: aPoint. self copyBitsTranslucent: (alpha := (sourceAlpha * 255) truncated min: 255 max: 0).! ! !GrafPort methodsFor: 'private' stamp: 'yo 1/8/2005 09:12' prior: 23023136! installStrikeFont: aStrikeFont ^ self installStrikeFont: aStrikeFont foregroundColor: (lastFontForegroundColor ifNil: [Color black]) backgroundColor: (lastFontBackgroundColor ifNil: [Color transparent]). ! ! !GrafPort methodsFor: 'private' stamp: 'tween 6/8/2008 12:29' prior: 23023410! installStrikeFont: aStrikeFont foregroundColor: foregroundColor backgroundColor: backgroundColor super installStrikeFont: aStrikeFont foregroundColor: foregroundColor backgroundColor: backgroundColor. aStrikeFont glyphs depth = 1 ifTrue: [ alpha := foregroundColor privateAlpha. "dynamically switch between blend modes to support translucent text" "To handle the transition from TTCFont to StrikeFont, rule 34 must be taken into account." alpha = 255 ifTrue:[ combinationRule = 30 ifTrue: [combinationRule := Form over]. combinationRule = 31 ifTrue: [combinationRule := Form paint]. combinationRule = 34 ifTrue: [combinationRule := Form paint]. combinationRule = 41 ifTrue: [combinationRule := Form paint]. "41 is SPRmode" ] ifFalse:[ combinationRule = Form over ifTrue: [combinationRule := 30]. combinationRule = Form paint ifTrue: [combinationRule := 31]. combinationRule = 34 ifTrue: [combinationRule := 31]. combinationRule = 41 ifTrue: [combinationRule := 31]. "41 is SPR mode" ] ]. lastFont := aStrikeFont. lastFontForegroundColor := foregroundColor. lastFontBackgroundColor := backgroundColor. ! ! !GrafPort methodsFor: 'private' stamp: 'yo 1/8/2005 09:13' prior: 23024619! lastFont ^ lastFont. ! ! !GrafPort methodsFor: 'accessing' stamp: 'tween 4/5/2007 08:03' prior: 23017972! lastFontForegroundColor ^lastFontForegroundColor! ! !GrafPort methodsFor: 'drawing support' stamp: 'ar 2/17/2000 00:31' prior: 23022869! stencil: stencilForm at: aPoint sourceRect: aRect "Paint using aColor wherever stencilForm has non-zero pixels" self sourceForm: stencilForm; destOrigin: aPoint; sourceRect: aRect. self copyBits! ! "Morphic-Base"! "Morphic-Core"! ----End fileIn----! ----QUIT----an Array(17 October 2013 8:41:46 pm) Pharo.image priorSource: 24110998! ----STARTUP----an Array(17 October 2013 8:47:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(17 October 2013 8:47:16 pm) Pharo-30498.image priorSource: 24684278! ----STARTUP----an Array(18 October 2013 11:08:37 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/18/2013 11:03' prior: 74442957! commentForCurrentUpdate ^ '11928 failing testPackageInfoTest>>testGatherExtensionsFromSamePacka https://pharo.fogbugz.com/f/cases/11928 11939 Move some extending messages to the Morphic-Core package https://pharo.fogbugz.com/f/cases/11939 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/18/2013 11:03'! script154 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.226.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.635.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.64.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.161.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-EstebanLorenzano.961.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.111.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/18/2013 11:04'! update30499 "self new update30499" self withUpdateLog: '11928 failing testPackageInfoTest>>testGatherExtensionsFromSamePacka https://pharo.fogbugz.com/f/cases/11928 11939 Move some extending messages to the Morphic-Core package https://pharo.fogbugz.com/f/cases/11939 '. self loadTogether: self script154 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Form methodsFor: '*Morphic-Core' stamp: 'PavelKrivanek 11/18/2012 20:37' prior: 22451296! defaultCanvasClass "Return the default canvas used for drawing onto the receiver" ^ FormCanvas! ! !Form methodsFor: '*Morphic-Core' stamp: 'ar 5/28/2000 12:03' prior: 22451581! getCanvas "Return a Canvas that can be used to draw onto the receiver" ^self defaultCanvasClass on: self! ! !Object methodsFor: '*Morphic-Core' stamp: 'JuanVuletich 11/1/2010 15:18' prior: 28566723! currentWorld "Answer a morphic world that is the current UI focus." ^UIManager default currentWorld! ! !Color methodsFor: '*Morphic-Core' stamp: 'gvc 3/21/2008 16:35' prior: 19584142! fillRectangle: aRectangle on: aCanvas "Fill the given rectangle on the given canvas with the receiver." aCanvas fillRectangle: aRectangle basicFillStyle: self! ! !PackageInfoTest methodsFor: '*Tests-util' stamp: 'AlexandreBergel 5/26/2008 22:31' prior: 29026558! packageClass ^ PackageInfo! ! !PackageInfoTest methodsFor: '*Tests-util' stamp: 'PavelKrivanek 10/17/2013 21:18' prior: 29026668! testGatherExtensionsFromSamePackage | extensionMethod | extensionMethod := (PackageInfoTest>>#packageClass). self assert: (extensionMethod category beginsWith: '*'). self assert: (((PackageInfo named: 'Tests') extensionMethods collect: #method) includes: extensionMethod)! ! "Morphic-Base"! "Morphic-Core"! "Polymorph-Widgets"! "Tests"! ----End fileIn----! ----QUIT----an Array(18 October 2013 11:08:48 am) Pharo.image priorSource: 24684483! ----STARTUP----an Array(18 October 2013 11:14:26 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 October 2013 11:14:26 am) Pharo-30499.image priorSource: 24697937! ----STARTUP----an Array(18 October 2013 1:52:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 10/18/2013 13:48' prior: 75016443! commentForCurrentUpdate ^ '11835 Cannnot revert https://pharo.fogbugz.com/f/cases/11835 11924 Resize the morph while inspecting it https://pharo.fogbugz.com/f/cases/11924 11915 #joinUsing:last: incorrect for single item collection https://pharo.fogbugz.com/f/cases/11915 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 10/18/2013 13:49'! script155 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-MarcusDenker.36.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.124.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.162.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-EstebanLorenzano.961.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-EstebanLorenzano.114.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.151.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.282.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1329.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 10/18/2013 13:49'! update30500 "self new update30500" self withUpdateLog: '11835 Cannnot revert https://pharo.fogbugz.com/f/cases/11835 11924 Resize the morph while inspecting it https://pharo.fogbugz.com/f/cases/11924 11915 #joinUsing:last: incorrect for single item collection https://pharo.fogbugz.com/f/cases/11915 '. self loadTogether: self script155 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeMorphViewer class methodsFor: 'spec' stamp: 'BenjaminVanRyseghem 10/17/2013 17:32' prior: 68639798! inspectorSpec ^ SpecLayout composed add: #container yourself! ! !EyeMorphViewer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:46' prior: 74088039! container ^ container ifNil: [ container := (PanelMorph new changeProportionalLayout) asSpecAdapter vSpaceFill; hSpaceFill]! ! !EyeMorphViewer methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 17:29'! initialize super initialize. updateProcess := [ self objectChanged. self hasWindow ifFalse: [ updateProcess terminate ] ] valueWithInterval: self updateTime.! ! !EyeMorphViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 17:28'! initializePresenter self whenWindowChanged: [ self objectChanged ]! ! !EyeMorphViewer methodsFor: 'event-handling' stamp: 'BenjaminVanRyseghem 10/17/2013 18:09' prior: 74088283! objectChanged | newThumbnail | newThumbnail := self thumbnailMorph. newThumbnail when: #extent send: #resize: to: newThumbnail. self container morph removeAllMorphs. self container morph addMorph: newThumbnail fullFrame: LayoutFrame identity! ! !SplitJoinTest methodsFor: 'running' stamp: 'BenComan 10/17/2013 15:13' prior: 50746304! testJoinUsingLastOnArray { { 1. 2. 3 } -> '1, 2 and 3' . { 1. 2 } -> '1 and 2' . { 1 } -> '1' . { } -> ''. } asDictionary keysAndValuesDo: [ :testCollection :resultString | self assert: ( testCollection joinUsing: ', ' last: ' and ') equals: resultString. ] ! ! !ImageMorph methodsFor: 'geometry' stamp: 'BenjaminVanRyseghem 10/17/2013 18:08' prior: 23542003! extent: aPoint "Do nothing; my extent is determined by my image Form." self triggerEvent: #extent with: aPoint! ! !ImageMorph methodsFor: '*Spec-Inspector' stamp: 'BenjaminVanRyseghem 10/17/2013 18:10'! resize: newSize self form: (image scaledToSize: newSize)! ! !SequenceableCollection methodsFor: 'splitjoin' stamp: 'BenComan 10/17/2013 15:14' prior: 33031297! joinUsing: joiner last: last "#(1 2 3 4) joinUsing: ', ' last: 'and'. => '1, 2, 3 and 4" (self size = 0) ifTrue: [ ^ '' ]. (self size = 1) ifTrue: [ ^ self first asString ]. ^ last join: (Array with: (joiner join: self allButLast) with: self last)! ! !PragmaMenuBuilder methodsFor: 'menu building' stamp: 'BenComan 10/15/2013 14:03' prior: 29927146! buildTree "Retrieve all menu registrations with the help of a PragmaCollector then, reorganise the tree and sort it - see class comment for more informations" itemList := OrderedCollection new. self collectRegistrations. self arrangeRegistrations. self sortRegistrations! ! EyeMorphViewer removeSelector: #initializeWidgets! "Collections-Abstract"! "CollectionsTests"! "MenuRegistration"! "Morphic-Base"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(18 October 2013 1:52:41 pm) Pharo.image priorSource: 24698144! ----STARTUP----an Array(18 October 2013 1:58:11 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 October 2013 1:58:11 pm) Pharo-30500.image priorSource: 24713175! ----STARTUP----an Array(18 October 2013 3:09:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 10/18/2013 15:06' prior: 75030104! commentForCurrentUpdate ^ '- Issue 11948 Finally really sorting the methods in the FileContentsBrowser https://pharo.fogbugz.com/f/cases/11948 - Issue 11519 Merge Color and Translucent Color https://pharo.fogbugz.com/f/cases/11519'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/18/2013 15:06'! script156 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.128.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-MarcusDenker.171.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-EstebanLorenzano.114.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1330.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/18/2013 15:06'! update30501 "self new update30501" self withUpdateLog: '- Issue 11948 Finally really sorting the methods in the FileContentsBrowser https://pharo.fogbugz.com/f/cases/11948 - Issue 11519 Merge Color and Translucent Color https://pharo.fogbugz.com/f/cases/11519'. self loadTogether: self script156 merge: false. NewColor initialize. self flushCaches. ! ! "ScriptLoader30"! !NewColor commentStamp: '' prior: 0! This class represents abstract color, regardless of the depth of bitmap it will be shown in. At the very last moment a Color is converted to a pixelValue that depends on the depth of the actual Bitmap inside the Form it will be used with. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. (See comment in BitBlt.) To change the depth of the Display and set how many colors you can see, execute: (Display newDepth: 8). (See comment in DisplayMedium) Color is represented as the amount of light in red, green, and blue. White is (1.0, 1.0, 1.0) and black is (0, 0, 0). Pure red is (1.0, 0, 0). These colors are "additive". Think of Color's instance variables as: r amount of red, a Float between 0.0 and 1.0. g amount of green, a Float between 0.0 and 1.0. b amount of blue, a Float between 0.0 and 1.0. (But, in fact, the three are encoded as values from 0 to 1023 and combined in a single integer, rgb. The user does not need to know this.) Many colors are named. You find a color by name by sending a message to class Color, for example (Color lightBlue). Also, (Color red: 0.2 green: 0.6 blue: 1.0) or (Color r: 0.2 g: 0.6 b: 1.0) creates a color. (see below) A color is essentially immutable. Once you set red, green, and blue, you cannot change them. Instead, create a new Color and use it. Applications such as contour maps and bar graphs will want to display one of a set of shades based on a number. Convert the range of this number to an integer from 1 to N. Then call (Color green lightShades: N) to get an Array of colors from white to green. Use the Array messages at:, atPin:, or atWrap: to pull out the correct color from the array. atPin: gives the first (or last) color if the index is out of range. atWrap: wraps around to the other end if the index is out of range. Here are some fun things to run in when your screen has color: Pen new mandala: 30 diameter: Display height-100. Pen new web "Draw with the mouse, opt-click to end" Display fillWhite. Pen new hilberts: 5. Form toothpaste: 30 "Draw with mouse, opt-click to end" You might also want to try the comment in Form>class>examples>tinyText... Messages: mixed: proportion with: aColor Answer this color mixed with the given color additively. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. + add two colors - subtract two colors * multiply the values of r, g, b by a number or an Array of factors. ((Color named: #white) * 0.3) gives a darkish gray. (aColor * #(0 0 0.9)) gives a color with slightly less blue. / divide a color by a factor or an array of three factors. errorForDepth: d How close the nearest color at this depth is to this abstract color. Sum of the squares of the RGB differences, square rooted and normalized to 1.0. Multiply by 100 to get percent. hue Returns the hue of the color. On a wheel from 0 to 360 with pure red at 0 and again at 360. saturation Returns the saturation of the color. 0.0 to 1.0 brightness Returns the brightness of the color. 0.0 to 1.0 name Look to see if this Color has a name. display Show a swatch of this color tracking the cursor. lightShades: thisMany An array of thisMany colors from white to the receiver. darkShades: thisMany An array of thisMany colors from black to the receiver. Array is of length num. mix: color2 shades: thisMany An array of thisMany colors from the receiver to color2. wheel: thisMany An array of thisMany colors around the color wheel starting and ending at the receiver. pixelValueForDepth: d Returns the bits that appear be in a Bitmap of this depth for this color. Represents the nearest available color at this depth. Normal users do not need to know which pixelValue is used for which color. Messages to Class Color. red: r green: g blue: b Return a color with the given r, g, and b components. r: g: b: Same as above, for fast typing. hue: h saturation: s brightness: b Create a color with the given hue, saturation, and brightness. pink blue red ... Many colors have messages that return an instance of Color. canUnderstand: #brown Returns true if #brown is a defined color. names An OrderedCollection of the names of the colors. named: #notAllThatGray put: aColor Add a new color to the list and create an access message and a class variable for it. fromUser Shows the palette of colors available at this display depth. Click anywhere to return the color you clicked on. hotColdShades: thisMany An array of thisMany colors showing temperature from blue to red to white hot. stdColorsForDepth: d An Array of colors available at this depth. For 16 bit and 32 bits, returns a ColorGenerator. It responds to at: with a Color for that index, simulating a very big Array. colorFromPixelValue: value depth: d Returns a Color whose bit pattern (inside a Bitmap) at this depth is the number specified. Normal users do not need to use this. (See also comments in these classes: Form, Bitmap, BitBlt, Pattern, MaskedForm.)! !FileContentsBrowser methodsFor: 'creation' stamp: 'SD 10/18/2013 14:26'! messageList "Answer an Array of the message selectors of the currently selected message category, provided that the messageCategoryListIndex is in proper range. Otherwise, answer an empty Array If messageCategoryListIndex is found to be larger than the number of categories (it happens!!), it is reset to zero." ^ super messageList sorted! ! !NewColor commentStamp: '' prior: 75057127! This class represents abstract color, regardless of the depth of bitmap it will be shown in. At the very last moment a Color is converted to a pixelValue that depends on the depth of the actual Bitmap inside the Form it will be used with. The supported depths (in bits) are 1, 2, 4, 8, 16, and 32. The number of actual colors at these depths are: 2, 4, 16, 256, 32768, and 16 million. (See comment in BitBlt.) To change the depth of the Display and set how many colors you can see, execute: (Display newDepth: 8). (See comment in DisplayMedium) Color is represented as the amount of light in red, green, and blue. White is (1.0, 1.0, 1.0) and black is (0, 0, 0). Pure red is (1.0, 0, 0). These colors are "additive". Think of Color's instance variables as: r amount of red, a Float between 0.0 and 1.0. g amount of green, a Float between 0.0 and 1.0. b amount of blue, a Float between 0.0 and 1.0. (But, in fact, the three are encoded as values from 0 to 1023 and combined in a single integer, rgb. The user does not need to know this.) Many colors are named. You find a color by name by sending a message to class Color, for example (Color lightBlue). Also, (Color red: 0.2 green: 0.6 blue: 1.0) or (Color r: 0.2 g: 0.6 b: 1.0) creates a color. (see below) A color is essentially immutable. Once you set red, green, and blue, you cannot change them. Instead, create a new Color and use it. Applications such as contour maps and bar graphs will want to display one of a set of shades based on a number. Convert the range of this number to an integer from 1 to N. Then call (Color green lightShades: N) to get an Array of colors from white to green. Use the Array messages at:, atPin:, or atWrap: to pull out the correct color from the array. atPin: gives the first (or last) color if the index is out of range. atWrap: wraps around to the other end if the index is out of range. Here are some fun things to run in when your screen has color: Pen new mandala: 30 diameter: Display height-100. Pen new web "Draw with the mouse, opt-click to end" Display fillWhite. Pen new hilberts: 5. Form toothpaste: 30 "Draw with mouse, opt-click to end" You might also want to try the comment in Form>class>examples>tinyText... Messages: mixed: proportion with: aColor Answer this color mixed with the given color additively. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. + add two colors - subtract two colors * multiply the values of r, g, b by a number or an Array of factors. ((Color named: #white) * 0.3) gives a darkish gray. (aColor * #(0 0 0.9)) gives a color with slightly less blue. / divide a color by a factor or an array of three factors. errorForDepth: d How close the nearest color at this depth is to this abstract color. Sum of the squares of the RGB differences, square rooted and normalized to 1.0. Multiply by 100 to get percent. hue Returns the hue of the color. On a wheel from 0 to 360 with pure red at 0 and again at 360. saturation Returns the saturation of the color. 0.0 to 1.0 brightness Returns the brightness of the color. 0.0 to 1.0 name Look to see if this Color has a name. display Show a swatch of this color tracking the cursor. lightShades: thisMany An array of thisMany colors from white to the receiver. darkShades: thisMany An array of thisMany colors from black to the receiver. Array is of length num. mix: color2 shades: thisMany An array of thisMany colors from the receiver to color2. wheel: thisMany An array of thisMany colors around the color wheel starting and ending at the receiver. pixelValueForDepth: d Returns the bits that appear be in a Bitmap of this depth for this color. Represents the nearest available color at this depth. Normal users do not need to know which pixelValue is used for which color. Messages to Class Color. red: r green: g blue: b Return a color with the given r, g, and b components. r: g: b: Same as above, for fast typing. hue: h saturation: s brightness: b Create a color with the given hue, saturation, and brightness. pink blue red ... Many colors have messages that return an instance of Color. canUnderstand: #brown Returns true if #brown is a defined color. names An OrderedCollection of the names of the colors. named: #notAllThatGray put: aColor Add a new color to the list and create an access message and a class variable for it. fromUser Shows the palette of colors available at this display depth. Click anywhere to return the color you clicked on. hotColdShades: thisMany An array of thisMany colors showing temperature from blue to red to white hot. stdColorsForDepth: d An Array of colors available at this depth. For 16 bit and 32 bits, returns a ColorGenerator. It responds to at: with a Color for that index, simulating a very big Array. colorFromPixelValue: value depth: d Returns a Color whose bit pattern (inside a Bitmap) at this depth is the number specified. Normal users do not need to use this. (See also comments in these classes: Form, Bitmap, BitBlt, Pattern, MaskedForm.)! !NewColor class methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 10/18/2013 14:33'! aaFontsColormapDepth "Adjust balance between colored AA text quality (especially if subpixel AA is used) and space / performance. 5 is optimal quality. Each colorMap takes 128kB of RAM, and takes several seconds to build. 4 is a reasonable balance. Each colorMap takes 16kB of RAM and builds fast on a fast machine. 3 is good for slow hardware or memory restrictions. Each colorMap takes 2 kb of RAM." ^ 4! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:34'! black ^ ColorRegistry at: #black! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! blue ^ ColorRegistry at: #blue! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! brown ^ ColorRegistry at: #brown! ! !NewColor class methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 10/18/2013 14:34'! cachedColormapFrom: sourceDepth to: destDepth "Return a cached colormap for mapping between the given depths. Always return a real colormap, not nil; this allows the client to get an identity colormap that can then be copied and modified to do color transformations." "Note: This method returns a shared, cached colormap to save time and space. Clients that need to modify a colormap returned by this method should make a copy and modify that!!" "Note: The colormap cache may be cleared by evaluating 'NewColor shutDown'." | srcIndex map | CachedColormaps class == Array ifFalse: [ CachedColormaps := (1 to: 9) collect: [ :i | Array new: 32 ] ]. srcIndex := sourceDepth. sourceDepth > 8 ifTrue: [ srcIndex := 9 ]. (map := (CachedColormaps at: srcIndex) at: destDepth) ~~ nil ifTrue: [ ^ map ]. map := self computeColormapFrom: sourceDepth to: destDepth. (CachedColormaps at: srcIndex) at: destDepth put: map. ^ map! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:10'! colorFrom: parm "Return an instantiated color from parm. If parm is already a color, return it, else return the result of my performing it if it's a symbol or, if it is a list, it can either be an array of three numbers, which will be interpreted as RGB values, or a list of symbols, the first of which is sent to me and then the others of which are in turn sent to the prior result, thus allowing entries of the form #(blue darker). Else just return the thing" | aColor firstParm | (parm isKindOf: NewColor) ifTrue: [^ parm]. (parm isSymbol) ifTrue: [^ self perform: parm]. (parm isString) ifTrue: [^ self fromString: parm]. ((parm isKindOf: SequenceableCollection) and: [parm size > 0]) ifTrue: [firstParm := parm first. (firstParm isKindOf: Number) ifTrue: [^ self fromRgbTriplet: parm]. aColor := self colorFrom: firstParm. parm doWithIndex: [:sym :ind | ind > 1 ifTrue: [aColor := aColor perform: sym]]. ^ aColor]. ^ parm " Color colorFrom: #(blue darker) Color colorFrom: Color blue darker Color colorFrom: #blue Color colorFrom: #(0.0 0.0 1.0) "! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:12'! colorFromPixelValue: p depth: d "Convert a pixel value for the given display depth into a color." "Details: For depths of 8 or less, the pixel value is simply looked up in a table. For greater depths, the color components are extracted and converted into a color." | r g b alpha | d = 8 ifTrue: [ ^ IndexedColors at: (p bitAnd: 255) + 1 ]. d = 4 ifTrue: [ ^ IndexedColors at: (p bitAnd: 15) + 1 ]. d = 2 ifTrue: [ ^ IndexedColors at: (p bitAnd: 3) + 1 ]. d = 1 ifTrue: [ ^ IndexedColors at: (p bitAnd: 1) + 1 ]. d = 16 | (d = 15) ifTrue: [ "five bits per component" r := (p bitShift: -10) bitAnd: 31. g := (p bitShift: -5) bitAnd: 31. b := p bitAnd: 31. (r = 0 and: [ g = 0 ]) ifTrue: [ b = 0 ifTrue: [ ^ self transparent ]. b = 1 ifTrue: [ ^ self black ] ]. ^ self r: r g: g b: b range: 31 ]. d = 32 ifTrue: [ "eight bits per component; 8 bits of alpha" r := (p bitShift: -16) bitAnd: 255. g := (p bitShift: -8) bitAnd: 255. b := p bitAnd: 255. alpha := p bitShift: -24. alpha = 0 ifTrue: [ ^ self transparent ]. (r = 0 and: [ g = 0 and: [ b = 0 ] ]) ifTrue: [ ^ self transparent ]. alpha < 255 ifTrue: [ ^ (self r: r g: g b: b range: 255) alpha: alpha asFloat / 255.0 ] ifFalse: [ ^ self r: r g: g b: b range: 255 ] ]. d = 12 ifTrue: [ "four bits per component" r := (p bitShift: -8) bitAnd: 15. g := (p bitShift: -4) bitAnd: 15. b := p bitAnd: 15. ^ self r: r g: g b: b range: 15 ]. d = 9 ifTrue: [ "three bits per component" r := (p bitShift: -6) bitAnd: 7. g := (p bitShift: -3) bitAnd: 7. b := p bitAnd: 7. ^ self r: r g: g b: b range: 7 ]. self error: 'unknown pixel depth: ' , d printString! ! !NewColor class methodsFor: 'colormaps' stamp: 'StephaneDucasse 10/16/2013 15:12'! colorMapIfNeededFrom: sourceDepth to: destDepth "Return a colormap for mapping between the given depths, or nil if no colormap is needed." "Note: This method returns a shared, cached colormap to save time and space. Clients that need to modify a colormap returned by this method should make a copy and modify that!!" sourceDepth = destDepth ifTrue: [^ nil]. "not needed if depths are the same" (sourceDepth >= 16) & (destDepth >= 16) ifTrue: [ "mapping is done in BitBlt by zero-filling or truncating each color component" ^ nil]. ^ self cachedColormapFrom: sourceDepth to: destDepth ! ! !NewColor class methodsFor: 'color from user' stamp: 'StephaneDucasse 10/16/2013 15:13'! colorPaletteForDepth: depth extent: chartExtent "Display a palette of colors sorted horizontally by hue and vertically by lightness. Useful for eyeballing the color gamut of the display, or for choosing a color interactively." "Note: It is slow to build this palette, so it should be cached for quick access." "(Color colorPaletteForDepth: 16 extent: 190@60) display" | basicHue x y startHue palette transHt vSteps transCaption grayWidth hSteps | palette := Form extent: chartExtent depth: depth. transCaption := (Form extent: 34@9 depth: 1 fromArray: #(0 0 256 0 256 0 3808663859 2147483648 2491688266 2147483648 2491688266 0 2491688266 0 2466486578 0 0 0) offset: 0@0). transHt := transCaption height. palette fillWhite: (0@0 extent: palette width@transHt). palette fillBlack: (0@transHt extent: palette width@1). transCaption displayOn: palette at: palette boundingBox topCenter - ((transCaption width // 2)@0). grayWidth := 10. startHue := 338.0. vSteps := palette height - transHt // 2. hSteps := palette width - grayWidth. x := 0. startHue to: startHue + 360.0 by: 360.0/hSteps do: [ :h | basicHue := Color h: h asFloat s: 1.0 v: 1.0. y := transHt+1. 0 to: vSteps do: [ :n | | c | c := basicHue mixed: (n asFloat / vSteps asFloat) with: self white. palette fill: (x@y extent: 1@1) fillColor: c. y := y + 1]. 1 to: vSteps do: [ :n | | c | c := self black mixed: (n asFloat / vSteps asFloat) with: basicHue. palette fill: (x@y extent: 1@1) fillColor: c. y := y + 1]. x := x + 1]. y := transHt + 1. 1 to: vSteps * 2 do: [ :n | | c | c := self black mixed: (n asFloat / (vSteps*2) asFloat) with: self white. palette fill: (x@y extent: 10@1) fillColor: c. y := y + 1]. ^ palette! ! !NewColor class methodsFor: 'colormaps' stamp: 'FernandoOlivero 9/17/2013 21:35'! computeColorConvertingMap: targetColor from: sourceDepth to: destDepth keepSubPixelAA: keepSubPix sourceDepth < 16 ifTrue: [ "source is 1-, 2-, 4-, or 8-bit indexed color. Assumed not to include subpixelAA" ^ self computeIndexedColorConvertingMap: targetColor from: sourceDepth to: destDepth ] ifFalse: [ "source is 16-bit or 32-bit RGB. Might include subpixelAA" ^ self computeRGBColorConvertingMap: targetColor to: destDepth keepSubPixelAA: keepSubPix ]! ! !NewColor class methodsFor: 'colormaps' stamp: 'FernandoOlivero 9/17/2013 21:35'! computeColormapFrom: sourceDepth to: destDepth "Compute a colorMap for translating between the given depths. A colormap is a Bitmap whose entries contain the pixel values for the destination depth. Typical clients use cachedColormapFrom:to: instead." | map bitsPerColor | sourceDepth < 16 ifTrue: [ "source is 1-, 2-, 4-, or 8-bit indexed color" map := (IndexedColors copyFrom: 1 to: (1 bitShift: sourceDepth)) collect: [ :c | c pixelValueForDepth: destDepth ]. map := map as: Bitmap ] ifFalse: [ "source is 16-bit or 32-bit RGB" destDepth > 8 ifTrue: [ bitsPerColor := 5 "retain maximum color resolution" ] ifFalse: [ bitsPerColor := 4 ]. map := self computeRGBColormapFor: destDepth bitsPerColor: bitsPerColor ]. "Note: zero is transparent except when source depth is one-bit deep" sourceDepth > 1 ifTrue: [ map at: 1 put: 0 ]. ^ map! ! !NewColor class methodsFor: 'colormaps' stamp: 'StephaneDucasse 10/16/2013 15:15'! computeIndexedColorConvertingMap: targetColor from: sourceDepth to: destDepth | map | map := (IndexedColors copyFrom: 1 to: (1 bitShift: sourceDepth)) collect: [ :cc | | f c | f := 1.0 - ((cc red + cc green + cc blue) / 3.0). c := targetColor notNil ifTrue: [ destDepth = 32 ifTrue: [ targetColor * f alpha: f ] ifFalse: [ targetColor alphaMixed: f * 1.5 with: self white ] ] ifFalse: [ cc ]. destDepth = 32 ifTrue: [ c pixelValueForDepth: destDepth ] ifFalse: [ f = 0.0 ifTrue: [ 0 ] ifFalse: [ c pixelValueForDepth: destDepth ] ] ]. map := map as: Bitmap. ^ map! ! !NewColor class methodsFor: 'colormaps' stamp: 'StephaneDucasse 10/16/2013 15:16'! computeRGBColorConvertingMap: targetColor to: destDepth keepSubPixelAA: keepSubPix "Builds a colormap intended to convert from subpixelAA black values to targetColor values. keepSubPix ifTrue: [ Answer colors that also include subpixelAA ] ifFalse: [ Take fullpixel luminance level. Apply it to targetColor. I.e. answer colors with NO subpixelAA ]" | mask map c bitsPerColor r g b f v | destDepth > 8 ifTrue: [ bitsPerColor := 5 "retain maximum color resolution" ] ifFalse: [ bitsPerColor := 4 ]. "Usually a bit less is enough, but make it configurable" bitsPerColor := bitsPerColor min: self aaFontsColormapDepth. mask := (1 bitShift: bitsPerColor) - 1. map := Bitmap new: (1 bitShift: 3 * bitsPerColor). 0 to: map size - 1 do: [ :i | r := (i bitShift: 0 - (2 * bitsPerColor)) bitAnd: mask. g := (i bitShift: 0 - bitsPerColor) bitAnd: mask. b := (i bitShift: 0) bitAnd: mask. f := 1.0 - ((r + g + b) / 3.0 / mask). c := targetColor notNil ifTrue: [ (keepSubPix and: [ destDepth > 8 ]) ifTrue: [ self r: (1.0 - (r / mask)) * targetColor red g: (1.0 - (g / mask)) * targetColor green b: (1.0 - (b / mask)) * targetColor blue alpha: f * targetColor alpha "alpha will be ignored below, in #pixelValueForDepth: if destDepth ~= 32" ] ifFalse: [ destDepth = 32 ifTrue: [ targetColor * f alpha: f * targetColor alpha ] ifFalse: [ targetColor alphaMixed: f * 1.5 with: self white ] ] ] ifFalse: [ self r: r g: g b: b range: mask ]. "This is currently used only to keep some SubPixelAA on destDepth = 8, using a single pass of rule 25" v := destDepth = 32 ifTrue: [ c pixelValueForDepth: destDepth ] ifFalse: [ f < 0.1 ifTrue: [ 0 ] ifFalse: [ c pixelValueForDepth: destDepth ] ]. map at: i + 1 put: v ]. ^ map! ! !NewColor class methodsFor: 'colormaps' stamp: 'StephaneDucasse 10/16/2013 15:16'! computeRGBColormapFor: destDepth bitsPerColor: bitsPerColor "Compute a colorMap for translating from 16-bit or 32-bit RGB color to the given depth, using the given number of of bits per color component." | mask map c | (#(3 4 5 ) includes: bitsPerColor) ifFalse: [ self error: 'BitBlt only supports 3, 4, or 5 bits per color component' ]. mask := (1 bitShift: bitsPerColor) - 1. map := Bitmap new: (1 bitShift: 3 * bitsPerColor). 0 to: map size - 1 do: [ :i | c := self r: ((i bitShift: 0 - (2 * bitsPerColor)) bitAnd: mask) g: ((i bitShift: 0 - bitsPerColor) bitAnd: mask) b: ((i bitShift: 0) bitAnd: mask) range: mask. map at: i + 1 put: (c pixelValueForDepth: destDepth) ]. map at: 1 put: (self transparent pixelWordForDepth: destDepth). "zero always transparent" ^ map! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! cyan ^ ColorRegistry at: #cyan! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! darkGray ^ ColorRegistry at: #darkGray! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors ^{ #black. 0. 0. 0. #veryVeryDarkGray. 0.125. 0.125. 0.125. #veryDarkGray. 0.25. 0.25. 0.25. #darkGray. 0.375. 0.375. 0.375. #gray. 0.5. 0.5. 0.5. #lightGray. 0.625. 0.625. 0.625. #veryLightGray. 0.75. 0.75. 0.75. #veryVeryLightGray. 0.875. 0.875. 0.875. #white. 1.0. 1.0. 1.0. } ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors2 ^{ #red. 1.0. 0. 0. #yellow. 1.0. 1.0. 0. #green. 0. 1.0. 0. #cyan. 0. 1.0. 1.0. #blue. 0. 0. 1.0. #magenta. 1.0. 0. 1.0. #brown. 0.6. 0.2. 0. #orange. 1.0. 0.6. 0. #lightRed. 1.0. 0.8. 0.8. } ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors3 ^{ #lightYellow. 1.0. 1.0. 0.8. #lightGreen. 0.8. 1.0. 0.6. #lightCyan. 0.4. 1.0. 1.0. #lightBlue. 0.8. 1.0. 1.0. #lightMagenta. 1.0. 0.8. 1.0. #lightBrown. 1.0. 0.6. 0.2. #lightOrange. 1.0. 0.8. 0.4. #pink. 1.0. 0.752899. 0.796118. #purple. 0.4. 0.0. 0.6. #tan. 0.8. 0.8. 0.5. #veryPaleRed. 1.0. 0.948. 0.948. #paleYellow. 1.0. 1.0. 0.85. #paleTan. 0.921. 0.878. 0.78. }! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:27'! defaultColors4 ^{ #paleRed. 1.0. 0.901. 0.901. #palePeach. 1.0. 0.929. 0.835. #paleOrange. 0.991. 0.929. 0.843. #paleMagenta. 1.0. 0.901. 1.0. #paleGreen. 0.874. 1.0. 0.835. #paleBuff. 0.995. 0.979. 0.921. #paleBlue. 0.87. 0.976. 0.995. }! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:18'! fromArray: colorDef colorDef size = 3 ifTrue: [^self r: (colorDef at: 1) g: (colorDef at: 2) b: (colorDef at: 3)]. colorDef size = 0 ifTrue: [^self transparent]. colorDef size = 4 ifTrue: [^(self r: (colorDef at: 1) g: (colorDef at: 2) b: (colorDef at: 3)) alpha: (colorDef at: 4)]. self error: 'Undefined color definition'! ! !NewColor class methodsFor: 'instance creation' stamp: 'FernandoOlivero 9/17/2013 21:35'! fromHexString: aColorHex | green red blue | red := (Integer readFrom: (aColorHex first: 2) base: 16) / 255. green := (Integer readFrom: (aColorHex copyFrom: 3 to: 4) base: 16) / 255. blue := (Integer readFrom: (aColorHex last: 2) base: 16) / 255. ^self r: red g: green b: blue! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:18'! fromRgbTriplet: list ^ self r: list first g: list second b: list last! ! !NewColor class methodsFor: 'instance creation' stamp: 'FernandoOlivero 9/17/2013 21:35'! fromString: aString "for HTML color spec: #FFCCAA or white/black" "NewColor fromString: '#FFCCAA'. NewColor fromString: 'orange'" | aColorHex namedColor | aString isEmptyOrNil ifTrue: [ ^self white ]. aColorHex := aString first = $# ifTrue: [ aString allButFirst ] ifFalse: [ aString ]. "try to match aColorHex with known named colors, case insensitive." namedColor := self registeredColorNames detect:[:each| each sameAs: aColorHex ] ifNone: nil . namedColor notNil ifTrue:[ ^ self named: namedColor ]. (aColorHex size = 6 and: [ aColorHex allSatisfy: [ :character | '0123456789ABCDEFabcdef' includes: character ] ]) ifTrue: [ ^self fromHexString: aColorHex ] ifFalse: [ ^self white ]! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! gray ^ ColorRegistry at: #gray! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:19'! gray: brightness "Return a gray shade with the given brightness in the range [0.0..1.0]." ^ self r: brightness g: brightness b: brightness ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! green ^ ColorRegistry at: #green! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:20'! h: hue s: saturation v: brightness "Create a color with the given hue, saturation, and brightness. Hue is given as the angle in degrees of the color on the color circle where red is zero degrees. Saturation and brightness are numbers in [0.0..1.0] where larger values are more saturated or brighter colors. For example, (NewColor h: 0 s: 1 v: 1) is pure red." "Note: By convention, brightness is abbreviated 'v' to to avoid confusion with blue." ^ self h: hue s: saturation v: brightness alpha: 1.0! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:20'! h: hue s: saturation v: brightness alpha: alpha ^ self basicNew intializeHue: hue saturation: saturation brightness: brightness alpha: alpha ; yourself ! ! !NewColor class methodsFor: 'other' stamp: 'FernandoOlivero 9/17/2013 21:35'! hex: aFloat "Return an hexadecimal two-digits string between 00 and FF for a float between 0.0 and 1.0" | str | str := ((aFloat * 255) asInteger printStringHex) asLowercase. str size = 1 ifTrue: [^'0',str] ifFalse: [^str]! ! !NewColor class methodsFor: 'other' stamp: 'FernandoOlivero 9/17/2013 21:35'! indexedColors ^ IndexedColors! ! !NewColor class methodsFor: 'initialization' stamp: 'StephaneDucasse 10/16/2013 15:20'! initialize "self initialize Details: Externally, the red, green, and blue components of color are floats in the range [0.0..1.0]. Internally, they are represented as integers in the range [0..ComponentMask] packing into a small integer to save space and to allow fast hashing and equality testing. For a general description of color representations for computer graphics, including the relationship between the RGB and HSV color models used here, see Chapter 17 of Foley and van Dam, Fundamentals of Interactive Computer Graphics, Addison-Wesley, 1982." ComponentMask := 1023. HalfComponentMask := 512. "used to round up in integer calculations" ComponentMax := 1023.0. "a Float used to normalize components" RedShift := 20. GreenShift := 10. BlueShift := 0. RandomStream := Random new. self initializeIndexedColors. self initializeColorRegistry. self initializeGrayToIndexMap. ! ! !NewColor class methodsFor: 'initialization' stamp: 'StephaneDucasse 10/16/2013 15:21'! initializeColorRegistry | values| ColorRegistry := IdentityDictionary new. values := self defaultColors, self defaultColors2, self defaultColors3, self defaultColors4. 1 to: values size by: #(name r g b) size do:[:index| | colorName red green blue color | colorName := values at: index. red := values at: index + 1. green := values at: index + 2. blue := values at: index +3. color := self r: red g: green b: blue . self registerColor: color named: colorName ]. self registerColor: (self r: 0 g: 0 b: 0 alpha: 0.0) named: #transparent. ! ! !NewColor class methodsFor: 'initialization' stamp: 'StephaneDucasse 10/18/2013 11:09'! initializeGrayToIndexMap "Build an array of gray values available in the 8-bit colormap. This array is indexed by a gray level between black (1) and white (256) and returns the pixel value for the corresponding gray level." "Note: This method must be called after initializeIndexedColors, since it uses IndexedColors." "Color initializeGrayToIndexMap" "record the level and index of each gray in the 8-bit color table" | grayLevels grayIndices c distToClosest dist indexOfClosest | grayLevels := OrderedCollection new. grayIndices := OrderedCollection new. "Note: skip the first entry, which is reserved for transparent" 2 to: IndexedColors size do: [ :i | c := IndexedColors at: i. c saturation = 0.0 ifTrue: [ "c is a gray" grayLevels add: c privateBlue >> 2. "top 8 bits; R, G, and B are the same" grayIndices add: i - 1 ] ]. "pixel values are zero-based" grayLevels := grayLevels asArray. grayIndices := grayIndices asArray. "for each gray level in [0..255], select the closest match" GrayToIndexMap := ByteArray new: 256. 0 to: 255 do: [ :level | distToClosest := 10000. "greater than distance to any real gray" 1 to: grayLevels size do: [ :i | dist := (level - (grayLevels at: i)) abs. dist < distToClosest ifTrue: [ distToClosest := dist. indexOfClosest := grayIndices at: i ] ]. GrayToIndexMap at: level + 1 put: indexOfClosest ]! ! !NewColor class methodsFor: 'initialization' stamp: 'StephaneDucasse 10/16/2013 15:22'! initializeIndexedColors "Build an array of colors corresponding to the fixed colormap used for display depths of 1, 2, 4, or 8 bits." "Color initializeIndexedColors" | a index grayVal | a := Array new: 256. "1-bit colors (monochrome)" a at: 1 put: (self r: 1.0 g: 1.0 b: 1.0). "white or transparent" a at: 2 put: (self r: 0.0 g: 0.0 b: 0.0). "black" "additional colors for 2-bit color" a at: 3 put: (self r: 1.0 g: 1.0 b: 1.0). "opaque white" a at: 4 put: (self r: 0.5 g: 0.5 b: 0.5). "1/2 gray" "additional colors for 4-bit color" a at: 5 put: (self r: 1.0 g: 0.0 b: 0.0). "red" a at: 6 put: (self r: 0.0 g: 1.0 b: 0.0). "green" a at: 7 put: (self r: 0.0 g: 0.0 b: 1.0). "blue" a at: 8 put: (self r: 0.0 g: 1.0 b: 1.0). "cyan" a at: 9 put: (self r: 1.0 g: 1.0 b: 0.0). "yellow" a at: 10 put: (self r: 1.0 g: 0.0 b: 1.0). "magenta" a at: 11 put: (self r: 0.125 g: 0.125 b: 0.125). "1/8 gray" a at: 12 put: (self r: 0.25 g: 0.25 b: 0.25). "2/8 gray" a at: 13 put: (self r: 0.375 g: 0.375 b: 0.375). "3/8 gray" a at: 14 put: (self r: 0.625 g: 0.625 b: 0.625). "5/8 gray" a at: 15 put: (self r: 0.75 g: 0.75 b: 0.75). "6/8 gray" a at: 16 put: (self r: 0.875 g: 0.875 b: 0.875). "7/8 gray" "additional colors for 8-bit color" "24 more shades of gray (1/32 increments but not repeating 1/8 increments)" index := 17. 1 to: 31 do: [ :v | v \\ 4 = 0 ifFalse: [ grayVal := v / 32.0. a at: index put: (Color r: grayVal g: grayVal b: grayVal). index := index + 1 ] ]. "The remainder of color table defines a color cube with six steps for each primary color. Note that the corners of this cube repeat previous colors, but this simplifies the mapping between RGB colors and color map indices. This color cube spans indices 40 through 255 (indices 41-256 in this 1-based array)." 0 to: 5 do: [ :r | 0 to: 5 do: [ :g | 0 to: 5 do: [ :b | index := 41 + (36 * r + (6 * b) + g). index > 256 ifTrue: [ self error: 'index out of range in color table compuation' ]. a at: index put: (self r: r g: g b: b range: 5) ] ] ]. IndexedColors := a! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! lightBlue ^ ColorRegistry at: #lightBlue! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! lightBrown ^ ColorRegistry at: #lightBrown! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! lightCyan ^ ColorRegistry at: #lightCyan! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:35'! lightGray ^ ColorRegistry at: #lightGray! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! lightGreen ^ ColorRegistry at: #lightGreen! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! lightMagenta ^ ColorRegistry at: #lightMagenta! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! lightOrange ^ ColorRegistry at: #lightOrange! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! lightRed ^ ColorRegistry at: #lightRed! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! lightYellow ^ ColorRegistry at: #lightYellow! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! magenta ^ ColorRegistry at: #magenta! ! !NewColor class methodsFor: 'other' stamp: 'FernandoOlivero 9/17/2013 21:35'! maskingMap: depth "Return a color map that maps all colors except transparent to words of all ones. Used to create a mask for a Form whose transparent pixel value is zero. Cache the most recently used map." | sizeNeeded | depth <= 8 ifTrue: [ sizeNeeded := 1 bitShift: depth ] ifFalse: [ sizeNeeded := 4096 ]. (MaskingMap == nil or: [ MaskingMap size ~= sizeNeeded ]) ifTrue: [ MaskingMap := Bitmap new: sizeNeeded withAll: 4294967295. MaskingMap at: 1 put: 0 "transparent" ]. ^ MaskingMap! ! !NewColor class methodsFor: 'accesing' stamp: 'FernandoOlivero 9/17/2013 21:35'! named: aColorName ^ ColorRegistry at: aColorName asSymbol ifAbsent: nil ! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:23'! new ^ self r: 0.0 g: 0.0 b: 0.0! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! orange ^ ColorRegistry at: #orange! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleBlue ^ ColorRegistry at: #paleBlue ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleBuff ^ ColorRegistry at: #paleBuff! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleGreen ^ ColorRegistry at: #paleGreen! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleMagenta ^ ColorRegistry at: #paleMagenta! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleOrange ^ ColorRegistry at: #paleOrange! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! palePeach ^ ColorRegistry at: #palePeach ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleRed ^ ColorRegistry at: #paleRed! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleTan ^ ColorRegistry at: #paleTan! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! paleYellow ^ ColorRegistry at: #paleYellow.! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:36'! pink ^ ColorRegistry at: #pink.! ! !NewColor class methodsFor: 'other' stamp: 'FernandoOlivero 9/17/2013 21:35'! pixelScreenForDepth: depth "Return a 50% stipple containing alternating pixels of all-zeros and all-ones to be used as a mask at the given depth." | mask bits | mask := (1 bitShift: depth) - 1. bits := 2 * depth. [ bits >= 32 ] whileFalse: [ mask := mask bitOr: (mask bitShift: bits). "double the length of mask" bits := bits + bits ]. ^ Bitmap with: mask with: mask bitInvert32! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! purple ^ ColorRegistry at: #purple! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:24'! r: r g: g b: b "Return a color with the given r, g, and b components in the range [0.0..1.0]." ^ self r: r g: g b: b alpha: 1.0! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:24'! r: r g: g b: b alpha: alpha "Return a color with the given r, g, and b components in the range [0.0..1.0]." ^ self basicNew initializeRed: r green: g blue: b alpha: alpha ; yourself.! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:24'! r: r g: g b: b range: range "Return a color with the given r, g, and b components specified as integers in the range [0..r]. This avoids the floating point arithmetic in the red:green:blue: message and is thus a bit faster for certain applications (such as computing a sequence of colors for a palette)." ^ self basicNew initializeRed: r green: g blue: b range: range; yourself ! ! !NewColor class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/16/2013 15:25'! random "Return a random color that isn't too dark or under-saturated." ^ self h: (360.0 * RandomStream next) s: (0.3 + (RandomStream next * 0.7)) v: (0.4 + (RandomStream next * 0.6)) alpha: 1.0! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! red ^ ColorRegistry at: #red! ! !NewColor class methodsFor: 'initialization' stamp: 'StephaneDucasse 10/18/2013 11:07'! registerColor: aColor named: aName ColorRegistry at: aName put: aColor. ! ! !NewColor class methodsFor: 'accessing' stamp: 'StephaneDucasse 10/16/2013 15:25'! registeredColorNames ^ ColorRegistry keys collect: #asString ! ! !NewColor class methodsFor: 'accessing' stamp: 'StephaneDucasse 10/16/2013 15:26'! registeredNameOf: aColor | colorName | colorName := #unnamed. ColorRegistry keysAndValuesDo: [:key :value| value = aColor ifTrue: [ colorName := key ] ]. ^ colorName ! ! !NewColor class methodsFor: '*System-Settings-Browser' stamp: 'StephaneDucasse 10/18/2013 15:04'! settingInputWidgetForNode: aSettingNode ^ aSettingNode inputWidgetForColor! ! !NewColor class methodsFor: 'other' stamp: 'FernandoOlivero 9/17/2013 21:35'! shutDown "NewColor shutDown" CachedColormaps := nil. "Maps to translate between color depths" MaskingMap := nil "Maps all colors except transparent to black for creating a mask"! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:47'! tan ^ ColorRegistry at: #tan! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:57'! transparent ^ ColorRegistry at: #transparent ! ! !NewColor class methodsFor: 'accesing' stamp: 'FernandoOlivero 9/17/2013 21:35'! unregisterColorNamed: aName ColorRegistry removeKey: aName ifAbsent: nil! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! veryDarkGray ^ ColorRegistry at: #veryDarkGray! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! veryLightGray ^ ColorRegistry at: #veryLightGray! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! veryPaleRed ^ ColorRegistry at: #veryPaleRed! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! veryVeryDarkGray ^ ColorRegistry at: #veryVeryDarkGray ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! veryVeryLightGray ^ ColorRegistry at: #veryVeryLightGray! ! !NewColor class methodsFor: 'examples' stamp: 'StephaneDucasse 10/16/2013 15:27'! wheel: thisMany "Return a collection of thisMany colors evenly spaced around the color wheel." "Color showColors: (Color wheel: 12)" ^ self wheel: thisMany saturation: 0.9 brightness: 0.7 ! ! !NewColor class methodsFor: 'examples' stamp: 'StephaneDucasse 10/16/2013 15:27'! wheel: thisMany saturation: s brightness: v "Return a collection of thisMany colors evenly spaced around the color wheel, all of the given saturation and brightness." "Color showColors: (Color wheel: 12 saturation: 0.4 brightness: 1.0)" "Color showColors: (Color wheel: 12 saturation: 0.8 brightness: 0.5)" ^ (self h: 0.0 s: s v: v) wheel: thisMany ! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! white ^ ColorRegistry at: #white! ! !NewColor class methodsFor: 'defaults' stamp: 'FernandoOlivero 8/24/2013 19:37'! yellow ^ ColorRegistry at: #yellow! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:27'! * aNumberOrArray "Answer this color with its RGB multiplied by the given number, or multiply this color's RGB values by the corresponding entries in the given array." "(self brown * 2) display" "(self brown * #(1 0 1)) display" | multipliers | multipliers := aNumberOrArray isCollection ifTrue: [aNumberOrArray] ifFalse: [Array with: aNumberOrArray with: aNumberOrArray with: aNumberOrArray]. ^ self class basicNew setPrivateRed: (self privateRed * multipliers first) asInteger green: (self privateGreen * multipliers second) asInteger blue: (self privateBlue * multipliers third) asInteger.! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:28'! + aColor "Answer this color mixed with the given color in an additive color space. " ^ self class basicNew setPrivateRed: self privateRed + aColor privateRed green: self privateGreen + aColor privateGreen blue: self privateBlue + aColor privateBlue ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:28'! - aColor "Answer aColor is subtracted from the given color in an additive color space. " "(Color white - Color red) display" ^ self class basicNew setPrivateRed: self privateRed - aColor privateRed green: self privateGreen - aColor privateGreen blue: self privateBlue - aColor privateBlue ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:28'! / aNumber "Answer this color with its RGB divided by the given number. " "(Color red / 2) display" ^ self class basicNew setPrivateRed: (self privateRed / aNumber) asInteger green: (self privateGreen / aNumber) asInteger blue: (self privateBlue / aNumber) asInteger ! ! !NewColor methodsFor: 'comparing' stamp: 'StephaneDucasse 10/15/2013 22:29'! = aColor "Return true if the receiver equals the given color. This method handles translucent colors, too." aColor isColor ifFalse: [^ false]. ^ aColor privateRGB = rgb and: [aColor privateAlpha = self privateAlpha] ! ! !NewColor methodsFor: '*Morphic-Base' stamp: 'StephaneDucasse 10/15/2013 22:29'! addFillStyleMenuItems: aMenu hand: aHand from: aMorph "Add the items for changing the current fill style of the receiver" aMenu add: 'change color...' translated target: self selector: #changeColorIn:event: argument: aMorph! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:30'! adjustBrightness: brightness "Adjust the relative brightness of this color. (lowest value is 0.005 so that hue information is not lost)" ^ self class h: self hue s: self saturation v: (self brightness + brightness min: 1.0 max: 0.005) alpha: self alpha! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:30'! adjustSaturation: saturation brightness: brightness "Adjust the relative saturation and brightness of this color. (lowest value is 0.005 so that hue information is not lost)" ^ self class h: self hue s: (self saturation + saturation min: 1.0 max: 0.005) v: (self brightness + brightness min: 1.0 max: 0.005) alpha: self alpha! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:30'! alpha "Return my alpha value, a number between 0.0 and 1.0 where 0.0 is completely transparent and 1.0 is completely opaque." ^ alpha asFloat / 255.0! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:32'! alpha: aFloat "Answer a new Color with the given amount of opacity ('alpha')." ^ self class r: self red g: self green b: self blue alpha: aFloat ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:32'! alphaMixed: proportion with: aColor "Answer this color mixed with the given color. The proportion, a number between 0.0 and 1.0, determines what what fraction of the receiver to use in the mix. For example, 0.9 would yield a color close to the receiver. This method uses RGB interpolation; HSV interpolation can lead to surprises. Mixes the alphas (for transparency) also." | frac1 frac2 | frac1 := proportion asFloat min: 1.0 max: 0.0. frac2 := 1.0 - frac1. ^ self class r: self red * frac1 + (aColor red * frac2) g: self green * frac1 + (aColor green * frac2) b: self blue * frac1 + (aColor blue * frac2) alpha: self alpha * frac1 + (aColor alpha * frac2)! ! !NewColor methodsFor: '*Athens-Core' stamp: 'StephaneDucasse 10/15/2013 22:13'! asAthensPaintOn: anAthensCanvas ^ anAthensCanvas surface createSolidColorPaint: self! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! asColor "Convert the receiver into a color" ^self! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! asColorref "Convert the receiver into a colorref" ^(self red * 255) asInteger + ((self green * 255) asInteger << 8) + ((self green * 255) asInteger << 16)! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! asHTMLColor | s | s := '#000000' copy. s at: 2 put: (Character digitValue: ((rgb bitShift: -6 - RedShift) bitAnd: 15)). s at: 3 put: (Character digitValue: ((rgb bitShift: -2 - RedShift) bitAnd: 15)). s at: 4 put: (Character digitValue: ((rgb bitShift: -6 - GreenShift) bitAnd: 15)). s at: 5 put: (Character digitValue: ((rgb bitShift: -2 - GreenShift) bitAnd: 15)). s at: 6 put: (Character digitValue: ((rgb bitShift: -6 - BlueShift) bitAnd: 15)). s at: 7 put: (Character digitValue: ((rgb bitShift: -2 - BlueShift) bitAnd: 15)). ^ s! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:33'! asNontranslucentColor ^ self alpha: 1.0.! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! atLeastAsLuminentAs: aFloat | revisedColor | revisedColor := self. [ revisedColor luminance < aFloat ] whileTrue: [ revisedColor := revisedColor slightlyLighter ]. ^ revisedColor! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! atMostAsLuminentAs: aFloat | revisedColor | revisedColor := self. [ revisedColor luminance > aFloat ] whileTrue: [ revisedColor := revisedColor slightlyDarker ]. ^ revisedColor! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! attemptToMutateError "A color is immutable. Once a color's red, green, and blue have been initialized, you cannot change them. Instead, create a new Color and use it." self error: 'Color objects are immutable once created' ! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:54'! basicPixelValueForDepth: d "Returns an integer representing the bits that appear in a single pixel of this color in a Form of the given depth. The depth must be one of 1, 2, 4, 8, 16, or 32. Contrast with pixelWordForDepth: and bitPatternForDepth:, which return either a 32-bit word packed with the given pixel value or a multiple-word Bitmap containing a pattern. The inverse is the class message colorFromPixelValue:depth:" "Details: For depths of 8 or less, the result is a colorMap index. For depths of 16 and 32, it is a direct color value with 5 or 8 bits per color component." "Transparency: The pixel value zero is reserved for transparent. For depths greater than 8, black maps to the darkest possible blue." | rgbBlack val | d = 8 ifTrue: [ ^ self closestPixelValue8 ]. "common case" d < 8 ifTrue: [ d = 4 ifTrue: [ ^ self closestPixelValue4 ]. d = 2 ifTrue: [ ^ self closestPixelValue2 ]. d = 1 ifTrue: [ ^ self closestPixelValue1 ] ]. rgbBlack := 1. "closest black that is not transparent in RGB" d = 16 ifTrue: [ "five bits per component; top bits ignored" val := (((rgb bitShift: -15) bitAnd: 31744) bitOr: ((rgb bitShift: -10) bitAnd: 992)) bitOr: ((rgb bitShift: -5) bitAnd: 31). ^ val = 0 ifTrue: [ rgbBlack ] ifFalse: [ val ] ]. d = 32 ifTrue: [ "eight bits per component; top 8 bits set to all ones (opaque alpha)" val := LargePositiveInteger new: 4. val at: 3 put: ((rgb bitShift: -22) bitAnd: 255). val at: 2 put: ((rgb bitShift: -12) bitAnd: 255). val at: 1 put: ((rgb bitShift: -2) bitAnd: 255). val at: 4 put: 255. "opaque alpha" ^ val ]. d = 12 ifTrue: [ "for indexing a color map with 4 bits per color component" val := (((rgb bitShift: -18) bitAnd: 3840) bitOr: ((rgb bitShift: -12) bitAnd: 240)) bitOr: ((rgb bitShift: -6) bitAnd: 15). ^ val = 0 ifTrue: [ rgbBlack ] ifFalse: [ val ] ]. d = 9 ifTrue: [ "for indexing a color map with 3 bits per color component" val := (((rgb bitShift: -21) bitAnd: 448) bitOr: ((rgb bitShift: -14) bitAnd: 56)) bitOr: ((rgb bitShift: -7) bitAnd: 7). ^ val = 0 ifTrue: [ rgbBlack ] ifFalse: [ val ] ]. self error: 'unknown pixel depth: ' , d printString! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:42'! bitPatternForDepth: depth "Return a Bitmap, possibly containing a stipple pattern, that best represents this color at the given depth. BitBlt calls this method to convert colors into Bitmaps. The resulting Bitmap may be multiple words to represent a stipple pattern of several lines. " "See also: pixelValueAtDepth: -- value for single pixel pixelWordAtDepth: -- a 32-bit word filled with the pixel value" "Details: The pattern for the most recently requested depth is cached." "Note for depths > 2, there are stippled and non-stippled versions (generated with #balancedPatternForDepth: and #bitPatternForDepth:, respectively). The stippled versions don't work with the window bit caching of StandardSystemView, so we make sure that for these depths, only unstippled patterns are returned" (depth = cachedDepth and: [ depth <= 2 or: [ cachedBitPattern size = 1 ] ]) ifTrue: [ ^ cachedBitPattern ]. ( self isTransparent and: [ cachedBitPattern isNil] ) ifTrue: [ cachedBitPattern := Bitmap with: 0 . ^ cachedBitPattern ]. cachedDepth := depth. depth > 2 ifTrue: [ ^ cachedBitPattern := Bitmap with: (self pixelWordForDepth: depth) ]. depth = 1 ifTrue: [ ^ cachedBitPattern := self halfTonePattern1 ]. depth = 2 ifTrue: [ ^ cachedBitPattern := self halfTonePattern2 ]! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:43'! blacker ^ self alphaMixed: 0.8333 with: self class black ! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! blue "Return the blue component of this color, a float in the range [0.0..1.0]." ^ self privateBlue asFloat / ComponentMax! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! brightness "Return the brightness of this color, a float in the range [0.0..1.0]." ^ ((self privateRed max: self privateGreen) max: self privateBlue) asFloat / ComponentMax! ! !NewColor methodsFor: '*Morphic-Base' stamp: 'StephaneDucasse 10/15/2013 22:13'! changeColorIn: aMorph event: evt "Note: This is just a workaround to make sure we don't use the old color inst var" aMorph changeColorTarget: aMorph selector: #fillStyle: originalColor: self hand: evt hand! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! closestPixelValue1 "Return the nearest approximation to this color for a monochrome Form." "fast special cases" rgb = 0 ifTrue: [^ 1]. "black" rgb = 16r3FFFFFFF ifTrue: [^ 0]. "white" self luminance > 0.5 ifTrue: [^ 0] "white" ifFalse: [^ 1]. "black" ! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! closestPixelValue2 "Return the nearest approximation to this color for a 2-bit deep Form." "fast special cases" | lum | rgb = 0 ifTrue: [ ^ 1 ]. "black" rgb = 1073741823 ifTrue: [ ^ 2 ]. "opaque white" lum := self luminance. lum < 0.2 ifTrue: [ ^ 1 ]. "black" lum > 0.6 ifTrue: [ ^ 2 ]. "opaque white" ^ 3 "50% gray"! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! closestPixelValue4 "Return the nearest approximation to this color for a 4-bit deep Form." "fast special cases" | bIndex | rgb = 0 ifTrue: [ ^ 1 ]. "black" rgb = 1073741823 ifTrue: [ ^ 2 ]. "opaque white" rgb = self class red privateRGB ifTrue: [ ^ 4 ]. rgb = self class green privateRGB ifTrue: [ ^ 5 ]. rgb = self class blue privateRGB ifTrue: [ ^ 6 ]. rgb = self class cyan privateRGB ifTrue: [ ^ 7 ]. rgb = self class yellow privateRGB ifTrue: [ ^ 8 ]. rgb = self class magenta privateRGB ifTrue: [ ^ 9 ]. bIndex := (self luminance * 8.0) rounded. "bIndex in [0..8]" ^ #(1 10 11 12 3 13 14 15 2 ) at: bIndex + 1 "black" "1/8 gray" "2/8 gray" "3/8 gray" "4/8 gray" "5/8 gray" "6/8 gray" "7/8 gray" "opaque white"! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! closestPixelValue8 "Return the nearest approximation to this color for an 8-bit deep Form." "fast special cases" rgb = 0 ifTrue: [^ 1]. "black" rgb = 16r3FFFFFFF ifTrue: [^ 255]. "white" self saturation < 0.2 ifTrue: [ ^ GrayToIndexMap at: (self privateGreen >> 2) + 1. "nearest gray" ] ifFalse: [ "compute nearest entry in the color cube" ^ 40 + ((((self privateRed * 5) + HalfComponentMask) // ComponentMask) * 36) + ((((self privateBlue * 5) + HalfComponentMask) // ComponentMask) * 6) + (((self privateGreen * 5) + HalfComponentMask) // ComponentMask)]. ! ! !NewColor methodsFor: '*System-CommandLine' stamp: 'StephaneDucasse 10/15/2013 22:13'! closestXTermPixelValue | index | "Return the nearest approximation to this color for 256 xterm color." self saturation < 0.2 ifTrue: [ "colors 232-255 are a grayscale ramp, intentionally leaving out black and white" index := (self green * 25) asInteger. index = 0 ifTrue: [ ^ 0 ]. index = 25 ifTrue: [ ^ 16 ]. ^ index + 232 ]. "compute nearest entry in the 6*6*6 color cube" ^ 16 + (self red * 6*6*5) asInteger + (self green * 6*5) asInteger + (self blue * 5) asInteger ! ! !NewColor methodsFor: 'other' stamp: 'StephaneDucasse 10/15/2013 22:13'! colorForInsets ^ self! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:44'! contrastingColor "Answer black or white depending on the luminance." self isTransparent ifTrue: [ ^ self class black]. ^self luminance > 0.5 ifTrue: [self class black] ifFalse: [self class white]! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:45'! contrastingForegroundColor "Make a foreground color contrasting with me" ^self luminance >= 0.5 ifTrue: [self class black] ifFalse: [self class white]! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:46'! dansDarker "Return a darker shade of the same color. An attempt to do better than the current darker method. (now obsolete, since darker has been changed to do this. -dew)" ^ self class h: self hue s: self saturation v: (self brightness - 0.16 max: 0.0)! ! !NewColor methodsFor: 'groups of shades' stamp: 'StephaneDucasse 10/15/2013 22:13'! darkShades: thisMany "An array of thisMany colors from black to the receiver. Array is of length num. Very useful for displaying color based on a variable in your program. " "Color showColors: (Color red darkShades: 12)" ^ self class black mix: self shades: thisMany ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! darker "Answer a darker shade of this color." ^ self adjustBrightness: -0.08! ! !NewColor methodsFor: 'equality' stamp: 'StephaneDucasse 10/15/2013 22:13'! diff: theOther "Returns a number between 0.0 and 1.0" ^ ((self privateRed - theOther privateRed) abs + (self privateGreen - theOther privateGreen) abs + (self privateBlue - theOther privateBlue) abs) / 3.0 / ComponentMax! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! dominantColor ^ self! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! duller "Answer a darker, desaturated color. If the original color isn't very saturated, desaturate it by less (otherwise will just end up with grey)." | sat adjust | (sat := self saturation) > 0.3 ifTrue: [adjust := -0.1] ifFalse: [adjust := 0.1 - sat max: 0.0]. ^ self adjustSaturation: adjust brightness: -0.1 "^ self adjustSaturation: -0.03 brightness: -0.2"! ! !NewColor methodsFor: '*Polymorph-Widgets' stamp: 'StephaneDucasse 10/15/2013 22:13'! fillRectangle: aRectangle on: aCanvas "Fill the given rectangle on the given canvas with the receiver." aCanvas fillRectangle: aRectangle basicFillStyle: self! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! flushCache "Flush my cached bit pattern." cachedDepth := nil. cachedBitPattern := nil! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! green "Return the green component of this color, a float in the range [0.0..1.0]." ^ self privateGreen asFloat / ComponentMax! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! halfTonePattern1 "Return a halftone-pattern to approximate luminance levels on 1-bit deep Forms." | lum | lum := self luminance. lum < 0.1 ifTrue: [ ^ Bitmap with: 4294967295 ]. "black" lum < 0.4 ifTrue: [ ^ Bitmap with: 3149642683 with: 4008636142 ]. "dark gray" lum < 0.6 ifTrue: [ ^ Bitmap with: 1431655765 with: 2863311530 ]. "medium gray" lum < 0.9 ifTrue: [ ^ Bitmap with: 1145324612 with: 286331153 ]. "light gray" ^ Bitmap with: 0 "1-bit white"! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! halfTonePattern2 "Return a halftone-pattern to approximate luminance levels on 2-bit deep Forms." | lum | lum := self luminance. lum < 0.125 ifTrue: [ ^ Bitmap with: 1431655765 ]. "black" lum < 0.25 ifTrue: [ ^ Bitmap with: 1431655765 with: 3722304989 ]. "1/8 gray" lum < 0.375 ifTrue: [ ^ Bitmap with: 3722304989 with: 2004318071 ]. "2/8 gray" lum < 0.5 ifTrue: [ ^ Bitmap with: 4294967295 with: 2004318071 ]. "3/8 gray" lum < 0.625 ifTrue: [ ^ Bitmap with: 4294967295 ]. "4/8 gray" lum < 0.75 ifTrue: [ ^ Bitmap with: 4294967295 with: 3149642683 ]. "5/8 gray" lum < 0.875 ifTrue: [ ^ Bitmap with: 4008636142 with: 3149642683 ]. "6/8 gray" lum < 1.0 ifTrue: [ ^ Bitmap with: 2863311530 with: 3149642683 ]. "7/8 gray" ^ Bitmap with: 2863311530 "opaque white" "handy expression for computing patterns for 2x2 tiles; set p to a string of 4 letters (e.g., 'wggw' for a gray-and- white checkerboard) and print the result of evaluating: | p d w1 w2 | p := 'wggw'. d := Dictionary new. d at: $b put: '01'. d at: $w put: '10'. d at: $g put: '11'. w1 := (d at: (p at: 1)), (d at: (p at: 2)). w1 := '2r', w1, w1, w1, w1, w1, w1, w1, w1, ' hex'. w2 := (d at: (p at: 3)), (d at: (p at: 4)). w2 := '2r', w2, w2, w2, w2, w2, w2, w2, w2, ' hex'. Array with: (Compiler evaluate: w1) with: (Compiler evaluate: w2) "! ! !NewColor methodsFor: 'comparing' stamp: 'StephaneDucasse 10/15/2013 22:46'! hash ^ rgb bitXor: alpha ! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! hue "Return the hue of this color, an angle in the range [0.0..360.0]." | r g b max min span h | r := self privateRed. g := self privateGreen. b := self privateBlue. max := (r max: g) max: b. min := (r min: g) min: b. span := (max - min) asFloat. span = 0.0 ifTrue: [ ^ 0.0 ]. r = max ifTrue: [ h := (g - b) asFloat / span * 60.0 ] ifFalse: [ g = max ifTrue: [ h := 120.0 + ((b - r) asFloat / span * 60.0) ] ifFalse: [ h := 240.0 + ((r - g) asFloat / span * 60.0) ] ]. h < 0.0 ifTrue: [ h := 360.0 + h ]. ^ h! ! !NewColor methodsFor: '*Morphic-Base' stamp: 'StephaneDucasse 10/15/2013 22:13'! iconOrThumbnailOfSize: aNumberOrPoint "Answer an appropiate form to represent the receiver" | form | form := Form extent: aNumberOrPoint asPoint asPoint depth: 32. form fillColor: self. ^ form! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! indexInMap: aColorMap "Return the index corresponding to this color in the given color map. RGB colors are truncated to 3-, 4-, or 5-bits per color component when indexing into such a colorMap. " aColorMap size = 2 ifTrue: [^ (self pixelValueForDepth: 1) + 1]. aColorMap size = 4 ifTrue: [^ (self pixelValueForDepth: 2) + 1]. aColorMap size = 16 ifTrue: [^ (self pixelValueForDepth: 4) + 1]. aColorMap size = 256 ifTrue: [^ (self pixelValueForDepth: 8) + 1]. aColorMap size = 512 ifTrue: [^ (self pixelValueForDepth: 9) + 1]. aColorMap size = 4096 ifTrue: [^ (self pixelValueForDepth: 12) + 1]. aColorMap size = 32768 ifTrue: [^ (self pixelValueForDepth: 16) + 1]. self error: 'unknown pixel depth'. ! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:36'! initializePrivateRed: r green: g blue: b "Initialize this color's r, g, and b components to the given values in the range [0..ComponentMax]. Encoded in a single variable as 3 integers in [0..1023]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := ((r min: ComponentMask max: 0) bitShift: RedShift) + ((g min: ComponentMask max: 0) bitShift: GreenShift) + (b min: ComponentMask max: 0). cachedDepth := nil. cachedBitPattern := nil! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:37'! initializeRed: r green: g blue: b alpha: anAlpha "Initialize this color's r, g, and b components to the given values in the range [0.0..1.0]. Encoded in a single variable as 3 integers in [0..1023]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := (((r * ComponentMax) rounded bitAnd: ComponentMask) bitShift: RedShift) + (((g * ComponentMax) rounded bitAnd: ComponentMask) bitShift: GreenShift) + ((b * ComponentMax) rounded bitAnd: ComponentMask). cachedDepth := nil. cachedBitPattern := nil. self setAlpha: anAlpha.! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:37'! initializeRed: r green: g blue: b range: range "Initialize this color's r, g, and b components to the given values in the range [0..r]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := ((r * ComponentMask // range bitAnd: ComponentMask) bitShift: RedShift) + ((g * ComponentMask // range bitAnd: ComponentMask) bitShift: GreenShift) + (b * ComponentMask // range bitAnd: ComponentMask). cachedDepth := nil. cachedBitPattern := nil. self setAlpha: 1.0.! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:37'! intializeHue: hue saturation: saturation brightness: brightness alpha: anAlpha "Initialize this color to the given hue, saturation, and brightness. See the comment in the instance creation method for details." | s v hf i f p q t | rgb == nil ifFalse: [ self attemptToMutateError ]. s := (saturation asFloat max: 0.0) min: 1.0. v := (brightness asFloat max: 0.0) min: 1.0. "zero saturation yields gray with the given brightness" s = 0.0 ifTrue: [ ^ self initializeRed: v green: v blue: v alpha: anAlpha ]. hf := hue asFloat. (hf < 0.0 or: [ hf >= 360.0 ]) ifTrue: [ hf := hf - ((hf quo: 360.0) asFloat * 360.0) ]. hf := hf / 60.0. i := hf asInteger. "integer part of hue" f := hf fractionPart. "fractional part of hue" p := (1.0 - s) * v. q := (1.0 - (s * f)) * v. t := (1.0 - (s * (1.0 - f))) * v. 0 = i ifTrue: [ ^ self initializeRed: v green: t blue: p alpha: anAlpha ]. 1 = i ifTrue: [ ^ self initializeRed: q green: v blue: p alpha: anAlpha ]. 2 = i ifTrue: [ ^ self initializeRed: p green: v blue: t alpha: anAlpha ] . 3 = i ifTrue: [ ^ self initializeRed: p green: q blue: v alpha: anAlpha ]. 4 = i ifTrue: [ ^ self initializeRed: t green: p blue: v alpha: anAlpha ]. 5 = i ifTrue: [ ^ self initializeRed: v green: p blue: q alpha: anAlpha ]. self error: 'implementation error'! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isBitmapFill ^false! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isBlack "Return true if the receiver represents black" ^rgb = 0! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isColor ^ true ! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isGradientFill ^false! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/16/2013 14:38'! isGray "Return true if the receiver represents a shade of gray" ^(self privateRed = self privateGreen) and: [self privateRed = self privateBlue]! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/16/2013 14:39'! isOpaque ^ alpha = 255 ! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isOrientedFill "Return true if the receiver keeps an orientation (e.g., origin, direction, and normal)" ^false! ! !NewColor methodsFor: 'self evaluating' stamp: 'StephaneDucasse 10/15/2013 22:13'! isSelfEvaluating ^ true! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isSolidFill ^true! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/16/2013 14:39'! isTranslucent ^ alpha < 255 ! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/15/2013 22:13'! isTranslucentButNotTransparent "Answer true if this any of this morph is translucent but not transparent." ^ self isTranslucent and: [ self isTransparent not ]! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/16/2013 14:41'! isTranslucentColor "This means: self isTranslucent, but isTransparent not" self flag: #toremove. ^ false! ! !NewColor methodsFor: 'queries' stamp: 'StephaneDucasse 10/16/2013 14:41'! isTransparent ^ alpha = 0! ! !NewColor methodsFor: 'groups of shades' stamp: 'StephaneDucasse 10/15/2013 22:13'! lightShades: thisMany "An array of thisMany colors from white to self. Very useful for displaying color based on a variable in your program. " "Color showColors: (Color red lightShades: 12)" ^ self class white mix: self shades: thisMany ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! lighter "Answer a lighter shade of this color." ^ self adjustSaturation: -0.03 brightness: 0.08! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! luminance "Return the luminance of this color, a brightness value weighted by the human eye's color sensitivity." ^ ((299 * self privateRed) + (587 * self privateGreen) + (114 * self privateBlue)) / (1000 * ComponentMax) ! ! !NewColor methodsFor: 'groups of shades' stamp: 'StephaneDucasse 10/16/2013 14:42'! mix: color2 shades: thisMany "Return an array of thisMany colors from self to color2. Very useful for displaying color based on a variable in your program. " "Color showColors: (Color red mix: Color green shades: 12)" | redInc greenInc blueInc out rr gg bb | thisMany = 1 ifTrue: [ ^ Array with: color2 ]. redInc := (color2 red - self red) / (thisMany - 1). greenInc := (color2 green - self green) / (thisMany - 1). blueInc := (color2 blue - self blue) / (thisMany - 1). rr := self red. gg := self green. bb := self blue. out := (1 to: thisMany) collect: [ :num | | c | c := self class r: rr g: gg b: bb. rr := rr + redInc. gg := gg + greenInc. bb := bb + blueInc. c ]. out at: out size put: color2. "hide roundoff errors" ^ out! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 14:42'! mixed: proportion with: aColor "Mix with another color and do not preserve transpareny. Only use this for extracting the RGB value and mixing it. All other callers should use instead: aColor alphaMixed: proportion with: anotherColor " | frac1 frac2 | frac1 := proportion asFloat min: 1.0 max: 0.0. frac2 := 1.0 - frac1. ^ self class r: self red * frac1 + (aColor red * frac2) g: self green * frac1 + (aColor green * frac2) b: self blue * frac1 + (aColor blue * frac2)! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 14:43'! muchDarker ^ self alphaMixed: 0.5 with: (ColorRegistry at: #black) ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! muchLighter ^ self alphaMixed: 0.233 with: Color white ! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! name ^ self class registeredNameOf: self ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! negated "Return an RGB inverted color" ^Color r: 1.0 - self red g: 1.0 - self green b: 1.0 - self blue! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! orColorUnlike: theOther "If this color is a lot like theOther, then return its complement, otherwide, return self" ^ (self diff: theOther) < 0.3 ifTrue: [ theOther negated ] ifFalse: [ self ]! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! paler "Answer a paler shade of this color." ^ self adjustSaturation: -0.09 brightness: 0.09 ! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:55'! pixelValueForDepth: d "Return the pixel value for this color at the given depth. Translucency only works in RGB; this color will appear either opaque or transparent at all other depths." | basicPixelWord | ( d < 32 and:[ self isTransparent ] ) ifTrue: [ ^ 0 ]. basicPixelWord := self basicPixelValueForDepth: d. ^ d < 32 ifTrue: [ basicPixelWord ] ifFalse: [ (basicPixelWord bitAnd: 16777215) bitOr: (alpha bitShift: 24) ]! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/15/2013 22:13'! pixelWordFor: depth filledWith: pixelValue "Return to a 32-bit word that concatenates enough copies of the given pixel value to fill the word (i.e., 32/depth copies). Depth should be one of 1, 2, 4, 8, 16, or 32. The pixel value should be an integer in 0..2^depth-1." | halfword | depth = 32 ifTrue: [ ^ pixelValue ]. depth = 16 ifTrue: [ halfword := pixelValue ] ifFalse: [ halfword := pixelValue * (#( 65535 21845 #- 4369 #- #- #- 257 ) at: depth) "replicates at every bit" "replicates every 2 bits" "replicates every 4 bits" "replicates every 8 bits" ]. ^ halfword bitOr: (halfword bitShift: 16)! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 14:58'! pixelWordForDepth: depth "Return to a 32-bit word that concatenates enough copies of the receiver's pixel value to fill the word (i.e., 32/depth copies). Depth should be one of 1, 2, 4, 8, 16, or 32. The pixel value should be an integer in 0..2^depth-1." | pixelValue basicPixelWord | self isTransparent ifTrue: [ ^ 0 ]. pixelValue := self pixelValueForDepth: depth. basicPixelWord := self pixelWordFor: depth filledWith: pixelValue. ^ depth < 32 ifTrue: [ basicPixelWord ] ifFalse: [ (basicPixelWord bitAnd: 16777215) bitOr: (alpha bitShift: 24) ]! ! !NewColor methodsFor: 'html' stamp: 'StephaneDucasse 10/15/2013 22:13'! printHtmlString "answer a string whose characters are the html representation of the receiver" ^ ((self red * 255) asInteger printStringBase: 16 length: 2 padded: true) , ((self green * 255) asInteger printStringBase: 16 length: 2 padded: true) , ((self blue * 255) asInteger printStringBase: 16 length: 2 padded: true)! ! !NewColor methodsFor: 'printing' stamp: 'StephaneDucasse 10/18/2013 14:41'! printOn: aStream | name | (name := self name). name = #unnamed ifFalse: [ ^ aStream nextPutAll: 'NewColor '; nextPutAll: name ]. self storeOn: aStream! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/16/2013 14:59'! privateAlpha "Private!! Return the raw alpha value for opaque. Used only for equality testing." ^ alpha ! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! privateBlue "Private!! Return the internal representation of my blue component." ^ rgb bitAnd: ComponentMask! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! privateGreen "Private!! Return the internal representation of my green component." ^ (rgb bitShift: 0 - GreenShift) bitAnd: ComponentMask! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! privateRGB "Private!! Return the internal representation of my RGB components." ^ rgb ! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! privateRed "Private!! Return the internal representation of my red component." ^ (rgb bitShift: 0 - RedShift) bitAnd: ComponentMask! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 14:59'! quiteBlacker ^ self alphaMixed: 0.8 with: (ColorRegistry at: #black)! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 15:00'! quiteWhiter ^ self alphaMixed: 0.6 with: (ColorRegistry at: #white)! ! !NewColor methodsFor: 'other' stamp: 'StephaneDucasse 10/15/2013 22:13'! raisedColor ^ self! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! red "Return the red component of this color, a float in the range [0.0..1.0]." ^ self privateRed asFloat / ComponentMax! ! !NewColor methodsFor: 'other' stamp: 'StephaneDucasse 10/15/2013 22:13'! rgbTriplet "Color fromUser rgbTriplet" ^ Array with: (self red roundTo: 0.01) with: (self green roundTo: 0.01) with: (self blue roundTo: 0.01) ! ! !NewColor methodsFor: 'accessing' stamp: 'StephaneDucasse 10/15/2013 22:13'! saturation "Return the saturation of this color, a value between 0.0 and 1.0." | r g b max min | r := self privateRed. g := self privateGreen. b := self privateBlue. max := min := r. g > max ifTrue: [ max := g ]. b > max ifTrue: [ max := b ]. g < min ifTrue: [ min := g ]. b < min ifTrue: [ min := b ]. max = 0 ifTrue: [ ^ 0.0 ] ifFalse: [ ^ (max - min) asFloat / max asFloat ]! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 15:01'! scaledPixelValue32 "Return the alpha scaled pixel value for depth 32" | pv32 a b g r | pv32 := self pixelWordForDepth: 32 . a := (self alpha * 255.0) rounded. b := (pv32 bitAnd: 255) * a // 256. g := ((pv32 bitShift: -8) bitAnd: 255) * a // 256. r := ((pv32 bitShift: -16) bitAnd: 255) * a // 256. ^ b + (g bitShift: 8) + (r bitShift: 16) + (a bitShift: 24)! ! !NewColor methodsFor: 'conversions' stamp: 'StephaneDucasse 10/16/2013 15:01'! setAlpha: aFloat alpha := ((255.0 * aFloat) asInteger min: 255) max: 0. ! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! setHue: hue saturation: saturation brightness: brightness "Initialize this color to the given hue, saturation, and brightness. See the comment in the instance creation method for details." | s v hf i f p q t | s := (saturation asFloat max: 0.0) min: 1.0. v := (brightness asFloat max: 0.0) min: 1.0. "zero saturation yields gray with the given brightness" s = 0.0 ifTrue: [ ^ self setRed: v green: v blue: v ]. hf := hue asFloat. (hf < 0.0 or: [ hf >= 360.0 ]) ifTrue: [ hf := hf - ((hf quo: 360.0) asFloat * 360.0) ]. hf := hf / 60.0. i := hf asInteger. "integer part of hue" f := hf fractionPart. "fractional part of hue" p := (1.0 - s) * v. q := (1.0 - (s * f)) * v. t := (1.0 - (s * (1.0 - f))) * v. 0 = i ifTrue: [ ^ self setRed: v green: t blue: p ]. 1 = i ifTrue: [ ^ self setRed: q green: v blue: p ]. 2 = i ifTrue: [ ^ self setRed: p green: v blue: t ]. 3 = i ifTrue: [ ^ self setRed: p green: q blue: v ]. 4 = i ifTrue: [ ^ self setRed: t green: p blue: v ]. 5 = i ifTrue: [ ^ self setRed: v green: p blue: q ]. self error: 'implementation error'! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! setPrivateRed: r green: g blue: b "Initialize this color's r, g, and b components to the given values in the range [0..ComponentMax]. Encoded in a single variable as 3 integers in [0..1023]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := ((r min: ComponentMask max: 0) bitShift: RedShift) + ((g min: ComponentMask max: 0) bitShift: GreenShift) + (b min: ComponentMask max: 0). cachedDepth := nil. cachedBitPattern := nil! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! setRGB: rgb0 rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := rgb0! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! setRed: r green: g blue: b "Initialize this color's r, g, and b components to the given values in the range [0.0..1.0]. Encoded in a single variable as 3 integers in [0..1023]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := (((r * ComponentMax) rounded bitAnd: ComponentMask) bitShift: RedShift) + (((g * ComponentMax) rounded bitAnd: ComponentMask) bitShift: GreenShift) + ((b * ComponentMax) rounded bitAnd: ComponentMask). cachedDepth := nil. cachedBitPattern := nil! ! !NewColor methodsFor: 'private' stamp: 'StephaneDucasse 10/15/2013 22:13'! setRed: r green: g blue: b range: range "Initialize this color's r, g, and b components to the given values in the range [0..r]." rgb == nil ifFalse: [ self attemptToMutateError ]. rgb := ((r * ComponentMask // range bitAnd: ComponentMask) bitShift: RedShift) + ((g * ComponentMask // range bitAnd: ComponentMask) bitShift: GreenShift) + (b * ComponentMask // range bitAnd: ComponentMask). cachedDepth := nil. cachedBitPattern := nil! ! !NewColor methodsFor: 'printing' stamp: 'StephaneDucasse 10/15/2013 22:13'! shortPrintString "Return a short (but less precise) print string for use where space is tight." | s | s := String new writeStream. s nextPutAll: '(' , self class name; nextPutAll: ' r: '; nextPutAll: (self red roundTo: 0.01) printString; nextPutAll: ' g: '; nextPutAll: (self green roundTo: 0.01) printString; nextPutAll: ' b: '; nextPutAll: (self blue roundTo: 0.01) printString; nextPutAll: ')'. ^ s contents! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! slightlyDarker ^ self adjustBrightness: -0.03 ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! slightlyLighter ^ self adjustSaturation: -0.01 brightness: 0.03! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 15:04'! slightlyWhiter ^ self alphaMixed: 0.85 with: (ColorRegistry at: #white) ! ! !NewColor methodsFor: 'printing' stamp: 'StephaneDucasse 10/15/2013 22:13'! storeArrayOn: aStream aStream nextPutAll: '#('. self storeArrayValuesOn: aStream. aStream nextPutAll: ') ' ! ! !NewColor methodsFor: 'printing' stamp: 'StephaneDucasse 10/16/2013 15:05'! storeArrayValuesOn: aStream self isTransparent ifTrue: [ ^ aStream space. ]. (self red roundTo: 0.001) storeOn: aStream. aStream space. (self green roundTo: 0.001) storeOn: aStream. aStream space. (self blue roundTo: 0.001) storeOn: aStream. aStream space. (self alpha roundTo: 0.001) storeOn: aStream. ! ! !NewColor methodsFor: 'printing' stamp: 'StephaneDucasse 10/16/2013 15:05'! storeOn: aStream self isTransparent ifTrue: [^ aStream nextPutAll: '(Color transparent)']. aStream nextPutAll: '(' , self class name; nextPutAll: ' r: '; print: (self red roundTo: 0.001); nextPutAll: ' g: '; print: (self green roundTo: 0.001); nextPutAll: ' b: '; print: (self blue roundTo: 0.001); nextPutAll: ' alpha: '; print: (self alpha roundTo: 0.001); nextPutAll: ')'. ! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! twiceDarker "Answer a significantly darker shade of this color." ^ self adjustBrightness: -0.15! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/15/2013 22:13'! twiceLighter "Answer a significantly lighter shade of this color." ^ self adjustSaturation: -0.06 brightness: 0.15! ! !NewColor methodsFor: 'copying' stamp: 'StephaneDucasse 10/15/2013 22:13'! veryDeepCopyWith: deepCopier "Return self. I am immutable in the Morphic world. Do not record me."! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 15:06'! veryMuchLighter ^ self alphaMixed: 0.1165 with: (ColorRegistry at: #white) ! ! !NewColor methodsFor: 'groups of shades' stamp: 'StephaneDucasse 10/16/2013 15:08'! wheel: thisMany "An array of thisMany colors around the color wheel starting at self and ending all the way around the hue space just before self. Array is of length thisMany. Very useful for displaying color based on a variable in your program. " | sat bri step hue | sat := self saturation. bri := self brightness. hue := self hue. step := 360.0 / (thisMany max: 1). ^ (1 to: thisMany) collect: [ :num | | c | c := self class h: hue s: sat v: bri. "hue is taken mod 360" hue := hue + step. c ] " (Color wheel: 8) withIndexDo: [:c :i | Display fill: (i*10@20 extent: 10@20) fillColor: c] "! ! !NewColor methodsFor: 'transformations' stamp: 'StephaneDucasse 10/16/2013 15:08'! whiter ^ self alphaMixed: 0.8333 with: (ColorRegistry at: #white) ! ! "Athens-Core"! "Graphics-Primitives"! "Morphic-Base"! "Polymorph-Widgets"! "System-CommandLine"! "System-Settings"! "Tools"! ----End fileIn----! ----QUIT----an Array(18 October 2013 3:09:45 pm) Pharo.image priorSource: 24713380! ----STARTUP----an Array(18 October 2013 3:15:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(18 October 2013 3:15:25 pm) Pharo-30501.image priorSource: 24810249! ----STARTUP----an Array(19 October 2013 8:48:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 10/19/2013 20:44' prior: 75045338! commentForCurrentUpdate ^ '11947 Added stackTop and Removed class in the debugger stack inspector. https://pharo.fogbugz.com/f/cases/11947 11519 Merge Color and Translucent Color. Thanks Luc Fabresse for the last part!! https://pharo.fogbugz.com/f/cases/11519'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/19/2013 20:45'! script157 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.129.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.44.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1647.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-EstebanLorenzano.114.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1330.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/19/2013 20:45'! update30502 "self new update30502" self withUpdateLog: '11947 Added stackTop and Removed class in the debugger stack inspector. https://pharo.fogbugz.com/f/cases/11947 11519 Merge Color and Translucent Color. Thanks Luc Fabresse for the last part!! https://pharo.fogbugz.com/f/cases/11519'. self loadTogether: self script157 merge: false. TranslucentColorRemoval switchToNewColor. self flushCaches. ! ! "ScriptLoader30"! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'abc 10/18/2013 14:09'! addStackTop: elements elements add: (DynamicEyeElement host: self object label: 'stackTop' value: [ self object stackPtr > 0 ifTrue: [ self object top ] ifFalse: [ #emptyStack ] ] ).! ! !EyeDebuggerContextInspector methodsFor: 'list' stamp: 'abc 10/18/2013 14:09'! generateElements "generate the collection of elements to show in the inspector for the object inspected" |elements| elements := OrderedCollection new. self addSelf: elements. self addStackTop: elements. self addAllInstVars: elements. self addSpecialFields: elements. self addInstancesVariable: elements. self addVariableFields: elements. ^elements! ! !TranslucentColorRemoval class methodsFor: 'util' stamp: 'LucFabresse 10/19/2013 14:36'! haltIfHasInstances: classNameSymbol 3 timesRepeat: [ Smalltalk garbageCollect ]. self haltIf: classNameSymbol asClass allInstances notEmpty. ! ! !TranslucentColorRemoval class methodsFor: 'before' stamp: 'LucFabresse 10/19/2013 16:59'! migrateColors | colors migrated | colors := #OldColor asClass allInstances. colors isEmpty ifTrue: [ ^ self ]. migrated := colors collect: [ :each | #Color asClass r: each red g: each green b: each blue ]. colors elementsForwardIdentityTo: migrated copyHash: true. "HashedCollection rehashAll." "not needed but..." ! ! !TranslucentColorRemoval class methodsFor: 'before' stamp: 'LucFabresse 10/19/2013 17:04'! migrateTranslucentColors #TranslucentColor asClass allInstancesDo: [ :each | "fix alpha for all translucents" (each instVarNamed: 'alpha') ifNil: [ each instVarNamed: 'alpha' put: 1.0] . "directly change class pointer of TranscluentColor instances" #Color asClass adoptInstance: each ]. "migrated := translucents collect: [ :each| #Color asClass r: each red g: each green b: each blue alpha: each alpha ]. translucents elementsForwardIdentityTo: migrated copyHash: true." ! ! !TranslucentColorRemoval class methodsFor: 'util' stamp: 'LucFabresse 10/19/2013 16:43'! renameClass: aClass to: aSymbol | refactoring | refactoring := RBRenameClassRefactoring rename: aClass to: aSymbol. refactoring execute. "self cleanChangesOfRefactoring: refactoring"! ! !TranslucentColorRemoval class methodsFor: 'before' stamp: 'LucFabresse 10/19/2013 17:25'! switchToNewColor Author fullName: 'LucFabresse'. #Color asClass allSubInstancesDo: [ :each | each flushCache ]. Smalltalk globals at: #OldColor put: #Color asClass. #NewColor asClass setName: #Color. Smalltalk globals at: #Color put: NewColor. #OldColor asClass setName: #OldColor. #Color asClass initialize. self migrateTranslucentColors. "self haltIfHasInstances: #TranslucentColor." self migrateColors. "self haltIfHasInstances: #OldColor." "self haltIfHasInstances: #TranslucentColor." #TranslucentColorTest asClass removeFromSystem . #TranslucentColor asClass removeFromSystem. "self haltIfHasInstances: #OldColor." #OldColor asClass removeFromSystem. self removeFromSystem. ! ! "Graphics-Primitives"! "Spec-Debugger"! Smalltalk globals removeClassNamed: #TranslucentColorTest! Smalltalk globals removeClassNamed: #TranslucentColor! Smalltalk globals removeClassNamed: #OldColor! Smalltalk globals removeClassNamed: #TranslucentColorRemoval! ----End fileIn----! ----QUIT----an Array(19 October 2013 8:48:39 pm) Pharo.image priorSource: 24810454! ----STARTUP----an Array(19 October 2013 8:53:41 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 October 2013 8:53:41 pm) Pharo-30502.image priorSource: 24825931! ----STARTUP----an Array(19 October 2013 10:00:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(19 October 2013 10:00:36 pm) Pharo.image priorSource: 24826136! ----STARTUP----an Array(19 October 2013 10:05:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(19 October 2013 10:05:18 pm) Pharo-30502.image priorSource: 24826352! ----STARTUP----an Array(20 October 2013 8:40:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(20 October 2013 8:40:35 pm) Pharo.image priorSource: 24826559! ----STARTUP----an Array(20 October 2013 8:45:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 October 2013 8:45:18 pm) Pharo-30502.image priorSource: 24826775! ----STARTUP----an Array(20 October 2013 9:11:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(20 October 2013 9:11:36 pm) Pharo.image priorSource: 24826980! ----STARTUP----an Array(20 October 2013 9:16:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 October 2013 9:16:12 pm) Pharo-30502.image priorSource: 24827195! ----STARTUP----an Array(20 October 2013 9:28:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 10/20/2013 21:18' prior: 75142412! commentForCurrentUpdate ^ '11519 Merge Color and Translucent Color - post publication https://pharo.fogbugz.com/f/cases/11519 11951 Cannot access in text editors to temporaries in context inspectors. Thanks Clement Bera https://pharo.fogbugz.com/f/cases/11951 11311 Rewrite Object class comment https://pharo.fogbugz.com/f/cases/11311'! ! !ScriptLoader methodsFor: 'load primitives' stamp: 'StephaneDucasse 10/20/2013 20:23' prior: 68259706! loadTogether: aCollection merge: aBoolean | loader | loader := aBoolean ifTrue: [ MCVersionMerger new ] ifFalse: [ MCVersionLoader new]. (self newerVersionsIn: aCollection) do: [:fn | loader addVersion: (self loadVersionFromFileNamed: fn)] displayingProgress: 'Adding versions...'. aBoolean ifTrue: [ [loader merge] on: MCMergeResolutionRequest do: [:request | request autoMerge ]] ifFalse: [ loader hasVersions ifTrue: [ [loader load] on: MCMergeOrLoadWarning do: [:ex | ex resume: true]]] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/19/2013 21:50'! script158 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.130.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.45.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1648.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-StephaneDucasse.116.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1330.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/20/2013 20:33'! script159 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.131.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.46.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1649.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-StephaneDucasse.117.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1330.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/20/2013 21:19'! script160 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1650.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.80.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-EstebanLorenzano.573.mcz NautilusCommon-MarcusDenker.173.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-StephaneDucasse.118.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1330.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/19/2013 21:50'! update30503 "self new update30503" self withUpdateLog: ' 11519 Merge Color and Translucent Color - post publication https://pharo.fogbugz.com/f/cases/11519 11951 Cannot access in text editors to temporaries in context inspectors. Thanks Clement Bera https://pharo.fogbugz.com/f/cases/11951 11311 Rewrite Object class comment https://pharo.fogbugz.com/f/cases/11311'. self loadTogether: self script158 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/20/2013 20:33'! update30504 "self new update30504" self withUpdateLog: '11519 Merge Color and Translucent Color - post publication https://pharo.fogbugz.com/f/cases/11519 11951 Cannot access in text editors to temporaries in context inspectors. Thanks Clement Bera https://pharo.fogbugz.com/f/cases/11951 11311 Rewrite Object class comment https://pharo.fogbugz.com/f/cases/11311'. self loadTogether: self script159 merge: false. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/20/2013 21:19'! update30505 "self new update30505" self withUpdateLog: '11519 Merge Color and Translucent Color - post publication https://pharo.fogbugz.com/f/cases/11519 11951 Cannot access in text editors to temporaries in context inspectors. Thanks Clement Bera https://pharo.fogbugz.com/f/cases/11951 11311 Rewrite Object class comment https://pharo.fogbugz.com/f/cases/11311'. self loadTogether: self script160 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Object commentStamp: '' prior: 42518817! Object is the root class for almost all of the other classes in the class hierarchy. The exceptions are ProtoObject (the superclass of Object) and its subclasses. Class Object provides default behavior common to all normal objects, such as access, copying, comparison, error handling, message sending, and reflection. Also utility messages that all objects should respond to are defined here. Object has no instance variables, nor should any be added. This is due to several classes of objects that inherit from Object that have special implementations (SmallInteger and UndefinedObject for example) or the VM knows about and depends on the structure and layout of certain standard classes. Class Variables: DependentsFields an IdentityDictionary Provides a virtual 'dependents' field so that any object may have one or more dependent views, synchronized by the changed:/update: protocol. Note that class Model has a real slot for its dependents, and overrides the associated protocol with more efficient implementations. Because Object is the root of the inheritance tree, methods are often defined in Object to give all objects special behaviors needed by certain subsystems or applications, or to respond to certain general test messages such as isMorph. Miscellanous Discussions. About at: index accepting float and not only integers This behavior is also free in the sense that the failure code is only invoked when the primitive fails and so adds nothing to the cost of successful accesses, which are the high dynamic frequency operation. It will also show up under profiling if one is concerned about efficiency, and so isn't a hidden cost. It is also in keeping with Smalltalk's mixed mode/arbitrary precision implicit coercion number system that one *can* use fractions or floats as indices. Stripping out coercions like this will make the system more brittle. So please do *not* remove this "hack". I think it's a feature and a useful one. Can you give me an example that demonstrates the usefulness of this feature? | a r | a := Array new: 10 withAll: 0. r := Random new. 100 timesRepeat: [| v | v := r next * 10 + 1. a at: v put: (a at: v) + 1]. a i.e. I didn't have to provide an explicit rounding step. That's useful. But in general anywhere where an index is derived by some calculation not having to provide the rounding step could be useful/helpful/more concise. e.g. (n roundTo: 0.1) * 10 vs ((n roundTo: 0.1) * 10) asInteger. Some thought went into the original choice. It is not a hack but there by intent. The integers are simply a subset of the reals and forcing the programmer to use them is favouring the machine above the programmer. But I think you should justify getting rid of it rather than my having to justify keeping it. Getting rid of it risks breaking code. If it is there but does not harm then why get rid of it? best Eliot Miranda ! !Object commentStamp: '' prior: 75195109! Object is the root class for almost all of the other classes in the class hierarchy. The exceptions are ProtoObject (the superclass of Object) and its subclasses. Class Object provides default behavior common to all normal objects, such as access, copying, comparison, error handling, message sending, and reflection. Also utility messages that all objects should respond to are defined here. Object has no instance variables, nor should any be added. This is due to several classes of objects that inherit from Object that have special implementations (SmallInteger and UndefinedObject for example) or the VM knows about and depends on the structure and layout of certain standard classes. Class Variables: DependentsFields an IdentityDictionary Provides a virtual 'dependents' field so that any object may have one or more dependent views, synchronized by the changed:/update: protocol. Note that class Model has a real slot for its dependents, and overrides the associated protocol with more efficient implementations. Because Object is the root of the inheritance tree, methods are often defined in Object to give all objects special behaviors needed by certain subsystems or applications, or to respond to certain general test messages such as isMorph. Miscellanous Discussions. About at: index accepting float and not only integers This behavior is also free in the sense that the failure code is only invoked when the primitive fails and so adds nothing to the cost of successful accesses, which are the high dynamic frequency operation. It will also show up under profiling if one is concerned about efficiency, and so isn't a hidden cost. It is also in keeping with Smalltalk's mixed mode/arbitrary precision implicit coercion number system that one *can* use fractions or floats as indices. Stripping out coercions like this will make the system more brittle. So please do *not* remove this "hack". I think it's a feature and a useful one. Can you give me an example that demonstrates the usefulness of this feature? | a r | a := Array new: 10 withAll: 0. r := Random new. 100 timesRepeat: [| v | v := r next * 10 + 1. a at: v put: (a at: v) + 1]. a i.e. I didn't have to provide an explicit rounding step. That's useful. But in general anywhere where an index is derived by some calculation not having to provide the rounding step could be useful/helpful/more concise. e.g. (n roundTo: 0.1) * 10 vs ((n roundTo: 0.1) * 10) asInteger. Some thought went into the original choice. It is not a hack but there by intent. The integers are simply a subset of the reals and forcing the programmer to use them is favouring the machine above the programmer. But I think you should justify getting rid of it rather than my having to justify keeping it. Getting rid of it risks breaking code. If it is there but does not harm then why get rid of it? best Eliot Miranda ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBer 10/18/2013 16:25' prior: 68589584! objectChanged "triggered when the inspected object is changed" self updateList. self text doItReceiver: self object. self description doItReceiver: self object. self text doItContext: self doItContext. self description doItContext: self doItContext. ! ! !EyeInspector methodsFor: 'event-handling' stamp: 'ClementBer 10/18/2013 16:26' prior: 68254140! printDescription: item self refreshDescription: item! ! "Graphics-Primitives"! "Graphics-Tests"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(20 October 2013 9:29:02 pm) Pharo.image priorSource: 24827400! ----STARTUP----an Array(20 October 2013 9:34:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(20 October 2013 9:34:33 pm) Pharo-30505.image priorSource: 24869959! ----STARTUP----an Array(21 October 2013 8:28:35 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 08:24' prior: 75159358! commentForCurrentUpdate ^ '11950 Context menu does not work with Spec inspector https://pharo.fogbugz.com/f/cases/11950 11610 Failing test KMDispatcherTestCase>>#testAttach https://pharo.fogbugz.com/f/cases/11610 11772 as yet unclassified protocol remains when empty https://pharo.fogbugz.com/f/cases/11772 11952 Improve NautilusHistory by adding unsaved states in it https://pharo.fogbugz.com/f/cases/11952'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 08:24'! script161 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.12.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1650.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.163.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.575.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.426.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-EstebanLorenzano.184.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.21.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 08:25'! update30506 "self new update30506" self withUpdateLog: '11950 Context menu does not work with Spec inspector https://pharo.fogbugz.com/f/cases/11950 11610 Failing test KMDispatcherTestCase>>#testAttach https://pharo.fogbugz.com/f/cases/11610 11772 as yet unclassified protocol remains when empty https://pharo.fogbugz.com/f/cases/11772 11952 Improve NautilusHistory by adding unsaved states in it https://pharo.fogbugz.com/f/cases/11952'. self loadTogether: self script161 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NautilusHistoryEntry commentStamp: '' prior: 0! I am a history entry which hold a single step of the Nautilus browsing history! !NautilusHistoryEntryWithSourceCode commentStamp: '' prior: 0! I am a special wrapper used to store in the history unsaved source code! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/18/2013 16:17' prior: 74351941! updateBothView | selectedPackage selectedClass | selectedPackage := self selectedPackage. selectedClass := self selectedClass. super updateBothView. "I need to restore selection (otherwise, nothing goes to the right position)" self selectedPackage: selectedPackage. self selectedClass: selectedClass.! ! !TInspectorActions methodsFor: 'actions' stamp: 'abc 10/18/2013 15:01'! browseSelectedObjectClass self selectedObjectDo: [ :anObject | Smalltalk tools browser newOnClass: anObject class ]! ! !Nautilus methodsFor: 'history' stamp: 'BenjaminVanRyseghem 10/18/2013 17:13' prior: 27962183! adopt: anAssociation self browsingHistory pauseDuring: [ anAssociation key applyTo: self ]! ! !Nautilus methodsFor: 'history' stamp: 'BenjaminVanRyseghem 10/18/2013 17:58' prior: 27964251! package: aPackage class: aClass category: aCategory method: aMethod self selectedPackage: aPackage; selectedClass: aClass; selectedCategory: aCategory; selectedMethod: aMethod. self registerHistoryNewEntry.! ! !Nautilus methodsFor: 'history' stamp: 'BenjaminVanRyseghem 10/18/2013 17:34' prior: 27965078! registerHistoryNewEntry | lastEntry wrapper | self browsingHistory isPaused ifTrue: [ ^ self ]. wrapper := NautilusHistoryEntry with: self. self browsingHistory entries ifNotEmpty: [ :entries | lastEntry := entries last key. ( lastEntry selectedClass isNil or: [ ( wrapper selectedClass notNil and: [ wrapper selectedMethod = lastEntry selectedMethod and: [ wrapper selectedClass theNonMetaClass = lastEntry selectedClass theNonMetaClass ] ] ) ] ) ifTrue: [ ^ self ] ]. wrapper showGroups ifTrue: [ wrapper selectedGroup ifNil: [ ^ self ] ] ifFalse: [ wrapper selectedClass ifNil: [ ^ self ] ]. self browsingHistory add: wrapper. self triggerEvent: #historyChanged.! ! !Nautilus methodsFor: 'history' stamp: 'BenjaminVanRyseghem 10/18/2013 17:15'! removeFromHistory: aNautilusHistoryEntry self browsingHistory removeEntry: aNautilusHistoryEntry. self triggerEvent: #historyChanged! ! !Nautilus methodsFor: 'history' stamp: 'BenjaminVanRyseghem 10/18/2013 17:28'! removeLastHistoryEntry self browsingHistory removeLastEntry. self triggerEvent: #historyChanged! ! !EyeAbstractInspector methodsFor: 'menu' stamp: 'abc 10/18/2013 14:50' prior: 74111279! inspectionSubMenu: aMenu aMenu add: 'Inspect (i)' translated target: self selector: #inspectSelectedObjectInNewWindow. aMenu add: 'Explore (I)' translated target: self selector: #exploreSelectedObject. self customMenuActions cull: aMenu. aMenu addLine.! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'abc 10/18/2013 14:54' prior: 74112649! selectedObjectDo: aBlock self selectedElement ifNotNil: [ :element | aBlock value: element value ]! ! !NautilusUI methodsFor: 'history behavior' stamp: 'BenjaminVanRyseghem 10/18/2013 17:45' prior: 28292064! currentHistoryIndex | index item | index := 1 min: self getHistoryList size. index = 0 ifTrue: [ ^ 0 ]. item := (self getHistoryList at: index) key. self selectedClass = item selectedClass ifFalse: [ ^ 0 ]. self selectedMethod ifNil: [ ^ 0 ]. self selectedMethod selector = item selectedMethod ifTrue: [ ^ index ] ifFalse: [ ^ 0 ]! ! !NautilusUI methodsFor: 'drag and drop' stamp: 'CD 10/18/2013 17:22' prior: 28288685! move: item from: oldCategory to: newCategory isCopy: isCopy | category | category := newCategory. category = self allLabel ifTrue: [ category := self asYetUnclassifiedString ]. isCopy ifFalse: [ item methodClass organization classify: item selector under: category suppressIfDefault: true. self selectedMethod: item ] ! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'CD 10/18/2013 17:28' prior: 28301954! removeMethod: aMethod inClass: aClass "If a message is selected, create a Confirmer so the user can verify that the currently selected message should be removed from the system. If so, remove it. " | result | self okToChange ifFalse: [^ false]. result := super removeMethod: aMethod inClass: aClass. result ifTrue: [ self update ]. ^result! ! !NautilusUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:55' prior: 28280297! selectedCategoryInternally: anObject self resetMethodsListSelection. anObject ifNotNil: [ self giveFocusTo: categoryWidget ]. self changed: #sourceCodeFrom:! ! !NautilusUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:56' prior: 28281887! selectedClassWithoutChangingSelectionInternally: aClass | package packageChanged | package := self selectedPackage. (self showPackages not or: [ self showGroups ]) ifTrue: [ aClass ifNotNil: [ package := aClass package ] ]. aClass ifNil: [ classesSelection removeAll ]. aClass ifNotNil: [ self giveFocusTo: list2 ]. packageChanged := (package ~= self selectedPackage). classesSelection at: aClass put: true. self model selectedClass: aClass. self setWindowTitle. packageChanged ifTrue: [ packagesSelection removeAll. packagesSelection at: package put: true. self showGroups ifTrue: [ self updateClassView ] ifFalse: [ self updateBothView ] ]. self resetCategoriesListSelection. self resetMethodsListSelection. self update. self changed: #isAClassSelected. self changed: #getComments. self changed: #sourceCodeFrom:! ! !NautilusUI methodsFor: 'history behavior' stamp: 'BenjaminVanRyseghem 10/18/2013 17:39' prior: 28293185! setHistory: anIndex | entry | anIndex == self currentHistoryIndex ifTrue: [ ^ self ]. entry := self getHistoryList at: anIndex ifAbsent: [ nil ]. entry ifNil: [ ^ self ]. self model adopt: entry. self changed: #currentHistoryIndex.! ! !NautilusUI methodsFor: 'history behavior' stamp: 'BenjaminVanRyseghem 10/18/2013 16:36' prior: 28293457! wrapHistory: anEntry ^ GoBackStringMorph contents: anEntry key asHistoryString! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'abc 10/18/2013 14:55'! selectedObjectDo: aBlock aBlock value: self selectedObject ! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'BenjaminVanRyseghem 10/18/2013 18:00' prior: 17340107! okToChange | wrapper | sourceTextArea text asString trimBoth = sourceTextArea getText asString trimBoth ifTrue: [ ^ true ]. sourceTextArea canDiscardEdits ifTrue: [^ true]. wrapper := (NautilusHistoryEntryWithSourceCode with: self model) sourceCode: self sourceTextArea textMorph text. self model removeLastHistoryEntry. self model browsingHistory add: wrapper. self model triggerEvent: #historyChanged. ^ true! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'BenjaminVanRyseghem 10/18/2013 16:43' prior: 17340429! okToChangeBoth ^ self okToChange and: [ self okToChangeComment ]! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'BenjaminVanRyseghem 10/18/2013 16:30'! pendingText: aString self sourceTextArea setText: aString; hasUnacceptedEdits: true! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:56' prior: 17258314! selectedPackageWithoutChangingSelectionInternally: aPackage | class | class := self selectedClass. (self showPackages and: [class notNil and: [class package ~= aPackage]]) ifTrue: [ self selectedClass: nil ]. packagesSelection at: aPackage put: true. aPackage ifNotNil: [ self giveFocusTo: list ]. self updateClassView. self update. self changed: #getComments. self changed: #sourceCodeFrom:! ! !EyeInspector methodsFor: 'actions' stamp: 'abc 10/18/2013 14:56' prior: 74113773! copySelectedItemAccessorCode self hasSelectedObject ifFalse: [ ^ self ]. self selectedElement copyAccessorCode.! ! !ClassEyeElement methodsFor: 'accessing' stamp: 'abc 10/18/2013 14:57' prior: 68609955! accessorCode ^ 'self class'! ! !AbstractTool methodsFor: 'category' stamp: 'ChristopheDemarey 10/18/2013 17:40'! removeEmptyUnclassifiedCategoryFrom: aClass "Remove the 'as yet unclassified' category from the class if empty" | unclassifiedProtocol protocolOrganizer | protocolOrganizer := aClass organization protocolOrganizer. unclassifiedProtocol := protocolOrganizer protocols detect: [ :protocol | protocol name = Protocol unclassified ] ifNone: [ ^ self ]. unclassifiedProtocol isEmpty ifTrue: [ protocolOrganizer removeProtocol: unclassifiedProtocol ]! ! !AbstractTool methodsFor: 'method' stamp: 'ChristopheDemarey 10/18/2013 17:39' prior: 71883494! removeMethod: aMethod inClass: aClass "If a message is selected, create a Confirmer so the user can verify that the currently selected message should be removed from the system. If so, remove it. " | messageName confirmation | aMethod ifNil: [^ false]. messageName := aMethod selector. confirmation := self systemNavigation confirmRemovalOf: messageName on: aClass. confirmation = 3 ifTrue: [^ false]. (aClass includesLocalSelector: messageName) ifTrue: [ aClass removeSelector: messageName ] ifFalse: [ self removeNonLocalSelector: messageName ]. "In case organization not cached" confirmation = 2 ifTrue: [self systemNavigation browseAllSendersOf: messageName]. self removeEmptyUnclassifiedCategoryFrom: aClass. ^ true! ! !TBehavior methodsFor: '*Nautilus' stamp: 'BenjaminVanRyseghem 10/18/2013 16:23'! methodNamed: aSelector ifAbsent: aBlock ^ self methodDict at: aSelector ifAbsent: aBlock! ! !NautilusHistoryEntry commentStamp: '' prior: 75214247! I am a history entry which hold a single step of the Nautilus browsing history! !NautilusHistoryEntry class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! with: aNautilus ^ self new with: aNautilus; yourself! ! !NautilusHistoryEntry methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! = anotherWrapper self species = anotherWrapper species ifFalse: [ ^ false ]. ^ self selectedPackage = anotherWrapper selectedPackage and: [ self selectedGroup = anotherWrapper selectedGroup and: [ self selectedClass = anotherWrapper selectedClass and: [ self selectedCategory = anotherWrapper selectedCategory and: [ self selectedMethod = anotherWrapper selectedMethod and: [ self showPackages = anotherWrapper showPackages and: [ self showInstance = anotherWrapper showInstance and: [ self showGroups = anotherWrapper showGroups and: [ self showHierarchy = anotherWrapper showHierarchy and: [ self showComment = anotherWrapper showComment and:[ self showCategories = anotherWrapper showCategories ]]]]]]]]]]! ! !NautilusHistoryEntry methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:59'! applyTo: aNautilus aNautilus ui ifNotNil: [ :interface | interface resetSelections]. aNautilus selectedPackage: self selectedPackage; selectedClass: self selectedClass; selectedCategory: self selectedCategory. self selectedMethod ifNil: [ aNautilus selectedMethod: nil ] ifNotNil: [:sel | aNautilus selectedMethod: (self selectedClass methodDict at: sel ifAbsent: [ nil ])]. aNautilus browsingHistory pauseDuring: [ aNautilus selectedGroup: self selectedGroup; showPackages: self showPackages; showGroups: self showGroups; showHierarchy: self showHierarchy; showComment: self showComment; showInstance: self showInstance; showCategories: self showCategories. ]. aNautilus ui ifNotNil: [:interface || cl | cl := self selectedClass. interface showPackages: aNautilus showPackages. cl ifNil: [ interface showInstance: false ] ifNotNil: [ interface showInstance: cl isMeta not. cl := cl theNonMetaClass ]. interface selectedPackageWithoutChangingSelectionInternally: self selectedPackage; selectedClassWithoutChangingSelectionInternally: cl; selectedCategoryInternally: self selectedCategory. interface updateBothView. self selectedMethod ifNil: [ interface selectedMethod: nil ] ifNotNil: [:sel | interface selectedMethod: (cl methodNamed: sel ifAbsent: [ nil ])]. interface update ].! ! !NautilusHistoryEntry methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! asHistoryString | label separator | separator := ' >>#'. self showGroups ifTrue: [ label := Text streamContents: [:s | self selectedGroup ifNotNil: [:g | s << ('G: ' asText addAttribute: TextEmphasis italic from: 1 to: 3) << (g name asText addAttribute: TextEmphasis italic from: 1 to: g name size). self selectedClass ifNotNil: [:c | s << separator << c name. self selectedMethod ifNotNil: [:m | s << separator << m asString ]]]]] ifFalse: [ label := String streamContents: [:s | self selectedPackage ifNotNil: [:p | self selectedClass ifNotNil: [:c | s << c name. self selectedMethod ifNotNil: [:m | s << separator << m asString ]]]]]. ^ label! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedCategory ^ selectedCategory! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedCategory: anObject selectedCategory := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedClass ^ selectedClass! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedClass: anObject selectedClass := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedGroup ^ selectedGroup! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedGroup: anObject selectedGroup := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedMethod ^ selectedMethod! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedMethod: anObject selectedMethod := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedPackage ^ selectedPackage! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! selectedPackage: anObject selectedPackage := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showCategories ^ showCategories! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showCategories: anObject showCategories := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showComment ^ showComment! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showComment: anObject showComment := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showGroups ^ showGroups! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showGroups: anObject showGroups := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showHierarchy ^ showHierarchy! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showHierarchy: anObject showHierarchy := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showInstance ^ showInstance! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showInstance: anObject showInstance := anObject! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showPackages ^ showPackages! ! !NautilusHistoryEntry methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! showPackages: anObject showPackages := anObject! ! !NautilusHistoryEntry methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/18/2013 17:32'! with: aNautilus self selectedPackage: aNautilus selectedPackage; selectedCategory: aNautilus selectedCategory. aNautilus selectedMethod ifNil: [ self selectedMethod: nil ] ifNotNil: [:met | self selectedMethod: met selector]. self selectedClass: aNautilus selectedClass; selectedGroup: aNautilus selectedGroup; showPackages: aNautilus showPackages; showGroups: aNautilus showGroups; showHierarchy: aNautilus showHierarchy; showComment: aNautilus showComment; showInstance: aNautilus showInstance; showCategories: aNautilus showCategories.! ! !NautilusHistoryEntryWithSourceCode commentStamp: '' prior: 75214402! I am a special wrapper used to store in the history unsaved source code! !NautilusHistoryEntryWithSourceCode class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/18/2013 17:33'! with: aNautilus sourceCode: sourceCode ^ self new with: aNautilus; sourceCode: sourceCode; yourself! ! !NautilusHistoryEntryWithSourceCode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:33'! applyTo: aNautilus super applyTo: aNautilus. aNautilus ui ifNotNil: [ :interface | interface pendingText: self sourceCode ]. aNautilus removeFromHistory: self! ! !NautilusHistoryEntryWithSourceCode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:33'! asHistoryString ^ '*', super asHistoryString! ! !NautilusHistoryEntryWithSourceCode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:33'! sourceCode ^ sourceCode ifNil: [ '' ]! ! !NautilusHistoryEntryWithSourceCode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/18/2013 17:33'! sourceCode: anObject sourceCode := anObject! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:48' prior: 28334423! addEntry: anEntry self isPaused ifTrue: [ ^ self ]. self basicAdd: anEntry! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:48'! basicAdd: anEntry ( storage isEmpty not and: [ storage last = anEntry ] ) ifTrue: [ ^ self ]. anEntry = self current key ifTrue: [ ^ self ]. self checkSize. index := index +1. index > storage size ifTrue: [ storage addLast: (anEntry -> TimeStamp now)] ifFalse: [ storage := storage copyFrom: 1 to: index. storage at: index put: (anEntry -> TimeStamp now)]! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:36'! removeEntry: anEntry | toRemove | "we know that toRemove will always contains one element" toRemove := (storage select: [:e | e key == anEntry ]). toRemove ifEmpty: [ ^ self ]. toRemove := toRemove first. storage remove: toRemove. storage addLast: toRemove! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 18:00'! removeLastEntry self isPaused ifTrue: [ ^ self ]. storage ifEmpty: [ ^ self ]. storage remove: storage last. index := index -1! ! NautilusWrapper removeSelector: #with:! NautilusWrapper removeSelector: #showPackages:! NautilusWrapper removeSelector: #showPackages! NautilusWrapper removeSelector: #showInstance:! NautilusWrapper removeSelector: #showInstance! NautilusWrapper removeSelector: #showHierarchy:! NautilusWrapper removeSelector: #showHierarchy! NautilusWrapper removeSelector: #showGroups:! NautilusWrapper removeSelector: #showGroups! NautilusWrapper removeSelector: #showComment:! NautilusWrapper removeSelector: #showComment! NautilusWrapper removeSelector: #showCategories:! NautilusWrapper removeSelector: #showCategories! NautilusWrapper removeSelector: #selectedPackage:! NautilusWrapper removeSelector: #selectedPackage! NautilusWrapper removeSelector: #selectedMethod:! NautilusWrapper removeSelector: #selectedMethod! NautilusWrapper removeSelector: #selectedGroup:! NautilusWrapper removeSelector: #selectedGroup! NautilusWrapper removeSelector: #selectedClass:! NautilusWrapper removeSelector: #selectedClass! NautilusWrapper removeSelector: #selectedCategory:! NautilusWrapper removeSelector: #selectedCategory! NautilusWrapper removeSelector: #=! NautilusWrapper class removeSelector: #with:! Smalltalk globals removeClassNamed: #NautilusWrapper! KMDispatcherTestCase removeSelector: #testAttach! !Trait method! browseSelectedObjectClass self selectedObjectDo: [ :anObject | Smalltalk tools browser newOnClass: anObject class ]! ! !Trait method! browseSelectedObjectClass self selectedObjectDo: [ :anObject | Smalltalk tools browser newOnClass: anObject class ]! ! !Trait method! methodNamed: aSelector ifAbsent: aBlock ^ self methodDict at: aSelector ifAbsent: aBlock! ! !Trait method! methodNamed: aSelector ifAbsent: aBlock ^ self methodDict at: aSelector ifAbsent: aBlock! ! "Keymapping-Tests"! "Nautilus"! "NautilusCommon"! "Spec-Inspector"! "Tools"! ----End fileIn----! ----QUIT----an Array(21 October 2013 8:28:44 am) Pharo.image priorSource: 24870164! ----STARTUP----an Array(21 October 2013 8:33:29 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 8:33:30 am) Pharo-30506.image priorSource: 24903804! ----STARTUP----an Array(21 October 2013 9:02:31 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 08:59' prior: 75202119! commentForCurrentUpdate ^ '11958 Add support for window menu addition https://pharo.fogbugz.com/f/cases/11958 11956 Move CompiledMethods deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11956 11957 Move OpalCompiler deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11957 11492 Kill UpdatingStringMorph, UpdatingMenu, and NameInHaloMorph https://pharo.fogbugz.com/f/cases/11492'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 08:59'! script162 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.290.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1650.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.164.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.575.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.24.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.21.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 08:59'! update30507 "self new update30507" self withUpdateLog: '11958 Add support for window menu addition https://pharo.fogbugz.com/f/cases/11958 11956 Move CompiledMethods deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11956 11957 Move OpalCompiler deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/11957 11492 Kill UpdatingStringMorph, UpdatingMenu, and NameInHaloMorph https://pharo.fogbugz.com/f/cases/11492'. self loadTogether: self script162 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:30' prior: 74148933! decompile self deprecated: 'decompiling bc->text is not supported'. ^self class compiler decompileMethod: self.! ! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:30' prior: 74149155! decompileString self deprecated: 'decompiling bc->text is not supported'. ^self codeForNoSource.! ! !WindowModel methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 10/19/2013 15:17'! addMenuItemsToWindowMenu: aMenu self model addMenuItemsToWindowMenu: aMenu! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/19/2013 15:17'! addModelItemsToWindowMenu: aMenu self model addMenuItemsToWindowMenu: aMenu! ! !ButtonModel methodsFor: 'morphic' stamp: 'ChristopheDemarey 10/18/2013 12:58' prior: 69426571! label ^ labelHolder contents! ! !HaloMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/18/2013 10:58' prior: 23180583! addNameBeneath: outerRectangle string: aString "Add a name display centered beneath the bottom of the outer rectangle. Return the handle." | namePosition w | w := self world ifNil:[target world]. nameMorph := StringMorph contents: aString font: StandardFonts haloFont. nameMorph wantsYellowButtonMenu: false. nameMorph color: Color black. nameMorph useStringFormat; target: innerTarget; putSelector: #renameTo:. namePosition := outerRectangle bottomCenter - ((nameMorph width // 2) @ (self handleSize negated // 2 - 1)). nameMorph position: (namePosition min: w viewBox bottomRight - nameMorph extent y + 2). self addMorph: nameMorph. ^ nameMorph! ! !OpalCompiler methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:31' prior: 74147679! decompileMethod: aCompiledMethod self deprecated: 'decompiling bc->text is not supported'. ^self parse: aCompiledMethod codeForNoSource. ! ! !MenuMorph methodsFor: 'construction' stamp: 'BenjaminVanRyseghem 10/18/2013 10:57' prior: 25485825! addTitle: aString icon: aForm updatingSelector: aSelector updateTarget: aTarget "Add a title line at the top of this menu Make aString its initial contents. If aSelector is not nil, then periodically obtain fresh values for its contents by sending aSelector to aTarget.." "Overridden to support menu dragging from the title-bar" | title titleContainer | title := AlignmentMorph newColumn. self setTitleParametersFor: title. "" aForm isNil ifTrue: [titleContainer := title] ifFalse: [| pair | pair := AlignmentMorph newRow. pair color: Color transparent. pair hResizing: #shrinkWrap. pair layoutInset: 0. "" pair addMorphBack: aForm asMorph. "" titleContainer := AlignmentMorph newColumn. titleContainer color: Color transparent. titleContainer vResizing: #shrinkWrap. titleContainer wrapCentering: #center. titleContainer cellPositioning: #topCenter. titleContainer layoutInset: 0. pair addMorphBack: titleContainer. "" title addMorphBack: pair]. "" aSelector ifNil: ["" aString asString linesDo: [:line | titleContainer addMorphBack: (StringMorph contents: line font: StandardFonts menuFont)]] ifNotNil: [| stringMorph | stringMorph := (aTarget perform: aSelector) asStringMorph. stringMorph font: StandardFonts menuFont. stringMorph lock. titleContainer addMorphBack: stringMorph]. "" title setProperty: #titleString toValue: aString. self addMorphFront: title. "" title useSquareCorners. title on: #mouseDown send: #mouseDownInTitle: to: self. (self hasProperty: #needsTitlebarWidgets) ifTrue: [self addStayUpIcons]! ! !MenuMorph methodsFor: 'control' stamp: 'BenjaminVanRyseghem 10/18/2013 10:59' prior: 25495475! popUpAt: aPoint forHand: hand in: aWorld allowKeyboard: aBoolean "Present this menu at the given point under control of the given hand." | evt | aWorld submorphs select: [ :each | (each isKindOf: MenuMorph) and: [each stayUp not]] thenCollect: [ :menu | menu delete]. self items isEmpty ifTrue: [^ self]. self layoutItems. "precompute width" self positionAt: aPoint relativeTo: (selectedItem ifNil: [self items first]) inWorld: aWorld. aWorld addMorphFront: self. "Acquire focus for valid pop up behavior" hand newMouseFocus: self. aBoolean ifTrue: [hand newKeyboardFocus: self]. evt := hand lastEvent. (evt isKeyboard or: [evt isMouse and: [evt anyButtonPressed not]]) ifTrue: ["Select first item if button not down" self moveSelectionDown: 1 event: evt]. self updateColor. self changed! ! !ComposableModel methodsFor: 'window menu' stamp: 'BenjaminVanRyseghem 10/19/2013 15:18'! addMenuItemsToWindowMenu: aMenu "Do nothing"! ! UpdatingMenuMorph removeSelector: #updater:updateSelector:! UpdatingMenuMorph removeSelector: #updateMenu! Smalltalk globals removeClassNamed: #UpdatingMenuMorph! MenuMorph removeSelector: #addUpdating:enablementSelector:target:selector:argumentList:! MenuMorph removeSelector: #addUpdating:enablement:action:! ButtonModel removeSelector: #buildLabel:withIcon:! UpdatingStringMorph removeSelector: #wouldAcceptKeyboardFocus! UpdatingStringMorph removeSelector: #veryDeepInner:! UpdatingStringMorph removeSelector: #veryDeepFixupWith:! UpdatingStringMorph removeSelector: #valueFromContents! UpdatingStringMorph removeSelector: #userEditsAllowed! UpdatingStringMorph removeSelector: #useSymbolFormat! UpdatingStringMorph removeSelector: #useStringFormat! UpdatingStringMorph removeSelector: #useDefaultFormat! UpdatingStringMorph removeSelector: #updateContentsFrom:! UpdatingStringMorph removeSelector: #toggleGrowability! UpdatingStringMorph removeSelector: #target:! UpdatingStringMorph removeSelector: #target! UpdatingStringMorph removeSelector: #stringForNumericValue:! UpdatingStringMorph removeSelector: #stepTime:! UpdatingStringMorph removeSelector: #stepTime! UpdatingStringMorph removeSelector: #step! UpdatingStringMorph removeSelector: #setToAllowTextEdit! UpdatingStringMorph removeSelector: #setPrecision! UpdatingStringMorph removeSelector: #setFontStyle! UpdatingStringMorph removeSelector: #setFontSize! UpdatingStringMorph removeSelector: #setDecimalPlacesFromTypeIn:! UpdatingStringMorph removeSelector: #setDecimalPlaces:! UpdatingStringMorph removeSelector: #readFromTarget! UpdatingStringMorph removeSelector: #putSelector:! UpdatingStringMorph removeSelector: #putSelector! UpdatingStringMorph removeSelector: #mouseDown:! UpdatingStringMorph removeSelector: #minimumWidth:! UpdatingStringMorph removeSelector: #minimumWidth! UpdatingStringMorph removeSelector: #maximumWidth:! UpdatingStringMorph removeSelector: #maximumWidth! UpdatingStringMorph removeSelector: #lostFocusWithoutAccepting! UpdatingStringMorph removeSelector: #initialize! UpdatingStringMorph removeSelector: #informTarget! UpdatingStringMorph removeSelector: #handlesMouseDown:! UpdatingStringMorph removeSelector: #handlerForMouseDown:! UpdatingStringMorph removeSelector: #growable:! UpdatingStringMorph removeSelector: #growable! UpdatingStringMorph removeSelector: #getSelector:! UpdatingStringMorph removeSelector: #getSelector! UpdatingStringMorph removeSelector: #format! UpdatingStringMorph removeSelector: #floatPrecisionForDecimalPlaces:! UpdatingStringMorph removeSelector: #floatPrecision:! UpdatingStringMorph removeSelector: #floatPrecision! UpdatingStringMorph removeSelector: #fitContents! UpdatingStringMorph removeSelector: #doneWithEdits! UpdatingStringMorph removeSelector: #decimalPlacesForFloatPrecision:! UpdatingStringMorph removeSelector: #decimalPlaces:! UpdatingStringMorph removeSelector: #decimalPlaces! UpdatingStringMorph removeSelector: #contents:! UpdatingStringMorph removeSelector: #checkTarget! UpdatingStringMorph removeSelector: #autoAcceptOnFocusLoss:! UpdatingStringMorph removeSelector: #autoAcceptOnFocusLoss! UpdatingStringMorph removeSelector: #addCustomMenuItems:hand:! UpdatingStringMorph removeSelector: #acceptValueFromTarget:! UpdatingStringMorph removeSelector: #acceptValue:! UpdatingStringMorph removeSelector: #acceptContents! UpdatingStringMorph class removeSelector: #on:selector:! NameStringInHalo removeSelector: #placeContents! NameStringInHalo removeSelector: #interimContents:! NameStringInHalo removeSelector: #drawOn:! NameStringInHalo removeSelector: #cancelEdits! Smalltalk globals removeClassNamed: #NameStringInHalo! Smalltalk globals removeClassNamed: #UpdatingStringMorph! UpdatingMenuItemMorph removeSelector: #wordingProvider:wordingSelector:! UpdatingMenuItemMorph removeSelector: #wordingArgument:! UpdatingMenuItemMorph removeSelector: #updateContents! UpdatingMenuItemMorph removeSelector: #stepTime! UpdatingMenuItemMorph removeSelector: #step! UpdatingMenuItemMorph removeSelector: #enablementSelector:! UpdatingMenuItemMorph removeSelector: #enablement! UpdatingMenuItemMorph removeSelector: #arrangeToStartSteppingIn:! Smalltalk globals removeClassNamed: #UpdatingMenuItemMorph! "Deprecated30"! "Morphic-Base"! "OpalCompiler-Core"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----an Array(21 October 2013 9:02:40 am) Pharo.image priorSource: 24904009! ----STARTUP----an Array(21 October 2013 9:07:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 9:07:20 am) Pharo-30507.image priorSource: 24925594! ----STARTUP----an Array(21 October 2013 10:20:30 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 10:16' prior: 75235964! commentForCurrentUpdate ^ '11959 CMD+/ => Comment Selection or Line In PluggableTextMorph (Workspace, Nautilus code pane, ...) https://pharo.fogbugz.com/f/cases/11959 11903 unused MorphicUnknownEvent https://pharo.fogbugz.com/f/cases/11903 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 10:17'! script163 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1650.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.165.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.575.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.24.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.73.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 10:17'! update30508 "self new update30508" self withUpdateLog: '11959 CMD+/ => Comment Selection or Line In PluggableTextMorph (Workspace, Nautilus code pane, ...) https://pharo.fogbugz.com/f/cases/11959 11903 unused MorphicUnknownEvent https://pharo.fogbugz.com/f/cases/11903 '. self loadTogether: self script163 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PluggableTextMorph methodsFor: 'editor access' stamp: 'LucFabresse 10/20/2013 00:52'! toggleCommentOnSelectionOrLine "Tell my textMorph's editor to comment or uncomment current selection or line if no there is no selection" textMorph editor toggleCommentOnSelectionOrLine ! ! !SmalltalkEditor methodsFor: 'shortcuts' stamp: 'LucFabresse 10/20/2013 01:06'! toggleCommentOnSelectionOrLine | originalHasSelection selection selectionInterval originalSelectionInterval quote modifiedSelection newSelectionLastPosition numberOfDoubleQuoteBeforeCaret | selectionInterval := originalSelectionInterval := self selectionInterval. originalHasSelection := self hasSelection. originalHasSelection ifFalse: [ selectionInterval := self string encompassLine: originalSelectionInterval. self selectInvisiblyFrom: selectionInterval first to: selectionInterval last. ]. selection := self string copyFrom: selectionInterval first to: selectionInterval last. numberOfDoubleQuoteBeforeCaret := 0. selection withIndexDo: [ :char :i | ((i + selectionInterval first) < originalSelectionInterval first and: [ char = $" ]) ifTrue: [ numberOfDoubleQuoteBeforeCaret := numberOfDoubleQuoteBeforeCaret + 1 ]]. quote := selection trimLeft first. quote = $" ifTrue: [ modifiedSelection := selection asUncommentedSmalltalkCode. numberOfDoubleQuoteBeforeCaret := (((numberOfDoubleQuoteBeforeCaret - 1) // 2) + 1) negated. newSelectionLastPosition := (selection size - modifiedSelection size) negated. ] ifFalse: [ modifiedSelection := selection asSmalltalkComment. numberOfDoubleQuoteBeforeCaret := numberOfDoubleQuoteBeforeCaret + 1. newSelectionLastPosition := modifiedSelection size - selection size. ]. self replaceSelectionWith: modifiedSelection. originalHasSelection ifFalse: [ self selectAt: (originalSelectionInterval first + numberOfDoubleQuoteBeforeCaret). ] ifTrue: [ self selectInterval: ((originalSelectionInterval first) to: (originalSelectionInterval last + newSelectionLastPosition)) ]! ! !TextEditor class methodsFor: 'shortcuts' stamp: 'LucFabresse 10/20/2013 01:01' prior: 52678493! buildTextEditorShortcutsOn: aBuilder (aBuilder shortcut: #toggleCommentOnSelectionOrLine) category: #TextEditor shortcut: $/ ctrl win | $/ ctrl unix | $/ command mac do: [ :target | target handleEdit: [ target toggleCommentOnSelectionOrLine ] ]. (aBuilder shortcut: #selectAll) category: #TextEditor shortcut: $a ctrl win | $a ctrl unix | $a command mac do: [ :target | target handleEdit: [ target selectAll ] ]. (aBuilder shortcut: #copySelection) category: #TextEditor default: $c ctrl win | $c ctrl unix | $c command mac do: [ :target | target copySelection ]. (aBuilder shortcut: #find) category: #TextEditor default: $f ctrl win | $f ctrl unix | $f command mac do: [ :target | target find ]. (aBuilder shortcut: #findAgain) category: #TextEditor default: $g ctrl win | $g ctrl unix | $g command mac do: [ :target | target findAgain ]. (aBuilder shortcut: #setSearchString) category: #TextEditor default: $h ctrl win | $h ctrl unix | $h command mac do: [ :target | target setSearchString ]. (aBuilder shortcut: #cancel) category: #TextEditor default: $l ctrl win | $l ctrl unix | $l command mac do: [ :target | target cancel ]. (aBuilder shortcut: #paste) category: #TextEditor default: $v ctrl win | $v ctrl unix | $v command mac do: [ :target | target paste ]. (aBuilder shortcut: #cut) category: #TextEditor default: $x ctrl win | $x ctrl unix | $x command mac do: [ :target | target cut ]. (aBuilder shortcut: #undo) category: #TextEditor default: $z ctrl win | $z ctrl unix | $z command mac do: [ :target | target undo ]. (aBuilder shortcut: #redo) category: #TextEditor default: $z ctrl shift win | $z ctrl shift unix | $z command shift mac do: [ :target | target redo ]. (aBuilder shortcut: #cursorHome) category: #TextEditor default: Character home ctrl win | Character home ctrl unix | Character home command mac do: [ :target :morph :event | target cursorHome: event ]. (aBuilder shortcut: #cursorEnd) category: #TextEditor default: Character end ctrl win | Character end ctrl unix | Character end command mac do: [ :target :morph :event | target cursorEnd: event ].! ! !String methodsFor: 'converting' stamp: 'LucFabresse 10/20/2013 01:06'! asUncommentedSmalltalkCode "this string reprensent a commented code, let's uncomment it" ^String streamContents: [ :str | |doubleQuoteAlreadyFound| doubleQuoteAlreadyFound := false. self withoutQuoting do: [ :char | char = $" ifTrue: [ doubleQuoteAlreadyFound ifTrue: [ str nextPut: $" ]. doubleQuoteAlreadyFound := doubleQuoteAlreadyFound not. ] ifFalse: [ str nextPut: char ] ] ] ! ! MorphicUnknownEvent removeSelector: #type! MorphicUnknownEvent removeSelector: #storeOn:! MorphicUnknownEvent removeSelector: #setType:argument:hand:stamp:! MorphicUnknownEvent removeSelector: #setType:argument:! MorphicUnknownEvent removeSelector: #position! MorphicUnknownEvent removeSelector: #argument:! MorphicUnknownEvent removeSelector: #argument! Smalltalk globals removeClassNamed: #MorphicUnknownEvent! "Collections-Strings"! "Morphic-Base"! "Text-Edition"! ----End fileIn----! ----QUIT----an Array(21 October 2013 10:20:38 am) Pharo.image priorSource: 24925799! ----STARTUP----an Array(21 October 2013 10:26:25 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 10:26:25 am) Pharo-30508.image priorSource: 24943235! ----STARTUP----an Array(21 October 2013 11:34:31 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 11:31' prior: 75257755! commentForCurrentUpdate ^ '7444 Synchronizing DateAndTime with system OS date and time https://pharo.fogbugz.com/f/cases/7444/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 11:31'! script164 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1651.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.165.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.575.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.963.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.24.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 11:31'! update30509 "self new update30509" self withUpdateLog: '7444 Synchronizing DateAndTime with system OS date and time https://pharo.fogbugz.com/f/cases/7444/'. self loadTogether: self script164 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractTimeZone commentStamp: '' prior: 0! I am an abstract superclass for timezones. See my subclasses for specific implementations. Timezones are used to encapsulate the offset from the Coordinated Univeral Time (UTC) used for proper Date and Time display and manipulations.! !LocalTimeZone commentStamp: '' prior: 0! I am the local time zone which will use the system's current time offset dynamically. This is the default timezone.! !TimeZone commentStamp: 'brp 9/4/2003 06:32' prior: 42758982! TimeZone is a simple class to colect the information identifying a UTC time zone. offset - Duration - the time zone's offset from UTC abbreviation - String - the abbreviated name for the time zone. name - String - the name of the time zone. TimeZone class >> #timeZones returns an array of the known time zones TimeZone class >> #default returns the default time zone (Grenwich Mean Time)! !Locale class methodsFor: 'system startup' stamp: 'CamilloBruni 8/24/2013 00:09' prior: 24560540! localTimeZone ^ LocalTimeZone new! ! !AbstractTimeZone commentStamp: '' prior: 75286929! I am an abstract superclass for timezones. See my subclasses for specific implementations. Timezones are used to encapsulate the offset from the Coordinated Univeral Time (UTC) used for proper Date and Time display and manipulations.! !AbstractTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/24/2013 00:15'! abbreviation ^ self subclassResponsibility! ! !AbstractTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/24/2013 00:15'! name ^ self subclassResponsibility! ! !AbstractTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/24/2013 00:15'! offset "Return a duration representing the offset from UTC for this timezone" self subclassResponsibility! ! !AbstractTimeZone methodsFor: 'printing' stamp: 'CamilloBruni 10/16/2013 18:21'! printOn: aStream super printOn: aStream. aStream nextPut: $(; nextPutAll: self abbreviation; nextPut: $).! ! !LocalTimeZone commentStamp: '' prior: 75287219! I am the local time zone which will use the system's current time offset dynamically. This is the default timezone.! !LocalTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/24/2013 00:03'! abbreviation ^ String streamContents: [ :s | s nextPutAll: 'LT'; print: self offset hours; nextPut: $:. s nextPutAll: (self offset minutes printPaddedWith: $0 to: 2) ].! ! !LocalTimeZone methodsFor: 'converting' stamp: 'CamilloBruni 8/24/2013 00:08'! asFixedTimeZone "Convert this dynamic timezone to one with a fixed offset." ^ TimeZone offset: self offset name: 'Fixed Local Time' abbreviation: self abbreviation! ! !LocalTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:57'! name ^ 'Local Time'! ! !LocalTimeZone methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:58'! offset ^ self primOffset minutes! ! !LocalTimeZone methodsFor: 'primitives' stamp: 'CamilloBruni 8/23/2013 23:59'! primOffset "The offset from UTC in minutes, with positive offsets being towards the east. (San Francisco is in UTC -07*60 and Paris is in UTC +02*60 (daylight savings is not in effect)." ^ 0! ! !TimeZone commentStamp: 'brp 9/4/2003 06:32' prior: 75287399! TimeZone is a simple class to colect the information identifying a UTC time zone. offset - Duration - the time zone's offset from UTC abbreviation - String - the abbreviated name for the time zone. name - String - the name of the time zone. TimeZone class >> #timeZones returns an array of the known time zones TimeZone class >> #default returns the default time zone (Grenwich Mean Time)! !TimeZone class methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:50' prior: 53208545! abbreviated: aString "Return the timezone whose abbreviation is aString." ^ self timeZones detect: [ :timeZone | timeZone abbreviation = aString ].! ! !TimeZone class methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:50' prior: 53208758! default "Answer the default time zone - GMT" ^ self timeZones detect: [ :timeZone | timeZone offset = Duration zero ] ! ! !TimeZone class methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:51' prior: 53209068! offset: anOffset "Return the timezone with the given offset" ^ self timeZones detect: [ :timeZone | timeZone offset = anOffset ] ifNone: [ self new offset: anOffset ]! ! !TimeZone class methodsFor: 'accessing' stamp: 'CamilloBruni 8/23/2013 23:52' prior: 53209318! timeZones ^ { self offset: 0 hours name: 'Universal Time' abbreviation: 'UTC'. self offset: 0 hours name: 'Greenwich Mean Time' abbreviation: 'GMT'. self offset: 1 hours name: 'British Summer Time' abbreviation: 'BST'. self offset: 2 hours name: 'South African Standard Time' abbreviation: 'SAST'. self offset: -8 hours name: 'Pacific Standard Time' abbreviation: 'PST'. self offset: -7 hours name: 'Pacific Daylight Time' abbreviation: 'PDT'. self offset: -7 hours name: 'Mountain Standard Time' abbreviation: 'MST'. self offset: -6 hours name: 'Mountain Daylight Time' abbreviation: 'MDT'. self offset: -6 hours name: 'Central Standard Time' abbreviation: 'CST'. self offset: -5 hours name: 'Central Daylight Time' abbreviation: 'CDT'. self offset: -5 hours name: 'Eastern Standard Time' abbreviation: 'EST'. self offset: -4 hours name: 'Eastern Daylight Time' abbreviation: 'EDT'. } ! ! TimeZone removeSelector: #printOn:! "Kernel"! "System-Localization"! ----End fileIn----! ----QUIT----an Array(21 October 2013 11:34:39 am) Pharo.image priorSource: 24943442! ----STARTUP----an Array(21 October 2013 11:39:20 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 11:39:21 am) Pharo-30509.image priorSource: 24960870! ----STARTUP----an Array(21 October 2013 1:24:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 13:22' prior: 75275399! commentForCurrentUpdate ^ '11955 TabGroupMorph minExtent is broken https://pharo.fogbugz.com/f/cases/11955 11961 non-send method accesses undeclared ivar in PackageTreePacakgeSelection https://pharo.fogbugz.com/f/cases/11961 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 13:22'! script165 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1651.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.165.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.577.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.24.mcz Spec-PolyWidgets-MarcusDenker.9.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 13:22'! update30510 "self new update30510" self withUpdateLog: '11955 TabGroupMorph minExtent is broken https://pharo.fogbugz.com/f/cases/11955 11961 non-send method accesses undeclared ivar in PackageTreePacakgeSelection https://pharo.fogbugz.com/f/cases/11961 '. self loadTogether: self script165 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TabGroupMorph methodsFor: '*Polymorph-Widgets' stamp: 'AttilaMagyar 10/19/2013 00:38' prior: 52206874! minExtent "Calculate the min extent of the receiver based on all pages." |extra| self page ifNil: [^super minExtent max: self tabSelectorMorph minExtent]. extra := 0@(self tabSelectorMorph minExtent y) + (self contentMorph borderWidth * 2). extra := extra + (self contentMorph layoutInset * 2). ^super minExtent max: (((self pages inject: 0 @ 0 into: [:mw :pm | mw max: pm minExtent]) + extra) max: self tabSelectorMorph minExtent)! ! PackageTreePackageSelection removeSelector: #initializePackage:! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----an Array(21 October 2013 1:24:39 pm) Pharo.image priorSource: 24961077! ----STARTUP----an Array(21 October 2013 1:29:18 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 1:29:19 pm) Pharo-30510.image priorSource: 24973728! ----STARTUP----an Array(21 October 2013 3:13:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 15:10' prior: 75293033! commentForCurrentUpdate ^ '11916 openWithDialogWindow is broken https://pharo.fogbugz.com/f/cases/11916 11946 Add a way to specify an OK action on the EditableList widget https://pharo.fogbugz.com/f/cases/11946'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 15:10'! script166 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1651.mcz KernelTests-MarcusDenker.568.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.165.mcz Morphic-Core-EstebanLorenzano.7.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.577.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.26.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.958.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1332.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.581.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 15:10'! update30511 "self new update30511" self withUpdateLog: '11916 openWithDialogWindow is broken https://pharo.fogbugz.com/f/cases/11916 11946 Add a way to specify an OK action on the EditableList widget https://pharo.fogbugz.com/f/cases/11946'. self loadTogether: self script166 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30509! ScriptLoader removeSelector: #update30508! ScriptLoader removeSelector: #update30507! ScriptLoader removeSelector: #update30506! ScriptLoader removeSelector: #update30505! ScriptLoader removeSelector: #update30504! ScriptLoader removeSelector: #update30503! ScriptLoader removeSelector: #update30502! ScriptLoader removeSelector: #update30501! ScriptLoader removeSelector: #update30500! ScriptLoader removeSelector: #update30499! ScriptLoader removeSelector: #update30498! ScriptLoader removeSelector: #update30497! ScriptLoader removeSelector: #update30496! ScriptLoader removeSelector: #update30495! ScriptLoader removeSelector: #update30494! ScriptLoader removeSelector: #update30493! ScriptLoader removeSelector: #update30492! ScriptLoader removeSelector: #update30491! ScriptLoader removeSelector: #update30490! ScriptLoader removeSelector: #update30489! ScriptLoader removeSelector: #update30488! ScriptLoader removeSelector: #update30487! ScriptLoader removeSelector: #update30486! ScriptLoader removeSelector: #update30485! ScriptLoader removeSelector: #update30484! ScriptLoader removeSelector: #update30483! ScriptLoader removeSelector: #update30482! ScriptLoader removeSelector: #update30481! ScriptLoader removeSelector: #update30480! ScriptLoader removeSelector: #update30479! ScriptLoader removeSelector: #update30478! ScriptLoader removeSelector: #update30477! ScriptLoader removeSelector: #update30476! ScriptLoader removeSelector: #update30475! ScriptLoader removeSelector: #update30474! ScriptLoader removeSelector: #update30473! ScriptLoader removeSelector: #update30472! ScriptLoader removeSelector: #update30471! ScriptLoader removeSelector: #update30470! ScriptLoader removeSelector: #update30469! ScriptLoader removeSelector: #update30468! ScriptLoader removeSelector: #update30467! ScriptLoader removeSelector: #update30466! ScriptLoader removeSelector: #update30465! ScriptLoader removeSelector: #update30464! ScriptLoader removeSelector: #update30463! ScriptLoader removeSelector: #update30462! ScriptLoader removeSelector: #update30461! ScriptLoader removeSelector: #update30460! ScriptLoader removeSelector: #update30459! ScriptLoader removeSelector: #update30458! ScriptLoader removeSelector: #update30457! ScriptLoader removeSelector: #update30456! ScriptLoader removeSelector: #update30455! ScriptLoader removeSelector: #update30454! ScriptLoader removeSelector: #update30453! ScriptLoader removeSelector: #update30452! ScriptLoader removeSelector: #update30451! ScriptLoader removeSelector: #update30450! ScriptLoader removeSelector: #update30449! ScriptLoader removeSelector: #update30448! ScriptLoader removeSelector: #update30447! ScriptLoader removeSelector: #update30446! ScriptLoader removeSelector: #update30445! ScriptLoader removeSelector: #update30444! ScriptLoader removeSelector: #script165! ScriptLoader removeSelector: #script164! ScriptLoader removeSelector: #script163! ScriptLoader removeSelector: #script162! ScriptLoader removeSelector: #script161! ScriptLoader removeSelector: #script160! ScriptLoader removeSelector: #script159! ScriptLoader removeSelector: #script158! ScriptLoader removeSelector: #script157! ScriptLoader removeSelector: #script156! ScriptLoader removeSelector: #script155! ScriptLoader removeSelector: #script154! ScriptLoader removeSelector: #script153! ScriptLoader removeSelector: #script152! ScriptLoader removeSelector: #script151! ScriptLoader removeSelector: #script150! ScriptLoader removeSelector: #script149! ScriptLoader removeSelector: #script148! ScriptLoader removeSelector: #script147! ScriptLoader removeSelector: #script146! ScriptLoader removeSelector: #script145! ScriptLoader removeSelector: #script144! ScriptLoader removeSelector: #script143! ScriptLoader removeSelector: #script142! ScriptLoader removeSelector: #script141! ScriptLoader removeSelector: #script140! ScriptLoader removeSelector: #script139! ScriptLoader removeSelector: #script138! ScriptLoader removeSelector: #script137! ScriptLoader removeSelector: #script136! ScriptLoader removeSelector: #script135! ScriptLoader removeSelector: #script134! ScriptLoader removeSelector: #script133! ScriptLoader removeSelector: #script132! ScriptLoader removeSelector: #script131! ScriptLoader removeSelector: #script130! ScriptLoader removeSelector: #script129! ScriptLoader removeSelector: #script128! ScriptLoader removeSelector: #script127! ScriptLoader removeSelector: #script126! ScriptLoader removeSelector: #script125! ScriptLoader removeSelector: #script124! ScriptLoader removeSelector: #script123! ScriptLoader removeSelector: #script122! ScriptLoader removeSelector: #script121! ScriptLoader removeSelector: #script120! ScriptLoader removeSelector: #script119! ScriptLoader removeSelector: #script118! ScriptLoader removeSelector: #script117! ScriptLoader removeSelector: #script116! ScriptLoader removeSelector: #script115! ScriptLoader removeSelector: #script114! ScriptLoader removeSelector: #script113! ScriptLoader removeSelector: #script112! ScriptLoader removeSelector: #script111! ScriptLoader removeSelector: #script110! ScriptLoader removeSelector: #script109! ScriptLoader removeSelector: #script108! ScriptLoader removeSelector: #script107! ScriptLoader removeSelector: #script106! ScriptLoader removeSelector: #script105! ScriptLoader removeSelector: #script104! ScriptLoader removeSelector: #script103! ScriptLoader removeSelector: #script102! ScriptLoader removeSelector: #script101! ScriptLoader removeSelector: #script100! "ScriptLoader30"! !EditableList commentStamp: '' prior: 69444987! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'ChristopheDemarey 10/18/2013 13:09' prior: 69681956! openModal: aWindow ^ self widget ifNotNil: [:w | w openModal: aWindow asWidget ].! ! !EditableList commentStamp: '' prior: 75323269! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 10/18/2013 13:15' prior: 69447189! initialize "Initialization code for EditableList" title := 'Title' asValueHolder. super initialize. okBlock := [ ].! ! !EditableList methodsFor: 'initialization' stamp: 'ChristopheDemarey 10/18/2013 13:16'! initializeDialogWindow: aWindow super initializeDialogWindow: aWindow. aWindow okAction: [ self performOkAction ]! ! !EditableList methodsFor: 'protocol' stamp: 'ChristopheDemarey 10/18/2013 13:19'! okAction: aBlock okBlock := aBlock! ! !EditableList methodsFor: 'private' stamp: 'ChristopheDemarey 10/18/2013 13:17'! performOkAction okBlock value! ! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----an Array(21 October 2013 3:13:37 pm) Pharo.image priorSource: 24973933! ----STARTUP----an Array(21 October 2013 3:18:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 3:18:19 pm) Pharo-30511.image priorSource: 24993804! ----STARTUP----an Array(21 October 2013 5:00:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/21/2013 16:56' prior: 75305888! commentForCurrentUpdate ^ '11962 Small Morphic-Core critic clean https://pharo.fogbugz.com/f/cases/11962 11921 add #isClass and #isClassOrTrait https://pharo.fogbugz.com/f/cases/11921 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/21/2013 16:57'! script167 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.167.mcz Morphic-Core-MarcusDenker.9.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.578.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-EstebanLorenzano.119.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.26.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1333.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.583.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/21/2013 16:57'! update30512 "self new update30512" self withUpdateLog: '11962 Small Morphic-Core critic clean https://pharo.fogbugz.com/f/cases/11962 11921 add #isClass and #isClassOrTrait https://pharo.fogbugz.com/f/cases/11921 '. self loadTogether: self script167 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassTest methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:12' prior: 73969215! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #baseClass #basicLocalSelectors #classClass #localSelectors #localSelectors: isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !Class methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:04'! isClass ^ true! ! !MouseWheelEvent methodsFor: 'testing' stamp: 'gvc 1/28/2008 13:14' prior: 75001891! isMouseWheel "Answer whether the receiver is a mouse wheel event." ^true! ! !MouseWheelEvent methodsFor: 'dispatching' stamp: 'gvc 1/25/2008 17:42' prior: 75002548! sentTo: anObject "Dispatch the receiver into anObject" type == #mouseWheel ifTrue:[^anObject handleMouseWheel: self]. ^super sentTo: anObject. ! ! !MouseWheelEvent methodsFor: 'accessing' stamp: 'gvc 1/28/2008 15:31' prior: 75002797! setType: evtType position: evtPos direction: dirSymbol buttons: evtButtons hand: evtHand stamp: stamp "Set the state for the receiver." type := evtType. position := evtPos. buttons := evtButtons. source := evtHand. wasHandled := false. direction := dirSymbol. timeStamp := stamp.! ! !Canvas methodsFor: 'initialization' stamp: 'MarcusDenker 10/21/2013 14:21' prior: 74497550! reset "Reset the canvas." self initWithTarget:self class defaultTarget. ! ! !GrafPort methodsFor: 'copying' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 75008592! copyBits "Override copybits to do translucency if desired" (combinationRule between: 30 and: 31) ifTrue: [ self copyBitsTranslucent: (alpha ifNil: [ 255 ]) ] ifFalse: [ super copyBits ]! ! !BorderStyle methodsFor: 'printing' stamp: 'MarcusDenker 10/21/2013 14:23' prior: 74472806! storeOn: aStream "Store a reconstructable representation of the receiver on the given stream." aStream nextPutAll: '('; nextPutAll: self class name; nextPutAll: ' width: '; print: self width; nextPutAll: ' color: '; print: self color; nextPutAll: ')'! ! !MetaclassTest methodsFor: 'tests' stamp: 'MarcusDenker 10/17/2013 12:12' prior: 49940816! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | (TApplyingOnClassSide >> selector) sourceCode. self assert: (TApplyingOnClassSide >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#externalTypeAlias:. #baseClass. #basicLocalSelectors. #basicLocalSelectors:. #classClass. #isClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:} asSet! ! !Morph class methodsFor: 'misc' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 74622719! morphsUnknownToTheirOwners "Return a list of all morphs (other than HandMorphs) whose owners do not contain them in their submorph lists" "Morph morphsUnknownToTheirOwners" | problemMorphs | problemMorphs := OrderedCollection new. self allSubInstances do: [ :m | | itsOwner | (m isHandMorph not and: [ (itsOwner := m owner) notNil and: [ (itsOwner submorphs includes: m) not ] ]) ifTrue: [ problemMorphs add: m ] ]. ^ problemMorphs! ! !Morph methodsFor: '*Morphic-Base' stamp: 'MarcusDenker 10/21/2013 14:21' prior: 74700769! defaultLabel "Answer the default label to be used" ^ self printString truncateTo: 40! ! !Morph methodsFor: 'geometry testing' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 74724328! fullContainsPoint: aPoint (self fullBounds containsPoint: aPoint) ifFalse: [ ^ false ]. "quick elimination" (self containsPoint: aPoint) ifTrue: [ ^ true ]. "quick acceptance" ^ submorphs anySatisfy: [ :m | m fullContainsPoint: aPoint ]! ! !Morph methodsFor: 'drawing' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 74747749! hide owner ifNil: [ ^ self ]. self visible ifFalse: [ ^ self ]. self visible: false. self changed! ! !Morph methodsFor: 'private' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 74800057! privateAddMorph: aMorph atIndex: index | oldIndex myWorld itsWorld oldOwner | (index between: 1 and: submorphs size + 1) ifFalse: [ ^ self error: 'index out of range' ]. myWorld := self world. oldOwner := aMorph owner. (oldOwner == self and: [ (oldIndex := submorphs indexOf: aMorph) > 0 ]) ifTrue: [ "aMorph's position changes within in the submorph chain" oldIndex < index ifTrue: [ "moving aMorph to back" submorphs replaceFrom: oldIndex to: index - 2 with: submorphs startingAt: oldIndex + 1. submorphs at: index - 1 put: aMorph ] ifFalse: [ "moving aMorph to front" oldIndex - 1 to: index by: -1 do: [ :i | submorphs at: i + 1 put: (submorphs at: i) ]. submorphs at: index put: aMorph ] ] ifFalse: [ "adding a new morph" oldOwner ifNotNil: [ itsWorld := aMorph world. itsWorld ifNotNil: [ self privateInvalidateMorph: aMorph ]. itsWorld == myWorld ifFalse: [ aMorph outOfWorld: itsWorld ]. oldOwner privateRemove: aMorph. oldOwner removedMorph: aMorph ]. aMorph privateOwner: self. submorphs := submorphs copyReplaceFrom: index to: index - 1 with: (Array with: aMorph). itsWorld == myWorld ifFalse: [ aMorph intoWorld: myWorld ] ]. myWorld ifNotNil: [ self privateInvalidateMorph: aMorph ]. self layoutChanged. oldOwner == self ifFalse: [ self addedMorph: aMorph. aMorph noteNewOwner: self ]! ! !Morph methodsFor: 'drawing' stamp: 'MarcusDenker 10/21/2013 14:22' prior: 74830750! show "Make sure this morph is on-stage." self visible ifTrue: [ ^ self ]. self visible: true. self changed! ! !Metaclass methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:08'! isClass ^ true! ! !TClass methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:06'! isClassOrTrait ^true! ! !AbstractNautilusUI methodsFor: 'drag and drop' stamp: 'MarcusDenker 10/17/2013 12:08' prior: 17280609! dropInList: aCollection inARow: aRow | receiver | (aRow = 0) ifTrue: [ ^ self ]. receiver := self getList at: aRow. receiver isClass ifTrue: [ self selectedClass isMeta ifTrue: [ receiver := receiver theMetaClass ] ifFalse: [ receiver := receiver theNonMetaClass ]]. self dropInAPackage: aCollection into: receiver! ! !SystemDictionary methodsFor: 'classes and traits' stamp: 'MarcusDenker 10/17/2013 12:10' prior: 70046245! hasClassNamed: aString "Answer whether there is a class of the given name, but don't intern aString if it's not alrady interned." Symbol hasInterned: aString ifTrue: [:aSymbol | ^ (self at: aSymbol ifAbsent: [nil]) isClass]. ^ false! ! !WorldState class methodsFor: 'world menu items' stamp: 'MarcusDenker 10/21/2013 14:20' prior: 74909242! quitSession | save | save := Smalltalk tools userManager canSaveImage ifFalse: [ false ] ifTrue: [ self confirm: 'Save changes before quitting?' translated orCancel: [ ^ self ] ]. Cursor write showWhile: [ Smalltalk snapshot: save andQuit: true ]! ! !SystemNavigation methodsFor: '*Tools' stamp: 'MarcusDenker 10/17/2013 12:09' prior: 71860684! classFromPattern: pattern withCaption: aCaption "If there is a class whose name exactly given by pattern, return it. If there is only one class in the system whose name matches pattern, return it. Otherwise, put up a menu offering the names of all classes that match pattern, and return the class chosen, else nil if nothing chosen. This method ignores tab, space, & cr characters in the pattern" | toMatch potentialClassNames classNames exactMatch index | (toMatch := pattern copyWithoutAll: {(Character space). (Character cr). (Character tab)}) isEmpty ifTrue: [ ^ nil ]. Symbol hasInterned: toMatch ifTrue: [ :patternSymbol | self environment at: patternSymbol ifPresent: [ :maybeClass | maybeClass isClassOrTrait ifTrue: [ ^ maybeClass ] ] ]. toMatch := (toMatch copyWithout: $.) asLowercase. potentialClassNames := (self environment classNames , self environment traitNames) asOrderedCollection. classNames := pattern last = $. ifTrue: [ potentialClassNames select: [ :nm | nm asLowercase = toMatch ] ] ifFalse: [ potentialClassNames select: [ :n | n includesSubstring: toMatch caseSensitive: false ] ]. classNames isEmpty ifTrue: [ ^ nil ]. exactMatch := classNames detect: [ :each | each asLowercase = toMatch ] ifNone: [ nil ]. index := classNames size = 1 ifTrue: [ 1 ] ifFalse: [ exactMatch ifNil: [ UIManager default chooseFrom: classNames lines: #() title: aCaption ] ifNotNil: [ classNames addFirst: exactMatch. UIManager default chooseFrom: classNames lines: #(1) title: aCaption ] ]. index = 0 ifTrue: [ ^ nil ]. ^ self environment at: (classNames at: index) asSymbol " self default classFromPattern: 'znak' withCaption: '' self default classFromPattern: 'orph' withCaption: '' self default classFromPattern: 'TCompil' withCaption: '' "! ! !Object methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:05'! isClass ^ false! ! !Object methodsFor: 'testing' stamp: 'MarcusDenker 10/17/2013 12:05'! isClassOrTrait ^ false! ! !MorphExtension methodsFor: 'printing' stamp: 'MarcusDenker 10/21/2013 14:23' prior: 74879025! printOn: aStream "Append to the argument, aStream, a sequence of characters that identifies the receiver." super printOn: aStream. aStream space; nextPut: $(; print: self identityHash; nextPut: $). locked == true ifTrue: [ aStream nextPutAll: ' [locked] ' ]. visible == false ifTrue: [ aStream nextPutAll: '[not visible] ' ]. sticky == true ifTrue: [ aStream nextPutAll: ' [sticky] ' ]. balloonText ifNotNil: [ aStream nextPutAll: ' [balloonText] ' ]. externalName ifNotNil: [ aStream nextPutAll: ' [externalName = ' , externalName; nextPutAll: ' ] ' ]. eventHandler ifNotNil: [ aStream nextPutAll: ' [eventHandler = ' , eventHandler printString; nextPutAll: '] ' ]. (otherProperties isNil or: [ otherProperties isEmpty ]) ifTrue: [ ^ self ]. aStream nextPutAll: ' [other: '. self otherProperties keysDo: [ :aKey | aStream nextPutAll: ' (' , aKey , ' -> ' , (self otherProperties at: aKey) printString; nextPutAll: ')' ]. aStream nextPut: $]! ! !Trait method! isClassOrTrait ^true! ! !Trait method! isClassOrTrait ^true! ! "Kernel"! "KernelTests"! "Morphic-Base"! "Morphic-Core"! "Nautilus"! "System-Support"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----an Array(21 October 2013 5:00:44 pm) Pharo.image priorSource: 24994009! ----STARTUP----an Array(21 October 2013 5:05:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(21 October 2013 5:05:30 pm) Pharo-30512.image priorSource: 25020578! ----STARTUP----an Array(22 October 2013 8:40:36 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(22 October 2013 8:40:39 am) Pharo.image priorSource: 25020783! ----STARTUP----an Array(22 October 2013 8:45:23 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 October 2013 8:45:23 am) Pharo-30512.image priorSource: 25020998! ----STARTUP----an Array(22 October 2013 9:37:29 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(22 October 2013 9:37:33 am) Pharo.image priorSource: 25021203! ----STARTUP----an Array(22 October 2013 9:42:15 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 October 2013 9:42:15 am) Pharo-30512.image priorSource: 25021418! ----STARTUP----an Array(22 October 2013 1:47:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/22/2013 13:45' prior: 75325964! commentForCurrentUpdate ^ '11965 Remove RPackageSetTest https://pharo.fogbugz.com/f/cases/11965 11966 failing tests testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits and testBehaviorRespectsPolymorphismWithTraitBehavior https://pharo.fogbugz.com/f/cases/11966 11967 failing test: testUnknownProcesses https://pharo.fogbugz.com/f/cases/11967 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/22/2013 13:45'! script168 ^ 'AST-Core-MarcusDenker.195.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.15.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.25.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.167.mcz Morphic-Core-MarcusDenker.9.mcz Morphic-Examples-MarcusDenker.14.mcz MorphicTests-MarcusDenker.76.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.580.mcz NautilusCommon-MarcusDenker.175.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.429.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.201.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.26.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.283.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1333.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.583.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/22/2013 13:45'! update30513 "self new update30513" self withUpdateLog: '11965 Remove RPackageSetTest https://pharo.fogbugz.com/f/cases/11965 11966 failing tests testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits and testBehaviorRespectsPolymorphismWithTraitBehavior https://pharo.fogbugz.com/f/cases/11966 11967 failing test: testUnknownProcesses https://pharo.fogbugz.com/f/cases/11967 '. self loadTogether: self script168 merge: false. (ReleaseTest actualProcesses difference: ReleaseTest knownProcesses) do: [ :each | each suspend; terminate ]. . self flushCaches. ! ! "ScriptLoader30"! RPackageSetTest removeSelector: #testPolymorphicWithPackageInfo! RPackageSetTest removeSelector: #equalElementsBetween:and:! RPackageSetTest removeSelector: #comparePackageSet:withPackageInfo:! Smalltalk globals removeClassNamed: #RPackageSetTest! !Trait method! realClass ^ self! ! TraitBehavior removeSelector: #realClass! !Trait method! realClass ^ self! ! Behavior removeSelector: #realClass! "Nautilus"! "RPackage-Tests"! ----End fileIn----! ----QUIT----an Array(22 October 2013 1:47:37 pm) Pharo.image priorSource: 25021623! ----STARTUP----an Array(22 October 2013 1:52:54 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 October 2013 1:52:54 pm) Pharo-30513.image priorSource: 25034421! ----STARTUP----an Array(22 October 2013 2:31:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/22/2013 14:28' prior: 75353578! commentForCurrentUpdate ^ '11969 Move some methods from Opal to AST https://pharo.fogbugz.com/f/cases/11969 11954 MorphTreeMorph selection cleanup https://pharo.fogbugz.com/f/cases/11954 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/22/2013 14:28'! script169 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.168.mcz Morphic-Core-MarcusDenker.9.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.580.mcz NautilusCommon-MarcusDenker.176.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.431.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.38.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1334.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.583.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/22/2013 14:29'! update30514 "self new update30514" self withUpdateLog: '11969 Move some methods from Opal to AST https://pharo.fogbugz.com/f/cases/11969 11954 MorphTreeMorph selection cleanup https://pharo.fogbugz.com/f/cases/11954 '. self loadTogether: self script169 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PaginatedMorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 11:02'! expandItemPath: anItemPath | rest | rest := anItemPath asOrderedCollection. [ rest notEmpty ] whileTrue: [ | res | res := (1 to: self nodeList size) select: [ :li | (self nodeList at: li) item = rest first ]. res isEmpty ifTrue: [ ^ self ]. self pager nextPage: res first. (self allNodeMorphs at: 1 ifAbsent: [ ^ self ]) openItemPath: {(rest first)}. rest := rest copyWithoutFirst ]. ^ self! ! !NautilusPluginManagerTree methodsFor: 't - accessing' stamp: 'AlainPlantec 10/17/2013 12:15' prior: 28208071! update self updateList! ! !ClassTreeExample methodsFor: 'user interface' stamp: 'AlainPlantec 10/18/2013 10:38' prior: 46344161! treeMorph | treeMorph | treeMorph := (MorphTreeMorph on: self) beMultiple; columns: { MorphTreeColumn new startWidth: 300; rowMorphGetSelector: #classButton; headerButtonLabel: 'Class' font: nil. MorphTreeColumn new startWidth: 500; rowMorphGetSelector: #commentText; headerButtonLabel: 'Comment' font: nil }; rowInset: 4; treeLineWidth: 1; columnInset: 4; getMenuSelector: #menu:shifted:; rowColorForEven: Color lightGray muchLighter. ^ treeMorph buildContents! ! !SimplestClassListExample methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/18/2013 10:46' prior: 46349697! rootItemsTest ^ (rootClass allSubclasses asArray sort: [:a :b | a name < b name])! ! !MorphTreeNodeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:08'! collapseNodePath: anArray "Close a path based on node." | found | anArray isEmpty ifTrue: [^ container setSelectedMorph: nil]. found := nil. self withSiblingsDo: [:each | found ifNil: [(each complexContents = anArray first) ifTrue: [found := each]]]. found ifNotNil: [(found isExpanded and: [anArray size = 1]) ifTrue: [found toggleExpandedState. container adjustSubmorphPositions]. found changed. anArray size = 1 ifTrue: [^ container listManager setSelectedMorph: found]. ^ found firstChild ifNil: [container setSelectedMorph: nil] ifNotNil: [found firstChild collapseNodePath: anArray allButFirst]]. ^container setSelectedMorph: nil! ! !MorphTreeNodeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 09:31'! expandItemPath: anArray "Open a path." | found | anArray isEmpty ifTrue: [^ container listManager setSelectedMorph: nil]. found := nil. self withSiblingsDo: [:each | found ifNil: [(each complexContents withoutListWrapper = anArray first or: [anArray first isNil]) ifTrue: [found := each]]]. found ifNotNil: [found isExpanded ifFalse: [found toggleExpandedState]. found changed. anArray size = 1 ifTrue: [^ container listManager setSelectedMorph: found]. ^ found firstChild ifNil: [container setSelectedMorph: nil] ifNotNil: [found firstChild expandItemPath: anArray allButFirst]]. ^container setSelectedMorph: nil! ! !MorphTreeNodeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:04'! openNodePath: anArray | found | anArray isEmpty ifTrue: [^ container listManager setSelectedMorph: nil]. found := nil. self withSiblingsDo: [:each | found ifNil: [(each complexContents = anArray first or: [anArray first isNil]) ifTrue: [found := each]]]. found ifNotNil: [found isExpanded ifFalse: [found toggleExpandedState. container adjustSubmorphPositions]. found changed. anArray size = 1 ifTrue: [^ container setSelectedMorph: found]. ^ found firstChild ifNil: [container setSelectedMorph: nil] ifNotNil: [found firstChild openNodePath: anArray allButFirst]]. ^ container setSelectedMorph: nil! ! !RBProgramNode methodsFor: 'accessing' stamp: 'MarcusDenker 12/17/2012 15:53' prior: 49094363! debugHighlightRange ^ self debugHighlightStart to: self debugHighlightStop .! ! !RBProgramNode methodsFor: 'accessing' stamp: '' prior: 49094520! debugHighlightStart ^ self start ! ! !RBProgramNode methodsFor: 'accessing' stamp: '' prior: 49094634! debugHighlightStop ^ self stop ! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 12/18/2012 14:08' prior: 49094775! irInstruction "search for the first ir instruction that I generate" self methodNode ir sourceNode == self ifTrue: [^self methodNode ir]. ^self methodNode ir firstInstructionMatching: [:instr | instr sourceNode == self ] ! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: '' prior: 49095269! owningScope ^ parent owningScope ! ! !SimplestPaginatedClassListExample methodsFor: 'accessing' stamp: 'AlainPlantec 10/18/2013 10:47' prior: 46352332! rootItems ^ self itemsForTest asArray sort: [:a :b | a name < b name]! ! !RBMessageNode methodsFor: 'accessing' stamp: 'jorgeRessia 11/20/2009 16:40' prior: 34739481! debugHighlightStart ^ self selectorParts first start! ! !RBMessageNode methodsFor: 'accessing' stamp: 'jorgeRessia 11/20/2009 16:40' prior: 34739626! debugHighlightStop ^ self stopWithoutParentheses! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/22/2013 16:04' prior: 46133130! isInlineAndOr self methodNode compilationContext optionInlineAndOr ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(and: or:) includes: self selector) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each isBlock ]) ifFalse: [^ false]. (self arguments allSatisfy: [ :each | each arguments isEmpty ]) ifFalse: [ self notify: 'and: (or:) takes zero-arg block'. ^ false ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/22/2013 16:06' prior: 46133700! isInlineCase self methodNode compilationContext optionInlineCase ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(caseOf: caseOf:otherwise:) includes: self selector) ifFalse: [^ false]. self arguments size = 2 ifTrue: [ "otherwise block" self arguments last isBlock ifFalse: [^ false]]. self arguments first isArray ifFalse: [^ false]. self arguments first statements do: [:assoc | (assoc isMessage and: [assoc selector == #->]) ifFalse: [^ false]. assoc receiver isBlock ifFalse: [^ false]. assoc receiver arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks'. ^ false]. assoc arguments first isBlock ifFalse: [^ false]. assoc arguments first arguments isEmpty ifFalse: [self notify: 'caseOf: takes zero-arg blocks']. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/22/2013 16:03' prior: 46134593! isInlineIf self methodNode compilationContext optionInlineIf ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifTrue: ifFalse: ifTrue:ifFalse: ifFalse:ifTrue:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. self arguments do: [:block | block arguments isEmpty ifFalse: [ OCSemanticError new node: self; compilationContext: self methodNode compilationContext; messageText: 'ifTrue:ifFalse: takes zero-arg blocks'; signal. ^ false ] ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/22/2013 16:03' prior: 46135293! isInlineIfNil | assertNone assertOneOrNone | self methodNode compilationContext optionInlineIfNil ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifNil: ifNotNil: ifNil:ifNotNil: ifNotNil:ifNil:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. assertNone := [:block | block arguments isEmpty ifFalse: [self notify: 'ifNil: takes zero-arg block'. ^ false] ]. assertOneOrNone := [:block | block arguments size > 1 ifTrue: [self notify: 'ifNotNil: takes zero- or one-arg block'. ^ false] ]. self selector == #ifNil: ifTrue: [assertNone value: self arguments first]. self selector == #ifNil:ifNotNil: ifTrue: [assertNone value: self arguments first. assertOneOrNone value: self arguments last]. self selector == #ifNotNil: ifTrue: [assertOneOrNone value: self arguments first]. self selector ==#ifNotNilDo: ifTrue: [assertOneOrNone value: self arguments first]. self selector == #ifNotNil:ifNil: ifTrue: [assertOneOrNone value: self arguments first. assertNone value: self arguments last]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 9/30/2013 14:54' prior: 69021051! isInlineTimesRepeat | block | self methodNode compilationContext optionInlineTimesRepeat ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. #timesRepeat: = self selector ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size isZero ifFalse: [ "self notify: 'timesRepeat: block must take zero arg'." ^ false]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 9/20/2013 15:06' prior: 69082680! isInlineToDo | block step | self methodNode compilationContext optionInlineToDo ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(to:do: to:by:do:) includes: self selector) ifFalse: [^ false]. block := self arguments last. block isBlock ifFalse: [^ false]. block arguments size = 1 ifFalse: [ self notify: 'to:do: block must take one arg'. ^ false]. self arguments first isVariable ifTrue: [ (RBParseTreeSearcher new matches: self arguments first name , ' := `@object' do: [:n :a | true]; executeTree: block initialAnswer: false) ifTrue: [^ false]. ]. self arguments size = 3 "to:by:do:" ifTrue: [ step := self arguments second. step isLiteralNode ifFalse: [^ false]. step value = 0 ifTrue: [^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 7/22/2013 16:04' prior: 46137457! isInlineWhile self methodNode compilationContext optionInlineWhile ifFalse: [ ^false ]. self isCascaded ifTrue: [^ false]. (#(whileFalse: whileTrue: whileFalse whileTrue) includes: self selector) ifFalse: [^ false]. self receiver isBlock ifFalse: [^ false]. self receiver arguments isEmpty ifFalse: [self notify: 'while receiver block must have no arguments'. ^ false]. self arguments isEmpty ifFalse: [ self arguments first isBlock ifFalse: [^ false]. self arguments first arguments isEmpty ifFalse: [self notify: 'while takes a zero-arg block as its argument'. ^ false]. ]. ^ true! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 9/30/2013 14:39' prior: 69021593! isInlined self methodNode compilationContext optIlineNone ifTrue: [ ^false ]. self isInlineIf ifTrue: [^true]. self isInlineIfNil ifTrue: [^true]. self isInlineAndOr ifTrue: [^true]. self isInlineWhile ifTrue: [^true]. self isInlineToDo ifTrue: [^true]. self isInlineTimesRepeat ifTrue: [^true]. self isInlineCase ifTrue: [^true]. self isInlineTimesRepeat ifTrue: [ ^true]. ^false.! ! !RBSequenceNode methodsFor: 'converting' stamp: 'MarcusDenker 1/29/2013 14:19' prior: 34744482! asSequenceNode ^self! ! !UndefinedObject methodsFor: '*Deprecated30' stamp: 'MarcusDenker 4/29/2013 17:12' prior: 68748481! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^ self class compilerClass! ! !RBValueNode methodsFor: 'converting' stamp: 'MarcusDenker 1/29/2013 14:25' prior: 34745191! asSequenceNode ^RBSequenceNode statements: {self} ! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 12:08' prior: 26927436! collapseAll self requestView: MorphTreeChangeRequest collapseAll! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:08'! collapseNodePath: aNodePath self requestView: (MorphTreeChangeRequest collapseNodePath: aNodePath)! ! !MorphTreeModel methodsFor: 'accessing' stamp: '' prior: 26934133! defaultChunkSize ^ nil! ! !MorphTreeModel methodsFor: 'accessing' stamp: '' prior: 26934206! defaultPageSize ^ nil! ! !MorphTreeModel methodsFor: 'selecting' stamp: 'AlainPlantec 10/17/2013 12:05' prior: 26933358! deselectAll self requestView: MorphTreeChangeRequest deselectAll! ! !MorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2013 12:13' prior: 74294740! enabled: aBoolean aBoolean ~= enabled ifTrue: [ enabled := aBoolean. self requestView: MorphTreeChangeRequest enabled]! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 12:02' prior: 26927705! expandAll self requestView: MorphTreeChangeRequest expandAll ! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 12:01' prior: 26927840! expandAllFromNode: aNode self requestView: (MorphTreeChangeRequest expandAllFromNode: aNode) ! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:24'! expandItemPath: anItemPath self requestView: (MorphTreeChangeRequest expandItemPath: anItemPath)! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 10:01'! expandNodePath: aNodePath self requestView: (MorphTreeChangeRequest expandNodePath: aNodePath)! ! !MorphTreeModel methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:25'! expandRoots self requestView: (MorphTreeChangeRequest expandRoots)! ! !MorphTreeModel methodsFor: 'announcing' stamp: 'AlainPlantec 10/17/2013 09:12' prior: 26931873! onSelectionChangeSend: aSelector to: anObject self on: MorphTreeSelectionChanged send: aSelector to: anObject! ! !MorphTreeModel methodsFor: 'announcing' stamp: 'AlainPlantec 10/17/2013 09:14'! requestView: anAnnouncement ^ self announcer announce: anAnnouncement ! ! !MorphTreeModel methodsFor: 'selecting' stamp: 'AlainPlantec 10/17/2013 10:00' prior: 26933481! selectAll self requestView: MorphTreeChangeRequest selectAll! ! !MorphTreeModel methodsFor: 'selecting' stamp: 'AlainPlantec 10/17/2013 09:59' prior: 26930218! selectItems: aListOfItems self requestView: ( MorphTreeChangeRequest selectItems: aListOfItems )! ! !MorphTreeModel methodsFor: 'selecting' stamp: 'AlainPlantec 10/17/2013 09:40' prior: 26931043! selection: aSelection self setSelection: aSelection. self requestView: MorphTreeChangeRequest updateSelectionFromModel ! ! !MorphTreeModel methodsFor: 'selecting' stamp: 'AlainPlantec 10/17/2013 09:14' prior: 26933710! selectionChanged self requestView: (MorphTreeSelectionChanged new selection: self selection) ! ! !MorphTreeModel methodsFor: 'updating' stamp: 'AlainPlantec 10/17/2013 09:40'! updateList self requestView: MorphTreeChangeRequest updateList ! ! !MessageListBrowser methodsFor: 'display' stamp: 'AlainPlantec 10/18/2013 10:31' prior: 25623367! updateTree | prevSelected | prevSelected := self selectedItem. self updateList. prevSelected ifNotNil: [self selectItems: (Array with: prevSelected)] ! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'AlainPlantec 10/17/2013 12:04' prior: 69675199! expandAll self treeModel expandAll! ! !SettingBrowser methodsFor: 'updating' stamp: 'AlainPlantec 10/17/2013 12:18' prior: 33139576! closePathFrom: aSetting (self settingNodeOfDeclaration: aSetting) ifNotNil: [ :node | self requestView: (MorphTreeChangeRequest collapseNodePath: (node path collect: [ :n | n withoutListWrapper ])) ]! ! !SettingBrowser methodsFor: 'updating' stamp: 'AlainPlantec 10/17/2013 10:02' prior: 33139841! openPathFrom: aSetting (self settingNodeOfDeclaration: aSetting) ifNotNil: [:node | self expandNodePath: node path]! ! !SettingBrowser methodsFor: 'updating' stamp: 'AlainPlantec 10/17/2013 09:41' prior: 33141614! updateList self isRendered ifTrue: [ self treeHolder updateList. self changed: #getDescription. self changed: #getViewedPackageNames. super updateList]. ! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 68746268! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 4/29/2013 17:11' prior: 68740254! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !RBReturnNode methodsFor: 'converting' stamp: 'MarcusDenker 1/29/2013 14:22' prior: 34780109! asSequenceNode ^RBSequenceNode statements: {self} ! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 00:07'! changeListRequest: anAnnounce self updateList! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/28/2012 14:29'! changeRequest: anAnnounce ^ anAnnounce change: self! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 00:08'! changeSelectionRequest: anAnnounce self updateSelectionFromModel! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:07'! collapseNodePath: aPath self allNodeMorphs first collapseNodePath: aPath! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 00:09'! collapseRequest: anAnnounce anAnnounce nodes ifEmpty: [^ self collapseAll] ifNotEmpty: [:nodes | self collapseNodePath: nodes] ! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 12:03' prior: 26975598! expandAll "Expand all of the roots" self roots reverseDo: [:m | self expandAllSilently: m]. self innerWidgetChanged! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/17/2013 12:00' prior: 26976651! expandAllFromNode: aNode self expandAll: ((self nodeMorphOfNode: aNode) ifNil: [^self]). self adjustSubmorphPositions ! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 09:30'! expandItemPath: aNodePath (self allNodeMorphs at: 1 ifAbsent: [^self]) openItemPath: aNodePath! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'AlainPlantec 10/18/2013 10:03'! expandNodePath: aNodePath (self allNodeMorphs at: 1 ifAbsent: [^self]) openNodePath: aNodePath! ! !MorphTreeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2013 09:28'! model: aTreeModel self model ifNotNil: [self model announcer unsubscribe: self]. super model: aTreeModel. self registerRequestHandlers ! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 19:30'! nodeCollapseRequest: anAnnounce anAnnounce nodes ifEmpty: [self collapseAll] ifNotEmpty: [:nodes | self collapseNodePath: nodes] ! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 11:10'! nodeExpandRequest: anAnnounce anAnnounce nodes ifEmpty: [self expandAll] ifNotEmpty: [:nodes | anAnnounce recur ifTrue: [self expandAllFromNode: nodes last] ifFalse: [self expandNodePath: nodes]] ! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/27/2012 10:04'! registerRequestHandlers self model announcer on: MorphTreeChangeRequest send: #changeRequest: to: self.! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 10/18/2013 10:01'! selectItems: aNodeItemCollection self selectedItems: aNodeItemCollection ! ! !MorphTreeMorph methodsFor: 'announce requests' stamp: 'AlainPlantec 5/26/2012 00:10'! selectItemsRequest: anAnnounce self selectedItems: anAnnounce itemsToSelect ! ! !MorphTreeMorph methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/18/2013 20:00'! setSelectedMorph: aNodeMorph self listManager setSelectedMorph: aNodeMorph! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'AlainPlantec 10/18/2013 11:09' prior: 74291731! update: aSymbol aSymbol = self nodeListSelector ifTrue: [ ^ self updateList ]. super update: aSymbol ! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'AlainPlantec 10/18/2013 09:46'! updateSelectionFromModel ^ self listManager updateSelectionFromModel! ! !PaginatedMorphTreeModel class methodsFor: 'examples' stamp: 'AlainPlantec 10/18/2013 11:02' prior: 29041143! testExample "This test demonstrate a paginating morphTreeMorph in action." "self testExample." | treeMorph aWindow aModel | aModel := self itemsList: (1 to: 100) asArray. aWindow := aModel theme newWindowIn: World for: aModel title: 'test'. treeMorph := aModel defaultTreeMorph. treeMorph pageSize: 30. treeMorph buildContents. aWindow addMorph: treeMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). aWindow open. aModel expandItemPath: {40}. self assert: treeMorph pager currentPage == 2! ! !PaginatedMorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2013 09:38' prior: 49454459! chunkSize: anIntegerOrNil self setPageSize: anIntegerOrNil. self announce: (MorphTreeChangeRequest chunkSize: anIntegerOrNil) ! ! !PaginatedMorphTreeModel methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2013 09:38' prior: 49454638! pageSize: anIntegerOrNil self setPageSize: anIntegerOrNil. self announce: (MorphTreeChangeRequest pageSize: anIntegerOrNil) ! ! !TimeProfiler methodsFor: 'actions' stamp: 'AlainPlantec 10/18/2013 09:11' prior: 38395659! blockCode: aString notifying: aRequestor "Treat the current selection as an expression; evaluate and tally it." | compiledMethod | aString ifNil: [^ self]. blockSource := aString. compiledMethod := self compile: aString for: nil in: self doItContext. compiledMethod ifNil: [^ self]. self showResult: ( compiledMethod valueWithReceiver: self arguments: #()). self changed: #blockCode. self changed: #summaryText. self changed: #fullReport. self selection: nil. self updateList. self startState. ! ! !TimeProfiler methodsFor: 'public opening' stamp: 'AlainPlantec 10/17/2013 10:02' prior: 53177867! openPathFrom: aNode self expandNodePath: aNode path! ! !TimeProfiler methodsFor: 'UI specific' stamp: 'AlainPlantec 10/18/2013 09:18' prior: 53161056! reportOtherProcesses: aBoolean self reportOtherProcesses ~= aBoolean ifTrue: [ reportOtherProcesses := aBoolean. self changed: #reportOtherProcesses. self updateList] ! ! !TimeProfiler methodsFor: 'UI specific' stamp: 'AlainPlantec 10/18/2013 09:14' prior: 53162031! showLeavesOnly: aBoolean self showLeavesOnly ~= aBoolean ifTrue: [ treeMorph treeLineWidth: (aBoolean ifTrue: [0] ifFalse: [1]). showLeavesOnly := aBoolean. self changed: #showLeavesOnly. self updateList]! ! !TimeProfiler methodsFor: 'accessing' stamp: 'AlainPlantec 10/17/2013 12:20' prior: 53166765! threshold: aTreshold (aTreshold ~= threshold and: [aTreshold between: 0 and: 1000]) ifTrue: [ threshold := aTreshold. self updateList]. self changed: #threshold! ! !PaginatedMorphTreeMorphTests methodsFor: 'tests' stamp: 'AlainPlantec 10/18/2013 11:05' prior: 29047472! testPager "This test demonstrate a paginating morphTreeMorph in action." | treeMorph aWindow aModel | aModel := PaginatedMorphTreeModel itemsList: (1 to: 100) asArray. aWindow := aModel theme newWindowIn: World for: aModel title: 'test'. treeMorph := aModel defaultTreeMorph. treeMorph pageSize: 30. treeMorph buildContents. aWindow addMorph: treeMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). aWindow open. aModel expandItemPath: { 40 }. self assert: treeMorph pager currentPage == 2. aWindow close! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 11:02'! chunkSize: anInteger ^ self new action: #chunkSize:; arguments: (Array with: anInteger)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 09:10'! collapseAll ^ self new action: #collapseAll! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/17/2013 08:43'! collapseNodePath: aNodePath ^ self new action: #collapseNodePath:; arguments: (Array with: aNodePath) ! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 08:41'! deselectAll ^ self new action: #deselectAll! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/17/2013 09:20'! enabled ^ self new action: #enabledFromModel! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 09:15'! expandAll ^ self new action: #expandAll! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 09:17'! expandAllFromNode: aNode ^ self new action: #expandAllFromNode:; arguments: (Array with: aNode)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/18/2013 10:56'! expandItemPath: anItemPath ^ self new action: #expandItemPath:; arguments: (Array with: anItemPath)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 6/3/2012 08:59'! expandNodePath: aNodePath ^ self new action: #expandNodePath:; arguments: (Array with: aNodePath)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 10:09'! expandRoots ^ self new action: #expandRoots! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 11:01'! pageSize: anInteger ^ self new action: #pageSize:; arguments: (Array with: anInteger)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 08:43'! selectAll ^ self new action: #selectAll! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 10:03'! selectItems: itemsList ^ self new action: #selectItems:; arguments: (Array with: itemsList)! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/26/2012 19:23'! updateList ^ self new action: #updateList! ! !MorphTreeChangeRequest class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/27/2012 08:37'! updateSelectionFromModel ^ self new action: #updateSelectionFromModel! ! !MorphTreeChangeRequest methodsFor: 'accessing' stamp: 'AlainPlantec 5/26/2012 19:12'! action: aSymbol action := aSymbol! ! !MorphTreeChangeRequest methodsFor: 'accessing' stamp: 'AlainPlantec 5/27/2012 09:08'! arguments ^ arguments ifNil: [Array new]! ! !MorphTreeChangeRequest methodsFor: 'accessing' stamp: 'AlainPlantec 5/27/2012 09:09'! arguments: anArray arguments := anArray! ! !MorphTreeChangeRequest methodsFor: 'accessing' stamp: 'AlainPlantec 5/28/2012 14:32'! change: aTreeMorph action ifNil: [^self]. (aTreeMorph respondsTo: action) ifTrue: [aTreeMorph perform: action withEnoughArguments: self arguments]! ! !GroupCreatorTreeModel methodsFor: 't - accessing' stamp: 'AlainPlantec 10/18/2013 10:35' prior: 23031439! selection | list | list := self rootItems. (list notEmpty and: [ super selection isNil ]) ifTrue: [ self hardlySelectItem: list first ]. ^ super selection! ! PaginatedMorphTreeMorphTests removeSelector: #testChunkPager! FinderUI removeSelector: #updateList! PaginatedMorphTreeMorph removeSelector: #update:! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! parserClass self deprecated: 'use #compilerClass' on: '29 April 2013' in: 'Pharo 3.0'. ^self compilerClass! ! "AST-Core"! "Deprecated30"! "GroupManagerUI"! "Morphic-Base"! "Morphic-Examples"! "MorphicTests"! "NautilusCommon"! "OpalCompiler-Core"! "RecentSubmissions"! "Spec-MorphicAdapters"! "System-Settings"! "Tools"! ----End fileIn----! ----QUIT----an Array(22 October 2013 2:31:46 pm) Pharo.image priorSource: 25034626! ----STARTUP----an Array(22 October 2013 2:36:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 October 2013 2:36:26 pm) Pharo-30514.image priorSource: 25074157! ----STARTUP----an Array(22 October 2013 5:14:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/22/2013 17:10' prior: 75366581! commentForCurrentUpdate ^ '11970 simplify #privateFullMoveBy: and fix Halos https://pharo.fogbugz.com/f/cases/11970 11971 PackageTreeNautilus drag and drop on the package tree https://pharo.fogbugz.com/f/cases/resolve/11971 11795 RBBrowserEnvironment packages method is too broad https://pharo.fogbugz.com/f/cases/11795'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/22/2013 17:11'! script170 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.170.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.582.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.431.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1334.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.583.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/22/2013 17:11'! update30515 "self new update30515" self withUpdateLog: '11970 simplify #privateFullMoveBy: and fix Halos https://pharo.fogbugz.com/f/cases/11970 11971 PackageTreeNautilus drag and drop on the package tree https://pharo.fogbugz.com/f/cases/resolve/11971 11795 RBBrowserEnvironment packages method is too broad https://pharo.fogbugz.com/f/cases/11795'. self loadTogether: self script170 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBBrowserEnvironmentWrapper methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/10/2012 20:30' prior: 30362035! packages ^ (self classes gather: [:each | each packages]) asSet! ! !HaloMorph methodsFor: 'private' stamp: 'MarcusDenker 10/22/2013 14:52' prior: 75249068! addNameBeneath: outerRectangle string: aString "Add a name display centered beneath the bottom of the outer rectangle. Return the handle." | namePosition w | w := self world ifNil:[target world]. nameMorph := StringMorph contents: aString font: StandardFonts haloFont. nameMorph wantsYellowButtonMenu: false. nameMorph color: Color black. nameMorph target: innerTarget. namePosition := outerRectangle bottomCenter - ((nameMorph width // 2) @ (self handleSize negated // 2 - 1)). nameMorph position: (namePosition min: w viewBox bottomRight - nameMorph extent y + 2). self addMorph: nameMorph. ^ nameMorph! ! !RBSelectorEnvironment methodsFor: 'accessing' stamp: 'ThierryGoubier 9/6/2013 17:26'! packages "Check that packages have really class and selector included." | pSet | pSet := Set new. self classes do: [ :each | each packages do: [ :p | self selectorsForClass: each do: [ :s | (p includesSelector: s ofClass: each) ifTrue: [ pSet add: p ] ] ] ]. ^ pSet! ! !Morph methodsFor: 'private' stamp: 'MarcusDenker 10/22/2013 14:56' prior: 74802857! privateFullMoveBy: delta "Private!! Relocate me and all of my subMorphs by recursion. Subclasses that implement different coordinate systems may override this method." self privateMoveBy: delta. submorphs do: [:each | each privateFullMoveBy: delta]. ! ! !PackageTreeModel methodsFor: 'drag and drop' stamp: 'ThierryGoubier 10/22/2013 15:50'! acceptDroppingMorph: aMorph event: evt inMorph: aTreeMorph | aTarget aClassArray | aTarget := (aTreeMorph scrollerSubMorphFromPoint: evt position) complexContents item. aClassArray := aMorph passenger. (aTarget notNil and: [ aTarget class == RPackageTag ]) ifTrue: [ model dropInAPackage: aClassArray into: aTarget ]! ! !PackageTreeModel methodsFor: 'drag and drop' stamp: 'ThierryGoubier 10/22/2013 15:33'! wantsDroppedMorph: aMorph event: anEvent inMorph: destMorph "TODO: Filter out to avoid drag and drop of different objet types. Here, we don't know what the target may be so filtering is limited." ^ destMorph model == self! ! !RBBrowserEnvironment methodsFor: 'private' stamp: 'BenjaminVanRyseghem 3/27/2011 15:45' prior: 30327450! packageOrganizer ^ RPackageOrganizer default! ! TextMorph removeSelector: #adjustTextAnchor:! "Morphic-Base"! "Morphic-Core"! "Nautilus"! "NautilusCommon"! "Refactoring-Environment"! ----End fileIn----! ----QUIT----an Array(22 October 2013 5:14:41 pm) Pharo.image priorSource: 25074362! ----STARTUP----an Array(22 October 2013 5:19:21 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(22 October 2013 5:19:21 pm) Pharo-30515.image priorSource: 25089219! ----STARTUP----an Array(23 October 2013 8:20:34 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/23/2013 08:17' prior: 75406317! commentForCurrentUpdate ^ '11694 Trait methods wrong after recompiling the image https://pharo.fogbugz.com/f/cases/11694 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/23/2013 08:17'! script171 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.170.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.582.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.432.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1334.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.584.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/23/2013 08:17'! update30516 "self new update30516" self withUpdateLog: '11694 Trait methods wrong after recompiling the image https://pharo.fogbugz.com/f/cases/11694 '. self loadTogether: self script171 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'GuillermoPolito 10/18/2013 11:13' prior: 68744745! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'GuillermoPolito 10/18/2013 11:13'! localSelectors ^ self explicitRequirement! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'GuillermoPolito 10/18/2013 11:13'! localSelectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors that are defined in the class." ^ self localSelectors do: selectorBlock! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectorsDo: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! localSelectors ^ self explicitRequirement! ! !Trait method! localSelectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors that are defined in the class." ^ self localSelectors do: selectorBlock! ! !Trait method! localSelectorsDo: selectorBlock "Evaluate selectorBlock for all the message selectors that are defined in the class." ^ self localSelectors do: selectorBlock! ! "OpalCompiler-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(23 October 2013 8:20:41 am) Pharo.image priorSource: 25089424! ----STARTUP----an Array(23 October 2013 8:25:26 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 8:25:26 am) Pharo-30516.image priorSource: 25103021! ----STARTUP----an Array(23 October 2013 12:50:51 pm) as /Users/denker/Desktop/30516/Pharo-30516.image! ----QUIT----an Array(23 October 2013 12:50:54 pm) Pharo-30516.image priorSource: 25103226! ----STARTUP----an Array(23 October 2013 1:04:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/23/2013 13:01' prior: 75421379! commentForCurrentUpdate ^ '11975 Sync with Opal Repository https://pharo.fogbugz.com/f/cases/11975'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/23/2013 13:01'! script172 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.170.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.582.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.434.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.960.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.646.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1334.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.584.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/23/2013 13:01'! update30517 "self new update30517" self withUpdateLog: '11975 Sync with Opal Repository https://pharo.fogbugz.com/f/cases/11975'. self loadTogether: self script172 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 10/22/2013 13:09' prior: 36532578! visitArrayNode: anArrayNode "An arrayNode may have side effect, for example: '{self foo}'. So we cannot just generate nothing for this node." super visitArrayNode: anArrayNode. methodBuilder popTop. ! ! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 10/22/2013 13:04' prior: 36533029! visitBlockNode: aBlockNode "A block has no side effect, so a block translated for effect just doesn't generate anything" ! ! !OCAbstractLocalVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 10/16/2013 15:28' prior: 34921347! isUninitialized usage ifNil: [ ^true ]. self isArg ifTrue: [ ^false ]. "arguments are never unitialized" ^self isRead! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 10/16/2013 15:25' prior: 34929512! isRead ^usage = #read or: [ usage = #arg ] "we treat arguments as read by default" ! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 10/16/2013 15:27' prior: 34930136! isUnused "when the var is never read or written, it is not used. Note: we have a special #arg use which means arguments are never unused" ^ usage isNil! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 10/16/2013 15:25' prior: 34930372! markRead "reading does not change a #write, nor an #arg" usage ifNil: [usage := #read]! ! !OCAbstractVariable methodsFor: 'read/write usage' stamp: 'MarcusDenker 10/16/2013 15:26' prior: 34930534! markWrite "write is the strongest use: a read is turned into a write" usage := #write.! ! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(23 October 2013 1:04:37 pm) Pharo.image priorSource: 25103426! ----STARTUP----an Array(23 October 2013 1:10:06 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 1:10:06 pm) Pharo-30517.image priorSource: 25116852! ----STARTUP----an Array(23 October 2013 3:26:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(23 October 2013 3:26:33 pm) Pharo.image priorSource: 25117057! ----STARTUP----an Array(23 October 2013 3:31:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 3:31:29 pm) Pharo-30517.image priorSource: 25117272! ----STARTUP----an Array(23 October 2013 3:42:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/23/2013 15:30' prior: 75435378! commentForCurrentUpdate ^ '11976 clean up class side #groupsManager method Nautilus https://pharo.fogbugz.com/f/cases/11976 11977 #fixObsoleteReferences should call #flushCache on all changes CMs https://pharo.fogbugz.com/f/cases/11977'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/23/2013 15:31'! script173 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-EstebanLorenzano.228.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.118.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.170.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.61.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.434.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.155.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.963.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1337.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.584.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.17.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/23/2013 15:31'! update30518 "self new update30518" self withUpdateLog: '11976 clean up class side #groupsManager method Nautilus https://pharo.fogbugz.com/f/cases/11976 11977 #fixObsoleteReferences should call #flushCache on all changes CMs https://pharo.fogbugz.com/f/cases/11977'. self loadTogether: self script173 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/22/2013 17:40' prior: 34102736! cleanUp AbstractNautilusUI resetIconCaches. Nautilus resetCachedLastClasses. RecentClasses := nil.! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenke 10/23/2013 13:27' prior: 32252251! testObsoleteClasses | obsoleteClasses | Smalltalk fixObsoleteReferences. obsoleteClasses := SystemNavigation new obsoleteClasses select: [ :each | each isAnonymous not ]. self assert: obsoleteClasses isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Obsolete classes remaining: '; print: obsoleteClasses ]]! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenke 10/23/2013 13:28' prior: 46215662! cleanUpMethods "Make sure that all methods in use are restarted" "ScriptLoader new cleanUpMethods" WeakArray restartFinalizationProcess. WorldState allInstancesDo: [ :ws | ws convertAlarms; convertStepList; resetWorldMenu]. WorldState allInstancesDo: [ :ws | ws instVarNamed: 'menuBuilder' put: nil ]. ProcessBrowser initialize. Delay startTimerEventLoop.! ! !SmalltalkImage methodsFor: 'housekeeping' stamp: 'MarcusDenker 10/23/2013 15:29' prior: 34632023! fixObsoleteReferences "SmalltalkImage current fixObsoleteReferences. SystemNavigation new obsoleteBehaviors size > 0 ifTrue: [ SystemNavigation new obsoleteBehaviors inspect. self error:'Still have obsolete behaviors. See inspector']" | obsoleteBindings obsName realName realClass | Smalltalk garbageCollect. CompiledMethod allInstances do: [ :method | obsoleteBindings := method literals select: [ :literal | literal isVariableBinding and: [ literal value isBehavior and: [ literal value isObsolete ]]]. obsoleteBindings do: [ :binding | obsName := binding value name. self trace: 'Binding: '; traceCr: obsName. realName := obsName copyReplaceAll: 'AnObsolete' with: ''. realClass := Smalltalk globals at: realName asSymbol ifAbsent: [ UndefinedObject ]. binding key: binding key value: realClass ]. "do not forget to flush the JIT cache" obsoleteBindings ifNotEmpty: [ method flushCache ]]. Behavior flushObsoleteSubclasses.! ! ImageCleaner removeSelector: #fixObsoleteReferences! Nautilus class removeSelector: #importAGroup:! Nautilus class removeSelector: #groupsManager! Nautilus class removeSelector: #addGroupForPackage:! Nautilus class removeSelector: #addGroupForClasses:named:! "Nautilus"! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----an Array(23 October 2013 3:42:58 pm) Pharo.image priorSource: 25117477! ----STARTUP----an Array(23 October 2013 3:49:15 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 3:49:15 pm) Pharo-30518.image priorSource: 25132014! ----STARTUP----an Array(23 October 2013 4:09:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(23 October 2013 4:09:35 pm) Pharo.image priorSource: 25132219! ----STARTUP----an Array(23 October 2013 4:14:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 4:14:17 pm) Pharo-30518.image priorSource: 25132434! ----STARTUP----an Array(23 October 2013 4:25:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(23 October 2013 4:25:34 pm) Pharo.image priorSource: 25132639! ----STARTUP----an Array(23 October 2013 4:30:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 4:30:26 pm) Pharo-30518.image priorSource: 25132854! ----STARTUP----an Array(23 October 2013 4:41:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/23/2013 16:36' prior: 75449432! commentForCurrentUpdate ^ '11964 Update Zinc-Resource-Meta-Core https://pharo.fogbugz.com/f/cases/11964 4255 Deprecate MIMEType https://pharo.fogbugz.com/f/cases/4255 11981 Typo in two comments of NotFound https://pharo.fogbugz.com/f/cases/11981 11979 Typo in ChangeSorterModel>>substractFrom:to: https://pharo.fogbugz.com/f/cases/11979'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/23/2013 16:36'! script174 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.538.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1652.mcz KernelTests-MarcusDenker.570.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.170.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.434.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.963.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1337.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.584.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/23/2013 16:36'! update30519 "self new update30519" self withUpdateLog: '11964 Update Zinc-Resource-Meta-Core https://pharo.fogbugz.com/f/cases/11964 4255 Deprecate MIMEType https://pharo.fogbugz.com/f/cases/4255 11981 Typo in two comments of NotFound https://pharo.fogbugz.com/f/cases/11981 11979 Typo in ChangeSorterModel>>substractFrom:to: https://pharo.fogbugz.com/f/cases/11979'. self loadTogether: self script174 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MIMEType commentStamp: '' prior: 42399631! I am deprecated and have been replaced by ZnMimeType. I guess and represent the content type of a file. For a description of what is MIME, see http://en.wikipedia.org/wiki/Internet_media_type http://en.wikipedia.org/wiki/MIME Examples: MIMEType forFileNameReturnMimeTypesOrDefault: 'index.html'. MIMEType fromMIMEString: 'application/zip'.! !ZnMimeType commentStamp: '' prior: 42819041! I am ZnMimeType. Mime types are an element used in describing resources, more specifically their format. Here are some examples MIME types: text/plain text/html text/plain;charset=utf-8 image/png text/* A mime type has a main/sub form with optional parameters. For more information: http://en.wikipedia.org/wiki/MIME_type I know whether I am binary or not and know my charset when applicable. My class side offers access to some common constants. Note that for text types we default to UTF-8 encoding. Examples: ZnMimeType textPlain = 'text/plain;charset=utf-8' asZnMimeType. ZnMimeType textPlain charSet. ZnMimeType textHtml matches: ZnMimeType text. ZnMimeType default matches: ZnMimeType any. ZnMimeType imagePng isBinary. ZnMimeType forFilenameExtension: 'html'. I started life as a copy of WAMineType. Part of Zinc HTTP Components.! !NotFound class methodsFor: 'instance creation' stamp: 'MartinDias 10/23/2013 14:47' prior: 28475149! signalFor: anObject "Create and signal a NotFound exception for anObject in the default receiver." ^ self new object: anObject; signal! ! !NotFound class methodsFor: 'instance creation' stamp: 'MartinDias 10/23/2013 14:47' prior: 28475389! signalFor: anObject in: aCollection "Create and signal a NotFound exception for anObject in aCollection." ^ self new object: anObject; collection: aCollection; signal! ! !MIMEDocument class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 11:41' prior: 25231798! contentStream: aStream ^ self contentStream: aStream mimeType: self defaultMIMEType! ! !MIMEDocument class methodsFor: 'compatibility' stamp: 'SvenVanCaekenberghe 10/22/2013 11:41' prior: 25229212! contentType: aMIMEType content: content "create a MIMEDocument with the given content-type and content" "MIMEDocument contentType: 'text/plain' content: 'This is a test'" ^ self new privateContent: content; type: aMIMEType asZnMimeType; yourself! ! !MIMEDocument class methodsFor: 'compatibility' stamp: 'SvenVanCaekenberghe 10/22/2013 11:42' prior: 25229879! contentType: type content: content url: url ^ self contents: content mimeType: type asZnMimeType uri: url! ! !MIMEDocument class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 11:42' prior: 25232713! contents: aString ^ self contents: aString mimeType: self defaultMIMEType! ! !MIMEDocument class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/22/2013 11:37' prior: 25229049! defaultMIMEType ^ ZnMimeType default! ! !MIMEDocument class methodsFor: 'compatibility' stamp: 'SvenVanCaekenberghe 10/22/2013 12:34' prior: 25230659! guessTypeFromName: url "guesses a content type from the url" | extension | extension := url asString copyAfterLast: $.. ^ ZnMimeType forFilenameExtension: extension ifAbsent: [ nil ]! ! !DualChangeSorterApplication methodsFor: 'menu - change set' stamp: 'MartinDias 10/23/2013 14:42' prior: 21013559! subtractFrom: src to: dest "Subtract the changes found on the other side from the requesting side." | source destination | source := src selectedChangeSet. destination := dest selectedChangeSet. self checkThatSidesDiffer: [^ self]. self model subtractFrom: source to: destination. changeSorterRight setSelectedChangeSet: source.! ! !MIMEType commentStamp: '' prior: 75476951! I am deprecated and have been replaced by ZnMimeType. I guess and represent the content type of a file. For a description of what is MIME, see http://en.wikipedia.org/wiki/Internet_media_type http://en.wikipedia.org/wiki/MIME Examples: MIMEType forFileNameReturnMimeTypesOrDefault: 'index.html'. MIMEType fromMIMEString: 'application/zip'.! !MIMEType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 12:36' prior: 25256588! forFileNameReturnMimeTypesOrDefault: fileName | mimeTypes | mimeTypes := self forFileNameReturnMimeTypesOrNil: fileName. mimeTypes ifNil: [ ^ Array with: self defaultStream ]. ^ mimeTypes! ! !MIMEType class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 10/22/2013 12:35' prior: 25246150! initializeStandardMIMETypes "MIMEType initializeStandardMIMETypes" StandardMIMEMappings := Dictionary new. self standardMIMETypes keysAndValuesDo:[:extension :mimeStrings | StandardMIMEMappings at: extension asString asLowercase put: (mimeStrings collect: [:mimeString | self fromMIMEString: mimeString]). ].! ! !MIMEType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 12:44'! new self deprecated: 'MIMEType has been replaced with ZnMimeType' on: '20131022' in: '3.0'. ^ super new! ! !MIMEType methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 10/22/2013 12:37' prior: 25239537! asMIMEType ^ self asZnMimeType ! ! !MIMEType methodsFor: '*zinc-resource-meta-core' stamp: 'SvenVanCaekenberghe 10/15/2013 14:28' prior: 25238501! asZnMimeType ^ ZnMimeType main: self main sub: self sub ! ! !ZnMimeType commentStamp: '' prior: 75477354! I am ZnMimeType. Mime types are an element used in describing resources, more specifically their format. Here are some examples MIME types: text/plain text/html text/plain;charset=utf-8 image/png text/* A mime type has a main/sub form with optional parameters. For more information: http://en.wikipedia.org/wiki/MIME_type I know whether I am binary or not and know my charset when applicable. My class side offers access to some common constants. Note that for text types we default to UTF-8 encoding. Examples: ZnMimeType textPlain = 'text/plain;charset=utf-8' asZnMimeType. ZnMimeType textPlain charSet. ZnMimeType textHtml matches: ZnMimeType text. ZnMimeType default matches: ZnMimeType any. ZnMimeType imagePng isBinary. ZnMimeType forFilenameExtension: 'html'. I started life as a copy of WAMineType. Part of Zinc HTTP Components.! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:46' prior: 55567441! any "This wildcard instance #matches: any mime type" ^ self main: '*' sub: '*'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:34' prior: 55567576! applicationFormUrlEncoded ^ self main: 'application' sub: 'x-www-form-urlencoded'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:35' prior: 55567753! applicationJavascript ^ self main: 'application' sub: 'javascript'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:35' prior: 55567922! applicationJson ^ self main: 'application' sub: 'json'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:35' prior: 55568079! applicationOctetStream ^ self main: 'application' sub: 'octet-stream'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:35' prior: 55568250! applicationPdf ^ self main: 'application' sub: 'pdf'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:36' prior: 55568405! applicationXml ^ self main: 'application' sub: 'xml'! ! !ZnMimeType class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/15/2013 15:36'! commonMimeTypes "Return a list of commom mime types, the ones we provided convenience accessors for." ^ #( applicationFormUrlEncoded applicationJavascript applicationJson applicationOctetStream applicationPdf applicationXml imageGif imageJpeg imagePng imageSvg textCss textHtml textJavascript textPlain ) collect: [ :each | self perform: each ]! ! !ZnMimeType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/15/2013 15:48' prior: 55570158! forFilenameExtension: extension ^ self forFilenameExtension: extension ifAbsent: [ self default ]! ! !ZnMimeType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/15/2013 15:48'! forFilenameExtension: extension ifAbsent: block ^ ExtensionsMap at: extension ifAbsent: block! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:36' prior: 55568694! imageGif ^ self main: 'image' sub: 'gif'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:36' prior: 55568837! imageJpeg ^ self main: 'image' sub: 'jpeg'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:36' prior: 55568982! imagePng ^ self main: 'image' sub: 'png'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:36' prior: 55569125! imageSvg ^ self main: 'image' sub: 'svg+xml'! ! !ZnMimeType class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 10/15/2013 14:40' prior: 55567278! initialize self initializeExtensionsMap! ! !ZnMimeType class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/15/2013 15:30' prior: 55571488! initializeExtensionsMap "Create a mapping between filename extensions and mime types" ExtensionsMap := Dictionary new. self mimeTypeFilenameExtensionsSpec do: [ :each | | mimeType | mimeType := self fromString: each first. each allButFirstDo: [ :extension | ExtensionsMap at: extension put: mimeType ] ]. self patchExtensionsMap! ! !ZnMimeType class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/15/2013 15:37'! knownFilenameExtensions "Return a collection of the filename extensions that we know of" ^ ExtensionsMap keys! ! !ZnMimeType class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/15/2013 15:38'! knownMimeTypesWithFilenameExtensions "Return a collection of mime types for which we know a filename extension" ^ ExtensionsMap values! ! !ZnMimeType class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/15/2013 15:10'! mimeTypeFilenameExtensionsSpec "This array maps mime types to a list of filename extensions, based on the Debian/Ubuntu /etc/mime.types file" "('mime.types' asFileReference readStreamDo: [ :in | in contentsOfEntireFile ]) lines collect: [ :line | (line isEmpty not and: [ line first ~= $# ]) ifTrue: [ (line findTokens: { Character space. Character tab }) asArray ] ] thenSelect: [ :each | each notNil and: [ each size > 1 ] ]." ^ #(#('application/andrew-inset' 'ez') #('application/annodex' 'anx') #('application/atom+xml' 'atom') #('application/atomcat+xml' 'atomcat') #('application/atomserv+xml' 'atomsrv') #('application/bbolin' 'lin') #('application/cu-seeme' 'cu') #('application/davmount+xml' 'davmount') #('application/dicom' 'dcm') #('application/dsptype' 'tsp') #('application/ecmascript' 'es') #('application/futuresplash' 'spl') #('application/hta' 'hta') #('application/java-archive' 'jar') #('application/java-serialized-object' 'ser') #('application/java-vm' 'class') #('application/javascript' 'js') #('application/json' 'json') #('application/m3g' 'm3g') #('application/mac-binhex40' 'hqx') #('application/mac-compactpro' 'cpt') #('application/mathematica' 'nb' 'nbp') #('application/mbox' 'mbox') #('application/msaccess' 'mdb') #('application/msword' 'doc' 'dot') #('application/mxf' 'mxf') #('application/octet-stream' 'bin') #('application/oda' 'oda') #('application/ogg' 'ogx') #('application/onenote' 'one' 'onetoc2' 'onetmp' 'onepkg') #('application/pdf' 'pdf') #('application/pgp-encrypted' 'pgp') #('application/pgp-keys' 'key') #('application/pgp-signature' 'sig') #('application/pics-rules' 'prf') #('application/postscript' 'ps' 'ai' 'eps' 'epsi' 'epsf' 'eps2' 'eps3') #('application/rar' 'rar') #('application/rdf+xml' 'rdf') #('application/rtf' 'rtf') #('application/sla' 'stl') #('application/smil' 'smi' 'smil') #('application/xhtml+xml' 'xhtml' 'xht') #('application/xml' 'xml' 'xsl' 'xsd') #('application/xspf+xml' 'xspf') #('application/zip' 'zip') #('application/vnd.android.package-archive' 'apk') #('application/vnd.cinderella' 'cdy') #('application/vnd.google-earth.kml+xml' 'kml') #('application/vnd.google-earth.kmz' 'kmz') #('application/vnd.mozilla.xul+xml' 'xul') #('application/vnd.ms-excel' 'xls' 'xlb' 'xlt') #('application/vnd.ms-excel.addin.macroEnabled.12' 'xlam') #('application/vnd.ms-excel.sheet.binary.macroEnabled.12' 'xlsb') #('application/vnd.ms-excel.sheet.macroEnabled.12' 'xlsm') #('application/vnd.ms-excel.template.macroEnabled.12' 'xltm') #('application/vnd.ms-fontobject' 'eot') #('application/vnd.ms-officetheme' 'thmx') #('application/vnd.ms-pki.seccat' 'cat') #('application/vnd.ms-powerpoint' 'ppt' 'pps') #('application/vnd.ms-powerpoint.addin.macroEnabled.12' 'ppam') #('application/vnd.ms-powerpoint.presentation.macroEnabled.12' 'pptm') #('application/vnd.ms-powerpoint.slide.macroEnabled.12' 'sldm') #('application/vnd.ms-powerpoint.slideshow.macroEnabled.12' 'ppsm') #('application/vnd.ms-powerpoint.template.macroEnabled.12' 'potm') #('application/vnd.ms-word.document.macroEnabled.12' 'docm') #('application/vnd.ms-word.template.macroEnabled.12' 'dotm') #('application/vnd.oasis.opendocument.chart' 'odc') #('application/vnd.oasis.opendocument.database' 'odb') #('application/vnd.oasis.opendocument.formula' 'odf') #('application/vnd.oasis.opendocument.graphics' 'odg') #('application/vnd.oasis.opendocument.graphics-template' 'otg') #('application/vnd.oasis.opendocument.image' 'odi') #('application/vnd.oasis.opendocument.presentation' 'odp') #('application/vnd.oasis.opendocument.presentation-template' 'otp') #('application/vnd.oasis.opendocument.spreadsheet' 'ods') #('application/vnd.oasis.opendocument.spreadsheet-template' 'ots') #('application/vnd.oasis.opendocument.text' 'odt') #('application/vnd.oasis.opendocument.text-master' 'odm') #('application/vnd.oasis.opendocument.text-template' 'ott') #('application/vnd.oasis.opendocument.text-web' 'oth') #('application/vnd.openxmlformats-officedocument.presentationml.presentation' 'pptx') #('application/vnd.openxmlformats-officedocument.presentationml.slide' 'sldx') #('application/vnd.openxmlformats-officedocument.presentationml.slideshow' 'ppsx') #('application/vnd.openxmlformats-officedocument.presentationml.template' 'potx') #('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 'xlsx') #('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 'xlsx') #('application/vnd.openxmlformats-officedocument.spreadsheetml.template' 'xltx') #('application/vnd.openxmlformats-officedocument.spreadsheetml.template' 'xltx') #('application/vnd.openxmlformats-officedocument.wordprocessingml.document' 'docx') #('application/vnd.openxmlformats-officedocument.wordprocessingml.template' 'dotx') #('application/vnd.rim.cod' 'cod') #('application/vnd.smaf' 'mmf') #('application/vnd.stardivision.calc' 'sdc') #('application/vnd.stardivision.chart' 'sds') #('application/vnd.stardivision.draw' 'sda') #('application/vnd.stardivision.impress' 'sdd') #('application/vnd.stardivision.math' 'sdf') #('application/vnd.stardivision.writer' 'sdw') #('application/vnd.stardivision.writer-global' 'sgl') #('application/vnd.sun.xml.calc' 'sxc') #('application/vnd.sun.xml.calc.template' 'stc') #('application/vnd.sun.xml.draw' 'sxd') #('application/vnd.sun.xml.draw.template' 'std') #('application/vnd.sun.xml.impress' 'sxi') #('application/vnd.sun.xml.impress.template' 'sti') #('application/vnd.sun.xml.math' 'sxm') #('application/vnd.sun.xml.writer' 'sxw') #('application/vnd.sun.xml.writer.global' 'sxg') #('application/vnd.sun.xml.writer.template' 'stw') #('application/vnd.symbian.install' 'sis') #('application/vnd.tcpdump.pcap' 'cap' 'pcap') #('application/vnd.visio' 'vsd') #('application/vnd.wap.wbxml' 'wbxml') #('application/vnd.wap.wmlc' 'wmlc') #('application/vnd.wap.wmlscriptc' 'wmlsc') #('application/vnd.wordperfect' 'wpd') #('application/vnd.wordperfect5.1' 'wp5') #('application/x-123' 'wk') #('application/x-7z-compressed' '7z') #('application/x-abiword' 'abw') #('application/x-apple-diskimage' 'dmg') #('application/x-bcpio' 'bcpio') #('application/x-bittorrent' 'torrent') #('application/x-cab' 'cab') #('application/x-cbr' 'cbr') #('application/x-cbz' 'cbz') #('application/x-cdf' 'cdf' 'cda') #('application/x-cdlink' 'vcd') #('application/x-chess-pgn' 'pgn') #('application/x-comsol' 'mph') #('application/x-cpio' 'cpio') #('application/x-csh' 'csh') #('application/x-debian-package' 'deb' 'udeb') #('application/x-director' 'dcr' 'dir' 'dxr') #('application/x-dms' 'dms') #('application/x-doom' 'wad') #('application/x-dvi' 'dvi') #('application/x-font' 'pfa' 'pfb' 'gsf' 'pcf' 'pcf.Z') #('application/x-font-woff' 'woff') #('application/x-freemind' 'mm') #('application/x-futuresplash' 'spl') #('application/x-ganttproject' 'gan') #('application/x-gnumeric' 'gnumeric') #('application/x-go-sgf' 'sgf') #('application/x-graphing-calculator' 'gcf') #('application/x-gtar' 'gtar') #('application/x-gtar-compressed' 'tgz' 'taz') #('application/x-hdf' 'hdf') #('application/x-hwp' 'hwp') #('application/x-ica' 'ica') #('application/x-info' 'info') #('application/x-internet-signup' 'ins' 'isp') #('application/x-iphone' 'iii') #('application/x-iso9660-image' 'iso') #('application/x-jam' 'jam') #('application/x-java-jnlp-file' 'jnlp') #('application/x-jmol' 'jmz') #('application/x-kchart' 'chrt') #('application/x-killustrator' 'kil') #('application/x-koan' 'skp' 'skd' 'skt' 'skm') #('application/x-kpresenter' 'kpr' 'kpt') #('application/x-kspread' 'ksp') #('application/x-kword' 'kwd' 'kwt') #('application/x-latex' 'latex') #('application/x-lha' 'lha') #('application/x-lyx' 'lyx') #('application/x-lzh' 'lzh') #('application/x-lzx' 'lzx') #('application/x-maker' 'frm' 'maker' 'frame' 'fm' 'fb' 'book' 'fbdoc') #('application/x-md5' 'md5') #('application/x-mif' 'mif') #('application/x-mpegURL' 'm3u8') #('application/x-ms-wmd' 'wmd') #('application/x-ms-wmz' 'wmz') #('application/x-msdos-program' 'com' 'exe' 'bat' 'dll') #('application/x-msi' 'msi') #('application/x-netcdf' 'nc') #('application/x-ns-proxy-autoconfig' 'pac' 'dat') #('application/x-nwc' 'nwc') #('application/x-object' 'o') #('application/x-oz-application' 'oza') #('application/x-pkcs7-certreqresp' 'p7r') #('application/x-pkcs7-crl' 'crl') #('application/x-python-code' 'pyc' 'pyo') #('application/x-qgis' 'qgs' 'shp' 'shx') #('application/x-quicktimeplayer' 'qtl') #('application/x-rdp' 'rdp') #('application/x-redhat-package-manager' 'rpm') #('application/x-rss+xml' 'rss') #('application/x-ruby' 'rb') #('application/x-scilab' 'sci' 'sce') #('application/x-scilab-xcos' 'xcos') #('application/x-sh' 'sh') #('application/x-sha1' 'sha1') #('application/x-shar' 'shar') #('application/x-shockwave-flash' 'swf' 'swfl') #('application/x-silverlight' 'scr') #('application/x-sql' 'sql') #('application/x-stuffit' 'sit' 'sitx') #('application/x-sv4cpio' 'sv4cpio') #('application/x-sv4crc' 'sv4crc') #('application/x-tar' 'tar') #('application/x-tcl' 'tcl') #('application/x-tex-gf' 'gf') #('application/x-tex-pk' 'pk') #('application/x-texinfo' 'texinfo' 'texi') #('application/x-trash' '~' '%' 'bak' 'old' 'sik') #('application/x-troff' 't' 'tr' 'roff') #('application/x-troff-man' 'man') #('application/x-troff-me' 'me') #('application/x-troff-ms' 'ms') #('application/x-ustar' 'ustar') #('application/x-wais-source' 'src') #('application/x-wingz' 'wz') #('application/x-x509-ca-cert' 'crt') #('application/x-xcf' 'xcf') #('application/x-xfig' 'fig') #('application/x-xpinstall' 'xpi') #('audio/amr' 'amr') #('audio/amr-wb' 'awb') #('audio/amr' 'amr') #('audio/amr-wb' 'awb') #('audio/annodex' 'axa') #('audio/basic' 'au' 'snd') #('audio/csound' 'csd' 'orc' 'sco') #('audio/flac' 'flac') #('audio/midi' 'mid' 'midi' 'kar') #('audio/mpeg' 'mpga' 'mpega' 'mp2' 'mp3' 'm4a') #('audio/mpegurl' 'm3u') #('audio/ogg' 'oga' 'ogg' 'spx') #('audio/prs.sid' 'sid') #('audio/x-aiff' 'aif' 'aiff' 'aifc') #('audio/x-gsm' 'gsm') #('audio/x-mpegurl' 'm3u') #('audio/x-ms-wma' 'wma') #('audio/x-ms-wax' 'wax') #('audio/x-pn-realaudio' 'ra' 'rm' 'ram') #('audio/x-realaudio' 'ra') #('audio/x-scpls' 'pls') #('audio/x-sd2' 'sd2') #('audio/x-wav' 'wav') #('chemical/x-alchemy' 'alc') #('chemical/x-cache' 'cac' 'cache') #('chemical/x-cache-csf' 'csf') #('chemical/x-cactvs-binary' 'cbin' 'cascii' 'ctab') #('chemical/x-cdx' 'cdx') #('chemical/x-cerius' 'cer') #('chemical/x-chem3d' 'c3d') #('chemical/x-chemdraw' 'chm') #('chemical/x-cif' 'cif') #('chemical/x-cmdf' 'cmdf') #('chemical/x-cml' 'cml') #('chemical/x-compass' 'cpa') #('chemical/x-crossfire' 'bsd') #('chemical/x-csml' 'csml' 'csm') #('chemical/x-ctx' 'ctx') #('chemical/x-cxf' 'cxf' 'cef') #('chemical/x-embl-dl-nucleotide' 'emb' 'embl') #('chemical/x-galactic-spc' 'spc') #('chemical/x-gamess-input' 'inp' 'gam' 'gamin') #('chemical/x-gaussian-checkpoint' 'fch' 'fchk') #('chemical/x-gaussian-cube' 'cub') #('chemical/x-gaussian-input' 'gau' 'gjc' 'gjf') #('chemical/x-gaussian-log' 'gal') #('chemical/x-gcg8-sequence' 'gcg') #('chemical/x-genbank' 'gen') #('chemical/x-hin' 'hin') #('chemical/x-isostar' 'istr' 'ist') #('chemical/x-jcamp-dx' 'jdx' 'dx') #('chemical/x-kinemage' 'kin') #('chemical/x-macmolecule' 'mcm') #('chemical/x-macromodel-input' 'mmd' 'mmod') #('chemical/x-mdl-molfile' 'mol') #('chemical/x-mdl-rdfile' 'rd') #('chemical/x-mdl-rxnfile' 'rxn') #('chemical/x-mdl-sdfile' 'sd' 'sdf') #('chemical/x-mdl-tgf' 'tgf') #('chemical/x-mmcif' 'mcif') #('chemical/x-mol2' 'mol2') #('chemical/x-molconn-Z' 'b') #('chemical/x-mopac-graph' 'gpt') #('chemical/x-mopac-input' 'mop' 'mopcrt' 'mpc' 'zmt') #('chemical/x-mopac-out' 'moo') #('chemical/x-mopac-vib' 'mvb') #('chemical/x-ncbi-asn1' 'asn') #('chemical/x-ncbi-asn1-ascii' 'prt' 'ent') #('chemical/x-ncbi-asn1-binary' 'val' 'aso') #('chemical/x-ncbi-asn1-spec' 'asn') #('chemical/x-pdb' 'pdb' 'ent') #('chemical/x-rosdal' 'ros') #('chemical/x-swissprot' 'sw') #('chemical/x-vamas-iso14976' 'vms') #('chemical/x-vmd' 'vmd') #('chemical/x-xtel' 'xtel') #('chemical/x-xyz' 'xyz') #('image/gif' 'gif') #('image/ief' 'ief') #('image/jpeg' 'jpeg' 'jpg' 'jpe') #('image/pcx' 'pcx') #('image/png' 'png') #('image/svg+xml' 'svg' 'svgz') #('image/tiff' 'tiff' 'tif') #('image/vnd.djvu' 'djvu' 'djv') #('image/vnd.microsoft.icon' 'ico') #('image/vnd.wap.wbmp' 'wbmp') #('image/x-canon-cr2' 'cr2') #('image/x-canon-crw' 'crw') #('image/x-cmu-raster' 'ras') #('image/x-coreldraw' 'cdr') #('image/x-coreldrawpattern' 'pat') #('image/x-coreldrawtemplate' 'cdt') #('image/x-corelphotopaint' 'cpt') #('image/x-epson-erf' 'erf') #('image/x-jg' 'art') #('image/x-jng' 'jng') #('image/x-ms-bmp' 'bmp') #('image/x-nikon-nef' 'nef') #('image/x-olympus-orf' 'orf') #('image/x-photoshop' 'psd') #('image/x-portable-anymap' 'pnm') #('image/x-portable-bitmap' 'pbm') #('image/x-portable-graymap' 'pgm') #('image/x-portable-pixmap' 'ppm') #('image/x-rgb' 'rgb') #('image/x-xbitmap' 'xbm') #('image/x-xpixmap' 'xpm') #('image/x-xwindowdump' 'xwd') #('message/rfc822' 'eml') #('model/iges' 'igs' 'iges') #('model/mesh' 'msh' 'mesh' 'silo') #('model/vrml' 'wrl' 'vrml') #('model/x3d+vrml' 'x3dv') #('model/x3d+xml' 'x3d') #('model/x3d+binary' 'x3db') #('text/cache-manifest' 'appcache') #('text/calendar' 'ics' 'icz') #('text/css' 'css') #('text/csv' 'csv') #('text/h323' '323') #('text/html' 'html' 'htm' 'shtml') #('text/iuls' 'uls') #('text/mathml' 'mml') #('text/plain' 'asc' 'txt' 'text' 'pot' 'brf' 'srt') #('text/richtext' 'rtx') #('text/scriptlet' 'sct' 'wsc') #('text/texmacs' 'tm') #('text/tab-separated-values' 'tsv') #('text/vnd.sun.j2me.app-descriptor' 'jad') #('text/vnd.wap.wml' 'wml') #('text/vnd.wap.wmlscript' 'wmls') #('text/x-bibtex' 'bib') #('text/x-boo' 'boo') #('text/x-c++hdr' 'h++' 'hpp' 'hxx' 'hh') #('text/x-c++src' 'c++' 'cpp' 'cxx' 'cc') #('text/x-chdr' 'h') #('text/x-component' 'htc') #('text/x-csh' 'csh') #('text/x-csrc' 'c') #('text/x-dsrc' 'd') #('text/x-diff' 'diff' 'patch') #('text/x-haskell' 'hs') #('text/x-java' 'java') #('text/x-lilypond' 'ly') #('text/x-literate-haskell' 'lhs') #('text/x-moc' 'moc') #('text/x-pascal' 'p' 'pas') #('text/x-pcs-gcd' 'gcd') #('text/x-perl' 'pl' 'pm') #('text/x-python' 'py') #('text/x-scala' 'scala') #('text/x-setext' 'etx') #('text/x-sfv' 'sfv') #('text/x-sh' 'sh') #('text/x-tcl' 'tcl' 'tk') #('text/x-tex' 'tex' 'ltx' 'sty' 'cls') #('text/x-vcalendar' 'vcs') #('text/x-vcard' 'vcf') #('video/3gpp' '3gp') #('video/annodex' 'axv') #('video/dl' 'dl') #('video/dv' 'dif' 'dv') #('video/fli' 'fli') #('video/gl' 'gl') #('video/mpeg' 'mpeg' 'mpg' 'mpe') #('video/MP2T' 'ts') #('video/mp4' 'mp4') #('video/quicktime' 'qt' 'mov') #('video/ogg' 'ogv') #('video/webm' 'webm') #('video/vnd.mpegurl' 'mxu') #('video/x-flv' 'flv') #('video/x-la-asf' 'lsf' 'lsx') #('video/x-mng' 'mng') #('video/x-ms-asf' 'asf' 'asx') #('video/x-ms-wm' 'wm') #('video/x-ms-wmv' 'wmv') #('video/x-ms-wmx' 'wmx') #('video/x-ms-wvx' 'wvx') #('video/x-msvideo' 'avi') #('video/x-sgi-movie' 'movie') #('video/x-matroska' 'mpv' 'mkv') #('x-conference/x-cooltalk' 'ice') #('x-epoc/x-sisx-app' 'sisx') #('x-world/x-vrml' 'vrm' 'vrml' 'wrl'))! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:37' prior: 55569269! multiPartFormData ^ self main: 'multipart' sub: 'form-data'! ! !ZnMimeType class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/15/2013 15:39'! patchExtensionsMap "Patch the extension map that we read from the spec" #('~' '%') do: [ :each | ExtensionsMap removeKey: each ]. (ExtensionsMap at: 'text') setCharSetUTF8. (ExtensionsMap at: 'html') setCharSetUTF8. ExtensionsMap at: 'asc' put: 'text/plain' asZnMimeType! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:47' prior: 55569430! text "This wildcard instance #matches: all textual mime types" ^ self main: 'text' sub: '*'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:37' prior: 55569567! textCss ^ self main: 'text' sub: 'css'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:47' prior: 55569708! textHtml "Note that the charset is set to utf8 automatically" ^ (self main: 'text' sub: 'html') setCharSetUTF8; yourself! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:38' prior: 55569851! textJavascript ^ self main: 'text' sub: 'javascript'! ! !ZnMimeType class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 10/15/2013 14:47' prior: 55570006! textPlain "Note that the charset is set to utf8 automatically" ^ (self main: 'text' sub: 'plain') setCharSetUTF8; yourself! ! !FileSystemStore methodsFor: 'public' stamp: 'SvenVanCaekenberghe 10/22/2013 11:38' prior: 22068004! mimeTypesAt: aPath | mimeType | mimeType := ZnMimeType forFilenameExtension: aPath extension ifAbsent: [ ^ nil ]. ^ Array with: mimeType! ! !String methodsFor: '*Network-MIME' stamp: 'SvenVanCaekenberghe 10/22/2013 12:35' prior: 49100001! asMIMEType ^ self asZnMimeType! ! !ChangeSorterModel methodsFor: 'change set' stamp: 'MartinDias 10/23/2013 14:42'! subtractFrom: source to: destination source forgetAllChangesFoundIn: destination.! ! ZnMimeType class removeSelector: #sharedInstanceAt:! ZnMimeType class removeSelector: #predefinedInstanceAt:! ZnMimeType class removeSelector: #initializeMimeTypes! ChangeSorterModel removeSelector: #substractFrom:to:! "Collections-Abstract"! "FileSystem-Core"! "Network-MIME"! "Spec-Tools"! "Zinc-Resource-Meta-Core"! ----End fileIn----! ----QUIT----an Array(23 October 2013 4:41:36 pm) Pharo.image priorSource: 25133059! ----STARTUP----an Array(23 October 2013 4:47:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(23 October 2013 4:47:31 pm) Pharo-30519.image priorSource: 25173057! ----STARTUP----an Array(24 October 2013 3:11:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/24/2013 15:08' prior: 75465014! commentForCurrentUpdate ^ '11982 testExplicitRequirementMethodsShouldBeImp... https://pharo.fogbugz.com/f/cases/11982 11991 remove #recompileAllFrom: https://pharo.fogbugz.com/f/cases/11991 11988 MorphTreeMorph incorrect bounds https://pharo.fogbugz.com/f/cases/11988'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/24/2013 15:09'! script175 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1654.mcz KernelTests-MarcusDenker.572.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.171.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.963.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1337.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.584.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/24/2013 15:09'! update30520 "self new update30520" self withUpdateLog: '11982 testExplicitRequirementMethodsShouldBeImp... https://pharo.fogbugz.com/f/cases/11982 11991 remove #recompileAllFrom: https://pharo.fogbugz.com/f/cases/11991 11988 MorphTreeMorph incorrect bounds https://pharo.fogbugz.com/f/cases/11988'. self loadTogether: self script175 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Behavior methodsFor: 'accessing' stamp: 'MarcusDenker 10/24/2013 14:16' prior: 75434211! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !BehaviorTest methodsFor: 'tests' stamp: 'MarcusDenker 10/24/2013 14:18' prior: 49932864! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | (TBehavior >> selector) sourceCode. self assert: (TBehavior >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#externalTypeAlias: #nbBindingOf: #format #nbFnArgument:generator: #layout #isBehavior) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#localSelectors: #browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet! ! !MorphTreeMorph methodsFor: 'submorphs-add/remove' stamp: 'ThierryGoubier 10/23/2013 23:11' prior: 26989231! addMorphsAfter: parentMorph fromCollection: aCollection "Sent when expanding a node in order to add chilldren nodes after the expanded node" | priorMorph morphList subs | priorMorph := nil. morphList := OrderedCollection new. "prepare the list of nodes to be added" aCollection do: [:item | priorMorph := self indentingItemClass new initWithContents: item prior: priorMorph forList: self indentLevel: parentMorph indentLevel + 1. morphList add: priorMorph]. "Set new child morphs index" 1 to: morphList size do: [:i | | m | (m := morphList at: i) index: i + parentMorph index]. "Add the new morph list in the scroller" scroller addAllMorphs: morphList after: parentMorph. "update next morphs index" subs := self allNodeMorphs. morphList last index to: subs size do: [:pos | (subs at: pos) index: pos]. "set the new morphs widths according to columns width" self updateColumnMorphsWidth. morphList do: [ :e | e doLayoutIn: e layoutBounds ]. ^morphList ! ! !MorphTreeMorph methodsFor: 'column handling' stamp: 'ThierryGoubier 10/21/2013 17:00' prior: 74007248! headerBounds "return the bounds of each top header button (one per column)" | positions controlBounds currPos currLeft | controlBounds := OrderedCollection new. currPos := scroller left. (positions := self columnResizers asOrderedCollection collect: [ :r | r position ]) ifNotEmpty: [ | currRight | currPos := positions removeFirst x. currLeft := scroller left - scroller offset x. currRight := currPos. controlBounds add: (currLeft @ topHeader top corner: currRight @ topHeader bottom). [ positions notEmpty ] whileTrue: [ currLeft := currPos + self resizerWidth. currPos := positions removeFirst x. currRight := currPos. controlBounds add: (currLeft @ topHeader top corner: currRight @ topHeader bottom) ] ]. self columnResizers size < self columns size ifTrue: [ currLeft := currPos + self resizerWidth. controlBounds add: ((currLeft min: scroller right) @ topHeader top corner: scroller right @ topHeader bottom) ]. ^ controlBounds! ! !MorphTreeNodeMorph methodsFor: 'layout' stamp: 'ThierryGoubier 10/21/2013 17:11' prior: 27042382! layoutBounds "Return the bounds for laying out children of the receiver" | lb | lb := super layoutBounds. container ifNil: [ ^ lb ]. ^ (lb left: (lb left + self spacerWidth)) right: (lb right max: lb left + self spacerWidth) ! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'ThierryGoubier 10/21/2013 20:21' prior: 74001439! spacerWidth "Such a morph composed of, left to right, some space according to the level in the tree, an expand toggle (if any), a check box (if any), and the item morphs (icon + text often). Compute here the width of the space, including the toggle (and the check box) if there is one." | baseRect | baseRect := self mustTakeIntoAccountCheckSpace ifTrue: [ self checkRectangle ] ifFalse: [ self toggleRectangle ]. ^ (self mustTakeIntoAccountToggleSpace or: [ self mustTakeIntoAccountCheckSpace ]) ifTrue: [ baseRect right + container gapAfterToggle - bounds left ] ifFalse: [ baseRect left - bounds left ]! ! Compiler class removeSelector: #recompileAllFrom:! ManifestOpalCompilerCore class removeSelector: #ruleCodeCruftLeftInMethodsRuleV1FalsePositive! "Compiler"! "Kernel"! "KernelTests"! "Morphic-Base"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----an Array(24 October 2013 3:11:44 pm) Pharo.image priorSource: 25173262! ----STARTUP----an Array(24 October 2013 3:17:08 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(24 October 2013 3:17:08 pm) Pharo-30520.image priorSource: 25191494! ----STARTUP----an Array(25 October 2013 11:24:36 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/25/2013 11:22' prior: 75505217! commentForCurrentUpdate ^ '11995 MenuMorph>>addList: sends #iconNamed: to an instance of Pharo3Theme, which raises a warning of deprecation. https://pharo.fogbugz.com/f/cases/11995 #localSelectors add to Trait so cleanup is possible in a second step'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/25/2013 11:22'! script176 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1654.mcz KernelTests-MarcusDenker.572.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.173.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.963.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1337.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.586.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/25/2013 11:22'! update30521 "self new update30521" self withUpdateLog: '11995 MenuMorph>>addList: sends #iconNamed: to an instance of Pharo3Theme, which raises a warning of deprecation. https://pharo.fogbugz.com/f/cases/11995 #localSelectors add to Trait so cleanup is possible in a second step'. self loadTogether: self script176 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 10/25/2013 11:21' prior: 75433307! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !MenuMorph methodsFor: 'construction' stamp: 'MartinDias 10/24/2013 16:40' prior: 25483622! addList: aList "Add the given items to this menu, where each item is a pair ( ).. If an element of the list is simply the symobl $-, add a line to the receiver. The optional third element of each entry, if present, provides balloon help. The optional fourth element provide the icon selector" aList do: [:tuple | (tuple == #-) ifTrue: [self addLine] ifFalse: [self add: tuple first capitalized action: tuple second. (tuple size > 2 and: [tuple third notNil]) ifTrue: [self balloonTextForLastItem: tuple third]. (tuple size > 3 and: [tuple fourth notNil]) ifTrue: [self lastItem icon: (Smalltalk ui icons iconNamed: tuple fourth)]]]! ! "Morphic-Base"! "Traits"! ----End fileIn----! ----QUIT----an Array(25 October 2013 11:24:44 am) Pharo.image priorSource: 25191699! ----STARTUP----an Array(25 October 2013 11:29:26 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 11:29:26 am) Pharo-30521.image priorSource: 25204908! ----STARTUP----an Array(25 October 2013 1:06:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/25/2013 13:04' prior: 75523655! commentForCurrentUpdate ^ '12000 localSelectors can be implemented in TBehavior https://pharo.fogbugz.com/f/cases/12000'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/25/2013 13:04'! script177 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.292.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1656.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.173.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.963.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1337.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/25/2013 13:04'! update30522 "self new update30522" self withUpdateLog: '12000 localSelectors can be implemented in TBehavior https://pharo.fogbugz.com/f/cases/12000'. self loadTogether: self script177 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassTest methodsFor: 'testing' stamp: 'MarcusDenker 10/25/2013 10:39' prior: 75337642! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #baseClass #basicLocalSelectors #classClass #localSelectors: isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 10/25/2013 10:37' prior: 75535457! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !MetaclassTest methodsFor: 'tests' stamp: 'MarcusDenker 10/25/2013 10:52' prior: 75341588! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | (TApplyingOnClassSide >> selector) sourceCode. self assert: (TApplyingOnClassSide >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#externalTypeAlias:. #baseClass. #basicLocalSelectors:. #basicLocalSelectors. #classClass. #isClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #localSelectors:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:} asSet! ! Metaclass removeSelector: #localSelectors! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! TraitBehavior removeSelector: #localSelectors! Class removeSelector: #localSelectors! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! Behavior removeSelector: #localSelectors! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! !Trait method! localSelectors "Return a set of selectors defined locally. The instance variable is lazily initialized. If it is nil then there are no non-local selectors" ^ self basicLocalSelectors ifNil: [self selectors asSet] ifNotNil: [self basicLocalSelectors].! ! "Kernel"! "KernelTests"! "Traits"! ----End fileIn----! ----QUIT----an Array(25 October 2013 1:06:38 pm) Pharo.image priorSource: 25205115! ----STARTUP----an Array(25 October 2013 1:11:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 1:11:17 pm) Pharo-30522.image priorSource: 25223714! ----STARTUP----an Array(25 October 2013 1:48:29 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/25/2013 13:45' prior: 75537071! commentForCurrentUpdate ^ '12001 moved some isKindOf: to isXXX https://pharo.fogbugz.com/f/cases/12001 12004 delete empty packages https://pharo.fogbugz.com/f/cases/12004 12002 DeepCopier>>isItTimeToCheckVariables is candidate to be removed https://pharo.fogbugz.com/f/cases/12002 12005 unload BaselineOfFileTree, BaselineOfMetacello https://pharo.fogbugz.com/f/cases/12005'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/25/2013 13:46'! script178 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz BaselineOfFileTree-EstebanLorenzano.8.mcz BaselineOfMetacello-EstebanLorenzano.69.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1658.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Shortcuts-EstebanLorenzano.69.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.173.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.276.mcz RPackage-SystemIntegration-EstebanLorenzano.186.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Adapters-MarcusDenker.3.mcz Spec-Bindings-MarcusDenker.35.mcz Spec-Builder-MarcusDenker.43.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz Spec-Widgets-MarcusDenker.265.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-PragmaCollector-MarcusDenker.11.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.965.mcz System-Text-EstebanLorenzano.216.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1339.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.118.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/25/2013 13:46'! update30523 "self new update30523" self withUpdateLog: '12001 moved some isKindOf: to isXXX https://pharo.fogbugz.com/f/cases/12001 12004 delete empty packages https://pharo.fogbugz.com/f/cases/12004 12002 DeepCopier>>isItTimeToCheckVariables is candidate to be removed https://pharo.fogbugz.com/f/cases/12002 12005 unload BaselineOfFileTree, BaselineOfMetacello https://pharo.fogbugz.com/f/cases/12005'. self loadTogether: self script178 merge: false. ScriptLoader new deletePackage: 'System-Text'. ScriptLoader new deletePackage: 'System-PragmaCollector'. ScriptLoader new deletePackage: 'Keymapping-Shortcuts'. ScriptLoader new deletePackage: 'Spec-Adapters'. ScriptLoader new deletePackage: 'Spec-Bindings'. ScriptLoader new deletePackage: 'Spec-Builder'. ScriptLoader new deletePackage: 'Spec-Widgets'. ScriptLoader new unloadPackageNamed: 'BaselineOfFileTree'. ScriptLoader new unloadPackageNamed: 'BaselineOfMetacello'. . self flushCaches. ! ! "ScriptLoader30"! !DeepCopier commentStamp: 'stephane.ducasse 9/25/2008 17:47' prior: 42220696! DeepCopier does a veryDeepCopy. It is a complete tree copy using a dictionary. Any object that is in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy. See Object|veryDeepCopy which calls (self veryDeepCopyWith: aDeepCopier). When a tree of morphs points at a morph outside of itself, that morph should not be copied. Use our own kind of weak pointers for the 'potentially outside' morphs. Default is that any new class will have all of its fields deeply copied. If a field needs to be weakly copied, define veryDeepInner: and veryDeepFixupWith:. veryDeepInner: has the loop that actually copies the fields. If a class defines its own copy of veryDeepInner: (to leave some fields out), then veryDeepFixupWith: will be called on that object at the end. veryDeepInner: can compute an alternate object to put in a field. (Object veryDeepCopyWith: discovers which superclasses did not define veryDeepInner:, and very deeply copies the variables defined in those classes). To decide if a class needs veryDeepInner: and veryDeepFixupWith:, ask this about an instance: If I duplicate this object, does that mean that I also want to make duplicates of the things it holds onto? If yes, (i.e. a Paragraph does want a new copy of its Text) then do nothing. If no, (i.e. an undo command does not want to copy the objects it acts upon), then define veryDeepInner: and veryDeepFixupWith:. Here is an analysis for the specific case of a morph being held by another morph. Does field X contain a morph (or a Player whose costume is a morph)? If not, no action needed. Is the morph in field X already a submorph of the object? Is it down lower in the submorph tree? If so, no action needed. Could the morph in field X every appear on the screen (be a submorph of some other morph)? If not, no action needed. If it could, you must write the methods veryDeepFixupWith: and veryDeepInner:, and in them, refrain from sending veryDeepCopyWith: to the contents of field X. ----- Things Ted is still considering ----- Rule: If a morph stores a uniClass class (Player 57) as an object in a field, the new uniClass will not be stored there. Each uniClass instance does have a new class created for it. (fix this by putting the old class in references and allow lookup? Wrong if encounter it before seeing an instance?) Rule: If object A has object C in a field, and A says (^ C) for the copy, but object B has A in a normal field and it gets deepCopied, and A in encountered first, then there will be two copies of C. (just be aware of it) Dependents are now fixed up. Suppose a model has a dependent view. In the DependentFields dictionary, model -> (view ...). If only the model is copied, no dependents are created (no one knows about the new model). If only the view is copied, it is inserted into DependentFields on the right side. model -> (view copiedView ...). If both are copied, the new model has the new view as its dependent. If additional things depend on a model that is copied, the caller must add them to its dependents. ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'ClementBera 10/25/2013 13:15' prior: 51544315! browseObsoleteReferences "self new browseObsoleteReferences" | references | references := OrderedCollection new. (LookupKey allSubInstances select: [:x | (x value isBehavior and: ['AnOb*' match: x value name]) or: ['AnOb*' match: x value class name]]) do: [:x | references addAll: (self allReferencesTo: x)]. ^ self browseMessageList: references name: 'References to Obsolete Classes'! ! !SystemNavigation methodsFor: 'query' stamp: 'ClementBera 10/25/2013 13:16' prior: 51596909! obsoleteMethodReferences "SystemNavigation new obsoleteMethodReferences" "Open a browser on all referenced behaviors that are obsolete" | obsClasses references | references := Array new writeStream. obsClasses := self obsoleteBehaviors. 'Scanning for methods referencing obsolete classes' displayProgressFrom: 0 to: obsClasses size during: [ :bar | obsClasses keysAndValuesDo: [ :index :each | | obsRefs | bar current: index. obsRefs := each pointersToExcept: obsClasses. obsRefs do: [ :ref | "Figure out if it may be a global" (ref isVariableBinding and: [ref key isString "or Symbol"]) ifTrue: [(ref pointersTo) do: [:meth | meth isCompiledMethod ifTrue: [meth methodReference ifNotNil: [:mref | references nextPut: mref]]]]]]]. ^ references contents! ! !String methodsFor: 'converting' stamp: 'ClementBera 10/25/2013 13:13' prior: 51097608! subStrings: separators "Answer an array containing the substrings in the receiver separated by the elements of separators." | result sourceStream subStringStream | (separators isString or: [ separators allSatisfy: [ :element | element isCharacter ] ]) ifFalse: [ ^ self error: 'separators must be Characters.' ]. sourceStream := self readStream. result := OrderedCollection new. subStringStream := String new writeStream. [ sourceStream atEnd ] whileFalse: [ | char | char := sourceStream next. (separators includes: char) ifTrue: [ subStringStream isEmpty ifFalse: [ result add: subStringStream contents. subStringStream := String new writeStream ] ] ifFalse: [ subStringStream nextPut: char ] ]. subStringStream isEmpty ifFalse: [ result add: subStringStream contents ]. ^ result asArray! ! !DeepCopier commentStamp: 'stephane.ducasse 9/25/2008 17:47' prior: 75568388! DeepCopier does a veryDeepCopy. It is a complete tree copy using a dictionary. Any object that is in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy. See Object|veryDeepCopy which calls (self veryDeepCopyWith: aDeepCopier). When a tree of morphs points at a morph outside of itself, that morph should not be copied. Use our own kind of weak pointers for the 'potentially outside' morphs. Default is that any new class will have all of its fields deeply copied. If a field needs to be weakly copied, define veryDeepInner: and veryDeepFixupWith:. veryDeepInner: has the loop that actually copies the fields. If a class defines its own copy of veryDeepInner: (to leave some fields out), then veryDeepFixupWith: will be called on that object at the end. veryDeepInner: can compute an alternate object to put in a field. (Object veryDeepCopyWith: discovers which superclasses did not define veryDeepInner:, and very deeply copies the variables defined in those classes). To decide if a class needs veryDeepInner: and veryDeepFixupWith:, ask this about an instance: If I duplicate this object, does that mean that I also want to make duplicates of the things it holds onto? If yes, (i.e. a Paragraph does want a new copy of its Text) then do nothing. If no, (i.e. an undo command does not want to copy the objects it acts upon), then define veryDeepInner: and veryDeepFixupWith:. Here is an analysis for the specific case of a morph being held by another morph. Does field X contain a morph (or a Player whose costume is a morph)? If not, no action needed. Is the morph in field X already a submorph of the object? Is it down lower in the submorph tree? If so, no action needed. Could the morph in field X every appear on the screen (be a submorph of some other morph)? If not, no action needed. If it could, you must write the methods veryDeepFixupWith: and veryDeepInner:, and in them, refrain from sending veryDeepCopyWith: to the contents of field X. ----- Things Ted is still considering ----- Rule: If a morph stores a uniClass class (Player 57) as an object in a field, the new uniClass will not be stored there. Each uniClass instance does have a new class created for it. (fix this by putting the old class in references and allow lookup? Wrong if encounter it before seeing an instance?) Rule: If object A has object C in a field, and A says (^ C) for the copy, but object B has A in a normal field and it gets deepCopied, and A in encountered first, then there will be two copies of C. (just be aware of it) Dependents are now fixed up. Suppose a model has a dependent view. In the DependentFields dictionary, model -> (view ...). If only the model is copied, no dependents are created (no one knows about the new model). If only the view is copied, it is inserted into DependentFields on the right side. model -> (view copiedView ...). If both are copied, the new model has the new view as its dependent. If additional things depend on a model that is copied, the caller must add them to its dependents. ! !DeepCopier methodsFor: 'like fullCopy' stamp: 'MartinDias 10/25/2013 13:35' prior: 20606569! checkClass: aClass | meth | "Check that no indexes of instance vars have changed in certain classes. If you get an error in this method, an implementation of veryDeepCopyWith: needs to be updated. The idea is to catch a change while it is still in the system of the programmer who made it." self checkBasicClasses. "Unlikely, but important to catch when it does happen." "Every class that implements veryDeepInner: must copy all its inst vars. Danger is that a user will add a new instance variable and forget to copy it. So check that the last one is mentioned in the copy method." (aClass includesSelector: #veryDeepInner:) ifTrue: [ ((aClass compiledMethodAt: #veryDeepInner:) writesField: aClass instSize) ifFalse: [ aClass instSize > 0 ifTrue: [ self warnInstanceVariableNotCopiedIn: aClass selector: #veryDeepInner:]]]. (aClass includesSelector: #veryDeepCopyWith:) ifTrue: [ meth := aClass compiledMethodAt: #veryDeepCopyWith:. (meth size > 20) & (meth literals includes: #veryDeepCopyWith:) not ifTrue: [ (meth writesField: aClass instSize) ifFalse: [ self warnInstanceVariableNotCopiedIn: aClass selector: #veryDeepCopyWith:]]]. ! ! !DeepCopier methodsFor: 'like fullCopy' stamp: 'MartinDias 10/25/2013 13:35' prior: 20608705! checkVariables "Check that no indexes of instance vars have changed in certain classes. If you get an error in this method, an implementation of veryDeepCopyWith: needs to be updated. The idea is to catch a change while it is still in the system of the programmer who made it. DeepCopier new checkVariables " self checkBasicClasses. "Every class that implements veryDeepInner: must copy all its inst vars. Danger is that a user will add a new instance variable and forget to copy it. So check that the last one is mentioned in the copy method." (self systemNavigation allClassesImplementing: #veryDeepInner:) do: [:aClass | ((aClass compiledMethodAt: #veryDeepInner:) writesField: aClass instSize) ifFalse: [aClass instSize > 0 ifTrue: [self warnInstanceVariableNotCopiedIn: aClass selector: #veryDeepInner:]]]. (self systemNavigation allClassesImplementing: #veryDeepCopyWith:) do: [:aClass | | meth | meth := aClass compiledMethodAt: #veryDeepCopyWith:. meth size > 20 & (meth literals includes: #veryDeepCopyWith:) not ifTrue: [(meth writesField: aClass instSize) ifFalse: [self warnInstanceVariableNotCopiedIn: aClass selector: #veryDeepCopyWith:]]]! ! !DeepCopier methodsFor: 'like fullCopy' stamp: 'MartinDias 10/25/2013 13:36'! warnInstanceVariableNotCopiedIn: aClass selector: aSelector "Warn the user to update veryDeepCopyWith: or veryDeepInner:" self inform: ('An instance variable was added to to class ', aClass name, ',\and it is not copied in the method ', aSelector, '.\Please rewrite it to handle all instance variables.\See DeepCopier class comment.') withCRs. (Smalltalk respondsTo: #tools) ifTrue: [ Smalltalk tools browser fullOnClass: aClass selector: aSelector ]! ! DeepCopier removeSelector: #warnIverNotCopiedIn:sel:! DeepCopier removeSelector: #isItTimeToCheckVariables! DeepCopier removeSelector: #intervalForChecks! "Collections-Strings"! "Kernel"! "System-Support"! "Tools"! BaselineOfFileTree removeSelector: #baseline:! Smalltalk globals removeClassNamed: #BaselineOfFileTree! BaselineOfMetacello removeSelector: #testResourcePostLoadDoIt! BaselineOfMetacello removeSelector: #reprimeRegistryIssue197! BaselineOfMetacello removeSelector: #gemstone10beta311PostLoadDoIt! BaselineOfMetacello removeSelector: #baseline:! Smalltalk globals removeClassNamed: #BaselineOfMetacello! ----End fileIn----! ----QUIT----an Array(25 October 2013 1:48:39 pm) Pharo.image priorSource: 25223919! ----STARTUP----an Array(25 October 2013 1:53:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 1:53:23 pm) Pharo-30523.image priorSource: 25249299! ----STARTUP----an Array(25 October 2013 3:08:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/25/2013 15:06' prior: 75555874! commentForCurrentUpdate ^ '11938 A lot of empty Spec packages which should be deleted https://pharo.fogbugz.com/f/cases/11938 12003 UIManager small cleanup https://pharo.fogbugz.com/f/cases/12003 12006 RPackage/RPackageTag get out of sync on class rename https://pharo.fogbugz.com/f/cases/12006/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/25/2013 15:06'! script179 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.86.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz CodeImport-Tests-MarcusDenker.8.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.153.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Text-EstebanLorenzano.82.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-EstebanLorenzano.642.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.783.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-MarcusDenker.132.mcz Graphics-Files-MarcusDenker.44.mcz Graphics-Fonts-MarcusDenker.85.mcz Graphics-Primitives-StephaneDucasse.132.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1658.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.173.mcz Morphic-Core-MarcusDenker.11.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.585.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.278.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-MarcusDenker.965.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1339.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.24.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.21.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.11.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/25/2013 15:07'! update30524 "self new update30524" self withUpdateLog: '11938 A lot of empty Spec packages which should be deleted https://pharo.fogbugz.com/f/cases/11938 12003 UIManager small cleanup https://pharo.fogbugz.com/f/cases/12003 12006 RPackage/RPackageTag get out of sync on class rename https://pharo.fogbugz.com/f/cases/12006/'. self loadTogether: self script179 merge: false. ScriptLoader new deletePackage: 'CodeImport-Tests'. ScriptLoader new deletePackage: 'Collections-Text'. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'updating' stamp: 'ThierryGoubier 10/25/2013 14:02' prior: 31819279! updateDefinedClassNamed: oldString withNewName: newString "this method should only be used with class names , and not metaclass names" (oldString substrings size > 1 or: [ newString substrings size > 1 ]) ifTrue: [ Error signal: 'You should not use metaclass names' ]. "=> update the 'classDefinedSelectors' dictionary (replace the old key by the new one) => update the 'metaclassDefinedSelectors' dictionary (replace the old key by the new one)" classes remove: oldString. classes add: newString. "Don't forget that class tags also register the classes names." self classTags do: [ :aTag | aTag updateDefinedClassNamed: oldString withNewName: newString ]. self flag: #cyrille. "what happens if this is a metaclass: it breaks the invariant of the package" "worse so far the second block below breaks" "the name of the method should be updateDefinedClassNamed: withNewName:" "CD: i only use this method when a class is renamed in the system (systemClassRenamedActionFrom:). Normally we are not able to rename a metaclass in the system (?) so we should never end up in a case with metaclass names ? " (classDefinedSelectors at: oldString ifAbsent: [ nil ]) ifNotNil: [ classDefinedSelectors at: newString put: (classDefinedSelectors at: oldString). classDefinedSelectors removeKey: oldString ifAbsent: [ self reportBogusBehaviorOf: #updateDefinedClassNamed:withNewName: ] ]. (metaclassDefinedSelectors at: oldString ifAbsent: [ nil ]) ifNotNil: [ metaclassDefinedSelectors at: newString put: (metaclassDefinedSelectors at: oldString). metaclassDefinedSelectors removeKey: oldString ifAbsent: [ self reportBogusBehaviorOf: #updateDefinedClassNamed:withNewName: ] ]! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'ThierryGoubier 10/25/2013 13:45' prior: 31974431! systemClassRenamedActionFrom: ann "When a class is renamed, we update its package as well as the organizer" | newName oldName class rPackage extendingRPackages packageName | class := ann classAffected. packageName := ann category. oldName := ann oldName. newName := ann newName. rPackage := self packageOfClassNamed: oldName. extendingRPackages := self extendingPackagesOfClassNamed: oldName. rPackage updateDefinedClassNamed: oldName withNewName: newName. "we have to update all RPackages extending this class" extendingRPackages do: [:aRPackage | aRPackage updateExtensionForClassNamed: oldName withNewName: newName]. "we have to update the RPackageOrganizer. update the 'classPackageDictionary' to replace the key with the new class name" self unregisterPackage: rPackage forClassName: oldName. self registerPackage: rPackage forClassName: newName. "update the 'classExtendingPackagesMapping' to replace the key with the new class name" extendingRPackages do: [:aRPackage | self unregisterExtendingPackage: aRPackage forClassName: oldName. self registerExtendingPackage: aRPackage forClassName: newName ]. self flag: #cyrille. "we will see that." "maybe we should remove also the key from the extendedPackages dictionary" "CD: This is what are doing the lines above I think" ! ! !RPackageTag methodsFor: 'updating' stamp: 'ThierryGoubier 10/25/2013 13:58'! updateDefinedClassNamed: oldString withNewName: newString (self hasClassNamed: oldString) ifTrue: [ self removeClassNamed: oldString. self addClassNamed: newString ]! ! !CommandLineUIManager class methodsFor: 'settings' stamp: 'CamilloBruni 2/13/2012 21:27' prior: 19760322! uiSettingsOn: aBuilder (aBuilder group: #nonInteractive) label: 'Headless mode'; with: [ (aBuilder setting: #snapshotErrorImage) label: 'Make a snapshot of new version before quit' translated; target: CommandLineUIManager; description: 'On unhandled exception, save a new version of image before quit' translated]! ! !DummySystemProgressItem methodsFor: 'reflective operations' stamp: 'SeanDeNigris 6/11/2012 11:17' prior: 21025845! doesNotUnderstand: aMessage! ! !DummyUIManager methodsFor: 'ui requests' stamp: 'StephaneDucasse 9/7/2011 21:21' prior: 21026682! multiLineRequest: queryString initialAnswer: defaultAnswer answerHeight: answerHeight! ! !ErrorNonInteractive class methodsFor: 'signalling' stamp: 'IgorStasenko 1/24/2011 10:34' prior: 21245765! signalForException: anError ^ self new exception: anError; signal! ! DummyUIManager removeSelector: #progressInitiationExceptionDefaultAction:! CommandLineUIManager removeSelector: #progressInitiationExceptionDefaultAction:! "RPackage-Core"! "RPackage-SystemIntegration"! "UIManager"! ----End fileIn----! ----QUIT----an Array(25 October 2013 3:08:40 pm) Pharo.image priorSource: 25249504! ----STARTUP----an Array(25 October 2013 3:13:27 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 3:13:27 pm) Pharo-30524.image priorSource: 25266084! ----STARTUP----an Array(25 October 2013 7:27:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 10/25/2013 19:18' prior: 75581459! commentForCurrentUpdate ^ '- Issue: 12009 BitBlt current -> BitBlt https://pharo.fogbugz.com/f/cases/12009/BitBlt-current-BitBlt - Issue: 12013: Zinc Character Encoding and Resource Meta update https://pharo.fogbugz.com/f/cases/12013/ - Issue: 12014 Extract History from Nautilus-History https://pharo.fogbugz.com/f/cases/12014/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 10/25/2013 19:21'! script180 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-StephaneDucasse.46.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1658.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.586.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.278.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.121.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-StephaneDucasse.14.mcz System-Support-StephaneDucasse.966.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1339.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 10/25/2013 19:21'! update30525 "self new update30525" self withUpdateLog: '- Issue: 12009 BitBlt current -> BitBlt https://pharo.fogbugz.com/f/cases/12009/BitBlt-current-BitBlt - Issue: 12013: Zinc Character Encoding and Resource Meta update https://pharo.fogbugz.com/f/cases/12013/ - Issue: 12014 Extract History from Nautilus-History https://pharo.fogbugz.com/f/cases/12014/'. self loadTogether: self script180 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HistoryCollection commentStamp: 'BenjaminVanRyseghem 3/17/2011 13:41' prior: 42337527! I'm a data structure used to store an history. My behavior is - I store Associations (anElement -> anInteger), where anElement is the element to store and anInteger the number of times it has been added. (as a Dictionary) - I only store once each element (as a Set). - I have a max size. If I add an element and have reached the max size, I remove the less seen element. - I store element in the chronological order (as an OrderedCollection)! !NavigationHistory commentStamp: '' prior: 42504243! I act as a web browser history! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 10/24/2013 09:57'! encodePercent: string encoding: encoding ^ self encodePercent: string safeSet: #rfc3986SafeSet encoding: 'utf-8'! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 10/24/2013 09:57'! encodePercent: string safeSet: safeSet encoding: encoding ^ ZnPercentEncoder new characterEncoder: (ZnCharacterEncoder newForEncoding: encoding); safeSet: (self perform: safeSet); encode: string! ! !ZnResourceMetaUtils class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:22'! querySafeSet ^ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!!$&''()*+,;=:@/?'! ! !ZnResourceMetaUtils class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/24/2013 09:39'! rfc3986SafeSet ^ ZnPercentEncoder rfc3986UnreservedCharacters ! ! !ZnResourceMetaUtils class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:22'! urlPathSafeSet ^ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!!$&''()*+,;=:@'! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 10/24/2013 09:59' prior: 55635331! writeQueryFields: dictionary withTextEncoding: encoding on: stream | first | first := true. dictionary keysAndValuesDo: [ :key :value | first ifFalse: [ stream nextPut: $& ]. first := false. stream nextPutAll: (self encodePercent: key safeSet: #querySafeSet encoding: encoding). value ifNotNil: [ stream nextPut: $=; nextPutAll: (self encodePercent: value safeSet: #querySafeSet encoding: encoding) ] ]! ! !SystemNavigation methodsFor: 'private' stamp: 'StephaneDucasse 10/25/2013 10:04' prior: 51600292! createMethodNamed: aSelector realParent: class ^ (RGMethodDefinition realClass: class selector: aSelector) package: (RGPackage named: class package name asSymbol); yourself .! ! !StrikeFont methodsFor: 'emphasis' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 50944722! bonk: glyphForm with: bonkForm "Bonking means to run through the glyphs clearing out black pixels between characters to prevent them from straying into an adjacent character as a result of, eg, bolding or italicizing" "Uses the bonkForm to erase at every character boundary in glyphs." | bb offset x | offset := bonkForm offset x. bb := BitBlt toForm: glyphForm. bb sourceForm: bonkForm; sourceRect: bonkForm boundingBox; combinationRule: Form erase; destY: 0. x := self xTable. (x isMemberOf: SparseLargeTable) ifTrue: [ x base to: x size - 1 do: [ :i | bb destX: (x at: i) + offset; copyBits ] ] ifFalse: [ 1 to: x size - 1 do: [ :i | bb destX: (x at: i) + offset; copyBits ] ]! ! !StrikeFont methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:19' prior: 50940842! displayLine: aString at: aPoint "Display the characters in aString, starting at position aPoint." self characters: (1 to: aString size) in: aString displayAt: aPoint clippedBy: Display boundingBox rule: Form over fillColor: nil kernDelta: 0 on: (BitBlt toForm: Display). ! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:24'! testComponentSpecifcEncoding "In a URL the safe set of percent encoding depends on where we are" | url | url := 'http://foo.com/bar@xx=2?yy=/#$1'. self assert: url asZnUrl printString equals: url! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/25/2013 14:51'! testMailto | url | url := 'mailto:sven@beta9.be?subject=test' asZnUrl. self assert: url scheme equals: #mailto. self assert: url mailToAddress equals: 'sven@beta9.be'. self assert: (url queryAt: 'subject') equals: 'test'! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:02' prior: 55770816! testQueryEncoding | url | url := 'http://www.google.com' asZnUrl. url addPathSegment: 'some encoding here'. url queryAt: 'and some encoding' put: 'here, too#'. self assert: url printString = 'http://www.google.com/some%20encoding%20here?and%20some%20encoding=here,%20too%23'. self assert: url path = 'some encoding here'. self assert: (url queryAt: 'and some encoding') = 'here, too#' ! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'StephaneDucasse 10/25/2013 16:17' prior: 28901560! copyPixelsGray: y "Handle non-interlaced grayscale color mode (colorType = 0)" | base bits bytesLeft word | bitsPerChannel = 16 ifTrue: [ "Warning: This is extremely slow. Besides we are downsampling to 8 bits!!" | blitter | blitter := BitBlt bitPokerToForm: form. 0 to: width - 1 do: [ :x | blitter pixelAt: x @ y put: 255 - (thisScanline at: x * 2 + 1) ]. ^self ]. "Just copy the bits" "This Smalltalk version might be easier to understand than the others below." base := y * (form width * bitsPerChannel + 31 // 32) + 1. bits := form bits. 0 to: thisScanline size // 4 - 1 do: [ :i | | ii | ii := i * 4. "This somewhat weird mixture of (#* and #+) with (#bitShift: and #bitOr:) is to make use of faster arithmetic bytecodes, but not of slow largeintegers." word := (((thisScanline at: ii + 1) * 256 + (thisScanline at: ii + 2) * 256 + (thisScanline at: ii + 3)) bitShift: 8) bitOr: (thisScanline at: ii + 4). bits at: base + i put: word ]. (bytesLeft := thisScanline size bitAnd: 3) = 0 ifFalse: [ word := 0. thisScanline size - bytesLeft + 1 to: thisScanline size do: [ :ii | word := word * 256 + (thisScanline at: ii) ]. word := word bitShift: 8 * (4 - bytesLeft). bits at: base + (thisScanline size // 4) put: word ]. "This interesting technique (By Andreas Raab) is faster for very large images, but might be slower for small ones" "^self copyPixelsGrayWeirdBitBltHack: y ". "It uses the following method: PNGReadWriter >> copyPixelsGrayWeirdBitBltHack: y ""Handle non-interlaced black and white color mode (colorType = 0) By Andreas Raab"" | source dest cmap | source := Form extent: 1 @ (thisScanline size // 4) depth: 32 bits: thisScanline. dest := Form extent: 1 @ (form bits size) depth: 32 bits: form bits. cmap := Smalltalk isLittleEndian ifTrue:[ColorMap shifts: #(-24 -8 8 24) masks: #(16rFF000000 16r00FF0000 16r0000FF00 16r000000FF)]. (BitBlt toForm: dest) sourceForm: source; destX: 0 destY: (y * form width*bitsPerChannel//32) width: 1 height: (form width+31*bitsPerChannel//32); colorMap: cmap; combinationRule: 3; copyBits." "This interesting technique (By Yoshiki Ohshima) is faster for very large images, but might be slower for small ones" "form bits copyFromByteArray2: thisScanline to: y * (form width* bitsPerChannel // 32)". "It uses the following method: BitMap >> copyFromByteArray2: byteArray to: i ""This method should work with either byte orderings"" | myHack byteHack | myHack := Form new hackBits: self. byteHack := Form new hackBits: byteArray. Smalltalk isLittleEndian ifTrue: [byteHack swapEndianness]. byteHack displayOn: myHack at: 0@i"! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 28904346! copyPixelsGray: y at: startX by: incX "Handle interlaced grayscale color mode (colorType = 0)" | offset bits blitter pixPerByte shifts b pixel mask pixelNumber | bitsPerChannel = 16 ifTrue: [ b := BitBlt bitPokerToForm: form. startX to: width - 1 by: incX do: [ :x | b pixelAt: x @ y put: 255 - (thisScanline at: (x // incX << 1) + 1) ]. ^ self ]. offset := y * rowSize + 1. bits := form bits. bitsPerChannel = 8 ifTrue: [ startX to: width - 1 by: incX do: [ :x | | w | w := offset + (x >> 2). b := (3 - (x \\ 4)) * 8. pixel := (thisScanline at: x // incX + 1) << b. mask := (255 << b) bitInvert32. bits at: w put: (((bits at: w) bitAnd: mask) bitOr: pixel) ]. ^ self ]. bitsPerChannel = 1 ifTrue: [ pixPerByte := 8. mask := 1. shifts := #(7 6 5 4 3 2 1 0 ) ]. bitsPerChannel = 2 ifTrue: [ pixPerByte := 4. mask := 3. shifts := #(6 4 2 0 ) ]. bitsPerChannel = 4 ifTrue: [ pixPerByte := 2. mask := 15. shifts := #(4 0 ) ]. blitter := BitBlt current bitPokerToForm: form. pixelNumber := 0. startX to: width - 1 by: incX do: [ :x | | rawByte | rawByte := thisScanline at: pixelNumber // pixPerByte + 1. pixel := rawByte >> (shifts at: pixelNumber \\ pixPerByte + 1) bitAnd: mask. blitter pixelAt: x @ y put: pixel. pixelNumber := pixelNumber + 1 ]! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 28905830! copyPixelsGrayAlpha: y "Handle non-interlaced grayscale with alpha color mode (colorType = 4)" | i pixel gray b | b := BitBlt bitPokerToForm: form. bitsPerChannel = 8 ifTrue: [ 0 to: width - 1 do: [ :x | i := (x << 1) + 1. gray := thisScanline at: i. pixel := ((thisScanline at: i + 1) << 24) + (gray << 16) + (gray << 8) + gray. b pixelAt: x @ y put: pixel ] ] ifFalse: [ 0 to: width - 1 do: [ :x | i := (x << 2) + 1. gray := thisScanline at: i. pixel := ((thisScanline at: i + 2) << 24) + (gray << 16) + (gray << 8) + gray. b pixelAt: x @ y put: pixel ] ]! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 28906586! copyPixelsGrayAlpha: y at: startX by: incX "Handle interlaced grayscale with alpha color mode (colorType = 4)" | i pixel gray b | b := BitBlt bitPokerToForm: form. bitsPerChannel = 8 ifTrue: [ startX to: width - 1 by: incX do: [ :x | i := (x // incX << 1) + 1. gray := thisScanline at: i. pixel := ((thisScanline at: i + 1) << 24) + (gray << 16) + (gray << 8) + gray. b pixelAt: x @ y put: pixel ] ] ifFalse: [ startX to: width - 1 by: incX do: [ :x | i := (x // incX << 2) + 1. gray := thisScanline at: i. pixel := ((thisScanline at: i + 2) << 24) + (gray << 16) + (gray << 8) + gray. b pixelAt: x @ y put: pixel ] ]! ! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 28908386! copyPixelsIndexed: y at: startX by: incX "Handle interlaced indexed color mode (colorType = 3)" | offset bits pixPerByte shifts blitter pixel mask pixelNumber | offset := y * rowSize + 1. bits := form bits. bitsPerChannel = 8 ifTrue: [ startX to: width - 1 by: incX do: [ :x | | w b | w := offset + (x >> 2). b := (3 - (x \\ 4)) * 8. pixel := (thisScanline at: x // incX + 1) << b. mask := (255 << b) bitInvert32. bits at: w put: (((bits at: w) bitAnd: mask) bitOr: pixel) ]. ^ self ]. bitsPerChannel = 1 ifTrue: [ pixPerByte := 8. mask := 1. shifts := #(7 6 5 4 3 2 1 0 ) ]. bitsPerChannel = 2 ifTrue: [ pixPerByte := 4. mask := 3. shifts := #(6 4 2 0 ) ]. bitsPerChannel = 4 ifTrue: [ pixPerByte := 2. mask := 15. shifts := #(4 0 ) ]. blitter := BitBlt bitPokerToForm: form. pixelNumber := 0. startX to: width - 1 by: incX do: [ :x | | rawByte | rawByte := thisScanline at: pixelNumber // pixPerByte + 1. pixel := rawByte >> (shifts at: pixelNumber \\ pixPerByte + 1) bitAnd: mask. blitter pixelAt: x @ y put: pixel. pixelNumber := pixelNumber + 1 ]! ! !ColorForm methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 19674194! copy: aRect "Return a new ColorForm containing the portion of the receiver delineated by aRect." | newForm | newForm := self class extent: aRect extent depth: depth. ((BitBlt destForm: newForm sourceForm: self fillColor: nil combinationRule: Form over destOrigin: 0@0 sourceOrigin: aRect origin extent: aRect extent clipRect: newForm boundingBox) colorMap: nil) copyBits. colors ifNotNil: [newForm colors: colors copy]. ^ newForm ! ! !ColorForm methodsFor: 'pixel accessing' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 19677576! pixelValueAt: aPoint "Return the raw pixel value at the given point. Typical clients use colorAt: to get a Color." "Details: To get the raw pixel value, be sure the peeker's colorMap is nil." ^ (BitBlt bitPeekerFromForm: self) colorMap: nil; pixelAt: aPoint ! ! !PolygonMorph methodsFor: 'private' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 49670281! computeArrowFormAt: endPoint from: priorPoint "Compute a triangle oriented along the line from priorPoint to endPoint. Then draw those lines in a form and return that form, with appropriate offset" | p1 pts box arrowForm bb origin | pts := self arrowBoundsAt: endPoint from: priorPoint. box := ((pts first rectangle: pts last) encompass: (pts second)) expandBy: 1. arrowForm := Form extent: box extent asIntegerPoint. bb := (BitBlt toForm: arrowForm) sourceForm: nil; fillColor: Color black; combinationRule: Form over; width: 1; height: 1. origin := box topLeft. p1 := pts last - origin. pts do: [:p | bb drawFrom: p1 to: p - origin. p1 := p - origin]. arrowForm convexShapeFill: Color black. ^arrowForm offset: box topLeft! ! !PolygonMorph methodsFor: 'private' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 73998845! filledForm "Note: The filled form is actually 2 pixels bigger than bounds, and the point corresponding to this morphs' position is at 1@1 in the form. This is due to the details of the fillig routines, at least one of which requires an extra 1-pixel margin around the outside. Computation of the filled form is done only on demand." | bb origin | closed ifFalse: [^ filledForm := nil]. filledForm ifNotNil: [^ filledForm]. filledForm := Form extent: bounds extent+2. "Draw the border..." bb := (BitBlt toForm: filledForm) sourceForm: nil; fillColor: Color black; combinationRule: Form over; width: 1; height: 1. origin := bounds topLeft asIntegerPoint-1. self lineSegmentsDo: [:p1 :p2 | bb drawFrom: p1 asIntegerPoint-origin to: p2 asIntegerPoint-origin]. "Fill it in..." filledForm convexShapeFill: Color black. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: ["If border is stored as a form, then erase any overlap now." filledForm copy: self borderForm boundingBox from: self borderForm to: 1@1 rule: Form erase]. ^ filledForm! ! !DisplayObject methodsFor: 'displaying-display' stamp: 'StephaneDucasse 10/25/2013 16:07' prior: 37210758! follow: locationBlock while: durationBlock bitsBehind: initialBitsBehind startingLoc: loc "Move an image around on the Display. Restore the background continuously without causing flashing. The argument, locationBlock, supplies each new location, and the argument, durationBlock, supplies true to continue or false to stop. This variant takes the bitsBehind as an input argument, and returns the final saved saved bits as method value." | location rect1 save1 save1Blt buffer bufferBlt newLoc rect2 bothRects | location := loc. rect1 := location extent: self extent. save1 := initialBitsBehind. save1Blt := BitBlt toForm: save1. buffer := Form extent: self extent*2 depth: Display depth. "Holds overlapping region" bufferBlt := BitBlt toForm: buffer. Display deferUpdates: true. self displayOn: Display at: location rule: Form paint. Display deferUpdates: false; forceToScreen: (location extent: self extent). [durationBlock value] whileTrue: [ newLoc := locationBlock value. newLoc ~= location ifTrue: [ rect2 := newLoc extent: self extent. bothRects := rect1 merge: rect2. (rect1 intersects: rect2) ifTrue: [ "when overlap, buffer background for both rectangles" bufferBlt copyFrom: bothRects in: Display to: 0@0. bufferBlt copyFrom: save1 boundingBox in: save1 to: rect1 origin - bothRects origin. "now buffer is clean background; get new bits for save1" save1Blt copy: (0@0 extent: self extent) from: rect2 origin - bothRects origin in: buffer. self displayOnPort: bufferBlt at: rect2 origin - bothRects origin rule: Form paint. Display deferUpdates: true. Display copy: bothRects from: 0@0 in: buffer rule: Form over. Display deferUpdates: false; forceToScreen: bothRects] ifFalse: [ "when no overlap, do the simple thing (both rects might be too big)" Display deferUpdates: true. Display copy: (location extent: save1 extent) from: 0@0 in: save1 rule: Form over. save1Blt copyFrom: rect2 in: Display to: 0@0. self displayOn: Display at: newLoc rule: Form paint. Display deferUpdates: false; forceToScreen: (location extent: save1 extent); forceToScreen: (newLoc extent: self extent)]. location := newLoc. rect1 := rect2]]. ^ save1 displayOn: Display at: location ! ! !ZnUrl methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/24/2013 09:56' prior: 55759635! encode: string on: stream stream nextPutAll: (ZnResourceMetaUtils encodePercent: string encoding: 'utf-8')! ! !ZnUrl methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/24/2013 10:09'! encodePath: string on: stream stream nextPutAll: (ZnResourceMetaUtils encodePercent: string safeSet: #urlPathSafeSet encoding: 'utf-8')! ! !ZnUrl methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/24/2013 10:07'! encodeQuery: string on: stream stream nextPutAll: (ZnResourceMetaUtils encodePercent: string safeSet: #querySafeSet encoding: 'utf-8')! ! !ZnUrl methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/25/2013 14:48'! mailToAddress "Assuming my scheme is #mailto, return the address." ^ self username, '@', self host ! ! !ZnUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:20' prior: 55752109! parseAuthority: string from: start to: stop | index | ((index := string indexOf: $@ startingAt: start) > 0 and: [ index < stop ]) ifTrue: [ self parseUserInfo: (ReadStream on: string from: start to: index - 1). self parseHostPort: (ReadStream on: string from: index + 1 to: stop) ] ifFalse: [ self parseHostPort: (ReadStream on: string from: start to: stop) ]! ! !ZnUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 14:41' prior: 55752682! parseFrom: string defaultScheme: defaultScheme | start end index | start := 1. end := string size. (index := string indexOf: $#) > 0 ifTrue: [ self fragment: (self decodePercent: (string copyFrom: index + 1 to: end)). end := index - 1 ]. (index := string indexOf: $?) > 0 ifTrue: [ self query: (ZnResourceMetaUtils parseQueryFrom: (ReadStream on: string from: index + 1 to: end)). end := index - 1 ]. (index := string indexOf: $:) > 0 ifTrue: [ self scheme: (string copyFrom: 1 to: index - 1). start := index + ((string indexOfSubCollection: '://') > 0 ifTrue: [ 3 ] ifFalse: [ 1 ]) ] ifFalse: [ defaultScheme ifNotNil: [ self scheme: defaultScheme ] ]. self hasScheme ifTrue: [ (index := string indexOf: $/ startingAt: start) > 0 ifTrue: [ self parseAuthority: string from: start to: index - 1. start := index ] ifFalse: [ ^ self parseAuthority: string from: start to: end ] ]. self parsePath: (ReadStream on: string from: start to: end)! ! !ZnUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 17:00' prior: 55753716! parseHostPort: stream | hostString portNumber | self isFile ifTrue: [ (hostString := stream upTo: $/) isEmpty ifFalse: [ self host: (self decodePercent: hostString) ] ] ifFalse: [ (hostString := stream upTo: $:) isEmpty ifFalse: [ self host: (self decodePercent: hostString) ]. stream atEnd ifFalse: [ portNumber := Integer readFrom: stream ifFail: [ ZnPortNotANumber signal ]. (portNumber between: 1 and: 65535) ifFalse: [ DomainError signalFrom: 1 to: 65535 ]. self port: portNumber ] ]! ! !ZnUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:08' prior: 35295782! printPathOn: stream self hasPath ifFalse: [ ^ stream nextPut: $/ ]. segments do: [ :each | stream nextPut: $/. each == #/ ifFalse: [ self encodePath: each on: stream ] ] ! ! !ZnUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/24/2013 10:08' prior: 55756395! printPathQueryFragmentOn: stream self printPathOn: stream. self hasQuery ifTrue: [ self printQueryOn: stream ]. self hasFragment ifFalse: [ ^ self ]. stream nextPut: $#. self encodeQuery: self fragment on: stream! ! !ZnUrl methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:05' prior: 55744072! scheme: anObject anObject isNil ifTrue: [ scheme := nil ] ifFalse: [ scheme := anObject asLowercase asSymbol ]! ! !InfiniteForm methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 23590750! displayOn: aDisplayMedium at: aDisplayPoint clippingBox: clipRectangle rule: ruleInteger fillColor: aForm "This is the real display message, but it doesn't get used until the new display protocol is installed." | targetBox patternBox bb | (patternForm isForm) ifFalse: [^ aDisplayMedium fill: clipRectangle rule: ruleInteger fillColor: patternForm]. "Do it iteratively" targetBox := aDisplayMedium boundingBox intersect: clipRectangle ifNone: [ ^ self ]. patternBox := patternForm boundingBox. bb := BitBlt destForm: aDisplayMedium sourceForm: patternForm fillColor: aForm combinationRule: ruleInteger destOrigin: 0@0 sourceOrigin: 0@0 extent: patternBox extent clipRect: clipRectangle. bb colorMap: (patternForm colormapIfNeededFor: aDisplayMedium). (targetBox left truncateTo: patternBox width) to: targetBox right - 1 by: patternBox width do: [:x | (targetBox top truncateTo: patternBox height) to: targetBox bottom - 1 by: patternBox height do: [:y | bb destOrigin: x@y; copyBits]]! ! !DisplayScreen methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 20912569! copyBits: rect from: sf at: destOrigin clippingBox: clipRect rule: cr fillColor: hf (BitBlt destForm: self sourceForm: sf fillColor: hf combinationRule: cr destOrigin: destOrigin sourceOrigin: rect origin extent: rect extent clipRect: (clipRect intersect: clippingBox ifNone: [ ^ self ])) copyBits! ! !DisplayScreen methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 20912977! copyBits: rect from: sf at: destOrigin clippingBox: clipRect rule: cr fillColor: hf map: map ((BitBlt destForm: self sourceForm: sf fillColor: hf combinationRule: cr destOrigin: destOrigin sourceOrigin: rect origin extent: rect extent clipRect: (clipRect intersect: clippingBox ifNone: [ ^ self ] )) colorMap: map) copyBits! ! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/23/2013 19:04'! testLegacy | oldMIMEType | oldMIMEType := [ MIMEType defaultText ] on: Deprecation do: [ :notification | notification resume ]. self assert: (oldMIMEType asZnMimeType matches: ZnMimeType textPlain)! ! !Form class methodsFor: 'instance creation' stamp: 'StephaneDucasse 10/25/2013 16:17' prior: 22548780! dotOfSize: diameter "Create a form which contains a round black dot." | radius form bb rect centerX centerY centerYBias centerXBias radiusSquared xOverY maxy dx | radius := diameter//2. form := self extent: diameter@diameter offset: (0@0) - (radius@radius). bb := (BitBlt toForm: form) sourceX: 0; sourceY: 0; combinationRule: Form over; fillColor: Color black. rect := form boundingBox. centerX := rect center x. centerY := rect center y. centerYBias := rect height odd ifTrue: [0] ifFalse: [1]. centerXBias := rect width odd ifTrue: [0] ifFalse: [1]. radiusSquared := (rect height asFloat / 2.0) squared - 0.01. xOverY := rect width asFloat / rect height asFloat. maxy := rect height - 1 // 2. "First do the inner fill, and collect x values" 0 to: maxy do: [:dy | dx := ((radiusSquared - (dy * dy) asFloat) sqrt * xOverY) truncated. bb destX: centerX - centerXBias - dx destY: centerY - centerYBias - dy width: dx + dx + centerXBias + 1 height: 1; copyBits. bb destY: centerY + dy; copyBits]. ^ form " Time millisecondsToRun: [1 to: 20 do: [:i | (Form dotOfSize: i) displayAt: (i*20)@(i*20)]] "! ! !Form methodsFor: 'converting' stamp: 'StephaneDucasse 10/25/2013 16:12' prior: 22478790! asFormOfDepth: d | newForm | d = self depth ifTrue:[^self]. newForm := Form extent: self extent depth: d. (BitBlt toForm: newForm) colorMap: (self colormapIfNeededFor: newForm); copy: (self boundingBox) from: 0@0 in: self fillColor: nil rule: Form over. "Special case: For a 16 -> 32 bit conversion fill the alpha channel because it gets lost in translation." (self depth = 16 and:[d= 32]) ifTrue:[newForm fillAlpha: 255]. ^newForm! ! !Form methodsFor: 'converting' stamp: 'StephaneDucasse 10/25/2013 16:12' prior: 22479309! asGrayScale "Assume the receiver is a grayscale image. Return a grayscale ColorForm computed by extracting the brightness levels of one color component. This technique allows a 32-bit Form to be converted to an 8-bit ColorForm to save space while retaining a full 255 levels of gray. (The usual colormapping technique quantizes to 8, 16, or 32 levels, which loses information.)" | f32 srcForm result map bb grays | self depth = 32 ifFalse: [ f32 := Form extent: width@height depth: 32. self displayOn: f32. ^ f32 asGrayScale]. self unhibernate. srcForm := Form extent: (width * 4)@height depth: 8. srcForm bits: bits. result := ColorForm extent: width@height depth: 8. map := Bitmap new: 256. 2 to: 256 do: [:i | map at: i put: i - 1]. map at: 1 put: 1. "map zero pixel values to near-black" bb := (BitBlt toForm: result) sourceForm: srcForm; combinationRule: Form over; colorMap: map. 0 to: width - 1 do: [:dstX | bb sourceRect: (((dstX * 4) + 2)@0 extent: 1@height); destOrigin: dstX@0; copyBits]. "final BitBlt to zero-out pixels that were truely transparent in the original" map := Bitmap new: 512. map at: 1 put: 16rFF. (BitBlt toForm: result) sourceForm: self; sourceRect: self boundingBox; destOrigin: 0@0; combinationRule: Form erase; colorMap: map; copyBits. grays := (0 to: 255) collect: [:brightness | Color gray: brightness asFloat / 255.0]. grays at: 1 put: Color transparent. result colors: grays. ^ result ! ! !Form methodsFor: 'bordering' stamp: 'StephaneDucasse 10/25/2013 16:12' prior: 22467509! border: rect width: borderWidth rule: rule fillColor: fillColor "Paint a border whose rectangular area is defined by rect. The width of the border of each side is borderWidth. Uses fillColor for drawing the border." | blt | blt := (BitBlt toForm: self) combinationRule: rule; fillColor: fillColor. blt sourceOrigin: 0@0. blt destOrigin: rect origin. blt width: rect width; height: borderWidth; copyBits. blt destY: rect corner y - borderWidth; copyBits. blt destY: rect origin y + borderWidth. blt height: rect height - borderWidth - borderWidth; width: borderWidth; copyBits. blt destX: rect corner x - borderWidth; copyBits! ! !Form methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22490183! copy: destRectangle from: sourcePt in: sourceForm rule: rule "Make up a BitBlt table and copy the bits." (BitBlt toForm: self) copy: destRectangle from: sourcePt in: sourceForm fillColor: nil rule: rule! ! !Form methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22487795! copyBits: sourceForm at: destOrigin translucent: factor "Make up a BitBlt table and copy the bits with the given colorMap." (BitBlt destForm: self sourceForm: sourceForm halftoneForm: nil combinationRule: 30 destOrigin: destOrigin sourceOrigin: 0@0 extent: sourceForm extent clipRect: self boundingBox) copyBitsTranslucent: ((0 max: (factor*255.0) asInteger) min: 255) " | f f2 f3 | f := Form fromUser. f2 := Form fromDisplay: (0@0 extent: f extent). f3 := f2 deepCopy. 0.0 to: 1.0 by: 1.0/32 do: [:t | f3 := f2 deepCopy. f3 copyBits: f at: 0@0 translucent: t. f3 displayAt: 0@0. (Delay forMilliseconds: 100) wait]. "! ! !Form methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22488506! copyBits: sourceRect from: sourceForm at: destOrigin clippingBox: clipRect rule: rule fillColor: aForm "Make up a BitBlt table and copy the bits." (BitBlt destForm: self sourceForm: sourceForm fillColor: aForm combinationRule: rule destOrigin: destOrigin sourceOrigin: sourceRect origin extent: sourceRect extent clipRect: clipRect) copyBits! ! !Form methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22488938! copyBits: sourceRect from: sourceForm at: destOrigin clippingBox: clipRect rule: rule fillColor: aForm map: map "Make up a BitBlt table and copy the bits. Use a colorMap." ((BitBlt destForm: self sourceForm: sourceForm fillColor: aForm combinationRule: rule destOrigin: destOrigin sourceOrigin: sourceRect origin extent: sourceRect extent clipRect: clipRect) colorMap: map) copyBits! ! !Form methodsFor: 'copying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22489411! copyBits: sourceRect from: sourceForm at: destOrigin colorMap: map "Make up a BitBlt table and copy the bits with the given colorMap." ((BitBlt destForm: self sourceForm: sourceForm halftoneForm: nil combinationRule: Form over destOrigin: destOrigin sourceOrigin: sourceRect origin extent: sourceRect extent clipRect: self boundingBox) colorMap: map) copyBits! ! !Form methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22492530! drawLine: sourceForm from: beginPoint to: endPoint clippingBox: clipRect rule: anInteger fillColor: aForm "Refer to the comment in DisplayMedium|drawLine:from:to:clippingBox:rule:mask:." | dotSetter | "set up an instance of BitBlt for display" dotSetter := BitBlt destForm: self sourceForm: sourceForm fillColor: aForm combinationRule: anInteger destOrigin: beginPoint sourceOrigin: 0 @ 0 extent: sourceForm extent clipRect: clipRect. dotSetter drawFrom: beginPoint to: endPoint! ! !Form methodsFor: 'filling' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22503865! eraseShape: bwForm "use bwForm as a mask to clear all pixels where bwForm has 1's" ((BitBlt destForm: self sourceForm: bwForm fillColor: nil combinationRule: Form erase1bitShape "Cut a hole in the picture with my mask" destOrigin: bwForm offset sourceOrigin: 0@0 extent: self extent clipRect: self boundingBox) colorMap: (Bitmap with: 0 with: 16rFFFFFFFF)) copyBits. ! ! !Form methodsFor: 'filling' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22505950! fill: aRectangle rule: anInteger fillColor: aForm "Replace a rectangular area of the receiver with the pattern described by aForm according to the rule anInteger." (BitBlt toForm: self) copy: aRectangle from: 0@0 in: nil fillColor: aForm rule: anInteger! ! !Form methodsFor: 'filling' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22504784! fillFromXYColorBlock: colorBlock "General Gradient Fill. Supply relative x and y in [0.0 ... 1.0] to colorBlock, and paint each pixel with the color that comes back" | poker yRel xRel | poker := BitBlt bitPokerToForm: self. 0 to: height-1 do: [:y | yRel := y asFloat / (height-1) asFloat. 0 to: width-1 do: [:x | xRel := x asFloat / (width-1) asFloat. poker pixelAt: x@y put: ((colorBlock value: xRel value: yRel) pixelWordForDepth: self depth)]] " | d | ((Form extent: 100@20 depth: Display depth) fillFromXYColorBlock: [:x :y | d := 1.0 - (x - 0.5) abs - (y - 0.5) abs. Color r: d g: 0 b: 1.0-d]) display "! ! !Form methodsFor: 'filling' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 67702528! findShapeAroundSeedBlock: seedBlock "Build a shape that is black in any region marked by seedBlock. SeedBlock will be supplied a form, in which to blacken various pixels as 'seeds'. Then the seeds are smeared until there is no change in the smear when it fills the region, ie, when smearing hits a black border and thus goes no further." | smearForm previousSmear all count smearPort | self assert: [self depth > 1]. "Only meaningful for B/W forms." all := self boundingBox. smearForm := Form extent: self extent. smearPort := BitBlt toForm: smearForm. seedBlock value: smearForm. "Blacken seeds to be smeared" smearPort copyForm: self to: 0 @ 0 rule: Form erase. "Clear any in black" previousSmear := smearForm deepCopy. count := 1. [count = 10 and: "check for no change every 10 smears" [count := 1. previousSmear copy: all from: 0 @ 0 in: smearForm rule: Form reverse. previousSmear isAllWhite]] whileFalse: [smearPort copyForm: smearForm to: 1 @ 0 rule: Form under. smearPort copyForm: smearForm to: -1 @ 0 rule: Form under. "After horiz smear, trim around the region border" smearPort copyForm: self to: 0 @ 0 rule: Form erase. smearPort copyForm: smearForm to: 0 @ 1 rule: Form under. smearPort copyForm: smearForm to: 0 @ -1 rule: Form under. "After vert smear, trim around the region border" smearPort copyForm: self to: 0 @ 0 rule: Form erase. count := count+1. count = 9 ifTrue: "Save penultimate smear for comparison" [previousSmear copy: all from: 0 @ 0 in: smearForm rule: Form over]]. "Now paint the filled region in me with aHalftone" ^ smearForm! ! !Form methodsFor: 'color mapping' stamp: 'StephaneDucasse 10/25/2013 16:13' prior: 22474629! mapColor: oldColor to: newColor "Make all pixels of the given color in this Form to the given new color." "Warnings: This method modifies the receiver. It may lose some color accuracy on 32-bit Forms, since the transformation uses a color map with only 15-bit resolution." | map | map := (Color cachedColormapFrom: self depth to: self depth) copy. map at: (oldColor indexInMap: map) put: (newColor pixelWordForDepth: self depth). (BitBlt toForm: self) sourceForm: self; sourceOrigin: 0@0; combinationRule: Form over; destX: 0 destY: 0 width: width height: height; colorMap: map; copyBits. ! ! !Form methodsFor: 'color mapping' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22473702! mapColors: oldColorBitsCollection to: newColorBits "Make all pixels of the given color in this Form to the given new color." "Warnings: This method modifies the receiver. It may lose some color accuracy on 32-bit Forms, since the transformation uses a color map with only 15-bit resolution." | map | self depth < 16 ifTrue: [map := (Color cachedColormapFrom: self depth to: self depth) copy] ifFalse: [ "use maximum resolution color map" "source is 16-bit or 32-bit RGB; use colormap with 5 bits per color component" map := Color computeRGBColormapFor: self depth bitsPerColor: 5]. oldColorBitsCollection do:[ :oldColor | map at: oldColor put: newColorBits]. (BitBlt toForm: self) sourceForm: self; sourceOrigin: 0@0; combinationRule: Form over; destX: 0 destY: 0 width: width height: height; colorMap: map; copyBits. ! ! !Form methodsFor: 'displaying' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22493108! paintBits: sourceForm at: destOrigin translucent: factor "Make up a BitBlt table and copy the bits with the given colorMap." (BitBlt destForm: self sourceForm: sourceForm halftoneForm: nil combinationRule: 31 destOrigin: destOrigin sourceOrigin: 0@0 extent: sourceForm extent clipRect: self boundingBox) copyBitsTranslucent: ((0 max: (factor*255.0) asInteger) min: 255) " | f f2 f3 | f := Form fromUser. f replaceColor: f peripheralColor withColor: Color transparent. f2 := Form fromDisplay: (0@0 extent: f extent). f3 := f2 deepCopy. 0.0 to: 1.0 by: 1.0/32 do: [:t | f3 := f2 deepCopy. f3 paintBits: f at: 0@0 translucent: t. f3 displayAt: 0@0. (Delay forMilliseconds: 100) wait]. "! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22457633! pixelCompare: aRect with: otherForm at: otherLoc "Compare the selected bits of this form (those within aRect) against those in a similar rectangle of otherFrom. Return the sum of the absolute value of the differences of the color values of every pixel. Obviously, this is most useful for rgb (16- or 32-bit) pixels but, in the case of 8-bits or less, this will return the sum of the differing bits of the corresponding pixel values (somewhat less useful)" | pixPerWord temp | pixPerWord := 32//self depth. (aRect left\\pixPerWord = 0 and: [aRect right\\pixPerWord = 0]) ifTrue: ["If word-aligned, use on-the-fly difference" ^ (BitBlt toForm: self) copy: aRect from: otherLoc in: otherForm fillColor: nil rule: 32]. "Otherwise, combine in a word-sized form and then compute difference" temp := self copy: aRect. temp copy: aRect from: otherLoc in: otherForm rule: 21. ^ (BitBlt toForm: temp) copy: aRect from: otherLoc in: nil fillColor: (Bitmap with: 0) rule: 32 " Dumb example prints zero only when you move over the original rectangle... | f diff | f := Form fromUser. [Sensor anyButtonPressed] whileFalse: [diff := f pixelCompare: f boundingBox with: Display at: Sensor cursorPoint. diff printString , ' ' displayAt: 0@0] "! ! !Form methodsFor: 'pixel access' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22519443! pixelValueAt: aPoint "Return the raw pixel value at the given point. This pixel value depends on the receiver's depth. Typical clients use colorAt: to get a Color. " ^ (BitBlt bitPeekerFromForm: self) pixelAt: aPoint ! ! !Form methodsFor: 'pixel access' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22519740! pixelValueAt: aPoint put: pixelValue "Store the given raw pixel value at the given point. Typical clients use colorAt:put: to store a color. " (BitBlt bitPokerToForm: self) pixelAt: aPoint put: pixelValue. ! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22458978! primCountBits "Count the non-zero pixels of this form." self depth > 8 ifTrue: [^(self asFormOfDepth: 8) primCountBits]. ^ (BitBlt toForm: self) fillColor: (Bitmap with: 0); destRect: (0@0 extent: width@height); combinationRule: 32; copyBits! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22459304! rectangleEnclosingPixelsNotOfColor: aColor "Answer the smallest rectangle enclosing all the pixels of me that are different from the given color. Useful for extracting a foreground graphic from its background." | cm slice copyBlt countBlt top bottom newH left right | "map the specified color to 1 and all others to 0" cm := Bitmap new: (1 bitShift: (self depth min: 15)). cm primFill: 1. cm at: (aColor indexInMap: cm) put: 0. "build a 1-pixel high horizontal slice and BitBlts for counting pixels of interest" slice := Form extent: width@1 depth: 1. copyBlt := (BitBlt toForm: slice) sourceForm: self; combinationRule: Form over; destX: 0 destY: 0 width: width height: 1; colorMap: cm. countBlt := (BitBlt toForm: slice) fillColor: (Bitmap with: 0); destRect: (0@0 extent: slice extent); combinationRule: 32. "scan in from top and bottom" top := (0 to: height) detect: [:y | copyBlt sourceOrigin: 0@y; copyBits. countBlt copyBits > 0] ifNone: [^ 0@0 extent: 0@0]. bottom := (height - 1 to: top by: -1) detect: [:y | copyBlt sourceOrigin: 0@y; copyBits. countBlt copyBits > 0]. "build a 1-pixel wide vertical slice and BitBlts for counting pixels of interest" newH := bottom - top + 1. slice := Form extent: 1@newH depth: 1. copyBlt := (BitBlt current toForm: slice) sourceForm: self; combinationRule: Form over; destX: 0 destY: 0 width: 1 height: newH; colorMap: cm. countBlt := (BitBlt current toForm: slice) fillColor: (Bitmap with: 0); destRect: (0@0 extent: slice extent); combinationRule: 32. "scan in from left and right" left := (0 to: width) detect: [:x | copyBlt sourceOrigin: x@top; copyBits. countBlt copyBits > 0]. right := (width - 1 to: left by: -1) detect: [:x | copyBlt sourceOrigin: x@top; copyBits. countBlt copyBits > 0]. ^ left@top corner: (right + 1)@(bottom + 1) ! ! !Form methodsFor: 'image manipulation' stamp: 'StephaneDucasse 10/25/2013 16:14' prior: 22513263! replaceColor: oldColor withColor: newColor "Replace one color with another everywhere is this form" | cm newInd target ff | self depth = 32 ifTrue: [cm := (Color cachedColormapFrom: 16 to: 32) copy] ifFalse: [cm := Bitmap new: (1 bitShift: (self depth min: 15)). 1 to: cm size do: [:i | cm at: i put: i - 1]]. newInd := newColor pixelValueForDepth: self depth. cm at: (oldColor pixelValueForDepth: (self depth min: 16))+1 put: newInd. target := newColor isTransparent ifTrue: [ff := Form extent: self extent depth: depth. ff fillWithColor: newColor. ff] ifFalse: [self]. (BitBlt toForm: target) sourceForm: self; sourceOrigin: 0@0; combinationRule: Form paint; destX: 0 destY: 0 width: width height: height; colorMap: cm; copyBits. newColor = Color transparent ifTrue: [target displayOn: self].! ! !Form methodsFor: 'image manipulation' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 22514180! smear: dir distance: dist "Smear any black pixels in this form in the direction dir in Log N steps" | skew bb | bb := BitBlt destForm: self sourceForm: self fillColor: nil combinationRule: Form under destOrigin: 0@0 sourceOrigin: 0@0 extent: self extent clipRect: self boundingBox. skew := 1. [skew < dist] whileTrue: [bb destOrigin: dir*skew; copyBits. skew := skew+skew]! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 22462246! tallyPixelValuesInRect: destRect into: valueTable "Tally the selected pixels of this Form into valueTable, a Bitmap of depth 2^depth similar to a color map. Answer valueTable." (BitBlt toForm: self) sourceForm: self; "src must be given for color map ops" sourceOrigin: 0@0; tallyMap: valueTable; combinationRule: 33; destRect: destRect; copyBits. ^ valueTable " Move a little rectangle around the screen and print its tallies... | r tallies nonZero | Cursor blank showWhile: [ [Sensor anyButtonPressed] whileFalse: [r := Sensor cursorPoint extent: 10@10. Display border: (r expandBy: 2) width: 2 rule: Form reverse fillColor: nil. tallies := (Display copy: r) tallyPixelValues. nonZero := (1 to: tallies size) select: [:i | (tallies at: i) > 0] thenCollect: [:i | (tallies at: i) -> (i-1)]. nonZero printString , ' ' displayAt: 0@0. Display border: (r expandBy: 2) width: 2 rule: Form reverse fillColor: nil]] "! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 22463266! xTallyPixelValue: pv orNot: not "Return an array of the number of pixels with value pv by x-value. Note that if not is true, then this will tally those different from pv." | cm slice countBlt copyBlt | cm := self newColorMap. "Map all colors but pv to zero" not ifTrue: [cm atAllPut: 1]. "... or all but pv to one" cm at: pv+1 put: 1 - (cm at: pv+1). slice := Form extent: 1@height. copyBlt := (BitBlt destForm: slice sourceForm: self halftoneForm: nil combinationRule: Form over destOrigin: 0@0 sourceOrigin: 0@0 extent: 1 @ slice height clipRect: slice boundingBox) colorMap: cm. countBlt := (BitBlt toForm: slice) fillColor: (Bitmap with: 0); destRect: (0@0 extent: slice extent); combinationRule: 32. ^ (0 to: width-1) collect: [:x | copyBlt sourceOrigin: x@0; copyBits. countBlt copyBits]! ! !Form methodsFor: 'analyzing' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 22464181! yTallyPixelValue: pv orNot: not "Return an array of the number of pixels with value pv by y-value. Note that if not is true, then this will tally those different from pv." | cm slice copyBlt countBlt | cm := self newColorMap. "Map all colors but pv to zero" not ifTrue: [cm atAllPut: 1]. "... or all but pv to one" cm at: pv+1 put: 1 - (cm at: pv+1). slice := Form extent: width@1. copyBlt := (BitBlt destForm: slice sourceForm: self halftoneForm: nil combinationRule: Form over destOrigin: 0@0 sourceOrigin: 0@0 extent: slice width @ 1 clipRect: slice boundingBox) colorMap: cm. countBlt := (BitBlt toForm: slice) fillColor: (Bitmap with: 0); destRect: (0@0 extent: slice extent); combinationRule: 32. ^ (0 to: height-1) collect: [:y | copyBlt sourceOrigin: 0@y; copyBits. countBlt copyBits]! ! !PasteUpMorph methodsFor: 'world state' stamp: 'StephaneDucasse 10/25/2013 16:17' prior: 74578187! flashRects: rectangleList color: aColor "For testing. Flashes the given list of rectangles on the Display so you can watch incremental redisplay at work." "Details: Uses two reverses so that the display is restored to its original state. This is necessary when in deferred update mode." | blt | blt := (BitBlt toForm: Display) sourceForm: nil; sourceOrigin: 0@0; clipRect: self viewBox; combinationRule: Form reverse. rectangleList do: [:r | | screenRect | screenRect := r translateBy: self viewBox origin. blt destRect: screenRect; copyBits. Display forceToScreen: screenRect; forceDisplayUpdate. (Delay forMilliseconds: 15) wait. blt destRect: screenRect; copyBits. Display forceToScreen: screenRect; forceDisplayUpdate]. ! ! !ZnPercentEncoder class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/23/2013 18:55'! rfc3986UnreservedCharacters "Return the unreserved characters according to RFC 3986 section 2.3. This is the most narrow safe set to be used in a better safe than sorry approach." ^ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~'! ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 10/23/2013 18:57' prior: 35293316! encode: readStream to: writeStream | bytes buffer byte | buffer := (bytes := ByteArray new: 4) writeStream. self safeSet; characterEncoder. [ readStream atEnd ] whileFalse: [ buffer reset. characterEncoder nextPut: readStream next toStream: buffer. 1 to: buffer position do: [ :index | (safeSet includes: (byte := bytes at: index)) ifTrue: [ writeStream nextPut: byte asCharacter ] ifFalse: [ writeStream nextPut: $%. self writeHex: byte to: writeStream ] ] ]! ! !ZnPercentEncoder methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/23/2013 18:55' prior: 55610554! safeSet "Return the safe set of characters that I will not encode, as a byte array. If not set, I will default to the most commonly used safe set" ^ safeSet ifNil: [ safeSet := self class rfc3986UnreservedCharacters asByteArray ]! ! !ZnPercentEncoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 10/23/2013 18:56'! writeHex: integer to: stream integer printOn: stream base: 16 length: 2 padded: true! ! !FLBufferedWriteStream methodsFor: 'private' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 21464674! copyWordObjectToBuffer: aWordObject | blt | blt := (BitBlt toForm: (Form new hackBits: self buffer)) sourceForm: (Form new hackBits: aWordObject). blt combinationRule: Form over. "store" blt sourceX: 0; sourceY: 0; height: aWordObject byteSize // 4; width: 4. blt destX: 0; destY: position // 4 . blt copyBits. ! ! !DisplayMedium methodsFor: 'coloring' stamp: 'StephaneDucasse 10/25/2013 16:07' prior: 20897787! fillShape: aShapeForm fillColor: aColor at: location "Fill a region corresponding to 1 bits in aShapeForm with aColor" ((BitBlt destForm: self sourceForm: aShapeForm fillColor: aColor combinationRule: Form paint destOrigin: location + aShapeForm offset sourceOrigin: 0@0 extent: self extent clipRect: self boundingBox) colorMap: (Bitmap with: 0 with: 16rFFFFFFFF)) copyBits! ! !JPEGReadWriter methodsFor: 'public access' stamp: 'StephaneDucasse 10/25/2013 16:17' prior: 24059075! nextImageDitheredToDepth: depth | form xStep yStep x y bb | ditherMask := DitherMasks at: depth ifAbsent: [ self error: 'can only dither to display depths' ]. residuals := WordArray new: 3. sosSeen := false. self parseFirstMarker. [ sosSeen ] whileFalse: [ self parseNextMarker ]. form := Form extent: width @ height depth: depth. bb := BitBlt toForm: form. bb sourceForm: mcuImageBuffer. bb colorMap: (mcuImageBuffer colormapIfNeededFor: form). bb sourceRect: mcuImageBuffer boundingBox. bb combinationRule: Form over. xStep := mcuWidth * DCTSize. yStep := mcuHeight * DCTSize. y := 0. 1 to: mcuRowsInScan do: [ :row | x := 0. 1 to: mcusPerRow do: [ :col | self decodeMCU. self idctMCU. self colorConvertMCU. bb destX: x; destY: y; copyBits. x := x + xStep ]. y := y + yStep ]. ^ form! ! !PositionableStream methodsFor: '*Fuel' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 29844699! fuelNextWordsInto: aWordObject "This method is the same as nextWordsInto: but the restoreEndianness is only done if needed" | blt pos source byteSize | byteSize := aWordObject byteSize. "is the test on collection basicSize \\ 4 necessary?" ((self position bitAnd: 3) = 0 and: [ (collection basicSize bitAnd: 3) = 0]) ifTrue: [source := collection. pos := self position. self skip: byteSize] ifFalse: ["forced to copy it into a buffer" source := self next: byteSize. pos := 0]. "Now use BitBlt to copy the bytes to the bitmap." blt := (BitBlt toForm: (Form new hackBits: aWordObject)) sourceForm: (Form new hackBits: source). blt combinationRule: Form over. "store" blt sourceX: 0; sourceY: pos // 4; height: byteSize // 4; width: 4. blt destX: 0; destY: 0. blt copyBits. ^ aWordObject ! ! !PositionableStream methodsFor: 'accessing' stamp: 'StephaneDucasse 10/25/2013 16:18' prior: 29856374! nextWordsInto: aBitmap "Fill the word based buffer from my collection. Stored on stream as Big Endian. Optimized for speed. Read in BigEndian, then restoreEndianness." | blt pos source byteSize | collection class isBytes ifFalse: [^ self next: aBitmap size into: aBitmap startingAt: 1]. byteSize := aBitmap byteSize. "is the test on collection basicSize \\ 4 necessary?" ((self position bitAnd: 3) = 0 and: [ (collection basicSize bitAnd: 3) = 0]) ifTrue: [source := collection. pos := self position. self skip: byteSize] ifFalse: ["forced to copy it into a buffer" source := self next: byteSize. pos := 0]. "Now use BitBlt to copy the bytes to the bitmap." blt := (BitBlt toForm: (Form new hackBits: aBitmap)) sourceForm: (Form new hackBits: source). blt combinationRule: Form over. "store" blt sourceX: 0; sourceY: pos // 4; height: byteSize // 4; width: 4. blt destX: 0; destY: 0. blt copyBits. "And do whatever the bitmap needs to do to convert from big-endian order." aBitmap restoreEndianness. ^ aBitmap "May be WordArray, ColorArray, etc" ! ! !StrikeFontSet methodsFor: 'as yet unclassified' stamp: 'StephaneDucasse 10/25/2013 16:19' prior: 50997364! displayLine: aString at: aPoint "Display the characters in aString, starting at position aPoint." self characters: (1 to: aString size) in: aString displayAt: aPoint clippedBy: Display boundingBox rule: Form over fillColor: nil kernDelta: 0 on: (BitBlt toForm: Display). ! ! !FileStream methodsFor: '*zinc-resource-meta-core' stamp: 'SvenVanCaekenberghe 10/25/2013 16:48'! asZnUrl "Convert the receiver in a file:// ZnUrl" | fileUrl | fileUrl := ZnUrl new. fileUrl scheme: #file. self directory pathSegments do: [ :each | fileUrl addPathSegment: each ]. fileUrl addPathSegment: self localName. ^ fileUrl! ! !BitBlt class methodsFor: 'deprecated' stamp: 'StephaneDucasse 10/25/2013 16:20' prior: 18173398! current "Return the class currently to be used for BitBlt" "deprecated normally should be removed." ^self! ! !WarpBlt methodsFor: 'primitives' stamp: 'StephaneDucasse 10/25/2013 16:19' prior: 54745148! warpBitsSmoothing: n sourceMap: sourceMap | deltaP12 deltaP43 pA pB deltaPAB sp fixedPtOne picker poker pix nSteps | (sourceForm isForm and: [ "Check for compressed source, destination or halftone forms" sourceForm unhibernate ]) ifTrue: [ ^ self warpBitsSmoothing: n sourceMap: sourceMap ]. (destForm isForm and: [ destForm unhibernate ]) ifTrue: [ ^ self warpBitsSmoothing: n sourceMap: sourceMap ]. (halftoneForm isForm and: [ halftoneForm unhibernate ]) ifTrue: [ ^ self warpBitsSmoothing: n sourceMap: sourceMap ]. width < 1 | (height < 1) ifTrue: [ ^ self ]. fixedPtOne := 16384. "1.0 in fixed-pt representation" n > 1 ifTrue: [ (destForm depth < 16 and: [ colorMap == nil ]) ifTrue: [ "color map is required to smooth non-RGB dest" ^ self primitiveFailed ]. pix := Array new: n * n ]. nSteps := height - 1 max: 1. deltaP12 := (self deltaFrom: p1x to: p2x nSteps: nSteps) @ (self deltaFrom: p1y to: p2y nSteps: nSteps). pA := (self startFrom: p1x to: p2x offset: nSteps * deltaP12 x) @ (self startFrom: p1y to: p2y offset: nSteps * deltaP12 y). deltaP43 := (self deltaFrom: p4x to: p3x nSteps: nSteps) @ (self deltaFrom: p4y to: p3y nSteps: nSteps). pB := (self startFrom: p4x to: p3x offset: nSteps * deltaP43 x) @ (self startFrom: p4y to: p3y offset: nSteps * deltaP43 y). picker := BitBlt bitPeekerFromForm: sourceForm. poker := BitBlt bitPokerToForm: destForm. poker clipRect: self clipRect. nSteps := width - 1 max: 1. destY to: destY + height - 1 do: [ :y | deltaPAB := (self deltaFrom: pA x to: pB x nSteps: nSteps) @ (self deltaFrom: pA y to: pB y nSteps: nSteps). sp := (self startFrom: pA x to: pB x offset: nSteps * deltaPAB x) @ (self startFrom: pA y to: pB y offset: nSteps * deltaPAB x). destX to: destX + width - 1 do: [ :x | n = 1 ifTrue: [ poker pixelAt: x @ y put: (picker pixelAt: sp // fixedPtOne asPoint) ] ifFalse: [ 0 to: n - 1 do: [ :dx | 0 to: n - 1 do: [ :dy | pix at: dx * n + dy + 1 put: (picker pixelAt: (sp + (deltaPAB * dx // n) + (deltaP12 * dy // n)) // fixedPtOne asPoint) ] ]. poker pixelAt: x @ y put: (self mixPix: pix sourceMap: sourceMap destMap: colorMap) ]. sp := sp + deltaPAB ]. pA := pA + deltaP12. pB := pB + deltaP43 ]! ! !FormCanvas methodsFor: 'other' stamp: 'StephaneDucasse 10/25/2013 16:17' prior: 74538056! showAt: pt invalidRects: updateRects | blt | blt := (BitBlt toForm: Display) sourceForm: form; combinationRule: Form over. updateRects do: [:rect | blt sourceRect: rect; destOrigin: rect topLeft + pt; copyBits]! ! !GlyphForm methodsFor: 'converting' stamp: 'StephaneDucasse 10/25/2013 16:16' prior: 22882855! asFormOfDepth: d | newForm | d = self depth ifTrue:[^self]. newForm := self class extent: self extent depth: d. (BitBlt toForm: newForm) colorMap: (self colormapIfNeededFor: newForm); copy: (self boundingBox) from: 0@0 in: self fillColor: nil rule: Form over. newForm offset: offset; advance:advance; linearAdvance: linearAdvance. ^newForm! ! !HistoryCollection commentStamp: 'BenjaminVanRyseghem 3/17/2011 13:41' prior: 75609826! I'm a data structure used to store an history. My behavior is - I store Associations (anElement -> anInteger), where anElement is the element to store and anInteger the number of times it has been added. (as a Dictionary) - I only store once each element (as a Set). - I have a max size. If I add an element and have reached the max size, I remove the less seen element. - I store element in the chronological order (as an OrderedCollection)! !HistoryCollection class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 3/17/2011 13:47' prior: 23424778! maxSize: anInteger ^ self new maxSize: anInteger! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:37' prior: 23421705! add: anElement | count | count := 0. (self includes: anElement) ifTrue: [ | association | association := self remove: anElement. count := association value ]. self size = self maxSize ifTrue: [ self removeLast ]. ^ storage addFirst: (anElement -> (count+1))! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:43' prior: 23422072! at: anElement ^ storage detect: [:each | each key = anElement]! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/18/2011 15:33' prior: 23422229! elements ^ storage collect: [:each | each key ]! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:38' prior: 23422372! identityIncludes: anElement ^ storage anySatisfy: [:association | association key == anElement ]! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:37' prior: 23422563! includes: anElement ^ storage anySatisfy: [:association | association key = anElement ]! ! !HistoryCollection methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/17/2011 13:47' prior: 48991552! initialize super initialize. maxSize := 5. storage := OrderedCollection new: maxSize.! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 14:00' prior: 23422745! lessSeen | min | min := storage first. 2 to: storage size do: [:index || each | each := storage at: index. (each value < min value) ifTrue: [ min := each]]. ^ min key! ! !HistoryCollection methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/17/2011 13:31' prior: 23421457! maxSize ^ maxSize! ! !HistoryCollection methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/17/2011 13:32' prior: 23421570! maxSize: anInteger maxSize := anInteger! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 14:05' prior: 23423016! mostSeen | max | max := storage first. 2 to: storage size do: [:index || each | each := storage at: index. (each value > max value) ifTrue: [ max := each]]. ^ max key! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 9/14/2012 15:48' prior: 23423287! mostViewedElements ^ (storage copy sort: [:a :b | a value >= b value]) collect: [:each | each key ]! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 14:03' prior: 23423482! oldest ^ storage last key! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:49' prior: 23423602! remove: anElement | association | association := self at: anElement. ^ storage remove: association. ! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:54' prior: 23423800! removeLast " I remove the less seen one, in case of equality, I remove the latest one " | min reversedStorage | reversedStorage := storage reverse. min := reversedStorage first. 2 to: storage size do: [:index || each | each := reversedStorage at: index. (each value < min value) ifTrue: [ min := each ]]. storage remove: min! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 13:49' prior: 23424232! size ^ storage size! ! !HistoryCollection methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/17/2011 14:03' prior: 23424346! youngest ^ storage first key! ! !NavigationHistory commentStamp: '' prior: 75610339! I act as a web browser history! !NavigationHistory class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/13/2012 16:37' prior: 28336978! defaultMaxSize ^ 15! ! !NavigationHistory methodsFor: 'collection compatibility' stamp: 'BenjaminVanRyseghem 3/13/2012 16:13' prior: 28334125! add: anEntry self addEntry: anEntry! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:48' prior: 75232396! addEntry: anEntry self isPaused ifTrue: [ ^ self ]. self basicAdd: anEntry! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/11/2011 15:09' prior: 28334928! back index := ((index - 1) max: 0)! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:48' prior: 75232569! basicAdd: anEntry ( storage isEmpty not and: [ storage last = anEntry ] ) ifTrue: [ ^ self ]. anEntry = self current key ifTrue: [ ^ self ]. self checkSize. index := index +1. index > storage size ifTrue: [ storage addLast: (anEntry -> TimeStamp now)] ifFalse: [ storage := storage copyFrom: 1 to: index. storage at: index put: (anEntry -> TimeStamp now)]! ! !NavigationHistory methodsFor: 'private' stamp: 'BenjaminVanRyseghem 5/24/2011 13:42' prior: 28336658! checkSize [ storage size >= self maxSize ] whileTrue: [ storage removeFirst. index := index -1].! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/11/2011 16:11' prior: 28335057! current ^ storage at: index ifAbsent: [ nil -> nil ]! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/13/2012 04:03' prior: 28335204! entries ^ storage! ! !NavigationHistory methodsFor: 'testing' stamp: 'CamilloBruni 10/4/2012 11:17' prior: 28336313! hasNext ^ index < storage size! ! !NavigationHistory methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 5/12/2011 13:01' prior: 28336437! hasPrevious ^ index > 1! ! !NavigationHistory methodsFor: 'initialization' stamp: 'CamilloBruni 10/4/2012 11:29' prior: 48983356! initialize storage := OrderedCollection new. index := 0. paused := false.! ! !NavigationHistory methodsFor: 'testing' stamp: 'CamilloBruni 10/4/2012 11:30' prior: 28336547! isPaused ^ paused! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/11/2011 15:09' prior: 28335316! last ^ storage last! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/19/2011 11:05' prior: 28335430! maxSize ^ maxSize ifNil: [ maxSize := self class defaultMaxSize ].! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 4/14/2011 22:53' prior: 28335591! maxSize: anInteger maxSize := anInteger! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 5/12/2011 12:25' prior: 28335725! next index := ((index + 1) min: storage size). ^ storage at: index! ! !NavigationHistory methodsFor: 'protocol' stamp: 'CamilloBruni 10/4/2012 11:32' prior: 28335880! pauseDuring: aBlock | previousPausedValue | "Don't accept any new entries while executing aBlock" previousPausedValue := paused. paused := true. aBlock ensure: [ paused := previousPausedValue ]! ! !NavigationHistory methodsFor: 'protocol' stamp: 'CamilloBruni 9/20/2013 22:12' prior: 68611053! previous index := index-1 max: 1. ^ storage at: index! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 17:36' prior: 75233036! removeEntry: anEntry | toRemove | "we know that toRemove will always contains one element" toRemove := (storage select: [:e | e key == anEntry ]). toRemove ifEmpty: [ ^ self ]. toRemove := toRemove first. storage remove: toRemove. storage addLast: toRemove! ! !NavigationHistory methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 18:00' prior: 75233394! removeLastEntry self isPaused ifTrue: [ ^ self ]. storage ifEmpty: [ ^ self ]. storage remove: storage last. index := index -1! ! !NavigationHistory methodsFor: 'protocol' stamp: 'CamilloBruni 9/21/2013 00:42' prior: 68611194! replaceCurrentWith: anEntry "Change the current history item to the given object" storage at: index put: (anEntry -> TimeStamp now)! ! ZnResourceMetaUtils class removeSelector: #encodePercent:withEncoding:! "Collections-Streams"! "FreeType"! "Fuel"! "Graphics-Display Objects"! "Graphics-Files"! "Graphics-Fonts"! "Graphics-Primitives"! "History"! "Morphic-Base"! "Morphic-Core"! "Nautilus"! "System-Support"! "Zinc-Character-Encoding-Core"! "Zinc-Resource-Meta-Core"! "Zinc-Resource-Meta-Tests"! ----End fileIn----! ----QUIT----an Array(25 October 2013 7:27:47 pm) Pharo.image priorSource: 25266289! ----STARTUP----an Array(25 October 2013 7:32:19 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 7:32:19 pm) Pharo-30525.image priorSource: 25343008! ----STARTUP----an Array(25 October 2013 10:07:26 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----an Array(25 October 2013 10:07:29 pm) Pharo.image priorSource: 25343213! ----STARTUP----an Array(25 October 2013 10:12:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 10:12:06 pm) Pharo-30525.image priorSource: 25343429! ----STARTUP----an Array(25 October 2013 10:23:36 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/25/2013 21:57' prior: 75598247! commentForCurrentUpdate ^ '11521 Error with soundEnabled: https://pharo.fogbugz.com/f/cases/11521 12010 trivial cleanup in Nautilus https://pharo.fogbugz.com/f/cases/12010 11968 failing tests in RPackageReadOnlyCompleteSetupTest https://pharo.fogbugz.com/f/cases/11968/ '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/25/2013 21:57'! script181 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-StephaneDucasse.46.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1658.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.93.mcz NetworkTests-MarcusDenker.86.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.280.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.966.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-StephaneDucasse.14.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1339.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/25/2013 21:57'! update30526 "self new update30526" self withUpdateLog: '11521 Error with soundEnabled: https://pharo.fogbugz.com/f/cases/11521 12010 trivial cleanup in Nautilus https://pharo.fogbugz.com/f/cases/12010 11968 failing tests in RPackageReadOnlyCompleteSetupTest https://pharo.fogbugz.com/f/cases/11968/ '. self loadTogether: self script181 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus methodsFor: 'browser compatibility' stamp: 'MarcusDenker 10/24/2013 11:19' prior: 27960438! labelString ^ self ui ifNil: [ 'Nautilus' ] ifNotNil: [:theui | theui title ]! ! !SoundSystem methodsFor: 'accessing' stamp: 'YuriyTymchuk 10/25/2013 19:36'! soundEnabled: aBoolean ^ self class soundEnabled: aBoolean! ! !RPackage methodsFor: 'class tags' stamp: 'YuriyTymchuk 10/25/2013 17:15' prior: 74356414! classNamesForClassTag: aSymbol "Returns the classes tagged using aSymbol" ^ (self classTagNamed: aSymbol ifAbsent: [ ^ #() ]) classNames. ! ! !RPackageReadOnlyCompleteSetupTest methodsFor: 'test tag class' stamp: 'YuriyTymchuk 10/25/2013 17:19' prior: 32049751! testAddTag "self debug: #testAddTag" self assert: p1 classTags isEmpty. p1 addClassTag: #baz. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #baz ]). self assert: (p1 classTags size = 1). p1 addClassDefinitionName: #A1DefinedInP1 toClassTag: #foo. p1 addClassDefinitionName: #B1DefinedInP1 toClassTag: #foo. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #foo ]). self assert: (p1 classTags size = 2). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: ((p1 classesForClassTag: #foo) size = 2). p1 addClassTag: #foo. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #baz ]). self assert: (p1 classTags anySatisfy: [ :tag | tag name = #foo ]). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #A1DefinedInP1). self assert: (((p1 classesForClassTag: #foo) collect: #name) includes: #B1DefinedInP1). self assert: ((p1 classesForClassTag: #foo) size = 2).! ! !RPackageReadOnlyCompleteSetupTest methodsFor: 'test tag class' stamp: 'YuriyTymchuk 10/25/2013 17:20' prior: 32050841! testAddTagNames "self debug: #testAddTag" self assert: p1 classTags isEmpty. p1 addClassTag: #baz. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #baz ]). self assert: (p1 classTags size = 1). p1 addClassDefinitionName: #A1DefinedInP1 toClassTag: #foo. p1 addClassDefinitionName: #B1DefinedInP1 toClassTag: #foo. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #foo ]). self assert: (p1 classTags size = 2). self assert: ((p1 classNamesForClassTag: #foo) includes: #A1DefinedInP1). self assert: ((p1 classNamesForClassTag: #foo) includes: #B1DefinedInP1). self assert: ((p1 classNamesForClassTag: #foo) size = 2). p1 addClassTag: #foo. self assert: (p1 classTags anySatisfy: [ :tag | tag name = #baz ]). self assert: (p1 classTags anySatisfy: [ :tag | tag name = #foo ]). self assert: ((p1 classNamesForClassTag: #foo) includes: #A1DefinedInP1). self assert: ((p1 classNamesForClassTag: #foo) includes: #B1DefinedInP1). self assert: ((p1 classNamesForClassTag: #foo) size = 2).! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'MarcusDenker 10/24/2013 11:15' prior: 17347707! packageRenamed: anAnnouncement window isDisplayed ifFalse: [ ^ self ]. self showGroups ifFalse: [ self updatePackageView ]! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'MarcusDenker 10/24/2013 11:20' prior: 17347898! packageUnregistred: anAnnouncement | package | self showGroups ifTrue: [ ^ self ]. package := anAnnouncement package. self selectedPackage = package ifTrue: [ self selectedPackage: nil ]. packagesSelection at: package put: false. window isDisplayed ifFalse: [ ^ self ]. self updatePackageView! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 10/24/2013 11:15' prior: 17365973! rootsOf: aPackage | tmpList | tmpList := aPackage definedClasses. self browsedEnvironment isSystem ifFalse: [ tmpList := self model classes intersection: tmpList ]. ^ tmpList reject: [ :each | tmpList includes: each superclass ]! ! !AbstractNautilusUI methodsFor: 'private' stamp: 'MarcusDenker 10/24/2013 11:15' prior: 17366268! rootsOfGroup: aGroup | classes | self browsedEnvironment isSystem ifTrue: [ classes := aGroup elements ] ifFalse: [ classes := aGroup elements intersection: self model classes ]. ^ classes reject: [ :each | classes includes: each superclass ]! ! "Nautilus"! "RPackage-Core"! "RPackage-Tests"! "System-Sound"! ----End fileIn----! ----QUIT----an Array(25 October 2013 10:23:43 pm) Pharo.image priorSource: 25343636! ----STARTUP----an Array(25 October 2013 10:29:51 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(25 October 2013 10:29:51 pm) Pharo-30526.image priorSource: 25359667! ----STARTUP----an Array(26 October 2013 3:20:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/26/2013 15:16' prior: 75675593! commentForCurrentUpdate ^ '7024 There are three URL implementation: Url, Uri and ZnUrl https://pharo.fogbugz.com/f/cases/7024 12017 remove #includesKey: override in MethodDictionary https://pharo.fogbugz.com/f/cases/12017 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/26/2013 15:16'! script182 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.172.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.208.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-StephaneDucasse.46.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1659.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.95.mcz NetworkTests-MarcusDenker.88.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.280.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.101.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1341.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/26/2013 15:17'! update30527 "self new update30527" self withUpdateLog: '7024 There are three URL implementation: Url, Uri and ZnUrl https://pharo.fogbugz.com/f/cases/7024 12017 remove #includesKey: override in MethodDictionary https://pharo.fogbugz.com/f/cases/12017 '. self loadTogether: self script182 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Url commentStamp: '' prior: 42775190! I am deprecated and replaced by ZnUrl. A Uniform Resource Locator. It specifies the location of a document on the Internet. The base class is abstract; child classes break different types of URLs down in ways appropriate for that type.! !Path methodsFor: '*Network-Url' stamp: 'SvenVanCaekenberghe 10/25/2013 17:03' prior: 29241324! asUrl ^ self asZnUrl! ! !FileStream methodsFor: '*Network-Url' stamp: 'SvenVanCaekenberghe 10/25/2013 17:04' prior: 21988626! asUrl ^ self asZnUrl ! ! !String methodsFor: '*network-url' stamp: 'SvenVanCaekenberghe 10/25/2013 14:21' prior: 51043757! asUrl ^ self asZnUrl! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/25/2013 14:59' prior: 70062795! privateInitializeFromText: aString "Calculate host and path from a file URL in String format. Some malformed formats are allowed and interpreted by guessing." | schemeName pathString bare i | bare := aString trimBoth. schemeName := self class schemeNameForString: bare. (schemeName isNil or: [schemeName ~= self schemeName]) ifTrue: [ host := ''. pathString := bare] ifFalse: [ "First remove schemeName and colon" bare := bare copyFrom: (schemeName size + 2) to: bare size. "A proper file URL then has two slashes before host, A malformed URL is interpreted as using syntax file:." (bare beginsWith: '//') ifTrue: [i := bare indexOf: $/ startingAt: 3. i=0 ifTrue: [ host := bare copyFrom: 3 to: bare size. pathString := ''] ifFalse: [ host := bare copyFrom: 3 to: i-1. pathString := bare copyFrom: host size + 3 to: bare size]] ifFalse: [host := ''. pathString := bare]]. self initializeFromPathString: pathString ! ! !MethodFinder methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 10/25/2013 16:32' prior: 68239705! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl capitalized compressWithTable: contractTo: correctAgainst: encodeForHTTP initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable unescapePercents withInternetLineEndings withSqueakLineEndings withoutQuoting "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! !GenericUrl class methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:01' prior: 22881586! absoluteFromText: aString | schemeName locator | schemeName := self schemeNameForString: aString. schemeName ifNil: [ ^self schemeName: 'xnoscheme' locator: aString ]. locator := aString copyFrom: (schemeName size + 2) to: aString size. ^self schemeName: schemeName locator: locator! ! !GenericUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:00' prior: 22880400! privateInitializeFromText: aString schemeName := self class schemeNameForString: aString. locator := schemeName ifNil: [ aString ] ifNotNil: [ aString copyFrom: (schemeName size+2) to: aString size ].! ! !AbstractFileReference methodsFor: '*Network-Url' stamp: 'SvenVanCaekenberghe 10/25/2013 17:12' prior: 17185596! asUrl ^ self asZnUrl! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:35' prior: 54571861! testAbsoluteFILE url := 'file:/etc/passwd#foo' asUrl. self assert: url scheme = 'file'. self assert: url pathSegments first = 'etc'. self assert: url pathSegments size = 2. self assert: url fragment = 'foo'.! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:06' prior: 54572144! testAbsoluteFILE2 url := 'fILE:/foo/bar/zookie/?fakequery/#fragger' asUrl. self assert: url scheme = 'file'. self assert: url pathSegments first ='foo'. self assert: url fragment = 'fragger'.! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 17:11' prior: 54572470! testAbsoluteFILE3 "Just a few selected tests for FileUrl, not complete by any means." {'file:'. 'file:/'. 'file://'} do: [:s | url := s asUrl. self assert: (url asString = 'file:///'). self deny: url hasHost ]. url := 'file://localhost/dir/file.txt' asUrl. self assert: (url asString = 'file://localhost/dir/file.txt'). self assert: (url host = 'localhost'). url := 'file://localhost/dir/file.txt' asUrl. self assert: (url asString = 'file://localhost/dir/file.txt'). self assert: (url host = 'localhost'). self assert: url isAbsolute. url := 'file:///dir/file.txt' asUrl. self assert: (url asString = 'file:///dir/file.txt'). self deny: url hasHost! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:22' prior: 54574073! testAbsoluteHTTP url := 'hTTp://chaos.resnet.gatech.edu:8000/docs/java/index.html?A%20query%20#part' asUrl. self assert: url scheme = 'http'. self assert: url host = 'chaos.resnet.gatech.edu'. self assert: url firstPathSegment = 'docs'. self assert: url pathSegments size = 3. self assert: url queryKeys first = 'A query '. self assert: url fragment = 'part'.! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:32' prior: 49948023! testAbsolutePortErrorFix 'http://swikis.ddo.jp:8823/' asUrl. self should: ['http://swikis.ddo.jp:-1/' asUrl] raise: Error. self should: ['http://swikis.ddo.jp:65536/' asUrl] raise: Error. self should: ['http://swikis.ddo.jp:auau/' asUrl] raise: Error.! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:17' prior: 54574908! testAbsoluteTELNET url := 'telNet:chaos.resnet.gatech.edu#goo' asUrl. self assert: url scheme = 'telnet'. self assert: url host = 'chaos.resnet.gatech.edu'. self assert: url fragment = 'goo'. ! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:37' prior: 54575178! testCombineWithRelative #(#('http://www.rfc1149.net/' 'foo.html' 'http://www.rfc1149.net/foo.html') #('http://www.rfc1149.net/index.html' 'foo.html' 'http://www.rfc1149.net/foo.html') #('http://www.rfc1149.net/devel/' '../sam/' 'http://www.rfc1149.net/sam/') #('http://www.rfc1149.net/devel/index.html' '../sam/' 'http://www.rfc1149.net/sam/')) do: [:a | self assert: (a second asUrl inContextOf: a first asUrl) equals: a third asUrl]! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 18:50'! testNew [ super testNew ] on: Deprecation do: [ :notification | notification resume ]! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 16:12' prior: 54576655! testRelativeHTTP baseUrl := 'http://some.where/some/dir?query1#fragment1' asUrl. url := '../another/dir/?query2#fragment2' asUrl inContextOf: baseUrl. self assert: url asString equals: 'http://some.where/another/dir/?query2#fragment2'.! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 16:26' prior: 54576972! testUsernamePassword "basic case with a username+password specified" url := 'http://user:pword@someserver.blah:8000/root/index.html' asUrl. self should: [ url scheme = 'http' ]. self should: [ url host = 'someserver.blah' ]. self should: [ url port = 8000 ]. self should: [ url pathSegments first = 'root' ]. self should: [ url username = 'user' ]. self should: [ url password = 'pword' ]. "basic case for a relative url" baseUrl := 'http://anotherserver.blah:9999/somedir/someotherdir/stuff/' asUrl. url := 'http://user:pword@someserver.blah:8000/root/index.html' asUrl inContextOf: baseUrl. self should: [ url scheme = 'http' ]. self should: [ url host = 'someserver.blah' ]. self should: [ url port = 8000 ]. self should: [ url pathSegments first = 'root' ]. self should: [ url username = 'user' ]. self should: [ url password = 'pword' ]! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 16:24' prior: 54579642! testUsernamePasswordEncoded2 "Sometimes, weird usernames or passwords are necessary in applications, and, thus, we might receive them in a Url. The @ and the : ar the kind of critical ones." #( "('user' 'pword' 'host' port 'path')" ('Stéphane rst Pückler' 'leckerEis' 'cottbus.brandenburg' 80 'mein/Zuhause') ('Jeannde.d''Arc' 'jaiunesécret' 'orleans' 8080 'une/deux/trois') ('HaXor@roxor:fnac' 'my~Pa$§wert' 'cbase' 42 'do/not_try') ) do: [:urlParts | |theUrl| theUrl := ('http://{1}:{2}@{3}:{4}/{5}' format: { (urlParts at: 1) encodeForHTTP. (urlParts at: 2) encodeForHTTP. urlParts at: 3. urlParts at: 4. urlParts at: 5. }) asUrl. self assert: (theUrl scheme = 'http'). self assert: (theUrl username = (urlParts at: 1)). self assert: (theUrl password = (urlParts at: 2)). self assert: (theUrl host = (urlParts at: 3)). self assert: (theUrl port = (urlParts at: 4)). self assert: theUrl firstPathSegment = ((urlParts at: 5) copyUpTo: $/ )]! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/25/2013 15:15' prior: 54581046! testUsernamePasswordPrintingEncoded #('http://F%C3%BCrst%20P%C3%BCckler:leckerEis@cottbus.brandenburg:80/mein/Zuhause' 'http://Jeannde.d%27Arc:jaiunes%C3%A9cret@orleans:8080/une/deux/trois' 'http://HaXor%40roxor%3Afnac:my~Pa%24%C2%A7wert@cbase:42/do/not_try') do: [ :urlText | self assert: urlText equals: urlText asUrl asString ].! ! !FileUrlTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/25/2013 18:51'! testNew [ super testNew ] on: Deprecation do: [ :notification | notification resume ]! ! !HierarchicalUrlTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/25/2013 16:00' prior: 23414866! testAsString self assert: 'ftp://localhost/path/to/file?aQuery' asUrl asString = 'ftp://localhost/path/to/file?aQuery'.! ! !HierarchicalUrlTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/25/2013 18:50'! testNew [ super testNew ] on: Deprecation do: [ :notification | notification resume ]! ! !SmalltalkImage class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 10/25/2013 16:28' prior: 42870939! initializeShutDownList "SmalltalkImage initializeShutDownList" | oldList | oldList := ShutDownList. ShutDownList := OrderedCollection new. "These get processed from the bottom up..." #(#Delay #DisplayScreen #InputEventFetcher #Form #WorldMorph #StrikeFont #Color #SoundPlayer #Password) do: [ :clsName | Smalltalk globals at: clsName ifPresent: [ :cls | Smalltalk addToShutDownList: cls ] ]. oldList ifNotNil: [ oldList reverseDo: [ :className | Smalltalk globals at: className ifPresent: [ :theClass | Smalltalk addToShutDownList: theClass ] ] ]! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:00' prior: 23409174! privateInitializeFromText: aString | remainder ind specifiedSchemeName | remainder := aString. schemeName ifNil: [specifiedSchemeName := self class schemeNameForString: remainder. specifiedSchemeName ifNotNil: [schemeName := specifiedSchemeName. remainder := remainder copyFrom: schemeName size + 2 to: remainder size]. schemeName ifNil: ["assume HTTP" schemeName := 'http']]. "remove leading // if it's there" (remainder beginsWith: '//') ifTrue: [remainder := remainder copyFrom: 3 to: remainder size]. "get the query" ind := remainder indexOf: $?. ind > 0 ifTrue: [query := remainder copyFrom: ind + 1 to: remainder size. remainder := remainder copyFrom: 1 to: ind - 1]. "get the authority" ind := remainder indexOf: $/. ind > 0 ifTrue: [ind = 1 ifTrue: [authority := ''] ifFalse: [authority := remainder copyFrom: 1 to: ind - 1. remainder := remainder copyFrom: ind + 1 to: remainder size]] ifFalse: [authority := remainder. remainder := '']. "extract the username+password" (authority includes: $@) ifTrue: [username := authority copyUpTo: $@. authority := authority copyFrom: (authority indexOf: $@) + 1 to: authority size. (username includes: $:) ifTrue: [password := (username copyFrom: (username indexOf: $:) + 1 to: username size) unescapePercents. username := (username copyUpTo: $:) unescapePercents]]. "Extract the port" (authority includes: $:) ifTrue: [| lastColonIndex portString | lastColonIndex := authority findLast: [:c | c = $:]. portString := authority copyFrom: lastColonIndex + 1 to: authority size. portString isAllDigits ifTrue: [port := Integer readFromString: portString. (port > 65535) ifTrue: [self error: 'Invalid port number']. authority := authority copyFrom: 1 to: lastColonIndex - 1] ifFalse:[self error: 'Invalid port number']]. "get the path" path := self privateParsePath: remainder relativeTo: #() .! ! !Url commentStamp: '' prior: 75703136! I am deprecated and replaced by ZnUrl. A Uniform Resource Locator. It specifies the location of a document on the Internet. The base class is abstract; child classes break different types of URLs down in ways appropriate for that type.! !Url class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/25/2013 18:44'! new self deprecated: 'Url has been replaced with ZnUrl' on: '20131025' in: '3.0'. ^ super new! ! !Url methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 10/25/2013 16:36' prior: 54563874! asUrl ^ self asZnUrl! ! !Url methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:24' prior: 54565589! newFromRelativeText: aString "return a URL relative to the current one, given by aString. For instance, if self is 'http://host/dir/file', and aString is '/dir2/file2', then the return will be a Url for 'http://host/dir2/file2'" "if the scheme is the same, or not specified, then use the same class" | newSchemeName remainder fragmentStart newFragment newUrl bare | bare := aString trimBoth. newSchemeName := self class schemeNameForString: bare. (newSchemeName notNil and: [ newSchemeName ~= self schemeName ]) ifTrue: [ "different scheme -- start from scratch" ^self absoluteFromText: aString ]. remainder := bare. "remove the fragment, if any" fragmentStart := remainder indexOf: $#. fragmentStart > 0 ifTrue: [ newFragment := remainder copyFrom: fragmentStart+1 to: remainder size. remainder := remainder copyFrom: 1 to: fragmentStart-1]. "remove the scheme name" newSchemeName ifNotNil: [ remainder := remainder copyFrom: (newSchemeName size + 2) to: remainder size ]. "create and initialize the new url" newUrl := self class new privateInitializeFromText: remainder relativeTo: self. "set the fragment" newUrl privateFragment: newFragment. ^newUrl! ! FileUrlTest removeSelector: #testMatchingSchemesToSubclasses! String removeSelector: #asUrlRelativeTo:! GenericUrlTest removeSelector: #testAsString! Smalltalk globals removeClassNamed: #GenericUrlTest! UrlTest removeSelector: #testRelativeFILE! UrlTest removeSelector: #testFromFileNameOrUrlString! UrlTest removeSelector: #testAbsoluteBrowser! Url removeSelector: #asUrlRelativeTo:! Url class removeSelector: #absoluteFromFileNameOrUrlString:! MethodDictionary removeSelector: #includesKey:! Text removeSelector: #asUrlRelativeTo:! "Kernel"! "Network-Url"! "NetworkTests"! "System-Support"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(26 October 2013 3:20:44 pm) Pharo.image priorSource: 25359874! ----STARTUP----an Array(26 October 2013 3:25:42 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 October 2013 3:25:42 pm) Pharo-30527.image priorSource: 25398167! ----STARTUP----an Array(26 October 2013 5:17:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/26/2013 17:14' prior: 75691830! commentForCurrentUpdate ^ '12019 Optimize Dictionary>>#includesKey: https://pharo.fogbugz.com/f/cases/12019 12018 Gofer failing due to ZnUrl missing mcRepositoryAsUser:withPassword: https://pharo.fogbugz.com/f/cases/12018 11989 shouldnt:raise: Error from issue #11876 is too offensive https://pharo.fogbugz.com/f/cases/11989'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/26/2013 17:15'! script183 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.318.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-StephaneDucasse.46.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1659.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.875.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.95.mcz NetworkTests-MarcusDenker.88.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.111.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.280.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.236.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1341.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/26/2013 17:15'! update30528 "self new update30528" self withUpdateLog: '12019 Optimize Dictionary>>#includesKey: https://pharo.fogbugz.com/f/cases/12019 12018 Gofer failing due to ZnUrl missing mcRepositoryAsUser:withPassword: https://pharo.fogbugz.com/f/cases/12018 11989 shouldnt:raise: Error from issue #11876 is too offensive https://pharo.fogbugz.com/f/cases/11989'. self loadTogether: self script183 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TAssertable methodsFor: 'asserting' stamp: 'TorstenBergmann 10/24/2013 09:21' prior: 74314523! shouldnt: aBlock raise: anExceptionalEvent ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !TAssertable methodsFor: 'asserting' stamp: 'TorstenBergmann 10/24/2013 09:21' prior: 74314799! shouldnt: aBlock raise: anExceptionalEvent description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !TAssertable methodsFor: 'asserting' stamp: 'TorstenBergmann 10/24/2013 09:22' prior: 74315121! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !TAssertable methodsFor: 'asserting' stamp: 'TorstenBergmann 10/24/2013 09:22' prior: 74315521! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! !ZnUrl methodsFor: '*gofer-core-accessing' stamp: 'SvenVanCaekenberghe 10/26/2013 16:23'! mcRepositoryAsUser: usernameString withPassword: passwordString self isHttp | self isHttps ifTrue: [ ^ MCHttpRepository location: self asString user: usernameString password: passwordString ]. self isFile ifTrue: [ ^ MCDirectoryRepository new directory: self asFileReference ]. self scheme = #filetree ifTrue: [ ^ MCFileTreeRepository new directory: self asFileReference ]. self scheme = #ftp ifTrue: [ ^ MCFtpRepository host: (self hasPort ifTrue: [ self host, ':', self port asString ] ifFalse: [ self host ]) directory: self path "MCFtpRepository assumes NO prefixed / in the path" user: usernameString password: passwordString. ]. self error: ('No Monticello repository for URL scheme {1}' format: {(self scheme)})! ! !Dictionary methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/26/2013 12:24' prior: 20730456! includesKey: key "Answer whether the receiver has a key equal to the argument, key." ^ (array at: (self scanFor: key)) ~~ nil "We could use #notNil here, but ProtoObject doesn't understand it."! ! TAssertable removeSelector: #validateShouldntException:! !Trait method! shouldnt: aBlock raise: anExceptionalEvent ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionDoesNotInclude: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionNotContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! !Trait method! shouldnt: aBlock raise: anExceptionalEvent whoseDescriptionIncludes: subString description: aString ^self assert: (self executeShould: aBlock inScopeOf: anExceptionalEvent withDescriptionContaining: subString) not description: aString ! ! "Collections-Unordered"! "Gofer-Core"! "SUnit-Core"! ----End fileIn----! ----QUIT----an Array(26 October 2013 5:17:38 pm) Pharo.image priorSource: 25398372! ----STARTUP----an Array(26 October 2013 5:22:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(26 October 2013 5:22:12 pm) Pharo-30528.image priorSource: 25414376! ----STARTUP----an Array(27 October 2013 9:11:35 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/27/2013 09:07' prior: 75730327! commentForCurrentUpdate ^ '11673 No timestamp in MCMethodDefinition>>= https://pharo.fogbugz.com/f/cases/11673 12020 Optimize PNG reading for larger files https://pharo.fogbugz.com/f/cases/12020 11985 Code duplication for accessing as read-only the SourceFiles https://pharo.fogbugz.com/f/cases/11985'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/27/2013 09:08'! script184 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.320.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1659.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.878.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.95.mcz NetworkTests-MarcusDenker.88.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1342.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.29.mcz UpdateStreamer-Tests-MarcusDenker.2.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/27/2013 09:08'! update30529 "self new update30529" self withUpdateLog: '11673 No timestamp in MCMethodDefinition>>= https://pharo.fogbugz.com/f/cases/11673 12020 Optimize PNG reading for larger files https://pharo.fogbugz.com/f/cases/12020 11985 Code duplication for accessing as read-only the SourceFiles https://pharo.fogbugz.com/f/cases/11985'. self loadTogether: self script184 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PNGReadWriter commentStamp: '' prior: 42525099! I am a subclass of ImageReadWriter that decodes Portable Network Graphics (PNG) images. Submitted by Duane Maxwell! !ChangeSet class methodsFor: 'scanning' stamp: 'MartinDias 10/23/2013 18:20' prior: 39943069! scanVersionsOf: method class: class meta: meta category: cat selector: selector | position prevPos prevFileIndex preamble tokens stamp changeList file | changeList := OrderedCollection new. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-3) = #stamp: ifTrue:[ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos. ] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last. ]. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil] ]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue:[ (tokens at: tokens size-1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size. ] ]. changeList add: (ChangeRecord new file: file position: position type: #method class: class name category: cat meta: meta stamp: stamp). position := prevPos. prevPos notNil ifTrue:[file := sourceFilesCopy at: prevFileIndex]. ] ]. ^ changeList! ! !SourceFileArray methodsFor: 'accessing' stamp: 'MartinDias 10/23/2013 18:20'! readOnlyDo: aBlock | sourceFilesCopy | "get a read only copy of each file" sourceFilesCopy := self collect: [:aFile | aFile ifNotNil: [ aFile readOnlyCopy ] ]. [ aBlock value: sourceFilesCopy ] ensure: [ "close the files" sourceFilesCopy do: [ :aFile | aFile ifNotNil: [ aFile close ] ] ]! ! !RPackage methodsFor: 'system compatibility' stamp: 'MartinDias 10/23/2013 18:24' prior: 49395386! changeRecordForOverriddenMethod: aMethodReference | method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ]! ! !MCMethodDefinition class methodsFor: 'instance creation' stamp: 'ThierryGoubier 10/25/2013 15:06'! instanceLike: aDefinition "The cache is playing havoc with the equality between methods. Methods of the same code but with different timestamps are considered equal. This breaks havoc with some filetree testing code which looks at timestamps." | aMCMethodDefinition | aMCMethodDefinition := super instanceLike: aDefinition. ^ aMCMethodDefinition timeStamp ~= aDefinition timeStamp ifTrue: [ Instances add: aDefinition ] ifFalse: [ aMCMethodDefinition ]! ! !MCMethodDefinition methodsFor: 'comparing' stamp: 'ThierryGoubier 10/25/2013 14:57' prior: 24850224! = aDefinition ^ super = aDefinition and: [ aDefinition category = self category and: [ aDefinition source = self source ] ]! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'MartinDias 10/23/2013 18:22' prior: 46572959! scanForPreviousVersion | method position | method := self actualClass compiledMethodAt: selector ifAbsent: [ ^ nil ]. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | | file prevPos tokens preamble methodCategory stamp prevFileIndex | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [ tokens := preamble parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. methodCategory = category ifFalse: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: className category: methodCategory meta: classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ]! ! !VersionsBrowser methodsFor: 'init & update' stamp: 'MartinDias 10/23/2013 18:26' prior: 39937673! scanVersionsOf: method class: class meta: meta category: category selector: selector | position prevPos prevFileIndex preamble tokens stamp cat | selectorOfMethod := selector. currentCompiledMethod := method. classOfMethod := meta ifTrue: [class class] ifFalse: [class]. cat := category ifNil: ['']. changeList := OrderedCollection new. list := OrderedCollection new. self addedChangeRecord ifNotNil: [ :change | self addItem: change text: ('{1} (in {2})' translated format: { change stamp. change fileName }) ]. listIndex := 0. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | method fileIndex = 0 ifTrue: [^ nil]. file := sourceFilesCopy at: method fileIndex. [position notNil & file notNil] whileTrue: [file position: (0 max: position-150). "Skip back to before the preamble" preamble := method getPreambleFrom: file at: (0 max: position - 3). "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [tokens := preamble parseLiterals] ifFalse: [tokens := Array new "ie cant be back ref"]. ((tokens size between: 7 and: 8) and: [(tokens at: tokens size-5) = #methodsFor:]) ifTrue: [(tokens at: tokens size-3) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size-2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos] ifFalse: ["Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size-2. prevFileIndex := tokens last]. cat := tokens at: tokens size-4. (prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]]. ((tokens size between: 5 and: 6) and: [(tokens at: tokens size-3) = #methodsFor:]) ifTrue: [(tokens at: tokens size-1) = #stamp: ifTrue: ["New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size]. cat := tokens at: tokens size-2]. self addItem: (ChangeRecord new file: file position: position type: #method class: class name category: category meta: meta stamp: stamp) text: stamp , ' ' , class name , (meta ifTrue: [' class '] ifFalse: [' ']) , selector, ' {', cat, '}'. position := prevPos. prevPos notNil ifTrue: [file := sourceFilesCopy at: prevFileIndex ] ] ]. listSelections := Array new: list size withAll: false! ! !PackageInfo methodsFor: 'testing' stamp: 'MartinDias 10/23/2013 18:23' prior: 42021718! changeRecordForOverriddenMethod: aMethodReference | method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex = 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference theNonMetaClassName category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ]! ! !PNGReadWriter commentStamp: '' prior: 75758009! I am a subclass of ImageReadWriter that decodes Portable Network Graphics (PNG) images. Submitted by Duane Maxwell! !PNGReadWriter methodsFor: 'pixel copies' stamp: 'SvenVanCaekenberghe 10/26/2013 10:05' prior: 68705761! copyPixelsRGB: y "Handle non-interlaced RGB color mode (colorType = 2)" | i pixel tempForm tempBits | (transparentPixelValue isNil and: [ bitsPerChannel = 8 ]) ifTrue: [ "Do the same trick as in #copyPixelsRGBA:" | targetIndex | tempBits := ByteArray new: thisScanline size * 4 // 3 withAll: 16rFF. tempForm := Form extent: width@1 depth: 32 bits: tempBits. targetIndex := 1. 1 to: thisScanline size by: 3 do: [ :index | tempBits at: targetIndex put: (thisScanline at: index); at: targetIndex + 1 put: (thisScanline at: index + 1); at: targetIndex + 2 put: (thisScanline at: index + 2). targetIndex := targetIndex + 4 ]. cachedDecoderMap ifNil:[cachedDecoderMap := self rgbaDecoderMapForDepth: depth]. (BitBlt toForm: form) sourceForm: tempForm; destOrigin: 0@y; combinationRule: Form over; colorMap: cachedDecoderMap; copyBits. ^self ]. tempForm := Form extent: width @ 1 depth: 32. tempBits := tempForm bits. pixel := LargePositiveInteger new: 4. pixel at: 4 put: 255. i := 1. bitsPerChannel = 8 ifTrue: [ 1 to: width do: [ :x | pixel at: 3 put: (thisScanline at: i); at: 2 put: (thisScanline at: i + 1); at: 1 put: (thisScanline at: i + 2). tempBits at: x put: pixel. i := i + 3 ] ] ifFalse: [ 1 to: width do: [ :x | pixel at: 3 put: (thisScanline at: i); at: 2 put: (thisScanline at: i + 2); at: 1 put: (thisScanline at: i + 4). tempBits at: x put: pixel. i := i + 6 ] ]. transparentPixelValue ifNotNil: [ 1 to: width do: [ :x | (tempBits at: x) = transparentPixelValue ifTrue: [ tempBits at: x put: 0 ] ] ]. tempForm displayOn: form at: 0 @ y rule: Form paint! ! !PNGReadWriter methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/26/2013 10:08' prior: 28887010! nextImage bigEndian := Smalltalk isBigEndian. filtersSeen := Bag new. idatChunkStream := nil. transparentPixelValue := nil. unknownChunks := Set new. stream reset. stream binary. stream skip: 8. [stream atEnd] whileFalse: [self processNextChunk]. "Set up our form" palette ifNotNil: ["Dump the palette if it's the same as our standard palette" palette = (StandardColors copyFrom: 1 to: palette size) ifTrue: [palette := nil]]. (depth <= 8 and: [palette notNil]) ifTrue: [form := ColorForm extent: width @ height depth: depth. form colors: palette] ifFalse: [form := Form extent: width @ height depth: depth]. backColor ifNotNil: [form fillColor: backColor]. idatChunkStream ifNil: [ self error: 'image data is missing' ] ifNotNil: [ self processIDATChunk ]. unknownChunks isEmpty ifFalse: ["Transcript show: ' ',unknownChunks asSortedCollection asArray printString."]. self debugging ifTrue: [Transcript cr; show: 'form = ' , form printString. Transcript cr; show: 'colorType = ' , colorType printString. Transcript cr; show: 'interlaceMethod = ' , interlaceMethod printString. Transcript cr; show: 'filters = ' , filtersSeen sortedCounts asArray printString]. ^form! ! !PNGReadWriter methodsFor: 'chunks' stamp: 'SvenVanCaekenberghe 10/26/2013 10:09' prior: 28891398! processInterlaced | z filter bytesPerPass startingCol colIncrement rowIncrement startingRow cx sc temp | startingCol := #(0 4 0 2 0 1 0 ). colIncrement := #(8 8 4 4 2 2 1 ). rowIncrement := #(8 8 8 4 4 2 2 ). startingRow := #(0 0 4 0 2 0 1 ). z := ZLibReadStream on: idatChunkStream originalContents from: 1 to: idatChunkStream position. 1 to: 7 do: [ :pass | (self doPass: pass) ifTrue: [ cx := colIncrement at: pass. sc := startingCol at: pass. bytesPerPass := ((width - sc + cx - 1) // cx * bitsPerPixel + 7) // 8. prevScanline := ByteArray new: bytesPerPass. thisScanline := ByteArray new: bytesPerScanline. (startingRow at: pass) to: height - 1 by: (rowIncrement at: pass) do: [ :y | filter := z next. filtersSeen add: filter. (filter isNil or: [ (filter between: 0 and: 4) not ]) ifTrue: [ ^ self ]. thisScanline := z next: bytesPerPass into: thisScanline startingAt: 1. self filterScanline: filter count: bytesPerPass. self copyPixels: y at: sc by: cx. temp := prevScanline. prevScanline := thisScanline. thisScanline := temp ] ] ]. z atEnd ifFalse: [ self error: 'Unexpected data' ]! ! !PNGReadWriter methodsFor: 'chunks' stamp: 'SvenVanCaekenberghe 10/26/2013 10:11' prior: 28892721! processNextChunk | length chunkType crc chunkCrc | length := self nextLong. chunkType := (self next: 4) asString. (chunk isNil or: [ chunk size ~= length ]) ifTrue: [ chunk := self next: length ] ifFalse: [ stream next: length into: chunk startingAt: 1 ]. chunkCrc := self nextLong bitXor: 4294967295. crc := self updateCrc: 4294967295 from: 1 to: 4 in: chunkType. crc := self updateCrc: crc from: 1 to: length in: chunk. crc = chunkCrc ifFalse: [ self error: 'PNGReadWriter crc error in chunk ' , chunkType ]. chunkType = 'IEND' ifTrue: [ ^ self "*should* be the last chunk" ]. chunkType = 'sBIT' ifTrue: [ ^ self processSBITChunk "could indicate unusual sample depth in original" ]. chunkType = 'gAMA' ifTrue: [ ^ self "indicates gamma correction value" ]. chunkType = 'bKGD' ifTrue: [ ^ self processBackgroundChunk ]. chunkType = 'pHYs' ifTrue: [ ^ self processPhysicalPixelChunk ]. chunkType = 'tRNS' ifTrue: [ ^ self processTransparencyChunk ]. chunkType = 'IHDR' ifTrue: [ ^ self processIHDRChunk ]. chunkType = 'PLTE' ifTrue: [ ^ self processPLTEChunk ]. chunkType = 'IDAT' ifTrue: [ "---since the compressed data can span multiple chunks, stitch them all together first. later, if memory is an issue, we need to figure out how to do this on the fly---" idatChunkStream ifNil: [ idatChunkStream := WriteStream with: chunk copy ] ifNotNil: [ idatChunkStream nextPutAll: chunk ]. ^ self ]. unknownChunks add: chunkType! ! !PNGReadWriter methodsFor: 'chunks' stamp: 'SvenVanCaekenberghe 10/26/2013 10:17' prior: 28894125! processNonInterlaced | z filter temp copyMethod debug | debug := self debugging. copyMethod := #( #copyPixelsGray: nil #copyPixelsRGB: #copyPixelsIndexed: #copyPixelsGrayAlpha: nil #copyPixelsRGBA: ) at: colorType + 1. debug ifTrue: [ Transcript cr; nextPutAll: 'NI chunk size='; print: idatChunkStream position ]. z := ZLibReadStream on: idatChunkStream originalContents from: 1 to: idatChunkStream position. prevScanline := ByteArray new: bytesPerScanline. thisScanline := ByteArray new: bytesPerScanline. 0 to: height - 1 do: [ :y | filter := z next. debug ifTrue: [ filtersSeen add: filter ]. thisScanline := z next: bytesPerScanline into: thisScanline startingAt: 1. (debug and: [ thisScanline size < bytesPerScanline ]) ifTrue: [ Transcript nextPutAll: ('wanted {1} but only got {2}' format: { bytesPerScanline. (thisScanline size) }); cr ]. filter = 0 ifFalse: [ self filterScanline: filter count: bytesPerScanline ]. self perform: copyMethod with: y. temp := prevScanline. prevScanline := thisScanline. thisScanline := temp ]. z atEnd ifFalse: [ self error: 'Unexpected data' ]. debug ifTrue: [ Transcript nextPutAll: ' compressed size='; print: z position ]! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'MartinDias 10/23/2013 18:25' prior: 49402911! changeRecordForOverriddenMethod: aMethodReference | method position | method := aMethodReference actualClass compiledMethodAt: aMethodReference selector. position := method filePosition. SourceFiles readOnlyDo: [ :sourceFilesCopy | | file prevPos prevFileIndex chunk stamp methodCategory tokens | method fileIndex == 0 ifTrue: [ ^ nil ]. file := sourceFilesCopy at: method fileIndex. [ position notNil & file notNil ] whileTrue: [ file position: (0 max: position - 150). "Skip back to before the preamble" [ file position < (position - 1) ] whileTrue: [ chunk := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" prevPos := nil. stamp := ''. (chunk includesSubstring: 'methodsFor:') ifTrue: [ tokens := chunk parseLiterals ] ifFalse: [ tokens := Array new "ie cant be back ref" ]. ((tokens size between: 7 and: 8) and: [ (tokens at: tokens size - 5) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size - 2. prevPos := tokens last. prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos. prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" prevPos := tokens at: tokens size - 2. prevFileIndex := tokens last ]. (prevPos = 0 or: [ prevFileIndex = 0 ]) ifTrue: [ prevPos := nil ] ]. ((tokens size between: 5 and: 6) and: [ (tokens at: tokens size - 3) = #methodsFor: ]) ifTrue: [ (tokens at: tokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: tokens size ] ]. methodCategory := tokens after: #methodsFor: ifAbsent: [ 'as yet unclassifed' ]. (self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue: [ methodCategory = Protocol unclassified ifTrue: [ methodCategory := methodCategory , ' ' ]. ^ ChangeRecord new file: file position: position type: #method class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp ]. position := prevPos. prevPos notNil ifTrue: [ file := sourceFilesCopy at: prevFileIndex ] ]. ^ nil ]! ! "Files"! "Graphics-Files"! "Monticello"! "PackageInfo"! "RPackage-Core"! "System-Changes"! "Tools"! ----End fileIn----! ----QUIT----an Array(27 October 2013 9:11:45 am) Pharo.image priorSource: 25414581! ----STARTUP----an Array(27 October 2013 9:16:24 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 October 2013 9:16:24 am) Pharo-30529.image priorSource: 25451410! ----STARTUP----an Array(27 October 2013 9:44:31 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/27/2013 09:42' prior: 75746536! commentForCurrentUpdate ^ '12021 LoadUpdatesCommandLineHandler should fail if updates cannot be loaded https://pharo.fogbugz.com/f/cases/12021'! ! !ScriptLoader methodsFor: 'load primitives' stamp: 'CamilloBruni 10/26/2013 21:50' prior: 75159808! loadTogether: aCollection merge: aBoolean | loader | loader := aBoolean ifTrue: [ MCVersionMerger new ] ifFalse: [ MCVersionLoader new]. (self newerVersionsIn: aCollection) do: [:fn | loader addVersion: (self loadVersionFromFileNamed: fn)] displayingProgress: 'Adding versions...'. aBoolean ifTrue: [ [loader merge] on: MCMergeResolutionRequest do: [:request | request autoMerge ]] ifFalse: [ loader hasVersions ifTrue: [ [loader load] on: MCMergeOrLoadWarning do: [:ex | ex load ]]] ! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/27/2013 09:42'! script185 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-EstebanLorenzano.636.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.120.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.320.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1659.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.878.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-EstebanLorenzano.161.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.2.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.62.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.92.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.95.mcz NetworkTests-MarcusDenker.88.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1342.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/27/2013 09:42'! update30530 "self new update30530" self withUpdateLog: '12021 LoadUpdatesCommandLineHandler should fail if updates cannot be loaded https://pharo.fogbugz.com/f/cases/12021'. self loadTogether: self script185 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LoadUpdatesCommandLineHandler commentStamp: '' prior: 42384162! Usage: update [ --force ] [ --from-file= ] --force Continue loading updates with errors --from-file Use a local instead of http://updates.pharo.org An update file containing a cr-separated list of urls to .cs files Documentation: The update the image to the latest version. Usage: pharo Pharo.image update pharo Pharo.image update --from-file=udpates.list! !UpdateFileNotLoaded commentStamp: '' prior: 0! This warning is signalled if during the update process, certain update files cannot be found.! !UpdateStreamerTest methodsFor: 'resources' stamp: 'CamilloBruni 10/26/2013 21:41'! miniUpdateLf ^ self miniUpdate copyReplaceAll: String cr with: String lf ! ! !UpdateStreamerTest methodsFor: 'tests' stamp: 'CamilloBruni 10/26/2013 21:46'! testExtractUpdatesForVersionLf "self debug: #testExtractUpdatesForVersionLf" | res | res := UpdateStreamer new extractVersion: 'Pharo1.1a' from: self miniUpdateLf. self assert: (res size = 13). res := UpdateStreamer new extractVersion: 'Pharo1.2a' from: self miniUpdateLf. self assert: (res size = 6). res := UpdateStreamer new extractVersion: 'ZORK.2a' from: self miniUpdateLf. self assert: (res isEmpty).! ! !UpdateStreamerTest methodsFor: 'tests' stamp: 'CamilloBruni 10/26/2013 21:46'! testGroupUpdatesByVersionLf "self debug: #testGroupUpdatesByVersionLf" | res | res := UpdateStreamer new groupUpdatesByVersion: self miniUpdateLf. self assert: res size = 3. self assert: res first first = #'Pharo1.1a'. self assert: res second first = #'Pharo1.1b'. self assert: res third first = #'Pharo1.2a'. self assert: res first second size = 13. self assert: ((res first second) allSatisfy: [:each | each beginsWith: '110']). self assert: ((res first second) first = #'11000-Pha-Empty.cs'). self assert: ((res first second) last = #'11012-Pha-ScriptingSystemRemoval.cs'). ! ! !UpdateStreamerTest methodsFor: 'tests' stamp: 'CamilloBruni 10/26/2013 21:42'! testMiniUpdateFiles self deny: (self miniUpdate includes: Character lf). self deny: (self miniUpdateLf includes: Character cr).! ! !UpdateStreamer methodsFor: 'private actions' stamp: 'CamilloBruni 10/26/2013 21:52' prior: 69838007! elementaryReadServerUpdates: urls "Scan the update server(s) for unassimilated updates. If the instance variable upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point." "UpdateStreamer new elementaryReadServerUpdates" | str failed loaded this nextDoc updateName | (Smalltalk globals includesKey: #ScriptLoader) ifFalse: [ ^ self feedback: 'ScriptLoader is not present (this may happen if you have run cleanUpForProduction). ' ]. Cursor wait showWhile: [ | docQueue docQueueSema | loaded := 0. failed := nil. "send downloaded documents throuh this queue" docQueue := SharedQueue new. "this semaphore keeps too many documents from beeing queueed up at a time" docQueueSema := Semaphore new. 5 timesRepeat: [ docQueueSema signal ]. "fork a process to download the updates" self retrieveUrls: urls ontoQueue: docQueue withWaitSema: docQueueSema. "process downloaded updates in the foreground" [ this := docQueue next. nextDoc := docQueue next. nextDoc = #failed ifTrue: [ failed := this ]. failed isNil and: [ nextDoc ~= #finished ] ] whileTrue: [ failed ifNil: [ nextDoc isEmpty ifTrue: [ failed := this ] ]. failed ifNil: [ nextDoc peek asciiValue = 4 ifTrue: [ failed := this ] "pure object file" ]. "Must be fileIn, not pure object file" failed ifNil: [ self shouldApplyChanges ifTrue: [ updateName := (this findTokens: '/') last. ChangeSet newChangesFromStream: nextDoc named: updateName. SystemVersion current registerUpdate: updateName initialIntegerOrNil ]]. loaded := loaded + 1. docQueueSema signal ] ]. failed notNil & (urls size - loaded > 0) ifTrue: [ str := loaded printString , ' new update file(s) processed.'. str := str , '\Could not load ' withCRs , (urls size - loaded) printString , ' update file(s).' , '\Starting with "' withCRs , failed , '".'. self feedback: str. UpdateFileNotLoaded signalFile: failed ]. ^ Array with: failed with: loaded! ! !UpdateStreamer methodsFor: 'public' stamp: 'CamilloBruni 10/26/2013 21:38' prior: 54523628! updateFromFile: aFileReference self updateWith: [ self elementaryReadServerUpdates: (self newUpdatesFromFile: aFileReference) ]! ! !UpdateStreamer methodsFor: 'public' stamp: 'CamilloBruni 10/26/2013 21:22' prior: 68280118! updateWith: anUpdateBlock "Scan the update server for unassimilated updates. If upToNumber is not nil, it represents the highest-numbered update to load. This makes it possible to update only up to a particular point. If saveLocally is true, then save local copies of the update files on disc. If shouldApplyChanges is true, then absorb the updates into the current image. A file on the server called updates.list has the names of the last N update files. We look backwards for the first one we do not have, and start there" "* To add a new update: Name it starting with a new two-digit code. * Do not use %, /, *, space, or more than one period in the name of an update file. * The update name does not need to have any relation to the version name. * Figure out which versions of the system the update makes sense for. * Add the name of the file to each version's category below. * Put this file and the update file on all of the servers. * * To make a new version of the system: Pick a name for it (no restrictions) * Put # and exactly that name on a new line at the end of this file. * During the release process, fill in exactly that name in the dialog box. * Put this file on the server." "When two sets of updates need to use the same directory, one of them has a * in its serverUrls description. When that is true, the first word of the description is put on the front of 'updates.list', and that is the index file used." [[[ | pair failed loaded | pair := anUpdateBlock value. failed := pair first. loaded := pair second. failed ifNil: [ "is OK" self feedback: (loaded printString ,' new update file(s) processed.')]] on: MCMergeOrLoadWarning do: [ :e | e merge ]] on: MCNoChangesException do: [ :e | e resume ]] on: MCMergeResolutionRequest do: [ :request | request autoMerge ].! ! !LoadUpdatesCommandLineHandler commentStamp: '' prior: 75795351! Usage: update [ --force ] [ --from-file= ] --force Continue loading updates with errors --from-file Use a local instead of http://updates.pharo.org An update file containing a cr-separated list of urls to .cs files Documentation: The update the image to the latest version. Usage: pharo Pharo.image update pharo Pharo.image update --from-file=udpates.list! !LoadUpdatesCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 10/26/2013 21:30' prior: 24545219! activate self activateHelp ifTrue: [ ^ self ]. self loadUpdates. Smalltalk snapshot: true andQuit: true.! ! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 10/26/2013 21:30'! loadDefaultUpdates UpdateStreamer new updateFromServer. ImageCleaner cleanUpForRelease.! ! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'CamilloBruni 10/26/2013 21:52' prior: 34244008! loadUpdates [ (self hasOption: 'from-file') ifTrue: [ self loadUpdatesFromFile ] ifFalse: [ self loadUpdates ]. ] on: UpdateFileNotLoaded do: [ self shouldForce ifFalse: [ self exitFailure ]]! ! !LoadUpdatesCommandLineHandler methodsFor: 'testing' stamp: 'CamilloBruni 10/26/2013 21:36'! shouldForce ^ self hasOption: 'force'! ! !UpdateFileNotLoaded commentStamp: '' prior: 75795827! This warning is signalled if during the update process, certain update files cannot be found.! !UpdateFileNotLoaded class methodsFor: 'signaling' stamp: 'CamilloBruni 10/26/2013 21:26'! signalFile: aFilePath ^ self new file: aFilePath; signal! ! !UpdateFileNotLoaded methodsFor: 'accessing' stamp: 'CamilloBruni 10/26/2013 21:27'! file ^ file! ! !UpdateFileNotLoaded methodsFor: 'accessing' stamp: 'CamilloBruni 10/26/2013 21:27'! file: anObject file := anObject! ! !UpdateFileNotLoaded methodsFor: 'accessing' stamp: 'CamilloBruni 10/26/2013 21:28'! messageText ^ 'Could not load the update file: ', self file asString! ! "UpdateStreamer-Core"! "UpdateStreamer-Tests"! ----End fileIn----! ----QUIT----an Array(27 October 2013 9:44:37 am) Pharo.image priorSource: 25451615! ----STARTUP----an Array(27 October 2013 9:49:18 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(27 October 2013 9:49:18 am) Pharo-30530.image priorSource: 25472371! ----STARTUP----an Array(28 October 2013 9:17:09 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/28/2013 08:57' prior: 75783570! commentForCurrentUpdate ^ '6368 deprecate unescapePercents and encodeForHTTP https://pharo.fogbugz.com/f/cases/6368'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/28/2013 08:58'! script186 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.320.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-StephaneDucasse.87.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1659.mcz KernelTests-MarcusDenker.574.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.144.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1344.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/28/2013 08:58'! update30531 "self new update30531" self withUpdateLog: '6368 deprecate unescapePercents and encodeForHTTP https://pharo.fogbugz.com/f/cases/6368'. self loadTogether: self script186 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCHttpRepository methodsFor: 'actions' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 24801192! parseFileNamesFromStream: aStream | names fullName | names := OrderedCollection new. [aStream atEnd] whileFalse: [[aStream upTo: $<. {$a. $A. nil} includes: aStream next] whileFalse. aStream upTo: $". aStream atEnd ifFalse: [ fullName := aStream upTo: $". names add: fullName urlDecoded ]]. ^ names! ! !MCHttpRepository methodsFor: 'actions' stamp: 'SvenVanCaekenberghe 10/27/2013 11:46' prior: 24802588! urlForFileNamed: aString ^ self locationWithTrailingSlash, aString urlEncoded! ! !AbstractFileReference methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:43' prior: 17189451! uri "Convert my path into a file:// type url. For odd characters use %20 notation." ^ self asUrl! ! !HTTPEncodingTest methodsFor: 'as yet unclassified' stamp: 'SvenVanCaekenberghe 10/27/2013 11:45' prior: 23142569! testEncodeForHTTP self assert: 'aa aa éé aa aa' urlEncoded = 'aa%20aa%20%C3%A9%C3%A9%20aa%20aa'! ! !HTTPEncodingTest methodsFor: '*Multilingual-OtherLanguages' stamp: 'SvenVanCaekenberghe 10/27/2013 11:55'! testPercentEncodingHiragana | hiraA hiraO hiraAO encodedHiraA encodedHiraO encodedHiraAO | "Make Japanese String from unicode. see http://www.unicode.org/charts/PDF/U3040.pdf" hiraA := (Character value: 16r3042) asString. "HIRAGANA LETTER A" hiraO := (Character value: 16r304A) asString. "HIRAGANA LETTER O" hiraAO := hiraA , hiraO. "Percent Encoded Japanese String" encodedHiraA := hiraA urlEncoded. self assert: encodedHiraA = '%E3%81%82'. encodedHiraO := hiraO urlEncoded. self assert: encodedHiraO = '%E3%81%8A'. encodedHiraAO := hiraAO urlEncoded. self assert: encodedHiraAO = '%E3%81%82%E3%81%8A'. "without percent encoded string" self assert: '' urlDecoded = ''. self assert: 'abc' urlDecoded = 'abc'. "latin1 character" "encoded latin1 string" self assert: '%61' urlDecoded = 'a'. self assert: '%61%62%63' urlDecoded = 'abc'. "encoded multibyte string" self assert: encodedHiraA urlDecoded = hiraA. self assert: encodedHiraAO urlDecoded = hiraAO. "mixed string" self assert: (encodedHiraAO , 'a') urlDecoded = (hiraAO , 'a'). self assert: ('a' , encodedHiraA) urlDecoded = ('a' , hiraA). self assert: ('a' , encodedHiraA , 'b') urlDecoded = ('a' , hiraA , 'b'). self assert: ('a' , encodedHiraA , 'b' , encodedHiraO) urlDecoded = ('a' , hiraA , 'b' , hiraO). self assert: (encodedHiraA , encodedHiraO , 'b' , encodedHiraA) urlDecoded = (hiraA , hiraO , 'b' , hiraA). "for Seaside" self assert: (encodedHiraA , '+' , encodedHiraO) urlDecoded = (hiraA , ' ' , hiraO)! ! !StringTest methodsFor: '*Multilingual-OtherLanguages' stamp: 'SvenVanCaekenberghe 10/27/2013 13:52' prior: 49861639! testUnescapePercents self assert: '' urlDecoded = ''. self assert: 'x' urlDecoded = 'x'. self assert: '+' urlDecoded = ' '. self assert: 'x+' urlDecoded = 'x '. self assert: '+x' urlDecoded = ' x'. self assert: 'x+x' urlDecoded = 'x x'. self should: [ '%' urlDecoded ] raise: Error. self should: [ '%3' urlDecoded ] raise: Error. self assert: '%3C' urlDecoded = '<'. self assert: '%3Cx%3E4%3C%2Fx%3E' urlDecoded = '4'. self assert: '!!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+''%22' urlDecoded = '!!@#$%^&*(){}[]=:/;? ''"'. self assert: '!!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B''%22' urlDecoded = '!!@#$%^&*(){}[]=:/;?+''"'. self assert: '%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22' urlDecoded = '!!@#$%^&*(){}[]=:/;? ''"'! ! !StringTest methodsFor: 'tests - converting' stamp: 'SvenVanCaekenberghe 10/27/2013 12:15' prior: 51240198! testUnescapePercentsWithTextEncoding | leading kataTe kataSu kataTo | leading := JapaneseEnvironment leadingChar. "Katakana letter Te" kataTe := (Character leadingChar: leading code: 12486) asString. "Katakana letter Su" kataSu := (Character leadingChar: leading code: 12473) asString. "Katakana letter To" kataTo := (Character leadingChar: leading code: 12488) asString. "This could be reactivated when/if Zinc-Character-Encoding supports shift_jis" "self assert: ('%83e%83X%83g' unescapePercentsWithTextEncoding: 'shift_jis') = (kataTe , kataSu , kataTo). self assert: ('%83e%83X%83g%20and%20%83e%83X%83g' unescapePercentsWithTextEncoding: 'shift_jis') = (kataTe , kataSu , kataTo , ' and ' , kataTe , kataSu , kataTo)"! ! !UrlTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/27/2013 11:47' prior: 75722437! testUsernamePasswordEncoded2 "Sometimes, weird usernames or passwords are necessary in applications, and, thus, we might receive them in a Url. The @ and the : ar the kind of critical ones." #( "('user' 'pword' 'host' port 'path')" ('Stéphane rst Pückler' 'leckerEis' 'cottbus.brandenburg' 80 'mein/Zuhause') ('Jeannde.d''Arc' 'jaiunesécret' 'orleans' 8080 'une/deux/trois') ('HaXor@roxor:fnac' 'my~Pa$§wert' 'cbase' 42 'do/not_try') ) do: [:urlParts | |theUrl| theUrl := ('http://{1}:{2}@{3}:{4}/{5}' format: { (urlParts at: 1) urlEncoded. (urlParts at: 2) urlEncoded. urlParts at: 3. urlParts at: 4. urlParts at: 5. }) asUrl. self assert: (theUrl scheme = 'http'). self assert: (theUrl username = (urlParts at: 1)). self assert: (theUrl password = (urlParts at: 2)). self assert: (theUrl host = (urlParts at: 3)). self assert: (theUrl port = (urlParts at: 4)). self assert: theUrl firstPathSegment = ((urlParts at: 5) copyUpTo: $/ )]! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 22095441! initializeFromPathString: aPathString " is a file path as a String. We construct a path collection using various heuristics." | pathString hasDriveLetter | pathString := aPathString. pathString isEmpty ifTrue: [pathString := '/']. path := (pathString findTokens: '/') collect: [:token | token urlDecoded]. "A path like 'C:' refers in practice to 'c:/'" ((pathString endsWith: '/') or: [(hasDriveLetter := self firstPartIsDriveLetter) and: [path size = 1]]) ifTrue: [path add: '']. "Decide if we are absolute by checking for leading $/ or beginning with drive letter. Smarts for other OSes?" self isAbsolute: ((pathString beginsWith: '/') or: [hasDriveLetter ifNil: [self firstPartIsDriveLetter]])! ! !FileUrl methodsFor: 'paths' stamp: 'SvenVanCaekenberghe 10/27/2013 11:43' prior: 22093803! pathString "Path as it appears in a URL with $/ as delimiter." ^String streamContents: [ :s | | first | "isAbsolute ifTrue:[ s nextPut: $/ ]." first := true. self path do: [ :p | first ifFalse: [ s nextPut: $/ ]. first := false. s nextPutAll: p urlEncoded ] ]! ! !FileUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:44' prior: 22094153! printOn: aStream "Return the FileUrl according to RFC1738 plus supporting fragments: 'file:///#' Note that being '' is equivalent to 'localhost'. Note: The pathString can not start with a leading $/ to indicate an 'absolute' file path. This is not according to RFC1738 where the path should have no leading or trailing slashes, and always be considered absolute relative to the filesystem." aStream nextPutAll: self schemeName, '://'. host ifNotNil: [aStream nextPutAll: host]. aStream nextPut: $/; nextPutAll: self pathString. fragment ifNotNil: [aStream nextPut: $#; nextPutAll: fragment urlEncoded].! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 68701579! privateInitializeFromText: pathString relativeTo: aUrl " should be a filesystem path. This url is adjusted to be aUrl + the path." | newPath | self host: aUrl host. self initializeFromPathString: pathString. self isAbsolute: aUrl isAbsolute. newPath := aUrl path copy. newPath removeLast. "empty string that says its a directory" path do: [ :token | ((token ~= '..') and: [token ~= '.']) ifTrue: [ newPath addLast: token urlDecoded ]. token = '..' ifTrue: [ newPath isEmpty ifFalse: [ newPath last = '..' ifFalse: [ newPath removeLast ] ] ]. "token = '.' do nothing" ]. path := newPath ! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:44' prior: 46527168! fullPath | ans | ans := String new writeStream. path do: [ :pathElem | ans nextPut: $/. ans nextPutAll: pathElem urlEncoded ]. self query ifNotNil: [ ans nextPut: $?. ans nextPutAll: self query. ]. self fragment ifNotNil: [ ans nextPut: $#. ans nextPutAll: self fragment urlEncoded ]. ^ ans contents! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:45' prior: 46527593! printOn: aStream aStream nextPutAll: self schemeName. aStream nextPutAll: '://'. self username ifNotNil: [ aStream nextPutAll: self username urlEncoded. self password ifNotNil: [ aStream nextPutAll: ':'. aStream nextPutAll: self password urlEncoded]. aStream nextPutAll: '@' ]. aStream nextPutAll: self authority. port ifNotNil: [aStream nextPut: $:; print: port]. path do: [ :pathElem | aStream nextPut: $/. aStream nextPutAll: pathElem urlEncoded ]. self query ifNotNil: [ aStream nextPut: $?. aStream nextPutAll: self query. ]. self fragment ifNotNil: [ aStream nextPut: $#. aStream nextPutAll: self fragment urlEncoded ].! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/27/2013 12:20' prior: 75725246! privateInitializeFromText: aString | remainder ind specifiedSchemeName | remainder := aString. schemeName ifNil: [specifiedSchemeName := self class schemeNameForString: remainder. specifiedSchemeName ifNotNil: [schemeName := specifiedSchemeName. remainder := remainder copyFrom: schemeName size + 2 to: remainder size]. schemeName ifNil: ["assume HTTP" schemeName := 'http']]. "remove leading // if it's there" (remainder beginsWith: '//') ifTrue: [remainder := remainder copyFrom: 3 to: remainder size]. "get the query" ind := remainder indexOf: $?. ind > 0 ifTrue: [query := remainder copyFrom: ind + 1 to: remainder size. remainder := remainder copyFrom: 1 to: ind - 1]. "get the authority" ind := remainder indexOf: $/. ind > 0 ifTrue: [ind = 1 ifTrue: [authority := ''] ifFalse: [authority := remainder copyFrom: 1 to: ind - 1. remainder := remainder copyFrom: ind + 1 to: remainder size]] ifFalse: [authority := remainder. remainder := '']. "extract the username+password" (authority includes: $@) ifTrue: [username := authority copyUpTo: $@. authority := authority copyFrom: (authority indexOf: $@) + 1 to: authority size. (username includes: $:) ifTrue: [password := (username copyFrom: (username indexOf: $:) + 1 to: username size) urlDecoded. username := (username copyUpTo: $:) urlDecoded]]. "Extract the port" (authority includes: $:) ifTrue: [| lastColonIndex portString | lastColonIndex := authority findLast: [:c | c = $:]. portString := authority copyFrom: lastColonIndex + 1 to: authority size. portString isAllDigits ifTrue: [port := Integer readFromString: portString. (port > 65535) ifTrue: [self error: 'Invalid port number']. authority := authority copyFrom: 1 to: lastColonIndex - 1] ifFalse:[self error: 'Invalid port number']]. "get the path" path := self privateParsePath: remainder relativeTo: #() .! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 23412164! privateParsePath: remainder relativeTo: basePath | nextTok s parsedPath | s := remainder readStream. parsedPath := OrderedCollection new. parsedPath addAll: basePath. parsedPath isEmpty ifFalse: [ parsedPath removeLast ]. [ s peek = $/ ifTrue: [ s next ]. nextTok := String new writeStream. [ s atEnd or: [ s peek = $/ ] ] whileFalse: [ nextTok nextPut: s next ]. nextTok := nextTok contents urlDecoded. nextTok = '..' ifTrue: [ parsedPath size > 0 ifTrue: [ parsedPath removeLast ] ] ifFalse: [ nextTok ~= '.' ifTrue: [ parsedPath add: nextTok ] ]. s atEnd ] whileFalse. parsedPath isEmpty ifTrue: [ parsedPath add: '' ]. ^ parsedPath! ! !String methodsFor: '*monticellofiletree-core' stamp: 'SvenVanCaekenberghe 10/27/2013 11:46' prior: 67391331! cypressEscape ^ self urlEncoded! ! !String methodsFor: '*monticellofiletree-core' stamp: 'SvenVanCaekenberghe 10/27/2013 12:18' prior: 67391452! cypressUnescape ^ self urlDecoded! ! !String methodsFor: '*network-protocols' stamp: 'SvenVanCaekenberghe 10/27/2013 11:36' prior: 51042141! encodeForHTTP self deprecated: '#encodeForHTTP has been replaced with #urlEncoded' on: '20131027' in: '3.0'. ^ self urlEncoded! ! !String methodsFor: '*network-protocols' stamp: 'SvenVanCaekenberghe 10/27/2013 11:35' prior: 51042397! encodeForHTTPWithTextEncoding: encodingName self deprecated: '#encodeForHTTPWithTextEncoding: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! !String methodsFor: '*network-protocols' stamp: 'SvenVanCaekenberghe 10/27/2013 11:35' prior: 51042612! encodeForHTTPWithTextEncoding: encodingName conditionBlock: conditionBlock self deprecated: '#encodeForHTTPWithTextEncoding:conditionBlock: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! !String methodsFor: '*multilingual-textConversion' stamp: 'SvenVanCaekenberghe 10/27/2013 11:36' prior: 51040255! unescapePercents self deprecated: '#unescapePercents has been replaced with #urlDecoded' on: '20131027' in: '3.0'. ^ self urlDecoded! ! !String methodsFor: '*multilingual-textConversion' stamp: 'SvenVanCaekenberghe 10/27/2013 11:37' prior: 51040466! unescapePercentsWithTextEncoding: encodingName self deprecated: '#unescapePercentsWithTextEncoding: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! !MethodFinder methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 10/27/2013 12:18' prior: 75704977! initialize2 "The methods we are allowed to use. (MethodFinder new initialize) " "Set" #("in class" sizeFor: "testing" "adding" "removing" "enumerating" "private" array findElementOrNil: "accessing" someElement) do: [:sel | Approved add: sel]. "Dictionary, IdentityDictionary, IdentitySet" #("accessing" associationAt: associationAt:ifAbsent: at:ifPresent: keyAtIdentityValue: keyAtIdentityValue:ifAbsent: keyAtValue: keyAtValue:ifAbsent: keys "testing" includesKey: ) do: [:sel | Approved add: sel]. #(removeKey: removeKey:ifAbsent: ) do: [:sel | AddAndRemove add: sel]. "LinkedList, Interval, MappedCollection" #("in class" from:to: from:to:by: "accessing" contents) do: [:sel | Approved add: sel]. #( "adding" addFirst: addLast:) do: [:sel | AddAndRemove add: sel]. "OrderedCollection, SortedCollection" #("accessing" after: before: "copying" copyEmpty "removing" "enumerating" "private" "accessing" sortBlock) do: [:sel | Approved add: sel]. #("adding" add:after: add:afterIndex: add:before: addAllFirst: addAllLast: addFirst: addLast: "removing" removeAt: removeFirst removeLast "accessing" sortBlock:) do: [:sel | AddAndRemove add: sel]. "Character" #("in class, instance creation" allCharacters digitValue: new separators "accessing untypeable characters" backspace cr enter lf linefeed nbsp newPage space tab "constants" alphabet characterTable "accessing" asciiValue digitValue "comparing" "testing" isAlphaNumeric isDigit isLetter isLowercase isSafeForHTTP isSeparator isSpecial isUppercase isVowel tokenish "copying" "converting" asLowercase asUppercase ) do: [:sel | Approved add: sel]. "String" #("in class, instance creation" crlf "primitives" findFirstInString:inSet:startingAt: indexOfAscii:inString:startingAt: "internet" "accessing" byteAt: endsWithDigit findAnySubStr:startingAt: findBetweenSubStrs: findDelimiters:startingAt: findString:startingAt: findString:startingAt:caseSensitive: findTokens: findTokens:includes: findTokens:keep: #includesSubstring: includesSubstring:caseSensitive: indexOf:startingAt: indexOfAnyOf: indexOfAnyOf:ifAbsent: indexOfAnyOf:startingAt: indexOfAnyOf:startingAt:ifAbsent: lineCorrespondingToIndex: lineCount lineNumber: skipAnySubStr:startingAt: skipDelimiters:startingAt: startsWithDigit "comparing" alike: beginsWith: caseSensitiveLessOrEqual: charactersExactlyMatching: compare: endsWith: endsWithAnyOf: sameAs: startingAt:match:startingAt: "copying" copyReplaceTokens:with: padLeftTo: padRightTo: padLeftTo:with: padRightTo:with: "converting" asByteArray asDate asFileName asLegalSelector asText asTime asUrl capitalized compressWithTable: contractTo: correctAgainst: initialIntegerOrNil keywords quoted withoutPeriodSuffix splitInteger stemAndNumericSuffix substrings surroundedBySingleQuotes truncateWithElipsisTo: trimBoth withFirstCharacterDownshifted withNoLineLongerThan: withSeparatorsCompacted withoutLeadingDigits trimRight trimLeft "displaying" "printing" "system primitives" compare:with:collated: "Celeste" withCRs "internet" decodeMimeHeader decodeQuotedPrintable withInternetLineEndings withSqueakLineEndings withoutQuoting urlEncoded UrlDecoded "testing" isAllSeparators lastSpacePosition "paragraph support" indentationIfBlank: "arithmetic" ) do: [:sel | Approved add: sel]. #(byteAt:put: translateToLowercase match:) do: [:sel | AddAndRemove add: sel]. "Symbol" #("in class, private" hasInterned:ifTrue: "access" morePossibleSelectorsFor: possibleSelectorsFor: selectorsContaining: thatStarts:skipping: "accessing" "comparing" "copying" "converting" "printing" "testing" isInfix isKeyword isUnary) do: [:sel | Approved add: sel]. "Array" #("comparing" "converting" "printing" "private" hasLiteralSuchThat:) do: [:sel | Approved add: sel]. "Array2D" #("access" at:at: atCol: atCol:put: atRow: extent extent:fromArray: height width width:height:type:) do: [:sel | Approved add: sel]. #(at:at:add: at:at:put: atRow:put: ) do: [:sel | AddAndRemove add: sel]. "ByteArray" #("accessing" doubleWordAt: wordAt: "platform independent access" longAt:bigEndian: shortAt:bigEndian: unsignedLongAt:bigEndian: unsignedShortAt:bigEndian: "converting") do: [:sel | Approved add: sel]. #(doubleWordAt:put: wordAt:put: longAt:put:bigEndian: shortAt:put:bigEndian: unsignedLongAt:put:bigEndian: unsignedShortAt:put:bigEndian: ) do: [:sel | AddAndRemove add: sel]. "FloatArray" "Dont know what happens when prims not here" false ifTrue: [#("accessing" "arithmetic" *= += -= /= "comparing" "primitives-plugin" primAddArray: primAddScalar: primDivArray: primDivScalar: primMulArray: primMulScalar: primSubArray: primSubScalar: "primitives-translated" primAddArray:withArray:from:to: primMulArray:withArray:from:to: primSubArray:withArray:from:to: "converting" "private" "user interface") do: [:sel | Approved add: sel]. ]. "IntegerArray, WordArray" "RunArray" #("in class, instance creation" runs:values: scanFrom: "accessing" runLengthAt: "adding" "copying" "private" runs values) do: [:sel | Approved add: sel]. #(coalesce repeatLast:ifEmpty: repeatLastIfEmpty: ) do: [:sel | AddAndRemove add: sel]. "Stream -- many operations change its state" #("testing" atEnd) do: [:sel | Approved add: sel]. #("accessing" next: nextMatchAll: nextMatchFor: upToEnd next:put: nextPut: nextPutAll: "printing" print: ) do: [:sel | AddAndRemove add: sel]. "PositionableStream" #("accessing" contentsOfEntireFile originalContents peek peekFor: "testing" "positioning" position ) do: [:sel | Approved add: sel]. #(nextDelimited: nextLine upTo: position: reset resetContents setToEnd skip: skipTo: upToAll: ) do: [:sel | AddAndRemove add: sel]. "Because it is so difficult to test the result of an operation on a Stream (you have to supply another Stream in the same state), we don't support Streams beyond the basics. We want to find the messages that convert Streams to other things." "ReadWriteStream" #("file status" closed) do: [:sel | Approved add: sel]. #("accessing" next: on: ) do: [:sel | AddAndRemove add: sel]. "WriteStream" #("in class, instance creation" on:from:to: with: with:from:to: ) do: [:sel | Approved add: sel]. #("positioning" resetToStart "character writing" crtab crtab:) do: [:sel | AddAndRemove add: sel]. "LookupKey, Association, Link" #("accessing" key nextLink) do: [:sel | Approved add: sel]. #(key: key:value: nextLink:) do: [:sel | AddAndRemove add: sel]. "Point" #("in class, instance creation" r:degrees: x:y: "accessing" x y "comparing" "arithmetic" "truncation and round off" "polar coordinates" degrees r theta "point functions" bearingToPoint: crossProduct: dist: dotProduct: eightNeighbors flipBy:centerAt: fourNeighbors grid: nearestPointAlongLineFrom:to: nearestPointOnLineFrom:to: normal normalized octantOf: onLineFrom:to: onLineFrom:to:within: quadrantOf: rotateBy:centerAt: transposed unitVector "converting" asFloatPoint asIntegerPoint corner: extent: rect: "transforming" adhereTo: rotateBy:about: scaleBy: scaleFrom:to: translateBy: "copying" "interpolating" interpolateTo:at:) do: [:sel | Approved add: sel]. "Rectangle" #("in class, instance creation" center:extent: encompassing: left:right:top:bottom: merging: origin:corner: origin:extent: "accessing" area bottom bottomCenter bottomLeft bottomRight boundingBox center corner corners innerCorners left leftCenter origin right rightCenter top topCenter topLeft topRight "comparing" "rectangle functions" adjustTo:along: amountToTranslateWithin: areasOutside: bordersOn:along: encompass: expandBy: extendBy: forPoint:closestSideDistLen: insetBy: insetOriginBy:cornerBy: intersect: merge: pointNearestTo: quickMerge: rectanglesAt:height: sideNearestTo: translatedToBeWithin: withBottom: withHeight: withLeft: withRight: withSide:setTo: withTop: withWidth: "testing" containsPoint: containsRect: hasPositiveExtent intersects: isTall isWide "truncation and round off" "transforming" align:with: centeredBeneath: newRectFrom: squishedWithin: "copying" ) do: [:sel | Approved add: sel]. "Color" #("in class, instance creation" colorFrom: colorFromPixelValue:depth: gray: h:s:v: r:g:b: r:g:b:alpha: r:g:b:range: "named colors" black blue brown cyan darkGray gray green lightBlue lightBrown lightCyan lightGray lightGreen lightMagenta lightOrange lightRed lightYellow magenta orange red transparent veryDarkGray veryLightGray veryVeryDarkGray veryVeryLightGray white yellow "other" indexedColors pixelScreenForDepth: quickHighLight: "access" alpha blue brightness green hue luminance red saturation "equality" "queries" isBitmapFill isBlack isGray isSolidFill isTranslucent isTranslucentColor "transformations" alpha: dansDarker darker lighter mixed:with: muchLighter slightlyDarker slightlyLighter veryMuchLighter alphaMixed:with: "groups of shades" darkShades: lightShades: mix:shades: wheel: "printing" shortPrintString "other" colorForInsets rgbTriplet "conversions" asB3DColor asColor balancedPatternForDepth: bitPatternForDepth: closestPixelValue1 closestPixelValue2 closestPixelValue4 closestPixelValue8 dominantColor halfTonePattern1 halfTonePattern2 indexInMap: pixelValueForDepth: pixelWordFor:filledWith: pixelWordForDepth: scaledPixelValue32 "private" privateAlpha privateBlue privateGreen privateRGB privateRed "copying" ) do: [:sel | Approved add: sel]. " For each selector that requires a block argument, add (selector argNum) to the set Blocks." "ourClasses := #(Object Boolean True False UndefinedObject Behavior ClassDescription Class Metaclass MethodContext BlockContext Message Magnitude Date Time Number Integer SmallInteger LargeNegativeInteger LargePositiveInteger Float Fraction Random Collection SequenceableCollection ArrayedCollection Bag Set Dictionary IdentityDictionary IdentitySet LinkedList Interval MappedCollection OrderedCollection SortedCollection Character String Symbol Array Array2D ByteArray FloatArray IntegerArray WordArray RunArray Stream PositionableStream ReadWriteStream WriteStream LookupKey Association Link Point Rectangle Color). ourClasses do: [:clsName | cls := Smalltalk at: clsName. (cls selectors) do: [:aSel | ((Approved includes: aSel) or: [AddAndRemove includes: aSel]) ifTrue: [ (cls formalParametersAt: aSel) withIndexDo: [:tName :ind | (tName endsWith: 'Block') ifTrue: [ Blocks add: (Array with: aSel with: ind)]]]]]. " #((timesRepeat: 1 ) (indexOf:ifAbsent: 2 ) (pairsCollect: 1 ) (mergeSortFrom:to:by: 3 ) (ifNotNil:ifNil: 1 ) (ifNotNil:ifNil: 2 ) (ifNil: 1 ) (at:ifAbsent: 2 ) (ifNil:ifNotNil: 1 ) (ifNil:ifNotNil: 2 ) (ifNotNil: 1) (identityIndexOf:ifAbsent: 2 ) (sort: 1 ) (sortBlock: 1 ) (detectMax: 1 ) (repeatLastIfEmpty: 1 ) (allSubclassesWithLevelDo:startingLevel: 1 ) (keyAtValue:ifAbsent: 2 ) (in: 1 ) (ifTrue: 1 ) (or: 1 ) (select: 1 ) (inject:into: 2 ) (forPoint:closestSideDistLen: 2 ) (value:ifError: 2 ) (selectorsDo: 1 ) (removeAllSuchThat: 1 ) (keyAtIdentityValue:ifAbsent: 2 ) (detectMin: 1 ) (detect:ifNone: 1 ) (ifTrue:ifFalse: 1 ) (ifTrue:ifFalse: 2 ) (detect:ifNone: 2 ) (hasLiteralSuchThat: 1 ) (indexOfAnyOf:ifAbsent: 2 ) (reject: 1 ) (newRectFrom: 1 ) (removeKey:ifAbsent: 2 ) (at:ifPresent: 2 ) (associationAt:ifAbsent: 2 ) (withIndexCollect: 1 ) (repeatLast:ifEmpty: 2 ) (findLast: 1 ) (indexOf:startingAt:ifAbsent: 3 ) (remove:ifAbsent: 2 ) (ifFalse:ifTrue: 1 ) (ifFalse:ifTrue: 2 ) (caseOf:otherwise: 2 ) (count: 1 ) (collect: 1 ) (sort: 1 ) (and: 1 ) (asSortedCollection: 1 ) (with:collect: 2 ) (sourceCodeAt:ifAbsent: 2 ) (detect: 1 ) (collectWithIndex: 1 ) (compiledMethodAt:ifAbsent: 2 ) (detectSum: 1 ) (indexOfSubCollection:startingAt:ifAbsent: 3 ) (findFirst: 1 ) (sourceMethodAt:ifAbsent: 2 ) (collect:thenSelect: 1 ) (collect:thenSelect: 2 ) (select:thenCollect: 1 ) (select:thenCollect: 2 ) (ifFalse: 1 ) (indexOfAnyOf:startingAt:ifAbsent: 3 ) (indentationIfBlank: 1 ) ) do: [:anArray | Blocks add: anArray]. self initialize3. " MethodFinder new initialize. MethodFinder new organizationFiltered: TranslucentColor class " "Do not forget class messages for each of these classes" ! ! HTTPEncodingTest removeSelector: #testPercentEncodingJa! "CollectionsTests"! "FileSystem-Core"! "Monticello"! "MonticelloFileTree-Core"! "Multilingual-OtherLanguages"! "Multilingual-TextConversion"! "Network-Protocols"! "Network-Url"! "NetworkTests"! "Tools"! ----End fileIn----! ----QUIT----an Array(28 October 2013 9:17:20 am) Pharo.image priorSource: 25472576! ----STARTUP----an Array(28 October 2013 9:21:56 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(28 October 2013 9:21:57 am) Pharo-30531.image priorSource: 25510287! ----STARTUP----an Array(29 October 2013 11:23:37 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/29/2013 11:18' prior: 75804531! commentForCurrentUpdate ^ '12031 One should not ask for the glyphInfo of a fallbackFont https://pharo.fogbugz.com/f/cases/12031 12029 ScaledDecimal with unspecified scale should auto-adjust their scale https://pharo.fogbugz.com/f/cases/12029 12023 Remove duplicated code in 3 implementors of #getPreambleFrom:at: https://pharo.fogbugz.com/f/cases/12023 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/29/2013 11:19'! script187 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.230.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1661.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1344.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/29/2013 11:20'! update30532 "self new update30532" self withUpdateLog: '12031 One should not ask for the glyphInfo of a fallbackFont https://pharo.fogbugz.com/f/cases/12031 12029 ScaledDecimal with unspecified scale should auto-adjust their scale https://pharo.fogbugz.com/f/cases/12029 12023 Remove duplicated code in 3 implementors of #getPreambleFrom:at: https://pharo.fogbugz.com/f/cases/12023 '. self loadTogether: self script187 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: 'source code management' stamp: 'MartinDias 10/28/2013 15:11' prior: 19834596! getPreambleFrom: aFileStream at: position ^ SourceFiles getPreambleFrom: aFileStream at: position! ! !RGMethodDefinition methodsFor: 'source pointers' stamp: 'MartinDias 10/28/2013 15:12' prior: 31703684! getPreambleFrom: aFileStream at: position ^ SourceFiles getPreambleFrom: aFileStream at: position! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MartinDias 10/28/2013 15:13' prior: 50630524! getPreambleFrom: aFileStream at: position | writeStream | writeStream := String new writeStream. position to: 0 by: -1 do: [ :p | | c | aFileStream position: p. c := aFileStream basicNext. c == $!! ifTrue: [^ writeStream contents reversed] ifFalse: [writeStream nextPut: c]]! ! !SqNumberParser methodsFor: 'parsing-private' stamp: 'nice 10/29/2013 01:53' prior: 50763394! makeIntegerOrScaledInteger "at this point, there is no digit, nor fractionPart. maybe it can be a scaled decimal with fraction omitted..." neg ifTrue: [integerPart := integerPart negated]. self readExponent ifTrue: [^integerPart * (base raisedToInteger: exponent)]. (self readScale: 0) ifTrue: [^integerPart asScaledDecimal: scale]. ^ integerPart! ! !SqNumberParser methodsFor: 'parsing-public' stamp: 'nice 10/29/2013 01:54' prior: 50769650! nextScaledDecimal "Main method for reading a (scaled) decimal number. Good Gracious, do not accept a decimal in another base than 10!! In other words, do not accept radix notation like 2r1.1, even not 10r5.3 Do not accept exponent notation neither, like 1.0e-3" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart | base := 10. neg := sourceStream peekFor: $-. integerPart := self nextUnsignedIntegerBase: base. (sourceStream peekFor: $.) ifTrue: [fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: ["Oops, the decimal point seems not part of this number" sourceStream skip: -1. ^ neg ifTrue: [integerPart negated asScaledDecimal: 0] ifFalse: [integerPart asScaledDecimal: 0]]. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero. (self readScale: nDigits) ifFalse: ["No scale were provided. use number of digits after decimal point as scale" scale := nDigits]. ^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]. self readScale: 0. neg ifTrue: [integerPart := integerPart negated]. ^integerPart asScaledDecimal: scale! ! !SqNumberParser methodsFor: 'parsing-private' stamp: 'nice 10/29/2013 01:52' prior: 50764479! readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart "at this stage, sign integerPart and a decimal point have been read. try and form a number with a fractionPart" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value | fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: ["No fractionPart found,ungobble the decimal point and return the integerPart" sourceStream skip: -1. ^ neg ifTrue: [integerPart negated] ifFalse: [integerPart]]. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero. self readExponent ifFalse: [(self readScale: numberOfNonZeroFractionDigits + numberOfTrailingZeroInFractionPart) ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]]. fractionPart isZero ifTrue: [mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart). exponent := exponent + numberOfTrailingZeroInIntegerPart] ifFalse: [mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)). exponent := exponent - numberOfNonZeroFractionDigits]. value := self makeFloatFromMantissa: mantissa exponent: exponent base: base. ^ neg ifTrue: [value isZero ifTrue: [Float negativeZero] ifFalse: [value negated]] ifFalse: [value]! ! !SqNumberParser methodsFor: 'parsing-private' stamp: 'nice 10/29/2013 01:51'! readScale: defaultScale "Read the scale if any (stored in instVar). Answer true if found, answer false if none. If scale letter is not followed by a digit, then the defaultScale is used." scale := 0. sourceStream atEnd ifTrue: [ ^ false ]. (sourceStream peekFor: $s) ifFalse: [ ^ false ]. scale := (self nextUnsignedIntegerOrNilBase: 10) ifNil: [defaultScale]. ^ true! ! !ExtendedNumberParser methodsFor: 'parsing-private' stamp: 'nice 10/29/2013 01:52' prior: 21376878! readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart "at this stage, sign integerPart and a decimal point have been read. try and form a number with a fractionPart" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value | fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: [ "No fractionPart found, but can be a 1.e2 syntax" fractionPart := 0. numberOfNonZeroFractionDigits := 0. numberOfTrailingZeroInFractionPart := 0] ifNotNil: [. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero]. self readExponent ifFalse: [(self readScale: numberOfNonZeroFractionDigits + numberOfTrailingZeroInFractionPart) ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]]. fractionPart isZero ifTrue: [mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart). exponent := exponent + numberOfTrailingZeroInIntegerPart] ifFalse: [mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)). exponent := exponent - numberOfNonZeroFractionDigits]. value := self makeFloatFromMantissa: mantissa exponent: exponent base: base. ^ neg ifTrue: [value isZero ifTrue: [Float negativeZero] ifFalse: [value negated]] ifFalse: [value]! ! !ExtendedNumberParser methodsFor: 'parsing-private' stamp: 'nice 10/29/2013 01:53' prior: 21378892! readNumberWithoutIntegerPartOrNil "at this stage, sign followed by a decimal point have been read, but no intergerPart try and form a number with a fractionPart" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value | integerPart := 0. fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: [ "No integer part, no fractionPart, this does not look like a number..." ^nil]. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero. self readExponent ifFalse: [(self readScale: numberOfNonZeroFractionDigits + numberOfTrailingZeroInFractionPart) ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]]. fractionPart isZero ifTrue: [mantissa := 0] ifFalse: [mantissa := (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)). exponent := exponent - numberOfNonZeroFractionDigits]. value := self makeFloatFromMantissa: mantissa exponent: exponent base: base. ^ neg ifTrue: [value isZero ifTrue: [Float negativeZero] ifFalse: [value negated]] ifFalse: [value]! ! !NumberParsingTest methodsFor: 'tests - Integer' stamp: 'nice 10/29/2013 01:56' prior: 28540654! testIntegerReadFrom "Ensure remaining characters in a stream are not lost when parsing an integer." | rs i s | rs := '123s could be confused with a ScaledDecimal' readStream. i := Integer readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 's could be confused with a ScaledDecimal' = s. rs := '123.s could be confused with a ScaledDecimal' readStream. i := Integer readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: '.s could be confused with a ScaledDecimal' = s. rs := '123sA has unary message sA' readStream. i := Number readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 'A has unary message sA' = s. rs := '123sB has unary message sB' readStream. i := Number readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 'B has unary message sB' = s! ! !SqNumberParserTest methodsFor: 'tests - ScaledDecimal' stamp: 'nice 10/29/2013 02:00'! testScaledDecimalWithoutExplicitScale | aDecimal | aDecimal := SqNumberParser parse: '0.50s'. self assert: (aDecimal isKindOf: ScaledDecimal). self assert: 2 equals: aDecimal scale. "description: 'The scale should auto adjust when not provided'"! ! !SqNumberParserTest methodsFor: 'tests - ScaledDecimal' stamp: 'nice 10/29/2013 02:01'! testScaledIntegerWithoutExplicitScale | aDecimal | aDecimal := SqNumberParser parse: '4s'. self assert: (aDecimal isKindOf: ScaledDecimal). self assert: 0 equals: aDecimal scale.! ! !StrikeFont methodsFor: 'displaying' stamp: 'nice 10/29/2013 03:06' prior: 69141525! displayMultiString: aString on: aBitBlt from: startIndex to: stopIndex at: aPoint kern: kernDelta baselineY: baselineY | nextWide destX leftX rightX glyphInfo char destY gfont charIndex | destX := aPoint x. charIndex := startIndex. glyphInfo := Array new: 5. [ charIndex <= stopIndex ] whileTrue: [ nextWide := aString indexOfWideCharacterFrom: charIndex to: stopIndex. nextWide = 0 ifTrue: [nextWide := stopIndex +1]. nextWide > charIndex ifTrue: [ destX := (aBitBlt displayString: aString from: charIndex to: nextWide -1 at: destX @ aPoint y strikeFont: self kern: kernDelta) x. charIndex := nextWide]. nextWide > stopIndex ifFalse: [ char := aString at: charIndex. (self hasGlyphOf: char) ifTrue: [ self glyphInfoOf: char into: glyphInfo. leftX := glyphInfo at: 2. rightX := glyphInfo at: 3. destY := glyphInfo at: 4. gfont := glyphInfo at: 5. (gfont == aBitBlt lastFont) ifFalse: [gfont installOn: aBitBlt]. aBitBlt displayGlyph: (glyphInfo at: 1) at: (destX @ (baselineY - destY)) left: leftX right: rightX font: self. destX := destX + (rightX - leftX + kernDelta). ] ifFalse: [fallbackFont displayString: aString on: aBitBlt from: charIndex to: charIndex at: destX@destY kern: kernDelta baselineY: baselineY. destX := destX + (fallbackFont widthOf: char) + kernDelta. charIndex := charIndex + 1]]]. ^ Array with: charIndex with: aPoint + (destX @ 0)! ! SqNumberParser removeSelector: #readScale! "Files"! "Graphics-Fonts"! "Kernel"! "KernelTests"! "Ring-Core-Kernel"! ----End fileIn----! ----QUIT----an Array(29 October 2013 11:23:45 am) Pharo.image priorSource: 25510492! ----STARTUP----an Array(29 October 2013 11:28:30 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(29 October 2013 11:28:30 am) Pharo-30532.image priorSource: 25533400! ----STARTUP----an Array(31 October 2013 9:31:52 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 10/31/2013 09:26' prior: 75842448! commentForCurrentUpdate ^ '3455 HashedCollection missed abstract method noCheckAdd: https://pharo.fogbugz.com/f/cases/3455 12035 Slot and Protocol should be compact https://pharo.fogbugz.com/f/cases/12035 12034 Accessor to temporaries of context in case of unwinding not explicit https://pharo.fogbugz.com/f/cases/12034 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 10/31/2013 09:26'! script188 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.540.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.17.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-StephaneDucasse.644.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1664.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.436.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1344.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 10/31/2013 09:26'! update30533 "self new update30533" self withUpdateLog: '3455 HashedCollection missed abstract method noCheckAdd: https://pharo.fogbugz.com/f/cases/3455 12035 Slot and Protocol should be compact https://pharo.fogbugz.com/f/cases/12035 12034 Accessor to temporaries of context in case of unwinding not explicit https://pharo.fogbugz.com/f/cases/12034 '. self loadTogether: self script188 merge: false. Slot becomeCompact. Protocol becomeCompact. self flushCaches. ! ! "ScriptLoader30"! !HashedCollection methodsFor: 'private' stamp: 'jordidelgado 10/30/2013 16:49'! noCheckAdd: anObject self subclassResponsibility! ! !ContextPart methodsFor: 'controlling' stamp: 'ClementBera 10/29/2013 13:31' prior: 45215793! restart "Unwind thisContext to self and resume from beginning. Execute unwind blocks when unwinding. ASSUMES self is a sender of thisContext" | context unwindBlock | self isDead ifTrue: [self cannotReturn: nil to: self]. self privRefresh. context := thisContext. [ context := context findNextUnwindContextUpTo: self. context isNil ] whileFalse: [ context unwindComplete ifNil:[ context unwindComplete: true. unwindBlock := context unwindBlock. thisContext terminateTo: context. unwindBlock value ]]. thisContext terminateTo: self. self jump. ! ! !ContextPart methodsFor: 'controlling' stamp: 'ClementBera 10/29/2013 13:33' prior: 45216457! resume: value "Unwind thisContext to self and resume with value as result of last send. Execute unwind blocks when unwinding. ASSUMES self is a sender of thisContext" self resume: value through: (thisContext findNextUnwindContextUpTo: self) ! ! !ContextPart methodsFor: 'controlling' stamp: 'ClementBera 10/29/2013 13:33' prior: 45217125! resume: value through: firstUnwindContext "Unwind thisContext to self and resume with value as result of last send. Execute any unwind blocks while unwinding. ASSUMES self is a sender of thisContext." | context unwindBlock | self isDead ifTrue: [ self cannotReturn: value to: self ]. context := firstUnwindContext. [ context isNil ] whileFalse: [ context unwindComplete ifNil:[ context unwindComplete: true. unwindBlock := context unwindBlock. thisContext terminateTo: context. unwindBlock value]. context := context findNextUnwindContextUpTo: self]. thisContext terminateTo: self. ^value ! ! "Collections-Abstract"! "Kernel"! ----End fileIn----! ----QUIT----an Array(31 October 2013 9:32:29 am) Pharo.image priorSource: 25533607! ----STARTUP----an Array(31 October 2013 9:52:11 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(31 October 2013 9:52:11 am) Pharo-30533.image priorSource: 25547332! ----STARTUP----an Array(1 November 2013 5:51:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/1/2013 17:46' prior: 75865563! commentForCurrentUpdate ^ '12044 Move more more deprecated methods to Deprecated30 https://pharo.fogbugz.com/f/cases/12044 12045 Some underscores zealously replaced by assignment in FreeType https://pharo.fogbugz.com/f/cases/12045 12047 Config browser Refresh does only refresh the list - but not refresh from repository https://pharo.fogbugz.com/f/cases/12047 12036 pointsTo: should not filter compact classes https://pharo.fogbugz.com/f/cases/12036 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/1/2013 17:46'! script189 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.8.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1346.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/1/2013 17:47'! update30534 "self new update30534" self withUpdateLog: '12044 Move more more deprecated methods to Deprecated30 https://pharo.fogbugz.com/f/cases/12044 12045 Some underscores zealously replaced by assignment in FreeType https://pharo.fogbugz.com/f/cases/12045 12047 Config browser Refresh does only refresh the list - but not refresh from repository https://pharo.fogbugz.com/f/cases/12047 12036 pointsTo: should not filter compact classes https://pharo.fogbugz.com/f/cases/12036 '. self loadTogether: self script189 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/16/2013 13:48' prior: 38489697! methodClassAssociation self deprecated: 'use classBinding:' on: '16 May 2013' in: 'Pharo3'. ^self classBinding! ! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/16/2013 13:48' prior: 38489909! methodClassAssociation: aBinding self deprecated: 'use classBinding:' on: '16 May 2013' in: 'Pharo3'. self classBinding: aBinding! ! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/4/2013 08:29' prior: 36756642! who "Answer an Array of the class in which the receiver is defined and the selector to which it corresponds." self deprecated: 'use #methodClass and #selector ' on: '04 May 2013' in: 'Pharo 3.0'. ^{self methodClass. self selector}. ! ! !MetacelloConfigurationBrowserPane methodsFor: 'menu' stamp: 'TorstenBergmann 10/31/2013 12:24' prior: 43750764! configurationListMenu: aMenu aMenu target: self. aMenu title: 'Configuration'. self selectedConfiguration ifNotNil: [ aMenu add: 'Install configuration' action: #installConfiguration. self selectedConfigurationClass isNil ifTrue: [ aMenu add: 'Load configuration' action: #loadConfiguration ] ifFalse: [ aMenu add: 'Browse configuration class' action: #browseConfiguration ]. aMenu addLine ]. aMenu add: 'Switch Repository' action: #switchRepository; add: 'Refresh' action: #refreshRepository. ^aMenu! ! !MetacelloConfigurationBrowserPane methodsFor: 'actions' stamp: 'TorstenBergmann 10/31/2013 12:27'! refreshRepository self repository: self repository. self configurationPattern: configurationPattern ! ! !FreeTypeNameParser methodsFor: 'initialization' stamp: 'nice 10/30/2013 21:39' prior: 48966470! initialize super initialize. delimiters := ',.-_'. Character separators do:[:c | delimiters := delimiters , c asString]. ! ! !FreeTypeNameParser methodsFor: 'parsing' stamp: 'nice 10/30/2013 21:39' prior: 22779495! tokenize: aString "answer an OrderedCollection of {string. start. end} tuples. tokens are separated by $- $_ $, $. and whitespace" | currentTokens answer start | currentTokens := aString findTokens: delimiters keep: delimiters. answer := OrderedCollection new. start := 1. currentTokens do:[:tok | (delimiters includes: tok first) ifFalse:[answer add: {tok. start. start+tok size - 1}]. start := start + tok size]. ^answer! ! !ProtoObject methodsFor: 'pointing to' stamp: 'MarcusDenker 10/29/2013 21:21' prior: 48825791! pointsTo: anObject "Answers true if I hold a reference to anObject, or false otherwise an object points to a class via the header either directly or indirectly via the compact classes array" ^ (self instVarsInclude: anObject) or: [ ^self class == anObject]! ! !Compiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 37185949! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass ! ! !Compiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 37186207! decompile: aSelector in: aClass method: aMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !Compiler class methodsFor: 'utilities' stamp: 'MarcusDenker 5/1/2013 12:06' prior: 36218766! decompileMethod: aCompiledMethod ^Decompiler new decompileMethod: aCompiledMethod ! ! !FT2Face methodsFor: 'testing' stamp: 'tween 8/7/2006 08:47' prior: 21735555! isFixedWidth styleFlags == nil ifTrue:[^false]. ^faceFlags allMask: 4 "FT_FACE_FLAG_FIXED_WIDTH" ! ! !FreeTypeFontProvider methodsFor: 'file paths' stamp: 'nice 10/30/2013 21:38' prior: 22743877! getWindowsFontFolderPath "Answer the windows font folder path. This is obtained through the Windows API if FFI is present, otherwise it is a guess !!" | externalLibraryClass externalTypeClass fun buff | externalLibraryClass := Smalltalk globals at: #ExternalLibraryFunction ifAbsent: [ ]. externalTypeClass := Smalltalk globals at: #ExternalType ifAbsent: [ ]. (externalLibraryClass isNil or: [ externalTypeClass isNil ]) ifTrue: [ ^ self guessWindowsFontFolderPath ]. fun := externalLibraryClass name: 'SHGetFolderPathA' module: 'shfolder.dll' callType: 1 returnType: externalTypeClass long argumentTypes: {(externalTypeClass long). (externalTypeClass long). (externalTypeClass long). (externalTypeClass long). (externalTypeClass char asPointerType)}. buff := ByteArray new: 1024. [ | r | r := fun invokeWith: 0 with: 16r0014 with: 0 with: 0 with: buff "CSIDL_FONTS" ] on: Error do: [ :e | "will get error if ffiplugin is missing" ^ self guessWindowsFontFolderPath ]. ^ (buff copyFrom: 1 to: (buff indexOf: 0) - 1) asString! ! !FreeTypeFont methodsFor: 'displaying' stamp: 'tween 3/17/2007 11:30' prior: 22677134! displayStrikeoutOn: aDisplayContext from: baselineStartPoint to: baselineEndPoint | top bottom strikeoutThickness s e | "the strikeout size/position for TrueType fonts should really come from the TT_OS2 table. This needs to be read by the plugin when the face is created. For now, we use the underlineThickness, and 1/4 of the ascender from the baseline" strikeoutThickness := (self face underlineThickness * self pixelSize / self face unitsPerEm). top := ((self face ascender / 4) * self pixelSize / self face unitsPerEm) negated - (strikeoutThickness/2). top := top rounded. bottom := top + strikeoutThickness ceiling. s := baselineStartPoint + (0@top). e := baselineEndPoint + (0@bottom). self displayLineGlyphOn: aDisplayContext from: s to: e ! ! "Compiler"! "Deprecated30"! "FreeType"! "Kernel"! "Tools"! ----End fileIn----! ----QUIT----an Array(1 November 2013 5:51:44 pm) Pharo.image priorSource: 25547537! ----STARTUP----an Array(1 November 2013 5:56:23 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(1 November 2013 5:56:23 pm) Pharo-30534.image priorSource: 25565362! ----STARTUP----an Array(2 November 2013 2:23:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 14:21' prior: 75879491! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/1)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 14:21'! script190 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.174.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.14.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1346.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 14:21'! update30535 "self new update30535" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/1)'. self loadTogether: self script190 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LegacyCharacterScanner commentStamp: '' prior: 0! My instances hold the state associated with scanning text. My subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms.! !LegacyCharacterBlockScanner commentStamp: '' prior: 0! My instances are used to scan text to compute the CharacterBlock for a character specified by its index in the text or its proximity to the cursor location.! !LegacyCompositionScanner commentStamp: '' prior: 0! CompositionScanners are used to measure text and determine where line breaks and space padding should occur.! !LegacyCharacterScanner commentStamp: '' prior: 75908627! My instances hold the state associated with scanning text. My subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms.! !LegacyCharacterBlockScanner commentStamp: '' prior: 75908878! My instances are used to scan text to compute the CharacterBlock for a character specified by its index in the text or its proximity to the cursor location.! !LegacyCharacterBlockScanner methodsFor: 'scanning' stamp: 'MarcusDenker 10/3/2013 23:45'! characterBlockAtPoint: aPoint index: index in: textLine "This method is the Morphic characterBlock finder. It combines MVC's characterBlockAtPoint:, -ForIndex:, and buildCharcterBlock:in:" | runLength lineStop done stopCondition | line := textLine. rightMargin := line rightMargin. lastIndex := line first. self setStopConditions. "also sets font" characterIndex := index. " == nil means scanning for point" characterPoint := aPoint. (characterPoint isNil or: [characterPoint y > line bottom]) ifTrue: [characterPoint := line bottomRight]. (text isEmpty or: [(characterPoint y < line top or: [characterPoint x < line left]) or: [characterIndex notNil and: [characterIndex < line first]]]) ifTrue: [^ (CharacterBlock new stringIndex: line first text: text topLeft: line leftMargin@line top extent: 0 @ textStyle lineGrid) textLine: line]. destX := leftMargin := line leftMarginForAlignment: alignment. destY := line top. runLength := text runLengthFor: line first. lineStop := characterIndex ifNotNil: [characterIndex "scanning for index"] ifNil: [line last "scanning for point"]. runStopIndex := lastIndex + (runLength - 1) min: lineStop. lastCharacterExtent := 0 @ line lineHeight. spaceCount := 0. done := false. [done] whileFalse: [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: characterPoint x stopConditions: stopConditions kern: kern. "see setStopConditions for stopping conditions for character block operations." self lastCharacterExtentSetX: (specialWidth ifNil: [font widthOf: (text at: lastIndex)] ifNotNil: [specialWidth]). (self perform: stopCondition) ifTrue: [characterIndex ifNil: [ "Result for characterBlockAtPoint: " (stopCondition ~~ #cr and: [ lastIndex == line last and: [ aPoint x > ((characterPoint x) + (lastCharacterExtent x / 2)) ]]) ifTrue: [ "Correct for right half of last character in line" ^ (CharacterBlock new stringIndex: lastIndex + 1 text: text topLeft: characterPoint + (lastCharacterExtent x @ 0) + (font descentKern @ 0) extent: 0 @ lastCharacterExtent y) textLine: line ]. ^ (CharacterBlock new stringIndex: lastIndex text: text topLeft: characterPoint + (font descentKern @ 0) extent: lastCharacterExtent - (font baseKern @ 0)) textLine: line] ifNotNil: ["Result for characterBlockForIndex: " ^ (CharacterBlock new stringIndex: characterIndex text: text topLeft: characterPoint + ((font descentKern) - kern @ 0) extent: lastCharacterExtent) textLine: line]]]! ! !LegacyCharacterBlockScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! characterPointSetX: xVal characterPoint := xVal @ characterPoint y! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 11/30/2009 23:04'! cr "Answer a CharacterBlock that specifies the current location of the mouse relative to a carriage return stop condition that has just been encountered. The ParagraphEditor convention is to denote selections by CharacterBlocks, sometimes including the carriage return (cursor is at the end) and sometimes not (cursor is in the middle of the text)." ((characterIndex ~= nil and: [ characterIndex > text size ]) or: [ line last = text size and: [ destY + line lineHeight < characterPoint y ] ]) ifTrue: [ "When off end of string, give data for next character" destY := destY + line lineHeight. lastCharacter := nil. characterPoint := (nextLeftMargin ifNil: [ leftMargin ]) @ destY. (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]]) ifTrue: [lastIndex := lastIndex + 2] ifFalse: [lastIndex := lastIndex + 1]. self lastCharacterExtentSetX: 0. ^ true ]. lastCharacter := CR. characterPoint := destX @ destY. self lastCharacterExtentSetX: rightMargin - destX. ^ true! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 12:49'! crossedX "Text display has wrapping. The scanner just found a character past the x location of the cursor. We know that the cursor is pointing at a character or before one." | leadingTab currentX | characterIndex == nil ifFalse: [ "If the last character of the last line is a space, and it crosses the right margin, then locating the character block after it is impossible without this hack." characterIndex > text size ifTrue: [ lastIndex := characterIndex. characterPoint := (nextLeftMargin ifNil: [leftMargin]) @ (destY + line lineHeight). ^true]]. characterPoint x <= (destX + (lastCharacterExtent x // 2)) ifTrue: [lastCharacter := (text at: lastIndex). characterPoint := destX @ destY. ^true]. lastIndex >= line last ifTrue: [lastCharacter := (text at: line last). characterPoint := destX @ destY. ^true]. "Pointing past middle of a character, return the next character." lastIndex := lastIndex + 1. lastCharacter := text at: lastIndex. currentX := destX + lastCharacterExtent x + kern. self lastCharacterExtentSetX: (font widthOf: lastCharacter). characterPoint := currentX @ destY. lastCharacter = Space ifFalse: [^ true]. "Yukky if next character is space or tab." alignment = Justified ifTrue: [self lastCharacterExtentSetX: (lastCharacterExtent x + (line justifiedPadFor: (spaceCount + 1) font: font)). ^ true]. true ifTrue: [^ true]. "NOTE: I find no value to the following code, and so have defeated it - DI" "See tabForDisplay for illumination on the following awfulness." leadingTab := true. line first to: lastIndex - 1 do: [:index | (text at: index) ~= Tab ifTrue: [leadingTab := false]]. (alignment ~= Justified or: [leadingTab]) ifTrue: [self lastCharacterExtentSetX: (textStyle nextTabXFrom: currentX leftMargin: leftMargin rightMargin: rightMargin) - currentX] ifFalse: [self lastCharacterExtentSetX: (((currentX + (textStyle tabWidth - (line justifiedTabDeltaFor: spaceCount))) - currentX) max: 0)]. ^ true! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'lr 7/4/2009 10:42'! endOfRun "Before arriving at the cursor location, the selection has encountered an end of run. Answer false if the selection continues, true otherwise. Set up indexes for building the appropriate CharacterBlock." | runLength lineStop | (((characterIndex ~~ nil and: [ runStopIndex < characterIndex and: [ runStopIndex < text size ] ]) or: [ characterIndex == nil and: [ lastIndex < line last ] ]) or: [ lastIndex < line last and: [ (text at: lastIndex) leadingChar ~= (text at: lastIndex + 1) leadingChar and: [ lastIndex ~= characterIndex ] ] ]) ifTrue: [ "We're really at the end of a real run." runLength := text runLengthFor: (lastIndex := lastIndex + 1). characterIndex ~~ nil ifTrue: [ lineStop := characterIndex "scanning for index" ] ifFalse: [ lineStop := line last "scanning for point" ]. (runStopIndex := lastIndex + (runLength - 1)) > lineStop ifTrue: [ runStopIndex := lineStop ]. self setStopConditions. ^ false ]. lastCharacter := text at: lastIndex. characterPoint := destX @ destY. ((lastCharacter = Space and: [ alignment = Justified ]) or: [ lastCharacter = Tab and: [ lastSpaceOrTabExtent notNil ] ]) ifTrue: [ lastCharacterExtent := lastSpaceOrTabExtent ]. characterIndex ~~ nil ifTrue: [ "If scanning for an index and we've stopped on that index, then we back destX off by the width of the character stopped on (it will be pointing at the right side of the character) and return" runStopIndex = characterIndex ifTrue: [ self characterPointSetX: destX - lastCharacterExtent x. ^ true ]. "Otherwise the requested index was greater than the length of the string. Return string size + 1 as index, indicate further that off the string by setting character to nil and the extent to 0." lastIndex := lastIndex + 1. lastCharacter := nil. self lastCharacterExtentSetX: 0. ^ true ]. "Scanning for a point and either off the end of the line or off the end of the string." runStopIndex = text size ifTrue: [ "off end of string" lastIndex := lastIndex + 1. lastCharacter := nil. self lastCharacterExtentSetX: 0. ^ true ]. "just off end of line without crossing x" lastIndex := lastIndex + 1. ^ true! ! !LegacyCharacterBlockScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! indentationLevel: anInteger super indentationLevel: anInteger. nextLeftMargin := leftMargin. indentationLevel timesRepeat: [ nextLeftMargin := textStyle nextTabXFrom: nextLeftMargin leftMargin: leftMargin rightMargin: rightMargin ]! ! !LegacyCharacterBlockScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! lastCharacterExtentSetX: xVal lastCharacterExtent := xVal @ lastCharacterExtent y! ! !LegacyCharacterBlockScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! lastSpaceOrTabExtentSetX: xVal lastSpaceOrTabExtent := xVal @ lastSpaceOrTabExtent y! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 12:50'! paddedSpace "When the line is justified, the spaces will not be the same as the font's space character. A padding of extra space must be considered in trying to find which character the cursor is pointing at. Answer whether the scanning has crossed the cursor." | pad | pad := 0. spaceCount := spaceCount + 1. pad := line justifiedPadFor: spaceCount font: font. lastSpaceOrTabExtent := lastCharacterExtent copy. self lastSpaceOrTabExtentSetX: spaceWidth + pad. (destX + lastSpaceOrTabExtent x) >= characterPoint x ifTrue: [lastCharacterExtent := lastSpaceOrTabExtent copy. ^self crossedX]. lastIndex := lastIndex + 1. destX := destX + lastSpaceOrTabExtent x. ^ false ! ! !LegacyCharacterBlockScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! placeEmbeddedObject: anchoredMorph "Workaround: The following should really use #textAnchorType" anchoredMorph relativeTextAnchorPosition ifNotNil: [ ^ true ]. (super placeEmbeddedObject: anchoredMorph) ifFalse: [ ^ false ]. specialWidth := anchoredMorph width. ^ true! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'lr 7/4/2009 10:42'! setFont specialWidth := nil. super setFont! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'ar 10/18/2004 14:30'! setStopConditions "Set the font and the stop conditions for the current run." self setFont. self setConditionArray: (alignment = Justified ifTrue: [#paddedSpace]). ! ! !LegacyCharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 4/19/2011 00:20'! tab | currentX | currentX := (alignment = Justified and: [ self leadingTab not ]) ifTrue: [ "imbedded tabs in justified text are weird" destX + (textStyle tabWidth - (line justifiedTabDeltaFor: spaceCount)) max: destX ] ifFalse: [ textStyle nextTabXFrom: destX leftMargin: leftMargin rightMargin: rightMargin ]. lastSpaceOrTabExtent := lastCharacterExtent copy. self lastSpaceOrTabExtentSetX: (currentX - destX max: 0). currentX >= characterPoint x ifTrue: [ lastCharacterExtent := lastSpaceOrTabExtent copy. ^ self crossedX ]. destX := currentX. lastIndex := lastIndex + 1. ^ false! ! !LegacyCharacterScanner class methodsFor: 'class initialization' stamp: 'nice 3/8/2010 11:51'! initialize " CharacterScanner initialize " | a | a := TextStopConditions new. a at: 1 + 1 put: #embeddedObject. a at: Tab asciiValue + 1 put: #tab. a at: CR asciiValue + 1 put: #cr. a at: Character lf asciiValue + 1 put: #cr. NilCondition := a copy. DefaultStopConditions := a copy. PaddedSpaceCondition := a copy. PaddedSpaceCondition at: Space asciiValue + 1 put: #paddedSpace. SpaceCondition := a copy. SpaceCondition at: Space asciiValue + 1 put: #space. ! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! addEmphasis: code "Set the bold-ital-under-strike emphasis." emphasisCode := emphasisCode bitOr: code! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! addKern: kernDelta "Set the current kern amount." kern := kern + kernDelta! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'BenjaminVanRyseghem 2/19/2013 17:18'! basicScanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta "Primitive. This is the inner loop of text display--but see scanCharactersFrom: to:rightX: which would get the string, stopConditions and displaying from the instance. March through source String from startIndex to stopIndex. If any character is flagged with a non-nil entry in stops, then return the corresponding value. Determine width of each character from xTable, indexed by map. If dextX would exceed rightX, then return stops at: 258. Advance destX by the width of the character. If stopIndex has been reached, then return stops at: 257. Optional. See Object documentation whatIsAPrimitive." | ascii nextDestX char floatDestX widthAndKernedWidth nextChar atEndOfRun | lastIndex := startIndex. floatDestX := destX. widthAndKernedWidth := Array new: 2. atEndOfRun := false. [lastIndex <= stopIndex] whileTrue: [char := (sourceString at: lastIndex). ascii := char asciiValue + 1. (stops at: ascii) == nil ifFalse: [^stops at: ascii]. "Note: The following is querying the font about the width since the primitive may have failed due to a non-trivial mapping of characters to glyphs or a non-existing xTable." nextChar := (lastIndex + 1 <= stopIndex) ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ atEndOfRun := true. "if there is a next char in sourceString, then get the kern and store it in pendingKernX" lastIndex + 1 <= sourceString size ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ nil]]. font widthAndKernedWidthOfLeft: char right: nextChar into: widthAndKernedWidth. nextDestX := floatDestX + (widthAndKernedWidth at: 1). nextDestX > rightX ifTrue: [^stops crossedX]. floatDestX := floatDestX + kernDelta + (widthAndKernedWidth at: 2). atEndOfRun ifTrue:[ pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1). floatDestX := floatDestX - pendingKernX]. destX := floatDestX. lastIndex := lastIndex + 1]. lastIndex := stopIndex. ^stops endOfRun! ! !LegacyCharacterScanner methodsFor: 'scanner methods' stamp: 'tween 4/6/2007 11:16'! columnBreak pendingKernX := 0. ^true! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! embeddedObject | savedIndex | savedIndex := lastIndex. text attributesAt: lastIndex do: [ :attr | attr anchoredMorph ifNotNil: [ "Following may look strange but logic gets reversed. If the morph fits on this line we're not done (return false for true) and if the morph won't fit we're done (return true for false)" (self placeEmbeddedObject: attr anchoredMorph) ifFalse: [ ^ true ] ] ]. lastIndex := savedIndex + 1. "for multiple(!!) embedded morphs" ^ false! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'hmm 7/15/2000 22:40'! handleIndentation self indentationLevel timesRepeat: [ self plainTab]! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'ar 5/17/2000 18:20'! indentationLevel "return the number of tabs that are currently being placed at the beginning of each line" ^indentationLevel ifNil:[0]! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! indentationLevel: anInteger "set the number of tabs to put at the beginning of each line" indentationLevel := anInteger! ! !LegacyCharacterScanner methodsFor: 'initialization' stamp: 'MarcusDenker 11/20/2012 10:04'! initialize super initialize. destX := destY := leftMargin := 0. wantsColumnBreaks := false.! ! !LegacyCharacterScanner methodsFor: 'initialize' stamp: 'ul 3/8/2010 04:44'! initializeStringMeasurer stopConditions := TextStopConditions new ! ! !LegacyCharacterScanner methodsFor: 'scanner methods' stamp: 'yo 12/18/2002 12:32'! isBreakableAtIndex: index ^ (EncodedCharSet at: ((text at: index) leadingChar + 1)) isBreakableAt: index in: text. ! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'ar 1/8/2000 14:23'! leadingTab "return true if only tabs lie to the left" line first to: lastIndex do: [:i | (text at: i) == Tab ifFalse: [^ false]]. ^ true! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! measureString: aString inFont: aFont from: startIndex to: stopIndex "WARNING: In order to use this method the receiver has to be set up using #initializeStringMeasurer" destX := destY := lastIndex := 0. xTable := aFont xTable. self scanCharactersFrom: startIndex to: stopIndex in: aString rightX: 999999 stopConditions: stopConditions kern: 0. ^ destX! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! placeEmbeddedObject: anchoredMorph "Place the anchoredMorph or return false if it cannot be placed. In any event, advance destX by its width." "Workaround: The following should really use #textAnchorType" | w | anchoredMorph relativeTextAnchorPosition ifNotNil: [ ^ true ]. destX := destX + (w := anchoredMorph width). (destX > rightMargin and: [ leftMargin + w <= rightMargin ]) ifTrue: [ "Won't fit, but would on next line" ^ false ]. lastIndex := lastIndex + 1. self setFont. "Force recalculation of emphasis for next run" ^ true! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'nice 3/16/2010 20:38'! plainTab "This is the basic method of adjusting destX for a tab." destX := (alignment = Justified and: [ self leadingTab not ]) ifTrue: [ "embedded tabs in justified text are weird" destX + (textStyle tabWidth - (line justifiedTabDeltaFor: spaceCount)) max: destX ] ifFalse: [ textStyle nextTabXFrom: destX leftMargin: leftMargin rightMargin: rightMargin ]! ! !LegacyCharacterScanner methodsFor: 'scanning' stamp: 'nice 3/6/2010 14:47'! scanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta | startEncoding selector | sourceString isByteString ifTrue: [ ^ self basicScanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta ]. sourceString isWideString ifTrue: [ startIndex > stopIndex ifTrue: [ lastIndex := stopIndex. ^ stops endOfRun ]. startEncoding := (sourceString at: startIndex) leadingChar. selector := (EncodedCharSet charsetAt: startEncoding) scanSelector. ^ self perform: selector withArguments: (Array with: startIndex with: stopIndex with: sourceString with: rightX with: stops with: kernDelta) ]. ^ stops endOfRun! ! !LegacyCharacterScanner methodsFor: 'scanner methods' stamp: 'MarcusDenker 7/9/2012 21:43'! scanJapaneseCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta | ascii encoding f nextDestX maxAscii startEncoding | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [ lastIndex := stopIndex. ^ stops endOfRun ]. startEncoding := (sourceString at: startIndex) leadingChar. font ifNil: [ font := (TextSharedInformation at: #DefaultMultiStyle) fontArray at: 1 ]. (font isFontSet) ifTrue: [ maxAscii := font maxAsciiFor: startEncoding. f := font fontArray at: startEncoding + 1. "xTable := f xTable. maxAscii := xTable size - 2." spaceWidth := f widthOf: Space ] ifFalse: [ maxAscii := font maxAscii ]. [ lastIndex <= stopIndex ] whileTrue: [ encoding := (sourceString at: lastIndex) leadingChar. encoding ~= startEncoding ifTrue: [ lastIndex := lastIndex - 1. ^ stops endOfRun ]. ascii := (sourceString at: lastIndex) charCode. ascii > maxAscii ifTrue: [ ascii := maxAscii ]. (encoding = 0 and: [ascii < stops size and: [ (stopConditions at: ascii + 1) ~~ nil ]]) ifTrue: [ ^ stops at: ascii + 1 ]. nextDestX := destX + (font widthOf: (sourceString at: lastIndex)). nextDestX > rightX ifTrue: [ ^ stops crossedX ]. destX := nextDestX + kernDelta. "destX printString displayAt: 0@(lastIndex*20)." lastIndex := lastIndex + 1 ]. lastIndex := stopIndex. ^ stops endOfRun! ! !LegacyCharacterScanner methodsFor: 'scanner methods' stamp: 'MarcusDenker 7/9/2012 21:43'! scanMultiCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta | ascii encoding f nextDestX maxAscii startEncoding | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [ lastIndex := stopIndex. ^ stops endOfRun ]. startEncoding := (sourceString at: startIndex) leadingChar. font ifNil: [ font := (TextSharedInformation at: #DefaultMultiStyle) fontArray at: 1 ]. font isFontSet ifTrue: [ maxAscii := font maxAsciiFor: startEncoding. f := font fontArray at: startEncoding + 1. spaceWidth := f widthOf: Space ] ifFalse: [ maxAscii := font maxAscii ]. [ lastIndex <= stopIndex ] whileTrue: [ encoding := (sourceString at: lastIndex) leadingChar. encoding ~= startEncoding ifTrue: [ lastIndex := lastIndex - 1. ^ stops endOfRun ]. ascii := (sourceString at: lastIndex) charCode. ascii > maxAscii ifTrue: [ ascii := maxAscii ]. (encoding = 0 and: [ascii < stops size and: [ (stopConditions at: ascii + 1) ~~ nil ]]) ifTrue: [ ^ stops at: ascii + 1 ]. nextDestX := destX + (font widthOf: (sourceString at: lastIndex)). nextDestX > rightX ifTrue: [ ^ stops crossedX ]. destX := nextDestX + kernDelta. "destX printString displayAt: 0@(lastIndex*20)." lastIndex := lastIndex + 1 ]. lastIndex := stopIndex. ^ stops endOfRun! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! setActualFont: aFont "Set the basal font to an isolated font reference." font := aFont! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! setAlignment: style alignment := style! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! setConditionArray: aSymbol aSymbol == #paddedSpace ifTrue: [ ^ stopConditions := PaddedSpaceCondition copy ]. aSymbol == #space ifTrue: [ ^ stopConditions := SpaceCondition copy ]. aSymbol == nil ifTrue: [ ^ stopConditions := NilCondition copy ]. self error: 'undefined stopcondition for space character'! ! !LegacyCharacterScanner methodsFor: 'scanner methods' stamp: 'tween 4/6/2007 09:59'! setFont | priorFont | "Set the font and other emphasis." priorFont := font. text == nil ifFalse:[ emphasisCode := 0. kern := 0. indentationLevel := 0. alignment := textStyle alignment. font := nil. (text attributesAt: lastIndex forStyle: textStyle) do: [:att | att emphasizeScanner: self]]. font == nil ifTrue: [self setFont: textStyle defaultFontIndex]. font := font emphasized: emphasisCode. priorFont ifNotNil: [ font = priorFont ifTrue:[ "font is the same, perhaps the color has changed? We still want kerning between chars of the same font, but of different color. So add any pending kern to destX" destX := destX + (pendingKernX ifNil:[0])]. destX := destX + priorFont descentKern]. pendingKernX := 0. "clear any pending kern so there is no danger of it being added twice" destX := destX - font descentKern. "NOTE: next statement should be removed when clipping works" leftMargin ifNotNil: [destX := destX max: leftMargin]. kern := kern - font baseKern. "Install various parameters from the font." spaceWidth := font widthOf: Space. xTable := font xTable. stopConditions := DefaultStopConditions.! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'ar 1/8/2000 14:28'! setFont: fontNumber "Set the font by number from the textStyle." self setActualFont: (textStyle fontAt: fontNumber)! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'lr 7/4/2009 10:42'! text: t textStyle: ts text := t. textStyle := ts! ! !LegacyCharacterScanner methodsFor: 'private' stamp: 'ar 1/8/2000 14:28'! textColor: ignored "Overridden in DisplayScanner"! ! !LegacyCharacterScanner methodsFor: 'initialize' stamp: 'lr 7/4/2009 10:42'! wantsColumnBreaks: aBoolean wantsColumnBreaks := aBoolean! ! !LegacyCompositionScanner commentStamp: '' prior: 75909101! CompositionScanners are used to measure text and determine where line breaks and space padding should occur.! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:13'! columnBreak "Answer true. Set up values for the text line interval currently being composed." pendingKernX := 0. line stop: lastIndex. spaceX := destX. line paddingWidth: rightMargin - spaceX. ^true! ! !LegacyCompositionScanner methodsFor: 'scanning' stamp: 'nice 3/16/2010 20:42'! composeFrom: startIndex inRectangle: lineRectangle firstLine: firstLine leftSide: leftSide rightSide: rightSide "Answer an instance of TextLineInterval that represents the next line in the paragraph." "Set up margins" | runLength stopCondition | leftMargin := lineRectangle left. leftSide ifTrue: [ leftMargin := leftMargin + (firstLine ifTrue: [ textStyle firstIndent ] ifFalse: [ textStyle restIndent ]) ]. destX := spaceX := leftMargin. rightMargin := lineRectangle right. rightSide ifTrue: [ rightMargin := rightMargin - textStyle rightIndent ]. lastIndex := startIndex. "scanning sets last index" destY := lineRectangle top. lineHeight := baseline := 0. "Will be increased by setFont" self setStopConditions. "also sets font" runLength := text runLengthFor: startIndex. runStopIndex := (lastIndex := startIndex) + (runLength - 1). line := (TextLine start: lastIndex stop: 0 internalSpaces: 0 paddingWidth: 0) rectangle: lineRectangle. spaceCount := 0. self handleIndentation. leftMargin := destX. line leftMargin: leftMargin. [ stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: rightMargin stopConditions: stopConditions kern: kern. "See setStopConditions for stopping conditions for composing." self perform: stopCondition ] whileFalse. ^ line lineHeight: lineHeight + textStyle leading baseline: baseline + textStyle leading! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'nice 11/16/2009 09:23'! cr "Answer true. Set up values for the text line interval currently being composed." pendingKernX := 0. (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]]) ifTrue: [lastIndex := lastIndex + 1]. line stop: lastIndex. spaceX := destX. line paddingWidth: rightMargin - spaceX. ^true! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:14'! crossedX "There is a word that has fallen across the right edge of the composition rectangle. This signals the need for wrapping which is done to the last space that was encountered, as recorded by the space stop condition." pendingKernX := 0. spaceCount >= 1 ifTrue: ["The common case. First back off to the space at which we wrap." line stop: spaceIndex. lineHeight := lineHeightAtSpace. baseline := baselineAtSpace. spaceCount := spaceCount - 1. spaceIndex := spaceIndex - 1. "Check to see if any spaces preceding the one at which we wrap. Double space after punctuation, most likely." [(spaceCount > 1 and: [(text at: spaceIndex) = Space])] whileTrue: [spaceCount := spaceCount - 1. "Account for backing over a run which might change width of space." font := text fontAt: spaceIndex withStyle: textStyle. spaceIndex := spaceIndex - 1. spaceX := spaceX - (font widthOf: Space)]. line paddingWidth: rightMargin - spaceX. line internalSpaces: spaceCount] ifFalse: ["Neither internal nor trailing spaces -- almost never happens." lastIndex := lastIndex - 1. [destX <= rightMargin] whileFalse: [destX := destX - (font widthOf: (text at: lastIndex)). lastIndex := lastIndex - 1]. spaceX := destX. line paddingWidth: rightMargin - destX. line stop: (lastIndex max: line first)]. ^true! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'lr 7/4/2009 10:42'! endOfRun "Answer true if scanning has reached the end of the paragraph. Otherwise step conditions (mostly install potential new font) and answer false." | runLength | lastIndex = text size ifTrue: [ line stop: lastIndex. spaceX := destX. line paddingWidth: rightMargin - destX. ^ true ] ifFalse: [ runLength := text runLengthFor: (lastIndex := lastIndex + 1). runStopIndex := lastIndex + (runLength - 1). self setStopConditions. ^ false ]! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'lr 7/4/2009 10:42'! placeEmbeddedObject: anchoredMorph "Workaround: The following should really use #textAnchorType" | descent | anchoredMorph relativeTextAnchorPosition ifNotNil: [ ^ true ]. (super placeEmbeddedObject: anchoredMorph) ifFalse: [ "It doesn't fit" "But if it's the first character then leave it here" lastIndex < line first ifFalse: [ line stop: lastIndex - 1. ^ false ] ]. descent := lineHeight - baseline. lineHeight := lineHeight max: anchoredMorph height. baseline := lineHeight - descent. line stop: lastIndex. ^ true! ! !LegacyCompositionScanner methodsFor: 'accessing' stamp: 'ar 1/8/2000 14:35'! rightX "Meaningful only when a line has just been composed -- refers to the line most recently composed. This is a subtrefuge to allow for easy resizing of a composition rectangle to the width of the maximum line. Useful only when there is only one line in the form or when each line is terminated by a carriage return. Handy for sizing menus and lists." ^spaceX! ! !LegacyCompositionScanner methodsFor: 'scanning' stamp: 'lr 7/4/2009 10:42'! setActualFont: aFont "Keep track of max height and ascent for auto lineheight" | descent | super setActualFont: aFont. lineHeight == nil ifTrue: [ descent := font descent. baseline := font ascent. lineHeight := baseline + descent ] ifFalse: [ descent := lineHeight - baseline max: font descent. baseline := baseline max: font ascent. lineHeight := lineHeight max: baseline + descent ]! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'MarcusDenker 11/20/2012 10:01'! setFont super setFont. stopConditions == DefaultStopConditions ifTrue: [ stopConditions := stopConditions copy ]. stopConditions at: Space asciiValue + 1 put: #space. wantsColumnBreaks ifTrue: [ stopConditions at: TextComposer characterForColumnBreak asciiValue + 1 put: #columnBreak ]! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'ar 1/8/2000 14:37'! setStopConditions "Set the font and the stop conditions for the current run." self setFont! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:14'! space "Record left x and character index of the space character just encounted. Used for wrap-around. Answer whether the character has crossed the right edge of the composition rectangle of the paragraph." pendingKernX := 0. spaceX := destX. destX := spaceX + spaceWidth. spaceIndex := lastIndex. lineHeightAtSpace := lineHeight. baselineAtSpace := baseline. lastIndex := lastIndex + 1. spaceCount := spaceCount + 1. destX > rightMargin ifTrue: [^self crossedX]. ^false ! ! !LegacyCompositionScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:15'! tab "Advance destination x according to tab settings in the paragraph's textStyle. Answer whether the character has crossed the right edge of the composition rectangle of the paragraph." pendingKernX := 0. destX := textStyle nextTabXFrom: destX leftMargin: leftMargin rightMargin: rightMargin. destX > rightMargin ifTrue: [^self crossedX]. lastIndex := lastIndex + 1. ^false ! ! MultiDisplayScanner removeSelector: #presentationText:! MultiCompositionScanner removeSelector: #removeLastCharFromPresentation! MultiCompositionScanner removeSelector: #presentationLine! MultiCompositionScanner removeSelector: #presentation! MultiCompositionScanner removeSelector: #getPresentationLine! MultiCompositionScanner removeSelector: #getPresentation! MultiCompositionScanner removeSelector: #addCharToPresentation:! MultiCharacterScanner removeSelector: #removeLastCharFromPresentation! MultiCharacterScanner removeSelector: #addCharToPresentation:! "Text-Scanning"! ----End fileIn----! ----QUIT----an Array(2 November 2013 2:23:39 pm) Pharo.image priorSource: 25565567! ----STARTUP----an Array(2 November 2013 2:28:16 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 2:28:16 pm) Pharo-30535.image priorSource: 25610797! ----STARTUP----an Array(2 November 2013 2:47:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 14:44' prior: 75897521! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/2) 12053 Smalltalk tools remove: #objectExplorer https://pharo.fogbugz.com/f/cases/12053'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 14:45'! script191 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.175.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.113.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.14.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 14:45'! update30536 "self new update30536" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/2) 12053 Smalltalk tools remove: #objectExplorer https://pharo.fogbugz.com/f/cases/12053'. self loadTogether: self script191 merge: false. Smalltalk tools remove: #objectExplorer. . self flushCaches. ! ! "ScriptLoader30"! !TextComposer methodsFor: 'composition' stamp: 'nice 10/27/2013 22:27' prior: 52543248! composeLinesFrom: argStart to: argStop delta: argDelta into: argLinesCollection priorLines: argPriorLines atY: argStartY textStyle: argTextStyle text: argText container: argContainer wantsColumnBreaks: argWantsColumnBreaks wantsColumnBreaks := argWantsColumnBreaks. lines := argLinesCollection. theTextStyle := argTextStyle. theText := argText. theContainer := argContainer. deltaCharIndex := argDelta. currCharIndex := startCharIndex := argStart. stopCharIndex := argStop. prevLines := argPriorLines. currentY := argStartY. defaultLineHeight := theTextStyle lineGrid. maxRightX := theContainer left. possibleSlide := stopCharIndex < theText size and: [theContainer isMemberOf: Rectangle]. nowSliding := false. prevIndex := 1. scanner := LegacyCompositionScanner new text: theText textStyle: theTextStyle. scanner wantsColumnBreaks: wantsColumnBreaks. isFirstLine := true. self composeAllLines. isFirstLine ifTrue: ["No space in container or empty text" self addNullLineWithIndex: startCharIndex andRectangle: (theContainer left @ theContainer top extent: 0 @ defaultLineHeight)] ifFalse: [self fixupLastLineIfCR]. ^ {lines asArray. maxRightX}! ! !TextComposer methodsFor: 'protocol' stamp: 'nice 10/29/2013 03:39' prior: 52544911! multiComposeLinesFrom: argStart to: argStop delta: argDelta into: argLinesCollection priorLines: argPriorLines atY: argStartY textStyle: argTextStyle text: argText container: argContainer wantsColumnBreaks: argWantsColumnBreaks wantsColumnBreaks := argWantsColumnBreaks. lines := argLinesCollection. theTextStyle := argTextStyle. theText := argText. theContainer := argContainer. deltaCharIndex := argDelta. currCharIndex := startCharIndex := argStart. stopCharIndex := argStop. prevLines := argPriorLines. currentY := argStartY. defaultLineHeight := theTextStyle lineGrid. maxRightX := theContainer left. possibleSlide := stopCharIndex < theText size and: [theContainer isMemberOf: Rectangle]. nowSliding := false. prevIndex := 1. scanner := LegacyCompositionScanner new text: theText textStyle: theTextStyle. scanner wantsColumnBreaks: wantsColumnBreaks. isFirstLine := true. self composeAllLines. isFirstLine ifTrue: ["No space in container or empty text" self addNullLineWithIndex: startCharIndex andRectangle: (theContainer topLeft extent: 0 @ defaultLineHeight)] ifFalse: [self fixupLastLineIfCR]. ^ {lines asArray. maxRightX}! ! !Paragraph methodsFor: 'selection' stamp: 'nice 10/27/2013 22:27' prior: 29083366! characterBlockAtPoint: aPoint "Answer a CharacterBlock for the character in the text at aPoint." | line | line := lines at: (self lineIndexForPoint: aPoint). ^ ((text string isWideString) ifTrue: [ MultiCharacterBlockScanner new text: text textStyle: textStyle ] ifFalse: [LegacyCharacterBlockScanner new text: text textStyle: textStyle]) characterBlockAtPoint: aPoint index: nil in: line! ! !Paragraph methodsFor: 'selection' stamp: 'nice 10/27/2013 22:27' prior: 29083829! characterBlockForIndex: index "Answer a CharacterBlock for the character in text at index." | line | line := lines at: (self lineIndexForCharacter: index). ^ ((text string isWideString) ifTrue: [ MultiCharacterBlockScanner new text: text textStyle: textStyle ] ifFalse: [ LegacyCharacterBlockScanner new text: text textStyle: textStyle ]) characterBlockAtPoint: nil index: ((index max: line first) min: text size+1) in: line! ! !ObjectExplorerWrapper methodsFor: 'accessing' stamp: 'MarcusDenker 11/2/2013 14:44' prior: 28672728! icon "Answer a form to be used as icon" ^ item iconOrThumbnailOfSize: 16! ! ObjectExplorer class removeSelector: #registerToolsOn:! "Morphic-Base"! "Tools"! ----End fileIn----! ----QUIT----an Array(2 November 2013 2:47:38 pm) Pharo.image priorSource: 25611002! ----STARTUP----an Array(2 November 2013 2:52:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 2:52:31 pm) Pharo-30536.image priorSource: 25626405! ----STARTUP----an Array(2 November 2013 3:08:37 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 15:05' prior: 75942956! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/3) 12049 Extract Selected Sentences as method Suggestion https://pharo.fogbugz.com/f/cases/12049'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 15:06'! script192 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.175.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.41.mcz Multilingual-Languages-MarcusDenker.36.mcz Multilingual-OtherLanguages-MarcusDenker.4.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.146.mcz Ring-Monticello-MarcusDenker.16.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.56.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.15.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 15:06'! update30537 "self new update30537" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (Step 1/3) 12049 Extract Selected Sentences as method Suggestion https://pharo.fogbugz.com/f/cases/12049'. self loadTogether: self script192 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SugsExtractStatements commentStamp: '' prior: 0! A SugsSelectedValidCodeAsMethod the action needed to extract the selection to another method in the same class. THe difference between SugsExtracMethod is that this actually uses the user selection. In fact we should replace the SugsExtracMethod with this one. ! !SugsExtractStatements commentStamp: '' prior: 75969860! A SugsSelectedValidCodeAsMethod the action needed to extract the selection to another method in the same class. THe difference between SugsExtracMethod is that this actually uses the user selection. In fact we should replace the SugsExtracMethod with this one. ! !SugsExtractStatements methodsFor: 'execution' stamp: 'GiselaDecuzzi 11/1/2013 09:52'! execute | selectedValidCodeInterval | selectedValidCodeInterval := self privateCalculateInterval. (NautilusRefactoring model: context) extractBetween: selectedValidCodeInterval from: context selectedMethod! ! !SugsExtractStatements methodsFor: 'accessing' stamp: 'GiselaDecuzzi 11/1/2013 09:46'! label ^'Extract method' translated. ! ! !SugsExtractStatements methodsFor: 'private' stamp: 'GiselaDecuzzi 11/1/2013 09:52'! privateCalculateInterval | selectedValidCodeInterval selectedValidCodeStatements | selectedValidCodeStatements := context selectedStatementsAsSequence. selectedValidCodeInterval := selectedValidCodeStatements start to: selectedValidCodeStatements stop. ^ selectedValidCodeInterval! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 11/1/2013 09:56' prior: 38375048! createExtractMethod ^ SugsExtractMethod icon: Smalltalk ui icons smallUpdateIcon position: 50! ! !SugsSuggestionFactory class methodsFor: 'source' stamp: 'GiselaDecuzzi 11/1/2013 09:56'! createExtractSentences ^ SugsExtractStatements icon: Smalltalk ui icons smallUpdateIcon position: 10! ! CompositionScanner removeSelector: #tab! CompositionScanner removeSelector: #space! CompositionScanner removeSelector: #setStopConditions! CompositionScanner removeSelector: #setFont! CompositionScanner removeSelector: #setActualFont:! CompositionScanner removeSelector: #rightX! CompositionScanner removeSelector: #placeEmbeddedObject:! CompositionScanner removeSelector: #endOfRun! CompositionScanner removeSelector: #crossedX! CompositionScanner removeSelector: #cr! CompositionScanner removeSelector: #composeFrom:inRectangle:firstLine:leftSide:rightSide:! CompositionScanner removeSelector: #columnBreak! Smalltalk globals removeClassNamed: #CompositionScanner! CharacterScanner removeSelector: #wantsColumnBreaks:! CharacterScanner removeSelector: #textColor:! CharacterScanner removeSelector: #text:textStyle:! CharacterScanner removeSelector: #setFont:! CharacterScanner removeSelector: #setFont! CharacterScanner removeSelector: #setConditionArray:! CharacterScanner removeSelector: #setAlignment:! CharacterScanner removeSelector: #setActualFont:! CharacterScanner removeSelector: #scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:! CharacterScanner removeSelector: #scanJapaneseCharactersFrom:to:in:rightX:stopConditions:kern:! CharacterScanner removeSelector: #scanCharactersFrom:to:in:rightX:stopConditions:kern:! CharacterScanner removeSelector: #plainTab! CharacterScanner removeSelector: #placeEmbeddedObject:! CharacterScanner removeSelector: #measureString:inFont:from:to:! CharacterScanner removeSelector: #leadingTab! CharacterScanner removeSelector: #isBreakableAtIndex:! CharacterScanner removeSelector: #initializeStringMeasurer! CharacterScanner removeSelector: #initialize! CharacterScanner removeSelector: #indentationLevel:! CharacterScanner removeSelector: #indentationLevel! CharacterScanner removeSelector: #handleIndentation! CharacterScanner removeSelector: #embeddedObject! CharacterScanner removeSelector: #columnBreak! CharacterScanner removeSelector: #basicScanCharactersFrom:to:in:rightX:stopConditions:kern:! CharacterScanner removeSelector: #addKern:! CharacterScanner removeSelector: #addEmphasis:! CharacterScanner class removeSelector: #initialize! CharacterBlockScanner removeSelector: #tab! CharacterBlockScanner removeSelector: #setStopConditions! CharacterBlockScanner removeSelector: #setFont! CharacterBlockScanner removeSelector: #placeEmbeddedObject:! CharacterBlockScanner removeSelector: #paddedSpace! CharacterBlockScanner removeSelector: #lastSpaceOrTabExtentSetX:! CharacterBlockScanner removeSelector: #lastCharacterExtentSetX:! CharacterBlockScanner removeSelector: #indentationLevel:! CharacterBlockScanner removeSelector: #endOfRun! CharacterBlockScanner removeSelector: #crossedX! CharacterBlockScanner removeSelector: #cr! CharacterBlockScanner removeSelector: #characterPointSetX:! CharacterBlockScanner removeSelector: #characterBlockAtPoint:index:in:! Smalltalk globals removeClassNamed: #CharacterBlockScanner! Smalltalk globals removeClassNamed: #CharacterScanner! "SmartSuggestions"! "Text-Scanning"! ----End fileIn----! ----QUIT----an Array(2 November 2013 3:08:43 pm) Pharo.image priorSource: 25626610! ----STARTUP----an Array(2 November 2013 3:13:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 3:13:30 pm) Pharo-30537.image priorSource: 25643231! ----STARTUP----an Array(2 November 2013 3:29:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 15:26' prior: 75958564! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (step 2, part 1) 12022 Rename #poolDictionaries to #sharedPools in RGClassDefinition and RGTraitDefinition https://pharo.fogbugz.com/f/cases/12022 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 15:26'! script193 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.322.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.175.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.967.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.16.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 15:26'! update30538 "self new update30538" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (step 2, part 1) 12022 Rename #poolDictionaries to #sharedPools in RGClassDefinition and RGTraitDefinition https://pharo.fogbugz.com/f/cases/12022 '. self loadTogether: self script193 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RGClassDefinition commentStamp: 'VeronicaUquillas 4/19/2011 16:01' prior: 42601880! RGClassDefinition is the concrete representation of a class (no trait)! !CharacterScanner commentStamp: 'nice 10/22/2013 20:04' prior: 0! A CharacterScanner holds the state associated with scanning text. Subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms. Instance Variables alignment: destX: destY: emphasisCode: font: indentationLevel: kern: lastIndex: leftMargin: line: map: pendingKernX: rightMargin: runStopIndex: spaceCount: spaceWidth: stopConditions: text: textStyle: wantsColumnBreaks: xTable: alignment - an Integer encoding the alignment of text destX - horizontal position for next character (distance from left of composition area) destY - vertical position for next character (distance from top of composition area) emphasisCode - an Integer encoding the current text emphasis to use (bold, italic, ...) font - the current font used for measuring/composing/displaying characters indentationLevel - an Integer specifying a number of leading tabs to be inserted at beginning of new lines kern - a Number specifying additional horizontal spacing to place between characters (spacing is reduced when kern is negative) lastIndex - the Integer index of next character to be processed in the text leftMargin - a Number specifying the distance between left of composition zone and left of first character in the line. line - an object holding information about the line currently being displayed (like first and last index in text). Note: this is either a TextLine in Morphic, or TextLineInterval for ST80 compatibility map - an array mapping character code to glyph position. This is used by primitive 103 only, in case of ByteString. pendingKernX - a Number to be added to horizontal spacing of next char if ever it is in the same font than previous one. The inner scan loop is interrupted by a change of text run. But some changes won't change the font, so the kerning must be remembered and applied later. rightMargin - a Number specifying the distance between right of composition zone and right of last character in the line. runStopIndex - the Integer index of last character in current text run. spaceCount - the number of spaces encoutered so far in current line. This is useful for adjusting the spacing in cas of Justified alignment. spaceWidth - the width of space character in current font. stopConditions - an Array mapping a table of characters codes for which special actions are to be taken. These are typically control characters like carriage return or horizontal tab. text - the text to be measured/composed/displayed textStyle - an object holding a context for the text style (which set of font to use, which margins, etc...) wantsColumnBreaks - a Boolean indicating whether some special handling for multiple columns is requested. THIS ONLY MAKES SENSE IN CompositionScanner AND SHOULD BE MOVED TO THE SUBCLASS xTable - an array mapping character code to glyph x coordinate in form. This is used by primitive 103 only, in case of ByteString. Implementation note: accelerated Character scanning with primitive 103 requires following order for 5 first instance variables, please don't alter: destX lastIndex xTable map destY ! !CharacterBlockScanner commentStamp: 'nice 10/6/2013 22:04' prior: 0! A CharacterScanner does scan text to compute the CharacterBlock for a character specified by its index in the text or its proximity to the cursor location. The CharacterBlock stores information both about character layout and character index in the text. This class is essential for selecting text with the mouse or with arrow keys. Instance Variables characterIndex: characterPoint: lastCharacterWidth: nextLeftMargin: specialWidth: characterIndex - the index of character for which the layout information is searched, or nil when the layout is searched by cursor location characterPoint - the cursor location for which nearest character index and layout are searched. lastCharacterWidth - a number indicating the width of last character being processed. Note that this variable is left to nil during the inner scan loop, and only set on stopConditions. nextLeftMargin - a number specifying the distance between left of composition zone and left of first character for the next line. specialWidth - a number holding the width of an embedded object if any, or nil if none. ! !CompositionScanner commentStamp: 'nice 10/6/2013 23:24' prior: 0! A CompositionScanner measures text and determines where line breaks. Given a rectangular zone on input, it is used to split text in horizontal lines, and produce information about those lines on output (at which index a line starts/stops, which vertical space does the line require, which horizontal space if left for adjusting inter-word spacing, etc...) Instance Variables baseline: baselineAtSpace: lastBreakIsNotASpace: lineHeight: lineHeightAtSpace: nextIndexAfterLineBreak: spaceIndex: spaceX: baseline - the distance between top of line and the base line (that is the bottom of latin characters abcdehiklmnorstuvwx in most fonts) baselineAtSpace - memorize the baseline at last encountered space or other breakable character. This is necessary because the CompositionScanner wants to break line at a breakable character. If a word layout overflows the right margin, the scanner has to roll back and restore the line state to last encountered breakable character. lastBreakIsNotASpace - indicates that the last breakable character was not a space. This is necessary because handling a line break at a space differs from non space. If line break occurs on space, the space won't be displayed in next line. If it's another breakable character, it has to be displayed on next line. lineHeight - the total line height from top to bottom, including inter-line spacing. lineHeightAtSpace - the line height at last encountered space or other breakable character. See baselineAtSpace for explanation. nextIndexAfterLineBreak - the index of character after the last line break that was encountered. spaceIndex - the index of last space or other breakable character that was encountered spaceX - the distance from left of composition zone to left of last encountered space or other breakable character See baselineAtSpace for explanation. Note: if a line breaks on a space, a linefeed or a carriage return, then the space, linefeed or carriage return is integrated in the line. If there is a carriage return - linefeed pair, the pair is integrated to the line as if it were a single line break for compatibility with legacy software.! !DisplayScanner commentStamp: 'nice 10/11/2013 23:45' prior: 0! A DisplayScanner is an abstract class for displaying characters. It is splitting text into elementary chunks of displayable String/Font pairs (see scanning protocol). Subclasses responsibility is to handle the effective rendering of these chunks on various backends. Instance Variables backgroundColor: defaultTextColor: foregroundColor: ignoreColorChanges: lastDisplayableIndex: lineY: morphicOffset: stopConditionsMustBeReset: backgroundColor - the background color for displaying next chunk of text. Note that this can be set to Color transparent, in which case no background is displayed. defaultTextColor - the default foreground color for displaying text in absence of other text attributes specification foregroundColor - the foreground color for displaying next chunk of text ignoreColorChanges - indicates that any change of color specified in text attributes shall be ignored. This is used for displaying text in a shadow mode, when dragging text for example. lastDisplayableIndex - the index of last character to be displayed. A different index than lastIndex is required in order to avoid display of control characters. This variable must be updated by the stop condition at each inner scan loop. lineY - the distance between destination form top and current line top morphicOffset - an offset for positionning the embedded morphs. THE EXACT SPECIFICATION YET REMAINS TO BE WRITTEN stopConditionsMustBeReset - indicates that it's necessary to call setStopConditions in next scan loop. Notes: In order to correctly set the lastDisplayableIndex, the display scanner performs the stopCondition BEFORE displaying the string being scanned. This explains why the stopCondition must not reset the font immediately, but differ this reset AFTER the display, thanks to stopConditionsMustBeReset. ! !BitBltDisplayScanner commentStamp: 'nice 10/12/2013 01:36' prior: 0! A BitBltDisplayScanner displays characters on Screen or other Form with help of a BitBlt. Instance Variables bitBlt: fillBlt: bitBlt - the object which knows how to copy bits from one Form (the font glyph data) to another (the destination Form) fillBlt - another object for copying form bits, initialized for displaying the background. ! !AbstractFont methodsFor: '*Text-Scanning' stamp: 'tpr 10/3/2013 12:42'! scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX "scan a single byte character string" ^aCharacterScanner scanByteCharactersFrom: startIndex to: stopIndex in: aByteString rightX: rightX! ! !AbstractFont methodsFor: '*Text-Scanning' stamp: 'tpr 10/3/2013 12:42'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX "scan a multibyte character string" ^aCharacterScanner scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString rightX: rightX ! ! !AbstractFont methodsFor: '*Multilingual-OtherLanguages' stamp: 'tpr 10/3/2013 12:57'! scanMultibyteJapaneseCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX "scan a multibyte Japanese character string" ^aCharacterScanner scanJapaneseCharactersFrom: startIndex to: stopIndex in: aWideString rightX: rightX ! ! !RGMetaclassDefinition methodsFor: 'variables' stamp: 'MartinDias 10/28/2013 16:17'! allSharedPoolNames ^self theNonMetaClass allSharedPoolNames! ! !RGTraitDescriptionDefinition methodsFor: 'variables' stamp: 'MartinDias 10/28/2013 16:17'! allSharedPoolNames ^#()! ! !JapaneseEnvironment class methodsFor: 'language methods' stamp: 'tpr 10/3/2013 12:56'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX font: aFont "scanning multibyte Japanese strings" ^aFont scanMultibyteJapaneseCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX! ! !ByteSymbol methodsFor: '*Text-Scanning' stamp: 'nice 10/9/2013 01:47'! scanCharactersFrom: startIndex to: stopIndex with: aCharacterScanner rightX: rightX font: aFont "NB: strongly consider getting almost all these parameters from the scanner" "Since I'm a byte char string, I know that we have to scan single-byte characters and don't have to handle encodings etc" startIndex > stopIndex ifTrue: [^aCharacterScanner handleEndOfRunAt: stopIndex]. ^aFont scanByteCharactersFrom: startIndex to: stopIndex in: self with: aCharacterScanner rightX: rightX! ! !WideSymbol methodsFor: '*Text-Scanning' stamp: 'nice 10/9/2013 01:47'! scanCharactersFrom: startIndex to: stopIndex with: aCharacterScanner rightX: rightX font: aFont "NB: strongly consider getting almost all these parameters from the scanner" "Since I'm a wide char string, I know that we have to scan multi-byte characters and handle encodings etc" | charSet | startIndex > stopIndex ifTrue: [^aCharacterScanner handleEndOfRunAt: stopIndex]. charSet := self encodedCharSetAt: startIndex. ^charSet scanMultibyteCharactersFrom: startIndex to: stopIndex in: self with: aCharacterScanner rightX: rightX font: aFont ! ! !RGClassDefinition commentStamp: 'VeronicaUquillas 4/19/2011 16:01' prior: 75986799! RGClassDefinition is the concrete representation of a class (no trait)! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:20'! addSharedPool: aRGPoolVariableDefinition self addVariable: (aRGPoolVariableDefinition parent: self) in: sharedPools! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:20'! addSharedPoolNamed: poolName | pool | pool:= self factory createPoolVariableNamed: poolName parent: self. self addVariable: pool in: sharedPools. ^pool! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:19'! addSharedPools: aCollection aCollection do: [ :pool | self addSharedPoolNamed: pool ]! ! !RGClassDefinition methodsFor: 'managing pool users' stamp: 'MartinDias 10/28/2013 16:20' prior: 31591990! addUser: aRGClassDefinition "The receiver registers the aRGClassDefinition as an user. An reinforces its status as a shared pool." aRGClassDefinition isClass ifFalse:[ ^self ]. (aRGClassDefinition theNonMetaClass sharedPoolNamed: self name) isNil ifTrue: [ aRGClassDefinition theNonMetaClass addSharedPoolNamed: self name ]. self isPool: true. self users add: aRGClassDefinition theNonMetaClass! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:19'! allSharedPoolNames ^ self allSharedPools collect: [ :pool | pool name ]! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:20'! allSharedPools "Answer a collection of the pools the receiver shares, including those defined in the superclasses of the receiver." ^ self hasSuperclass ifFalse: [ sharedPools ] ifTrue: [ self superclass allSharedPools , sharedPools ]! ! !RGClassDefinition methodsFor: 'initialization' stamp: 'MartinDias 10/28/2013 16:20' prior: 48872365! initialize super initialize. classVariables:= OrderedCollection new. sharedPools:= OrderedCollection new.! ! !RGClassDefinition methodsFor: 'testing' stamp: 'MartinDias 10/28/2013 16:20' prior: 31596138! isSameRevisionAs: aRGClassDefinition "This method look for equality of the properties of the receiver" ^(super isSameRevisionAs: aRGClassDefinition) and:[ self superclassName == aRGClassDefinition superclassName and:[ self category = aRGClassDefinition category and:[ self classVarNames sorted = aRGClassDefinition classVarNames sorted and:[ self sharedPoolNames sorted = aRGClassDefinition sharedPoolNames sorted and:[ self traitCompositionSource = aRGClassDefinition traitCompositionSource and:[ ((self hasComment and:[ self comment isSameRevisionAs: aRGClassDefinition comment ]) or:[ self hasComment not ]) and:[ (self theMetaClass isSameRevisionAs: aRGClassDefinition theMetaClass) ] ] ] ] ] ] ]! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:21'! removeSharedPool: aRGPoolVariableDefinition self removeVariable: aRGPoolVariableDefinition from: sharedPools! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:21'! removeSharedPoolNamed: poolName self removeVariable: (self sharedPoolNamed: poolName) from: sharedPools! ! !RGClassDefinition methodsFor: 'managing pool users' stamp: 'MartinDias 10/28/2013 16:21' prior: 31593117! removeUser: aRGClassDefinition "Removes this RGClassDefinition from the users of the receiver" aRGClassDefinition isClass ifFalse:[ ^self ]. aRGClassDefinition theNonMetaClass removeSharedPoolNamed: self name. self users remove: aRGClassDefinition theNonMetaClass ifAbsent:[ ]! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:20'! sharedPoolNamed: poolName ^sharedPools detect:[ :v| v name = poolName asSymbol ] ifNone:[ nil ]! ! !RGClassDefinition methodsFor: 'shared pools' stamp: 'MartinDias 10/28/2013 16:20'! sharedPoolNames ^sharedPools collect:[ :pool| pool name ]! ! !RGClassDefinition methodsFor: 'accessing' stamp: 'MartinDias 10/28/2013 16:42'! sharedPools "Keeps the pool variable relationship of the receiver" ^ sharedPools! ! !RGClassDefinition methodsFor: 'accessing' stamp: 'MartinDias 10/28/2013 16:42'! sharedPools: aCollection sharedPools := aCollection! ! !Class methodsFor: '*Ring-Core-Kernel' stamp: 'MartinDias 10/28/2013 16:16' prior: 19046397! asRingDefinition "A behavior is converted to a ring class. Only the receiver and its variables (instance, class, pools) are converted. Methods, superclasses, subclasses are not generated" | ring | ring := (RGFactory current createClassNamed: self name) category: self category; superclassName: self superclass name; traitCompositionSource: self traitCompositionString; addInstanceVariables: self instVarNames; addClassVariables: self classVarNames; addSharedPools: self poolDictionaryNames; comment: self organization classComment; stamp: self organization commentStamp; definitionSource: self definition; withMetaclass. ring theMetaClass traitCompositionSource: self theMetaClass traitCompositionString; definitionSource: self theMetaClass definition; addInstanceVariables: self theMetaClass instVarNames. ^ ring! ! !LanguageEnvironment class methodsFor: 'language methods' stamp: 'tpr 10/3/2013 12:56'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX font: aFont "the default for scanning multibyte characters- other more specific encodings may do something else" ^aFont scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX! ! !LogicalFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:09'! scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX "scan a single byte character string" ^realFont scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX! ! !LogicalFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:09'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX "scan a multibyte character string" ^realFont scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX! ! !RGGlobalDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 10/28/2013 16:20' prior: 31678250! testPoolDefinition | pool newClass | pool:= RGFactory current createSharedPoolNamed: #TextConstants. self assert: (pool isPool). self assert: (pool users isEmpty). self assert: (pool parent = Smalltalk globals). newClass:= RGFactory current createClassNamed: #OrderedCollection. pool addUser: newClass. self assert: (pool users size = 1). self assert: (pool includesUser: newClass). self assert: ((newClass sharedPoolNamed: #TextConstants) isPoolVariable). pool:= RGFactory current createClassNamed: #TextConstants. pool superclassName: #SharedPool. self assert: (pool isPool). self assert: (pool users isEmpty).! ! !RGVariableDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 10/28/2013 16:42' prior: 31770661! testPoolVariable | poolVar newClass | poolVar:= RGFactory current createPoolVariableNamed: 'TextConstants'. self assert: (poolVar isPoolVariable). self assert: (poolVar isVariable). self assert: (poolVar name = 'TextConstants'). self assert: (poolVar parent isNil). self assert: (poolVar isMetaSide not). newClass:= RGFactory current createClassNamed: #OrderedCollection. poolVar:= RGFactory current createPoolVariableNamed: 'TextConstants' parent: newClass. self assert: (poolVar parent = newClass). self assert: (newClass sharedPools isEmpty). newClass sharedPools add: poolVar. self assert: (newClass sharedPools size = 1).! ! !EncodedCharSet class methodsFor: 'language methods' stamp: 'tpr 10/3/2013 12:43'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX font: aFont "the default for scanning multibyte characters- other more specific encodings may do something else" ^aFont scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX! ! !RGTraitDefinition methodsFor: 'accessing' stamp: 'MartinDias 10/28/2013 16:42'! sharedPools ^#()! ! !ByteString methodsFor: '*Text-Scanning' stamp: 'tpr 10/2/2013 17:36'! scanCharactersFrom: startIndex to: stopIndex with: aCharacterScanner rightX: rightX font: aFont "NB: strongly consider getting almost all these parameters from the scanner" "Since I'm a byte char string, I know that we have to scan single-byte characters and don't have to handle encodings etc" startIndex > stopIndex ifTrue: [^aCharacterScanner handleEndOfRunAt: stopIndex]. ^aFont scanByteCharactersFrom: startIndex to: stopIndex in: self with: aCharacterScanner rightX: rightX! ! !WideString methodsFor: '*Text-Scanning' stamp: 'tpr 10/2/2013 17:28'! scanCharactersFrom: startIndex to: stopIndex with: aCharacterScanner rightX: rightX font: aFont "NB: strongly consider getting almost all these parameters from the scanner" "Since I'm a wide char string, I know that we have to scan multi-byte characters and handle encodings etc" | charSet | startIndex > stopIndex ifTrue: [^aCharacterScanner handleEndOfRunAt: stopIndex]. charSet := self encodedCharSetAt: startIndex. ^charSet scanMultibyteCharactersFrom: startIndex to: stopIndex in: self with: aCharacterScanner rightX: rightX font: aFont ! ! !FreeTypeFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:07'! scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX "scan a single byte character string" ^aCharacterScanner scanKernableByteCharactersFrom: startIndex to: stopIndex in: aByteString rightX: rightX! ! !FreeTypeFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:08'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX "scan a multibyte character string" ^aCharacterScanner scanKernableMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString rightX: rightX ! ! !CharacterScanner commentStamp: 'nice 10/22/2013 20:04' prior: 75986937! A CharacterScanner holds the state associated with scanning text. Subclasses scan characters for specified purposes, such as computing a CharacterBlock or placing characters into Forms. Instance Variables alignment: destX: destY: emphasisCode: font: indentationLevel: kern: lastIndex: leftMargin: line: map: pendingKernX: rightMargin: runStopIndex: spaceCount: spaceWidth: stopConditions: text: textStyle: wantsColumnBreaks: xTable: alignment - an Integer encoding the alignment of text destX - horizontal position for next character (distance from left of composition area) destY - vertical position for next character (distance from top of composition area) emphasisCode - an Integer encoding the current text emphasis to use (bold, italic, ...) font - the current font used for measuring/composing/displaying characters indentationLevel - an Integer specifying a number of leading tabs to be inserted at beginning of new lines kern - a Number specifying additional horizontal spacing to place between characters (spacing is reduced when kern is negative) lastIndex - the Integer index of next character to be processed in the text leftMargin - a Number specifying the distance between left of composition zone and left of first character in the line. line - an object holding information about the line currently being displayed (like first and last index in text). Note: this is either a TextLine in Morphic, or TextLineInterval for ST80 compatibility map - an array mapping character code to glyph position. This is used by primitive 103 only, in case of ByteString. pendingKernX - a Number to be added to horizontal spacing of next char if ever it is in the same font than previous one. The inner scan loop is interrupted by a change of text run. But some changes won't change the font, so the kerning must be remembered and applied later. rightMargin - a Number specifying the distance between right of composition zone and right of last character in the line. runStopIndex - the Integer index of last character in current text run. spaceCount - the number of spaces encoutered so far in current line. This is useful for adjusting the spacing in cas of Justified alignment. spaceWidth - the width of space character in current font. stopConditions - an Array mapping a table of characters codes for which special actions are to be taken. These are typically control characters like carriage return or horizontal tab. text - the text to be measured/composed/displayed textStyle - an object holding a context for the text style (which set of font to use, which margins, etc...) wantsColumnBreaks - a Boolean indicating whether some special handling for multiple columns is requested. THIS ONLY MAKES SENSE IN CompositionScanner AND SHOULD BE MOVED TO THE SUBCLASS xTable - an array mapping character code to glyph x coordinate in form. This is used by primitive 103 only, in case of ByteString. Implementation note: accelerated Character scanning with primitive 103 requires following order for 5 first instance variables, please don't alter: destX lastIndex xTable map destY ! !CharacterBlockScanner commentStamp: 'nice 10/6/2013 22:04' prior: 75990386! A CharacterScanner does scan text to compute the CharacterBlock for a character specified by its index in the text or its proximity to the cursor location. The CharacterBlock stores information both about character layout and character index in the text. This class is essential for selecting text with the mouse or with arrow keys. Instance Variables characterIndex: characterPoint: lastCharacterWidth: nextLeftMargin: specialWidth: characterIndex - the index of character for which the layout information is searched, or nil when the layout is searched by cursor location characterPoint - the cursor location for which nearest character index and layout are searched. lastCharacterWidth - a number indicating the width of last character being processed. Note that this variable is left to nil during the inner scan loop, and only set on stopConditions. nextLeftMargin - a number specifying the distance between left of composition zone and left of first character for the next line. specialWidth - a number holding the width of an embedded object if any, or nil if none. ! !CharacterBlockScanner methodsFor: 'scanning' stamp: 'nice 10/22/2013 20:50'! characterBlockAtPoint: aPoint index: index in: textLine "This method is the Morphic characterBlock finder. It combines MVC's characterBlockAtPoint:, -ForIndex:, and buildCharacterBlockIn:" | runLength lineStop stopCondition | line := textLine. rightMargin := line rightMargin. lastIndex := line first. self setStopConditions. "also sets font" characterIndex := index. " == nil means scanning for point" characterPoint := aPoint. (characterPoint isNil or: [characterPoint y > line bottom]) ifTrue: [characterPoint := line bottomRight]. destX := leftMargin := line leftMarginForAlignment: alignment. destY := line top. (text isEmpty or: [(characterPoint y < destY or: [characterPoint x < destX]) or: [characterIndex notNil and: [characterIndex < line first]]]) ifTrue: [^ (CharacterBlock new stringIndex: line first text: text topLeft: destX@destY extent: 0 @ textStyle lineGrid) textLine: line]. runLength := text runLengthFor: line first. lineStop := characterIndex "scanning for index" ifNil: [ line last ]. "scanning for point" runStopIndex := lastIndex + (runLength - 1) min: lineStop. lastCharacterWidth := 0. spaceCount := 0. [ stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: characterPoint x. "see setStopConditions for stopping conditions for character block operations." self perform: stopCondition ] whileFalse. characterIndex ifNil: ["Result for characterBlockAtPoint: " ^ (CharacterBlock new stringIndex: lastIndex text: text topLeft: characterPoint + (font descentKern @ 0) extent: lastCharacterWidth @ line lineHeight - (font baseKern @ 0)) textLine: line] ifNotNil: ["Result for characterBlockForIndex: " ^ (CharacterBlock new stringIndex: characterIndex text: text topLeft: characterPoint + ((font descentKern) - kern @ 0) extent: lastCharacterWidth @ line lineHeight) textLine: line]! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 10/1/2013 01:12'! cr "Answer a CharacterBlock that specifies the current location of the mouse relative to a carriage return stop condition that has just been encountered. The ParagraphEditor convention is to denote selections by CharacterBlocks, sometimes including the carriage return (cursor is at the end) and sometimes not (cursor is in the middle of the text)." ((characterIndex ~= nil and: [characterIndex > text size]) or: [(line last = text size) and: [(destY + line lineHeight) < characterPoint y]]) ifTrue: ["When off end of string, give data for next character" destY := destY + line lineHeight. characterPoint := (nextLeftMargin ifNil: [leftMargin]) @ destY. (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]]) ifTrue: [lastIndex := lastIndex + 2] ifFalse: [lastIndex := lastIndex + 1]. lastCharacterWidth := 0. ^ true]. characterPoint := destX @ destY. lastCharacterWidth := rightMargin - destX. ^true! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 10/2/2013 02:07'! crossedX "Text display has wrapping. The scanner just found a character past the x location of the cursor. We know that the cursor is pointing at a character or before one." self retrieveLastCharacterWidth. characterPoint x <= (destX + (lastCharacterWidth // 2)) ifTrue: [characterPoint := destX @ destY. ^true]. lastIndex >= line last ifTrue: [characterPoint := destX @ destY. ^true]. "Pointing past middle of a character, return the next character." lastIndex := lastIndex + 1. characterPoint := destX + lastCharacterWidth + kern @ destY. ^ true! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 10/1/2013 01:45'! endOfRun "Before arriving at the cursor location, the selection has encountered an end of run. Answer false if the selection continues, true otherwise. Set up indexes for building the appropriate CharacterBlock." | runLength lineStop | (((characterIndex ~~ nil and: [runStopIndex < characterIndex and: [runStopIndex < text size]]) or: [characterIndex == nil and: [lastIndex < line last]]) or: [ ((lastIndex < line last) and: [((text at: lastIndex) leadingChar ~= (text at: lastIndex+1) leadingChar) and: [lastIndex ~= characterIndex]])]) ifTrue: ["We're really at the end of a real run." runLength := text runLengthFor: (lastIndex := lastIndex + 1). lineStop := characterIndex "scanning for index" ifNil: [line last]. "scanning for point". (runStopIndex := lastIndex + (runLength - 1)) > lineStop ifTrue: [runStopIndex := lineStop]. self setStopConditions. ^false]. self retrieveLastCharacterWidth. (characterIndex == nil and: [lastIndex = line last]) ifTrue: [characterPoint x > (destX + (lastCharacterWidth // 2)) ifTrue: [ "Correct for clicking right half of last character in line means selecting AFTER the char" lastIndex := lastIndex + 1. lastCharacterWidth := 0. characterPoint := destX + lastCharacterWidth @ destY. ^true]]. characterPoint := destX @ destY. characterIndex ~~ nil ifTrue: ["If scanning for an index and we've stopped on that index, then we back destX off by the width of the character stopped on (it will be pointing at the right side of the character) and return" runStopIndex = characterIndex ifTrue: [characterPoint := destX - lastCharacterWidth @ destY. ^true]. "Otherwise the requested index was greater than the length of the string. Return string size + 1 as index, indicate further that off the string by setting character to nil and the extent to 0." lastIndex := lastIndex + 1. lastCharacterWidth := 0. ^true]. "Scanning for a point and either off the end of the line or off the end of the string." runStopIndex = text size ifTrue: ["off end of string" lastIndex := lastIndex + 1. lastCharacterWidth := 0. ^true]. "just off end of line without crossing x" lastIndex := lastIndex + 1. ^true! ! !CharacterBlockScanner methodsFor: 'text attributes' stamp: 'hmm 2/2/2001 15:07'! indentationLevel: anInteger super indentationLevel: anInteger. nextLeftMargin := leftMargin. indentationLevel timesRepeat: [ nextLeftMargin := textStyle nextTabXFrom: nextLeftMargin leftMargin: leftMargin rightMargin: rightMargin]! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 22:40'! paddedSpace "When the line is justified, the spaces will not be the same as the font's space character. A padding of extra space must be considered in trying to find which character the cursor is pointing at. Answer whether the scanning has crossed the cursor." | pad | spaceCount := spaceCount + 1. pad := line justifiedPadFor: spaceCount font: font. lastCharacterWidth := spaceWidth + pad. (destX + lastCharacterWidth) >= characterPoint x ifTrue: [^self crossedX]. lastIndex := lastIndex + 1. destX := destX + lastCharacterWidth + kern. pendingKernX := 0. ^ false ! ! !CharacterBlockScanner methodsFor: 'private' stamp: 'nice 10/6/2013 14:55'! placeEmbeddedObject: anchoredMorph "Workaround: The following should really use #textAnchorType" | w | anchoredMorph relativeTextAnchorPosition ifNotNil:[^true]. w := anchoredMorph width. specialWidth := w. (destX + w > characterPoint x) ifTrue: [^false]. destX := destX + w + kern. ^ true! ! !CharacterBlockScanner methodsFor: 'private' stamp: 'nice 10/3/2013 14:57'! retrieveLastCharacterWidth | lastCharacter | lastIndex > text size ifTrue: [^lastCharacterWidth := 0]. specialWidth ifNotNil: [^lastCharacterWidth := specialWidth]. lastCharacter := text at: lastIndex. (lastCharacter charCode >= 256 or: [(stopConditions at: lastCharacter charCode + 1) isNil]) ifTrue: [lastCharacterWidth := font widthOf: (text at: lastIndex)]. "if last character was a stop condition, then the width is already set" ^lastCharacterWidth! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'ar 1/8/2000 14:32'! setFont specialWidth := nil. super setFont! ! !CharacterBlockScanner methodsFor: 'stop conditions' stamp: 'nice 10/13/2013 22:13'! tab | nextDestX | nextDestX := self plainTab. lastCharacterWidth := nextDestX - destX max: 0. nextDestX >= characterPoint x ifTrue: [^ self crossedX]. destX := nextDestX. lastIndex := lastIndex + 1. ^false! ! !CharacterScanner class methodsFor: 'class initialization' stamp: 'nice 10/29/2013 02:26'! initialize " CharacterScanner initialize " | a | a := Array new: 258. a at: 1 + 1 put: #embeddedObject. a at: Tab asciiValue + 1 put: #tab. a at: CR asciiValue + 1 put: #cr. a at: Character lf asciiValue + 1 put: #cr. "Note: following two codes are used only by primitive 103 for accelerated Character scanning" a at: 257 put: #endOfRun. a at: 258 put: #crossedX. DefaultStopConditions := a copy. CompositionStopConditions := a copy. CompositionStopConditions at: Space asciiValue + 1 put: #space. ColumnBreakStopConditions := CompositionStopConditions copy. ColumnBreakStopConditions at: TextComposer characterForColumnBreak asciiValue + 1 put: #columnBreak. PaddedSpaceCondition := a copy. PaddedSpaceCondition at: Space asciiValue + 1 put: #paddedSpace. MeasuringStopConditions := (Array new: 258) at: 257 put: #endOfRun; at: 258 put: #crossedX; yourself! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:27'! addEmphasis: code "Set the bold-ital-under-strike emphasis." emphasisCode := emphasisCode bitOr: code! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:27'! addKern: kernDelta "Set the current kern amount." kern := kern + kernDelta! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/8/2013 22:49'! advanceIfFirstCharOfLine lastIndex = line first ifTrue: [destX := destX + pendingKernX + (font widthOf: (text at: line first)). lastIndex := lastIndex + 1. pendingKernX := 0].! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/21/2013 22:38'! basicScanByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for single byte characters in a ByteString a font that does not do character-pair kerning" | ascii nextDestX char | lastIndex := startIndex. [lastIndex <= stopIndex] whileTrue: [ "get the character value" char := sourceString at: lastIndex. ascii := char asciiValue + 1. "if there is an entry in 'stops' for this value, return it" (stopConditions at: ascii) ifNotNil: [^ stopConditions at: ascii]. "bump nextDestX by the width of the current character" nextDestX := destX + (font widthOf: char). "if the next x is past the right edge, return crossedX" nextDestX > rightX ifTrue: [^#crossedX]. "update destX and incorporate thr kernDelta" destX := nextDestX + kern. lastIndex := lastIndex + 1]. ^self handleEndOfRunAt: stopIndex ! ! !CharacterScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:16'! columnBreak pendingKernX := 0. ^true! ! !CharacterScanner methodsFor: 'stop conditions' stamp: 'nice 10/6/2013 15:06'! embeddedObject pendingKernX := 0. text attributesAt: lastIndex do:[:attr| attr anchoredMorph ifNotNil:[ "Try to placeEmbeddedObject: - if it answers false, then there's no place left" (self placeEmbeddedObject: attr anchoredMorph) ifFalse:[^self crossedX]]]. "Note: if ever several objects are embedded on same character, only indent lastIndex once" lastIndex := lastIndex + 1. ^false! ! !CharacterScanner methodsFor: 'stop conditions' stamp: 'nice 10/10/2013 01:49'! handleEndOfRunAt: stopIndex " make sure the lastIndex is set to stopIndex and then return the stopCondition for endOfRun; important for a couple of outside users" lastIndex := stopIndex. ^#endOfRun! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/13/2013 22:10'! handleIndentation self indentationLevel timesRepeat: [ destX := self plainTab]! ! !CharacterScanner methodsFor: 'private' stamp: 'ar 5/17/2000 18:20'! indentationLevel "return the number of tabs that are currently being placed at the beginning of each line" ^indentationLevel ifNil:[0]! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:23'! indentationLevel: anInteger "set the number of tabs to put at the beginning of each line" indentationLevel := anInteger! ! !CharacterScanner methodsFor: 'initialize' stamp: 'ls 1/14/2002 21:26'! initialize destX := destY := leftMargin := 0.! ! !CharacterScanner methodsFor: '*Multilingual-OtherLanguages' stamp: 'tpr 10/3/2013 12:25'! isBreakableAt: index in: sourceString in: encodingClass "check with the encoding whether the character at index is a breakable character. Only the JISX0208 & JapaneseEnvironments ever return true, so only the scanJapaneseCharacters... method calls this" ^ encodingClass isBreakableAt: index in: sourceString. ! ! !CharacterScanner methodsFor: 'private' stamp: 'ar 1/8/2000 14:23'! leadingTab "return true if only tabs lie to the left" line first to: lastIndex do: [:i | (text at: i) == Tab ifFalse: [^ false]]. ^ true! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/22/2013 20:50'! measureString: aString inFont: aFont from: startIndex to: stopIndex "Measure aString width in given font aFont. The string shall not include line breaking, tab or other control character." destX := destY := lastIndex := 0. pendingKernX := 0. font := aFont. kern := 0 - font baseKern. spaceWidth := font widthOf: Space. stopConditions := MeasuringStopConditions. self scanCharactersFrom: startIndex to: stopIndex in: aString rightX: 999999. ^destX! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/6/2013 14:46'! placeEmbeddedObject: anchoredMorph "Place the anchoredMorph or return false if it cannot be placed" ^ true! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/13/2013 22:07'! plainTab "This is the basic method of adjusting destX for a tab. Answer the next destX" pendingKernX := 0. ^(alignment = Justified and: [self leadingTab not]) ifTrue: "embedded tabs in justified text are weird" [destX + (textStyle tabWidth - (line justifiedTabDeltaFor: spaceCount)) max: destX] ifFalse: [textStyle nextTabXFrom: destX leftMargin: leftMargin rightMargin: rightMargin].! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/21/2013 22:39'! primScanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta "Primitive. This is the inner loop of text display--but see scanCharactersFrom: to:rightX: which would get the string, stopConditions and displaying from the instance. March through source String from startIndex to stopIndex. If any character is flagged with a non-nil entry in stops, then return the corresponding value. Determine width of each character from xTable, indexed by map. If dextX would exceed rightX, then return stops at: 258. Advance destX by the width of the character. If stopIndex has been reached, then return stops at: 257. Optional. See Object documentation whatIsAPrimitive. Historical note: this primitive has been unusable since about Squeak 2.8 when the shape of the CharracterScanner class changed. It is left here as a reminder that the actual primitive still needs supporting in the VM to keep old images such as Scratch1.4 alive - tpr" ^self basicScanByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX ! ! !CharacterScanner methodsFor: '*Multilingual-OtherLanguages' stamp: 'yo 12/20/2002 16:15'! registerBreakableIndex "Record left x and character index of the line-wrappable point. The default implementation here does nothing." ^ false. ! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/21/2013 22:40'! scanByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for single byte characters in a ByteString a font that does not do character-pair kerning" ^self primScanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stopConditions kern: kern ! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/22/2013 20:49'! scanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX ^sourceString scanCharactersFrom: startIndex to: stopIndex with: self rightX: rightX font: font! ! !CharacterScanner methodsFor: 'scanning' stamp: 'tpr 10/3/2013 12:58'! scanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta ^sourceString scanCharactersFrom: startIndex to: stopIndex with: self rightX: rightX font: font! ! !CharacterScanner methodsFor: '*Multilingual-OtherLanguages' stamp: 'nice 10/10/2013 02:17'! scanJapaneseCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for multibyte Japanese characters in a WideString - hence the isBreakable:in:in: a font that does not do character-pair kerning " | ascii encoding nextDestX startEncoding char charset | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [^self handleEndOfRunAt: stopIndex]. startEncoding := (sourceString at: startIndex) leadingChar. charset := EncodedCharSet charsetAt: startEncoding. [lastIndex <= stopIndex] whileTrue: [ char := sourceString at: lastIndex. encoding := char leadingChar. encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun]. ascii := char charCode. (encoding = 0 and: [ascii < 256 and:[(stopConditions at: ascii + 1) ~~ nil]]) ifTrue: [^ stopConditions at: ascii + 1]. (self isBreakableAt: lastIndex in: sourceString in: charset) ifTrue: [ self registerBreakableIndex]. nextDestX := destX + (font widthOf: char). nextDestX > rightX ifTrue: [^#crossedX]. destX := nextDestX + kern. lastIndex := lastIndex + 1. ]. ^self handleEndOfRunAt: stopIndex! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/10/2013 02:19'! scanKernableByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for single byte characters in a ByteString a font that does do character-pair kerning via widthAndKernedWidthOfLeft:right:into:" | ascii nextDestX char floatDestX widthAndKernedWidth nextCharOrNil atEndOfRun | lastIndex := startIndex. floatDestX := destX. widthAndKernedWidth := Array new: 2. atEndOfRun := false. [lastIndex <= stopIndex] whileTrue: [ "get the character value" char := sourceString at: lastIndex. ascii := char asciiValue + 1. "if there is an entry in 'stops' for this value, return it" (stopConditions at: ascii) ifNotNil: [^ stopConditions at: ascii]. "get the next character..." nextCharOrNil := lastIndex + 1 <= stopIndex ifTrue: [sourceString at: lastIndex + 1] ifFalse: ["if we're at or past the stopIndex, see if there is anything in the full string" atEndOfRun := true. lastIndex + 1 <= sourceString size ifTrue: [sourceString at: lastIndex + 1]]. "get the font's kerning info for the pair of current character and next character" "for almost all fonts in common use this is a waste of time since they don't support pair kerning and both values are #widthOf: char" font widthAndKernedWidthOfLeft: char right: nextCharOrNil into: widthAndKernedWidth. "bump nextDestX by the width of the current character" nextDestX := floatDestX + (widthAndKernedWidth at: 1). "if the next x is past the right edge, return crossedX" nextDestX > rightX ifTrue: [^ #crossedX]. "bump floatDestX by the *kerned* width of the current character, which is where the *next* char will go" floatDestX := floatDestX + kern + (widthAndKernedWidth at: 2). "if we are at the end of this run we keep track of the character-kern-delta for possible later use and then rather insanely remove that character-kern-delta from floatDestX, making it equivalent to (old floatDestX) + kernDelta + width-of-character - no idea why" atEndOfRun ifTrue: [pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1). floatDestX := floatDestX - pendingKernX]. "save the next x for next time around the loop" destX := floatDestX. lastIndex := lastIndex + 1]. ^self handleEndOfRunAt: stopIndex ! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/10/2013 02:17'! scanKernableMultibyteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for multibyte characters in a WideString a font that does do character-pair kerning via widthAndKernedWidthOfLeft:right:into:" | ascii encoding nextDestX startEncoding floatDestX widthAndKernedWidth nextChar atEndOfRun char | lastIndex := startIndex. lastIndex > stopIndex ifTrue: [^self handleEndOfRunAt: stopIndex]. startEncoding := (sourceString at: startIndex) leadingChar. floatDestX := destX. widthAndKernedWidth := Array new: 2. atEndOfRun := false. [lastIndex <= stopIndex] whileTrue: [ char := sourceString at: lastIndex. encoding := char leadingChar. encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun]. ascii := char charCode. (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil]) ifTrue: [^ stopConditions at: ascii + 1]. nextChar := (lastIndex + 1 <= stopIndex) ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ atEndOfRun := true. "if there is a next char in sourceString, then get the kern and store it in pendingKernX" lastIndex + 1 <= sourceString size ifTrue:[sourceString at: lastIndex + 1] ifFalse:[ nil]]. font widthAndKernedWidthOfLeft: char right: nextChar into: widthAndKernedWidth. nextDestX := floatDestX + (widthAndKernedWidth at: 1). nextDestX > rightX ifTrue: [^#crossedX]. floatDestX := floatDestX + kern + (widthAndKernedWidth at: 2). atEndOfRun ifTrue:[ pendingKernX := (widthAndKernedWidth at: 2) - (widthAndKernedWidth at: 1). floatDestX := floatDestX - pendingKernX]. destX := floatDestX . lastIndex := lastIndex + 1. ]. ^self handleEndOfRunAt: stopIndex! ! !CharacterScanner methodsFor: 'scanning' stamp: 'nice 10/10/2013 02:16'! scanMultibyteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX "this is a scanning method for multibyte characters in a WideString a font that does not do character-pair kerning" | char ascii encoding nextDestX startEncoding | lastIndex := startIndex. startEncoding := (sourceString at: startIndex) leadingChar. [lastIndex <= stopIndex] whileTrue: [ char := sourceString at: lastIndex. encoding := char leadingChar. encoding ~= startEncoding ifTrue: [lastIndex := lastIndex - 1. ^#endOfRun]. ascii := char charCode. (ascii < 256 and: [(stopConditions at: ascii + 1) ~~ nil]) ifTrue: [^ stopConditions at: ascii + 1]. "bump nextDestX by the width of the current character" nextDestX := destX + (font widthOf: char). nextDestX > rightX ifTrue: [^#crossedX]. destX := nextDestX + kern . lastIndex := lastIndex + 1. ]. ^self handleEndOfRunAt: stopIndex! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'nice 10/21/2013 22:36'! setActualFont: aFont "Set the basal font to an isolated font reference." xTable := aFont xTable. map := aFont characterToGlyphMap. font := aFont.! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 12/15/2001 23:31'! setAlignment: style alignment := style. ! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/22/2013 20:07'! setFont | priorFont | "Set the font and other emphasis." priorFont := font. text ifNotNil:[ emphasisCode := 0. kern := 0. indentationLevel := 0. alignment := textStyle alignment. font := nil. (text attributesAt: lastIndex forStyle: textStyle) do: [:att | att emphasizeScanner: self]]. font ifNil: [self setFont: textStyle defaultFontIndex]. self setActualFont: (font emphasized: emphasisCode). priorFont ifNotNil: [ font = priorFont ifTrue:[ "font is the same, perhaps the color has changed? We still want kerning between chars of the same font, but of different color. So add any pending kern to destX" destX := destX + (pendingKernX ifNil:[0])]. destX := destX + priorFont descentKern]. pendingKernX := 0. "clear any pending kern so there is no danger of it being added twice" destX := destX - font descentKern. "NOTE: next statement should be removed when clipping works" leftMargin ifNotNil: [destX := destX max: leftMargin]. kern := kern - font baseKern. "Install various parameters from the font." spaceWidth := font widthOf: Space.! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:28'! setFont: fontNumber "Set the font by number from the textStyle." self setActualFont: (textStyle fontAt: fontNumber)! ! !CharacterScanner methodsFor: 'private' stamp: 'nice 10/5/2013 21:03'! setStopConditions "Set the font and the stop conditions for the current run." self setFont. stopConditions := alignment = Justified ifTrue: [PaddedSpaceCondition] ifFalse: [DefaultStopConditions]! ! !CharacterScanner methodsFor: 'private' stamp: 'ar 1/8/2000 14:28'! text: t textStyle: ts text := t. textStyle := ts! ! !CharacterScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:28'! textColor: ignored "Overridden in DisplayScanner"! ! !CompositionScanner commentStamp: 'nice 10/6/2013 23:24' prior: 75991614! A CompositionScanner measures text and determines where line breaks. Given a rectangular zone on input, it is used to split text in horizontal lines, and produce information about those lines on output (at which index a line starts/stops, which vertical space does the line require, which horizontal space if left for adjusting inter-word spacing, etc...) Instance Variables baseline: baselineAtSpace: lastBreakIsNotASpace: lineHeight: lineHeightAtSpace: nextIndexAfterLineBreak: spaceIndex: spaceX: baseline - the distance between top of line and the base line (that is the bottom of latin characters abcdehiklmnorstuvwx in most fonts) baselineAtSpace - memorize the baseline at last encountered space or other breakable character. This is necessary because the CompositionScanner wants to break line at a breakable character. If a word layout overflows the right margin, the scanner has to roll back and restore the line state to last encountered breakable character. lastBreakIsNotASpace - indicates that the last breakable character was not a space. This is necessary because handling a line break at a space differs from non space. If line break occurs on space, the space won't be displayed in next line. If it's another breakable character, it has to be displayed on next line. lineHeight - the total line height from top to bottom, including inter-line spacing. lineHeightAtSpace - the line height at last encountered space or other breakable character. See baselineAtSpace for explanation. nextIndexAfterLineBreak - the index of character after the last line break that was encountered. spaceIndex - the index of last space or other breakable character that was encountered spaceX - the distance from left of composition zone to left of last encountered space or other breakable character See baselineAtSpace for explanation. Note: if a line breaks on a space, a linefeed or a carriage return, then the space, linefeed or carriage return is integrated in the line. If there is a carriage return - linefeed pair, the pair is integrated to the line as if it were a single line break for compatibility with legacy software.! !CompositionScanner methodsFor: 'testing' stamp: 'cmm 6/13/2010 20:50'! canComputeDefaultLineHeight ^ rightMargin notNil! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 9/29/2013 16:12'! columnBreak "Answer true. Set up values for the text line interval currently being composed." pendingKernX := 0. line stop: lastIndex. spaceX := destX. lastBreakIsNotASpace := false. line paddingWidth: rightMargin - spaceX. ^true! ! !CompositionScanner methodsFor: 'scanning' stamp: 'nice 10/22/2013 20:50'! composeFrom: startIndex inRectangle: lineRectangle firstLine: firstLine leftSide: leftSide rightSide: rightSide "Answer an instance of TextLineInterval that represents the next line in the paragraph." | runLength stopCondition | "Set up margins" leftMargin := lineRectangle left. leftSide ifTrue: [leftMargin := leftMargin + (firstLine ifTrue: [textStyle firstIndent] ifFalse: [textStyle restIndent])]. destX := spaceX := leftMargin. rightMargin := lineRectangle right. rightSide ifTrue: [rightMargin := rightMargin - textStyle rightIndent]. lastIndex := startIndex. "scanning sets last index" destY := lineRectangle top. lineHeight := baseline := 0. "Will be increased by setFont" line := (TextLine start: lastIndex stop: 0 internalSpaces: 0 paddingWidth: 0) rectangle: lineRectangle. self setStopConditions. "also sets font" runLength := text runLengthFor: startIndex. runStopIndex := (lastIndex := startIndex) + (runLength - 1). nextIndexAfterLineBreak := spaceCount := 0. lastBreakIsNotASpace := false. self handleIndentation. leftMargin := destX. line leftMargin: leftMargin. [stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: text string rightX: rightMargin. "See setStopConditions for stopping conditions for composing." self perform: stopCondition] whileFalse. ^ line lineHeight: lineHeight + textStyle leading baseline: baseline + textStyle leading! ! !CompositionScanner methodsFor: 'scanning' stamp: 'tpr 9/25/2013 13:41'! computeDefaultLineHeight "Compute the default line height for a potentially empty text" rightMargin notNil ifTrue: [lastIndex := 1. self setFont. ^ lineHeight + textStyle leading] ifFalse: [^textStyle lineGrid]! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/2/2013 02:21'! cr "Answer true. Set up values for the text line interval currently being composed." pendingKernX := 0. (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]]) ifTrue: [lastIndex := lastIndex + 1]. line stop: lastIndex. nextIndexAfterLineBreak := lastIndex + 1. spaceX := destX. lastBreakIsNotASpace := false. line paddingWidth: rightMargin - spaceX. ^true! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 22:42'! crossedX "There is a word that has fallen across the right edge of the composition rectangle. This signals the need for wrapping which is done to the last space that was encountered, as recorded by the space stop condition, or any other breakable character if the language permits so." pendingKernX := 0. lastBreakIsNotASpace ifTrue: ["In some languages line break is possible before a non space." ^self wrapAtLastBreakable]. spaceCount >= 1 ifTrue: ["The common case. there is a space on the line." ^self wrapAtLastSpace]. "Neither internal nor trailing spaces -- almost never happens." self advanceIfFirstCharOfLine. ^self wrapHere! ! !CompositionScanner methodsFor: 'accessing' stamp: 'nice 10/2/2013 02:23'! doesTheLineBreaksAfterLastChar ^nextIndexAfterLineBreak > text size! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'ar 1/9/2000 13:54'! endOfRun "Answer true if scanning has reached the end of the paragraph. Otherwise step conditions (mostly install potential new font) and answer false." | runLength | lastIndex = text size ifTrue: [line stop: lastIndex. spaceX := destX. line paddingWidth: rightMargin - destX. ^true] ifFalse: [runLength := (text runLengthFor: (lastIndex := lastIndex + 1)). runStopIndex := lastIndex + (runLength - 1). self setStopConditions. ^false] ! ! !CompositionScanner methodsFor: 'initialize' stamp: 'nice 10/6/2013 21:41'! initialize wantsColumnBreaks := false. super initialize! ! !CompositionScanner methodsFor: 'private' stamp: 'nice 10/21/2013 23:22'! placeEmbeddedObject: anchoredMorph | w descent | "Workaround: The following should really use #textAnchorType" anchoredMorph relativeTextAnchorPosition ifNotNil:[^true]. w := anchoredMorph width. (destX + w > rightMargin and: [(leftMargin + w) <= rightMargin or: [lastIndex > line first]]) ifTrue: ["Won't fit, but would on next line" ^ false]. destX := destX + w + kern. descent := lineHeight - baseline. baseline := baseline max: anchoredMorph height. lineHeight := baseline + descent. ^ true! ! !CompositionScanner methodsFor: '*Multilingual-OtherLanguages' stamp: 'nice 9/29/2013 16:12'! registerBreakableIndex "Record left x and character index of the line-wrappable point. Used for wrap-around in eastern Asian languages." spaceX := destX. lineHeightAtSpace := lineHeight. baselineAtSpace := baseline. spaceIndex := lastIndex. lastBreakIsNotASpace := true.! ! !CompositionScanner methodsFor: 'accessing' stamp: 'ar 1/8/2000 14:35'! rightX "Meaningful only when a line has just been composed -- refers to the line most recently composed. This is a subtrefuge to allow for easy resizing of a composition rectangle to the width of the maximum line. Useful only when there is only one line in the form or when each line is terminated by a carriage return. Handy for sizing menus and lists." ^spaceX! ! !CompositionScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:36'! setActualFont: aFont "Keep track of max height and ascent for auto lineheight" | descent | super setActualFont: aFont. lineHeight == nil ifTrue: [descent := font descent. baseline := font ascent. lineHeight := baseline + descent] ifFalse: [descent := lineHeight - baseline max: font descent. baseline := baseline max: font ascent. lineHeight := lineHeight max: baseline + descent]! ! !CompositionScanner methodsFor: 'private' stamp: 'nice 10/5/2013 21:02'! setStopConditions "Set the font and the stop conditions for the current run." self setFont. stopConditions := wantsColumnBreaks == true ifTrue: [ColumnBreakStopConditions] ifFalse: [CompositionStopConditions]! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/6/2013 21:20'! space "Record left x and character index of the space character just encountered. Used for wrap-around. Answer whether the character has crossed the right edge of the composition rectangle of the paragraph." spaceX := destX. spaceIndex := lastIndex. lineHeightAtSpace := lineHeight. baselineAtSpace := baseline. spaceCount := spaceCount + 1. lastBreakIsNotASpace := false. destX + spaceWidth > rightMargin ifTrue:[^self crossedX]. destX := spaceX + spaceWidth + kern. lastIndex := lastIndex + 1. ^false ! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'tween 4/6/2007 11:15'! tab "Advance destination x according to tab settings in the paragraph's textStyle. Answer whether the character has crossed the right edge of the composition rectangle of the paragraph." pendingKernX := 0. destX := textStyle nextTabXFrom: destX leftMargin: leftMargin rightMargin: rightMargin. destX > rightMargin ifTrue: [^self crossedX]. lastIndex := lastIndex + 1. ^false ! ! !CompositionScanner methodsFor: 'initialize' stamp: 'RAA 5/7/2001 10:11'! wantsColumnBreaks: aBoolean wantsColumnBreaks := aBoolean! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 22:32'! wrapAtLastBreakable "Wrap the line before last encountered breakable character." pendingKernX := 0. nextIndexAfterLineBreak := spaceIndex. line stop: spaceIndex - 1. lineHeight := lineHeightAtSpace. baseline := baselineAtSpace. line paddingWidth: rightMargin - spaceX. line internalSpaces: spaceCount. ^true! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 22:32'! wrapAtLastSpace "Wrap the line before last encountered space" pendingKernX := 0. nextIndexAfterLineBreak := spaceIndex + 1. alignment = Justified ifTrue: [ "gobble all subsequent spaces" [nextIndexAfterLineBreak <= text size and: [(text at: nextIndexAfterLineBreak) == Space]] whileTrue: [nextIndexAfterLineBreak := nextIndexAfterLineBreak + 1]]. line stop: nextIndexAfterLineBreak - 1. lineHeight := lineHeightAtSpace. baseline := baselineAtSpace. ["remove the space at which we break..." spaceCount := spaceCount - 1. spaceIndex := spaceIndex - 1. "...and every other spaces preceding the one at which we wrap. Double space after punctuation, most likely." spaceCount >= 1 and: [(text at: spaceIndex) = Space]] whileTrue: ["Account for backing over a run which might change width of space." font := text fontAt: spaceIndex withStyle: textStyle. spaceX := spaceX - (font widthOf: Space)]. line paddingWidth: rightMargin - spaceX. line internalSpaces: spaceCount. ^true! ! !CompositionScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 22:43'! wrapHere "Wrap the line before current character." pendingKernX := 0. nextIndexAfterLineBreak := lastIndex. lastIndex := lastIndex - 1. spaceX := destX. line paddingWidth: rightMargin - destX. line stop: (lastIndex max: line first). ^true! ! !DisplayScanner commentStamp: 'nice 10/11/2013 23:45' prior: 75993926! A DisplayScanner is an abstract class for displaying characters. It is splitting text into elementary chunks of displayable String/Font pairs (see scanning protocol). Subclasses responsibility is to handle the effective rendering of these chunks on various backends. Instance Variables backgroundColor: defaultTextColor: foregroundColor: ignoreColorChanges: lastDisplayableIndex: lineY: morphicOffset: stopConditionsMustBeReset: backgroundColor - the background color for displaying next chunk of text. Note that this can be set to Color transparent, in which case no background is displayed. defaultTextColor - the default foreground color for displaying text in absence of other text attributes specification foregroundColor - the foreground color for displaying next chunk of text ignoreColorChanges - indicates that any change of color specified in text attributes shall be ignored. This is used for displaying text in a shadow mode, when dragging text for example. lastDisplayableIndex - the index of last character to be displayed. A different index than lastIndex is required in order to avoid display of control characters. This variable must be updated by the stop condition at each inner scan loop. lineY - the distance between destination form top and current line top morphicOffset - an offset for positionning the embedded morphs. THE EXACT SPECIFICATION YET REMAINS TO BE WRITTEN stopConditionsMustBeReset - indicates that it's necessary to call setStopConditions in next scan loop. Notes: In order to correctly set the lastDisplayableIndex, the display scanner performs the stopCondition BEFORE displaying the string being scanned. This explains why the stopCondition must not reset the font immediately, but differ this reset AFTER the display, thanks to stopConditionsMustBeReset. ! !BitBltDisplayScanner commentStamp: 'nice 10/12/2013 01:36' prior: 75995907! A BitBltDisplayScanner displays characters on Screen or other Form with help of a BitBlt. Instance Variables bitBlt: fillBlt: bitBlt - the object which knows how to copy bits from one Form (the font glyph data) to another (the destination Form) fillBlt - another object for copying form bits, initialized for displaying the background. ! !BitBltDisplayScanner class methodsFor: 'queries' stamp: 'ar 5/17/2000 17:39'! defaultFont ^ TextStyle defaultFont! ! !BitBltDisplayScanner methodsFor: 'displaying' stamp: 'nice 10/19/2013 13:12'! displayEmbeddedForm: aForm aForm displayOn: bitBlt destForm at: destX @ (lineY + line baseline - aForm height) clippingBox: bitBlt clipRect! ! !BitBltDisplayScanner methodsFor: 'displaying' stamp: 'nice 10/12/2013 01:06'! displayString: string from: startIndex to: stopIndex at: aPoint font displayString: string on: bitBlt from: startIndex to: stopIndex at: aPoint kern: kern! ! !BitBltDisplayScanner methodsFor: 'displaying' stamp: 'nice 10/12/2013 01:08'! fillTextBackground fillBlt == nil ifFalse: ["Not right" fillBlt destX: line left destY: lineY width: line width left height: line lineHeight; copyBits].! ! !BitBltDisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/13/2013 22:10'! plainTab | nextDestX | nextDestX := super plainTab. fillBlt == nil ifFalse: [fillBlt destX: destX destY: destY width: nextDestX - destX height: font height; copyBits]. ^nextDestX! ! !BitBltDisplayScanner methodsFor: 'private' stamp: 'ar 5/17/2000 19:26'! setDestForm: df bitBlt setDestForm: df.! ! !BitBltDisplayScanner methodsFor: 'private' stamp: 'nice 10/12/2013 01:29'! setFont super setFont. "Sets font and emphasis bits, and maybe foregroundColor" font installOn: bitBlt foregroundColor: foregroundColor backgroundColor: Color transparent! ! !BitBltDisplayScanner methodsFor: 'private' stamp: 'hmm 9/16/2000 21:29'! setPort: aBitBlt "Install the BitBlt to use" bitBlt := aBitBlt. bitBlt sourceX: 0; width: 0. "Init BitBlt so that the first call to a primitive will not fail" bitBlt sourceForm: nil. "Make sure font installation won't be confused" ! ! !BitBltDisplayScanner methodsFor: 'private' stamp: 'nice 10/12/2013 01:32'! text: t textStyle: ts foreground: foreColor background: backColor fillBlt: blt ignoreColorChanges: shadowMode text := t. textStyle := ts. foregroundColor := defaultTextColor := foreColor. (backgroundColor := backColor) isTransparent ifFalse: [fillBlt := blt. fillBlt fillColor: backgroundColor]. ignoreColorChanges := shadowMode! ! !DisplayScanner class methodsFor: 'queries' stamp: 'ar 5/17/2000 17:39'! defaultFont ^ TextStyle defaultFont! ! !DisplayScanner class methodsFor: 'instance creation' stamp: 'nice 10/12/2013 03:36'! new "Use default concrete class" ^(self == DisplayScanner ifTrue: [BitBltDisplayScanner] ifFalse: [self]) basicNew initialize! ! !DisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 23:35'! cr "When a carriage return is encountered, simply increment the pointer into the paragraph." pendingKernX := 0. lastDisplayableIndex := lastIndex - 1. (lastIndex < text size and: [(text at: lastIndex) = CR and: [(text at: lastIndex+1) = Character lf]]) ifTrue: [lastIndex := lastIndex + 2] ifFalse: [lastIndex := lastIndex + 1]. ^false! ! !DisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 23:37'! crossedX "This condition will sometimes be reached 'legally' during display, when, for instance the space that caused the line to wrap actually extends over the right boundary. This character is allowed to display, even though it is technically outside or straddling the clipping rectangle since it is in the normal case not visible and is in any case appropriately clipped by the scanner." self advanceIfFirstCharOfLine. lastDisplayableIndex := lastIndex - 1. ^ true ! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/11/2013 23:46'! defaultTextColor defaultTextColor ifNil:[defaultTextColor := Color black]. ^defaultTextColor! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/11/2013 23:46'! defaultTextColor: color defaultTextColor := color.! ! !DisplayScanner methodsFor: 'displaying' stamp: 'nice 10/19/2013 13:13'! displayEmbeddedForm: aForm self subclassResponsibility! ! !DisplayScanner methodsFor: 'scanning' stamp: 'nice 10/22/2013 20:51'! displayLine: textLine offset: offset leftInRun: leftInRun "The call on the primitive (scanCharactersFrom:to:in:rightX:) will be interrupted according to an array of stop conditions passed to the scanner at which time the code to handle the stop condition is run and the call on the primitive continued until a stop condition returns true (which means the line has terminated). leftInRun is the # of characters left to scan in the current run; when 0, it is time to call setStopConditions." | stopCondition nowLeftInRun startIndex string lastPos lineHeight stop | line := textLine. morphicOffset := offset. lineY := line top + offset y. lineHeight := line lineHeight. rightMargin := line rightMargin + offset x. lastIndex := line first. leftInRun <= 0 ifTrue: [self setStopConditions]. leftMargin := (line leftMarginForAlignment: alignment) + offset x. destX := leftMargin. self fillTextBackground. lastDisplayableIndex := lastIndex := line first. leftInRun <= 0 ifTrue: [nowLeftInRun := text runLengthFor: lastIndex] ifFalse: [nowLeftInRun := leftInRun]. destY := lineY + line baseline - font ascent. runStopIndex := lastIndex + (nowLeftInRun - 1) min: line last. spaceCount := 0. string := text string. [ "reset the stopping conditions of this displaying loop, and also the font." stopConditionsMustBeReset ifTrue:[self setStopConditions]. "remember where this portion of the line starts" startIndex := lastIndex. lastPos := destX@destY. "find the end of this portion of the line" stopCondition := self scanCharactersFrom: lastIndex to: runStopIndex in: string rightX: rightMargin. "handle the stop condition - this will also set lastDisplayableIndex" stop := self perform: stopCondition. "display that portion of the line" lastDisplayableIndex >= startIndex ifTrue:[ self displayString: string from: startIndex to: lastDisplayableIndex at: lastPos]. "if the stop condition were true, stop the loop" stop ] whileFalse. ^ runStopIndex - lastIndex "Number of characters remaining in the current run"! ! !DisplayScanner methodsFor: 'displaying' stamp: 'nice 10/12/2013 01:05'! displayString: string from: startIndex to: stopIndex at: aPoint self subclassResponsibility! ! !DisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/10/2013 00:13'! endOfRun "The end of a run in the display case either means that there is actually a change in the style (run code) to be associated with the string or the end of this line has been reached." | runLength | lastDisplayableIndex := lastIndex. lastIndex = line last ifTrue: [^true]. runLength := text runLengthFor: (lastIndex := lastIndex + 1). runStopIndex := lastIndex + (runLength - 1) min: line last. "differ reset of stopConditions and font AFTER the dispaly of last scanned string" stopConditionsMustBeReset := true. ^ false! ! !DisplayScanner methodsFor: 'displaying' stamp: 'nice 10/12/2013 00:53'! fillTextBackground self subclassResponsibility! ! !DisplayScanner methodsFor: 'displaying' stamp: 'nice 10/12/2013 03:39'! initialize super initialize. ignoreColorChanges := false.! ! !DisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/8/2013 23:36'! paddedSpace "Each space is a stop condition when the alignment is right justified. Padding must be added to the base width of the space according to which space in the line this space is and according to the amount of space that remained at the end of the line when it was composed." lastDisplayableIndex := lastIndex - 1. spaceCount := spaceCount + 1. destX := destX + spaceWidth + kern + (line justifiedPadFor: spaceCount font: font). lastIndex := lastIndex + 1. pendingKernX := 0. ^ false! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/19/2013 16:21'! placeEmbeddedObject: anchoredMorphOrForm anchoredMorphOrForm relativeTextAnchorPosition ifNotNil:[:relativeTextAnchorPosition | anchoredMorphOrForm position: relativeTextAnchorPosition + (anchoredMorphOrForm owner textBounds origin x @ (lineY - morphicOffset y)). ^true ]. (anchoredMorphOrForm isMorph or: [anchoredMorphOrForm isPrimitiveCostume]) ifTrue: [ anchoredMorphOrForm position: (destX@(lineY + line baseline - anchoredMorphOrForm height)) - morphicOffset ] ifFalse: [ self displayEmbeddedForm: anchoredMorphOrForm ]. destX := destX + anchoredMorphOrForm width + kern. ^ true! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/11/2013 23:47'! setFont foregroundColor := self defaultTextColor. super setFont. "Sets font and emphasis bits, and maybe foregroundColor" text ifNotNil:[destY := lineY + line baseline - font ascent]! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/9/2013 23:39'! setStopConditions super setStopConditions. stopConditionsMustBeReset := false! ! !DisplayScanner methodsFor: 'stop conditions' stamp: 'nice 10/13/2013 22:10'! tab lastDisplayableIndex := lastIndex - 1. destX := self plainTab. lastIndex := lastIndex + 1. ^ false! ! !DisplayScanner methodsFor: 'private' stamp: 'nice 10/12/2013 01:33'! text: t textStyle: ts foreground: foreColor background: backColor fillBlt: blt ignoreColorChanges: shadowMode text := t. textStyle := ts. foregroundColor := defaultTextColor := foreColor. backgroundColor := backColor. ignoreColorChanges := shadowMode! ! !DisplayScanner methodsFor: 'text attributes' stamp: 'ar 1/8/2000 14:51'! textColor: textColor ignoreColorChanges ifTrue: [^ self]. foregroundColor := textColor! ! !MCClassDefinition methodsFor: '*Ring-Monticello' stamp: 'MartinDias 10/28/2013 16:16' prior: 24625367! asRingDefinition | ring | ring:= (RGFactory current createClassNamed: self className) category: self category; superclassName: self superclassName; traitCompositionSource: self traitCompositionString; addInstanceVariables: self instVarNames; addClassVariables: self classVarNames; addSharedPools: self poolDictionaries; comment: self comment; stamp: self commentStamp; definitionSource: self definitionString; withMetaclass. ring theMetaClass traitCompositionSource: self classTraitCompositionString; addInstanceVariables: self classInstVarNames; definitionSource: self classDefinitionString. ^ring! ! !String methodsFor: '*Text-Scanning' stamp: 'tpr 10/1/2013 17:44'! encodedCharSetAt: index "return the character encoding in place at index; the actual EncodedCharSet, not just a number. A bad index is an Error" ^EncodedCharSet charsetAt: (self at: index) leadingChar! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 10/28/2013 16:42' prior: 31605627! testNonExistingClass | newClass | newClass:= RGFactory current createClassNamed: #Connection. self assert: (newClass isClass). self assert: (newClass instanceVariables isEmpty). self assert: (newClass classVariables isEmpty). self assert: (newClass sharedPools isEmpty). self assert: (newClass hasMetaclass not). self assert: (newClass hasComment not). self assert: (newClass hasStamp not). self assert: (newClass parent = Smalltalk globals). self assert: (newClass package isNil). self assert: (newClass category isNil). self assert: (newClass hasMethods not). self assert: (newClass hasSuperclass not). self assert: (newClass hasTraitComposition not). self assert: (newClass isDefined not). self assert: (newClass hasProtocols not). ! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 10/28/2013 16:42' prior: 31611792! testWithPoolDictionaries | newClass poolVar | newClass:= (RGFactory current createClassNamed: #Text) addSharedPoolNamed: #TextConstants; yourself. self assert: (newClass sharedPools size = 1). self assert: (newClass sharedPoolNames size = 1). self assert: (newClass allSharedPools size = 1). "no hierarchy" self assert: (newClass allSharedPoolNames size = 1). poolVar:= newClass sharedPoolNamed: #TextConstants. self assert: (poolVar notNil). self assert: (poolVar isPoolVariable). self assert: (poolVar isVariable). self assert: (poolVar parent = newClass). self assert: (poolVar parentName == newClass name). self assert: (poolVar realClass = Text). newClass withMetaclass. self assert: (newClass theMetaClass allSharedPoolNames size = 1). newClass removeSharedPoolNamed: #TextConstants. self assert: (newClass sharedPools isEmpty).! ! RGClassDefinition removeSelector: #removePoolDictionary:! RGClassDefinition removeSelector: #removePoolDictNamed:! RGClassDefinition removeSelector: #poolDictionaries:! RGClassDefinition removeSelector: #poolDictionaries! RGClassDefinition removeSelector: #poolDictNames! RGClassDefinition removeSelector: #poolDictNamed:! RGClassDefinition removeSelector: #allPoolDictionaries! RGClassDefinition removeSelector: #allPoolDictNames! RGClassDefinition removeSelector: #addPoolDictionary:! RGClassDefinition removeSelector: #addPoolDictionaries:! RGClassDefinition removeSelector: #addPoolDictNamed:! RGTraitDescriptionDefinition removeSelector: #allPoolDictNames! RGMetaclassDefinition removeSelector: #allPoolDictNames! RGTraitDefinition removeSelector: #poolDictionaries! "Multilingual-Encodings"! "Multilingual-Languages"! "Multilingual-OtherLanguages"! "Ring-Core-Kernel"! "Ring-Monticello"! "Ring-Tests-Kernel"! "Text-Scanning"! ----End fileIn----! ----QUIT----an Array(2 November 2013 3:29:40 pm) Pharo.image priorSource: 25643436! ----STARTUP----an Array(2 November 2013 3:34:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 3:34:12 pm) Pharo-30538.image priorSource: 25735653! ----STARTUP----an Array(2 November 2013 4:01:31 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 15:59' prior: 75975390! commentForCurrentUpdate ^ '12033 Move PharoFilesOpener from System-Support to Files-System https://pharo.fogbugz.com/f/cases/12033 12041 Move SmalltalkImage>>addSnapshotRecord:andQuit: to ChangesLog https://pharo.fogbugz.com/f/cases/12041 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 15:59'! script194 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.175.mcz Morphic-Core-StephaneDucasse.13.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.16.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 15:59'! update30539 "self new update30539" self withUpdateLog: '12033 Move PharoFilesOpener from System-Support to Files-System https://pharo.fogbugz.com/f/cases/12033 12041 Move SmalltalkImage>>addSnapshotRecord:andQuit: to ChangesLog https://pharo.fogbugz.com/f/cases/12041 '. self loadTogether: self script194 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PharoFilesOpener commentStamp: '' prior: 49374421! My role is to open the .sources and .changes files. My only public methods are in the 'public' protocol. The most important method is #checkAndOpenSourcesAndChanges.! !PharoFilesOpener commentStamp: '' prior: 76079148! My role is to open the .sources and .changes files. My only public methods are in the 'public' protocol. The most important method is #checkAndOpenSourcesAndChanges.! !PharoFilesOpener class methodsFor: 'singleton' stamp: 'DamienCassou 8/16/2013 10:04' prior: 49374675! default ^ Default ifNil: [ Default := PharoFilesOpener new ]! ! !PharoFilesOpener class methodsFor: 'singleton' stamp: 'DamienCassou 8/16/2013 10:04' prior: 49374827! reset Default := nil! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 11:28' prior: 49374932! badContentMsg ^ '&fileRef has been injured by an unpacking utility. Crs were changed to CrLfs. Please set the preferences in your decompressing program to "do not convert text files" and unpack the system again.'! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 10:15' prior: 49375231! cannotLocateMsg ^ 'Pharo cannot locate &fileRef. Please check that the file is named properly and is in the same directory as this image.'! ! !PharoFilesOpener methodsFor: 'messages' stamp: 'DamienCassou 8/15/2013 10:16' prior: 49375455! cannotWriteMsg ^ 'Pharo cannot write to &fileRef. Please check that you have write permission for this file. You won''t be able to save this image correctly until you fix this.'! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:05' prior: 49375720! changesName ^ Smalltalk changesName! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/18/2013 17:00' prior: 49375838! checkAndOpenSourcesAndChanges "Open the changes and sources files and install them in the SourceFiles global variable." SourceFiles := Array with: self tryToOpenSources with: self tryToOpenChanges! ! !PharoFilesOpener methodsFor: 'helper' stamp: 'DamienCassou 9/13/2013 16:16' prior: 68123850! ignoreIfFail: aBlock ^ [ aBlock value ] ifError: [ ]! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30' prior: 49376133! inform: msg withChangesRef: fileRef self inform: msg withRef: 'the changes file named ' , fileRef! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 10:19' prior: 49376323! inform: msg withRef: fileRef self inform: (msg copyReplaceAll: '&fileRef' with: fileRef)! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30' prior: 49376504! inform: msg withSourceRef: fileRef self inform: msg withRef: 'the sources file named ' , fileRef! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 11:18' prior: 49376689! informCannotLocateSources | msg | msg := self cannotLocateMsg. Smalltalk os isMacOS ifTrue: [ msg := msg , ' Make sure the sources file is not an Alias.' ]. self inform: msg withSourceRef: self sourcesName! ! !PharoFilesOpener methodsFor: 'user interaction' stamp: 'DamienCassou 8/15/2013 11:30' prior: 49377005! informProblemInChanges: msg self inform: msg withChangesRef: self changesName! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:06' prior: 49377168! lastImagePath ^ Smalltalk lastImagePath! ! !PharoFilesOpener methodsFor: 'open changes' stamp: 'DamienCassou 9/13/2013 16:16' prior: 68124008! openChanges: changesPath | fileColocatedWithImage fileInWorkingDirectory locations | fileColocatedWithImage := changesPath asFileReference. fileInWorkingDirectory := FileSystem workingDirectory / fileColocatedWithImage basename. "locations references all possible path where to search for the .changes file." locations := Array with: fileColocatedWithImage with: fileInWorkingDirectory. "We first try to open a writeStream and, if we can't, we open a readStream. We have to use #ignoreIfFail: here because Pharo has no way to really tell us beforehand if opening a writeStream will work. Sending #isWritable is not enough because #isWritable does not check if the current user is the owner of the file or not." locations do: [ :file | self ignoreIfFail: [ ^ file writeStream ] ]. locations do: [ :file | self ignoreIfFail: [ ^ file readStream ] ]. ^ nil! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:44' prior: 49378756! openOrDownloadSources | sources | (sources := self openSources) ifNil: [ [ Smalltalk downloadSources "this method only exists when Zinc is loaded" ] on: MessageNotUnderstood do: [ ^ nil ]. sources := self openSources ]. ^ sources! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:38' prior: 49379093! openSources ^ self openSources: self sourcesName forImage: self lastImagePath! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 10:10' prior: 49379259! openSources: fullSourcesName forImage: imagePath "We first do a check to see if a compressed version ofthe sources file is present. Open the .sources file read-only after searching in: a) the directory where the VM lives b) the directory where the image came from c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it). " | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" (sourcesFile := Smalltalk vmDirectory / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream| ^ stream ]]. ^ nil ! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:34' prior: 49380434! setInformAboutReadOnlyChanges "Make sure the user is informed when the .changes file can not be written to." shouldInformAboutReadOnlyChanges := true! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:33' prior: 49380667! shouldInformAboutReadOnlyChanges "Answer true if and only if the user must be informed when the .changes file can not be written to." ^ shouldInformAboutReadOnlyChanges ifNil: [ shouldInformAboutReadOnlyChanges := true ]! ! !PharoFilesOpener methodsFor: 'delegated' stamp: 'DamienCassou 8/15/2013 10:07' prior: 49380974! sourcesName ^ Smalltalk sourcesName! ! !PharoFilesOpener methodsFor: 'open changes' stamp: 'DamienCassou 8/16/2013 10:10' prior: 49381098! tryToOpenChanges | changes | changes := self openChanges: self changesName. changes ifNil: [ self informProblemInChanges: self cannotLocateMsg. ^ nil ]. (changes isReadOnly and: [ self shouldInformAboutReadOnlyChanges ]) ifTrue: [ self informProblemInChanges: self cannotWriteMsg ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self informProblemInChanges: self badContentMsg ]. ^ changes! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 8/15/2013 11:17' prior: 49381611! tryToOpenSources | sources | sources := self openOrDownloadSources. ^ (sources isNil or: [ sources atEnd ]) ifTrue: [ self informCannotLocateSources. nil ] ifFalse: [ sources ]! ! !PharoFilesOpener methodsFor: 'public' stamp: 'DamienCassou 8/16/2013 10:34' prior: 49381883! unsetInformAboutReadOnlyChanges "Make sure the user is *not* informed when the .changes file can not be written to." shouldInformAboutReadOnlyChanges := false! ! !SourceFileArray methodsFor: 'file system' stamp: 'MartinDias 10/29/2013 13:27'! ensureOpen "Ensure that the source and changes files are opened." PharoFilesOpener default checkAndOpenSourcesAndChanges. SourceFileArray install.! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'MartinDias 10/29/2013 13:25' prior: 71943984! openSourceFiles self imagePath = LastImagePath ifFalse: ["Reset the author full name to blank when the image gets moved" LastImagePath := self imagePath. Author reset]. SourceFiles ensureOpen.! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'MartinDias 10/30/2013 13:49' prior: 38472151! snapshot: save andQuit: quit "Mark the changes file and close all files as part of #processShutdownList. If save is true, save the current state of this Smalltalk in the image file. If quit is true, then exit to the outer OS shell. The latter part of this method runs when resuming a previously saved image. This resume logic checks for a document file to process when starting up." | snapshotResult isNewImage | ChangesLog default logSnapshot: save andQuit: quit. self shutDownImage: quit. save ifTrue: [ snapshotResult := self snapshotPrimitive. "<-- PC frozen here on image file" isNewImage := snapshotResult == true. SystemAnnouncer uniqueInstance snapshotDone: isNewImage ] ifFalse: [ isNewImage := false ]. (quit and: [ isNewImage not ]) ifTrue: [ self quitPrimitive ]. "create a new session object if we're booting" isNewImage ifTrue: [ Session reset ]. self startupImage: isNewImage snapshotWorked: snapshotResult. "We return the resuming state, which may be useful for users to know the state of the image" ^ isNewImage! ! !ChangesLog methodsFor: 'logging' stamp: 'MartinDias 10/30/2013 13:53'! logSnapshot: save andQuit: quit "Log into the changes file the fact that the session will be either snapshoted, quit, or both." | message | (SourceFiles at: 2) ifNil: [ ^ self ]. message := String streamContents: [ :s | s nextPutAll: '----'; nextPutAll: (save ifTrue: [ quit ifTrue: [ 'QUIT' ] ifFalse: [ 'SNAPSHOT' ] ] ifFalse: [ quit ifTrue: [ 'QUIT/NOSAVE' ] ifFalse: [ 'NOP' ] ]); nextPutAll: '----'; print: Time dateAndTimeNow; space; nextPutAll: (Smalltalk imageFile basename); nextPutAll: ' priorSource: '; print: Smalltalk lastQuitLogPosition ]. self assureStartupStampLogged. save ifTrue: [ Smalltalk lastQuitLogPosition: ( (SourceFiles at: 2) setToEnd; position) ]. self logChange: message. self traceCr: message.! ! SmalltalkImage removeSelector: #addSnapshotRecord:andQuit:! "Files"! "System-Support"! ----End fileIn----! ----QUIT----an Array(2 November 2013 4:01:38 pm) Pharo.image priorSource: 25735858! ----STARTUP----an Array(2 November 2013 4:07:10 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 4:07:11 pm) Pharo-30539.image priorSource: 25758158! ----STARTUP----an Array(2 November 2013 6:18:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 18:15' prior: 76067812! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (part 2 of Step 2) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 18:15'! script195 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.646.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.15.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.16.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 18:15'! update30540 "self new update30540" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (part 2 of Step 2) '. self loadTogether: self script195 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TextComposer methodsFor: 'composition' stamp: 'nice 10/29/2013 03:35' prior: 75954306! composeLinesFrom: argStart to: argStop delta: argDelta into: argLinesCollection priorLines: argPriorLines atY: argStartY textStyle: argTextStyle text: argText container: argContainer wantsColumnBreaks: argWantsColumnBreaks wantsColumnBreaks := argWantsColumnBreaks. lines := argLinesCollection. theTextStyle := argTextStyle. theText := argText. theContainer := argContainer. deltaCharIndex := argDelta. currCharIndex := startCharIndex := argStart. stopCharIndex := argStop. prevLines := argPriorLines. currentY := argStartY. defaultLineHeight := theTextStyle lineGrid. maxRightX := theContainer left. possibleSlide := stopCharIndex < theText size and: [theContainer isMemberOf: Rectangle]. nowSliding := false. prevIndex := 1. scanner := CompositionScanner new text: theText textStyle: theTextStyle. scanner wantsColumnBreaks: wantsColumnBreaks. isFirstLine := true. self composeAllLines. isFirstLine ifTrue: ["No space in container or empty text" self addNullLineWithIndex: startCharIndex andRectangle: (theContainer left @ theContainer top extent: 0 @ defaultLineHeight)] ifFalse: [self fixupLastLineIfCR]. ^ {lines asArray. maxRightX}! ! !TextComposer methodsFor: 'protocol' stamp: 'nice 10/29/2013 02:33' prior: 75955579! multiComposeLinesFrom: argStart to: argStop delta: argDelta into: argLinesCollection priorLines: argPriorLines atY: argStartY textStyle: argTextStyle text: argText container: argContainer wantsColumnBreaks: argWantsColumnBreaks wantsColumnBreaks := argWantsColumnBreaks. lines := argLinesCollection. theTextStyle := argTextStyle. theText := argText. theContainer := argContainer. deltaCharIndex := argDelta. currCharIndex := startCharIndex := argStart. stopCharIndex := argStop. prevLines := argPriorLines. currentY := argStartY. defaultLineHeight := theTextStyle lineGrid. maxRightX := theContainer left. possibleSlide := stopCharIndex < theText size and: [theContainer isMemberOf: Rectangle]. nowSliding := false. prevIndex := 1. scanner := CompositionScanner new text: theText textStyle: theTextStyle. scanner wantsColumnBreaks: wantsColumnBreaks. isFirstLine := true. self composeAllLines. isFirstLine ifTrue: ["No space in container or empty text" self addNullLineWithIndex: startCharIndex andRectangle: (theContainer topLeft extent: 0 @ defaultLineHeight)] ifFalse: [self fixupLastLineIfCR]. ^ {lines asArray. maxRightX}! ! !Paragraph methodsFor: 'selection' stamp: 'nice 10/29/2013 02:37' prior: 75956839! characterBlockAtPoint: aPoint "Answer a CharacterBlock for the character in the text at aPoint." | line | line := lines at: (self lineIndexForPoint: aPoint). ^ (CharacterBlockScanner new text: text textStyle: textStyle) characterBlockAtPoint: aPoint index: nil in: line! ! !Paragraph methodsFor: 'selection' stamp: 'nice 10/29/2013 02:38' prior: 75957326! characterBlockForIndex: index "Answer a CharacterBlock for the character in text at index." | line | line := lines at: (self lineIndexForCharacter: index). ^ (CharacterBlockScanner new text: text textStyle: textStyle) characterBlockAtPoint: nil index: ((index max: line first) min: text size+1) in: line! ! !GrafPort methodsFor: 'accessing' stamp: 'nice 11/2/2013 17:29' prior: 75008886! displayScannerFor: para foreground: foreColor background: backColor ignoreColorChanges: shadowMode ^ (BitBltDisplayScanner new text: para text textStyle: para textStyle foreground: foreColor background: backColor fillBlt: self ignoreColorChanges: shadowMode) setPort: self shallowCopy! ! "Morphic-Base"! "Morphic-Core"! ----End fileIn----! ----QUIT----an Array(2 November 2013 6:18:38 pm) Pharo.image priorSource: 25758363! ----STARTUP----an Array(2 November 2013 6:23:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 6:23:24 pm) Pharo-30540.image priorSource: 25773450! ----STARTUP----an Array(2 November 2013 6:38:30 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/2/2013 18:35' prior: 76090317! commentForCurrentUpdate ^ '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (part 3 and part 4) '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/2/2013 18:35'! script196 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.20.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1665.mcz KernelTests-MarcusDenker.575.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.171.mcz Keymapping-KeyCombinations-MarcusDenker.21.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.15.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.97.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.438.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.587.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/2/2013 18:35'! update30541 "self new update30541" self withUpdateLog: '12030 Incorporate Squeak CharacterScanner clean-up https://pharo.fogbugz.com/f/cases/12030 (part 3 and part 4) '. self loadTogether: self script196 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LogicalFont methodsFor: 'forwarded to realFont' stamp: 'nice 10/29/2013 04:32'! characterToGlyphMap "Provided only for accelerating text scanning thru primitive 103 - see super." ^self realFont characterToGlyphMap! ! !LogicalFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:33' prior: 76004818! scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX "scan a single byte character string" ^self realFont scanByteCharactersFrom: startIndex to: stopIndex in: aByteString with: aCharacterScanner rightX: rightX! ! !LogicalFont methodsFor: '*Text-Scanning' stamp: 'nice 10/29/2013 04:33' prior: 76005153! scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX "scan a multibyte character string" ^self realFont scanMultibyteCharactersFrom: startIndex to: stopIndex in: aWideString with: aCharacterScanner rightX: rightX! ! !LogicalFont methodsFor: 'forwarded to realFont' stamp: 'nice 10/29/2013 04:33' prior: 24580021! xTable "Provided only for accelerating text scanning thru primitive 103 - see super." ^self realFont xTable! ! TextStopConditions removeSelector: #size! TextStopConditions removeSelector: #setStops:! TextStopConditions removeSelector: #postCopy! TextStopConditions removeSelector: #initialize! TextStopConditions removeSelector: #endOfRun:! TextStopConditions removeSelector: #endOfRun! TextStopConditions removeSelector: #crossedX:! TextStopConditions removeSelector: #crossedX! TextStopConditions removeSelector: #at:put:! TextStopConditions removeSelector: #at:! Smalltalk globals removeClassNamed: #TextStopConditions! MultiDisplayScanner removeSelector: #textColor:! MultiDisplayScanner removeSelector: #text:textStyle:foreground:background:fillBlt:ignoreColorChanges:! MultiDisplayScanner removeSelector: #tab! MultiDisplayScanner removeSelector: #setStopConditions! MultiDisplayScanner removeSelector: #setPort:! MultiDisplayScanner removeSelector: #setFont! MultiDisplayScanner removeSelector: #setDestForm:! MultiDisplayScanner removeSelector: #plainTab! MultiDisplayScanner removeSelector: #placeEmbeddedObject:! MultiDisplayScanner removeSelector: #paddedSpace! MultiDisplayScanner removeSelector: #isBreakableAt:in:in:! MultiDisplayScanner removeSelector: #endOfRun! MultiDisplayScanner removeSelector: #displayLine:offset:leftInRun:! MultiDisplayScanner removeSelector: #crossedX! MultiDisplayScanner removeSelector: #cr! MultiDisplayScanner class removeSelector: #defaultFont! Smalltalk globals removeClassNamed: #MultiDisplayScanner! MultiCompositionScanner removeSelector: #tab! MultiCompositionScanner removeSelector: #setStopConditions! MultiCompositionScanner removeSelector: #setFont! MultiCompositionScanner removeSelector: #setActualFont:! MultiCompositionScanner removeSelector: #rightX! MultiCompositionScanner removeSelector: #registerBreakableIndex! MultiCompositionScanner removeSelector: #placeEmbeddedObject:! MultiCompositionScanner removeSelector: #endOfRun! MultiCompositionScanner removeSelector: #crossedX! MultiCompositionScanner removeSelector: #cr! MultiCompositionScanner removeSelector: #composeFrom:inRectangle:firstLine:leftSide:rightSide:! MultiCompositionScanner removeSelector: #columnBreak! Smalltalk globals removeClassNamed: #MultiCompositionScanner! MultiCharacterScanner removeSelector: #widthOf:inFont:! MultiCharacterScanner removeSelector: #wantsColumnBreaks:! MultiCharacterScanner removeSelector: #textColor:! MultiCharacterScanner removeSelector: #text:textStyle:! MultiCharacterScanner removeSelector: #setFont:! MultiCharacterScanner removeSelector: #setFont! MultiCharacterScanner removeSelector: #setConditionArray:! MultiCharacterScanner removeSelector: #setAlignment:! MultiCharacterScanner removeSelector: #setActualFont:! MultiCharacterScanner removeSelector: #scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:! MultiCharacterScanner removeSelector: #scanJapaneseCharactersFrom:to:in:rightX:stopConditions:kern:! MultiCharacterScanner removeSelector: #scanCharactersFrom:to:in:rightX:stopConditions:kern:! MultiCharacterScanner removeSelector: #registerBreakableIndex! MultiCharacterScanner removeSelector: #plainTab! MultiCharacterScanner removeSelector: #placeEmbeddedObject:! MultiCharacterScanner removeSelector: #measureString:inFont:from:to:! MultiCharacterScanner removeSelector: #leadingTab! MultiCharacterScanner removeSelector: #isBreakableAt:in:in:! MultiCharacterScanner removeSelector: #initializeStringMeasurer! MultiCharacterScanner removeSelector: #initialize! MultiCharacterScanner removeSelector: #indentationLevel:! MultiCharacterScanner removeSelector: #indentationLevel! MultiCharacterScanner removeSelector: #handleIndentation! MultiCharacterScanner removeSelector: #embeddedObject! MultiCharacterScanner removeSelector: #combinableChar:for:! MultiCharacterScanner removeSelector: #columnBreak! MultiCharacterScanner removeSelector: #basicScanCharactersFrom:to:in:rightX:stopConditions:kern:! MultiCharacterScanner removeSelector: #addKern:! MultiCharacterScanner removeSelector: #addEmphasis:! MultiCharacterScanner class removeSelector: #initialize! MultiCharacterBlockScanner removeSelector: #tab! MultiCharacterBlockScanner removeSelector: #setStopConditions! MultiCharacterBlockScanner removeSelector: #setFont! MultiCharacterBlockScanner removeSelector: #placeEmbeddedObject:! MultiCharacterBlockScanner removeSelector: #paddedSpace! MultiCharacterBlockScanner removeSelector: #lastSpaceOrTabExtentSetX:! MultiCharacterBlockScanner removeSelector: #lastCharacterExtentSetX:! MultiCharacterBlockScanner removeSelector: #indentationLevel:! MultiCharacterBlockScanner removeSelector: #endOfRun! MultiCharacterBlockScanner removeSelector: #crossedX! MultiCharacterBlockScanner removeSelector: #cr! MultiCharacterBlockScanner removeSelector: #characterPointSetX:! MultiCharacterBlockScanner removeSelector: #characterBlockAtPoint:index:in:! MultiCharacterBlockScanner removeSelector: #buildCharacterBlockIn:! Smalltalk globals removeClassNamed: #MultiCharacterBlockScanner! Smalltalk globals removeClassNamed: #MultiCharacterScanner! LegacyCompositionScanner removeSelector: #tab! LegacyCompositionScanner removeSelector: #space! LegacyCompositionScanner removeSelector: #setStopConditions! LegacyCompositionScanner removeSelector: #setFont! LegacyCompositionScanner removeSelector: #setActualFont:! LegacyCompositionScanner removeSelector: #rightX! LegacyCompositionScanner removeSelector: #placeEmbeddedObject:! LegacyCompositionScanner removeSelector: #endOfRun! LegacyCompositionScanner removeSelector: #crossedX! LegacyCompositionScanner removeSelector: #cr! LegacyCompositionScanner removeSelector: #composeFrom:inRectangle:firstLine:leftSide:rightSide:! LegacyCompositionScanner removeSelector: #columnBreak! Smalltalk globals removeClassNamed: #LegacyCompositionScanner! LegacyCharacterScanner removeSelector: #wantsColumnBreaks:! LegacyCharacterScanner removeSelector: #textColor:! LegacyCharacterScanner removeSelector: #text:textStyle:! LegacyCharacterScanner removeSelector: #setFont:! LegacyCharacterScanner removeSelector: #setFont! LegacyCharacterScanner removeSelector: #setConditionArray:! LegacyCharacterScanner removeSelector: #setAlignment:! LegacyCharacterScanner removeSelector: #setActualFont:! LegacyCharacterScanner removeSelector: #scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:! LegacyCharacterScanner removeSelector: #scanJapaneseCharactersFrom:to:in:rightX:stopConditions:kern:! LegacyCharacterScanner removeSelector: #scanCharactersFrom:to:in:rightX:stopConditions:kern:! LegacyCharacterScanner removeSelector: #plainTab! LegacyCharacterScanner removeSelector: #placeEmbeddedObject:! LegacyCharacterScanner removeSelector: #measureString:inFont:from:to:! LegacyCharacterScanner removeSelector: #leadingTab! LegacyCharacterScanner removeSelector: #isBreakableAtIndex:! LegacyCharacterScanner removeSelector: #initializeStringMeasurer! LegacyCharacterScanner removeSelector: #initialize! LegacyCharacterScanner removeSelector: #indentationLevel:! LegacyCharacterScanner removeSelector: #indentationLevel! LegacyCharacterScanner removeSelector: #handleIndentation! LegacyCharacterScanner removeSelector: #embeddedObject! LegacyCharacterScanner removeSelector: #columnBreak! LegacyCharacterScanner removeSelector: #basicScanCharactersFrom:to:in:rightX:stopConditions:kern:! LegacyCharacterScanner removeSelector: #addKern:! LegacyCharacterScanner removeSelector: #addEmphasis:! LegacyCharacterScanner class removeSelector: #initialize! LegacyCharacterBlockScanner removeSelector: #tab! LegacyCharacterBlockScanner removeSelector: #setStopConditions! LegacyCharacterBlockScanner removeSelector: #setFont! LegacyCharacterBlockScanner removeSelector: #placeEmbeddedObject:! LegacyCharacterBlockScanner removeSelector: #paddedSpace! LegacyCharacterBlockScanner removeSelector: #lastSpaceOrTabExtentSetX:! LegacyCharacterBlockScanner removeSelector: #lastCharacterExtentSetX:! LegacyCharacterBlockScanner removeSelector: #indentationLevel:! LegacyCharacterBlockScanner removeSelector: #endOfRun! LegacyCharacterBlockScanner removeSelector: #crossedX! LegacyCharacterBlockScanner removeSelector: #cr! LegacyCharacterBlockScanner removeSelector: #characterPointSetX:! LegacyCharacterBlockScanner removeSelector: #characterBlockAtPoint:index:in:! Smalltalk globals removeClassNamed: #LegacyCharacterBlockScanner! Smalltalk globals removeClassNamed: #LegacyCharacterScanner! "FreeType"! "Text-Scanning"! ----End fileIn----! ----QUIT----an Array(2 November 2013 6:38:37 pm) Pharo.image priorSource: 25773655! ----STARTUP----an Array(2 November 2013 6:43:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(2 November 2013 6:43:25 pm) Pharo-30541.image priorSource: 25794747! ----STARTUP----an Array(3 November 2013 12:01:36 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/3/2013 11:58' prior: 76105609! commentForCurrentUpdate ^ '12057 #localSelectors: can be implemented in TBehavior https://pharo.fogbugz.com/f/cases/12057 12058 Move all the old Url Classes to Deprecated30 https://pharo.fogbugz.com/f/cases/12058 12050 KM modification to make plateform specific shortcuts work when defined without pragmas https://pharo.fogbugz.com/f/cases/12050'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/3/2013 11:58'! script197 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.232.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.174.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1667.mcz KernelTests-MarcusDenker.577.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.24.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.126.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.15.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/3/2013 11:58'! update30542 "self new update30542" self withUpdateLog: '12057 #localSelectors: can be implemented in TBehavior https://pharo.fogbugz.com/f/cases/12057 12058 Move all the old Url Classes to Deprecated30 https://pharo.fogbugz.com/f/cases/12058 12050 KM modification to make plateform specific shortcuts work when defined without pragmas https://pharo.fogbugz.com/f/cases/12050'. self loadTogether: self script197 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Url commentStamp: '' prior: 75727321! I am deprecated and replaced by ZnUrl. A Uniform Resource Locator. It specifies the location of a document on the Internet. The base class is abstract; child classes break different types of URLs down in ways appropriate for that type.! !FileUrl commentStamp: 'gk 10/21/2005 10:58' prior: 42304375! This class models a file URL according to (somewhat) RFC1738, see http://www.w3.org/Addressing/rfc1738.txt Here is the relevant part of the RFC: 3.10 FILES The file URL scheme is used to designate files accessible on a particular host computer. This scheme, unlike most other URL schemes, does not designate a resource that is universally accessible over the Internet. A file URL takes the form: file:/// where is the fully qualified domain name of the system on which the is accessible, and is a hierarchical directory path of the form //.../. For example, a VMS file DISK$USER:[MY.NOTES]NOTE123456.TXT might become As a special case, can be the string "localhost" or the empty string; this is interpreted as `the machine from which the URL is being interpreted'. The file URL scheme is unusual in that it does not specify an Internet protocol or access method for such files; as such, its utility in network protocols between hosts is limited. From the above we can conclude that the RFC says that the part never starts or ends with a slash and is always absolute. If the last name can be a directory instead of a file is not specified clearly. The path is stored as a SequenceableCollection of path parts. Notes regarding non RFC features in this class: - If the last path part is the empty string, then the FileUrl is referring to a directory. This is also shown with a trailing slash when converted to a String. - The FileUrl has an attribute isAbsolute which signals if the path should be considered absolute or relative to the current directory. This distinction is not visible in the String representation of FileUrl, since the RFC does not have that. - Fragment is supported (kept for historical reasons) ! !GenericUrl commentStamp: '' prior: 42317527! a URL type that can't be broken down in any systematic way. For example, mailto: and telnet: URLs. The part after the scheme name is stored available via the #locator message.! !BrowserUrl commentStamp: '' prior: 42144992! URLs that instruct a browser to do something.! !MailtoUrl commentStamp: '' prior: 42402170! a URL specifying a mailing address; activating it triggers a mail-sender to start up, if one is present.! !HierarchicalUrl commentStamp: '' prior: 42337434! A URL which has a hierarchical encoding. For instance, http and ftp URLs are hierarchical.! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 70069525! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !ClassTest methodsFor: 'testing' stamp: 'MarcusDenker 11/3/2013 11:41' prior: 75548589! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #baseClass #basicLocalSelectors #classClass isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !KMMetaModifier methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 20:33' prior: 68332291! symbol ^ '⌘'! ! !KMComposedModifier methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:09' prior: 68331146! symbol ^ String streamContents: [ :stream | self modifiers do: [ :e | stream << e symbol ] ]! ! !KMKeymap methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 11/1/2013 16:11' prior: 34000426! matchesCompletely: aShortcut ^ self shortcut matchesCompletely: aShortcut! ! !KMUntypeableSingleKeyCombination methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 21:03' prior: 68338187! symbol "I return the visual symbol for this shortcut. For instance for the Arrow Up key I contain a string with an arrow up key symbol: ↑ and now the Character arrowUp." ^ symbol! ! !KMAltModifier methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 20:32' prior: 68338589! symbol ^ '⌥'! ! !BehaviorTest methodsFor: 'tests' stamp: 'MarcusDenker 11/3/2013 11:41' prior: 75517398! testBehaviorRespectsPolymorphismWithTraitBehavior | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Behavior and TraitBehavior it must access some instance variable, otherwise the method can be implemented in TBehavior" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Behavior and: TraitBehavior. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Behavior and TraitBehavior, and they have different implementations, it must be declared in TBehavior as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Behavior and: TraitBehavior. differentMethodsWithSameSelector do: [ :selector | (TBehavior >> selector) sourceCode. self assert: (TBehavior >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other" "If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list" "format -> the instance variable format belongs to Behavior but not to TraitBehavior, if we add the getter to TraitBehavior, what should we return? isBehavior -> returns true for all the classes but false for the traits, the implementation for traits (and the rest of the objects) is implemented in Object>>isBehavior layout -> is an instance variable of Behavior but not of TraitBehavior" self assert: (Behavior localSelectors difference: TraitBehavior localSelectors) equals: #(#externalTypeAlias: #nbBindingOf: #format #nbFnArgument:generator: #layout #isBehavior) asSet. "localSelectors, localSelectors:, basicLocalSelectors, basicLocalSelectors: -> the instance variable localSelectors belongs to TraitBehavior but not to Behavior" "browse is implemeted differently for traits, the implementation for classes is in Object" "isTrait answers true for traits, for the rest of objects answer false, the implementation is in Object" self assert: (TraitBehavior localSelectors difference: Behavior localSelectors) equals: #(#browse #basicLocalSelectors #basicLocalSelectors: #isTrait) asSet! ! !KMKeyCombinationChoice methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 11/1/2013 16:12'! matchesCompletely: anEventBuffer ^ shortcuts anySatisfy: [ :each | each matchesCompletely: anEventBuffer ]! ! !TBehavior methodsFor: '*OpalCompiler-Core' stamp: 'MarcusDenker 11/3/2013 11:37' prior: 75432935! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectors do: [:sel | self recompile: sel from: oldClass]. ! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 11/3/2013 11:37'! localSelectors: aSet self basicLocalSelectors: aSet! ! !KMKeyCombination methodsFor: 'matching' stamp: 'BenjaminVanRyseghem 11/1/2013 16:12' prior: 34019264! matchesCompletely: aKeyboardEvent ^ self = aKeyboardEvent asKeyCombination! ! !KMShiftModifier methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 20:33' prior: 68332648! symbol ^ '⇧'! ! !KMCtrlModifier methodsFor: 'printing' stamp: 'CamilloBruni 9/15/2013 20:32' prior: 68331265! symbol ^ '⌃'! ! !KMPlatformSpecificKeyCombination methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/1/2013 16:13'! matches: aCollection self platform == Smalltalk os platformFamily ifFalse: [ ^ false ]. ^ self shortcut matches: aCollection! ! !KMPlatformSpecificKeyCombination methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/1/2013 16:13'! matchesCompletely: aCollection self platform == Smalltalk os platformFamily ifFalse: [ ^ false ]. ^ self shortcut matchesCompletely: aCollection! ! !InvalidDirectoryError class methodsFor: 'exceptioninstantiator' stamp: 'ar 5/30/2001 20:49' prior: 24011781! pathName: badPathName ^self new pathName: badPathName! ! !InvalidDirectoryError methodsFor: 'exceptiondescription' stamp: 'StephaneDucasse 8/30/2009 16:54' prior: 24011545! defaultAction ^#()! ! !InvalidDirectoryError methodsFor: 'accessing' stamp: 'ar 5/30/2001 20:44' prior: 24011293! pathName ^pathName! ! !InvalidDirectoryError methodsFor: 'accessing' stamp: 'ar 5/30/2001 20:45' prior: 24011393! pathName: badPathName pathName := badPathName! ! !MetaclassTest methodsFor: 'tests' stamp: 'MarcusDenker 11/3/2013 11:42' prior: 75551198! testMetaclassAndTraitClassRespectsPolymorphismRules | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Metaclass and ClassTrait it must access some instance variable, otherwise the method can be implemented in TApplyingOnClassSide" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Metaclass and: ClassTrait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in Metaclass and ClassTrait, and they have different implementations, it must be declared in TApplyingOnClassSide as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Metaclass and: ClassTrait. differentMethodsWithSameSelector do: [ :selector | (TApplyingOnClassSide >> selector) sourceCode. self assert: (TApplyingOnClassSide >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list" "basicLocalSelectors basicLocalSelectors: localSelectors localSelectors: traitComposition traitComposition: -> accessors to instance variables that do not belong to ClassTrait baseClass classClass -> they have their equivalent for ClassTraits (baseTrait classTrait) environment postCopy -> the implementation for ClassTrait is in TBehavior veryDeepCopyWith: -> the implementation for ClassTraits is in Object fileOutOn:moveSource:toFile: fileOutOn:moveSource:toFile:initializing: -> the implementation for ClassTraits is in TClassDescription" self assert: (Metaclass localSelectors difference: ClassTrait localSelectors) = {#externalTypeAlias:. #baseClass. #basicLocalSelectors:. #basicLocalSelectors. #classClass. #isClass. #environment. #fileOutOn:moveSource:toFile:. #fileOutOn:moveSource:toFile:initializing:. #postCopy. #traitComposition. #traitComposition:. #veryDeepCopyWith:} asSet. "initializeWithBaseTrait: asMCDefinition -> has no equivalent in classes baseTrait isClassTrait classTrait baseTrait isBaseTrait classTrait: -> they have their equivalent for Metaclasses compile:classified:withStamp:notifying:logSource: -> the implementation for Metaclasses is in TClassDescription copy -> the implementation for Metaclasses is in Object" self assert: (ClassTrait localSelectors difference: Metaclass localSelectors) = {#initializeWithBaseTrait:. #asMCDefinition. #baseTrait:. #isClassTrait. #classTrait. #baseTrait. #compile:classified:withStamp:notifying:logSource:. #isBaseTrait. #copy. #classTrait:} asSet! ! !Url commentStamp: '' prior: 76138439! I am deprecated and replaced by ZnUrl. A Uniform Resource Locator. It specifies the location of a document on the Internet. The base class is abstract; child classes break different types of URLs down in ways appropriate for that type.! !FileUrl commentStamp: 'gk 10/21/2005 10:58' prior: 76138741! This class models a file URL according to (somewhat) RFC1738, see http://www.w3.org/Addressing/rfc1738.txt Here is the relevant part of the RFC: 3.10 FILES The file URL scheme is used to designate files accessible on a particular host computer. This scheme, unlike most other URL schemes, does not designate a resource that is universally accessible over the Internet. A file URL takes the form: file:/// where is the fully qualified domain name of the system on which the is accessible, and is a hierarchical directory path of the form //.../. For example, a VMS file DISK$USER:[MY.NOTES]NOTE123456.TXT might become As a special case, can be the string "localhost" or the empty string; this is interpreted as `the machine from which the URL is being interpreted'. The file URL scheme is unusual in that it does not specify an Internet protocol or access method for such files; as such, its utility in network protocols between hosts is limited. From the above we can conclude that the RFC says that the part never starts or ends with a slash and is always absolute. If the last name can be a directory instead of a file is not specified clearly. The path is stored as a SequenceableCollection of path parts. Notes regarding non RFC features in this class: - If the last path part is the empty string, then the FileUrl is referring to a directory. This is also shown with a trailing slash when converted to a String. - The FileUrl has an attribute isAbsolute which signals if the path should be considered absolute or relative to the current directory. This distinction is not visible in the String representation of FileUrl, since the RFC does not have that. - Fragment is supported (kept for historical reasons) ! !FileUrl class methodsFor: 'instance creation' stamp: 'gk 2/10/2004 12:16' prior: 22098492! absoluteFromText: aString "Method that can be called explicitly to create a FileUrl." ^self new privateInitializeFromText: aString! ! !FileUrl class methodsFor: 'instance creation' stamp: 'gk 2/10/2004 13:04' prior: 22098706! host: aHost pathParts: aCollectionOfPathParts isAbsolute: aBoolean "Create a FileUrl." ^self new host: aHost pathParts: aCollectionOfPathParts isAbsolute: aBoolean! ! !FileUrl class methodsFor: 'instance creation' stamp: 'gk 2/10/2004 13:10' prior: 22098953! pathParts: aCollectionOfPathParts "Create a FileUrl." ^self host: nil pathParts: aCollectionOfPathParts isAbsolute: true! ! !FileUrl class methodsFor: 'instance creation' stamp: 'gk 2/10/2004 13:06' prior: 22099157! pathParts: aCollectionOfPathParts isAbsolute: aBoolean "Create a FileUrl." ^self host: nil pathParts: aCollectionOfPathParts isAbsolute: aBoolean! ! !FileUrl class methodsFor: 'constants' stamp: 'gk 2/10/2004 10:33' prior: 22098391! schemeName ^'file'! ! !FileUrl methodsFor: 'access' stamp: 'CamilloBruni 5/4/2012 21:58' prior: 22089327! asFileReference "convert this FileUrl to a FileReference" ^ FileSystem disk root resolve: self pathString ! ! !FileUrl methodsFor: 'downloading' stamp: 'CamilloBruni 5/7/2012 01:13' prior: 22091292! default "Use the default local Pharo file directory." | local | local := self class pathParts: (FileSystem workingDirectory pathSegments), #('') isAbsolute: true. self privateInitializeFromText: self pathString relativeTo: local. "sets absolute also"! ! !FileUrl methodsFor: 'access' stamp: 'gk 10/21/2005 11:14' prior: 22089500! fileName "Return the last part of the path, most often a filename but can also be a directory." ^self path last! ! !FileUrl methodsFor: 'testing' stamp: 'gk 2/9/2004 20:32' prior: 22094881! firstPartIsDriveLetter "Return true if the first part of the path is a letter followed by a $: like 'C:' " | firstPart | path isEmpty ifTrue: [^false]. firstPart := path first. ^firstPart size = 2 and: [ firstPart first isLetter and: [firstPart last = $:]]! ! !FileUrl methodsFor: 'downloading' stamp: 'ls 8/4/1998 20:42' prior: 22091618! hasContents ^true! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 2/10/2004 10:16' prior: 22089846! host "Return the host name, either 'localhost', '', or a fully qualified domain name." ^host ifNil: ['']! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 2/12/2004 16:22' prior: 22090021! host: hostName "Set the host name, either 'localhost', '', or a fully qualified domain name." host := hostName! ! !FileUrl methodsFor: 'private-initialization' stamp: 'gk 2/10/2004 13:05' prior: 22095231! host: aHostString pathParts: aCollection isAbsolute: aBoolean host := aHostString. path := aCollection. isAbsolute := aBoolean! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 75821137! initializeFromPathString: aPathString " is a file path as a String. We construct a path collection using various heuristics." | pathString hasDriveLetter | pathString := aPathString. pathString isEmpty ifTrue: [pathString := '/']. path := (pathString findTokens: '/') collect: [:token | token urlDecoded]. "A path like 'C:' refers in practice to 'c:/'" ((pathString endsWith: '/') or: [(hasDriveLetter := self firstPartIsDriveLetter) and: [path size = 1]]) ifTrue: [path add: '']. "Decide if we are absolute by checking for leading $/ or beginning with drive letter. Smarts for other OSes?" self isAbsolute: ((pathString beginsWith: '/') or: [hasDriveLetter ifNil: [self firstPartIsDriveLetter]])! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 10/21/2005 11:12' prior: 22090203! isAbsolute "Should the path be considered absolute to the filesystem instead of relative to the default directory?" ^isAbsolute! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 10/21/2005 11:13' prior: 22090403! isAbsolute: aBoolean "Set if the path should be considered absolute to the filesystem instead of relative to the default directory." isAbsolute := aBoolean! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 2/10/2004 00:15' prior: 22090629! path "Return an ordered collection of the path elements." ^path! ! !FileUrl methodsFor: 'accessing' stamp: 'gk 10/21/2005 11:11' prior: 22090764! path: aCollection "Set the collection of path elements." path := aCollection! ! !FileUrl methodsFor: 'paths' stamp: 'gk 2/10/2004 00:19' prior: 22092944! pathDirString "Path to directory as url, using slash as delimiter. Filename is left out." ^String streamContents: [ :s | isAbsolute ifTrue: [ s nextPut: $/ ]. 1 to: self path size - 1 do: [ :ii | s nextPutAll: (path at: ii); nextPut: $/]]! ! !FileUrl methodsFor: 'paths' stamp: 'CamilloBruni 5/7/2012 01:13' prior: 22093265! pathForDirectory "Path using local file system's pathname delimiter. DOS paths with drive letters should not be prepended with a delimiter even though they are absolute. Filename is left out." | delimiter | delimiter := FileSystem disk separator. ^String streamContents: [ :s | (self isAbsolute and: [self firstPartIsDriveLetter not]) ifTrue: [ s nextPut: delimiter ]. 1 to: self path size - 1 do: [ :ii | s nextPutAll: (path at: ii); nextPut: delimiter]]! ! !FileUrl methodsFor: 'access' stamp: 'CamilloBruni 5/4/2012 21:50' prior: 22089688! pathForFile "Path using local file system's delimiter. $\ or $:" ^ self asFileReference! ! !FileUrl methodsFor: 'private-initialization' stamp: 'gk 2/10/2004 13:04' prior: 22096261! pathParts: aCollection isAbsolute: aBoolean ^self host: nil pathParts: aCollection isAbsolute: aBoolean! ! !FileUrl methodsFor: 'paths' stamp: 'SvenVanCaekenberghe 10/27/2013 11:43' prior: 75821967! pathString "Path as it appears in a URL with $/ as delimiter." ^String streamContents: [ :s | | first | "isAbsolute ifTrue:[ s nextPut: $/ ]." first := true. self path do: [ :p | first ifFalse: [ s nextPut: $/ ]. first := false. s nextPutAll: p urlEncoded ] ]! ! !FileUrl methodsFor: 'copying' stamp: 'nice 1/13/2010 21:57' prior: 22091120! postCopy "Be sure not to share the path with the copy." super postCopy. path := path copy! ! !FileUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:44' prior: 75822346! printOn: aStream "Return the FileUrl according to RFC1738 plus supporting fragments: 'file:///#' Note that being '' is equivalent to 'localhost'. Note: The pathString can not start with a leading $/ to indicate an 'absolute' file path. This is not according to RFC1738 where the path should have no leading or trailing slashes, and always be considered absolute relative to the filesystem." aStream nextPutAll: self schemeName, '://'. host ifNotNil: [aStream nextPutAll: host]. aStream nextPut: $/; nextPutAll: self pathString. fragment ifNotNil: [aStream nextPut: $#; nextPutAll: fragment urlEncoded].! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/25/2013 14:59' prior: 75703858! privateInitializeFromText: aString "Calculate host and path from a file URL in String format. Some malformed formats are allowed and interpreted by guessing." | schemeName pathString bare i | bare := aString trimBoth. schemeName := self class schemeNameForString: bare. (schemeName isNil or: [schemeName ~= self schemeName]) ifTrue: [ host := ''. pathString := bare] ifFalse: [ "First remove schemeName and colon" bare := bare copyFrom: (schemeName size + 2) to: bare size. "A proper file URL then has two slashes before host, A malformed URL is interpreted as using syntax file:." (bare beginsWith: '//') ifTrue: [i := bare indexOf: $/ startingAt: 3. i=0 ifTrue: [ host := bare copyFrom: 3 to: bare size. pathString := ''] ifFalse: [ host := bare copyFrom: 3 to: i-1. pathString := bare copyFrom: host size + 3 to: bare size]] ifFalse: [host := ''. pathString := bare]]. self initializeFromPathString: pathString ! ! !FileUrl methodsFor: 'private-initialization' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 75823119! privateInitializeFromText: pathString relativeTo: aUrl " should be a filesystem path. This url is adjusted to be aUrl + the path." | newPath | self host: aUrl host. self initializeFromPathString: pathString. self isAbsolute: aUrl isAbsolute. newPath := aUrl path copy. newPath removeLast. "empty string that says its a directory" path do: [ :token | ((token ~= '..') and: [token ~= '.']) ifTrue: [ newPath addLast: token urlDecoded ]. token = '..' ifTrue: [ newPath isEmpty ifFalse: [ newPath last = '..' ifFalse: [ newPath removeLast ] ] ]. "token = '.' do nothing" ]. path := newPath ! ! !FileUrl methodsFor: 'downloading' stamp: 'SeanDeNigris 7/12/2012 08:45' prior: 22091715! retrieveContents | s entries pathString | pathString := self pathForFile. "We pursue the execution even if the file is not found" [ | type file |file := FileStream readOnlyFileNamed: pathString. type := file mimeTypes. type ifNotNil: [type := type first]. type ifNil: [type := MIMEDocument guessTypeFromName: self path last]. ^MIMELocalFileDocument contentStream: file mimeType: type] on: FileDoesNotExistException do:[:ex| ]. "see if it's a directory... If not, then nil is returned" entries := [pathString asFileReference entries] on: InvalidDirectoryError do: [:ex| ^ nil]. s := String new writeStream. (pathString endsWith: '/') ifFalse: [ pathString := pathString, '/' ]. s nextPutAll: 'Directory Listing for ', pathString, ''. s nextPutAll: '

Directory Listing for ', pathString, '

'. s nextPutAll: ''. ^MIMEDocument contentType: 'text/html' content: s contents url: ('file://', pathString)! ! !FileUrl methodsFor: 'classification' stamp: 'gk 2/10/2004 10:34' prior: 22090916! scheme ^self class schemeName! ! !FileUrl methodsFor: 'classification' stamp: 'gk 2/10/2004 10:34' prior: 22091018! schemeName ^self class schemeName! ! !GenericUrl commentStamp: '' prior: 76140733! a URL type that can't be broken down in any systematic way. For example, mailto: and telnet: URLs. The part after the scheme name is stored available via the #locator message.! !BrowserUrl commentStamp: '' prior: 76140970! URLs that instruct a browser to do something.! !BrowserUrl class methodsFor: 'constants' stamp: 'SeanDeNigris 1/29/2011 19:33' prior: 18516345! schemeName ^ 'browser'! ! !BrowserUrl methodsFor: 'downloading' stamp: 'ls 8/4/1998 20:42' prior: 18516136! hasContents ^true! ! !GenericUrl class methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:01' prior: 75717117! absoluteFromText: aString | schemeName locator | schemeName := self schemeNameForString: aString. schemeName ifNil: [ ^self schemeName: 'xnoscheme' locator: aString ]. locator := aString copyFrom: (schemeName size + 2) to: aString size. ^self schemeName: schemeName locator: locator! ! !GenericUrl class methodsFor: 'instance creation' stamp: 'ls 6/20/1998 19:46' prior: 22881419! schemeName: schemeName locator: locator ^self new schemeName: schemeName locator: locator! ! !GenericUrl methodsFor: 'access' stamp: 'ls 6/20/1998 19:46' prior: 22880109! locator ^locator! ! !GenericUrl methodsFor: 'printing' stamp: 'CamilloBruni 12/16/2011 11:27' prior: 22880853! printOn: aStream self schemeName ifNotNil: [ aStream nextPutAll: self schemeName; nextPut: $:]. aStream nextPutAll: self locator. self fragment ifNotNil: [ aStream nextPut: $#; nextPutAll: self fragment].! ! !GenericUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:00' prior: 75717505! privateInitializeFromText: aString schemeName := self class schemeNameForString: aString. locator := schemeName ifNil: [ aString ] ifNotNil: [ aString copyFrom: (schemeName size+2) to: aString size ].! ! !GenericUrl methodsFor: 'parsing' stamp: 'ls 8/4/1998 01:28' prior: 22880668! privateInitializeFromText: aString relativeTo: aUrl schemeName := aUrl schemeName. locator := aString.! ! !GenericUrl methodsFor: 'classification' stamp: 'FBS 11/20/2003 13:39' prior: 22880294! scheme ^ self schemeName.! ! !GenericUrl methodsFor: 'access' stamp: 'ls 6/20/1998 19:46' prior: 22880193! schemeName ^schemeName! ! !GenericUrl methodsFor: 'private' stamp: 'ls 6/20/1998 19:46' prior: 22881138! schemeName: schemeName0 locator: locator0 schemeName := schemeName0. locator := locator0.! ! !MailtoUrl commentStamp: '' prior: 76141074! a URL specifying a mailing address; activating it triggers a mail-sender to start up, if one is present.! !MailtoUrl class methodsFor: 'constants' stamp: 'SeanDeNigris 1/29/2011 19:33' prior: 25331028! schemeName ^ 'mailto'! ! !MailtoUrl methodsFor: 'downloading' stamp: 'dvf 5/11/2002 00:47' prior: 25330377! activate "Activate a Celeste window for the receiver" MailSender sendMessage: (MailMessage from: self composeText)! ! !MailtoUrl methodsFor: 'downloading' stamp: 'dvf 5/11/2002 01:00' prior: 25330566! composeText "Answer the template for a new message." ^ String streamContents: [:str | str nextPutAll: 'From: '. str nextPutAll: MailSender userName; cr. str nextPutAll: 'To: '. str nextPutAll: locator asString; cr. str nextPutAll: 'Subject: '; cr. str cr].! ! !HierarchicalUrl commentStamp: '' prior: 76141243! A URL which has a hierarchical encoding. For instance, http and ftp URLs are hierarchical.! !FtpUrl class methodsFor: 'constants' stamp: 'SeanDeNigris 8/26/2012 15:32' prior: 22809893! schemeName ^ 'ftp'.! ! !HierarchicalUrl class methodsFor: 'instance creation' stamp: 'ls 6/20/1998 19:41' prior: 23414488! schemeName: schemeName authority: authority path: path query: query ^self new schemeName: schemeName authority: authority path: path query: query! ! !HierarchicalUrl methodsFor: 'access' stamp: 'ls 6/20/1998 19:58' prior: 23407291! authority ^authority! ! !HierarchicalUrl methodsFor: 'access' stamp: 'gk 10/21/2005 11:06' prior: 23407385! fileName "Return the last part of the path, most often a filename but does not need to be." ^self path last! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:44' prior: 75823857! fullPath | ans | ans := String new writeStream. path do: [ :pathElem | ans nextPut: $/. ans nextPutAll: pathElem urlEncoded ]. self query ifNotNil: [ ans nextPut: $?. ans nextPutAll: self query. ]. self fragment ifNotNil: [ ans nextPut: $#. ans nextPutAll: self fragment urlEncoded ]. ^ ans contents! ! !HierarchicalUrl methodsFor: 'downloading' stamp: 'ls 8/4/1998 20:44' prior: 23409046! hasContents "most of these do...." ^true! ! !HierarchicalUrl methodsFor: 'access' stamp: 'tk 9/6/1998 12:45' prior: 23407567! isAbsolute path size > 0 ifFalse: [^ false]. (path at: 1) size > 0 ifFalse: [^ false]. ^ ((path at: 1) at: 1) ~~ $.! ! !HierarchicalUrl methodsFor: 'access' stamp: 'ls 6/15/2003 13:13' prior: 23407759! password "http://user:pword@foo.com' asUrl password" ^password! ! !HierarchicalUrl methodsFor: 'access' stamp: 'KLC 4/3/2006 10:05' prior: 23407895! path "return a collection of the decoded path elements, as strings" ^path! ! !HierarchicalUrl methodsFor: 'access' stamp: 'gk 10/21/2005 11:15' prior: 23408043! path: aCollection "Set the collection of path elements." path := aCollection! ! !HierarchicalUrl methodsFor: 'access' stamp: 'mir 7/30/1999 13:05' prior: 23408195! port ^port! ! !HierarchicalUrl methodsFor: 'copying' stamp: 'nice 1/13/2010 21:58' prior: 23408877! postCopy "Be sure not to share the path with the copy" super postCopy. path := path copy! ! !HierarchicalUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/27/2013 11:45' prior: 75824284! printOn: aStream aStream nextPutAll: self schemeName. aStream nextPutAll: '://'. self username ifNotNil: [ aStream nextPutAll: self username urlEncoded. self password ifNotNil: [ aStream nextPutAll: ':'. aStream nextPutAll: self password urlEncoded]. aStream nextPutAll: '@' ]. aStream nextPutAll: self authority. port ifNotNil: [aStream nextPut: $:; print: port]. path do: [ :pathElem | aStream nextPut: $/. aStream nextPutAll: pathElem urlEncoded ]. self query ifNotNil: [ aStream nextPut: $?. aStream nextPutAll: self query. ]. self fragment ifNotNil: [ aStream nextPut: $#. aStream nextPutAll: self fragment urlEncoded ].! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/27/2013 12:20' prior: 75825049! privateInitializeFromText: aString | remainder ind specifiedSchemeName | remainder := aString. schemeName ifNil: [specifiedSchemeName := self class schemeNameForString: remainder. specifiedSchemeName ifNotNil: [schemeName := specifiedSchemeName. remainder := remainder copyFrom: schemeName size + 2 to: remainder size]. schemeName ifNil: ["assume HTTP" schemeName := 'http']]. "remove leading // if it's there" (remainder beginsWith: '//') ifTrue: [remainder := remainder copyFrom: 3 to: remainder size]. "get the query" ind := remainder indexOf: $?. ind > 0 ifTrue: [query := remainder copyFrom: ind + 1 to: remainder size. remainder := remainder copyFrom: 1 to: ind - 1]. "get the authority" ind := remainder indexOf: $/. ind > 0 ifTrue: [ind = 1 ifTrue: [authority := ''] ifFalse: [authority := remainder copyFrom: 1 to: ind - 1. remainder := remainder copyFrom: ind + 1 to: remainder size]] ifFalse: [authority := remainder. remainder := '']. "extract the username+password" (authority includes: $@) ifTrue: [username := authority copyUpTo: $@. authority := authority copyFrom: (authority indexOf: $@) + 1 to: authority size. (username includes: $:) ifTrue: [password := (username copyFrom: (username indexOf: $:) + 1 to: username size) urlDecoded. username := (username copyUpTo: $:) urlDecoded]]. "Extract the port" (authority includes: $:) ifTrue: [| lastColonIndex portString | lastColonIndex := authority findLast: [:c | c = $:]. portString := authority copyFrom: lastColonIndex + 1 to: authority size. portString isAllDigits ifTrue: [port := Integer readFromString: portString. (port > 65535) ifTrue: [self error: 'Invalid port number']. authority := authority copyFrom: 1 to: lastColonIndex - 1] ifFalse:[self error: 'Invalid port number']]. "get the path" path := self privateParsePath: remainder relativeTo: #() .! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'MarcusDenker 10/9/2013 16:32' prior: 70068663! privateInitializeFromText: aString relativeTo: aUrl | remainder ind basePath | remainder := aString. "set the scheme" schemeName := aUrl schemeName. "a leading // means the authority is specified, meaning it is absolute" (remainder beginsWith: '//') ifTrue: [ ^ self privateInitializeFromText: aString ]. "otherwise, use the same authority" authority := aUrl authority. port := aUrl port. username := aUrl username. password := aUrl password. "get the query" ind := remainder indexOf: $?. ind > 0 ifTrue: [ query := remainder copyFrom: ind + 1 to: remainder size. remainder := remainder copyFrom: 1 to: ind - 1 ]. "get the path" basePath := (remainder beginsWith: '/') ifTrue: [ #() ] ifFalse: [ aUrl path ]. path := self privateParsePath: remainder relativeTo: basePath! ! !HierarchicalUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/27/2013 12:19' prior: 75827163! privateParsePath: remainder relativeTo: basePath | nextTok s parsedPath | s := remainder readStream. parsedPath := OrderedCollection new. parsedPath addAll: basePath. parsedPath isEmpty ifFalse: [ parsedPath removeLast ]. [ s peek = $/ ifTrue: [ s next ]. nextTok := String new writeStream. [ s atEnd or: [ s peek = $/ ] ] whileFalse: [ nextTok nextPut: s next ]. nextTok := nextTok contents urlDecoded. nextTok = '..' ifTrue: [ parsedPath size > 0 ifTrue: [ parsedPath removeLast ] ] ifFalse: [ nextTok ~= '.' ifTrue: [ parsedPath add: nextTok ] ]. s atEnd ] whileFalse. parsedPath isEmpty ifTrue: [ parsedPath add: '' ]. ^ parsedPath! ! !HierarchicalUrl methodsFor: 'access' stamp: 'ls 6/20/1998 19:59' prior: 23408278! query "return the query, the part after any ?. Any %XY's have already been decoded. If there wasno query part, nil is returned (it is possible to also have an empty query" ^query ! ! !HierarchicalUrl methodsFor: 'classification' stamp: 'FBS 11/20/2003 13:07' prior: 23408775! scheme ^ self schemeName.! ! !HierarchicalUrl methodsFor: 'access' stamp: 'ls 6/20/1998 19:58' prior: 23408533! schemeName ^schemeName! ! !HierarchicalUrl methodsFor: 'private' stamp: 'ls 6/20/1998 19:41' prior: 23414097! schemeName: schemeName0 authority: authority0 path: path0 query: query0 "initialize a new instance" schemeName := schemeName0. authority := authority0. path := path0. query := query0. ! ! !HierarchicalUrl methodsFor: 'access' stamp: 'ls 6/15/2003 13:13' prior: 23408628! username "http://user:pword@foo.com' asUrl username" ^username! ! !HttpUrl commentStamp: 'ls 6/15/2003 13:44' prior: 76141397! A URL that can be accessed via the Hypertext Transfer Protocol (HTTP), ie, a standard Web URL realm = the name of the security realm that has been discovered for this URL. Look it up in Passwords. Passwords = a Dictionary of (realm -> encoded user&password) TODO: use the username and password, if specified ! !HttpUrl class methodsFor: 'constants' stamp: 'SeanDeNigris 1/30/2011 11:32' prior: 23446610! schemeName ^ 'http'.! ! !HttpUrl methodsFor: 'downloading' stamp: 'SvenVanCaekenberghe 9/27/2012 11:16' prior: 23446123! retrieveContents "Download and return the resource that I refer to. This will typically return a String or a ByteArray (see ZnClient>>#get:). If something goes wrong, an exception will be signalled." " 'http://zn.stfx.eu/zn/numbers.txt' asUrl retrieveContents. " ^ self asZnUrl retrieveContents! ! !HttpsUrl class methodsFor: 'constants' stamp: 'CamilloBruni 12/16/2011 11:17' prior: 23447516! schemeName ^ 'https'.! ! !Url class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 1/8/2012 14:50' prior: 54568353! absoluteFromText: aString "Return a URL from a string and handle a String without a scheme as a HttpUrl." "Url absoluteFromText: 'http://chaos.resnet.gatech.edu:8000/docs/java/index.html?A%20query%20#part'" "Url absoluteFromText: 'msw://chaos.resnet.gatech.edu:9000/testbook?top'" "Url absoluteFromText: 'telnet:chaos.resnet.gatech.edu'" "Url absoluteFromText: 'file:/etc/passwd'" | remainder index scheme fragment newUrl | "trim surrounding whitespace" remainder := aString trimBoth. "extract the fragment, if any" index := remainder indexOf: $#. index > 0 ifTrue: [ fragment := remainder copyFrom: index + 1 to: remainder size. remainder := remainder copyFrom: 1 to: index - 1]. "choose class based on the scheme name, and let that class do the bulk of the parsing" scheme := self schemeNameForString: remainder. newUrl := (self urlClassForScheme: scheme) new privateInitializeFromText: remainder. newUrl privateFragment: fragment. ^newUrl! ! !Url class methodsFor: 'parsing' stamp: 'st 9/27/2004 15:47' prior: 54569390! combine: baseURL withRelative: relURL "Take two URL as string form, combine them and return the corresponding URL in string form" ^((self absoluteFromText: baseURL) newFromRelativeText: relURL) asString! ! !Url class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/25/2013 18:44' prior: 75727651! new self deprecated: 'Url has been replaced with ZnUrl' on: '20131025' in: '3.0'. ^ super new! ! !Url class methodsFor: 'constants' stamp: 'SeanDeNigris 1/30/2011 12:00' prior: 54567598! schemeName "When searching for a class to handle a particular scheme, make sure that Url classes never match by default. This is so that abstract Url classes e.g. HierarchicalUrl can be iterated over, but will not be selected" ^ nil.! ! !Url class methodsFor: 'parsing' stamp: 'gk 10/21/2005 10:41' prior: 54569664! schemeNameForString: aString "Get the scheme name from a string, or return nil if it's not specified. Used in internal parsing routines - an outsider may as well use asUrl. Return scheme in lowercases." "Url schemeNameForString: 'http://www.yahoo.com'" "Url schemeNameForString: '/etc/passwed'" "Url schemeNameForString: '/etc/testing:1.2.3'" | index schemeName | index := aString indexOf: $: ifAbsent: [^ nil]. schemeName := aString first: index - 1. (schemeName allSatisfy: [:each | each isLetter]) ifFalse: [^ nil]. ^ schemeName asLowercase! ! !Url class methodsFor: 'parsing' stamp: 'CamilloBruni 12/16/2011 11:18' prior: 54570301! urlClassForScheme: scheme ^ self allSubclasses detect: [ :urlClass | urlClass schemeName = scheme ] ifNone: [ GenericUrl ].! ! !Url methodsFor: 'downloading' stamp: 'ls 8/4/1998 20:41' prior: 54564133! activate "spawn an external handler for this URL" ! ! !Url methodsFor: 'converting' stamp: 'ls 7/14/1998 03:17' prior: 54563690! asText ^self asString asText! ! !Url methodsFor: 'converting' stamp: 'tb 5/24/2006 22:05' prior: 54563783! asURI ^self asString asURI! ! !Url methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 10/25/2013 16:36' prior: 75727850! asUrl ^ self asZnUrl! ! !Url methodsFor: 'accessing' stamp: 'mir 2/22/2000 18:05' prior: 54563251! authority ^''! ! !Url methodsFor: 'converting' stamp: 'fbs 2/2/2005 13:24' prior: 54564041! downloadUrl ^self asString! ! !Url methodsFor: 'fragment' stamp: 'ls 8/4/1998 01:41' prior: 54564973! fragment ^fragment! ! !Url methodsFor: 'downloading' stamp: 'ls 8/4/1998 20:40' prior: 54564249! hasContents "whether this URL can download contents to be displayed; if not, it fundamentally requires an outside application to deal with it. For example, mailto: and telnet: urls" ^false! ! !Url methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 10/25/2013 15:24' prior: 75727965! newFromRelativeText: aString "return a URL relative to the current one, given by aString. For instance, if self is 'http://host/dir/file', and aString is '/dir2/file2', then the return will be a Url for 'http://host/dir2/file2'" "if the scheme is the same, or not specified, then use the same class" | newSchemeName remainder fragmentStart newFragment newUrl bare | bare := aString trimBoth. newSchemeName := self class schemeNameForString: bare. (newSchemeName notNil and: [ newSchemeName ~= self schemeName ]) ifTrue: [ "different scheme -- start from scratch" ^self absoluteFromText: aString ]. remainder := bare. "remove the fragment, if any" fragmentStart := remainder indexOf: $#. fragmentStart > 0 ifTrue: [ newFragment := remainder copyFrom: fragmentStart+1 to: remainder size. remainder := remainder copyFrom: 1 to: fragmentStart-1]. "remove the scheme name" newSchemeName ifNotNil: [ remainder := remainder copyFrom: (newSchemeName size + 2) to: remainder size ]. "create and initialize the new url" newUrl := self class new privateInitializeFromText: remainder relativeTo: self. "set the fragment" newUrl privateFragment: newFragment. ^newUrl! ! !Url methodsFor: 'printing' stamp: 'fbs 2/2/2005 13:26' prior: 54567375! printOn: aStream ^self subclassResponsibility! ! !Url methodsFor: 'fragment' stamp: 'ls 8/4/1998 01:02' prior: 54565053! privateFragment: aString fragment := aString! ! !Url methodsFor: 'parsing' stamp: 'ls 8/4/1998 00:50' prior: 54566835! privateInitializeFromText: aString ^self subclassResponsibility! ! !Url methodsFor: 'parsing' stamp: 'ls 8/4/1998 00:55' prior: 54566959! privateInitializeFromText: aString relativeTo: aUrl "initialize from the given string, as a relative URL. aString will have had the scheme name removed, if it was present to begin with. If it was, then the scheme name was the same as the receiver's scheme name" "by default, just do regular initialization" ^self privateInitializeFromText: aString! ! !Url methodsFor: 'downloading' stamp: 'ls 7/23/1998 20:14' prior: 54564505! retrieveContents "return a MIMEObject with the object's contents, or nil if the object could not be retrieved" ^nil! ! !Url methodsFor: 'downloading' stamp: 'ls 7/23/1998 20:14' prior: 54564687! retrieveContentsForBrowser: aBrowser "return a MIMEObject with the object's contents, or nil if the object could not be retrieved. Since aBrowser is specified, this could do browser specific things" ^self retrieveContents! ! !Url methodsFor: 'classification' stamp: 'ls 6/16/1998 16:22' prior: 54563334! scheme "return a string with the scheme of this URL. For instance, HTTP" ^self subclassResponsibility! ! !Url methodsFor: 'classification' stamp: 'ls 7/3/1998 21:11' prior: 54563505! schemeName "return a lowercase string with the scheme of this URL. For instance, 'http'" ^self subclassResponsibility! ! !Url methodsFor: 'fragment' stamp: 'ls 6/1/2000 16:19' prior: 54565159! withFragment: newFragment "return a URL which is the same except that it has a different fragment" ^self copy privateFragment: newFragment; yourself! ! !Url methodsFor: 'fragment' stamp: 'ls 6/1/2000 16:26' prior: 54565370! withoutFragment "return a URL which is identical to the receiver except that it has no fragment associated with it" ^self withFragment: nil! ! Metaclass removeSelector: #localSelectors:! TraitBehavior removeSelector: #localSelectors:! Authorizer removeSelector: #user:! Authorizer removeSelector: #realm:! Authorizer removeSelector: #realm! Authorizer removeSelector: #mapName:password:to:! Authorizer removeSelector: #mapFrom:to:! Authorizer removeSelector: #encode:password:! Authorizer class removeSelector: #unauthorizedFor:! Smalltalk globals removeClassNamed: #Authorizer! TBehavior removeSelector: #localSelectorsDo:! Class removeSelector: #localSelectors:! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectors do: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! compileAllFrom: oldClass "Compile all the methods in the receiver's method dictionary. This validates sourceCode and variable references and forces all methods to use the current bytecode set" oldClass localSelectors do: [:sel | self recompile: sel from: oldClass]. ! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet! ! !Trait method! localSelectors: aSet self basicLocalSelectors: aSet! ! "Deprecated30"! "Kernel"! "KernelTests"! "Keymapping-Core"! "Keymapping-KeyCombinations"! "Network-Url"! "OpalCompiler-Core"! "Traits"! ----End fileIn----! ----QUIT----an Array(3 November 2013 12:01:47 pm) Pharo.image priorSource: 25794952! ----STARTUP----an Array(3 November 2013 12:06:24 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 November 2013 12:06:25 pm) Pharo-30542.image priorSource: 25854095! ----STARTUP----an Array(3 November 2013 3:32:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/3/2013 15:28' prior: 76126907! commentForCurrentUpdate ^ '11635 Race condition in SequenceableCollection>>shuffle https://pharo.fogbugz.com/f/cases/11635 12059 CriticBrowser: DNU when selecting a class https://pharo.fogbugz.com/f/cases/12059 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/3/2013 15:29'! script198 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.233.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.176.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1667.mcz KernelTests-MarcusDenker.577.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.187.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.110.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/3/2013 15:29'! update30543 "self new update30543" self withUpdateLog: '11635 Race condition in SequenceableCollection>>shuffle https://pharo.fogbugz.com/f/cases/11635 12059 CriticBrowser: DNU when selecting a class https://pharo.fogbugz.com/f/cases/12059 '. self loadTogether: self script198 merge: false. self flushCaches. ! ! ScriptLoader removeSelector: #update30541! ScriptLoader removeSelector: #update30540! ScriptLoader removeSelector: #update30539! ScriptLoader removeSelector: #update30538! ScriptLoader removeSelector: #update30537! ScriptLoader removeSelector: #update30536! ScriptLoader removeSelector: #update30535! ScriptLoader removeSelector: #update30534! ScriptLoader removeSelector: #update30533! ScriptLoader removeSelector: #update30532! ScriptLoader removeSelector: #update30531! ScriptLoader removeSelector: #update30530! ScriptLoader removeSelector: #update30529! ScriptLoader removeSelector: #update30528! ScriptLoader removeSelector: #update30527! ScriptLoader removeSelector: #update30526! ScriptLoader removeSelector: #update30525! ScriptLoader removeSelector: #update30524! ScriptLoader removeSelector: #update30523! ScriptLoader removeSelector: #update30522! ScriptLoader removeSelector: #update30521! ScriptLoader removeSelector: #update30520! ScriptLoader removeSelector: #update30519! ScriptLoader removeSelector: #update30518! ScriptLoader removeSelector: #update30517! ScriptLoader removeSelector: #update30516! ScriptLoader removeSelector: #update30515! ScriptLoader removeSelector: #update30514! ScriptLoader removeSelector: #update30513! ScriptLoader removeSelector: #update30512! ScriptLoader removeSelector: #update30511! ScriptLoader removeSelector: #update30510! ScriptLoader removeSelector: #script197! ScriptLoader removeSelector: #script196! ScriptLoader removeSelector: #script195! ScriptLoader removeSelector: #script194! ScriptLoader removeSelector: #script193! ScriptLoader removeSelector: #script192! ScriptLoader removeSelector: #script191! ScriptLoader removeSelector: #script190! ScriptLoader removeSelector: #script189! ScriptLoader removeSelector: #script188! ScriptLoader removeSelector: #script187! ScriptLoader removeSelector: #script186! ScriptLoader removeSelector: #script185! ScriptLoader removeSelector: #script184! ScriptLoader removeSelector: #script183! ScriptLoader removeSelector: #script182! ScriptLoader removeSelector: #script181! ScriptLoader removeSelector: #script180! ScriptLoader removeSelector: #script179! ScriptLoader removeSelector: #script178! ScriptLoader removeSelector: #script177! ScriptLoader removeSelector: #script176! ScriptLoader removeSelector: #script175! ScriptLoader removeSelector: #script174! ScriptLoader removeSelector: #script173! ScriptLoader removeSelector: #script172! ScriptLoader removeSelector: #script171! ScriptLoader removeSelector: #script170! ScriptLoader removeSelector: #script169! ScriptLoader removeSelector: #script168! ScriptLoader removeSelector: #script167! ScriptLoader removeSelector: #script166! "ScriptLoader30"! !SingleCodeCriticResultList methodsFor: 'initialization' stamp: 'MarcusDenker 11/3/2013 12:17' prior: 74027203! setTextModelForClassOrMethod: aCritic | interval | sourceCodeModel aboutToStyle: true. sourceCodeModel text: aCritic definition. sourceCodeModel behavior: (aCritic isClass ifTrue: [ aCritic ] ifFalse: [aCritic methodClass]). interval := self selectionIntervalFor: aCritic definition. interval ifNotNil: [ sourceCodeModel setSelection: interval ]. ! ! !Matrix methodsFor: 'copying' stamp: 'MaxLeske 10/30/2013 13:35' prior: 25376746! shuffledBy: aRandom ^self class rows: nrows columns: ncols contents: (contents copy shuffleBy: aRandom)! ! !KeyboardEvent methodsFor: '*Keymapping-KeyCombinations' stamp: 'GuillermoPolito 6/28/2013 13:03' prior: 74985485! asShortcut ^ self asKeyCombination! ! !WorldMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 7/2/2013 16:07' prior: 74611886! installForUIProcessReinstall "This method should be changed because it cannot be invoked from onPrimitiveError: as the previous PasteUpMorph method was used to." | morphs | owner := nil. morphs := World submorphs. "we should decide if we get morph or not. Now submorphs returns an array and this is strange that this is not an OrderedCollection" Sensor flushNonKbdEvents; flushKeyboard; flushEvents; shutDown. self class shutDown. self addHand: HandMorph new. self borderWidth: 0. self viewBox: Display boundingBox. self borderWidth: 0. "default" self color: self class defaultWorldColor. self addAllMorphs: morphs. SystemWindow noteTopWindowIn: self. World := self. ActiveWorld := self. ActiveHand := self hands first. "default" ActiveEvent := nil. worldState handsDo: [ :h | h releaseCachedState ]. Sensor startUp. self class startUp. self displayWorldSafely.! ! !Morph methodsFor: 'layout' stamp: 'StephaneDucasse 6/2/2013 14:18' prior: 74696911! computeFullBounds [ self doLayoutIn: self layoutBounds ] on: Error do: [ :ex | "This should do it unless you don't screw up the bounds" fullBounds := bounds. ex pass ]! ! !SequenceableCollection methodsFor: 'shuffling' stamp: 'MaxLeske 10/30/2013 13:35' prior: 33026095! shuffle ^ self shuffleBy: Random new! ! !SequenceableCollection methodsFor: 'copying' stamp: 'MaxLeske 10/30/2013 13:36' prior: 33004305! shuffled ^ self copy shuffle! ! SequenceableCollection removeSelector: #shuffledBy:! "Collections-Abstract"! "Collections-Unordered"! "Keymapping-KeyCombinations"! "Manifest-CriticBrowser"! "Morphic-Core"! ----End fileIn----! ----QUIT----an Array(3 November 2013 3:32:41 pm) Pharo.image priorSource: 25854302! ----STARTUP----an Array(3 November 2013 3:37:20 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 November 2013 3:37:20 pm) Pharo-30543.image priorSource: 25871142! ----STARTUP----an Array(3 November 2013 8:06:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/3/2013 20:03' prior: 76186257! commentForCurrentUpdate ^ '12061 SettingBrowser>>exportSettings need refactoring https://pharo.fogbugz.com/f/cases/12061 11920 NewValueHolder should use value instead of contents https://pharo.fogbugz.com/f/cases/11920 11819 TextModel>>#codePaneMenu:shifted: should work with a value holder https://pharo.fogbugz.com/f/cases/11819 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/3/2013 20:03'! script199 ^ 'AST-Core-MarcusDenker.197.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.233.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.158.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.294.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.176.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-MarcusDenker.638.mcz Compiler-MarcusDenker.542.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-MarcusDenker.1667.mcz KernelTests-MarcusDenker.577.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.194.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-MarcusDenker.48.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.27.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.649.mcz Text-Core-MarcusDenker.16.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/3/2013 20:04'! update30544 "self new update30544" self withUpdateLog: '12061 SettingBrowser>>exportSettings need refactoring https://pharo.fogbugz.com/f/cases/12061 11920 NewValueHolder should use value instead of contents https://pharo.fogbugz.com/f/cases/11920 11819 TextModel>>#codePaneMenu:shifted: should work with a value holder https://pharo.fogbugz.com/f/cases/11819 '. self loadTogether: self script199 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TextModel commentStamp: '' prior: 69510543! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !SettingBrowser methodsFor: '*StartupPreferences' stamp: 'DamienCassou 11/3/2013 17:34'! exportAllSettings: actions by: groupSize withBasename: aString "Export all settings in files. No more than groupSize settings will be exported to the same file. If there are more than groupSize settings, settings will be exported in multiple files (named aString%d.st, with %d a number increasing from 1 to (actions size / groupSize)." | index | index := 1. actions groupsOf: groupSize atATimeDo: [ :l | self exportSettings: l toFilenamed: aString , index printString , '.st'. index := index + 1 ]. self exportSettings: (actions last: (actions size rem: groupSize)) toFileNamed: aString , index printString , '.st'! ! !SettingBrowser methodsFor: '*StartupPreferences' stamp: 'DamienCassou 11/3/2013 17:20' prior: 69804965! exportSettings | title nodes actions | nodes := self treeHolder nodeList. title := 'Exporting settings'. title displayProgressFrom: 1 to: nodes size during: [:bar | actions := nodes collectWithIndex: [:e :i | bar current: i. bar label: (String streamContents: [:s | s << title << ' (' << (e item label) << ')']). e item exportSettingAction ]]. actions := actions reject: [:e | e isNil ]. self exportAllSettings: actions by: 50 withBasename: 'exported_settings'.! ! !SettingBrowser methodsFor: '*StartupPreferences' stamp: 'DamienCassou 11/3/2013 17:33'! exportSettings: aCollection toFileNamed: filename StartupPreferencesLoader default addAtStartupInPreferenceVersionFolder: aCollection named: filename! ! !TextModel commentStamp: '' prior: 76214813! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/3/2013 19:15' prior: 69521378! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" ^ menuHolder contents cull: aMenu cull: shifted! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/3/2013 19:12' prior: 69524355! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. hasUnacceptedEdits := false asValueHolder. selection := (1 to: 0) asValueHolder. scrollValue := (0@0) asValueHolder. menuHolder := [ :menu :shifted | shifted ifTrue: [ SmalltalkEditor shiftedYellowButtonMenu ] ifFalse: [ SmalltalkEditor yellowButtonMenu ] ] asValueHolder. self registerEvents. self registerEventsForShout! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/3/2013 19:13'! menuHolder "Return the block used to calculate the text selection" ^ menuHolder contents! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/3/2013 19:14'! menuHolder: aBlock "Set the block used to compute the menu" ^ menuHolder contents: aBlock! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/3/2013 19:14'! whenMenuHolderChanged: aBlock "Set a block to perform when the block use to build menu changed" menuHolder whenChangedDo: aBlock! ! "Spec-Core"! "StartupPreferences"! ----End fileIn----! ----QUIT----an Array(3 November 2013 8:06:38 pm) Pharo.image priorSource: 25871347! ----STARTUP----an Array(3 November 2013 8:11:17 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(3 November 2013 8:11:17 pm) Pharo-30544.image priorSource: 25887053! ----STARTUP----an Array(4 November 2013 1:23:33 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/4/2013 01:10' prior: 76203301! commentForCurrentUpdate ^ '- Issue 12066: Add Image support in Spec https://pharo.fogbugz.com/f/cases/12066/Add-Image-support Thanks Benjamin van Ryseghem and Sergi Reyner - Issue 12056: flatCollect: should return the same species https://pharo.fogbugz.com/f/cases/12066/Add-Image-support - Issue 11895 Theme: Dont use Gradients in menus https://pharo.fogbugz.com/f/cases/11895/Theme-Don-t-use-Gradients-in-menus UITheme current settings preferGradientFill: false. - Issue 11427: Clean up SqNumberParser Hierarchy https://pharo.fogbugz.com/f/cases/11427/Clean-up-SqNumberParser-Hierarchy'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/4/2013 01:13'! script200 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-StephaneDucasse.785.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.49.mcz Kernel-StephaneDucasse.1669.mcz KernelTests-StephaneDucasse.579.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.177.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-StephaneDucasse.196.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/4/2013 01:13'! update30545 "self new update30545" self withUpdateLog: '- Issue 12066: Add Image support in Spec https://pharo.fogbugz.com/f/cases/12066/Add-Image-support Thanks Benjamin van Ryseghem and Sergi Reyner - Issue 12056: flatCollect: should return the same species https://pharo.fogbugz.com/f/cases/12066/Add-Image-support - Issue 11895 Theme: Dont use Gradients in menus https://pharo.fogbugz.com/f/cases/11895/Theme-Don-t-use-Gradients-in-menus UITheme current settings preferGradientFill: false. - Issue 11427: Clean up SqNumberParser Hierarchy https://pharo.fogbugz.com/f/cases/11427/Clean-up-SqNumberParser-Hierarchy'. self loadTogether: self script200 merge: false. UITheme current settings preferGradientFill: false. self flushCaches. ! ! "ScriptLoader30"! !ImageSpecExample commentStamp: '' prior: 0! I am a simple example exposing how to use ImageModel Try me with: ImageSpecExample open! !NumberParserTest commentStamp: 'nice 5/7/2006 17:54' prior: 0! Provide tests for new clas aimed at parsing numbers. It duplicates NumberParsingTest, with few more tests.! !ImageModel commentStamp: '' prior: 0! An ImageModel is a spec model for images! !MorphicImageAdapter commentStamp: '' prior: 0! I am the bridge between an ImageModel and a AlphaImageMorph! !ImageSpecExample commentStamp: '' prior: 76231345! I am a simple example exposing how to use ImageModel Try me with: ImageSpecExample open! !ImageSpecExample class methodsFor: 'instance creation' stamp: 'SergiReyner 11/3/2013 19:35'! open self new openWithSpec! ! !ImageSpecExample class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/3/2013 23:00'! spec ^ SpecLayout composed add: #imageModel origin: 0 @ 0 corner: 1 @ 0.9; yourself! ! !ImageSpecExample methodsFor: 'accessing' stamp: 'SergiReyner 11/3/2013 19:38'! imageModel ^ imageModel! ! !ImageSpecExample methodsFor: 'accessing' stamp: 'SergiReyner 11/3/2013 19:38'! imageModel: anObject imageModel := anObject! ! !ImageSpecExample methodsFor: 'initialization' stamp: 'SergiReyner 11/3/2013 19:37'! initializePresenter imageModel image: AlphaImageMorph new; whenImageChanged: [ :selection | ].! ! !ImageSpecExample methodsFor: 'initialization' stamp: 'SergiReyner 11/3/2013 19:36'! initializeWidgets self instantiateModels: {(#imageModel -> #ImageModel). }! ! !NumberParserTest commentStamp: 'nice 5/7/2006 17:54' prior: 76231499! Provide tests for new clas aimed at parsing numbers. It duplicates NumberParsingTest, with few more tests.! !NumberParserTest methodsFor: 'utility' stamp: 'YuriyTymchuk 10/29/2013 11:10'! areLowercaseDigitsAllowed "Answer true if lowercase letter are allowed digits." ^(NumberParser parse: '16re' onError: [-1]) = 16rE! ! !NumberParserTest methodsFor: 'tests - fail' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFail "Verify that the value of a failblock is returned." self assert: (NumberParser parse: 'blablabla' onError: [42]) equals: 42! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatFromStreamAsNumber "This covers parsing in Number>>readFrom:" | rs aFloat | rs := '10r-12.3456' readStream. aFloat := NumberParser parse: rs. self assert: -12.3456 = aFloat. self assert: rs atEnd. rs := '10r-12.3456e2' readStream. aFloat := NumberParser parse: rs. self assert: -1234.56 = aFloat. self assert: rs atEnd. rs := '10r-12.3456e2e2' readStream. aFloat := NumberParser parse: rs. self assert: -1234.56 = aFloat. self assert: rs upToEnd = 'e2'. rs := '10r-12.3456d2' readStream. aFloat := NumberParser parse: rs. self assert: -1234.56 = aFloat. self assert: rs atEnd. rs := '10r-12.3456q2' readStream. aFloat := NumberParser parse: rs. self assert: -1234.56 = aFloat. self assert: rs atEnd. rs := '-12.3456q2' readStream. aFloat := NumberParser parse: rs. self assert: -1234.56 = aFloat. self assert: rs atEnd. rs := '12.3456q2' readStream. aFloat := NumberParser parse: rs. self assert: 1234.56 = aFloat. self assert: rs atEnd. rs := '12.3456z2' readStream. aFloat := NumberParser parse: rs. self assert: 12.3456 = aFloat. self assert: rs upToEnd = 'z2'. ! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatFromStreamWithExponent "This covers parsing in Number>>readFrom:" | rs aFloat | rs := '1.0e-14' readStream. aFloat := NumberParser parse: rs. self assert: 1.0e-14 = aFloat. self assert: rs atEnd. rs := '1.0e-14 1' readStream. aFloat := NumberParser parse: rs. self assert: 1.0e-14 = aFloat. self assert: rs upToEnd = ' 1'. rs := '1.0e-14eee' readStream. aFloat := NumberParser parse: rs. self assert: 1.0e-14 = aFloat. self assert: rs upToEnd = 'eee'. rs := '1.0e14e10' readStream. aFloat := NumberParser parse: rs. self assert: 1.0e14 = aFloat. self assert: rs upToEnd = 'e10'. rs := '1.0e+14e' readStream. "Plus sign is not parseable" aFloat := NumberParser parse: rs. self assert: 1.0 = aFloat. self assert: rs upToEnd = 'e+14e'. rs := '1.0e' readStream. aFloat := NumberParser parse: rs. self assert: 1.0 = aFloat. self assert: rs upToEnd = 'e'.! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatGradualUnderflow "Gradual underflow are tricky. This is a non regression test for http://bugs.squeak.org/view.php?id=6976" | float trueFraction str | "as a preamble, use a base 16 representation to avoid round off error and check that number parsing is correct" trueFraction := 16r2D2593D58B4FC4 / (16 raisedTo: 256+13). "Parse the number in base 16 if possible - it is impossible if lowercase letter are allowed digits due to exponent letter ambiguity." float := self areLowercaseDigitsAllowed ifFalse: [NumberParser parse: '16r2.D2593D58B4FC4e-256'] ifTrue: [trueFraction asFloat].. self assert: float asTrueFraction = trueFraction. self assert: float = trueFraction asFloat. "now print in base 10" str := (String new: 32) writeStream. float absPrintExactlyOn: str base: 10. "verify if SqNumberParser can read it back" self assert: (NumberParser parse: str contents) = float. ! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatPrintString "self debug: #testFloatPrintString" | f r bases | f := Float basicNew: 2. r := Random new seed: 1234567. "printing a Float in base other than 10 is broken if lowercase digits are allowed" bases := self areLowercaseDigitsAllowed ifTrue: [#(10)] ifFalse: [#(2 8 10 16)]. 100 timesRepeat: [f basicAt: 1 put: (r nextInt: 16r100000000)- 1. f basicAt: 2 put: (r nextInt: 16r100000000) - 1. bases do: [:base | | str | str := (String new: 64) writeStream. f negative ifTrue: [str nextPut: $-]. str print: base; nextPut: $r. f absPrintExactlyOn: str base: base. self assert: (NumberParser parse: str contents) = f]]. "test big num near infinity" 10 timesRepeat: [f basicAt: 1 put: 16r7FE00000 + ((r nextInt: 16r100000) - 1). f basicAt: 2 put: (r nextInt: 16r100000000) - 1. bases do: [:base | | str | str := (String new: 64) writeStream. f negative ifTrue: [str nextPut: $-]. str print: base; nextPut: $r. f absPrintExactlyOn: str base: base. self assert: (NumberParser parse: str contents) = f]]. "test infinitesimal (gradual underflow)" 10 timesRepeat: [f basicAt: 1 put: 0 + ((r nextInt: 16r100000) - 1). f basicAt: 2 put: (r nextInt: 16r100000000) - 1. bases do: [:base | | str | str := (String new: 64) writeStream. f negative ifTrue: [str nextPut: $-]. str print: base; nextPut: $r. f absPrintExactlyOn: str base: base. self assert: (NumberParser parse: str contents) = f]].! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatReadError "This covers parsing in Number>>readFrom:" | rs num | rs := '1e' readStream. num := NumberParser parse: rs. self assert: 1 = num. self assert: rs upToEnd = 'e'. rs := '1s' readStream. num := NumberParser parse: rs. self assert: 1 = num. self assert: rs upToEnd = ''. rs := '1.' readStream. num := NumberParser parse: rs. self assert: 1 = num. self assert: num isInteger. self assert: rs upToEnd = '.'. rs := '' readStream. self should: [NumberParser parse: rs] raise: Error. rs := 'foo' readStream. self should: [NumberParser parse: rs] raise: Error. rs := 'radix' readStream. self should: [NumberParser parse: rs] raise: Error. rs := '.e0' readStream. self should: [NumberParser parse: rs] raise: Error. rs := '-.e0' readStream. self should: [NumberParser parse: rs] raise: Error. rs := '--1' readStream. self should: [NumberParser parse: rs] raise: Error.! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testFloatReadWithRadix "This covers parsing in Number>>readFrom: Note: In most Smalltalk dialects, the radix notation is not used for numbers with exponents. In Squeak, a string with radix and exponent can be parsed, and the exponent is always treated as base 10 (not the base indicated in the radix prefix). I am not sure if this is a feature, a bug, or both, but the Squeak behavior is documented in this test. -dtl" | rs | self assert: (NumberParser parse: '2r1.0101e9') = (1.3125 * (2 raisedTo: 9)). rs := '2r1.0101e9e9' readStream. self assert: (NumberParser parse: rs) = 672.0. self assert: rs upToEnd = 'e9'! ! !NumberParserTest methodsFor: 'tests - Integer' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testIntegerReadFrom "Ensure remaining characters in a stream are not lost when parsing an integer." | rs i s | rs := '123s could be confused with a ScaledDecimal' readStream. i := NumberParser parse: rs. self assert: i = 123. s := rs upToEnd. self assert: ' could be confused with a ScaledDecimal' = s. rs := '123.s could be confused with a ScaledDecimal' readStream. i := NumberParser parse: rs. self assert: i = 123. s := rs upToEnd. self assert: '.s could be confused with a ScaledDecimal' = s! ! !NumberParserTest methodsFor: 'tests - Integer' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testIntegerReadWithRadix "This covers parsing in Number>>readFrom: Note: In most Smalltalk dialects, the radix notation is not used for numbers with exponents. In Squeak, a string with radix and exponent can be parsed, and the exponent is always treated as base 10 (not the base indicated in the radix prefix). I am not sure if this is a feature, a bug, or both, but the Squeak behavior is documented in this test. -dtl" | rs | self assert: (NumberParser parse: '2r1e26') = (2 raisedTo: 26). rs := '2r1e26eee' readStream. self assert: (NumberParser parse: rs) = 67108864. self assert: rs upToEnd = 'eee' ! ! !NumberParserTest methodsFor: 'tests - ScaledDecimal' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testScaledDecimalWithTrailingZeroes "This is a non regression tests for http://bugs.squeak.org/view.php?id=7169" self assert: (NumberParser parse: '0.50s2') = (1/2). self assert: (NumberParser parse: '0.500s3') = (1/2). self assert: (NumberParser parse: '0.050s3') = (1/20).! ! !NumberParserTest methodsFor: 'tests - squeezing' stamp: 'BenjaminVanRyseghem 7/1/2012 02:03'! testSqueezingOutNumbers "test that SqNumberParser squeezeNumberOutOfString finds numbers." self assert: '123blabla' squeezeOutNumber equals: 123. self assert: 'blabla123' squeezeOutNumber equals: 123. self assert: 'blabla12blabla' squeezeOutNumber equals: 12. self assert: ('12.3bla' squeezeOutNumber -12.3 ) abs < 0.0001. self assert: '.1' squeezeOutNumber > 0. self assert: 'blabla1230' squeezeOutNumber equals: 1230.! ! !NumberParserTest methodsFor: 'tests - Integer' stamp: 'YuriyTymchuk 10/29/2013 11:10'! testcheckForCoverage "self debug: #testcheckForCoverage" "Tests for old semantics of Number>>readFrom:" self should: [(NumberParser parse: '.') = 0 ] raise: Error. self should: [(NumberParser parse: '.1') asNumber = 0.1] raise: Error. self assert: (NumberParser parse: '0.0') asNumber = 0. self assert: (NumberParser parse: '0.1') asNumber = 0.1. self assert: (NumberParser parse: '1.1') asNumber = 1.1. self assert: (NumberParser parse: '-1') asNumber = -1.! ! !ImageModel commentStamp: '' prior: 76231659! An ImageModel is a spec model for images! !ImageModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/3/2013 23:03'! defaultSpec ^ #(ImageAdapter adapt: #(model))! ! !ImageModel class methodsFor: 'specs' stamp: 'SergiReyner 11/3/2013 20:07'! title ^ 'AlphaImage Morph'! ! !ImageModel methodsFor: 'protocol' stamp: 'SergiReyner 11/3/2013 19:30'! image ^ imageHolder contents! ! !ImageModel methodsFor: 'protocol' stamp: 'SergiReyner 11/3/2013 20:28'! image: aForm "Set the form of the imagemorph" imageHolder contents: aForm! ! !ImageModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/3/2013 23:03'! initialize super initialize. imageHolder := nil asValueHolder. enabledHolder := true asValueHolder. imageHolder whenChangedDo: [ self changed: #getImage ].! ! !ImageModel methodsFor: 'protocol-events' stamp: 'SergiReyner 11/3/2013 20:33'! whenImageChanged: aBlock "Set a block to performed when the text is changed" imageHolder whenChangedDo: aBlock! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/3/2013 23:04' prior: 69693733! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #ImageAdapter put: #ImageAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !MorphicImageAdapter commentStamp: '' prior: 76231761! I am the bridge between an ImageModel and a AlphaImageMorph! !MorphicImageAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/3/2013 22:59'! defaultSpec ^ {#AlphaImageMorph. #color:. Color black. #model:. #model. #getImageSelector:. #getImage. #vResizing:. #spaceFill. #hResizing:. #spaceFill. #layout:. #scaledAspect. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !MorphicImageAdapter methodsFor: 'model access' stamp: 'SergiReyner 11/3/2013 20:27'! getImage ^ self model image! ! !Scanner methodsFor: 'multi-character scans' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 32703025! xDigit "Form a number." tokenType := #number. aheadChar == DoItCharacter ifTrue: [source skip: -1 "Read off the end last time"] ifFalse: [source skip: -2]. token := (NumberParser on: source) failBlock: [:errorString :position | self notify: errorString at:position]; nextNumber. self step; step! ! !Number class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:14' prior: 28518473! readFrom: stringOrStream "Answer a number as described on aStream. The number may be any accepted Smalltalk literal Number format. It can include a leading radix specification, as in 16rFADE. It can as well be NaN, Infinity or -Infinity for conveniency. If stringOrStream does not start with a valid number description, fail." ^(NumberParser on: stringOrStream) nextNumber! ! !Number class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 28518956! readFrom: stringOrStream base: base "Answer a number as described on aStream in the given number base. If stringOrStream does not start with a valid number description, answer 0 for backward compatibility. This is not clever and should better be changed." ^(NumberParser on: stringOrStream) nextNumberBase: base! ! !Number class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 28520405! squeezeNumberOutOfString: stringOrStream "Try and find a number in this string. First, look if the string starts with a number. Then, see if it ends with a number. Then, remove a character from the front and see if the remaining string makes a number. Repeat the process until no characters are left or the number has been found. As soon as a number is found, it is returned. Otherwise, the method fails." ^ NumberParser squeezeNumberOutOfString: stringOrStream! ! !Number class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 28520967! squeezeNumberOutOfString: stringOrStream ifFail: aBlock "Try and find a number in this string. First, look if the string starts with a number. Then, see if it ends with a number. Then, remove a character from the front and see if the remaining string makes a number. Repeat the process until no characters are left or the number has been found. As soon as a number is found, it is returned. Otherwise, the method fails." ^ NumberParser squeezeNumberOutOfString: stringOrStream onError: aBlock! ! !SetTest methodsFor: 'test - enumerating' stamp: 'TudorGirba 11/3/2013 11:09'! testFlatCollect self assert: (#(1 2) asSet flatCollect: [ :x | 1 to: (2 * x) ]) = #(1 2 3 4) asSet. self assert: (#() asSet flatCollect: [:x | 1 to: 4 ]) isEmpty! ! !SetTest methodsFor: 'test - enumerating' stamp: 'TudorGirba 11/3/2013 12:08'! testFlatCollectAsSet self assert: (#(1 2) asSet flatCollect: [ :x | 1 to: (2 * x) ]) = #(1 2 3 4) asSet! ! !SortedCollection methodsFor: 'enumerating' stamp: 'TudorGirba 11/3/2013 20:41'! flatCollect: aBlock ^ self flatCollect: aBlock as: OrderedCollection! ! !TEnumeratingTest methodsFor: 'tests - enumerating' stamp: 'TudorGirba 11/3/2013 12:14'! testFlatCollect self assert: (self simpleCollection flatCollect: [ :x | { x } ]) equals: self simpleCollection. self assert: (self simpleCollection flatCollect: [ :x | { x } ]) species = self simpleCollection species. self assert: (self collectionOfCollectionsOfInts flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfInts. self assert: (self collectionWithCharacters flatCollect: [ :x | { x } ]) equals: self collectionWithCharacters. self assert: (self collectionOfCollectionsOfStrings flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfStrings! ! !TEnumeratingTest methodsFor: 'tests - enumerating' stamp: 'TudorGirba 11/3/2013 12:15'! testFlatCollectAs self assert: (self simpleCollection flatCollect: [ :x | { x }, { x } ] as: IdentitySet) equals: self simpleCollection asIdentitySet! ! !TEnumeratingTest methodsFor: 'tests - enumerating' stamp: 'TudorGirba 11/3/2013 12:14'! testFlatCollectAsSet self assert: (self simpleCollection flatCollectAsSet: [ :x | { x }, { x } ]) equals: self simpleCollection asSet! ! !NumberParsingTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:15' prior: 28535701! testFloatFromStreamWithExponent "This covers parsing in Number>>readFrom:" | rs aFloat | rs := '1.0e-14' readStream. aFloat := Number readFrom: rs. self assert: 1.0e-14 = aFloat. self assert: rs atEnd. rs := '1.0e-14 1' readStream. aFloat := Number readFrom: rs. self assert: 1.0e-14 = aFloat. self assert: rs upToEnd = ' 1'. rs := '1.0e-14eee' readStream. aFloat := Number readFrom: rs. self assert: 1.0e-14 = aFloat. self assert: rs upToEnd = 'eee'. rs := '1.0e14e10' readStream. aFloat := Number readFrom: rs. self assert: 1.0e14 = aFloat. self assert: rs upToEnd = 'e10'. rs := '1.0e+14e' readStream. aFloat := Number readFrom: rs. self assert: 1.0 = aFloat. self assert: rs upToEnd = 'e+14e'. rs := '1.0e' readStream. aFloat := Number readFrom: rs. self assert: 1.0 = aFloat. self assert: rs upToEnd = 'e'.! ! !NumberParsingTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:20' prior: 28537440! testFloatFromStringWithExponent "This covers parsing in Number>>readFrom:" | aFloat | aFloat := '1.0e-14' asNumber. self assert: 1.0e-14 = aFloat. aFloat := '1.0e-14 1' asNumber. self assert: 1.0e-14 = aFloat. aFloat := '1.0e-14e' asNumber. self assert: 1.0e-14 = aFloat. aFloat := '1.0e14e' asNumber. self assert: 1.0e14 = aFloat.! ! !NumberParsingTest methodsFor: 'tests - Integer' stamp: 'YuriyTymchuk 11/3/2013 11:55' prior: 75861900! testIntegerReadFrom "Ensure remaining characters in a stream are not lost when parsing an integer." | rs i s | rs := '123s could be confused with a ScaledDecimal' readStream. i := Integer readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 's could be confused with a ScaledDecimal' = s. rs := '123.s could be confused with a ScaledDecimal' readStream. i := Integer readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: '.s could be confused with a ScaledDecimal' = s. rs := '123sA has unary message sA' readStream. i := Number readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 'sA has unary message sA' = s. rs := '123sB has unary message sB' readStream. i := Number readFrom: rs. self assert: i = 123. s := rs upToEnd. self assert: 'sB has unary message sB' = s! ! !NumberParsingTest methodsFor: 'tests - Float' stamp: 'YuriyTymchuk 10/29/2013 11:14' prior: 48698349! testNumberReadOnlyDigit "This covers parsing in Number>>readFrom:" | rs num | rs := '1e' readStream. num := Number readFrom: rs. self assert: 1 = num. self assert: rs upToEnd = 'e'. rs := '1s' readStream. num := Number readFrom: rs. self assert: 1 = num. self assert: rs upToEnd = ''. rs := '1.' readStream. num := Number readFrom: rs. self assert: 1 = num. self assert: num isInteger. self assert: rs upToEnd = '.'.! ! !ScaledDecimal class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 32681655! readFrom: stringOrStream "Answer a decimal number as described on stringOrStream. The number may not include a leading radix specification, as in 16rFADE, nor an exponent like 1.0e-3 It might have a scale specification at end or not like 10.3s2 If not, number of digits after decimal point will be used as scale" ^(NumberParser on: stringOrStream) nextScaledDecimal! ! !NumberParser methodsFor: 'accessing' stamp: 'YuriyTymchuk 10/29/2013 11:08' prior: 28522821! allowPlusSign "return a boolean indicating if plus sign is allowed or not" ^false! ! !NumberParser methodsFor: 'accessing' stamp: 'YuriyTymchuk 10/29/2013 11:08' prior: 28523194! exponentLetters "answer the list of possible exponents for Numbers. Note: this parser will not honour precision attached to the exponent. different exponent do not lead to different precisions. only IEEE 754 floating point numbers will be created" ^'edq'! ! !NumberParser methodsFor: 'parsing-private' stamp: 'YuriyTymchuk 10/29/2013 11:08'! makeIntegerOrScaledInteger "at this point, there is no digit, nor fractionPart. maybe it can be a scaled decimal with fraction omitted..." neg ifTrue: [integerPart := integerPart negated]. self readExponent ifTrue: [^integerPart * (base raisedToInteger: exponent)]. self readScale ifTrue: [^integerPart asScaledDecimal: scale]. ^ integerPart! ! !NumberParser methodsFor: 'parsing-public' stamp: 'YuriyTymchuk 10/29/2013 11:09' prior: 28528979! nextInteger "Main method for reading an Integer. This won't try to read a Float nor a ScaledDecimal." | numberOfTrailingZeroInIntegerPart | base := 10. neg := self peekSignIsMinus. integerPart := self nextUnsignedIntegerOrNilBase: base. integerPart ifNil: [self fail]. numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero. (sourceStream peekFor: $r) ifTrue: ["r" | oldNeg pos | pos := sourceStream position. (base := integerPart) < 2 ifTrue: ["A radix currently need to be greater than 1, ungobble the r and return the integer part" sourceStream skip: -1. ^neg ifTrue: [base negated] ifFalse: [base]]. oldNeg := neg. self peekSignIsMinus ifTrue: [neg := neg not]. integerPart := self nextUnsignedIntegerOrNilBase: base. integerPart ifNil: [self fail]. numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero]. neg ifTrue: [integerPart := integerPart negated]. self readExponent ifTrue: [^integerPart * (base raisedToInteger: exponent)]. ^ integerPart! ! !NumberParser methodsFor: 'parsing-public' stamp: 'YuriyTymchuk 10/29/2013 11:08' prior: 28529954! nextNumber "main method for reading a number. This one can read Float Integer and ScaledDecimal" | numberOfTrailingZeroInIntegerPart | base := 10. neg := self peekSignIsMinus. integerPart := self nextUnsignedIntegerOrNilBase: base. integerPart ifNil: [ "This is not a regular number beginning with a digit It is time to check for exceptional condition NaN and Infinity" ^self readNamedFloatOrFail]. numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero. (sourceStream peekFor: $r) ifTrue: ["r" (base := integerPart) < 2 ifTrue: [ sourceStream skip: -1. ^ self expected: 'an integer greater than 1 as valid radix']. self peekSignIsMinus ifTrue: [neg := neg not]. integerPart := self nextUnsignedIntegerBase: base. numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero]. ^ (sourceStream peekFor: $.) ifTrue: [self readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart] ifFalse: [self makeIntegerOrScaledInteger]! ! !NumberParser methodsFor: 'parsing-public' stamp: 'YuriyTymchuk 10/29/2013 11:08'! nextNumberBase: b "Method for reading a number without radix prefix. This one can read Float Integer and ScaledDecimal" | numberOfTrailingZeroInIntegerPart | base := b. neg := sourceStream peekFor: $-. integerPart := self nextUnsignedIntegerOrNilBase: base. integerPart ifNil: [ "This is not a regular number beginning with a digit It is time to check for exceptional condition NaN and Infinity" ^self readNamedFloatOrFail]. numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero. ^ (sourceStream peekFor: $.) ifTrue: [self readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart] ifFalse: [self makeIntegerOrScaledInteger]! ! !NumberParser methodsFor: 'parsing-public' stamp: 'YuriyTymchuk 10/29/2013 11:08'! nextScaledDecimal "Main method for reading a (scaled) decimal number. Good Gracious, do not accept a decimal in another base than 10!! In other words, do not accept radix notation like 2r1.1, even not 10r5.3 Do not accept exponent notation neither, like 1.0e-3" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart | base := 10. neg := sourceStream peekFor: $-. integerPart := self nextUnsignedIntegerBase: base. (sourceStream peekFor: $.) ifTrue: [fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: ["Oops, the decimal point seems not part of this number" sourceStream skip: -1. ^ neg ifTrue: [integerPart negated asScaledDecimal: 0] ifFalse: [integerPart asScaledDecimal: 0]]. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero. self readScale ifFalse: ["No scale were provided. use number of digits after decimal point as scale" scale := nDigits]. ^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]. self readScale. neg ifTrue: [integerPart := integerPart negated]. ^integerPart asScaledDecimal: scale! ! !NumberParser methodsFor: 'parsing-private' stamp: 'YuriyTymchuk 10/29/2013 11:08'! readNamedFloatOrFail "This method is used when there is no digit encountered: It try and read a named Float NaN or Infinity. Negative sign for -Infinity has been read before sending this method, and is indicated in the neg inst.var. Fail if no named Float is found" neg ifFalse: [(sourceStream nextMatchAll: 'NaN') ifTrue: [^ Float nan]]. (sourceStream nextMatchAll: 'Infinity') ifTrue: [^ neg ifTrue: [Float infinity negated] ifFalse: [Float infinity]]. ^self expected: 'a digit between 0 and ' , (String with: (Character digitValue: base - 1))! ! !NumberParser methodsFor: 'parsing-private' stamp: 'YuriyTymchuk 10/29/2013 11:08'! readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart "at this stage, sign integerPart and a decimal point have been read. try and form a number with a fractionPart" | numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value | fractionPart := self nextUnsignedIntegerOrNilBase: base. fractionPart ifNil: ["No fractionPart found,ungobble the decimal point and return the integerPart" sourceStream skip: -1. ^ neg ifTrue: [integerPart negated] ifFalse: [integerPart]]. numberOfNonZeroFractionDigits := lastNonZero. numberOfTrailingZeroInFractionPart := nDigits - lastNonZero. self readExponent ifFalse: [self readScale ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]]. fractionPart isZero ifTrue: [mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart). exponent := exponent + numberOfTrailingZeroInIntegerPart] ifFalse: [mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)). exponent := exponent - numberOfNonZeroFractionDigits]. value := self makeFloatFromMantissa: mantissa exponent: exponent base: base. ^ neg ifTrue: [value isZero ifTrue: [Float negativeZero] ifFalse: [value negated]] ifFalse: [value]! ! !NumberParser methodsFor: 'parsing-private' stamp: 'YuriyTymchuk 10/29/2013 11:08'! readScale "read the scale if any (stored in instVar). Answer true if found, answer false if none. If scale letter is not followed by a digit, this is not considered as an error. Scales are always read in base 10, though i do not see why..." scale := 0. sourceStream atEnd ifTrue: [ ^ false ]. (sourceStream peekFor: $s) ifFalse: [ ^ false ]. scale := self nextUnsignedIntegerOrNilBase: 10. scale ifNil: [ scale := 0. (sourceStream peek ifNil: [ false ] ifNotNil: [ :nextChar | nextChar isLetter ]) ifTrue: [ sourceStream skip: -1. "ungobble the s" ^ false ] ifFalse: [ ^ true ] ]. ^ true! ! !TraitTest methodsFor: 'testing' stamp: 'TudorGirba 11/3/2013 20:54' prior: 53438133! testCompositionCopy | t6compositionCopyFirst c2compositionCopy | self assert: (self t1 + self t2) allTraits = (self t1 + self t2) copyTraitExpression allTraits. self assert: (self t1 classTrait + self t2 classTrait) allTraits = (self t1 classTrait + self t2 classTrait) copyTraitExpression allTraits. self assert: self t6 traitComposition allTraits = self t6 traitComposition copyTraitExpression allTraits. self assert: (self t6 asTraitComposition copyTraitExpression allTraits includesAll: { (self t1). (self t2). (self t6) }). "make no undue sharing happens of exclusions and aliases after an expression copy" t6compositionCopyFirst := self t6 traitComposition copyTraitExpression. t6compositionCopyFirst transformations at: 1 put: #m22Alias -> #m33. self assert: self t6 traitComposition transformations second aliases first value = #m22. c2compositionCopy := self c2 traitComposition copyTraitExpression. c2compositionCopy transformations first exclusions at: 1 put: #m4. self c2 traitComposition transformations first exclusions = #(#m11 )! ! !ScaledDecimalTest methodsFor: 'tests' stamp: 'YuriyTymchuk 10/29/2013 11:20' prior: 32684232! testAsNumberWithSuperfluousDecimalPoint | sd | sd := '123.s2' asNumber. self deny: ScaledDecimal == sd class description: 'It used to, but this syntax is not valid Smalltalk'. ! ! !Integer class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 23801492! readFrom: aStringOrStream base: base "Answer an instance of one of the concrete subclasses if Integer. Initial minus sign accepted, and bases > 10 use letters A-Z. Imbedded radix specifiers not allowed; use Number class readFrom: for that. Raise an Error if there are no digits. If stringOrStream dos not start with a valid number description, answer 0 for backward compatibility. This is not clever and should better be changed." ^(NumberParser on: aStringOrStream) nextIntegerBase: base! ! !Integer class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 23802077! readFrom: aStringOrStream ifFail: aBlock "Answer an instance of one of the concrete subclasses if Integer. Initial minus sign accepted. Imbedded radix specifiers not allowed; use Number class readFrom: for that. Execute aBlock if there are no digits." ^(NumberParser on: aStringOrStream) nextIntegerBase: 10 ifFail: aBlock! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/3/2013 23:04' prior: 69692329! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #ImageAdapter put: #MorphicImageAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !SortedCollectionTest methodsFor: 'test - enumerating' stamp: 'TudorGirba 11/3/2013 20:42'! testFlatCollect self assert: (#(1 2) asSortedCollection flatCollect: [ :x | { x } ]) = #(1 2) asOrderedCollection! ! !Fraction class methodsFor: 'instance creation' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 22598146! readFrom: stringOrStream "Answer a Fraction as described on aStream with following rules: - numerator can specify a different radix (like '16rABC'). - fraction sign '/' is optional, and must immediately follow numerator without space. - denominator must immediately follow fraction sign and can specify a different radix (like 16rABC). If stringOrStream does not start with a valid number description, fail." ^(NumberParser on: stringOrStream) nextFraction! ! !Set methodsFor: 'enumerating' stamp: 'jannik.laval 2/6/2009 16:44'! flatCollect: aBlock ^self flatCollectAsSet: aBlock! ! !Collection methodsFor: 'enumerating' stamp: 'TudorGirba 11/3/2013 12:12' prior: 41378992! flatCollect: aBlock "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" | stream | self isEmpty ifTrue: [ ^ self copy ]. stream := (self species new: 0) writeStream. self do: [ :each | stream nextPutAll: (aBlock value: each) ]. ^ stream contents! ! !Collection methodsFor: 'enumerating' stamp: 'jannik.laval 8/27/2010 15:54'! flatCollect: aBlock as: aCollectionClass "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" | col | self isEmpty ifTrue: [^self copy ]. col := aCollectionClass new: self size. self do: [ :each | col addAll: (aBlock value: each) ]. ^col! ! !Collection methodsFor: 'enumerating' stamp: 'TudorGirba 11/3/2013 12:12'! flatCollectAsSet: aBlock "Evaluate aBlock for each of the receiver's elements and answer the list of all resulting values flatten one level. Assumes that aBlock returns some kind of collection for each element. Equivalent to the lisp's mapcan" ^ self flatCollect: aBlock as: Set! ! !RBScanner methodsFor: 'private-scanning' stamp: 'YuriyTymchuk 10/29/2013 11:10' prior: 39910796! scanNumber | start number stop string | start := stream position. stream position: start - 1. number := [NumberParser parse: stream] on: Error do: [:err | self scannerError: err messageText]. stop := stream position. stream position: start - 1. string := stream next: stop - start + 1. stream position: stop. self step. ^RBNumberLiteralToken value: number start: start stop: stop source: string! ! String removeSelector: #asSmalltalkNumber! SqNumberParserTest removeSelector: #testcheckForCoverage! SqNumberParserTest removeSelector: #testSqueezingOutNumbers! SqNumberParserTest removeSelector: #testScaledIntegerWithoutExplicitScale! SqNumberParserTest removeSelector: #testScaledDecimalWithoutExplicitScale! SqNumberParserTest removeSelector: #testScaledDecimalWithTrailingZeroes! SqNumberParserTest removeSelector: #testIntegerReadWithRadix! SqNumberParserTest removeSelector: #testIntegerReadFrom! SqNumberParserTest removeSelector: #testFloatReadWithRadix! SqNumberParserTest removeSelector: #testFloatReadError! SqNumberParserTest removeSelector: #testFloatPrintString! SqNumberParserTest removeSelector: #testFloatGradualUnderflow! SqNumberParserTest removeSelector: #testFloatFromStreamWithExponent! SqNumberParserTest removeSelector: #testFloatFromStreamAsNumber! SqNumberParserTest removeSelector: #testFail! SqNumberParserTest removeSelector: #areLowercaseDigitsAllowed! Smalltalk globals removeClassNamed: #SqNumberParserTest! ExtendedNumberParserTest removeSelector: #testPositiveExponent! ExtendedNumberParserTest removeSelector: #testPositive! ExtendedNumberParserTest removeSelector: #testInvalidScale! ExtendedNumberParserTest removeSelector: #testInvalidRadix! ExtendedNumberParserTest removeSelector: #testInvalidExponent! ExtendedNumberParserTest removeSelector: #testIntegerPartWithoutFraction! ExtendedNumberParserTest removeSelector: #testFractionPartWithoutIntegerPart! Smalltalk globals removeClassNamed: #ExtendedNumberParserTest! SqNumberParser removeSelector: #readScale:! SqNumberParser removeSelector: #readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart:! SqNumberParser removeSelector: #readNamedFloatOrFail! SqNumberParser removeSelector: #nextScaledDecimal! SqNumberParser removeSelector: #nextNumberBase:! SqNumberParser removeSelector: #nextNumber! SqNumberParser removeSelector: #nextInteger! SqNumberParser removeSelector: #makeIntegerOrScaledInteger! SqNumberParser removeSelector: #exponentLetters! SqNumberParser removeSelector: #allowPlusSign! ExtendedNumberParser removeSelector: #readNumberWithoutIntegerPartOrNil! ExtendedNumberParser removeSelector: #readNumberWithoutIntegerPart! ExtendedNumberParser removeSelector: #readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart:! ExtendedNumberParser removeSelector: #nextNumber! ExtendedNumberParser removeSelector: #allowPlusSign! Smalltalk globals removeClassNamed: #ExtendedNumberParser! Smalltalk globals removeClassNamed: #SqNumberParser! Text removeSelector: #asSmalltalkNumber! Number class removeSelector: #readSmalltalkSyntaxFrom:! !Trait method! testFlatCollect self assert: (self simpleCollection flatCollect: [ :x | { x } ]) equals: self simpleCollection. self assert: (self simpleCollection flatCollect: [ :x | { x } ]) species = self simpleCollection species. self assert: (self collectionOfCollectionsOfInts flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfInts. self assert: (self collectionWithCharacters flatCollect: [ :x | { x } ]) equals: self collectionWithCharacters. self assert: (self collectionOfCollectionsOfStrings flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfStrings! ! !Trait method! testFlatCollect self assert: (self simpleCollection flatCollect: [ :x | { x } ]) equals: self simpleCollection. self assert: (self simpleCollection flatCollect: [ :x | { x } ]) species = self simpleCollection species. self assert: (self collectionOfCollectionsOfInts flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfInts. self assert: (self collectionWithCharacters flatCollect: [ :x | { x } ]) equals: self collectionWithCharacters. self assert: (self collectionOfCollectionsOfStrings flatCollect: [ :x | { x } ]) equals: self collectionOfCollectionsOfStrings! ! !Trait method! testFlatCollectAs self assert: (self simpleCollection flatCollect: [ :x | { x }, { x } ] as: IdentitySet) equals: self simpleCollection asIdentitySet! ! !Trait method! testFlatCollectAs self assert: (self simpleCollection flatCollect: [ :x | { x }, { x } ] as: IdentitySet) equals: self simpleCollection asIdentitySet! ! !Trait method! testFlatCollectAsSet self assert: (self simpleCollection flatCollectAsSet: [ :x | { x }, { x } ]) equals: self simpleCollection asSet! ! !Trait method! testFlatCollectAsSet self assert: (self simpleCollection flatCollectAsSet: [ :x | { x }, { x } ]) equals: self simpleCollection asSet! ! "AST-Core"! "Collections-Abstract"! "Collections-Sequenceable"! "Collections-Strings"! "Collections-Unordered"! "CollectionsTests"! "Compiler"! "Kernel"! "KernelTests"! "Spec-Core"! "Spec-Examples"! "Spec-MorphicAdapters"! "Tests"! "Text-Core"! ----End fileIn----! ----QUIT----an Array(4 November 2013 1:23:48 am) Pharo.image priorSource: 25887258! ----STARTUP----an Array(4 November 2013 1:28:40 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 November 2013 1:28:40 am) Pharo-30545.image priorSource: 25941783! ----STARTUP----an Array(4 November 2013 9:26:35 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/4/2013 09:24' prior: 76219215! commentForCurrentUpdate ^ '12052 Fuel could store LargeNegativeInteger up to 32bits magnitude https://pharo.fogbugz.com/f/cases/12052 12067 A TextAnchor should never try to placeEmbeddedObject: by itself https://pharo.fogbugz.com/f/cases/12067 11906 HDTestReport measures the wrong duration https://pharo.fogbugz.com/f/cases/11906'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/4/2013 09:24'! script201 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.324.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.51.mcz Kernel-StephaneDucasse.1669.mcz KernelTests-StephaneDucasse.579.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.168.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.179.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.89.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.86.mcz Refactoring-Tests-Critics-MarcusDenker.17.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-StephaneDucasse.196.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/4/2013 09:24'! update30546 "self new update30546" self withUpdateLog: '12052 Fuel could store LargeNegativeInteger up to 32bits magnitude https://pharo.fogbugz.com/f/cases/12052 12067 A TextAnchor should never try to placeEmbeddedObject: by itself https://pharo.fogbugz.com/f/cases/12067 11906 HDTestReport measures the wrong duration https://pharo.fogbugz.com/f/cases/11906'. self loadTogether: self script201 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 11/4/2013 08:25' prior: 74254788! beginTestCase: aTestCase time: time stream tab; nextPutAll: ''; lf. progressFile nextPutAll: 'starting testcase: ' ; nextPutAll: aTestCase class name; nextPutAll:'>>'; nextPutAll: aTestCase selector; nextPutAll: ' ... '; flush. ! ! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 11/4/2013 08:29' prior: 23132105! endTestCase stream tab; nextPutAll: ''; lf. progressFile nextPutAll: 'finished' ; crlf; flush. ! ! !HDTestReport methodsFor: 'running' stamp: 'CamilloBruni 11/4/2013 08:30' prior: 23129921! setUp progressFile nextPutAll: 'running suite: '; nextPutAll: suite name ; crlf; flush. stream := StandardFileStream forceNewFileNamed: suite name , '-Test.xml'. stream nextPutAll: ''; lf. stream nextPutAll: ''. "Now this is ugly. We want to update the time and the number of failures and errors, but still at the same time stream a valid XML. So remember this position and add some whitespace, that we can fill later." suitePosition := stream position - 1. stream nextPutAll: (String new: 100 withAll: $ ); lf. "Initialize the test resources." suite resources do: [ :each | each isAvailable ifFalse: [ each signalInitializationError ] ]! ! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 11/4/2013 08:27' prior: 23132302! stackTraceString: err of: aTestCase ^ String streamContents: [ :str | | context | context := err signalerContext. [ context isNil or: [ context receiver == aTestCase and: [ context methodSelector == #runCase ] ] ] whileFalse: [ str print: context; lf. context := context sender ] ] ! ! !HDTestReport methodsFor: 'running' stamp: 'CamilloBruni 11/4/2013 08:31' prior: 23130864! tearDown suite resources do: [ :each | each reset ]. stream tab; nextPutAll: ''; lf. stream tab; nextPutAll: ''; lf. stream nextPutAll: ''. stream position: suitePosition. stream nextPutAll: ' failures="'; print: suiteFailures; nextPutAll: '" errors="'; print: suiteErrors; nextPutAll: '" time="'; print: suiteTime asMilliSeconds / 1000.0; nextPutAll: '">'. stream close! ! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 11/4/2013 08:27' prior: 23132697! writeError: error stack: stack suiteErrors := suiteErrors + 1. stream tab; tab; nextPutAll: ''; lf! ! !TextAnchor methodsFor: 'visiting' stamp: 'ar 12/17/2001 01:19' prior: 52512225! emphasizeScanner: scanner "Do nothing for emphasizing the scanner - if the anchor is valid a #embeddedObject will be encountered by the scanner and do the real thing"! ! !LargeNegativeInteger methodsFor: '*Fuel' stamp: 'nice 11/1/2013 22:53' prior: 24266780! fuelAccept: aGeneralMapper ^ self >= -4294967295 ifTrue: [ aGeneralMapper mapAndTraceByClusterName: self to: FLNegative32SmallIntegerCluster ] ifFalse: [ aGeneralMapper visitBytesObject: self]! ! "Fuel"! "HudsonBuildTools20"! "Morphic-Base"! ----End fileIn----! ----QUIT----an Array(4 November 2013 9:26:42 am) Pharo.image priorSource: 25941988! ----STARTUP----an Array(4 November 2013 9:31:31 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(4 November 2013 9:31:31 am) Pharo-30546.image priorSource: 25957747! ----STARTUP----an Array(5 November 2013 10:21:35 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/5/2013 10:18' prior: 76273942! commentForCurrentUpdate ^ '12070 Add lint rule for #shouldnt:raise: edge cases https://pharo.fogbugz.com/f/cases/12070 12068 DateTest >> #testNew is bogus with negative timezone offsets https://pharo.fogbugz.com/f/cases/12068 12069 In the SourceFiles global, only put objects that are polymorphic with SourceFileArray https://pharo.fogbugz.com/f/cases/12069'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/5/2013 10:18'! script202 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.328.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.51.mcz Kernel-MarcusDenker.1671.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.179.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.97.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.90.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-StephaneDucasse.196.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.971.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.589.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/5/2013 10:18'! update30547 "self new update30547" self withUpdateLog: '12070 Add lint rule for #shouldnt:raise: edge cases https://pharo.fogbugz.com/f/cases/12070 12068 DateTest >> #testNew is bogus with negative timezone offsets https://pharo.fogbugz.com/f/cases/12068 12069 In the SourceFiles global, only put objects that are polymorphic with SourceFileArray https://pharo.fogbugz.com/f/cases/12069'. self loadTogether: self script202 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBShouldntRaiseErrorRule commentStamp: '' prior: 0! See rationale.! !RBShouldntRaiseErrorRule commentStamp: '' prior: 76301507! See rationale.! !RBShouldntRaiseErrorRule class methodsFor: '*Manifest-Core' stamp: 'CamilloBruni 11/4/2013 23:38'! uniqueIdentifierName "This number should be unique and should change only when the rule completely change semantics" ^'ShouldntRaiseErrorRule'! ! !RBShouldntRaiseErrorRule methodsFor: '*Manifest-Core' stamp: 'CamilloBruni 11/4/2013 19:29'! category ^ 'Coding Idiom Violation'! ! !RBShouldntRaiseErrorRule methodsFor: 'accessing' stamp: 'CamilloBruni 11/4/2013 19:29'! group ^ 'Transformations'! ! !RBShouldntRaiseErrorRule methodsFor: 'initialization' stamp: 'CamilloBruni 11/4/2013 19:43'! initialize super initialize. self rewriteRule replace: 'self shouldnt: [ `@statements ] raise: Error' with: '`@statements'; replace: 'self shouldnt: [ `@statements ] raise: Exception' with: '`@statements'! ! !RBShouldntRaiseErrorRule methodsFor: '*Manifest-Core' stamp: 'CamilloBruni 11/4/2013 19:42'! longDescription ^ '#shouldnt:raise: is a rather tricky method, it is mostly used to make a test "read" nicer, however it some severe drawbacks. Hence, it should only be used in certain cases. Consider the following examples. Example 1: ---------- self shouldnt: [ 1 somethingNotUnderstood ] raise: MessageNotUnderstood. In this particular case the expectations meet the result, the test fails with an assertion failure since a MNU is raised. Example 2: ---------- self shouldnt: [ 1/0 ] raise: MessageNotUnderstood. In this case the test will fail with a ZeroDivide. So in the negative case #shouldnt:raise: is not very helpful. As a result, #shouldnt:raise: does not change much on the test outcome, the statement itself produces the same failures. However there is the third and most common use case. Example 3: ---------- self shouldnt: [ 1/0 ] raise: Error. In this case the test fails, as expected, however not on a ZeroDivide but an internal error message that shadows the real error. Using Error as argument for #shouldnt:raise: shadows any possible error that might happen and thus should be avoided.'! ! !RBShouldntRaiseErrorRule methodsFor: 'accessing' stamp: 'CamilloBruni 11/4/2013 19:29'! name ^ '= nil -> isNil AND ~= nil -> notNil'! ! !RBShouldntRaiseErrorRule methodsFor: 'accessing' stamp: 'CamilloBruni 11/4/2013 19:30'! rationale ^ 'Replaces `shouldnt: [ ... ] raise: Error` with `[ ... ]`'! ! !SourceFileArray methodsFor: 'file system' stamp: 'MartinDias 11/4/2013 17:27' prior: 76087099! ensureOpen "Ensure that the source and changes files are opened." files := Array with: PharoFilesOpener default sourcesFileOrNil with: PharoFilesOpener default changesFileOrNil! ! !PharoFilesOpener methodsFor: 'public' stamp: 'MartinDias 11/4/2013 17:27'! changesFileOrNil | changes | changes := self openChanges: self changesName. changes ifNil: [ self informProblemInChanges: self cannotLocateMsg. ^ nil ]. (changes isReadOnly and: [ self shouldInformAboutReadOnlyChanges ]) ifTrue: [ self informProblemInChanges: self cannotWriteMsg ]. ((changes next: 200) includesSubstring: String crlf) ifTrue: [ self informProblemInChanges: self badContentMsg ]. ^ changes! ! !PharoFilesOpener methodsFor: 'public' stamp: 'MartinDias 11/4/2013 17:27'! sourcesFileOrNil | sources | sources := self openOrDownloadSources. ^ (sources isNil or: [ sources atEnd ]) ifTrue: [ self informCannotLocateSources. nil ] ifFalse: [ sources ]! ! !RBTransformationRuleTest class methodsFor: 'cleanup' stamp: 'MarcusDenker 10/11/2013 11:19' prior: 71100828! cleanUp self nuke! ! !DateAndTime methodsFor: 'maintime' stamp: 'CamilloBruni 11/4/2013 08:14' prior: 20351778! midnight "Answer a DateAndTime starting at midnight (towards the end of the day) local time" self dayMonthYearDo: [ :day :month :year| ^self class year: year month: month day: day offset: offset ].! ! !DateAndTime methodsFor: 'offset' stamp: 'CamilloBruni 11/4/2013 08:21' prior: 20352603! translateToUTC " Move this represenation to UTC" ^ self translateTo: 0 asDuration ! ! !RBSmalllintTestObject methodsFor: 'methods' stamp: 'CamilloBruni 11/4/2013 23:34'! ifTrueBlocks ^ true ifFalse: self foo! ! !RBSmalllintTestObject methodsFor: 'methods' stamp: 'CamilloBruni 11/4/2013 23:35'! shouldntRaiseError self shouldnt: [ 0/1 ] raise: Error! ! !RBSmalllintTestObject methodsFor: 'methods' stamp: 'CamilloBruni 11/4/2013 23:35'! shouldntRaiseException self shouldnt: [ 0/1 ] raise: Exception! ! !Timespan methodsFor: 'accessing' stamp: 'CamilloBruni 11/4/2013 08:20'! offset: anOffset "Answer a equivalent to the receiver but with its local time being offset from UTC by offset. Unlike #translateTo: this will NOT change the absolute in UTC " ^ self class starting: (self start offset: anOffset) duration: self duration! ! !Timespan methodsFor: 'conversion' stamp: 'CamilloBruni 11/4/2013 08:21' prior: 53216703! translateTo: aTimeZone "Keep myself's representation and move it to another timezone offset. Note that unlike #offset: this WILL change the absolute time in UTC" ^ self class starting: (start translateTo: aTimeZone)! ! !Timespan methodsFor: 'conversion' stamp: 'CamilloBruni 11/4/2013 08:21' prior: 53216861! translateToUTC " Move this represenation to UTC" ^ self translateTo: 0! ! !RBSmalllintTest methodsFor: 'private' stamp: 'CamilloBruni 11/4/2013 19:56' prior: 31400374! ruleFor: aSelector plusSelectors: symbolCollection | returnedEnvironment rule class selector className | selector := aSelector asString copyFrom: 5 to: aSelector size. className := 'RB' , selector , 'Rule'. class := Smalltalk classNamed: className. class isNil ifTrue: [ self error: className , ' class not found' ]. selector at: 1 put: selector first asLowercase. selector := selector asSymbol. RBSmalllintChecker runRule: (rule := class new) onEnvironment: self smalllintTestEnvironment. returnedEnvironment := RBSelectorEnvironment new. returnedEnvironment addClass: RBSmalllintTestObject selector: selector. symbolCollection do: [ :each | returnedEnvironment addClass: RBSmalllintTestObject selector: each ]. self assert: (RBSmalllintTestObject includesSelector: selector) description: 'Missing test method RBSmalllintTestObject>>', selector printString. self assert: (rule name isString and: [ rule name notEmpty ]) description: 'Missing rule name'. self assert: (rule group isString and: [ rule group notEmpty ]) description: 'Missing group name'. self assert: (rule rationale isString and: [ rule rationale notEmpty ]) description: 'Missing rationale'. self assert: (#(error warning information) includes: rule severity) description: 'Invalid severity'. self checkRule: rule isEqualTo: returnedEnvironment! ! !RBSmalllintTest methodsFor: 'tests' stamp: 'CamilloBruni 11/4/2013 23:36'! testShouldntRaiseError self ruleFor: self currentSelector plusSelectors: #(shouldntRaiseException)! ! !DateTest methodsFor: 'helpers' stamp: 'CamilloBruni 11/4/2013 08:42' prior: 20471378! epoch ^ Date year: 1901 month: 1 day: 1! ! !DateTest methodsFor: 'tests' stamp: 'CamilloBruni 11/4/2013 08:41' prior: 49261125! testNew | instance epoch | instance := self dateClass new. epoch := self epoch. "We have to be careful, since #new creates a Date for midnight in the local timezone, whereas #epoch is based on a fixed time in UTC" instance offset negative ifTrue: [ epoch := epoch - 1 day ]. self assert: instance equals: epoch.! ! PharoFilesOpener removeSelector: #tryToOpenSources! PharoFilesOpener removeSelector: #tryToOpenChanges! PharoFilesOpener removeSelector: #checkAndOpenSourcesAndChanges! "Files"! "Kernel"! "KernelTests"! "Manifest-Core"! "Refactoring-Critics"! "Refactoring-Tests-Core"! "Refactoring-Tests-Critics"! ----End fileIn----! ----QUIT----an Array(5 November 2013 10:21:46 am) Pharo.image priorSource: 25957952! ----STARTUP----an Array(5 November 2013 10:26:36 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(5 November 2013 10:26:36 am) Pharo-30547.image priorSource: 25977783! ----STARTUP----an Array(6 November 2013 8:28:36 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/6/2013 08:25' prior: 76289907! commentForCurrentUpdate ^ '12074 Do not check if SourceFiles is nil https://pharo.fogbugz.com/f/cases/12074 12071 #executeMethod: not in Pharo https://pharo.fogbugz.com/f/cases/12071 2895 SocketStream not robuts against integer https://pharo.fogbugz.com/f/cases/2895 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/6/2013 08:25'! script203 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.22.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.330.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.51.mcz Kernel-MarcusDenker.1673.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.173.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.880.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.179.mcz Morphic-Core-MarcusDenker.17.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-StephaneDucasse.196.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.973.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/6/2013 08:25'! update30548 "self new update30548" self withUpdateLog: '12074 Do not check if SourceFiles is nil https://pharo.fogbugz.com/f/cases/12074 12071 #executeMethod: not in Pharo https://pharo.fogbugz.com/f/cases/12071 2895 SocketStream not robuts against integer https://pharo.fogbugz.com/f/cases/2895 '. self loadTogether: self script203 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: 'source code management' stamp: 'MartinDias 11/5/2013 14:44' prior: 68823437! putSource: sourceStr inFile: fileIndex withPreamble: preambleBlock "Store the source code for the receiver on an external file. If no sources are available, i.e., SourceFile is nil, then store temp names for decompilation at the end of the method. If the fileIndex is 1, print on *.sources; if it is 2, print on *.changes, in each case, storing a 4-byte source code pointer at the method end." | file remoteString | (file := SourceFiles at: fileIndex) ifNil: [ ^ self becomeForward: (self copyWithSource: sourceStr) ]. Smalltalk assureStartupStampLogged. file setToEnd. preambleBlock value: file. "Write the preamble" remoteString := RemoteString newString: sourceStr onFileNumber: fileIndex toFile: file. file nextChunkPut: ' '. InMidstOfFileinNotification signal ifFalse: [ file flush ]. self setSourcePosition: remoteString position inFile: fileIndex! ! !TClassDescription methodsFor: 'filein/out' stamp: 'MartinDias 11/5/2013 15:17' prior: 44473750! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | pointer header file oldCommentRemoteString oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [ SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteString := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteString isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" pointer := oldCommentRemoteString ifNil: [0] ifNotNil: [oldCommentRemoteString sourcePointer]. (file := SourceFiles at: 2) ifNotNil: [ file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: pointer printString]. file nextChunkPut: header]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !ChangesLog methodsFor: 'private' stamp: 'MartinDias 11/5/2013 14:45' prior: 34622132! assureStartupStampLogged "If there is a startup stamp not yet actually logged to disk, do it now." | changesFile | startupStamp ifNil: [ ^ self ]. (changesFile := SourceFiles at: 2) ifNil: [ ^ self ]. changesFile isReadOnly ifTrue: [ ^ self ]. changesFile setToEnd; cr; cr. changesFile nextChunkPut: startupStamp asString; cr. startupStamp := nil. self forceChangesToDisk! ! !ChangesLog methodsFor: 'logging' stamp: 'MartinDias 11/5/2013 14:44' prior: 34622654! logChange: aStringOrText "Write the argument, aString, onto the changes file." | aString changesFile | (SourceFiles at: 2) ifNil: [ ^ self ]. self assureStartupStampLogged. aString := aStringOrText asString. (aString findFirst: [ :char | char isSeparator not ]) = 0 ifTrue: [ ^ self ]. "null doits confuse replay" changesFile := SourceFiles at: 2. changesFile isReadOnly ifTrue: [ ^ self ]. changesFile setToEnd; cr; cr. changesFile nextChunkPut: aString. "If want style changes in DoIt, use nextChunkPutWithStyle:, and allow Texts to get here" self forceChangesToDisk! ! !ProtoObject methodsFor: 'executing' stamp: 'ClementBera 11/5/2013 10:21'! executeMethod: compiledMethod ^ self withArgs: #( ) executeMethod: compiledMethod! ! !SocketStream methodsFor: 'stream in' stamp: 'NickPapoulias 10/18/2013 13:31' prior: 50460883! upTo: aCharacterOrByte "Answer a subcollection from the current access position to the occurrence (if any, but not inclusive) of anObject in the receiver. If anObject is not in the collection, answer the entire rest of the receiver." "Note: The 100k limit below is compatible with the previous version though arguably incorrect. If you need unbounded behavior either up the argument or provide nil in which case we'll read until we get it or run out of memory" ^ binary ifTrue: [self upTo: aCharacterOrByte asInteger limit: 100000] ifFalse: [ self upTo: aCharacterOrByte asCharacter limit: 100000]! ! !RemoteString methodsFor: 'accessing' stamp: 'MartinDias 11/5/2013 15:02' prior: 32254187! fileStream "Answer the file stream with position set at the beginning of my string. Answer a read only copy to avoid syntax errors when accessed via multiple processes." | theFile | (sourceFileNumber isNil or: [ (SourceFiles at: sourceFileNumber) isNil ]) ifTrue: [ ^ nil ]. theFile := (SourceFiles at: sourceFileNumber) readOnlyCopy. filePositionHi > theFile size ifTrue: [ self error: 'RemoteString past end of file' ]. theFile position: filePositionHi. ^ theFile! ! !RemoteString methodsFor: 'accessing' stamp: 'MartinDias 11/5/2013 15:04' prior: 32255637! string "Answer the receiver's string if remote files are enabled. Use a read only copy to avoid syntax errors when accessed via multiple processes." | theFile | (sourceFileNumber isNil or: [ (SourceFiles at: sourceFileNumber) isNil ]) ifTrue: [ ^ '' ]. theFile := (SourceFiles at: sourceFileNumber) readOnlyCopy. ^ [ filePositionHi > theFile size ifTrue: [ self error: 'RemoteString past end of file' ]. theFile position: filePositionHi. theFile nextChunk] ensure: [ theFile close ]! ! !RemoteString methodsFor: 'private' stamp: 'MartinDias 11/5/2013 15:04' prior: 32258148! string: aString onFileNumber: fileNumber "Store this as my string if source files exist." | theFile | (SourceFiles at: fileNumber) ifNotNil: [ theFile := SourceFiles at: fileNumber. theFile setToEnd; cr. self string: aString onFileNumber: fileNumber toFile: theFile ]! ! !SocketStreamTest methodsFor: 'stream protocol' stamp: 'NickPapoulias 10/18/2013 11:48'! testUpToSmallInteger "Tests correct behavior of #upTo:" clientStream nextPutAll:'A line of text', String cr, 'with more text'; flush. self assert: (serverStream upTo: Character cr) = 'A line of text'. [(Delay forSeconds: 1) wait. clientStream nextPutAll: String cr; flush] fork. self assert: (serverStream upTo: 13) = 'with more text'. ! ! !SocketStreamTest methodsFor: 'stream protocol' stamp: 'NickPapoulias 10/18/2013 14:10'! testUpToWithByteArray "Tests correct behavior of #upTo:" |byteArray| byteArray := ('A line of text', String cr, 'with more text') asByteArray. clientStream binary. serverStream binary. clientStream nextPutAll: byteArray; flush. self assert: (serverStream upTo: Character cr) asString = 'A line of text'. [(Delay forSeconds: 1) wait. clientStream nextPut: Character cr; flush] fork. self assert: (serverStream upTo: Character cr) asString = 'with more text'. ! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | pointer header file oldCommentRemoteString oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [ SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteString := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteString isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" pointer := oldCommentRemoteString ifNil: [0] ifNotNil: [oldCommentRemoteString sourcePointer]. (file := SourceFiles at: 2) ifNotNil: [ file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: pointer printString]. file nextChunkPut: header]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! !Trait method! classComment: aString stamp: aStamp "Store the comment, aString or Text or RemoteString, associated with the class we are organizing. Empty string gets stored only if had a non-empty one before." | pointer header file oldCommentRemoteString oldComment oldStamp | oldComment := self organization classComment. oldStamp := self organization commentStamp. (aString isKindOf: RemoteString) ifTrue: [ SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp. ^ self organization classComment: aString stamp: aStamp]. oldCommentRemoteString := self organization commentRemoteStr. (aString size = 0) & (oldCommentRemoteString isNil) ifTrue: [^ self organization classComment: nil]. "never had a class comment, no need to write empty string out" pointer := oldCommentRemoteString ifNil: [0] ifNotNil: [oldCommentRemoteString sourcePointer]. (file := SourceFiles at: 2) ifNotNil: [ file setToEnd; cr; nextPut: $!!. "directly" "Should be saying (file command: 'H3') for HTML, but ignoring it here" header := String streamContents: [:strm | strm nextPutAll: self name; nextPutAll: ' commentStamp: '. aStamp storeOn: strm. strm nextPutAll: ' prior: '; nextPutAll: pointer printString]. file nextChunkPut: header]. self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp. SystemAnnouncer uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp! ! "Files"! "Kernel"! "Network-Kernel"! "NetworkTests"! "System-Support"! "Traits"! ----End fileIn----! ----QUIT----an Array(6 November 2013 8:28:46 am) Pharo.image priorSource: 25977990! ----STARTUP----an Array(6 November 2013 8:33:31 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 November 2013 8:33:31 am) Pharo-30548.image priorSource: 26000225! ----STARTUP----an Array(6 November 2013 11:36:04 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/6/2013 11:10' prior: 76309945! commentForCurrentUpdate ^ '12078 Move more deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12078'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/6/2013 11:11'! script204 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.330.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.51.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.882.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.181.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-StephaneDucasse.155.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.75.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.973.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/6/2013 11:11'! update30549 "self new update30549" self withUpdateLog: '12078 Move more deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12078'. self loadTogether: self script204 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMDispatcher methodsFor: '*Deprecated30' stamp: 'GuillermoPolito 8/5/2013 10:21' prior: 46683948! on: aShortcut do: anAction Transcript show: 'You have an on:do: instead of a onKey: do: in ',thisContext sender method printString; cr. self deprecated: 'Use onKey: do: instead' on: '4 August 2013' in: 'Pharo30'. ^ self bindKeyCombination: aShortcut toAction: anAction! ! !MCPackage methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 9/14/2012 11:32' prior: 24890750! packageInfo self deprecated: 'Use #packageSet' on: '14 September 2012' in: '2.0'. ^ PackageInfo named: name! ! !Time class methodsFor: '*Deprecated30' stamp: 'CamilloBruni 8/22/2013 18:04' prior: 68352948! primSecondsClock self deprecated: 'Use Time primUTCSecondsClock instead' on: '2013-08-22' in: #Pharo30. ^self primUTCMicrosecondsClock // 1e6! ! !MCScriptDefinition methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 9/14/2012 11:32' prior: 24969894! packageInfo self deprecated: 'Use #packageSet' on: '14 September 2012' in: '2.0'. ^ PackageInfo named: packageName! ! !MCPackageManager methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 9/14/2012 11:32' prior: 24906294! packageInfo self deprecated: 'Use #packageSet' on: '14 September 2012' in: '2.0'. ^ package packageInfo! ! !Morph methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 10/13/2013 21:56' prior: 74746658! hasTranslucentColor "Answer true if this any of this morph is translucent but not transparent." self deprecated: 'Use isTranslucentButNotTransparent' on: '14/10/2013' in: #Pharo30. ^ self isTranslucentButNotTransparent! ! !NewListModel methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 5/1/2013 10:33' prior: 69489300! whenSelectionIndexChanged: aBlock self deprecated: 'Use #whenSelectedIndexChanged: instead' on: '1 May 2013' in: '30078'! ! !ImageMorph methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/23/2013 17:26' prior: 41535903! image self deprecated: 'Use form instead' on: '23 May 2013' in: #pharo30. ^ self form ! ! !ImageMorph methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/23/2013 17:26' prior: 41537134! newForm: aForm self deprecated: 'Use form: instead' on: '23 May 2013' in: #pharo30. self form: aForm! ! !ImageMorph methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/23/2013 17:27' prior: 41537669! setNewImageFrom: form "Change the receiver's image to be one derived from the supplied form." self deprecated: 'Use form: instead' on: '23 May 2013' in: #pharo30. self form: form! ! !MCServerCredentials class methodsFor: '*Deprecated30' stamp: 'CamilloBruni 4/11/2013 17:34' prior: 34693183! user: nameString hasPassword: passwordString self deprecated: 'use user:password:' on: '4/11/2013' in: 'Pharo 3.0'. ^ self new username: nameString; password: passwordString; yourself.! ! !DateAndTime methodsFor: '*Deprecated30' stamp: 'nice 4/27/2013 22:21' prior: 36387690! secondsSinceMidnight self deprecated: 'Use secondsSinceMidnightUTC' on: ' 2013-04-27T20:20:00Z' in: 'Pharo 3.0'. ^ self secondsSinceMidnightUTC! ! "Deprecated30"! "Kernel"! "Keymapping-Core"! "Monticello"! "Morphic-Base"! "Morphic-Core"! "Spec-Core"! ----End fileIn----! ----QUIT----an Array(6 November 2013 11:36:17 am) Pharo.image priorSource: 26000430! ----STARTUP----an Array(6 November 2013 11:41:18 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(6 November 2013 11:41:18 am) Pharo-30549.image priorSource: 26014986! ----STARTUP----an Array(7 November 2013 9:11:37 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/7/2013 09:08' prior: 76332385! commentForCurrentUpdate ^ '11739 STCommandLineHandler cannot save https://pharo.fogbugz.com/f/cases/11739 6155 Locale plugin returning wrong isoCountry code https://pharo.fogbugz.com/f/cases/6155 11393 allFileNamesOrCache seems to be inconsistent with other methods https://pharo.fogbugz.com/f/cases/11393'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/7/2013 09:08'! script205 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.330.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-MarcusDenker.51.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.884.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.181.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-MarcusDenker.26.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.157.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.973.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/7/2013 09:08'! update30550 "self new update30550" self withUpdateLog: '11739 STCommandLineHandler cannot save https://pharo.fogbugz.com/f/cases/11739 6155 Locale plugin returning wrong isoCountry code https://pharo.fogbugz.com/f/cases/6155 11393 allFileNamesOrCache seems to be inconsistent with other methods https://pharo.fogbugz.com/f/cases/11393'. self loadTogether: self script205 merge: false. self flushCaches. ! ! "ScriptLoader30"! !STCommandLineHandler commentStamp: '' prior: 45168641! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE --save if specified, save the image after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !Locale methodsFor: 'accessing' stamp: 'CamilloBruni 11/6/2013 21:23' prior: 24550354! determineLocaleID "Locale current determineLocaleID" | langCode isoLang countryCode isoCountry | langCode := self fetchISO2Language. isoLang := langCode ifNil: [^self localeID] ifNotNil: [langCode]. countryCode := self primCountry copyUpTo: 0 asCharacter. isoCountry := countryCode ifNil: [^LocaleID isoLanguage: isoLang] ifNotNil: [countryCode]. ^LocaleID isoLanguage: isoLang isoCountry: isoCountry! ! !STCommandLineHandler commentStamp: '' prior: 76358642! Usage: st [--help] [ --quit ] --help list this help message --quit if specified, the image exits without saving after evaluating FILE --save if specified, save the image after evaluating FILE a file containing valid Pharo expressions Documentation: The ST command line handler runs Pharo code stored in a file without quiting. Example: pharo Pharo.image st code.st # By default files ending in .st are recognized and evaluated pharo Pharo.image code.st! !STCommandLineHandler methodsFor: 'activation' stamp: 'CamilloBruni 11/6/2013 21:40' prior: 43661277! activate self activateHelp ifTrue: [ ^ self ]. self loadSourceFiles: (self commandLine allFilesWithExtension: 'st'). self installSourceFiles. self end! ! !STCommandLineHandler methodsFor: 'private' stamp: 'CamilloBruni 11/6/2013 21:40'! end | quit | quit := self commandLine hasOption: 'quit'. (self commandLine hasOption: 'save') ifTrue: [ Smalltalk snapshot: true andQuit: quit ]. quit ifTrue: [ self exitSuccess ].! ! !MCFileBasedRepository methodsFor: 'accessing' stamp: 'CamilloBruni 11/6/2013 21:55' prior: 41439409! allFileNamesOrCache cacheFileNames == true ifFalse: [ ^ self allFileNames ]. ^ allFileNames ifNil: [ allFileNames := self allFileNames]! ! "Monticello"! "System-CommandLine"! "System-Localization"! ----End fileIn----! ----QUIT----an Array(7 November 2013 9:11:44 am) Pharo.image priorSource: 26015193! ----STARTUP----an Array(7 November 2013 9:16:34 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 9:16:34 am) Pharo-30550.image priorSource: 26029430! ----STARTUP----an Array(7 November 2013 4:32:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/7/2013 16:26' prior: 76347148! commentForCurrentUpdate ^ '- Issue 12088: Show the package in the senders and implementors window https://pharo.fogbugz.com/f/cases/12088/ - Issue 12060: The Quit menu entry is not asking for a confirmation anymore? https://pharo.fogbugz.com/f/cases/12060/ Smalltalk tools userManager currentUser permissions canSaveImage: true - Issue 12079: HDTestReport improvements https://pharo.fogbugz.com/f/cases/12079/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 16:26'! script206 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.330.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.884.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.181.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-MarcusDenker.113.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.281.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.147.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.159.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-MarcusDenker.238.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.975.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1347.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/7/2013 16:27'! update30551 "self new update30551" self withUpdateLog: '- Issue 12088: Show the package in the senders and implementors window https://pharo.fogbugz.com/f/cases/12088/ - Issue 12060: The Quit menu entry is not asking for a confirmation anymore? https://pharo.fogbugz.com/f/cases/12060/ Smalltalk tools userManager currentUser permissions canSaveImage: true - Issue 12079: HDTestReport improvements https://pharo.fogbugz.com/f/cases/12079/'. self loadTogether: self script206 merge: false. Smalltalk tools userManager currentUser permissions canSaveImage: true. self flushCaches. ! ! "ScriptLoader30"! !HDTestReport methodsFor: 'private' stamp: 'CamilloBruni 11/6/2013 21:33'! beginTestCase: aTestCase runBlock: aBlock | time | progressFile nextPutAll: 'starting testcase: ' ; nextPutAll: aTestCase class name; nextPutAll:'>>'; nextPutAll: aTestCase selector; nextPutAll: ' ... '; flush. time := aBlock timeToRun. stream tab; nextPutAll: ''; lf ! ! !HDTestReport methodsFor: 'running' stamp: 'MaxLeske 11/6/2013 10:03' prior: 23128552! runCase: aTestCase | error stack | self beginTestCase: aTestCase runBlock: [ [ [ aTestCase runCase ] on: Halt , Error, TestFailure do: [ :err | error := err. aTestCase isExpectedFailure ifFalse: [self serializeError: error of: aTestCase]. stack := self stackTraceString: err of: aTestCase ]] on: TestSkip do: [ :err| "nothing to do..." ] ]. (error isNil or: [aTestCase isExpectedFailure]) ifFalse: [ (error isKindOf: TestFailure) ifTrue: [ self writeError: error stack: stack ] ifFalse: [ self writeFailure: error stack: stack ]]. self endTestCase! ! !HDTestReport methodsFor: 'running' stamp: 'MaxLeske 11/6/2013 10:10' prior: 76287718! tearDown suite resources do: [ :each | each reset ]. stream tab; nextPutAll: ''; lf. stream tab; nextPutAll: ''; lf. stream nextPutAll: ''. stream position: suitePosition. stream nextPutAll: ' failures="'; print: suiteFailures; nextPutAll: '" errors="'; print: suiteErrors; nextPutAll: '" time="'; print: suiteTime asMilliSeconds / 1000.0; nextPutAll: '">'. stream close. progressFile nextPutAll: 'finished running suite: '; nextPutAll: suite name; close! ! !RGPackage methodsFor: 'printing' stamp: 'LeoGassman 11/7/2013 11:37'! printOn: aStream aStream nextPutAll: self class name; nextPutAll: '('; nextPutAll: self name; nextPutAll: ')'! ! !MessageBrowser methodsFor: 'private' stamp: 'LeoGassman 11/7/2013 11:49' prior: 25584810! wrapItem: anItem | s | s :=String streamContents: [ :aStream | 3 to: (cachedHierarchy at: anItem) size do: [:i | aStream << ' ']. aStream << anItem methodClass name << ' ('. anItem isFromTrait ifTrue: [ aStream << anItem compiledMethod origin name; space ]. aStream << (anItem category ifNil: ['']) <<')']. ^ {s. anItem selector. '[',anItem package name,']'.}.! ! !SystemNavigation methodsFor: 'private' stamp: 'LeoGassman 11/7/2013 11:43' prior: 75612109! createMethodNamed: aSelector realParent: class ^ (RGMethodDefinition realClass: class selector: aSelector) package: (RGPackage named: (class>>aSelector) package name asSymbol); yourself .! ! HDTestReport removeSelector: #beginTestCase:time:! "HudsonBuildTools20"! "Ring-Core-Containers"! "Spec-Tools"! "System-Support"! ----End fileIn----! ----QUIT----an Array(7 November 2013 4:32:12 pm) Pharo.image priorSource: 26029635! ----STARTUP----an Array(7 November 2013 4:37:05 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 4:37:05 pm) Pharo-30551.image priorSource: 26044862! ----STARTUP----an Array(7 November 2013 5:16:33 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/7/2013 17:06' prior: 76361592! commentForCurrentUpdate ^ '- Issue 12081: Show the package in the senders and implementors window https://pharo.fogbugz.com/f/cases/12088/ - Issue 12093: Make RGComment polymorphic to RGMEthod for packages https://pharo.fogbugz.com/f/cases/12093'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 17:07'! script207 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.181.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-EstebanLorenzano.131.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.115.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.159.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.976.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-MarcusDenker.23.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1349.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/7/2013 17:08'! update30552 "self new update30552" self withUpdateLog: '- Issue 12081: Show the package in the senders and implementors window https://pharo.fogbugz.com/f/cases/12088/ - Issue 12093: Make RGComment polymorphic to RGMEthod for packages https://pharo.fogbugz.com/f/cases/12093'. self loadTogether: self script207 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: '*Ring-Core-Kernel' stamp: 'LeoGassman 11/7/2013 12:36'! asRingDefinition ^RGPackage named: self name asSymbol! ! !RPackage methodsFor: 'system compatibility' stamp: 'MartinDias 11/6/2013 16:04' prior: 75760811! changeRecordForOverriddenMethod: aMethodDefinition ^ SourceFiles changeRecordsFor: aMethodDefinition detect: [ :protocol | self includesMethodCategory: protocol ofClass: aMethodDefinition actualClass ]! ! !Class methodsFor: '*Ring-Core-Kernel' stamp: 'LeoGassman 11/7/2013 12:32' prior: 76003457! asRingDefinition "A behavior is converted to a ring class. Only the receiver and its variables (instance, class, pools) are converted. Methods, superclasses, subclasses are not generated" | ring | ring := (RGFactory current createClassNamed: self name) category: self category; superclassName: self superclass name; traitCompositionSource: self traitCompositionString; addInstanceVariables: self instVarNames; addClassVariables: self classVarNames; addSharedPools: self poolDictionaryNames; comment: self organization classComment; stamp: self organization commentStamp; definitionSource: self definition; package: self package asRingDefinition; withMetaclass. ring theMetaClass traitCompositionSource: self theMetaClass traitCompositionString; definitionSource: self theMetaClass definition; addInstanceVariables: self theMetaClass instVarNames. ^ ring! ! !VersionsBrowser methodsFor: 'init & update' stamp: 'MartinDias 11/6/2013 16:53' prior: 75766966! scanVersionsOf: aMethod class: aClass meta: isMeta category: aCategoryOrNil selector: aSelector selectorOfMethod := aSelector. currentCompiledMethod := aMethod. classOfMethod := isMeta ifTrue: [ aClass class ] ifFalse: [ aClass ]. changeList := OrderedCollection new. list := OrderedCollection new. self addedChangeRecord ifNotNil: [ :change | self addItem: change text: ('{1} (in {2})' translated format: { change stamp. change fileName }) ]. listIndex := 0. SourceFiles changeRecordsFrom: aMethod sourcePointer className: aClass name isMeta: isMeta do: [ :changeRecord | self addItem: changeRecord text: changeRecord stamp, ' ', aClass name, (isMeta ifTrue: [' class '] ifFalse: [' ']) , aSelector, ' {', changeRecord category, '}' ]. listSelections := Array new: list size withAll: false! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'MartinDias 11/6/2013 16:04' prior: 75764344! scanForPreviousVersion ^ SourceFiles changeRecordsFor: self asRingDefinition detect: [ :protocol | protocol ~= category ]! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MartinDias 11/6/2013 17:14'! changeRecordsFor: aMethodDefinition detect: aUnaryBlock "Try to detect the most recent ChangeRecord that satisfies aUnaryBlock. Answer nil if none satisfies." self changeRecordsFor: aMethodDefinition do: [ :changeRecord | (aUnaryBlock value: changeRecord category) ifTrue: [ ^ changeRecord ] ]. ^ nil! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MartinDias 11/6/2013 17:14'! changeRecordsFor: aMethodDefinition do: aUnaryBlock "Evaluate aUnaryBlock with each of the ChangeRecords of aMethodDefinition. Most recent changes are evaluated first." | method | method := aMethodDefinition actualClass compiledMethodAt: aMethodDefinition selector ifAbsent: [ ^ self ]. self changeRecordsFrom: method sourcePointer className: aMethodDefinition theNonMetaClassName isMeta: aMethodDefinition classIsMeta do: aUnaryBlock! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MartinDias 11/6/2013 17:16'! changeRecordsFrom: initialSourcePointer className: theNonMetaClassName isMeta: classIsMeta do: aUnaryBlock "Evaluate aUnaryBlock with each of the ChangeRecords of a method, starting from the initialSourcePointer. Most recent changes are evaluated first." | filePosition fileIndex | fileIndex := self fileIndexFromSourcePointer: initialSourcePointer. filePosition := self filePositionFromSourcePointer: initialSourcePointer. self readOnlyDo: [ :sourceFilesCopy | | file previousFilePosition previousFileIndex preamble stamp protocol preambleTokens | file := sourceFilesCopy at: fileIndex ifAbsent: [ ^ self ]. [ filePosition notNil & file notNil ] whileTrue: [ file position: (0 max: filePosition - 150). "Skip back to before the preamble" [ file position < (filePosition - 1) ] whileTrue: [ preamble := file nextChunk ]. "then pick it up from the front" "Preamble is likely a linked method preamble, if we're in a changes file (not the sources file). Try to parse it for prior source position and file index" previousFilePosition := nil. stamp := ''. (preamble includesSubstring: 'methodsFor:') ifTrue: [ preambleTokens := preamble parseLiterals ] ifFalse: [ preambleTokens := Array new "ie cant be back ref" ]. ((preambleTokens size between: 7 and: 8) and: [ (preambleTokens at: preambleTokens size - 5) = #methodsFor: ]) ifTrue: [ (preambleTokens at: preambleTokens size - 3) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := preambleTokens at: preambleTokens size - 2. previousFilePosition := preambleTokens last. previousFileIndex := self fileIndexFromSourcePointer: previousFilePosition. previousFilePosition := self filePositionFromSourcePointer: previousFilePosition ] ifFalse: [ "Old format gives no stamp; prior pointer in two parts" previousFilePosition := preambleTokens at: preambleTokens size - 2. previousFileIndex := preambleTokens last ]. (previousFilePosition = 0 or: [ previousFileIndex = 0 ]) ifTrue: [ previousFilePosition := nil ] ]. ((preambleTokens size between: 5 and: 6) and: [ (preambleTokens at: preambleTokens size - 3) = #methodsFor: ]) ifTrue: [ (preambleTokens at: preambleTokens size - 1) = #stamp: ifTrue: [ "New format gives change stamp and unified prior pointer" stamp := preambleTokens at: preambleTokens size ] ]. protocol := preambleTokens after: #methodsFor: ifAbsent: [ Protocol unclassified ]. aUnaryBlock value: ( ChangeRecord new file: file position: filePosition type: #method class: theNonMetaClassName category: protocol meta: classIsMeta stamp: stamp). filePosition := previousFilePosition. previousFilePosition ifNotNil: [ file := sourceFilesCopy at: previousFileIndex ifAbsent: [ ^ self ] ] ] ]! ! !ChangeSet class methodsFor: 'scanning' stamp: 'MartinDias 11/6/2013 16:32' prior: 75758220! scanVersionsOf: aMethod class: aClass meta: isMeta category: aCategory selector: aSelector | changeRecords | changeRecords := OrderedCollection new. SourceFiles changeRecordsFrom: aMethod sourcePointer className: aClass name isMeta: isMeta do: [ :changeRecord | changeRecords add: changeRecord ]. ^ changeRecords! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'MartinDias 11/6/2013 16:04' prior: 75780292! changeRecordForOverriddenMethod: aMethodDefinition ^ SourceFiles changeRecordsFor: aMethodDefinition detect: [ :protocol | self includesMethodCategory: protocol ofClass: aMethodDefinition actualClass ]! ! !SystemNavigation methodsFor: 'private' stamp: 'LeoGassman 11/7/2013 12:37' prior: 76376162! createMethodNamed: aSelector realParent: class ^ (RGMethodDefinition realClass: class selector: aSelector) package: (class>>aSelector) package asRingDefinition; yourself .! ! !RGElementDefinition class methodsFor: 'class initialization' stamp: 'LeoGassman 11/7/2013 12:24' prior: 31663548! realClass: aClass "The argument is a Smalltalk class and the parent of a method, variable, class comment. However it is not set as parent but only its name and scope (instance/class)" ^self new parent: aClass asRingDefinition; yourself! ! !RGElementDefinition methodsFor: 'accessing' stamp: 'LeoGassman 11/7/2013 12:25'! package ^self parent package ! ! !PackageInfo methodsFor: 'testing' stamp: 'MartinDias 11/6/2013 16:04' prior: 75769744! changeRecordForOverriddenMethod: aMethodDefinition ^ SourceFiles changeRecordsFor: aMethodDefinition detect: [ :protocol | self includesMethodCategory: protocol ofClass: aMethodDefinition actualClass ]! ! "Files"! "Monticello"! "PackageInfo"! "RPackage-Core"! "Ring-Core-Kernel"! "System-Changes"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----an Array(7 November 2013 5:16:44 pm) Pharo.image priorSource: 26045067! ----STARTUP----an Array(7 November 2013 5:23:14 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 5:23:14 pm) Pharo-30552.image priorSource: 26065372! ----STARTUP----an Array(7 November 2013 8:39:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'ci' stamp: 'StephaneDucasse 11/7/2013 20:21' prior: 32730651! checkImageIsUptodateSilently | last number | self class checkImageInSyncWithUpdate ifFalse: [^ true]. self updatesListFile writeStreamDo: [ :stream | stream contents linesDo: [ :each | last := each ]]. last isNil ifTrue: [^ false]. "in case the file is empty" (last copyUpTo: $-) isAllDigits ifFalse: [^ true]. "for cases where we have #Pharo1.1rc1 starting the line" number := (last copyUpTo: $-) asNumber. ^ number = self getLatestUpdateNumber. ! ! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/7/2013 20:31' prior: 76377024! commentForCurrentUpdate ^ '- Issue 12091: Smart Suggestions is not working in message browser and debugger anymore https://pharo.fogbugz.com/f/cases/12091 - Issue 12100 Add shortcut for code formatting https://pharo.fogbugz.com/f/cases/12100'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 19:23'! script208 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.183.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-StephaneDucasse.133.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.117.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.159.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.977.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.25.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1349.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 20:32'! script209 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.260.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.184.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.587.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-StephaneDucasse.134.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-MarcusDenker.42.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.8.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.159.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.976.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1349.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/7/2013 20:32'! update30553 "self new update30553" self withUpdateLog: '- Issue 12091: Smart Suggestions is not working in message browser and debugger anymore https://pharo.fogbugz.com/f/cases/12091 - Issue 12100 Add shortcut for code formatting https://pharo.fogbugz.com/f/cases/12100'. self loadTogether: self script209 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SugsMorphicTextAdapterContext commentStamp: '' prior: 0! A SugsMorphicTextAdapterContext is a context that know how to work with the MorphicTextAdapter. ! !PluggableTextMorph methodsFor: 'formatting' stamp: 'GuillermoPolito 11/7/2013 13:22'! formatSourceCode self handleEdit: [ | source tree formatted | source := self textMorph text asString. tree := RBParser parseMethod: source onError: [ :msg :pos | ^ self ]. formatted := tree formattedCode. formatted = source ifTrue: [ ^ self ]. self editString: formatted; hasUnacceptedEdits: true ]! ! !TClassDescription methodsFor: '*NautilusRefactoring' stamp: 'GuillermoPolito 11/7/2013 14:17' prior: 48696008! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; keyText: 'Ctrl Shift f'; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !MorphicTextAdapter methodsFor: '*SmartSuggestions' stamp: 'GiselaDecuzzi 11/7/2013 12:34'! sugsContext ^SugsMorphicTextAdapterContext model: self! ! !NautilusRefactoring methodsFor: 'source' stamp: 'GuillermoPolito 11/7/2013 14:13' prior: 28234932! formatSourceCode | textArea | self model ifNil: [ ^ self ]. textArea := self model sourceTextArea. textArea formatSourceCode.! ! !SmalltalkEditor class methodsFor: 'shortcuts' stamp: 'GuillermoPolito 11/7/2013 14:14' prior: 33481137! buildSmalltalkEditorKeymappingsOn: aBuilder (aBuilder shortcut: #browseIt) category: #SmalltalkEditor default: $b command mac | $b ctrl win | $b ctrl unix do: [ :morph | morph browseIt ]. (aBuilder shortcut: #doIt) category: #SmalltalkEditor default: $d command mac | $d ctrl win | $d ctrl unix do: [ :morph | morph doIt ]. (aBuilder shortcut: #inspectIt) category: #SmalltalkEditor default: $i command mac | $i ctrl win | $i ctrl unix do: [ :morph | morph inspectIt ]. (aBuilder shortcut: #implementorsOfIt) category: #SmalltalkEditor default: $m command mac | $m ctrl win | $m ctrl unix do: [ :morph | morph implementorsOfIt ]. (aBuilder shortcut: #sendersOfIt) category: #SmalltalkEditor default: $n command mac | $n ctrl win | $n ctrl unix do: [ :morph | morph sendersOfIt ]. (aBuilder shortcut: #formatCode) category: #SmalltalkEditor default: $f ctrl shift do: [ :morph | morph formatSourceCode ]. (aBuilder shortcut: #printIt) category: #SmalltalkEditor default: $p command mac | $p ctrl win | $p ctrl unix do: [ :morph | morph printIt ]! ! !SugsAbstractContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 11/7/2013 13:02' prior: 36685669! contextFor: aModel (aModel respondsTo: #sugsContext) ifTrue: [ ^ aModel sugsContext ]. (aModel model respondsTo: #sugsContext) ifTrue: [ ^ aModel model sugsContext ]. self error: 'Not defined context for ' , aModel asString! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 11/7/2013 13:07' prior: 35725803! selectedClass self subclassResponsibility ! ! !SugsAbstractContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 11/7/2013 13:06' prior: 35726215! selectedMethod self subclassResponsibility ! ! !SugsAbstractContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 11/7/2013 12:49' prior: 35726634! sourceTextArea self subclassResponsibility ! ! !SugsMorphicTextAdapterContext commentStamp: '' prior: 76420146! A SugsMorphicTextAdapterContext is a context that know how to work with the MorphicTextAdapter. ! !SugsMorphicTextAdapterContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 11/7/2013 12:36'! code ^ model getText .! ! !SugsMorphicTextAdapterContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 11/7/2013 13:08'! selectedClass ^model behavior! ! !SugsMorphicTextAdapterContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 11/7/2013 13:06'! selectedMethod ^model model owner selectedMessage! ! !SugsMorphicTextAdapterContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 11/7/2013 12:53'! sourceTextArea ^model widget ! ! !SugsMessageBrowserContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 11/7/2013 13:09' prior: 38361407! selectedClass ^model selectedBehavior! ! !SugsMessageBrowserContext methodsFor: 'selection' stamp: 'GiselaDecuzzi 5/2/2013 13:58' prior: 38361550! selectedMethod ^model owner selectedMessage.! ! !SugsMessageBrowserContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/22/2013 10:40' prior: 38983025! sourceTextArea ^ model widget.! ! !SugsMessageBrowserContext methodsFor: 'tools' stamp: 'GiselaDecuzzi 5/2/2013 13:57' prior: 38361846! tools ^ model systemNavigation! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; keyText: 'Ctrl Shift f'; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! !Trait method! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Format') order: 1100; keyText: 'Ctrl Shift f'; action: [ target refactor formatSourceCode ]. (aBuilder item: #'Source code refactoring') order: 1101; arguments: {}; withSeparatorAfter.! ! "Morphic-Base"! "NautilusRefactoring"! "SmartSuggestions"! "Text-Edition"! ----End fileIn----! ----QUIT----an Array(7 November 2013 8:39:41 pm) Pharo.image priorSource: 26065577! ----STARTUP----an Array(7 November 2013 8:44:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 8:44:32 pm) Pharo-30553.image priorSource: 26093860! ----STARTUP----an Array(7 November 2013 9:25:32 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/7/2013 21:15' prior: 76398101! commentForCurrentUpdate ^ '- Issue 12096: Bad use of polimorphic on openMessageList:name:autoSelect: method of MessageBrowser class. https://pharo.fogbugz.com/f/cases/12096 - Issue 12064: Selecting a package in the Monticello browser https://pharo.fogbugz.com/f/cases/12064 - Issue 12098: Node Navigation not working in message browser and debugger https://pharo.fogbugz.com/f/cases/12098 - Issue 12086: Put a fly by help in the browser lists https://pharo.fogbugz.com/f/cases/12086'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 21:16'! script210 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1675.mcz KernelTests-MarcusDenker.581.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-MarcusDenker.175.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-StephaneDucasse.262.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-MarcusDenker.19.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.589.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-StephaneDucasse.134.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.160.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.976.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1350.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/7/2013 21:16'! update30554 "self new update30554" self withUpdateLog: '- Issue 12096: Bad use of polimorphic on openMessageList:name:autoSelect: method of MessageBrowser class. https://pharo.fogbugz.com/f/cases/12096 - Issue 12064: Selecting a package in the Monticello browser https://pharo.fogbugz.com/f/cases/12064 - Issue 12098: Node Navigation not working in message browser and debugger https://pharo.fogbugz.com/f/cases/12098 - Issue 12086: Put a fly by help in the browser lists https://pharo.fogbugz.com/f/cases/12086'. self loadTogether: self script210 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphTreeNodeModel methodsFor: 'accessing' stamp: 'GuillermoPolito 11/7/2013 15:55'! helpText ^ model helpText! ! !MorphicTextAdapter methodsFor: '*NodeNavigation' stamp: 'GiselaDecuzzi 11/7/2013 14:18'! isWorkspace ^false! ! !MorphTreeNodeMorph methodsFor: 'initialization' stamp: 'GuillermoPolito 11/7/2013 15:53' prior: 27041348! initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel container := hostList. self cellInset: (container resizerWidth @ 0). complexContents := anObject. isExpanded := false. nextSibling := firstChild := nil. priorMorph ifNotNil: [priorMorph nextSibling: self]. indentLevel := newLevel. self setBalloonText: anObject helpText. self initRow ! ! !MessageBrowser class methodsFor: 'instance creation' stamp: 'LeoGassman 11/7/2013 15:19'! on: aList named: aString autoSelect: aSelector refreshingBlockSelector:aRefreshingBlockSelector |out| out := self new messages: aList; title: aString; autoSelect: aSelector; yourself. out refreshingBlock: (aRefreshingBlockSelector ifNil:[nil] ifNotNil:[(out perform:aRefreshingBlockSelector with:aSelector)]). ^out! ! !MessageBrowser class methodsFor: 'tool registration' stamp: 'LeoGassman 11/7/2013 14:50' prior: 25589312! openMessageList: messageList name: aString autoSelect: aSelector self openMessageList: messageList name: aString autoSelect: aSelector refreshingBlockSelector: nil.! ! !MessageBrowser class methodsFor: 'tool registration' stamp: 'LeoGassman 11/7/2013 15:23'! openMessageList: messageList name: aString autoSelect: aSelector refreshingBlockSelector:aRefreshingBlockSelector " Tool registry compitibility " | title | aString last = $] ifTrue: [ title := aString substrings allButLast joinUsing: ' ' ] ifFalse: [ title := aString ]. ^ (self on: messageList named: title autoSelect: aSelector refreshingBlockSelector:aRefreshingBlockSelector) openWithSpec! ! !MorphTreeModel methodsFor: 'help-text' stamp: 'GuillermoPolito 11/7/2013 15:55'! helpText ^ nil! ! !MCSystemSettings class methodsFor: 'settings' stamp: 'NicolasPapagnaMaldonado 11/7/2013 15:05'! showOnlyRepositoriesFromWorkingCopySettingOn: aBuilder (aBuilder setting: #showOnlyRepositoriesFromWorkingCopy) label: 'Show only repositories from working copies' translated; description: 'When enabled Monticello Browser displays only the repositories associated to the current selected working copy.' translated; parent: #monticello; target: MCWorkingCopyBrowser; selector: #showOnlyRepositoriesFromWorkingCopy! ! !MCWorkingCopyBrowser class methodsFor: 'as yet unclassified' stamp: 'NicolasPapagnaMaldonado 11/7/2013 14:52'! showOnlyRepositoriesFromWorkingCopy ^ ShowOnlyRepositoriesFromWorkingCopy ifNil: [ ShowOnlyRepositoriesFromWorkingCopy := false ]! ! !MCWorkingCopyBrowser class methodsFor: 'as yet unclassified' stamp: 'NicolasPapagnaMaldonado 11/7/2013 15:08'! showOnlyRepositoriesFromWorkingCopy: aBoolean ShowOnlyRepositoriesFromWorkingCopy := aBoolean! ! !MCWorkingCopyBrowser class methodsFor: 'as yet unclassified' stamp: 'NicolasPapagnaMaldonado 11/7/2013 14:54'! toggleShowOnlyRepositoriesFromWorkingCopy ShowOnlyRepositoriesFromWorkingCopy := ShowOnlyRepositoriesFromWorkingCopy not ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'NicolasPapagnaMaldonado 11/7/2013 14:59' prior: 36603023! repositoryGroup ^ self class showOnlyRepositoriesFromWorkingCopy ifTrue: [ workingCopy ifNil: [ MCRepositoryGroup default ] ifNotNil: [ workingCopy repositoryGroup ] ] ifFalse: [ MCRepositoryGroup default ] ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'NicolasPapagnaMaldonado 11/7/2013 15:06' prior: 25188130! repositoryListMenu: aMenu self repository ifNil: [^ aMenu]. self fillMenu: aMenu fromSpecs: self repositoryMenuSpec. aMenu add: (self repository alwaysStoreDiffs ifTrue: ['Store full versions'] ifFalse: ['Store diffs']) target: self selector: #toggleDiffs. aMenu addUpdating: #showOnlyRepositoriesFromWorkingCopyString action: #showOnlyRepositoriesFromWorkingCopy. ^ aMenu ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'NicolasPapagnaMaldonado 11/7/2013 15:24'! showOnlyRepositoriesFromWorkingCopy self class toggleShowOnlyRepositoriesFromWorkingCopy. "Clear repository selection because it might be filtered when displaying only repositories from working copy" self repositorySelection: 0. self repositoryListChanged. ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'NicolasPapagnaMaldonado 11/7/2013 15:23'! showOnlyRepositoriesFromWorkingCopyString ^ self class showOnlyRepositoriesFromWorkingCopy -> 'Show only repositories from working copy'! ! !PackageTreeModel methodsFor: 'help-text' stamp: 'GuillermoPolito 11/7/2013 16:04'! helpTextFor: aRPackage "We try to get a configuration class with the same name of the package" "If the package has subnames with dashes, we take only the first part" | configuration possibleConfigurationName | possibleConfigurationName := 'ConfigurationOf', (aRPackage name subStrings: '-') first. configuration := possibleConfigurationName asSymbol asClassIfAbsent: [ ^nil ]. "If the configuration has a catalog description we show it, if not we don't" (configuration respondsTo: #catalogDescription) ifFalse: [ ^ nil ]. ^configuration catalogDescription.! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'LeoGassman 11/7/2013 15:11' prior: 51539831! browseImplementorsOf: aSelector name: labelString autoSelect: autoSelectString "Create and schedule a senders browser for aSelector." ^ self browseMessageList: (self allImplementorsOf: aSelector) name: labelString autoSelect: autoSelectString refreshingBlockSelector:#setRefreshingBlockForImplementorsOf: ! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'LeoGassman 11/7/2013 14:43' prior: 51540904! browseMessageList: messageList name: labelString autoSelect: autoSelectString ^self browseMessageList: messageList name: labelString autoSelect: autoSelectString refreshingBlockSelector:nil ! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'LeoGassman 11/7/2013 15:04'! browseMessageList: messageList name: labelString autoSelect: autoSelectString refreshingBlockSelector:aRefreshingBlockSelector "Create and schedule a MessageSet browser on the message list." | title methods | "Do not show trait methods" methods := messageList reject: [ :each| each isFromTrait ]. methods size = 0 ifTrue: [^ self inform: 'There are no ', String cr, labelString]. methods size == 1 ifTrue: [ | method | method := methods first. ^ Smalltalk tools browser fullOnClass: method methodClass selector: method selector highlight: autoSelectString ]. title := labelString, ' [', methods size printString, ']'. ^ Smalltalk tools messageList openMessageList: methods name: title autoSelect: autoSelectString refreshingBlockSelector:aRefreshingBlockSelector ! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'LeoGassman 11/7/2013 15:07' prior: 51544823! browseSendersOf: aSelector name: labelString autoSelect: autoSelectString ^ self browseMessageList: (self allCallsOn: aSelector) name: labelString autoSelect: autoSelectString refreshingBlockSelector: #setRefreshingBlockForSendersOf: ! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'GuillermoPolito 11/7/2013 15:56'! helpText ^ self model helpTextFor: self item.! ! "MonticelloGUI"! "Morphic-Base"! "Nautilus"! "NodeNavigation"! "Settings-Monticello"! "Spec-Tools"! "Tools"! ----End fileIn----! ----QUIT----an Array(7 November 2013 9:25:43 pm) Pharo.image priorSource: 26094065! ----STARTUP----an Array(7 November 2013 9:30:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 9:30:34 pm) Pharo-30554.image priorSource: 26113931! ----STARTUP----an Array(7 November 2013 10:02:35 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/7/2013 21:52' prior: 76426022! commentForCurrentUpdate ^ '- Issue 11222: Date readFrom:pattern: (year 2 decimals not 20xx but 00xx) https://pharo.fogbugz.com/f/cases/11222 - Issue 12101: Selecting a package in the Monticello browser https://pharo.fogbugz.com/f/cases/12101 - Issue 12095: Behavior of image save inconsistent with regards to file extension https://pharo.fogbugz.com/f/cases/12095'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/7/2013 21:52'! script211 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.24.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-StephaneDucasse.1677.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.62.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.19.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.128.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-StephaneDucasse.262.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-StephaneDucasse.589.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-StephaneDucasse.134.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.60.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.965.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.198.mcz Spec-Debugger-StephaneDucasse.173.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.119.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.38.mcz Spec-PolyWidgets-MarcusDenker.11.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-StephaneDucasse.160.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1350.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/7/2013 21:55'! update30555 "self new update30555" self withUpdateLog: '- Issue 11222: Date readFrom:pattern: (year 2 decimals not 20xx but 00xx) https://pharo.fogbugz.com/f/cases/11222 - Issue 12101: Selecting a package in the Monticello browser https://pharo.fogbugz.com/f/cases/12101 - Issue 12095: Behavior of image save inconsistent with regards to file extension https://pharo.fogbugz.com/f/cases/12095'. self loadTogether: self script211 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateParser commentStamp: '' prior: 0! Read a Date from the stream based on the pattern which can include the tokens: y = A year with 1-n digits yy = A year with 2 digits yyyy = A year with 4 digits m = A month with 1-n digits mm = A month with 2 digits d = A day with 1-n digits dd = A day with 2 digits ...and any other Strings inbetween. Representing $y, $m and $d is done using \y, \m and \d and slash itself with \\. Simple example patterns: 'yyyy-mm-dd' 'yyyymmdd' 'yy.mm.dd' 'y-m-d' A year given using only two decimals is considered to be >2000.! !KMShortcutHandler commentStamp: '' prior: 0! I am a shortcut handler that installs keymappings in the system.! !MorphicShortcutHandler commentStamp: '' prior: 0! I am a null shortcut handler for morphic. I register myself as a tool to be replaced by somebody else who really wants to handle shortcuts.! !Date class methodsFor: 'importing' stamp: 'HernanWilkinson 11/7/2013 11:09' prior: 49330039! readFrom: aStream "Read a Date from the stream in any of the forms: (15 April 1982; 15-APR-82; 15.4.82; 15APR82) (April 15, 1982; 4/15/82) -- (1982-04-15) (ISO8601)" | day month year parsedNumber prefix | aStream peek = $- ifTrue: [prefix := -1] ifFalse: [prefix := 1]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isDigit ifTrue: [ parsedNumber := (Integer readFrom: aStream) * prefix. (parsedNumber < 0 or: [parsedNumber > 31]) ifTrue: [year := parsedNumber]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. aStream peek isLetter ifTrue: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" month := (String new: 10) writeStream. [aStream peek isLetter] whileTrue: [month nextPut: aStream next]. month := month contents. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. parsedNumber ifNil: ["MM DD YY" day := Integer readFrom: aStream] ifNotNil: [ year ifNil: ["DD MM YY" day := parsedNumber]]] ifFalse: ["MM-DD-YY or DD-MM-YY or YY-MM-DD" year ifNil: ["MM-DD-YY or DD-MM-YY" parsedNumber > 12 ifTrue: ["DD-MM-YY" Error signal: 'Month out of bounds: ', parsedNumber asString, '.'. day := parsedNumber. month := Month nameOfMonth: (Integer readFrom: aStream) ] ifFalse: ["MM-DD-YY" month := Month nameOfMonth: parsedNumber. day := Integer readFrom: aStream]] ifNotNil: ["YY-MM-DD" month := Month nameOfMonth: (Integer readFrom: aStream)]]. [aStream peek isAlphaNumeric] whileFalse: [aStream skip: 1]. year ifNil: [year := Integer readFrom: aStream] ifNotNil: [day := Integer readFrom: aStream]. (year < 100 and: [year >= 0]) ifTrue: [ year < 69 ifTrue: [year := 2000 + year] ifFalse: [year := 1900 + year]]. ^ self year: year month: month day: day ! ! !Date class methodsFor: 'importing' stamp: 'HernanWilkinson 11/7/2013 14:24' prior: 20330938! readFrom: inputStream pattern: pattern "See DateParser comment" ^ (DateParser readingFrom: inputStream pattern: pattern) parse ! ! !DateParser commentStamp: '' prior: 76457769! Read a Date from the stream based on the pattern which can include the tokens: y = A year with 1-n digits yy = A year with 2 digits yyyy = A year with 4 digits m = A month with 1-n digits mm = A month with 2 digits d = A day with 1-n digits dd = A day with 2 digits ...and any other Strings inbetween. Representing $y, $m and $d is done using \y, \m and \d and slash itself with \\. Simple example patterns: 'yyyy-mm-dd' 'yyyymmdd' 'yy.mm.dd' 'y-m-d' A year given using only two decimals is considered to be >2000.! !DateParser class methodsFor: 'instance creation' stamp: 'HernanWilkinson 11/7/2013 14:23'! readingFrom: anInputStream pattern: aPattern "See class comment for pattern description self comment" ^self new initializeReadingFrom: anInputStream pattern: aPattern ! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! convertTwoDigitsYear (year between: 0 and: 99) ifTrue: [ year := 2000 + year ]! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! createDate ^ Date year: year month: month day: day! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:24'! initializeParsing invalidPattern := false. patternStream := pattern readStream! ! !DateParser methodsFor: 'initialization' stamp: 'HernanWilkinson 11/7/2013 13:23'! initializeReadingFrom: anInputStream pattern: aPattern inputStream := anInputStream. pattern := aPattern. ! ! !DateParser methodsFor: 'parsing day - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! isDayPattern ^ char = $d! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 12:29'! isDoneParsing ^ patternStream atEnd or: [ inputStream atEnd or: [ invalidPattern ]]! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! isEscape ^ char = $\! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:26'! isFourDigitYearPattern ^ patternStream nextMatchAll: 'yyy'! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 12:32'! isInvalidPattern ^ year isNil or: [ month isNil or: [ day isNil or: [ invalidPattern ]]]! ! !DateParser methodsFor: 'parsing month - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! isMonthPattern ^ char = $m! ! !DateParser methodsFor: 'parsing day - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! isTwoDigitDayPattern ^ patternStream peekFor: $d! ! !DateParser methodsFor: 'parsing month - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! isTwoDigitMonthPattern ^ patternStream peekFor: $m! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:26'! isTwoDigitYearPattern ^ patternStream peekFor: $y! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:26'! isYearPattern ^ char = $y! ! !DateParser methodsFor: 'parsing' stamp: 'HernanWilkinson 11/7/2013 13:24'! parse self initializeParsing. [ self isDoneParsing ] whileFalse: [ self parseNextPattern ]. self isInvalidPattern ifTrue: [ ^ nil ]. self convertTwoDigitsYear. ^ self createDate! ! !DateParser methodsFor: 'parsing day - private' stamp: 'HernanWilkinson 11/7/2013 14:26'! parseDay self isTwoDigitDayPattern ifTrue: [ ^ self parseTwoDigitDay ]. self parseVariableDigitDay! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:02'! parseEscapePattern inputStream next = patternStream next ifFalse: [ invalidPattern := true ]! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:07'! parseFourDigitYear year := (inputStream next: 4) asInteger! ! !DateParser methodsFor: 'parsing month - private' stamp: 'HernanWilkinson 11/7/2013 13:11'! parseMonth self isTwoDigitMonthPattern ifTrue: [ ^self parseTwoDigitMonth ]. self parseVariableDigitMonth ! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:02'! parseNextPattern self readNextChar. self isEscape ifTrue: [ ^ self parseEscapePattern ]. self isYearPattern ifTrue: [ ^ self parseYear ]. self isMonthPattern ifTrue: [ ^ self parseMonth ]. self isDayPattern ifTrue: [ ^ self parseDay ]. self parseSameChar! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! parseSameChar inputStream next = char ifFalse: [ invalidPattern := true ]! ! !DateParser methodsFor: 'parsing day - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! parseTwoDigitDay day := (inputStream next: 2) asInteger! ! !DateParser methodsFor: 'parsing month - private' stamp: 'HernanWilkinson 11/7/2013 13:26'! parseTwoDigitMonth month := (inputStream next: 2) asInteger! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:07'! parseTwoDigitYear year := (inputStream next: 2) asInteger! ! !DateParser methodsFor: 'parsing day - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! parseVariableDigitDay day := Integer readFrom: inputStream! ! !DateParser methodsFor: 'parsing month - private' stamp: 'HernanWilkinson 11/7/2013 13:26'! parseVariableDigitMonth month := Integer readFrom: inputStream! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:07'! parseVariableDigitYear year := Integer readFrom: inputStream! ! !DateParser methodsFor: 'parsing year - private' stamp: 'HernanWilkinson 11/7/2013 13:07'! parseYear self isFourDigitYearPattern ifTrue: [ ^ self parseFourDigitYear ]. self isTwoDigitYearPattern ifTrue: [ ^ self parseTwoDigitYear ]. self parseVariableDigitYear! ! !DateParser methodsFor: 'parsing - private' stamp: 'HernanWilkinson 11/7/2013 13:25'! readNextChar char := patternStream next! ! !KMShortcutHandler commentStamp: '' prior: 76458375! I am a shortcut handler that installs keymappings in the system.! !KMShortcutHandler class methodsFor: 'tools' stamp: 'GuillermoPolito 11/7/2013 16:59'! registerToolsOn: aToolRegistry aToolRegistry register: self new as: #shortcuts! ! !KMShortcutHandler methodsFor: 'shortcut-handling' stamp: 'GuillermoPolito 11/7/2013 16:52'! handleKeystroke: aKeystrokeEvent inMorph: aMorph aMorph handleKeystrokeWithKeymappings: aKeystrokeEvent! ! !MorphicShortcutHandler commentStamp: '' prior: 76458504! I am a null shortcut handler for morphic. I register myself as a tool to be replaced by somebody else who really wants to handle shortcuts.! !MorphicShortcutHandler class methodsFor: 'tools' stamp: 'GuillermoPolito 11/7/2013 16:58'! registerToolsOn: aToolRegistry aToolRegistry register: self new as: #shortcuts! ! !MorphicShortcutHandler methodsFor: 'shortcut-handling' stamp: 'GuillermoPolito 11/7/2013 16:47'! handleKeystroke: aKeystrokeEvent inMorph: aMorph "I do nothing. I'm a null object"! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'SqR 11/7/2013 07:07' prior: 33524196! fileForChangesNamed: aString ^(self imageDirectory resolve: aString), self changesSuffix! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'SqR 11/7/2013 07:07' prior: 33524378! fileForImageNamed: aString ^(self imageDirectory resolve: aString), self imageSuffix! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'SqR 11/7/2013 07:07' prior: 33524558! fullNameForChangesNamed: aString ^(self fileForChangesNamed: aString) fullName! ! !SmalltalkImage methodsFor: 'image, changes names' stamp: 'SqR 11/7/2013 07:07' prior: 33524728! fullNameForImageNamed: aString ^(self fileForImageNamed: aString) fullName! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'SqR 11/7/2013 07:29' prior: 33551023! getFileNameFromUser | givenName strippedName imageFile changesFile | givenName := UIManager default request: 'New File Name?' translated initialAnswer: (self imageFile basename copyUpToLast: Path extensionDelimiter). strippedName := self stripImageExtensionFrom: givenName. strippedName isEmptyOrNil ifTrue: [^nil]. imageFile := self fileForImageNamed: strippedName. changesFile := self fileForChangesNamed: strippedName. ((imageFile exists or: [changesFile exists]) and: [(self confirm: ('{1} already exists. Overwrite?' translated format: {strippedName})) not]) ifTrue: [^nil]. ^strippedName! ! !SmalltalkImage methodsFor: 'saving' stamp: 'SqR 11/7/2013 06:53' prior: 33543713! saveAs "Put up the 'saveAs' prompt, obtain a name, and save the image under that new name." self saveAs: self getFileNameFromUser! ! !SmalltalkImage methodsFor: 'saving' stamp: 'SqR 11/7/2013 07:01' prior: 33544435! saveAsNewVersion "Save the image/changes using the next available version number." "SmalltalkImage current saveAsNewVersion" | newImageFile newChangesFile strippedName | newImageFile := self imageFile nextVersion. newChangesFile := newImageFile withExtension: self changesSuffix. newChangesFile exists ifTrue: [^self inform: 'There is already .changes file of the desired name, ', newChangesFile fullName, ' curiously already present, even though there is no corresponding .', self imageSuffix,' file. Please remedy manually and then repeat your request.']. strippedName := self stripImageExtensionFrom: newImageFile fullName. ^self saveAs: strippedName! ! !SmalltalkImage methodsFor: 'saving' stamp: 'SqR 11/7/2013 07:38'! stripImageExtensionFrom: aString | answer imageExtension delimitedImageExtension | answer := aString. imageExtension := Path extensionDelimiter asString, self imageSuffix. delimitedImageExtension := imageExtension copyWith: Path extensionDelimiter. [(answer endsWith: imageExtension) or: [answer endsWith: delimitedImageExtension]] whileTrue: [answer := answer copyUpToLast: Path extensionDelimiter]. ^answer! ! !Morph methodsFor: 'event handling' stamp: 'GuillermoPolito 11/7/2013 16:57' prior: 26586180! handleKeystroke: anEvent "System level event handling." anEvent wasHandled ifTrue: [^ self]. Smalltalk tools shortcuts handleKeystroke: anEvent inMorph: self. anEvent wasHandled ifTrue: [^ self]. (self handlesKeyStroke: anEvent) ifFalse: [^ self]. anEvent wasHandled: true. self keyStroke: anEvent. ^ self eventHandler ifNotNil: [:handler | handler keyStroke: anEvent fromMorph: self ].! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'GuillermoPolito 11/7/2013 16:52'! handleKeystrokeWithKeymappings: aKeystrokeEvent self allowsKeymapping ifTrue: [ self dispatchKeystrokeForEvent: aKeystrokeEvent. ].! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:48'! assertReading: aString as: aPattern equals: aDate self assert: (self dateClass readFrom: aString readStream pattern: aPattern) equals: aDate ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:48'! testEscapePatternCanBeAnywhere self assertReading: '4.b2.c2345' as: 'd.\bm.\cy' equals: (Date year: 2345 month: 2 day: 4). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:49'! testReadFromPatternAcceptsSameCharsInPatternAndInput self assertReading: 'a4.2.2345' as: 'ad.m.y' equals: (Date year: 2345 month: 2 day: 4). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:50'! testReadFromPatternRecognizesCorrectlyTheDDPattern | pattern | pattern := 'dd.mm.yyyy'. self assertReading: '4.02.2345' as: pattern equals: nil. self assertReading: '14.12.2345' as: pattern equals: (Date year: 2345 month: 12 day: 14). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:50'! testReadFromPatternRecognizesCorrectlyTheDPattern | pattern | pattern := 'd.mm.yyyy'. self assertReading: '4.02.2345' as: pattern equals: (Date year: 2345 month: 2 day: 4). self assertReading: '14.12.2345' as: pattern equals: (Date year: 2345 month: 12 day: 14). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:51'! testReadFromPatternRecognizesCorrectlyTheMMPattern | pattern | pattern := 'd.mm.yyyy'. self assertReading: '4.02.2345' as: pattern equals: (Date year: 2345 month: 2 day: 4). self assertReading: '4.12.2345' as: pattern equals: (Date year: 2345 month: 12 day: 4). self assertReading: '4.2.2345' as: pattern equals: nil ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:52'! testReadFromPatternRecognizesCorrectlyTheMPattern | pattern | pattern := 'd.m.yyyy'. self assertReading: '4.2.2345' as: pattern equals: (Date year: 2345 month: 2 day: 4). self assertReading: '4.12.2345' as: pattern equals: (Date year: 2345 month: 12 day: 4). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:53'! testReadFromPatternRecognizesCorrectlyTheYPattern | pattern | pattern := 'd.m.y'. self assertReading: '4.2.3113' as: pattern equals: (Date year: 3113 month: 2 day: 4). self assertReading: '4.2.113' as: pattern equals: (Date year: 113 month: 2 day: 4). self assertReading: '4.2.13' as: pattern equals: (Date year: 2013 month: 2 day: 4)! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:54'! testReadFromPatternRecognizesCorrectlyTheYYPattern | pattern | pattern := 'd.m.yy'. self assertReading: '4.2.3113' as: pattern equals: (Date year: 2031 month: 2 day: 4). self assertReading: '4.2.13' as: pattern equals: (Date year: 2013 month: 2 day: 4). self assertReading: '4.2.1' as: pattern equals: (Date year: 2001 month: 2 day: 4)! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:54'! testReadFromPatternRecognizesCorrectlyTheYYYYPattern | pattern | pattern := 'd.m.yyyy'. self assertReading: '4.2.2345' as: pattern equals: (Date year: 2345 month: 2 day: 4). self assertReading: '4.2.234' as: pattern equals: (Date year: 234 month: 2 day: 4). self assertReading: '4.2.23' as: pattern equals: (Date year: 2023 month: 2 day: 4)! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:55'! testReadFromPatternRecognizesScapePattern self assertReading: 'a4.2.2345' as: '\ad.m.y' equals: (Date year: 2345 month: 2 day: 4). ! ! !DateTest methodsFor: 'tests - readFrom:pattern:' stamp: 'HernanWilkinson 11/7/2013 14:55'! testReadFromPatternReturnsNilWhenScapePatternIsNotFollowed self assertReading: 'b4.2.2345' as: '\ad.m.y' equals: nil! ! "Kernel"! "KernelTests"! "Keymapping-Core"! "Morphic-Core"! "System-Support"! ----End fileIn----! ----QUIT----an Array(7 November 2013 10:02:45 pm) Pharo.image priorSource: 26114136! ----STARTUP----an Array(7 November 2013 10:07:25 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(7 November 2013 10:07:26 pm) Pharo-30555.image priorSource: 26143906! ----STARTUP----an Array(8 November 2013 10:23:37 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/8/2013 10:17' prior: 76446094! commentForCurrentUpdate ^ '11920 NewValueHolder should use value instead of contents https://pharo.fogbugz.com/f/cases/11920 12110 MNU: ToolRegistry>>shortcuts https://pharo.fogbugz.com/f/cases/12110'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/8/2013 10:18'! script212 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.25.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.122.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-StephaneDucasse.ducasse.332.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-StephaneDucasse.1677.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-StephaneDucasse.262.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.135.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.62.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.967.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.199.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.121.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.39.mcz Spec-PolyWidgets-MarcusDenker.14.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.161.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1350.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/8/2013 10:20'! update30556 "self new update30556" self withUpdateLog: '11920 NewValueHolder should use value instead of contents https://pharo.fogbugz.com/f/cases/11920 12110 MNU: ToolRegistry>>shortcuts https://pharo.fogbugz.com/f/cases/12110'. self loadTogether: self script212 merge: false. KMShortcutHandler registerToolsOn: Smalltalk tools. self flushCaches. ! ! "ScriptLoader30"! !MenuGroupModel commentStamp: '' prior: 0! I am a group of menu items. I am part of a menu, and groups items by meaning! !MenuItemModel commentStamp: '' prior: 0! I represent a menu item. I have a name, a description, an icon, a shortcut, and an action to perform (aBlock). I can also have a sub menu. (and usually I do NOT have an action AND a sub menu)! !MenuModel commentStamp: '' prior: 0! I am a simple model describing a menu. I only contains a list of menu groups. Each group is separated by a splitter! !ValueChanged commentStamp: '' prior: 42776575! A ValueChanged is an announcement raised when a value of a NewValueHolder is changed! !NewValueHolder commentStamp: '' prior: 42505778! A NewValueHolder is a new implementation of ValueHolder based on Announcements! !SpecDebugger methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69329968! label ^ labelHolder value! ! !SpecDebugger methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69330093! label: aString labelHolder value: aString! ! !SpecDebugger methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69330624! session ^ sessionHolder value! ! !SpecDebugger methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69330753! session: aSession sessionHolder value: aSession ! ! !PermissionsEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 29278028! initializeDialogWindow: aWindow aWindow okAction: [ user value ifNotNil: [ :usr | usr canBrowse: canBrowse state. usr canDebug: canDebug state. usr canDropOSFile: canDropOSFile state. usr canEditCode: canEditCode state. usr canEditUser: canEditUser state. usr canEvaluateCode: canEvaluateCode state. usr canInspect: canInspect state. usr canRunStartupScript: canRunStartupScript state. usr canShowMorphHalo: canShowMorphHalo state ] ]! ! !PermissionsEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 29283429! title ^ user value ifNil: 'Permissions editor' ifNotNil: [:usr | 'Editing ', usr username, '''s permissions' ]! ! !PermissionsEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 29283062! user ^ user value! ! !PermissionsEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 29283177! user: anUser ^ user value: anUser! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 45952070! debugger ^ debugger value! ! !SpecPreDebugWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 45952185! debugger: anOnject debugger value: anOnject! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69597064! roots: aCollection roots value: aCollection. tree roots: aCollection! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69571920! initializePresenter input whenTextIsAccepted: [:text | self ok == false ifFalse: [ value value: text ] ]. title whenChangedDo: [ self updateTitle ]! ! !InputWidget methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69572901! ok input accept. ^ okAction value value! ! !InputWidget methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69573055! title ^ title value! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69573181! title: aString title value: aString! ! !InputWidget methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69573494! value ^ value value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69436557! contextClass ^ contextClassHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69436693! contextClass: anObject contextClassHolder value: anObject ! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69437624! leftText ^ leftTextHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69437759! leftText: anObject leftTextHolder value: anObject ! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69437913! rightText ^ rightTextHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69438050! rightText: anObject rightTextHolder value: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69438200! showOptions ^ showOptions value! ! !DiffModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69438328! showOptions: aBoolean showOptions value: aBoolean! ! !ContainerModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69784117! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ keyStrokesForNextFocusHolder value! ! !ContainerModel methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69784359! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ keyStrokesForPreviousFocusHolder value! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 68600082! basicInspector: anEyeInspector inspector value ifNotNil: [ :inspect | inspect owner: nil ]. inspector value: anEyeInspector. anEyeInspector owner: self; ownerChanged.! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 68604356! inspector ^ inspector value! ! !RBBrowserEnvironment methodsFor: '*Nautilus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:01'! browse ^ Smalltalk tools browser openInEnvironment: self! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38030964! aboutText ^ aboutText value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 38031086! aboutText: aString aboutText value: aString! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 19988501! additionalKeyBindings ^ additionalKeyBindings value! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 19977230! announcer ^ announcer value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38739567! askOkToClose ^ askOkToClose value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 38739695! askOkToClose: aBoolean askOkToClose value: aBoolean! ! !ComposableModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38512613! delete self widget ifNotNil: [:widget | window value ifNil: [ widget delete ] ifNotNil: [:o | o delete ]]! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 36856377! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ keyStrokesForNextFocusHolder value! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 36856614! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ keyStrokesForPreviousFocusHolder value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 19983263! extent ^ extentHolder value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 19983387! extent: aPoint ^ extentHolder value: aPoint! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 36857619! keyStrokeForNextFocus: aKMShortcut keyStrokesForNextFocusHolder value: { aKMShortcut }! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 36857821! keyStrokeForPreviousFocus: aKMShortcut keyStrokesForPreviousFocusHolder value: { aKMShortcut }! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 36858015! keyStrokesForNextFocus: aCollection keyStrokesForNextFocusHolder value: aCollection! ! !ComposableModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 36858198! keyStrokesForPreviousFocus: aCollection keyStrokesForPreviousFocusHolder value: aCollection ! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 19977620! needRebuild ^ needRebuild value! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 19977747! needRebuild: aBoolean needRebuild value: aBoolean! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 38514477! openDialogWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window value notNil and: [ self needRebuild not ]) ifTrue: [ window value rebuildWithSpec: aSpec ] ifFalse: [ window value: (DialogWindowModel new model: self). window value openWithSpecLayout: aSpec. self initializeDialogWindow: window value. window value updateTitle. self takeKeyboardFocus ]. ^ window value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69561918! openWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into a window" (window value notNil and: [ self needRebuild not ]) ifTrue: [ window value rebuildWithSpecLayout: aSpec ] ifFalse: [ window value: (WindowModel new model: self). window value openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window value! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69562989! openWorldWithSpecLayout: aSpec "Build the widget using the spec name provided as argument and display it into the world" (window value notNil and: [ self needRebuild not ]) ifTrue: [ window value rebuildWithSpecLayout: aSpec ] ifFalse: [ window value: (WorldModel new model: self). window value openWithSpecLayout: aSpec. self takeKeyboardFocus ]. ^ window value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69563496! title "Return the window's title" ^ titleHolder value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69563645! title: aString titleHolder value: aString! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38515993! window ^ window value ifNil: [ owner ifNil: [ nil ] ifNotNil: [:o | o window ]]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38167512! windowIcon ^ windowIcon value! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 38167636! windowIcon: aForm windowIcon value: aForm! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69496939! absoluteValue "Return the position of the slider in a scale between 0 and 1 despite of the min and max value" ^ absoluteValue value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69497194! absoluteValue: aFloat "Set the position of the slider in a scale between 0 and 1 despite of the min and max value" absoluteValue value: aFloat! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69498822! label "Return the label of the slider" ^ labelHolder value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69499005! label: aString "Set the label of the slider" labelHolder value: aString! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69499249! max "Return the maximun value" ^ max value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69499417! max: anObject "Set the maximun value" max value: anObject! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69499658! min "Return the minimum value" ^ min value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69499826! min: anObject "Set the minimum value" min value: anObject! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69500067! quantum "Return the quantum betwen values" ^ quantum value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69500250! quantum: aNumber "Set the quantum betwen values" quantum value: aNumber! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69500700! value "Return the current value in a range between min and max" ^ value value! ! !SliderModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69500902! value: aNumber "Set the value in a range between min and max" value value == aNumber ifTrue: [ ^ self ]. value value: aNumber.! ! !KMDescription methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 24132108! categories: aCollectionOfSymbols | cats | cats := aCollectionOfSymbols collect: [:e | KMRepository default categoryForName: e]. categories value: cats! ! !KMDescription methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 24131029! initializePresenter displayList whenSelectedItemChanged: [ updatingBlock value: categories value ]. categories whenChangedDo: [:col | updatingBlock value: col ]. okToolbar okAction: [ self delete ].! ! !MultiColumnListModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69469599! setIndex: anIndex self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. selectionHolder index value: anIndex. selectionHolder selection value: (self listItems at: anIndex ifAbsent: [ nil ]).! ! !MultiColumnListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69469935! setSelectedIndex: anIndex "Set the index of the item you want to be selected" | idx selection | self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. self listSize isZero ifTrue: [ ^self ]. idx := anIndex min: self listSize. selection := self listItems at: idx ifAbsent: [ idx := 0. nil ]. selectionHolder index value: idx. selectionHolder selection value: selection.! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28399258! doubleClickSelector ^ doubleClickSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28399401! doubleClickSelector: anObject doubleClickSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28399562! dragItemSelector ^ dragItemSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28399699! dragItemSelector: anObject dragItemSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28399855! dropItemSelector ^ dropItemSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28399992! dropItemSelector: anObject dropItemSelector value: anObject! ! !NewListAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 36221074! endOfInitialization getItemsSelector whenChangedDo: [:e | self list updateItems ]. setIndexSelector value ifNotNil: [:s | self list whenSelectedIndexChangedDo: [:a :b :c :d | self model perform: s withEnoughArguments: {a. b. c. d } ]]. getHeaderTitleSelector whenChangedDo: [:s | self list hasHeader: (s notNil) ]. self list endOfInitialization! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28400598! getDisplaySelector ^ getDisplaySelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28400740! getDisplaySelector: anObject getDisplaySelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28400899! getHeaderTitleSelector ^ getHeaderTitleSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28401049! getHeaderTitleSelector: anObject getHeaderTitleSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28401216! getIconMaxSizeSelector ^ getIconMaxSizeSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28401366! getIconMaxSizeSelector: anObject getIconMaxSizeSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28401533! getIconSelector ^ getIconSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28401668! getIconSelector: anObject getIconSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28401821! getIndexSelector ^ getIndexSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28401958! getIndexSelector: anObject getIndexSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28402113! getIndexesSelector ^ getIndexesSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28402255! getIndexesSelector: aSelector getIndexesSelector value: aSelector! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28402417! getItemAtIndexSelector ^ getItemAtIndexSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28402567! getItemAtIndexSelector: aSelector getItemAtIndexSelector value: aSelector! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28402737! getItemsSelector ^ getItemsSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28402874! getItemsSelector: anObject getItemsSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28403029! getListSizeSelector ^ getListSizeSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28403173! getListSizeSelector: aSelector getListSizeSelector value: aSelector! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28403337! getMenuSelector ^ getMenuSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28403472! getMenuSelector: aSelector getMenuSelector value: aSelector! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28403628! getMenuTitleSelector ^ getMenuTitleSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28403775! getMenuTitleSelector: anObject getMenuTitleSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28403938! keyStrokeSelector ^ keyStrokeSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28404079! keyStrokeSelector: anObject keyStrokeSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28404236! list ^ list value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28404349! list: anObject list value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28404480! model ^ model value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28404596! model: anObject model value ifNotNil: [:m | m removeDependent: self ]. anObject ifNotNil: [anObject addDependent: self ]. model value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 49792375! separatorSelector ^ separatorSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 49792512! separatorSelector: anObject separatorSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28404843! setIndexSelector ^ setIndexSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28404980! setIndexSelector: anObject setIndexSelector value: anObject! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34'! value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:34' prior: 28405135! wantsDropSelector ^ wantsDropSelector value! ! !NewListAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:35' prior: 28405274! wantsDropSelector: anObject wantsDropSelector value: anObject! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69550500! initialExtent ^ initialExtent value ifNil: [ self model ifNil: [ self defaultInitialExtent ] ifNotNil: [:m | m initialExtent ifNil: [ self defaultInitialExtent ]]]! ! !WindowModel methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69551117! isClosed ^ isClosedHolder value! ! !WindowModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69551391! model ^ model value! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69551518! model: aModel model value: aModel! ! !WindowModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69551961! openWithSpecLayout: aSpec window value: (self buildWithSpecLayout: aSpec). self changed: #open with: #(). self updateTitle.! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69552552! taskbarIcon ^ model value ifNil: [ super taskbarIcon ] ifNotNil: [ :m | m windowIcon ifNil: [ m taskbarIcon ] ]! ! !WindowModel methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69553654! windowIsClosing isClosedHolder value: true! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 51347433! addUser | user editor w userName newPassword | userName := self askName. (self isValidUsername: userName) ifFalse: [ UIManager default inform: 'Username invalid.'. ^self ]. user := PharoUser username: userName. user unlock ifFalse: [ ^ self ]. w := PasswordInitializationDialogWindow new. self window openModal: w. newPassword := w enteredValue. newPassword ifNil: [ ^ self ]. user setPassword: newPassword. editor := UserEditor new user: user ; openDialogWithSpec; yourself. self window openModal: editor window window. usersManager value addUser: user. users setSelectedItem: user username.! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 51348356! editUser | user editor | (user := selectedUser value) ifNil: [ ^ self ]. usersManager value ifNil: [ user unlock ifFalse: [ ^ self ]] ifNotNil: [:uM | uM currentUser canEditUser ifFalse: [ user unlock ifFalse: [ ^ self ]]]. editor := UserEditor new user: user; usersManager: usersManager value; openDialogWithSpec; yourself. self window openModal: editor window window. usersManager valueChanged! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 51349190! ok selectedUser value ifNotNil: [:user | user unlock ifFalse: [ ^ false ]. usersManager value setCurrentUser: user. user lock ]! ! !SwitchUsers methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 51346053! registerUsersEvents users whenSelectedItemChanged: [ :item | (usersManager value isNil or: [ item isNil ]) ifTrue: [ remove enabled: false ] ifFalse: [ | um isRoot uMUsers | um := usersManager value. uMUsers := um users. isRoot := um currentUser canEditUser. remove enabled: ((item label ~= um currentUser username) and: [(item notNil and: [ isRoot and: [ uMUsers size >1 ]]) and: [ ((uMUsers detect: [:e | e username = item label ]) canEditUser ifTrue: [ (uMUsers reject: [:e | e username = item label ]) anySatisfy: [:e | e canEditUser ]] ifFalse: [ true ])]])]. edit enabled: item notNil ]! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 51349414! removeUser | user confirm | (user := selectedUser value) ifNil: [ ^ self ]. confirm := UIManager default confirm: 'Are you sure you want to delete ', user username asString, '''s profile?' label: 'Delete'. confirm ifFalse: [ ^ self ]. usersManager value removeUser: user. usersManager valueChanged! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 51349810! setCurrentUser: anUser | mh | selectedUser value: anUser. container removeAllMorphs. mh := anUser ifNil: [ ImageMorph new ] ifNotNil: [:user | user avatar copy ]. container addMorph: mh fullFrame: LayoutFrame identity! ! !SwitchUsers methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 51347210! usersManager: anUsersManager usersManager value: anUsersManager. anUsersManager users whenChangedDo: [ usersManager valueChanged ]! ! !DictionaryValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20813474! at: anObject ^ value at: anObject! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:57' prior: 20813869! at: key put: anObject value at: key put: anObject. self valueChanged: anObject. ^ anObject! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20814009! atNewIndex: index put: anObject value atNewIndex: index put: anObject. self valueChanged: anObject.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20814170! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:26' prior: 45573662! initialize super initialize. self value: Dictionary new.! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 48963290! initialize: n value initialize: n. self valueChanged.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20814854! removeAll value removeAll. self valueChanged.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20815175! removeKey: key ifAbsent: aBlock | result | result := value removeKey: key ifAbsent: aBlock. self valueChanged. ^ result! ! !DictionaryValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20813564! size ^ value size! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 20815359! valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary value valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary. self valueChanged.! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69429243! activationAction: aBlock "This method is used to set the action to perform when I am activated" actionWhenActivatedHolder value: aBlock! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69429789! desactivationAction: aBlock "This method is used to set the action to perform when I am desactivated" actionWhenDesactivatedHolder value: aBlock! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69430134! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder value ifFalse: actionWhenDesactivatedHolder value. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69430865! label ^ labelHolder value! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69431015! label: aString "Set the label of the checkbox" labelHolder value: aString.! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69431263! labelClickable "Return true if the label can be clicked to select the checkbox" ^ labelClickableHolder value! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69431498! labelClickable: aBoolean "Set if the label can be clicked to select the checkbox" labelClickableHolder value: aBoolean! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69431810! state "Return the current state of the checkBox" ^ stateHolder value! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69432006! state: aBoolean "Set if the checkbox is activated or not" stateHolder value: aBoolean! ! !SubwidgetItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 51337839! model ^ model value! ! !SubwidgetItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 51337953! model: anObject model value: anObject! ! !SubwidgetItem methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 51339536! validated ^ validated value! ! !SubwidgetItem methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 51341987! validated: aBoolean validated value: aBoolean! ! !MessageBrowser methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 25583205! highlightSearchedString: string | searchedString interval firstIndex | searchedString := searchedStringHolder value. searchedString ifNil: [ ^ 0 to: 0 ]. (searchedString includes: $:) ifTrue: [ | list | list := searchedString subStrings: ':'. list size = 1 ifTrue: [" binary selector " firstIndex := string findString: searchedString. interval := firstIndex to: (firstIndex+searchedString size-1)] ifFalse: [| lastIndex | firstIndex := string findString: list first,':'. lastIndex := string findString: list last,':' startingAt: firstIndex+ (list first size -1). interval := firstIndex to: (lastIndex + list last size)]] ifFalse: [ " unary selector " firstIndex := string findString: searchedString. interval := firstIndex to: (firstIndex+searchedString size-1)]. ^ interval! ! !MessageBrowser methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 44999645! methodAdded: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement method. (refreshingBlockHolder value cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. UIManager default defer: [ | sel text boolean | boolean := textModel hasUnacceptedEdits. boolean ifTrue: [ text := textModel pendingText ]. sel := listModel selectedItem. self messages: (listModel listItems add: item; yourself). listModel setSelectedItem: sel. boolean ifTrue: [ textModel pendingText: text ] ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 45000327! methodModified: anAnnouncement | item oldItem sel index | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement newMethod. oldItem := anAnnouncement oldMethod. sel := listModel selectedItem. sel ifNil: [ ^ self ]. (sel notNil and: [(sel methodClass = oldItem methodClass and: [ sel selector = oldItem selector ])]) ifFalse: [ ^ self ]. (refreshingBlockHolder value cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. index := listModel selectedIndex . UIManager default defer: [ | text list edits | edits := textModel hasUnacceptedEdits. edits ifTrue: [ text := textModel pendingText ]. list := listModel listItems remove: sel ifAbsent: []; add: item asRingDefinition; "to ensure it's still as RGMethod" yourself. self messages: list. listModel setSelectedIndex: index. edits ifTrue: [ textModel pendingText: text. textModel hasEditingConflicts: true ]. ]! ! !MessageBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 25577090! refreshingBlock: aBlock refreshingBlockHolder value: aBlock! ! !MessageBrowser methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 25568122! textConverter ^ textConverterHolder value! ! !MessageBrowser methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 25568260! textConverter: aTextConverter textConverterHolder value: (aTextConverter method: self textConverter method). textModel aboutToStyle: self textConverter shouldShout . textModel text: self textConverter getText.! ! !MessageBrowser methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 25584649! title ^ titleHolder value , ' [' , listModel listSize printString , ']'! ! !MessageBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 25578373! title: aString titleHolder value: aString.! ! !MessageBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 25578510! topologicSort ^ topologicSortHolder value! ! !MessageBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 25578647! topologicSort: aBoolean ^ topologicSortHolder value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69532410! allowMenuOnNoItem ^ allowMenuOnNoItem value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69532550! allowMenuOnNoItem: aBoolean allowMenuOnNoItem value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69532716! autoDeselection ^ autoDeselection value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69532860! autoDeselection: aBoolean autoDeselection value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69533022! autoMultiSelection ^ autoMultiSelection value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69533172! autoMultiSelection: aBoolean autoMultiSelection value: aBoolean! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69533490! childrenBlock < api: #inspect> "Return the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" ^ childrenBlockHolder value! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69533790! childrenBlock: aBlock < api: #block getter: #childrenBlock registration: #whenChildrenBlockChanged:> "Set the block used to retrieve the children of a node. The optional block arguments are: - the node - the tree" childrenBlockHolder value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69534149! childrenFor: anItem ^ childrenBlockHolder value cull: anItem cull: self! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69534325! columnInset ^ columnInset value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69534461! columnInset: anInteger columnInset value: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69534617! columns ^ columns value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69534746! columns: aCollection columns value: aCollection! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69534913! displayBlock < api: #inspect> "Return the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" ^ displayBlock value! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69535207! displayBlock: aBlock < api: #block getter: #displayBlock registration: #whenDisplayBlockChanged:> "Set the block used to generate the display of the items. The optioanl block arguments are: - the item - the tree" displayBlock value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69535558! doubleClick doubleClick value value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69535698! doubleClick: aBlock doubleClick value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69535848! evenRowColor ^ evenRowColor value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69535986! evenRowColor: aColor evenRowColor value: aColor! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 74083352! hasSelectedItem < api: #inspect> "Return true if the tree contains any selected items" ^ selectionHolder value isNotEmpty! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69536908! iconBlock: aBlock iconBlock value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69537054! iconFor: aNode ^ iconBlock value cull: aNode! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69538583! isCheckList ^ isCheckList value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69538719! isCheckList: aBoolean isCheckList value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69538873! keyStroke: aKeyStroke keyStroke value cull: aKeyStroke! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69539032! keyStrokeAction: aBlock keyStroke value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69539184! menu "Return the block used to generate the tree menu" ^ menuBlockHolder value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69539385! menu: aBlock < api: #block getter: #menu registration: #whenMenuChanged:> "Set the block used to generate the tree menu" menuBlockHolder value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69539634! menu: aMenu shifted: aBoolean (self allowMenuOnNoItem not and: [ self selectedItems isEmpty ]) ifTrue: [ ^ nil ]. menuBlockHolder value cull: aMenu cull: aBoolean. ^ aMenu! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69539913! multiSelection ^ multiSelection value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69540055! multiSelection: aBoolean multiSelection value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69540215! oddRowColor ^ oddRowColor value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69540351! oddRowColor: aColor oddRowColor value: aColor! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69540498! onWidgetBuilt ^ self selectedItems: selectionHolder value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69540659! preferedPaneColor ^ preferedPaneColor value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69540807! preferedPaneColor: aColor preferedPaneColor value: aColor! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69541697! resizerWidth ^ resizerWidth value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69541835! resizerWidth: anInteger resizerWidth value: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69542178! roots < api: #inspect> "Return the tree roots" ^ rootsHolder value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69542351! roots: aCollection < api: #st getter: #roots registration: #whenRootsChanged:> "Set the tree roots" rootsHolder value: aCollection. self changed: #setRoots: with: { aCollection }! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69542637! rowInset ^ rowInset value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69542767! rowInset: anInteger rowInset value: anInteger! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69543112! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ selectionHolder value last! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69543717! selectedItems < api: #inspect> "Return the selected items" ^ selectionHolder value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69543907! selectedItems: aCollection < api: #st getter: #selectedItems registration: #whenSelectedItemsChanged:> "Set the selected item" "In the case of a multiple selection list, it returns the last selected item" "treeModel selectNodePath: aCollection." selectionHolder value: aCollection. ! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69544285! selectionChanged: ann ^ selectionHolder value: ann selection selectedItems! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69544463! updateTree < api: #do> "Force the tree to refresh" self changed: #updateTree with: {}. treeUpdated value: nil.! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69546368! wrapItem: anItem ^ displayBlock value cull: anItem cull: self! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69506246! actions ^ actions value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69506372! actions: aCollection actions value: aCollection! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69506523! closeable ^ closeable value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69506653! closeable: aBoolean closeable value: aBoolean! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:09' prior: 69506786! contents ^ morph value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:09' prior: 69506896! contents: aMorph morph value: aMorph! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69507176! icon ^ icon value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69507296! icon: aForm icon value: aForm! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69508584! label ^ label value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69508706! label: aString label value: aString! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69508844! menu ^ menu value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69508964! menu: aBlock menu value: aBlock! ! !TabModel methodsFor: '*deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 71831710! morph self deprecated: 'Use #contents instead'. ^ self value! ! !TabModel methodsFor: '*deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 71831880! morph: aMorph self deprecated: 'Use #contents: instead'. self value: aMorph! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69509655! retrievingBlock ^ retrievingBlock value! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69509797! retrievingBlock: aBlock retrievingBlock value: aBlock! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69510117! tabSelected tabSelectedAction value cull: self! ! !TabModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69510268! tabSelectedAction ^ tabSelectedAction value! ! !TabModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69510422! whenTabSelected: aBlock tabSelectedAction value: aBlock! ! !MethodToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69577006! browseMethod methodHolder value ifNotNil: [:aMethod | aMethod browse ]! ! !MethodToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69577492! implementorsMethod methodHolder value ifNotNil: [:aMethod | self model browseMessagesFrom: aMethod selector ]! ! !MethodToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69578464! method: aMethod methodHolder value: aMethod! ! !MethodToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69579011! sendersMethod methodHolder value ifNotNil: [:aMethod | self model browseSendersOfMessagesFrom: aMethod selector ]! ! !MethodToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69580227! versionMethod methodHolder value ifNotNil: [:aMethod | self model browseVersionsFrom: aMethod ]! ! !PickListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:46' prior: 69581121! addPicked: item pickedItemsHolder add: item. pickedItemsHolder valueChanged: true to: item.! ! !PickListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69581323! blockToPerformOnWrappers ^ blockToPerformOnWrappers value! ! !PickListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69581490! blockToPerformOnWrappers: aBlock blockToPerformOnWrappers value: aBlock! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69581782! defaultValue ^ defaultValueHolder value! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69581895! defaultValue: aBoolean defaultValueHolder value: aBoolean! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69582044! displayBlock: aBlock wrapHolder value: aBlock! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69583939! labelClickable ^ labelClickableHolder value! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69584057! labelClickable: aBoolean labelClickableHolder value: aBoolean! ! !PickListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69584319! pickedItems "Returns the selected items according to the order they have been picked" ^ pickedItemsHolder value! ! !PickListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69586661! wrap: item at: index | checkBox | associationsIndexToWrapper at: index ifPresent: [:cb | ^ cb ]. checkBox := self instantiate: CheckBoxModel. blockToPerformOnWrappers value value: checkBox. checkBox label: (wrapHolder value cull: item cull: self). checkBox whenActivatedDo: [ self addPicked: item. listModel setSelectedItem: checkBox. listModel takeKeyboardFocus ]. checkBox whenDesactivatedDo: [ self removePicked: item. listModel setSelectedItem: checkBox. listModel takeKeyboardFocus ]. checkBox state: self defaultValue; labelClickable: self labelClickable. associationsWrapperToItem at: checkBox put: item. associationsItemToWrapper at: item put: checkBox. associationsIndexToWrapper at: index put: checkBox. ^ checkBox! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69415966! acceptDropBlock ^ acceptDropBlock value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69416109! acceptDropBlock: aBlock acceptDropBlock value: aBlock! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69416261! borderColor "Return the border color" ^ borderColor value! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69416436! borderColor: aColor "Set the border width" borderColor value: aColor ! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69416680! borderWidth "Return the border width" ^ borderWidth value! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69416855! borderWidth: anInteger "Set the border width" borderWidth value: anInteger! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69418054! dragEnabled ^ dragEnabled value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69418189! dragEnabled: anObject dragEnabled value: anObject! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69418342! dragTransformationBlock ^ dragTransformationBlock value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69418501! dragTransformationBlock: aBlock dragTransformationBlock value: aBlock! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69418674! dropEnabled ^ dropEnabled value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69418809! dropEnabled: aBoolean dropEnabled value: aBoolean! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69419111! enabled ^ enabledHolder value! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69419255! enabled: aBoolean "Set if the button is enabled (clickable)" enabledHolder value: aBoolean! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69420078! help "Return the ballon text" ^ helpHolder value! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69420244! help: aString "Set the help string" helpHolder value: aString! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69422005! transferBlock ^ transferBlock value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69422144! transferBlock: aBlock transferBlock value: aBlock! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69422297! wantDropBlock ^ wantDropBlock value! ! !AbstractWidgetModel methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69422436! wantDropBlock: aBlock wantDropBlock value: aBlock! ! !MenuGroupModel commentStamp: '' prior: 76487438! I am a group of menu items. I am part of a menu, and groups items by meaning! !MenuGroupModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 15:06'! addMenuItem: aMenuItem items add: aMenuItem! ! !MenuGroupModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 15:06'! initialize super initialize. items := OrderedCollection new asValueHolder.! ! !MenuItemModel commentStamp: '' prior: 76487571! I represent a menu item. I have a name, a description, an icon, a shortcut, and an action to perform (aBlock). I can also have a sub menu. (and usually I do NOT have an action AND a sub menu)! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05'! action ^ action value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! action: aBlock action value: aBlock! ! !MenuItemModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 15:03'! initialize super initialize. action := [] asValueHolder. name := '' asValueHolder. shortcut := nil asValueHolder. subMenu := nil asValueHolder! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05'! name ^ name value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! name: aString name value: aString! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05'! shortcut ^ shortcut value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! shortcut: aShortcut shortcut value: aShortcut! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05'! subMenu ^ subMenu value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! subMenu: aMenuModel subMenu value: aMenuModel! ! !MenuModel commentStamp: '' prior: 76487816! I am a simple model describing a menu. I only contains a list of menu groups. Each group is separated by a splitter! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 15:05'! addMenuGroup: aMenuGroup groups add: aMenuGroup! ! !MenuModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 15:05'! initialize super initialize. groups := OrderedCollection new asValueHolder! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69424175! action "get the block performed when the button is clicked" ^ actionHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69424380! action: aBlock "set the block performed when the button is clicked" actionHolder value: aBlock! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69424652! askBeforeChanging ^ askBeforeChangingHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69424808! askBeforeChanging: aBoolean askBeforeChangingHolder value: aBoolean! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69425163! getAction "get the block performed when the button is clicked" ^ actionHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69425355! icon ^ iconHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69425485! icon: anIcon iconHolder value: anIcon! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/1/2013 13:08' prior: 75248919! label ^ labelHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69426836! label: aStringOrImageMorph labelHolder value: aStringOrImageMorph! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69427057! performAction actionHolder value value. " Here I set a dummy value just to make the holder raise an event " actionPerformedHolder value: nil.! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69427309! state ^ stateHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69427457! state: aBoolean "set if the button is highlighted" ^ stateHolder value: aBoolean! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28419267! hasHeader ^ hasHeader value! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 36208890! hasHeader: aBoolean hasHeader value: aBoolean! ! !NewListRenderer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 48902691! initialize super initialize. wantsSteps := false. listSource := nil asValueHolder. itemHeight := nil asValueHolder. maxWidth := 0 asValueHolder. hasHeader := false asValueHolder. potentialDropIndex := 0 asValueHolder. steppingTime := 100. mouseDownIndex := 0 asValueHolder. listSource whenChangedDo: [:e | itemHeight value: e itemHeight. e whenItemsChangedDo: [ maxWidth value: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28419537! itemHeight ^ itemHeight value! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28419664! itemHeight: anInteger itemHeight value: anInteger! ! !NewListRenderer methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28423910! listSource ^ listSource value! ! !NewListRenderer methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28424051! listSource: anObject listSource value: anObject. ! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28419811! maxWidth ^ maxWidth value! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28419934! maxWidth: anInteger maxWidth value: anInteger! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28420077! mouseDownIndex ^ mouseDownIndex value! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 36210781! mouseDownIndex: anInteger self allowToSelect ifFalse: [ ^ self ]. mouseDownIndex value: anInteger! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:33' prior: 28420367! potentialDropIndex ^ potentialDropIndex value! ! !NewListRenderer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:32' prior: 28420510! potentialDropIndex: anInteger potentialDropIndex value: anInteger! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 38518241! accept self okToChange ifFalse: [ ^self ]. self pickedChanges do: [:change | RBRefactoryChangeManager instance performChange: change ]. window value delete! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 38518508! cancel window value delete! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69503132! addTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs value add: aTab. self changed: #addTab: with: { aTab }! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69503537! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asValueHolder. tabSelectedAction := [] asValueHolder. selectedTab := nil asValueHolder. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: self getTabs value ] ]. selectedTab whenChangedDo: [:newTab | tabSelectedAction value cull: newTab cull: self ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69504057! removeTab: aTab "BEWARE: this code is an exception. One should never access directly a value holder contents" "I do this here for optimisation. No need to trigger the whole collection changed. Only the added element is interesting " tabs value remove: aTab ifAbsent: [ ]. self widget ifNotNil: [ :w | w removeTab: aTab ]! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69504659! selectTabModel: tabModel tabSelectedAction value cull: tabModel cull: self! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69504844! selectedTab ^ selectedTab value! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69504970! selectedTab: aTab selectedTab value: (self tabModelFor: aTab).! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69505310! tabSelectedAction ^ tabSelectedAction value! ! !TabManagerModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69505464! tabs ^ tabs value! ! !TabManagerModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69505591! tabs: aCollection tabs value: aCollection! ! !TabManagerModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69505750! whenTabSelected: aBlock tabSelectedAction value: aBlock! ! !MorphicDialogWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/28/2013 23:49' prior: 74441231! defaultSpec ^ #( DialogWindowSpec specWidget: #(model contentMorph) initialize model: model )! ! !ValueChanged commentStamp: '' prior: 76487994! A ValueChanged is an announcement raised when a value of a NewValueHolder is changed! !ValueChanged class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/17/2013 17:00'! newValue: newContents ^ self new newValue: newContents; yourself! ! !ValueChanged class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! oldValue: oldContent newValue: newValue ^ self new newValue: newValue; oldValue: oldContent; yourself! ! !ValueChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:58'! newValue ^ newValue! ! !ValueChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:00'! newValue: anObject newValue := anObject! ! !ValueChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01'! oldValue ^ oldValue! ! !ValueChanged methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01'! oldValue: anObject oldValue := anObject! ! !DropListItem methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:36' prior: 20975273! action: aBlock actionHolder value: aBlock! ! !DropListItem methodsFor: 'execution' stamp: 'BenjaminVanRyseghem 10/17/2013 16:36' prior: 20974918! value "This way, I am polymorphic with nil" actionHolder value cull: self label cull: self! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69518520! aboutToStyle: aBoolean "Set if the text zone must be styled" aboutToStyleHolder value: [ aBoolean ]! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69518814! aboutToStyleBlock "Return the block used to know if the text must be styled" ^ aboutToStyleHolder value! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69519047! aboutToStyleBlock: aBlockReturningABoolean "Set the block used to know if the text must be styled. The block must return a boolean" aboutToStyleHolder value: aBlockReturningABoolean! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69519422! accept "Accep the current pendingtext" self widget ifNotNil: [:w | w accept ]. "Dummy changed to raise an announcement" actionPerformedHolder value: self text.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69519704! accept: aText notifying: aNotifyier | accept | accept := actionToPerformHolder value cull: aText cull: aNotifyier. accept == false ifTrue: [ ^ self ]. textHolder value: aText. "Dummy changed to raise an announcement" actionPerformedHolder value: aText. self changed: #clearUserEdits.! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69520111! acceptBlock "Return the block to perform when the text is accepted. The block must have one argument, which will be the accepted text" ^ actionToPerformHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69520399! acceptBlock: aBlockWithOneArgument "Set the block to perform when the text is accepted. The block must have one argument, which will be the accepted text. The block can return false if the candidate text is to be rejected" actionToPerformHolder value: aBlockWithOneArgument! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69520861! behavior "Return the class corresponding to the method class of the source code you are editing" ^ behaviorHolder value! ! !TextModel methodsFor: 'protocol-shout' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69521110! behavior: aClass < api: #st getter: #behavior registration: #whenBehaviorChanged:> "Set the class corresponding to the method class of the source code you are editing" behaviorHolder value: aClass! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69521759! doItContext ^ doItContext value! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69521900! doItContext: anObject doItContext value: anObject! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69522059! doItReceiver ^ doItReceiver value! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69522202! doItReceiver: anObject doItReceiver value: anObject! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69522874! getSelection "Get the text selection" selection ifNil: [ ^(1 to: 0) ]. ^ selection value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69523085! getText ^ textHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69523803! hasUnacceptedEdits "Return if the text zone has unaccepted edits (orange corner)" hasUnacceptedEdits ifNil: [ ^ false ]. ^ hasUnacceptedEdits value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69524073! hasUnacceptedEdits: aBoolean "Return if the text zone has unaccepted edits (orange corner)" hasUnacceptedEdits value: aBoolean! ! !TextModel methodsFor: 'NOCompletion' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69525311! isCodeCompletionAllowed "Return if code completion is allowed" ^ isCodeCompletionAllowedHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69525534! isCodeCompletionAllowed: aBoolean "Set if code completion is allowed" isCodeCompletionAllowedHolder value: aBoolean! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69526401! readSelection ^ readSelectionHolder value cull: self text cull: self! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69526590! readSelectionBlock "Return the block used to calculate the text selection" ^ readSelectionHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69526815! readSelectionBlock: aBlock "Set the block used to calculate the text selection" ^ readSelectionHolder value: aBlock! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69528049! scrollValue "Return the current scroll position" ^ scrollValue value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69528224! scrollValue: aPoint "Set the scroll position" ^ scrollValue value: aPoint! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69528473! selectedBehavior ^ behaviorHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69528617! setSelection: anInterval "Set the text selection without changing the readSelectionBlock" selection ifNotNil: [: holder | holder value: anInterval ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69529025! text: aText "Set the text of the text zone" textHolder value: aText! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 37104453! cancelAction ^ cancelAction value! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 37104536! cancelAction: aBlock ^ cancelAction value: aBlock! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 37104755! cancelled ^ cancelled value! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 37104876! cancelled: aBoolean cancelled value: aBoolean! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 37105267! initializePresenter super initializePresenter. cancelButton action: [ cancelAction value value == false ifFalse: [ cancelled value: true. owner ifNil: [ self delete ] ifNotNil: [ owner delete ]]].! ! !Dictionary methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 10/17/2013 16:25' prior: 20715018! asValueHolder ^ DictionaryValueHolder value: self! ! !SpecDebuggerDynamicToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69317939! session ^ sessionHolder value ! ! !SpecDebuggerDynamicToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69318068! session: aSession sessionHolder value: aSession! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28387899! adoptIndexes: aDictionary selectedIndexes value: aDictionary! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28370750! deSelectOnReclick ^ deSelectOnReclick value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28370882! deSelectOnReclick: anObject deSelectOnReclick value: anObject! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 40152607! deselectAll selectedIndex value: 0. self isMultipleSelection ifTrue: [ selectedIndexes removeAll. self secondSelection: 0 ]. self changed.! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28371032! drawColor ^ drawColor value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28371148! drawColor: anObject drawColor value: anObject! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28371282! enabled: aBoolean "Set the value of enabled" enabled value = aBoolean ifTrue: [^self]. enabled value: aBoolean. self changed: #enabled. self adoptPaneColor: self paneColor; changed! ! !NewList methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 36460324! endOfInitialization isInitialized value: true. self updateItems. self updateDisplayListCache. self updateListSize. self updateHeaderTitle. self updateHeaderHeight. self updateAllowToSelect. self updateRenderer. selectedItem value: self retrieveSelectedItem. selectedItems value: self retrieveSelectedItems. listCache whenChangedDo: [:e | listSize value: e size. self updateDisplayListCache. self unselectOnChange ifTrue: [ self deselectAll ]. self updateScrollbars ]. listSize whenChangedDo: [:e | self updateRenderer ]. headerTitle whenChangedDo:[:e | self updateHeaderHeight ]. secondSelection whenChangedDo: [:idx | self setViewToIndex: idx. self renderer updateRectFor: idx ]. selectedIndex whenChangedDo: [:newIndex :oldIndex | selectedItem value: self retrieveSelectedItem. self renderer updateRectFor: oldIndex. ]. selectedIndexes whenChangedDo: [:newIndex :oldIndex | selectedItems value: self retrieveSelectedItems ]. headerTitle whenChangedDo: [:t | self renderer invalidHeader ].! ! !NewList methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28395403! hasHeader ^ headerHeight value ~~ 0! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28371563! headerHeight ^ headerHeight value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28371685! headerHeight: anObject headerHeight value: anObject! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28371825! headerTitle ^ headerTitle value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28371945! headerTitle: anObject headerTitle value: anObject! ! !NewList methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28384120! iconMaxSize ^ iconMaxSize value ifNil: [ iconMaxSize value: self retrieveIconMaxSize ]! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28388671! inverseSelection self isMultipleSelection ifFalse: [ ^ self ]. 1 to: self listSize do: [: i | self toggleAtIndexes: i ]. self secondSelection: 0. selectedIndex value: self selectedIndexes first. self changed.! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28372083! isInitialized ^ isInitialized value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28372207! isInitialized: anObject isInitialized value: anObject! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:29' prior: 28372349! isMultipleSelection ^ isMultipleSelection value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28372485! isMultipleSelection: anObject isMultipleSelection value: anObject! ! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28376090! listSize ^ listSize value ifNil: [ self retrieveListSize ]! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28372639! listSize: anObject listSize value: anObject! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28372771! model ^ model value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28372880! model: anObject model value ifNotNil: [:m | m removeDependent: self ]. anObject ifNotNil: [anObject addDependent: self ]. model value: anObject! ! !NewList methodsFor: 'events - mouse' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28382589! mouseDownOnHeader: anEvent "Just to rise an announcement" clickOnHeader value: anEvent! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28373248! renderer ^ renderer value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28373362! renderer: anObject renderer value: anObject! ! !NewList methodsFor: 'communication with model' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28376721! retrieveItems ^ self model getItems ifNil: [ selectedItems value ]! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28373615! runningProcesses: aCollection runningProcesses value: aCollection! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28373769! secondSelection ^ secondSelection value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28373897! secondSelection: anObject secondSelection value: anObject! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 28389113! selectAll self isMultipleSelection ifFalse: [ ^ self ]. 1 to: self listSize do: [: i | selectedIndexes value at: i put: true ]. selectedIndexes valueChanged. self secondSelection: 0. selectedIndex value: self listSize. self changed.! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28374043! selectedIndex ^ selectedIndex value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28374328! selectionWithKeys ^ selectionWithKeys value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28374460! selectionWithKeys: anObject selectionWithKeys value: anObject! ! !NewList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 36216776! setIndex: index | oldIndex newIndex | oldIndex := selectedIndex value. newIndex := index. self secondSelection: 0. self setViewToIndex: index. selectedIndex value: newIndex. (self deSelectOnReclick and: [ oldIndex == newIndex ]) ifTrue: [ self toggleAtIndexes: newIndex ] ifFalse: [ self addAtIndexes: newIndex ]! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:28' prior: 28374610! unselectOnChange ^ unselectOnChange value! ! !NewList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28374740! unselectOnChange: anObject unselectOnChange value: anObject! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 36217835! updateAllowToSelect allowToSelect value: self retrieveAllowToSelect! ! !NewList methodsFor: 'updating - private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 28394422! updateDisplayListCache "self runningProcesses do: [:e | e ifNotNil: [:process | process terminate ]]." displayListCache value: (Array new: self listSize). self runningProcesses: (Array new: self listSize).! ! !NewList methodsFor: 'updating - private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:30' prior: 74317723! updateHeaderHeight self isInitialized ifFalse: [ ^ self ]. headerHeight value: self model getHeaderHeight.! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:31' prior: 28392699! updateHeaderTitle self isInitialized ifFalse: [ ^ self ]. headerTitle value: self retrieveHeaderTitle.! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:31' prior: 28393018! updateIconMaxSize iconMaxSize value: self retrieveIconMaxSize! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:31' prior: 28393168! updateItems self isInitialized ifFalse: [ ^ self ]. listCache value: self retrieveItems! ! !NewList methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 10/17/2013 16:31' prior: 28393346! updateListSize self isInitialized ifFalse: [ ^ self ]. listSize value: self retrieveListSize! ! !NewList methodsFor: 'updating - private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:31' prior: 28394945! updateRenderer | morph | self flag: 'Can we keep the same instead of removing it ?'. self scroller removeAllMorphs. morph := NewListRenderer on: self. morph color: self color; width: self scroller width" +10"; hasHeader: self hasHeader; height: (self listSize*self itemHeight+self headerHeight). self scroller addMorph: morph. renderer value: morph.! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571405! add: newObject | result | result := value add: newObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571564! add: newObject after: oldObject | result | result := value add: newObject after: oldObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571759! add: newObject afterIndex: index | result | result := value add: newObject afterIndex: index. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571956! add: newObject before: oldObject | result | result := value add: newObject before: oldObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19572152! add: newObject beforeIndex: index | result | result := value add: newObject beforeIndex: index. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19572351! addAll: aCollection | result | result := value addAll: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19572524! addAllFirst: anOrderedCollection | result | result := value addAllFirst: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19572730! addAllFirstUnlessAlreadyPresent: anOrderedCollection | result | result := value addAllFirstUnlessAlreadyPresent: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19572976! addAllLast: aCollection | result | result := value addAllLast: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19573157! addFirst: newObject | result | result := value addFirst: newObject . self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19573328! addLast: newObject | result | result := value addLast: newObject . self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571063! at: anObject ^ value at: anObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19573497! at: index ifAbsentPut: block | result | result := value at: index ifAbsentPut: block. self valueChanged: block value. ^ result! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 17:11' prior: 19571199! at: key put: anObject value at: key put: anObject. self valueChanged: value. ^ anObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19573686! atAll: aCollection put: anObject | result | result := value atAll: aCollection put: anObject . self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19573883! atAll: indexArray putAll: valueArray | result | result := value atAll: indexArray putAll: valueArray. self valueChanged: valueArray. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19574088! atAllPut: anObject | result | result := value atAllPut: anObject. self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19574256! atLast: indexFromEnd put: obj | result | result := value atLast: indexFromEnd put: obj. self valueChanged: obj. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19574440! atWrap: index put: value | result | result := value atWrap: index put: value. self valueChanged: value. ^ result! ! !CollectionValueHolder methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576690! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19574616! insert: anObject before: spot | result | result := value insert: anObject before: spot. self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19574804! remove: oldObject ifAbsent: absentBlock | result | result := value remove: oldObject ifAbsent: absentBlock. self valueChanged: oldObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575013! removeAll value removeAll. self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575118! removeAt: index | result | result := value removeAt: index. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575276! removeFirst | result | result := value removeFirst. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575426! removeFirst: n | result | result := value removeFirst: n . self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575584! removeIndex: removedIndex | result | result := value removeIndex: removedIndex. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575762! removeLast | result | result := value removeLast. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19575910! removeLast: n | result | result := value removeLast: n. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576064! replace: aBlock value replace: aBlock . self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576183! replaceAll: oldObject with: newObject value replaceAll: oldObject with: newObject . self valueChanged: oldObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576357! reset value reset. self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576454! resetTo: index value resetTo: index. self valueChanged! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19571329! size ^ value size! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48' prior: 19576569! sort: aSortBlock value sort: aSortBlock . self valueChanged! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44' prior: 46298330! index: anIndex index := anIndex. self valueChanged: index! ! !SelectionValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 48878777! initialize super initialize. index := 0 asValueHolder. selection := nil asValueHolder. index whenChangedSend: #valueChanged to: self. selection whenChangedSend: #valueChanged to: self.! ! !SelectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 32928390! reset self index value: 0. self selection value: nil. self valueChanged! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44' prior: 46298505! selection: aSelection selection := aSelection. self valueChanged: selection! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:21'! value ^ {index. selection}! ! !TextInputFieldModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69511466! accept: aText textHolder value: aText. actionToPerformHolder value cull: aText. "Dummy changed to raise an announcement" actionPerformedHolder value: aText. self changed: #clearUserEdits.! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69511780! acceptOnCR "Return true if the text is accepted when the Enter key is stroked" ^ acceptOnCR value! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69512010! acceptOnCR: aBoolean "Set if the text is accepted when the Enter key is stroked or not" acceptOnCR value: aBoolean! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69512438! autoAccept "Return true if the text is accepted after ech keystroke" ^ autoAccept value! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69512659! autoAccept: aBoolean "Set if the text is accepted after each keystroke or not" autoAccept value: aBoolean.! ! !TextInputFieldModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69513953! encrypted ^ isEncrypted value! ! !TextInputFieldModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69514097! encrypted: aBoolean isEncrypted value: aBoolean ! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69514260! entryCompletion "Return an entry completion used to suggest text while typing" ^ entryCompletion value! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69514558! entryCompletion: anEntryCompletion "Set an entry completion used to suggest text while typing" entryCompletion value: anEntryCompletion.! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69515398! ghostText "Return the ghost text of the text zone" ^ ghostText value! ! !TextInputFieldModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69515599! ghostText: aText "Set the ghost text of the text zone" ghostText value: aText translated.! ! !BlocEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 18204484! block ^ block value! ! !BlocEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 18204595! block: aBlock block value: aBlock ! ! !BlocEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 35768567! okAction text accept. block value: (Smalltalk evaluate: (String streamContents: [:s | s << '[' << text getText <<']'])).! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54583394! editPermissionsAction | usr editor | (usr := user value) ifNil: [ ^ self ]. usr unlock ifFalse: [ ^ self ]. editor := PermissionsEditor new user: usr; openDialogWithSpec; yourself. self window openModal: editor window window.! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54588384! editPrivateAction user value ifNil: [ self ] ifNotNil: [:usr || editor kc | kc := usr keychain. kc unlock. editor := KeyChainViewer new keychain: kc; yourself. self window ifNotNil: [ self window openModal: editor openWithSpec window ]]! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54588738! editPublicAction user value ifNil: [ self ] ifNotNil: [:usr || editor | editor := KeyChainViewer new keychain: usr unlockedKeychain; yourself. self window ifNotNil: [ self window openModal: editor openWithSpec window ]]! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54589311! isValidUsername: aString ^ (user value username = aString or: [(self userNames includes: aString) not])! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 70126243! ok | pharoUser newName newAddress | (pharoUser := user value) ifNil: [ ^ self ]. newName := userName getText asString asSymbol. newAddress := gravatarAddress getText. pharoUser username = newName ifFalse: [ pharoUser username: newName ]. (newAddress ~= originalEmail and: [ self isValidAddressMail: newAddress ]) ifFalse: [ ^ self ]. pharoUser setUserName: newAddress forGroup: #gravatar. pharoUser updateGravatarFor: newAddress! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54586284! registerUserChanges user whenChangedDo: [ :usr | self window ifNotNil: [ :w | w title: self title ]. gravatarAddress enabled: usr notNil. testGravatar enabled: usr notNil. userName enabled: usr notNil. setPassword enabled: usr notNil. editPermissions enabled: usr notNil. editPrivate enabled: usr notNil. editPublic enabled: usr notNil. usr ifNotNil: [ userName text: user value username. container removeAllMorphs. container addMorph: usr avatar copy fullFrame: LayoutFrame identity. originalEmail := usr userNameFor: #gravatar. originalEmail ifNotNil: [ gravatarAddress text: originalEmail ]]]! ! !UserEditor methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54587525! setNewPassword | usr newPassword w | (usr := user value) ifNil: [ ^ self ]. usr unlock ifFalse: [ ^ self ]. w := PasswordInitializationDialogWindow new. self window openModal: w. newPassword := w enteredValue. newPassword ifNil: [ ^ self ]. usr setPassword: newPassword.! ! !UserEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54582660! setTitle: aString | string | string := (user value isNil or: [ aString isNil ]) ifTrue: [ 'Editing' ] ifFalse: [ 'Editing ', aString, '''s profile' ]. self window ifNotNil: [:w | w title: string ]! ! !UserEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54590024! testGravatarAddress | email newAvatar | email := gravatarAddress getText. newAvatar := [ user value retrieveGravatarFromMail: email ] on: Error do: [ nil ]. newAvatar ifNil:[ gravatarAddress morph flash ] ifNotNil: [ container removeAllMorphs. container addMorph: newAvatar fullFrame: LayoutFrame identity].! ! !UserEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 54588107! user: anObject user value: anObject! ! !UserEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 54588233! usersManager: aUsersManager usersManager value: aUsersManager! ! !CriticToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 34153384! browseCritic criticHolder value ifNotNil: [ :elem | elem browse ] ! ! !CriticToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 20255076! critic: aCritic criticHolder value: aCritic! ! !CriticToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 34153551! rule: aRule ruleHolder value: aRule. transformModel enabled: aRule isTransformationRule ! ! !CriticToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 34153745! transformCritic criticHolder value ifNotNil: [:critic | ruleHolder value transform: critic ] ! ! !KeychainEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 24221421! keychainEditingWrapper: anAssociation keychainEditingWrapper value: anAssociation! ! !KeychainEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 24221711! ok | it | (it := keychainEditingWrapper value) ifNil: [ ^ self ]. it group: groupTextField getText asSymbol. it usernamePassword username: usernameTextField getText. it usernamePassword password: password.! ! !KeychainEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 24218775! setNewPassword | it newPassword w | (it := keychainEditingWrapper value) ifNil: [ ^ self ]. it keychain unlock ifFalse: [ ^ self ]. w := PasswordInitializationDialogWindow new. self window openModal: w. newPassword := w enteredValue. newPassword ifNil: [ ^ self ]. password := it keychain encryptPassword: newPassword! ! !KeychainEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 24222014! title ^ keychainEditingWrapper value ifNil: [ 'Group editor' ] ifNotNil: [:it | it group ifEmpty: [ 'Group editor' ] ifNotEmpty: [:name | 'Editing ', name asString printString, ' group' ]]! ! !IconListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69453167! getIconFor: anItem ^ iconHolder value cull: anItem cull: self! ! !IconListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69453337! icons "Return the block which takes an item as argument and returns the icon to display in the list" ^ iconHolder value! ! !IconListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69453584! icons: aBlock "Set a block which takes an item as argument and returns the icon to display in the list" iconHolder value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69470945! allowToSelect ^ allowToSelect value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69471087! allowToSelect: aBoolean "Set if the list items can be selected or not" allowToSelect value: aBoolean. aBoolean ifFalse: [ self resetSelection ].! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69471817! deSelectOnReclick ^ deSelectOnReclick value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69471967! deSelectOnReclick: aBoolean deSelectOnReclick value: aBoolean! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69472419! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlock value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69472744! displayBlock: aBlock "Set the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" displayBlock value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69473139! doubleClick: event doubleClick value cull: event! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69473287! doubleClickAction "Return the block evaluated on double click" ^ doubleClick value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69473488! doubleClickAction: aBlock "Set the block evaluated on double click." doubleClick value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69473777! draggedItemAtIndex: anIndex ^ draggedItemAtIndex value cull: anIndex.! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69473953! filteringBlock "Return the filtering of the items" ^ filteringBlock value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69474145! filteringBlock: aBlock "To set the filtering of the items" filteringBlock value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69474422! getDisplayForItem: item at: index ^ displayBlock value cull: item cull: index! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69474606! getHeaderHeight ^ headerHeight value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69474749! getHeaderTitle ^ headerTitle value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69474891! getItems ^ items value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69475148! getMenu: shiftKeyState | menu | menuHolder value ifNil: [ ^ nil ]. menu := UIManager default newMenuIn: self for: self. menuHolder value cull: menu cull: shiftKeyState. menuTitle value ifNotNil: [ :title | menu addTitle: title ]. ^ menu ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69475508! getRawItemAt: index ^ items value at: index ifAbsent: [ nil ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69475676! handlesDoubleClick ^ handlesDoubleClick value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69475821! handlesDoubleClick: aBoolean "Enable or disable double click on the list." handlesDoubleClick value: aBoolean! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69476127! hasHeader ^ headerTitle value notNil! ! !NewListModel methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69476282! headerClicked headerClicked value value! ! !NewListModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69476429! headerClicked: aBlock headerClicked value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69476585! headerTitle: aTitle headerTitle value: aTitle! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69476737! iconForItem: anItem at: anIndex ^ iconHolder value cull: anItem cull: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69476921! iconMaxSize ^ iconMaxSize value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69477058! iconMaxSize: aPoint iconMaxSize value: aPoint! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69477211! icons: aBlock iconHolder value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69478609! isMultipleSelection ^ isMultipleSelection value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69478763! isMultipleSelection: aBoolean isMultipleSelection value: aBoolean! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02' prior: 69478935! items: aList "Set the items of the list. aList is a collection of your domain specific items. Use a two stages notification (issue 7420)." | oldContents | oldContents := items value. items value: (aList sorted: sortingBlock value). listAnnouncer announce: (ValueChanged oldValue: oldContents newValue: items value)! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69479440! keyStrokeAction: anEvent ^ keyStrokeAction value cull: anEvent! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69479609! listItems "Return the items of the list. They are your domain specific items" ^ listItemsCache ifNil: [ listItemsCache := filteringBlock value value: items value ] ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69480087! menu "Return the block used to defined the menu" ^ menuHolder value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69480280! menu: aBlock "Set the block used to defined the menu" menuHolder value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69480528! multiSelection "Return true if the list has a multiple selection. False if the list has a single selection" ^ isMultipleSelection value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69480790! multiSelection: aBoolean "Make the list seelction become multiple if aBoolean is true. Otherwise set the selection as single" isMultipleSelection value: aBoolean. ! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69481720! resetFilteringBlock "Reset the filtering block with the default value which consists in showing everything" filteringBlock value: self defaultFilteringBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69482186! resetSortingBlock "Reset the sortering block with the default value which consists in not sorting" sortingBlock value: self defaultSortingBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69482449! selectedIndex "Return the index of the selected item In the case of a multiple selection list, it returns the last selected item" ^ selectedIndex value! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69482716! selectedIndex: anIndex selectedIndex value: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69482874! selectedIndexes "Return the indexes of selected items on the case of a multiple selection list" ^ selectedIndexes value! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69483109! selectedIndexes: anIndex selectedIndexes value: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69483271! selectedItem "Return the selected item. In the case of a multiple selection list, it returns the last selected item" ^ selectedItem value! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69483525! selectedItem: anIndex selectedItem value: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69483681! selectedItems "Return all the selected items in the case of a multiple selection list" ^ selectedItems value! ! !NewListModel methodsFor: 'list protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69483904! selectedItems: anIndex selectedItems value: anIndex! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69484243! separatorBlock ^ separatorBlock value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69484388! separatorBlock: aBlock separatorBlock value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69484547! setSelectedIndex: anIndex "Set the index of the item you want to be selected" self widget ifNil: [ selectedIndex value: anIndex ] ifNotNil: [ self changed: { #setIndex: .anIndex } ]! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69485298! sortingBlock "Return the ordering of the items" ^ sortingBlock value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69485492! sortingBlock: aBlock "To set the ordering of the items" sortingBlock value: aBlock! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69485760! unselectOnChange ^ unselectOnChange value! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69485908! unselectOnChange: aBoolean unselectOnChange value: aBoolean.! ! !NewListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01' prior: 69487559! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newValue cull: announcement oldValue cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 37107628! okAction ^ okAction value! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 37107742! okAction: aBlock ^ okAction value: aBlock! ! !OkToolbar methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 37107871! okActionBlock ^ [ okAction value value == false ifFalse: [ owner ifNil: [ self delete ] ifNotNil: [ owner delete ] ] ]! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 23:05' prior: 75393345! expandAll self treeModel changed: #(rootNodes expandAll)! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 10/17/2013 16:40' prior: 69677545! rootNodeFromItem: item ^ rootNodeHolder value cull:item! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69490760! activationAction: aBlock "This method is used to set the action to perform when I am activated" actionWhenActivatedHolder value: aBlock! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69491316! desactivationAction: aBlock "This method is used to set the action to perform when I am desactivated" actionWhenDesactivatedHolder value: aBlock! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69491804! initialize super initialize. actionWhenActivatedHolder := [] asValueHolder. actionWhenDesactivatedHolder := [] asValueHolder. enabledHolder := true asValueHolder. stateHolder := false asValueHolder. labelClickableHolder := true asValueHolder. labelHolder := '' asValueHolder. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder value ifFalse: actionWhenDesactivatedHolder value. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69492540! label ^ labelHolder value! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69492693! label: aString "Set the label of the radioButton" labelHolder value: aString.! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69492947! labelClickable "Return true if the label can be clicked to select the radioButton" ^ labelClickableHolder value! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69493188! labelClickable: aBoolean "Set if the label can be clicked to select the radioButton" labelClickableHolder value: aBoolean! ! !RadioButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69493505! privateSetState: aBoolean "Should only be used by RadioButtonGroup" stateHolder value: aBoolean. self changed: #state! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69493737! state "Return the current state of the radio button" ^ stateHolder value! ! !RadioButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69493939! state: aBoolean "Set if the checkbox is activated or not" stateHolder value: aBoolean! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69612743! addPassword | wrapper editor | keychain value ifNotNil:[:kc | kc unlock ]. wrapper := KeychainEditingWrapper new keychain: keychain value; group: ''; usernamePassword: UsernamePassword new. editor := KeychainEditor new keychainEditingWrapper: wrapper; yourself. self window ifNotNil: [: w | w openModal: (editor openDialogWithSpec window okAction: [ wrapper := KeychainEditingWrapper new keychain: keychain value; group: ''; usernamePassword: UsernamePassword new ]; yourself)].! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 69613392! editPassword list selectedItem ifNil: [ ^ self ] ifNotNil: [:it || wrapper editor | keychain value ifNotNil:[:kc | kc unlock ]. wrapper := KeychainEditingWrapper new keychain: keychain value; group: it key; usernamePassword: it value. editor := KeychainEditor new keychainEditingWrapper: wrapper; yourself. self window ifNotNil: [: w | w openModal: (editor openDialogWithSpec window okAction: [ it key: wrapper group. it value: wrapper usernamePassword. keychain valueChanged. list setSelectedItem: it]; yourself) ]. ]! ! !KeyChainViewer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 24206378! keychain: aKeyChain keychain value: aKeyChain! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43' prior: 24208093! removePassword list selectedItem ifNil: [ ^self ] ifNotNil: [:it | keychain value removeUserNamePasswordFor: it key. keychain valueChanged ]! ! !KeyChainViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 24208342! title ^ keychain value ifNil: [ 'Keychain editor' ] ifNotNil: [:kc | kc username ifNil: [ 'Keychain editor' ] ifNotNil: [:usr | 'Editing ', usr ,'''s keychain' ]]! ! !STEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 32628309! object ^ object value! ! !STEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 32628420! object: aBlock object value: aBlock ! ! !STEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 38946288! okAction text accept. object value: (Smalltalk evaluate: text getText).! ! !SpecDebuggerStack methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69344141! session ^ sessionHolder value! ! !SpecDebuggerStack methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69344259! session: aSession sessionHolder value: aSession! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 68583545! object ^ object value! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 68583660! object: anObject object value: anObject! ! !SpecDebugActionButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69273390! debugAction ^ debugActionHolder value ! ! !SpecDebugActionButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69273521! debugAction: aDebugAction debugActionHolder value: aDebugAction! ! !SequenceableCollection methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 10/17/2013 16:24' prior: 32973610! asValueHolder ^ CollectionValueHolder value: self! ! !WidgetSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 54891310! model ^ model value! ! !WidgetSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 54891423! model: anObject model value: anObject! ! !IntegerEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 23815645! initializeWidgets self instantiateModels: #( slider SliderModel text LabelModel ). text borderWidth: 4; borderColor: Color black; text: '0'. slider quantum: 1; whenValueChangedDo: [:v | integer value: v. text text: v asString ]. self focusOrder add: slider; add: text! ! !IntegerEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 23815180! integer ^ integer value! ! !IntegerEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 23815298! integer: aBlock integer value: aBlock ! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69454640! allowToSelect "Return whether the list items can be selected or not" ^ allowToSelect value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69454837! allowToSelect: aBoolean "Set if the list items can be selected or not" allowToSelect value: aBoolean. aBoolean ifFalse: [ self resetSelection ].! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69455948! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ wrapBlockHolder value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69456258! displayBlock: aBlock "Set the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" wrapBlockHolder value: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69456638! filteringBlock "Return the filtering of the items" ^ filteringBlockHolder value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69456825! filteringBlock: aBlock "To set the filtering of the items" filteringBlockHolder value: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69457090! getIndex "Return the index of the selected item" ^ selectionHolder index value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69457260! getList ^ listHolder value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02' prior: 69458440! items: aList "Set the items of the list. aList is a collection of your domain specific items. Use a two stages notification (issue 7420)." | oldContents | oldContents := listHolder value. listHolder value: (aList sorted: sortingBlockHolder value). listAnnouncer announce: (ValueChanged oldValue: oldContents newValue: listHolder value)! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69459351! listItems "Return the items of the list. They are your domain specific items" ^ listItemsCache ifNil: [ listItemsCache := filteringBlockHolder value value: listHolder value ] ! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69459804! menu "Return the block used to defined the menu" ^ menuHolder value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69459979! menu: aBlock "Set the block used to defined the menu" menuHolder value: aBlock! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69460208! menu: aMenu shifted: aBoolean "Build the menu when you right click on an item" ^ menuHolder value cull: aMenu cull: aBoolean! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69460422! multiSelection "Return true if the list has a multiple selection. False if the list has a single selection" ^ multiSelection value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69460661! multiSelection: aBoolean "Make the list seelction become multiple if aBoolean is true. Otherwise set the selection as single" multiSelection value: aBoolean. ! ! !ListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69461153! registerEvents listHolder whenChangedDo: [ self refreshListItems ]. filteringBlockHolder whenChangedDo: [ self refreshListItems ]. selectionHolder index whenChangedDo: [ self changed: #getIndex ]. multiSelection whenChangedDo: [ :b | self changed: { #setMultipleSelection: . b } ]. wrapBlockHolder whenChangedDo:[ self changed: #listElementAt: ]. sortingBlockHolder whenChangedDo: [ listHolder value: (listHolder value sorted: sortingBlockHolder value). self changed: #listElementAt: ]. ! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69461749! resetFilteringBlock "Reset the filtering block with the default value which consists in showing everything" filteringBlockHolder value: self defaultFilteringBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69462399! resetSortingBlock "Reset the sortering block with the default value which consists in not sorting" sortingBlockHolder value: self defaultSortingBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69463179! selectedItem "Return the selected item. In the case of a multiple selection list, it returns the last selected item" ^ self selectedItemHolder value! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:07' prior: 69463882! setIndex: anIndex "Set the index of the selected item when you click on an item" self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. selectionHolder index value: anIndex. selectionHolder selection value: (self listElementAt: anIndex).! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69464238! setSelectedIndex: anIndex "Set the index of the item you want to be selected" | idx selection | self allowToSelect ifFalse: [ ^ self ]. self okToChange ifFalse: [ ^ self ]. idx := anIndex min: self listSize. selection := self listElementAt: idx ifAbsent: [ idx := 0. nil ]. selectionHolder index value: idx. selectionHolder selection value: selection.! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69464816! setSelectedItem: anItem "Set the item you want to be selected" | index | self okToChange ifFalse: [ ^ self ]. index := self listItems identityIndexOf: anItem ifAbsent: [ ^ self ]. selectionHolder index value: index. selectionHolder selection value: anItem! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69465556! sortingBlock "Return the ordering of the items" ^ sortingBlockHolder value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69465738! sortingBlock: aBlock "To set the ordering of the items" sortingBlockHolder value: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01' prior: 69466920! whenListChanged: aBlock "Specify a block to value after the contents of the list has changed" "Basically when you set a new list of items" | block | block := [ :announcement :ann | aBlock cull: announcement newValue cull: announcement oldValue cull: announcement cull: ann ]. listAnnouncer when: ValueChanged do: block! ! !ListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69468849! wrapItem: anObject index: index "Return the item _anObject_ wrapped" ^ wrapBlockHolder value cull: anObject cull: index! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69439487! emptyList listHolder value: OrderedCollection new! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69439642! getIndex ^ selectionHolder index value! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69439785! getList ^ listHolder value collect: #label! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69440607! items: aList "Populate the drop list with a list of ui specific items" "aList is a list of domain specific objects. If you want to specify more precisely the item actions, see #addItemLabeled:do:" | dropListItems | dropListItems := aList collect: [ :e | DropListItem on: e do: [] ]. listHolder value: dropListItems! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69441059! listItems "Return the list used to populate the drop list" ^ listHolder value collect: [ :e | e model ].! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69442033! selectedItem ^ self selectedItemHolder value model! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69442356! setIndex: anIndex | item | selectionHolder index value: anIndex. item := (listHolder value at: anIndex ifAbsent: [ nil ]). item value. selectionHolder selection value: item. self changed: #getIndex! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69442673! setSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder value at: anIndex ifAbsent: [ ^ self ]. selection value. selectionHolder index value: anIndex. selectionHolder selection value: selection! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69443098! setSelectedItem: anItem "Force the selection of the item anItem" | index realItem | index := self listItems indexOf: anItem ifAbsent: [ ^ self ]. realItem := listHolder at: index. selectionHolder index value: index. selectionHolder selection value: realItem.! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69443507! silentlySetSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder value at: anIndex ifAbsent: [ ^ self ]. selectionHolder index value: anIndex. selectionHolder selection value: selection! ! !ColorEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 19661086! color ^ color value! ! !ColorEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 19661197! color: anObject color value: anObject! ! !DateModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69567100! displayBlock "Return the one argument block used to wrap your domain specific items. The block should return something that can be displayed in a list - like a String or a Text" ^ displayBlockHolder value! ! !DateModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69567422! displayBlock: aBlock "Set the one argument block used to transfrom your date into a string" displayBlockHolder value: aBlock! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 17166493! method ^ method value! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 17166613! method: anObject method value: anObject! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 17166751! model ^ model value! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 17166869! model: anObject model value: anObject! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 17167005! retrievingMethod ^ retrievingMethod value! ! !AbstractApiSetter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 17167145! retrievingMethod: anObject retrievingMethod value: anObject! ! !NewValueHolder commentStamp: '' prior: 76488142! A NewValueHolder is a new implementation of ValueHolder based on Announcements! !NewValueHolder class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/17/2013 16:23'! value: contents ^ self new value: contents; yourself! ! !NewValueHolder methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 17:07' prior: 28446187! contents self deprecated: 'Use #value instead'. ^ self value! ! !NewValueHolder methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 17:11' prior: 28446299! contents: newValue self deprecated: 'Use #value instead'. ^ self value: newValue! ! !NewValueHolder methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:10' prior: 68609120! printOn: aStream super printOn: aStream. aStream nextPutAll: '[ '; print: self value; nextPutAll: ' ]'! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! value ^ value! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! value: anObject | oldValue | lock ifTrue: [ ^ self ]. lock := true. oldValue := value. value := anObject. [ self valueChanged: oldValue ] ensure: [ lock := false ]. ^ value! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:00'! valueChanged announcer announce: (ValueChanged newValue: value)! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue announcer announce: (ValueChanged oldValue: oldValue newValue: value)! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue to: newValue announcer announce: (ValueChanged oldValue: oldValue newValue: newValue)! ! !NewValueHolder methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01' prior: 68418449! whenChangedDo: aBlock | block | block := [:announcement :ann | aBlock cull: announcement newValue cull: announcement oldValue cull: announcement cull: ann ]. announcer when: ValueChanged do: block! ! !Object methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 10/17/2013 16:23' prior: 28574505! asValueHolder ^ NewValueHolder value: self! ! !EditableList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69450026! title ^ title value! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 10/1/2013 12:22' prior: 76264554! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !LabelModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 69451122! label ^ textHolder value! ! !LabelModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 69451253! label: aText "Set the text of the label" textHolder value: aText! ! ValueChanged removeSelector: #oldContents:! ValueChanged removeSelector: #oldContents! ValueChanged removeSelector: #newContents:! ValueChanged removeSelector: #newContents! ValueChanged class removeSelector: #oldContents:newContents:! ValueChanged class removeSelector: #newContents:! SelectionValueHolder removeSelector: #contents! NewValueHolder removeSelector: #contentsChanged:to:! NewValueHolder removeSelector: #contentsChanged:! NewValueHolder removeSelector: #contentsChanged! NewValueHolder class removeSelector: #contents:! "Deprecated30"! "KeyChain"! "Keymapping-Tools-Spec"! "Manifest-CriticBrowser"! "Nautilus"! "NautilusRefactoring"! "NewList"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(8 November 2013 10:23:53 am) Pharo.image priorSource: 26144113! ----STARTUP----an Array(8 November 2013 10:28:41 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 November 2013 10:28:41 am) Pharo-30556.image priorSource: 26297556! ----STARTUP----an Array(8 November 2013 12:45:34 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/8/2013 12:41' prior: 76476069! commentForCurrentUpdate ^ '12109 Move ThemeIcons deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12109 12092 Pharo cant find sources files when embedded in an .app application https://pharo.fogbugz.com/f/cases/12092 12107 MessageBrowser throw error when method is modified https://pharo.fogbugz.com/f/cases/12107'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/8/2013 12:42'! script213 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.84.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.126.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.334.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-StephaneDucasse.1677.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-StephaneDucasse.885.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-StephaneDucasse.262.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.135.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.62.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.968.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.50.mcz Refactoring-Core-MarcusDenker.229.mcz Refactoring-Critics-MarcusDenker.91.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.34.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-StephaneDucasse.149.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.199.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.121.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.39.mcz Spec-PolyWidgets-MarcusDenker.14.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-StephaneDucasse.51.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1350.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.591.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/8/2013 12:42'! update30557 "self new update30557" self withUpdateLog: '12109 Move ThemeIcons deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12109 12092 Pharo cant find sources files when embedded in an .app application https://pharo.fogbugz.com/f/cases/12092 12107 MessageBrowser throw error when method is modified https://pharo.fogbugz.com/f/cases/12107'. self loadTogether: self script213 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 11/7/2013 17:12' prior: 25264240! preferences ^ self home / 'Library' / 'Preferences'! ! !MacOSResolver methodsFor: 'resolving' stamp: 'DamienCassou 11/7/2013 17:07' prior: 25264368! supportedOrigins ^ super supportedOrigins , #( userApplicationSupport systemApplicationSupport )! ! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 11/7/2013 17:00'! systemApplicationSupport ^ FileSystem root / 'Library' / 'Application Support'! ! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/7/2013 21:00'! userApplicationSupport ^ self home / 'Library' / 'Application Support'! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'DamienCassou 11/7/2013 16:24' prior: 76084134! openSources: fullSourcesName forImage: imagePath "We first do a check to see if a compressed version ofthe sources file is present. Open the .sources file read-only after searching in: a) the directory where the VM lives b) the directory where the image came from c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it). " | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" OSPlatform current potentialLocationsOfSourcesFile do: [ :dir | (sourcesFile := dir / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNilDo: [ :stream | ^ stream ] ] ]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream | ^ stream ] ]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNilDo: [ :stream | ^ stream ] ]. ^ nil! ! !UnixPlatform methodsFor: '*Files' stamp: 'CamilloBruni 11/7/2013 21:05'! potentialLocationsOfSourcesFile ^ { Smalltalk vm directory. FileLocator userData }! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37394971! backIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons backIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37395190! blankIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons blankIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37396079! checkBoxOffIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOffIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37396312! checkBoxOnIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOnIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37396543! checkBoxPressedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxPressedIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37396784! configurationIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons configurationIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37397021! confirmIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons confirmIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37397623! errorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons errorIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37397844! expandBoxIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons expandBoxIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37398073! eyedropperIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons eyedropperIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37398304! forwardIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons forwardIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37398529! fullscreenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons fullscreenIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37398760! haloCollapseIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloCollapseIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37398995! haloDebugIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDebugIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37399224! haloDismissIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDismissIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37399457! haloDragIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDragIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37399684! haloDupIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloDupIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37399909! haloFontEmphIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontEmphIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37400144! haloFontSizeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontSizeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37400379! haloFontStyleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloFontStyleIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37400616! haloGrabIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloGrabIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37400843! haloHelpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloHelpIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37401070! haloMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloMenuIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37401297! haloPaintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloPaintIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37401526! haloRecolorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloRecolorIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37401759! haloRotIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloRotIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37401984! haloScaleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloScaleIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37402385! haloViewIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons haloViewIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37402612! helpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons helpIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37402831! homeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons homeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37403404! imageIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons imageIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37403625! infoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons infoIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37403844! jumpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons jumpIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37404063! lockIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons lockIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37404518! objectsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons objectsIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37404743! openIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons openIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37404962! paintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37405183! paintTabIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintTabIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37405410! paintingIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons paintingIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37405637! pharoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons pharoIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37406103! publishIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons publishIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37406328! questionIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons questionIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37406555! radioButtonOffIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOffIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37406794! radioButtonOnIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOnIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37407031! radioButtonPressedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonPressedIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37407523! rotateIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons rotateIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37407746! scaleIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons scaleIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37408210! smallAuthoringToolsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallAuthoringToolsIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37408459! smallBackIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBackIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37408688! smallBarcodeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBarcodeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37408923! smallBoldIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallBoldIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37409152! smallCancelIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCancelIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37409385! smallCenteredIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCenteredIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37409622! smallConfigurationIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallConfigurationIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37409869! smallCopyIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCopyIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37410098! smallCutIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallCutIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37410325! smallDebugIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37410797! smallDeleteIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDeleteIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37411030! smallDoItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallDoItIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37411259! smallErrorIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallErrorIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37411490! smallExpertIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallExpertIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37411723! smallExportIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallExportIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37411956! smallFindIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFindIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37412185! smallFontsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFontsIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37412416! smallForwardIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallForwardIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37412651! smallFullscreenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallFullscreenIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37412892! smallHelpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHelpIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37413121! smallHierarchyBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHierarchyBrowserIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37413374! smallHomeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallHomeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37413603! smallInfoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallInfoIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37413832! smallInspectItIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallInspectItIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37414071! smallItalicIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallItalicIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37414304! smallJumpIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallJumpIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37414533! smallJustifiedIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallJustifiedIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37414772! smallLanguageIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLanguageIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37415009! smallLeftFlushIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLeftFlushIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37415248! smallLoadProjectIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLoadProjectIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37415491! smallLockIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallLockIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37415720! smallNewIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallNewIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37415947! smallObjectsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallObjectsIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37416182! smallOkIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallOkIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37416407! smallOpenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallOpenIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37416636! smallPaintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPaintIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37416867! smallPasteIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPasteIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37417098! smallPrintIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37417570! smallPublishIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPublishIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37417805! smallPushpinIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallPushpinIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37418040! smallQuestionIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallQuestionIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37418277! smallQuitIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallQuitIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37418506! smallRedoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRedoIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37418735! smallRemoteOpenIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRemoteOpenIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37418976! smallRightFlushIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallRightFlushIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37419217! smallSaveAsIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveAsIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37419450! smallSaveIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37419679! smallScreenshotIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallScreenshotIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37419920! smallSelectIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSelectIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37420540! smallStrikeOutIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallStrikeOutIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37420779! smallSystemBrowserIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallSystemBrowserIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37421026! smallUnderlineIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUnderlineIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37421265! smallUndoIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUndoIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37421494! smallUpdateIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallUpdateIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37421727! smallVolumeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallVolumeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37421960! smallWarningIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallWarningIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37422195! smallWindowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons smallWindowIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37422428! solidMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons solidMenuIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37422894! tinyMenuIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons tinyMenuIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37423585! upArrowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons upArrowIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37424280! volumeIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons volumeIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37424503! warningIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons warningIcon.! ! !ThemeIcons class methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:04' prior: 37424728! windowIcon self deprecated: 'Use instance side method' on: '10 May 2013' in: '3.0'. ^ self icons windowIcon.! ! !MacOSPlatform methodsFor: '*Files' stamp: 'CamilloBruni 11/7/2013 21:05'! potentialLocationsOfSourcesFile ^ { Smalltalk vm directory. Smalltalk vm fullPath asFileReference parent. FileLocator systemApplicationSupport. FileLocator userApplicationSupport. "Take care of .app that have a 'Resources' folder as a sibling of the vm binary" Smalltalk vm fullPath asFileReference parent parent / 'Resources'. }! ! !MessageBrowser class methodsFor: 'instance creation' stamp: 'LeoGassman 11/7/2013 18:13' prior: 76438687! on: aList named: aString autoSelect: aSelector refreshingBlockSelector:aRefreshingBlockSelector |out| out := self new messages: aList; title: aString; autoSelect: aSelector; yourself. aRefreshingBlockSelector ifNotNil:[(out perform:aRefreshingBlockSelector with:aSelector)]. ^out! ! !FileLocator class methodsFor: 'mac-origins' stamp: 'CamilloBruni 11/7/2013 21:01'! systemApplicationSupport ^ self origin: #systemApplicationSupport! ! !FileLocator class methodsFor: 'mac-origins' stamp: 'CamilloBruni 11/7/2013 21:02'! userApplicationSupport ^ self origin: #userApplicationSupport! ! !FileLocator class methodsFor: 'unix-origins' stamp: 'CamilloBruni 11/7/2013 21:02'! userData ^ self origin: #userData! ! !Win32Platform methodsFor: '*Files' stamp: 'DamienCassou 11/7/2013 16:21'! potentialLocationsOfSourcesFile ^ {(Smalltalk vm directory)}! ! !UnixResolver methodsFor: 'as yet unclassified' stamp: 'DamienCassou 11/7/2013 16:42'! supportedOrigins ^ super supportedOrigins , #( userData )! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 11/7/2013 16:29'! userData ^ self directoryFromEnvVariableNamed: 'XDG_DATA_HOME' or: [ self home / '.local' / 'share' ]! ! !OSPlatform methodsFor: '*Files' stamp: 'DamienCassou 11/7/2013 16:18'! potentialLocationsOfSourcesFile "Return a collection of directories where the PharoVXX.sources should be searched." ^ self subclassResponsibility! ! MacOSResolver removeSelector: #library! "Deprecated30"! "FileSystem-Core"! "Files"! "Polymorph-Widgets"! "Spec-Tools"! ----End fileIn----! ----QUIT----an Array(8 November 2013 12:45:44 pm) Pharo.image priorSource: 26297763! ----STARTUP----an Array(8 November 2013 12:50:40 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 November 2013 12:50:40 pm) Pharo-30557.image priorSource: 26338739! ----STARTUP----an Array(8 November 2013 3:13:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/8/2013 15:08' prior: 76629719! commentForCurrentUpdate ^ '12102 Optimize Dictionary>>valuesDo:, part 1 https://pharo.fogbugz.com/f/cases/12102 12112 Missing ^ in accessor method in ClassCommented https://pharo.fogbugz.com/f/cases/12112 12099 Rename #poolDictionaryNames to #sharedPoolNames https://pharo.fogbugz.com/f/cases/12099'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/8/2013 15:09'! script214 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-StephaneDucasse.178.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.126.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.334.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.887.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.136.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.62.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.968.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.151.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.199.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.121.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.39.mcz Spec-PolyWidgets-MarcusDenker.14.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1350.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/8/2013 15:09'! update30558 "self new update30558" self withUpdateLog: '12102 Optimize Dictionary>>valuesDo:, part 1 https://pharo.fogbugz.com/f/cases/12102 12112 Missing ^ in accessor method in ClassCommented https://pharo.fogbugz.com/f/cases/12112 12099 Rename #poolDictionaryNames to #sharedPoolNames https://pharo.fogbugz.com/f/cases/12099'. self loadTogether: self script214 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WeakIdentityKeyDictionary methodsFor: 'enumeration' stamp: 'SqR 11/7/2013 12:11'! valuesDo: aBlock "See comments in Dictionary>>valuesDo:. The code keeps the key so it's not collected during the evaluation of aBlock" tally = 0 ifTrue: [ ^self ]. 1 to: array size do: [ :eachIndex | | eachAssociation eachKey | eachAssociation := array at: eachIndex. nil == eachAssociation ifFalse: [ eachKey := eachAssociation key. nil == eachKey ifFalse: [ aBlock value: eachAssociation value ] ] ]! ! !Class methodsFor: '*Monticello' stamp: 'MartinDias 11/7/2013 18:11' prior: 19044338! asClassDefinition ^ MCClassDefinition name: self name superclassName: self superclass name traitComposition: self traitCompositionString classTraitComposition: self class traitCompositionString category: self category instVarNames: self instVarNames classVarNames: self classVarNames poolDictionaryNames: self sharedPoolNames classInstVarNames: self class instVarNames type: self typeOfClass comment: self organization classComment asString commentStamp: self organization commentStamp ! ! !Class methodsFor: '*Ring-Core-Kernel' stamp: 'MartinDias 11/7/2013 18:11' prior: 76388917! asRingDefinition "A behavior is converted to a ring class. Only the receiver and its variables (instance, class, pools) are converted. Methods, superclasses, subclasses are not generated" | ring | ring := (RGFactory current createClassNamed: self name) category: self category; superclassName: self superclass name; traitCompositionSource: self traitCompositionString; addInstanceVariables: self instVarNames; addClassVariables: self classVarNames; addSharedPools: self sharedPoolNames; comment: self organization classComment; stamp: self organization commentStamp; definitionSource: self definition; package: self package asRingDefinition; withMetaclass. ring theMetaClass traitCompositionSource: self theMetaClass traitCompositionString; definitionSource: self theMetaClass definition; addInstanceVariables: self theMetaClass instVarNames. ^ ring! ! !ClassCommented methodsFor: 'accessing' stamp: 'MartinDias 11/8/2013 12:58' prior: 19191542! oldComment ^ oldComment! ! !PseudoClass methodsFor: '*MonticelloGUI' stamp: 'MartinDias 11/7/2013 18:11' prior: 30095570! asClassDefinition ^ MCClassDefinition name: self name superclassName: self superclass name category: self category instVarNames: self instVarNames classVarNames: self classVarNames asSortedCollection poolDictionaryNames: self sharedPoolNames classInstVarNames: self class instVarNames type: self typeOfClass comment: self organization classComment asString commentStamp: self organization commentStamp ! ! !RBClass methodsFor: 'accessing' stamp: 'MartinDias 11/7/2013 18:11' prior: 30390777! allPoolDictionaryNames | sprClass | sprClass := self superclass. ^sprClass isNil ifTrue: [self sharedPoolNames] ifFalse: [sprClass allPoolDictionaryNames , self sharedPoolNames]! ! !RBClass methodsFor: 'accessing' stamp: 'MartinDias 11/7/2013 18:11' prior: 30392011! definitionString | definitionStream | definitionStream := WriteStream on: ''. definitionStream nextPutAll: self superclass printString; nextPutAll: ' subclass: #'; nextPutAll: self name; nextPutAll: ' instanceVariableNames: '''. self instanceVariableNames do: [:each | definitionStream nextPutAll: each; nextPut: $ ]. definitionStream nextPutAll: ''' classVariableNames: '''. self classVariableNames do: [:each | definitionStream nextPutAll: each; nextPut: $ ]. definitionStream nextPutAll: ''' poolDictionaries: '''. self sharedPoolNames do: [:each | definitionStream nextPutAll: each; nextPut: $ ]. definitionStream nextPutAll: ''' category: #'''. definitionStream nextPutAll: self category asString. definitionStream nextPut: $'. ^definitionStream contents! ! !RBClass methodsFor: 'testing' stamp: 'MartinDias 11/7/2013 18:11' prior: 30393860! directlyDefinesPoolDictionary: aString ^self sharedPoolNames includes: aString asSymbol! ! !RBClass methodsFor: 'accessing' stamp: 'MartinDias 11/7/2013 18:11'! sharedPoolNames ^self privatePoolDictionaryNames copy! ! !WeakValueDictionary methodsFor: 'enumerating' stamp: 'SqR 11/7/2013 12:11'! valuesDo: aBlock "See comments in Dictionary>>valuesDo:. The code keeps a reference to the value to facilitate debugging" tally = 0 ifTrue: [ ^self ]. 1 to: array size do: [ :eachIndex | | eachAssociation eachValue | eachAssociation := array at: eachIndex. nil == eachAssociation ifFalse: [ eachValue := eachAssociation value. aBlock value: eachValue ] ]! ! !RBClassRegexRefactoring methodsFor: 'private' stamp: 'MartinDias 11/7/2013 18:11' prior: 30415152! copyFrom: aSourceClass to: aTargetClass aSourceClass instanceVariableNames do: [ :each | aTargetClass addInstanceVariable: each ]. aSourceClass isMeta ifFalse: [ aSourceClass allClassVariableNames do: [ :each | aTargetClass addClassVariable: each ]. aSourceClass sharedPoolNames do: [ :each | aTargetClass addPoolDictionary: each ] ]. aSourceClass selectors do: [ :each | aTargetClass compile: (aSourceClass sourceCodeFor: each) classified: (aSourceClass protocolsFor: each) ]! ! !RBClassVariableCapitalizationRule methodsFor: 'running' stamp: 'MartinDias 11/7/2013 18:11' prior: 30422049! checkClass: aContext aContext selectedClass isMeta ifTrue: [ ^ self ]. aContext selectedClass classVarNames do: [ :each | each first isUppercase ifFalse: [ result addClass: aContext selectedClass classVariable: each ] ]. aContext selectedClass sharedPoolNames do: [ :each | each first isUppercase ifFalse: [ result addClass: aContext selectedClass classVariable: each ] ]! ! !RBNamespace methodsFor: 'changes' stamp: 'MartinDias 11/7/2013 18:11' prior: 30850506! defineClass: aString | change newClass newClassName | change := changes defineClass: aString. newClassName := change changeClassName. newClass := self classNamed: newClassName. newClass isNil ifTrue: [ | newMetaclass | removedClasses remove: newClassName ifAbsent: [ ]; remove: newClassName , ' class' ifAbsent: [ ]. newClass := RBClass named: newClassName. newMetaclass := RBMetaclass named: newClassName. newClass model: self. newMetaclass model: self. newClasses at: newClassName put: (Array with: newClass with: newMetaclass) ]. newClass superclass: (self classNamed: change superclassName). newClass superclass isNil ifTrue: [ self rootClasses add: newClass. newClass theMetaClass superclass: (self classFor: Object class superclass) ] ifFalse: [ newClass theMetaClass superclass: newClass superclass theMetaClass ]. newClass instanceVariableNames: change instanceVariableNames. newClass classVariableNames: change classVariableNames. newClass poolDictionaryNames: change sharedPoolNames. newClass category: change category. ^ change! ! !RBChildrenToSiblingsRefactoring methodsFor: 'private-variables' stamp: 'MartinDias 11/7/2013 18:11' prior: 30385008! pullUpPoolVariables "Don't remove the pool variables from the subclass since they might be referenced there." | newSuperclass | newSuperclass := self abstractSuperclass. parent sharedPoolNames do: [:each | newSuperclass addPoolDictionary: each]! ! !RBAddClassChange methodsFor: 'accessing' stamp: 'MartinDias 11/7/2013 18:11'! sharedPoolNames ^ poolDictionaryNames! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'MartinDias 11/7/2013 18:11' prior: 31123101! testAddClassInteractively | change | change := RBAddClassChange definition: 'TestCase subclass: #' , self class name , ' instanceVariableNames: ''instVar'' classVariableNames: ''ClassVar'' poolDictionaries: ''PoolDict'' category: ''' , self class category , '''' for: self. self assert: change controller = self. self assert: change superclassName = self class superclass name. self assert: change changeClassName = self class name. self assert: change changeClass = self class. self assert: change isMeta not. self assert: change instanceVariableNames size = 1. self assert: change instanceVariableNames first = 'instVar'. self assert: change classVariableNames size = 1. self assert: change classVariableNames first = 'ClassVar'. self assert: change sharedPoolNames size = 1. self assert: change sharedPoolNames first = 'PoolDict'. self assert: change category = self class category. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests-pattern' stamp: 'MartinDias 11/7/2013 18:11' prior: 49359402! testAddClassPattern "Make sure that all class definitions can be parsed." self exampleClasses do: [ :class | (class isObsolete or: [ class superclass notNil and: [ class superclass isObsolete ] ]) ifFalse: [ | change | change := changes defineClass: class definition. self assert: (change isKindOf: RBAddClassChange). self assert: (change changeClassName = class name). self assert: (class superclass isNil ifTrue: [ change definitionClass = ProtoObject ] ifFalse: [ change definitionClass = class superclass ]). self assert: (change instanceVariableNames = class instVarNames asArray). self assert: (change classVariableNames = class classVarNames asArray). self assert: (change sharedPoolNames = class sharedPoolNames asArray). self assert: (change category = class category). self universalTestFor: change ] ]! ! !TBehavior methodsFor: 'accessing' stamp: 'MartinDias 11/7/2013 18:11'! sharedPoolNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !WeakKeyDictionary methodsFor: 'enumerating' stamp: 'SqR 11/7/2013 12:11'! valuesDo: aBlock "See comments in Dictionary>>valuesDo:. The code keeps the key so it's not collected during the evaluation of aBlock" tally = 0 ifTrue: [ ^self ]. 1 to: array size do: [ :eachIndex | | eachAssociation eachKey | eachAssociation := array at: eachIndex. nil == eachAssociation ifFalse: [ eachKey := eachAssociation key. aBlock value: eachAssociation value ] ]! ! RBAddClassChange removeSelector: #poolDictionaryNames! RBClass removeSelector: #poolDictionaryNames! TBehavior removeSelector: #poolDictionaryNames! !Trait method! sharedPoolNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! !Trait method! sharedPoolNames ^ self sharedPools collect: [:ea | self environment keyAtIdentityValue: ea]! ! "Collections-Weak"! "Monticello"! "MonticelloGUI"! "NautilusRefactoring"! "Refactoring-Changes"! "Refactoring-Core"! "Refactoring-Critics"! "Refactoring-Tests-Changes"! "Ring-Core-Kernel"! "System-Announcements"! "Traits"! ----End fileIn----! ----QUIT----an Array(8 November 2013 3:13:16 pm) Pharo.image priorSource: 26338946! ----STARTUP----an Array(8 November 2013 3:18:12 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 November 2013 3:18:13 pm) Pharo-30558.image priorSource: 26361546! ----STARTUP----an Array(8 November 2013 5:12:57 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/8/2013 17:09' prior: 76670901! commentForCurrentUpdate ^ '12117 Fix NewList >> #allowToSelect to use new ValueHolder API https://pharo.fogbugz.com/f/cases/12117 12048 Incorporate Ring extension methods in SourceFileArray https://pharo.fogbugz.com/f/cases/12048 12104 Optimize Dictionary>>valuesDo:, part 2 https://pharo.fogbugz.com/f/cases/12104 12072 Get rid of last hardcoded references to TransferMorph https://pharo.fogbugz.com/f/cases/12072'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/8/2013 17:10'! script215 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.27.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.126.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.887.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.136.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.969.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-EstebanLorenzano.12.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.199.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.121.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.39.mcz Spec-PolyWidgets-MarcusDenker.14.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1351.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/8/2013 17:10'! update30559 "self new update30559" self withUpdateLog: '12117 Fix NewList >> #allowToSelect to use new ValueHolder API https://pharo.fogbugz.com/f/cases/12117 12048 Incorporate Ring extension methods in SourceFileArray https://pharo.fogbugz.com/f/cases/12048 12104 Optimize Dictionary>>valuesDo:, part 2 https://pharo.fogbugz.com/f/cases/12104 12072 Get rid of last hardcoded references to TransferMorph https://pharo.fogbugz.com/f/cases/12072'. self loadTogether: self script215 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SourceFileArray methodsFor: 'source code management' stamp: 'VeronicaUquillas 8/2/2011 11:12' prior: 50630921! protocolAt: sourcePointer "Answer the protocol for a given method, retrieved from the sources or changes file. Answer unfound protocol if no protocol is available" ^ self protocolAt: sourcePointer for: self sourceDataPointers! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MarcusDenker 6/11/2013 14:40' prior: 39947447! protocolAt: sourcePointer for: sourceDataPointers "Answer the protocol for a given method, retrieved from the sources or changes file. Answer unfound protocol if no protocol is available." | preamble protocol tokens protocolPosition | protocol := 'unfound protocol'. "this is to indicate that the tagging in the source does not use the correct format. We will have to fix that. For example some traits methods are wrongly tagged. see http://code.google.com/p/pharo/issues/detail?id=4581" preamble := self sourcedDataAt: sourcePointer. preamble = 'Trait method' ifTrue: [ ^nil ]. (preamble includesSubstring: (sourceDataPointers key)) ifTrue: [ tokens := preamble parseLiterals. protocolPosition := tokens indexOf: sourceDataPointers key. protocolPosition = 0 ifFalse: [ "New format gives change protocol and unified prior pointer" protocol := tokens at: protocolPosition + 1] ]. ^protocol! ! !SourceFileArray methodsFor: 'source code management' stamp: 'StephaneDucasse 8/1/2011 19:34' prior: 50632309! sourceCodeAt: sourcePointer "Retrieves the source code for the pointer received as argument" | fileIndex filePosition | filePosition := self filePositionFromSourcePointer: sourcePointer. ^filePosition = 0 ifTrue: [ '' ] ifFalse:[ fileIndex := self fileIndexFromSourcePointer: sourcePointer. (RemoteString newFileNumber: fileIndex position: filePosition) string ]! ! !SourceFileArray methodsFor: 'private' stamp: 'StephaneDucasse 8/1/2011 21:45' prior: 50632781! sourceDataPointers "Retrieves the combination key to look for information of the receiver in the source file" "'Point methodsFor: ''point functions'' stamp: ''lr 7/4/2009 10:42'''." ^'methodsFor:' -> #stamp:! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MarcusDenker 10/7/2013 13:03' prior: 69976284! sourcedDataAt: sourcePointer | index position file preamble | index:= self fileIndexFromSourcePointer: sourcePointer. index = 0 ifTrue: [ ^'' ]. "no source pointer for this element" position := self filePositionFromSourcePointer: sourcePointer. file := self at: index. file ifNil: [ ^'' ]. "sources file not available" "file does not exist happens in secure mode" file := [file readOnlyCopy] on: FileDoesNotExistException do:[:ex| ^'' ]. self flag: 'I do not know why 3 is a good number'. preamble := self getPreambleFrom: file at: (0 max: position - 3). file close. ^preamble! ! !SourceFileArray methodsFor: 'source code management' stamp: 'StephaneDucasse 8/1/2011 19:37' prior: 50633808! timeStampAt: sourcePointer "Answer the authoring time-stamp for the given method, retrieved from the sources or changes file. Answer the empty string if no time stamp is available." ^ self timeStampAt: sourcePointer for: self sourceDataPointers ! ! !SourceFileArray methodsFor: 'source code management' stamp: 'MarcusDenker 6/11/2013 14:40' prior: 39948499! timeStampAt: sourcePointer for: sourceDataPointers "Answer the authoring time-stamp for the given method, retrieved from the sources or changes file. Answer the empty string if no time stamp is available." | preamble stamp tokens stampPosition | stamp := ''. preamble := self sourcedDataAt: sourcePointer. (preamble includesSubstring: sourceDataPointers key) ifTrue: [ tokens := preamble parseLiterals. stampPosition := tokens indexOf: sourceDataPointers value. stampPosition = 0 ifFalse: [ "New format gives change stamp and unified prior pointer" stamp := tokens at: stampPosition + 1]]. ^stamp! ! !NewListRenderer methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 11/5/2013 11:20' prior: 28426691! startDrag: evt | transferMorph draggedIndex draggedItem passenger | evt hand hasSubmorphs ifTrue: [^ self]. self dragEnabled ifFalse: [ ^ self ]. ActiveHand anyButtonPressed ifFalse: [ ^ self ]. draggedIndex := self indexAtLocation: evt position. draggedItem := self listSource model draggedItemAtIndex: draggedIndex. draggedItem ifNil: [ ^ self ]. passenger := self listSource transferFor: draggedItem from: self listSource. passenger ifNil: [ ^ self ]. self releaseKeyboardFocus. transferMorph := self listSource withPassenger: passenger from: self. transferMorph dropNotifyRecipient: self. transferMorph align: transferMorph draggedMorph bottomLeft with: ((evt position) translateBy: (self listSource bounds left)@(self listSource bounds top - self topDifference + self headerHeight - (3*self itemHeight/2))). "self mouseDownRow: nil." transferMorph dragTransferType: ((self model dragTransferTypeForMorph: self) ifNil: [ #dragTransfer ]). [evt hand grabMorph: transferMorph ] ensure: [ Cursor normal show. evt hand releaseMouseFocus: self] ! ! !FileList methodsFor: 'drag''n''drop' stamp: 'BenjaminVanRyseghem 11/5/2013 11:23' prior: 21858829! wantsDroppedMorph: aTransferMorph event: evt inMorph: dest | retval | retval := (aTransferMorph isTransferable) and: [ (aTransferMorph dragTransferType == #file) and: [ self isDirectoryList: dest ]]. ^retval! ! !NewListAdapter methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 11/5/2013 11:21'! transferFor: draggedItem from: aMorph ^ self model transferFor: draggedItem from: aMorph! ! !PluggableTreeMorph methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 11/5/2013 11:22' prior: 34005945! startDrag: anEvent | aTransferMorph itemMorph passenger | self dragEnabled ifTrue: [itemMorph := scroller submorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [anEvent hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. itemMorph ~= self selectedMorph ifTrue: [self setSelectedMorph: itemMorph]. passenger := dragItemSelector ifNil: [ self model dragPassengerFor: itemMorph withoutListWrapper inMorph: self ] ifNotNil: [ self model perform: dragItemSelector withEnoughArguments: { itemMorph withoutListWrapper. self } ]. passenger ifNotNil: [aTransferMorph := self model transferFor: passenger from: self. aTransferMorph dragTransferType: #dragTransfer. aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. anEvent hand grabMorph: aTransferMorph]. anEvent hand releaseMouseFocus: self! ! !Dictionary methodsFor: 'enumerating' stamp: 'SqR 11/7/2013 12:12' prior: 49513708! valuesDo: aBlock "Evaluate aBlock for each of the receiver's values. Implemented with == checks merely for the sake of maximum efficiency" tally = 0 ifTrue: [ ^self ]. 1 to: array size do: [ :eachIndex | | eachAssociation | eachAssociation := array at: eachIndex. nil == eachAssociation ifFalse: [ aBlock value: eachAssociation value ] ]! ! !NewList methodsFor: 'accessing' stamp: 'CamilloBruni 11/8/2013 16:36' prior: 36213735! allowToSelect ^ allowToSelect value! ! !NewList methodsFor: 'drag and drop' stamp: 'BenjaminVanRyseghem 11/5/2013 11:21'! transferFor: draggedItem from: aMorph ^ self model transferFor: draggedItem from: aMorph! ! "Collections-Unordered"! "Files"! "NewList"! "Polymorph-Widgets"! "Ring-Core-Kernel"! "Tools"! ----End fileIn----! ----QUIT----an Array(8 November 2013 5:13:07 pm) Pharo.image priorSource: 26361751! ----STARTUP----an Array(8 November 2013 5:17:53 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(8 November 2013 5:17:53 pm) Pharo-30559.image priorSource: 26381416! ----STARTUP----an Array(9 November 2013 10:17:03 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/9/2013 10:13' prior: 76693705! commentForCurrentUpdate ^ '12084 Move UITheme deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12084 12123 FileSystem.Tests.Core.PlatformResolverTest.testCache fails under Mac https://pharo.fogbugz.com/f/cases/12123 12122 Failing RGTraitDefinitionTest https://pharo.fogbugz.com/f/cases/12122 12118 Inspector keeps wrong view when diving https://pharo.fogbugz.com/f/cases/12118 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/9/2013 10:13'! script216 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.28.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.887.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.185.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.136.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.970.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.199.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.123.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.39.mcz Spec-PolyWidgets-MarcusDenker.14.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1351.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/9/2013 10:13'! update30560 "self new update30560" self withUpdateLog: '12084 Move UITheme deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12084 12123 FileSystem.Tests.Core.PlatformResolverTest.testCache fails under Mac https://pharo.fogbugz.com/f/cases/12123 12122 Failing RGTraitDefinitionTest https://pharo.fogbugz.com/f/cases/12122 12118 Inspector keeps wrong view when diving https://pharo.fogbugz.com/f/cases/12118 '. self loadTogether: self script216 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 18:37'! library ^ self userLibrary! ! !MacOSResolver methodsFor: 'resolving' stamp: 'CamilloBruni 11/8/2013 19:07' prior: 76641508! supportedOrigins ^ super supportedOrigins , #(userApplicationSupport systemApplicationSupport systemLibrary userLibrary)! ! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 18:35' prior: 76641685! systemApplicationSupport ^ self systemLibrary / 'Application Support'! ! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 19:06'! systemLibrary ^ FileSystem disk root / 'Library'! ! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 18:35' prior: 76641844! userApplicationSupport ^self userLibrary / 'Application Support'! ! !MacOSResolver methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 18:35'! userLibrary ^ self home / 'Library'! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37946540! backIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons backIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37946748! blankIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons blankIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 37946968! blankIconOfWidth: aNumber self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons blankIconOfWidth: aNumber ! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37947219! checkBoxOffIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOffIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37947441! checkBoxOnIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxOnIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37947661! checkBoxPressedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons checkBoxPressedIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37947891! configurationIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons configurationIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37948117! confirmIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons confirmIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37948331! errorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons errorIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37948541! expandBoxIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons expandBoxIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37948759! eyedropperIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons eyedropperIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37948979! forwardIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons forwardIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37949193! fullscreenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons fullscreenIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37949559! haloCollapseIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloCollapseIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37949783! haloDebugIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDebugIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37950001! haloDismissIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDismissIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37950223! haloDragIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDragIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37950439! haloDupIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloDupIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37950653! haloFontEmphIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontEmphIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37950877! haloFontSizeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontSizeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37951101! haloFontStyleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloFontStyleIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37951327! haloGrabIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloGrabIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37951543! haloHelpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloHelpIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37951759! haloMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloMenuIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37951975! haloPaintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloPaintIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37952193! haloRecolorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloRecolorIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37952415! haloRotIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloRotIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37952629! haloScaleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloScaleIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37952847! haloViewIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons haloViewIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37953063! helpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons helpIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37953271! homeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons homeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 37953489! iconNamed: aSymbol self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons iconNamed: aSymbol! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/10/2013 11:27' prior: 37953734! iconNamed: aSymbol ifNone: aBlock self deprecated: 'You need to use ThemeIcons current directly' on: '9 May 2013' in: '3.0'. ^ self icons iconNamed: aSymbol ifNone: aBlock! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37954118! imageIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons imageIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37954328! infoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons infoIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37954821! jumpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons jumpIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37955029! lockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons lockIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37955435! objectsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons objectsIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37955649! openIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons openIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37955857! paintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37956067! paintTabIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintTabIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37956283! paintingIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons paintingIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37956499! pharoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons pharoIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37956709! publishIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons publishIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37956923! questionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons questionIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37957139! radioButtonOffIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOffIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37957367! radioButtonOnIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonOnIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37957593! radioButtonPressedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons radioButtonPressedIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37957829! rotateIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons rotateIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37958041! scaleIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons scaleIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37958251! smallAuthoringToolsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallAuthoringToolsIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37958489! smallBackIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBackIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37958707! smallBarcodeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBarcodeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37958931! smallBoldIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallBoldIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37959149! smallCancelIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCancelIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37959371! smallCenteredIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCenteredIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37959597! smallConfigurationIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallConfigurationIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37959833! smallCopyIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCopyIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37960051! smallCutIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallCutIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37960267! smallDebugIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37960487! smallDebugItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDebugItIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37960711! smallDeleteIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDeleteIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37960933! smallDoItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallDoItIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37961151! smallErrorIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallErrorIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37961371! smallExpertIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallExpertIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37961593! smallExportIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallExportIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37961815! smallFindIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFindIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37962033! smallFontsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFontsIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37962253! smallForwardIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallForwardIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37962477! smallFullscreenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallFullscreenIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37962707! smallHelpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHelpIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37962925! smallHierarchyBrowserIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHierarchyBrowserIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37963167! smallHomeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallHomeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37963385! smallInfoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallInfoIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37963603! smallInspectItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallInspectItIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37963831! smallItalicIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallItalicIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37964053! smallJumpIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallJumpIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37964271! smallJustifiedIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallJustifiedIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37964499! smallLanguageIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLanguageIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37964725! smallLeftFlushIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLeftFlushIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37964953! smallLoadProjectIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLoadProjectIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37965185! smallLockIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallLockIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37965403! smallNewIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallNewIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37965619! smallObjectsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallObjectsIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37965843! smallOkIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallOkIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37966057! smallOpenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallOpenIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37966275! smallPaintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPaintIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37966495! smallPasteIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPasteIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37966715! smallPrintIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37966935! smallPrintItIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPrintItIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37967159! smallPublishIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPublishIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37967383! smallPushpinIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallPushpinIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37967607! smallQuestionIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallQuestionIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37967833! smallQuitIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallQuitIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37968051! smallRedoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRedoIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37968269! smallRemoteOpenIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRemoteOpenIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37968499! smallRightFlushIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallRightFlushIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37968729! smallSaveAsIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveAsIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37968951! smallSaveIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSaveIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37969169! smallScreenshotIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallScreenshotIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37969399! smallSelectIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSelectIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37969621! smallStrikeOutIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallStrikeOutIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37969849! smallSystemBrowserIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallSystemBrowserIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37970085! smallUnderlineIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUnderlineIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37970313! smallUndoIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUndoIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37970531! smallUpdateIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallUpdateIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37970753! smallVolumeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallVolumeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37970975! smallWarningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallWarningIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37971199! smallWindowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons smallWindowIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37971421! solidMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons solidMenuIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37971639! tinyMenuIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons tinyMenuIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37971855! upArrowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons upArrowIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37972069! volumeIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons volumeIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37972281! warningIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons warningIcon.! ! !UITheme methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:44' prior: 37972495! windowIcon self deprecated: 'You need to use Smalltalk ui icons' on: '10 May 2013' in: '3.0'. ^ self icons windowIcon.! ! !EyeInspectorToolBar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/8/2013 16:58' prior: 74097068! defaultSpec ^ SpecLayout composed newRow: [ :r | r add: #previousButton width: 24; add: #nextButton width: 28; add: #inspectorChoice ]; yourself.! ! !RGClassDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'CamilloBruni 11/8/2013 18:27' prior: 31600449! testAsFullClassDefinition "self debug: #testAsFullClassDefinition" | rgClass | rgClass := Class asRingDefinition. self assert: rgClass methods isEmpty. self assert: rgClass superclass isNil. self assert: rgClass subclasses isEmpty. self assert: rgClass package name equals: #Kernel. rgClass := Class asFullRingDefinition. self assert: rgClass methods notEmpty. self assert: (rgClass methodNamed: #asRingDefinition) package name = #'Ring-Core-Kernel'. self assert: rgClass superclass notNil. self assert: rgClass superclass name = #ClassDescription. self assert: rgClass subclasses notEmpty. self assert: rgClass package notNil. self assert: rgClass package = rgClass theNonMetaClass package. self assert: rgClass package name = #Kernel. self assert: rgClass category = #'Kernel-Classes'. self assert: rgClass extensionMethods notEmpty. self assert: rgClass superclass superclass isNil. self assert: rgClass superclass package name equals: #Kernel. self assert: rgClass subclasses first package name equals: #Kernel. rgClass := RGClassDefinition theMetaClass asFullRingDefinition. self assert: rgClass package = rgClass theNonMetaClass package.! ! !InspectorNavigator class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/8/2013 16:56' prior: 68599281! debuggerSpec ^ SpecLayout composed newRow: #toolbar height: self toolbarHeight; add: #inspector withSpec: #debuggerSpec top: self toolbarHeight; yourself! ! !InspectorNavigator class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/8/2013 16:57' prior: 68599630! inspectorSpec ^ SpecLayout composed newColumn: [ :c | c add: #toolbar height: self toolbarHeight; add: #inspector withSpec: #inspectorSpec ]; yourself! ! !InspectorNavigator methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 16:50' prior: 68604767! inspectorType: anInspectorClass "Use a new inspector type. Instantiate the given inspector class and replace the current view" anInspectorClass = self inspector class ifTrue: [ ^ self ]. anInspectorClass isNil ifTrue: [ ^ self ]. (self inspectorTypes includes: anInspectorClass) ifFalse: [ ^ self ]. self basicInspector: (anInspectorClass new inspect: self object; yourself). history replaceCurrentWith: self inspector. self toolbar update.! ! !RGMethodDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'CamilloBruni 11/8/2013 18:25' prior: 31715107! testAsFullMethodDefinition "self debug: #testAsFullMethodDefinition" | rgMethod | rgMethod := (Trait >> #asRingDefinition) asRingDefinition. self assert: rgMethod parent isNil. self assert: rgMethod package isNil. rgMethod := (Trait >> #asRingDefinition) asFullRingDefinition. self assert: rgMethod parent notNil. self assert: rgMethod parentName = #Trait. self assert: rgMethod parent methods size = 1. self assert: rgMethod parent package name equals: #Traits. self assert: rgMethod package notNil. self assert: rgMethod package name = #'Ring-Core-Kernel'.! ! !FileLocator class methodsFor: 'origins' stamp: 'CamilloBruni 11/8/2013 18:39'! cache ^ self origin: #cache! ! !FileLocator class methodsFor: 'mac-origins' stamp: 'CamilloBruni 11/8/2013 19:06'! systemLibrary ^ self origin: #systemLibrary! ! !FileLocator class methodsFor: 'mac-origins' stamp: 'CamilloBruni 11/8/2013 18:38'! userLibrary ^ self origin: #userLibrary! ! !RGTraitDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'CamilloBruni 11/8/2013 18:26' prior: 44907406! testAsFullTraitDefinition "self debug: #testAsFullTraitDefinition" | rgClass | rgClass := TBehavior asRingDefinition. self assert: rgClass methods isEmpty. self assert: rgClass superclass isNil. self assert: rgClass subclasses isEmpty. self assert: rgClass package isNil. rgClass := TBehavior asFullRingDefinition. self assert: rgClass methods notEmpty. self assert: (rgClass methodNamed: #allSelectors) package notNil. self assert: rgClass superclass notNil. self assert: rgClass superclass name = #Trait. self assert: rgClass subclasses isEmpty. self assert: rgClass package notNil. self assert: rgClass package = rgClass theNonMetaClass package. self assert: rgClass package name = #Traits. self assert: rgClass category = #'Traits-Kernel-Traits'. self assert: rgClass superclass superclass isNil. self assert: rgClass superclass package name equals: #Traits. rgClass := TBehavior theMetaClass asFullRingDefinition. self assert: rgClass package = rgClass theNonMetaClass package.! ! "Deprecated30"! "FileSystem-Core"! "Polymorph-Widgets"! "Ring-Tests-Monticello"! "Spec-Inspector"! ----End fileIn----! ----QUIT----an Array(9 November 2013 10:17:13 am) Pharo.image priorSource: 26381621! ----STARTUP----an Array(9 November 2013 10:22:02 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 November 2013 10:22:02 am) Pharo-30560.image priorSource: 26425858! ----STARTUP----an Array(9 November 2013 10:48:55 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/9/2013 10:44' prior: 76713576! commentForCurrentUpdate ^ '12121 Nautilus menu code pane menu does not open when only selecting a package but no class https://pharo.fogbugz.com/f/cases/12121 12119 Inspector double click without wrapping Navigator should open new inspector https://pharo.fogbugz.com/f/cases/12119 12054 Add TreeNodeModel and TreeColumnModel https://pharo.fogbugz.com/f/cases/12054'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/9/2013 10:44'! script217 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.28.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.62.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.887.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.188.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.970.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.202.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.124.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.45.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.284.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1351.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/9/2013 10:44'! update30561 "self new update30561" self withUpdateLog: '12121 Nautilus menu code pane menu does not open when only selecting a package but no class https://pharo.fogbugz.com/f/cases/12121 12119 Inspector double click without wrapping Navigator should open new inspector https://pharo.fogbugz.com/f/cases/12119 12054 Add TreeNodeModel and TreeColumnModel https://pharo.fogbugz.com/f/cases/12054'. self loadTogether: self script217 merge: false. SpecInterpreter hardResetBindings. . self flushCaches. ! ! "ScriptLoader30"! !MorphicTreeColumnAdapter commentStamp: '' prior: 0! I am the bridge between a TreeColumnModel and a MorphTreeColumn. Ialso add support for on the fly refresh! !MorphicTreeNodeAdapter commentStamp: '' prior: 0! I am the bridget between a TreeNodeModel and a SpecTreeNodeModel! !SpecTreeNodeModel commentStamp: '' prior: 0! I am a Tree node especially made for being used by the Spec framework.! !SpecTreeColumn commentStamp: '' prior: 0! I am a Tree column made especially to be used by the Spec framework! !EyeFileSystemInspector commentStamp: '' prior: 0! I am an inspector dedicated to the visualization of file systems! !TreeColumnModel commentStamp: '' prior: 0! I represent a tree column. I am used to specify how to render nodes, as well as the header title, icon , action on click and properties (resizable, initial width)! !TreeModel commentStamp: '' prior: 69531606! I am the Spec model of a MorphTreeMorph tree.! !TreeNodeModel commentStamp: '' prior: 0! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !MorphicTreeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/8/2013 11:59' prior: 69672454! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/8/2013 11:58' prior: 69674480! columns ^ self model columns collect: [ :each | each buildWithSpec ]! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:01'! columns: newColumns self widgetDo: [ :w || columns | columns := newColumns collect: [ :each | each buildWithSpec ]. w columns: columns. w resizerChanged. w updateList ]! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/8/2013 11:58' prior: 76603858! expandAll self treeModel expandAll! ! !MorphicTreeAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/8/2013 11:58' prior: 69675789! initialize super initialize. treeModel := SpecTreeModel model: self. treeModel announcer on: MorphTreeSelectionChanged send: #onMorphTreeSelectionChanged: to: self.! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 19:50'! removeRootsSuchAs: aBlock self widgetDo: [ :w | w model rootNodes removeAllSuchThat: [ :node | aBlock value: node nodeModel ] ]! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/8/2013 11:59' prior: 76604028! rootNodeFromItem: item | node | node := self rootNodeHolder cull: item. node container: self model. ^ node buildWithSpec! ! !MorphicTreeAdapter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 11:59' prior: 69677699! rootNodeHolder ^ self model rootNodeHolder! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/8/2013 11:58' prior: 76626862! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #TreeColumnAdapter put: #MorphicTreeColumnAdapter; at: #TreeNodeAdapter put: #MorphicTreeNodeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !MorphicTreeColumnAdapter commentStamp: '' prior: 76769690! I am the bridge between a TreeColumnModel and a MorphTreeColumn. Ialso add support for on the fly refresh! !MorphicTreeColumnAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/2/2013 19:34'! defaultSpec ^ #(SpecTreeColumn resizable: #(model resizable) startWidth: #(model initialWidth) setHeaderButtonLabel:font:icon:target:actionSelector: #(model headerLabel) #(model headerFont) #(model headerIcon) model #(model performHeaderActionSelector) rowMorphGetSelector: #(model displayBlock))! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:54'! argumentBlock ^ [ Array with: self model ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 17:23'! displayBlock ^ self model displayBlock! ! !MorphicTreeColumnAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 18:18'! displayBlockChanged self widgetDo: [ :w | w rowMorphGetSelector: self displayBlock. w container updateList ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:57'! headerAction ^ self model headerAction! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:57'! headerFont ^ self model headerFont! ! !MorphicTreeColumnAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 17:52'! headerFontChanged self widgetDo: [ :w | w header label: self headerLabel font: self headerFont. w container resizerChanged ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:57'! headerIcon ^ self model headerIcon! ! !MorphicTreeColumnAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/8/2013 20:18'! headerIconChanged self widgetDo: [ :w | self headerIcon ifNil: [ w header removeIcon ] ifNotNil: [ w header icon: (ImageMorph new form: self headerIcon) ] ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 17:03'! headerLabel ^ self model headerLabel! ! !MorphicTreeColumnAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 17:52'! headerLabelChanged self widgetDo: [ :w | w header label: self headerLabel. w container resizerChanged ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:55'! initialWidth ^ self model initialWidth! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 17:18'! performHeaderAction self headerAction cull: self model cull: self! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 19:34'! performHeaderActionSelector ^ self headerAction ifNil: [ nil ] ifNotNil: [ #performHeaderAction ]! ! !MorphicTreeColumnAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 16:54'! resizable ^ self model resizable! ! !MorphicTreeColumnAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 17:53'! resizableChanged self widgetDo: [ :w | w resizable: self resizable ]! ! !MorphicTreeColumnAdapter methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/2/2013 17:45'! update: aSymbol aSymbol == #displayBlockChanged ifTrue: [ ^ self displayBlockChanged ]. aSymbol == #resizableChanged ifTrue: [ ^ self resizableChanged ]. aSymbol == #headerLabelChanged ifTrue: [ ^ self headerLabelChanged ]. aSymbol == #headerFontChanged ifTrue: [ ^ self headerFontChanged ]. aSymbol == #headerIconChanged ifTrue: [ ^ self headerIconChanged ]. ^ super update: aSymbol! ! !MorphicTreeNodeAdapter commentStamp: '' prior: 76769861! I am the bridget between a TreeNodeModel and a SpecTreeNodeModel! !MorphicTreeNodeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/2/2013 19:01'! defaultSpec ^ #(SpecTreeNodeModel setItem:#(model item) icon: #(model icon) setChildren: #(model childrenBlock))! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 19:06'! buildWidget widget := super buildWidget. widget model: self container. widget nodeModel: self model. ^ widget! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 19:56'! childrenBlock ^ [ self model children ]! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 18:53'! container ^ self model container! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 18:55'! icon ^ self model icon! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/2/2013 18:53'! item ^ self model content! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'TorstenBergmann 11/8/2013 17:37' prior: 48421955! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNotNilDo: [:selectedClass | selectedClass sourceCodeRefactoring: aBuilder ]! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'TorstenBergmann 11/8/2013 17:36' prior: 48422224! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. target selectedClass ifNotNilDo: [:selectedClass | selectedClass sourceCodeRefactoringMenu: aBuilder ].! ! !SpecTreeNodeModel commentStamp: '' prior: 76769985! I am a Tree node especially made for being used by the Spec framework.! !SpecTreeNodeModel methodsFor: 'compatibility' stamp: 'BenjaminVanRyseghem 11/2/2013 18:58'! bindKeyCombination: aShortcut toAction: aBlock "Do nothing"! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/2/2013 20:18'! childNodeFromItem: anItem ^ anItem asTreeNodeModel buildWithSpec! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:46'! childrenItems ^ childrenItems! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:46'! childrenItems: aCollection childrenItems := aCollection! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 18:33'! contents ^ contents ifNil: [ contents := self childrenItems collect: [:ci | self childNodeFromItem: ci ] ]! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/8/2013 18:32'! hasContents ^ self childrenItems notEmpty! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 18:15'! helpText ^ nodeModel help! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:44'! icon ^ icon! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:45'! icon: anIcon icon := anIcon! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 19:05'! nodeModel ^ nodeModel! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 19:05'! nodeModel: anObject nodeModel := anObject! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:56'! setChildren: aBlock self childrenItems: aBlock value! ! !InspectorNavigator methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/8/2013 17:55' prior: 74097807! customMenuActions ^ [:aMenu | aMenu add: 'Dive Into (d)' translated target: self selector: #diveIntoSelectedObject. (history hasPrevious or: [ history hasNext ]) ifTrue: [ aMenu addLine ]. history hasPrevious ifTrue: [ aMenu add: 'Back ([)' translated target: self selector: #inspectPrevious ]. history hasNext ifTrue: [ aMenu add: 'Forward (])' translated target: self selector: #inspectNext ]. ]! ! !InspectorNavigator methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 11/8/2013 17:55'! diveIntoSelectedObject self inspector diveIntoSelectedObject! ! !MorphicDialogWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/8/2013 11:57' prior: 76553311! defaultSpec ^ #( SpecDialogWindow specWidget: #(model contentMorph) initialize model: model )! ! !MorphTreeColumn methodsFor: 'column drawing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:24' prior: 41531486! headerButtonLabel: aLabel font: aFont icon: anIconForm target: aReceiver actionSelector: aSelector arguments: aCollection self headerButton. self header label: aLabel font: aFont. self header icon: (ImageMorph new form: anIconForm). self header actionSelector: aSelector. self header target: aReceiver. self header arguments: aCollection! ! !MorphTreeColumn methodsFor: 'column drawing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:22' prior: 41531948! headerButtonLabel: aLabel icon: anIconForm self headerButtonLabel: aLabel font: nil. self header cellInset: 3@0. self header icon: (ImageMorph new form: anIconForm)! ! !MorphTreeColumn methodsFor: 'accessing' stamp: 'AlainPlantec 10/3/2011 09:59' prior: 26893014! nodeStringGetter: aSelectorOrAValuable rowMorphGetSelector := aSelectorOrAValuable isSymbol ifTrue: [[:node | (node complexContents perform: aSelectorOrAValuable) asMorph]] ifFalse: [[:node | (aSelectorOrAValuable value: node complexContents ) asMorph]]! ! !MorphTreeColumn methodsFor: 'column drawing' stamp: 'BenjaminVanRyseghem 11/2/2013 17:32' prior: 26898765! rowMorphFor: aNode | rowMorph | rowMorph := self rowMorphGetSelector ifNil: [aNode rowMorphForColumn: self] ifNotNil: [self rowMorphGetterBlock value: aNode value: self container]. rowMorph := rowMorph asMorph. rowMorph ifNotNil: [rowMorph borderWidth: 0] ifNil: [rowMorph := self defaultRowMorph]. ^ rowMorph rowMorphForNode: aNode inColumn: self ! ! !SpecTreeColumn commentStamp: '' prior: 76770112! I am a Tree column made especially to be used by the Spec framework! !SpecTreeColumn methodsFor: 'compatibility' stamp: 'BenjaminVanRyseghem 11/2/2013 19:03'! bindKeyCombination: aKMCombination toAction: aBlock "Do nothing" ! ! !SpecTreeColumn methodsFor: 'column drawing' stamp: 'BenjaminVanRyseghem 11/2/2013 19:05'! rowMorphFor: aNode | node rowMorph | node := aNode nodeModel. rowMorph := self rowMorphGetSelector ifNil: [node rowMorphForColumn: self] ifNotNil: [self rowMorphGetterBlock value: node value: self container]. rowMorph := rowMorph asMorph. rowMorph ifNotNil: [rowMorph borderWidth: 0] ifNil: [rowMorph := self defaultRowMorph]. ^ rowMorph rowMorphForNode: node inColumn: self ! ! !SpecTreeColumn methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/2/2013 19:34'! setHeaderButtonLabel: aLabel font: aFont icon: anIconForm target: aReceiver actionSelector: aSelector (aLabel isNil and: [ anIconForm isNil and: [ aReceiver isNil or: [ aSelector isNil ]]]) ifTrue: [ ^ self ]. self headerButton. aLabel ifNil: [ self header label: '' font: nil ] ifNotNil: [ self header label: aLabel font: aFont ]. anIconForm ifNotNil: [ self header icon: (ImageMorph new form: anIconForm) ]. (aSelector notNil and: [ aReceiver notNil ]) ifTrue: [ self header actionSelector: aSelector. self header target: aReceiver ]! ! !EyeFileSystemInspector commentStamp: '' prior: 76770244! I am an inspector dedicated to the visualization of file systems! !EyeAbstractInspector methodsFor: 'event-handling' stamp: 'BenjaminVanRyseghem 11/8/2013 17:52' prior: 68582701! diveInto: anObject self owner ifNotNil: [ :navigator | (navigator respondsTo: #diveInto:) ifTrue: [ ^ navigator diveInto: anObject ] ]. self inspectInNewWindow: anObject.! ! !TInspectorActions methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 11/8/2013 17:52'! inspectInNewWindow: anObject anObject inspect! ! !TInspectorActions methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 11/8/2013 17:52' prior: 74081200! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | self inspectInNewWindow: anObject ].! ! !TreeColumnModel commentStamp: '' prior: 76770366! I represent a tree column. I am used to specify how to render nodes, as well as the header title, icon , action on click and properties (resizable, initial width)! !TreeColumnModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/2/2013 20:09'! defaultSpec ^ #(TreeColumnAdapter adapt: #(model))! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:57'! container ^ container value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:58'! container: aTreeModel container value: aTreeModel! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:36'! displayBlock ^ displayBlock value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:36'! displayBlock: aBlock displayBlock value: aBlock! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:00'! headerAction ^ headerAction value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:00'! headerAction: aBlock headerAction value: aBlock! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerFont ^ headerFont value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerFont: aFont headerFont value: aFont! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerIcon ^ headerIcon value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerIcon: anIcon headerIcon value: anIcon! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerLabel ^ headerLabel value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! headerLabel: aString headerLabel value: aString! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:58'! initialWidth ^ initialWidth value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 16:59'! initialWidth: anInteger initialWidth value: anInteger! ! !TreeColumnModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/2/2013 19:32'! initialize super initialize. container := nil asValueHolder. displayBlock := [ :node | node printString ] asValueHolder. initialWidth := 100 asValueHolder. resizable := true asValueHolder. headerLabel := nil asValueHolder. headerFont := StandardFonts defaultFont asValueHolder. headerIcon := nil asValueHolder. headerAction := nil asValueHolder. self registerEvents! ! !TreeColumnModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/2/2013 17:44'! registerEvents displayBlock whenChangedDo: [ self changed: #displayBlockChanged ]. resizable whenChangedDo: [ self changed: #resizableChanged ]. headerLabel whenChangedDo: [ self changed: #headerLabelChanged ]. headerFont whenChangedDo: [ self changed: #headerFontChanged ]. headerIcon whenChangedDo: [ self changed: #headerIconChanged ]! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:00'! resizable ^ resizable value! ! !TreeColumnModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 17:00'! resizable: aBoolean resizable value: aBoolean! ! !TreeModel commentStamp: '' prior: 76770587! I am the Spec model of a MorphTreeMorph tree.! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/2/2013 19:38'! exampleWithCustomColumnsAndNodes "self exampleWithCustomColumnsAndNodes" | m col1 col2 | m := TreeModel new. m roots: #(#a #b #c #d). m rootNodeHolder: [ :item | TreeNodeModel new content: item; icon: Smalltalk ui icons smallConfigurationIcon ]. m openWithSpec. col1 := TreeColumnModel new displayBlock: [ :node | node content asString ]; headerLabel: 'Character'. col2 := TreeColumnModel new displayBlock: [ :node | (Character value: node content asString first asciiValue + 1) asString ]; headerLabel: 'Character +1'; headerIcon: Smalltalk ui icons smallBackIcon. m columns: {col1. col2}; dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]. col2 headerLabel: 'Character +2'; headerIcon: Smalltalk ui icons smallBackIcon; displayBlock: [ :node | (Character value: node content asString first asciiValue + 2) asString ]. m rootNodeHolder: [ :item | TreeNodeModel new content: (Character value: (item asString first asciiValue + 5)) asSymbol; icon: Smalltalk ui icons smallFullscreenIcon ]. col1 headerIcon: Smalltalk ui icons nautilusIcon.! ! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/2/2013 20:19'! exampleWithCustomColumnsAndNodesAndChildren "self exampleWithCustomColumnsAndNodesAndChildren" | m col1 col2 | m := TreeModel new. m roots: #(#a #b #c #d). m rootNodeHolder: [ :item | TreeNodeModel new content: item; children: ((1 to: item asString first asciiValue) collect: [:e | TreeNodeModel new content: e ]); icon: Smalltalk ui icons smallConfigurationIcon ]. m openWithSpec. col1 := TreeColumnModel new displayBlock: [ :node | node content asString ]; headerAction: [ self halt ]. col2 := TreeColumnModel new displayBlock: [ :node | (Character value: node content asString first asciiValue + 1) asString ]. m columns: {col1. col2}; dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]. col2 displayBlock: [ :node | (Character value: node content asString first asciiValue + 2) asString ].! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/2/2013 20:16' prior: 69537209! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [ :each | each icon ] asValueHolder. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: (self childrenFor: item) ] asValueHolder. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/2/2013 18:48' prior: 71831060! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | col do: [ :each | each container: self ]. self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. rootNodeHolder whenChangedDo: [ :aBlock | self updateTree ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:37'! rootNodeHolder ^ rootNodeHolder value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/8/2013 12:00' prior: 69542006! rootNodeHolder: aBlock rootNodeHolder value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/2/2013 19:21'! selection: aSelection self changed: #selection: with: { aSelection }! ! !TreeNodeModel commentStamp: '' prior: 76770688! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !TreeNodeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/2/2013 20:08'! defaultSpec ^ #(TreeNodeAdapter adapt: #(model))! ! !TreeNodeModel methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 11/2/2013 20:19'! asTreeNodeModel ^ self! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:33'! children ^ children value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:33'! children: aCollection children value: aCollection! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:38'! container ^ container value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:38'! container: anObject container value: anObject! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:34'! content ^ content value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:34'! content: anObject content value: anObject! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/2/2013 19:42'! contents ^ contents ifNil: [ contents := self children ]! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:34'! icon ^ icon value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 18:34'! icon: anIcon icon value: anIcon! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/2/2013 18:41'! initialize super initialize. children := OrderedCollection new asValueHolder. content := nil asValueHolder. icon := nil asValueHolder. container := nil asValueHolder. matchTokenFilter := [ :aFilter | false ] asValueHolder! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/2/2013 19:19'! isEmpty ^ self contents isEmpty! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/2/2013 19:26'! matchTokenFilter: aFilter ^ self matchTokenFilterBlock value: aFilter! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 19:19'! matchTokenFilterBlock ^ matchTokenFilter value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/2/2013 19:28'! matchTokenFilterBlock: aBlock matchTokenFilter value: aBlock! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/2/2013 19:18'! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self contents do: [ :n | n updateAccordingTo: aFilter ]. self contents removeAllSuchThat: [ :n | (aFilter keepTreeNode: n) not and: [ n isEmpty] ] ]! ! !MorphTreeColumnButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/2/2013 18:20'! icon ^ icon! ! !MorphTreeColumnButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 19:08'! icon: anIcon icon ifNotNil: [ self removeMorph: icon ]. anIcon ifNotNil: [ icon := anIcon. self addMorphFront: anIcon ]! ! !MorphTreeColumnButton methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 20:17'! removeIcon icon ifNotNil: [ self removeMorph: icon ].! ! !MorphTreeMorph methodsFor: 'column handling' stamp: 'BenjaminVanRyseghem 11/2/2013 18:14' prior: 35622516! columns: aListOfTreeColumn "set the columns - as a consequence, the topHeader is update (if present) and column resizers are added" self removeColumnResizers. topHeader ifNotNil: [ self removeMorph: topHeader ]. columns := aListOfTreeColumn asOrderedCollection. aListOfTreeColumn do: [:col | col container: self]. self buildTopHeader . self addColumnResizers. ! ! !EyeInspector methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/8/2013 17:54' prior: 68589267! list ^ list ifNil: [ list := self instantiate: NewListModel. list handlesDoubleClick: true; whenSelectedItemChanged: [ :item | self refreshDescription: item ]; doubleClickAction: [ self diveIntoSelectedObject ]. ]! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/2/2013 20:08' prior: 76244097! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #TreeColumnAdapter put: #TreeColumnAdapter; at: #TreeNodeAdapter put: #TreeNodeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/8/2013 12:00' prior: 69594541! initializeWidgets self instantiateModels: #( tree TreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | TreeNodeModel new content: item; matchTokenFilterBlock: [ :aFilter | aFilter token ifEmpty: [ true ] ifNotEmpty: [ item asString asLowercase includesSubstring: aFilter token asLowercase ] ] ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'Search'; entryCompletion: nil; acceptOnCR: true. self focusOrder add: tree; add: inputField! ! !SearchableTree methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/8/2013 12:00' prior: 69598275! updateRootFor: aText | aFilter nodes | aFilter := TokenTreeFilter token: aText. tree selection: nil. tree updateTree. nodes := (tree roots collect: [ :e | (tree rootNodeHolder cull: e) ]) asOrderedCollection. nodes do: [:r | r updateAccordingTo: aFilter]. tree changed: #removeRootsSuchAs: with: { [:n | (aFilter keepTreeNode: n) not and: [n isEmpty]] }. tree expandAll. tree changed: #rootNodes.! ! !Object methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/2/2013 20:17'! asTreeNodeModel ^ TreeNodeModel new content: self! ! InspectorNavigator removeSelector: #dive! EyeInspector removeSelector: #dive! !Trait method! inspectInNewWindow: anObject anObject inspect! ! !Trait method! inspectInNewWindow: anObject anObject inspect! ! !Trait method! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | self inspectInNewWindow: anObject ].! ! !Trait method! inspectSelectedObjectInNewWindow self selectedObjectDo: [ :anObject | self inspectInNewWindow: anObject ].! ! "Morphic-Base"! "NautilusRefactoring"! "Spec-Core"! "Spec-Inspector"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----an Array(9 November 2013 10:49:05 am) Pharo.image priorSource: 26426065! ----STARTUP----an Array(9 November 2013 10:53:49 am) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 November 2013 10:53:49 am) Pharo-30561.image priorSource: 26470779! ----STARTUP----an Array(9 November 2013 2:56:59 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/9/2013 14:53' prior: 76758021! commentForCurrentUpdate ^ '12128 Settings do not open due to MNU: SettingTree >> #helpText https://pharo.fogbugz.com/f/cases/12128 2486 Linux VM: Umlaute in file/directory names: UTF8 unicode problem? https://pharo.fogbugz.com/f/cases/2486 12115 Newly added Monticello Packages do not include the default repository group https://pharo.fogbugz.com/f/cases/12115'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/9/2013 14:54'! script218 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.28.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.889.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.188.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.970.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.202.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.124.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.45.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.286.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-StephaneDucasse.19.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1351.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/9/2013 14:54'! update30562 "self new update30562" self withUpdateLog: '12128 Settings do not open due to MNU: SettingTree >> #helpText https://pharo.fogbugz.com/f/cases/12128 2486 Linux VM: Umlaute in file/directory names: UTF8 unicode problem? https://pharo.fogbugz.com/f/cases/2486 12115 Newly added Monticello Packages do not include the default repository group https://pharo.fogbugz.com/f/cases/12115'. self loadTogether: self script218 merge: false. MCPackage allInstances select: [ :e | e workingCopy repositoryGroup repositories size < 2 ] thenDo: [:e | ((MCPackage named: 'Kernel') workingCopy repositoryGroup repositories) do: [:r | e workingCopy repositoryGroup addRepository: r ]]. . self flushCaches. ! ! "ScriptLoader30"! !MCWorkingCopy methodsFor: 'operations' stamp: 'abc 11/8/2013 17:11' prior: 67278950! newVersionWithName: nameString message: messageString in: aRepository | info deps | info := ancestry infoWithName: nameString message: messageString. ancestry := MCWorkingAncestry new addAncestor: info. self modified: true; modified: false. deps := self collectDependenciesWithMessage: messageString in: aRepository. (self repositoryGroup includes: aRepository) ifFalse: [ self repositoryGroup addRepository: aRepository ]. ^ MCVersion package: package info: info snapshot: package snapshot dependencies: deps! ! !SettingNode methodsFor: 'accessing' stamp: 'CamilloBruni 11/9/2013 14:40'! helpText ^ self item description ifEmpty: [ nil ]! ! !MCPatch methodsFor: 'intializing' stamp: 'BenjaminVanRyseghem 11/8/2013 15:41' prior: 24917054! initializeWithBase: baseSnapshot target: targetSnapshot | base target | operations := OrderedCollection new. base := MCDefinitionIndex definitions: baseSnapshot definitions. target := MCDefinitionIndex definitions: targetSnapshot definitions. target definitions do: [ :t | base definitionLike: t ifPresent: [:b | (b isSameRevisionAs: t) ifFalse: [operations add: (MCModification of: b to: t)]] ifAbsent: [operations add: (MCAddition of: t)] ] displayingProgress: 'Diffing...'. base definitions do: [:b | target definitionLike: b ifPresent: [:t] ifAbsent: [operations add: (MCRemoval of: b)]] ! ! !MCRepository methodsFor: 'adding' stamp: 'abc 11/8/2013 17:11'! addTo: aRepository ^ aRepository addBasicRepository: self! ! !FileSystemTest methodsFor: 'tests' stamp: 'CamilloBruni 11/5/2013 17:42' prior: 22079063! testFileNames | reference | #('test one' 'test with two' 'test-äöü' 'test.äöü') do: [ :each | reference := filesystem workingDirectory / each. self assert: reference basename = each. self deny: reference exists. reference writeStreamDo: [ :stream | stream nextPutAll: 'gooly' ] ifPresent: [ self fail ]. [ self assert: reference exists. self assert: (filesystem workingDirectory children anySatisfy: [ :ref | ref = reference ]) ] ensure: [ reference delete ] ]! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'abc 11/8/2013 17:09'! addBasicRepository: aRepository ((repositories includes: aRepository) or: [ aRepository == MCCacheRepository uniqueInstance ]) ifFalse: [ repositories add: aRepository. self class default addRepository: aRepository ]. ^ aRepository! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'abc 11/8/2013 17:09' prior: 46296650! addRepository: aRepository aRepository addTo: self. ^ aRepository! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'abc 11/8/2013 17:10'! addRepositoryGroup: aRepositoryGroup aRepositoryGroup repositoriesDo: [ :each | each addTo: self ]! ! !MCRepositoryGroup methodsFor: 'adding' stamp: 'abc 11/8/2013 17:10'! addTo: aRepository ^ aRepository addRepositoryGroup: self! ! "FileSystem-Tests-Core"! "Monticello"! "System-Settings"! ----End fileIn----! ----QUIT----an Array(9 November 2013 2:57:06 pm) Pharo.image priorSource: 26470986! ----STARTUP----an Array(9 November 2013 3:02:03 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 November 2013 3:02:03 pm) Pharo-30562.image priorSource: 26486163! ----STARTUP----an Array(9 November 2013 5:57:58 pm) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/9/2013 17:54' prior: 76802941! commentForCurrentUpdate ^ '12129 FileLocator is not initialized at the right point during startup https://pharo.fogbugz.com/f/cases/12129 12075 Fix TextActions and Add SourceWebBrowser for TextUrl https://pharo.fogbugz.com/f/cases/12075 1047 MCDataStream has strong Dictionary a class variable, preventing classes to be GCd. https://pharo.fogbugz.com/f/cases/1047 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/9/2013 17:54'! script219 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.28.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.47.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1678.mcz KernelTests-StephaneDucasse.583.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.188.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.970.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.202.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.124.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.45.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.286.mcz System-Sound-MarcusDenker.16.mcz System-Support-StephaneDucasse.978.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1352.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/9/2013 17:54'! update30563 "self new update30563" self withUpdateLog: '12129 FileLocator is not initialized at the right point during startup https://pharo.fogbugz.com/f/cases/12129 12075 Fix TextActions and Add SourceWebBrowser for TextUrl https://pharo.fogbugz.com/f/cases/12075 1047 MCDataStream has strong Dictionary a class variable, preventing classes to be GCd. https://pharo.fogbugz.com/f/cases/1047 '. self loadTogether: self script219 merge: false. FileLocator startUp: true. . self flushCaches. ! ! "ScriptLoader30"! !SourceWebBrowser class methodsFor: 'tool registry' stamp: 'SeanDeNigris 11/5/2013 14:43'! initialize self registerToolsOn: Smalltalk tools.! ! !SourceWebBrowser class methodsFor: 'instance creation' stamp: 'SeanDeNigris 11/5/2013 15:02'! openOnUrl: aString | source | source := (ZnEasy get: aString) contents. self new toggleStylingActive; contents: source; openLabel: aString.! ! !SourceWebBrowser class methodsFor: 'tool registry' stamp: 'SeanDeNigris 11/5/2013 14:42'! registerToolsOn: registry registry register: self as: #webBrowser ! ! !PluggableTextAttribute methodsFor: 'evaluating' stamp: 'SeanDeNigris 11/5/2013 14:20'! actOnClick: anEvent for: anObject in: paragraph editor: editor evalBlock ifNil: [ ^self ]. evalBlock numArgs = 0 ifTrue: [ evalBlock value. ^true ]. evalBlock numArgs = 1 ifTrue: [ evalBlock value: anObject. ^true ]. self error: 'evalBlock should have 0 or 1 arguments'! ! !PluggableTextAttribute methodsFor: 'accessing' stamp: 'ls 6/21/2001 18:06' prior: 29526147! evalBlock: aBlock evalBlock := aBlock! ! !TextURL methodsFor: 'as yet unclassified' stamp: 'SeanDeNigris 11/5/2013 14:56'! actOnClick: anEvent for: anObject in: paragraph editor: editor Smalltalk tools webBrowser openOnUrl: url.! ! !MCDataStream class methodsFor: 'initialize-release' stamp: 'CamilloBruni 11/5/2013 17:13' prior: 24726135! initialize "TypeMap maps Smalltalk classes to type ID numbers which identify the data stream primitive formats. nextPut: writes these IDs to the data stream. NOTE: Changing these type ID numbers will invalidate all extant data stream files. Adding new ones is OK. Classes named here have special formats in the file. If such a class has a subclass, it will use type 9 and write correctly. It will just be slow. (Later write the class name in the special format, then subclasses can use the type also.) See nextPut:, next, typeIDFor:, & ReferenceStream>>isAReferenceType:" "MCDataStream initialize" | refTypes t | refTypes := OrderedCollection new. t := TypeMap := WeakKeyDictionary new: 80. "sparse for fast hashing" t at: UndefinedObject put: 1. refTypes add: 0. t at: True put: 2. refTypes add: 0. t at: False put: 3. refTypes add: 0. t at: SmallInteger put: 4. refTypes add: 0. t at: ByteString put: 5. refTypes add: 1. t at: ByteSymbol put: 6. refTypes add: 1. t at: ByteArray put: 7. refTypes add: 1. t at: Array put: 8. refTypes add: 1. "(type ID 9 is for arbitrary instances of any class, cf. typeIDFor:)" refTypes add: 1. "(type ID 10 is for references, cf. ReferenceStream>>tryToPutReference:)" refTypes add: 0. t at: Bitmap put: 11. refTypes add: 1. t at: Metaclass put: 12. refTypes add: 0. "Type ID 13 is used for HyperSqueak User classes that must be reconstructed." refTypes add: 1. t at: Float put: 14. refTypes add: 1. t at: Rectangle put: 15. refTypes add: 1. "Allow compact Rects." "type ID 16 is an instance with short header. See beginInstance:size:" refTypes add: 1. self flag: #ByteArray. t at: ByteString put: 17. refTypes add: 1. "new String format, 1 or 4 bytes of length" t at: WordArray put: 18. refTypes add: 1. "bitmap-like" Smalltalk globals at: #SoundBuffer ifPresent: [ :class | t at: class put: 20. ]. refTypes add: 1. "And all other word arrays, both 16-bit and 32-bit. See methods in ArrayedCollection. Overridden in SoundBuffer." t at: CompiledMethod put: 21. refTypes add: 1. "special creation method" "t at: put: 22. refTypes add: 0." Smalltalk do: [ :cls | cls isBehavior ifTrue: [ cls isPointers not & cls isVariable & cls isWords ifTrue: [ (t includesKey: cls) ifFalse: [ t at: cls put: 20 ] ] ] ]! ! !TextAction methodsFor: 'evaluating' stamp: 'SeanDeNigris 11/5/2013 14:18'! actOnClick: anEvent for: anObject in: paragraph editor: editor "sent when a user clicks on a piece of text to which I am applied in an editor" ^ self subclassResponsibility.! ! !TextPrintIt methodsFor: 'as yet unclassified' stamp: 'SeanDeNigris 11/5/2013 15:06'! actOnClick: anEvent for: anObject in: paragraph editor: editor | result | result := Compiler evaluate: evalString for: anObject logged: false. UIManager inform: result printString. ^ true ! ! !TextDoIt methodsFor: 'evaluating' stamp: 'SeanDeNigris 11/5/2013 13:47'! actOnClick: anEvent for: anObject in: paragraph editor: editor "Note: evalString gets evaluated IN THE CONTEXT OF anObject -- meaning that self and all instVars are accessible" Compiler evaluate: evalString for: anObject logged: false. ^ true ! ! "Monticello"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----an Array(9 November 2013 5:58:06 pm) Pharo.image priorSource: 26486368! ----STARTUP----an Array(9 November 2013 6:02:52 pm) as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----an Array(9 November 2013 6:02:52 pm) Pharo-30563.image priorSource: 26502890! ----STARTUP----an Array(10 November 2013 10:29:58 am) as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/10/2013 10:25' prior: 76818322! commentForCurrentUpdate ^ '12073 Writing jpeg files to disk https://pharo.fogbugz.com/f/cases/12073 12051 Add MenuModels https://pharo.fogbugz.com/f/cases/12051 7021 Remove Time dateAndTimeNow https://pharo.fogbugz.com/f/cases/7021 12105 Senders does not work in FinderUI from the right click menu https://pharo.fogbugz.com/f/cases/12105'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/10/2013 10:26'! script220 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.190.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-MarcusDenker.970.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.10.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.204.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.126.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.47.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.286.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1354.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/10/2013 10:26'! update30564 "self new update30564" self withUpdateLog: '12073 Writing jpeg files to disk https://pharo.fogbugz.com/f/cases/12073 12051 Add MenuModels https://pharo.fogbugz.com/f/cases/12051 7021 Remove Time dateAndTimeNow https://pharo.fogbugz.com/f/cases/7021 12105 Senders does not work in FinderUI from the right click menu https://pharo.fogbugz.com/f/cases/12105'. self loadTogether: self script220 merge: false. SpecInterpreter hardResetBindings. . self flushCaches. ! ! "ScriptLoader30"! !MenuGroupModel commentStamp: '' prior: 76542977! I am a group of menu items. I am part of a menu, and groups items by meaning! !MenuItemModel commentStamp: '' prior: 76543424! I represent a menu item. I have a name, a description, an icon, a shortcut, and an action to perform (aBlock). I can also have a sub menu. (and usually I do NOT have an action AND a sub menu)! !MenuModel commentStamp: '' prior: 76544888! I am a simple model describing a menu. I only contains a list of menu groups. Each group is separated by a splitter! !MorphicMenuAdapter commentStamp: '' prior: 0! I am the adapter used to build a MenuMorph from a MenuModel! !MorphicMenuGroupAdapter commentStamp: '' prior: 0! I am used to compute a MenuGroupModel. There is not Morphic represenation of a MenuGroup, that is why I do not have a coresponding morph.! !MorphicMenuItemAdapter commentStamp: '' prior: 0! I am the bridge between a MenuItemModel and a ToggleMenuItemMorph! !UpdatingMenuItemMorph commentStamp: '' prior: 0! I am a menu item morph with the ability to refresh periodically all my values (name, state, enablement, icon, submenu) Since it is not a good idea to change the shortcut, this ability is not available! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 15:32' prior: 69656589! getMenu: shiftKeyState ^ (self model getMenu: shiftKeyState) buildWithSpec! ! !MenuGroupModel commentStamp: '' prior: 76846661! I am a group of menu items. I am part of a menu, and groups items by meaning! !MenuGroupModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 16:25'! defaultSpec ^ #(MenuGroupAdapter adapt: #(model))! ! !MenuGroupModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 15:34'! addItem: aBlock | item | item := MenuItemModel new. aBlock value: item. self addMenuItem: item! ! !MenuGroupModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:34' prior: 76543144! addMenuItem: aMenuItem items add: aMenuItem. self autoRefresh ifNotNil: [ aMenuItem autoRefresh: self autoRefresh ]! ! !MenuGroupModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:33'! autoRefresh ^ autoRefresh value! ! !MenuGroupModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:33'! autoRefresh: aBoolean autoRefresh value: aBoolean! ! !MenuGroupModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 14:09'! buildWithSpecLayout: aSpecLayout "Build the widget using the spec name provided as argument" | widget | widget := SpecInterpreter interpretASpec: aSpecLayout model: self. widget := widget asWidget. self announce: (WidgetBuilt model: self widget: widget). ^ widget! ! !MenuGroupModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 18:34' prior: 76543281! initialize super initialize. items := OrderedCollection new asValueHolder. autoRefresh := nil asValueHolder. autoRefresh whenChangedDo: [ :aBoolean | self menuItems do: [ :each | each autoRefresh: aBoolean ] ]! ! !MenuGroupModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:07'! menuItems ^ items value! ! !MenuItemModel commentStamp: '' prior: 76846801! I represent a menu item. I have a name, a description, an icon, a shortcut, and an action to perform (aBlock). I can also have a sub menu. (and usually I do NOT have an action AND a sub menu)! !MenuItemModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 16:25'! defaultSpec ^ #(MenuItemAdapter adapt: #(model))! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:10' prior: 76543704! action ^ action value! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:07' prior: 76543816! action: aBlock action value: aBlock! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:30'! autoRefresh ^ autoRefresh value! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:30'! autoRefresh: aBlock autoRefresh value: aBlock! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:14'! description ^ description value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:14'! description: aString description value: aString! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:08'! enabled ^ enabled value! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:08'! enabled: aBoolean enabled value: aBoolean! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 17:56'! icon ^ icon value! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 17:56'! icon: aString icon value: aString! ! !MenuItemModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 18:30' prior: 76543944! initialize super initialize. action := [] asValueHolder. enabled := true asValueHolder. state := nil asValueHolder. description := nil asValueHolder. name := '' asValueHolder. shortcut := nil asValueHolder. subMenu := nil asValueHolder. autoRefresh := false asValueHolder! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 15:07'! performMenuActionWith: aMenuItem self enabled ifFalse: [ ^ self ]. action value cull: aMenuItem! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:08'! state ^ state value! ! !MenuItemModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 15:08'! state: aBoolean state value: aBoolean! ! !MenuModel commentStamp: '' prior: 76847053! I am a simple model describing a menu. I only contains a list of menu groups. Each group is separated by a splitter! !MenuModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 16:24'! defaultSpec ^ #(MenuAdapter adapt: #(model))! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 15:35'! addGroup: aBlock | group | group := MenuGroupModel new. aBlock value: group. self addMenuGroup: group! ! !MenuModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:34' prior: 76545087! addMenuGroup: aMenuGroup groups add: aMenuGroup. self autoRefresh ifNotNil: [ aMenuGroup autoRefresh: self autoRefresh ]! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 15:38'! applyTo: aModel aModel applyMenuModel: self! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:33'! autoRefresh ^ autoRefresh value! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:33'! autoRefresh: aBoolean autoRefresh value: aBoolean! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:36'! icon ^ icon value! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:36'! icon: anIcon icon value: anIcon! ! !MenuModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 18:32' prior: 76545223! initialize super initialize. groups := OrderedCollection new asValueHolder. title := nil asValueHolder. icon := nil asValueHolder. autoRefresh := nil asValueHolder. autoRefresh whenChangedDo: [ :aBoolean | self menuGroups do: [ :each | each autoRefresh: aBoolean ] ]! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:14'! menuGroups ^ groups value! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:36'! title ^ title value! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:36'! title: aString title value: aString! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 16:24' prior: 76799243! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #MenuAdapter put: #MenuAdapter; at: #MenuGroupAdapter put: #MenuGroupAdapter; at: #MenuItemAdapter put: #MenuItemAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/1/2013 15:49' prior: 74106394! browseSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Browse Full'; action: [ self browseSelectedObject ]; shortcut: $b command mac | $b alt win | $b alt unix ]. aGroup addItem: [ :anItem | anItem name: 'Browse Class'; action: [ self browseSelectedObjectClass ] ]. aGroup addItem: [ :anItem | anItem name: 'Browse Hierarchy'; action: [ self browseSelectedObjectClassHierarchy ]; shortcut: $h command mac | $h alt win | $h alt unix ] ]! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/1/2013 15:49' prior: 74107267! endSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Copy Name'; action: [ self copyAccessorCode ]; shortcut: $c command mac | $c alt win | $c alt unix ] ]! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/1/2013 15:28' prior: 74107477! exploreSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Explore Pointers'; action: [ self explorePointers ] ] ]! ! !MorphicMenuAdapter commentStamp: '' prior: 76847230! I am the adapter used to build a MenuMorph from a MenuModel! !MorphicMenuAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 18:44'! defaultSpec ^ #(MenuMorph addIfNeededTitle:andIcon: #(model title) #(model icon))! ! !MorphicMenuAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 14:32'! buildWidget widget := super buildWidget. self menuGroups do: [ :group || items | items := group buildWithSpec. items do: [ :item | widget addMenuItem: item ] ] separatedBy: [ widget addLine ]. ^ widget! ! !MorphicMenuAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:37'! icon ^ self model icon! ! !MorphicMenuAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:13'! menuGroups ^ self model menuGroups! ! !MorphicMenuAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:37'! title ^ self model title! ! !MorphicMenuGroupAdapter commentStamp: '' prior: 76847355! I am used to compute a MenuGroupModel. There is not Morphic represenation of a MenuGroup, that is why I do not have a coresponding morph.! !MorphicMenuGroupAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 14:06'! buildWidget ^ self menuItems collect: [ :each | each buildWithSpec ]! ! !MorphicMenuGroupAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 14:08'! menuItems ^ self model menuItems! ! !MorphicMenuItemAdapter commentStamp: '' prior: 76847557! I am the bridge between a MenuItemModel and a ToggleMenuItemMorph! !MorphicMenuItemAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 18:23'! autoRefreshSpec ^ #(UpdatingMenuItemMorph target: #(model) balloonTextSelector: #balloonText subMenuSelector: #subMenu nameSelector: #name selector: #performMenuActionWith: argumentsBlock: #(model actionArguments) getStateSelector: #state iconSelector: #icon enablementSelector: #enabled keyText: #(model shortcutText) )! ! !MorphicMenuItemAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/1/2013 18:27'! defaultSpec ^ #(ToggleMenuItemMorph contents: #(model name) target: #(model) selector: #performMenuActionWith: subMenu: #(model subMenu) argumentsBlock: #(model actionArguments) getStateSelector: #(model stateSelector) icon: #(model icon) enablementSelector: #enabled balloonText: #(model balloonText) keyText: #(model shortcutText) )! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 13:44'! action ^ self model action! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 15:02'! actionArguments ^ [ Array with: self ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:23'! autoRefresh | autoRefresh | autoRefresh := self model autoRefresh. ^ (autoRefresh isBlock or: [ autoRefresh isMessageSend ]) ifTrue: [ autoRefresh cull: self model ] ifFalse: [ autoRefresh ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:16'! balloonText | balloonText | balloonText := self model description. balloonText ifNil: [ ^ nil ]. ^ (balloonText isBlock or: [ balloonText isMessageSend ]) ifTrue: [ balloonText cull: self model ] ifFalse: [ balloonText ]! ! !MorphicMenuItemAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:29'! buildWidget | spec | spec := self autoRefresh ifTrue: [ self class autoRefreshSpec ] ifFalse: [ self class defaultSpec ]. ^ SpecInterpreter interpretASpec: spec model: self! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 17:21'! enabled | enabled | enabled := self model enabled. ^ (enabled isBlock or: [ enabled isMessageSend ]) ifTrue: [ enabled cull: self model ] ifFalse: [ enabled ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 17:56'! icon | icon | icon := self model icon. ^ (icon isBlock or: [ icon isMessageSend ]) ifTrue: [ icon cull: self model ] ifFalse: [ icon ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 17:21'! name | name | name := self model name. ^ (name isBlock or: [ name isMessageSend ]) ifTrue: [ name cull: self model ] ifFalse: [ name ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 15:12'! performMenuActionWith: arguments ^ self model performMenuActionWith: arguments! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:02'! shortcut | shortcut | shortcut := self model shortcut. ^ (shortcut isBlock or: [ shortcut isMessageSend ]) ifTrue: [ shortcut cull: self model ] ifFalse: [ shortcut ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:47'! shortcutText | shortcut platform string | shortcut := self shortcut. shortcut ifNil: [ ^ nil ]. platform := Smalltalk os platformFamily. shortcut combinationsDo: [ :each | (each platform = Smalltalk os platformFamily) ifTrue: [ shortcut := each ] ]. string := '⌘⇧'. ^ (platform = #MacOSX and: [ (StandardFonts menuFont hasGlyphsForAll: string) and: [ string allSatisfy: [ :c | (StandardFonts menuFont characterFormAt: c) width~= 0 ]]]) ifFalse: [ shortcut shortcut printString ] ifTrue: [ String streamContents: [:stream | stream << shortcut shortcut modifier symbol. shortcut shortcut character printOn: stream ] ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 17:20'! state | state | state := self model state. ^ (state isBlock or: [ state isMessageSend ]) ifTrue: [ state cull: self model ] ifFalse: [ state ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:25'! stateSelector ^ self state ifNil: [ nil ] ifNotNil: [ #state ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/1/2013 18:07'! subMenu | subMenu | subMenu := self model subMenu. subMenu ifNil: [ ^ nil ]. ^ (subMenu isBlock or: [ subMenu isMessageSend ]) ifTrue: [ subMenu cull: self model ] ifFalse: [ subMenu buildWithSpec ]! ! !MethodFinder methodsFor: 'initialization' stamp: 'CamilloBruni 11/5/2013 16:55' prior: 68669661! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !EyeAbstractInspector methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/1/2013 15:50' prior: 75216891! inspectionSubMenu: aMenu aMenu addGroup: [:aGroup | aGroup addItem: [ :item | item name: 'Inspect' translated; action: [ self inspectSelectedObjectInNewWindow ]; shortcut: $i command mac | $i alt win | $i alt unix ]. aGroup addItem: [ :item | item name: 'Explore' translated; action: [ self exploreSelectedObject ]; shortcut: $i shift command mac | $i shift alt win | $i shift alt unix ]. self customMenuActions cull: aMenu cull: aGroup. ]! ! !ToggleMenuItemMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/1/2013 14:51'! argumentsBlock: aBlock self arguments: aBlock value! ! !ToggleMenuItemMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/1/2013 18:28'! balloonText: aText self assureExtension balloonText: aText! ! !UpdatingMenuItemMorph commentStamp: '' prior: 76847686! I am a menu item morph with the ability to refresh periodically all my values (name, state, enablement, icon, submenu) Since it is not a good idea to change the shortcut, this ability is not available! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:20'! balloonText ^ self target perform: balloonTextSelector! ! !UpdatingMenuItemMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:16'! balloonText: aText self assureExtension balloonText: aText! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:17'! balloonTextSelector ^ balloonTextSelector! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:18'! balloonTextSelector: anObject balloonTextSelector := anObject. self updateBalloonText! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:35'! contents ^ self target perform: nameSelector! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:59'! icon ^ (target perform: iconSelector) ifNil: [ super icon ]! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:55'! iconSelector ^ iconSelector! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:55'! iconSelector: anObject iconSelector := anObject. self updateIcon! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:32'! nameSelector ^ nameSelector! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:44'! nameSelector: aSymbol nameSelector := aSymbol. self updateContents! ! !UpdatingMenuItemMorph methodsFor: 'stepping' stamp: 'BenjaminVanRyseghem 11/1/2013 18:21'! step owner ifNil: [ ^ self stopStepping ]. self updateContents. self changed! ! !UpdatingMenuItemMorph methodsFor: 'stepping' stamp: 'BenjaminVanRyseghem 11/1/2013 17:45'! stepTime ^ 250! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:03'! subMenuSelector ^ subMenuSelector! ! !UpdatingMenuItemMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/1/2013 18:05'! subMenuSelector: anObject subMenuSelector := anObject. self updateSubMenu! ! !UpdatingMenuItemMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:17'! updateBalloonText target ifNotNil: [ self balloonText: (target perform: balloonTextSelector) ]! ! !UpdatingMenuItemMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 17:41'! updateContents target ifNotNil: [ contents := (target perform: nameSelector) ]! ! !UpdatingMenuItemMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 17:55'! updateIcon target ifNotNil: [ self icon: (target perform: iconSelector) ]! ! !UpdatingMenuItemMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/1/2013 18:06'! updateSubMenu target ifNotNil: [ subMenu := (target perform: subMenuSelector) ]! ! !MenuItemMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 11/1/2013 17:34' prior: 68974969! drawOn: aCanvas | stringColor stringBounds | (isSelected and: [ isEnabled ]) ifTrue: [aCanvas fillRectangle: self bounds fillStyle: self selectionFillStyle. stringColor := color negated] ifFalse: [stringColor := color]. stringBounds := bounds. self isInDockingBar ifTrue: [stringBounds := stringBounds left: stringBounds left + 4]. self hasIcon ifTrue: [| iconForm | iconForm := self iconForm. aCanvas translucentImage: iconForm at: stringBounds left @ (self top + (self height - iconForm height // 2)). stringBounds := stringBounds left: stringBounds left + iconForm width + 2]. self hasMarker ifTrue: [stringBounds := stringBounds left: stringBounds left + self submorphBounds width + 8]. stringBounds := stringBounds top: stringBounds top + stringBounds bottom - self fontToUse height // 2. aCanvas drawString: self contents in: stringBounds font: self fontToUse color: stringColor. self hasSubMenu ifTrue: [| subMenuMarker subMenuMarkerPosition | subMenuMarker := self subMenuMarker. subMenuMarkerPosition := self right - subMenuMarker width @ (self top + self bottom - subMenuMarker height // 2). self isInDockingBar ifTrue: [subMenuMarkerPosition := subMenuMarkerPosition - (4 @ -1)]. aCanvas paintImage: subMenuMarker at: subMenuMarkerPosition]! ! !InspectorNavigator methodsFor: 'menu' stamp: 'CamilloBruni 11/9/2013 21:48' prior: 76781982! customMenuActions ^ [:aMenu :currentGroup | currentGroup addItem: [ :item | item name: 'Dive Into' translated; action: [ self dive ]; shortcut: $d command mac | $d ctrl ]. (history hasPrevious or: [ history hasNext ]) ifTrue: [ aMenu addGroup: [ :aGroup | history hasPrevious ifTrue: [ aGroup addItem: [ :item | item name: 'Back' translated; action: [ self inspectPrevious ]; shortcut: $[ command mac | $[ ctrl ] ]. history hasNext ifTrue: [ aGroup addItem: [ :item | item name: 'Forward' translated; action: [ self inspectNext ]; shortcut: $] command mac | $] ctrl ] ] ] ] ]! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'CamilloBruni 11/5/2013 16:57' prior: 70069946! timeStamp: aStream "Writes system version and current time on stream aStream." | dateTime | dateTime := DateAndTime now. aStream nextPutAll: 'From ' , self datedVersion , ' [' , self lastUpdateString , '] on ' , dateTime asDate printString; nextPutAll: ' at '; nextPutAll: dateTime asTime printString! ! !FinderMethodNode methodsFor: 'private' stamp: 'MarianoMartinezPeck 11/7/2013 17:16' prior: 45149597! browseImplementors self item ifNotNil: [ :method | | selector | selector := method selector. SystemNavigation new browseImplementorsOf: selector name: 'Implementors of ', selector asString autoSelect: nil]! ! !FinderMethodNode methodsFor: 'private' stamp: 'MarianoMartinezPeck 11/7/2013 17:14' prior: 71894266! browseSenders self item ifNotNil: [ :method | | selector | selector := method selector. SystemNavigation new browseSendersOf: selector name: 'Senders of ', selector asString autoSelect: selector asString].! ! !ChangesLog methodsFor: 'logging' stamp: 'CamilloBruni 11/5/2013 16:55' prior: 76088821! logSnapshot: save andQuit: quit "Log into the changes file the fact that the session will be either snapshoted, quit, or both." | message | (SourceFiles at: 2) ifNil: [ ^ self ]. message := String streamContents: [ :s | s nextPutAll: '----'; nextPutAll: (save ifTrue: [ quit ifTrue: [ 'QUIT' ] ifFalse: [ 'SNAPSHOT' ] ] ifFalse: [ quit ifTrue: [ 'QUIT/NOSAVE' ] ifFalse: [ 'NOP' ] ]); nextPutAll: '----'; print: DateAndTime now; space; nextPutAll: (Smalltalk imageFile basename); nextPutAll: ' priorSource: '; print: Smalltalk lastQuitLogPosition ]. self assureStartupStampLogged. save ifTrue: [ Smalltalk lastQuitLogPosition: ( (SourceFiles at: 2) setToEnd; position) ]. self logChange: message. self traceCr: message.! ! !ChangesLog methodsFor: 'accessing' stamp: 'CamilloBruni 11/5/2013 16:55' prior: 18913655! recordStartupStamp startupStamp := '----STARTUP----', DateAndTime now printString, ' as ', Smalltalk imagePath. ! ! !Time class methodsFor: '*Deprecated30' stamp: 'CamilloBruni 11/5/2013 17:02' prior: 49266186! dateAndTimeNow "Answer a two-element Array of (Date today, Time now)." self deprecated: 'Use DateAndTime now' on: '2013-11-05' in: #Pharo30. ^ self dateAndTimeFromSeconds: self totalSeconds! ! !TimeTest methodsFor: 'tests' stamp: 'CamilloBruni 11/5/2013 16:59' prior: 53205339! testGeneralInquiries | date aDateAndTime | self should: [ self timeClass timeWords ] raise: MessageNotUnderstood. date := '2 June 1973' asDate. time := '4:02:47 am' asTime. aDateAndTime := self timeClass dateAndTimeFromSeconds: (2285280000 + 14567). self assert: aDateAndTime equals: {date. time}. ! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 16:23' prior: 76773407! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #MenuAdapter put: #MorphicMenuAdapter; at: #MenuGroupAdapter put: #MorphicMenuGroupAdapter; at: #MenuItemAdapter put: #MorphicMenuItemAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !SelfEyeElement methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/1/2013 15:31' prior: 36478602! customSubMenu: aMenu "Subclasse may add more menu items here" aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Inst var refs...'; action: [ self browseInstVarRefs ] ]. aGroup addItem: [ :anItem | anItem name: 'Inst var defs...'; action: [ self browseInstVarDefs ] ]. aGroup addItem: [ :anItem | anItem name: 'Class var refs...'; action: [ self classVarRefs ] ]. aGroup addItem: [ :anItem | anItem name: 'Class variables'; action: [ self browseInstClassVariables ] ]. aGroup addItem: [ :anItem | anItem name: 'Class refs'; action: [ self browseClassRefs ] ] ]! ! !PluginBasedJPEGReadWriter class methodsFor: 'image reading/writing' stamp: 'usmanbhatti 11/5/2013 11:26' prior: 29629304! putForm: aForm quality: quality progressiveJPEG: progressiveFlag onFileNamed: fileName "Store the given Form as a JPEG file of the given name, overwriting any existing file of that name. Quality goes from 0 (low) to 100 (high), where -1 means default. If progressiveFlag is true, encode as a progressive JPEG." | writer | fileName asFileReference ensureDelete. writer := self on: (FileStream newFileNamed: fileName) binary. Cursor write showWhile: [ writer nextPutImage: aForm quality: quality progressiveJPEG: progressiveFlag ]. writer close! ! !MenuMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/1/2013 14:43'! addIfNeededTitle: aTitle andIcon: anIcon (aTitle notNil or: [ anIcon notNil ]) ifTrue: [ self addTitle: aTitle icon: anIcon ]! ! !NewListModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/1/2013 18:49'! exampleWithMenu "self exampleWithMenu" | menu group1 item11 item12 group2 item21 item22 model| menu := MenuModel new. group1 := MenuGroupModel new. item11 := MenuItemModel new name: [ TimeStamp now asString ]; enabled: [ TimeStamp now seconds even ]; yourself. item12 := MenuItemModel new name: 'item2'; shortcut: $b shift command mac | $b alt shift win | $b alt shift unix; action: [ self halt ]; enabled: true; yourself. group1 addMenuItem: item11. group1 addMenuItem: item12. group1 autoRefresh: true. group2 := MenuGroupModel new. item21 := MenuItemModel new name: 'item3'; state: [ TimeStamp now seconds odd ]; description: [ TimeStamp now asString ]; yourself. item22 := MenuItemModel new name: 'item4'; subMenu: (MenuModel new autoRefresh: true; addGroup: [ :g | g addItem: [ :i| i name: [ 'sub' , ((Character value: (TimeStamp now seconds + 60))) asString ]; action: [ self halt ]; shortcut: $d shift command mac | $d alt shift win | $d alt shift unix ]]; yourself); yourself. group2 addMenuItem: item21. group2 addMenuItem: item22. menu addMenuGroup: group1. menu addMenuGroup: group2. menu title: 'Test'. model := NewListModel new. model menu: menu. model openWithSpec! ! !NewListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 15:46' prior: 76594684! getMenu: shiftKeyState | menu | menuHolder value ifNil: [ ^ nil ]. menuHolder value isBlock ifFalse: [ ^ menuHolder value ]. menu := MenuModel new. menuHolder value cull: menu cull: shiftKeyState. menuTitle value ifNotNil: [ :title | menu title: title ]. ^ menu ! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/1/2013 15:45' prior: 74108997! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self changed: { #hasHeader: . title notNil } ]. deSelectOnReclick whenChangedDo: [ :bool | self changed: { #deSelectOnReclick: . bool } ]. isMultipleSelection whenChangedDo: [ :bool | self changed: { #isMultipleSelection: . bool } ]. unselectOnChange whenChangedDo: [ :bool | self changed: { #unselectOnChange: . bool } ]. handlesDoubleClick whenChangedDo: [ :bool | self changed: { #handlesDoubleClick . bool } ]. menuHolder whenChangedDo: [ :aMenuModel | aMenuModel isBlock ifFalse: [ aMenuModel applyTo: self ] ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/1/2013 18:40'! applyMenuModel: aMenuModel aMenuModel menuGroups do: [ :group | group menuItems do: [ :item | item shortcut ifNotNil: [ :shortcut | self bindKeyCombination: shortcut toAction: [ item performMenuActionWith: {} ] ]. item subMenu ifNotNil: [ :subMenu | subMenu applyTo: self ] ] ]! ! "Deprecated30"! "Graphics-Files"! "Kernel"! "KernelTests"! "Morphic-Base"! "Spec-Core"! "Spec-Inspector"! "Spec-MorphicAdapters"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----2013-11-10T10:30:14.038643+01:00 Pharo.image priorSource: 26503095! ----STARTUP----2013-11-10T10:34:59.003298+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-10T10:34:59.161295+01:00 Pharo-30564.image priorSource: 26557507! ----STARTUP----2013-11-12T14:01:47.869392+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/12/2013 13:56' prior: 76835052! commentForCurrentUpdate ^ '- Issue: 12146 Settings: Replace references to FileDirectory https://pharo.fogbugz.com/f/cases/12146/Settings-Replace-references-to-FileDirectory - Issue 12140 Filing out a tag is broken https://pharo.fogbugz.com/f/cases/12140/Filing-out-a-tag-is-broken - 12138 Finding a class is kind of broken https://pharo.fogbugz.com/f/cases/12138/Finding-a-class-is-kind-of-broken '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/12/2013 13:57'! script221 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.190.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.204.mcz Spec-Debugger-MarcusDenker.175.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.126.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.47.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/12/2013 13:57'! update30565 "self new update30565" self withUpdateLog: '- Issue: 12146 Settings: Replace references to FileDirectory https://pharo.fogbugz.com/f/cases/12146/Settings-Replace-references-to-FileDirectory - Issue 12140 Filing out a tag is broken https://pharo.fogbugz.com/f/cases/12140/Filing-out-a-tag-is-broken - 12138 Finding a class is kind of broken https://pharo.fogbugz.com/f/cases/12138/Finding-a-class-is-kind-of-broken '. self loadTogether: self script221 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow methodsFor: 'actions' stamp: 'JurajKubelka 11/11/2013 15:41' prior: 68296805! ok (acceptNewEntry and: [ list isEmpty ]) ifTrue: [ self answer: self searchString ]. self answer ifNil: [ self searchAccept: self searchString ]. self cancelled: false; delete! ! !MCSystemSettings class methodsFor: 'settings' stamp: 'SeanDeNigris 11/11/2013 18:54' prior: 34191811! monticelloSettingsOn: aBuilder (aBuilder group: #monticello) label: 'Monticello' translated; description: 'All Monticello settings' translated; with: [ (aBuilder setting: #defaultDirectoryName) type: #Directory; target: MCDirectoryRepository; description: 'The path of a directory where you want to start out when choosing local repository locations' translated; label: 'Default local repository directory'. (aBuilder setting: #cacheDirectory) type: #Directory; target: MCCacheRepository; description: 'The path of the local repository cache' translated; label: 'Local cache directory'. ].! ! !SettingDeclaration methodsFor: 'user interface' stamp: 'SeanDeNigris 11/11/2013 18:38'! inputWidgetForDirectory ^ self inputWidgetForFileOrDirectoryWithAction: #chooseFileDirectory.! ! !AbstractTool methodsFor: 'package' stamp: 'StephaneDucasse 11/11/2013 18:56' prior: 39986823! fileOutPackages: aCollection self do: [ :package | package item package fileOut ] on: aCollection displaying: 'Filing out packages...'.! ! "Polymorph-Widgets"! "Settings-Monticello"! "System-Settings"! "Tools"! ----End fileIn----! ----QUIT----2013-11-12T14:01:57.133407+01:00 Pharo.image priorSource: 26557704! ----STARTUP----2013-11-12T14:06:54.825263+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-12T14:06:54.99926+01:00 Pharo-30565.image priorSource: 26571238! ----STARTUP----2013-11-12T14:54:43.979984+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/12/2013 14:46' prior: 76889654! commentForCurrentUpdate ^ '- Issue: 12139 Navigating in menus https://pharo.fogbugz.com/f/cases/12139/Navigating-in-menus - Issue 12135 Missing bindings https://pharo.fogbugz.com/f/cases/12135/Missing-bindings - 12055 The Spec Debugger should not require the registered inspector to be built on Spec https://pharo.fogbugz.com/f/cases/12055/The-Spec-Debugger-should-not-require-the-registered-inspector-to-be-built-on-Spec'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/12/2013 14:47'! script222 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.440.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-StephaneDucasse.206.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.126.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.49.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/12/2013 14:48'! update30566 "self new update30566" self withUpdateLog: '- Issue: 12139 Navigating in menus https://pharo.fogbugz.com/f/cases/12139/Navigating-in-menus - Issue 12135 Missing bindings https://pharo.fogbugz.com/f/cases/12135/Missing-bindings - 12055 The Spec Debugger should not require the registered inspector to be built on Spec https://pharo.fogbugz.com/f/cases/12055/The-Spec-Debugger-should-not-require-the-registered-inspector-to-be-built-on-Spec'. self loadTogether: self script222 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MenuMorph methodsFor: 'filtering' stamp: 'AlexandreBergel 11/11/2013 15:18'! getFiltering: matchString ^ self valueOfProperty: #matchString ifAbsentPut: [ String new ]! ! !MenuMorph methodsFor: 'events' stamp: 'AlexandreBergel 11/11/2013 15:19' prior: 25501842! keyStroke: evt "Handle keboard item matching." | matchString char asc selectable help | help := self theme builder newBalloonHelp: 'Enter text to\narrow selection down\to matching items ' withCRs for: self corner: #topLeft. help popUpForHand: self activeHand. (self rootMenu hasProperty: #hasUsedKeyboard) ifFalse: [self rootMenu setProperty: #hasUsedKeyboard toValue: true. self changed]. (evt commandKeyPressed and: [self commandKeyHandler notNil]) ifTrue: [self commandKeyHandler commandKeyTypedIntoMenu: evt. ^self deleteIfPopUp: evt]. char := evt keyCharacter. asc := char asciiValue. char = Character cr ifTrue: [selectedItem ifNotNil: [selectedItem hasSubMenu ifTrue: [evt hand newMouseFocus: selectedItem subMenu. ^evt hand newKeyboardFocus: selectedItem subMenu] ifFalse: ["self delete." ^selectedItem invokeWithEvent: evt]]. (selectable := self items) size = 1 ifTrue: [^selectable first invokeWithEvent: evt]. ^self]. asc = 27 ifTrue: ["escape key" self valueOfProperty: #matchString ifPresentDo: [:str | str isEmpty ifFalse: ["If filtered, first ESC removes filter" self setProperty: #matchString toValue: String new. self selectItem: nil event: evt. ^self displayFiltered: evt]]. "If a stand-alone menu, just delete it" popUpOwner ifNil: [^self delete]. "If a sub-menu, then deselect, and return focus to outer menu" self selectItem: nil event: evt. evt hand newMouseFocus: popUpOwner owner. ^evt hand newKeyboardFocus: popUpOwner owner]. "Left arrow key - If we are in a submenu, then we remove myself (i.e., the current morph) and move the focus to the owner popup" (asc = 28 and: [ popUpOwner notNil ]) ifTrue: [ self delete. evt hand newMouseFocus: popUpOwner owner. ^evt hand newKeyboardFocus: popUpOwner owner ]. "Right arrow key - If the selected menu item has a submenu, then we move the focus to the submenu " (asc = 29) ifTrue: ["right arrow key" (selectedItem notNil and: [selectedItem hasSubMenu]) ifTrue: [evt hand newMouseFocus: selectedItem subMenu. selectedItem subMenu moveSelectionDown: 1 event: evt. ^evt hand newKeyboardFocus: selectedItem subMenu]]. asc = 30 ifTrue: [^self moveSelectionDown: -1 event: evt]. "up arrow key" asc = 31 ifTrue: [^self moveSelectionDown: 1 event: evt]. "down arrow key" asc = 11 ifTrue: [^self moveSelectionDown: -5 event: evt]. "page up key" asc = 12 ifTrue: [^self moveSelectionDown: 5 event: evt]. "page down key" "If we reach this point, it means that we are editing the filter associated to each menu. " "In case ther eis no filter associated to the menu, we simply create one" matchString := self valueOfProperty: #matchString ifAbsentPut: [ String new ]. "If we press the backspace, then we simply remove the last character from matchString" (char = Character backspace and: [ matchString notEmpty ]) ifTrue: [ matchString := matchString allButLast. self recordFiltering: matchString. self displayFiltered: evt. ]. "No need to go further if the character is not alphanumeric, i.e., not useful for filtering" char isAlphaNumeric ifFalse: [ ^ self ]. matchString := matchString, char asString. self recordFiltering: matchString. self displayFiltered: evt. help := BalloonMorph string: 'Enter text to\narrow selection down\to matching items ' withCRs for: self corner: #topLeft. help popUpForHand: self activeHand. ! ! !MenuMorph methodsFor: 'events' stamp: 'AlexandreBergel 11/11/2013 15:18'! recordFiltering: matchString self setProperty: #matchString toValue: matchString! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/11/2013 08:36' prior: 76883142! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #MenuAdapter put: #MorphicMenuAdapter; at: #MenuGroupAdapter put: #MorphicMenuGroupAdapter; at: #MenuItemAdapter put: #MorphicMenuItemAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #TreeColumnAdapter put: #MorphicTreeColumnAdapter; at: #TreeNodeAdapter put: #MorphicTreeNodeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/11/2013 08:37' prior: 76854522! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #MenuAdapter put: #MenuAdapter; at: #MenuGroupAdapter put: #MenuGroupAdapter; at: #MenuItemAdapter put: #MenuItemAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #TreeColumnAdapter put: #TreeColumnAdapter; at: #TreeNodeAdapter put: #TreeNodeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !SpecDebugger methodsFor: 'updating' stamp: 'ClementBera 11/12/2013 13:08' prior: 69331529! updateInspectorsFromContext: aContext | receiver | contextInspector inspect: aContext. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspect: receiver.! ! "Morphic-Base"! "Spec-Core"! "Spec-Debugger"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-12T14:54:52.795983+01:00 Pharo.image priorSource: 26571435! ----STARTUP----2013-11-12T14:59:33.361883+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-12T14:59:33.537881+01:00 Pharo-30566.image priorSource: 26590649! ----STARTUP----2013-11-12T15:17:44.063386+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/12/2013 15:12' prior: 76903384! commentForCurrentUpdate ^ '- Issue: 12137 Temporary variables are not added properly https://pharo.fogbugz.com/f/cases/12137/Temporary-variables-are-not-added-properly '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/12/2013 15:12'! script223 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.152.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.58.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-StephaneDucasse.206.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.126.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.49.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/12/2013 15:12'! update30567 "self new update30567" self withUpdateLog: '- Issue: 12137 Temporary variables are not added properly https://pharo.fogbugz.com/f/cases/12137/Temporary-variables-are-not-added-properly '. self loadTogether: self script223 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'AlexandreBergel 11/11/2013 13:29' prior: 38919814! declareTempAndPaste: name | insertion delta theTextString characterBeforeMark tempsMark newMethodNode | "Below we are getting the text that is actually seen in the morph. This is rather ugly. Maybe there is a better way to do this." theTextString := self requestor textMorph editor paragraph text. "We parse again the method displayed in the morph. The variable methodNode has the first version of the method, without temporary declarations. " newMethodNode := RBParser parseMethod: theTextString. "We check if there is a declaration of temporary variables" tempsMark := newMethodNode body rightBar ifNil: [ self methodNode body start ]. characterBeforeMark := theTextString at: tempsMark-1 ifAbsent: [$ ]. (theTextString at: tempsMark) = $| ifTrue: [ "Paste it before the second vertical bar" insertion := name, ' '. characterBeforeMark isSeparator ifFalse: [ insertion := ' ', insertion]. delta := 0. ] ifFalse: [ "No bars - insert some with CR, tab" insertion := '| ' , name , ' |',String cr. delta := 2. "the bar and CR" characterBeforeMark = Character tab ifTrue: [ insertion := insertion , String tab. delta := delta + 1. "the tab" ] ]. tempsMark := tempsMark + (self substituteWord: insertion wordInterval: (tempsMark to: tempsMark-1) offset: 0) - delta. self methodNode scope addTemp: name. ^ (node owningScope lookupVar: node name) ifNil: [self error: 'should not happen'] ! ! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----2013-11-12T15:17:50.217389+01:00 Pharo.image priorSource: 26590846! ----STARTUP----2013-11-12T15:22:45.346136+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-12T15:22:45.526138+01:00 Pharo-30567.image priorSource: 26603940! ----STARTUP----2013-11-13T10:03:47.118977+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/13/2013 09:59' prior: 76922796! commentForCurrentUpdate ^ '12153 Issue with the old TreeModel API https://pharo.fogbugz.com/f/cases/12153 12151 Ring definitions should respond to #asRingDefinition https://pharo.fogbugz.com/f/cases/12151 12152 RGClassDescriptionDefinition should not override #instVarNamed: https://pharo.fogbugz.com/f/cases/12152'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/13/2013 10:00'! script224 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.209.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.126.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.51.mcz Spec-PolyWidgets-MarcusDenker.22.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/13/2013 10:00'! update30568 "self new update30568" self withUpdateLog: '12153 Issue with the old TreeModel API https://pharo.fogbugz.com/f/cases/12153 12151 Ring definitions should respond to #asRingDefinition https://pharo.fogbugz.com/f/cases/12151 12152 RGClassDescriptionDefinition should not override #instVarNamed: https://pharo.fogbugz.com/f/cases/12152'. self loadTogether: self script224 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/12/2013 22:35' prior: 76791435! exampleWithCustomColumnsAndNodesAndChildren "self exampleWithCustomColumnsAndNodesAndChildren" | m col1 col2 | m := TreeModel new. m roots: #(#a #b #c #d). m rootNodeHolder: [ :item | TreeNodeModel new content: item; children: [ (1 to: item asString first asciiValue) collect: [:e | TreeNodeModel new content: e ] ]; icon: Smalltalk ui icons smallConfigurationIcon ]. m openWithSpec. col1 := TreeColumnModel new displayBlock: [ :node | node content asString ]; headerAction: [ self halt ]. col2 := TreeColumnModel new displayBlock: [ :node | (Character value: node content asString first asciiValue + 1) asString ]. m columns: {col1. col2}; dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | self halt ]. col2 displayBlock: [ :node | (Character value: node content asString first asciiValue + 2) asString ].! ! !TreeModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/12/2013 22:26'! exampleWithNoSpecifiedNodes "self exampleWithNoSpecifiedNodes" TreeModel new roots: (1 to: 5); childrenBlock: [ :item | 1+item to: 5+item ]; openWithSpec! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/12/2013 22:33' prior: 76792441! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [ :each | each icon ] asValueHolder. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: [ self childrenFor: item ] ] asValueHolder. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !RGDefinition methodsFor: 'converting' stamp: 'MartinDias 11/12/2013 18:04'! asRingDefinition ^ self! ! !RGVariableDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 11/12/2013 18:50' prior: 31771421! testVariableEquality | variable1 variable2| variable1 := (OrderedCollection asRingDefinition) instanceVariableNamed: #array. variable2 := (OrderedCollection asRingDefinition) instanceVariableNamed: #array. self assert: variable1 = variable2. variable1 := (RGFactory current createClassVariableNamed: #Foo) parentName: #Test. variable2 := (RGFactory current createClassVariableNamed: #Foo) parentName: #Test. self assert: variable1 = variable2. variable2 := (RGFactory current createClassVariableNamed: #Foo) parentName: #Test2. self deny: variable1 = variable2. ! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/12/2013 22:40' prior: 76779005! childrenBlock ^ self model children! ! !RGClassDescriptionDefinition methodsFor: 'instance variables' stamp: 'MartinDias 11/12/2013 18:51'! instanceVariableNamed: aString ^ instanceVariables detect: [ :v | v name = aString asSymbol ] ifNone: [ nil ]! ! !RGClassDescriptionDefinition methodsFor: 'instance variables' stamp: 'MartinDias 11/12/2013 18:50' prior: 31618379! removeInstVarNamed: aString self removeVariable: (self instanceVariableNamed: aString) from: instanceVariables! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/12/2013 22:39' prior: 76216843! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" ^ menuHolder value cull: aMenu cull: shifted! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 11/12/2013 18:01'! testAsRingDefinition self assert: OrderedCollection asRingDefinition asRingDefinition isRingObject! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 11/12/2013 18:51' prior: 31607682! testWithClassInstanceVariables | newClass metaClass classInstVar | newClass:= RGFactory current createClassNamed: #HashTableSizes. newClass withMetaclass. metaClass:= newClass theMetaClass. metaClass addInstanceVariables: #(sizes). self assert: (metaClass instanceVariables size = 1). self assert: (metaClass instVarNames size = 1). self assert: (metaClass allInstVarNames size = 1). classInstVar:= metaClass instanceVariableNamed: #sizes. self assert: (classInstVar notNil). self assert: (classInstVar parent = metaClass). self assert: (classInstVar isClassInstanceVariable). self assert: (classInstVar isVariable). self assert: (classInstVar parentName = metaClass name). self assert: (classInstVar realClass = HashTableSizes class). metaClass removeInstVarNamed: #sizes. self assert: (metaClass instanceVariables isEmpty). self assert: ((metaClass instanceVariableNamed: #sizes) isNil). ! ! !RGClassDefinitionTest methodsFor: 'testing' stamp: 'MartinDias 11/12/2013 18:50' prior: 31610874! testWithInstanceVariables | newClass instVar | newClass:= RGFactory current createClassNamed: #OrderedCollection. newClass addInstanceVariables: #(array firstIndex). newClass addInstVarNamed: #lastIndex. self assert: (newClass instanceVariables size = 3). self assert: (newClass instVarNames size = 3). self assert: (newClass allInstVarNames size = 3). instVar:= newClass instanceVariableNamed: #firstIndex. self assert: (instVar notNil). self assert: (instVar parent = newClass). self assert: (instVar isInstanceVariable). self assert: (instVar isVariable). self assert: (instVar parentName == newClass name). self assert: (instVar realClass = OrderedCollection). newClass removeInstVarNamed: #array. self assert: (newClass instanceVariables size = 2). self assert: ((newClass instanceVariableNamed: #array) isNil). ! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/12/2013 22:19' prior: 76780456! childNodeFromItem: anItem ^ anItem asTreeNodeModel container: self model; buildWithSpec! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/12/2013 22:33' prior: 76795700! children: aBlock children value: aBlock! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/12/2013 22:24' prior: 76796711! initialize super initialize. children := [ self container childrenFor: self content ] asValueHolder. content := nil asValueHolder. icon := nil asValueHolder. container := nil asValueHolder. matchTokenFilter := [ :aFilter | false ] asValueHolder! ! RGClassDescriptionDefinition removeSelector: #instVarNamed:! "Ring-Core-Kernel"! "Ring-Tests-Kernel"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-13T10:03:54.636978+01:00 Pharo.image priorSource: 26604137! ----STARTUP----2013-11-13T10:08:33.954161+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-13T10:08:34.12216+01:00 Pharo-30568.image priorSource: 26623413! ----STARTUP----2013-11-13T10:26:42.224439+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/13/2013 10:23' prior: 76936084! commentForCurrentUpdate ^ '11782 SearchableTree not working https://pharo.fogbugz.com/f/cases/11782 12132 MNU: TreeNodeModel>>#item https://pharo.fogbugz.com/f/cases/12132 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/13/2013 10:23'! script225 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-StephaneDucasse.177.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.210.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.51.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/13/2013 10:24'! update30569 "self new update30569" self withUpdateLog: '11782 SearchableTree not working https://pharo.fogbugz.com/f/cases/11782 12132 MNU: TreeNodeModel>>#item https://pharo.fogbugz.com/f/cases/12132 '. self loadTogether: self script225 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeTreeInspector methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/11/2013 08:53' prior: 74087227! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree whenBuiltDo: [ self initializeShortcuts ]. tree childrenBlock: [ :anObject | self childrenFor: anObject ]; iconBlock: [ :treeNode | self iconFor: treeNode content ]; displayBlock: [ :anObject | self labelFor: anObject ]; menu: [ :menu | self inspectionMenu: menu ]; doubleClick: [ self diveInto: self selectedObject ]; yourself]! ! !SearchableTree methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/11/2013 08:37' prior: 76490291! roots: aCollection roots value: aCollection asOrderedCollection. tree roots: aCollection asOrderedCollection! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 11/11/2013 08:50' prior: 19992632! takeKeyboardFocus self focusOrder ifNotEmpty:[:focus | ^ focus first takeKeyboardFocus ]. ^ self widget ifNotNil: [ :w | w ==self ifFalse: [ w takeKeyboardFocus ] ]! ! "Spec-Core"! "Spec-Inspector"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----2013-11-13T10:26:49.40844+01:00 Pharo.image priorSource: 26623610! ----STARTUP----2013-11-13T10:31:42.003552+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-13T10:31:42.171543+01:00 Pharo-30569.image priorSource: 26636220! ----STARTUP----2013-11-13T15:44:44.147939+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/13/2013 15:41' prior: 76955556! commentForCurrentUpdate ^ '12149 Add support for removing a binding https://pharo.fogbugz.com/f/cases/12149'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/13/2013 15:41'! script226 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.21.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.335.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.210.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.51.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.980.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/13/2013 15:42'! update30570 "self new update30570" self withUpdateLog: '12149 Add support for removing a binding https://pharo.fogbugz.com/f/cases/12149'. self loadTogether: self script226 merge: false. KMRepository reset. self flushCaches. ! ! "ScriptLoader30"! !KMStorage commentStamp: '' prior: 42371257! I am a storage of shortcuts. I store and provide facilities to access named and annonimous shortcuts.! !KMDispatcher methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/12/2013 16:09'! keymapForShortcut: aShortcut ^ self directKeymaps keymapForShortcut: aShortcut! ! !KMDispatcher methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/12/2013 16:08'! removeKeyCombination: aShortcut | keymap | keymap := self keymapForShortcut: aShortcut. keymap ifNil: [ ^ self ]. self directKeymaps removeKeymapEntry: keymap! ! !Morph methodsFor: '*Keymapping-Core' stamp: 'BenjaminVanRyseghem 11/12/2013 16:14'! removeKeyCombination: aShortcut self kmDispatcher removeKeyCombination: aShortcut! ! !KMCategory methodsFor: 'binding' stamp: 'BenjaminVanRyseghem 11/12/2013 16:18'! keymapForShortcut: aShortcut ^ self commonEntries keymapForShortcut: aShortcut! ! !KMCategory methodsFor: 'associating' stamp: 'BenjaminVanRyseghem 11/12/2013 16:14'! removeKeymapEntry: aKeymapEntry self commonEntries remove: aKeymapEntry.! ! !KMStorage commentStamp: '' prior: 76979487! I am a storage of shortcuts. I store and provide facilities to access named and annonimous shortcuts.! !KMStorage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/12/2013 16:19' prior: 24190551! add: aKeymap aKeymap hasName ifTrue: [ namedRegistry at: aKeymap name put: aKeymap ] ifFalse: [ anonymousRegistry add: aKeymap ].! ! !KMStorage methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/12/2013 16:19' prior: 48876528! initialize anonymousRegistry := Set new. namedRegistry := Dictionary new.! ! !KMStorage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/12/2013 16:19'! keymapForShortcut: aShortcut ^ namedRegistry detect: [ :keymap | keymap shortcut = aShortcut ] ifNone: [ anonymousRegistry detect: [ :keymap | keymap shortcut = aShortcut ] ifNone: [ nil ] ]! ! !KMStorage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/12/2013 16:19' prior: 24191174! keymaps ^anonymousRegistry , namedRegistry values! ! !KMStorage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/12/2013 16:19'! remove: aKeymap aKeymap hasName ifTrue: [ namedRegistry removeKey: aKeymap name ] ifFalse: [ anonymousRegistry remove: aKeymap ].! ! "Keymapping-Core"! ----End fileIn----! ----QUIT----2013-11-13T15:44:50.209941+01:00 Pharo.image priorSource: 26636416! ----STARTUP----2013-11-13T15:49:57.625726+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-13T15:49:57.791725+01:00 Pharo-30570.image priorSource: 26650147! ----STARTUP----2013-11-14T08:44:46.158417+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/14/2013 08:41' prior: 76968363! commentForCurrentUpdate ^ '12156 Move code in SmalltalkImage>>closeSourceFiles to SourceFileArray https://pharo.fogbugz.com/f/cases/12156 10890 Converting FileUrl w. spaces to FileReference (was Load configs from local folders) https://pharo.fogbugz.com/f/cases/10890 12150 Better Menu support https://pharo.fogbugz.com/f/cases/12150'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/14/2013 08:41'! script227 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.30.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.129.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.211.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1356.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-StephaneDucasse.24.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/14/2013 08:42'! update30571 "self new update30571" self withUpdateLog: '12156 Move code in SmalltalkImage>>closeSourceFiles to SourceFileArray https://pharo.fogbugz.com/f/cases/12156 10890 Converting FileUrl w. spaces to FileReference (was Load configs from local folders) https://pharo.fogbugz.com/f/cases/10890 12150 Better Menu support https://pharo.fogbugz.com/f/cases/12150'. self loadTogether: self script227 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/12/2013 09:47'! neglect: aModel aModel neglectMenuModel: self! ! !AbstractMorphicAdapter methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 10:47'! bindKeyCombination: aShortcut toAction: aBlock self widget ifNotNil: [ :w | w bindKeyCombination: aShortcut toAction: aBlock ]! ! !AbstractMorphicAdapter methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 10:54'! bindMenuKeyCombination: aShortcut toAction: aBlock self widget ifNotNil: [ :w | w bindKeyCombination: aShortcut toAction: aBlock ]! ! !AbstractMorphicAdapter methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 16:15'! removeKeyCombination: aShortcut self widget ifNotNil: [ :w | w removeKeyCombination: aShortcut ]! ! !AbstractMorphicAdapter methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 16:15'! removeMenuKeyCombination: aShortcut self widget ifNotNil: [ :w | w removeKeyCombination: aShortcut ]! ! !SourceFileArray methodsFor: 'file system' stamp: 'MartinDias 11/13/2013 15:40'! close "Shut down the source files if appropriate. Closing and nilification only takes place if the entry was a FileStream, thus allowing stringified sources to remain in the saved image file. MartinDias, 13-11-2013: Copied from SmalltalkImage>>closeSourceFiles, no idea if isKindOf: is needed." 1 to: files size do: [ :index | ((files at: index) isKindOf: FileStream) ifTrue: [ (files at: index) close. files at: index put: nil ] ]! ! !ConfigurationCommandLineHandler methodsFor: 'testing' stamp: 'CamilloBruni 11/13/2013 17:01' prior: 34615887! hasRepositoryUrl ^ self arguments size > 0 and: [ | possibleUrl | possibleUrl := self arguments first. "check if the first argument is some sort of a URL" (possibleUrl includesSubstring: '://') or: [ possibleUrl first = $. ]]! ! !ConfigurationCommandLineHandler methodsFor: 'accessing' stamp: 'CamilloBruni 11/13/2013 17:04' prior: 34617033! loadRepositoryUrl | possibleUrl | possibleUrl := self argumentAt: 1. (possibleUrl includesSubstring: '://') ifTrue: [ ^ possibleUrl asUrl ]. ^ possibleUrl asFileReference! ! !NewListModel class methodsFor: 'examples' stamp: 'BenjaminVanRyseghem 11/12/2013 10:43'! exampleWithMenu2 "self exampleWithMenu2" | oddMenu evenMenu model | oddMenu := MenuModel new addGroup: [ :group | group addItem: [ :item | item name: 'Odd'; shortcut: $o command; action: [ self logCr: 'o' ] ] ]. evenMenu := MenuModel new addGroup: [ :group | group addItem: [ :item | item name: 'Even'; shortcut: $e command; action: [ self logCr: 'e' ] ] ]. model := NewListModel new. model openWithSpec. model items: (1 to: 10) asOrderedCollection. model whenSelectedItemChanged: [ :number | number odd ifTrue: [ model menu: oddMenu ] ifFalse: [ model menu: evenMenu ] ]! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/12/2013 10:44' prior: 76887921! registerEvents items whenChangedDo: [ self changed: #getItems ]. headerTitle whenChangedDo: [ :title | self changed: #getHeaderTitle. self changed: { #hasHeader: . title notNil } ]. deSelectOnReclick whenChangedDo: [ :bool | self changed: { #deSelectOnReclick: . bool } ]. isMultipleSelection whenChangedDo: [ :bool | self changed: { #isMultipleSelection: . bool } ]. unselectOnChange whenChangedDo: [ :bool | self changed: { #unselectOnChange: . bool } ]. handlesDoubleClick whenChangedDo: [ :bool | self changed: { #handlesDoubleClick . bool } ]. menuHolder whenChangedDo: [ :aMenuModel :oldMenu | (oldMenu isNil or: [ oldMenu isBlock ]) ifFalse: [ oldMenu neglect: self ]. (aMenuModel isNil or: [ aMenuModel isBlock ]) ifFalse: [ aMenuModel applyTo: self ] ]! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'MartinDias 11/13/2013 15:34' prior: 50337357! closeSourceFiles "Shut down the source files if appropriate." SourceFiles close! ! !SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'MartinDias 11/13/2013 15:42' prior: 50332441! shutDown ^ self closeSourceFiles! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/12/2013 10:49' prior: 76888677! applyMenuModel: aMenuModel aMenuModel menuGroups do: [ :group | group menuItems do: [ :item | item shortcut ifNotNil: [ :shortcut | self bindMenuKeyCombination: shortcut toAction: [ item performMenuActionWith: {} ] ]. item subMenu ifNotNil: [ :subMenu | subMenu applyTo: self ] ] ]! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 09:40' prior: 46699785! bindKeyCombination: aShortcut toAction: aBlock additionalKeyBindings at: aShortcut put: aBlock. self changed: #bindKeyCombination:toAction: with: {aShortcut . aBlock}! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 10:48'! bindMenuKeyCombination: aShortcut toAction: aBlock additionalKeyBindings at: aShortcut put: aBlock. self changed: #bindMenuKeyCombination:toAction: with: {aShortcut . aBlock}! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/12/2013 10:49'! neglectMenuModel: aMenuModel aMenuModel menuGroups do: [ :group | group menuItems do: [ :item | item shortcut ifNotNil: [ :shortcut | self removeMenuKeyCombination: shortcut ]. item subMenu ifNotNil: [ :subMenu | subMenu neglect: self ] ] ]! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 10:45'! removeKeyCombination: aShortcut additionalKeyBindings removeKey: aShortcut ifAbsent: [ ^ self ]. self changed: #removeKeyCombination: with: { aShortcut }! ! !ComposableModel methodsFor: 'protocol-shortcuts' stamp: 'BenjaminVanRyseghem 11/12/2013 10:49'! removeMenuKeyCombination: aShortcut additionalKeyBindings removeKey: aShortcut ifAbsent: [ ^ self ]. self changed: #removeMenuKeyCombination: with: { aShortcut }! ! AbstractAdapter removeSelector: #bindKeyCombination:toAction:! "ConfigurationCommandLineHandler-Core"! "Files"! "Spec-Core"! "Spec-MorphicAdapters"! "System-Support"! ----End fileIn----! ----QUIT----2013-11-14T08:44:54.308418+01:00 Pharo.image priorSource: 26650344! ----STARTUP----2013-11-14T08:50:15.104839+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-14T08:50:15.270842+01:00 Pharo-30571.image priorSource: 26668346! ----STARTUP----2013-11-14T14:36:46.131645+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/14/2013 14:34' prior: 76982291! commentForCurrentUpdate ^ '11999 Move MimeType to Deprecated30 https://pharo.fogbugz.com/f/cases/11999 12131 Metacello Browser: more revealing button labels https://pharo.fogbugz.com/f/cases/12131 12159 ZnUrl should respond to asUrl https://pharo.fogbugz.com/f/cases/12159'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/14/2013 14:34'! script228 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.192.mcz Morphic-Core-StephaneDucasse.21.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-StephaneDucasse.41.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.211.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1357.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.26.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/14/2013 14:34'! update30572 "self new update30572" self withUpdateLog: '11999 Move MimeType to Deprecated30 https://pharo.fogbugz.com/f/cases/11999 12131 Metacello Browser: more revealing button labels https://pharo.fogbugz.com/f/cases/12131 12159 ZnUrl should respond to asUrl https://pharo.fogbugz.com/f/cases/12159'. self loadTogether: self script228 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MIMEType commentStamp: '' prior: 75480722! I am deprecated and have been replaced by ZnMimeType. I guess and represent the content type of a file. For a description of what is MIME, see http://en.wikipedia.org/wiki/Internet_media_type http://en.wikipedia.org/wiki/MIME Examples: MIMEType forFileNameReturnMimeTypesOrDefault: 'index.html'. MIMEType fromMIMEString: 'application/zip'.! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'SeanDeNigris 11/9/2013 13:30' prior: 43756478! setInstallModel installModel state: false; label: 'Install Stable Version'; action: [ self installConfiguration ]. ! ! !MetacelloConfigurationBrowserToolbar methodsFor: 'initialization' stamp: 'SeanDeNigris 11/9/2013 13:30' prior: 43756691! setLoadModel loadModel state: false; label: 'Load Configuration'; action: [ self loadConfiguration ]. ! ! !ZnUrl methodsFor: 'converting' stamp: 'MarcusDenker 11/14/2013 10:37'! asUrl ^ self! ! !MIMEType commentStamp: '' prior: 77011928! I am deprecated and have been replaced by ZnMimeType. I guess and represent the content type of a file. For a description of what is MIME, see http://en.wikipedia.org/wiki/Internet_media_type http://en.wikipedia.org/wiki/MIME Examples: MIMEType forFileNameReturnMimeTypesOrDefault: 'index.html'. MIMEType fromMIMEString: 'application/zip'.! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 3/6/2002 13:07' prior: 25255380! contentTypeURLEncoded ^self main: 'application' sub: 'x-www-form-urlencoded'! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 3/4/2002 17:06' prior: 25255539! defaultHTML ^self main: 'text' sub: 'html'! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 3/4/2002 15:25' prior: 25255664! defaultStream ^self main: 'application' sub: 'octet-stream'! ! !MIMEType class methodsFor: 'accessing' stamp: 'michael.rueger 2/24/2009 18:42' prior: 25239884! defaultSuffixes "MIMEType defaultSuffixes" ^DefaultSuffixes! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 3/4/2002 15:23' prior: 25255806! defaultText ^self main: 'text' sub: 'plain'! ! !MIMEType class methodsFor: 'instance creation' stamp: 'michael.rueger 2/9/2009 15:02' prior: 25255943! forExtensionReturnMimeTypesOrNil: fileExtension | loweredFileExtension | loweredFileExtension := fileExtension asLowercase. " Disabled for now as the default Pharo image does not have FFI included. Should probably be moved into a future version of the directory plugin. SmalltalkImage current platformName = 'Mac OS' ifTrue: [loweredFileExtension = '' ifTrue: [^nil]. mime := MacUTI callGetMimeTypeOrNilForFileExtension: loweredFileExtension]. mime ifNotNil: [^Array with: mime]. " ^self mimeMappings at: loweredFileExtension ifAbsent: [^nil]! ! !MIMEType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 12:36' prior: 75481178! forFileNameReturnMimeTypesOrDefault: fileName | mimeTypes | mimeTypes := self forFileNameReturnMimeTypesOrNil: fileName. mimeTypes ifNil: [ ^ Array with: self defaultStream ]. ^ mimeTypes! ! !MIMEType class methodsFor: 'instance creation' stamp: 'CamilloBruni 5/4/2012 20:29' prior: 25256872! forFileNameReturnMimeTypesOrNil: fileName " Disabled for now as the default Pharo image does not have FFI included. Should probably be moved into a future version of the directory plugin. SmalltalkImage current platformName = 'Mac OS' ifTrue: [type := MacUTI callGetMimeTypeOrNilForFileExtension: ext. type ifNil: [fileType := (FileDirectory default getMacFileTypeAndCreator: fileName) at: 1. (fileType = '????' or: [fileType = ((ByteArray new: 4 withAll:0) asString asByteString)]) ifTrue: [^self forExtensionReturnMimeTypesOrNil: ext]. consider := MacUTI callGetMimeTypeOrNilForOSType: fileType. consider ifNotNil: [^Array with: consider]] ifNotNil: [^Array with: type]]. " ^self forExtensionReturnMimeTypesOrNil: fileName asFileReference extension! ! !MIMEType class methodsFor: 'instance creation' stamp: 'JMM 12/1/2007 23:02' prior: 25257756! forFileNameReturnSingleMimeTypeOrDefault: fileName | types | types := self forFileNameReturnMimeTypesOrDefault: fileName. ^types first! ! !MIMEType class methodsFor: 'instance creation' stamp: 'JMM 12/1/2007 12:19' prior: 25257976! forFileNameReturnSingleMimeTypeOrNil: fileName | types | types := self forFileNameReturnMimeTypesOrNil: fileName. types ifNotNil: [^types first]. ^nil! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 2/16/2006 23:33' prior: 25258213! fromMIMEString: mimeString | idx main rest sub parameters | idx := mimeString indexOf: $/. idx = 0 ifTrue: [self error: 'Illegal mime type string "' , mimeString , '".']. main := mimeString copyFrom: 1 to: idx-1. rest := mimeString copyFrom: idx+1 to: mimeString size. idx := mimeString indexOf: $;. idx = 0 ifTrue: [sub := rest] ifFalse: [ sub := rest copyFrom: 1 to: idx. parameters := rest copyFrom: idx+1 to: rest size]. ^self main: main sub: sub parameters: parameters ! ! !MIMEType class methodsFor: 'accessing' stamp: 'JMM 10/2/2006 12:38' prior: 25240021! huntForDashAndRemove: aString | n | (n := aString lastIndexOf: $-) > 0 ifTrue: [^aString copyFrom: n+1 to: aString size]. ^aString ! ! !MIMEType class methodsFor: 'class initialization' stamp: 'michael.rueger 2/24/2009 18:42' prior: 25240757! initialize "MIMEType initialize" self initializeStandardMIMETypes. self initializeDefaultSuffixes! ! !MIMEType class methodsFor: 'class initialization' stamp: 'MarcusDenker 1/24/2010 11:09' prior: 25240957! initializeDefaultSuffixes "MIMEType initializeDefaultSuffixes" DefaultSuffixes := Dictionary new: 43. DefaultSuffixes at: 'application/freeloader' put: 'frl'; at: 'application/gzip' put: 'gz'; at: 'application/ips' put: 'ips'; at: 'application/mac-binhex40' put: 'hqx'; at: 'application/mac-compactpro' put: 'cpt'; at: 'application/ms-word-document' put: 'doc'; at: 'application/msword' put: 'doc'; at: 'application/octet-stream' put: 'o'; at: 'application/oda' put: 'oda'; at: 'application/olescript' put: 'axs'; at: 'application/pcphoto' put: 'zpa'; at: 'application/pdf' put: 'pdf'; at: 'application/postscript' put: 'ps'; at: 'application/rtc' put: 'rtc'; at: 'application/rtf' put: 'rtf'; at: 'application/toolbook' put: 'tbk'; at: 'application/vnd.ms-excel' put: 'xls'; at: 'application/vnd.ms-powerpoint' put: 'pps'; at: 'application/x-DemoShield' put: 'wid'; at: 'application/x-authorware-map' put: 'aas'; at: 'application/x-bcpio' put: 'bcpio'; at: 'application/x-chat' put: 'chat'; at: 'application/x-compress' put: 'z'; at: 'application/x-connector' put: 'con'; at: 'application/x-cpio' put: 'cpio'; at: 'application/x-csh' put: 'csh'; at: 'application/x-dvi' put: 'dvi'; at: 'application/x-expandedbook' put: 'ebk'; at: 'application/x-fontbitmap' put: 'pcf'; at: 'application/x-fontdataforktruetype' put: 'dfont'; at: 'application/x-fontopentype' put: 'otf'; at: 'application/x-fontpostscripttype1' put: 'pfa'; at: 'application/x-fontsuitcase' put: 'suit'; at: 'application/x-fonttruetype' put: 'ttf'; at: 'application/x-gtar' put: 'gtar'; at: 'application/x-hdf' put: 'hdf'; at: 'application/x-javascript' put: 'js'; at: 'application/x-latex' put: 'latex'; at: 'application/x-msaddr' put: 'adr'; at: 'application/x-mswallet' put: 'wlt'; at: 'application/x-netcdf' put: 'cdf'; at: 'application/x-pgp-plugin' put: 'pgp'; at: 'application/x-sh' put: 'sh'; at: 'application/x-shar' put: 'shar'; at: 'application/x-shockwave-flash' put: 'swf'; at: 'application/x-stuffit' put: 'sit'; at: 'application/x-sv4cpio' put: 'sv4cpio'; at: 'application/x-sv4crc' put: 'sv4crc'; at: 'application/x-tar' put: 'tar'; at: 'application/x-texinfo' put: 'texi'; at: 'application/x-troff' put: 'tr'; at: 'application/x-troff-man' put: 'man'; at: 'application/x-troff-me' put: 'me'; at: 'application/x-troff-ms' put: 'ms'; at: 'application/x-wais-source' put: 'wsrc'; at: 'application/x.tex' put: 'tex'; at: 'application/zip' put: 'zip'; at: 'audio/aiff' put: 'aiff'; at: 'audio/basic' put: 'au'; at: 'audio/midi' put: 'midi'; at: 'audio/mpeg' put: 'mp3'; at: 'audio/wav' put: 'wav'; at: 'audio/x-aiff' put: 'aiff'; at: 'audio/x-dspeech' put: 'cht'; at: 'audio/x-midi' put: 'mid'; at: 'audio/x-mp4-audio' put: 'm4'; at: 'audio/x-ms-wma' put: 'wma'; at: 'audio/x-pn-realaudio' put: 'ram'; at: 'audio/x-pn-realaudio-plugin' put: 'rpm'; at: 'audio/x-quicktime-protected' put: 'm4p'; at: 'audio/x-quicktime-protected-b' put: 'm4b'; at: 'audio/x-realaudio' put: 'ra'; at: 'audio/x-wav' put: 'wav'; at: 'i-world/i-vrml' put: 'ivr'; at: 'image/bmp' put: 'bmp'; at: 'image/gif' put: 'gif'; at: 'image/ief' put: 'ief'; at: 'image/jpeg' put: 'jpg'; at: 'image/png' put: 'png'; at: 'image/tiff' put: 'tiff'; at: 'image/vnd' put: 'dxf'; at: 'image/vnd' put: 'dwg'; at: 'image/x-cmu-rast' put: 'ras'; at: 'image/x-freehand' put: 'fhc'; at: 'image/x-portable-anymap' put: 'pnm'; at: 'image/x-portable-bitmap' put: 'pbm'; at: 'image/x-portable-graymap' put: 'pgm'; at: 'image/x-portable-pixmap' put: 'ppm'; at: 'image/x-rgb' put: 'rgb'; at: 'image/x-xbitmap' put: 'xbm'; at: 'image/x-xwindowdump' put: 'xwd'; at: 'message/rfc822' put: 'mime'; at: 'model/vrml' put: 'vrml'; at: 'text/css' put: 'css'; at: 'text/html' put: 'html'; at: 'text/parsnegar-document' put: 'pgr'; at: 'text/plain' put: 'text'; at: 'text/rtf' put: 'rtf'; at: 'text/tab-separated-values' put: 'tsv'; at: 'text/x-css' put: 'css'; at: 'text/x-setext' put: 'etx'; at: 'text/xml' put: 'xml'; at: 'video/avi' put: 'avi'; at: 'video/mov' put: 'mov'; at: 'video/mpeg' put: 'mpeg'; at: 'video/mpg' put: 'mpg'; at: 'video/quicktime' put: 'qt'; at: 'video/vnd.vivo' put: 'vivo'; at: 'video/x-mp4-video' put: 'mp4v'; at: 'video/x-mpeg' put: 'mpeg'; at: 'video/x-ms-asf' put: 'asf'; at: 'video/x-ms-asf' put: 'asx'; at: 'video/x-ms-wm' put: 'wm'; at: 'video/x-ms-wmv' put: 'wmv'; at: 'video/x-sgi.movie' put: 'movie'; at: 'video/x-videogram' put: 'vgm'; at: 'video/x-videogram-plugin' put: 'vgp'. ^DefaultSuffixes "| stream reverse | stream := StandardFileStream forceNewFileNamed: 'foobar.txt'. reverse := OrderedCollection new. MIMEType mimeMappings associationsDo: [:m | m value do: [:e | reverse add: m key->e]]. sorted := SortedCollection sortBlock: [:n1 :n2 | n1 value printString <= n2 value printString]. sorted addAll: reverse. sorted do: [:s | stream nextPutAll: ' at: '''. stream nextPutAll: s value printString. stream nextPutAll: ''' put: '''. stream nextPutAll: s key. stream nextPutAll: ''';';cr]. stream close." ! ! !MIMEType class methodsFor: 'class initialization' stamp: 'SvenVanCaekenberghe 10/22/2013 12:35' prior: 75481487! initializeStandardMIMETypes "MIMEType initializeStandardMIMETypes" StandardMIMEMappings := Dictionary new. self standardMIMETypes keysAndValuesDo:[:extension :mimeStrings | StandardMIMEMappings at: extension asString asLowercase put: (mimeStrings collect: [:mimeString | self fromMIMEString: mimeString]). ].! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 3/4/2002 15:22' prior: 25258796! main: mainType sub: subType ^self new main: mainType; sub: subType! ! !MIMEType class methodsFor: 'instance creation' stamp: 'mir 2/16/2006 23:33' prior: 25258950! main: mainType sub: subType parameters: parameters ^self new main: mainType; sub: subType; parameters: parameters! ! !MIMEType class methodsFor: 'accessing' stamp: 'mir 3/4/2002 16:15' prior: 25240229! mimeMappings ^StandardMIMEMappings! ! !MIMEType class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 10/22/2013 12:44' prior: 75481907! new self deprecated: 'MIMEType has been replaced with ZnMimeType' on: '20131022' in: '3.0'. ^ super new! ! !MIMEType class methodsFor: 'accessing' stamp: 'JMM 12/2/2007 14:32' prior: 25240339! simpleSuffixForMimeType: mimeType ^(self defaultSuffixes at: mimeType printString ifAbsent: [self huntForDashAndRemove: mimeType sub]) asSymbol! ! !MIMEType class methodsFor: 'class initialization' stamp: 'MarcusDenker 1/24/2010 11:10' prior: 25246570! standardMIMETypes "We had to split this method because of the 256 literal limit in methods. Please keep it in alphabetical order for easier maintenance." "MIMEType standardMIMETypes" | mimeTypes | mimeTypes := self standardMIMETypes2. mimeTypes at: 'a' put: #('application/octet-stream'); at: 'aam' put: #('application/x-authorware-map'); at: 'aas' put: #('application/x-authorware-map'); at: 'adr' put: #('application/x-msaddr'); at: 'ai' put: #('application/postscript'); at: 'aif' put: #('audio/x-aiff'); at: 'aifc' put: #('audio/x-aiff'); at: 'aiff' put: #('audio/aiff' 'audio/x-aiff'); at: 'arc' put: #('application/octet-stream'); at: 'asf' put: #('video/x-ms-asf'); at: 'asx' put: #('video/x-ms-asf'); at: 'au' put: #('audio/basic'); at: 'avi' put: #('video/avi'); at: 'axs' put: #('application/olescript'); at: 'bcpio' put: #('application/x-bcpio'); at: 'bdf' put: #('application/x-fontbitmap'); at: 'bin' put: #('application/octet-stream'); at: 'bmp' put: #('image/bmp'); at: 'c' put: #('text/plain'); at: 'cdf' put: #('application/x-netcdf'); at: 'chat' put: #('application/x-chat'); at: 'cht' put: #('audio/x-dspeech'); at: 'class' put: #('application/octet-stream'); at: 'con' put: #('application/x-connector'); at: 'cpio' put: #('application/x-cpio'); at: 'cpp' put: #('text/plain'); at: 'cpt' put: #('application/mac-compactpro'); at: 'csh' put: #('application/x-csh'); at: 'css' put: #('text/css' 'text/x-css'); at: 'dfon' put: #('application/x-fontdataforktruetype'); at: 'dfont' put: #('application/x-fontdataforktruetype'); at: 'dms' put: #('application/octet-stream'); at: 'doc' put: #('application/ms-word-document' 'application/msword'); at: 'dot' put: #('application/msword'); at: 'dump' put: #('application/octet-stream'); at: 'dus' put: #('audio/x-dspeech'); at: 'dvi' put: #('application/x-dvi'); at: 'dwg' put: #('image/vnd'); at: 'dxf' put: #('image/vnd'); at: 'ebk' put: #('application/x-expandedbook'); at: 'eps' put: #('application/postscript'); at: 'etx' put: #('text/x-setext'); at: 'exe' put: #('application/octet-stream'); at: 'ffil' put: #('application/x-fontsuitcase'); at: 'fh4' put: #('image/x-freehand'); at: 'fh5' put: #('image/x-freehand'); at: 'fhc' put: #('image/x-freehand'); at: 'frl' put: #('application/freeloader'); at: 'gif' put: #('image/gif'); at: 'gtar' put: #('application/x-gtar'); at: 'gtaru' put: #('application/x-gtar'); at: 'gz' put: #('application/gzip'); at: 'h' put: #('text/plain'); at: 'hdf' put: #('application/x-hdf'); at: 'hqx' put: #('application/mac-binhex40' 'application/octet-stream'); at: 'htm' put: #('text/html' 'text/plain'); at: 'html' put: #('text/html' 'text/plain'); at: 'ief' put: #('image/ief'); at: 'ips' put: #('application/ips'); at: 'ivr' put: #('i-world/i-vrml'); at: 'java' put: #('text/plain'); at: 'jfif' put: #('image/jpeg'); at: 'jfif-tbnl' put: #('image/jpeg'); at: 'jpe' put: #('image/jpeg'); at: 'jpeg' put: #('image/jpeg'); at: 'jpg' put: #('image/jpeg'); at: 'js' put: #('application/x-javascript'); at: 'latex' put: #('application/x-latex'); at: 'lha' put: #('application/octet-stream'); at: 'lwfn' put: #('application/x-fontpostscripttype1'); at: 'lzh' put: #('application/octet-stream'); at: 'm4' put: #('audio/x-mp4-audio'); at: 'm4b' put: #('audio/x-quicktime-protected-b'); at: 'm4p' put: #('audio/x-quicktime-protected'); at: 'm4v' put: #('video/x-mp4-video'); at: 'man' put: #('application/x-troff-man'); at: 'me' put: #('application/x-troff-me'); at: 'mid' put: #('audio/midi' 'audio/x-midi'); at: 'midi' put: #('audio/midi'); at: 'mime' put: #('message/rfc822'); at: 'mov' put: #('video/mov'); at: 'movie' put: #('video/x-sgi-movie' 'video/x-sgi.movie'); at: 'mp2' put: #('audio/mpeg'); at: 'mp3' put: #('audio/mpeg' 'audio/x-mpeg'); at: 'mp4' put: #('video/x-mp4-video'); at: 'mp4v' put: #('video/x-mp4-video'); at: 'mpe' put: #('video/mpeg'); at: 'mpeg' put: #('video/mpeg' 'video/x-mpeg'); at: 'mpg' put: #('video/mpg' 'video/mpeg' 'video/x-mpeg'); at: 'mpga' put: #('audio/mpeg'); at: 'ms' put: #('application/x-troff-ms'); at: 'mv' put: #('video/x-sgi-movie'). ^mimeTypes! ! !MIMEType class methodsFor: 'class initialization' stamp: 'MarcusDenker 1/24/2010 11:09' prior: 25250939! standardMIMETypes2 "MIMEType standardMimeTypes2" "We had to split this method because of the 256 literal limit in methods." | mimeTypes | mimeTypes := Dictionary new: 100. mimeTypes at: 'nc' put: #('application/x-netcdf'); at: 'o' put: #('application/octet-stream'); at: 'oda' put: #('application/oda'); at: 'ogg' put: #('audio/ogg'); at: 'otf' put: #('application/x-fontopentype'); at: 'otto' put: #('application/x-fontopentype'); at: 'pbm' put: #('image/x-portable-bitmap'); at: 'pcf' put: #('application/x-fontbitmap'); at: 'pdf' put: #('application/pdf'); at: 'pfa' put: #('application/x-fontpostscripttype1'); at: 'pfb' put: #('application/x-fontpostscripttype1'); at: 'pgm' put: #('image/x-portable-graymap'); at: 'pgp' put: #('application/x-pgp-plugin'); at: 'pgr' put: #('text/parsnegar-document'); at: 'pl' put: #('text/plain'); at: 'png' put: #('image/png'); at: 'pnm' put: #('image/x-portable-anymap'); at: 'pot' put: #('application/vnd.ms-powerpoint'); at: 'ppa' put: #('application/vnd.ms-powerpoint'); at: 'ppm' put: #('image/x-portable-pixmap'); at: 'pps' put: #('application/vnd.ms-powerpoint'); at: 'ppt' put: #('application/mspowerpoint'); at: 'ppz' put: #('application/vnd.ms-powerpoint'); at: 'pr' put: #('application/x-squeak-project'); at: 'ps' put: #('application/postscript'); at: 'pwz' put: #('application/vnd.ms-powerpoint'); at: 'qt' put: #('video/quicktime'); at: 'ra' put: #('audio/x-realaudio'); at: 'ram' put: #('audio/x-pn-realaudio'); at: 'ras' put: #('image/x-cmu-rast'); at: 'rgb' put: #('image/x-rgb'); at: 'rm' put: #('audio/x-pn-realaudio'); at: 'roff' put: #('application/x-troff'); at: 'rpm' put: #('audio/x-pn-realaudio-plugin'); at: 'rtc' put: #('application/rtc'); at: 'rtf' put: #('text/rtf' 'application/rtf'); at: 'rtx' put: #('application/rtf'); at: 'saveme' put: #('application/octet-stream'); at: 'sfnt' put: #('application/x-fontsuitcase'); at: 'sh' put: #('application/x-sh'); at: 'shar' put: #('application/x-shar'); at: 'sit' put: #('application/x-stuffit'); at: 'snd' put: #('audio/basic'); at: 'spx' put: #('audio/x-speex'); at: 'src' put: #('application/x-wais-source'); at: 'sts' put: #('application/x-squeak-source'); at: 'suit' put: #('application/x-fontsuitcase'); at: 'sv4cpio' put: #('application/x-sv4cpio'); at: 'sv4crc' put: #('application/x-sv4crc'); at: 'swf' put: #('application/x-shockwave-flash'); at: 't' put: #('application/x-troff'); at: 'tar' put: #('application/x-tar'); at: 'tbk' put: #('application/toolbook'); at: 'tex' put: #('application/x.tex'); at: 'texi' put: #('application/x-texinfo'); at: 'texinfo' put: #('application/x-texinfo'); at: 'text' put: #('text/plain'); at: 'tfil' put: #('application/x-fontsuitcase'); at: 'tif' put: #('image/tiff'); at: 'tiff' put: #('image/tiff'); at: 'tr' put: #('application/x-troff'); at: 'tsv' put: #('text/tab-separated-values'); at: 'ttc' put: #('application/x-fonttruetype'); at: 'ttcf' put: #('application/x-fonttruetype'); at: 'ttf' put: #('application/x-fonttruetype'); at: 'txt' put: #('text/plain'); at: 'ua' put: #('text/plain'); at: 'ustar' put: #('audio/basic'); at: 'uu' put: #('application/octet-stream'); at: 'vgm' put: #('video/x-videogram'); at: 'vgp' put: #('video/x-videogram-plugin'); at: 'vgx' put: #('video/x-videogram'); at: 'viv' put: #('video/vnd.vivo'); at: 'vivo' put: #('video/vnd.vivo'); at: 'vrml' put: #('model/vrml'); at: 'wav' put: #('audio/wav' 'audio/x-wav'); at: 'wid' put: #('application/x-DemoShield'); at: 'wiz' put: #('application/msword'); at: 'wlt' put: #('application/x-mswallet'); at: 'wm' put: #('video/x-ms-wm'); at: 'wma' put: #('audio/x-ms-wma'); at: 'wmv' put: #('video/x-ms-wmv'); at: 'wrl' put: #('model/vrml'); at: 'wsrc' put: #('application/x-wais-source'); at: 'xbm' put: #('image/x-xbitmap'); at: 'xlb' put: #('application/vnd.ms-excel'); at: 'xls' put: #('application/vnd.ms-excel'); at: 'xml' put: #('text/xml' 'text/html'); at: 'xpm' put: #('image/x-xpixmap'); at: 'xul' put: #('application/vnd.mozilla.xul+xml'); at: 'xwd' put: #('image/x-xwindowdump'); at: 'z' put: #('application/x-compress'); at: 'zip' put: #('application/zip'); at: 'zpa' put: #('application/pcphoto'). ^mimeTypes ! ! !MIMEType class methodsFor: 'accessing' stamp: 'JMM 12/2/2007 14:31' prior: 25240559! suffixForMimeType: mimeType ^self defaultSuffixes at: mimeType printString ifAbsent: [mimeType sub]! ! !MIMEType methodsFor: 'comparing' stamp: 'mir 3/6/2002 12:11' prior: 25239085! = anotherObject anotherObject class == self class ifFalse: [^false]. ^self main = anotherObject main and: [self sub = anotherObject sub]! ! !MIMEType methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 10/22/2013 12:37' prior: 75482121! asMIMEType ^ self asZnMimeType ! ! !MIMEType methodsFor: 'comparing' stamp: 'JMM 7/26/2006 16:26' prior: 25239296! beginsWith: aString ^self printString beginsWith: aString! ! !MIMEType methodsFor: 'comparing' stamp: 'mir 12/17/2005 14:17' prior: 25239424! hash ^self main hash bitXor: self sub hash! ! !MIMEType methodsFor: 'accessing' stamp: 'mir 3/4/2002 15:21' prior: 25238623! main ^main! ! !MIMEType methodsFor: 'accessing' stamp: 'mir 3/4/2002 15:21' prior: 25238702! main: mainType main := mainType! ! !MIMEType methodsFor: 'accessing' stamp: 'mir 2/16/2006 23:33' prior: 25238803! parameters: params parameters := params! ! !MIMEType methodsFor: 'printing' stamp: 'mir 3/4/2002 16:14' prior: 25239622! printOn: stream stream nextPutAll: main; nextPut: $/ ; nextPutAll: sub! ! !MIMEType methodsFor: 'accessing' stamp: 'mir 3/4/2002 15:21' prior: 25238911! sub ^sub! ! !MIMEType methodsFor: 'accessing' stamp: 'mir 3/4/2002 15:21' prior: 25238988! sub: subType sub := subType! ! "Deprecated30"! "FileSystem-Core"! "Tools"! "Zinc-Resource-Meta-Core"! ----End fileIn----! ----QUIT----2013-11-14T14:36:54.227644+01:00 Pharo.image priorSource: 26668543! ----STARTUP----2013-11-14T14:41:47.536914+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-14T14:41:47.708915+01:00 Pharo-30572.image priorSource: 26702867! ----STARTUP----2013-11-14T16:35:46.183467+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/14/2013 16:32' prior: 77000490! commentForCurrentUpdate ^ '12142 Cannot execute self xxxx in a message list https://pharo.fogbugz.com/f/cases/12142 12161 Nativeboost crash NBWndClassEx https://pharo.fogbugz.com/f/cases/12161 12008 Removed methods that calls not implemented message https://pharo.fogbugz.com/f/cases/12008'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/14/2013 16:33'! script229 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.170.mcz Manifest-CriticBrowser-MarcusDenker.129.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.93.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.213.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1357.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.26.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/14/2013 16:33'! update30573 "self new update30573" self withUpdateLog: '12142 Cannot execute self xxxx in a message list https://pharo.fogbugz.com/f/cases/12142 12161 Nativeboost crash NBWndClassEx https://pharo.fogbugz.com/f/cases/12161 12008 Removed methods that calls not implemented message https://pharo.fogbugz.com/f/cases/12008'. self loadTogether: self script229 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TextModel methodsFor: 'protocol-doIt' stamp: 'MarcusDenker 11/14/2013 15:24' prior: 76558060! doItReceiver ^ doItReceiver value theNonMetaClass! ! !WorldMorph methodsFor: 'menu & halo' stamp: 'ClementBera 10/25/2013 14:00' prior: 74607718! dispatchKeystroke: anEvent "A keystroke was hit when no keyboard focus was set, so it is sent here to the world instead." | aChar ascii | aChar := anEvent keyCharacter. (ascii := aChar asciiValue) = 27 ifTrue: "escape key" [^ self invokeWorldMenuFromEscapeKey]. (self navigationKey: anEvent) ifTrue: [^self]. (anEvent commandKeyPressed and: [Editor cmdKeysInText]) ifTrue: [^ self dispatchCommandKeyInWorld: aChar event: anEvent]. "It was unhandled. Remember the keystroke." self lastKeystroke: anEvent keyString. self triggerEvent: #keyStroke. super dispatchKeystroke: anEvent! ! !Morph methodsFor: 'debug and other' stamp: 'ClementBera 10/25/2013 13:58' prior: 74702448! deleteAnyMouseActionIndicators self changed. self removeProperty: #mouseActionIndicatorMorphs. self hasRolloverBorder: false. self removeProperty: #rolloverWidth. self removeProperty: #rolloverColor. self layoutChanged. self changed. ! ! !Morph methodsFor: 'undo' stamp: 'ClementBera 10/25/2013 14:00' prior: 74853472! undoMove: cmd redo: redo owner: formerOwner bounds: formerBounds predecessor: formerPredecessor "Handle undo and redo of move commands in morphic" self owner ifNil: [ ^ Beeper beep ]. formerOwner ifNotNil: [formerPredecessor ifNil: [formerOwner addMorphFront: self] ifNotNil: [formerOwner addMorph: self after: formerPredecessor]]. self bounds: formerBounds. (self isSystemWindow) ifTrue: [self activate]! ! !BorderedMorph methodsFor: 'menu' stamp: 'ClementBera 10/25/2013 13:45' prior: 74548261! addBorderStyleMenuItems: aMenu hand: aHandMorph "Add border-style menu items" | subMenu | subMenu := UIManager default newMenuIn: self for: self. subMenu addStayUpItemSpecial. subMenu addList: {{'border width...' translated. #changeBorderWidth:}}. subMenu addLine. BorderStyle borderStyleChoices do: [:sym | (self borderStyleForSymbol: sym) ifNotNil: [subMenu add: sym translated target: self selector: #setBorderStyle: argument: sym]]. aMenu add: 'border style' translated subMenu: subMenu ! ! !NBWndClassEx methodsFor: 'initialization' stamp: 'jb 11/14/2013 12:40' prior: 48940607! initialize self cbSize: (self class instanceSize).! ! PolygonMorph removeSelector: #intersectionWithLineSegmentFromCenterTo:! BorderedMorph removeSelector: #intersectionWithLineSegmentFromCenterTo:! BorderedMorph removeSelector: #changeBorderColor:! "Morphic-Base"! "Morphic-Core"! "NativeBoost-Win32"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-11-14T16:35:55.415465+01:00 Pharo.image priorSource: 26703064! ----STARTUP----2013-11-14T16:40:44.363902+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-14T16:40:44.531899+01:00 Pharo-30573.image priorSource: 26717507! ----STARTUP----2013-11-14T17:43:44.03782+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/14/2013 17:41' prior: 77035011! commentForCurrentUpdate ^ '12162 Critics run on all extended classes https://pharo.fogbugz.com/f/cases/12162 12142 Cannot execute self xxxx in a message list https://pharo.fogbugz.com/f/cases/12142 12164 One Click on Mac is broken due to new source file lookup https://pharo.fogbugz.com/f/cases/12164'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/14/2013 17:41'! script230 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.173.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.128.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1357.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.26.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/14/2013 17:41'! update30574 "self new update30574" self withUpdateLog: '12162 Critics run on all extended classes https://pharo.fogbugz.com/f/cases/12162 12142 Cannot execute self xxxx in a message list https://pharo.fogbugz.com/f/cases/12142 12164 One Click on Mac is broken due to new source file lookup https://pharo.fogbugz.com/f/cases/12164'. self loadTogether: self script230 merge: false. NativeBoost prepareForProduction. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: '*Manifest-Core' stamp: 'CamilleTeruel 11/12/2013 19:44'! manifestBuilderForRuleChecker: aRuleChecker "Return the manifestsince the rulechecker is keeping a cache, we ask it back" ^ aRuleChecker manifestBuilderOfPackage: self! ! !RBSentNotImplementedRule methodsFor: 'running' stamp: 'CamilleTeruel 11/8/2013 16:21' prior: 31355992! checkMethod: aContext | message | message := aContext messages detect: [ :each | (aContext implements: each) not ] ifNone: [ aContext superMessages detect: [ :each | aContext selectedClass superclass isNil or: [ (aContext selectedClass superclass canUnderstand: each) not ] ] ifNone: [ aContext selfMessages detect: [ :each | (aContext selectedClass allSelectors includes: each) not ] ifNone: [ nil ] ] ]. message notNil ifTrue: [ result addSearchString: message. result addClass: aContext selectedClass selector: aContext selector ]! ! !SelectPackageBrowser class methodsFor: 'instance creation' stamp: 'CamilleTeruel 11/14/2013 14:45' prior: 32900040! open self new items: RPackageOrganizer default packages; openWithSpec ! ! !SelectPackageBrowser methodsFor: 'protocol' stamp: 'CamilleTeruel 11/14/2013 14:43' prior: 34161116! nextAction | env packages | packages := selectedModel listItems. env := RBPackageEnvironment new packages: packages. SelectRuleBrowser openWithEnvironment: env removeTestCase: self addTestCaseClasses state. self delete ! ! !RBSmalllintChecker methodsFor: 'private' stamp: 'CamilleTeruel 11/14/2013 13:32' prior: 49863287! checkMethodsForClass: aClass context selectedClass: aClass. ^environment selectorsForClass: aClass do: [:each | context selector: each. rule checkMethod: context. methodBlock value]! ! !ResetWindow methodsFor: 'initialization' stamp: 'CamilleTeruel 11/12/2013 19:35' prior: 33857970! setCurrentConfigurationModel currentConfigurationModel state: false; label: 'Uses Current Configuration'; action: [ CriticBrowser openOnWorkingConfiguration: CriticWorkingConfiguration current. self delete ]! ! !RBBadMessageRule methodsFor: 'running' stamp: 'CamilleTeruel 11/14/2013 14:06'! checkMethod: aContext self badSelectors do: [ :badSelector | (aContext compiledMethod sendsSelector: badSelector) ifTrue: [ result addClass: aContext selectedClass selector: aContext selector; searchStrings: self badSelectors ] ] ! ! !TextModel methodsFor: 'protocol-doIt' stamp: 'md 11/14/2013 17:29' prior: 77046513! doItReceiver | receiver | receiver := doItReceiver value. receiver isBehavior ifTrue: [receiver := receiver theNonMetaClass]. ^receiver! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'CamilleTeruel 11/12/2013 19:35' prior: 69226004! nextAction | rules rbRule | self delete. rules := selectedModel roots. rules do: [ :each | each leaves do: [ :leave | (selectRule anySatisfy: [ :r | r = leave ]) ifFalse: [ each removeRule: leave ] ] ]. rules := rules reject: [ :each | each rules isEmpty ]. rbRule := RBCompositeLintRule new name: self defaultRulesRootName; rules: rules; yourself. CriticWorkingConfiguration current rule: rbRule; environment: environment; removeTestCase: removeTestCase. CriticBrowser openOnWorkingConfiguration: CriticWorkingConfiguration current! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'CamilleTeruel 11/12/2013 19:43' prior: 33930405! manifestBuilderOf: aPackage ^ aPackage manifestBuilderForRuleChecker: self ! ! !SmalllintManifestChecker methodsFor: 'actions' stamp: 'CamilleTeruel 11/14/2013 14:11' prior: 49834937! runRules: aCompositeRule onPackage: aPackage withoutTestCase: aBoolean rule := aCompositeRule. environment := RBPackageEnvironment package: aPackage. self flag: 'Instead of manually avoiding the testcases and traits? we should just modify the environment and subtract the testscases from the built package environment.'. environment classesDo: [ :class | (class isManifest or: [aBoolean and: [class allSuperclasses includes: TestCase ]]) ifFalse: [ (environment definesClass: class) ifTrue: [ self checkClass: class ]. self checkMethodsForClass: class ] ]! ! !CriticBrowser class methodsFor: 'instance creation' stamp: 'CamilleTeruel 11/12/2013 19:31' prior: 20248952! open | env rules | rules := RBCompositeLintRule allGoodRules rules. env := RBBrowserEnvironment default. self openOnRule: rules onEnvironment: env! ! !CriticBrowser class methodsFor: 'instance creation' stamp: 'CamilleTeruel 11/12/2013 19:36'! openOnWorkingConfiguration: aWorkingConfiguration | cbr | cbr := self new rules: aWorkingConfiguration rule; environment: aWorkingConfiguration environment; removeTestCase: aWorkingConfiguration removeTestCase; yourself. cbr openWithSpec. cbr applyRules. cbr rulesModel changed: #listElementAt:.! ! !CriticBrowser class methodsFor: 'instance creation' stamp: 'CamilleTeruel 11/14/2013 14:38' prior: 33566401! packagesMenu: aBuilder (aBuilder item: #'Critic Browser') action: [ self openOnRule: (RBCompositeLintRule allGoodRules) onEnvironment: (RBPackageEnvironment new packages: aBuilder model selectedPackages; yourself) ]; help: 'Running critics rules on this package'! ! !CriticBrowser methodsFor: 'private' stamp: 'CamilleTeruel 11/13/2013 07:42' prior: 69240577! applyRules | packageCount nbPackage process rules | rules := rulesModel roots first. rules resetResult. nbPackage := rbEnvironment packages size. packageCount := 0. self updateTree. process := [ rbEnvironment packages do: [ :package | | windowTitle | packageCount := packageCount + 1. windowTitle := String streamContents: [ :s | s << 'run rules on ' << package packageName << ' (' << packageCount asString << '/' << nbPackage asString << ')' ]. self setTitle: windowTitle. checker runRules: rules onPackage: package withoutTestCase: removeTestCase ]. checker rule: rules. self setTitle: 'Critics Browser'. cache packages: rbEnvironment. cache initCache. self updateTree. self registerToAnnouncements ] newProcess. process name: 'SmallLint'. process resume. ! ! !CriticBrowser methodsFor: 'system annoucements' stamp: 'CamilleTeruel 11/14/2013 13:43' prior: 33899572! methodRemoved: anAnnouncement | classes | classes := rbEnvironment packages flatCollect: [ :package | package classes]. (classes anySatisfy: [ :cl | anAnnouncement methodClass = cl ]) ifFalse: [ ^ self ]. cache itemRemoved: anAnnouncement methodRemoved! ! !CriticBrowser methodsFor: 'private' stamp: 'CamilleTeruel 11/14/2013 14:13' prior: 69241576! reapplyRule: aRule | oldCritics | oldCritics := aRule critics. aRule resetResult. rbEnvironment packages do: [ :package | checker runRules: aRule onPackage: package withoutTestCase: removeTestCase ]. (oldCritics \ (aRule critics)) do: [ :each | cache removeCritic: each forRule: aRule. cache removeFalsePositive: each forRule: aRule. cache removeToDo: each forRule: aRule ]. checker rule: aRule. ! ! RBBadMessageRule removeSelector: #checkClass:! MCPackageManager removeSelector: #manifestBuilderForRuleChecker:! CriticBrowser removeSelector: #classRemoved:! CriticBrowser class removeSelector: #packagesGroup:! CriticBrowser class removeSelector: #openOnWorkspace:! "Manifest-Core"! "Manifest-CriticBrowser"! "Refactoring-Critics"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-11-14T17:43:52.655817+01:00 Pharo.image priorSource: 26717704! ----STARTUP----2013-11-14T17:49:22.046454+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-14T17:49:22.214453+01:00 Pharo-30574.image priorSource: 26737072! ----STARTUP----2013-11-15T09:47:54.637283+01:00 as /Users/denker/Desktop/30574/Pharo-30574.image! ----QUIT----2013-11-15T09:48:20.936122+01:00 Pharo-30574.image priorSource: 26737269! ----STARTUP----2013-11-15T09:56:45.110697+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/15/2013 09:54' prior: 77049650! commentForCurrentUpdate ^ '12168 Menu actions of MetacelloConfigurationBrowser do not fit buttons https://pharo.fogbugz.com/f/cases/12168 12169 Inspector contextual menu raises DNU MenuModel>>#add:target:selector: https://pharo.fogbugz.com/f/cases/12169'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/15/2013 09:54'! script231 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1680.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.173.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-StephaneDucasse.652.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.26.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/15/2013 09:54'! update30575 "self new update30575" self withUpdateLog: '12168 Menu actions of MetacelloConfigurationBrowser do not fit buttons https://pharo.fogbugz.com/f/cases/12168 12169 Inspector contextual menu raises DNU MenuModel>>#add:target:selector: https://pharo.fogbugz.com/f/cases/12169'. self loadTogether: self script231 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigurationBrowserPane commentStamp: '' prior: 0! A MetacelloConfigurationBrowserPane is xxxxxxxxx. Instance Variables configurationList: configurationPattern: configurations: repository: configurationList - the list model to display configurations configurationPattern - a pattern to filter configurations in the configurationList configurations - a sorted list of available configurations in the repository repository - the repository to use ! !MetacelloConfigurationBrowserToolbar commentStamp: '' prior: 0! A MetacelloConfigurationBrowserToolbar is a toolbar for the configuration browser. Instance Variables installModel: loadModel: installModel - button model to install a configuration loadModel - button model to load a configuration ! !InstanceVariableEyeElement methodsFor: 'menu' stamp: 'TudorGirba 11/14/2013 22:17' prior: 74108612! customSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [:anItem | anItem name: 'List Methods Using "', self instVarName, '"'; action: [ self referencesToInstanceVariable] ]; addItem: [:anItem | anItem name: 'List Methods Storing into "', self instVarName, '"'; action: [ self storingsIntoInstanceVariable]. ]. ]! ! !MetacelloConfigurationBrowserPane commentStamp: '' prior: 77080808! A MetacelloConfigurationBrowserPane is xxxxxxxxx. Instance Variables configurationList: configurationPattern: configurations: repository: configurationList - the list model to display configurations configurationPattern - a pattern to filter configurations in the configurationList configurations - a sorted list of available configurations in the repository repository - the repository to use ! !MetacelloConfigurationBrowserPane methodsFor: 'menu' stamp: 'TorstenBergmann 11/14/2013 20:18' prior: 75892104! configurationListMenu: aMenu aMenu target: self. aMenu title: 'Configuration'. self selectedConfiguration ifNotNil: [ aMenu add: 'Install stable version' action: #installConfiguration. self selectedConfigurationClass isNil ifTrue: [ aMenu add: 'Load configuration' action: #loadConfiguration ] ifFalse: [ aMenu add: 'Browse configuration class' action: #browseConfiguration ]. aMenu addLine ]. aMenu add: 'Switch Repository' action: #switchRepository; add: 'Refresh' action: #refreshRepository. ^aMenu! ! !MetacelloConfigurationBrowserToolbar commentStamp: '' prior: 77081354! A MetacelloConfigurationBrowserToolbar is a toolbar for the configuration browser. Instance Variables installModel: loadModel: installModel - button model to install a configuration loadModel - button model to load a configuration ! "Spec-Inspector"! "Tools"! ----End fileIn----! ----QUIT----2013-11-15T09:56:51.930695+01:00 Pharo.image priorSource: 26737460! ----STARTUP----2013-11-15T10:01:42.569497+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-15T10:01:42.733498+01:00 Pharo-30575.image priorSource: 26752057! ----STARTUP----2013-11-15T12:38:39.240272+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/15/2013 12:36' prior: 77069403! commentForCurrentUpdate ^ '12172 relax #testUnknownProcesses a little https://pharo.fogbugz.com/f/cases/12172 12171 Fix last reference to ExtendedNumberParser https://pharo.fogbugz.com/f/cases/12171 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/15/2013 12:36'! script232 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1682.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.173.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-StephaneDucasse.443.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.655.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-StephaneDucasse.26.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.12.mcz Zinc-FileSystem-SvenVanCaekenberghe.9.mcz Zinc-HTTP-StephaneDucasse.377.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-MarcusDenker.26.mcz Zinc-Resource-Meta-FileSystem-MarcusDenker.3.mcz Zinc-Resource-Meta-Tests-StephaneDucasse.15.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.193.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/15/2013 12:36'! update30576 "self new update30576" self withUpdateLog: '12172 relax #testUnknownProcesses a little https://pharo.fogbugz.com/f/cases/12172 12171 Fix last reference to ExtendedNumberParser https://pharo.fogbugz.com/f/cases/12171 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165'. self loadTogether: self script232 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Number class methodsFor: 'instance creation' stamp: 'MarcusDenker 11/15/2013 10:54' prior: 28519355! readFrom: stringOrStream ifFail: aBlock "Answer a number as described on aStream. The number may be any accepted Smalltalk literal Number format. It can include a leading radix specification, as in 16rFADE. It can as well be NaN, Infinity or -Infinity for conveniency. If input does not represent a valid number, then execute fail block and leave the stream positioned before offending character" ^(NumberParser on: stringOrStream) failBlock: aBlock; nextNumber! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 11/15/2013 11:10' prior: 32251715! testObsoleteBehaviors | obsoleteBehaviors | "Ensure the environment is clean" 3 timesRepeat: [ Smalltalk garbageCollect ]. Smalltalk fixObsoleteReferences. obsoleteBehaviors := SystemNavigation new obsoleteBehaviors select: [ :each | each isAnonymous not and: [(each isKindOf: NBExternalArray) not ] ]. "we skip all anonymous behaviors and classes that might be created by NB tests" self assert: obsoleteBehaviors isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Obsolete behaviors remaining: '; print: obsoleteBehaviors ]]! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 11/15/2013 11:25' prior: 41481466! testUnknownProcesses "Make sure that there are no other processes running except the known processes" | unknownProcesses | unknownProcesses := self actualProcesses difference: self knownProcesses. self assert: unknownProcesses size <=2 description: (String streamContents: [ :out | out << 'Found unknown processes: '. unknownProcesses do: [ :each | out print: each ] separatedBy: [ out << ', ' ] ])! ! "Kernel"! "Tests"! ----End fileIn----! ----QUIT----2013-11-15T12:38:47.126271+01:00 Pharo.image priorSource: 26752254! ----STARTUP----2013-11-15T12:47:33.7838+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-15T12:47:33.9478+01:00 Pharo-30576.image priorSource: 26765807! !ZnByteStringBecameWideString commentStamp: '' prior: 43932802! I am ZnByteStringBecameWideString, a resumable Error signalled to indicate that some byteString was changed to a wideString. Used by ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid a #becomeForward: when a ByteString automagically changes into a WideString. Part of Zinc HTTP Components.! !ZnUTF16Encoder commentStamp: '' prior: 0! I am ZnUTF16Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-16 encoding and decoding of Unicode according to RFC 2781. Wikipedia reference http://en.wikipedia.org/wiki/UTF-16 Part of Zinc HTTP Components. ! !ZnUTF8Encoder commentStamp: '' prior: 42830102! I am ZnUTF8Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-8 encoding and decoding of Unicode according to RFC 3629. Wikipedia reference http://en.wikipedia.org/wiki/UTF-8 Part of Zinc HTTP Components.! ----STARTUP----2013-11-16T16:08:46.018779+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ZnCharacterWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/4/2013 15:25' prior: 55323812! next: count putAll: collection startingAt: offset "Write count characters from collection starting at offset." self encoder next: count putAll: collection startingAt: offset toStream: stream ! ! !ZnByteStringBecameWideString commentStamp: '' prior: 77097816! I am ZnByteStringBecameWideString, a resumable Error signalled to indicate that some byteString was changed to a wideString. Used by ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid a #becomeForward: when a ByteString automagically changes into a WideString. Part of Zinc HTTP Components.! !ZnByteStringBecameWideString class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 11/13/2013 13:49' prior: 43933331! convert: byteString "Convert byteString to a wideString, signalling a resumable error" | wideString | wideString := WideString from: byteString. self new byteString: byteString; wideString: wideString; signal. ^ wideString! ! !ZnByteStringBecameWideString methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 11/13/2013 14:28'! becomeForward "Switch the identities of byteString and wideString using #becomeForward:" byteString becomeForward: wideString ! ! !ZnByteStringBecameWideString methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/13/2013 13:26'! isResumable ^ true! ! !ZnCharacterReadStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/13/2013 14:38' prior: 55318553! readInto: collection startingAt: offset count: requestedCount "Read count elements and place them in collection starting at offset. Return the number of elements actually read." ^ peekedCharacter ifNil: [ | readCount | [ readCount := self encoder readInto: collection startingAt: offset count: requestedCount fromStream: stream ] on: ZnByteStringBecameWideString do: [ :byteStringBecameWideString | byteStringBecameWideString becomeForward; resume ]. readCount ] ifNotNil: [ collection at: offset put: peekedCharacter. peekedCharacter := nil. (self readInto: collection startingAt: offset + 1 count: requestedCount - 1) + 1 ]! ! !ZnCharacterEncoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 11/8/2013 10:44'! errorOutsideRange self error: 'Character Unicode code point outside encoder range'! ! !ZnUTF16Encoder commentStamp: '' prior: 77098177! I am ZnUTF16Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-16 encoding and decoding of Unicode according to RFC 2781. Wikipedia reference http://en.wikipedia.org/wiki/UTF-16 Part of Zinc HTTP Components. ! !ZnUTF16Encoder class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/8/2013 11:02'! handlesEncoding: string "Return true when my instances handle the encoding described by string" ^ #( 'utf-16' 'utf16' 'utf-16be' 'utf-16le' 'utf16be' 'utf16le' ) includes: string! ! !ZnUTF16Encoder class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 11/8/2013 14:43'! newForEncoding: string "Return a new character encoder object for an encoding described by string. Try to infer endianness from string, defaulting to big endian." | encoder | encoder := self new. (string endsWith: 'be') ifTrue: [ encoder beBigEndian ]. (string endsWith: 'le') ifTrue: [ encoder beLittleEndian ]. ^ encoder! ! !ZnUTF16Encoder methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 11/8/2013 13:32'! beBigEndian endianness := #big! ! !ZnUTF16Encoder methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 11/8/2013 13:32'! beLittleEndian endianness := #little! ! !ZnUTF16Encoder methodsFor: 'acccessing' stamp: 'SvenVanCaekenberghe 11/8/2013 15:47'! byteOrderMark ^ 16rFEFF! ! !ZnUTF16Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 11/8/2013 16:16'! encodeStringWithByteOrderMark: string "Encode string and return the resulting byte array. Always add a Unicode byte order mark (BOM) in front." ^ ByteArray streamContents: [ :stream | self nextPutByteOrderMarkToStream: stream. self next: string size putAll: string startingAt: 1 toStream: stream ]! ! !ZnUTF16Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 11:08'! encodedByteCountFor: character "Return how many bytes are needed to encode character" | code | code := character codePoint. code <= 65535 ifTrue: [ ^ 2 ]. code <= self maximumUTF16Code ifTrue: [ ^ 4 ]. self errorOutsideRange! ! !ZnUTF16Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 11/8/2013 11:40'! errorIncomplete self error: 'Incomplete utf-16 encoding'! ! !ZnUTF16Encoder methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 11/8/2013 13:27'! initialize endianness := #big! ! !ZnUTF16Encoder methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 13:08'! isBigEndian ^ endianness = #big! ! !ZnUTF16Encoder methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 13:07'! isLittleEndian ^ endianness = #little! ! !ZnUTF16Encoder methodsFor: 'acccessing' stamp: 'SvenVanCaekenberghe 11/8/2013 11:09'! maximumUTF16Code ^ 16r10FFFF! ! !ZnUTF16Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 15:14'! nextFromStream: stream "Read and return the next character from stream" | word leadSurrogate trailSurrogate code | word := self read16BitWordFromStream: stream. (self processByteOrderMark: word) ifTrue: [ word := self read16BitWordFromStream: stream ]. ^ (word < 16rD800 or: [ word > 16rDBFF ]) ifTrue: [ Character codePoint: word ] ifFalse: [ leadSurrogate := word. trailSurrogate := self read16BitWordFromStream: stream. code := (leadSurrogate - 16rD800) * 16r400 + (trailSurrogate - 16rDC00). Character codePoint: 16r10000 + code ]! ! !ZnUTF16Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 14:59'! nextPut: character toStream: stream "Write the encoding for character to stream" | code leadSurrogate trailSurrogate | code := character codePoint. code <= 65535 ifTrue: [ ^ self write16BitWord: code toStream: stream ]. code <= self maximumUTF16Code ifTrue: [ code := code - 16r10000. leadSurrogate := 16rD800 + (code // 16r400). trailSurrogate := 16rDC00 + (code \\ 16r400). self write16BitWord: leadSurrogate toStream: stream. self write16BitWord: trailSurrogate toStream: stream ] ifFalse: [ self errorOutsideRange ]! ! !ZnUTF16Encoder methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 11/8/2013 13:56'! nextPutByteOrderMarkToStream: stream self write16BitWord: self byteOrderMark toStream: stream ! ! !ZnUTF16Encoder methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 11/8/2013 14:57'! printOn: stream super printOn: stream. stream nextPut: $(. stream nextPutAll: endianness; nextPutAll: ' endian'. stream nextPut: $)! ! !ZnUTF16Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/8/2013 15:55'! processByteOrderMark: word ^ (word = 16rFEFF or: [ word = 16rFFFE ]) ifTrue: [ word = 16rFFFE ifTrue: [ self swapEndianness ]. true ] ifFalse: [ false ]! ! !ZnUTF16Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/8/2013 13:40'! read16BitWordFromStream: stream | firstByte secondByte | firstByte := stream next. secondByte := stream next. (firstByte isNil or: [ secondByte isNil ]) ifTrue: [ self errorIncomplete ]. ^ self isBigEndian ifTrue: [ secondByte + (firstByte << 8) ] ifFalse: [ firstByte + (secondByte << 8) ] ! ! !ZnUTF16Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/8/2013 14:05'! swapEndianness self isLittleEndian ifTrue: [ self beBigEndian ] ifFalse: [ self beLittleEndian ]! ! !ZnUTF16Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/8/2013 13:33'! write16BitWord: word toStream: stream self isBigEndian ifTrue: [ stream nextPut: (word digitAt: 2); nextPut: (word digitAt: 1) ] ifFalse: [ stream nextPut: (word digitAt: 1); nextPut: (word digitAt: 2) ]! ! !ZnUTF8Encoder commentStamp: '' prior: 77098487! I am ZnUTF8Encoder, a concrete subclass of ZnCharacterEncoder. I implement the variable length UTF-8 encoding and decoding of Unicode according to RFC 3629. Wikipedia reference http://en.wikipedia.org/wiki/UTF-8 Part of Zinc HTTP Components.! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 11:05' prior: 39582923! encodedByteCountFor: character | code | code := character codePoint. code < 128 ifTrue: [ ^ 1 ]. code < 2048 ifTrue: [ ^ 2 ]. code < 65535 ifTrue: [ ^ 3 ]. code <= self maximumUTF8Code ifTrue: [ ^ 4 ]. self errorOutsideRange! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/6/2013 08:32' prior: 39583242! encodingLengthFor: byte byte < 128 ifTrue: [ ^ 1 ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ ^ 2 ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ ^ 3 ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ ^ 4 ]. self errorIllegalLeadingByte! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 11/8/2013 10:52'! errorIllegalContinuationByte self error: 'Illegal continuation byte for utf-8 encoding'! ! !ZnUTF8Encoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 11/6/2013 08:32'! errorIllegalLeadingByte self error: 'Illegal leading byte for utf-8 encoding'! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/5/2013 11:35' prior: 39584142! findFirstNonASCIIIn: string startingAt: offset "This calls a fast primitive. Note that string can be a ByteString or ByteArray" offset > string size ifTrue: [ ^ 0 ]. ^ ByteString findFirstInString: string inSet: ByteASCIISet startingAt: offset! ! !ZnUTF8Encoder methodsFor: 'accesing' stamp: 'SvenVanCaekenberghe 11/29/2010 21:19' prior: 55731548! maximumUTF8Code ^ 16r10FFFF! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 10:54' prior: 43935544! nextFromStream: stream | code byte next | (byte := stream next) < 128 ifTrue: [ ^ Character codePoint: byte ]. (byte bitAnd: 2r11100000) == 2r11000000 ifTrue: [ code := byte bitAnd: 2r00011111. ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self errorIllegalContinuationByte ]. code < 128 ifTrue: [ self errorOverlong ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11110000) == 2r11100000 ifTrue: [ code := byte bitAnd: 2r00001111. 2 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self errorIllegalContinuationByte ] ]. code < 2048 ifTrue: [ self errorOverlong ]. code = 65279 "Unicode Byte Order Mark" ifTrue: [ stream atEnd ifTrue: [ self errorIncomplete ]. ^ self nextFromStream: stream ]. ^ Character codePoint: code ]. (byte bitAnd: 2r11111000) == 2r11110000 ifTrue: [ code := byte bitAnd: 2r00000111. 3 timesRepeat: [ ((next := stream next ifNil: [ self errorIncomplete ]) bitAnd: 2r11000000) == 2r10000000 ifTrue: [ code := (code bitShift: 6) + (next bitAnd: 2r00111111) ] ifFalse: [ ^ self errorIllegalContinuationByte ] ]. code < 65535 ifTrue: [ self errorOverlong ]. ^ Character codePoint: code ]. self errorIllegalLeadingByte! ! !ZnUTF8Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/5/2013 23:22' prior: 43937061! optimizedReadInto: string startingAt: offset count: requestedCount fromStream: stream "Read requestedCount characters into string starting at offset, returning the number read, there could be less available when stream is atEnd. Optimized based on the assumption that most decoded characters will be ASCII. I signal a ZnByteStringBecameWideString notification if necessary." | stringBuffer byteBuffer bytesRead read last next count readStream bytesLeft char | stringBuffer := string. read := 0. "Start by reading the minimum amount of bytes for decoding requestedCount characters" byteBuffer := ByteArray new: requestedCount. bytesRead := stream readInto: byteBuffer startingAt: 1 count: requestedCount. readStream := byteBuffer readStream. last := 1. next := self findFirstNonASCIIIn: byteBuffer startingAt: last. (next = 0 or: [ bytesRead < next ]) ifTrue: [ "The whole input is ASCII" self replace: stringBuffer from: offset to: offset + bytesRead - 1 with: byteBuffer startingAt: 1. ^ bytesRead ]. [ next > last ifTrue: [ "Copy the ASCII run from last to next" count := next - last. self replace: stringBuffer from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Read one UTF-8 encoded non ASCII character" readStream position: next - 1. count := self encodingLengthFor: readStream peek. bytesLeft := bytesRead - next + 1. count <= bytesLeft ifTrue: [ char := self nextFromStream: readStream ] ifFalse: [ | tmpBuffer extraRead | tmpBuffer := ByteArray new: count. readStream readInto: tmpBuffer startingAt: 1 count: bytesLeft. extraRead := stream readInto: tmpBuffer startingAt: bytesLeft + 1 count: count - bytesLeft. extraRead = (count - bytesLeft) ifFalse: [ self errorIncomplete ]. char := self nextFromStream: tmpBuffer readStream ]. (char isOctetCharacter not and: [ stringBuffer isWideString not ]) ifTrue: [ stringBuffer := ZnByteStringBecameWideString convert: stringBuffer ]. stringBuffer at: offset + read put: char. last := next + count. read := read + 1. "Iterate" next := self findFirstNonASCIIIn: byteBuffer startingAt: last. next = 0 or: [ bytesRead < next ] ] whileFalse. bytesRead < last ifFalse: [ "There is a last ASCII run left" count := bytesRead - last + 1. self replace: stringBuffer from: offset + read to: offset + read + count - 1 with: byteBuffer startingAt: last. read := read + count ]. "Try consuming enough input to reach requestedCount since we probably read too little" count := requestedCount - read. ^ read + (self originalReadInto: stringBuffer startingAt: offset + read count: count fromStream: stream)! ! !ZnByteEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 10:44' prior: 55289519! nextFromStream: stream "In non-strict mode, we let byte values for holes in our mapping pass through" | byteValue | ^ (byteValue := stream next) < 128 ifTrue: [ Character value: byteValue ] ifFalse: [ (byteToUnicode at: byteValue - 127 ifAbsent: [ nil ]) ifNotNil: [ :unicode | unicode ] ifNil: [ strict ifTrue: [ self errorOutsideRange ] ifFalse: [ Character value: byteValue ] ] ]! ! !ZnByteEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/8/2013 10:44' prior: 55290054! nextPut: character toStream: stream "In non-strict mode, we let characters for holes in our mapping table pass through" | code | (code := character codePoint) < 128 ifTrue: [ stream nextPut: code ] ifFalse: [ | byte | byte := unicodeToByte at: code ifAbsent: [ nil ]. (byte isNil and: [ strict or: [ code > 255 ] ]) ifTrue: [ self errorOutsideRange ]. stream nextPut: (byte ifNil: [ code ]) ]! ! ZnUTF8Encoder removeSelector: #errorOutsideRange! ZnUTF8Encoder removeSelector: #error! "Zinc-Character-Encoding-Core"! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/5/2013 22:43'! testReadIntoStartingAtCountFromStreamWithOffset | input encoder bytes readStream string | encoder := ZnUTF8Encoder new. input := '_élève_'. bytes := encoder encodeString: input. readStream := bytes readStream. readStream next. string := String new: 7 withAll: $_. encoder readInto: string startingAt: 2 count: 5 fromStream: readStream. self assert: string equals: input. input := '_Français_'. bytes := encoder encodeString: input. readStream := bytes readStream. readStream next. string := String new: 10 withAll: $_. encoder readInto: string startingAt: 2 count: 8 fromStream: readStream. self assert: string equals: input! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 14:23'! testUTF16EncoderBigEndian | string bytes encoder | string := 'élève en Français'. bytes := ByteArray readHexFrom: '00E9006C00E80076006500200065006E0020004600720061006E00E7006100690073'. encoder := ZnUTF16Encoder new. self assert: encoder isBigEndian. self assert: (encoder encodeString: string) equals: bytes. self assert: (encoder decodeBytes: bytes) equals: string! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 15:57'! testUTF16EncoderByteOrderMark | string bytes encoder encoded | string := 'foo'. bytes := ByteArray readHexFrom: 'FEFF0066006f006f'. encoder := ZnUTF16Encoder new. self assert: encoder isBigEndian. encoded := ByteArray streamContents: [ :out | encoder nextPutByteOrderMarkToStream: out. encoder next: string size putAll: string startingAt: 1 toStream: out ]. self assert: encoded equals: bytes. self assert: (encoder decodeBytes: bytes) equals: string. encoder beLittleEndian. self assert: encoder isLittleEndian. self assert: (encoder decodeBytes: bytes) equals: string. self assert: encoder isBigEndian. 1 to: bytes size by: 2 do: [ :each | bytes swap: each with: each + 1 ]. self assert: (encoder decodeBytes: bytes) equals: string. self assert: encoder isLittleEndian ! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 14:27'! testUTF16EncoderLittleEndian | string bytes encoder | string := 'élève en Français'. bytes := ByteArray readHexFrom: 'E9006C00E80076006500200065006E0020004600720061006E00E700610069007300'. encoder := ZnUTF16Encoder new. encoder beLittleEndian. self assert: encoder isLittleEndian. self assert: (encoder encodeString: string) equals: bytes. self assert: (encoder decodeBytes: bytes) equals: string! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/8/2013 14:50'! testUTF16EncoderWide1 | string bytes encoder | string := (Character codePoint: 16r1d11e) asString. "MUSICAL SYMBOL G CLEF" bytes := ByteArray readHexFrom: 'D834DD1E'. encoder := ZnUTF16Encoder new. self assert: encoder isBigEndian. self assert: (encoder encodeString: string) equals: bytes. self assert: (encoder decodeBytes: bytes) equals: string! ! !ZnCharacterStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/5/2013 22:44'! testPeek | string bytes readStream | string := 'élève en Français'. bytes := ZnUTF8Encoder new encodeString: string. readStream := ZnCharacterReadStream on: bytes readStream. self assert: readStream peek equals: 'é' first. self assert: readStream peek equals: 'é' first. self assert: readStream next equals: 'é' first. readStream skip: 'lève ' size. self assert: readStream peek equals: $e. self assert: (readStream next: 'en Français' size) equals: 'en Français'! ! !ZnCharacterStreamTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/13/2013 14:11'! testUTF8ReadStreamReadInto | string bytes stream buffer | string := 'élève en Français'. bytes := ZnUTF8Encoder new encodeString: string. stream := ZnCharacterReadStream on: bytes readStream. buffer := String new: string size. stream next: string size into: buffer. self assert: buffer equals: string. self assert: stream atEnd. string := 'Czech in Czech is {1}e{2}tina.' format: { 269 asCharacter. 353 asCharacter }. bytes := ZnUTF8Encoder new encodeString: string. stream := ZnCharacterReadStream on: bytes readStream. buffer := String new: string size. stream next: string size into: buffer. self assert: buffer equals: string. self assert: stream atEnd ! ! "Zinc-Character-Encoding-Tests"! !ZnUrlOperation commentStamp: '' prior: 0! I am ZnUrlOperation. I am an abtract superclass of operations that can be performed on ZnUrl objects. Some operations, like retrieving the contents of a resource described by a URL, depend on elements, most likely the scheme, of the URL. By creating the appropriate subclasses, this behavior can be added. I implement searching/matching logic on my class side. #performOperation:with:on: I am instanciated to be executed. #performOperation Part of Zinc HTTP Components.! !ZnUrl class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:31'! schemesNotUsingDoubleSlash "Most URL schemes use a double slash, as in http:// but some don't, return a list of those" ^ #( #mailto )! ! !ZnUrl class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:38'! schemesNotUsingPath "Most URL schemes use a hierarchical path but some don't, return a list of those" ^ #( #mailto )! ! !ZnUrl methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:33'! isSchemeUsingDoubleSlash ^ (self class schemesNotUsingDoubleSlash includes: self scheme) not! ! !ZnUrl methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:38'! isSchemeUsingPath ^ (self class schemesNotUsingPath includes: self scheme) not! ! !ZnUrl methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 14:13'! performOperation: operation "Look for and execute a handler that can perform operation on the receiver" ^ self performOperation: operation with: nil! ! !ZnUrl methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 14:13'! performOperation: operation with: argument "Look for and execute a handler that can perform operation on the receiver with the optional argument" ^ ZnUrlOperation performOperation: operation with: argument on: self ! ! !ZnUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:34' prior: 55755882! printOn: stream self hasScheme ifTrue: [ stream nextPutAll: self scheme; nextPut: $:. self isSchemeUsingDoubleSlash ifTrue: [ stream nextPut: $/; nextPut: $/ ] ]. self printAuthorityOn: stream. self printPathQueryFragmentOn: stream! ! !ZnUrl methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:39' prior: 75630675! printPathQueryFragmentOn: stream self isSchemeUsingPath ifTrue: [ self printPathOn: stream ]. self hasQuery ifTrue: [ self printQueryOn: stream ]. self hasFragment ifFalse: [ ^ self ]. stream nextPut: $#. self encodeQuery: self fragment on: stream! ! !ZnMimeType methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 11/15/2013 21:10'! asMIMEType ^ self! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:07' prior: 43944259! isBinary "Answers whether the contents of a resource described by me should be considered as binary instead of textual." | subTypes | self main = 'text' ifTrue: [ ^ false ]. (self matches: self class applicationJson) ifTrue: [ ^ false ]. self main = 'application' ifFalse: [ ^ true ]. subTypes := self sub subStrings: '+'. ^ subTypes noneSatisfy: [ :each | #('x-javascript' 'xml' 'json') includes: each ]! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:08' prior: 55565996! isNonStandard "Tests if the receiver is a non-standard mime type, i.e. one that is not registered with IANA" ^ (self main beginsWith: 'x-') or: [ (self main beginsWith: 'X-') or: [ (self sub beginsWith: 'x-') or: [ self sub beginsWith: 'X-' ] ] ]! ! !ZnMimeType methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:08' prior: 55566325! isVendorSpecific "Tests if the receiver is a vendor specific mime type" ^ self sub beginsWith: 'vnd.'! ! !ZnUrlOperation commentStamp: '' prior: 77118850! I am ZnUrlOperation. I am an abtract superclass of operations that can be performed on ZnUrl objects. Some operations, like retrieving the contents of a resource described by a URL, depend on elements, most likely the scheme, of the URL. By creating the appropriate subclasses, this behavior can be added. I implement searching/matching logic on my class side. #performOperation:with:on: I am instanciated to be executed. #performOperation Part of Zinc HTTP Components.! !ZnUrlOperation class methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 13:47'! handlerForOperation: operation with: argument on: url "Search for a subclass that can handle operation with argument on url. Signal an Error when no matching handler is found." self subclassesDo: [ :each | (each operation = operation and: [ each schemes includes: url scheme ]) ifTrue: [ ^ each ] ]. self error: ('No URL hander found for operation {1} on URL {2} with {3}' format: { operation. url. argument })! ! !ZnUrlOperation class methodsFor: 'acccessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:45'! handlesOperation: operation with: argument on: url "Return true when my instances can handle operation with argument on url. This can optionally be overridden for a more specific test." ^ self operation = operation and: [ self schemes includes: url scheme ]! ! !ZnUrlOperation class methodsFor: 'acccessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:26'! operation "Return the operation that I implement. Subclasses can/should override this method." ^ nil! ! !ZnUrlOperation class methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 13:47'! performOperation: operation with: argument on: url "Search for a subclass that can handle operation with argument on url. Instanciate the operation, execute it and return the result. Signal an Error when no matching handler is found." | handlerClass | handlerClass := self handlerForOperation: operation with: argument on: url. ^ handlerClass new url: url; argument: argument; performOperation ! ! !ZnUrlOperation class methodsFor: 'acccessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:27'! schemes "Return a collection of scheme identifiers that I handle. Subclasses can/should override this method." ^ #( )! ! !ZnUrlOperation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:19'! argument ^ argument! ! !ZnUrlOperation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:19'! argument: anObject argument := anObject! ! !ZnUrlOperation methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 13:28'! performOperation "Perform the actual operation using url and the optional argument." self subclassResponsibility ! ! !ZnUrlOperation methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 11/6/2013 14:01'! printOn: stream super printOn: stream. stream nextPut: $(; print: self class operation; space; print: self url. self argument ifNotNil: [ :arg | stream space; print: arg ]. stream nextPut: $)! ! !ZnUrlOperation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:19'! url ^ url! ! !ZnUrlOperation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 13:27'! url: aUrl url := aUrl! ! "Zinc-Resource-Meta-Core"! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:09' prior: 43945483! testIsBinary self assert: ZnMimeType applicationOctetStream isBinary. self assert: ZnMimeType imagePng isBinary. self deny: ZnMimeType textPlain isBinary. self deny: ZnMimeType textHtml isBinary. self deny: ZnMimeType textJavascript isBinary. self deny: ZnMimeType applicationJson isBinary. #( 'text/plain;charset=ascii' 'application/json;charset=utf-8' 'application/vnd.com.runkeeper.user+json;charset=ISO-8859-1' ) do: [ :each | self deny: each asZnMimeType isBinary ]! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/30/2013 14:26' prior: 75613921! testMailto | url | url := 'mailto:sven@beta9.be?subject=test' asZnUrl. self assert: url scheme equals: #mailto. self assert: url mailToAddress equals: 'sven@beta9.be'. self assert: (url queryAt: 'subject') equals: 'test'. self assert: url printString equals: 'mailto:sven@beta9.be?subject=test'! ! "Zinc-Resource-Meta-Tests"! !ZnFileRetrieveContents commentStamp: '' prior: 0! I am ZnFileRetrieveContents. I am a ZnUrlOperation. I implement the #retrieveContents URL operation for FILE urls. Part of Zinc HTTP Components. ! !ZnFileRetrieveContents commentStamp: '' prior: 77126941! I am ZnFileRetrieveContents. I am a ZnUrlOperation. I implement the #retrieveContents URL operation for FILE urls. Part of Zinc HTTP Components. ! !ZnFileRetrieveContents class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 14:10'! operation ^ #retrieveContents! ! !ZnFileRetrieveContents class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 14:10'! schemes ^ #( #file )! ! !ZnFileRetrieveContents methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 14:10'! performOperation "Download and return the FILE resource that url refers to. This will typically return a String or a ByteArray (see AbstractFileReference>>#contents). If something goes wrong, an exception will be signalled." ^ self url asFileReference contents! ! !ZnFileUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 10/30/2013 16:03'! testRetrieveContents | fileReference contents url | fileReference := ('file-{1}.txt' format: {(1000 atRandom)}) asFileReference. contents := 'Testing {1} and counting.{2}' format: {(1000 atRandom). (String crlf)}. fileReference ensureDelete. fileReference writeStreamDo: [ :stream | stream nextPutAll: contents ]. url := fileReference asZnUrl. self assert: url isFile. self assert: url retrieveContents equals: contents. fileReference ensureDelete! ! "Zinc-Resource-Meta-FileSystem"! !ZnStaticFileServerDelegate commentStamp: '' prior: 42827579! I am ZnStaticFileServerDelegate. I am a simple proof of concept implementation of a web server serving static files. I handle urls with an optional prefix as requests for files in a directory. I serve index.html or index.htm when a directory is requested and these files exist. I do a redirect when a path that is not does not end with a / refers to directory. I function as a delegate for ZnServer. ZnServer startDefaultOn: 1701. ZnServer default delegate: ((ZnStaticFileServerDelegate new) prefixFromString: 'apple/macosx'; directory: '/Library/WebServer/Documents' asFileReference; yourself). Part of Zinc HTTP Components.! !ZnStaticFileServerDelegate commentStamp: '' prior: 77128586! I am ZnStaticFileServerDelegate. I am a simple proof of concept implementation of a web server serving static files. I handle urls with an optional prefix as requests for files in a directory. I serve index.html or index.htm when a directory is requested and these files exist. I do a redirect when a path that is not does not end with a / refers to directory. I function as a delegate for ZnServer. ZnServer startDefaultOn: 1701. ZnServer default delegate: ((ZnStaticFileServerDelegate new) prefixFromString: 'apple/macosx'; directory: '/Library/WebServer/Documents' asFileReference; yourself). Part of Zinc HTTP Components.! !ZnStaticFileServerDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/15/2013 10:48' prior: 55700473! directory "The directory whose files I am serving" ^ directory ! ! !ZnStaticFileServerDelegate methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 7/15/2013 10:48' prior: 55700647! directory: fileDirectory "Set the directory whose files I should be serving" directory := fileDirectory! ! !ZnStaticFileServerDelegate methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/15/2013 11:39' prior: 55705298! responseForFile: filename fromRequest: aRequest | file entry size time mimeType fileStream entity response modified | file := filename asFileReference. entry := file entry. size := entry size. time := entry modificationTime. modified := true. aRequest headers at: 'If-Modified-Since' ifPresent: [ modified := time > (ZnUtils parseHttpDate: (aRequest headers at: 'If-Modified-Since')) ]. modified ifTrue: [ mimeType := ZnMimeType forFilenameExtension: file extension. fileStream := file readStream. fileStream binary. (entity := ZnStreamingEntity type: mimeType length: size) stream: fileStream. (response := ZnResponse ok: entity) headers at: 'Modification-Date' put: (ZnUtils httpDate: time). (self maxAgeFor: mimeType) ifNotNil: [ :maxAge | response headers at: 'Cache-Control' put: maxAge ]. (self expirationDateFor: mimeType) ifNotNil: [ :expirationDate | response headers at: 'Expires' put: expirationDate ] ] ifFalse: [ response := ZnResponse notModified ]. ^ response! ! "Zinc-FileSystem"! !ZnHttpRetrieveContents commentStamp: '' prior: 0! I am ZnHttpRetrieveContents. I am a ZnUrlOperation. I implement the #retrieveContents URL operation for HTTP(S) urls. Part of Zinc HTTP Components. ! !ZnUrl methodsFor: '*zinc-http' stamp: 'SvenVanCaekenberghe 11/6/2013 14:12' prior: 55741391! retrieveContents "Download and return the resource that I refer to. This will typically return a String or a ByteArray. If something goes wrong, an exception will be signalled." " 'http://zn.stfx.eu/zn/numbers.txt' asZnUrl retrieveContents. " ^ self performOperation: #retrieveContents! ! !ZnDigestAuthenticator methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/10/2013 11:32' prior: 55431239! createNonce | pt | pt := DateAndTime now asString, ':', Random new next asString. ^ self class md5Hash: pt! ! !ZnDigestAuthenticator methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/10/2013 11:32' prior: 55431446! createOpaque | pt | pt := Random new next asString, ':', DateAndTime now asString. ^ self class md5Hash: pt! ! !ZnUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 11/10/2013 11:28' prior: 55779885! parseHttpDate: string "self parseHttpDate: 'Tue, 13 Sep 2011 08:04:49 GMT'." "self parseHttpDate: 'Tue, 13-Sep-2011 08:04:51 GMT'." "self parseHttpDate: 'Tue Jan 01 00:00:01 2036 GMT'." | tokens day month year hour minute second months map yearToken | tokens := (string findTokens: #( $ $- $: $, )) allButFirst. tokens last = 'GMT' ifTrue: [ tokens := tokens allButLast ]. months := #(jan feb mar apr may jun jul aug sep oct nov dec). (Integer readFrom: tokens first ifFail: [ 0 ]) isZero ifTrue: [ map := #(2 1 6 3 4 5) ] ifFalse: [ map := #(1 2 3 4 5 6) ]. day := Integer readFrom: (tokens at: map first) ifFail: [ 0 ]. month := months indexOf: (((tokens at: map second) asLowercase) copyFrom: 1 to: 3) ifAbsent: [ 0 ]. yearToken := tokens at: map third. year := yearToken isAllDigits ifTrue: [ year := yearToken asNumber. yearToken size = 2 ifTrue: [ year < 50 ifTrue: [ year + 2000 ] ifFalse: [ year + 1900 ] ] ifFalse: [ year ] ] ifFalse: [ 0 ]. hour := Integer readFrom: (tokens at: map fourth) ifFail: [ 0 ]. minute := Integer readFrom: (tokens at: map fifth) ifFail: [ 0 ]. second := Integer readFrom: (tokens at: map sixth) ifFail: [ 0 ]. ^ DateAndTime year: year month: month day: day hour: hour minute: minute second: second offset: Duration zero! ! !ZnUtils class methodsFor: 'streaming' stamp: 'SvenVanCaekenberghe 9/28/2013 18:00' prior: 55783019! signalProgress: amount total: total ZnSignalProgress enabled ifTrue: [ total ifNil: [ HTTPProgress new signal: ('Transferred {1} bytes ...' format: { amount asBytesDescription }) ] ifNotNil: [ HTTPProgress new total: total; amount: amount; signal: 'Transferring...' ] ]! ! !ZnMessage methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 8/29/2013 14:37'! setContentType: mimeType "Explicitly set my Content-Type to mimeType. I normally do this automatically by taking the #contentType from my entity." self headers contentType: mimeType! ! !ZnHttpRetrieveContents commentStamp: '' prior: 77131618! I am ZnHttpRetrieveContents. I am a ZnUrlOperation. I implement the #retrieveContents URL operation for HTTP(S) urls. Part of Zinc HTTP Components. ! !ZnHttpRetrieveContents class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 14:05'! operation ^ #retrieveContents! ! !ZnHttpRetrieveContents class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/6/2013 14:06'! schemes ^ #( #http #https )! ! !ZnHttpRetrieveContents methodsFor: 'operations' stamp: 'SvenVanCaekenberghe 11/6/2013 14:08'! performOperation "Download and return the HTTP(S) resource that url refers to. This will typically return a String or a ByteArray (see ZnClient>>#get:). If something goes wrong, an exception will be signalled." ^ ZnClient new beOneShot; enforceHttpSuccess: true; get: self url! ! !ZnMultiThreadedServer methodsFor: 'request handling' stamp: 'SvenVanCaekenberghe 11/7/2013 10:52' prior: 39634117! augmentResponse: response forRequest: request "Our handler has produced response for request, manipulate the response before writing it" super augmentResponse: response forRequest: request. response setKeepAliveFor: request. response setConnectionCloseFor: request! ! !ZnLogEvent methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 11/10/2013 11:29' prior: 48961035! initialize self timeStamp: DateAndTime now. self category: #info. self processId: ZnUtils currentProcessID ! ! !ZnCookie methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:31' prior: 55405372! expiresTimeStamp self expires ifNil: [ ^ DateAndTime now + 1 day ]. ^ ZnUtils parseHttpDate: self expires! ! !ZnCookie methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:31' prior: 55409860! isExpired ^ (self expiresTimeStamp asUTC < DateAndTime now asUTC) or: [ self expires = 0 ]! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 8/29/2013 14:22' prior: 39645903! acceptEntityDescription: entity "Take over the content type and length from entity" entity ifNotNil: [ self contentType: entity contentType; contentLength: entity contentLength ] ifNil: [ self clearContentType; clearContentLength ] ! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 8/29/2013 14:21'! contentLength: object self at: 'Content-Length' put: object asString! ! !ZnHeaders methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 8/29/2013 14:21'! contentType: object self at: 'Content-Type' put: object asString! ! !ZnStringEntity methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 11/13/2013 13:53' prior: 43962510! readFrom: stream | buffer totalRead read readStream stringStream total | total := self contentLength. readStream := total ifNotNil: [ ZnLimitedReadStream on: stream limit: total ] ifNil: [ stream ]. buffer := String new: (ZnUtils streamingBufferSize min: (total ifNil: [ ZnUtils streamingBufferSize ])). stringStream := nil. totalRead := 0. self initializeEncoder. [ readStream atEnd ] whileFalse: [ [ read := encoder readInto: buffer startingAt: 1 count: buffer size fromStream: readStream ] on: ZnByteStringBecameWideString do: [ :notification | buffer := notification wideString. stringStream ifNotNil: [ | wideString position | position := stringStream position. wideString := WideString from: stringStream originalContents. stringStream on: wideString; setFrom: position + 1 to: position ]. notification resume ]. totalRead := totalRead + read. totalRead > ZnConstants maximumEntitySize ifTrue: [ ZnEntityTooLarge signal ]. stringStream ifNil: [ readStream atEnd ifTrue: [ ^ self string: (buffer copyFrom: 1 to: read) ] ifFalse: [ stringStream := (total ifNil: [ buffer species new ] ifNotNil: [ buffer species new: total ]) writeStream ] ]. stringStream next: read putAll: buffer startingAt: 1. ZnUtils signalProgress: totalRead total: total ]. self string: (stringStream ifNil: [ String new ] ifNotNil: [ stringStream contents ])! ! !ZnResponse methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/7/2013 10:51'! setConnectionCloseFor: request request wantsConnectionClose ifTrue: [ self setConnectionClose ]! ! "Zinc-HTTP"! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/13/2013 14:10' prior: 43974363! testGetLargeWideStringHTML | client text | text := '{1}

Czech in Czech is {2}e{3}tina.

{1}' format: { String new: ZnUtils streamingBufferSize withAll: $X. 269 asCharacter. 353 asCharacter }. self assert: text isWideString. self withServerDo: [ :server | server onRequestRespond: [ :request | ZnResponse ok: (ZnEntity html: text) ]. (client := ZnClient new) get: server localUrl. self assert: client isSuccess. self assert: client response contents equals: text. client close ]! ! !ZnLogSupportTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/10/2013 11:29' prior: 55539340! testLogEvent | logEvent now | now := DateAndTime now. logEvent := ZnLogEvent info: 'Testing'. self assert: logEvent timeStamp >= now. self assert: logEvent processId isInteger. self assert: logEvent category = #info. self assert: logEvent message = 'Testing' ! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/7/2013 20:18'! assertEntityTooLarge: serverUrl | response client | client := ZnClient new url: serverUrl; addPathSegment: #echo; entity: (ZnEntity with: (ByteArray new: self entitySizeLimit + 1)); yourself. response := client post; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnEntityTooLarge')! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/7/2013 20:18'! assertHeaderLineTooLong: serverUrl | response client | client := ZnClient new url: serverUrl; addPathSegment: #echo; headerAt: 'X-Test' put: (String new: ZnConstants maximumLineLength withAll: $X); yourself. response := client get; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnLineTooLong')! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/7/2013 20:18'! assertRequestLineTooLong: serverUrl | url response | url := serverUrl addPathSegment: #echo; addPathSegment: (String new: ZnConstants maximumLineLength withAll: $X); yourself. response := ZnEasy get: url. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnLineTooLong')! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/7/2013 20:19'! assertTooManyHeaders: serverUrl | response client | client := ZnClient new url: serverUrl; addPathSegment: #echo; yourself. client request headers unlimited. 1 to: 256 do: [ :each | client headerAt: 'X-Test-' , each printString put: each printString ]. response := client get; response. client close. self deny: response isSuccess. self assert: response code equals: 400. self assert: response contentType equals: ZnMimeType textPlain. self assert: (response entity contents includesSubstring: 'ZnTooManyDictionaryEntries')! ! !ZnServerTests methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 11/7/2013 20:06'! entitySizeLimit ^ 1024! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/9/2013 12:22' prior: 39597686! testEntityTooLarge self usingClassicSocketStreamsOnWindowsDo: [ self withServerDo: [ :server | server maximumEntitySize: self entitySizeLimit. self deny: server debugMode. self assertEntityTooLarge: server localUrl ] ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/6/2013 23:57'! testGetConnectionClose self withServerDo: [ :server | | client | client := ZnClient new. client url: server localUrl; addPathSegment: #echo. client request setConnectionClose. client get. self assert: client isSuccess. self assert: (client contents includesSubstring: 'echo'). self assert: client response isConnectionClose. client close ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/9/2013 12:23' prior: 39599512! testHeaderLineTooLong self usingClassicSocketStreamsOnWindowsDo: [ self withServerDo: [ :server | self deny: server debugMode. self assertHeaderLineTooLong: server localUrl ] ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/9/2013 12:23' prior: 39600907! testRequestLineTooLong self usingClassicSocketStreamsOnWindowsDo: [ self withServerDo: [ :server | self deny: server debugMode. self assertRequestLineTooLong: server localUrl ] ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/9/2013 12:23' prior: 39601493! testTooManyHeaders self usingClassicSocketStreamsOnWindowsDo: [ self withServerDo: [ :server | self deny: server debugMode. self assertTooManyHeaders: server localUrl ] ]! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/9/2013 12:22'! usingClassicSocketStreamsOnWindowsDo: block | originalSocketStreamClass | originalSocketStreamClass := ZnNetworkingUtils default socketStreamClass. OSPlatform current isWindows ifTrue: [ ZnNetworkingUtils default socketStreamClass: SocketStream ]. block ensure: [ ZnNetworkingUtils default socketStreamClass: originalSocketStreamClass ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/15/2013 14:12'! largeHtml ^ String streamContents: [ :out | out << ''. out << 'Les élèves Français'. (1 to: 4000) do: [ :each | out print: each ] separatedBy: [ out space ]. out << '' ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'running' stamp: 'SvenVanCaekenberghe 7/15/2013 14:16' prior: 55707506! setUp self tearDown. ZnFileSystemUtils newFileNamed: 'small.html' do: [ :stream | stream nextPutAll: self smallHtml ]. ZnFileSystemUtils newFileNamed: 'large.html' do: [ :stream | stream nextPutAll: self largeHtml ]. ZnFileSystemUtils newFileNamed: 'wide.html' do: [ :stream | stream nextPutAll: self wideHtml ].! ! !ZnStaticFileServerDelegateTests methodsFor: 'running' stamp: 'SvenVanCaekenberghe 7/15/2013 14:17' prior: 55707738! tearDown ZnFileSystemUtils deleteIfExists: 'small.html'; deleteIfExists: 'large.html'; deleteIfExists: 'wide.html' ! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 7/15/2013 11:03' prior: 55707901! testBasicGet self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'small.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self smallHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'small.html') asUTC asTimeStamp. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 7/15/2013 11:24'! testBasicGetLarge self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'large.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self largeHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'large.html') asUTC asTimeStamp. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 7/15/2013 14:17'! testBasicGetWide self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'wide.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self wideHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'large.html') asUTC asTimeStamp. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 7/15/2013 14:16'! wideHtml ^ '

Czech is in Czech {1}e{2}tina.

' format: { 269 asCharacter. 353 asCharacter}.! ! "Zinc-Tests"! ----End fileIn----! ----QUIT----2013-11-16T16:08:55.258778+01:00 Pharo.image priorSource: 26766002! ----STARTUP----2013-11-16T16:13:40.884191+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-16T16:13:41.050192+01:00 Pharo-30577.image priorSource: 26816670! ----STARTUP----2013-11-17T11:21:50.113125+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/17/2013 11:18' prior: 77084201! commentForCurrentUpdate ^ '12184 RBStringConcatenationRule>>longdescription hint to use #join: https://pharo.fogbugz.com/f/cases/12184 12173 Sync Opal with repo https://pharo.fogbugz.com/f/cases/12173 12148 DateParser with year 3000 bug inside https://pharo.fogbugz.com/f/cases/12148 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/17/2013 11:18'! script233 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-StephaneDucasse.297.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1683.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.446.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.655.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/17/2013 11:11'! update30577 "sync for manual" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/17/2013 11:18'! update30578 "self new update30578" self withUpdateLog: '12184 RBStringConcatenationRule>>longdescription hint to use #join: https://pharo.fogbugz.com/f/cases/12184 12173 Sync Opal with repo https://pharo.fogbugz.com/f/cases/12173 12148 DateParser with year 3000 bug inside https://pharo.fogbugz.com/f/cases/12148 '. self loadTogether: self script233 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer methodsFor: 'variables' stamp: 'md 11/14/2013 17:11' prior: 40066161! declareVariableNode: aVariableNode | name var | name := aVariableNode name. var := scope lookupVarForDeclaration: name. var ifNotNil: [ self variable: aVariableNode shadows: var. (var scope ~= scope) ifTrue: [ "Create new var that shadows outer one" var := scope addTemp: name ] ] ifNil: [ "new var" var := scope addTemp: name ]. aVariableNode binding: var. ^ var! ! !DateParser methodsFor: 'parsing - private' stamp: 'ChristopheDemarey 11/12/2013 14:49' prior: 76461886! convertTwoDigitsYear (year between: 0 and: 99) ifTrue: [ year := self currentMillenium + year ]! ! !DateParser methodsFor: 'parsing - private' stamp: 'ChristopheDemarey 11/12/2013 14:48'! currentMillenium ^ (Date current year / 100) asInteger * 100! ! !RBStringConcatenationRule methodsFor: '*Manifest-Core' stamp: 'BenComan 11/17/2013 15:08' prior: 31427382! longDescription ^ 'Check for string concatenation inside some iteration message. Since string concatenation is O(n^2), it is better to use streaming since it is O(n) - assuming that n is large enough. As a general principal avoid , since the receiver is copied. Therefore chaining , messages will lead to multiple useless copies of the receiver. Instead of writing... | string | string := String new. {1. 1+1. 3} do: [ :each | string := string, each asString]. ^ string the following is much more efficient... String streamContents: [:s | {1. 1+1. 3} do: [:each | s nextPutAll: each asString]] or more concisely... '''' join: {1. 1+1. 3} '! ! "Kernel"! "Manifest-Core"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----2013-11-17T11:21:58.629122+01:00 Pharo.image priorSource: 26816867! ----STARTUP----2013-11-17T11:26:44.658927+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-17T11:26:44.84893+01:00 Pharo-30578.image priorSource: 26830412! ----STARTUP----2013-11-17T17:04:47.226662+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/17/2013 17:02' prior: 77148814! commentForCurrentUpdate ^ '3634 Clean up handling of WideStrings https://pharo.fogbugz.com/f/cases/3634'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/17/2013 17:02'! script234 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.32.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.40.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.337.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1683.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.446.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.655.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/17/2013 17:02'! update30579 "self new update30579" self withUpdateLog: '3634 Clean up handling of WideStrings https://pharo.fogbugz.com/f/cases/3634'. self loadTogether: self script234 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ByteString methodsFor: 'comparing' stamp: 'SeanDeNigris 1/24/2011 23:37' prior: 18598597! findSubstring: key in: body startingAt: start matchTable: matchTable ^ key findIn: body startingAt: start matchTable: matchTable.! ! !WideString methodsFor: 'converting' stamp: 'SeanDeNigris 1/24/2011 23:22'! asWideString ^ self.! ! !WideString methodsFor: 'comparing' stamp: 'SeanDeNigris 1/24/2011 23:30'! findIn: body startingAt: start matchTable: matchTable ^ self findSubstring: self in: body startingAt: start matchTable: matchTable! ! !String methodsFor: 'converting' stamp: 'SeanDeNigris 1/24/2011 23:20' prior: 51089000! asWideString ^ WideString from: self! ! !String methodsFor: 'comparing' stamp: 'SeanDeNigris 1/24/2011 23:35'! findIn: body startingAt: start matchTable: matchTable ^ self findSubstringViaPrimitive: self in: body startingAt: start matchTable: matchTable! ! !String methodsFor: 'comparing' stamp: 'SeanDeNigris 1/24/2011 23:36'! findSubstringViaPrimitive: key in: body startingAt: start matchTable: matchTable "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." | index | self var: #key declareC: 'unsigned char *key'. self var: #body declareC: 'unsigned char *body'. self var: #matchTable declareC: 'unsigned char *matchTable'. key size = 0 ifTrue: [^ 0]. start to: body size - key size + 1 do: [:startIndex | index := 1. [(matchTable at: (body at: startIndex+index-1) asciiValue + 1) = (matchTable at: (key at: index) asciiValue + 1)] whileTrue: [index = key size ifTrue: [^ startIndex]. index := index+1]]. ^ 0 " ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: CaseSensitiveOrder 1 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: CaseSensitiveOrder 7 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseInsensitiveOrder 7 "! ! !WideSymbol methodsFor: 'converting' stamp: 'SeanDeNigris 1/24/2011 23:21'! asWideString ^ self.! ! !WideSymbol methodsFor: 'comparing' stamp: 'SeanDeNigris 1/24/2011 23:30'! findIn: body startingAt: start matchTable: matchTable ^ self findSubstring: self in: body startingAt: start matchTable: matchTable! ! ByteString removeSelector: #findSubstringViaPrimitive:in:startingAt:matchTable:! "Collections-Strings"! ----End fileIn----! ----QUIT----2013-11-17T17:04:53.232662+01:00 Pharo.image priorSource: 26830609! ----STARTUP----2013-11-17T17:09:45.653627+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-17T17:09:45.823637+01:00 Pharo-30579.image priorSource: 26844808! ----STARTUP----2013-11-18T12:56:45.298022+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/18/2013 12:53' prior: 77162555! commentForCurrentUpdate ^ '12164 One Click on Mac is broken due to new source file lookup https://pharo.fogbugz.com/f/cases/12164 12191 MemoryFileSystemFile truncateTo: fails to set size https://pharo.fogbugz.com/f/cases/12191 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 12183 Move OpalCompiler-Core deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12183'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/18/2013 12:53'! script235 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1683.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.215.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.52.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.657.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/18/2013 12:53'! update30580 "self new update30580" self withUpdateLog: '12164 One Click on Mac is broken due to new source file lookup https://pharo.fogbugz.com/f/cases/12164 12191 MemoryFileSystemFile truncateTo: fails to set size https://pharo.fogbugz.com/f/cases/12191 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 12183 Move OpalCompiler-Core deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12183'. self loadTogether: self script235 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/2/2013 17:14' prior: 68739691! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !AbstractCompiler methodsFor: '*Deprecated30' stamp: 'MarcusDenker 7/27/2013 19:25' prior: 68946936! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: (aClass compiledMethodAt: aSelector)! ! !AbstractCompiler methodsFor: '*Deprecated30' stamp: 'MarcusDenker 7/27/2013 19:25' prior: 68947198! decompile: aSelector in: aClass method: aCompiledMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompileMethod: aCompiledMethod! ! !OpalCompiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 74146852! decompile: aSelector in: aClass self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass ! ! !OpalCompiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 74147119! decompile: aSelector in: aClass method: aMethod self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompile: aSelector in: aClass method: aMethod! ! !OpalCompiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 10/11/2013 10:23' prior: 74147417! decompileMethod: aCompiledMethod self deprecated: 'decompiling not supported' on: '09 May 2013' in: 'Pharo 3.0'. ^self new decompileMethod: aCompiledMethod! ! !OpalCompiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/18/2013 16:42' prior: 38889607! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'MarcusDenker 9/5/2013 15:44' prior: 68743348! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 68745585! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'SebastianTleye 7/9/2013 17:52' prior: 68745955! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !MacOSPlatform methodsFor: '*Files' stamp: 'DamienCassou 11/15/2013 18:10' prior: 76668370! potentialLocationsOfSourcesFile ^ { "Take care of .app that have a 'Resources' folder as a sibling of the vm binary" Smalltalk vm fullPath asFileReference parent parent / 'Resources'. Smalltalk vm directory. Smalltalk vm fullPath asFileReference parent. FileLocator systemApplicationSupport. FileLocator userApplicationSupport. }! ! !MemoryFileSystemFile methodsFor: 'accessing' stamp: 'nice 11/17/2013 23:03' prior: 25427551! truncateTo: aSize bytes size = aSize ifFalse: [bytes := bytes size < aSize ifTrue: [(ByteArray new: aSize) replaceFrom: 1 to: bytes size with: bytes startingAt: 1] ifFalse: [bytes copyFrom: 1 to: aSize]]. size := bytes size. self modified.! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 11/17/2013 17:07' prior: 77096311! testObsoleteBehaviors | obsoleteBehaviors | "Ensure the environment is clean" 3 timesRepeat: [ Smalltalk garbageCollect ]. Smalltalk fixObsoleteReferences. obsoleteBehaviors := SystemNavigation new obsoleteBehaviors select: [ :each | each isAnonymous not or: [(each isKindOf: NBExternalArray) not ] ]. "we skip all anonymous behaviors and classes that might be created by NB tests" self assert: obsoleteBehaviors isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Obsolete behaviors remaining: '; print: obsoleteBehaviors ]]! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! compile: code classified: category notifying: requestor trailer: bytes ifFail: aBlock self deprecated: 'please use the compiler API directly' on: '5 September 2013' in: 'Pharo 3'. ^ self compiler source: code; requestor: requestor; category: category; failBlock: aBlock; compiledMethodTrailer: bytes; compile. ! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^ self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! !Trait method! evaluatorClass "Answer an evaluator class appropriate for evaluating expressions in the context of this class." self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self compilerClass! ! "Deprecated30"! "FileSystem-Memory"! "Files"! "OpalCompiler-Core"! "Tests"! ----End fileIn----! ----QUIT----2013-11-18T12:56:53.498019+01:00 Pharo.image priorSource: 26845005! ----STARTUP----2013-11-18T13:01:39.557172+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-18T13:01:39.725172+01:00 Pharo-30580.image priorSource: 26862765! ----STARTUP----2013-11-18T13:44:44.141202+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/18/2013 13:42' prior: 77176952! commentForCurrentUpdate ^ '11565 Spec, displayBlock: [] should be called automatically after each list changes https://pharo.fogbugz.com/f/cases/11565'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/18/2013 13:42'! script236 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1683.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.218.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.130.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/18/2013 13:42'! update30581 "self new update30581" self withUpdateLog: '11565 Spec, displayBlock: [] should be called automatically after each list changes https://pharo.fogbugz.com/f/cases/11565'. self loadTogether: self script236 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DropListModel commentStamp: '' prior: 69438447! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/18/2013 13:04' prior: 69646532! getList ^ self model getList collect: [ :each | self model displayForItem: each ]! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 11/18/2013 13:41' prior: 77192318! testObsoleteBehaviors | obsoleteBehaviors | "Ensure the environment is clean" 3 timesRepeat: [ Smalltalk garbageCollect ]. Smalltalk fixObsoleteReferences. obsoleteBehaviors := SystemNavigation new obsoleteBehaviors select: [ :each | each isAnonymous not or: [(each isKindOf: NBExternalArray class) not ] ]. "we skip all anonymous behaviors and classes that might be created by NB tests" self assert: obsoleteBehaviors isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Obsolete behaviors remaining: '; print: obsoleteBehaviors ]]! ! !DropListModel commentStamp: '' prior: 77206105! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/18/2013 12:57'! displayBlock ^ displayBlock value! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/18/2013 12:57' prior: 69439302! displayBlock: aBlock displayBlock value: aBlock "listHolder replace: [ :e | e display: aBlock; yourself ]."! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/18/2013 13:04'! displayForItem: anItem "The order of the arguments may looks weird, but then it seemsm ore natural while using the widget" ^ self displayBlock cull: anItem label cull: anItem! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/18/2013 13:02' prior: 76620168! getList ^ listHolder value! ! !DropListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/18/2013 13:06' prior: 69439935! initialize super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self internalResetSelection. ]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. displayBlock := [:item | item asString ] asValueHolder. self whenSelectedItemChanged: [:item | item value ]! ! "Spec-Core"! "Spec-MorphicAdapters"! "Tests"! ----End fileIn----! ----QUIT----2013-11-18T13:44:51.591197+01:00 Pharo.image priorSource: 26862962! ----STARTUP----2013-11-18T13:49:57.592351+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-18T13:49:57.762354+01:00 Pharo-30581.image priorSource: 26877098! ----STARTUP----2013-11-18T14:49:45.990805+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/18/2013 14:48' prior: 77194909! commentForCurrentUpdate ^ '12192 Debugger/Inspector is broken because of display block https://pharo.fogbugz.com/f/cases/12192 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/18/2013 14:48'! script237 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1683.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.96.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.218.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/18/2013 14:48'! update30582 "self new update30582" self withUpdateLog: '12192 Debugger/Inspector is broken because of display block https://pharo.fogbugz.com/f/cases/12192 '. self loadTogether: self script237 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeInspectorToolBar methodsFor: 'event-handling' stamp: 'BenjaminVanRyseghem 11/18/2013 14:42' prior: 68598361! updateInspectorChoice self inspectorTypes ifNotNil: [ :variants | self inspectorChoice listItems = variants ifTrue: [ ^ self ]. self inspectorChoice items: variants; displayBlock: [ :label | label ]]! ! "Spec-Inspector"! ----End fileIn----! ----QUIT----2013-11-18T14:49:51.820808+01:00 Pharo.image priorSource: 26877295! ----STARTUP----2013-11-18T14:54:41.952953+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-18T14:54:42.116953+01:00 Pharo-30582.image priorSource: 26889065! ----STARTUP----2013-11-19T10:13:49.123028+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/19/2013 10:11' prior: 77209242! commentForCurrentUpdate ^ '12195 CollectionValueHolder >> #atWrap:put: has variable name clashes https://pharo.fogbugz.com/f/cases/12195 12194 RBTempVarOverridesInstVarRule missed #postCopy https://pharo.fogbugz.com/f/cases/12194 12196 Minor mistakes in class comment of Number class https://pharo.fogbugz.com/f/cases/12196'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/19/2013 10:11'! script238 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-StephaneDucasse.27.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1684.mcz KernelTests-MarcusDenker.585.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.221.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.982.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/19/2013 10:11'! update30583 "self new update30583" self withUpdateLog: '12195 CollectionValueHolder >> #atWrap:put: has variable name clashes https://pharo.fogbugz.com/f/cases/12195 12194 RBTempVarOverridesInstVarRule missed #postCopy https://pharo.fogbugz.com/f/cases/12194 12196 Minor mistakes in class comment of Number class https://pharo.fogbugz.com/f/cases/12196'. self loadTogether: self script238 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Number commentStamp: '' prior: 42509576! Class Number holds the most general methods for dealing with numbers. Subclasses Float, Fraction, and Integer, and their subclasses, provide concrete representations of a numeric quantity. All of Number's subclasses participate in a simple type coercion mechanism that supports mixed-mode arithmetic and comparisons. It works as follows: If self op: arg fails because of incompatible types, then it is retried in the following guise: (arg adaptTypeA: self) op: arg adaptToTypeA. This gives the arg of typeB an opportunity to resolve the incompatibility, knowing exactly what two types are involved. If self is more general, then arg will be converted, and viceVersa. This mechanism is extensible to any new number classes that one might wish to add to Pharo. The only requirement is that every subclass of Number must support a pair of conversion methods specific to each of the other subclasses of Number. Implementation notes ---------------------------------- The implementation of #degreeCos and #degreeSin is such that results are exact for any multiple of 90. Care is also taken to evaluate the sine between -90° and 90°, this will avoid #degreesToRadians and i386 FPU sine function to accumulate round off errors due to approximate representation of pi. We can thus evaluate 240 degreeCos with at most 1 ulp error. It's not perfect, but better than previous implementation. For cosine, we know that: cosd(x)=cosd(abs(x)) cosd(x)=sind(90-x) thus the trick is to evaluate: cosd(x)=sind(90-abs(x)) after appropriate modulo in [-180,180[ This way, we are sure to evaluate the sine between -90° and 90° The #degreesToRadians and #sin are used rather than #degreeSin to avoid cycles. For sine, it would be necessary to evaluate either sind(x) if abs(x) <=90 or sind(180-x) if abs(x) >= 90 A possible implementation would be: | x | x := 90 + self \\ 360 - 90. x >= 180 ifTrue: [x := 180 - x]. ^x degreesToRadians sin We prefer evaluating cosd(90-x) thus providing a branch free implementation.! !CollectionValueHolder methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:08' prior: 76576798! atWrap: index put: anObject | result | result := value atWrap: index put: anObject. self valueChanged: value. ^ result! ! !Number commentStamp: '' prior: 77232756! Class Number holds the most general methods for dealing with numbers. Subclasses Float, Fraction, and Integer, and their subclasses, provide concrete representations of a numeric quantity. All of Number's subclasses participate in a simple type coercion mechanism that supports mixed-mode arithmetic and comparisons. It works as follows: If self op: arg fails because of incompatible types, then it is retried in the following guise: (arg adaptTypeA: self) op: arg adaptToTypeA. This gives the arg of typeB an opportunity to resolve the incompatibility, knowing exactly what two types are involved. If self is more general, then arg will be converted, and viceVersa. This mechanism is extensible to any new number classes that one might wish to add to Pharo. The only requirement is that every subclass of Number must support a pair of conversion methods specific to each of the other subclasses of Number. Implementation notes ---------------------------------- The implementation of #degreeCos and #degreeSin is such that results are exact for any multiple of 90. Care is also taken to evaluate the sine between -90° and 90°, this will avoid #degreesToRadians and i386 FPU sine function to accumulate round off errors due to approximate representation of pi. We can thus evaluate 240 degreeCos with at most 1 ulp error. It's not perfect, but better than previous implementation. For cosine, we know that: cosd(x)=cosd(abs(x)) cosd(x)=sind(90-x) thus the trick is to evaluate: cosd(x)=sind(90-abs(x)) after appropriate modulo in [-180,180[ This way, we are sure to evaluate the sine between -90° and 90° The #degreesToRadians and #sin are used rather than #degreeSin to avoid cycles. For sine, it would be necessary to evaluate either sind(x) if abs(x) <=90 or sind(180-x) if abs(x) >= 90 A possible implementation would be: | x | x := 90 + self \\ 360 - 90. x >= 180 ifTrue: [x := 180 - x]. ^x degreesToRadians sin We prefer evaluating cosd(90-x) thus providing a branch free implementation.! !RBTempVarOverridesInstVarRule methodsFor: 'initialization' stamp: 'CamilloBruni 11/18/2013 17:31' prior: 31447502! initialize super initialize. matcher := RBParseTreeSearcher new. matcher matchesArgument: '`var' do: [ :aNode :answer | answer or: [ varName := aNode name. vars includes: varName ]]! ! !RBTempVarOverridesInstVarRule methodsFor: 'copying' stamp: 'CamilloBruni 11/18/2013 17:33'! postCopy super postCopy. self initialize.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:11' prior: 20814433! fillFrom: aCollection with: aBlock "Evaluate aBlock with each of aCollections's elements as the argument. Collect the resulting values into self. Answer self." aCollection keysAndValuesDo: [ :key :aValue | self at: key put: (aBlock value: aValue) ]! ! "Refactoring-Critics"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-11-19T10:13:57.547029+01:00 Pharo.image priorSource: 26889262! ----STARTUP----2013-11-19T10:18:42.134605+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-19T10:18:42.314602+01:00 Pharo-30583.image priorSource: 26906336! ----STARTUP----2013-11-20T10:53:49.164087+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/20/2013 10:51' prior: 77221209! commentForCurrentUpdate ^ '2919 should remove TimeStamp Step1 https://pharo.fogbugz.com/f/cases/2919 12193 temp variable mapping wrong in the debugger https://pharo.fogbugz.com/f/cases/12193'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/20/2013 10:51'! script239 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1686.mcz KernelTests-MarcusDenker.587.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.138.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.94.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.222.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.593.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Patch-HTTPSocket-MarcusDenker.4.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/20/2013 10:51'! update30584 "self new update30584" self withUpdateLog: '2919 should remove TimeStamp Step1 https://pharo.fogbugz.com/f/cases/2919 12193 temp variable mapping wrong in the debugger https://pharo.fogbugz.com/f/cases/12193'. self loadTogether: self script239 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TimeStamp commentStamp: '' prior: 42758717! I am TimeStamp. I am a DateAndTime. I differ from my superclass in just the following aspects: - I have a different #printOn: (see #printSeparateDateAndTimeOn:) - I have a different #readFrom: (see #readSeparateDateAndTimeFrom:) - when instanciated, I am rounded to the nearest second I only exist to support method timestamps, but my superclass would be just as suited. TimeStamp is on its way of being removed from the system as it does not differ enough from its superclass to earn its right to exist.! !InstructionStream methodsFor: 'testing' stamp: 'MarcusDenker 11/18/2013 16:02'! willCreateBlock "next bytecode is a block creation" ^ (self method at: pc) = 143! ! !ContextPart methodsFor: 'system simulation' stamp: 'MarcusDenker 11/18/2013 16:10' prior: 68987955! stepToSendOrReturn "Simulate the execution of bytecodes until either sending a message or returning a value to the receiver (that is, until switching contexts)." | context | [ self willSend or: [ self willReturn or: [ self willStore or: [self willCreateBlock ] ] ] ] whileFalse: [ context := self step. context == self ifFalse: [ "Caused by mustBeBoolean handling" ^context ]]! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 11/18/2013 16:19'! readSeparateDateAndTimeFrom: stream "Read a separate Date and Time from stream to instanciate the receiver. See also #printSeparateDateAndTimeOn:" | date time | stream skipSeparators. date := Date readFrom: stream. stream skipSeparators. time := Time readFrom: stream. ^ self date: date time: time! ! !DateAndTime methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 11/18/2013 16:18'! printSeparateDateAndTimeOn: stream "Print the receiver as separate Date and Time to stream. See also #readSeparateDateAndTimeFrom:" stream print: self asDate; space; print: self asTime! ! !TimeStamp commentStamp: '' prior: 77249759! I am TimeStamp. I am a DateAndTime. I differ from my superclass in just the following aspects: - I have a different #printOn: (see #printSeparateDateAndTimeOn:) - I have a different #readFrom: (see #readSeparateDateAndTimeFrom:) - when instanciated, I am rounded to the nearest second I only exist to support method timestamps, but my superclass would be just as suited. TimeStamp is on its way of being removed from the system as it does not differ enough from its superclass to earn its right to exist.! !TimeStamp class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 11/19/2013 11:53' prior: 49253506! current "Answer the current date and time now, rounded to the nearest whole second, as a TimeStamp." "This method is not needed as its super class method is sufficient, however for MC slice loading it is needed to prevent transient errors" ^ super now rounded asTimeStamp! ! !TimeStamp class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 11/18/2013 15:46' prior: 53185825! fromMethodTimeStamp: aString | stream | stream := aString readStream. stream skipSeparators; skipTo: Character space. ^self readFrom: stream.! ! !TimeStamp class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 11/18/2013 15:38' prior: 49253736! now "Answer the date and time now, rounded to the nearest whole second, as a TimeStamp." ^ super now rounded asTimeStamp! ! !TimeStamp class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 11/18/2013 15:49' prior: 53186062! readFrom: stream ^ self readSeparateDateAndTimeFrom: stream! ! !TimeStamp methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 11/18/2013 15:49' prior: 48621877! printOn: stream ^ self printSeparateDateAndTimeOn: stream! ! !NewListModel class methodsFor: 'examples' stamp: 'SvenVanCaekenberghe 11/18/2013 16:23' prior: 76886146! exampleWithMenu "self exampleWithMenu" | menu group1 item11 item12 group2 item21 item22 model| menu := MenuModel new. group1 := MenuGroupModel new. item11 := MenuItemModel new name: [ DateAndTime now asString ]; enabled: [ DateAndTime now seconds even ]; yourself. item12 := MenuItemModel new name: 'item2'; shortcut: $b shift command mac | $b alt shift win | $b alt shift unix; action: [ self halt ]; enabled: true; yourself. group1 addMenuItem: item11. group1 addMenuItem: item12. group1 autoRefresh: true. group2 := MenuGroupModel new. item21 := MenuItemModel new name: 'item3'; state: [ DateAndTime now seconds odd ]; description: [ DateAndTime now asString ]; yourself. item22 := MenuItemModel new name: 'item4'; subMenu: (MenuModel new autoRefresh: true; addGroup: [ :g | g addItem: [ :i| i name: [ 'sub' , ((Character value: (DateAndTime now seconds + 60))) asString ]; action: [ self halt ]; shortcut: $d shift command mac | $d alt shift win | $d alt shift unix ]]; yourself); yourself. group2 addMenuItem: item21. group2 addMenuItem: item22. menu addMenuGroup: group1. menu addMenuGroup: group2. menu title: 'Test'. model := NewListModel new. model menu: menu. model openWithSpec! ! !GrowlMorph methodsFor: 'internal' stamp: 'SvenVanCaekenberghe 11/18/2013 16:21' prior: 23100446! resetVanishTimer vanishTime := DateAndTime now + self vanishDelay. self resetAlpha.! ! !GrowlMorph methodsFor: 'stepping' stamp: 'SvenVanCaekenberghe 11/18/2013 16:21' prior: 23103570! step (self containsPoint: ActiveHand position) ifTrue: [ self resetAlpha. ^ self]. vanishTime ifNotNil: [DateAndTime now < vanishTime ifTrue: [^self]]. self alpha: self alpha - 0.05.! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:03' prior: 49304397! testAccessing | d t | d := '1-10-2000' asDate. t := '11:55:00 am' asTime. self assert: timestamp asDate asString = d asString; assert: timestamp asTime asString = t asString. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:10' prior: 49304663! testArithmetic | ts | ts := timestamp - 123 days. "9 September 1999, 11:55 am" ts := ts - 1056 seconds. "9 September 1999, 11:37:24 am" ts := ts + 123 days. "10 January 2000, 11:37:24 am" ts := ts + 1056 seconds . "10 January 2000, 11:55 am" self assert: ts = timestamp. ! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:10' prior: 49305052! testArithmeticAcrossDateBoundary | ts | ts := timestamp - ((11*3600) + (55*60) + 1) seconds. self assert: ts = ('1-9-2000 11:59:59 pm' asTimeStamp). ! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:04' prior: 49305954! testConverting | d t | d := '1-10-2000' asDate. t := '11:55:00 am' asTime. self assert: timestamp asSeconds = (d asSeconds + t asSeconds); assert: timestamp asDate asString = d asString; assert: timestamp asTime = t; assert: timestamp asTimeStamp == timestamp! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:04' prior: 49306451! testDate self assert: aTimeStamp asDate asString = '01-02-2004' asDate asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:16' prior: 49307426! testMinusDays self assert: (aTimeStamp - 5 days) asDate asString = '12-28-2003' asDate asString. self assert: (aTimeStamp - 5 days) asTime asString = '00:34:56' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:13' prior: 49307740! testMinusSeconds | dAndt | dAndt := aTimeStamp - (34 * 60 + 56) seconds. self assert: dAndt asDate asString = '01-02-2004' asDate asString. self assert: dAndt asTime asString = '00:00:00' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:14' prior: 49308062! testMinusSecondsOverMidnight | dAndt | dAndt := aTimeStamp - (34 * 60 + 57) seconds. self assert: dAndt asDate asString = '01-01-2004' asDate asString. self assert: dAndt asTime asString = '23:59:59' asTime asString "Bug The results are actual results are: #(1 January 2005 11:25:03 pm)"! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:14' prior: 49308470! testPlusDays | dAndt | dAndt := aTimeStamp + 366 days. self assert: dAndt asDate asString = '01-02-2005' asDate asString. self assert: dAndt asTime asString = '00:34:56' asTime asString ! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:14' prior: 49308780! testPlusSeconds | dAndt | dAndt := aTimeStamp + (60 * 60) seconds. self assert: dAndt asDate asString = '01-02-2004' asDate asString. self assert: dAndt asTime asString = '01:34:56' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:12' prior: 49309098! testPlusSecondsOverMidnight | dAndt | dAndt := aTimeStamp + (24 * 60 * 60 + 1) seconds. self assert: dAndt asDate asString = '01-03-2004' asDate asString. self assert: dAndt asTime asString = '00:34:57' asTime asString! ! !TimeStampTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 11/18/2013 16:13' prior: 49310604! testTime self assert: aTimeStamp asTime = '00:34:56' asTime! ! !ExternalSemaphoreTable class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/18/2013 16:20' prior: 21403923! freedSlotsIn: externalObjects ratherThanIncreaseSizeTo: newSize "In some VM's, the external object table has a max size, which has to be increased for vm to reference them correctly." "In that case, try to gc to free slots first before actually increasing the max size" "Return whether I ended up freeing slots by GC'ing, or one should increase the size of " ^Smalltalk vm maxExternalSemaphores ifNotNil: [:maxSize | (maxSize < newSize) and: [| needToGrow | Smalltalk garbageCollect. "Do we have free slots now? If not, performing the GC didn't help and we still have to grow." needToGrow := externalObjects includes: nil. needToGrow ifTrue: ["If we did GC, warn we had to gc so actions could be taken if appropriate." self traceCr: DateAndTime now printString; traceCr: 'WARNING: Had to GC to make room for more external objects.'; traceCr: 'If this happens often, it would be a good idea to either:'; traceCr: '- Raise the maxExternalObjects size.'; traceCr: '- Write your code to explicitly release them rather than wait for finalization.'] ifFalse: [Smalltalk vm maxExternalSemaphores: newSize]. needToGrow]] ifNil:[false]! ! TimeStampTest removeSelector: #testDateAndTime! TimeStamp removeSelector: #time! TimeStamp removeSelector: #plusSeconds:! TimeStamp removeSelector: #plusDays:! TimeStamp removeSelector: #minusSeconds:! TimeStamp removeSelector: #minusDays:! TimeStamp removeSelector: #dateAndTime! TimeStamp removeSelector: #date! "Growl"! "Kernel"! "KernelTests"! "Spec-Core"! "System-Support"! ----End fileIn----! ----QUIT----2013-11-20T10:53:58.902082+01:00 Pharo.image priorSource: 26906533! ----STARTUP----2013-11-20T10:59:32.640602+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-20T10:59:32.860603+01:00 Pharo-30584.image priorSource: 26929010! ----STARTUP----2013-11-20T13:15:45.063313+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/20/2013 13:12' prior: 77238480! commentForCurrentUpdate ^ '12203 remove old class builder https://pharo.fogbugz.com/f/cases/12203 12199 Definitively remove HTTPSocket https://pharo.fogbugz.com/f/cases/12199'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/20/2013 13:12'! script240 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-StephaneDucasse.235.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-StephaneDucasse.642.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1687.mcz KernelTests-MarcusDenker.587.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.590.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-StephaneDucasse.283.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.222.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.595.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/20/2013 13:12'! update30585 "self new update30585" self withUpdateLog: '12203 remove old class builder https://pharo.fogbugz.com/f/cases/12203 12199 Definitively remove HTTPSocket https://pharo.fogbugz.com/f/cases/12199'. self loadTogether: self script240 merge: false. ScriptLoader new unloadPackage: 'Zinc-Patch-HTTPSocket'. . self flushCaches. ! ! "ScriptLoader30"! !NBExternalArray class methodsFor: 'private' stamp: 'CamilleTeruel 11/20/2013 11:03' prior: 48269631! anonymousSubclassInitElementType: aTypeName "create and initialize the anonymous subclass of me" | newSubclass | newSubclass := AnonymousClassInstaller make: [ :builder | "we're not using 'self' to avoid wrong subclassing from anonymous subclass" builder superclass: NBExternalArray ]. newSubclass initElementType: aTypeName. ^ newSubclass! ! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'CamilleTeruel 11/19/2013 17:29' prior: 48290235! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " | newSubclass | newSubclass := AnonymousClassInstaller make: [ :builder | "we're not using 'self' to avoid wrong subclassing from anonymous subclass " builder superclass: NBExternalTypeValue ]. newSubclass initValueType: aTypeName. ^ newSubclass! ! TApplyingOnClassSide removeSelector: #removeObsoleteSubclass:! UndefinedObject removeSelector: #removeObsoleteSubclass:! ClassBuilder removeSelector: #validateSuperclass:forSubclass:! ClassBuilder removeSelector: #validateSubclassFormat:from:forSuper:extra:! ClassBuilder removeSelector: #validateSubclass:canKeepLayoutFrom:forSubclassFormat:! ClassBuilder removeSelector: #validateInstvars:from:forSuper:! ClassBuilder removeSelector: #validateClassvars:from:forSuper:! ClassBuilder removeSelector: #validateClassName:! ClassBuilder removeSelector: #validateClass:forMoving:upTo:! ClassBuilder removeSelector: #validateClass:forMoving:downTo:! ClassBuilder removeSelector: #update:to:! ClassBuilder removeSelector: #tooDangerousClasses! ClassBuilder removeSelector: #superclass:weakSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #superclass:variableWordSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #superclass:variableSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #superclass:variableByteSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #superclass:subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #silentlyMoveInstVarNamed:from:to:after:! ClassBuilder removeSelector: #showProgressFor:! ClassBuilder removeSelector: #reshapeClass:toSuper:! ClassBuilder removeSelector: #reservedNames! ClassBuilder removeSelector: #recordClass:replacedBy:! ClassBuilder removeSelector: #recompile:from:to:mutate:! ClassBuilder removeSelector: #privateNewSubclassOf:from:! ClassBuilder removeSelector: #privateNewSubclassOf:! ClassBuilder removeSelector: #newSubclassOf:type:instanceVariables:from:! ClassBuilder removeSelector: #needsSubclassOf:type:instanceVariables:from:! ClassBuilder removeSelector: #name:inEnvironment:subclassOf:type:instanceVariableNames:classVariableNames:poolDictionaries:category:unsafe:! ClassBuilder removeSelector: #name:inEnvironment:subclassOf:type:instanceVariableNames:classVariableNames:poolDictionaries:category:! ClassBuilder removeSelector: #mutate:to:! ClassBuilder removeSelector: #initialize! ClassBuilder removeSelector: #format:variable:words:pointers:weak:! ClassBuilder removeSelector: #doneCompiling:! ClassBuilder removeSelector: #computeFormat:instSize:forSuper:ccIndex:! ClassBuilder removeSelector: #class:instanceVariableNames:unsafe:! ClassBuilder removeSelector: #class:instanceVariableNames:! ClassBuilder removeSelector: #becomeUncompact:! ClassBuilder removeSelector: #becomeCompact:simplyAt:! ClassBuilder removeSelector: #becomeCompact:! ClassBuilder removeSelector: #anonymousSubclassOf:! ClassBuilder class removeSelector: #reallyObsoleteMetaclasses! ClassBuilder class removeSelector: #reallyObsoleteClasses! ClassBuilder class removeSelector: #isSilent! ClassBuilder class removeSelector: #isReallyObsolete:! ClassBuilder class removeSelector: #initialize! ClassBuilder class removeSelector: #countReallyObsoleteClassesAndMetaclasses! ClassBuilder class removeSelector: #cleanupClassHierarchyFor:! ClassBuilder class removeSelector: #cleanupClassHierarchy:! ClassBuilder class removeSelector: #cleanupAndCheckClassHierarchy:! ClassBuilder class removeSelector: #checkClassHierarchyConsistencyFor:! ClassBuilder class removeSelector: #checkClassHierarchyConsistency:! ClassBuilder class removeSelector: #beSilentDuring:! ClassBuilder class removeSelector: #beSilent:! Smalltalk globals removeClassNamed: #ClassBuilder! TBehavior removeSelector: #shouldNotBeRedefined! TBehavior removeSelector: #removeObsoleteSubclass:! TBehavior removeSelector: #allowsSubInstVars! Smalltalk globals removeClassNamed: #HTTPSocket! TClassDescription removeSelector: #setInstVarNames:! TClassDescription removeSelector: #doneCompiling! "Kernel"! "NativeBoost-Core"! "Network-Protocols"! "Traits"! ----End fileIn----! ----QUIT----2013-11-20T13:15:53.847312+01:00 Pharo.image priorSource: 26929207! ----STARTUP----2013-11-20T13:20:38.008257+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-20T13:20:38.176255+01:00 Pharo-30585.image priorSource: 26945936! ----STARTUP----2013-11-20T16:23:45.130316+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/20/2013 16:21' prior: 77261154! commentForCurrentUpdate ^ '12204 Pharo3Theme beCurrent https://pharo.fogbugz.com/f/cases/12204 12200 Rename RPackage does not rename class tags https://pharo.fogbugz.com/f/cases/12200 12182 Collection>>sumNumbers: should provide an alternative to failing sum: https://pharo.fogbugz.com/f/cases/12182'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/20/2013 16:21'! script241 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.34.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.131.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1687.mcz KernelTests-MarcusDenker.587.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.142.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.592.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.222.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.56.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.595.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/20/2013 16:21'! update30586 "self new update30586" self withUpdateLog: '12204 Pharo3Theme beCurrent https://pharo.fogbugz.com/f/cases/12204 12200 Rename RPackage does not rename class tags https://pharo.fogbugz.com/f/cases/12200 12182 Collection>>sumNumbers: should provide an alternative to failing sum: https://pharo.fogbugz.com/f/cases/12182'. self loadTogether: self script241 merge: false. Pharo3Theme beCurrent. self flushCaches. ! ! "ScriptLoader30"! !TIterateTest methodsFor: 'tests - iterating' stamp: 'TudorGirba 11/19/2013 21:24'! testSumNumbers |result| result:= self collectionWithoutNilElements sumNumbers: [ :ele | ele notNil ifTrue: [ 1 ] ifFalse: [ 0 ]]. self assert: self collectionWithoutNilElements size = result! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/19/2013 18:24' prior: 31780752! name: aSymbol | oldName | oldName := name. name := aSymbol asSymbol. self renameTagsPrefixedWith: oldName to: name. oldName ifNotNil: [ SystemAnnouncer uniqueInstance announce: (RPackageRenamed to: self oldName: oldName newName: aSymbol) ]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 10/16/2013 17:08' prior: 74361847! removeClassTagsForClassNamed: aString (self classTags select: [ :eachTag | eachTag hasClassNamed: aString ]) do: [ :eachTag | self removeClassDefinitionName: aString fromClassTag: eachTag name ]! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 11/20/2013 14:51'! renameTagsPrefixedWith: oldName to: newName | prefix | oldName ifNil: [ ^ self ]. prefix := oldName, '-'. (self classTags select: [ :each | each name beginsWith: prefix ]) do: [ :each | each renameTo: (newName, (each name allButFirst: oldName size)) asSymbol ]! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/19/2013 18:41'! nameWithoutPackagePrefix ^ self name = self packageName ifTrue: [ '' ] ifFalse: [ self name allButFirst: self packageName size + 1 "the extra is for the -" ]! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/19/2013 19:39' prior: 74411035! renameTo: aString | oldName | self name = aString ifTrue: [ ^ self ]. oldName := self name. self basicRenameTo: aString. SystemAnnouncer uniqueInstance suspendAllWhile: [ self classes do: [ :each | each category: aString ]. self class environment organization renameCategory: oldName toBe: aString. ].! ! !Collection methodsFor: 'math functions' stamp: 'TudorGirba 11/19/2013 21:37'! sumNumbers: aBlock "This is implemented using a variant of the normal inject:into: pattern that is specific to handling numbers. aBlock is expected to return a number for every element in the collection. Different from the sum: implementation, the default value is zero. While sum: is more general, sumNumbers: is meant to support the most often encountered use case of dealing with numbers." ^ self inject: 0 into: [ :sum :each | sum + (aBlock value: each) ]! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 11/19/2013 19:32'! basicRenamePackage: aPackage | newName | newName := UIManager default request: 'New name of the package' initialAnswer: aPackage name title: 'Rename a package'. newName = aPackage name ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ aPackage name: newName ] ifFalse: [ self alertInvalidPackageName:newName ].! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 11/19/2013 18:41' prior: 74347083! renameClassCategory: packageTag | newName oldName | oldName := packageTag nameWithoutPackagePrefix. newName := UIManager default request: ('New name of category {1}' format: { packageTag name }) initialAnswer: oldName title: 'Rename a category'. newName = oldName ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ packageTag renameWithPackagePrefixTo: newName ] ifFalse: [ self alertInvalidPackageName:newName ]. ! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 11/19/2013 19:32' prior: 74347806! renamePackageCategory: package self basicRenamePackage: package! ! RPackageTag removeSelector: #nameWthoutPackagePrefix! !Trait method! testSumNumbers |result| result:= self collectionWithoutNilElements sumNumbers: [ :ele | ele notNil ifTrue: [ 1 ] ifFalse: [ 0 ]]. self assert: self collectionWithoutNilElements size = result! ! !Trait method! testSumNumbers |result| result:= self collectionWithoutNilElements sumNumbers: [ :ele | ele notNil ifTrue: [ 1 ] ifFalse: [ 0 ]]. self assert: self collectionWithoutNilElements size = result! ! "Collections-Abstract"! "CollectionsTests"! "Nautilus"! "RPackage-Core"! ----End fileIn----! ----QUIT----2013-11-20T16:23:53.352316+01:00 Pharo.image priorSource: 26946133! ----STARTUP----2013-11-20T16:28:44.171273+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-20T16:28:44.341269+01:00 Pharo-30586.image priorSource: 26962178! ----STARTUP----2013-11-21T08:40:49.589386+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/21/2013 08:37' prior: 77278080! commentForCurrentUpdate ^ '12158 Give a way to access parent node in a TreeNodeModel https://pharo.fogbugz.com/f/cases/12158 6987 Strange protocol: #allSelectorsWithout: + autocompletion + traits https://pharo.fogbugz.com/f/cases/6987 12206 Move FileSystem-Core deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12206 12207 Move Traits deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12207'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/21/2013 08:37'! script242 ^ 'AST-Core-StephaneDucasse.200.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.37.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1687.mcz KernelTests-MarcusDenker.587.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.592.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.223.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.58.mcz Spec-PolyWidgets-MarcusDenker.24.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.45.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.597.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/21/2013 08:37'! update30587 "self new update30587" self withUpdateLog: '12158 Give a way to access parent node in a TreeNodeModel https://pharo.fogbugz.com/f/cases/12158 6987 Strange protocol: #allSelectorsWithout: + autocompletion + traits https://pharo.fogbugz.com/f/cases/6987 12206 Move FileSystem-Core deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12206 12207 Move Traits deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12207'. self loadTogether: self script242 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TreeNodeModel commentStamp: '' prior: 76795091! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !TClassDescription methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:38' prior: 49728469! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !TClassDescription methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/29/2013 20:39' prior: 49728870! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !TClassDescription methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/29/2013 17:25' prior: 49730574! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !TClassDescription methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:26' prior: 49730914! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !TClassDescription methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/29/2013 19:25' prior: 49732398! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'ChristopheDemarey 11/20/2013 14:40' prior: 76951233! childrenBlock ^ [ self model buildChildren ]! ! !AbstractFileReference methodsFor: '*Deprecated30' stamp: 'S 6/17/2013 13:24' prior: 40023835! ensureDeleted "Delete the file and does not raise exception if it does not exist contrary to delete" self deprecated: 'Use ensureDelete' on: '21/06/2013' in: #Pharo30. self ensureDelete.! ! !AbstractFileReference methodsFor: '*Deprecated30' stamp: 'S 6/17/2013 13:26' prior: 40024121! ensureDirectory "Verifies that the directory does not exist and only creates if necessary. Do not remove files contained if they exist." self deprecated: 'Use ensureCreateDirectory' on: '21/06/2013' in: #Pharo30. ^ self ensureCreateDirectory! ! !AbstractFileReference methodsFor: '*Deprecated30' stamp: 'S 6/17/2013 13:25' prior: 40024462! ensureFile "Create if necessary a file for the receiver." self deprecated: 'Use ensureCreateFile' on: '21/06/2013' in: #Pharo30. self ensureCreateFile.! ! !Object methodsFor: '*Spec-Core' stamp: 'ChristopheDemarey 11/20/2013 14:38'! isTreeNodeModel ^ false! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/18/2013 10:44' prior: 76954296! childNodeFromItem: anItem ^ (anItem container: self model; buildWithSpec) parentNode: self; yourself! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 11/20/2013 16:39' prior: 40904350! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [ :class | (behaviors includes: class) ifFalse: [ selectors addAll: class selectors ] ]. ^ selectors! ! !TreeNodeModel commentStamp: '' prior: 77306073! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !TreeNodeModel methodsFor: 'procotol' stamp: 'ChristopheDemarey 11/20/2013 14:41'! buildChildren ^ self children value collect: [ :each || node | node := each isTreeNodeModel ifTrue: [ each ] ifFalse: [ (self childNodeClassFor: each) new content: each ]. node parentNode: self; yourself ].! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'ChristopheDemarey 11/20/2013 14:37'! childNodeClass ^ childNodeClass value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'ChristopheDemarey 11/20/2013 14:37'! childNodeClass: aBlock childNodeClass value: aBlock! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'ChristopheDemarey 11/20/2013 14:37'! childNodeClassFor: anItem ^ childNodeClass value! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'ChristopheDemarey 11/20/2013 14:37' prior: 76954641! initialize super initialize. children := [ self container childrenFor: self content ] asValueHolder. content := nil asValueHolder. icon := nil asValueHolder. container := nil asValueHolder. matchTokenFilter := [ :aFilter | false ] asValueHolder. parentNode := nil asValueHolder. childNodeClass := self class asValueHolder.! ! !TreeNodeModel methodsFor: 'converting' stamp: 'ChristopheDemarey 11/20/2013 14:39'! isTreeNodeModel ^ true! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/18/2013 10:19'! parentNode ^ parentNode value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/18/2013 10:19'! parentNode: aNode parentNode value: aNode! ! !MorphTreeNodeMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/18/2013 10:42'! isMorphicModel ^ true! ! !MorphTreeNodeMorph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/18/2013 10:39'! model ^ self complexContents! ! Object removeSelector: #asTreeNodeModel! TreeNodeModel removeSelector: #asTreeNodeModel! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !Trait method! allMethodCategoriesIntegratedThrough: mostGenericClass "Answer a list of all the method categories of the receiver and all its superclasses, up through mostGenericClass" self deprecated: 'Use allProtocolsUpTo:' on: '28 August 2013' in: #'Pharo3.0'. ^ self allProtocolsUpTo: mostGenericClass! ! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !Trait method! allMethodsInCategory: aName "Answer a list of all the methods of the receiver and all its superclasses that are in the category named aName" self deprecated: 'Use allSelectorsInProtocol: ' on: '28 August 2013' in: #'Pharo3.0'. ^ self allSelectorsInProtocol: aName! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !Trait method! methodsInCategory: aName "Answer a list of the methods of the receiver that are in category named aName" self deprecated: 'Use selectorsInProtocol: instead' on: '28 August 2013' in: #'Pharo3.0'. ^ self selectorsInProtocol: aName! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !Trait method! removeCategory: aString "Remove each of the messages categorized under aString in the method dictionary of the receiver. Then remove the category aString." self deprecated: 'Use removeProtocol:' on: '28 August 2013' in: #'Pharo3.0'. self removeProtocol: aString! ! !Trait method! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !Trait method! uncategorizedMethods self deprecated: 'Use uncategorizedSelectors' on: '28 August 2013' in: #'Pharo3.0'. ^ self uncategorizedSelectors ! ! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [ :class | (behaviors includes: class) ifFalse: [ selectors addAll: class selectors ] ]. ^ selectors! ! !Trait method! allSelectorsWithout: behaviors "Returns all the selectors of the receiver and its superclasses, except the ones define in behaviors" | selectors | selectors := IdentitySet new. self withAllSuperclassesDo: [ :class | (behaviors includes: class) ifFalse: [ selectors addAll: class selectors ] ]. ^ selectors! ! "Deprecated30"! "FileSystem-Core"! "Spec-Core"! "Spec-MorphicAdapters"! "Traits"! ----End fileIn----! ----QUIT----2013-11-21T08:41:00.255382+01:00 Pharo.image priorSource: 26962375! ----STARTUP----2013-11-21T08:45:55.92045+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-21T08:45:56.088449+01:00 Pharo-30587.image priorSource: 26983556! ----STARTUP----2013-11-22T08:16:49.658718+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/22/2013 08:11' prior: 77294322! commentForCurrentUpdate ^ '12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 12220 Move AST-Cores deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12220 12208 Fix tree filtering https://pharo.fogbugz.com/f/cases/12208 12219 Move System-Platforms deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12219 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/22/2013 08:12'! script243 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.40.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1689.mcz KernelTests-MarcusDenker.589.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.592.mcz NautilusCommon-MarcusDenker.177.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.121.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/22/2013 08:12'! update30588 "self new update30588" self withUpdateLog: '12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 12220 Move AST-Cores deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12220 12208 Fix tree filtering https://pharo.fogbugz.com/f/cases/12208 12219 Move System-Platforms deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12219 '. self loadTogether: self script243 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphicTreeAdapter commentStamp: '' prior: 69672282! I am the adapter used to bridge a TreeModel and a MorphTreeMorph! !ClassTest methodsFor: 'testing' stamp: 'CamilloBruni 11/21/2013 19:22' prior: 76141801! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #getName #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #getName #baseClass #basicLocalSelectors #classClass isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #nautilusIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !Class methodsFor: 'private' stamp: 'CamilloBruni 11/21/2013 19:20'! getName ^ name! ! !Class methodsFor: 'private' stamp: 'CamilloBruni 9/5/2013 09:46' prior: 68643374! setName: aSymbol name := aSymbol.! ! !MorphicNewListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 9/25/2013 18:49' prior: 69654064! defaultSpec ^ { #NewList. #model:. #model. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #deSelectOnReclick:. #(model deSelectOnReclick). #isMultipleSelection:. #(model isMultipleSelection). #unselectOnChange:. #(model unselectOnChange). #whenSelectedIndexChangedDo:. #(model indexHasBeenSelected). #whenSelectedIndexesChangedDo:. #(model indexesHasBeenSelected). #whenSelectedItemChangedDo:. #(model itemHasBeenSelected). #whenSelectedItemsChangedDo:. #(model itemsHasBeenSelected). #whenHeaderIsClickedDo:. #(model headerClickedBlock). #endOfInitialization. #setIndex:. #(model selectedIndex). #hasHeader:. #(model hasHeader).}! ! !AbstractMorphicAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 10:20'! delete self widgetDo: [ :w | w delete ]! ! !MorphicTreeAdapter commentStamp: '' prior: 77327398! I am the adapter used to bridge a TreeModel and a MorphTreeMorph! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 11:49'! filterWith: aFilter self widgetDo: [ :w || nodes | nodes := w model rootNodes. nodes do: [:r | r nodeModel updateAccordingTo: aFilter]. self removeRootsSuchAs: [:n | (aFilter keepTreeNode: n) not and: [n isEmpty]]. self changed: #rootNodes ].! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 10:32' prior: 76773012! rootNodeFromItem: item | node | node := self model rootNodeFor: item. ^ node buildWithSpec! ! !ComposableModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/21/2013 10:19' prior: 76494461! delete window value ifNil: [ self changed: #delete with: #() ] ifNotNil: [ :w | w delete ]! ! !MorphicTreeNodeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 12:23'! updateAccordingTo: aFilter self widgetDo: [ :w | w contents do: [ :n | n nodeModel updateAccordingTo: aFilter ]. w contents removeAllSuchThat: [ :n | (aFilter keepTreeNode: n nodeModel) not and: [ n nodeModel isEmpty ] ] ]! ! !RBProgramNode methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 17:15' prior: 34534722! accept: aProgramNodeVisitor self deprecated: 'Use acceptVisitor: instead' on: '29/03/2013' in: #Pharo30. self acceptVisitor: aProgramNodeVisitor ! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 13:27'! defaultNodeFor: item ^ TreeNodeModel new content: item; children: [ self childrenFor: item ]; yourself! ! !TreeModel methodsFor: 'protocol-filtering' stamp: 'BenjaminVanRyseghem 11/21/2013 11:50'! filterWith: aFilter self selection: nil. self updateTree. self expandAll. self changed: #filterWith: with: {aFilter}. self expandAll.! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 11:31' prior: 76948927! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [ ] asValueHolder. displayBlock := [ :item | item asString ] asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [ ] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [ :each | each icon ] asValueHolder. rootNodeHolder := [ :item | self defaultNodeFor: item ] asValueHolder. columns := {(TreeColumnModel new displayBlock: [ :node | self wrapItem: node content ])} asValueHolder. isCheckList whenChangedDo: [ :boolean | self widget ifNotNil: [ :w | w isCheckList: boolean ] ]. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 10:31'! rootNodeFor: item | node | node := self rootNodeHolder cull: item. node container: self. ^ node! ! !DateModel class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/29/2013 16:08' prior: 69565787! spec ^ SpecLayout composed newRow: [ :row | row add: #dateLabel width: 60; "This is to address a not yet fixed Spec issue" newRow: [:ugly | ugly add: #dateModel; add: #chooseDateButton width: 50 ]] height: 25 yourself.! ! !TClass methodsFor: 'private' stamp: 'CamilloBruni 11/21/2013 19:18'! getName ^ self name! ! !TClass methodsFor: 'testing' stamp: 'CamilloBruni 11/21/2013 19:18' prior: 40986703! isAnonymous ^self getName isNil! ! !TClass methodsFor: 'private' stamp: 'SebastianTleye 7/4/2013 17:19' prior: 44268664! setName: aSymbol self name: aSymbol.! ! !Win32Platform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:45' prior: 46008791! virtualKey: virtualKeyCode self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os` instead' on: '2013-07-22' in: #Pharo30. "Win32Platform virtualKey: $C charCode" (virtualKeyCode <= 90 "$Z charCode" and: [virtualKeyCode >= 65 "$A "]) ifFalse: [^nil]. "#($a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z)" ^(#($a nil $c $d nil $f $g nil nil nil nil $l $m $n nil $p nil nil $s nil nil $v nil $x nil $z) at: virtualKeyCode-64) ifNotNil: [:char | char charCode]! ! !SelectionValueHolder class methodsFor: 'instance creation' stamp: '' prior: 32928657! index: indexValueHolder selection: selectionValueHolder ^ self new index: indexValueHolder; selection: selectionValueHolder; yourself! ! !ContainerModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76492463! eventKeyStrokesForNextFocus "String describing the keystroke to perform to jump to the next widget" ^ keyStrokesForNextFocusHolder value! ! !ContainerModel methodsFor: 'protocol-focus' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76492719! eventKeyStrokesForPreviousFocus "String describing the keystroke to perform to jump to the previous widget" ^ keyStrokesForPreviousFocusHolder value! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:12' prior: 34513030! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:12' prior: 34513296! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 15:17' prior: 34513549! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:13' prior: 34513836! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:03' prior: 34514088! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:03' prior: 34514350! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:11' prior: 34514638! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 34514898! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 34515162! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 34515418! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:04' prior: 34515685! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 34515976! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 34516297! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:13' prior: 34516550! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 34516811! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:05' prior: 34517058! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 34517321! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 34517570! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:14' prior: 34517841! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 18:06' prior: 34518123! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:15' prior: 34518385! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 3/29/2013 16:20' prior: 34518989! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !TRBProgramNodeVisitor methodsFor: '*Deprecated30' stamp: 'CamilleTeruel 4/3/2013 15:15' prior: 34522631! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:42' prior: 46024066! isMacOS self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isMacOS` instead' on: '2013-07-22' in: #Pharo30. ^ self current isMacOS! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:42' prior: 46024315! isMacOSX self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isMacOSX` instead' on: '2013-07-22' in: #Pharo30. ^ self current isMacOSX! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46024566! isUnix self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isUnix` instead' on: '2013-07-22' in: #Pharo30. ^ self current isUnix! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46024811! isWin32 self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isWin32` instead' on: '2013-07-22' in: #Pharo30. ^ self current isWin32! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46025060! isX11 self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os isX11` instead' on: '2013-07-22' in: #Pharo30. ^ self current isX11! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46025303! osVersion self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os version` instead' on: '2013-07-22' in: #Pharo30. ^ self current version! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46025553! platformName self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os name` instead' on: '2013-07-22' in: #Pharo30. ^ self current name! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46025800! platformSubtype self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os subtype` instead' on: '2013-07-22' in: #Pharo30. ^ self current subtype! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46026511! subtype self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os subtype` instead' on: '2013-07-22' in: #Pharo30. ^ self current subtype! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:43' prior: 46026760! version self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os version` instead' on: '2013-07-22' in: #Pharo30. ^ self current version! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:44' prior: 46027011! virtualKey: virtualKeyCode self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os` instead' on: '2013-07-22' in: #Pharo30. "Subclass responsibility to override if necessary" ^self current virtualKey: virtualKeyCode! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:41' prior: 46027340! vmVersion self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk vm version` instead' on: '2013-07-22' in: #Pharo30. ^Smalltalk vm version! ! !OSPlatform class methodsFor: '*Deprecated30' stamp: 'cami 7/22/2013 18:44' prior: 46027589! windowSystemName self deprecated: 'Do not refer to OSPlatform directly, use `Smalltalk os windowSystemName` instead' on: '2013-07-22' in: #Pharo30. ^ self current windowSystemName! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 11:31' prior: 76800454! initializeWidgets self instantiateModels: #( tree TreeModel inputField TextInputFieldModel label LabelModel button ButtonModel). tree rootNodeHolder: [ :item | (tree defaultNodeFor: item) matchTokenFilterBlock: [ :aFilter | aFilter token ifEmpty: [ true ] ifNotEmpty: [ item asString asLowercase includesSubstring: aFilter token asLowercase ] ]; yourself ]. button label: ''; icon: (Smalltalk ui icons iconNamed: #smallFindIcon); state: false; action: [ inputField accept ]. label text: 'Search:'; color:Color black. inputField ghostText: 'Search'; entryCompletion: nil; acceptOnCR: true. self focusOrder add: tree; add: inputField! ! !SearchableTree methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/21/2013 11:07' prior: 76801270! updateRootFor: aText | aFilter | aFilter := TokenTreeFilter token: aText. tree filterWith: aFilter! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 10:38' prior: 77310034! buildChildren contents := self children value collect: [ :each || node | node := each isTreeNodeModel ifTrue: [ each ] ifFalse: [ (self childNodeClassFor: each) new content: each ]. node parentNode: self; container: self container; yourself ]. ^ contents! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/21/2013 10:36' prior: 76796336! contents ^ contents ifNil: [ self buildChildren. contents ]! ! !TreeNodeModel methodsFor: 'filtering' stamp: 'BenjaminVanRyseghem 11/21/2013 12:21' prior: 76797596! updateAccordingTo: aFilter (aFilter keepTreeNode: self) ifFalse: [ self changed: #updateAccordingTo: with: { aFilter } ]! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 11/21/2013 11:22' prior: 69696530! computeSpecFrom: aSymbol selector: aSelector | instance | instance := (aSymbol isSymbol and: [ aSymbol ~= #model ]) ifTrue: [ | result | result := self convertSymbolOfClassToInstance: aSymbol. aSymbol == #ContainerModel ifTrue: [ result := result buildAdapterWithSpec. model addDependent: result ]. result ] ifFalse: [ self class private_interpretASpec: aSymbol model: model selector: aSelector ]. ^ SpecWrapper instance: instance selector: aSelector! ! MorphicTreeAdapter removeSelector: #rootNodeHolder:! !Trait method! getName ^ self name! ! !Trait method! isAnonymous ^self getName isNil! ! !Trait method! isAnonymous ^self getName isNil! ! !Trait method! setName: aSymbol self name: aSymbol.! ! !Trait method! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !Trait method! acceptArgumentNode: anArgumentNode self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitArgumentNode: anArgumentNode! ! !Trait method! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !Trait method! acceptArrayNode: anArrayNode self deprecated: 'Use visitArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitArrayNode: anArrayNode! ! !Trait method! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !Trait method! acceptAssignmentNode: anAssignmentNode self deprecated: 'Use visitAssignmentNode: instead' on: '29/03/2013' in: #Pharo30. self visitAssignmentNode: anAssignmentNode variable. ! ! !Trait method! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !Trait method! acceptBlockNode: aBlockNode self deprecated: 'Use visitBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitBlockNode: aBlockNode ! ! !Trait method! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !Trait method! acceptCascadeNode: aCascadeNode self deprecated: 'Use visitCascadeNode: instead' on: '29/03/2013' in: #Pharo30. self visitCascadeNode: aCascadeNode ! ! !Trait method! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !Trait method! acceptLiteralArrayNode: aRBLiteralArrayNode self deprecated: 'Use visitLiteralArrayNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralArrayNode: aRBLiteralArrayNode ! ! !Trait method! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !Trait method! acceptLiteralNode: aLiteralNode self deprecated: 'Use visitLiteralNode: instead' on: '29/03/2013' in: #Pharo30. self visitLiteralNode: aLiteralNode! ! !Trait method! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !Trait method! acceptMessageNode: aMessageNode self deprecated: 'Use visitMessageNode: instead' on: '29/03/2013' in: #Pharo30. self visitMessageNode: aMessageNode ! ! !Trait method! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !Trait method! acceptMethodNode: aMethodNode self deprecated: 'Use visitMethodNode: instead' on: '29/03/2013' in: #Pharo30. self visitMethodNode: aMethodNode! ! !Trait method! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !Trait method! acceptParseErrorNode: anErrorNode self deprecated: 'Use visitParseErrorNode: instead' on: '29/03/2013' in: #Pharo30. self visitParseErrorNode: anErrorNode! ! !Trait method! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !Trait method! acceptPatternBlockNode: aRBPatternBlockNode self deprecated: 'Use visitPatternBlockNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternBlockNode: aRBPatternBlockNode ! ! !Trait method! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !Trait method! acceptPatternWrapperBlockNode: aRBPatternWrapperBlockNode self deprecated: 'Use visitPatternWrapperNode: instead' on: '29/03/2013' in: #Pharo30. self visitPatternWrapperBlockNode: aRBPatternWrapperBlockNode ! ! !Trait method! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !Trait method! acceptPragmaNode: aPragmaNode self deprecated: 'Use visitPragmaNode: instead' on: '29/03/2013' in: #Pharo30. self visitPragmaNode: aPragmaNode ! ! !Trait method! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !Trait method! acceptReturnNode: aReturnNode self deprecated: 'Use visitReturnNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitReturnNode: aReturnNode value! ! !Trait method! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !Trait method! acceptSelfNode: aSelfNode self deprecated: 'Use visitSelfNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSelfNode: aSelfNode! ! !Trait method! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !Trait method! acceptSequenceNode: aSequenceNode self deprecated: 'Use visitSequenceNode: instead' on: '29/03/2013' in: #Pharo30. self visitSequenceNode: aSequenceNode! ! !Trait method! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !Trait method! acceptSuperNode: aSuperNode self deprecated: 'Use visitSuperNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitSuperNode: aSuperNode! ! !Trait method! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !Trait method! acceptTemporaryNode: anTemporaryNode self deprecated: 'Use visitTemporaryNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNode: anTemporaryNode! ! !Trait method! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !Trait method! acceptThisContextNode: aThisContextNode self deprecated: 'Use visitThisContextNode: instead' on: '29/03/2013' in: #Pharo30. ^ self visitThisContextNode: aThisContextNode! ! !Trait method! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !Trait method! acceptVariableNode: aVariableNode self deprecated: 'Use visitVariableNode: instead' on: '29/03/2013' in: #Pharo30. self visitVariableNode: aVariableNode! ! !Trait method! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !Trait method! visitArgument: each self deprecated: 'Use visitArgumentNode: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNode: each! ! !Trait method! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !Trait method! visitArguments: aNodeCollection self deprecated: 'Use visitArgumentsNodes: instead' on: '29/03/2013' in: #Pharo30. ^self visitArgumentNodes: aNodeCollection! ! !Trait method! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! !Trait method! visitTemporaries: aNodeCollection self deprecated: 'Use visitTemporaryNodes: instead' on: '29/03/2013' in: #Pharo30. ^ self visitTemporaryNodes: aNodeCollection! ! "AST-Core"! "Deprecated30"! "Kernel"! "KernelTests"! "Spec-Core"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! "System-Platforms"! "Traits"! ----End fileIn----! ----QUIT----2013-11-22T08:17:01.858716+01:00 Pharo.image priorSource: 26983752! ----STARTUP----2013-11-22T08:21:42.65911+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-22T08:21:42.823105+01:00 Pharo-30588.image priorSource: 27025466! ----STARTUP----2013-11-22T09:53:58.693486+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/22/2013 09:48' prior: 77315699! commentForCurrentUpdate ^ '12215 Tweak the DiffMorph to display only the destination https://pharo.fogbugz.com/f/cases/12215 12213 Small code critic pass Nautilus https://pharo.fogbugz.com/f/cases/12213'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/22/2013 09:48'! script244 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.40.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1689.mcz KernelTests-MarcusDenker.589.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.193.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.594.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.125.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/22/2013 09:49'! update30589 "self new update30589" self withUpdateLog: '12215 Tweak the DiffMorph to display only the destination https://pharo.fogbugz.com/f/cases/12215 12213 Small code critic pass Nautilus https://pharo.fogbugz.com/f/cases/12213'. self loadTogether: self script244 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PackageTreeTagSelection commentStamp: '' prior: 74403881! I'm a tag selection.! !DiffMorph commentStamp: '' prior: 67686784! I am a morph useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information.! !CategoryWidget commentStamp: '' prior: 42155793! CategoryWidget is the basic implementation of a wiget managing categories! !NautilusPluginManager commentStamp: '' prior: 42502957! NautilusPluginManager is a manger of plugins used to set up plugin for Nautilus UI! !NautilusWindow commentStamp: '' prior: 42504030! I am a subclass of StandardWindow with my own icon Maybe I'm useless, but right now I'm not on the top of the to do list! !AbstractWidget commentStamp: '' prior: 42098576! AbstractWidget is an abstraction for the different widget which could be used to compose the Nautilus UI! !PackageTasksPlugin commentStamp: '' prior: 42525802! This plugin shows the tasks in the current package. A task is a method which sends #flag: to mark it as #todo, or #fixme, or whatever task you want to fix. Clicking in the specific task makes you jump to the marked method.! !AbstractNautilusUI commentStamp: '' prior: 49713526! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !NautilusUI commentStamp: '' prior: 42503923! A UI for an instance of Nautilus! !Refactor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/24/2011 13:48' prior: 32208785! script self detectMethods; moveDetectedMethods; createAbstractMethods! ! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 11/21/2013 13:40' prior: 74341228! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton; addMorph: self buildToggleButton fullFrame: ((0@0 corner: 0.5@0) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^PanelMorph new changeProportionalLayout; addMorph: self buildList fullFrame: ( LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !PackageTreeTagSelection commentStamp: '' prior: 77368869! I'm a tag selection.! !DiffMorph commentStamp: '' prior: 77368948! I am a morph useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information.! !DiffMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 22:25' prior: 67687027! addMainMorphsWith: topOffset | halfWidth leftFraction leftOffset rightFraction rightOffset | halfWidth := self joinMorph width / 2. leftFraction := showOnlyDestination ifTrue: [ 0 ] ifFalse: [ 0.5 ]. leftOffset := showOnlyDestination ifTrue: [ 0 ] ifFalse: [ halfWidth ]. rightFraction := showOnlySource ifTrue: [ 1 ] ifFalse: [ 0.5 ]. rightOffset := showOnlySource ifTrue: [ 0 ] ifFalse: [ halfWidth negated ]. showOnlyDestination ifFalse: [ self addMorph: self srcMorph fullFrame: (LayoutFrame identity rightFraction: rightFraction; topOffset: topOffset; rightOffset: rightOffset). showOnlySource ifFalse: [ self addMorph: self joinMorph fullFrame: (LayoutFrame identity leftFraction: 0.5; rightFraction: 0.5; leftOffset: halfWidth negated; rightOffset: halfWidth; topOffset: topOffset). ] ]. showOnlySource ifFalse: [ self addMorph: self dstMorph fullFrame: (LayoutFrame identity leftFraction: leftFraction; topOffset: topOffset; leftOffset: leftOffset; rightOffset: (self scrollbarMorph width + self mapMorph width) negated) ]. self addMorph: self scrollbarMorph fullFrame: (LayoutFrame identity leftFraction: 1; leftOffset: self scrollbarMorph width negated - self mapMorph width; rightOffset: self mapMorph width negated; topOffset: topOffset). self addMorph: self mapMorph fullFrame: (LayoutFrame identity leftFraction: 1; leftOffset: self mapMorph width negated; topOffset: topOffset).! ! !DiffMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:04' prior: 67688578! addOptionsPanel showOptions := true. self removeAllMorphs. self addMorphsWithOptions! ! !DiffMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 22:23' prior: 67688917! initialize "Initialize the receiver." | exv exh ppCheckbox | super initialize. showOnlyDestination := false. showOnlySource := false. showOptions := true. self prettyPrint: CodeHolder diffsWithPrettyPrint. ppCheckbox := self newPrettyPrintCheckboxMorph. optionsPanel := self newPanel addMorph: ((self newRow: {ppCheckbox}) listCentering: #bottomRight); color: self defaultColor. optionsPanel vResizing: #shrinkWrap. optionsPanel extent: optionsPanel minExtent. self srcMorph: self newSrcMorph; joinMorph: self newJoinMorph; dstMorph: self newDstMorph; scrollbarMorph: self newScrollbarMorph; mapMorph: self newMapMorph; changeProportionalLayout. self addMorphsWithOptions. exv := ExclusiveWeakMessageSend newSharedState. exh := ExclusiveWeakMessageSend newSharedState. self srcMorph when: #vScroll send: #srcScroll: to: self exclusive: exv; when: #hScroll send: #hScrollValue: to: self dstMorph exclusive: exh. self dstMorph when: #vScroll send: #dstScroll: to: self exclusive: exv; when: #hScroll send: #hScrollValue: to: self srcMorph exclusive: exh. self linkSubmorphsToSplitters; extent: self initialExtent.! ! !DiffMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:01'! on: aModel aModel addDependent: self! ! !DiffMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:04' prior: 67690109! removeOptionsPanel showOptions := false. self removeAllMorphs. self addMorphsWithoutOptions! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:29'! showBoth showOnlyDestination ifTrue: [ showOnlyDestination := false ]. showOnlySource ifTrue: [ showOnlySource := false ]. self updateMorphs! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 17:02'! showOnlyDestination ^ showOnlyDestination! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:34'! showOnlyDestination: aBoolean showOnlyDestination = aBoolean ifTrue: [ ^ self ]. self showOnlySource: false. showOnlyDestination := aBoolean. self updateMorphs! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:18'! showOnlySource ^ showOnlySource! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:35'! showOnlySource: aBoolean showOnlySource = aBoolean ifTrue: [ ^ self ]. self showOnlyDestination: false. showOnlySource := aBoolean. self updateMorphs! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 17:10'! showOptions ^ showOptions! ! !DiffMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 17:10'! showOptions: aBoolean showOptions = aBoolean ifTrue: [ ^ self ]. showOptions := aBoolean. aBoolean ifTrue: [ self addOptionsPanel ] ifFalse: [ self removeOptionsPanel ]! ! !DiffMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/21/2013 17:08'! update: aSymbol with: aValue aSymbol == #showOnlyDestination ifTrue: [ ^ self showOnlyDestination: aValue ]. aSymbol == #showOptions ifTrue: [ ^ self showOptions: aValue ]. ^ super update: aSymbol! ! !DiffMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:06'! updateMorphs self removeAllMorphs. showOptions ifTrue: [ self addMorphsWithOptions ] ifFalse: [ self addMorphsWithoutOptions ]! ! !CategoryWidget commentStamp: '' prior: 77369176! CategoryWidget is the basic implementation of a wiget managing categories! !FinderPlugin class methodsFor: 'position' stamp: 'DamienCassou 4/27/2012 19:19' prior: 22141857! defaultPosition ^ #top! ! !FinderPlugin class methodsFor: 'information' stamp: 'DamienCassou 4/27/2012 19:21' prior: 22141979! description "Use class comment as a description for the plugin" ^ self comment! ! !NautilusPluginManager commentStamp: '' prior: 77369320! NautilusPluginManager is a manger of plugins used to set up plugin for Nautilus UI! !NautilusWindow commentStamp: '' prior: 77369466! I am a subclass of StandardWindow with my own icon Maybe I'm useless, but right now I'm not on the top of the to do list! !AbstractWidget commentStamp: '' prior: 77369651! AbstractWidget is an abstraction for the different widget which could be used to compose the Nautilus UI! !PackageTasksPlugin commentStamp: '' prior: 77369823! This plugin shows the tasks in the current package. A task is a method which sends #flag: to mark it as #todo, or #fixme, or whatever task you want to fix. Clicking in the specific task makes you jump to the marked method.! !AbstractNautilusUI commentStamp: '' prior: 77370114! An AbstractNautilusUI is an abstraction of the UI handling packages and classes. Instance Variables cachedHierarchy: classesSelection: commentButton: commentTextArea: currentDisplayChoice: firstColumn: groupsSelection: hierarchyClass: list: list2: model: packagesSelection: secondColumn: sourceCodeContainer: sourceCodePanel: sourceTextArea: sourceTextAreaLimit: window: ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 11/21/2013 13:40' prior: 68833975! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton fullFrame: ( ( 0@0 corner: 0.5@0 ) asLayoutFrame bottomRightOffset: (-2)@25 ); addMorph: self buildToggleButton fullFrame: (( 0.5@0 corner: 1@0 ) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25 ); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ PanelMorph new changeProportionalLayout; addMorph: self buildList fullFrame: ( LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ( (0@1 corner: 1@1 ) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'MarcusDenker 11/21/2013 13:39' prior: 68835241! buildSecondColumn: aWindow | buttons | buttons := PanelMorph new. buttons changeProportionalLayout; addMorph: self buildInstanceButton fullFrame: ( (0@0 corner: 0.5@0 ) asLayoutFrame bottomRightOffset: -2@25 ); addMorph: self buildCommentButton fullFrame: (( 0.5@0 corner: 1@0 ) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25 ); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^PanelMorph new changeProportionalLayout; addMorph: self buildList2 fullFrame: (LayoutFrame identity bottomOffset: -25); addMorph: buttons fullFrame: ( (0@1 corner: 1@1 ) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'MarcusDenker 11/21/2013 13:36' prior: 17321918! removePackages | names | self selectedPackages ifNotEmpty: [:packages | names := packages collect: [:package | package name ]. names := names joinUsing: String cr. (UIManager default confirm: ('Are you sure you want to delete the package(s) named ', String cr, names, ' and their classes ?')) ifTrue: [| scroll | packages do: [:package | package definedClasses do:[: classToRemove | classToRemove subclasses notEmpty ifTrue: [ | message | message := 'Are you certain that you want to REMOVE the class ', classToRemove name, ' from the system?'. (self confirm: 'class has subclasses: ' , message) ifFalse: [^ false]]. classToRemove removeFromSystem ]. self browsedEnvironment packageOrganizer unregisterPackage: package ]. scroll := list scrollValue y . self selectedPackage: nil. self updatePackageView. list vScrollValue: scroll ]]! ! !AbstractNautilusUI methodsFor: 'buttons behavior' stamp: 'MarcusDenker 11/21/2013 13:36' prior: 17270060! toggleButtonEnabled ^ self selectedClass notNil or: [ self showPackages not ]! ! !NautilusUI commentStamp: '' prior: 77370743! A UI for an instance of Nautilus! !NautilusUI methodsFor: 'source code area' stamp: 'MarcusDenker 11/21/2013 13:38' prior: 47961869! methodAdded: anAnnouncement | method | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. method := anAnnouncement method. ((method methodClass = self selectedClass) or: [ method methodClass users includes: self selectedClass ]) ifTrue: [ self resetMethodsListSelection. self removeAllFromMethodsIconsCache: method. self update. (method methodClass isMeta and: [ method methodClass methods size = 1 ]) ifTrue: [ self changed: #instanceButtonLabel ] ]! ! !MethodWidget methodsFor: 'protocol' stamp: 'MarcusDenker 11/21/2013 13:34' prior: 26516162! removeAllFromMethodsIconsCache: aMethod self methodsIconsCache keysDo: [ :method | " for overrides " method selector = aMethod selector ifTrue: [ MethodsIconsCache removeKey: method ifAbsent: [ ] ] ]! ! !AnnotationPanePlugin class methodsFor: 'information' stamp: 'BenjaminVanRyseghem 2/17/2012 16:39' prior: 17549893! description ^ 'Display the information of the selected class/method'! ! !AnnotationPanePlugin methodsFor: 'private' stamp: 'MarianoMartinezPeck 4/24/2012 23:25' prior: 17549197! buildString | mdl stringBuilder | mdl := self model. stringBuilder := WriteStream on: ''. mdl selectedClass ifNil: [ '' ] ifNotNil: [:class | mdl selectedMethod ifNil: [ stringBuilder nextPutAll: (RGCommentDefinition realClass: class) timeStamp asTimeStamp asString. ] ifNotNil: [:method | stringBuilder nextPutAll: (AnnotationRequest onClass: class selector: method selector) getAnnotations. ]]. ^ stringBuilder contents! ! AbstractWidget removeSelector: #iconClass:! "Nautilus"! "NautilusCommon"! "Polymorph-Tools-Diff"! ----End fileIn----! ----QUIT----2013-11-22T09:54:08.053482+01:00 Pharo.image priorSource: 27025662! ----STARTUP----2013-11-22T10:00:16.16003+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-22T10:00:16.372028+01:00 Pharo-30589.image priorSource: 27052494! ----STARTUP----2013-11-22T14:23:45.426496+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/22/2013 14:20' prior: 77357609! commentForCurrentUpdate ^ '12221 Fix a warning raised by the monkey in DiffMorph https://pharo.fogbugz.com/f/cases/12221 12214 Propagate the notion of last node clicked to the node model https://pharo.fogbugz.com/f/cases/12214 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/22/2013 14:20'! script245 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-StephaneDucasse.545.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.40.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1689.mcz KernelTests-MarcusDenker.589.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.198.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.595.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-StephaneDucasse.972.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/22/2013 14:20'! update30590 "self new update30590" self withUpdateLog: '12221 Fix a warning raised by the monkey in DiffMorph https://pharo.fogbugz.com/f/cases/12221 12214 Propagate the notion of last node clicked to the node model https://pharo.fogbugz.com/f/cases/12214 '. self loadTogether: self script245 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DiffMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/22/2013 10:32' prior: 77376965! update: aSymbol with: aValue aSymbol == #showOnlyDestination ifTrue: [ ^ self showOnlyDestination: aValue ]. aSymbol == #showOptions ifTrue: [ ^ self showOptions: aValue ]. ^ super update: aSymbol with: aValue! ! !MorphTreeListManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/21/2013 22:48' prior: 48942021! initialize super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. lastSelection := 0. removeOnlyLastSelected := false! ! !MorphTreeListManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 18:22' prior: 26908340! lastClickedMorph: aNodeMorph lastClickedMorph ifNotNil: [ lastClickedMorph complexContents lastClicked: false ]. lastClickedMorph := aNodeMorph. aNodeMorph ifNotNil: [ aNodeMorph complexContents lastClicked: true ].! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 11/22/2013 10:38' prior: 43543256! mouseDown: event on: aTargetMorph "Changed to take keybaord focus." ((self autoMultiSelection) and: [event shiftPressed not]) ifTrue: [ firstClickedMorph := aTargetMorph. aTargetMorph selected ifTrue: [ self removeOnlyLastSelected ifTrue: [ self removeFromSelection: aTargetMorph. aTargetMorph = self lastClickedMorph ifFalse: [ self addToSelection: aTargetMorph ] ] ifFalse: [ self removeFromSelection: aTargetMorph ] ] ifFalse: [self addToSelection: aTargetMorph]. self lastClickedMorph: aTargetMorph ]. (event shiftPressed not or: [firstClickedMorph isNil]) ifTrue: [firstClickedMorph := aTargetMorph]. aTargetMorph mouseDown: event ! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 11/21/2013 18:02' prior: 26917776! mouseUp: event on: aNodeMorph | path cmdOrCtrl | "No change if model is locked" self listModel okToChange ifFalse: [^self]. self listModel okToDiscardEdits ifFalse: [^ self]. cmdOrCtrl := self commandOrCrontrolKeyPressed: event. path := (event shiftPressed and: [self isMultiple]) ifTrue: [self shiftSelectMorph: aNodeMorph] ifFalse: [ self autoMultiSelection ifTrue: [self selectedMorphList ifEmpty: [] ifNotEmpty: [:l | l last path collect: [:p | p complexContents]]] ifFalse: [self selectMorph: aNodeMorph multiple: ((cmdOrCtrl and: [self isMultiple]) or: [self autoMultiSelection])]]. self selectionUpdateFromViewWhile: [ | selHolder | selHolder := self newSelectionHolderWithNodePath: path. self listModel selection: selHolder]. self lastClickedMorph: aNodeMorph. self selectionChanged. ! ! !MorphTreeListManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:46'! removeOnlyLastSelected ^ removeOnlyLastSelected! ! !MorphTreeListManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:49'! removeOnlyLastSelected: aBoolean removeOnlyLastSelected := aBoolean! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 11/21/2013 18:02' prior: 26923354! selectMorph: aNodeMorph multiple: withMultipleSelection | path mult | self lastClickedMorph: aNodeMorph. aNodeMorph isNil ifTrue: [ self emptySelection. ^ nil]. aNodeMorph selected ifTrue: [ withMultipleSelection ifTrue: [self removeFromSelection: aNodeMorph] ifFalse: [ mult := self selectedMorphList size > 1. path := aNodeMorph path collect: [:m | m complexContents]. (self autoDeselection or: [mult]) ifTrue: [ self emptySelection. mult ifTrue: [self addToSelection: aNodeMorph] ifFalse: [path := nil]]]] ifFalse: [ withMultipleSelection ifFalse: [self emptySelection]. self addToSelection: aNodeMorph. path := aNodeMorph path collect: [:m | m complexContents]]. self selectionChanged. ^ path! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 11/21/2013 18:02' prior: 71888267! setSelectedMorph: aMorph | path | path := aMorph ifNotNil: [ aMorph path collect: [ :m | m complexContents ] ]. self lastClickedMorph: aMorph. self emptySelection. aMorph ifNotNil: [ self addToSelection: lastClickedMorph ]. self selectionUpdateFromViewWhile: [ self listModel selection: (self newSelectionHolderWithNodePath: path) ]! ! !MorphTreeListManager methodsFor: 'keyboard managing' stamp: 'BenjaminVanRyseghem 11/21/2013 18:03' prior: 68520660! setSelectionIndexFromKeyboard: index multiSelection: multiSelect event: anEvent "Called internally to select the index-th item." | targetMorph | index ifNil: [^ self]. index > self allNodeMorphs size ifTrue: [^self]. targetMorph := index = 0 ifTrue: [nil] ifFalse: [self allNodeMorphs at: index]. lastClickedMorph ifNotNil: [lastClickedMorph highlightForMouseDown: false]. self isCheckList ifTrue: [ (multiSelect and: [anEvent shiftPressed]) ifTrue: [self autoMultiSelect: targetMorph]] ifFalse: [ (multiSelect and: [anEvent shiftPressed]) ifTrue: [self autoMultiSelect: targetMorph] ifFalse: [self setSelectedMorph: targetMorph]]. self lastClickedMorph: (firstClickedMorph := targetMorph). anEvent shiftPressed ifTrue: [lastClickedMorph highlightForMouseDown: true]. self selectionChanged. self scrollToShow: targetMorph ! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 11/21/2013 18:03' prior: 26925558! shiftSelectMorph: aNodeMorph | m | m := aNodeMorph ifNil: [self allNodeMorphs last]. self emptySelection. self searchedElement: nil. self from: firstClickedMorph to: m do: [:nd | self addToSelection: nd]. self lastClickedMorph: m. ^ m path collect: [:p | p complexContents]! ! !MorphTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:58'! lastClicked: aBoolean "Do nothing but introduce a hook"! ! !MorphTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:42'! selected: aBoolean "Do nothing but introduce a hook"! ! !MorphTreeMorph methodsFor: 'selection' stamp: 'BenjaminVanRyseghem 11/21/2013 22:50'! removeOnlyLastSelected: aBoolean self listManager removeOnlyLastSelected: aBoolean! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 17:43' prior: 27032256! selected: aBoolean selected = aBoolean ifTrue: [^ self]. aBoolean ifTrue: [container selectedMorphList add: self] ifFalse: [selected ifNotNil: [container selectedMorphList remove: self]]. selected := aBoolean. self model selected: aBoolean! ! "Morphic-Base"! "Nautilus"! "Polymorph-Tools-Diff"! ----End fileIn----! ----QUIT----2013-11-22T14:23:53.99249+01:00 Pharo.image priorSource: 27052690! ----STARTUP----2013-11-22T14:29:00.625015+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-22T14:29:00.795019+01:00 Pharo-30590.image priorSource: 27070913! ----STARTUP----2013-11-23T20:48:45.097695+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/23/2013 20:43' prior: 77384637! commentForCurrentUpdate ^ '12225 Enhancement in MorphTreeMorph https://pharo.fogbugz.com/f/cases/12225 12226 Minor additions https://pharo.fogbugz.com/f/cases/12226 12224 Move Kernel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12224 12228 Move Compiler deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12228'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/23/2013 20:44'! script246 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.44.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1691.mcz KernelTests-MarcusDenker.589.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.199.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.595.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.984.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/23/2013 20:44'! update30591 "self new update30591" self withUpdateLog: '12225 Enhancement in MorphTreeMorph https://pharo.fogbugz.com/f/cases/12225 12226 Minor additions https://pharo.fogbugz.com/f/cases/12226 12224 Move Kernel deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12224 12228 Move Compiler deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12228'. self loadTogether: self script246 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DropListItem commentStamp: '' prior: 42239087! A DropListItem is an item (wrapper) designed to fit into a DropList! !MorphTreeNodeModel methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 11/22/2013 12:51'! addDependent: aDependent "Ensure to only have one dependent at every moment" dependents := #(). super addDependent: aDependent! ! !MorphTreeNodeModel methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/22/2013 15:42'! hasContentToShow ^ false! ! !MorphTreeNodeModel methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/22/2013 14:59'! isPartialMatch | result | result := false. self contents do: [:each | (each selected or: [ each isPartialMatch ]) ifTrue: [ result := true ] ]. ^ result! ! !MorphTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 12:53'! selected ^ false! ! !Compiler class methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/2/2013 17:14' prior: 36368335! decompilerClass self deprecated: 'use #compilerClass' on: '02 May 2013' in: 'Pharo 3.0'. ^self! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 11/22/2013 14:31' prior: 27034931! drawCheckOn: aCanvas in: aRectangle | center offset dRect childSelected | center := aRectangle center. offset := ((self checkWidth) / 2.0) truncated. dRect := (center x - offset) @ (center y - offset) corner: (center x + offset) @ (center y + offset). childSelected := self isPartialMatch. self selected ifTrue: [ aCanvas frameAndFillRectangle: dRect fillColor: Color gray borderWidth: 1 borderColor: Color black] ifFalse: [ aCanvas frameAndFillRectangle: dRect fillColor: Color white borderWidth: 1 borderColor: Color black. childSelected ifTrue: [ | rect | "Add a dash to show the partial selection" rect := (center x - (offset // 2))@(center y - (offset // 5)) corner: ((center x + (offset // 2))@(center y + (offset // 5))). aCanvas frameAndFillRectangle: rect fillColor: Color gray borderWidth: 0 borderColor: Color black ] ]! ! !MorphTreeNodeMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/22/2013 15:42'! hasContentToShow ^ self complexContents hasContentToShow! ! !MorphTreeNodeMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/22/2013 12:49' prior: 76438210! initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel container := hostList. self cellInset: (container resizerWidth @ 0). complexContents := anObject. anObject addDependent: self. isExpanded := false. nextSibling := firstChild := nil. priorMorph ifNotNil: [priorMorph nextSibling: self]. indentLevel := newLevel. self setBalloonText: anObject helpText. self initRow ! ! !MorphTreeNodeMorph methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/22/2013 14:59'! isPartialMatch ^ self complexContents isPartialMatch! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 11:08' prior: 77402228! selected: aBoolean selected = aBoolean ifTrue: [^ self]. aBoolean ifTrue: [container selectedMorphList add: self] ifFalse: [selected ifNotNil: [container selectedMorphList remove: self]]. selected := aBoolean. self complexContents selected: aBoolean! ! !MorphTreeNodeMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/22/2013 11:19'! update: aSymbol aSymbol = #select ifTrue: [ ^ self selected: true ]. aSymbol = #deselect ifTrue: [ ^ self selected: false ]. super update: aSymbol! ! !MorphTreeMorph methodsFor: 'submorphs-add/remove' stamp: 'BenjaminVanRyseghem 11/22/2013 13:01' prior: 75519733! addMorphsAfter: parentMorph fromCollection: aCollection "Sent when expanding a node in order to add chilldren nodes after the expanded node" | priorMorph morphList subs | priorMorph := nil. morphList := OrderedCollection new. "prepare the list of nodes to be added" aCollection do: [:item | priorMorph := self indentingItemClass new initWithContents: item prior: priorMorph forList: self indentLevel: parentMorph indentLevel + 1. morphList add: priorMorph. item selected ifTrue: [ priorMorph selected: true ] ]. "Set new child morphs index" 1 to: morphList size do: [:i | | m | (m := morphList at: i) index: i + parentMorph index]. "Add the new morph list in the scroller" scroller addAllMorphs: morphList after: parentMorph. "update next morphs index" subs := self allNodeMorphs. morphList last index to: subs size do: [:pos | (subs at: pos) index: pos]. "set the new morphs widths according to columns width" self updateColumnMorphsWidth. morphList do: [ :e | e doLayoutIn: e layoutBounds ]. ^morphList ! ! !MorphTreeMorph methodsFor: 'expanding-collapsing' stamp: 'BenjaminVanRyseghem 11/22/2013 15:33' prior: 26977520! expandRoots "Expand all the receiver's roots" self roots do: [:each | (each canExpand and: [each isExpanded not]) ifTrue: [each toggleExpandedState]]. self innerWidgetChanged! ! !MorphTreeMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/22/2013 12:58' prior: 26993905! noteRemovalOfAll: aCollection "TODO: update the selection as well" scroller removeAllMorphsIn: aCollection. self listManager isCheckList ifFalse: [ self selectedMorphList do: [ :each | (aCollection includes: each) ifTrue: [ self listManager removeFromSelection: each ] ] ]. self adjustSubmorphPositions ! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 11/22/2013 15:41' prior: 77396893! mouseDown: event on: aTargetMorph "Changed to take keybaord focus." ((self autoMultiSelection) and: [event shiftPressed not]) ifTrue: [ firstClickedMorph := aTargetMorph. aTargetMorph selected ifTrue: [ (self removeOnlyLastSelected and: [ aTargetMorph hasContentToShow ]) ifTrue: [ self removeFromSelection: aTargetMorph. aTargetMorph = self lastClickedMorph ifFalse: [ self addToSelection: aTargetMorph ] ] ifFalse: [ self removeFromSelection: aTargetMorph ] ] ifFalse: [self addToSelection: aTargetMorph]. self lastClickedMorph: aTargetMorph ]. (event shiftPressed not or: [firstClickedMorph isNil]) ifTrue: [firstClickedMorph := aTargetMorph]. aTargetMorph mouseDown: event ! ! !Rectangle methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 9/7/2013 12:48' prior: 67255977! outsetBy: deltaMargin "Answer a Rectangle that is outset from the receiver by deltaMargin" self deprecated: 'use expandBy:' on: '9 August 2013' in: 'Pharo30'. ^ self expandBy: deltaMargin. ! ! !CheckboxMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/22/2013 17:47' prior: 39414661! initialize "Initialize the receiver." super initialize. labelClickable := true. self borderWidth: 2; "space for focus" borderColor: Color transparent; enabled: true; changeTableLayout; listDirection: #leftToRight; wrapCentering: #center; cellInset: 4; labelMorph: self newLabelMorph; buttonMorph: self newButtonMorph; on: #click send: #labelClicked to: self; on: #mouseMove send: #updateButton: to: self; on: #mouseUp send: #updateButton: to: self! ! !Decompiler methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/9/2013 11:08' prior: 37181455! decompile: aSelector in: aClass "See Decompiler|decompile:in:method:. The method is found by looking up the message, aSelector, in the method dictionary of the class, aClass." self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^self decompile: aSelector in: aClass method: (aClass compiledMethodAt: aSelector)! ! !Point methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 8/15/2013 18:30' prior: 49650222! rect: aPoint "Answer a Rectangle that encompasses the receiver and aPoint. This is the most general infix way to create a rectangle." self deprecated: 'Use rectangle: instead' on: '15 August 2013' in: #Pharo30. ^ self rectangle: aPoint! ! !DropListItem commentStamp: '' prior: 77414643! A DropListItem is an item (wrapper) designed to fit into a DropList! !DropListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 18:26'! icon ^ icon! ! !DropListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 18:26'! icon: anObject icon := anObject! ! !DropListItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/22/2013 18:26' prior: 48015896! initialize super initialize. actionHolder := [] asValueHolder. displayBlock := [ :e | e printString ]. icon := nil! ! !Object methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 39157969! triggerEvent: anEventSelector ifNotHandled: anExceptionBlock "Evaluate all actions registered for . Return the value of the last registered action." self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^(self actionForEvent: anEventSelector ifAbsent: [^anExceptionBlock value]) value ! ! !Object methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 39158402! triggerEvent: anEventSelector with: anObject ifNotHandled: anExceptionBlock self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^self triggerEvent: anEventSelector withArguments: (Array with: anObject) ifNotHandled: anExceptionBlock! ! !Object methodsFor: '*Deprecated30' stamp: 'StephaneDucasse 5/24/2013 08:23' prior: 39158768! triggerEvent: anEventSelector withArguments: anArgumentList ifNotHandled: anExceptionBlock self deprecated: 'do not used it anymore!!' on: '21 May 2013' in: #Pharo30. ^(self actionForEvent: anEventSelector ifAbsent: [^anExceptionBlock value]) valueWithArguments: anArgumentList! ! "Compiler"! "Deprecated30"! "Kernel"! "Morphic-Base"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2013-11-23T20:48:57.437698+01:00 Pharo.image priorSource: 27071109! ----STARTUP----2013-11-23T20:55:03.994191+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-23T20:55:04.156189+01:00 Pharo-30591.image priorSource: 27092811! ----STARTUP----2013-11-24T10:45:49.137398+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/24/2013 10:42' prior: 77403056! commentForCurrentUpdate ^ '12227 Move System-Support deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12227 12198 should remove TimeStamp Step2 https://pharo.fogbugz.com/f/cases/12198 12202 Exception Handling improvement to ignore some specific Exception https://pharo.fogbugz.com/f/cases/12202'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/24/2013 10:42'! script247 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.45.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1692.mcz KernelTests-MarcusDenker.591.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.199.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.595.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/24/2013 10:43'! update30592 "self new update30592" self withUpdateLog: '12227 Move System-Support deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12227 12198 should remove TimeStamp Step2 https://pharo.fogbugz.com/f/cases/12198 12202 Exception Handling improvement to ignore some specific Exception https://pharo.fogbugz.com/f/cases/12202'. self loadTogether: self script247 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ExceptionSetWithExclusions commentStamp: '' prior: 0! I am ExceptionSetWithExclusions, an ExceptionSet that explicitely does not handle a number of exclusion Exceptions.! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 37036229! disableModuleLoading self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm disableModuleLoading! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 37036475! forgetModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm forgetModule: aString! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:07' prior: 37036726! listBuiltinModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listBuiltinModule: index! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 37036985! listBuiltinModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listBuiltinModules.! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 37037230! listLoadedModule: index self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listLoadedModule: index.! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 37037486! listLoadedModules self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm listLoadedModules! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 37037729! loadModule: aModuleName self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm loadModule: aModuleName.! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/7/2013 12:06' prior: 37037982! unloadModule: aString self deprecated: 'This method was moved to VirtualMachine' on: '3 May 2013' in: 'Pharo3.0'. ^Smalltalk vm unloadModule: aString.! ! !ExceptionSet methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:34' prior: 21337485! , anException "Return an exception set that contains the receiver and the argument exception. This is commonly used to specify a set of exception selectors for an exception handler." self add: anException! ! !ExceptionSet methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:39'! - anotherException "Create an exception set containnig the receiver and anotherException as an exclusion." ^ ExceptionSetWithExclusions new add: self; addExclusion: anotherException; yourself! ! !ExceptionSet methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/22/2013 23:40' prior: 21338043! add: anException "Add anException to the exceptions that I handle" ^ exceptions add: anException! ! !ExceptionSet methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:43' prior: 21337781! handles: anException "Determine whether an exception handler will accept a signaled exception." ^ exceptions anySatisfy: [ :exception | exception handles: anException ]! ! !ExceptionSetWithExclusions commentStamp: '' prior: 77436451! I am ExceptionSetWithExclusions, an ExceptionSet that explicitely does not handle a number of exclusion Exceptions.! !ExceptionSetWithExclusions methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 13:34'! - exception "Add exception as an exclusion to me. I will explicitely not handle my exclusion exceptions." self addExclusion: exception! ! !ExceptionSetWithExclusions methodsFor: 'private' stamp: 'SvenVanCaekenberghe 11/22/2013 13:35'! addExclusion: exception "Add exception as an exclusion to me. I will explicitely not handle my exclusion exceptions." ^ exclusions add: exception! ! !ExceptionSetWithExclusions methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:47'! handles: exception "Return true when I will handled exception. I extend my superclass behavior by explicitely not handling a number of exclusion exceptions." ^ (super handles: exception) and: [ exclusions noneSatisfy: [ :each | each handles: exception ] ]! ! !ExceptionSetWithExclusions methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 11/22/2013 13:10'! initialize super initialize. exclusions := OrderedCollection new! ! !ExceptionTests methodsFor: 'testing-handling' stamp: 'SvenVanCaekenberghe 11/22/2013 16:25'! testHandlingExceptionSetWithExclusion | wasHandled | wasHandled := false. self should: [ [ ZeroDivide signalWithDividend: 1 ] on: Error, ArithmeticError - ZeroDivide do: [ :exception | wasHandled := true. exception return ] ] raise: ZeroDivide. self deny: wasHandled! ! !ExceptionTests methodsFor: 'testing-handling' stamp: 'GabrielOmarCotelli 11/21/2013 14:39'! testHandlingWhenThereIsSomeExclusionButDontApplies | wasHandled result | wasHandled := false. result := [ ZeroDivide signalWithDividend: 1. 2 ] on: Error - MessageNotUnderstood do: [ :exception | wasHandled := true. exception return ]. self assert: wasHandled; assert: result isNil! ! !ExceptionTests methodsFor: 'testing-handling' stamp: 'GabrielOmarCotelli 11/21/2013 14:38'! testHandlingWithExclusion | wasHandled | wasHandled := false. self should: [ [ ZeroDivide signalWithDividend: 1 ] on: Error - ZeroDivide do: [ :exception | wasHandled := true. exception return ] ] raise: ZeroDivide. self deny: wasHandled! ! !ExceptionTests methodsFor: 'testing-handling' stamp: 'GabrielOmarCotelli 11/21/2013 15:01'! testHandlingWithSeveralExclusions | wasHandled | wasHandled := false. self should: [ [ ZeroDivide signalWithDividend: 1 ] on: Error - Warning - ZeroDivide do: [ :exception | wasHandled := true. exception return ] ] raise: ZeroDivide. self deny: wasHandled. self should: [ [ ZeroDivide signalWithDividend: 1 ] on: Error - (Warning , ZeroDivide) do: [ :exception | wasHandled := true. exception return ] ] raise: ZeroDivide. self deny: wasHandled.! ! !ExceptionTests methodsFor: 'testing-handling' stamp: 'GabrielOmarCotelli 11/21/2013 15:32'! testHandlingWithSeveralExclusionsAndExceptionSetsHandling | wasHandled result | wasHandled := false. result := [ ZeroDivide signalWithDividend: 1. 2 ] on: Error - MessageNotUnderstood - Warning do: [ :exception | wasHandled := true. exception return ]. self assert: wasHandled; assert: result isNil. wasHandled := false. result := [ ZeroDivide signalWithDividend: 1. 2 ] on: Error - (MessageNotUnderstood , Warning) do: [ :exception | wasHandled := true. exception return ]. self assert: wasHandled; assert: result isNil. ! ! !Exception class methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:51' prior: 21336594! , anotherException "Create an exception set containing the receiver and anotherException" ^ ExceptionSet new add: self; add: anotherException; yourself! ! !Exception class methodsFor: 'exceptionselector' stamp: 'SvenVanCaekenberghe 11/22/2013 23:51'! - anotherException "Create an exception set containing the receiver and anotherException as exclusion." ^ ExceptionSetWithExclusions new add: self; addExclusion: anotherException; yourself! ! TimeStamp class removeSelector: #current! "Deprecated30"! "Kernel"! "KernelTests"! "System-Support"! ----End fileIn----! ----QUIT----2013-11-24T10:45:58.407395+01:00 Pharo.image priorSource: 27093008! ----STARTUP----2013-11-24T10:51:58.304263+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-24T10:51:58.472264+01:00 Pharo-30592.image priorSource: 27112471! ----STARTUP----2013-11-24T19:31:45.299185+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 11/24/2013 19:28' prior: 77424955! commentForCurrentUpdate ^ '- Issue 12232 More enhancement in MorphTreeMorph https://pharo.fogbugz.com/f/cases/12232/More-enhancement-in-MorphTreeMorph - Issue 12179 Nautilus - Add package filter input box https://pharo.fogbugz.com/f/cases/12179 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 11/24/2013 19:28'! script248 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.45.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1692.mcz KernelTests-MarcusDenker.591.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.263.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.202.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.596.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.95.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 11/24/2013 19:28'! update30593 "self new update30593" self withUpdateLog: '- Issue 12232 More enhancement in MorphTreeMorph https://pharo.fogbugz.com/f/cases/12232/More-enhancement-in-MorphTreeMorph - Issue 12179 Nautilus - Add package filter input box https://pharo.fogbugz.com/f/cases/12179 '. self loadTogether: self script248 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PackageTreeNautilusUI commentStamp: '' prior: 74337188! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !PackageTreeNautilusUI commentStamp: '' prior: 77455968! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'JurajKubelka 11/15/2013 16:54' prior: 77371058! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton; addMorph: self buildToggleButton fullFrame: ((0@0 corner: 0.5@0) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ firstColumn := PanelMorph new changeProportionalLayout; addMorph: self buildPackageSearch fullFrame: ((0@0 corner: 1@0.1) "bottomOffset: -25"); addMorph: self buildList fullFrame: ((0@0.1 corner: 1@1) asLayoutFrame bottomOffset: -25); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 17:44'! buildPackageSearch "It is an search dialog which filters package list" ^ SearchMorph new model: self; updateSelector: #packageSearchUpdate:; yourself! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 16:41'! ensureSafePackagePattern: aPattern ^ [ aPattern asRegexIgnoringCase ] on: RegexSyntaxError do: [ :ex | self fixPackagePattern: aPattern ex: ex ]! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 16:51'! fixPackagePattern: aPattern ex: anException | fixedPattern | fixedPattern := aPattern copyReplaceAll: '*' with: '.*' . ^ [ fixedPattern asRegexIgnoringCase ] on: RegexSyntaxError do: [ :ex | '.*' asRegexIgnoringCase ]! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 17:17'! packageMatchPattern: aRPackage ^ self packagePattern search: aRPackage name! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 17:17'! packagePattern ^ packagePattern ifNil: [ '.*' asRegexIgnoringCase ]! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 16:52'! packageSearchUpdate: aPattern packagePattern := (aPattern isNil or: [ aPattern trimBoth isEmpty ]) ifTrue: [ '.*' asRegexIgnoringCase ] ifFalse: [ self ensureSafePackagePattern: aPattern ]. self updatePackages! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 16:21'! updatePackages list buildContents! ! !MorphTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:33'! isExpanded ^ false! ! !MorphTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:33'! isExpanded: aBoolean! ! !MorphTreeMorph methodsFor: 'submorphs-add/remove' stamp: 'BenjaminVanRyseghem 11/24/2013 13:32' prior: 77418256! addMorphsAfter: parentMorph fromCollection: aCollection "Sent when expanding a node in order to add chilldren nodes after the expanded node" | priorMorph morphList subs | priorMorph := nil. morphList := OrderedCollection new. "prepare the list of nodes to be added" aCollection do: [:item | priorMorph := self indentingItemClass new initWithContents: item prior: priorMorph forList: self indentLevel: parentMorph indentLevel + 1. morphList add: priorMorph ]. "Set new child morphs index" 1 to: morphList size do: [:i | | m | (m := morphList at: i) index: i + parentMorph index]. "Add the new morph list in the scroller" scroller addAllMorphs: morphList after: parentMorph. "update next morphs index" subs := self allNodeMorphs. morphList last index to: subs size do: [:pos | (subs at: pos) index: pos]. "set the new morphs widths according to columns width" self updateColumnMorphsWidth. morphList do: [ :e | e doLayoutIn: e layoutBounds ]. ^morphList ! ! !PackageTreeModel methodsFor: 'package filter' stamp: 'JurajKubelka 11/15/2013 16:16'! packageMatchPattern: aRPackage ^ self model packageMatchPattern: aRPackage! ! !PackageTreeModel methodsFor: 'private' stamp: 'JurajKubelka 11/15/2013 16:15' prior: 74377732! packagesAsNodes ^ ((self model packages select: [ :each | self packageMatchPattern: each ] thenCollect: [ :each | PackageTreePackageNodeModel with: each model: self ]) sorted: [ :a :b | a name < b name ]) ! ! !MorphTreeNodeMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/24/2013 13:52' prior: 77416950! initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel container := hostList. self cellInset: (container resizerWidth @ 0). complexContents := anObject. anObject addDependent: self. isExpanded := anObject isExpanded. nextSibling := firstChild := nil. priorMorph ifNotNil: [priorMorph nextSibling: self]. indentLevel := newLevel. self setBalloonText: anObject helpText. self initRow. anObject selected ifTrue: [ self selectedWithoutNotifyingComplexContents: true ] ! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 13:34' prior: 27029898! isExpanded: aBoolean isExpanded := aBoolean. self complexContents isExpanded: aBoolean! ! !MorphTreeNodeMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 13:52'! selectedWithoutNotifyingComplexContents: aBoolean selected = aBoolean ifTrue: [^ self]. aBoolean ifTrue: [container selectedMorphList add: self] ifFalse: [selected ifNotNil: [container selectedMorphList remove: self]]. selected := aBoolean.! ! !MorphTreeNodeMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 12:42' prior: 27032994! setSelectedSilently: aBoolean selected := aBoolean. self complexContents selected: aBoolean! ! !MorphTreeNodeMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/24/2013 13:39' prior: 27050550! toggleExpandedState | toDelete | self isExpanded: self isExpanded not. toDelete := OrderedCollection new. firstChild ifNotNil: [ firstChild withSiblingsDo: [ :aNode | aNode recursiveAddTo: toDelete]. ]. container noteRemovalOfAll: toDelete. (isExpanded and: [complexContents hasContents]) ifFalse: [ ^self changed ]. self expand. ! ! "Morphic-Base"! "Nautilus"! ----End fileIn----! ----QUIT----2013-11-24T19:31:53.457185+01:00 Pharo.image priorSource: 27112668! ----STARTUP----2013-11-24T19:37:24.390869+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-24T19:37:24.568852+01:00 Pharo-30593.image priorSource: 27131529! ----STARTUP----2013-11-25T10:13:50.438156+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/25/2013 10:11' prior: 77444618! commentForCurrentUpdate ^ '12233 Move a class related method on class side in MCSaveVersionDialog https://pharo.fogbugz.com/f/cases/12233 12239 Move Network-Protocols deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12239'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/25/2013 10:11'! script249 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.47.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1692.mcz KernelTests-MarcusDenker.591.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.202.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.596.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.599.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/25/2013 10:11'! update30594 "self new update30594" self withUpdateLog: '12233 Move a class related method on class side in MCSaveVersionDialog https://pharo.fogbugz.com/f/cases/12233 12239 Move Network-Protocols deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12239'. self loadTogether: self script249 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCSaveVersionDialog class methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/24/2013 14:40'! previousMessages ^ PreviousMessages ifNil: [ PreviousMessages := OrderedCollection new]! ! !MCSaveVersionDialog methodsFor: 'log message history' stamp: 'BenjaminVanRyseghem 11/24/2013 14:39' prior: 24964252! previousMessages ^ self class previousMessages! ! !String methodsFor: '*Deprecated30' stamp: 'SvenVanCaekenberghe 10/27/2013 11:36' prior: 75828227! encodeForHTTP self deprecated: '#encodeForHTTP has been replaced with #urlEncoded' on: '20131027' in: '3.0'. ^ self urlEncoded! ! !String methodsFor: '*Deprecated30' stamp: 'SvenVanCaekenberghe 10/27/2013 11:35' prior: 75828470! encodeForHTTPWithTextEncoding: encodingName self deprecated: '#encodeForHTTPWithTextEncoding: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! !String methodsFor: '*Deprecated30' stamp: 'SvenVanCaekenberghe 10/27/2013 11:35' prior: 75828745! encodeForHTTPWithTextEncoding: encodingName conditionBlock: conditionBlock self deprecated: '#encodeForHTTPWithTextEncoding:conditionBlock: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! "Deprecated30"! "MonticelloGUI"! "Network-Protocols"! ----End fileIn----! ----QUIT----2013-11-25T10:13:57.548158+01:00 Pharo.image priorSource: 27131726! ----STARTUP----2013-11-25T10:19:36.822887+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-25T10:19:37.00088+01:00 Pharo-30594.image priorSource: 27144576! ----STARTUP----2013-11-25T15:02:46.400089+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/25/2013 14:56' prior: 77463673! commentForCurrentUpdate ^ '11302 canUnderstand: must handle shouldNotImplement https://pharo.fogbugz.com/f/cases/11302'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/25/2013 14:56'! script250 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.47.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1693.mcz KernelTests-MarcusDenker.592.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.202.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.596.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.139.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.61.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/25/2013 14:56'! update30595 "self new update30595" self withUpdateLog: '11302 canUnderstand: must handle shouldNotImplement https://pharo.fogbugz.com/f/cases/11302'. self loadTogether: self script250 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BehaviorTest methodsFor: 'tests' stamp: 'SebastianTleye 8/5/2013 13:05'! testCanUnderstand | c1 c2 | c1 := Object subclass: 'MySuperclass' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self class category. c1 compile: 'method1 ^self shouldNotImplement'. c1 compile: 'method2 ^123'. self assert: (c1 canUnderstand: #method1). self assert: (c1 canUnderstand: #method2). self deny: (c1 canUnderstand: #method3). c2 := c1 subclass: 'MySubclass' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self class category. c2 compile: 'method3 ^5'. self assert: (c2 canUnderstand: #method1). self assert: (c2 canUnderstand: #method3). c2 removeFromSystem. c1 removeFromSystem.! ! "KernelTests"! ----End fileIn----! ----QUIT----2013-11-25T15:02:55.47009+01:00 Pharo.image priorSource: 27144773! ----STARTUP----2013-11-25T15:08:50.127575+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-25T15:08:50.297573+01:00 Pharo-30595.image priorSource: 27156880! ----STARTUP----2013-11-25T16:48:45.764469+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/25/2013 16:46' prior: 77476719! commentForCurrentUpdate ^ '11682 Enable Scoped Refactoring Changes Step 1 https://pharo.fogbugz.com/f/cases/11682'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/25/2013 16:46'! script251 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.47.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1693.mcz KernelTests-MarcusDenker.592.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.202.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.596.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.226.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-StephaneDucasse.51.mcz Spec-Inspector-MarcusDenker.132.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.62.mcz Spec-PolyWidgets-MarcusDenker.28.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/25/2013 16:46'! update30596 "self new update30596" self withUpdateLog: '11682 Enable Scoped Refactoring Changes Step 1 https://pharo.fogbugz.com/f/cases/11682'. self loadTogether: self script251 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NameFilteringTreeNode commentStamp: '' prior: 0! This node uses an optimized match method. Instead of converting the wrapped item with #asString it directly calls a #name method for the match source. This avoids potential expensive string and stream operations on a big tree.! !ChangesBrowser commentStamp: '' prior: 42159851! A ChangesBrowser is a browser used to browse a composite change wich gather all the wanted changes! !EnvironmentChooser commentStamp: '' prior: 0! I am widget for selecting environments.! !PackageAndClassChooser commentStamp: '' prior: 0! I am a widget to select classes and packages from a tree.! !NameFilteringTreeNode commentStamp: '' prior: 77500090! This node uses an optimized match method. Instead of converting the wrapped item with #asString it directly calls a #name method for the match source. This avoids potential expensive string and stream operations on a big tree.! !NameFilteringTreeNode methodsFor: 'filtering' stamp: 'CamilloBruni 9/26/2013 14:06'! matchTokenFilter: aFilter aFilter token ifEmpty: [ ^ true ]. ^ self item name includesSubstring: aFilter token caseSensitive: false! ! !RBCreateAccessorsForVariableRefactoring methodsFor: '*NautilusRefactoring' stamp: 'CamilloBruni 11/17/2013 16:00' prior: 30505112! whatToDisplayIn: aBrowser ^ (self changes changes select: [:change | {getterMethod. setterMethod} includes: change selector ]) gather: [:change | change whatToDisplayIn: aBrowser ]! ! !ChangesBrowser commentStamp: '' prior: 77500380! A ChangesBrowser is a browser used to browse a composite change wich gather all the wanted changes! !ChangesBrowser class methodsFor: 'specs' stamp: 'CamilloBruni 11/17/2013 15:33' prior: 18912791! defaultSpec ^ SpecLayout composed newColumn: [:c | c newColumn: [:c2 | c2 newRow: [ :r| r add: #scopeChooser ] height: 25; add: #pickList ]; addSplitter; add: #textArea; newRow: [:r | r add: #acceptButton; add: #cancelButton] height: self toolbarHeight ]! ! !ChangesBrowser methodsFor: 'accessing' stamp: 'CamilloBruni 11/20/2013 17:02'! scopeChooser ^ scopeChooser ifNil: [ scopeChooser := self instantiate: EnvironmentChooser. scopeChooser whenEnvironmentChanged: [ self updateChanges ]; label: 'Scope:'. scopeChooser]! ! !ChangesBrowser methodsFor: 'private' stamp: 'CamilloBruni 11/18/2013 21:00'! updateChanges "Filter the shown changes depending on the selected environment" self flag: 'todo'.! ! !EnvironmentChooser commentStamp: '' prior: 77500539! I am widget for selecting environments.! !EnvironmentChooser class methodsFor: 'specs' stamp: 'CamilloBruni 9/26/2013 00:50'! defaultSpec ^ SpecLayout composed newRow: [ :r| r add: #labelView width: 45; add: #environmentsView ]! ! !EnvironmentChooser methodsFor: 'actions' stamp: 'CamilloBruni 10/1/2013 12:16'! chooseNewEnvironment | packagesAndClasses packages classes packageEnvironment classEnvironment | packagesAndClasses := PackageAndClassChooser new chooseModalTo: self window. (packagesAndClasses isNil or: [ packagesAndClasses isEmpty]) ifTrue: [ ^ nil ]. self flag: 'TODO create proper environments in a less ugly way'. packages := OrderedCollection new. classes := OrderedCollection new. packagesAndClasses do: [ :each | (each isKindOf: RPackage) ifTrue: [ packages add: each ] ifFalse: [ classes add: each ]]. packageEnvironment := RBPackageEnvironment packages: packages. classEnvironment := RBClassEnvironment classes: classes. classes ifEmpty: [ ^ packageEnvironment ]. packages ifEmpty: [ ^ classEnvironment ]. ^ packageEnvironment | classEnvironment! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! enableCustom ^ enableCustom value! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! enableCustom: aBoolean ^ enableCustom value: aBoolean! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! enableGlobal ^ enableGlobal value! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! enableGlobal: aBoolean ^ enableGlobal value: aBoolean! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! environment ^ environmentHolder value! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:33'! environment: anEnvironment self environment = anEnvironment ifFalse: [ environmentHolder value: anEnvironment ]! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:34'! environments ^ environmentsHolder value! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:34'! environments: aCollection environmentsHolder value: aCollection! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 00:51'! environmentsView ^ environmentsView ifNil: [ environmentsView := self instantiate: DropListModel. ]! ! !EnvironmentChooser methodsFor: 'initialization' stamp: 'CamilloBruni 9/26/2013 01:08'! initialize enableCustom := true asValueHolder. enableGlobal := true asValueHolder. environmentsHolder := #() asValueHolder. environmentHolder := nil asValueHolder. super initialize.! ! !EnvironmentChooser methodsFor: 'initialization' stamp: 'CamilloBruni 9/26/2013 01:07'! initializeWidgets environmentsHolder whenChangedDo: [ self update ]. enableCustom whenChangedDo: [ self update ]. enableGlobal whenChangedDo: [ self update ]. self update.! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 00:52'! label ^ self labelView text! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 00:52'! label: aString self labelView text: aString! ! !EnvironmentChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 00:50'! labelView ^ labelView ifNil: [ labelView := self instantiate: LabelModel. labelView text: 'Environment:' ]! ! !EnvironmentChooser methodsFor: 'updating' stamp: 'CamilloBruni 9/26/2013 19:59'! update self environmentsView emptyList. self enableGlobal ifTrue: [ self environmentsView addItemLabeled: 'System-wide' do: [ self environment: RBBrowserEnvironment new ]]. self environments do: [ :environemnt| |capturedValue| capturedValue := environemnt. self environmentsView addItemLabeled: capturedValue label do: [ self environment: capturedValue ]]. self enableCustom ifTrue: [ self environmentsView addItemLabeled: 'Custom...' do: [ self chooseNewEnvironment ifNotNil: [ :newEnvironment | self environment: newEnvironment ]]].! ! !EnvironmentChooser methodsFor: 'events' stamp: 'CamilloBruni 9/26/2013 01:10'! whenEnvironmentChanged: aBlock environmentHolder whenChangedDo: aBlock! ! !PackageAndClassChooser commentStamp: '' prior: 77500643! I am a widget to select classes and packages from a tree.! !PackageAndClassChooser class methodsFor: 'specs' stamp: 'CamilloBruni 10/1/2013 12:21'! defaultSpec ^ SpecLayout composed newColumn: [ :c | c add: #searchField height: 25; add: #tree ]; yourself! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 9/26/2013 14:30'! childrenFor: aPackageOrClass | result name | name := aPackageOrClass name. aPackageOrClass isBehavior ifTrue: [ ^ #() ]. aPackageOrClass isTrait ifTrue: [ ^ #() ]. result := Set new. RPackageOrganizer default packagesDo: [ :each | | tempName | tempName := each name. (tempName size > name size and: [ (tempName at: name size + 1) = $- and: [ (tempName beginsWith: name) ]]) ifTrue: [ result add: each ]]. result := result asSortedCollection: [ :a :b | a name <= b name ]. result addAll: aPackageOrClass definedClasses. ^ result ! ! !PackageAndClassChooser methodsFor: 'actions' stamp: 'CamilloBruni 9/26/2013 19:48'! choose ^ self chooseModalTo: World! ! !PackageAndClassChooser methodsFor: 'actions' stamp: 'CamilloBruni 11/20/2013 17:02'! chooseModalTo: parentWindow "Open this this package class chooser as a dialog modal to the given window" | dialog result | dialog := self openDialogWithSpec. result := nil. dialog okAction: [ result := self selectedItems ]; cancelAction: [ result := nil ]. parentWindow openModal: dialog window. ^ result! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 10/1/2013 12:40'! filteredRoots | roots | roots := RPackageOrganizer default packages select: [ :package | searchPattern search: package name ]. roots := roots asSortedCollection: [ :a :b | a name <= b name ]. Smalltalk allClassesAndTraitsDo: [ :class | (searchPattern search: class name) ifTrue: [ roots add: class ]]. ^ roots! ! !PackageAndClassChooser methodsFor: 'testing' stamp: 'CamilloBruni 10/1/2013 12:32'! hasSearch ^ self searchPattern isNil not! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 11/18/2013 20:59'! iconFor: anRPackageOrClass anRPackageOrClass isBehavior ifTrue: [ ^ Smalltalk ui icons classIcon ]. RPackageOrganizer default packageNamed: anRPackageOrClass name ifAbsent: [ ^ Smalltalk ui icons emptyPackageIcon ]. ^ Smalltalk ui icons packageIcon! ! !PackageAndClassChooser methodsFor: 'initialization' stamp: 'CamilloBruni 10/1/2013 12:24'! initializeWidgets self setFocus; update.! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 10/1/2013 12:42'! labelFor: aPackageOrClass self hasSearch ifTrue: [ ^ aPackageOrClass name ]. ^ (aPackageOrClass name copyAfterLast: $-) ifEmpty: [ aPackageOrClass name ]! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 10/1/2013 12:28'! roots | rootNames organizer| self hasSearch ifTrue: [ ^ self filteredRoots ]. organizer := RPackageOrganizer default. rootNames := (organizer packageNames collect: [ :name | name copyUpTo: $- ]) asSet asSortedCollection. ^ rootNames collect: [ :name| organizer packageNamed: name ifAbsent: [ RPackage named: name ]]! ! !PackageAndClassChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/18/2013 21:00'! searchField ^ searchField ifNil: [ searchField := SearchMorph new model: self; updateSelector: #searchUpdate:; on: (Character arrowDown asKeyCombination) do: [ :arg :arg2 :keystroke | self tree spec instance handleKeystroke: keystroke ]; yourself. searchField := searchField asSpecAdapter ]! ! !PackageAndClassChooser methodsFor: 'accessing' stamp: 'CamilloBruni 10/1/2013 12:32'! searchPattern ^ searchPattern! ! !PackageAndClassChooser methodsFor: 'updating' stamp: 'CamilloBruni 10/1/2013 12:27'! searchUpdate: aString searchPattern := nil. aString isEmptyOrNil ifFalse: [ searchPattern := [aString asRegexIgnoringCase] on: RegexSyntaxError do: [ aString ]]. self update.! ! !PackageAndClassChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 02:00'! selectedItem ^ self tree selectedItem! ! !PackageAndClassChooser methodsFor: 'accessing' stamp: 'CamilloBruni 9/26/2013 01:54'! selectedItems ^ self tree selectedItems! ! !PackageAndClassChooser methodsFor: 'accessing - tree' stamp: 'CamilloBruni 9/26/2013 02:07'! selectionChanged "Synchronize the selected items"! ! !PackageAndClassChooser methodsFor: 'initialization' stamp: 'CamilloBruni 10/1/2013 12:24'! setFocus self focusOrder add: self searchField; add: self tree. ! ! !PackageAndClassChooser methodsFor: 'accessing' stamp: 'CamilloBruni 11/17/2013 15:46'! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree isCheckList: true; multiSelection: true; autoMultiSelection: true; " rootNodeHolder: [ :item | TreeNodeModel with: item model: tree ];" displayBlock: [ :aPackageOrClass | self labelFor: aPackageOrClass ]; childrenBlock: [ :aPackageOrClass | self childrenFor: aPackageOrClass ]; iconBlock: [ :treeNode | self iconFor: treeNode content ]; whenSelectedItemChanged: [ :selection | self selectionChanged ]; doubleClick: [ Nautilus openOnPackage: tree selectedItem ]]! ! !PackageAndClassChooser methodsFor: 'updating' stamp: 'CamilloBruni 10/1/2013 12:50'! update updateProcess ifNotNil: [ updateProcess terminate ]. updateProcess := [ |roots| roots := self roots. UIManager default defer: [ self tree roots: roots ]. ] fork.! ! "NautilusRefactoring"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-25T16:48:52.628465+01:00 Pharo.image priorSource: 27157076! ----STARTUP----2013-11-25T16:54:17.800381+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-25T16:54:17.98238+01:00 Pharo-30596.image priorSource: 27181022! ----STARTUP----2013-11-26T08:06:50.154829+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/26/2013 08:02' prior: 77489023! commentForCurrentUpdate ^ '12243 re-enable group filtering button https://pharo.fogbugz.com/f/cases/12243 12235 EyeInspector is broken on ToolRegistry https://pharo.fogbugz.com/f/cases/12235 12216 Move DiffModel in widget + Fix the selection in TreeModel https://pharo.fogbugz.com/f/cases/12216'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/26/2013 08:03'! script252 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.299.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1693.mcz KernelTests-MarcusDenker.592.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.202.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.598.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.240.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.76.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/26/2013 08:03'! update30597 "self new update30597" self withUpdateLog: '12243 re-enable group filtering button https://pharo.fogbugz.com/f/cases/12243 12235 EyeInspector is broken on ToolRegistry https://pharo.fogbugz.com/f/cases/12235 12216 Move DiffModel in widget + Fix the selection in TreeModel https://pharo.fogbugz.com/f/cases/12216'. self loadTogether: self script252 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DiffModel commentStamp: '' prior: 69435119! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DropListModel commentStamp: '' prior: 77207232! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !TreeModel commentStamp: '' prior: 76790048! I am the Spec model of a MorphTreeMorph tree.! !TreeNodeModel commentStamp: '' prior: 77309817! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !MorphicDiffAdapter commentStamp: '' prior: 0! I am an adpater to bridge a DiffModel and a DiffMorph! !DialogWindowModel commentStamp: '' prior: 69546606! A DialogWindowModel is a model used to describe a DialogWindow! !SpecDropListMorph commentStamp: '' prior: 0! I am a special DropList with icons! !PackageTreeNautilus commentStamp: '' prior: 74397781! I'm a model for Nautilus with package tree.! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 17:33'! labelOnLeft ^ self changed: #labelOnLeft with: #()! ! !CheckBoxModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 17:33'! labelOnRight ^ self changed: #labelOnRight with: #()! ! !PackageTreeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 13:44' prior: 74377973! rootNodes self model showGroups ifTrue: [ ^ self groupsAsNodes ]. ^ PackageTreeNautilus showGroupsOnTop ifTrue: [ self groupsAsNodes, (self packagesAsNodes) ] ifFalse: [ self packagesAsNodes ]. ! ! !NewValueHolder methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/21/2013 22:14'! rawValue: aValue value := aValue! ! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'EstebanLorenzano 11/25/2013 14:02' prior: 77457063! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton fullFrame: ((0@0 corner: 0.5@0) asLayoutFrame bottomRightOffset: (-2)@25); addMorph: self buildToggleButton fullFrame: ((0.5@0 corner: 1@0) asLayoutFrame topLeftOffset: 2@0; bottomRightOffset: 0@25); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^ PanelMorph new changeProportionalLayout; addMorph: self buildPackageSearch fullFrame: ((0@0 corner: 1@0.1) "bottomOffset: -25"); addMorph: self buildList fullFrame: ((0@0.1 corner: 1@1) asLayoutFrame bottomOffset: -25); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 11/25/2013 16:24' prior: 74343028! clearPackageSelections list model selection: nil. listElements := nil. list2Elements := nil. packagesSelection removeAll. groupsSelection removeAll.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 11/25/2013 13:41' prior: 74343933! isSelectedPackage: aSelection ^ aSelection notNil and: [ aSelection asNautilusSelection = self selectedPackage ]! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 11/25/2013 14:07'! loadList2 ^ self showPackages ifTrue: [ self showHierarchy ifTrue: [ self getClassHierarchy2 ] ifFalse: [ self getPackagesList2 ] ] ifFalse: [ cachedHierarchy ifNotNil: [:col | col sortedElements ] ifNil: [ self getClassHierarchy ] ]! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 11/25/2013 16:10' prior: 74347959! resetShowHierarchy "If I'm showing hierarchy, going back to show simple class list" self model showHierarchy ifFalse: [ ^ self ]. self showPackages: true.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 13:47'! selectedGroup ^ self selectedPackage! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 13:54' prior: 74350797! selectedPackageWithoutChangingSelection: aSelection | class | self okToChange ifFalse: [ ^ self ]. class := self selectedClass. (class notNil and: [ aSelection isNil or: [ (aSelection includesClass: class) not ] ]) ifTrue: [ self selectedClass: nil ]. aSelection ifNotNil: [ aSelection registerSelectionTarget: self ]. self updateClassView. self update. self changed: #getComments. self changed: #sourceCodeFrom:.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 16:25' prior: 74351303! showGroups: aBoolean self okToChange ifFalse: [ ^ self ]. self showGroups = aBoolean ifTrue: [ ^ self ]. self model selectedPackage: nil. self clearPackageSelections. self model showGroups: aBoolean. self updatePackageView. self updateClassView. ! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 13:34' prior: 76778790! buildWidget "This is done this way to prevent the recursive building of the model" ^ super buildWidget model: self container; nodeModel: self model; yourself! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 13:25'! deselect self widgetDo: [ :w | w changed: #deselect. w model selectionChanged ]! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/22/2013 15:43'! hasContentToShow ^ self model hasContentToShow! ! !MorphicTreeNodeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:39'! isExpanded: aBoolean ! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 13:25'! select self widgetDo: [ :w | w changed: #select. w model selectionChanged ]! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/24/2013 13:22'! selected ^ self model selected! ! !MorphicTreeNodeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 13:25'! selected: aBoolean aBoolean ifTrue: [ self select ] ifFalse: [ self deselect ]! ! !MorphicTreeNodeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/25/2013 16:29'! takeHighlight self widgetDo: [ :w | w changed: #takeHighlight ]! ! !DiffModel commentStamp: '' prior: 77524595! I am a Spec widget useful for visualising differences between two strings. When a classContext: is setted, the strings are highlighted using such contextual information. Examples: self exampleWithoutOptions. self exampleWithOptions.! !DiffModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/21/2013 18:17'! defaultSpec ^ #(MorphicDiffAdapter adapt: #(model))! ! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/12/2013 17:38' prior: 69435448! exampleWithOptions " self exampleWithOptions " ^ self new showOptions: true; leftText: (True >> #and:) sourceCode; rightText: (True >> #or:) sourceCode; contextClass: True; openWithSpec! ! !DiffModel class methodsFor: 'example' stamp: 'MartinDias 9/10/2013 22:59' prior: 69435744! exampleWithoutOptions " self exampleWithoutOptions " ^ self new showOptions: false; leftText: 'Old text'; rightText: 'New text'; openWithSpec ! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76491271! contextClass ^ contextClassHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 76491414! contextClass: anObject contextClassHolder value: anObject ! ! !DiffModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/21/2013 22:26' prior: 69436849! initialize super initialize. leftTextHolder := '' asValueHolder. rightTextHolder := '' asValueHolder. contextClassHolder := nil asValueHolder. showOptions := true asValueHolder. showOnlyDestination := false asValueHolder. showOnlySource := false asValueHolder. leftTextHolder whenChangedDo: [ :newText | self changed: #leftText: with: { newText } ]. rightTextHolder whenChangedDo: [ :newText | self changed: #rightText: with: { newText } ]. contextClassHolder whenChangedDo: [ :newClass | self changed: #contextClass: with: { newClass } ]. showOptions whenChangedDo: [ :aBoolean | self changed: #showOptions: with: { aBoolean }]. showOnlyDestination whenChangedDo: [:aBoolean | self changed: #showOnlyDestination: with: { aBoolean } ]. showOnlySource whenChangedDo: [:aBoolean | self changed: #showOnlySource: with: { aBoolean } ]! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76491576! leftText ^ leftTextHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 76491711! leftText: anObject leftTextHolder value: anObject ! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76491865! rightText ^ rightTextHolder value! ! !DiffModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 76492002! rightText: anObject rightTextHolder value: anObject ! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:29'! showBoth showOnlySource rawValue: false. showOnlyDestination rawValue: false. self changed: #showBoth with: { }! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:15'! showOnlyDestination ^ showOnlyDestination value! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:33'! showOnlyDestination: aBoolean showOnlyDestination rawValue: false. showOnlyDestination value: aBoolean.! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:11'! showOnlySource ^ showOnlySource value! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:32'! showOnlySource: aBoolean showOnlyDestination rawValue: false. showOnlySource value: aBoolean! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76492159! showOptions ^ showOptions value! ! !DiffModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 76492295! showOptions: aBoolean showOptions value: aBoolean! ! !DropListModel commentStamp: '' prior: 77524893! A DropListModel is a Spec model for drop lists. I am assume there is a little problem on an empty list, but frankly, who creates an empty drop list ? See DropListExample for an example! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 12:58'! addItemLabeled: aString do: aBlock icon: anIcon | item | item := DropListItem named: aString do: aBlock. item icon: anIcon. "If you add directly in the contents, the update is not triggered from the value holder" listHolder add: item.! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 18:08' prior: 77207848! displayForItem: anItem "The order of the arguments may looks weird, but then it seemsm ore natural while using the widget" ^ self displayBlock cull: anItem model cull: anItem! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 18:27'! getIconFor: anItem ^ self iconHolder cull: anItem! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 18:26'! iconHolder ^ iconHolder value! ! !DropListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 18:26'! iconHolder: aBlock iconHolder value: aBlock! ! !DropListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/23/2013 13:06' prior: 77208270! initialize super initialize. listHolder := OrderedCollection new asValueHolder. selectionHolder := SelectionValueHolder new. listHolder whenChangedDo: [ self changed: #getList. self changed: #getIconFor:. self internalResetSelection.]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. displayBlock := [ :model :item | item label ] asValueHolder. iconHolder := [ :model :item | item icon ] asValueHolder. self whenSelectedItemChanged: [:item | item value ]! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 18:33' prior: 69440384! internalResetSelection selectionHolder reset. self getList ifNotEmpty: [ self silentlySetSelectedIndex: 1 ]! ! !DropListModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 18:37' prior: 76622315! silentlySetSelectedIndex: anIndex "Force the selection of the item at index anIndex" | selection | selection := listHolder value at: anIndex ifAbsent: [ ^ self ]. selectionHolder index value: anIndex. selectionHolder selection value: selection.! ! !TreeModel commentStamp: '' prior: 77525138! I am the Spec model of a MorphTreeMorph tree.! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:57'! collapseAll self changed: #collapseAll with: #()! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 10:50'! highlightedItem "Return the currently highlighted item" ^ highlightedItem value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 10:50'! highlightedItem: anItem < api: #st getter: #highlightedItem registration: #whenHighlightedItemChanged:> "Set the highlightedItem item" "In the case of keyboard navigation with checklist, it may differ from the last selected item" highlightedItem value: anItem! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/22/2013 10:52' prior: 77332860! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. removeOnlyLastSelected := false asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [ :each | each icon ] asValueHolder. highlightedItem := nil asValueHolder. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: [ self childrenFor: item ] ] asValueHolder. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asValueHolder. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/21/2013 22:53' prior: 76793942! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | col do: [ :each | each container: self ]. self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. rootNodeHolder whenChangedDo: [ :aBlock | self updateTree ]. isCheckList whenChangedDo: [ :boolean | self changed: #isCheckList: with: { boolean }]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:55'! removeOnlyLastSelected ^ removeOnlyLastSelected value! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:51'! removeOnlyLastSelected: aBoolean removeOnlyLastSelected value: aBoolean! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 14:59'! selectAll self changed: #selectAdd with: #()! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 11:41'! selectionChanged self changed: #selectionChanged with: #()! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/22/2013 12:42' prior: 76532669! selectionChanged: ann ^ selectionHolder value: (ann selection ifNil: [ #() ] ifNotNil: [:selection | selection selectedNodes ])! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/22/2013 10:51'! whenHighlightedItemChanged: aBlock highlightedItem whenChangedDo: aBlock! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 11/21/2013 18:04' prior: 69545594! whenSelectedItemChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: [ :col | col ifNil: [ aBlock value: nil ] ifNotNil: [ col isEmpty ifTrue: [ aBlock value: nil ] ifFalse: [ aBlock value: (col last nodeModel lastClicked ifTrue: [ col last item ] ifFalse: [ nil ]) ] ] ]! ! !TreeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/24/2013 00:45' prior: 69545976! whenSelectedItemsChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: [ :col | aBlock cull: (col collect: [:e | e content ]) ]! ! !TreeNodeModel commentStamp: '' prior: 77525246! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/23/2013 11:49' prior: 77347235! buildChildren contents := self children value collect: [ :each || node | node := each isTreeNodeModel ifTrue: [ each ] ifFalse: [ (self childNodeClassFor: each) new content: each ]. node parentNode: self; yourself ]. ^ contents! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/22/2013 15:42'! hasContentToShow ^ hasContentToShow value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/22/2013 15:42'! hasContentToShow: aBlock hasContentToShow value: aBlock! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 13:36' prior: 77310776! initialize super initialize. children := [ self container childrenFor: self content ] asValueHolder. content := nil asValueHolder. icon := nil asValueHolder. container := nil asValueHolder. matchTokenFilter := [ :aFilter | false ] asValueHolder. parentNode := nil asValueHolder. childNodeClass := self class asValueHolder. selected := false asValueHolder. lastClicked := false asValueHolder. mouseDownAction := [:event | ] asValueHolder. hasContentToShow := false asValueHolder. isExpanded := false asValueHolder. selected whenChangedDo: [ :aBoolean | self changed: #selected: with: { aBoolean } ]. isExpanded whenChangedDo: [ :aBoolean | self changed: #isExpanded: with: { aBoolean } ].! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:37'! isExpanded ^ isExpanded value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:37'! isExpanded: aBoolean isExpanded value: aBoolean! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/23/2013 23:37'! isPartialMatch | result | result := false. self children value do: [:each | (each selected or: [ each isPartialMatch ]) ifTrue: [ result := true ] ]. ^ result! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 18:00'! lastClicked ^ lastClicked value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 18:00'! lastClicked: aBoolean lastClicked value: aBoolean! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:57'! mouseDownAction ^ mouseDownAction value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:57'! mouseDownAction: aBlock mouseDownAction value: aBlock! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/25/2013 13:33'! selectAllChildren self children value do: [ :e | e selected: true. e selectAllChildren ].! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:55'! selected ^ selected value! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:46'! selected: aBoolean selected value: aBoolean! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/25/2013 16:27'! takeHighlight self changed: #takeHighlight with: #()! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/24/2013 21:21'! unselectAllChildren self children value do: [ :e | e selected: false. e unselectAllChildren ]. ! ! !TreeNodeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/22/2013 13:18'! whenContentChanged: aBlock content whenChangedDo: aBlock ! ! !TreeNodeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/24/2013 13:41'! whenIsExpandedChanged: aBlock isExpanded whenChangedDo: aBlock ! ! !TreeNodeModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/22/2013 12:31'! whenSelectedChanged: aBlock selected whenChangedDo: aBlock ! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/21/2013 18:19' prior: 76920684! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DiffAdapter put: #MorphicDiffAdapter; at: #DropListAdapter put: #DropListAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #MenuAdapter put: #MenuAdapter; at: #MenuGroupAdapter put: #MenuGroupAdapter; at: #MenuItemAdapter put: #MenuItemAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #TreeColumnAdapter put: #TreeColumnAdapter; at: #TreeNodeAdapter put: #TreeNodeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !MorphicDiffAdapter commentStamp: '' prior: 77525439! I am an adpater to bridge a DiffModel and a DiffMorph! !MorphicDiffAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/21/2013 18:18'! defaultSpec ^ {#DiffMorph. #on:. #(model). #from:to:contextClass:. {#model. #leftText}. { #model. #rightText}. { #model. #contextClass}. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. #(model help). #showOptions:. #(model showOptions). #showOnlyDestination:. #(model showOnlyDestination). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 18:16'! contextClass ^ self model contextClass! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:01'! contextClass: aClass self widgetDo: [ :w | w contextClass: aClass; updateText ]! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 18:16'! leftText ^ self model leftText! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:01'! leftText: aText self widgetDo: [ :w | w srcText: aText; updateText ]! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 18:16'! rightText ^ self model rightText! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:01'! rightText: aText self widgetDo: [ :w | w dstText: aText; updateText ]! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:16'! showBoth self widgetDo: [ :w | w showBoth ]! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 18:18'! showOnlyDestination ^ self model showOnlyDestination! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:02'! showOnlyDestination: aBoolean self widgetDo: [ :w | w showOnlyDestination: aBoolean ]! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 22:16'! showOnlySource ^ self model showOnlySource! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:17'! showOnlySource: aBoolean self widgetDo: [ :w | w showOnlySource: aBoolean ]! ! !MorphicDiffAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 18:18'! showOptions ^ self model showOptions! ! !MorphicDiffAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:02'! showOptions: aBoolean self widgetDo: [ :w | w showOptions: aBoolean ]! ! !MorphicCheckBoxAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/22/2013 17:40' prior: 69643495! defaultSpec ^ {#CheckboxMorph. #color:. Color transparent. #on:selected:changeSelected:. #model. #state. #state:. #label:. { #model. #label }. #beCheckbox. #hResizing:. #spaceFill. #vResizing:. #shrinkWrap. #setBalloonText:. { #model . #help}. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #labelClickable:. { #model. #labelClickable}.}! ! !MorphicCheckBoxAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 17:39'! labelOnLeft ^ self widgetDo: [ :w | w listDirection: #leftToRight ]! ! !MorphicCheckBoxAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 17:39'! labelOnRight ^ self widgetDo: [ :w | w listDirection: #rightToLeft ]! ! !MorphicTextAdapter methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 11/23/2013 23:20'! accept self widgetDo:[ :w | w accept ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:56'! selectAll self widgetDo: [ :w | w selectAll ]! ! !MorphicDialogWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/24/2013 15:14' prior: 76782703! defaultSpec ^ #( SpecDialogWindow specWidget: #(model contentMorph) setToolbarFrom: #(model toolbarBlock) initialize)! ! !MorphicDialogWindowAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 15:14'! buildWidget ^ super buildWidget model: self model; yourself! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:17'! modalRelativeTo: aWindow self widgetDo: [ :w | aWindow setModal: w ]! ! !MorphicDialogWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/24/2013 15:13'! toolbarBlock ^ [ self model toolbar ]! ! !DialogWindowModel commentStamp: '' prior: 77525559! A DialogWindowModel is a model used to describe a DialogWindow! !DialogWindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 15:08'! initialize super initialize. toolbar := OkCancelToolbar new asValueHolder! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:08'! modalRelativeTo: aWindow self changed: #modalRelativeTo: with: { aWindow }! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:03' prior: 74132961! toolbar ^ toolbar value! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:03'! toolbar: aBar toolbar value: aBar! ! !InspectorNavigator methodsFor: 'actions' stamp: 'CamilloBruni 11/25/2013 17:00' prior: 74099834! inspect: anObject | oldInspectorType | oldInspectorType := self inspectorType. self inspector: (EyeInspector inspector: anObject); inspectorType: oldInspectorType. ! ! !MorphicTreeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/21/2013 22:54' prior: 76770930! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #removeOnlyLastSelected:. #(model removeOnlyLastSelected). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:58'! collapseAll self treeModel collapseAll! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 15:37' prior: 69675355! expandRoots self treeModel expandRoots! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 15:21'! isCheckList: aBoolean self widgetDo: [ :w | w isCheckList: aBoolean ]! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:42' prior: 69677091! onMorphTreeSelectionChanged: ann | items | items := (ann selection ifNil: [ #() ] ifNotNil: [:selection | selection selectedNodes ]). items := items collect: [ :each | each nodeModel ]. self model selectedItems: items! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 22:54'! removeOnlyLastSelected ^ self model removeOnlyLastSelected! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/21/2013 15:19' prior: 77331428! rootNodeFromItem: item | node | node := item isTreeNodeModel ifTrue: [ item ] ifFalse: [ self rootNodeHolder cull: item ]. node container: self model. ^ node buildWithSpec! ! !MorphicTreeAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 14:59'! selectAdd self widgetDo: [ :w | w selectAll ]! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 15:11' prior: 74442012! newButtonRow ^ self toolbar ifNil: [ nil ] ifNotNil: [ : t | t buildWithSpec ]! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:12'! setToolbarFrom: aBlock self toolbar: aBlock value! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 15:07' prior: 69410583! toolbar "Lazy initialization because this method is called efore the initialize method" ^ toolbar! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 15:07' prior: 69410841! toolbar: anObject toolbar := anObject. anObject owner: self! ! !Morph methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 11/23/2013 21:17'! setModal: aSystemWindow |area mySysWin keyboardFocus| keyboardFocus := self activeHand keyboardFocus. mySysWin := self isSystemWindow ifTrue: [self] ifFalse: [self ownerThatIsA: SystemWindow]. mySysWin ifNil: [mySysWin := self]. mySysWin modalLockTo: aSystemWindow. area := RealEstateAgent maximumUsableArea. aSystemWindow extent: aSystemWindow initialExtent. aSystemWindow position = (0@0) ifTrue: [aSystemWindow position: self activeHand position - (aSystemWindow extent // 2)]. aSystemWindow bounds: (aSystemWindow bounds translatedToBeWithin: area). [ |aWidget | aWidget := aSystemWindow. [aWidget world notNil] whileTrue: [ aWidget outermostWorldMorph doOneCycle]] ensure: [mySysWin modalUnlockFrom: aSystemWindow. self activeHand newKeyboardFocus: keyboardFocus]. ^aSystemWindow! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/21/2013 18:19' prior: 76919185! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DiffAdapter put: #MorphicDiffAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #MenuAdapter put: #MorphicMenuAdapter; at: #MenuGroupAdapter put: #MorphicMenuGroupAdapter; at: #MenuItemAdapter put: #MorphicMenuItemAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #TreeColumnAdapter put: #MorphicTreeColumnAdapter; at: #TreeNodeAdapter put: #MorphicTreeNodeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 14:47'! methodsFor: class ^ self item methodsFor: class! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 14:48'! methodsFor: class categorised: aCategory ^ self item methodsFor: class categorised: aCategory! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 14:48'! protocolsFor: class ^ self item protocolsFor: class! ! !DropListExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/23/2013 13:11' prior: 68861584! initializeWidgets uniformDropList := self newDropList. heterogeneousDropList := self newDropList. uniformDropList items: {morph1. morph2. morph3}; displayBlock: [ :m | m color name capitalized, ' morph' ]; iconHolder: [:e| Smalltalk ui icons testGreenIcon ]; whenSelectedItemChanged: [ :m | container removeAllMorphs. container addMorph: m ]. heterogeneousDropList addItemLabeled: 'Open workspace' do: [ Workspace open ] icon: Smalltalk ui icons smallOkIcon; addItemLabeled: 'Inspect current morph' do: [ uniformDropList selectedItem inspect ] icon: Smalltalk ui icons testRedIcon. "If this is uncommented, it will fire the action of the first item, which is not what we want: heterogeneousDropList setSelectedIndex: 1. same for: heterogeneousDropList setIndex: 1" uniformDropList setIndex: 1. self setFocus.! ! !SpecDropListMorph commentStamp: '' prior: 77525681! I am a special DropList with icons! !SpecDropListMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 12:56'! getIconFor: anItem ^ self model getIconFor: anItem! ! !SpecDropListMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 13:23'! listHeight "Answer the height for the list." ^ super listHeight + 12! ! !SpecDropListMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 13:20'! listMorphClass ^ PluggableIconListMorph! ! !SpecDropListMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 11/23/2013 23:30'! newListMorph "Answer a new list morph" |m| m := (self listMorphClass on: self list: #list selected: #listSelectionIndex changeSelected: #listSelectionIndex: menu: nil keystroke: nil) getIconSelector: #getIconFor:; autoDeselect: false; wrapSelector: #wrapItem:index:; roundedCorners: #(2 3); setProperty: #morphicLayerNumber toValue: 5; color: self color; borderStyle: (self theme dropListNormalListBorderStyleFor: self); on: #mouseDown send: #listMouseDown: to: self; yourself. ^m! ! !SpecDropListMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 23:44'! updateListSelectionIndex currentIcon ifNotNil: [ self removeMorph: currentIcon ]. super updateListSelectionIndex. self selectedItem ifNotNil: [ :item | (self getIconFor: item) ifNotNil: [:icon | currentIcon := icon asMorph. self addMorphFront: currentIcon ] ] ! ! !SpecDropListMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 23:20'! wrapItem: anItem index: anIndex ^ self model wrapItem: anItem index: anIndex! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 23:19' prior: 76555786! accept "Accep the current pendingtext" self changed: #accept with: #(). "Dummy changed to raise an announcement" actionPerformedHolder value: self text.! ! !TextModel methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 11/24/2013 15:56'! selectAll self changed: #selectAll with: #()! ! !PackageTreeNautilus commentStamp: '' prior: 77525784! I'm a model for Nautilus with package tree.! !PackageTreeNautilus class methodsFor: 'settings' stamp: 'EstebanLorenzano 11/25/2013 13:40'! nautilusSettingsOn: aBuilder (aBuilder setting: #showGroupsOnTop) parent: #Nautilus; target: self; label: 'Show groups on top ?' translated; description: 'If true, Nautilus will show groups on top of package pane' translated.! ! !PackageTreeNautilus class methodsFor: 'settings' stamp: 'EstebanLorenzano 11/25/2013 13:39'! showGroupsOnTop ^ ShowGroupsOnTop ifNil: [ ShowGroupsOnTop := true ]! ! !PackageTreeNautilus class methodsFor: 'settings' stamp: 'EstebanLorenzano 11/25/2013 13:40'! showGroupsOnTop: aBoolean ShowGroupsOnTop := aBoolean! ! !PackageTreeNautilus methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/25/2013 14:34'! defaultUIClass ^ PackageTreeNautilusUI! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 11/22/2013 12:40' prior: 77309209! childNodeFromItem: anItem ^ (anItem container: self model; buildWithSpec) parentNode: self; yourself! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 15:44'! hasContentToShow ^ self nodeModel hasContentToShow! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:35'! isExpanded ^ self nodeModel isExpanded! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 13:39'! isExpanded: aBoolean self nodeModel isExpanded: aBoolean! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 10:58'! lastClicked: aBoolean self nodeModel lastClicked: aBoolean. aBoolean ifTrue: [ self model highlightedItem: self nodeModel content ] ifFalse: [ self model highlightedItem: nil ].! ! !SpecTreeNodeModel methodsFor: 'events' stamp: 'BenjaminVanRyseghem 11/21/2013 23:00'! mouseDown: event self nodeModel mouseDownAction cull: event! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 12:55'! selected ^ self nodeModel selected! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 12:58'! selected: aBoolean self nodeModel selected: aBoolean! ! !MorphicDropListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/22/2013 18:42' prior: 69645859! defaultSpec ^ {#SpecDropListMorph. #color:. Color white. #wrapSelector:. #wrap:withIndex:. #on:list:selected:changeSelected:. #model. #getList. #getIndex. #setIndex:. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/23/2013 13:04'! getIconFor: anItem ^ self model iconHolder cull: anItem model cull: anItem! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/22/2013 18:31' prior: 77206405! getList ^ self model getList! ! !MorphicDropListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/24/2013 15:26'! wrapItem: anItem index: anIndex | result | result := self model displayForItem: anItem. ^ result asString! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 11/22/2013 17:48' prior: 41714327! buttonWidth ^ 76! ! PackageTreeNautilus removeSelector: #uiClass! DiffModel class removeSelector: #spec! "Deprecated30"! "Nautilus"! "Spec-Core"! "Spec-Examples"! "Spec-Inspector"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----2013-11-26T08:07:00.868805+01:00 Pharo.image priorSource: 27181219! ----STARTUP----2013-11-26T08:12:48.542334+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-26T08:12:48.71033+01:00 Pharo-30597.image priorSource: 27234834! ----STARTUP----2013-11-26T13:05:45.635351+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/26/2013 13:03' prior: 77513165! commentForCurrentUpdate ^ '12245 put back pragmas in #findSubstringViaPrimitive:... https://pharo.fogbugz.com/f/cases/12245 12244 Enhancement again in MorphTreeNodeMorph https://pharo.fogbugz.com/f/cases/12244'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/26/2013 13:03'! script253 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1693.mcz KernelTests-MarcusDenker.592.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.205.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.598.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.974.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.240.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.76.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/26/2013 13:03'! update30598 "self new update30598" self withUpdateLog: '12245 put back pragmas in #findSubstringViaPrimitive:... https://pharo.fogbugz.com/f/cases/12245 12244 Enhancement again in MorphTreeNodeMorph https://pharo.fogbugz.com/f/cases/12244'. self loadTogether: self script253 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 11/26/2013 10:12'! silentlySetSelectedMorph: aMorph | path | path := aMorph ifNotNil: [ aMorph path collect: [ :m | m complexContents ] ]. self isMultiple ifFalse: [ self emptySelection ]. aMorph ifNotNil: [ self addToSelection: aMorph ]. self selectionUpdateFromViewWhile: [ self listModel selection: (self newSelectionHolderWithNodePath: path) ]! ! !String methodsFor: 'comparing' stamp: 'MarcusDenker 11/26/2013 12:57' prior: 77174560! findSubstringViaPrimitive: key in: body startingAt: start matchTable: matchTable "Answer the index in the string body at which the substring key first occurs, at or beyond start. The match is determined using matchTable, which can be used to effect, eg, case-insensitive matches. If no match is found, zero will be returned. The algorithm below is not optimum -- it is intended to be translated to C which will go so fast that it wont matter." | index | key size = 0 ifTrue: [^ 0]. start to: body size - key size + 1 do: [:startIndex | index := 1. [(matchTable at: (body at: startIndex+index-1) asciiValue + 1) = (matchTable at: (key at: index) asciiValue + 1)] whileTrue: [index = key size ifTrue: [^ startIndex]. index := index+1]]. ^ 0 " ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 1 matchTable: CaseSensitiveOrder 1 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 2 matchTable: CaseSensitiveOrder 7 ' ' findSubstring: 'abc' in: 'abcdefabcd' startingAt: 8 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseSensitiveOrder 0 ' ' findSubstring: 'abc' in: 'abcdefABcd' startingAt: 2 matchTable: CaseInsensitiveOrder 7 "! ! !MorphTreeNodeMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 10:07' prior: 77462206! selectedWithoutNotifyingComplexContents: aBoolean "Only called at creation" aBoolean ifFalse: [ ^ self ]. container listManager silentlySetSelectedMorph: self. selected := aBoolean.! ! !MorphTreeNodeMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 16:31'! takeHighlight container listManager lastClickedMorph: self. container selectionChanged! ! !MorphTreeNodeMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 11/25/2013 16:30' prior: 77417980! update: aSymbol aSymbol = #select ifTrue: [ ^ self selected: true ]. aSymbol = #deselect ifTrue: [ ^ self selected: false ]. aSymbol = #takeHighlight ifTrue: [ ^ self takeHighlight ]. super update: aSymbol! ! "Collections-Strings"! "Morphic-Base"! ----End fileIn----! ----QUIT----2013-11-26T13:05:53.847348+01:00 Pharo.image priorSource: 27235031! ----STARTUP----2013-11-26T13:11:22.094603+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-26T13:11:22.268603+01:00 Pharo-30598.image priorSource: 27249381! ----STARTUP----2013-11-27T08:33:50.379205+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/27/2013 08:30' prior: 77566977! commentForCurrentUpdate ^ '12251 MorphTreeMorph improvment https://pharo.fogbugz.com/f/cases/12251 12250 Categorization in Polymorph https://pharo.fogbugz.com/f/cases/12250 12247 New fix in Spec https://pharo.fogbugz.com/f/cases/12247'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/27/2013 08:30'! script254 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-EstebanLorenzano.14.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1693.mcz KernelTests-MarcusDenker.592.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.206.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.598.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.976.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.242.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.77.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/27/2013 08:30'! update30599 "self new update30599" self withUpdateLog: '12251 MorphTreeMorph improvment https://pharo.fogbugz.com/f/cases/12251 12250 Categorization in Polymorph https://pharo.fogbugz.com/f/cases/12250 12247 New fix in Spec https://pharo.fogbugz.com/f/cases/12247'. self loadTogether: self script254 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PluggableTextMorph methodsFor: 'editor access' stamp: 'BenjaminVanRyseghem 11/26/2013 22:17' prior: 29559288! selectAll "Tell my textMorph's editor to select all" self textMorph editor selectAll. selectionInterval := self textMorph editor selectionInterval! ! !MorphicTreeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/26/2013 18:16' prior: 77553635! defaultSpec ^ {#MorphTreeMorph. #model:. #(model treeModel). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #initializeColumsFrom:. #(model). #hResizing:. #spaceFill. #vResizing:. #spaceFill. #autoDeselection:. #(model autoDeselection). #resizerWidth:. #(model resizerWidth). #columnInset:. #(model columnInset). #iconBlock:. #(model iconBlock). #rowInset:. #(model rowInset). #keystrokeActionSelector:. #keyStroke:. #preferedPaneColor:. #(model preferedPaneColor). #multiSelection:. #(model multiSelection). #autoMultiSelection:. #(model autoMultiSelection). #removeOnlyLastSelected:. #(model #selectOnlyLastHighlighted). #isCheckList:. #(model isCheckList). #doubleClickSelector:. #doubleClick. #getMenuSelector:. #menu:shifted:. #rowColorForEven:odd:. #(model evenRowColor). #(model oddRowColor). #buildContents }! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/26/2013 18:16'! selectOnlyLastHighlighted ^ self model selectOnlyLastHighlighted! ! !AbstractAdapter methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/26/2013 17:19'! isSpecAdapter ^ true! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 11/26/2013 22:16'! inputTextHeight ^ 26! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:08'! cancelled ^ window ifNil: [ false ] ifNotNil: [ :w | w cancelled ]! ! !UIThemeWatery methodsFor: 'fill-styles' stamp: 'BenjaminVanRyseghem 11/26/2013 23:06' prior: 45866739! textFieldNormalFillStyleFor: aTextField "Return the normal fillStyle for the given text field." ^ Color white! ! !MorphTreeNodeMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 00:05' prior: 77461402! initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel container := hostList. self cellInset: (container resizerWidth @ 0). complexContents := anObject. anObject addDependent: self. isExpanded := anObject isExpanded. nextSibling := firstChild := nil. priorMorph ifNotNil: [priorMorph nextSibling: self]. indentLevel := newLevel. self setBalloonText: anObject helpText. self initRow. anObject selected ifTrue: [ self selectedWithoutNotifyingComplexContents: true ]! ! !MorphTreeMorph methodsFor: 'submorphs-add/remove' stamp: 'BenjaminVanRyseghem 11/26/2013 18:29' prior: 77459809! addMorphsAfter: parentMorph fromCollection: aCollection "Sent when expanding a node in order to add chilldren nodes after the expanded node" | priorMorph morphList subs | priorMorph := nil. morphList := OrderedCollection new. "prepare the list of nodes to be added" aCollection do: [:item | priorMorph := self indentingItemClass new initWithContents: item prior: priorMorph forList: self indentLevel: parentMorph indentLevel + 1. morphList add: priorMorph. "Was this row expanded ? if true -> expand it again " priorMorph isExpanded ifTrue: [priorMorph isExpanded: true. priorMorph addChildrenForList: self addingTo: morphList withExpandedItems: #()] ]. "Set new child morphs index" 1 to: morphList size do: [:i | | m | (m := morphList at: i) index: i + parentMorph index]. "Add the new morph list in the scroller" scroller addAllMorphs: morphList after: parentMorph. "update next morphs index" subs := self allNodeMorphs. morphList last index to: subs size do: [:pos | (subs at: pos) index: pos]. "set the new morphs widths according to columns width" self updateColumnMorphsWidth. morphList do: [ :e | e doLayoutIn: e layoutBounds ]. ^morphList ! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 18:16'! selectOnlyLastHighlighted ^ removeOnlyLastSelected value! ! !TextMorphForFieldView methodsFor: 'private' stamp: 'AlainPlantec 11/22/2010 12:03' prior: 52836052! editorClass ^ TextEditor! ! !TextMorphForFieldView methodsFor: 'testing' stamp: 'GaryChambers 8/17/2010 16:38' prior: 52836178! isEditEvent: anEvent "Answer whether the given event is a key stroke that should be allowed despite the max length." |key| key := anEvent keyValue asCharacter. ^key == Character cr or: [ key == Character escape or: [ key == Character backspace or: [ key == Character delete or: [ key == Character arrowLeft or: [ key == Character arrowRight or: [ key == Character home or: [ key == Character end or: [ anEvent commandKeyPressed and: [key = $a]]]]]]]]]! ! !TextMorphForFieldView methodsFor: 'event handling' stamp: 'AlainPlantec 4/27/2011 15:35' prior: 52836753! keyStroke: evt "Don't allow editing keys if the edit view is disabled. Do the key if max length has not been reached. Don't allow tabs." (self localHandleKeystroke: evt) ifTrue: [^self]. (self maxLength isNil or: [self text size < self maxLength or: [ self editor selectionInterval size > 0 or: [self isEditEvent: evt]]]) ifTrue: [self doAutoAccept: evt]. super keyStroke: evt! ! !TextMorphForFieldView methodsFor: 'events' stamp: 'AlainPlantec 11/28/2010 22:50' prior: 52837243! localHandleKeystroke: evt "Answer whether we locally handle the keyStroke event. Disregard tabs for now." (self editView keystrokeFromTextMorph: evt) ifTrue: [^ true]. (self autoAccept and: [evt keyCharacter = Character cr and: [self crAction notNil]]) ifTrue: [(self crAction isKindOf: MessageSend) ifTrue: [ self crAction value] ifFalse: [self crAction value: self text].. ^ true]. evt keyCharacter = Character tab ifTrue: [ evt shiftPressed ifTrue: [(self editView respondsTo: #navigateFocusBackward) ifTrue: [self editView navigateFocusBackward]] ifFalse: [(self editView respondsTo: #navigateFocusForward) ifTrue: [self editView navigateFocusForward]]. ^true]. ^false! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 11/26/2013 18:16' prior: 77420149! mouseDown: event on: aTargetMorph "Changed to take keybaord focus." ((self autoMultiSelection) and: [event shiftPressed not]) ifTrue: [ firstClickedMorph := aTargetMorph. aTargetMorph selected ifTrue: [ (self selectOnlyLastHighlighted and: [ aTargetMorph hasContentToShow ]) ifTrue: [ self removeFromSelection: aTargetMorph. aTargetMorph = self lastClickedMorph ifFalse: [ self addToSelection: aTargetMorph ] ] ifFalse: [ self removeFromSelection: aTargetMorph ] ] ifFalse: [ (self selectOnlyLastHighlighted and: [ aTargetMorph hasContentToShow ]) ifTrue: [ aTargetMorph = self lastClickedMorph ifTrue: [ self addToSelection: aTargetMorph. self lastClickedMorph: aTargetMorph ] ] ifFalse: [ self addToSelection: aTargetMorph. self lastClickedMorph: aTargetMorph ] ] ]. (event shiftPressed not or: [firstClickedMorph isNil]) ifTrue: [firstClickedMorph := aTargetMorph]. aTargetMorph mouseDown: event ! ! !MorphTreeListManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 18:16'! selectOnlyLastHighlighted ^ removeOnlyLastSelected! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:08'! cancelled ^ false! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/26/2013 11:40'! allSelectedItems | result | result := OrderedCollection new. self selected ifTrue: [ result add: self ]. self children value do: [ :e | result addAll: e allSelectedItems ]. ^ result! ! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 11/26/2013 12:27'! allUnselectedItems | result | result := OrderedCollection new. self selected ifFalse: [ result add: self ]. self children value do: [ :e | result addAll: e allUnselectedItems ]. ^ result! ! !PluggableTextFieldMorph methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 4/23/2013 00:34' prior: 35624702! accept self acceptBasic. acceptAction ifNotNil: [acceptAction value: textMorph contents asText].! ! !PluggableTextFieldMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 11/26/2013 23:07' prior: 67469108! drawOn: aCanvas "Eventually draw the helpText" super drawOn: aCanvas. self ghostText ifNotEmpty: [ self text isEmpty ifTrue: [| ghostBounds | ghostBounds := ((self scroller submorphBounds topLeft corner: self innerBounds bottomRight) translateBy: 0 @ (self scroller height - self theme textFont height / 2) rounded) insetBy: self textMarginsWidth @ 0. aCanvas drawString: self ghostText in: ghostBounds font: self theme textFont color: Color lightGray]]. entryCompletion ifNotNil: [entryCompletion closeIfNotNeeded: self].! ! !PluggableTextFieldMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 4/23/2013 00:43' prior: 35624910! hasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " aBoolean == hasUnacceptedEdits ifFalse: [hasUnacceptedEdits := aBoolean. self changed]. aBoolean ifFalse: [hasEditingConflicts := false]. self okToStyle ifTrue: [ self styler styleInBackgroundProcess: textMorph contents]! ! !PluggableTextFieldMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 22:22' prior: 48005568! initialize textMorphClass := TextMorphForFieldView. super initialize. self beDecrypted! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:06'! cancelled ^ self toolbar cancelled! ! !SpecInterpreter methodsFor: 'interpreting-private' stamp: 'BenjaminVanRyseghem 11/26/2013 23:34' prior: 69699331! retrieveSpecFrom: aPresenter selector: aSelector ((self model respondsTo: #needRebuild) and: [ self model needRebuild not and: [ self model spec notNil ] ]) ifTrue: [ spec := self model spec. self model needRebuild: true. ((spec respondsTo: #isRedrawable) and: [ spec instance isSpecAdapter ]) ifFalse: [ spec := self computeSpecFrom: arrayToInterpret first selector: aSelector ] ifTrue: [ spec isRedrawable ifTrue: [ spec removeSubWidgets ] ifFalse: [ ^ spec instance ] ] ] ifFalse: [ spec := self computeSpecFrom: arrayToInterpret first selector: aSelector ]. aSelector ifNil: [ aPresenter isSpecLayout ifTrue: [ spec selector: aPresenter selector ] ] ifNotNil: [ spec selector: aSelector ]. ^ nil! ! !Object methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/26/2013 17:18'! isSpecAdapter ^ false! ! MorphicTreeAdapter removeSelector: #removeOnlyLastSelected! MorphTreeListManager removeSelector: #removeOnlyLastSelected! TreeModel removeSelector: #removeOnlyLastSelected! "Morphic-Base"! "Polymorph-Widgets"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-27T08:34:02.521203+01:00 Pharo.image priorSource: 27249578! ----STARTUP----2013-11-27T08:39:37.454586+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-27T08:39:37.636582+01:00 Pharo-30599.image priorSource: 27272266! ----STARTUP----2013-11-27T09:46:43.057656+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/27/2013 09:42' prior: 77581525! commentForCurrentUpdate ^ '12248 Add Job class>>current to know the current (running) job https://pharo.fogbugz.com/f/cases/12248 12238 ProtocolOrganizer allProtocols vs protocols are inconsistent https://pharo.fogbugz.com/f/cases/12238 12246 package tree does not search packages by key pressing https://pharo.fogbugz.com/f/cases/12246 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/27/2013 09:43'! script255 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.207.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.976.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.103.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.27.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.242.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.77.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/27/2013 09:43'! update30600 "self new update30600" self withUpdateLog: '12248 Add Job class>>current to know the current (running) job https://pharo.fogbugz.com/f/cases/12248 12238 ProtocolOrganizer allProtocols vs protocols are inconsistent https://pharo.fogbugz.com/f/cases/12238 12246 package tree does not search packages by key pressing https://pharo.fogbugz.com/f/cases/12246 '. self loadTogether: self script255 merge: false. self flushCaches. ! ! "ScriptLoader30"! !JobDetector commentStamp: '' prior: 0! I am a notification for getting the current job, if there is one. Usage: JobDetector signal. The result is nil when there is not a current job.! !JobProgress commentStamp: '' prior: 42364975! A JobProgress is a notification to announce job progress. For example: [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: 0.1* each ; title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! !JobTest methodsFor: 'tests' stamp: 'MartinDias 11/26/2013 15:41'! testCurrent self assert: Job current isNil. [ :aJob | self assert: Job current equals: aJob. [ :anotherJob | self assert: Job current equals: anotherJob. ] asJob run. self assert: Job current equals: aJob. ] asJob run. self assert: Job current isNil. ! ! !PackageTreeNodeModel methodsFor: 'converting' stamp: 'EstebanLorenzano 11/26/2013 12:51'! asString ^ self item name! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'MarcusDenker 11/26/2013 15:56' prior: 74399874! protocols ^ protocols asArray! ! !MorphTreeListManager methodsFor: 'keyboard managing' stamp: 'EstebanLorenzano 11/26/2013 13:11' prior: 26913165! basicKeyPressed: aChar | nextSelection oldSelection milliSeconds slowKeyStroke nextSelectionNodeMorph | (aChar == Character space and: [ lastClickedMorph notNil ]) ifTrue: [ self selectMorph: lastClickedMorph multiple: (self isMultiple or: [self autoMultiSelection]). self selectionUpdateFromViewWhile: [ | selHolder | selHolder := self newSelectionHolderWithNodePath: lastClickedMorph complexContents path. self listModel selection: selHolder]]. nextSelection := oldSelection := lastSelection. milliSeconds := Time millisecondClockValue. slowKeyStroke := milliSeconds - lastKeystrokeTime > 500. lastKeystrokeTime := milliSeconds. self searchedElement: nil. slowKeyStroke ifTrue: ["forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString.] ifFalse: ["append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString.]. "Get rid of blanks and style used in some lists" nextSelectionNodeMorph := self allNodeMorphs detect: [:a | a complexContents asString trimBoth asLowercase beginsWith: lastKeystrokes] ifNone: [^ self ]. nextSelection := nextSelectionNodeMorph index. "No change if model is locked" self listModel okToChange ifFalse: [^ self]. self searchedElement: nextSelectionNodeMorph. lastSelection := nextSelection. "change scrollbarvalue" self scrollToShow: nextSelectionNodeMorph. self selectionChanged! ! !MorphTreeListManager methodsFor: 'keyboard managing' stamp: 'EstebanLorenzano 11/26/2013 13:29' prior: 26914753! keyStroke: anEvent | char args | char := anEvent keyValue asCharacter. (self arrowEvent: anEvent key: char) ifTrue: [ ^ true ]. char = Character cr ifTrue: [ self selectSearchedElement. ^ true ]. anEvent anyModifierKeyPressed ifFalse: [ self basicKeyPressed: char. ^ true]. self keystrokeActionSelector ifNil: [ ^ false]. args := self keystrokeActionSelector numArgs. (args = 0 or: [args > 2]) ifTrue: [^ self error: 'The keystrokeActionSelector must be a 1- or 2-keyword symbol'] ifFalse: [ ^ args = 1 ifTrue: [ self listModel perform: self keystrokeActionSelector with: anEvent] ifFalse: [ self listModel perform: self keystrokeActionSelector with: anEvent with: self]]! ! !MorphTreeListManager methodsFor: 'private' stamp: 'EstebanLorenzano 11/26/2013 13:38'! selectSearchedElement self searchedElement ifNotNil: [ :selectedMorph | self setSelectedMorph: selectedMorph. self searchedElement: nil ]! ! !JobDetector commentStamp: '' prior: 77615916! I am a notification for getting the current job, if there is one. Usage: JobDetector signal. The result is nil when there is not a current job.! !JobDetector methodsFor: 'handling' stamp: 'MartinDias 11/26/2013 15:33'! handle: aJob self resume: aJob! ! !JobProgress commentStamp: '' prior: 77616125! A JobProgress is a notification to announce job progress. For example: [:job | job title: 'Let us get started'. 1to: 10 do: [:each | JobProgress progress: 0.1* each ; title: 'Youpi ', each printString . (Delay forMilliseconds: 100) wait. ] ] asJob run! !Job class methodsFor: 'accessing' stamp: 'MartinDias 11/26/2013 17:10'! current "Answer the current job or nil if none." ^ JobDetector signal! ! "ClassOrganizer-Core"! "Kernel"! "KernelTests"! "Morphic-Base"! "Nautilus"! ----End fileIn----! ----QUIT----2013-11-27T09:46:55.103651+01:00 Pharo.image priorSource: 27272463! ----STARTUP----2013-11-27T09:52:21.148196+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-27T09:52:21.326199+01:00 Pharo-30600.image priorSource: 27289000! ----STARTUP----2013-11-27T16:46:25.119409+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 11/27/2013 16:43' prior: 77604410! commentForCurrentUpdate ^ '10160 Give a nice way to duplicate classes for test purpose https://pharo.fogbugz.com/f/cases/10160 12256 ListDialogWindow>>chooseFromOwner is not well implemented https://pharo.fogbugz.com/f/cases/12256 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 11/27/2013 16:43'! script256 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.207.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.978.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.30.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.242.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.77.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 11/27/2013 16:44'! update30601 "self new update30601" self withUpdateLog: '10160 Give a nice way to duplicate classes for test purpose https://pharo.fogbugz.com/f/cases/10160 12256 ListDialogWindow>>chooseFromOwner is not well implemented https://pharo.fogbugz.com/f/cases/12256 '. self loadTogether: self script256 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow methodsFor: 'instance creation' stamp: 'ChristopheDemarey 11/27/2013 15:35' prior: 24523707! chooseFromOwner: aMorph aMorph openModal: self. ^ self answer! ! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'ChristopheDemarey 11/27/2013 13:53'! testDuplicateClassWithNewName | createdClass allClasses | createdClass := factory duplicateClass: TestCase withNewName: #MyTestClass. allClasses := SystemNavigation new allClasses. self assert: (factory createdClasses allSatisfy: [:class| allClasses includes: class]). factory cleanUp. self assert: (factory createdClasses allSatisfy: [:class| class isObsolete]). allClasses := SystemNavigation new allClasses. self assert: (factory createdClasses noneSatisfy: [:class| allClasses includes: class]). self deny: (ChangeSet current changedClassNames includes: createdClass).! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'JenkinsCI 11/27/2013 08:48'! duplicateClass: aClass withNewName: name | newClass | newClass := aClass duplicateClassWithNewName: name. self createdClasses add: newClass. ^newClass ! ! "Polymorph-Widgets"! "SUnit-Core"! "SUnit-Tests"! ----End fileIn----! ----QUIT----2013-11-27T16:46:34.115406+01:00 Pharo.image priorSource: 27289197! ----STARTUP----2013-11-27T16:52:17.610396+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-27T16:52:17.788386+01:00 Pharo-30601.image priorSource: 27301933! ----STARTUP----2013-11-28T11:04:12.203745+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 11/27/2013 18:39' prior: 77621148! commentForCurrentUpdate ^ '12260 testDuplicateClassWithNewName is broken https://pharo.fogbugz.com/f/cases/12260 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 11/27/2013 18:39'! script257 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.237.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.180.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.644.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.49.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.207.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.64.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.978.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.242.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.77.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 11/27/2013 18:40'! update30602 "self new update30602" self withUpdateLog: '12260 testDuplicateClassWithNewName is broken https://pharo.fogbugz.com/f/cases/12260 '. self loadTogether: self script257 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'EstebanLorenzano 11/27/2013 18:39' prior: 77632675! testDuplicateClassWithNewName | createdClass allClasses | createdClass := [ factory duplicateClass: TestCase withNewName: #MyTestClass ] on: Error do: [ #MyTestClass asClass ]. allClasses := SystemNavigation new allClasses. self assert: (factory createdClasses allSatisfy: [:class| allClasses includes: class]). factory cleanUp. self assert: (factory createdClasses allSatisfy: [:class| class isObsolete]). allClasses := SystemNavigation new allClasses. self assert: (factory createdClasses noneSatisfy: [:class| allClasses includes: class]). self deny: (ChangeSet current changedClassNames includes: createdClass).! ! "SUnit-Tests"! ----End fileIn----! ----QUIT----2013-11-28T11:04:17.765743+01:00 Pharo.image priorSource: 27302130! ----STARTUP----2013-11-28T11:09:58.91667+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-28T11:09:59.092669+01:00 Pharo-30602.image priorSource: 27314222! ----STARTUP----2013-11-28T13:01:49.195777+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/28/2013 12:59' prior: 77634081! commentForCurrentUpdate ^ '12254 Minor fixes https://pharo.fogbugz.com/f/cases/12254 12263 Move Collections-Unordered deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12263 12261 Move Multilingual-TextConversion deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12261 12262 Move Polymorph-Widgets deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12262 12249 Useful collection extensions https://pharo.fogbugz.com/f/cases/12249'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/28/2013 12:59'! script258 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.265.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.207.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-MarcusDenker.980.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.243.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.77.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/28/2013 12:59'! update30603 "self new update30603" self withUpdateLog: '12254 Minor fixes https://pharo.fogbugz.com/f/cases/12254 12263 Move Collections-Unordered deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12263 12261 Move Multilingual-TextConversion deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12261 12262 Move Polymorph-Widgets deprecated methods to Deprecated30 package https://pharo.fogbugz.com/f/cases/12262 12249 Useful collection extensions https://pharo.fogbugz.com/f/cases/12249'. self loadTogether: self script258 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDialogWindow methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/27/2013 13:56'! initialize super initialize. self beResizeable! ! !Collection methodsFor: 'enumerating' stamp: 'GabrielOmarCotelli 11/26/2013 16:53'! detect: aBlock ifFound: foundBlock "Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock. If no element matches the criteria then do nothing. Always returns self to avoid misuse and a potential isNil check on the sender." self detect: aBlock ifFound: foundBlock ifNone: [ "Do nothing on purpose" ]! ! !Collection methodsFor: 'enumerating' stamp: 'GabrielOmarCotelli 11/26/2013 16:53'! detect: aBlock ifFound: foundBlock ifNone: exceptionBlock "Evaluate aBlock with each of the receiver's elements as the argument. If some element evaluates aBlock to true, then cull this element into foundBlock and answer the result of this evaluation. If none evaluate to true, then evaluate exceptionBlock." self do: [ :each | (aBlock value: each) ifTrue: [ ^ foundBlock cull: each ] ]. ^ exceptionBlock value ! ! !Collection methodsFor: 'enumerating' stamp: 'GabrielOmarCotelli 11/26/2013 17:15' prior: 19523396! detect: aBlock ifNone: exceptionBlock "Evaluate aBlock with each of the receiver's elements as the argument. Answer the first element for which aBlock evaluates to true. If none evaluate to true, then evaluate the argument, exceptionBlock." ^ self detect: aBlock ifFound: [ :element | element ] ifNone: exceptionBlock! ! !Set methodsFor: '*Deprecated30' stamp: 'CamilloBruni 7/3/2013 13:09' prior: 43579530! integrityCheck self deprecated: 'User #isHealthy' on: '7/3/2013 13:09' in: 'Pharo 3.0'. ^ self isHealthy! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 17:11'! testDetectIfFoundIfNoneWhenNobodyIsFound | wasFound | wasFound := self collectionWithoutNilElements detect: [ :each | each isNil ] ifFound: [ true ] ifNone: [ false ]. self deny: wasFound! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 17:11'! testDetectIfFoundIfNoneWhenSomethingIsFound | wasFound foundObject | foundObject := nil. wasFound := self collectionWithoutNilElements detect: [ :each | each notNil ] ifFound: [ :element | foundObject := element. true ] ifNone: [ false ]. self assert: wasFound; assert: (self collectionWithoutNilElements includes: foundObject)! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 17:10'! testDetectIfFoundIfNoneWhenSomethingIsFoundIgnoringTheFoundObject "The foundBlock can be a zero argument block ignoring the object found" | wasFound | wasFound := self collectionWithoutNilElements detect: [ :each | each notNil ] ifFound: [ true ] ifNone: [ false ]. self assert: wasFound! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 16:54'! testDetectIfFoundWhenNobodyIsFound | wasFound | wasFound := false. self collectionWithoutNilElements detect: [ :each | each isNil ] ifFound: [ wasFound := true ]. self deny: wasFound! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 16:54'! testDetectIfFoundWhenSomethingIsFound | wasFound foundObject | wasFound := false. foundObject := nil. self collectionWithoutNilElements detect: [ :each | each notNil ] ifFound: [ :element | foundObject := element. wasFound := true ]. self assert: wasFound; assert: (self collectionWithoutNilElements includes: foundObject) ! ! !CollectionRootTest methodsFor: 'tests - iterate' stamp: 'GabrielOmarCotelli 11/26/2013 17:09'! testDetectIfFoundWhenSomethingIsFoundIgnoringTheFoundObject "The foundBlock can be a zero argument block ignoring the object found" | wasFound | wasFound := false. self collectionWithoutNilElements detect: [ :each | each notNil ] ifFound: [ wasFound := true ]. self assert: wasFound! ! !SmalltalkImage methodsFor: '*Deprecated30' stamp: 'EstebanLorenzano 5/14/2013 09:43' prior: 37808253! theme self deprecated: 'You need to use Smalltalk ui theme' on: '10 May 2013' in: '3.0'. ^ Smalltalk ui theme! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:04' prior: 77594547! cancelled ^ window value ifNil: [ false ] ifNotNil: [ :w | w cancelled ]! ! !String methodsFor: '*Deprecated30' stamp: 'SvenVanCaekenberghe 10/27/2013 11:36' prior: 75829077! unescapePercents self deprecated: '#unescapePercents has been replaced with #urlDecoded' on: '20131027' in: '3.0'. ^ self urlDecoded! ! !String methodsFor: '*Deprecated30' stamp: 'SvenVanCaekenberghe 10/27/2013 11:37' prior: 75829336! unescapePercentsWithTextEncoding: encodingName self deprecated: '#unescapePercentsWithTextEncoding: has been replaced with ZnPercentEncoder' on: '20131027' in: '3.0'! ! "Collections-Abstract"! "Collections-Unordered"! "CollectionsTests"! "Deprecated30"! "Multilingual-TextConversion"! "Polymorph-Widgets"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-11-28T13:02:00.00978+01:00 Pharo.image priorSource: 27314418! ----STARTUP----2013-11-28T13:07:37.440272+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-28T13:07:37.61427+01:00 Pharo-30603.image priorSource: 27331680! ----STARTUP----2013-11-28T13:42:46.113843+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 11/28/2013 13:34' prior: 77646365! commentForCurrentUpdate ^ '12253 Move some class behavior on class side in MCSaveVersionXXX https://pharo.fogbugz.com/f/cases/12253 12257 Add a way to hide the orange corner in Text https://pharo.fogbugz.com/f/cases/12257 12258 Add Spec support for changes made in 12257 https://pharo.fogbugz.com/f/cases/12258 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 11/28/2013 13:35'! script259 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.43.mcz FileSystem-Tests-Core-MarcusDenker.64.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.78.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.600.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 11/28/2013 13:36'! update30604 "self new update30604" self withUpdateLog: '12253 Move some class behavior on class side in MCSaveVersionXXX https://pharo.fogbugz.com/f/cases/12253 12257 Add a way to hide the orange corner in Text https://pharo.fogbugz.com/f/cases/12257 12258 Add Spec support for changes made in 12257 https://pharo.fogbugz.com/f/cases/12258 '. self loadTogether: self script259 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TextModel commentStamp: '' prior: 76216614! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 69510743! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !AbstractMorphicAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:56'! changed ^ self widgetDo: [ :w | w changed ]! ! !MorphicTextAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/27/2013 14:59' prior: 69665838! defaultSpec ^ SpecLayout new type: #PluggableTextMorph; send: #color: withArguments: #(#(model color)); send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #on:text:accept:readSelection:menu: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted:); send: #enabled: withArguments: #(#(model enabled)); send: #askBeforeDiscardingEdits: withArguments: #(#(model askBeforeDiscardingEdits)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #autoAccept: withArguments: #(#(model autoAccept)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #registerScrollChanges: withArguments: #(scrollValueChanged:); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 23:20' prior: 77551584! accept self widgetDo:[ :w | w accept ]! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/27/2013 14:58'! askBeforeDiscardingEdits ^ self model askBeforeDiscardingEdits! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:58'! askBeforeDiscardingEdits: aBoolean self widgetDo: [ :w | w askBeforeDiscardingEdits: aBoolean ]! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/27/2013 14:30'! autoAccept ^ self model autoAccept! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/27/2013 14:54'! wantsVisualFeedback ^ self model wantsVisualFeedback! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:08'! triggerCancelAction self widget ifNotNil: [:w | w toolbar triggerCancelAction ]! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 15:11' prior: 76562218! initializePresenter super initializePresenter. cancelButton action: [ self performCancelAction ]! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:11'! performCancelAction ^ cancelAction value value == false ifFalse: [ cancelled value: true. owner ifNil: [ self delete ] ifNotNil: [ owner delete ] ]! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:11'! triggerCancelAction self performCancelAction! ! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 11/27/2013 15:11'! escapePressed self toolbar triggerCancelAction! ! !TextModel commentStamp: '' prior: 77675319! I handle basic multi-line text. Try: "self example". My main purpose is to handle source code (I have editing shortcuts support)! !TextInputFieldModel commentStamp: '' prior: 77675519! I handle one line of text. I handle non source code text, that's why editing shortcuts are not supported (cmd+p just print a p by example)! !TextInputFieldModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 14:28' prior: 69515875! initialize super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [:txt | self widget ifNotNil: [:w | w ghostText: txt ]]. acceptOnCR whenChangedDo: [:bool | self widget ifNotNil: [:w | w acceptOnCR: bool ]]. isEncrypted whenChangedDo: [:bool | self widget ifNotNil: [:w | w encrypted: bool ]].! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:00'! askBeforeDiscardingEdits ^ askBeforeDiscardingEdits value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:01'! askBeforeDiscardingEdits: aBoolean askBeforeDiscardingEdits value: aBoolean! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:26'! autoAccept "Return true if the text is accepted after ech keystroke" ^ autoAccept value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:26'! autoAccept: aBoolean "Set if the text is accepted after each keystroke or not" autoAccept value: aBoolean! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 14:57' prior: 76217162! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ 1 to: 0 ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. hasUnacceptedEdits := false asValueHolder. selection := (1 to: 0) asValueHolder. scrollValue := (0@0) asValueHolder. menuHolder := [ :menu :shifted | shifted ifTrue: [ SmalltalkEditor shiftedYellowButtonMenu ] ifFalse: [ SmalltalkEditor yellowButtonMenu ] ] asValueHolder. autoAccept := false asValueHolder. wantsVisualFeedback := true asValueHolder. askBeforeDiscardingEdits := true asValueHolder. self registerEvents. self registerEventsForShout! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 14:57' prior: 69527128! registerEvents textHolder whenChangedDo: [ self changed: #getText ]. readSelectionHolder whenChangedDo: [ self changed: #readSelection ]. enabledHolder whenChangedDo: [ :bool | self changed: #enabled: with: { bool } ]. hasUnacceptedEdits whenChangedDo: [ :bool | self changed: #hasUnacceptedEdits: with: { bool } ]. selection whenChangedDo: [:block | self changed: #setSelectionFromModel: with: { block value } ]. scrollValue whenChangedDo: [ :newPosition | self changed: #setScrollValue: with: { newPosition } ]. autoAccept whenChangedDo: [:bool | self changed: #autoAccept: with: { bool } ]. wantsVisualFeedback whenChangedDo: [ :bool | self changed: #changed with: #() ]. askBeforeDiscardingEdits whenChangedDo: [ :bool | self changed: #askBeforeDiscardingEdits: with: { bool } ].! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:56' prior: 77562657! selectAll self changed: #selectAll with: #()! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:52'! wantsVisualFeedback ^ wantsVisualFeedback value! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 14:52'! wantsVisualFeedback: aBoolean wantsVisualFeedback value: aBoolean! ! !TextModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 11/27/2013 14:26'! whenAutoAcceptChanged: aBlock "aBlock will be performed when autoAccept changed" autoAccept whenChangedDo: aBlock! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:05'! triggerCancelAction "do nothing (ensure polymorphism with DialogWindow)"! ! !UITheme methodsFor: 'border-styles' stamp: 'BenjaminVanRyseghem 11/27/2013 14:51' prior: 36739616! drawTextAdornmentsFor: aPluggableTextMorph on: aCanvas "Indicate edit status for the given morph." (aPluggableTextMorph hasEditingConflicts or: [aPluggableTextMorph hasValidText not]) ifTrue: [^self drawTextAdornmentFor: aPluggableTextMorph color: Color red on: aCanvas]. aPluggableTextMorph hasUnacceptedEdits ifTrue: [aPluggableTextMorph model wantsDiffFeedback ifTrue: [^self drawTextAdornmentFor: aPluggableTextMorph color: Color yellow darker on: aCanvas] ifFalse: [ aPluggableTextMorph model wantsVisualFeedback ifTrue: [ ^self drawTextAdornmentFor: aPluggableTextMorph color: Color orange on: aCanvas] ] ]. aPluggableTextMorph model wantsDiffFeedback ifTrue: [self drawTextAdornmentFor: aPluggableTextMorph color: Color green on: aCanvas]! ! !DialogWindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:05'! triggerCancelAction self changed: #triggerCancelAction with: #()! ! !MCSaveVersionDialog class methodsFor: 'history' stamp: 'BenjaminVanRyseghem 11/27/2013 12:54'! addAsLastLogMessage: aString ((self previousMessages size > 0) and: [self previousMessages first = aString]) ifTrue: [ ^ self ]. self previousMessages addFirst: aString. (self previousMessages size > self maxLogMessageHistory) ifTrue: [self previousMessages removeLast]! ! !MCSaveVersionDialog class methodsFor: 'history' stamp: 'BenjaminVanRyseghem 11/27/2013 12:53'! maxLogMessageHistory ^ 15! ! !MCSaveVersionDialog class methodsFor: 'history' stamp: 'BenjaminVanRyseghem 11/24/2013 14:40' prior: 77475059! previousMessages ^ PreviousMessages ifNil: [ PreviousMessages := OrderedCollection new]! ! !MCSaveVersionDialog methodsFor: 'log message history' stamp: 'BenjaminVanRyseghem 11/27/2013 12:54' prior: 24963771! addAsLastLogMessage: aString self class addAsLastLogMessage: aString! ! !MCSaveVersionDialog methodsFor: 'log message history' stamp: 'BenjaminVanRyseghem 11/27/2013 12:53' prior: 24964138! maxLogMessageHistory ^ self maxLogMessageHistory! ! !Object methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 11/27/2013 14:52'! wantsVisualFeedback ^ true! ! TextInputFieldModel removeSelector: #whenAutoAcceptChanged:! TextInputFieldModel removeSelector: #autoAccept:! TextInputFieldModel removeSelector: #autoAccept! MorphicTextInputFieldAdapter removeSelector: #autoAccept! "MonticelloGUI"! "Morphic-Base"! "Polymorph-Widgets"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-28T13:42:58.613841+01:00 Pharo.image priorSource: 27331876! ----STARTUP----2013-11-28T13:48:35.143722+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-28T13:48:35.321722+01:00 Pharo-30604.image priorSource: 27354073! ----STARTUP----2013-11-28T16:39:46.284876+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/28/2013 16:37' prior: 77663826! commentForCurrentUpdate ^ '12259 FileSystem memory reads/writes using a binary stream by default https://pharo.fogbugz.com/f/cases/12259 12265 Copying class does not copy comment https://pharo.fogbugz.com/f/cases/12265 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/28/2013 16:37'! script260 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.890.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.600.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.286.mcz RPackage-SystemIntegration-MarcusDenker.188.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.78.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/28/2013 16:37'! update30605 "self new update30605" self withUpdateLog: '12259 FileSystem memory reads/writes using a binary stream by default https://pharo.fogbugz.com/f/cases/12259 12265 Copying class does not copy comment https://pharo.fogbugz.com/f/cases/12265 '. self loadTogether: self script260 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MemoryHandle methodsFor: 'stream-protocol' stamp: 'DamienCassou 11/27/2013 17:35' prior: 25432613! readStream "Return a readstream on my contents. Using myself as target collection allows to share the internal bytearray between multiple streams." ^ entry readStream! ! !FileSystemTest methodsFor: 'tests-streams' stamp: 'DamienCassou 11/27/2013 17:44'! testReadingAfterWriting | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self deny: reference exists. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. stream := reference readStream. self assert: stream contents equals: 'griffle'. stream close! ! !MemoryFileSystemFile methodsFor: 'stream-protocol' stamp: 'DamienCassou 11/27/2013 17:44' prior: 25429380! readStream ^ ReadStream on: bytes asString from: 1 to: size! ! !TClass methodsFor: 'copying' stamp: 'CamilleTeruel 11/28/2013 15:12' prior: 49553815! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. class comment: self comment stamp: self organization commentStamp. ^ class! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. class comment: self comment stamp: self organization commentStamp. ^ class! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. class comment: self comment stamp: self organization commentStamp. ^ class! ! "FileSystem-Memory"! "FileSystem-Tests-Core"! "Traits"! ----End fileIn----! ----QUIT----2013-11-28T16:39:52.860876+01:00 Pharo.image priorSource: 27354270! ----STARTUP----2013-11-28T16:45:29.911553+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-28T16:45:30.079389+01:00 Pharo-30605.image priorSource: 27368881! ----STARTUP----2013-11-28T17:16:45.070705+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 11/28/2013 17:12' prior: 77686217! commentForCurrentUpdate ^ '12209 RPackage initialization dependent on Monticello https://pharo.fogbugz.com/f/cases/12209 12264 Komitter https://pharo.fogbugz.com/f/cases/12264 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 11/28/2013 17:13'! script261 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-EstebanLorenzano.602.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.289.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.32.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-EstebanLorenzano.78.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 11/28/2013 17:13'! update30606 "self new update30606" self withUpdateLog: '12209 RPackage initialization dependent on Monticello https://pharo.fogbugz.com/f/cases/12209 12264 Komitter https://pharo.fogbugz.com/f/cases/12264 '. self loadTogether: self script261 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LoadingMorph commentStamp: '' prior: 0! I am a special iamge morph used to be displayed as an icon for loading! !KomitObject commentStamp: '' prior: 0! I am an abstract super class keeping track of the state of the object (added/modified/removed)! !KomitClass commentStamp: '' prior: 0! I am encapsulating a class and the operations which has been append to it. I implement a flyweight DP! !KomitDefinition commentStamp: '' prior: 0! Iam a komit object representing a change in a class definition! !KomitMethod commentStamp: '' prior: 0! Iam a komit object representing a change in a method! !KomitPackage commentStamp: '' prior: 0! I am a simple object used to cache the patch in order to save a bit of time! !KomitPatch commentStamp: '' prior: 0! I am a simple wrapper for patches! !KomitRemote commentStamp: '' prior: 0! I am an abstract class representing a remote repository! !KomitGemstoneRemote commentStamp: '' prior: 0! I encapsulate a gemstone repository! !KomitNewSlice commentStamp: '' prior: 0! I am a dummy object used to commit code in a new slice! !KomitSmalltalkhubRemote commentStamp: '' prior: 0! I encapsulate a repository stored on smalltalkhub! !KomitSqueakSourceRemote commentStamp: '' prior: 0! I encapsulate a repository stored on squeaksource! !KomitStagingArea commentStamp: '' prior: 0! I encapsulate the context just before a commit.! !KomitTreeBuilder commentStamp: '' prior: 0! I am builder class used to generate the tree nodes for a package or for all the dirty packages! !KomitableObject commentStamp: '' prior: 0! I represent any commitable object, mainly a simple commit or a slice! !Komit commentStamp: '' prior: 0! I am a representation of a commit. I am abstracted from Monticello to be able to be reused with other frameworks! !Slice commentStamp: '' prior: 0! I am a Slice representation. I am used only for double disptaching the way to submit me! !Komitter commentStamp: '' prior: 0! I am the entry point of this project. A classic inkoation is | s k | s := KomitStagingArea forDirtyPackages. k := Komitter new. k stagingArea: s. k open. k lastCommit ! !LoadingMorphState commentStamp: '' prior: 0! I am the abstract super class of the loading morph state. They are used as state in a state machine for the order of the icons in the rotating animation! !BigCogInitialState commentStamp: '' prior: 0! I am the initial state! !BigCogState2 commentStamp: '' prior: 0! Another state in the loading animation! !BigCogState3 commentStamp: '' prior: 0! The last state of the loading animation! !SmallCogInitialState commentStamp: '' prior: 0! Initial state of a small cog turning animation! !SmallCogState2 commentStamp: '' prior: 0! Second state of a small cog turning animation! !SmallCogState3 commentStamp: '' prior: 0! Last state of a small cog turning animation! !LoadingThenOkState commentStamp: '' prior: 0! I am an abstract class representing the state of the LoadingThenOk widget the different states are: ok, error, loading. I must define an image used to render the state! !ErrorState commentStamp: '' prior: 0! I am the state when there was an error during the loading! !LoadingState commentStamp: '' prior: 0! I am the state used while loading! !OkState commentStamp: '' prior: 0! I am the state showing everything is ok! !MCKomitSubmitter commentStamp: '' prior: 0! I am a class dedicated to the transformation of a Komit object into a MCCommit and its submission! !KomitLoadingNode commentStamp: '' prior: 0! I am a special node diaplyed when the retreiving of information is going on! !KomitNode commentStamp: '' prior: 0! I am an abstract class representing a node in the tree! !KomitClassNode commentStamp: '' prior: 0! I am a node in the Komit tree representing a class! !KomitLeaf commentStamp: '' prior: 0! I am an abstract class for tree leaves! !KomitDefinitionNode commentStamp: '' prior: 0! I am a node wrapping a KomitDefinition! !KomitMethodNode commentStamp: '' prior: 0! I am a node in the Komit tree representing a method! !KomitPackageNode commentStamp: '' prior: 0! I am a node in the Komit tree representing a package! !KomitSliceUI commentStamp: '' prior: 0! I am a UI used to retrieve a Slice title using its issue number! !KomitterUI commentStamp: '' prior: 0! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !LoadingThenOk commentStamp: '' prior: 0! Small widget displaying a small cog turning while loading, then a ok tick when loading is done! !TreeWithLoading commentStamp: '' prior: 0! Wrap a tree with a loading page! !MCOrganizationDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/22/2013 16:42'! addOperation: aMCModification on: aKOClass ^ aKOClass addOrganizationDefinition: aMCModification! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 15:28'! overlayAddIconContents "Private - Method generated" ^ 'R0lGODlhCwAKAKIAAD8/X////19fXwAAAP///wAAAAAAAAAAACH5BAEAAAQALAAAAAALAAoA AAMkSLHMpALIGV4AQoQ8qsIa511N0FngJpxfprLXIMvAWDpPrj8JADs='! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 15:29'! overlayModificationIconContents "Private - Method generated" ^ 'R0lGODlhCwAKAKIAAD8/X////7+/v5+fn4CAgF9fXwAAAP///yH5BAEAAAcALAAAAAALAAoA AAMpeLHMpwXIGV4A8RZTFR7BsHUXEXAEZwHCYAyC6jUnCRg4DpC08/zARwIAOw=='! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 15:29'! overlayRemoveIconContents "Private - Method generated" ^ 'R0lGODlhCwAKAKIAAD8/X////19fXwAAAP///wAAAAAAAAAAACH5BAEAAAQALAAAAAALAAoA AAMjSLHMpALIGV4AIudRFdYCZwFNIHpg2F3peQ0wTFql89z4kwAAOw=='! ! !PackageTreeModel methodsFor: 'private' stamp: 'EstebanLorenzano 11/27/2013 13:19' prior: 77461074! packagesAsNodes ^ ((self model packages select: [ :each | self packageMatchPattern: each ] thenCollect: [ :each | each asNautilusNodeWithModel: self ]) sorted: [ :a :b | a name < b name ]) ! ! !MCGemstoneRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/23/2013 13:24'! koRemote ^ KomitGemstoneRemote new remote: self; yourself! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 11/27/2013 14:29'! restrictedBrowsePackages: selections ^ super restrictedBrowsePackages: (selections collect: [ :each | each asNautilusSelection item ])! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:10'! isMethodPatch ^ definition isMethodDefinition! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/24/2013 21:38'! koClass | klass name | name := definition className. name ifNil: [ ^ nil ]. klass := KomitClass trackedClass: name. definition addOperation: self on: klass. self isClassPatch ifTrue: [ klass added: true ]. ^ klass! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 14:42'! koDefinition ^ (KomitDefinition definition: self definition) operation: self; added: true; yourself! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:19'! koDestinationText ^ definition koDestinationText! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/25/2013 18:21'! koMethod ^ (KomitMethod method: self definition) operation: self; added: true; yourself! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:21'! koSourceText ^ ''! ! !MCAddition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:33'! selector ^ definition selector! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/27/2013 11:33'! classTags ^ self item classTags! ! !MCMethodDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:59'! addOperation: aMCAddition on: aKOClass aKOClass addMethodDefinition: aMCAddition! ! !MCRepositoryGroup methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:21'! remotes ^ self repositories select: [ :each | each isRemote ]! ! !RPackage methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 11/27/2013 13:18'! asNautilusNodeWithModel: anObject ^ PackageTreePackageNodeModel with: self model: anObject.! ! !RPackage methodsFor: '*Monticello-RPackage' stamp: 'BenjaminVanRyseghem 3/30/2011 12:41' prior: 31809340! isDirty | modifiedPackages packages | modifiedPackages := MCWorkingCopy allManagers select: [ :each | each modified ]. packages := modifiedPackages collect: [:each | each package name]. ^ packages includes: self name.! ! !PackageTreeTagSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/27/2013 11:34'! classTags ^ #()! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/20/2013 18:10'! baseSnapshot ^ self workingCopy baseSnapshot! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/24/2013 19:42'! koPackage ^ KomitPackage package: self! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/26/2013 12:58'! patch | snapshot base patch | snapshot := self silentSnapshot. base := self baseSnapshot. patch := base ifNil: [ MCPatch new initializeWithTarget: self snapshot ] ifNotNil: [ MCPatch new silentInitializeWithBase: base target: snapshot ]. ^ KomitPatch base: base patch: patch! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:20'! remotes ^ self workingCopy remotes! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/24/2013 20:25'! silentSnapshot | packageInfo definitions categories | packageInfo := self packageSet. definitions := OrderedCollection new. categories := packageInfo categoryNames asArray. categories isEmpty ifFalse: [ definitions add: (MCOrganizationDefinition categories: categories) ]. packageInfo methods do: [:ea | definitions add: ea asMCMethodDefinition]. packageInfo overriddenMethods do: [:ea | definitions add: (packageInfo changeRecordForOverriddenMethod: ea) asMCMethodDefinition]. packageInfo definedClasses do: [:ea | definitions addAll: ea classDefinitions]. (packageInfo respondsTo: #hasPreamble) ifTrue: [ packageInfo hasPreamble ifTrue: [definitions add: (MCPreambleDefinition from: packageInfo)]. packageInfo hasPostscript ifTrue: [definitions add: (MCPostscriptDefinition from: packageInfo)]. packageInfo hasPreambleOfRemoval ifTrue: [definitions add: (MCRemovalPreambleDefinition from: packageInfo)]. packageInfo hasPostscriptOfRemoval ifTrue: [definitions add: (MCRemovalPostscriptDefinition from: packageInfo)]]. ^ MCSnapshot fromDefinitions: definitions! ! !MCVersion class methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/26/2013 14:39'! silentlyPackage: aPackage info: aVersionInfo snapshot: aSnapshot dependencies: aCollection ^ self new silentlyInitializeWithPackage: aPackage info: aVersionInfo snapshot: aSnapshot dependencies: aCollection! ! !MCVersion methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/26/2013 14:39'! silentlyInitializeWithPackage: aPackage info: aVersionInfo snapshot: aSnapshot dependencies: aCollection package := aPackage. info := aVersionInfo. snapshot := aSnapshot. dependencies := aCollection! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 11/24/2013 20:30'! baseSnapshot ^ self ancestors ifEmpty: [ nil ] ifNotEmpty: [ :ancestors | self findSnapshotWithVersionInfo: ancestors first ]! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 11/22/2013 16:21'! remotes ^ self repositoryGroup remotes! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 11/27/2013 16:58'! silentlyNewVersionWithName: nameString message: messageString in: aRepository | info deps | info := ancestry infoWithName: nameString message: messageString. ancestry := MCWorkingAncestry new addAncestor: info. self modified: true. deps := self collectDependenciesWithMessage: messageString in: aRepository. (self repositoryGroup includes: aRepository) ifFalse: [ self repositoryGroup addRepository: aRepository ]. ^ MCVersion silentlyPackage: package info: info snapshot: package snapshot dependencies: deps! ! !MCSliceInfo methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/26/2013 21:12'! makeKomitSlice | name issue workingCopy | issue := self usableIssueNumber. issue isEmptyOrNil ifTrue: [^ nil]. name := self usableIssueSummary. name isEmptyOrNil ifTrue: [^ nil]. name := 'SLICE-Issue-' , issue asString , '-' , name. PackageInfo registerPackageName: name. workingCopy := MCWorkingCopy forPackage: (MCPackage new name: name). self includedPackages do: [:required | workingCopy requirePackage: required ]. ^ workingCopy! ! !RPackageOrganizer class methodsFor: '*Monticello-RPackage' stamp: 'StephaneDucasse 6/2/2012 19:39' prior: 32023499! allManagers ^ MCWorkingCopy allManagers! ! !RPackageOrganizer class methodsFor: 'not used' stamp: 'EstebanLorenzano 10/16/2013 17:38' prior: 74364796! fillUp "self fillUp" self default initializeFromSystemStartingFromPackageOrganizer. "initializing from system might have generated some new packageInfo (because Package Inof lazily register system categories). Therefore, we should iterate a second time over all package infos:" self default initializeFromSystemStartingFromPackageOrganizer. ! ! !RPackageOrganizer class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 11/27/2013 11:02' prior: 74365265! initialize "You need manually filll the data: self initializeDefaultFromMC. is the usual way (but is not in this package by default, it depends on MC)"! ! !RPackageOrganizer class methodsFor: 'not used' stamp: 'EstebanLorenzano 10/16/2013 17:37' prior: 74365430! initializeDefault "self initializeDefault" default ifNotNil: [ default unregister ]. default := nil. self setDefault: self new. self fillUp.! ! !RPackageOrganizer class methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 11/27/2013 11:02' prior: 74365699! initializeDefaultFromMC "self initializeDefaultFromMC" self setDefault: self new initializeFromMC.! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'StephaneDucasse 6/2/2012 19:39' prior: 31986247! allManagers ^ self class allManagers ! ! !RPackageOrganizer methodsFor: 'system compatibility' stamp: 'EstebanLorenzano 11/27/2013 12:33' prior: 31996721! category: categoryName matches: prefix | prefixSize catSize | categoryName ifNil: [ ^false ]. catSize := categoryName size. prefixSize := prefix size. catSize < prefixSize ifTrue: [ ^false ]. (categoryName findString: prefix startingAt: 1 caseSensitive: false) = 1 ifFalse: [ ^false ]. ^(categoryName at: prefix size + 1 ifAbsent: [ ^true ]) = $-! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 10/8/2013 18:40' prior: 74366761! initializeFromMC self allManagers do: [ :workingCopy | self basicRegisterPackage: (RPackage named: workingCopy packageName) ] displayingProgress: 'Importing monticello packages'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCFor: eachBehavior ] displayingProgress: 'Importing behaviors'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCMethodsFor: eachBehavior. self initializeFromMCMethodsFor: eachBehavior class ] displayingProgress: 'Importing methods'. Smalltalk allClassesAndTraits do: [ :eachBehavior | eachBehavior organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior protocol: eachProtocol ]. eachBehavior class organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior class protocol: eachProtocol ] ] displayingProgress: 'Importing extensions'. ! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 10/16/2013 12:49' prior: 74367836! initializeFromMCExtensionsFor: aBehavior protocol: aProtocol | package protocolName | protocolName := (aProtocol name allButFirst) trimBoth. package := self packageMatchingExtensionName: protocolName. package ifNil: [ package := self basicRegisterPackage: (RPackage named: protocolName) ]. self registerExtendingPackage: package forClass: aBehavior. (aProtocol methods select: [ :eachSelector | (aBehavior >> eachSelector) origin = aBehavior ]) do: [ :eachSelector | package addMethod: aBehavior >> eachSelector ]! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 10/16/2013 15:58' prior: 74368460! initializeFromMCFor: aBehavior | package | package := self packageMatchingExtensionName: aBehavior category. package ifNil: [ "It should not happen. But actually could happen that one class is in a SystemCategory and not in a MC" package := self basicRegisterPackage: (RPackage named: aBehavior category) ]. package addClassDefinition: aBehavior. package addClassDefinition: aBehavior toClassTag: aBehavior category asSymbol. self registerPackage: package forClass: aBehavior.! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 10/16/2013 12:48' prior: 74369057! initializeFromMCMethodsFor: aBehavior | package | package := aBehavior package. (aBehavior organization protocols select: [ :each | each isExtensionProtocol not ]) do: [ :eachProtocol | (eachProtocol methods select: [ :eachSelector | (aBehavior >> eachSelector) origin = aBehavior ]) do: [ :eachSelector | package addMethod: (aBehavior >> eachSelector) ] ]! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 11/27/2013 15:14' prior: 31997511! isDefinedAsPackageOrSubPackageInMC: aSymbol "a category has been added. " ^ self allManagers anySatisfy: [ :each | self category: each packageName asSymbol matches: aSymbol ]! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 11/27/2013 15:21' prior: 68448332! registerInterestToAnnouncer: anAnnouncer "There should be only one" anAnnouncer unsubscribe: self. anAnnouncer weak on: CategoryAdded send: #systemCategoryAddedActionFrom: to: self; on: CategoryRemoved send: #systemCategoryRemovedActionFrom: to: self; on: CategoryRenamed send: #systemCategoryRenamedActionFrom: to: self; on: ClassAdded send: #systemClassAddedActionFrom: to: self; on: ClassRecategorized send: #systemClassRecategorizedActionFrom: to: self; on: ClassRemoved send: #systemClassRemovedActionFrom: to: self; on: ClassRenamed send: #systemClassRenamedActionFrom: to: self; on: ClassReorganized send: #systemClassReorganizedActionFrom: to: self; on: MethodAdded send: #systemMethodAddedActionFrom: to: self; on: MethodModified send: #systemMethodModifiedActionFrom: to: self; on: MethodRecategorized send: #systemMethodRecategorizedActionFrom: to: self; on: MethodRemoved send: #systemMethodRemovedActionFrom: to: self; on: ProtocolAdded send: #systemProtocolAddedActionFrom: to: self; on: ProtocolRemoved send: #systemProtocolRemovedActionFrom: to: self. self flag: #hack. "for decoupling MC" #MCWorkingCopy asClassIfPresent: [ anAnnouncer weak on: (Smalltalk globals at: #MCWorkingCopyCreated) send: #updateAfterNewMCPackageRegistred: to: self; on: (Smalltalk globals at: #MCWorkingCopyDeleted) send: #updateAfterNewMCPackageUnregistred: to: self ].! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 11/27/2013 15:21' prior: 31969704! systemCategoryRemovedActionFrom: ann | rPackage categoryNameSymbol managers | categoryNameSymbol := ann categoryName asSymbol. self flag: #hack. "for decoupling MC" managers := (self respondsTo: #allManagers) ifTrue: [ self perform: #allManagers ] ifFalse: [ #() ]. "here we check that a corresponding MCPackage does not still exist. In this case we should keep the RPackage" managers detect: [ :each | self category: each packageName matches: categoryNameSymbol asString] ifNone: [ rPackage := packages at: categoryNameSymbol ifAbsent: [^ self]. "if no MCPackage exist, we unregister the package from the RPackageOrganizer" self basicUnregisterPackageNamed: categoryNameSymbol ].! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 11/27/2013 15:17' prior: 32001668! updateAfterNewMCPackageRegistred: anAnnouncement "User create a new package, MCWorkingCopy propagates changes. We react accordingly." | name | name := anAnnouncement package name. (self packageExactlyMatchingExtensionName: name) ifNil: [ self ensureExistAndRegisterPackageNamed: name ]! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 11/27/2013 15:17' prior: 32002692! updateAfterNewMCPackageUnregistred: anAnnouncement ! ! !MCDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:11'! koDestinationText ^ self source! ! !MCDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:17'! koSourceText ^ self source! ! !MCHttpRepository class methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:27'! pharoLocations "Answer the locations for both pharo and pharo inbox repositories. No commit should actually be pushed directly there" ^ #('http://smalltalkhub.com/mc/Pharo/Pharo30/main' 'http://smalltalkhub.com/mc/Pharo/Pharo30/main/' 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main' 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main/')! ! !MCHttpRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:24'! isPrivatePharoRepository ^ self class pharoLocations includes: self location! ! !MCHttpRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:28'! isRemote ^ self isPrivatePharoRepository not! ! !MCHttpRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/23/2013 12:36'! koRemote ^ self subclassResponsibility! ! !MCSqueaksourceRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/23/2013 13:17'! koRemote ^ KomitSqueakSourceRemote new remote: self; yourself! ! !MCRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:17'! isRemote ^ false! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:10'! isMethodPatch ^ obsoletion isMethodDefinition! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/24/2013 21:38'! koClass | name klass | name := obsoletion className. name ifNil: [ ^ nil ]. klass := KomitClass trackedClass: name. obsoletion addOperation: self on: klass. self isClassPatch ifTrue: [ klass modified: true ]. ^ klass! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 14:43'! koDefinition ^ (KomitDefinition definition: self definition) operation: self; modified: true; yourself! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:11'! koDestinationText ^ modification koDestinationText! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/25/2013 18:20'! koMethod ^ (KomitMethod method: self definition) operation: self; modified: true; yourself! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:17'! koSourceText ^ obsoletion koSourceText! ! !MCModification methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:33'! selector ^ obsoletion selector! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:10'! isMethodPatch ^ definition isMethodDefinition! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/24/2013 21:38'! koClass | klass name | name := definition className. name ifNil: [ ^ nil ]. klass := KomitClass trackedClass: name. definition addOperation: self on: klass. self isClassPatch ifTrue: [ klass removed: true ]. ^ klass! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 14:43'! koDefinition ^ (KomitDefinition definition: self definition) operation: self; removed: true; yourself! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:06'! koDestinationText ^ ''! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/25/2013 18:20'! koMethod ^ (KomitMethod method: self definition) operation: self; removed: true; yourself! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:04'! koSourceText ^ definition koSourceText ! ! !MCRemoval methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:34'! selector ^ definition selector! ! !LoadingMorph commentStamp: '' prior: 77712291! I am a special iamge morph used to be displayed as an icon for loading! !LoadingMorph methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:31'! applyState: aState currentState = aState ifTrue: [ ^ self ]. currentState := aState. self image: aState image! ! !LoadingMorph methodsFor: 'stepping and presenter' stamp: 'BenjaminVanRyseghem 11/24/2013 20:58'! step self isStepping ifFalse: [ ^ self ]. self applyState: currentState nextState.! ! !LoadingMorph methodsFor: 'stepping' stamp: 'BenjaminVanRyseghem 11/26/2013 22:29'! stepTime ^ currentState stepTime! ! !MCPatchOperation methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:10'! isMethodPatch ^ self subclassResponsibility! ! !MCPatchOperation methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 14:28'! koClass ^ self subclassResponsibility! ! !MCPatchOperation methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 16:34'! koDefinition ^ self subclassResponsibility! ! !MCPatchOperation methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 15:44'! koMethod ^ self subclassResponsibility! ! !RPackageTag methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 11/27/2013 13:19'! asNautilusNodeWithModel: anObject ^ PackageTreeTagNodeModel with: self model: anObject.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/27/2013 14:29'! extensionClasses ^ #()! ! !MCFtpRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/22/2013 16:18'! isRemote ^ true! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 11/27/2013 14:05' prior: 17325447! restrictedBrowsePackage self selectedPackages ifEmpty: [ ^ self ] ifNotEmpty: [ :packages | ^ self restrictedBrowsePackages: packages ]! ! !MCSmalltalkhubRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/23/2013 12:43'! koRemote ^ KomitSmalltalkhubRemote new remote: self; yourself! ! !MCPatch methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/21/2013 14:09'! initializeWithTarget: targetSnapshot | target | operations := OrderedCollection new. target := MCDefinitionIndex definitions: targetSnapshot definitions. target definitions do: [ :definition | operations add: (MCAddition of: definition) ].! ! !MCPatch methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/24/2013 20:27'! silentInitializeWithBase: baseSnapshot target: targetSnapshot | base target | operations := OrderedCollection new. base := MCDefinitionIndex definitions: baseSnapshot definitions. target := MCDefinitionIndex definitions: targetSnapshot definitions. target definitions do: [ :t | base definitionLike: t ifPresent: [:b | (b isSameRevisionAs: t) ifFalse: [operations add: (MCModification of: b to: t)]] ifAbsent: [operations add: (MCAddition of: t)] ]. base definitions do: [:b | target definitionLike: b ifPresent: [:t] ifAbsent: [operations add: (MCRemoval of: b)]] ! ! !KomitObject commentStamp: '' prior: 77712415! I am an abstract super class keeping track of the state of the object (added/modified/removed)! !KomitClass commentStamp: '' prior: 77712562! I am encapsulating a class and the operations which has been append to it. I implement a flyweight DP! !KomitClass class methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/27/2013 15:17'! initialize classes := Dictionary new.! ! !KomitClass class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/21/2013 14:48'! new self shouldNotImplement! ! !KomitClass class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 15:35'! resetCache classes removeAll! ! !KomitClass class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/21/2013 14:48'! trackedClass: trackedClass ^ classes at: trackedClass name ifAbsentPut: [ super new trackedClass: trackedClass; yourself ]! ! !KomitClass methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:25'! <= aKomitObject ^ self class name <= aKomitObject class name! ! !KomitClass methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:58'! addClassDefinition: aMCRemoval self definition: aMCRemoval! ! !KomitClass methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:59'! addMethodDefinition: aMCAddition self addOperation: aMCAddition! ! !KomitClass methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/21/2013 14:43'! addOperation: anOperation operations add: anOperation! ! !KomitClass methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/22/2013 16:43'! addOrganizationDefinition: aMCModification self addOperation: aMCModification! ! !KomitClass methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:04'! definition ^ definition! ! !KomitClass methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 21:58'! definition: aMCRemoval definition := aMCRemoval! ! !KomitClass methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 21:41'! definitions ^ definitions ifNil: [ definitions := (self operations select: [ :each | each isClassPatch ] thenCollect: [ :each | each koDefinition ]) sorted ]! ! !KomitClass methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:51'! flush super flush. definition := nil. operations removeAll. methods ifNotNil: [ :m | m do: [ :e | e flush ] ]. methods := nil. definitions ifNotNil: [ :d | d do: [ :e | e flush ] ]. definitions := nil! ! !KomitClass methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/21/2013 20:55'! initialize super initialize. operations := Set new! ! !KomitClass methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:36'! isClass ^ true! ! !KomitClass methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:05'! koDestinationText ^ self isDirty ifTrue: [ self definition koDestinationText ] ifFalse: [ '' ]! ! !KomitClass methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 10:21'! koSourceText ^ self isDirty ifFalse: [ 'No changes' ] ifTrue: [ self definition koSourceText ]! ! !KomitClass methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 21:41'! methods ^ methods ifNil: [ methods := (self operations select: [ :each | each isMethodPatch ] thenCollect: [ :each | each koMethod ]) sorted ]! ! !KomitClass methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 22:03'! operations ^ (definition ifNil: [ operations ] ifNotNil: [ {definition}, operations asOrderedCollection ]) asOrderedCollection! ! !KomitClass methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:57'! printOn: aStream super printOn: aStream. aStream << '[ '. self trackedClass printOn: aStream. aStream << ' ]'.! ! !KomitClass methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:23'! trackedClass ^ trackedClass! ! !KomitClass methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:23'! trackedClass: anObject trackedClass := anObject! ! !KomitDefinition commentStamp: '' prior: 77712722! Iam a komit object representing a change in a class definition! !KomitDefinition class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/26/2013 14:28'! definition: definition ^ definitions at: definition className ifAbsentPut: [ super new definition: definition; yourself ]! ! !KomitDefinition class methodsFor: 'class initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 14:29'! initialize definitions := Dictionary new! ! !KomitDefinition class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/26/2013 14:29'! new self shouldNotImplement! ! !KomitDefinition methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:26'! <= aKomitObject ^ self definition <= aKomitObject definition! ! !KomitDefinition methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 16:33'! definition ^ definition! ! !KomitDefinition methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 16:32'! definition: anObject definition := anObject! ! !KomitDefinition methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/23/2013 21:36'! isCommitable ^ true! ! !KomitDefinition methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:36'! isDefinition ^ true! ! !KomitDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:07'! koDestinationText ^ self operation koDestinationText! ! !KomitDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:06'! koSourceText ^ self operation koSourceText! ! !KomitDefinition methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 21:09'! operation ^ operation! ! !KomitDefinition methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:50'! operation: anOperation operation := anOperation! ! !KomitMethod commentStamp: '' prior: 77712838! Iam a komit object representing a change in a method! !KomitMethod class methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/25/2013 18:19'! initialize methods := Dictionary new! ! !KomitMethod class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 18:18'! method: aMethod ^ methods at: aMethod actualClass name, '>>', aMethod selector ifAbsentPut: [ super new method: aMethod; yourself ]! ! !KomitMethod class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 18:18'! new self shouldNotImplement! ! !KomitMethod methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:26'! <= aKomitObject ^ self method selector <= aKomitObject method selector! ! !KomitMethod methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/23/2013 21:36'! isCommitable ^ true! ! !KomitMethod methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:36'! isMethod ^ true! ! !KomitMethod methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:10'! koDestinationText ^ operation koDestinationText! ! !KomitMethod methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:16'! koSourceText ^ self operation koSourceText! ! !KomitMethod methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! method ^ method! ! !KomitMethod methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! method: anObject method := anObject! ! !KomitMethod methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 21:09'! operation ^ operation! ! !KomitMethod methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 17:50'! operation: anOperation operation := anOperation! ! !KomitMethod methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/22/2013 12:45'! printOn: aStream super printOn: aStream. aStream << '[ '. self method selector printOn: aStream. aStream << ' ]'.! ! !KomitMethod methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 16:25'! selector ^ self method selector! ! !KomitObject methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:25'! <= aKomitObject ^ self subclassResponsibility! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! added ^ added! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! added: anObject added := anObject! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 13:40'! expanded ^ expanded! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 13:40'! expanded: anObject expanded := anObject! ! !KomitObject methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:46'! flush added := false. modified := false. removed := false.! ! !KomitObject methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2013 14:27'! initialize super initialize. added := false. modified := false. removed := false. selected := true. expanded := false! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:35'! isClass ^ false! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/23/2013 21:35'! isCommitable ^ false! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:35'! isDefinition ^ false! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 21:46'! isDirty ^ self added or: [ self modified or: [ self removed ] ]! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:35'! isMethod ^ false! ! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:35'! isPackage ^ false! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! modified ^ modified! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! modified: anObject modified := anObject! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! removed ^ removed! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:24'! removed: anObject removed := anObject! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 13:17'! selected ^ selected! ! !KomitObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 13:17'! selected: anObject selected := anObject! ! !KomitPackage commentStamp: '' prior: 77712945! I am a simple object used to cache the patch in order to save a bit of time! !KomitPackage class methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/25/2013 17:34'! initialize packages := Dictionary new! ! !KomitPackage class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 17:36'! new self shouldNotImplement! ! !KomitPackage class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 17:35'! package: package ^ packages at: package name ifAbsentPut: [ super new package: package; yourself ]! ! !KomitPackage class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/27/2013 13:42'! removePackage: package (packages removeKey: package package name ifAbsent: [ ^ self ]) flush! ! !KomitPackage methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:27'! <= aKomitObject ^ self package name <= aKomitObject package name! ! !KomitPackage methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 19:55'! = another ^ self species = another species and: [ self package = another package ]! ! !KomitPackage methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 16:32'! classes ^ classes ifNil: [ | result p | p := self patch. p ifNil: [ #() ] ifNotNil: [ result := p operations collect: [ :each | each koClass ] thenSelect: [ :each | each notNil ]. classes := result asSet asOrderedCollection ] ]! ! !KomitPackage methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 16:50'! flush super flush. semaphoreValid := false. self signalPatchIsReady. semaphoreValid := true. semaphore initSignals. classes ifNotNil: [ classes do: [ :each | each flush ] ]. classes := nil. isFullyCommited := true. self retrievePatch! ! !KomitPackage methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/27/2013 16:50'! initialize super initialize. semaphore := Semaphore new. expanded := true. semaphoreValid := true. isFullyCommited := true.! ! !KomitPackage methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/22/2013 16:48'! isEmpty ^ self package isEmpty! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/27/2013 16:50'! isFullyCommited ^ isFullyCommited! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/27/2013 16:50'! isFullyCommited: anObject isFullyCommited := anObject! ! !KomitPackage methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 22:36'! isPackage ^ true! ! !KomitPackage methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 22:26'! koDestinationText ^ ''! ! !KomitPackage methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 10:22'! koSourceText ^ 'No changes'! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:01'! package ^ package! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/27/2013 16:24'! package: aPackage package := aPackage. self retrievePatch! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/27/2013 16:30'! patch patch ifNil: [ semaphore wait ]. semaphoreValid ifFalse: [ ^ nil ]. ^ patch! ! !KomitPackage methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:13'! printOn: aStream super printOn: aStream. aStream << '[ '. self package name printOn: aStream. aStream << ' ]'.! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 16:14'! remotes ^ self package remotes! ! !KomitPackage methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/27/2013 15:24'! resetFork fork ifNotNil: [ fork terminate ]! ! !KomitPackage methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/27/2013 16:41'! retrievePatch self resetFork. fork := [ patch := nil. semaphore consumeAllSignals. patch := package patch. self signalPatchIsReady ] forkAt: Processor userBackgroundPriority + 5! ! !KomitPackage methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/27/2013 16:43'! signalPatchIsReady [ semaphore isSignaled ] whileFalse: [ semaphore signal ]. semaphore consumeAllSignals.! ! !KomitPatch commentStamp: '' prior: 77713073! I am a simple wrapper for patches! !KomitPatch class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/26/2013 12:51'! base: base patch: patch ^ self new base: base; patch: patch; yourself! ! !KomitPatch methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 13:40'! base ^ base ifNil: [ MCSnapshot empty ]! ! !KomitPatch methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 12:51'! base: anObject base := anObject! ! !KomitPatch methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 12:58'! operations ^ patch operations! ! !KomitPatch methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 12:51'! patch ^ patch! ! !KomitPatch methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 12:51'! patch: anObject patch := anObject! ! !KomitRemote commentStamp: '' prior: 77713160! I am an abstract class representing a remote repository! !KomitGemstoneRemote commentStamp: '' prior: 77713277! I encapsulate a gemstone repository! !KomitGemstoneRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:23'! icon ^ 'SS3'! ! !KomitGemstoneRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:24'! label | url | url := self remote location splitOn: '/'. ^ String streamContents: [ :stream | stream << (url at: 5) ]! ! !KomitNewSlice commentStamp: '' prior: 77713368! I am a dummy object used to commit code in a new slice! !KomitNewSlice methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:27'! icon ^ 'PHI'! ! !KomitNewSlice methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 21:28'! komitOn: aKomitterUI ^ aKomitterUI newSliceFor: self! ! !KomitNewSlice methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:27'! label ^ 'New Slice'! ! !KomitNewSlice methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/27/2013 14:21'! remote ^ MCRepositoryGroup default repositories detect: [ :e | e description = 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main/' ].! ! !KomitRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 12:05'! icon ^ nil! ! !KomitRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/26/2013 21:28'! komitOn: aKomitterUI ^ aKomitterUI newKomitFor: self! ! !KomitRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 12:05'! label ^ ''! ! !KomitRemote methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2013 11:58'! remote ^ remote! ! !KomitRemote methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2013 11:58'! remote: anObject remote := anObject! ! !KomitSmalltalkhubRemote commentStamp: '' prior: 77713488! I encapsulate a repository stored on smalltalkhub! !KomitSmalltalkhubRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:26'! icon ^ "Smalltalk ui icons testGreenIcon" 'SH '! ! !KomitSmalltalkhubRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:02'! label | url | url := self remote location splitOn: '/'. ^ String streamContents: [ :stream | stream << (url at: 6) << ' / ' << (url at: 5) ]! ! !KomitSqueakSourceRemote commentStamp: '' prior: 77713603! I encapsulate a repository stored on squeaksource! !KomitSqueakSourceRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:25'! icon ^ 'SS '! ! !KomitSqueakSourceRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/23/2013 13:18'! label | url | url := self remote location splitOn: '/'. ^ String streamContents: [ :stream | stream << (url at: 4) ]! ! !KomitStagingArea commentStamp: '' prior: 77713711! I encapsulate the context just before a commit.! !KomitStagingArea class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 17:49'! current ^ current ifNil: [ | dirtyPackages | dirtyPackages := MCWorkingCopy allManagers select: [ :e | e needsSaving ] thenCollect: [ :e | (KomitPackage package: e package) flush; yourself ]. current := super new packages: dirtyPackages; yourself ]! ! !KomitStagingArea class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/25/2013 17:38'! new self shouldNotImplement! ! !KomitStagingArea class methodsFor: 'release' stamp: 'BenjaminVanRyseghem 11/24/2013 19:58'! resetCurrent current := nil! ! !KomitStagingArea methodsFor: 'adding/removing' stamp: 'BenjaminVanRyseghem 11/24/2013 19:45'! addPackage: aPackage (packages includes: aPackage) ifFalse: [ packages add: aPackage ]! ! !KomitStagingArea methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/22/2013 16:30'! initialize super initialize. packages := OrderedCollection new.! ! !KomitStagingArea methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 19:58'! isCurrent ^ self == self class current! ! !KomitStagingArea methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 14:19'! packages ^ packages copy! ! !KomitStagingArea methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 19:45'! packages: aCollection packages := aCollection asOrderedCollection! ! !KomitStagingArea methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 21:00'! remotes | result | result := packages first remotes. packages allButFirst do: [ :each | result := result intersection: each remotes ]. ^ result collect: [ :each | each koRemote ]! ! !KomitStagingArea methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 23:34'! remotesFor: aCollection | result | result := aCollection first remotes. aCollection allButFirst do: [ :each | result := result intersection: each remotes ]. ^ result collect: [ :each | each koRemote ]! ! !KomitStagingArea methodsFor: 'adding/removing' stamp: 'BenjaminVanRyseghem 11/26/2013 10:29'! removePackage: aKomitPackage self packages remove: aKomitPackage! ! !KomitTreeBuilder commentStamp: '' prior: 77713817! I am builder class used to generate the tree nodes for a package or for all the dirty packages! !KomitTreeBuilder class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 16:48'! buildRootForPackage: aKOPackage ^ self new buildRootForPackage: aKOPackage! ! !KomitTreeBuilder class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 16:54'! roots ^ self rootsForStagingArea: self stagingArea! ! !KomitTreeBuilder class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/25/2013 17:53'! rootsForStagingArea: aStagingArea ^ aStagingArea packages collect: [ :each | self buildRootForPackage: each ] thenSelect: [:each | each isEmpty not ]! ! !KomitTreeBuilder class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 11:54'! stagingArea ^ KomitStagingArea forDirtyPackages! ! !KomitTreeBuilder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 11:55'! buildRootForPackage: aPackage ^ KomitPackageNode new content: aPackage; yourself! ! !KomitableObject commentStamp: '' prior: 77713969! I represent any commitable object, mainly a simple commit or a slice! !Komit commentStamp: '' prior: 77714085! I am a representation of a commit. I am abstracted from Monticello to be able to be reused with other frameworks! !Komit methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 20:23'! commitOn: aSubmitter aSubmitter commitKomit: self! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! author ^ author! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! author: anObject author := anObject! ! !KomitableObject methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:02'! commitToMonticello Komitter resetLastMessage. KomitStagingArea resetCurrent. MCKomitSubmitter new submitCommit: self! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! entities ^ entities! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! entities: aDictionary entities := aDictionary! ! !KomitableObject methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! initialize super initialize. author := Author fullName. entities := Dictionary new. unselectedEntities := Dictionary new. message := ''. timestamp := DateAndTime now.! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! message ^ message! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! message: anObject message := anObject! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! remote ^ remote! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! remote: anObject remote := anObject! ! !KomitableObject methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 21:08'! repository ^ self remote remote! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! timestamp ^ timestamp! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! timestamp: anObject timestamp := anObject! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! unselectedEntities ^ unselectedEntities! ! !KomitableObject methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! unselectedEntities: anObject unselectedEntities := anObject! ! !Slice commentStamp: '' prior: 77714246! I am a Slice representation. I am used only for double disptaching the way to submit me! !Slice methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 20:29'! commitOn: aSubmitter aSubmitter commitSlice: self! ! !Komitter commentStamp: '' prior: 77714384! I am the entry point of this project. A classic inkoation is | s k | s := KomitStagingArea forDirtyPackages. k := Komitter new. k stagingArea: s. k open. k lastCommit ! !Komitter class methodsFor: 'world menu' stamp: 'BenjaminVanRyseghem 11/27/2013 17:34'! finderMenuOn: aBuilder (aBuilder item: #Komitter) action: [ KomitStagingArea resetCurrent. Komitter new stagingArea: KomitStagingArea current; openAndCommitToMonticello ]; order: 0; parent: #Tools; help: 'Cherry pick what you commit'; icon: self taskbarIcon! ! !Komitter class methodsFor: 'icon' stamp: 'BenjaminVanRyseghem 11/27/2013 17:32'! iconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291344726 4291011108 4291012395 4291011367 4290812957 4290613780 4291344726 0 0 0 0 0 0 0 0 4290950202 4294761036 4294698101 4294834877 4294767789 4294568578 4294303329 4294363448 4290950202 0 0 0 0 0 0 0 4291209781 4294761294 4294697579 4294834877 4294767789 4294568578 4294303329 4294363448 4290215691 0 0 0 0 0 0 0 4290483257 4293638436 4294435416 4294702476 4294568309 4294170434 4293640485 4293762572 4290874662 0 0 0 0 0 0 0 4290417209 4294302048 4294701206 4294834877 4294767789 4294568578 4294303329 4294363448 4290874662 0 0 0 0 0 0 0 4290483000 4294302048 4294701206 4294834877 4294767788 4294568577 4294303329 4294363448 4290940453 0 0 0 0 0 0 0 4290548791 4294302048 4294700950 4294834878 4294768043 4294568576 4294303330 4294363449 4290940453 0 0 0 0 0 0 0 4290614582 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 0 4290680630 4290427290 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4290427290 0 4290680374 4290427290 4294441212 4294309882 4287603139 4287603139 4294441212 4287603139 4294309882 4287603139 4294309882 4287603139 4287603139 4294309882 4290427290 0 4290680376 4289835439 4294309882 4287011519 4294309882 4294309882 4294309882 4287011519 4294048510 4287011519 4294048510 4287011519 4294048510 4294309882 4289835439 0 4290680378 4289375144 4294048510 4286549936 4294048510 4294048510 4294048510 4286549936 4294048510 4286549936 4294048510 4294048510 4286549936 4294048510 4289375144 0 0 4288522415 4293523711 4293523711 4285957539 4285957539 4293523711 4293523711 4285957539 4293523711 4293523711 4285957539 4285957539 4293523711 4288522415 0 0 4288522415 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4288522415 0 0 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342)! ! !Komitter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 12:59'! lastMessage ^ lastMessage ifNil: [ MCSaveVersionDialog previousMessages first ]! ! !Komitter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 12:59'! lastMessage: aString lastMessage := aString! ! !Komitter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 12:59'! resetLastMessage lastMessage := nil! ! !Komitter class methodsFor: 'icon' stamp: 'BenjaminVanRyseghem 11/27/2013 17:32'! taskbarIcon ^ icon ifNil: [ icon := Pharo3UIThemeIcons form16x16FromContents: self iconData ]! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! classModified: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! classMoved: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! classRemoved: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/25/2013 17:32'! initialize super initialize. stagingArea := nil asValueHolder. lastCommit := nil asValueHolder. "self registerToAnnouncements"! ! !Komitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 22:10'! lastCommit ^ lastCommit value! ! !Komitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 22:10'! lastCommit: aKomit lastCommit value: aKomit! ! !Komitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:00'! lastMessage ^ self class lastMessage! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 16:45'! mcPackageModified: anAnnoucement | package | self stagingArea isCurrent ifFalse: [ ^ self ]. package := anAnnoucement package koPackage. package patch isEmpty ifTrue: [ self stagingArea removePackage: package ] ifFalse: [ self stagingArea addPackage: package ]. view ifNil: [ ^ self ]. package patch isEmpty ifTrue: [ view removeRoot: package ] ifFalse: [ view addRoot: package ]! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! methodModified: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! methodMoved: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:15'! methodRemoved: anAnnouncement self stagingArea isCurrent ifFalse: [ ^ self ].! ! !Komitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 20:53'! newSlice ^ KomitNewSlice new! ! !Komitter methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 11/27/2013 15:20'! open self stagingArea packages ifEmpty: [ ^ self inform: 'No changes to commit' ]. view ifNil: [ view := KomitterUI new model: self; yourself ]. view openDialogWithSpec okAction: [ | valid | valid := view validate. valid ifTrue: [ self lastCommit: view komit ]. valid ]; cancelAction: [ self lastCommit: nil. view cancel ]; modalRelativeTo: World.! ! !Komitter methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 11/27/2013 13:14'! openAndCommitToMonticello self open. self lastCommit ifNotNil: [ self lastCommit commitToMonticello ]! ! !Komitter methodsFor: 'announcement' stamp: 'BenjaminVanRyseghem 11/25/2013 17:07'! registerToAnnouncements SystemAnnouncer uniqueInstance weak on: MCPackageModified send: #mcPackageModified: to: self; on: ClassAdded, ClassModifiedClassDefinition, ClassRenamed, ClassCommented send: #classModified: to: self; on: ClassRepackaged send: #classMoved: to: self; on: ClassRemoved send: #classRemoved: to: self; on: MethodAdded, MethodModified, MethodRecategorized send: #methodModified: to: self; on: MethodRepackaged send: #methodMoved: to: self; on: MethodRemoved send: #methodRemoved: to: self! ! !Komitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 20:53'! remotes ^ self stagingArea remotes asOrderedCollection add: self newSlice; yourself! ! !Komitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 19:27'! remotesFor: aCollection ^ (self stagingArea remotesFor: aCollection) asOrderedCollection add: self newSlice; yourself! ! !Komitter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2013 20:35'! stagingArea ^ stagingArea value! ! !Komitter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/23/2013 20:35'! stagingArea: anObject stagingArea value: anObject! ! !LoadingMorphState commentStamp: '' prior: 77714616! I am the abstract super class of the loading morph state. They are used as state in a state machine for the order of the icons in the rotating animation! !BigCogInitialState commentStamp: '' prior: 77714830! I am the initial state! !BigCogInitialState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:41'! imageData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144678815 1538898361 2327559099 2679814842 2595862969 2411313593 2109389498 1740290746 1287240121 783792055 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3904617403 3250240186 2545597114 1790556601 767278011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1169799609 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3116022458 515619771 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246855350 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3854219962 548911031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2025569211 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3283860411 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1035516088 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2361047738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1203485627 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3166354106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2143009723 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3686447802 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3065690810 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3988437690 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649442741 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 481736374 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1589164216 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 850966712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93952409 1538898361 2881141434 3552230074 3652959163 3065690810 1807399610 279949231 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2528885691 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 314095800 1706802107 2847587002 3569007290 3703290811 3183131322 1639693243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 448445114 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 1622850234 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3451632571 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1589164216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 2327559099 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2830875579 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397521329 3636181947 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2881141434 196721081 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1958460347 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397521329 3267083195 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2830875579 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3535518651 599176886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1035516088 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2327559099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 934918585 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330215086 3535518651 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 1236908473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1958460347 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2696592058 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2679814842 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297055412 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 2143009723 16777216 0 0 0 0 0 0 0 0 0 0 0 0 2897984443 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3048913594 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 2612705978 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2595862969 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 3434789562 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3065690810 314095800 0 0 0 0 0 0 0 0 0 0 0 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3418012346 0 0 0 0 0 0 0 0 0 0 0 0 481736374 3384457914 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2495265466 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246855350 3384457914 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 867809721 0 0 0 0 0 0 0 0 0 481736374 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 111848106 0 0 0 0 0 0 0 0 0 0 1069202106 3921328826 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2394667963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229749169 3350903482 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 1723447737 0 0 0 0 0 0 0 0 1404614840 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 2595862969 1085781943 41975936 0 0 0 0 0 0 1891351483 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2277227451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 3132799674 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2730146490 179549107 0 0 61516458 700169147 1471789497 2260384442 3535518651 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 2361047738 850966712 0 0 179549107 2780543931 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1891351483 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1907997113 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3552230074 2629483194 3418012346 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3619338938 2143009723 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 414561717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3636181947 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1991948986 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2965093307 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3166354106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2629483194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1287240121 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1236908473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3267083195 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3099245242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666351543 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1740290746 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4206607291 1035516088 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2881141434 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1824242619 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2730146490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 934918585 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3518741435 162179754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1958460347 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4055546554 632994490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1404614840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330215086 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2428156602 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968341431 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3384457914 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1941617338 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 532002229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2948316091 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 3720068027 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2444933818 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2461776827 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2730146490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 884652730 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3904617403 3434789562 3032202171 2612705978 2713435067 3132799674 3552230074 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4022057915 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2277227451 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 3300571834 2008726202 716617398 0 0 0 0 0 0 0 61516458 1035516088 2327559099 3636181947 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1203485627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3652959163 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2998581946 750369209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1270594491 3535518651 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2595862969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 733526200 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3451632571 985250233 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 1555741370 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3921328826 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2126166714 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2780543931 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498710969 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1069202106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 2059057850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 179549107 2897984443 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2461776827 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 783792055 1505409722 2226764217 2948316091 3686447802 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1907997113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 2914695866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4223384507 3569007290 2830875579 2109389498 1354348985 632994490 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 817543866 1522252731 2226764217 2931473082 3652959163 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2730146490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212511402 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 3451632571 2713435067 1975105977 1236908473 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464761779 1606007225 2327559099 3015424955 3720068027 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3434789562 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599176886 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4055546554 3334192059 2595862969 1857665465 1169799609 464761779 0 0 0 0 0 0 0 0 330215086 2780543931 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 767278011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1740290746 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3401300923 1169799609 0 0 0 0 0 330215086 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2814032570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93952409 3720068027 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1673116089 0 0 0 0 2998581946 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 649442741 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1572518586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 397521329 0 0 1186642618 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2914695866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 3854219962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1907997113 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1639693243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2595862969 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2512108475 0 0 3619338938 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 397521329 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1337505976 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2814032570 0 0 3652959163 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3451632571 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196721081 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2797255354 0 0 3669670586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2830875579 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3770399675 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2780543931 0 0 3686447802 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2428156602 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3350903482 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 0 0 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2025569211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2948316091 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 0 0 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1824242619 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2730146490 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 0 0 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2193275578 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3082533819 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 0 0 3686447802 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2595862969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2780543931 0 0 3652959163 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3015424955 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2797255354 0 0 3619338938 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3921328826 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 532002229 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2830875579 0 0 3518741435 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 918075576 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1773910971 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2847587002 0 0 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2176498362 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2495265466 0 0 1840888249 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3602561722 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347321267 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1320860346 0 0 162179754 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1522252731 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2344204729 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3350903482 41975936 0 0 0 481736374 3334192059 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3669670586 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3451632571 397521329 0 0 0 0 0 41975936 1354348985 2830875579 3736779450 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1773910971 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2595862969 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 2981804730 1589164216 61516458 0 0 0 0 0 0 0 0 0 0 196721081 884652730 1622850234 2344204729 3065690810 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 867809721 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1538898361 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 3669670586 2965093307 2293938874 1622850234 968341431 347321267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229749169 951827387 1673116089 2394667963 3132799674 3854219962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 381270457 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850966712 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 3015424955 2277227451 1538898361 800635064 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 1002093242 1740290746 4022057915 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3283860411 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 532002229 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3736779450 1773910971 1002093242 246855350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2713435067 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3585850299 582268084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1018936251 3921328826 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2092546489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1304017337 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 1085781943 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1656338873 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 2713435067 548911031 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850966712 3116022458 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3569007290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2797255354 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 2428156602 700169147 0 0 0 0 0 0 0 0 0 0 0 16777216 934918585 2847587002 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2176498362 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1404614840 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 2411313593 1287240121 817543866 397521329 41975936 75530368 464761779 884652730 1438300858 2646326203 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 767278011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 179549107 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3669670586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2897984443 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2025569211 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1253751482 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666351543 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3569007290 179549107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212511402 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2763766715 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2881141434 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1773910971 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1941617338 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 901232567 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1069202106 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 314095800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 448445114 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3065690810 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93952409 3300571834 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2109389498 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2428156602 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 1152956600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1438300858 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 481736374 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666351543 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3334192059 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 179549107 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2444933818 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2579217339 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1304017337 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 985250233 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3501898426 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3166354106 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 850966712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 314095800 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1991948986 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 800635064 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2612705978 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548911031 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2545597114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1639693243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 2293938874 1320860346 3166354106 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 3434789562 2579217339 1723447737 918075576 2797255354 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1555741370 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 1337505976 0 0 0 750369209 2579217339 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 834057910 93952409 0 0 0 0 0 2042214841 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4089166779 918075576 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1622850234 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3518741435 616085688 0 0 0 0 0 0 314095800 2008726202 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 397521329 0 0 0 0 0 0 0 0 1270594491 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 1035516088 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2713435067 162179754 0 0 0 0 0 0 0 0 0 61516458 1421457849 3283860411 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3820665530 0 0 0 0 0 0 0 0 0 0 666351543 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 1069202106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1824242619 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 1757067962 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3870997178 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2965093307 0 0 0 0 0 0 0 0 0 0 0 229749169 2931473082 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 1085781943 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1924840122 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 901232567 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3887840187 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2092546489 0 0 0 0 0 0 0 0 0 0 0 0 16777216 2008726202 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 1102624952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2025569211 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3099245242 330215086 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1236908473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1119467961 3921328826 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 1119467961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2109389498 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 2176498362 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 381270457 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 3250240186 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 1136310970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2193275578 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3988437690 1236908473 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3870997178 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 2210118587 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 1320860346 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1975105977 4223384507 4290493371 4290493371 4290493371 4290493371 4256873146 2881141434 532002229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2948316091 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1052359097 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 3736779450 1035516088 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750369209 2277227451 2864364218 2713435067 1891351483 532002229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2092546489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 1404614840 2512108475 3082533819 2713435067 1555741370 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 364295862 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3468409787 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3300571834 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2931473082 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3082533819 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2075900859 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2545597114 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1337505976 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1773910971 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 515619771 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3602561722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2327559099 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1958460347 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 3216751547 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3720068027 179549107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 2663037626 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 750369209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 918075576 2461776827 2629483194 2663037626 2696592058 2730146490 2763766715 2780543931 2797255354 2797255354 2780543931 2763766715 2730146490 2679814842 2495265466 1673116089 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )! ! !BigCogInitialState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 128! ! !BigCogInitialState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:28'! nextState ^ BigCogState2 new! ! !BigCogInitialState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:30'! stepTime ^ 50! ! !BigCogState2 commentStamp: '' prior: 77714907! Another state in the loading animation! !BigCogState2 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 16:22'! imageData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297055412 884652730 448445114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 532002229 2897984443 4256873146 4290493371 4290493371 3652959163 2444933818 1236908473 162179754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1002093242 3971726267 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 3116022458 1891351483 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 867809721 4089166779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 2528885691 1304017337 196721081 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297055412 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4055546554 2025569211 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2059057850 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2981804730 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 1757067962 2344204729 2210118587 1354348985 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3720068027 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2243607226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111848106 1471789497 3099245242 4256873146 4290493371 4290493371 4290493371 4290493371 3870997178 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1136310970 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 297055412 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565819833 2310716090 3954949051 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1874508474 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2830875579 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1287240121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968341431 2914695866 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 1287240121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347321267 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1740290746 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1002093242 3183131322 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 431536312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1924840122 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1538898361 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347321267 2897984443 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3065690810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1052359097 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 616085688 3770399675 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1790556601 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1002093242 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 364295862 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3384457914 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 649442741 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2696592058 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1136310970 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3401300923 75530368 0 0 0 0 0 0 0 0 0 0 0 0 263961531 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3401300923 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2293938874 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2176498362 0 0 0 0 0 0 0 0 0 0 0 0 1790556601 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2797255354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2780543931 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4223384507 934918585 0 0 0 0 0 0 0 0 0 0 0 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2226764217 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2696592058 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3669670586 196721081 0 0 0 0 0 0 0 0 0 884652730 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1656338873 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2109389498 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2545597114 0 0 0 0 0 0 0 0 75530368 2663037626 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1102624952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968341431 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1253751482 0 0 263961531 1035516088 1840888249 2629483194 3434789562 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 565819833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3870997178 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3904617403 2948316091 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2512108475 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3820665530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1152956600 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3300571834 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 3988437690 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2797255354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2696592058 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2310716090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1320860346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1975105977 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330215086 1874508474 2948316091 3300571834 2830875579 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144678815 4089166779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4089166779 1169799609 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 1304017337 2881141434 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 2814032570 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2864364218 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 1488566713 0 0 0 0 0 0 0 0 0 0 0 0 0 850966712 2428156602 3938106042 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2210118587 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1488566713 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1857665465 0 0 0 0 0 0 0 0 0 448445114 1975105977 3569007290 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 783792055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246855350 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 0 0 0 0 0 179549107 1538898361 3116022458 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3166354106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2663037626 61516458 16777216 1069202106 2663037626 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1337505976 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1673116089 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3334192059 3770399675 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347321267 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1991948986 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3216751547 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4072389563 414561717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1840888249 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2679814842 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1505409722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 918075576 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1740290746 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3367680698 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196721081 834057910 1236908473 951827387 565819833 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 2377824954 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1488566713 0 0 0 0 0 0 0 0 0 0 0 0 649442741 2797255354 4172987066 4290493371 4290493371 4290493371 4290493371 4156275643 3518741435 2881141434 2243607226 1622850234 1018936251 431536312 0 0 0 0 0 0 196721081 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3048913594 0 0 0 0 0 0 0 0 0 0 0 1438300858 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 3535518651 2948316091 2377824954 1807399610 1320860346 3451632571 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 0 0 0 0 0 0 0 0 0 0 1102624952 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3535518651 0 0 0 0 0 0 0 0 0 0 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2428156602 0 0 0 0 0 0 0 0 0 733526200 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4072389563 464761779 0 0 0 0 0 0 0 0 0 1824242619 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 1270594491 0 0 0 0 0 0 0 0 0 0 2914695866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 1102624952 0 0 0 0 0 0 0 0 0 0 16777216 3988437690 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4206607291 3350903482 2344204729 1555741370 1371191994 1236908473 1102624952 1438300858 2176498362 2914695866 3686447802 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3434789562 532002229 0 0 0 0 0 0 0 0 0 0 0 817543866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3317349050 1388035003 162179754 0 0 0 0 0 0 0 0 0 0 834057910 2512108475 4022057915 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2746923706 144678815 0 0 0 0 0 0 0 0 0 0 0 0 1924840122 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3082533819 968341431 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 1874508474 4089166779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 1941617338 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3015424955 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 1773910971 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515619771 3048913594 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3569007290 700169147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1790556601 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3669670586 666351543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 934918585 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3652959163 381270457 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1572518586 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3166354106 297055412 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2042214841 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1404614840 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2545597114 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2176498362 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 1840888249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2092546489 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 3350903482 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4055546554 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3619338938 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582268084 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 951827387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2461776827 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2444933818 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1102624952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464761779 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548911031 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2008726202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1052359097 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2243607226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2814032570 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2914695866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599176886 3199974331 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 666351543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1287240121 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3820665530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1236908473 3283860411 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 431536312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 901232567 2797255354 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3183131322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481736374 2277227451 3971726267 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2512108475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2512108475 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 1706802107 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1891351483 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2193275578 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3250240186 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1085781943 2914695866 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1857665465 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1991948986 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 1941617338 314095800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498710969 2260384442 3938106042 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2059057850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1790556601 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 2679814842 884652730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 3334192059 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1857665465 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3401300923 1622850234 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2260384442 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2595862969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2495265466 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3988437690 2361047738 599176886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1320860346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3585850299 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3149642683 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 3082533819 1304017337 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397521329 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 347321267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3820665530 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 1991948986 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1388035003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666351543 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3569007290 632994490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2830875579 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2931473082 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2260384442 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1891351483 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 649442741 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3652959163 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968341431 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2579217339 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1253751482 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1824242619 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1035516088 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 700169147 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 3652959163 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3099245242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1505409722 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3485121210 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2143009723 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3418012346 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 2243607226 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2344204729 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 733526200 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2931473082 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212511402 2948316091 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1589164216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548911031 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1907997113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548911031 3518741435 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1757067962 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 3703290811 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 783792055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1052359097 3938106042 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2008726202 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 783792055 3636181947 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3233462970 632994490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 1891351483 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2847587002 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 2495265466 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 2059057850 246855350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1102624952 3216751547 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1723447737 0 0 0 0 0 0 0 0 0 0 0 0 330215086 3199974331 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 2696592058 1018936251 0 0 0 0 0 0 0 0 0 0 263961531 1522252731 3451632571 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 582268084 0 0 0 0 0 0 0 0 0 0 0 767278011 3736779450 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3854219962 3082533819 2344204729 1606007225 1270594491 1404614840 1538898361 1706802107 2495265466 3501898426 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 0 0 0 0 0 0 0 0 0 0 0 1253751482 4105878202 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2612705978 0 0 0 0 0 0 0 0 0 0 934918585 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1522252731 0 0 0 0 0 0 0 0 0 0 3367680698 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 548911031 0 0 0 0 0 0 0 0 0 616085688 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3350903482 0 0 0 0 0 0 0 0 0 0 1455143867 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1169799609 0 0 0 0 0 0 0 0 0 0 1757067962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3451632571 1136310970 1723447737 2444933818 3132799674 3820665530 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2176498362 0 0 0 0 0 0 0 0 0 0 0 1572518586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3048913594 212511402 0 0 0 0 0 212511402 850966712 1488566713 2109389498 2713435067 3300571834 3854219962 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 1505409722 0 0 0 0 0 0 0 0 0 0 0 0 884652730 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2595862969 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 144678815 616085688 1119467961 1354348985 1253751482 817543866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3116022458 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2075900859 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 733526200 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1941617338 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2512108475 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2210118587 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330215086 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3652959163 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1874508474 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 817543866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3283860411 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2277227451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 2193275578 599176886 0 0 2277227451 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3720068027 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4089166779 2663037626 1085781943 16777216 0 0 0 0 0 1857665465 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 884652730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565819833 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 3166354106 1572518586 179549107 0 0 0 0 0 0 0 0 0 1455143867 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2327559099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1773910971 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3636181947 2059057850 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 1119467961 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2008726202 4189764282 4290493371 4290493371 4290493371 4290493371 4005214906 2545597114 934918585 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 817543866 3887840187 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 951827387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498710969 1790556601 2277227451 2059057850 1236908473 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1874508474 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2394667963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2411313593 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3820665530 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3015424955 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1002093242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3619338938 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2461776827 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3870997178 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515619771 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1253751482 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1119467961 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 3619338938 3132799674 2646326203 2143009723 1656338873 1169799609 683260345 397521329 3870997178 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2646326203 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1706802107 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3418012346 314095800 0 0 0 0 0 0 0 0 0 1639693243 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3636181947 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2277227451 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1656338873 0 0 0 0 0 0 0 0 0 0 41975936 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4206607291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2864364218 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 179549107 0 0 0 0 0 0 0 0 0 0 0 985250233 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4223384507 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3434789562 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2461776827 0 0 0 0 0 0 0 0 0 0 0 0 0 2730146490 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3602561722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 733526200 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1891351483 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 263961531 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3267083195 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1891351483 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2646326203 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 817543866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1522252731 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 1471789497 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1354348985 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3954949051 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 951827387 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 2277227451 212511402 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2327559099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2461776827 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2965093307 599176886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1840888249 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 616085688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212511402 3569007290 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3552230074 1152956600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1622850234 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3132799674 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582268084 3854219962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 1757067962 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716617398 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1388035003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397521329 2998581946 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 2344204729 263961531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3250240186 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3870997178 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 767278011 2059057850 2763766715 2914695866 2444933818 582268084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649442741 3938106042 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2193275578 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481736374 2780543931 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4022057915 381270457 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111848106 1136310970 2361047738 3585850299 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1455143867 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515619771 1723447737 2948316091 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1891351483 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93952409 1069202106 2277227451 3468409787 4273716155 4290493371 4290493371 3569007290 1203485627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297055412 817543866 532002229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )! ! !BigCogState2 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 128! ! !BigCogState2 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:29'! nextState ^ BigCogState3 new! ! !BigCogState2 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:30'! stepTime ^ 50! ! !BigCogState3 commentStamp: '' prior: 77715000! The last state of the loading animation! !BigCogState3 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 16:23'! imageData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 498710969 1002093242 1471789497 1891351483 2260384442 2210118587 1371191994 162179754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464761779 1371191994 2210118587 2931473082 3619338938 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3870997178 1388035003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431536312 2243607226 3669670586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1673116089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1220065464 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 733526200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 767278011 1874508474 2126166714 1354348985 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716617398 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2814032570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 918075576 3267083195 4290493371 4290493371 4290493371 4290493371 3720068027 1304017337 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 448445114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 2226764217 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3032202171 599176886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 381270457 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1958460347 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2444933818 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 2210118587 162179754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1354348985 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3501898426 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1354348985 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 1371191994 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1824242619 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 750369209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515619771 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3082533819 632994490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1773910971 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2293938874 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 3317349050 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 2226764217 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1572518586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2260384442 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3132799674 129414838 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1371191994 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1085781943 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1152956600 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2377824954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1169799609 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2629483194 0 0 0 0 0 0 0 0 0 0 0 0 0 397521329 3904617403 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4206607291 464761779 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968341431 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 129414838 0 0 0 0 0 0 0 0 0 0 0 16777216 3132799674 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1706802107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 767278011 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1404614840 0 0 0 0 0 0 0 0 0 0 0 2042214841 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2243607226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565819833 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2948316091 0 0 0 0 0 0 0 0 0 0 985250233 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2008726202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 297055412 0 0 0 0 0 0 0 0 297055412 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 934918585 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 179549107 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2713435067 1706802107 1371191994 1035516088 700169147 364295862 61516458 0 0 2948316091 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 3988437690 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1924840122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4072389563 246855350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3870997178 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2495265466 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3669670586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196721081 783792055 951827387 498710969 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3468409787 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3166354106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750369209 2914695866 4172987066 4290493371 4290493371 4290493371 3753556666 2277227451 599176886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3267083195 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1388035003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1706802107 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 2931473082 1035516088 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3065690810 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3854219962 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 985250233 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3468409787 1622850234 144678815 0 0 0 0 0 0 0 0 0 0 0 0 2864364218 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2176498362 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3367680698 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3954949051 2277227451 515619771 0 0 0 0 0 0 0 0 364295862 2243607226 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1488566713 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 2948316091 1136310970 0 0 0 0 498710969 2444933818 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3015424955 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3619338938 1857665465 834057910 2646326203 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1304017337 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2008726202 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2210118587 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2528885691 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1656338873 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716617398 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3921328826 314095800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3065690810 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2696592058 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1169799609 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3132799674 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3736779450 179549107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2377824954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 397521329 867809721 800635064 179549107 0 0 0 0 0 0 0 0 0 0 0 0 0 649442741 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 901232567 0 0 0 0 279949231 666351543 1069202106 1471789497 1874508474 2260384442 2663037626 3065690810 3468409787 3854219962 4223384507 4290493371 4290493371 4290493371 4156275643 2629483194 279949231 0 0 0 0 0 0 0 0 0 0 0 162179754 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3720068027 2981804730 3367680698 3770399675 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3485121210 162179754 0 0 0 0 0 0 0 0 0 0 0 2881141434 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2143009723 0 0 0 0 0 0 0 0 0 0 0 616085688 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3820665530 41975936 0 0 0 0 0 0 0 0 0 0 0 1287240121 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 850966712 0 0 0 0 0 0 0 0 0 0 0 0 1287240121 4105878202 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1958460347 0 0 0 0 0 0 0 0 0 0 0 0 0 834057910 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 3032202171 2310716090 1706802107 1757067962 1874508474 2008726202 2528885691 3535518651 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3099245242 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 3233462970 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 2226764217 616085688 0 0 0 0 0 0 0 0 0 279949231 1320860346 3132799674 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4122655418 111848106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 2478488250 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3803888314 1404614840 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 834057910 2797255354 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1069202106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1622850234 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 2394667963 212511402 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1102624952 3854219962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2210118587 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 884652730 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4072389563 1102624952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347321267 3048913594 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3367680698 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 3183131322 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3988437690 901232567 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 2562374330 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 279949231 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 2310716090 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 750369209 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 2914695866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1404614840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1388035003 4072389563 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1438300858 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129414838 3233462970 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2562374330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649442741 3652959163 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2696592058 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498710969 4105878202 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3585850299 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2562374330 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1991948986 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3837508539 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2780543931 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1857665465 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93952409 3602561722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3317349050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2998581946 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1639693243 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1874508474 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3199974331 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2377824954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229749169 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3418012346 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 834057910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2746923706 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3048913594 263961531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3619338938 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1354348985 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3233462970 1186642618 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3233462970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565819833 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 2663037626 783792055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2327559099 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3988437690 2210118587 414561717 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548911031 2461776827 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1975105977 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 1840888249 196721081 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 834057910 2797255354 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1891351483 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3183131322 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3485121210 1505409722 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 3149642683 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1790556601 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3283860411 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3233462970 1220065464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 1538898361 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1840888249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3367680698 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 2981804730 951827387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229749169 1924840122 3803888314 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2512108475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2780543931 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481736374 2327559099 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3233462970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162179754 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2512108475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750369209 2746923706 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3954949051 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1018936251 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2277227451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2210118587 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 850966712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1958460347 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2042214841 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2109389498 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2444933818 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3233462970 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1807399610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582268084 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 93952409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 817543866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1589164216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2310716090 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1538898361 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2713435067 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3518741435 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3854219962 229749169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498710969 4189764282 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1119467961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 4223384507 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2377824954 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3166354106 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1354348985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 4105878202 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4223384507 951827387 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1924840122 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 1723447737 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3082533819 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850966712 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2713435067 162179754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1958460347 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3787176891 464761779 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 918075576 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3535518651 632994490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 834057910 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 834057910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1102624952 4089166779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4055546554 1388035003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3971726267 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 1857665465 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75530368 1975105977 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2361047738 75530368 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2864364218 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3065690810 850966712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 951827387 3518741435 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3267083195 431536312 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3149642683 1169799609 0 0 0 0 0 0 0 0 0 0 0 129414838 1455143867 3082533819 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3904617403 1085781943 0 0 0 0 0 0 0 0 0 0 0 0 0 0 565819833 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3904617403 2897984443 1891351483 951827387 666351543 532002229 397521329 548911031 1253751482 1958460347 2730146490 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 2008726202 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 3686447802 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2981804730 212511402 0 0 0 0 0 0 0 0 0 0 0 0 2512108475 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3116022458 41975936 0 0 0 0 0 0 0 0 0 0 0 1253751482 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1991948986 0 0 0 0 0 0 0 0 0 0 0 61516458 3753556666 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4105878202 314095800 0 0 0 0 0 0 0 0 0 0 0 1236908473 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4189764282 3837508539 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1824242619 0 0 0 0 0 0 0 0 0 0 0 0 1186642618 3669670586 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 3602561722 3183131322 2780543931 2377824954 1958460347 1555741370 1136310970 733526200 330215086 0 0 2948316091 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2797255354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850966712 1572518586 1689959098 1354348985 934918585 532002229 129414838 0 0 0 0 0 0 0 0 0 0 0 0 448445114 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2864364218 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1689959098 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2025569211 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3199974331 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4156275643 448445114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599176886 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2226764217 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1958460347 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3887840187 212511402 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1656338873 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3166354106 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3468409787 41975936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 700169147 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1069202106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2512108475 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3367680698 2126166714 3787176891 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2914695866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246855350 4089166779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3334192059 1203485627 0 0 75530368 1505409722 3434789562 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 582268084 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1857665465 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3300571834 1169799609 0 0 0 0 0 0 0 1069202106 2965093307 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2361047738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16777216 3636181947 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2075900859 0 0 0 0 0 0 0 0 0 0 0 582268084 2394667963 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3988437690 347321267 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1169799609 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1840888249 0 0 0 0 0 0 0 0 0 0 0 0 0 196721081 1757067962 3535518651 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 1320860346 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2126166714 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1018936251 2730146490 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 4038835131 1404614840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515619771 4240095930 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2394667963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279949231 1522252731 2579217339 3183131322 2965093307 1991948986 397521329 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2243607226 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2663037626 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111848106 3921328826 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2931473082 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1505409722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3199974331 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3267083195 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3485121210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716617398 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3384457914 1270594491 1907997113 2545597114 3183131322 3820665530 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3753556666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2159655353 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4005214906 532002229 0 0 0 0 0 179549107 800635064 1438300858 2075900859 2981804730 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4022057915 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1320860346 0 0 0 0 0 0 0 0 0 0 196721081 4206607291 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4055546554 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2344204729 0 0 0 0 0 0 0 0 0 0 0 0 3283860411 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 263961531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4172987066 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3334192059 75530368 0 0 0 0 0 0 0 0 0 0 0 0 2143009723 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 532002229 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3418012346 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3971726267 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 985250233 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 817543866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1723447737 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1253751482 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 4038835131 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1085781943 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 2881141434 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2277227451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2914695866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1438300858 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 1874508474 4022057915 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3267083195 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1689959098 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1807399610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 381270457 2679814842 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3938106042 448445114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464761779 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1874508474 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 985250233 3485121210 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4256873146 1186642618 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3468409787 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 1572518586 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61516458 1807399610 4005214906 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2193275578 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2176498362 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 783792055 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 364295862 2629483194 4273716155 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2847587002 61516458 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 817543866 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3602561722 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 934918585 3401300923 4290493371 4290493371 4290493371 4290493371 4290493371 4206607291 2126166714 16777216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3501898426 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4240095930 1203485627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 1522252731 3216751547 3870997178 3636181947 2512108475 649442741 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1538898361 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3485121210 1203485627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2965093307 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4139498427 3099245242 1907997113 683260345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212511402 3032202171 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 3451632571 2310716090 1152956600 144678815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41975936 1639693243 3619338938 4290493371 4290493371 4290493371 3686447802 2562374330 1438300858 330215086 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 632994490 1253751482 498710969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )! ! !BigCogState3 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 128! ! !BigCogState3 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:28'! nextState ^ BigCogInitialState new! ! !BigCogState3 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:30'! stepTime ^ 50! ! !LoadingMorphState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! formFromContents: aByteArray | size | size := self size. ^ Form extent: size@size depth: 32 fromArray: aByteArray offset: 0@0! ! !LoadingMorphState class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/25/2013 15:43'! image ^ image ifNil: [ image := self formFromContents: self imageData ]! ! !LoadingMorphState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 20:51'! imageData ^ self subclassResponsibility! ! !LoadingMorphState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 20:50'! image ^ self class image! ! !LoadingMorphState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 20:47'! nextState ^ self subclassResponsibility! ! !LoadingMorphState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:30'! stepTime self subclassResponsibility! ! !SmallCogInitialState commentStamp: '' prior: 77715102! Initial state of a small cog turning animation! !SmallCogInitialState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:46'! imageData ^ #(0 0 0 0 0 0 733526200 3317349050 3099245242 683260345 0 0 0 0 0 0 0 0 61516458 532002229 0 0 2176498362 4290493371 4290493371 2176498362 0 0 632994490 41975936 0 0 0 41975936 2830875579 4290493371 2629483194 179549107 3166354106 4290493371 4290493371 2881141434 263961531 2696592058 4290493371 2696592058 16777216 0 0 548911031 4290493371 4290493371 4290493371 4240095930 4290493371 4290493371 4290493371 4290493371 4240095930 4290493371 4290493371 4290493371 464761779 0 0 0 2579217339 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2411313593 0 0 0 0 263961531 4256873146 4290493371 4290493371 4290493371 3418012346 3451632571 4290493371 4290493371 4290493371 4189764282 162179754 0 0 548911031 1757067962 2763766715 4290493371 4290493371 4290493371 1438300858 0 0 1572518586 4290493371 4290493371 4290493371 2696592058 1723447737 616085688 3552230074 4290493371 4290493371 4290493371 4290493371 3367680698 0 0 0 0 3485121210 4290493371 4290493371 4290493371 4290493371 3401300923 3569007290 4290493371 4290493371 4290493371 4290493371 3283860411 0 0 0 0 3401300923 4290493371 4290493371 4290493371 4290493371 3535518651 817543866 2042214841 3015424955 4290493371 4290493371 4256873146 1169799609 0 0 1270594491 4273716155 4290493371 4290493371 2981804730 2042214841 767278011 0 0 212511402 4240095930 4290493371 4290493371 4240095930 3099245242 3116022458 4256873146 4290493371 4290493371 4189764282 144678815 0 0 0 0 2361047738 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2210118587 0 0 0 599176886 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 431536312 0 0 93952409 3065690810 4290493371 2981804730 666351543 2965093307 4290493371 4290493371 3250240186 498710969 3082533819 4290493371 2965093307 41975936 0 0 0 129414838 1002093242 16777216 0 2042214841 4290493371 4290493371 2243607226 0 41975936 1119467961 93952409 0 0 0 0 0 0 0 0 850966712 3518741435 3501898426 834057910 0 0 0 0 0 0)! ! !SmallCogInitialState class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 16! ! !SmallCogInitialState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! nextState ^ SmallCogState2 new! ! !SmallCogInitialState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! stepTime ^ 50! ! !SmallCogState2 commentStamp: '' prior: 77715205! Second state of a small cog turning animation! !SmallCogState2 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:46'! imageData ^ #(0 0 0 0 1337505976 649442741 0 0 1186642618 3803888314 2730146490 464761779 0 0 0 0 0 0 0 2914695866 4290493371 4055546554 599176886 16777216 3518741435 4290493371 4290493371 1891351483 0 0 0 0 0 0 0 3585850299 4290493371 4290493371 3585850299 2679814842 4290493371 4290493371 4290493371 1371191994 0 0 0 0 0 0 0 1975105977 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2461776827 1304017337 3132799674 3485121210 279949231 0 279949231 0 1757067962 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2260384442 2864364218 4290493371 4156275643 4206607291 4290493371 4290493371 4290493371 3736779450 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4273716155 1656338873 4122655418 4290493371 4290493371 4290493371 4290493371 4290493371 1857665465 0 0 1169799609 4172987066 4290493371 4290493371 4089166779 1253751482 0 2495265466 4206607291 4290493371 4290493371 4290493371 3501898426 0 0 0 0 2713435067 4290493371 4290493371 3569007290 0 0 0 464761779 3401300923 4290493371 4290493371 3099245242 0 0 0 0 2361047738 4290493371 4290493371 4290493371 3250240186 1253751482 0 61516458 3149642683 4290493371 4290493371 4105878202 515619771 0 0 212511402 3736779450 4290493371 4290493371 4290493371 4290493371 4290493371 314095800 3216751547 4290493371 4290493371 4290493371 4290493371 3787176891 1924840122 1807399610 3535518651 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 1941617338 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3501898426 1555741370 1975105977 1388035003 414561717 4089166779 4290493371 3468409787 3619338938 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2075900859 0 0 0 0 783792055 934918585 0 263961531 4206607291 4290493371 4290493371 4172987066 4256873146 4290493371 4290493371 3686447802 16777216 0 0 0 0 0 0 800635064 4290493371 4290493371 4290493371 1002093242 1069202106 4240095930 4290493371 4223384507 330215086 0 0 0 0 0 0 565819833 4139498427 4290493371 3149642683 0 0 1840888249 3367680698 1136310970 0 0 0)! ! !SmallCogState2 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 16! ! !SmallCogState2 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! nextState ^ SmallCogState3 new! ! !SmallCogState2 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! stepTime ^ 50! ! !SmallCogState3 commentStamp: '' prior: 77715307! Last state of a small cog turning animation! !SmallCogState3 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:47'! imageData ^ #(0 0 0 0 347321267 3401300923 4290493371 2377824954 0 0 431536312 1488566713 93952409 0 0 0 0 0 0 0 901232567 4290493371 4290493371 4139498427 297055412 330215086 3619338938 4290493371 3418012346 229749169 0 0 0 0 0 0 448445114 4290493371 4290493371 4290493371 3283860411 3451632571 4290493371 4290493371 4290493371 498710969 0 0 41975936 2931473082 3132799674 1555741370 1924840122 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3065690810 0 0 0 1505409722 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3015424955 229749169 817543866 632994490 1085781943 4156275643 4290493371 4290493371 4290493371 4290493371 4290493371 3585850299 3367680698 4256873146 4290493371 4290493371 4290493371 4290493371 4290493371 4172987066 0 901232567 3870997178 4290493371 4290493371 4290493371 1689959098 0 0 934918585 4105878202 4290493371 4290493371 4290493371 4290493371 4290493371 0 0 3082533819 4290493371 4290493371 3350903482 0 0 0 0 2545597114 4290493371 4290493371 4290493371 4273716155 3048913594 1152956600 3032202171 4256873146 4290493371 4290493371 2981804730 0 0 0 0 2260384442 4290493371 4290493371 4122655418 599176886 0 4273716155 4290493371 4290493371 4290493371 4290493371 4105878202 448445114 0 0 229749169 3686447802 4290493371 4290493371 3887840187 381270457 0 4139498427 4290493371 4290493371 4290493371 4290493371 4290493371 3770399675 1941617338 1840888249 3552230074 4290493371 4290493371 4290493371 4290493371 3787176891 767278011 1656338873 2528885691 1941617338 3552230074 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 2696592058 0 0 0 1438300858 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 4290493371 3703290811 2814032570 4156275643 4273716155 901232567 0 0 0 3267083195 4290493371 4290493371 4273716155 4172987066 4290493371 4290493371 4290493371 1102624952 0 279949231 716617398 0 0 0 0 3954949051 4290493371 4290493371 1958460347 364295862 4122655418 4290493371 4290493371 1522252731 0 0 0 0 0 0 0 532002229 2730146490 2109389498 0 0 2646326203 4290493371 4290493371 1455143867 0 0 0 0)! ! !SmallCogState3 class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 22:43'! size ^ 16! ! !SmallCogState3 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! nextState ^ SmallCogInitialState new! ! !SmallCogState3 methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:42'! stepTime ^ 50! ! !LoadingThenOkState commentStamp: '' prior: 77715411! I am an abstract class representing the state of the LoadingThenOk widget the different states are: ok, error, loading. I must define an image used to render the state! !ErrorState commentStamp: '' prior: 77715633! I am the state when there was an error during the loading! !ErrorState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:23'! image ^ Smalltalk ui icons smallCancelIcon asMorph! ! !LoadingState commentStamp: '' prior: 77715745! I am the state used while loading! !LoadingState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:18'! image ^ LoadingMorph new applyState: SmallCogInitialState new; yourself! ! !LoadingThenOkState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:18'! image ^ self subclassResponsibility! ! !OkState commentStamp: '' prior: 77715828! I am the state showing everything is ok! !OkState methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:23'! image ^ Smalltalk ui icons smallOkIcon asMorph! ! !MCKomitSubmitter commentStamp: '' prior: 77715926! I am a class dedicated to the transformation of a Komit object into a MCCommit and its submission! !MCKomitSubmitter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 11/26/2013 13:18'! komit: komit ^ self new komit: komit; yourself! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 21:01'! commitKomit: aKomit | versions | versions := self createVersionFor: aKomit. versions do: [ :version | Cursor wait showWhile: [ [ self storeVersion: version for: aKomit; storeDependencies: version for: aKomit ] ensure: [ (MCVersionInspector new version: version) show ] ] ]! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:20'! commitSlice: aSlice | versions slice view workingCopy version | slice := MCSliceInfo new. view := KomitSliceUI new. view openDialogWithSpec modalRelativeTo: World. view cancelled ifTrue: [ ^ self ]. slice issueNumber: view issueNumberText. slice issueSummary: view titleText. versions := self createVersionFor: aSlice. slice includedPackages: versions. workingCopy := slice makeSlice. version := workingCopy newVersionWithMessage: aSlice message in: aSlice remote remote. Cursor wait showWhile: [ [ self storeVersion: version for: aSlice; storeDependencies: version for: aSlice ] ensure: [ (MCVersionInspector new version: version) show ] ]! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 16:59'! createVersionFor: aKomitableObject | versions currentAuthor | currentAuthor := Author fullNamePerSe. Author fullName: aKomitableObject author. [ versions := aKomitableObject entities keys collect: [ :each | | workingCopy name version patcher | workingCopy := each package workingCopy. name := workingCopy uniqueVersionNameIn: aKomitableObject repository. version := workingCopy silentlyNewVersionWithName: name message: aKomitableObject message in: aKomitableObject repository. workingCopy modified: each isFullyCommited not. patcher := MCPatcher snapshot: each patch base. (aKomitableObject entities at: each) do: [ :e | e operation applyTo: patcher ]. version := MCVersion package: version package info: version info snapshot: patcher patchedSnapshot dependencies: version dependencies. KomitPackage removePackage: each. version ] ] ensure: [ Author fullName: currentAuthor ]. ^ versions! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 13:34'! retryOnCredentialRequest: aBlock aBlock on: MCPermissionDenied do: [ :error | |credentials| credentials := MCCredentialsRequest signalUrl: self repository location username: self repository user password: self repository password. credentials ifNotNil: [ self repository credentials: credentials. ^ self retryOnCredentialRequest: aBlock ]]! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 21:14'! storeDependencies: newVersion for: aKomit self retryOnCredentialRequest: [ aKomit repository storeDependencies: newVersion ]! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 21:14'! storeVersion: newVersion for: aKomit self retryOnCredentialRequest: [ aKomit repository storeVersion: newVersion ]! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:18'! submitCommit: aKomit MCSaveVersionDialog addAsLastLogMessage: aKomit message asString. aKomit commitOn: self ! ! !MCClassDefinition methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/21/2013 21:57'! addOperation: aMCRemoval on: aKOClass aKOClass addClassDefinition: aMCRemoval! ! !KomitLoadingNode commentStamp: '' prior: 77716082! I am a special node diaplyed when the retreiving of information is going on! !KomitLoadingNode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:05'! icon ^ LoadingMorph new! ! !KomitLoadingNode methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 11/24/2013 21:04'! label ^ 'Loading...' asTextMorph italic ! ! !KomitNode commentStamp: '' prior: 77716209! I am an abstract class representing a node in the tree! !KomitClassNode commentStamp: '' prior: 77716320! I am a node in the Komit tree representing a class! !KomitClassNode class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/26/2013 17:22'! addedClassIcon ^ addedClassIcon ifNil: [ addedClassIcon := (self defaultClassIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: Smalltalk ui icons overlayAddIconContents readStream)) ].! ! !KomitClassNode class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/26/2013 15:33'! defaultClassIcon ^ Smalltalk ui icons classIcon! ! !KomitClassNode class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/26/2013 17:22'! deletedClassIcon ^ deletedClassIcon ifNil: [ deletedClassIcon := (self defaultClassIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: Smalltalk ui icons overlayRemoveIconContents readStream)) ].! ! !KomitClassNode class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/26/2013 17:22'! modifiedClassIcon ^ modifiedClassIcon ifNil: [ modifiedClassIcon := (self defaultClassIcon asFormOfDepth: 32) mergeBottomRightWith: (Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: Smalltalk ui icons overlayModificationIconContents readStream)) ].! ! !KomitClassNode methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 14:22'! getDefinitions ^ self content definitions! ! !KomitClassNode methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 14:21'! getMethods ^ self content methods! ! !KomitClassNode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 15:40'! icon self content added ifTrue: [ ^ self class addedClassIcon ]. self content modified ifTrue: [ ^ self class modifiedClassIcon ]. self content removed ifTrue: [ ^ self class deletedClassIcon ]. ^ self class defaultClassIcon! ! !KomitClassNode methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 21:28'! initialize super initialize. self whenSelectedChanged: [ :aBoolean | self parentNode ifNotNil: [ :parent | parent checkChildren ]. self ifNotSilentDo: [ aBoolean ifTrue: [ self selectAllChildren ] ifFalse: [ self unselectAllChildren ] ] ]. self whenContentChanged: [ :c || childrenNode | self hasContentToShow: c isDirty. childrenNode := self getDefinitions collect: [ :each | KomitDefinitionNode new content: each; yourself ]. childrenNode addAll: (self getMethods collect: [ :each | KomitMethodNode new content: each; yourself ]). self children: [ childrenNode ] ]! ! !KomitClassNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 21:41'! label ^ self content trackedClass! ! !KomitClassNode methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:58'! printOn: aStream super printOn: aStream. aStream << '[ '. self content trackedClass printOn: aStream. aStream << ' ]'.! ! !KomitLeaf commentStamp: '' prior: 77716422! I am an abstract class for tree leaves! !KomitDefinitionNode commentStamp: '' prior: 77716522! I am a node wrapping a KomitDefinition! !KomitDefinitionNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 15:31'! label ^ 'Class Definition'! ! !KomitLeaf methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:09'! icon self content added ifTrue: [ ^ Smalltalk ui icons changeAddIcon ]. self content modified ifTrue: [ ^ Smalltalk ui icons changeUpdateIcon ]. self content removed ifTrue: [ ^ Smalltalk ui icons changeRemoveIcon ]. ^ nil! ! !KomitLeaf methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 13:46'! initialize super initialize. self children: [ #() ]. self hasContentToShow: true. self whenSelectedChanged: [ :aBoolean | self parentNode ifNotNil: [ :parent | parent checkChildren ] ]! ! !KomitMethodNode commentStamp: '' prior: 77716618! I am a node in the Komit tree representing a method! !KomitMethodNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 15:31'! label ^ self content selector! ! !KomitNode methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/24/2013 21:25'! <= aKomitNode ^ self content <= aKomitNode content! ! !KomitNode methodsFor: 'as yet unclassified' stamp: 'BenjaminVanRyseghem 11/25/2013 16:49'! = anotherNode ^ self species = anotherNode species and: [ self content = anotherNode content ]! ! !KomitNode methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/22/2013 13:30'! checkChildren self silentWhile: [ (self children value allSatisfy: [ :e | e selected ]) ifTrue: [ self selected: true ] ifFalse: [ self selected: false ] ]! ! !KomitNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 20:37'! icon self subclassResponsibility! ! !KomitNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 14:11'! ifNotSilentDo: aBlock silent ifFalse: aBlock! ! !KomitNode methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 14:25'! initialize silent := false. super initialize. self whenSelectedChanged: [ :aBoolean | self content selected: aBoolean ]. self whenIsExpandedChanged: [ :aBoolean | self content expanded: aBoolean ]. self whenContentChanged: [ :c | self silentWhile: [ self selected: c selected ]. self isExpanded: c expanded ]! ! !KomitNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 20:36'! label self subclassResponsibility! ! !KomitNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 13:30'! silentWhile: aBlock | oldSilent | oldSilent := silent. silent := true. aBlock value. silent := oldSilent! ! !KomitPackageNode commentStamp: '' prior: 77716728! I am a node in the Komit tree representing a package! !KomitPackageNode methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/24/2013 14:17'! getClasses ^ self content classes! ! !KomitPackageNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 15:41'! icon ^ Smalltalk ui icons dirtyPackageIcon! ! !KomitPackageNode methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/24/2013 14:12'! initialize super initialize. self icon: Smalltalk ui icons dirtyPackageIcon. self whenSelectedChanged: [ :aBoolean | self ifNotSilentDo: [ aBoolean ifTrue: [ self selectAllChildren ] ifFalse: [ self unselectAllChildren ] ] ]. self whenContentChanged: [ :c || childrenNode | childrenNode := self getClasses collect: [ :each | KomitClassNode new content: each; yourself ]. self children: [ childrenNode ] ] ! ! !KomitPackageNode methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 11/21/2013 15:55'! isEmpty ^ self content patch operations isEmpty! ! !KomitPackageNode methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 21:06'! label ^ self content package name! ! !KomitPackageNode methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 11/21/2013 14:13'! printOn: aStream super printOn: aStream. aStream << '[ '. self content package name printOn: aStream. aStream << ' ]'.! ! !KomitSliceUI commentStamp: '' prior: 77716835! I am a UI used to retrieve a Slice title using its issue number! !KomitSliceUI class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/27/2013 12:50'! defaultSpec ^ SpecLayout composed newColumn: [ :col | col newRow: [ :row | row add: #loadingWidget width: self inputTextHeight; add: #issueNumber width: 90; add: #titleWidget ] height: self inputTextHeight; newRow: [ :row | ] ]; yourself! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 22:59'! encodeTitle: aTitle | allowedCharacters | allowedCharacters := ($A to: $Z) , ($a to: $z) , ($0 to: $9) , (Array with: $-). ^ String streamContents: [ :stream | aTitle do: [ :character | (' _' includes: character) ifTrue: [ stream << '-' ] ifFalse: [ (allowedCharacters includes: character) ifTrue: [ stream << character ] ] ] ]! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:45'! initialExtent ^ 600@100! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 23:46'! initialize super initialize. valid := false asValueHolder! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 23:48'! initializeDialogWindow: aWindow valid whenChangedDo: [ :b | aWindow toolbar okButton enabled: b ]. aWindow toolbar okButton enabled: false. issueNumber bindKeyCombination: $m control toAction: [ self valid ifTrue: [ aWindow triggerOkAction ] ]! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 23:44'! initializeWidgets issueNumber := self newTextInput. titleWidget := self newTextInput. loadingWidget := self instantiate: LoadingThenOk. titleWidget enabled: false; ghostText: 'Title'. issueNumber ghostText: 'Issue number'. issueNumber autoAccept: true; acceptBlock: [ :text | fork ifNotNil: [ fork terminate ]. loadingWidget loading. self valid: false. fork := [ | response | response := ZnEasy client url: 'http://bugs.pharo.org/issues/name/', text asString; get; response. self setTitleFrom: response ] fork ]. self focusOrder add: issueNumber! ! !KomitSliceUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 22:51'! issueNumber ^ issueNumber! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:05'! issueNumberText ^ issueNumber text! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:25'! loading ^ self state: LoadingState new! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 22:52'! loading: aBoolean loading value: aBoolean! ! !KomitSliceUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 22:51'! loadingWidget ^ loadingWidget! ! !KomitSliceUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 23:44'! setTitleFrom: aZnResponse aZnResponse isError ifTrue: [ titleWidget text: 'Error !!'. loadingWidget error ] ifFalse: [ titleWidget text: (self encodeTitle: aZnResponse entity string). self valid: true. loadingWidget ok ]! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 00:10'! title ^ 'Retrieve Slice title'! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 13:06'! titleText ^ titleWidget text! ! !KomitSliceUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 22:51'! titleWidget ^ titleWidget! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:16'! valid ^ valid value! ! !KomitSliceUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:16'! valid: aBoolean valid value: aBoolean! ! !KomitterUI commentStamp: '' prior: 77716951! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !KomitterUI class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/26/2013 22:14'! defaultSpec ^ SpecLayout composed newRow: [ :row | row newColumn: [ :c1 | c1 add: #tree; newRow: [ :r | r newColumn: [ :c | c newRow: [ :row1 | row1 add: #commitMessage; add: #previousMessages width: self buttonHeight ] height: self buttonHeight; add: #message ]; newColumn: [ :c | c newRow: [:r1 | ] height: self buttonHeight; newRow: [ :r1 | r1 add: #authorName width: 50; add: #author ] height: self inputTextHeight +4 ; add: #checkCommit height: self buttonHeight; newRow: [ :r1 | r1 add: #remoteLabel width: 50; add: #remotes ] height: self buttonHeight + 4 ] width: 250 ] height: (4*self buttonHeight + 12) ] ] bottom: 0.4; addHSplitter; newRow: [ :row | row add: #diff ] top: 0.6! ! !KomitterUI class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/24/2013 14:47'! historyIcon ^ historyIcon ifNil: [ historyIcon := Pharo3UIThemeIcons form16x16FromContents: self historyIconData ]! ! !KomitterUI class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/25/2013 20:13'! historyIconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286673726 4286673726 4286673726 4286673726 4286673726 0 0 0 4278217148 4278217148 4278217148 4278217148 4286673726 4286673726 0 0 4288516712 4294967295 4294967295 4294967295 4294967295 4286673726 4286673726 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288516712 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288253803 4294967295 4291942109 4291482074 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288253803 4284839308 0 4287925358 4294967295 4294967295 4294967295 4290759126 4290759126 4294967295 4278217148 4286038527 4286038527 4286039039 4278217148 4294967295 4287925358 4284707465 0 4287465586 4294705151 4291942109 4291482074 4294705151 4294705151 4294705151 4278216120 4285971967 4285971967 4285971967 4278216633 4294705151 4287465586 4284444294 0 4287005814 4294376959 4294376959 4294376959 4290759126 4290759126 4294376959 4278215349 4285840127 4285840127 4285840127 4278215862 4294376959 4287005814 4284115330 0 4286480763 4294114047 4291942109 4291482074 4294114047 4294114047 4294114047 4278214064 4285708287 4285643519 4285708799 4278214319 4294114047 4286480763 4283786365 0 4286086271 4293785343 4293785343 4293785343 4290759126 4290759126 4293785343 4278213034 4285641983 4285641983 4285641983 4278213034 4293785343 4286086271 4283391608 0 4285626499 4293522687 4293522687 4293522687 4293522687 4293522687 4293522687 4278211492 4285444351 4285378815 4285378815 4278212003 4293457151 4285626499 4283062642 0 4285298055 4285298055 4285298055 4285298055 4285298055 4293325311 4293325311 4278210466 4285116671 4285116671 4285181951 4278210465 4285298055 4285298055 4282733421 0 0 4282207077 4282207077 4282207077 4285035401 4285035401 4285035401 4278209949 4284918783 4284786943 4284787455 4278209949 4282141286 4282207077 4282207078 0 0 0 0 0 4282141542 4282009699 4282009699 4278209949 4284721919 4278209949 4284525311 4278209949 0 0 0 0 0 0 0 0 0 0 0 4278209949 4278209949 0 4278209949 4278209949 0 0 0 0 0 0 0 0 0 0 0 0 4278209949 0 0 4278209949 0 0 0)! ! !KomitterUI class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/27/2013 17:32'! taskbarIcon ^ Komitter taskbarIcon! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 21:23'! addRoot: aPackage | aPackageNode | aPackageNode := KomitTreeBuilder buildRootForPackage: aPackage. tree roots: (tree roots add: aPackageNode; sorted)! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 14:33'! author ^ author! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 14:39'! authorName ^ authorName! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/27/2013 15:28'! cancel message accept. Komitter lastMessage: message text! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 17:26'! checkCommit ^ checkCommit! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/27/2013 15:29'! chooseFromPreviousMessages | list index | list := MCSaveVersionDialog previousMessages collect: [:s | s truncateWithElipsisTo: 80 ]. list ifEmpty: [ UIManager default inform: 'No previous log message was entered'. ^ self ]. index := UIManager default chooseFrom: list. "no comment was selected" index isZero ifTrue: [ ^ self ]. message text: (MCSaveVersionDialog previousMessages at: index); takeKeyboardFocus! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 10:27'! commitMessage ^ commitMessage! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/27/2013 16:57'! commitableEntities | map | map := Dictionary new. tree roots do: [ :e || nodes | e content isFullyCommited: e selected. nodes := e allSelectedItems collect: [ :each | each content ] thenSelect: [ :each | each isCommitable ]. nodes ifNotEmpty: [ map at: e content put: nodes ] ]. ^ map! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 17:15'! diff ^ diff! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/22/2013 14:52'! initialExtent ^ (700@550)! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 13:00'! initialize model := nil asValueHolder. canCommit := false asValueHolder. super initialize. model whenChangedDo: [ :m | [ self populateTreeFor: m ] fork. message text: m lastMessage. self populateRemotes ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 11:56'! initializeDialogWindow: aWindow self removeKeyCombination: $m control. self bindKeyCombination: $m control toAction: [ aWindow triggerOkAction ]. aWindow toolbar okButton enabled: canCommit value. canCommit whenChangedDo: [ :b | aWindow toolbar okButton enabled: b ]. self focusOrder removeAll; add: message; add: remotes; add: aWindow toolbar; add: tree; add: previousMessages! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 10:20'! initializeLatelyPresenter tree whenHighlightedItemChanged: [ :item | diff leftText: (self leftTextFor: item); rightText: (self rightTextFor: item). (item isNil or: [ item added ]) ifTrue: [ diff showOnlyDestination: true ] ifFalse: [ ( item removed or: [ item isPackage or: [ (item isClass and: [ item isDirty not ]) ] ] ) ifTrue: [ diff showOnlySource: true ] ifFalse: [ diff showBoth ] ] ]. tree whenSelectedItemsChanged: [ self updateRemotes ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/27/2013 15:28'! initializeWidgets tree := self instantiate: TreeWithLoading. diff := self instantiate: DiffModel. message := self newText. author := self newTextInput. authorName := self newLabel. commitMessage := self newLabel. remotes := self newDropList. remoteLabel := self newLabel. checkCommit := self newCheckBox. previousMessages := self newButton. tree removeOnlyLastSelected: true; autoMultiSelection: true; columns: { TreeColumnModel new displayBlock: [:node | node label ] }. diff showOptions: false; leftText: 'No selection for diff'. authorName label: 'Author:'. commitMessage label: 'Commit message:'. remoteLabel label: 'Remote:'. checkCommit label: 'Check Lint rules (NOT YET WORKING)'; labelClickable: true; state: false; enabled: false. author text: Author fullNamePerSe; autoAccept: true. previousMessages icon: self class historyIcon; action: [ self chooseFromPreviousMessages ]; bindKeyCombination: Character space asKeyCombination toAction: [ previousMessages action value ]; help: 'Previous messages'. message bindKeyCombination: Character tab asKeyCombination toAction: [ self giveFocusToNextFrom: message ]; bindKeyCombination: Character tab shift toAction: [ self giveFocusToPreviousFrom: message ]; wantsVisualFeedback: false. self whenBuiltDo: [ checkCommit labelOnLeft. diff showOnlySource: true. message selectAll. self updateRemotes ].! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 21:25'! komit "Gather all the data and create a Komit object out of them" ^ remotes selectedItem komitOn: self! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/21/2013 21:16'! leftTextFor: aKOObject aKOObject ifNil: [ ^ '' ]. ^ aKOObject koSourceText! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 10:27'! message ^ message! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 20:33'! model ^ model value! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/23/2013 20:37'! model: aModel model value: aModel! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 21:26'! newKomitFor: aRemote "Gather all the data and create a Komit object out of them" ^ Komit new message: message text; author: author text; timestamp: DateAndTime now; entities: self commitableEntities; unselectedEntities: self uncommittedCommitableEntitied; remote: aRemote; yourself! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 21:26'! newSliceFor: aRemote "Gather all the data and create a Komit object out of them" ^ Slice new message: message text; author: author text; timestamp: DateAndTime now; entities: self commitableEntities; unselectedEntities: self uncommittedCommitableEntitied; remote: aRemote; yourself! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 20:14'! populateRemotes remotes items: self model remotes asOrderedCollection; displayBlock: [ :each | each label ]; iconHolder: [ :each | each icon ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/23/2013 23:39'! populateRemotesFor: aCollection remotes items: (self model remotesFor: aCollection) asOrderedCollection; displayBlock: [ :each | each label ]; iconHolder: [ :each | each icon ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/26/2013 10:16'! populateTreeFor: newModel | roots | roots := (KomitTreeBuilder rootsForStagingArea: newModel stagingArea) asOrderedCollection sorted. tree loading: false. tree beCheckList; roots: roots; expandAll; collapseAll; expandRoots. self initializeLatelyPresenter. canCommit value: true.! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 10:27'! previousMessages ^ previousMessages! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 10:27'! remoteLabel ^ remoteLabel! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/22/2013 16:58'! remotes ^ remotes! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 10:26'! removeRoot: aKomitPackage | roots highlight | highlight := tree highlightedItem. roots := tree roots. roots remove: (KomitPackageNode new content: aKomitPackage; yourself). tree roots: roots. highlight takeHighlight! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/21/2013 21:10'! rightTextFor: aKOObject aKOObject ifNil: [ ^ '' ]. ^ aKOObject koDestinationText! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/21/2013 15:40'! roots: aCollection tree roots: aCollection! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/24/2013 15:16'! title ^ 'Commit changes'! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/21/2013 15:39'! tree ^ tree! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 12:28'! uncommittedCommitableEntitied | map | map := Dictionary new. tree roots select: [ :e | e isPartialMatch ] thenDo: [ :e || nodes | nodes := e allUnselectedItems collect: [ :each | each content ] thenSelect: [ :each | each isCommitable ]. nodes ifNotEmpty: [ map at: e content put: nodes ] ]. ^ map! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/23/2013 23:40'! updateRemotes | roots | roots := tree roots select: [ :e | e isPartialMatch ] thenCollect: [ :e | e content ]. roots ifEmpty: [ self populateRemotes ] ifNotEmpty: [ self populateRemotesFor: roots ]! ! !KomitterUI methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 20:21'! validate self commitableEntities ifEmpty: [ tree takeKeyboardFocus. self inform: 'The selection should contain commitable entities'. ^ false ]. message accept. ^ true! ! !LoadingThenOk commentStamp: '' prior: 77717105! Small widget displaying a small cog turning while loading, then a ok tick when loading is done! !LoadingThenOk class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/26/2013 23:24'! defaultSpec ^ SpecLayout composed add: #currentImage; yourself! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:38'! currentImage ^ self state image asSpecAdapter! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:20'! error self state: ErrorState new! ! !LoadingThenOk methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2013 23:24'! initialize super initialize. state := ErrorState new asValueHolder. state whenChangedDo: [ :s | self rebuildForState: s ]! ! !LoadingThenOk methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/26/2013 22:35'! initializeWidgets! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:20'! loading self state: LoadingState new! ! !LoadingThenOk methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 23:37'! newSpec ^ SpecLayout composed add: #currentImage; yourself! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:20'! ok self state: OkState new! ! !LoadingThenOk methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/26/2013 23:38'! rebuildForState: aState self needRebuild: false. self buildWithSpecLayout: self newSpec. self focusOrder removeAll! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:20'! state ^ state value! ! !LoadingThenOk methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/26/2013 23:20'! state: anObject state value: anObject! ! !TreeWithLoading commentStamp: '' prior: 77717257! Wrap a tree with a loading page! !TreeWithLoading class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/25/2013 14:18'! defaultSpec ^ SpecLayout composed add: #loadingAnimation; yourself! ! !TreeWithLoading methodsFor: 'reflective operations' stamp: 'BenjaminVanRyseghem 11/25/2013 14:31'! doesNotUnderstand: aMessage ^ tree perform: aMessage selector withArguments: aMessage arguments! ! !TreeWithLoading methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/25/2013 14:18'! initialize super initialize. loading := true asValueHolder. loading whenChangedDo: [ :boolean | boolean ifTrue: [ self showLoading ] ifFalse: [ self showTree ] ]! ! !TreeWithLoading methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/25/2013 14:18'! initializeWidgets tree := self newTree! ! !TreeWithLoading methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/25/2013 14:14'! loading ^ loading value! ! !TreeWithLoading methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/25/2013 14:14'! loading: anObject loading value: anObject! ! !TreeWithLoading methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/26/2013 22:36'! loadingAnimation ^ LoadingMorph new applyState: BigCogInitialState new; asSpecAdapter! ! !TreeWithLoading methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 14:18'! loadingSpec ^ SpecLayout composed add: #loadingAnimation; yourself! ! !TreeWithLoading methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 16:33'! showLoading self needRebuild: false. self buildWithSpecLayout: self loadingSpec. self focusOrder removeAll! ! !TreeWithLoading methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 16:33'! showTree self needRebuild: false. self buildWithSpecLayout: self treeSpec. self focusOrder removeAll; add: tree! ! !TreeWithLoading methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/25/2013 14:13'! tree ^ tree! ! !TreeWithLoading methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/25/2013 14:17'! treeSpec ^ SpecLayout composed add: #tree; yourself! ! RPackageBenchmark class removeSelector: #runForLog! RPackageBenchmark class removeSelector: #resetOrganizerToBenchmark! RPackageBenchmark class removeSelector: #organizerToBenchmark! Smalltalk globals removeClassNamed: #RPackageBenchmark! RPackageOrganizer removeSelector: #update:! RPackageOrganizer removeSelector: #shouldDefineAPackage:! RPackageOrganizer removeSelector: #isDefinedPackageInMC:! RPackageOrganizer removeSelector: #initializeFromSystem! RPackageOrganizer class removeSelector: #rpackageNames! RPackageOrganizer class removeSelector: #packageInfoNames! RPackageOrganizer class removeSelector: #computeDiffWithMC! "Komitter"! "Monticello"! "Nautilus"! "RPackage-Core"! "RPackage-SystemIntegration"! ----End fileIn----! ----QUIT----2013-11-28T17:16:55.112704+01:00 Pharo.image priorSource: 27369078! ----STARTUP----2013-11-28T17:22:16.282947+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-28T17:22:16.464945+01:00 Pharo-30606.image priorSource: 27826530! ----STARTUP----2013-11-29T12:39:54.655614+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/29/2013 12:37' prior: 77701029! commentForCurrentUpdate ^ '12269 Add support for easily centering a window https://pharo.fogbugz.com/f/cases/12269 12270 Remove unused TreeNode classes https://pharo.fogbugz.com/f/cases/12270 12275 RxsCharSet>>isEnumerable must be using anySatisfy https://pharo.fogbugz.com/f/cases/12275 12267 Nautilus Search Bar should not resize https://pharo.fogbugz.com/f/cases/12267'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/29/2013 12:37'! script262 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.603.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.100.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.289.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-StephaneDucasse.16.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-StephaneDucasse.177.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.81.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/29/2013 12:37'! update30607 "self new update30607" self withUpdateLog: '12269 Add support for easily centering a window https://pharo.fogbugz.com/f/cases/12269 12270 Remove unused TreeNode classes https://pharo.fogbugz.com/f/cases/12270 12275 RxsCharSet>>isEnumerable must be using anySatisfy https://pharo.fogbugz.com/f/cases/12275 12267 Nautilus Search Bar should not resize https://pharo.fogbugz.com/f/cases/12267'. self loadTogether: self script262 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI methodsFor: 'displaying' stamp: 'BenjaminVanRyseghem 11/28/2013 16:43' prior: 77380255! buildSecondColumn: aWindow | buttons | buttons := PanelMorph new. buttons changeProportionalLayout; addMorph: self buildInstanceButton fullFrame: ( (0@0 corner: 0.5@0 ) asLayoutFrame bottomRightOffset: -2@25 ); addMorph: self buildCommentButton fullFrame: (( 0.5@0 corner: 1@0 ) asLayoutFrame topLeftOffset: 2@0 ; bottomRightOffset: 0@25 ); hResizing: #spaceFill; vResizing: #rigid; height: 25. ^PanelMorph new changeProportionalLayout; addMorph: self buildList2 fullFrame: (LayoutFrame identity bottomOffset: -29); addMorph: buttons fullFrame: ( (0@1 corner: 1@1 ) asLayoutFrame topOffset: -25); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !NautilusUI methodsFor: 'displaying' stamp: 'BenjaminVanRyseghem 11/28/2013 16:46' prior: 38165174! buildColumns: aWindow height: height | delta | delta := StandardFonts defaultFont height + 15. aWindow addMorph: (self buildFirstColumn: aWindow) fullFrame: ((0 @ 0 corner: 0.25 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildSecondColumn: aWindow) fullFrame: ((0.25 @ 0 corner: 0.5 @ 0.5) asLayoutFrame topOffset: height ). aWindow addMorph: (self buildThirdColumn: aWindow) fullFrame: ( (0.5 @ 0 corner: 0.75 @ 0.5) asLayoutFrame topOffset: height ; bottomOffset: delta negated). aWindow addMorph: (self buildFourthColumn: aWindow) fullFrame: ( (0.75 @ 0 corner: 1 @ 0.5) asLayoutFrame topOffset: height; bottomOffset: delta negated). aWindow addMorph: self buildNavigationList fullFrame: ((0.5 @ 0.5 corner: 1 @ 0.5) asLayoutFrame topOffset: delta negated).! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:11'! centered self widgetDo: [ :w | w fullBounds; position: Display extent - w extent // 2 ]! ! !MorphicWindowAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:18'! centeredRelativeTo: aModel self widgetDo: [ :w | aModel centerWidget: w ]! ! !RxsCharSet methodsFor: 'testing' stamp: 'GabrielOmarCotelli 11/28/2013 19:03' prior: 32482495! isEnumerable ^elements anySatisfy: [:some | some isEnumerable ]! ! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'BenjaminVanRyseghem 11/28/2013 16:53' prior: 77526660! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton fullFrame: ((0@0 corner: 0.5@1) asLayoutFrame rightOffset: -2); addMorph: self buildToggleButton fullFrame: ((0.5@0 corner: 1@1) asLayoutFrame topLeftOffset: 2@0); hResizing: #spaceFill; vResizing: #spaceFill. ^ PanelMorph new changeProportionalLayout; addMorph: self buildPackageSearch fullFrame: (LayoutFrame identity bottomFraction: 0; bottomOffset: 25; leftOffset: -1; rightOffset: 1); addMorph: self buildList fullFrame: (LayoutFrame identity topOffset: 30; bottomOffset: -30); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25; bottomOffset: -1); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !MorphicContainerAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:20'! centerWidget: aWindow self widgetDo: [ :w| w centerWidget: aWindow ]! ! NameFilteringTreeNode removeSelector: #matchTokenFilter:! Smalltalk globals removeClassNamed: #NameFilteringTreeNode! FilteringTreeNode removeSelector: #updateAccordingTo:! FilteringTreeNode removeSelector: #matchTokenFilter:! FilteringTreeNode removeSelector: #isEmpty! FilteringTreeNode removeSelector: #contents! Smalltalk globals removeClassNamed: #FilteringTreeNode! DefaultSpecTreeNode removeSelector: #matchTokenFilter:! DefaultSpecTreeNode removeSelector: #childrenItems! Smalltalk globals removeClassNamed: #DefaultSpecTreeNode! "Nautilus"! "Regex-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-29T12:40:01.351603+01:00 Pharo.image priorSource: 27826727! ----STARTUP----2013-11-29T12:45:28.64257+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T12:45:28.816566+01:00 Pharo-30607.image priorSource: 27842832! ----STARTUP----2013-11-29T13:04:43.3301+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/29/2013 13:02' prior: 78158674! commentForCurrentUpdate ^ '12271 Add keyboard focus on PreDebuggerWindow https://pharo.fogbugz.com/f/cases/12271 12277 Cleanup some Network methods https://pharo.fogbugz.com/f/cases/12277 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/29/2013 13:02'! script263 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.603.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.289.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.134.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.81.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-StephaneDucasse.288.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/29/2013 13:02'! update30608 "self new update30608" self withUpdateLog: '12271 Add keyboard focus on PreDebuggerWindow https://pharo.fogbugz.com/f/cases/12271 12277 Cleanup some Network methods https://pharo.fogbugz.com/f/cases/12277 '. self loadTogether: self script263 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Socket class methodsFor: 'utilities' stamp: 'GabrielOmarCotelli 11/28/2013 19:27' prior: 50435656! nameForWellKnownTCPPort: portNum "Answer the name for the given well-known TCP port number. Answer a string containing the port number if it isn't well-known." | portList | portList := #(#(7 'echo') #(9 'discard') #(13 'time') #(19 'characterGenerator') #(21 'ftp') #(23 'telnet') #(25 'smtp') #(80 'http') #(110 'pop3') #(119 'nntp')). ^ portList detect: [ :pair | pair first = portNum ] ifFound: [ :pair | pair last ] ifNone: [ 'port-' , portNum printString ]! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/28/2013 18:14' prior: 69322808! initialize debugger := nil asValueHolder. super initialize. self whenWindowChanged: [:w | w whenClosedDo: [ self clear ] ]. self bindKeyCombination: Character escape asKeyCombination toAction: [ self delete ]! ! !SpecPreDebugWindow methodsFor: 'building widgets' stamp: 'BenjaminVanRyseghem 11/28/2013 18:15' prior: 69325461! rebuildWidget | debuggingActions | debuggingActions := self preDebuggingActions. self widgets removeAll. self createWidgetsForActions: debuggingActions. self needFullRebuild: true. self needRebuild: false. self buildWithSpecLayout: (self dynamicLayoutForActions: debuggingActions). self takeKeyboardFocus. ! ! !NetworkSystemSettings class methodsFor: 'settings' stamp: 'GabrielOmarCotelli 11/28/2013 19:23' prior: 28360676! isHttpProxyException: serverName "Return true when serverName matches any of our HTTP proxy exceptions, else return false" ^ self httpProxyExceptions anySatisfy: [ :domainName | domainName match: serverName ]! ! "Network-Kernel"! "Settings-Network"! "Spec-Debugger"! ----End fileIn----! ----QUIT----2013-11-29T13:04:49.784085+01:00 Pharo.image priorSource: 27843028! ----STARTUP----2013-11-29T13:10:30.728673+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T13:10:31.26054+01:00 Pharo-30608.image priorSource: 27856295! ----STARTUP----2013-11-29T15:02:54.50789+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/29/2013 14:45' prior: 78174973! commentForCurrentUpdate ^ '12266 EyeTreeInspector inspect element opens on TreeNodeModel https://pharo.fogbugz.com/f/cases/12266 12185 Settings Browser does not show proper top-level help text https://pharo.fogbugz.com/f/cases/12185 12282 scoped browsing broken with new PackageTree https://pharo.fogbugz.com/f/cases/12282'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/29/2013 14:45'! script264 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.603.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.447.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.291.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.244.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.81.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/29/2013 14:45'! update30609 "self new update30609" self withUpdateLog: '12266 EyeTreeInspector inspect element opens on TreeNodeModel https://pharo.fogbugz.com/f/cases/12266 12185 Settings Browser does not show proper top-level help text https://pharo.fogbugz.com/f/cases/12185 12282 scoped browsing broken with new PackageTree https://pharo.fogbugz.com/f/cases/12282'. self loadTogether: self script264 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeTreeInspector methodsFor: 'accessing' stamp: 'PabloHerrero 11/29/2013 14:03' prior: 74086705! selectedElement self tree hasSelectedItem ifFalse: [ ^ nil ]. ^ self tree selectedItem content! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 12:58'! includesMethodCategory: aProtocol ofClass: aClass ^ self package includesMethodCategory: aProtocol ofClass: aClass ! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 12:57'! includesSelector: aSelector ofClass: aClass ^ self package includesSelector: aSelector ofClass: aClass! ! !SettingNode methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/29/2013 13:45' prior: 33176990! inputMorphFor: aContainer ^ self settingDeclaration ifNotNil: [:v | (v inputMorphFor: aContainer) ifNil: [ '' ]]! ! "RPackage-Core"! "Spec-Inspector"! "System-Settings"! ----End fileIn----! ----QUIT----2013-11-29T15:03:01.129891+01:00 Pharo.image priorSource: 27856492! ----STARTUP----2013-11-29T15:08:48.722727+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T15:08:48.894728+01:00 Pharo-30609.image priorSource: 27869165! ----STARTUP----2013-11-29T16:05:48.361265+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/29/2013 16:03' prior: 78188437! commentForCurrentUpdate ^ '12276 Remove not needed ifNotNil: check in OCASTSemanticAnalyzer>>visitSequenceNode: https://pharo.fogbugz.com/f/cases/12276 12286 TreeInspector menus do not work https://pharo.fogbugz.com/f/cases/12286'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/29/2013 16:03'! script265 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.603.mcz NautilusCommon-MarcusDenker.179.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.291.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.246.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.83.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/29/2013 16:03'! update30610 "self new update30610" self withUpdateLog: '12276 Remove not needed ifNotNil: check in OCASTSemanticAnalyzer>>visitSequenceNode: https://pharo.fogbugz.com/f/cases/12276 12286 TreeInspector menus do not work https://pharo.fogbugz.com/f/cases/12286'. self loadTogether: self script265 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'GabrielOmarCotelli 11/28/2013 19:14' prior: 39018045! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [ :node | self declareVariableNode: node ]. aSequenceNode parent isMethod ifTrue: [ aSequenceNode parent pragmas detect: [ :pragma | pragma isPrimitiveError ] ifFound: [ :pragma | self declareVariableNode: (RBVariableNode named: pragma arguments last value asString) ] ]. aSequenceNode statements do: [ :each | self visitNode: each ]. aSequenceNode temporaries do: [ :node | node binding isUnused ifTrue: [ self unusedVariable: node ] ]! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'PabloHerrero 11/29/2013 14:20' prior: 69676498! menu: aMenu shifted: aBoolean ^ (self model menu: aMenu shifted: aBoolean) buildWithSpec! ! !TreeModel methodsFor: 'protocol' stamp: 'PabloHerrero 11/29/2013 14:19' prior: 76529472! menu: aMenu shifted: aBoolean | menu | (self allowMenuOnNoItem not and: [ self selectedItems isEmpty ]) ifTrue: [ ^ nil ]. menuBlockHolder value ifNil: [ ^ nil ]. menuBlockHolder value isBlock ifFalse: [ ^ menuBlockHolder value ]. menu := MenuModel new. menuBlockHolder value cull: menu cull: aBoolean. ^ menu! ! "OpalCompiler-Core"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-11-29T16:05:55.753258+01:00 Pharo.image priorSource: 27869362! ----STARTUP----2013-11-29T16:11:41.052146+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T16:11:41.228142+01:00 Pharo-30610.image priorSource: 27882284! ----STARTUP----2013-11-29T16:38:47.399333+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/29/2013 16:36' prior: 78201309! commentForCurrentUpdate ^ '12288 groups menu in PackageTree is broken https://pharo.fogbugz.com/f/cases/12288 12283 drag&drop with PackageTree is not working fine https://pharo.fogbugz.com/f/cases/12283 12280 Nautilus treats should: messages as tests and tries to run them https://pharo.fogbugz.com/f/cases/12280'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/29/2013 16:37'! script266 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.605.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.144.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.291.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.106.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.32.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.246.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.83.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/29/2013 16:37'! update30611 "self new update30611" self withUpdateLog: '12288 groups menu in PackageTree is broken https://pharo.fogbugz.com/f/cases/12288 12283 drag&drop with PackageTree is not working fine https://pharo.fogbugz.com/f/cases/12283 12280 Nautilus treats should: messages as tests and tries to run them https://pharo.fogbugz.com/f/cases/12280'. self loadTogether: self script266 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PackageTreeModel methodsFor: 'drag and drop' stamp: 'EstebanLorenzano 11/29/2013 13:26' prior: 75419908! acceptDroppingMorph: aMorph event: evt inMorph: aTreeMorph | target items | target := (aTreeMorph scrollerSubMorphFromPoint: evt position) complexContents item. items := aMorph passenger. target ifNotNil: [ model dropInAPackage: items into: target ]! ! !PackageTreeGroupSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 14:47'! isReadOnly ^ self item isReadOnly ! ! !PackageTreeGroupSelection methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 14:47'! removable ^ self item removable ! ! !RGMethodDefinition methodsFor: '*NautilusCommon' stamp: 'EstebanLorenzano 11/29/2013 14:30' prior: 31693046! isTestMethod ^ (self methodClass inheritsFrom: TestCase) and: [ (self selector beginsWith: 'test') or: [ (self selector beginsWith: 'should') and: [ self numArgs isZero ] ] ]! ! !RGMethodDefinition methodsFor: '*NautilusCommon' stamp: 'EstebanLorenzano 11/29/2013 14:32'! numArgs ^ self selector asString numArgs! ! !CompiledMethod methodsFor: '*NautilusCommon' stamp: 'EstebanLorenzano 11/29/2013 14:28' prior: 19777477! isTestMethod ^ (self methodClass inheritsFrom: TestCase) and: [ (self selector beginsWith: 'test') or: [ (self selector beginsWith: 'should') and: [ self numArgs isZero ] ] ]! ! "Nautilus"! "NautilusCommon"! ----End fileIn----! ----QUIT----2013-11-29T16:38:53.959331+01:00 Pharo.image priorSource: 27882481! ----STARTUP----2013-11-29T16:44:49.924407+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T16:44:50.094409+01:00 Pharo-30611.image priorSource: 27895661! ----STARTUP----2013-11-29T17:24:43.590204+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 11/29/2013 17:20' prior: 78214428! commentForCurrentUpdate ^ '12274 ClassFactoryForTestCase do not clean properly created behaviors https://pharo.fogbugz.com/f/cases/12274 12287 ChangesBrowser on refactoring does not well display diffs https://pharo.fogbugz.com/f/cases/12287 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 11/29/2013 17:20'! script267 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.16.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.547.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.53.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.26.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-EstebanLorenzano.208.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.605.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.291.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-EstebanLorenzano.247.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.83.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.162.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.986.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 11/29/2013 17:20'! update30612 "self new update30612" self withUpdateLog: '12274 ClassFactoryForTestCase do not clean properly created behaviors https://pharo.fogbugz.com/f/cases/12274 12287 ChangesBrowser on refactoring does not well display diffs https://pharo.fogbugz.com/f/cases/12287 '. self loadTogether: self script267 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ChangesBrowser commentStamp: '' prior: 77501617! A ChangesBrowser is a browser used to browse a composite change wich gather all the wanted changes! !ClassFactoryForTestCase commentStamp: 'LaurentLaffont 4/15/2011 20:20' prior: 49013354! I'm useful when classes needs to be created during the execution of the test. This avoid polluting your unit tests with dummy and mock classes. A typical usage of it is: TestCase subclass: #YourTest instanceVariableNames: 'classFactory' YourTest>>setUp classFactory := ClassFactoryForTestCase new YourTest>>tearDown classFactory deleteClasses. YourTest>>testIsBehavior | cls | cls := classFactory newClass. self assert: cls isBehavior ! !ClassFactoryForTestCaseTest methodsFor: 'testing' stamp: 'ChristopheDemarey 11/28/2013 22:04' prior: 77645204! testDuplicateClassWithNewName | createdClass | createdClass := factory duplicateClass: TestCase withNewName: #MyTestClass. self assert: (factory createdClasses allSatisfy: [:class| self class environment includesKey: class name ]). factory cleanUp. self assert: (factory createdClasses allSatisfy: [:class| class isObsolete]). self deny: (ChangeSet current changedClassNames includes: createdClass).! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'CD 11/29/2013 15:40' prior: 77541695! whenSelectedItemChanged: aBlock "Set a block to perform when a new item is selected" selectionHolder whenChangedDo: [ :col | col ifNil: [ aBlock value: nil ] ifNotNil: [ col isEmpty ifTrue: [ aBlock value: nil ] ifFalse: [ aBlock value: (col last lastClicked ifTrue: [ col last content ] ifFalse: [ nil ]) ] ] ]! ! !ChangesBrowser commentStamp: '' prior: 78239193! A ChangesBrowser is a browser used to browse a composite change wich gather all the wanted changes! !ChangesBrowser class methodsFor: 'specs' stamp: 'CD 11/29/2013 16:28' prior: 77501815! defaultSpec ^ SpecLayout composed newColumn: [:c | c newColumn: [:c2 | c2 newRow: [ :r| r add: #scopeChooser ] height: 25; add: #changesTree ]; addSplitter; add: #textArea; newRow: [:r | r add: #acceptButton; add: #cancelButton] height: self toolbarHeight ]! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'CD 11/29/2013 16:18' prior: 76550448! accept self okToChange ifFalse: [ ^self ]. self pickedChanges do: [ :change | RBRefactoryChangeManager instance performChange: change content ]. window value delete! ! !ChangesBrowser methodsFor: 'protocol' stamp: 'CD 11/29/2013 16:19' prior: 18910975! change: aCompositeChange changesTree roots: (aCompositeChange whatToDisplayIn: self)! ! !ChangesBrowser methodsFor: 'accessing' stamp: 'CD 11/29/2013 16:21'! changesTree ^ changesTree! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'CD 11/29/2013 16:24'! initializeChangesTree changesTree beCheckList; removeOnlyLastSelected: true; autoMultiSelection: true; rootNodeHolder: [ :item | TreeNodeModel new content: item; hasContentToShow: true; children: [ changesTree childrenFor: item ] ]; displayBlock: [ :item | item nameToDisplay ]. self whenBuiltDo: [ changesTree selectAll ]! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'CD 11/29/2013 16:19' prior: 18909084! initializePresenter changesTree whenHighlightedItemChanged: [ :item | item ifNotNil: [ textArea text: (self buildDiffFor: item) ] ]! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'CD 11/29/2013 16:20' prior: 46678901! initializeWidgets cancelButton := self newButton. acceptButton := self newButton. changesTree := self newTree. textArea := self newText. self initializeAcceptButton. self initializeCancelButton. self initializeChangesTree. self initializeTextArea. self setFocus. self bindKeyCombination: $s command toAction: [ self accept ]; bindKeyCombination: Character escape toAction: [ self cancel ]! ! !ChangesBrowser methodsFor: 'private' stamp: 'CD 11/29/2013 16:19' prior: 18911705! pickedChanges ^ changesTree selectedItems! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'CD 11/29/2013 16:19' prior: 18910155! setFocus self focusOrder add: changesTree; add: textArea; add: acceptButton; add: cancelButton.! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'CD 11/29/2013 16:21' prior: 18910346! setShortcuts self changesTree attachKeymapCategory: #ChangesBrowserGlobalShortcuts targetting: self! ! !ClassFactoryForTestCase commentStamp: 'LaurentLaffont 4/15/2011 20:20' prior: 78239382! I'm useful when classes needs to be created during the execution of the test. This avoid polluting your unit tests with dummy and mock classes. A typical usage of it is: TestCase subclass: #YourTest instanceVariableNames: 'classFactory' YourTest>>setUp classFactory := ClassFactoryForTestCase new YourTest>>tearDown classFactory deleteClasses. YourTest>>testIsBehavior | cls | cls := classFactory newClass. self assert: cls isBehavior ! !ClassFactoryForTestCase methodsFor: 'cleaning' stamp: 'ChristopheDemarey 11/28/2013 22:09' prior: 49014800! delete: aBehavior aBehavior isObsolete ifTrue: [ ^ self ]. aBehavior removeFromChanges. (createdSilently includes: aBehavior) ifTrue: [ aBehavior removeFromSystemUnlogged ] ifFalse: [ aBehavior removeFromSystem ].! ! !ClassFactoryForTestCase methodsFor: 'initialization' stamp: 'ChristopheDemarey 11/28/2013 22:14' prior: 49015190! initialize super initialize. createdClasses := IdentitySet new. createdTraits := IdentitySet new. createdSilently := IdentitySet new.! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'ChristopheDemarey 11/28/2013 22:11' prior: 19266429! newClass ^ self newSubclassOf: self defaultSuperclass instanceVariableNames: '' classVariableNames: ''! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'ChristopheDemarey 11/28/2013 22:11' prior: 19266626! newClassInCategory: category ^ self newSubclassOf: self defaultSuperclass instanceVariableNames: '' classVariableNames: '' category: category! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'ChristopheDemarey 11/28/2013 22:12' prior: 49017459! newTrait ^ self newTraitNamed: self newTraitName uses: Array new category: self defaultCategoryPostfix! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'ChristopheDemarey 11/28/2013 22:12' prior: 49017654! newTraitInCategory: category ^ self newTraitNamed: self newTraitName uses: Array new category: category asSymbol.! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'ChristopheDemarey 11/29/2013 16:51' prior: 19267888! silentlyNewClassInCategory: category ^ self silentlyNewSubclassOf: self defaultSuperclass instanceVariableNames: '' classVariableNames: '' category: category! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'ChristopheDemarey 11/29/2013 16:51' prior: 19268155! silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString ^ self silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: self defaultCategoryPostfix! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'ChristopheDemarey 11/29/2013 16:53' prior: 49018705! silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString category: category | newClass | SystemAnnouncer uniqueInstance suspendAllWhile: [ newClass := aClass subclass: self newClassName instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: (self packageName, '-', category) asSymbol. ]. self createdClasses add: newClass. createdSilently add: newClass. ^newClass ! ! !ClassFactoryForTestCase methodsFor: 'creating - silently' stamp: 'ChristopheDemarey 11/29/2013 16:53' prior: 49019284! silentlyNewSubclassOf: aClass instanceVariableNames: ivNamesString classVariableNames: classVarsString package: packageName | newClass | SystemAnnouncer uniqueInstance suspendAllWhile: [ newClass := aClass subclass: self newClassName instanceVariableNames: ivNamesString classVariableNames: classVarsString poolDictionaries: '' category: packageName asSymbol. ]. self createdClasses add: newClass. createdSilently add: newClass. ^newClass ! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'MarianoMartinezPeck 4/19/2012 19:06' prior: 19269635! withNotificationsNewClass ^ self withNotificationsNewClassWithInstanceVariableNames: ''! ! !ClassFactoryForTestCase methodsFor: 'creating' stamp: 'ChristopheDemarey 11/28/2013 22:13' prior: 19269834! withNotificationsNewClassWithInstanceVariableNames: instanceVariableNames ^ self newSubclassOf: Object instanceVariableNames: instanceVariableNames classVariableNames: '' category: self defaultCategoryPostfix! ! ClassFactoryForTestCase removeSelector: #createdTraits:! ClassFactoryForTestCase removeSelector: #createdClasses:! ChangesBrowser removeSelector: #registerWidget:! ChangesBrowser removeSelector: #pickList! ChangesBrowser removeSelector: #labelClicked:! ChangesBrowser removeSelector: #initializePickList! "NautilusRefactoring"! "SUnit-Core"! "SUnit-Tests"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-11-29T17:24:51.084201+01:00 Pharo.image priorSource: 27895858! ----STARTUP----2013-11-29T17:30:39.574942+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-29T17:30:39.754942+01:00 Pharo-30612.image priorSource: 27916933! ----STARTUP----2013-11-30T09:52:49.598927+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 11/30/2013 09:45' prior: 78227809! commentForCurrentUpdate ^ '12291 Improvement in menus https://pharo.fogbugz.com/f/cases/12291 11994 Remove MenuMorph inform: https://pharo.fogbugz.com/f/cases/11994 12303 Rename category in TabModel to Deprecated30 https://pharo.fogbugz.com/f/cases/12303 12302 Move Compiler deprecated methods to Deprecated30 package again https://pharo.fogbugz.com/f/cases/12302 11439 Renaming --all-- protocol should not be possible https://pharo.fogbugz.com/f/cases/11439'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 11/30/2013 09:46'! script268 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.893.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.210.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.606.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.291.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.248.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.85.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 11/30/2013 09:49'! update30613 "self new update30613" self withUpdateLog: '12291 Improvement in menus https://pharo.fogbugz.com/f/cases/12291 11994 Remove MenuMorph inform: https://pharo.fogbugz.com/f/cases/11994 12303 Rename category in TabModel to Deprecated30 https://pharo.fogbugz.com/f/cases/12303 12302 Move Compiler deprecated methods to Deprecated30 package again https://pharo.fogbugz.com/f/cases/12302 11439 Renaming --all-- protocol should not be possible https://pharo.fogbugz.com/f/cases/11439'. self loadTogether: self script268 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UnixPlatform methodsFor: '*Keymapping-KeyCombinations' stamp: 'BenjaminVanRyseghem 11/29/2013 16:03'! defaultModifier ^ KMModifier control! ! !PluggableMenuSpec methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/29/2013 15:19'! addToMenuModel: aMenuModel | groups tmp | groups := OrderedCollection new. aMenuModel title: self label. tmp := OrderedCollection new. self items do: [ :each | tmp add: each. each separator ifTrue: [ groups add: tmp copy. tmp removeAll ] ]. groups do: [ :each | aMenuModel addGroup: [ :group | each do: [ :spec | group addItem: [ :item | item fromSpec: spec ] ] ] ]! ! !ClassOrganization methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 48571198! isEmptyCategoryNamed: categoryName ^ (self protocolOrganizer protocolNamed: categoryName) isEmpty! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 16:08'! protocolNamed: aString ^ self protocolOrganizer protocolNamed: aString ifAbsent: [ nil ] ! ! !ClassOrganization methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 48576561! renameCategory: oldName toBe: newName self silentlyRenameCategory: oldName toBe: newName. self notifyOfChangedCategoryFrom: oldName to: newName. "I need to notify also the selector changes, otherwise RPackage will not notice" (self protocolOrganizer protocolNamed: newName) methods do: [ :each | self notifyOfChangedSelector: each from: oldName to: newName ]! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 11/29/2013 16:11'! renameCategory | protocol | protocol := self selectedProtocol. protocol ifNil: [ ^ self ]. protocol canBeRenamed ifFalse: [ ^ self inform: ('You can not rename "{1}" protocol.' format: { protocol name }) ]. ^ super renameCategory.! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 16:09'! selectedProtocol ^ self selectedCategory ifNotNil: [ :protocolName | self selectedClass organization protocolNamed: protocolName ]! ! !SystemNavigation methodsFor: 'packages' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 68770657! removeAllButPackages: packagesList "Remove all classes and methods that do not belong to some of listed packages. Skip #unload. Do not use this method if you can use Monticello!! This method is used by some low-level shrinking process. Do not use it. This is quite hackish" | keep remove oldRemove extensionCategories | keep := Set new. packagesList do: [:pkg | keep addAll: (self allClassesInPackageNamed: pkg)]. oldRemove := Set new. [ remove := Smalltalk globals allClassesAndTraits reject: [:c | keep includes: c]. remove := remove collect: [:c | c name]. (remove asSortedCollection: [:a :b | a <= b ]) do: [:className | | class | class := (Smalltalk globals classOrTraitNamed: className). class allSubclasses ifEmpty: [ SystemAnnouncer uniqueInstance unsubscribe: class. class isTrait ifFalse: [ (class class includesSelector: #unload) ifTrue: [ class removeSelector: #unload ] ]. class removeFromSystem. ] ]. oldRemove ifNotEmpty: [ oldRemove = remove ifTrue: [ self error: 'Some classes still have subclasses: ', (remove collect: [:c | c -> (Smalltalk classOrTraitNamed: c) allSubclasses]) asString ] ]. oldRemove := remove. remove notEmpty] whileTrue. keep do: [: class | extensionCategories := (class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | | protocol | protocol := class organization protocolOrganizer protocolNamed: category. (protocol methods intersection: class localSelectors) do: [:sel | class removeSelector: sel ]. "class removeProtocol: category" ]. class isTrait ifFalse: [ extensionCategories := (class class organization ownCategories select: [:category | category first = $*]) asOrderedCollection. extensionCategories removeAllSuchThat: [:category | packagesList anySatisfy: [:package | ((category asLowercase allButFirst = package asLowercase) or: [package asLowercase, '-*' match: category asLowercase allButFirst])]]. extensionCategories do: [:category | | protocol | protocol := class class organization protocolOrganizer protocolNamed: category. (protocol methods intersection: class class localSelectors) do: [:sel | class class removeSelector: sel ]. "class class removeProtocol: category" ]]]. ! ! !MorphicMenuItemAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/29/2013 15:58'! defaultModifierShortcut ^ self shortcut first isUppercase ifTrue: [ OSPlatform current defaultModifier + KMModifier shift + self shortcut first ] ifFalse: [ OSPlatform current defaultModifier + self shortcut first ]! ! !MorphicMenuItemAdapter methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 11/29/2013 15:27'! shortcutFromString self shouldBeImplemented.! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/29/2013 15:55' prior: 76861865! shortcutText | shortcut platform string | shortcut := self shortcut. shortcut isString ifTrue: [ shortcut := self defaultModifierShortcut ]. shortcut ifNil: [ ^ nil ]. platform := Smalltalk os platformFamily. shortcut combinationsDo: [ :each | (each platform = Smalltalk os platformFamily) ifTrue: [ shortcut := each ] ]. string := '⌘⇧'. ^ (platform = #MacOSX and: [ (StandardFonts menuFont hasGlyphsForAll: string) and: [ string allSatisfy: [ :c | (StandardFonts menuFont characterFormAt: c) width~= 0 ]]]) ifFalse: [ shortcut shortcut printString ] ifTrue: [ String streamContents: [:stream | stream << shortcut shortcut modifier symbol. shortcut shortcut character printOn: stream ] ]! ! !MacOSPlatform methodsFor: '*Keymapping-KeyCombinations' stamp: 'CamilloBruni 11/29/2013 17:09'! defaultModifier ^ KMModifier meta! ! !PluggableMenuItemSpec methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/29/2013 15:16'! addToMenuGroupModel: aMenuGroupModel aMenuGroupModel addItem: [ :item | item fromSpec: self ]! ! !PluggableMenuItemSpec methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/29/2013 16:05'! addToMenuItemModel: aMenuItemModel | en | en := self enabledBlock ifNil: [ self enabled ]. aMenuItemModel name: self label; state: self checked; enabled: en; icon: self icon; shortcut: self keyText; subMenu:self subMenu; action: self action! ! !TabModel methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05' prior: 76534801! morph self deprecated: 'Use #contents instead'. ^ self value! ! !TabModel methodsFor: '*Deprecated30' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06' prior: 76534969! morph: aMorph self deprecated: 'Use #contents: instead'. self value: aMorph! ! !Protocol methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 16:04'! canBeRenamed ^ true! ! !Protocol methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 15:57' prior: 69752995! name: anObject name := anObject asSymbol! ! !Win32Platform methodsFor: '*Keymapping-KeyCombinations' stamp: 'BenjaminVanRyseghem 11/29/2013 16:03'! defaultModifier ^ KMModifier control! ! !AllProtocol methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 16:04' prior: 48578941! canBeRemoved ^ false! ! !AllProtocol methodsFor: 'testing' stamp: 'EstebanLorenzano 11/29/2013 16:11'! canBeRenamed ^ false! ! !AllProtocol methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 15:57'! name: aString self error: 'You cannot change my name'.! ! !MenuModel methodsFor: 'protocol-building' stamp: 'BenjaminVanRyseghem 11/29/2013 16:14'! addAllFromPragma: pragma target: target self fromSpec: (PragmaMenuBuilder pragmaKeyword: pragma model: target) menuSpec! ! !MenuModel methodsFor: 'protocol-building' stamp: 'BenjaminVanRyseghem 11/29/2013 15:00'! fromSpec: aSpec aSpec addToMenuModel: self! ! !MenuGroupModel methodsFor: 'protocol-building' stamp: 'BenjaminVanRyseghem 11/29/2013 15:01'! fromSpec: aSpec aSpec addToMenuGroupModel: self! ! !OSPlatform methodsFor: '*Keymapping-KeyCombinations' stamp: 'BenjaminVanRyseghem 11/29/2013 16:01'! defaultModifier ^ self subclassResponsibility! ! !ProtocolOrganizer methodsFor: 'backward compatibility' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 48587235! methodsInProtocolNamed: aName aName = AllProtocol defaultName ifTrue: [ ^ self allMethods ]. ^ (self protocolNamed: aName) methods! ! !ProtocolOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 50156645! moveMethodsFrom: fromProtocolNamed to: toProtocolNamed | fromProtocol toProtocol | fromProtocol := self protocolNamed: fromProtocolNamed. toProtocol := self protocolNamed: toProtocolNamed. toProtocol addAllMethodsFrom: fromProtocol. fromProtocol removeAllMethods. ^ toProtocol.! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 16:09'! protocolNamed: aName ^ self protocolNamed: aName ifAbsent: [ Protocol empty ]! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 16:08'! protocolNamed: aString ifAbsent: aBlock ^ self allProtocols detect: [ :e | e name = aString ] ifNone: aBlock! ! !ProtocolOrganizer methodsFor: 'protocol - removing' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 48589072! removeProtocolNamed: aName | protocolToRemove | protocolToRemove := self protocolNamed: aName. ^ self removeProtocol: protocolToRemove! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 11/29/2013 16:09' prior: 74400206! renameProtocol: oldName into: newName (self existsProtocolNamed: newName) ifTrue: [ self moveMethodsFrom: oldName to: newName. self removeProtocolNamed: oldName ] ifFalse: [ ^ (self protocolNamed: oldName) name: newName; yourself].! ! !MenuItemModel methodsFor: 'protocol-building' stamp: 'BenjaminVanRyseghem 11/29/2013 15:02'! fromSpec: aSpec aSpec addToMenuItemModel: self! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/29/2013 15:26' prior: 76851502! icon: anIcon icon value: anIcon! ! !MenuItemModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 11/29/2013 15:26' prior: 76851643! initialize super initialize. action := [] asValueHolder. enabled := true asValueHolder. state := nil asValueHolder. description := nil asValueHolder. name := '' asValueHolder. shortcut := nil asValueHolder. subMenu := nil asValueHolder. autoRefresh := false asValueHolder. icon := nil asValueHolder! ! !Compiler methodsFor: '*Deprecated30' stamp: 'ClementBera 6/7/2013 09:50' prior: 39499120! decompile: aSelector in: aClass self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass! ! !Compiler methodsFor: '*Deprecated30' stamp: 'MarcusDenker 5/9/2013 11:07' prior: 37186760! decompile: aSelector in: aClass method: aMethod self deprecated: 'use #decompileMethod:' on: '09 May 2013' in: 'Pharo 3.0'. ^Decompiler new decompile: aSelector in: aClass method: aMethod ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 11/29/2013 16:14' prior: 18879148! changeSetMenu1: aMenu shifted: isShifted "Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter" aMenu title: 'Change Set'. aMenu addAllFromPragma: 'changeSorterChangeSetList1Menu' target: self! ! ProtocolOrganizer removeSelector: #getProtocolNamed:! MenuMorph class removeSelector: #inform:! "ClassOrganizer-Core"! "Compiler"! "Deprecated30"! "Keymapping-KeyCombinations"! "Morphic-Base"! "Nautilus"! "Spec-Core"! "Spec-MorphicAdapters"! "Spec-Tools"! "System-Support"! ----End fileIn----! ----QUIT----2013-11-30T09:53:01.834924+01:00 Pharo.image priorSource: 27917130! ----STARTUP----2013-11-30T09:59:06.05373+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-11-30T09:59:06.231737+01:00 Pharo-30613.image priorSource: 27941452! ----STARTUP----2013-12-01T16:19:50.355929+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/1/2013 16:17' prior: 78249077! commentForCurrentUpdate ^ '11873 when deleting a class, the packages that have extension in it are not dirty https://pharo.fogbugz.com/f/cases/11873 12269 Add support for easily centering a window https://pharo.fogbugz.com/f/cases/12269 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/1/2013 16:17'! script269 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-EstebanLorenzano.54.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1695.mcz KernelTests-MarcusDenker.594.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.210.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.606.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.251.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.85.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1359.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/1/2013 16:17'! update30614 "self new update30614" self withUpdateLog: '11873 when deleting a class, the packages that have extension in it are not dirty https://pharo.fogbugz.com/f/cases/11873 12269 Add support for easily centering a window https://pharo.fogbugz.com/f/cases/12269 '. self loadTogether: self script269 merge: false. self flushCaches. ! ! "ScriptLoader30"! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:10'! centered self changed: #centered with: #()! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:12'! centeredRelativeTo: aModel self changed: #centeredRelativeTo: with: { aModel }! ! !Morph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/28/2013 17:21'! centerWidget: aWindow aWindow fullBounds; center: self center! ! !MCPackageManager class methodsFor: 'system changes' stamp: 'BenjaminVanRyseghem 11/30/2013 14:21' prior: 24910607! classRemoved: anEvent "Informs the registry who use to keep this class that its changed. Unlike #classModified:, class is not anymore in RPackages so it will not be found, that's why we look for system category instead if class is included or not" self registry do: [:mgr | (mgr packageSet includesSystemCategory: anEvent classAffected category) ifTrue: [ mgr modified: true ]. (mgr packageSet extensionCategoriesForClass: anEvent classAffected) ifNotEmpty: [ mgr modified: true ]. ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:07' prior: 77662548! cancelled ^ self window ifNil: [ false ] ifNotNil: [ :w | w cancelled ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:17'! centerWidget: aWindow self changed: #centerWidget: with: { aWindow }! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:08'! centered window value ifNotNil: [ :w | w centered ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/28/2013 17:12'! centeredRelativeTo: aModel window value ifNotNil: [ :w | w centeredRelativeTo: aModel ]! ! !RPackageSet methodsFor: 'system compatibility' stamp: 'LucFabresse 11/29/2013 13:42' prior: 32066277! methodCategoryPrefix ^ '*', self packageName asLowercase! ! "Monticello"! "RPackage-Core"! "Spec-Core"! ----End fileIn----! ----QUIT----2013-12-01T16:19:57.419925+01:00 Pharo.image priorSource: 27941648! ----STARTUP----2013-12-01T16:25:39.190664+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-01T16:25:39.36066+01:00 Pharo-30614.image priorSource: 27955211! ----STARTUP----2013-12-02T12:10:49.085251+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/2/2013 12:07' prior: 78273594! commentForCurrentUpdate ^ '12307 Adding unload to GroupManager or GroupAbstract https://pharo.fogbugz.com/f/cases/12307 12273 DNU doing senders in Finder https://pharo.fogbugz.com/f/cases/12273 12305 resetGroups should be moved in superclass https://pharo.fogbugz.com/f/cases/12305 12299 #date:time: fix for 3.0 https://pharo.fogbugz.com/f/cases/12299'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/2/2013 12:07'! script270 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1697.mcz KernelTests-MarcusDenker.596.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.174.mcz Manifest-CriticBrowser-MarcusDenker.133.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.210.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.608.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.127.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.251.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.85.mcz Spec-PolyWidgets-MarcusDenker.30.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1361.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/2/2013 12:07'! update30615 "self new update30615" self withUpdateLog: '12307 Adding unload to GroupManager or GroupAbstract https://pharo.fogbugz.com/f/cases/12307 12273 DNU doing senders in Finder https://pharo.fogbugz.com/f/cases/12273 12305 resetGroups should be moved in superclass https://pharo.fogbugz.com/f/cases/12305 12299 #date:time: fix for 3.0 https://pharo.fogbugz.com/f/cases/12299'. self loadTogether: self script270 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus class methodsFor: 'accessing' stamp: 'StephaneDucasse 11/30/2013 13:56'! resetGroups groups := nil.! ! !FinderMethodNode methodsFor: 'private' stamp: 'NicolaiHess 11/30/2013 14:30' prior: 76880608! browseImplementors self item ifNotNil: [ :selector | SystemNavigation new browseImplementorsOf: selector name: 'Implementors of ', selector autoSelect: nil]! ! !FinderMethodNode methodsFor: 'private' stamp: 'NicolaiHess 11/30/2013 14:50' prior: 76880949! browseSenders self item ifNotNil: [ :selector | SystemNavigation new browseSendersOf: selector name: 'Senders of ', selector autoSelect: selector].! ! !AbstractGroup class methodsFor: 'instance creation' stamp: 'StephaneDucasse 11/30/2013 17:23'! cleanUp self unsubscribeExistingGroups.! ! !AbstractGroup class methodsFor: 'instance creation' stamp: 'StephaneDucasse 11/30/2013 17:24'! unsubscribeExistingGroups "self unsubscribeExistingGroups" self allSubInstances do: [ :each | SystemAnnouncer uniqueInstance unsubscribe: each ]. ! ! !DateAndTimeTest methodsFor: 'tests - instance' stamp: 'SeanDeNigris 11/29/2013 14:29'! testInstanceCreationFromADateAndATime | date time instance | date := Date today. time := Time now. instance := DateAndTime date: date time: time. self assert: instance asDate equals: date. self assert: instance asTime equals: time.! ! !DateAndTime class methodsFor: 'instance creation' stamp: 'SeanDeNigris 11/29/2013 14:30' prior: 20364137! date: aDate time: aTime ^ self year: aDate year month: aDate monthName day: aDate dayOfMonth hour: aTime hour minute: aTime minute second: aTime second nanoSecond: aTime nanoSecond offset: self localOffset.! ! !Finder methodsFor: 'accessing' stamp: 'NicolaiHess 11/30/2013 14:29' prior: 22115991! selection: aSelectionHolder "anObject is a selection holder" "Depending of the value of currentSearchMode, I fill selectedMethod and SelectedClass with the good items." "Then, I update the source code text area" | path methodNode method classNode class | (aSelectionHolder isNil or: [aSelectionHolder selectedNodePath isNil]) ifTrue: [ self selectedClass: nil. self selectedMethod: nil. ^self]. path := aSelectionHolder selectedNodePath. self isSelectorsSymbol ifTrue: [ path first isSingle ifTrue: [ method := path first itemMethod selector. class := path first itemMethod methodClass ] ifFalse: [ methodNode := path first. classNode := path at: 2 ifAbsent: [ nil ]]]. self isClassNamesSymbol ifTrue: [ classNode := path first. methodNode := path at: 2 ifAbsent:[nil]]. self isSourceSymbol ifTrue: [ methodNode := path first. classNode := path at: 2 ifAbsent:[nil]]. self isExamplesSymbol ifTrue: [ methodNode := path first. classNode := path at: 2 ifAbsent:[nil]]. self isPragmasSymbol ifTrue: [ methodNode := path at:2 ifAbsent: [ nil ]. classNode := path at: 3 ifAbsent:[nil]]. classNode ifNotNil: [ class := classNode item ]. self selectedClass: class. methodNode ifNotNil: [ method := methodNode item ]. self selectedMethod: method. self triggerEvent: #updateSourceCode! ! !FinderSingleMethodNode methodsFor: 'as yet unclassified' stamp: 'NicolaiHess 11/30/2013 14:27' prior: 22144936! displayString ^ self itemMethod selector, ' (',self itemMethod methodClass name,')'! ! !FinderSingleMethodNode methodsFor: 'private' stamp: 'NicolaiHess 11/30/2013 14:26'! itemMethod |itemClass| itemClass:=((self model resultDictionary) at:self item) first. ^ (itemClass>> self item) ! ! PackageTreeNautilus class removeSelector: #resetGroups! FinderUI removeSelector: #rootNodeFromItem:! "GroupManager"! "Kernel"! "KernelTests"! "Nautilus"! "Tools"! ----End fileIn----! ----QUIT----2013-12-02T12:11:00.175246+01:00 Pharo.image priorSource: 27955408! ----STARTUP----2013-12-02T12:17:13.577213+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-02T12:17:13.751215+01:00 Pharo-30615.image priorSource: 27970995! ----STARTUP----2013-12-03T13:37:49.765309+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/3/2013 13:34' prior: 78287353! commentForCurrentUpdate ^ '12289 Komitter has improper repositories assigned https://pharo.fogbugz.com/f/cases/12289 12311 Cleanup on some Tools related methods https://pharo.fogbugz.com/f/cases/12311 12323 TreeModel example broken https://pharo.fogbugz.com/f/cases/12323 12285 Critics browser broken https://pharo.fogbugz.com/f/cases/12285 12313 Few enhancements in TreeModel and TreeNodeModel https://pharo.fogbugz.com/f/cases/12313'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/3/2013 13:34'! script271 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1697.mcz KernelTests-MarcusDenker.596.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-EstebanLorenzano.42.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.210.mcz Morphic-Core-MarcusDenker.22.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.608.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-EstebanLorenzano.981.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.155.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.118.mcz Spec-Core-MarcusDenker.252.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.136.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.89.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.658.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.602.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/3/2013 13:34'! update30616 "self new update30616" self withUpdateLog: '12289 Komitter has improper repositories assigned https://pharo.fogbugz.com/f/cases/12289 12311 Cleanup on some Tools related methods https://pharo.fogbugz.com/f/cases/12311 12323 TreeModel example broken https://pharo.fogbugz.com/f/cases/12323 12285 Critics browser broken https://pharo.fogbugz.com/f/cases/12285 12313 Few enhancements in TreeModel and TreeNodeModel https://pharo.fogbugz.com/f/cases/12313'. self loadTogether: self script271 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !ListItemWrapper methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 12/3/2013 10:59'! setItemFromBlock: aBlock self setItem: aBlock value! ! !PSMCClassChangeWrapper methodsFor: 'accessing' stamp: 'GabrielOmarCotelli 11/30/2013 16:18' prior: 28958618! operation "Answer the patch operation for the class itself or nil if none." ^ self model detect: [ :i | i targetClassName = self item and: [ i definition isClassDefinition ] ] ifNone: [ nil ]! ! !AbstractMorphicAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 01:10'! setModal: aWindow self widgetDo: [ :w | w setModal: aWindow ]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 01:10'! setModal: aWindow self changed: #setModal: with: { aWindow }! ! !MorphicTreeNodeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/3/2013 10:59' prior: 76778556! defaultSpec ^ #(SpecTreeNodeModel setItemFromBlock:#(model itemBlock) icon: #(model icon) setChildren: #(model childrenBlock))! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 21:36' prior: 77530069! deselect self widgetDo: [ :w | w changed: #deselect. w model selectionChanged. w dependents do: [ :e | e changed ] ]! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 12/3/2013 10:59'! itemBlock ^ [ self item ]! ! !MorphicTreeNodeAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 21:35' prior: 77530525! select self widgetDo: [ :w | w changed: #select. w model selectionChanged. w dependents do: [ :e | e changed ] ]! ! !FileList methodsFor: 'private' stamp: 'GabrielOmarCotelli 11/30/2013 16:11' prior: 21881161! addPath: aString "Add the given string to the list of recently visited directories." | full | aString ifNil: [^self]. full := String streamContents: [ :strm | 2 to: volumeList size do: [ :i | strm nextPutAll: (volumeList at: i) trimBoth. strm nextPut: FileSystem disk separator]]. full := full, aString. "Remove and super-directories of aString from the collection." RecentDirs removeAllSuchThat: [ :aDir | ((aDir, '*') match: full)]. "If a sub-directory is in the list, do nothing." RecentDirs detect: [ :aDir | ((full, '*') match: aDir)] ifFound: [^self]. [RecentDirs size >= 10] whileTrue: [RecentDirs removeFirst]. RecentDirs addLast: full! ! !FileList methodsFor: 'own services' stamp: 'GabrielOmarCotelli 11/30/2013 16:15' prior: 21875397! servicesFromSelectorSpecs: symbolArray "Answer an array of services represented by the incoming symbols, eliminating any that do not have a currently-registered service. Pass the symbol #- along unchanged to serve as a separator between services" "FileList new servicesFromSelectorSpecs: #(fileIn: fileIntoNewChangeSet: browseChangesFile:)" | registeredServices services | services := OrderedCollection new. registeredServices := self class allRegisteredServices. symbolArray do: [ :sel | sel == #- ifTrue: [ services add: sel ] ifFalse: [ registeredServices detect: [ :each | each selector = sel ] ifFound: [ :service | services add: service ] ] ]. ^ services! ! !FileList methodsFor: 'initialization' stamp: 'GabrielOmarCotelli 11/30/2013 16:17' prior: 21868739! updateButtonRow "Dynamically update the contents of the button row, if any." self dependents detect: [ :m | m isSystemWindow and: [ m model == self ] ] ifFound: [ :aWindow | | aRow | aRow := aWindow findDeepSubmorphThat: [ :m | m hasProperty: #buttonRow ] ifAbsent: [ ^ self ]. aRow submorphs size - 1 timesRepeat: [ aRow submorphs last delete ]. self dynamicButtonServices do: [ :service | aRow addMorphBack: (service buttonToTriggerIn: self). service addDependent: self ] ]! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/30/2013 20:39' prior: 76528278! iconFor: aNode ^ iconBlock value cull: aNode content cull: aNode! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 20:54' prior: 77538361! initialize super initialize. childrenBlockHolder := [ {} ] asValueHolder. rootsHolder := {} asValueHolder. selectionHolder := {} asValueHolder. menuBlockHolder := [] asValueHolder. displayBlock := [:item | item asString ] asValueHolder. removeOnlyLastSelected := false asValueHolder. autoDeselection := true asValueHolder. autoMultiSelection := false asValueHolder. columnInset := 5 asValueHolder. doubleClick := [] asValueHolder. allowMenuOnNoItem := false asValueHolder. evenRowColor := Color veryLightGray muchLighter asValueHolder. isCheckList := false asValueHolder. keyStroke := [ :key | ] asValueHolder. multiSelection := false asValueHolder. oddRowColor := Color white asValueHolder. preferedPaneColor := Color white asValueHolder. resizerWidth := 2 asValueHolder. rowInset := 2 asValueHolder. iconBlock := [ :each : node | node icon ] asValueHolder. highlightedItem := nil asValueHolder. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: [ self childrenFor: item ] ] asValueHolder. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asValueHolder. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asValueHolder. treeUpdated := nil asValueHolder. self registerEvents! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/30/2013 22:01' prior: 76531819! selectedItem < api: #inspect> "Return the selected item" "In the case of a multiple selection list, it returns the last selected item" ^ selectionHolder value ifEmpty: [ nil ] ifNotEmpty: [ :col | col last ]! ! !CodeHolder methodsFor: 'misc' stamp: 'GabrielOmarCotelli 11/30/2013 16:19' prior: 19459649! refreshAnnotation "If the receiver has an annotation pane that does not bear unaccepted edits, refresh it" self dependents detect: [ :m | (m isKindOf: PluggableTextMorph) and: [ m getTextSelector == #annotation ] ] ifFound: [ :aPane | aPane hasUnacceptedEdits ifFalse: [ aPane update: #annotation ] ]! ! !BuilderManifest class methodsFor: 'instance creation' stamp: 'GabrielOmarCotelli 11/30/2013 16:05' prior: 46597749! ofPackageNamed: aPackageName | builder | builder := self new. self allManifestClasses detect: [ :each | each category = aPackageName ] ifFound: [ :manifestClass | builder manifestClass: manifestClass ] ifNone: [ builder createManifestNamed: aPackageName ]. ^ builder! ! !ProcessBrowser class methodsFor: 'process control' stamp: 'GabrielOmarCotelli 11/30/2013 16:24' prior: 30008686! unregisterWellKnownProcess: aProcess "Remove the first registry entry that matches aProcess. Use with caution if more than one registry entry may match aProcess." "self unregisterWellKnownProcess: Smalltalk lowSpaceWatcherProcess" WellKnownProcesses detect: [ :e | e key value == aProcess ] ifFound: [ :entry | WellKnownProcesses remove: entry ]! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 01:07'! modalRelativeTo: aWindow self changed: #modalRelativeTo: with: { aWindow }! ! !AbstractTool methodsFor: 'category' stamp: 'GabrielOmarCotelli 11/30/2013 16:09' prior: 75222488! removeEmptyUnclassifiedCategoryFrom: aClass "Remove the 'as yet unclassified' category from the class if empty" | protocolOrganizer | protocolOrganizer := aClass organization protocolOrganizer. protocolOrganizer protocols detect: [ :protocol | protocol name = Protocol unclassified and: [ protocol isEmpty ] ] ifFound: [ :unclassifiedProtocol | protocolOrganizer removeProtocol: unclassifiedProtocol ]! ! !DiffJoinMorph methodsFor: 'event handling' stamp: 'GabrielOmarCotelli 11/30/2013 16:23' prior: 20825840! mouseDown: evt "Check for a click." self mappings detect: [ :j | j containsPoint: evt position - self topLeft ] ifFound: [ :cj | cj clicked. self triggerEvent: #joinClicked ]. super mouseDown: evt! ! !Browser methodsFor: 'message category list' stamp: 'GabrielOmarCotelli 11/30/2013 16:21' prior: 42054416! categorizeAllUncategorizedMethods "Categorize methods by looking in parent classes for a method category." | organizer organizers | organizer := self classOrMetaClassOrganizer. organizers := self selectedClassOrMetaClass withAllSuperclasses collect: [ :ea | ea organization ]. (organizer listAtCategoryNamed: Protocol unclassified) do: [ :sel | (organizers collect: [ :org | org categoryOfElement: sel ]) detect: [ :ea | ea ~= Protocol unclassified and: [ ea ~= nil ] ] ifFound: [ :found | organizer classify: sel under: found ] ]. self changed: #messageCategoryList! ! !MorphicWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 01:07'! modalRelativeTo: aWindow self widgetDo: [ :w | aWindow setModal: w ]! ! !SearchableTree methodsFor: 'list protocol-events' stamp: 'BenjaminVanRyseghem 11/30/2013 20:53'! whenSelectedItemChanged: aBlock tree whenSelectedItemChanged: aBlock! ! !SelectRuleBrowser methodsFor: 'protocol' stamp: 'MarcusDenker 12/2/2013 18:26' prior: 33875225! addItems toSelectModel selectedItem ifNotNil: [ :item | selectRule add: item content ]. self updateTree ! ! MorphicDialogWindowAdapter removeSelector: #modalRelativeTo:! DialogWindowModel removeSelector: #modalRelativeTo:! "Manifest-Core"! "Manifest-CriticBrowser"! "Polymorph-Tools-Diff"! "Spec-Core"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! "Tools"! ----End fileIn----! ----QUIT----2013-12-03T13:37:59.24131+01:00 Pharo.image priorSource: 27971192! ----STARTUP----2013-12-03T13:43:48.53651+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-03T13:43:48.710512+01:00 Pharo-30616.image priorSource: 27992854! ----STARTUP----2013-12-03T17:43:48.159365+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/3/2013 17:40' prior: 78303138! commentForCurrentUpdate ^ '12321 less senders of #methodDict https://pharo.fogbugz.com/f/cases/12321 12328 TreeInspector DNU https://pharo.fogbugz.com/f/cases/12328 12314 Add a view to link/add new remotes https://pharo.fogbugz.com/f/cases/12314 12325 HaloMorph >> #worldBoundsForMorph: calls deprecated outsetBy: https://pharo.fogbugz.com/f/cases/12325 12312 Cleanup on some Morphic methods https://pharo.fogbugz.com/f/cases/12312'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/3/2013 17:40'! script272 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1697.mcz KernelTests-MarcusDenker.596.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.49.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.212.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.610.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.27.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.983.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.390.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.252.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.89.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/3/2013 17:40'! update30617 "self new update30617" self withUpdateLog: '12321 less senders of #methodDict https://pharo.fogbugz.com/f/cases/12321 12328 TreeInspector DNU https://pharo.fogbugz.com/f/cases/12328 12314 Add a view to link/add new remotes https://pharo.fogbugz.com/f/cases/12314 12325 HaloMorph >> #worldBoundsForMorph: calls deprecated outsetBy: https://pharo.fogbugz.com/f/cases/12325 12312 Cleanup on some Morphic methods https://pharo.fogbugz.com/f/cases/12312'. self loadTogether: self script272 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KomitCacheRemote commentStamp: '' prior: 0! I encapsulate a gemstone repository! !KomitHttpRemote commentStamp: '' prior: 0! I encapsulate a gemstone repository! !KomitterUI commentStamp: '' prior: 78140290! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !RemotesManager commentStamp: '' prior: 0! I am an user interface used to link mcpackages and remotes! !KomitCacheRemote commentStamp: '' prior: 78336735! I encapsulate a gemstone repository! !KomitCacheRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/30/2013 20:34'! icon ^ 'DIR'! ! !KomitCacheRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/30/2013 20:34'! label ^ self remote directory basename! ! !KomitHttpRemote commentStamp: '' prior: 78336828! I encapsulate a gemstone repository! !KomitHttpRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/30/2013 20:34'! icon ^ 'URL'! ! !KomitHttpRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/30/2013 22:23'! label ^ self remote location! ! !HaloMorph methodsFor: 'geometry' stamp: 'PavelKrivanek 12/3/2013 14:59' prior: 23163831! worldBoundsForMorph: aMorph "Answer the rectangle to be used as the inner dimension of aMorph halos. Allow for showing either bounds or fullBounds, and compensate for the optional bounds rectangle." | r | r := (self haloEnclosesFullBounds) ifFalse: [ aMorph boundsIn: nil ] ifTrue: [ aMorph fullBoundsInWorld ]. self showBoundsInHalo ifTrue: [ ^r expandBy: 2 ]. ^r! ! !EyeTreeInspector methodsFor: 'accessing' stamp: 'MarcusDenker 12/3/2013 16:35' prior: 76966852! tree ^ tree ifNil: [ tree := self instantiate: TreeModel. tree whenBuiltDo: [ self initializeShortcuts ]. tree childrenBlock: [ :anObject | self childrenFor: anObject ]; iconBlock: [ :treeNode | self iconFor: treeNode ]; displayBlock: [ :anObject | self labelFor: anObject ]; menu: [ :menu | self inspectionMenu: menu ]; doubleClick: [ self diveInto: self selectedObject ]; yourself]! ! !WorldState methodsFor: 'hands' stamp: 'GabrielOmarCotelli 11/30/2013 17:13'! is: hand overlappingDamagedAreaIn: damageList | handBounds | handBounds := hand fullBounds. ^ damageList anySatisfy: [ :r | r intersects: handBounds ]! ! !WorldState methodsFor: 'alarms' stamp: 'GabrielOmarCotelli 11/30/2013 17:09' prior: 74932269! removeAlarm: aSelector for: aTarget "Remove the alarm with the given selector" self alarms detect: [ :any | any receiver == aTarget and: [ any selector == aSelector ] ] ifFound: [ :alarm | self alarms remove: alarm ]! ! !WorldState methodsFor: 'hands' stamp: 'GabrielOmarCotelli 11/30/2013 17:13' prior: 74934869! selectHandsToDrawForDamage: damageList "Select the set of hands that must be redrawn because either (a) the hand itself has changed or (b) the hand intersects some damage rectangle." ^ hands select: [ :hand | hand needsToBeDrawn and: [ hand hasChanged or: [ self is: hand overlappingDamagedAreaIn: damageList ] ] ]! ! !ListItemWrapper methodsFor: 'testing' stamp: 'RAA 3/31/1999 12:25' prior: 24529766! canBeDragged ^true! ! !ListItemWrapper methodsFor: 'testing' stamp: 'RAA 3/31/1999 16:24' prior: 24529872! handlesMouseOver: evt ^false! ! !ListItemWrapper methodsFor: 'testing' stamp: 'GabrielOmarCotelli 11/30/2013 16:42' prior: 24529988! hasEquivalentIn: aCollection ^ aCollection anySatisfy: [ :each | each withoutListWrapper = item withoutListWrapper ]! ! !ListItemWrapper methodsFor: 'testing' stamp: 'RAA 3/31/1999 16:32' prior: 24530528! wantsDroppedObject: anotherItem ^false! ! !ListDialogWindow methodsFor: 'button behavior' stamp: 'GabrielOmarCotelli 11/30/2013 17:01' prior: 24520110! browseAction | aString tmp block | aString := searchMorph content. list detect: [ :item | (self displayItem: item) = aString ] ifFound: [ :item | self accept: item ]. tmp := answer. block := self browseBlock. [ block value: tmp ] fork. self cancel! ! !ListDialogWindow methodsFor: 'morphic protocol' stamp: 'GabrielOmarCotelli 11/30/2013 17:01' prior: 68297041! searchAccept: aString self searchUpdate: aString. list size = 1 ifTrue: [ ^ self accept: list first ]. list detect: [ :item | (self displayItem: item) = aString ] ifFound: [ :item | ^ self accept: item ]. acceptNewEntry ifTrue: [ ^ self accept: aString ]. list ifNotEmpty: [ ^ self giveFocusToList ]! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'GabrielOmarCotelli 11/30/2013 17:06' prior: 38713353! mouseDown: event self editView ifNotNil: [ self editView mouseDownFromTextMorph: event ]. super mouseDown: event. self flag: #hack. (self editView respondsTo: #highlights) ifTrue: [ self editView highlights detect: [ :h | h containsPoint: event position in: (self bounds: self editView innerBounds from: self) ] ifFound: [ :hl | hl clicked: event ] ]! ! !PopupChoiceDialogWindow methodsFor: 'as yet unclassified' stamp: 'GabrielOmarCotelli 11/30/2013 17:03' prior: 29834544! switchToNextColumn "Give the next embedded menu keyboard focus." (self choiceMenus isNil or: [ self choiceMenus isEmpty ]) ifTrue: [ ^ self ]. self choiceMenus detect: [ :m | m hasKeyboardFocus ] ifFound: [ :menuWithFocus | menuWithFocus navigateFocusForward ]. self choiceMenus detect: [ :m | m hasKeyboardFocus ] ifNone: [ self choiceMenus first takeKeyboardFocus ]! ! !PopupChoiceDialogWindow methodsFor: 'as yet unclassified' stamp: 'GabrielOmarCotelli 11/30/2013 17:04' prior: 29835111! switchToPreviousColumn "Give the previous embedded menu keyboard focus." (self choiceMenus isNil or: [ self choiceMenus isEmpty ]) ifTrue: [ ^ self ]. self choiceMenus detect: [ :m | m hasKeyboardFocus ] ifFound: [ :menuWithFocus | menuWithFocus navigateFocusBackward ]. self choiceMenus detect: [ :m | m hasKeyboardFocus ] ifNone: [ self choiceMenus last takeKeyboardFocus ]! ! !TraitFileOutTest methodsFor: 'testing' stamp: 'MarcusDenker 12/2/2013 14:40' prior: 43855813! testFileOutTrait "fileOut trait T6, remove it from system and then file it in again" "self run: #testFileOutTrait" | fileName file | self t6 compile: 'localMethod: argument ^argument'. self t6 classSide compile: 'localClassSideMethod: argument ^argument'. self t6 fileOut. fileName := self t6 asString , '.st'. self resourceClassesAndTraits remove: self t6. self t6 removeFromSystem. [ file := FileStream readOnlyFileNamed: fileName. file fileIn ] ensure: [ file close ]. self assert: (Smalltalk globals includesKey: #T6). TraitsResource current t6: (Smalltalk globals at: #T6). self resourceClassesAndTraits add: self t6. self assert: self t6 traitComposition asString = 'T1 + (T2 @ {#m22Alias->#m22})'. self assert: (self t6 selectors asSet includesAllOf: #(#localMethod: #m11 #m12 #m13 #m21 #m22 #m22Alias)). self assert: self t6 classSide methods size = 2. self assert: (self t6 classSide selectors asSet includesAllOf: #(#localClassSideMethod: #m2ClassSide:))! ! !MCHttpRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/30/2013 20:22' prior: 77734824! koRemote ^ KomitHttpRemote new remote: self; yourself! ! !SimpleHierarchicalListMorph methodsFor: 'search' stamp: 'GabrielOmarCotelli 11/30/2013 16:56' prior: 33301532! basicKeyPressed: aChar | nextSelection milliSeconds slowKeyStroke oldSelection list | nextSelection := oldSelection := lastSelection. milliSeconds := Time millisecondClockValue. slowKeyStroke := milliSeconds - lastKeystrokeTime > 500. lastKeystrokeTime := milliSeconds. self searchedElement: nil. slowKeyStroke ifTrue: [ "forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString ] ifFalse: [ "append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString ]. "Get rid of blanks and style used in some lists" "No change if model is locked" model okToChange ifFalse: [ ^ self ]. list := self allItems. list detect: [ :a | a searchingString trimBoth asLowercase beginsWith: lastKeystrokes ] ifFound: [ :nextSelectionNode | nextSelection := list indexOf: nextSelectionNode ifAbsent: [ 0 ]. "The following line is a workaround around the behaviour of OBColumn>>selection:, which deselects when called twice with the same argument." self searchedElement: nextSelectionNode. lastSelection := nextSelection. "change scrollbarvalue" ^ self vScrollValue: (nextSelection - 1) / list size ]! ! !TaskbarMorph methodsFor: 'as yet unclassified' stamp: 'GabrielOmarCotelli 11/30/2013 17:05' prior: 44997697! updateTasks "Check for changes in the world's submorphs. Note that if the task attributes change then a task will be considered dead along with a new replacement." |wm deadTasks newTasks| wm := self worldMorphs. self tasks: ((wm collect: [:m | m taskbarTask]) select: [:m | m notNil]) asOrderedCollection. deadTasks := self orderedTasks difference: self tasks. newTasks := self tasks difference: self orderedTasks. (newTasks isEmpty and: [deadTasks isEmpty]) ifTrue: [^self]. "no changes" newTasks copy do: [:t | self orderedTasks detect: [:ot | ot morph = t morph] ifFound: [:ot | self orderedTasks replaceAll: ot with: t. deadTasks remove: ot. newTasks remove: t]]. "replace in order any changed tasks." self orderedTasks removeAll: deadTasks; addAll: newTasks reversed. self updateTaskButtons. self defer: [self layoutChanged] "may have a different number of rows"! ! !LazyMorphListMorph methodsFor: 'as yet unclassified' stamp: 'GabrielOmarCotelli 11/30/2013 16:49' prior: 24340182! userString "Do I have a text string to be searched on?" ^ String streamContents: [ :stream | 1 to: self getListSize do: [ :i | (self getListItem: i) submorphs detect: [ :morph | morph userString notNil ] ifFound: [ :morph | stream nextPutAll: morph userString ]. stream cr ] ]! ! !MCRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/30/2013 22:20'! isCache ^ false! ! !MCCacheRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/30/2013 22:20'! isCache ^ true! ! !MCCacheRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 11/30/2013 20:21'! koRemote ^ KomitCacheRemote new remote: self; yourself! ! !TBehavior methodsFor: '*Nautilus' stamp: 'MarcusDenker 12/2/2013 14:49' prior: 75223882! methodNamed: aSelector ifAbsent: aBlock ^ self compiledMethodAt: aSelector ifAbsent: aBlock! ! !TBehavior methodsFor: '*Ring-Core-Kernel' stamp: 'MarcusDenker 12/2/2013 14:44' prior: 49725000! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self compiledMethodAt: each) ]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 12/2/2013 14:43' prior: 44776889! sourceCodeAt: selector ^ (self compiledMethodAt: selector) sourceCode.! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 12/2/2013 14:43' prior: 44781909! sourceCodeAt: selector ifAbsent: aBlock ^ (self compiledMethodAt: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'MarcusDenker 12/2/2013 14:47' prior: 40963374! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self compiledMethodAt: sel) readsField: instVarIndex) or: [(self compiledMethodAt: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !TBehavior methodsFor: 'testing method dictionary' stamp: 'MarcusDenker 12/2/2013 14:48' prior: 40965376! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self compiledMethodAt: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !Paragraph methodsFor: 'editing' stamp: 'GabrielOmarCotelli 11/30/2013 17:08' prior: 68530859! actionAttributesUnder: aClickPoint event: anEvent do: aBlock | startBlock | startBlock := self characterBlockAtPoint: aClickPoint. (text attributesAt: startBlock stringIndex forStyle: textStyle) select: [ :attribute | attribute mayActOnEvent: anEvent ] thenDo: [ :attribute | | range boxes | "find the boxes for the current attribute range" range := text rangeOf: attribute startingAt: startBlock stringIndex. boxes := self selectionRectsFrom: (self characterBlockForIndex: range first) to: (self characterBlockForIndex: range last + 1). boxes detect: [ :each | each containsPoint: aClickPoint ] ifFound: [ aBlock cull: attribute cull: boxes ] ]! ! !HandMorph methodsFor: 'halo handling' stamp: 'GabrielOmarCotelli 11/30/2013 16:46' prior: 74965915! obtainHalo: aHalo "Used for transfering halos between hands" self halo == aHalo ifTrue: [ ^ self ]. "Find former owner" self world hands detect: [ :hand | hand halo == aHalo ] ifFound: [ :formerOwner | formerOwner releaseHalo: aHalo ]. self halo: aHalo! ! !MenuMorph methodsFor: 'keyboard control' stamp: 'GabrielOmarCotelli 11/30/2013 16:51' prior: 25512988! selectMoreItem: evt | allItems | allItems := self submorphs select: [ :m | m isKindOf: MenuItemMorph ]. allItems detect: [ :m | m contents size >= 4 and: [ (m contents first: 4) asString = 'more' ] ] ifFound: [ :more | self selectItem: more event: evt. selectedItem invokeWithEvent: evt ] ifNone: [ self flash ]! ! !MenuMorph methodsFor: 'events' stamp: 'GabrielOmarCotelli 11/30/2013 16:52' prior: 68529805! updateColor "Update the color of the menu." self theme preferGradientFill ifFalse: [ ^ self ]. self fillStyle: (self theme menuFillStyleFor: self). "update the title color" self allMorphs detect: [ :each | each hasProperty: #titleString ] ifFound: [ :title | title fillStyle: (self theme menuTitleFillStyleFor: title) ]! ! !SugsMockContext methodsFor: 'api-context' stamp: 'MarcusDenker 12/2/2013 14:45' prior: 35731041! selectedMethod ^selectorToUse ifNotNil: [self selectedClass compiledMethodAt: selectorToUse ifAbsent: [self selectedClass class methodDict at: selectorToUse]] ifNil:[nil].! ! !SystemWindow methodsFor: 'menu actions' stamp: 'GabrielOmarCotelli 11/30/2013 16:57' prior: 41880332! makeSecondTopmost | aWorld | aWorld := self world. aWorld submorphs detect: [ :m | m isSystemWindow and: [ m ~~ self ] ] ifFound: [ :nextWindow | nextWindow activate. aWorld addMorph: self behind: nextWindow ]! ! !SystemWindow methodsFor: 'menu actions' stamp: 'GabrielOmarCotelli 11/30/2013 16:58' prior: 41881295! sendToBack | aWorld | aWorld := self world. aWorld submorphs detect: [ :m | m isSystemWindow and: [ m ~~ self ] ] ifFound: [ :nextWindow | nextWindow activate. aWorld addMorphBack: self ]! ! !SystemWindow methodsFor: 'panes' stamp: 'GabrielOmarCotelli 11/30/2013 17:00' prior: 51764660! setUpdatablePanesFrom: getSelectors | aList possibles | "Set my updatablePanes inst var to the list of panes which are list panes with the given get-list selectors. Order is important here!! Note that the method is robust in the face of panes not found, but a warning is printed in the transcript in each such case" aList := OrderedCollection new. possibles := OrderedCollection new. self allMorphsDo: [ :pane | (pane isKindOf: PluggableListMorph) ifTrue: [ possibles add: pane ] ]. getSelectors do: [ :sel | possibles detect: [ :pane | pane getListSelector == sel ] ifFound: [ :aPane | aList add: aPane ] ]. updatablePanes := aList asArray! ! !KomitterUI commentStamp: '' prior: 78336923! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !KomitterUI class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/30/2013 19:28' prior: 78140475! defaultSpec ^ SpecLayout composed newRow: [ :row | row newColumn: [ :c1 | c1 add: #tree; newRow: [ :r | r newColumn: [ :c | c newRow: [ :row1 | row1 add: #commitMessage; add: #previousMessages width: self buttonHeight ] height: self buttonHeight; add: #message ]; newColumn: [ :c | c newRow: [:r1 | ] height: self buttonHeight; newRow: [ :r1 | r1 add: #authorName width: 50; add: #author ] height: self inputTextHeight +4 ; add: #checkCommit height: self buttonHeight; newRow: [ :r1 | r1 add: #remoteLabel width: 50; add: #remotes; add: #manageRemotes width: self buttonHeight ] height: self buttonHeight ] width: 250 ] height: (4*self buttonHeight + 12) ] ] bottom: 0.4; addHSplitter; newRow: [ :row | row add: #diff ] top: 0.6! ! !KomitterUI class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/25/2013 20:13' prior: 78141782! historyIconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286673726 4286673726 4286673726 4286673726 4286673726 0 0 0 4278217148 4278217148 4278217148 4278217148 4286673726 4286673726 0 0 4288516712 4294967295 4294967295 4294967295 4294967295 4286673726 4286673726 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288516712 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288253803 4294967295 4291942109 4291482074 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288253803 4284839308 0 4287925358 4294967295 4294967295 4294967295 4290759126 4290759126 4294967295 4278217148 4286038527 4286038527 4286039039 4278217148 4294967295 4287925358 4284707465 0 4287465586 4294705151 4291942109 4291482074 4294705151 4294705151 4294705151 4278216120 4285971967 4285971967 4285971967 4278216633 4294705151 4287465586 4284444294 0 4287005814 4294376959 4294376959 4294376959 4290759126 4290759126 4294376959 4278215349 4285840127 4285840127 4285840127 4278215862 4294376959 4287005814 4284115330 0 4286480763 4294114047 4291942109 4291482074 4294114047 4294114047 4294114047 4278214064 4285708287 4285643519 4285708799 4278214319 4294114047 4286480763 4283786365 0 4286086271 4293785343 4293785343 4293785343 4290759126 4290759126 4293785343 4278213034 4285641983 4285641983 4285641983 4278213034 4293785343 4286086271 4283391608 0 4285626499 4293522687 4293522687 4293522687 4293522687 4293522687 4293522687 4278211492 4285444351 4285378815 4285378815 4278212003 4293457151 4285626499 4283062642 0 4285298055 4285298055 4285298055 4285298055 4285298055 4293325311 4293325311 4278210466 4285116671 4285116671 4285181951 4278210465 4285298055 4285298055 4282733421 0 0 4282207077 4282207077 4282207077 4285035401 4285035401 4285035401 4278209949 4284918783 4284786943 4284787455 4278209949 4282141286 4282207077 4282207078 0 0 0 0 0 4282141542 4282009699 4282009699 4278209949 4284721919 4278209949 4284525311 4278209949 0 0 0 0 0 0 0 0 0 0 0 4278209949 4278209949 0 4278209949 4278209949 0 0 0 0 0 0 0 0 0 0 0 0 4278209949 0 0 4278209949 0 0 0)! ! !KomitterUI class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 19:39'! manageRemotesData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289496358 4289430823 0 0 0 0 0 0 0 0 0 0 0 0 0 4288970530 4294967295 4294957713 4289035810 0 0 0 0 0 0 0 0 4290811960 4290811960 4292065140 4288509724 4294832859 4294957713 4291666516 4289035810 0 0 0 0 0 0 0 4290549045 4294967295 4294957713 4287918102 4294832859 4294957713 4291666516 4287983638 0 0 0 0 0 0 0 4290285617 4294832859 4294957713 4287523346 4294832859 4294957713 4291666516 4287523089 0 0 0 0 0 0 0 4289956651 4294832859 4294957713 4291473003 4287194382 4294957713 4291666516 4287194382 4290811960 0 0 0 0 0 0 4289561893 4294832859 4294957713 4289562149 0 0 4287194382 4287194382 4294832859 4288706584 0 0 0 0 0 4289232928 4294832859 4294957713 4290946659 0 0 0 4290811960 4294832859 4294957713 4288706584 0 0 0 0 0 4288903963 4294957713 4289496358 4289430823 0 0 4290482995 4294832859 4294957713 4288706584 0 0 0 0 0 0 4290617694 4288970530 4294967295 4294957713 4289035810 4290022444 4294832859 4294957713 4288706584 0 0 0 0 0 0 0 4288509724 4294832859 4294957713 4291666516 4289035810 4294832859 4294957713 4288706584 0 0 0 0 0 0 0 4287918102 4294832859 4294957713 4291666516 4287983638 4294832859 4294957713 4288706584 0 0 0 0 0 0 0 4287523346 4294832859 4294957713 4291666516 4287523089 4288706584 4288706584 4288706584 0 0 0 0 0 0 0 0 4287194382 4294957713 4291666516 4287194382 0 0 0 0 0 0 0 0 0 0 0 0 0 4287194382 4287194382 0 0 0 0 0 0 0 0 0 0 0 0)! ! !KomitterUI class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/30/2013 19:40'! manageRemotesIcon ^ manageRemotesIcon ifNil: [ manageRemotesIcon := Pharo3UIThemeIcons form16x16FromContents: self manageRemotesData ]! ! !KomitterUI methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 19:26'! historyIcon ^ self class historyIcon! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 19:40' prior: 78147567! initializeWidgets tree := self instantiate: TreeWithLoading. diff := self instantiate: DiffModel. message := self newText. author := self newTextInput. authorName := self newLabel. commitMessage := self newLabel. remotes := self newDropList. remoteLabel := self newLabel. checkCommit := self newCheckBox. previousMessages := self newButton. manageRemotes := self newButton. tree removeOnlyLastSelected: true; autoMultiSelection: true; columns: { TreeColumnModel new displayBlock: [:node | node label ] }. diff showOptions: false; leftText: 'No selection for diff'. authorName label: 'Author:'. commitMessage label: 'Commit message:'. remoteLabel label: 'Remote:'. checkCommit label: 'Check Lint rules (NOT YET WORKING)'; labelClickable: true; state: false; enabled: false. author text: Author fullNamePerSe; autoAccept: true. previousMessages icon: self historyIcon; action: [ self chooseFromPreviousMessages ]; bindKeyCombination: Character space asKeyCombination toAction: [ previousMessages action value ]; help: 'Previous messages'. message bindKeyCombination: Character tab asKeyCombination toAction: [ self giveFocusToNextFrom: message ]; bindKeyCombination: Character tab shift toAction: [ self giveFocusToPreviousFrom: message ]; wantsVisualFeedback: false. manageRemotes icon: self manageRemotesIcon; action: [ self openRemoteManager ]. self whenBuiltDo: [ checkCommit labelOnLeft. diff showOnlySource: true. message selectAll. self updateRemotes ].! ! !KomitterUI methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/30/2013 19:27'! manageRemotes ^ manageRemotes! ! !KomitterUI methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 19:40'! manageRemotesIcon ^ self class manageRemotesIcon! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/1/2013 01:06'! openRemoteManager | view | view := RemotesManager new packages: (MCWorkingCopy allManagers sorted: [:a :b | a packageName < b packageName ]). view openWithSpec modalRelativeTo: self window! ! !RemotesManager commentStamp: '' prior: 78337078! I am an user interface used to link mcpackages and remotes! !RemotesManager class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/30/2013 22:45'! addRemoteIcon ^ addRemoteIcon ifNil: [ addRemoteIcon := Pharo3UIThemeIcons form16x16FromContents: self addRemoteIconData ]! ! !RemotesManager class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 22:45'! addRemoteIconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291210037 4290808596 4290810135 4290677781 4290147595 4291210037 0 0 0 0 0 0 0 0 0 4290683681 4294624811 4294631521 4294768803 4294568569 4294105160 4294031910 4290683681 0 0 0 0 0 0 0 0 4291073566 4294625582 4294630746 4294768804 4294568569 4294105160 4294031910 4289552134 0 0 0 0 0 0 0 0 4289952033 4293174041 4294303042 4294569571 4294170172 4293309977 4293101065 4290539540 0 0 0 0 0 0 0 0 4290280479 4294036034 4294634621 4294768801 4294568564 4294105159 4294031911 4290802196 0 0 0 0 0 0 0 0 4290280223 4294036035 4294634621 4294768801 4294568567 4294105160 4294031910 4290868243 0 0 0 0 0 0 0 0 4290280224 4294036037 4294634620 4294768799 4294568571 4294105162 4294031910 4290868498 0 0 0 0 0 0 0 0 4290280225 4293969990 4294634874 4294768798 4294568575 4284440415 4282335071 4282335071 4282335071 4282335071 4282335071 4282335071 0 0 0 0 4290280225 4292976410 4294302527 4294569825 4294170431 4282335071 4284440415 4284440415 4294967295 4284440415 4284440415 4278190080 0 0 0 0 4291537467 4293042201 4294302271 4294569825 4294170431 4282335071 4284440415 4284440415 4294967295 4284440415 4284440415 4278190080 0 0 0 0 0 4291209522 4291140130 4291205922 4291073824 4282335071 4294967295 4294967295 4294967295 4294967295 4294967295 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4284440415 4284440415 4294967295 4284440415 4284440415 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4284440415 4284440415 4294967295 4284440415 4284440415 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4278190080 4278190080 4278190080 4278190080 4278190080 4282335071)! ! !RemotesManager class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/30/2013 23:13'! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #packages; addSplitter; newColumn: [ :col | col newRow: [ :r | r newColumn: [ :c | ]; add: #removeRemote width: self buttonHeight + 4; add: #addRemote width: self buttonHeight ] height: self buttonHeight; add: #remotes ] ]; yourself! ! !RemotesManager class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 11/30/2013 23:10'! removeRemoteIcon ^ removeRemoteIcon ifNil: [ removeRemoteIcon := Pharo3UIThemeIcons form16x16FromContents: self removeRemoteIconData ]! ! !RemotesManager class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 23:10'! removeRemoteIconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291210037 4290808596 4290810135 4290677781 4290147595 4291210037 0 0 0 0 0 0 0 0 0 4290683681 4294624811 4294631521 4294768803 4294568569 4294105160 4294031910 4290683681 0 0 0 0 0 0 0 0 4291073566 4294625582 4294630746 4294768804 4294568569 4294105160 4294031910 4289552134 0 0 0 0 0 0 0 0 4289952033 4293174041 4294303042 4294569571 4294170172 4293309977 4293101065 4290539540 0 0 0 0 0 0 0 0 4290280479 4294036034 4294634621 4294768801 4294568564 4294105159 4294031911 4290802196 0 0 0 0 0 0 0 0 4290280223 4294036035 4294634621 4294768801 4294568567 4294105160 4294031910 4290868243 0 0 0 0 0 0 0 0 4290280224 4294036037 4294634620 4294768799 4294568571 4294105162 4294031910 4290868498 0 0 0 0 0 0 0 0 4290280225 4293969990 4294634874 4294768798 4294568575 4284440415 4282335071 4282335071 4282335071 4282335071 4282335071 4282335071 0 0 0 0 4290280225 4292976410 4294302527 4294569825 4294170431 4282335071 4284440415 4284440415 4284440415 4284440415 4284440415 4278190080 0 0 0 0 4291537467 4293042201 4294302271 4294569825 4294170431 4282335071 4284440415 4284440415 4284440415 4284440415 4284440415 4278190080 0 0 0 0 0 4291209522 4291140130 4291205922 4291073824 4282335071 4294967295 4294967295 4294967295 4294967295 4294967295 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4284440415 4284440415 4284440415 4284440415 4284440415 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4284440415 4284440415 4284440415 4284440415 4284440415 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4278190080 4278190080 4278190080 4278190080 4278190080 4282335071)! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/30/2013 22:47'! addRemote ^ addRemote! ! !RemotesManager methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 22:44'! addRemoteIcon ^ self class addRemoteIcon! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:52'! addRepository self newRepository ifNotNil: [ :repo | MCRepositoryGroup default addRepository: repo. remotes roots: self buildRoots ]! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 23:01'! buildRoots | repos | packages selectedItem ifNil: [ repos := #() ] ifNotNil: [ :item | repos := item content repositoryGroup repositories ]. ^ MCRepositoryGroup default repositories select: [ :each | each isCache not ] thenCollect: [ :each || remote | remote := each koRemote. TreeNodeModel new content: remote; selected: (repos includes: each); whenSelectedChanged: [ :bool | self doIfNotSilent: [ self change: bool forRemote: remote ] ]; yourself ]! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:13'! change: bool forRemote: remote | selectedItem group | selectedItem := packages selectedItem. selectedItem ifNil: [ ^ self ]. group := selectedItem content repositoryGroup. bool ifTrue: [ group addRepository: remote remote ] ifFalse: [ group removeRepository: remote remote ]! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:05'! doIfNotSilent: aBlock silent ifTrue: [ ^ self ]. aBlock value! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 22:03'! initialize super initialize. silent := false.! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 23:36'! initializePresenter packages whenSelectedItemChanged: [ :item | self updateRemoteSelectionFrom: item ]. remotes whenHighlightedItemChanged: [ :item | removeRemote enabled: item notNil ]! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 11/30/2013 23:55'! initializeWidgets packages := self instantiate: SearchableTree. remotes := self newTree. addRemote := self newButton. removeRemote := self newButton. packages displayBlock: [ :each | each packageName ]. remotes beCheckList; autoMultiSelection: true; displayBlock: [ :item | item label ]; iconBlock: [ :item | item icon ]; roots: self buildRoots. addRemote icon: self addRemoteIcon; action: [ self addRepository ]. removeRemote icon: self removeRemoteIcon; action: [ self removeRepository ]; enabled: false. self focusOrder add: packages; add: remotes; add: removeRemote; add: addRemote! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:50'! newRepository | types index | types := MCRepository allConcreteSubclasses asArray. index := UIManager default chooseFrom: (types collect: [:ea | ea description]) title: 'Repository type:'. ^ index = 0 ifFalse: [(types at: index) morphicConfigure]! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/30/2013 19:53'! packages ^ packages! ! !RemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/30/2013 20:02'! packages: mcPackages packages roots: mcPackages! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/30/2013 19:53'! remotes ^ remotes! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/30/2013 23:12'! removeRemote ^ removeRemote! ! !RemotesManager methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 11/30/2013 23:10'! removeRemoteIcon ^ self class removeRemoteIcon! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 23:52'! removeRepository | item | item := remotes selectedItem content. MCRepositoryGroup default removeRepository: item remote. remotes roots: self buildRoots; highlightedItem: nil! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:04'! silentWhile: aBlock | oldSilent | oldSilent := silent. silent := true. aBlock ensure: [ silent := oldSilent ]! ! !RemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 00:29'! title ^ 'Remotes manager'! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:07'! updateRemoteSelectionFrom: aPackage | reposotories | aPackage ifNil: [ reposotories := #() ] ifNotNil: [ reposotories := aPackage repositoryGroup repositories ]. remotes roots do: [ :node | self silentWhile: [ node selected: (reposotories includes: node content remote) ] ]! ! !Trait method! methodNamed: aSelector ifAbsent: aBlock ^ self compiledMethodAt: aSelector ifAbsent: aBlock! ! !Trait method! methodNamed: aSelector ifAbsent: aBlock ^ self compiledMethodAt: aSelector ifAbsent: aBlock! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self compiledMethodAt: each) ]! ! !Trait method! methodsInProtocol: aString ^ (self organization listAtCategoryNamed: aString) collect: [ :each | (self compiledMethodAt: each) ]! ! !Trait method! sourceCodeAt: selector ^ (self compiledMethodAt: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ^ (self compiledMethodAt: selector) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self compiledMethodAt: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! sourceCodeAt: selector ifAbsent: aBlock ^ (self compiledMethodAt: selector ifAbsent: [^ aBlock value]) sourceCode.! ! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self compiledMethodAt: sel) readsField: instVarIndex) or: [(self compiledMethodAt: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !Trait method! whichSelectorsAccess: instVarName "Answer a set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | ((self compiledMethodAt: sel) readsField: instVarIndex) or: [(self compiledMethodAt: sel) writesField: instVarIndex]] "Point whichSelectorsAccess: 'x'."! ! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self compiledMethodAt: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! !Trait method! whichSelectorsStoreInto: instVarName "Answer a Set of selectors whose methods access the argument, instVarName, as a named instance variable." | instVarIndex | instVarIndex := self instVarIndexFor: instVarName ifAbsent: [^IdentitySet new]. ^ self selectors select: [:sel | (self compiledMethodAt: sel) writesField: instVarIndex] "Point whichSelectorsStoreInto: 'x'."! ! "Komitter"! "Morphic-Base"! "Morphic-Core"! "Nautilus"! "Polymorph-Widgets"! "Ring-Core-Kernel"! "SmartSuggestions"! "Spec-Inspector"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----2013-12-03T17:44:04.211361+01:00 Pharo.image priorSource: 27993049! ----STARTUP----2013-12-03T17:49:53.026272+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-03T17:49:53.198272+01:00 Pharo-30617.image priorSource: 28040917! ----STARTUP----2013-12-04T09:28:53.017078+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/4/2013 09:25' prior: 78324995! commentForCurrentUpdate ^ '12327 Use eclipse icon for checklist tick https://pharo.fogbugz.com/f/cases/12327 11832 Remove SlotVirus https://pharo.fogbugz.com/f/cases/11832 12326 MailMessage class >> #dateTimeSuffix calls deprecated primSecondsClock https://pharo.fogbugz.com/f/cases/12326 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/4/2013 09:25'! script273 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.239.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.182.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1697.mcz KernelTests-MarcusDenker.598.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.49.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.213.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.610.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.252.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.89.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/4/2013 09:26'! update30618 "self new update30618" self withUpdateLog: '12327 Use eclipse icon for checklist tick https://pharo.fogbugz.com/f/cases/12327 11832 Remove SlotVirus https://pharo.fogbugz.com/f/cases/11832 12326 MailMessage class >> #dateTimeSuffix calls deprecated primSecondsClock https://pharo.fogbugz.com/f/cases/12326 '. self loadTogether: self script273 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OldClassBuilderAdapter commentStamp: '' prior: 42522952! I am an adapter of a Slot class builder to the traditional class building protocol.! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 14:51'! checkedBoxIcon "Private - Generated method" ^ icons at: #checkedBox ifAbsent: [ nil ]! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 15:22'! partialCheckedBoxIcon "Private - Generated method" ^ icons at: #partialCheckedBox ifAbsent: [ nil ]! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 14:51'! uncheckedBoxIcon "Private - Generated method" ^ icons at: #uncheckedBox ifAbsent: [ nil ]! ! !OldClassBuilderAdapter commentStamp: '' prior: 78384517! I am an adapter of a Slot class builder to the traditional class building protocol.! !MailMessage class methodsFor: 'utilities' stamp: 'PavelKrivanek 12/3/2013 15:07' prior: 25323187! dateTimeSuffix "Answer a string which indicates the date and time, intended for use in building fileout filenames, etc." ^self monthDayTime24StringFrom: Time primUTCSecondsClock! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 15:13'! checkedBoxIcon "Private - Generated method" ^ icons at: #checkedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self checkedBoxIconContents offset: 0@0 ]! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/3/2013 15:12'! checkedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655295 4293589503 4293589503 4293655039 4293589503 4293589503 4293655039 4289311430 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293786367 4293786111 4293786367 4293720831 4289311430 4283261051 4293720831 4287338155 4287338155 4292211711 4293851903 4293851903 4293917695 4293852159 4293917439 4289311430 4283261051 4289311430 4293852159 4287338155 4287338155 4292211711 4288061880 4294048767 4294049023 4294049023 4288061880 4282866552 4289311430 4294048767 4294048767 4287338155 4287338155 4288061880 4282144116 4286681256 4294180095 4286681256 4282209651 4289311430 4294245631 4294245631 4294180095 4287338155 4287338155 4292211711 4288061880 4281486958 4285300119 4281552495 4288061880 4294376703 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4286681256 4280895595 4286681256 4294573567 4294508031 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294704895 4294704895 4285300119 4294704895 4294704895 4294704895 4294639359 4294639359 4294639615 4287338155 4287338155 4292211711 4294836223 4294770431 4294770431 4294836223 4294835967 4294835967 4294770431 4294835967 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 15:22'! partialCheckedBoxIcon "Private - Generated method" ^ icons at: #partialCheckedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self partialCheckedBoxIconContents offset: 0@0 ]! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/3/2013 15:39'! partialCheckedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4287338155 4287338155 4292211711 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4287338155 4287338155 4292211711 4286945709 4284051852 4284051852 4284051852 4284051852 4284051852 4284051852 4286945709 4294048767 4287338155 4287338155 4292211711 4287011245 4284051852 4284051852 4284051852 4284051852 4284051852 4284051852 4287077037 4294180095 4287338155 4287338155 4292211711 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4287338155 4287338155 4292211711 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !EclipseUIThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/3/2013 15:13'! uncheckedBoxIcon "Private - Generated method" ^ icons at: #uncheckedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self uncheckedBoxIconContents offset: 0@0 ]! ! !EclipseUIThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/3/2013 15:13'! uncheckedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4287338155 4287338155 4292211711 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4287338155 4287338155 4292211711 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4287338155 4287338155 4292211711 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4287338155 4287338155 4292211711 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4287338155 4287338155 4292211711 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !ClassDescriptionTest methodsFor: 'tests' stamp: 'MartinDias 12/3/2013 14:53' prior: 73974876! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | (TClassDescription >> selector) sourceCode. self assert: (TClassDescription >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list #superclass:layout, #initializeLayoutWithSlots: abd #layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription #layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) #baseClass and #classClass have their equivalens in TraitDescription (baseTrait classTrait )" self assertCollection: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: ) asSet. "#isClassTrait, #baseTrait, #isBaseTrait and #classTrait have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names #copyTraitExpresion and #addExclusionOf: have no equivalent in classes" self assertCollection: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #isBaseTrait #classTrait) asSet! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/3/2013 15:06' prior: 77415729! drawCheckOn: aCanvas in: aRectangle | center offset dRect childSelected | center := aRectangle center. offset := (self checkWidth / 2.0) truncated. dRect := (center x - offset) @ (center y - offset) corner: (center x + offset) @ (center y + offset). childSelected := self isPartialMatch. self selected ifTrue: [ self drawCheckedIconOn: aCanvas at: dRect ] ifFalse: [ childSelected ifTrue: [ self drawPartialCheckedIconOn: aCanvas rectangle: dRect at: center offset: offset ] ifFalse: [ self drawUncheckedIconOn: aCanvas at: dRect ] ]! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/3/2013 16:57'! drawCheckedIconOn: aCanvas at: dRect | icon | icon := Smalltalk ui icons checkedBoxIcon. icon ifNil: [ aCanvas frameAndFillRectangle: dRect fillColor: Color gray borderWidth: 1 borderColor: Color black ] ifNotNil: [ aCanvas drawImage: icon at: (dRect topLeft) - (0@1)]! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/3/2013 15:24'! drawPartialCheckedIconOn: aCanvas rectangle: dRect at: center offset: offset | icon | icon := Smalltalk ui icons partialCheckedBoxIcon. icon ifNil: [ | rect | aCanvas frameAndFillRectangle: dRect fillColor: Color white borderWidth: 1 borderColor: Color black. "Add a dash to show the partial selection" rect := (center x - (offset // 2)) @ (center y - (offset // 5)) corner: (center x + (offset // 2)) @ (center y + (offset // 5)). aCanvas frameAndFillRectangle: rect fillColor: Color gray borderWidth: 0 borderColor: Color black ] ifNotNil: [ aCanvas drawImage: icon at: (dRect topLeft) - (0@1) ]! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/3/2013 15:17'! drawUncheckedIconOn: aCanvas at: dRect | icon | icon := Smalltalk ui icons uncheckedBoxIcon. icon ifNil: [ aCanvas frameAndFillRectangle: dRect fillColor: Color white borderWidth: 1 borderColor: Color black. ] ifNotNil: [ aCanvas drawImage: icon at: (dRect topLeft) - (0@1)]! ! SlotVirus class removeSelector: #spread! SlotVirus class removeSelector: #removeBrokenDoIts! SlotVirus class removeSelector: #refresh! SlotVirus class removeSelector: #newLayoutFor:! SlotVirus class removeSelector: #layoutScopeFor:! SlotVirus class removeSelector: #invalidClasses! SlotVirus class removeSelector: #installNewLayouts! SlotVirus class removeSelector: #installLayoutVariable! SlotVirus class removeSelector: #fixSuperclassSubclasses:! SlotVirus class removeSelector: #checkSlotsIndices:! SlotVirus class removeSelector: #checkLayoutOfClass:! SlotVirus class removeSelector: #checkLayout:! SlotVirus class removeSelector: #checkInheritedSlots:! SlotVirus class removeSelector: #checkDuplicateClass:! SlotVirus class removeSelector: #checkAllLayouts! SlotVirus class removeSelector: #basicWeakLayoutFor:! SlotVirus class removeSelector: #basicVariableLayoutFor:! SlotVirus class removeSelector: #basicLayoutScopeFor:! SlotVirus class removeSelector: #basicLayoutFor:! Smalltalk globals removeClassNamed: #SlotVirus! ClassDescription removeSelector: #initializeLayout! "KernelTests"! "Morphic-Base"! "Network-Mail"! "Polymorph-Widgets"! "Slot"! ----End fileIn----! ----QUIT----2013-12-04T09:29:06.281075+01:00 Pharo.image priorSource: 28041114! ----STARTUP----2013-12-04T09:34:57.288821+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-04T09:34:57.464817+01:00 Pharo-30618.image priorSource: 28065955! ----STARTUP----2013-12-04T13:15:47.002407+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/4/2013 13:12' prior: 78373060! commentForCurrentUpdate ^ '12077 MNU in AdditionalMethodState>>analogousCodeTo: https://pharo.fogbugz.com/f/cases/12077 12319 Replace includesAllOf: by includesAll: everywhere. https://pharo.fogbugz.com/f/cases/12319 12332 New icons for remotes + ui centered at opening https://pharo.fogbugz.com/f/cases/12332 12284 Problem with credential https://pharo.fogbugz.com/f/cases/12284 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/4/2013 13:12'! script274 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.52.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.213.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.610.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-EstebanLorenzano.109.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-EstebanLorenzano.34.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.252.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.89.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/4/2013 13:13'! update30619 "self new update30619" self withUpdateLog: '12077 MNU in AdditionalMethodState>>analogousCodeTo: https://pharo.fogbugz.com/f/cases/12077 12319 Replace includesAllOf: by includesAll: everywhere. https://pharo.fogbugz.com/f/cases/12319 12332 New icons for remotes + ui centered at opening https://pharo.fogbugz.com/f/cases/12332 12284 Problem with credential https://pharo.fogbugz.com/f/cases/12284 '. self loadTogether: self script274 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KomitRemote commentStamp: '' prior: 77756067! I am an abstract class representing a remote repository! !KomitRemote commentStamp: '' prior: 78409730! I am an abstract class representing a remote repository! !KomitRemote class methodsFor: 'icon' stamp: 'BenjaminVanRyseghem 12/4/2013 09:53'! icon self == KomitRemote ifTrue: [ ^ nil ]. ^ icon ifNil: [ icon := Pharo3UIThemeIcons form16x16FromContents: self iconContents ]! ! !KomitRemote class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:59'! iconContents ^ nil! ! !KomitRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 12/4/2013 09:59' prior: 77757361! icon ^ self class icon! ! !KomitHttpRemote class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 10:01'! icon ^ 'HTTP'! ! !RemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 10:18'! initialExtent ^ 700@460! ! !KomitSqueakSourceRemote class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 09:59'! iconContents ^ #(0 0 0 0 660364380 2203934045 3076283484 3931987293 3931987293 3076283484 2203934045 660364380 0 0 0 0 0 0 41975936 1968987228 4167065437 4286082392 4286936149 4287658835 4287658835 4286936149 4286082392 4167065437 1968987228 41975936 0 0 0 41975936 3109837916 4285228378 4287593043 4291076186 4291667804 4292127581 4292127837 4291667547 4291075931 4287593043 4285228378 3093126493 41975936 0 0 1968987228 4285228378 4271275346 4292062301 4293442400 4293381010 4292462761 4292397224 4293381010 4293507938 4292127837 4271275346 4285228378 1968987228 0 660364380 4167065437 4285883460 4283909670 4289762912 4294102666 4293774990 4293840784 4293840528 4293774991 4294037386 4290091618 4283778341 4286014789 4167065437 660364380 2220711261 4286082392 4286736698 4292524663 4286278471 4292591497 4294104990 4294104734 4294038942 4294104989 4292657289 4286804044 4292984698 4286473784 4286082392 2203934045 3076283484 4289039195 4289366087 4290749037 4293578128 4288712299 4294104995 4294104995 4294104995 4294104995 4288778091 4293577873 4290880621 4289300551 4289039195 3076283484 3931987293 4290945116 4292918906 4287461972 4294104477 4293776288 4284832325 4291671690 4292395154 4284634947 4293184153 4294104222 4287527764 4292853371 4290945115 3931987293 3931987293 4291273566 4294036614 4289829483 4294104737 4292263568 4280427042 4287857765 4289238385 4280887593 4290750848 4294038944 4289829228 4294036869 4291339356 3931987293 3076283484 4289762398 4292261495 4289434727 4286936408 4287397215 4287528544 4292460946 4292263568 4288843885 4289830520 4288580969 4290749812 4293510785 4289762398 3076283484 2203934045 4287791196 4288381524 4286015047 4285884492 4284108861 4285161032 4285884495 4284569153 4285095495 4283845946 4284897858 4286015303 4287264076 4287791196 2203934045 660364380 4167196765 4288709192 4291078000 4286278732 4290487932 4291408776 4294104995 4294104995 4289896312 4288580457 4285817928 4289434209 4288051780 4167197021 660364380 0 1968987228 4286280028 4277193860 4294037644 4294103702 4294038685 4294104993 4294170273 4294104221 4294038422 4294037389 4277259651 4286280029 1968987228 0 0 41975936 3109837916 4286411357 4292853630 4294037129 4294037902 4294103699 4294103186 4294103439 4294102922 4292853374 4286411357 3093126493 41975936 0 0 0 41975936 1968987228 4167262557 4288645727 4291079032 4293050753 4293051009 4291144311 4288645727 4167262557 1968987228 41975936 0 0 0 0 0 0 660364380 2203934045 3076283484 3931987293 3931987293 3076283484 2203934045 660364380 0 0 0 0)! ! !AdditionalMethodState methodsFor: 'testing' stamp: 'eem 12/3/2013 11:42' prior: 17491417! analogousCodeTo: aMethodProperties | bs | self class == aMethodProperties class ifFalse: [^false]. (bs := self basicSize) = aMethodProperties basicSize ifFalse: [^false]. 1 to: bs do: [:i| ((self basicAt: i) analogousCodeTo: (aMethodProperties basicAt: i)) ifFalse: [^false]]. ^true! ! !KomitCacheRemote class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 10:16'! icon ^ 'DIR'! ! !Timespan methodsFor: 'testing' stamp: 'ClementBera 12/2/2013 12:42'! includesAll: aCollection "Answer whether all the elements of aCollection are in the receiver." aCollection do: [:elem | (self includes: elem) ifFalse: [^ false]]. ^ true ! ! !Timespan methodsFor: 'testing' stamp: 'ClementBera 12/2/2013 12:42' prior: 53219776! includesAllOf: aCollection self flag: 'use includesAll: instead'. ^ self includesAll: aCollection ! ! !Timespan methodsFor: 'testing' stamp: 'ClementBera 12/2/2013 12:46'! includesAny: aCollection "Answer whether any element of aCollection is included in the receiver" aCollection do: [ :elem | (self includes: elem) ifTrue: [^ true]]. ^false ! ! !Timespan methodsFor: 'testing' stamp: 'ClementBera 12/2/2013 12:46' prior: 53220019! includesAnyOf: aCollection self flag: 'use includesAny: instead'. ^ self includesAny: aCollection! ! !KomitGemstoneRemote class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 09:54'! iconContents ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79642688 0 0 0 0 0 0 0 0 0 0 0 0 181154611 2260611104 3871289375 4273942303 3804180256 1975529505 67065173 0 0 0 0 0 0 0 0 0 2579378208 3955175455 1992175648 1086271520 2512400417 4290653983 2277453600 0 0 0 0 0 0 0 0 1237332255 4290653983 1690251297 0 0 0 3351195424 3988664095 0 0 0 90596966 2154326120 3714541415 4133971815 3630655335 2053727846 784086828 50299008 0 0 0 3334418464 3720228639 0 0 0 2271635046 4184237670 2305189478 1667721063 3026609766 4284900966 2238212200 0 0 33554431 1354706976 4290653983 2411671584 0 0 0 3731252838 2875680615 0 0 0 3563480678 3882313575 0 2461937439 3837669407 4290653983 2646486816 114644267 0 0 0 3311822438 4050085735 1281910888 0 0 493513322 610953834 97268531 3351195424 4273942303 4257099551 1321283873 0 0 0 0 912812136 4016465510 4284900966 3412551527 1248290663 0 0 0 0 566310439 3586011167 4189990688 398997281 0 0 0 0 375941224 2288478055 4066797158 4284900966 2355521126 0 0 0 0 1824468769 4290653983 1404973346 0 325806955 1567123560 661219689 0 0 342255206 3816119900 4201145957 309424497 0 0 0 1371549471 4290653983 1153380642 0 577333609 4284900966 2187748966 0 0 0 3684320829 4284900966 1147758953 0 0 0 3049140256 4072615712 280965152 0 61516458 3563480678 4117128806 1550280551 443313260 1181116006 3714867809 4285358945 2864460580 935211808 801321249 2797482016 4290653983 1707094049 0 0 0 610953834 2607179366 3848693350 4284900966 4251412327 3395708518 2141536822 4005506847 4290653983 4290653983 3904778016 1488924960 0 0 0 0 0 0 0 627533671 174483046 0 0 67065173 600126244 549400608 0 0 0 0 0)! ! !Komitter methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 12/4/2013 10:16' prior: 77770706! open self stagingArea packages ifEmpty: [ ^ self inform: 'No changes to commit' ]. view ifNil: [ view := KomitterUI new model: self; yourself ]. view openDialogWithSpec okAction: [ | valid | valid := view validate. valid ifTrue: [ self lastCommit: view komit ]. valid ]; cancelAction: [ self lastCommit: nil. view cancel ]; centered; modalRelativeTo: World.! ! !KomitNewSlice class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:14'! iconContents ^ #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 878481328 810847151 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777471 2675025349 4104046044 4273657575 4291485933 4273066469 3699684559 3027544004 2204605626 16777215 16777215 16777215 16777215 16777215 16777215 640645537 3160776898 4291354861 4291551726 3716264913 1012173739 16842751 16777215 16777215 978750380 2791414974 945196721 16777215 16777215 16777215 575769519 3329075401 4291289326 4290697962 2422513602 16777215 16777215 16777215 16777215 2320916567 3293601369 1147495763 3261834695 591956145 16777215 87254681 2574034116 4290304235 4290829548 2909316038 16777215 16777215 16777215 16777215 16777215 3555413791 4293216286 1559121695 222005936 3177291716 16842751 1110802091 4069573343 4290304235 4136681693 16842751 16777215 16777215 16777215 16777215 848892954 4288287511 4288352789 3349352981 16777215 2203227323 1951108536 1428453544 4288531431 4289713129 2674238409 16777215 16777215 16777215 16777215 127018020 1905009714 4287374383 4287439661 3381535020 831332138 103514282 2032959408 2435022259 4280453833 4282291914 826181037 16777215 16777215 16777215 16777215 16777215 2222863945 4286460999 4286526278 3699388996 394603587 16777215 1345290158 2770699192 4280388554 4279993794 253917098 16777215 16777215 16777215 16777215 16777215 745424483 4050666847 2473673822 325796689 16777215 16777215 1630043569 2804254141 4280388553 4279993794 388067238 16777215 16777215 16777215 16777215 16777215 1415665785 1063343477 426136186 2623886196 16777215 16777215 1176598699 2217050553 4263742667 4279861952 1596030389 16777215 16777215 16777215 16777215 16777215 190668194 2119525776 4065748366 3109512589 16777215 87254681 891452845 1277526197 3643182280 4279861952 3709699264 16777215 16777215 16777215 16777215 16777215 2353363113 3947329448 1766421925 71336127 87254681 404780458 50353578 16777215 2166720189 4279993539 4279598522 1981644726 16777215 16777215 16777215 16777215 2386069696 272662719 557222849 2788788160 1496416955 270565551 16777215 16777215 354711978 3877800390 4279466936 4229135544 924875698 16777215 16777215 16777215 959224536 2821429464 4213937877 3878195147 1646691773 16777215 16777215 16777215 16777215 321419694 3189736897 4279335349 4262557877 3374088124 1898086840 1579517631 4213805262 4179593413 3961752264 1294172342 16842751 16777215 16777215 16777215 16777215 16777215 16777215 908099249 3004989113 3726147258 4145380537 4145709502 3843784892 2552266682 757235120 16777215 16777215 16777215 16777215)! ! !KomitNewSlice methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/29/2013 13:46' prior: 77757132! remote ^ MCRepositoryGroup default repositories detect: [ :e | e description = 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main' ].! ! !KomitSmalltalkhubRemote class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:14'! iconContents ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1337895822 3032592019 3972116374 4273842831 4022184072 3149833600 2106947668 50331392 0 0 0 0 531995755 2444926324 3686507133 4240221573 4290488201 4290685839 4290751632 4289698684 4288645481 4288578915 4289433963 4256536684 3837236839 2763494759 1018927462 0 3483597388 3937110112 4223245688 4290290046 4289895290 4288711276 4288974446 4289763703 4290421119 4290223480 4290288499 4290287725 4222324583 4068371018 4100083764 0 3533994827 4121066061 4121066060 4153109577 4170282839 4240286852 4290421118 4290684289 4290618237 4239431797 4102649431 4219235923 4284698929 4284830516 4116466476 0 3483729487 4189625722 4154884950 4154620491 4137777226 4104091212 4070144090 4070739057 4218775116 4284567861 4287661166 4290688939 4286147148 4285027894 3932180015 0 3399975248 4276543704 4241737137 4240945814 4189098089 4137909582 4086787651 4068962130 4284041774 4284896566 4291412920 4293453796 4290162076 4285225272 3646901294 0 3316154448 4276543446 4239429735 4258711991 4240682642 4259700438 4104090952 4068633164 4284567603 4285488704 4293454052 4293651176 4287660134 4285159478 3462286637 0 3232466517 4293123279 4256799860 4275555516 4222190677 4276280532 4137776970 4018498635 4284830771 4285356857 4292202696 4290490527 4288713597 4285093686 3361623341 0 3348789069 4276017097 4273907073 4275621052 4239034200 4276280532 4154620491 4018761292 4285027637 4285751100 4290293146 4293255900 4286737999 4285028150 3277473834 0 3281418061 4291871661 4292529854 4275489465 4239100249 4276280531 4154752591 4018761547 4285356600 4286014015 4292400332 4289568906 4290886575 4285028150 3377611305 33554432 3281088585 4289497949 4290156907 4275555513 4274763934 4293123540 4205149777 4102516555 4285553979 4285816891 4290161561 4293585125 4286673494 4284764980 3377216551 134217728 2204585011 4187519313 4289563743 4290222449 4289761381 4290882447 4272127057 4269827653 4285553979 4286870097 4293519588 4287265888 4285027896 4182851883 2134388254 33554432 335544320 1056964608 3075752747 4170281545 4289168469 4288905041 4288575564 4286473282 4285816895 4288120942 4287660391 4150086703 2804688407 1006632960 301989888 0 0 100663296 419430400 1124073472 2604346396 4035142719 4271666505 4269104443 4285291066 4015408939 2350848015 1006632960 369098752 67108864 0 0 0 0 0 67108864 335544320 973078528 2049318161 3243130149 1829768199 855638016 268435456 67108864 0 0 0)! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 10:16' prior: 78360260! openRemoteManager | view | view := RemotesManager new packages: (MCWorkingCopy allManagers sorted: [:a :b | a packageName < b packageName ]). view openWithSpec centered; modalRelativeTo: self window! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 10:17' prior: 78125786! commitSlice: aSlice | versions slice view workingCopy version | slice := MCSliceInfo new. view := KomitSliceUI new. view openDialogWithSpec centered; modalRelativeTo: World. view cancelled ifTrue: [ ^ self ]. slice issueNumber: view issueNumberText. slice issueSummary: view titleText. versions := self createVersionFor: aSlice. slice includedPackages: versions. workingCopy := slice makeSlice. version := workingCopy newVersionWithMessage: aSlice message in: aSlice remote remote. Cursor wait showWhile: [ [ self storeVersion: version for: aSlice; storeDependencies: version for: aSlice ] ensure: [ (MCVersionInspector new version: version) show ] ]! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/29/2013 13:50'! retryOnCredentialRequest: aBlock for: aRepository aBlock on: MCPermissionDenied do: [ :error | |credentials| credentials := MCCredentialsRequest signalUrl: aRepository location username: aRepository user password: aRepository password. credentials ifNotNil: [ aRepository credentials: credentials. ^ self retryOnCredentialRequest: aBlock for: aRepository ]]! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/29/2013 13:51' prior: 78128071! storeDependencies: newVersion for: aKomit self retryOnCredentialRequest: [ aKomit repository storeDependencies: newVersion ] for: aKomit repository! ! !MCKomitSubmitter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/29/2013 13:51' prior: 78128288! storeVersion: newVersion for: aKomit self retryOnCredentialRequest: [ aKomit repository storeVersion: newVersion ] for: aKomit repository! ! !Collection methodsFor: 'testing' stamp: 'ClementBera 12/2/2013 12:41' prior: 19547647! includesAllOf: aCollection self flag: 'use includesAll: instead'. ^ self includesAll: aCollection.! ! !TimespanTest methodsFor: 'tests' stamp: 'ClementBera 12/2/2013 12:44'! testIncludesAll self assert: (aTimespan includesAllOf: (Bag with: jan01)). self deny: (aTimespan includesAllOf: (Bag with: jan01 with: jan08)) ! ! !TimespanTest methodsFor: 'tests' stamp: 'ClementBera 12/2/2013 12:46'! testIncludesAny self deny: (aTimespan includesAnyOf: (Bag with: dec31)). self assert: (aTimespan includesAnyOf: (Bag with: jan01 with: jan08)) "Error is due to bug in Timespan includesAnyOf: aCollection " "Answer whether any element of aCollection is included in the receiver" "aCollection do: [ :elem | (self includes: elem) ifTrue: [^ true]]. Shouldn't this return false if none are included? " ! ! MCKomitSubmitter removeSelector: #retryOnCredentialRequest:! KomitCacheRemote removeSelector: #icon! Matrix removeSelector: #includesAllOf:! KomitNewSlice removeSelector: #icon! KomitGemstoneRemote removeSelector: #icon! KomitSmalltalkhubRemote removeSelector: #icon! KomitSqueakSourceRemote removeSelector: #icon! KomitHttpRemote removeSelector: #icon! TimespanTest removeSelector: #testIncludesAnyOf! TimespanTest removeSelector: #testIncludesAllOf! "Collections-Abstract"! "Collections-Unordered"! "Kernel"! "KernelTests"! "Komitter"! ----End fileIn----! ----QUIT----2013-12-04T13:15:57.062406+01:00 Pharo.image priorSource: 28066152! ----STARTUP----2013-12-04T13:21:46.363788+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-04T13:21:46.561785+01:00 Pharo-30619.image priorSource: 28094245! ----STARTUP----2013-12-04T14:51:46.325503+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/4/2013 14:49' prior: 78398098! commentForCurrentUpdate ^ '12272 Better algorithm for finding the inbox https://pharo.fogbugz.com/f/cases/12272 12334 Nautilus codepane hides first lines if pin is set https://pharo.fogbugz.com/f/cases/12334 11423 Running unit tests that raise deprecation warnings makes them fail incomprehensibly https://pharo.fogbugz.com/f/cases/11423'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/4/2013 14:49'! script275 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.37.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.54.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.213.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.610.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.252.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.89.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/4/2013 14:49'! update30620 "self new update30620" self withUpdateLog: '12272 Better algorithm for finding the inbox https://pharo.fogbugz.com/f/cases/12272 12334 Nautilus codepane hides first lines if pin is set https://pharo.fogbugz.com/f/cases/12334 11423 Running unit tests that raise deprecation warnings makes them fail incomprehensibly https://pharo.fogbugz.com/f/cases/11423'. self loadTogether: self script275 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Deprecation methodsFor: '*SUnit-Core' stamp: 'DamienCassou 12/4/2013 09:42'! sunitAnnounce: aTestCase toResult: aTestResult self resume! ! !SUnitTest methodsFor: 'helpers' stamp: 'DamienCassou 12/4/2013 09:46'! deprecatedMessage self deprecated: 'Deprecated method used by #testIgnoreDeprecationWarnings' on: '' in: ''! ! !SUnitTest methodsFor: 'testing' stamp: 'DamienCassou 12/4/2013 09:47'! raiseDeprecationWarnings | oldRaiseWarning | oldRaiseWarning := Deprecation raiseWarning. [ Deprecation raiseWarning: true. self deprecatedMessage. self fail ] ensure: [ Deprecation raiseWarning: oldRaiseWarning ]! ! !SUnitTest methodsFor: 'testing' stamp: 'DamienCassou 12/4/2013 09:46'! testIgnoreDeprecationWarnings | oldRaiseWarning | oldRaiseWarning := Deprecation raiseWarning. [ Deprecation raiseWarning: false. self deprecatedMessage. self assert: true ] ensure: [ Deprecation raiseWarning: oldRaiseWarning ]! ! !SUnitTest methodsFor: 'testing' stamp: 'DamienCassou 12/4/2013 09:52'! testRaiseDeprecationWarnings | case result | case := self class selector: #raiseDeprecationWarnings. result := case run. self assert: result defects asArray equals: (Array with: case). self assertForTestResult: result runCount: 1 passed: 0 failed: 1 errors: 0! ! !Komitter class methodsFor: 'icon' stamp: 'BenjaminVanRyseghem 11/28/2013 17:31' prior: 77765701! iconData ^ #(0 4291344726 4291011108 4291012395 4291011367 4290812957 4290613780 4291344726 0 0 0 0 0 0 0 0 4290950202 4294761036 4294698101 4294834877 4294767789 4294568578 4294303329 4294363448 4290950202 0 0 0 0 0 0 0 4291209781 4294761294 4294697579 4294834877 4294767789 4294568578 4294303329 4294363448 4290215691 0 0 0 0 0 0 0 4290483257 4293638436 4294435416 4294702476 4294568309 4294170434 4293640485 4293762572 4290874662 0 0 0 0 0 0 0 4290417209 4294302048 4294701206 4294834877 4294767789 4294568578 4294303329 4294363448 4290874662 0 0 0 0 0 0 0 4290483000 4294302048 4294701206 4294834877 4294767788 4294568577 4294303329 4294363448 4290940453 0 0 0 0 0 0 0 4290548791 4294302048 4294700950 4294834878 4294768043 4294568576 4294303330 4294363449 4290940453 0 0 0 0 0 0 0 4290614582 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 0 4290680630 4290427290 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4290427290 0 4290680374 4290427290 4294441212 4287603139 4294309882 4287603139 4294309882 4294309882 4287603139 4287603139 4294441212 4287603139 4287603139 4294309882 4290427290 0 4290680376 4289835439 4294309882 4287011519 4294048510 4287011519 4294048510 4287011519 4294309882 4294309882 4294309882 4287011519 4294048510 4294309882 4289835439 0 4290680378 4289375144 4294048510 4286549936 4294048510 4286549936 4294048510 4286549936 4294048510 4294048510 4294048510 4294048510 4286549936 4294048510 4289375144 0 0 4288522415 4293523711 4293523711 4285957539 4293523711 4293523711 4293523711 4285957539 4285957539 4293523711 4285957539 4285957539 4293523711 4288522415 0 0 4288522415 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4288522415 0 0 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !KomitNewSlice methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/28/2013 18:19' prior: 78419637! remote ^ MCRepositoryGroup default repositories detect: [ :e | e description = 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main/' ] ifNone: [ MCRepositoryGroup default repositories detect: [ :e | e description = 'http://smalltalkhub.com/mc/Pharo/Pharo30Inbox/main' ] ]! ! "Komitter"! "SUnit-Core"! "SUnit-Tests"! ----End fileIn----! ----QUIT----2013-12-04T14:51:53.0015+01:00 Pharo.image priorSource: 28094442! ----STARTUP----2013-12-04T14:58:05.54144+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-04T14:58:05.715438+01:00 Pharo-30620.image priorSource: 28110176! ----STARTUP----2013-12-04T20:31:52.10367+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 12/4/2013 20:27' prior: 78426388! commentForCurrentUpdate ^ '- issue 12317: Better way to let the user handle missing class when loading code https://pharo.fogbugz.com/f/cases/12317/Better-way-to-let-the-user-handle-missing-class-when-loading-code - issue 12335: Some fixes https://pharo.fogbugz.com/f/cases/12335/Some-fixes - issue 12336: Do not open Komitter modal https://pharo.fogbugz.com/f/cases/12336/Do-not-open-Komitter-modal'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 12/4/2013 20:27'! script276 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-StephaneDucasse.58.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.213.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.610.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-StephaneDucasse.254.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.91.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 12/4/2013 20:28'! update30621 "self new update30621" self withUpdateLog: '- issue 12317: Better way to let the user handle missing class when loading code https://pharo.fogbugz.com/f/cases/12317/Better-way-to-let-the-user-handle-missing-class-when-loading-code - issue 12335: Some fixes https://pharo.fogbugz.com/f/cases/12335/Some-fixes - issue 12336: Do not open Komitter modal https://pharo.fogbugz.com/f/cases/12336/Do-not-open-Komitter-modal'. self loadTogether: self script276 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MissingClassError commentStamp: '' prior: 0! I'm a specialized error that is invoked when trying to load a method for a non existing class. By default this exception is not resumable but it can be set and used for example as follow: [ FileStream fileIn: aFile ] on: MissingClassError do: [ :exception | exception defineClass. exception asResumable. exception resume. ] So we give the possibility to compile and resume compution. The method defineClass defines a simple class inheriting from Object (or from the class specified using #superclassName:) The idea is that if later the effective class is loaded its definition will override this one. ! !MorphicTextInputFieldAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 14:39'! encrypted: aBoolean self widgetDo: [ :w | w encrypted: aBoolean. w changed ]! ! !SpecDialogWindow methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:17' prior: 77556239! setToolbarFrom: aBlock | newToolbar | newToolbar := aBlock value. toolbar := newToolbar. newToolbar owner: self! ! !SpecDialogWindow methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 13:19' prior: 77556609! toolbar: anObject toolbar := anObject. anObject owner: self. self removeMorph: self submorphs last. self addMainPanel! ! !MissingClassError commentStamp: '' prior: 78453991! I'm a specialized error that is invoked when trying to load a method for a non existing class. By default this exception is not resumable but it can be set and used for example as follow: [ FileStream fileIn: aFile ] on: MissingClassError do: [ :exception | exception defineClass. exception asResumable. exception resume. ] So we give the possibility to compile and resume compution. The method defineClass defines a simple class inheriting from Object (or from the class specified using #superclassName:) The idea is that if later the effective class is loaded its definition will override this one. ! !MissingClassError class methodsFor: 'instance creation' stamp: 'StephaneDucasse 12/1/2013 21:58'! className: aString ^ self new className: aString; yourself! ! !MissingClassError methodsFor: 'actions' stamp: 'StephaneDucasse 12/4/2013 20:19'! asResumable "When sent to the receiver, this one turns into a resumable exception allowing for example to define missing class on the fly." resumable := true.! ! !MissingClassError methodsFor: 'accessing' stamp: 'StephaneDucasse 12/1/2013 21:59'! className: aString className := aString! ! !MissingClassError methodsFor: 'actions' stamp: 'StephaneDucasse 12/4/2013 20:21'! defineClass Compiler evaluate: self superclassName, ' subclass: #', className, ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''Stub-Classes'''! ! !MissingClassError methodsFor: 'testing' stamp: 'StephaneDucasse 12/1/2013 21:55'! isResumable "Determine whether an exception is resumable. By default not but can be resumable using accessors at exception raising time." ^ resumable ifNil: [ super isResumable ]! ! !MissingClassError methodsFor: 'accessing' stamp: 'StephaneDucasse 12/4/2013 20:21'! superclassName ^ superclassName ifNil: [ superclassName := 'Object' ] ! ! !MissingClassError methodsFor: 'accessing' stamp: 'StephaneDucasse 12/4/2013 20:20'! superclassName: aString superclassName := aString ! ! !Komitter methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 12/4/2013 17:06' prior: 77771174! openAndCommitToMonticello self openAndDo: [ self lastCommit ifNotNil: [ self lastCommit commitToMonticello ]]! ! !Komitter methodsFor: 'opening' stamp: 'BenjaminVanRyseghem 12/4/2013 17:06'! openAndDo: aBlock self stagingArea packages ifEmpty: [ ^ self inform: 'No changes to commit' ]. view ifNil: [ view := KomitterUI new model: self; yourself ]. view openDialogWithSpec okAction: [ | valid | valid := view validate. valid ifTrue: [ self lastCommit: view komit ]. aBlock value. valid ]; cancelAction: [ self lastCommit: nil. view cancel ]; centered! ! !Komitter methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 17:57' prior: 77772355! stagingArea ^ stagingArea value ! ! !MorphicDialogWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:13'! toolbar: aToolbar self widgetDo: [ :w | w toolbar: aToolbar ]! ! !DialogWindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/4/2013 13:13' prior: 77552740! initialize super initialize. toolbar := OkCancelToolbar new asValueHolder. toolbar whenChangedDo: [ :t | self changed: #toolbar: with: { t } ]! ! !SpecTreeNodeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 14:29' prior: 77564362! lastClicked: aBoolean self nodeModel lastClicked: aBoolean. aBoolean ifTrue: [ self model highlightedItem: self nodeModel ] ifFalse: [ self model highlightedItem: nil ].! ! !MethodDeclaration methodsFor: 'importing' stamp: 'StephaneDucasse 12/4/2013 20:19'! handleMissingBehavior "self error: ('Cannot install method in unexistent behavior {1}' format: {(behaviorName asString)})" (MissingClassError className: behaviorName asString) signal! ! !MethodDeclaration methodsFor: 'importing' stamp: 'StephaneDucasse 12/1/2013 21:56' prior: 45173910! importFor: requestor self existsBehavior ifFalse: [ self handleMissingBehavior ]. requestor ifNotNil: [ requestor contents ifNil: [ requestor contents: contents ] ]. ^ self targetClass compile: contents classified: categoryName withStamp: stamp notifying: requestor! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 14:36' prior: 77679166! initialize super initialize. ghostText := '' asValueHolder. acceptOnCR := true asValueHolder. entryCompletion := self defaultEntryCompletion asValueHolder. isEncrypted := false asValueHolder. ghostText whenChangedDo: [ :txt | self changed: #ghostText: with: { txt } ]. acceptOnCR whenChangedDo: [ :bool | self changed: #acceptOnCR: with: { bool } ]. isEncrypted whenChangedDo: [ :bool | self changed: #encrypted: with: { bool } ].! ! Komitter removeSelector: #open! "CodeImport"! "Komitter"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-12-04T20:31:59.623668+01:00 Pharo.image priorSource: 28110370! ----STARTUP----2013-12-04T20:37:49.530718+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-04T20:37:49.702715+01:00 Pharo-30621.image priorSource: 28128596! ----STARTUP----2013-12-05T08:20:52.381851+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/5/2013 08:17' prior: 78442318! commentForCurrentUpdate ^ '12334 Nautilus codepane hides first lines if pin is set https://pharo.fogbugz.com/f/cases/12334 12337 Install global shortcut https://pharo.fogbugz.com/f/cases/12337 12333 Add a button to edit a remote in RemotesManager https://pharo.fogbugz.com/f/cases/12333'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/5/2013 08:18'! script277 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.49.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-StephaneDucasse.134.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.213.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.43.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.66.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.612.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-EstebanLorenzano.146.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-StephaneDucasse.254.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.91.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.120.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/5/2013 08:18'! update30622 "self new update30622" self withUpdateLog: '12334 Nautilus codepane hides first lines if pin is set https://pharo.fogbugz.com/f/cases/12334 12337 Install global shortcut https://pharo.fogbugz.com/f/cases/12337 12333 Add a button to edit a remote in RemotesManager https://pharo.fogbugz.com/f/cases/12333'. self loadTogether: self script277 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CredentialEditor commentStamp: '' prior: 0! I am a simple UI used to set the credentials of a remote! !RemotesManager commentStamp: '' prior: 78360522! I am an user interface used to link mcpackages and remotes! !KomitRemote methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 12/4/2013 12:58'! password ^ self remote password! ! !KomitRemote methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:04'! password: aString self remote password: aString! ! !KomitRemote methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 12:59'! username ^ self remote user! ! !KomitRemote methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:04'! username: aString self remote user: aString! ! !Komitter class methodsFor: 'world menu' stamp: 'BenjaminVanRyseghem 12/4/2013 18:14'! initialize World bindKeyCombination: $k command toAction: [ self openAndCommitToMonticello ]! ! !Komitter class methodsFor: 'world menu' stamp: 'BenjaminVanRyseghem 12/4/2013 18:13'! komitterMenuOn: aBuilder (aBuilder item: #Komitter) action: [ self openAndCommitToMonticello ]; order: 0; parent: #Tools; help: 'Cherry pick what you commit'; icon: self taskbarIcon! ! !Komitter class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 18:13'! openAndCommitToMonticello KomitStagingArea resetCurrent. ^ self new stagingArea: KomitStagingArea current; openAndCommitToMonticello; yourself! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 14:44' prior: 78146999! initializeLatelyPresenter tree whenHighlightedItemChanged: [ :node || item | item := node ifNil: [ nil ] ifNotNil: [ node content ]. diff leftText: (self leftTextFor: item); rightText: (self rightTextFor: item). (item isNil or: [ item added ]) ifTrue: [ diff showOnlyDestination: true ] ifFalse: [ ( item removed or: [ item isPackage or: [ (item isClass and: [ item isDirty not ]) ] ] ) ifTrue: [ diff showOnlySource: true ] ifFalse: [ diff showBoth ] ] ]. tree whenSelectedItemsChanged: [ self updateRemotes ]! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 17:14' prior: 78422408! openRemoteManager | view | view := RemotesManager new packages: (MCWorkingCopy allManagers sorted: [:a :b | a packageName < b packageName ]). view openDialogWithSpec centered; modalRelativeTo: self window! ! !CredentialEditor commentStamp: '' prior: 78472178! I am a simple UI used to set the credentials of a remote! !CredentialEditor class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/4/2013 14:33'! defaultSpec ^ SpecLayout composed newColumn: [ :col | col newRow: [ :r | r add: #usernameLabel width: 80; add: #username ] height: self inputTextHeight; newRow: [ :r | r add: #passwordLabel width: 80; add: #password ] height: self inputTextHeight + 4; newRow: [ :r | r add: #showPasswordWidget width: 120; newColumn: [ :c | ] ] height: self inputTextHeight + 4; newRow: [ :r | ] ]; yourself! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:04'! getPassword ^ password text! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 13:03'! getUsername ^ username text! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 14:31'! initialExtent ^ 400@160! ! !CredentialEditor methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 12/4/2013 13:24'! initializeDialogWindow: aWindow self bindKeyCombination: $m control toAction: [ aWindow triggerOkAction ]! ! !CredentialEditor methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 12/4/2013 14:34'! initializePresenter showPassword whenActivatedDo: [ password beDecrypted ]; whenDesactivatedDo: [ password beEncrypted ]! ! !CredentialEditor methodsFor: 'initialize-release' stamp: 'BenjaminVanRyseghem 12/4/2013 14:31'! initializeWidgets username := self newTextInput. usernameLabel := self newLabel. password := self newTextInput. passwordLabel := self newLabel. showPassword := self newCheckBox. usernameLabel text: 'Username'. passwordLabel text: 'Password'. password ghostText: '*****'; autoAccept: true; beEncrypted. username ghostText: 'John Doe'; autoAccept: true. showPassword label: 'Show password'. self focusOrder add: username; add: password; add: showPassword.! ! !CredentialEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:41'! password ^ password! ! !CredentialEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:41'! passwordLabel ^ passwordLabel! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 12:51'! setPassword: aPassword password text: aPassword! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 12:51'! setUsername: aName username text: aName! ! !CredentialEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 14:31'! showPasswordWidget ^ showPassword! ! !CredentialEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 12:47'! title ^ 'Edit credentials'! ! !CredentialEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:41'! username ^ username! ! !CredentialEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:41'! usernameLabel ^ usernameLabel! ! !RemotesManager commentStamp: '' prior: 78472298! I am an user interface used to link mcpackages and remotes! !RemotesManager class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/4/2013 12:55' prior: 78362623! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #packages; addSplitter; newColumn: [ :col | col newRow: [ :r | r newColumn: [ :c | ]; add: #editRemoteWidget width: self buttonHeight + 4; add: #removeRemoteWidget width: self buttonHeight + 4; add: #addRemoteWidget width: self buttonHeight ] height: self buttonHeight; add: #remotes ] ]; yourself! ! !RemotesManager class methodsFor: 'icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:55'! editRemoteIcon ^ editRemoteIcon ifNil: [ editRemoteIcon := Pharo3UIThemeIcons form16x16FromContents: self editRemoteIconData ]! ! !RemotesManager class methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:55'! editRemoteIconData ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291210037 4290808596 4290810135 4290677781 4290147595 4291210037 0 0 0 0 0 0 0 0 0 4290683681 4294624811 4294631521 4294768803 4294568569 4294105160 4294031910 4290683681 0 0 0 0 0 0 0 0 4291073566 4294625582 4294630746 4294768804 4294568569 4294105160 4294031910 4289552134 0 0 0 0 0 0 0 0 4289952033 4293174041 4294303042 4294569571 4294170172 4293309977 4293101065 4290539540 0 0 0 0 0 0 0 0 4290280479 4294036034 4294634621 4294768801 4294568564 4294105159 4294031911 4290802196 0 0 0 0 0 0 0 0 4290280223 4294036035 4294634621 4294768801 4294568567 4294105160 4294031910 4290868243 0 0 0 0 0 0 0 0 4290280224 4294036037 4294634620 4294768799 4294568571 4294105162 4294031910 4290868498 0 0 0 0 0 0 0 0 4290280225 4293969990 4294634874 4294768798 4294568575 4284440415 4282335071 4282335071 4282335071 4282335071 4282335071 4282335071 0 0 0 0 4290280225 4292976410 4294302527 4294569825 4294170431 4282335071 4284440415 4282335071 4294967295 4282335071 4284440415 4278190080 0 0 0 0 4291537467 4293042201 4294302271 4294569825 4294170431 4282335071 4284440415 4288651167 4294967295 4288651167 4284440415 4278190080 0 0 0 0 0 4291209522 4291140130 4291205922 4291073824 4282335071 4286611584 4294967295 4278190080 4294967295 4286611584 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4290756543 4288651167 4278190080 4288651167 4290756543 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4294967295 4294967295 4294967295 4294967295 4294967295 4278190080 0 0 0 0 0 0 0 0 0 4282335071 4278190080 4278190080 4278190080 4278190080 4278190080 4282335071)! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 12:52' prior: 78365076! addRemote self newRemote ifNotNil: [ :repo | MCRepositoryGroup default addRepository: repo. remotes roots: self buildRoots ]! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:57'! addRemoteWidget ^ addRemote! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 13:02' prior: 78365560! buildRoots | repos | packages selectedItem ifNil: [ repos := #() ] ifNotNil: [ :item | repos := item content repositoryGroup repositories ]. ^ MCRepositoryGroup default repositories select: [ :each | each isCache not ] thenCollect: [ :each || remote | remote := each koRemote. TreeNodeModel new content: remote; hasContentToShow: true; selected: (repos includes: each); whenSelectedChanged: [ :bool | self doIfNotSilent: [ self change: bool forRemote: remote ] ]; yourself ]! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 14:28'! editRemote | item view | item := remotes highlightedItem content. view := CredentialEditor new. view setPassword: item password; setUsername: item username. view openDialogWithSpec centered; modalRelativeTo: self window. view cancelled ifTrue: [ ^ self ]. item username: view getUsername; password: view getPassword! ! !RemotesManager methodsFor: 'private-icons' stamp: 'BenjaminVanRyseghem 12/4/2013 10:54'! editRemoteIcon ^ self class editRemoteIcon! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:55'! editRemoteWidget ^ editRemote! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 13:12'! initializeDialogWindow: aWindow aWindow toolbar: OkToolbar new! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 10:56' prior: 78366822! initializePresenter packages whenSelectedItemChanged: [ :item | self updateRemoteSelectionFrom: item ]. remotes whenHighlightedItemChanged: [ :item | editRemote enabled: item notNil. removeRemote enabled: item notNil ]! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 13:02' prior: 78367106! initializeWidgets packages := self instantiate: SearchableTree. remotes := self newTree. addRemote := self newButton. removeRemote := self newButton. editRemote := self newButton. packages displayBlock: [ :each | each packageName ]. remotes beCheckList; removeOnlyLastSelected: true; autoMultiSelection: true; displayBlock: [ :item | item label ]; iconBlock: [ :item | item icon ]; roots: self buildRoots. addRemote icon: self addRemoteIcon; action: [ self addRemote ]; help: 'Add a new remote'. removeRemote icon: self removeRemoteIcon; action: [ self removeRemote ]; enabled: false; help: 'Remote the selected remote'. editRemote icon: self editRemoteIcon; action: [ self editRemote ]; enabled: false; help: 'Edit the selected remote'. self focusOrder add: packages; add: remotes; add: removeRemote; add: addRemote! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 12:52'! newRemote | types index | types := MCRepository allConcreteSubclasses asArray. index := UIManager default chooseFrom: (types collect: [:ea | ea description]) title: 'Repository type:'. ^ index = 0 ifFalse: [(types at: index) morphicConfigure]! ! !RemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/4/2013 14:27' prior: 78368536! removeRemote | item | item := remotes highlightedItem content. MCRepositoryGroup default removeRepository: item remote. remotes roots: self buildRoots; highlightedItem: nil! ! !RemotesManager methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 12:57'! removeRemoteWidget ^ removeRemote! ! !MultipleMethodsEditor methodsFor: 'updating' stamp: 'NicolaiHess 12/4/2013 11:00' prior: 27312174! updateLayoutForSingleWithButtons current ifNil: [ ^ self ]. self addMorph: current fullFrame: (LayoutFrame identity bottomOffset: -25). self addMorph: buttonsContainer fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25). current color: Color white. ! ! Komitter class removeSelector: #finderMenuOn:! RemotesManager removeSelector: #removeRepository! RemotesManager removeSelector: #newRepository! RemotesManager removeSelector: #addRepository! "Komitter"! "Nautilus"! ----End fileIn----! ----QUIT----2013-12-05T08:20:59.577852+01:00 Pharo.image priorSource: 28128793! ----STARTUP----2013-12-05T08:26:25.747233+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-05T08:26:25.931228+01:00 Pharo-30622.image priorSource: 28153168! ----STARTUP----2013-12-05T14:26:51.374537+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/5/2013 14:23' prior: 78460739! commentForCurrentUpdate ^ '12346 Cleanup on some Nautilus methods https://pharo.fogbugz.com/f/cases/12346 12351 ChangesBrowser is broken https://pharo.fogbugz.com/f/cases/12351 12350 Rendering artifacts on shrinking SystemWindows https://pharo.fogbugz.com/f/cases/12350 12343 Cleanup on some UI methods https://pharo.fogbugz.com/f/cases/12343'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/5/2013 14:23'! script278 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.647.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.88.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-EstebanLorenzano.267.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.215.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.984.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-StephaneDucasse.254.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.91.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.988.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/5/2013 14:24'! update30623 "self new update30623" self withUpdateLog: '12346 Cleanup on some Nautilus methods https://pharo.fogbugz.com/f/cases/12346 12351 ChangesBrowser is broken https://pharo.fogbugz.com/f/cases/12351 12350 Rendering artifacts on shrinking SystemWindows https://pharo.fogbugz.com/f/cases/12350 12343 Cleanup on some UI methods https://pharo.fogbugz.com/f/cases/12343'. self loadTogether: self script278 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UIManager class methodsFor: 'initialization' stamp: 'GabrielOmarCotelli 12/4/2013 09:59' prior: 53916345! default ^ Default ifNil: [ "Note: The way the following is phrased ensures that you can always make 'more specific' managers merely by subclassing a tool builder and implementing a more specific way of reacting to #isActiveManager. For example, a BobsUIManager can subclass MorphicUIManager and will be considered before the parent (generic MorphicUIManager)." self allSubclasses detect: [ :any | any isActiveManager and: [ any subclasses noneSatisfy: [ :sub | sub isActiveManager ] ] ] ifFound: [ :mgrClass | Default := mgrClass new ] ]! ! !SystemWindow methodsFor: 'panes' stamp: 'GabrielOmarCotelli 12/3/2013 17:56' prior: 51763616! paneMorphSatisfying: aBlock ^ paneMorphs detect: aBlock ifNone: [ nil ]! ! !ChangesBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/5/2013 12:48' prior: 78242493! initializePresenter changesTree whenHighlightedItemChanged: [ :item | item ifNotNil: [ textArea text: (self buildDiffFor: item content) ] ]! ! !TextConverter class methodsFor: 'instance creation' stamp: 'GabrielOmarCotelli 12/4/2013 09:57' prior: 46480746! newForEncoding: aString | encoding | aString ifNil: [ ^ Latin1TextConverter new ]. encoding := aString asLowercase. ^ self allSubclasses detect: [ :each | each encodingNames includes: encoding ] ifFound: [ :class | class new ] ifNone: [ nil ]! ! !Unicode class methodsFor: 'class initialization' stamp: 'GabrielOmarCotelli 12/4/2013 10:09' prior: 54499153! parseCaseMappingFrom: stream "Parse the Unicode casing mappings from the given stream. Handle only the simple mappings" ToCasefold := IdentityDictionary new: 2048. ToUpper := IdentityDictionary new: 2048. ToLower := IdentityDictionary new: 2048. [ stream atEnd ] whileFalse: [ | fields line srcCode dstCode | line := stream nextLine copyUpTo: $#. fields := line trimBoth findTokens: $;. (fields size > 2 and: [ #('C' 'S') includes: (fields at: 2) trimBoth ]) ifTrue: [ srcCode := Integer readFrom: (fields at: 1) trimBoth base: 16. dstCode := Integer readFrom: (fields at: 3) trimBoth base: 16. ToCasefold at: srcCode put: dstCode ] ]. ToCasefold keysAndValuesDo: [ :k :v | (self isUppercase: (self value: k)) ifTrue: [ "In most cases, uppercase letter are folded to lower case" ToUpper at: v ifAbsentPut: k. ToLower at: k ifAbsentPut: v ]. (self isLowercase: (self value: k)) ifTrue: [ "In a few cases, two lower case letters are folded to the same lower case. We must find an upper case letter folded to the same letter" ToCasefold keys detect: [ :e | (self isUppercase: (self value: e)) and: [ (ToCasefold at: e) = v ] ] ifFound: [ :up | ToUpper at: k ifAbsentPut: up ] ] ]! ! !GIFReadWriter class methodsFor: 'image reading/writing' stamp: 'GabrielOmarCotelli 12/3/2013 17:22' prior: 22837979! typicalFileExtensions "Answer a collection of file extensions (lowercase) which files that I can read might commonly have" ^ self allSubclasses detect: [ :cls | cls wantsToHandleGIFs ] ifFound: [ #() ] ifNone: [ "if none of my subclasses wants , then i''ll have to do" #('gif') ]! ! !NautilusMCBindings methodsFor: 'private' stamp: 'GabrielOmarCotelli 12/4/2013 08:31' prior: 28182081! retrieveMCPackageFor: aRPackage | name mcPackages | mcPackages := MCWorkingCopy allManagers. name := aRPackage name. [ name isEmpty ] whileFalse: [ mcPackages detect: [ :mc | mc package name = name ] ifFound: [ :mcPackage | ^ mcPackage package ] ifNone: [ name := (name subStrings: '-') allButLast joinUsing: '-' ] ]. ^ nil! ! !Color class methodsFor: 'instance creation' stamp: 'GabrielOmarCotelli 12/3/2013 17:03' prior: 75083505! fromString: aString "for HTML color spec: #FFCCAA or white/black" "NewColor fromString: '#FFCCAA'. NewColor fromString: 'orange'" | aColorHex | aString isEmptyOrNil ifTrue: [ ^ self white ]. aColorHex := aString first = $# ifTrue: [ aString allButFirst ] ifFalse: [ aString ]. "Try to match aColorHex with known named colors, case insensitive." ^ self registeredColorNames detect: [ :each | each sameAs: aColorHex ] ifFound: [ :namedColor | self named: namedColor ] ifNone: [ (aColorHex size = 6 and: [ aColorHex allSatisfy: [ :character | '0123456789ABCDEFabcdef' includes: character ] ]) ifTrue: [ self fromHexString: aColorHex ] ifFalse: [ self white ] ]! ! SystemWindow removeSelector: #areasRemainingToFill:! "Graphics-Files"! "Graphics-Primitives"! "Morphic-Base"! "Multilingual-Encodings"! "Multilingual-TextConversion"! "Nautilus"! "NautilusRefactoring"! "UIManager"! ----End fileIn----! ----QUIT----2013-12-05T14:27:04.410535+01:00 Pharo.image priorSource: 28153365! ----STARTUP----2013-12-05T14:32:48.897812+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-05T14:32:49.06781+01:00 Pharo-30623.image priorSource: 28169929! ----STARTUP----2013-12-06T08:33:53.064772+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/6/2013 08:30' prior: 78485311! commentForCurrentUpdate ^ '12252 Canceling Save As... triggers a MNU https://pharo.fogbugz.com/f/cases/12252 12353 MorphTreeMorph should allow to click on the checkbox https://pharo.fogbugz.com/f/cases/12353 7365 Either remove or run MCWorkingCopyBrowser>>checkForNewerVersions https://pharo.fogbugz.com/f/cases/7365 12339 Cleanup on some Font methods https://pharo.fogbugz.com/f/cases/12339'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/6/2013 08:30'! script279 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.179.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.269.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.218.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-StephaneDucasse.254.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-StephaneDucasse.91.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/6/2013 08:30'! update30624 "self new update30624" self withUpdateLog: '12252 Canceling Save As... triggers a MNU https://pharo.fogbugz.com/f/cases/12252 12353 MorphTreeMorph should allow to click on the checkbox https://pharo.fogbugz.com/f/cases/12353 7365 Either remove or run MCWorkingCopyBrowser>>checkForNewerVersions https://pharo.fogbugz.com/f/cases/7365 12339 Cleanup on some Font methods https://pharo.fogbugz.com/f/cases/12339'. self loadTogether: self script279 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LogicalFontManager methodsFor: 'font families' stamp: 'GabrielOmarCotelli 12/3/2013 17:24' prior: 24590557! allFamilies "answer an Array containing all the font families from the receiver's fontProviders, together with any TextStyle font families, sorted by family name" | answer textStyleFamilies | answer := Set new. fontProviders do: [ :each | answer addAll: each families ]. textStyleFamilies := TextStyle knownTextStylesWithoutDefault collect: [ :textStyleName | TextStyleAsFontFamily new textStyle: (TextStyle named: textStyleName); familyName: textStyleName; yourself ]. "reject any textStyles whose defaultFont also appears as a fontFamily" textStyleFamilies := textStyleFamilies reject: [ :textStyleFamily | | textStyleFamilyName | textStyleFamilyName := textStyleFamily textStyle defaultFont familyName. answer anySatisfy: [ :fontFamily | fontFamily familyName = textStyleFamilyName ] ]. answer addAll: textStyleFamilies. ^ (answer asSortedCollection: [ :a :b | a familyName <= b familyName ]) asArray! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33' prior: 78384692! checkedBoxIcon "Private - Generated method" ^ icons at: #checkedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self checkedBoxIconContents offset: 0@0 ]! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33'! checkedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655295 4293589503 4293589503 4293655039 4293589503 4293589503 4293655039 4289311430 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293786367 4293786111 4293786367 4293720831 4289311430 4283261051 4293720831 4287338155 4287338155 4292211711 4293851903 4293851903 4293917695 4293852159 4293917439 4289311430 4283261051 4289311430 4293852159 4287338155 4287338155 4292211711 4288061880 4294048767 4294049023 4294049023 4288061880 4282866552 4289311430 4294048767 4294048767 4287338155 4287338155 4288061880 4282144116 4286681256 4294180095 4286681256 4282209651 4289311430 4294245631 4294245631 4294180095 4287338155 4287338155 4292211711 4288061880 4281486958 4285300119 4281552495 4288061880 4294376703 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4286681256 4280895595 4286681256 4294573567 4294508031 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294704895 4294704895 4285300119 4294704895 4294704895 4294704895 4294639359 4294639359 4294639615 4287338155 4287338155 4292211711 4294836223 4294770431 4294770431 4294836223 4294835967 4294835967 4294770431 4294835967 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33' prior: 78384881! partialCheckedBoxIcon "Private - Generated method" ^ icons at: #partialCheckedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self partialCheckedBoxIconContents offset: 0@0 ]! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33'! partialCheckedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4287338155 4287338155 4292211711 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4287338155 4287338155 4292211711 4286945709 4284051852 4284051852 4284051852 4284051852 4284051852 4284051852 4286945709 4294048767 4287338155 4287338155 4292211711 4287011245 4284051852 4284051852 4284051852 4284051852 4284051852 4284051852 4287077037 4294180095 4287338155 4287338155 4292211711 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4287338155 4287338155 4292211711 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33' prior: 78385084! uncheckedBoxIcon "Private - Generated method" ^ icons at: #uncheckedBox ifAbsentPut: [ Form extent: 12@12 depth: 32 fromArray: self uncheckedBoxIconContents offset: 0@0 ]! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'BenjaminVanRyseghem 12/5/2013 12:33'! uncheckedBoxIconContents ^ #(4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4292211711 4287338155 4287338155 4292211711 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4293655039 4287338155 4287338155 4292211711 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4293720831 4287338155 4287338155 4292211711 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4293852159 4287338155 4287338155 4292211711 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4294048767 4287338155 4287338155 4292211711 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4294180095 4287338155 4287338155 4292211711 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4294376959 4287338155 4287338155 4292211711 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4294573567 4287338155 4287338155 4292211711 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4294639615 4287338155 4287338155 4292211711 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4294770687 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155 4287338155)! ! !StandardFonts class methodsFor: 'font accessing' stamp: 'GabrielOmarCotelli 12/4/2013 09:43' prior: 50834169! systemFontLabelOf: aSelector ^ self systemFontAspectsAndLabels detect: [ :assoc | assoc key = aSelector ] ifFound: [ :assoc | assoc value ] ifNone: [ '' ]! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 12/5/2013 13:21'! addToSelection: aMorph clickedTheCheckBox: checkBox aMorph selected ifTrue: [^false]. self searchedElement: nil. checkBox ifFalse: [ aMorph highlight ]. aMorph selected: true. ^ true! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 12/5/2013 14:03'! clicked: event inTheCheckboxOf: aTargetMorph | position | position := aTargetMorph point: event position from: client. ^ self isCheckList and: [ (aTargetMorph checkClickableZone translateBy: 2 @ 0) containsPoint: position ]! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 12/5/2013 14:05' prior: 77599099! mouseDown: event on: aTargetMorph "Changed to take keybaord focus." | clickedTheCheckbox | clickedTheCheckbox := self clicked: event inTheCheckboxOf: aTargetMorph. (self autoMultiSelection and: [ event shiftPressed not ]) ifTrue: [ firstClickedMorph := aTargetMorph. aTargetMorph selected ifTrue: [ self removeFromSelection: aTargetMorph. (clickedTheCheckbox not and: [ self selectOnlyLastHighlighted and: [ aTargetMorph hasContentToShow ] ]) ifTrue: [ aTargetMorph = self lastClickedMorph ifFalse: [ self addToSelection: aTargetMorph ] ] ] ifFalse: [ (clickedTheCheckbox not and: [ self selectOnlyLastHighlighted and: [ aTargetMorph hasContentToShow ] ]) ifTrue: [ aTargetMorph = self lastClickedMorph ifTrue: [ self addToSelection: aTargetMorph. clickedTheCheckbox ifFalse: [ self lastClickedMorph: aTargetMorph ] ] ] ifFalse: [ self addToSelection: aTargetMorph. clickedTheCheckbox ifFalse: [ self lastClickedMorph: aTargetMorph ] ] ] ]. (clickedTheCheckbox not and: [ event shiftPressed not or: [ firstClickedMorph isNil ] ]) ifTrue: [ firstClickedMorph := aTargetMorph ]. aTargetMorph mouseDown: event! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 12/5/2013 13:22' prior: 77397732! mouseUp: event on: aNodeMorph | path cmdOrCtrl clickedTheCheckbox | "No change if model is locked" clickedTheCheckbox := self clicked: event inTheCheckboxOf: aNodeMorph. self listModel okToChange ifFalse: [^self]. self listModel okToDiscardEdits ifFalse: [^ self]. cmdOrCtrl := self commandOrCrontrolKeyPressed: event. path := (event shiftPressed and: [self isMultiple]) ifTrue: [self shiftSelectMorph: aNodeMorph] ifFalse: [ self autoMultiSelection ifTrue: [self selectedMorphList ifEmpty: [] ifNotEmpty: [:l | l last path collect: [:p | p complexContents]]] ifFalse: [self selectMorph: aNodeMorph multiple: ((cmdOrCtrl and: [self isMultiple]) or: [self autoMultiSelection]) clickedTheCheckBox: clickedTheCheckbox ]]. self selectionUpdateFromViewWhile: [ | selHolder | selHolder := self newSelectionHolderWithNodePath: path. self listModel selection: selHolder]. clickedTheCheckbox ifFalse: [ self lastClickedMorph: aNodeMorph ]. self selectionChanged. ! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'BenjaminVanRyseghem 12/5/2013 13:21'! selectMorph: aNodeMorph multiple: withMultipleSelection clickedTheCheckBox: checkBox | path mult | checkBox ifFalse: [ self lastClickedMorph: aNodeMorph ]. aNodeMorph isNil ifTrue: [ self emptySelection. ^ nil]. aNodeMorph selected ifTrue: [ withMultipleSelection ifTrue: [self removeFromSelection: aNodeMorph] ifFalse: [ mult := self selectedMorphList size > 1. path := aNodeMorph path collect: [:m | m complexContents]. (self autoDeselection or: [mult]) ifTrue: [ self emptySelection. mult ifTrue: [self addToSelection: aNodeMorph] ifFalse: [path := nil]]]] ifFalse: [ withMultipleSelection ifFalse: [self emptySelection]. self addToSelection: aNodeMorph clickedTheCheckBox: checkBox. path := aNodeMorph path collect: [:m | m complexContents]]. self selectionChanged. ^ path! ! !SmalltalkImage methodsFor: 'saving' stamp: 'RobertoMinelli 11/27/2013 07:52' prior: 76470331! stripImageExtensionFrom: aString | answer imageExtension delimitedImageExtension | answer := aString. imageExtension := Path extensionDelimiter asString, self imageSuffix. delimitedImageExtension := imageExtension copyWith: Path extensionDelimiter. [answer isNil not and: [(answer endsWith: imageExtension) or: [answer endsWith: delimitedImageExtension]]] whileTrue: [answer := answer copyUpToLast: Path extensionDelimiter]. ^answer! ! !MorphTreeNodeMorph methodsFor: 'mouse events' stamp: 'BenjaminVanRyseghem 12/5/2013 13:50'! checkClickableZone | topLeft icon | topLeft := self computeCheckTopLeft. icon := self retrieveCheckIcon. ^ topLeft corner: icon extent + topLeft! ! !MorphTreeNodeMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/5/2013 12:44'! computeCheckTopLeft | center offset | center := self checkRectangle center. offset := (self checkWidth / 2.0) truncated. ^ (center x - offset) @ (center y - offset - 1)! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/5/2013 14:24'! drawCheckOn: aCanvas | topLeft icon | topLeft := self computeCheckTopLeft. icon := self retrieveCheckIcon. aCanvas drawImage: icon at: topLeft! ! !MorphTreeNodeMorph methodsFor: 'drawing' stamp: 'BenjaminVanRyseghem 12/5/2013 12:44' prior: 27039425! drawOn: aCanvas "Note that selection is rendered from the container transformMorph (see MorphTreeTransformMorph)" container withHLines ifTrue: [ aCanvas frameRectangle: self selectionFrame width: 1 colors: {Color veryLightGray. Color transparent} dashes: #(1 2)]. self hasToggle ifTrue: [self drawToggleOn: aCanvas in: self toggleRectangle]. container listManager isCheckList ifTrue: [self drawCheckOn: aCanvas ]. ! ! !MorphTreeNodeMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/5/2013 12:43'! retrieveCheckIcon ^ self selected ifTrue: [ Smalltalk ui icons checkedBoxIcon ] ifFalse: [ self isPartialMatch ifTrue: [ Smalltalk ui icons partialCheckedBoxIcon ] ifFalse: [ Smalltalk ui icons uncheckedBoxIcon ] ]! ! MorphTreeNodeMorph removeSelector: #drawUncheckedIconOn:at:! MorphTreeNodeMorph removeSelector: #drawPartialCheckedIconOn:rectangle:at:offset:! MorphTreeNodeMorph removeSelector: #drawCheckedIconOn:at:! MorphTreeNodeMorph removeSelector: #drawCheckOn:in:! EclipseUIThemeIcons removeSelector: #uncheckedBoxIconContents! EclipseUIThemeIcons removeSelector: #uncheckedBoxIcon! EclipseUIThemeIcons removeSelector: #partialCheckedBoxIconContents! EclipseUIThemeIcons removeSelector: #partialCheckedBoxIcon! EclipseUIThemeIcons removeSelector: #checkedBoxIconContents! EclipseUIThemeIcons removeSelector: #checkedBoxIcon! MCWorkingCopyBrowser removeSelector: #checkForNewerVersions! "FreeType"! "Graphics-Fonts"! "MonticelloGUI"! "Morphic-Base"! "Polymorph-Widgets"! "System-Support"! ----End fileIn----! ----QUIT----2013-12-06T08:34:07.144768+01:00 Pharo.image priorSource: 28170126! ----STARTUP----2013-12-06T08:39:52.07357+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-06T08:39:52.24757+01:00 Pharo-30624.image priorSource: 28196519! ----STARTUP----2013-12-06T12:41:51.042883+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/6/2013 12:38' prior: 78502071! commentForCurrentUpdate ^ '12355 Adapters should inherit form Model https://pharo.fogbugz.com/f/cases/12355 12344 Cleanup on some Keymapping methods https://pharo.fogbugz.com/f/cases/12344 11817 MorphTreeMorph draws wrongly when it is outside the screen https://pharo.fogbugz.com/f/cases/11817'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/6/2013 12:38'! script280 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-StephaneDucasse.66.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.269.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.219.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.293.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.123.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.256.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.164.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1363.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/6/2013 12:38'! update30625 "self new update30625" self withUpdateLog: '12355 Adapters should inherit form Model https://pharo.fogbugz.com/f/cases/12355 12344 Cleanup on some Keymapping methods https://pharo.fogbugz.com/f/cases/12344 11817 MorphTreeMorph draws wrongly when it is outside the screen https://pharo.fogbugz.com/f/cases/11817'. self loadTogether: self script280 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractAdapter commentStamp: '' prior: 69628900! I am an abstrat class. Iam the superclass of all the adapters used to link a Spec widget model to a framework specific widget (by example ButtonModel <-> PluggableButtonMorph)! !MorphTreeTransformMorph methodsFor: 'drawing' stamp: 'NicolaiHess 12/6/2013 01:09' prior: 74277139! drawRawColorOn: aCanvas forSubmorph: aSubMorph | c frame | frame := (aSubMorph fullBounds withWidth: owner scroller innerBounds width) translateBy:(owner scroller offset x)@0. aSubMorph = owner listManager searchedElement ifTrue: [ aCanvas fillRectangle: frame color: owner secondarySelectionColor. ^ self ]. owner listManager isCheckList ifTrue: [ aSubMorph = owner listManager lastClickedMorph ifTrue: [ aCanvas fillRectangle: frame color: owner selectionColorToUse. ^ self ] ] ifFalse: [ aSubMorph selected ifTrue: [ aCanvas fillRectangle: frame color: owner selectionColorToUse. ^ self ] ]. (c := aSubMorph color) notNil ifTrue: [ c isColor ifTrue: [ aCanvas frameAndFillRectangle: frame fillColor: c borderWidth: 0 borderColor: Color transparent ] ifFalse: [ c origin: aSubMorph bounds topLeft. c direction: aSubMorph bounds width @ 0. aCanvas fillRectangle: frame basicFillStyle: c ] ]! ! !KMDispatcher methodsFor: 'building' stamp: 'GabrielOmarCotelli 12/3/2013 17:23' prior: 24135529! detachKeymapCategory: aCategoryName targetting: anObject self targets detect: [ :tgt | tgt target = anObject and: [ tgt category name = aCategoryName ] ] ifFound: [ :categoryTarget | self targets remove: categoryTarget ] ifNone: [ self error: 'Category ' , aCategoryName , ' is not attached to ' , morph asString ]! ! !AbstractAdapter commentStamp: '' prior: 78540102! I am an abstrat class. Iam the superclass of all the adapters used to link a Spec widget model to a framework specific widget (by example ButtonModel <-> PluggableButtonMorph)! "Keymapping-Core"! "Morphic-Base"! "Spec-Core"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2013-12-06T12:42:02.036882+01:00 Pharo.image priorSource: 28196715! ----STARTUP----2013-12-06T12:47:39.826128+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-06T12:47:40.016123+01:00 Pharo-30625.image priorSource: 28210504! ----STARTUP----2013-12-06T14:22:48.185885+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/6/2013 14:19' prior: 78528660! commentForCurrentUpdate ^ '12342 Cleanup on some RPackage methods https://pharo.fogbugz.com/f/cases/12342 12347 Cleanup on some Spec methods https://pharo.fogbugz.com/f/cases/12347 11293 Get a red square of death when opening File Browser on Windows https://pharo.fogbugz.com/f/cases/11293 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/6/2013 14:19'! script281 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.269.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.219.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.256.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.166.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1364.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/6/2013 14:19'! update30626 "self new update30626" self withUpdateLog: '12342 Cleanup on some RPackage methods https://pharo.fogbugz.com/f/cases/12342 12347 Cleanup on some Spec methods https://pharo.fogbugz.com/f/cases/12347 11293 Get a red square of death when opening File Browser on Windows https://pharo.fogbugz.com/f/cases/11293 '. self loadTogether: self script281 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageImportFromPackageInfoTest methodsFor: 'setup' stamp: 'GabrielOmarCotelli 12/4/2013 09:39' prior: 31885928! cleanClassesPackagesAndCategories Smalltalk globals removeClassNamed: self classInXSubcategoryName. Smalltalk organization removeCategory: self XPackageName asString. Smalltalk organization removeCategory: self XSubcategoryName. PackageOrganizer default unregisterPackage: (PackageOrganizer default packagesDictionary at: self XPackageName). self allManagers detect: [ :each | each packageName = self XPackageName ] ifFound: [ :mCPackage | mCPackage unregister ]! ! !RPackageOrganizer methodsFor: 'package access from class' stamp: 'GabrielOmarCotelli 12/4/2013 09:40' prior: 32004708! globalPackageOf: aClass "this method should return the 'global' parent package of aClass, that means the package holding the (possible) subcategory in which aClass is concretely defined. For example, 'Object package' returns Kernel-Object, whereas 'PackageOrganizer packageOf: Object' returns Kernel. So I guess that all use of 'packageOf' should be replaced by this method " "RPackageOrganizer default globalPackageOf: Object" | classPackage | classPackage := self packageOf: aClass. ^ self packages detect: [ :aRPackage | aRPackage ~= classPackage and: [ aRPackage systemCategories includes: classPackage name ] ] ifNone: [ classPackage ]! ! !DiskStore methodsFor: 'private' stamp: 'NicolaiHess 12/1/2013 01:53' prior: 36837236! basicEntry: directoryEntry path: aPath nodesDo: aBlock | encodedPathString index entry pathString | index := 1. pathString := self stringFromPath: aPath. encodedPathString := Primitives encode: pathString. entry := Primitives lookupEntryIn: encodedPathString index: index. entry = #badDirectoryPath ifTrue: [ self signalDirectoryDoesNotExist: aPath ]. [ entry isNil ] whileFalse: [ entry at: 1 put: (Primitives decode: entry first). aBlock value: entry. index := index + 1. entry := Primitives lookupEntryIn: encodedPathString index: index ].! ! !FileList methodsFor: 'private' stamp: 'NicolaiHess 12/1/2013 01:54' prior: 21884562! filesMatching: aRegex "Answer a list of directory entries which match the patternString. The patternString may consist of multiple patterns separated by ';'. Each pattern can include a '*' or '#' as wildcards - see String>>match:" | files | files := [self directory files] on:DirectoryDoesNotExist do:[#()]. pattern ifNil: [ ^ files ]. ^ files select: [:entry | (aRegex search: entry basename)]! ! !RPackage methodsFor: 'class tags' stamp: 'GabrielOmarCotelli 12/4/2013 09:38' prior: 74356999! classTagNamed: aSymbol ifPresent: aBlock ^ classTags detect: [ :each | each name = aSymbol ] ifFound: [ :tag | aBlock cull: tag ] ifNone: [ nil ]! ! !IntegerApiSetter methodsFor: 'private' stamp: 'GabrielOmarCotelli 12/3/2013 17:40' prior: 23808609! updateSliderWith: aMethod aMethod pragmas detect: [ :e | e keyword beginsWith: 'api:' ] ifFound: [ :apiPragma | | min max | min := apiPragma arguments second. max := apiPragma arguments third. max isInteger ifTrue: [ choice max: max ] ifFalse: [ choice max: (self model perform: max) ]. min isInteger ifTrue: [ choice min: min ] ifFalse: [ choice min: (self model perform: min) ] ]! ! !WidgetSetter methodsFor: 'private' stamp: 'GabrielOmarCotelli 12/3/2013 17:45' prior: 54895165! buildIntegerItemFor: anAPIMethod | arguments retrievingMethod item | anAPIMethod pragmas detect: [ :e | e keyword beginsWith: #api:min:max:getter: ] ifFound: [ :pragma | arguments := pragma arguments. retrievingMethod := arguments fourth ] ifNone: [ arguments := #(). retrievingMethod := nil ]. item := IntegerApiSetter new model: self model; method: anAPIMethod selector; retrievingMethod: retrievingMethod; yourself. arguments size > 5 ifTrue: [ self model perform: arguments fifth with: [ :newValue | item updateWith: newValue ] ]. ^ item! ! !WidgetSetter methodsFor: 'private' stamp: 'GabrielOmarCotelli 12/3/2013 17:47' prior: 54895889! buildItemFor: anAPIMethod kind: aClass | arguments retrievingMethod item | anAPIMethod pragmas detect: [ :e | e keyword beginsWith: #api:getter: ] ifFound: [ :pragma | arguments := pragma arguments. retrievingMethod := arguments second ] ifNone: [ arguments := #(). retrievingMethod := nil ]. item := aClass new model: self model; method: anAPIMethod selector; retrievingMethod: retrievingMethod; yourself. arguments size > 2 ifTrue: [ self model perform: arguments third with: [ :newValue | item updateWith: newValue ] ]. ^ item! ! "FileSystem-Disk"! "RPackage-Core"! "RPackage-Tests"! "Spec-Tools"! "Tools"! ----End fileIn----! ----QUIT----2013-12-06T14:22:56.287884+01:00 Pharo.image priorSource: 28210701! ----STARTUP----2013-12-06T14:28:37.237496+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-06T14:28:37.409493+01:00 Pharo-30626.image priorSource: 28227102! ----STARTUP----2013-12-06T15:37:50.266375+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/6/2013 15:34' prior: 78542647! commentForCurrentUpdate ^ '12304 MCWorkingCopyBrowser filter is slow https://pharo.fogbugz.com/f/cases/12304'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/6/2013 15:34'! script282 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.787.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.56.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.59.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.272.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.219.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.256.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.32.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.166.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1364.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/6/2013 15:34'! update30627 "self new update30627" self withUpdateLog: '12304 MCWorkingCopyBrowser filter is slow https://pharo.fogbugz.com/f/cases/12304'. self loadTogether: self script282 merge: false. Komitter initialize. self flushCaches. ! ! ScriptLoader removeSelector: #update30625! ScriptLoader removeSelector: #update30624! ScriptLoader removeSelector: #update30623! ScriptLoader removeSelector: #update30622! ScriptLoader removeSelector: #update30621! ScriptLoader removeSelector: #update30620! ScriptLoader removeSelector: #update30619! ScriptLoader removeSelector: #update30618! ScriptLoader removeSelector: #update30617! ScriptLoader removeSelector: #update30616! ScriptLoader removeSelector: #update30615! ScriptLoader removeSelector: #update30614! ScriptLoader removeSelector: #update30613! ScriptLoader removeSelector: #update30612! ScriptLoader removeSelector: #update30611! ScriptLoader removeSelector: #update30610! ScriptLoader removeSelector: #update30609! ScriptLoader removeSelector: #update30608! ScriptLoader removeSelector: #update30607! ScriptLoader removeSelector: #update30606! ScriptLoader removeSelector: #update30605! ScriptLoader removeSelector: #update30604! ScriptLoader removeSelector: #update30603! ScriptLoader removeSelector: #update30602! ScriptLoader removeSelector: #update30601! ScriptLoader removeSelector: #update30600! ScriptLoader removeSelector: #update30599! ScriptLoader removeSelector: #update30598! ScriptLoader removeSelector: #update30597! ScriptLoader removeSelector: #update30596! ScriptLoader removeSelector: #update30595! ScriptLoader removeSelector: #update30594! ScriptLoader removeSelector: #update30593! ScriptLoader removeSelector: #update30592! ScriptLoader removeSelector: #update30591! ScriptLoader removeSelector: #update30590! ScriptLoader removeSelector: #update30589! ScriptLoader removeSelector: #update30588! ScriptLoader removeSelector: #update30587! ScriptLoader removeSelector: #update30586! ScriptLoader removeSelector: #update30585! ScriptLoader removeSelector: #update30584! ScriptLoader removeSelector: #update30583! ScriptLoader removeSelector: #update30582! ScriptLoader removeSelector: #update30581! ScriptLoader removeSelector: #update30580! ScriptLoader removeSelector: #update30579! ScriptLoader removeSelector: #update30578! ScriptLoader removeSelector: #update30577! ScriptLoader removeSelector: #update30576! ScriptLoader removeSelector: #update30575! ScriptLoader removeSelector: #update30574! ScriptLoader removeSelector: #update30573! ScriptLoader removeSelector: #update30572! ScriptLoader removeSelector: #update30571! ScriptLoader removeSelector: #update30570! ScriptLoader removeSelector: #update30569! ScriptLoader removeSelector: #update30568! ScriptLoader removeSelector: #update30567! ScriptLoader removeSelector: #update30566! ScriptLoader removeSelector: #update30565! ScriptLoader removeSelector: #update30564! ScriptLoader removeSelector: #update30563! ScriptLoader removeSelector: #update30562! ScriptLoader removeSelector: #update30561! ScriptLoader removeSelector: #update30560! ScriptLoader removeSelector: #update30559! ScriptLoader removeSelector: #update30558! ScriptLoader removeSelector: #update30557! ScriptLoader removeSelector: #update30556! ScriptLoader removeSelector: #update30555! ScriptLoader removeSelector: #update30554! ScriptLoader removeSelector: #update30553! ScriptLoader removeSelector: #update30552! ScriptLoader removeSelector: #update30551! ScriptLoader removeSelector: #update30550! ScriptLoader removeSelector: #update30549! ScriptLoader removeSelector: #update30548! ScriptLoader removeSelector: #update30547! ScriptLoader removeSelector: #update30546! ScriptLoader removeSelector: #update30545! ScriptLoader removeSelector: #update30544! ScriptLoader removeSelector: #update30543! ScriptLoader removeSelector: #update30542! ScriptLoader removeSelector: #script281! ScriptLoader removeSelector: #script280! ScriptLoader removeSelector: #script279! ScriptLoader removeSelector: #script278! ScriptLoader removeSelector: #script277! ScriptLoader removeSelector: #script276! ScriptLoader removeSelector: #script275! ScriptLoader removeSelector: #script274! ScriptLoader removeSelector: #script273! ScriptLoader removeSelector: #script272! ScriptLoader removeSelector: #script271! ScriptLoader removeSelector: #script270! ScriptLoader removeSelector: #script269! ScriptLoader removeSelector: #script268! ScriptLoader removeSelector: #script267! ScriptLoader removeSelector: #script266! ScriptLoader removeSelector: #script265! ScriptLoader removeSelector: #script264! ScriptLoader removeSelector: #script263! ScriptLoader removeSelector: #script262! ScriptLoader removeSelector: #script261! ScriptLoader removeSelector: #script260! ScriptLoader removeSelector: #script259! ScriptLoader removeSelector: #script258! ScriptLoader removeSelector: #script257! ScriptLoader removeSelector: #script256! ScriptLoader removeSelector: #script255! ScriptLoader removeSelector: #script254! ScriptLoader removeSelector: #script253! ScriptLoader removeSelector: #script252! ScriptLoader removeSelector: #script251! ScriptLoader removeSelector: #script250! ScriptLoader removeSelector: #script249! ScriptLoader removeSelector: #script248! ScriptLoader removeSelector: #script247! ScriptLoader removeSelector: #script246! ScriptLoader removeSelector: #script245! ScriptLoader removeSelector: #script244! ScriptLoader removeSelector: #script243! ScriptLoader removeSelector: #script242! ScriptLoader removeSelector: #script241! ScriptLoader removeSelector: #script240! ScriptLoader removeSelector: #script239! ScriptLoader removeSelector: #script238! ScriptLoader removeSelector: #script237! ScriptLoader removeSelector: #script236! ScriptLoader removeSelector: #script235! ScriptLoader removeSelector: #script234! ScriptLoader removeSelector: #script233! ScriptLoader removeSelector: #script232! ScriptLoader removeSelector: #script231! ScriptLoader removeSelector: #script230! ScriptLoader removeSelector: #script229! ScriptLoader removeSelector: #script228! ScriptLoader removeSelector: #script227! ScriptLoader removeSelector: #script226! ScriptLoader removeSelector: #script225! ScriptLoader removeSelector: #script224! ScriptLoader removeSelector: #script223! ScriptLoader removeSelector: #script222! ScriptLoader removeSelector: #script221! ScriptLoader removeSelector: #script220! ScriptLoader removeSelector: #script219! ScriptLoader removeSelector: #script218! ScriptLoader removeSelector: #script217! ScriptLoader removeSelector: #script216! ScriptLoader removeSelector: #script215! ScriptLoader removeSelector: #script214! ScriptLoader removeSelector: #script213! ScriptLoader removeSelector: #script212! ScriptLoader removeSelector: #script211! ScriptLoader removeSelector: #script210! ScriptLoader removeSelector: #script209! ScriptLoader removeSelector: #script208! ScriptLoader removeSelector: #script207! ScriptLoader removeSelector: #script206! ScriptLoader removeSelector: #script205! ScriptLoader removeSelector: #script204! ScriptLoader removeSelector: #script203! ScriptLoader removeSelector: #script202! ScriptLoader removeSelector: #script201! ScriptLoader removeSelector: #script200! ScriptLoader removeSelector: #script199! ScriptLoader removeSelector: #script198! "ScriptLoader30"! !MCFileRepositoryInspector commentStamp: 'LaurentLaffont 2/5/2011 17:35' prior: 42389478! I'm a monticello tool composed of three panes to browse repositories and the packages they contain. You get an instance of me when you click on a repository in Monticello browser and press open. My left pane presents the packages, my right one their versions and the bottom one the commit log of the selected package versions. I underline the packages you already loaded, and highlight the ones you don't have updated to the last version. I also highlight the versions you did not load yet. Example: I can browse packages of PharoInbox with: (MCFileRepositoryInspector repository: (MCHttpRepository location: 'http://www.squeaksource.com/PharoInbox' user: '' password: '') workingCopy: nil) show. COTDC - S.Ducasse, G.Polito, L.Laffont! !MCFileRepositoryInspector commentStamp: 'LaurentLaffont 2/5/2011 17:35' prior: 78577575! I'm a monticello tool composed of three panes to browse repositories and the packages they contain. You get an instance of me when you click on a repository in Monticello browser and press open. My left pane presents the packages, my right one their versions and the bottom one the commit log of the selected package versions. I underline the packages you already loaded, and highlight the ones you don't have updated to the last version. I also highlight the versions you did not load yet. Example: I can browse packages of PharoInbox with: (MCFileRepositoryInspector repository: (MCHttpRepository location: 'http://www.squeaksource.com/PharoInbox' user: '' password: '') workingCopy: nil) show. COTDC - S.Ducasse, G.Polito, L.Laffont! !MCFileRepositoryInspector methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/5/2013 16:25' prior: 48866152! initialize super initialize. loaded := Set new. versionPattern := ''. packagePattern := ''! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/5/2013 16:23' prior: 24781418! packageList | result loadedPackages | versions ifNil: [ ^ #() ]. result := Set new: versions size. versions do: [ :each | result add: each first ]. "sort loaded packages first, then alphabetically" loadedPackages := Set new: loaded size. loaded do: [ :each | loadedPackages add: (each copyUpToLast: $-). ]. result := result asArray sort: [ :a :b | | loadedA loadedB | loadedA := loadedPackages includes: a. loadedB := loadedPackages includes: b. loadedA = loadedB ifTrue: [ a < b ] ifFalse: [ loadedA ] ]. packagePattern ifNotEmpty: [ result := result select: [ :package| package name includesSubstring: packagePattern ]]. ^packageList := result collect: [ :each | self packageHighlight: each ]! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/6/2013 13:16' prior: 24782346! packageSearchAccept: string | aString | aString := string ifNil: [ '' ]. packagePattern = aString asLowercase ifTrue: [ ^ self ]. packagePattern := aString asLowercase. packageProcess ifNotNil: [ packageProcess terminate ]. packageProcess := [ self changed: #packageList ] fork.! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/5/2013 16:24' prior: 46581489! versionList | result sortBlock | result := selectedPackage ifNil: [ versions ifNil: [ ^ #() ]] ifNotNil: [ (versions ifNil: [ ^ #() ]) select: [ :each | selectedPackage = each first ] ]. sortBlock := (self orderSpecs at: order) value. sortBlock ifNotNil: [ result := result asSortedCollection: [:a :b | [sortBlock value: a value: b] on: Error do: [true]]]. versionPattern ifNotEmpty: [ result := result select: [ :package| package fourth asLowercase includesSubstring: versionPattern ]]. ^ result collect: [ :each | self versionHighlight: each fourth ]! ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/6/2013 13:17' prior: 24785749! versionSearchAccept: string | aString | aString := string ifNil: [ '' ]. versionPattern = aString asLowercase ifTrue: [ ^ self ]. versionPattern := aString asLowercase. versionProcess ifNotNil: [ versionProcess terminate ]. versionProcess := [ self changed: #versionList ] fork.! ! !MCWorkingCopyBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/5/2013 16:27' prior: 48968182! initialize super initialize. order := self class order. self registerToAnnouncer. workingCopyPattern := ''. repositoryPattern := ''. ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/5/2013 16:22' prior: 25187220! repositories | repositories | repositories := self repositoryGroup repositories. "filter the repository list if there is a search string" repositoryPattern ifNotEmpty: [ repositories := repositories select: [ :each| each description asLowercase includesSubstring: repositoryPattern ]]. ^ repositories! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/6/2013 13:17' prior: 25188658! repositorySearchAccept: string | aString | aString := string ifNil: [ '' ]. repositoryPattern = aString asLowercase ifTrue: [ ^ self ]. repositoryPattern := aString asLowercase. repositoryProcess ifNotNil: [ repositoryProcess terminate ]. repositoryProcess := [ self repositoryListChanged ] fork.! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/6/2013 13:17' prior: 25192316! workingCopySearchAccept: string | aString | aString := string ifNil: [ '' ]. workingCopyPattern = aString asLowercase ifTrue: [ ^ self ]. workingCopyPattern := aString asLowercase. packageProcess ifNotNil: [ packageProcess terminate ]. packageProcess := [ self workingCopyListChanged ] fork.! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'BenjaminVanRyseghem 12/5/2013 16:21' prior: 25194233! workingCopyTree | workingCopies | workingCopies := self workingCopies. "filter the working copy list if there is a serach string" workingCopyPattern ifNotEmpty: [ workingCopies := workingCopies select: [ :each| each package name asLowercase includesSubstring: workingCopyPattern ]]. ^ workingCopies collect: [:each| MCDependentsWrapper with: each model: self].! ! "MonticelloGUI"! ----End fileIn----! ----QUIT----2013-12-06T15:37:56.82038+01:00 Pharo.image priorSource: 28227299! ----STARTUP----2013-12-06T15:43:30.319292+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-06T15:43:30.509293+01:00 Pharo-30627.image priorSource: 28252147! ----STARTUP----2013-12-07T08:26:54.264013+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/7/2013 08:23' prior: 78559245! commentForCurrentUpdate ^ '12308 GroupManager looks useless https://pharo.fogbugz.com/f/cases/12308 12348 Cleanup on some Fuel methods https://pharo.fogbugz.com/f/cases/12348 12362 Restrict the RemotesManager to the dirty packages https://pharo.fogbugz.com/f/cases/12362 12360 Add missing protocol to SearchableTree https://pharo.fogbugz.com/f/cases/12360 12359 Add missing protocol to OkToolbar https://pharo.fogbugz.com/f/cases/12359'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/7/2013 08:24'! script283 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.64.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.62.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.272.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.219.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.449.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.166.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1364.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/7/2013 08:24'! update30628 "self new update30628" self withUpdateLog: '12308 GroupManager looks useless https://pharo.fogbugz.com/f/cases/12308 12348 Cleanup on some Fuel methods https://pharo.fogbugz.com/f/cases/12348 12362 Restrict the RemotesManager to the dirty packages https://pharo.fogbugz.com/f/cases/12362 12360 Add missing protocol to SearchableTree https://pharo.fogbugz.com/f/cases/12360 12359 Add missing protocol to OkToolbar https://pharo.fogbugz.com/f/cases/12359'. self loadTogether: self script283 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDialogWindow methodsFor: 'actions' stamp: 'BenjaminVanRyseghem 12/6/2013 18:35' prior: 69408449! close super close. self toolbar cancel! ! !OkCancelToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 18:35'! cancel self cancelled: true! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 18:48'! cancel owner ifNil: [ self delete ] ifNotNil: [ owner delete ]! ! !OkToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 18:48'! triggerCancelAction self cancel! ! !FLDecoder methodsFor: 'accessing' stamp: 'GabrielOmarCotelli 12/3/2013 17:16' prior: 21482900! classNamed: className ^ migrations detect: [ :m | m sourceClassName = className ] ifFound: [ :migration | migration targetClass ] ifNone: [ self globalClassNamed: className ]! ! !SearchableTree methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 12/6/2013 18:42'! highlightedItem: aTreeNodeModel tree highlightedItem: aTreeNodeModel! ! !RemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/6/2013 19:00' prior: 78482196! initializePresenter packages whenSelectedItemChanged: [ :item | self updateRemoteSelectionFrom: item ]. remotes whenHighlightedItemChanged: [ :item | editRemote enabled: item notNil. removeRemote enabled: item notNil ]. packages whenRootsChanged: [ :nodes | nodes ifNotEmpty: [ nodes first takeHighlight ] ]. self whenBuiltDo: [ | nodes | nodes := packages roots. nodes ifNotEmpty: [ packages selectedItem: ( nodes first selected: true; takeHighlight; yourself ) ] ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/6/2013 20:38' prior: 78358353! initializeWidgets tree := self instantiate: TreeWithLoading. diff := self instantiate: DiffModel. message := self newText. author := self newTextInput. authorName := self newLabel. commitMessage := self newLabel. remotes := self newDropList. remoteLabel := self newLabel. checkCommit := self newCheckBox. previousMessages := self newButton. manageRemotes := self newButton. tree removeOnlyLastSelected: true; autoMultiSelection: true; columns: { TreeColumnModel new displayBlock: [:node | node label ] }. diff showOptions: false; leftText: 'No selection for diff'. authorName label: 'Author:'. commitMessage label: 'Commit message:'. remoteLabel label: 'Remote:'. checkCommit label: 'Check Lint rules (NOT YET WORKING)'; labelClickable: true; state: false; enabled: false. author text: Author fullNamePerSe; autoAccept: true. previousMessages icon: self historyIcon; action: [ self chooseFromPreviousMessages ]; bindKeyCombination: Character space asKeyCombination toAction: [ previousMessages action value ]; help: 'Previous messages'. message bindKeyCombination: Character tab asKeyCombination toAction: [ self giveFocusToNextFrom: message ]; bindKeyCombination: Character tab shift toAction: [ self giveFocusToPreviousFrom: message ]; wantsVisualFeedback: false. manageRemotes icon: self manageRemotesIcon; action: [ self openRemoteManager ]; help: 'Open the remotes manager'. self whenBuiltDo: [ checkCommit labelOnLeft. diff showOnlySource: true. message selectAll. self updateRemotes ].! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/6/2013 18:41' prior: 78474352! openRemoteManager | view | view := RemotesManager new packages: (tree roots collect: [ :e | self remoteNodeFor: e ]). view openDialogWithSpec centered; modalRelativeTo: self window! ! !KomitterUI methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/6/2013 18:40'! remoteNodeFor: e ^ TreeNodeModel new content: e content package workingCopy! ! GroupManager removeSelector: #unregister:! GroupManager removeSelector: #register:! GroupManager removeSelector: #initialize! GroupManager class removeSelector: #unregister:! GroupManager class removeSelector: #setCurrentManager:! GroupManager class removeSelector: #register:! GroupManager class removeSelector: #current! Smalltalk globals removeClassNamed: #GroupManager! AbstractGroup removeSelector: #unregister! "Fuel"! "GroupManager"! "Komitter"! "Spec-Core"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----2013-12-07T08:27:01.25201+01:00 Pharo.image priorSource: 28252343! ----STARTUP----2013-12-07T08:33:21.709084+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-07T08:33:21.879075+01:00 Pharo-30628.image priorSource: 28268605! ----STARTUP----2013-12-07T09:20:47.016781+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/7/2013 09:17' prior: 78584289! commentForCurrentUpdate ^ '12315 Menu World/System/Switch User raises Error and MNU https://pharo.fogbugz.com/f/cases/12315 12361 Bug in MorphTreeMorph if click is made on no item https://pharo.fogbugz.com/f/cases/12361 12345 Cleanup on more Opal methods https://pharo.fogbugz.com/f/cases/12345'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/7/2013 09:17'! script284 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.159.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.62.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.135.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.896.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.272.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.221.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.166.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1364.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/7/2013 09:18'! update30629 "self new update30629" self withUpdateLog: '12315 Menu World/System/Switch User raises Error and MNU https://pharo.fogbugz.com/f/cases/12315 12361 Bug in MorphTreeMorph if click is made on no item https://pharo.fogbugz.com/f/cases/12361 12345 Cleanup on more Opal methods https://pharo.fogbugz.com/f/cases/12345'. self loadTogether: self script284 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UserEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/6/2013 14:22' prior: 54581858! avatar ^ container asSpecAdapter! ! !MorphTreeListManager methodsFor: 'mouse managing' stamp: 'BenjaminVanRyseghem 12/6/2013 19:01' prior: 78521440! clicked: event inTheCheckboxOf: aTargetMorph | position | aTargetMorph ifNil: [ ^ false ]. position := aTargetMorph point: event position from: client. ^ self isCheckList and: [ (aTargetMorph checkClickableZone translateBy: 2 @ 0) containsPoint: position ]! ! !SwitchUsers methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/6/2013 14:26' prior: 76511648! addUser | user editor w userName newPassword | userName := self askName. (self isValidUsername: userName) ifFalse: [ UIManager default inform: 'Username invalid.'. ^self ]. user := PharoUser username: userName. user unlock ifFalse: [ ^ self ]. w := PasswordInitializationDialogWindow new. self window openModal: w. newPassword := w enteredValue. newPassword ifNil: [ ^ self ]. user setPassword: newPassword. editor := UserEditor new user: user ; openDialogWithSpec; yourself. self window openModal: editor window window. usersManager value addUser: user. self userManager: usersManager value. users setSelectedItem: user username.! ! !SwitchUsers methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/6/2013 14:19' prior: 51343972! avatar ^ container asSpecAdapter! ! !SwitchUsers methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/6/2013 14:25' prior: 51345706! initializeWidgets self instantiateModels: #( add ButtonModel edit ButtonModel remove ButtonModel users DropListModel ). self initializeButtons. users displayBlock: [ :e | e label ]. self initializeContainer. self focusOrder add: users; add: add; add: edit; add: remove! ! !RBMethodNode methodsFor: '*OpalCompiler-Core' stamp: 'GabrielOmarCotelli 12/4/2013 09:27' prior: 68941670! primitiveFromPragma pragmas ifNil: [ ^ IRPrimitive null ]. ^ pragmas detect: [ :each | each isPrimitive ] ifFound: [ :aPragmaPrimitive | aPragmaPrimitive asPrimitive ] ifNone: [ IRPrimitive null ]! ! "KeyChain"! "Morphic-Base"! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----2013-12-07T09:20:55.560774+01:00 Pharo.image priorSource: 28268801! ----STARTUP----2013-12-07T09:26:49.650879+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-07T09:26:49.820877+01:00 Pharo-30629.image priorSource: 28282708! ----STARTUP----2013-12-07T14:28:51.206645+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/7/2013 14:25' prior: 78600747! commentForCurrentUpdate ^ '12364 Cherry pick does not work for slices https://pharo.fogbugz.com/f/cases/12364 12365 Critics browser menu not working https://pharo.fogbugz.com/f/cases/12365 12338 Cleanup on some Monticello related methods https://pharo.fogbugz.com/f/cases/12338'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/7/2013 14:25'! script285 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.339.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.51.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.64.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.221.mcz Morphic-Core-MarcusDenker.24.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.181.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.166.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.990.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.660.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1364.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/7/2013 14:25'! update30630 "self new update30630" self withUpdateLog: '12364 Cherry pick does not work for slices https://pharo.fogbugz.com/f/cases/12364 12365 Critics browser menu not working https://pharo.fogbugz.com/f/cases/12365 12338 Cleanup on some Monticello related methods https://pharo.fogbugz.com/f/cases/12338'. self loadTogether: self script285 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KomitSliceUI commentStamp: '' prior: 78136473! I am a UI used to retrieve a Slice title using its issue number! !KomitterUI commentStamp: '' prior: 78352724! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !KomitterManager commentStamp: '' prior: 0! I am used to temporarily store a version for a package while a cherry-picked slice is committed! !KomitObject methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 12/7/2013 10:56'! isKomitClass ^ false! ! !KomitSliceUI commentStamp: '' prior: 78626255! I am a UI used to retrieve a Slice title using its issue number! !KomitterUI commentStamp: '' prior: 78626378! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !KomitterUI class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/7/2013 10:52' prior: 78352925! defaultSpec ^ SpecLayout composed newRow: [ :row | row newColumn: [ :c1 | c1 add: #tree; newRow: [ :r | r newColumn: [ :c | c newRow: [ :row1 | row1 add: #commitMessage; add: #previousMessages width: self buttonHeight ] height: self buttonHeight; add: #message ]; newColumn: [ :c | c newRow: [:r1 | ] height: self buttonHeight; newRow: [ :r1 | r1 add: #authorName width: 50; add: #author ] height: self inputTextHeight +4 ; add: #checkCommit height: self buttonHeight; newRow: [ :r1 | r1 add: #remoteLabel width: 50; add: #remotes; add: #manageRemotes width: self buttonHeight ] height: self buttonHeight ] width: 250 ] height: (4*self buttonHeight + 12) ] ] bottom: 0.4; addHSplitter; newRow: [ :row | row add: #diff ] top: 0.6; yourself! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/7/2013 10:56' prior: 78473703! initializeLatelyPresenter tree whenHighlightedItemChanged: [ :node || item | item := node ifNil: [ nil ] ifNotNil: [ node content ]. diff leftText: (self leftTextFor: item); rightText: (self rightTextFor: item). (item isNil or: [ item added ]) ifTrue: [ diff showOnlyDestination: true ] ifFalse: [ ( item removed or: [ item isPackage or: [ (item isKomitClass and: [ item isDirty not ]) ] ] ) ifTrue: [ diff showOnlySource: true ] ifFalse: [ diff showBoth ] ] ]. tree whenSelectedItemsChanged: [ self updateRemotes ]! ! !MCPackage methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 12/6/2013 21:37'! version ^ KomitterManager current versionFor: self! ! !MCSnapshotBrowser methodsFor: 'text' stamp: 'GabrielOmarCotelli 12/3/2013 17:51' prior: 25011039! classCommentString ^ items detect: [ :ea | ea isClassDefinition and: [ ea className = classSelection ] ] ifFound: [ :classDefinition | classDefinition comment ] ifNone: [ '' ]! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 12/6/2013 21:38'! collectSliceDependenciesWithMessage: messageString in: aRepository ^ self requiredPackages collect: [:aPackage | MCVersionDependency package: aPackage info: aPackage version info ] ! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 12/6/2013 21:25'! silentUniqueVersionNameIn: aRepository |versionName| counter := nil. [ versionName := self nextVersionName. aRepository includesVersionNamed: versionName ] whileTrue. ^ versionName! ! !MCWorkingCopy methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 12/6/2013 21:26'! silentlyNewSliceVersionWithName: nameString message: messageString in: aRepository | info deps | info := ancestry infoWithName: nameString message: messageString. ancestry := MCWorkingAncestry new addAncestor: info. self modified: true; modified: false. deps := self collectSliceDependenciesWithMessage: messageString in: aRepository. (self repositoryGroup includes: aRepository) ifFalse: [ self repositoryGroup addRepository: aRepository ]. ^ MCVersion silentlyPackage: package info: info snapshot: package snapshot dependencies: deps! ! !KomitNode methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 11/25/2013 16:49' prior: 78133683! = anotherNode ^ self species = anotherNode species and: [ self content = anotherNode content ]! ! !KomitNode methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 12/7/2013 10:51'! hash ^ self content hash! ! !KomitPackage methodsFor: 'comparing' stamp: 'BenjaminVanRyseghem 12/7/2013 10:51'! hash ^ self package hash! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 21:36' prior: 78422723! commitSlice: aSlice | versions slice view workingCopy version packages name | slice := MCSliceInfo new. view := KomitSliceUI new. view openDialogWithSpec centered; modalRelativeTo: World. view cancelled ifTrue: [ ^ self ]. slice issueNumber: view issueNumberText. slice issueSummary: view titleText. versions := self createVersionFor: aSlice. KomitterManager current reset. packages := versions collect: [ :each | KomitterManager current storeVersion: each for: each package. each package ]. slice includedPackages: packages. workingCopy := slice makeKomitSlice. name := workingCopy silentUniqueVersionNameIn: aSlice remote remote. version := workingCopy silentlyNewSliceVersionWithName: name message: aSlice message in: aSlice remote remote. Cursor wait showWhile: [ [ self storeVersion: version for: aSlice; storeDependencies: version for: aSlice ] ensure: [ (MCVersionInspector new version: version) show ] ]! ! !MCKomitSubmitter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 21:26' prior: 78126561! createVersionFor: aKomitableObject | versions currentAuthor | currentAuthor := Author fullNamePerSe. Author fullName: aKomitableObject author. [ versions := aKomitableObject entities keys collect: [ :each | | workingCopy name version patcher | workingCopy := each package workingCopy. name := workingCopy silentUniqueVersionNameIn: aKomitableObject repository. version := workingCopy silentlyNewVersionWithName: name message: aKomitableObject message in: aKomitableObject repository. workingCopy modified: each isFullyCommited not. patcher := MCPatcher snapshot: each patch base. (aKomitableObject entities at: each) do: [ :e | e operation applyTo: patcher ]. version := MCVersion package: version package info: version info snapshot: patcher patchedSnapshot dependencies: version dependencies. KomitPackage removePackage: each. version ] ] ensure: [ Author fullName: currentAuthor ]. ^ versions! ! !MCDictionaryRepository methodsFor: 'accessing' stamp: 'GabrielOmarCotelli 12/3/2013 17:30' prior: 41434823! closestAncestorVersionFor: anAncestry ifNone: errorBlock ^ anAncestry breadthFirstAncestors detect: [ :ea | self includesVersionWithInfo: ea ] ifFound: [ :info | self versionWithInfo: info ] ifNone: errorBlock! ! !KomitClass methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 12/7/2013 10:56'! isKomitClass ^ true! ! !GoferOperationTest methodsFor: 'utilities' stamp: 'GabrielOmarCotelli 12/3/2013 17:20' prior: 22930284! hasPackage: aString ^ self allManagers anySatisfy: [ :package | package packageName = aString ]! ! !GoferOperationTest methodsFor: 'utilities' stamp: 'GabrielOmarCotelli 12/3/2013 17:21' prior: 22930521! hasVersion: aString ^ self allManagers anySatisfy: [ :version | version ancestry ancestorString = aString ]! ! !MCPatch methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 12/7/2013 10:58' prior: 77739760! initializeWithTarget: targetSnapshot | target | operations := OrderedCollection new. target := MCDefinitionIndex definitions: targetSnapshot definitions. operations := (target definitions collect: [ :definition | MCAddition of: definition ] asOrderedCollection).! ! !KomitterManager commentStamp: '' prior: 78626534! I am used to temporarily store a version for a package while a cherry-picked slice is committed! !KomitterManager class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/6/2013 21:15'! current ^ instance ifNil: [ instance := super new ]! ! !KomitterManager class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 12/6/2013 21:15'! new ^ self shouldNotImplement! ! !KomitterManager methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/6/2013 21:17'! initialize super initialize. versions := Dictionary new.! ! !KomitterManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 21:18'! reset versions := Dictionary new! ! !KomitterManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 21:16'! storeVersion: aVersion for: aPackage versions at: aPackage put: aVersion! ! !KomitterManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/6/2013 21:16'! versionFor: aPackage ^ versions at: aPackage! ! !CriticBrowser methodsFor: 'menu' stamp: 'BenjaminVanRyseghem 12/7/2013 10:45' prior: 68464960! menu: aMenu shifted: aBoolean aMenu addGroup:[ :g | g addItem: [ :i | i name: 'Browse rule' translated; action: [ self browseRule ]]. g addItem: [ :i | i name: 'Reapply this rule' translated; action: [ self reapplyThisRule ] ] ]; addGroup:[ :g | g addItem: [ :i | i name: 'Ban from selected packages' translated; action: [ self addRuleToFalsePositive ]]. g addItem: [ :i | i name: 'Unban from selected packages' translated; action: [ self removeRuleToFalsePositive ] ] ]. ^ aMenu! ! !CriticBrowser methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/7/2013 10:45' prior: 46511039! reapplyThisRule | rule | rulesModel selectedItem ifNil: [ ^ self ]. rule := rulesModel selectedItem content. rule leaves do: [ :each | self reapplyRule: each ]. ! ! KomitObject removeSelector: #isClass! KomitTreeBuilder class removeSelector: #stagingArea! KomitTreeBuilder class removeSelector: #roots! KomitSliceUI removeSelector: #loading:! KomitSliceUI removeSelector: #loading! KomitLoadingNode removeSelector: #label! KomitLoadingNode removeSelector: #icon! Smalltalk globals removeClassNamed: #KomitLoadingNode! KomitClass removeSelector: #isClass! "Gofer-Tests"! "Komitter"! "Manifest-CriticBrowser"! "Monticello"! "MonticelloGUI"! ----End fileIn----! ----QUIT----2013-12-07T14:28:58.658609+01:00 Pharo.image priorSource: 28282905! ----STARTUP----2013-12-07T14:37:24.893774+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-07T14:37:25.063771+01:00 Pharo-30630.image priorSource: 28305148! ----STARTUP----2013-12-07T23:15:48.226897+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/7/2013 23:11' prior: 78614851! commentForCurrentUpdate ^ '11986 Replace all Beeper beep by self inform: a nice explanation https://pharo.fogbugz.com/f/cases/11986'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/7/2013 23:12'! script286 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-StephaneDucasse.42.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.599.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.64.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.8.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.140.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.183.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.219.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.992.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.21.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1366.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-SvenVanCaekenberghe.383.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/7/2013 23:12'! update30631 "self new update30631" self withUpdateLog: '11986 Replace all Beeper beep by self inform: a nice explanation https://pharo.fogbugz.com/f/cases/11986'. self loadTogether: self script286 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DualChangeSorterApplication methodsFor: 'menu - class' stamp: 'AlejandroInfante 11/11/2013 14:53' prior: 21014009! copyClassFrom: src to: dest "Place these changes in the other changeSet also" | otherChangeSet | self checkThatSidesDiffer: [ ^ self ]. self okToChange ifFalse: [ ^ self inform: 'Can''t discard edits.' ]. src selectedClass ifNil: [ ^ self inform: 'Selected class is nil.' ]. otherChangeSet := dest selectedChangeSet. self model copyClass: src selectedClass from: src selectedChangeSet to: otherChangeSet. dest setSelectedChangeSet: otherChangeSet.! ! !KonamiCodePlugin methodsFor: 'private' stamp: 'CamilleTeruel 12/6/2013 14:53' prior: 24241318! openKonamiCode [ 15 timesRepeat: [ self inform: 'Congratulations: you found the Konami code!!!!!!!!!!'. (Delay forMilliseconds: 50) wait. ]] fork. ! ! !ChangeList class methodsFor: '*Tools-FileList' stamp: 'onierstrasz 11/11/2013 12:20' prior: 18773682! browseChangesFile: fullName "Browse the selected file in fileIn format." fullName ifNotNil: [self browseStream: (FileStream readOnlyFileNamed: fullName)] ifNil: [self inform: 'Missing file name' ]! ! !ChangeList class methodsFor: 'System-FileRegistry' stamp: 'onierstrasz 11/11/2013 12:20' prior: 18775532! browseCompressedChangesFile: fullName "Browse the selected file in fileIn format." | unzipped stream | fullName ifNil: [^ self inform: 'Missing file name' ]. stream := FileStream readOnlyFileNamed: fullName. [ | zipped | stream converter: Latin1TextConverter new. zipped := GZipReadStream on: stream. unzipped := zipped contents asString] ensure: [stream close]. stream := (MultiByteBinaryOrTextStream with: unzipped) reset. self browseStream: stream! ! !ChangeList class methodsFor: 'public access' stamp: 'onierstrasz 11/11/2013 12:21' prior: 18787870! browseRecentLogOnPath: fullName "figure out where the last snapshot or quit was, then browse the recent entries." fullName ifNotNil: [self browseRecentLogOn: (FileStream readOnlyFileNamed: fullName)] ifNil: [self inform: 'Missing file name' ] ! ! !FileStream class methodsFor: 'file reader services' stamp: 'AlejandroInfante 11/11/2013 14:54' prior: 21998407! fileIn: fullName "File in the entire contents of the file specified by the name provided" | ff fn | fullName ifNil: [^ self inform: 'Filename is nil.']. fn := fullName asFileReference. fn := (Smalltalk hasClassNamed: #GZipReadStream) ifTrue: [(Smalltalk classNamed: #GZipReadStream) uncompressedFileName: fn fullName] ifFalse: [fn fullName]. ff := self readOnlyFileNamed: fn. ff fileIn. ! ! !FileList methodsFor: 'private' stamp: 'onierstrasz 11/11/2013 12:26' prior: 21886204! okHit ok := true. self directory ifNil: [self inform: 'Missing directory'] ifNotNil: [modalView delete]! ! !FileContentsBrowser class methodsFor: 'instance creation' stamp: 'onierstrasz 11/11/2013 12:25' prior: 21812157! browseFile: aFilename "Open a file contents browser on a file of the given name" aFilename ifNil: [^ self inform: 'File name to browse is nil']. self browseFiles: (Array with: aFilename)! ! !Morph methodsFor: 'events-processing' stamp: 'CamilleTeruel 12/6/2013 14:36' prior: 74736130! handleUnknownEvent: anEvent "An event of an unknown type was sent to the receiver. What shall we do?!!" self inform: 'Unknown event: ', anEvent printString. anEvent printString displayAt: 0@0. anEvent wasHandled: true.! ! !Morph methodsFor: 'menus' stamp: 'CamilleTeruel 12/6/2013 14:38' prior: 74823753! setArrowheads "Let the user edit the size of arrowheads for this object" | aParameter result | aParameter := self renderedMorph valueOfProperty: #arrowSpec ifAbsent: [PolygonMorph defaultArrowSpec]. result := Morph obtainArrowheadFor: 'Head size for arrowheads: ' translated defaultValue: aParameter asString. result ifNotNil: [self renderedMorph setProperty: #arrowSpec toValue: result] ifNil: [ self inform: 'Invalid input']! ! !Morph methodsFor: 'undo' stamp: 'CamilleTeruel 12/6/2013 14:38' prior: 77047682! undoMove: cmd redo: redo owner: formerOwner bounds: formerBounds predecessor: formerPredecessor "Handle undo and redo of move commands in morphic" self owner ifNil: [ ^ self inform: 'No owner' ]. formerOwner ifNotNil: [formerPredecessor ifNil: [formerOwner addMorphFront: self] ifNotNil: [formerOwner addMorph: self after: formerPredecessor]]. self bounds: formerBounds. (self isSystemWindow) ifTrue: [self activate]! ! !ClassQueryTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/6/2013 15:19' prior: 19322928! testAllCallsOn | calls | calls := ClassQueryTest allCallsOn. self assert: calls size equals: 1. self assert: calls first compiledMethod equals: ClassQueryTest>>#testAllCallsOn! ! !ClassQueryTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/6/2013 14:54' prior: 19323239! testAllCallsOnASymbol | set cm | set := Object allCallsOn: #shallowCopy. cm := (set detect: [ :rgMethod | rgMethod selector == #copy ]) compiledMethod. self assert: (cm methodClass == Object). self assert: (cm literals includes: #shallowCopy)! ! !GIFReadWriter class methodsFor: 'examples' stamp: 'AlejandroInfante 11/11/2013 15:06' prior: 22837506! grabScreenAndSaveOnDisk "GIFReadWriter grabScreenAndSaveOnDisk" | form fileName | form := Form fromUser. form bits size = 0 ifTrue: [ ^ self inform: 'Empty region selected.' ]. fileName := (FileSystem disk workingDirectory / 'Pharo', 'gif') fullName. UIManager default informUser: 'Writing ' translated, fileName during: [ GIFReadWriter putForm: form onFileNamed: fileName ]! ! !CodeHolder methodsFor: 'commands' stamp: 'onierstrasz 11/11/2013 12:23' prior: 19428437! removeClass "Remove the selected class from the system, at interactive user request. Make certain the user really wants to do this, since it is not reversible. Answer true if removal actually happened." | message className classToRemove result | self okToChange ifFalse: [^ false]. classToRemove := self selectedClassOrMetaClass ifNil: [self inform: 'Selected class or metaclass is nil'. ^ false]. classToRemove := classToRemove theNonMetaClass. className := classToRemove name. message := 'Are you certain that you want to REMOVE the class ', className, ' from the system?'. (result := self confirm: message) ifTrue: [classToRemove subclasses size > 0 ifTrue: [(self confirm: 'class has subclasses: ' , message) ifFalse: [^ false]]. classToRemove removeFromSystem. self changed: #classList. true]. ^ result! ! !PasteUpMorph methodsFor: 'Morphic-Base-Windows' stamp: 'CamilleTeruel 12/6/2013 14:44' prior: 74576011! findWindow: evt "Present a menu names of windows and naked morphs, and activate the one that gets chosen. Collapsed windows appear below line, expand if chosen; naked morphs appear below second line; if any of them has been given an explicit name, that is what's shown, else the class-name of the morph shows; if a naked morph is chosen, bring it to front and have it don a halo." | menu expanded collapsed nakedMorphs | menu := UIManager default newMenuIn: self for: self. expanded := self windowsSatisfying: [:w | w isCollapsed not]. collapsed := self windowsSatisfying: [:w | w isCollapsed]. nakedMorphs := self submorphsSatisfying:[:m | m isSystemWindow not]. (expanded isEmpty and: [collapsed isEmpty and: [nakedMorphs isEmpty]]) ifTrue: [^ self inform: 'No morph in world']. (expanded asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #activateAndForceLabelToShow. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. (expanded isEmpty or: [ collapsed isEmpty and: [ nakedMorphs isEmpty ]]) ifFalse: [menu addLine]. (collapsed asSortedCollection: [:w1 :w2 | w1 label caseInsensitiveLessOrEqual: w2 label]) do: [:w | menu add: w label target: w action: #collapseOrExpand. w model canDiscardEdits ifFalse: [menu lastItem color: Color red]]. nakedMorphs isEmpty ifFalse: [menu addLine]. (nakedMorphs asSortedCollection: [:w1 :w2 | w1 class name caseInsensitiveLessOrEqual: w2 class name]) do: [:w | menu add: w class name target: w action: #comeToFrontAndAddHalo]. menu addTitle: 'find window' translated. menu popUpEvent: evt in: self.! ! !WorldMorph methodsFor: 'submorphs-add/remove' stamp: 'CamilleTeruel 12/6/2013 14:45' prior: 74604235! acceptDroppingMorph: dropped event: evt "The supplied morph, known to be acceptable to the receiver, is now to be assimilated; the precipitating event is supplied" | aMorph | aMorph := self morphToDropFrom: dropped. "Add the given morph to this world and start stepping it if it wants to be." self addMorphFront: aMorph. (aMorph fullBounds intersects: self viewBox) ifFalse: [ self inform: 'Dropped morph not in bounds'. aMorph position: self bounds center ]. aMorph submorphsDo: [ :m | (m isKindOf: HaloMorph) ifTrue: [ m delete ] ]. self bringTopmostsToFront! ! !AbstractTool methodsFor: 'class' stamp: 'onierstrasz 11/11/2013 12:11' prior: 17453551! removeClass: aClass "Remove the selected class from the system, at interactive user request. Make certain the user really wants to do this, since it is not reversible. Answer true if removal actually happened." | message className classToRemove result | "This should probably be an assertion, but since this is a tool, we give user feedback." classToRemove := aClass ifNil: [self inform: 'Argument to #removeClass: is nil'. ^ false]. classToRemove := classToRemove theNonMetaClass. className := classToRemove name. message := 'Are you certain that you want to REMOVE the class ', className, ' from the system?'. (result := self confirm: message) ifTrue: [classToRemove subclasses size > 0 ifTrue: [(self confirm: 'class has subclasses: ' , message) ifFalse: [^ false]]. classToRemove removeFromSystem ]. ^ result! ! !AbstractTool methodsFor: 'class' stamp: 'onierstrasz 11/11/2013 12:12' prior: 17454353! removeClasses: aCollection "Remove the selected classes from the system, at interactive user request. Make certain the user really wants to do this, since it is not reversible. Answer true if removal actually happened." | message classesName classesToRemove result | "This should probably be an assertion, but since this is a tool, we give user feedback." aCollection isEmptyOrNil ifTrue: [ self inform: 'Argument to #removeClasses: is empty or nil'. ^ false ]. classesToRemove := aCollection collect: #theNonMetaClass. classesName := (classesToRemove collect: #name) joinUsing: ', '. message := 'Are you certain that you want to REMOVE the classes ', classesName, ' from the system ?'. (result := self confirm: message) ifTrue: [ classesToRemove do: [:classToRemove | message := classToRemove name, ' has subclasses. Do you really want to REMOVE it from the system ?'. classToRemove subclasses size > 0 ifTrue: [ (self confirm: message) ifTrue: [ classToRemove removeFromSystem ]] ifFalse: [ classToRemove removeFromSystem ]]]. ^ result! ! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'onierstrasz 11/11/2013 12:38' prior: 71879937! browseClassVarRefs: aClass "Put up a menu offering all class variable names; if the user chooses one, open up a message-list browser on all methods that refer to the selected class variable" | lines labelStream allVars index owningClasses | "This method should be split into two -- one part that can be tested, and a wrapper that does the UI stuff." lines := OrderedCollection new. allVars := OrderedCollection new. owningClasses := OrderedCollection new. labelStream := (String new: 200) writeStream. "Why the heck is a writeStream needed?" aClass withAllSuperclasses reverseDo: [:class | | vars | vars := class classVarNames. vars do: [:var | labelStream nextPutAll: var; cr. allVars add: var. owningClasses add: class]. vars isEmpty ifFalse: [lines add: allVars size]]. labelStream contents isEmpty ifTrue: [^self inform: 'No class variables found']. "handle nil superclass better" labelStream skip: -1 "cut last CR". index := (UIManager default chooseFrom: (labelStream contents substrings) lines: lines). index = 0 ifTrue: [^ self]. ^ self browseAllReferencesTo: ((owningClasses at: index) classPool associationAt: (allVars at: index))! ! !SmalltalkImage methodsFor: 'memory space' stamp: 'AlejandroInfante 11/11/2013 15:20' prior: 34633574! lowSpaceWatcher "Wait until the low space semaphore is signalled, then take appropriate actions. " | free preemptedProcess | self garbageCollectMost <= self lowSpaceThreshold ifTrue: [self garbageCollect <= self lowSpaceThreshold ifTrue: ["free space must be above threshold before starting low space watcher" ^ self inform: 'Not enough memory to launch the lowSpaceWatcher.']]. self specialObjectsArray at: 23 put: nil. "process causing low space will be saved here" LowSpaceSemaphore := Semaphore new. self primLowSpaceSemaphore: LowSpaceSemaphore. self primSignalAtBytesLeft: self lowSpaceThreshold. "enable low space interrupts" LowSpaceSemaphore wait. "wait for a low space condition..." self primSignalAtBytesLeft: 0. "disable low space interrupts" self primLowSpaceSemaphore: nil. LowSpaceProcess := nil. "The process that was active at the time of the low space interrupt." preemptedProcess := Smalltalk specialObjectsArray at: 23. Smalltalk specialObjectsArray at: 23 put: nil. "Note: user now unprotected until the low space watcher is re-installed" self memoryHogs isEmpty ifFalse: [free := self bytesLeft. self bytesLeft > free ifTrue: [^ self installLowSpaceWatcher]]. UIManager default lowSpaceWatcherDefaultAction: preemptedProcess! ! !Browser methodsFor: 'class list' stamp: 'onierstrasz 11/11/2013 12:24' prior: 18440816! recent "Let the user select from a list of recently visited classes. 11/96 stp. 12/96 di: use class name, not classes themselves. : dont fall into debugger in empty case" | className class recentList | recentList := RecentClasses select: [ :n | Smalltalk globals includesKey: n ]. recentList size = 0 ifTrue: [ ^ self inform: 'No recent classes found' ]. className := UIManager default chooseFrom: recentList values: recentList. className isNil ifTrue: [ ^ self ]. class := Smalltalk globals at: className. self selectCategoryForClass: class. self classListIndex: (self classList indexOf: class name)! ! !ChangeSorterModel methodsFor: 'change set' stamp: 'AlejandroInfante 11/11/2013 14:56' prior: 18899393! findChangeSetIn: aCollectionOfChangeSets "Search for a changeSet by name. Pop up a menu of all changeSets whose name contains the string entered by the user. If only one matches, then the pop-up menu is bypassed" | index pattern candidates nameList | self okToChange ifFalse: [^ self]. pattern := UIManager default request: 'ChangeSet name or fragment?'. pattern isEmptyOrNil ifTrue: [^ self]. nameList := aCollectionOfChangeSets collect: #name. candidates := aCollectionOfChangeSets select: [:c | (nameList includes: c name) and: [c name includesSubstring: pattern caseSensitive: false]]. candidates size = 0 ifTrue: [ ^ self inform: 'No matching change sets.' ]. candidates size = 1 ifTrue: [ ^ candidates first ]. index := UIManager default chooseFrom: (candidates collect: [:each | each name]). index = 0 ifFalse: [ ^ (candidates at: index) ].! ! !ChangeSorterModel methodsFor: 'change set' stamp: 'AlejandroInfante 11/11/2013 14:59' prior: 18901912! rename: aChangeSet "Store a new name string into the selected ChangeSet. reject duplicate name; allow user to back out" | newName | newName := UIManager default request: 'New name for this change set' initialAnswer: aChangeSet name. (newName = aChangeSet name or: [newName isEmptyOrNil]) ifTrue: [ ^ UIManager default inform: 'Please give a new name' ]. (ChangeSet named: newName) ifNotNil: [ ^ UIManager default inform: 'Sorry that name is already used' ]. aChangeSet name: newName. ^ aChangeSet! ! SystemWindow removeSelector: #takeOutOfWindow! PluggableListMorph removeSelector: #selectedMorph:! "Files"! "Graphics-Files"! "Morphic-Base"! "Morphic-Core"! "NautilusCommon"! "Spec-Tools"! "System-Support"! "Tests"! "Tools"! ----End fileIn----! ----QUIT----2013-12-07T23:16:00.782897+01:00 Pharo.image priorSource: 28305345! ----STARTUP----2013-12-07T23:21:38.361413+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-07T23:21:38.563411+01:00 Pharo-30631.image priorSource: 28333082! ----STARTUP----2013-12-08T00:42:47.220194+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/8/2013 00:39' prior: 78637291! commentForCurrentUpdate ^ '12372 remove all direct references to Compiler https://pharo.fogbugz.com/f/cases/12372 12357 Failing test: #testCanUnderstand https://pharo.fogbugz.com/f/cases/12357 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/8/2013 00:40'! script287 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.64.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.183.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.63.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.91.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1366.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/8/2013 00:40'! update30632 "self new update30632" self withUpdateLog: '12372 remove all direct references to Compiler https://pharo.fogbugz.com/f/cases/12372 12357 Failing test: #testCanUnderstand https://pharo.fogbugz.com/f/cases/12357 '. self loadTogether: self script287 merge: false. self flushCaches. ! ! "ScriptLoader30"! !BehaviorTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/6/2013 15:47' prior: 77487808! testCanUnderstand | c1 c2 | c1 := Object subclass: 'MySuperclass' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self class category. c1 compile: 'method1 ^self subclassResponsibility'. c1 compile: 'method2 ^123'. self deny: (c1 canUnderstand: #method1). self assert: (c1 canUnderstand: #method2). self deny: (c1 canUnderstand: #method3). c2 := c1 subclass: 'MySubclass' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self class category. c2 compile: 'method1 ^ 3'. c2 compile: 'method3 ^5'. self assert: (c2 canUnderstand: #method1). self assert: (c2 canUnderstand: #method3). c2 removeFromSystem. c1 removeFromSystem.! ! !NativeBoost class methodsFor: 'debugger support' stamp: 'MarcusDenker 12/7/2013 23:52' prior: 50227440! tryRunNativeCode: aCompiledMethod for: aReceiver withArgs: arguments "run only a native code of given method, and if it fails evaluate aFailBlock instead" | src m | "self assert: (self isNativeMethod: aCompiledMethod)." src := String streamContents: [:str | str nextPutAll: 'NBDebug_stub'. 1 to: aCompiledMethod numArgs do: [:i | i = 1 ifTrue: [ str nextPutAll: ': ' ] ifFalse: [ str nextPutAll: ' with: ' ]. str nextPutAll: 'arg'. i printOn: str. ]. str cr; nextPutAll: ' '; cr; nextPutAll: ' ^ ContextPart primitiveFailTokenFor: errorCode'. ]. m := Smalltalk compiler new source: src; class: aCompiledMethod methodClass; compiledMethodTrailer: aCompiledMethod trailer; failBlock: [ ^ ContextPart primitiveFailTokenFor: nil ]; compile. m flushCache. m selector flushCache. ^ m valueWithReceiver: aReceiver arguments: arguments. ! ! !MissingClassError methodsFor: 'actions' stamp: 'MarcusDenker 12/7/2013 23:50' prior: 78456598! defineClass Smalltalk compiler evaluate: self superclassName, ' subclass: #', className, ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''Stub-Classes'''! ! !SmalltalkImage methodsFor: 'compiler' stamp: 'MarcusDenker 12/7/2013 23:52' prior: 33510306! compilerClass ^CompilerClass ifNil: [CompilerClass := OpalCompiler].! ! !OCCompilerTest methodsFor: 'literals' stamp: 'MarcusDenker 12/7/2013 23:51' prior: 38914974! testScaledDecimalLiterals "Equal ScaledDecimal with different scales should use different slots This is related to http://bugs.squeak.org/view.php?id=6797" "This correctly works when evaluated separately" self deny: (Smalltalk evaluate: '0.5s1') scale = (Smalltalk evaluate: '0.5s2') scale. "But not when evaluated together if literal reduction is too agressive" self deny: (Smalltalk evaluate: '0.5s1 scale = 0.5s2 scale').! ! !TextPrintIt methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 12/7/2013 23:51' prior: 76833955! actOnClick: anEvent for: anObject in: paragraph editor: editor | result | result := Smalltalk compiler evaluate: evalString for: anObject logged: false. UIManager inform: result printString. ^ true ! ! !MetacelloPharoCommonPlatform methodsFor: 'reflection' stamp: 'CamilleTeruel 11/21/2013 12:43' prior: 72230405! copyClass: oldClass as: newName inCategory: newCategoryName | copysName class newDefinition | copysName := newName asSymbol. copysName = oldClass name ifTrue: [ ^ oldClass ]. (Smalltalk includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := oldClass definition copyReplaceAll: '#' , oldClass name asString with: '#' , copysName asString printString. newDefinition := newDefinition copyReplaceAll: 'category: ' , (SystemOrganization categoryOfElement: oldClass name) asString printString with: 'category: ' , newCategoryName printString. class := self class compiler evaluate: newDefinition logged: true. class class instanceVariableNames: oldClass class instanceVariablesString. class copyAllCategoriesFrom: oldClass. class class copyAllCategoriesFrom: oldClass class. class category: newCategoryName. ^ class! ! !ZnReadEvalPrintDelegate methodsFor: 'private' stamp: 'CamilleTeruel 11/21/2013 12:42' prior: 39658066! evaluate: string | output | output := String streamContents: [ :out | [ | result | result := self class compiler evaluate: string. out print: result; cr ] on: Error, ParserNotification do: [ :exception | out print: exception; cr. exception signalerContext printDetails: out. exception signalerContext sender debugStack: 8 on: out ]. out cr ]. ^ String lf join: output lines! ! !TextDoIt methodsFor: 'evaluating' stamp: 'MarcusDenker 12/7/2013 23:51' prior: 76834226! actOnClick: anEvent for: anObject in: paragraph editor: editor "Note: evalString gets evaluated IN THE CONTEXT OF anObject -- meaning that self and all instVars are accessible" Smalltalk compiler evaluate: evalString for: anObject logged: false. ^ true ! ! "CodeImport"! "KernelTests"! "Metacello-PharoCommonPlatform"! "NativeBoost-Core"! "OpalCompiler-Tests"! "System-Support"! "Text-Core"! "Zinc-HTTP"! ----End fileIn----! ----QUIT----2013-12-08T00:42:55.936191+01:00 Pharo.image priorSource: 28333279! ----STARTUP----2013-12-08T00:48:46.578381+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-08T00:48:46.756379+01:00 Pharo-30632.image priorSource: 28349966! ----STARTUP----2013-12-09T08:38:51.298187+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/9/2013 08:35' prior: 78665225! commentForCurrentUpdate ^ '4825 Quoted-printable encoding incomplete https://pharo.fogbugz.com/f/cases/4825 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/9/2013 08:35'! script288 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.64.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.183.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.92.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1366.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/9/2013 08:35'! update30633 "self new update30633" self withUpdateLog: '4825 Quoted-printable encoding incomplete https://pharo.fogbugz.com/f/cases/4825 '. self loadTogether: self script288 merge: false. self flushCaches. ! ! "ScriptLoader30"! !QuotedPrintableMimeConverter commentStamp: '' prior: 42570189! I am QuotedPrintableMimeConverter. I am a MimeConverter. Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign "=") to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in e-mail. QP works by using the equals sign "=" as an escape character. It also limits line length to 76, as some software has limits on line length. See also http://en.wikipedia.org/wiki/Quoted-printable http://tools.ietf.org/html/rfc2045 I do quoted printable MIME decoding as specified in RFC 2045 "MIME Part One: Format of Internet Message Bodies". Short version of RFC2045, Sect. 6.7: (1) Any octet, except a CR or LF that is part of a CRLF line break of the canonical (standard) form of the data being encoded, may be represented by an "=" followed by a two digit hexadecimal representation of the octet's value. [...] (2) Octets with decimal values of 33 through 60 inclusive, and 62 through 126, inclusive, MAY be represented as the US-ASCII characters which correspond to those octets [...]. (3) Octets with values of 9 and 32 MAY be represented as US-ASCII TAB (HT) and SPACE characters, respectively, but MUST NOT be so represented at the end of an encoded line. [...] (4) A line break in a text body, represented as a CRLF sequence in the text canonical form, must be represented by a (RFC 822) line break, which is also a CRLF sequence, in the Quoted-Printable encoding. [...] (5) The Quoted-Printable encoding REQUIRES that encoded lines be no more than 76 characters long. If longer lines are to be encoded with the Quoted-Printable encoding, "soft" line breaks must be used. An equal sign as the last character on a encoded line indicates such a non-significant ("soft") line break in the encoded text.! !QuotedPrintableMimeConverter commentStamp: '' prior: 78693172! I am QuotedPrintableMimeConverter. I am a MimeConverter. Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign "=") to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in e-mail. QP works by using the equals sign "=" as an escape character. It also limits line length to 76, as some software has limits on line length. See also http://en.wikipedia.org/wiki/Quoted-printable http://tools.ietf.org/html/rfc2045 I do quoted printable MIME decoding as specified in RFC 2045 "MIME Part One: Format of Internet Message Bodies". Short version of RFC2045, Sect. 6.7: (1) Any octet, except a CR or LF that is part of a CRLF line break of the canonical (standard) form of the data being encoded, may be represented by an "=" followed by a two digit hexadecimal representation of the octet's value. [...] (2) Octets with decimal values of 33 through 60 inclusive, and 62 through 126, inclusive, MAY be represented as the US-ASCII characters which correspond to those octets [...]. (3) Octets with values of 9 and 32 MAY be represented as US-ASCII TAB (HT) and SPACE characters, respectively, but MUST NOT be so represented at the end of an encoded line. [...] (4) A line break in a text body, represented as a CRLF sequence in the text canonical form, must be represented by a (RFC 822) line break, which is also a CRLF sequence, in the Quoted-Printable encoding. [...] (5) The Quoted-Printable encoding REQUIRES that encoded lines be no more than 76 characters long. If longer lines are to be encoded with the Quoted-Printable encoding, "soft" line breaks must be used. An equal sign as the last character on a encoded line indicates such a non-significant ("soft") line break in the encoded text.! !QuotedPrintableMimeConverter methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/8/2013 23:25'! initialize super initialize. newline := String cr! ! !QuotedPrintableMimeConverter methodsFor: 'conversion' stamp: 'SvenVanCaekenberghe 12/8/2013 23:26' prior: 30132613! mimeDecode | char outChar previousChar | previousChar := nil. [ mimeStream atEnd ] whileFalse: [ char := mimeStream next. outChar := (char = $= ifTrue: [ ((char := mimeStream next) = Character cr) | (char = Character lf) ifTrue: [ char = Character cr ifTrue: [ mimeStream peekFor: Character lf ]. nil ] ifFalse: [ Character codePoint: char digitValue * 16 + mimeStream next digitValue ] ] ifFalse: [ char ]). outChar notNil ifTrue: [ (outChar = Character lf) & (previousChar = Character cr) ifTrue: [ dataStream nextPutAll: newline ] ifFalse: [ (outChar = Character cr) | (outChar = Character lf) ifFalse: [ dataStream nextPut: outChar ] ]. previousChar := outChar ] ]! ! !QuotedPrintableMimeConverter methodsFor: 'conversion' stamp: 'SvenVanCaekenberghe 12/8/2013 23:26'! mimeEncode | char charValue lineLength | lineLength := 0. [ dataStream atEnd ] whileFalse: [ lineLength >= 74 ifTrue: [ mimeStream nextPut: $=; nextPutAll: newline. lineLength := 0]. char := dataStream next. charValue := char asInteger. (charValue = 9 | (charValue between: 32 and: 60) | (charValue between: 62 and: 126)) ifTrue: [ mimeStream nextPut: char. lineLength := lineLength + 1 ] ifFalse: [ (char = Character cr) | (char = Character lf) ifTrue: [ mimeStream nextPutAll: '=0D=0A'. char = Character cr ifTrue: [ dataStream peekFor: Character lf ]. lineLength := 0 ] ifFalse: [ charValue > 255 ifTrue: [ self error: 'Character out of range' ]. mimeStream nextPut: $=. char asInteger printOn: mimeStream base: 16 length: 2 padded: true. lineLength := lineLength + 3 ] ] ]! ! !QuotedPrintableMimeConverter methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/8/2013 23:33'! newline: string "Set another newline convention, like CRLF or LF that I should use. By default I use CR." newline := string! ! !QuotedPrintableMimeConverterTest methodsFor: 'accesing' stamp: 'SvenVanCaekenberghe 12/8/2013 23:10'! decode: string ^ coder mimeDecode: string as: String! ! !QuotedPrintableMimeConverterTest methodsFor: 'accesing' stamp: 'SvenVanCaekenberghe 12/8/2013 23:10'! encode: string ^ coder mimeEncode: string! ! !QuotedPrintableMimeConverterTest methodsFor: 'running' stamp: 'SvenVanCaekenberghe 12/8/2013 23:09'! setUp coder := QuotedPrintableMimeConverter! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeCRLF self assert: (self decode: 'This is the first line=0D=0A and this is the second') equals: 'This is the first line and this is the second'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 23:37'! testDecodeCustomNewline | decoder output | decoder := coder new. output := String new writeStream. decoder newline: String lf; mimeStream: 'foo=0D=0Abar' readStream; dataStream: output; mimeDecode. self assert: output contents equals: 'foo', String lf, 'bar' ! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeDecodedStrings self assert: (self decode: 'Hätten Hüte ein ß im Namen, wären sie möglicherweise keine Hüte mehr') equals: 'Hätten Hüte ein ß im Namen, wären sie möglicherweise keine Hüte mehr'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeSimpleStrings self assert: (self decode: 'Z=FCrich') equals: 'Zürich'. self assert: (self decode: 'H=E4tten H=FCte ein =DF im Namen, w=E4ren sie m=F6glicherweise keine H=FCte mehr') equals: 'Hätten Hüte ein ß im Namen, wären sie möglicherweise keine Hüte mehr'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeSoftLinebreak self assert: (self decode: 'This is text may not be= decoded as two lines') equals: 'This is text may not be decoded as two lines'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeSoftLinebreakCR self assert: (self decode: 'This is text may not be=', String cr, ' decoded as two lines') equals: 'This is text may not be decoded as two lines'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeSoftLinebreakCRLF self assert: (self decode: 'This is text may not be=', String crlf, ' decoded as two lines') equals: 'This is text may not be decoded as two lines'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:04'! testDecodeSoftLinebreakLF self assert: (self decode: 'This is text may not be=', String lf, ' decoded as two lines') equals: 'This is text may not be decoded as two lines'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeCR self assert: (self encode: 'This is the first line', String cr, 'and this is the second') equals: 'This is the first line=0D=0Aand this is the second'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeCRLF self assert: (self encode: 'This is the first line', String crlf, 'and this is the second') equals: 'This is the first line=0D=0Aand this is the second'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeEncodedStrings "An = becomes =3D and is then not decodable any more (only if you know you have to do it twice ;-) )" self assert: (self encode: 'Z=FCrich') equals: 'Z=3DFCrich'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeLF self assert: (self encode: 'This is the first line', String lf, 'and this is the second') equals: 'This is the first line=0D=0Aand this is the second'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 23:18'! testEncodeLongLine | input output | input := (String new: 74 withAll: $A), (String new: 47 withAll: $B). output := (String new: 74 withAll: $A), '= ', (String new: 47 withAll: $B). self assert: (self encode: input) equals: output! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeSimpleStrings self assert: (self encode: 'Zürich') equals: 'Z=FCrich'. self assert: (self encode: 'Über die Fährverbindungen nach Föhr wüßte ich nicht viel') equals: '=DCber die F=E4hrverbindungen nach F=F6hr w=FC=DFte ich nicht viel'! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testEncodeSoftLinebreak | original encoded | original := 'Cowards die many times before their deaths; The valiant never taste of death but once. Of all the wonders that I yet have heard, it seems to me most strange that men should fear; Seeing that death, a necessary end, will come when it will come'. encoded := 'Cowards die many times before their deaths; The valiant never taste of dea= th but once.=0D=0AOf all the wonders that I yet have heard, it seems to me most strange that= men should fear;=0D=0ASeeing that death, a necessary end, will come when it will come'. self assert: (self encode: original) equals: encoded. self assert: (self decode: encoded) equals: original! ! !QuotedPrintableMimeConverterTest methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/8/2013 19:05'! testLongLine | input output | input := (String new: 74 withAll: $A), (String new: 47 withAll: $B). output := (String new: 74 withAll: $A), '= ', (String new: 47 withAll: $B). self assert: (self encode: input) equals: output! ! "Network-MIME"! "NetworkTests"! ----End fileIn----! ----QUIT----2013-12-09T08:38:57.08418+01:00 Pharo.image priorSource: 28350163! ----STARTUP----2013-12-09T08:44:33.598964+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-09T08:44:33.790966+01:00 Pharo-30633.image priorSource: 28373614! ----STARTUP----2013-12-10T09:00:52.690454+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/10/2013 08:57' prior: 78682109! commentForCurrentUpdate ^ '12376 Finder raises an error when right clicking on the main panel https://pharo.fogbugz.com/f/cases/12376 12380 The logic to retrieve the patch of KomitPackage should be extracted https://pharo.fogbugz.com/f/cases/12380 12378 On Unix, the shortcut to validate the Komitter window is not working https://pharo.fogbugz.com/f/cases/12378 12375 PluggableButtonMorph error on getMenuSelector https://pharo.fogbugz.com/f/cases/12375'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/10/2013 08:57'! script289 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.5.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-StephaneDucasse.102.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.183.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-StephaneDucasse.11.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-EstebanLorenzano.8.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-EstebanLorenzano.191.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-StephaneDucasse.2.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.4.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.139.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1368.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/10/2013 08:58'! update30634 "self new update30634" self withUpdateLog: '12376 Finder raises an error when right clicking on the main panel https://pharo.fogbugz.com/f/cases/12376 12380 The logic to retrieve the patch of KomitPackage should be extracted https://pharo.fogbugz.com/f/cases/12380 12378 On Unix, the shortcut to validate the Komitter window is not working https://pharo.fogbugz.com/f/cases/12378 12375 PluggableButtonMorph error on getMenuSelector https://pharo.fogbugz.com/f/cases/12375'. self loadTogether: self script289 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DataRetriever commentStamp: '' prior: 0! I am a simple object used when a UI blocking query is needed but: - you do not want to block the UI thread - you want to cache the result - you want to block the access to the data until the end of the query. Even if Imay be reused to retrieve multiple times data, it is safer to dispose me and use a new sibling of me. In case I am released before Ican fetch the data, a `nullObject` will be returned.! !KomitPackage commentStamp: '' prior: 77751061! I am a simple object used to cache the patch in order to save a bit of time! !FinderUI methodsFor: 't - accessing' stamp: 'MarcusDenker 12/9/2013 12:45' prior: 22163671! menu: menu shifted: b self selectedNode ifNil: [ ^menu ]. ^ self selectedNode menu: menu shifted: b ! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'DamienCassou 12/9/2013 14:31' prior: 78137745! initializeDialogWindow: aWindow valid whenChangedDo: [ :b | aWindow toolbar okButton enabled: b ]. aWindow toolbar okButton enabled: false. issueNumber bindKeyCombination: Character cr control unix | $m control mac toAction: [ self valid ifTrue: [ aWindow triggerOkAction ] ]! ! !DataRetriever commentStamp: '' prior: 78717508! I am a simple object used when a UI blocking query is needed but: - you do not want to block the UI thread - you want to cache the result - you want to block the access to the data until the end of the query. Even if Imay be reused to retrieve multiple times data, it is safer to dispose me and use a new sibling of me. In case I am released before Ican fetch the data, a `nullObject` will be returned.! !DataRetriever class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 12/9/2013 18:37'! for: aBlock ^ self new block: aBlock; yourself! ! !DataRetriever methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/9/2013 18:48'! block: aBlock "The query starts as soon as the retrieval block is set" block := aBlock. self retrieveData! ! !DataRetriever methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/9/2013 18:48'! data "If data is nil, it means the query is not yet done. Then the client is frozen until the end of the query (or until I am released). Then if it is release, `nullObject` is returned instead of the query result" data ifNil: [ semaphore wait ]. semaphoreIsValid ifFalse: [ ^ nullObject ]. ^ data! ! !DataRetriever methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/9/2013 18:38'! initialize super initialize. block := []. semaphore := Semaphore new. semaphoreIsValid := true. nullObject := nil.! ! !DataRetriever methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/9/2013 18:35'! nullObject: anObject nullObject := anObject! ! !DataRetriever methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/9/2013 18:48'! release "If I am released while some clients are waiting, I need to free them. In the getter, the value of semaphoreIsValid is checked to know if it was a release or the end of the query" | oldSemaphoreIsValid | oldSemaphoreIsValid := semaphoreIsValid. semaphoreIsValid := false. self signalDataIsReady. semaphoreIsValid := oldSemaphoreIsValid.! ! !DataRetriever methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/9/2013 18:31'! retrieveData fork ifNotNil: [ fork terminate ]. fork := [ data := nil. semaphore consumeAllSignals. data := block value. self signalDataIsReady ] forkAt: Processor userBackgroundPriority + 5! ! !DataRetriever methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/9/2013 18:48'! signalDataIsReady "Since mupltiple clients may have tried to access my data (and be trapped in a wait waiting for the end of the query), I need to signal as long as I have a client waiting" [ semaphore isSignaled ] whileFalse: [ semaphore signal ]. semaphore consumeAllSignals.! ! !KomitPackage commentStamp: '' prior: 78717980! I am a simple object used to cache the patch in order to save a bit of time! !KomitPackage methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/9/2013 18:20' prior: 77752592! flush super flush. classes ifNotNil: [ classes do: [ :each | each flush ] ]. classes := nil. isFullyCommited := true. self retrievePatch! ! !KomitPackage methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 12/9/2013 18:19' prior: 77752926! initialize super initialize. expanded := true. isFullyCommited := true.! ! !KomitPackage methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/9/2013 18:29' prior: 77754126! patch ^ dataRetriever data! ! !KomitPackage methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/9/2013 18:29' prior: 77754757! retrievePatch dataRetriever ifNotNil: [ dataRetriever release ]. dataRetriever := DataRetriever for: [ self package patch ].! ! !KomitterUI methodsFor: 'initialization' stamp: 'DamienCassou 12/9/2013 14:31' prior: 78146508! initializeDialogWindow: aWindow self bindKeyCombination: (Character cr control unix | $m control mac) toAction: [ aWindow triggerOkAction ]. aWindow toolbar okButton enabled: canCommit value. canCommit whenChangedDo: [ :b | aWindow toolbar okButton enabled: b ]. self focusOrder removeAll; add: message; add: remotes; add: aWindow toolbar; add: tree; add: previousMessages! ! !MorphicButtonAdapter class methodsFor: 'specs' stamp: 'NicolaiHess 12/9/2013 09:48' prior: 69641664! defaultSpec ^ {#PluggableButtonMorph. #color:. Color white. #on:getState:action:label:menu:. #model. #state. #action. #label. nil. #getEnabledSelector:. #enabled. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #askBeforeChanging:. #(model askBeforeChanging). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! KomitPackage removeSelector: #signalPatchIsReady! KomitPackage removeSelector: #resetFork! "Komitter"! "Spec-MorphicAdapters"! "Tools"! ----End fileIn----! ----QUIT----2013-12-10T09:01:00.108459+01:00 Pharo.image priorSource: 28373810! ----STARTUP----2013-12-10T09:07:00.516225+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-10T09:07:00.690225+01:00 Pharo-30634.image priorSource: 28391991! ----STARTUP----2013-12-10T10:37:48.152129+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/10/2013 10:34' prior: 78705757! commentForCurrentUpdate ^ '12368 Dive Into option from Inpector context menu fails https://pharo.fogbugz.com/f/cases/12368 12379 Shape is missing a comment https://pharo.fogbugz.com/f/cases/12379 12324 There should be no class side implementations of #packages except for ClassDescription https://pharo.fogbugz.com/f/cases/12324'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/10/2013 10:35'! script290 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-EstebanLorenzano.66.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.613.mcz NautilusCommon-MarcusDenker.183.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-MarcusDenker.195.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1368.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/10/2013 10:35'! update30635 "self new update30635" self withUpdateLog: '12368 Dive Into option from Inpector context menu fails https://pharo.fogbugz.com/f/cases/12368 12379 Shape is missing a comment https://pharo.fogbugz.com/f/cases/12379 12324 There should be no class side implementations of #packages except for ClassDescription https://pharo.fogbugz.com/f/cases/12324'. self loadTogether: self script290 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Shape commentStamp: '' prior: 0! I am an abstract class that knows my bounds and if a point is contained in me.! !AnnouncementsAPIDocumentation class methodsFor: 'accessing' stamp: 'StephanEggermont 12/9/2013 19:48'! helpPackages ^#('Announcements-Core' 'Announcements-View' 'Announcements-Tests-Core')! ! !SUnitAPIDocumentation class methodsFor: 'accessing' stamp: 'StephanEggermont 12/9/2013 19:54'! helpPackages ^#('SUnit-Core-Announcements' 'SUnit-Core-Extensions' 'SUnit-Core-Kernel' 'SUnit-Core-Kernel' 'SUnit-Core-Utilities' 'SUnit-Tests' 'SUnit-UI')! ! !PackageAPIHelpBuilder methodsFor: 'building' stamp: 'StephanEggermont 12/9/2013 19:52' prior: 28989626! build |pTopic| topicToBuild := (HelpTopic named: rootToBuildFrom bookName). rootToBuildFrom helpPackages do: [:package| pTopic := HelpTopic named: package. topicToBuild addSubtopic: pTopic. self buildPackageTopic: pTopic. ] ! ! !RegexAPIDocumentation class methodsFor: 'accessing' stamp: 'StephanEggermont 12/9/2013 19:54'! helpPackages ^#('Regex-Core' 'Regex-Core-Exceptions' 'Regex-Tests-Core')! ! !HelpAPIDocumentation class methodsFor: 'accessing' stamp: 'StephanEggermont 12/9/2013 19:59'! helpPackages ^#('HelpSystem-Core-Model' 'HelpSystem-Core-Utilities' 'HelpSystem-Core-UI')! ! !Shape commentStamp: '' prior: 78735604! I am an abstract class that knows my bounds and if a point is contained in me.! !InspectorNavigator methodsFor: 'menu' stamp: 'NicolaiHess 12/8/2013 20:28' prior: 76879383! customMenuActions ^ [:aMenu :currentGroup | currentGroup addItem: [ :item | item name: 'Dive Into' translated; action: [ self diveIntoSelectedObject ]; shortcut: $d command mac | $d alt win | $d alt unix]. (history hasPrevious or: [ history hasNext ]) ifTrue: [ aMenu addGroup: [ :aGroup | history hasPrevious ifTrue: [ aGroup addItem: [ :item | item name: 'Back' translated; action: [ self inspectPrevious ]; shortcut: $[ command mac | $[ ctrl ] ]. history hasNext ifTrue: [ aGroup addItem: [ :item | item name: 'Forward' translated; action: [ self inspectNext ]; shortcut: $] command mac | $] ctrl ] ] ] ] ]! ! !ProfStefAPIHelp class methodsFor: 'accessing' stamp: 'StephanEggermont 12/9/2013 19:48'! helpPackages ^ #('ProfStef-Core')! ! !TestRPackagePrequisites methodsFor: 'tests' stamp: 'StephanEggermont 12/9/2013 19:58'! testNoPackagesOverride "Class side packages should not be overridden" self assert: (Object allSubclasses select: [: each | (each class compiledMethodAt: #packages ifAbsent: [nil]) isNotNil]) isEmpty. ! ! ProfStefAPIHelp class removeSelector: #packages! HelpAPIDocumentation class removeSelector: #packages! RegexAPIDocumentation class removeSelector: #packages! SUnitAPIDocumentation class removeSelector: #packages! AnnouncementsAPIDocumentation class removeSelector: #packages! "Announcements-Help"! "HelpSystem-Core"! "ProfStef-Help"! "RPackage-SystemIntegration"! "Regex-Help"! "SUnit-Help"! "Spec-Inspector"! ----End fileIn----! ----QUIT----2013-12-10T10:37:55.52613+01:00 Pharo.image priorSource: 28392188! ----STARTUP----2013-12-10T10:43:48.549944+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-10T10:43:48.715944+01:00 Pharo-30635.image priorSource: 28407023! ----STARTUP----2013-12-11T13:57:49.192876+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 12/11/2013 13:53' prior: 78724135! commentForCurrentUpdate ^ '- Issue 12390 MenuRegistation is bogus https://pharo.fogbugz.com/f/cases/12390/MenuRegistation-is-bogus - Issue 12387 Finder displays too many strings around arguments https://pharo.fogbugz.com/f/cases/12387/Finder-displays-too-many-strings-around-arguments - Issue 12393 MessageNotUnderstood: receiver of "ui" is nil https://pharo.fogbugz.com/f/cases/12393/MessageNotUnderstood-receiver-of-ui-is-nil - Issue 12383 Loose package selection on using package filter https://pharo.fogbugz.com/f/cases/12383/Loose-package-selection-on-using-package-filter'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 12/11/2013 13:54'! script291 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.68.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.223.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.615.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-MarcusDenker.195.mcz RPackage-Tests-MarcusDenker.125.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-MarcusDenker.120.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1370.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 12/11/2013 13:54'! update30636 "self new update30636" self withUpdateLog: '- Issue 12390 MenuRegistation is bogus https://pharo.fogbugz.com/f/cases/12390/MenuRegistation-is-bogus - Issue 12387 Finder displays too many strings around arguments https://pharo.fogbugz.com/f/cases/12387/Finder-displays-too-many-strings-around-arguments - Issue 12393 MessageNotUnderstood: receiver of "ui" is nil https://pharo.fogbugz.com/f/cases/12393/MessageNotUnderstood-receiver-of-ui-is-nil - Issue 12383 Loose package selection on using package filter https://pharo.fogbugz.com/f/cases/12383/Loose-package-selection-on-using-package-filter'. self loadTogether: self script291 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus class methodsFor: 'browser compatibility' stamp: 'NicolaiHess 12/11/2013 11:24' prior: 27969987! fullOnClass: aClass selector: aSelector ^ aSelector ifNil: [ self openOnClass: aClass ] ifNotNil: [| method | method := aClass methodDict at: aSelector ifAbsent: [ ^ self openOnClass:aClass ]. method ifNotNil: [ self openOnMethod: method ]]! ! !FinderUI methodsFor: 'buttons behavior' stamp: 'StephaneDucasse 12/11/2013 13:28' prior: 22150633! environmentButtonLabel ^ 'Packages...'! ! !MenuRegistration methodsFor: 'spec accessing' stamp: 'BenjaminVanRyseghem 4/6/2012 18:48' prior: 25538678! enabled: aBooleanOrABlock aBooleanOrABlock == true ifTrue: [ self spec enabled: true. ^ self ]. aBooleanOrABlock == false ifTrue: [ self spec enabled: false. ^ self ]. self spec enabled: (aBooleanOrABlock cull: self model).! ! !MenuRegistration methodsFor: 'spec accessing' stamp: 'StephaneDucasse 12/11/2013 10:33'! enabledBlock ^ self spec enabledBlock ! ! !MenuRegistration methodsFor: 'spec accessing' stamp: 'BenjaminVanRyseghem 3/31/2011 01:50' prior: 25539022! enabledBlock: aBlock self spec enabledBlock: aBlock! ! !MenuRegistration methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 1/24/2012 20:17' prior: 25539174! printOn: aStream super printOn: aStream. aStream << ' ( ' << self name asString << ' ) '! ! !Finder methodsFor: 'private-example' stamp: 'Anonymous 12/11/2013 13:25' prior: 68829563! computeWithMethodFinder: aString "Compute the selectors for the single example of receiver and args, in the very top pane" | data result resultArray dataStrings methodFinder dataObjects temporarySearchResult statements | (aString includes: $.) ifFalse: [ ^ #() ]. "delete trailing period. This should be fixed in the Parser!!" data := aString trimRight: [ :char | char isSeparator or: [ char = $. ] ]. methodFinder := MethodFinder new. data := methodFinder cleanInputs: data. "remove common mistakes" [ dataObjects := Smalltalk compiler evaluate: '{' , data , '}' ] on: SyntaxErrorNotification do: [ :e | self inform: 'Syntax Error: ' , e errorMessage. self contents: e errorCode allButFirst allButLast. ^ #() ]. "#( data1 data2 result )" statements := (self class compiler parse: 'zort ' , data) body statements reject: [ :each | each isReturn ]. dataStrings := statements collect: [ :node | String streamContents: [ :strm | node isMessage ifTrue: [ strm nextPut: $( ]. strm << node formattedCode. node isMessage ifTrue: [ strm nextPut: $) ] ] ]. dataObjects size < 2 ifTrue: [ self inform: 'If you are giving an example of receiver, \args, and result, please put periods between the parts.\Otherwise just type one selector fragment' withCRs. ^ #() ]. dataObjects := Array with: dataObjects allButLast with: dataObjects last. "#( (data1 data2) result )" result := methodFinder load: dataObjects; findMessage. (result first beginsWith: 'no single method') ifFalse: [ temporarySearchResult := self testObjects: dataObjects strings: dataStrings. dataObjects := temporarySearchResult second. dataStrings := temporarySearchResult third ]. resultArray := self listFromResult: result. resultArray isEmpty ifTrue: [ self inform: result first ]. dataStrings size = (dataObjects first size + 1) ifTrue: [ resultArray := resultArray collect: [ :expression | | newExp | newExp := expression. dataObjects first withIndexDo: [ :lit :i | newExp := newExp copyReplaceAll: 'data' , i printString with: (dataStrings at: i) ]. newExp , ' --> ' , dataStrings last ] ]. ^ resultArray! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 12/10/2013 17:00' prior: 77459428! updatePackages | package | package := self selectedPackage. list buildContents. self selectedPackage: package. self updatePackageViewAndMove! ! "MenuRegistration"! "Nautilus"! "NautilusCommon"! "Tools"! ----End fileIn----! ----QUIT----2013-12-11T13:57:57.056873+01:00 Pharo.image priorSource: 28407219! ----STARTUP----2013-12-11T14:03:41.744968+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-11T14:03:41.914974+01:00 Pharo-30636.image priorSource: 28423469! ----STARTUP----2013-12-11T16:35:52.522493+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 12/11/2013 16:32' prior: 78739169! commentForCurrentUpdate ^ '- Issue 12400. Split SmartSuggestions package https://pharo.fogbugz.com/f/cases/12400/ - Issue 12240. some RPackage tests have no separate package https://pharo.fogbugz.com/f/cases/12240/ - Isssue 12407 Rename Morphic-Base-Explorer into Morphic-Base-SimpleList https://pharo.fogbugz.com/f/cases/12407/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 12/11/2013 16:32'! script292 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-StephaneDucasse.134.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.21.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.68.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-StephaneDucasse.615.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.290.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1370.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 12/11/2013 16:32'! update30637 "self new update30637" self withUpdateLog: '- Issue 12400. Split SmartSuggestions package https://pharo.fogbugz.com/f/cases/12400/ - Issue 12240. some RPackage tests have no separate package https://pharo.fogbugz.com/f/cases/12240/ - Isssue 12407 Rename Morphic-Base-Explorer into Morphic-Base-SimpleList https://pharo.fogbugz.com/f/cases/12407/'. self loadTogether: self script292 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AlphaBlendingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 42100065! see ColorMappingCanvas comment.! !PluggableCanvas commentStamp: '' prior: 42540052! An abstract canvas which modifies the behavior of an underlying canvas in some way. Subclasses should implement apply:, which takes a one argument block and an actual canvas to draw on. See apply: for the specific definition.! !ClippingCanvas commentStamp: '' prior: 42176556! A modified canvas which clips all drawing commands.! !MultiCanvas commentStamp: '' prior: 42460611! A canvas which forwards drawing commands to sub-canvases.! !NullCanvas commentStamp: '' prior: 42509222! A canvas which ignores all drawing commands.! !RPackageMCSynchronisationTest commentStamp: '' prior: 42611835! I had some problems using the 'ensure:' method. There was some conflicts with the organizer used for the test when trying to clean the classes, categories and packages generated for the test. There is something I don't get with this method. Therefore I choosed to clean by default all possible generated classes, categories and packages after each test using the tearDown method. For now, all that was in the 'ensure:' methods has been commented. Look for example at: testAddMethodInClassicCategoryAddMethodToTheParentPackageOfItsClass and try to uncomment it! !SimpleHierarchicalListMorph commentStamp: 'MarcusDenker 12/12/2009 07:36' prior: 42678510! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList.! !CornerRounder commentStamp: '' prior: 42209049! This class is a quick hack to support rounded corners in morphic. Rather than produce rounded rectangles, it tweaks the display of corners. Rather than work for any radius, it only supports a radius of 6. Rather than work for any border width, it only supports widths 0, 1 and 2. The corners, while apparently transparent, still behave opaquely to mouse clicks. Worse than this, the approach relies on the ability to extract underlying bits from the canvas prior to display. This ran afoul of top-down display, it seems, in SystemWindow spawnReframeHandle: (qv). It will also make a postscript printer very unhappy. But, hey, it's cute.! !MockContainer commentStamp: '' prior: 42438463! I'm only a fake container, since in some cases to build a context we use the wraped model, and build a full container isn't so simple... ! !TransferMorph commentStamp: 'nk 6/16/2003 16:52' prior: 42766130! This is a Morph that is used to visually indicate the progress of a drag operation, and also as a container for various bits of drag state information. It polls the shift state in its step method to update its copy state (shift pressed = should copy). And if you hit the Escape key while dragging, it aborts the drag operation.! !SugsMockContext commentStamp: '' prior: 42715857! I'm a mock context with lot of stuff hardcoded. I'm used in the tests to make easier the configuration for detecting diferents context.! !ListItemWrapper commentStamp: '' prior: 46288228! Contributed by Bob Arning as part of the ObjectExplorer package. ! !MorphWithSubmorphsWrapper commentStamp: 'ls 3/1/2004 17:32' prior: 42454594! Display a morph in a SimpleHierarchicalListMorph, and arrange to recursively display the morph's submorphs. The "item" that is wrapped is the morph to display.! !PluggableListItemWrapper commentStamp: 'ar 10/14/2003 23:51' prior: 42540959! luggableListItemWrapper makes it more easy for clients to use hierarchical lists. Rather than having to write a subclass of ListItemWrapper, a PluggableListItemWrapper can be used to provide the appropriate information straight from the model: string - an explicit string representation (contrary to the 'item' which contains any kind of object) getStringSelector - a message invoked to retrieve the sting representation of its item dynamically from its model (when a constant representation is undesirable) hasContentsSelector - a message invoked in the model to answer whether the item has any children or not. getContentsSelector - a message invoked in the model to retrieve the contents for its item. All callback selectors can have zero, one or two arguments with the item and the wrapper as first and second argument.! !AlphaBlendingCanvas commentStamp: 'LaurentLaffont 2/23/2011 20:17' prior: 78767186! see ColorMappingCanvas comment.! !PluggableCanvas commentStamp: '' prior: 78767282! An abstract canvas which modifies the behavior of an underlying canvas in some way. Subclasses should implement apply:, which takes a one argument block and an actual canvas to draw on. See apply: for the specific definition.! !ClippingCanvas commentStamp: '' prior: 78767573! A modified canvas which clips all drawing commands.! !MultiCanvas commentStamp: '' prior: 78767685! A canvas which forwards drawing commands to sub-canvases.! !NullCanvas commentStamp: '' prior: 78767802! A canvas which ignores all drawing commands.! !RPackageMCSynchronisationTest commentStamp: '' prior: 78767925! I had some problems using the 'ensure:' method. There was some conflicts with the organizer used for the test when trying to clean the classes, categories and packages generated for the test. There is something I don't get with this method. Therefore I choosed to clean by default all possible generated classes, categories and packages after each test using the tearDown method. For now, all that was in the 'ensure:' methods has been commented. Look for example at: testAddMethodInClassicCategoryAddMethodToTheParentPackageOfItsClass and try to uncomment it! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'GuillermoPolito 9/5/2012 13:16' prior: 31835754! testAddCategoryCreatesPackage "test that when we add a category that does not yet correspond to an existing package, a new package is created" "self debug: #testAddCategoryCreatesPackage" self flag: #todo. "To be removed when Categories are kicked out" self addXCategory. self assert: (self organizer includesPackageNamed: #XXXXX)! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'GuillermoPolito 9/5/2012 13:16' prior: 31836223! testAddCategoryIsAlreadyAPackageDoesNotCreatePackage "test that when we add a category corresponding to an existing package, we do not create a second package" "self debug: #testAddCategoryIsAlreadyAPackageDoesNotCreatePackage" |tmpPackage| self flag: #todo. "To be removed when Categories are kicked out" self addXCategory. tmpPackage := self organizer packageNamed: #XXXXX. self addXCategory. self assert: tmpPackage = (self organizer packageNamed: #XXXXX) ! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'GuillermoPolito 9/5/2012 13:16' prior: 31836829! testRenameCategoryAlsoRenameAllExtensionProtocols "test that when we rename a category, all corresponding extension protocols in the system are renamed" "self debug: #testRenameCategoryAlsoRenameAllExtensionProtocols" |XPackage YPackage ZPackage classInY classInZ| self addXCategory. self addYCategory. self addZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. classInY := self createNewClassNamed: 'ClassInYPackage' inCategory: 'YYYYY'. classInZ := self createNewClassNamed: 'ClassInZPackage' inCategory: 'ZZZZZ'. self createMethodNamed: 'extensionFromXInClassInY' inClass: classInY inCategory: '*XXXXX'. self createMethodNamed: 'longNameExtensionFromXInClassInY' inClass: classInY inCategory: '*XXXXX-subcategory'. self createMethodNamed: 'extensionFromXInClassInZ' inClass: classInZ inCategory: '*XXXXX'. Smalltalk organization renameCategory: 'XXXXX' toBe: 'NewCategoryName'. self assert: (XPackage name = 'NewCategoryName'). self assert: (classInY >> #extensionFromXInClassInY) category = '*NewCategoryName'. self assert: (classInY >> #longNameExtensionFromXInClassInY) category = '*NewCategoryName'. self assert: (classInZ >> #extensionFromXInClassInZ) category = '*NewCategoryName'.! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'GuillermoPolito 9/5/2012 13:16' prior: 31838314! testRenameCategoryChangeTheNameOfThePackage "test that when we rename a category, the RPackage corresponding is updated with this new name" |XPackage| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. Smalltalk organization renameCategory: 'XXXXX' toBe: 'YYYYY'. self assert: (XPackage name = 'YYYYY').! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'EstebanLorenzano 10/16/2013 17:41' prior: 74398808! testRenameCategoryUpdateTheOrganizer "test that when we rename a category, the organizer dictionary is update with this new name, so that we can access the package with this new name as key" |XPackage| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. Smalltalk organization renameCategory: 'XXXXX' toBe: 'YYYYY'. self assert: (self organizer packageNamed: 'YYYYY' asSymbol) = XPackage. self deny: (self organizer includesPackageNamed: #XXXXX).! ! !RPackageCategorySynchronisationTest methodsFor: 'tests - operations on categories' stamp: 'GuillermoPolito 9/5/2012 13:16' prior: 31839376! testRenameUnknownCategoryCreatesNewRPackage "test that when we rename a category that is not registered in RPackage , it does not raise errors and simply create a new package. We need this behaviour as for now, create a new category with the class browser does not emit the corrects events, and therefore RPackage can not be directly updated" SystemAnnouncer uniqueInstance suspendAllWhile: [ self addXCategory. ]. self deny: (self organizer includesPackageNamed: #XXXXX). Smalltalk organization renameCategory: 'XXXXX' toBe: 'YYYYY'. self assert: (self organizer includesPackageNamed: #YYYYY).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - adding classes' stamp: 'EstebanLorenzano 10/8/2013 13:08' prior: 74385670! testAddClassAddItIntoPackageBestMatchName "self debug: #testAddCategoryCreatesPackage" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #'XXXXX'. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. self assert: (tmpPackage definesClass: class). self assert: class package equals: tmpPackage! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - adding classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31840792! testAddClassAddItIntoPackageExactName "self debug: #testAddCategoryCreatesPackage" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self assert: (tmpPackage definesClass: class). self assert: class package equals: tmpPackage! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - adding classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31841277! testAddClassUpdateTheOrganizerMappings "test that when we add a class, the organizer 'classPackageMapping' dictionary is updated, so that the class is linked to its package and so that we can access its owning package" "self debug: #testAddClassUpdateTheOrganizer" |tmpPackage class| self addXCategory. tmpPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self assert: class package equals: tmpPackage! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:53' prior: 31857224! testRecategorizeClassRaisesClassRepackagedEvent "test that when we recategorize a class, the organizer is updated so that the class name point the the new RPackage" | XPackage YPackage class ann | ann := nil. SystemAnnouncer uniqueInstance on: ClassRepackaged do: [ :a | ann := a. ]. self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. class category: 'YYYYY'. self assert: ann notNil. self assert: ann classRepackaged equals: class. self assert: ann oldPackage equals: XPackage. self assert: ann newPackage equals: YPackage.! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'EstebanLorenzano 10/8/2013 13:08' prior: 74386190! testRecategorizeClassRegisterTheClassInTheBestMatchPackage "test that when we recategorize a class, the new package in which it is defined include it" |XPackage YPackage class| self addXCategory. self addXMatchCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. class category: 'XXXXX-YYYY'. self assert: (self organizer packageOf: class) = XPackage. self deny: (self organizer packageOf: class) = YPackage. ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:40' prior: 31858876! testRecategorizeClassRegisterTheClassInTheExactMatchPackage "test that when we recategorize a class, the new package in which it is defined include it" |XPackage YPackage class| self addXCategory. self addXMatchCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. class category: 'XXXXX'. self assert: (self organizer packageOf: class) = XPackage. self deny: (self organizer packageOf: class) = YPackage. ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'EstebanLorenzano 9/24/2012 15:20' prior: 31859568! testRecategorizeClassRegisterTheClassInTheMatchingPackage "test that when we recategorize a class, the new package in which it is defined include it" |XPackage YPackage class| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. class category: 'XXXXX'. self deny: (self organizer packageOf: class) = YPackage. self assert: (self organizer packageOf: class) = XPackage.! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:48' prior: 31860231! testRecategorizeClassRegisterTheClassMethodsInTheNewPackage "test that when we recategorize a class, the new package in which it is defined include all the methods defined in this class (not extensions)" | addedCount addedCat XPackage YPackage ZPackage class| self addXCategory. self addYCategory. self addZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'method1' inClass: class inCategory: 'category'. self createMethodNamed: 'method2' inClass: class inCategory: '*zzzzz'. self createMethodNamed: 'method3' inClass: class inCategory: '*yyyyy'. class category: 'YYYYY'. self assert: (YPackage includesDefinedSelector: #method1 ofClass: class ). self deny: (XPackage includesSelector: #method1 ofClass: class ). self deny: (ZPackage includesSelector: #method1 ofClass: class ). self deny: (XPackage includesSelector: #method2 ofClass: class ). self deny: (YPackage includesSelector: #method2 ofClass: class ). self assert: (ZPackage includesExtensionSelector: #method2 ofClass: class ). self deny: (XPackage includesSelector: #method3 ofClass: class ). self assert: (YPackage includesDefinedSelector: #method3 ofClass: class ). self deny: (ZPackage includesSelector: #method3 ofClass: class ). ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:48' prior: 31861794! testRecategorizeClassUnregisterTheClassFromTheOldPackage "test that when we recategorize a class, the old package in which it was defined don't include it anymore" |XPackage YPackage class| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. class category: 'YYYYY'. self deny: (XPackage includesClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:50' prior: 31862395! testRecategorizeClassUnregisterTheClassMethodsFromTheOldPackage "test that when we recategorize a class, the old package in which it was defined don't include its defined methods (not extensions) anymore" "self debug: #testRecategorizeClassUnregisterTheClassMethodsFromTheOldPackage" |XPackage YPackage ZPackage class| self addXCategory. self addYCategory. self addZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'method1' inClass: class inCategory: 'category'. self createMethodNamed: 'method2' inClass: class inCategory: '*zzzzz'. self createMethodNamed: 'method3' inClass: class inCategory: '*yyyyy'. class category: 'YYYYY'. self deny: (XPackage includesSelector: #method1 ofClass: class ). self deny: (XPackage includesSelector: #method2 ofClass: class ). self deny: (XPackage includesSelector: #method3 ofClass: class ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:54' prior: 31863573! testRecategorizeClassUpdateTheOrganizerMappings "test that when we recategorize a class, the organizer is updated so that the class name point the the new RPackage" |XPackage YPackage class| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. class category: 'YYYYY'. self assert: (self organizer packageOf: class) equals: YPackage ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:59' prior: 31864194! testRecategorizeClassWithMetaClassMethodsRegisterAllClassMethodsInTheNewPackage "test that when we recategorize a class (having methods defined in both instance and class side), the new package in which it is defined include all the methods (from instance and class side) defined in this class (not extensions)" | addedCount addedCat XPackage YPackage ZPackage class| self addXCategory. self addYCategory. self addZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'method1' inClass: class theMetaClass inCategory: 'category'. self createMethodNamed: 'method2' inClass: class theMetaClass inCategory: '*yyyyy'. self createMethodNamed: 'method3' inClass: class theMetaClass inCategory: '*zzzzz'. class category: 'YYYYY'. "lets check metaclass methods" self assert: (YPackage includesDefinedSelector: #method1 ofMetaclassName: class name). self assert: (YPackage includesDefinedSelector: #method2 ofMetaclassName: class name). self assert: (ZPackage includesExtensionSelector: #method3 ofMetaclassName: class name ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - recategorizing class' stamp: 'GuillermoPolito 9/5/2012 13:37' prior: 31865564! testRecategorizeClassWithUnexistingPackageNameRegisterTheClassInANewPackage "test that when we recategorize a class in category not yet registered in RPackage, a new rPackage is created with the class inside" |XPackage YPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self assert: (self organizer packageOf: class) = XPackage. class category: 'YYYYY'. YPackage := self organizer packageNamed: #YYYYY. self assert: (self organizer packageOf: class) equals: YPackage. self deny: (self organizer packageOf: class) = XPackage.! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - removing classes' stamp: 'GuillermoPolito 9/5/2012 13:30' prior: 31866330! testRemoveClassUnregisterTheClassDefinedMethodsFromItsPackage "test that when we remove a class, the class methods defined in the parent package (not extensions) are all removed from its parent Package" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. Smalltalk removeClassNamed: 'NewClass'. self deny: (XPackage includesSelector: #stubMethod ofClass: class). ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - removing classes' stamp: 'GuillermoPolito 9/5/2012 13:30' prior: 31867015! testRemoveClassUnregisterTheClassExtensionMethodsFromTheCorrespondingPackage "test that when we remove a class, the class extension methods are all removed from theire corresponding parent Package" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. Smalltalk removeClassNamed: 'NewClass'. self deny: (YPackage includesSelector: #stubMethod ofClass: class). ! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - removing classes' stamp: 'GuillermoPolito 9/5/2012 13:31' prior: 31867744! testRemoveClassUnregisterTheClassFromItsPackage "test that when we remove a class, the class is removed from its parent Package" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. Smalltalk removeClassNamed: 'NewClass'. self deny: (XPackage includesClass: class)! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - removing classes' stamp: 'GuillermoPolito 9/5/2012 13:31' prior: 31868241! testRemoveClassUpdateTheOrganizerMappings "test that when we remove a class, the organizer is updated so that the class is no longer present in the 'classPackageDictionary' dictionary" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. Smalltalk removeClassNamed: 'NewClass'. self deny: (self organizer includesPackageBackPointerForClass: class)! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31841882! testRenameClassUpdateClassDefinedInTheParentPackage "test that when we rename a class, the classes Defined in the parent package includes the new name" "self debug: #testRenameClassUpdateClassDefinedInTheParentPackage" |XPackage class refactoring| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'RPackageOldStubClass' inCategory: 'XXXXX'. class rename: 'RPackageNewStubClass'. self assert: (XPackage includesClassNamed: 'RPackageNewStubClass'). self deny: (XPackage includesClassNamed: 'RPackageOldStubClass').! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31842592! testRenameClassUpdateClassDefinedSelectorsInTheParentPackage "test that when we rename a class, the 'classDefinedSelectors' dictionary of the parent package is updated with the new name. There fore we test that we can correctly access the selector from the package by specifying the right name (the new name)" |XPackage class refactoring| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'RPackageOldStubClass' asSymbol inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class rename: 'RPackageNewStubClass'. self assert: (XPackage includesDefinedSelector: #stubMethod ofClassName: 'RPackageNewStubClass' asSymbol ). self deny: (XPackage includesDefinedSelector: #stubMethod ofClassName: 'RPackageOldStubClass' asSymbol ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31843567! testRenameClassUpdateClassExtensionSelectorsInTheExtendingPackages "test that when we rename a class, the 'classExtensionSelectors' dictionaries of the extending packages are updated with the new name. Therfore we test that we can correctly access the selectors from the package by specifying the right name (the new name)" |XPackage YPackage class refactoring| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'RPackageOldStubClass' asSymbol inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class rename: 'RPackageNewStubClass'. self assert: (YPackage includesExtensionSelector: #stubMethod ofClassName: 'RPackageNewStubClass' asSymbol ). self deny: (YPackage includesExtensionSelector: #stubMethod ofClassName: 'RPackageOldStubClass' asSymbol ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31844609! testRenameClassUpdateMetaclassDefinedSelectorsInTheParentPackage "test that when we rename a class, the 'metaclassDefinedSelectors' dictionary of the parent package is updated with the new name. Ther fore we test that we can correctly access the selector from the package by specifying the right name (the new name)" |XPackage class refactoring| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'RPackageOldStubClass' asSymbol inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClassSideOfClass: class inCategory: 'classic category'. class rename: 'RPackageNewStubClass'. self assert: (XPackage includesDefinedSelector: #stubMethod ofMetaclassName: 'RPackageNewStubClass' asSymbol ). self deny: (XPackage includesDefinedSelector: #stubMethod ofMetaclassName: 'RPackageOldStubClass' asSymbol ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31845613! testRenameClassUpdateMetaclassExtensionSelectorsInTheExtendingPackages "test that when we rename a class, the 'metaclassExtensionSelectors' dictionaries of the extending packages are updated with the new name. Ther fore we test that we can correctly access the selectors from the package by specifying the right name (the new name)" |XPackage YPackage class refactoring| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'RPackageOldStubClass' asSymbol inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClassSideOfClass: class inCategory: '*yyyyy'. class rename: 'RPackageNewStubClass'. self assert: (YPackage includesExtensionSelector: #stubMethod ofMetaclassName: 'RPackageNewStubClass' asSymbol ). self deny: (YPackage includesExtensionSelector: #stubMethod ofMetaclassName: 'RPackageOldStubClass' asSymbol ).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31846684! testRenameClassUpdateOrganizerClassExtendingPackagesMapping "test that when we rename a class, the classExtendingPackages dictionary of the organizer is updated with the new name, so that we can access the packages when specifying the new name" |XPackage YPackage class refactoring| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'RPackageOldStubClass' inCategory: 'XXXXX'. self createMethodNamed: #stubMethod inClass: class inCategory: '*yyyyy'. class rename: 'RPackageNewStubClass'. self assert: ((self organizer extendingPackagesOfClassNamed: 'RPackageNewStubClass' asSymbol) includes: YPackage). self deny: ((self organizer extendingPackagesOfClassNamed: 'RPackageOldStubClass' asSymbol) includes: YPackage).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on classes' stamp: 'GuillermoPolito 9/5/2012 13:28' prior: 31847646! testRenameClassUpdateOrganizerClassPackageMapping "test that when we rename a class, the classPackage dictionary of the organizer is updated with the new name, so that we can access the package when specifying the new name" |XPackage class refactoring| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'RPackageOldStubClass' inCategory: 'XXXXX'. class rename: 'RPackageNewStubClass'. self assert: ((self organizer packageOfClassNamed: 'RPackageNewStubClass' asSymbol) = XPackage). self assert: ((self organizer packageOfClassNamed: 'RPackageOldStubClass' asSymbol) = nil).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'EstebanLorenzano 9/24/2012 16:09' prior: 31848419! testReorganizeClassByAddingExtensionProtocol "test that when we reoganized a class by adding a category, nothing change from RPackage point of vue." |XPackage YPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'newMethod' inClass: class inCategory: 'xxxxx'. class organization addCategory: '*yyyyy' before: nil. self assert: (self organizer includesPackageNamed: #Yyyyy).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:58' prior: 31849059! testReorganizeClassByAddingNewProtocolDoesNothing "test that when we reoganized a class by adding a category, nothing change from RPackage point of vue." |XPackage YPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'newMethod' inClass: class inCategory: 'xxxxx'. class organization addCategory: 'accessing' before: nil. self assert: (XPackage includesClass: class). self assert: (XPackage includesDefinedSelector: #newMethod ofClass: class). self assert: (XPackage extensionMethods size = 0).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'StephaneDucasse 8/29/2013 21:07' prior: 49725275! testReorganizeClassByRemovingClassicCategoryRemoveMethodsFromTheParentPackage "test that when we reoganized a class by removing a classic category (a category not beginning with '*'), the methods from this category are removed from the parent RPackage of the class" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: 'XXXXX'. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class removeProtocol: 'classic category'. self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'StephaneDucasse 8/29/2013 21:07' prior: 49726054! testReorganizeClassByRemovingExtensionCategoryRemoveMethodsFromTheExtendingPackage "test that when we reoganized a class by removing an extension category (a category beginning with '*'), all the methods that were inside are removed from the extending package" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class removeProtocol: '*yyyyy'. self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:56' prior: 31851471! testReorganizeClassByRenamingClassicCategoryToExtensionCategoryMoveAllMethodsFromParentPackageToExtendingPackage "self debug:#testReoganizeClassByRenamingClassicCategoryToExtensionCategoryMoveAllMethodsFromParentPackageToExtendingPackage" "test that when we reoganized a class by renaming a classic category (a category not beginning with '*') to an extension category, all the methods are moved from the parent package of the class to the extending package" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. self createMethodNamed: 'stubMethod2' inClass: class inCategory: 'classic category'. class organization renameCategory: 'classic category' toBe: '*yyyyy'. self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod2 ofClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:56' prior: 31852843! testReorganizeClassByRenamingClassicCategoryToExtensionCategoryMoveMethodsFromParentPackageToExtendingPackage "test that when we reoganized a class by renaming a classic category (a category not beginning with '*') to an extension category, all the methods are moved from the parent package of the class to the extending package" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class organization renameCategory: 'classic category' toBe: '*yyyyy'. self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class)! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:56' prior: 31853834! testReorganizeClassByRenamingExtensionCategoryToAnotherExtensionCategoryAddMethodsToTheNewPackage "test that when we reoganized a class by renaming an extension category (a category beginning with '*') to another extension category, all the methods are moved to the new extendingPackage" |XPackage YPackage ZPackage class| self addXYZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class organization renameCategory: '*yyyyy' toBe: '*zzzzz'. self assert: (ZPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class)! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:56' prior: 31854901! testReorganizeClassByRenamingExtensionCategoryToClassicCategoryMoveAllMethodsFromExtendingPackageToParentPackage "test that when we reoganized a class by renaming an extension category (a category beginning with '*') to a classic category, all the methods are moved from the extendingPackage to the parent package of the class" "self debug: #testReoganizeClassByRenamingExtensionCategoryToClassicCategoryMoveAllMethodsFromExtendingPackageToParentPackage" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. class organization renameCategory: '*yyyyy' toBe: 'classic category'. self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). self assert: (XPackage includesDefinedSelector: #stubMethod ofClass: class). self assert: (XPackage includesDefinedSelector: #stubMethod2 ofClass: class).! ! !RPackageClassesSynchronisationTest methodsFor: 'tests - operations on protocols' stamp: 'GuillermoPolito 9/5/2012 14:56' prior: 31856250! testReorganizeClassByRenamingExtensionCategoryToClassicCategoryMoveMethodsFromExtendingPackageToParentPackage "test that when we reoganized a class by renaming an extension category (a category beginning with '*') to a classic category, all the methods are moved from the extendingPackage to the parent package of the class" |XPackage YPackage class| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class organization renameCategory: '*yyyyy' toBe: 'classic category'. self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: (XPackage includesDefinedSelector: #stubMethod ofClass: class)! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'we are not sure' stamp: 'EstebanLorenzano 10/8/2013 13:09' prior: 74374636! testAddMethodInExtensionCategoryBestMatchingNameAddMethodToTheExtendingPackage "test that when we add a method  in an extension category ( beginning with*) that enlarge a package name (for example *mondrian-accessing for Mondrian), this method is added to the corresponding extending package" | class XPackage YPackage | self addXYCategory. self addXMatchCategory. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'YYYYY'. self createMethodNamed: #newMethod inClass: class inCategory: '*XXXXX-YYYY'. self deny: (YPackage includesDefinedSelector: #newMethod ofClass: class). self assert: (XPackage includesExtensionSelector: #newMethod ofClass: class). self assert: ((class >> #newMethod) packageFromOrganizer: self organizer ) = XPackage! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'we are not sure' stamp: 'GuillermoPolito 9/5/2012 12:51' prior: 31882696! testAddMethodInExtensionCategoryMatchingNameAddMethodToTheExtendingPackage "test that when we add a method  in an extension category ( beginning with*) that enlarge a package name (for example *mondrian-accessing for Mondrian), this method is added to the corresponding extending package" | class XPackage YPackage| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: #newMethod inClass: class inCategory: '*YYYYY-subcategory'. self assert: (YPackage includesExtensionSelector: #newMethod ofClass: class). self deny: (XPackage includesDefinedSelector: #newMethod ofClass: class). self assert: ((class >> #newMethod) packageFromOrganizer: self organizer ) = YPackage! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'testing' stamp: 'GuillermoPolito 9/5/2012 13:03' prior: 31874501! testAddMethodInExtensionCategoryNotExistingCreateANewPackage "test that when we add a method  in an extension category ( beginning with *)that does not refer to an existing categorya new package with the name of this category is added, and that the method is added to this new package" | class firstPackage t| self addXCategory. firstPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: #newMethod inClass: class inCategory: '*SomethingDifferentNothingToDoWithWhatWeHave'. self deny: (class package includesDefinedSelector: #newMethod ofClass: class). self assert: (self organizer includesPackageNamed: #SomethingDifferentNothingToDoWithWhatWeHave).! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'testing' stamp: 'GuillermoPolito 9/5/2012 13:03' prior: 31875371! testAddMethodInExtensionCategoryNotExistingCreateANewPackageAndInstallsMethodInIt "test that when we add a method  in an extension category ( beginning with *)that does not refer to an existing categorya new package with the name of this category is added, and that the method is added to this new package" | class firstPackage t| self addXCategory. firstPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: #newMethod inClass: class inCategory: '*SomethingDifferentNothingToDoWithWhatWeHave'. self deny: (class package includesDefinedSelector: #newMethod ofClass: class). self assert: (self organizer includesPackageNamed: #SomethingDifferentNothingToDoWithWhatWeHave). self assert: ((class >> #newMethod) packageFromOrganizer: self organizer ) equals: (self organizer packageNamed: #SomethingDifferentNothingToDoWithWhatWeHave).! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'we are not sure' stamp: 'GuillermoPolito 9/5/2012 13:04' prior: 31883656! testAddMethodInExtensionCategoryNotRespectingCaseAddMethodToTheExtendingPackage "test that when we add a method  in an extension category ( beginning with *)thae does not match the case of the corresponding package (for example *packagea for PackageA), this method is added to the corresponding extending package" | class firstPackage secondPackage| self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyYyY'. self assert: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) equals: secondPackage.! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'we are not sure' stamp: 'GuillermoPolito 9/5/2012 12:51' prior: 31884676! testAddMethodInExtensionCategoryWithExactMatchAddMethodToTheExtendingPackage "test that when we add a method to a class in an extension category ( beginning with *), this method is added to the corresponding extending package" | class firstPackage secondPackage| self addXYCategory. self addXMatchCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*YYYYY'. self assert: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer) = secondPackage! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:26' prior: 31876446! testModifyMethodByChangingCode "test that when we modify the code of a method, everything work well: NOTHING SHOULD HAPPEN REGARDING THE PACKAGING" | class firstPackage secondPackage| self addXCategory. firstPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class compile: 'stubMethod ^22222222222'. "nothing should change" self assert: (class >> #stubMethod) category = 'classic category'. self assert: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (firstPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = firstPackage.! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:09' prior: 31877394! testRemoveAllExtensionMethodsFromMetaAndInstanceSideUpdateOrganizerExtensionsMapping "test that In a class (from the meta and the instance side ), when we remove all the method extended by the same external package, the class get unregistered from the classExtendingPackagesMapping of the organizer " |XPackage class YPackage| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. self createMethodNamed: 'stubMethod2' inClass: class theMetaClass inCategory: '*yyyyy'. class removeSelector: #stubMethod. class theMetaClass removeSelector: #stubMethod2. "there should be no differences made between class and metaClass:" self deny: ((self organizer extendingPackagesOf: class) includes: YPackage). self deny: ((self organizer extendingPackagesOf: class theMetaClass) includes: YPackage). ! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:09' prior: 31878545! testRemoveAllExtensionMethodsRemoveTheClassFromExtendedClasses "test that In a class, when we remove all the method extended by the same external package, the class get unregistered from the extended classes of the external package " |XPackage class YPackage| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). class removeSelector: #stubMethod. class removeSelector: #stubMethod2. self deny: (YPackage extendsClass: class). self deny: (YPackage extendsClass: class classSide).! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:10' prior: 31879625! testRemoveExtensionMethodDoesNotRemoveExtendingPackage "test that when we remove a method that is an extension from an external package, the package is not removed from the the class extending packages if another extension still exist" |XPackage class YPackage| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). "If we only remove one of the extension methods, the package should still be extending the class." class removeSelector: #stubMethod. self assert: (YPackage extendsClass: class). self assert: (YPackage extendsClass: class classSide).! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:11' prior: 31880774! testRemoveExtensionMethodRemoveMethodFromItsPackage "test that when we remove a method that is an extension from an external package, the method is removed from this package" |XPackage class YPackage| self addXYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class removeSelector: #stubMethod. self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). ! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'GuillermoPolito 5/29/2012 12:31' prior: 31937459! addXCategory Smalltalk globals organization addCategory: 'XXXXX'.! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'GuillermoPolito 9/5/2012 11:18' prior: 31937626! addXMatchCategory Smalltalk globals organization addCategory: 'XXXXX-YYYY'.! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'StephaneDucasse 4/29/2011 21:44' prior: 31937804! addXYCategory self addXCategory. self addYCategory. ! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'StephaneDucasse 4/29/2011 21:50' prior: 31937964! addXYZCategory self addXCategory. self addYCategory. self addZCategory. ! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'StephaneDucasse 4/24/2011 23:26' prior: 31938145! addYCategory Smalltalk globals organization addCategory: 'YYYYY'. ! ! !RPackageMCSynchronisationTest methodsFor: 'utilities' stamp: 'StephaneDucasse 4/29/2011 21:44' prior: 31938318! addZCategory Smalltalk globals organization addCategory: 'ZZZZZ'. ! ! !RPackageMCSynchronisationTest methodsFor: 'setup' stamp: 'GuillermoPolito 9/5/2012 11:20' prior: 31926751! cleanClassesPackagesAndCategories |mCPackage| Smalltalk removeClassNamed: 'NewClass'. Smalltalk removeClassNamed: 'RPackageNewStubClass'. Smalltalk removeClassNamed: 'RPackageOldStubClass'. Smalltalk removeClassNamed: 'Foo'. Smalltalk removeClassNamed: 'FooOther'. Smalltalk removeClassNamed: 'NewTrait'. Smalltalk removeClassNamed: 'ClassInYPackage'. Smalltalk removeClassNamed: 'ClassInZPackage'. Smalltalk organization removeCategory: 'Zork'. Smalltalk organization removeCategory: 'XXXXX'. Smalltalk organization removeCategory: 'XXXXX-YYYY'. Smalltalk organization removeCategory: 'XXXX'. Smalltalk organization removeCategory: 'YYYYY'. Smalltalk organization removeCategory: 'ZZZZZ'. Smalltalk organization removeCategory: 'FooPackage-Core'. Smalltalk organization removeCategory: 'FooPackage-Other'. Smalltalk organization removeCategory: 'FooPackage'. Smalltalk organization removeCategory: 'OriginalCategory'. Smalltalk organization removeCategory: 'NewCategoryName'. Smalltalk organization removeCategory: 'Y'. mCPackage := (self allManagers detect: [:each | each packageName = 'OriginalCategory'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'XXXXX'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'XXXX'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'YYYYY'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'YYYY'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'Yyyyy'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'YyYyY'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'Y'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'ZZZZZ'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'Zzzzz'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'FooPackage-Core'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'FooPackage-Other'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'FooPackage'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. mCPackage := (self allManagers detect: [:each | each packageName = 'Zork'] ifNone: [nil]) . mCPackage ifNotNil: [mCPackage unregister]. ! ! !RPackageMCSynchronisationTest methodsFor: 'private' stamp: 'cyrille.delaunay 11/25/2010 13:17' prior: 31944495! createMethodNamed: methodName inClass: aClass inCategory: aCategoryName ^ aClass compile: (methodName, ' ^nil') classified: aCategoryName.! ! !RPackageMCSynchronisationTest methodsFor: 'private' stamp: 'cyrille.delaunay 11/25/2010 13:17' prior: 31944738! createMethodNamed: methodName inClassSideOfClass: aClass inCategory: aCategoryName ^ aClass classSide compile: (methodName, ' ^nil') classified: aCategoryName.! ! !RPackageMCSynchronisationTest methodsFor: 'private' stamp: 'StephaneDucasse 7/29/2010 23:46' prior: 31945000! createNewClassNamed: aName | cls | cls := Object subclass: aName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'RPackageTest'. ^ cls! ! !RPackageMCSynchronisationTest methodsFor: 'private' stamp: 'cyrille.delaunay 11/22/2010 10:56' prior: 31945281! createNewClassNamed: aName inCategory: aCategoryName | cls | cls := Object subclass: aName asSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: aCategoryName. ^ cls! ! !RPackageMCSynchronisationTest methodsFor: 'private' stamp: 'cyrille.delaunay 11/26/2010 15:31' prior: 31945596! createNewTraitNamed: aName inCategory: aCategoryName | trait | trait := Trait named: aName asSymbol uses: {} category: aCategoryName. ^ trait! ! !RPackageMCSynchronisationTest methodsFor: 'accessing' stamp: 'RPackage 1/20/2011 13:17' prior: 31926174! emptyOrganizer ^ emptyOrganizer! ! !RPackageMCSynchronisationTest methodsFor: 'announcer handling' stamp: 'EstebanLorenzano 7/27/2012 17:57' prior: 31926321! initializeAnnouncers super initializeAnnouncers. oldAnnouncer := MCWorkingCopy announcer. MCWorkingCopy announcer: announcerForTest.! ! !RPackageMCSynchronisationTest methodsFor: 'announcer handling' stamp: 'EstebanLorenzano 7/27/2012 17:50' prior: 31926570! restoreAnnouncers super restoreAnnouncers. MCWorkingCopy announcer: oldAnnouncer.! ! !RPackageMCSynchronisationTest methodsFor: 'setup' stamp: 'EstebanLorenzano 7/27/2012 20:24' prior: 31929923! setUp super setUp. emptyOrganizer := self organizer debuggingName: 'MCSynchronisation Package Organizer'; yourself. emptyOrganizer registerPackage: (self packageClass named: 'as yet unclassified'). Author fullName ifNil: [ Author fullName: 'Tester' ].! ! !RPackageMCSynchronisationTest methodsFor: 'setup' stamp: 'EstebanLorenzano 7/27/2012 18:01' prior: 31930284! tearDown MCWorkingCopy removeDependent: self emptyOrganizer. self cleanClassesPackagesAndCategories. super tearDown.! ! !RPackageMCSynchronisationTest methodsFor: 'tests' stamp: 'StephaneDucasse 6/3/2012 22:50' prior: 31930501! testBasicImportSystemClass "self debug: #testBasicImportSystemClass" | fooClass fooPackage | fooClass := Object subclass: #Foo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooPackage'. fooClass compileSilently: 'foo ^ 1' classified: 'foo'. fooClass compileSilently: 'fooBar ^ 2' classified: 'foo'. fooClass compileSilently: 'fooFooBar ^ 3' classified: 'foo'. fooClass class compileSilently: 'fooClassSide ^ 1' classified: 'foo'. fooClass compileSilently: 'zork ^ 4' classified: '*zork'. fooPackage := self packageClass named: #FooPackage. fooPackage importCategory. self assert: (fooPackage includesDefinedSelector: #foo ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooBar ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooFooBar ofClass: fooClass). self deny: (fooPackage includesDefinedSelector: #zork ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooClassSide ofClass: fooClass class).! ! !RPackageMCSynchronisationTest methodsFor: 'tests' stamp: 'GuillermoPolito 5/26/2012 23:09' prior: 31931634! testCategoryMatching self assert: (self organizer category: 'Compression-Archives' matches: 'Compression'). self deny: (self organizer category: 'Compression' matches: 'Compression-Archives'). self assert: (self organizer category: 'Compression' matches: 'Compression'). self assert: (self organizer category: 'Compression-Arh' matches: 'Compression'). self deny: (self organizer category: 'XXXX' matches: 'Compression-Archives').! ! !RPackageMCSynchronisationTest methodsFor: 'we are not sure' stamp: 'StephaneDucasse 6/3/2012 22:50' prior: 31938639! testImportSystallManagershSubCategoryAndAnotherCategory "self debug: #testImportSystemClassWithSubCategoryAndAnotherCategory" "indeed the user may have created a class in the category Foo-Core, and after created a package only named Foo. The classes in category Foo-Core should be added to Foo. But some other packages and categories starting with Foo may exist." | fooClass fooPackage fooClass2| fooClass := self createNewClassNamed: 'Foo' inCategory: 'FooPackage-Core'. fooClass compileSilently: 'foo ^ 1' classified: 'foo'. fooClass compileSilently: 'fooBar ^ 2' classified: 'foo'. fooClass compileSilently: 'fooFooBar ^ 3' classified: 'foo'. fooClass class compileSilently: 'fooClassSide ^ 1' classified: 'foo'. fooClass compileSilently: 'zork ^ 4' classified: '*zork'. fooClass2 := self createNewClassNamed: 'FooOther' inCategory: 'FooPackage-Other'. fooClass2 compileSilently: 'fooOther ^ 1' classified: 'what s up'. fooClass2 compileSilently: 'fooBarOther ^ 2' classified: 'dr'. fooClass2 class compileSilently: 'fooOtherClassSide ^ 1' classified: 'lovely carots'. fooClass2 compileSilently: 'zorkZork ^ 4' classified: '*zorkzork'. fooPackage := self packageClass named: #FooPackage. fooPackage importCategory. self assert: (fooPackage definedClasses size = 2). self assert: (fooPackage includesDefinedSelector: #foo ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooBar ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooFooBar ofClass: fooClass). self deny: (fooPackage includesDefinedSelector: #zork ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooClassSide ofClass: fooClass class). self assert: (fooPackage includesDefinedSelector: #fooOther ofClass: fooClass2). self assert: (fooPackage includesDefinedSelector: #fooBarOther ofClass: fooClass2). self deny: (fooPackage includesDefinedSelector: #zorkZork ofClass: fooClass2). self assert: (fooPackage includesDefinedSelector: #fooOtherClassSide ofClass: fooClass2 class).! ! !RPackageMCSynchronisationTest methodsFor: 'we are not sure' stamp: 'StephaneDucasse 6/3/2012 22:50' prior: 31940787! testImportSystemClassWithSubCategory "self debug: #testImportSystemClassWithSubCategory" "indeed the user may have created a class in the category Foo-Core, and after created a package only named Foo. The classes in category Foo-Core should be added to Foo. But some other packages and categories starting with Foo may exist." | fooClass fooPackage | fooClass := Object subclass: #Foo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooPackage-Core'. fooClass compileSilently: 'foo ^ 1' classified: 'foo'. fooClass compileSilently: 'fooBar ^ 2' classified: 'foo'. fooClass compileSilently: 'fooFooBar ^ 3' classified: 'foo'. fooClass class compileSilently: 'fooClassSide ^ 1' classified: 'foo'. fooClass compileSilently: 'zork ^ 4' classified: '*zork'. fooPackage := self packageClass named: #FooPackage. fooPackage importCategory. self assert: (fooPackage includesDefinedSelector: #foo ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooBar ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooFooBar ofClass: fooClass). self deny: (fooPackage includesDefinedSelector: #zork ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooClassSide ofClass: fooClass class).! ! !RPackageMCSynchronisationTest methodsFor: 'we are not sure' stamp: 'StephaneDucasse 6/3/2012 22:50' prior: 31942195! testImportSystemClassWithSubCategoryAndAnotherCategory "self debug: #testImportSystemClassWithSubCategoryAndAnotherCategory" "indeed the user may have created a class in the category Foo-Core, and after created a package only named Foo. The classes in category Foo-Core should be added to Foo. But some other packages and categories starting with Foo may exist." | fooClass fooPackage fooClass2| fooClass := Object subclass: #Foo instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooPackage-Core'. fooClass compileSilently: 'foo ^ 1' classified: 'foo'. fooClass compileSilently: 'fooBar ^ 2' classified: 'foo'. fooClass compileSilently: 'fooFooBar ^ 3' classified: 'foo'. fooClass class compileSilently: 'fooClassSide ^ 1' classified: 'foo'. fooClass compileSilently: 'zork ^ 4' classified: '*zork'. fooClass2 := Object subclass: #FooOther instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooPackage-Other'. fooClass2 compileSilently: 'fooOther ^ 1' classified: 'what s up'. fooClass2 compileSilently: 'fooBarOther ^ 2' classified: 'dr'. fooClass2 class compileSilently: 'fooOtherClassSide ^ 1' classified: 'lovely carots'. fooClass2 compileSilently: 'zorkZork ^ 4' classified: '*zorkzork'. fooPackage := self packageClass named: #FooPackage. fooPackage importCategory. self assert: (fooPackage definedClasses size = 2). self assert: (fooPackage includesDefinedSelector: #foo ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooBar ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooFooBar ofClass: fooClass). self deny: (fooPackage includesDefinedSelector: #zork ofClass: fooClass). self assert: (fooPackage includesDefinedSelector: #fooClassSide ofClass: fooClass class). self assert: (fooPackage includesDefinedSelector: #fooOther ofClass: fooClass2). self assert: (fooPackage includesDefinedSelector: #fooBarOther ofClass: fooClass2). self deny: (fooPackage includesDefinedSelector: #zorkZork ofClass: fooClass2). self assert: (fooPackage includesDefinedSelector: #fooOtherClassSide ofClass: fooClass2 class).! ! !RPackageMCSynchronisationTest methodsFor: 'to move to a simple RPackage test case' stamp: 'GuillermoPolito 9/5/2012 14:02' prior: 31933149! testNotRepackagedAnnouncementWhenModifyMethodByMovingInSameExtensionCategory | ann class firstPackage secondPackage| ann := nil. SystemAnnouncer uniqueInstance on: MethodRepackaged do: [ :a | ann := a ]. self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. self assert: ann isNil. class organization classify: #stubMethod under: '*yyyyy-suncategory'. self assert: ann isNil.! ! !RPackageMCSynchronisationTest methodsFor: 'to move to a simple RPackage test case' stamp: 'GuillermoPolito 9/5/2012 14:03' prior: 31933896! testNotRepackagedAnnouncementWhenMovingClassicCategories | ann class firstPackage secondPackage| ann := nil. SystemAnnouncer uniqueInstance on: MethodRepackaged do: [ :a | ann := a ]. self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic'. self assert: ann isNil. class organization classify: #stubMethod under: 'another classic one'. self assert: ann isNil.! ! !RPackageMCSynchronisationTest methodsFor: 'to move to a simple RPackage test case' stamp: 'GuillermoPolito 8/17/2012 17:38' prior: 31934625! testRepackagedAnnouncementWhenModifyMethodByMovingFromClassicCategoryToExtensionCategory | ann class firstPackage secondPackage| ann := nil. SystemAnnouncer uniqueInstance on: MethodRepackaged do: [ :a | ann := a ]. self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class organization classify: #stubMethod under: '*yyyyy'. self assert: ann notNil. self assert: ann methodRepackaged selector equals: #stubMethod. self assert: ann oldPackage equals: firstPackage. self assert: ann newPackage equals: secondPackage. ann := nil. class organization classify: #stubMethod under: '*yyyyy-suncategory'. self assert: ann isNil.! ! !RPackageMCSynchronisationTest methodsFor: 'to move to a simple RPackage test case' stamp: 'GuillermoPolito 8/17/2012 17:43' prior: 31935638! testRepackagedAnnouncementWhenModifyMethodByMovingFromDifferentExtensionCategories | ann class firstPackage secondPackage thirdPackage | ann := nil. SystemAnnouncer uniqueInstance on: MethodRepackaged do: [ :a | ann := a ]. self addXYZCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. thirdPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class organization classify: #stubMethod under: '*zzzzz'. self assert: ann notNil. self assert: ann methodRepackaged selector equals: #stubMethod. self assert: ann oldPackage equals: secondPackage. self assert: ann newPackage equals: thirdPackage.! ! !RPackageMCSynchronisationTest methodsFor: 'to move to a simple RPackage test case' stamp: 'GuillermoPolito 8/17/2012 17:40' prior: 31936591! testRepackagedAnnouncementWhenModifyMethodByMovingFromExtensionCategoryToClassicCategory | ann class firstPackage secondPackage| ann := nil. SystemAnnouncer uniqueInstance on: MethodRepackaged do: [ :a | ann := a ]. self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class organization classify: #stubMethod under: 'classic one'. self assert: ann notNil. self assert: ann methodRepackaged selector equals: #stubMethod. self assert: ann oldPackage equals: secondPackage. self assert: ann newPackage equals: firstPackage.! ! !RPackageMCSynchronisationTest methodsFor: 'tests' stamp: 'GuillermoPolito 5/26/2012 23:50' prior: 31932169! testisDefinedAsPackageOrSubPackageInMC "test whether a given category is defined as a MC package or whether it is defined as top part of package" "self debug: #testisDefinedAsSubPackageInMC" "self debug: #testisDefinedAsPackageOrSubPackageInMC" self assert: (self organizer isDefinedAsPackageOrSubPackageInMC: #'Compression'). self deny: (self organizer isDefinedAsPackageOrSubPackageInMC: #'Compression-Archives'). "Indeed compression-archives is a category but not a MC package" self assert: (self organizer isDefinedAsPackageOrSubPackageInMC: #'Collections'). "#Collection is not defined as a package but as a package #'Collections-Unordered'" self assert: (self organizer isDefinedAsPackageOrSubPackageInMC: #'Collections-Unordered'). self deny: (self organizer isDefinedAsPackageOrSubPackageInMC: #'Collections-Unordered-Test').! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 15:04' prior: 31946064! testAddMethodInClassicCategoryAddMethodToTheParentPackageOfItsClass "test that when we add a method to a class in a classic category (not beginning with *), this method is added to the parent package of the class" |tmpPackage class| self addXCategory. tmpPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. self assert: (class package includesDefinedSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) equals: class package.! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 12:47' prior: 31946840! testAddMethodInClassicCategoryAddMethodToTheParentPackageOfItsTrait "test that when we add a method to a trait in a classic category (*not beginning with *), this method is added to the parent package of the class" |tmpPackage trait| self addXCategory. tmpPackage := self organizer packageNamed: #XXXXX. trait := self createNewTraitNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'classic category'. self assert: (trait package includesDefinedSelector: #stubMethod ofClass: trait). self assert: ((trait >> #stubMethod) packageFromOrganizer: self organizer ) = trait package! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 15:00' prior: 31947609! testModifyMethodByMovingFromClassicCategoryToClassicCategoryDoesNothing "test that when we move a method from a classic category (not begining with *) to another classic category , the packaging keeps the same" | class firstPackage secondPackage| self addXCategory. firstPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. "this we do" class organization classify: #stubMethod under: 'new category'. "this we check" self assert: (class >> #stubMethod) category = 'new category'. self assert: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (firstPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = firstPackage! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 15:00' prior: 31948632! testModifyMethodByMovingFromClassicCategoryToExtensionCategoryMoveItFromClassPackageToExtendingPackage "test that when we move a method from a classic category (not begining with *) to an extension category , the method is moved from the parent package of the class to the extending package" | class firstPackage secondPackage| self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class organization classify: #stubMethod under: '*yyyyy'. self deny: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self assert: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = secondPackage. class organization classify: #stubMethod under: '*yyyyy-subcategory'. self deny: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self assert: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = secondPackage.! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 15:00' prior: 31950028! testModifyMethodByMovingFromExtensionCategoryToClassicCategoryMoveItFromExtendingPackageToClassPackage "test that when we move a method from an extension category ( begining with *) to a classic category , the method is moved from the extending package to the parent package of the class" | class firstPackage secondPackage| self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. class organization classify: #stubMethod under: 'classic category'. self assert: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = firstPackage.! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 15:00' prior: 31951089! testModifyMethodByMovingFromExtensionCategoryToExtensionCategoryMoveItFromExtendingPackageToSecondExtendingPackage "test that when we move a method from an extension category ( begining with *) to another extending package , the method is moved from the extending package to the other extending package" | class XPackage YPackage ZPackage| self addXYZCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. ZPackage := self organizer packageNamed: #ZZZZZ. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: #newMethod inClass: class inCategory: '*yyyyy'. class organization classify: #newMethod under: '*zzzzz'. self deny: (XPackage includesDefinedSelector: #newMethod ofClass: class). self deny: (YPackage includesExtensionSelector: #newMethod ofClass: class). self assert: (ZPackage includesExtensionSelector: #newMethod ofClass: class). self assert: ((class >> #newMethod) packageFromOrganizer: self organizer ) = ZPackage.! ! !RPackageMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:27' prior: 31952253! testRemoveMethodRemoveMethodFromItsPackage "test that when we remove a method, the method is remod from the package in which the method is defined" |XPackage class| self addXCategory. XPackage := self organizer packageNamed: #XXXXX. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic category'. class removeSelector: #stubMethod. self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (XPackage includesExtensionSelector: #stubMethod ofClass: class). self deny: (XPackage includesSelector: #stubMethod ofClass: class).! ! !RPackageMonticelloSynchronisationTest methodsFor: 'tests - operations on MCPackages' stamp: 'GuillermoPolito 9/5/2012 11:34' prior: 31953237! testAddMCPackageCreatesAPackage "test that when we create a MCPackage, a corresponding package is created" MCWorkingCopy forPackage: (MCPackage new name: #Zork). self assert: (self organizer includesPackageNamed: #Zork). ! ! !RPackageMonticelloSynchronisationTest methodsFor: 'tests - operations on MCPackages' stamp: 'GuillermoPolito 9/5/2012 11:34' prior: 31953605! testAddMCPackageForCategoryAlreadyExistingDoesNotCreateAPackage "test that when we create a MCPackage and that a category of this name already exists, no package is created" "self debug: #testAddMCPackageForCategoryAlreadyExistingDoesNotCreateAPackage" "self run: #testAddMCPackageForCategoryAlreadyExistingDoesNotCreateAPackage" |tmpPackage| Smalltalk globals organization addCategory: 'Zork'. tmpPackage := self organizer packageNamed: #Zork. MCWorkingCopy forPackage: (MCPackage new name: #Zork). self assert: tmpPackage = (self organizer packageNamed: #Zork). ! ! !RPackageMonticelloSynchronisationTest methodsFor: 'tests - operations on MCPackages' stamp: 'EstebanLorenzano 9/24/2012 16:02' prior: 31954327! testUnloadMCPackageRemovesRPackage "test that when we remove a MC Package, the corresponding RPackage is removed from the organizer" |XPackage class| MCWorkingCopy forPackage: (MCPackage new name: 'XXXXX'). (self allManagers detect: [:each | each packageName = 'XXXXX']) unload. self flag: #fixme."See comment in RPackageOrganizer>>update:" self deny: (self organizer includesPackageNamed: #XXXXX).! ! !RPackageMonticelloSynchronisationTest methodsFor: 'tests - operations on MCPackages' stamp: 'GuillermoPolito 9/5/2012 13:12' prior: 31954865! testUnregisterMCPackageKeepsRPackage "test that when we remove a MC Package, the corresponding RPackage is removed from the organizer" |XPackage class| MCWorkingCopy forPackage: (MCPackage new name: 'XXXXX'). (self allManagers detect: [:each | each packageName = 'XXXXX']) unregister. self assert: (self organizer includesPackageNamed: #XXXXX).! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 12:38' prior: 32074349! testAddMethodByUsingATraitDoesNotAddTheMethodToThePackage "test that when a method is added to a class bu using a trait, this method is not imported in the parent package of the class" "self debug: #testAddMethodByUsingATraitDoesNotAddTheMethodToThePackage" |XPackage YPackage class trait| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. trait := self createNewTraitNamed: 'NewTrait' inCategory: 'YYYYY'. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'trait category'. self assert: (XPackage methods isEmpty ). self deny: (YPackage methods isEmpty ). class addToComposition: trait. self assert: (YPackage includesDefinedSelector: #stubMethod ofClass: trait). self assert: (XPackage methods isEmpty). ! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on traits' stamp: 'EstebanLorenzano 10/8/2013 13:10' prior: 74388331! testAddTraitAddItIntoPackageBestMatchName "self debug: #testAddTraitAddItIntoPackageBestMatchName" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #'XXXXX'. class := self createNewTraitNamed: 'NewClass' inCategory: 'XXXXX-YYYY'. self assert: (tmpPackage definesClass: class). self assert: tmpPackage equals: class package.! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on traits' stamp: 'GuillermoPolito 9/5/2012 12:42' prior: 32079634! testAddTraitAddItIntoPackageExactName "self debug: #testAddTraitAddItIntoPackageExactName" |tmpPackage class| self addXCategory. self addXMatchCategory. tmpPackage := self organizer packageNamed: #XXXXX. class := self createNewTraitNamed: 'NewClass' inCategory: 'XXXXX'. self assert: (tmpPackage definesClass: class). self assert: tmpPackage equals: class package.! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on traits' stamp: 'GuillermoPolito 9/5/2012 12:44' prior: 32080132! testAddTraitUpdateTheOrganizerMappings "test that when we add a Trait, the organizer 'classPackageMapping' dictionary is updated, so that the trait is linked to its package and so that we can access its owning package" "self debug: #testAddClassUpdateTheOrganizer" |tmpPackage class| self addXCategory. tmpPackage := self organizer packageNamed: #XXXXX. class := self createNewTraitNamed: 'NewClass' inCategory: 'XXXXX'. self assert: class package equals: tmpPackage! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:24' prior: 32075368! testRemoveMethodComingFromTraitDoesNotRemoveMethodFromTraitPackage "test that when we remove a class method coming from a trait, the method is not removed from the parent package of the trait" |XPackage YPackage class trait| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. trait := self createNewTraitNamed: 'NewTrait' inCategory: 'YYYYY'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'classic protocol'. class setTraitComposition: trait asTraitComposition. class removeSelector: #stubMethod. self assert: (YPackage includesDefinedSelector: #stubMethod ofClass: trait). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class). ! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:26' prior: 32076335! testRemoveTraitMethod "test that when we remove a method from a trait used by a class, the method is removed from the trait package normally" |XPackage YPackage class trait| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. trait := self createNewTraitNamed: 'NewTrait' inCategory: 'YYYYY'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'classic protocol'. class setTraitComposition: trait asTraitComposition. trait removeSelector: #stubMethod. self deny: (YPackage includesSelector: #stubMethod ofClass: trait). self deny: (XPackage includesSelector: #stubMethod ofClass: class).! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'MartinDias 2/11/2013 14:21' prior: 32077226! testRemoveTraitMethodOverridenByClassDoesRemoveMethodFromClassPackage "test that when we remove a class method overriding the one from a trait, the method is removed from the class package" |XPackage YPackage class trait| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. trait := self createNewTraitNamed: 'NewTrait' inCategory: 'YYYYY'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'classic protocol'. class setTraitComposition: trait asTraitComposition. self createMethodNamed: 'stubMethod' inClass: class inCategory: 'classic protocol'. class removeSelector: #stubMethod. self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class). ! ! !RPackageTraitSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'GuillermoPolito 9/5/2012 14:25' prior: 32078198! testTraitCompositionMethodsArePackagedWithTheirTraits "test that when we remove a class method coming from a trait, the method is not removed from the parent package of the trait" |XPackage YPackage class trait| self addXCategory. self addYCategory. XPackage := self organizer packageNamed: #XXXXX. YPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. trait := self createNewTraitNamed: 'NewTrait' inCategory: 'YYYYY'. self createMethodNamed: 'stubMethod' inClass: trait inCategory: 'classic protocol'. class setTraitComposition: trait asTraitComposition. self assert: (YPackage includesDefinedSelector: #stubMethod ofClass: trait). self deny: (XPackage includesDefinedSelector: #stubMethod ofClass: class).! ! !SimpleHierarchicalListMorph commentStamp: 'MarcusDenker 12/12/2009 07:36' prior: 78768584! Display a hierarchical list of items. Each item should be wrapped with a ListItemWrapper. For a simple example, look at submorphsExample. For beefier examples, look at ObjectExplorer or FileList.! !CornerRounder commentStamp: '' prior: 78768845! This class is a quick hack to support rounded corners in morphic. Rather than produce rounded rectangles, it tweaks the display of corners. Rather than work for any radius, it only supports a radius of 6. Rather than work for any border width, it only supports widths 0, 1 and 2. The corners, while apparently transparent, still behave opaquely to mouse clicks. Worse than this, the approach relies on the ability to extract underlying bits from the canvas prior to display. This ran afoul of top-down display, it seems, in SystemWindow spawnReframeHandle: (qv). It will also make a postscript printer very unhappy. But, hey, it's cute.! !MockContainer commentStamp: '' prior: 78769549! I'm only a fake container, since in some cases to build a context we use the wraped model, and build a full container isn't so simple... ! !MockContainer class methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/29/2013 15:23' prior: 36681937! for: model ^ self new model: model; yourself.! ! !MockContainer methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/29/2013 15:21' prior: 36682072! model ^ model.! ! !MockContainer methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/29/2013 15:21' prior: 36682170! model: anObject model := anObject! ! !TransferMorph commentStamp: 'nk 6/16/2003 16:52' prior: 78769755! This is a Morph that is used to visually indicate the progress of a drag operation, and also as a container for various bits of drag state information. It polls the shift state in its step method to update its copy state (shift pressed = should copy). And if you hit the Escape key while dragging, it aborts the drag operation.! !SugsMockContext commentStamp: '' prior: 78770149! I'm a mock context with lot of stuff hardcoded. I'm used in the tests to make easier the configuration for detecting diferents context.! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 6/12/2013 13:53' prior: 41662619! assigmentContext ^ self new selectorToUse: #withAssigment; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 10:59' prior: 35727027! classContext ^ self new selectorToUse: #withClass; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 13:59' prior: 35727187! classVariableContext ^ self new selectorToUse: #withClassVariable; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 15:47' prior: 35727364! for: aClass ^self new selectedClass: aClass! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 10:47' prior: 35727510! for: aClass selectedVariable: aVariableName ^self new selectedClass: aClass; selectedVariable: aVariableName.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:09' prior: 35727724! instVarContext ^ self new selectorToUse: #withInstanceVar; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 17:39' prior: 35727892! literalContext ^ self new selectorToUse: #withLiteral; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:07' prior: 35728056! mesageContext ^ self new selectorToUse: #withMesage; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/24/2013 14:38' prior: 35728218! methodClassContext ^self new selectedClass: self; selectorToUse: #methodClassContext ! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:04' prior: 35728408! methodContext ^ self new selectorToUse: #withMethod; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 17:39' prior: 35728570! selfContext ^ self new selectorToUse: #withSelf; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:17' prior: 35728728! sourceContext ^ self new selectorToUse: #withSourceContext; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/19/2013 18:01' prior: 35728897! superContext ^ self new selectorToUse: #withSuper; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/22/2013 14:07' prior: 35729057! tempVarContext ^ self new selectorToUse: #withTemporaryVar; yourself.! ! !SugsMockContext class methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 4/23/2013 18:00' prior: 35729226! withMessageName: theName ^ self new message: theName; yourself.! ! !SugsMockContext class methodsFor: 'initialization' stamp: 'GiselaDecuzzi 5/15/2013 14:44' prior: 38360270! withNode: aNode ^self new selectedNode: aNode.! ! !SugsMockContext methodsFor: 'refactoring' stamp: 'GiselaDecuzzi 5/2/2013 15:36' prior: 36688175! browsedEnvironment self subclassResponsibility .! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/19/2013 17:45' prior: 35729378! code ^ self selectedMethod sourceCode! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/12/2013 13:56' prior: 41662787! interval: selector selector = #withLiteral ifTrue:[^ 18 to: 17]. selector = #withSelf ifTrue:[^ 13 to: 13]. selector = #withSuper ifTrue:[^ 13 to: 13]. selector = #withClass ifTrue:[^ 15 to: 16]. selector = #withClassVariable ifTrue:[^ (27 to: 26)]. selector = #withMethod ifTrue:[^ 6 to: 5]. selector = #withMesage ifTrue:[^ 21 to: 23]. selector = #withClassVariable ifTrue:[^ 15 to: 16]. selector = #withTemporaryVar ifTrue:[^ 63 to: 62]. selector = #withInstanceVar ifTrue:[^ 18 to: 30]. selector = #withSourceContext ifTrue:[^ 39 to: 68]. selector = #withAssigment ifTrue:[^ 26 to: 35]. ^selectedInterval ! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 18:00' prior: 35730164! message: theName ^ message:= theName.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:42' prior: 35730289! selectedClass ^selectedClass ifNil: [self class] ifNotNil:[selectedClass].! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:41' prior: 35730451! selectedClass: aClass selectedClass := aClass.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/19/2013 17:56' prior: 35730585! selectedInterval ^self interval: self selectorToUse ! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 15:45' prior: 35730725! selectedInterval: interval selectedInterval := interval.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 5/15/2013 14:37' prior: 38360421! selectedMessageName ^message ifNil:[super selectedMessageName] ifNotNil: [ message ]! ! !SugsMockContext methodsFor: 'api-context' stamp: 'MarcusDenker 12/2/2013 14:45' prior: 78351073! selectedMethod ^selectorToUse ifNotNil: [self selectedClass compiledMethodAt: selectorToUse ifAbsent: [self selectedClass class methodDict at: selectorToUse]] ifNil:[nil].! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:43' prior: 35731315! selectedVariable: aVariableName. selectedVariable := aVariableName.! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/23/2013 10:44' prior: 35731470! selectedVariableName ^selectedVariable ifNil: [ super selectedVariableName ] ifNotNil: [selectedVariable]! ! !SugsMockContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/19/2013 17:38' prior: 35731663! selectorToUse ^ selectorToUse! ! !SugsMockContext methodsFor: 'accessing' stamp: 'GiselaDecuzzi 4/19/2013 17:38' prior: 35731778! selectorToUse: anObject selectorToUse := anObject! ! !SugsMockContext methodsFor: 'api-context' stamp: 'GiselaDecuzzi 4/26/2013 16:28' prior: 36688311! sourceTextArea ^ PluggableTextMorph new.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 6/12/2013 13:53' prior: 41663497! withAssigment |temp| temp := 10. ^temp! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 10:59' prior: 35731911! withClass SugsMockContext .! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:00' prior: 35732022! withClassVariable ClassVariable! ! !SugsMockContext methodsFor: 'instance creation' stamp: 'GiselaDecuzzi 5/22/2013 15:24' prior: 38982052! withInstanceVar anInstanceVar.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 16:49' prior: 35732261! withLiteral 'hola' with: 19.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:06' prior: 35732373! withMesage self withClassVariable ! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:05' prior: 35732491! withMethod ! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 17:39' prior: 35732585! withSelf self with: 19.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:17' prior: 35732692! withSourceContext SugsMockContext . 20+10. OrderedCollection new.! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/19/2013 18:00' prior: 35732843! withSuper super! ! !SugsMockContext methodsFor: 'testing' stamp: 'GiselaDecuzzi 4/22/2013 14:08' prior: 35732942! withTemporaryVar |aLocalVar| aLocalVar := 'bonjour'. aLocalVar asString.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:21' prior: 36710815! testContextForNautilusItsANautilusContext | nautilus | nautilus := NautilusUI new. self assert: (SugsAbstractContext contextFor: nautilus) class equals: SugsNautilusContext.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'MarcusDenker 7/26/2013 15:13' prior: 46216155! testDebuggerIsAValidContext | debugger | debugger := Smalltalk tools debugger new. self assert: (SugsAbstractContext contextFor: debugger) class equals: SugsDebuggerContext .! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:58' prior: 36711613! testSmalltalkEditorIsANotValidContext | stEditor | stEditor := SmalltalkEditor new. self should: [SugsAbstractContext contextFor: stEditor] raise: Error description: 'Not defined context for ', stEditor asString.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/15/2013 10:57' prior: 38357508! testTetModelIsAValidContext | textModel | textModel := TextModel new. self assert: (SugsAbstractContext contextFor: textModel) class equals: SugsMessageBrowserContext.! ! !SugsContextTest methodsFor: 'valid-context' stamp: 'GiselaDecuzzi 5/2/2013 14:21' prior: 36712205! testWorkspaceIsNotAValidContext | st | st := Workspace new. self should: [SugsAbstractContext contextFor: st] raise: Error description: 'Not defined context for ', st asString! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'MarcusDenker 9/20/2013 15:02' prior: 69088932! testFindBestNodeForClassItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classContext. self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es de clase?" self assert:( node binding isLiteralVariable and: [Smalltalk globals includesAssociation: node binding assoc ]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'MarcusDenker 9/20/2013 15:02' prior: 69089379! testFindBestNodeForClassVarItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext classVariableContext . self assert: node class equals: RBVariableNode. "Es una forma un tanto molesta de preguntar... es una var de clase?" self assert:( node binding isLiteralVariable and: [(Smalltalk globals includesAssociation: node binding assoc ) not]).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 5/22/2013 15:11' prior: 38984063! testFindBestNodeForInstanceVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext instVarContext . self assert: node class equals: RBVariableNode. self assert:( node binding isInstance).! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 14:27' prior: 35704087! testFindBestNodeForLiteralItsRBLiteral | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext literalContext. self assert: node class equals: RBLiteralValueNode .! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:29' prior: 35704349! testFindBestNodeForMessageNodeItsRBMessageSend | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext mesageContext . self assert: node class equals: RBMessageNode .! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:28' prior: 35704615! testFindBestNodeForMethodNodeItsRBMehod | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext methodContext . self assert: node class equals: RBMethodNode.! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:25' prior: 35704871! testFindBestNodeForMultilineItsRBSequence | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext sourceContext . self assert: node class equals: RBSequenceNode . ! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 14:29' prior: 35705133! testFindBestNodeForSelfNodeItsRBSelf | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext selfContext. self assert: node class equals: RBSelfNode.! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 4/22/2013 15:18' prior: 35705381! testFindBestNodeForSelfNodeItsRBSuper | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext superContext. self assert: node class equals: RBSuperNode ! ! !SugsMenuBuilderTest methodsFor: 'nodes' stamp: 'GiselaDecuzzi 6/18/2013 14:31' prior: 41661078! testFindBestNodeForTemporaryVariableItsRBVariable | node | node :=SugsMenuBuilder findBestNodeFor: SugsMockContext tempVarContext . self assert: node isTemp.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/19/2013 17:36' prior: 35706288! testNoSuggestionForSelfNode | suggestions | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext selfContext. self assert: suggestions isEmpty.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/19/2013 18:00' prior: 35706551! testNoSuggestionForSuperNode | suggestions | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext superContext. self assert: suggestions isEmpty.! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 6/12/2013 13:52' prior: 41661343! testSuggestionForAAssigmentNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext assigmentContext. expected := SugsSuggestionFactory commandsForAssignment. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:46' prior: 35706816! testSuggestionForAClassNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext classContext. expected := SugsSuggestionFactory commandsForClass. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:57' prior: 35707205! testSuggestionForAClassVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext classVariableContext. expected := SugsSuggestionFactory commandsForClassVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 13:36' prior: 38363213! testSuggestionForAMehodNodeIncludesAllValid | suggestions expected context | context := SugsMockContext methodContext. suggestions := SugsMenuBuilder findSuggestionsFor: context. expected := (SugsSuggestionFactory commandsForMethod do: [:aSugg | aSugg context: context] )select: #isValidForContext. self assert: (expected allSatisfy: [ :expect | suggestions includes: expect ])! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 14:07' prior: 35708108! testSuggestionForAMessageNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext mesageContext. expected := SugsSuggestionFactory commandsForMessage . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:58' prior: 35708503! testSuggestionForATemporaryVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext tempVarContext. expected := SugsSuggestionFactory commandsForTemporaryVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 4/22/2013 13:59' prior: 35708919! testSuggestionForAnInstanceVariableNodeIncludesAllDeclared | suggestions expected| suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext instVarContext. expected := SugsSuggestionFactory commandsForInstanceVariable . self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 15:07' prior: 38363699! testSuggestionForLiteralNodeIncludesAllExpected | suggestions expected | suggestions :=SugsMenuBuilder findSuggestionsFor: SugsMockContext literalContext. expected := SugsSuggestionFactory commandsFoLiteralNode . self assert:(expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsMenuBuilderTest methodsFor: 'suggstions-by-selection' stamp: 'GiselaDecuzzi 5/15/2013 14:22' prior: 38364095! testSuggestionForSourceNodeIncludesAllValid | suggestions expected context | context := SugsMockContext sourceContext. suggestions :=SugsMenuBuilder findSuggestionsFor: context. expected := (SugsSuggestionFactory commandsForSource do: [:aSugg | aSugg context: context] )select: #isValidForContext. self assert: (expected allSatisfy:[:expect | suggestions includes: expect]).! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 13:57' prior: 35709725! createSuggestionAccesorsClassVar: context | suggestion | suggestion := SugsSuggestionFactory createAccessors. suggestion context: context. ^suggestion.! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 11:19' prior: 35709983! createSuggestionAccesorsInstVar: context | suggestion | suggestion := SugsSuggestionFactory createAccesorsFor. suggestion context: context. ^suggestion.! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 13:56' prior: 35710242! targetFor: varName in: aClass ^ varName first isUppercase ifTrue: [ aClass class ] ifFalse: [aClass]. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:19' prior: 35710450! testCreateAccessorsIsNotValidIfAccessorsAreAlreadyCreated | suggestion context | self addVariable: 'test' to: self emptyClass. self createAccessorsFor: 'test' in: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self deny: suggestion isValidForContext! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:25' prior: 35710881! testCreateAccessorsIsValidIfAccessIsMissed | suggestion context | self addVariable: 'test' to: self emptyClass. self createSetter: 'test' in: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:23' prior: 35711295! testCreateAccessorsIsValidIfAccessorsAreMissed | suggestion context | self addVariable: 'test' to: self emptyClass. context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'inst-var' stamp: 'GiselaDecuzzi 4/23/2013 11:25' prior: 35711666! testCreateAccessorsIsValidIfMuttatorMissed | suggestion context | self addVariable: 'test' to: self emptyClass . self createGetter: 'test' in: self emptyClass . context := self createContext: 'test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 11:28' prior: 35712086! testCreateClassAccessorsIsNotValidIfAccessorsAreAlreadyCreated | suggestion context | self addVariable: 'Test' to: self emptyClass. self createAccessorsFor: 'Test' in: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsClassVar: context. self deny: suggestion isValidForContext! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:10' prior: 35712524! testCreateClassAccessorsIsValidIfAccessIsMissed | suggestion context | self addVariable: 'Test' to: self emptyClass. self createSetter: 'Test' in: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:10' prior: 35712944! testCreateClassAccessorsIsValidIfAccessorsAreMissed | suggestion context | self addVariable: 'Test' to: self emptyClass. context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionCreateAccessorsTest methodsFor: 'class-var' stamp: 'GiselaDecuzzi 4/23/2013 14:11' prior: 35713321! testCreateClassAccessorsIsValidIfMuttatorMissed | suggestion context | self addVariable: 'Test' to: self emptyClass . self createGetter: 'Test' in: self emptyClass . context := self createContext: 'Test'. suggestion := self createSuggestionAccesorsInstVar: context. self assert: suggestion isValidForContext. ! ! !SugsSuggestionDelegateTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 15:47' prior: 35713737! createContexForDelegate ^ SugsMockContext for: self emptyClass! ! !SugsSuggestionDelegateTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:50' prior: 35713894! createSuggestionDelegate: context | suggestion | suggestion := SugsSuggestionFactory createMoveMethod . suggestion context: context. ^suggestion. ! ! !SugsSuggestionDelegateTest methodsFor: 'source' stamp: 'GiselaDecuzzi 4/23/2013 15:11' prior: 35714141! testDelegateSelectionWithInstaceVariablesItsValid | suggestion | self addVariable: 'test' to: self emptyClass. self addMethodToDelegate. suggestion := self createSuggestionDelegate: self createContexForDelegate . self assert: suggestion isValidForContext! ! !SugsSuggestionDelegateTest methodsFor: 'source' stamp: 'GiselaDecuzzi 4/23/2013 15:12' prior: 35714496! testDelegateSelectionWithoutInstaceVariablesItsNotValid | suggestion | self addMethodToDelegate. suggestion := self createSuggestionDelegate: self createContexForDelegate. self deny: suggestion isValidForContext! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 15:04' prior: 38358086! testExtractLocalInALiteralNodeIsValid | literal context suggestion | literal := RBLiteralValueNode new. context := SugsMockContext withNode: literal. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext .! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:36' prior: 38358466! testExtractLocalInAMessageNodeIsValid | context suggestion | context := SugsMockContext withMessageName: 'justAName'. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext ! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:42' prior: 38358809! testExtractLocalInASequenceNodeWithMoreSentencesIsNotValid | multipleLines context suggestion | multipleLines := RBSequenceNode new. multipleLines addNode: (RBVariableNode named: 'varName'). multipleLines addNode: (RBVariableNode named: 'otherName'). context := SugsMockContext withNode: multipleLines. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self deny: suggestion isValidForContext . ! ! !SugsSuggestionExtractLocalTest methodsFor: 'valid' stamp: 'GiselaDecuzzi 5/15/2013 14:45' prior: 38359347! testExtractLocalInASequenceNodeWithOneSentenceIsValid | oneLine context suggestion | oneLine := RBSequenceNode new. oneLine addNode: (RBVariableNode named: 'varName'). context := SugsMockContext withNode: oneLine. suggestion := SugsSuggestionFactory createExtractToLocalVariable context: context. self assert: suggestion isValidForContext .! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:23' prior: 35714809! createContext: subclass ^SugsMockContext for: subclass .! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:19' prior: 35714962! createSubclassFrom: superClass named: symbol | newClass | newClass := superClass subclass: symbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmartSuggestions-Test'. ^newClass.! ! !SugsSuggestionPushDownTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:24' prior: 35715300! createSuggestionPushDown: context ^ SugsSuggestionFactory createPushDown context:context; yourself.! ! !SugsSuggestionPushDownTest methodsFor: 'method' stamp: 'GiselaDecuzzi 4/24/2013 00:47' prior: 35715500! testPushDownWithSubclassIsValid | suggestion subclass | subclass := self createSubclassFrom: self emptyClass named: #TestSuggestionsSubclass. self addMethodToDelegate. suggestion := self createSuggestionPushDown: (self createContext: self emptyClass ). self assert: suggestion isValidForContext. self removeClass: subclass.! ! !SugsSuggestionPushDownTest methodsFor: 'method' stamp: 'GiselaDecuzzi 4/23/2013 16:28' prior: 35715925! testPushDownWithoutSubclassIsNotValid | suggestion | self addMethodToDelegate. suggestion := self createSuggestionPushDown: (self createContext: self emptyClass ). self deny: suggestion isValidForContext! ! !SugsSuggestionRemoveArgTest methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 17:58' prior: 35716230! testRemoveArgsWithArgsItsValid | suggestion | suggestion := SugsSuggestionFactory createRemoveParameter context: (SugsMockContext withMessageName: 'methodNoParamas:' ); yourself. self assert: suggestion isValidForContext ! ! !SugsSuggestionRemoveArgTest methodsFor: 'methods' stamp: 'GiselaDecuzzi 4/23/2013 17:57' prior: 35716554! testRemoveArgsWithoutArgsItsNotValid | suggestion | suggestion := SugsSuggestionFactory createRemoveParameter context: (SugsMockContext withMessageName: 'methodNoParamas' ); yourself. self deny: suggestion isValidForContext! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:37' prior: 35716892! testLabelForSwapClassMethodRefersToInstance | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext methodClassContext. self assert: sugg label equals: 'Move to instance side' translated.! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:36' prior: 35717225! testLabelForSwapInstanceMethodRefersToClass | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext methodContext. self assert: sugg label equals: 'Move to class side' translated.! ! !SugsSuggestionSwapMethodTest methodsFor: 'as yet unclassified' stamp: 'GiselaDecuzzi 4/24/2013 13:35' prior: 35717549! testLabelForSwapWithoutSelectedMethodIsGeneric | sugg | sugg := SugsSuggestionFactory createSwapMethod. sugg context: SugsMockContext new. self assert: sugg label equals: 'Swap method' translated.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 16:22' prior: 35717837! addMethodToDelegate self emptyClass compile: 'methodToDelegate2+5. OrderedCollection new.' expandMacros classified: #testing! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35718060! addVariable: name to: aClass name first isUppercase ifTrue: [ aClass addClassVarNamed: name] ifFalse: [aClass addInstVarNamed: name].! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35718280! createAccessorsFor: varName in: aClass self createGetter: varName in: aClass. self createSetter: varName in: aClass . ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35718491! createClass: symbol | newClass | newClass := Object subclass: symbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmartSuggestions-Test'. ^newClass.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35718792! createContext: selectedVariableName ^ SugsMockContext for: self emptyClass selectedVariable: selectedVariableName ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35718993! createGetter: varName in: aClass | target name | target := self targetFor: varName in: aClass. name := self nameFor: varName. target compile: ('<1s>^ <2s>' expandMacrosWith: name with: varName) classified: #accessing. ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35719316! createSetter: varName in: aClass | target name | target := self targetFor: varName in: aClass. name := self nameFor: varName. target compile: ('<1s> anObject<2s> := anObject' expandMacrosWith: (name,':') with: varName) classified: #accessing. ! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:39' prior: 35719666! emptyClass ^ emptyClass! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35719776! nameFor: varName | name | name:= varName copy. name at: 1 put: name first asLowercase. ^name.! ! !SugsSuggestionTest methodsFor: 'private' stamp: 'GiselaDecuzzi 4/23/2013 14:31' prior: 35719961! removeClass: aClass aClass removeFromSystem.! ! !SugsSuggestionTest methodsFor: 'initialize-release' stamp: 'GiselaDecuzzi 4/23/2013 14:39' prior: 35720103! setUp super setUp. emptyClass := self createClass: #TestWithAccessors.! ! !SugsSuggestionTest methodsFor: 'initialize-release' stamp: 'GiselaDecuzzi 4/23/2013 14:39' prior: 35720273! tearDown super tearDown. self removeClass: emptyClass .! ! !TestRPackagePrequisites methodsFor: 'tests' stamp: 'StephanEggermont 12/9/2013 19:58' prior: 78738024! testNoPackagesOverride "Class side packages should not be overridden" self assert: (Object allSubclasses select: [: each | (each class compiledMethodAt: #packages ifAbsent: [nil]) isNotNil]) isEmpty. ! ! !ListItemWrapper commentStamp: '' prior: 78770349! Contributed by Bob Arning as part of the ObjectExplorer package. ! !MorphWithSubmorphsWrapper commentStamp: 'ls 3/1/2004 17:32' prior: 78770494! Display a morph in a SimpleHierarchicalListMorph, and arrange to recursively display the morph's submorphs. The "item" that is wrapped is the morph to display.! !PluggableListItemWrapper commentStamp: 'ar 10/14/2003 23:51' prior: 78770735! luggableListItemWrapper makes it more easy for clients to use hierarchical lists. Rather than having to write a subclass of ListItemWrapper, a PluggableListItemWrapper can be used to provide the appropriate information straight from the model: string - an explicit string representation (contrary to the 'item' which contains any kind of object) getStringSelector - a message invoked to retrieve the sting representation of its item dynamically from its model (when a constant representation is undesirable) hasContentsSelector - a message invoked in the model to answer whether the item has any children or not. getContentsSelector - a message invoked in the model to retrieve the contents for its item. All callback selectors can have zero, one or two arguments with the item and the wrapper as first and second argument.! "Morphic-Base"! "RPackage-SystemIntegration"! "RPackage-Tests"! "SmartSuggestions"! "SmartSuggestionsTests"! ----End fileIn----! ----QUIT----2013-12-11T16:36:02.362491+01:00 Pharo.image priorSource: 28423666! ----STARTUP----2013-12-11T16:41:57.941993+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-11T16:41:58.349992+01:00 Pharo-30637.image priorSource: 28555101! ----STARTUP----2013-12-12T09:39:52.472317+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/12/2013 09:36' prior: 78755616! commentForCurrentUpdate ^ '12409 DNU RPackage>>#item when FileOut https://pharo.fogbugz.com/f/cases/12409 12402 Display reverse: leads to error https://pharo.fogbugz.com/f/cases/12402 12384 Package filter dialog: Make the feature more apparent https://pharo.fogbugz.com/f/cases/12384 12396 SystemNavigation class comment uses deprecated message https://pharo.fogbugz.com/f/cases/12396 12094 Drop down does show the items wrongly https://pharo.fogbugz.com/f/cases/12094'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/12/2013 09:36'! script293 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.133.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-StephaneDucasse.68.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.144.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.617.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.203.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.393.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.157.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.34.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.292.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.994.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-StephaneDucasse.1370.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/12/2013 09:36'! update30638 "self new update30638" self withUpdateLog: '12409 DNU RPackage>>#item when FileOut https://pharo.fogbugz.com/f/cases/12409 12402 Display reverse: leads to error https://pharo.fogbugz.com/f/cases/12402 12384 Package filter dialog: Make the feature more apparent https://pharo.fogbugz.com/f/cases/12384 12396 SystemNavigation class comment uses deprecated message https://pharo.fogbugz.com/f/cases/12396 12094 Drop down does show the items wrongly https://pharo.fogbugz.com/f/cases/12094'. self loadTogether: self script293 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KMDescription commentStamp: '' prior: 42367061! A KMDescription is a window showing the description of shortcuts for a specified set of symbols reprensenting KMCategories! !SettingBrowser commentStamp: '' prior: 42661114! !! The User interface A SettingBrowser allows the browsing as well as the editing of setting values. For each setting, a label and an input widget allowing the change of the setting value are shown. !!!! Browsing standards settings In order to open a setting browser one can also use the expression below: -------------------- SettingBrowser open -------------------- It opens a SettingBrowser for all settings declared with the standard 'systemsettings' pragma keyword. To see how these settings are declared in the image, you can browse all senders of #systemsettings: -------------- SystemNavigation new browseAllSendersOf: #systemsettings -------------- !!!! Browsing application specific settings For specific applications, other pragma keywords can be used. These keywords can be passed as follow: -------------------- (SettingBrowser forKeywords: #('blob')) open. -------------------- Then, only settings which are declared with the keyword 'blob' are viewed. Here is an example of such a setting declared in the class side of a class BlobSettings -------------------- BlobSettings class>>blobSettingOn: aBuilder (aBuilder group: #blobEditing) label: 'Editing' translated; parent: #blobBrowsing; description: 'All settings concerned with blob editing' translated; with: [ (aBuilder setting: #color) ... -------------------- The expression 'SettingBrowser open' is then equivalent to the '(SettingBrowser forKeywords: #('systemsettings')) open' expression. !!!! Filtering The SettingBrowser has a filtering functionality to limitate the number of settings. You can enter a token in the input field of the toolbar in order to show only settings that are matching the token. Two filtering modes are allowed: with a substring or with a regular expression. - with a substring: only settings which name, description, pragma class or method selector includes this substring are viewed; - with a regular expression: the same as with a substring except that the input is used as a regular expression. This filtering is applied if the Regexp checkbox is checked. !! How to declare a setting A setting is declared with a method class side. This kind of method takes a builder as argument and a standard setting is tagged with the pragma. The builder argument serves as a facade for the declaration. !!!!A simple boolean setting example Let's start with a setting declaration example: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; setSelector: #caseSensitiveFinds:; getSelector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. For this setting to be declared, we make the asumption that we have TextEditor class>>caseSensitiveFinds and TextEditor class>>caseSensitiveFinds: methods in order to change the preference value. To declare a setting, just send #setting: to the builder with its identifier, a Symbol passed as argument. It creates a setting node. Then you can set the label, the description with #label: and #description sent to the newly created setting node. You also have to set the selectors for setting and getting the preference value as well as the target to which these accessors are sent (often a class). This is done by sending respectively, #setSelector:, #getSelector: and #target: to the setting node. Because all settings are organized in trees we need a way to indicate what is the position of the setting node in the overall setting trees list. In fact it can be done two ways. The first way is to use the #parent: message (A second possibility is to declare a subtree in one method, it is explained later in this documentation).The #parent: message is send for non root settings. #parent takes the identifier of the parent setting as argument. You may notice that in this example, if we don't take into account the $: at the end of the setting accessor, the getting and the setting accessors are the same. This is often the case. You can simply set the setter and the getter by sending the #selector: message to the setting node. Thus the declaration is simplified as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; selector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. You may also notice that the identifier of the setting is then the same as the selector. In this case, you can omit to set the selector because by default, the identifier is used as the selector for getting the preference value and the identifier concatenated with a $: at the end is used as the setting selector. Thus the declaration is simplified again as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; target: TextEditor; parent: #codeEditing. Finally, if you decide to declare a setting directly in the class which implements the selector, the target information can be also omitted because the class in which the setting is declared is used by default. Thus the simplest declaration can be: TextEditor class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; parent: #codeEditing. !!!!Declaring a subtree in one single method Directly declaring a sub-tree of settings in one method is also possible. Then, typically, a root group is declared for the application settings and the children settings themselves are also declared within the same method as in the example below in which #formatCommentWithStatements and #indentString are directly declared as children of the #configurableFormatter setting: RBConfigurableFormatter class>>settingsOn: aBuilder (aBuilder group: #configurableFormatter) target: self; parent: #refactoring; label: 'Configurable Formatter' translated; description: 'Settings related to the formatter' translated; with: [ (aBuilder setting: #formatCommentWithStatements) label: 'Format comment with statements' translated. (aBuilder setting: #indentString) label: 'Indent string' translated] !!!!Optional setting Any setting can have children. In the case where a boolean setting is used as a parent, then, its children are chown only if the parent preference value is true. !!!!Range setting You send the #range: message to the builder instead of the #setting: message. In addition, you send the #range: message to the setting with an interval as argument in order to indicate the valid range. screenMarginSettingOn: aBuilder (aBuilder range: #fullscreenMargin) target: SystemWindow; parent: #windows; label: 'Fullscreen margin' translated; description: 'Specify the amount of space that is let around a windows when it''s opened fullscreen' translated; range: (-5 to: 100). !!!!List setting For this kind of setting, the SettingBrowser will show a drop list. Here is an example for the window position strategy. Notice that the setting is declared by sending the #pickOne message to the builder. Notice also that the list of valid values are given by sending the #domainValues: message to the setting. The argument is an array of association. Each association key is the label that is shown and the corresponding association value gives the value that will be assigned to the preference. windowPositionStrategySettingsOn: aBuilder (aBuilder pickOne: #usedStrategy) label: 'Window position strategy' translated; target: RealEstateAgent; domainValues: { 'Reverse Stagger' translated -> #staggerFor:initialExtent:world:. 'Cascade' translated -> #cascadeFor:initialExtent:world:. 'Standard' translated -> #standardFor:initialExtent:world:}; !!!!Launcher A launcher is a particular setting. It allows to launch a script directly from the setting browser. Imagine that you have changed some settings and that you need to evaluate a script in order to update some other objets. It can be used also to configurate globally a package of the entire image. As an example, in order to use True Type Fonts, the system must be updated by collecting all the available TT fonts. This can be done by evaluating the following expression: ------------- FreeTypeFontProvider current updateFromSystem ------------- In order to be able to launch this script from the setting browser, you have to declare a launcher. For example, look-at how the script for the TT fonts is declared in GraphicFontSettings class >> #standardFontsSettingsOn:. GraphicFontSettings class >> #standardFontsSettingsOn: (aBuilder group: #standardFonts) ... (aBuilder launcher: #updateFromSystem) order: 1; target: FreeTypeFontProvider; targetSelector: #current; description: 'Update available fonts by scanning the current system'; script: #updateFromSystem; label: 'Update fonts from system' translated. Notice that you send #launcher: to the builder in order to create the setting node, then you send #script: to the created node with the selector of the script passed as argument. Implementation details See also SettingNode, SettingTree, SettingNodeBuilder and SettingTreeBuilder classes. Instance Variables roots: searchedText: status: collector: roots - the roots of the viewed setting trees searchedText - the string used as a filter token or regexp in order to select viewed settings status - a WriteStream used in order to store useful information which are shown when no current item is selected collector - The SettingCollector which has the responsibility to collect settings and to build viewed trees ! !KMDescription commentStamp: '' prior: 78899079! A KMDescription is a window showing the description of shortcuts for a specified set of symbols reprensenting KMCategories! !KMDescription class methodsFor: 'specs' stamp: 'NicolaiHess 12/11/2013 21:22' prior: 24132797! defaultSpec ^ SpecLayout composed newColumn: [:c | c newRow: [:r | r add: #categoryList; add: #orderingList ] height: 25; add: #shortcutList; add: #okToolbar height: 25 ]! ! !KMDescription methodsFor: 'protocol' stamp: 'NicolaiHess 12/11/2013 22:40' prior: 76501763! categories: aCollectionOfSymbols | cats | cats := aCollectionOfSymbols collect: [:e | KMRepository default categoryForName: e]. categories value: cats. self updateShortcutList! ! !KMDescription methodsFor: 'accessing' stamp: 'NicolaiHess 12/11/2013 21:23'! categoryList ^ categoryList! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:45'! collectDescriptionShortcut collectingBlock := [ :e | {(e description asString) . ':' . (e shortcut asString)} ]! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:46'! collectShortcutDescription collectingBlock := [:e | {e shortcut asString. ':'. e description asString} ]! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:46'! initCategoryList: aCollection categoryList emptyList. aCollection do: [ :cat | categoryList addItemLabeled: cat name do: [ self updateShortcutList ] ]! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:46' prior: 45582280! initialize categories := nil asValueHolder. sortingBlock := [:a :b | a first < b first ]. super initialize. self collectShortcutDescription ! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:41' prior: 76502029! initializePresenter categories whenChangedDo: [:col | self initCategoryList:col ]. okToolbar okAction: [ self delete ].! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:44' prior: 24131330! initializeWidgets self instantiateModels: #( categoryList DropListModel shortcutList MultiColumnListModel okToolbar OkToolbar orderingList DropListModel ). orderingList addItemLabeled:'shortcut : description' do: [self collectShortcutDescription. self updateShortcutList]; addItemLabeled:'description : shortcut' do: [self collectDescriptionShortcut. self updateShortcutList]. shortcutList displayBlock: [ :e | e ]; allowToSelect: false. okToolbar okButton label: 'Close'; state: false! ! !KMDescription methodsFor: 'accessing' stamp: 'NicolaiHess 12/11/2013 21:23'! orderingList ^ orderingList! ! !KMDescription methodsFor: 'accessing' stamp: 'NicolaiHess 12/11/2013 21:23'! shortcutList ^ shortcutList! ! !KMDescription methodsFor: 'initialization' stamp: 'NicolaiHess 12/11/2013 22:47'! updateShortcutList | cat items | cat := categories value at: self categoryList selectedIndex. items := (cat entriesAt: #all) keymaps collect: [ :e | collectingBlock value: e ]. shortcutList items: (items sorted: sortingBlock)! ! !RPackage methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 12/11/2013 16:57' prior: 39999608! fileOut | internalStream | internalStream := (String new: 1000) writeStream. self classTags do: [ :each | SystemOrganization fileOutCategory: each name on: internalStream ]. classExtensionSelectors keysAndValuesDo: [ :className :selectors | selectors do: [ :selector | | extendedClass | extendedClass := Smalltalk globals classNamed: className. extendedClass fileOutMethod: selector on: internalStream ] ]. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !RPackageTag methodsFor: '*Nautilus' stamp: 'EstebanLorenzano 12/11/2013 16:53'! fileOut | internalStream | internalStream := (String new: 1000) writeStream. SystemOrganization fileOutCategory: self name on: internalStream. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !DisplayMedium methodsFor: 'private' stamp: 'MarcusDenker 12/8/2013 10:07' prior: 67630716! highLightBitmaps "Quickly return a Bitblt-ready raw colorValue for highlighting areas." ^HighLightBitmaps ifNil: [self initializeHighLights ]. ! ! !DisplayMedium methodsFor: 'private' stamp: 'MarcusDenker 12/8/2013 10:05' prior: 67605786! initializeHighLights "Create a set of Bitmaps for quickly reversing areas of the screen without converting colors. " HighLightBitmaps := Array new: 32. ^HighLightBitmaps at: 1 put: (Bitmap with: 4294967295); at: 2 put: (Bitmap with: 4294967295); at: 4 put: (Bitmap with: 1431655765); at: 8 put: (Bitmap with: 117901063); at: 16 put: (Bitmap with: 4294967295); at: 32 put: (Bitmap with: 4294967295); yourself. ! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 12/11/2013 10:29' prior: 77457958! buildPackageSearch "It is an search dialog which filters package list" ^ SearchMorph new model: self; updateSelector: #packageSearchUpdate:; ghostText: 'Type: Pkg1|^Pkg2|Pk.*Core$' yourself! ! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'EstebanLorenzano 12/11/2013 16:52'! fileOutPackages: aCollection self do: [ :package | package asNautilusSelection item fileOut ] on: aCollection displaying: 'Filing out packages...'.! ! !SettingBrowser commentStamp: '' prior: 78899265! !! The User interface A SettingBrowser allows the browsing as well as the editing of setting values. For each setting, a label and an input widget allowing the change of the setting value are shown. !!!! Browsing standards settings In order to open a setting browser one can also use the expression below: -------------------- SettingBrowser open -------------------- It opens a SettingBrowser for all settings declared with the standard 'systemsettings' pragma keyword. To see how these settings are declared in the image, you can browse all senders of #systemsettings: -------------- SystemNavigation new browseAllSendersOf: #systemsettings -------------- !!!! Browsing application specific settings For specific applications, other pragma keywords can be used. These keywords can be passed as follow: -------------------- (SettingBrowser forKeywords: #('blob')) open. -------------------- Then, only settings which are declared with the keyword 'blob' are viewed. Here is an example of such a setting declared in the class side of a class BlobSettings -------------------- BlobSettings class>>blobSettingOn: aBuilder (aBuilder group: #blobEditing) label: 'Editing' translated; parent: #blobBrowsing; description: 'All settings concerned with blob editing' translated; with: [ (aBuilder setting: #color) ... -------------------- The expression 'SettingBrowser open' is then equivalent to the '(SettingBrowser forKeywords: #('systemsettings')) open' expression. !!!! Filtering The SettingBrowser has a filtering functionality to limitate the number of settings. You can enter a token in the input field of the toolbar in order to show only settings that are matching the token. Two filtering modes are allowed: with a substring or with a regular expression. - with a substring: only settings which name, description, pragma class or method selector includes this substring are viewed; - with a regular expression: the same as with a substring except that the input is used as a regular expression. This filtering is applied if the Regexp checkbox is checked. !! How to declare a setting A setting is declared with a method class side. This kind of method takes a builder as argument and a standard setting is tagged with the pragma. The builder argument serves as a facade for the declaration. !!!!A simple boolean setting example Let's start with a setting declaration example: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; setSelector: #caseSensitiveFinds:; getSelector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. For this setting to be declared, we make the asumption that we have TextEditor class>>caseSensitiveFinds and TextEditor class>>caseSensitiveFinds: methods in order to change the preference value. To declare a setting, just send #setting: to the builder with its identifier, a Symbol passed as argument. It creates a setting node. Then you can set the label, the description with #label: and #description sent to the newly created setting node. You also have to set the selectors for setting and getting the preference value as well as the target to which these accessors are sent (often a class). This is done by sending respectively, #setSelector:, #getSelector: and #target: to the setting node. Because all settings are organized in trees we need a way to indicate what is the position of the setting node in the overall setting trees list. In fact it can be done two ways. The first way is to use the #parent: message (A second possibility is to declare a subtree in one method, it is explained later in this documentation).The #parent: message is send for non root settings. #parent takes the identifier of the parent setting as argument. You may notice that in this example, if we don't take into account the $: at the end of the setting accessor, the getting and the setting accessors are the same. This is often the case. You can simply set the setter and the getter by sending the #selector: message to the setting node. Thus the declaration is simplified as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; selector: #caseSensitiveFinds; target: TextEditor; parent: #codeEditing. You may also notice that the identifier of the setting is then the same as the selector. In this case, you can omit to set the selector because by default, the identifier is used as the selector for getting the preference value and the identifier concatenated with a $: at the end is used as the setting selector. Thus the declaration is simplified again as follow: CodeHolderSystemSettings class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; target: TextEditor; parent: #codeEditing. Finally, if you decide to declare a setting directly in the class which implements the selector, the target information can be also omitted because the class in which the setting is declared is used by default. Thus the simplest declaration can be: TextEditor class>>caseSensitiveFindsSettingsOn: aBuilder (aBuilder setting: #caseSensitiveFinds) label: 'Case sensitive search' translated; description: 'If true, then the "find" command in text will always make its searches in a case-sensitive fashion' translated; parent: #codeEditing. !!!!Declaring a subtree in one single method Directly declaring a sub-tree of settings in one method is also possible. Then, typically, a root group is declared for the application settings and the children settings themselves are also declared within the same method as in the example below in which #formatCommentWithStatements and #indentString are directly declared as children of the #configurableFormatter setting: RBConfigurableFormatter class>>settingsOn: aBuilder (aBuilder group: #configurableFormatter) target: self; parent: #refactoring; label: 'Configurable Formatter' translated; description: 'Settings related to the formatter' translated; with: [ (aBuilder setting: #formatCommentWithStatements) label: 'Format comment with statements' translated. (aBuilder setting: #indentString) label: 'Indent string' translated] !!!!Optional setting Any setting can have children. In the case where a boolean setting is used as a parent, then, its children are chown only if the parent preference value is true. !!!!Range setting You send the #range: message to the builder instead of the #setting: message. In addition, you send the #range: message to the setting with an interval as argument in order to indicate the valid range. screenMarginSettingOn: aBuilder (aBuilder range: #fullscreenMargin) target: SystemWindow; parent: #windows; label: 'Fullscreen margin' translated; description: 'Specify the amount of space that is let around a windows when it''s opened fullscreen' translated; range: (-5 to: 100). !!!!List setting For this kind of setting, the SettingBrowser will show a drop list. Here is an example for the window position strategy. Notice that the setting is declared by sending the #pickOne message to the builder. Notice also that the list of valid values are given by sending the #domainValues: message to the setting. The argument is an array of association. Each association key is the label that is shown and the corresponding association value gives the value that will be assigned to the preference. windowPositionStrategySettingsOn: aBuilder (aBuilder pickOne: #usedStrategy) label: 'Window position strategy' translated; target: RealEstateAgent; domainValues: { 'Reverse Stagger' translated -> #staggerFor:initialExtent:world:. 'Cascade' translated -> #cascadeFor:initialExtent:world:. 'Standard' translated -> #standardFor:initialExtent:world:}; !!!!Launcher A launcher is a particular setting. It allows to launch a script directly from the setting browser. Imagine that you have changed some settings and that you need to evaluate a script in order to update some other objets. It can be used also to configurate globally a package of the entire image. As an example, in order to use True Type Fonts, the system must be updated by collecting all the available TT fonts. This can be done by evaluating the following expression: ------------- FreeTypeFontProvider current updateFromSystem ------------- In order to be able to launch this script from the setting browser, you have to declare a launcher. For example, look-at how the script for the TT fonts is declared in GraphicFontSettings class >> #standardFontsSettingsOn:. GraphicFontSettings class >> #standardFontsSettingsOn: (aBuilder group: #standardFonts) ... (aBuilder launcher: #updateFromSystem) order: 1; target: FreeTypeFontProvider; targetSelector: #current; description: 'Update available fonts by scanning the current system'; script: #updateFromSystem; label: 'Update fonts from system' translated. Notice that you send #launcher: to the builder in order to create the setting node, then you send #script: to the created node with the selector of the script passed as argument. Implementation details See also SettingNode, SettingTree, SettingNodeBuilder and SettingTreeBuilder classes. Instance Variables roots: searchedText: status: collector: roots - the roots of the viewed setting trees searchedText - the string used as a filter token or regexp in order to select viewed settings status - a WriteStream used in order to store useful information which are shown when no current item is selected collector - The SettingCollector which has the responsibility to collect settings and to build viewed trees ! KMDescription removeSelector: #list! KMDescription removeSelector: #dropList! KMDescription removeSelector: #displayList! "Graphics-Display Objects"! "Keymapping-Tools-Spec"! "Nautilus"! ----End fileIn----! ----QUIT----2013-12-12T09:39:59.682316+01:00 Pharo.image priorSource: 28555298! ----STARTUP----2013-12-12T09:45:46.164909+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-12T09:45:46.538908+01:00 Pharo-30638.image priorSource: 28594308! ----STARTUP----2013-12-12T10:57:47.147393+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/12/2013 10:54' prior: 78887245! commentForCurrentUpdate ^ '12391 Error on MessageBrowser when selecting TimeStamp display https://pharo.fogbugz.com/f/cases/12391 12340 Cleanup on more Tools methods https://pharo.fogbugz.com/f/cases/12340 12411 Small missing methods https://pharo.fogbugz.com/f/cases/12411'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/12/2013 10:54'! script294 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.56.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.601.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.147.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.617.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.395.mcz SlotTests-MarcusDenker.62.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.160.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.47.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1371.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.604.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/12/2013 10:54'! update30639 "self new update30639" self withUpdateLog: '12391 Error on MessageBrowser when selecting TimeStamp display https://pharo.fogbugz.com/f/cases/12391 12340 Cleanup on more Tools methods https://pharo.fogbugz.com/f/cases/12340 12411 Small missing methods https://pharo.fogbugz.com/f/cases/12411'. self loadTogether: self script294 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ReadWriteStream methodsFor: '*Compression' stamp: 'GabrielOmarCotelli 12/10/2013 08:39' prior: 32129488! asUnZippedStream | isGZip outputStream first strm archive | "Decompress this file if needed, and return a stream. No file is written. File extension may be .gz or anything else. Also works on archives (.zip, .gZip)." strm := self binary. strm isZipArchive ifTrue: [ archive := ZipArchive new readFrom: strm. archive members detect: [ :any | any fileName asLowercase endsWith: '.ttf' ] ifFound: [ :which | strm := which contentStream. archive close ] ifNone: [ archive close. ^ self error: 'Can''t find .ttf file in archive' ] ]. first := strm next. isGZip := strm next * 256 + first = GZipConstants gzipMagic. strm skip: -2. isGZip ifTrue: [ outputStream := (MultiByteBinaryOrTextStream with: (GZipReadStream on: strm) upToEnd) reset. strm close ] ifFalse: [ outputStream := strm ]. ^ outputStream! ! !NECOverrideModel methodsFor: 'initialize-release' stamp: 'GabrielOmarCotelli 12/4/2013 08:32' prior: 37300892! initializeSelectors clazz superclass ifNotNil: [ self initializeSelectorsFor: clazz superclass ]. clazz selectorsDo: [ :each | selectors detect: [ :ea | ea contentsAsSymbol == each ] ifFound: [ :entry | selectors remove: entry ifAbsent: [ ] ] ]! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'GabrielOmarCotelli 12/4/2013 09:42' prior: 46095404! validateClassName "Validate the new class name. Raise warning if invalid." name detect: [ :c | (c isAlphaNumeric or: [ c = $_ ]) not ] ifFound: [ :c | InvalidGlobalName signal: 'Invalid character: ''' , c printString , '''' for: name ]. name first canBeGlobalVarInitial ifFalse: [ InvalidGlobalName signal: 'Class name does not start with a valid Global Var Initial' for: name ]! ! !SettingTree methodsFor: 'querying' stamp: 'GabrielOmarCotelli 12/4/2013 09:41' prior: 69051456! childrenOf: aNode | children idx order | "Get aNode children. Assign children order if one child has an order which is not nil" children := self nodeList select: [ :p | p parentName = aNode settingDeclaration name ]. children detect: [ :n | n order notNil ] ifFound: [ :firstWithOrder | idx := children indexOf: firstWithOrder. order := firstWithOrder order. idx > 1 ifTrue: [ idx - 1 to: 1 do: [ :pos | (children at: pos) order: order - 1. order := order - 1 ] ]. order := firstWithOrder order. idx + 1 to: children size do: [ :pos | (children at: pos) order ifNil: [ (children at: pos) order: order + 1 ] ifNotNil: [ order := (children at: pos) order ]. order := order + 1 ] ]. ^ children! ! !MessageListNonInspectableNode methodsFor: 'testing' stamp: 'GabrielOmarCotelli 12/3/2013 17:53' prior: 25643364! includes: aNode ^ self = aNode complexContents or: [ self contents anySatisfy: [ :each | each includes: aNode ] ]! ! !CommandLineHandler methodsFor: 'accessing arguments' stamp: 'DamienCassou 12/11/2013 15:46'! optionAt: aString ifPresent: presentBlock ifAbsent: absentBlock ^ self commandLine optionAt: aString ifPresent: presentBlock ifAbsent: absentBlock! ! !DigitalSignatureAlgorithm methodsFor: 'large integer arithmetic' stamp: 'GabrielOmarCotelli 12/3/2013 17:14' prior: 20860347! isProbablyPrime: p "Answer true if p is prime with very high probability. Such a number is sometimes called an 'industrial grade prime'--a large number that is so extremely likely to be prime that it can assumed that it actually is prime for all practical purposes. This implementation uses the Rabin-Miller algorithm (Schneier, p. 159)." | iterations pMinusOne b m r a j z couldBePrime | iterations := 50. "Note: The DSA spec requires >50 iterations; Schneier says 5 are enough (p. 260)" "quick elimination: check for p divisible by a small prime" SmallPrimes ifNil: [ "generate list of small primes > 2" SmallPrimes := Integer primesUpTo: 2000. SmallPrimes := SmallPrimes copyFrom: 2 to: SmallPrimes size ]. SmallPrimes detect: [ :f | p \\ f = 0 ] ifFound: [ :factor | ^ p = factor ]. pMinusOne := p - 1. b := self logOfLargestPowerOfTwoDividing: pMinusOne. m := pMinusOne bitShift: b negated. "Assert: pMinusOne = m * (2 raisedTo: b) and m is odd" Transcript show: ' Prime test pass '. r := Random new. 1 to: iterations do: [ :i | Transcript show: i printString; space. a := (r next * 16rFFFFFF) truncated. j := 0. z := (a raisedTo: m modulo: p) normalize. couldBePrime := z = 1. [ couldBePrime ] whileFalse: [ z = 1 ifTrue: [ Transcript show: 'failed!!'; cr. ^ false ]. "not prime" z = pMinusOne ifTrue: [ couldBePrime := true ] ifFalse: [ (j := j + 1) < b ifTrue: [ z := z * z \\ p ] ifFalse: [ Transcript show: 'failed!!'; cr. ^ false ] ] ] ]. "not prime" Transcript show: 'passed!!'; cr. ^ true "passed all tests; probably prime"! ! !TimeStampMethodConverter methodsFor: 'private' stamp: 'NicolaiHess 12/11/2013 10:21'! formattedModificationTextFor:aUser atStamp:aTimeStampString |stamp| stamp:= DateAndTime fromString:aTimeStampString. ^ String streamContents:[ :s | s << 'Last Modification :' << Character cr. s << Character tab << 'date:' << Character tab << stamp asDate asString << Character space << stamp asTime asString << Character cr. s << Character tab << 'by:' << Character tab << Character tab << aUser ]! ! !TimeStampMethodConverter methodsFor: 'private' stamp: 'NicolaiHess 12/11/2013 10:20' prior: 53186964! internalGetText | list | list := method stamp substrings. list ifEmpty: [ ^ 'No information available' ]. ^ self formattedModificationTextFor:(list first) atStamp:(list allButFirst joinUsing:' ') ! ! !PragmaMenuBuilder class methodsFor: 'private' stamp: 'GabrielOmarCotelli 12/4/2013 08:39' prior: 68641489! orderAssignBlock "The block which is used to set MenuRegistration tree node order inst var (which is used to sort the tree)" ^ [ :list | list detect: [ :n | n order notNil ] ifFound: [ :firstWithOrder | | idx order | "A menu registration with an order indication hase been found - then compute order of previous and next nodes" idx := list indexOf: firstWithOrder. order := firstWithOrder order. idx > 1 ifTrue: [ idx - 1 to: 1 do: [ :pos | (list at: pos) order: order - 1. order := order - 1 ] ]. order := firstWithOrder order. idx + 1 to: list size do: [ :pos | (list at: pos) order ifNil: [ (list at: pos) order: order + 1 ] ifNotNil: [ order := (list at: pos) order ]. order := order + 1 ]. list ] ifNone: [ list ] "No order has been set - do not touch anything, the list order is ok" ]! ! !BasicCommandLineHandler methodsFor: 'private' stamp: 'DamienCassou 12/11/2013 15:35' prior: 39090991! selectHandlers | handlers | handlers := (self subCommandsRoot selectHandlersFor: commandLine) copyWithout: self class. handlers := handlers sort: [ :a :b | a priority >= b priority ]. ^ handlers! ! !BasicCommandLineHandler methodsFor: 'private' stamp: 'DamienCassou 12/11/2013 15:35'! subCommandsRoot ^ CommandLineHandler! ! !SyntaxErrorDebugger methodsFor: 'initialization' stamp: 'GabrielOmarCotelli 12/4/2013 09:49' prior: 68909981! checkForUnprintableCharacters: aString | types printables | types := String typeTable. printables := '!!@#$%&*-_=+<>{}?/\,¬∑¬£¬¢¬ß¬∂¬™¬∫¬ñ¬ó¬ì¬ë¬î¬í¬Ö√ö√¶√ö¬Ø√ó¬ø¬´¬ª`~`' asSet. ^ aString detect: [ :aChar | (types at: aChar asciiValue ifAbsent: [ #xLetter ]) == #xBinary and: [ (printables includes: aChar) not ] ] ifFound: [ :badChar | '<<>> ' , aString ] ifNone: [ aString ]! ! !SystemNavigation methodsFor: 'query' stamp: 'GabrielOmarCotelli 12/4/2013 09:50' prior: 34644619! allReferencesToPool: aPool "Answer all the references to variable aPool" | list | list := OrderedCollection new. self allClassesDo: [ :cls | cls selectorsAndMethodsDo: [ :sel :meth | meth literals detect: [ :lit | (lit isVariableBinding and: [ lit key notNil ]) and: [ (aPool bindingOf: lit key) notNil ] ] ifFound: [ list add: (self createMethodNamed: sel realParent: cls) ] ] ]. ^ list! ! !SystemNavigation methodsFor: 'query' stamp: 'GabrielOmarCotelli 12/4/2013 09:51' prior: 51586028! allReferencesToPool: aPool from: aClass "Answer all the references to variables from aPool" | list | list := OrderedCollection new. aClass withAllSubclassesDo: [ :cls | cls selectorsAndMethodsDo: [ :sel :meth | meth literals detect: [ :lit | lit isVariableBinding and: [ (aPool bindingOf: lit key) notNil ] ] ifFound: [ list add: (self createMethodNamed: sel realParent: aClass) ] ] ]. ^ list! ! !CommandLineArguments methodsFor: 'testing' stamp: 'GabrielOmarCotelli 12/3/2013 17:13' prior: 19726658! longOptionAt: aString ifAbsent: absentBlock | optionStart | optionStart := '--' , aString , '='. ^ self arguments detect: [ :arg | arg beginsWith: optionStart ] ifFound: [ :option | (option splitOn: '=') second ] ifNone: absentBlock! ! !CommandLineArguments methodsFor: 'accessing' stamp: 'DamienCassou 12/11/2013 15:46'! optionAt: aString ifPresent: presentBlock ifAbsent: absentBlock | option | option := self optionAt: aString ifAbsent: [ ^ absentBlock value ]. ^ presentBlock value: option! ! "Compression"! "MenuRegistration"! "NECompletion"! "RecentSubmissions"! "Slot"! "System-CommandLine"! "System-Hashing"! "System-Settings"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----2013-12-12T10:57:56.449392+01:00 Pharo.image priorSource: 28594505! ----STARTUP----2013-12-12T11:03:48.505535+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-12T11:03:48.681535+01:00 Pharo-30639.image priorSource: 28615923! ----STARTUP----2013-12-13T09:00:52.41643+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/13/2013 08:56' prior: 78926452! commentForCurrentUpdate ^ '12417 Introduce lineEnding on OSPlatform https://pharo.fogbugz.com/f/cases/12417 12371 Deprecated #methodDictionary and #methodDictionary: https://pharo.fogbugz.com/f/cases/12371 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/13/2013 08:57'! script295 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1700.mcz KernelTests-MarcusDenker.602.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.147.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.395.mcz SlotTests-MarcusDenker.64.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.53.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.160.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.662.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1371.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/13/2013 08:57'! update30640 "self new update30640" self withUpdateLog: '12417 Introduce lineEnding on OSPlatform https://pharo.fogbugz.com/f/cases/12417 12371 Deprecated #methodDictionary and #methodDictionary: https://pharo.fogbugz.com/f/cases/12371 '. self loadTogether: self script295 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI methodsFor: 'buttons behavior' stamp: 'MarcusDenker 12/6/2013 12:59' prior: 17268778! instanceButtonLabel | label | label := 'Class side' asMorph emphasis: 2. ^self selectedClass ifNil: [label] ifNotNil: [:class | class theMetaClass hasMethods ifTrue: [label emphasis: 1] ifFalse:[label]] ! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'MarcusDenker 12/7/2013 23:38' prior: 44776361! methodDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. ^self methodDict! ! !TBehavior methodsFor: '*Deprecated30' stamp: 'MarcusDenker 12/7/2013 23:38' prior: 44778173! methodDictionary: aDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. self methodDict: aDictionary! ! !Win32Platform methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/12/2013 14:16'! lineEnding ^ String crlf! ! !UnixPlatform methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/12/2013 14:23'! lineEnding ^ String lf! ! !MacOSPlatform methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/12/2013 14:22'! lineEnding ^ String lf! ! !OSPlatform methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/12/2013 14:16'! lineEnding ^ self subclassResponsibility! ! !AdditionalMethodStateTest methodsFor: 'running' stamp: 'MarcusDenker 12/6/2013 13:00' prior: 17495361! setUp | pragma | pragma := (Object compiledMethodAt: #at:) penultimateLiteral at: #primitive:. atState := AdditionalMethodState selector: #at: with: pragma copy. ! ! !Trait method! methodDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. ^self methodDict! ! !Trait method! methodDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. ^self methodDict! ! !Trait method! methodDictionary: aDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self deprecated: 'never access methodDict directly!! You do not know what you are doing. Shame on you!!'. self methodDict: aDictionary! ! "Deprecated30"! "KernelTests"! "Nautilus"! "System-Platforms"! "Traits"! ----End fileIn----! ----QUIT----2013-12-13T09:01:00.028426+01:00 Pharo.image priorSource: 28616120! ----STARTUP----2013-12-13T09:06:56.460779+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-13T09:06:56.648778+01:00 Pharo-30640.image priorSource: 28630013! ----STARTUP----2013-12-13T11:13:42.018167+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! (Smalltalk globals at: #PointerLayout) rename: #FixedLayout! (Smalltalk globals at: #LayoutWithSlots) rename: #PointerLayout! !ClassDescription methodsFor: '*Slot' stamp: 'MartinDias 12/9/2013 11:38' prior: 41824524! layoutSized: size |layoutInstance layoutClass| layoutClass := FixedLayout. self isBits ifTrue: [ self isBytes ifTrue: [ layoutClass := ByteLayout ]. self isWords ifTrue: [ layoutClass := WordLayout ]] ifFalse: [ self isVariable ifTrue: [ layoutClass := VariableLayout ]. self isWeak ifTrue: [ layoutClass := WeakLayout ]]. layoutInstance := layoutClass new: size. layoutInstance host: self. ^ layoutInstance! ! !ClassDescription methodsFor: '*Slot' stamp: 'MartinDias 12/9/2013 11:38' prior: 78962285! layoutSized: size |layoutInstance layoutClass| layoutClass := FixedLayout. self isBits ifTrue: [ self isBytes ifTrue: [ layoutClass := ByteLayout ]. self isWords ifTrue: [ layoutClass := WordLayout ]] ifFalse: [ self isVariable ifTrue: [ layoutClass := VariableLayout ]. self isWeak ifTrue: [ layoutClass := WeakLayout ]]. layoutInstance := layoutClass new: size. layoutInstance host: self. ^ layoutInstance! ! !OldClassBuilderAdapter methodsFor: 'accessing' stamp: 'MartinDias 12/9/2013 11:38' prior: 43478283! layoutForType: typeSymbol typeSymbol = #compiledMethod ifTrue: [ ^ CompiledMethodLayout ]. typeSymbol = #bytes ifTrue: [ ^ ByteLayout ]. typeSymbol = #words ifTrue: [ ^ WordLayout ]. typeSymbol = #weak ifTrue: [ ^ WeakLayout ]. typeSymbol = #variable ifTrue: [ ^ VariableLayout ]. typeSymbol = #normal ifTrue: [ ^ FixedLayout ]. Error signal: 'Invalid layout type: ', typeSymbol asString.! ! !OldClassBuilderAdapter methodsFor: 'accessing' stamp: 'MartinDias 12/9/2013 11:38' prior: 78963373! layoutForType: typeSymbol typeSymbol = #compiledMethod ifTrue: [ ^ CompiledMethodLayout ]. typeSymbol = #bytes ifTrue: [ ^ ByteLayout ]. typeSymbol = #words ifTrue: [ ^ WordLayout ]. typeSymbol = #weak ifTrue: [ ^ WeakLayout ]. typeSymbol = #variable ifTrue: [ ^ VariableLayout ]. typeSymbol = #normal ifTrue: [ ^ FixedLayout ]. Error signal: 'Invalid layout type: ', typeSymbol asString.! ! !SlotClassBuilder methodsFor: 'initialization' stamp: 'MartinDias 12/9/2013 11:38' prior: 48939895! initialize super initialize. oldClasses := OrderedCollection new. newClasses := OrderedCollection new. sharedPoolsString := ''. sharedVariablesString := ''. classSlots := {}. slots := {}. layoutClass := FixedLayout. superclass := Object. classTraitComposition := {} asTraitComposition. traitComposition := {} asTraitComposition.! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 12/9/2013 11:38' prior: 48497615! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: FixedLayout slots: classSlots traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: layoutClass slots: slots traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 12/9/2013 11:38' prior: 43490790! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: FixedLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. client classAdded: newClass inCategory: category. ^ newClass! ! !SlotClassBuilder methodsFor: 'initialization' stamp: 'MartinDias 12/9/2013 11:38' prior: 78964408! initialize super initialize. oldClasses := OrderedCollection new. newClasses := OrderedCollection new. sharedPoolsString := ''. sharedVariablesString := ''. classSlots := {}. slots := {}. layoutClass := FixedLayout. superclass := Object. classTraitComposition := {} asTraitComposition. traitComposition := {} asTraitComposition.! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 12/9/2013 11:38' prior: 78964855! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: FixedLayout slots: classSlots traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: layoutClass slots: slots traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 12/9/2013 11:38' prior: 78965858! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: FixedLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. client classAdded: newClass inCategory: category. ^ newClass! ! !SmallIntegerLayout methodsFor: 'extending' stamp: 'MartinDias 12/9/2013 11:38' prior: 41783256! extend: newScope ^ FixedLayout new slotScope: newScope! ! !SmallIntegerLayout methodsFor: 'extending' stamp: 'MartinDias 12/9/2013 11:38' prior: 78968679! extend: newScope ^ FixedLayout new slotScope: newScope! ! !EmptyLayout methodsFor: 'extending' stamp: 'MartinDias 12/9/2013 11:38' prior: 41768224! extend: someSlots ^ FixedLayout new slotScope: (LayoutEmptyScope instance extend: someSlots)! ! !EmptyLayout methodsFor: 'extending' stamp: 'MartinDias 12/9/2013 11:38' prior: 78968984! extend: someSlots ^ FixedLayout new slotScope: (LayoutEmptyScope instance extend: someSlots)! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 12/9/2013 11:38' prior: 44946992! layoutClassesWithSlots ^ { FixedLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 12/9/2013 11:38' prior: 44946799! layoutClasses ^ { ByteLayout. WordLayout. FixedLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-building' stamp: 'MartinDias 12/9/2013 11:38' prior: 44947172! make: anUnaryBlock "I build a class for testing, providing basic default values, but eventually customized by the received unary block." ^PharoClassInstaller make: [:builder| builder superclass: Object; name: self aClassName; layoutClass: FixedLayout; category: self aCategory. anUnaryBlock value: builder ].! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 12/9/2013 11:38' prior: 78969375! layoutClassesWithSlots ^ { FixedLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-names' stamp: 'MartinDias 12/9/2013 11:38' prior: 78969551! layoutClasses ^ { ByteLayout. WordLayout. FixedLayout. VariableLayout. WeakLayout }! ! !SlotClassBuilderTest methodsFor: 'helpers-building' stamp: 'MartinDias 12/9/2013 11:38' prior: 78969745! make: anUnaryBlock "I build a class for testing, providing basic default values, but eventually customized by the received unary block." ^PharoClassInstaller make: [:builder| builder superclass: Object; name: self aClassName; layoutClass: FixedLayout; category: self aCategory. anUnaryBlock value: builder ].! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48502567! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self makeWithLayout: FixedLayout. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48502269! testClassAddedAnnounced SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. aClass := self makeWithLayout: FixedLayout. self assert: announcement classAdded equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48504180! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #aSlot }. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48503522! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: FixedLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48502818! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78970980! testClassAddedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassAdded within: [ "We create a new class without slots" self makeWithLayout: FixedLayout. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78971246! testClassAddedAnnounced SystemAnnouncer uniqueInstance weak on: ClassAdded send: #saveAnnouncement: to: self. aClass := self makeWithLayout: FixedLayout. self assert: announcement classAdded equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78971559! testClassModifiedAnnouncedOnlyOnce self assertOnlyOneAnnouncementOf: ClassModifiedClassDefinition within: [ "We create a new class without slots" self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #aSlot }. ]! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78971984! testClassModifiedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: FixedLayout andSlots: { #aSlot }. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78972655! testClassFormatChangedAnnounced | classAdded classModified | SystemAnnouncer uniqueInstance weak on: ClassModifiedClassDefinition send: #saveAnnouncementOnce: to: self. "We create a new class without slots" classAdded := self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: WeakLayout. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 12/9/2013 11:38' prior: 48507145! testNewPointerClassWithSlots aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 12/9/2013 11:38' prior: 48506859! testNewPointerClass aClass := self makeWithLayout: FixedLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 12/9/2013 11:38' prior: 78975766! testNewPointerClassWithSlots aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. self assert: (aClass instVarNames includes: 'id'). self assert: (aClass instVarNames includes: 'name').! ! !SlotBasicTest methodsFor: 'tests-basic' stamp: 'MartinDias 12/9/2013 11:38' prior: 78976076! testNewPointerClass aClass := self makeWithLayout: FixedLayout. self deny: aClass isCompact. self assert: aClass isPointers. self assert: aClass isFixed. self assert: aClass instVarNames isEmpty.! ! !SlotIntegrationTest methodsFor: 'tests-compact index' stamp: 'MartinDias 12/9/2013 11:38' prior: 48521507! testBecomeCompactAndUncompact | originalCompactClassesArray | aClass := self makeWithLayout: FixedLayout. self assert: aClass indexIfCompact equals: 0. originalCompactClassesArray := Smalltalk compactClassesArray copy. [ "The class becomes compact, so we are not in the original state." aClass becomeCompact. self assert: aClass indexIfCompact > 0. self deny: Smalltalk compactClassesArray = originalCompactClassesArray. ] ensure: [ "The class becomes uncompact, so we are back in the original state." aClass becomeUncompact. self assert: aClass indexIfCompact equals: 0. self assert: Smalltalk compactClassesArray equals: originalCompactClassesArray. ]. ! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48522453! testCopyPreservesLayout aClass := self makeWithLayout: FixedLayout. anotherClass := aClass copy. self deny: anotherClass layout isNil. self assert: aClass layout host == aClass. self assert: anotherClass layout host == anotherClass.! ! !SlotIntegrationTest methodsFor: 'tests-compact index' stamp: 'MartinDias 12/9/2013 11:38' prior: 78977002! testBecomeCompactAndUncompact | originalCompactClassesArray | aClass := self makeWithLayout: FixedLayout. self assert: aClass indexIfCompact equals: 0. originalCompactClassesArray := Smalltalk compactClassesArray copy. [ "The class becomes compact, so we are not in the original state." aClass becomeCompact. self assert: aClass indexIfCompact > 0. self deny: Smalltalk compactClassesArray = originalCompactClassesArray. ] ensure: [ "The class becomes uncompact, so we are back in the original state." aClass becomeUncompact. self assert: aClass indexIfCompact equals: 0. self assert: Smalltalk compactClassesArray equals: originalCompactClassesArray. ]. ! ! !SlotIntegrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78977788! testCopyPreservesLayout aClass := self makeWithLayout: FixedLayout. anotherClass := aClass copy. self deny: anotherClass layout isNil. self assert: aClass layout host == aClass. self assert: anotherClass layout host == anotherClass.! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48534399! testVariableCanExtendPointer self should: [ :builder | builder layoutClass: FixedLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48532983! testPointerCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48532717! testPointerCanExtendPointer self should: [ :builder | builder layoutClass: FixedLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48531206! testByteCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: FixedLayout; slots: { #a }. ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48533253! testPointerCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48533520! testPointerCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 48535992! testWordCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: FixedLayout; slots: { #a } ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78979285! testVariableCanExtendPointer self should: [ :builder | builder layoutClass: FixedLayout ] extendWith: [ :builder | builder layoutClass: VariableLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78979568! testPointerCanExtendVariable self should: [ :builder | builder layoutClass: VariableLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-valid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78979851! testPointerCanExtendPointer self should: [ :builder | builder layoutClass: FixedLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78980132! testByteCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: FixedLayout; slots: { #a }. ] extendWith: [ :builder | builder layoutClass: ByteLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78980449! testPointerCannotExtendByte self shouldnt: [ :builder | builder layoutClass: ByteLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78980731! testPointerCannotExtendWord self shouldnt: [ :builder | builder layoutClass: WordLayout ] extendWith: [ :builder | builder layoutClass: FixedLayout ]! ! !SlotLayoutExtensionTest methodsFor: 'tests-invalid extensions' stamp: 'MartinDias 12/9/2013 11:38' prior: 78981013! testWordCannotExtendPointerWithFields self shouldnt: [ :builder | builder layoutClass: FixedLayout; slots: { #a } ] extendWith: [ :builder | builder layoutClass: WordLayout ]! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48538127! testChangeLayoutTypeToByte aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. "Change the layout of the class from pointer to bytes" aClass := self makeWithLayout: ByteLayout. aClass layout checkIntegrity. self assert: aClass layout isBits. self assert: aClass instVarNames isEmpty.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48537714! testChangeLayoutTypeFromByte aClass := self makeWithLayout: ByteLayout. "Change the layout of the class from bytes to pointer" aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. aClass layout checkIntegrity. self deny: aClass layout isBits. self assert: aClass instVarNames equals: { #id. #name }.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48536798! testAddSlotPropagateAndMigrate "We create a class without slots and a subclass, and create an instance of the latter; then we add a slot to superclass and check the instance can hold a value." | superclass subclass | superclass := self makeWithLayout: FixedLayout. subclass := self make: [ :builder | builder superclass: superclass; name: self anotherClassName. ]. superclass layout checkIntegrity. subclass layout checkIntegrity. instance := subclass new. "now we extend it with slots. The class definition should've changed" superclass := self makeWithLayout: FixedLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarNamed: 'aSlot' put: 42. self assert: (instance instVarNamed: 'aSlot') equals: 42. superclass layout checkIntegrity. subclass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48545111! testSwitchSlotsAndMigrate aClass := self makeWithLayout: FixedLayout andSlots: { #a. #b }. aClass compile: 'a ^a'; compile: 'b ^b'. instance := aClass new. instance instVarNamed: #a put: $A. instance instVarNamed: #b put: $B. "now we switch the slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #b. #a }. self assert: (instance instVarAt: 1) equals: $B. self assert: (instance instVarAt: 2) equals: $A. self assert: (instance instVarNamed: #a) equals: $A. self assert: (instance instVarNamed: #b) equals: $B. "it should have migrated methods" self assert: instance a equals: $A. self assert: instance b equals: $B. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 67119243! testReshapeByteVariableToPointerPropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: ByteLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: ByteLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be of type variable byte" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable. self assert: each isBytes. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: FixedLayout; slots: { #x } ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed description: each name, ' was not reshaped.'. self assert: each isPointers description: each name, ' was not reshaped.' ].! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48536268! testAddSlotAndMigrate "We create a class without slots and create an instance; then we add a slot and check the instance can hold a value." aClass := self makeWithLayout: FixedLayout. instance := aClass new. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarAt: 1 put: 125. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48539076! testRedefineSuperclass "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: FixedLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. self makeWithLayout: FixedLayout. superclass layout checkIntegrity. class layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48544503! testSuperclassChangeLayoutType "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: ByteLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. "Change the layout of the superclass from bytes to pointer" self makeWithLayout: FixedLayout. superclass layout checkIntegrity. class layout checkIntegrity. self deny: superclass layout isBits. self assert: class layout isBits.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48543529! testShiftSlotAndMigrate aClass := self makeWithLayout: FixedLayout andSlots: { #a. #c }. aClass compile: 'a ^a'. aClass compile: 'c ^c'. instance := aClass new. instance instVarNamed: #a put: 1. instance instVarNamed: #c put: 3. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #a. #b. #c }. "it should have added an instance variable with nil in the middle" self assert: (instance instVarAt: 1) equals: 1. self assert: (instance instVarAt: 2) equals: nil. self assert: (instance instVarAt: 3) equals: 3. self assert: (instance instVarNamed: #a) equals: 1. self assert: (instance instVarNamed: #b) equals: nil. self assert: (instance instVarNamed: #c) equals: 3. "it should have migrated methods" self assert: instance a equals: 1. self assert: instance c equals: 3. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 67120729! testReshapePointerToByteVariablePropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: FixedLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: FixedLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: FixedLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: FixedLayout ]. "all the classes in the hierarchy should be of type fixed pointers" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed. self assert: each isPointers. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable description: each name, ' was not reshaped.'. self assert: each isBytes description: each name, ' was not reshaped.' ].! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48539544! testRemoveSlotAndMigrate "We create a class with a slot and create an instance; then we remove the slot and check the instance doesn't hold the value." aClass := self makeWithLayout: FixedLayout andSlots: { #aSlot }. instance := aClass new. "it should have an instance variable" instance instVarAt: 1 put: 125. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout. self should: [ instance instVarAt: 1 ] raise: Error. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 48538523! testChangingFormatKeepsMethod aClass := self make: [ :builder | builder name: self aClassName; layoutClass: FixedLayout ]. aClass compile: 'a ^self'. self assert: (aClass methodDictionary includesKey: #a). anotherClass := self make: [ :builder | builder name: self aClassName; layoutClass: VariableLayout . ]. self assert: (anotherClass methodDictionary includesKey: #a). aClass layout checkIntegrity. anotherClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78983346! testChangeLayoutTypeToByte aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. "Change the layout of the class from pointer to bytes" aClass := self makeWithLayout: ByteLayout. aClass layout checkIntegrity. self assert: aClass layout isBits. self assert: aClass instVarNames isEmpty.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78983757! testChangeLayoutTypeFromByte aClass := self makeWithLayout: ByteLayout. "Change the layout of the class from bytes to pointer" aClass := self makeWithLayout: FixedLayout andSlots: { #id. #name }. aClass layout checkIntegrity. self deny: aClass layout isBits. self assert: aClass instVarNames equals: { #id. #name }.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78984185! testAddSlotPropagateAndMigrate "We create a class without slots and a subclass, and create an instance of the latter; then we add a slot to superclass and check the instance can hold a value." | superclass subclass | superclass := self makeWithLayout: FixedLayout. subclass := self make: [ :builder | builder superclass: superclass; name: self anotherClassName. ]. superclass layout checkIntegrity. subclass layout checkIntegrity. instance := subclass new. "now we extend it with slots. The class definition should've changed" superclass := self makeWithLayout: FixedLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarNamed: 'aSlot' put: 42. self assert: (instance instVarNamed: 'aSlot') equals: 42. superclass layout checkIntegrity. subclass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78985114! testSwitchSlotsAndMigrate aClass := self makeWithLayout: FixedLayout andSlots: { #a. #b }. aClass compile: 'a ^a'; compile: 'b ^b'. instance := aClass new. instance instVarNamed: #a put: $A. instance instVarNamed: #b put: $B. "now we switch the slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #b. #a }. self assert: (instance instVarAt: 1) equals: $B. self assert: (instance instVarAt: 2) equals: $A. self assert: (instance instVarNamed: #a) equals: $A. self assert: (instance instVarNamed: #b) equals: $B. "it should have migrated methods" self assert: instance a equals: $A. self assert: instance b equals: $B. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78985923! testReshapeByteVariableToPointerPropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: ByteLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: ByteLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be of type variable byte" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable. self assert: each isBytes. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: FixedLayout; slots: { #x } ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed description: each name, ' was not reshaped.'. self assert: each isPointers description: each name, ' was not reshaped.' ].! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78987424! testAddSlotAndMigrate "We create a class without slots and create an instance; then we add a slot and check the instance can hold a value." aClass := self makeWithLayout: FixedLayout. instance := aClass new. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #aSlot }. "it should have an instance variable" instance instVarAt: 1 put: 125. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78987967! testRedefineSuperclass "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: FixedLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. self makeWithLayout: FixedLayout. superclass layout checkIntegrity. class layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78988448! testSuperclassChangeLayoutType "This case reproduces a MNU found loading Moose." | superclass class | superclass := self makeWithLayout: ByteLayout. class := self make: [ :builder | builder superclass: superclass; layoutClass: ByteLayout; name: self anotherClassName. ]. "Change the layout of the superclass from bytes to pointer" self makeWithLayout: FixedLayout. superclass layout checkIntegrity. class layout checkIntegrity. self deny: superclass layout isBits. self assert: class layout isBits.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78989071! testShiftSlotAndMigrate aClass := self makeWithLayout: FixedLayout andSlots: { #a. #c }. aClass compile: 'a ^a'. aClass compile: 'c ^c'. instance := aClass new. instance instVarNamed: #a put: 1. instance instVarNamed: #c put: 3. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout andSlots: { #a. #b. #c }. "it should have added an instance variable with nil in the middle" self assert: (instance instVarAt: 1) equals: 1. self assert: (instance instVarAt: 2) equals: nil. self assert: (instance instVarAt: 3) equals: 3. self assert: (instance instVarNamed: #a) equals: 1. self assert: (instance instVarNamed: #b) equals: nil. self assert: (instance instVarNamed: #c) equals: 3. "it should have migrated methods" self assert: instance a equals: 1. self assert: instance c equals: 3. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78990058! testReshapePointerToByteVariablePropagatesToDeepHierarchy "create the original hierarchy" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: FixedLayout ]. anotherClass := self make: [ :builder | builder name:self anotherClassName; superclass: aClass; layoutClass: FixedLayout ]. yetAnotherClass := self make: [ :builder | builder name:self yetAnotherClassName; superclass: anotherClass; layoutClass: FixedLayout ]. yetYetAnotherClass := self make: [ :builder | builder name:self yetYetAnotherClassName; superclass: yetAnotherClass; layoutClass: FixedLayout ]. "all the classes in the hierarchy should be of type fixed pointers" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isFixed. self assert: each isPointers. ]. "change the top superclass" aClass := self make: [ :builder | builder name: self aClassName; superclass: Object; layoutClass: ByteLayout ]. "all the classes in the hierarchy should be reshaped as fixed" { aClass. anotherClass. yetAnotherClass. yetYetAnotherClass } do: [ :each | each layout checkIntegrity. self assert: each isVariable description: each name, ' was not reshaped.'. self assert: each isBytes description: each name, ' was not reshaped.' ].! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78991545! testRemoveSlotAndMigrate "We create a class with a slot and create an instance; then we remove the slot and check the instance doesn't hold the value." aClass := self makeWithLayout: FixedLayout andSlots: { #aSlot }. instance := aClass new. "it should have an instance variable" instance instVarAt: 1 put: 125. "now we extend it with slots. The class definition should've changed" self makeWithLayout: FixedLayout. self should: [ instance instVarAt: 1 ] raise: Error. aClass layout checkIntegrity.! ! !SlotMigrationTest methodsFor: 'tests' stamp: 'MartinDias 12/9/2013 11:38' prior: 78992153! testChangingFormatKeepsMethod aClass := self make: [ :builder | builder name: self aClassName; layoutClass: FixedLayout ]. aClass compile: 'a ^self'. self assert: (aClass methodDictionary includesKey: #a). anotherClass := self make: [ :builder | builder name: self aClassName; layoutClass: VariableLayout . ]. self assert: (anotherClass methodDictionary includesKey: #a). aClass layout checkIntegrity. anotherClass layout checkIntegrity.! ! ----End fileIn----! ----QUIT----2013-12-13T11:13:46.986164+01:00 Pharo.image priorSource: 28630210! ----STARTUP----2013-12-13T11:19:43.769937+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-13T11:19:43.935934+01:00 Pharo-30641.image priorSource: 28670376! ----STARTUP----2013-12-13T14:11:47.098699+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----2013-12-13T14:11:52.138697+01:00 Pharo.image priorSource: 28670573! ----STARTUP----2013-12-13T14:17:44.215096+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-13T14:17:44.391094+01:00 Pharo-30642.image priorSource: 28670824! ----STARTUP----2013-12-13T15:35:41.137298+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/13/2013 15:23' prior: 78948066! commentForCurrentUpdate ^ '12421 Fix DateAndTimeTest >> #testNotSymmetricWithString https://pharo.fogbugz.com/f/cases/12421 12420 DynamicSpecExample uses deprecated messages https://pharo.fogbugz.com/f/cases/12420 12423 Subclass of undefined classes should be subclasses of Object and not ProtoObject https://pharo.fogbugz.com/f/cases/12423 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/13/2013 15:24'! script296 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1703.mcz KernelTests-MarcusDenker.604.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.66.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.147.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.396.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.160.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1371.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/13/2013 14:41'! update30641 "sync" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/13/2013 14:42'! update30642 "sync" ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/13/2013 15:24'! update30643 "self new update30643" self withUpdateLog: '12421 Fix DateAndTimeTest >> #testNotSymmetricWithString https://pharo.fogbugz.com/f/cases/12421 12420 DynamicSpecExample uses deprecated messages https://pharo.fogbugz.com/f/cases/12420 12423 Subclass of undefined classes should be subclasses of Object and not ProtoObject https://pharo.fogbugz.com/f/cases/12423 12165 #testObsoleteBehaviors failing after running native boost tests https://pharo.fogbugz.com/f/cases/12165 '. self loadTogether: self script296 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateAndTimeTest methodsFor: 'tests - under design' stamp: 'CamilloBruni 12/13/2013 05:34' prior: 20432141! testNotSymmetricWithString "self debug: #testNotSymmetricWithString" | t1 t2 | t1 := DateAndTime year: 1 month: 1 day: 2 hour: 2 minute: 3 second: 4 nanoSecond: 5 offset: 6 hours. t2 := '0001-01-02T02:03:04.000000005+06:00'. self deny: t1 = t2. self deny: t2 = t1. ! ! !DynamicSpecExample methodsFor: 'accessing' stamp: 'PavelKrivanek 12/13/2013 11:19' prior: 36152061! object ^ object value! ! !DynamicSpecExample methodsFor: 'accessing' stamp: 'PavelKrivanek 12/13/2013 11:18' prior: 36152180! object: anObject object value: anObject! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'PavelKrivanek 12/13/2013 11:20' prior: 36152317! open object value ifNil: [ ^ self openOnNil ]. object value isInteger ifTrue: [ ^ self openOnInteger ]. object value isString ifTrue: [ ^ self openOnString ]! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'PavelKrivanek 12/13/2013 11:19' prior: 69684757! openOnInteger | ui layout | ui := DynamicComposableModel new. ui title: self title. ui instantiateModels: #( text LabelModel plus ButtonModel minus ButtonModel ). ui text text: object value asString. ui minus label: '-'; state: false; action: [ object value: object value -1. ui text text: object value asString ]. ui plus label: '+'; state: false; action: [ object value: object value +1. ui text text: object value asString ]. layout := SpecLayout composed newColumn: [ :c | c add: #text height: 25; newRow: [ :r | r add: #minus ; addSplitter; add: #plus ] height: 25 ]; yourself. ui openWithSpecLayout: layout.! ! !DynamicSpecExample methodsFor: 'protocol' stamp: 'PavelKrivanek 12/13/2013 11:21' prior: 69685988! openOnString | ui layout bottomLayout temp | ui := DynamicComposableModel new. ui title: self title. ui instantiateModels: #( label LabelModel check CheckBoxModel text TextInputFieldModel button ButtonModel ). ui label text: object value. object whenChangedDo: [ :o | ui label text: o asString ]. ui text text: object value; enabled: true; acceptBlock: [ :string | self object: string ]. temp := object value. ui button label: 'reset'; state: false; action: [ ui text text: temp. self object: temp ]. layout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25; newRow: [ :r | r add: #text; add: #button ] height: 25 ]; yourself. bottomLayout := SpecLayout composed newColumn: [ :c | c newRow: [ :r | r add: #text; add: #button ] height: 25; newRow: [ :r | r add: #label; add: #check width: 100 ] height: 25 ]; yourself. ui check label: 'Label on top'; state: true; whenActivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: layout ]; whenDesactivatedDo: [ ui needFullRebuild: false. ui buildWithSpecLayout: bottomLayout ]. ui openWithSpecLayout: layout.! ! !UndefinedObject methodsFor: 'class hierarchy' stamp: 'ClementBera 12/13/2013 15:02' prior: 54480232! subclass: nameOfClass instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: poolDictnames category: category "Calling this method is now considered an accident. If you really want to create a class with a nil superclass, then create the class and then set the superclass using #superclass:" self traceCr: ('Attempt to create ', nameOfClass, ' as a subclass of nil. Possibly a class is being loaded before its superclass.'). ^ Object subclass: nameOfClass instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: poolDictnames category: category ! ! ReleaseTest removeSelector: #testObsoleteBehaviors! "Kernel"! "KernelTests"! "Spec-Examples"! "Tests"! ----End fileIn----! ----QUIT----2013-12-13T15:35:49.551292+01:00 Pharo.image priorSource: 28671021! ----STARTUP----2013-12-13T15:41:27.688864+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-13T15:41:27.862863+01:00 Pharo-30643.image priorSource: 28687236! ----STARTUP----2013-12-13T16:16:48.438423+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/13/2013 16:14' prior: 79002968! commentForCurrentUpdate ^ '11983 testOnForkErrorTakesLessThanOneSecond failing https://pharo.fogbugz.com/f/cases/11983 12424 testSizeInMemoryClasses is buggy https://pharo.fogbugz.com/f/cases/12424 12422 move icons from komitter to theme icons class https://pharo.fogbugz.com/f/cases/12422 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/13/2013 16:14'! script297 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1703.mcz KernelTests-MarcusDenker.606.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.147.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.396.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.141.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.160.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1371.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.13.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/13/2013 16:14'! update30644 "self new update30644" self withUpdateLog: '11983 testOnForkErrorTakesLessThanOneSecond failing https://pharo.fogbugz.com/f/cases/11983 12424 testSizeInMemoryClasses is buggy https://pharo.fogbugz.com/f/cases/12424 12422 move icons from komitter to theme icons class https://pharo.fogbugz.com/f/cases/12422 '. self loadTogether: self script297 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Komitter commentStamp: '' prior: 77765058! I am the entry point of this project. A classic inkoation is | s k | s := KomitStagingArea forDirtyPackages. k := Komitter new. k stagingArea: s. k open. k lastCommit ! !KomitterUI commentStamp: '' prior: 78626921! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !ThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:43'! historyIcon ^ self blankIcon.! ! !ThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:42'! komitterIcon ^ self blankIcon.! ! !Komitter commentStamp: '' prior: 79030835! I am the entry point of this project. A classic inkoation is | s k | s := KomitStagingArea forDirtyPackages. k := Komitter new. k stagingArea: s. k open. k lastCommit ! !Komitter class methodsFor: 'icon' stamp: 'EstebanLorenzano 12/13/2013 14:45' prior: 77768350! taskbarIcon ^ Smalltalk ui icons komitterIcon! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:44'! historyIcon ^ icons at: #'historyIcon' ifAbsentPut:[ Pharo3UIThemeIcons form16x16FromContents: self historyIconContents ].! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:44'! historyIconContents ^ #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286673726 4286673726 4286673726 4286673726 4286673726 0 0 0 4278217148 4278217148 4278217148 4278217148 4286673726 4286673726 0 0 4288516712 4294967295 4294967295 4294967295 4294967295 4286673726 4286673726 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288516712 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288516712 4284839308 0 4288253803 4294967295 4291942109 4291482074 4294967295 4294967295 4294967295 4278217148 4286104319 4286104319 4286104319 4278217148 4294967295 4288253803 4284839308 0 4287925358 4294967295 4294967295 4294967295 4290759126 4290759126 4294967295 4278217148 4286038527 4286038527 4286039039 4278217148 4294967295 4287925358 4284707465 0 4287465586 4294705151 4291942109 4291482074 4294705151 4294705151 4294705151 4278216120 4285971967 4285971967 4285971967 4278216633 4294705151 4287465586 4284444294 0 4287005814 4294376959 4294376959 4294376959 4290759126 4290759126 4294376959 4278215349 4285840127 4285840127 4285840127 4278215862 4294376959 4287005814 4284115330 0 4286480763 4294114047 4291942109 4291482074 4294114047 4294114047 4294114047 4278214064 4285708287 4285643519 4285708799 4278214319 4294114047 4286480763 4283786365 0 4286086271 4293785343 4293785343 4293785343 4290759126 4290759126 4293785343 4278213034 4285641983 4285641983 4285641983 4278213034 4293785343 4286086271 4283391608 0 4285626499 4293522687 4293522687 4293522687 4293522687 4293522687 4293522687 4278211492 4285444351 4285378815 4285378815 4278212003 4293457151 4285626499 4283062642 0 4285298055 4285298055 4285298055 4285298055 4285298055 4293325311 4293325311 4278210466 4285116671 4285116671 4285181951 4278210465 4285298055 4285298055 4282733421 0 0 4282207077 4282207077 4282207077 4285035401 4285035401 4285035401 4278209949 4284918783 4284786943 4284787455 4278209949 4282141286 4282207077 4282207078 0 0 0 0 0 4282141542 4282009699 4282009699 4278209949 4284721919 4278209949 4284525311 4278209949 0 0 0 0 0 0 0 0 0 0 0 4278209949 4278209949 0 4278209949 4278209949 0 0 0 0 0 0 0 0 0 0 0 0 4278209949 0 0 4278209949 0 0 0)! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:41'! komitterIcon ^ icons at: #'komitterIcon' ifAbsentPut:[ Pharo3UIThemeIcons form16x16FromContents: self komitterIconContents ].! ! !EclipseUIThemeIcons methodsFor: '*Komitter-UI' stamp: 'EstebanLorenzano 12/13/2013 14:40'! komitterIconContents ^ #(0 4291344726 4291011108 4291012395 4291011367 4290812957 4290613780 4291344726 0 0 0 0 0 0 0 0 4290950202 4294761036 4294698101 4294834877 4294767789 4294568578 4294303329 4294363448 4290950202 0 0 0 0 0 0 0 4291209781 4294761294 4294697579 4294834877 4294767789 4294568578 4294303329 4294363448 4290215691 0 0 0 0 0 0 0 4290483257 4293638436 4294435416 4294702476 4294568309 4294170434 4293640485 4293762572 4290874662 0 0 0 0 0 0 0 4290417209 4294302048 4294701206 4294834877 4294767789 4294568578 4294303329 4294363448 4290874662 0 0 0 0 0 0 0 4290483000 4294302048 4294701206 4294834877 4294767788 4294568577 4294303329 4294363448 4290940453 0 0 0 0 0 0 0 4290548791 4294302048 4294700950 4294834878 4294768043 4294568576 4294303330 4294363449 4290940453 0 0 0 0 0 0 0 4290614582 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 4291148953 0 4290680630 4290427290 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4294441212 4290427290 0 4290680374 4290427290 4294441212 4287603139 4294309882 4287603139 4294309882 4294309882 4287603139 4287603139 4294441212 4287603139 4287603139 4294309882 4290427290 0 4290680376 4289835439 4294309882 4287011519 4294048510 4287011519 4294048510 4287011519 4294309882 4294309882 4294309882 4287011519 4294048510 4294309882 4289835439 0 4290680378 4289375144 4294048510 4286549936 4294048510 4286549936 4294048510 4286549936 4294048510 4294048510 4294048510 4294048510 4286549936 4294048510 4289375144 0 0 4288522415 4293523711 4293523711 4285957539 4293523711 4293523711 4293523711 4285957539 4285957539 4293523711 4285957539 4285957539 4293523711 4288522415 0 0 4288522415 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4293523711 4288522415 0 0 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 4287996342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)! ! !KomitterUI commentStamp: '' prior: 79031067! I am a new UI to help Pharo coder to save their code with a finer granularity that a whole package! !KomitterUI class methodsFor: 'icons' stamp: 'EstebanLorenzano 12/13/2013 14:45' prior: 78141577! historyIcon ^ Smalltalk ui icons historyIcon ! ! !BlockClosureTest methodsFor: 'tests - on-fork' stamp: 'CamilloBruni 12/13/2013 05:49' prior: 18260372! testOnForkErrorTakesLessThanOneSecond "Test that if code runs with error, there is fork" | sema timeout | self flag: 'The following line makes the test pass under headless linux. Everywhere else this test works'. Smalltalk os isUnix ifTrue: [ 1 milliSecond wait ]. sema := Semaphore new. [ 1/0 ] on: Exception fork: [ sema signal ]. timeout := (sema waitTimeoutSeconds: 1). self assert: timeout == false. ! ! Komitter class removeSelector: #iconData! SizeInMemoryTest removeSelector: #testSizeInMemoryClasses! "KernelTests"! "Komitter"! ----End fileIn----! ----QUIT----2013-12-13T16:16:54.738409+01:00 Pharo.image priorSource: 28687433! ----STARTUP----2013-12-13T16:22:47.419697+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-13T16:22:47.595769+01:00 Pharo-30644.image priorSource: 28706146! ----STARTUP----2013-12-15T15:24:52.025835+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/15/2013 15:22' prior: 79019380! commentForCurrentUpdate ^ '12395 ThreadSafeTranscript examples do not work due to a missing method https://pharo.fogbugz.com/f/cases/12395 12428 Error while printing element https://pharo.fogbugz.com/f/cases/12428'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/15/2013 15:22'! script298 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.133.mcz FileSystem-Disk-MarcusDenker.68.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.341.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1703.mcz KernelTests-MarcusDenker.606.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-StephaneDucasse.225.mcz Morphic-Core-MarcusDenker.26.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.147.mcz NOCompletion-MarcusDenker.43.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.148.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.451.mcz OpalCompiler-Tests-MarcusDenker.223.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.129.mcz Polymorph-Widgets-MarcusDenker.987.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.98.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.18.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.198.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.396.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.143.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.160.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1371.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.122.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/15/2013 15:23'! update30645 "self new update30645" self withUpdateLog: '12395 ThreadSafeTranscript examples do not work due to a missing method https://pharo.fogbugz.com/f/cases/12395 12428 Error while printing element https://pharo.fogbugz.com/f/cases/12428'. self loadTogether: self script298 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SmallDictionary class methodsFor: '*Spec-Inspector' stamp: 'NicolaiHess 12/14/2013 22:47'! inspectorClass ^ EyeDictionaryInspector! ! !ThreadSafeTranscript class methodsFor: 'declare' stamp: 'MarcusDenker 3/26/2010 16:57'! installThreadSafeAsSTranscript Smalltalk globals at: #STranscript put: (self new) "ThreadSafeTranscript open"! ! SmallDictionary removeSelector: #inspectorClass! "Spec-Inspector"! "Transcript"! ----End fileIn----! ----QUIT----2013-12-15T15:24:57.527832+01:00 Pharo.image priorSource: 28706343! ----STARTUP----2013-12-15T15:30:46.974093+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-15T15:30:47.150091+01:00 Pharo-30645.image priorSource: 28718331! ----STARTUP----2013-12-16T10:46:53.07643+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/16/2013 10:40' prior: 79038290! commentForCurrentUpdate ^ '12320 ifNotNilDo: --> ifNotNil: https://pharo.fogbugz.com/f/cases/12320'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/16/2013 10:42'! script299 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.70.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.606.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.226.mcz Morphic-Core-MarcusDenker.27.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.453.mcz OpalCompiler-Tests-MarcusDenker.224.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.15.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1372.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/16/2013 10:43'! update30646 "self new update30646" self withUpdateLog: '12320 ifNotNilDo: --> ifNotNil: https://pharo.fogbugz.com/f/cases/12320'. self loadTogether: self script299 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemReporter methodsFor: 'reporting' stamp: 'MarcusDenker 12/2/2013 14:11' prior: 51660536! reportVM: aStream self header: 'Virtual Machine' on: aStream. aStream nextPutAll: (Smalltalk vm vmFileName); cr; nextPutAll: (Smalltalk vm version); cr. Smalltalk vm buildDate ifNotNil: [:string | aStream nextPutAll: string; cr]. [Smalltalk vm platformSourceVersion ifNotNil: [:v | aStream nextPutAll: 'platform sources revision ', v; cr]] on: Warning do: ["unsupported primitive"]. [Smalltalk vm interpreterSourceVersion ifNotNil: [:v | aStream nextPutAll: 'VMMaker versionString ', v; cr]] on: Warning do: ["unsupported primitive"]. [Smalltalk vm interpreterClass ifNotNil: [:string | aStream nextPutAll: string; cr]. Smalltalk vm cogitClass ifNotNil: [:string | aStream nextPutAll: string; cr] ] on: Error do: ["unsupported primitives"] ! ! !DiskStore methodsFor: 'public' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 20887501! isReadable: aPath (self exists: aPath) ifFalse: [ ^ false ]. self flag: 'TODO: we need a decent primitive for this...'. (self basicOpen: aPath writable: false) ifNotNil: [ :id| Primitives close: id. ^ true]. ^ false! ! !DiskStore methodsFor: 'public' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 20887806! isWritable: aPath (self exists: aPath) ifFalse: [ ^ false ]. self flag: 'TODO: we need a decent primitive for this...'. (self basicOpen: aPath writable: true) ifNotNil: [ :id| Primitives close: id. ^ true]. ^ false! ! !TextMorph methodsFor: 'as yet unclassified ' stamp: 'MarcusDenker 12/2/2013 14:12' prior: 52776533! yellowButtonActivity: shiftKeyState "Invoke the text-editing menu. Check if required first!!" self wantsYellowButtonMenu ifFalse: [ ^ false ]. (self getMenu: shiftKeyState) ifNotNil: [ :menu| menu setInvokingView: self editor. menu invokeModal. self changed. ^ true]. ^ true! ! !FileList methodsFor: 'accessing' stamp: 'MarcusDenker 12/2/2013 14:14' prior: 46496155! reference: dir | tmpReference | "Set the path of the volume to be displayed." self okToChange ifFalse: [^ self]. tmpReference := dir ifNotNil: [ :d| d asFileReference] ifNil: [ FileSystem disk workingDirectory ]. tmpReference isReadable ifFalse: [ ^ self inform: ('Cannot read {1}' translated format: { tmpReference})]. reference := tmpReference. sortMode ifNil: [sortMode := #date]. volumeList := ((Array with: '[]'), reference pathSegments) withIndexCollect: [:each :i | ( String new: i-1 withAll: $ ), each]. volumeListIndex := volumeList size. self changed: #relabel. self changed: #volumeList. self updateFileList.! ! !HaloMorph methodsFor: 'events' stamp: 'MarcusDenker 12/2/2013 14:07' prior: 43517802! popUpFor: aMorph event: evt "This message is sent by morphs that explicitly request the halo on a button click. Note: anEvent is in aMorphs coordinate frame." | hand anEvent | self flag: #workAround. "We should really have some event/hand here..." anEvent := evt isNil ifTrue: [hand := aMorph world ifNotNil: [:w | w activeHand]. hand ifNil: [hand := aMorph world primaryHand]. hand lastEvent transformedBy: (aMorph transformedFrom: nil)] ifFalse: [hand := evt hand. evt]. self target: aMorph. hand halo: self. hand world addMorphFront: self. positionOffset := anEvent position - (aMorph point: aMorph position in: owner). self startStepping. ! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'MarcusDenker 12/2/2013 14:07' prior: 76779536! sourceCodeRefactoringMenu: aBuilder | target | target := aBuilder model. target selectedClass ifNotNil: [:selectedClass | selectedClass sourceCodeRefactoring: aBuilder ]! ! !NautilusRefactoring class methodsFor: 'menu' stamp: 'MarcusDenker 12/2/2013 14:11' prior: 76779851! sourceCodeRefactoringMenuHolder: aBuilder | target | target := aBuilder model. target selectedClass ifNotNil: [:selectedClass | selectedClass sourceCodeRefactoringMenu: aBuilder ].! ! !PSMCPatchMorph methodsFor: 'as yet unclassified' stamp: 'MarcusDenker 12/2/2013 14:14' prior: 28983555! selectionHasAcutalClass "Answer whether the currently selected change has an actual class in the image." ^self selectedChangeWrapper ifNil: [false] ifNotNil: [:w | w actualClass notNil]! ! !EyeAbstractInspector methodsFor: 'accessing' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 74112358! selectedElementDo: aBlock self selectedElement ifNotNil: aBlock! ! !RBMessageNode methodsFor: '*opalcompiler-core' stamp: 'MarcusDenker 12/2/2013 14:12' prior: 75385533! isInlineIfNil | assertNone assertOneOrNone | self methodNode compilationContext optionInlineIfNil ifFalse: [ ^false ]. self receiver isBlock ifTrue: [^ false]. self isCascaded ifTrue: [^ false]. (#(ifNil: ifNotNil: ifNil:ifNotNil: ifNotNil:ifNil:) includes: self selector) ifFalse: [^ false]. self arguments do: [:node | node isBlock ifFalse: [^ false]]. assertNone := [:block | block arguments isEmpty ifFalse: [self notify: 'ifNil: takes zero-arg block'. ^ false] ]. assertOneOrNone := [:block | block arguments size > 1 ifTrue: [self notify: 'ifNotNil: takes zero- or one-arg block'. ^ false] ]. self selector == #ifNil: ifTrue: [assertNone value: self arguments first]. self selector == #ifNil:ifNotNil: ifTrue: [assertNone value: self arguments first. assertOneOrNone value: self arguments last]. self selector == #ifNotNil: ifTrue: [assertOneOrNone value: self arguments first]. self selector == #ifNotNil:ifNil: ifTrue: [assertOneOrNone value: self arguments first. assertNone value: self arguments last]. ^ true! ! !UndefinedObject methodsFor: 'testing' stamp: 'MarcusDenker 12/2/2013 14:15' prior: 54482731! ifNil: nilBlock ifNotNilDo: ifNotNilBlock "please use #ifNil:ifNotNil: " ^ nilBlock value! ! !UndefinedObject methodsFor: 'testing' stamp: 'MarcusDenker 12/2/2013 14:13' prior: 54483065! ifNotNilDo: aBlock "Please use #ifNotNil: instead" ^ self ! ! !UndefinedObject methodsFor: 'testing' stamp: 'MarcusDenker 12/2/2013 14:16' prior: 54483193! ifNotNilDo: ifNotNilBlock ifNil: nilBlock "please use #ifNotNil:ifNil: " ^ nilBlock value! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'MarcusDenker 12/2/2013 14:11' prior: 76642019! openSources: fullSourcesName forImage: imagePath "We first do a check to see if a compressed version ofthe sources file is present. Open the .sources file read-only after searching in: a) the directory where the VM lives b) the directory where the image came from c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it). " | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" OSPlatform current potentialLocationsOfSourcesFile do: [ :dir | (sourcesFile := dir / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ] ]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ]. ^ nil! ! !NumberParser class methodsFor: 'instance creation' stamp: 'MarcusDenker 12/2/2013 14:07' prior: 28533444! squeezeNumberOutOfString: stringOrStream onError: errorBlock "Try and find a number in this string. First, look if the string starts with a number. Then, see if it ends with a number. Then, remove a character from the front and see if the remaining string makes a number. Repeat the process until no characters are left or the number has been found. As soon as a number is found, it is returned. Otherwise, the method fails." | string | string := stringOrStream. stringOrStream size timesRepeat: [ (self parse: string onError: [ nil ]) ifNotNil: [ :result| ^ result ]. string := string allButFirst ]. ^ errorBlock value! ! !RBMissingSuperSendsRule methodsFor: 'running' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 30802205! checkMethod: aContext | definer superMethod | (aContext selectedClass isMeta not and: [ self superMessages includes: aContext selector ]) ifTrue: [ definer := aContext selectedClass superclass ifNotNil: [ :sc | sc whichClassIncludesSelector: aContext selector ]. definer ifNotNil: [ "super defines same method" (aContext superMessages includes: aContext selector) ifFalse: [ "but I don't call it" superMethod := definer compiledMethodAt: aContext selector ifAbsent: [ ]. (superMethod isReturnSelf or: [ superMethod sendsSelector: #subclassResponsibility ]) ifFalse: [ result addClass: aContext selectedClass selector: aContext selector ] ] ] ]! ! !EvaluateCommandLineHandler methodsFor: 'activation' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 21248414! evaluateStdIn | stdin | stdin := FileStream stdin ifNil: [ ^ self ]. stdin atEnd ifTrue: [ ^ self ]. self flag: #todo. "the whole compilation machinery does not work with stdin directly, hence we load everything a buffer first" self evaluate: (String streamContents: [ :s| [ stdin atEnd ] whileFalse: [ stdin next ifNotNil: [ :char| s nextPut: char ]]])! ! !FileSystemDirectoryEntry methodsFor: 'printing' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 22039642! printOn: aStream aStream nextPutAll: 'DirectoryEntry: '. reference ifNotNil: [:ref | aStream nextPutAll: reference printString].! ! !Morph methodsFor: 'menu' stamp: 'MarcusDenker 12/2/2013 14:14' prior: 74746967! hasYellowButtonMenu "Answer true if I have any items at all for a context (yellow button) menu." ^ self wantsYellowButtonMenu or: [self modelOrNil ifNil: [false] ifNotNil: [:aModel | aModel hasModelYellowButtonMenuItems]]! ! !RGMethodDefinition methodsFor: '*Ring-Monticello' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 31695337! basicAsMCMethodDefinition "Creates a MCMethodDefinition from the receiver" self isActive ifTrue: [ self compiledMethod sourceFileStream ifNotNil: [ :file| ^ self asMCMethodDefinitionFromFile: file]]. ^ MCMethodDefinition className: self theNonMetaParentName classIsMeta: self isMetaSide selector: self selector category: self protocol timeStamp: self stamp source: self sourceCode! ! !SHTextStylerST80 methodsFor: 'private' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 41950751! privateStyle: aText (self rangesIn: aText setWorkspace: true) ifNotNil: [ :ranges| self setAttributesIn: aText fromRanges: ranges]! ! !SHTextStylerST80 methodsFor: 'private' stamp: 'MarcusDenker 12/2/2013 14:10' prior: 32595054! setAttributesIn: aText fromRanges: ranges "use the . to find and assign TextAttributes to aText" | charAttr oldRuns | oldRuns := aText runs. charAttr := Array new: aText size withAll: (self attributesFor: #default). ranges do: [:range | (self attributesFor: range type) ifNotNil: [ :attribute| charAttr from: range start to: range end put: attribute]]. self addLinkAttributesFor: ranges in: aText to: charAttr. aText runs: (RunArray newFrom: charAttr). self addAttributesFrom: oldRuns satisfying: [:each | each shoutShouldPreserve] to: aText.! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 29575334! yellowButtonActivity: shiftKeyState "Called when the shifted-menu's 'more' item is chosen" (self getMenu: shiftKeyState) ifNotNil: [ :menu| menu setInvokingView: self. menu invokeModal. ^ true]. ^ false! ! !Workspace methodsFor: 'file support' stamp: 'MarcusDenker 12/2/2013 14:14' prior: 74101358! suggestedFileName "If the workspace has an associated fileName use that, otherwise derive a reasonable file-name from the window label" self fileName ifNotNil: [ :f | ^ f ]. ^ (self containingWindow ifNil: ['Untitled'] ifNotNil: [ :window | window label ]), '.ws'! ! !ErrorNonInteractive methodsFor: 'accessing' stamp: 'MarcusDenker 12/2/2013 14:06' prior: 21244789! description ^ String streamContents: [ :s | s nextPutAll: 'An attempt to use interactive tools detected, while in non-interactive mode'. self messageText ifNotEmpty: [ :message| s cr; tab; nextPutAll: message ]. self exception ifNotNil: [ :ex | s cr; tab; print: ex ]].! ! !NOCModel methodsFor: 'accessing' stamp: 'MarcusDenker 12/2/2013 14:07' prior: 27904301! narrowWith: aString self narrowString: aString. self loadEntries. self nextModel ifNotNil: [:nm | nm narrowWith: aString].! ! !NECContext methodsFor: 'accessing' stamp: 'MarcusDenker 12/2/2013 14:07' prior: 27762229! createModel | modelClass | self receiverClass ifNotNil: [^ NECTypedModel class: receiverClass]. (controller workspace isNil and: [theClass notNil]) ifTrue: [completionIndex = 1 ifTrue: [^ NECOverrideModel class: theClass]]. modelClass := NECUntypedModel. (controller model respondsTo: #modelClass) ifTrue: [ controller model modelClass ifNotNil: [:class | modelClass := class]]. ^ modelClass class: theClass temporaries: self temporaries additionals: controller additionals variables: variables selectors: selectors! ! !OCRequestorScope methodsFor: 'lookup' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 45254144! lookupVar: name name = 'self' ifTrue: [ ^outerScope lookupVar: name]. name = 'super' ifTrue: [ ^outerScope lookupVar: name]. name first isUppercase ifTrue: [ ^outerScope lookupVar: name ]. (requestor bindingOf: name asSymbol) ifNotNil: [:assoc | ^ OCLiteralVariable new assoc: assoc; scope: self; yourself]. ^ super lookupVar: name. ! ! !Object methodsFor: 'nil testing' stamp: 'MarcusDenker 12/2/2013 14:15' prior: 48836706! ifNil: nilBlock ifNotNilDo: aBlock "please use #ifNil:ifNotNil: " ^ aBlock value: self ! ! !Object methodsFor: 'nil testing' stamp: 'MarcusDenker 12/2/2013 14:14' prior: 48836902! ifNotNilDo: aBlock "Please use #ifNotNil: instead" ^ aBlock value: self ! ! !Object methodsFor: 'nil testing' stamp: 'MarcusDenker 12/2/2013 14:15' prior: 48837090! ifNotNilDo: aBlock ifNil: nilBlock "please use #ifNotNil:ifNil: " ^ aBlock value: self ! ! !ScrollPane methodsFor: 'scroll bar events' stamp: 'MarcusDenker 12/2/2013 14:08' prior: 32858163! yellowButtonActivity: shiftKeyState (self getMenu: shiftKeyState) ifNotNil: [ :menu| menu setInvokingView: self. menu popUpEvent: self activeHand lastEvent in: self world. ^ true]. ^ false! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'MarcusDenker 12/2/2013 14:11' prior: 39674206! modalUnlockFrom: aSystemWindow "Unlock the receiver as a modal owner of the given window." aSystemWindow removeProperty: #modalOwner. self removeProperty: #modalChild. closeBox ifNotNil: [:cl | cl enabled: (self valueOfProperty: #preModalCloseEnabled ifAbsent: [true])]. self removeProperty: #preModalCloseEnabled. self activate! ! OCBytecodeDecompilerExamplesTest removeSelector: #testExampleIfNotNillDoReturnNil! OCBytecodeDecompilerExamplesTest removeSelector: #testExampleIfNotNillDo! OCASTCheckerTest removeSelector: #testExampleIfNotNilDoReturnNil! OCASTCheckerTest removeSelector: #testExampleIfNotNilDo! OCOpalExamples removeSelector: #exampleIfNotNilDoReturnNil! OCOpalExamples removeSelector: #exampleIfNotNilDo! OCASTTranslatorTest removeSelector: #testExampleIfNotNilDoReturnNil! OCASTTranslatorTest removeSelector: #testExampleIfNotNilDo! "FileSystem-Core"! "FileSystem-Disk"! "Files"! "Kernel"! "Morphic-Base"! "Morphic-Core"! "NECompletion"! "NOCompletion"! "NautilusRefactoring"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "Refactoring-Critics"! "Ring-Monticello"! "Shout"! "Spec-Inspector"! "System-CommandLine"! "Tools"! "UIManager"! ----End fileIn----! ----QUIT----2013-12-16T10:47:14.392428+01:00 Pharo.image priorSource: 28718528! ----STARTUP----2013-12-16T10:53:44.218327+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-16T10:53:44.388322+01:00 Pharo-30646.image priorSource: 28746000! ----STARTUP----2013-12-16T13:05:46.247841+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/16/2013 13:03' prior: 79050474! commentForCurrentUpdate ^ '12366 Merge Opal Repo with image https://pharo.fogbugz.com/f/cases/12366 12166 Add Settings to turn off compiler warnings https://pharo.fogbugz.com/f/cases/12166 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/16/2013 13:03'! script300 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.70.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.606.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.897.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.163.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.226.mcz Morphic-Core-MarcusDenker.27.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.29.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1372.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/16/2013 13:03'! update30647 "self new update30647" self withUpdateLog: '12366 Merge Opal Repo with image https://pharo.fogbugz.com/f/cases/12366 12166 Add Settings to turn off compiler warnings https://pharo.fogbugz.com/f/cases/12166 '. self loadTogether: self script300 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 42513072! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !CCompilationContext commentStamp: '' prior: 42146008! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !CompilationContext commentStamp: '' prior: 42191566! The compilationContext holds all information that is needed in the whole compiler chain. ! !OCASTTranslator commentStamp: 'ajh 3/24/2003 22:19' prior: 79089405! I visit an abstract syntax tree and generate IR (intermediate representation) instructions for each node by sending the appropriate message to my methodBuilder (an IRBuilder). I hold onto my two subclasses one for generating instructions for value, the other for generating instructions for effect.! !OCASTTranslator class methodsFor: 'initialize' stamp: 'ClementBera 11/26/2013 13:17'! initialize "OCASTTranslator initialize" super initialize. OptimizedMessages := { #caseOf: -> #emitCaseOf: . #caseOf:otherwise: -> #emitCaseOfOtherwise: . #ifFalse: -> #emitIfFalse: . #ifFalse:ifTrue: -> #emitIfFalseIfTrue: . #ifNil: -> #emitIfNil: . #ifNil:ifNotNil: -> #emitIfNilIfNotNil: . #ifNotNil: -> #emitIfNotNil: . #ifNotNil:ifNil: -> #emitIfNotNilIfNil: . #ifTrue: -> #emitIfTrue: . #ifTrue:ifFalse: -> #emitIfTrueIfFalse: . #or: -> #emitOr: . #and: -> #emitAnd: . #timesRepeat: -> #emitTimesRepeat: . #to:by:do: -> #emitToByDo: . #to:do: -> #emitToDo: . #whileFalse: -> #emitWhileFalse: . #whileTrue: -> #emitWhileTrue: . #whileFalse -> #emitWhileFalse: . #whileTrue -> #emitWhileTrue: } asDictionary! ! !OCASTTranslator methodsFor: 'visitor-double dispatching' stamp: 'ClementBera 11/20/2013 19:36' prior: 40083293! visitMessageNode: aMessageNode aMessageNode isInlined ifTrue: [ methodBuilder addLiteral: aMessageNode selector. "so searching for senders will work" ^self perform: (OptimizedMessages at: aMessageNode selector) with: aMessageNode]. ^ self emitMessageNode: aMessageNode! ! !CompilerSystemSettings class methodsFor: 'settings' stamp: 'ClementBera 11/26/2013 13:35' prior: 38948853! compilerSettingsOn: aBuilder (aBuilder group: #compiler) label: 'Compiler'; with: [ (aBuilder pickOne: #compilerClass) target: SmalltalkImage; label: 'Default Compiler'; domainValues: {Compiler. OpalCompiler}. (aBuilder setting: #warningAllowed) target: CompilationContext; label: 'Allow Warnings'; default: true]! ! !OpalCompiler class methodsFor: 'options' stamp: 'ClementBera 11/26/2013 13:20' prior: 69020172! defaultOptions ^ #( "by default we inline all optimized constructs" + optionInlineIf + optionInlineIfNil + optionInlineAndOr + optionInlineWhile + optionInlineToDo + optionInlineCase - optionInlineTimesRepeat - optionIlineNone "to turn off all. Overrides the others" - optionLongIvarAccessBytecodes "special for Contexts" + optionOptimizeIR )! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 12/16/2013 11:14' prior: 45069036! compile | cm | [ast := self parse. self doSemanticAnalysis. cm := ast generate: self compilationContext compiledMethodTrailer ] on: SyntaxErrorNotification do: [ :exception | self compilationContext requestor ifNotNil: [ self compilationContext requestor notify: exception errorMessage , ' ->' at: exception location in: exception errorCode. ^ self compilationContext failBlock value ] ifNil: [ exception pass ]]. ^cm! ! !OCSemanticWarning methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:31' prior: 38566580! errorNotification ^ compilationContext interactive and: [ compilationContext warningAllowed ]! ! !CCompilationContext commentStamp: '' prior: 79089773! I am a copy of the CompilationContext. It is used -> in the old Compiler so it is independed from Opal -> in the new Compiler the class CompilationContext parametrizes Opal to use this Context so it can add instance variables to the context. The second option is a workaround, we will need a copy of Opak to develop itself *or* need to add transactions to the language ;--)! !CCompilationContext class methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:42'! warningAllowed ^ WarningAllowed ifNil: [ WarningAllowed := true ]! ! !CCompilationContext class methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:42'! warningAllowed: aBoolean WarningAllowed := aBoolean! ! !CCompilationContext methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:42'! warningAllowed ^ self class warningAllowed! ! !CompilationContext commentStamp: '' prior: 79090217! The compilationContext holds all information that is needed in the whole compiler chain. ! !CompilationContext class methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:30'! warningAllowed ^ WarningAllowed ifNil: [ WarningAllowed := true ]! ! !CompilationContext class methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:30'! warningAllowed: aBoolean WarningAllowed := aBoolean! ! !CompilationContext methodsFor: 'accessing' stamp: 'ClementBera 11/26/2013 13:30'! warningAllowed ^ self class warningAllowed! ! "OpalCompiler-Core"! "Settings-Compiler"! ----End fileIn----! ----QUIT----2013-12-16T13:05:52.737844+01:00 Pharo.image priorSource: 28746197! ----STARTUP----2013-12-16T13:11:39.897766+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-16T13:11:40.059763+01:00 Pharo-30647.image priorSource: 28763562! ----STARTUP----2013-12-16T15:23:47.05706+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/16/2013 15:21' prior: 79078144! commentForCurrentUpdate ^ '12435 skip JobTest>#testCurrent to check https://pharo.fogbugz.com/f/cases/12435 12403 FileTreeUrl should be deprecated https://pharo.fogbugz.com/f/cases/12403 12433 clean up references to deprecated MailSender https://pharo.fogbugz.com/f/cases/12433'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/16/2013 15:21'! script301 ^ 'AST-Core-MarcusDenker.202.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.70.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.226.mcz Morphic-Core-MarcusDenker.27.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.618.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.112.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1372.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/16/2013 15:21'! update30648 "self new update30648" self withUpdateLog: '12435 skip JobTest>#testCurrent to check https://pharo.fogbugz.com/f/cases/12435 12403 FileTreeUrl should be deprecated https://pharo.fogbugz.com/f/cases/12403 12433 clean up references to deprecated MailSender https://pharo.fogbugz.com/f/cases/12433'. self loadTogether: self script301 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MailComposition commentStamp: '' prior: 42401795! a message being composed. When finished, it will be submitted via a Celeste.! !JobTest methodsFor: 'tests' stamp: 'MarcusDenker 12/16/2013 14:49' prior: 77616464! testCurrent self skip. "checking if this is the reason for stale processes" self assert: Job current isNil. [ :aJob | self assert: Job current equals: aJob. [ :anotherJob | self assert: Job current equals: anotherJob. ] asJob run. self assert: Job current equals: aJob. ] asJob run. self assert: Job current isNil. ! ! !MailComposition commentStamp: '' prior: 79107137! a message being composed. When finished, it will be submitted via a Celeste.! !MailComposition class methodsFor: 'smtp server' stamp: 'MarcusDenker 12/16/2013 14:43'! isSmtpServerSet ^ SmtpServer notNil and: [SmtpServer notEmpty] ! ! !MailComposition class methodsFor: 'smtp server' stamp: 'MarcusDenker 12/16/2013 14:43'! setSmtpServer "Set the SMTP server used to send outgoing messages via" SmtpServer ifNil: [SmtpServer := '']. SmtpServer := UIManager default request: 'What is your mail server for outgoing mail?' initialAnswer: SmtpServer. ! ! !MailComposition class methodsFor: 'smtp server' stamp: 'MarcusDenker 12/16/2013 14:43'! setSmtpServer: aString SmtpServer := aString! ! !MailComposition class methodsFor: 'smtp server' stamp: 'MarcusDenker 12/16/2013 14:43'! smtpServer "Answer the server for sending email" self isSmtpServerSet ifFalse: [self setSmtpServer]. SmtpServer isEmpty ifTrue: [ self error: 'no SMTP server specified' ]. ^SmtpServer! ! !MailComposition methodsFor: 'access' stamp: 'MarcusDenker 12/16/2013 14:44' prior: 25285297! smtpServer ^self class smtpServer! ! !MCVersionNotification methodsFor: 'error handling' stamp: 'MarcusDenker 12/16/2013 14:44' prior: 69983744! notify: aString | message | message := self messageTo: aString. SMTPClient deliverMailFrom: message from to: (Array with: message to) text: message text usingServer: MailComposition smtpServer! ! MailComposition class removeSelector: #unload! MailComposition class removeSelector: #initialize! FileTreeUrl removeSelector: #mcRepositoryAsUser:withPassword:! FileTreeUrl class removeSelector: #schemeName! Smalltalk globals removeClassNamed: #FileTreeUrl! "KernelTests"! "Monticello"! "MonticelloFileTree-Core"! "Network-Mail"! ----End fileIn----! ----QUIT----2013-12-16T15:23:54.213061+01:00 Pharo.image priorSource: 28763759! ----STARTUP----2013-12-16T15:29:46.286364+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-16T15:29:46.464365+01:00 Pharo-30648.image priorSource: 28777849! ----STARTUP----2013-12-16T20:32:51.275985+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/16/2013 20:29' prior: 79095705! commentForCurrentUpdate ^ '11437 export settings in 3.0 cause a startup error when loading settings https://pharo.fogbugz.com/f/cases/11437 12431 DNU on Export Settings in Settings https://pharo.fogbugz.com/f/cases/12431 12416 File Permissions on Root not working https://pharo.fogbugz.com/f/cases/12416 12306 adding a group does not display it https://pharo.fogbugz.com/f/cases/12306 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/16/2013 20:30'! script302 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.226.mcz Morphic-Core-MarcusDenker.27.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.620.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.258.mcz Spec-Debugger-MarcusDenker.179.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.996.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1372.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/16/2013 20:30'! update30649 "self new update30649" self withUpdateLog: '11437 export settings in 3.0 cause a startup error when loading settings https://pharo.fogbugz.com/f/cases/11437 12431 DNU on Export Settings in Settings https://pharo.fogbugz.com/f/cases/12431 12416 File Permissions on Root not working https://pharo.fogbugz.com/f/cases/12416 12306 adding a group does not display it https://pharo.fogbugz.com/f/cases/12306 '. self loadTogether: self script302 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBProgramNode class methodsFor: 'accessing' stamp: 'MarcusDenker 12/16/2013 20:16'! formatterClass: aClass FormatterClass := aClass ! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'MarcusDenker 12/16/2013 15:45' prior: 49424277! addNewGroup [ self groupsManager createAnEmptyStaticGroup ] on: GroupAlreadyExists do:[ :ex | self alertGroupExisting: ex ]. self updatePackageView. ! ! !SettingBrowser methodsFor: '*StartupPreferences' stamp: 'MarcusDenker 12/16/2013 20:04' prior: 76215035! exportAllSettings: actions by: groupSize withBasename: aString "Export all settings in files. No more than groupSize settings will be exported to the same file. If there are more than groupSize settings, settings will be exported in multiple files (named aString%d.st, with %d a number increasing from 1 to (actions size / groupSize)." | index | index := 1. actions groupsOf: groupSize atATimeDo: [ :setting | self exportSettings: setting toFileNamed: aString , index printString , '.st'. index := index + 1 ]. self exportSettings: (actions last: (actions size rem: groupSize)) toFileNamed: aString , index printString , '.st'! ! !DiskStore methodsFor: 'private' stamp: 'NicolaiHess 12/14/2013 13:46' prior: 20891419! rootNode ^ #('' 0 0 true 0 8r555)! ! "AST-Core"! "FileSystem-Disk"! "Nautilus"! "StartupPreferences"! ----End fileIn----! ----QUIT----2013-12-16T20:32:58.193984+01:00 Pharo.image priorSource: 28778046! ----STARTUP----2013-12-16T20:38:51.593873+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-16T20:38:51.783876+01:00 Pharo-30649.image priorSource: 28791307! ----STARTUP----2013-12-17T17:17:53.232519+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/17/2013 17:15' prior: 79109993! commentForCurrentUpdate ^ '12444 TextModel>>menuHolder: raises deprecation warning https://pharo.fogbugz.com/f/cases/12444 12389 Debugger should highlight the problems the first time it shows the code pane https://pharo.fogbugz.com/f/cases/12389 12356 Introduce dependents on Model https://pharo.fogbugz.com/f/cases/12356 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/17/2013 17:15'! script303 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.210.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.226.mcz Morphic-Core-MarcusDenker.27.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.620.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.260.mcz Spec-Debugger-MarcusDenker.181.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.94.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1372.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/17/2013 17:15'! update30650 "self new update30650" self withUpdateLog: '12444 TextModel>>menuHolder: raises deprecation warning https://pharo.fogbugz.com/f/cases/12444 12389 Debugger should highlight the problems the first time it shows the code pane https://pharo.fogbugz.com/f/cases/12389 12356 Introduce dependents on Model https://pharo.fogbugz.com/f/cases/12356 '. self loadTogether: self script303 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecPreDebugWindow methodsFor: 'actions' stamp: 'NicolaiHess 12/17/2013 16:30' prior: 69324623! openFullDebugger | currentDebugger | currentDebugger := self debugger. self debugger: nil. self close. currentDebugger openWithSpec; updateToolbar; resetAutoRefresh; updateCodeFromContext; label: title! ! !Model methodsFor: 'dependents' stamp: 'BenjaminVanRyseghem 12/6/2013 10:59'! dependents "Answer a collection of objects that are 'dependent' on the receiver; that is, all objects that should be notified if the receiver changes." ^ self myDependents ifNil: [#()]! ! !TextModel methodsFor: 'protocol' stamp: 'AndreiChis 12/17/2013 14:24' prior: 76218045! menuHolder "Return the block used to calculate the text selection" ^ menuHolder value! ! !TextModel methodsFor: 'protocol' stamp: 'AndreiChis 12/17/2013 14:24' prior: 76218237! menuHolder: aBlock "Set the block used to compute the menu" ^ menuHolder value: aBlock! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'NicolaiHess 12/17/2013 16:30'! updateCodeFromContext self updateCodeFromContext:self context! ! "Spec-Core"! "Spec-Debugger"! "System-Support"! ----End fileIn----! ----QUIT----2013-12-17T17:17:59.5745+01:00 Pharo.image priorSource: 28791504! ----STARTUP----2013-12-17T17:24:09.95365+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-17T17:24:10.127652+01:00 Pharo-30650.image priorSource: 28804529! ----STARTUP----2013-12-18T09:57:55.236107+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/18/2013 09:54' prior: 79123451! commentForCurrentUpdate ^ '12063 ConfigurationBrowser window about message is wrong (and dated) https://pharo.fogbugz.com/f/cases/12063 12406 EllipseMidpointTracer should be move to Morphic-Core https://pharo.fogbugz.com/f/cases/12406 12445 ZnUrl>>asFileReference cannot resolve #filetree https://pharo.fogbugz.com/f/cases/12445 12446 Specs MorphicWindowAdapter missing #aboutTitle https://pharo.fogbugz.com/f/cases/12446 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/18/2013 09:54'! script304 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.228.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.620.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.295.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.260.mcz Spec-Debugger-MarcusDenker.181.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.96.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1374.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/18/2013 09:54'! update30651 "self new update30651" self withUpdateLog: '12063 ConfigurationBrowser window about message is wrong (and dated) https://pharo.fogbugz.com/f/cases/12063 12406 EllipseMidpointTracer should be move to Morphic-Core https://pharo.fogbugz.com/f/cases/12406 12445 ZnUrl>>asFileReference cannot resolve #filetree https://pharo.fogbugz.com/f/cases/12445 12446 Specs MorphicWindowAdapter missing #aboutTitle https://pharo.fogbugz.com/f/cases/12446 '. self loadTogether: self script304 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigurationBrowser commentStamp: '' prior: 45174371! Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. MetacelloConfigurationBrowser is simple tool to browse and load Metacello configurations from particular repositories typically named 'MetaRepoForPharoXY' (where X denotes the Pharo major version and Y denotes the minor version. e.g. MetaRepoForPharo30 is Pharo 3.0) MetaRepoForPharoXY is the short form of MetacelloRepositoriesForPharoXY since the source limits the length of the project name. The default repository is configured by #pharoDistributionRepository as...! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenComan 12/18/2013 01:34'! aboutTitle ^ self model model ifNotNil: [ :m | (m respondsTo: #aboutTitle) ifTrue: [m aboutTitle] ifFalse: [m class name]].! ! !ZnUrl methodsFor: '*gofer-core-accessing' stamp: 'EstebanLorenzano 12/17/2013 16:15'! asFileReferenceWithRelativePath "Convert the receiver into a new FileReference object accepting relative paths. This works for filetree (a special pharo format). Note that for a FileReference a trailing slash is not relevant" | path | self assert: self scheme = #filetree description: 'Only filetree:// URL can be converted to a FileReference with relative Paths'. self isSlash ifTrue: [ ^ FileSystem root ]. path := self host ifNotNil: [ segments copyWithFirst: self host ] ifNil: [ segments copyWithFirst: FileSystem disk delimiter asString ]. ^ (String streamContents: [ :stream | path asStringOn: stream delimiter: FileSystem disk delimiter asString ]) asFileReference! ! !ZnUrl methodsFor: '*gofer-core-accessing' stamp: 'EstebanLorenzano 12/17/2013 16:23' prior: 75743086! mcRepositoryAsUser: usernameString withPassword: passwordString self isHttp | self isHttps ifTrue: [ ^ MCHttpRepository location: self asString user: usernameString password: passwordString ]. self isFile ifTrue: [ ^ MCDirectoryRepository new directory: self asFileReference ]. self scheme = #filetree ifTrue: [ ^ MCFileTreeRepository new directory: self asFileReferenceWithRelativePath ]. self scheme = #ftp ifTrue: [ ^ MCFtpRepository host: (self hasPort ifTrue: [ self host, ':', self port asString ] ifFalse: [ self host ]) directory: self path "MCFtpRepository assumes NO prefixed / in the path" user: usernameString password: passwordString. ]. self error: ('No Monticello repository for URL scheme {1}' format: {(self scheme)})! ! !MetacelloConfigurationBrowser commentStamp: '' prior: 79148414! Metacello is a configuration language for packages. It allows one to define dependencies between packages as well as between complete projects. MetacelloConfigurationBrowser is simple tool to browse and load Metacello configurations from particular repositories typically named 'MetaRepoForPharoXY' (where X denotes the Pharo major version and Y denotes the minor version. e.g. MetaRepoForPharo30 is Pharo 3.0) MetaRepoForPharoXY is the short form of MetacelloRepositoriesForPharoXY since the source limits the length of the project name. The default repository is configured by #pharoDistributionRepository as...! !MetacelloConfigurationBrowser methodsFor: 'accessing' stamp: 'BenComan 12/18/2013 00:47'! aboutText ^ super aboutText, String crlf, MetacelloConfigurationBrowserPane pharoDistributionRepository . ! ! !EllipseMidpointTracer methodsFor: 'initialize' stamp: 'ar 6/28/1999 15:33' prior: 21146713! on: aRectangle rect := aRectangle. a := rect width // 2. b := rect height // 2. x := 0. y := b. aSquared := a * a. bSquared := b * b. d1 := bSquared - (aSquared * b) + (0.25 * aSquared). d2 := nil. inFirstRegion := true.! ! !EllipseMidpointTracer methodsFor: 'computing' stamp: 'ar 6/28/1999 15:35' prior: 21145904! stepInY "Step to the next y value" inFirstRegion ifTrue:[ "In the upper region we must step until we reach the next y value" [(aSquared * (y-0.5)) > (bSquared * (x+1))] whileTrue:[ d1 < 0.0 ifTrue:[d1 := d1 + (bSquared * (2*x+3)). x := x + 1] ifFalse:[d1 := d1 + (bSquared * (2*x+3)) + (aSquared * (-2*y+2)). y := y - 1. ^x := x + 1]]. "Stepping into second region" d2 := (bSquared * (x + 0.5) squared) + (aSquared * (y-1) squared) - (aSquared * bSquared). inFirstRegion := false. ]. "In the lower region each step is a y-step" d2 < 0.0 ifTrue:[d2 := d2 + (bSquared * (2*x+2)) + (aSquared * (-2*y+3)). x := x + 1] ifFalse:[d2 := d2 + (aSquared * (-2*y+3))]. y := y - 1. ^x! ! "Gofer-Core"! "Morphic-Base"! "Morphic-Core"! "Spec-MorphicAdapters"! "Tools"! ----End fileIn----! ----QUIT----2013-12-18T09:58:05.796102+01:00 Pharo.image priorSource: 28804723! ----STARTUP----2013-12-18T10:04:05.237463+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-18T10:04:05.417462+01:00 Pharo-30651.image priorSource: 28821437! ----STARTUP----2013-12-19T13:28:52.573045+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 12/19/2013 13:24' prior: 79136670! commentForCurrentUpdate ^ '12425 RPackage and PackageTreeNautilus fixes https://pharo.fogbugz.com/f/cases/12425 12389 Debugger should highlight the problems the first time it shows the code pane https://pharo.fogbugz.com/f/cases/12389 12447 Error Instances of GroupAlreadyExists are not indexable https://pharo.fogbugz.com/f/cases/12447 12448 Cannot rename a Group in Nautilus https://pharo.fogbugz.com/f/cases/12448 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 12/19/2013 13:25'! script305 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.137.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.228.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-EstebanLorenzano.623.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.298.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.397.mcz SlotTests-MarcusDenker.65.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.260.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.96.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1375.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 12/19/2013 13:25'! update30652 "self new update30652" self withUpdateLog: '12425 RPackage and PackageTreeNautilus fixes https://pharo.fogbugz.com/f/cases/12425 12389 Debugger should highlight the problems the first time it shows the code pane https://pharo.fogbugz.com/f/cases/12389 12447 Error Instances of GroupAlreadyExists are not indexable https://pharo.fogbugz.com/f/cases/12447 12448 Cannot rename a Group in Nautilus https://pharo.fogbugz.com/f/cases/12448 '. self loadTogether: self script305 merge: false. RPackageOrganizer initializeDefaultFromMC. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:01' prior: 74355841! addClassTag: aSymbol "Add the class tag from the receiver, if already added do nothing." | tagName | "strip package name if needed" tagName := self toTagName: aSymbol. ^ self classTagNamed: tagName ifAbsent: [ classTags add: (RPackageTag package: self name: tagName) ] ! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 18:11'! categoryName ^ self name! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:03' prior: 74356632! classTagForClass: aClass ^ self classTagNamed: (self toTagName: aClass category) ifAbsent: [ nil ]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:03' prior: 78556633! classTagNamed: aSymbol ifPresent: aBlock ^ classTags detect: [ :each | each name = aSymbol ] ifFound: [ :tag | aBlock cull: tag ] ifNone: [ nil ]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:03' prior: 74357760! classesForClassTag: aSymbol "Returns the classes tagged using aSymbol" ^ (self classTagNamed: (self toTagName: aSymbol) ifAbsent: [ ^ #() ]) classes! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/13/2013 15:34' prior: 77289872! name: aSymbol | oldName newName | oldName := name. newName := aSymbol asSymbol. self renameTagsPrefixedWith: oldName to: newName. name := newName. oldName ifNotNil: [ SystemAnnouncer uniqueInstance announce: (RPackageRenamed to: self oldName: oldName newName: newName) ].! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:03' prior: 31789377! removeClassDefinition: aClass fromClassTag: aSymbol "Detags the class aClass with the tag aSymbol" self removeClassDefinitionName: aClass name fromClassTag: aSymbol! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:04' prior: 74360548! removeClassDefinitionName: aClassName fromClassTag: aSymbol "Detags the class aClass with the tag aSymbol" | tag | tag := self classTagNamed: (self toTagName: aSymbol) ifAbsent: [ ^ self ]. tag removeClassNamed: aClassName. tag isEmpty ifTrue: [ self basicRemoveTag: tag ]. ! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/12/2013 18:04' prior: 74361607! removeClassTag: aSymbol "Remove the class tag from the receiver." self basicRemoveTag: (self classTagNamed: (self toTagName: aSymbol) ifAbsent: [ ^ self ])! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 12/13/2013 15:32' prior: 77290539! renameTagsPrefixedWith: oldName to: newName | oldPrefix newPrefix | oldName ifNil: [ ^ self ]. self classTagNamed: oldName ifPresent: [ :tag | tag renameTo: newName category: newName ]. oldPrefix := oldName, '-'. newPrefix := newName, '-'. (self classTags select: [ :each | each categoryName beginsWith: oldPrefix ]) do: [ :each | each renameTo: each name category: newPrefix, (each name) ]! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 12/12/2013 18:01'! toTagName: aSymbol ^ (aSymbol beginsWith: self name, '-') ifTrue: [ (aSymbol allButFirst: self name size + 1) asSymbol ] ifFalse: [ aSymbol ]! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 12/14/2013 14:28' prior: 74339259! addClassCategoryBasedOn: aSelection | name package packageTag | packageTag := nil. package := aSelection package. name := UIManager default request: ('New category: {1}-' format: { package name }) initialAnswer: '' title: 'Create a new category'. (self isValidPackageName: name) ifTrue: [ | categoryName | categoryName := (package name, '-', name) asSymbol. SystemOrganization addCategory: categoryName. packageTag := package classTagNamed: name ifAbsent: [ self error: 'Ther was a problem with package registration' ] ] ifFalse: [ self alertInvalidPackageName: name ]. ^ packageTag! ! !PackageTreeNautilusUI methodsFor: 'class' stamp: 'EstebanLorenzano 12/12/2013 21:37' prior: 74339987! addClassIn: aPackage super addClassIn: aPackage asNautilusSelection item.! ! !PackageTreeNautilusUI methodsFor: 'class' stamp: 'EstebanLorenzano 12/12/2013 21:37'! addTraitIn: aPackage super addTraitIn: aPackage asNautilusSelection item.! ! !PackageTreeNautilusUI methodsFor: 'test creation' stamp: 'EstebanLorenzano 12/12/2013 18:09'! buildTestPackageNameFrom:aClass ^ aClass package categoryName asString, '-Tests' ! ! !PackageTreeNautilusUI methodsFor: 'source code area' stamp: 'EstebanLorenzano 12/12/2013 18:10'! defaultClassDescriptor | string | string := 'Object subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: '''. ^ self selectedPackage ifNotNil: [ :package | string, package categoryName, '''' ] ifNil: [ string, '''' ] ! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 12/18/2013 17:08' prior: 74345941! removeClassCategory: packageTag self basicRemoveClasses: packageTag classes. packageTag asNautilusSelection item removeFromPackage.! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 12/12/2013 17:20' prior: 77292604! renameClassCategory: packageTag | newName oldName | oldName := packageTag name. newName := UIManager default request: ('New name of category {1}' format: { packageTag name }) initialAnswer: oldName title: 'Rename a category'. newName = oldName ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ packageTag renameTo: newName ] ifFalse: [ self alertInvalidPackageName:newName ]. ! ! !PackageTreePackageSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 18:12'! categoryName ^ self item categoryName! ! !PackageTreeTagNodeModel class methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 17:38'! rootText ^ '*'! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 17:34'! categoryName "Answer this tag as a SystemCategory. That would be RPackage, '-', RPackageTag, unless tag is root (same name as RPackage)" ^ self toCategoryName: self name ! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 12/12/2013 17:36'! isRoot ^ self name = self packageName! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/18/2013 17:06'! removeFromPackage self assert: self isEmpty description: 'Package tag is not empty'. self package basicRemoveTag: self.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/13/2013 15:21' prior: 77291162! renameTo: aString | oldName categoryName | oldName := self toCategoryName: self name. categoryName := self toCategoryName: aString. oldName = categoryName ifTrue: [ ^ self ]. self basicRenameTo: aString. SystemAnnouncer uniqueInstance suspendAllWhile: [ self classes do: [ :each | each category: categoryName ]. self class environment organization renameCategory: oldName toBe: categoryName. ].! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/13/2013 15:30'! renameTo: aString category: categoryName | oldName | oldName := self toCategoryName: self name. oldName = categoryName ifTrue: [ ^ self ]. self basicRenameTo: aString. SystemAnnouncer uniqueInstance suspendAllWhile: [ self classes do: [ :each | each category: categoryName ]. self class environment organization renameCategory: oldName toBe: categoryName. ].! ! !RPackageTag methodsFor: 'private ' stamp: 'EstebanLorenzano 12/12/2013 17:36'! toCategoryName: aString ^ aString = self packageName ifTrue: [ aString ] ifFalse: [ self packageName, '-', aString ]! ! !PackageTreeSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 18:13'! categoryName ^ self subclassResponsibility! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'NicolaiHess 12/18/2013 22:11' prior: 79121822! addNewGroup [ self groupsManager createAnEmptyStaticGroup ] on: GroupAlreadyExists do:[ :ex | self alertGroupExisting: ex groupName ]. self updatePackageView. ! ! !AbstractNautilusUI methodsFor: 'drag and drop' stamp: 'EstebanLorenzano 12/12/2013 21:08' prior: 17279600! dropInAPackage: aCollection into: receiver aCollection do:[:aClass | self showGroups ifTrue: [ receiver addClasses: { aClass }. ActiveHand shiftPressed ifFalse: [ self selectedGroup removeClass: aClass. self updateClassView ]] ifFalse: [ aClass theNonMetaClass category: receiver categoryName. ActiveHand shiftPressed ifTrue: [ self selectedClass: nil. self updateClassView ] ifFalse:[ self selectedPackage: receiver. self selectedClass: aClass. self updateBothView ]]]! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'NicolaiHess 12/18/2013 22:11' prior: 68840501! renameGroup | group | group := self selectedGroup. group ifNil: [ ^ self ]. [self groupsManager renameAGroup: group ] on: GroupAlreadyExists do:[ :ex | self alertGroupExisting: ex groupName ]. self updateBothView! ! !AbstractTool methodsFor: 'class' stamp: 'EstebanLorenzano 12/12/2013 21:38' prior: 74353707! addClassIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | classSymbol systemCategory classDefinition | classSymbol := #NameOfSubclass. systemCategory := aPackage ifNotNil: [ aPackage categoryName ] ifNil: [ 'Unknown' ]. classDefinition := self class defineClassTemplate format: { classSymbol. systemCategory } . classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. classDefinition isEmptyOrNil ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !AbstractTool methodsFor: 'class' stamp: 'EstebanLorenzano 12/12/2013 21:37' prior: 74354398! addTraitIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | systemCategory classDefinition | systemCategory := aPackage ifNotNil: [ aPackage categoryName ] ifNil: [ 'Unknown' ]. classDefinition := self class defineTraitTemplate format: { #TNameOfTrait. '{}'. systemCategory }. classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. (classDefinition isNil or: [ classDefinition isEmpty ]) ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !PackageTreeGroupSelection methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/12/2013 18:13'! categoryName ^ ''! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'NicolaiHess 12/18/2013 10:04' prior: 79136041! updateCodeFromContext self updateCodeFromContext:self currentContext! ! !PackageTreePackageNodeModel methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/13/2013 15:40' prior: 74379874! childrenItems | tags | tags := self item classTags. "If there is just one, do not show" ^ (tags size = 1 and: [ tags anyOne name = self item name ]) ifTrue: [ #() ] ifFalse: [ tags sorted: [ :a :b | a categoryName < b categoryName ] ]! ! RPackageTag removeSelector: #renameWithPackagePrefixTo:! RPackageTag removeSelector: #nameWithoutPackagePrefix! PackageTreeNautilusUI removeSelector: #selectedGroup! "Nautilus"! "RPackage-Core"! "Spec-Debugger"! "Tools"! ----End fileIn----! ----QUIT----2013-12-19T13:29:01.583039+01:00 Pharo.image priorSource: 28821634! ----STARTUP----2013-12-19T13:34:40.852174+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-19T13:34:41.068171+01:00 Pharo-30652.image priorSource: 28845181! ----STARTUP----2013-12-19T16:11:53.319843+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/19/2013 16:09' prior: 79153585! commentForCurrentUpdate ^ '11756 Reshaping a class breaks classBinding identity https://pharo.fogbugz.com/f/cases/11756 12450 CriticBrowser Browss Rule opens SystemBrowser on TreeNodeModel https://pharo.fogbugz.com/f/cases/12450'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/19/2013 16:09'! script306 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.649.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.27.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.66.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.228.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-EstebanLorenzano.623.mcz NautilusCommon-StephaneDucasse.185.mcz NautilusRefactoring-MarcusDenker.150.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.989.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.298.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.260.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.96.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-StephaneDucasse.26.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-EstebanLorenzano.1375.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/19/2013 16:09'! update30653 "self new update30653" self withUpdateLog: '11756 Reshaping a class breaks classBinding identity https://pharo.fogbugz.com/f/cases/11756 12450 CriticBrowser Browss Rule opens SystemBrowser on TreeNodeModel https://pharo.fogbugz.com/f/cases/12450'. self loadTogether: self script306 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodRecompileStrategy methodsFor: 'updating' stamp: 'CamilleTeruel 12/18/2013 14:00' prior: 41784183! transform: oldClass to: newClass using: aMethodModification newClass compileAllFrom: oldClass. ! ! !MethodRecompileStrategy methodsFor: 'updating' stamp: 'CamilleTeruel 12/18/2013 13:37' prior: 41784568! updateClassLiteralKeysIn: aClass aClass isMeta ifTrue: [ ^ self ]. aClass methodsDo: [ :method | method classBinding: (aClass environment bindingOf: aClass name) ]! ! !CriticBrowser methodsFor: 'private' stamp: 'NicolaiHess 12/18/2013 21:53' prior: 33894870! browseRule rulesModel selectedItem ifNotNil: [ :item | item content browse ]! ! !SlotMethodRecompilationTest methodsFor: 'accessing' stamp: 'CamilleTeruel 12/18/2013 13:14'! method ^ class >> #m1! ! !SlotMethodRecompilationTest methodsFor: 'accessing' stamp: 'CamilleTeruel 12/18/2013 13:15'! methodBinding ^ self method classBinding! ! !SlotMethodRecompilationTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/18/2013 13:56'! reshapeClass ^ class := self make: [ :builder | builder slots: #(#iv) ]! ! !SlotMethodRecompilationTest methodsFor: 'running' stamp: 'CamilleTeruel 12/18/2013 13:49'! setUp class := self make: [ :builder | builder traitComposition: TOne ]. class compile: 'm1'. ! ! !SlotMethodRecompilationTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/18/2013 13:56'! testClassReshapeShouldKeepClassBinding "Check that when a class is reshaped, the recompilation of the methods gives correct class bindings (in the literal array of the methods)" self reshapeClass. self assert: self methodBinding == class binding! ! !SlotMethodRecompilationTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/18/2013 13:58'! testClassReshapeShouldKeepClassBindingForTraitMethods "A method should have the same binding than its class even if it come from a trait" self reshapeClass. self assert: (self traitMethodBinding == class binding). ! ! !SlotMethodRecompilationTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/18/2013 13:15'! testMethodClassBindingShouldBeClassBinding "A method should have the same binding than its class" self assert: (self methodBinding == class binding). ! ! !SlotMethodRecompilationTest methodsFor: 'tests' stamp: 'CamilleTeruel 12/18/2013 13:58'! testTraitMethodClassBindingShouldBeClassBinding "A method should have the same binding than its class even if it come from a trait" self assert: (self traitMethodBinding == class binding). ! ! !SlotMethodRecompilationTest methodsFor: 'accessing' stamp: 'CamilleTeruel 12/18/2013 13:50'! traitMethod ^ class >> #one! ! !SlotMethodRecompilationTest methodsFor: 'accessing' stamp: 'CamilleTeruel 12/18/2013 13:49'! traitMethodBinding ^ self traitMethod classBinding! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'CamilleTeruel 12/18/2013 13:57' prior: 78967995! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: FixedLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client classAdded: newClass inCategory: category. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. ^ newClass! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'CamilleTeruel 12/18/2013 13:53' prior: 43482084! classDefinitionChangedFrom: oldClass to: newClass by: classModification self copyMethodsFrom: oldClass to: newClass using: classModification; basicClassDefinitionChangedFrom: oldClass to: newClass; fixClassBindings: newClass ! ! !PharoClassInstaller methodsFor: 'migrating' stamp: 'CamilleTeruel 12/18/2013 13:56'! fixClassBindings: newClass methodUpdateStrategy updateClassLiteralKeysIn: newClass! ! "Manifest-CriticBrowser"! "Slot"! "SlotTests"! ----End fileIn----! ----QUIT----2013-12-19T16:11:59.47184+01:00 Pharo.image priorSource: 28845378! ----STARTUP----2013-12-19T16:17:36.715139+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-19T16:17:36.887132+01:00 Pharo-30653.image priorSource: 28860992! ----STARTUP----2013-12-19T19:42:53.244676+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/19/2013 19:37' prior: 79177325! commentForCurrentUpdate ^ '12385 Move isResizeable to SystemWindow https://pharo.fogbugz.com/f/cases/12385 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/19/2013 19:38'! script307 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.23.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.58.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.229.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-EstebanLorenzano.623.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.991.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.298.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.261.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.96.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1376.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.606.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/19/2013 19:39'! update30654 "self new update30654" self withUpdateLog: '12385 Move isResizeable to SystemWindow https://pharo.fogbugz.com/f/cases/12385 '. self loadTogether: self script307 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DialogWindow commentStamp: 'gvc 5/18/2007 13:26' prior: 42227512! Dialog style window with no window controls (expand, collapse etc). Usually opened modally (the morph that is used to modally open determines the modal scope, use of World implies "system modal"). Designed to be subclassed with content. Supports Escape key for cancel and Enter key for default button.! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! !SystemWindow commentStamp: '' prior: 42721186! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! !DialogWindow commentStamp: 'gvc 5/18/2007 13:26' prior: 79204229! Dialog style window with no window controls (expand, collapse etc). Usually opened modally (the morph that is used to modally open determines the modal scope, use of World implies "system modal"). Designed to be subclassed with content. Supports Escape key for cancel and Enter key for default button.! !DialogWindow methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 12/10/2013 22:21'! defaultIsResizeable ^ false! ! !SystemWindow commentStamp: '' prior: 79239930! SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing. The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.! !SystemWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 12/10/2013 22:23'! beResizeable isResizeable := true. "If isResizable is overriden to always return false, then it would break the invariant" self isResizeable ifTrue: [ self addGripsIfWanted ]! ! !SystemWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 12/10/2013 22:22'! beUnresizeable isResizeable := false. "If isResizable is overriden to always return true, then it would break the invariant" self isResizeable ifFalse: [ self removeGrips ]! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 12/10/2013 22:17' prior: 51706998! canBeMaximized "Answer whether we are not we can be maximised." ^ self isResizeable and: [ self isNotMaximized ]! ! !SystemWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 12/10/2013 22:21'! defaultIsResizeable ^ true! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 12/10/2013 22:17' prior: 51709606! doubleClick: event "Handle a double click. Maximize/restore the window. Works in title bar area." self isResizeable ifFalse: [ ^ self ]. (labelArea containsPoint: event position) ifTrue: [self expandBoxHit]! ! !SystemWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 12/11/2013 10:49'! isResizeable "Answer whether we are not we can be resized." ^ isResizeable ifNil: [ isResizeable := self defaultIsResizeable ]! ! !SystemWindow methodsFor: 'controls' stamp: 'BenjaminVanRyseghem 12/10/2013 22:20'! isResizeable: aBoolean aBoolean = isResizeable ifTrue: [ ^ self ]. aBoolean ifTrue: [ self beResizeable ] ifFalse: [ self beUnresizeable ]! ! !SystemWindow methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 12/10/2013 22:18' prior: 51743037! wantsGrips "Answer whether the window wants edge and corner grips." ^self isResizeable! ! DialogWindow removeSelector: #wantsGrips! DialogWindow removeSelector: #isResizeable! DialogWindow removeSelector: #beUnresizeable! DialogWindow removeSelector: #beResizeable! "FreeType"! "GroupManagerUI"! "KeyChain"! "Morphic-Base"! "NautilusCommon"! "NautilusRefactoring"! "Polymorph-Widgets"! "Spec-Core"! "Text-Edition"! "Tools"! ----End fileIn----! ----QUIT----2013-12-19T19:43:12.398677+01:00 Pharo.image priorSource: 28861188! ----STARTUP----2013-12-19T19:49:02.679182+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-19T19:49:02.849181+01:00 Pharo-30654.image priorSource: 28912052! ----STARTUP----2013-12-20T10:55:55.561383+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/20/2013 10:52' prior: 79193135! commentForCurrentUpdate ^ '12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12144 12459 un-deprecated #methodDictioary https://pharo.fogbugz.com/f/cases/12459 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/20/2013 10:52'! script308 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.609.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.230.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-EstebanLorenzano.623.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.992.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.298.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.261.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.144.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1377.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.608.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/20/2013 10:53'! update30655 "self new update30655" self withUpdateLog: '12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12144 12459 un-deprecated #methodDictioary https://pharo.fogbugz.com/f/cases/12459 '. self loadTogether: self script308 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! toggleEnabled "Toggle the enabled state." self enabled: self enabled not! ! !Trait method! addToggleItemsToHaloMenu: aCustomMenu "Add toggle-items to the halo menu" super addToggleItemsToHaloMenu: aCustomMenu. aCustomMenu addUpdating: #enabledString target: self action: #toggleEnabled! ! !Trait method! enabledString "Answer the string to be shown in a menu to represent the 'enabled' status" ^ (self enabled) -> 'enabled' translated! ! !MorphicTextAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/4/2013 18:20' prior: 77675917! defaultSpec ^ SpecLayout new type: #PluggableTextMorph; send: #color: withArguments: #(#(model color)); send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #setSelectionSelector: withArguments: {#setSelection:}; send: #on:text:accept:readSelection:menu: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted:); send: #enabled: withArguments: #(#(model enabled)); send: #askBeforeDiscardingEdits: withArguments: #(#(model askBeforeDiscardingEdits)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #autoAccept: withArguments: #(#(model autoAccept)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #registerScrollChanges: withArguments: #(scrollValueChanged:); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 11/18/2013 12:31' prior: 69669605! setSelection: interval self model setSelection: interval! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 11/18/2013 12:35' prior: 69669765! setSelectionFromModel: aSelection self widget ifNotNil: [:w | w selectionInterval ~= aSelection ifTrue: [ w setSelection: aSelection ]]! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 12/20/2013 10:32' prior: 78959715! methodDictionary ^self methodDict! ! !TBehavior methodsFor: 'accessing method dictionary' stamp: 'MarcusDenker 12/20/2013 10:32' prior: 78959954! methodDictionary: aDictionary self methodDict: aDictionary! ! !PluggableTextMorph methodsFor: 'accessing' stamp: 'GaryChambers 4/24/2012 15:10' prior: 29555432! font "Answer the probable font" ^self textMorph ifNil: [TextStyle defaultFont] ifNotNil: [:m | m font]! ! !PluggableTextMorph methodsFor: 'menu messages' stamp: 'StephaneDucasse 5/13/2012 21:26' prior: 29555642! methodCaseSensitiveStringsContainingit self handleEdit: [textMorph editor methodCaseSensitiveStringsContainingit]! ! !PluggableTextMorph methodsFor: 'scrolling' stamp: 'FernandoOlivero 5/30/2011 09:26' prior: 29555857! scrollToBottom "Scroll to the bottom." self vScrollBarValue: self vTotalScrollRange; setScrollDeltas! ! !PluggableTextMorph methodsFor: 'model access' stamp: 'BenjaminVanRyseghem 11/18/2013 12:19' prior: 29576559! selectionInterval: sel setSelectionSelector ifNil: [ selectionInterval := sel ] ifNotNil: [ self model perform:setSelectionSelector with: sel ]! ! !PluggableTextMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/18/2013 12:23'! setSelectionSelector ^ setSelectionSelector! ! !PluggableTextMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 11/18/2013 12:23'! setSelectionSelector: aSelector setSelectionSelector := aSelector ! ! !PluggableTextMorph methodsFor: 'accessing' stamp: 'AlainPlantec 9/19/2011 19:39' prior: 29556063! stylerClass ^ self class stylingClass ifNil: [NullTextStyler]! ! !TextMorphForEditView methodsFor: 'event handling' stamp: 'BenjaminVanRyseghem 11/18/2013 12:30'! keyUp: event super keyUp: event. self stopSteppingSelector: #autoScrollView:. "editView scrollSelectionIntoView: evt." editView selectionInterval: editor selectionInterval.! ! !Trait method! methodDictionary ^self methodDict! ! !Trait method! methodDictionary ^self methodDict! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! !Trait method! methodDictionary: aDictionary self methodDict: aDictionary! ! "Athens-Morphic"! "Deprecated30"! "Morphic-Base"! "Polymorph-Widgets"! "Spec-MorphicAdapters"! "Tools"! "Traits"! ----End fileIn----! ----QUIT----2013-12-20T10:56:09.431379+01:00 Pharo.image priorSource: 28912249! ----STARTUP----2013-12-20T11:02:08.827351+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-20T11:02:08.98535+01:00 Pharo-30655.image priorSource: 28928192! ----STARTUP----2013-12-20T14:48:52.146932+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/20/2013 14:45' prior: 79244196! commentForCurrentUpdate ^ '11403 --all-- protocol disappears when browsing scoped https://pharo.fogbugz.com/f/cases/11403 12468 KernelTests packages are messed up on changes https://pharo.fogbugz.com/f/cases/12468 12392 EyeInspector should not depend on Nautilus https://pharo.fogbugz.com/f/cases/12392 12381 Creating slices is broken https://pharo.fogbugz.com/f/cases/12381'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/20/2013 14:45'! script309 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.105.mcz HelpSystem-Tests-MarcusDenker.24.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.611.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.230.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.627.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.300.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.261.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.146.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.997.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1377.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.608.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/20/2013 14:46'! update30656 "self new update30656" self withUpdateLog: '11403 --all-- protocol disappears when browsing scoped https://pharo.fogbugz.com/f/cases/11403 12468 KernelTests packages are messed up on changes https://pharo.fogbugz.com/f/cases/12468 12392 EyeInspector should not depend on Nautilus https://pharo.fogbugz.com/f/cases/12392 12381 Creating slices is broken https://pharo.fogbugz.com/f/cases/12381'. self loadTogether: self script309 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 12/20/2013 12:03'! classTagCategoryNames ^ (Set with: self packageName), (self classTags collect: #categoryName).! ! !ClassTest methodsFor: 'testing' stamp: 'YuriyTymchuk 12/20/2013 11:34' prior: 77327553! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #getName #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #getName #baseClass #basicLocalSelectors #classClass isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #systemIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !Announcement class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:16'! systemIcon ^ Smalltalk ui icons iconNamed: #announcementIcon! ! !Exception class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:18'! systemIcon ^ Smalltalk ui icons iconNamed: #exceptionIcon! ! !String class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:20'! systemIcon ^ Smalltalk ui icons iconNamed: #stringIcon! ! !Magnitude class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:18'! systemIcon ^ Smalltalk ui icons iconNamed: #magnitudeIcon! ! !Morph class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:19'! systemIcon ^ Smalltalk ui icons iconNamed: #morphIcon! ! !CategoryWidget methodsFor: 'private' stamp: 'EstebanLorenzano 12/20/2013 12:35' prior: 68803606! loadPackagesCategoriesInARestrictedEnvironment: env for: class ^ self sortCategories: ((model browsedEnvironment protocolsFor: class) copyWithFirst: AllProtocol defaultName) forClass: class! ! !Trait methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:21'! systemIcon ^ Smalltalk ui icons traitIcon! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'YuriyTymchuk 12/20/2013 11:32' prior: 74107803! icon ^ (self value iconOrThumbnailOfSize: 16) ifNil: [ self value class systemIcon ]! ! !AbstractNautilusUI methodsFor: 'icon' stamp: 'YuriyTymchuk 12/20/2013 11:15' prior: 37886278! classIconFor: aClass ClassesIconsCache at: aClass ifPresent: [:icon | icon class == IconicButtonStateHolder ifFalse: [ ^ icon ]. ^ icon asIconTargetting: self ]. ((aClass includesBehavior: (Smalltalk globals at: #TestCase ifAbsent: [ false ])) and: [ aClass isAbstract not ]) ifTrue: [ | icon button | icon := Smalltalk ui icons iconNamed: #testNotRunIcon. aClass hasPassedTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testGreenIcon ]. aClass hasFailedTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testYellowIcon ]. aClass hasErrorTest ifTrue: [ icon := Smalltalk ui icons iconNamed: #testRedIcon ]. button := IconicButton new target: self; actionSelector: #runTestsOfClass:notifying:; arguments: { aClass. true }; labelGraphic: icon ; color: Color transparent; extent: 12 @ 12; helpText: 'Run the tests'; borderWidth: 0. ClassesIconsCache at: aClass put: (IconicButtonStateHolder forNautilus: button). ^ button ] ifFalse: [ (aClass organization classComment isEmpty and: [ Nautilus emptyCommentWarning ]) ifTrue: [| button | button := IconicButton new target: self; actionSelector: #openCommentEditor:; arguments: { aClass }; labelGraphic: (Smalltalk ui icons iconNamed: #uncommentedClassIcon) ; color: Color transparent; extent: 12 @ 12; helpText:'Edit the comment'; borderWidth: 0. ClassesIconsCache at: aClass put: (IconicButtonStateHolder forNautilus: button). ^ button ]]. ^ ClassesIconsCache at: aClass put: (aClass systemIcon)! ! !RPackageSet methodsFor: 'accessing' stamp: 'EstebanLorenzano 12/20/2013 12:03' prior: 74352635! categoryNames ^ self packages inject: #() into: [ :all :each | all, (each classTagCategoryNames asArray) ]! ! !Object methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:14'! systemIcon ^ Smalltalk ui icons iconNamed: #classIcon! ! !Collection class methodsFor: '*Polymorph-Widgets-Themes' stamp: 'YuriyTymchuk 12/20/2013 11:17'! systemIcon ^ Smalltalk ui icons iconNamed: #collectionIcon! ! Object removeSelector: #nautilusIcon! Collection class removeSelector: #nautilusIcon! Trait removeSelector: #nautilusIcon! String class removeSelector: #nautilusIcon! Morph class removeSelector: #nautilusIcon! Magnitude class removeSelector: #nautilusIcon! Exception class removeSelector: #nautilusIcon! Announcement class removeSelector: #nautilusIcon! NautilusMonticello removeSelector: #postNewSliceFor:! NautilusMonticello removeSelector: #addSliceFor:! NautilusMonticello class removeSelector: #packagesSliceMenu:! RPackage removeSelector: #classTagNames! "KernelTests"! "Nautilus"! "Polymorph-Widgets"! "RPackage-Core"! "Spec-Inspector"! ----End fileIn----! ----QUIT----2013-12-20T14:49:02.162928+01:00 Pharo.image priorSource: 28928389! ----STARTUP----2013-12-20T14:54:50.361247+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-20T14:54:50.565247+01:00 Pharo-30656.image priorSource: 28947034! ----STARTUP----2013-12-20T15:35:48.508738+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/20/2013 15:32' prior: 79260335! commentForCurrentUpdate ^ '11656 In HelpTopic when a subtopic is added, the subtopic does not point back to its owner https://pharo.fogbugz.com/f/cases/11656 12463 de-skip testCurrent https://pharo.fogbugz.com/f/cases/12463 12210 Superfluous Snapshot Message https://pharo.fogbugz.com/f/cases/12210 12466 Nautilus does not refresh when deleting a category https://pharo.fogbugz.com/f/cases/12466 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/20/2013 15:33'! script310 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.230.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.628.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.300.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.261.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.146.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.167.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1377.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.608.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/20/2013 15:33'! update30657 "self new update30657" self withUpdateLog: '11656 In HelpTopic when a subtopic is added, the subtopic does not point back to its owner https://pharo.fogbugz.com/f/cases/11656 12463 de-skip testCurrent https://pharo.fogbugz.com/f/cases/12463 12210 Superfluous Snapshot Message https://pharo.fogbugz.com/f/cases/12210 12466 Nautilus does not refresh when deleting a category https://pharo.fogbugz.com/f/cases/12466 '. self loadTogether: self script310 merge: false. self flushCaches. ! ! "ScriptLoader30"! !HelpTopic commentStamp: 'tbn 3/29/2010 14:53' prior: 42336376! A HelpTopic provides content information that can be used as a help to the user. It can be labeled with a title, identified using an (optional) unique key and marked with an (optional) icon. Help topics form a hierarchy since any topic is able to have zero or more subtopics. Instance Variables contents: The help topic contents icon: An optional icon for the topic key: An optional unique key subtopics: A collection of subtopics title: The title contents - The help topic contents - typically containing the help topics information icon - An optional icon for the topic key - An optional unique key which can be used to identify the topic. subtopics - A collection of subtopics. By default the subtopics are not sorted, so the insertion order is used. If necessary it is possible to sort the subtopics by title. title - A meaninful title for the help topic ! !JobTest methodsFor: 'tests' stamp: 'MarcusDenker 12/20/2013 11:28' prior: 79107301! testCurrent self assert: Job current isNil. [ :aJob | self assert: Job current equals: aJob. [ :anotherJob | self assert: Job current equals: anotherJob. ] asJob run. self assert: Job current equals: aJob. ] asJob run. self assert: Job current isNil. ! ! !ChangesLog methodsFor: 'logging' stamp: 'YuriyTymchuk 12/20/2013 14:27' prior: 76881258! logSnapshot: save andQuit: quit "Log into the changes file the fact that the session will be either snapshoted, quit, or both." | message | (SourceFiles at: 2) ifNil: [ ^ self ]. message := String streamContents: [ :s | s nextPutAll: '----'; nextPutAll: (save ifTrue: [ quit ifTrue: [ 'QUIT' ] ifFalse: [ 'SNAPSHOT' ] ] ifFalse: [ quit ifTrue: [ 'QUIT/NOSAVE' ] ifFalse: [ 'NOP' ] ]); nextPutAll: '----'; print: DateAndTime now; space; nextPutAll: (Smalltalk imageFile basename); nextPutAll: ' priorSource: '; print: Smalltalk lastQuitLogPosition ]. self assureStartupStampLogged. save ifTrue: [ Smalltalk lastQuitLogPosition: ( (SourceFiles at: 2) setToEnd; position) ]. self logChange: message! ! !HelpTopic commentStamp: 'tbn 3/29/2010 14:53' prior: 79290855! A HelpTopic provides content information that can be used as a help to the user. It can be labeled with a title, identified using an (optional) unique key and marked with an (optional) icon. Help topics form a hierarchy since any topic is able to have zero or more subtopics. Instance Variables contents: The help topic contents icon: An optional icon for the topic key: An optional unique key subtopics: A collection of subtopics title: The title contents - The help topic contents - typically containing the help topics information icon - An optional icon for the topic key - An optional unique key which can be used to identify the topic. subtopics - A collection of subtopics. By default the subtopics are not sorted, so the insertion order is used. If necessary it is possible to sort the subtopics by title. title - A meaninful title for the help topic ! !HelpTopic methodsFor: 'accessing' stamp: 'kilonalios 9/22/2013 17:31' prior: 23391963! addSubtopic: aTopic "Adds the given topic to the receivers collection of subtopics, and set this object as owner of the subtopic" self subtopics add: aTopic. aTopic owner: self. ^aTopic! ! !HelpTopic methodsFor: 'accessing' stamp: 'kilonalios 9/22/2013 17:30'! owner "an ownder is a HelpTopic that uses the current HelptTopic as subtopic" ^ owner! ! !HelpTopic methodsFor: 'accessing' stamp: 'kilonalios 9/22/2013 17:56'! owner: topic "an owner is a HelpTopic that uses the current HelptTopic as subtopic" owner := topic! ! !HelpTopic methodsFor: 'accessing' stamp: 'kilonalios 9/22/2013 17:43' prior: 23393212! subtopics: aCollection "Sets the receivers subtopics" aCollection do: [ :topic| topic owner: self ]. subtopics := aCollection.! ! !HelpTopicTest methodsFor: 'testing' stamp: 'kilonalios 9/22/2013 17:56'! testSubtopicOwnership "Test that when a subtopic is added to a topic then owner of the subtopic is the topic" |subtopic owner| owner := self defaultTestClass named: 'I am the owner'. subtopic := self defaultTestClass named: 'I am the subtopic'. owner addSubtopic: subtopic. self assert: (subtopic owner == owner). ! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'TommasoDalSasso 12/20/2013 12:30' prior: 74346572! removePackages | names packages | packages := self selectedPackages. packages ifEmpty: [ ^ self ]. names := (packages collect: [:package | package name ]) joinUsing: String cr. (UIManager default confirm: ('Are you sure you want to delete the selection(s) named ', String cr, names, ' and their classes ?')) ifTrue: [ packages do: [ :each | each asNautilusSelection removeTarget: self ]. self updatePackageView ]! ! "HelpSystem-Core"! "HelpSystem-Tests"! "KernelTests"! "Nautilus"! "System-Support"! ----End fileIn----! ----QUIT----2013-12-20T15:35:56.434738+01:00 Pharo.image priorSource: 28947231! ----STARTUP----2013-12-20T15:41:52.985919+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-20T15:41:53.157919+01:00 Pharo-30657.image priorSource: 28964433! ----STARTUP----2013-12-20T16:26:50.859107+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/20/2013 16:23' prior: 79279178! commentForCurrentUpdate ^ '12278 Changesorter menus are broken https://pharo.fogbugz.com/f/cases/12278 12418 Athens tutorial should be updated to work with spec 3.0 for 3.0 https://pharo.fogbugz.com/f/cases/12418'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/20/2013 16:24'! script311 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.230.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.628.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.300.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.263.mcz Spec-Debugger-EstebanLorenzano.183.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.146.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.169.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.112.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1377.mcz ToolsTest-MarcusDenker.denker.61.mcz Traits-MarcusDenker.608.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/20/2013 16:24'! update30658 "self new update30658" self withUpdateLog: '12278 Changesorter menus are broken https://pharo.fogbugz.com/f/cases/12278 12418 Athens tutorial should be updated to work with spec 3.0 for 3.0 https://pharo.fogbugz.com/f/cases/12418'. self loadTogether: self script311 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !AthensTutorial commentStamp: '' prior: 0! To start tutorial, do: AthensTutorial open then follow the instructions and steps! !MenuModel methodsFor: 'printing' stamp: 'StephaneDucasse 11/11/2013 19:19'! printOn: aStream super printOn: aStream. self title value ifNotNil: [:t | aStream nextPutAll: ' ''', t , '''' ]! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'RobertoMinelli 12/20/2013 11:10' prior: 21009938! changesMenu: menu shifted: shifted from: src to: dest | menuSrc1 menuSrc2 menuDest | menuSrc1 := menu copy. src changeSetMenu1: menuSrc1 shifted: shifted. menuSrc2 := menu copy. src changeSetMenu1: menuSrc2 shifted: shifted. menuDest := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorteChangesListMenu' model: {self. src. dest}) menuSpec. "menu addAllFrom: (MenuMorph new addAllMorphs: menuSrc1 submorphs; addAllMorphs: menuDest submorphs; addAllMorphs: menuSrc2 submorphs; yourself)." ^menu! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'RobertoMinelli 12/20/2013 11:08' prior: 21010558! classMenu: menu shifted: shifted from: src to: dest "Fill aMenu with items appropriate for the class list" | menuSrc menuDual | src selectedClass ifNil: [ ^nil ]. menuSrc := menu copy. src classMenu: menuSrc shifted: shifted. menuDual := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorterClassListMenu' model: {self. src. dest}) menuSpec. ^menu ! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'RobertoMinelli 12/20/2013 11:10' prior: 21011569! messageMenu: menu shifted: shifted from: src to: dest "Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter" | menuSrc menuDual | src selectedSelector ifNil: [ ^ nil ]. menuSrc := menu copy. src messageMenu: menuSrc shifted: shifted. menuDual := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorterMessageListMenu' model: {self. src. dest}) menuSpec. "menu addAllFrom: (MenuMorph new addAllMorphs: menuDual submorphs; addAllMorphs: menuSrc submorphs; yourself)." ^menu ! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 11/11/2013 19:37'! changeSetMenu1NewGeneration: aMenuModel | menuItem | menuItem := MenuItemModel new name: [ TimeStamp now asString ]; enabled: [ TimeStamp now seconds even ]; yourself. aMenuModel addMenuItem: menuItem ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 11/11/2013 19:24' prior: 78272531! changeSetMenu1: aMenu shifted: isShifted "Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter" aMenu title: 'Change Set'. self changeSetMenu1NewGeneration: aMenu.! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 11/11/2013 21:40'! changeSetMenu1NewGeneration: aMenuModel | group2 group | group := MenuGroupModel new. self selectedChangeSet ifNotNil: [ (group addMenuItem: (MenuItemModel new name: #'Make changes go to me'; shortcut: $m command; action: [ self setCurrentChangeSet ])). (group addMenuItem: (MenuItemModel new name: #'New change set...'; shortcut: $n command; action: [ self newSet ])) ]. group addMenuItem: (MenuItemModel new name: #'Find ...'; shortcut: $f command; action: [ self findChangeSet ]). group2 := MenuGroupModel new. self selectedChangeSet ifNotNil: [ (group2 addMenuItem: (MenuItemModel new name: #'Rename change set'; shortcut: $r command; action: [ self rename ])). (group2 addMenuItem: (MenuItemModel new name: #'File out'; shortcut: $o command; action: [ self fileOut ])). (group2 addMenuItem: (MenuItemModel new name: #'Browse methods'; shortcut: $b command; action: [ self browseChangeSet ])). (group2 addMenuItem: (MenuItemModel new name: #'Browse change set'; shortcut: $b shift command; action: [ self openChangeSetBrowser ])) ]. aMenuModel addMenuGroup: group; addMenuGroup: group2. self classesListModel menu: aMenuModel. ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'RobertoMinelli 12/20/2013 10:44' prior: 18880531! messageMenu: aMenu shifted: shifted "Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter" self selectedSelector ifNil: [ ^ nil ]. aMenu title: 'Message list'. aMenu addAllFromPragma:'changeSorterMessageListMenu' target: self. ^aMenu! ! !AthensViewMorph methodsFor: 'sesison aware' stamp: 'IgorStasenko 4/26/2013 14:19'! checkSession session == Smalltalk session ifFalse: [ "just reset the surface" surface := nil. session := Smalltalk session. ]! ! !AthensViewMorph methodsFor: 'drawing results' stamp: 'IgorStasenko 4/26/2013 14:15'! drawOn: aCanvas self checkSession. surface ifNil: [ ^ super drawOn: aCanvas ]. aCanvas drawImage: surface asForm at: bounds origin.! ! !AthensViewMorph methodsFor: 'initialize-release' stamp: 'IgorStasenko 4/26/2013 14:15'! initialize super initialize. session := Smalltalk session. self hResizing: #spaceFill; vResizing: #spaceFill! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 00:14'! step1 "Step 1: Get Athens into your image. " Gofer it smalltalkhubUser: 'Pharo' project: 'Athens'; configuration; load. ConfigurationOfAthens loadVersion: '2.0'. "Tutorial" Gofer it smalltalkhubUser: 'Pharo' project: 'Athens'; package: 'Athens-Tutorial'; load. "To open a tutorial window do: " AthensTutorial new openWithSpec. "You can find the source code for all tutorial steps in AthensViewMorph" . ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 8/14/2013 13:49'! step10 "Step 10: Loading matrix/using identity matrix. " surface drawDuring: [:canvas | | m | surface clear: Color gray. canvas setShape: (0@0 corner: 100@100). canvas setPaint: (Color blue). m := AthensAffineTransform new scaleBy: 4; translateX: 50 Y: 50; rotateByDegrees: 35; translateX: -50 Y: -50. "Load the built matrix into path transform" canvas pathTransform loadAffineTransform: m. canvas draw. "The following statement resets coordinate transformation to match surface's coordinate space" canvas pathTransform loadIdentity. canvas setPaint: (Color yellow). canvas draw. "Now load the matrix back" canvas pathTransform loadAffineTransform: m; "Offset it a bit" translateX: 2 Y: 2. canvas setPaint: (Color gray alpha:0.8). canvas draw. ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 00:37'! step11 "Step 11: Some important aspects of transforms: * the transformation matrix is not accessible for direct manipulation, instead you can only modify the current transformation, by using different manipulation methods * remember that the order of transformation is important, e.g. translate then scale is not the same than scale then translate, even if you using very same values. * all transformations are conform to AthensTransform protocol. (we're not covering full protocol in this tutorial) " ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:10'! step12 "Step 12: Building complex shapes using paths. So far, we used only rectangles as shapes, now time to create something more interesting. " surface drawDuring: [:canvas | | path | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 . "To create a path, use #createPath: protocol. The block should accept a single argument, where AthensPathBuilder instance will be passed" path := canvas createPath: [:builder | "A simple polygon" builder absolute; "The path consists from a list of connected segments connected with each other" lineTo: -50@ -50; lineTo: 60@ -60; lineTo: 150@50; lineTo: 0@0 ]. canvas setShape: path. "Here we're using stroke paint to show the edges of path (more on stroke paints later)" (canvas setStrokePaint: Color white) width:4. "If you want to fill the path instead, uncomment the line below" "canvas setPaint: Color white." canvas draw. ].! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:32'! step13 "Step 13: Building complex shapes using paths. For complex and large paths, building it every time could be ineffective and computationally intensive. Instead you can use surface factory method (#createPath:) to create a path object at any point, and use it later, whenever you see fit. Note, that since we're not using canvas, it is not necessary to put path creation inside #drawDuring: method. " | path | path := surface createPath: [:builder | "A simple polygon" builder absolute; "The path consists from a list of connected segments connected with each other" lineTo: -50@ -50; lineTo: 60@ -60; lineTo: 150@50; lineTo: 0@0 ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 . canvas setShape: path. (canvas setStrokePaint: Color yellow) width:4. canvas draw. ].! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:33'! step14 "Step 14: Various path segment types. " | path | path := surface createPath: [:builder | builder absolute; "The path consists from a list of segments connected with each other, e.g. the starting point of next segment is always an end point of previous one" lineTo: -50@ -50; "quadric Bezier curve" curveVia: 0@ -80 to: 50@ -50; "cubic Bezier curve" curveVia: 100@ -20 and: -50@20 to: 50@ 50; "clockwise arc" cwArcTo: 50@100 angle: 45; "counter-clockwise arc" ccwArcTo: -50@100 angle: 45. "close segment. Simply connects endpoint of previous segment with path starting point. Try to comment following line to see the difference" builder close. ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 ; scaleBy:2. canvas setShape: path. (canvas setStrokePaint: Color yellow) width:4. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:35'! step15 "Step 15: Path origin and moveTo: segment. " | path | path := surface createPath: [:builder | builder absolute; "All paths always having same origin, which is (0@0) point. To use different origin, use #moveTo: as initial command. Try to change moveTo: parameter to see the difference" moveTo: -50@ -50; "quadric Bezier curve" curveVia: 0@ -80 to: 50@ -50; "cubic Bezier curve" curveVia: 100@ -20 and: -50@20 to: 50@ 50; "clockwise arc" cwArcTo: 50@100 angle: 45; "counter-clockwise arc" ccwArcTo: -50@100 angle: 45. ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 ; scaleBy:2. canvas setShape: path. (canvas setStrokePaint: Color yellow) width:4. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:22'! step16 "Step 16: Absolute versus relative path building mode. " | path | path := surface createPath: [:builder | "In absolute path building mode, all segment coordinates is absolute (relative to coordinate system origin which is 0@0). In relative path building mode, the coordinates of next segment computed relative to the end point of previous segment" builder relative; "actually, relative is default. You can simply delete this line without any effect" moveTo: -50@ -50; lineTo: 50@0; "The building mode can be switched at any moment. Try to uncomment line below to see the difference" "absolute;" lineTo: 0@50; lineTo: -50@0 ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 ; scaleBy:2. canvas setShape: path. (canvas setStrokePaint: Color yellow) width:4. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 03:15'! step17 "Step 17: Self-intersecting paths and how they are filled. There is a simple algorithm to determine whether given point will be filled or not: - take an arbitrary point, infinitely distant from path interior and connect it with a point under the question. - count how many times the resulting ray intersects with path segments - if number of intersections is odd, then given point will be filled - if number of intersections is even, then given point will NOT be filled " | path | path := surface createPath: [:builder | builder moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; lineTo: 80@ -30; close ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 ; scaleBy:3. canvas setShape: path. canvas setPaint: Color yellow. canvas draw. canvas pathTransform loadIdentity. "draw a line to demonstrate imaginery ray" canvas setStrokePaint: Color blue. canvas drawShape: (canvas createPath: [:b | b lineTo:300@300 ]) ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 04:39'! step18 "Step 18: Creating hollow shapes using multiple contours. " | path | path := surface createPath: [:builder | builder "The first contour is a rectangle" moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; close; "A second contour is a rectangle, embedded into previous one. " "Important to note here: a close and moveTo: commands are ones which starting new contour. If there is no #close segment, but moveTo: , it is counted as if implicit #close segment were added. This is of course relevant only for filled paths, not stoked ones" moveTo: 10@10; lineTo: 0@30; lineTo: 30@0; lineTo: 0@ -30; close. "An important note here: the winding of contours must be different in order to exclude the area inside one contour from another. If contours having same winding (both clockwise or both counter-clockwise, they will be both filled." "The third rectangle intersecting with both contours, try to change the initial moveTo: segment coordinates to draw it outside or inside and see the difference" builder moveTo: 25@10; lineTo: 0@10; lineTo: 10@0; lineTo: 0@ -10; close. ]. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: surface width/2.0 Y: surface height / 2.0 ; scaleBy:3. canvas setShape: path. canvas setPaint: Color yellow. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/16/2013 15:49'! step19 "Step 19: Using gradient paints. So far we're use a simplest kind of paint: just a solid color. Now let's play with gradients. " | linearGradient | "A linear gradient defined used 3 parameters: - a color ramp (a points in range from 0 to 1 with associated colors) - origin (starting) point - end (stop) point A vector connecting start and stop defines the direction which gradient will be facing, as well as its dimensions. " linearGradient := surface createLinearGradient: { 0 -> Color blue . 0.25 -> Color red. 0.5 -> Color white. 0.75 -> Color yellow. 1 -> Color green } start: 0@0 stop: 100@100. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: 10 Y: 10. canvas setShape: (0@0 corner:100@100). canvas setPaint: linearGradient. canvas draw. canvas pathTransform translateX: 150 Y: 0. "Here we are using a paint tranform to change the gradient's direction and scale" canvas paintTransform rotateByDegrees: 45; scaleBy: 0.7. canvas draw. canvas pathTransform translateX: 150 Y: 0. "The areas outside the ramp boundary filled by extending the colors defined for 0 and 1 points of ramp respectively. (blue for top, green for bottom, in our case)" canvas paintTransform translateX: 0 Y: 80; scaleBy: 0.2. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/16/2013 15:41'! step2 "Step 2: Creating a surface. Protocol: extent: x@y will create a surface using specific class. All surfaces is conformant to AthensSurface protocol. Example: " surface := AthensCairoSurface extent: self extent asIntegerPoint. "IMPORTANT NOTE: the surface which we will create at this step will be used in later steps. This means that if you resize the window (changing the view size), you may need to recreate surface. Also, since surface uses external resources, quitting an image and restarting it, will also require to create a new surface, because the one from previous session will be no longer accessible. " ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 04:07'! step20 "Step 20: Radial gradients. " | ramp perfectRadial radialWithCustomFocus | "A radial gradient defined using following parameters: - a color ramp (a points in range from 0 to 1 with associated colors) - center point - radius - focal point (can be omited if focus is at center) " ramp := { 0 -> Color blue . 0.25 -> Color red. 0.5 -> Color white. 0.75 -> Color yellow. 1 -> (Color blue alpha: 0) }. perfectRadial := surface createRadialGradient: ramp center: 50@50 radius: 50 . radialWithCustomFocus := surface createRadialGradient: ramp center: 50@50 radius: 50 focalPoint: 20@20. surface drawDuring: [:canvas | surface clear: Color gray. canvas pathTransform translateX: 10 Y: 10. canvas setShape: (0@0 corner:100@100). canvas setPaint: perfectRadial. canvas draw. canvas pathTransform translateX: 150 Y: 0. canvas setPaint: radialWithCustomFocus. canvas draw. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 04:30'! step21 "Step 21: Pattern paints (bitmap paints). " | formPaint | formPaint := surface createFormPaint: Form fromUser. formPaint noRepeat. "use #repeat to repeat the fill ad infinitum using tiling effect " surface drawDuring: [:canvas | surface clear: Color gray. canvas setPaint: formPaint. "And of course, using the paint transform we can affect the result" canvas paintTransform scaleBy: 4. canvas drawShape: (0@0 corner: surface extent). ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 04:43'! step22 "Step 22: Using another surface as paint. Simply pass surface as an argument to #setPaint: method. " | surface2 | surface2 := AthensCairoSurface extent: 10@10. "checker board" surface2 drawDuring: [:canvas | surface2 clear. canvas setPaint: Color white. canvas drawShape: (0@0 corner: 5@5); drawShape: (5@5 corner: 10@10) ]. surface drawDuring: [:canvas | surface clear: Color gray. (canvas setPaint: surface2) repeat. "And of course, using the paint transform we can affect the result. Uncomment the line below to see the difference" "canvas paintTransform scaleX: 3 Y:1; rotateByDegrees: 45 ." canvas drawShape: (0@0 corner: surface extent). ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 05:02'! step23 "Step 23: Stroke paints. Stroke paint is a special kind of paint, which instead of filling the shape, drawing a connected contour of certain width following the path. " | path | path := surface createPath: [:builder | builder moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; lineTo: 80@ -30; close ]. surface drawDuring: [:canvas | | stroke | surface clear: Color gray. "A stroke paint uses another paint for fills" stroke := canvas setStrokePaint: Color white. "You can control the width of stroke by setting width parameter" stroke width: 5. canvas pathTransform translateX: 400 Y:400; scaleBy: 4. canvas drawShape: path. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 05:20'! step24 "Step 24: Stroke paints: Join type. The stroke join type affects how to connect the segments. " | path | path := surface createPath: [:builder | builder moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; lineTo: 80@ -30; close ]. surface drawDuring: [:canvas | | stroke | surface clear: Color gray. stroke := canvas setStrokePaint: Color white. stroke width: 5. "There are 3 kinds of joins: bevel, miter and round (uncomment to see the difference)" stroke joinBevel. " stroke joinRound. stroke joinMiter. " canvas pathTransform translateX: 400 Y:400; scaleBy: 4. canvas drawShape: path. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 05:21'! step25 "Step 25: Stroke paints: Cap style The cap style affects drawing the end segments (what kind of 'cap' to use). " | path | path := surface createPath: [:builder | builder moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; lineTo: 80@ -30 ]. surface drawDuring: [:canvas | | stroke | surface clear: Color gray. stroke := canvas setStrokePaint: Color white. stroke width: 5. stroke joinRound. "There are 3 kinds of cap: - round - square - and butt (uncomment to see the difference) " stroke capRound. "stroke capButt." "stroke capSquare. " canvas pathTransform translateX: 400 Y:400; scaleBy: 4. canvas drawShape: path. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 06:02'! step26 "Step 26: Stroke paints: Dashing " | path | path := surface createPath: [:builder | builder moveTo: -50@ -50; lineTo: 50@0; lineTo: 0@50; lineTo: -50@0; lineTo: 80@ -30 ]. surface drawDuring: [:canvas | | stroke | surface clear: Color gray. stroke := canvas setStrokePaint: Color white. stroke width: 5. stroke joinRound. "There are 3 kinds of cap: - round - square - and butt (uncomment to see the difference) " stroke capRound. stroke dashes: #( "fill"20 "gap"10 "fill" 35 "gap" 30) offset: 0. canvas pathTransform translateX: 400 Y:400; scaleBy: 4. canvas drawShape: path. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 06:06'! step27 "Step 27: Paint modes The paint mode controls how incoming (source) fragments will be combined with what is already on surface (destination). " surface drawDuring: [:canvas | | stroke | surface clear: Color gray. "Draw a blue rectangle to use it as background " canvas setPaint: Color blue. canvas drawShape: (0@0 corner: 300@300). canvas paintMode over. "Try one of following paint modes, and see the result: clear source over <=== this is default mode in out atop dest destOver destIn destOut destAtop xor add saturate multiply screen overlay darken lighten colorDodge colorBurn hardLight softLight difference exclusion hslHue hslSaturation hslColor hslLuminosity You can check if given mode is supported by sending: canvas paintMode availableModes " "Draw a semi-transparent yellow rectangle to combine it with background " canvas setPaint: (Color yellow alpha: 0.5). canvas drawShape: (150@150 corner: 450@450). ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 06:15'! step28 "Step 28: Paint modes. Preserving the modes. " surface drawDuring: [:canvas | | stroke | surface clear: Color gray. "Draw a blue rectangle to use it as background " canvas setPaint: Color blue. canvas drawShape: (0@0 corner: 300@300). "Try to comment #restoreAfter: to see the difference " canvas paintMode restoreAfter: [ canvas paintMode source. canvas setPaint: (Color yellow alpha: 0.5). canvas drawShape: (150@150 corner: 450@450). ]. canvas setPaint: (Color red). canvas drawShape: (200@200 corner: 500@500). ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 06:17'! step29 "Step 29: Clipping. " surface drawDuring: [:canvas | | stroke | surface clear: Color gray. "Draw a blue rectangle to use it as background " canvas setPaint: Color blue. canvas clipBy: (100@100 corner: 200@200) during: [ canvas drawShape: (0@0 corner: surface extent). ]. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 03:17'! step3 "Step 3: Start drawing. Any drawing operations on surface is performed within #drawDuring: block. There is no other (valid) way of obtaining canvas instance. " surface drawDuring: [:canvas | "First, we clear the surface" surface clear. "we can use surface clear: Color black. as well. A #clear is equivalent to: (surface clear: Color transparent). " "Let''s draw a simple green rectangle" canvas setPaint: Color green. canvas setShape: (40@40 corner: 100@100). canvas draw. ] "Important to note: - canvas instance should be used only within #drawDuring: scope. " ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/16/2013 15:37'! step30 "Step 30: drawing text. Please note that this step requires Freetype enabled. Check if you enabled it in settings. From world menu, go System->Settings And then look for Appearance -> Use freetype in settings browser. " | font | font := LogicalFont familyName: 'Arial' pointSize: 20. surface drawDuring: [:canvas | surface clear: Color black. "set font and color" canvas setFont: font. canvas setPaint: Color red. "translate an origin by font's ascent, otherwise we will see only things below baseline" canvas pathTransform scaleBy: 4. canvas pathTransform translateX: 0 Y: (font getPreciseAscent). canvas drawString: 'Hello Athens!!'. ]. ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 9/3/2013 15:30'! step31 "The End!!" | font ramp perfectRadial | font := LogicalFont familyName: 'Arial' pointSize: 20. ramp := { 0 -> Color blue . 0.25 -> Color red. 0.5 -> Color white. 0.75 -> Color yellow. 1 -> (Color blue alpha: 1.0) }. perfectRadial := surface createRadialGradient: ramp center: 40@5 radius: 40 . surface drawDuring: [:canvas | surface clear: Color black. canvas setFont: font. canvas setPaint: perfectRadial. canvas pathTransform scaleBy: 4. canvas pathTransform translateX: 0 Y: (font getPreciseAscent). canvas drawString: 'The End!!'. ].! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 03:18'! step4 "Step 4: Shapes and paints. " surface drawDuring: [:canvas | surface clear: Color black. "There's two objects involved in any draw operation: - paint - shape The #draw API method simply fills current shape with current paint. " "To set current paint, use #setPaint: method " canvas setPaint: Color green. "To set current shape use #setShape: method " canvas setShape: (40@40 corner: 100@100). "Nothing will be drawn until #draw command will be issued: " canvas draw. ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:25'! step5 "Step 5: Coordinates. The initial coordinate space set up to cover entire surface using its dimensions. " surface drawDuring: [:canvas | surface clear: Color black. "x axis: goes from left to right" canvas setPaint: Color red. "here we're using #drawShape: convenience method, which is simply setShape: + draw " canvas drawShape: (0@0 corner: surface width@5). "y axis: goes from top to bottom" canvas setPaint: Color blue. canvas drawShape: (0@0 corner: 5@surface height). ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 02:27'! step6 "Step 6: Transforming coordinate space. There are two transformation matrices which control coordinate space: - path transform - paint transform Both transformations represented by affine transformation matrices. (See AthensAffineTransform class for details). Accessing path transform: pathTransform Accessing paint transform: paintTransform " surface drawDuring: [:canvas | surface clear: Color black. "Here, we're translating the canvas coordinate system origin, so now it will be at 100@50 in surface's coordinate system" canvas pathTransform translateX: 100 Y: 50. "x axis" canvas setPaint: Color red. canvas drawShape: (0@0 corner: surface width@5). "y axis" canvas setPaint: Color blue. canvas drawShape: (0@0 corner: 5@surface height). ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 03:19'! step7 "Step 7: Scaling. Protocol: scaleBy: or: scaleX: Y: " surface drawDuring: [:canvas | surface clear: Color gray. canvas setShape: (0@0 corner: 100@100). canvas setPaint: Color white. canvas draw. "try to vary the scale argument to see the difference" canvas pathTransform scaleBy: 2. canvas setPaint: (Color yellow alpha: 0.3). canvas draw. ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 03:22'! step8 "Step 8: Rotating. Protocol: rotateByDegrees: or: rotateByRadians: " surface drawDuring: [:canvas | surface clear: Color gray. canvas setShape: (0@0 corner: 100@100). canvas setPaint: (Color blue). canvas pathTransform scaleBy:3; translateX: 50 Y: 50. canvas draw. canvas setPaint: Color yellow. canvas pathTransform translateX: 50 Y: 50; scaleBy: 0.7@0.5; rotateByDegrees: 45; "You can also use #rotateByRadians: if it fits better for you. There is no #rotate: because it ambiguous" translateX: -50 Y: -50. canvas draw. ] ! ! !AthensViewMorph methodsFor: 'steps' stamp: 'IgorStasenko 4/3/2013 00:26'! step9 "Step 9: Saving & restoring transformation. Protocol: restoreAfter: [ block ] " surface drawDuring: [:canvas | surface clear: Color gray. canvas setShape: (0@0 corner: 100@100). canvas pathTransform scaleBy:3; translateX: 50 Y: 50. "Try to comment #restoreAfter: , to run the code inside without it and see the difference" canvas pathTransform restoreAfter: [ canvas setPaint: (Color blue). canvas pathTransform translateX: 50 Y: 50; rotateByDegrees: 45; translateX: -50 Y: -50. canvas draw. ]. canvas setPaint: (Color yellow). canvas draw. ] ! ! !AthensTutorial commentStamp: '' prior: 79307950! To start tutorial, do: AthensTutorial open then follow the instructions and steps! !AthensTutorial class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/28/2013 15:58'! defaultSpec ^ SpecLayout composed newRow: [ :r | r newColumn: [ :col | col add: #dummyMorph ]; newColumn: [ :col | col newRow: [ :row | row add: #textPane ]. col newRow: [ :row | row add: #nextButton; add: #prevButton ] height: 50 . ] ]! ! !AthensTutorial class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/29/2013 14:19'! defaultSpec2 | x1 x2 | x1 := 0.5 + (0.5/3). x2 := x1 + (0.5/3). ^ SpecLayout composed add: #viewMorph origin: 0@0 corner: 0.5@1; add: #textPane origin: 0.5@0 corner: 1@1 offsetOrigin: 4@0 offsetCorner: 0@(50 negated); add: #doitButton origin: 0.5@1 corner: x1@1 offsetOrigin: 0@(46 negated) offsetCorner: 0@0; add: #prevButton origin: x1@1 corner: x2@1 offsetOrigin: 0@(46 negated) offsetCorner: 0@0; add: #nextButton origin: x2@1 corner: 1@1 offsetOrigin: 0@(46 negated) offsetCorner: 0@0; yourself! ! !AthensTutorial class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 5/6/2013 05:46'! open ^ self new openWithSpec! ! !AthensTutorial methodsFor: 'widgets' stamp: 'IgorStasenko 3/29/2013 14:20'! doitButton ^ doit! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/2/2013 22:38'! initializePresenter next whenActionPerformedDo: [ self nextStep ]. prev whenActionPerformedDo: [ self previousStep ]. doit whenActionPerformedDo: [ self performDoit ]. " textpane widget font: (LogicalFont familyName: 'Arial' pointSize: 20). " ! ! !AthensTutorial methodsFor: 'widgets' stamp: 'IgorStasenko 4/2/2013 22:30'! initializeWidgets self instantiateModels: #( textpane TextModel doit ButtonModel next ButtonModel prev ButtonModel ). prev label: '<-'; state: false. next label: '->'; state: false. doit label: 'do it'; state: false. textpane doItReceiver: self viewMorph. textpane aboutToStyle: true. self updateContents. ! ! !AthensTutorial methodsFor: 'widgets' stamp: 'IgorStasenko 3/28/2013 15:57'! nextButton ^ next! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'SeanDeNigris 4/3/2013 21:37'! nextStep stepNumber = 31 ifTrue: [ ^ self ]. stepNumber := self stepNumber + 1. self updateContents. ! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'RobertoMinelli 12/20/2013 13:07'! performDoit textpane hasUnacceptedEdits ifTrue: [ textpane accept ]. viewport widget class compilerClass new evaluate: textpane getText in: nil to: viewport widget notifying: nil ifFail: [self halt. self flash. ^ nil] logged: false. viewport widget changed. ! ! !AthensTutorial methodsFor: 'widgets' stamp: 'IgorStasenko 3/28/2013 15:57'! prevButton ^ prev! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/29/2013 13:17'! previousStep stepNumber := self stepNumber - 1 max: 1. self updateContents. ! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/29/2013 13:12'! stepNumber ^ stepNumber ifNil: [ stepNumber := 1 ]! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 4/2/2013 23:40'! stepText | text | text := (AthensViewMorph >> ('step' , self stepNumber asString) asSymbol) sourceCode. ^ text allButFirst: (text indexOf: Character cr) ! ! !AthensTutorial methodsFor: 'widgets' stamp: 'IgorStasenko 3/28/2013 15:55'! textPane ^ textpane ! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/29/2013 13:12'! title ^ 'Athens tutorial. Step: ' , self stepNumber asString ! ! !AthensTutorial methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 3/29/2013 13:16'! updateContents textpane text: self stepText. self updateTitle.! ! !AthensTutorial methodsFor: 'widgets' stamp: 'RobertoMinelli 12/20/2013 13:05'! viewMorph ^ viewport ifNil: [ viewport := AthensViewMorph new asSpecAdapter ]! ! "Athens-Tutorial"! "Spec-Core"! "Spec-Tools"! ----End fileIn----! ----QUIT----2013-12-20T16:26:57.721106+01:00 Pharo.image priorSource: 28964630! ----STARTUP----2013-12-20T16:32:38.803232+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-20T16:32:38.981229+01:00 Pharo-30658.image priorSource: 29011659! ----STARTUP----2013-12-21T01:01:49.205319+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/21/2013 00:58' prior: 79296577! commentForCurrentUpdate ^ '12477 Move MethodFinder old tests from code to TestsPackages https://pharo.fogbugz.com/f/cases/12477 12055 The Spec Debugger should not require the registered inspector to be built on Spec https://pharo.fogbugz.com/f/cases/12055 11743 Debugger fix the key shortcuts https://pharo.fogbugz.com/f/cases/11743'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/21/2013 00:58'! script312 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.335.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.69.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.899.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.230.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.628.mcz NautilusCommon-MarcusDenker.186.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.300.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.263.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.146.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.169.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.664.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1379.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.608.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/21/2013 00:58'! update30659 "self new update30659" self withUpdateLog: '12477 Move MethodFinder old tests from code to TestsPackages https://pharo.fogbugz.com/f/cases/12477 12055 The Spec Debugger should not require the registered inspector to be built on Spec https://pharo.fogbugz.com/f/cases/12055 11743 Debugger fix the key shortcuts https://pharo.fogbugz.com/f/cases/11743'. self loadTogether: self script312 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecDebuggerStack commentStamp: '' prior: 69332436! A SpecDebuggerStack is responsible for displaying and managing the stack. All actions from the context menu of the stack are loaded by using the pragmas 'self contextMenuDebuggingActions'.! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 16:58'! testAbs "self debug: #testAbs" self assert: (MethodFinder new load: #((4) 4 (-10) 10 (-3) 3 (2) 2 (-6) 6 (612) 612)) searchForOne asArray equals: #('data1 abs')! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 17:06'! testDivision "self debug: #testDivision" self assert: (MethodFinder new load: #((7 5) 2 (4 5) 4 (-9 4) 3)) searchForOne asArray equals: #('data1 \\ data2'). self assert: (MethodFinder new load: #((35) 3 (17) 1 (5) 5)) searchForOne asArray equals: #('data1 \\ 8'). self assert: (MethodFinder new load: #((12 4 8) 2 (1 3 6) 2 (5 2 16) 8) ) searchForOne asArray equals: #().! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 17:11'! testGreaterThanANumber "self debug: #testGreaterThanANumber" self assert: (MethodFinder new load: {#(7). true. #(4.1). true. #(1.5). false}) searchForOne asArray equals: #('data1 >= 4.1'). self assert: (MethodFinder new load: {#(4 3). true. #(-7 3). false. #(5 1). true. #(5 5). false}) searchForOne asArray equals: #('data1 > data2'). self assert: (MethodFinder new load: #((36) 7 (50) 10)) searchForOne asArray equals: #( 'data1 // 5' 'data1 quo: 5')! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 17:03'! testPolynomial "self debug: #testPolynomial" self assert: (MethodFinder new load: #( ((2 3) 2) 8 ((2 3) 5) 17 )) searchForOne asArray equals: #('data1 polynomialEval: data2'). self assert: (MethodFinder new load: #((2) 8 (5) 17 )) searchForOne asArray equals: #('#(2 3) polynomialEval: data1') ! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 17:00'! testPower "self debug: #testPower" self assert:(MethodFinder new load: #((7) 2 (4) 2 )) searchForOne asArray equals: #('^ 2')! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 16:52'! testSearchForAccessAtOne "self debug: #testSearchForAccessAtOne" self assert: (MethodFinder new load: #(('abcd' 1) $a ('Ted ' 3) $d )) searchForOne asArray equals: #('data1 at: data2' 'data1 atPin: data2' 'data1 atWrap: data2') ! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 16:50'! testSearchForOne "self debug: #testSearchForOne" self assert: (MethodFinder new load: #(('abcd') $a ('TedK') $T)) searchForOne asArray equals: #('data1 first' 'data1 anyOne') ! ! !MethodFinderTest methodsFor: 'test examples' stamp: 'YuriyTymchuk 12/20/2013 16:55' prior: 26454263! testSubstraction "self debug: #testSubstraction" self assert: (MethodFinder new load: #((14 3) 11 (-10 5) -15 (4 -3) 7)) searchForOne asArray equals: #('data1 - data2'). self assert: (MethodFinder new load: #(((12 4 8)) 24 ((1 3 6)) 10 ) ) searchForOne asArray equals: #('data1 sum') ! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 12/20/2013 13:08' prior: 69328508! initializePresenter super initializePresenter. self flag: 'some of this logic could be moved to the stack widget'. self flag: 'The toolbar should not be updated when the list changes, but when an action is perormed.'. self stack whenListChanged: [ :aList | aList isEmpty ifFalse: [ self stack setSelectedItem: aList first ]. "Updating the toolbar will result in changing the button widgets. If the widget hasn't been opened, there will be no spec, which leads to an error." self spec ifNotNil: [ self updateToolbar ] ]. self stack whenSelectedItemChanged: [:aContext | self updateCodeFromContext: aContext. self updateInspectorsFromContext: aContext. self stack updateForSelectionChanged ]. self contextInspector initializeAutoRefresh.! ! !FinderNode methodsFor: 'private' stamp: 'MarcusDenker 12/21/2013 00:53' prior: 22140250! displayString ^ self item asString! ! !ToolRegistry methodsFor: 'convenience-inspecting' stamp: 'AndreiChis 12/20/2013 16:32' prior: 41610433! inspectorClass ^ EyeInspector ! ! !DebugAction methodsFor: '*spec-debugger' stamp: 'AndreiChis 12/20/2013 14:59' prior: 69281808! asMenuRegistrationIn: aBuilder | item | item := (aBuilder item: self specId) label: self label, (self keyText ifNil: [ '' ] ifNotNil: [ ' (', self keyText, ')' ] ); icon: self icon; enabled: self enabled; order: self order asFloat; target: self; selector: #execute; arguments: #(). self needsSeparatorAfter ifTrue: [ item withSeparatorAfter ]. ^ item ! ! !DebugAction methodsFor: '*spec-debugger' stamp: 'AndreiChis 12/20/2013 20:52'! shortcutCommand self flag: 'hacky solution to still be compatible with the GTDebugger (for the moment)'. ^ self keyText ifNotNil: [:aString | aString first isUppercase ifTrue: [ aString first command shift ] ifFalse: [ aString first command ] ]! ! !SpecDebuggerStack commentStamp: '' prior: 79355376! A SpecDebuggerStack is responsible for displaying and managing the stack. All actions from the context menu of the stack are loaded by using the pragmas 'self contextMenuDebuggingActions'.! !SpecDebuggerStack class methodsFor: 'menu' stamp: 'AndreiChis 12/20/2013 12:30' prior: 69332964! dynamicStackMenu: aBuilder aBuilder model stack generateContextMenuDebuggingActions do: [ :anAction | anAction asMenuRegistrationIn: aBuilder ]! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 12/20/2013 12:51' prior: 69338969! contextMenu: aMenu "Create the context menu dynamically." self flag: 'Spec ignores the shortcuts set in the menu. Use another mechanism to load them'. "This method of constructing the menu is used as it allow one to reuse the MenuRegistration class for creating the actual menu morphs." ^ aMenu addAllFromPragma: 'specDebuggerStackMenuNew' target: self debugger.! ! !SpecDebuggerStack methodsFor: 'actions lookup' stamp: 'AndreiChis 12/20/2013 12:43'! generateContextMenuDebuggingActions actionsCache ifNotNil: [ ^ actionsCache ]. "Cache the actions as this method is called multiple times: two times when the menu is created and one time when the registering shortcuts." ^ actionsCache := self session class debuggingActionsForPragmas: self contextMenuDebuggingActionsPragmas for: self debugger! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'AndreiChis 12/20/2013 11:20' prior: 69342250! initialize sessionHolder := nil asValueHolder. actionsCache := nil. super initialize. "self setDefaultFilters."! ! !SpecDebuggerStack methodsFor: 'updating' stamp: 'AndreiChis 12/20/2013 12:49'! updateDebuggingActions actionsCache ifNotNil: [ actionsCache do: [ :each | each shortcutCommand ifNotNil: [ :aShortcut | self list removeKeyCombination: aShortcut ] ] ]. actionsCache := nil. self generateContextMenuDebuggingActions. actionsCache do: [ :each | each shortcutCommand ifNotNil: [ self list bindKeyCombination: each shortcutCommand toAction: [ each execute ] ] ].! ! !SpecDebuggerStack methodsFor: 'updating' stamp: 'AndreiChis 12/20/2013 13:07'! updateForSelectionChanged self expand; takeKeyboardFocus; "This is needed, as otherwise, the inspectors will take the focus" updateDebuggingActions ! ! !MethodFinder methodsFor: 'initialize' stamp: 'CamilloBruni 11/5/2013 16:55' prior: 76863348! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed "private" copyReplaceAll:with:asTokens: ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !MethodFinder methodsFor: 'tests' stamp: 'ar 4/10/2005 18:48' prior: 26406684! test2: anArray "look for bad association" anArray do: [:sub | sub class == Association ifTrue: [ (#('true' '$a' '2' 'false') includes: sub value printString) ifFalse: [ self error: 'bad assn']. (#('3' '5.6' 'x' '''abcd''') includes: sub key printString) ifFalse: [ self error: 'bad assn']. ]. sub class == Array ifTrue: [ sub do: [:element | element isString ifTrue: [element first asciiValue < 32 ifTrue: [ self error: 'store into string in data']]. element class == Association ifTrue: [ element value class == Association ifTrue: [ self error: 'bad assn']]]]. sub class == Date ifTrue: [sub year isInteger ifFalse: [ self error: 'stored into input date!!!!']]. sub class == Dictionary ifTrue: [ sub size > 0 ifTrue: [ self error: 'store into dictionary']]. sub class == OrderedCollection ifTrue: [ sub size > 4 ifTrue: [ self error: 'store into OC']]. ].! ! SpecDebuggerStack removeSelector: #contextMenuDebuggingActions! MethodFinder removeSelector: #verify! MethodFinder removeSelector: #testRandom! "Spec-Debugger"! "System-Tools"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----2013-12-21T01:01:56.479319+01:00 Pharo.image priorSource: 29011856! ----STARTUP----2013-12-21T01:07:36.328429+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-21T01:07:36.494424+01:00 Pharo-30659.image priorSource: 29043109! ----STARTUP----2013-12-26T09:43:15.387345+01:00 as /Users/denker/Projects/Pharo/30659/Pharo-30659.image! ----QUIT----2013-12-26T09:43:17.360748+01:00 Pharo-30659.image priorSource: 29043306! ----STARTUP----2013-12-26T09:43:27.212469+01:00 as /Users/denker/Projects/Pharo/30659/Pharo-30659.image! ----QUIT----2013-12-26T09:43:43.770245+01:00 Pharo-30659.image priorSource: 29043504! ----STARTUP----2013-12-26T09:44:04.364083+01:00 as /Users/denker/Projects/Pharo/30659/Pharo-30659.image! ----QUIT----2013-12-26T09:49:29.472279+01:00 Pharo-30659.image priorSource: 29043698! ----STARTUP----2013-12-26T10:02:56.080022+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/26/2013 09:25' prior: 79343803! commentForCurrentUpdate ^ '12426 Morph menu has strange behavior when the Morph label is too large https://pharo.fogbugz.com/f/cases/12426 12505 Workaround: skip testChangeInSuperclass https://pharo.fogbugz.com/f/cases/12505 12474 Cleaning Nautilus extensions https://pharo.fogbugz.com/f/cases/12474 12436 Move ReleaseTest to its own package https://pharo.fogbugz.com/f/cases/12436'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/26/2013 09:26'! script313 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.630.mcz NautilusCommon-MarcusDenker.189.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.146.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.169.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1379.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/26/2013 09:26'! update30660 "self new update30660" ScriptLoader new addHomeRepositoryToAllPackages. self withUpdateLog: '12426 Morph menu has strange behavior when the Morph label is too large https://pharo.fogbugz.com/f/cases/12426 12505 Workaround: skip testChangeInSuperclass https://pharo.fogbugz.com/f/cases/12505 12474 Cleaning Nautilus extensions https://pharo.fogbugz.com/f/cases/12474 12436 Move ReleaseTest to its own package https://pharo.fogbugz.com/f/cases/12436'. self loadTogether: self script313 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ReleaseTest commentStamp: '' prior: 42624312! I contain tests that validate the integrity of the system.! !RPackage methodsFor: 'comparing' stamp: '' prior: 31775203! <= aRPackage ^ self name <= aRPackage name! ! !RPackage methodsFor: 'accessing' stamp: 'YuriyTymchuk 12/20/2013 15:30' prior: 31778286! extendedClasses "Return classes and metaclasses that are extended in the receiver. They represent the classes of method extensions" ^ (metaclassExtensionSelectors keys select: [ :each| Smalltalk globals includesKey: each ] thenCollect: [:each | (Smalltalk globals at: each) theMetaClass]) union: (classExtensionSelectors keys select: [ :each| Smalltalk globals includesKey: each ] thenCollect: [:each | Smalltalk globals at: each])! ! !RPackage methodsFor: 'file in/out' stamp: 'EstebanLorenzano 12/11/2013 16:57' prior: 78913029! fileOut | internalStream | internalStream := (String new: 1000) writeStream. self classTags do: [ :each | SystemOrganization fileOutCategory: each name on: internalStream ]. classExtensionSelectors keysAndValuesDo: [ :className :selectors | selectors do: [ :selector | | extendedClass | extendedClass := Smalltalk globals classNamed: className. extendedClass fileOutMethod: selector on: internalStream ] ]. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !RPackage methodsFor: 'all accessing' stamp: '' prior: 31775512! orderedClasses | tmp | tmp := self definedClasses asArray sort: [:a :b | a name <= b name]. tmp := tmp, (self extendedClasses asArray sort: [:a :b | a name <= b name]). ^tmp collect: [:e | e theNonMetaClass ] ! ! !PluggableListMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 5/9/2012 11:28' prior: 29420080! getListElementSelector ^ getListElementSelector! ! !FLMigrationTest methodsFor: 'tests-automatic' stamp: 'MarcusDenker 12/26/2013 09:12' prior: 21607238! testChangeInSuperclass "Tests that serializer tolarates when there is a change in the superclass between serialization and materialization" | aClass aClassSubclass instance materializedInstance | self skip. "lead to crashes on the build server, temporary disabled" aClass := self newClassWithInstanceVariableNames: 'a b c' superclass: Object. aClassSubclass := self newClassWithInstanceVariableNames: 'd e' superclass: aClass. instance := aClassSubclass new. instance instVarNamed: 'a' put: $A. instance instVarNamed: 'b' put: $B. instance instVarNamed: 'c' put: $C. instance instVarNamed: 'd' put: $D. instance instVarNamed: 'e' put: $E. self serialize: instance. aClass removeInstVarNamed: 'a'. aClass removeInstVarNamed: 'b'. aClass addInstVarNamed: 'x'. aClassSubclass superclass: aClass. materializedInstance := self materialized. self assert: $D = (materializedInstance instVarNamed: 'd'). self assert: $E = (materializedInstance instVarNamed: 'e'). self should: [materializedInstance instVarNamed: 'a'] raise: Error. self should: [materializedInstance instVarNamed: 'b'] raise: Error. self assert: $C = (materializedInstance instVarNamed: 'c'). self assert: (materializedInstance instVarNamed: 'x') isNil. ! ! !RPackageTag methodsFor: 'file in/out' stamp: 'EstebanLorenzano 12/11/2013 16:53' prior: 78913624! fileOut | internalStream | internalStream := (String new: 1000) writeStream. SystemOrganization fileOutCategory: self name on: internalStream. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !MCPackage methodsFor: 'testing' stamp: '' prior: 24890101! isDirty | modifiedPackages | modifiedPackages := MCWorkingCopy allManagers select: [ :each | each modified ]. ^ modifiedPackages anySatisfy: [:wc | wc package = self ]! ! !ReleaseTest commentStamp: '' prior: 79387590! I contain tests that validate the integrity of the system.! !ReleaseTest class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:47' prior: 41480524! actualProcesses ^ Process allSubInstances reject: [ :each | each isTerminated ]! ! !ReleaseTest class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:47' prior: 41480697! knownProcesses "Return a dynamic list of know processes" "(self actualProcesses difference: self knownProcesses) do: [ :each | each suspend; terminate ]." ^ { Processor activeProcess. InputEventFetcher default fetcherProcess. WeakArray runningFinalizationProcess. Processor backgroundProcess. SmalltalkImage current lowSpaceWatcherProcess. UIManager default uiProcess. Delay schedulingProcess } asSet! ! !ReleaseTest methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:48' prior: 41481206! actualProcesses ^ self class actualProcesses! ! !ReleaseTest methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 6/23/2013 20:38' prior: 41481338! knownProcesses ^ self class knownProcesses! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 2/10/2013 17:36' prior: 32250213! testInstalledMethodsWithIncorrectTrailerKind | incorrectMethods | incorrectMethods := SystemNavigation new installedMethodsWithIncorrectTrailerKind. self assert: incorrectMethods isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Found methods with incorrect trailer kind: '; print: incorrectMethods ]]. ! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 2/10/2013 17:35' prior: 32250637! testInstanceSideMethodsWithNilKeyInLastLiteral | instanceSideMethodsWithNilKeyInLastLiteral | instanceSideMethodsWithNilKeyInLastLiteral := SystemNavigation new instanceSideMethodsWithNilKeyInLastLiteral. self assert: instanceSideMethodsWithNilKeyInLastLiteral isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Found methods with nil as last literal: '; print: instanceSideMethodsWithNilKeyInLastLiteral ]]. ! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 7/17/2013 14:32' prior: 45254571! testLayoutIntegrity SystemNavigation default allClassesDo: [ :class | class theNonMetaClass layout checkIntegrity. class theMetaClass layout checkIntegrity ]! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 3/1/2013 16:40' prior: 32251165! testMethodsWithUnboundGlobals | methodsWithUnboundGlobals | self skip. "Ensure the environment is clean" 3 timesRepeat: [ Smalltalk garbageCollect ]. Smalltalk cleanOutUndeclared. methodsWithUnboundGlobals := SystemNavigation new methodsWithUnboundGlobals. self assert:methodsWithUnboundGlobals isEmpty description: [ String streamContents: [ :s | s nextPutAll: 'Found methods with unbound globals: '; print: methodsWithUnboundGlobals ]]! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenke 10/23/2013 13:27' prior: 75461400! testObsoleteClasses | obsoleteClasses | Smalltalk fixObsoleteReferences. obsoleteClasses := SystemNavigation new obsoleteClasses select: [ :each | each isAnonymous not ]. self assert: obsoleteClasses isEmpty description: [ String streamContents: [ :s| s nextPutAll: 'Obsolete classes remaining: '; print: obsoleteClasses ]]! ! !ReleaseTest methodsFor: 'testing' stamp: 'CamilloBruni 2/10/2013 17:34' prior: 32252769! testUndeclared | undeclaredReferences | Smalltalk cleanOutUndeclared. undeclaredReferences := Undeclared. self assert: undeclaredReferences isEmpty description: (String streamContents: [ :s| s nextPutAll: 'Found undeclared references: '; print: undeclaredReferences ]) ! ! !ReleaseTest methodsFor: 'testing' stamp: 'MarcusDenker 11/15/2013 11:25' prior: 77096985! testUnknownProcesses "Make sure that there are no other processes running except the known processes" | unknownProcesses | unknownProcesses := self actualProcesses difference: self knownProcesses. self assert: unknownProcesses size <=2 description: (String streamContents: [ :out | out << 'Found unknown processes: '. unknownProcesses do: [ :each | out print: each ] separatedBy: [ out << ', ' ] ])! ! !NautilusHistoryEntry methodsFor: 'protocol' stamp: 'YuriyTymchuk 12/20/2013 15:44' prior: 75225220! applyTo: aNautilus aNautilus ui ifNotNil: [ :interface | interface resetSelections]. aNautilus selectedPackage: self selectedPackage; selectedClass: self selectedClass; selectedCategory: self selectedCategory. self selectedMethod ifNil: [ aNautilus selectedMethod: nil ] ifNotNil: [:sel | aNautilus selectedMethod: (self selectedClass methodDict at: sel ifAbsent: [ nil ])]. aNautilus browsingHistory pauseDuring: [ aNautilus selectedGroup: self selectedGroup; showPackages: self showPackages; showGroups: self showGroups; showHierarchy: self showHierarchy; showComment: self showComment; showInstance: self showInstance; showCategories: self showCategories. ]. aNautilus ui ifNotNil: [:interface || cl | cl := self selectedClass. interface showPackages: aNautilus showPackages. cl ifNil: [ interface showInstance: false ] ifNotNil: [ interface showInstance: cl isMeta not. cl := cl theNonMetaClass ]. interface selectedPackageWithoutChangingSelectionInternally: self selectedPackage; selectedClassWithoutChangingSelectionInternally: cl; selectedCategoryInternally: self selectedCategory. interface updateBothView. self selectedMethod ifNil: [ interface selectedMethod: nil ] ifNotNil: [:sel | interface selectedMethod: (cl compiledMethodAt: sel ifAbsent: [ nil ])]. interface update ].! ! !IconicButton methodsFor: 'accessing' stamp: 'YuriyTymchuk 12/20/2013 15:13' prior: 23481442! graphicalMorph ^ graphicalMorph! ! !IconicButton methodsFor: 'accessing' stamp: '' prior: 23481520! graphicalMorph: aMorph self addMorph: aMorph. aMorph lock.! ! !MenuMorph methodsFor: 'private' stamp: 'NicolaiHess 12/20/2013 13:33' prior: 25523156! setTitleParametersFor: aMenuTitle | menuTitleColor menuTitleBorderColor | self theme currentSettings preferRoundCorner ifTrue: [aMenuTitle useRoundedCorners]. menuTitleColor := self theme currentSettings autoMenuColor ifTrue: [self color darker] ifFalse: [self theme menuTitleColorFor: ((UIManager default respondsTo: #modalMorph) ifTrue: [UIManager default modalMorph] ifFalse: [nil])]. menuTitleBorderColor := self theme currentSettings menuTitleBorderColor. aMenuTitle color: menuTitleColor; borderWidth: 0; borderColor: menuTitleBorderColor; vResizing: #shrinkWrap; wrapCentering: #center; cellPositioning: #topLeft; maxCellSize:World width /2; clipSubmorphs:true; layoutInset: 0. ! ! !PragmaMenuAndShortcutRegistration methodsFor: 'keymapping protocol' stamp: 'YuriyTymchuk 12/20/2013 15:22' prior: 29907117! keyText: aString if: aBoolean aBoolean ifFalse: [ ^ self ]. self keyText: aString! ! !PragmaMenuAndShortcutRegistration methodsFor: 'keymapping protocol' stamp: 'GuillermoPolito 5/3/2013 15:49' prior: 36822062! setAsGlobalCategory: aGlobalCategory KMRepository default setAsGlobalCategory: aGlobalCategory! ! !TBehavior methodsFor: 'accessing' stamp: 'SebastianTleye 7/9/2013 11:06' prior: 44339838! realClass ^ self! ! ButtonModel removeSelector: #keyStroke:fromMorph:! RPackage removeSelector: #classesOfExtensionMethods! TBehavior removeSelector: #methodNamed:ifAbsent:! !Trait method! realClass ^ self! ! !Trait method! realClass ^ self! ! "FuelTests"! "MenuRegistration"! "Monticello"! "Morphic-Base"! "Nautilus"! "NautilusCommon"! "RPackage-Core"! "ReleaseTests"! "Spec-Core"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----2013-12-26T10:03:08.754023+01:00 Pharo.image priorSource: 29043892! ----STARTUP----2013-12-26T10:56:53.171987+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-26T10:56:53.443987+01:00 Pharo-30660.image priorSource: 29067510! ----STARTUP----2013-12-26T11:48:47.762363+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/26/2013 11:46' prior: 79375835! commentForCurrentUpdate ^ '12388 finder does not display the methods that got really executed https://pharo.fogbugz.com/f/cases/12388 12484 Give the Eye Inspector some love https://pharo.fogbugz.com/f/cases/12484'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/26/2013 11:46'! script314 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.630.mcz NautilusCommon-MarcusDenker.189.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.993.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.58.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.169.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1381.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/26/2013 11:46'! update30661 "self new update30661" self withUpdateLog: '12388 finder does not display the methods that got really executed https://pharo.fogbugz.com/f/cases/12388 12484 Give the Eye Inspector some love https://pharo.fogbugz.com/f/cases/12484'. self loadTogether: self script314 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeByteArrayInspector commentStamp: '' prior: 42261142! Specialized version of inspector showing the hex and string representation of the byte array in some variations. ! !FinderExampleMethodNode commentStamp: '' prior: 0! A FinderExampleMethodNode is a node used by the FinderUI's tree representing a Method deduced from an examples (by MethodFinder)! !FinderExampleClassNode commentStamp: '' prior: 0! A FinderExampleClassNode is a node used by the FinderUI's tree representing the Class for the method deduced from an examples (by MethodFinder)! !EyeDateAndTimeInspector commentStamp: '' prior: 0! I am EyeDateAndTimeInspector. I am an EyeInspector. I am a specialized Inspector for DateAndTime. I show all individual elements by name, as well as a UTC representation.! !EyeFloatInspector commentStamp: '' prior: 0! I am EyeFloatInspector. I am an EyeInspector. I am a specialized Inspector for Floats. I add extra elements (sign, significand, exponent) of the Float object that I am inspecting. Note that these should be interpreted as sign * significand * (2 raisedToInteger: exponent)! !EyeIntegerInspector commentStamp: '' prior: 42261879! Specialized version of inspector showing hex, octal and binary representations. If within Unicode range, show a Character having using the Integer value as code point.! !EyeByteArrayInspector commentStamp: '' prior: 79411019! Specialized version of inspector showing the hex and string representation of the byte array in some variations. ! !EyeByteArrayInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 12/21/2013 21:19' prior: 43486312! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex bytes' value: [ self objectAsHexBytes ]). elements add: (DynamicEyeElement host: self object label: 'hex string' value: [ self objectAsHexString ]). elements add: (DynamicEyeElement host: self object label: 'latin-1 string' value: [ self objectAsLatin1String ]). elements add: (DynamicEyeElement host: self object label: 'utf-8 string' value: [ [ self objectAsUTF8String ] on: ZnInvalidUTF8 do: [ :exception | exception asString ] ]).! ! !EyeByteArrayInspector methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/21/2013 20:56'! objectAsHexBytes ^ String streamContents: [ :s | s nextPutAll: '['. self object do: [ :each | s << (each printPaddedWith: $0 to: 2 base: 16) ] separatedBy: [ s nextPut: $ ]. s nextPut: $] ] limitedTo: 5000! ! !EyeByteArrayInspector methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/21/2013 20:56'! objectAsHexString ^ String streamContents: [ :s | self object do: [ :each | s << (each printPaddedWith: $0 to: 2 base: 16) ] ] limitedTo: 5000! ! !EyeByteArrayInspector methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/21/2013 20:50'! objectAsLatin1String | width str | str := String new: (width := self object size < 5000 ifTrue: [ self object size ] ifFalse: [ 5000 ]). str replaceFrom: 1 to: str size with: (self object copyFrom: 1 to: width). ^ str! ! !EyeByteArrayInspector methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/21/2013 21:01'! objectAsUTF8String ^ String streamContents: [ :out | | in encoder | encoder := ZnUTF8Encoder new. in := self object readStream. [ in atEnd ] whileFalse: [ out nextPut: (encoder nextFromStream: in) ] ] limitedTo: 5000! ! !FinderExampleMethodNode commentStamp: '' prior: 79411198! A FinderExampleMethodNode is a node used by the FinderUI's tree representing a Method deduced from an examples (by MethodFinder)! !FinderExampleMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/22/2013 00:08'! childNodeClassFromItem: anItem "I answer the class of my children nodes (if I have some)" ^ FinderExampleClassNode! ! !FinderExampleMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/22/2013 00:35'! receiver |index rec| index:=self item findString: self selector. rec:= self item copyFrom:1 to:(index-1). ^ Compiler evaluate:rec! ! !FinderExampleMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/22/2013 00:03'! selector ^ self model finder findSelector: self item! ! !FinderMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/21/2013 23:56' prior: 78299091! browseImplementors SystemNavigation new browseImplementorsOf: self selector name: 'Implementors of ', self selector autoSelect: nil! ! !FinderMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/22/2013 00:05' prior: 78299371! browseSenders SystemNavigation new browseSendersOf: self selector name: 'Senders of ', self selector autoSelect: self selector! ! !FinderMethodNode methodsFor: 'private' stamp: 'NicolaiHess 12/21/2013 23:56'! selector ^ self item! ! !FinderUI methodsFor: 't - accessing' stamp: 'NicolaiHess 12/21/2013 23:33' prior: 22163819! rootNodeClassFromItem: anItem "To have the good class for my nodes, I ask my owner, because he is the only one who knows his state" ^ self forSelectorsDo: [ (self resultDictionary at: anItem) size > 1 ifTrue: [ FinderMethodNode ] ifFalse: [ FinderSingleMethodNode ]] forClassNamesDo: [FinderClassNode] forSourceDo: [FinderMethodNode] forExamplesDo: [FinderExampleMethodNode] forPragmasDo: [FinderPragmaNode]! ! !FinderExampleClassNode commentStamp: '' prior: 79411391! A FinderExampleClassNode is a node used by the FinderUI's tree representing the Class for the method deduced from an examples (by MethodFinder)! !FinderExampleClassNode methodsFor: 'private' stamp: 'NicolaiHess 12/22/2013 00:25'! displayString (self parentNode receiver isKindOf: self item) ifTrue: [ ^ '*' , super displayString ]. ^ super displayString! ! !DateAndTime class methodsFor: '*Spec-Inspector' stamp: 'SvenVanCaekenberghe 12/21/2013 21:31'! inspectorClass ^ EyeDateAndTimeInspector! ! !EyeDateAndTimeInspector commentStamp: '' prior: 79411600! I am EyeDateAndTimeInspector. I am an EyeInspector. I am a specialized Inspector for DateAndTime. I show all individual elements by name, as well as a UTC representation.! !EyeDateAndTimeInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 12/21/2013 21:35'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'year' value: [ self object year ]). elements add: (DynamicEyeElement host: self object label: 'month of year' value: [ self object monthIndex ]). elements add: (DynamicEyeElement host: self object label: 'day of month' value: [ self object dayOfMonth ]). elements add: (DynamicEyeElement host: self object label: 'full hours' value: [ self object hours ]). elements add: (DynamicEyeElement host: self object label: 'full minutes' value: [ self object minutes ]). elements add: (DynamicEyeElement host: self object label: 'full seconds' value: [ self object seconds ]). elements add: (DynamicEyeElement host: self object label: 'utc' value: [ self object asUTC asString ])! ! !EyeFloatInspector commentStamp: '' prior: 79411832! I am EyeFloatInspector. I am an EyeInspector. I am a specialized Inspector for Floats. I add extra elements (sign, significand, exponent) of the Float object that I am inspecting. Note that these should be interpreted as sign * significand * (2 raisedToInteger: exponent)! !EyeFloatInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 12/21/2013 14:54'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'sign' value: [ self object sign ]). elements add: (DynamicEyeElement host: self object label: 'significand' value: [ self object significand ]). elements add: (DynamicEyeElement host: self object label: 'exponent' value: [ self object exponent ])! ! !EyeIntegerInspector commentStamp: '' prior: 79412175! Specialized version of inspector showing hex, octal and binary representations. If within Unicode range, show a Character having using the Integer value as code point.! !EyeIntegerInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 12/21/2013 13:05' prior: 36501843! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex' value: [ self object printStringRadix: 16 ]). elements add: (DynamicEyeElement host: self object label: 'octal' value: [ self object printStringRadix: 8 ]). elements add: (DynamicEyeElement host: self object label: 'binary' value: [ self object printStringRadix: 2 ]). (self object between: 0 and: 16r10FFFF) ifTrue: [ elements add: (DynamicEyeElement host: self object label: 'character' value: [ self object asCharacter printString ]) ]! ! !Float class methodsFor: '*Spec-Inspector' stamp: 'SvenVanCaekenberghe 12/21/2013 20:46'! inspectorClass ^ EyeFloatInspector! ! "Spec-Inspector"! "Tools"! ----End fileIn----! ----QUIT----2013-12-26T11:48:54.582364+01:00 Pharo.image priorSource: 29067707! ----STARTUP----2013-12-26T11:54:54.676366+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-26T11:54:54.942324+01:00 Pharo-30661.image priorSource: 29088363! ----STARTUP----2013-12-26T15:32:50.4132+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/26/2013 15:30' prior: 79399654! commentForCurrentUpdate ^ '12489 Hidden dependencies between Nautilus and ThemeIcons https://pharo.fogbugz.com/f/cases/12489 12507 run tests from package throws DNU https://pharo.fogbugz.com/f/cases/12507 12485 Splits and refactorings in the SpecLayout https://pharo.fogbugz.com/f/cases/12485 12509 Nautilus does not use changeStamp on newly modified class comment https://pharo.fogbugz.com/f/cases/12509'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/26/2013 15:30'! script315 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.135.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.632.mcz NautilusCommon-MarcusDenker.189.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.97.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.169.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1381.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/26/2013 15:30'! update30662 "self new update30662" self withUpdateLog: '12489 Hidden dependencies between Nautilus and ThemeIcons https://pharo.fogbugz.com/f/cases/12489 12507 run tests from package throws DNU https://pharo.fogbugz.com/f/cases/12507 12485 Splits and refactorings in the SpecLayout https://pharo.fogbugz.com/f/cases/12485 12509 Nautilus does not use changeStamp on newly modified class comment https://pharo.fogbugz.com/f/cases/12509'. self loadTogether: self script315 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecLayout commentStamp: '' prior: 42699668! A SpecPresenter is a object used to describe a user interface! !SpecColumnLayout commentStamp: '' prior: 42698289! A SpecColumnLayout is the layout used to specify a new column! !SpecRowLayout commentStamp: '' prior: 42700496! A SpecRowLayout isthe layout used to specify a new row! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 12/26/2013 10:29'! runPackagesTestsNotifying: aBoolean | packages classes label | (packages := self selectedPackages) ifNil: [ ^ self ]. packages size > 1 ifTrue: [ label := 'Packages: ' ] ifFalse: [ label := 'Package: ' ]. classes := packages gather: [ :package | package asNautilusSelection definedClasses ]. classes := classes select: [ :class | class inheritsFrom: TestCase ]. self runClassTests: classes notifying: false. aBoolean ifTrue: [ | color | (classes anySatisfy:[:e | e hasPassedTest ]) ifTrue: [ color := Color green ]. (classes anySatisfy:[:e | e hasFailedTest ]) ifTrue: [ color := Color yellow ]. (classes anySatisfy:[:e | e hasErrorTest ]) ifTrue: [ color := Color red ]. self notifyTitle: 'Test Finished' contents: label , ((packages collect: #name) joinUsing: ', ') color: color ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:55' prior: 37439345! backIcon "Private - Generated method" ^ icons at: #'back' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self backIconContents readStream) ].! ! !ThemeIcons methodsFor: 'private - contents' stamp: 'EstebanLorenzano 5/10/2013 13:19' prior: 37440698! blankIconContents ^ Form extent: 12 @ 12 depth: 8! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:55' prior: 48815519! bottomIcon ^ icons at: #'bottomIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self bottomIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:55' prior: 38186561! calendarIcon ^ icons at: #'calendarIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self calendarIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:56' prior: 38187741! changeSorterIcon ^ icons at: #'changeSorterIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self changeSorterIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:55' prior: 37513192! emptyIcon ^ icons at: #'emptyIcon' ifAbsentPut: [ self blankIconContents ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 37636615! smallDebugIcon "Private - Generated method" ^ icons at: #'smallDebug' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallDebugIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:56' prior: 68276946! smallForwardIconGray "Private - Generated method" ^ icons at: #'smallForwardGray' ifAbsentPut: [ self smallForwardIcon asGrayScaleWithAlpha ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 13:56' prior: 37649730! smallFullscreenIcon "Private - Generated method" ^ icons at: #'smallFullscreen' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallFullscreenIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:26' prior: 37651482! smallHelpIcon "Private - Generated method" ^ icons at: #'smallHelp' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallHelpIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:26' prior: 37653842! smallHomeIcon "Private - Generated method" ^ icons at: #'smallHome' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallHomeIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:27' prior: 37655097! smallInfoIcon "Private - Generated method" ^icons at: #smallInfoIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallInfoIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:27' prior: 37656588! smallInspectItIcon "Private - Generated method" ^ icons at: #'smallInspectIt' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallInspectItIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:27' prior: 37658309! smallItalicIcon "Private - Generated method" ^icons at: #smallItalicIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallItalicIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:27' prior: 37659181! smallJumpIcon "Private - Generated method" ^ icons at: #'smallJump' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallJumpIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:27' prior: 68277182! smallJumpIconGray ^ icons at: #'smallBack' ifAbsentPut: [ self smallJumpIcon asGrayScaleWithAlpha ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37660018! smallJustifiedIcon "Private - Generated method" ^ icons at: #'smallJustified' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallJustifiedIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37660757! smallLanguageIcon "Private - Generated method" ^ icons at: #'smallLanguage' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLanguageIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37661963! smallLeftFlushIcon "Private - Generated method" ^ icons at: #'smallLeftFlush' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLeftFlushIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37662702! smallLoadProjectIcon "Private - Generated method" ^ icons at: #'smallLoadProject' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLoadProjectIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37664029! smallLockIcon "Private - Generated method" ^icons at: #smallLockIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallLockIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37665479! smallNewIcon "Private - Generated method" ^ icons at: #'smallNew' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallNewIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37666604! smallObjectsIcon "Private - Generated method" ^ icons at: #'smallObjects' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallObjectsIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:28' prior: 37667948! smallOkIcon "Private - Generated method" ^ icons at: #'smallOk' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallOkIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 37669101! smallOpenIcon "Private - Generated method" ^ icons at: #'smallOpen' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallOpenIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 37670262! smallPaintIcon "Private - Generated method" ^ icons at: #'smallPaint' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPaintIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 37671444! smallPasteIcon "Private - Generated method" ^ icons at: #'smallPaste' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPasteIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 37672723! smallPrintIcon "Private - Generated method" ^ icons at: #'smallPrint' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:29' prior: 38236864! smallPrintItIcon "Private - Generated method" ^ icons at: #'smallPrintItIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPrintItIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37675274! smallPublishIcon "Private - Generated method" ^ icons at: #'smallPublish' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPublishIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37676431! smallPushpinIcon "Private - Generated method" ^icons at: #smallPushpinIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallPushpinIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37677411! smallQuestionIcon "Private - Generated method" ^icons at: #smallQuestionIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallQuestionIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37678926! smallQuitIcon "Private - Generated method" ^ icons at: #'smallQuit' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallQuitIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37680298! smallRedoIcon "Private - Generated method" ^ icons at: #'smallRedo' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRedoIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37681532! smallRemoteOpenIcon "Private - Generated method" ^ icons at: #'smallRemoteOpen' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRemoteOpenIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37682855! smallRightFlushIcon "Private - Generated method" ^ icons at: #'smallRightFlush' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallRightFlushIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:30' prior: 37683598! smallSaveAsIcon "Private - Generated method" ^ icons at: #'smallSaveAs' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSaveAsIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37685214! smallSaveIcon "Private - Generated method" ^ icons at: #'smallSave' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSaveIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37686882! smallScreenshotIcon "Private - Generated method" ^icons at: #smallScreenshotIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallScreenshotIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37688244! smallSelectIcon "Private - Generated method" ^ icons at: #'smallSelect' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSelectIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37689662! smallStrikeOutIcon "Private - Generated method" ^icons at: #smallStrikeOutIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallStrikeOutIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37690755! smallSystemBrowserIcon "Private - Generated method" ^icons at: #smallSystemBrowserIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallSystemBrowserIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37691605! smallUnderlineIcon "Private - Generated method" ^icons at: #smallUnderlineIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUnderlineIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:31' prior: 37692565! smallUndoIcon "Private - Generated method" ^ icons at: #'smallUndo' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUndoIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 37693881! smallUpdateIcon "Private - Generated method" ^ icons at: #'smallUpdate' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallUpdateIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 37695557! smallVolumeIcon "Private - Generated method" ^ icons at: #'smallVolume' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallVolumeIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 37696584! smallWarningIcon "Private - Generated method" ^icons at: #smallWarningIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallWarningIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 37697848! smallWindowIcon "Private - Generated method" ^ icons at: #'smallWindow' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self smallWindowIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 37698920! solidMenuIcon "Private - Generated method" ^ icons at: #'solidMenu' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self solidMenuIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 68277375! stopIcon ^ icons at: #'stopIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self stopIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:32' prior: 38253269! testRunnerIcon "Private - Generated method" ^ icons at: #'testRunnerIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self testRunnerIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 37730462! tinyMenuIcon "Private - Generated method" ^ icons at: #'tinyMenu' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self tinyMenuIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 38254466! toolsIcon "Private - Generated method" ^ icons at: #'toolsIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self toolsIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 48818313! topIcon ^ icons at: #'topIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self topIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 49044021! traitRequiredMethodIcon ^ icons at: #'traitRequiredMethodIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self traitRequiredMethodIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 38255745! transcriptIcon "Private - Generated method" ^ icons at: #'transcriptIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self transcriptIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 37736728! upArrowIcon "Private - Generated method" ^icons at: #upArrowIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self upArrowIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:33' prior: 48819651! upIcon ^ icons at: #'upIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self upIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 38256646! userIcon "Private - Generated method" ^icons at: #userIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self userIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 38258201! versionControlIcon "Private - Generated method" ^ icons at: #'versionControlIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self versionControlIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 37751954! volumeIcon "Private - Generated method" ^ icons at: #'volume' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self volumeIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 37753308! warningIcon "Private - Generated method" ^icons at: #warningIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self warningIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 68548676! windowCloseForm ^ icons at: #'calendarIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowCloseFormContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 37754552! windowIcon "Private - Generated method" ^ icons at: #'window' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowIconContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:34' prior: 68550027! windowMaximizeForm ^ icons at: #'calendarIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self windowMaximizeFormContents readStream) ].! ! !ThemeIcons methodsFor: 'accessing - icons' stamp: 'StephaneDucasse 12/22/2013 15:35' prior: 38261184! workspaceIcon "Private - Generated method" ^ icons at: #'workspaceIcon' ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self workspaceIconContents readStream) ].! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'NicolaiHess 12/26/2013 12:02' prior: 17334555! addComment: aText notifying: aController self selectedClass ifNil: [ self selectedPackage ifNotNil: [:package | "commentTextArea update: #clearUserEdits. package comment: aText"]] ifNotNil: [:class | commentTextArea update: #clearUserEdits. class comment: aText stamp: Author changeStamp]! ! !SpecLayout commentStamp: '' prior: 79432255! A SpecPresenter is a object used to describe a user interface! !SpecColumnLayout commentStamp: '' prior: 79432382! A SpecColumnLayout is the layout used to specify a new column! !SpecColumnLayout methodsFor: 'commands' stamp: 'BenjaminVanRyseghem 7/31/2012 15:10' prior: 50683430! addSplitter self commands add: (SpecSplitterHorizontal commands: self commands)! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:34'! autoFractionComputation | delta | numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1 / numberOfProportionals ]. self commands doWithIndex: [ :e :idx | e layoutFrame hasNoOffsets ifTrue: [ self setWidgetLayoutWithNoOffset: e at: idx delta: delta ] ifFalse: [ self setWidgetLayoutWithOffset: e at: idx ] ]! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:39'! countNumberOfProportionals self commands do: [ :e | e layoutFrame hasNoOffsets ifTrue: [ (e layoutFrame topFraction == 0 and: [ e layoutFrame bottomFraction == 1 ]) ifFalse: [ autoFractionComputation := false ]. numberOfProportionals := numberOfProportionals + 1 ] ]! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:34'! manualFractionComputation self commands doWithIndex: [ :e :idx | e layoutFrame hasNoOffsets ifTrue: [ | delta | delta := e layoutFrame bottomFraction - e layoutFrame topFraction. self setWidgetLayoutWithNoOffset: e at: idx delta: delta ] ifFalse: [ self setWidgetLayoutWithOffset: e at: idx ] ]! ! !SpecColumnLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 12/21/2013 21:48' prior: 45128379! privateAsArray self resetArrayComputation. self countNumberOfProportionals. autoFractionComputation ifTrue: [ self autoFractionComputation ] ifFalse: [ self manualFractionComputation ]. self shiftLastWidgets. result addAll: super privateAsArray. ^ result asArray! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:52'! resetArrayComputation super resetArrayComputation. size := self commands size. numberOfProportionals := 0. lastFractionIndex := 0. autoFractionComputation := true. currentOffset := 0. currentProportional := 0! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:34'! setWidgetLayoutWithNoOffset: widget at: index delta: delta widget layoutFrame: ((0 @ currentProportional corner: 1 @ (currentProportional + delta)) asLayoutFrame topOffset: currentOffset; yourself). currentOffset := 0. currentProportional := currentProportional + delta. lastFractionIndex := index! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:33'! setWidgetLayoutWithOffset: widget at: index height := widget bottomOffset - widget topOffset. index = size ifTrue: [ widget layoutFrame: ((0 @ 1 corner: 1 @ 1) asLayoutFrame topLeftOffset: widget leftOffset @ height negated; bottomRightOffset: widget rightOffset @ 0) ] ifFalse: [ widget layoutFrame: ((0 @ currentProportional corner: 1 @ currentProportional) asLayoutFrame topLeftOffset: widget leftOffset @ currentOffset; bottomRightOffset: widget rightOffset @ (currentOffset + height)). currentOffset := currentOffset + height ]! ! !SpecColumnLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:49'! shiftLastWidgets | index ante | (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifFalse: [ ^ self ]. index := size - 1. [ index > lastFractionIndex ] whileTrue: [ | myHeight | ante := self commands at: index. index := index - 1. myHeight := ante bottomOffset - ante topOffset. ante topOffset: (height + myHeight) negated; bottomOffset: height negated. height := height + myHeight ]. self assert: index = lastFractionIndex. ante := self commands at: index. ante bottomOffset: height negated! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:59'! computeNotSplitterWidget: widget self setOffsetsFor: widget top: widget topOffset left: widget leftOffset bottom: widget bottomOffset right: widget rightOffset borderWidth: self class windowBorderWidth. widget generateArguments. widget asSpecElements do: [ :el | result add: el ]! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:54'! computeNotSplitterWidgets (self commands reject: [ :e | e isSplitter ]) do: [ :e | self computeNotSplitterWidget: e ]! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 22:00'! computeSplitters (self commands select: [ :e | e isSplitter ]) do: [ :e | shouldCheckSplitters := true. e generateArguments. e asSpecElements do: [ :el | result add: el ] ]. shouldCheckSplitters ifTrue: [ result add: #checkSplitters ]! ! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 12/21/2013 21:53' prior: 34122519! privateAsArray self resetArrayComputation. self computeNotSplitterWidgets. self computeSplitters. ^ result asArray! ! !SpecLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 12/21/2013 21:52'! resetArrayComputation result := OrderedCollection new. shouldCheckSplitters := false! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 22:00'! setBottomOffset: bottom for: widget borderWidth: windowBorderWidth widget bottomFraction = 1 ifTrue: [ bottom isZero ifTrue: [ widget bottomOffset: windowBorderWidth negated ] ifFalse: [ widget bottomOffset: bottom - ProportionalSplitterMorph splitterWidth ] ]! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 22:00'! setLeftOffset: left for: widget borderWidth: windowBorderWidth widget leftFraction = 0 ifTrue: [ left isZero ifTrue: [ widget leftOffset: windowBorderWidth ] ifFalse: [ widget leftOffset: left + ProportionalSplitterMorph splitterWidth ] ] ifFalse: [ widget leftFraction = 1 ifFalse: [ widget leftOffset: left + ProportionalSplitterMorph splitterWidth ] ]! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 22:00'! setOffsetsFor: widget top: top left: left bottom: bottom right: right borderWidth: windowBorderWidth self setRightOffset: right for: windowBorderWidth borderWidth: widget. self setLeftOffset: left for: widget borderWidth: windowBorderWidth. self setBottomOffset: bottom for: widget borderWidth: windowBorderWidth. self setTopOffset: top for: widget borderWidth: windowBorderWidth! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 22:00'! setRightOffset: right for: windowBorderWidth borderWidth: widget widget rightFraction = 1 ifTrue: [ right isZero ifTrue: [ widget rightOffset: windowBorderWidth negated ] ifFalse: [ widget rightOffset: right - ProportionalSplitterMorph splitterWidth ] ]! ! !SpecLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/22/2013 00:45'! setTopOffset: top for: widget borderWidth: windowBorderWidth widget topFraction = 0 ifTrue: [ top isZero ifTrue: [ widget topOffset: windowBorderWidth ] ifFalse: [ widget topOffset: top + ProportionalSplitterMorph splitterWidth ] ] ifFalse: [ widget topFraction = 1 ifFalse: [ widget topOffset: top + ProportionalSplitterMorph splitterWidth ] ]! ! !SpecRowLayout commentStamp: '' prior: 79432506! A SpecRowLayout isthe layout used to specify a new row! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:45'! autoFractionComputation self commands doWithIndex: [ :e :idx | e layoutFrame hasNoOffsets ifTrue: [ | delta | delta := e layoutFrame rightFraction - e layoutFrame leftFraction. self setWidgetLayoutWithNoOffset: e at: idx delta: delta ] ifFalse: [ self setWidgetLayoutWithOffset: e at: idx ] ]! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:42'! countNumberOfProportionals self commands do: [ :e | e layoutFrame hasNoOffsets ifTrue: [ (e layoutFrame leftFraction == 0 and: [ e layoutFrame rightFraction == 1 ]) ifFalse: [ autoFractionComputation := false ]. numberOfProportionals := numberOfProportionals + 1 ] ]! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:46'! manualFractionComputation | delta | numberOfProportionals isZero ifTrue: [ delta := 0 ] ifFalse: [ delta := 1 / numberOfProportionals ]. self commands doWithIndex: [ :e :idx | e layoutFrame hasNoOffsets ifTrue: [ self setWidgetLayoutWithNoOffset: e at: idx delta: delta ] ifFalse: [ self setWidgetLayoutWithOffset: e at: idx ] ]! ! !SpecRowLayout methodsFor: 'converting' stamp: 'BenjaminVanRyseghem 12/21/2013 21:47' prior: 45133233! privateAsArray self resetArrayComputation. self countNumberOfProportionals. autoFractionComputation ifTrue: [ self manualFractionComputation ] ifFalse: [ self autoFractionComputation ]. self shiftLastWidgets. result addAll: super privateAsArray. ^ result asArray! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:52'! resetArrayComputation super resetArrayComputation. currentOffset := 0. currentProportional := 0. numberOfProportionals := 0. lastFractionIndex := 0. autoFractionComputation := true. size := self commands size! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:44'! setWidgetLayoutWithNoOffset: widget at: index delta: delta widget layoutFrame: ((currentProportional @ 0 corner: (currentProportional + delta) @ 1) asLayoutFrame leftOffset: currentOffset). currentOffset := 0. currentProportional := currentProportional + delta. lastFractionIndex := index! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:47'! setWidgetLayoutWithOffset: e at: idx | y0 y1 | width := e offsets width. y0 := e offsets top. y1 := e offsets bottom. idx = size ifTrue: [ e layoutFrame: ((1 @ 0 corner: 1 @ 1) asLayoutFrame topLeftOffset: width negated @ y0; bottomRightOffset: 0 @ y1) ] ifFalse: [ e layoutFrame: ((currentProportional @ 0 corner: currentProportional @ 1) asLayoutFrame topLeftOffset: currentOffset @ y0; bottomRightOffset: (currentOffset + width) @ y1). currentOffset := currentOffset + width ]! ! !SpecRowLayout methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/21/2013 21:49'! shiftLastWidgets | index ante | (lastFractionIndex > 0 and: [ lastFractionIndex < size ]) ifFalse: [ ^ self ]. index := size - 1. [ index > lastFractionIndex ] whileTrue: [ | myWidth | ante := self commands at: index. index := index - 1. myWidth := ante rightOffset - ante leftOffset. ante leftOffset: (width + myWidth) negated; rightOffset: width negated. width := width + myWidth ]. self assert: index = lastFractionIndex. ante := self commands at: index. ante layoutFrame rightOffset: width negated! ! "Nautilus"! "Polymorph-Widgets"! "Spec-Layout"! ----End fileIn----! ----QUIT----2013-12-26T15:33:00.367196+01:00 Pharo.image priorSource: 29088560! ----STARTUP----2013-12-26T15:41:27.846933+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-26T15:41:28.114935+01:00 Pharo-30662.image priorSource: 29133066! ----STARTUP----2013-12-26T18:35:48.395835+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/26/2013 18:32' prior: 79420505! commentForCurrentUpdate ^ '12510 NautilusHistory entry for class methods loads instance methods https://pharo.fogbugz.com/f/cases/12510 12502 FileList MNU FileSystemPermission>><= https://pharo.fogbugz.com/f/cases/12502 12429 MessageBrowser loses changes https://pharo.fogbugz.com/f/cases/12429 12451 Error on Browse Full in Nautilus from class in group view https://pharo.fogbugz.com/f/cases/12451 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/26/2013 18:32'! script316 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.634.mcz NautilusCommon-MarcusDenker.191.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.99.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1381.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/26/2013 18:33'! update30663 "self new update30663" self withUpdateLog: '12510 NautilusHistory entry for class methods loads instance methods https://pharo.fogbugz.com/f/cases/12510 12502 FileList MNU FileSystemPermission>><= https://pharo.fogbugz.com/f/cases/12502 12429 MessageBrowser loses changes https://pharo.fogbugz.com/f/cases/12429 12451 Error on Browse Full in Nautilus from class in group view https://pharo.fogbugz.com/f/cases/12451 '. self loadTogether: self script316 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NautilusHistoryEntry methodsFor: 'protocol' stamp: 'NicolaiHess 12/26/2013 12:22' prior: 79395709! applyTo: aNautilus aNautilus ui ifNotNil: [ :interface | interface resetSelections]. aNautilus selectedPackage: self selectedPackage; selectedClass: self selectedClass; selectedCategory: self selectedCategory. self selectedMethod ifNil: [ aNautilus selectedMethod: nil ] ifNotNil: [:sel | aNautilus selectedMethod: (self selectedClass methodDict at: sel ifAbsent: [ nil ])]. aNautilus browsingHistory pauseDuring: [ aNautilus selectedGroup: self selectedGroup; showPackages: self showPackages; showGroups: self showGroups; showHierarchy: self showHierarchy; showComment: self showComment; showInstance: self showInstance; showCategories: self showCategories. ]. aNautilus ui ifNotNil: [:interface || cl | cl := self selectedClass. interface showPackages: aNautilus showPackages. cl ifNil: [ interface showInstance: false ] ifNotNil: [ interface showInstance: cl isMeta not]. interface selectedPackageWithoutChangingSelectionInternally: self selectedPackage; selectedClassWithoutChangingSelectionInternally: cl; selectedCategoryInternally: self selectedCategory. interface updateBothView. self selectedMethod ifNil: [ interface selectedMethod: nil ] ifNotNil: [:sel | interface selectedMethod: (cl compiledMethodAt: sel ifAbsent: [ nil ])]. interface update ].! ! !MessageBrowser methodsFor: 'initialization' stamp: 'NicolaiHess 12/22/2013 23:30' prior: 69574768! initialize textConverterHolder := SourceMethodConverter new asValueHolder. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asValueHolder. topologicSortHolder := true asValueHolder. super initialize. askOkToClose:= true asValueHolder. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer when: WidgetBuilt send: #buildUpdateTitle to: self! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'NicolaiHess 12/22/2013 23:33'! okToChange ^ self model okToChange! ! !FileSystemPermission methodsFor: 'comparing' stamp: 'NicolaiHess 12/25/2013 14:53'! <= other ^ (posixPermission > other posixPermission) not! ! !FileSystemPermission methodsFor: 'comparing' stamp: 'NicolaiHess 12/25/2013 14:52'! > other ^ other posixPermission < posixPermission! ! !FileSystemPermission methodsFor: 'comparing' stamp: 'NicolaiHess 12/25/2013 14:53'! >= other ^ other posixPermission <= posixPermission! ! !FileSystemPermission methodsFor: 'private' stamp: 'NicolaiHess 12/25/2013 14:54'! posixPermission ^ posixPermission! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 12/20/2013 11:32'! fullBrowseFromPackage: aPackage self model class openOnPackage: aPackage class: self selectedClass category: self selectedCategory method: self selectedMethod group: self selectedGroup showGroups: self showGroups showHierarchy: self showHierarchy showPackages: self showPackages showComment: self showComment showInstance: self showInstance showCategories: true ! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 12/20/2013 11:34'! fullBrowseFromTag: aPackageTag self model class openOnPackage: aPackageTag asNautilusSelection class: self selectedClass category: self selectedCategory method: self selectedMethod group: self selectedGroup showGroups: self showGroups showHierarchy: self showHierarchy showPackages: self showPackages showComment: self showComment showInstance: self showInstance showCategories: true ! ! PackageTreeNautilusUI removeSelector: #fullBrowse! "FileSystem-Core"! "Nautilus"! "NautilusCommon"! "Spec-MorphicAdapters"! "Spec-Tools"! ----End fileIn----! ----QUIT----2013-12-26T18:35:55.863835+01:00 Pharo.image priorSource: 29133263! ----STARTUP----2013-12-26T18:42:56.685781+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-26T18:42:56.927782+01:00 Pharo-30663.image priorSource: 29149059! ----STARTUP----2013-12-27T08:52:54.328798+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 12/27/2013 08:50' prior: 79465210! commentForCurrentUpdate ^ '12517 SystemNavigation methodHierarchyBrowserForClass:selector: discards package information https://pharo.fogbugz.com/f/cases/12517 12476 Undeclared https://pharo.fogbugz.com/f/cases/12476 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 12/27/2013 08:50'! script317 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Athens-Tutorial-MarcusDenker.9.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.634.mcz NautilusCommon-MarcusDenker.191.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.99.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.31.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 12/27/2013 08:50'! update30664 "self new update30664" self withUpdateLog: '12517 SystemNavigation methodHierarchyBrowserForClass:selector: discards package information https://pharo.fogbugz.com/f/cases/12517 12476 Undeclared https://pharo.fogbugz.com/f/cases/12476 '. self loadTogether: self script317 merge: false. ScriptLoader new unloadPackage: 'Athens-Tutorial'. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'NicolaiHess 12/26/2013 21:27' prior: 51548782! methodHierarchyBrowserForClass: aClass selector: sel "Create and schedule a message set browser on all implementors of the currently selected message selector. Do nothing if no message is selected." | list | aClass ifNil: [^ self]. aClass isTrait ifTrue: [^ self]. sel ifNil: [^ self]. list := OrderedCollection new. aClass allSuperclasses reverseDo: [:cl | (cl includesSelector: sel) ifTrue: [ list addLast: (self createMethodNamed: sel realParent: cl)]]. aClass allSubclassesDo: [:cl | (cl includesSelector: sel) ifTrue: [ list addLast: ( self createMethodNamed: sel realParent: cl)]]. list addLast: (self createMethodNamed: sel realParent: aClass). ^ self browseMessageList: list name: 'Inheritance of ' , sel ! ! "Tools"! AthensTutorial removeSelector: #viewMorph! AthensTutorial removeSelector: #updateContents! AthensTutorial removeSelector: #title! AthensTutorial removeSelector: #textPane! AthensTutorial removeSelector: #stepText! AthensTutorial removeSelector: #stepNumber! AthensTutorial removeSelector: #previousStep! AthensTutorial removeSelector: #prevButton! AthensTutorial removeSelector: #performDoit! AthensTutorial removeSelector: #nextStep! AthensTutorial removeSelector: #nextButton! AthensTutorial removeSelector: #initializeWidgets! AthensTutorial removeSelector: #initializePresenter! AthensTutorial removeSelector: #doitButton! AthensTutorial class removeSelector: #open! AthensTutorial class removeSelector: #defaultSpec2! AthensTutorial class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #AthensTutorial! AthensViewMorph removeSelector: #step9! AthensViewMorph removeSelector: #step8! AthensViewMorph removeSelector: #step7! AthensViewMorph removeSelector: #step6! AthensViewMorph removeSelector: #step5! AthensViewMorph removeSelector: #step4! AthensViewMorph removeSelector: #step31! AthensViewMorph removeSelector: #step30! AthensViewMorph removeSelector: #step3! AthensViewMorph removeSelector: #step29! AthensViewMorph removeSelector: #step28! AthensViewMorph removeSelector: #step27! AthensViewMorph removeSelector: #step26! AthensViewMorph removeSelector: #step25! AthensViewMorph removeSelector: #step24! AthensViewMorph removeSelector: #step23! AthensViewMorph removeSelector: #step22! AthensViewMorph removeSelector: #step21! AthensViewMorph removeSelector: #step20! AthensViewMorph removeSelector: #step2! AthensViewMorph removeSelector: #step19! AthensViewMorph removeSelector: #step18! AthensViewMorph removeSelector: #step17! AthensViewMorph removeSelector: #step16! AthensViewMorph removeSelector: #step15! AthensViewMorph removeSelector: #step14! AthensViewMorph removeSelector: #step13! AthensViewMorph removeSelector: #step12! AthensViewMorph removeSelector: #step11! AthensViewMorph removeSelector: #step10! AthensViewMorph removeSelector: #step1! AthensViewMorph removeSelector: #initialize! AthensViewMorph removeSelector: #drawOn:! AthensViewMorph removeSelector: #checkSession! Smalltalk globals removeClassNamed: #AthensViewMorph! ----End fileIn----! ----QUIT----2013-12-27T08:53:01.692797+01:00 Pharo.image priorSource: 29149256! ----STARTUP----2013-12-27T09:04:53.720684+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2013-12-27T09:04:53.962684+01:00 Pharo-30664.image priorSource: 29164120! ----STARTUP----2013-12-30T18:00:13.811512+01:00 as /Users/denker/Projects/Pharo/30664/Pharo-30664.image! ----QUIT----2013-12-30T18:00:23.831948+01:00 Pharo-30664.image priorSource: 29164317! ----STARTUP----2014-01-02T10:41:54.54934+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/2/2014 10:38' prior: 79481203! commentForCurrentUpdate ^ '- do not call #cleanUpForRelease on update'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/2/2014 10:39'! script318 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.233.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.634.mcz NautilusCommon-MarcusDenker.191.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.99.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 12/30/2013 17:57' prior: 79492163! update30664 "self new update30664" self withUpdateLog: '12517 SystemNavigation methodHierarchyBrowserForClass:selector: discards package information https://pharo.fogbugz.com/f/cases/12517 12476 Undeclared https://pharo.fogbugz.com/f/cases/12476 '. self loadTogether: self script317 merge: false. ScriptLoader new unloadPackage: 'Athens-Tutorial'. self flushCaches. ! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/2/2014 10:39'! update30665 "self new update30665" self withUpdateLog: '- do not call #cleanUpForRelease on update'. self loadTogether: self script318 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'MarcusDenker 1/2/2014 10:38' prior: 75802698! loadDefaultUpdates UpdateStreamer new updateFromServer.! ! !LoadUpdatesCommandLineHandler methodsFor: 'actions' stamp: 'MarcusDenker 1/2/2014 10:38' prior: 34365360! loadUpdatesFromFile: updatesFile updatesFile exists ifFalse: [ ^ self exitFailure: (updatesFile fullName, ' does not exist!!') ]. UpdateStreamer new updateFromFile: updatesFile. ! ! "UpdateStreamer-Core"! ----End fileIn----! ----QUIT----2014-01-02T10:42:00.253332+01:00 Pharo.image priorSource: 29164515! ----STARTUP----2014-01-02T10:52:21.265226+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-02T10:52:21.499212+01:00 Pharo-30665.image priorSource: 29176763! ----STARTUP----2014-01-02T11:03:50.751263+01:00 as /Users/denker/Desktop/30665/Pharo-30665.image! ----QUIT----2014-01-02T11:04:04.687039+01:00 Pharo-30665.image priorSource: 29176960! ----STARTUP----2014-01-02T11:10:48.394523+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/2/2014 11:08' prior: 79496455! commentForCurrentUpdate ^ '12521 Undo 12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12521'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/2/2014 11:08'! script319 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.236.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.634.mcz NautilusCommon-MarcusDenker.191.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.110.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/2/2014 11:08'! update30666 "self new update30666" self withUpdateLog: '12521 Undo 12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12521'. self loadTogether: self script319 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphicTextAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 11/27/2013 14:59' prior: 79255943! defaultSpec ^ SpecLayout new type: #PluggableTextMorph; send: #color: withArguments: #(#(model color)); send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #on:text:accept:readSelection:menu: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted:); send: #enabled: withArguments: #(#(model enabled)); send: #askBeforeDiscardingEdits: withArguments: #(#(model askBeforeDiscardingEdits)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #autoAccept: withArguments: #(#(model autoAccept)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #registerScrollChanges: withArguments: #(scrollValueChanged:); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 9/28/2013 22:36' prior: 79257308! setSelectionFromModel: aSelection self widget ifNotNil: [:w | w setSelection: aSelection ]! ! !PluggableTextMorph methodsFor: 'model access' stamp: 'AlainPlantec 11/8/2010 22:10' prior: 79258534! selectionInterval: sel selectionInterval := sel! ! TextMorphForEditView removeSelector: #keyUp:! "Morphic-Base"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2014-01-02T11:10:52.376704+01:00 Pharo.image priorSource: 29177151! ----STARTUP----2014-01-02T11:17:14.337523+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-02T11:17:15.085516+01:00 Pharo-30666.image priorSource: 29190083! ----STARTUP----2014-01-02T12:32:52.29993+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/2/2014 12:27' prior: 79509092! commentForCurrentUpdate ^ '12223 Nautilus loses changes https://pharo.fogbugz.com/f/cases/12223 12536 Runs tests on test methods with nonzero arguments https://pharo.fogbugz.com/f/cases/12536 12529 Running tests takes to long https://pharo.fogbugz.com/f/cases/12529'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/2/2014 12:28'! script320 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.236.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.636.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.303.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.667.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/2/2014 12:28'! update30667 "self new update30667" self withUpdateLog: '12223 Nautilus loses changes https://pharo.fogbugz.com/f/cases/12223 12536 Runs tests on test methods with nonzero arguments https://pharo.fogbugz.com/f/cases/12536 12529 Running tests takes to long https://pharo.fogbugz.com/f/cases/12529'. self loadTogether: self script320 merge: false. Smalltalk image recompile. . self flushCaches. ! ! "ScriptLoader30"! !RGMethodDefinition methodsFor: '*NautilusCommon' stamp: 'NicolaiHess 12/29/2013 23:00' prior: 78226632! isTestMethod ^ (self methodClass inheritsFrom: TestCase) and: [ ((self selector beginsWith: 'test') or: [ (self selector beginsWith: 'should')]) and: [ self numArgs isZero ] ]! ! !CompiledMethod methodsFor: '*NautilusCommon' stamp: 'NicolaiHess 12/29/2013 23:00' prior: 78227067! isTestMethod ^ (self methodClass inheritsFrom: TestCase) and: [ ((self selector beginsWith: 'test') or: [ (self selector beginsWith: 'should')]) and: [ self numArgs isZero ] ]! ! !TestResult class methodsFor: 'history' stamp: 'NicolaiHess 12/29/2013 23:38' prior: 52385266! updateTestHistoryFor: aTestCase status: aSymbol | cls sel | cls := aTestCase class. sel := aTestCase selector. self removeFromTestHistory: sel in: cls. ((self historyAt: cls) at: aSymbol ) add: sel.! ! !TestResult methodsFor: 'history' stamp: 'NicolaiHess 12/29/2013 23:38' prior: 52379865! updateResultsInHistory |classesToNotify| classesToNotify:= Set new. #(#passed #failures #errors) do: [ :status | (self perform: status) do: [ :testCase | classesToNotify add:testCase class. self class updateTestHistoryFor: testCase status: status ] ]. classesToNotify do:[:cl | TestAnnouncer uniqueInstance announce: (TestSuiteEnded result: cl)]! ! !NautilusUI methodsFor: 'history behavior' stamp: 'NicolaiHess 12/30/2013 23:19' prior: 75220066! setHistory: anIndex | entry | anIndex == self currentHistoryIndex ifTrue: [ ^ self ]. entry := self getHistoryList at: anIndex ifAbsent: [ nil ]. entry ifNil: [ ^ self ]. self okToChange ifTrue:[self model adopt: entry.]. self changed: #currentHistoryIndex.! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'NicolaiHess 12/30/2013 23:18' prior: 75220755! okToChange sourceTextArea text asString trimBoth = sourceTextArea getText asString trimBoth ifTrue: [ ^ true ]. sourceTextArea canDiscardEdits ifTrue: [^ true]. sourceTextArea update: #wantToChange. ^ sourceTextArea canDiscardEdits! ! "Nautilus"! "NautilusCommon"! "SUnit-Core"! ----End fileIn----! ----QUIT----2014-01-02T12:33:51.60993+01:00 Pharo.image priorSource: 29190280! ----STARTUP----2014-01-02T12:41:14.783115+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-02T12:41:15.095028+01:00 Pharo-30667.image priorSource: 29204102! ----STARTUP----2014-01-02T13:41:52.181454+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/2/2014 13:39' prior: 79522224! commentForCurrentUpdate ^ '12540 PackageDependencyTest has no testmethods https://pharo.fogbugz.com/f/cases/12540 12498 ClassDescription appears twice in view https://pharo.fogbugz.com/f/cases/12498 12527 Add as Group creates an unbrowsable group https://pharo.fogbugz.com/f/cases/12527 11811 GroupWindowMorph class definition not evaluable https://pharo.fogbugz.com/f/cases/11811'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/2/2014 13:39'! script321 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.237.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.637.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.305.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/2/2014 13:39'! update30668 "self new update30668" self withUpdateLog: '12540 PackageDependencyTest has no testmethods https://pharo.fogbugz.com/f/cases/12540 12498 ClassDescription appears twice in view https://pharo.fogbugz.com/f/cases/12498 12527 Add as Group creates an unbrowsable group https://pharo.fogbugz.com/f/cases/12527 11811 GroupWindowMorph class definition not evaluable https://pharo.fogbugz.com/f/cases/11811'. self loadTogether: self script321 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newBasicTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector "Answer a text editor for the given model." ^self theme newTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: menuSelector! ! !Trait method! newBasicTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newBasicTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector icon: iconSelector getEnabled: enabledSel help: helpText! ! !Trait method! newImageFor: aModel get: getSel help: helpText "Answer a text entry for the given model." ^self theme newImageIn: self for: aModel get: getSel help: helpText! ! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel getLabel: labelSel help: helpText! ! !GroupWindowMorph commentStamp: 'LaurentLaffont 7/12/2011 23:33' prior: 42325942! I'm a morph where you can drag windows to group them as tabs. Try: (GroupWindowMorph new openInWindowLabeled: 'Window organizer') extent: 400@400.! !GroupWindowMorph commentStamp: 'LaurentLaffont 7/12/2011 23:33' prior: 79549953! I'm a morph where you can drag windows to group them as tabs. Try: (GroupWindowMorph new openInWindowLabeled: 'Window organizer') extent: 400@400.! !AbstractNautilusUI methodsFor: 'private' stamp: 'BenComan 12/28/2013 11:48' prior: 36586515! setCachedHierarchyClass: aClass | classesToBuild | model showInstance ifTrue: [ classesToBuild := (aClass withAllSuperclasses, aClass allSubclasses) select: [ :class | class isClassSide not ] ] ifFalse: [ classesToBuild := (aClass class withAllSuperclasses, aClass class allSubclasses) select: [ :class | class isClassSide ] ]. cachedHierarchy := SortHierarchically buildHierarchyForClasses: classesToBuild.! ! !RPackageTag methodsFor: 'accessing' stamp: 'NicolaiHess 1/1/2014 23:42'! orderedClasses ^ self package orderedClasses select:[:c | c category = self categoryName]! ! PackageDependencyTest removeSelector: #testPackage:dependsOnlyOn:! PackageDependencyTest removeSelector: #testPackage:dependsExactlyOn:! PackageDependencyTest removeSelector: #referencesInPackageNamed:! PackageDependencyTest removeSelector: #referencesInPackage:! PackageDependencyTest removeSelector: #referencesInCompiledMethod:! PackageDependencyTest removeSelector: #referencesInClass:! PackageDependencyTest removeSelector: #dependenciesOfPackageNamed:! Smalltalk globals removeClassNamed: #PackageDependencyTest! SortHierarchically class removeSelector: #buildHierarchyFor:! !Trait method! theme "Answer the ui theme that provides controls." ^ Smalltalk ui theme! ! GroupWindowMorph removeSelector: #theme! !Trait method! textEntry: aStringOrText title: aString entryText: defaultEntryText "Open a text entry dialog." ^self theme textEntryIn: self text: aStringOrText title: aString entryText: defaultEntryText! ! GroupWindowMorph removeSelector: #textEntry:title:entryText:! !Trait method! textEntry: aStringOrText title: aString "Open a text entry dialog." ^self textEntry: aStringOrText title: aString entryText: ''! ! GroupWindowMorph removeSelector: #textEntry:title:! !Trait method! textEntry: aStringOrText "Open a text entry dialog." ^self textEntry: aStringOrText title: 'Entry' translated! ! GroupWindowMorph removeSelector: #textEntry:! !Trait method! questionWithoutCancel: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionWithoutCancelIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #questionWithoutCancel:title:! !Trait method! questionWithoutCancel: aStringOrText "Open a question dialog." ^self questionWithoutCancel: aStringOrText title: 'Question' translated! ! GroupWindowMorph removeSelector: #questionWithoutCancel:! !Trait method! question: aStringOrText title: aString "Open a question dialog and answer true if yes, false if no and nil if cancelled." ^self theme questionIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #question:title:! !Trait method! question: aStringOrText "Open a question dialog." ^self question: aStringOrText title: 'Question' translated! ! GroupWindowMorph removeSelector: #question:! !Trait method! proceed: aStringOrText title: aString "Open a proceed dialog and answer true if not cancelled, false otherwise." ^self theme proceedIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #proceed:title:! !Trait method! proceed: aStringOrText "Open a proceed dialog." ^self proceed: aStringOrText title: 'Proceed' translated! ! GroupWindowMorph removeSelector: #proceed:! !Trait method! newYesButtonFor: aModel "Answer a new yes button." ^self theme newYesButtonIn: self for: aModel! ! GroupWindowMorph removeSelector: #newYesButtonFor:! !Trait method! newYesButton "Answer a new Yes button." ^self newYesButtonFor: self! ! GroupWindowMorph removeSelector: #newYesButton! !Trait method! newWorkArea "Answer a new work area morph." ^self theme newWorkAreaIn: self! ! GroupWindowMorph removeSelector: #newWorkArea! !Trait method! newWindowFor: aModel title: titleString "Answer a new window morph." ^self theme newWindowIn: self for: aModel title: titleString! ! GroupWindowMorph removeSelector: #newWindowFor:title:! !Trait method! newVerticalSeparator "Answer a vertical separator." ^self theme newVerticalSeparatorIn: self! ! GroupWindowMorph removeSelector: #newVerticalSeparator! !Trait method! newTreeFor: aModel list: listSelector selected: getSelector changeSelected: setSelector "Answer a new tree morph." ^self theme newTreeIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector! ! GroupWindowMorph removeSelector: #newTreeFor:list:selected:changeSelected:! !Trait method! newToolbarHandle "Answer a toolbar handle." ^self theme newToolbarHandleIn: self! ! GroupWindowMorph removeSelector: #newToolbarHandle! !Trait method! newToolbar: controls "Answer a toolbar with the given controls." ^self theme newToolbarIn: self for: controls! ! GroupWindowMorph removeSelector: #newToolbar:! !Trait method! newToolbar "Answer a toolbar." ^self theme newToolbarIn: self! ! GroupWindowMorph removeSelector: #newToolbar! !Trait method! newToolSpacer "Answer a tool spacer." ^self theme newToolSpacerIn: self! ! GroupWindowMorph removeSelector: #newToolSpacer! !Trait method! newToolDockingBar "Answer a tool docking bar." ^self theme newToolDockingBarIn: self! ! GroupWindowMorph removeSelector: #newToolDockingBar! !Trait method! newTitle: aString for: control "Answer a morph laid out with a column with a title." ^self theme newTitleIn: self label: aString for: control! ! GroupWindowMorph removeSelector: #newTitle:for:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel help: helpText "Answer a text entry for the given model." ^self newTextEntryFor: aModel get: getSel set: setSel class: String getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newTextEntryFor:getText:setText:help:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! GroupWindowMorph removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel menu: nil! ! GroupWindowMorph removeSelector: #newTextEditorFor:getText:setText:getEnabled:! !Trait method! newTextEditorFor: aModel getText: getSel setText: setSel "Answer a text editor for the given model." ^self newTextEditorFor: aModel getText: getSel setText: setSel getEnabled: nil! ! GroupWindowMorph removeSelector: #newTextEditorFor:getText:setText:! !Trait method! newText: aStringOrText "Answer a new text." ^self theme newTextIn: self text: aStringOrText! ! GroupWindowMorph removeSelector: #newText:! !Trait method! newTabGroup: labelsAndPages "Answer a tab group with the given tab labels associated with pages." ^self theme newTabGroupIn: self for: labelsAndPages! ! GroupWindowMorph removeSelector: #newTabGroup:! !Trait method! newString: aStringOrText style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: aStyle! ! GroupWindowMorph removeSelector: #newString:style:! !Trait method! newString: aStringOrText font: aFont style: aStyle "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: aFont style: aStyle! ! GroupWindowMorph removeSelector: #newString:font:style:! !Trait method! newString: aStringOrText "Answer a new embossed string." ^self theme newStringIn: self label: aStringOrText font: self theme labelFont style: #plain! ! GroupWindowMorph removeSelector: #newString:! !Trait method! newStack: controls "Answer a morph laid out with a stack of controls." ^self theme newStackIn: self for: controls! ! GroupWindowMorph removeSelector: #newStack:! !Trait method! newStack "Answer a morph laid out as a stack." ^self theme newStackIn: self for: #()! ! GroupWindowMorph removeSelector: #newStack! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newSliderFor:getValue:setValue:help:! !Trait method! newSliderFor: aModel getValue: getSel setValue: setSel getEnabled: enabledSel help: helpText "Answer a slider with the given selectors." ^self theme newSliderIn: self for: aModel getValue: getSel setValue: setSel min: 0 max: 1 quantum: nil getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newSliderFor:getValue:setValue:getEnabled:help:! !Trait method! newSeparator "Answer an horizontal separator." ^self theme newSeparatorIn: self! ! GroupWindowMorph removeSelector: #newSeparator! !Trait method! newScrollPaneFor: aMorph "Answer a new scroll pane morph to scroll the given morph." ^self theme newScrollPaneIn: self for: aMorph! ! GroupWindowMorph removeSelector: #newScrollPaneFor:! !Trait method! newSVSelector: aColor help: helpText "Answer a saturation-volume selector with the given color." ^self theme newSVSelectorIn: self color: aColor help: helpText! ! GroupWindowMorph removeSelector: #newSVSelector:help:! !Trait method! newRow: controls "Answer a morph laid out with a row of controls." ^self theme newRowIn: self for: controls! ! GroupWindowMorph removeSelector: #newRow:! !Trait method! newRow "Answer a morph laid out as a row." ^self theme newRowIn: self for: #()! ! GroupWindowMorph removeSelector: #newRow! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newRadioButtonFor:getSelected:setSelected:label:help:! !Trait method! newRadioButtonFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox (radio button appearance) with the given label." ^self theme newRadioButtonIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newRadioButtonFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newPluggableDialogWindow: title for: contentMorph "Answer a new pluggable dialog with the given content." ^self theme newPluggableDialogWindowIn: self title: title for: contentMorph! ! GroupWindowMorph removeSelector: #newPluggableDialogWindow:for:! !Trait method! newPluggableDialogWindow: title "Answer a new pluggable dialog with the given content." ^self newPluggableDialogWindow: title for: nil! ! GroupWindowMorph removeSelector: #newPluggableDialogWindow:! !Trait method! newPluggableDialogWindow "Answer a new pluggable dialog." ^self newPluggableDialogWindow: 'Dialog'! ! GroupWindowMorph removeSelector: #newPluggableDialogWindow! !Trait method! newPanel "Answer a new panel." ^self theme newPanelIn: self! ! GroupWindowMorph removeSelector: #newPanel! !Trait method! newOverflowRowForAll: aCollectionOfMorphs "Answer a new overflow row morph that provides a drop down for the given contents that are unable to fit the bounds." ^self theme newOverflowRowIn: self forAll: aCollectionOfMorphs! ! GroupWindowMorph removeSelector: #newOverflowRowForAll:! !Trait method! newOKButtonFor: aModel getEnabled: enabledSel "Answer a new OK button." ^self theme newOKButtonIn: self for: aModel getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newOKButtonFor:getEnabled:! !Trait method! newOKButtonFor: aModel "Answer a new OK button." ^self newOKButtonFor: aModel getEnabled: nil! ! GroupWindowMorph removeSelector: #newOKButtonFor:! !Trait method! newOKButton "Answer a new OK button." ^self newOKButtonFor: self! ! GroupWindowMorph removeSelector: #newOKButton! !Trait method! newNoButtonFor: aModel "Answer a new No button." ^self theme newNoButtonIn: self for: aModel! ! GroupWindowMorph removeSelector: #newNoButtonFor:! !Trait method! newNoButton "Answer a new No button." ^self newNoButtonFor: self! ! GroupWindowMorph removeSelector: #newNoButton! !Trait method! newMultistateButton "Answer a new multistate button morph. To be usable it needs to have fill styles assigned to various states along with mouse-up/down actions." ^self theme newMultistateButtonIn: self! ! GroupWindowMorph removeSelector: #newMultistateButton! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector help: helpText "Answer a morph list for the given model." ^self newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newMorphListFor:list:getSelected:setSelected:help:! !Trait method! newMorphListFor: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText "Answer a morph list for the given model." ^self theme newMorphListIn: self for: aModel list: listSelector getSelected: getSelector setSelected: setSelector getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newMorphListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! GroupWindowMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a morph drop list for the given model." ^self theme newMorphDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! GroupWindowMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a morph drop list for the given model." ^self newMorphDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! GroupWindowMorph removeSelector: #newMorphDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newMenuFor: aModel "Answer a new menu." ^self theme newMenuIn: self for: aModel! ! GroupWindowMorph removeSelector: #newMenuFor:! !Trait method! newMenu "Answer a new menu." ^self theme newMenuIn: self for: self! ! GroupWindowMorph removeSelector: #newMenu! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector help: helpText "Answer a list for the given model." ^self newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newListFor:list:selected:changeSelected:help:! !Trait method! newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText "Answer a list for the given model." ^self theme newListIn: self for: aModel list: listSelector selected: getSelector changeSelected: setSelector getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newListFor:list:selected:changeSelected:getEnabled:help:! !Trait method! newLabelGroup: labelsAndControls font: aFont labelColor: aColor "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls font: aFont labelColor: aColor ! ! GroupWindowMorph removeSelector: #newLabelGroup:font:labelColor:! !Trait method! newLabelGroup: labelsAndControls "Answer a morph laid out with a column of labels and a column of associated controls. Controls having a vResizing value of #spaceFill will cause their row to use #spaceFill also, otherwise #shrinkWrap." ^self theme newLabelGroupIn: self for: labelsAndControls! ! GroupWindowMorph removeSelector: #newLabelGroup:! !Trait method! newLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newLabelFor:label:getEnabled:! !Trait method! newLabelFor: aModel getLabel: labelSel getEnabled: enabledSel "Answer a new text label." ^self theme newLabelIn: self for: aModel getLabel: labelSel getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newLabelFor:getLabel:getEnabled:! !Trait method! newLabel: aString "Answer a new text label." ^self newLabelFor: nil label: aString getEnabled: nil! ! GroupWindowMorph removeSelector: #newLabel:! !Trait method! newIncrementalSliderFor: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText "Answer an inremental slider with the given selectors." ^self theme newIncrementalSliderIn: self for: aModel getValue: getSel setValue: setSel min: min max: max quantum: quantum getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newIncrementalSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newImage: aForm size: aPoint "Answer a new image." ^self theme newImageIn: self form: aForm size: aPoint! ! GroupWindowMorph removeSelector: #newImage:size:! !Trait method! newImage: aForm "Answer a new image." ^self theme newImageIn: self form: aForm! ! GroupWindowMorph removeSelector: #newImage:! !Trait method! newHueSelector: aModel getHue: getSel setHue: setSel help: helpText "Answer a hue selector with the given selectors." ^self theme newHueSelectorIn: self for: aModel getHue: getSel setHue: setSel help: helpText! ! GroupWindowMorph removeSelector: #newHueSelector:getHue:setHue:help:! !Trait method! newHSVSelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVSelectorIn: self color: aColor help: helpText! ! GroupWindowMorph removeSelector: #newHSVSelector:help:! !Trait method! newHSVASelector: aColor help: helpText "Answer a hue-saturation-volume selector with the given color." ^self theme newHSVASelectorIn: self color: aColor help: helpText! ! GroupWindowMorph removeSelector: #newHSVASelector:help:! !Trait method! newGroupboxForAll: controls "Answer a plain groupbox with the given controls." ^self theme newGroupboxIn: self forAll: controls! ! GroupWindowMorph removeSelector: #newGroupboxForAll:! !Trait method! newGroupboxFor: control "Answer a plain groupbox with the given control." ^self theme newGroupboxIn: self for: control! ! GroupWindowMorph removeSelector: #newGroupboxFor:! !Trait method! newGroupbox: aString forAll: controls "Answer a groupbox with the given label and controls." ^self theme newGroupboxIn: self label: aString forAll: controls! ! GroupWindowMorph removeSelector: #newGroupbox:forAll:! !Trait method! newGroupbox: aString for: control "Answer a groupbox with the given label and control." ^self theme newGroupboxIn: self label: aString for: control! ! GroupWindowMorph removeSelector: #newGroupbox:for:! !Trait method! newGroupbox: aString "Answer a groupbox with the given label." ^self theme newGroupboxIn: self label: aString! ! GroupWindowMorph removeSelector: #newGroupbox:! !Trait method! newGroupbox "Answer a plain groupbox." ^self theme newGroupboxIn: self! ! GroupWindowMorph removeSelector: #newGroupbox! !Trait method! newFuzzyLabelFor: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: offset alpha: alpha getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newFuzzyLabelFor:label:offset:alpha:getEnabled:! !Trait method! newFuzzyLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: aModel label: aString offset: 1 alpha: 0.5 getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newFuzzyLabelFor:label:getEnabled:! !Trait method! newFuzzyLabel: aString "Answer a new fuzzy label." ^self theme newFuzzyLabelIn: self for: nil label: aString offset: 1 alpha: 0.5 getEnabled: nil! ! GroupWindowMorph removeSelector: #newFuzzyLabel:! !Trait method! newExpander: aString forAll: controls "Answer an expander with the given label and controls." ^self theme newExpanderIn: self label: aString forAll: controls! ! GroupWindowMorph removeSelector: #newExpander:forAll:! !Trait method! newExpander: aString for: aControl "Answer an expander with the given label and control." ^self theme newExpanderIn: self label: aString forAll: {aControl}! ! GroupWindowMorph removeSelector: #newExpander:for:! !Trait method! newExpander: aString "Answer an expander with the given label." ^self theme newExpanderIn: self label: aString forAll: #()! ! GroupWindowMorph removeSelector: #newExpander:! !Trait method! newEmbeddedMenu "Answer a new menu." ^self theme newEmbeddedMenuIn: self for: self! ! GroupWindowMorph removeSelector: #newEmbeddedMenu! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel ghostText: ghostText getEnabled: enabledSel help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: String default: '' ghostText: ghostText getEnabled: enabledSel useIndex: false help: helpText! ! GroupWindowMorph removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:ghostText:getEnabled:help:! !Trait method! newEditableDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText "Answer an editable drop list for the given model." ^self theme newEditableDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel addToList: addSel class: aClass default: defaultValue ghostText: ghostText getEnabled: enabledSel useIndex: useIndex help: helpText! ! GroupWindowMorph removeSelector: #newEditableDropListFor:list:getSelected:setSelected:addToList:class:default:ghostText:getEnabled:useIndex:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel help: helpText "Answer a drop list for the given model." ^self newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: nil useIndex: true help: helpText! ! GroupWindowMorph removeSelector: #newDropListFor:list:getSelected:setSelected:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: useIndex help: helpText! ! GroupWindowMorph removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:useIndex:help:! !Trait method! newDropListFor: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel help: helpText "Answer a drop list for the given model." ^self theme newDropListIn: self for: aModel list: listSel getSelected: getSel setSelected: setSel getEnabled: enabledSel useIndex: true help: helpText! ! GroupWindowMorph removeSelector: #newDropListFor:list:getSelected:setSelected:getEnabled:help:! !Trait method! newDialogPanel "Answer a new main dialog panel." ^self theme newDialogPanelIn: self! ! GroupWindowMorph removeSelector: #newDialogPanel! !Trait method! newColumn: controls "Answer a morph laid out with a column of controls." ^self theme newColumnIn: self for: controls! ! GroupWindowMorph removeSelector: #newColumn:! !Trait method! newColorPresenterFor: aModel getColor: getSel help: helpText "Answer a color presenter with the given selectors." ^self theme newColorPresenterIn: self for: aModel getColor: getSel help: helpText! ! GroupWindowMorph removeSelector: #newColorPresenterFor:getColor:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newColorChooserFor:getColor:setColor:help:! !Trait method! newColorChooserFor: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText "Answer a color chooser with the given selectors." ^self theme newColorChooserIn: self for: aModel getColor: getSel setColor: setSel getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newColorChooserFor:getColor:setColor:getEnabled:help:! !Trait method! newCloseControlFor: aModel action: aValuable help: helpText "Answer a new cancel button." ^self theme newCloseControlIn: self for: aModel action: aValuable help: helpText! ! GroupWindowMorph removeSelector: #newCloseControlFor:action:help:! !Trait method! newCloseButtonFor: aModel "Answer a new close button." ^self theme newCloseButtonIn: self for: aModel! ! GroupWindowMorph removeSelector: #newCloseButtonFor:! !Trait method! newCloseButton "Answer a new close button." ^self newCloseButtonFor: self ! ! GroupWindowMorph removeSelector: #newCloseButton! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: nil label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newCheckboxFor:getSelected:setSelected:label:help:! !Trait method! newCheckboxFor: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a checkbox with the given label." ^self theme newCheckboxIn: self for: aModel getSelected: getSel setSelected: setSel getEnabled: enabledSel label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newCheckboxFor:getSelected:setSelected:getEnabled:label:help:! !Trait method! newCancelButtonFor: aModel "Answer a new cancel button." ^self theme newCancelButtonIn: self for: aModel! ! GroupWindowMorph removeSelector: #newCancelButtonFor:! !Trait method! newCancelButton "Answer a new cancel button." ^self newCancelButtonFor: self! ! GroupWindowMorph removeSelector: #newCancelButton! !Trait method! newButtonLabelFor: aModel label: aString getEnabled: enabledSel "Answer a new button text label." ^self theme newButtonLabelIn: self for: aModel label: aString getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newButtonLabelFor:label:getEnabled:! !Trait method! newButtonLabel: aString "Answer a new button text label." ^self newButtonLabelFor: nil label: aString getEnabled: nil! ! GroupWindowMorph removeSelector: #newButtonLabel:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel labelForm: aForm help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: (AlphaImageMorph new image: aForm) help: helpText! ! GroupWindowMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:labelForm:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:label:help:! !Trait method! newButtonFor: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText "Answer a new button." ^self theme newButtonIn: self for: aModel getState: stateSel action: actionSel arguments: args getEnabled: enabledSel getLabel: labelSel help: helpText! ! GroupWindowMorph removeSelector: #newButtonFor:getState:action:arguments:getEnabled:getLabel:help:! !Trait method! newButtonFor: aModel action: actionSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: nil label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newButtonFor:action:label:help:! !Trait method! newButtonFor: aModel action: actionSel getEnabled: enabledSel label: stringOrText help: helpText "Answer a new button." ^self newButtonFor: aModel getState: nil action: actionSel arguments: nil getEnabled: enabledSel label: stringOrText help: helpText! ! GroupWindowMorph removeSelector: #newButtonFor:action:getEnabled:label:help:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum help: helpText "Answer a bracket slider with the given selectors." ^self newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: nil help: helpText! ! GroupWindowMorph removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:help:! !Trait method! newBracketSliderFor: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText "Answer a bracket slider with the given selectors." ^self theme newBracketSliderIn: self for: aModel getValue: getSel setValue: setSel min: minValue max: maxValue quantum: quantum getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newBracketSliderFor:getValue:setValue:min:max:quantum:getEnabled:help:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph corner: cornerSymbol "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: cornerSymbol! ! GroupWindowMorph removeSelector: #newBalloonHelp:for:corner:! !Trait method! newBalloonHelp: aTextStringOrMorph for: aMorph "Answer a new balloon help with the given contents for aMorph at a given corner." ^self theme newBalloonHelpIn: self contents: aTextStringOrMorph for: aMorph corner: #bottomLeft! ! GroupWindowMorph removeSelector: #newBalloonHelp:for:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion ! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel getText: getSel setText: setSel getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: String getEnabled: enabledSel font: aFont help: helpText ! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:getText:setText:getEnabled:font:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText entryCompletion: anEntryCompletion! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel help: helpText! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:help:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText entryCompletion: anEntryCompletion! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:entryCompletion:! !Trait method! newAutoAcceptTextEntryFor: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText "Answer a text entry for the given model." ^self theme newAutoAcceptTextEntryIn: self for: aModel get: getSel set: setSel class: aClass getEnabled: enabledSel font: aFont help: helpText! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEntryFor:get:set:class:getEnabled:font:help:! !Trait method! newAutoAcceptTextEditorFor: aModel getText: getSel setText: setSel getEnabled: enabledSel "Answer a text editor for the given model." ^self theme newAutoAcceptTextEditorIn: self for: aModel getText: getSel setText: setSel getEnabled: enabledSel! ! GroupWindowMorph removeSelector: #newAutoAcceptTextEditorFor:getText:setText:getEnabled:! !Trait method! newAlphaSelector: aModel getAlpha: getSel setAlpha: setSel help: helpText "Answer an alpha channel selector with the given selectors." ^self theme newAlphaSelectorIn: self for: aModel getAlpha: getSel setAlpha: setSel help: helpText! ! GroupWindowMorph removeSelector: #newAlphaSelector:getAlpha:setAlpha:help:! !Trait method! newAlphaImage: aForm help: helpText "Answer an alpha image morph." ^self theme newAlphaImageIn: self image: aForm help: helpText! ! GroupWindowMorph removeSelector: #newAlphaImage:help:! !Trait method! message: aStringOrText title: aString "Open a message dialog." ^self theme messageIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #message:title:! !Trait method! message: aStringOrText "Open a message dialog." ^self message: aStringOrText title: 'Information' translated! ! GroupWindowMorph removeSelector: #message:! !Trait method! longMessage: aStringOrText title: aString "Open a (long) message dialog." ^self theme longMessageIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #longMessage:title:! !Trait method! fileSave: title path: path "Answer the result of a file save open dialog with the given title." ^self fileSave: title extensions: nil path: path! ! GroupWindowMorph removeSelector: #fileSave:path:! !Trait method! fileSave: title extensions: exts path: path "Answer the result of a file save dialog with the given title, extensions to show and path." ^self theme fileSaveIn: self title: title extensions: exts path: path! ! GroupWindowMorph removeSelector: #fileSave:extensions:path:! !Trait method! fileSave: title extensions: exts "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: exts path: nil! ! GroupWindowMorph removeSelector: #fileSave:extensions:! !Trait method! fileSave: title "Answer the result of a file save dialog with the given title." ^self fileSave: title extensions: nil path: nil! ! GroupWindowMorph removeSelector: #fileSave:! !Trait method! fileOpen: title extensions: exts path: path preview: preview "Answer the result of a file open dialog with the given title, extensions to show, path and preview type." ^self theme fileOpenIn: self title: title extensions: exts path: path preview: preview! ! GroupWindowMorph removeSelector: #fileOpen:extensions:path:preview:! !Trait method! fileOpen: title extensions: exts path: path "Answer the result of a file open dialog with the given title, extensions to show and path." ^self fileOpen: title extensions: exts path: path preview: nil! ! GroupWindowMorph removeSelector: #fileOpen:extensions:path:! !Trait method! fileOpen: title extensions: exts "Answer the result of a file open dialog with the given title and extensions to show." ^self fileOpen: title extensions: exts path: nil! ! GroupWindowMorph removeSelector: #fileOpen:extensions:! !Trait method! fileOpen: title "Answer the result of a file open dialog with the given title." ^self fileOpen: title extensions: nil! ! GroupWindowMorph removeSelector: #fileOpen:! !Trait method! deny: aStringOrText title: aString "Open a denial dialog." ^self theme denyIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #deny:title:! !Trait method! deny: aStringOrText "Open a denial dialog." ^self deny: aStringOrText title: 'Access Denied' translated! ! GroupWindowMorph removeSelector: #deny:! !Trait method! chooseFont: aFont "Answer the result of a font selector dialog with the given initial font." ^self theme chooseFontIn: self title: 'Font Selector' translated font: aFont! ! GroupWindowMorph removeSelector: #chooseFont:! !Trait method! chooseFont "Answer the result of a font selector dialog." ^self chooseFont: nil! ! GroupWindowMorph removeSelector: #chooseFont! !Trait method! chooseFileName: title extensions: exts path: path preview: preview "Answer the result of a file name chooser dialog with the given title, extensions to show, path and preview type." ^self theme chooseFileNameIn: self title: title extensions: exts path: path preview: preview! ! GroupWindowMorph removeSelector: #chooseFileName:extensions:path:preview:! !Trait method! chooseDropList: aStringOrText title: aString list: aList "Open a drop list chooser dialog." ^self theme chooseDropListIn: self text: aStringOrText title: aString list: aList! ! GroupWindowMorph removeSelector: #chooseDropList:title:list:! !Trait method! chooseDropList: aStringOrText list: aList "Open a drop list chooser dialog." ^self chooseDropList: aStringOrText title: 'Choose' translated list: aList! ! GroupWindowMorph removeSelector: #chooseDropList:list:! !Trait method! chooseDirectory: title path: path "Answer the result of a file dialog with the given title, answer a directory." ^self theme chooseDirectoryIn: self title: title path: path! ! GroupWindowMorph removeSelector: #chooseDirectory:path:! !Trait method! chooseDirectory: title "Answer the result of a file dialog with the given title, answer a directory." ^self chooseDirectory: title path: nil! ! GroupWindowMorph removeSelector: #chooseDirectory:! !Trait method! chooseColor: aColor title: title "Answer the result of a color selector dialog with the given title and initial colour." ^self theme chooseColorIn: self title: title color: aColor! ! GroupWindowMorph removeSelector: #chooseColor:title:! !Trait method! chooseColor: aColor "Answer the result of a color selector dialog with the given color." ^self theme chooseColorIn: self title: 'Colour Selector' translated color: aColor! ! GroupWindowMorph removeSelector: #chooseColor:! !Trait method! chooseColor "Answer the result of a color selector dialog ." ^self chooseColor: Color black! ! GroupWindowMorph removeSelector: #chooseColor! !Trait method! centeredAlert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme centeredAlertIn: self text: aStringOrText title: aString configure: aBlock! ! GroupWindowMorph removeSelector: #centeredAlert:title:configure:! !Trait method! alert: aStringOrText title: aString configure: aBlock "Open an alert dialog. Configure the dialog with the 1 argument block before opening modally." ^self theme alertIn: self text: aStringOrText title: aString configure: aBlock! ! GroupWindowMorph removeSelector: #alert:title:configure:! !Trait method! alert: aStringOrText title: aString "Open an alert dialog." ^self alert: aStringOrText title: aString configure: [:d | ]! ! GroupWindowMorph removeSelector: #alert:title:! !Trait method! alert: aStringOrText "Open an alert dialog." ^self alert: aStringOrText title: 'Alert' translated! ! GroupWindowMorph removeSelector: #alert:! !Trait method! abort: aStringOrText title: aString "Open an error dialog." ^self theme abortIn: self text: aStringOrText title: aString! ! GroupWindowMorph removeSelector: #abort:title:! !Trait method! abort: aStringOrText "Open an error dialog." ^self abort: aStringOrText title: 'Error' translated! ! GroupWindowMorph removeSelector: #abort:! "Morphic-Base"! "Nautilus"! "RPackage-Core"! "Tests"! ----End fileIn----! ----QUIT----2014-01-02T13:41:57.8517+01:00 Pharo.image priorSource: 29204298! ----STARTUP----2014-01-02T13:48:39.164252+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-02T13:48:39.770251+01:00 Pharo-30668.image priorSource: 29264107! ----STARTUP----2014-01-03T11:13:54.227833+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/3/2014 11:10' prior: 79536243! commentForCurrentUpdate ^ '12550 MNU on Browse scoped from a Group https://pharo.fogbugz.com/f/cases/12550 12526 Change Groups/packages in Nautilus can freeze the UI https://pharo.fogbugz.com/f/cases/12526 12495 Cleaning PolygonMorph https://pharo.fogbugz.com/f/cases/12495'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/3/2014 11:10'! script322 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.137.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.902.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.273.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.640.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.305.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-StephaneDucasse.12.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1383.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/3/2014 11:10'! update30669 "self new update30669" self withUpdateLog: '12550 MNU on Browse scoped from a Group https://pharo.fogbugz.com/f/cases/12550 12526 Change Groups/packages in Nautilus can freeze the UI https://pharo.fogbugz.com/f/cases/12526 12495 Cleaning PolygonMorph https://pharo.fogbugz.com/f/cases/12495'. self loadTogether: self script322 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'NicolaiHess 1/2/2014 20:42' prior: 77527904! isSelectedPackage: aSelection aSelection ifNil:[^ self selectedPackage isNil] ifNotNil:[^ aSelection asNautilusSelection = self selectedPackage ] ! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'NicolaiHess 1/2/2014 22:37' prior: 17324757! restrictedBrowseGroups: aCollection aCollection ifNotEmpty: [:groups || classes newEnvironment | classes := groups gather: [:group | group classes]. newEnvironment := self browsedEnvironment forClasses: classes. self model class openOnGroup: groups first inEnvironment: newEnvironment ]! ! !PolygonMorph class methodsFor: 'instance creation' stamp: 'StephaneDucasse 12/22/2013 21:12' prior: 29734718! arrowPrototype "Answer an instance of the receiver that will serve as a prototypical arrow" "PolygonMorph arrowPrototype openInWorld" | aa | aa := self new. aa vertices: (Array with: 0@0 with: 40@40) color: Color black borderWidth: 2 borderColor: Color black. aa makeForwardArrow. aa computeBounds. ^ aa! ! !PolygonMorph class methodsFor: 'examples' stamp: 'StephaneDucasse 12/22/2013 21:01'! example1 "self example1" ^ (PolygonMorph vertices: {261@400. 388@519. 302@595. 222@500. 141@583. 34@444} color: Color blue borderWidth: 3 borderColor: Color black) openInWorld! ! !PolygonMorph class methodsFor: 'examples' stamp: 'StephaneDucasse 12/22/2013 21:07'! example2 "self example2" | poly | poly := PolygonMorph vertices: {261@400. 388@519. 302@595. 222@500. 141@583. 34@444} color: Color blue borderWidth: 3 borderColor: Color black. poly beSmoothCurve. poly openInWorld! ! !PolygonMorph class methodsFor: 'examples' stamp: 'StephaneDucasse 12/22/2013 21:07'! example3 "self example3" | poly | poly := PolygonMorph vertices: {261@400. 388@519. 302@595. 222@500. 141@583. 34@444} color: Color blue borderWidth: 3 borderColor: Color black. poly makeOpen. poly openInWorld! ! !PolygonMorph class methodsFor: 'examples' stamp: 'StephaneDucasse 12/22/2013 21:06'! example4 "self example4" | poly | poly := (PolygonMorph vertices: {261@400. 388@519. 302@595. 222@500. 141@583. 34@444} color: Color blue borderWidth: 3 borderColor: Color black). poly dashedBorder: { 5 . 5. Color red. 50 . 0 }. poly openInWorld! ! !PolygonMorph class methodsFor: 'examples' stamp: 'StephaneDucasse 12/22/2013 21:06'! example5 "self example5" | poly | poly := (PolygonMorph vertices: {261@400. 388@519. 302@595. 222@500. 141@583. 34@444} color: Color blue borderWidth: 3 borderColor: Color black). poly dashedBorder: { 5 . 5. Color red. 50 . 0 }. poly openInWorld! ! !PolygonMorph methodsFor: 'menu' stamp: 'StephaneDucasse 12/22/2013 21:34' prior: 29709036! addPolyLIneCurveMenuItems: aMenu hand: aHandMorph aMenu addLine; addUpdating: #openOrClosePhrase target: self action: #toggleOpenOrClosed. aMenu addUpdating: #smoothOrSegmentedPhrase target: self action: #toggleSmoothing.! ! !PolygonMorph methodsFor: 'menu' stamp: 'StephaneDucasse 12/22/2013 21:09' prior: 29709358! addPolyShapingMenuItems: aMenu hand: aHandMorph aMenu addLine. aMenu addWithLabel: 'make inscribed diamondOval' enablement: [self isClosed ] action: #diamondOval. aMenu addWithLabel: 'make enclosing rectangleOval' enablement: [self isClosed ] action: #rectangleOval. ! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:42' prior: 29694122! arrowsContainPoint: aPoint "Answer an Array of two Booleans that indicate whether the given point is inside either arrow" | retval f | retval := { false . false }. (super containsPoint: aPoint) ifFalse: [^ retval ]. (closed or: [arrows == #none or: [vertices size < 2]]) ifTrue: [^ retval]. (arrows == #forward or: [arrows == #both]) ifTrue: [ "arrowForms first has end form" f := self arrowForms first. retval at: 2 put: ((f pixelValueAt: aPoint - f offset) > 0) ]. (arrows == #back or: [arrows == #both]) ifTrue: [ "arrowForms last has start form" f := self arrowForms last. retval at: 1 put: ((f pixelValueAt: aPoint - f offset) > 0) ]. ^retval.! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:36' prior: 73997679! borderColor: aColor super borderColor: aColor. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) == (aColor isColor and: [aColor isTranslucentButNotTransparent]) ifFalse: ["Need to recompute fillForm and borderForm if translucency of border changes." self releaseCachedState ]! ! !PolygonMorph methodsFor: 'dashes' stamp: 'StephaneDucasse 12/22/2013 21:38' prior: 29679635! borderDashOffset borderDashSpec size < 4 ifTrue: [^0.0]. ^ (borderDashSpec fourth) asFloat! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:35' prior: 29675291! borderWidth: anInteger borderColor ifNil: [ borderColor := Color black ]. borderWidth := anInteger max: 0. self computeBounds! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'StephaneDucasse 12/22/2013 21:37' prior: 68513954! changeInSlopes: slopes of: verts "A message to knots of a spline. Returns an array with the 3rd cubic coeff." "The last nth item is correct iff this is a closed cubic. Presumably that is the only time we care. We always return the same sized array as self." | n slopeChanges | n := verts size. n = slopes size ifFalse: [^ self error: 'vertices and slopes differ in number']. slopeChanges := Array new: n. 1 to: n do: [:i | slopeChanges at: i put: (verts atWrap: i + 1) - (verts at: i) * 3 - ((slopes at: i) * 2) - (slopes atWrap: i + 1)]. ^ slopeChanges! ! !PolygonMorph methodsFor: 'cubic support' stamp: 'StephaneDucasse 12/22/2013 21:37' prior: 68514635! closedCubicSlopesOf: knots "Sent to knots returns the slopes of a closed cubic spline. From the same set of java sources as naturalCubic. This is a smalltalk transliteration of the java code." "from java code NatCubicClosed extends NatCubic solves for the set of equations for all knots: b1+4*b2+b3=3*(a3-a1) where a1 is (knots atWrap: index + 1) etc. and the b's are the slopes . by decomposing the matrix into upper triangular and lower matrices and then back sustitution. See Spath 'Spline Algorithms for Curves and Surfaces' pp 19--21. The D[i] are the derivatives at the knots. " | v w x y z n1 D F G H | n1 := knots size. n1 < 3 ifTrue: [self error: 'Less than 3 points makes a poor curve']. v := Array new: n1. w := Array new: n1. y := Array new: n1. D := Array new: n1. x := knots. z := 1.0 / 4.0. v at: 2 put: z. w at: 2 put: z. y at: 1 put: z * 3.0 * ((x at: 2) - (x at: n1)). H := 4.0. F := 3 * ((x at: 1) - (x at: n1 - 1)). G := 1. 2 to: n1 - 1 do: [:k | z := 1.0 / (4.0 - (v at: k)). v at: k + 1 put: z. w at: k + 1 put: z negated * (w at: k). y at: k put: z * (3.0 * ((x at: k + 1) - (x at: k - 1)) - (y at: k - 1)). H := H - (G * (w at: k)). F := F - (G * (y at: k - 1)). G := (v at: k) negated * G]. H := H - (G + 1 * ((v at: n1) + (w at: n1))). y at: n1 put: F - (G + 1 * (y at: n1 - 1)). D at: n1 put: (y at: n1) / H. D at: n1 - 1 put: (y at: n1 - 1) - ((v at: n1) + (w at: n1) * (D at: n1)). (1 to: n1 - 2) reverseDo: [:k | D at: k put: (y at: k) - ((v at: k + 1) * (D at: k + 1)) - ((w at: k + 1) * (D at: n1))]. ^ D ! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'StephaneDucasse 12/22/2013 22:00' prior: 67576702! coefficients curveState ifNotNil: [^ curveState at: 1]. ^ self vertices size < 1 ifTrue: [ self ] ifFalse: [ self coefficientsForMoreThanThreePoints ]. ! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'StephaneDucasse 12/22/2013 22:00' prior: 68970145! coefficientsForMoreThanThreePoints "Less than three points handled as segments by our lineSegmentsDo:" | verts coefficients vertXs slopeXs vertYs slopeYs bestSegments | verts := self vertices. (self isCurvier not and: [ closed ]) ifTrue: [ verts := verts , verts first asOrderedCollection]. coefficients := { vertXs := verts collect: [:p | p x asFloat]. slopeXs := self slopes: vertXs. self changeInSlopes: slopeXs of: vertXs . self changeOfChangesInSlopes: slopeXs of: vertXs. vertYs := verts collect: [:p | p y asFloat]. slopeYs := self slopes: vertYs. self changeInSlopes: slopeYs of: vertYs. self changeOfChangesInSlopes: slopeYs of: vertYs. Array new: verts size withAll: 12}. bestSegments := (1 to: verts size) collect: [:i | (self transform: coefficients toCubicPointPolynomialAt: i) bestSegments]. coefficients at: 9 put:bestSegments. self isCurvier not & closed ifTrue: [ coefficients := coefficients collect: [:each | each allButLast]]. curveState := {coefficients. nil. nil}. self computeNextToEndPoints. ^ coefficients! ! !PolygonMorph methodsFor: 'attachments' stamp: 'StephaneDucasse 12/22/2013 21:31' prior: 29676125! defaultAttachmentPointSpecs ^{ { #firstVertex } . { #midpoint } . { #lastVertex } }! ! !PolygonMorph methodsFor: 'editing' stamp: 'StephaneDucasse 12/22/2013 21:40' prior: 29689921! deleteVertexAt: anIndex "This acts as a backstop for MixedCurveMorph." self setVertices: (vertices copyReplaceFrom: anIndex to: anIndex with: #()). ! ! !PolygonMorph methodsFor: 'shaping' stamp: 'StephaneDucasse 12/22/2013 22:00' prior: 29717060! diamondOval "Set my vertices to an array of edge midpoint vertices. Order of vertices is in the tradion of warpblt quads." | b | b := self bounds. self setVertices: { b leftCenter. b bottomCenter. b rightCenter. b topCenter }! ! !PolygonMorph methodsFor: 'drawing' stamp: 'StephaneDucasse 12/22/2013 21:39' prior: 73998099! drawOnFormCanvas: aCanvas "Display the receiver, a spline curve, approximated by straight line segments." vertices size < 1 ifTrue: [self error: 'a polygon must have at least one point']. closed & color isTransparent not ifTrue: [aCanvas stencil: self filledForm at: bounds topLeft - 1 color: color]. (borderColor isColor and: [borderColor isTranslucentButNotTransparent]) ifTrue: [aCanvas stencil: self borderForm at: bounds topLeft color: borderColor] ifFalse: [self drawBorderOn: aCanvas]. self arrowForms do: [:f | aCanvas stencil: f at: f offset color: (borderColor isColor ifTrue: [borderColor] ifFalse: [color])]! ! !PolygonMorph methodsFor: 'editing' stamp: 'StephaneDucasse 12/22/2013 21:40' prior: 29690466! dropVertex: ix event: evt fromHandle: handle "Leave vertex in new position. If dropped ontop another vertex delete this one. Check for too few vertices before deleting. The alternative is not pretty" | p | p := vertices at: ix. (vertices size >= 2 and: ["check for too few vertices before deleting. The alternative is not pretty -wiz" ((vertices atWrap: ix - 1) dist: p) < 3 or: [((vertices atWrap: ix + 1) dist: p) < 3]]) ifTrue: ["Drag a vertex onto its neighbor means delete" self deleteVertexAt: ix .]. evt shiftPressed ifTrue: [self removeHandles] ifFalse: [self addHandles "remove then add to recreate"]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:35' prior: 67579296! fillStyle ^ self isOpen ifTrue: [ self borderColor "easy access to line color from halo"] ifFalse: [ super fillStyle ]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:35' prior: 67579507! fillStyle: newColor ^ self isOpen ifTrue: [ self borderColor: newColor asColor "easy access to line color from halo"] ifFalse: [ super fillStyle: newColor ]! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:42' prior: 29696788! flipHAroundX: centerX "Flip me horizontally around the center. If centerX is nil, compute my center of gravity." | cent | cent := centerX ifNil: [ bounds center x ] "average is the center" ifNotNil: [ centerX ]. self setVertices: (vertices collect: [ :vv | ((vv x - cent) * -1 + cent) @ vv y ]) reversed.! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:43' prior: 29697267! flipVAroundY: centerY "Flip me vertically around the center. If centerY is nil, compute my center of gravity." | cent | cent := centerY ifNil: [ bounds center y ] "average is the center" ifNotNil: [ centerY ]. self setVertices: (vertices collect: [:vv | vv x @ ((vv y - cent) * -1 + cent)]) reversed.! ! !PolygonMorph methodsFor: 'editing' stamp: 'StephaneDucasse 12/22/2013 21:40' prior: 29691217! handleColorAt: vertIndex "This is a backstop for MixedCurveMorph" ^ Color yellow ! ! !PolygonMorph methodsFor: 'testing' stamp: 'StephaneDucasse 12/22/2013 22:01' prior: 29724973! hasArrows "Are all the conditions meet for having arrows?" ^ (closed or: [arrows == #none or: [vertices size < 2]]) not! ! !PolygonMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 12/22/2013 21:59' prior: 29706879! initialize super initialize. vertices := Array with: 5 @ 0 with: 20 @ 10 with: 0 @ 20. closed := true. smoothCurve := false. arrows := #none. self computeBounds. self isCurvier ifTrue: [ self beSmoothCurve. self diamondOval]! ! !PolygonMorph methodsFor: 'editing' stamp: 'StephaneDucasse 12/22/2013 21:40' prior: 29691375! insertVertexAt: anIndex put: aValue "This serves as a hook and a backstop for MixedCurveMorph." self setVertices: (vertices copyReplaceFrom: anIndex + 1 to: anIndex with: (Array with: aValue)).! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:36' prior: 67580868! midVertices "Return and array of midpoints for this line or closed curve" | midPts nextVertIx tweens | vertices size < 2 ifTrue: [^ vertices]. midPts := OrderedCollection new. nextVertIx := 2. tweens := OrderedCollection new. tweens add: vertices first asIntegerPoint. "guarantee at least two points." self lineSegmentsDo: [:p1 :p2 | tweens addLast: p2 asIntegerPoint. p2 = (vertices atWrap: nextVertIx) ifTrue: ["Found endPoint." midPts addLast: (tweens atWrap: tweens size + 1 // 2) + (tweens at: tweens size // 2 + 1) // 2. tweens := OrderedCollection new. tweens add: p2 asIntegerPoint. "guarantee at least two points." nextVertIx := nextVertIx + 1]]. ^ midPts asArray! ! !PolygonMorph methodsFor: 'attachments' stamp: 'StephaneDucasse 12/22/2013 21:30' prior: 29677886! nudgeForLabel: aRectangle "Try to move the label off me. Prefer labels on the top and right." | i flags nudge | (self bounds intersects: aRectangle) ifFalse: [ ^ 0 @ 0 ]. flags := 0. nudge := 0 @ 0. i := 1. aRectangle lineSegmentsDo: [ :rp1 :rp2 | | rectSeg | rectSeg := LineSegment from: rp1 to: rp2. self straightLineSegmentsDo: [ :lp1 :lp2 | | polySeg int | polySeg := LineSegment from: lp1 to: lp2. int := polySeg intersectionWith: rectSeg. int ifNotNil: [ flags := flags bitOr: i ]. ]. i := i * 2. ]. "Now flags has bitflags for which sides" nudge := flags caseOf: { "no intersection" [ 0 ] -> [ 0 @ 0 ]. "2 adjacent sides only" [ 9 ] -> [ 1 @ 1 ]. [ 3 ] -> [ -1 @ 1 ]. [ 12 ] -> [ 1 @ -1 ]. [ 6 ] -> [ -1 @ -1 ]. "2 opposite sides only" [ 10 ] -> [ 0 @ -1 ]. [ 5 ] -> [ 1 @ 0 ]. "only 1 side" [ 8 ] -> [ -1 @ 0 ]. [ 1 ] -> [ 0 @ -1 ]. [ 2 ] -> [ 1 @ 0 ]. [ 4 ] -> [ 0 @ 1 ]. "3 sides" [ 11 ] -> [ 0 @ 1 ]. [ 13 ] -> [ 1 @ 0 ]. [ 14 ] -> [ 0 @ -1 ]. [ 7 ] -> [ -1 @ 0 ]. "all sides" [ 15 ] -> [ 1 @ -1 "move up and to the right" ]. }. ^nudge! ! !PolygonMorph methodsFor: 'shaping' stamp: 'StephaneDucasse 12/22/2013 21:09'! rectangleOval "Set my vertices to an array of corner vertices. Order of vertices is in the tradion of warpblt quads." self setVertices: self bounds corners.! ! !PolygonMorph methodsFor: 'caching' stamp: 'StephaneDucasse 12/22/2013 21:32' prior: 29679333! releaseCachedState super releaseCachedState. filledForm := nil. arrowForms := nil. borderForm := nil. curveState := nil. (self hasProperty: #flex) ifTrue: [self removeProperty: #flex]. ! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:58' prior: 67583694! rotationCenter "Return the rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." | refPos | refPos := self valueOfProperty: #referencePosition ifAbsent: [^ 0.5@0.5]. ^ (refPos - self bounds origin) / self bounds extent asFloatPoint! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:58' prior: 67584111! rotationCenter: aPointOrNil "Set the new rotation center of the receiver. The rotation center defines the relative offset inside the receiver's bounds for locating the reference position." | box | aPointOrNil isNil ifTrue: [self removeProperty: #referencePosition] ifFalse: [box := self bounds. self setProperty: #referencePosition toValue: box origin + (aPointOrNil * box extent)] ! ! !PolygonMorph methodsFor: 'geometry' stamp: 'StephaneDucasse 12/22/2013 21:10' prior: 29703287! scale: scaleFactor | flex center ratio | ratio := self scaleFactor / scaleFactor. self borderWidth: ((self borderWidth / ratio) rounded max: 0). center := self referencePosition. flex := (MorphicTransform offset: center negated) withScale: ratio. self setVertices: (vertices collect: [:v | (flex transform: v) - flex offset]). super scale: scaleFactor.! ! !PolygonMorph methodsFor: 'smoothing' stamp: 'StephaneDucasse 12/22/2013 22:01' prior: 67585460! slopes: knots "Choose slopes according to state of polygon" self isCurvy ifFalse: [^ self segmentedSlopesOf: knots ]. ^ (closed and: [self isCurvier]) ifTrue: [ self closedCubicSlopesOf: knots ] ifFalse: [ self naturalCubicSlopesOf: knots ]! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:33' prior: 67585796! smoothOrSegmentedPhrase | lineName | lineName := (closed ifTrue: ['outline'] ifFalse: ['line']) translated. ^ self isCurve ifTrue: [ 'make segmented {1}' translated format: {lineName} ] ifFalse: [ 'make smooth {1}' translated format: {lineName} ].! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:33' prior: 67586156! step borderDashSpec ifNil: [^super step]. borderDashSpec size < 5 ifTrue: [^super step]. "Only for dashed lines with creep" borderDashSpec at: 4 put: (borderDashSpec fourth) + borderDashSpec fifth. self changed. ^ super step! ! !PolygonMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 12/22/2013 21:36'! toggleOpenOrClosed "toggle the open/closed status of the receiver" closed ifTrue: [ self makeOpen ] ifFalse: [ self makeClosed ]! ! !PolygonMorph methodsFor: 'attachments' stamp: 'StephaneDucasse 12/22/2013 21:29' prior: 29679072! totalLength "Answer the full length of my segments. Can take a long time if I'm curved." | length | length := 0. self lineSegmentsDo: [ :a :b | length := length + (a dist: b) ]. ^ length.! ! !PolygonMorph methodsFor: 'initialization' stamp: 'StephaneDucasse 12/22/2013 21:10' prior: 29707247! vertices: verts color: aColor borderWidth: borderWidthInteger borderColor: anotherColor super initialize. vertices := verts. color := aColor. borderWidth := borderWidthInteger. borderColor := anotherColor. closed := vertices size > 2. arrows := #none. self computeBounds! ! PolygonMorph removeSelector: #rectOval! PolygonMorph removeSelector: #quickFill:! PolygonMorph removeSelector: #makeOpenOrClosed! PolygonMorph removeSelector: #justDroppedInto:event:! PolygonMorph removeSelector: #boundsSignatureHash! "Morphic-Base"! "Nautilus"! ----End fileIn----! ----QUIT----2014-01-03T11:13:58.601933+01:00 Pharo.image priorSource: 29264302! ----STARTUP----2014-01-03T11:20:26.185468+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-03T11:20:26.454362+01:00 Pharo-30669.image priorSource: 29295852! ----STARTUP----2014-01-04T10:37:56.71133+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/4/2014 10:34' prior: 79596247! commentForCurrentUpdate ^ '12520 Can not delete directory from File Browser https://pharo.fogbugz.com/f/cases/12520 10551 All Monticello Repositories are added to all Working Copies https://pharo.fogbugz.com/f/cases/10551 12467 Pharo crashes if Monticello can not create the package-cache directory https://pharo.fogbugz.com/f/cases/12467'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/4/2014 10:34'! script323 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.64.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.78.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.903.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.275.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.640.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.305.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.186.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/4/2014 10:34'! update30670 "self new update30670" self withUpdateLog: '12520 Can not delete directory from File Browser https://pharo.fogbugz.com/f/cases/12520 10551 All Monticello Repositories are added to all Working Copies https://pharo.fogbugz.com/f/cases/10551 12467 Pharo crashes if Monticello can not create the package-cache directory https://pharo.fogbugz.com/f/cases/12467'. self loadTogether: self script323 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MacOSResolver methodsFor: 'origins' stamp: 'DamienCassou 12/20/2013 11:58'! temp ^ '/tmp' asFileReference! ! !FileList methodsFor: 'own services' stamp: 'HilaireFernandes 1/2/2014 23:58' prior: 74085356! basicDeleteDirectory "Remove the currently selected directory" reference entries isEmpty ifFalse:[^self inform:'Directory must be empty']. (self confirm: 'Really delete ' , reference basename , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. reference delete. self directory: reference parent! ! !FileList methodsFor: 'volume list and pattern' stamp: 'HilaireFernandes 1/2/2014 23:57' prior: 21880188! volumeListIndex: index "Select the volume name having the given index." | delim path | volumeListIndex := index. index = 1 ifTrue: [self directory: FileSystem disk root ] ifFalse: [ delim := reference fileSystem delimiter. path := String streamContents: [:stream | 2 to: index do: [:i | stream nextPutAll: (volumeList at: i) trimBoth. i < index ifTrue: [stream nextPut: delim]]]]. brevityState := #FileList. self addPath: path. self changed: #fileList. self changed: #contents. self updateButtonRow! ! !MCCacheRepository class methodsFor: 'defaults' stamp: 'DamienCassou 12/20/2013 12:57' prior: 40035539! defaultDirectory | directories | directories := {('package-cache' asFileReference). (FileLocator temp). (FileLocator home)}. directories do: [ :directory | [ ^ directory ensureCreateDirectory; yourself ] on: Error do: [ "ignore and try the next directory" ] ]. Error signal: 'Can''t create a package-cache'! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'StephanEggermont 1/2/2014 15:48'! currentShowOnlyRepositoriesFromWorkingCopy ^showOnlyRepositoriesFromWorkingCopy ifTrue: [ 2] ifFalse: [ 1] ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'StephanEggermont 1/2/2014 15:42'! getShowOnlyRepositoriesFromWorkingCopySettings ^#('All' 'Package')! ! !MCWorkingCopyBrowser methodsFor: 'initialization' stamp: 'StephanEggermont 1/2/2014 15:37' prior: 78581869! initialize super initialize. order := self class order. self registerToAnnouncer. workingCopyPattern := ''. repositoryPattern := ''. showOnlyRepositoriesFromWorkingCopy := true ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'StephanEggermont 1/2/2014 15:33' prior: 76441332! repositoryGroup ^ showOnlyRepositoriesFromWorkingCopy ifTrue: [ workingCopy ifNil: [ MCRepositoryGroup default ] ifNotNil: [ workingCopy repositoryGroup ] ] ifFalse: [ MCRepositoryGroup default ] ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'StephanEggermont 1/2/2014 15:33' prior: 76441663! repositoryListMenu: aMenu self repository ifNil: [^ aMenu]. self fillMenu: aMenu fromSpecs: self repositoryMenuSpec. aMenu add: (self repository alwaysStoreDiffs ifTrue: ['Store full versions'] ifFalse: ['Store diffs']) target: self selector: #toggleDiffs. ^ aMenu ! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'StephanEggermont 1/2/2014 15:41'! setShowOnlyRepositoriesFromWorkingCopy: anIndex showOnlyRepositoriesFromWorkingCopy := (anIndex = 2). self repositorySelection: 0. self repositoryListChanged. ! ! !MCWorkingCopyBrowser methodsFor: 'morphic ui' stamp: 'StephanEggermont 1/2/2014 15:48'! showOnlyRepositoriesFromWorkingCopyField ^(DropListMorph on: self list: #getShowOnlyRepositoriesFromWorkingCopySettings selected: #currentShowOnlyRepositoriesFromWorkingCopy changeSelected: #setShowOnlyRepositoriesFromWorkingCopy:) listPaneColor: Color transparent; yourself ! ! !MCWorkingCopyBrowser methodsFor: 'menu spec' stamp: 'StephanEggermont 1/2/2014 15:43' prior: 25173883! widgetSpecs | searchBarOffset | searchBarOffset := 30 + StandardFonts defaultFont height + 10. ^ { "send fractions offsets" {{#buttonRow}. {0. 0. 1. 0}. {0. 0. 0. 30.}}. {{#workingCopySearchField}. {0. 0. 0.5. 0.}. {0. 30. 0. searchBarOffset.}}. {{#treeMorph:. #workingCopy}. {0. 0. 0.5. 1}. {0. searchBarOffset+3. 0. 0.}}. {{#repositorySearchField}. {0.5. 0. 0.85. 0.}. {0. 30. 0. searchBarOffset.}}. {{#showOnlyRepositoriesFromWorkingCopyField}. { 0.85. 0. 1. 0.}. { 0. 30. 0. searchBarOffset .}}. {{#listMorph:. #repository}. {0.5. 0. 1. 1}. {0. searchBarOffset+3. 0. 0.}}. }.! ! !PlatformResolver methodsFor: 'resolving' stamp: 'DamienCassou 12/20/2013 11:51' prior: 43547622! supportedOrigins ^ #(home desktop documents preferences cache temp)! ! !PlatformResolver methodsFor: 'origins' stamp: 'DamienCassou 12/20/2013 11:50'! temp "Where to put files that are not supposed to last long" ^ self subclassResponsibility ! ! !UnixResolver methodsFor: 'resolving' stamp: 'DamienCassou 11/7/2013 16:42' prior: 76669776! supportedOrigins ^ super supportedOrigins , #( userData )! ! !UnixResolver methodsFor: 'origins' stamp: 'DamienCassou 12/20/2013 11:57'! temp ^ '/tmp' asFileReference! ! !WindowsResolver methodsFor: 'origins' stamp: 'DamienCassou 12/20/2013 11:56'! temp ^ self directoryFromEnvVariableNamed: 'TEMP' or: [ FileLocator C / 'windows' / 'temp' ]! ! !FileLocator class methodsFor: 'origins' stamp: 'DamienCassou 12/20/2013 11:59'! temp ^ self origin: #temp! ! MCWorkingCopyBrowser removeSelector: #showOnlyRepositoriesFromWorkingCopyString! MCWorkingCopyBrowser removeSelector: #showOnlyRepositoriesFromWorkingCopy! MCWorkingCopyBrowser class removeSelector: #toggleShowOnlyRepositoriesFromWorkingCopy! MCWorkingCopyBrowser class removeSelector: #showOnlyRepositoriesFromWorkingCopy:! MCWorkingCopyBrowser class removeSelector: #showOnlyRepositoriesFromWorkingCopy! MCSystemSettings class removeSelector: #showOnlyRepositoriesFromWorkingCopySettingOn:! "FileSystem-Core"! "Monticello"! "MonticelloGUI"! "Settings-Monticello"! "Tools"! ----End fileIn----! ----QUIT----2014-01-04T10:38:00.93545+01:00 Pharo.image priorSource: 29296049! ----STARTUP----2014-01-04T10:45:08.654103+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-04T10:45:08.91402+01:00 Pharo-30670.image priorSource: 29313702! ----STARTUP----2014-01-04T19:29:52.719926+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/4/2014 19:26' prior: 79627993! commentForCurrentUpdate ^ '12524 Merge with the debugger repo https://pharo.fogbugz.com/f/cases/12524 12560 there are still some references to PackageInfo in RPackage https://pharo.fogbugz.com/f/cases/12560 10521 Renaming a package problems with extension methods https://pharo.fogbugz.com/f/cases/10521'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/4/2014 19:26'! script324 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1704.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.68.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.641.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.64.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.456.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.31.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.189.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/4/2014 19:26'! update30671 "self new update30671" self withUpdateLog: '12524 Merge with the debugger repo https://pharo.fogbugz.com/f/cases/12524 12560 there are still some references to PackageInfo in RPackage https://pharo.fogbugz.com/f/cases/12560 10521 Renaming a package problems with extension methods https://pharo.fogbugz.com/f/cases/10521'. self loadTogether: self script324 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RunToSelectionDebugAction class methodsFor: 'registration' stamp: 'AndreiChis 12/17/2013 14:29' prior: 69300832! actionType ! ! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'EstebanLorenzano 1/3/2014 10:26' prior: 25162894! addWorkingCopy | name | name := UIManager default request: 'Name of package:' translated. name isEmptyOrNil ifFalse: [ RPackageOrganizer default registerPackageNamed: name. workingCopy := MCWorkingCopy forPackage: (MCPackage new name: name). workingCopyWrapper := MCDependentsWrapper with: workingCopy model: self. self repositorySelection: 0 ]. self workingCopyListChanged; changed: #workingCopySelection; repositoryListChanged. self changedButtons.! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/3/2014 11:02' prior: 31778771! extensionMethods "Extension methods are methods defined on classes that are not defined in the receiver" | allExtensionMethods | allExtensionMethods := OrderedCollection new. classExtensionSelectors keysAndValuesDo: [ :classSymbol :methods | methods do: [ :selector | allExtensionMethods add: ((Smalltalk at: classSymbol) >> selector) ] ]. metaclassExtensionSelectors keysAndValuesDo: [ :classSymbol :methods | methods do: [ :selector | allExtensionMethods add: ((Smalltalk at: classSymbol) theMetaClass >> selector) ] ]. ^ allExtensionMethods ! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/3/2014 09:57' prior: 79166610! name: aSymbol name := aSymbol asSymbol.! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/3/2014 11:07'! renameExtensionsPrefixedWith: oldName to: newName | protocols | protocols := self extensionMethods collect: [ :each | each origin organization protocolNamed: each protocol ] as: Set. protocols do: [ :each | each rename: '*', newName, (each name allButFirst: oldName size + 1) ] ! ! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/3/2014 11:08'! renameTo: aSymbol | oldName newName | oldName := self name. newName := aSymbol asSymbol. self name: aSymbol. self renameTagsPrefixedWith: oldName to: newName. self renameExtensionsPrefixedWith: oldName to: newName. self organizer basicUnregisterPackageNamed: oldName; basicRegisterPackage: self. SystemAnnouncer uniqueInstance announce: (RPackageRenamed to: self oldName: oldName newName: newName).! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'EstebanLorenzano 10/30/2012 14:36' prior: 32006234! ensureExistAndRegisterPackageNamed: aSymbol "A new package is now available and declared in the receiver." | package | package := packages at: aSymbol asSymbol ifAbsentPut: [ self packageClass named: aSymbol ]. package extendedClasses do: [ :extendedClass| self registerExtendingPackage: package forClass: extendedClass]. package definedClasses do: [ :definedClass| self registerPackage: package forClass: definedClass]. self announcer announce: (RPackageCreated to: package). ^ package! ! !RPackageOrganizer methodsFor: 'public registration' stamp: 'EstebanLorenzano 1/3/2014 09:46'! registerPackageNamed: aString ^ self packageNamed: aString asSymbol ifAbsent: [ (RPackage named: aString asSymbol) register ]! ! !DebugSession methodsFor: 'testing' stamp: 'ClaraAllende 10/31/2013 16:34' prior: 69271358! shouldDisplayContext: aContext basedOnFilters: stackFilters "Return true if all filters match the given context, or false otherwise. True is returned if there are no filters." ^stackFilters allSatisfy: [ :aFilter | aFilter shouldDisplay: aContext ]. ! ! !SpecDebugger class methodsFor: 'menu code' stamp: 'AndreiChis 12/17/2013 14:19'! dynamicCodeContextMenu: aBuilder aBuilder model codeContextMenuDebuggingActions do: [ :anAction | anAction asMenuRegistrationIn: aBuilder ]! ! !SpecDebugger methodsFor: 'actions code' stamp: 'AndreiChis 12/17/2013 14:29'! codeContextMenu: menu shifted: shifted | donorMenu | "Now dynamically load any other actions." menu addAllFromPragma: 'specDebuggerCodeContextMenu' target: self. "Directly load the standard actions here." donorMenu := shifted ifTrue: [SmalltalkEditor shiftedYellowButtonMenu] ifFalse: [SmalltalkEditor yellowButtonMenu]. ^ menu addAllFrom: donorMenu.! ! !SpecDebugger methodsFor: 'actions code' stamp: 'AndreiChis 12/17/2013 14:19'! codeContextMenuDebuggingActions ^ self session class debuggingActionsForPragmas: #(contextMenuCodeDebuggingAction) for: self! ! !SpecDebugger methodsFor: 'initialization' stamp: 'AndreiChis 12/17/2013 14:21' prior: 71817639! initializeWidgets self instantiateModels: {(#stack -> #SpecDebuggerStack). (#toolbar -> #SpecDebuggerDynamicToolbar). (#code -> #TextModel). (#receiverInspector -> #InspectorNavigator). (#contextInspector -> #EyeDebuggerContextInspector)}. self code acceptBlock: [ :text :notifyer | self recompileMethodTo: text string inContext: self stack selectedItem notifying: notifyer ]. self code whenBuiltDo: [ :ann | ann widget font: self codeFont ]. self code menuHolder: [ :menu :shifted | self codeContextMenu: menu shifted: shifted]. self setFocusOrder! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 1/3/2014 09:55' prior: 77292140! basicRenamePackage: aPackage | newName | newName := UIManager default request: 'New name of the package' initialAnswer: aPackage name title: 'Rename a package'. newName = aPackage name ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifTrue: [ aPackage renameTo: newName ] ifFalse: [ self alertInvalidPackageName:newName ].! ! !MCVersionLoader methodsFor: 'private' stamp: 'EstebanLorenzano 1/3/2014 09:43' prior: 74376205! ensurePackage: mcPackage RPackageOrganizer default registerPackageNamed: mcPackage name ! ! OrContextPredicate removeSelector: #with:with:! OrContextPredicate removeSelector: #matchContext:! OrContextPredicate class removeSelector: #with:with:! Smalltalk globals removeClassNamed: #OrContextPredicate! ContextPredicate removeSelector: #result! ContextPredicate removeSelector: #or:! ContextPredicate removeSelector: #matches:! ContextPredicate removeSelector: #matchContext:! ContextPredicate removeSelector: #hasMatched! ContextPredicate removeSelector: #and:! BlockContextPredicate removeSelector: #matchContext:! BlockContextPredicate removeSelector: #for:! BlockContextPredicate class removeSelector: #for:! Smalltalk globals removeClassNamed: #BlockContextPredicate! AndContextPredicate removeSelector: #with:with:! AndContextPredicate removeSelector: #matchContext:! AndContextPredicate class removeSelector: #with:with:! Smalltalk globals removeClassNamed: #AndContextPredicate! Smalltalk globals removeClassNamed: #ContextPredicate! RPackage removeSelector: #systemSubPackages! RPackage removeSelector: #allMethodReferences! RPackage removeSelector: #allDefinedExtensionMethods! RPackage removeSelector: #allDefinedClasses! SaveDebugAction removeSelector: #sourceCode:! SaveDebugAction removeSelector: #executeAction! SaveDebugAction removeSelector: #defaultOrder! SaveDebugAction removeSelector: #defaultLabel! Smalltalk globals removeClassNamed: #SaveDebugAction! ChangeDebuggerAction removeSelector: #initialize! ChangeDebuggerAction removeSelector: #executeAction! ChangeDebuggerAction removeSelector: #defaultOrder! ChangeDebuggerAction removeSelector: #defaultCategory! ChangeDebuggerAction removeSelector: #debuggerClass:! ChangeDebuggerAction class removeSelector: #debuggersForContext:excluding:! ChangeDebuggerAction class removeSelector: #changeDebuggerActionsForContext:excluding:! Smalltalk globals removeClassNamed: #ChangeDebuggerAction! "DebuggerActions"! "DebuggerModel"! "Monticello"! "MonticelloGUI"! "Nautilus"! "RPackage-Core"! "Spec-Debugger"! ----End fileIn----! ----QUIT----2014-01-04T19:29:56.834081+01:00 Pharo.image priorSource: 29313898! ----STARTUP----2014-01-04T19:38:19.512761+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-04T19:38:19.824588+01:00 Pharo-30671.image priorSource: 29333635! ----STARTUP----2014-01-05T15:30:52.530397+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/5/2014 15:26' prior: 79645842! commentForCurrentUpdate ^ '12571 #evaluate should always #generateWithSource https://pharo.fogbugz.com/f/cases/12571 12562 NewList separatorAt bug fix https://pharo.fogbugz.com/f/cases/12562 12556 debugger is not showing correct icon in taskbar https://pharo.fogbugz.com/f/cases/12556 12563 Comments in CompiledMethod https://pharo.fogbugz.com/f/cases/12563 12564 Error in #initializeWithTarget: https://pharo.fogbugz.com/f/cases/12564'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/5/2014 15:27'! script325 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.70.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.641.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.189.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/5/2014 15:27'! update30672 "self new update30672" self withUpdateLog: '12571 #evaluate should always #generateWithSource https://pharo.fogbugz.com/f/cases/12571 12562 NewList separatorAt bug fix https://pharo.fogbugz.com/f/cases/12562 12556 debugger is not showing correct icon in taskbar https://pharo.fogbugz.com/f/cases/12556 12563 Comments in CompiledMethod https://pharo.fogbugz.com/f/cases/12563 12564 Error in #initializeWithTarget: https://pharo.fogbugz.com/f/cases/12564'. self loadTogether: self script325 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CompiledMethod methodsFor: 'literals' stamp: 'AlexandreBergel 1/4/2014 20:13' prior: 19814823! literalStrings "Return a list of strings or symbols corresponding to the class references and message sent. The result also contains the name of the class" | litStrs | litStrs := OrderedCollection new: self numLiterals. self literalsDo: [:lit | (lit isVariableBinding) ifTrue: [litStrs addLast: lit key] ifFalse: [(lit isSymbol) ifTrue: [litStrs addAll: lit keywords] ifFalse: [litStrs addLast: lit printString]]]. ^ litStrs! ! !CompiledMethod methodsFor: 'literals' stamp: 'AlexandreBergel 1/4/2014 20:16' prior: 19817265! sendsSelector: aSymbol " Answer whether the method sends a particular selector (CompiledMethod >> #sendsSelector:) sendsSelector: #includes: => true (CompiledMethod >> #sendsSelector:) sendsSelector: #doBreakfastForMe => false " ^ self messages includes: aSymbol! ! !MorphicWindowAdapter methodsFor: '*Polymorph-TaskbarIcons' stamp: 'EstebanLorenzano 1/5/2014 12:45'! taskbarIcon ^ self model taskbarIcon! ! !OpalCompiler methodsFor: 'public access' stamp: 'MarcusDenker 1/5/2014 10:55' prior: 68952975! evaluate "Compiles the sourceStream into a parse tree, then generates code into a method. If aContext is not nil, the text can refer to temporaries in that context (the Debugger uses this). If aRequestor is not nil, then it will receive a notify:at: message before the attempt to evaluate is aborted. Finally, the compiled method is invoked from here via withArgs:executeMethod:, hence the system no longer creates Doit method litter on errors." | value selectedSource itsSelection itsSelectionString | self class: (context ifNil: [ receiver class ] ifNotNil: [ context method methodClass ]). self noPattern: true. selectedSource := ((self compilationContext requestor respondsTo: #selection) and: [ (itsSelection := self compilationContext requestor selection) notNil and: [ (itsSelectionString := itsSelection asString) isEmptyOrNil not ] ]) ifTrue: [ itsSelectionString ] ifFalse: [ source ]. self source: selectedSource. value := receiver withArgs: (context ifNil: [ #() ] ifNotNil: [ {context} ]) executeMethod: self translate generateWithSource. self compilationContext logged ifTrue: [ SystemAnnouncer uniqueInstance evaluated: selectedSource contents context: context ]. ^ value! ! !NewListAdapter methodsFor: 'list protocol' stamp: 'StephaneDucasse 1/4/2014 22:46' prior: 49792156! separatorAfter: item at: index "returns whether there should be a separator after an item displayed at a given index." ^ separatorSelector value ifNotNil: [ self model perform: separatorSelector with: item with: index ] ifNil: [ false ]! ! !NewListAdapter methodsFor: 'accessing' stamp: 'StephaneDucasse 1/4/2014 22:51' prior: 76509312! separatorSelector "return selector to be executed to get the separator between two list items." ^ separatorSelector value! ! !MCPatch methodsFor: '*Komitter-Models' stamp: 'MarcusDenker 1/5/2014 15:26' prior: 78634047! initializeWithTarget: targetSnapshot | target | target := MCDefinitionIndex definitions: targetSnapshot definitions. operations := (target definitions collect: [ :definition | MCAddition of: definition ]) asOrderedCollection.! ! !NewList methodsFor: 'protocol' stamp: 'StephaneDucasse 1/4/2014 22:27' prior: 28388048! cacheAt: index ^ listCache value at: index ifAbsent: [ nil ]! ! "Kernel"! "Komitter"! "NewList"! "OpalCompiler-Core"! "Polymorph-TaskbarIcons"! ----End fileIn----! ----QUIT----2014-01-05T15:30:57.586417+01:00 Pharo.image priorSource: 29333832! ----STARTUP----2014-01-05T15:37:48.783274+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-05T15:37:49.03727+01:00 Pharo-30672.image priorSource: 29349413! ----STARTUP----2014-01-06T10:40:52.081987+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/6/2014 10:37' prior: 79665777! commentForCurrentUpdate ^ '12574 SpecDebugActionButton has a bad Layout https://pharo.fogbugz.com/f/cases/12574 12575 Add support for Git repo https://pharo.fogbugz.com/f/cases/12575'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/6/2014 10:37'! script326 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.641.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.265.mcz Spec-Debugger-MarcusDenker.189.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.101.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/6/2014 10:38'! update30673 "self new update30673" SpecDebugActionButton addInstVarNamed: 'removeMe'; removeInstVarNamed: 'removeMe'. . self withUpdateLog: '12574 SpecDebugActionButton has a bad Layout https://pharo.fogbugz.com/f/cases/12574 12575 Add support for Git repo https://pharo.fogbugz.com/f/cases/12575'. self loadTogether: self script326 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCFileTreeRepository methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 1/5/2014 15:46'! isRemote ^ true! ! !MCFileTreeRepository methodsFor: '*Komitter' stamp: 'BenjaminVanRyseghem 1/5/2014 15:47'! koRemote ^ KomitCacheRemote new remote: self; yourself! ! "Komitter"! ----End fileIn----! ----QUIT----2014-01-06T10:40:53.888616+01:00 Pharo.image priorSource: 29349610! ----STARTUP----2014-01-06T10:47:01.401532+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-06T10:47:01.657684+01:00 Pharo-30673.image priorSource: 29361498! ----STARTUP----2014-01-06T16:00:51.563517+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'StephaneDucasse 1/6/2014 15:58' prior: 79681554! commentForCurrentUpdate ^ '12569 TextModel should not move scroll when accepting text https://pharo.fogbugz.com/f/cases/12569 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'StephaneDucasse 1/6/2014 15:58'! script327 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.238.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.641.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.995.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-StephaneDucasse.190.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'StephaneDucasse 1/6/2014 15:58'! update30674 "self new update30674" self withUpdateLog: '12569 TextModel should not move scroll when accepting text https://pharo.fogbugz.com/f/cases/12569 '. self loadTogether: self script327 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/4/2014 19:42'! openWithSpecAt: aPosition self buildWithSpec. self changed: #openAt: with: { aPosition }! ! !MorphicTextInputFieldAdapter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/4/2014 18:09'! adapt: aModel super adapt: aModel. aModel whenBuiltDo: [ :w | w widget color: Color white ]! ! !LabelModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/4/2014 18:06'! emphasis: anInteger self changed: #emphasis: with: { anInteger }! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/5/2014 02:23' prior: 69666797! accept: aText notifying: aNotifyier ^ self model accept: aText notifying: aNotifyier! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 01:51'! notify: errorMessage at: postion in: sourceCode self widgetDo: [ :w | w notify: errorMessage at: postion in: sourceCode ]! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 02:24' prior: 76556066! accept: aText notifying: aNotifyier | accept | accept := actionToPerformHolder value cull: aText cull: aNotifyier. accept == false ifTrue: [ ^ false ]. textHolder value: aText. "Dummy changed to raise an announcement" actionPerformedHolder value: aText. self changed: #clearUserEdits. ^ true! ! !TextModel methodsFor: 'protocol-errors' stamp: 'BenjaminVanRyseghem 1/5/2014 01:51'! notify: errorMessage at: position in: sourceCode self changed: #notify:at:in: with: { errorMessage. position. sourceCode }! ! !MorphicLabelAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/4/2014 18:16'! emphasis: anInteger self widgetDo: [ :w | w emphasis: anInteger ]! ! !MorphicMenuAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/4/2014 19:43'! openAt: aPoint self widgetDo: [ :w | w invokeAt: aPoint in: World allowKeyboard: true ]! ! "Spec-Core"! "Spec-Debugger"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2014-01-06T16:00:54.043517+01:00 Pharo.image priorSource: 29361695! ----STARTUP----2014-01-06T16:06:49.997936+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-06T16:06:50.223936+01:00 Pharo-30674.image priorSource: 29375089! !ScriptLoader commentStamp: 'StephaneDucasse 1/7/2014 10:47' prior: 68101339! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./prepare.sh scripts and before that one you should do a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! !ScriptLoader commentStamp: 'StephaneDucasse 1/7/2014 10:47' prior: 79707104! Pharo Process Description. This comment contains: - some points on infrastructure - some scripts description - main behavior of the scriptLoader. General points on infrastructure --------------------------------------------------------------------------------------------------------------------------------- An enhancement - should be added to the bug tracker https://pharo.fogbugz.com - announced to the mailing-list - asked for feedback - results should be added to the BT entry FixedToInclude tag means ready for integration. FixToreview means that people should have a look and give feedback (often just need to FixToInclude) A bug detected and discussed via the mailing-list should be added to the bug tracker. When a fix is provided, it should be either posted on the bug tracker as a slice in the PharoInbox - (a slice is an emtpy package that has as requirement other package composing the fix). - Repositories --------------------- For each Pharo version, we have three projects: Pharo PharoInbox (PharoTreatedInbox - was used in Pharo20 and we hope to get it back) A fix goes either from inbox to treatedInbox or to Pharo. If a fix does not work it is moved to the TreatedInbox. If a fix works it is integrated as follow - it will be moved from the Inbox to the TreatedInbox and integrated and published in the Pharo project It is now a bit old but to help browsing multiple repositories use the following expression: ScriptLoader new addExtraRepositories self addRepository39ToAllPackages. self addRepository310ToAllPackages. self addRepositoryTaskForcesToAllPackages. self addRepositorySqueakTrunkToAllPackages. self addRepositoryMCToAllPackages. self addRepositoryTreatedToAllPackages. System Scripts ------------------------- Before starting and you need to download (only once) the pharo-updates folder from git hub: git clone https://github.com/pharo-project/pharo-update.git Typically before any integration, execute the script prepare.sh ---------------------------------------------------------------------------- #!! /bin/bash version=3.0 working_dir=current previous_dir=previous zip_name=latest.zip if [ -e $zip_name ]; then rm $zip_name fi wget --no-check-certificate http://files.pharo.org/image/30/$zip_name rm -Rf $previous_dir mv $working_dir $previous_dir unzip -d $working_dir $zip_name mv $working_dir/Pharo*.image $working_dir/Pharo.image mv $working_dir/Pharo*.changes $working_dir/Pharo.changes cp PharoPass.txt $working_dir/PharoPass.txt ./scripts/getupdateslist.sh pharo $working_dir/Pharo.image the script getupdateslist.sh is defined as follows: ---------------------------------------------------------------------------- #!!/bin/bash flatten_version=30 updates_dir=./pharo-update working_dir=current current_dir=`pwd` cd $updates_dir git pull cd $current_dir cp $updates_dir/updates$flatten_version.staged $working_dir Later when you will be done and you will kick the integration server you will need the following publish script. The publish.sh script is defined as follows: #!! /bin/bash version=3.0 updates_dir=./pharo-update current_dir=current previous_dir=previous cp $current_dir/*.cs $updates_dir cp $current_dir/*.staged $updates_dir ./scripts/publish.sh 4 Steps of the integration process ------------------------------------------------------ Precondition: you have run the ./prepare.sh scripts and before that one you should do a git clone of the pharo-update repository. The integration works in 4 main steps which can be steered by the following expression ScriptLoader releaseMenu or via the menu that can be shown/hidden using ScriptLoader showIntegrationMenu ScriptLoader hideIntegrationMenu --------------------------------------------------------------------------------------------------------------------------------- 1.) 'Prepare new update' : Start up a recent and clean image ScriptLoader new prepareNewUpdate This step will - load the latest updates - load the latest version of the ScriptLoader package from the Pharo repository. Indeed when we work on improving the ScriptLoader it may not be published in the update stream. New versions can be available on the server but not part of the latest updates. Therefore the process always loads the latest version of scriptloader from the pharo repository. This point is important because when an integration failed, you have to check and optionally remove the scriptloader package from the pharo repository or republished a previous version with a more recent number to override the last one. - check that the update.list (which contains the cs to load the packages) is in sync with the image current version. The update was done automatically by the prepare bash script (which pulls from git). - snapshot the package version to detect dirty or changed but non dirty packages. 2.) Apply changes Once you are done and select the second menu item or ScriptLoader new doneApplyingChanges This step will - create an update method with can trigger the load of the packages and some pre/post actions - create a script method with describes all the package versions and it used by the update methods - save all the packages that are different (except some filtered packages) into a local folder named 'package-to-be-tested'. ScriptLoader, SLICE*.... and a couple of other packages are not considered to be included in the script method (check method packagesNotToSavePatternNames) 3.) Verify changes ==> in a ***new*** image (in the current folder) execute: ScriptLoader new verifyNewUpdate This step will - load in any order (so may break) the packages previously saved in the 'package-to-be-tested' folder. - this step is important because you may get simple changes with unexpected side effects and that may break the load. 4.) If there are problems go to 2.) to fix them, else you can commit the changes. ScriptLoader new publishChanges This step will - generate a new cs file whose purpose is to load the given version of the scriptloader and trigger the correct update method. - add the name of the cs file to the end of the updates.staged file local to the disc - copy all the package from the local directory to the Pharo At the current time (August 2013), you will get the contents of the mail that you can send to the list. Now you will have to wait before sending it because you need to kick in the ci integration process. Execute the publish.sh bash script to publish the cs and the staged file in git. Then go to the https://ci.inria.fr/pharo/? page. You will see that the ci will validate your integration automatically. First it will load the code (strangely named: Step-1-Tracker) Second it will validate it: Step-2-Validation Third it will release it: Step-3-Release Fourth it will publish it: Step-4-Publish As a result the pharo-update and a new image will be published. You can then send the mail of the new update. 5) in case of problems. If a problem arrives during the step 4, your update.staged file and your image may not in sync!! Do not stress!! Normally it should be easy to fix. If the ci integration failed previously: - 1. Load the previous version of the Scriptloader, modify it to get the package dirty and republish it. It will get a newer number and the setting up of the integration will load it instead of a version of ScriptLoader containing an integration that did not finish. -2 just throw away your current directory. Do not worry about the fact that the changeset has been added to git. When you will integrate, the process will create a file with the same number and erase the committed one. Note that if you have to rollback the created image you have to access the file repository to remove the latest image. The file server is available at files.pharo.org Server: 193.51.235.3 Address: 193.51.235.3#53 It may be possible that you do not access and need to get your ssh files there first. Other notes. -------------------- CurrentMajorVersionNumber should contains a string '1.0', '1.1'.... This string will determine on which folder on the server the updates.list should be loaded. i.e., updates/pharo1.0, updates/pharo1.1 .... --- Not to forget --- To change the release stream add a new method for each releaseStream ScriptLoader toPharoOne ScriptLoader toPharoOneDotOne ! ----STARTUP----2014-01-07T13:09:51.580608+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/7/2014 13:06' prior: 79693643! commentForCurrentUpdate ^ '12568 IconicListItem should lock text morph https://pharo.fogbugz.com/f/cases/12568 12567 PluggableButtonMorph should clip submorphs https://pharo.fogbugz.com/f/cases/12567 12516 Nautilus find methode ... does not select the method https://pharo.fogbugz.com/f/cases/12516 12582 Silly code in PluggableListMorph https://pharo.fogbugz.com/f/cases/12582'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/7/2014 13:07'! script328 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.643.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.131.mcz Polymorph-Widgets-MarcusDenker.997.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-StephaneDucasse.75.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/7/2014 13:07'! update30675 "self new update30675" self withUpdateLog: '12568 IconicListItem should lock text morph https://pharo.fogbugz.com/f/cases/12568 12567 PluggableButtonMorph should clip submorphs https://pharo.fogbugz.com/f/cases/12567 12516 Nautilus find methode ... does not select the method https://pharo.fogbugz.com/f/cases/12516 12582 Silly code in PluggableListMorph https://pharo.fogbugz.com/f/cases/12582'. self loadTogether: self script328 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NautilusUI methodsFor: 'menus behavior' stamp: 'NicolaiHess 1/6/2014 16:10' prior: 28297189! findMethod "Search for a method in the lookup of the selected class" | foundMethod class | self okToChange ifFalse: [^ self flashPackage ]. class := self selectedClass. class ifNil: [ ^ self ]. foundMethod := (SearchFacade messageSearchFor: class) chooseFromOwner: self window. foundMethod ifNil: [^ self ]. self showGroupsSilently: false. self categoryWidget resetSelection. self methodWidget resetSelection. self categoryWidget selectProtocol: foundMethod category. self model package: self selectedPackage class: self selectedClass category: foundMethod protocol method: foundMethod. self update. self changed: #sourceCodeFrom:! ! !PluggableButtonMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/5/2014 02:33' prior: 39530857! initialize "Initialize the state of the receiver." super initialize. self rubberBandCells: false; listDirection: #topToBottom; hResizing: #shrinkWrap; vResizing: #shrinkWrap; wrapCentering: #center; cellPositioning: #center. enabled := true. self initializeLabelMorph. "this is a safe guard for enabled: among others." askBeforeChanging := false. triggerOnMouseDown := false. showSelectionFeedback := false. arguments := #(). self layoutInset: (self theme buttonLabelInsetFor: self); borderStyle: BorderStyle thinGray; extent: 20 @ 15; setProperty: #lastState toValue: false; cornerStyle: (self theme buttonCornerStyleIn: nil). self clipSubmorphs: true! ! !PluggableListMorph methodsFor: 'background coloring' stamp: 'BenjaminVanRyseghem 1/6/2014 15:54' prior: 29429816! backgroundColorFor: aRow | return | aRow ifNil: [ ^ nil ]. self enabled ifFalse: [ return := Color white darker darker ]. self backgroundColoringBlockOrSelector ifNotNil: [:blockOrSelector || anItem | anItem := getListElementSelector ifNil: [ list at: aRow ifAbsent: [ ^ nil ]] ifNotNil: [ model perform: getListElementSelector with: aRow ]. return := blockOrSelector isBlock ifTrue: [ blockOrSelector cull: anItem cull: aRow ] ifFalse: [ blockOrSelector isSymbol ifTrue: [ blockOrSelector numArgs == 0 ifTrue: [ anItem perform: blockOrSelector ] ifFalse: [ self model perform: blockOrSelector withEnoughArguments: { anItem. aRow} ]] ifFalse: [ nil ]]]. ^ return isColor ifTrue: [ return ] ifFalse: [ nil ]! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 1/5/2014 02:31' prior: 42885501! text: aText icon: form | morph | aText ifNotNil: [ morph := aText asMorph lock; yourself ]. ^ self new morph: morph; icon: (AlphaImageMorph new image: form); yourself! ! "Morphic-Base"! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2014-01-07T13:09:59.016889+01:00 Pharo.image priorSource: 29375286! ----STARTUP----2014-01-07T13:16:02.657194+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-07T13:16:02.937182+01:00 Pharo-30675.image priorSource: 29407133! ----STARTUP----2014-01-07T13:45:54.141112+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/7/2014 13:43' prior: 79724343! commentForCurrentUpdate ^ '12530 Test Coverage not working https://pharo.fogbugz.com/f/cases/12530 12576 IconicListItem should allow any morph as icon https://pharo.fogbugz.com/f/cases/12576 12578 MCNoChangesException should be used https://pharo.fogbugz.com/f/cases/12578'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/7/2014 13:43'! script329 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.276.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.643.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.998.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/7/2014 13:43'! update30676 "self new update30676" self withUpdateLog: '12530 Test Coverage not working https://pharo.fogbugz.com/f/cases/12530 12576 IconicListItem should allow any morph as icon https://pharo.fogbugz.com/f/cases/12576 12578 MCNoChangesException should be used https://pharo.fogbugz.com/f/cases/12578'. self loadTogether: self script329 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TestRunner methodsFor: 'actions' stamp: 'PabloHerrero 1/4/2014 11:10' prior: 52403114! addDeclaredPackagesUnderTestTo: packages classesSelected do: [ :class | (class class includesSelector: #packageNamesUnderTest) ifTrue: [ class packageNamesUnderTest do: [ :name | packages add: (RPackage named: name) ] ] ]! ! !TestRunner methodsFor: 'actions' stamp: 'PabloHerrero 1/4/2014 14:08' prior: 52403430! addMethodsUnderTestIn: packages to: methods packages do: [:package | package isNil ifFalse: [package methodReferences do: [:method | ((#(#packageNamesUnderTest #classNamesNotUnderTest ) includes: method selector) or: [method compiledMethod isAbstract or: [method compiledMethod refersToLiteral: #ignoreForCoverage]]) ifFalse: [methods add: method]]]]! ! !TestRunner methodsFor: 'actions' stamp: 'PabloHerrero 1/4/2014 11:11' prior: 52406766! promptForPackages | packages | packages := (RPackageOrganizer default packages reject: [:package | (package packageName beginsWith: 'Kernel') or: [(package packageName beginsWith: 'Collections') or: [(package packageName beginsWith: 'Exceptions') or: [(package packageName beginsWith: 'SUnit') or: [(package packageName beginsWith: 'System') or: [package packageName includesSubstring: 'Test' caseSensitive: false]]]]]]) sort: [:a :b | a packageName < b packageName]. packages := Array with: (UIManager default chooseFrom: (packages collect: [:package | package packageName]) values: packages title: 'Select Package'). ^ packages! ! !MCWorkingCopyBrowser methodsFor: '*Polymorph-Tools-Diff' stamp: 'BenjaminVanRyseghem 1/6/2014 00:43' prior: 46481126! viewChanges "View the changes made in the working copy." | patch | 'Finding changes' displayProgressFrom: 0 to: 10 during:[:bar| self canSave ifTrue:[ bar current: 1. patch := workingCopy changesRelativeToRepository: self repository]. patch ifNil: [^ self]. bar current: 3. patch isEmpty ifTrue: [ workingCopy modified: false. bar current: 10. MCNoChangesException signal ] ifFalse: [ workingCopy modified: true. bar current: 5. self viewChanges: patch from: workingCopy packageName, ' (', workingCopy ancestry ancestorString, ')' to: ('Modified {1}' translated format: {workingCopy description})]]! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'MarcusDenker 1/7/2014 13:41' prior: 79738522! text: aText icon: form | morph | aText ifNotNil: [ morph := aText asMorph lock; yourself ]. ^ self new morph: morph; icon: form asMorph; yourself! ! "Polymorph-Tools-Diff"! "Polymorph-Widgets"! "SUnit-UI"! ----End fileIn----! ----QUIT----2014-01-07T13:45:58.743113+01:00 Pharo.image priorSource: 29407330! ----STARTUP----2014-01-07T13:52:04.670454+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-07T13:52:04.928455+01:00 Pharo-30676.image priorSource: 29421771! ----STARTUP----2014-01-07T18:44:52.499536+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/7/2014 18:41' prior: 79739275! commentForCurrentUpdate ^ '12234 Compiling a method often makes nautilus deselect the package https://pharo.fogbugz.com/f/cases/12234 12518 Shared package filter history list https://pharo.fogbugz.com/f/cases/12518 12542 MCBrowser filter does not work well https://pharo.fogbugz.com/f/cases/12542'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/7/2014 18:42'! script330 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1706.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.904.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.644.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.206.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-StephaneDucasse.240.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.18.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/7/2014 18:42'! update30677 "self new update30677" self withUpdateLog: '12234 Compiling a method often makes nautilus deselect the package https://pharo.fogbugz.com/f/cases/12234 12518 Shared package filter history list https://pharo.fogbugz.com/f/cases/12518 12542 MCBrowser filter does not work well https://pharo.fogbugz.com/f/cases/12542'. self loadTogether: self script330 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PackageTreeNautilusUI commentStamp: '' prior: 77456498! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !SharedValueHolder commentStamp: '' prior: 0! A SharedValueHolder is used for package filter input. It shares historical values of the input among all the PackageTreeNautilus browsers. Instance Variables mutex: Mutex value: OrderedCollection ! !MCFileRepositoryInspector methodsFor: 'morphic ui' stamp: 'NicolaiHess 1/7/2014 14:51' prior: 78579519! packageList | result loadedPackages | versions ifNil: [ ^ #() ]. result := Set new: versions size. versions do: [ :each | result add: each first ]. "sort loaded packages first, then alphabetically" loadedPackages := Set new: loaded size. loaded do: [ :each | loadedPackages add: (each copyUpToLast: $-). ]. result := result asArray sort: [ :a :b | | loadedA loadedB | loadedA := loadedPackages includes: a. loadedB := loadedPackages includes: b. loadedA = loadedB ifTrue: [ a < b ] ifFalse: [ loadedA ] ]. packagePattern ifNotEmpty: [ result := result select: [ :package| package name asLowercase includesSubstring: packagePattern ]]. ^packageList := result collect: [ :each | self packageHighlight: each ]! ! !EditableDropListMorph methodsFor: 'private' stamp: 'JurajKubelka 12/27/2013 11:26' prior: 21101749! updateContentMorphWith: aString content := aString. self contentMorph setText: aString! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'JurajKubelka 12/27/2013 11:51' prior: 28298585! fullBrowse ^ self model class openOnPackage: self selectedPackage class: self selectedClass category: self selectedCategory method: self selectedMethod group: self selectedGroup showGroups: self showGroups showHierarchy: self showHierarchy showPackages: self showPackages showComment: self showComment showInstance: self showInstance showCategories: true ! ! !PackageTreeNautilusUI commentStamp: '' prior: 79765414! I'm the UI representation of Nautilus with Package tree. I redefine the category column to add a tree who can manage groups, packages and tags. I try to redefine just the basic, and for that reason there are some concepts that changed for bad (they are now less understandable). #selectedPackage now answers not a package but a "selection", and instance of a child of PackageTreeSelection who can be: - a package, like before - a package tag - a group ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 12/27/2013 11:53' prior: 78914744! buildPackageSearch "It is an search dialog which filters package list" searchWidget := SearchMorph new model: self; updateSelector: #packageSearchUpdate:; ghostText: 'Type: Pkg1|^Pkg2|Pk.*Core$'; list: SharedValueHolder instance; useSelectionIndex: false; setIndexSelector: #packageSearchUpdate:; yourself. ^ searchWidget! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'NicolaiHess 1/4/2014 01:05' prior: 77527641! clearPackageSelections listElements := nil. list2Elements := nil. packagesSelection removeAll. groupsSelection removeAll.! ! !PackageTreeNautilusUI methodsFor: 'menus behavior' stamp: 'JurajKubelka 12/27/2013 11:52'! fullBrowse super fullBrowse packagePatternString: self packagePatternString! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 12/26/2013 14:20'! packagePatternString ^ searchWidget searchString! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'JurajKubelka 12/26/2013 14:54'! packagePatternString: aStringOrNil aStringOrNil ifNil: [ ^ self ]. searchWidget content: aStringOrNil! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/4/2014 01:05' prior: 77529437! showGroups: aBoolean self okToChange ifFalse: [ ^ self ]. self showGroups = aBoolean ifTrue: [ ^ self ]. self model selectedPackage: nil. self clearPackageSelections. self listClearSelection. self model showGroups: aBoolean. self updatePackageView. self updateClassView. ! ! !PackageTreeNautilus methodsFor: 'package filter' stamp: 'JurajKubelka 12/26/2013 14:23'! packagePatternString: aString self ui packagePatternString: aString! ! !SharedValueHolder commentStamp: '' prior: 79765933! A SharedValueHolder is used for package filter input. It shares historical values of the input among all the PackageTreeNautilus browsers. Instance Variables mutex: Mutex value: OrderedCollection ! !SharedValueHolder class methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:51'! instance ^ instance ifNil: [ instance := self new value: OrderedCollection new; yourself ]! ! !SharedValueHolder methodsFor: 'adding' stamp: 'JurajKubelka 12/26/2013 17:30'! addFirst: aString ^ mutex critical: [ value addFirst: aString ]! ! !SharedValueHolder methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:31'! at: index ^ mutex critical: [ value at: index ]! ! !SharedValueHolder methodsFor: 'enumerating' stamp: 'JurajKubelka 12/26/2013 17:27'! collectWithIndex: aBlockClosure ^ mutex critical: [ value withIndexCollect: aBlockClosure ]! ! !SharedValueHolder methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:30'! indexOf: aString ^ mutex critical: [ value indexOf: aString ]! ! !SharedValueHolder methodsFor: 'initialization' stamp: 'JurajKubelka 12/26/2013 17:18'! initialize super initialize. mutex := Mutex new.! ! !SharedValueHolder methodsFor: 'removing' stamp: 'JurajKubelka 12/26/2013 17:28'! remove: aString ifAbsent: aBlockClosure ^ mutex critical: [ value remove: aString ifAbsent: aBlockClosure ]! ! !SharedValueHolder methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:29'! size ^ mutex critical: [ value size ]! ! !SharedValueHolder methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:19'! value ^ mutex critical: [ value ].! ! !SharedValueHolder methodsFor: 'accessing' stamp: 'JurajKubelka 12/26/2013 17:18'! value: anObject mutex critical: [ value := anObject ].! ! "MonticelloGUI"! "Nautilus"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2014-01-07T18:44:58.479877+01:00 Pharo.image priorSource: 29421968! ----STARTUP----2014-01-07T18:51:04.023627+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-07T18:51:04.269621+01:00 Pharo-30677.image priorSource: 29440181! ----STARTUP----2014-01-08T09:54:55.816626+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/8/2014 09:52' prior: 79753913! commentForCurrentUpdate ^ '12494 Replace usage of TimeStamp with DateAndTime for methods stamps https://pharo.fogbugz.com/f/cases/12494 12592 Text Embedded Morphs Broken https://pharo.fogbugz.com/f/cases/12592 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/8/2014 09:52'! script331 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1707.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.644.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-SvenVanCaekenberghe.27.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/8/2014 09:52'! update30678 "self new update30678" self withUpdateLog: '12494 Replace usage of TimeStamp with DateAndTime for methods stamps https://pharo.fogbugz.com/f/cases/12494 12592 Text Embedded Morphs Broken https://pharo.fogbugz.com/f/cases/12592 '. self loadTogether: self script331 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCVersionInfo methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/22/2013 16:30' prior: 25107310! timeStamp ^ DateAndTime date: date time: time! ! !DisplayScanner methodsFor: 'private' stamp: 'SeanDeNigris 1/7/2014 20:59' prior: 76061772! placeEmbeddedObject: anchoredMorphOrForm anchoredMorphOrForm relativeTextAnchorPosition ifNotNil:[:relativeTextAnchorPosition | anchoredMorphOrForm position: relativeTextAnchorPosition + (anchoredMorphOrForm owner textBounds origin x @ (lineY - morphicOffset y)). ^true ]. anchoredMorphOrForm isMorph ifTrue: [ anchoredMorphOrForm position: (destX@(lineY + line baseline - anchoredMorphOrForm height)) - morphicOffset ] ifFalse: [ self displayEmbeddedForm: anchoredMorphOrForm ]. destX := destX + anchoredMorphOrForm width + kern. ^ true! ! !MCDefinition methodsFor: 'comparing' stamp: 'SvenVanCaekenberghe 12/22/2013 16:28' prior: 24733543! fullTimeStamp ^ DateAndTime current! ! !MCMethodDefinition methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/22/2013 16:30' prior: 24848372! fullTimeStamp ^ DateAndTime fromMethodTimeStamp: timeStamp! ! !DateAndTime class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 12/22/2013 16:29'! fromMethodTimeStamp: aString | stream | stream := aString readStream. stream skipSeparators; skipTo: Character space. ^ self readSeparateDateAndTimeFrom: stream! ! !MessageList methodsFor: 'actions' stamp: 'SvenVanCaekenberghe 12/22/2013 16:33' prior: 25600186! addFirstVersion | systemVersion date association | systemVersion := SystemVersion new date: '1 January 1901'. date := DateAndTime new. association := Association key: systemVersion value: date. self versionsHistoryList add: association! ! !ChangeRecord methodsFor: 'access' stamp: 'SvenVanCaekenberghe 12/22/2013 16:37' prior: 18796068! timeStamp "Answer a TimeStamp that corresponds to my (text) stamp" | tokens | tokens := self stamp findTokens: Character separators. ^ tokens size > 2 ifTrue: [ [ | time date | date := Date fromString: (tokens at: tokens size - 1). time := Time fromString: tokens last. DateAndTime date: date time: time ] on: Error do: [ :ex | ex return: DateAndTime new ] ] ifFalse: [ DateAndTime new ]! ! !BitBltDisplayScanner methodsFor: 'displaying' stamp: 'SeanDeNigris 1/7/2014 20:59' prior: 76054131! displayEmbeddedForm: aForm aForm displayOn: bitBlt destForm at: destX @ (lineY + line baseline - aForm height) clippingBox: bitBlt clipRect rule: Form blend fillColor: Color white! ! TimeStamp class removeSelector: #fromMethodTimeStamp:! "Kernel"! "Monticello"! "RecentSubmissions"! "System-Changes"! "Text-Scanning"! ----End fileIn----! ----QUIT----2014-01-08T09:55:00.910767+01:00 Pharo.image priorSource: 29440378! ----STARTUP----2014-01-08T10:01:02.690941+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-08T10:01:02.932936+01:00 Pharo-30678.image priorSource: 29454640! ----STARTUP----2014-01-08T16:01:54.6881+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/8/2014 15:59' prior: 79772323! commentForCurrentUpdate ^ '12377 ZnHTTPSTests.>>testGetPharoVersion fails on Windows slave https://pharo.fogbugz.com/f/cases/12377 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/8/2014 15:59'! script332 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1707.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.72.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.29.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.644.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.306.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/8/2014 15:59'! update30679 "self new update30679" self withUpdateLog: '12377 ZnHTTPSTests.>>testGetPharoVersion fails on Windows slave https://pharo.fogbugz.com/f/cases/12377 '. self loadTogether: self script332 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ZnHTTPSTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/8/2014 13:53'! runningOnWindowsInriaCI | platform ci | platform := OSPlatform current. ci := platform environment at: #CI ifAbsent: [ '' ]. ^ platform isWindows and: [ ci = 'ci.inria.fr' ]! ! !ZnHTTPSTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 1/8/2014 15:20' prior: 39612484! testGetPharoVersion | client lastBuildVersion version | self ensureSocketStreamFactory. self isNativeSSLPluginPresent ifFalse: [ ^ self ]. self runningOnWindowsInriaCI ifTrue: [ ^ self ]. lastBuildVersion := (client := ZnClient new) beOneShot; get: 'https://ci.inria.fr/pharo/job/Pharo-2.0/lastSuccessfulBuild/api/xml?xpath=/*/description'. self assert: client isSuccess. self assert: (client response contentType matches: ZnMimeType applicationXml). self assert: client response contentLength > 0. self assert: lastBuildVersion notNil. self assert: lastBuildVersion isString. self assert: lastBuildVersion size > 0. version := (lastBuildVersion copyAfter: $>) copyUpTo: $<. self deny: version isEmpty! ! "Zinc-Zodiac"! ----End fileIn----! ----QUIT----2014-01-08T16:01:56.160578+01:00 Pharo.image priorSource: 29454837! ----STARTUP----2014-01-08T16:08:03.526252+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-08T16:08:03.768252+01:00 Pharo-30679.image priorSource: 29467333! ----STARTUP----2014-01-09T09:56:55.708308+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/9/2014 09:54' prior: 79786780! commentForCurrentUpdate ^ '12456 Split Komitter RemotesManager in 2 parts https://pharo.fogbugz.com/f/cases/12456 12513 Big number of Announcer instances https://pharo.fogbugz.com/f/cases/12513 12580 RPackageSet should not work as old PackageInfo https://pharo.fogbugz.com/f/cases/12580/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/9/2014 09:54'! script333 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1707.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.74.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.31.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.310.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/9/2014 09:54'! update30680 "self new update30680" self withUpdateLog: '12456 Split Komitter RemotesManager in 2 parts https://pharo.fogbugz.com/f/cases/12456 12513 Big number of Announcer instances https://pharo.fogbugz.com/f/cases/12513 12580 RPackageSet should not work as old PackageInfo https://pharo.fogbugz.com/f/cases/12580/'. self loadTogether: self script333 merge: false. Nautilus withAllSubclassesDo: #resetGroups. self flushCaches. ! ! "ScriptLoader30"! !PackageRemotesManager commentStamp: 'ChristopheDemarey 1/8/2014 16:53' prior: 0! I am an user interface used to link mcpackages and remotes PackageRemotesManager new openWithSpec! !RemotesManager commentStamp: 'ChristopheDemarey 1/8/2014 17:00' prior: 78477671! I am an user interface used to link mcpackages and remotes. RemotesManager new openWithSpec! !Nautilus class methodsFor: 'private' stamp: 'EstebanLorenzano 1/8/2014 15:36' prior: 45496956! buildGroupManagerFor: anInstance | holder | holder := GroupHolder new. (holder addADynamicClassGroupSilentlyNamed: 'Most Viewed Classes' block: [ anInstance recentClassesElements ]) removable: false. (holder addADynamicClassGroupSilentlyNamed: 'Last Modified Classes' block: [ self lastModifiedClasses ]) removable: false. (holder addADynamicGroupSilentlyNamed: 'Work' block: [ {} ]) removable: true; isFillable: true. ^ holder ! ! !Nautilus class methodsFor: 'cleanup' stamp: 'EstebanLorenzano 1/8/2014 15:58' prior: 75461205! cleanUp AbstractNautilusUI resetIconCaches. Nautilus resetCachedLastClasses. RecentClasses := nil. self withAllSubclassesDo: #resetGroups.! ! !Nautilus class methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/8/2014 17:38' prior: 27967572! groupsManagerFrom: anInstance groups ifNil: [ groups := WeakArray new: 1 ]. (groups first) ifNil: [ groups at: 1 put: (self buildGroupManagerFor: anInstance) ]. ^ groups first.! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/8/2014 14:32' prior: 31989076! packageNamed: aSymbol ^ self packageNamed: aSymbol ifAbsent: [ KeyNotFound signalFor: aSymbol ]! ! !RPackageOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/8/2014 14:35' prior: 70015055! packageNamed: aSymbol ifAbsent: errorBlock "Answer a package with exact name but ignoring case. It first looks for exact key for performance" ^ packages at: aSymbol asSymbol ifAbsent: [ self packageNamedIgnoreCase: aSymbol ifAbsent: errorBlock ] ! ! !RPackageOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 1/8/2014 14:32'! packageNamedIgnoreCase: aSymbol ifAbsent: aBlock "In case of extensions, I can need to take a package ignoring name" self packagesDo: [ :each | (each name sameAs: aSymbol) ifTrue: [ ^ each ] ]. aBlock value. ! ! !Morph methodsFor: 'announcements' stamp: 'ThierryGoubier 1/8/2014 14:35' prior: 74660197! announceDeleted self doAnnounce: (MorphDeleted morph: self). self submorphs do: #announceDeleted! ! !Morph methodsFor: 'announcements' stamp: 'ThierryGoubier 1/8/2014 14:36' prior: 74660404! announceKeyboardFocusChange: gotFocus | announcement | announcement := gotFocus ifTrue: [ MorphGotFocus morph: self ] ifFalse: [ MorphLostFocus morph: self ]. self doAnnounce: announcement. Morph announcer announce: announcement.! ! !Morph methodsFor: 'announcements' stamp: 'ThierryGoubier 1/8/2014 14:36' prior: 74660754! announceOpened self doAnnounce: (MorphOpened morph: self). self submorphs do: #announceOpened! ! !Morph methodsFor: 'announcements' stamp: 'ThierryGoubier 1/8/2014 14:40'! doAnnounce: anAnnouncement "Take care of not creating the announcer when announcing. If the announcer doesn't exist then this means nobody has expressed an interest in the message." "Do not override announce: for now, there is a need to refactor the announcements code in at least SystemWindow and ExpanderMorph." (self valueOfProperty: #announcer ifAbsent: [ ^ self ]) announce: anAnnouncement! ! !KomitterUI methodsFor: 'private' stamp: 'ChristopheDemarey 1/8/2014 16:53' prior: 78599377! openRemoteManager | view | view := PackageRemotesManager new packages: (tree roots collect: [ :e | self remoteNodeFor: e ]). view openDialogWithSpec centered; modalRelativeTo: self window! ! !PackageRemotesManager commentStamp: 'ChristopheDemarey 1/8/2014 16:53' prior: 79811008! I am an user interface used to link mcpackages and remotes PackageRemotesManager new openWithSpec! !PackageRemotesManager class methodsFor: 'specs' stamp: 'ChristopheDemarey 12/17/2013 16:44'! defaultSpec ^ SpecLayout composed newRow: [ :row | row add: #packages; addSplitter; add: #remotes ]; yourself! ! !PackageRemotesManager methodsFor: 'private' stamp: 'ChristopheDemarey 12/19/2013 17:32'! change: selected forRemote: remote | selectedPackage group | selectedPackage := packages selectedItem. selectedPackage ifNil: [ ^ self ]. group := selectedPackage content repositoryGroup. selected ifTrue: [ group addRepository: remote ] ifFalse: [ group removeRepository: remote ]! ! !PackageRemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:05'! doIfNotSilent: aBlock silent ifTrue: [ ^ self ]. aBlock value! ! !PackageRemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/4/2013 10:18'! initialExtent ^ 700@460! ! !PackageRemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/17/2013 17:24'! initialize super initialize. silent := false.! ! !PackageRemotesManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/4/2013 13:12'! initializeDialogWindow: aWindow aWindow toolbar: OkToolbar new! ! !PackageRemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/19/2013 16:36'! initializePresenter packages whenSelectedItemChanged: [ :item | self updateRemoteSelectionFrom: item ]. packages whenRootsChanged: [ :nodes | nodes ifNotEmpty: [ nodes first takeHighlight ] ]. remotes selectedChangedBlock: [:remote :selected | self doIfNotSilent: [ self change: selected forRemote: remote ]]. self whenBuiltDo: [ | nodes | nodes := packages roots. nodes ifNotEmpty: [ packages selectedItem: ( nodes first selected: true; takeHighlight; yourself ) ] ]! ! !PackageRemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/8/2014 16:57'! initializeWidgets packages := self instantiate: SearchableTree. remotes := self instantiate: RemotesManager. packages displayBlock: [ :each | each packageName ]. remotes selectedRemotes: self selectedPackageRepositories. self focusOrder add: packages; add: remotes! ! !PackageRemotesManager methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/8/2014 16:55'! packages ^ packages! ! !PackageRemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 11/30/2013 20:02'! packages: mcPackages packages roots: mcPackages! ! !PackageRemotesManager methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/8/2014 16:55'! remotes ^ remotes! ! !PackageRemotesManager methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/8/2014 16:55'! remotesTree ^ remotes remotes! ! !PackageRemotesManager methodsFor: 'private' stamp: 'ChristopheDemarey 1/8/2014 16:55'! selectedPackageRepositories ^ packages selectedItem ifNil: [ #() ] ifNotNil: [ :item | item content repositoryGroup repositories ].! ! !PackageRemotesManager methodsFor: 'private' stamp: 'BenjaminVanRyseghem 11/30/2013 22:04'! silentWhile: aBlock | oldSilent | oldSilent := silent. silent := true. aBlock ensure: [ silent := oldSilent ]! ! !PackageRemotesManager methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/1/2013 00:29'! title ^ 'Remotes manager'! ! !PackageRemotesManager methodsFor: 'private' stamp: 'ChristopheDemarey 12/19/2013 17:30'! updateRemoteSelectionFrom: aPackage | repositories | aPackage ifNil: [ repositories := #() ] ifNotNil: [ repositories := aPackage repositoryGroup repositories ]. self remotesTree roots do: [ :node | self silentWhile: [ node selected: (repositories includes: node content remote) ] ]! ! !RemotesManager commentStamp: 'ChristopheDemarey 1/8/2014 17:00' prior: 79811190! I am an user interface used to link mcpackages and remotes. RemotesManager new openWithSpec! !RemotesManager class methodsFor: 'specs' stamp: 'ChristopheDemarey 12/17/2013 14:50' prior: 78477835! defaultSpec ^ SpecLayout composed newColumn: [ :col | col newRow: [ :r | r newColumn: [ :c | ]; add: #editRemoteWidget width: self buttonHeight + 4; add: #removeRemoteWidget width: self buttonHeight + 4; add: #addRemoteWidget width: self buttonHeight ] height: self buttonHeight; add: #remotes ]; yourself! ! !RemotesManager methodsFor: 'private' stamp: 'ChristopheDemarey 1/8/2014 17:03' prior: 78480716! buildRoots ^ MCRepositoryGroup default repositories select: [ :each | each isCache not ] thenCollect: [ :each || remote | remote := each koRemote. TreeNodeModel new content: remote; hasContentToShow: true; selected: ( selectedRemotes includes: each ); whenSelectedChanged: [ :bool | self selected: each changed: bool ] ; yourself ]! ! !RemotesManager methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/17/2013 14:54' prior: 78410567! initialExtent ^ 400@260! ! !RemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/8/2014 17:03' prior: 78366677! initialize selectedRemotes := #(). super initialize ! ! !RemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/17/2013 15:16' prior: 78597060! initializePresenter remotes whenHighlightedItemChanged: [ :item | editRemote enabled: item notNil. removeRemote enabled: item notNil ]. ! ! !RemotesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/17/2013 14:52' prior: 78482533! initializeWidgets remotes := self newTree. addRemote := self newButton. removeRemote := self newButton. editRemote := self newButton. remotes beCheckList; removeOnlyLastSelected: true; autoMultiSelection: true; displayBlock: [ :item | item label ]; iconBlock: [ :item | item icon ]; roots: self buildRoots. addRemote icon: self addRemoteIcon; action: [ self addRemote ]; help: 'Add a new remote'. removeRemote icon: self removeRemoteIcon; action: [ self removeRemote ]; enabled: false; help: 'Remote the selected remote'. editRemote icon: self editRemoteIcon; action: [ self editRemote ]; enabled: false; help: 'Edit the selected remote'. self focusOrder add: remotes; add: removeRemote; add: addRemote! ! !RemotesManager methodsFor: 'private' stamp: 'ChristopheDemarey 12/19/2013 16:40'! selected: aRepository changed: selected selectedChangedBlock ifNotNil: [ selectedChangedBlock cull: aRepository cull: selected ] ! ! !RemotesManager methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/19/2013 13:11'! selectedChangedBlock: aBlock selectedChangedBlock := aBlock! ! !RemotesManager methodsFor: 'protocol' stamp: 'ChristopheDemarey 1/8/2014 17:03'! selectedRemotes: aRemoteList selectedRemotes := aRemoteList! ! !RPackageSet methodsFor: 'initialization' stamp: 'EstebanLorenzano 1/8/2014 15:45' prior: 32059822! initialize: aString "We fill RPackageSet with a collection of matching RPackage. Since this is accessed a lot of times, we optimized the code for speed on resolution, and now we have what you see. This code should be something like this: packageName := aString. packages := RPackageOrganizer default packages select: [ :each | each name = packageName or: [ each name beginsWith: packageName, '-' ] ] sadly, that's incredible slow, so, we changed. BEWARE: Don't change this code without paying attention to speed. " self initialize. packageName := aString asSymbol. packages := { RPackage organizer packageNamed: aString ifAbsent: [ (RPackage named: aString) register ] }. "| size separatorIndex first | self initialize. packageName := aString asSymbol. size := packageName size. first := packageName at: 1. separatorIndex := size + 1. packages := RPackage organizer packages select: [ :each | | eachSize | eachSize := each name size. (size == eachSize and: [ packageName == each name ]) or: [ eachSize > size and: [ (((each name at: separatorIndex) == $-) and: [ (each name at: 1) == first ]) and: [ (each name beginsWith: packageName) ] ] ] ]"! ! RemotesManager removeSelector: #updateRemoteSelectionFrom:! RemotesManager removeSelector: #silentWhile:! RemotesManager removeSelector: #packages:! RemotesManager removeSelector: #packages! RemotesManager removeSelector: #doIfNotSilent:! RemotesManager removeSelector: #change:forRemote:! "Komitter"! "Morphic-Core"! "Nautilus"! "RPackage-Core"! ----End fileIn----! ----QUIT----2014-01-09T09:56:59.822411+01:00 Pharo.image priorSource: 29467530! ----STARTUP----2014-01-09T10:02:44.384444+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-09T10:02:44.63445+01:00 Pharo-30680.image priorSource: 29491786! ----STARTUP----2014-01-09T12:17:44.080888+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 1/9/2014 11:32' prior: 79799475! commentForCurrentUpdate ^ '12604 regression on metacello long tests https://pharo.fogbugz.com/f/cases/12604 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 1/9/2014 11:33'! script334 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-StephaneDucasse.1.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1707.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.74.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.31.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.312.mcz RPackage-SystemIntegration-StephaneDucasse.197.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.191.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.171.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.53.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 1/9/2014 12:11'! update30681 "self new update30681" Author useAuthor: 'EstebanLorenzano' during: [ RPackageOrganizer compile: 'packageNamedIgnoreCase: aSymbol ifAbsent: aBlock "In case of extensions, I can need to take a package ignoring name" self packagesDo: [ :each | (each name sameAs: aSymbol) ifTrue: [ ^ each ] ]. ^ aBlock value.' classified: 'private' ]. self withUpdateLog: '12604 regression on metacello long tests https://pharo.fogbugz.com/f/cases/12604 '. self loadTogether: self script334 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 1/9/2014 12:17' prior: 79813048! packageNamedIgnoreCase: aSymbol ifAbsent: aBlock "In case of extensions, I can need to take a package ignoring name" self packagesDo: [ :each | (each name sameAs: aSymbol) ifTrue: [ ^ each ] ]. ^ aBlock value.! ! "RPackage-Core"! ----End fileIn----! ----QUIT----2014-01-09T12:17:45.586884+01:00 Pharo.image priorSource: 29491983! ----STARTUP----2014-01-09T12:23:05.348609+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-09T12:23:05.602605+01:00 Pharo-30681.image priorSource: 29504046! ----STARTUP----2014-01-10T10:06:56.526772+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/10/2014 10:03' prior: 79823931! commentForCurrentUpdate ^ '12606 moving classes from A tag B to package A-B broken https://pharo.fogbugz.com/f/cases/12606 12607 Be able to filter dirty packages to display in Komitter https://pharo.fogbugz.com/f/cases/12607 12609 Remove the last non unit test users of TimeStamp https://pharo.fogbugz.com/f/cases/12609 12608 remove unnecesary crLog in SpecDebugger https://pharo.fogbugz.com/f/cases/12608'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/10/2014 10:04'! script335 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1707.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.31.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.312.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.192.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/10/2014 10:04'! update30682 "self new update30682" self withUpdateLog: '12606 moving classes from A tag B to package A-B broken https://pharo.fogbugz.com/f/cases/12606 12607 Be able to filter dirty packages to display in Komitter https://pharo.fogbugz.com/f/cases/12607 12609 Remove the last non unit test users of TimeStamp https://pharo.fogbugz.com/f/cases/12609 12608 remove unnecesary crLog in SpecDebugger https://pharo.fogbugz.com/f/cases/12608'. self loadTogether: self script335 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemAnnouncement methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/9/2014 20:35' prior: 51480731! setTimeStamp timeStamp := DateAndTime current! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/9/2014 15:21'! packageMatchingExtensionName: aString includingClass: aClass | package categoryName | categoryName := aString. package := self packageMatchingExtensionName: categoryName. [ package includesClass: aClass ] whileFalse: [ (categoryName includes: $-) ifFalse: [ self error: 'Class not categorized!!' ]. categoryName := categoryName copyUpToLast: $-. package := self packageMatchingExtensionName: categoryName ]. ^ package! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/9/2014 15:18' prior: 74373754! systemClassRecategorizedActionFrom: ann | class newRPackage oldRPackage newCategoryName oldCategoryName| class := ann classAffected. newCategoryName := ann newCategory asSymbol. oldCategoryName := ann oldCategory asSymbol. oldRPackage := self packageMatchingExtensionName: oldCategoryName includingClass: class. newRPackage := (self packageMatchingExtensionName: newCategoryName) ifNil: [ self registerPackage: (self packageClass named: newCategoryName) ]. oldRPackage removeClass: class. newRPackage importClass: class. newRPackage addClassDefinition: class toClassTag: class category asSymbol. newRPackage importClass: class theMetaClass . SystemAnnouncer uniqueInstance classRepackaged: class from: oldRPackage to: newRPackage.! ! !KomitStagingArea class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 1/9/2014 15:05' prior: 77759056! current ^ self currentFilteredBy: [ true ]! ! !KomitStagingArea class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 1/9/2014 15:05'! currentFilteredBy: aFilterBlock ^ current ifNil: [ | dirtyPackages | dirtyPackages := MCWorkingCopy allManagers select: [ :workingCopy | workingCopy needsSaving and: (aFilterBlock cull: workingCopy) ] thenCollect: [ :workingCopy | (KomitPackage package: workingCopy package) flush; yourself ]. current := super new packages: dirtyPackages; yourself ]! ! !SpecDebugger methodsFor: 'updating widgets' stamp: 'EstebanLorenzano 1/9/2014 19:06' prior: 69330909! updateCodeFromContext: aContext aContext ifNil: [ self code aboutToStyle: false; text: ''; behavior: nil; setSelection: (1 to: 0) ] ifNotNil: [ |selectionInterval| selectionInterval := self session selectedCodeRangeForContext: aContext. self code aboutToStyle: true; text: aContext sourceCode; doItReceiver: aContext home receiver; doItContext: aContext; behavior: aContext home receiver class; setSelection: selectionInterval ]! ! !Komitter class methodsFor: 'protocol' stamp: 'ChristopheDemarey 1/9/2014 15:23'! openAndCommitToMonticelloWorkingCopiesFilteredBy: aFilterBlock | stagingArea | KomitStagingArea resetCurrent. stagingArea := KomitStagingArea currentFilteredBy: aFilterBlock. ^ self new stagingArea: stagingArea; openAndCommitToMonticello; yourself! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'SvenVanCaekenberghe 1/9/2014 20:34' prior: 79310173! changeSetMenu1NewGeneration: aMenuModel | menuItem | menuItem := MenuItemModel new name: [ DateAndTime now asString ]; enabled: [ DateAndTime now seconds even ]; yourself. aMenuModel addMenuItem: menuItem ! ! !NavigationHistory methodsFor: 'protocol' stamp: 'SvenVanCaekenberghe 1/9/2014 20:34' prior: 75670872! basicAdd: anEntry ( storage isEmpty not and: [ storage last = anEntry ] ) ifTrue: [ ^ self ]. anEntry = self current key ifTrue: [ ^ self ]. self checkSize. index := index +1. index > storage size ifTrue: [ storage addLast: (anEntry -> DateAndTime now)] ifFalse: [ storage := storage copyFrom: 1 to: index. storage at: index put: (anEntry -> DateAndTime now)]! ! !NavigationHistory methodsFor: 'protocol' stamp: 'SvenVanCaekenberghe 1/9/2014 20:35' prior: 75674121! replaceCurrentWith: anEntry "Change the current history item to the given object" storage at: index put: (anEntry -> DateAndTime now)! ! "History"! "Komitter"! "RPackage-SystemIntegration"! "Spec-Debugger"! "Spec-Tools"! "System-Announcements"! ----End fileIn----! ----QUIT----2014-01-10T10:06:59.790772+01:00 Pharo.image priorSource: 29504243! ----STARTUP----2014-01-10T10:12:26.971537+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-10T10:12:27.219534+01:00 Pharo-30682.image priorSource: 29520591! ----STARTUP----2014-01-10T13:30:54.120963+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/10/2014 13:25' prior: 79836189! commentForCurrentUpdate ^ '12611 Update the DateAndTime class comment a bit https://pharo.fogbugz.com/f/cases/12611 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/10/2014 13:25'! script336 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.337.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.689.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-MarcusDenker.31.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.312.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.192.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.999.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/10/2014 13:25'! update30683 "self new update30683" self withUpdateLog: '12611 Update the DateAndTime class comment a bit https://pharo.fogbugz.com/f/cases/12611 '. self loadTogether: self script336 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DateAndTime commentStamp: 'SvenVanCaekenberghe 1/10/2014 11:04' prior: 42212758! I am DateAndTime. I represent a point in time or timestamp as defined by ISO 8601. I am a Magnitude. I have nanosecond precision. I am TimeZone aware. I have zero duration. DateAndTime now. DateAndTime now asUTC rounded. DateAndTime fromString: '1969-07-20T20:17:40.123+02:00'. DateAndTime fromString: '1969-07-20T20:17:40Z'. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. Always positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is often zero but it defined for full ISO compliance and is suitable for timestamping. ! !DateAndTime commentStamp: 'SvenVanCaekenberghe 1/10/2014 11:04' prior: 79863894! I am DateAndTime. I represent a point in time or timestamp as defined by ISO 8601. I am a Magnitude. I have nanosecond precision. I am TimeZone aware. I have zero duration. DateAndTime now. DateAndTime now asUTC rounded. DateAndTime fromString: '1969-07-20T20:17:40.123+02:00'. DateAndTime fromString: '1969-07-20T20:17:40Z'. My implementation uses three SmallIntegers and a Duration: julianDayNumber - julian day number (starting at midnight UTC rather than noon GMT). seconds - number of seconds since midnight UTC. Always positive, between 0 and 86399. nanos - the number of nanoseconds since the second. Always positive, between 0 and 999999999. offset - duration from UTC. The offset is used to print the date and time in a local time zone, but the date and time are handled in UTC internally. The nanosecond attribute is often zero but it defined for full ISO compliance and is suitable for timestamping. ! ----End fileIn----! ----QUIT----2014-01-10T13:30:57.555594+01:00 Pharo.image priorSource: 29520788! ----STARTUP----2014-01-10T13:36:36.483358+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-10T13:36:36.735354+01:00 Pharo-30683.image priorSource: 29534220! ----STARTUP----2014-01-10T21:43:53.564108+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/10/2014 21:40' prior: 79852741! commentForCurrentUpdate ^ ' 10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 12614 Update LRUCache Implementation - Step 1A - Copy LRUCache to OldLRUCache https://pharo.fogbugz.com/f/cases/12614 12612 Do not show image save mouse icon when quit with no save https://pharo.fogbugz.com/f/cases/12612 12617 unskip a Fuel test that was disabled when bug hunting... https://pharo.fogbugz.com/f/cases/12617 '! ! !ScriptLoader methodsFor: 'cleaning' stamp: 'MarcusDenker 1/10/2014 16:16' prior: 32736992! flushCaches MCFileBasedRepository flushAllCaches. MCDefinition clearInstances. ImageCleaner cleanUpForRelease. Smalltalk garbageCollect.! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/10/2014 21:40'! script337 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.67.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.242.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.312.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-StephaneDucasse.268.mcz Spec-Debugger-MarcusDenker.192.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-StephaneDucasse.105.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1002.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1385.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/10/2014 21:40'! update30684 "self new update30684" self withUpdateLog: ' 10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 12614 Update LRUCache Implementation - Step 1A - Copy LRUCache to OldLRUCache https://pharo.fogbugz.com/f/cases/12614 12612 Do not show image save mouse icon when quit with no save https://pharo.fogbugz.com/f/cases/12612 12617 unskip a Fuel test that was disabled when bug hunting... https://pharo.fogbugz.com/f/cases/12617 '. self loadTogether: self script337 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OldLRUCache commentStamp: 'SvenVanCaekenberghe 1/10/2014 16:48' prior: 0! I'm a cache of values, given a key I return a Value from the cache or from the factory. Temporary copy while replacing the implementation.! !FLMigrationTest methodsFor: 'tests-automatic' stamp: 'MarcusDenker 1/10/2014 16:19' prior: 79389464! testChangeInSuperclass "Tests that serializer tolarates when there is a change in the superclass between serialization and materialization" | aClass aClassSubclass instance materializedInstance | aClass := self newClassWithInstanceVariableNames: 'a b c' superclass: Object. aClassSubclass := self newClassWithInstanceVariableNames: 'd e' superclass: aClass. instance := aClassSubclass new. instance instVarNamed: 'a' put: $A. instance instVarNamed: 'b' put: $B. instance instVarNamed: 'c' put: $C. instance instVarNamed: 'd' put: $D. instance instVarNamed: 'e' put: $E. self serialize: instance. aClass removeInstVarNamed: 'a'. aClass removeInstVarNamed: 'b'. aClass addInstVarNamed: 'x'. aClassSubclass superclass: aClass. materializedInstance := self materialized. self assert: $D = (materializedInstance instVarNamed: 'd'). self assert: $E = (materializedInstance instVarNamed: 'e'). self should: [materializedInstance instVarNamed: 'a'] raise: Error. self should: [materializedInstance instVarNamed: 'b'] raise: Error. self assert: $C = (materializedInstance instVarNamed: 'c'). self assert: (materializedInstance instVarNamed: 'x') isNil. ! ! !MetacelloConfigTemplate class methodsFor: 'private' stamp: 'DaleHenrichs 11/2/2010 16:51' prior: 72418624! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !MetacelloConfigTemplate class methodsFor: 'private' stamp: 'DaleHenrichs 11/4/2010 10:23' prior: 72419098! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !MetacelloConfigTemplate methodsFor: 'baselines' stamp: 'CamilloBruni 5/9/2013 13:01'! baseline10: spec "Baselines are used by convention in Metacello and essentially are nothing else than normal versions. Name the baseline after the first version it was introduced. In this case 1.0-baseline was introduced the first time with the 1.0 version defined in the #version10 method. Metacello only uses the following tag to figure out the name of this baseline:" "Using #common makes this dependency declaration available for all Smalltalks. If you need more fine-grained control you can add several #for:do: sections for other releases." spec for: #common do: [ spec blessing: #baseline. "specify the default repository for your project's packages" spec repository: 'http://smalltalkhub.com/mc/JohnDoe/MyProject/main'. "use separate methods for external projects" self fuelMetalevel: spec; fileSystemLegacy: spec. "specify the dependencies between packages and projects" spec "a package without dependencies:" package: 'MyProject-Core'; package: 'MyProject-Tests' with: [ "Specfiy dependencies using the #requires: directive, you can refer to any name here, in this case to an external project" spec requires: #('MyProject-Core' 'FuelMetalevel' 'FileSystemLegacy')]. "using groups certain packages and projects can be loaded conditionally" spec "load the tests by default" group: 'default' with: #('core' 'test'); group: 'test' with: #('MyProject-Tests'); group: 'core' with: #('MyProject-Core')]! ! !MetacelloConfigTemplate methodsFor: 'accessing' stamp: 'SeanDeNigris 7/12/2012 09:41' prior: 72421818! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes" ^ #().! ! !MetacelloConfigTemplate methodsFor: 'tags' stamp: 'CamilloBruni 5/9/2013 12:30'! development: spec "By convention the development branch should point to a fixed version that is regularly updated and might contain unstable code. The name used by Metacello is only defined by the following pragma:" "For the development tag refer to a fixed version which you update if you commit new code. Note that you can refer here to any other version name from this configuration" spec for: #'common' version: 'dev'. ! ! !MetacelloConfigTemplate methodsFor: 'external projects' stamp: 'CamilloBruni 5/9/2013 13:01'! fileSystemLegacy: spec "This is an example of an external project which does not have a configuration yet. Note that the package name is only used in the Metacello configuration and does not have be exactly the same as the Monticello project/version name." spec package: 'FileSystemLegacy' with: [ spec repository: 'http://smalltalkhub.com/mc/PharoExtras/FileSystemLegacy/main'; "if you do not specify a version, automatically the newest version is chose." file: 'FileSystem-Legacy-JohanBrichau.2' ]! ! !MetacelloConfigTemplate methodsFor: 'external projects' stamp: 'CamilloBruni 5/9/2013 12:13'! fuelMetalevel: spec "Specify a dependency on an external project which has it's own configuration. The given project name can be chosen freely, for simplicity use the same name as the configuration or the conditional group you load." spec project: 'FuelMetalevel' with: [ spec repository: 'http://ss3.gemstone.com/ss/Fuel'; className: 'ConfigurationOfFuel'; "if you want to load by default a special group usse the #loads: message plus a group name of the external configuration" loads: #FuelMetalevel ].! ! !MetacelloConfigTemplate methodsFor: 'accessing' stamp: 'CamilloBruni 1/10/2014 17:25' prior: 72422181! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" project := MetacelloMCProject new projectAttributes: self customProjectAttributes. (Smalltalk at: #MetacelloVersionConstructor) on: self project: project. project loadType: #linear. "change to #atomic if desired" project ]! ! !MetacelloConfigTemplate methodsFor: 'tags' stamp: 'CamilloBruni 5/9/2013 12:18'! stable: spec "Symbolic versions can be used to introduce an indirection to a version number. The real name used by Metacello is only defined by the following pragma:" "If another version is stable for a differen Smalltalk use a specific name" "spec for: #'pharo1.4.x' version: '0.9'" "Specfiy which exact version you want to load" spec for: #'common' version: '1.0'. ! ! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'CamilloBruni 5/9/2013 13:02'! version10: spec "The name for this version is solely defined by the following pragma:" "Baselines are used to define more complex setups for your project. If you want to use external projects and have fine-graind control of the dependencies between packages use the #imports: part. See the #baseline10: for more details." "Using #for:do: with the #common release specifier the following version declaration is valid for all platforms." spec for: #common do: [ spec description: 'Version 1.0 the current stable release'; author: 'John Doe'; timestamp: '2013-05-01'. "Specify the versions for each package and external project defined in the baseline, here the 1.0-baseline defined in the baseline10 method." spec "For standard Monticello packages simply refere to the full version name without the extension:" package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.52'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.73'; "External projects versions are specified using #project:with:. Note the project name referes to the name used in the Metacello declaration. FuelMetalevel is defined in the #fuelMetalevel: method." project: 'FuelMetalevel' with: #stable ]. "If you want to specify different version on other platforms add another #for:do: block with a different version identifier."! ! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'CamilloBruni 5/9/2013 13:02'! versionDevelopment: spec "version specification for the current development branch, see #version10 for a complete explanation of a version declaration. In this case the 'dev' version uses the same baselin as version '1.0':" "Update this configuration regulrarly with intermediate releases. If a version is more stable or should stay accessible copy this 'dev' definition and give it a proper version name on its own. For example, in this case you might want to split a new version '1.1' by copying over this definition." spec for: #common do: [ spec description: 'Development Version'; author: 'John Doe'; timestamp: '2013-05-09'. spec package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.152'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.173'; "note that for the 'dev' version we rely on the #development version of the external FuleMetalevel project" project: 'FuelMetalevel' with: #development ].! ! !WorldState class methodsFor: 'world menu items' stamp: 'MarcusDenker 1/10/2014 15:43' prior: 75348509! quitSession | save | save := Smalltalk tools userManager canSaveImage ifFalse: [ false ] ifTrue: [ self confirm: 'Save changes before quitting?' translated orCancel: [ ^ self ] ]. save ifTrue: [Cursor write showWhile: [ Smalltalk snapshot: true andQuit: true ]] ifFalse: [Smalltalk snapshot: false andQuit: true] ! ! !OldLRUCache commentStamp: 'SvenVanCaekenberghe 1/10/2014 16:48' prior: 79878436! I'm a cache of values, given a key I return a Value from the cache or from the factory. Temporary copy while replacing the implementation.! !OldLRUCache class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! size: aNumber factory: aBlock "answer an instance of the receiver" ^ self new initializeSize: aNumber factory: aBlock! ! !OldLRUCache class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! test " LRUCache test " | c | c := LRUCache size: 5 factory: [:key | key * 2]. c at: 1. c at: 2. c at: 3. c at: 4. c at: 1. c at: 5. c at: 6. c at: 7. c at: 8. c at: 1. ^ c! ! !OldLRUCache class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! test2 " LRUCache test2. Time millisecondsToRun:[LRUCache test2]. MessageTally spyOn:[LRUCache test2]. " | c | c := LRUCache size: 600 factory: [:key | key * 2]. 1 to: 6000 do: [:each | c at: each]. ^ c! ! !OldLRUCache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! at: aKey "answer the object for aKey, if not present in the cache creates it. Clone the factory block before calling in case of multiple processes!!" | element keyHash | calls := calls + 1. keyHash := aKey hash. 1 to: size do: [:index | element := values at: index. (keyHash = (element at: 2) and: [aKey = (element at: 1)]) ifTrue: ["Found!!" hits := hits + 1. values replaceFrom: 2 to: index with: (values first: index - 1). values at: 1 put: element. ^ element at: 3]]. "Not found!!" element := {aKey. keyHash. factory shallowCopy value: aKey}. values replaceFrom: 2 to: size with: values allButLast. values at: 1 put: element. ^ element at: 3! ! !OldLRUCache methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! initializeSize: aNumber factory: aBlock "initialize the receiver's size and factory" size := aNumber. values := Array new: aNumber withAll: {nil. nil. nil}. factory := aBlock. calls := 0. hits := 0! ! !OldLRUCache methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 1/10/2014 16:47'! printOn: aStream "Append to the argument, aStream, a sequence of characters that identifies the receiver." aStream nextPutAll: self class name; nextPutAll: ' size:'; nextPutAll: size asString; nextPutAll: ', calls:'; nextPutAll: calls asString; nextPutAll: ', hits:'; nextPutAll: hits asString; nextPutAll: ', ratio:'. calls = 0 ifTrue: [aStream nextPutAll: 0 asFloat asString] ifFalse: [aStream nextPutAll: (hits / calls) asFloat asString]! ! "FuelTests"! "Metacello-MC"! "Morphic-Core"! "System-Support"! ----End fileIn----! ----QUIT----2014-01-10T21:44:03.050109+01:00 Pharo.image priorSource: 29534417! ----STARTUP----2014-01-10T21:49:09.523772+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-10T21:49:09.79377+01:00 Pharo-30684.image priorSource: 29559713! ----STARTUP----2014-01-11T13:46:55.617319+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/11/2014 13:42' prior: 79866370! commentForCurrentUpdate ^ '12315 Menu World/System/Switch User raises Error and MNU. https://pharo.fogbugz.com/f/cases/12315 12620 Issue in AbstractTool https://pharo.fogbugz.com/f/cases/12620 12413 ButtonModel should have shortcut support https://pharo.fogbugz.com/f/cases/12413 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/11/2014 13:43'! script338 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.246.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.648.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.312.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1002.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/11/2014 13:43'! update30685 "self new update30685" self withUpdateLog: '12315 Menu World/System/Switch User raises Error and MNU. https://pharo.fogbugz.com/f/cases/12315 12620 Issue in AbstractTool https://pharo.fogbugz.com/f/cases/12620 12413 ButtonModel should have shortcut support https://pharo.fogbugz.com/f/cases/12413 '. self loadTogether: self script338 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ButtonModel commentStamp: '' prior: 69423515! A ButtonComposableModel is an applicative model which handle a basic button. self example! !KMPlatformSpecificKeyCombination methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 12/11/2013 15:04'! currentCharacter ^ (self platform = #all or: [ self platform = OSPlatform current platformFamily ]) ifTrue: [ self shortcut currentCharacter ] ifFalse: [ nil ]! ! !KMKeyCombinationChoice methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 12/11/2013 15:03'! currentCharacter | candidates | candidates := shortcuts collect: [ :each | each currentCharacter ] thenSelect: [ :each | each isNotNil ]. ^ candidates ifEmpty: [ nil ] ifNotEmpty: [ candidates first ]! ! !PluggableButtonMorph methodsFor: 'updating' stamp: 'BenjaminVanRyseghem 12/11/2013 15:18' prior: 45494616! update: aParameter |state| aParameter ifNil: [^self]. getLabelSelector ifNotNil: [ aParameter == getLabelSelector ifTrue: [ self label: (model perform: getLabelSelector) ]]. state := self getModelState. (state ~= (self valueOfProperty: #lastState) or: [ getStateSelector isNil and: [aParameter == #onOffColor]]) ifTrue: [self color: self colorToUse. self setProperty: #lastState toValue: state]. aParameter == getEnabledSelector ifTrue: [^self enabled: (model perform: getEnabledSelector)]. getColorSelector ifNotNil: [ | cc | color = (cc := model perform: getColorSelector) ifFalse: [ color := cc. self onColor: color offColor: color. self changed ]]. aParameter isArray ifFalse: [ ^ self ]. aParameter size == 2 ifFalse: [ ^ self ]. aParameter first = #askBeforeChanging: ifTrue: [ self askBeforeChanging: aParameter second ]! ! !KMModifiedKeyCombination methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 12/11/2013 14:58'! currentCharacter ^ self character key! ! !KMKeyCombination methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/10/2014 20:32'! currentCharacter ^ ''! ! !KMSingleKeyCombination methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/10/2014 20:31'! currentCharacter ^ key! ! !ButtonModel commentStamp: '' prior: 79903334! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/11/2013 14:56'! addShortcutTipFor: aString ^ self addShortcutTipFor: self shortcutCharacter on: aString! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/11/2013 14:56'! addShortcutTipFor: aCharacter on: aString | index text | text := aString asText. aCharacter ifNil: [ ^ text ]. index := aString asLowercase indexOf: aCharacter asLowercase. index isZero ifTrue: [ ^ text ]. ^ text addAttribute: (TextEmphasis underlined) from: index to: index; yourself! ! !ButtonModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 12/11/2013 18:14'! ensureKeyBindingsFor: widget super ensureKeyBindingsFor: widget. self shortcut ifNotNil: [ :s | self registerShortcut: s ]! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 12/11/2013 18:21' prior: 69425635! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := false asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. shortcut := nil asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. shortcut whenChangedDo: [ :newShortcut :oldShortcut | self unregisterShortcut: oldShortcut. self registerShortcut: newShortcut. self changed: #label ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !ButtonModel methodsFor: 'morphic' stamp: 'BenjaminVanRyseghem 12/11/2013 14:42' prior: 76546677! label ^ self addShortcutTipFor: labelHolder value! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/11/2013 18:27'! registerShortcut: newShortcut | receiver | receiver := self window. (receiver isNil or: [ newShortcut isNil ]) ifTrue: [ ^ self ]. receiver model bindKeyCombination: newShortcut toAction: [ self performAction ]! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/11/2013 14:56'! shortcut ^ shortcut value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 12/11/2013 14:56'! shortcut: aShortcut shortcut value: aShortcut! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/11/2013 15:05'! shortcutCharacter ^ self shortcut ifNil: [ nil ] ifNotNil: [ :s | s currentCharacter ]! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 12/11/2013 18:27'! unregisterShortcut: oldShortcut | receiver | receiver := self window. (receiver isNil or: [ oldShortcut isNil ]) ifTrue: [ ^ self ]. receiver model removeKeyCombination: oldShortcut ! ! !UserManager class methodsFor: 'menu' stamp: 'MarcusDenker 1/11/2014 09:55' prior: 37845258! switchUsers: aBuilder "I build a menu" "" "md: disabled because it is broken for all of Pharo3 development." (aBuilder item: #'Switch User') parent: #System; order: 1.5; icon: (Smalltalk ui icons iconNamed: #userIcon); action: [ self default openSwitchUsers ]! ! !AbstractTool methodsFor: 'class' stamp: 'BenjaminVanRyseghem 1/10/2014 15:24' prior: 17442420! addCategoryIn: aClass ^ self addCategoryIn: aClass before: nil! ! !AbstractTool methodsFor: 'class' stamp: 'BenjaminVanRyseghem 1/10/2014 15:25' prior: 39607579! addCategoryIn: aClass before: aCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | newName | newName := self class requestProtocolNameFor: aClass initialAnswer: ''. newName ifNil: [ ^ nil ]. newName := newName asSymbol. aClass organization addCategory: newName before: aCategory. ^ newName! ! MorphicMenuItemAdapter removeSelector: #shortcutFromString! "KeyChain"! "Morphic-Base"! "Spec-Core"! "Spec-Debugger"! "Spec-MorphicAdapters"! "Tools"! ----End fileIn----! ----QUIT----2014-01-11T13:47:07.175317+01:00 Pharo.image priorSource: 29559910! ----STARTUP----2014-01-11T13:52:44.318951+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-11T13:52:44.576945+01:00 Pharo-30685.image priorSource: 29578079! ----STARTUP----2014-01-11T19:41:53.52115+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/11/2014 19:38' prior: 79891855! commentForCurrentUpdate ^ '12623 add #linesOfCode to RPackage https://pharo.fogbugz.com/f/cases/12623 12621 no new history entries after selecting a group https://pharo.fogbugz.com/f/cases/12621 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/11/2014 19:38'! script339 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.106.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.246.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.999.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.314.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1002.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/11/2014 19:39'! update30686 "self new update30686" self withUpdateLog: '12623 add #linesOfCode to RPackage https://pharo.fogbugz.com/f/cases/12623 12621 no new history entries after selecting a group https://pharo.fogbugz.com/f/cases/12621 '. self loadTogether: self script339 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Nautilus methodsFor: 'history' stamp: 'NicolaiHess 1/11/2014 00:21' prior: 75215378! package: aPackage class: aClass category: aCategory method: aMethod self selectedPackage: aPackage; selectedClass: aClass; selectedCategory: aCategory; selectedMethod: aMethod. self selectedClass notNil ifTrue:[self registerHistoryNewEntry ]! ! !Nautilus methodsFor: 'history' stamp: 'NicolaiHess 1/11/2014 00:21' prior: 75215698! registerHistoryNewEntry | lastEntry wrapper | self browsingHistory isPaused ifTrue: [ ^ self ]. wrapper := NautilusHistoryEntry with: self. self browsingHistory entries ifNotEmpty: [ :entries | lastEntry := entries last key. ( lastEntry selectedClass isNil or: [ ( wrapper selectedClass notNil and: [ wrapper selectedMethod = lastEntry selectedMethod and: [ wrapper selectedClass theNonMetaClass = lastEntry selectedClass theNonMetaClass ] ] ) ] ) ifTrue: [ ^ self ] ]. self browsingHistory add: wrapper. self triggerEvent: #historyChanged.! ! !RPackage methodsFor: 'statistics' stamp: 'MarcusDenker 1/11/2014 16:36'! linesOfCode "An approximate measure of lines of code. Includes comments, but excludes blank lines." ^self methods inject: 0 into: [:sum :each | sum + each linesOfCode]! ! "Nautilus"! "RPackage-Core"! ----End fileIn----! ----QUIT----2014-01-11T19:42:00.397268+01:00 Pharo.image priorSource: 29578276! ----STARTUP----2014-01-11T19:47:37.785512+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-11T19:47:38.049511+01:00 Pharo-30686.image priorSource: 29591153! ----STARTUP----2014-01-12T11:43:43.523732+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/12/2014 00:28' prior: 79910228! commentForCurrentUpdate ^ '12615 Update LRUCache Implementation - Step 1B - Changed existing instances of LRUCache to OldLRUCache https://pharo.fogbugz.com/f/cases/12615 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/12/2014 00:29'! script340 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.110.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.248.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1001.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.314.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1002.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.669.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/12/2014 00:29'! update30687 "self new update30687" self withUpdateLog: '12615 Update LRUCache Implementation - Step 1B - Changed existing instances of LRUCache to OldLRUCache https://pharo.fogbugz.com/f/cases/12615 '. self loadTogether: self script340 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GradientFillStyle class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/11/2014 10:10' prior: 23014784! initPixelRampCache "Create an LRUCache to use for accessing pixel ramps. When a new pixel ramp is needed, a temporary GradientFillStyle is created so that it can be used to create a new pixel ramp" ^ PixelRampCache := OldLRUCache size: 32 factory: [:key| (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512] ! ! !GradientFillStyle class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/11/2014 10:13'! initialize self initPixelRampCache ! ! !GradientFillStyle class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/11/2014 10:11' prior: 23015222! pixelRampCache "Allow access to my cache of pixel ramps." ^ PixelRampCache ifNil: [ self initPixelRampCache ]! ! !GradientFillStyle methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 1/11/2014 10:12' prior: 23010056! pixelRamp "Compute a pixel ramp, and cache it for future accesses" ^ pixelRamp ifNil: [ "Ask my cache for an existing instance or to create one" pixelRamp := self class pixelRampCache at: colorRamp ]! ! !UITheme methodsFor: 'scrollbars' stamp: 'SvenVanCaekenberghe 1/11/2014 10:09' prior: 54069559! createArrowImagesCache "creates the cache to store the arrow forms" ^ OldLRUCache size: 40 factory: [:key | "" self scrollbarArrowOfDirection: key first size: key second color: key third]! ! !UITheme methodsFor: 'scrollbars' stamp: 'SvenVanCaekenberghe 1/11/2014 10:09' prior: 54070865! createBoxImagesCache "creates the cache to store the arrow forms" ^ OldLRUCache size: 20 factory: [:key | self createBoxOfSize: key first color: key second]! ! !ScrollBar class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/11/2014 10:10' prior: 32826692! initialize "ScrollBar initialize" "Touched to force execution" self initializeImagesCache! ! "Balloon"! "Morphic-Base"! "Polymorph-Widgets"! ----End fileIn----! ----End fileIn----! ----End fileIn----! ----QUIT----2014-01-12T11:44:05.221738+01:00 Pharo.image priorSource: 29591350! ----STARTUP----2014-01-12T11:49:37.738062+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-12T11:49:38.006058+01:00 Pharo-30687.image priorSource: 29604919! ----STARTUP----2014-01-12T15:14:53.395971+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/12/2014 15:10' prior: 79923303! commentForCurrentUpdate ^ '12481 Update LRUCache Implementation - Step 2 - Load the new LRUCache code https://pharo.fogbugz.com/f/cases/12481 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/12/2014 15:10'! script341 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.110.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.248.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1001.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.314.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1004.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/12/2014 15:10'! update30688 "self new update30688" self withUpdateLog: '12481 Update LRUCache Implementation - Step 2 - Load the new LRUCache code https://pharo.fogbugz.com/f/cases/12481 '. self loadTogether: self script341 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Cache commentStamp: '' prior: 0! I am Cache. I am an abstract class. I am a limited cache holding onto key/value pairs. My primary interface is #at:ifAbsentPut: which takes two arguments: a key and a block. Either the key is found (cache hit) and its value is returned, or the key is not found (cache miss). If the latter case, block should compute a new value to cache. Because block takes the key as optional argument, you can specify a factory style argument as well. With an explicit factory specified, you can also use #at: to access me. For each addition to the cache, a weight is computed by #computeWeight (a selector or block) and added to #totalWeight. When #totalWeight is no longer below #maximumWeight, the least recently used item of the cache is evicted (removed) to make room. The default #computeWeight returns 1 for each value, effectively counting the number of entries. The default #maximumWeight is 16. I count hits and misses and can return my #hitRatio. Optionally, but not by default, I can be configured so that it is safe to access me from different threads/processess during my important operations. See #beThreadSafe.! !LRUCache commentStamp: '' prior: 42373340! I am LRUCache. I am a Cache. I am a limited cache that evicts the least recently used entries. My implementation is properly O(1). Implementation Notes The key/value pairs in the cache are held as Associations in a DoubleLinkedList, lruList, ordered from least to most recently used. The keyIndex Dictionary maps from each key to the actual DoubleLink inside lruList holding the matching key/value pair. New pairs are added at the end of the list. In case of a hit, a pair gets promoted to the end of the list (most recently used). In case of a full cache, the first pair of the list gets evicted (least recently used). See #validateInvariantWith: where the relationship between the 2 datastructures is checked.! !TTLCache commentStamp: '' prior: 0! I am TTLCache. I am an LRUCache. I record a timestamp when I store a value for a key. Upon a cache hit, I check if the timestamp of the stored value does not exceed the allowed time to live duration - if so, the value has become stale and I will retrieve the value again. The default timeToLive is 1 hour. Note that eviction, making room in a full cache, still happens according to the LRU algorithm from my superclass - stale entries to not get evicted automatically. I can remove all my stale values in O(n), see #removeStaleValues. Implementation Notes I extend my superclass by storing TTLAssociations (which also hold a timestamp) instead of Associations in the DoubleLinkedList, lruList, ordered from least to most recently used. In case of a hit, there is now an additional check to see if the value has become stale (exceeded its time to live). If so, the value is computed again. Timestamps are implemented using Integer seconds (Time totalSeconds) for performance reasons.! !CacheStatistics commentStamp: '' prior: 0! I am CacheStatistics. I keep track of hits and misses of a cache.! !CacheWeight commentStamp: '' prior: 0! I am CacheWeight. I keep track of the weight of a cache. The weight of a cache is the sum of the weight of all values currently present. The simplest and default weight calculation returns a constant 1 for each value, effectively counting the number of values. The default maximum is 16. Using compute, a selector or block, applied to a value, different calculation can be made. Consider for example #sizeInMemory.! !DoubleLink commentStamp: 'SvenVanCaekenberghe 1/12/2014 14:15' prior: 0! I am DoubleLink, the elementary part of a DoubleLinkedList. I hold a value, as well as a link to my successor (nextLink) and to my predecessor (previousLink) - both can be nil.! !DoubleLinkedList commentStamp: '' prior: 0! I am DoubleLinkedList, an ordered list data structure consisting of objects, most likely DoubleLinks or something compatible, connected to each other by forward and backwards links.! !TTLAssociation commentStamp: '' prior: 0! I am TTLAssociation. I am an Assiciation. I maintain a timestamp that gets updated each time my value changes.! !LRUCacheTests commentStamp: '' prior: 0! I am NeoLRUCacheTests. ! !Cache commentStamp: '' prior: 79948341! I am Cache. I am an abstract class. I am a limited cache holding onto key/value pairs. My primary interface is #at:ifAbsentPut: which takes two arguments: a key and a block. Either the key is found (cache hit) and its value is returned, or the key is not found (cache miss). If the latter case, block should compute a new value to cache. Because block takes the key as optional argument, you can specify a factory style argument as well. With an explicit factory specified, you can also use #at: to access me. For each addition to the cache, a weight is computed by #computeWeight (a selector or block) and added to #totalWeight. When #totalWeight is no longer below #maximumWeight, the least recently used item of the cache is evicted (removed) to make room. The default #computeWeight returns 1 for each value, effectively counting the number of entries. The default #maximumWeight is 16. I count hits and misses and can return my #hitRatio. Optionally, but not by default, I can be configured so that it is safe to access me from different threads/processess during my important operations. See #beThreadSafe.! !Cache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:00'! at: key "If key is present in the cache, return the associated value. This is a hit and makes that key/value pair the most recently used. If key is absent, use the factory to compute a new value and cache it. This is a miss and will create a new key/value pair entry. Furthermore this could result in the least recently used key/value pair being removed when the specified maximum cache weight is exceeded. A factory is required for this behavior." ^ self at: key ifAbsentPut: (factory ifNil: [ self error: 'No factory specified' ])! ! !Cache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:01'! at: key ifAbsentPut: block "If key is present in the cache, return the associated value. This is a hit and makes that key/value pair the most recently used. If key is absent, use block to compute a new value and cache it. Block can optionally take one argument, the key. This is a miss and will create a new key/value pair entry. Furthermore this could result in the least recently used key/value pair being removed when the specified maximum cache weight is exceeded." self subclassResponsibility ! ! !Cache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/11/2013 15:36'! beThreadSafe "Configure me so that I can be safely used from multiple threads/processes during important operations. Note that this slows down these operations." access := Monitor new! ! !Cache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/9/2013 22:02'! computeWeight: valuable "Set the way to compute the weight of each cached value. This can be either a Symbol or one argument block. When the total weight is no longer below the maximum weight, the least recently used key/value pair will be removed. The default way to compute the weight returns 1 for each value, effectively counting the number of cached values." weight compute: valuable! ! !Cache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/9/2013 22:21'! critical: block ^ access ifNil: block ifNotNil: [ access critical: block ]! ! !Cache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/9/2013 22:02'! factory: block "Set the factory to compute values from keys to block. The factory will be evaluated for each key not present. Only my #at: message will use the factory." factory := block! ! !Cache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 12/9/2013 21:59'! hitRatio "Return the ratio of hits against total calls I received. This will be a number between 0 and 1. When I am empty, return 0." ^ statistics hitRatio! ! !Cache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 12/9/2013 21:59'! hits "Return how many hits, requests for keys present I received." ^ statistics hits! ! !Cache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! initialize super initialize. weight := CacheWeight new. statistics := CacheStatistics new! ! !Cache methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/9/2013 22:06'! keysAndValuesDo: block "Execute block with each key and value present in me. This will be from least to most recently used." self subclassResponsibility ! ! !Cache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/9/2013 22:02'! maximumWeight: limit "Set my maximum allowed total weight of all cached values to limit. If the total weight is no longer below limit, the least recently used key/value pair will be removed. The default maximum weight limit is 16." weight maximum: limit! ! !Cache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 12/9/2013 21:59'! misses "Return how many misses, requests for keys not present I received." ^ statistics misses! ! !Cache methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:03'! printElementsOn: stream stream nextPut: $#; print: self size. stream space; print: weight total; nextPut: $/; print: weight maximum. stream space; print: weight compute. factory ifNotNil: [ stream space; print: factory ]. stream space; print: (self hitRatio * 100.0) rounded ; nextPut: $%! ! !Cache methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:02'! printOn: stream super printOn: stream. stream nextPut: $(. self printElementsOn: stream. stream nextPut: $)! ! !Cache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:03'! removeAll "Remove all key/value pairs that I currently hold, effectiley resetting me, but not my statistics." self subclassResponsibility ! ! !Cache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:03'! removeKey: key "If I currently cache key, remove the entry. Signal a KeyNotFound when I currently do not cache key. Return the removed value." ^ self removeKey: key ifAbsent: [ KeyNotFound signalFor: key in: self ]! ! !Cache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:04'! removeKey: key ifAbsent: block "If I currently cache key, remove the entry. Execute block when key is currently absent. Return the removed value." self subclassResponsibility ! ! !Cache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 12/9/2013 22:00'! size "Return the count of items currently present." self subclassResponsibility ! ! !Cache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 12/9/2013 22:00'! totalWeight "Return the total weight of all cached values currently present." ^ weight total! ! !LRUCache commentStamp: '' prior: 79949518! I am LRUCache. I am a Cache. I am a limited cache that evicts the least recently used entries. My implementation is properly O(1). Implementation Notes The key/value pairs in the cache are held as Associations in a DoubleLinkedList, lruList, ordered from least to most recently used. The keyIndex Dictionary maps from each key to the actual DoubleLink inside lruList holding the matching key/value pair. New pairs are added at the end of the list. In case of a hit, a pair gets promoted to the end of the list (most recently used). In case of a full cache, the first pair of the list gets evicted (least recently used). See #validateInvariantWith: where the relationship between the 2 datastructures is checked.! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/10/2013 16:40'! addWeight: value weight add: value. [ weight isBelowMaximum ] whileFalse: [ self isEmpty ifTrue: [ self error: 'Weight of single value being added exceeds maximum' ] ifFalse: [ self evict ] ]! ! !LRUCache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:24'! at: key ifAbsentPut: block "If key is present in the cache, return the associated value. This is a hit and makes that key/value pair the most recently used. If key is absent, use block to compute a new value and cache it. Block can optionally take one argument, the key. This is a miss and will create a new key/value pair entry. Furthermore this could result in the least recently used key/value pair being removed when the specified maximum cache weight is exceeded." self critical: [ | association | association := keyIndex associationAt: key ifAbsent: [ | value | value := block cull: key. ^ self handleMiss: key -> value ]. ^ self handleHit: association ] ! ! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/5/2013 17:35'! evict | link value | link := lruList removeFirst. value := link value. weight remove: value value. keyIndex removeKey: value key! ! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/5/2013 18:16'! handleHit: association | link | statistics addHit. link := association value. self promote: link. ^ link value value! ! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/5/2013 17:45'! handleMiss: association | link | statistics addMiss. self addWeight: association value. link := lruList addLast: association. keyIndex at: association key put: link. ^ association value! ! !LRUCache methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/29/2013 21:03'! includesKey: key "Return true when the receiver has a value cached for key." ^ keyIndex includesKey: key! ! !LRUCache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! initialize super initialize. keyIndex := Dictionary new. lruList := DoubleLinkedList new! ! !LRUCache methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 11/29/2013 21:22'! isEmpty "Return true when the receiver contains no entries." ^ keyIndex isEmpty! ! !LRUCache methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/5/2013 17:35'! keysAndValuesDo: block "Execute block with each key and value present in me. This will be from least to most recently used." lruList do: [ :link | block value: link key value: link value ]! ! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/5/2013 17:46'! promote: link lruList removeLink: link. lruList addLast: link! ! !LRUCache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:22'! removeAll "Remove all key/value pairs that I currently hold, effectiley resetting me, but not my statistics." self critical: [ lruList removeAll. keyIndex removeAll. weight reset ]! ! !LRUCache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:23'! removeKey: key ifAbsent: block "If I currently cache key, remove the entry. Execute block when key is currently absent. Return the removed value." ^ self critical: [ (self includesKey: key) ifTrue: [ | link value | link := keyIndex removeKey: key. lruList removeLink: link. value := link value value. weight remove: value. value ] ifFalse: block ]! ! !LRUCache methodsFor: 'accessing - statistics' stamp: 'SvenVanCaekenberghe 11/29/2013 21:15'! size "Return the count of items currently present." ^ keyIndex size! ! !LRUCache methodsFor: 'private' stamp: 'SvenVanCaekenberghe 12/5/2013 17:15'! validateInvariantWith: assertable keyIndex keysAndValuesDo: [ :key :link | assertable assert: link value key = key ]. self keysAndValuesDo: [ :key :value | | link | link := keyIndex at: key. assertable assert: link value value = value. assertable assert: link value key = key ]! ! !TTLCache commentStamp: '' prior: 79950288! I am TTLCache. I am an LRUCache. I record a timestamp when I store a value for a key. Upon a cache hit, I check if the timestamp of the stored value does not exceed the allowed time to live duration - if so, the value has become stale and I will retrieve the value again. The default timeToLive is 1 hour. Note that eviction, making room in a full cache, still happens according to the LRU algorithm from my superclass - stale entries to not get evicted automatically. I can remove all my stale values in O(n), see #removeStaleValues. Implementation Notes I extend my superclass by storing TTLAssociations (which also hold a timestamp) instead of Associations in the DoubleLinkedList, lruList, ordered from least to most recently used. In case of a hit, there is now an additional check to see if the value has become stale (exceeded its time to live). If so, the value is computed again. Timestamps are implemented using Integer seconds (Time totalSeconds) for performance reasons.! !TTLCache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:09'! at: key ifAbsentPut: block "Overwritten - see the comment of the method that I overwrite. In case of a hit, the cached value's timestamp is checked to see if its age does not exceed the allowed timeToLive. If so, the stale value is recomputed." self critical: [ | association | association := keyIndex associationAt: key ifAbsent: [ | value newAssociation | value := block cull: key. newAssociation := TTLAssociation key: key value: value. ^ self handleMiss: newAssociation ]. ^ self handleHit: association ifStale: block ]! ! !TTLCache methodsFor: 'private ' stamp: 'SvenVanCaekenberghe 12/9/2013 14:59'! handleHit: association ifStale: block "In case of a hit, the cached value's timestamp is check to see if its age does not exceed the allowed timeToLive. If so, the stale value is recomputed." | link newValue | statistics addHit. link := association value. self promote: link. self now - link value timestamp < timeToLive ifFalse: [ newValue := block cull: association key. link value value: newValue ]. ^ link value value! ! !TTLCache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/6/2013 15:17'! initialize super initialize. self timeToLive: 1 hour! ! !TTLCache methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/6/2013 15:16'! now ^ Time totalSeconds! ! !TTLCache methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 12/9/2013 15:06'! printElementsOn: stream super printElementsOn: stream. stream space; print: timeToLive asDuration! ! !TTLCache methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:55'! removeStaleValues "Go over all cached values and remove those that are stale. Remove a collection of the keys that were removed." ^ self critical: [ | keysToRemove now | keysToRemove := OrderedCollection new. now := self now. lruList do: [ :value | now - value timestamp < timeToLive ifFalse: [ keysToRemove add: value key ] ]. keysToRemove do: [ :each | self removeKey: each ]. keysToRemove ]! ! !TTLCache methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/9/2013 14:54'! timeToLive: duration "Set how old computed values can be before they become stale. When stale, a value will be computed again based on the block passed in. Specify either an Integer or a Duration, both will be converted to seconds." timeToLive := duration asDuration asSeconds! ! !CacheStatistics commentStamp: '' prior: 79951338! I am CacheStatistics. I keep track of hits and misses of a cache.! !CacheStatistics methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:01'! addHit hits := hits + 1! ! !CacheStatistics methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:00'! addMiss misses := misses + 1! ! !CacheStatistics methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:01'! hitRatio "Return the ratio of hits against total calls I received. This will be a number between 0 and 1. When I am empty, return 0." | total | total := hits + misses. total = 0 ifTrue: [ ^ 0 ]. ^ hits / total! ! !CacheStatistics methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 15:59'! hits ^ hits! ! !CacheStatistics methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 15:59'! initialize super initialize. hits := misses := 0! ! !CacheStatistics methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 15:59'! misses ^ misses! ! !CacheStatistics methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 16:00'! reset hits := misses := 0! ! !CacheWeight commentStamp: '' prior: 79951457! I am CacheWeight. I keep track of the weight of a cache. The weight of a cache is the sum of the weight of all values currently present. The simplest and default weight calculation returns a constant 1 for each value, effectively counting the number of values. The default maximum is 16. Using compute, a selector or block, applied to a value, different calculation can be made. Consider for example #sizeInMemory.! !CacheWeight methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:17'! add: value | weight | weight := compute cull: value. total := total + weight! ! !CacheWeight methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:25'! compute ^ compute! ! !CacheWeight methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 16:18'! compute: valuable compute := valuable! ! !CacheWeight methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 16:16'! initialize super initialize. total := 0. maximum := 16. compute := [ 1 ]! ! !CacheWeight methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:27'! isBelowMaximum ^ total <= maximum ! ! !CacheWeight methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:25'! maximum ^ maximum! ! !CacheWeight methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 16:18'! maximum: integer maximum := integer! ! !CacheWeight methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:17'! remove: value | weight | weight := compute cull: value. total := total - weight! ! !CacheWeight methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/2/2013 16:19'! reset total := 0! ! !CacheWeight methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:19'! total ^ total! ! !DoubleLink commentStamp: 'SvenVanCaekenberghe 1/12/2014 14:15' prior: 79951951! I am DoubleLink, the elementary part of a DoubleLinkedList. I hold a value, as well as a link to my successor (nextLink) and to my predecessor (previousLink) - both can be nil.! !DoubleLink class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 12/2/2013 16:41'! value: anObject ^ self new value: anObject; yourself! ! !DoubleLink methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! asDoubleLink ^ self! ! !DoubleLink methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 12/5/2013 16:53'! clearLinks nextLink := previousLink := nil! ! !DoubleLink methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:43'! hasPredecessor ^ previousLink notNil! ! !DoubleLink methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:43'! hasSuccessor ^ nextLink notNil! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:40'! nextLink ^ nextLink! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:40'! nextLink: anObject nextLink := anObject! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:40'! previousLink ^ previousLink! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:40'! previousLink: anObject previousLink := anObject! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:41'! value ^ value! ! !DoubleLink methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:40'! value: anObject value := anObject! ! !DoubleLinkedList commentStamp: '' prior: 79952187! I am DoubleLinkedList, an ordered list data structure consisting of objects, most likely DoubleLinks or something compatible, connected to each other by forward and backwards links.! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/2/2013 21:08'! add: anObjectOrLink ^ self addLast: anObjectOrLink! ! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! add: anObjectOrLink afterLink: otherLink | link otherLinkSuccessor | otherLink = tail ifTrue: [ ^ self addLast: anObjectOrLink ]. link := anObjectOrLink asDoubleLink. otherLinkSuccessor := otherLink nextLink. otherLink nextLink: link. link previousLink: otherLink. link nextLink: otherLinkSuccessor. otherLinkSuccessor previousLink: link. ^ link! ! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! add: anObjectOrLink beforeLink: otherLink | link otherLinkPredeccessor | otherLink = head ifTrue: [ ^ self addFirst: anObjectOrLink ]. link := anObjectOrLink asDoubleLink. otherLinkPredeccessor := otherLink previousLink. otherLink previousLink: link. link nextLink: otherLink. link previousLink: otherLinkPredeccessor. otherLinkPredeccessor nextLink: link. ^ link! ! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/9/2013 15:18'! addAll: collection collection do: [ :each | self add: each ]! ! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! addFirst: anObjectOrLink | link | link := anObjectOrLink asDoubleLink. link nextLink: head. head ifNotNil: [ head previousLink: link ]. tail ifNil: [ tail := link ]. head := link. ^ link! ! !DoubleLinkedList methodsFor: 'adding' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! addLast: anObjectOrLink | link | link := anObjectOrLink asDoubleLink. link previousLink: tail. tail ifNotNil: [ tail nextLink: link ]. head ifNil: [ head := link ]. tail := link. ^ link! ! !DoubleLinkedList methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 12/2/2013 23:40'! asArray ^ Array streamContents: [ :out | self do: [ :each | out nextPut: each ] ]! ! !DoubleLinkedList methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/9/2013 15:10'! collect: block | result | result := self class new. self do: [ :each | result add: (block value: each) ]. ^ result! ! !DoubleLinkedList methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/2/2013 19:09'! do: block | current | current := head. [ current isNil ] whileFalse: [ block value: current value. current := current nextLink ]! ! !DoubleLinkedList methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/5/2013 16:53'! first self isEmpty ifTrue: [ CollectionIsEmpty signalWith: self ]. ^ head value! ! !DoubleLinkedList methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/9/2013 15:44'! includes: object self do: [ :each | each = object ifTrue: [ ^ true ] ]. ^ false! ! !DoubleLinkedList methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 19:08'! isEmpty ^ head isNil and: [ tail isNil ]! ! !DoubleLinkedList methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/5/2013 16:54'! last self isEmpty ifTrue: [ CollectionIsEmpty signalWith: self ]. ^ tail value! ! !DoubleLinkedList methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/9/2013 15:12'! reject: block | result | result := self class new. self do: [ :each | (block value: each) ifFalse: [ result add: each ] ]. ^ result! ! !DoubleLinkedList methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/5/2013 17:07'! removeAll head := tail := nil! ! !DoubleLinkedList methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/5/2013 16:54'! removeFirst | link | self isEmpty ifTrue: [ CollectionIsEmpty signalWith: self ]. link := head. head := head nextLink. head ifNil: [ tail := nil ] ifNotNil: [ head previousLink: nil ]. link clearLinks. ^ link! ! !DoubleLinkedList methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/5/2013 16:54'! removeLast | link | self isEmpty ifTrue: [ CollectionIsEmpty signalWith: self ]. link := tail. tail := tail previousLink. tail ifNil: [ head := nil ] ifNotNil: [ tail nextLink: nil ]. link clearLinks. ^ link! ! !DoubleLinkedList methodsFor: 'removing' stamp: 'SvenVanCaekenberghe 12/5/2013 16:54'! removeLink: link | predecessor successor | predecessor := link previousLink. successor := link nextLink. predecessor ifNil: [ head := successor ] ifNotNil: [ predecessor nextLink: successor ]. successor ifNil: [ tail := predecessor ] ifNotNil: [ successor previousLink: predecessor ]. link clearLinks. ^ link! ! !DoubleLinkedList methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/9/2013 15:09'! reverseDo: block | current | current := tail. [ current isNil ] whileFalse: [ block value: current value. current := current previousLink ]! ! !DoubleLinkedList methodsFor: 'enumerating' stamp: 'SvenVanCaekenberghe 12/9/2013 15:11'! select: block | result | result := self class new. self do: [ :each | (block value: each) ifTrue: [ result add: each ] ]. ^ result! ! !Object methodsFor: '*System-Caching' stamp: 'SvenVanCaekenberghe 12/16/2013 20:12'! asDoubleLink ^ DoubleLink value: self! ! !TTLAssociation commentStamp: '' prior: 79952425! I am TTLAssociation. I am an Assiciation. I maintain a timestamp that gets updated each time my value changes.! !TTLAssociation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/5/2013 21:14'! key: aKey value: anObject super key: aKey value: anObject. timestamp := self now! ! !TTLAssociation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/6/2013 15:16'! now ^ Time totalSeconds ! ! !TTLAssociation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/5/2013 21:12'! timestamp ^ timestamp! ! !TTLAssociation methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/5/2013 21:14'! value: anObject super value: anObject. timestamp := self now! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testAddAfterLink | list link | list := DoubleLinkedList new. list add: 1. link := list add: 2. list add: 3. list add: 0 afterLink: link. self assert: list asArray equals: #( 1 2 0 3 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testAddBeforeLink | list link | list := DoubleLinkedList new. list add: 1. link := list add: 2. list add: 3. list add: 0 beforeLink: link. self assert: list asArray equals: #( 1 0 2 3 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testAddFirst | list | list := DoubleLinkedList new. 1 to: 3 do: [ :each | list add: each ]. list addFirst: 0. self deny: list isEmpty. self assert: list first equals: 0. self assert: list last equals: 3. self assert: list asArray equals: #( 0 1 2 3 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testAddLast | list | list := DoubleLinkedList new. 1 to: 3 do: [ :each | list add: each ]. list addLast: 0. self deny: list isEmpty. self assert: list first equals: 1. self assert: list last equals: 0. self assert: list asArray equals: #( 1 2 3 0 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testCollect | list doubles | list := DoubleLinkedList new. list addAll: #(1 2 3). doubles := list collect: [ :each | each * 2 ]. self assert: doubles asArray equals: #(2 4 6)! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testDo | list value | list := DoubleLinkedList new. list addAll: (1 to: 10). value := 1. list do: [ :each | self assert: each equals: value. value := value + 1 ]! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testEmpty | list | list := DoubleLinkedList new. self assert: list isEmpty. self should: [ list first ] raise: CollectionIsEmpty. self should: [ list last ] raise: CollectionIsEmpty. list do: [ :each | self fail ] ! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testIncludes | list | list := DoubleLinkedList new. list addAll: (1 to: 10). self assert: (list includes: 5). self deny: (list includes: 0)! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testOne | list | list := DoubleLinkedList new. list add: #one. self deny: list isEmpty. self assert: list first equals: #one. self assert: list last equals: #one. self assert: list asArray equals: #( one )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testOneRemoveFirst | list | list := DoubleLinkedList new. list add: #one. list removeFirst. self assert: list isEmpty. list add: #one. list removeLast. self assert: list isEmpty! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testOneRemoveLast | list | list := DoubleLinkedList new. list add: #one. list removeLast. self assert: list isEmpty. list add: #one. list removeLast. self assert: list isEmpty! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testReject | list even | list := DoubleLinkedList new. list addAll: (1 to: 10). even := list reject: [ :each | each odd ]. self assert: even asArray equals: #(2 4 6 8 10)! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testReverseDo | list value | list := DoubleLinkedList new. list addAll: (1 to: 10). value := 10. list reverseDo: [ :each | self assert: each equals: value. value := value - 1 ]! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testSelect | list even | list := DoubleLinkedList new. list addAll: (1 to: 10). even := list select: [ :each | each even ]. self assert: even asArray equals: #(2 4 6 8 10)! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testThree | list | list := DoubleLinkedList new. 1 to: 3 do: [ :each | list add: each ]. self deny: list isEmpty. self assert: list first equals: 1. self assert: list last equals: 3. self assert: list asArray equals: #( 1 2 3 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testThreeRemoveFirst | list link | list := DoubleLinkedList new. 1 to: 3 do: [ :each | list add: each ]. link := list removeFirst. self assert: link value equals: 1. self assert: list first equals: 2. self assert: list last equals: 3. self assert: list asArray equals: #( 2 3 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testThreeRemoveLast | list link | list := DoubleLinkedList new. 1 to: 3 do: [ :each | list add: each ]. link := list removeLast. self assert: link value equals: 3. self assert: list first equals: 1. self assert: list last equals: 2. self assert: list asArray equals: #( 1 2 )! ! !DoubleLinkedListTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:10'! testThreeRemoveLink | list link | list := DoubleLinkedList new. list add: 1. link := list add: 2. list add: 3. list removeLink: link. self assert: list first equals: 1. self assert: list last equals: 3. self assert: list asArray equals: #( 1 3 )! ! !LRUCacheTests commentStamp: '' prior: 79952593! I am NeoLRUCacheTests. ! !LRUCacheTests methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:11'! newCache ^ LRUCache new! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:31'! test5kClasses | cache data | (cache := self newCache) maximumWeight: 1024. data := Object allSubclasses first: 5*1024. data do: [ :each | cache at: each name ifAbsentPut: [ each ] ]. cache validateInvariantWith: self. self assert: cache size equals: 1024. data shuffled do: [ :each | cache at: each name ifAbsentPut: [ each ] ]. self assert: cache size equals: 1024. cache validateInvariantWith: self. data select: [ :each | cache includesKey: each name ] thenDo: [ :each | cache at: each name ifAbsentPut: [ self fail ] ]. self assert: cache hits >= 1024. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! test6k | cache | (cache := self newCache) maximumWeight: 600. 1 to: 6000 do: [ :each | cache at: each ifAbsentPut: [ each * 2 ] ]. self assert: cache size equals: 600. self assert: (cache includesKey: 5401). self deny: (cache includesKey: 5400). cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testCustomWeight | cache | (cache := self newCache) computeWeight: #sizeInMemory; maximumWeight: 64. cache at: 1 ifAbsentPut: [ ByteArray new: 1 ]. self assert: cache totalWeight equals: (ByteArray new: 1) sizeInMemory. 2 to: 10 do: [ :each | cache at: each ifAbsentPut: [ ByteArray new: each ] ]. self assert: cache size equals: 3. self assert: cache totalWeight equals: ((8 to: 10) collect: [ :each | (ByteArray new: each) sizeInMemory ]) sum. self assert: (cache at: 10 ifAbsentPut: [ self fail ]) equals: (ByteArray new: 10). self deny: (cache includesKey: 1)! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testEmpty | emptyCache | emptyCache := self newCache. self assert: emptyCache isEmpty. self assert: emptyCache size isZero. self assert: emptyCache hits isZero. self assert: emptyCache misses isZero. self assert: emptyCache hitRatio isZero. self assert: emptyCache totalWeight isZero. self deny: (emptyCache includesKey: #foo). emptyCache keysAndValuesDo: [ :key :value | self fail ]! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testEnumeration | cache data keys values | cache := self newCache. data := Dictionary new. 1 to: 10 do: [ :each | data at: each asWords put: each ]. data keysAndValuesDo: [ :key :value | cache at: key ifAbsentPut: [ value ] ]. keys := Array new writeStream. values := Array new writeStream. cache keysAndValuesDo: [ :key :value | self assert: (data at: key) equals: value. keys nextPut: key. values nextPut: value ]. self assert: keys contents asSet equals: data keys asSet. self assert: values contents asSet equals: data values asSet. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testEviction | cache | cache := self newCache. cache maximumWeight: 16. 1 to: 20 do: [ :each | cache at: each asWords ifAbsentPut: [ each ] ]. self assert: cache size equals: 16. self assert: cache totalWeight equals: 16. 5 to: 20 do: [ :each | self assert: (cache includesKey: each asWords). self assert: (cache at: each asWords ifAbsentPut: [ self fail ]) equals: each ]. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testFactory | cache | cache := self newCache. cache maximumWeight: 5. cache factory: [ :key | key * 2 ]. #( 1 2 3 4 1 5 6 7 8 1 ) do: [ :each | cache at: each ]. self assert: cache size equals: 5. self assert: cache hits equals: 2. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testFactoryStyle | cache factory | cache := self newCache. cache maximumWeight: 5. factory := [ :key | key * 2 ]. #( 1 2 3 4 1 5 6 7 8 1 ) do: [ :each | cache at: each ifAbsentPut: factory ]. self assert: cache size equals: 5. self assert: cache hits equals: 2. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/11/2013 15:46'! testFibonacci "After an idea by Jan Vrany. Recursively enter the cache and its access protection" | fibCache | fibCache := self newCache. fibCache maximumWeight: 32; beThreadSafe; factory: [ :key | key < 2 ifTrue: [ key ] ifFalse: [ (fibCache at: key - 1) + (fibCache at: key - 2) ] ]. self assert: (fibCache at: 40) equals: 102334155! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testFixedAccess | cache data keys | (cache := self newCache) maximumWeight: 4. data := (1 to: 16) collect: #asWords. data do: [ :each | cache at: each ifAbsentPut: [ each ] ]. cache validateInvariantWith: self. self assert: cache size equals: 4. (#(14 15) collect: #asWords) do: [ :each | cache at: each ifAbsentPut: [ each ] ]. self assert: cache size equals: 4. cache validateInvariantWith: self. keys := data select: [ :each | cache includesKey: each ]. keys do: [ :each | cache at: each ifAbsentPut: [ self fail ] ]. self assert: cache hits >= 4. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:32'! testOne | cache | cache := self newCache. cache at: #foo ifAbsentPut: [ 100 ]. self assert: (cache includesKey: #foo). self deny: cache isEmpty. self assert: cache size equals: 1. self assert: cache totalWeight equals: 1. self assert: cache hits isZero. self assert: cache misses equals: 1. self assert: cache hitRatio isZero. self deny: (cache includesKey: #bar). cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testOneHit | cache value | cache := self newCache. cache at: #foo ifAbsentPut: [ 100 ]. self assert: (cache includesKey: #foo). self assert: cache hits equals: 0. self assert: cache misses equals: 1. value := cache at: #foo ifAbsentPut: [ self fail ]. self assert: value equals: 100. self assert: cache hits equals: 1. self assert: cache misses equals: 1. cache validateInvariantWith: self ! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testOneHitTwice | cache value | cache := self newCache. cache at: #foo ifAbsentPut: [ 100 ]. value := cache at: #foo ifAbsentPut: [ self fail ]. self assert: value equals: 100. value := cache at: #foo ifAbsentPut: [ self fail ]. self assert: value equals: 100. self assert: cache hitRatio equals: 2/3. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testPrimeFactors "[ self run: #testPrimeFactors ] bench." | cache data | cache := self newCache. cache maximumWeight: 512. cache factory: [ :key | key ]. data := Array streamContents: [ :out | 1 to: 4096 do: [ :each | each primeFactorsOn: out. out nextPut: each ] ]. data := data collect: [ :each | each asWords ]. data do: [ :each | cache at: each ]. self assert: cache totalWeight equals: 512. self assert: cache hitRatio > (7/10). cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testRandomAccess | cache data random keys | (cache := self newCache) maximumWeight: 4. data := (1 to: 16) collect: #asWords. data do: [ :each | cache at: each ifAbsentPut: [ each ] ]. cache validateInvariantWith: self. self assert: cache size equals: 4. random := data shuffled. random do: [ :each | cache at: each ifAbsentPut: [ each ] ]. self assert: cache size equals: 4. cache validateInvariantWith: self. keys := data select: [ :each | cache includesKey: each ]. keys do: [ :each | cache at: each ifAbsentPut: [ self fail ] ]. self assert: cache hits >= 4. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testRemoveAll | cache | cache := self newCache. 1 to: 10 do: [ :each | cache at: each ifAbsentPut: [ each ] ]. cache removeAll. self assert: cache isEmpty. self assert: cache size isZero. self assert: cache totalWeight isZero. self assert: cache misses equals: 10. self assert: cache hits isZero. self deny: (cache includesKey: #1). cache keysAndValuesDo: [ :key :value | self fail ]. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testRemoveOne | cache | cache := self newCache. cache at: #foo ifAbsentPut: [ 100 ]. cache removeKey: #foo. self assert: cache isEmpty. self assert: cache size isZero. self assert: cache totalWeight isZero. self deny: (cache includesKey: #foo). cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testRemoveOneOfThree | cache | cache := self newCache. cache at: #x ifAbsentPut: [ 100 ]. cache at: #y ifAbsentPut: [ 200 ]. cache at: #z ifAbsentPut: [ 300 ]. cache removeKey: #y. self assert: cache size equals: 2. self assert: cache totalWeight equals: 2. self assert: (cache at: #x ifAbsentPut: [ self fail ]) equals: 100. self deny: (cache includesKey: #y). self assert: (cache at: #z ifAbsentPut: [ self fail ]) equals: 300. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:33'! testTen | cache | cache := self newCache. 1 to: 10 do: [ :each | cache at: each asWords ifAbsentPut: [ each ] ]. self assert: cache size equals: 10. 1 to: 10 do: [ :each | self assert: (cache includesKey: each asWords) ]. 1 to: 10 do: [ :each | self assert: (cache at: each asWords ifAbsentPut: [ self fail ]) equals: each ]. self assert: cache hitRatio equals: 1/2. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/11/2013 15:38'! testTenThreadSafe | cache | cache := self newCache. cache beThreadSafe. 1 to: 10 do: [ :each | cache at: each asWords ifAbsentPut: [ each ] ]. self assert: cache size equals: 10. 1 to: 10 do: [ :each | self assert: (cache at: each asWords ifAbsentPut: [ self fail ]) equals: each ]. self assert: cache hitRatio equals: 1/2. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:34'! testThree | cache | cache := self newCache. cache at: #x ifAbsentPut: [ 100 ]. cache at: #y ifAbsentPut: [ 200 ]. cache at: #z ifAbsentPut: [ 300 ]. self assert: (cache at: #x ifAbsentPut: [ self fail ]) equals: 100. self assert: (cache at: #y ifAbsentPut: [ self fail ]) equals: 200. self assert: (cache at: #z ifAbsentPut: [ self fail ]) equals: 300. self assert: cache hitRatio equals: 3/6. self assert: (cache at: #z ifAbsentPut: [ self fail ]) equals: 300. self assert: (cache at: #y ifAbsentPut: [ self fail ]) equals: 200. self assert: (cache at: #x ifAbsentPut: [ self fail ]) equals: 100. self assert: cache hitRatio equals: 6/9. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:34'! testThreeHitSameOne | cache | cache := self newCache. cache at: #x ifAbsentPut: [ 100 ]. cache at: #y ifAbsentPut: [ 200 ]. cache at: #z ifAbsentPut: [ 300 ]. self assert: (cache at: #x ifAbsentPut: [ self fail ]) equals: 100. self assert: (cache at: #y ifAbsentPut: [ self fail ]) equals: 200. self assert: (cache at: #z ifAbsentPut: [ self fail ]) equals: 300. 3 timesRepeat: [ self assert: (cache at: #x ifAbsentPut: [ self fail ]) equals: 100 ]. self assert: cache hits equals: 6. cache validateInvariantWith: self! ! !LRUCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/2/2013 16:34'! testTwo | cache | cache := self newCache. cache at: #foo ifAbsentPut: [ 100 ]. cache at: #bar ifAbsentPut: [ 200 ]. self assert: (cache at: #foo ifAbsentPut: [ self fail ]) equals: 100. self assert: (cache at: #bar ifAbsentPut: [ self fail ]) equals: 200. self assert: cache hitRatio equals: 2/4. self assert: (cache at: #bar ifAbsentPut: [ self fail ]) equals: 200. self assert: (cache at: #foo ifAbsentPut: [ self fail ]) equals: 100. self assert: cache hitRatio equals: 4/6. cache validateInvariantWith: self! ! !TTLCacheTests methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 12/16/2013 20:11'! newCache ^ TTLCache new! ! !TTLCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/6/2013 11:28'! testExpiring | cache didComputeValue | cache := self newCache. cache timeToLive: 1 second. didComputeValue := false. cache at: #foo ifAbsentPut: [ didComputeValue := true. 100 ]. self assert: didComputeValue. self assert: (cache includesKey: #foo). self assert: (cache at: #foo ifAbsentPut: [ self fail ]) equals: 100. 1 second asDelay wait. didComputeValue := false. cache at: #foo ifAbsentPut: [ didComputeValue := true. 101 ]. self assert: didComputeValue. self assert: (cache includesKey: #foo). self assert: (cache at: #foo ifAbsentPut: [ self fail ]) equals: 101. cache validateInvariantWith: self ! ! !TTLCacheTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/9/2013 22:42'! testRemoveStaleValues | cache keys | cache := self newCache. cache timeToLive: 1 second. cache at: #foo ifAbsentPut: [ 100 ]. cache at: #bar ifAbsentPut: [ 200 ]. self deny: cache isEmpty. 1 second asDelay wait. keys := cache removeStaleValues. self assert: cache isEmpty. self assert: keys asArray sorted equals: #(bar foo). cache validateInvariantWith: self ! ! LRUCache removeSelector: #printOn:! LRUCache removeSelector: #initializeSize:factory:! LRUCache removeSelector: #at:! LRUCache class removeSelector: #test2! LRUCache class removeSelector: #test! LRUCache class removeSelector: #size:factory:! "System-Caching"! "System-Support"! "Tests"! ----End fileIn----! ----QUIT----2014-01-12T15:15:00.84009+01:00 Pharo.image priorSource: 29605116! ----STARTUP----2014-01-12T15:20:21.449659+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-12T15:20:21.709606+01:00 Pharo-30688.image priorSource: 29666234! ----STARTUP----2014-01-12T16:44:53.262095+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/12/2014 16:41' prior: 79937069! commentForCurrentUpdate ^ '12482 Update LRUCache Implementation - Step 3 - Use the new LRUCache code https://pharo.fogbugz.com/f/cases/12482 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/12/2014 16:42'! script342 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.250.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1003.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.314.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1004.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/12/2014 16:42'! update30689 "self new update30689" self withUpdateLog: '12482 Update LRUCache Implementation - Step 3 - Use the new LRUCache code https://pharo.fogbugz.com/f/cases/12482 '. self loadTogether: self script342 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GradientFillStyle class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/12/2014 15:44' prior: 79934653! initPixelRampCache "Create an LRUCache to use for accessing pixel ramps. When a new pixel ramp is needed, a temporary GradientFillStyle is created so that it can be used to create a new pixel ramp" ^ PixelRampCache := LRUCache new maximumWeight: 32; factory: [ :key | (GradientFillStyle new colorRamp: key) computePixelRampOfSize: 512 ]; yourself! ! !GradientFillStyle class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/12/2014 15:49' prior: 79935089! initialize "GradientFillStyle initialize" self initPixelRampCache ! ! !UITheme methodsFor: 'scrollbars' stamp: 'SvenVanCaekenberghe 1/12/2014 15:45' prior: 79935772! createArrowImagesCache "Creates the cache to store the arrow forms" ^ LRUCache new maximumWeight: 40; factory: [ :key | self scrollbarArrowOfDirection: key first size: key second color: key third ]; yourself! ! !UITheme methodsFor: 'scrollbars' stamp: 'SvenVanCaekenberghe 1/12/2014 15:45' prior: 79936080! createBoxImagesCache "Creates the cache to store the arrow forms" ^ LRUCache new maximumWeight: 20; factory: [ :key | self createBoxOfSize: key first color: key second ]; yourself! ! !ScrollBar class methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 1/12/2014 15:48' prior: 79936354! initialize "ScrollBar initialize" self initializeImagesCache! ! "Balloon"! "Morphic-Base"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2014-01-12T16:45:04.588328+01:00 Pharo.image priorSource: 29666430! ----STARTUP----2014-01-12T16:50:40.839662+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-12T16:50:41.149659+01:00 Pharo-30689.image priorSource: 29679505! ----STARTUP----2014-01-12T18:38:54.498047+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/12/2014 18:35' prior: 79998383! commentForCurrentUpdate ^ '12483 Update LRUCache Implementation - Step 4 - Deleted the old LRUCache code https://pharo.fogbugz.com/f/cases/12483 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/12/2014 18:36'! script343 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-MarcusDenker.24.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-MarcusDenker.29.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-MarcusDenker.181.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.250.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1003.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.314.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.273.mcz Spec-Debugger-MarcusDenker.193.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.109.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1387.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/12/2014 18:36'! update30690 "self new update30690" self withUpdateLog: '12483 Update LRUCache Implementation - Step 4 - Deleted the old LRUCache code https://pharo.fogbugz.com/f/cases/12483 '. self loadTogether: self script343 merge: false. self flushCaches. ! ! "ScriptLoader30"! OldLRUCache removeSelector: #printOn:! OldLRUCache removeSelector: #initializeSize:factory:! OldLRUCache removeSelector: #at:! OldLRUCache class removeSelector: #test2! OldLRUCache class removeSelector: #test! OldLRUCache class removeSelector: #size:factory:! Smalltalk globals removeClassNamed: #OldLRUCache! "System-Support"! ----End fileIn----! ----QUIT----2014-01-12T18:39:00.452049+01:00 Pharo.image priorSource: 29679702! ----STARTUP----2014-01-12T18:44:17.619508+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-12T18:44:17.981505+01:00 Pharo-30690.image priorSource: 29691595! ----STARTUP----2014-01-13T11:06:55.659978+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/13/2014 11:02' prior: 80011655! commentForCurrentUpdate ^ '12619 3 minor fixes https://pharo.fogbugz.com/f/cases/12619 12631 methods missing in RPackageTag https://pharo.fogbugz.com/f/cases/12631 12634 Update https://pharo.fogbugz.com/f/cases/12634 12635 Better mechanism to remove a key based on its shortcut https://pharo.fogbugz.com/f/cases/12635 12630 Add ScriptLoader>>#commentForIssues: https://pharo.fogbugz.com/f/cases/12630'! ! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/12/2014 22:09'! commentForIssues: issues "self new commentForIssues: #(12623 12621 12615)" ^ String streamContents: [ :stream | issues do: [ :each | | description link | stream print: each; space. description := ZnClient new url: 'http://bugs.pharo.org/issues/name/'; addPath: each asString; get. stream << description; cr. link := 'https://pharo.fogbugz.com/f/cases' asUrl / each asString. stream tab; print: link; cr; cr ] displayingProgress: 'Fetching Issue Descriptions' ]! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/13/2014 11:02'! script344 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-SvenVanCaekenberghe.692.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-SvenVanCaekenberghe.650.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1004.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-SvenVanCaekenberghe.283.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/13/2014 11:03'! update30691 "self new update30691" self withUpdateLog: '12619 3 minor fixes https://pharo.fogbugz.com/f/cases/12619 12631 methods missing in RPackageTag https://pharo.fogbugz.com/f/cases/12631 12634 Update https://pharo.fogbugz.com/f/cases/12634 12635 Better mechanism to remove a key based on its shortcut https://pharo.fogbugz.com/f/cases/12635 12630 Add ScriptLoader>>#commentForIssues: https://pharo.fogbugz.com/f/cases/12630'. self loadTogether: self script344 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ButtonModel commentStamp: '' prior: 79905442! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ImageModel commentStamp: '' prior: 76242890! An ImageModel is a spec model for images! !ListModel commentStamp: '' prior: 69452091! A ListComposableModel is an applicative model which handle a basic list. | t | t:= ListComposableModel new. t openWithSpec. t items: (Smalltalk allClasses). self example | t | t:= ListComposableModel new. t openWithSpec. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). | t | t:= ListComposableModel new. t openWithSpec. t filteringBlock: [:col | col select: [:each | each name beginsWith: 'Zn']]. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). ! !Trait method! setDirectionFrom: aPoint | delta degrees | delta := (self transformFromWorld globalPointToLocal: aPoint) - self referencePosition. degrees := delta degrees + 90.0. self forwardDirection: (degrees \\ 360) rounded. ! ! !Trait method! heading "Return the receiver's heading" ^ self owner ifNil: [self forwardDirection] ifNotNil: [self forwardDirection + self owner degreesOfFlex]! ! !Trait method! rotationDegrees "Default implementation." ^ 0.0 ! ! !Trait method! forwardDirection: newDirection "Set the receiver's forward direction (in eToy terms)" self setProperty: #forwardDirection toValue: newDirection.! ! !Trait method! rotationDegrees: degrees "redefined in all morphs which are using myself"! ! !Trait method! prepareForRotating "If I require a flex shell to rotate, then wrap it in one and return it. Polygons, eg, may override to do nothing." ^ self addFlexShell! ! !Trait method! forwardDirection "Return the receiver's forward direction (in eToy terms)" ^self valueOfProperty: #forwardDirection ifAbsent:[0.0]! ! !TextMorph commentStamp: 'MarcusDenker 2/14/2010 22:24' prior: 43368186! TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text. Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color. Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter. If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape. The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except... If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property. Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph. Still a TextMorph can be composed of several texts of different fonts | font1 font2 t1 t2 tMorph| tMorph := TextMorph new. font1 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)). font2 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)). t1 := 'this is font1' asText addAttribute: font1. t2 := ' and this is font2' asText addAttribute: font2. tMorph contents: (t1,t2). tMorph openInHand. Yet to do: Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.! !AbstractAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/10/2014 12:35' prior: 69632626! widgetDo: aBlock ^ self widget ifNotNil: aBlock! ! !PluggableListMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/10/2014 10:02' prior: 29426527! autoDeselect ^ autoDeselect ifNil: [ self resetListSelector notNil ] ifNotNil: [ autoDeselect ]! ! !PluggableListMorph methodsFor: 'multi-selection' stamp: 'BenjaminVanRyseghem 1/10/2014 09:49' prior: 29459500! mouseUpOnSingle: event "The mouse came up within the list; take appropriate action" | row mdr | row := self rowAtLocation: event position. event hand hasSubmorphs ifFalse: [ mdr := self mouseDownRow. self mouseDownRow: nil. mdr ifNil: [^self]]. (self enabled and: [model okToChange]) ifFalse: [^ self]. "No change if model is locked or receiver disabled" row == self selectionIndex ifTrue: [ self autoDeselect ifTrue: [ row = 0 ifFalse: [ self changeModelSelection: 0 ] ] ifFalse: [ self changeModelSelection: row ] ] ifFalse: [ self changeModelSelection: row ]. Cursor normal show! ! !ButtonModel commentStamp: '' prior: 80036205! A ButtonComposableModel is an applicative model which handle a basic button. self example! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/5/2014 16:14' prior: 79906425! initialize super initialize. actionHolder := [] asValueHolder. labelHolder := '' asValueHolder. iconHolder := nil asValueHolder. stateHolder := false asValueHolder. helpHolder := nil asValueHolder. actionPerformedHolder := nil asValueHolder. askBeforeChangingHolder := false asValueHolder. shortcut := nil asValueHolder. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. shortcut whenChangedDo: [ :newShortcut :oldShortcut | self unregisterShortcut: oldShortcut. self registerShortcut: newShortcut. self changed: #label ]. menuHolder := MenuModel new asValueHolder. menuHolder whenChangedDo: [ :aMenuModel :oldMenu | (oldMenu isNil or: [ oldMenu isBlock ]) ifFalse: [ oldMenu neglect: self ]. (aMenuModel isNil or: [ aMenuModel isBlock ]) ifFalse: [ aMenuModel applyTo: self ] ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 15:54'! menu ^ menuHolder value! ! !ButtonModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 15:54'! menu: aMenu menuHolder value: aMenu! ! !ImageModel commentStamp: '' prior: 80036355! An ImageModel is a spec model for images! !ImageModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 22:18'! action ^ action value! ! !ImageModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 22:19'! action: aBlock "Set the action of the image" action value: aBlock! ! !ImageModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 22:02' prior: 76243259! image ^ imageHolder value! ! !ImageModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 22:20' prior: 76243383! image: aForm "Set the form of the imagemorph" imageHolder value: aForm! ! !ImageModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/11/2014 22:23' prior: 76243611! initialize super initialize. imageHolder := nil asValueHolder. action := [] asValueHolder. imageHolder whenChangedDo: [ self changed: #getImage ].! ! !ImageModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/11/2014 22:19'! whenActionChanged: aBlock "Set a block to performed when the action is changed" action whenChangedDo: aBlock! ! !ImageModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/11/2014 22:19' prior: 76243856! whenImageChanged: aBlock "Set a block to performed when the image is changed" imageHolder whenChangedDo: aBlock! ! !ListModel commentStamp: '' prior: 80036454! A ListComposableModel is an applicative model which handle a basic list. | t | t:= ListComposableModel new. t openWithSpec. t items: (Smalltalk allClasses). self example | t | t:= ListComposableModel new. t openWithSpec. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). | t | t:= ListComposableModel new. t openWithSpec. t filteringBlock: [:col | col select: [:each | each name beginsWith: 'Zn']]. t sortingBlock: [:a :b| a name > b name]. t items: (Smalltalk allClasses). ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 09:51'! autoDeselect "Return whether the list items can be selected if it's already the selected item" "If true, clicking again on the selected item will unselect it" ^ autoDeselect value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 09:51'! autoDeselect: aBoolean "Set if the list items can be selected again" autoDeselect value: aBoolean! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/6/2014 15:51'! backgroundColorBlock "Return the block use to compute the background color for each item" ^ backgroundColorBlock value! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/6/2014 15:52'! backgroundColorBlock: aBlock "Set the block used to compute an item background" backgroundColorBlock value: aBlock! ! !ListModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/6/2014 16:05'! backgroundColorFor: anItem at: index ^ self backgroundColorBlock cull: anItem cull: index! ! !ListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/10/2014 09:50' prior: 69457707! initialize super initialize. selectionHolder := SelectionValueHolder new. listHolder := Array new asValueHolder. sortingBlockHolder := self defaultSortingBlock asValueHolder. filteringBlockHolder := self defaultFilteringBlock asValueHolder. wrapBlockHolder := [ :object | object asStringOrText ] asValueHolder. menuHolder := [ :menu :shifted | nil ] asValueHolder. multiSelectionHolder := IdentityDictionary new asValueHolder. multiSelection := false asValueHolder. allowToSelect := true asValueHolder. backgroundColorBlock := [ :item :index | Color white ] asValueHolder. autoDeselect := true asValueHolder. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !ListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/10/2014 09:52' prior: 76615901! registerEvents listHolder whenChangedDo: [ self refreshListItems ]. filteringBlockHolder whenChangedDo: [ self refreshListItems ]. selectionHolder index whenChangedDo: [ self changed: #getIndex ]. multiSelection whenChangedDo: [ :b | self changed: { #setMultipleSelection: . b } ]. wrapBlockHolder whenChangedDo:[ self changed: #listElementAt: ]. backgroundColorBlock whenChangedDo: [ self refreshListItems ]. autoDeselect whenChangedDo: [ :boolean | self changed: #autoDeselect: with: { boolean }]. sortingBlockHolder whenChangedDo: [ listHolder value: (listHolder value sorted: sortingBlockHolder value). self changed: #listElementAt: ]. ! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/10/2014 09:52'! whenAutoDeselectChanged: aBlock "Set a block to value when the value of autoDeselect has changed" autoDeselect whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/6/2014 15:52'! whenBackgroundColorBlockChanged: aBlock "Set a block to value when the backgroundColorBlock has changed" backgroundColorBlock whenChangedDo: aBlock! ! !ListModel methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/6/2014 15:52' prior: 69466427! whenDisplayBlockChanged: aBlock "Set a block to value when the filtering block has changed" wrapBlockHolder whenChangedDo: aBlock! ! !SpecAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/11/2014 22:04' prior: 77546396! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #ButtonAdapter; at: #CheckBoxAdapter put: #CheckBoxAdapter; at: #ContainerAdapter put: #ContainerAdapter; at: #DiffAdapter put: #MorphicDiffAdapter; at: #ImageAdapter put: #ImageAdapter; at: #LabelAdapter put: #LabelAdapter; at: #ListAdapter put: #ListAdapter; at: #IconListAdapter put: #IconListAdapter; at: #DropListAdapter put: #DropListAdapter; at: #MultiColumnListAdapter put: #MultiColumnListAdapter; at: #MenuAdapter put: #MenuAdapter; at: #MenuGroupAdapter put: #MenuGroupAdapter; at: #MenuItemAdapter put: #MenuItemAdapter; at: #NewListAdapter put: #NewListAdapter; at: #RadioButtonAdapter put: #RadioButtonAdapter; at: #SliderAdapter put: #SliderAdapter; at: #TabManagerAdapter put: #TabManagerAdapter; at: #TabAdapter put: #TabAdapter; at: #TextAdapter put: #TextAdapter; at: #TextInputFieldAdapter put: #TextInputFieldAdapter; at: #TreeAdapter put: #TreeAdapter; at: #TreeColumnAdapter put: #TreeColumnAdapter; at: #TreeNodeAdapter put: #TreeNodeAdapter; at: #WindowAdapter put: #WindowAdapter; at: #DialogWindowAdapter put: #DialogWindowAdapter; yourself! ! !DynamicComposableModel methodsFor: 'rremove me' stamp: 'BenjaminVanRyseghem 1/12/2014 17:03'! ensureExtentFor: widget self haltOnce. self extent ifNil: [ self initialExtent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ] ] ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]. ! ! !MorphicImageAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/11/2014 22:11' prior: 76245366! defaultSpec ^ {#AlphaImageMorph. #color:. Color transparent. #model:. #model. #getImageSelector:. #getImage. #vResizing:. #spaceFill. #hResizing:. #spaceFill. #layout:. #center. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}. #update:. #getImage}! ! !MorphicImageAdapter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/11/2014 22:22'! adapt: aComposableModel super adapt: aComposableModel. widget on: #click send: #click to: self! ! !MorphicImageAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/11/2014 22:23'! click ^ self model action value! ! !MorphicImageAdapter methodsFor: 'widget protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 22:08' prior: 76245891! getImage ^ self model image! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/5/2014 16:13' prior: 78266354! shortcutText | shortcut platform string | shortcut := self shortcut. shortcut isString ifTrue: [ shortcut := self defaultModifierShortcut ]. shortcut ifNil: [ ^ nil ]. platform := Smalltalk os platformFamily. shortcut combinationsDo: [ :each | (each platform = Smalltalk os platformFamily) ifTrue: [ shortcut := each ] ]. string := '⌘⇧'. ^ (platform = #MacOSX and: [ (StandardFonts menuFont hasGlyphsForAll: string) and: [ string allSatisfy: [ :c | (StandardFonts menuFont characterFormAt: c) width~= 0 ]]]) ifFalse: [ shortcut shortcut printString ] ifTrue: [ String streamContents: [:stream | shortcut shortcut prettyPrintOn: stream ] ]! ! !TextMorph commentStamp: 'MarcusDenker 2/14/2010 22:24' prior: 80038098! TextMorphs support display of text with emphasis. They also support reasonable text-editing capabilities, as well as embedded hot links, and the ability to embed submorphs in the text. Late in life, TextMorph was made a subclass of BorderedMorph to provide border and background color if desired. In order to keep things compatible, protocols have been redirected so that color (preferably textColor) relates to the text, and backgroundColor relates to the inner fill color. Text display is clipped to the innerBounds of the rectangle, and text composition is normally performed within a rectangle which is innerBounds inset by the margins parameter. If text has been embedded in another object, one can elect to fill the owner's shape, in which case the text will be laid out in the shape of the owner's shadow image (including any submorphs other than the text). One can also elect to have the text avoid occlusions, in which case it will avoid the bounds of any sibling morphs that appear in front of it. It may be necessary to update bounds in order for the text runaround to notice the presence of a new occluding shape. The optional autoFitContents property enables the following feature: if the text contents changes, then the bounds of the morph will be adjusted to fit the minimum rectangle that encloses the text (plus any margins specified). Similarly, any attempt to change the size of the morph will be resisted if this parameter is set. Except... If the wrapFlag parameter is true, then text will be wrapped at word boundaries based on the composition width (innerBounds insetBy: margins) width. Thus an attempt to resize the morph in autofit mode, if it changes the width, will cause the text to be recomposed with the new width, and then the bounds will be reset to the minimum enclosing rectangle. Similarly, if the text contents are changed with the wrapFlag set to true, word wrap will be performed based on the current compostion width, after which the bounds will be set (or not), based on the autoFitcontents property. Note that fonts can only be applied to the TextMorph as a whole. While you can change the size, color, and emphasis of a subsection of the text and have it apply to only that subsection, changing the font changes the font for the entire contents of the TextMorph. Still a TextMorph can be composed of several texts of different fonts | font1 font2 t1 t2 tMorph| tMorph := TextMorph new. font1 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 22)). font2 := (TextFontReference toFont: (StrikeFont familyName: 'Atlanta' size: 11)). t1 := 'this is font1' asText addAttribute: font1. t2 := ' and this is font2' asText addAttribute: font2. tMorph contents: (t1,t2). tMorph openInHand. Yet to do: Make a comprehensive control for the eyedropper, with border width and color, inner color and text color, and margin widths.! !TextMorph methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/10/2014 19:20' prior: 52796776! defaultColor ^ defaultColor ifNil: [ Color black ]! ! !TextMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/10/2014 14:28'! enabled: aBoolean aBoolean ifTrue: [ text makeAllColor: self defaultColor ] ifFalse: [ text makeAllColor: Color lightGray ]. self changed! ! !TextMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/10/2014 14:33' prior: 52816130! text: t textStyle: s "Private -- for use only in morphic duplication" text := t. defaultColor := (t attributesAt: 1) detect: [ :e | e isKindOf: TextColor ] ifNone: [ self color ]. textStyle := s. paragraph ifNotNil: [paragraph textStyle: s]! ! !TextMorph methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/10/2014 14:26' prior: 52816342! text: t textStyle: s wrap: wrap color: c predecessor: pred successor: succ "Private -- for use only in morphic duplication" text := t. defaultColor := (t attributesAt: 1) detect: [ :e | e isKindOf: TextColor ]. textStyle := s. wrapFlag := wrap. color := c. paragraph := editor := container := nil. self predecessor: pred successor: succ! ! !MorphicTextAdapter methodsFor: 'as yet unclassified ' stamp: 'BenjaminVanRyseghem 1/5/2014 14:18'! hasEditingConflicts: aBoolean self widgetDo: [ :w | w hasEditingConflicts: aBoolean ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 12:16' prior: 69668147! hasUnacceptedEdits: aBoolean self model hasUnacceptedEdits: aBoolean! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 14:06' prior: 79705557! notify: errorMessage at: position in: sourceCode self widgetDo: [ :w | w notify: errorMessage at: position in: sourceCode ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 12:32'! pendingText ^ self widgetDo: [ :w | w text ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 12:32'! pendingText: aText self widgetDo: [ :w | w setText: aText. w hasUnacceptedEdits: true ]! ! !MorphicTextAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 12:16'! setHasUnacceptedEdits: aBoolean self widgetDo: [ :w | w basicHasUnacceptedEdits: aBoolean ]! ! !KMCategory methodsFor: 'binding' stamp: 'BenjaminVanRyseghem 1/12/2014 22:38' prior: 76980264! keymapForShortcut: aShortcut ^ self allEntries keymapForShortcut: aShortcut! ! !KMCategory methodsFor: 'associating' stamp: 'BenjaminVanRyseghem 1/12/2014 22:50' prior: 76980433! removeKeymapEntry: aKeymapEntry [ self commonEntries remove: aKeymapEntry ] on: Error do: [ self platformEntries remove: aKeymapEntry ]! ! !MorphicListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/10/2014 09:59' prior: 69649707! defaultSpec ^ {#PluggableListMorph. #color:. Color white. #model:. #model. #getListSizeSelector:. #listSize. #autoDeselect:. #(model autoDeselect). #getIndexSelector:. #getIndex. #setIndexSelector:. #setIndex:. #getSelectionListSelector:. #getSelectionStateFor:. #setSelectionListSelector:. #setSelectionStateFor:at:. #backgroundColoringBlockOrSelector:. #backgroundColorFor:at:. #getListElementSelector:. #listElementAt:. #resetListSelector:. #resetListSelection. #getMenuSelector:. #menu:shifted:. #setMultipleSelection:. {#model. #multiSelection}. #wrapSelector:. #wrapItem:index:. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #hResizing:. #spaceFill. #vResizing:. #spaceFill}! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/10/2014 09:57'! autoDeselect ^ self model autoDeselect! ! !MorphicListAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 09:53'! autoDeselect: aBoolean self widgetDo: [ :w | w autoDeselect: aBoolean ]! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/6/2014 15:50'! backgroundColorFor: anItem ^ self model backgroundColorFor: anItem! ! !MorphicListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/6/2014 16:04'! backgroundColorFor: anItem at: index ^ self model backgroundColorFor: anItem at: index! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/12/2014 17:05' prior: 76510360! initialExtent ^ initialExtent value ifNil: [ self model ifNil: [ self defaultInitialExtent ] ifNotNil: [:m | m extent ifNil: [ m initialExtent ifNil: [ self defaultInitialExtent ] ] ] ]! ! !MenuGroupModel methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 1/11/2014 20:11'! isEmpty ^ items isEmpty! ! !PluggableTextMorph methodsFor: 'styling' stamp: 'BenjaminVanRyseghem 1/10/2014 12:13'! basicHasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " Smalltalk tools userManager canEditCode ifFalse: [ aBoolean ifTrue: [ ^ self ]]. aBoolean == hasUnacceptedEdits ifFalse: [hasUnacceptedEdits := aBoolean. self changed]. aBoolean ifFalse: [hasEditingConflicts := false]. self okToStyle ifTrue: [ self styler styleInBackgroundProcess: textMorph contents]! ! !PluggableTextMorph methodsFor: 'styling' stamp: 'BenjaminVanRyseghem 1/10/2014 12:19' prior: 38071494! hasUnacceptedEdits: aBoolean "Set the hasUnacceptedEdits flag to the given value. " (model respondsTo: #hasUnacceptedEdits:) ifTrue: [ model hasUnacceptedEdits: aBoolean ] ifFalse: [ self basicHasUnacceptedEdits: aBoolean ]! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/12/2014 23:05'! extensionCategoriesForClass: aClass ^ self package extensionCategoriesForClass: aClass! ! !RPackageTag methodsFor: 'testing' stamp: 'EstebanLorenzano 1/12/2014 23:06'! includesClass: aClass ^ self hasClassNamed: aClass name! ! !MorphicMenuAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/11/2014 20:11' prior: 76857673! menuGroups ^ self model menuGroups select: [:e | e isEmpty not ]! ! !MorphicMenuAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 17:29' prior: 79706566! openAt: aPoint self widgetDo: [ :w | w invokeAt: (aPoint + (2@7)) in: World allowKeyboard: true ]! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/11/2014 22:04' prior: 77557696! initializeBindings "This implementation is stupid, but it exposes all the container which need to be bound" bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DiffAdapter put: #MorphicDiffAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #ImageAdapter put: #MorphicImageAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #MenuAdapter put: #MorphicMenuAdapter; at: #MenuGroupAdapter put: #MorphicMenuGroupAdapter; at: #MenuItemAdapter put: #MorphicMenuItemAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #TreeColumnAdapter put: #MorphicTreeColumnAdapter; at: #TreeNodeAdapter put: #MorphicTreeNodeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !KMDispatcher methodsFor: 'building' stamp: 'BenjaminVanRyseghem 1/12/2014 22:40' prior: 76979842! removeKeyCombination: aShortcut | keymap removalTarget | removalTarget := self directKeymaps. keymap := self keymapForShortcut: aShortcut. keymap ifNil: [ self targets do: [ :e | (e keymapForShortcut: aShortcut) ifNotNil: [ :s | removalTarget := e category. keymap := s ] ] ]. keymap ifNil: [ ^ self ]. removalTarget removeKeymapEntry: keymap! ! !TextModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/5/2014 14:17' prior: 69523495! hasEditingConflicts: aBoolean "Set if the text zone has editing conflicts" ^ self changed: #hasEditingConflicts: with: { aBoolean }! ! !TextModel methodsFor: 'protocol-errors' stamp: 'BenjaminVanRyseghem 1/5/2014 14:05' prior: 79706178! notify: errorMessage at: position in: sourceCode self changed: #notify:at:in: with: { errorMessage . position . sourceCode }! ! !TextModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 1/10/2014 12:30' prior: 69525855! pendingText "Return the current pending text" ^ self detectMorphicAdapterDo: [ :w | w pendingText ] ifNone: [ self getText ]! ! !TextModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 1/10/2014 12:31' prior: 69526090! pendingText: aText "Set the pending text. Do no accept it" self detectMorphicAdapterDo: [ :w | w pendingText: aText ] ifNone: [ self text: aText ]! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/10/2014 12:16' prior: 77681534! registerEvents textHolder whenChangedDo: [ self changed: #getText ]. readSelectionHolder whenChangedDo: [ self changed: #readSelection ]. enabledHolder whenChangedDo: [ :bool | self changed: #enabled: with: { bool } ]. hasUnacceptedEdits whenChangedDo: [ :bool | self changed: #setHasUnacceptedEdits: with: { bool } ]. selection whenChangedDo: [:block | self changed: #setSelectionFromModel: with: { block value } ]. scrollValue whenChangedDo: [ :newPosition | self changed: #setScrollValue: with: { newPosition } ]. autoAccept whenChangedDo: [:bool | self changed: #autoAccept: with: { bool } ]. wantsVisualFeedback whenChangedDo: [ :bool | self changed: #changed with: #() ]. askBeforeDiscardingEdits whenChangedDo: [ :bool | self changed: #askBeforeDiscardingEdits: with: { bool } ].! ! !MenuItemModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/10/2014 15:19' prior: 76852013! performMenuActionWith: aMenuItem | en | en := self enabled. en isBlock ifTrue: [ en := en value ]. en ifFalse: [ ^ self ]. action value cull: aMenuItem! ! !KMCategoryBinding methodsFor: 'binding' stamp: 'BenjaminVanRyseghem 1/12/2014 22:36'! keymapForShortcut: aKey ^ category keymapForShortcut: aKey! ! !MorphicButtonAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/5/2014 15:52' prior: 78722838! defaultSpec ^ {#PluggableButtonMorph. #color:. Color white. #on:getState:action:label:menu:. #model. #state. #action. #label. nil. #getEnabledSelector:. #enabled. #getMenuSelector:. #menu:. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #askBeforeChanging:. #(model askBeforeChanging). #setBalloonText:. { #model . #help}. #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #eventHandler:. { #EventHandler. #on:send:to:. #keyStroke. #keyStroke:fromMorph:. #model }}! ! !MorphicButtonAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 1/10/2014 14:35'! menu: aMenu | menuModel | menuModel := self model menu. menuModel isBlock ifTrue: [ menuModel := menuModel value ]. ^ menuModel buildWithSpec! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 1/10/2014 12:29'! detectMorphicAdapterDo: aBlock ^ self dependents detect: [:e | e isMorphicAdapter ] ifFound: aBlock! ! !ComposableModel methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 1/10/2014 12:29'! detectMorphicAdapterDo: doBlock ifNone: aBlock ^ self dependents detect: [:e | e isMorphicAdapter ] ifFound: doBlock ifNone: aBlock! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/12/2014 17:01' prior: 38031240! ensureExtentFor: widget self extent ifNil: [ self initialExtent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ] ] ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]. ! ! !ComposableModel methodsFor: 'widgets' stamp: 'BenjaminVanRyseghem 1/11/2014 22:18'! newImage ^ self instantiate: ImageModel! ! !ComposableModel methodsFor: 'private-focus' stamp: 'BenjaminVanRyseghem 1/12/2014 16:41' prior: 76967623! takeKeyboardFocus self focusOrder ifNotEmpty:[:focus | ^ focus first takeKeyboardFocus ]. ^ self changed: #takeKeyboardFocus with: #()! ! ImageModel class removeSelector: #title! "Athens-Morphic"! "Growl"! "Keymapping-Core"! "Morphic-Base"! "Polymorph-Widgets"! "RPackage-Core"! "Spec-Core"! "Spec-Debugger"! "Spec-MorphicAdapters"! "Tools"! ----End fileIn----! ----QUIT----2014-01-13T11:07:12.450206+01:00 Pharo.image priorSource: 29691792! ----STARTUP----2014-01-13T11:13:07.418814+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-13T11:13:07.672813+01:00 Pharo-30691.image priorSource: 29737763! ----STARTUP----2014-01-14T10:06:57.756711+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/14/2014 10:04' prior: 80023745! commentForCurrentUpdate ^ '10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 12638 Does not update modified method on class side https://pharo.fogbugz.com/f/cases/12638 12634 Update https://pharo.fogbugz.com/f/cases/12634 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/14/2014 10:04'! script345 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1709.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.652.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1004.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/14/2014 10:04'! update30692 "self new update30692" self withUpdateLog: '10578 Improve default Configuration Template https://pharo.fogbugz.com/f/cases/10578 12638 Does not update modified method on class side https://pharo.fogbugz.com/f/cases/12638 12634 Update https://pharo.fogbugz.com/f/cases/12634 '. self loadTogether: self script345 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'ChristopheDemarey 1/13/2014 14:27' prior: 79885615! version10: spec "The name for this version is solely defined by the following pragma:" "Baselines are used to define more complex setups for your project. If you want to use external projects and have fine-graind control of the dependencies between packages use the #imports: part. See the #baseline10: for more details." "Using #for:do: with the #common release specifier the following version declaration is valid for all platforms." spec for: #common do: [ spec description: 'Version 1.0 the current stable release'; blessing: #release; author: 'John Doe'; timestamp: '2013-05-01'. "Specify the versions for each package and external project defined in the baseline, here the 1.0-baseline defined in the baseline10 method." spec "For standard Monticello packages simply refere to the full version name without the extension:" package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.52'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.73'; "External projects versions are specified using #project:with:. Note the project name referes to the name used in the Metacello declaration. FuelMetalevel is defined in the #fuelMetalevel: method." project: 'FuelMetalevel' with: #stable ]. "If you want to specify different version on other platforms add another #for:do: block with a different version identifier."! ! !MetacelloConfigTemplate methodsFor: 'versions' stamp: 'ChristopheDemarey 1/13/2014 14:27' prior: 79887106! versionDevelopment: spec "version specification for the current development branch, see #version10 for a complete explanation of a version declaration. In this case the 'dev' version uses the same baselin as version '1.0':" "Update this configuration regulrarly with intermediate releases. If a version is more stable or should stay accessible copy this 'dev' definition and give it a proper version name on its own. For example, in this case you might want to split a new version '1.1' by copying over this definition." spec for: #common do: [ spec description: 'Development Version'; blessing: #development; author: 'John Doe'; timestamp: '2013-05-09'. spec package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.152'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.173'; "note that for the 'dev' version we rely on the #development version of the external FuleMetalevel project" project: 'FuelMetalevel' with: #development ].! ! !NautilusUI methodsFor: 'source code area' stamp: 'NicolaiHess 1/13/2014 13:38' prior: 47962469! methodModified: anAnnouncement | collection nonMetaMethodClass | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. collection := self getList2. nonMetaMethodClass:=anAnnouncement methodClass. self showInstance ifFalse:[nonMetaMethodClass:=nonMetaMethodClass theNonMetaClass]. ((collection includes: nonMetaMethodClass) or: [ anAnnouncement methodClass users includes: self selectedClass ]) ifTrue: [ | method selectedMethod oldMethod | method := anAnnouncement newMethod. selectedMethod := self selectedMethod. self removeFromMethodsIconsCache: method. method isTestMethod ifTrue: [ "Should update class icon" ClassesIconsCache removeKey: method methodClass ifAbsent: []]. self updateClassView. oldMethod := anAnnouncement oldMethod. (selectedMethod = oldMethod or: [ oldMethod hasBreakpoint and: [ selectedMethod methodClass = oldMethod methodClass and: [ selectedMethod selector = oldMethod selector ]]]) ifTrue: [ sourceTextArea hasUnacceptedEdits ifTrue: [ | sourceCode | sourceCode := sourceTextArea text. self forceSelectedMethod: method. self update. self highlightCategory: method. sourceTextArea setText: sourceCode. sourceTextArea hasEditingConflicts: true. sourceTextArea update: #codeChangedElsewhere ] ifFalse: [ self selectedMethod: method. self update ]]]! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/13/2014 09:17' prior: 80068543! ensureExtentFor: widget self extent ifNil: [ self initialExtent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ] ] ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]. ! ! DynamicComposableModel removeSelector: #ensureExtentFor:! "Metacello-MC"! "Nautilus"! "Spec-Core"! ----End fileIn----! ----QUIT----2014-01-14T10:07:05.320714+01:00 Pharo.image priorSource: 29737960! ----STARTUP----2014-01-14T10:12:37.965755+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-14T10:12:38.225753+01:00 Pharo-30692.image priorSource: 29754442! ----STARTUP----2014-01-14T13:41:55.14859+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/14/2014 13:38' prior: 80069906! commentForCurrentUpdate ^ '7542 NB system example Part1: add Class>>#newAnonymousSubclass https://pharo.fogbugz.com/f/cases/7542 12605 promptForCancel is sometimes unclosable https://pharo.fogbugz.com/f/cases/12605 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/14/2014 13:38'! script346 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1710.mcz KernelTests-MarcusDenker.612.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.652.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/14/2014 13:39'! update30693 "self new update30693" self withUpdateLog: '7542 NB system example Part1: add Class>>#newAnonymousSubclass https://pharo.fogbugz.com/f/cases/7542 12605 promptForCancel is sometimes unclosable https://pharo.fogbugz.com/f/cases/12605 '. self loadTogether: self script346 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CheckboxMorph methodsFor: 'initialization' stamp: 'NicolaiHess 1/14/2014 08:56' prior: 77421317! initialize "Initialize the receiver." super initialize. labelClickable := true. self borderWidth: 2; "space for focus" borderColor: Color transparent; enabled: true; changeTableLayout; listDirection: #leftToRight; wrapCentering: #center; cellInset: 4; labelMorph: self newLabelMorph; buttonMorph: self newButtonMorph; on: #click send: #updateButton: to: self; on: #mouseMove send: #updateButton: to: self; on: #mouseUp send: #updateButton: to: self! ! !Class methodsFor: 'subclass creation' stamp: 'IgorStasenko 12/3/2013 13:35'! newAnonymousSubclass ^ AnonymousClassInstaller make: [ :builder | builder superclass: self ].! ! "Kernel"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2014-01-14T13:42:06.040607+01:00 Pharo.image priorSource: 29754639! ----STARTUP----2014-01-14T13:47:31.900324+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-14T13:47:32.252319+01:00 Pharo-30693.image priorSource: 29767131! ----STARTUP----2014-01-14T14:55:53.248955+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/14/2014 14:52' prior: 80086584! commentForCurrentUpdate ^ '12644 fix ClassTest>>#testClassRespectsPolymorphismWithTrait: add exception for anonymous class https://pharo.fogbugz.com/f/cases/12644'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/14/2014 14:52'! script347 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1710.mcz KernelTests-MarcusDenker.614.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.142.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.74.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.43.mcz Nautilus-MarcusDenker.652.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/14/2014 14:53'! update30694 "self new update30694" self withUpdateLog: '12644 fix ClassTest>>#testClassRespectsPolymorphismWithTrait: add exception for anonymous class https://pharo.fogbugz.com/f/cases/12644'. self loadTogether: self script347 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassTest methodsFor: 'testing' stamp: 'MarcusDenker 1/14/2014 13:50' prior: 79272171! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #getName #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #getName #baseClass #basicLocalSelectors #classClass isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: #newAnonymousSubclass ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #systemIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! "KernelTests"! ----End fileIn----! ----QUIT----2014-01-14T14:55:59.815492+01:00 Pharo.image priorSource: 29767328! ----STARTUP----2014-01-14T15:01:26.64302+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-14T15:01:27.257018+01:00 Pharo-30694.image priorSource: 29781181! ----STARTUP----2014-01-14T15:59:53.253563+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/14/2014 15:56' prior: 80099274! commentForCurrentUpdate ^ '7542 NB system example Part 2: Sync NB with Repo https://pharo.fogbugz.com/f/cases/7542'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/14/2014 15:56'! script348 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1710.mcz KernelTests-MarcusDenker.614.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.78.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.652.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/14/2014 15:56'! update30695 "self new update30695" self withUpdateLog: '7542 NB system example Part 2: Sync NB with Repo https://pharo.fogbugz.com/f/cases/7542'. self loadTogether: self script348 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NBWin32Point class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/7/2013 12:42'! fieldsDesc " self rebuildFieldAccessors " ^ #( long x; long y; )! ! !NBWin32Point class methodsFor: 'instance creation' stamp: 'TorstenBergmann 8/7/2013 13:08'! x: x y: y ^(self new) x: x; y: y; yourself! ! !NBWin32Rectangle class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 20:32'! fieldsDesc "self rebuildFieldAccessors " ^ #( long left; long top; long right; long bottom; )! ! !NBExternalHandle methodsFor: 'comparing' stamp: 'TorstenBergmann 8/13/2013 20:03'! = anotherExternalHandle ^self species = anotherExternalHandle species and: [ self value = anotherExternalHandle value ] ! ! !NBExternalAddressTests methodsFor: 'tests' stamp: 'IgorStasenko 8/4/2011 08:25' prior: 48309318! testAddressAndStruct | struct addr string | struct := NBTestStructure2 new. self assert: struct addr class == NBExternalAddress . addr := NativeBoost allocate: 10. [ addr writeString: 'abcde'. struct addr: addr. self assert: addr = struct addr. string := struct addr readString . ] ensure: [ NativeBoost free: addr ]. self assert: string = 'abcde' ! ! !NBExternalAddressTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/13/2010 22:51' prior: 48309800! testMemoryAccess | addr | addr := NativeBoost allocate: 10. [ 1 to: 10 do: [:i | addr byteAt: i-1 put: i ]. 1 to: 10 do: [:i | self assert: (addr byteAt: i-1) = i ]. ] ensure: [ NativeBoost free: addr ] ! ! !NBExternalAddressTests methodsFor: 'tests' stamp: 'IgorStasenko 8/4/2011 07:29' prior: 48310122! testStringAccess | addr string | addr := NativeBoost allocate: 10. [ addr writeString: 'abcde'. string := addr readString. ] ensure: [ NativeBoost free: addr ]. self assert: string = 'abcde' ! ! !NBExternalAddressTests methodsFor: 'tests' stamp: 'IgorStasenko 7/15/2013 15:47' prior: 48310429! testStructCopy | struct addr struct2 | [ struct := NBTestStructure new. struct byte: 5; long: 10; short: 20. addr := NativeBoost allocate: NBTestStructure instanceSize. NativeBoost memCopy: struct address to: addr size: NBTestStructure instanceSize. struct2 := NBTestStructure fromPointer: addr. self assert: struct2 byte = 5. self assert: struct2 long = 10. self assert: struct2 short = 20. ] ensure: [ NativeBoost free: addr ] ! ! !NBExternalHeapManagerTests methodsFor: 'accessing' stamp: 'IgorStasenko 8/5/2011 07:20' prior: 48321170! newHeap ^ NBMockExternalHeapManager new! ! !NBExternalHeapManagerTests methodsFor: 'tests' stamp: 'FernandoOlivero 10/5/2010 20:47' prior: 48321319! testAllocate " self new testAllocate " | heap address size | size := 100. heap := self newHeap. address := heap allocate: size. self assert: ( heap isValidAddress: address size: size ) . self assert: heap totalAllocatedMemory = size. self assert: heap numPages = 1 . self assert: heap numAllocatedBlocks = 1. heap free: address. self assert: heap numAllocatedBlocks = 0. self assert: heap numPages = 0 . self assert: heap numBlocks = 0 . self assert: (heap isValidAddress: address size: size) not . self assert: heap totalAllocatedMemory = 0. ! ! !NBExternalHeapManagerTests methodsFor: 'tests' stamp: 'FernandoOlivero 10/5/2010 20:45' prior: 48322014! testAllocate2 " self new testAllocate2 " | heap addr1 addr2 | heap := self newHeap. addr1 := heap allocate: 1. addr2 := heap allocate: 2. self assert: heap totalAllocatedMemory = 3 . self assert: heap numAllocatedBlocks = 2 . heap free: addr1. self assert: heap numAllocatedBlocks = 1. self assert: heap totalAllocatedMemory = 2 . heap free: addr2. self assert: heap numPages = 0 . self assert: heap numBlocks = 0 . self assert: heap totalAllocatedMemory = 0 . ! ! !NBFFICalloutTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 17:15' prior: 48339941! arraySize2: array with: param2 ^ self nbCallout function: #(ulong (NBByteArraySize array, long param2)) emit: [:gen | "pop the array size" gen asm pop: gen asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 17:15' prior: 48340283! arraySize: array ^ self nbCallout function: #(ulong (NBByteArraySize array)) emit: [:gen | "pop the array size" gen asm pop: gen asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'private' stamp: 'IgorStasenko 12/3/2013 03:02'! passString: str "see testPrepareArgumentsKeepsStackAligned" ^ self nbCallout function: #( uint (String str) ) emit: [ :gen :proxy :asm | asm mov: asm ESP to: asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 17:16' prior: 48342850! returnReceiver: x arg2: y ^ self nbCallout function: #( oop (oop self , oop x, oop y)) emit: [ :gen :proxy :asm | proxy receiver ] ! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 12/3/2013 02:52'! testPrepareArgumentsKeepsStackAligned | sp | sp := self passString: '12345'. self assert: (sp \\ NativeBoost forCurrentPlatform stackAlignment) = 0. ! ! !NBFFIExternalStructTests methodsFor: 'tests' stamp: 'IgorStasenko 7/12/2013 15:00' prior: 48350918! testStructAccess | struct | struct := NBTestStructure new. self assert: struct isExternal not. struct byte: 10. struct short: -20. struct long: 100. struct float: 1.0. struct double: 2.0. struct int64: 123456789101112. self assert: (struct byte = 10). self assert: (struct short = -20). self assert: (struct long = 100). self assert: (struct float = 1.0). self assert: (struct double = 2.0). self assert: (struct int64 = 123456789101112). ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:39' prior: 48351620! return4Bytes: asm NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm pop: asm EAX] ifFalse:[ asm pop: asm EAX; pop: asm EDX; mov: asm EDX to: asm EAX ptr; push: asm EAX]! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'IgorStasenko 12/3/2013 02:59' prior: 67498019! returnUnion1Byte ^ self nbCallout function: #(NBTestUnion1Byte () ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm mov: 42 to: asm EAX] ifFalse:[ asm mov: asm ESP ptr to: asm EAX; mov: 42 to: asm EAX ptr32] ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:39' prior: 48352411! returnUnionPointer: aPointer ^ self nbCallout function: #(NBTestUnion2Pointers (void * aPointer) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:39' prior: 48352744! returnUnionUnionChar: aChar ^ self nbCallout function: #(NBTestUnionWithUnion (char aChar) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:34' prior: 48353072! returnUnionUnionDouble: aN ^ self nbCallout function: #(NBTestUnionWithUnion (double aN) ) emit: [:gen :proxy :asm | NativeBoost platformId ~= NativeBoostConstants linux32PlatformId ifTrue:[ asm pop: asm EAX; pop: asm EDX.] ifFalse:[ asm pop: asm EAX; pop: asm ECX; pop: asm EDX; mov: asm ECX to: asm EAX ptr; mov: asm EDX to: asm EAX ptr + 4; push: asm EAX. ] ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:39' prior: 48353695! returnUnionUnionInt: aN ^ self nbCallout function: #(NBTestUnionWithUnion (int aN) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/29/2013 19:39' prior: 48354015! returnUnionWithCallback: aCallback ^ self nbCallout function: #(NBTestUnionWithCallback (NBQSortCallback aCallback) ) emit: [:gen :proxy :asm | self return4Bytes: asm. ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/19/2013 18:20' prior: 48354368! returnUnionWithStructChar: aChar ^ self nbCallout function: #(NBTestUnionWithStructure (char aChar) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with int" mov: asm DL to: asm EAX ptr8; push: asm EAX ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/19/2013 18:15' prior: 48354801! returnUnionWithStructInt: anInt ^ self nbCallout function: #(NBTestUnionWithStructure (int anInt) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with int" mov: asm EDX to: asm EAX ptr; push: asm EAX ] ! ! !NBFFIExternalUnionTests methodsFor: 'primitives' stamp: 'CiprianTeodorov 1/19/2013 18:51' prior: 48355232! returnUnionWithStructStruct: aStructure ^ self nbCallout function: #(NBTestUnionWithStructure (NBTestStructure9bytes aStructure) ) emit: [:gen :proxy :asm | asm pop: asm EAX; pop: asm EDX; "fill union with structure" mov: asm EDX to: asm EAX ptr; pop: asm EDX; mov: asm EDX to: asm EAX ptr + 4; pop: asm EDX; mov: asm EDX to: asm EAX ptr + 8; push: asm EAX. ] ! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:42' prior: 48355813! testReturnUnion1Byte | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnion1Byte. s := self returnUnion1Byte. self assert: s field1 = 42. self assert: s field2 = 42! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:42' prior: 48356103! testReturnUnion2Pointers | s ptr| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionPointer:. ptr := NBExternalAddress fromString: 'abcd'. s := self returnUnionPointer: ptr. self assert: s addr1 = ptr . self assert: s addr2 = ptr . self assert: s addr1 readString = 'abcd'.! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48356513! testReturnUnionUnionChar | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionChar:. s := self returnUnionUnionChar: $,. self assert: s x = $,! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48356786! testReturnUnionUnionDouble | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionDouble:. s := self returnUnionUnionDouble: 2.3. self assert: (s z closeTo: 2.3)! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48357077! testReturnUnionUnionInt | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionUnionInt:. s := self returnUnionUnionInt: 2344. self assert: s union x = 2344! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48357357! testReturnUnionWithCallback | s callback| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithCallback:. callback := NBQSortCallback on: [:a :b | a < b]. s := self returnUnionWithCallback: callback. self assert: s callback trunk = callback trunk.! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48357734! testReturnUnionWithStructChar | s | NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructChar:. s := self returnUnionWithStructChar: $,. self assert: s x = $,! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:43' prior: 48358022! testReturnUnionWithStructInt |s| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructInt:. s := self returnUnionWithStructInt: 300. self assert: s z = 300! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:44' prior: 48358307! testReturnUnionWithStructStruct | s struct| NBNativeCodeGen removeNativeCodeFrom: self class >> #returnUnionWithStructStruct:. struct := NBTestStructure9bytes new. struct x: 2345. struct y: 6789. struct field: $+. s := self returnUnionWithStructStruct: struct. self assert: s struct x = struct x. self assert: s struct y = struct y. self assert: s struct field = struct field.! ! !NBFFIExternalUnionTests methodsFor: 'tests' stamp: 'CiprianTeodorov 5/19/2013 03:44' prior: 48358812! testUnionWithUnion |u1 u2| u1 := NBTestUnionWithUnion new. u2 := NBTestUnionIntSize new. u2 y: 300. self assert: u1 union x = 0. self assert: u1 union y = 0. self assert: u1 union field = Character null. u1 union: u2. self assert: u1 union x = 300. self assert: u1 union y = 300. self assert: u1 union field = $,.! ! !NBFnSpecParserTest methodsFor: 'accessing' stamp: 'cipt 10/26/2012 19:19' prior: 48361679! argName: argName indirectIndex: anIndex type: typeName ptrArity: ptrArity ^ #argument! ! !NBInterpreterProxyTest methodsFor: 'primitives' stamp: 'IgorStasenko 11/24/2012 17:20' prior: 48365126! primCheckStackPointer "should answer 0" ^ self nbCallout function: #(uint () ) emit: [:gen :proxy :asm | | get | proxy getStackPointer. asm mov: NBInterpreterProxy stackPointerAddress asUImm32 to: asm ECX; mov: asm ECX ptr to: asm ECX; sub: asm EAX with: asm ECX ] ! ! !NBInterpreterProxyTest methodsFor: 'primitives' stamp: 'IgorStasenko 11/24/2012 17:21' prior: 48365595! primCheckStackPointer2 "should answer 0" ^ self nbCallout function: #(uint () ) emit: [:gen :proxy :asm | | get | proxy getStackPointer. asm mov: NBInterpreterProxy stackPointerAddress asUImm32 ptr32 to: asm ECX; sub: asm EAX with: asm ECX ] ! ! !NBInterpreterProxyTest methodsFor: 'tests' stamp: 'IgorStasenko 5/28/2012 04:42' prior: 48366047! testStackPointer self assert: self primCheckStackPointer=0 ! ! !NBInterpreterProxyTest methodsFor: 'tests' stamp: 'IgorStasenko 5/28/2012 05:22' prior: 48366211! testStackPointer2 self assert: self primCheckStackPointer2=0 ! ! !NBMacSpecificTest class methodsFor: 'testing' stamp: 'TorstenBergmann 8/7/2013 12:11'! isAbstract "only run test subclasses on Mac" ^(self name = #NBMacSpecificTest) or: [ OSPlatform isMacOS not ]! ! !NBUnixSpecificTest class methodsFor: 'testing' stamp: 'TorstenBergmann 8/7/2013 12:12'! isAbstract "only run test subclasses on Unix" ^(self name = #NBUnixSpecificTest) or: [ OSPlatform isUnix not ]! ! !NBWin32PointTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 13:16'! testInstanceCreation |p| p := (NBWin32Point x: 1 y: 5). self assert: p x = 1. self assert: p y = 5! ! !NBWin32ShellTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:27'! testGetCommandLine self assert: NBWin32Shell getCommandLine notEmpty ! ! !NBWin32ShellTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:27'! testGetComputerName self assert: NBWin32Shell getComputerName notEmpty ! ! !NBWin32ShellTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:30'! testGetDriveType self assert: (NBWin32Shell getDriveType: 'C:\') = #DRIVE_FIXED! ! !NBWin32ShellTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:28'! testNoDebuggerPresentByDefault self deny: NBWin32Shell isDebuggerPresent ! ! !NBWin32ShellTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:31'! testNumberOfProcessors self assert: NBWin32Shell getNumberOfProcessors asInteger > 0! ! !NBWin32SpecificTest class methodsFor: 'testing' stamp: 'CamilloBruni 9/10/2013 14:19'! isAbstract "only run test subclasses on Windows" ^(self name = #NBWin32SpecificTest) or: [ Smalltalk os isWin32 not ]! ! !NBWin32WindowTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 11:59'! testGetDesktopWindow self assert: NBWin32Window getDesktopWindow handle > 0! ! !NBWin32WindowTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:26'! testIsEnabled self assert: NBWin32Window getDesktopWindow isEnabled! ! !NBWin32WindowTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 12:25'! testIsVisible self assert: NBWin32Window getDesktopWindow isVisible! ! !NBWin32WindowTest methodsFor: 'tests' stamp: 'TorstenBergmann 8/7/2013 13:12'! testWindowFromPoint self assert: (NBWin32Window getWindowFromPoint: (NBWin32Point x: 100 y: 100)) isWindow! ! !NBExternalArrayTest methodsFor: 'tests - class protocols' stamp: 'IgorStasenko 12/7/2012 01:22' prior: 48311111! testAccessors "make sure a generated class has accessors installed " | cls m_at m_atput | cls := self apiClass ofType: 'int32' . self assert: (cls methodDict includesKey: #at: ). self assert: (cls methodDict includesKey: #at:put: ). m_at := cls compiledMethodAt: #at: . m_atput := cls compiledMethodAt: #at:put: . "make sure they are properly installed" self assert: m_at methodClass == cls. self assert: m_atput methodClass == cls. "make sure they are not same as in superclass " self assert: m_at ~~ (self apiClass compiledMethodAt: #at: ). self assert: m_atput ~~ (self apiClass compiledMethodAt: #at:put: ). ! ! !NBExternalArrayTest methodsFor: 'tests - class protocols' stamp: 'IgorStasenko 12/7/2012 02:22' prior: 48311853! testAnonymousClassCreation | cls | cls := self apiClass ofType: 'int32' . "should get an anonymous subclass" self assert: (cls inheritsFrom: self apiClass). ".. with properly initialized values" self assert: cls elementType equals: 'int32'. self assert: cls elementSize = 4 . " and, of course, they should not be the same object" self assert: cls ~~ self apiClass. ! ! !NBExternalArrayTest methodsFor: 'tests - instances' stamp: 'IgorStasenko 12/7/2012 02:22' prior: 48312338! testBasicProtocol | cls array | cls := self apiClass ofType: 'int32' . array := cls new: 10. self assert: array size equals: 10. "instantiating with #new: should create an array in object memory " self assert: array isExternal equals: false. self assert: (array at: 1 put: 42) equals: 42. self assert: (array at: 1) equals: 42. self assert: (array at: 10 put: 420) equals: 420. self assert: (array at: 10) = 420. ! ! !NBExternalArrayTest methodsFor: 'tests - instances' stamp: 'IgorStasenko 12/7/2012 02:45' prior: 48312876! testExternalArray | cls array | cls := self apiClass ofType: 'int32' . [ array := cls externalNew: 10. self assert: array size equals: 10. "instantiating with #externalNew: should create an array in external memory " self assert: array isExternal equals: true. self assert: (array at: 1 put: 42) equals: 42. self assert: (array at: 1) equals: 42. self assert: (array at: 10 put: 420) equals: 420. self assert: (array at: 10) = 420. ] ensure: [ array free ] ! ! !NBExternalArrayTest methodsFor: 'tests - instances' stamp: 'IgorStasenko 12/7/2012 02:44' prior: 48313458! testExternalCopy | cls array copy | cls := self apiClass ofType: 'int32' . [ array := cls externalNew: 10. array at: 1 put: 2. array at: 2 put: 3. copy := array copy. "#copy of external array should create a copy in object memory heap " self assert: copy isExternal equals: false. "and , of course, copies should be equal " self assert: array = copy. ] ensure: [ array free ] ! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'Igor.Stasenko 9/26/2010 05:38' prior: 48322616! benchQSort | bytes memBytes callback callback2 times | bytes := #[ 2 5 3 10 39 4 80 203 94 215 30 60 80 20 1 4 0 ]. memBytes := NativeBoost allocate: bytes size. callback := self createNativeCallback. callback2 := NBQSortCallback on: [:a :b | (a byteAt: 0) - (b byteAt: 0) ]. [ callback install. times := { [ bytes copy sort ]. [ self primNativeQSort: bytes copy compare: callback address ]. [ NativeBoost memCopy: bytes to: memBytes size: bytes size. self primStQSort: memBytes len: bytes size compare: callback2 ]. } collect: [:block | [ 100000 timesRepeat: block ] timeToRun ]. ] ensure: [ callback uninstall. NativeBoost free: memBytes ]. ^ times ! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:26' prior: 48323417! checkCallback: arr1 with: arr2 compare: nativeCallback ^ self nbCallout function: #(long (NBExternalAddress nativeCallback, byte* arr1, byte* arr2 )) emit: [:gen | gen asm pop: EAX; call: EAX ] ! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:26' prior: 48323789! checkCallbackAddress: nativeCallbackAddr ^ self nbCallout function: #(ulong (NBExternalAddress nativeCallbackAddr)) emit: [:gen | gen asm pop: EAX ] " options: #( - optAllowByteArraysPtr +optAllowExternalAddressPtr ) "! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:26' prior: 48324181! checkEmitFetchClass " checker for fetching the class code emitting " ^ self nbCallout function: #(oop ()) emit: [:gen | gen emitFetchClass: NBExternalAddress ]! ! !NBFFICallbackTests methodsFor: 'tests - language-side callback' stamp: 'IgorStasenko 11/24/2012 16:26' prior: 48324519! checkSTCallbackAddress: callback ^ self nbCallout function: #(void * (NBQSortCallback callback)) emit: [:gen | gen asm pop: EAX ] ! ! !NBFFICallbackTests methodsFor: 'tests - native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:36' prior: 48324821! createNativeCallback " The routine must compare the elements, then return one of the following values: < 0 elem1 less than elem2 0 elem1 equivalent to elem2 > 0 elem1 greater than elem2 " ^ NBNativeFunctionGen cdecl: #( int (byte* a, byte * b) ) emit: [:gen | | asm | asm := gen asm. asm mov: (gen arg: #b) to: EAX; mov: EAX ptr8 to: CL; mov: (gen arg: #a) to: EAX; mov: EAX ptr8 to: AL; sub: AL with: CL; movsx: EAX with: AL "sign-extend the result" ] ! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'Igor.Stasenko 5/5/2010 16:55' prior: 48325421! dummyMethod: aParam ^ aParam! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:28' prior: 48326576! readByte: array ^ self nbCallout function: #(byte (byte * array)) emit: [:gen | gen asm pop: EAX; mov: EAX ptr8 to: AL ] ! ! !NBFFICallbackTests methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:28' prior: 48326875! readByte: array at: index ^ self nbCallout function: #(byte (byte * array, ulong index)) emit: [:gen | gen asm pop: EAX; pop: ECX; add: EAX with: ECX; mov: EAX ptr8 to: AL ] ! ! !NBFFICallbackTests methodsFor: 'tests' stamp: 'IgorStasenko 6/27/2013 17:17' prior: 48327234! testCBGeneratedCode | addr trunk | addr := NBQSortCallback callbackEnterAddress asUnsignedLong. trunk := NBQSortCallback trunkCode. self assert: (trunk bytes unsignedLongAt: 1+ (trunk offsetAt: #cbEnterAddress) bigEndian: false) = addr. ! ! !NBFFICallbackTests methodsFor: 'tests - language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17' prior: 48327587! testCallbackCounter | callback orig bytes result ctr | "There was a bug in callback code, which crashed VM due to override of callgate saved method oop and return address, and GC, happened during callback" orig := #[ 2 5 55 23 67 23 ] copy. bytes := NativeBoost allocate: orig size. NativeBoost memCopy: orig to: bytes size: orig size. ctr := 0. callback := NBQSortCallback on: [:a :b | NativeBoost insideCallback ifTrue: [ ctr := ctr+ 1]. "this involves using callgate" Smalltalk garbageCollect. "this involves GC" (a byteAt: 0) - (b byteAt: 0) ]. self primStQSort: bytes len: orig size compare: callback. result := ByteArray new: orig size. NativeBoost memCopy: bytes to: result size: orig size. NativeBoost free: bytes. self assert: (ctr > 0). self assert: (orig sort = result) ! ! !NBFFICallbackTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/5/2010 17:00' prior: 48328510! testCreateContext | context | context := MethodContext sender: nil receiver: 1 method: (self class compiledMethodAt: #dummyMethod: ) arguments: #( 55 ). ^ context! ! !NBFFICallbackTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/4/2010 00:14' prior: 48328798! testEmitFetchClass self assert: (self checkEmitFetchClass == NBExternalAddress)! ! !NBFFICallbackTests methodsFor: 'tests - native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:38' prior: 48328977! testInstallCallback | callback | callback := self createNativeCallback. callback install. self assert:(callback address notNil). callback uninstall.! ! !NBFFICallbackTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/14/2010 01:03' prior: 48329232! testMemCopy | mem bytes | bytes := #[ 1 2 3 4 5 6 7 8 9 10 ]. mem := NativeBoost allocate: bytes size. [ NativeBoost memCopy: bytes to: mem size: bytes size. 1 to: bytes size do: [:i | self assert: (bytes at:i) = (mem byteAt: i-1) ]. ] ensure: [ NativeBoost free: mem ]! ! !NBFFICallbackTests methodsFor: 'tests - native callbacks' stamp: 'sig 3/30/2012 14:55' prior: 48329606! testNativeCallback | orig bytes callback | orig := #[ 2 5 3 10 39 4 80 ] copy. bytes := orig copy. callback := self createNativeCallback. [ callback install. self primNativeQSort: bytes compare: callback address. ] ensure: [ callback uninstall ]. self assert: (orig sort = bytes) ! ! !NBFFICallbackTests methodsFor: 'tests - language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17' prior: 48330009! testQSortCallbackST | callback orig bytes result | orig := #[ 2 5 3 10 39 4 80 ] copy. bytes := NativeBoost allocate: orig size. NativeBoost memCopy: orig to: bytes size: orig size. callback := NBQSortCallback on: [:a :b | (a byteAt: 0) - (b byteAt: 0) ]. self primStQSort: bytes len: orig size compare: callback. result := ByteArray new: orig size. NativeBoost memCopy: bytes to: result size: orig size. NativeBoost free: bytes. self assert: (orig sort = result) ! ! !NBFFICallbackTests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/4/2010 00:33' prior: 48330597! testReadByte | arr | arr := #(240 2 3 4 ) asByteArray. self assert: (self readByte: arr) == 240! ! !NBFFICallbackTests methodsFor: 'tests - language-side callback' stamp: 'IgorStasenko 6/27/2013 17:17' prior: 48330800! testSTCallbackInstalled | callback trunk index | callback := NBQSortCallback on: [:x :y | ]. trunk := callback trunk. index := callback index. self assert: ((NativeBoost extraRootsRegistry at: #callbacks) at: index +1) == callback. self assert: (self checkSTCallbackAddress: callback) = trunk ! ! !NBFFICallbackTests methodsFor: 'tests - native callbacks' stamp: 'Igor.Stasenko 9/26/2010 05:38' prior: 48331204! testcallbackAddress | callback addr1 addr2 | callback := self createNativeCallback. [ callback install. addr1 := callback address value. addr2 := self checkCallbackAddress: callback address. ] ensure: [ callback uninstall ]. self assert: (addr1 = addr2)! ! !NBObjectFormat32Tests methodsFor: 'primitives' stamp: 'IgorStasenko 11/24/2012 17:23' prior: 48366377! getFloatPtrOffset: aFloat "return the difference between float oop and pointer to its stored floating-point value , must be base header size" ^ self nbCallout function: #( ulong (oop aFloat, NBFloatPtr aFloat)) emit: [:gen | | asm | asm := gen asm. asm pop: asm ECX. "oop" asm pop: asm EAX. "float ptr" asm sub: asm EAX with: asm ECX ]! ! !NBObjectFormat32Tests methodsFor: 'primitives' stamp: 'IgorStasenko 11/24/2012 17:23' prior: 48366899! pushDouble: aFloat ^ self nbCallout function: #( double (double aFloat)) emit: [:gen | | asm | asm := gen asm. asm fld: asm ESP ptr64 ]! ! !NBObjectFormat32Tests methodsFor: 'primitives' stamp: 'IgorStasenko 11/24/2012 17:24' prior: 48367219! pushFloat: aFloat ^ self nbCallout function: #( double (float aFloat)) emit: [:gen | | asm | asm := gen asm. asm fld: asm ESP ptr32 ]! ! !NBObjectFormat32Tests methodsFor: 'tests' stamp: 'IgorStasenko 11/23/2011 10:46' prior: 48367537! testCompactFloats | idx format | format := NBObjectFormat32 new. idx := Smalltalk compactClassesArray indexOf: Float ifAbsent: [ ^ nil ]. idx := idx bitShift: format compactClassIndexShift. NativeBoost enableNativeCode. Float allInstances do: [:each | | oopIdx | oopIdx := (NBObjectFormat32 headerOf: each) bitAnd: format compactClassMask. self assert: (oopIdx = idx) ]! ! !NBObjectFormat32Tests methodsFor: 'tests' stamp: 'IgorStasenko 12/21/2011 14:21' prior: 48368021! testPushingFloatPointers self assert: (self getFloatPtrOffset: 10.0) = NBObjectFormat current baseHeaderSize. ! ! !NBObjectFormat32Tests methodsFor: 'tests' stamp: 'Igor.Stasenko 5/20/2010 09:19' prior: 48368235! testPushingFloats self assert: (self pushFloat: 100.0) = 100.0. self assert: (self pushDouble: 100.0) = 100.0.! ! !NativeCodeTests methodsFor: 'private' stamp: 'IgorStasenko 8/5/2011 08:22' prior: 48388587! createMoveTestCode ^ NBFFICallout new anonSpec: #( int ()); cdecl; generate: [:gen :proxy :asm | | methodOop | methodOop := gen reserveTemp. proxy primitiveMethod. asm mov: asm EAX to: methodOop. "call fullGC to trigger memory compaction" proxy fullGC. "return the difference between old primitiveMethod oop value and new one" proxy primitiveMethod. asm sub: asm EAX with: methodOop. ].! ! !NativeCodeTests methodsFor: 'private' stamp: 'Igor.Stasenko 5/2/2010 10:56' prior: 48389120! install: nativeCode into: method | trailer newMethod | trailer := CompiledMethodTrailer new. trailer nativeCode: nativeCode platformId: NativeBoost platformId sourcePointer: method trailer sourcePointer. newMethod := method copyWithTrailerBytes: trailer. method methodClass methodDict at: method selector put: newMethod. ! ! !NativeCodeTests methodsFor: 'private' stamp: 'Igor.Stasenko 4/11/2010 18:21' prior: 48389548! movableStub ^ 999! ! !NativeCodeTests methodsFor: 'tests' stamp: 'IgorStasenko 3/27/2012 18:20' prior: 48389724! testArgumentOffsets "cdecl arguments placed in reverse order, push c; push b; push a.. so, c is most closer to stack frame and having smallest offset. " NBNativeFunctionGen cdecl: #( int (byte a, void * b, double c) ) emit: [:gen | | arg | arg := gen arg: #a. self assert: (arg isMem). self assert: (arg displacement value = 8). arg := gen arg: #b. self assert: (arg isMem). self assert: (arg displacement value = 12). arg := gen arg: #c. self assert: (arg isMem). self assert: (arg displacement value = 16). ]! ! !NativeCodeTests methodsFor: 'tests' stamp: 'IgorStasenko 8/5/2011 08:24' prior: 48390383! testMovableStuff "test that if native code calls a VM function which triggers a full gc and relocates a native code, it will survive the move, a native code should return a difference between old and new primitive method, in case if its moved, the difference will be nonzero" | code | code := self createMoveTestCode. " we should not crash here ;) " ^ (1 to: 10) collect: [:each| Array new: (Random new nextInt: 100). self install: code into: (self class methodDict at: #movableStub). self movableStub ] ! ! !NativeCodeTests methodsFor: 'tests' stamp: 'Igor.Stasenko 4/30/2010 20:03' prior: 48391021! testProxyFunctions | functions | functions := NBInterpreterProxy functions. functions valuesDo: [:fn | self assert: (NBInterpreterProxy canUnderstand: fn selector ). ]! ! !NBMockExternalHeapManager methodsFor: 'accessing' stamp: 'Igor.Stasenko 9/25/2010 00:20' prior: 48391302! primAllocatePage: numBytes ^ 0! ! !NBMockExternalHeapManager methodsFor: 'accessing' stamp: 'Igor.Stasenko 9/25/2010 00:21' prior: 48391439! primFreePage: aMemoryPage ^ 0! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'tbn 8/6/2013 22:11'! getActiveWindow "Retrieves the window handle to the active window associated with the thread that calls the function. " ^ NBFFICallout stdcall: #( HWND GetActiveWindow()) module: #user32 ! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'tbn 8/6/2013 22:18'! getCapture "Return retrieves the window (if any) that has captured the mouse. Only one window at a time can capture the mouse; this window receives mouse input whether or not the cursor is within its borders." ^ self nbCallout stdcall function: #( HWND GetCapture ()) module: #user32 ! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'tbn 8/6/2013 22:24'! getClipboardOwnerWindow "Retrieves the window handle of the current owner of the clipboard." ^ NBFFICallout stdcall: #( HWND GetClipboardOwner()) module: #user32 ! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'tbn 8/6/2013 22:25'! getClipboardViewer "Retrieves the handle of the first window in the clipboard viewer chain." ^ NBFFICallout stdcall: #( HWND GetClipboardOwner()) module: #user32 ! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'IgorStasenko 11/24/2012 17:40' prior: 27739695! getFocus "Return the HWND currently having the input focus" ^ self nbCallout stdcall function: #( HWND GetFocus ()) module: #user32 ! ! !NBWin32Window class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/7/2013 13:01'! getWindowFromPoint: point ^self nbCall: #(HWND WindowFromPoint(POINT point)) module: #user32 ! ! !NBWin32Window methodsFor: 'comparing' stamp: 'TorstenBergmann 8/13/2013 20:02'! = anotherNBWin32Window "Compare using the external give handle" ^self species = anotherNBWin32Window species and: [ handle = anotherNBWin32Window handle ]! ! !NBWin32Window methodsFor: 'opening' stamp: 'TorstenBergmann 8/13/2013 21:30'! close "Minimizes (but does not destroy) the specified window" ^ self nbCallout stdcall function: #( BOOL CloseWindow( HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'opening' stamp: 'TorstenBergmann 8/13/2013 21:34' prior: 27735923! destroy "Destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain). If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window. NOTE: A thread cannot use DestroyWindow to destroy a window created by a different thread." ^ self nbCallout stdcall function: #( BOOL DestroyWindow( HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'operations' stamp: 'IgorStasenko 11/24/2012 17:35' prior: 27734460! destroyWindow "destroy the window" ^ self nbCallout stdcall; options: #( + optMayGC ); " calls windowproc" function: #( BOOL DestroyWindow ( HWND self )) module: #user32 ! ! !NBWin32Window methodsFor: 'iterating' stamp: 'TorstenBergmann 8/13/2013 20:20'! getActiveWindow "Retrieves the window handle to the active window associated with the thread that calls the function. " ^self class getActiveWindow! ! !NBWin32Window methodsFor: 'iterating' stamp: 'TorstenBergmann 8/13/2013 20:20'! getNextWindow "Returns the handle of the window below the given window." ^self getWindow: GW_HWNDNEXT! ! !NBWin32Window methodsFor: 'iterating' stamp: 'TorstenBergmann 8/13/2013 20:48'! getParent "Retrieves the handle of the specified child window's parent window. If the window has no parent window, the return value is nil." ^self nbCall: #(HWND GetParent(HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'iterating' stamp: 'TorstenBergmann 8/13/2013 20:21'! getPreviousWindow "Returns the handle of the window above the given window." ^self getWindow: GW_HWNDPREV ! ! !NBWin32Window methodsFor: 'iterating' stamp: 'TorstenBergmann 8/13/2013 20:44'! getTopWindow "Examines the Z order of the child windows associated with the specified parent window and retrieves the handle of the child window at the top of the Z order." ^self nbCall: #(HWND GetTopWindow(HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'api' stamp: 'TorstenBergmann 8/13/2013 20:22'! getWindow: wCmd "Retrieves the handle of a window that has the specified relationship (Z order or owner) to the specified window." ^self nbCall: #(HWND GetWindow(HWND self, UINT wCmd)) module: #user32 ! ! !NBWin32Window methodsFor: 'api' stamp: 'TorstenBergmann 8/7/2013 12:50'! getWindowFromPoint: point ^self nbCall: #(HWND WindowFromPoint(NBWin32Point point)) module: #user32 ! ! !NBWin32Window methodsFor: 'api' stamp: 'TorstenBergmann 8/13/2013 21:18'! getWindowRect: rect ^self nbCall: #(BOOL GetWindowRect(HWND self, RECT* rect)) module: #user32 ! ! !NBWin32Window methodsFor: 'api' stamp: 'TorstenBergmann 8/13/2013 21:18'! getWindowRectangle |rect| rect := NBWin32Rectangle new. ^(self getWindowRect: rect) ifTrue: [ rect ] ifFalse: [ self error: 'failed' ] ! ! !NBWin32Window methodsFor: 'drawing' stamp: 'IgorStasenko 11/24/2012 17:36' prior: 27734804! hide "destroy the window" ^ self nbCallout stdcall; options: #( + optMayGC ); " calls windowproc" function: #( BOOL ShowWindow ( HWND self, SW_HIDE )) module: #user32 ! ! !NBWin32Window methodsFor: 'testing' stamp: 'tbn 8/6/2013 22:06'! isEnabled "Determines whether the specified window is enabled for mouse and keyboard input. " ^self nbCall: #(BOOL IsWindowEnabled(HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'testing' stamp: 'tbn 8/6/2013 22:08'! isUnicode "Determines whether the specified window is a native Unicode window. " ^self nbCall: #(BOOL IsWindowUnicode(HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'testing' stamp: 'tbn 8/6/2013 22:04'! isWindow "Determines whether the specified window handle identifies an existing window " ^self nbCall: #(BOOL IsWindow(HWND self)) module: #user32 ! ! !NBWin32Window methodsFor: 'opening' stamp: 'TorstenBergmann 8/13/2013 21:32'! minimize ^self close! ! !NBWin32Window methodsFor: 'operations' stamp: 'IgorStasenko 11/24/2012 17:37' prior: 27735142! moveWindowX: x y: y width: nWidth height: nHeight "move window example" ^ self nbCallout stdcall; options: #( + optMayGC ); " calls windowproc" function: #( BOOL MoveWindow ( HWND self, int x, int y, int nWidth, int nHeight, false )) module: #user32 ! ! !NBWin32Window methodsFor: 'opening' stamp: 'TorstenBergmann 8/13/2013 21:26' prior: 27735596! show "show the window" ^ self nbCallout stdcall options: #( + optMayGC ); " calls windowproc" function: #( BOOL ShowWindow ( HWND self, SW_SHOW )) module: #user32 ! ! !NBExternalEnumFromPairsTest methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:14' prior: 48313979! cbClass ^NBTestCallbackReturnEnum1 ! ! !NBExternalEnumFromPairsTest methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:01' prior: 48314126! enumClass ^NBTestEnumerationFromPairs ! ! !NBExternalEnumFromPairsTest methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:27' prior: 48314275! enumToInt: anEnum ^self primEnumToInt1: anEnum ! ! !NBExternalEnumFromPairsTest methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:25' prior: 48314434! executeCb: anEnumCb ^self primExecuteCallbackEnumReturn1: anEnumCb ! ! !NBExternalEnumFromPairsTest methodsFor: 'native' stamp: 'CiprianTeodorov 12/13/2012 20:26' prior: 48314614! primEnumToInt1: aMyEnumInst ^ NBFFICallout cdecl: {NBInt32. {self enumClass. #aMyEnumInst}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX ]! ! !NBExternalEnumFromPairsTest methodsFor: 'native' stamp: 'CiprianTeodorov 12/13/2012 20:25' prior: 48314940! primExecuteCallbackEnumReturn1: anEnumCb ^ NBFFICallout cdecl: {self enumClass. {self cbClass. #anEnumCb}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. asm push: 2400 asImm. asm call: asm EAX ] options: #(#optMayGC)! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:06' prior: 48315340! callback ^ self cbClass on: [ :anInt | self enumClass at: (self enumClass itemAt: anInt) ]! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:06' prior: 48315533! callbackAAA ^ self cbClass on: [ :anInt | self enumClass AAA ]! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:06' prior: 48315698! callbackWrongReturn ^ self cbClass on: [ :anInt | "this callback will return a plain integer" self enumClass itemAt: anInt ]! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:06' prior: 48315934! cbClass ^NBTestCallbackReturnEnum! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/11/2012 19:53' prior: 48316071! enumClass ^NBTestEnumeration ! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:27' prior: 48316203! enumToInt: anEnum ^self primEnumToInt: anEnum ! ! !NBExternalEnumTests methodsFor: 'accessing' stamp: 'CiprianTeodorov 12/13/2012 20:24' prior: 48316353! executeCb: anEnumCb ^self primExecuteCallbackEnumReturn: anEnumCb ! ! !NBExternalEnumTests methodsFor: 'initialize-release' stamp: 'CiprianTeodorov 12/13/2012 20:02' prior: 48949423! initialize super initialize. self enumClass initialize! ! !NBExternalEnumTests methodsFor: 'native' stamp: 'CiprianTeodorov 12/13/2012 20:04' prior: 48316682! primEnumToInt: aMyEnumInst ^ NBFFICallout cdecl: {NBInt32. {self enumClass. #aMyEnumInst}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX ]! ! !NBExternalEnumTests methodsFor: 'native' stamp: 'CiprianTeodorov 12/13/2012 20:05' prior: 48317398! primIntToEnum: anInteger ^ NBFFICallout cdecl: {self enumClass. {#NBInt32. #anInteger}} emitCall: [ :gen :proxy :asm | asm pop: asm EAX. ]! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'MarcusDenker 2/27/2013 09:00' prior: 48318354! testCallbackWrongReturn "there is an issue with callback return. If it fails I cannot see how we can catch the exception and continue" "so this test is supposed to fail for now." "In the future we might accept enumeration representation values (int/uint) and fix this" self skip. self should: [Error signal. self primExecuteCallbackEnumReturn: self callbackWrongReturn ] raise: NBNativeCodeError! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/10/2012 20:11' prior: 48318856! testEnumIdents self assert: self enumClass AAA value = 1. self assert: self enumClass DDD value = 2400! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/10/2012 19:58' prior: 48319062! testEnumIncludes self assert: (self enumClass includes: #DDD). self deny: (self enumClass includes: #EEE)! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/13/2012 20:27' prior: 48319271! testEnumToInt self assert: (self enumToInt: self enumClass AAA) = 1. self assert: (self enumToInt: self enumClass BBB) = 2. self assert: (self enumToInt: self enumClass CCC) = 3. self assert: (self enumToInt: self enumClass DDD) = 2400.! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/13/2012 19:59' prior: 48319615! testFromIntegerFailure self should: [ self enumClass fromInteger: 234 ] raise: Error! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/13/2012 19:59' prior: 48319802! testFromIntegerOk self assert: (self enumClass fromInteger: 1) value = 1 . self assert: (self enumClass fromInteger: 2) value = 2. self assert: (self enumClass fromInteger: 3) value = 3. self assert: (self enumClass fromInteger: 2400) value = 2400.! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/10/2012 19:57' prior: 48320158! testIntToEnum self assert: (self primIntToEnum: 1) value = 1 . self assert: (self primIntToEnum: 2) value = 2. self assert: (self primIntToEnum: 3) value = 3. self assert: (self primIntToEnum: 2400) value = 2400.! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/10/2012 19:57' prior: 48320477! testIntToEnumNotIncluded self assert: (self primIntToEnum: 7) value = 7. self assert: (self primIntToEnum: 3) value = 3. self assert: (self primIntToEnum: 7) item isNil. self assert: (self primIntToEnum: 256) item isNil.! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/10/2012 21:04' prior: 48320806! testNewError self should: [ self enumClass new ] raise: ShouldNotImplement! ! !NBExternalEnumTests methodsFor: 'tests' stamp: 'CiprianTeodorov 12/13/2012 20:07' prior: 48320983! testNotEnumMember self should: [ self enumClass TTT ] raise: MessageNotUnderstood ! ! !NativeBoostWin32 class methodsFor: 'library loading' stamp: 'IgorStasenko 11/24/2012 16:09' prior: 27949066! getModuleHandle: lpModuleName "The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process." ^ self nbCallout options: #( - WinUnicode ); stdcall; function: #( HMODULE GetModuleHandleA (LPCTSTR lpModuleName ) ) module: #Kernel32 ! ! !NativeBoostWin32 class methodsFor: 'library loading' stamp: 'IgorStasenko 11/24/2012 16:17' prior: 27949567! getProcAddress: hModule procName: lpProcName ^ self nbCallout stdcall; function: #( FARPROC GetProcAddress ( HMODULE hModule, LPCSTR lpProcName ) ) module: #Kernel32 ! ! !NativeBoostWin32 class methodsFor: 'accessing' stamp: 'IgorStasenko 11/24/2012 16:17' prior: 27949919! getVMModuleHandle "The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process." ^ self nbCallout stdcall; function: #( HMODULE GetModuleHandleA (0) ) module: #Kernel32 ! ! !NativeBoostWin32 class methodsFor: 'library loading' stamp: 'IgorStasenko 11/24/2012 16:18' prior: 27950357! loadLibrary: libName ^ self nbCallout stdcall function: #( long LoadLibraryA ( String libName )) module: #Kernel32 ! ! !NativeBoostWin32 class methodsFor: 'library loading' stamp: 'tbn 11/10/2012 23:48' prior: 27950634! primGetModuleFileName: lpFileName with: nSize "The GetModuleFileName function retrieves the fully-qualified path for the file that contains the specified module that the current process owns." ^ NBFFICallout stdcall: #( DWORD GetModuleFileNameA ( 0, char * lpFileName, DWORD nSize)) module: #Kernel32 options: #( - optCoerceNilToNull WinUnicode ) ! ! !NativeBoostWin32 class methodsFor: 'accessing' stamp: 'tbn 11/11/2012 00:47' prior: 27951164! squeakWindowHandle "This is slow, but efficient" ^(self loadFunction: 'stWindow' from: '') nbUInt32AtOffset: 0 ! ! !NativeBoostWin32 methodsFor: 'retrieving symbols' stamp: 'Igor.Stasenko 9/26/2010 05:00' prior: 27945443! CLibrary "answer a C library path, or module handle, use in FFI callouts as module: argument to call C run-time library function(s)" "GNU/mingw compiler" ^ 'crtdll.dll'! ! !NativeBoostWin32 methodsFor: 'memory operations' stamp: 'Igor.Stasenko 5/3/2010 10:59' prior: 27945713! basicAllocate: numBytes "answer an instance of NBExternalAddress, or nil if failed" | address | address := NBExternalAddress new. self bootstrapAllocate: numBytes into: address. (address asUnsignedLong) = 0 ifTrue: [ ^ nil ]. ^ address! ! !NativeBoostWin32 methodsFor: 'bootstrapping' stamp: 'IgorStasenko 11/24/2012 16:08' prior: 27946051! bootstrapAllocate: size into: returnValueBuffer ^ self nbCallout stdcall; options: #( - optDirectProxyFnAddress optAllowExternalAddressPtr); function: #( NBBootstrapUlong HeapAlloc (ulong heapHandle , 0 , SIZE_T size) ) module: #Kernel32 ! ! !NativeBoostWin32 methodsFor: 'memory operations' stamp: 'IgorStasenko 11/24/2012 16:08' prior: 27946458! free: lpMem "The HeapFree function frees a memory block allocated from a heap by the HeapAlloc or HeapReAlloc function. " ^ self nbCallout stdcall; "allow only external address" options: #( - optAllowByteArraysPtr + optAllowExternalAddressPtr ); function: #( BOOL HeapFree (ulong heapHandle, 0, LPVOID lpMem) ) module: #Kernel32 ! ! !NativeBoostWin32 methodsFor: 'bootstrapping' stamp: 'Igor.Stasenko 5/3/2010 10:50' prior: 27946956! initializeExternalHeap "initialize external memory heap" | bytes | bytes := ByteArray new: 4. self privCreateHeap: bytes. heapHandle := bytes unsignedLongAt: 1 bigEndian: false. heapHandle = 0 ifTrue: [ self error: 'Unable to create external heap' ]. ! ! !NativeBoostWin32 methodsFor: 'accessing' stamp: 'IgorStasenko 8/5/2011 08:48' prior: 27947313! newAssembler ^ AJx86Assembler new.! ! !NativeBoostWin32 methodsFor: 'accessing' stamp: 'Igor.Stasenko 5/3/2010 10:44' prior: 27947444! pointerSize ^ 4! ! !NativeBoostWin32 methodsFor: 'private' stamp: 'IgorStasenko 11/24/2012 16:09' prior: 27947557! privCreateHeap: returnValueBuffer ^ self nbCallout options: #( - optDirectProxyFnAddress ); stdcall; function: #( NBBootstrapUlong HeapCreate ( HEAP_CREATE_ENABLE_EXECUTE , 0 , 0 ) ) module: #Kernel32 ! ! !NativeBoostWin32 methodsFor: 'accessing' stamp: 'IgorStasenko 8/3/2011 08:08' prior: 27947927! stackAlignment ^ 1! ! !NBExternalArray class methodsFor: 'private' stamp: 'IgorStasenko 12/3/2013 13:37' prior: 77272461! anonymousSubclassInitElementType: aTypeName "create and initialize the anonymous subclass of me" ^ NBExternalArray newAnonymousSubclass initElementType: aTypeName. ! ! !NBFFICallout methodsFor: 'code generation' stamp: 'IgorStasenko 12/3/2013 02:27' prior: 27508076! generateInstructions: aFunctionBodyBlock | instructions | proxy prepareForCallout. "prepare & push arguments" asm decorateWith: 'FFI: prepare arguments' during: [ fnSpec arguments do: [:arg | arg prepareArgumentUsing: self ] ]. self foreignCall: [:call | "do not align, if its not required" self optNoAlignment ifTrue: [ call alignment: 1]. self pushArguments. self emitFailureTest. asm decorateWith: 'FFI: performing a call' during: [ aFunctionBodyBlock valueWithPossibleArgs: { self. proxy. asm}. "if we're using custom emitcall section, don't bother to cleanup the stack " (self optEmitCall or: [self optNoCleanup]) ifTrue: [ call disableCleanup ]. ]. ]. "handle return value" asm decorateWith: 'FFI: coerce return value' during: [ fnSpec returnType coerceReturn: self ]. self epilogue. self emitFailureHandler. (self optMayGC or: [proxy usedGate ]) ifTrue: [ asm reserveExtraBytesOnStack: asm wordSize*2. ]. instructions := asm prepareInstructions. self optDebug ifTrue: [ self halt ]. ^ instructions ! ! !NBFFICallout methodsFor: 'code generation' stamp: 'IgorStasenko 12/3/2013 02:27' prior: 27509315! pushArguments " argument indexes pushed on ST stack are: argType ST stack C stack index index push order 1 2 2 2 1 1 3 0 0 " "both cdecl/apicall using reverse argument order on stack" fnSpec arguments notEmpty ifTrue: [ asm decorateWith: 'FFI: pushing arguments' during: [ fnSpec arguments reverseDo: [:arg | asm noticePush: arg stackSize forCall: callInfo. arg emitPush: self ] ] ]. fnSpec returnType prepareReturnValue: self for: callInfo.! ! !NBWinConstants class methodsFor: 'constants' stamp: 'TorstenBergmann 8/13/2013 22:37'! baseConstants DEBUG_PROCESS := 16r00000001. DEBUG_ONLY_THIS_PROCESS := 16r00000002. CREATE_SUSPENDED := 16r00000004. DETACHED_PROCESS := 16r00000008. CREATE_NEW_CONSOLE := 16r00000010. NORMAL_PRIORITY_CLASS := 16r00000020. IDLE_PRIORITY_CLASS := 16r00000040. HIGH_PRIORITY_CLASS := 16r00000080. REALTIME_PRIORITY_CLASS := 16r00000100. CREATE_NEW_PROCESS_GROUP := 16r00000200. CREATE_UNICODE_ENVIRONMENT := 16r00000400. CREATE_SEPARATE_WOW_VDM := 16r00000800. CREATE_SHARED_WOW_VDM := 16r00001000. CREATE_FORCEDOS := 16r00002000. BELOW_NORMAL_PRIORITY_CLASS := 16r00004000. ABOVE_NORMAL_PRIORITY_CLASS := 16r00008000. "..." ACE_OBJECT_TYPE_PRESENT := 16r00000001. ACE_INHERITED_OBJECT_TYPE_PRESENT := 16r00000002. APPLICATION_ERROR_MASK := 16r20000000. ERROR_SEVERITY_SUCCESS := 16r00000000. ERROR_SEVERITY_INFORMATIONAL := 16r40000000. ERROR_SEVERITY_WARNING := 16r80000000. ERROR_SEVERITY_ERROR := 16rC0000000. SYNCHRONIZE := 16r100000. STANDARD_RIGHTS_REQUIRED := 16rF0000. STANDARD_RIGHTS_READ := 16r20000. STANDARD_RIGHTS_WRITE := 16r20000. STANDARD_RIGHTS_EXECUTE := 16r20000. STANDARD_RIGHTS_ALL := 16r1F0000. SPECIFIC_RIGHTS_ALL := 16rFFFF. ACCESS_SYSTEM_SECURITY := 16r1000000.! ! !NBWinConstants class methodsFor: 'constants' stamp: 'TorstenBergmann 8/13/2013 19:23'! getWindowConstants GW_HWNDFIRST := 0. GW_HWNDLAST := 1. GW_HWNDNEXT := 2. GW_HWNDPREV := 3. GW_OWNER := 4. GW_CHILD := 5. GW_ENABLEDPOPUP := 6. ! ! !NBWinConstants class methodsFor: 'class initialization' stamp: 'TorstenBergmann 8/13/2013 22:10' prior: 27743199! initialize " self initialize" self baseConstants; classStyles; heapConstants; threadConstants; windowStyles; windowExStyles; windowCreationConstants; gdiConstants; showWindowConstants; getWindowConstants; messageBoxConstants; systemMetricConstants; getWindowLongConstants; windowMessages; driveTypes! ! !NBWinConstants class methodsFor: 'constants' stamp: 'TorstenBergmann 8/13/2013 19:21' prior: 27747256! showWindowConstants SW_HIDE := 0. SW_SHOWNORMAL := 1. SW_NORMAL := 1. SW_SHOWMINIMIZED := 2. SW_SHOWMAXIMIZED := 3. SW_MAXIMIZE := 3. SW_SHOWNOACTIVATE := 4. SW_SHOW := 5. SW_MINIMIZE := 6. SW_SHOWMINNOACTIVE := 7. SW_SHOWNA := 8. SW_RESTORE := 9. SW_SHOWDEFAULT := 10. SW_FORCEMINIMIZE := 11. SW_MAX := 11! ! !NBWinConstants class methodsFor: 'constants' stamp: 'TorstenBergmann 8/8/2013 15:19'! systemMetricConstants "http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx" SM_ARRANGE := 56. SM_CLEANBOOT := 67. SM_CMONITORS := 80. SM_CMOUSEBUTTONS := 43. SM_CXBORDER := 5. SM_CXCURSOR := 13. SM_CXDLGFRAME := 7. SM_CXDOUBLECLK := 36. SM_CXDRAG := 68. SM_CXEDGE := 45. SM_CXFIXEDFRAME := 7. SM_CXFOCUSBORDER := 83. SM_CXFRAME := 32. SM_CXFULLSCREEN := 16. SM_CXHSCROLL := 21. SM_CXHTHUMB := 10. SM_CXICON := 11. SM_CXICONSPACING := 38. SM_CXMAXIMIZED := 61. SM_CXMAXTRACK := 59. SM_CXMENUCHECK := 71. SM_CXMENUSIZE := 54. SM_CXMIN := 28. SM_CXMINIMIZED := 57. SM_CXMINSPACING := 47. SM_CXMINTRACK := 34. SM_CXPADDEDBORDER := 92. SM_CXSCREEN := 0. SM_CXSIZE := 30. SM_CXSIZEFRAME := 32. SM_CXSMICON := 49. SM_CXSMSIZE := 52. SM_CXVIRTUALSCREEN := 78. SM_CXVSCROLL := 2. SM_CYBORDER := 6. SM_CYCAPTION := 4. SM_CYCURSOR := 14. SM_CYDLGFRAME := 8. SM_CYDOUBLECLK := 37. SM_CYDRAG := 69. SM_CYEDGE := 46. SM_CYFIXEDFRAME := 8. SM_CYFOCUSBORDER := 84. SM_CYFRAME := 33. SM_CYFULLSCREEN := 17. SM_CYHSCROLL := 3. SM_CYICON := 12. SM_CYICONSPACING := 39. SM_CYKANJIWINDOW := 18. SM_CYMAXIMIZED := 62. SM_CYMAXTRACK := 60. SM_CYMENU := 15. SM_CYMENUCHECK := 72. SM_CYMENUSIZE := 55. SM_CYMIN := 29. SM_CYMINIMIZED := 58. SM_CYMINSPACING := 48. SM_CYMINTRACK := 35. SM_CYSCREEN := 1. SM_CYSIZE := 31. SM_CYSIZEFRAME := 33. SM_CYSMCAPTION := 51. SM_CYSMICON := 50. SM_CYSMSIZE := 53. SM_CYVIRTUALSCREEN := 79. SM_CYVSCROLL := 20. SM_CYVTHUMB := 9. SM_DBCSENABLED := 42. SM_DEBUG := 22. SM_DIGITIZER := 94. SM_IMMENABLED := 82. SM_MAXIMUMTOUCHES := 95. SM_MEDIACENTER := 87. SM_MENUDROPALIGNMENT := 40. SM_MIDEASTENABLED := 74. SM_MOUSEPRESENT := 19. SM_MOUSEHORIZONTALWHEELPRESENT := 91. SM_MOUSEWHEELPRESENT := 75. SM_NETWORK := 63. SM_PENWINDOWS := 41. SM_REMOTECONTROL := 16r2001. SM_REMOTESESSION := 16r1000. SM_SAMEDISPLAYFORMAT := 81. SM_SECURE := 44. SM_SHOWSOUNDS := 70. SM_SHUTTINGDOWN := 16r2000. SM_SLOWMACHINE := 73. SM_STARTER := 88. SM_SWAPBUTTON := 23. SM_TABLETPC := 86. SM_XVIRTUALSCREEN := 76. SM_YVIRTUALSCREEN := 77! ! !NBWinConstants class methodsFor: 'constants' stamp: 'TorstenBergmann 8/13/2013 22:12'! threadConstants THREAD_TERMINATE := 1. THREAD_SUSPEND_RESUME := 2. THREAD_GET_CONTEXT := 8. THREAD_SET_CONTEXT := 16. THREAD_SET_INFORMATION := 32. THREAD_QUERY_INFORMATION := 64. THREAD_SET_THREAD_TOKEN := 128. THREAD_IMPERSONATE := 256. THREAD_DIRECT_IMPERSONATION := 16r200. THREAD_ALL_ACCESS := STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|16r3FF! ! !NBWinTypes class methodsFor: 'initialization' stamp: 'TorstenBergmann 8/13/2013 20:54' prior: 27753288! initialize " self initialize " BOOL := #bool. DWORD := #ulong. HWND := #NBWin32Window. POINT := #NBWin32Point. RECT := #NBWin32Rectangle. HDC := #NBWin32Hdc. HMENU := #HANDLE. UINT := #ulong. ATOM := #WORD. BOOLEAN := #BYTE. BYTE := #unsignedByte. CALLBACK := #'void*'. CHAR := #char. COLORREF := #DWORD. DWORDLONG := #ULONGLONG. DWORD32 := #ulong. DWORD64 := #ulonglong. FLOAT := #float. HRESULT := #LONG. INT := #long. INT32 := #long. INT64 := #longlong. LANGID := #WORD. LCID := #DWORD. LCTYPE := #DWORD. LGRPID := #DWORD. LONG := #long. LONGLONG := #longlong. LONG32 := #long. LONG64 := #longlong. LPARAM := #'LONG_PTR'. LPBOOL := #'BOOL*'. LPBYTE := #'BYTE*'. LPCOLORREF := #'DWORD*'. LPCVOID := #'void*'. LPDWORD := #'DWORD*'. WNDPROC := #'void*'. HANDLE := #NBWin32Handle. HINSTANCE := HMODULE := HCURSOR := HBRUSH := HACCEL := HCOLORSPACE := HCONV := HICON := HCONVLIST := HDDEDATA := HDESK := HDROP := HDWP := HENHMETAFILE := HFILE := HFONT := HGDIOBJ := HGLOBAL := HHOOK := HKEY := HKL := HLOCAL := HMETAFILE := HMODULE := HMONITOR := HPALETTE := HPEN := HRGN := HRSRC := HSZ := HWINSTA := #HANDLE. self initialize2. self initialize3. self stringTypes. self objTypes. ! ! !NBTString class methodsFor: 'converting' stamp: 'Igor.Stasenko 5/1/2010 10:56' prior: 27683615! asNBExternalType: gen ^ (gen optionAt: #WinUnicode) ifTrue: [ NBWideString asNBExternalType: gen ] ifFalse: [ NBExternalString asNBExternalType: gen ] ! ! !NBWin32Hdc methodsFor: 'operations' stamp: 'IgorStasenko 11/25/2012 14:17' prior: 27702055! lineToX: nXEnd y: nYEnd ^self nbCall: #(BOOL LineTo(HDC self, int nXEnd, int nYEnd)) module: #gdi32 ! ! !NBWin32Hdc methodsFor: 'operations' stamp: 'IgorStasenko 11/25/2012 14:17' prior: 27702318! moveToX: x y: y ^self nbCall: #(BOOL MoveToEx(HDC self, int x, int y, 0)) module: #gdi32 ! ! !NBWin32Hdc methodsFor: 'operations' stamp: 'IgorStasenko 11/25/2012 14:17' prior: 27702570! rectangleLeft: nLeftRect top: nTopRect right: nRightRect bottom: nBottomRect ^self nbCall: #(BOOL Rectangle( HDC self , int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)) module: #gdi32 ! ! !NBWin32Heap class methodsFor: 'instance creation' stamp: 'IgorStasenko 11/24/2012 17:35' prior: 27706545! create: options initialiSize: dwInitialSize maximumSize: dwMaximumSize ^ self nbCallout stdcall function: #( NBWin32Heap HeapCreate ( DWORD options, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) ) module: #Kernel32 ! ! !NativeBoost class methodsFor: 'system startup' stamp: 'ClementBera 7/26/2013 16:27' prior: 27931166! discoverPlatformId | platId | "should not use it, if Current already set" self assert: (Current isNil). platId := self platformId. self allSubclassesDo: [:class | class targetPlatformId = platId ifTrue: [ class new " should set Current during initialization" ]]. Current ifNil: [ self unsupportedPlatform ]. ^ Current ! ! !NativeBoost class methodsFor: 'debugger support' stamp: 'MarcusDenker 5/21/2013 07:44' prior: 78677297! tryRunNativeCode: aCompiledMethod for: aReceiver withArgs: arguments "run only a native code of given method, and if it fails evaluate aFailBlock instead" | src node m | "self assert: (self isNativeMethod: aCompiledMethod)." src := String streamContents: [:str | str nextPutAll: 'NBDebug_stub'. 1 to: aCompiledMethod numArgs do: [:i | i = 1 ifTrue: [ str nextPutAll: ': ' ] ifFalse: [ str nextPutAll: ' with: ' ]. str nextPutAll: 'arg'. i printOn: str. ]. str cr; nextPutAll: ' '; cr; nextPutAll: ' ^ ContextPart primitiveFailTokenFor: errorCode'. ]. node := Smalltalk compiler compile: src in: aCompiledMethod methodClass classified: nil notifying: nil ifFail: [ ^ ContextPart primitiveFailTokenFor: nil ]. m := node generate: aCompiledMethod trailer. m flushCache. m selector flushCache. ^ m valueWithReceiver: aReceiver arguments: arguments. ! ! !NBQSortCallback methodsFor: 'accessing' stamp: 'IgorStasenko 11/24/2012 15:30' prior: 48301704! index ^ index! ! !NBQSortCallback methodsFor: 'accessing' stamp: 'IgorStasenko 11/24/2012 15:30' prior: 48301813! trunk ^ trunk! ! !NBTCHAR class methodsFor: 'converting' stamp: 'Igor.Stasenko 5/1/2010 10:56' prior: 27682999! asNBExternalType: gen ^ (gen optionAt: #WinUnicode) ifTrue: [ 'wchar_t' asNBExternalType: gen ] ifFalse: [ #uchar asNBExternalType: gen ] ! ! !NBWin32Shell class methodsFor: 'computer' stamp: 'TorstenBergmann 8/8/2013 15:28'! getBootType "Returns the boot type as a string. self getBootType " ^#('Normal' 'Fail-safe' 'Fail-safe with network') at: (self getSystemMetrics: SM_CLEANBOOT) + 1 ! ! !NBWin32Shell class methodsFor: 'api calls' stamp: 'tbn 8/6/2013 22:31'! getCommandLine "Returns command-line string for the current process" ^self nbCall: #(NBTString GetCommandLineA()) module: #kernel32 ! ! !NBWin32Shell class methodsFor: 'computer' stamp: 'tbn 11/9/2012 22:29' prior: 27709061! getComputerName "Return the name of the computer. self getComputerName " ^self getEnvironmentVariable: 'COMPUTERNAME'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:29' prior: 27709617! getHomeDrive "Return the drive letter of the home drive. self getHomeDrive " ^self getEnvironmentVariable: 'HOMEDRIVE'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:29' prior: 27709823! getHomePath "Return the home path. Typically this is \Documents and Settings\{username} self getHomePath " ^self getEnvironmentVariable: 'HOMEPATH'! ! !NBWin32Shell class methodsFor: 'api calls' stamp: 'TorstenBergmann 8/8/2013 20:33'! getInetIsOffline: dwFlags "Retrieves the specified system metric or system configuration setting." ^NBFFICallout stdcall: #(BOOL InetIsOffline(DWORD dwFlags)) module: 'url.dll' ! ! !NBWin32Shell class methodsFor: 'keyboard' stamp: 'TorstenBergmann 8/8/2013 13:57'! getKeyboardType |types res| types := #( 'IBM PC/XT or compatible (83-key) keyboard' 'Olivetti "ICO" (102-key) keyboard' 'IBM PC/AT (84-key) or similar keyboard' 'IBM enhanced (101- or 102-key) keyboard' 'Nokia 1050 and similar keyboards' 'Nokia 9140 and similar keyboards' 'Japanese keyboard'). res := (self getKeyboardType: 0). ^res <= types size ifTrue: [ types at: res ] ifFalse: [ '' ]! ! !NBWin32Shell class methodsFor: 'keyboard' stamp: 'TorstenBergmann 8/8/2013 13:51'! getKeyboardType: nTypeFlag "Retrieves information about the current keyboard. " ^NBFFICallout stdcall: #(int GetKeyboardType(int nTypeFlag)) module: #user32 ! ! !NBWin32Shell class methodsFor: 'network' stamp: 'TorstenBergmann 8/8/2013 13:58'! getLogonServer "Returns the users logon server self getLogonServer " ^self getEnvironmentVariable: 'LOGONSERVER'! ! !NBWin32Shell class methodsFor: 'display' stamp: 'TorstenBergmann 8/8/2013 15:23'! getNumberOfDisplayMonitors "Returns the number of display monitors attached to the desktop" ^self getSystemMetrics: SM_CMONITORS ! ! !NBWin32Shell class methodsFor: 'keyboard' stamp: 'TorstenBergmann 8/8/2013 14:03'! getNumberOfFunctionKeys "Returns the number of function keys (typically 12, sometimes 18) Return Value: An Integer " ^self getKeyboardType: 2 ! ! !NBWin32Shell class methodsFor: 'mouse' stamp: 'TorstenBergmann 8/8/2013 15:26'! getNumberOfMouseButtons "Returns the number of mouse buttons, or zero if no mouse is installed" ^self getSystemMetrics: SM_CMOUSEBUTTONS ! ! !NBWin32Shell class methodsFor: 'cpu' stamp: 'tbn 11/9/2012 22:29' prior: 27710058! getNumberOfProcessors "Return the number of processors/cores. self getNumberOfProcessors " ^self getEnvironmentVariable: 'NUMBER_OF_PROCESSORS'! ! !NBWin32Shell class methodsFor: 'computer' stamp: 'tbn 11/9/2012 22:29' prior: 27710289! getOS "Return the name of the OS" ^self getEnvironmentVariable: 'OS'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:29' prior: 27710440! getPathEntries "Return the PATH entries" ^(self getEnvironmentVariable: 'PATH') findTokens: $;! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:29' prior: 27710617! getPathExtensions "Returns a list of the file extensions that the OS considers to be executable. self getPathExtensions " ^self getEnvironmentVariable: 'PATHEXT'! ! !NBWin32Shell class methodsFor: 'cpu' stamp: 'tbn 11/9/2012 22:29' prior: 27710866! getProcessorArchitecture "Return processor chip architecture. Values: x86, IA64. self getProcessorArchitecture " ^self getEnvironmentVariable: 'PROCESSOR_ARCHITECTURE'! ! !NBWin32Shell class methodsFor: 'cpu' stamp: 'tbn 11/9/2012 22:29' prior: 27711121! getProcessorIdentifier "Return a description of the processor. self getProcessorIdentifier " ^self getEnvironmentVariable: 'PROCESSOR_IDENTIFIER'! ! !NBWin32Shell class methodsFor: 'cpu' stamp: 'tbn 11/9/2012 22:29' prior: 27711354! getProcessorLevel "Return the model number of the computer's processor. self getProcessorLevel " ^self getEnvironmentVariable: 'PROCESSOR_LEVEL'! ! !NBWin32Shell class methodsFor: 'cpu' stamp: 'tbn 11/9/2012 22:29' prior: 27711586! getProcessorRevision "Return the revision number of the processor. self getProcessorRevision " ^self getEnvironmentVariable: 'PROCESSOR_REVISION'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27711819! getProgramFilesDirectory "Return the program files directory self getProgramFilesDirectory " ^self getEnvironmentVariable: 'PROGRAMFILES'! ! !NBWin32Shell class methodsFor: 'display' stamp: 'TorstenBergmann 8/8/2013 15:31'! getScreenHeight "Returns the the vertical screen size" ^self getSystemMetrics: SM_CYSCREEN ! ! !NBWin32Shell class methodsFor: 'display' stamp: 'TorstenBergmann 8/8/2013 15:31'! getScreenSize "returns the current screen size Return Value: A point representing the current screen size " |x y| x := self getScreenWidth. y := self getScreenHeight. ^x@y! ! !NBWin32Shell class methodsFor: 'display' stamp: 'TorstenBergmann 8/8/2013 15:31'! getScreenWidth "Returns the the horizontal screen size" ^self getSystemMetrics: SM_CXSCREEN ! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27712044! getSystemDrive "Return the drive containing the Windows root directory, usually C: self getSystemDrive " ^self getEnvironmentVariable: 'SYSTEMDRIVE'! ! !NBWin32Shell class methodsFor: 'api calls' stamp: 'TorstenBergmann 8/8/2013 15:24'! getSystemMetrics: nIndex "Retrieves the specified system metric or system configuration setting." ^NBFFICallout stdcall: #(int GetSystemMetrics(int nIndex)) module: #user32 ! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27712280! getSystemRootDirectory "Return the systems root directory. Typically this is 'C:\WINDOWS' self getSystemRootDirectory " ^self getEnvironmentVariable: 'SystemRoot'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27712533! getTempDirectory "Return the name of the temp directory. self getTempDirectory " ^self getEnvironmentVariable: 'TEMP'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27712738! getTmpDirectory "Return the name of the temp directory. self getTmpDirectory " ^self getEnvironmentVariable: 'TMP'! ! !NBWin32Shell class methodsFor: 'user' stamp: 'tbn 11/9/2012 22:30' prior: 27712940! getUserDomain "Return the name of the domain that contains the user’s account. self getUserDomain " ^self getEnvironmentVariable: 'USERDOMAIN'! ! !NBWin32Shell class methodsFor: 'user' stamp: 'tbn 11/9/2012 22:30' prior: 27713172! getUserName "Return the name of the logged in user self getUserName " ^self getEnvironmentVariable: 'USERNAME'! ! !NBWin32Shell class methodsFor: 'user' stamp: 'tbn 11/9/2012 22:30' prior: 27713370! getUserProfile "Return the users profile location. Typically this is C:\Documents and Settings\{username} self getUserProfile " ^self getEnvironmentVariable: 'USERPROFILE'! ! !NBWin32Shell class methodsFor: 'file system' stamp: 'tbn 11/9/2012 22:30' prior: 27713629! getWindowsDirectory "Return the path to the windows directory" ^self getEnvironmentVariable: 'windir'! ! !NBWin32Shell class methodsFor: 'network' stamp: 'TorstenBergmann 8/8/2013 20:44'! isInternetOffline ^self getInetIsOffline: 0! ! !NBWin32Shell class methodsFor: 'network' stamp: 'TorstenBergmann 8/8/2013 20:44'! isInternetOnline ^self isInternetOffline not! ! !NBWin32Shell class methodsFor: 'mouse' stamp: 'TorstenBergmann 8/8/2013 15:34'! isMouseAvailable "returns true if a mouse is available, otherwise false" ^self getNumberOfMouseButtons ~= 0! ! !NBWin32Shell class methodsFor: 'mouse' stamp: 'TorstenBergmann 8/8/2013 15:39'! isMouseWheelPresent "Returns true if a mouse with a wheel is installed, false otherwise Windows NT4.0 and later, Windows 98" ^(self getSystemMetrics: SM_MOUSEWHEELPRESENT) ~= 0 ! ! !NBWin32Shell class methodsFor: 'network' stamp: 'TorstenBergmann 8/8/2013 15:23'! isNetworkPresent ^(self getSystemMetrics: SM_NETWORK) & 1 = 1! ! !NBWin32Shell class methodsFor: 'mouse' stamp: 'TorstenBergmann 8/8/2013 15:40'! isTablet "Returns true if the current operating system is a tablet one" ^(self getSystemMetrics: SM_TABLETPC) ~= 0 ! ! !Boolean class methodsFor: '*NativeBoost-Core' stamp: 'IgorStasenko 8/13/2013 16:47'! asNBExternalType: gen ^ NBBool asNBExternalType: gen! ! !Boolean methodsFor: '*NativeBoost-Core' stamp: 'cb 4/22/2013 14:15' prior: 48273300! asNBExternalType: gen "boolean value in argument description array defines a simple 0 or 1 constant #( true false ) - turned into a 1 and 0 " ^ NBFFIConst value: self asBit! ! !NBWinTest class methodsFor: 'interface building' stamp: 'Igor.Stasenko 4/29/2010 15:35' prior: 27751591! createWindow " NBWin32Window createWindowExA: lpClassName: lpWindowName: dwStyle: x: y: width: height: hWndParent: hMenu: hInstance: lParam: "! ! !NBWin32Process class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 22:19'! getCurrentProcess "Return an instance with a pseudohandle for the current process." ^ NBFFICallout stdcall: #( NBWin32Process GetCurrentProcess()) module: #kernel32 ! ! !NBWin32Process class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 22:22'! getCurrentProcessId "Returns the process identifier (PID) of the calling process." ^ NBFFICallout stdcall: #( DWORD GetCurrentProcessId()) module: #kernel32 ! ! !NBWin32Process methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 22:27'! getPriorityClass "Return the priority class for the specified process" ^NBFFICallout stdcall: #( DWORD GetPriorityClass(HANDLE self)) module: #kernel32 ! ! !NBWin32Process methodsFor: 'testing' stamp: 'TorstenBergmann 8/13/2013 22:39'! isHighPriorityClass "Indicates a process that performs time-critical tasks that must be executed immediately for it to run correctly." ^self getPriorityClass == HIGH_PRIORITY_CLASS ! ! !NBWin32Process methodsFor: 'testing' stamp: 'TorstenBergmann 8/13/2013 22:40'! isIdlePriorityClass "Indicates a process whose threads run only when the system is idle and are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle priority class is inherited by child processes." ^self getPriorityClass == IDLE_PRIORITY_CLASS ! ! !NBWin32Process methodsFor: 'testing' stamp: 'TorstenBergmann 8/13/2013 22:41'! isNormalPriorityClass "Indicates a normal process with no special scheduling needs" ^self getPriorityClass == NORMAL_PRIORITY_CLASS ! ! !NBWin32Process methodsFor: 'testing' stamp: 'TorstenBergmann 8/13/2013 22:41'! isRealtimePriorityClass "Indicates a process that has the highest possible priority. The threads of a real-time priority class process preempt the threads of all other processes, including operating system processes performing important tasks." ^self getPriorityClass == REALTIME_PRIORITY_CLASS ! ! !NBWin32Thread class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 21:43'! getCurrentThread "Return an instance with a pseudohandle for the current thread." ^ NBFFICallout stdcall: #( NBWin32Thread GetCurrentThread()) module: #kernel32 ! ! !NBWin32Thread class methodsFor: 'accessing' stamp: 'TorstenBergmann 8/13/2013 22:24'! getCurrentThreadId "Returns the thread identifier of the calling thread. Until the thread terminates, the thread identifier uniquely identifies the thread throughout the system." ^ NBFFICallout stdcall: #(DWORD GetCurrentThreadId()) module: #kernel32 ! ! !NBWin32Thread methodsFor: 'testing' stamp: 'TorstenBergmann 8/13/2013 22:16'! isThreadAllAccess "For systems that do not support security descriptors, the (pseudo) handle is THREAD_ALL_ACCESS. " ^self handle value = THREAD_ALL_ACCESS! ! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'IgorStasenko 12/3/2013 13:39' prior: 77272926! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBExternalTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " ^ NBExternalTypeValue newAnonymousSubclass valueType: aTypeName. ! ! !NBMockExternalObject methodsFor: 'accessing' stamp: 'IgorStasenko 8/24/2012 17:05' prior: 48391717! data: anObject data := anObject! ! !NBMockExternalObject methodsFor: 'accessing' stamp: 'IgorStasenko 8/24/2012 17:05' prior: 48391848! resourceData ^ data! ! !NBWin32Caret class methodsFor: 'accessing' stamp: 'tbn 8/6/2013 22:20'! getBlinkTime "Returns the elapsed time, in milliseconds, required to invert the caret's pixels. The user can set this value using the Control Panel." ^ NBFFICallout stdcall: #( uint GetCaretBlinkTime()) module: #user32 ! ! NBExternalUnionFields removeSelector: #typeOf:! "NativeBoost-Core"! "NativeBoost-Tests"! "NativeBoost-Win32"! ----End fileIn----! ----QUIT----2014-01-14T16:00:01.513856+01:00 Pharo.image priorSource: 29781377! ----STARTUP----2014-01-14T16:05:35.77981+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-14T16:05:36.099807+01:00 Pharo-30695.image priorSource: 29872919! ----STARTUP----2014-01-15T08:27:54.333294+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/15/2014 08:24' prior: 80113323! commentForCurrentUpdate ^ '12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12647 NativeBoost: two tests failing on windows https://pharo.fogbugz.com/f/cases/12647 12642 bug in NumberParser when reading a number with fraction part https://pharo.fogbugz.com/f/cases/12642'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/15/2014 08:24'! script349 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.654.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.316.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1006.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/15/2014 08:24'! update30696 "self new update30696" self withUpdateLog: '12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12647 NativeBoost: two tests failing on windows https://pharo.fogbugz.com/f/cases/12647 12642 bug in NumberParser when reading a number with fraction part https://pharo.fogbugz.com/f/cases/12642'. self loadTogether: self script349 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NBWin32WindowTest methodsFor: 'tests' stamp: 'MarcusDenker 1/14/2014 17:21' prior: 80141691! testIsVisible self skip. "fails on CI server" self assert: NBWin32Window getDesktopWindow isVisible! ! !NBWin32WindowTest methodsFor: 'tests' stamp: 'MarcusDenker 1/14/2014 17:21' prior: 80141844! testWindowFromPoint self skip. "fails on CI server" self assert: (NBWin32Window getWindowFromPoint: (NBWin32Point x: 100 y: 100)) isWindow! ! !NumberParserTest methodsFor: 'tests - Float' stamp: 'nice 1/15/2014 00:00'! testFloatmin "Note that these are originally tests cases for former bugs of libc dtoa from netlib. ref http://www.exploringbinary.com/gays-strtod-returns-zero-for-inputs-just-above-2-1075/ ref http://gcc.gnu.org/viewcvs/gcc/trunk/gcc/testsuite/gcc.dg/float-exact-1.c?view=markup&pathrev=205119 They are also non regression for a bug of NumberParser related to incorrect position of last non zero digit. ref https://pharo.fogbugz.com/f/cases/12642/bug-in-NumberParser-when-reading-a-number-with-fraction-part" | halfMin moreThanHalfmin | halfMin := NumberParser parse: (Float fmin asTrueFraction / 2 printShowingDecimalPlaces: 1 - Float fmin exponent). self assert: halfMin = 0.0 description: 'nearest even of 0.5*Float fmin is zero'. moreThanHalfmin := NumberParser parse: (Float fmin asTrueFraction / 2 + (10 raisedTo: Float fmin exponent - 4) printShowingDecimalPlaces: 4 - Float fmin exponent). self assert: moreThanHalfmin = Float fmin description: 'nearest Float of a Fraction > 0.5*Float fmin is Float fmin'.! ! !NumberParser methodsFor: 'parsing-large int' stamp: 'nice 1/14/2014 03:27' prior: 28525310! nextLargeIntegerBase: aRadix nPackets: nPackets "Form a Large integer with incoming digits from sourceStream. Return this integer, or zero if no digits found. Stop reading when no more digits or when nPackets elementary LargeInteger have been encountered. Count the number of digits and the lastNonZero digit and store them in instVar" | high nDigitsHigh lastNonZeroHigh low nDigitsLow halfPackets | halfPackets := nPackets bitShift: -1. halfPackets = 0 ifTrue: [^self nextElementaryLargeIntegerBase: aRadix]. high := self nextLargeIntegerBase: aRadix nPackets: halfPackets. high isLarge ifFalse: [^high]. nDigitsHigh := nDigits. lastNonZeroHigh := lastNonZero. low := self nextLargeIntegerBase: aRadix nPackets: halfPackets. nDigitsLow := nDigits. nDigits := nDigitsHigh + nDigitsLow. lastNonZero := lastNonZero = 0 ifTrue: [lastNonZeroHigh] ifFalse: [lastNonZero + nDigitsHigh]. ^high * (aRadix raisedToInteger: nDigitsLow) + low! ! !NautilusUI methodsFor: 'private' stamp: 'NicolaiHess 1/14/2014 10:41'! selectedClass: aClass withSelection: aPackage self model package: aPackage class: aClass category: nil method: nil. packagesSelection removeAll. packagesSelection at: aPackage put: true. self updateBothView! ! !NautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/14/2014 10:43' prior: 74335755! "protocol: accessing" selectedClassWithoutChangingSelection: aClass categoryWidget resetCategoryCache. self okToChangeBoth ifFalse: [ ^ self ]. aClass ifNil: [ self unselectClass ] ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self. classesSelection at: aClass theNonMetaClass put: true. ((self selectedPackage notNil) and:[ self selectedPackage includesClass: aClass theNonMetaClass]) ifTrue: [ self model package: self selectedPackage class: aClass category: nil method: nil ] ifFalse: [ self selectedClass: aClass withSelection: (self parentOfClass: aClass) ]. self updateOnClassSelection ]! ! !NautilusUI methodsFor: 'private' stamp: 'NicolaiHess 1/14/2014 10:41'! unselectClass commentTextArea ifNotNil: [ commentTextArea disable ]. acceptor := ClassDefinitionAcceptor model: self. classesSelection removeAll. self model package: self selectedPackage class: nil category: nil method: nil. self updateOnClassSelection! ! !NautilusUI methodsFor: 'private' stamp: 'NicolaiHess 1/14/2014 10:42'! updateOnClassSelection self changed: #toggleButtonEnabled. self setWindowTitle. self resetCategoriesListSelection. self resetMethodsListSelection. self update. self changed: #isAClassSelected. self changed: #getComments. self changed: #instanceButtonLabel. self changed: #sourceCodeFrom:! ! PackageTreeNautilusUI removeSelector: #selectedClassWithoutChangingSelection:! "Kernel"! "KernelTests"! "NativeBoost-Tests"! "Nautilus"! ----End fileIn----! ----QUIT----2014-01-15T08:28:03.923516+01:00 Pharo.image priorSource: 29873115! ----STARTUP----2014-01-15T08:33:36.998863+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-15T08:33:37.280849+01:00 Pharo-30696.image priorSource: 29889565! ----STARTUP----2014-01-15T13:12:51.326242+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/15/2014 13:10' prior: 80205061! commentForCurrentUpdate ^ '12589 Nautilus: Package file-outs are empty https://pharo.fogbugz.com/f/cases/12589 12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12645 Remove Athens-PangoCairo from the image https://pharo.fogbugz.com/f/cases/12645 12652 MethodClassifier wrong values https://pharo.fogbugz.com/f/cases/12652 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/15/2014 13:10'! script350 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-PangoCairo-StephaneDucasse.14.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.694.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.656.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.318.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.112.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/15/2014 13:10'! update30697 "self new update30697" self withUpdateLog: '12589 Nautilus: Package file-outs are empty https://pharo.fogbugz.com/f/cases/12589 12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12645 Remove Athens-PangoCairo from the image https://pharo.fogbugz.com/f/cases/12645 12652 MethodClassifier wrong values https://pharo.fogbugz.com/f/cases/12652 '. self loadTogether: self script350 merge: false. ScriptLoader new deletePackage: 'Athens-PangoCairo'. self flushCaches. ! ! "ScriptLoader30"! !MethodClassifier methodsFor: 'initialization' stamp: 'EstebanLorenzano 1/15/2014 11:27' prior: 26343486! buildPrefixDictionary prefixMapping := Dictionary new. prefixMapping at: 'test' put: 'tests'; at: 'bench' put: 'benchmarking'; at: 'copy' put: 'copying'; at: 'initialize' put: 'initialization'; at: 'accept' put: 'visitor'; at: 'visit' put: 'visitor'; at: 'signal' put: 'signalling'; at: 'parse' put: 'parsing'; at: 'add' put: 'adding'; at: 'is' put: 'testing'; at: 'as' put: 'converting'; at: 'new' put: 'instance creation'.! ! !NautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/15/2014 11:40' prior: 80219664! "protocol: accessing" selectedClassWithoutChangingSelection: aClass categoryWidget resetCategoryCache. self okToChangeBoth ifFalse: [ ^ self ]. aClass ifNil: [ self unselectClass ] ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self. classesSelection at: aClass theNonMetaClass put: true. (self selectedPackageIncludes: aClass theNonMetaClass) ifTrue: [ self model package: self selectedPackage class: aClass category: nil method: nil ] ifFalse: [ self selectedClass: aClass withSelection: (self parentOfClass: aClass) ]. self updateOnClassSelection ]! ! !NautilusUI methodsFor: 'tests' stamp: 'NicolaiHess 1/15/2014 11:40'! selectedPackageIncludes: aClass ^ (self selectedPackage notNil) and:[ (self selectedPackage classes includes: aClass ) or:[ self selectedPackage classes includes: aClass class ]. ]! ! !RPackageTag methodsFor: 'file in/out' stamp: 'EstebanLorenzano 1/15/2014 11:36' prior: 79390834! fileOut | internalStream | internalStream := (String new: 1000) writeStream. SystemOrganization fileOutCategory: self categoryName on: internalStream. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! "Nautilus"! "RPackage-Core"! "System-Support"! AthensPangoText removeSelector: #olddrawOn:! AthensPangoText removeSelector: #drawOn:fontColor:! AthensPangoText removeSelector: #drawOn:! AthensPangoLayoutLine removeSelector: #primShowLayout:! AthensPangoLayoutLine removeSelector: #primLayoutPath:! AthensPangoLayoutLine removeSelector: #primGetExtentsInk:logical:! AthensPangoLayoutLine removeSelector: #height! AthensPangoLayoutLine removeSelector: #getExtents! AthensPangoLayoutLine removeSelector: #extent! AthensPangoLayoutLine class removeSelector: #finalizeResourceData:! AthensPangoLayoutLine class removeSelector: #at:in:! Smalltalk globals removeClassNamed: #AthensPangoLayoutLine! AthensPangoLayout removeSelector: #wrapWidth:! AthensPangoLayout removeSelector: #wrapWidth! AthensPangoLayout removeSelector: #underlineOn:at:extending:! AthensPangoLayout removeSelector: #toCString:! AthensPangoLayout removeSelector: #text:markup:! AthensPangoLayout removeSelector: #text:! AthensPangoLayout removeSelector: #setFontDescriptionFromString:! AthensPangoLayout removeSelector: #setFontDescription:! AthensPangoLayout removeSelector: #readOnlyLineAt:! AthensPangoLayout removeSelector: #primUpdateLayout:! AthensPangoLayout removeSelector: #primShowLayout:! AthensPangoLayout removeSelector: #primShowErrorUnderline:atX:y:width:height:! AthensPangoLayout removeSelector: #primSetWidth:! AthensPangoLayout removeSelector: #primSetText:size:! AthensPangoLayout removeSelector: #primSetMarkup:length:! AthensPangoLayout removeSelector: #primSetHeight:! AthensPangoLayout removeSelector: #primSetFontDescription:! AthensPangoLayout removeSelector: #primMoveCursorVisuallyStrong:from:trailing:towards:storeNextIn:storeNextTrailingIn:! AthensPangoLayout removeSelector: #primLayoutX:Y:toIndex:trailing:! AthensPangoLayout removeSelector: #primLayoutPath:! AthensPangoLayout removeSelector: #primIndexToPosition:fill:! AthensPangoLayout removeSelector: #primIndex:toLine:x:trailing:! AthensPangoLayout removeSelector: #primGetWidth! AthensPangoLayout removeSelector: #primGetText! AthensPangoLayout removeSelector: #primGetSizeWidth:height:! AthensPangoLayout removeSelector: #primGetLineCount! AthensPangoLayout removeSelector: #primGetIterator! AthensPangoLayout removeSelector: #primGetHeight! AthensPangoLayout removeSelector: #primGetFontDescription! AthensPangoLayout removeSelector: #primGetCursorPosAt:strong:weak:! AthensPangoLayout removeSelector: #primErrorUnderlineCurrentPathOf:atX:y:width:height:! AthensPangoLayout removeSelector: #primClearAttributes! AthensPangoLayout removeSelector: #positionAt:! AthensPangoLayout removeSelector: #pangoScale! AthensPangoLayout removeSelector: #numberOfLines! AthensPangoLayout removeSelector: #nextCursorPositionFrom:forward:advance:! AthensPangoLayout removeSelector: #maximumHeight:wrappedTo:! AthensPangoLayout removeSelector: #markup:! AthensPangoLayout removeSelector: #linesPerParagraph:wrappedTo:! AthensPangoLayout removeSelector: #lineAt:! AthensPangoLayout removeSelector: #lineAndDeltaXAtIndex:! AthensPangoLayout removeSelector: #iterator! AthensPangoLayout removeSelector: #isWrapped! AthensPangoLayout removeSelector: #isEllipsized! AthensPangoLayout removeSelector: #indexAt:! AthensPangoLayout removeSelector: #fontDescriptionString! AthensPangoLayout removeSelector: #fontDescription! AthensPangoLayout removeSelector: #extent! AthensPangoLayout removeSelector: #ellipsizeHeight:! AthensPangoLayout removeSelector: #ellipsizeHeight! AthensPangoLayout removeSelector: #cursorPositionsAtIndex:! AthensPangoLayout removeSelector: #asString! AthensPangoLayout class removeSelector: #newIn:! AthensPangoLayout class removeSelector: #finalizeResourceData:! Smalltalk globals removeClassNamed: #AthensPangoLayout! Smalltalk globals removeClassNamed: #AthensPangoText! AthensPangoTabs removeSelector: #primSetTabsOn:! AthensPangoTabs removeSelector: #primSetTab:alignment:location:! AthensPangoTabs removeSelector: #primNumberOfStops! AthensPangoTabs removeSelector: #primGetTabStopAt:! AthensPangoTabs removeSelector: #loadOn:! AthensPangoTabs removeSelector: #at:put:! AthensPangoTabs removeSelector: #asArray! AthensPangoTabs class removeSelector: #tabs:! AthensPangoTabs class removeSelector: #primNewSize:pixels:firstAlignment:firstOffset:! AthensPangoTabs class removeSelector: #getFrom:! AthensPangoTabs class removeSelector: #finalizeResourceData:! Smalltalk globals removeClassNamed: #AthensPangoTabs! AthensPangoFontDescription removeSelector: #primToString! AthensPangoFontDescription removeSelector: #primIsAbsolute! AthensPangoFontDescription removeSelector: #loadOn:! AthensPangoFontDescription removeSelector: #isAbsolute! AthensPangoFontDescription removeSelector: #asString! AthensPangoFontDescription class removeSelector: #fromString:! AthensPangoFontDescription class removeSelector: #finalizeResourceData:! Smalltalk globals removeClassNamed: #AthensPangoFontDescription! AthensPangoExternalObject removeSelector: #resourceData! AthensPangoExternalObject removeSelector: #initialize! Smalltalk globals removeClassNamed: #AthensPangoExternalObject! PangoTypes class removeSelector: #initialize! AthensPangoLayoutDescription removeSelector: #wrapValueFrom:! AthensPangoLayoutDescription removeSelector: #wrapValue! AthensPangoLayoutDescription removeSelector: #wrap:! AthensPangoLayoutDescription removeSelector: #wrap! AthensPangoLayoutDescription removeSelector: #tabs:! AthensPangoLayoutDescription removeSelector: #tabs! AthensPangoLayoutDescription removeSelector: #spacing:! AthensPangoLayoutDescription removeSelector: #spacing! AthensPangoLayoutDescription removeSelector: #setTabsOn:! AthensPangoLayoutDescription removeSelector: #readTabsFrom:! AthensPangoLayoutDescription removeSelector: #readFrom:! AthensPangoLayoutDescription removeSelector: #primSetWrap:on:! AthensPangoLayoutDescription removeSelector: #primSetSpacingOn:! AthensPangoLayoutDescription removeSelector: #primSetJustifyOn:! AthensPangoLayoutDescription removeSelector: #primSetIndentOn:! AthensPangoLayoutDescription removeSelector: #primSetEllipsize:on:! AthensPangoLayoutDescription removeSelector: #primSetAlignment:on:! AthensPangoLayoutDescription removeSelector: #primGetWrapFrom:! AthensPangoLayoutDescription removeSelector: #primGetSpacingFrom:! AthensPangoLayoutDescription removeSelector: #primGetJustifyFrom:! AthensPangoLayoutDescription removeSelector: #primGetIndentFrom:! AthensPangoLayoutDescription removeSelector: #primGetEllipsizeFrom:! AthensPangoLayoutDescription removeSelector: #primGetAlignmentFrom:! AthensPangoLayoutDescription removeSelector: #loadOn:! AthensPangoLayoutDescription removeSelector: #justify:! AthensPangoLayoutDescription removeSelector: #justify! AthensPangoLayoutDescription removeSelector: #indentation:! AthensPangoLayoutDescription removeSelector: #indentation! AthensPangoLayoutDescription removeSelector: #getTabsFrom:! AthensPangoLayoutDescription removeSelector: #ellipsizeValueFrom:! AthensPangoLayoutDescription removeSelector: #ellipsizeValue! AthensPangoLayoutDescription removeSelector: #ellipsize:! AthensPangoLayoutDescription removeSelector: #ellipsize! AthensPangoLayoutDescription removeSelector: #beJustified! AthensPangoLayoutDescription removeSelector: #alignmentValueFrom:! AthensPangoLayoutDescription removeSelector: #alignmentValue! AthensPangoLayoutDescription removeSelector: #alignment:! AthensPangoLayoutDescription removeSelector: #alignment! Smalltalk globals removeClassNamed: #AthensPangoLayoutDescription! Smalltalk globals removeClassNamed: #PangoTypes! PangoConstants class removeSelector: #initializeWrapMode! PangoConstants class removeSelector: #initializeWeight! PangoConstants class removeSelector: #initializeVariant! PangoConstants class removeSelector: #initializeStyle! PangoConstants class removeSelector: #initializeStretch! PangoConstants class removeSelector: #initializeScale! PangoConstants class removeSelector: #initializeGravity! PangoConstants class removeSelector: #initializeFontMask! PangoConstants class removeSelector: #initializeEllipsizeMode! PangoConstants class removeSelector: #initializeDirection! PangoConstants class removeSelector: #initializeAlignment! PangoConstants class removeSelector: #initialize! AthensPangoRectangle removeSelector: #y! AthensPangoRectangle removeSelector: #x! AthensPangoRectangle removeSelector: #width! AthensPangoRectangle removeSelector: #readFrom:! AthensPangoRectangle removeSelector: #pangoScale! AthensPangoRectangle removeSelector: #origin! AthensPangoRectangle removeSelector: #initialize! AthensPangoRectangle removeSelector: #height! AthensPangoRectangle removeSelector: #extent! AthensPangoRectangle removeSelector: #asByteArray! Smalltalk globals removeClassNamed: #AthensPangoRectangle! Smalltalk globals removeClassNamed: #PangoConstants! PangoLibraryLoader class removeSelector: #loadPangoLibrary! PangoLibraryLoader class removeSelector: #getLibraryPath! PangoLibraryLoader class removeSelector: #getLibraryHandle! Smalltalk globals removeClassNamed: #PangoLibraryLoader! PangoCairoLibraryLoader class removeSelector: #loadPangoCairoLibrary! PangoCairoLibraryLoader class removeSelector: #getLibraryPath! PangoCairoLibraryLoader class removeSelector: #getLibraryHandle! Smalltalk globals removeClassNamed: #PangoCairoLibraryLoader! TPangoCairoLibrary removeSelector: #pangoNbCall:! TPangoCairoLibrary removeSelector: #pangoLibraryNameOrHandle! TPangoCairoLibrary removeSelector: #nbLibraryNameOrHandle! Smalltalk globals removeClassNamed: #TPangoCairoLibrary! ----End fileIn----! ----QUIT----2014-01-15T13:12:59.13272+01:00 Pharo.image priorSource: 29889762! ----STARTUP----2014-01-15T13:18:23.958361+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-15T13:18:24.592248+01:00 Pharo-30697.image priorSource: 29913502! ----STARTUP----2014-01-15T17:02:51.364598+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/15/2014 17:00' prior: 80221708! commentForCurrentUpdate ^ '11120 Browse code files in FileBrowser not working https://pharo.fogbugz.com/f/cases/11120 12653 MetacelloConfigTemplate is wrong https://pharo.fogbugz.com/f/cases/12653 12589 Nautilus: Package file-outs are empty https://pharo.fogbugz.com/f/cases/12589 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/15/2014 17:00'! script351 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.33.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.656.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.320.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/15/2014 17:00'! update30698 "self new update30698" self withUpdateLog: '11120 Browse code files in FileBrowser not working https://pharo.fogbugz.com/f/cases/11120 12653 MetacelloConfigTemplate is wrong https://pharo.fogbugz.com/f/cases/12653 12589 Nautilus: Package file-outs are empty https://pharo.fogbugz.com/f/cases/12589 '. self loadTogether: self script351 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigTemplateExample commentStamp: '' prior: 0! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !FilePackage methodsFor: 'accessing' stamp: 'md 1/15/2014 14:06' prior: 21925589! packageInfo ^String streamContents:[:s| s nextPutAll:'Package: '. s nextPutAll: self fullPackageName asString; cr; cr. sourceSystem isEmpty ifFalse:[ s nextPutAll: sourceSystem; cr; cr]. doIts isEmpty ifFalse:[ s nextPutAll:'Unresolvable doIts:'; cr; cr. doIts do:[:chgRec| s nextPut:$!!; nextPutAll: chgRec string; nextPut: $!!; cr]]].! ! !RPackage methodsFor: 'file in/out' stamp: 'EstebanLorenzano 1/15/2014 15:05' prior: 79388406! fileOut | internalStream | internalStream := (String new: 1000) writeStream. self classTags do: [ :each | SystemOrganization fileOutCategory: each categoryName on: internalStream ]. classExtensionSelectors keysAndValuesDo: [ :className :selectors | selectors do: [ :selector | | extendedClass | extendedClass := Smalltalk globals classNamed: className. extendedClass fileOutMethod: selector on: internalStream ] ]. ^ FileStream writeSourceCodeFrom: internalStream baseName: self name isSt: true.! ! !MetacelloConfigTemplateExample commentStamp: '' prior: 80257178! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !MetacelloConfigTemplateExample class methodsFor: 'development support' stamp: 'ChristopheDemarey 1/15/2014 11:32'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !MetacelloConfigTemplateExample class methodsFor: 'private' stamp: 'ChristopheDemarey 1/15/2014 11:32'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !MetacelloConfigTemplateExample class methodsFor: 'private' stamp: 'ChristopheDemarey 1/15/2014 11:32'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !MetacelloConfigTemplateExample class methodsFor: 'private' stamp: 'ChristopheDemarey 1/15/2014 11:32'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !MetacelloConfigTemplateExample class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 1/15/2014 11:32'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !MetacelloConfigTemplateExample class methodsFor: 'loading' stamp: 'ChristopheDemarey 1/15/2014 11:32'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !MetacelloConfigTemplateExample class methodsFor: 'loading' stamp: 'ChristopheDemarey 1/15/2014 11:32'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !MetacelloConfigTemplateExample class methodsFor: 'loading' stamp: 'ChristopheDemarey 1/15/2014 11:32'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !MetacelloConfigTemplateExample class methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/15/2014 11:32'! project ^self new project! ! !MetacelloConfigTemplateExample class methodsFor: 'development support' stamp: 'ChristopheDemarey 1/15/2014 11:32'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !MetacelloConfigTemplateExample methodsFor: 'baselines' stamp: 'ChristopheDemarey 1/15/2014 11:32'! baseline10: spec "Baselines are used by convention in Metacello and essentially are nothing else than normal versions. Name the baseline after the first version it was introduced. In this case 1.0-baseline was introduced the first time with the 1.0 version defined in the #version10 method. Metacello only uses the following tag to figure out the name of this baseline:" "Using #common makes this dependency declaration available for all Smalltalks. If you need more fine-grained control you can add several #for:do: sections for other releases." spec for: #common do: [ spec blessing: #baseline. "specify the default repository for your project's packages" spec repository: 'http://smalltalkhub.com/mc/JohnDoe/MyProject/main'. "use separate methods for external projects" self fuelMetalevel: spec; fileSystemLegacy: spec. "specify the dependencies between packages and projects" spec "a package without dependencies:" package: 'MyProject-Core'; package: 'MyProject-Tests' with: [ "Specfiy dependencies using the #requires: directive, you can refer to any name here, in this case to an external project" spec requires: #('MyProject-Core' 'FuelMetalevel' 'FileSystemLegacy')]. "using groups certain packages and projects can be loaded conditionally" spec "load the tests by default" group: 'default' with: #('core' 'test'); group: 'test' with: #('MyProject-Tests'); group: 'core' with: #('MyProject-Core')]! ! !MetacelloConfigTemplateExample methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/15/2014 11:32'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes" ^ #().! ! !MetacelloConfigTemplateExample methodsFor: 'tags' stamp: 'ChristopheDemarey 1/15/2014 11:32'! development: spec "By convention the development branch should point to a fixed version that is regularly updated and might contain unstable code. The name used by Metacello is only defined by the following pragma:" "For the development tag refer to a fixed version which you update if you commit new code. Note that you can refer here to any other version name from this configuration" spec for: #'common' version: 'dev'. ! ! !MetacelloConfigTemplateExample methodsFor: 'external projects' stamp: 'ChristopheDemarey 1/15/2014 11:32'! fileSystemLegacy: spec "This is an example of an external project which does not have a configuration yet. Note that the package name is only used in the Metacello configuration and does not have be exactly the same as the Monticello project/version name." spec package: 'FileSystemLegacy' with: [ spec repository: 'http://smalltalkhub.com/mc/PharoExtras/FileSystemLegacy/main'; "if you do not specify a version, automatically the newest version is chose." file: 'FileSystem-Legacy-JohanBrichau.2' ]! ! !MetacelloConfigTemplateExample methodsFor: 'external projects' stamp: 'ChristopheDemarey 1/15/2014 11:32'! fuelMetalevel: spec "Specify a dependency on an external project which has it's own configuration. The given project name can be chosen freely, for simplicity use the same name as the configuration or the conditional group you load." spec project: 'FuelMetalevel' with: [ spec repository: 'http://ss3.gemstone.com/ss/Fuel'; className: 'ConfigurationOfFuel'; "if you want to load by default a special group usse the #loads: message plus a group name of the external configuration" loads: #FuelMetalevel ].! ! !MetacelloConfigTemplateExample methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/15/2014 11:32'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" project := MetacelloMCProject new projectAttributes: self customProjectAttributes. (Smalltalk at: #MetacelloVersionConstructor) on: self project: project. project loadType: #linear. "change to #atomic if desired" project ]! ! !MetacelloConfigTemplateExample methodsFor: 'tags' stamp: 'ChristopheDemarey 1/15/2014 11:32'! stable: spec "Symbolic versions can be used to introduce an indirection to a version number. The real name used by Metacello is only defined by the following pragma:" "If another version is stable for a differen Smalltalk use a specific name" "spec for: #'pharo1.4.x' version: '0.9'" "Specfiy which exact version you want to load" spec for: #'common' version: '1.0'. ! ! !MetacelloConfigTemplateExample methodsFor: 'versions' stamp: 'ChristopheDemarey 1/15/2014 11:32'! version10: spec "The name for this version is solely defined by the following pragma:" "Baselines are used to define more complex setups for your project. If you want to use external projects and have fine-graind control of the dependencies between packages use the #imports: part. See the #baseline10: for more details." "Using #for:do: with the #common release specifier the following version declaration is valid for all platforms." spec for: #common do: [ spec description: 'Version 1.0 the current stable release'; blessing: #release; author: 'John Doe'; timestamp: '2013-05-01'. "Specify the versions for each package and external project defined in the baseline, here the 1.0-baseline defined in the baseline10 method." spec "For standard Monticello packages simply refere to the full version name without the extension:" package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.52'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.73'; "External projects versions are specified using #project:with:. Note the project name referes to the name used in the Metacello declaration. FuelMetalevel is defined in the #fuelMetalevel: method." project: 'FuelMetalevel' with: #stable ]. "If you want to specify different version on other platforms add another #for:do: block with a different version identifier."! ! !MetacelloConfigTemplateExample methodsFor: 'versions' stamp: 'ChristopheDemarey 1/15/2014 11:32'! versionDevelopment: spec "version specification for the current development branch, see #version10 for a complete explanation of a version declaration. In this case the 'dev' version uses the same baselin as version '1.0':" "Update this configuration regulrarly with intermediate releases. If a version is more stable or should stay accessible copy this 'dev' definition and give it a proper version name on its own. For example, in this case you might want to split a new version '1.1' by copying over this definition." spec for: #common do: [ spec description: 'Development Version'; blessing: #development; author: 'John Doe'; timestamp: '2013-05-09'. spec package: 'MyProject-Core' with: 'MyProject-Core-JohnDoe.152'; package: 'MyProject-Tests' with: 'MyProject-Tests-JohnDoe.173'; "note that for the 'dev' version we rely on the #development version of the external FuleMetalevel project" project: 'FuelMetalevel' with: #development ].! ! MetacelloConfigTemplate removeSelector: #versionDevelopment:! MetacelloConfigTemplate removeSelector: #version10:! MetacelloConfigTemplate removeSelector: #stable:! MetacelloConfigTemplate removeSelector: #fuelMetalevel:! MetacelloConfigTemplate removeSelector: #fileSystemLegacy:! MetacelloConfigTemplate removeSelector: #development:! MetacelloConfigTemplate removeSelector: #baseline10:! "Metacello-MC"! "RPackage-Core"! "System-FilePackage"! ----End fileIn----! ----QUIT----2014-01-15T17:02:58.652602+01:00 Pharo.image priorSource: 29913698! ----STARTUP----2014-01-15T17:08:33.845302+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-15T17:08:34.2353+01:00 Pharo-30698.image priorSource: 29940308! ----STARTUP----2014-01-15T22:39:54.343352+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/15/2014 22:36' prior: 80245644! commentForCurrentUpdate ^ '12661 KeyboardEvent>>#storeOn: broken https://pharo.fogbugz.com/f/cases/12661 12660 MCPackage reviving RPackage when it shouldn''''t https://pharo.fogbugz.com/f/cases/12660 12659 Add Toggle full screen mode to World Windows menu https://pharo.fogbugz.com/f/cases/12659'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/15/2014 22:36'! script352 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.656.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.322.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.77.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/15/2014 22:36'! update30699 "self new update30699" self withUpdateLog: '12661 KeyboardEvent>>#storeOn: broken https://pharo.fogbugz.com/f/cases/12661 12660 MCPackage reviving RPackage when it shouldn''t https://pharo.fogbugz.com/f/cases/12660 12659 Add Toggle full screen mode to World Windows menu https://pharo.fogbugz.com/f/cases/12659'. self loadTogether: self script352 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageSet methodsFor: 'initialization' stamp: 'EstebanLorenzano 1/15/2014 18:59' prior: 79821804! initialize: aString self initialize. packageName := aString asSymbol. packages := (RPackage organizer packageNamed: aString ifAbsent: [ nil ]) ifNotNil: [ :package | { package } ] ifNil: [ {} ] ! ! !WorldState class methodsFor: 'world menu items' stamp: 'SvenVanCaekenberghe 1/15/2014 19:17' prior: 74913884! windowsOn: aBuilder (aBuilder item: #Windows) order: 4.0; withSeparatorAfter ; icon: Smalltalk ui icons smallWindowIcon; with: [ (aBuilder item: # 'Collapse all windows') action: [World collapseAll]; help: 'Reduce all open windows to collapsed forms that only show titles' translated. (aBuilder item: # 'Expand all windows') action: [World expandAll]; help: 'Expand all collapsed windows back to their expanded forms' translated. (aBuilder item: # 'Fit all windows') action: [World fitAll]; help: 'Fit all open windows as visible in World' translated. (aBuilder item: #'Close all debuggers') action: [Smalltalk tools debugger closeAllDebuggers]. (aBuilder item: # 'Send top window to back (\)') action: [SystemWindow sendTopWindowToBack]; help: 'Make the topmost window become the backmost one, and activate the window just beneath it.' translated. (aBuilder item: # 'Move windows onscreen') action: [World bringWindowsFullOnscreen]; help: 'Make all windows fully visible on the screen' translated. (aBuilder item: # 'Delete unchanged windows') action: [World closeUnchangedWindows]; help: 'Deletes all windows that do not have unsaved text edits.' translated. (aBuilder item: # 'Delete all windows discarding edits') action: [World closeAllWindowsDiscardingChanges]; help: 'Deletes all windows even if they have unsaved text edits.' translated. (aBuilder item: # 'Toggle full screen mode') action: [Display toggleFullscreen]; help: 'Turn full screen mode on when it is off, off when it is on.' translated. ]! ! !KeyboardEvent methodsFor: 'printing' stamp: 'SeanDeNigris 1/15/2014 15:24' prior: 74990831! storeOn: aStream aStream nextPutAll: type. aStream space. self timeStamp storeOn: aStream. aStream space. position x asInteger storeOn: aStream. aStream space. position y asInteger storeOn: aStream. aStream space. buttons storeOn: aStream. aStream space. keyValue storeOn: aStream. aStream space. charCode storeOn: aStream. aStream space. scanCode storeOn: aStream.! ! "Morphic-Core"! "RPackage-Core"! ----End fileIn----! ----QUIT----2014-01-15T22:40:01.519354+01:00 Pharo.image priorSource: 29940505! ----STARTUP----2014-01-15T22:44:42.490298+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-15T22:44:42.830298+01:00 Pharo-30699.image priorSource: 29954908! ----STARTUP----2014-01-16T10:13:58.289826+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/16/2014 10:11' prior: 80272456! commentForCurrentUpdate ^ '12656 Code coverage does not work anymore with specified #packageNamesUnderTest https://pharo.fogbugz.com/f/cases/12656'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/16/2014 10:12'! script353 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.18.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.278.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.656.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.322.mcz RPackage-SystemIntegration-MarcusDenker.199.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1388.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/16/2014 10:12'! update30700 "self new update30700" self withUpdateLog: '12656 Code coverage does not work anymore with specified #packageNamesUnderTest https://pharo.fogbugz.com/f/cases/12656'. self loadTogether: self script353 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TestRunner methodsFor: 'actions' stamp: 'DamienCassou 1/15/2014 16:51' prior: 79750747! addDeclaredPackagesUnderTestTo: packages classesSelected do: [ :class | (class class includesSelector: #packageNamesUnderTest) ifTrue: [ class packageNamesUnderTest do: [ :name | packages add: (RPackage organizer packageNamed: name) ] ] ]! ! "SUnit-UI"! ----End fileIn----! ----QUIT----2014-01-16T10:14:04.123853+01:00 Pharo.image priorSource: 29955105! ----STARTUP----2014-01-16T10:19:04.756917+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-16T10:19:05.008915+01:00 Pharo-30700.image priorSource: 29966965! ----STARTUP----2014-01-16T23:52:55.815306+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/16/2014 23:49' prior: 80287051! commentForCurrentUpdate ^ '12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12664 move categories need to ensure RPackage and RPackageTag https://pharo.fogbugz.com/f/cases/12664 12665 Allow non-dirty packages to be included into slice https://pharo.fogbugz.com/f/cases/12665 12669 Autogenerate comment for update based on slices MC packages present https://pharo.fogbugz.com/f/cases/12669 '! ! !ScriptLoader methodsFor: 'menu integration actions' stamp: 'SvenVanCaekenberghe 1/16/2014 23:07' prior: 32758735! doneApplyingChanges | comment commentQuoted st | Smalltalk image saveSession. "now you can reopen prior to publishing to fix :)" self saveAsNewImageWithCurrentReleaseNameToPublish. comment := UIManager default multiLineRequest: 'Comment for this update.' initialAnswer: self generateCommentForCurrentUpdate answerHeight: 200. comment ifNil: [^ self]. commentQuoted := comment copyReplaceAll: (String with: $') with: (String with: $' with: $'). st := String new writeStream. st nextPutAll: 'commentForCurrentUpdate'; cr. st nextPutAll: ' ^ '. st nextPut: $'. st nextPutAll: commentQuoted. st nextPut: $'. self class compile: (st contents) classified: 'public'. self class waitingCacheFolder deleteAllChildren. self saveChangedPackagesIntoWaitingFolder. self generateScriptAndUpdateMethodForNewVersion. self saveLatestScriptLoaderToWaitingFolder. self inform: 'Update prepared and ready to be verified.'! ! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/16/2014 23:07'! generateCommentForCurrentUpdate ^ self commentForIssues: self getSliceIssuesNumbers! ! !ScriptLoader methodsFor: 'mc related utils' stamp: 'SvenVanCaekenberghe 1/16/2014 22:59'! getSliceIssuesNumbers "Figure out which slices were loaded by looking at MC packages" ^ MCWorkingCopy allManagers select: [ :each | each packageName beginsWith: 'SLICE-Issue-' ] thenCollect: [ :each | ((each packageName allButFirst: 12) copyUpTo: $-) asNumber ]! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/16/2014 23:50'! script354 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-SvenVanCaekenberghe.202.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.285.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.118.mcz Spec-PolyWidgets-MarcusDenker.34.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/16/2014 23:50'! update30701 "self new update30701" self withUpdateLog: '12625 toggling hierarchy/flat shows wrong package and hides selected class https://pharo.fogbugz.com/f/cases/12625 12664 move categories need to ensure RPackage and RPackageTag https://pharo.fogbugz.com/f/cases/12664 12665 Allow non-dirty packages to be included into slice https://pharo.fogbugz.com/f/cases/12665 12669 Autogenerate comment for update based on slices MC packages present https://pharo.fogbugz.com/f/cases/12669 '. self loadTogether: self script354 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 14:18'! addClass: aClass "import a class already created but not attached to a package to the receiver. Handle also *- convention. Methods defined in *category are not added to the package. Pay attention that it will not import anything from the metaClass side" | protocols | "Now add everything" self addClassDefinition: aClass. protocols := aClass organization realCategories reject: [:each | (each first = $*) and: [ ( '*', self name asLowercase match: each asLowercase) not] ]. "we reject all extensions except the ones that have the same name as the package - highly improbable but who knows" protocols do: [:each | self importProtocol: each forClass: aClass]! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 1/16/2014 10:40' prior: 79165405! addClassTag: aSymbol "Add the class tag from the receiver, if already added do nothing." | tagName | "strip package name if needed" tagName := self toTagName: aSymbol. ^ self classTagNamed: tagName ifAbsent: [ self basicAddClassTag: tagName ] ! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/16/2014 10:40'! basicAddClassTag: tagName | packageTag | packageTag := RPackageTag package: self name: tagName. classTags add: packageTag. packageTag ensureSystemCategory. ^ packageTag ! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/16/2014 14:19' prior: 42044266! importCategory "import all the classes of the class categories matching the receiver name (following package info semantics)." | cat classesInCat | cat := Smalltalk globals organization categories select: [:each | each beginsWith: self name ]. classesInCat := cat gather: [:c | Smalltalk globals organization listAtCategoryNamed: c]. classesInCat do: [:each | self addClass: (Smalltalk globals at: each). self addClass: (Smalltalk globals at: each) theMetaClass]! ! !RPackage methodsFor: 'private' stamp: 'StephaneDucasse 7/29/2010 21:16' prior: 31777160! importProtocol: aProtocol forClass: aClass "import all the methods of a protocol as defined in the receiver." (aClass organization listAtCategoryNamed: aProtocol) do: [:each | self addMethod: (aClass >> each)] ! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 1/16/2014 10:36' prior: 79168696! addClassCategoryBasedOn: aSelection | name package packageTag | packageTag := nil. package := aSelection package. name := UIManager default request: ('New category: {1}-' format: { package name }) initialAnswer: '' title: 'Create a new category'. (self isValidPackageName: name) ifTrue: [ packageTag := package addClassTag: name ] ifFalse: [ self alertInvalidPackageName: name ]. ^ packageTag! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 11:05' prior: 74408493! addClass: aClass aClass package removeClass: aClass. self package addClass: aClass. ^ self addClassNamed: aClass name.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 11:08' prior: 74408630! addClassNamed: aSymbol (classNames includes: aSymbol) ifTrue: [ ^ self ]. ^ classNames add: aSymbol.! ! !RPackageTag methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 10:38'! ensureSystemCategory SystemOrganization addCategory: self categoryName! ! !MCSliceMaker methodsFor: 'user interface' stamp: 'IgorStasenko 1/16/2014 13:09' prior: 24989020! rootItems ^ (MCWorkingCopy allManagers sort: [ :a :b | "sort putting modified packages first in the list" (a modified = b modified) ifTrue: [ a package name <= b package name ] ifFalse: [ a modified ] ])! ! !MCSliceMaker methodsFor: 'user interface' stamp: 'IgorStasenko 1/16/2014 13:12' prior: 24989186! window | sliceInfoRow buttonsRow okBtn cancelBtn issueNumberEntry issueSummaryEntry tree treeMorph issueSummaryDownloader | window := StandardWindow new model: self. window title: ' Slice Maker' translated. issueNumberEntry := self issueNumberEntryOn: window. issueSummaryDownloader := self issueSummaryDownloaderButtonOn: window. issueSummaryEntry := self issueSummaryOn: window. sliceInfoRow := PanelMorph new changeTableLayout; cellInset: 10 @ 4; layoutInset: 4 @ 4; listDirection: #leftToRight; hResizing: #shrinkWrap; vResizing: #shrinkWrap. sliceInfoRow addAllMorphs: {issueNumberEntry. window newLabel: '-'. issueSummaryDownloader. issueSummaryEntry}. buttonsRow := PanelMorph new changeTableLayout; cellInset: 10 @ 4; layoutInset: 4 @ 4; listDirection: #rightToLeft; hResizing: #shrinkWrap; vResizing: #shrinkWrap. okBtn := window newOKButtonFor: self getEnabled: #okUnabled. cancelBtn := window newCancelButtonFor: self. okBtn isDefault: true. self info addDependent: okBtn. buttonsRow addAllMorphs: {cancelBtn. okBtn}. window addMorph: sliceInfoRow fullFrame: ( (0 @ 0 corner: 1 @ 0) asLayoutFrame bottomOffset: sliceInfoRow height). tree := MorphTreeModel new rootItems: self rootItems; beCheckList; autoMultiSelection: true; wrapBlockOrSelector: #packageNameWithStar; headerLabel: 'Dirty Packages to be included in the slice'; yourself. tree onSelectionChangeSend: #selectionChanged: to: self. treeMorph := tree defaultTreeMorph buildContents; "selectAll; " "hResizing: #spaceFill;" vResizing: #spaceFill; yourself. window addMorph: treeMorph fullFrame: (LayoutFrame identity topOffset: sliceInfoRow height ; bottomOffset: buttonsRow height negated). window addMorph: buttonsRow fullFrame: ((0 @ 1 corner: 1 @ 1) asLayoutFrame topOffset: buttonsRow height negated). ^ window! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'EstebanLorenzano 1/16/2014 11:23' prior: 28303489! renameCategory "Prompt for a new category name and add it before the current selection, or at the end if no current selection" | category newName vScroll | self okToChange ifFalse: [^ self]. category := self selectedCategory. vScroll := categoryWidget vScrollValue. newName := self renameCategory: category from: self selectedClass. newName ifNil: [ ^ self ]. categoryWidget deselectProtocol: category. self selectedCategory: newName. categoryWidget selectProtocol: newName. self update. categoryWidget vScrollValue: vScroll! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/16/2014 11:54' prior: 74372717! systemClassAddedActionFrom: ann | class rPackage categoryNameSymbol | class := ann classAffected. categoryNameSymbol := class category. rPackage := (self packageMatchingExtensionName: categoryNameSymbol) ifNil: [ self registerPackage: (self packageClass named: categoryNameSymbol) ]. "when we add the class, the parent category should normally already be register correctly at the RPackageOrganizer" "this next line should import the class and all its methods: " rPackage addClass: class. rPackage addClassDefinition: class toClassTag: class category asSymbol. rPackage addClass: class theMetaClass "maybe the last update should be (is?) automatically done when adding or removing from a RPackage." "self default registerPackage: rPackage forClass: class" "maybe have to check for class and metaClass that will maybe both throw an event? => seems to be correctly handled by RPackage"! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/16/2014 14:18' prior: 79848664! systemClassRecategorizedActionFrom: ann | class newRPackage oldRPackage newCategoryName oldCategoryName| class := ann classAffected. newCategoryName := ann newCategory asSymbol. oldCategoryName := ann oldCategory asSymbol. oldRPackage := self packageMatchingExtensionName: oldCategoryName includingClass: class. newRPackage := (self packageMatchingExtensionName: newCategoryName) ifNil: [ self registerPackage: (self packageClass named: newCategoryName) ]. oldRPackage removeClass: class. newRPackage addClass: class. newRPackage addClassDefinition: class toClassTag: class category asSymbol. newRPackage addClass: class theMetaClass . SystemAnnouncer uniqueInstance classRepackaged: class from: oldRPackage to: newRPackage.! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/16/2014 11:44' prior: 40149084! systemMethodRecategorizedActionFrom: ann "a protocol has been renamed a method has been removed. // WILL BE TREATED WITH SystemMethodRemovedAnnouncement a method has been moved to another category -maybe from the classic category to an extending package -maybe from an extending package to another extending package -maybe from an extending package to a classic category - maybe from a classic category to another classic category" | oldProtocol newProtocol method methodPackage destinationPackage | method := ann methodRecategorized. method ifNil: [ ^ self ]. method origin = ann methodClass ifFalse: [ ^ self]. newProtocol := ann newProtocol. newProtocol ifNil: [ ^ self ]. oldProtocol := ann oldProtocol ifNil: [ '' ]. methodPackage := method packageFromOrganizer: self. newProtocol asLowercase = oldProtocol asLowercase ifFalse: [ destinationPackage := (self hasPackageForProtocol: newProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: newProtocol inClass: method methodClass ] ifFalse: [ (newProtocol beginsWith: '*') ifTrue: [ self ensureExistAndRegisterPackageNamed: newProtocol allButFirst capitalized ] ifFalse: [ method methodClass package ] ]. methodPackage := (self hasPackageForProtocol: oldProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: oldProtocol inClass: method methodClass ] ifFalse: [ method methodClass package ]. methodPackage = destinationPackage ifFalse: [ (methodPackage methods includes: method) ifTrue: [ methodPackage removeMethod: method ]. destinationPackage addMethod: method. SystemAnnouncer uniqueInstance methodRepackaged: method from: methodPackage to: destinationPackage ] ]! ! !Protocol methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 11:23' prior: 48580915! addMethod: aSymbol ^ methods add: aSymbol! ! !AbstractNautilusUI methodsFor: 'drag and drop' stamp: 'EstebanLorenzano 1/16/2014 11:09' prior: 79173593! dropInAPackage: aCollection into: receiver aCollection do:[:aClass | self showGroups ifTrue: [ receiver addClasses: { aClass }. ActiveHand shiftPressed ifFalse: [ self selectedGroup removeClass: aClass. self updateClassView ]] ifFalse: [ receiver addClass: aClass theNonMetaClass. ActiveHand shiftPressed ifTrue: [ self selectedClass: nil. self updateClassView ] ifFalse:[ self selectedPackage: receiver. self selectedClass: aClass. self updateBothView ]]]! ! !PackageTreeGroupSelection methodsFor: 'as yet unclassified ' stamp: 'NicolaiHess 1/16/2014 09:56'! classes ^ self definedClasses! ! !AbstractTool methodsFor: 'category' stamp: 'EstebanLorenzano 1/16/2014 11:20' prior: 39608118! renameCategory: aCategory from: aClass "Prompt for a new category name and add it before the current selection, or at the end if no current selection" | oldName newName | aClass ifNil: [^ nil]. aCategory ifNil: [^ nil]. oldName := aCategory. newName := self class requestProtocolNameFor: aClass initialAnswer: oldName. newName isEmptyOrNil ifTrue: [^ nil ] ifFalse: [newName := newName asSymbol]. newName = oldName ifTrue: [^ nil ]. aClass organization renameCategory: oldName toBe: newName. ^ newName! ! !ProtocolOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 1/16/2014 11:22' prior: 78269888! moveMethodsFrom: fromProtocolNamed to: toProtocolNamed | fromProtocol toProtocol | fromProtocol := self protocolNamed: fromProtocolNamed. toProtocol := self protocolNamed: toProtocolNamed. toProtocol addAllMethodsFrom: fromProtocol. fromProtocol removeAllMethods. ^ toProtocol.! ! !ProtocolOrganizer methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/16/2014 11:22' prior: 78270925! renameProtocol: oldName into: newName (self existsProtocolNamed: newName) ifTrue: [ self moveMethodsFrom: oldName to: newName. self removeProtocolNamed: oldName ] ifFalse: [ ^ (self protocolNamed: oldName) name: newName; yourself ].! ! RPackage removeSelector: #importClass:! "ClassOrganizer-Core"! "MonticelloGUI"! "Nautilus"! "RPackage-Core"! "RPackage-SystemIntegration"! "Tools"! ----End fileIn----! ----QUIT----2014-01-16T23:53:05.283563+01:00 Pharo.image priorSource: 29967162! ----STARTUP----2014-01-16T23:57:44.635756+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-16T23:57:44.891752+01:00 Pharo-30701.image priorSource: 29993533! ----STARTUP----2014-01-17T10:36:55.577415+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/17/2014 10:34' prior: 80299115! commentForCurrentUpdate ^ '12643 MNU if a ButtonModel label is nil https://pharo.fogbugz.com/f/cases/12643 12663 #cleanUpForRelease should only be run on the build server https://pharo.fogbugz.com/f/cases/12663 '! ! !ScriptLoader methodsFor: 'cleaning' stamp: 'MarcusDenker 1/17/2014 08:54' prior: 79866912! flushCaches Smalltalk cleanUp. Smalltalk garbageCollect.! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/17/2014 10:34'! script355 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-StephaneDucasse.155.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-SvenVanCaekenberghe.202.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.399.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/17/2014 10:34'! update30702 "self new update30702" self withUpdateLog: '12643 MNU if a ButtonModel label is nil https://pharo.fogbugz.com/f/cases/12643 12663 #cleanUpForRelease should only be run on the build server https://pharo.fogbugz.com/f/cases/12663 '. self loadTogether: self script355 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EditableList commentStamp: '' prior: 75324118! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !NewListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:23'! adapterName ^ #NewListAdapter! ! !CheckBoxModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:20'! adapterName ^ #CheckBoxAdapter! ! !EditableList commentStamp: '' prior: 80337234! This widget allows you to edit a list of items : - add / remove an item to/from the list - order the list by moving elements up/down/top/bottom. The default behavior is to do a copy of the list. The widget works with its internal copy. It allows the user to accept / reject changes (for example by opening the widget in a DialogWindow) before affecting the original list. It is your responsability to copy EditableList items back to the original list. The addItemBlock is used to provide a way to give the item to add (e.g. a UIManager default chooseFrom: values:). Example: self example! !TreeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:36'! adapterName! ! !AbstractWidgetModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:31'! adapterName ^ self subclassResponsibility! ! !AbstractWidgetModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:31' prior: 69415832! defaultSpec ^ { self adapterName. #adapt:. #model }! ! !MultiColumnListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #MultiColumnListAdapter! ! !DynamicComposableModel methodsFor: 'rremove me' stamp: 'BenjaminVanRyseghem 1/12/2014 17:03'! ensureExtentFor: widget self haltOnce. self extent ifNil: [ self initialExtent ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ] ] ifNotNil: [ :ex | (widget respondsTo: #extent:) ifTrue: [ widget extent: ex ] ]. ! ! !RadioButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:24'! adapterName ^ #RadioButtonAdapter! ! !ContainerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:20'! adapterName ^ #ContainerAdapter! ! !ButtonModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:19'! adapterName ^ #ButtonAdapter! ! !ButtonModel methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/15/2014 10:15' prior: 79905796! addShortcutTipFor: aCharacter on: aString | index text | aString isNil ifTrue: [ ^ nil ]. text := aString asText. aCharacter ifNil: [ ^ text ]. index := aString asLowercase indexOf: aCharacter asLowercase. index isZero ifTrue: [ ^ text ]. ^ text addAttribute: (TextEmphasis underlined) from: index to: index; yourself! ! !TextInputFieldModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:26'! adapterName ^ #TextInputFieldAdapter! ! !ListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #ListAdapter! ! !DiffModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:20'! adapterName ^ #DiffAdapter! ! !TabModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:26'! adapterName ^ #TabAdapter! ! !ImageModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #ImageAdapter! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 9/28/2013 21:16' prior: 79705374! accept: aText notifying: aNotifyier self model accept: aText notifying: aNotifyier! ! !TreeColumnModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:27'! adapterName ^ #TreeColumnAdapter! ! !LabelModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #LabelAdapter! ! !DropListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #DropListAdapter! ! !WindowModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:30'! adapterName ^ #WindowAdapter! ! !MenuModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:22'! adapterName ^ #MenuAdapter! ! !MenuGroupModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:22'! adapterName ^ #MenuGroupAdapter! ! !DialogWindowModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:30'! adapterName ^ #DialogWindowAdapter! ! !TabManagerModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:25'! adapterName ^ #TabManagerAdapter! ! !TextModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:26'! adapterName ^ #TextAdapter! ! !MenuItemModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:22'! adapterName ^ #MenuItemAdapter! ! !SliderModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:24'! adapterName ^ #SliderAdapter! ! !MorphicButtonAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/15/2014 10:19' prior: 69642723! buildLabel: text withIcon: icon icon ifNil: [ ^ text ifNil: [ '' ] ifNotNil: [ text ] ]. ^ IconicListItem text: text icon: icon ! ! !TreeNodeModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:29'! adapterName ^ #TreeNodeAdapter! ! !IconListModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/13/2014 15:21'! adapterName ^ #IconListAdapter! ! "Spec-Core"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----2014-01-17T10:36:59.1118+01:00 Pharo.image priorSource: 29993730! ----STARTUP----2014-01-17T10:41:38.693062+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-17T10:41:38.9749+01:00 Pharo-30702.image priorSource: 30011508! ----STARTUP----2014-01-17T13:30:51.29265+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/17/2014 13:27' prior: 80325676! commentForCurrentUpdate ^ '12461 MultiByteBinaryOrTextStream cannot use TextConverters like MultiByteFileStream unless patched https://pharo.fogbugz.com/f/cases/12461 12488 Can not create newAnonymousSubclass of ByteLayout classes https://pharo.fogbugz.com/f/cases/12488 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/17/2014 13:28'! script356 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-CamilloBruni.13.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-SvenVanCaekenberghe.202.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.148.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/17/2014 13:28'! update30703 "self new update30703" self withUpdateLog: '12461 MultiByteBinaryOrTextStream cannot use TextConverters like MultiByteFileStream unless patched https://pharo.fogbugz.com/f/cases/12461 12488 Can not create newAnonymousSubclass of ByteLayout classes https://pharo.fogbugz.com/f/cases/12488 '. self loadTogether: self script356 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'CamilleTeruel 1/17/2014 11:53' prior: 78966992! build | oldClass metaChange classChange | result := oldClass := client classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: FixedLayout slots: classSlots traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: self layoutClass slots: slots traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ client recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'CamilleTeruel 1/17/2014 11:52' prior: 79191465! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: FixedLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: self layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. client classAdded: newClass inCategory: category. client installTraitComposition: traitComposition on: newClass. client installTraitComposition: classTraitComposition on: metaclass. ^ newClass! ! !SlotClassBuilder methodsFor: 'initialization' stamp: 'CamilleTeruel 1/17/2014 11:51' prior: 78966545! initialize super initialize. oldClasses := OrderedCollection new. newClasses := OrderedCollection new. sharedPoolsString := ''. sharedVariablesString := ''. classSlots := {}. slots := {}. superclass := Object. classTraitComposition := {} asTraitComposition. traitComposition := {} asTraitComposition.! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'CamilleTeruel 1/17/2014 11:53'! layoutClass "If not specified the layout class is the same as the superclass" ^ layoutClass ifNil: [ layoutClass := superclass layout class ]! ! !MultiByteBinaryOrTextStream methodsFor: 'private basic' stamp: 'monty 12/20/2013 00:29' prior: 27219443! basicNext | nextChar | ^ isBinary ifTrue: [super next] ifFalse: [ (nextChar := super next) ifNotNil: [nextChar asCharacter]].! ! "Collections-Streams"! "Slot"! ----End fileIn----! ----QUIT----2014-01-17T13:30:53.732692+01:00 Pharo.image priorSource: 30011703! ----STARTUP----2014-01-17T13:35:46.99139+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-17T13:35:47.335389+01:00 Pharo-30703.image priorSource: 30026116! ----STARTUP----2014-01-17T16:15:50.30946+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/17/2014 16:13' prior: 80343646! commentForCurrentUpdate ^ '12654 Class comment in EyeInspector references missing method https://pharo.fogbugz.com/f/cases/12654 12478 Crash when using fonts with Athens on ubuntu https://pharo.fogbugz.com/f/cases/12478 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/17/2014 16:13'! script357 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.905.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.144.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.80.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-SvenVanCaekenberghe.202.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/17/2014 16:13'! update30704 "self new update30704" self withUpdateLog: '12654 Class comment in EyeInspector references missing method https://pharo.fogbugz.com/f/cases/12654 12478 Crash when using fonts with Athens on ubuntu https://pharo.fogbugz.com/f/cases/12478 '. self loadTogether: self script357 merge: false. self flushCaches. ! ! "ScriptLoader30"! !EyeInspector commentStamp: 'MarcusDenker 1/17/2014 13:44' prior: 74113530! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>inspectorClass so it returns your new inspector! !EyeInspector commentStamp: 'MarcusDenker 1/17/2014 13:44' prior: 80369691! To do a specific inspector subclass this and override EyeInspector>>addSpecialFields Then on your object override Object>>inspectorClass so it returns your new inspector! !NativeBoostLinux32 methodsFor: 'accessing' stamp: 'IgorStasenko 1/16/2014 12:40' prior: 27939483! stackAlignment ^ 16! ! "NativeBoost-Unix"! ----End fileIn----! ----QUIT----2014-01-17T16:15:52.608587+01:00 Pharo.image priorSource: 30026312! ----STARTUP----2014-01-17T16:20:30.70484+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-17T16:20:31.038836+01:00 Pharo-30704.image priorSource: 30038630! ----STARTUP----2014-01-18T11:12:58.70622+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/18/2014 11:09' prior: 80358257! commentForCurrentUpdate ^ '12675 Add NativeBoost class >>#isAvailable https://pharo.fogbugz.com/f/cases/12675 12674 Fix NBExternalTypeValue initialization https://pharo.fogbugz.com/f/cases/12674 12673 Missing method to get the corresponding MCPackage from a RPackage https://pharo.fogbugz.com/f/cases/12673 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/18/2014 11:10'! script358 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.17.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.907.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.231.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.157.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.14.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.611.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/18/2014 11:10'! update30705 "self new update30705" self withUpdateLog: '12675 Add NativeBoost class >>#isAvailable https://pharo.fogbugz.com/f/cases/12675 12674 Fix NBExternalTypeValue initialization https://pharo.fogbugz.com/f/cases/12674 12673 Missing method to get the corresponding MCPackage from a RPackage https://pharo.fogbugz.com/f/cases/12673 '. self loadTogether: self script358 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NBExternalTypeValue class methodsFor: 'class factory' stamp: 'IgorStasenko 1/17/2014 20:41' prior: 80203436! getClassForType: aTypeName "Do not confuse.!! This method answers an anonymous class, a subclass of NBExternalTypeValue, which can be used for instantiation later i.e: floatTypeClass := NBExternalTypeValue ofType: 'float'. float := floatTypeClass new. float value: 1.5. float value. " ^ NBExternalTypeValue newAnonymousSubclass initValueType: aTypeName. ! ! !NBExternalTypeValue class methodsFor: 'class initialization' stamp: 'IgorStasenko 1/17/2014 20:44' prior: 48290927! initValueType: aTypeName "Initialize the value type and size. If you want to use a public subclass of me, then make sure you call this method in your class #initialize method. " self valueType: aTypeName! ! !NBExternalTypeValue class methodsFor: 'accessing' stamp: 'IgorStasenko 1/17/2014 20:42' prior: 48292382! valueType: aTypeName valueType := aTypeName. valueSize := (NBFFICallout new requestor: self; resolveType: valueType) typeSize. self installAccessors. ! ! !MCPackage methodsFor: 'testing' stamp: 'ChristopheDemarey 1/17/2014 18:25' prior: 79391138! isDirty ^ self workingCopy ifNil: [ false ] ifNotNilDo: [ :wc | wc modified ]! ! !RPackage methodsFor: '*RPackage-SystemIntegration' stamp: 'ChristopheDemarey 1/17/2014 18:22'! correspondingMcPackage | workingCopy | workingCopy := MCWorkingCopy allManagers detect: [ :wc | wc package name = name ]. ^workingCopy package! ! !NBFFICalloutTests methodsFor: 'private' stamp: 'IgorStasenko 1/17/2014 12:46' prior: 80129109! passString: str "see testPrepareArgumentsKeepsStackAligned" ^ self nbCallout function: #( uint (String str) ) emit: [ :gen :proxy :asm | asm mov: asm ESP to: asm EAX ] ! ! !NBFFICalloutTests methodsFor: 'running' stamp: 'IgorStasenko 1/17/2014 12:49'! setUp self class selectors do: [ :sel | NBNativeCodeGen removeNativeCodeFrom: (self class>>sel) ]! ! !NBFFICalloutTests methodsFor: 'tests' stamp: 'IgorStasenko 1/17/2014 20:47' prior: 80129765! testPrepareArgumentsKeepsStackAligned | sp | sp := self passString: '12345'. self assert: (sp \\ NativeBoost forCurrentPlatform stackAlignment) = 0. ! ! !NativeBoost class methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 1/17/2014 23:36'! isAvailable "Return true when NativeBoost support is available in the VM, false otherwise" ^ self isEnabledOrNil notNil! ! "Monticello"! "NativeBoost-Core"! "NativeBoost-Tests"! "RPackage-SystemIntegration"! ----End fileIn----! ----QUIT----2014-01-18T11:13:02.188623+01:00 Pharo.image priorSource: 30038826! ----STARTUP----2014-01-18T11:18:07.911122+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-18T11:18:08.247119+01:00 Pharo-30705.image priorSource: 30053296! ----STARTUP----2014-01-19T09:32:51.785981+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/19/2014 09:29' prior: 80370771! commentForCurrentUpdate ^ '12679 change package of ClassTrait >> #soleInstance https://pharo.fogbugz.com/f/cases/12679 12649 Closing AnnouncementSpy does not unregister from associatedAnnouncer https://pharo.fogbugz.com/f/cases/12649 12585 asFullRingDefinition does not (always) find the package of a method https://pharo.fogbugz.com/f/cases/12585 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/19/2014 09:29'! script359 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.242.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.301.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.907.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.23.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1390.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.613.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/19/2014 09:29'! update30706 "self new update30706" self withUpdateLog: '12679 change package of ClassTrait >> #soleInstance https://pharo.fogbugz.com/f/cases/12679 12649 Closing AnnouncementSpy does not unregister from associatedAnnouncer https://pharo.fogbugz.com/f/cases/12649 12585 asFullRingDefinition does not (always) find the package of a method https://pharo.fogbugz.com/f/cases/12585 '. self loadTogether: self script359 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AnnouncementSpy methodsFor: 'updating' stamp: 'NicolaiHess 1/18/2014 22:03'! windowIsClosing self close! ! !RGMethodDefinitionTest methodsFor: '*Ring-Tests-Monticello' stamp: 'NicolaiHess 1/17/2014 15:04' prior: 76755302! testAsFullMethodDefinition "self debug: #testAsFullMethodDefinition" | rgMethod | rgMethod := (Trait >> #asRingDefinition) asRingDefinition. self assert: rgMethod parent isNil. self assert: rgMethod package isNil. "retrieves package information from protocol name (class extension)" rgMethod := (Trait >> #asRingDefinition) asFullRingDefinition. self assert: rgMethod parent notNil. self assert: rgMethod parentName = #Trait. self assert: rgMethod parent methods size = 1. self assert: rgMethod parent package name equals: #Traits. self assert: rgMethod package notNil. self assert: rgMethod package name = #'Ring-Core-Kernel'. "retrieves package information from class package name " rgMethod := (Trait >> #name) asFullRingDefinition. self assert: rgMethod parent notNil. self assert: rgMethod parentName = #Trait. self assert: rgMethod parent methods size = 1. self assert: rgMethod parent package name equals: #Traits. self assert: rgMethod package notNil. self assert: rgMethod package name = #Traits. ! ! !CompiledMethod methodsFor: '*Ring-Core-Kernel' stamp: 'NicolaiHess 1/17/2014 15:03' prior: 19778583! asFullRingDefinition "Retrieves an active RGMethodDefinition which knows its parent . Note that the full conversion does not happen at the level of the class. If you need that request asFullRingDefinition to the class" | rgClass rgMethod | rgClass := self realClass asRingDefinition. rgMethod := self asActiveRingDefinition. rgClass addMethod: rgMethod. rgMethod package: (RGContainer packageOfMethod: rgMethod). ^ rgMethod! ! !ClassTrait methodsFor: 'accessing' stamp: 'md 3/14/2006 16:37' prior: 19350176! soleInstance ^baseTrait! ! "Announcements-View"! "Refactoring-Core"! "Ring-Core-Kernel"! "Ring-Tests-Monticello"! "Traits"! ----End fileIn----! ----QUIT----2014-01-19T09:32:55.511979+01:00 Pharo.image priorSource: 30053493! ----STARTUP----2014-01-19T09:37:40.150434+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-19T09:37:40.396431+01:00 Pharo-30706.image priorSource: 30067441! ----STARTUP----2014-01-19T10:41:47.547292+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/19/2014 10:39' prior: 80385439! commentForCurrentUpdate ^ '5541 SequenceableCollection>>#copyReplaceAll:with:asTokens: should be moved to string https://pharo.fogbugz.com/f/cases/5541 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/19/2014 10:39'! script360 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.244.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.907.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.173.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.613.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/19/2014 10:39'! update30707 "self new update30707" self withUpdateLog: '5541 SequenceableCollection>>#copyReplaceAll:with:asTokens: should be moved to string https://pharo.fogbugz.com/f/cases/5541 '. self loadTogether: self script360 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodFinder methodsFor: 'initialize' stamp: 'MarcusDenker 1/18/2014 13:55' prior: 79362986! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" atRandom normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atRandom: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !SequenceableCollection methodsFor: 'copying' stamp: 'MarcusDenker 1/18/2014 14:08' prior: 32999203! copyReplaceAll: oldSubCollection with: newCollection "Answer a copy of the receiver in which all occurrences of oldSubCollection have been replaced by newCollection " | aString startSearch currentIndex endIndex | aString := self. startSearch := 1. [(currentIndex := aString indexOfSubCollection: oldSubCollection startingAt: startSearch) > 0] whileTrue: [ endIndex := currentIndex + oldSubCollection size - 1. aString := aString copyReplaceFrom: currentIndex to: endIndex with: newCollection. startSearch := currentIndex + newCollection size]. ^ aString! ! !SequenceableCollection methodsFor: 'private' stamp: 'MarcusDenker 1/18/2014 14:10' prior: 33036149! copyReplaceAll: oldSubstring with: newSubstring asTokens: ifTokens "Answer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring. ifTokens (valid for Strings only) specifies that the characters surrounding the recplacement must not be alphanumeric. Bruce Simth, must be incremented by 1 and not newSubstring if ifTokens is true. See example below. " | aString startSearch currentIndex endIndex | self flag: #FIXME. "To be removed with the next update" (ifTokens and: [(self isString) not]) ifTrue: [(self isKindOf: Text) ifFalse: [ self error: 'Token replacement only valid for Strings']]. aString := self. startSearch := 1. [(currentIndex := aString indexOfSubCollection: oldSubstring startingAt: startSearch) > 0] whileTrue: [endIndex := currentIndex + oldSubstring size - 1. (ifTokens not or: [(currentIndex = 1 or: [(aString at: currentIndex-1) isAlphaNumeric not]) and: [endIndex = aString size or: [(aString at: endIndex+1) isAlphaNumeric not]]]) ifTrue: [aString := aString copyReplaceFrom: currentIndex to: endIndex with: newSubstring. startSearch := currentIndex + newSubstring size] ifFalse: [ ifTokens ifTrue: [startSearch := currentIndex + 1] ifFalse: [startSearch := currentIndex + newSubstring size]]]. ^ aString "Test case: 'test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true " ! ! !String methodsFor: 'copying' stamp: 'MarcusDenker 1/18/2014 14:11'! copyReplaceAll: oldSubstring with: newSubstring asTokens: ifTokens "Answer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring. ifTokens (valid for Strings only) specifies that the characters surrounding the recplacement must not be alphanumeric. Bruce Simth, must be incremented by 1 and not newSubstring if ifTokens is true. See example below. " | aString startSearch currentIndex endIndex | aString := self. startSearch := 1. [(currentIndex := aString indexOfSubCollection: oldSubstring startingAt: startSearch) > 0] whileTrue: [endIndex := currentIndex + oldSubstring size - 1. (ifTokens not or: [(currentIndex = 1 or: [(aString at: currentIndex-1) isAlphaNumeric not]) and: [endIndex = aString size or: [(aString at: endIndex+1) isAlphaNumeric not]]]) ifTrue: [aString := aString copyReplaceFrom: currentIndex to: endIndex with: newSubstring. startSearch := currentIndex + newSubstring size] ifFalse: [ ifTokens ifTrue: [startSearch := currentIndex + 1] ifFalse: [startSearch := currentIndex + newSubstring size]]]. ^ aString "Test case: 'test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true " ! ! !Text methodsFor: 'copying' stamp: 'MarcusDenker 1/18/2014 14:12' prior: 52493200! copyReplaceTokens: oldSubstring with: newSubstring "Replace all occurrences of oldSubstring that are surrounded by non-alphanumeric characters" ^ (self string copyReplaceAll: oldSubstring with: newSubstring asTokens: true) asText "'File asFile Files File''s File' copyReplaceTokens: 'File' with: 'Snick'"! ! !Text methodsFor: 'converting' stamp: 'MarcusDenker 1/18/2014 13:52' prior: 52491882! withSqueakLineEndings "Answer a copy of myself in which all sequences of or have been changed to " | newText | (string includes: Character lf) ifFalse: [ ^self copy ]. newText := self copyReplaceAll: String crlf with: String cr. (newText asString includes: Character lf) ifFalse: [ ^newText ]. ^newText copyReplaceAll: String lf with: String cr.! ! "Collections-Abstract"! "Collections-Strings"! "Text-Core"! "Tools"! ----End fileIn----! ----QUIT----2014-01-19T10:41:51.831361+01:00 Pharo.image priorSource: 30067638! ----STARTUP----2014-01-19T10:46:40.225717+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-19T10:46:40.473717+01:00 Pharo-30707.image priorSource: 30094246! ----STARTUP----2014-01-19T20:05:51.274095+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/19/2014 20:03' prior: 80399584! commentForCurrentUpdate ^ '12547 In the messageBrowser the [package] -> [nil] https://pharo.fogbugz.com/f/cases/12547 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/19/2014 20:03'! script361 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.244.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.342.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.907.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.325.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.175.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.613.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/19/2014 20:03'! update30708 "self new update30708" self withUpdateLog: '12547 In the messageBrowser the [package] -> [nil] https://pharo.fogbugz.com/f/cases/12547 '. self loadTogether: self script361 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MessageBrowser methodsFor: 'announcements' stamp: 'NicolaiHess 1/19/2014 11:46' prior: 76521293! methodAdded: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement method. (refreshingBlockHolder value cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. UIManager default defer: [ | sel text boolean | boolean := textModel hasUnacceptedEdits. boolean ifTrue: [ text := textModel pendingText ]. sel := listModel selectedItem. self messages: (listModel listItems add: item asFullRingDefinition; yourself). listModel setSelectedItem: sel. boolean ifTrue: [ textModel pendingText: text ] ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'NicolaiHess 1/19/2014 11:46' prior: 76521981! methodModified: anAnnouncement | item oldItem sel index | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement newMethod. oldItem := anAnnouncement oldMethod. sel := listModel selectedItem. sel ifNil: [ ^ self ]. (sel notNil and: [(sel methodClass = oldItem methodClass and: [ sel selector = oldItem selector ])]) ifFalse: [ ^ self ]. (refreshingBlockHolder value cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. index := listModel selectedIndex . UIManager default defer: [ | text list edits | edits := textModel hasUnacceptedEdits. edits ifTrue: [ text := textModel pendingText ]. list := listModel listItems remove: sel ifAbsent: []; add: item asFullRingDefinition; "to ensure it's still as RGMethod" yourself. self messages: list. listModel setSelectedIndex: index. edits ifTrue: [ textModel pendingText: text. textModel hasEditingConflicts: true ]. ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'NicolaiHess 1/19/2014 11:46' prior: 45001407! methodRemoved: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement methodRemoved. "Item is a compiled methed, where the list is populated with RGMethod" "(refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]." self okToChange ifFalse: [ ^ self ]. UIManager default defer: [ | sel itm | sel := listModel selectedIndex. itm := listModel selectedItem. (itm notNil and: [ itm methodClass = item methodClass and: [ itm selector = item selector ] ]) ifTrue: [ textModel hasUnacceptedEdits: false ]. self messages: (listModel listItems remove: item asFullRingDefinition ifAbsent: [ nil ]; yourself). listModel setSelectedIndex: sel ]! ! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-01-19T20:05:53.376559+01:00 Pharo.image priorSource: 30094443! ----STARTUP----2014-01-19T20:10:35.896469+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-19T20:10:36.160457+01:00 Pharo-30708.image priorSource: 30108594! ----STARTUP----2014-01-20T07:51:52.452169+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/20/2014 07:48' prior: 80426389! commentForCurrentUpdate ^ '11714 NewVersionBrowser needs to be finished https://pharo.fogbugz.com/f/cases/11714 12532 Unable to find sources file: blank image screen when starting Pharo30 and vm crash report https://pharo.fogbugz.com/f/cases/12532 12680 RPackage>>includesClassNamed: does not ensure that name is a Symbol https://pharo.fogbugz.com/f/cases/12680 12681 remove #copyReplaceAll:with:asTokens: from SquenceableCollection https://pharo.fogbugz.com/f/cases/12681 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/20/2014 07:49'! script362 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-SvenVanCaekenberghe.22.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.907.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.658.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.176.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-SvenVanCaekenberghe.671.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.613.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/20/2014 07:49'! update30709 "self new update30709" self withUpdateLog: '11714 NewVersionBrowser needs to be finished https://pharo.fogbugz.com/f/cases/11714 12532 Unable to find sources file: blank image screen when starting Pharo30 and vm crash report https://pharo.fogbugz.com/f/cases/12532 12680 RPackage>>includesClassNamed: does not ensure that name is a Symbol https://pharo.fogbugz.com/f/cases/12680 12681 remove #copyReplaceAll:with:asTokens: from SquenceableCollection https://pharo.fogbugz.com/f/cases/12681 '. self loadTogether: self script362 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DiffMorphChangeRecordConverter commentStamp: 'NicolaiHess 1/19/2014 23:41' prior: 0! A DiffMorphChangeRecordConverter is a converter used to show the diff between two methodreferences with a side by side view.! !RPackage methodsFor: 'testing' stamp: 'MarcusDenker 1/19/2014 23:15' prior: 31815190! includesClassNamed: aSymbol "Returns true if the receiver includes class named aSymbol in the classes that are defined within it: only class definition are considered - not class extensions" ^ classes includes: aSymbol asSymbol ! ! !PharoFilesOpener methodsFor: 'open sources' stamp: 'SvenVanCaekenberghe 1/19/2014 19:08' prior: 79067831! openSources: fullSourcesName forImage: imagePath "Look in various places for a sources file, return an open stream to it." | sourcesFile sourcesName | sourcesFile := fullSourcesName asFileReference. sourcesName := sourcesFile basename. "look for the sources file or an alias to it in the VM's directory" OSPlatform current potentialLocationsOfSourcesFile do: [ :dir | self ignoreIfFail: [ (sourcesFile := dir / sourcesName) exists ifTrue: [ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ] ] ]. "look for the sources file or an alias to it in the image directory" (sourcesFile := imagePath asFileReference parent / sourcesName) exists ifTrue: [ ^ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ]. "look for the sources in the current directory" (sourcesFile := sourcesName asFileReference) exists ifTrue: [ ^ sourcesFile readStream ifNotNil: [ :stream | ^ stream ] ]. ^ nil! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:23'! aboutToStyle: aBoolean! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:48'! behavior ^ self contextClass! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:23'! behavior: aClass self contextClass: aClass! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:24'! doItReceiver: aReceiver! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:21'! getText ^ self rightText! ! !DiffModel methodsFor: '*Spec-Tools-VersionBrowser' stamp: 'BenjaminVanRyseghem 10/18/2013 14:27'! text: aPairOfString (aPairOfString isText or: [aPairOfString isString]) ifTrue: [ self leftText: ''. self rightText: aPairOfString ] ifFalse: [ self leftText: aPairOfString first. self rightText: aPairOfString second ]! ! !DiffMorphChangeRecordConverter commentStamp: 'NicolaiHess 1/19/2014 23:41' prior: 80452676! A DiffMorphChangeRecordConverter is a converter used to show the diff between two methodreferences with a side by side view.! !DiffMorphChangeRecordConverter methodsFor: 'private' stamp: 'NicolaiHess 1/19/2014 17:39'! internalGetText ^ Array with: method sourceCode with:((self priorVersionOfAMethod:method )sourceCode)! ! !DiffMorphChangeRecordConverter methodsFor: 'private' stamp: 'NicolaiHess 1/19/2014 17:39'! priorVersionOfAMethod: aChangeRecord | index | list := referencesList sorted: [:a :b | a timeStamp > b timeStamp ]. index := list indexOf: aChangeRecord . ^ list at: index+1 ifAbsent: [ aChangeRecord ]! ! !NewVersionBrowser class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 13:33' prior: 70029632! browseVersionsForClass: aClass selector: aSelector ^ self browseVersionsOf: (aClass compiledMethodAt: aSelector) class: aClass meta: aClass isMeta category: (aClass organization categoryOfElement: aSelector) selector: aSelector! ! !NewVersionBrowser class methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/18/2013 13:29'! browseVersionsOf: method ^ self new browseVersionsOf: method class: method methodClass meta: method methodClass isMeta category: method protocol selector: method selector! ! !NewVersionBrowser class methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:31'! versionsBrowserListMenu: aBuilder | tool browser model | model := aBuilder model. browser := aBuilder model browser. tool := browser model. browser selectedMessage notNil ifTrue: [ | message | message := browser selectedMessage compiledMethod. (aBuilder item: #'Compare to current') help: 'Compare selected version to the current version'; target: model; selector: #compareToCurrentVersion. (aBuilder item: #'Compare to version...') help: 'Compare selected version to another selected version'; target: model; selector: #compareToOtherVersion. (aBuilder item: #'Revert to selected version') help: 'Resubmit the selected version, so that it becomes the current version'; action: [ model revert: message ]]. (aBuilder item: #Senders) keyText: 'n'; help: 'Browse all senders of this selector'; action: [ model browseSenders ]. (aBuilder item: #Implementors) keyText: 'm'; help: 'Browse all implementors of this selector'; action: [ model browseImplementors ]; withSeparatorAfter ! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:35'! browseImplementors SystemNavigation new browseImplementorsOf: selector name: 'Implementors of ' , selector autoSelect: nil! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:35'! browseSenders SystemNavigation new browseSendersOf: selector name: 'Senders of ' , selector autoSelect: selector! ! !NewVersionBrowser methodsFor: 'accessing' stamp: 'NicolaiHess 1/20/2014 00:03'! browser ^ browser! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/20/2014 01:57' prior: 67497025! browserForList: aList browser := MessageBrowser new. browser topologicSort: false; refreshingBlock: [:m | false]; sortingBlock: [:a :b | (a annotationNamed:#versionIndex ifAbsent:[0]) < (b annotationNamed:#versionIndex ifAbsent:[0]) ]; displayBlock: [:changeRecord| { changeRecord stamp firstWord. changeRecord stamp substrings allButFirst joinUsing:' '. changeRecord realClass name. changeRecord selector. '{',changeRecord category,'}'} ]. browser toolbarModel emptyDropList; addItemLabeled: 'Side By Side' do: [ self showDiffMorphWithConverter: (DiffMorphChangeRecordConverter methodReference: browser textConverter method referencesList: aList) ]; addItemLabeled: 'Source' do: [ self showSourceWithConverter: (SourceMethodConverter method: browser textConverter method) ]; addItemLabeled: 'Diff' do: [ self showSourceWithConverter: (DiffChangeRecordConverter methodReference: browser textConverter method referencesList: aList) ]. browser toolbarModel versionModel label: 'Revert'; action: [ self revert: browser selectedItem ]. browser listModel menu:[:menu | menu addAllFromPragma:'newVersionBrowserListMenu' target:self]. ^ browser.! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/20/2014 01:40' prior: 28449983! buildBrowser | changeList b | changeList := self buildChangeList. self browserForList: changeList. b := browser messages: changeList; title: 'Versions of ' , class name , '>>' , selector; openWithSpec. self showDiffMorphWithConverter: (DiffMorphChangeRecordConverter methodReference: browser textConverter method referencesList: changeList). ^ b ! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:29'! compareTo:anOtherVersion | diff versions | versions := Array with: (browser selectedMessage compiledMethod) with:anOtherVersion. diff := DiffModel new. diff title: 'Versions of ' , class name , '>>' , selector. diff text:(DiffMorphChangeRecordConverter methodReference: browser textConverter method referencesList: versions) getText. diff openWithSpec. ! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:20'! compareToCurrentVersion self compareTo: class >> selector! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/20/2014 01:35'! compareToOtherVersion | labels versions index | versions := self buildChangeList. labels := versions collect:[:version | version stamp ]. index := UIManager default chooseFrom: labels. index ifNil:[^ self]. self compareTo: (versions at: index) compiledMethod! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/19/2014 19:48' prior: 28450650! revert: aChangeRecord aChangeRecord ifNil: [self inform: 'nothing selected, so nothing done'] ifNotNil: [ class ifNotNil: [ class compile: aChangeRecord sourceCode classified: aChangeRecord category withStamp: aChangeRecord stamp notifying:nil]]. browser messages: self buildChangeList; setSelectedIndex: 1.! ! !NewVersionBrowser methodsFor: 'copy and paste' stamp: 'NicolaiHess 1/20/2014 01:55' prior: 43790770! scanVersionsOf: method class: aClass meta: meta category: cat selector: aSelector ^( ChangeSet scanVersionsOf: method class: aClass meta: meta category: cat selector: aSelector) collectWithIndex:[:c :i | |rg| rg:= c asRingDefinition. rg annotationNamed:#versionIndex put:i ] ! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/19/2014 17:15'! showDiffMorphWithConverter: aConverter | behavior | behavior := browser textModel behavior. browser instantiateModels: #(textModel DiffModel). browser needRebuild: false. browser openWithSpec. browser textConverter: aConverter. browser textModel behavior: behavior! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/18/2013 14:51'! showSourceWithConverter: aConverter | behavior | behavior := browser textModel behavior. browser instantiateModels: #(textModel TextModel). browser needRebuild: false. browser openWithSpec. browser textConverter: aConverter. browser textModel behavior: behavior! ! SequenceableCollection removeSelector: #copyReplaceAll:with:asTokens:! "Collections-Abstract"! "Files"! "RPackage-Core"! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-01-20T07:51:55.934174+01:00 Pharo.image priorSource: 30108791! ----STARTUP----2014-01-20T07:56:36.16233+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-20T07:56:36.414327+01:00 Pharo-30709.image priorSource: 30131061! ----STARTUP----2014-01-20T13:34:55.355104+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/20/2014 13:31' prior: 80440737! commentForCurrentUpdate ^ '12449 Nautilus setting "Show groups on top" breaks automatic group update https://pharo.fogbugz.com/f/cases/12449 12490 Unloading package does not unload correctly https://pharo.fogbugz.com/f/cases/12490 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/20/2014 13:32'! script363 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.660.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.194.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.176.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.614.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/20/2014 13:32'! update30710 "self new update30710" self withUpdateLog: '12449 Nautilus setting "Show groups on top" breaks automatic group update https://pharo.fogbugz.com/f/cases/12449 12490 Unloading package does not unload correctly https://pharo.fogbugz.com/f/cases/12490 '. self loadTogether: self script363 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/11/2014 23:09' prior: 48575321! removeCategory: protocolName (self protocolOrganizer hasProtocolNamed: protocolName) ifFalse: [ ^ self ]. self removeProtocol: (self protocolNamed: protocolName)! ! !ClassOrganization methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/11/2014 23:10'! removeProtocol: aProtocol | oldCategories | oldCategories := self protocolOrganizer allProtocolsNames copy. self protocolOrganizer removeProtocol: aProtocol. self notifyOfRemovedCategory: aProtocol name. self notifyOfChangedCategoriesFrom: oldCategories to: self protocolOrganizer allProtocolsNames.! ! !ClassOrganization methodsFor: 'accessing' stamp: 'ThierryGoubier 1/13/2014 20:50'! removeProtocolIfEmpty: protocolName "The protocol may already have been removed, be non empty or a special protocol which can't be removed, such as 'all'." (self protocolNamed: protocolName) ifNotNil: [ :protocol | (protocol isEmpty and: [ protocol canBeRemoved ]) ifTrue: [ self removeProtocol: protocol ] ]! ! !MCPackageTest methodsFor: 'private' stamp: 'ThierryGoubier 1/17/2014 10:34'! aMethodRemoved: anEvent "Force cleaning of the protocol." (anEvent protocol = self mockExtensionMethodCategory and: [ anEvent methodClass == MCSnapshotTest ]) ifTrue: [ anEvent methodClass organization removeProtocolIfEmpty: self mockExtensionMethodCategory ]! ! !MCPackageTest methodsFor: 'tests' stamp: 'ThierryGoubier 1/13/2014 20:51' prior: 24915848! testUnload | mock | self mockPackage unload. self deny: (Smalltalk hasClassNamed: #MCMockClassA). self deny: (MCSnapshotTest includesSelector: #mockClassExtension). self deny: (MCSnapshotTest organization protocolNamed: self mockExtensionMethodCategory) notNil. mock := Smalltalk globals at: #MCMock. self assert: (mock subclasses detect: [ :c | c name = #MCMockClassA ] ifNone: [ ]) isNil! ! !MCPackageTest methodsFor: 'tests' stamp: 'ThierryGoubier 1/17/2014 09:57'! testUnloadWithAdditionalTracking "This is to test against another entity removing the extension protocol as well." | mock | SystemAnnouncer uniqueInstance on: MethodRemoved send: #aMethodRemoved: to: self. self assert: (SystemAnnouncer uniqueInstance hasSubscriber: self ). self mockPackage unload. self deny: (Smalltalk hasClassNamed: #MCMockClassA). self deny: (MCSnapshotTest includesSelector: #mockClassExtension). self deny: (MCSnapshotTest organization protocolNamed: self mockExtensionMethodCategory) notNil. mock := Smalltalk globals at: #MCMock. self assert: (mock subclasses detect: [ :c | c name = #MCMockClassA ] ifNone: [ ]) isNil. SystemAnnouncer uniqueInstance unsubscribe: self. self deny: (SystemAnnouncer uniqueInstance hasSubscriber: self ). ! ! !MCMethodDefinition methodsFor: 'installing' stamp: 'ThierryGoubier 1/13/2014 20:46' prior: 24852544! removeSelector: aSelector fromClass: aClass "Safely remove the given selector from the target class. Be careful not to remove the selector when it has wandered to another package, but remove the category if it is empty." | newCategory | newCategory := aClass organization categoryOfElement: aSelector. newCategory ifNotNil: [ "If moved to and fro extension, ignore removal" (category beginsWith: '*') = (newCategory beginsWith: '*') ifFalse: [ ^ self ]. "Check if moved between different extension categories" ((category beginsWith: '*') and: [ category ~= newCategory ]) ifTrue: [ ^ self ] ]. aClass removeSelector: aSelector. aClass organization removeProtocolIfEmpty: category! ! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/19/2014 12:09'! groupsAreVisible ^ self showGroups or:[ PackageTreeNautilus showGroupsOnTop]! ! !AbstractNautilusUI methodsFor: 'group announcements' stamp: 'NicolaiHess 1/19/2014 12:06' prior: 17286858! aGroupHasBeenAdded: anAnnouncement "(NautilusUI methodDict at: #aGroupHasBeenRegistered:) getSource" | group | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [^ self ]. self groupsAreVisible ifFalse: [ ^ self ]. group := anAnnouncement group. (self groupsManager includes: group) ifTrue: [ self updateGroupView ]! ! !AbstractNautilusUI methodsFor: 'group announcements' stamp: 'NicolaiHess 1/19/2014 12:11' prior: 17287242! aGroupHasBeenRegistered: anAnnouncement "(NautilusUI methodDict at: #aGroupHasBeenRegistered:) getSource" | group | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [^ self ]. self groupsAreVisible ifFalse: [ ^ self ]. group := anAnnouncement group. (self groupsManager includes: group) ifTrue: [ self updateGroupView ]! ! !AbstractNautilusUI methodsFor: 'group announcements' stamp: 'NicolaiHess 1/19/2014 12:16' prior: 17287631! aGroupHasBeenRemoved: anAnnouncement "(NautilusUI methodDict at: #aGroupHasBeenRegistered:) getSource" window ifNil: [ ^ self ]. window isDisplayed ifFalse: [^ self ]. self groupsAreVisible ifFalse: [ ^ self ]. (self groupsManager = anAnnouncement holder) ifTrue: [ self selectedGroup = anAnnouncement group ifTrue: [ self selectedGroup: nil ]. self updateGroupView. self update ]! ! !AbstractNautilusUI methodsFor: 'group announcements' stamp: 'NicolaiHess 1/19/2014 12:13' prior: 17288089! aGroupHasBeenRenamed: anAnnouncement "(NautilusUI methodDict at: #aGroupHasBeenRegistered:) getSource" | group | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [^ self ]. self groupsAreVisible ifFalse: [ ^ self ]. group := anAnnouncement group. (self groupsManager includes: group) ifTrue: [ self updateGroupView ]! ! !AbstractNautilusUI methodsFor: 'group announcements' stamp: 'NicolaiHess 1/19/2014 12:16' prior: 17288475! aGroupHasBeenUnregistered: anAnnouncement | group | window ifNil: [ ^ self ]. window isDisplayed ifFalse: [^ self ]. self groupsAreVisible ifFalse: [ ^ self ]. group := anAnnouncement group. (self groupsManager includes: group) ifTrue: [ self updateGroupView ]! ! !AbstractNautilusUI methodsFor: 'group' stamp: 'NicolaiHess 1/19/2014 12:05' prior: 79173313! addNewGroup [ self groupsManager createAnEmptyStaticGroup ] on: GroupAlreadyExists do:[ :ex | self alertGroupExisting: ex groupName ]. ! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/19/2014 12:07'! groupsAreVisible ^ self showGroups! ! !AbstractNautilusUI methodsFor: 'buttons behavior' stamp: 'NicolaiHess 1/19/2014 12:21' prior: 17268386! groupsButtonLabel ^ ((self showGroups) and:[self groupsAreVisible]) ifTrue: [ self packageLabel ] ifFalse: [ self groupsLabel ]! ! "ClassOrganizer-Core"! "Monticello"! "Nautilus"! "Tests"! ----End fileIn----! ----QUIT----2014-01-20T13:34:59.615143+01:00 Pharo.image priorSource: 30131257! ----STARTUP----2014-01-20T13:39:38.402232+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-20T13:39:38.654227+01:00 Pharo-30710.image priorSource: 30149572! ----STARTUP----2014-01-20T22:29:53.702058+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/20/2014 22:26' prior: 80463203! commentForCurrentUpdate ^ '12163 New class template without poolDictionaries: line https://pharo.fogbugz.com/f/cases/12163 12632 window menu close all debuggers does not work anymore https://pharo.fogbugz.com/f/cases/12632 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/20/2014 22:27'! script364 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.616.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.663.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.196.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.176.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.617.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/20/2014 22:27'! update30711 "self new update30711" self withUpdateLog: '12163 New class template without poolDictionaries: line https://pharo.fogbugz.com/f/cases/12163 12632 window menu close all debuggers does not work anymore https://pharo.fogbugz.com/f/cases/12632 '. self loadTogether: self script364 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassDescription methodsFor: '*Nautilus' stamp: 'johanfabry 1/20/2014 11:34'! definitionForNautilus ^ self definition! ! !TraitDescription methodsFor: '*Nautilus' stamp: 'johanfabry 1/20/2014 11:37'! definitionForNautilus ^ self definition! ! !Class methodsFor: '*Nautilus' stamp: 'johanfabry 1/20/2014 11:34'! definitionForNautilus "Answer a String that defines the receiver." | aStream | aStream := (String new: 800) writeStream. superclass ifNil: [aStream nextPutAll: 'ProtoObject'] ifNotNil: [aStream nextPutAll: superclass name]. aStream nextPutAll: self kindOfSubclass; store: self name. (self hasTraitComposition) ifTrue: [ aStream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString]. aStream cr; tab; nextPutAll: 'instanceVariableNames: '; store: self instanceVariablesString. aStream cr; tab; nextPutAll: 'classVariableNames: '; store: self classVariablesString. aStream cr; tab; nextPutAll: 'category: '; store: self category asString. superclass ifNil: [ aStream nextPutAll: '.'; cr. aStream nextPutAll: self name. aStream space; nextPutAll: 'superclass: nil'. ]. ^ aStream contents! ! !SpecDebugger class methodsFor: 'utilities' stamp: 'MarcusDenker 1/20/2014 16:59' prior: 46058333! closeAllDebuggers "SpecDebugger closeAllDebuggers" (MorphicWindowAdapter allInstances select: [:w | (w model isKindOf: WindowModel) and: [ w model model isKindOf: self ] ]) do: [:w | w delete ]. SpecPreDebugWindow allInstances do: #delete. ! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 11/28/2013 12:49'! subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames category: aCategorySymbol "Added to allow for a simplified subclass creation experience. " ^ self subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: aCategorySymbol! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/20/2014 11:49'! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/20/2014 11:47' prior: 40999743! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !PackageTreeNautilusUI methodsFor: 'source code area' stamp: 'johanfabry 1/20/2014 11:09' prior: 79169954! defaultClassDescriptor | string | string := 'Object subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' category: '''. ^ self selectedPackage ifNotNil: [ :package | string, package categoryName, '''' ] ifNil: [ string, '''' ] ! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'johanfabry 11/14/2013 14:41' prior: 17337873! defaultClassDescriptor | string | string := 'Object subclass: #NameOfSubclass instanceVariableNames: '''' classVariableNames: '''' category: '''. ^ self selectedPackage ifNil: [string, '''' ] ifNotNil: [:package | string, package name, '''' ]! ! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'johanfabry 1/20/2014 11:29' prior: 17341676! selectedClassDescription ^ self selectedClass definitionForNautilus ! ! !Trait method! subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames category: aCategorySymbol "Added to allow for a simplified subclass creation experience. " ^ self subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: aCategorySymbol! ! !Trait method! subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames category: aCategorySymbol "Added to allow for a simplified subclass creation experience. " ^ self subclass: aSubclassSymbol instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: aCategorySymbol! ! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat | newClass copyOfOldClass | copyOfOldClass := self copy. newClass := self subclass: aTraitName instanceVariableNames: f classVariableNames: d poolDictionaries: s category: cat. newClass setTraitComposition: aTraitCompositionOrArray asTraitComposition. SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOldClass to: newClass. ^newClass! ! "Nautilus"! "Spec-Debugger"! "Traits"! ----End fileIn----! ----QUIT----2014-01-20T22:29:56.956095+01:00 Pharo.image priorSource: 30149769! ----STARTUP----2014-01-20T22:34:39.674756+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-20T22:34:39.934753+01:00 Pharo-30711.image priorSource: 30168675! ----STARTUP----2014-01-21T16:26:54.444208+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/21/2014 16:23' prior: 80481722! commentForCurrentUpdate ^ '12685 wrong version ordering in NewVersionBrowser compareTo https://pharo.fogbugz.com/f/cases/12685 12686 Failing test: testClassRespectsPolymorphismWithTrait https://pharo.fogbugz.com/f/cases/12686 12688 Fix WorldModel layout https://pharo.fogbugz.com/f/cases/12688 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/21/2014 16:24'! script365 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.618.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.287.mcz Spec-Debugger-SvenVanCaekenberghe.196.mcz Spec-Examples-MarcusDenker.55.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.61.mcz Spec-MorphicAdapters-MarcusDenker.120.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.178.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.617.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/21/2014 16:24'! update30712 "self new update30712" self withUpdateLog: '12685 wrong version ordering in NewVersionBrowser compareTo https://pharo.fogbugz.com/f/cases/12685 12686 Failing test: testClassRespectsPolymorphismWithTrait https://pharo.fogbugz.com/f/cases/12686 12688 Fix WorldModel layout https://pharo.fogbugz.com/f/cases/12688 '. self loadTogether: self script365 merge: false. WorldModel addInstVarNamed: 'removeme'; removeInstVarNamed: 'removeme'. self flushCaches. ! ! "ScriptLoader30"! !ClassTest methodsFor: 'testing' stamp: 'MarcusDenker 1/21/2014 13:36' prior: 80110628! testClassRespectsPolymorphismWithTrait | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in Class and Trait it must access some instance variable, otherwise the method can be implemented in TClass" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: Class and: Trait. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size equals: 0. "If the method is in Class and Trait, and they have different implementations, it must be declared in TClass as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: Class and: Trait. differentMethodsWithSameSelector do: [ :selector | (TClass >> selector) sourceCode. self assert: (TClass >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other. It would be excelent to remove these methods somehow, but is NOT good idea add methods to this list. Accessors to instance variables that do not belong to Trait: #setName: #getName #traitComposition #traitComposition: #localSelectors #localSelectors: #basicLocalSelectors #basicLocalSelectors #baseClass and #classClass have their equivalent in Trait, but the problem is the name of the selector, they are bad names. #addInstVarNamed: for traits is implemeted in TraitDescription" self assertCollection: (Class localSelectors difference: Trait localSelectors) equals: #( #traitComposition: #setName: #getName #baseClass #basicLocalSelectors #classClass isClass #basicLocalSelectors: #traitComposition #addInstVarNamed: #newAnonymousSubclass #definitionForNautilus ) asSet. "#classTrait:, #isClassTrait, #classTrait, #isBaseTrait and #baseTrait have their equivalent for classes but with different name #nautilusIcon and #initialize are implemented differently for traits, classes have their implentation in Object" self assertCollection: (Trait localSelectors difference: Class localSelectors) equals: #( #classTrait: #isClassTrait #classTrait #systemIcon #isBaseTrait #initialize #baseTrait ) asSet.! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/21/2014 11:05' prior: 80458316! browserForList: aList browser := MessageBrowser new. browser topologicSort: false; refreshingBlock: [:m | false]; sortingBlock: [:a :b | (a annotationNamed:#versionIndex ifAbsent:[0]) < (b annotationNamed:#versionIndex ifAbsent:[0]) ]; displayBlock: [:changeRecord | self displayStringsFor: changeRecord]. browser toolbarModel emptyDropList; addItemLabeled: 'Side By Side' do: [ self showDiffMorphWithConverter: (DiffMorphChangeRecordConverter methodReference: browser textConverter method referencesList: aList) ]; addItemLabeled: 'Source' do: [ self showSourceWithConverter: (SourceMethodConverter method: browser textConverter method) ]; addItemLabeled: 'Diff' do: [ self showSourceWithConverter: (DiffChangeRecordConverter methodReference: browser textConverter method referencesList: aList) ]. browser toolbarModel versionModel label: 'Revert'; action: [ self revert: browser selectedItem ]. browser listModel menu:[:menu | menu addAllFromPragma:'newVersionBrowserListMenu' target:self]. ^ browser.! ! !NewVersionBrowser methodsFor: 'instance creation' stamp: 'NicolaiHess 1/21/2014 10:29' prior: 80459686! buildBrowser | changeList b | changeList := self buildChangeList. self browserForList: changeList. b := browser messages: changeList; title: 'Recent versions of ' , class name , '>>' , selector; openWithSpec. self showDiffMorphWithConverter: (DiffMorphChangeRecordConverter methodReference: browser textConverter method referencesList: changeList). ^ b ! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/21/2014 09:51'! compareTo:anOtherVersion withLabel:aLabel | diff versions selected| selected := browser selectedMessage. versions := Array with:anOtherVersion with: (selected). diff := DiffModel new. diff title: ('Comparison from {1} to {2}' format:{selected stamp . aLabel}). diff text:(DiffMorphChangeRecordConverter methodReference: anOtherVersion referencesList: versions) getText. diff openWithSpec. ! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/21/2014 09:51' prior: 80460591! compareToCurrentVersion self compareTo: class >> selector withLabel:'current version'! ! !NewVersionBrowser methodsFor: 'menu' stamp: 'NicolaiHess 1/21/2014 09:52' prior: 80460729! compareToOtherVersion | labels versions index | versions := self buildChangeList. labels := versions collect: [ :version | version stamp ]. index := UIManager default chooseFrom: labels. index > 0 ifTrue: [ |selected| selected := versions at:index. self compareTo: selected withLabel: selected stamp]! ! !NewVersionBrowser methodsFor: 'accessing' stamp: 'NicolaiHess 1/21/2014 11:02'! displayStringsFor: aMethodVersion | author version | author := aMethodVersion stamp trim ifEmpty: [ '' ] ifNotEmpty: [ :s | s firstWord ]. version := aMethodVersion stamp trim substrings ifEmpty: [ '' ] ifNotEmpty: [ :s | s allButFirst joinUsing: ' ' ]. ^ {author. version. (aMethodVersion realClass name). (aMethodVersion selector). ('{' , aMethodVersion category , '}')}! ! !DiffMorphChangeRecordConverter methodsFor: 'private' stamp: 'NicolaiHess 1/21/2014 09:30' prior: 80455479! internalGetText | priorSource | priorSource := (self priorVersionOfAMethod: method) ifNotNil: [ :m | m sourceCode ] ifNil: [ '' ]. ^ Array with: priorSource with: method sourceCode! ! !DiffMorphChangeRecordConverter methodsFor: 'private' stamp: 'NicolaiHess 1/21/2014 09:29' prior: 80455679! priorVersionOfAMethod: aChangeRecord | index | index := referencesList identityIndexOf: aChangeRecord . ^ referencesList at: index+1 ifAbsent: [ nil ]! ! !TClassDescription methodsFor: '*Nautilus' stamp: 'MarcusDenker 1/21/2014 13:38'! definitionForNautilus ^ self definition! ! TraitDescription removeSelector: #definitionForNautilus! ClassDescription removeSelector: #definitionForNautilus! NewVersionBrowser removeSelector: #compareTo:! !Trait method! definitionForNautilus ^ self definition! ! !Trait method! definitionForNautilus ^ self definition! ! "KernelTests"! "Nautilus"! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-01-21T16:26:58.276394+01:00 Pharo.image priorSource: 30168872! ----STARTUP----2014-01-21T16:31:38.958443+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-21T16:31:39.210422+01:00 Pharo-30712.image priorSource: 30187245! ----STARTUP----2014-01-21T17:22:55.476162+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/21/2014 17:19' prior: 80500818! commentForCurrentUpdate ^ '12687 Spec Update https://pharo.fogbugz.com/f/cases/12687 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/21/2014 17:19'! script366 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1712.mcz KernelTests-MarcusDenker.618.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.292.mcz Spec-Debugger-MarcusDenker.198.mcz Spec-Examples-MarcusDenker.59.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.123.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.179.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.617.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/21/2014 17:19'! update30713 "self new update30713" self withUpdateLog: '12687 Spec Update https://pharo.fogbugz.com/f/cases/12687 '. self loadTogether: self script366 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecLayoutFrame commentStamp: '' prior: 0! I am a wrapper for the layout of widget. Each framework can then adapt me as it wants in its adapters! !WindowModel commentStamp: '' prior: 69546497! A WindowModel is a spec model for a Window! !DynamicComposableModel commentStamp: '' prior: 42240996! A DynamicComposableModel is a model of spec with a dynamic binding for subwidgets! !MorphicSliderAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/15/2014 17:01' prior: 69660849! defaultSpec ^ SpecLayout new type: #PluggableSliderMorph; send: #model: withArguments: #( model ); send: #getValueSelector: withArguments: #(value); send: #setValueSelector: withArguments: #( value: ); send: #value: withArguments: #(#(model absoluteValue)); send: #getLabelSelector: withArguments: #( label ); send: #max: withArguments: #(#(model max)); send: #min: withArguments: #(#(model min)); send: #quantum: withArguments: #(#(model quantum)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: #(#(model help)); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/15/2014 17:08' prior: 77680499! initialize super initialize. textHolder := '' asValueHolder. behaviorHolder := nil asValueHolder. aboutToStyleHolder := [ false ] asValueHolder. actionToPerformHolder := [ :text | ] asValueHolder. readSelectionHolder := [ selection value ] asValueHolder. enabledHolder := true asValueHolder. actionPerformedHolder := '' asValueHolder. isCodeCompletionAllowedHolder := true asValueHolder. doItContext := nil asValueHolder. doItReceiver := nil asValueHolder. hasUnacceptedEdits := false asValueHolder. selection := (1 to: 0) asValueHolder. scrollValue := (0@0) asValueHolder. menuHolder := [ :menu :shifted | shifted ifTrue: [ SmalltalkEditor shiftedYellowButtonMenu ] ifFalse: [ SmalltalkEditor yellowButtonMenu ] ] asValueHolder. autoAccept := false asValueHolder. wantsVisualFeedback := true asValueHolder. askBeforeDiscardingEdits := true asValueHolder. self registerEvents. self registerEventsForShout! ! !CheckBoxExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/15/2014 17:14' prior: 69556728! defaultSpec ^ { #ContainerModel. #add:. { self topSpec. #layout:. #(#SpecLayoutFrame bottomFraction: 0 bottomOffset: 20) }. #add:. {{#model . #container } . #layout: . #(#SpecLayoutFrame topOffset: 22) } }! ! !CheckBoxExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/15/2014 17:14' prior: 69557071! topSpec ^ { #ContainerModel. #add:. {{#model . #button1 } . #layout:. #(#SpecLayoutFrame rightFraction: 0.33 bottomFraction: 0 bottomOffset: 25)}. #add:. {{#model . #button2 } . #layout:. #(#SpecLayoutFrame leftFraction: 0.33 rightFraction: 0.66 bottomFraction: 0 bottomOffset: 25)}. #add:. {{#model . #button3 } . #layout:. #(#SpecLayoutFrame leftFraction: 0.66 bottomFraction: 0 bottomOffset: 25)}}! ! !MorphicWindowAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 12/10/2013 23:08' prior: 69680202! defaultSpec ^ #( SpecWindow model: model isResizeable: #(model isResizeable ))! ! !MorphicWindowAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 12/10/2013 23:08'! isResizeable ^ self model isResizeable! ! !MorphicWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 12/10/2013 23:08'! isResizeable: aBoolean ^ self widgetDo: [ :w | w isResizeable: aBoolean ]! ! !SpecLayoutFrame commentStamp: '' prior: 80530486! I am a wrapper for the layout of widget. Each framework can then adapt me as it wants in its adapters! !SpecLayoutFrame methodsFor: '*Spec-MorphicAdapters' stamp: 'BenjaminVanRyseghem 9/29/2013 15:22'! asMorphicLayout ^ LayoutFrame identity topFraction: self topFraction; topOffset: self topOffset; bottomFraction: self bottomFraction; bottomOffset: self bottomOffset; rightFraction: self rightFraction; rightOffset: self rightOffset; leftFraction: self leftFraction; leftOffset: self leftOffset; yourself! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:13'! bottomFraction ^ bottomFraction! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:13'! bottomFraction: anObject bottomFraction := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! bottomOffset ^ bottomOffset! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! bottomOffset: anObject bottomOffset := anObject! ! !SpecLayoutFrame methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 9/29/2013 15:21'! initialize super initialize. bottomFraction := 1. bottomOffset := 0. leftFraction := 0. leftOffset := 0. rightFraction := 1. rightOffset := 0. topFraction := 0. topOffset := 0.! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftFraction ^ leftFraction! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftFraction: anObject leftFraction := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftOffset ^ leftOffset! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! leftOffset: anObject leftOffset := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightFraction ^ rightFraction! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightFraction: anObject rightFraction := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightOffset ^ rightOffset! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! rightOffset: anObject rightOffset := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topFraction ^ topFraction! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topFraction: anObject topFraction := anObject! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topOffset ^ topOffset! ! !SpecLayoutFrame methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 9/29/2013 15:12'! topOffset: anObject topOffset := anObject! ! !DropListExample class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/15/2014 17:14' prior: 69569432! defaultSpec ^ { #ContainerModel. #add:. { self topSpec . #layout: . #(#SpecLayoutFrame bottomFraction: 0 bottomOffset: 30) }. #add:. {{#model . #container } . #layout: . #(#SpecLayoutFrame topOffset: 42). }}! ! !WindowModel commentStamp: '' prior: 80530649! A WindowModel is a spec model for a Window! !WindowModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/16/2014 09:26' prior: 69550795! initialize super initialize. model := nil asValueHolder. initialExtent := nil asValueHolder. title := self class title asValueHolder. isClosedHolder := false asValueHolder. isResizeable := true asValueHolder. model whenChangedDo: [:m | self updateTitle ].! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/16/2014 09:26'! isResizeable ^ isResizeable value! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/15/2014 17:16:50.270855'! isResizeable: aBoolean isResizeable value: aBoolean! ! !DynamicComposableModel commentStamp: '' prior: 80530763! A DynamicComposableModel is a model of spec with a dynamic binding for subwidgets! !DynamicComposableModel methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 1/21/2014 09:48'! assign: aModel to: anInstVarName widgets at: anInstVarName put: aModel. aModel owner: self! ! !DynamicComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 09:51' prior: 48920199! initialize widgets := OrderedIdentityDictionary new asValueHolder. layout := nil asValueHolder. super initialize. ! ! !DynamicComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 09:53'! layout ^ layout value! ! !DynamicComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 09:53'! layout: aLayout layout value: aLayout! ! !DynamicComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 09:54'! openWithSpec self layout ifNil: [ ^ super openWithSpec ]. ^ self openWithSpecLayout: self layout! ! !DynamicComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 09:55'! retrieveSpec: aSelector self layout ifNil: [ ^ super retrieveSpec: aSelector ]. ^ self layout selector: aSelector; yourself! ! !Array methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/15/2014 17:14' prior: 69611155! generateSpec | str spec | str := self readStream. spec := OrderedCollection with: #SpecLayoutFrame. #( leftFraction: topFraction: rightFraction: bottomFraction: leftOffset: topOffset: rightOffset: bottomOffset: ) do: [:sel | spec add: sel. str next ifNil: [ spec add: 0 ] ifNotNil: [:value | spec add: value ]]. ^ spec asArray! ! FrameLayout removeSelector: #topOffset:! FrameLayout removeSelector: #topOffset! FrameLayout removeSelector: #topFraction:! FrameLayout removeSelector: #topFraction! FrameLayout removeSelector: #rightOffset:! FrameLayout removeSelector: #rightOffset! FrameLayout removeSelector: #rightFraction:! FrameLayout removeSelector: #rightFraction! FrameLayout removeSelector: #leftOffset:! FrameLayout removeSelector: #leftOffset! FrameLayout removeSelector: #leftFraction:! FrameLayout removeSelector: #leftFraction! FrameLayout removeSelector: #initialize! FrameLayout removeSelector: #bottomOffset:! FrameLayout removeSelector: #bottomOffset! FrameLayout removeSelector: #bottomFraction:! FrameLayout removeSelector: #bottomFraction! FrameLayout removeSelector: #asMorphicLayout! Smalltalk globals removeClassNamed: #FrameLayout! DynamicComposableModel removeSelector: #ensureExtentFor:! SpecLayout class removeSelector: #window! SpecLayout class removeSelector: #tree! SpecLayout class removeSelector: #textfield! SpecLayout class removeSelector: #text! SpecLayout class removeSelector: #slider! SpecLayout class removeSelector: #raw! SpecLayout class removeSelector: #multicolumnlist! SpecLayout class removeSelector: #list! SpecLayout class removeSelector: #label! SpecLayout class removeSelector: #iconlist! SpecLayout class removeSelector: #droplist! SpecLayout class removeSelector: #dialogWindow! SpecLayout class removeSelector: #checkbox! SpecLayout class removeSelector: #button! SpecLayout class removeSelector: #abstract! "Spec-Core"! "Spec-Debugger"! "Spec-Examples"! "Spec-Layout"! "Spec-MorphicAdapters"! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-01-21T17:22:59.886163+01:00 Pharo.image priorSource: 30187442! ----STARTUP----2014-01-21T17:27:36.767191+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-21T17:27:37.215189+01:00 Pharo-30713.image priorSource: 30210146! ----STARTUP----2014-01-22T16:41:32.510873+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/22/2014 16:38' prior: 80519388! commentForCurrentUpdate ^ '12566 Added Behavior>>#dependentClasses https://pharo.fogbugz.com/f/cases/12566 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/22/2014 16:39'! script367 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.29.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.292.mcz Spec-Debugger-MarcusDenker.198.mcz Spec-Examples-MarcusDenker.59.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.123.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.179.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1392.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.618.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/22/2014 16:39'! update30714 "self new update30714" self withUpdateLog: '12566 Added Behavior>>#dependentClasses https://pharo.fogbugz.com/f/cases/12566 '. self loadTogether: self script367 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassTest methodsFor: 'testing - dependencies' stamp: 'AlexandreBergel 1/4/2014 21:14'! testDependencies self assert: (ClassTest dependentClasses includes: ClassTest superclass). self assert: (ClassTest dependentClasses includes: Date)! ! !TBehavior methodsFor: 'dependencies' stamp: 'AlexandreBergel 1/21/2014 15:01'! dependentClasses "Return the list of classes used myself" "Morph dependentClasses" | cll | cll := Set new. "A class depends on its superclass" self superclass ifNotNil: [ cll add: self superclass ]. "We unify a class and its metaclass" (self methods, self class methods) do: [ :m | m literalsDo: [ :l | "We also check if the method is not an extension" ((((l isVariableBinding and: [ l value notNil ]) and: [ l value isBehavior ]) and: [ m category notEmpty ] ) and: [ m category first ~= $* ]) ifTrue: [ cll add: l value ] ] ]. ^ cll asArray! ! !Trait method! dependentClasses "Return the list of classes used myself" "Morph dependentClasses" | cll | cll := Set new. "A class depends on its superclass" self superclass ifNotNil: [ cll add: self superclass ]. "We unify a class and its metaclass" (self methods, self class methods) do: [ :m | m literalsDo: [ :l | "We also check if the method is not an extension" ((((l isVariableBinding and: [ l value notNil ]) and: [ l value isBehavior ]) and: [ m category notEmpty ] ) and: [ m category first ~= $* ]) ifTrue: [ cll add: l value ] ] ]. ^ cll asArray! ! !Trait method! dependentClasses "Return the list of classes used myself" "Morph dependentClasses" | cll | cll := Set new. "A class depends on its superclass" self superclass ifNotNil: [ cll add: self superclass ]. "We unify a class and its metaclass" (self methods, self class methods) do: [ :m | m literalsDo: [ :l | "We also check if the method is not an extension" ((((l isVariableBinding and: [ l value notNil ]) and: [ l value isBehavior ]) and: [ m category notEmpty ] ) and: [ m category first ~= $* ]) ifTrue: [ cll add: l value ] ] ]. ^ cll asArray! ! "KernelTests"! "Traits"! ----End fileIn----! ----QUIT----2014-01-22T16:41:42.720875+01:00 Pharo.image priorSource: 30210343! ----STARTUP----2014-01-22T16:46:38.742854+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-22T16:46:38.986851+01:00 Pharo-30714.image priorSource: 30223913! ----STARTUP----2014-01-23T15:14:54.472217+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/23/2014 15:12' prior: 80542289! commentForCurrentUpdate ^ '12600 MessageBrowser "senders of"-list adds new created messages https://pharo.fogbugz.com/f/cases/12600 12692 KeyboardEvent>>#asKeyCombination ignores Option key https://pharo.fogbugz.com/f/cases/12692 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/23/2014 15:12'! script368 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.458.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.292.mcz Spec-Debugger-MarcusDenker.198.mcz Spec-Examples-MarcusDenker.59.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.123.mcz Spec-PolyWidgets-MarcusDenker.37.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.179.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1394.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.618.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/23/2014 15:12'! update30715 "self new update30715" self withUpdateLog: '12600 MessageBrowser "senders of"-list adds new created messages https://pharo.fogbugz.com/f/cases/12600 12692 KeyboardEvent>>#asKeyCombination ignores Option key https://pharo.fogbugz.com/f/cases/12692 '. self loadTogether: self script368 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SystemNavigation methodsFor: '*Tools-Browser' stamp: 'NicolaiHess 1/23/2014 12:03' prior: 51549569! openBrowserFor: aLiteral withMethods: aCollection "Create and schedule a message sender browser for aCollection which normally should come from a query based on aLiteral (senders, implementors...). This method is usefull to avoid to call twice allCallsOn: in certain occasion. For example, | sys | sys := SystemNavigation new. sys openBrowserFor: #printOn: withMethods: (sys allCallsOn: #printOn:) asSortedCollection" ^ self headingAndAutoselectForLiteral: aLiteral do: [:label :autoSelect| self browseMessageList: aCollection name: label autoSelect: autoSelect refreshingBlockSelector:#setRefreshingBlockForSendersOf:]! ! !KMKeyCombination class methodsFor: 'instance creation' stamp: 'SeanDeNigris 1/22/2014 19:47' prior: 34017448! fromKeyboardEvent: evt | modifier control command shift alt | control := evt controlKeyPressed. command := evt commandKeyPressed. shift := evt shiftPressed. alt := evt altKeyPressed. (shift | command | control | alt) ifFalse: [^ KMSingleKeyCombination from: evt keyCharacter ]. modifier := KMNoShortcut new. control ifTrue: [ modifier := modifier + KMModifier ctrl ]. command ifTrue: [ modifier := modifier + KMModifier command ]. shift ifTrue: [ modifier := modifier + KMModifier shift ]. alt ifTrue: [ modifier := modifier + KMModifier alt ]. ^ modifier + evt modifiedCharacter! ! "Keymapping-KeyCombinations"! "Tools"! ----End fileIn----! ----QUIT----2014-01-23T15:15:03.612318+01:00 Pharo.image priorSource: 30224110! ----STARTUP----2014-01-23T15:20:46.853696+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-23T15:20:47.113695+01:00 Pharo-30715.image priorSource: 30237273! ----STARTUP----2014-01-23T19:13:57.398241+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/23/2014 19:11' prior: 80556056! commentForCurrentUpdate ^ '12170 temp var definitions in optimized blocks wrongly compiled https://pharo.fogbugz.com/f/cases/12170 12695 InputWidget example broken https://pharo.fogbugz.com/f/cases/12695 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/23/2014 19:11'! script369 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.60.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.69.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.23.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.75.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.139.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.151.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.66.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1006.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.292.mcz Spec-Debugger-MarcusDenker.198.mcz Spec-Examples-MarcusDenker.59.mcz Spec-Inspector-MarcusDenker.150.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.123.mcz Spec-PolyWidgets-MarcusDenker.40.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.179.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1394.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.618.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/23/2014 19:12'! update30716 "self new update30716" self withUpdateLog: '12170 temp var definitions in optimized blocks wrongly compiled https://pharo.fogbugz.com/f/cases/12170 12695 InputWidget example broken https://pharo.fogbugz.com/f/cases/12695 '. self loadTogether: self script369 merge: false. self flushCaches. ! ! "ScriptLoader30"! !InputWidget commentStamp: 'SeanDeNigris 1/23/2014 11:40' prior: 69570545! I am a generic widget far a user to enter a string Example (printMe): self example inspect.! !IRBuilder methodsFor: 'initialize' stamp: 'MarcusDenker 1/23/2014 17:17' prior: 34787495! addTemps: newKeys | i offset | offset := self currentScope tempMap size. i := 1. newKeys do: [:key | self currentScope tempMap at: key ifAbsentPut: [i:=i+1.offset + i - 1]. ]. ! ! !InputWidget commentStamp: 'SeanDeNigris 1/23/2014 11:40' prior: 80580768! I am a generic widget far a user to enter a string Example (printMe): self example inspect.! !InputWidget class methodsFor: 'example' stamp: 'SeanDeNigris 1/23/2014 11:43' prior: 69570950! example "self example inspect" | widget | widget := self new. widget title: 'Name'; label: 'What''s your name?'; ghostText: 'John Doe'. widget openDialogWithSpec modalRelativeTo: self currentWorld. ^ widget value! ! !InputWidget class methodsFor: 'example' stamp: 'SeanDeNigris 1/23/2014 11:37'! example2 "self example2" | widget buttonModel buttonWindow | buttonModel := ButtonModel new. buttonWindow := buttonModel openWithSpec. widget := InputWidget new. widget title: 'Label?'; label: 'Enter a button label'; ghostText: 'Ok'. widget openDialogWithSpec modalRelativeTo: buttonWindow. buttonModel label: widget value! ! "OpalCompiler-Core"! "Spec-PolyWidgets"! ----End fileIn----! ----QUIT----2014-01-23T19:14:05.208587+01:00 Pharo.image priorSource: 30237470! ----STARTUP----2014-01-23T19:19:01.910567+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-23T19:19:02.168564+01:00 Pharo-30716.image priorSource: 30250475! ----STARTUP----2014-01-24T08:12:39.240575+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/24/2014 08:06' prior: 80569416! commentForCurrentUpdate ^ '12684 NewValueHolder Enhancements https://pharo.fogbugz.com/f/cases/12684 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/24/2014 08:07'! script370 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.72.mcz Keymapping-Core-SvenVanCaekenberghe.183.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.665.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1008.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.57.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.181.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1394.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.618.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/24/2014 08:07'! update30717 "self new update30717" self withUpdateLog: '12684 NewValueHolder Enhancements https://pharo.fogbugz.com/f/cases/12684 '. self loadTogether: self script370 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !ReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 12:07' prior: 0! I am a class holding any object inside its unique instance variable. Each time the instance variable value changes, an announcement is emitted. The instance variable is accessed through `value` and `value:` while the registration is done by `whenChangedDo: aBlock`. In addition, infinite loops of propagation are prevented. Use case: you have two lists A, and B, and you want to keep their selection synchronised. So when A selection changes, you set B selection. But since B selection changes, you set A selection, and so on… This case is prevented by the use of a `lock` variable.! !CollectionReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am designed specifically for collections.! !DictionaryReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am designed specifically for dictionaries.! !ReactiveOnRealChangeVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:19' prior: 0! I am a special because I announce changes only if the new value set is different from the current value.! !SelectionReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am especially designed to contain a list selection (an index + an object)! !ModelList commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:35' prior: 0! I am a simple list widget I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolEditor commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 0! I am a complete UI used to view the protocol methods (via a ProtocolViewer) as well as their source code. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolList commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:35' prior: 0! I am widget displaying a list with a label. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolViewer commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 0! I am a widget gathering a list of models with two protocol list:one for the methods in 'protocol', the other for the methods in 'protocol-events'. I am used to expose the construction of a spec UI in the Spec documentation.! !LabelModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69450880! initialize super initialize. textHolder := '' asReactiveVariable. enabledHolder := true asReactiveVariable. textHolder whenChangedDo: [ self changed: #getText ].! ! !PermissionsEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48880074! initialize lock := false. user := nil asReactiveVariable. super initialize.! ! !SpecPreDebugWindow methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78186874! initialize debugger := nil asReactiveVariable. super initialize. self whenWindowChanged: [:w | w whenClosedDo: [ self clear ] ]. self bindKeyCombination: Character escape asKeyCombination toAction: [ self delete ]! ! !SpecDebugger methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69327845! initialize sessionHolder := nil asReactiveVariable. labelHolder := nil asReactiveVariable. super initialize. needRefresh := false. self announcer on: WidgetBuilt send: #onWidgetBuilt to: self. self whenWindowChanged: [ :w | w whenClosedDo: [ self clear ] ]. sessionHolder whenChangedDo: [:newSession :oldSession | self removeActionsForSession: oldSession. self registerActionsForSession: newSession. self updateToolbarFromSession: newSession. self updateStackFromSession: newSession ]. labelHolder whenChangedDo: [ self updateTitle ]! ! !UserManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48893923! initialize super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asReactiveVariable. currentUser := nil. self addDefaultUser.! ! !DynamicComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80538860! initialize widgets := OrderedIdentityDictionary new asReactiveVariable. layout := nil asReactiveVariable. super initialize. ! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77543274! initialize super initialize. children := [ self container childrenFor: self content ] asReactiveVariable. content := nil asReactiveVariable. icon := nil asReactiveVariable. container := nil asReactiveVariable. matchTokenFilter := [ :aFilter | false ] asReactiveVariable. parentNode := nil asReactiveVariable. childNodeClass := self class asReactiveVariable. selected := false asReactiveVariable. lastClicked := false asReactiveVariable. mouseDownAction := [:event | ] asReactiveVariable. hasContentToShow := false asReactiveVariable. isExpanded := false asReactiveVariable. selected whenChangedDo: [ :aBoolean | self changed: #selected: with: { aBoolean } ]. isExpanded whenChangedDo: [ :aBoolean | self changed: #isExpanded: with: { aBoolean } ].! ! !InputWidget methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69571516! initialize okAction := [ ] asReactiveVariable. value := '' asReactiveVariable. title := 'Title' asReactiveVariable. super initialize.! ! !IntegerEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48880836! initialize super initialize. integer := 0 asReactiveVariable! ! !Object methodsFor: '*ReactiveVariable' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01'! asReactiveVariable ^ ReactiveVariable value: self! ! !ReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 12:07' prior: 80593851! I am a class holding any object inside its unique instance variable. Each time the instance variable value changes, an announcement is emitted. The instance variable is accessed through `value` and `value:` while the registration is done by `whenChangedDo: aBlock`. In addition, infinite loops of propagation are prevented. Use case: you have two lists A, and B, and you want to keep their selection synchronised. So when A selection changes, you set B selection. But since B selection changes, you set A selection, and so on… This case is prevented by the use of a `lock` variable.! !CollectionReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80594537! I am designed specifically for collections.! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject | result | result := value add: newObject. self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject after: oldObject | result | result := value add: newObject after: oldObject. self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject afterIndex: index | result | result := value add: newObject afterIndex: index. self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject before: oldObject | result | result := value add: newObject before: oldObject. self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject beforeIndex: index | result | result := value add: newObject beforeIndex: index. self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAll: aCollection | result | result := value addAll: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllFirst: anOrderedCollection | result | result := value addAllFirst: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllFirstUnlessAlreadyPresent: anOrderedCollection | result | result := value addAllFirstUnlessAlreadyPresent: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllLast: aCollection | result | result := value addAllLast: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addFirst: newObject | result | result := value addFirst: newObject . self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addLast: newObject | result | result := value addLast: newObject . self valueChanged: newObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: anObject ^ value at: anObject! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: index ifAbsentPut: block | result | result := value at: index ifAbsentPut: block. self valueChanged: block value. ^ result! ! !CollectionReactiveVariable methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 17:11'! at: key put: anObject value at: key put: anObject. self valueChanged: value. ^ anObject! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAll: aCollection put: anObject | result | result := value atAll: aCollection put: anObject . self valueChanged: anObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAll: indexArray putAll: valueArray | result | result := value atAll: indexArray putAll: valueArray. self valueChanged: valueArray. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAllPut: anObject | result | result := value atAllPut: anObject. self valueChanged: anObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atLast: indexFromEnd put: obj | result | result := value atLast: indexFromEnd put: obj. self valueChanged: obj. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:08'! atWrap: index put: anObject | result | result := value atWrap: index put: anObject. self valueChanged: value. ^ result! ! !CollectionReactiveVariable methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! insert: anObject before: spot | result | result := value insert: anObject before: spot. self valueChanged: anObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! remove: oldObject ifAbsent: absentBlock | result | result := value remove: oldObject ifAbsent: absentBlock. self valueChanged: oldObject. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAll value removeAll. self valueChanged! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAt: index | result | result := value removeAt: index. self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeFirst | result | result := value removeFirst. self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeFirst: n | result | result := value removeFirst: n . self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeIndex: removedIndex | result | result := value removeIndex: removedIndex. self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeLast | result | result := value removeLast. self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeLast: n | result | result := value removeLast: n. self valueChanged: result. ^ result! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! replace: aBlock value replace: aBlock . self valueChanged! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! replaceAll: oldObject with: newObject value replaceAll: oldObject with: newObject . self valueChanged: oldObject! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! reset value reset. self valueChanged! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! resetTo: index value resetTo: index. self valueChanged! ! !CollectionReactiveVariable methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! size ^ value size! ! !CollectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! sort: aSortBlock value sort: aSortBlock . self valueChanged! ! !DictionaryReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80594672! I am designed specifically for dictionaries.! !DictionaryReactiveVariable methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: anObject ^ value at: anObject! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/6/2012 20:29'! at: key ifAbsentPut: aBlock ^ self at: key ifAbsent: [self at: key put: aBlock value]! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:57'! at: key put: anObject value at: key put: anObject. self valueChanged: anObject. ^ anObject! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atNewIndex: index put: anObject value atNewIndex: index put: anObject. self valueChanged: anObject.! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:11'! fillFrom: aCollection with: aBlock "Evaluate aBlock with each of aCollections's elements as the argument. Collect the resulting values into self. Answer self." aCollection keysAndValuesDo: [ :key :aValue | self at: key put: (aBlock value: aValue) ]! ! !DictionaryReactiveVariable methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:26'! initialize super initialize. self value: Dictionary new.! ! !DictionaryReactiveVariable methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! initialize: n value initialize: n. self valueChanged.! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAll value removeAll. self valueChanged.! ! !DictionaryReactiveVariable methodsFor: 'protocol'! removeKey: key "Remove key from the receiver. If key is not in the receiver, notify an error." ^ self removeKey: key ifAbsent: [self errorKeyNotFound: key].! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeKey: key ifAbsent: aBlock | result | result := value removeKey: key ifAbsent: aBlock. self valueChanged. ^ result! ! !DictionaryReactiveVariable methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! size ^ value size! ! !DictionaryReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary value valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary. self valueChanged.! ! !ReactiveOnRealChangeVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:19' prior: 80594810! I am a special because I announce changes only if the new value set is different from the current value.! !ReactiveOnRealChangeVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 12:09'! value: anObject self value == anObject ifTrue: [ ^ anObject ]. super value: anObject! ! !ReactiveVariable class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/17/2013 16:23'! value: contents ^ self new value: contents; yourself! ! !ReactiveVariable methodsFor: 'announcements' stamp: 'MarcusDenker 9/14/2013 10:28'! addDependent: aDependent self error: 'Former API, should be changed'.! ! !ReactiveVariable methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/23/2014 12:35'! handleCircularReferencesWhile: aBlock "Used to handle circular references as explained in the class comment" lock ifTrue: [ ^ self ]. lock := true. aBlock ensure: [ lock := false ].! ! !ReactiveVariable methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 8/20/2012 11:38'! initialize super initialize. announcer := Announcer new. lock := false.! ! !ReactiveVariable methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:10'! printOn: aStream super printOn: aStream. aStream nextPutAll: '[ '; print: self value; nextPutAll: ' ]'! ! !ReactiveVariable methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 11/21/2013 22:14'! rawValue: aValue value := aValue! ! !ReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! value ^ value! ! !ReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 12:34'! value: anObject self handleCircularReferencesWhile: [ | oldValue | oldValue := value. value := anObject. self valueChanged: oldValue ]. ^ value! ! !ReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:00'! valueChanged announcer announce: (ValueChanged newValue: value)! ! !ReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue announcer announce: (ValueChanged oldValue: oldValue newValue: value)! ! !ReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue to: newValue announcer announce: (ValueChanged oldValue: oldValue newValue: newValue)! ! !ReactiveVariable methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01'! whenChangedDo: aBlock | block | block := [:announcement :ann | aBlock cull: announcement newValue cull: announcement oldValue cull: announcement cull: ann ]. announcer when: ValueChanged do: block! ! !ReactiveVariable methodsFor: 'announcements' stamp: 'EstebanLorenzano 9/8/2013 16:05'! whenChangedSend: aSelector to: aReceiver announcer on: ValueChanged send: aSelector to: aReceiver! ! !SelectionReactiveVariable commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80595005! I am especially designed to contain a list selection (an index + an object)! !SelectionReactiveVariable class methodsFor: 'instance creation'! index: indexValueHolder selection: selectionValueHolder ^ self new index: indexValueHolder; selection: selectionValueHolder; yourself! ! !SelectionReactiveVariable methodsFor: 'accessing'! index ^ index! ! !SelectionReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44'! index: anIndex index := anIndex. self valueChanged: index! ! !SelectionReactiveVariable methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01'! initialize super initialize. index := 0 asReactiveVariable. selection := nil asReactiveVariable. index whenChangedSend: #valueChanged to: self. selection whenChangedSend: #valueChanged to: self.! ! !SelectionReactiveVariable methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:43'! reset self index value: 0. self selection value: nil. self valueChanged! ! !SelectionReactiveVariable methodsFor: 'accessing'! selection ^ selection! ! !SelectionReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44'! selection: aSelection selection := aSelection. self valueChanged: selection! ! !SelectionReactiveVariable methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:21'! value ^ {index. selection}! ! !TreeWithLoading methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78155853! initialize super initialize. loading := true asReactiveVariable. loading whenChangedDo: [ :boolean | boolean ifTrue: [ self showLoading ] ifFalse: [ self showTree ] ]! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78137590! initialize super initialize. valid := false asReactiveVariable! ! !InspectorNavigator methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 68601604! initialize super initialize. history := NavigationHistory new. inspector := nil asReactiveVariable. self initializeShortcuts. inspector whenChangedDo: [ :new :old | self updateInspectorFrom: old ]. self announcer on: WidgetBuilt send: #setRefreshedToTrue to: self. canBeRefreshed := false. self whenWindowChanged: [ :w | w whenClosedDo: [ self inspector close ] ].! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69559940! initialize super initialize. extentHolder := nil asReactiveVariable. needRebuild := true asReactiveVariable. keyStrokesForNextFocusHolder := { KMNoShortcut new } asReactiveVariable. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asReactiveVariable. additionalKeyBindings := Dictionary new. announcer := Announcer new asReactiveVariable. aboutText := self class comment asReactiveVariable. windowIcon := nil asReactiveVariable. window := nil asReactiveVariable. askOkToClose := false asReactiveVariable. titleHolder := self class title asReactiveVariable. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ]. titleHolder whenChangedDo: [ self updateTitle ]! ! !ModelList commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:35' prior: 80595155! I am a simple list widget I am used to expose the construction of a spec UI in the Spec documentation.! !ModelList class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/21/2014 15:18'! defaultSpec ^ SpecLayout composed add: #list; yourself! ! !ModelList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:29'! initializeWidgets list := self newList. list items: (AbstractWidgetModel allSubclasses sorted: [:a :b | a name < b name ]). self focusOrder add: list! ! !ModelList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:17'! list ^ list! ! !ModelList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:32'! title ^ 'Widgets'! ! !ModelList methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/21/2014 15:19'! whenSelectedItemChanged: aBlock list whenSelectedItemChanged: aBlock! ! !ProtocolEditor commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 80595338! I am a complete UI used to view the protocol methods (via a ProtocolViewer) as well as their source code. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolEditor class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/21/2014 15:57'! defaultSpec ^ SpecLayout composed newColumn: [ :col | col newRow: [ :r | r add: #(viewer models); newColumn: [ :c | c add: #(viewer protocols); add: #(viewer events) ] ]; add: #text ]; yourself! ! !ProtocolEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:27'! initialExtent ^ 750@600! ! !ProtocolEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:22'! initializePresenter viewer whenClassChanged: [ :class | text behavior: class ]. viewer whenProtocolChangedDo: [ :item | item ifNil: [ text text: '' ] ifNotNil: [ viewer resetEventSelection. text text: item sourceCode ] ]. viewer whenEventChangedDo: [ :item | item ifNil: [ text text: '' ] ifNotNil: [ viewer resetProtocolSelection. text text: item sourceCode ] ]! ! !ProtocolEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:30'! initializeWidgets text := self newText. viewer := self instantiate: ProtocolViewer. text aboutToStyle: true. self focusOrder add: viewer; add: text! ! !ProtocolEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:48'! text ^ text! ! !ProtocolEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:26'! title ^ 'Protocol editors'! ! !ProtocolEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:48'! viewer ^ viewer! ! !ProtocolList commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:35' prior: 80595599! I am widget displaying a list with a label. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolList class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/21/2014 15:32'! defaultSpec ^ SpecLayout composed newColumn: [ :r | r add: #label height: self toolbarHeight; add: #protocols ]; yourself! ! !ProtocolList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:19'! displayBlock: aBlock protocols displayBlock: aBlock! ! !ProtocolList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:30'! initializeWidgets protocols := self newList. label := self newLabel. label text: 'Protocol'. self focusOrder add: protocols! ! !ProtocolList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 15:26'! items: aCollection protocols items: aCollection! ! !ProtocolList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:25'! label ^ label! ! !ProtocolList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 15:26'! label: aText label text: aText! ! !ProtocolList methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:25'! protocols ^ protocols! ! !ProtocolList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:17'! resetSelection protocols resetSelection! ! !ProtocolList methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:37'! title ^ 'Protocol widget'! ! !ProtocolList methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/21/2014 16:16'! whenSelectedItemChanged: aBlock protocols whenSelectedItemChanged: aBlock! ! !ProtocolViewer commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 80595800! I am a widget gathering a list of models with two protocol list:one for the methods in 'protocol', the other for the methods in 'protocol-events'. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolViewer class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/21/2014 15:45'! defaultSpec ^ SpecLayout composed newColumn: [ :r | r add: #models; add: #protocols; add: #events ]; yourself! ! !ProtocolViewer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:33'! events ^ events! ! !ProtocolViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:28'! initializePresenter models whenSelectedItemChanged: [ :class | protocols resetSelection. events resetSelection. class ifNil: [ protocols items: #(). events items: #() ] ifNotNil: [ protocols items: (self methodsIn: class for: 'protocol'). events items: (self methodsIn: class for: 'protocol-events') ] ]! ! !ProtocolViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:30'! initializeWidgets models := self instantiate: ModelList. protocols := self instantiate: ProtocolList. events := self instantiate: ProtocolList. protocols label: 'protocol'; displayBlock: [ :m | m selector ]. events label: 'protocol-events'; displayBlock: [ :m | m selector ]. self focusOrder add: models; add: protocols; add: events ! ! !ProtocolViewer methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/21/2014 16:21'! methodsIn: class for: protocol ^ (class methodsInProtocol: protocol) sorted: [ :a :b | a selector < b selector ]! ! !ProtocolViewer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:33'! models ^ models! ! !ProtocolViewer methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:33'! protocols ^ protocols! ! !ProtocolViewer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:15'! resetEventSelection events resetSelection! ! !ProtocolViewer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:15'! resetProtocolSelection protocols resetSelection! ! !ProtocolViewer methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:38'! title ^ 'Protocol viewer'! ! !ProtocolViewer methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/21/2014 16:22'! whenClassChanged: aBlock models whenSelectedItemChanged: aBlock! ! !ProtocolViewer methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/21/2014 16:16'! whenEventChangedDo: aBlock events whenSelectedItemChanged: aBlock! ! !ProtocolViewer methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 1/21/2014 16:16'! whenProtocolChangedDo: aBlock protocols whenSelectedItemChanged: aBlock! ! !SliderModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69497801! initialize super initialize. max := 100 asReactiveVariable. min := 0 asReactiveVariable. quantum := 1 asReactiveVariable. value := 0 asReactiveVariable. absoluteValue := 0 asReactiveVariable. labelHolder := '' asReactiveVariable. isChanging := false. max whenChangedDo: [:m | self changed: { #max: . m } ]. min whenChangedDo: [:m | self changed: { #min: . m } ]. quantum whenChangedDo: [:m | self changed: { #quantum: . m } ]. value whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self absoluteValue: ((v-self min)/(self max-self min)). self changed: { #scaledValue: . v }. isChanging := false ]. self changed: #value.]. absoluteValue whenChangedDo: [:v | isChanging ifFalse: [ isChanging := true. self value: (self min+(v*(self max-self min)) roundTo: self quantum). self changed: { #value: . v }. isChanging := false ]]. labelHolder whenChangedDo: [:v | self changed: #label ].! ! !KMDescription methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78911374! initialize categories := nil asReactiveVariable. sortingBlock := [:a :b | a first < b first ]. super initialize. self collectShortcutDescription ! ! !NewListAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 49791101! initialize "Initialization code for NewListAdapter" super initialize. doubleClickSelector := nil asReactiveVariable. dragItemSelector := nil asReactiveVariable. dropItemSelector := nil asReactiveVariable. getDisplaySelector := nil asReactiveVariable. getHeaderTitleSelector := nil asReactiveVariable. getMenuSelector := nil asReactiveVariable. getIndexSelector := nil asReactiveVariable. getItemAtIndexSelector := nil asReactiveVariable. getItemsSelector := nil asReactiveVariable. getListSizeSelector := nil asReactiveVariable. keyStrokeSelector := nil asReactiveVariable. lastKeystrokeTime := nil asReactiveVariable. lastKeystrokes := nil asReactiveVariable. model := nil asReactiveVariable. list := nil asReactiveVariable. setIndexSelector := nil asReactiveVariable. wantsDropSelector := nil asReactiveVariable. getMenuTitleSelector := nil asReactiveVariable. getIconSelector := nil asReactiveVariable. getIconMaxSizeSelector := nil asReactiveVariable. getIndexesSelector := nil asReactiveVariable. separatorSelector := nil asReactiveVariable! ! !WindowModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80537845! initialize super initialize. model := nil asReactiveVariable. initialExtent := nil asReactiveVariable. title := self class title asReactiveVariable. isClosedHolder := false asReactiveVariable. isResizeable := true asReactiveVariable. model whenChangedDo: [:m | self updateTitle ].! ! !MenuItemModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78271571! initialize super initialize. action := [] asReactiveVariable. enabled := true asReactiveVariable. state := nil asReactiveVariable. description := nil asReactiveVariable. name := '' asReactiveVariable. shortcut := nil asReactiveVariable. subMenu := nil asReactiveVariable. autoRefresh := false asReactiveVariable. icon := nil asReactiveVariable! ! !SwitchUsers methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48958053! initialize usersManager := nil asReactiveVariable. selectedUser := nil asReactiveVariable. super initialize.! ! !DynamicSpecExample methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48926169! initialize super initialize. object := nil asReactiveVariable.! ! !SubwidgetItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48006151! initialize super initialize. model := nil asReactiveVariable. initialExtent := 400@25. validated := false asReactiveVariable.! ! !CheckBoxModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76517709! initialize super initialize. actionWhenActivatedHolder := [] asReactiveVariable. actionWhenDesactivatedHolder := [] asReactiveVariable. enabledHolder := true asReactiveVariable. stateHolder := false asReactiveVariable. labelClickableHolder := true asReactiveVariable. labelHolder := '' asReactiveVariable. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder value ifFalse: actionWhenDesactivatedHolder value. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ].! ! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 79478446! initialize textConverterHolder := SourceMethodConverter new asReactiveVariable. model := AbstractTool new. maxClassSize = nil. searchedStringHolder := '' asReactiveVariable. topologicSortHolder := true asReactiveVariable. super initialize. askOkToClose:= true asReactiveVariable. self windowIcon: self taskbarIcon. self registerToAnnouncements. self announcer when: WidgetBuilt send: #buildUpdateTitle to: self! ! !MessageBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 71816855! initializeWidgets self instantiateModels: #( listModel MultiColumnListModel textModel TextModel toolbarModel MethodToolbar ). listModel displayBlock: [ :item | self wrapItem: item ]. textModel aboutToStyle: true. textModel whenBuiltDo: [ :ann | ann widget font: self codeFont ]. refreshingBlockHolder := [ :item | true ] asReactiveVariable. self setListMenu; initializeDropList; setFocus. ! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78318975! initialize super initialize. childrenBlockHolder := [ {} ] asReactiveVariable. rootsHolder := {} asReactiveVariable. selectionHolder := {} asReactiveVariable. menuBlockHolder := [] asReactiveVariable. displayBlock := [:item | item asString ] asReactiveVariable. removeOnlyLastSelected := false asReactiveVariable. autoDeselection := true asReactiveVariable. autoMultiSelection := false asReactiveVariable. columnInset := 5 asReactiveVariable. doubleClick := [] asReactiveVariable. allowMenuOnNoItem := false asReactiveVariable. evenRowColor := Color veryLightGray muchLighter asReactiveVariable. isCheckList := false asReactiveVariable. keyStroke := [ :key | ] asReactiveVariable. multiSelection := false asReactiveVariable. oddRowColor := Color white asReactiveVariable. preferedPaneColor := Color white asReactiveVariable. resizerWidth := 2 asReactiveVariable. rowInset := 2 asReactiveVariable. iconBlock := [ :each : node | node icon ] asReactiveVariable. highlightedItem := nil asReactiveVariable. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: [ self childrenFor: item ] ] asReactiveVariable. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asReactiveVariable. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asReactiveVariable. treeUpdated := nil asReactiveVariable. self registerEvents! ! !TabModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69507555! initialize "Initialization code for TabModel" super initialize. label := '' asReactiveVariable. icon := self defaultIcon asReactiveVariable. morph := nil asReactiveVariable. retrievingBlock := nil asReactiveVariable. menu := nil asReactiveVariable. actions := OrderedCollection new asReactiveVariable. closeable := true asReactiveVariable. tabSelectedAction := [] asReactiveVariable. label whenChangedDo: [ :new | self widget ifNotNil: [ :w | w label: new ] ]. icon whenChangedDo: [ :new | self widget ifNotNil: [ :w | w icon: new ] ]. morph whenChangedDo: [ :new | self widget ifNotNil: [ :w | w morph: new ] ]. retrievingBlock whenChangedDo: [ :new | self widget ifNotNil: [ :w | w retrievingBlock: new ] ]. menu whenChangedDo: [ :new | self widget ifNotNil: [ :w | w menu: new ] ]. actions whenChangedDo: [ :new | self widget ifNotNil: [ :w | w actions: new ] ]. closeable whenChangedDo: [ :new | self widget ifNotNil: [ :w | w closeable: new ] ].! ! !MethodToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69577855! initialize methodHolder := nil asReactiveVariable. model := AbstractTool new. super initialize.! ! !DialogWindowModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78458466! initialize super initialize. toolbar := OkCancelToolbar new asReactiveVariable. toolbar whenChangedDo: [ :t | self changed: #toolbar: with: { t } ]! ! !ButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80042350! initialize super initialize. actionHolder := [] asReactiveVariable. labelHolder := '' asReactiveVariable. iconHolder := nil asReactiveVariable. stateHolder := false asReactiveVariable. helpHolder := nil asReactiveVariable. actionPerformedHolder := nil asReactiveVariable. askBeforeChangingHolder := false asReactiveVariable. shortcut := nil asReactiveVariable. labelHolder whenChangedDo: [ self changed: #label ]. iconHolder whenChangedDo: [ self changed: #label ]. stateHolder whenChangedDo: [ self changed: #state ]. enabledHolder whenChangedDo: [ self changed: #enabled ]. askBeforeChangingHolder whenChangedDo: [:newValue | self changed: { #askBeforeChanging: . newValue} ]. shortcut whenChangedDo: [ :newShortcut :oldShortcut | self unregisterShortcut: oldShortcut. self registerShortcut: newShortcut. self changed: #label ]. menuHolder := MenuModel new asReactiveVariable. menuHolder whenChangedDo: [ :aMenuModel :oldMenu | (oldMenu isNil or: [ oldMenu isBlock ]) ifFalse: [ oldMenu neglect: self ]. (aMenuModel isNil or: [ aMenuModel isBlock ]) ifFalse: [ aMenuModel applyTo: self ] ]. self bindKeyCombination: Character space toAction: [ self action ].! ! !PickListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69582364! initialize wrapHolder := [ :i | i printString ] asReactiveVariable. pickedItemsHolder := OrderedCollection new asReactiveVariable. associationsWrapperToItem := Dictionary new asReactiveVariable. associationsItemToWrapper := Dictionary new asReactiveVariable. associationsIndexToWrapper := Dictionary new asReactiveVariable. labelClickableHolder := true asReactiveVariable. defaultValueHolder := false asReactiveVariable. blockToPerformOnWrappers := [:wrapper | ] asReactiveVariable. super initialize.! ! !MenuModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76853797! initialize super initialize. groups := OrderedCollection new asReactiveVariable. title := nil asReactiveVariable. icon := nil asReactiveVariable. autoRefresh := nil asReactiveVariable. autoRefresh whenChangedDo: [ :aBoolean | self menuGroups do: [ :each | each autoRefresh: aBoolean ] ]! ! !NewListRenderer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76548010! initialize super initialize. wantsSteps := false. listSource := nil asReactiveVariable. itemHeight := nil asReactiveVariable. maxWidth := 0 asReactiveVariable. hasHeader := false asReactiveVariable. potentialDropIndex := 0 asReactiveVariable. steppingTime := 100. mouseDownIndex := 0 asReactiveVariable. listSource whenChangedDo: [:e | itemHeight value: e itemHeight. e whenItemsChangedDo: [ maxWidth value: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !AbstractWidgetModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69420473! initialize super initialize. helpHolder := nil asReactiveVariable. borderWidth := 0 asReactiveVariable. borderColor := Color transparent asReactiveVariable. enabledHolder := true asReactiveVariable. dragEnabled := false asReactiveVariable. dropEnabled := false asReactiveVariable. dragTransformationBlock := [ :item :source | item ] asReactiveVariable. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asReactiveVariable. acceptDropBlock := [ :draggedItem :event :source | ] asReactiveVariable. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asReactiveVariable. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w update: #setBalloonText: with: { string } ] ]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w update: #borderWidth: with: { int } ] ]. borderColor whenChangedDo: [:color | self widget ifNotNil: [:w | w update: #borderColor: with: { color } ] ]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #enabled: with: { b } ] ]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dragEnabled: with: { b } ] ]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dropEnabled: with: { b } ] ].! ! !TreeColumnModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76788913! initialize super initialize. container := nil asReactiveVariable. displayBlock := [ :node | node printString ] asReactiveVariable. initialWidth := 100 asReactiveVariable. resizable := true asReactiveVariable. headerLabel := nil asReactiveVariable. headerFont := StandardFonts defaultFont asReactiveVariable. headerIcon := nil asReactiveVariable. headerAction := nil asReactiveVariable. self registerEvents! ! !TabManagerModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76551251! initialize "Initialization code for TabManagerModel" super initialize. tabs := OrderedCollection new asReactiveVariable. tabSelectedAction := [] asReactiveVariable. selectedTab := nil asReactiveVariable. self myDependents: WeakSet new. tabs whenChangedDo: [ :new | self widget ifNotNil: [ :w | w tabs: self getTabs value ] ]. selectedTab whenChangedDo: [:newTab | tabSelectedAction value cull: newTab cull: self ]! ! !DropListItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77423040! initialize super initialize. actionHolder := [] asReactiveVariable. displayBlock := [ :e | e printString ]. icon := nil! ! !TextModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80531832! initialize super initialize. textHolder := '' asReactiveVariable. behaviorHolder := nil asReactiveVariable. aboutToStyleHolder := [ false ] asReactiveVariable. actionToPerformHolder := [ :text | ] asReactiveVariable. readSelectionHolder := [ selection value ] asReactiveVariable. enabledHolder := true asReactiveVariable. actionPerformedHolder := '' asReactiveVariable. isCodeCompletionAllowedHolder := true asReactiveVariable. doItContext := nil asReactiveVariable. doItReceiver := nil asReactiveVariable. hasUnacceptedEdits := false asReactiveVariable. selection := (1 to: 0) asReactiveVariable. scrollValue := (0@0) asReactiveVariable. menuHolder := [ :menu :shifted | shifted ifTrue: [ SmalltalkEditor shiftedYellowButtonMenu ] ifFalse: [ SmalltalkEditor yellowButtonMenu ] ] asReactiveVariable. autoAccept := false asReactiveVariable. wantsVisualFeedback := true asReactiveVariable. askBeforeDiscardingEdits := true asReactiveVariable. self registerEvents. self registerEventsForShout! ! !WorkingCopyToolBar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48946098! initialize super initialize. workingCopyHolder := nil asReactiveVariable! ! !ImageModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80044670! initialize super initialize. imageHolder := nil asReactiveVariable. action := [] asReactiveVariable. imageHolder whenChangedDo: [ self changed: #getImage ].! ! !OkCancelToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 45589515! initialize cancelled := false asReactiveVariable. cancelAction := [ true ] asReactiveVariable. super initialize.! ! !Dictionary methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01'! asReactiveVariable ^ DictionaryReactiveVariable value: self! ! !TextInputFieldModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78459676! initialize super initialize. ghostText := '' asReactiveVariable. acceptOnCR := true asReactiveVariable. entryCompletion := self defaultEntryCompletion asReactiveVariable. isEncrypted := false asReactiveVariable. ghostText whenChangedDo: [ :txt | self changed: #ghostText: with: { txt } ]. acceptOnCR whenChangedDo: [ :bool | self changed: #acceptOnCR: with: { bool } ]. isEncrypted whenChangedDo: [ :bool | self changed: #encrypted: with: { bool } ].! ! !SpecDebuggerDynamicToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69316946! initialize sessionHolder := nil asReactiveVariable. super initialize! ! !NewList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48921223! initialize renderer := nil asReactiveVariable. super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. drawColor := Color white asReactiveVariable. model := nil asReactiveVariable. isInitialized := false asReactiveVariable. isMultipleSelection := false asReactiveVariable. listCache := OrderedCollection new asReactiveVariable. selectedIndex := 0 asReactiveVariable. selectedIndexes := Dictionary new asReactiveVariable. listSize := nil asReactiveVariable. headerHeight := 0 asReactiveVariable. headerTitle := '' asReactiveVariable. clickOnHeader := nil asReactiveVariable. secondSelection := nil asReactiveVariable. displayListCache := OrderedCollection new asReactiveVariable. runningProcesses := Array new asReactiveVariable. deSelectOnReclick := false asReactiveVariable. selectionWithKeys := true asReactiveVariable. selectedItem := nil asReactiveVariable. selectedItems := OrderedCollection new asReactiveVariable. unselectOnChange := false asReactiveVariable. iconCache := Dictionary new asReactiveVariable. iconMaxSize := nil asReactiveVariable. enabled := true asReactiveVariable. allowToSelect := true asReactiveVariable.! ! !LoadingThenOk methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78154216! initialize super initialize. state := ErrorState new asReactiveVariable. state whenChangedDo: [ :s | self rebuildForState: s ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 78146193! initialize model := nil asReactiveVariable. canCommit := false asReactiveVariable. super initialize. model whenChangedDo: [ :m | [ self populateTreeFor: m ] fork. message text: m lastMessage. self populateRemotes ]! ! !BlocEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48877592! initialize super initialize. block := nil asReactiveVariable! ! !UserEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48912099! initialize usersManager := nil asReactiveVariable. user := nil asReactiveVariable. super initialize.! ! !CriticToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 33889711! initialize super initialize. criticHolder := nil asReactiveVariable. ruleHolder := nil asReactiveVariable. browseModel := self instantiate: ButtonModel. transformModel := self instantiate: ButtonModel. falsepositiveModel := self instantiate: ButtonModel. self setFocusOrder. self setBrowseModel. self setTransformModel. self setFalsepositiveModel. self registerForChanges.! ! !MenuGroupModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76849526! initialize super initialize. items := OrderedCollection new asReactiveVariable. autoRefresh := nil asReactiveVariable. autoRefresh whenChangedDo: [ :aBoolean | self menuItems do: [ :each | each autoRefresh: aBoolean ] ]! ! !KeychainEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48943205! initialize keychainEditingWrapper := nil asReactiveVariable. super initialize.! ! !IconListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69453883! initialize super initialize. iconHolder := [:item | nil ] asReactiveVariable.! ! !NewListModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69477359! initialize "Initialization code for NewListModel" super initialize. items := #() asReactiveVariable. deSelectOnReclick := false asReactiveVariable. draggedItemAtIndex := [ :index | self getRawItemAt: index ] asReactiveVariable. displayBlock := [ :object | object asStringOrText ] asReactiveVariable. headerHeight := 0 asReactiveVariable. headerTitle := nil asReactiveVariable. menuTitle := nil asReactiveVariable. menuHolder := nil asReactiveVariable. handlesDoubleClick := false asReactiveVariable. doubleClick := [ ] asReactiveVariable. iconHolder := [ nil ] asReactiveVariable. iconMaxSize := nil asReactiveVariable. keyStrokeAction := [ false ] asReactiveVariable. isMultipleSelection := false asReactiveVariable. unselectOnChange := false asReactiveVariable. sortingBlock := self defaultSortingBlock asReactiveVariable. filteringBlock := self defaultFilteringBlock asReactiveVariable. allowToSelect := true asReactiveVariable. listAnnouncer := Announcer new. headerClicked := [] asReactiveVariable. selectedIndex := 0 asReactiveVariable. selectedItem := nil asReactiveVariable. selectedIndexes := #() asReactiveVariable. selectedItems := #() asReactiveVariable. separatorBlock := [ false ] asReactiveVariable. self registerEvents! ! !MorphicWindowAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69681525! initialize super initialize. isClosedHolder := false asReactiveVariable.! ! !OkToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 45600219! initialize super initialize. okAction := [ true ] asReactiveVariable.! ! !STEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48983998! initialize super initialize. object := nil asReactiveVariable! ! !RadioButtonModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 76604878! initialize super initialize. actionWhenActivatedHolder := [] asReactiveVariable. actionWhenDesactivatedHolder := [] asReactiveVariable. enabledHolder := true asReactiveVariable. stateHolder := false asReactiveVariable. labelClickableHolder := true asReactiveVariable. labelHolder := '' asReactiveVariable. stateHolder whenChangedDo: [:bool | bool ifTrue: actionWhenActivatedHolder value ifFalse: actionWhenDesactivatedHolder value. self changed: #state ]. labelClickableHolder whenChangedDo: [:aBoolean | self changed: { #labelClickable: . aBoolean } ]. labelHolder whenChangedDo: [:label | self changed: { #label: . label } ]. ! ! !SpecDebuggerStack methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 79362047! initialize sessionHolder := nil asReactiveVariable. actionsCache := nil. super initialize. "self setDefaultFilters."! ! !KeyChainViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48867045! initialize keychain := nil asReactiveVariable. super initialize.! ! !SpecDebugActionButton methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69273682! initialize super initialize. debugActionHolder := nil asReactiveVariable. debugActionHolder whenChangedDo: [ self update ] ! ! !EyeAbstractInspector methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 74110420! initialize "The inspected object will be stored in the valueObject object to be able to use WhenObjectChanged:" object := nil asReactiveVariable. super initialize. ! ! !SequenceableCollection methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01'! asReactiveVariable ^ CollectionReactiveVariable value: self! ! !WidgetSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 68421290! initialize model := nil asReactiveVariable. model whenChangedDo: [ :m | | max | self updateTitle. apiSetters items: self retrieveItems. max := (apiSetters listItems collect: [ :e | self widthFor: e method ]) ifEmpty: [ 0 ] ifNotEmpty: [ :l | l max ]. apiSetters listItems do: [ :e | e selectorWidth: max ] ]. super initialize. self announcer on: WidgetBuilt send: #registerEvents to: self.! ! !EnvironmentChooser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77505233! initialize enableCustom := true asReactiveVariable. enableGlobal := true asReactiveVariable. environmentsHolder := #() asReactiveVariable. environmentHolder := nil asReactiveVariable. super initialize.! ! !ListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 80047185! initialize super initialize. selectionHolder := SelectionReactiveVariable new. listHolder := Array new asReactiveVariable. sortingBlockHolder := self defaultSortingBlock asReactiveVariable. filteringBlockHolder := self defaultFilteringBlock asReactiveVariable. wrapBlockHolder := [ :object | object asStringOrText ] asReactiveVariable. menuHolder := [ :menu :shifted | nil ] asReactiveVariable. multiSelectionHolder := IdentityDictionary new asReactiveVariable. multiSelection := false asReactiveVariable. allowToSelect := true asReactiveVariable. backgroundColorBlock := [ :item :index | Color white ] asReactiveVariable. autoDeselect := true asReactiveVariable. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !DropListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77536411! initialize super initialize. listHolder := OrderedCollection new asReactiveVariable. selectionHolder := SelectionReactiveVariable new. listHolder whenChangedDo: [ self changed: #getList. self changed: #getIconFor:. self internalResetSelection.]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. displayBlock := [ :model :item | item label ] asReactiveVariable. iconHolder := [ :model :item | item icon ] asReactiveVariable. self whenSelectedItemChanged: [:item | item value ]! ! !Komitter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77769025! initialize super initialize. stagingArea := nil asReactiveVariable. lastCommit := nil asReactiveVariable. "self registerToAnnouncements"! ! !AbstractApiSetter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48881433! initialize method := nil asReactiveVariable. model := nil asReactiveVariable. retrievingMethod := nil asReactiveVariable. isSetting := false. super initialize. self registerEvents! ! !ColorEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 48899634! initialize super initialize. color := Color black asReactiveVariable. morph := Morph new color: self color; extent: 25@25; yourself! ! !DateModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69567890! initialize displayBlockHolder := [ :object | object asStringOrText ] asReactiveVariable. displayBlockHolder whenChangedDo: [ self date: self date ]. super initialize. "do this last so default will be set after displayBlock"! ! !EditableList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 75324815! initialize "Initialization code for EditableList" title := 'Title' asReactiveVariable. super initialize. okBlock := [ ].! ! !SearchableTree methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 69594105! initialize super initialize. roots := OrderedCollection new asReactiveVariable! ! !DiffModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01' prior: 77532495! initialize super initialize. leftTextHolder := '' asReactiveVariable. rightTextHolder := '' asReactiveVariable. contextClassHolder := nil asReactiveVariable. showOptions := true asReactiveVariable. showOnlyDestination := false asReactiveVariable. showOnlySource := false asReactiveVariable. leftTextHolder whenChangedDo: [ :newText | self changed: #leftText: with: { newText } ]. rightTextHolder whenChangedDo: [ :newText | self changed: #rightText: with: { newText } ]. contextClassHolder whenChangedDo: [ :newClass | self changed: #contextClass: with: { newClass } ]. showOptions whenChangedDo: [ :aBoolean | self changed: #showOptions: with: { aBoolean }]. showOnlyDestination whenChangedDo: [:aBoolean | self changed: #showOnlyDestination: with: { aBoolean } ]. showOnlySource whenChangedDo: [:aBoolean | self changed: #showOnlySource: with: { aBoolean } ]! ! Object removeSelector: #asValueHolder! SelectionValueHolder removeSelector: #value! SelectionValueHolder removeSelector: #selection:! SelectionValueHolder removeSelector: #selection! SelectionValueHolder removeSelector: #reset! SelectionValueHolder removeSelector: #initialize! SelectionValueHolder removeSelector: #index:! SelectionValueHolder removeSelector: #index! SelectionValueHolder class removeSelector: #index:selection:! Smalltalk globals removeClassNamed: #SelectionValueHolder! NewValueHolder removeSelector: #whenChangedSend:to:! NewValueHolder removeSelector: #whenChangedDo:! NewValueHolder removeSelector: #valueChanged:to:! NewValueHolder removeSelector: #valueChanged:! NewValueHolder removeSelector: #valueChanged! NewValueHolder removeSelector: #value:! NewValueHolder removeSelector: #value! NewValueHolder removeSelector: #rawValue:! NewValueHolder removeSelector: #printOn:! NewValueHolder removeSelector: #initialize! NewValueHolder removeSelector: #contents:! NewValueHolder removeSelector: #contents! NewValueHolder removeSelector: #addDependent:! NewValueHolder class removeSelector: #value:! DictionaryValueHolder removeSelector: #valueAtNewKey:put:atIndex:declareFrom:! DictionaryValueHolder removeSelector: #size! DictionaryValueHolder removeSelector: #removeKey:ifAbsent:! DictionaryValueHolder removeSelector: #removeKey:! DictionaryValueHolder removeSelector: #removeAll! DictionaryValueHolder removeSelector: #initialize:! DictionaryValueHolder removeSelector: #initialize! DictionaryValueHolder removeSelector: #fillFrom:with:! DictionaryValueHolder removeSelector: #doesNotUnderstand:! DictionaryValueHolder removeSelector: #atNewIndex:put:! DictionaryValueHolder removeSelector: #at:put:! DictionaryValueHolder removeSelector: #at:ifAbsentPut:! DictionaryValueHolder removeSelector: #at:! Smalltalk globals removeClassNamed: #DictionaryValueHolder! CollectionValueHolder removeSelector: #sort:! CollectionValueHolder removeSelector: #size! CollectionValueHolder removeSelector: #resetTo:! CollectionValueHolder removeSelector: #reset! CollectionValueHolder removeSelector: #replaceAll:with:! CollectionValueHolder removeSelector: #replace:! CollectionValueHolder removeSelector: #removeLast:! CollectionValueHolder removeSelector: #removeLast! CollectionValueHolder removeSelector: #removeIndex:! CollectionValueHolder removeSelector: #removeFirst:! CollectionValueHolder removeSelector: #removeFirst! CollectionValueHolder removeSelector: #removeAt:! CollectionValueHolder removeSelector: #removeAll! CollectionValueHolder removeSelector: #remove:ifAbsent:! CollectionValueHolder removeSelector: #insert:before:! CollectionValueHolder removeSelector: #doesNotUnderstand:! CollectionValueHolder removeSelector: #atWrap:put:! CollectionValueHolder removeSelector: #atLast:put:! CollectionValueHolder removeSelector: #atAllPut:! CollectionValueHolder removeSelector: #atAll:putAll:! CollectionValueHolder removeSelector: #atAll:put:! CollectionValueHolder removeSelector: #at:put:! CollectionValueHolder removeSelector: #at:ifAbsentPut:! CollectionValueHolder removeSelector: #at:! CollectionValueHolder removeSelector: #addLast:! CollectionValueHolder removeSelector: #addFirst:! CollectionValueHolder removeSelector: #addAllLast:! CollectionValueHolder removeSelector: #addAllFirstUnlessAlreadyPresent:! CollectionValueHolder removeSelector: #addAllFirst:! CollectionValueHolder removeSelector: #addAll:! CollectionValueHolder removeSelector: #add:beforeIndex:! CollectionValueHolder removeSelector: #add:before:! CollectionValueHolder removeSelector: #add:afterIndex:! CollectionValueHolder removeSelector: #add:after:! CollectionValueHolder removeSelector: #add:! Smalltalk globals removeClassNamed: #CollectionValueHolder! Smalltalk globals removeClassNamed: #NewValueHolder! SequenceableCollection removeSelector: #asValueHolder! Dictionary removeSelector: #asValueHolder! "Deprecated30"! "KeyChain"! "Keymapping-Tools-Spec"! "Komitter"! "Manifest-CriticBrowser"! "NautilusRefactoring"! "NewList"! "Polymorph-Widgets"! "ReactiveVariable"! "Spec-Core"! "Spec-Debugger"! "Spec-Examples"! "Spec-Inspector"! "Spec-MorphicAdapters"! "Spec-PolyWidgets"! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-01-24T08:12:49.700618+01:00 Pharo.image priorSource: 30250672! ----STARTUP----2014-01-24T08:17:37.383686+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-24T08:17:37.639682+01:00 Pharo-30717.image priorSource: 30326818! ----STARTUP----2014-01-24T09:54:51.509863+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/24/2014 09:50' prior: 80582618! commentForCurrentUpdate ^ '12519 Codepanel in ByteCode view should be read only https://pharo.fogbugz.com/f/cases/12519 12693 TasklistMorph Navigation Cleanup https://pharo.fogbugz.com/f/cases/12693 12705 Better implementation of a method from case 12163 https://pharo.fogbugz.com/f/cases/12705 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/24/2014 09:51'! script371 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.650.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.72.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.251.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.668.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1011.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.181.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1394.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.620.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/24/2014 09:51'! update30718 "self new update30718" self withUpdateLog: '12519 Codepanel in ByteCode view should be read only https://pharo.fogbugz.com/f/cases/12519 12693 TasklistMorph Navigation Cleanup https://pharo.fogbugz.com/f/cases/12693 12705 Better implementation of a method from case 12163 https://pharo.fogbugz.com/f/cases/12705 '. self loadTogether: self script371 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TaskListMorph commentStamp: 'gvc 5/18/2007 11:19' prior: 0! Themed task list/switcher to select the topmost window. Use cmd + left or right arrows (not ideal but the os typically handles cmd + tab/shift-tab). On Linux, release of the command key is not detected (vm issue), so press and release cmd again or move the mouse!!! !NullTaskList commentStamp: 'SeanDeNigris 1/23/2014 11:53' prior: 0! I stand in when the task list is not open in the world.! !TaskbarTask methodsFor: 'user-interface' stamp: 'SeanDeNigris 1/23/2014 11:59'! buttonClickedForTaskList: aTasklist "Notify the tasklist." aTasklist taskClicked: self! ! !TaskbarTask methodsFor: 'user-interface' stamp: 'SeanDeNigris 1/23/2014 12:00'! taskListButtonFor: aTasklist "Answer a button for the task." ^self theme newTaskListButtonIn: aTasklist for: self! ! !UIThemeWatery methodsFor: 'morph creation' stamp: 'SeanDeNigris 1/23/2014 12:03' prior: 45825981! newTaskbarThumbnailIn: aThemedMorph for: aWindow "Answer a taskbar thumbnail morph for the given window." |answer thumb| thumb := aWindow taskbarThumbnail. answer := PanelMorph new hResizing: #shrinkWrap; vResizing: #shrinkWrap; changeTableLayout; layoutInset: 8; cellInset: 4; addMorphBack: thumb; addMorphBack: ((self buttonLabelForText: (aWindow labelString truncateWithElipsisTo: 50)) color: Color white). answer extent: answer minExtent; fillStyle: (self taskListFillStyleFor: answer); borderStyle: (self taskbarThumbnailNormalBorderStyleFor: aWindow); cornerStyle: (self taskbarThumbnailCornerStyleFor: answer). ^answer ! ! !PasteUpMorph methodsFor: '*Polymorph-Widgets' stamp: 'SeanDeNigris 1/23/2014 11:58' prior: 33796251! navigationKey: aKeyboardEvent ^ self taskList handleEvent: aKeyboardEvent.! ! !TaskListSystemSettings class methodsFor: 'settings' stamp: 'SeanDeNigris 1/23/2014 11:53' prior: 33793213! taskListSettingOn: aBuilder (aBuilder setting: #keepTaskListOpen) label: 'Keep task list open' translated; description: 'Whether the tasklist is closed (and the selected window activated) when the command key is released' translated; parent: #morphic; selector: #keepOpen; target: TaskListMorph.! ! !UIThemeVistary methodsFor: 'morph creation' stamp: 'SeanDeNigris 1/23/2014 12:03' prior: 54196556! newTaskbarThumbnailIn: aThemedMorph for: aWindow "Answer a taskbar thumbnail morph for the given window." |answer thumb| thumb := aWindow taskbarThumbnail. answer := PanelMorph new hResizing: #shrinkWrap; vResizing: #shrinkWrap; changeTableLayout; layoutInset: 8; cellInset: 4; addMorphBack: thumb; addMorphBack: ((self buttonLabelForText: (aWindow labelString truncateWithElipsisTo: 50)) color: Color white). answer extent: answer minExtent; fillStyle: (self taskListFillStyleFor: answer); borderStyle: (self taskbarThumbnailNormalBorderStyleFor: aWindow); cornerStyle: (self taskbarThumbnailCornerStyleFor: answer). ^answer ! ! !UIThemeVistary methodsFor: 'fill-styles' stamp: 'SeanDeNigris 1/23/2014 12:53'! taskListFillStyleFor: aTasklist |aColor c cm cd cb result | aColor := aTasklist color. c := aColor alphaMixed: 0.7 with: Color white. cm := aColor alphaMixed: 0.8 with: Color white. cd := aColor alphaMixed: 0.6 with: Color black. cb := aColor alphaMixed: 0.7 with: Color white. result := GradientFillStyle ramp: {0.0->c. 0.50->cm. 0.51->cd. 1.0->cb}. ^ result origin: aTasklist topLeft; direction: 0 @ aTasklist height; radial: false; yourself.! ! !WorldMorph methodsFor: '*Polymorph-Widgets' stamp: 'SeanDeNigris 1/23/2014 11:57'! taskList ^ self submorphs detect: [ :e | e isKindOf: TaskListMorph ] ifNone: [ NullTaskList in: self ].! ! !TClass methodsFor: 'subclass creation' stamp: 'BenjaminVanRyseghem 1/23/2014 17:09' prior: 80495117! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat ^ self subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !TaskListMorph commentStamp: 'gvc 5/18/2007 11:19' prior: 80670514! Themed task list/switcher to select the topmost window. Use cmd + left or right arrows (not ideal but the os typically handles cmd + tab/shift-tab). On Linux, release of the command key is not detected (vm issue), so press and release cmd again or move the mouse!!! !TaskListMorph class methodsFor: 'instance creation' stamp: 'SeanDeNigris 1/22/2014 20:07'! from: aKeyboardEvent | instance | instance := self new. aKeyboardEvent shiftPressed ifTrue: [ instance selectNextTask ] ifFalse: [ instance selectPreviousTask ]. ^ instance.! ! !TaskListMorph class methodsFor: 'testing' stamp: 'SeanDeNigris 1/22/2014 20:17'! isNavigationEvent: aKeyboardEvent ^ aKeyboardEvent asKeyCombination = Character tab alt or: [ aKeyboardEvent asKeyCombination = Character tab alt shift ].! ! !TaskListMorph class methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 19:10'! keepOpen ^ KeepOpen ifNil: [KeepOpen := false]! ! !TaskListMorph class methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 19:10'! keepOpen: aBoolean KeepOpen := aBoolean! ! !TaskListMorph methodsFor: 'private' stamp: 'gvc 4/20/2007 11:02'! activeTask "Answer the active task" ^self tasks detect: [:t | t isActive] ifNone: []! ! !TaskListMorph methodsFor: 'private' stamp: 'SeanDeNigris 1/23/2014 12:49'! addMorphs "Add our morphs." | mainColumn | self preview: self newPreviewMorph. self taskList: self newTasksMorph. mainColumn := self theme newColumnIn: self for: { self preview. self taskList }. mainColumn vResizing: #shrinkWrap; cellInset: 8; cellPositioning: #center. self addMorph: mainColumn. self layoutChanged! ! !TaskListMorph methodsFor: 'private' stamp: 'gvc 4/20/2007 10:40'! defaultPreviewExtent "Answer the default extent of the preview holder." ^320@320! ! !TaskListMorph methodsFor: 'running' stamp: 'GastonDallOglio 5/23/2011 21:59'! done "Close the tasklist and make the active task current." self delete. self activeTask ifNotNil: [ :t | t activate ]! ! !TaskListMorph methodsFor: 'event handling' stamp: 'gvc 4/20/2007 14:51'! handlesKeyboard: evt "Yes, we do it here." ^true! ! !TaskListMorph methodsFor: 'initialization' stamp: 'gvc 4/20/2007 11:12'! initialize "Initialize the receiver." super initialize. self initializeTasks; initializeLayout; initializeAppearance; addMorphs; updateButtonsAndPreview; adoptPaneColor: self color! ! !TaskListMorph methodsFor: 'initialization' stamp: 'SeanDeNigris 1/23/2014 12:03'! initializeAppearance "Initialize the appearance." self color: (Color black alpha: 0.15); fillStyle: (self theme taskListFillStyleFor: self); borderStyle: (self theme taskbarThumbnailNormalBorderStyleFor: self); cornerStyle: (self theme taskbarThumbnailCornerStyleFor: self)! ! !TaskListMorph methodsFor: 'initialization' stamp: 'AlainPlantec 9/22/2011 00:25'! initializeLayout "Initialize the layout." self changeTableLayout; layoutInset: 16; vResizing: #shrinkWrap; hResizing: #shrinkWrap; extent: self minimumExtent! ! !TaskListMorph methodsFor: 'initialization' stamp: 'gvc 4/20/2007 10:27'! initializeTasks "Set up the current tasks." self tasks: ((World submorphs collect: [:m | m taskbarTask]) select: [:m | m notNil]) asOrderedCollection! ! !TaskListMorph methodsFor: 'settings' stamp: 'AlainPlantec 12/14/2009 19:11'! keepOpen ^ self class keepOpen! ! !TaskListMorph methodsFor: 'event handling' stamp: 'MarcusDenker 3/22/2013 13:59'! keyStroke: event "Process keys to switch task." event keyCharacter = Character escape ifTrue: [^self delete]. event anyModifierKeyPressed ifFalse: [^self done]. event keyString = '' ifTrue: [^self selectPreviousTask]. event keyString = '' ifTrue: [^self selectNextTask]! ! !TaskListMorph methodsFor: 'geometry' stamp: 'gvc 4/20/2007 11:14'! minimumExtent "Answer the minimum extent." ^self defaultPreviewExtent + 64! ! !TaskListMorph methodsFor: 'instance creation' stamp: 'SeanDeNigris 1/23/2014 12:49'! newPreviewMorph "Answer a new preview holder." ^ Morph new color: Color transparent; extent: self defaultPreviewExtent; yourself.! ! !TaskListMorph methodsFor: 'instance creation' stamp: 'SeanDeNigris 1/23/2014 12:50'! newTasksMorph "Answer a new task list." ^Morph new changeTableLayout; listDirection: #leftToRight; wrapDirection: #topToBottom; cellInset: 1; color: Color transparent; hResizing: #spaceFill; vResizing: #shrinkWrap; yourself.! ! !TaskListMorph methodsFor: 'open/close' stamp: 'gvc 4/20/2007 11:21'! openAsIs "Open in the world." self openAsIsIn: self currentWorld! ! !TaskListMorph methodsFor: 'open/close' stamp: 'GuillermoPolito 5/1/2012 20:06'! openAsIsIn: aWorld "Update the layout after opening." aWorld addMorphCentered: self. self allMorphs do: [:m | m layoutChanged]. aWorld startSteppingSubmorphsOf: self. self announceOpened. self wantsKeyboardFocus ifTrue: [self takeKeyboardFocus]! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 11:11'! preview "Answer the value of preview" ^ preview! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 11:11'! preview: anObject "Set the value of preview" preview := anObject! ! !TaskListMorph methodsFor: 'cycling' stamp: 'gvc 4/20/2007 11:35'! selectNextTask "Make the next task active." self selectTask: (self tasks after: self activeTask ifAbsent: [self tasks isEmpty ifFalse: [self tasks first]])! ! !TaskListMorph methodsFor: 'cycling' stamp: 'gvc 4/20/2007 11:35'! selectPreviousTask "Make the previous task active." self selectTask: (self tasks before: self activeTask ifAbsent: [self tasks isEmpty ifFalse: [self tasks last]])! ! !TaskListMorph methodsFor: 'private' stamp: 'GastonDallOglio 5/23/2011 21:58'! selectTask: aTask "Make the given task active and update the buttons." self tasks do: [:t | t state: #restored]. aTask ifNotNil: [ aTask state: #active ]. self updateButtonsAndPreview! ! !TaskListMorph methodsFor: 'stepping and presenter' stamp: 'IgorStasenko 1/22/2012 18:25'! step "Check the sensor for the command key to see if we're done." (self keepOpen not and: [self activeHand anyModifierKeyPressed not]) ifTrue: [self done]! ! !TaskListMorph methodsFor: 'stepping' stamp: 'gvc 4/20/2007 14:59'! stepTime "Check quickly." ^100! ! !TaskListMorph methodsFor: '*Polymorph-Widgets' stamp: 'gvc 9/7/2007 21:44'! takesKeyboardFocus "Answer whether the receiver can normally take keyboard focus." ^true! ! !TaskListMorph methodsFor: 'private' stamp: 'gvc 3/2/2009 12:22'! taskClicked: aTask "A button for a task has been pressed. Close after selecting." self selectTask: aTask. self done! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 10:58'! taskList "Answer the value of taskList" ^ taskList! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 10:58'! taskList: anObject "Set the value of taskList" taskList := anObject! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 10:16'! tasks "Answer the value of tasks" ^ tasks! ! !TaskListMorph methodsFor: 'accessing' stamp: 'gvc 4/20/2007 10:16'! tasks: anObject "Set the value of tasks" tasks := anObject! ! !TaskListMorph methodsFor: 'private' stamp: 'AlainPlantec 9/22/2011 00:21'! updateButtonsAndPreview "Update the buttons and the preview.." self updateTaskButtons; updatePreview. self world ifNotNil: [self center: self world center]! ! !TaskListMorph methodsFor: 'private' stamp: 'GastonDallOglio 5/23/2011 21:32'! updatePreview "Update the preview.." self preview removeAllMorphs. self preview addMorphCentered: ( self activeTask ifNil: [ 'No tasks...' asMorph ] ifNotNil: [:t | t morph taskThumbnailOfSize: self preview extent])! ! !TaskListMorph methodsFor: 'private' stamp: 'SeanDeNigris 1/23/2014 12:00'! updateTaskButtons "Make buttons for the ordered tasks." self taskList removeAllMorphs. self tasks do: [:t | | button | button := t taskListButtonFor: self. button ifNotNil: [self taskList addMorphBack: button]]! ! !AbstractNautilusUI methodsFor: 'accessing' stamp: 'HernanMoralesDurand 1/23/2014 13:35' prior: 36077982! currentDisplayChoice: aSymbol (currentDisplayChoice := aSymbol) == #ByteCode ifTrue: [ self sourceTextArea enabled: false ] ifFalse: [ self sourceTextArea enabled: true ]. self changed: #showSource. self changed: #showByteCode. self changed: #sourceCodeFrom:. self announce: (NautilusTextDisplayerChanged displayerSymbol: aSymbol)! ! !UITheme methodsFor: 'morph creation' stamp: 'SeanDeNigris 1/23/2014 11:59'! newTaskListButtonIn: aTasklist for: aTask "Answer a tasklist button morph for the given task." |lm lab button | lab := (self buttonLabelForText: (aTask label contractTo: 40)). aTask isActive ifTrue: [ lab emphasis: 1 "1 -> bold" ]. lm := self newRowIn: aTasklist for: {(aTask icon ifNil: [self smallWindowIcon]) asMorph. lab}. button := self newButtonIn: aTasklist for: aTask morph getState: #isActive action: #buttonClickedForTaskList: arguments: {aTasklist} getEnabled: nil label: lm help: nil. button useSquareCorners; onColor: (self taskbarMinimizedButtonColorFor: button) offColor: (aTask isActive ifTrue: [self taskbarActiveButtonColorFor: button] ifFalse: [self taskbarButtonColorFor: button]); hResizing: #spaceFill. lab color: (self taskbarButtonLabelColorFor: button). button model: aTask. ^button! ! !UITheme methodsFor: 'morph creation' stamp: 'SeanDeNigris 1/23/2014 12:03' prior: 54060400! newTaskbarThumbnailIn: aThemedMorph for: aWindow "Answer a taskbar thumbnail morph for the given window." |answer thumb| thumb := aWindow taskbarThumbnail. answer := PanelMorph new hResizing: #shrinkWrap; vResizing: #shrinkWrap; changeTableLayout; layoutInset: 8; cellInset: 4; addMorphBack: thumb; addMorphBack: (self buttonLabelForText: (aWindow labelString truncateWithElipsisTo: 50)). answer extent: answer minExtent; fillStyle: (self taskListFillStyleFor: answer); borderStyle: (self taskbarThumbnailNormalBorderStyleFor: aWindow); cornerStyle: (self taskbarThumbnailCornerStyleFor: answer). ^answer! ! !UITheme methodsFor: 'services' stamp: 'SeanDeNigris 1/23/2014 12:00'! openTaskListIn: world from: aKeyboardEvent | tasklistMorph | tasklistMorph := TaskListMorph from: aKeyboardEvent. tasklistMorph openAsIsIn: world.! ! !UITheme methodsFor: 'fill-styles' stamp: 'SeanDeNigris 1/23/2014 12:51'! taskListFillStyleFor: aTasklist | aColor result | aColor := aTasklist color. result := GradientFillStyle ramp: { 0.0->aColor whiter whiter. 0.2->aColor lighter. 0.8->aColor darker. 1.0->aColor blacker}. ^ result origin: aTasklist topLeft; direction: 0 @ aTasklist height; radial: false; yourself.! ! !KeyboardEvent methodsFor: '*Polymorph-Widgets' stamp: 'SeanDeNigris 1/23/2014 11:53'! isWindowNavigation ^ TaskListMorph isNavigationEvent: self.! ! !NullTaskList commentStamp: 'SeanDeNigris 1/23/2014 11:53' prior: 80670849! I stand in when the task list is not open in the world.! !NullTaskList class methodsFor: 'instance creation' stamp: 'SeanDeNigris 1/22/2014 19:56'! in: world ^ self new world: world; yourself.! ! !NullTaskList methodsFor: 'event handling' stamp: 'SeanDeNigris 1/23/2014 12:00'! handleEvent: aKeyboardEvent aKeyboardEvent isWindowNavigation ifFalse: [ ^ false ]. world theme openTaskListIn: world from: aKeyboardEvent. ^ true.! ! !NullTaskList methodsFor: 'private' stamp: 'SeanDeNigris 1/22/2014 19:56'! world: aWorldMorph world := aWorldMorph.! ! TasklistMorph removeSelector: #updateTaskButtons! TasklistMorph removeSelector: #updatePreview! TasklistMorph removeSelector: #updateButtonsAndPreview! TasklistMorph removeSelector: #tasks:! TasklistMorph removeSelector: #tasks! TasklistMorph removeSelector: #taskList:! TasklistMorph removeSelector: #taskList! TasklistMorph removeSelector: #taskClicked:! TasklistMorph removeSelector: #takesKeyboardFocus! TasklistMorph removeSelector: #stepTime! TasklistMorph removeSelector: #step! TasklistMorph removeSelector: #selectTask:! TasklistMorph removeSelector: #selectPreviousTask! TasklistMorph removeSelector: #selectNextTask! TasklistMorph removeSelector: #preview:! TasklistMorph removeSelector: #preview! TasklistMorph removeSelector: #openAsIsIn:! TasklistMorph removeSelector: #openAsIs! TasklistMorph removeSelector: #newTasksMorph! TasklistMorph removeSelector: #newPreviewMorph! TasklistMorph removeSelector: #minimumExtent! TasklistMorph removeSelector: #keyStroke:! TasklistMorph removeSelector: #keepOpen! TasklistMorph removeSelector: #initializeTasks! TasklistMorph removeSelector: #initializeShortcuts:! TasklistMorph removeSelector: #initializeLayout! TasklistMorph removeSelector: #initializeAppearance! TasklistMorph removeSelector: #initialize! TasklistMorph removeSelector: #handlesKeyboard:! TasklistMorph removeSelector: #done! TasklistMorph removeSelector: #defaultPreviewExtent! TasklistMorph removeSelector: #addMorphs! TasklistMorph removeSelector: #activeTask! TasklistMorph class removeSelector: #keepOpen:! TasklistMorph class removeSelector: #keepOpen! Smalltalk globals removeClassNamed: #TasklistMorph! TaskbarTask removeSelector: #tasklistButtonFor:! TaskbarTask removeSelector: #buttonClickedForTasklist:! UITheme removeSelector: #tasklistFillStyleFor:! UITheme removeSelector: #openTasklist:! UITheme removeSelector: #newTasklistButtonIn:for:! UIThemeVistary removeSelector: #tasklistFillStyleFor:! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat ^ self subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !Trait method! subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat ^ self subclass: aTraitName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! "Keymapping-Core"! "Nautilus"! "Polymorph-Widgets"! "Settings-Polymorph"! "Traits"! ----End fileIn----! ----QUIT----2014-01-24T09:55:18.457868+01:00 Pharo.image priorSource: 30327015! ----STARTUP----2014-01-24T10:00:06.078627+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-24T10:00:06.41863+01:00 Pharo-30718.image priorSource: 30357389! ----STARTUP----2014-01-24T10:34:48.336812+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/24/2014 10:32' prior: 80658961! commentForCurrentUpdate ^ '12703 revert DockingBarMorph>>updatePosition https://pharo.fogbugz.com/f/cases/12703 12704 clean FontMorphChooser https://pharo.fogbugz.com/f/cases/12704 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/24/2014 10:32'! script372 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-MarcusDenker.137.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.653.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.72.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.908.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.668.mcz NautilusCommon-MarcusDenker.193.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1011.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.181.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-MarcusDenker.55.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1394.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.620.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/24/2014 10:32'! update30719 "self new update30719" self withUpdateLog: '12703 revert DockingBarMorph>>updatePosition https://pharo.fogbugz.com/f/cases/12703 12704 clean FontMorphChooser https://pharo.fogbugz.com/f/cases/12704 '. self loadTogether: self script372 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FontChooserMorph commentStamp: '' prior: 67135862! I'm the UI of a font chooser. FontChooser openWithWindowTitle: 'Choose the Menu Font' for: StandardFonts setSelector: #menuFont: getSelector: #menuFont ! !FontChooser commentStamp: 'StephaneDucasse 1/1/2010 18:00' prior: 42310829! I'm an object holding information to choose a font from a list of fonts.! !FontChooserMorph commentStamp: '' prior: 80700848! I'm the UI of a font chooser. FontChooser openWithWindowTitle: 'Choose the Menu Font' for: StandardFonts setSelector: #menuFont: getSelector: #menuFont ! !FontChooserMorph methodsFor: 'ui elements' stamp: 'StephaneDucasse 11/11/2013 18:19' prior: 22414159! applyButton ^applyButton ifNil: [ applyButton := (self newButtonFor: self action: #applyButtonClicked label: 'Apply' translated help: 'Click here to apply your selection without closing this dialog' translated) hResizing: #spaceFill ]! ! !FontChooserMorph methodsFor: 'ui elements' stamp: 'StephaneDucasse 11/11/2013 18:19' prior: 22414496! cancelButton ^cancelButton ifNil: [ cancelButton := (self newButtonFor: self action: #cancelButtonClicked label: 'Cancel' translated help: 'Click here to cancel and close this dialog' translated) hResizing: #spaceFill ]! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:32' prior: 67136007! createWindow "Create the package loader window." | buttonBar buttonBarOffset previewFrame buttonBarFrame | buttonBar := self newRow: { self applyButton. self okButton. self cancelButton. self updateButton }. buttonBar cellInset: 8@0. buttonBarOffset := buttonBar minExtent y negated - (2 * ProportionalSplitterMorph splitterWidth). fontList := self newFontList borderWidth: 0. self addMorph: fontList frame: (0.0 @ 0.0 corner: 0.4 @ 0.4). styleList := self newFontStyleList borderWidth: 0; yourself. self addMorph: styleList frame: (0.4 @ 0.0 corner: 0.6 @ 0.4). pointSizeList := self newPointSizeList borderWidth: 0; yourself. self addMorph: pointSizeList frame: (0.6 @ 0.0 corner: 0.75 @ 0.4). languageList := self newLanguageList borderWidth: 0; yourself. self addMorph: languageList frame: (0.75 @ 0.0 corner: 1.0 @ 0.4). self languageIndex: 1. previewFrame := (0 @ 0.4 corner: 1 @1) asLayoutFrame bottomOffset: buttonBarOffset yourself. self addMorph: self fontPreviewPanel fullFrame: previewFrame. buttonBarFrame := (0 @1 corner: 1@1) asLayoutFrame topOffset: buttonBarOffset; yourself. self addMorph: buttonBar fullFrame: buttonBarFrame.! ! !FontChooserMorph methodsFor: 'ui elements' stamp: 'StephaneDucasse 11/11/2013 18:19' prior: 22414818! fontPreviewPanel ^fontPreviewPanel ifNil: [ fontPreviewPanel := self newScrollPaneFor: self newFontPreviewInnerPanel ]! ! !FontChooserMorph methodsFor: 'initialize-release' stamp: 'StephaneDucasse 11/11/2013 16:32' prior: 22421360! initializeLabelArea "Customize the window bar by removing all the decorations" super initializeLabelArea. self removeCollapseBox; removeExpandBox; removeMenuBox! ! !FontChooserMorph methodsFor: 'initialize-release' stamp: 'StephaneDucasse 1/21/2014 21:20' prior: 22421558! initializeWithModel: aFontChooser self model: aFontChooser; clipSubmorphs: true; setLabel: self model windowTitle; name: 'FontChooser'. self model announcer when: #pointSizeListChanged send: #updatePointSizeList to: self. self model announcer when: #selectedFontIndex send: #updateFontIndex to: self. self model announcer when: #pointSizeChanged send: #updatePointSize to: self. self model announcer when: #selectedFontStyleIndex send: #updateStyleList to: self. self updatePreview! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 11/11/2013 17:27' prior: 67137080! languageIndex | item | item := self pangrams detect: [ :one | one value = selectedPangram ] ifNone: nil. ^self pangrams indexOf: item.! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 1/21/2014 21:32' prior: 67137308! languageIndex: anIndex anIndex isZero ifTrue: [ ^ self ]. selectedPangram := (self pangrams at: anIndex) value. languageList selectionIndex: anIndex. self updatePreview! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:32' prior: 67137546! languages ^ self pangrams collect: #key! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 16:13' prior: 22415026! newFontList | widget requiredWidth | widget := PluggableListMorph on: self model list: #fontListStrings selected: #selectedFontIndex changeSelected: #selectedFontIndex:. requiredWidth := self widthRequiredFor: [ :each | result font widthOfStringOrText: each familyName ] from: model fontList noLessThan: 20. widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; width: requiredWidth + widget scrollBarThickness + (result font widthOfStringOrText: ' '). self model announcer when: #fontsUpdated send: #verifyContents to: widget. self model announcer when: #selectedFontIndex send: #updateSelectionIndex to: widget. ^ widget.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:12' prior: 67137699! newFontPointSizeField ^ (PluggableTextMorph on: self text: #pointSizeString accept: #pointSizeString:) acceptOnCR: true; hideVScrollBarIndefinitely: true; color: Color gray veryMuchLighter; borderColor: #inset; vResizing: #rigid; hResizing: #spaceFill; width: (TextStyle defaultFont widthOfString: '99999999.99'); height: TextStyle defaultFont height + 6; yourself. ! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:41' prior: 67138218! newFontPointSizeLabel ^ StringMorph contents: 'Point size:' translated; yourself.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:41' prior: 22422781! newFontPreviewInnerPanel "Answer a morph for the preview text." | textMorph | textMorph := self newText: self previewText. textMorph margins: 4. ^ self model selectedFont ifNil: [ textMorph ] ifNotNil: [ :f | textMorph beAllFont: f ]! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 15:42' prior: 22423101! newFontSizePanel pointSizeMorph := self newFontPointSizeField. ^ Morph new borderWidth: 1; borderColor: Color black; hResizing: #spaceFill; vResizing: #shrinkwrap; color: Color transparent; layoutPolicy: TableLayout new; cellInset: 0; listCentering: #topLeft; listDirection: #leftToRight; cellPositioning: #leftCenter; clipSubmorphs: true; addMorphBack: self newFontPointSizeLabel; addMorphBack: pointSizeMorph. ! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 16:15' prior: 67138400! newFontStyleList | widget minWidth requiredWidth | widget := PluggableListMorph on: self model list: #fontStyleListStrings selected: #selectedFontStyleIndex changeSelected: #selectedFontStyleIndex:. minWidth := widget font widthOfStringOrText: 'Condensed Extra Bold Oblique' "long, but not the longest". requiredWidth := self widthRequiredFor: [ :each | result font widthOfStringOrText: each styleName ] from: model fontStyleList noLessThan: minWidth. ^ widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; width: requiredWidth + widget scrollBarThickness + (widget font widthOfStringOrText: ' '); yourself.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 16:16' prior: 67139139! newLanguageList | widget | widget := PluggableListMorph on: self list: #languages selected: #languageIndex changeSelected: #languageIndex:. ^ widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; yourself.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 16:16' prior: 22417060! newPointSizeList | widget | widget := PluggableListMorph on: self model list: #pointSizeList selected: #selectedPointSizeIndex changeSelected: #selectedPointSizeIndex:. ^ widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; yourself.! ! !FontChooserMorph methodsFor: 'ui elements' stamp: 'SeanDeNigris 1/23/2014 16:17' prior: 22417434! okButton okButton ifNotNil: [ ^ okButton ]. okButton := self newButtonFor: self action: #okButtonClicked label: 'OK' translated help: 'Click here to close this dialog, and accept your selection' translated. ^ okButton hResizing: #spaceFill; yourself.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:17' prior: 22419378! okButtonClicked self apply. self delete.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/23/2014 16:17' prior: 22423722! open ^ self createWindow openAsIsIn: self currentWorld.! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 16:18' prior: 22417744! pointSizeString ^ model pointSize asString.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:25' prior: 22419805! pointSizeString: aText | string number | string := aText asString trimBoth. string isEmpty ifTrue: [^self]. string detect: [:c | c isDigit not and: [c ~= $.]] ifFound: [^self]. [number := string asNumber asFloat] on: Error do: [:e | ^self]. (number < 1 or: [number > 1024]) ifTrue: [^self]. pointSizeMorph ifNotNil: [pointSizeMorph hasUnacceptedEdits: false]. model pointSize: number! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 16:42' prior: 67143365! previewText "Answer the preview text based on current font." | sample i maxLineLength endOfLineCharacters | model selectedFont isNil ifTrue: [ ^'' ]. sample := String new writeStream. model selectedFont isSymbolFont ifFalse: [ | pangram | pangram := self selectedPangram. sample nextPutAll: pangram; cr; nextPutAll: pangram asUppercase; cr ]. i := 0. maxLineLength := 30. endOfLineCharacters := '@Z`z'. 33 to: 255 do: [ :asciiValue | | character | character := Character value: asciiValue. sample nextPut: character. i := i + 1. ((endOfLineCharacters includes: character) or: [ i := maxLineLength ]) ifTrue: [ i := 0. sample cr ] ]. ^ sample contents.! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 16:31' prior: 22418477! result ^ result! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'StephaneDucasse 11/11/2013 17:39' prior: 67143961! selectedPangram ^ selectedPangram ifNil: [ self pangrams first value ]! ! !FontChooserMorph methodsFor: 'ui elements' stamp: 'SeanDeNigris 1/23/2014 16:32' prior: 22418578! updateButton updateButton ifNotNil: [ ^ updateButton ]. updateButton := self newButtonFor: self action: #updateButtonClicked label: 'Update' translated help: 'Click here to rescan Font Folder and update the font list' translated. ^ updateButton hResizing: #spaceFill; yourself.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:33' prior: 22420859! updateButtonClicked self updateFontList.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'StephaneDucasse 11/11/2013 18:48'! updateFontIndex fontList ifNotNil: [ fontList selectionIndex: model selectedFontIndex ]. styleList ifNotNil: [ styleList updateList ]. pointSizeList ifNotNil: [ pointSizeList updateList ]. self updatePreview! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:33' prior: 22420994! updateFontList model updateFontList. self announcer announce: #fontsUpdated.! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:34'! updatePointSize pointSizeList ifNotNil: [ pointSizeList selectionIndex: model selectedPointSizeIndex ]. "this should not be like that but managed by the list!!!!!!!!" self updatePreview! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:34'! updatePointSizeList pointSizeList ifNotNil: [ pointSizeList updateList ]. self updatePreview! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:34' prior: 22421150! updatePreview self fontPreviewPanel scrollTarget: self newFontPreviewInnerPanel! ! !FontChooserMorph methodsFor: 'actions' stamp: 'SeanDeNigris 1/23/2014 16:34'! updateStyleList styleList ifNotNil: [ styleList selectionIndex: model selectedFontStyleIndex ]. "this should not be like that but managed by the list!!!!!!!!" self updatePreview! ! !FontChooserMorph methodsFor: 'private' stamp: 'SeanDeNigris 1/23/2014 16:11'! widthRequiredFor: aBlock from: aCollection noLessThan: anInteger "aBlock - takes each item as an argument, and returns the width it needs" ^ aCollection inject: anInteger into: [ :max :each | | itemWidth | itemWidth := each value: aBlock. max max: itemWidth ].! ! !DockingBarMorph methodsFor: 'private - layout' stamp: 'gvc 11/14/2006 15:37' prior: 71845432! updatePosition "private - update the receiver's position. Fixed so as not to keep changing position!! (called twice if adhereing)" | edgeSymbol margin | edgeSymbol := self edgeToAdhereTo. edgeSymbol == #none ifTrue: [self perform: (edgeSymbol , ':') asSymbol with: (self owner perform: edgeSymbol)]. "" margin := self avoidVisibleBordersAtEdge ifTrue: [self borderWidth asPoint] ifFalse: [0 asPoint]. "" self isAdheringToTop ifTrue: [| usedHeight | usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). self topLeft: self owner topLeft - margin + (0 @ usedHeight)]. self isAdheringToBottom ifTrue: [| usedHeight | usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#bottom ). self bottomLeft: self owner bottomLeft + (-1 @ 1 * margin) - (0 @ usedHeight)]. "" self isAdheringToLeft ifTrue: [| usedHeight usedWidth | usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). usedWidth := self usedWidthByPredominantDockingBarsOfChastes: #(#left ). self topLeft: self owner topLeft - margin + (usedWidth @ usedHeight)]. self isAdheringToRight ifTrue: [| usedHeight usedWidth | usedHeight := self usedHeightByPredominantDockingBarsOfChastes: #(#top ). usedWidth := self usedWidthByPredominantDockingBarsOfChastes: #(#right ). self topRight: self owner topRight + (1 @ -1 * margin) + (usedWidth negated @ usedHeight)]! ! !FontChooser commentStamp: 'StephaneDucasse 1/1/2010 18:00' prior: 80701091! I'm an object holding information to choose a font from a list of fonts.! !FontChooser methodsFor: 'accessing' stamp: 'StephaneDucasse 11/11/2013 17:06'! announcer ^ announcer ifNil: [ announcer := Announcer new ]! ! !FontChooser methodsFor: 'action' stamp: 'SeanDeNigris 1/23/2014 15:16' prior: 22406586! apply (target isNil or: [ setSelector isNil ]) ifTrue: [ ^ self ]. self selectedFont ifNotNil: [ :font | target perform: setSelector with: font ].! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:13' prior: 22404230! fontList ^ fontList ifNil: [ self refreshFontList ].! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:18' prior: 22404371! fontListStrings | isUpdateRequired | isUpdateRequired := fontListStrings isNil or: [fontList size ~= fontListStrings size]. isUpdateRequired ifTrue: [ fontListStrings := self fontList collect: [:each | each familyName]]. ^ fontListStrings! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:19' prior: 22404629! fontStyleList ^ self selectedFontFamily ifNil: [ #() ] ifNotNil: [ :family | fontStyleList := family members asSortedCollection ].! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:23' prior: 22404842! fontStyleListStrings "names of simulated styles are enclosed in parenthesis" ^ self fontStyleList collect: [:fontFamilyMember | | styleName | styleName := fontFamilyMember styleName. fontFamilyMember simulated ifTrue: ['(', styleName, ')'] ifFalse: [styleName]].! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:24' prior: 22405148! getSelector ^ getSelector! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:24' prior: 22405283! getSelector: aSelectorSymbolOrFont getSelector := aSelectorSymbolOrFont! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:24' prior: 67587913! pointSize ^ pointSize ifNil: [pointSize := 10.0]! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:24' prior: 22405582! pointSize: aNumber pointSize := aNumber. self announcer announce: #pointSizeChanged.! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:25' prior: 22405730! pointSizeList pointSizeList ifNotNil: [ ^ pointSize ]. ^ pointSizeList := (1 to: 256) collect: [ :each | each asString padLeftTo: 3 ].! ! !FontChooser methodsFor: 'action' stamp: 'StephaneDucasse 11/11/2013 17:41' prior: 22406827! refreshFontList ^fontList := LogicalFontManager current allFamilies! ! !FontChooser methodsFor: 'selected' stamp: 'StephaneDucasse 11/11/2013 17:27' prior: 22408875! selectedFontFamily ^ self fontList at: self selectedFontIndex ifAbsent: [nil]. ! ! !FontChooser methodsFor: 'selected' stamp: 'SeanDeNigris 1/23/2014 15:13' prior: 22409708! selectedFontIndex: anIndex | family member newStyleIndex | anIndex = 0 ifTrue: [^self]. selectedFontIndex := anIndex. "change the selected style to be the closest to the last user selected weight slant and stretch values. By user selected I mean that the user changed the style list selection, rather than a change being forced because a particular family didn't have that style" family := self fontList at: selectedFontIndex. member := family closestMemberWithStretchValue: stretchValue weightValue: weightValue slantValue: slantValue. newStyleIndex := self fontStyleList indexOf: member. selectedFontStyleIndex := newStyleIndex. self setPointSizeListFrom: member. self announcer announce: #selectedFontStyleIndex. self announcer announce: #selectedFontIndex. ! ! !FontChooser methodsFor: 'selected' stamp: 'StephaneDucasse 11/11/2013 17:32' prior: 22411032! selectedFontStyleIndex: anIndex | familyMember | anIndex = 0 ifTrue: [^self]. selectedFontStyleIndex := anIndex. familyMember := self fontStyleList at: anIndex. self setStyleValuesFrom: familyMember. self announcer announce: #selectedFontStyleIndex.! ! !FontChooser methodsFor: 'selected' stamp: 'SeanDeNigris 1/23/2014 15:12' prior: 22411656! selectedPointSizeIndex: anIndex anIndex = 0 ifTrue: [^self]. pointSize := (self pointSizeList at: anIndex) trimBoth asNumber. self announcer announce: #pointSizeChanged. ! ! !FontChooser methodsFor: 'selected' stamp: 'StephaneDucasse 11/11/2013 18:29' prior: 22411892! setPointSizeListFrom: aFontFamilyMember | style old new | old := pointSizeList. (aFontFamilyMember isKindOf: FontFamilyMemberAbstract) ifTrue:[ style := TextStyle named: aFontFamilyMember family familyName. style ifNotNil:[ new := style pointSizes collect: [:each | each reduce asString padLeftTo: 3]]]. new ifNil: [ new := (1 to: 256) collect: [:each | each asString padLeftTo: 3 ]]. pointSizeList := new. old ~= new ifTrue: [ self announcer announce: #pointSizeListChanged]! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:25' prior: 22405925! setSelector: selector setSelector := selector! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:26' prior: 22406077! target ^ target! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:26' prior: 22406197! target: anObject target := anObject! ! !FontChooser methodsFor: 'accessing' stamp: 'SeanDeNigris 1/23/2014 15:26' prior: 22406334! title: aString title := aString! ! FontChooser removeSelector: #categoryList! FontChooserMorph removeSelector: #update:! FontChooserMorph removeSelector: #pointSizeSlider:! "FreeType"! "Morphic-Base"! ----End fileIn----! ----QUIT----2014-01-24T10:35:05.375089+01:00 Pharo.image priorSource: 30357586! ----STARTUP----2014-01-24T10:40:15.445665+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-24T10:40:15.713666+01:00 Pharo-30719.image priorSource: 30389461! ----STARTUP----2014-01-26T13:38:01.324493+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/26/2014 13:32' prior: 80689531! commentForCurrentUpdate ^ '12701 In GZipReadStream #unzip:to: answer the new file name, but not #unzip: https://pharo.fogbugz.com/f/cases/12701 11755 When removing an instance variable, far too many package are dirty after https://pharo.fogbugz.com/f/cases/11755 12713 RecentMessageList>>lastClasses: includes obsolete testclasses https://pharo.fogbugz.com/f/cases/12713 12726 add command line handler for ImageCleaner https://pharo.fogbugz.com/f/cases/12726 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/26/2014 13:33'! script373 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-StephaneDucasse.52.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.653.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.619.mcz KeyChain-MarcusDenker.72.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.668.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1011.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.620.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/26/2014 13:35'! update30720 "self new update30720" self withUpdateLog: '12701 In GZipReadStream #unzip:to: answer the new file name, but not #unzip: https://pharo.fogbugz.com/f/cases/12701 11755 When removing an instance variable, far too many package are dirty after https://pharo.fogbugz.com/f/cases/11755 12713 RecentMessageList>>lastClasses: includes obsolete testclasses https://pharo.fogbugz.com/f/cases/12713 12726 add command line handler for ImageCleaner https://pharo.fogbugz.com/f/cases/12726 '. self loadTogether: self script373 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassAnnouncement commentStamp: 'BenjaminVanRyseghem 1/23/2014 11:53' prior: 0! I am an abstract class used to gather all the announcements related to class modifications.! !ClassAdded commentStamp: 'cyrilledelaunay 1/18/2011 11:56' prior: 42166164! This announcement will be emitted when a class or a trait is added, using: => Trait >> named: (the notification is done in Trait >> named:uses:category:env:) => Class >> subclass: ! !ClassCommented commentStamp: '' prior: 42170104! This announcement will be emitted when a class or a trait comment changes! !ClassModifiedClassDefinition commentStamp: '' prior: 42172514! This announcement will be emitted when a class or a trait definition changes: when an inst var or a classVariable is added! !ClassRecategorized commentStamp: 'cyrilledelaunay 1/18/2011 10:42' prior: 42174237! This announcement will be raised when: - we set a category to a class (see 'Class >>category:') - we set a category to a Trait (see Trait>>category:) It corresponds to the RecategorizedEvent! !ClassRemoved commentStamp: 'cyrilledelaunay 1/18/2011 11:43' prior: 42174430! the annoucement will be emitted when removing a class or a trait using: => removeFromSystem! !ClassRenamed commentStamp: 'cyrilledelaunay 1/18/2011 11:44' prior: 42174526! the annoucement will be emitted when renaming a class or a trait using: => RenameClassRefactoring >> rename:to: => class>>rename: The corresponding event is raised in: SystemDictionary>>renameClass:from:to:! !ClassReorganized commentStamp: 'cyrilledelaunay 1/18/2011 15:03' prior: 42174738! This announcement corresponds to the ReorganizedEvent, which seems to (by looking at the references of ReorganizedEvent) be raised when: - we rename a protocol (see 'renameCategory:toBe: '). if The category is not empty, SystemMethodRecategorizedAnnouncement will also be emitted - we sort (modify the order of) protocols (see 'sortCategories') - we add a protocol (see 'addCategory:before:') - we remove a protocol (see 'removeCategory:' 'removeEmptyCategories')! !ImageCleanerCommandLineHandler commentStamp: 'MarcusDenker 1/25/2014 13:04' prior: 0! Usage: clean [ --release ] --release do #cleanUpForRelease --production do #cleanUpForProduction Documentation: This allows to run the ImageCleaner from the commandLine. With no special option it runs Smalltalk cleanUp: true. Usage: pharo Pharo.image clean pharo Pharo.image clean --release! !MessageBrowser methodsFor: 'announcements' stamp: 'NicolaiHess 1/24/2014 15:56' prior: 80437623! methodAdded: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement method. (refreshingBlockHolder value cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]. UIManager default defer: [ ((item methodClass notNil) and:[item methodClass isObsolete not]) ifTrue:[ | sel text boolean | boolean := textModel hasUnacceptedEdits. boolean ifTrue: [ text := textModel pendingText ]. sel := listModel selectedItem. self messages: (listModel listItems add: item asFullRingDefinition; yourself). listModel setSelectedItem: sel. boolean ifTrue: [ textModel pendingText: text ] ] ]! ! !MessageBrowser methodsFor: 'announcements' stamp: 'NicolaiHess 1/24/2014 15:57' prior: 80439404! methodRemoved: anAnnouncement | item | self isDisplayed ifFalse: [ ^ self ]. refreshingBlockHolder ifNil: [ ^ self ]. item := anAnnouncement methodRemoved. "Item is a compiled methed, where the list is populated with RGMethod" "(refreshingBlockHolder contents cull: item cull: anAnnouncement cull: self) ifFalse: [ ^ self ]." self okToChange ifFalse: [ ^ self ]. UIManager default defer: [ ((item methodClass notNil) and:[item methodClass isObsolete not]) ifTrue:[ | sel itm | sel := listModel selectedIndex. itm := listModel selectedItem. (itm notNil and: [ itm methodClass = item methodClass and: [ itm selector = item selector ] ]) ifTrue: [ textModel hasUnacceptedEdits: false ]. self messages: (listModel listItems remove: item asFullRingDefinition ifAbsent: [ nil ]; yourself). listModel setSelectedIndex: sel ] ]! ! !ClassAnnouncement commentStamp: 'BenjaminVanRyseghem 1/23/2014 11:53' prior: 80733565! I am an abstract class used to gather all the announcements related to class modifications.! !ClassAdded commentStamp: 'cyrilledelaunay 1/18/2011 11:56' prior: 80733735! This announcement will be emitted when a class or a trait is added, using: => Trait >> named: (the notification is done in Trait >> named:uses:category:env:) => Class >> subclass: ! !ClassAnnouncement methodsFor: 'testing' stamp: 'BenjaminVanRyseghem 1/23/2014 11:51'! isPropagation ^ false! ! !ClassCommented commentStamp: '' prior: 80733982! This announcement will be emitted when a class or a trait comment changes! !ClassModifiedClassDefinition commentStamp: '' prior: 80734133! This announcement will be emitted when a class or a trait definition changes: when an inst var or a classVariable is added! !ClassModifiedClassDefinition methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 12:42'! isPropagation "If there is not slot changes, I can assume that there is a propagation (the change is in one of the superclasses)" self oldClassDefinition layout ifNil: [ ^ false ]. ^ self newClassDefinition layout instanceVariables = self oldClassDefinition layout instanceVariables! ! !ClassRecategorized commentStamp: 'cyrilledelaunay 1/18/2011 10:42' prior: 80734342! This announcement will be raised when: - we set a category to a class (see 'Class >>category:') - we set a category to a Trait (see Trait>>category:) It corresponds to the RecategorizedEvent! !ClassRemoved commentStamp: 'cyrilledelaunay 1/18/2011 11:43' prior: 80734614! the annoucement will be emitted when removing a class or a trait using: => removeFromSystem! !ClassRenamed commentStamp: 'cyrilledelaunay 1/18/2011 11:44' prior: 80734789! the annoucement will be emitted when renaming a class or a trait using: => RenameClassRefactoring >> rename:to: => class>>rename: The corresponding event is raised in: SystemDictionary>>renameClass:from:to:! !ClassReorganized commentStamp: 'cyrilledelaunay 1/18/2011 15:03' prior: 80735084! This announcement corresponds to the ReorganizedEvent, which seems to (by looking at the references of ReorganizedEvent) be raised when: - we rename a protocol (see 'renameCategory:toBe: '). if The category is not empty, SystemMethodRecategorizedAnnouncement will also be emitted - we sort (modify the order of) protocols (see 'sortCategories') - we add a protocol (see 'addCategory:before:') - we remove a protocol (see 'removeCategory:' 'removeEmptyCategories')! !RecentMessageList methodsFor: '*NautilusCommon' stamp: 'NicolaiHess 1/24/2014 15:56' prior: 32146468! lastClasses: anInteger "I return the last anInteger classes modified" | result tempList | result := WeakOrderedCollection new. tempList := self methodReferenceList sorted: [:a :b | a timeStamp >= b timeStamp]. tempList do: [:method | result size = anInteger ifTrue: [ ^ result ]. method methodClass ifNotNil:[:class | class := method methodClass theNonMetaClass. (result includes: class) ifFalse: [ result add: class ]]]. ^ result! ! !ImageCleanerCommandLineHandler commentStamp: 'MarcusDenker 1/25/2014 13:04' prior: 80735636! Usage: clean [ --release ] --release do #cleanUpForRelease --production do #cleanUpForProduction Documentation: This allows to run the ImageCleaner from the commandLine. With no special option it runs Smalltalk cleanUp: true. Usage: pharo Pharo.image clean pharo Pharo.image clean --release! !ImageCleanerCommandLineHandler class methodsFor: 'accessing' stamp: 'MarcusDenker 1/25/2014 12:49'! commandName ^ 'clean'! ! !ImageCleanerCommandLineHandler class methodsFor: 'accessing' stamp: 'MarcusDenker 1/25/2014 13:05'! description ^ 'Run image cleanup'! ! !ImageCleanerCommandLineHandler methodsFor: 'activation' stamp: 'MarcusDenker 1/25/2014 13:03'! activate self activateHelp ifTrue: [ ^ self ]. self cleanUpImage. Smalltalk snapshot: true andQuit: true.! ! !ImageCleanerCommandLineHandler methodsFor: 'actions' stamp: 'MarcusDenker 1/25/2014 13:03'! cleanUpImage (self hasOption: 'release') ifTrue: [^ImageCleaner cleanUpForRelease]. (self hasOption: 'production') ifTrue: [ ^ImageCleaner cleanUpForProduction]. Smalltalk cleanUp: true except: #() confirming: false. ! ! !GZipReadStream class methodsFor: 'unzipping' stamp: 'HernanMoralesDurand 1/23/2014 10:06' prior: 22848289! unzip: fullFileName "Unzip the contents of a gzipped file specified by its full file name to the current working directory" ^ self unzip: fullFileName to: FileSystem disk workingDirectory ! ! !MCPackageManager class methodsFor: 'system changes' stamp: 'EstebanLorenzano 12/20/2013 16:47' prior: 24910131! classModified: anEvent anEvent isPropagation ifTrue: [ ^ self ]. self managersForClass: anEvent classAffected do:[ :mgr | mgr modified: true ].! ! "Compression"! "Monticello"! "NautilusCommon"! "Spec-Tools"! "System-Announcements"! "Tools"! ----End fileIn----! ----QUIT----2014-01-26T13:38:23.303842+01:00 Pharo.image priorSource: 30389658! ----STARTUP----2014-01-26T13:43:49.897549+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-26T13:43:50.169549+01:00 Pharo-30720.image priorSource: 30411101! ----STARTUP----2014-01-26T16:15:56.484743+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/26/2014 16:12' prior: 80721611! commentForCurrentUpdate ^ '12077 MNU in AdditionalMethodState>>analogousCodeTo: https://pharo.fogbugz.com/f/cases/12077 12712 make sure that all class definition messages without "poolDictionaries" part exist https://pharo.fogbugz.com/f/cases/12712 12711 ReleaseTest #testObsoleteClasses fails https://pharo.fogbugz.com/f/cases/12711 (with postscript)'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/26/2014 16:12'! script374 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.138.mcz FileSystem-Disk-MarcusDenker.71.mcz FileSystem-Memory-MarcusDenker.45.mcz FileSystem-Tests-Core-MarcusDenker.66.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-MarcusDenker.653.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.74.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.668.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1011.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/26/2014 16:13'! update30721 "self new update30721" self withUpdateLog: '12077 MNU in AdditionalMethodState>>analogousCodeTo: https://pharo.fogbugz.com/f/cases/12077 12712 make sure that all class definition messages without "poolDictionaries" part exist https://pharo.fogbugz.com/f/cases/12712 12711 ReleaseTest #testObsoleteClasses fails https://pharo.fogbugz.com/f/cases/12711 (with postscript)'. self loadTogether: self script374 merge: false. UserManager instVarNamed: 'default' put: nil. UserManager initialize. self flushCaches. ! ! "ScriptLoader30"! !AdditionalMethodStateTest methodsFor: 'tests' stamp: 'MaxLeske 1/25/2014 22:14'! testAnalogousCodeTo "create a fake traitSource association property" | state | state := AdditionalMethodState new: 1. state basicAt: 1 put: #traitSource -> (TBehavior methodNamed: #>>). self shouldnt: [ state analogousCodeTo: state ] raise: MessageNotUnderstood! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:01'! variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^self variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:04'! variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:06'! variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:10'! variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:54'! variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:38'! variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:43'! weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !TClass methodsFor: 'subclass creation' stamp: 'johanfabry 1/24/2014 10:45'! weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !Association methodsFor: 'testing' stamp: 'MaxLeske 1/25/2014 22:13'! analogousCodeTo: anAssociation ^ self = anAssociation! ! !PharoUserPermissions methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2014 11:54' prior: 29344043! isRoot: aBoolean canBrowse := aBoolean. canDebug := aBoolean. canDropOSFile := aBoolean. canEditCode := aBoolean. canEvaluateCode := aBoolean. canInspect := aBoolean. canRunStartupScript := aBoolean. canShowMorphHalo := aBoolean. canEditUser := aBoolean. canSaveImage := aBoolean.! ! !Trait method! variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^self variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^self variableByteSubclass: className instanceVariableNames: instvarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableByteSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !Trait method! variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !Trait method! variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableSubclass: aClassName uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self variableWordSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat! ! !Trait method! weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! !Trait method! weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames category: cat "Added to allow for a simplified subclass creation experience. " ^ self weakSubclass: className uses: aTraitCompositionOrArray instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: '' category: cat ! ! "Collections-Support"! "KernelTests"! "KeyChain"! "Traits"! ----End fileIn----! ----QUIT----2014-01-26T16:16:00.369167+01:00 Pharo.image priorSource: 30411298! ----STARTUP----2014-01-26T16:20:49.526575+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-26T16:20:49.790575+01:00 Pharo-30721.image priorSource: 30434055! ----STARTUP----2014-01-26T22:59:53.550903+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/26/2014 22:56' prior: 80743251! commentForCurrentUpdate ^ '12259 FileSystem memory reads/writes using a binary stream by default https://pharo.fogbugz.com/f/cases/12259 12683 Color change of LabelModel when used with openWorldWithSpec https://pharo.fogbugz.com/f/cases/12683 12704 clean FontMorphChooser https://pharo.fogbugz.com/f/cases/12704 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/26/2014 22:56'! script375 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.141.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.74.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.668.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1012.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.327.mcz RPackage-SystemIntegration-MarcusDenker.204.mcz RPackage-Tests-StephaneDucasse.127.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/26/2014 22:56'! update30722 "self new update30722" self withUpdateLog: '12259 FileSystem memory reads/writes using a binary stream by default https://pharo.fogbugz.com/f/cases/12259 12683 Color change of LabelModel when used with openWorldWithSpec https://pharo.fogbugz.com/f/cases/12683 12704 clean FontMorphChooser https://pharo.fogbugz.com/f/cases/12704 '. self loadTogether: self script375 merge: false. self flushCaches. ! ! "ScriptLoader30"! !LabelMorph methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 16:18'! adoptPaneColor: aColor! ! !LabelMorph methodsFor: 'protocol' stamp: 'gvc 8/2/2007 16:35' prior: 24255785! disable "Disable the receiver." self enabled: false! ! !LabelMorph methodsFor: 'protocol' stamp: 'gvc 8/2/2007 16:35' prior: 24255920! enable "Enable the receiver." self enabled: true! ! !LabelMorph methodsFor: 'accessing' stamp: 'gvc 1/16/2007 15:28' prior: 24256053! getEnabledSelector "Answer the value of getEnabledSelector" ^ getEnabledSelector! ! !LabelMorph methodsFor: 'accessing' stamp: 'gvc 1/16/2007 15:27' prior: 24256217! getEnabledSelector: anObject "Set the value of getEnabledSelector" getEnabledSelector := anObject. self updateEnabled! ! !LabelMorph methodsFor: '*Polymorph-Widgets' stamp: 'BenjaminVanRyseghem 1/23/2014 16:18'! initialColorInSystemWindow: aSystemWindow ^ Color black! ! !LabelMorph methodsFor: 'protocol' stamp: 'gvc 3/4/2010 15:16' prior: 24256418! interactionState: aSymbol "Backstop here to prevent 'legacy' color handling being applied from pluggable buttons."! ! !LabelMorph methodsFor: 'updating' stamp: 'gvc 9/8/2009 13:25' prior: 24256614! updateEnabled "Update the enablement state." self model ifNotNil: [ self getEnabledSelector ifNotNil: [ self enabled: (self model perform: self getEnabledSelector)]]! ! !LabelMorph methodsFor: 'update' stamp: 'gvc 7/30/2010 13:26' prior: 24256868! updateText "Update the text contents." self model ifNotNil: [ self getTextSelector ifNotNil: [ self contents: (self model perform: self getTextSelector)]]! ! !FontChooser methodsFor: 'accessing' stamp: 'NicolaiHess 1/25/2014 00:19' prior: 80717802! pointSizeList pointSizeList ifNotNil: [ ^ pointSizeList ]. ^ pointSizeList := (1 to: 256) collect: [ :each | each asString padLeftTo: 3 ].! ! !FileHandle methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:07'! binaryReadStream ^ (FileStream onHandle: self) ifNil: [ self streamError ] ifNotNilDo: [ :stream | stream binary; yourself ]! ! !FileLocator methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/26/2014 20:50'! binaryReadStream ^ self resolve binaryReadStream! ! !AbstractFileReference methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/26/2014 20:49'! binaryReadStream ^ self subclassResponsibility! ! !AbstractFileReference methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 22:48'! binaryReadStreamDo: aBlock | stream | stream := self binaryReadStream. ^ [ aBlock value: stream ] ensure: [ stream close ]! ! !AbstractFileReference methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 22:48'! binaryReadStreamDo: doBlock ifAbsent: absentBlock ^ self isFile ifTrue: [ self binaryReadStreamDo: doBlock ] ifFalse: absentBlock! ! !AbstractFileReference methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 22:49'! binaryReadStreamIfAbsent: absentBlock ^ self isFile ifTrue: [ self binaryReadStream ] ifFalse: absentBlock! ! !MemoryFileSystemFile methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:04'! binaryReadStream ^ ReadStream on: bytes from: 1 to: size! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/24/2014 22:36' prior: 80705346! newFontList | widget requiredWidth | widget := PluggableListMorph on: self model list: #fontListStrings selected: #selectedFontIndex changeSelected: #selectedFontIndex:. requiredWidth := self widthRequiredFor: [ :each | widget font widthOfStringOrText: each familyName ] from: model fontList noLessThan: 20. widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; width: requiredWidth + widget scrollBarThickness + (widget font widthOfStringOrText: ' '). self model announcer when: #fontsUpdated send: #verifyContents to: widget. ^ widget.! ! !FontChooserMorph methodsFor: 'interface building' stamp: 'SeanDeNigris 1/24/2014 22:29' prior: 80707757! newFontStyleList | widget minWidth requiredWidth | widget := PluggableListMorph on: self model list: #fontStyleListStrings selected: #selectedFontStyleIndex changeSelected: #selectedFontStyleIndex:. minWidth := widget font widthOfStringOrText: 'Condensed Extra Bold Oblique' "long, but not the longest". requiredWidth := self widthRequiredFor: [ :each | widget font widthOfStringOrText: each styleName ] from: model fontStyleList noLessThan: minWidth. ^ widget color: Color white; borderInset; vResizing: #spaceFill; hResizing: #spaceFill; width: requiredWidth + widget scrollBarThickness + (widget font widthOfStringOrText: ' '); yourself.! ! !FontChooserMorph methodsFor: 'accessing' stamp: 'SeanDeNigris 1/24/2014 22:27' prior: 80710654! previewText "Answer the preview text based on current font." | sample i maxLineLength endOfLineCharacters | model selectedFont isNil ifTrue: [ ^'' ]. sample := String new writeStream. model selectedFont isSymbolFont ifFalse: [ | pangram | pangram := self selectedPangram. sample nextPutAll: pangram; cr; nextPutAll: pangram asUppercase; cr ]. i := 0. maxLineLength := 30. endOfLineCharacters := '@Z`z'. 33 to: 255 do: [ :asciiValue | | character | character := Character value: asciiValue. sample nextPut: character. i := i + 1. ((endOfLineCharacters includes: character) or: [ i = maxLineLength ]) ifTrue: [ i := 0. sample cr ] ]. ^ sample contents.! ! !FontChooserMorph methodsFor: 'private' stamp: 'SeanDeNigris 1/24/2014 22:28' prior: 80713644! widthRequiredFor: aBlock from: aCollection noLessThan: anInteger "aBlock - takes each item as an argument, and returns the width it needs" ^ aCollection inject: anInteger into: [ :max :each | | itemWidth | itemWidth := aBlock value: each. max max: itemWidth ].! ! !FileReference methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 22:50'! binaryReadStream ^ filesystem binaryReadStreamOn: self path! ! !FileSystem methodsFor: 'public' stamp: 'MaxLeske 1/25/2014 23:02'! binaryReadStreamOn: aResolvable "Resolve the argument into an absolute path and open a file handle on the file at that path. Ask the handle to give us a read stream for reading the file." ^ (self open: aResolvable writable: false) binaryReadStream.! ! !FileSystemTest methodsFor: 'tests-streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:15'! testBinaryReadStream | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self should: [ reference binaryReadStream ] raise: FileDoesNotExist. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. stream := reference binaryReadStream. self assert: stream contents asString equals: 'griffle'. stream close! ! !FileSystemTest methodsFor: 'tests-streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:13'! testBinaryReadStreamDo | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self should: [ reference binaryReadStreamDo: [ :stream | self assert: false ] ] raise: FileDoesNotExist. reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. self assert: (reference readStreamDo: [ :stream | stream contents asString ]) = 'griffle'! ! !FileSystemTest methodsFor: 'tests-streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:13'! testBinaryReadStreamDoIfAbsent | reference | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference binaryReadStreamDo: [ :stream | false ] ifAbsent: [ true ]). reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. self assert: (reference binaryReadStreamDo: [ :stream | stream contents asString = 'griffle' ] ifAbsent: [ false ])! ! !FileSystemTest methodsFor: 'tests-streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:14'! testBinaryReadStreamIfAbsent | reference stream | self markForCleanup: (reference := filesystem workingDirectory / 'griffle'). self assert: (reference binaryReadStreamIfAbsent: [ true ]). reference writeStreamDo: [ :ws | ws nextPutAll: 'griffle' ]. stream := reference binaryReadStreamIfAbsent: [ false ]. self assert: stream contents asString = 'griffle'. stream close! ! !MemoryHandle methodsFor: 'streams-compatibility' stamp: 'MaxLeske 1/25/2014 23:03'! binaryReadStream ^ entry binaryReadStream! ! "FileSystem-Core"! "FileSystem-Disk"! "FileSystem-Memory"! "FileSystem-Tests-Core"! "FreeType"! "Polymorph-Widgets"! ----End fileIn----! ----QUIT----2014-01-26T23:00:11.331684+01:00 Pharo.image priorSource: 30434252! ----STARTUP----2014-01-26T23:05:12.797024+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-26T23:05:13.065027+01:00 Pharo-30722.image priorSource: 30454718! ----STARTUP----2014-01-27T12:41:57.277539+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 1/27/2014 12:38' prior: 80766205! commentForCurrentUpdate ^ '12719 Creating Unnamed Package Kills Nautilus https://pharo.fogbugz.com/f/cases/12719 12718 rpackage not reorganising properly moved classes https://pharo.fogbugz.com/f/cases/12718 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 1/27/2014 12:38'! script376 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.141.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.74.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.670.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1012.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-MarcusDenker.114.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-MarcusDenker.50.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.674.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 1/27/2014 12:38'! update30723 "self new update30723" self withUpdateLog: '12719 Creating Unnamed Package Kills Nautilus https://pharo.fogbugz.com/f/cases/12719 12718 rpackage not reorganising properly moved classes https://pharo.fogbugz.com/f/cases/12718 '. self loadTogether: self script376 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'accessing' stamp: 'ThierryGoubier 1/26/2014 19:27' prior: 80312645! addClass: aClass "TODO: deprecate system category / replace this with a direct call to moveClass:fromPackage:toTag:" "This does two things: - make sure the class tag for ourselves exists - change the class category as appropriate. (and by cascade, ensure systemClassRecategorizedAction: is called)." aClass category: (self addClassTag: self categoryName) categoryName! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 18:31'! basicImportClass: aClass | protocols | self addClassDefinition: aClass. protocols := aClass organization realCategories reject: [:each | (each first = $*) and: [ ( '*', self name asLowercase match: each asLowercase) not] ]. "we reject all extensions except the ones that have the same name as the package - highly improbable but who knows" protocols do: [:each | self importProtocol: each forClass: aClass].! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 18:33' prior: 80314023! importCategory "import all the classes of the class categories matching the receiver name (following package info semantics)." | cat classesInCat | cat := Smalltalk globals organization categories select: [:each | each beginsWith: self name ]. classesInCat := cat gather: [:c | Smalltalk globals organization listAtCategoryNamed: c]. classesInCat do: [:each | self importClass: (Smalltalk globals at: each) ]! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 18:31'! importClass: aClass "import a class already created but not attached to a package to the receiver. Handle also *- convention. Methods defined in *category are not added to the package. Pay attention that it will not import anything from the metaClass side" self basicImportClass: aClass. self basicImportClass: aClass theMetaClass. self addClassDefinition: aClass toClassTag: (self toTagName: aClass category)! ! !RPackage methodsFor: 'private' stamp: 'ThierryGoubier 1/25/2014 22:10'! moveClass: aClass fromPackage: oldPackage toTag: aTag oldPackage removeClass: aClass. self importClass: aClass. SystemAnnouncer uniqueInstance classRepackaged: aClass from: oldPackage to: self.! ! !RPackage methodsFor: 'private' stamp: 'ThierryGoubier 1/26/2014 19:28'! moveClass: aClass toTag: aTag "TODO: deprecate system categories / replace this with a direct call to moveClass:fromPackage:toTag:" "This change the class category as appropriate. (and by cascade, ensure systemClassRecategorizedAction: is called)." aClass category: aTag categoryName! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 1/24/2014 18:30' prior: 80318976! systemClassAddedActionFrom: ann | class rPackage categoryNameSymbol | class := ann classAffected. categoryNameSymbol := class category. rPackage := (self packageMatchingExtensionName: categoryNameSymbol) ifNil: [ self registerPackage: (self packageClass named: categoryNameSymbol) ]. rPackage importClass: class. ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'ThierryGoubier 1/25/2014 22:08' prior: 80320006! systemClassRecategorizedActionFrom: ann | class newRPackage newRPackageTag oldRPackage newCategoryName oldCategoryName| class := ann classAffected. newCategoryName := ann newCategory asSymbol. oldCategoryName := ann oldCategory asSymbol. oldRPackage := self packageMatchingExtensionName: oldCategoryName includingClass: class. newRPackage := (self packageMatchingExtensionName: newCategoryName) ifNil: [ self registerPackage: (self packageClass named: newCategoryName) ]. newRPackageTag := newRPackage addClassTag: newCategoryName. newRPackage moveClass: class fromPackage: oldRPackage toTag: newRPackageTag! ! !RPackageTagTest methodsFor: 'running' stamp: 'EstebanLorenzano 1/24/2014 18:10'! tearDown super tearDown. #TestClass asClassIfPresent: #removeFromSystem! ! !RPackageTagTest methodsFor: 'tests' stamp: 'EstebanLorenzano 1/24/2014 18:12'! testAddClass | package1 package2 class | package1 := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1'. self assert: (package1 includesClass: class). package2 := (RPackage named: #Test2) register. (package2 addClassTag: #TAG) addClass: class. self deny: (package1 includesClass: class). self assert: (package2 includesClass: class). self assert: (package2 classTagNamed: #TAG ifAbsent: [ nil ]) notNil. self assert: ((package2 classTagNamed: #TAG ifAbsent: [ nil ]) includesClass: class). ! ! !RPackageTagTest methodsFor: 'tests' stamp: 'EstebanLorenzano 1/24/2014 18:14'! testAddClassFromTag | package1 package2 class | package1 := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. self assert: (package1 includesClass: class). self assert: (package1 classTagNamed: #TAG1 ifAbsent: [ nil ]) notNil. self assert: ((package1 classTagNamed: #TAG1 ifAbsent: [ nil ]) includesClass: class). package2 := (RPackage named: #Test2) register. (package2 addClassTag: #TAG2) addClass: class. self deny: (package1 includesClass: class). self assert: (package2 includesClass: class). self assert: (package2 classTagNamed: #TAG2 ifAbsent: [ nil ]) notNil. self assert: ((package2 classTagNamed: #TAG2 ifAbsent: [ nil ]) includesClass: class). ! ! !RPackageTest methodsFor: 'running' stamp: 'EstebanLorenzano 1/24/2014 17:50'! tearDown super tearDown. #TestClass asClassIfPresent: #removeFromSystem! ! !RPackageTest methodsFor: 'tests' stamp: 'ThierryGoubier 1/25/2014 21:18'! testAddClass | package1 package2 class done | package1 := (RPackage named: #Test1) register. done := 0. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG'. SystemAnnouncer uniqueInstance on: ClassRecategorized do: [ done := done + 1]. self assert: (package1 includesClass: class). self assert: (package1 classTagNamed: #TAG ifAbsent: [ nil ]) notNil. self assert: ((package1 classTagNamed: #TAG ifAbsent: [ nil ]) includesClass: class). package2 := (RPackage named: #Test2) register. package2 addClass: class. self assert: done = 1. self deny: (package1 includesClass: class). self assert: (package2 includesClass: class). self assert: (package2 classTagNamed: #Test2 ifAbsent: [ nil ]) notNil. self assert: ((package2 classTagNamed: #Test2 ifAbsent: [ nil ]) includesClass: class).! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 1/24/2014 18:15'! testAddClassFromTag | package1 package2 class | package1 := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG'. self assert: (package1 includesClass: class). package2 := (RPackage named: #Test2) register. package2 addClass: class. self deny: (package1 includesClass: class). self assert: (package2 includesClass: class). self assert: (package2 classTagNamed: #Test2 ifAbsent: [ nil ]) notNil. self assert: ((package2 classTagNamed: #Test2 ifAbsent: [ nil ]) includesClass: class). ! ! !RPackageTag methodsFor: 'accessing' stamp: 'ThierryGoubier 1/25/2014 21:22' prior: 80315440! addClass: aClass aClass category: self categoryName! ! !PackageTreeModel methodsFor: 'help-text' stamp: 'EstebanLorenzano 1/27/2014 12:32' prior: 76442754! helpTextFor: aRPackage "We try to get a configuration class with the same name of the package" "If the package has subnames with dashes, we take only the first part" | configuration possibleConfigurationName | aRPackage name ifEmpty: [ ^ nil ]. possibleConfigurationName := 'ConfigurationOf', (aRPackage name subStrings: '-') first. configuration := possibleConfigurationName asSymbol asClassIfAbsent: [ ^nil ]. "If the configuration has a catalog description we show it, if not we don't" (configuration respondsTo: #catalogDescription) ifFalse: [ ^ nil ]. ^configuration catalogDescription.! ! "Nautilus"! "RPackage-Core"! "RPackage-SystemIntegration"! "RPackage-Tests"! ----End fileIn----! ----QUIT----2014-01-27T12:42:00.921561+01:00 Pharo.image priorSource: 30454915! ----STARTUP----2014-01-27T12:47:36.129291+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-27T12:47:36.387291+01:00 Pharo-30723.image priorSource: 30474805! ----STARTUP----2014-01-27T14:20:01.374032+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 1/27/2014 14:08' prior: 80786865! commentForCurrentUpdate ^ '12716 pharo initialization fails when there is no NativeBoost present https://pharo.fogbugz.com/f/cases/12716 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 1/27/2014 14:08'! script377 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.141.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.74.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.670.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1012.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.676.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 1/27/2014 14:09'! update30724 "self new update30724" self withUpdateLog: '12716 pharo initialization fails when there is no NativeBoost present https://pharo.fogbugz.com/f/cases/12716 '. self loadTogether: self script377 merge: false. OSPlatform startUp: true. self flushCaches. ! ! "ScriptLoader30"! !PlatformIndependentEnvironment commentStamp: 'EstebanLorenzano 1/24/2014 16:41' prior: 0! I'm a platform independent environment who is intent to work when none other works. Specially, I'm intended to work as a replacement for environments when there is no NativeBoost present, therefore I provide stubs for method calls that answers just default values. ! !UnixEnvironment commentStamp: '' prior: 0! I am a specialized OSEnvironment version for *nix systems (Linux, OSX).! !OSEnvironment class methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/24/2014 16:37'! environmentFor: aPlatform | environmentClass | environmentClass := self allSubclasses detect: [ :each | each isDefaultFor: aPlatform ] ifNone: [ nil ]. ^ (environmentClass notNil and: [ environmentClass isAvailable ]) ifTrue: [ environmentClass platform: aPlatform ] ifFalse: [ PlatformIndependentEnvironment platform: aPlatform ]! ! !OSEnvironment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/24/2014 16:38'! isAvailable ^ NativeBoost isAvailable! ! !OSEnvironment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/24/2014 16:38'! isDefaultFor: aPlatform ^ false! ! !PlatformIndependentEnvironment commentStamp: 'EstebanLorenzano 1/24/2014 16:41' prior: 80818373! I'm a platform independent environment who is intent to work when none other works. Specially, I'm intended to work as a replacement for environments when there is no NativeBoost present, therefore I provide stubs for method calls that answers just default values. ! !PlatformIndependentEnvironment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/24/2014 16:40'! isAvailable ^ true! ! !PlatformIndependentEnvironment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/24/2014 16:40'! isDefaultFor: aPlatform ^ false! ! !PlatformIndependentEnvironment methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:36'! getEnv: aVariableName ^ nil! ! !PlatformIndependentEnvironment methodsFor: 'enumeration' stamp: 'EstebanLorenzano 1/24/2014 16:36'! keysAndValuesDo: aBlock "Do nothing"! ! !PlatformIndependentEnvironment methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:37'! setEnv: nameString value: valueString "Do nothing"! ! !PlatformIndependentEnvironment methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:37'! unsetEnv: aString ^ self setEnv: aString value: nil! ! !UnixEnvironment commentStamp: '' prior: 80818698! I am a specialized OSEnvironment version for *nix systems (Linux, OSX).! !UnixEnvironment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/25/2014 13:16'! isDefaultFor: aPlatform ^ aPlatform isUnix or: [ aPlatform isMacOSX or: [ aPlatform isMacOS ] ]! ! !UnixEnvironment methodsFor: 'accessing' stamp: 'CamilloBruni 4/29/2013 17:41'! environ "Return the address of the array holding the environment variables" ^ NBExternalAddress value: ((NativeBoost loadSymbol: 'environ' fromModule: NativeBoost CLibrary) nbUInt32AtOffset: 0)! ! !UnixEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 17:41'! environAt: index | address | address := NBExternalAddress value: (self environ nbUInt32AtOffset: index-1 * 4). address isNull ifTrue: [ ^ nil ]. ^ address readString! ! !UnixEnvironment methodsFor: 'enumeration' stamp: 'CamilloBruni 4/29/2013 17:46'! keysAndValuesDo: aBlock | index associationString | index := 1 . [ associationString := self environAt: index. associationString ifNil: [ ^ self ]. self keysAndValuesDo: aBlock withAssociationString: associationString. index := index + 1 ] repeat.! ! !UnixEnvironment methodsFor: 'private' stamp: 'CamilloBruni 4/29/2013 17:18'! setEnv: nameString value: valueString "This method calls the Standard C Library getenv() function" ^ self nbCall: #( int setenv (String nameString, String valueString, 1) ) module: NativeBoost CLibrary! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:35' prior: 69815160! preferencesGeneralFolder ^ [ FileLocator preferences asFileReference / 'pharo' ] on: Error do: [ "Non NB-VMs will fai with a generic error" nil ].! ! !StartupPreferencesLoader class methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:35' prior: 69815336! preferencesVersionFolder ^ self preferencesGeneralFolder ifNotNil: [ :folder | folder / SystemVersion current dottedMajorMinor ]! ! !OSEnvironmentTest methodsFor: 'tests' stamp: 'EstebanLorenzano 1/25/2014 13:15'! testEnvironmentFor { MacOSPlatform -> UnixEnvironment. MacOSXPlatform -> UnixEnvironment. UnixPlatform -> UnixEnvironment. Win32Platform -> Win32Environment } asDictionary keysAndValuesDo: [ :platformClass :envClass | self assert: (OSEnvironment environmentFor: platformClass new) class equals: envClass ] ! ! !OSPlatform class methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:39'! determineActivePlatform "Look for the matching platform class" ^ self allSubclasses detect: [ :any | any isActivePlatform ]. ! ! !OSPlatform class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 1/24/2014 16:39' prior: 28551616! shutDown: quitting "The system is going down" Current ifNotNil: [ Current shutDown: quitting ]. ! ! !OSPlatform class methodsFor: 'class initialization' stamp: 'EstebanLorenzano 1/24/2014 16:39' prior: 46026074! startUp: resuming "Determine the current platform." resuming ifFalse: [ ^ self ]. Current := self determineActivePlatform new. Current startUp: resuming! ! !OSPlatform methodsFor: 'private' stamp: 'EstebanLorenzano 1/24/2014 16:38'! createEnvironment ^ OSEnvironment environmentFor: self! ! !OSPlatform methodsFor: 'accessing' stamp: 'EstebanLorenzano 1/24/2014 16:39' prior: 46027931! environment ^ environment ifNil: [ environment := self createEnvironment ]! ! !Win32Environment class methodsFor: 'testing' stamp: 'EstebanLorenzano 1/24/2014 16:40'! isDefaultFor: aPlatform ^ aPlatform isWin32! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'EstebanLorenzano 1/24/2014 16:34' prior: 69807802! lookInGeneralPreferencesFolder ^ StartupPreferencesLoader preferencesGeneralFolder ifNotNil: [ :folder | self lookInFolder: folder forFilesMatching: '*.st' ].! ! !StartupPreferencesHandler methodsFor: 'actions' stamp: 'EstebanLorenzano 1/24/2014 16:34' prior: 69808257! lookInPreferencesVersionFolder ^ StartupPreferencesLoader preferencesVersionFolder ifNotNil: [ :folder | self lookInFolder: folder forFilesMatching: '*.st' ].! ! OSPlatform class removeSelector: #determineActivePlatformStartingAt:! NixEnvironment removeSelector: #setEnv:value:! NixEnvironment removeSelector: #keysAndValuesDo:! NixEnvironment removeSelector: #environAt:! NixEnvironment removeSelector: #environ! Smalltalk globals removeClassNamed: #NixEnvironment! "StartupPreferences"! "System-Platforms"! "Tests"! ----End fileIn----! ----QUIT----2014-01-27T14:20:14.376539+01:00 Pharo.image priorSource: 30475002! ----STARTUP----2014-01-27T14:20:14.566558+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-27T14:20:18.426556+01:00 Pharo.image priorSource: 30493654! ----STARTUP----2014-01-27T14:25:40.074115+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-27T14:25:40.338118+01:00 Pharo-30724.image priorSource: 30493851! ----STARTUP----2014-01-28T00:06:30.545205+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/28/2014 00:03' prior: 80806952! commentForCurrentUpdate ^ '12733 FileReference >> #absolutePath returns relative path https://pharo.fogbugz.com/f/cases/12733 12715 Editing class comments looks broken with Nautilus https://pharo.fogbugz.com/f/cases/12715 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/28/2014 00:03'! script378 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.74.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-MarcusDenker.25.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.77.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-MarcusDenker.141.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-MarcusDenker.154.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-MarcusDenker.68.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1012.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-MarcusDenker.5.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.295.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.676.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/28/2014 00:03'! update30725 "self new update30725" self withUpdateLog: '12733 FileReference >> #absolutePath returns relative path https://pharo.fogbugz.com/f/cases/12733 12715 Editing class comments looks broken with Nautilus https://pharo.fogbugz.com/f/cases/12715 '. self loadTogether: self script378 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FileReference methodsFor: 'accessing' stamp: 'CamilloBruni 1/27/2014 17:18' prior: 21944572! absolutePath "Return the absolute of the receiver" ^ self path isRelative ifFalse: [ self path ] ifTrue: [ filesystem resolve: self path ]! ! !NautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/27/2014 09:28' prior: 80234139! "protocol: accessing" selectedClassWithoutChangingSelection: aClass categoryWidget resetCategoryCache. self okToChangeBoth ifFalse: [ ^ self ]. aClass ifNil: [ self unselectClass ] ifNotNil: [ acceptor := ClassOrMethodDefinitionAcceptor model: self. classesSelection at: aClass theNonMetaClass put: true. commentTextArea ifNotNil: [ commentTextArea enable ]. (self selectedPackageIncludes: aClass theNonMetaClass) ifTrue: [ self model package: self selectedPackage class: aClass category: nil method: nil ] ifFalse: [ self selectedClass: aClass withSelection: (self parentOfClass: aClass) ]. self updateOnClassSelection ]! ! "FileSystem-Core"! "Nautilus"! ----End fileIn----! ----QUIT----2014-01-28T00:06:33.691205+01:00 Pharo.image priorSource: 30494048! ----STARTUP----2014-01-28T00:06:33.863381+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-28T00:06:37.713381+01:00 Pharo.image priorSource: 30506912! ----STARTUP----2014-01-28T00:11:46.657177+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-28T00:11:46.915178+01:00 Pharo-30725.image priorSource: 30507109! ----STARTUP----2014-01-28T00:26:57.84073+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 1/28/2014 00:23' prior: 80826001! commentForCurrentUpdate ^ '12684 NewValueHolder Enhancements https://pharo.fogbugz.com/f/cases/12684 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 1/28/2014 00:23'! script379 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-SvenVanCaekenberghe.298.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1008.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-EstebanLorenzano.676.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-SvenVanCaekenberghe.622.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 1/28/2014 00:23'! update30726 "self new update30726" self withUpdateLog: '12684 NewValueHolder Enhancements https://pharo.fogbugz.com/f/cases/12684 '. self loadTogether: self script379 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NewValueHolder commentStamp: 'BenjaminVanRyseghem 1/24/2014 19:04' prior: 0! I am a class holding any object inside its unique instance variable. Each time the instance variable value changes, an announcement is emitted. The instance variable is accessed through `value` and `value:` while the registration is done by `whenChangedDo: aBlock`. In addition, infinite loops of propagation are prevented. Use case: you have two lists A, and B, and you want to keep their selection synchronised. So when A selection changes, you set B selection. But since B selection changes, you set A selection, and so on… This case is prevented by the use of a `lock` variable. / !! \ IMPORTANT / !! \ NewValueHolder will soon be replaced by ReactiveVariable ============================================= Within Spec itself, NewValueHolder has been renamed to ReactiveVariable (during the beta phase of Pharo 3). Since Pharo 3 was already in beta, NewValueHolder has been kept untouched. For new code (and all code in future versions of Pharo), use the following two hook methods: asReactiveVariable - use wherever you would have used asValueHolder, which will soon be deprecated. For now, it returns a NewValueHolder. In the future it will return a (polymorphic) ReactiveVariable selectionReactiveVariable - as above, returns a SelectionValueHolder for now. This extension method allows the two different packages to coexist without having direct references from the Spec model.! !CollectionValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am designed specifically for collections.! !DictionaryValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am designed specifically for dictionaries.! !IdentityNewValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:19' prior: 0! I am a special because I announce changes only if the new value set is different from the current value.! !SelectionValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 0! I am especially designed to contain a list selection (an index + an object)! !KMDescription methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80625449! initialize categories := nil asValueHolder. sortingBlock := [:a :b | a first < b first ]. super initialize. self collectShortcutDescription ! ! !EnvironmentChooser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80649834! initialize enableCustom := true asValueHolder. enableGlobal := true asValueHolder. environmentsHolder := #() asValueHolder. environmentHolder := nil asValueHolder. super initialize.! ! !UserManager methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80597616! initialize super initialize. users := SortedCollection new sortBlock: [:a :b | a username printString < b username printString ]; asValueHolder. currentUser := nil. self addDefaultUser.! ! !SwitchUsers methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80627750! initialize usersManager := nil asValueHolder. selectedUser := nil asValueHolder. super initialize.! ! !DropListItem methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80639083! initialize super initialize. actionHolder := [] asValueHolder. displayBlock := [ :e | e printString ]. icon := nil! ! !ListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 17:10' prior: 80650146! initialize super initialize. selectionHolder := Object selectionReactiveVariable. listHolder := Array new asReactiveVariable. sortingBlockHolder := self defaultSortingBlock asReactiveVariable. filteringBlockHolder := self defaultFilteringBlock asReactiveVariable. wrapBlockHolder := [ :object | object asStringOrText ] asReactiveVariable. menuHolder := [ :menu :shifted | nil ] asReactiveVariable. multiSelectionHolder := IdentityDictionary new asReactiveVariable. multiSelection := false asReactiveVariable. allowToSelect := true asReactiveVariable. backgroundColorBlock := [ :item :index | Color white ] asReactiveVariable. autoDeselect := true asReactiveVariable. listAnnouncer := Announcer new. self registerEvents. self bindKeyCombination: Character space toAction: [ self clickOnSelectedItem ]! ! !NewListAdapter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80625711! initialize "Initialization code for NewListAdapter" super initialize. doubleClickSelector := nil asValueHolder. dragItemSelector := nil asValueHolder. dropItemSelector := nil asValueHolder. getDisplaySelector := nil asValueHolder. getHeaderTitleSelector := nil asValueHolder. getMenuSelector := nil asValueHolder. getIndexSelector := nil asValueHolder. getItemAtIndexSelector := nil asValueHolder. getItemsSelector := nil asValueHolder. getListSizeSelector := nil asValueHolder. keyStrokeSelector := nil asValueHolder. lastKeystrokeTime := nil asValueHolder. lastKeystrokes := nil asValueHolder. model := nil asValueHolder. list := nil asValueHolder. setIndexSelector := nil asValueHolder. wantsDropSelector := nil asValueHolder. getMenuTitleSelector := nil asValueHolder. getIconSelector := nil asValueHolder. getIconMaxSizeSelector := nil asValueHolder. getIndexesSelector := nil asValueHolder. separatorSelector := nil asValueHolder! ! !KomitSliceUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80615387! initialize super initialize. valid := false asValueHolder! ! !KeychainEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80645127! initialize keychainEditingWrapper := nil asValueHolder. super initialize.! ! !NewList methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80642053! initialize renderer := nil asValueHolder. super initialize. lastKeystrokeTime := 0. lastKeystrokes := ''. drawColor := Color white asValueHolder. model := nil asValueHolder. isInitialized := false asValueHolder. isMultipleSelection := false asValueHolder. listCache := OrderedCollection new asValueHolder. selectedIndex := 0 asValueHolder. selectedIndexes := Dictionary new asValueHolder. listSize := nil asValueHolder. headerHeight := 0 asValueHolder. headerTitle := '' asValueHolder. clickOnHeader := nil asValueHolder. secondSelection := nil asValueHolder. displayListCache := OrderedCollection new asValueHolder. runningProcesses := Array new asValueHolder. deSelectOnReclick := false asValueHolder. selectionWithKeys := true asValueHolder. selectedItem := nil asValueHolder. selectedItems := OrderedCollection new asValueHolder. unselectOnChange := false asValueHolder. iconCache := Dictionary new asValueHolder. iconMaxSize := nil asValueHolder. enabled := true asValueHolder. allowToSelect := true asValueHolder.! ! !Dictionary methodsFor: '*NewValueHolder' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07'! asValueHolder ^ DictionaryValueHolder value: self! ! !PermissionsEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80596410! initialize lock := false. user := nil asValueHolder. super initialize.! ! !TreeWithLoading methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80615096! initialize super initialize. loading := true asValueHolder. loading whenChangedDo: [ :boolean | boolean ifTrue: [ self showLoading ] ifFalse: [ self showTree ] ]! ! !DropListModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 17:10' prior: 80651074! initialize super initialize. listHolder := OrderedCollection new asReactiveVariable. selectionHolder := Object selectionReactiveVariable. listHolder whenChangedDo: [ self changed: #getList. self changed: #getIconFor:. self internalResetSelection.]. selectionHolder whenChangedDo: [ self changed: #getIndex ]. displayBlock := [ :model :item | item label ] asReactiveVariable. iconHolder := [ :model :item | item icon ] asReactiveVariable. self whenSelectedItemChanged: [:item | item value ]! ! !Komitter methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80651696! initialize super initialize. stagingArea := nil asValueHolder. lastCommit := nil asValueHolder. "self registerToAnnouncements"! ! !LoadingThenOk methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80643330! initialize super initialize. state := ErrorState new asValueHolder. state whenChangedDo: [ :s | self rebuildForState: s ]! ! !KomitterUI methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80643570! initialize model := nil asValueHolder. canCommit := false asValueHolder. super initialize. model whenChangedDo: [ :m | [ self populateTreeFor: m ] fork. message text: m lastMessage. self populateRemotes ]! ! !UserEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80644081! initialize usersManager := nil asValueHolder. user := nil asValueHolder. super initialize.! ! !CriticToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80644297! initialize super initialize. criticHolder := nil asValueHolder. ruleHolder := nil asValueHolder. browseModel := self instantiate: ButtonModel. transformModel := self instantiate: ButtonModel. falsepositiveModel := self instantiate: ButtonModel. self setFocusOrder. self setBrowseModel. self setTransformModel. self setFalsepositiveModel. self registerForChanges.! ! !KeyChainViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80648423! initialize keychain := nil asValueHolder. super initialize.! ! !NewListRenderer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07' prior: 80635737! initialize super initialize. wantsSteps := false. listSource := nil asValueHolder. itemHeight := nil asValueHolder. maxWidth := 0 asValueHolder. hasHeader := false asValueHolder. potentialDropIndex := 0 asValueHolder. steppingTime := 100. mouseDownIndex := 0 asValueHolder. listSource whenChangedDo: [:e | itemHeight value: e itemHeight. e whenItemsChangedDo: [ maxWidth value: 0 ]]. potentialDropIndex whenChangedDo: [:new :old | self updateRectFor: new and: old ]. mouseDownIndex whenChangedDo: [:new :old | (old ~~ 0 and: [ new ~~ 0 ]) ifTrue: [ self updateRectFor: old and: new ] ifFalse: [ old isZero ifFalse: [self updateRectFor: old ]. new isZero ifFalse: [self updateRectFor: new ]]].! ! !SequenceableCollection methodsFor: '*NewValueHolder' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07'! asValueHolder ^ CollectionValueHolder value: self! ! !NewValueHolder commentStamp: 'BenjaminVanRyseghem 1/24/2014 19:04' prior: 80850666! I am a class holding any object inside its unique instance variable. Each time the instance variable value changes, an announcement is emitted. The instance variable is accessed through `value` and `value:` while the registration is done by `whenChangedDo: aBlock`. In addition, infinite loops of propagation are prevented. Use case: you have two lists A, and B, and you want to keep their selection synchronised. So when A selection changes, you set B selection. But since B selection changes, you set A selection, and so on… This case is prevented by the use of a `lock` variable. / !! \ IMPORTANT / !! \ NewValueHolder will soon be replaced by ReactiveVariable ============================================= Within Spec itself, NewValueHolder has been renamed to ReactiveVariable (during the beta phase of Pharo 3). Since Pharo 3 was already in beta, NewValueHolder has been kept untouched. For new code (and all code in future versions of Pharo), use the following two hook methods: asReactiveVariable - use wherever you would have used asValueHolder, which will soon be deprecated. For now, it returns a NewValueHolder. In the future it will return a (polymorphic) ReactiveVariable selectionReactiveVariable - as above, returns a SelectionValueHolder for now. This extension method allows the two different packages to coexist without having direct references from the Spec model.! !CollectionValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80852152! I am designed specifically for collections.! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject | result | result := value add: newObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject after: oldObject | result | result := value add: newObject after: oldObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject afterIndex: index | result | result := value add: newObject afterIndex: index. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject before: oldObject | result | result := value add: newObject before: oldObject. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! add: newObject beforeIndex: index | result | result := value add: newObject beforeIndex: index. self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAll: aCollection | result | result := value addAll: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllFirst: anOrderedCollection | result | result := value addAllFirst: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllFirstUnlessAlreadyPresent: anOrderedCollection | result | result := value addAllFirstUnlessAlreadyPresent: anOrderedCollection. self valueChanged: anOrderedCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addAllLast: aCollection | result | result := value addAllLast: aCollection. self valueChanged: aCollection. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addFirst: newObject | result | result := value addFirst: newObject . self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! addLast: newObject | result | result := value addLast: newObject . self valueChanged: newObject. ^ result! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: anObject ^ value at: anObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: index ifAbsentPut: block | result | result := value at: index ifAbsentPut: block. self valueChanged: block value. ^ result! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 17:11'! at: key put: anObject value at: key put: anObject. self valueChanged: value. ^ anObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAll: aCollection put: anObject | result | result := value atAll: aCollection put: anObject . self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAll: indexArray putAll: valueArray | result | result := value atAll: indexArray putAll: valueArray. self valueChanged: valueArray. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atAllPut: anObject | result | result := value atAllPut: anObject. self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atLast: indexFromEnd put: obj | result | result := value atLast: indexFromEnd put: obj. self valueChanged: obj. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:08'! atWrap: index put: anObject | result | result := value atWrap: index put: anObject. self valueChanged: value. ^ result! ! !CollectionValueHolder methodsFor: 'private' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! insert: anObject before: spot | result | result := value insert: anObject before: spot. self valueChanged: anObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! remove: oldObject ifAbsent: absentBlock | result | result := value remove: oldObject ifAbsent: absentBlock. self valueChanged: oldObject. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAll value removeAll. self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAt: index | result | result := value removeAt: index. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeFirst | result | result := value removeFirst. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeFirst: n | result | result := value removeFirst: n . self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeIndex: removedIndex | result | result := value removeIndex: removedIndex. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeLast | result | result := value removeLast. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeLast: n | result | result := value removeLast: n. self valueChanged: result. ^ result! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! replace: aBlock value replace: aBlock . self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! replaceAll: oldObject with: newObject value replaceAll: oldObject with: newObject . self valueChanged: oldObject! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! reset value reset. self valueChanged! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! resetTo: index value resetTo: index. self valueChanged! ! !CollectionValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! size ^ value size! ! !CollectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! sort: aSortBlock value sort: aSortBlock . self valueChanged! ! !DictionaryValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80852282! I am designed specifically for dictionaries.! !DictionaryValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! at: anObject ^ value at: anObject! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 6/6/2012 20:29'! at: key ifAbsentPut: aBlock ^ self at: key ifAbsent: [self at: key put: aBlock value]! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:57'! at: key put: anObject value at: key put: anObject. self valueChanged: anObject. ^ anObject! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! atNewIndex: index put: anObject value atNewIndex: index put: anObject. self valueChanged: anObject.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! doesNotUnderstand: aMessage ^ (value respondsTo: aMessage selector) ifTrue: [ value perform: aMessage selector withEnoughArguments: aMessage arguments ] ifFalse: [ super doesNotUnderstand: aMessage ]! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'CamilloBruni 11/18/2013 18:11'! fillFrom: aCollection with: aBlock "Evaluate aBlock with each of aCollections's elements as the argument. Collect the resulting values into self. Answer self." aCollection keysAndValuesDo: [ :key :aValue | self at: key put: (aBlock value: aValue) ]! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:26'! initialize super initialize. self value: Dictionary new.! ! !DictionaryValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! initialize: n value initialize: n. self valueChanged.! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeAll value removeAll. self valueChanged.! ! !DictionaryValueHolder methodsFor: 'protocol'! removeKey: key "Remove key from the receiver. If key is not in the receiver, notify an error." ^ self removeKey: key ifAbsent: [self errorKeyNotFound: key].! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! removeKey: key ifAbsent: aBlock | result | result := value removeKey: key ifAbsent: aBlock. self valueChanged. ^ result! ! !DictionaryValueHolder methodsFor: 'override' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! size ^ value size! ! !DictionaryValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary value valueAtNewKey: aKey put: anObject atIndex: index declareFrom: aDictionary. self valueChanged.! ! !IdentityNewValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:19' prior: 80852414! I am a special because I announce changes only if the new value set is different from the current value.! !IdentityNewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 12:09'! value: anObject self value == anObject ifTrue: [ ^ anObject ]. super value: anObject! ! !NewValueHolder class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 10/17/2013 16:23'! value: contents ^ self new value: contents; yourself! ! !NewValueHolder methodsFor: 'announcements' stamp: 'MarcusDenker 9/14/2013 10:28'! addDependent: aDependent self error: 'Former API, should be changed'.! ! !NewValueHolder methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/23/2014 12:35'! handleCircularReferencesWhile: aBlock "Used to handle circular references as explained in the class comment" lock ifTrue: [ ^ self ]. lock := true. aBlock ensure: [ lock := false ].! ! !NewValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 8/20/2012 11:38'! initialize super initialize. announcer := Announcer new. lock := false.! ! !NewValueHolder methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:10'! printOn: aStream super printOn: aStream. aStream nextPutAll: '[ '; print: self value; nextPutAll: ' ]'! ! !NewValueHolder methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/24/2014 17:45'! rawValue: aValue value := aValue! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:48'! value ^ value! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/23/2014 12:34'! value: anObject self handleCircularReferencesWhile: [ | oldValue | oldValue := value. value := anObject. self valueChanged: oldValue ]. ^ value! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:00'! valueChanged announcer announce: (ValueChanged newValue: value)! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue announcer announce: (ValueChanged oldValue: oldValue newValue: value)! ! !NewValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 17:02'! valueChanged: oldValue to: newValue announcer announce: (ValueChanged oldValue: oldValue newValue: newValue)! ! !NewValueHolder methodsFor: 'announcements' stamp: 'BenjaminVanRyseghem 10/17/2013 17:01'! whenChangedDo: aBlock | block | block := [:announcement :ann | aBlock cull: announcement newValue cull: announcement oldValue cull: announcement cull: ann ]. announcer when: ValueChanged do: block! ! !NewValueHolder methodsFor: 'announcements' stamp: 'EstebanLorenzano 9/8/2013 16:05'! whenChangedSend: aSelector to: aReceiver announcer on: ValueChanged send: aSelector to: aReceiver! ! !SelectionValueHolder commentStamp: 'BenjaminVanRyseghem 1/23/2014 15:18' prior: 80852604! I am especially designed to contain a list selection (an index + an object)! !SelectionValueHolder class methodsFor: 'instance creation'! index: indexValueHolder selection: selectionValueHolder ^ self new index: indexValueHolder; selection: selectionValueHolder; yourself! ! !SelectionValueHolder methodsFor: 'accessing'! index ^ index! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44'! index: anIndex index := anIndex. self valueChanged: index! ! !SelectionValueHolder methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 16:07'! initialize super initialize. index := 0 asValueHolder. selection := nil asValueHolder. index whenChangedSend: #valueChanged to: self. selection whenChangedSend: #valueChanged to: self.! ! !SelectionValueHolder methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2014 16:14'! reset self index value: 0. self selection value: nil. self valueChanged! ! !SelectionValueHolder methodsFor: 'accessing'! selection ^ selection! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:44'! selection: aSelection selection := aSelection. self valueChanged: selection! ! !SelectionValueHolder methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:21'! value ^ {index. selection}! ! !Object class methodsFor: '*NewValueHolder' stamp: 'BenjaminVanRyseghem 1/24/2014 18:46'! selectionReactiveVariable "See NewValueHolder class comment" ^ SelectionValueHolder new! ! !Object methodsFor: '*NewValueHolder' stamp: 'BenjaminVanRyseghem 1/24/2014 18:46' prior: 80599456! asReactiveVariable "See NewValueHolder class comment" ^ self asValueHolder! ! !Object methodsFor: '*NewValueHolder' stamp: 'BenjaminVanRyseghem 1/24/2014 18:46'! asValueHolder "See NewValueHolder class comment" ^ NewValueHolder value: self! ! SelectionReactiveVariable removeSelector: #value! SelectionReactiveVariable removeSelector: #selection:! SelectionReactiveVariable removeSelector: #selection! SelectionReactiveVariable removeSelector: #reset! SelectionReactiveVariable removeSelector: #initialize! SelectionReactiveVariable removeSelector: #index:! SelectionReactiveVariable removeSelector: #index! SelectionReactiveVariable class removeSelector: #index:selection:! Smalltalk globals removeClassNamed: #SelectionReactiveVariable! ReactiveVariable removeSelector: #whenChangedSend:to:! ReactiveVariable removeSelector: #whenChangedDo:! ReactiveVariable removeSelector: #valueChanged:to:! ReactiveVariable removeSelector: #valueChanged:! ReactiveVariable removeSelector: #valueChanged! ReactiveVariable removeSelector: #value:! ReactiveVariable removeSelector: #value! ReactiveVariable removeSelector: #rawValue:! ReactiveVariable removeSelector: #printOn:! ReactiveVariable removeSelector: #initialize! ReactiveVariable removeSelector: #handleCircularReferencesWhile:! ReactiveVariable removeSelector: #addDependent:! ReactiveVariable class removeSelector: #value:! ReactiveOnRealChangeVariable removeSelector: #value:! Smalltalk globals removeClassNamed: #ReactiveOnRealChangeVariable! DictionaryReactiveVariable removeSelector: #valueAtNewKey:put:atIndex:declareFrom:! DictionaryReactiveVariable removeSelector: #size! DictionaryReactiveVariable removeSelector: #removeKey:ifAbsent:! DictionaryReactiveVariable removeSelector: #removeKey:! DictionaryReactiveVariable removeSelector: #removeAll! DictionaryReactiveVariable removeSelector: #initialize:! DictionaryReactiveVariable removeSelector: #initialize! DictionaryReactiveVariable removeSelector: #fillFrom:with:! DictionaryReactiveVariable removeSelector: #doesNotUnderstand:! DictionaryReactiveVariable removeSelector: #atNewIndex:put:! DictionaryReactiveVariable removeSelector: #at:put:! DictionaryReactiveVariable removeSelector: #at:ifAbsentPut:! DictionaryReactiveVariable removeSelector: #at:! Smalltalk globals removeClassNamed: #DictionaryReactiveVariable! CollectionReactiveVariable removeSelector: #sort:! CollectionReactiveVariable removeSelector: #size! CollectionReactiveVariable removeSelector: #resetTo:! CollectionReactiveVariable removeSelector: #reset! CollectionReactiveVariable removeSelector: #replaceAll:with:! CollectionReactiveVariable removeSelector: #replace:! CollectionReactiveVariable removeSelector: #removeLast:! CollectionReactiveVariable removeSelector: #removeLast! CollectionReactiveVariable removeSelector: #removeIndex:! CollectionReactiveVariable removeSelector: #removeFirst:! CollectionReactiveVariable removeSelector: #removeFirst! CollectionReactiveVariable removeSelector: #removeAt:! CollectionReactiveVariable removeSelector: #removeAll! CollectionReactiveVariable removeSelector: #remove:ifAbsent:! CollectionReactiveVariable removeSelector: #insert:before:! CollectionReactiveVariable removeSelector: #doesNotUnderstand:! CollectionReactiveVariable removeSelector: #atWrap:put:! CollectionReactiveVariable removeSelector: #atLast:put:! CollectionReactiveVariable removeSelector: #atAllPut:! CollectionReactiveVariable removeSelector: #atAll:putAll:! CollectionReactiveVariable removeSelector: #atAll:put:! CollectionReactiveVariable removeSelector: #at:put:! CollectionReactiveVariable removeSelector: #at:ifAbsentPut:! CollectionReactiveVariable removeSelector: #at:! CollectionReactiveVariable removeSelector: #addLast:! CollectionReactiveVariable removeSelector: #addFirst:! CollectionReactiveVariable removeSelector: #addAllLast:! CollectionReactiveVariable removeSelector: #addAllFirstUnlessAlreadyPresent:! CollectionReactiveVariable removeSelector: #addAllFirst:! CollectionReactiveVariable removeSelector: #addAll:! CollectionReactiveVariable removeSelector: #add:beforeIndex:! CollectionReactiveVariable removeSelector: #add:before:! CollectionReactiveVariable removeSelector: #add:afterIndex:! CollectionReactiveVariable removeSelector: #add:after:! CollectionReactiveVariable removeSelector: #add:! Smalltalk globals removeClassNamed: #CollectionReactiveVariable! Smalltalk globals removeClassNamed: #ReactiveVariable! SequenceableCollection removeSelector: #asReactiveVariable! Dictionary removeSelector: #asReactiveVariable! "KeyChain"! "Keymapping-Tools-Spec"! "Komitter"! "Manifest-CriticBrowser"! "NautilusRefactoring"! "NewList"! "NewValueHolder"! "Polymorph-Widgets"! "ReactiveVariable"! "Spec-Core"! ----End fileIn----! ----QUIT----2014-01-28T00:27:16.034744+01:00 Pharo.image priorSource: 30507306! ----STARTUP----2014-01-28T00:27:16.214144+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-28T00:27:20.118131+01:00 Pharo.image priorSource: 30550833! ----STARTUP----2014-01-28T00:32:37.498192+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-28T00:32:37.754188+01:00 Pharo-30726.image priorSource: 30551030! ----STARTUP----2014-01-28T14:57:55.655991+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/28/2014 14:54' prior: 80839258! commentForCurrentUpdate ^ '12690 Infinite recursion with #wantsLineEndConversion: on command-line https://pharo.fogbugz.com/f/cases/12690 12689 Implement equality in TraitComposition https://pharo.fogbugz.com/f/cases/12689 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/28/2014 14:54'! script380 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.910.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.401.mcz SlotTests-MarcusDenker.67.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-SvenVanCaekenberghe.298.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-SvenVanCaekenberghe.58.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1012.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/28/2014 14:54'! update30727 "self new update30727" self withUpdateLog: '12690 Infinite recursion with #wantsLineEndConversion: on command-line https://pharo.fogbugz.com/f/cases/12690 12689 Implement equality in TraitComposition https://pharo.fogbugz.com/f/cases/12689 '. self loadTogether: self script380 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TraitsResource commentStamp: 'MartinDias 1/22/2014 15:40' prior: 0! I define objects to be used for testing traits. Browsr references to myself.! !TraitDescription methodsFor: 'as yet unclassified ' stamp: 'MartinDias 1/23/2014 15:15'! syntacticallyEquals: aTraitTransformation "Test syntactic equivalence of this trait (as a trait transformation) with another." ^ self = aTraitTransformation! ! !SmalltalkImageTest methodsFor: 'testing' stamp: 'DamienCassou 1/23/2014 10:01'! testOpenLog "It must be possible to write to the log even when the log file can''t be created." "Standard case where a file can be created with this name." self writeToLogWithFileNamed: 'file.log'. "Other cases where a file with the given name can not be created." self writeToLogWithFileNamed: ''. self writeToLogWithFileNamed: '.'. ! ! !SmalltalkImageTest methodsFor: 'helpers' stamp: 'DamienCassou 1/23/2014 09:59'! writeToLogWithFileNamed: filename | oldLogFileName | oldLogFileName := Smalltalk tools debugger logFileName. Smalltalk tools debugger logFileName: filename. [ | stream | stream := Smalltalk image openLog. stream nextPutAll: 'foobar' "We just make sure we can write something. I don't know any reliable way to check if it has really been written" ] ensure: [ Smalltalk tools debugger logFileName: oldLogFileName ]! ! !TraitCompositionTest methodsFor: 'testing-comparing' stamp: 'MartinDias 1/23/2014 15:18'! testSyntacticEqualsWithAlias self assert: ((self t1 @ {#a -> #b}) syntacticallyEquals: (self t1 @ {#a -> #b})). self deny: ((self t1 @ {#a -> #b}) syntacticallyEquals: self t1). self deny: ((self t1 @ {#a -> #b}) syntacticallyEquals: (self t1 @ {#a -> #B})). self deny: ((self t1 @ {#a -> #b}) syntacticallyEquals: (self t1 @ {#A -> #b})). self assert: ((self t1 @ {#a -> #b} @ {#x -> #y}) syntacticallyEquals: (self t1 @ {#a -> #b} @ {#x -> #y})). self deny: ((self t1 @ {#a -> #b} @ {#x -> #y}) syntacticallyEquals: (self t1 @ {#x -> #y} @ {#a -> #b})).! ! !TraitCompositionTest methodsFor: 'testing-comparing' stamp: 'MartinDias 1/23/2014 15:19'! testSyntacticEqualsWithComplexCompositions self assert: ((self t1 + (self t2 - {#a. #b}) + (self t3 @ {#x -> #y})) syntacticallyEquals: (self t1 + (self t2 - {#a. #b}) + (self t3 @ {#x -> #y}))). self deny: ((self t1 + (self t2 - {#a. #b}) + (self t3 @ {#x -> #y})) syntacticallyEquals: (self t1 + (self t2 - {#A. #B}) + (self t3 @ {#X -> #Y}))). self assert: ((self t1 @ {#x -> #y} @ {#z -> #w} - {#a. #b} - {#c} + self t2) syntacticallyEquals: (self t1 @ {#x -> #y} @ {#z -> #w} - {#a. #b} - {#c} + self t2)). self deny: ((self t1 @ {#x -> #y} @ {#z -> #w} - {#a. #b} - {#c} + self t2) syntacticallyEquals: (self t1 @ {#x -> #y} @ {#z -> #w} - {#a. #b} - {#C} + self t2)). ! ! !TraitCompositionTest methodsFor: 'testing-comparing' stamp: 'MartinDias 1/23/2014 15:19'! testSyntacticEqualsWithComposition self assert: ({} asTraitComposition syntacticallyEquals: {} asTraitComposition). self deny: ({} asTraitComposition syntacticallyEquals: self t1 asTraitComposition). self assert: (self t1 asTraitComposition syntacticallyEquals: self t1 asTraitComposition). self deny: (self t1 asTraitComposition syntacticallyEquals: self t2 asTraitComposition). self assert: ((self t1 + self t2) syntacticallyEquals: (self t1 + self t2)). self deny: ((self t1 + self t2) syntacticallyEquals: (self t1 + self t3)). self deny: ((self t1 + self t2) syntacticallyEquals: (self t2 + self t1)). self assert: ((self t1 + self t2 + self t3) syntacticallyEquals: (self t1 + self t2 + self t3)). self deny: ((self t1 + self t2 + self t3) syntacticallyEquals: (self t3 + self t2 + self t1)). ! ! !TraitCompositionTest methodsFor: 'testing-comparing' stamp: 'MartinDias 1/23/2014 15:19'! testSyntacticEqualsWithExclusion self assert: ((self t1 - {#a}) syntacticallyEquals: (self t1 - {#a})). self deny: ((self t1 - {#a}) syntacticallyEquals: (self t1 - {#b})). self deny: ((self t1 - {#a. #b}) syntacticallyEquals: (self t1 - {#b. #a})). self assert: ((self t1 - {#a} - {#b}) syntacticallyEquals: (self t1 - {#a} - {#b})). self deny: ((self t1 - {#a} - {#b}) syntacticallyEquals: (self t1 - {#b} - {#a})). ! ! !TraitAlias methodsFor: 'comparing' stamp: 'MartinDias 1/23/2014 15:15'! syntacticallyEquals: aTraitTransformation "Test syntactic equivalence of this trait transformation with another. The order of aliases is taken into account. For example, A @ { #x -> #y. #z -> #w } ~= A @ { #z -> #w. #x -> #y }." self == aTraitTransformation ifTrue: [ ^ true ]. self species = aTraitTransformation species ifFalse: [ ^ false ]. ^ self aliases = aTraitTransformation aliases! ! !TraitExclusion methodsFor: 'comparing' stamp: 'MartinDias 1/23/2014 15:15'! syntacticallyEquals: aTraitTransformation "Test syntactic equivalence of this trait transformation with another. The order of the exclusions is taken into account. For example, A - { #x. #y } ~= A - { #y. #x }." self == aTraitTransformation ifTrue: [ ^ true ]. self species = aTraitTransformation species ifFalse: [ ^ false ]. ^ self exclusions = aTraitTransformation exclusions! ! !TraitComposition methodsFor: 'comparing' stamp: 'MartinDias 1/23/2014 15:17'! syntacticallyEquals: aTraitComposition "Test syntactic equivalence of this trait composition with another. The order of the transformations is taken into account. For example, A + B ~= B + A." self == aTraitComposition ifTrue: [ ^ true ]. self species = aTraitComposition species ifFalse: [ ^ false ]. self transformations size = aTraitComposition transformations size ifFalse: [ ^ false ]. self transformations with: aTraitComposition transformations do: [ :mine :their | (mine syntacticallyEquals: their) ifFalse: [ ^ false ] ]. ^ true! ! !TraitsResource commentStamp: 'MartinDias 1/22/2014 15:40' prior: 80894795! I define objects to be used for testing traits. Browsr references to myself.! !TraitsResource methodsFor: 'accessing' stamp: 'dvf 8/30/2005 11:47' prior: 53457653! categoryName ^self class category! ! !TraitsResource methodsFor: 'utility' stamp: 'dvf 8/30/2005 11:47' prior: 53457772! createClassNamed: aSymbol superclass: aClass uses: aTraitComposition | class | class := aClass subclass: aSymbol uses: aTraitComposition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryName. self createdClassesAndTraits add: class. ^class! ! !TraitsResource methodsFor: 'utility' stamp: 'dvf 8/30/2005 11:47' prior: 53458379! createTraitNamed: aSymbol uses: aTraitComposition | trait | trait := Trait named: aSymbol uses: aTraitComposition category: self categoryName. self createdClassesAndTraits add: trait. ^trait! ! !TraitsResource methodsFor: 'accessing' stamp: 'dvf 8/30/2005 11:47' prior: 53458158! createdClassesAndTraits createdClassesAndTraits ifNil: [ createdClassesAndTraits := OrderedCollection new]. ^createdClassesAndTraits! ! !TraitsResource methodsFor: 'running' stamp: 'SebastianTleye 7/18/2013 16:32' prior: 45454033! setUp "Please note, that most tests rely on this setup of traits and classes - and that especially the order of the definitions matters." "SetUpCount := SetUpCount + 1." dirty := false. SystemAnnouncer uniqueInstance suspendAllWhile: [self t1: (self createTraitNamed: #T1 uses: { }). self t1 comment: 'I am the trait T1'. self t1 compile: 'm11 ^11' classified: #cat1. self t1 compile: 'm12 ^12' classified: #cat2. self t1 compile: 'm13 ^self m12' classified: #cat3. self t2: (self createTraitNamed: #T2 uses: { }). self t2 compile: 'm21 ^21' classified: #cat1. self t2 compile: 'm22 ^22' classified: #cat2. self t2 classSide compile: 'm2ClassSide: a ^a'. self t3: (self createTraitNamed: #T3 uses: { }). self t3 compile: 'm31 ^31' classified: #cat1. self t3 compile: 'm32 ^32' classified: #cat2. self t3 compile: 'm33 ^33' classified: #cat3. self t4: (self createTraitNamed: #T4 uses: { (self t1). (self t2) }). self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11" self t4 compile: 'm42 ^42' classified: #cat2. self t5: (self createTraitNamed: #T5 uses: self t1 + self t2). self t5 compile: 'm51 ^super foo' classified: #cat1. self t5 compile: 'm52 ^ self class bar' classified: #cat1. self t5 compile: 'm53 ^ self class bar' classified: #cat1. self t6: (self createTraitNamed: #T6 uses: self t1 + (self t2 @ { (#m22Alias -> #m22) })). self t9: (self createTraitNamed: #T9 uses: { }). self t10: (self createTraitNamed: #T10 uses: { }). self t12: (self createTraitNamed: #T12 uses: {}). self t11: (self createTraitNamed: #T11 uses: { self t12}). self c1: (self createClassNamed: #C1 superclass: Object uses: { }). self c1 compile: 'foo ^true' classified: #accessing. self c2: (self createClassNamed: #C2 superclass: self c1 uses: self t5 - { #m11 }). self c2 compile: 'foo ^false' classified: #private. self c2 compile: 'bar ^self foo' classified: #private. self c9: (self createClassNamed: #C9 superclass: Object uses: self t9 ). self c10: (self createClassNamed: #C10 superclass: self c9 uses: self t10 ). self c11: (self createClassNamed: #C11 superclass: self c10 uses: self t11 ). self setUpTrivialRequiresFixture. self setUpTwoLevelRequiresFixture. self setUpTranslatingRequiresFixture].! ! !TraitsResource methodsFor: 'running' stamp: 'noha 6/11/2008 18:41' prior: 53460713! setUpTranslatingRequiresFixture self c6: (self createClassNamed: #C6 superclass: ProtoObject uses: { }). ProtoObject removeSubclass: self c6. self c6 superclass: nil. self c7: (self createClassNamed: #C7 superclass: self c6 uses: { }). self c8: (self createClassNamed: #C8 superclass: self c7 uses: { }). self c6 compile: 'foo ^self x' classified: #accessing. self c7 compile: 'foo ^3' classified: #accessing. self c7 compile: 'bar ^super foo' classified: #accessing. self c8 compile: 'bar ^self blah' classified: #accessing! ! !TraitsResource methodsFor: 'running' stamp: 'noha 6/11/2008 18:42' prior: 53461371! setUpTrivialRequiresFixture self c3: (self createClassNamed: #C3 superclass: ProtoObject uses: { }). ProtoObject removeSubclass: self c3. self c3 superclass: nil. self c3 compile: 'foo ^self bla' classified: #accessing! ! !TraitsResource methodsFor: 'running' stamp: 'noha 6/11/2008 18:42' prior: 53461692! setUpTwoLevelRequiresFixture self c4: (self createClassNamed: #C4 superclass: ProtoObject uses: { }). ProtoObject removeSubclass: self c4. self c4 superclass: nil. self c5: (self createClassNamed: #C5 superclass: self c4 uses: { }). self c4 compile: 'foo ^self blew' classified: #accessing. self c5 compile: 'foo ^self blah' classified: #accessing! ! !TraitsResource methodsFor: 'running' stamp: 'GuillermoPolito 8/2/2012 12:12' prior: 53462167! tearDown self createdClassesAndTraits do: [ :aClassOrTrait | | behaviorName | behaviorName := aClassOrTrait name. Smalltalk globals at: behaviorName ifPresent: [ :classOrTrait | classOrTrait removeFromSystem ]. ChangeSet current removeClassChanges: behaviorName ]. createdClassesAndTraits := self t1: (self t2: (self t3: (self t4: (self t5: (self t6: (self c1: (self c2: (self c3: (self c4: (self c5: (self c6: (self c7: (self c8: nil))))))))))))).! ! !TraitTransformation methodsFor: 'comparing' stamp: 'MartinDias 1/23/2014 15:17'! syntacticallyEquals: aTraitTransformation "Test syntactic equivalence of this trait transformation with another." ^ self subclassResponsibility ! ! !SmalltalkImage methodsFor: 'miscellaneous' stamp: 'DamienCassou 1/27/2014 09:41' prior: 33537936! openLog "This is a _private_ method, Because it really belongs to logging facility, we should delegate to it at some point " ^ (FileStream fileNamed: Smalltalk tools debugger logFileName) ifNil: [ Transcript ] ifNotNil: [ :stream | stream wantsLineEndConversion: true; setToEnd; yourself ]! ! "System-Support"! "Tests"! "Traits"! ----End fileIn----! ----QUIT----2014-01-28T14:57:59.044595+01:00 Pharo.image priorSource: 30551227! ----STARTUP----2014-01-28T14:57:59.292033+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-28T14:58:03.230018+01:00 Pharo.image priorSource: 30575464! ----STARTUP----2014-01-28T15:03:03.319647+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-28T15:03:03.589643+01:00 Pharo-30727.image priorSource: 30575661! ----STARTUP----2014-01-29T14:01:57.650726+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 1/29/2014 13:51' prior: 80883173! commentForCurrentUpdate ^ '12731 Traits modifications cause a DNU https://pharo.fogbugz.com/f/cases/12731 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 1/29/2014 13:52'! script381 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-StephaneDucasse.88.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-SvenVanCaekenberghe.621.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-SvenVanCaekenberghe.298.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1012.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 1/29/2014 13:52'! update30728 "self new update30728" self withUpdateLog: '12731 Traits modifications cause a DNU https://pharo.fogbugz.com/f/cases/12731 '. self loadTogether: self script381 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassModificationPropagation commentStamp: 'MartinDias 1/28/2014 16:22' prior: 42172450! I represent a modification in a class that is produced because of a change in one of its superclasses. This is called a propagation.! !AbstractClassInstaller methodsFor: 'initialization' stamp: 'MartinDias 1/28/2014 15:13' prior: 48885140! initialize builder := SlotClassBuilder new. builder installer: self! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 1/28/2014 16:22'! isPropagation ^ false! ! !SlotClassBuilder commentStamp: '' prior: 43487370! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Example: see PharoClassInstaller! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 1/28/2014 15:10' prior: 43488565! applyAndUpdateFormat: classModification ^ self track: classModification during: [ :old :new | installer formatChangedFrom: old to: new by: classModification ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 1/28/2014 15:10' prior: 43488804! applyAndUpdateSlots: classModification ^ self track: classModification during: [ :old :new | installer slotsChangedFrom: old to: new by: classModification ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 1/28/2014 15:10' prior: 43489041! applyAndUpdateSuperclass: classModification ^ self track: classModification during: [ :old :new | installer superclassChangedFrom: old to: new by: classModification ]! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 1/28/2014 15:10' prior: 80355213! build | oldClass metaChange classChange | result := oldClass := installer classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: FixedLayout slots: classSlots traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: self layoutClass slots: slots traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ installer recategorize: result to: category ]. ^ result instanceSide! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 1/28/2014 15:10' prior: 80356224! buildNewClass | metaclass newClass | metaclass := Metaclass new. metaclass superclass: self superMetaclass withLayoutType: FixedLayout slots: classSlots. newClass := metaclass new. newClass setName: name. newClass superclass: superclass withLayoutType: self layoutClass slots: slots. newClass declare: sharedVariablesString. newClass sharing: sharedPoolsString. installer classAdded: newClass inCategory: category. installer installTraitComposition: traitComposition on: newClass. installer installTraitComposition: classTraitComposition on: metaclass. ^ newClass! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 1/28/2014 18:43' prior: 41813393! client: anInstaller "deprecated" installer := anInstaller! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 1/28/2014 15:10' prior: 41813512! environment ^ installer environment! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 1/28/2014 15:10' prior: 41813629! environment: globals installer environment: globals! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 1/28/2014 15:10' prior: 43492144! installTraitComposition: classModification installer installTraitComposition: classModification traitComposition on: classModification target. ! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'MartinDias 1/28/2014 15:14'! installer: anInstaller installer := anInstaller! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 1/28/2014 15:10' prior: 43492370! migrateClasses: classModification. installer migrateClasses: oldClasses asArray to: newClasses asArray using: classModification instanceModification.! ! !MCPackageManager class methodsFor: 'system changes' stamp: 'MartinDias 1/28/2014 16:16' prior: 80742471! classModified: anEvent self managersForClass: anEvent classAffected do:[ :mgr | mgr modified: true ].! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 1/28/2014 16:23'! basicClassDefinitionChangedFrom: oldClass to: newClass using: classModification " Copy over the trait composition " self copyTraitCompositionFrom: oldClass to: newClass. " Copy over the method organization " newClass organization: oldClass organization. " Update the superclass links " oldClass superclass == newClass superclass ifFalse: [ oldClass superclass removeSubclass: oldClass. newClass superclass addSubclass: newClass ]. " Announce if necessary " classModification isPropagation ifFalse: [ self systemAnnouncer classDefinitionChangedFrom: oldClass to: newClass ].! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 1/28/2014 16:13' prior: 79192158! classDefinitionChangedFrom: oldClass to: newClass by: classModification self copyMethodsFrom: oldClass to: newClass using: classModification; basicClassDefinitionChangedFrom: oldClass to: newClass using: classModification; fixClassBindings: newClass ! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 1/28/2014 16:13' prior: 43483856! shallowClassDefinitionChangedFrom: oldClass to: newClass by: classModification " Copy over the method organization " " Update the superclass links " self shallowCopyMethodsFrom: oldClass to: newClass using: classModification; basicClassDefinitionChangedFrom: oldClass to: newClass using: classModification! ! !PharoClassInstaller methodsFor: 'notifications' stamp: 'MartinDias 1/28/2014 15:18' prior: 43484233! slotsChangedFrom: oldClass to: newClass by: classModification self classDefinitionChangedFrom: oldClass to: newClass by: classModification! ! !AbstractClassModification methodsFor: 'testing' stamp: 'MartinDias 1/28/2014 16:17'! isPropagation ^ self subclassResponsibility ! ! !ClassModificationPropagation commentStamp: 'MartinDias 1/28/2014 16:22' prior: 80919223! I represent a modification in a class that is produced because of a change in one of its superclasses. This is called a propagation.! !ClassModificationPropagation methodsFor: 'testing' stamp: 'MartinDias 1/28/2014 16:22'! isPropagation ^true! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 1/17/2014 18:14'! collectedAnnouncementClasses ^ collectedAnnouncements collect: #class! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 1/17/2014 18:15'! collectedAnnouncements ^ collectedAnnouncements! ! !SlotAnnouncementsTest methodsFor: 'running' stamp: 'MartinDias 1/17/2014 18:14' prior: 48502141! setUp super setUp. collectedAnnouncements := OrderedCollection new.! ! !SlotAnnouncementsTest methodsFor: 'helpers' stamp: 'MartinDias 1/17/2014 18:14'! subscribeOn: anAnnouncement SystemAnnouncer uniqueInstance weak on: anAnnouncement send: #add: to: collectedAnnouncements! ! !SlotAnnouncementsTest methodsFor: 'running' stamp: 'MartinDias 1/17/2014 18:14'! tearDown super tearDown. SystemAnnouncer uniqueInstance unsubscribe: collectedAnnouncements.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 1/28/2014 14:28'! testChangeInSuperclassShouldNotAnnounceSubclassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class and a subclass" aClass := self make: [ :builder | builder name: self aClassName; slots: #() ]. anotherClass := self make: [ :builder | builder name: self anotherClassName; superclass: aClass ]. self assert: self collectedAnnouncements size equals: 0. "Modify the superclass" aClass := self make: [ :builder | builder name: self aClassName; slots: #(a b c) ]. self assert: self collectedAnnouncements size equals: 1. self assert: self collectedAnnouncements first newClassDefinition equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 1/17/2014 18:28'! testClassCreationShouldAnnounceClassAdded self subscribeOn: ClassAdded. "Create a class" aClass := self makeWithLayout: FixedLayout. self assert: self collectedAnnouncements size equals: 1. self assert: self collectedAnnouncements first classAdded equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 1/17/2014 18:29'! testClassRecategorizationShouldAnnounceClassModified self subscribeOn: ClassRecategorized. aClass := self make: [ :builder| builder category: self aCategory ]. anotherClass := self make: [ :builder| builder category: self anotherCategory ]. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: announcement oldCategory equals: self aCategory. self assert: announcement newCategory equals: self anotherCategory. self assert: announcement classRecategorized == anotherClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 1/17/2014 18:32'! testLayoutChangeShouldAnnounceClassModified | classAdded classModified | self subscribeOn: ClassModifiedClassDefinition. "Create a class" classAdded := self makeWithLayout: FixedLayout. "Modify its format" classModified := self makeWithLayout: WeakLayout. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition format equals: classAdded format. self assert: announcement newClassDefinition format equals: classModified format.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 1/17/2014 18:29'! testSlotAdditionShouldAnnounceClassModified | classAdded classModified | self subscribeOn: ClassModifiedClassDefinition. "Create a class" classAdded := self makeWithLayout: FixedLayout. "now we extend it with slots. The class definition should've changed" classModified := self makeWithLayout: FixedLayout andSlots: { #aSlot }. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: announcement newClassDefinition equals: classModified. self assert: announcement oldClassDefinition allInstVarNames equals: classAdded allInstVarNames.! ! SlotAnnouncementsTest removeSelector: #testClassRecategorizedAnnounced! SlotAnnouncementsTest removeSelector: #testClassModifiedAnnouncedOnlyOnce! SlotAnnouncementsTest removeSelector: #testClassModifiedAnnounced! SlotAnnouncementsTest removeSelector: #testClassFormatChangedAnnounced! SlotAnnouncementsTest removeSelector: #testClassAddedAnnouncedOnlyOnce! SlotAnnouncementsTest removeSelector: #testClassAddedAnnounced! SlotAnnouncementsTest removeSelector: #saveAnnouncementOnce:! SlotAnnouncementsTest removeSelector: #saveAnnouncement:! SlotAnnouncementsTest removeSelector: #countAnnouncements:! SlotAnnouncementsTest removeSelector: #assertOnlyOneAnnouncementOf:within:! ClassModifiedClassDefinition removeSelector: #isPropagation! PharoClassInstaller removeSelector: #basicClassDefinitionChangedFrom:to:! ClassAnnouncement removeSelector: #isPropagation! !SlotClassBuilder commentStamp: '' prior: 80919704! I'm responsible for building and verifying new classes. The update and modification/installation of classes are managed by installers (AbstractClassInstallation). The class builder is responsible for the structural part of modifying a class or creating a new class. It relies on the installer to fetch the old version of the class. It then uses the class modification model to compute the method modification and instance modification models. It then validates if these changes are semantically sound. Example: see PharoClassInstaller! "Monticello"! "Slot"! "SlotTests"! "System-Announcements"! ----End fileIn----! ----QUIT----2014-01-29T14:02:01.376734+01:00 Pharo.image priorSource: 30575858! ----STARTUP----2014-01-29T14:02:01.550285+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-29T14:02:05.486273+01:00 Pharo.image priorSource: 30600158! ----STARTUP----2014-01-29T14:06:56.747222+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-29T14:06:57.019219+01:00 Pharo-30728.image priorSource: 30600355! ----STARTUP----2014-01-30T09:05:58.593877+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/30/2014 09:03' prior: 80907808! commentForCurrentUpdate ^ '12746 DoesNotUnderstandCatcher cleanup https://pharo.fogbugz.com/f/cases/12746 12740 testClassDescriptionRespectsPolymorphismWithTraitDescription failing https://pharo.fogbugz.com/f/cases/12740 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/30/2014 09:03'! script382 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-SvenVanCaekenberghe.298.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.64.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.125.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1012.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/30/2014 09:03'! update30729 "self new update30729" self withUpdateLog: '12746 DoesNotUnderstandCatcher cleanup https://pharo.fogbugz.com/f/cases/12746 12740 testClassDescriptionRespectsPolymorphismWithTraitDescription failing https://pharo.fogbugz.com/f/cases/12740 '. self loadTogether: self script382 merge: false. UserManager instVarNamed: 'default' put: nil. UserManager initialize. self flushCaches. ! ! "ScriptLoader30"! !DoesNotUnderstandCatcher commentStamp: 'TorstenBergmann 1/30/2014 08:53' prior: 0! Utility class to catch messages! !ClassDescriptionTest methodsFor: 'tests' stamp: 'MarcusDenker 1/29/2014 16:23' prior: 78391789! testClassDescriptionRespectsPolymorphismWithTraitDescription | repeatedMethodsThatDoNotAccessInstanceVariables differentMethodsWithSameSelector | "If the method is in ClassDescription and TraitDescription it must access some instance variable, otherwise the method can be implemented in TClassDescription" repeatedMethodsThatDoNotAccessInstanceVariables := self repeatedMethodsThatDoNotAccessInstanceVariablesBetween: ClassDescription and: TraitDescription. self assert: repeatedMethodsThatDoNotAccessInstanceVariables size = 0. "If the method is in ClassDescription and TraitDescription, and they have different implementations, it must be declared in TClassDescription as an explicitRequirement method" differentMethodsWithSameSelector := self differentMethodsWithSameSelectorBetween: ClassDescription and: TraitDescription. differentMethodsWithSameSelector do: [ :selector | (TClassDescription >> selector) sourceCode. self assert: (TClassDescription >> selector) isRequired ]. "Only a few methods are allowed to belong to one class and not to the other If you want to remove methods for this list, then go ahead. But is NOT good idea add methods to this list #superclass:layout, #initializeLayoutWithSlots: abd #layoutSized -> the access instance variables that are in ClassDescription but not in TraitDescription #layout is the getter of the instance variable layout (which is in ClassDescription but not in TraitDescription) #baseClass and #classClass have their equivalens in TraitDescription (baseTrait classTrait )" self assertCollection: (ClassDescription localSelectors difference: TraitDescription localSelectors) equals: #(#superclass:layout: #baseClass #superclass:withLayoutType:slots: #classClass #initializeLayoutWithSlots: #layoutSized: ) asSet. "#isClassTrait, #baseTrait, #isBaseTrait and #classTrait have their equivalents in ClassDescription but with different name, the problem comes from the name of the selector, they are not good names #copyTraitExpresion and #addExclusionOf: have no equivalent in classes" self assertCollection: (TraitDescription localSelectors difference: ClassDescription localSelectors) equals: #(#isClassTrait #addExclusionOf: #copyTraitExpression #baseTrait #- #isBaseTrait #classTrait syntacticallyEquals:) asSet! ! !DoesNotUnderstandCatcher commentStamp: 'TorstenBergmann 1/30/2014 08:53' prior: 80944196! Utility class to catch messages! !DoesNotUnderstandCatcher methodsFor: 'reflective operations' stamp: 'ClementBera 12/3/2012 14:16' prior: 35507395! doesNotUnderstand: aMessage "returns the message caught" ^aMessage! ! "AST-Interpreter-Test"! "KernelTests"! ----End fileIn----! ----QUIT----2014-01-30T09:06:01.473895+01:00 Pharo.image priorSource: 30600552! ----STARTUP----2014-01-30T09:06:01.643618+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-30T09:06:05.445622+01:00 Pharo.image priorSource: 30615381! ----STARTUP----2014-01-30T09:11:10.851646+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-30T09:11:11.153619+01:00 Pharo-30729.image priorSource: 30615578! ----STARTUP----2014-01-30T10:53:42.811851+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/30/2014 10:43' prior: 80932498! commentForCurrentUpdate ^ '12745 Spec update https://pharo.fogbugz.com/f/cases/12745 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/30/2014 10:43'! script383 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.460.mcz OpalCompiler-Tests-MarcusDenker.227.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1012.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-SvenVanCaekenberghe.1396.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/30/2014 10:44'! update30730 "self new update30730" self withUpdateLog: '12745 Spec update https://pharo.fogbugz.com/f/cases/12745 '. self loadTogether: self script383 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractWidgetModel commentStamp: '' prior: 69415679! AbstractBasicWidget is an abstract class for basic widgets! !ProtocolBrowser commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 0! I am a complete UI used to view the protocol methods (via a ProtocolViewer) as well as their source code. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolList class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/27/2014 16:33' prior: 80620044! defaultSpec ^ SpecLayout composed newColumn: [ :column | column add: #label height: self toolbarHeight; add: #protocols ]; yourself! ! !MorphicAdapterBindings methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 1/27/2014 09:56' prior: 80062610! initializeBindings bindings at: #ButtonAdapter put: #MorphicButtonAdapter; at: #CheckBoxAdapter put: #MorphicCheckBoxAdapter; at: #ContainerAdapter put: #MorphicContainerAdapter; at: #DiffAdapter put: #MorphicDiffAdapter; at: #DropListAdapter put: #MorphicDropListAdapter; at: #LabelAdapter put: #MorphicLabelAdapter; at: #ListAdapter put: #MorphicListAdapter; at: #IconListAdapter put: #MorphicIconListAdapter; at: #ImageAdapter put: #MorphicImageAdapter; at: #MultiColumnListAdapter put: #MorphicMultiColumnListAdapter; at: #MenuAdapter put: #MorphicMenuAdapter; at: #MenuGroupAdapter put: #MorphicMenuGroupAdapter; at: #MenuItemAdapter put: #MorphicMenuItemAdapter; at: #NewListAdapter put: #MorphicNewListAdapter; at: #RadioButtonAdapter put: #MorphicRadioButtonAdapter; at: #SliderAdapter put: #MorphicSliderAdapter; at: #TabManagerAdapter put: #MorphicTabManagerAdapter; at: #TabAdapter put: #MorphicTabAdapter; at: #TextAdapter put: #MorphicTextAdapter; at: #TextInputFieldAdapter put: #MorphicTextInputFieldAdapter; at: #TreeAdapter put: #MorphicTreeAdapter; at: #TreeColumnAdapter put: #MorphicTreeColumnAdapter; at: #TreeNodeAdapter put: #MorphicTreeNodeAdapter; at: #WindowAdapter put: #MorphicWindowAdapter; at: #DialogWindowAdapter put: #MorphicDialogWindowAdapter; yourself! ! !AbstractWidgetModel commentStamp: '' prior: 80959081! AbstractBasicWidget is an abstract class for basic widgets! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2014 17:56' prior: 69417565! color ^ color value! ! !AbstractWidgetModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/24/2014 17:56' prior: 69417733! color: aColor ^ color value: aColor! ! !AbstractWidgetModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 17:58'! defaultColor ^ Color white! ! !AbstractWidgetModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 17:58' prior: 80636612! initialize super initialize. helpHolder := nil asReactiveVariable. borderWidth := 0 asReactiveVariable. borderColor := Color transparent asReactiveVariable. enabledHolder := true asReactiveVariable. dragEnabled := false asReactiveVariable. dropEnabled := false asReactiveVariable. dragTransformationBlock := [ :item :source | item ] asReactiveVariable. wantDropBlock := [ :draggedItem :event :source | self dropEnabled ] asReactiveVariable. acceptDropBlock := [ :draggedItem :event :source | ] asReactiveVariable. transferBlock := [:passenger :source | super transferFor: passenger from: source ] asReactiveVariable. color := self defaultColor asReactiveVariable. helpHolder whenChangedDo: [:string | self widget ifNotNil: [:w | w update: #setBalloonText: with: { string } ] ]. borderWidth whenChangedDo: [:int | self widget ifNotNil: [:w | w update: #borderWidth: with: { int } ] ]. borderColor whenChangedDo: [:newColor | self widget ifNotNil: [:w | w update: #borderColor: with: { newColor } ] ]. color whenChangedDo: [:newColor | self widget ifNotNil: [:w | w update: #color: with: { newColor } ] ]. enabledHolder whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #enabled: with: { b } ] ]. dragEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dragEnabled: with: { b } ] ]. dropEnabled whenChangedDo: [:b | self widget ifNotNil: [:w | w update: #dropEnabled: with: { b } ] ].! ! !ProtocolBrowser commentStamp: 'BenjaminVanRyseghem 1/21/2014 16:36' prior: 80959220! I am a complete UI used to view the protocol methods (via a ProtocolViewer) as well as their source code. I am used to expose the construction of a spec UI in the Spec documentation.! !ProtocolBrowser class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/21/2014 15:57'! defaultSpec ^ SpecLayout composed newColumn: [ :col | col newRow: [ :r | r add: #(viewer models); newColumn: [ :c | c add: #(viewer protocols); add: #(viewer events) ] ]; add: #text ]; yourself! ! !ProtocolBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/21/2014 16:27'! initialExtent ^ 750@600! ! !ProtocolBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/27/2014 11:48'! initializePresenter viewer whenClassChanged: [ :class | text behavior: class ]. viewer whenProtocolChangedDo: [ :item | item ifNil: [ text text: '' ] ifNotNil: [ text text: item sourceCode ] ]. viewer whenEventChangedDo: [ :item | item ifNil: [ text text: '' ] ifNotNil: [ text text: item sourceCode ] ]! ! !ProtocolBrowser methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/21/2014 16:30'! initializeWidgets text := self newText. viewer := self instantiate: ProtocolViewer. text aboutToStyle: true. self focusOrder add: viewer; add: text! ! !ProtocolBrowser methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:48'! text ^ text! ! !ProtocolBrowser methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/27/2014 17:24'! title ^ 'Protocols browser'! ! !ProtocolBrowser methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 1/21/2014 15:48'! viewer ^ viewer! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/23/2014 16:12' prior: 69634502! color ^ self model color! ! !AbstractMorphicAdapter methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 1/23/2014 16:12' prior: 74087756! color: color self widgetDo: [ :w | w color: color ]! ! !PluggableMenuSpec methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 1/29/2014 16:46' prior: 78261071! addToMenuModel: aMenuModel | groups tmp | groups := OrderedCollection new. aMenuModel title: self label. tmp := OrderedCollection new. self items do: [ :each | tmp add: each. each separator ifTrue: [ groups add: tmp copy. tmp removeAll ] ]. tmp ifNotEmpty: [ groups add: tmp copy ]. groups do: [ :each | aMenuModel addGroup: [ :group | each do: [ :spec | group addItem: [ :item | item fromSpec: spec ] ] ] ]! ! !NewValueHolder methodsFor: '*Spec-Extensions' stamp: 'BenjaminVanRyseghem 1/29/2014 17:20' prior: 80874500! rawValue: aValue value := aValue! ! !MorphicLabelAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/23/2014 16:19' prior: 69647614! defaultSpec ^ {#LabelMorph. #color:. #(model color). #model:. #model. #getEnabledSelector:. #enabled. #getTextSelector:. #getText. #vResizing:. #shrinkWrap. #hResizing:. #spaceFill. #borderWidth:. #(model borderWidth). #borderColor:. #(model borderColor). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #setBalloonText:. { #model . #help}}! ! !WorldModel class methodsFor: 'private' stamp: 'BenjaminVanRyseghem 1/23/2014 16:26' prior: 69554173! setUpWorld World changeProportionalLayout. World submorphs do: [:e | e delete ]. (Smalltalk at: #PolymorphSystemSettings) perform: #desktopColor: with: (Color r: 0.745 g: 0.745 b: 0.745). ((Smalltalk at: #UITheme) perform: #currentSettings) perform: #windowColor: with: (Color r: 0.745 g: 0.745 b: 0.745). (Smalltalk at: #TaskbarMorph) perform: #showTaskbar: with: false! ! !LabelModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/24/2014 17:58'! defaultColor ^ Color black! ! !ProtocolViewer class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 1/27/2014 16:33' prior: 80621851! defaultSpec ^ SpecLayout composed newColumn: [ :column | column add: #models; add: #protocols; add: #events ]; yourself! ! !ProtocolViewer methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/27/2014 11:48' prior: 80622189! initializePresenter models whenSelectedItemChanged: [ :class | protocols resetSelection. events resetSelection. class ifNil: [ protocols items: #(). events items: #() ] ifNotNil: [ protocols items: (self methodsIn: class for: 'protocol'). events items: (self methodsIn: class for: 'protocol-events') ] ]. protocols whenSelectedItemChanged: [ :method | method ifNotNil: [ self resetEventSelection ] ]. events whenSelectedItemChanged: [ :method | method ifNotNil: [ self resetProtocolSelection ] ].! ! ProtocolEditor removeSelector: #viewer! ProtocolEditor removeSelector: #title! ProtocolEditor removeSelector: #text! ProtocolEditor removeSelector: #initializeWidgets! ProtocolEditor removeSelector: #initializePresenter! ProtocolEditor removeSelector: #initialExtent! ProtocolEditor class removeSelector: #defaultSpec! Smalltalk globals removeClassNamed: #ProtocolEditor! "Spec-Core"! "Spec-Examples"! "Spec-Extensions"! "Spec-MorphicAdapters"! ----End fileIn----! ----QUIT----2014-01-30T10:53:47.36062+01:00 Pharo.image priorSource: 30615775! ----STARTUP----2014-01-30T10:53:47.548437+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-30T10:53:51.566438+01:00 Pharo.image priorSource: 30636976! ----STARTUP----2014-01-30T10:58:35.863446+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-30T10:58:36.16144+01:00 Pharo-30730.image priorSource: 30637172! ----STARTUP----2014-01-30T16:34:43.520932+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/30/2014 16:31' prior: 80947721! commentForCurrentUpdate ^ '12732 #sourceNode broken https://pharo.fogbugz.com/f/cases/12732 12751 Improve #cleanUpForProduction https://pharo.fogbugz.com/f/cases/12751 12750 Uppercase/lowercase different in config browser menu vs. buttons https://pharo.fogbugz.com/f/cases/12750 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/30/2014 16:31'! script384 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.671.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1012.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.25.mcz Text-Edition-MarcusDenker.27.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-EstebanLorenzano.2.mcz Tools-MarcusDenker.1398.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/30/2014 16:31'! update30731 "self new update30731" self withUpdateLog: '12732 #sourceNode broken https://pharo.fogbugz.com/f/cases/12732 12751 Improve #cleanUpForProduction https://pharo.fogbugz.com/f/cases/12751 12750 Uppercase/lowercase different in config browser menu vs. buttons https://pharo.fogbugz.com/f/cases/12750 '. self loadTogether: self script384 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MetacelloConfigurationBrowserPane methodsFor: 'menu' stamp: 'TorstenBergmann 1/30/2014 09:28' prior: 77082763! configurationListMenu: aMenu aMenu target: self. aMenu title: 'Configuration'. self selectedConfiguration ifNotNil: [ aMenu add: 'Install Stable Version' action: #installConfiguration. self selectedConfigurationClass isNil ifTrue: [ aMenu add: 'Load Configuration' action: #loadConfiguration ] ifFalse: [ aMenu add: 'Browse Configuration Class' action: #browseConfiguration ]. aMenu addLine ]. aMenu add: 'Switch Repository' action: #switchRepository; add: 'Refresh' action: #refreshRepository. ^aMenu! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 1/28/2014 14:37'! deadContext ^ thisContext! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 1/28/2014 14:13' prior: 36051024! testBlockSourceNode | sourceNode | sourceNode := [ 1 + 2 ] sourceNode. self assert: sourceNode equals: (RBParser parseExpression: '[ 1 + 2 ]'). ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 1/28/2014 14:12'! testBlockWithEnclosedBlockSourceNode | sourceNode | sourceNode := [ [ ] ] sourceNode. self assert: sourceNode equals: (RBParser parseExpression: '[ [ ] ]'). ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 1/28/2014 14:14'! testBlockWithTempsSourceNode | sourceNode | sourceNode := [ | t1 t2 | ] sourceNode. self assert: sourceNode equals: (RBParser parseExpression: '[ | t1 t2 | ]'). ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 1/28/2014 14:37'! testDeadContextSourceNode | deadContext | deadContext := self deadContext. self assert: deadContext isDead. self assert: deadContext sourceNode equals: (self class>>#deadContext) ast ! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 1/28/2014 13:54' prior: 36053790! sourceNode ^ self isBlockContext ifTrue: [ closureOrNil sourceNode ] ifFalse: [ self method sourceNode ]! ! !BlockClosure methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 1/28/2014 13:28' prior: 35545402! sourceNode ^ self method sourceNodeForPC: startpc - 1! ! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 1/30/2014 15:29' prior: 69199779! cleanUpForProduction "self new cleanUpForProduction" "trim MC ancestory information" MCVersionInfo allInstances do: [ :each | each instVarNamed: 'ancestors' put: nil ]. "delete logo" PolymorphSystemSettings showDesktopLogo: false. self packagesForCleanUpInProduction do: [ :each | (MCPackage named: each) unload ]. self helpPackages do: [ :each | (MCPackage named: each) unload ]. self testPackages do: [ :each | (MCPackage named: each) unload ]. (MCPackage named: 'HudsonBuildTools20') unload. (MCPackage named: 'Deprecated30') unload. (MCPackage named: 'ScriptLoader30') unload. World resetWorldMenu. self cleanUpForRelease. ! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/30/2014 15:28'! helpPackages ^RPackageOrganizer default packageNames select: [ :each | each endsWith: '-Help' ]! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/30/2014 15:29' prior: 23534009! packagesForCleanUpInProduction "A list of packages who will be unloaded when going to production. WARNING, ORDER IS IMPORTANT" ^#( "Manifest & Critics Browser" 'Manifest-Core' 'Manifest-CriticBrowser' 'Manifest-Tests' 'Manifest-Resources-Tests' "Metacello" 'Metacello-ToolBox' 'Metacello-MC' 'Metacello-Platform' 'Metacello-Core' 'Metacello-Base' "CI" 'CI-Core-SliceSubmitter' 'CI-Loader' 'CI-Core' ) ! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/30/2014 15:28'! testPackages ^RPackageOrganizer default packageNames select: [ :each | each endsWith: 'Tests' ]! ! ImageCleaner removeSelector: #classesForCleanUpInProduction! "OpalCompiler-Core"! "OpalCompiler-Tests"! "Tools"! ----End fileIn----! ----QUIT----2014-01-30T16:34:48.247656+01:00 Pharo.image priorSource: 30637369! ----STARTUP----2014-01-30T16:34:48.429097+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-30T16:34:52.329095+01:00 Pharo.image priorSource: 30653318! ----STARTUP----2014-01-30T16:39:40.570967+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-30T16:39:40.832964+01:00 Pharo-30731.image priorSource: 30653515! ----STARTUP----2014-01-31T13:09:38.948737+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/31/2014 13:06' prior: 80969314! commentForCurrentUpdate ^ '12757 #cleanUpForProduction should not unload Deprecated and Jenkins https://pharo.fogbugz.com/f/cases/12757 12755 Licensestring still shows 2013 instead of current year https://pharo.fogbugz.com/f/cases/12755 12734 Nautilus accept changes shows prompt for cancel dialog https://pharo.fogbugz.com/f/cases/12734 12764 Class comments missing in Text package https://pharo.fogbugz.com/f/cases/12764 12752 Non-Empty list of pooldictionaries is still cut from the class description in Nautilus https://pharo.fogbugz.com/f/cases/12752 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/31/2014 13:06'! script385 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-StephaneDucasse.6.mcz AsmJit-Extension-StephaneDucasse.6.mcz AsmJit-Instructions-StephaneDucasse.9.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-StephaneDucasse.29.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-SvenVanCaekenberghe.112.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.549.mcz CompilerTests-MarcusDenker.181.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.4.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.674.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-SvenVanCaekenberghe.183.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1014.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1400.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/31/2014 13:06'! update30732 "self new update30732" self withUpdateLog: '12757 #cleanUpForProduction should not unload Deprecated and Jenkins https://pharo.fogbugz.com/f/cases/12757 12755 Licensestring still shows 2013 instead of current year https://pharo.fogbugz.com/f/cases/12755 12734 Nautilus accept changes shows prompt for cancel dialog https://pharo.fogbugz.com/f/cases/12734 12764 Class comments missing in Text package https://pharo.fogbugz.com/f/cases/12764 12752 Non-Empty list of pooldictionaries is still cut from the class description in Nautilus https://pharo.fogbugz.com/f/cases/12752 '. self loadTogether: self script385 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TextAlignmentTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 0! SUnit tests for class TextAlignment! !TextEmphasisTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 0! SUnit tests for TextEmphasis! !TextFontChangeTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 0! SUnit tests for class TextFontChange! !TextFontReferenceTest commentStamp: 'TorstenBergmann 1/31/2014 12:24' prior: 0! SUnit tests for TextFontReference! !TextKernTest commentStamp: 'TorstenBergmann 1/31/2014 12:25' prior: 0! SUnit tests for class TextKern! !EditorFindReplaceDialogWindow commentStamp: 'TorstenBergmann 1/31/2014 12:21' prior: 0! A find/replace dialog window for editors! !FindReplaceService commentStamp: 'TorstenBergmann 1/31/2014 12:21' prior: 0! Model for a find and replace service in editors! !RunArrayTest commentStamp: 'TorstenBergmann 1/31/2014 12:22' prior: 0! SUnit tests for class RunArray! !TextAction commentStamp: 'TorstenBergmann 1/31/2014 12:15' prior: 0! A sepcific text attribute to run actions on a text! !TextDoIt commentStamp: 'TorstenBergmann 1/31/2014 12:16' prior: 0! A doIt action on a text. When the text is clicked the text is seen as source code and evaluated! !TextPrintIt commentStamp: 'TorstenBergmann 1/31/2014 12:16' prior: 0! A "Print It" action on a text. When the text is clicked the text is seen as source code and evaluated. After that the result is printed! !TextLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 0! A link in text referring to class and methods. ! !TextClassLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 0! An active link in a text linking to a class! !TextMethodLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 0! An active link in a text linking to a method! !TextVariableLink commentStamp: 'TorstenBergmann 1/31/2014 12:19' prior: 0! An active link in a text linking to a variable! !TextConstants commentStamp: 'TorstenBergmann 1/31/2014 12:19' prior: 0! A pool for Text constants for space, tab, espace, ...! !PackageTreeNautilusUI methodsFor: 'accessing' stamp: 'NicolaiHess 1/28/2014 15:27' prior: 74348211! selected: aNode | selections | selections := aNode selectedNodes collect: [ :each |each asNautilusSelection]. "leave if selection contains no node that isn't already selected" (selections contains:[:each | (self isSelectedPackage:each) not]) ifFalse:[^ self]. self clearPackageSelections. self resetShowHierarchy. selections do:[: each | self selectedPackageWithoutChangingSelection: each]. self changed: #selected. self changed: #currentHistoryIndex. ! ! !Class methodsFor: '*Nautilus' stamp: 'johanfabry 1/30/2014 15:34' prior: 80493388! definitionForNautilus "Answer a String that defines the receiver." | aStream poolString| poolString := self sharedPoolsString. aStream := (String new: 800) writeStream. superclass ifNil: [aStream nextPutAll: 'ProtoObject'] ifNotNil: [aStream nextPutAll: superclass name]. aStream nextPutAll: self kindOfSubclass; store: self name. (self hasTraitComposition) ifTrue: [ aStream cr; tab; nextPutAll: 'uses: '; nextPutAll: self traitCompositionString]. aStream cr; tab; nextPutAll: 'instanceVariableNames: '; store: self instanceVariablesString. aStream cr; tab; nextPutAll: 'classVariableNames: '; store: self classVariablesString. poolString = '' ifFalse: [ aStream cr; tab; nextPutAll: 'poolDictionaries: '; store: poolString]. aStream cr; tab; nextPutAll: 'category: '; store: self category asString. superclass ifNil: [ aStream nextPutAll: '.'; cr. aStream nextPutAll: self name. aStream space; nextPutAll: 'superclass: nil'. ]. ^ aStream contents! ! !TextAlignmentTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 80997968! SUnit tests for class TextAlignment! !TextEmphasisTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 80998081! SUnit tests for TextEmphasis! !TextFontChangeTest commentStamp: 'TorstenBergmann 1/31/2014 12:23' prior: 80998189! SUnit tests for class TextFontChange! !TextFontReferenceTest commentStamp: 'TorstenBergmann 1/31/2014 12:24' prior: 80998308! SUnit tests for TextFontReference! !TextKernTest commentStamp: 'TorstenBergmann 1/31/2014 12:25' prior: 80998415! SUnit tests for class TextKern! !EditorFindReplaceDialogWindow commentStamp: 'TorstenBergmann 1/31/2014 12:21' prior: 80998536! A find/replace dialog window for editors! !FindReplaceService commentStamp: 'TorstenBergmann 1/31/2014 12:21' prior: 80998656! Model for a find and replace service in editors! !RunArrayTest commentStamp: 'TorstenBergmann 1/31/2014 12:22' prior: 80998777! SUnit tests for class RunArray! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 1/31/2014 10:48' prior: 80983296! cleanUpForProduction "self new cleanUpForProduction" "trim MC ancestory information" MCVersionInfo allInstances do: [ :each | each instVarNamed: 'ancestors' put: nil ]. "delete logo" PolymorphSystemSettings showDesktopLogo: false. self packagesForCleanUpInProduction do: [ :each | (MCPackage named: each) unload ]. self helpPackages do: [ :each | (MCPackage named: each) unload ]. self testPackages do: [ :each | (MCPackage named: each) unload ]. (MCPackage named: 'ScriptLoader30') unload. self cleanUpForRelease. ! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'TorstenBergmann 1/31/2014 09:20' prior: 71802475! licenseString ^ self licenseStringTemplate format: (Array with: Date today year asString)! ! !SmalltalkImage methodsFor: 'sources, change log' stamp: 'TorstenBergmann 1/31/2014 09:18'! licenseStringTemplate ^ 'LICENSE Licensed under the MIT License with parts under the Apache License. Copyright (c) 2008-{1} The Pharo Project, and Contributors Copyright (c) 2008-{1} Inria Copyright (c) 1996-2008 Viewpoints Research Institute, and Contributors Copyright (c) 1996 Apple Computer, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0 Pharo uses icons by Mark James (http://www.famfamfam.com) under Creative Commons Attribution 2.5 License. Pharo uses icons by Eclipse under Eclipse Public License - v 1.0 http://www.eclipse.org/legal/epl-v10.html Pharo uses Source Code Pro Fonts by Adobe under SIL Open Font License, v 1.1 http://scripts.sil.org/OFL Pharo uses Open Sans by Steve Matteson under Apache License, 2.0 http://www.apache.org/licenses/LICENSE-2.0.html '! ! !TextAction commentStamp: 'TorstenBergmann 1/31/2014 12:15' prior: 80998879! A sepcific text attribute to run actions on a text! !TextDoIt commentStamp: 'TorstenBergmann 1/31/2014 12:16' prior: 80998999! A doIt action on a text. When the text is clicked the text is seen as source code and evaluated! !TextPrintIt commentStamp: 'TorstenBergmann 1/31/2014 12:16' prior: 80999167! A "Print It" action on a text. When the text is clicked the text is seen as source code and evaluated. After that the result is printed! !TextLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 80999372! A link in text referring to class and methods. ! !TextClassLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 80999494! An active link in a text linking to a class! !TextMethodLink commentStamp: 'TorstenBergmann 1/31/2014 12:18' prior: 80999613! An active link in a text linking to a method! !TextVariableLink commentStamp: 'TorstenBergmann 1/31/2014 12:19' prior: 80999735! An active link in a text linking to a variable! !TextConstants commentStamp: 'TorstenBergmann 1/31/2014 12:19' prior: 80999856! A pool for Text constants for space, tab, espace, ...! "Nautilus"! "System-Support"! "Tools"! ----End fileIn----! ----QUIT----2014-01-31T13:09:44.606739+01:00 Pharo.image priorSource: 30653712! ----STARTUP----2014-01-31T13:09:44.776156+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-31T13:09:48.708156+01:00 Pharo.image priorSource: 30674905! ----STARTUP----2014-01-31T13:14:39.1356+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-31T13:14:39.397597+01:00 Pharo-30732.image priorSource: 30675102! ----STARTUP----2014-01-31T17:20:43.277382+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 1/31/2014 17:17' prior: 80985658! commentForCurrentUpdate ^ '12758 Class comments missing for Balloon package https://pharo.fogbugz.com/f/cases/12758 12766 #cleanUpForProduction more improvements https://pharo.fogbugz.com/f/cases/12766 12749 Provide class comments for AsmJIT https://pharo.fogbugz.com/f/cases/12749 12760 Class comments missing for package DebuggerFilters https://pharo.fogbugz.com/f/cases/12760 12759 Class comments missing for Compiler and CompilerTests package https://pharo.fogbugz.com/f/cases/12759 12753 ChangeSorter does not differentiate between changed/removed/added methods https://pharo.fogbugz.com/f/cases/12753 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 1/31/2014 17:18'! script386 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.142.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.68.mcz FileSystem-Tests-Disk-MarcusDenker.13.mcz FileSystem-Tests-Memory-MarcusDenker.4.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1713.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.674.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-MarcusDenker.242.mcz System-Clipboard-StephaneDucasse.30.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-MarcusDenker.114.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-MarcusDenker.37.mcz System-History-MarcusDenker.5.mcz System-Installers-MarcusDenker.40.mcz System-Localization-MarcusDenker.77.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.293.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1014.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1402.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.124.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 1/31/2014 17:18'! update30733 "self new update30733" self withUpdateLog: '12758 Class comments missing for Balloon package https://pharo.fogbugz.com/f/cases/12758 12766 #cleanUpForProduction more improvements https://pharo.fogbugz.com/f/cases/12766 12749 Provide class comments for AsmJIT https://pharo.fogbugz.com/f/cases/12749 12760 Class comments missing for package DebuggerFilters https://pharo.fogbugz.com/f/cases/12760 12759 Class comments missing for Compiler and CompilerTests package https://pharo.fogbugz.com/f/cases/12759 12753 ChangeSorter does not differentiate between changed/removed/added methods https://pharo.fogbugz.com/f/cases/12753 '. self loadTogether: self script386 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AJx64InstructionDescription commentStamp: 'TorstenBergmann 1/30/2014 09:19' prior: 0! X64 instruction description! !BlockStartLocator commentStamp: 'TorstenBergmann 1/31/2014 11:21' prior: 0! Locates the start of a block! !ArrayLiteralTest commentStamp: 'TorstenBergmann 1/31/2014 11:22' prior: 0! SUnit tests for array literals! !ClosureCompilerTest commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 0! SUnit tests for the closure compiler! !MethodHighlightingTests commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 0! SUnit tests for method highlighting! !ClosureTests commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 0! SUnit tests for closures! !CompilerExceptionsTest commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 0! SUnit tests for compiler exceptions! !ContextCompilationTest commentStamp: 'TorstenBergmann 1/31/2014 11:24' prior: 0! SUnit tests for context compilation ! !FilterTest commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! SUnit test for debugger filters! !IfNotNilTests commentStamp: 'TorstenBergmann 1/31/2014 11:24' prior: 0! SUnit tests for ifNotNil: variations! !MethodNodeTest commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 0! SUnit tests for method nodes! !ScannerTest commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 0! SUnit tests for the scanner! !DecompilerConstructorForClosures commentStamp: 'TorstenBergmann 1/31/2014 11:21' prior: 0! Similar to superclass but for closures! !ParserNotification commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 0! Common superclass for parser notifications! !UndeclaredVariable commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 0! Notify about an undeclared variable! !UndefinedVariable commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 0! Notify about an undefined variable! !UnknownSelector commentStamp: 'TorstenBergmann 1/31/2014 11:17' prior: 0! Notify about an unknown selector! !UnusedVariable commentStamp: 'TorstenBergmann 1/31/2014 11:17' prior: 0! Notify about an unused temporary variable! !ReparseAfterSourceEditing commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 0! Notify about the need to reparse after source code was edited! !InstanceVariableNode commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 0! I am a parse tree leaf representing an instance variable.! !LiteralVariableNode commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 0! I am a parse tree leaf representing a literal variable.! !UndeclaredVariableWarning commentStamp: 'TorstenBergmann 1/31/2014 11:16' prior: 0! A warning for an undeclared variable in a method of a class! !AJAssembler commentStamp: 'TorstenBergmann 1/30/2014 09:08' prior: 0! Common superclass for assemblers. Add a subclass for each specific processor architecures (x86, ...) ! !AJGeneratedCode commentStamp: 'TorstenBergmann 1/30/2014 09:09' prior: 0! Instances of this class include the bytes and labels generated by AsmJIT |asm| asm := AJx64Assembler noStackFrame. asm neg: asm AL. asm ret. asm generatedCode ! !AJInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:11' prior: 0! Implement machine code instructions! !AJInstructionDecoration commentStamp: 'TorstenBergmann 1/30/2014 09:16' prior: 0! Used to decorate instructions with annotations! !AJJumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:12' prior: 0! An assembler jump instruction including a jump label and a description! !AJx86JumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:18' prior: 0! Jump instruction for X86! !AJx64JumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:18' prior: 0! Jump instruction for X64! !AJJumpLabel commentStamp: 'TorstenBergmann 1/30/2014 09:13' prior: 0! A label for a jump! !AJRoutineEpilogue commentStamp: 'TorstenBergmann 1/30/2014 09:15' prior: 0! In assembly language programming an epilogue is a few lines of code that appears at the end of a routine! !AJx86Instruction commentStamp: 'TorstenBergmann 1/30/2014 09:17' prior: 0! The x86 machine instructions! !AJx64Instruction commentStamp: 'TorstenBergmann 1/30/2014 09:17' prior: 0! The x86 - 64 bit machine instructions! !AJLineStream commentStamp: 'TorstenBergmann 1/30/2014 09:10' prior: 0! Utility class implementing a specific stream for printing instructions! !MockSourceEditor commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 0! A mock object mocking a source editor! !StackFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! A filter on the current stack for debugging! !BlockFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! A filter for blocks! !BooleanFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! A filter for booleans! !KernelClassesFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! A filter for kernel classes! !SelectorFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 0! A filter for selectors! !AJConstants commentStamp: 'TorstenBergmann 1/30/2014 08:58' prior: 0! A shared pool for constants from AsmJIT! !BalloonEngineConstants commentStamp: 'TorstenBergmann 1/31/2014 11:12' prior: 0! Constants for the baloon engine! !AJx64InstructionDescription commentStamp: 'TorstenBergmann 1/30/2014 09:19' prior: 81019644! X64 instruction description! !BlockStartLocator commentStamp: 'TorstenBergmann 1/31/2014 11:21' prior: 81019750! Locates the start of a block! !ArrayLiteralTest commentStamp: 'TorstenBergmann 1/31/2014 11:22' prior: 81019856! SUnit tests for array literals! !ClosureCompilerTest commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 81019967! SUnit tests for the closure compiler! !MethodHighlightingTests commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 81020088! SUnit tests for method highlighting! !ClosureTests commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 81020197! SUnit tests for closures! !CompilerExceptionsTest commentStamp: 'TorstenBergmann 1/31/2014 11:23' prior: 81020305! SUnit tests for compiler exceptions! !ContextCompilationTest commentStamp: 'TorstenBergmann 1/31/2014 11:24' prior: 81020424! SUnit tests for context compilation ! !FilterTest commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81020532! SUnit test for debugger filters! !IfNotNilTests commentStamp: 'TorstenBergmann 1/31/2014 11:24' prior: 81020638! SUnit tests for ifNotNil: variations! !MethodNodeTest commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 81020750! SUnit tests for method nodes! !ScannerTest commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 81020851! SUnit tests for the scanner! !DecompilerConstructorForClosures commentStamp: 'TorstenBergmann 1/31/2014 11:21' prior: 81020972! Similar to superclass but for closures! !ParserNotification commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 81021090! Common superclass for parser notifications! !UndeclaredVariable commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 81021212! Notify about an undeclared variable! !UndefinedVariable commentStamp: 'TorstenBergmann 1/31/2014 11:18' prior: 81021326! Notify about an undefined variable! !UnknownSelector commentStamp: 'TorstenBergmann 1/31/2014 11:17' prior: 81021437! Notify about an unknown selector! !UnusedVariable commentStamp: 'TorstenBergmann 1/31/2014 11:17' prior: 81021545! Notify about an unused temporary variable! !ReparseAfterSourceEditing commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 81021673! Notify about the need to reparse after source code was edited! !InstanceVariableNode commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 81021816! I am a parse tree leaf representing an instance variable.! !LiteralVariableNode commentStamp: 'TorstenBergmann 1/31/2014 11:19' prior: 81021954! I am a parse tree leaf representing a literal variable.! !UndeclaredVariableWarning commentStamp: 'TorstenBergmann 1/31/2014 11:16' prior: 81022096! A warning for an undeclared variable in a method of a class! !ImageCleaner methodsFor: 'api' stamp: 'MarcusDenker 1/31/2014 16:43' prior: 81002632! cleanUpForProduction "self new cleanUpForProduction" "trim MC ancestory information" MCVersionInfo allInstances do: [ :each | each instVarNamed: 'ancestors' put: nil ]. "delete logo" PolymorphSystemSettings showDesktopLogo: false. self packagesForCleanUpInProduction do: [ :each | (MCPackage named: each) unload ]. self helpPackages do: [ :each | (MCPackage named: each) unload ]. self testPackages do: [ :each | (MCPackage named: each) unload ]. self examplePackages do: [ :each | (MCPackage named: each) unload ]. (MCPackage named: 'ScriptLoader30') unload. (MCPackage named: 'MonticelloMocks') unload. (MCPackage named: 'ToolsTest') unload. (MCPackage named: 'Announcements-Tests-Core') unload. (MCPackage named: 'AST-Tests-Core') unload. (MCPackage named: 'AST-Interpreter-Test') unload. (MCPackage named: 'Ring-Tests-Containers') unload. (MCPackage named: 'Ring-Tests-Kernel') unload. (MCPackage named: 'Ring-Tests-Monticello') unload. (MCPackage named: 'Regex-Tests-Core') unload. (MCPackage named: 'Refactoring-Tests-Changes') unload. (MCPackage named: 'Refactoring-Tests-Core') unload. (MCPackage named: 'Refactoring-Tests-Critics') unload. (MCPackage named: 'Refactoring-Tests-Environment') unload. (MCPackage named: 'FileSystem-Tests-Core') unload. (MCPackage named: 'FileSystem-Tests-Disk') unload. (MCPackage named: 'FileSystem-Tests-Memory') unload. self cleanUpForRelease. ! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/31/2014 16:28'! examplePackages ^RPackageOrganizer default packageNames select: [ :each | each endsWith: 'Examples' ]! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/31/2014 16:37' prior: 80984225! packagesForCleanUpInProduction "A list of packages who will be unloaded when going to production. WARNING, ORDER IS IMPORTANT" ^#( "Manifest & Critics Browser" 'Manifest-Core' 'Manifest-CriticBrowser' 'Manifest-Tests' 'Manifest-Resources-Tests' "Metacello" 'Metacello-ToolBox' 'Metacello-MC' 'Metacello-Platform' 'Metacello-Core' 'Metacello-Base' 'Metacello-ProfStef' 'Metacello-Tutorial' 'Metacello-TestsCore' 'Metacello-TestsMC' 'Metacello-TestsMCCore' 'Metacello-TestsMCResources' 'Metacello-TestsPharo20MC' 'Metacello-TestsPlatform' 'Metacello-TestsTutorial' ) ! ! !ImageCleaner methodsFor: 'cleaning' stamp: 'MarcusDenker 1/31/2014 16:39' prior: 80984728! testPackages ^(RPackageOrganizer default packageNames select: [ :each | each endsWith: 'Tests' ]) copyWithout: 'ReleaseTests'! ! !ChangeSorterModel methodsFor: 'text' stamp: 'NicolaiHess 1/31/2014 12:07' prior: 49552752! buildSelectorDescriptionFor: changeSet class: class selector: selector prettyPrint: prettyPrint showDiff: showDiff | changeType code | changeType := changeSet atSelector: selector class: class. changeType == #remove ifTrue: [^ 'Method has been removed (see versions)']. changeType == #addedThenRemoved ifTrue: [^ 'Added then removed (see versions)']. class ifNil: [^ 'Method was added, but cannot be found!!']. (class includesSelector: selector) ifFalse: [^ 'Method was added, but cannot be found!!']. code := class sourceCodeAt: selector. prettyPrint ifTrue: [ code := class compiler format: code]. showDiff ifTrue: [ code := self diffFromPriorSourceFor: code ]. ^ code asText! ! !AJAssembler commentStamp: 'TorstenBergmann 1/30/2014 09:08' prior: 81022228! Common superclass for assemblers. Add a subclass for each specific processor architecures (x86, ...) ! !AJGeneratedCode commentStamp: 'TorstenBergmann 1/30/2014 09:09' prior: 81022409! Instances of this class include the bytes and labels generated by AsmJIT |asm| asm := AJx64Assembler noStackFrame. asm neg: asm AL. asm ret. asm generatedCode ! !AJInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:11' prior: 81022644! Implement machine code instructions! !AJInstructionDecoration commentStamp: 'TorstenBergmann 1/30/2014 09:16' prior: 81022764! Used to decorate instructions with annotations! !AJJumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:12' prior: 81022889! An assembler jump instruction including a jump label and a description! !AJx86JumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:18' prior: 81023041! Jump instruction for X86! !AJx64JumpInstruction commentStamp: 'TorstenBergmann 1/30/2014 09:18' prior: 81023147! Jump instruction for X64! !AJJumpLabel commentStamp: 'TorstenBergmann 1/30/2014 09:13' prior: 81023244! A label for a jump! !AJRoutineEpilogue commentStamp: 'TorstenBergmann 1/30/2014 09:15' prior: 81023341! In assembly language programming an epilogue is a few lines of code that appears at the end of a routine! !AJx86Instruction commentStamp: 'TorstenBergmann 1/30/2014 09:17' prior: 81023523! The x86 machine instructions! !AJx64Instruction commentStamp: 'TorstenBergmann 1/30/2014 09:17' prior: 81023629! The x86 - 64 bit machine instructions! !AJLineStream commentStamp: 'TorstenBergmann 1/30/2014 09:10' prior: 81023740! Utility class implementing a specific stream for printing instructions! !MockSourceEditor commentStamp: 'TorstenBergmann 1/31/2014 11:25' prior: 81023888! A mock object mocking a source editor! !StackFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81023998! A filter on the current stack for debugging! !BlockFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81024114! A filter for blocks! !BooleanFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81024208! A filter for booleans! !KernelClassesFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81024310! A filter for kernel classes! !SelectorFilter commentStamp: 'TorstenBergmann 1/31/2014 11:30' prior: 81024413! A filter for selectors! !AJConstants commentStamp: 'TorstenBergmann 1/30/2014 08:58' prior: 81024508! A shared pool for constants from AsmJIT! !BalloonEngineConstants commentStamp: 'TorstenBergmann 1/31/2014 11:12' prior: 81024631! Constants for the baloon engine! "Spec-Tools"! "Tools"! ----End fileIn----! ----QUIT----2014-01-31T17:20:49.815381+01:00 Pharo.image priorSource: 30675297! ----STARTUP----2014-01-31T17:20:49.99087+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-01-31T17:20:53.94087+01:00 Pharo.image priorSource: 30701904! ----STARTUP----2014-01-31T17:25:41.848336+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-01-31T17:25:42.094337+01:00 Pharo-30733.image priorSource: 30702100! ----STARTUP----2014-02-01T19:17:42.025517+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/1/2014 19:13' prior: 81007243! commentForCurrentUpdate ^ '12761 Class comments missing for FileSystem package https://pharo.fogbugz.com/f/cases/12761 11674 MNU: receiver of #> is nil https://pharo.fogbugz.com/f/cases/11674 12762 Class comments missing in UIManager https://pharo.fogbugz.com/f/cases/12762 12756 Class comments missing in System-* package https://pharo.fogbugz.com/f/cases/12756 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/1/2014 19:14'! script387 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.674.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1013.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1402.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/1/2014 19:14'! update30734 "self new update30734" self withUpdateLog: '12761 Class comments missing for FileSystem package https://pharo.fogbugz.com/f/cases/12761 11674 MNU: receiver of #> is nil https://pharo.fogbugz.com/f/cases/11674 12762 Class comments missing in UIManager https://pharo.fogbugz.com/f/cases/12762 12756 Class comments missing in System-* package https://pharo.fogbugz.com/f/cases/12756 '. self loadTogether: self script387 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MacOSClipboard commentStamp: 'TorstenBergmann 1/31/2014 10:28' prior: 0! The clipboard for MacOS! !CurrentChangeSetChanged commentStamp: 'TorstenBergmann 1/31/2014 10:28' prior: 0! Announce that the current change set has changed! !PseudoMetaclass commentStamp: 'TorstenBergmann 1/31/2014 10:17' prior: 0! I provide an inert model of a Metaclass, used by FileContentsBrowser to manipulate filedout code. ! !DirectoryEntryTest commentStamp: 'TorstenBergmann 1/31/2014 11:38' prior: 0! SUnit tests for FileSystemDirectoryEntry! !FileLocatorTest commentStamp: 'TorstenBergmann 1/31/2014 11:38' prior: 0! SUnit test for FileLocator! !FileReferenceTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 0! SUnit tests for file reference! !FileSystemHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:35' prior: 0! SUnit tests for FileSystemHandle! !FileHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:49' prior: 0! SUnit tests for file handles, the tests may be found in superclass! !MemoryHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:49' prior: 0! SUnit tests for memory handles, the tests may be found in superclass! !FileSystemResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:35' prior: 0! SUnit tests for FileSystemResolver! !InteractiveResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 0! SUnit tests for InteractiveResolver! !PlatformResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 0! SUnit tests for PlatformResolver! !SystemResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 0! SUnit tests for SystemResolver! !FileSystemTreeTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 0! SUnit tests for a file system tree! !CopyVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 0! SUnit tests for CopyVisitor! !SingleTreeTest commentStamp: 'TorstenBergmann 1/31/2014 11:40' prior: 0! SUnit tests for a single file system tree (depth one)! !AbstractEnumerationVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 0! SUnit tests for AbstractEnumerationVisitor! !CollectVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 0! SUnit tests for class CollectVisitor! !SelectVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 0! SUnit tests for class SelectVistor ! !DeleteVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:42' prior: 0! SUnit tests for class DeleteVisitor! !GuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 0! Common superclass for tests of guidance through the filesystem! !BreadthFirstGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 0! SUnit tests for class BreadthFirstGuide! !PostorderGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 0! SUnit tests for class PostorderGuide! !PreorderGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 0! SUnit tests for class PreorderGuide! !PathTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 0! SUnit tests for file system paths! !WindowsStoreTest commentStamp: 'TorstenBergmann 1/31/2014 11:48' prior: 0! SUnit tests for class WindowsStore! !ProvideAnswerNotification commentStamp: 'TorstenBergmann 1/31/2014 11:56' prior: 0! Notify to provide an answer! !SystemSettingLauncher commentStamp: 'TorstenBergmann 1/31/2014 10:34' prior: 0! Used to launch a setting! !MultipleSettingDeclaration commentStamp: 'TorstenBergmann 1/31/2014 10:30' prior: 0! A declaration for multiple settings! !IllegalName commentStamp: 'TorstenBergmann 1/31/2014 11:34' prior: 0! I am raised on an attempt to use an illegal file name ! !DummySystemProgressItem commentStamp: 'TorstenBergmann 1/31/2014 11:56' prior: 0! A dummy for a system progress item! !ExternalDropHandler commentStamp: 'TorstenBergmann 1/31/2014 10:29' prior: 0! Handle a number of dropped files from the OS! !FilePackage commentStamp: 'TorstenBergmann 1/31/2014 10:27' prior: 0! Represents a file package used to browse code files. This is for instance used in the FileContentsBrowser! !HashFunction commentStamp: 'TorstenBergmann 1/31/2014 10:15' prior: 0! Common superclass for hash functions! !ISOLanguageDefinition commentStamp: 'TorstenBergmann 1/31/2014 10:08' prior: 0! The language definitions from International Organization for Standardization! !LocaleID commentStamp: 'TorstenBergmann 1/31/2014 10:08' prior: 0! The ID for localization! !MczInstaller commentStamp: 'TorstenBergmann 1/31/2014 10:14' prior: 0! An installer for Monticello files with the *.mcz extension. MczInstaller installFileNamed: 'MyKillerApp-Core-Author.1.mcz'! !SettingNodeBuilder commentStamp: 'TorstenBergmann 1/31/2014 10:35' prior: 0! Used to build nodes from the settings framework! !SettingTreeBuilder commentStamp: 'TorstenBergmann 1/31/2014 10:32' prior: 0! A builder for the settings tree! !DiskFileSystemTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 0! SUnit tests for the disk filesystem! !MemoryFileSystemTest commentStamp: 'TorstenBergmann 1/31/2014 11:48' prior: 0! SUnit tests for MemoryFileSystem! !MacOSClipboard commentStamp: 'TorstenBergmann 1/31/2014 10:28' prior: 81046233! The clipboard for MacOS! !CurrentChangeSetChanged commentStamp: 'TorstenBergmann 1/31/2014 10:28' prior: 81046341! Announce that the current change set has changed! !PseudoMetaclass commentStamp: 'TorstenBergmann 1/31/2014 10:17' prior: 81046466! I provide an inert model of a Metaclass, used by FileContentsBrowser to manipulate filedout code. ! !Process methodsFor: 'accessing' stamp: 'MarcusDenker 1/30/2014 17:42' prior: 29958331! isTerminated self isActiveProcess ifTrue: [^ false]. ^suspendedContext isNil or: ["If the suspendedContext is the bottomContext it is the block in Process>>newProcess. If so, and the pc is greater than the startpc, the bock has alrteady sent and returned from value and there is nothing more to do." suspendedContext isBottomContext and: [ suspendedContext isDead not and: [ suspendedContext pc > suspendedContext startpc ] ] ] ! ! !DirectoryEntryTest commentStamp: 'TorstenBergmann 1/31/2014 11:38' prior: 81046644! SUnit tests for FileSystemDirectoryEntry! !FileLocatorTest commentStamp: 'TorstenBergmann 1/31/2014 11:38' prior: 81046761! SUnit test for FileLocator! !FileReferenceTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 81046866! SUnit tests for file reference! !FileSystemHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:35' prior: 81046978! SUnit tests for FileSystemHandle! !FileHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:49' prior: 81047086! SUnit tests for file handles, the tests may be found in superclass! !MemoryHandleTest commentStamp: 'TorstenBergmann 1/31/2014 11:49' prior: 81047230! SUnit tests for memory handles, the tests may be found in superclass! !FileSystemResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:35' prior: 81047382! SUnit tests for FileSystemResolver! !InteractiveResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 81047501! SUnit tests for InteractiveResolver! !PlatformResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 81047618! SUnit tests for PlatformResolver! !SystemResolverTest commentStamp: 'TorstenBergmann 1/31/2014 11:36' prior: 81047730! SUnit tests for SystemResolver! !FileSystemTreeTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 81047840! SUnit tests for a file system tree! !CopyVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:39' prior: 81047951! SUnit tests for CopyVisitor! !SingleTreeTest commentStamp: 'TorstenBergmann 1/31/2014 11:40' prior: 81048054! SUnit tests for a single file system tree (depth one)! !AbstractEnumerationVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 81048199! SUnit tests for AbstractEnumerationVisitor! !CollectVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 81048321! SUnit tests for class CollectVisitor! !SelectVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:41' prior: 81048436! SUnit tests for class SelectVistor ! !DeleteVisitorTest commentStamp: 'TorstenBergmann 1/31/2014 11:42' prior: 81048550! SUnit tests for class DeleteVisitor! !GuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 81048656! Common superclass for tests of guidance through the filesystem! !BreadthFirstGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 81048801! SUnit tests for class BreadthFirstGuide! !PostorderGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:43' prior: 81048920! SUnit tests for class PostorderGuide! !PreorderGuideTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 81049035! SUnit tests for class PreorderGuide! !PathTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 81049140! SUnit tests for file system paths! !WindowsStoreTest commentStamp: 'TorstenBergmann 1/31/2014 11:48' prior: 81049251! SUnit tests for class WindowsStore! !ProvideAnswerNotification commentStamp: 'TorstenBergmann 1/31/2014 11:56' prior: 81049372! Notify to provide an answer! !SystemSettingLauncher commentStamp: 'TorstenBergmann 1/31/2014 10:34' prior: 81049482! Used to launch a setting! !MultipleSettingDeclaration commentStamp: 'TorstenBergmann 1/31/2014 10:30' prior: 81049594! A declaration for multiple settings! !IllegalName commentStamp: 'TorstenBergmann 1/31/2014 11:34' prior: 81049702! I am raised on an attempt to use an illegal file name ! !DummySystemProgressItem commentStamp: 'TorstenBergmann 1/31/2014 11:56' prior: 81049841! A dummy for a system progress item! !ExternalDropHandler commentStamp: 'TorstenBergmann 1/31/2014 10:29' prior: 81049956! Handle a number of dropped files from the OS! !FilePackage commentStamp: 'TorstenBergmann 1/31/2014 10:27' prior: 81050073! Represents a file package used to browse code files. This is for instance used in the FileContentsBrowser! !HashFunction commentStamp: 'TorstenBergmann 1/31/2014 10:15' prior: 81050252! Common superclass for hash functions! !ISOLanguageDefinition commentStamp: 'TorstenBergmann 1/31/2014 10:08' prior: 81050371! The language definitions from International Organization for Standardization! !LocaleID commentStamp: 'TorstenBergmann 1/31/2014 10:08' prior: 81050517! The ID for localization! !MczInstaller commentStamp: 'TorstenBergmann 1/31/2014 10:14' prior: 81050614! An installer for Monticello files with the *.mcz extension. MczInstaller installFileNamed: 'MyKillerApp-Core-Author.1.mcz'! !SettingNodeBuilder commentStamp: 'TorstenBergmann 1/31/2014 10:35' prior: 81050821! Used to build nodes from the settings framework! !SettingTreeBuilder commentStamp: 'TorstenBergmann 1/31/2014 10:32' prior: 81050948! A builder for the settings tree! !DiskFileSystemTest commentStamp: 'TorstenBergmann 1/31/2014 11:44' prior: 81051059! SUnit tests for the disk filesystem! !MemoryFileSystemTest commentStamp: 'TorstenBergmann 1/31/2014 11:48' prior: 81051176! SUnit tests for MemoryFileSystem! "Kernel"! ----End fileIn----! ----QUIT----2014-02-01T19:17:50.055913+01:00 Pharo.image priorSource: 30702296! ----STARTUP----2014-02-01T19:17:50.237878+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-01T19:17:54.079872+01:00 Pharo.image priorSource: 30725478! ----STARTUP----2014-02-01T19:22:42.164837+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-01T19:22:42.424833+01:00 Pharo-30734.image priorSource: 30725675! ----STARTUP----2014-02-02T11:38:39.88806+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/2/2014 11:36' prior: 81034248! commentForCurrentUpdate ^ '12469 Sometimes an empty protocol is created https://pharo.fogbugz.com/f/cases/12469 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/2/2014 11:36'! script388 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.674.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-EstebanLorenzano.405.mcz SlotTests-EstebanLorenzano.70.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-EstebanLorenzano.60.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1406.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.623.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/2/2014 11:36'! update30735 "self new update30735" self withUpdateLog: '12469 Sometimes an empty protocol is created https://pharo.fogbugz.com/f/cases/12469 '. self loadTogether: self script388 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ListDialogWindow methodsFor: 'items creation' stamp: 'SvenVanCaekenberghe 2/1/2014 20:25' prior: 24524091! buildListMorph ^ listMorph := PluggableListMorph new hResizing: #spaceFill; vResizing: #spaceFill; on: self list: #list selected: #listIndex changeSelected: #listIndex: menu: nil keystroke: nil; keystrokeSelector: #listKeystroke:; doubleClickSelector: #doubleClickOk; wrapSelector: #displayItem:; yourself! ! !ListDialogWindow methodsFor: 'actions' stamp: 'SvenVanCaekenberghe 2/1/2014 20:25'! doubleClickOk self listIndex ~= 0 ifTrue: [ self ok ]! ! !AbstractTool class methodsFor: 'private' stamp: 'SvenVanCaekenberghe 2/1/2014 20:24' prior: 67591155! requestProtocolNameFor: aClass initialAnswer: aString | ui | ui := ListDialogWindow new getList: [ :r | (AbstractTool protocolSuggestionsFor: aClass) select: [ :e | r search: e name ] ]; displayBlock: [ :e | e ]; initialAnswer: aString; acceptNewEntry: true; title: 'New Protocol'; yourself. ^ ui chooseFromOwner: World! ! !AbstractTool methodsFor: 'class' stamp: 'SvenVanCaekenberghe 2/1/2014 20:24' prior: 79909135! addCategoryIn: aClass before: aCategory "Present a choice of categories or prompt for a new category name and add it before the current selection, or at the end if no current selection" | newName | newName := self class requestProtocolNameFor: aClass initialAnswer: ''. (newName isEmptyOrNil) ifTrue: [ ^ nil ]. newName := newName asSymbol. aClass organization addCategory: newName before: aCategory. ^ newName! ! "Polymorph-Widgets"! "Tools"! ----End fileIn----! ----QUIT----2014-02-02T11:38:46.000671+01:00 Pharo.image priorSource: 30725872! ----STARTUP----2014-02-02T11:38:46.180684+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-02T11:38:50.176688+01:00 Pharo.image priorSource: 30739155! ----STARTUP----2014-02-02T11:43:41.266302+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-02T11:43:41.526302+01:00 Pharo-30735.image priorSource: 30739352! ----STARTUP----2014-02-03T08:17:48.217603+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/3/2014 08:14' prior: 81057816! commentForCurrentUpdate ^ '12727 Duplicated categories in Nautilus https://pharo.fogbugz.com/f/cases/12727 12157 Wrong announcement of ClassModifiedClassDefinition https://pharo.fogbugz.com/f/cases/12157 11670 strange MC package Generated-code-non-existing-package https://pharo.fogbugz.com/f/cases/11670 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/3/2014 08:14'! script389 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-StephaneDucasse.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.676.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-EstebanLorenzano.334.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-EstebanLorenzano.132.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1406.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/3/2014 08:14'! update30736 "self new update30736" self withUpdateLog: '12727 Duplicated categories in Nautilus https://pharo.fogbugz.com/f/cases/12727 12157 Wrong announcement of ClassModifiedClassDefinition https://pharo.fogbugz.com/f/cases/12157 11670 strange MC package Generated-code-non-existing-package https://pharo.fogbugz.com/f/cases/11670 '. self loadTogether: self script389 merge: false. ScriptLoader new unregisterPackage: 'Generated-code-non-existing-package'. self flushCaches. ! ! "ScriptLoader30"! !TOne commentStamp: 'MartinDias 1/31/2014 15:49' prior: 0! I am a trait used for testing.! !TTwo commentStamp: 'MartinDias 1/31/2014 15:50' prior: 0! I am a trait used for testing.! !TestSharedPool commentStamp: 'MartinDias 1/31/2014 15:50' prior: 0! I am a shared pool used for testing.! !ClassModifiedClassDefinition commentStamp: 'MartinDias 1/31/2014 16:31' prior: 80738488! This announcement will be emitted when a class or a trait definition changes. For example, when an instance variable is added or when the trait composition is modified in a class definition.! !TOne commentStamp: 'MartinDias 1/31/2014 15:49' prior: 81083387! I am a trait used for testing.! !TTwo commentStamp: 'MartinDias 1/31/2014 15:50' prior: 81083478! I am a trait used for testing.! !ByteLayout methodsFor: 'testing' stamp: 'MartinDias 1/31/2014 16:19'! isBytes ^ true! ! !WordLayout methodsFor: 'testing' stamp: 'MartinDias 1/31/2014 16:19'! isBytes ^ false! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 1/31/2014 16:05' prior: 80495814! subclass: aName uses: aTraitCompositionOrArray instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ^ self subclass: aName uses: aTraitCompositionOrArray with: [ self subclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !TClass methodsFor: 'subclass creation - private' stamp: 'MartinDias 1/31/2014 16:43'! subclass: aName uses: aTraitComposition with: aBlock "Define (or redefine) a subclass by evaluating a block closure. Note (MartinDias): This is a workaround for the subclass creation API when a trait is specified. To fix it well, in Pharo 4, a bit deeper refactoring is required, delegating this responsibility to SlotClassBuilder." ^ self environment at: aName ifPresent: [ :old | | copyOfOld newClass | copyOfOld := old copy. "Modify the class and set the new trait composition" newClass := aBlock value. newClass setTraitComposition: aTraitComposition asTraitComposition. "Announce that the definition changed when there is a new trait composution. Note: It may be a re-announce if there was other change in the class definition, e.g. an instace variable added." (newClass traitComposition syntacticallyEquals: copyOfOld traitComposition) ifFalse: [ SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOld to: newClass ]. newClass ] ifAbsent: [ "Create the class and set the trait composition" aBlock value setTraitComposition: aTraitComposition asTraitComposition; yourself ].! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 1/31/2014 16:16' prior: 41003012! variableByteSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 1/31/2014 16:12' prior: 41004314! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 1/31/2014 16:15' prior: 41005616! variableWordSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableWordSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !TClass methodsFor: 'subclass creation' stamp: 'MartinDias 1/31/2014 16:22' prior: 41006910! weakSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self weakSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !TestSharedPool commentStamp: 'MartinDias 1/31/2014 15:50' prior: 81083579! I am a shared pool used for testing.! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:25'! testFixedClassWhenTraitCompositionChangedShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class without trait composition" Object subclass: self aClassName uses: { } instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. "Set a new trait composition" Object subclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: (announcement oldClassDefinition traitComposition syntacticallyEquals: {} asTraitComposition). self assert: (announcement newClassDefinition traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:20'! testFixedClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object subclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self deny: aClass layout isVariable. self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:26'! testVariableByteClassWhenTraitCompositionChangedShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class without trait composition" Object variableByteSubclass: self aClassName uses: { } instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. "Set a new trait composition" Object variableByteSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: (announcement oldClassDefinition traitComposition syntacticallyEquals: {} asTraitComposition). self assert: (announcement newClassDefinition traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:20'! testVariableByteClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object variableByteSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self assert: aClass layout isVariable. self assert: aClass layout isBits. self assert: aClass layout isBytes. self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:25'! testVariableClassWhenTraitCompositionChangedShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class without trait composition" Object variableSubclass: self aClassName uses: { } instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. "Set a new trait composition" Object variableSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: (announcement oldClassDefinition traitComposition syntacticallyEquals: {} asTraitComposition). self assert: (announcement newClassDefinition traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:20'! testVariableClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object variableSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self assert: aClass layout isVariable. self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:26'! testVariableWordClassWhenTraitCompositionChangedShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class without trait composition" Object variableWordSubclass: self aClassName uses: { } instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. "Set a new trait composition" Object variableWordSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: (announcement oldClassDefinition traitComposition syntacticallyEquals: {} asTraitComposition). self assert: (announcement newClassDefinition traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:20'! testVariableWordClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object variableWordSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self assert: aClass layout isVariable. self assert: aClass layout isBits. self assert: aClass layout isWords. self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:26'! testWeakClassWhenTraitCompositionChangedShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class without trait composition" Object weakSubclass: self aClassName uses: { } instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. "Set a new trait composition" Object weakSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size equals: 1. announcement := self collectedAnnouncements first. self assert: (announcement oldClassDefinition traitComposition syntacticallyEquals: {} asTraitComposition). self assert: (announcement newClassDefinition traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 1/31/2014 16:21'! testWeakClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object weakSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self assert: aClass layout isVariable. self assert: aClass layout isWeak. self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !BitsLayout methodsFor: 'testing' stamp: 'MartinDias 1/31/2014 16:19'! isBytes ^ self subclassResponsibility! ! !BitsLayout methodsFor: 'testing' stamp: 'MartinDias 1/31/2014 16:18'! isWords ^ self isBytes not! ! !ClassModifiedClassDefinition commentStamp: 'MartinDias 1/31/2014 16:31' prior: 81083707! This announcement will be emitted when a class or a trait definition changes. For example, when an instance variable is added or when the trait composition is modified in a class definition.! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'NicolaiHess 2/2/2014 20:39'! alertCategoryName: tagName exitstsAlreadyIn: package | errorMessage | errorMessage := String streamContents: [ :stream | stream << 'Category named ' << tagName << ' already exists in package ' << package name ]. UIManager default inform: errorMessage! ! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'NicolaiHess 2/2/2014 20:36'! category: aClassTag existsIn: aPackage aPackage classTagNamed: aClassTag ifPresent:[^ true]. ^ false.! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'NicolaiHess 2/2/2014 20:36' prior: 79170615! renameClassCategory: packageTag | newName oldName | oldName := packageTag name. newName := UIManager default request: ('New name of category {1}' format: { packageTag name }) initialAnswer: oldName title: 'Rename a category'. newName = oldName ifTrue: [ ^ self ]. (self isValidPackageName: newName) ifFalse: [ ^ self alertInvalidPackageName:newName ]. (self category:newName existsIn:packageTag package) ifTrue:[ ^ self alertCategoryName:newName exitstsAlreadyIn:packageTag package]. packageTag renameTo: newName. ! ! !Trait method! subclass: aName uses: aTraitCompositionOrArray instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ^ self subclass: aName uses: aTraitCompositionOrArray with: [ self subclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! subclass: aName uses: aTraitCompositionOrArray instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ^ self subclass: aName uses: aTraitCompositionOrArray with: [ self subclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! subclass: aName uses: aTraitComposition with: aBlock "Define (or redefine) a subclass by evaluating a block closure. Note (MartinDias): This is a workaround for the subclass creation API when a trait is specified. To fix it well, in Pharo 4, a bit deeper refactoring is required, delegating this responsibility to SlotClassBuilder." ^ self environment at: aName ifPresent: [ :old | | copyOfOld newClass | copyOfOld := old copy. "Modify the class and set the new trait composition" newClass := aBlock value. newClass setTraitComposition: aTraitComposition asTraitComposition. "Announce that the definition changed when there is a new trait composution. Note: It may be a re-announce if there was other change in the class definition, e.g. an instace variable added." (newClass traitComposition syntacticallyEquals: copyOfOld traitComposition) ifFalse: [ SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOld to: newClass ]. newClass ] ifAbsent: [ "Create the class and set the trait composition" aBlock value setTraitComposition: aTraitComposition asTraitComposition; yourself ].! ! !Trait method! subclass: aName uses: aTraitComposition with: aBlock "Define (or redefine) a subclass by evaluating a block closure. Note (MartinDias): This is a workaround for the subclass creation API when a trait is specified. To fix it well, in Pharo 4, a bit deeper refactoring is required, delegating this responsibility to SlotClassBuilder." ^ self environment at: aName ifPresent: [ :old | | copyOfOld newClass | copyOfOld := old copy. "Modify the class and set the new trait composition" newClass := aBlock value. newClass setTraitComposition: aTraitComposition asTraitComposition. "Announce that the definition changed when there is a new trait composution. Note: It may be a re-announce if there was other change in the class definition, e.g. an instace variable added." (newClass traitComposition syntacticallyEquals: copyOfOld traitComposition) ifFalse: [ SystemAnnouncer uniqueInstance classDefinitionChangedFrom: copyOfOld to: newClass ]. newClass ] ifAbsent: [ "Create the class and set the trait composition" aBlock value setTraitComposition: aTraitComposition asTraitComposition; yourself ].! ! !Trait method! variableByteSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableByteSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable byte-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableByteSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableWordSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableWordSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableWordSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable word-sized nonpointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableWordSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! weakSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self weakSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! weakSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have weak indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self weakSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! "Nautilus"! "Slot"! "SlotTests"! "Traits"! ----End fileIn----! ----QUIT----2014-02-03T08:17:52.445666+01:00 Pharo.image priorSource: 30739549! ----STARTUP----2014-02-03T08:17:52.621359+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-03T08:17:56.577357+01:00 Pharo.image priorSource: 30775862! ----STARTUP----2014-02-03T08:22:44.113066+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-03T08:22:44.37707+01:00 Pharo-30736.image priorSource: 30776059! ----STARTUP----2014-02-03T09:46:37.761737+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/3/2014 09:44' prior: 81071494! commentForCurrentUpdate ^ '12655 RPackage bug when moving a class to another package that has extensions in that package already https://pharo.fogbugz.com/f/cases/12655 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/3/2014 09:44'! script390 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.676.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1406.mcz ToolsTest-MarcusDenker.denker.63.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/3/2014 09:45'! update30737 "self new update30737" self withUpdateLog: '12655 RPackage bug when moving a class to another package that has extensions in that package already https://pharo.fogbugz.com/f/cases/12655 '. self loadTogether: self script390 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'private' stamp: 'ThierryGoubier 1/27/2014 13:44' prior: 80798851! basicImportClass: aClass "Add the class definition and all the selectors which are not extensions of other packages. If the class had an extension to us, then all methods in that extension are moved to 'as yet unclassified' and the extension protocol is deleted (should I use silently or not?)." "Note: Protocol defaultName is #'as yet unclassified'" "Question: should we check that for each extension, there is a real package behind or not?" | protocols | self addClassDefinition: aClass. aClass organization realCategories do: [ :each | (self isYourClassExtension: each) ifTrue: [ aClass organization renameCategory: each toBe: Protocol defaultName ] ]. protocols := aClass organization realCategories reject: [ :each | each first = $* ]. protocols do: [ :each | self importProtocol: each forClass: aClass ]! ! !RPackage methodsFor: 'accessing' stamp: 'ThierryGoubier 2/2/2014 16:36' prior: 74359210! removeClass: aClass "Remove the class and all its methods from the receiver. If we have a protocol which looks like an extension of us, rename it to 'as yet unclassified' to avoid breaking things afterwards." aClass organization realCategories do: [ :each | (self isYourClassExtension: each) ifTrue: [ aClass organization renameCategory: each toBe: Protocol defaultName ] ]. (self definedMethodsForClass: aClass instanceSide) do: [ :aCompiledMethod | self removeMethod: aCompiledMethod ]. "we also have also have to remove methods from class side" (self definedMethodsForClass: aClass classSide) do: [ :aCompiledMethod | self removeMethod: aCompiledMethod ]. self removeClassDefinitionWithoutCheckingMethods: aClass. self removeClassTagsForClassNamed: aClass name! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'ThierryGoubier 1/27/2014 13:45'! testMoveClassInPackageWithExtensionsOnClass "Move a class in package XXXXX (with extensions from YYYY) to package YYYYY." | class secondPackage| self addXYCategory. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: secondPackage methodCategoryPrefix. secondPackage addClass: class. "Everything should now be in second package (and not listed as an extension)." self assert: (class >> #stubMethod) category = Protocol defaultName. self assert: (secondPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = secondPackage.! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'ThierryGoubier 2/2/2014 16:39'! testMoveClassInPackageWithExtensionsOnClass2 "Move a class in package XXXXX (with extensions from XXXX) to package YYYYY." | class secondPackage| self addXYCategory. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: '*XXXXX'. secondPackage addClass: class. "Everything should now be in second package (and not listed as an extension)." self assert: (class >> #stubMethod) category = Protocol defaultName. self assert: (secondPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = secondPackage.! ! !RPackageExtensionMethodsSynchronisationTest methodsFor: 'tests - operations on methods' stamp: 'ThierryGoubier 1/27/2014 13:45'! testMoveClassInPackageWithExtensionsOnClassAndBack "Move a class in package XXXXX (with extensions from YYYY) to package YYYYY." | class firstPackage secondPackage| self addXYCategory. firstPackage := self organizer packageNamed: #XXXXX. secondPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. self createMethodNamed: 'stubMethod' inClass: class inCategory: secondPackage methodCategoryPrefix. secondPackage addClass: class. "Everything should now be in second package (and not listed as an extension, but instead as 'as yet unclassified')." self assert: (class >> #stubMethod) category = Protocol defaultName. self assert: (secondPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (secondPackage includesExtensionSelector: #stubMethod ofClass: class). self assert: ((class >> #stubMethod) packageFromOrganizer: self organizer ) = secondPackage. "Moving back, we should not see the extension reappear." firstPackage addClass: class. self assert: (class >> #stubMethod) category = Protocol defaultName. self assert: (firstPackage includesDefinedSelector: #stubMethod ofClass: class). self deny: (secondPackage includesExtensionSelector: #stubMethod ofClass: class) ! ! "RPackage-Core"! "RPackage-Tests"! ----End fileIn----! ----QUIT----2014-02-03T09:46:40.512132+01:00 Pharo.image priorSource: 30776256! ----STARTUP----2014-02-03T09:46:40.682544+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-03T09:46:44.618541+01:00 Pharo.image priorSource: 30793161! ----STARTUP----2014-02-03T09:51:27.285297+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-03T09:51:27.541296+01:00 Pharo-30737.image priorSource: 30793358! ----STARTUP----2014-02-03T11:19:34.900449+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/3/2014 11:17' prior: 81108200! commentForCurrentUpdate ^ '12771 KeyNotFound: key #localSelectors not found in MethodDictionary https://pharo.fogbugz.com/f/cases/12771 12769 Add a full class definition menu in nautilus https://pharo.fogbugz.com/f/cases/12769 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/3/2014 11:17'! script391 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.176.mcz Manifest-CriticBrowser-SvenVanCaekenberghe.143.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-StephaneDucasse.36.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.100.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.67.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1407.mcz ToolsTest-MarcusDenker.denker.65.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/3/2014 11:17'! update30738 "self new update30738" self withUpdateLog: '12771 KeyNotFound: key #localSelectors not found in MethodDictionary https://pharo.fogbugz.com/f/cases/12771 12769 Add a full class definition menu in nautilus https://pharo.fogbugz.com/f/cases/12769 '. self loadTogether: self script391 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'StephaneDucass 2/2/2014 09:01' prior: 17379796! classesFixMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [target findMethod]; order: 100; help: 'Search for a method by selector'. (aBuilder item: #'Find Class...') keyText: 'f, c' if: Nautilus useOldStyleKeys not; keyText: 'F' if: Nautilus useOldStyleKeys; action: [ target findClass ]; order: 200; help: 'Search for a method by selector'. (aBuilder item: #'Add Class...') keyText: 'n, c' if: Nautilus useOldStyleKeys not; keyText: 'n' if: Nautilus useOldStyleKeys; action: [ target addClass ]; order: 400; help: 'Create a new class'. (aBuilder item: #'Add full Class...') action: [ target addFullClass ]; order: 400; help: 'Propose full class definition'. (aBuilder item: #'Add Trait...') action: [ target addTrait ]; order: 500; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [target fullBrowse]; order: 999; help: 'Open the same browser'.! ! !AbstractNautilusUI methodsFor: 'menus behavior' stamp: 'StephaneDucass 2/2/2014 09:02'! addFullClass self selectedPackage ifNotNil: [:package | self addFullClassIn: package ]! ! !AbstractTool class methodsFor: 'private' stamp: 'StephaneDucass 2/2/2014 09:03'! defineFullClassTemplate ^ 'Object subclass: #{1} instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''{2}'''! ! !AbstractTool methodsFor: 'class' stamp: 'StephaneDucass 2/2/2014 09:03'! addFullClassIn: aPackage " add a new class in the provided package. A dialog will be opened to let the user set the class definition " | classSymbol systemCategory classDefinition | classSymbol := #NameOfSubclass. systemCategory := aPackage ifNotNil: [ aPackage categoryName ] ifNil: [ 'Unknown' ]. classDefinition := self class defineFullClassTemplate format: { classSymbol. systemCategory } . classDefinition := UIManager default multiLineRequest: 'Define class definition:' initialAnswer: classDefinition answerHeight: 250. classDefinition isEmptyOrNil ifTrue: [ ^ self ]. self class evaluate: classDefinition.! ! !OpenToolTest methodsFor: 'test browse' stamp: 'MarcusDenker 2/3/2014 09:46' prior: 45350784! testOpenBrowseOnInstalledTraitMethod | browser | browser := (Class>>#hasClassSide) browse. browser changed. browser close.! ! "Nautilus"! "Tools"! "ToolsTest"! ----End fileIn----! ----QUIT----2014-02-03T11:19:39.248567+01:00 Pharo.image priorSource: 30793555! ----STARTUP----2014-02-03T11:19:39.431868+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-03T11:19:43.27787+01:00 Pharo.image priorSource: 30808113! ----STARTUP----2014-02-03T11:24:29.920786+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-03T11:24:30.176785+01:00 Pharo-30738.image priorSource: 30808310! ----STARTUP----2014-02-03T18:05:42.005201+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/3/2014 18:02' prior: 81125500! commentForCurrentUpdate ^ '12772 Missing example methods in Spec https://pharo.fogbugz.com/f/cases/12772 12309 Manifest-Core should be cleaned https://pharo.fogbugz.com/f/cases/12309 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/3/2014 18:03'! script392 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-SvenVanCaekenberghe.139.mcz CompressionTests-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.62.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.344.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.789.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.339.mcz FuelTools-Debugger-MarcusDenker.9.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-SvenVanCaekenberghe.35.mcz Morphic-Examples-MarcusDenker.16.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.146.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.97.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-StephaneDucasse.2.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1407.mcz ToolsTest-MarcusDenker.denker.65.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/3/2014 18:03'! update30739 "self new update30739" self withUpdateLog: '12772 Missing example methods in Spec https://pharo.fogbugz.com/f/cases/12772 12309 Manifest-Core should be cleaned https://pharo.fogbugz.com/f/cases/12309 '. self loadTogether: self script392 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RBRemoveAssignmentWithoutEffectRule commentStamp: '' prior: 42594025! See my #longDescription .! !TheManifestBuilder commentStamp: 'StephaneDucasse 1/6/2014 20:52' prior: 0! I'm a tool to build manifest that handles small lint false positive and other information. My name is strange but this is to avoid to match with a Manifest class which is recognized because it starts with Manifest*. ! !RadioButtonGroupExample class methodsFor: 'example' stamp: 'HernanMoralesDurand 2/3/2014 00:09'! example "self example" RadioButtonGroupExample new openWithSpec. ! ! !RBRemoveAssignmentWithoutEffectRule commentStamp: '' prior: 81151968! See my #longDescription .! !RBRemoveAssignmentWithoutEffectRule methodsFor: 'as yet unclassified' stamp: 'SimonAllier 9/7/2012 14:05' prior: 31211433! category ^ 'Optimization'! ! !RBRemoveAssignmentWithoutEffectRule methodsFor: 'accessing' stamp: 'SimonAllier 9/5/2012 14:24' prior: 31211761! group ^ 'Transformations'! ! !RBRemoveAssignmentWithoutEffectRule methodsFor: 'initialization' stamp: 'SimonAllier 2/8/2013 16:43' prior: 31212040! initialize super initialize. self rewriteRule replace: '`var := `var' with: ''! ! !RBRemoveAssignmentWithoutEffectRule methodsFor: 'as yet unclassified' stamp: 'SimonAllier 9/12/2012 14:02' prior: 31211569! longDescription ^ 'Remove assignment has no effect. For example, var := var is unless'! ! !RBRemoveAssignmentWithoutEffectRule methodsFor: 'accessing' stamp: 'SimonAllier 9/5/2012 14:21' prior: 31211890! name ^ 'Remove assignment has no effect'! ! !CheckBoxExample class methodsFor: 'example' stamp: 'HernanMoralesDurand 2/3/2014 00:07'! example "self example" CheckBoxExample new openWithSpec. ! ! !CriticsCache methodsFor: 'private' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 33861618! builderManifestClass ^ TheManifestBuilder! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18541403! testAddAllFalsePositive | manifestBuilder array| array := {MFClassA. MFClassB }. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installFalsePositiveOf: 'test' version: 0. self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder addAllFalsePositive: array of: 'test' version: 0. self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder addAllFalsePositive: array of: 'test' version: 0. self assert: (manifestBuilder manifest ruletestV0FalsePositive size = 2). manifestBuilder removeAllFalsePositive: array of: 'test' version: 0. self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). "manifestBuilder manifest class removeSelector: (manifestBuilder selectorFalsePositiveOf: 'test' version: 0)"! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18542729! testAddAllToDo | manifestBuilder array| array := {MFClassA. MFClassB }. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder addAllToDo: array of: 'test' version: 0. self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder addAllToDo: array of: 'test' version: 0. self assert: (manifestBuilder manifest ruletestV0TODO size = 2). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18543577! testAddClass | manifestBuilder| manifestBuilder := TheManifestBuilder of: MFClassA . self deny: ((manifestBuilder rejectClasses) anySatisfy: [:each| each = MFClassA]). manifestBuilder addRejectClass: MFClassA.. self assert: ((manifestBuilder rejectClasses) anySatisfy: [:each| each = MFClassA]). manifestBuilder removeRejectClass: MFClassA. . self deny: ((manifestBuilder rejectClasses) anySatisfy: [:each| each = MFClassA]). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18544103! testAddFalsePositive | manifestBuilder cl mth| cl := MFClassA. mth := MFClassA >> #method. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installFalsePositiveOf: 'test' version: 0. self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = mth]). manifestBuilder addFalsePositive: cl of: 'test' version: 0. manifestBuilder addFalsePositive: mth of: 'test' version: 0. self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = mth]). manifestBuilder removeFalsePositive: cl of: 'test' version: 0. manifestBuilder removeFalsePositive: mth of: 'test' version: 0. self deny: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self deny: ((manifestBuilder falsePositiveOf: 'test'version: 0) anySatisfy: [:each| each = mth]). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18545260! testAddRule | manifestBuilder| manifestBuilder := TheManifestBuilder of: MFClassA . self deny: ((manifestBuilder rejectRules) anySatisfy: [:each| each = 0]). manifestBuilder addRejectRule: 0. self assert: ((manifestBuilder rejectRules) anySatisfy: [:each| each = 0]). manifestBuilder removeRejectRule: 0. self deny: ((manifestBuilder rejectRules) anySatisfy: [:each| each = 0]). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18545740! testAddToDo | manifestBuilder cl mth| cl := MFClassA. mth := MFClassA >> #method. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = mth]). manifestBuilder addToDo: cl of: 'test' version: 0. manifestBuilder addToDo: mth of: 'test' version: 0. self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = mth]). manifestBuilder removeToDo: cl of: 'test' version: 0. manifestBuilder removeToDo: mth of: 'test' version: 0. self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = cl]). self deny: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = mth]). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18546793! testCleanUpFP | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA. . MFClassA compile: 'foo'. manifestBuilder installFalsePositiveOf: 'test' version: 0. manifestBuilder addFalsePositive: (MFClassA>>#foo) of: 'test' version: 0. self assert: (manifestBuilder containsFalsePositive: (MFClassA>>#foo) onRule: 'test' version: 0). MFClassA removeSelector: #foo. manifestBuilder cleanUp. self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0 ) size = 0) . ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18547373! testCleanUpTD | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA. . MFClassA compile: 'foo'. manifestBuilder installToDoOf: 'test' version: 0. manifestBuilder addToDo: (MFClassA>>#foo) of: 'test' version: 0. self assert: (manifestBuilder containsToDo: (MFClassA>>#foo) onRule: 'test' version: 0). MFClassA removeSelector: #foo. manifestBuilder cleanUp. self assert: ((manifestBuilder toDoOf: 'test' version: 0 ) size = 0) . ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18548566! testContainsFalsePositive | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installFalsePositiveOf: 'test' version: 0. manifestBuilder addFalsePositive: MFClassA of: 'test' version: 0. self assert: (manifestBuilder containsFalsePositive: MFClassA onRule: 'test' version: 0). self deny: (manifestBuilder containsFalsePositive: MFClassB onRule: 'test' version: 0). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18549070! testContainsToDo | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. manifestBuilder addToDo: MFClassA of: 'test' version: 0. self assert: (manifestBuilder containsToDo: MFClassA onRule: 'test' version: 0). self deny: (manifestBuilder containsToDo: MFClassB onRule: 'test' version: 0). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18549530! testCreationManifest | manifestBuilder cl | manifestBuilder := TheManifestBuilder new. cl := Smalltalk globals at: #ManifestManifestResourcesTests ifAbsent: [ nil ]. cl ifNotNil: [ cl removeFromChanges; removeFromSystemUnlogged ]. self assert: (manifestBuilder manifestOf: MFClassA ) isNil. self assert: (manifestBuilder createManifestOf: MFClassA) notNil. self assert: (manifestBuilder manifestOf: MFClassA) notNil! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18550046! testCreationManifestOn | manifestBuilder cl | manifestBuilder := TheManifestBuilder new. cl := Smalltalk globals at: #ManifestManifestResourcesTests ifAbsent: [ nil ]. cl ifNotNil: [ cl removeFromChanges; removeFromSystemUnlogged ]. self assert: (manifestBuilder manifestOf: MFClassA ) isNil. self assert: (TheManifestBuilder of: MFClassA) notNil. self assert: (manifestBuilder manifestOf: MFClassA) notNil! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18550550! testDateOfFalsePositive | manifestBuilder date1 date2 | manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installFalsePositiveOf: 'test' version: 0. date1 := DateAndTime current. manifestBuilder addFalsePositive: MFClassA of: 'test' version: 0. date2 := DateAndTime current. self assert: (manifestBuilder dateOfFalsePositive: MFClassA onRule: 'test' version: 0) >= date1 . self assert: (manifestBuilder dateOfFalsePositive: MFClassA onRule: 'test' version: 0) <= date2 . ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 34142963! testDateOfToDo | manifestBuilder date1 date2 | manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. date1 := DateAndTime current. manifestBuilder addToDo: MFClassA of: 'test' version: 0. date2 := DateAndTime current. self assert: (manifestBuilder dateOfToDo: MFClassA onRule: 'test' version: 0) >= date1 . self assert: (manifestBuilder dateOfToDo: MFClassA onRule: 'test' version: 0) <= date2 . ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18551148! testInstallFalsePositive | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA. . self deny: (manifestBuilder hasFalsePositiveOf: 'test' version: 0). manifestBuilder installFalsePositiveOf: 'test' version: 0. self assert: (manifestBuilder hasFalsePositiveOf: 'test' version: 0). self assert: (manifestBuilder falsePositiveOf: 'test' version: 0) notNil. ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18551604! testInstallToDo | manifestBuilder | manifestBuilder := TheManifestBuilder of: MFClassA. . self deny: (manifestBuilder hasToDoOf: 'test' version: 0). manifestBuilder installToDoOf: 'test' version: 0. self assert: (manifestBuilder hasToDoOf: 'test' version: 0). self assert: (manifestBuilder toDoOf: 'test' version: 0) notNil. ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18552018! testIsClassAManifest "self debug: #testIsClassAManifest" self deny: Point isManifest. TheManifestBuilder of: MFClassA. self assert: ( (Smalltalk at: #ManifestManifestResourcesTests) isManifest)! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18552298! testIsFalsePositive | manifestBuilder cl mth| cl := MFClassA. mth := cl >> #method. manifestBuilder := TheManifestBuilder of: MFClassA . self deny: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). manifestBuilder addRejectClass: MFClassA. self assert: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). manifestBuilder removeRejectClass: MFClassA. . self deny: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). manifestBuilder addRejectRule: 'test'. self assert: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). manifestBuilder removeRejectRule: 'test'. self deny: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). manifestBuilder installFalsePositiveOf: 'test' version: 0. manifestBuilder addFalsePositive: mth of: 'test' version: 0. self assert: (manifestBuilder isFalsePositive: mth onRule: 'test' version:0 ). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18553305! testResetFalsePositive | manifestBuilder array| array := {MFClassA. MFClassB }. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installFalsePositiveOf: 'test' version: 0. manifestBuilder addAllFalsePositive: array of: 'test' version: 0. self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self assert: ((manifestBuilder falsePositiveOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder resetFalsePositiveOf: 'test' version: 0. self assert: (manifestBuilder manifest ruletestV0FalsePositive size = 0). ! ! !BuilderManifestTest methodsFor: 'tests' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 18554015! testResetToDo | manifestBuilder array| array := {MFClassA. MFClassB }. manifestBuilder := TheManifestBuilder of: MFClassA . manifestBuilder installToDoOf: 'test' version: 0. manifestBuilder addAllToDo: array of: 'test' version: 0. self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassA]). self assert: ((manifestBuilder toDoOf: 'test' version: 0) anySatisfy: [:each| each = MFClassB]). manifestBuilder resetToDoOf: 'test' version: 0. self assert: (manifestBuilder manifest ruletestV0TODO size = 0). ! ! !DropListExample class methodsFor: 'example' stamp: 'HernanMoralesDurand 2/3/2014 00:08'! example "self example" DropListExample new openWithSpec. ! ! !ScrollSyncExample class methodsFor: 'example' stamp: 'HernanMoralesDurand 2/3/2014 00:09'! example "self example" ScrollSyncExample new openWithSpec. ! ! !TheManifestBuilder commentStamp: 'StephaneDucasse 1/6/2014 20:52' prior: 81152072! I'm a tool to build manifest that handles small lint false positive and other information. My name is strange but this is to avoid to match with a Manifest class which is recognized because it starts with Manifest*. ! !TheManifestBuilder class methodsFor: 'utils'! allManifestClasses ^ Smalltalk allClasses select: [:class | class isManifest]! ! !TheManifestBuilder class methodsFor: 'utils'! falsePositiveBeginningTag "the string that identifies uniquely the beginning of a selector who give the set of false positive for a rule" ^ 'rule'! ! !TheManifestBuilder class methodsFor: 'utils'! falsePositiveEndTag "the string that identifies uniquely the end of a selector who give the set of false positive for a rule" ^ 'FalsePositive'! ! !TheManifestBuilder class methodsFor: 'utils'! falsePositiveMiddleTag "the string that identifies uniquely the middle of a selector who give the set of false positive for a rule" ^ 'V'! ! !TheManifestBuilder class methodsFor: 'instance creation' stamp: 'SimonAllier 2/1/2013 11:38'! hasManifestFor: aItem ^ (self new manifestOf: aItem) isNil not ! ! !TheManifestBuilder class methodsFor: 'instance creation' stamp: 'SimonAllier 2/1/2013 11:34'! hasPackageNamed: aPackageName ^ self allManifestClasses anySatisfy: [:each | each category = aPackageName ] ! ! !TheManifestBuilder class methodsFor: 'utils' stamp: 'SimonAllier 3/22/2013 13:37'! manifestClassComment ^ 'I stores metadata on true and false positive critics. These meta data are used by the SmalllintManifestChecker and the critics Browser'! ! !TheManifestBuilder class methodsFor: 'utils'! manifestTag "the string that identifies uniquely the beginning of a Manifest class name" ^ 'Manifest'! ! !TheManifestBuilder class methodsFor: 'instance creation' stamp: 'ClementBera 7/26/2013 16:13'! of: aItem | mb | mb := self new. (mb manifestOf: aItem) ifNil: [mb createManifestOf: aItem] ifNotNil: [ mb isObsoleteManifest ifTrue: [ mb manifest theNonMetaClass removeFromSystem. mb createManifestOf: aItem]]. ^ mb ! ! !TheManifestBuilder class methodsFor: 'instance creation' stamp: 'GabrielOmarCotelli 11/30/2013 16:05'! ofPackageNamed: aPackageName | builder | builder := self new. self allManifestClasses detect: [ :each | each category = aPackageName ] ifFound: [ :manifestClass | builder manifestClass: manifestClass ] ifNone: [ builder createManifestNamed: aPackageName ]. ^ builder! ! !TheManifestBuilder class methodsFor: 'utils'! rejectClassesTag "the string that identifies uniquely the beginning of a selector who give the set of rejected classes" ^ 'rejectClasses'! ! !TheManifestBuilder class methodsFor: 'utils'! rejectRulesTag "the string that identifies uniquely the beginning of a selector who give the set of rejected rules" ^ 'rejectRules'! ! !TheManifestBuilder class methodsFor: 'utils'! toDoBeginningTag "the string that identifies uniquely the beginning of a selector who give the set of TODO for a rule" ^ 'rule'! ! !TheManifestBuilder class methodsFor: 'utils'! toDoEndTag "the string that identifies uniquely the end of a selector who give the set of TODO for a rule" ^ 'TODO'! ! !TheManifestBuilder class methodsFor: 'utils'! toDoMiddleTag "the string that identifies uniquely the middle of a selector who give the set of TODO for a rule" ^ 'V'! ! !TheManifestBuilder class methodsFor: 'utils'! truePositiveEndTag "the string that identifies uniquely the end of a selector who give the set of false positive for a rule" ^ 'TruePositive'! ! !TheManifestBuilder methodsFor: 'comparing' stamp: 'StephaneDucasse 3/21/2013 10:24'! = aObject ^ aObject class = self class and: [ manifestClass = aObject manifest ]! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 3/21/2013 14:41'! addAllFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addAllItem: fp selector: selector. fp do: [:each | (self containsToDo: each onRule: ruleId version: versionId) ifTrue: [ self removeToDo: each of: ruleId version: versionId ]] ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:37'! addAllItem: aSet selector: selector | set newSet arrayString | set := (manifestClass perform: selector) asOrderedCollection. newSet := aSet \ (self unwrap: set). newSet isEmpty ifTrue: [ ^ self ]. set addAll: (newSet collect: [ :fp | {(fp asRingDefinition arrayStringForManifest). (DateAndTime current asString)} ]). arrayString := self buildArrayString: set. self compileSelector: selector returnValue: arrayString! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 09:47'! addAllToDo: aSet of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self addAllItem: aSet selector: selector. ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 09:59'! addFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [self removeToDo: fp of: ruleId version: versionId]. ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 8/1/2012 15:14'! addItem: fp selector: selector self addAllItem: {fp} selector: selector! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:25'! addRejectClass: aClass | falsePositives | falsePositives := manifestClass rejectClasses asOrderedCollection . ((self unwrap: falsePositives) anySatisfy: [:each | each = aClass]) ifTrue: [ ^ self ]. falsePositives add: {aClass asRingDefinition arrayStringForManifest. DateAndTime current asString}. self compileSelector: (self class rejectClassesTag) returnValue: (self buildArrayString: falsePositives) ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:11'! addRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asSet. nfp add: ruleId. nfp := nfp asArray. self compileSelector: (self class rejectRulesTag) returnValue: nfp asString ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:01'! addToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsFalsePositive: fp onRule: ruleId version: versionId) ifTrue: [ self removeFalsePositive: fp of: ruleId version: versionId ]! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02'! addTruePositive: fp of: ruleId version: versionId | selector | selector := self selectorTruePositiveOf: ruleId version: versionId. self addItem: fp selector: selector. (self containsToDo: fp onRule: ruleId version: versionId) ifTrue: [ self removeToDo: fp of: ruleId version: versionId ]. (self containsFalsePositive: fp onRule: ruleId version: versionId) ifTrue: [ self removeFalsePositive: fp of: ruleId version: versionId ] ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 11:22'! buildArrayString: aCollection ^ String streamContents: [:stream | stream << '#('. aCollection do: [:each | stream nextPutAll: '#('. stream nextPutAll: each first printString. stream nextPutAll: ' '. stream nextPutAll: (each at: 2) asSymbol printString. stream nextPutAll: ') '.]. stream << ')']! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'MarcusDenker 5/4/2013 10:13'! cleanUp | tagfp | tagfp := self class falsePositiveBeginningTag. manifestClass class methodsDo: [ :method | ((method selector asString beginsWith: tagfp) or: [method selector asString beginsWith: tagfp]) ifTrue: [self removeObsoleteFalsePositiveOf: method] ] ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:37'! compileSelector: selector returnValue: arrayString manifestClass class compile: selector asString , Character cr asString , '^ ' , arrayString classified: 'meta data'! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:28'! containsFalsePositive: aItem onRule: ruleId version: versionId ^ (self hasFalsePositiveOf: ruleId version: versionId) and: [ (self falsePositiveOf: ruleId version: versionId) anySatisfy: [ :fp | fp = aItem ]] ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29'! containsRejectedClass: aClass ^ self rejectClasses anySatisfy: [ :cl | cl = aClass ]! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29'! containsRejectedRule: aRuleId ^ self rejectRules anySatisfy: [ :fp | fp = aRuleId ]! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29'! containsToDo: aItem onRule: ruleId version: versionId ^ (self hasToDoOf: ruleId version: versionId) and: [(self toDoOf: ruleId version: versionId) anySatisfy: [ :fp| fp = aItem ]] ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:29'! containsTruePositive: aItem onRule: ruleId version: versionId ^ (self hasTruePositiveOf: ruleId version: versionId) and: [(self truePositiveOf: ruleId version: versionId) anySatisfy: [ :fp| fp = aItem ]] ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:39'! createManifestNamed: packageName manifestClass := Object subclass: (self class manifestTag, packageName onlyLetters) asSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: packageName. manifestClass comment: self class manifestClassComment. manifestClass class compile: (self class rejectClassesTag, Character cr asString, '^ #()') classified: 'meta data'. manifestClass class compile: (self class rejectRulesTag, Character cr asString, '^ #()') classified: 'meta data'. ^ manifestClass! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 1/30/2013 16:47'! createManifestOf: elem self createManifestNamed: (self packageNameOf: elem).! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 13:21'! dateOf: ringobject forSelector: aSelector | critics | critics := manifestClass perform: aSelector. ^ ((critics detect: [:each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = ringobject ]) at: 2) asDateAndTime ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:22'! dateOfFalsePositive: aItem onRule: ruleId version: versionId (self hasFalsePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorFalsePositiveOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:23'! dateOfToDo: aItem onRule: ruleId version: versionId (self hasToDoOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorToDoOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:23'! dateOfTruePositive: aItem onRule: ruleId version: versionId (self hasTruePositiveOf: ruleId version: versionId) ifFalse: [^ self]. ^ self dateOf: ( aItem asRingDefinition) forSelector: (self selectorTruePositiveOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:32'! falsePositiveOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorFalsePositiveOf: ruleId version: versionId))! ! !TheManifestBuilder methodsFor: 'manifest'! hasFalsePositiveOf: ruleId version: versionId ^ manifestClass respondsTo: (self selectorFalsePositiveOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'manifest'! hasToDoOf: ruleId version: versionId ^ manifestClass respondsTo: (self selectorToDoOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'manifest'! hasTruePositiveOf: ruleId version: versionId ^ manifestClass respondsTo: (self selectorTruePositiveOf: ruleId version: versionId) ! ! !TheManifestBuilder methodsFor: 'comparing' stamp: 'SimonAllier 3/21/2013 14:07'! hash ^ manifestClass hash bitXor: self class hash! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:12'! installFalsePositiveOf: ruleId version: versionId self compileSelector: (self selectorFalsePositiveOf: ruleId version: versionId) returnValue: '#()' ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:13'! installToDoOf: ruleId version: versionId self compileSelector: (self selectorToDoOf: ruleId version: versionId) returnValue: '#()' ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'SimonAllier 3/22/2013 13:13'! installTruePositiveOf: ruleId version: versionId self compileSelector: (self selectorTruePositiveOf: ruleId version: versionId) returnValue: '#()' ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 12:41'! isFalsePositive: aItem onRule: ruleId version: versionId ^ ((self containsFalsePositive: aItem onRule: ruleId version: versionId) or: [(self containsRejectedRule: ruleId) or: [self containsRejectedClass: aItem criticClass]])! ! !TheManifestBuilder methodsFor: 'private' stamp: 'MarcusDenker 5/10/2013 00:24'! isObsoleteManifest | methodDico | methodDico := manifestClass class methodDict. ^ methodDico isEmpty or: [methodDico anySatisfy: [:method | |selector| selector := method selector. (#(#rejectClass. #rejectRules) includes: selector) ifTrue: [ false ] ifFalse: [ (manifestClass perform: selector) anySatisfy: [ :each | each first first = (Character value: 40)]]] ]! ! !TheManifestBuilder methodsFor: 'accessing'! manifest ^ manifestClass! ! !TheManifestBuilder methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:47'! manifestClass: aClass manifestClass := aClass ! ! !TheManifestBuilder methodsFor: 'accessing' stamp: 'StephaneDucasse 3/21/2013 09:47'! manifestOf: elem | packageName | packageName := self packageNameOf: elem. manifestClass := self class allManifestClasses detect: [ :each | each category = packageName ] ifNone: [ nil ]. ^ manifestClass ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 3/21/2013 15:20'! packageNameOf: elem ^ elem mcWorkingCopy packageName "elem isCompiledMethod ifTrue: [MCWorkingCopy managersForClass: (elem methodClass) selector: (elem selector) do: [: package | ^ package packageName ]] ifFalse: [MCWorkingCopy managersForClass: elem do: [: package | ^ package packageName ]] "! ! !TheManifestBuilder methodsFor: 'printing' stamp: 'StephaneDucasse 3/21/2013 10:34'! printOn: aStream aStream nextPutAll: 'ManifestBuilder of '; nextPutAll: manifestClass name! ! !TheManifestBuilder methodsFor: 'manifest'! rejectClasses ^ self unwrap: (manifestClass rejectClasses) ! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33'! rejectRules ^ (manifestClass respondsTo: #rejectRules) ifTrue: [manifestClass rejectRules ] ifFalse: [ #() ] ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02'! removeAllFalsePositive: aSet of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf:ruleId version: versionId. self removeAllItem: aSet selector: selector. ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:39'! removeAllItem: aSet selector: selector | set arrayString | set := (manifestClass perform: selector) asOrderedCollection. set := set reject: [ :each | | tmp | tmp := (Smalltalk globals at: each first first) manifestReadOn: (each first at: 2). aSet anySatisfy: [ :fp | tmp = fp asRingDefinition ] ]. arrayString := self buildArrayString: set. self compileSelector: selector returnValue: arrayString! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 4/13/2012 17:13'! removeAllManifest self removeClasses: (self class allManifestClasses)! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:02'! removeAllToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf: ruleId version: versionId. self removeAllItem: fp selector: selector. ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:03'! removeFalsePositive: fp of: ruleId version: versionId | selector | selector := self selectorFalsePositiveOf: ruleId version: versionId. self removeItem: fp selector: selector. ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 8/1/2012 15:17'! removeItem: fp selector: selector self removeAllItem: {fp} selector: selector! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:22'! removeManifestOf: aItem (self manifestOf: aItem) ifNotNil: [ :manifest | self removeClass: manifest ]! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40'! removeObsoleteFalsePositiveOf: aMethod | set arrayString | set := (manifestClass perform: aMethod selector) asOrderedCollection. set := set select: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) isDefined ]. arrayString := self buildArrayString: set. self compileSelector: aMethod selector returnValue: arrayString ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:14'! removeRejectClass: aClass | classes | classes := manifestClass rejectClasses asOrderedCollection. classes := classes reject: [ :each | ((Smalltalk globals at: each first first) manifestReadOn: (each first at: 2)) = aClass asRingDefinition ]. self compileSelector: (self class rejectClassesTag) returnValue: (self buildArrayString: classes) ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 3/22/2013 13:14'! removeRejectRule: ruleId | nfp | nfp := manifestClass rejectRules asOrderedCollection. nfp remove: ruleId ifAbsent: [^ self]. nfp := nfp asArray. self compileSelector: (self class rejectRulesTag) returnValue: nfp asString ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'StephaneDucasse 3/21/2013 10:24'! removeToDo: fp of: ruleId version: versionId | selector | selector := self selectorToDoOf:ruleId version: versionId. self removeItem: fp selector: selector. ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 5/29/2012 11:19'! resetFalsePositiveOf: ruleId version: versionId self installFalsePositiveOf: ruleId version: versionId. ! ! !TheManifestBuilder methodsFor: 'adding/removing' stamp: 'SimonAllier 5/29/2012 11:21'! resetToDoOf: ruleId version: versionId self installToDoOf: ruleId version: versionId. ! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40'! selectorFalsePositiveOf: ruleId version: versionId ^ (self class falsePositiveBeginningTag, ruleId, self class falsePositiveMiddleTag, versionId asString, self class falsePositiveEndTag) asSymbol.! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:40'! selectorToDoOf: ruleId version: versionId ^ (self class toDoBeginningTag, ruleId , self class toDoMiddleTag, versionId asString, self class toDoEndTag) asSymbol.! ! !TheManifestBuilder methodsFor: 'private' stamp: 'StephaneDucasse 3/21/2013 10:41'! selectorTruePositiveOf: ruleId version: versionId ^ (self class falsePositiveBeginningTag, ruleId , self class falsePositiveMiddleTag, versionId asString, self class truePositiveEndTag) asSymbol.! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33'! toDoOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorToDoOf: ruleId version: versionId))! ! !TheManifestBuilder methodsFor: 'manifest' stamp: 'StephaneDucasse 3/21/2013 10:33'! truePositiveOf: ruleId version: versionId ^ self unwrap: (manifestClass perform: (self selectorTruePositiveOf: ruleId version: versionId))! ! !TheManifestBuilder methodsFor: 'private' stamp: 'SimonAllier 3/22/2013 13:43'! unwrap: aCollection | unwrapCollection rgobject | unwrapCollection := OrderedCollection new. aCollection do: [ :each | rgobject := (Smalltalk globals at: each first first) manifestReadOn: (each first at: 2). (rgobject isClass and: [ rgobject realClass notNil ]) ifTrue: [ unwrapCollection add: rgobject realClass ]. (rgobject isMethod and: [ rgobject method notNil ]) ifTrue: [ unwrapCollection add: rgobject method ] ]. ^ unwrapCollection! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 25332576! ruleBadMessageRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#TheManifestBuilder #hasTruePositiveOf:version: #false)) #'2013-02-01T15:29:51.978000008+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #hasFalsePositiveOf:version: #false)) #'2013-02-01T15:29:51.978000006+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #rejectRules #false)) #'2013-02-01T15:29:51.978000007+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #hasToDoOf:version: #false)) #'2013-02-01T15:29:51.978000005+01:00') )! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 25333167! ruleCodeCruftLeftInMethodsRuleV1TODO ^ #(#(#(#RGMethodDefinition #(#TheManifestBuilder #hash #false)) #'2013-02-06T15:08:33.234+01:00') )! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 25333395! ruleConsistencyCheckRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#TheManifestBuilder #addItem:wihtComment:selector: #false)) #'2013-02-01T15:29:51.672000001+01:00') #(#(#RGMethodDefinition #(#'RGMetaclassDefinition class' #manifestReadOn: #true)) #'2013-02-01T15:29:51.672000002+01:00') #(#(#RGMethodDefinition #(#'RGMethodDefinition class' #manifestReadOn: #true)) #'2013-02-01T15:29:51.672000003+01:00') )! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 25333898! ruleContainsRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#TheManifestBuilder #commentOfFalsePositive:onRule:version: #false)) #'2013-02-01T15:29:52.876+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #commentOfToDo:onRule:version: #false)) #'2013-02-01T15:29:52.876000001+01:00') #(#(#RGMethodDefinition #(#SmalllintManifestChecker #criticsOf: #false)) #'2013-02-08T16:35:58.019+01:00') )! ! !ManifestManifestCore class methodsFor: 'meta data' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 25350640! ruleImplementedNotSentRuleV1FalsePositive ^ #(#(#(#RGMethodDefinition #(#TheManifestBuilder #addTruePositive:of:version: #false)) #'2013-02-01T15:29:52.678000007+01:00') #(#(#RGMethodDefinition #(#SmalllintManifestChecker #isTruePositive:forRuleId:versionId: #false)) #'2013-02-01T15:29:52.678000011+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #removeManifestOf: #false)) #'2013-02-01T15:29:52.678000012+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #dateOfToDo:onRule:version: #false)) #'2013-02-01T15:29:52.678000013+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #dateOfTruePositive:onRule:version: #false)) #'2013-02-01T15:29:52.67800001+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #removeAllManifest #false)) #'2013-02-01T15:29:52.678000006+01:00') #(#(#RGMethodDefinition #(#'RBLintRule class' #uniqueIdentifierNumber #true)) #'2013-02-01T15:29:52.678000008+01:00') #(#(#RGMethodDefinition #(#TheManifestBuilder #installTruePositiveOf:version: #false)) #'2013-02-01T15:29:52.678000009+01:00') )! ! !SmalllintManifestChecker methodsFor: 'accessing' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 33928135! builderManifestClass ^ TheManifestBuilder! ! !SmalllintManifestCheckerTest methodsFor: 'running' stamp: 'StephaneDucasse 1/6/2014 20:51' prior: 49650865! setUp | bm | self cleaningResources. bm := TheManifestBuilder of: MFClassA. bm installFalsePositiveOf: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm addFalsePositive: MFClassB >> #method3 of: RBCodeCruftLeftInMethodsRule uniqueIdentifierName version: 1. bm installToDoOf: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. bm addAllToDo: {(MFClassB >> #method3). (MFClassA >> #method)} of: RBOnlyReadOrWrittenTemporaryRule uniqueIdentifierName version: 1. checker := SmalllintManifestChecker new! ! BuilderManifest removeSelector: #unwrap:! BuilderManifest removeSelector: #truePositiveOf:version:! BuilderManifest removeSelector: #toDoOf:version:! BuilderManifest removeSelector: #selectorTruePositiveOf:version:! BuilderManifest removeSelector: #selectorToDoOf:version:! BuilderManifest removeSelector: #selectorFalsePositiveOf:version:! BuilderManifest removeSelector: #resetToDoOf:version:! BuilderManifest removeSelector: #resetFalsePositiveOf:version:! BuilderManifest removeSelector: #removeToDo:of:version:! BuilderManifest removeSelector: #removeRejectRule:! BuilderManifest removeSelector: #removeRejectClass:! BuilderManifest removeSelector: #removeObsoleteFalsePositiveOf:! BuilderManifest removeSelector: #removeManifestOf:! BuilderManifest removeSelector: #removeItem:selector:! BuilderManifest removeSelector: #removeFalsePositive:of:version:! BuilderManifest removeSelector: #removeAllToDo:of:version:! BuilderManifest removeSelector: #removeAllManifest! BuilderManifest removeSelector: #removeAllItem:selector:! BuilderManifest removeSelector: #removeAllFalsePositive:of:version:! BuilderManifest removeSelector: #rejectRules! BuilderManifest removeSelector: #rejectClasses! BuilderManifest removeSelector: #printOn:! BuilderManifest removeSelector: #packageNameOf:! BuilderManifest removeSelector: #manifestOf:! BuilderManifest removeSelector: #manifestClass:! BuilderManifest removeSelector: #manifest! BuilderManifest removeSelector: #isObsoleteManifest! BuilderManifest removeSelector: #isFalsePositive:onRule:version:! BuilderManifest removeSelector: #installTruePositiveOf:version:! BuilderManifest removeSelector: #installToDoOf:version:! BuilderManifest removeSelector: #installFalsePositiveOf:version:! BuilderManifest removeSelector: #hash! BuilderManifest removeSelector: #hasTruePositiveOf:version:! BuilderManifest removeSelector: #hasToDoOf:version:! BuilderManifest removeSelector: #hasFalsePositiveOf:version:! BuilderManifest removeSelector: #falsePositiveOf:version:! BuilderManifest removeSelector: #dateOfTruePositive:onRule:version:! BuilderManifest removeSelector: #dateOfToDo:onRule:version:! BuilderManifest removeSelector: #dateOfFalsePositive:onRule:version:! BuilderManifest removeSelector: #dateOf:forSelector:! BuilderManifest removeSelector: #createManifestOf:! BuilderManifest removeSelector: #createManifestNamed:! BuilderManifest removeSelector: #containsTruePositive:onRule:version:! BuilderManifest removeSelector: #containsToDo:onRule:version:! BuilderManifest removeSelector: #containsRejectedRule:! BuilderManifest removeSelector: #containsRejectedClass:! BuilderManifest removeSelector: #containsFalsePositive:onRule:version:! BuilderManifest removeSelector: #compileSelector:returnValue:! BuilderManifest removeSelector: #cleanUp! BuilderManifest removeSelector: #buildArrayString:! BuilderManifest removeSelector: #addTruePositive:of:version:! BuilderManifest removeSelector: #addToDo:of:version:! BuilderManifest removeSelector: #addRejectRule:! BuilderManifest removeSelector: #addRejectClass:! BuilderManifest removeSelector: #addItem:selector:! BuilderManifest removeSelector: #addFalsePositive:of:version:! BuilderManifest removeSelector: #addAllToDo:of:version:! BuilderManifest removeSelector: #addAllItem:selector:! BuilderManifest removeSelector: #addAllFalsePositive:of:version:! BuilderManifest removeSelector: #=! BuilderManifest class removeSelector: #truePositiveEndTag! BuilderManifest class removeSelector: #toDoMiddleTag! BuilderManifest class removeSelector: #toDoEndTag! BuilderManifest class removeSelector: #toDoBeginningTag! BuilderManifest class removeSelector: #rejectRulesTag! BuilderManifest class removeSelector: #rejectClassesTag! BuilderManifest class removeSelector: #ofPackageNamed:! BuilderManifest class removeSelector: #of:! BuilderManifest class removeSelector: #manifestTag! BuilderManifest class removeSelector: #manifestClassComment! BuilderManifest class removeSelector: #hasPackageNamed:! BuilderManifest class removeSelector: #hasManifestFor:! BuilderManifest class removeSelector: #falsePositiveMiddleTag! BuilderManifest class removeSelector: #falsePositiveEndTag! BuilderManifest class removeSelector: #falsePositiveBeginningTag! BuilderManifest class removeSelector: #allManifestClasses! Smalltalk globals removeClassNamed: #BuilderManifest! "Manifest-Core"! "Manifest-CriticBrowser"! "Manifest-Tests"! "Refactoring-Critics"! "Spec-Examples"! ----End fileIn----! ----QUIT----2014-02-03T18:05:46.163522+01:00 Pharo.image priorSource: 30808506! ----STARTUP----2014-02-03T18:05:46.367656+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-03T18:05:50.245657+01:00 Pharo.image priorSource: 30865556! ----STARTUP----2014-02-03T18:11:09.026192+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-03T18:11:09.288176+01:00 Pharo-30739.image priorSource: 30865753! ----STARTUP----2014-02-04T10:13:45.242376+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/4/2014 10:09' prior: 81140451! commentForCurrentUpdate ^ '12778 NB generated code user initials https://pharo.fogbugz.com/f/cases/12778 12788 Please review ProtocolClient(class)>>retrieveMIMEDocument: https://pharo.fogbugz.com/f/cases/12788 12781 Class comment missing for package Compression https://pharo.fogbugz.com/f/cases/12781 12787 Class comment missing in package Morphic-Examples https://pharo.fogbugz.com/f/cases/12787 12785 Class comment missing in Smart suggestions package https://pharo.fogbugz.com/f/cases/12785 12784 Class comment missing in File package https://pharo.fogbugz.com/f/cases/12784 12737 Morph sends mouseUp twice to handlers https://pharo.fogbugz.com/f/cases/12737 12782 Class comments missing in Deprecated package https://pharo.fogbugz.com/f/cases/12782 12783 Class comments missing in Fuel package https://pharo.fogbugz.com/f/cases/12783 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/4/2014 10:10'! script393 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.13.mcz Athens-Cairo-MarcusDenker.51.mcz Athens-CairoPools-MarcusDenker.9.mcz Athens-Core-StephaneDucasse.40.mcz Athens-Examples-MarcusDenker.26.mcz Athens-Morphic-SvenVanCaekenberghe.25.mcz Athens-Text-MarcusDenker.7.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.64.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.99.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1407.mcz ToolsTest-MarcusDenker.denker.65.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/4/2014 10:10'! update30740 "self new update30740" self withUpdateLog: '12778 NB generated code user initials https://pharo.fogbugz.com/f/cases/12778 12788 Please review ProtocolClient(class)>>retrieveMIMEDocument: https://pharo.fogbugz.com/f/cases/12788 12781 Class comment missing for package Compression https://pharo.fogbugz.com/f/cases/12781 12787 Class comment missing in package Morphic-Examples https://pharo.fogbugz.com/f/cases/12787 12785 Class comment missing in Smart suggestions package https://pharo.fogbugz.com/f/cases/12785 12784 Class comment missing in File package https://pharo.fogbugz.com/f/cases/12784 12737 Morph sends mouseUp twice to handlers https://pharo.fogbugz.com/f/cases/12737 12782 Class comments missing in Deprecated package https://pharo.fogbugz.com/f/cases/12782 12783 Class comments missing in Fuel package https://pharo.fogbugz.com/f/cases/12783 '. self loadTogether: self script393 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MailSender commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 0! A mail sender! !HttpsUrl commentStamp: 'TorstenBergmann 2/3/2014 23:10' prior: 0! An Https Url! !FLIndexStreamTest commentStamp: 'TorstenBergmann 2/3/2014 23:22' prior: 0! SUnit tests for index streams! !FLSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:24' prior: 0! Superclass for serialization tests! !FLBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:24' prior: 0! SUnit tests for basic fuel serialization! !FLGZippedBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:25' prior: 0! SUnit tests for basic serialization that is zipped! !FLInMemoryBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:25' prior: 0! SUnit tests for basic in memory serialization! !FLBlockClosureSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 0! SUnit tests for fuel serialization of block closures! !FLGlobalEnvironmentTest commentStamp: 'TorstenBergmann 2/3/2014 23:27' prior: 0! SUnit tests for global fuel environment! !FLGlobalSendSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 0! SUnit tests for fuel serialization of global sends! !FLHashedCollectionSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 0! SUnit tests for fuel serialization of hashed collections! !FLHeaderSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 0! SUnit tests for header serialization in fuel! !FLHookedSubstitutionTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 0! SUnit tests for hooked serialization using fuel! !FLMethodContextSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 0! SUnit tests for fuel serialization of methods contexts! !FLPluggableSubstitutionTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 0! SUnit tests for fuels pluggable substitutions! !FLSignatureTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 0! SUnit tests for fuel serializations, here signatures! !FLSingletonTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 0! SUnit tests for fuel serialization of singletons! !FLSortedCollectionSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:30' prior: 0! SUnit tests for fuel serialization of sorted collections! !FLUserGuidesTest commentStamp: 'TorstenBergmann 2/3/2014 23:30' prior: 0! SUnit tests to guide users with fuel serialization! !FLVersionTest commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 0! SUnit tests for fuel versioning! !FLWeakObjectsTest commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 0! SUnit tests for fuel serialization of weak objects! !SugsContextTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 0! SUnit tests for the Smart suggestions context! !SugsMenuBuilderTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 0! SUnit tests for the Smart suggestions menu builder! !SugsSuggestionTest commentStamp: 'TorstenBergmann 2/3/2014 23:42' prior: 0! Superclass for SUnit tests for smart suggestions! !SugsSuggestionCreateAccessorsTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 0! SUnit tests for accessor creation! !SugsSuggestionDelegateTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 0! SUnit tests for smart suggestions delegates! !SugsSuggestionExtractLocalTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 0! SUnit tests for extract locale suggestion! !SugsSuggestionPushDownTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 0! SUnit test for the push down suggestions! !SugsSuggestionRemoveArgTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 0! SUnit tests for the remove argument suggestion! !SugsSuggestionSwapMethodTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 0! SUnit tests for the swap method suggestion! !ZipArchiveTest commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 0! SUnit tests for ZIP archives! !FLIgnoredVariablesTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 0! SUnit tests for serialization with ignored variables! !FLMigrationTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 0! SUnit tests for migrations! !FLNegative16SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 0! A cluster of unsigned int 16bit! !FLNegative24SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 0! A cluster of unsigned int 24bit! !FLNegative32SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 0! A cluster of unsigned int 32bit! !FLNegative8SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 0! A cluster of unsigned int 8bit! !FLPositive16SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 0! unsigned, 16-bit integer cluster! !FLPositive24SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 0! unsigned, 24-bit integer! !FLPositive32SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 0! unsigned, 32-bit integer! !FLPositive8SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 0! unsigned, 8-bit integer! !ZLibReadStream commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 0! A ZLib read stream! !ZipEncoder commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 0! A ZIP encoder! !ZipWriteStream commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 0! A ZIP write stream! !ClassListNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 0! Example for a class list node! !ClassTreeNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 0! Example for class tree nodes! !PackageAbstractNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 0! Example for abstract package nodes! !PackageClassNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a package class node! !PackageMethodCategoryNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a package method node! !PackageMethodNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a package method node! !PackageNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a pakage node! !SimpleGridNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a simple grid node! !TarArchiveMember commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 0! A member of a TAR archive! !FtpUrl commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 0! An FTP Url! !SimplestPaginatedClassListExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 0! Example for a paginated class list! !FLClassWithRecursiveSubstitution commentStamp: 'TorstenBergmann 2/3/2014 23:21' prior: 0! A test mock for a class with recursive substitution! !FLGlobalSendMock commentStamp: 'TorstenBergmann 2/3/2014 23:21' prior: 0! A mock for a global send! !FLGlobalSendNotPresentMock commentStamp: 'TorstenBergmann 2/3/2014 23:22' prior: 0! A test mock where a global send is not present! !FLNotSerializableMock commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 0! A test mock which is not serializable! !FLPair commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 0! A test mock for pairs! !FLWeakClassMock commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 0! Test mock for a weak class! !FLSingletonMock commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 0! A mock for a singleton! !FLSingletonMockEnforced commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 0! A test mock where a new instance is enforced! !ManifestFuel commentStamp: 'TorstenBergmann 2/3/2014 23:17' prior: 0! Manifest for Fuel package! !PersonDataExample commentStamp: 'TorstenBergmann 2/3/2014 23:52' prior: 0! Data object for a grid example! !WidgetExamples commentStamp: 'TorstenBergmann 2/3/2014 23:53' prior: 0! Examples for different widgets! !CRCError commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 0! CRC failed! !FileStreamException commentStamp: 'TorstenBergmann 2/3/2014 23:36' prior: 0! Common superclass for exceptions while using file streams! !CannotDeleteFileException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 0! Notfify when not able to delete! !FileDoesNotExistException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 0! Notify when fie does not exist! !FileExistsException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 0! Notify when file exists! !FileWriteError commentStamp: 'TorstenBergmann 2/3/2014 23:38' prior: 0! Notify about an error when trying to attempt to write to a file! !InvalidDirectoryError commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 0! Error when accessing an invalid directory! !MailSender commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 81210716! A mail sender! !HttpsUrl commentStamp: 'TorstenBergmann 2/3/2014 23:10' prior: 81210798! An Https Url! !FLIndexStreamTest commentStamp: 'TorstenBergmann 2/3/2014 23:22' prior: 81210888! SUnit tests for index streams! !FLSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:24' prior: 81210997! Superclass for serialization tests! !FLBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:24' prior: 81211116! SUnit tests for basic fuel serialization! !FLGZippedBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:25' prior: 81211248! SUnit tests for basic serialization that is zipped! !FLInMemoryBasicSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:25' prior: 81211391! SUnit tests for basic in memory serialization! !FLBlockClosureSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 81211528! SUnit tests for fuel serialization of block closures! !FLGlobalEnvironmentTest commentStamp: 'TorstenBergmann 2/3/2014 23:27' prior: 81211664! SUnit tests for global fuel environment! !FLGlobalSendSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 81211793! SUnit tests for fuel serialization of global sends! !FLHashedCollectionSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 81211939! SUnit tests for fuel serialization of hashed collections! !FLHeaderSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 81212081! SUnit tests for header serialization in fuel! !FLHookedSubstitutionTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 81212210! SUnit tests for hooked serialization using fuel! !FLMethodContextSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:32' prior: 81212350! SUnit tests for fuel serialization of methods contexts! !FLPluggableSubstitutionTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 81212492! SUnit tests for fuels pluggable substitutions! !FLSignatureTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 81212613! SUnit tests for fuel serializations, here signatures! !FLSingletonTest commentStamp: 'TorstenBergmann 2/3/2014 23:31' prior: 81212743! SUnit tests for fuel serialization of singletons! !FLSortedCollectionSerializationTest commentStamp: 'TorstenBergmann 2/3/2014 23:30' prior: 81212887! SUnit tests for fuel serialization of sorted collections! !FLUserGuidesTest commentStamp: 'TorstenBergmann 2/3/2014 23:30' prior: 81213020! SUnit tests to guide users with fuel serialization! !FLVersionTest commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 81213144! SUnit tests for fuel versioning! !FLWeakObjectsTest commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 81213253! SUnit tests for fuel serialization of weak objects! !SugsContextTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 81213379! SUnit tests for the Smart suggestions context! !SugsMenuBuilderTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 81213504! SUnit tests for the Smart suggestions menu builder! !SugsSuggestionTest commentStamp: 'TorstenBergmann 2/3/2014 23:42' prior: 81213633! Superclass for SUnit tests for smart suggestions! !SugsSuggestionCreateAccessorsTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 81213775! SUnit tests for accessor creation! !SugsSuggestionDelegateTest commentStamp: 'TorstenBergmann 2/3/2014 23:43' prior: 81213895! SUnit tests for smart suggestions delegates! !SugsSuggestionExtractLocalTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 81214029! SUnit tests for extract locale suggestion! !SugsSuggestionPushDownTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 81214157! SUnit test for the push down suggestions! !SugsSuggestionRemoveArgTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 81214285! SUnit tests for the remove argument suggestion! !SugsSuggestionSwapMethodTest commentStamp: 'TorstenBergmann 2/3/2014 23:44' prior: 81214420! SUnit tests for the swap method suggestion! !ZipArchiveTest commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 81214537! SUnit tests for ZIP archives! !FLIgnoredVariablesTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 81214648! SUnit tests for serialization with ignored variables! !FLMigrationTest commentStamp: 'TorstenBergmann 2/3/2014 23:26' prior: 81214776! SUnit tests for migrations! !NBExternalArray class methodsFor: 'private' stamp: 'IgorStasenko 2/3/2014 18:16' prior: 48777720! installAccessors "Copy superclass methods, which serve as a template where generated code will be installed. Each subclass of NBExternalArray should implement (override) these key methods " Author useAuthor: 'NativeBoost' during: [ self basicAddSelector: #at: withMethod: (NBExternalArray >> #at: ) copy. self basicAddSelector: #at:put: withMethod: (NBExternalArray >> #at:put: ) copy. self organization classify: #at: under: NativeBoost automaticallyGeneratedCodeCategory. self organization classify: #at:put: under: NativeBoost automaticallyGeneratedCodeCategory. ].! ! !FLNegative16SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 81214894! A cluster of unsigned int 16bit! !FLNegative24SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 81215017! A cluster of unsigned int 24bit! !FLNegative32SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 81215140! A cluster of unsigned int 32bit! !FLNegative8SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:19' prior: 81215262! A cluster of unsigned int 8bit! !FLPositive16SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 81215384! unsigned, 16-bit integer cluster! !FLPositive24SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 81215508! unsigned, 24-bit integer! !FLPositive32SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 81215624! unsigned, 32-bit integer! !FLPositive8SmallIntegerCluster commentStamp: 'TorstenBergmann 2/3/2014 23:20' prior: 81215739! unsigned, 8-bit integer! !ZLibReadStream commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 81215837! A ZLib read stream! !ZipEncoder commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 81215926! A ZIP encoder! !ZipWriteStream commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 81216014! A ZIP write stream! !ClassListNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 81216113! Example for a class list node! !ClassTreeNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 81216223! Example for class tree nodes! !PackageAbstractNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:56' prior: 81216338! Example for abstract package nodes! !PackageClassNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81216456! Example for a package class node! !PackageMethodCategoryNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81216581! Example for a package method node! !PackageMethodNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81216699! Example for a package method node! !PackageNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81216811! Example for a pakage node! !SimpleGridNodeExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81216918! Example for a simple grid node! !TarArchiveMember commentStamp: 'TorstenBergmann 2/3/2014 23:04' prior: 81217025! A member of a TAR archive! !Morph methodsFor: 'events-processing' stamp: 'SeanDeNigris 1/31/2014 18:38' prior: 74735543! handleMouseUp: anEvent "System level event handling." anEvent wasHandled ifTrue: [^self]. "not interested" anEvent hand mouseFocus == self ifFalse: [^self]. "Not interested in other parties" anEvent hand releaseMouseFocus: self. anEvent wasHandled: true. ^ anEvent blueButtonChanged ifTrue: [ self blueButtonUp: anEvent. self eventHandler ifNotNil: [:handler | handler mouseUp: anEvent fromMorph: self]] ifFalse: [ | result | result := self mouseUp: anEvent. self stopSteppingSelector: #handleMouseStillDown:. result ].! ! !Morph methodsFor: 'event handling' stamp: 'SeanDeNigris 1/31/2014 18:32' prior: 74783490! mouseUp: evt "Handle a mouse up event. The default response is to let my eventHandler, if any, handle it." ^ self eventHandler ifNotNil: [self eventHandler mouseUp: evt fromMorph: self]. ! ! !FtpUrl commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 81217117! An FTP Url! !SimplestPaginatedClassListExample commentStamp: 'TorstenBergmann 2/3/2014 23:55' prior: 81217221! Example for a paginated class list! !FLClassWithRecursiveSubstitution commentStamp: 'TorstenBergmann 2/3/2014 23:21' prior: 81217348! A test mock for a class with recursive substitution! !FLGlobalSendMock commentStamp: 'TorstenBergmann 2/3/2014 23:21' prior: 81217476! A mock for a global send! !FLGlobalSendNotPresentMock commentStamp: 'TorstenBergmann 2/3/2014 23:22' prior: 81217587! A test mock where a global send is not present! !FLNotSerializableMock commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 81217715! A test mock which is not serializable! !FLPair commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 81217819! A test mock for pairs! !FLWeakClassMock commentStamp: 'TorstenBergmann 2/3/2014 23:23' prior: 81217916! Test mock for a weak class! !FLSingletonMock commentStamp: 'TorstenBergmann 2/3/2014 23:28' prior: 81218018! A mock for a singleton! !FLSingletonMockEnforced commentStamp: 'TorstenBergmann 2/3/2014 23:29' prior: 81218124! A test mock where a new instance is enforced! !ManifestFuel commentStamp: 'TorstenBergmann 2/3/2014 23:17' prior: 81218241! Manifest for Fuel package! !PersonDataExample commentStamp: 'TorstenBergmann 2/3/2014 23:52' prior: 81218344! Data object for a grid example! !WidgetExamples commentStamp: 'TorstenBergmann 2/3/2014 23:53' prior: 81218449! Examples for different widgets! !NBExternalTypeValue class methodsFor: 'private' stamp: 'IgorStasenko 2/3/2014 18:16' prior: 48776910! installAccessors "Copy superclass methods, which serve as a template where generated code will be installed. Each subclass of NBTypeValue should implement (override) these key methods " Author useAuthor: 'NativeBoost' during: [ self basicAddSelector: #value withMethod: (NBExternalTypeValue >> #value ) copy. self basicAddSelector: #value: withMethod: (NBExternalTypeValue >> #value: ) copy. self organization classify: #value under: NativeBoost automaticallyGeneratedCodeCategory. self organization classify: #value: under: NativeBoost automaticallyGeneratedCodeCategory. ].! ! !CRCError commentStamp: 'TorstenBergmann 2/3/2014 23:03' prior: 81218548! CRC failed! !CRCError methodsFor: 'testing' stamp: 'nk 3/7/2004 15:56' prior: 18653851! isResumable ^true! ! !FileStreamException commentStamp: 'TorstenBergmann 2/3/2014 23:36' prior: 81218638! Common superclass for exceptions while using file streams! !CannotDeleteFileException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 81218781! Notfify when not able to delete! !FileDoesNotExistException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 81218898! Notify when fie does not exist! !FileExistsException commentStamp: 'TorstenBergmann 2/3/2014 23:37' prior: 81219008! Notify when file exists! !FileWriteError commentStamp: 'TorstenBergmann 2/3/2014 23:38' prior: 81219106! Notify about an error when trying to attempt to write to a file! !InvalidDirectoryError commentStamp: 'TorstenBergmann 2/3/2014 23:09' prior: 81219251! Error when accessing an invalid directory! !NBExternalStructure class methodsFor: 'managing accessors' stamp: 'IgorStasenko 2/3/2014 18:16' prior: 48774899! createAccessorsFor: fieldName "Define read/write accessors for the given field" | code | code := fieldName,' "This method was automatically generated" ^ self fieldAt: ' , fieldName printString. Author useAuthor: 'NativeBoost' during: [ self compileSilently: code classified: NativeBoost automaticallyGeneratedCodeCategory ]. code := fieldName,': anObject "This method was automatically generated" ^ self fieldAt: ' , fieldName printString , ' put: anObject'. Author useAuthor: 'NativeBoost' during: [ self compileSilently: code classified: NativeBoost automaticallyGeneratedCodeCategory ]. ! ! ProtocolClient class removeSelector: #retrieveMIMEDocument:! "Compression"! "Morphic-Core"! "NativeBoost-Core"! "Network-Protocols"! ----End fileIn----! ----QUIT----2014-02-04T10:13:51.720685+01:00 Pharo.image priorSource: 30865950! ----STARTUP----2014-02-04T10:13:51.89794+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-04T10:13:55.763935+01:00 Pharo.image priorSource: 30900262! ----STARTUP----2014-02-04T10:18:46.35626+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-04T10:18:46.608257+01:00 Pharo-30740.image priorSource: 30900458! ----STARTUP----2014-02-04T13:23:40.370094+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/4/2014 13:19' prior: 81197895! commentForCurrentUpdate ^ '12765 Athens font rendering missing letters and missizing others https://pharo.fogbugz.com/f/cases/12765'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/4/2014 13:20'! script394 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-MarcusDenker.90.mcz AST-Tests-Core-MarcusDenker.39.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.62.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.64.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.656.mcz FreeTypeTests-StephaneDucasse.3.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-MarcusDenker.58.mcz GroupManagerUI-MarcusDenker.28.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1715.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.99.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.152.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1407.mcz ToolsTest-MarcusDenker.denker.65.mcz Traits-MarcusDenker.625.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-MarcusDenker.4.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/4/2014 13:20'! update30741 "self new update30741" self withUpdateLog: '12765 Athens font rendering missing letters and missizing others https://pharo.fogbugz.com/f/cases/12765'. self loadTogether: self script394 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CairoGlyph commentStamp: '' prior: 0! i correspond to cairo_glyph_t structure: typedef struct { unsigned long index; double x; double y; } cairo_glyph_t;! !AthensCairoDefs commentStamp: '' prior: 43713706! i hold a lot of different constants needed to work with cairo library! !AthensFlakeDemo commentStamp: '' prior: 0! AthensFlakeDemo new openInWindow ! !AthensWrapMorph commentStamp: '' prior: 0! i making sure that all my submorphs will be drawn using athens, but not balloon. For that i use separate surface.! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPathBuilder commentStamp: '' prior: 43712174! i implement cairo-specific path builder. see my superclass for more details.! !AthensPaint commentStamp: '' prior: 42115859! I am a base class, which defines a paint. My subclasses represent a concreate paint by implementing my protocol, that actually draws a specific shapes with me. My subclasses usually backend-specific, but as long as you implement my protocol, any object can be treated as paint: - athensFillPath: aPath on: aCanvas - athensFillRectangle: aRectangle on: aCanvas - asStrokePaint ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensStrokePaint commentStamp: '' prior: 42121328! I representing a stroke paint object used by Athens. My subclasses provide backend-specific implementation. I am more serving to define the common protocols and requirements for all backends (such as defaults). IMPORTANT NOTE: a stroke paint object provides a protocol only for setting stroke properties, but not retrieving them back. This is intentionally, because the way how these properties is managed are highly backend-specific. The stroke paint has following properties: - fill paint. A paint to use for filling strokes. Can be any athens basic paint, except from stroke one. - stroke width. Can be set using #width: Default: if width is not set explicitly for stroke paint, it is assumed to be equal to 1.0. - join style. Currently there are 3 kinds of joins supported: bevel miter round To set join style for paint, use #joinBevel, #joinMiter or #joinRound methods. Default: if join style is not explicitly set for stroke paint, it will use bevel join style. - cap style supported: butt, round and square. To set cap style, use #capButt, #capRound or #capSquare methods. Default: if cap style is not explicitly set for stroke paint, it will use butt cap style. - miter limit, set with #miterLimit: accessor. (default and meaning of limit is not yet determined) Dashes: stroke can use dashing. Dash is special kind of stroke which won't draw a continuous stroke connecting path segments, but instead stroke with alternating fill-gap style , defined by provided input. Protocol: paint dashes: dashPattern offset: anOffset. The dash pattern is a simple collection of alternating lengths, like: #("fill" 50 "gap" 50) in this example , first 50 length units of path will be filled with stroke, and next 50 will be skipped, forming a gap, then again filled and again skipped, and so on until path ends. The dash pattern can contain as many length elements as needed. Just remember that each odd element represents length to fill with stroke, and each even element, length to skip, while traversing along the path. The offset controls the shift in length units, relative to path start. Default: if dash is not explicitly set for stroke paint, it will fill the path using continuous stroke (no gaps). ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoStrokePaint commentStamp: '' prior: 43713926! i represent stroke paint in cairo backend! !CairoGlyphsArray commentStamp: '' prior: 0! Captain obvious tells this is an array of CairoGlyph(s), corresponds to cairo_glyph_t structure: typedef struct { unsigned long index; double x; double y; } cairo_glyph_t;! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFreetypeFontRenderer commentStamp: '' prior: 43719939! i am used to render freetype font(s) with cairo library.! !CairoGlyph commentStamp: '' prior: 81243997! i correspond to cairo_glyph_t structure: typedef struct { unsigned long index; double x; double y; } cairo_glyph_t;! !CairoGlyph class methodsFor: 'fields description' stamp: 'IgorStasenko 8/14/2013 16:19'! fieldsDesc ^ #( ulong index; double x; double y; )! ! !AthensCairoDefs commentStamp: '' prior: 81244225! i hold a lot of different constants needed to work with cairo library! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2013 18:32' prior: 40407539! initialize " self initialize " self initialize_types; initialize_cairo_format_t; initialize_cairo_font_slant_t; initialize_cairo_font_weight_t; initialize_cairo_font_type_t ; initialize_cairo_operator_t ; initialize_cairo_line_cap_t ; initialize_cairo_line_join_t; initialize_cairo_status_t; initialize_cairo_extend_t; initialize_cairo_hint_style_t; initialize_cairo_antialias_t; init_cairo_subpixel_order_t; initialize_cairo_hint_metrics_t. ! ! !AthensCairoDefs class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/11/2013 18:32'! initialize_cairo_hint_metrics_t "typedef enum {" CAIRO_HINT_METRICS_DEFAULT := 0. CAIRO_HINT_METRICS_OFF := 1. CAIRO_HINT_METRICS_ON := 2. ! ! !FT2GlyphRenderer methodsFor: 'accessing' stamp: 'IgorStasenko 11/7/2011 13:59' prior: 67526698! setColor: color "Set the color which will be used to render glyphs." | clr rgb alpha | currentColor = color ifTrue: [ ^ self ]. currentColor := color. clr := color pixelValue32. rgb := clr bitAnd: 16rFFFFFF. alpha := clr >> 24. 0 to: 255 do:[:i | | a | a := (i+1) * alpha bitAnd: 16rFF00. colorMap at: i+1 put: ( (a<<16) + rgb ). ]. " colorMap at: 1 put: (Color red alpha: 0.1) pixelValue32." ! ! !AthensCompositePaint methodsFor: 'drawing' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: athensPath on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " paints do: [:paint | paint athensFillPath: athensPath on: anAthensCanvas ] ! ! !AthensCompositePaint methodsFor: 'drawing' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " paints do: [:paint | paint athensFillRectangle: aRect on: anAthensCanvas ] ! ! !StrikeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 11/20/2013 14:14'! asFreetypeFont self error: 'not supported yet. and ever'! ! !AthensSurface methodsFor: 'paints' stamp: 'IgorStasenko 11/30/2013 08:22' prior: 40294200! createLinearGradient: colorRamp origin: pt1 corner: pt2 self deprecated: 'Use #createLinearGradient:start:stop: instead' on: '12 April 2013' in: 'ConfigurationOfAthens 2.0'. "was subclassResponsibility"! ! !AthensSurface methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 12/21/2013 02:16'! displayOnMorphicCanvas: canvas at: aPoint "display receiver on morphic canvas" self subclassResponsibility! ! !AthensSurface methodsFor: 'rendering dispatch' stamp: 'IgorStasenko 8/30/2013 16:38'! fillRectangle: aRectangle withSolidColor: aColor self subclassResponsibility! ! !AthensFlakeDemo commentStamp: '' prior: 81244352! AthensFlakeDemo new openInWindow ! !AthensFlakeDemo methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 12/29/2013 15:38' prior: 40611857! drawOn: aCanvas self render. surface displayOnMorphicCanvas: aCanvas at: bounds origin. ! ! !AthensWrapMorph commentStamp: '' prior: 81244443! i making sure that all my submorphs will be drawn using athens, but not balloon. For that i use separate surface.! !AthensWrapMorph methodsFor: 'accessing' stamp: 'IgorStasenko 9/6/2013 12:18'! athensSurface self checkSurface. ^ surface! ! !AthensWrapMorph methodsFor: 'surface management' stamp: 'IgorStasenko 9/6/2013 12:47'! checkSurface session == Smalltalk session ifFalse: [ self initializeForNewSession ]. bounds extent ~= surface extent ifTrue: [ "recreate a surface if dimensions are changed" self createSurface ] ! ! !AthensWrapMorph methodsFor: 'surface management' stamp: 'IgorStasenko 9/6/2013 12:46'! createSurface | extent | extent := bounds extent asIntegerPoint. surface := AthensCairoSurface extent: extent. ! ! !AthensWrapMorph methodsFor: 'drawing' stamp: 'IgorStasenko 8/26/2013 11:41'! drawOn: aCanvas "do nothing"! ! !AthensWrapMorph methodsFor: 'drawing' stamp: 'IgorStasenko 8/26/2013 13:03'! drawOnAthensCanvas: aCanvas "do nothing"! ! !AthensWrapMorph methodsFor: 'drawing' stamp: 'IgorStasenko 12/21/2013 02:18'! fullDrawOn: aCanvas "Draw the full Morphic structure on the given Canvas" self visible ifFalse: [^ self]. (aCanvas isVisible: self fullBounds) ifFalse:[^self]. (self hasProperty: #errorOnDraw) ifTrue:[^self drawErrorOn: aCanvas]. self checkSurface. [ self render. surface displayOnMorphicCanvas: aCanvas at: bounds origin. ] on: Error do: [:err | self setProperty: #errorOnDraw toValue: true. self setProperty: #drawError toValue: err freeze. ^ self drawErrorOn: aCanvas ]! ! !AthensWrapMorph methodsFor: 'drawing' stamp: 'IgorStasenko 8/26/2013 12:58'! fullDrawOnAthensCanvas: anAthensCanvas "Draw the full Morphic structure on the given Canvas" self visible ifFalse: [^ self]. (anAthensCanvas isVisible: self fullBounds) ifFalse: [^self]. (self hasProperty: #errorOnDraw) ifTrue: [^self "drawErrorOn: aCanvas" ]. (anAthensCanvas isVisible: self bounds) ifTrue: [ anAthensCanvas draw: self ]. submorphs reverseDo: [:m | anAthensCanvas fullDrawMorph: m ] ! ! !AthensWrapMorph methodsFor: 'events handling' stamp: 'FernandoOlivero 9/2/2013 14:53'! handlesMouseDown: evt ^ true ! ! !AthensWrapMorph methodsFor: 'surface management' stamp: 'IgorStasenko 8/26/2013 11:44'! initializeForNewSession self createSurface. session := Smalltalk session. ! ! !AthensWrapMorph methodsFor: 'drawing' stamp: 'JochenRick 1/10/2014 06:35'! render surface drawDuring: [ :canvas | surface clear. canvas pathTransform restoreAfter: [ "before rendering transform from a global coordinates (Morphic) to relative coordinates (Athens)" canvas pathTransform translateBy: self bounds origin negated. self fullDrawOnAthensCanvas: canvas. ]. ]. ! ! !Morph methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 9/6/2013 12:12'! athensSurface ^ owner ifNil: [ nil ] ifNotNil: [ owner athensSurface ]! ! !CairoUTF8Converter methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 1/31/2014 16:07' prior: 40540715! convert: aString from: start to: end | bs stream | self checkBufferSpace: 4*(end-start + 2). stream := ZnCharacterWriteStream on: (bs :=buffer writeStream). stream next: end-start+1 putAll: aString startingAt: start. " start to: end do: [:i| stream nextPut: (aString at: i) ]. " "bs nextPut: 0." ^ bs position.! ! !CairoUTF8Converter methodsFor: 'not finished yet' stamp: 'ClementBera 6/28/2013 10:31' prior: 43792584! convertByteString: aByteString ^ NBFFICallout cdecl: #( void (void * aByteString)) emitCall: [:gen :proxy :anAsm | ]! ! !CairoUTF8Converter methodsFor: 'not finished yet' stamp: 'ClementBera 6/28/2013 10:30' prior: 43792912! convertUnicode: anAsm " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanOne moreThanTwo moreThanThree end | moreThanOne := anAsm uniqueLabelName: 'moreThanOne'. moreThanTwo := anAsm uniqueLabelName: 'moreThanTwo'. moreThanThree := anAsm uniqueLabelName: 'moreThanThree'. end := anAsm uniqueLabelName: 'end'. anAsm cmp: anAsm EAX with: 16r7F; jg: moreThanOne; "one byte" mov: 1 to: anAsm EDX; jmp: end; label: moreThanOne; cmp: anAsm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: anAsm EAX with: 2; shl: anAsm AL with: 2; or: anAsm AX with: 2r1100000010000000; xchg: anAsm AL with: anAsm AH; mov: 2 to: anAsm EDX; jmp: end; label: moreThanTwo; cmp: anAsm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: anAsm EAX with: 2r111000001000000010000000; "16rE08080" shl: anAsm EAX with: 8; bswap: anAsm EAX; mov: 3 to: anAsm EDX; jmp: end; "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: anAsm EAX to: anAsm EDX; shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: anAsm EAX with: 16r3F3F3F; bswap: anAsm EAX; shr: anAsm EDX with: 18; "6*3" or: anAsm DL with: 16r11110000; mov: anAsm DL to: anAsm AL; mov: 4 to: anAsm EDX; label: end ! ! !CairoUTF8Converter methodsFor: 'not finished yet' stamp: 'ClementBera 6/28/2013 10:30' prior: 43794845! convertUnicode: anAsm conversionLabels: convLabels " input: - EAX 32-bit unicode value to convert . output: - EAX - utf-8 encoded character (in little-endian byte order) max 4 bytes - EDX - number of encoded bytes " | moreThanTwo moreThanThree | moreThanTwo := anAsm uniqueLabelName: 'moreThanTwo'. moreThanThree := anAsm uniqueLabelName: 'moreThanThree'. anAsm cmp: anAsm EAX with: 16r7F; jle: (convLabels at: 1); "one byte" cmp: anAsm EAX with: 16r7FF; jg: moreThanTwo; "two bytes 80 .. 7FF" " AH AL " "00000aaa aabbbbbb" "110aaaaa 10bbbbbb AL AH (little endian order) " shr: anAsm EAX with: 2; shl: anAsm AL with: 2; or: anAsm AX with: 2r1100000010000000; xchg: anAsm AL with: anAsm AH; jmp: (convLabels at: 2); label: moreThanTwo; cmp: anAsm EAX with: 16rFFFF; jg: moreThanThree; "three bytes 800 ... FFFF" " AH AL " "aaaabbbb bbcccccc" " => 1110aaaa 10bbbbbb 10cccccc" shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = ...aaaa xxbbbbbb xxcccccc " or: anAsm EAX with: 2r111000001000000010000000; "16rE08080" shl: anAsm EAX with: 8; bswap: anAsm EAX; jmp: (convLabels at: 3); "four bytes 1000 ... 10FFFF" " AH AL " "000aaabb bbbbcccc ccdddddd" "=> 11110aaa 10bbbbbb 10cccccc 10dddddd" mov: anAsm EAX to: anAsm EDX; shl: anAsm EAX with: 4; shr: anAsm AX with: 2; shr: anAsm AL with: 2; " EAX = 0000000a aabbbbbb xxcccccc xxdddddd " and: anAsm EAX with: 16r3F3F3F; or: anAsm EAX with: 16r808080; bswap: anAsm EAX; shr: anAsm EDX with: 18; "6*3" or: anAsm DL with: 16r11110000; mov: anAsm DL to: anAsm AL; jmp: (convLabels at: 4)! ! !CairoUTF8Converter methodsFor: 'not finished yet' stamp: 'IgorStasenko 6/12/2012 18:02' prior: 40545023! convertWideString: aWideString ! ! !CairoUTF8Converter methodsFor: 'not finished yet' stamp: 'IgorStasenko 6/22/2012 15:10' prior: 40545151! store: numBytes accumulated: accumBytes | toShift left | asm label: ('write', numBytes asString , 'to' , accumBytes asString) asSymbol. (accumBytes + numBytes ) > 4 ifTrue: [ toShift := 4 - accumBytes. left := numBytes - toShift ] ifFalse: [ toShift := numBytes. left := 0 ]. (accumBytes = 0 and: [numBytes = 4]) ifTrue: [ "just store directly" asm mov: asm EAX to: asm EDI ptr. ]. asm shrd: asm EBX with: asm EAX with: toShift * 8. ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoPathBuilder commentStamp: '' prior: 81244785! i implement cairo-specific path builder. see my superclass for more details.! !AthensCairoPathBuilder methodsFor: 'private' stamp: 'JochenRick 1/8/2014 08:23' prior: 49125351! arcTo: newEndPoint angle: angle cw: aBool " Add a clockwise arc segment, starting from current path endpoint and ending at andPt. Angle should be specified in radians " | start end center v radius startAngle endAngle cwAngle | lastControlPoint := nil. angle isZero ifTrue: [ ^ self lineTo: newEndPoint ]. start := endPoint. endPoint := end := self toAbsolute: newEndPoint. start = end ifTrue: [ ^ self ]. "we have to transform the input. because Cario expects the center , radius, starting and ending angle, and we have the starting point, the ending point , and the angle. " aBool ifTrue: [cwAngle := angle] ifFalse: [cwAngle := angle negated]. center := self calcCenter: start end: end angle: cwAngle. v := (start - center). radius := v r. startAngle := self angleOfVector: v. endAngle := self angleOfVector: (end-center). aBool ifTrue: [ self arcCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ifFalse: [ self arcNegativeCenterX: center x centerY: center y radius: radius startAngle: startAngle endAngle: endAngle ] ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:23' prior: 40502447! close self closePath. endPoint := self getCurrentPoint. lastControlPoint := nil! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:25' prior: 40503551! curveVia: p1 and: p2 to: aPoint | pt1 | pt1 := self toAbsolute: p1. lastControlPoint := self toAbsolute: p2. endPoint := self toAbsolute: aPoint. self curveViaX: pt1 x Y: pt1 y viaX: lastControlPoint x Y: lastControlPoint y toX: endPoint x Y: endPoint y ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:24' prior: 40503872! curveVia: p1 to: aPoint | pt0 pt1 cp1 cp2 twoThirds | "Quad bezier curve" pt0 := endPoint. pt1 := self toAbsolute: p1. endPoint := self toAbsolute: aPoint. lastControlPoint := nil. "Any quadratic spline can be expressed as a cubic (where the cubic term is zero). The end points of the cubic will be the same as the quadratic's. CP0 = QP0 CP3 = QP2 The two control points for the cubic are: CP1 = QP0 + 2/3 *(QP1-QP0) CP2 = QP2 + 2/3 *(QP1-QP2)" twoThirds := (2/3) asFloat. cp1 := pt1 - pt0 * twoThirds + pt0. cp2 := pt1 - endPoint * twoThirds + endPoint. self curveViaX: cp1 x Y: cp1 y viaX: cp2 x Y: cp2 y toX: endPoint x Y: endPoint y ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/7/2014 19:14'! hLineTo: x ^ self lineTo: (absolute ifTrue: [ x @ endPoint y] ifFalse: [ x @ 0 ])! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:24' prior: 40505734! lineTo: aPoint endPoint := self toAbsolute: aPoint. lastControlPoint := nil. ^ self lineToX: endPoint x asFloat Y: endPoint y asFloat! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:24' prior: 40506220! moveTo: aPoint endPoint := self toAbsolute: aPoint. lastControlPoint := nil. ^ self moveToX: endPoint x asFloat Y: endPoint y asFloat ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:28'! reflectedCurveVia: p2 to: aPoint | pt1 | pt1 := lastControlPoint ifNil: [ endPoint ] ifNotNil: [ endPoint * 2 - lastControlPoint]. lastControlPoint := self toAbsolute: p2. endPoint := self toAbsolute: aPoint. self curveViaX: pt1 x Y: pt1 y viaX: lastControlPoint x Y: lastControlPoint y toX: endPoint x Y: endPoint y ! ! !AthensCairoPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/7/2014 19:14'! vLineTo: y ^ self lineTo: (absolute ifTrue: [ endPoint x @ y] ifFalse: [ 0 @ y ])! ! !AthensPathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 06:27'! reflectedCurveVia: cp2 to: aPoint "Add a reflected cubic bezier curve, starting from current path endpoint and ending at aPoint. The first control point is calculated as a reflection from the current point, if the last command was also a cubic bezier curve. Otherwise, the first control point is the current point. The second control point is cp2." self subclassResponsibility ! ! !FreeTypeFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 11/20/2013 14:15'! asFreetypeFont ^ self! ! !AthensBalloonPath methodsFor: 'drawing' stamp: 'IgorStasenko 8/30/2013 16:32' prior: 43718575! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint athensFillPath: self on: anAthensCanvas! ! !CairoLibraryLoader class methodsFor: 'public' stamp: 'IgorStasenko 6/10/2012 05:46' prior: 40538991! getLibraryHandle (NativeBoost sessionChanged: session) ifTrue: [ libHandle := self loadCairoLibrary. session := NativeBoost uniqueSessionObject. ]. ^ libHandle ! ! !CairoLibraryLoader class methodsFor: 'private' stamp: 'IgorStasenko 4/16/2013 15:50' prior: 40539264! getLibraryPath (NativeBoost platformId = NativeBoostConstants linux32PlatformId) ifTrue: [ ^ self pathToCairoOnLinux. ]. (NativeBoost platformId = NativeBoostConstants mac32PlatformId) ifTrue: [ ^ 'libcairo.2.dylib' ]. (NativeBoost platformId = NativeBoostConstants win32PlatformId) ifTrue: [ ^ 'libcairo-2.dll' ]. self error: 'define your own path' ! ! !CairoLibraryLoader class methodsFor: 'private' stamp: 'IgorStasenko 6/10/2012 05:42' prior: 40539732! loadCairoLibrary ^ NativeBoost forCurrentPlatform loadModule: self getLibraryPath ! ! !AthensBalloonLinearGradient methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: aPath on: anAthensCanvas | torigin tcorner | "A gradient fill coordinates are first transformed by paintTransform matrix, then by pathTransform matrix" torigin := anAthensCanvas paintTransform transform: origin. tcorner := anAthensCanvas paintTransform transform: corner. ^ anAthensCanvas surface engine prepareForRendering; registerLinearGradient: colorRamp origin: torigin corner: tcorner; fillBezierShape: aPath contoursForFilling! ! !AthensBalloonLinearGradient methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | torigin tcorner | "A gradient fill coordinates are first transformed by paintTransform matrix, then by pathTransform matrix" torigin := anAthensCanvas paintTransform transform: origin. tcorner := anAthensCanvas paintTransform transform: corner. ^ anAthensCanvas surface engine prepareForRendering; registerLinearGradient: colorRamp origin: torigin corner: tcorner; fillRectangle: aRect! ! !AthensCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 8/30/2013 16:14' prior: 40245928! setFont: aFont "Set the current font of receiver. Font object should answer a glyph renderer instance, compatible with glyph renderer protocol" ^ fontRenderer := aFont glyphRendererOn: surface.! ! !AthensSimplePathBuilder methodsFor: 'path commands' stamp: 'JochenRick 1/8/2014 08:11'! reflectedCurveVia: cp2 to: aPoint "Reflected cubic bezier curve" | pt1 pt2 pt3 | pt2 := self toAbsolute: cp2. pt1 := lastSegment isCubic ifTrue: [ lastSegment via2reflected ] ifFalse: [ lastSegment endPoint ]. pt3 := self toAbsolute: aPoint. ^ self addSegment: ( AthensCubicSegment new from: lastSegment endPoint via: pt1 and: pt2 to: pt3) ! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: athensBalloonPath on: anAthensCanvas ^ anAthensCanvas surface fillBezierShape: athensBalloonPath contoursForFilling color: color. ! ! !AthensBalloonSolidColorPaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: canvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " ^ canvas surface fillRectangle: aRect color: color! ! !CairoScaledFont class methodsFor: 'instance creation' stamp: 'IgorStasenko 8/22/2013 14:16' prior: 40485947! fromFreetypeFont: aFont cairoFace: face | options fontMatrix deviceMatrix font | options := CairoBackendCache soleInstance at: #AAOptions ifAbsentPut: [ CairoFontOptions new ]. fontMatrix := AthensCairoMatrix new. deviceMatrix := AthensCairoMatrix new. fontMatrix scaleBy: (aFont pointSize). font := self primCreate: face fontMatrix: fontMatrix userToDeviceMatrix: deviceMatrix options: options. "to keep a reference to cairo face in instance" ^ font initWithFace: face. ! ! !CairoScaledFont methodsFor: 'accessing' stamp: 'IgorStasenko 8/22/2013 12:14'! getExtentsOf: utf8String into: extentObj "void cairo_scaled_font_extents (cairo_scaled_font_t *scaled_font, cairo_font_extents_t *extents); " ^ self nbCall: #( void cairo_scaled_font_text_extents (self, void *utf8String, cairo_text_extents_t * extentObj)) ! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 15:00'! athensFillPath: path on: aCanvas aCanvas newPath; loadPath: path. self setMatrix: aCanvas paintTransform inverted. self loadOnCairoCanvas: aCanvas. aCanvas fill.! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 15:00'! athensFillRectangle: aRectangle on: aCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " aCanvas rectangleX: aRectangle left y: aRectangle top width: aRectangle width height: aRectangle height. self setMatrix: aCanvas paintTransform inverted. self loadOnCairoCanvas: aCanvas. aCanvas fill! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 12:40'! athensLoadOn: anAthensCanvas " Note: The pattern's transformation matrix will be locked to the user space in effect at the time of cairo_set_source(). This means that further modifications of the current transformation matrix will not affect the source pattern. See cairo_pattern_set_matrix(). " self isSuccess ifTrue:[ self primSetSourceOn: anAthensCanvas.] ifFalse:[ anAthensCanvas setSourceR: 1.0 g: 0.0 b: 0.0 a: 1.0]. ! ! !AthensCairoPatternPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 14:58'! loadOnCairoCanvas: aCanvas " Note: The pattern's transformation matrix will be locked to the user space in effect at the time of cairo_set_source(). This means that further modifications of the current transformation matrix will not affect the source pattern. See cairo_pattern_set_matrix(). " self isSuccess ifTrue:[ self primSetSourceOn: aCanvas.] ifFalse:[ aCanvas setSourceR: 1.0 g: 0.0 b: 0.0 a: 1.0]. ! ! !AthensCairoSurface methodsFor: '*Athens-Morphic' stamp: 'IgorStasenko 12/21/2013 02:17'! displayOnMorphicCanvas: canvas at: aPoint canvas image: self asForm at: aPoint sourceRect: (0@0 extent: self extent ) rule: 34. ! ! !AthensCairoSurface methodsFor: 'rendering dispatch' stamp: 'IgorStasenko 9/3/2013 12:19'! fillPath: aPath withSolidColor: aColor self loadSolidColor: aColor. currentCanvas newPath; loadPath: aPath; fill ! ! !AthensCairoSurface methodsFor: 'rendering dispatch' stamp: 'IgorStasenko 8/30/2013 16:58'! fillRectangle: aRectangle withSolidColor: aColor self loadSolidColor: aColor. currentCanvas newPath; rectangleX: aRectangle left y: aRectangle top width: aRectangle width height: aRectangle height; fill ! ! !AthensCairoSurface methodsFor: 'rendering dispatch' stamp: 'IgorStasenko 8/30/2013 16:58'! loadSolidColor: aColor currentCanvas setSourceR: aColor red g: aColor green b: aColor blue a: aColor alpha; resetDash! ! !AthensCairoSurface methodsFor: 'private' stamp: 'IgorStasenko 9/3/2013 14:13' prior: 40463516! privSetDefaults "reset matrices" currentCanvas pathTransform loadIdentity. currentCanvas paintTransform loadIdentity. currentCanvas paintMode over. ! ! !Color methodsFor: '*Athens-Core' stamp: 'IgorStasenko 8/30/2013 16:23' prior: 75104921! asAthensPaintOn: anAthensCanvas ^ self "^ anAthensCanvas surface createSolidColorPaint: self"! ! !Color methodsFor: '*Athens-Core' stamp: 'IgorStasenko 9/3/2013 12:17'! asStrokePaintOn: aCanvas ^ aCanvas surface createStrokePaintFor: self! ! !Color methodsFor: '*Athens-Core' stamp: 'IgorStasenko 9/3/2013 12:11'! athensFillPath: aPath on: aCanvas ^ aCanvas surface fillPath: aPath withSolidColor:self! ! !Color methodsFor: '*Athens-Core' stamp: 'IgorStasenko 8/30/2013 16:49'! athensFillRectangle: aRect on: anAthensCanvas ^ anAthensCanvas surface fillRectangle: aRect withSolidColor:self! ! !Color methodsFor: '*Athens-Cairo' stamp: 'IgorStasenko 9/3/2013 13:31'! loadOnCairoCanvas: aCairoCanvas aCairoCanvas setSourceR: self red g: self green b: self blue a: self alpha! ! !AthensPathSegment methodsFor: 'testing' stamp: 'JochenRick 1/8/2014 06:31'! isCubic ^ false! ! !CairoFontFace class methodsFor: 'instance creation' stamp: 'IgorStasenko 12/3/2013 15:21' prior: 49120620! fromFreetypeFace: aFace | handle cairoFace | handle := aFace handle nbUlongAt: 1. cairoFace := self primFtFace: handle loadFlags: (LoadNoHinting | LoadTargetLCD | LoadNoAutohint | LoadNoBitmap). ^ cairoFace initializeWithFreetypeFace: aFace! ! !Rectangle methodsFor: '*Athens-Core' stamp: 'IgorStasenko 8/30/2013 16:49' prior: 40228680! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint athensFillRectangle: self on: anAthensCanvas! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 10/11/2013 18:34'! hintMetricsDefault ^ self setHintMetrics: CAIRO_HINT_METRICS_DEFAULT! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 10/11/2013 18:34'! hintMetricsOff ^ self setHintMetrics: CAIRO_HINT_METRICS_OFF! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 10/11/2013 18:34'! hintMetricsOn ^ self setHintMetrics: CAIRO_HINT_METRICS_ON! ! !CairoFontOptions methodsFor: 'defaults' stamp: 'IgorStasenko 10/23/2013 02:37' prior: 40483371! setDefaults self hintStyleSlight; hintMetricsOff; subpixelOrderRGB; aaSubpixel! ! !CairoFontOptions methodsFor: 'hint options' stamp: 'IgorStasenko 10/11/2013 18:31'! setHintMetrics: hintMetrics " void cairo_font_options_set_hint_metrics (cairo_font_options_t *options, cairo_hint_metrics_t hint_metrics); Sets the metrics hinting mode for the font options object. This controls whether metrics are quantized to integer values in device units. See the documentation for cairo_hint_metrics_t for full details. " ^ self nbCall: #(void cairo_font_options_set_hint_metrics (self, uint hintMetrics)) ! ! !LogicalFont methodsFor: '*Athens-Text' stamp: 'IgorStasenko 11/20/2013 14:12'! asFreetypeFont ^ self realFont asFreetypeFont! ! !AthensAbstractPaint methodsFor: 'converting' stamp: 'IgorStasenko 9/3/2013 14:23' prior: 40229489! asAthensPaintOn: aCanvas ^ self! ! !AthensPaint commentStamp: '' prior: 81244922! I am a base class, which defines a paint. My subclasses represent a concreate paint by implementing my protocol, that actually draws a specific shapes with me. My subclasses usually backend-specific, but as long as you implement my protocol, any object can be treated as paint: - athensFillPath: aPath on: aCanvas - athensFillRectangle: aRectangle on: aCanvas - asStrokePaint ! !AthensPaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/3/2013 14:22'! athensFillPath: aPath on: aCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " self subclassResponsibility! ! !AthensPaint methodsFor: 'rendering' stamp: 'IgorStasenko 9/3/2013 14:23'! athensFillRectangle: aRectangle on: aCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " self subclassResponsibility! ! !AthensStrokePaint commentStamp: '' prior: 81245453! I representing a stroke paint object used by Athens. My subclasses provide backend-specific implementation. I am more serving to define the common protocols and requirements for all backends (such as defaults). IMPORTANT NOTE: a stroke paint object provides a protocol only for setting stroke properties, but not retrieving them back. This is intentionally, because the way how these properties is managed are highly backend-specific. The stroke paint has following properties: - fill paint. A paint to use for filling strokes. Can be any athens basic paint, except from stroke one. - stroke width. Can be set using #width: Default: if width is not set explicitly for stroke paint, it is assumed to be equal to 1.0. - join style. Currently there are 3 kinds of joins supported: bevel miter round To set join style for paint, use #joinBevel, #joinMiter or #joinRound methods. Default: if join style is not explicitly set for stroke paint, it will use bevel join style. - cap style supported: butt, round and square. To set cap style, use #capButt, #capRound or #capSquare methods. Default: if cap style is not explicitly set for stroke paint, it will use butt cap style. - miter limit, set with #miterLimit: accessor. (default and meaning of limit is not yet determined) Dashes: stroke can use dashing. Dash is special kind of stroke which won't draw a continuous stroke connecting path segments, but instead stroke with alternating fill-gap style , defined by provided input. Protocol: paint dashes: dashPattern offset: anOffset. The dash pattern is a simple collection of alternating lengths, like: #("fill" 50 "gap" 50) in this example , first 50 length units of path will be filled with stroke, and next 50 will be skipped, forming a gap, then again filled and again skipped, and so on until path ends. The dash pattern can contain as many length elements as needed. Just remember that each odd element represents length to fill with stroke, and each even element, length to skip, while traversing along the path. The offset controls the shift in length units, relative to path start. Default: if dash is not explicitly set for stroke paint, it will fill the path using continuous stroke (no gaps). ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !AthensCairoStrokePaint commentStamp: '' prior: 81247986! i represent stroke paint in cairo backend! !AthensCairoStrokePaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 13:05'! athensFillPath: aPath on: aCanvas self prepareForDrawingOn: aCanvas. aCanvas newPath; loadPath: aPath; stroke! ! !AthensCairoStrokePaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 13:06'! athensFillRectangle: aRect on: aCanvas self prepareForDrawingOn: aCanvas. aCanvas newPath; rectangleX: aRect left y: aRect top width: aRect width height: aRect height; stroke. ! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 14:44' prior: 40508145! capButt capStyle := CAIRO_LINE_CAP_BUTT.! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 14:14' prior: 40508288! capRound capStyle := CAIRO_LINE_CAP_ROUND! ! !AthensCairoStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 14:14' prior: 40508432! capSquare capStyle := CAIRO_LINE_CAP_SQUARE! ! !AthensCairoStrokePaint methodsFor: 'setting dashes' stamp: 'IgorStasenko 4/3/2013 05:54' prior: 40508569! dashes: anAlternateCollectionOfLenghts offset: anOffset dashLenghts := anAlternateCollectionOfLenghts. dashOffset := anOffset asFloat.! ! !AthensCairoStrokePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/3/2013 12:32' prior: 49134397! initialize super initialize. self setDefaults! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:44' prior: 40509515! joinBevel joinStyle := CAIRO_LINE_JOIN_BEVEL! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:44' prior: 40509663! joinMiter joinStyle := CAIRO_LINE_JOIN_MITER! ! !AthensCairoStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:44' prior: 40509811! joinRound joinStyle := CAIRO_LINE_JOIN_ROUND ! ! !AthensCairoStrokePaint methodsFor: 'library path' stamp: '' prior: 81247775! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !AthensCairoStrokePaint methodsFor: 'private' stamp: 'IgorStasenko 9/3/2013 13:02'! prepareForDrawingOn: aCanvas fillPaint loadOnCairoCanvas: aCanvas. self primSetLineWidthOn: aCanvas; primSetLineJoinOn: aCanvas; primSetLineCapOn: aCanvas. dashLenghts ifNil: [ aCanvas resetDash ] ifNotNil: [ self setDashesOn: aCanvas ].! ! !AthensStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 13:08'! capButt "Set this paint to use butt cap style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 13:08'! capRound "Set this paint to use round cap style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'setting cap styles' stamp: 'IgorStasenko 9/3/2013 13:08'! capSquare "Set this paint to use square cap style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'setting dashes' stamp: 'IgorStasenko 9/3/2013 13:36'! dashes: anAlternateCollectionOfLenghts offset: anOffset 'self dashes: #( "fill" 20 "gap" 10 "fill" 35 "gap" 30) offset: 0. '. self subclassResponsibility ! ! !AthensStrokePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/3/2013 14:18' prior: 49128011! initialize self setDefaults.! ! !AthensStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:19'! joinBevel "Set receiver to use bevel join style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:19'! joinMiter "Set receiver to use miter join style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'setting join styles' stamp: 'IgorStasenko 9/3/2013 14:19'! joinRound "Set receiver to use round join style" self subclassResponsibility! ! !AthensStrokePaint methodsFor: 'initialize-release' stamp: 'IgorStasenko 9/3/2013 13:13'! setDefaults "Set the default values for strokes" width := 1. self capButt; joinBevel; miterLimit: 4.0 ! ! !AthensStrokePaint methodsFor: 'accessing' stamp: 'IgorStasenko 9/3/2013 13:10' prior: 40232686! width: anObject "set the stroke width" width := anObject! ! !CairoGlyphsArray commentStamp: '' prior: 81248086! Captain obvious tells this is an array of CairoGlyph(s), corresponds to cairo_glyph_t structure: typedef struct { unsigned long index; double x; double y; } cairo_glyph_t;! !CairoGlyphsArray class methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/14/2013 16:28'! initialize self initElementType: #CairoGlyph! ! !CairoGlyphsArray methodsFor: 'accessing' stamp: 'IgorStasenko 8/19/2013 15:38'! allocatedByCairo ^ allocatedByCairo ! ! !CairoGlyphsArray methodsFor: 'accessing' stamp: 'IgorStasenko 8/19/2013 15:39'! allocatedByCairo: aBoolean allocatedByCairo := aBoolean! ! !CairoGlyphsArray methodsFor: '*generated-code-non-existing-package' stamp: 'IgorStasenko 12/7/2012 16:42'! at: index "Answer an element using 1-based index. Note, this method used as a template for my anonymous subclasses. " ^ self emitRead! ! !CairoGlyphsArray methodsFor: '*generated-code-non-existing-package' stamp: 'IgorStasenko 12/7/2012 16:42'! at: index put: value "Set value at 1-based index. Note, this method used as a template for my anonymous subclasses. " ^ self emitWrite ! ! !AthensCairoCanvas methodsFor: 'drawing text' stamp: 'IgorStasenko 8/30/2013 16:14' prior: 40428612! setFont: aFont ^ fontRenderer := aFont glyphRendererOn: surface. ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 8/22/2013 13:51'! setFontMatrix: aMatrix " void cairo_set_font_matrix (cairo_t *cr, const cairo_matrix_t *matrix); " ^ self nbCall: #( void cairo_set_font_matrix (self , AthensCairoMatrix * aMatrix )) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 8/19/2013 15:04'! showGlyphs: glyphs size: numGlyphs "A drawing operator that generates the shape from a string of UTF-8 characters, rendered according to the current font_face, font_size (font_matrix), and font_options. " ^ self nbCall: #( void cairo_show_glyphs ( self , void * glyphs, int numGlyphs) ) ! ! !AthensCairoCanvas methodsFor: 'private' stamp: 'IgorStasenko 9/3/2013 13:04'! stroke ^ self nbCall: #(void cairo_stroke (self)) ! ! !AthensSceneView methodsFor: 'drawing' stamp: 'IgorStasenko 12/21/2013 02:17' prior: 49126716! drawOn: canvas | px py | canvas fillRectangle: bounds color: self backgroundColor. self renderScene. surface displayOnMorphicCanvas: canvas at: bounds origin. " translucentImage: surface asForm at: bounds origin." self showDebugInfo ifTrue: [ px := transform x printShowingDecimalPlaces: 3. py := transform y printShowingDecimalPlaces: 3. canvas drawString: 'zoom: ' , (transform sx printShowingDecimalPlaces: 3) , ' pan: ' , px , ' @ ' , py at: bounds origin font: nil color: Color white ]! ! !AthensAffineTransform methodsFor: 'accessing' stamp: 'JochenRick 1/24/2014 10:37' prior: 40300983! inverted "answer an inverse transformation of receiver" | det | det := sx * sy - (shx * shy). ^ self class new sx: sy / det; sy: shy * -1 / det; shx: shx * -1 / det; shy: sx / det; x: shx * y - (x * sy) / det; y: shy * x - (sx * y) / det; yourself! ! !AthensMorphicGradientPaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: canvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | fill | fill := gradient radial ifTrue: [ canvas surface createRadialGradient: gradient colorRamp center: (canvas pathTransform inverseTransform: gradient origin ) radius: gradient direction y ] ifFalse: [ canvas surface createLinearGradient: gradient colorRamp start: (canvas pathTransform inverseTransform: gradient origin) stop: (canvas pathTransform inverseTransform: gradient origin + gradient direction ) ]. fill athensFillRectangle: aRect on: canvas. ! ! !AthensBalloonRadialGradient methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: aPath on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | c | c := anAthensCanvas paintTransform transform: center. ^ anAthensCanvas surface engine prepareForRendering; registerRadialGradient: colorRamp center: c radius: radius; fillBezierShape: aPath contoursForFilling ! ! !AthensBalloonRadialGradient methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " | c dir n | c := anAthensCanvas paintTransform transform: center. dir := (radius@0). n := (0@radius). ^ anAthensCanvas surface engine prepareForRendering; registerRadialGradient: colorRamp center: c direction: dir normal: n; fillRectangle: aRect! ! !AthensCairoPath methodsFor: 'drawing' stamp: 'IgorStasenko 8/30/2013 16:32' prior: 40467619! paintFillsUsing: aPaint on: anAthensCanvas "This method is a part of rendering dispatch Canvas->receiver->paint" ^ aPaint athensFillPath: self on: anAthensCanvas! ! !AthensBalloonImagePaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: aPath on: anAthensCanvas anAthensCanvas surface engine prepareForRendering; registerFormFill: form origin: origin direction: direction normal: self normal; fillBezierShape: aPath contoursForFilling! ! !AthensBalloonImagePaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: anAthensCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " anAthensCanvas surface engine reset prepareForRendering; registerFormFill: form origin: origin direction: direction normal: self normal; fillRectangle: aRect ! ! !AthensBalloonStrokePaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:32'! athensFillPath: aPath on: aCanvas ^ fillPaint strokePath: aPath on: aCanvas stroke: self! ! !AthensBalloonStrokePaint methodsFor: 'rendering' stamp: 'IgorStasenko 8/30/2013 16:35'! athensFillRectangle: aRect on: aCanvas ^ fillPaint strokeRect: aRect on: aCanvas stroke: self! ! !AthensCairoSolidPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 12:56'! athensFillPath: path on: aCanvas aCanvas setSourceR: r g: g b: b a: a; newPath; loadPath: path; fill. ! ! !AthensCairoSolidPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 12:56'! athensFillRectangle: aRect on: aCanvas "This is a terminal method in rendering dispatch scheme canvas->shape->paint. See AthensCanvas>>fillShape: " aCanvas setSourceR: r g: g b: b a: a; newPath; rectangleX: aRect left y: aRect top width: aRect width height: aRect height; fill.! ! !AthensCairoSolidPaint methodsFor: 'drawing' stamp: 'IgorStasenko 9/3/2013 14:56'! loadOnCairoCanvas: aCanvas aCanvas setSourceR: r g: g b: b a: a! ! !AthensBalloonSurface methodsFor: 'paints' stamp: 'IgorStasenko 11/30/2013 08:22' prior: 40349611! createLinearGradient: colorRamp origin: pt1 corner: pt2 self deprecated: 'Use #createLinearGradient:start:stop: instead' on: '12 April 2013' in: 'ConfigurationOfAthens 2.0'. ^ self createLinearGradient: colorRamp origin: pt1 corner: pt2 ! ! !AthensCubicSegment methodsFor: 'testing' stamp: 'JochenRick 1/8/2014 06:32'! isCubic ^true! ! !AthensCubicSegment methodsFor: 'accessing' stamp: 'JochenRick 1/8/2014 08:11'! via2reflected ^self endPoint * 2 - via2! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontMetricsProvider methodsFor: 'accessing' stamp: 'IgorStasenko 8/22/2013 14:23'! font: aFont font := aFont asFreetypeFont. cairoFont := cache at: font ifAbsentPut: [ | ftFace face | ftFace := font face. face := cache at: ftFace ifAbsentPut: [ CairoFontFace fromFreetypeFace: ftFace ]. CairoScaledFont fromFreetypeFont: font cairoFace: face. ]. extents := cairoFont extents.! ! !CairoFontMetricsProvider methodsFor: 'accessing' stamp: 'IgorStasenko 8/22/2013 13:25'! fontAscent ^ extents ascent! ! !CairoFontMetricsProvider methodsFor: 'accessing' stamp: 'IgorStasenko 8/22/2013 13:25'! fontHeight ^ extents height! ! !CairoFontMetricsProvider methodsFor: 'accessing' stamp: 'IgorStasenko 8/22/2013 13:38'! getGlyphWidth: aCharacter utfConverter convert: aCharacter asString from: 1 to: 1. cairoFont getExtentsOf: utfConverter buffer into: glyphExtents. ^ glyphExtents x_advance! ! !CairoFontMetricsProvider methodsFor: 'initialization' stamp: 'IgorStasenko 8/22/2013 14:22'! initialize utfConverter := CairoUTF8Converter new. glyphExtents := CairoTextExtents new. cache := CairoBackendCache soleInstance.! ! !CairoFontMetricsProvider methodsFor: 'library path' stamp: '' prior: 81248322! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontRenderer methodsFor: 'acccessing' stamp: 'IgorStasenko 8/30/2013 16:09'! fontMetricsProviderFor: aFont ^ CairoFontMetricsProvider new font: aFont ; yourself ! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFreetypeFontRenderer commentStamp: '' prior: 81249006! i am used to render freetype font(s) with cairo library.! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/19/2013 15:50'! convertString: utf8String len: strlen ofFont: aScaledFont toGlyphs: glyphs numGlyphs: numGlyphs x: x y: y " all of this for using http://www.cairographics.org/manual/cairo-User-Fonts.html#cairo-user-scaled-font-text-to-glyphs-func-t " ^self nbCall: #( cairo_status_t cairo_scaled_font_text_to_glyphs (CairoScaledFont aScaledFont, double x, double y, void * utf8String, int strlen, NBExternalAddress * glyphs, int * numGlyphs, 0, 0, 0))! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/6/2013 12:49' prior: 40536752! font: aFreetypeFont font := cache at: aFreetypeFont ifAbsentPut: [ | ftFace face | ftFace := aFreetypeFont face. face := cache at: ftFace ifAbsentPut: [ CairoFontFace fromFreetypeFace: ftFace ]. CairoScaledFont fromFreetypeFont: aFreetypeFont cairoFace: face. ]. fontExtents := font extents. originalFont := aFreetypeFont. ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/6/2013 12:50'! fontAscent ^ fontExtents ascent! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/6/2013 12:50'! fontHeight ^ fontExtents height! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 8/19/2013 15:30'! freeGlyphs: glyphs ^self nbCall: #( void cairo_glyph_free (void *glyphs))! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/6/2013 12:51'! getGlyphWidth: aCharacter utfConverter convert: aCharacter asString from: 1 to: 1. font getExtentsOf: utfConverter buffer into: glyphExtents. ^ glyphExtents x_advance! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 1/31/2014 16:06'! glyphsOf: aString from: start to: end | len glyphs ptr lenValue glyphsSize utf8Len | len := end-start+1. utf8Len := utfConverter convert: aString from: start to: end. ptr := NBExternalAddress new. lenValue := ByteArray new: 4. lenValue nbUInt32AtOffset: 0 put: len. self convertString: utfConverter buffer len: utf8Len ofFont: font toGlyphs: ptr numGlyphs: lenValue x: 0.0 y: 0.0. glyphsSize := lenValue nbUInt32AtOffset: 0. glyphs := CairoGlyphsArray new: glyphsSize. NativeBoost memCopy: ptr to: glyphs address size: (glyphsSize * CairoGlyphsArray elementSize). self freeGlyphs: ptr. ^ glyphs ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 9/6/2013 12:52' prior: 49134171! initialize utfConverter := CairoUTF8Converter new. advance := 0@0. cache := CairoBackendCache soleInstance. glyphExtents := CairoTextExtents new.! ! !CairoFreetypeFontRenderer methodsFor: 'library path' stamp: '' prior: 81248792! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! !CairoFreetypeFontRenderer methodsFor: 'as yet unclassified' stamp: 'IgorStasenko 10/23/2013 03:04' prior: 40537570! renderCharacters: aString from: start to: end | glyphs | glyphs := self glyphsOf: aString from: start to: end. font lock. canvas setScaledFont: font; setPathMatrix. canvas paint loadOnCairoCanvas: canvas. canvas showGlyphs: glyphs address size: glyphs size. font unlock. ! ! AthensBalloonLinearGradient removeSelector: #fillRectangle:on:! AthensBalloonLinearGradient removeSelector: #fillPath:on:! AthensCairoPatternPaint removeSelector: #loadOn:! AthensCairoPatternPaint removeSelector: #fillRectangle:on:! AthensCairoPatternPaint removeSelector: #fillPath:on:! AthensCairoPatternPaint removeSelector: #fillOn:! AthensBalloonSolidColorPaint removeSelector: #fillRectangle:on:! AthensBalloonSolidColorPaint removeSelector: #fillPath:on:! AthensCompositePaint removeSelector: #fillRectangle:on:! AthensCompositePaint removeSelector: #fillPath:on:! AthensBalloonImagePaint removeSelector: #fillRectangle:on:! AthensBalloonImagePaint removeSelector: #fillPath:on:! AthensStrokePaint removeSelector: #width! AthensStrokePaint removeSelector: #miterLimit! AthensStrokePaint removeSelector: #joinStyle:! AthensStrokePaint removeSelector: #joinStyle! AthensStrokePaint removeSelector: #innerJoinStyle:! AthensStrokePaint removeSelector: #innerJoinStyle! AthensStrokePaint removeSelector: #fillPaint! AthensStrokePaint removeSelector: #capStyle:! AthensStrokePaint removeSelector: #capStyle! AthensBalloonRadialGradient removeSelector: #fillRectangle:on:! AthensBalloonRadialGradient removeSelector: #fillPath:on:! AthensCairoStrokePaint removeSelector: #strokeOn:! AthensCairoStrokePaint removeSelector: #loadOn:! AthensCairoStrokePaint removeSelector: #fillRectangle:on:! AthensCairoStrokePaint removeSelector: #fillPath:on:! AthensCairoStrokePaint removeSelector: #beSquare! AthensCairoStrokePaint removeSelector: #beMiter! AthensCairoStrokePaint removeSelector: #beJoinRound! AthensCairoStrokePaint removeSelector: #beCapRound! AthensCairoStrokePaint removeSelector: #beButt! AthensCairoStrokePaint removeSelector: #beBevel! FT2GlyphRenderer removeSelector: #pixelValue32Of:! AthensBalloonSurface removeSelector: #createRectanglePath:! AthensPaint removeSelector: #fillRectangle:on:! AthensPaint removeSelector: #fillPath:on:! AthensBalloonEngine removeSelector: #clipRect:! AthensBalloonStrokePaint removeSelector: #fillRectangle:on:! AthensBalloonStrokePaint removeSelector: #fillPath:on:! AthensBalloonStrokePaint removeSelector: #asStrokePaintOn:! AthensCairoSolidPaint removeSelector: #loadOn:! AthensCairoSolidPaint removeSelector: #fillRectangle:on:! AthensCairoSolidPaint removeSelector: #fillPath:on:! AthensCairoSolidPaint removeSelector: #fillOn:! AthensMorphicGradientPaint removeSelector: #fillRectangle:on:! AthensCairoPath removeSelector: #loadInto:! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! index "This method was automatically generated" ^ self fieldAt: #index! ! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! index: anObject "This method was automatically generated" ^ self fieldAt: #index put: anObject! ! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! x "This method was automatically generated" ^ self fieldAt: #x! ! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! x: anObject "This method was automatically generated" ^ self fieldAt: #x put: anObject! ! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! y "This method was automatically generated" ^ self fieldAt: #y! ! !CairoGlyph methodsFor: '*generated-code-non-existing-package' stamp: 'NativeBoost 2/4/2014 13:23'! y: anObject "This method was automatically generated" ^ self fieldAt: #y put: anObject! ! "Athens-Balloon"! "Athens-Cairo"! "Athens-CairoPools"! "Athens-Core"! "Athens-Examples"! "Athens-Morphic"! "Athens-Text"! "Generated-code-non-existing-package"! ----End fileIn----! ----QUIT----2014-02-04T13:23:45.788093+01:00 Pharo.image priorSource: 30900654! ----STARTUP----2014-02-04T13:23:45.964839+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-04T13:23:49.936835+01:00 Pharo.image priorSource: 30970201! ----STARTUP----2014-02-04T13:28:37.793347+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-04T13:28:38.043348+01:00 Pharo-30741.image priorSource: 30970398! ----STARTUP----2014-02-04T23:18:24.12321+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/4/2014 23:10' prior: 81232599! commentForCurrentUpdate ^ '12794 Class comments missing in UpdateStreamer package https://pharo.fogbugz.com/f/cases/12794 12802 Class comments missing for Kernel package https://pharo.fogbugz.com/f/cases/12802 12804 Class comment missing in AST packages https://pharo.fogbugz.com/f/cases/12804 12797 Class comments missing for tools package https://pharo.fogbugz.com/f/cases/12797 12796 Class comments missing for Traits package https://pharo.fogbugz.com/f/cases/12796 12798 Class comments missing in GroupManager package https://pharo.fogbugz.com/f/cases/12798 12806 Class comment missing in package FreeType + categorizing for FreeTypeCacheTest https://pharo.fogbugz.com/f/cases/12806 12800 EyeContextInspector should be renamed to EyeMethodContextInspector https://pharo.fogbugz.com/f/cases/12800 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/4/2014 23:11'! script395 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-StephaneDucasse.9.mcz AsmJit-Tests-MartinMcClure.13.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.62.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-MarcusDenker.5.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.64.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-MarcusDenker.106.mcz HelpSystem-Tests-MarcusDenker.26.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1717.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.99.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-MarcusDenker.29.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/4/2014 23:11'! update30742 "self new update30742" self withUpdateLog: '12794 Class comments missing in UpdateStreamer package https://pharo.fogbugz.com/f/cases/12794 12802 Class comments missing for Kernel package https://pharo.fogbugz.com/f/cases/12802 12804 Class comment missing in AST packages https://pharo.fogbugz.com/f/cases/12804 12797 Class comments missing for tools package https://pharo.fogbugz.com/f/cases/12797 12796 Class comments missing for Traits package https://pharo.fogbugz.com/f/cases/12796 12798 Class comments missing in GroupManager package https://pharo.fogbugz.com/f/cases/12798 12806 Class comment missing in package FreeType + categorizing for FreeTypeCacheTest https://pharo.fogbugz.com/f/cases/12806 12800 EyeContextInspector should be renamed to EyeMethodContextInspector https://pharo.fogbugz.com/f/cases/12800 '. self loadTogether: self script395 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TApplyingOnClassSide commentStamp: 'TorstenBergmann 2/4/2014 20:36' prior: 0! Kernel trait for applying on the class side! !TBehavior commentStamp: 'TorstenBergmann 2/4/2014 20:36' prior: 0! Kernel trait for Behavior! !TBehaviorCategorization commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 0! Kernel trait for Behavior categorization! !TClass commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 0! Kernel trait for Class! !TClassDescription commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 0! Kernel trait for ClassDescription! !TComposingDescription commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 0! Kernel trait for ComposingDescription! !ASTCacheTest commentStamp: 'TorstenBergmann 2/4/2014 21:55' prior: 0! SUnit tests for ASTCache! !ASTStackMappingTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 0! SUnit tests for stack mapping! !AndreasSystemProfilerTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 0! SUnit tests for AndreasSystemProfiler! !ArgumentNamesTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 0! SUnit tests for generating argument names! !DebuggerTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 0! SUnit tests for Debugger! !DynamicMessageImplementorTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 0! SUnit tests for class DynamicMessageImplementor! !InterpreterTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 0! Common superclass for SUnit tests of interpreter tests! !ASTInterpreterTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 0! SUnit tests for ASTInterpreter! !MessageTallyTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 0! SUnit tests for MessageTally! !PointerFinderTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 0! SUnit tests for PointerFinder! !RBFormatterTests commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 0! SUnit tests for RBFormatter! !RBParserTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 0! SUnit tests for RBParser! !RBProgramNodeTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 0! SUnit tests for RBProgramNode! !RBScannerTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 0! SUnit tests for RBScanner! !UpdateStreamerTest commentStamp: 'TorstenBergmann 2/4/2014 20:31' prior: 0! SUnit test for update streamer! !WorkspaceTest commentStamp: 'TorstenBergmann 2/4/2014 20:47' prior: 0! SUnit tests for Workspace! !RelativeInstructionPrinter commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 0! Print the object code for relative instructions! !Abort commentStamp: 'TorstenBergmann 2/4/2014 21:42' prior: 0! Notify to abort a task! !SimulationExceptionWrapper commentStamp: 'TorstenBergmann 2/4/2014 21:43' prior: 0! Notify about an exception while simulating an execution! !DialogGroupManagerUI commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 0! Dialog UI for the group manager! !DialogGroupAdderUI commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 0! Dialog UI for the group adder! !FreeTypeSubPixelAntiAliasedGlyphRenderer commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 0! A SubPixel-AntiAliased GlyphRenderer for FreeType! !FreeTypeCacheEntry commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 0! An entry for the FreeTypeCache! !OpenToolTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 0! SUnit tests for opening of tools! !ClassCommentReader commentStamp: 'TorstenBergmann 2/4/2014 21:42' prior: 0! I represent a mechanism for retrieving class comment stored on a file.! !FreeTypeFace commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 0! Do not rearrange these fields!!! !SpotlightShortcuts commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 0! A shortcut for spotlight! !GlyphForm commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 0! A specialized form for glyphs! !FreeTypeCacheConstants commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 0! Constants for the FreeType cache! !FreeTypeCacheTest commentStamp: 'TorstenBergmann 2/4/2014 22:12' prior: 0! SUnit tests for FreeType cache! !FreeTypeFont commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 0! A FreeType font! !ValueHolder commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 0! A value holder holding a value ! !FileListGrid commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 0! A grid for a list of files! !GroupCreatorTreeModel commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 0! Tree model for group creation in Nautilus! !FreeTypeCacheLinkedList commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 0! A linked list for the FreeTypeCache! !FileListGridNode commentStamp: 'TorstenBergmann 2/4/2014 20:42' prior: 0! A node in the file list grid! !GroupNode commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 0! A group node in the morph tree! !ItemNode commentStamp: 'TorstenBergmann 2/4/2014 21:14' prior: 0! An item in the group UI! !WeakActionSequence commentStamp: 'TorstenBergmann 2/4/2014 21:46' prior: 0! Weak action sequences for events! !SourceWebBrowser commentStamp: 'TorstenBergmann 2/4/2014 20:42' prior: 0! A simple web browser for source code! !FT2MemoryFaceData commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 0! Freetype 2 MemoryFace data ! !FreeTypeExternalMemory commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 0! FreeType externalMemory ! !AbstractGroupAnnouncement commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 0! Common superclass for group announcements! !AGroupHasBeenAdded commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 0! Notify that a group has been added! !AGroupHasBeenCreated commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 0! Notify that a group has been created! !AGroupHasBeenRegistered commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 0! Notify that a group has been registered! !AGroupHasBeenRemoved commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 0! Notify that a group has been removed! !AGroupHasBeenRenamed commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 0! Notify that a group has been renamed! !AGroupHasBeenUnregistered commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 0! Notify that a group has been unregistered! !DialogGroupManager commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 0! Dialog group manager for groups in Nautilus! !DialogGroupAdder commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 0! Adder for dialog groups! !DialogItemsChooser commentStamp: 'TorstenBergmann 2/4/2014 20:44' prior: 0! Dialog for choosing from a list of items! !FontFamilyAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 0! Abstract font family! !FreeTypeFontFamily commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 0! FreeType font family! !TextStyleAsFontFamily commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 0! Text style as font family! !FontFamilyMemberAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 0! Abstract member for a font family! !FreeTypeFontFamilyMember commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 0! FreeType FontFamily member ! !TextStyleAsFontFamilyMember commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 0! TextStyleAsFont Family members! !FreeTypeCache commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 0! Cache for freetype fonts! !FreeTypeFileInfoAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 0! Abstract superclass for file infos for a FreeType font! !FreeTypeEmbeddedFileInfo commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 0! File info for embbeded FreeType fonts! !FreeTypeFileInfo commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 0! File infos for a FreeType font! !FreeTypeNameParser commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 0! A name parser! !FreeTypeSettings commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 0! Settings for FreeType! !ImageCleaner commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 0! Used for cleaning the image! !GroupAnnouncer commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 0! Announcer for group announcements! !SimulationGuardException commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 0! Notify about an exception while simulating a guard! !EyeMethodContextInspector commentStamp: '' prior: 0! I am an eye inspector specified for MethodContext! !TApplyingOnClassSide commentStamp: 'TorstenBergmann 2/4/2014 20:36' prior: 81315421! Kernel trait for applying on the class side! !TBehavior commentStamp: 'TorstenBergmann 2/4/2014 20:36' prior: 81315534! Kernel trait for Behavior! !TBehaviorCategorization commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 81315643! Kernel trait for Behavior categorization! !TClass commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 81315750! Kernel trait for Class! !TClassDescription commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 81315850! Kernel trait for ClassDescription! !TComposingDescription commentStamp: 'TorstenBergmann 2/4/2014 20:37' prior: 81315965! Kernel trait for ComposingDescription! !ASTCacheTest commentStamp: 'TorstenBergmann 2/4/2014 21:55' prior: 81316075! SUnit tests for ASTCache! !ASTStackMappingTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 81316179! SUnit tests for stack mapping! !AndreasSystemProfilerTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 81316294! SUnit tests for AndreasSystemProfiler! !ArgumentNamesTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 81316409! SUnit tests for generating argument names! !DebuggerTest commentStamp: 'TorstenBergmann 2/4/2014 20:45' prior: 81316523! SUnit tests for Debugger! !DynamicMessageImplementorTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 81316637! SUnit tests for class DynamicMessageImplementor! !InterpreterTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 81316760! Common superclass for SUnit tests of interpreter tests! !ASTInterpreterTest commentStamp: 'TorstenBergmann 2/4/2014 21:54' prior: 81316893! SUnit tests for ASTInterpreter! !MessageTallyTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 81317000! SUnit tests for MessageTally! !PointerFinderTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 81317106! SUnit tests for PointerFinder! !RBFormatterTests commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 81317212! SUnit tests for RBFormatter! !RBParserTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 81317312! SUnit tests for RBParser! !RBProgramNodeTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 81317414! SUnit tests for RBProgramNode! !RBScannerTest commentStamp: 'TorstenBergmann 2/4/2014 21:53' prior: 81317517! SUnit tests for RBScanner! !UpdateStreamerTest commentStamp: 'TorstenBergmann 2/4/2014 20:31' prior: 81317621! SUnit test for update streamer! !WorkspaceTest commentStamp: 'TorstenBergmann 2/4/2014 20:47' prior: 81317725! SUnit tests for Workspace! !RelativeInstructionPrinter commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 81317837! Print the object code for relative instructions! !Abort commentStamp: 'TorstenBergmann 2/4/2014 21:42' prior: 81317950! Notify to abort a task! !SimulationExceptionWrapper commentStamp: 'TorstenBergmann 2/4/2014 21:43' prior: 81318059! Notify about an exception while simulating an execution! !DialogGroupManagerUI commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 81318195! Dialog UI for the group manager! !DialogGroupAdderUI commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 81318305! Dialog UI for the group adder! !FreeTypeSubPixelAntiAliasedGlyphRenderer commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 81318435! A SubPixel-AntiAliased GlyphRenderer for FreeType! !FreeTypeCacheEntry commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 81318563! An entry for the FreeTypeCache! !OpenToolTest commentStamp: 'TorstenBergmann 2/4/2014 20:46' prior: 81318666! SUnit tests for opening of tools! !ClassCommentReader commentStamp: 'TorstenBergmann 2/4/2014 21:42' prior: 81318777! I represent a mechanism for retrieving class comment stored on a file.! !FreeTypeFace commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 81318920! Do not rearrange these fields!!! !SpotlightShortcuts commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 81319030! A shortcut for spotlight! !GlyphForm commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 81319124! A specialized form for glyphs! !FreeTypeCacheConstants commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 81319236! Constants for the FreeType cache! !FreeTypeCacheTest commentStamp: 'TorstenBergmann 2/4/2014 22:12' prior: 81319346! SUnit tests for FreeType cache! !FreeTypeCacheTest methodsFor: 'running' stamp: 'tween 3/23/2007 08:07' prior: 22636918! setUp cache := FreeTypeCache new. font1 := FreeTypeFont basicNew. font2 := FreeTypeFont basicNew. font3 := FreeTypeFont basicNew. font1XGlyph := (GlyphForm extent: 100@100 depth: 32) advance: 100; linearAdvance: 10000; yourself. font1YGlyph := (GlyphForm extent: 100@100 depth: 32) advance: 100; linearAdvance: 10000; yourself. font1ZGlyph := (GlyphForm extent: 100@100 depth: 32) advance: 100; linearAdvance: 10000; yourself. fullCache := FreeTypeCache new. fullCache maximumSize: (10*(fullCache sizeOf: font1YGlyph)).. 1 to: 10 do:[:i | fullCache atFont: font1 charCode: i type: FreeTypeCacheGlyph put: font1YGlyph]. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 10:29' prior: 22637661! testConstants | constants | constants := {FreeTypeCacheWidth. FreeTypeCacheGlyphMono. FreeTypeCacheGlyphLCD.FreeTypeCacheGlyph}. self assert: constants asSet size = constants size. "no 2 have same value" self assert: (constants detect:[:x | x isNil] ifNone:[]) isNil. "no value is nil" ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 9/29/2007 20:02' prior: 22638046! testEntriesRemovedFIFO | | cache maximumSize: 10*(cache sizeOf: font1XGlyph). 1 to: 10 do:[:i | cache atFont: font1 charCode: (1000-i) type: FreeTypeCacheGlyph put: font1XGlyph]. self validateCollections: cache. 11 to:1000 do:[:i | cache atFont: font1 charCode: (1000-i) type: FreeTypeCacheGlyph put: font1XGlyph. self validateSizes: cache. self validateCollections: cache. "i-9 to: i do:[:i2 | self shouldnt: [cache atFont: font1 charCode: 1000-i2 type: FreeTypeCacheGlyph] raise: Error]." self should: [cache atFont: font1 charCode: 1000-(i-10) type: FreeTypeCacheGlyph] raise: Error]. self validateSizes: cache. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 11:19' prior: 22638824! testFailedGet | | self should: [cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph] raise: Error. self assert: (cache instVarNamed: #fontTable) isEmpty. self assert: (cache instVarNamed: #used) = 0. self validateSizes: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 14:57' prior: 22639170! testFreeTypeCacheEntry | f f2 f3 | f := FreeTypeCacheEntry new. f charCode: 1; font: font1; type: FreeTypeCacheGlyph; object: font1XGlyph. f2 := FreeTypeCacheEntry new. f2 charCode: 2; font: font1; type: FreeTypeCacheGlyphLCD; object: font1XGlyph. f nextLink: f2. self assert: f ~= f2. self assert: f nextLink = f2 . f3 := f copy. f3 nextLink: nil. self assert: f = f3. "equality not based on nextLink"! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 13:41' prior: 22639676! testInstanceInitialization self assert: (cache instVarNamed: #maximumSize) = FreeTypeCache defaultMaximumSize. self assert: (cache instVarNamed: #used) = 0. self assert: (cache instVarNamed: #fontTable) class = cache dictionaryClass. self assert: (cache instVarNamed: #fontTable) isEmpty. self assert: (cache instVarNamed: #fifo) class = cache fifoClass. self assert: (cache instVarNamed: #fifo) isEmpty. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 9/29/2007 20:05' prior: 22640178! testMaximumSizeRespectedOnIfAbsentPut | | cache maximumSize: (cache sizeOf: font1XGlyph). cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: font1XGlyph. self validateSizes: cache. self validateCollections: cache. cache atFont: font1 charCode: $Y asInteger type: FreeTypeCacheGlyph ifAbsentPut: font1XGlyph. self assert: (cache instVarNamed:#used) = 0. "cache has been cleared on reaching max size" self validateSizes: cache. self validateCollections: cache. self should: [cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph] raise: Error. self should: [cache atFont: font1 charCode: $Y asInteger type: FreeTypeCacheGlyph] raise: Error. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 9/29/2007 20:06' prior: 22641000! testMaximumSizeRespectedOnPut | | cache maximumSize: (cache sizeOf: font1XGlyph). cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self validateSizes: cache. self validateCollections: cache. cache atFont: font1 charCode: $Y asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self assert: (cache instVarNamed:#used) = 0. "cache has been cleared on reaching max size" self validateSizes: cache. self validateCollections: cache. self should: [cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph] raise: Error. self should: [cache atFont: font1 charCode: $Y asInteger type: FreeTypeCacheGlyph] raise: Error. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 15:52' prior: 22641798! testNormalGetIfAbsentPut | u g r | cache maximumSize: nil. u := cache instVarNamed: #used. r := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. self assert: (r isKindOf: GlyphForm). self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. self assert: g == font1XGlyph. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 3/31/2007 12:26' prior: 22642388! testNormalGetIfAbsentPutTwice | u g r | cache maximumSize: nil. u := cache instVarNamed: #used. r := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. r := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. self assert: (r isKindOf: GlyphForm). self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. self assert: g == font1XGlyph. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 3/31/2007 12:26' prior: 22643097! testNormalGetIfAbsentPutTwiceIntoNonEmptyCache | u g r | cache maximumSize: nil. u := cache instVarNamed: #used. r := cache atFont: font1 charCode: $Z asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. r := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. r := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph ifAbsentPut: [font1XGlyph]. self assert: (r isKindOf: GlyphForm). self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. self assert: g == font1XGlyph. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 12:47' prior: 22643937! testNormalPutGet | u g | cache maximumSize: nil. u := cache instVarNamed: #used. cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. self assert: g == font1XGlyph. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 3/31/2007 12:21' prior: 22644453! testNormalPutGetTwice | u g | cache maximumSize: nil. u := cache instVarNamed: #used. cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph. self assert: g == font1XGlyph. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 15:12' prior: 22645049! testNormalPutGetWidth | u g | cache maximumSize: nil. u := cache instVarNamed: #used. cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheWidth put: 100. self assert: (cache instVarNamed: #used) > u. "grown" self validateSizes: cache. g := cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheWidth. self assert: g = 100. self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 14:41' prior: 22645553! testPutSameElementTwice | | cache maximumSize: nil. cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self assert: (cache instVarNamed: #used) = (cache sizeOf: font1XGlyph). self validateSizes: cache. self validateCollections: cache. cache atFont: font1 charCode: $X asInteger type: FreeTypeCacheGlyph put: font1XGlyph. self assert: (cache instVarNamed: #used) = (cache sizeOf: font1XGlyph). self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 13:05' prior: 22646144! testRemoveAll | m fifo fontTable | m := fullCache instVarNamed: #maximumSize. fifo := fullCache instVarNamed: #fifo. fontTable := fullCache instVarNamed: #fontTable. fullCache removeAll. self assert: (fullCache instVarNamed: #fifo) isEmpty. self assert: (fullCache instVarNamed: #fontTable) isEmpty. self assert: (fullCache instVarNamed: #used) = 0. self assert: m = (fullCache instVarNamed: #maximumSize). self assert: fifo class = (fullCache instVarNamed: #fifo) class. self assert: fontTable class = (fullCache instVarNamed: #fontTable) class. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 14:21' prior: 22646792! testRemoveAllForFont | fifo | fullCache maximumSize: nil. 1 to: 100 do:[:i | fullCache atFont: font1 charCode: i type: 1 put: font1XGlyph]. 1 to: 100 do:[:i | fullCache atFont: font2 charCode: i type: 2 put: font1YGlyph]. 1 to: 100 do:[:i | fullCache atFont: font3 charCode: i type: 3 put: font1ZGlyph]. fifo := fullCache instVarNamed: #fifo. self assert: (fifo detect:[:each | each font = font1] ifNone:[]) notNil. self assert: (fifo detect:[:each | each font = font2] ifNone:[]) notNil. self assert: (fifo detect:[:each | each font = font3] ifNone:[]) notNil. fullCache removeAllForFont: font1. self validateSizes: fullCache. self validateCollections: fullCache. fifo := (fullCache instVarNamed: #fifo). self assert: (fifo detect:[:each | each font = font1] ifNone:[]) isNil. self assert: (fifo detect:[:each | each font = font2] ifNone:[]) notNil. self assert: (fifo detect:[:each | each font = font2] ifNone:[]) notNil. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 15:29' prior: 22647831! testRemoveAllForType | fifo | fullCache maximumSize: nil. 1 to: 100 do:[:i | fullCache atFont: font1 charCode: i type: 1 put: font1XGlyph]. 1 to: 100 do:[:i | fullCache atFont: font2 charCode: i type: 2 put: font1YGlyph]. 1 to: 100 do:[:i | fullCache atFont: font3 charCode: i type: 3 put: font1ZGlyph]. fifo := fullCache instVarNamed: #fifo. self assert: (fifo detect:[:each | each type = 1] ifNone:[]) notNil. self assert: (fifo detect:[:each | each type = 2] ifNone:[]) notNil. self assert: (fifo detect:[:each | each type = 3] ifNone:[]) notNil. fullCache removeAllForType: 1. self validateSizes: fullCache. self validateCollections: fullCache. fifo := (fullCache instVarNamed: #fifo). self assert: (fifo detect:[:each | each type = 1] ifNone:[]) isNil. self assert: (fifo detect:[:each | each type = 2] ifNone:[]) notNil. self assert: (fifo detect:[:each | each type = 3] ifNone:[]) notNil. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 13:52' prior: 22648842! testReport self assert: fullCache report = '100% Full (maximumSize: 400320 , used: 400320)'. fullCache maximumSize: 800640. self assert: fullCache report = '50% Full (maximumSize: 800640 , used: 400320)'. self assert: cache report = '0% Full (maximumSize: 5120000 , used: 0)'. cache maximumSize: nil. self assert: cache report = '0% Full (maximumSize: nil , used: 0)'. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'GabrielOmarCotelli 5/25/2010 21:22' prior: 22649321! testSetMaximumSize cache maximumSize: 0. self assert: (cache instVarNamed: #maximumSize) = 0. cache maximumSize: 99999999999999999. self assert: (cache instVarNamed: #maximumSize) = 99999999999999999. cache maximumSize: nil. "unbounded" self assert: (cache instVarNamed: #maximumSize) isNil. self validateSizes: cache. self validateCollections: cache! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 12:48' prior: 22649769! testSetMaximumSizeGrow | u m | u := fullCache instVarNamed: #used. m := fullCache instVarNamed: #maximumSize. fullCache maximumSize: m * 2 . "grow" self assert: u = (fullCache instVarNamed: #used). self validateSizes: cache. self validateCollections: cache! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 9/29/2007 20:07' prior: 22650125! testSetMaximumSizeShrink | m | m := fullCache instVarNamed: #maximumSize. fullCache maximumSize: m // 2 . "shrink" self assert: (fullCache instVarNamed: #used) = 0. "cache is cleared when used > maximumSize" self validateSizes: fullCache. self validateCollections: fullCache. ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 12:48' prior: 22650504! testSetMaximumSizeUnbounded | u | u := fullCache instVarNamed: #used. fullCache maximumSize: nil. "unbounded" self assert: u = (fullCache instVarNamed: #used). self validateSizes: cache. self validateCollections: cache ! ! !FreeTypeCacheTest methodsFor: 'tests' stamp: 'tween 8/10/2006 09:24' prior: 22650822! testSingleton self assert: FreeTypeCache current class = FreeTypeCache. self assert: FreeTypeCache current == FreeTypeCache current. ! ! !FreeTypeCacheTest methodsFor: 'private' stamp: 'tween 3/31/2007 12:12' prior: 22651049! validateCollections: aFreeTypeCache "check that the fifo list entries match the fontTable dict hierarchy" | fontTable fontTableEntries fifo lastLink | fontTable := aFreeTypeCache instVarNamed: #fontTable. fifo := aFreeTypeCache instVarNamed: #fifo. lastLink := (fifo instVarNamed:#lastLink). fontTableEntries := Set new. fontTable keysAndValuesDo:[:k1 :v1 | v1 keysAndValuesDo:[:k2 :v2 | v2 keysAndValuesDo:[:k3 :v3 | fontTableEntries add: v3 ]]]. self assert: fifo size = fontTableEntries size. self assert: (fifo asSet = fontTableEntries). self assert: (lastLink isNil or:[lastLink nextLink isNil]) ! ! !FreeTypeCacheTest methodsFor: 'private' stamp: 'tween 8/10/2006 15:04' prior: 22651764! validateSizes: aFreeTypeCache "check that the used, maximumSize, and caches entries are valid" | fontTable calcSize max used | fontTable := aFreeTypeCache instVarNamed: #fontTable. used := aFreeTypeCache instVarNamed: #used. max := aFreeTypeCache instVarNamed: #maximumSize. calcSize := 0. fontTable do:[:charCodeTable | charCodeTable do:[:typeTable | typeTable do:[:entry | calcSize := calcSize + (aFreeTypeCache sizeOf: entry object)]]]. self assert: calcSize = used. self assert: (max isNil or:[used <= max]) ! ! !FreeTypeFont commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 81319449! A FreeType font! !ValueHolder commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 81319536! A value holder holding a value ! !FileListGrid commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 81319640! A grid for a list of files! !GroupCreatorTreeModel commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 81319748! Tree model for group creation in Nautilus! !FreeTypeCacheLinkedList commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 81319873! A linked list for the FreeTypeCache! !FileListGridNode commentStamp: 'TorstenBergmann 2/4/2014 20:42' prior: 81319985! A node in the file list grid! !GroupNode commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 81320083! A group node in the morph tree! !ItemNode commentStamp: 'TorstenBergmann 2/4/2014 21:14' prior: 81320182! An item in the group UI! !WeakActionSequence commentStamp: 'TorstenBergmann 2/4/2014 21:46' prior: 81320284! Weak action sequences for events! !MethodContext class methodsFor: '*Spec-Inspector' stamp: 'TorstenBergmann 2/4/2014 21:31' prior: 41604437! inspectorClass ^ EyeMethodContextInspector! ! !SourceWebBrowser commentStamp: 'TorstenBergmann 2/4/2014 20:42' prior: 81320393! A simple web browser for source code! !FT2MemoryFaceData commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 81320507! Freetype 2 MemoryFace data ! !FreeTypeExternalMemory commentStamp: 'TorstenBergmann 2/4/2014 22:06' prior: 81320618! FreeType externalMemory ! !AbstractGroupAnnouncement commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 81320728! Common superclass for group announcements! !AGroupHasBeenAdded commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 81320848! Notify that a group has been added! !AGroupHasBeenCreated commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 81320963! Notify that a group has been created! !AGroupHasBeenRegistered commentStamp: 'TorstenBergmann 2/4/2014 21:09' prior: 81321083! Notify that a group has been registered! !AGroupHasBeenRemoved commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 81321203! Notify that a group has been removed! !AGroupHasBeenRenamed commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 81321320! Notify that a group has been renamed! !AGroupHasBeenUnregistered commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 81321442! Notify that a group has been unregistered! !DialogGroupManager commentStamp: 'TorstenBergmann 2/4/2014 21:12' prior: 81321562! Dialog group manager for groups in Nautilus! !DialogGroupAdder commentStamp: 'TorstenBergmann 2/4/2014 21:13' prior: 81321682! Adder for dialog groups! !DialogItemsChooser commentStamp: 'TorstenBergmann 2/4/2014 20:44' prior: 81321784! Dialog for choosing from a list of items! !FontFamilyAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 81321903! Abstract font family! !FreeTypeFontFamily commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 81322002! FreeType font family! !TextStyleAsFontFamily commentStamp: 'TorstenBergmann 2/4/2014 22:07' prior: 81322104! Text style as font family! !FontFamilyMemberAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 81322214! Abstract member for a font family! !FreeTypeFontFamilyMember commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 81322332! FreeType FontFamily member ! !TextStyleAsFontFamilyMember commentStamp: 'TorstenBergmann 2/4/2014 22:08' prior: 81322448! TextStyleAsFont Family members! !FreeTypeCache commentStamp: 'TorstenBergmann 2/4/2014 22:09' prior: 81322552! Cache for freetype fonts! !FreeTypeFileInfoAbstract commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 81322661! Abstract superclass for file infos for a FreeType font! !FreeTypeEmbeddedFileInfo commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 81322800! File info for embbeded FreeType fonts! !FreeTypeFileInfo commentStamp: 'TorstenBergmann 2/4/2014 22:10' prior: 81322914! File infos for a FreeType font! !FreeTypeNameParser commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 81323023! A name parser! !FreeTypeSettings commentStamp: 'TorstenBergmann 2/4/2014 22:11' prior: 81323113! Settings for FreeType! !ImageCleaner commentStamp: 'TorstenBergmann 2/4/2014 20:43' prior: 81323207! Used for cleaning the image! !GroupAnnouncer commentStamp: 'TorstenBergmann 2/4/2014 21:10' prior: 81323309! Announcer for group announcements! !SimulationGuardException commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 81323427! Notify about an exception while simulating a guard! !EyeMethodContextInspector commentStamp: '' prior: 81323545! I am an eye inspector specified for MethodContext! !EyeMethodContextInspector class methodsFor: 'accessing' stamp: 'CamilloBruni 9/20/2013 21:13'! label ^ 'Context Inspector'! ! !EyeMethodContextInspector methodsFor: 'list' stamp: 'ClementBera 8/5/2013 10:44'! addVariableFields: elements self tempNames withIndexDo: [ :name :index | elements add: (ContextTempEyeElement host: self object tempName: name tempIndex: index) ]! ! !EyeMethodContextInspector methodsFor: 'accessing' stamp: 'ClementBera 4/30/2013 14:25'! doItContext ^ self object! ! !EyeMethodContextInspector methodsFor: 'list' stamp: 'ClementBera 6/25/2013 14:46'! tempNames ^ [ self object tempNames ] on: Error do: [ #() ]! ! EyeContextInspector removeSelector: #tempNames! EyeContextInspector removeSelector: #doItContext! EyeContextInspector removeSelector: #addVariableFields:! EyeContextInspector class removeSelector: #label! Smalltalk globals removeClassNamed: #EyeContextInspector! "FreeTypeTests"! "Spec-Inspector"! "Traits"! ----End fileIn----! ----QUIT----2014-02-04T23:19:54.395297+01:00 Pharo.image priorSource: 30970595! ----STARTUP----2014-02-04T23:19:54.586232+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-04T23:19:58.632228+01:00 Pharo.image priorSource: 31017363! ----STARTUP----2014-02-04T23:59:24.588582+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-04T23:59:24.848582+01:00 Pharo-30742.image priorSource: 31017560! ----STARTUP----2014-02-05T00:30:53.580009+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/5/2014 00:24' prior: 81302546! commentForCurrentUpdate ^ '12801 Class comments missing in AsmJIT package https://pharo.fogbugz.com/f/cases/12801 12805 Class comments missing in ClassOrganizer package https://pharo.fogbugz.com/f/cases/12805 12791 Failing test: #testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/12791 12795 Class comments missing for package System-FileRegistry https://pharo.fogbugz.com/f/cases/12795 12799 Class comments missing in Help package https://pharo.fogbugz.com/f/cases/12799 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/5/2014 00:24'! script396 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.64.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1717.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.99.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1018.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.200.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/5/2014 00:24'! update30743 "self new update30743" self withUpdateLog: '12801 Class comments missing in AsmJIT package https://pharo.fogbugz.com/f/cases/12801 12805 Class comments missing in ClassOrganizer package https://pharo.fogbugz.com/f/cases/12805 12791 Failing test: #testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits https://pharo.fogbugz.com/f/cases/12791 12795 Class comments missing for package System-FileRegistry https://pharo.fogbugz.com/f/cases/12795 12799 Class comments missing in Help package https://pharo.fogbugz.com/f/cases/12799 '. self loadTogether: self script396 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AJReleaseTemps commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 0! Handling release of temps! !AJStackInstruction commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 0! Stack instructions! !AJCallArgument commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 0! Argument for a call! !AJCallCleanup commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 0! Cleanup for calls! !HelpHowToHelpTopics commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 0! Explains help topics! !HelpHowToHelpTopicsFromCode commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 0! How to create help topics from code! !AJCallInfo commentStamp: 'TorstenBergmann 2/4/2014 21:36' prior: 0! Infos for a call! !AJCdeclCallInfo commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 0! Infos for a class according to Cdecl spec! !AJRoutineStackManager commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 0! Stack handling for routines! !FileServices commentStamp: 'TorstenBergmann 2/4/2014 20:23' prior: 0! Registered file services for specific file types! !PackageAPIHelpBuilder commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 0! A builder for the API of the various packages! !AJStackAlignmentTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 0! SUnit Tests for stack alignment! !AJx86AssemblerTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 0! SUnit tests for x86 assembler! !AJx64AssemblerTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 0! SUnit tests for 64 bit assembler! !AJx86RegisterTests commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 0! SUnit tests for x86 registers! !ClassAPIHelpBuilderTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 0! SUnit tests for ClassAPIHelpBuilder! !ClassOrganizationTest commentStamp: 'TorstenBergmann 2/4/2014 22:00' prior: 0! SUnit tests for class organization! !CustomHelpTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 0! SUnit tests for class CustomHelp ! !HelpBrowserTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 0! SUnit tests for the help browser! !HelpIconsTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 0! SUnit tests for the icons used in the help system! !HelpTopicListItemWrapperTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 0! SUnit tests for class HelpTopicListItemWrapper! !HelpTopicTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 0! SUnit tests for HelpTopic class! !WikiStyleHelpBuilderTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 0! SUnit tests for class WikiStyleHelpBuilder! !WikiStyleHelpTest commentStamp: 'TorstenBergmann 2/4/2014 21:20' prior: 0! SUnit tests for WikiStyleHelp! !AJReleaseTemps commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 81362038! Handling release of temps! !AJStackInstruction commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 81362142! Stack instructions! !AJCallArgument commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 81362235! Argument for a call! !AJCallCleanup commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 81362328! Cleanup for calls! !HelpHowToHelpTopics commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 81362425! Explains help topics! !HelpHowToHelpTopicsFromCode commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 81362533! How to create help topics from code! !AJCallInfo commentStamp: 'TorstenBergmann 2/4/2014 21:36' prior: 81362639! Infos for a call! !AJCdeclCallInfo commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 81362731! Infos for a class according to Cdecl spec! !AJRoutineStackManager commentStamp: 'TorstenBergmann 2/4/2014 21:37' prior: 81362854! Stack handling for routines! !FileServices commentStamp: 'TorstenBergmann 2/4/2014 20:23' prior: 81362954! Registered file services for specific file types! !PackageAPIHelpBuilder commentStamp: 'TorstenBergmann 2/4/2014 21:17' prior: 81363084! A builder for the API of the various packages! !AJStackAlignmentTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 81363211! SUnit Tests for stack alignment! !AJx86AssemblerTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 81363322! SUnit tests for x86 assembler! !AJx64AssemblerTests commentStamp: 'TorstenBergmann 2/4/2014 21:39' prior: 81363431! SUnit tests for 64 bit assembler! !AJx86RegisterTests commentStamp: 'TorstenBergmann 2/4/2014 21:38' prior: 81363542! SUnit tests for x86 registers! !ClassAPIHelpBuilderTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 81363655! SUnit tests for ClassAPIHelpBuilder! !ClassOrganizationTest commentStamp: 'TorstenBergmann 2/4/2014 22:00' prior: 81363772! SUnit tests for class organization! !CustomHelpTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 81363881! SUnit tests for class CustomHelp ! !HelpBrowserTest commentStamp: 'TorstenBergmann 2/4/2014 21:18' prior: 81363990! SUnit tests for the help browser! !HelpIconsTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 81364096! SUnit tests for the icons used in the help system! !HelpTopicListItemWrapperTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 81364234! SUnit tests for class HelpTopicListItemWrapper! !HelpTopicTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 81364354! SUnit tests for HelpTopic class! !WikiStyleHelpBuilderTest commentStamp: 'TorstenBergmann 2/4/2014 21:19' prior: 81364470! SUnit tests for class WikiStyleHelpBuilder! !WikiStyleHelpTest commentStamp: 'TorstenBergmann 2/4/2014 21:20' prior: 81364590! SUnit tests for WikiStyleHelp! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! AthensCairoStrokePaint removeSelector: #nbLibraryNameOrHandle! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! CairoFreetypeFontRenderer removeSelector: #nbLibraryNameOrHandle! !Trait method! nbLibraryNameOrHandle ^ self class nbLibraryNameOrHandle ! ! CairoFontMetricsProvider removeSelector: #nbLibraryNameOrHandle! "Athens-Cairo"! ----End fileIn----! ----QUIT----2014-02-05T00:31:52.59409+01:00 Pharo.image priorSource: 31017757! ----STARTUP----2014-02-05T00:31:52.764016+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-05T00:31:56.704015+01:00 Pharo.image priorSource: 31036262! ----STARTUP----2014-02-05T01:01:10.475593+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-05T01:01:10.737591+01:00 Pharo-30743.image priorSource: 31036458! ----STARTUP----2014-02-05T16:06:46.374603+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/5/2014 16:03' prior: 81349709! commentForCurrentUpdate ^ '12808 #testObsoleteClasses: AnObsoleteEyeContextInspector https://pharo.fogbugz.com/f/cases/12808 12817 Class comments missing for Polymorph-Widgets package https://pharo.fogbugz.com/f/cases/12817 12814 FTPConnectionException is not in use and should be moved to Deprecated30 package or renamed https://pharo.fogbugz.com/f/cases/12814 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/5/2014 16:04'! script397 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.66.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.213.mcz Gofer-Tests-MarcusDenker.160.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1717.mcz KernelTests-MarcusDenker.623.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.45.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.5.mcz Multilingual-Tests-MarcusDenker.31.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/5/2014 16:04'! update30744 "self new update30744" self withUpdateLog: '12808 #testObsoleteClasses: AnObsoleteEyeContextInspector https://pharo.fogbugz.com/f/cases/12808 12817 Class comments missing for Polymorph-Widgets package https://pharo.fogbugz.com/f/cases/12817 12814 FTPConnectionException is not in use and should be moved to Deprecated30 package or renamed https://pharo.fogbugz.com/f/cases/12814 '. self loadTogether: self script397 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UIThemeWatery commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 0! Watery UI theme! !PharoUIThemeIcons commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 0! Theme icons for Pharo UI! !BlueUIThemeIcons commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 0! Theme icons for blue UI theme! !NullSound commentStamp: 'TorstenBergmann 2/5/2014 10:29' prior: 0! The NullSound means silence ! !UIThemeRegistry commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 0! Registry for UI themes! !NullSoundTheme commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 0! A silent sound theme! !EyeDebuggerContextInspector commentStamp: '' prior: 42261473! Specific context inspector for the bottom right of the debugger! !ShadowLabelMorph commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 0! A label with shadow! !AnimationSettings commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 0! Animation settings! !UIThemeWatery commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 81380605! Watery UI theme! !PharoUIThemeIcons commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 81380698! Theme icons for Pharo UI! !BlueUIThemeIcons commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 81380799! Theme icons for blue UI theme! !FTPConnectionException methodsFor: 'as yet unclassified' stamp: 'RAA 3/9/2001 07:47' prior: 21771767! defaultAction self resume! ! !FTPConnectionException methodsFor: 'as yet unclassified' stamp: 'RAA 3/14/2001 15:57' prior: 21771887! isResumable ^true! ! !NullSound commentStamp: 'TorstenBergmann 2/5/2014 10:29' prior: 81380898! The NullSound means silence ! !UIThemeRegistry commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 81381002! Registry for UI themes! !NullSoundTheme commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 81381099! A silent sound theme! !EyeDebuggerContextInspector commentStamp: '' prior: 81381196! Specific context inspector for the bottom right of the debugger! !ShadowLabelMorph commentStamp: 'TorstenBergmann 2/5/2014 10:30' prior: 81381336! A label with shadow! !AnimationSettings commentStamp: 'TorstenBergmann 2/5/2014 10:31' prior: 81381433! Animation settings! "Deprecated30"! "Network-Protocols"! "Spec-Debugger"! ----End fileIn----! ----QUIT----2014-02-05T16:06:52.471438+01:00 Pharo.image priorSource: 31036655! ----STARTUP----2014-02-05T16:06:52.661321+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-05T16:06:56.759322+01:00 Pharo.image priorSource: 31051119! ----STARTUP----2014-02-05T16:11:47.955088+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-05T16:11:48.227089+01:00 Pharo-30744.image priorSource: 31051316! ----STARTUP----2014-02-06T08:23:53.870506+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/6/2014 08:20' prior: 81368600! commentForCurrentUpdate ^ '12813 Class comments missing in Gofer package https://pharo.fogbugz.com/f/cases/12813 12816 Class comments missing in Multilingual package https://pharo.fogbugz.com/f/cases/12816 12811 Class comments missing in KernelTests packages https://pharo.fogbugz.com/f/cases/12811 12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag https://pharo.fogbugz.com/f/cases/12789 12792 remove empty package ReactiveVariable https://pharo.fogbugz.com/f/cases/12792 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/6/2014 08:20'! script398 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.23.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.9.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.66.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1717.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.912.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.464.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz ReactiveVariable-SvenVanCaekenberghe.7.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/6/2014 08:21'! update30745 "self new update30745" self withUpdateLog: '12813 Class comments missing in Gofer package https://pharo.fogbugz.com/f/cases/12813 12816 Class comments missing in Multilingual package https://pharo.fogbugz.com/f/cases/12816 12811 Class comments missing in KernelTests packages https://pharo.fogbugz.com/f/cases/12811 12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag https://pharo.fogbugz.com/f/cases/12789 12792 remove empty package ReactiveVariable https://pharo.fogbugz.com/f/cases/12792 '. self loadTogether: self script398 merge: false. ScriptLoader new unregisterPackage: 'ReactiveVariable'. self flushCaches. ! ! "ScriptLoader30"! !ExampleForTest1 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 0! An example class at level 1 (directly below Object) used for testing class hierarchy! !ExampleForTest11 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 0! An example class at level 2 (indirectly below Object) used for testing class hierarchy! !ExampleForTest111 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 0! An example class at level 3 (indirectly below Object) used for testing class hierarchy! !ExampleForTest112 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 0! An example class at level 3 (indirectly below Object) used for testing class hierarchy! !ExampleForTest12 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 0! An example class at level 2 (indirectly below Object) used for testing class hierarchy! !ExceptionTester commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 0! Utility class to test exceptions! !GoferOperation commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 0! Common superclass of Gofer operations! !GoferLoad commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 0! Loading for specific packages using Gofer! !GoferSynchronize commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 0! Synchronize repos ! !GoferFetch commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 0! Fetch packages using Gofer! !GoferPush commentStamp: 'TorstenBergmann 2/5/2014 09:32' prior: 0! Push a version! !GoferWorking commentStamp: 'TorstenBergmann 2/5/2014 09:34' prior: 0! Common superclass for workin copies in Gofer! !GoferChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 0! Handling changes! !GoferLocalChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 0! Handling local changes! !GoferBrowseLocalChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 0! Browse local changes! !GoferRemoteChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 0! Handling remote changes! !GoferBrowseRemoteChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 0! Browse remote changes! !GoferCleanup commentStamp: 'TorstenBergmann 2/5/2014 09:34' prior: 0! Cleanup working copies! !GoferCommit commentStamp: 'TorstenBergmann 2/5/2014 09:35' prior: 0! Commit work! !GoferRecompile commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! Recompile! !GoferUnload commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! Unload! !GoferUpdate commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! Update! !GoferMerge commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! Merge work! !GoferRevert commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! Revert work! !X11Encoding commentStamp: 'TorstenBergmann 2/5/2014 09:57' prior: 0! X11 encoding! !GoferResource commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 0! SUnit test resource for Gofer testing! !BehaviorTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 0! SUnit tests for Behavior! !ClassTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 0! SUnit tests for classes! !DateAndTimeTest commentStamp: 'TorstenBergmann 2/5/2014 08:33' prior: 42214621! SUnit tests for date and time! !FalseTest commentStamp: 'TorstenBergmann 2/5/2014 08:50' prior: 42295685! SUnit tests for false/False class! !FractionTest commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 0! SUnit tests for fractions! !LargeNegativeIntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 0! SUnit tests for large negative integers! !LargePositiveIntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 0! SUnit tests for large positive integers! !MetaclassTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 0! Sunit tests for metaclasses! !NumberTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 0! SUnit tests for numbers! !ObjectTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 0! SUnit tests for objects! !RandomTest commentStamp: 'TorstenBergmann 2/5/2014 08:43' prior: 0! SUnit tests for random generator! !ScheduleTest commentStamp: 'TorstenBergmann 2/5/2014 08:43' prior: 0! SUnit tests for recurring schedules (class Schedule).! !StopwatchTest commentStamp: 'TorstenBergmann 2/5/2014 08:45' prior: 0! SUnit tests for the stopwatch ! !TimespanTest commentStamp: 'TorstenBergmann 2/5/2014 08:49' prior: 0! SUnit tests for Timespan class! !TrueTest commentStamp: 'TorstenBergmann 2/5/2014 08:49' prior: 0! SUnit tests for true/True class! !WeakMessageSendTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 0! SUnit tests for WeakMessageSend! !WeekTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 0! SUnit tests for weeks! !YearTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 0! SUnit tests for year handling! !AdditionalMethodStateTest commentStamp: 'TorstenBergmann 2/5/2014 08:30' prior: 0! SUnit tests for AdditionalMethodState! !BlockClosureTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 0! SUnit tests for BlockClosure! !ByteTextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 0! SUnit tests for ByteTextConverter! !ClassHierarchyTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 0! SUnit tests for the class hierarchy! !CodeSimulationTests commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 0! SUnit tests for code simulation! !CompiledMethodTrailerTest commentStamp: 'TorstenBergmann 2/5/2014 08:32' prior: 0! SUnit tests for CompiledMethodTrailer! !DateAndTimeDosEpochTest commentStamp: 'TorstenBergmann 2/5/2014 08:32' prior: 0! SUnit test for dos epoch (see DateAndTime)! !DateAndTimeUnixEpochTest commentStamp: 'TorstenBergmann 2/5/2014 08:33' prior: 0! Tests for unix epoch of DateAndTime! !EUCTextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 09:58' prior: 0! SUnit tests for EUC-JP encoding! !ExceptionTests commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 0! SUnit tests for exceptions! !GoferTest commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 0! SUnit tests for Gofer! !GoferApiTest commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! SUnit tests for Gofer API! !GoferOperationTest commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 0! SUnit tests for Gofer operations! !GoferReferenceTest commentStamp: 'TorstenBergmann 2/5/2014 09:37' prior: 0! SUnit tests for GoferReference and subclasses! !IVsAndClassVarNamesConflictTest commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 0! SUnit tests to tests conflicts for instance variables and class variable names! !IntegerDigitLogicTest commentStamp: 'TorstenBergmann 2/5/2014 08:37' prior: 0! SUnit test to test digit logic of integers! !IntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:37' prior: 0! SUnit tests for integers! !JobTest commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 0! SUnit tests for Job class! !MethodDictionaryTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 0! SUnit tests for MethodDictionary! !MethodPragmaTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 0! SUnit tests for method pragmas! !MonitorTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 0! SUnit tests for monitors! !MultiByteFileStreamTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 0! SUnit tests for MultiByteFileStream ! !PragmaTest commentStamp: 'TorstenBergmann 2/5/2014 08:42' prior: 0! SUnit tests for Pragma class! !ProcessTerminateBug commentStamp: 'TorstenBergmann 2/5/2014 08:42' prior: 0! SUnit tests for Process termination! !SelfEvaluatingObjectTest commentStamp: 'TorstenBergmann 2/5/2014 08:44' prior: 0! SUnit tests for self evaluting objects ! !SizeInMemoryTest commentStamp: 'TorstenBergmann 2/5/2014 08:44' prior: 0! SUnit tests for the size of objects in memory! !UTF16TextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 0! SUnit tests for UTF16TextConverter ! !UTF8TextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 0! SUnit tests for UTF8TextConverter! !MyTestNotification commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 0! A notification for tests ! !MyResumableTestError commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 0! A resumable error for tests! !MyTestError commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 0! An error for tests! !PoolDefiner commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 0! A pool used for testing purposes! !PoolDefiner2 commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 0! A pool used for testing purposes! !DatePrintFormatTester methodsFor: 'printing' stamp: 'SeanDeNigris 6/20/2012 03:33' prior: 20456487! printFormat ^ date printFormat: { dayPosition. monthPosition. yearPosition. delimiter. monthType. yearType }.! ! !ExampleForTest1 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 81395768! An example class at level 1 (directly below Object) used for testing class hierarchy! !ExampleForTest11 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 81395929! An example class at level 2 (indirectly below Object) used for testing class hierarchy! !ExampleForTest111 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 81396093! An example class at level 3 (indirectly below Object) used for testing class hierarchy! !ExampleForTest112 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 81396257! An example class at level 3 (indirectly below Object) used for testing class hierarchy! !ExampleForTest12 commentStamp: 'TorstenBergmann 2/5/2014 08:35' prior: 81396420! An example class at level 2 (indirectly below Object) used for testing class hierarchy! !ExceptionTester commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 81396582! Utility class to test exceptions! !GoferOperation commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 81396689! Common superclass of Gofer operations! !GoferLoad commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 81396796! Loading for specific packages using Gofer! !GoferSynchronize commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 81396914! Synchronize repos ! !GoferFetch commentStamp: 'TorstenBergmann 2/5/2014 09:31' prior: 81397003! Fetch packages using Gofer! !GoferPush commentStamp: 'TorstenBergmann 2/5/2014 09:32' prior: 81397099! Push a version! !GoferWorking commentStamp: 'TorstenBergmann 2/5/2014 09:34' prior: 81397186! Common superclass for workin copies in Gofer! !GoferChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 81397303! Handling changes! !GoferLocalChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 81397397! Handling local changes! !GoferBrowseLocalChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 81397503! Browse local changes! !GoferRemoteChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 81397602! Handling remote changes! !GoferBrowseRemoteChanges commentStamp: 'TorstenBergmann 2/5/2014 09:33' prior: 81397710! Browse remote changes! !GoferCleanup commentStamp: 'TorstenBergmann 2/5/2014 09:34' prior: 81397804! Cleanup working copies! !GoferCommit commentStamp: 'TorstenBergmann 2/5/2014 09:35' prior: 81397898! Commit work! !GoferRecompile commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81397984! Recompile! !GoferUnload commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81398065! Unload! !GoferUpdate commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81398143! Update! !GoferMerge commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81398220! Merge work! !GoferRevert commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81398302! Revert work! !X11Encoding commentStamp: 'TorstenBergmann 2/5/2014 09:57' prior: 81398385! X11 encoding! !X11Encoding class methodsFor: 'accessing' stamp: 'sd 2/4/2008 21:21' prior: 55011297! encoding | enc | enc := self getEncoding. enc ifNil: [ ^ nil ]. ^ enc asLowercase.! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:09' prior: 55011486! getEncoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55011662! getLocaleEncoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55011850! getPathEnc ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012024! getTextEnc ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012198! getXWinEnc ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012372! requestUTF8 ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012550! requestUTF8: bool ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012735! setEncoding: encoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55012921! setEncodingToLocale ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55013113! setPathEnc: encoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55013297! setPathEncToLocale ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55013487! setTextEnc: encoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55013671! setTextEncToLocale ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55013861! setXWinEnc: encoding ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'Tsutomu Hiroshima 12/5/2003 15:07' prior: 55014045! setXWinEncToLocale ^ nil ! ! !X11Encoding class methodsFor: 'accessing' stamp: 'mir 7/15/2004 18:57' prior: 55014221! useEncoding: encoding self setEncoding: encoding. LanguageEnvironment startUp. ^ self encoding.! ! !X11Encoding class methodsFor: 'accessing' stamp: 'mir 7/15/2004 18:57' prior: 55014408! useLocaleEncoding self setEncodingToLocale. LanguageEnvironment startUp. ^ self encoding.! ! !FloatTest methodsFor: 'tests - IEEE 754' stamp: 'nice 5/30/2006 02:34' prior: 22367849! test32bitGradualUnderflow "method asIEEE32BitWord did not respect IEEE gradual underflow" | conv expected exponentPart | "IEEE 32 bits Float have 1 bit sign/8 bit exponent/23 bits of mantissa after leading 1 2r1.mmmmmmmmmmmmmmmmmmmmmmm * (2 raisedTo: 2reeeeeeee-127) * sign except when 2reeeeeeee isZero, which is a gradual underflow: 2r0.mmmmmmmmmmmmmmmmmmmmmmm * (2 raisedTo: 2r00000000-126) * sign and when 2reeeeeeee = 255, which is infinity if mantissa all zero or nan otherwise" "case 1: This example is the first gradual underflow case" conv := 2r0.11111111111111111111111e-126 asIEEE32BitWord. "expected float encoded as sign/exponent/mantissa (whithout leading 1 or 0)" exponentPart := 0. expected := exponentPart bitOr: 2r11111111111111111111111. self assert: expected = conv. "case 2: smallest number" conv := 2r0.00000000000000000000001e-126 asIEEE32BitWord. expected := exponentPart bitOr: 2r1. self assert: expected = conv. "case 3: round to nearest even also in underflow cases... here round to upper" conv := 2r0.000000000000000000000011e-126 asIEEE32BitWord. expected := exponentPart bitOr: 2r10. self assert: expected = conv. "case 4: round to nearest even also in underflow cases... here round to lower" conv := 2r0.000000000000000000000101e-126 asIEEE32BitWord. expected := exponentPart bitOr: 2r10. self assert: expected = conv. "case 5: round to nearest even also in underflow cases... here round to upper" conv := 2r0.0000000000000000000001011e-126 asIEEE32BitWord. expected := exponentPart bitOr: 2r11. self assert: expected = conv. ! ! !FloatTest methodsFor: 'tests - IEEE 754' stamp: 'nice 5/30/2006 00:07' prior: 22369522! test32bitRoundingMode "method asIEEE32BitWord did not respect IEEE default rounding mode" | conv expected exponentPart | "IEEE 32 bits Float have 1 bit sign/8 bit exponent/23 bits of mantissa after leading 1 2r1.mmmmmmmmmmmmmmmmmmmmmmm * (2 raisedTo: 2reeeeeeee-127) * sign except when 2reeeeeeee isZero, which is a gradual underflow: 2r0.mmmmmmmmmmmmmmmmmmmmmmm * (2 raisedTo: 2r00000000-127) * sign and when 2reeeeeeee = 255, which is infinity if mantissa all zero or nan otherwise" "This example has two extra bits in mantissa for testing rounding mode case 1: should obviously round to upper" conv := 2r1.0000000000000000000000111e25 asIEEE32BitWord. "expected float encoded as sign/exponent/mantissa (whithout leading 1)" exponentPart := 25+127 bitShift: 23. "127 is 2r01111111 or 16r7F" expected := exponentPart bitOr: 2r10. self assert: expected = conv. "case 2: exactly in the mid point of two 32 bit float: round toward nearest even (to upper)" conv := 2r1.0000000000000000000000110e25 asIEEE32BitWord. expected := exponentPart bitOr: 2r10. self assert: expected = conv. "case 3: exactly in the mid point of two 32 bit float: round toward nearest even (to lower)" conv := 2r1.0000000000000000000000010e25 asIEEE32BitWord. expected := exponentPart bitOr: 2r0. self assert: expected = conv. "case 4: obviously round to upper" conv := 2r1.0000000000000000000000011e25 asIEEE32BitWord. expected := exponentPart bitOr: 2r1. self assert: expected = conv. ! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'nice 10/30/2009 22:23' prior: 22382903! testArcTan self assert: ((100 arcTan: 100) closeTo: Float pi / 4). self assert: ((-100 arcTan: 100) closeTo: Float pi / -4). self assert: ((100 arcTan: -100) closeTo: Float pi * 3 / 4). self assert: ((-100 arcTan: -100) closeTo: Float pi * -3 / 4). self assert: ((0 arcTan: 100) closeTo: 0). self assert: ((0 arcTan: -100) closeTo: Float pi). self assert: ((100 arcTan: 0) closeTo: Float pi / 2). self assert: ((-100 arcTan: 0) closeTo: Float pi / -2). self assert: ((Float negativeZero arcTan: 100) closeTo: 0). self assert: ((Float negativeZero arcTan: -100) closeTo: Float pi * -1). self assert: (0 arcTan: 0) = 0. self assert: (Float negativeZero arcTan: 0) = 0. self assert: ((0 arcTan: Float negativeZero) closeTo: Float pi). self assert: ((Float negativeZero arcTan: Float negativeZero) closeTo: Float pi negated). ! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 6/3/2011 21:28' prior: 22391221! testCeiling self assert: 1.0 ceiling = 1. self assert: 1.1 ceiling = 2. self assert: -2.0 ceiling = -2. self assert: -2.1 ceiling = -2.! ! !FloatTest methodsFor: 'tests - characterization' stamp: 'nice 6/11/2009 20:47' prior: 22376609! testCharacterization "Test the largest finite representable floating point value" self assert: Float fmax successor = Float infinity. self assert: Float infinity predecessor = Float fmax. self assert: Float fmax negated predecessor = Float infinity negated. self assert: Float infinity negated successor = Float fmax negated. "Test the smallest positive representable floating point value" self assert: Float fmin predecessor = 0.0. self assert: 0.0 successor = Float fmin. self assert: Float fmin negated successor = 0.0. self assert: 0.0 predecessor = Float fmin negated. "Test the relative precision" self assert: Float one + Float epsilon > Float one. self assert: Float one + Float epsilon = Float one successor. self assert: Float one + (Float epsilon / Float radix) = Float one. "Test maximum and minimum exponent" self assert: Float fmax exponent = Float emax. self assert: Float fminNormalized exponent = Float emin. Float denormalized ifTrue: [ self assert: Float fminDenormalized exponent = (Float emin + 1 - Float precision)]. "Alternative tests for maximum and minimum" self assert: (Float radix - Float epsilon) * (Float radix raisedTo: Float emax) = Float fmax. self assert: Float epsilon * (Float radix raisedTo: Float emin) = Float fmin. "Test sucessors and predecessors" self assert: Float one predecessor successor = Float one. self assert: Float one successor predecessor = Float one. self assert: Float one negated predecessor successor = Float one negated. self assert: Float one negated successor predecessor = Float one negated. self assert: Float infinity successor = Float infinity. self assert: Float infinity negated predecessor = Float infinity negated. self assert: Float nan predecessor isNaN. self assert: Float nan successor isNaN. "SPECIFIC FOR IEEE 754 double precision - 64 bits" self assert: Float fmax hex = '7FEFFFFFFFFFFFFF'. self assert: Float fminDenormalized hex = '0000000000000001'. self assert: Float fminNormalized hex = '0010000000000000'. self assert: 0.0 hex = '0000000000000000'. self assert: Float negativeZero hex = '8000000000000000'. self assert: Float one hex = '3FF0000000000000'. self assert: Float infinity hex = '7FF0000000000000'. self assert: Float infinity negated hex = 'FFF0000000000000'.! ! !FloatTest methodsFor: 'tests - compare' stamp: 'nice 7/19/2009 19:24' prior: 22397394! testCloseTo self deny: (Float nan closeTo: Float nan) description: 'NaN isn''t close to anything'. self deny: (Float nan closeTo: 1.0) description: 'NaN isn''t close to anything'. self deny: (1.0 closeTo: Float nan) description: 'NaN isn''t close to anything'. self deny: (-1.0 closeTo: 1.0). self deny: (1.0 closeTo: Float infinity). self assert: (Float infinity closeTo: Float infinity) description: 'since they are =, they also are closeTo:'. self assert: (1.0/3.0 closeTo: 1/3). self assert: (1.0e-8 closeTo: 0). self assert: (0 closeTo: 1.0e-8). self assert: (1+1.0e-8 closeTo: 1.0). self assert: (1000000001.0 closeTo: 1000000000.0). self deny: (1000000001 closeTo: 1000000000) description: 'exact representation are considered closeTo: only if equal'.! ! !FloatTest methodsFor: 'tests - compare' stamp: 'nice 5/30/2008 01:23' prior: 22398247! testComparison "test equality when Float conversion loose bits" | a b c | a := 16r1FFFFFFFFFFFFF1. b := 16r1FFFFFFFFFFFFF3. c := a asFloat. self assert: ((a = c) & (b = c)) ==> (a = b). "Test equality when Float conversion exact" self assert: 16r1FFFFFFFFFFFFF = 16r1FFFFFFFFFFFFF asFloat. self assert: 16r1FFFFFFFFFFFFF = 16r1FFFFFFFFFFFFF asFloat asInteger. "Test inequality when Float conversion loose bits" self assert: (((1 bitShift: 54)+1)/(1 bitShift: 54)) > 1. self assert: (((1 bitShift: 54)+1)/(1 bitShift: 54)) > 1.0. self assert: (((1 bitShift: 54)-1)/(1 bitShift: 54)) < 1. self assert: (((1 bitShift: 54)-1)/(1 bitShift: 54)) < 1.0. "Test exact vs inexact arithmetic" (1 to: 100) do: [:i | i isPowerOfTwo ifTrue: [self assert: (1/i) = (1/i) asFloat] ifFalse: [self deny: (1/i) = (1/i) asFloat]]. "Test overflow (compare to infinity)" a := (11 raisedTo: 400) / 2. b := (13 raisedTo: 400) / 2. c := a asFloat. self assert: ((a = c) & (b = c)) ==> (a = b). "every integer is smaller than infinity" self assert: a < Float infinity. self assert: a > Float infinity negated. "Test underflow" self deny: 1 / (11 raisedTo: 400) = 0. self deny: 1 / (11 raisedTo: 400) = 0.0. "Test hash code" self assert: ((Set new: 3) add: 3; add: 3.0; size) = ((Set new: 4) add: 3; add: 3.0; size).! ! !FloatTest methodsFor: 'tests - compare' stamp: 'nice 7/10/2009 22:27' prior: 22399671! testComparisonWhenPrimitiveFails "This is related to http://bugs.squeak.org/view.php?id=7361" self deny: 0.5 < (1/4). self deny: 0.5 < (1/2). self assert: 0.5 < (3/4). self deny: 0.5 <= (1/4). self assert: 0.5 <= (1/2). self assert: 0.5 <= (3/4). self assert: 0.5 > (1/4). self deny: 0.5 > (1/2). self deny: 0.5 > (3/4). self assert: 0.5 >= (1/4). self assert: 0.5 >= (1/2). self deny: 0.5 >= (3/4). self deny: 0.5 = (1/4). self assert: 0.5 = (1/2). self deny: 0.5 = (3/4). self assert: 0.5 ~= (1/4). self deny: 0.5 ~= (1/2). self assert: 0.5 ~= (3/4).! ! !FloatTest methodsFor: 'tests - arithmetic' stamp: 'st 9/20/2004 17:04' prior: 22390311! testContinuedFractions self assert: (Float pi asApproximateFractionAtOrder: 1) = (22/7). self assert: (Float pi asApproximateFractionAtOrder: 3) = (355/113)! ! !FloatTest methodsFor: 'tests' stamp: 'nice 10/4/2009 23:13' prior: 22389014! testCopy "Elementary tests" self assert: 2.0 copy = 2.0. self assert: -0.5 copy = -0.5. "Are exceptional Floats preserved by the copy ?" self assert: Float nan copy isNaN. self assert: Float infinity copy = Float infinity. self assert: Float infinity negated copy = Float infinity negated. "Is the sign of zero preserved by the copy ?" self assert: 0.0 copy hex = 0.0 hex. self assert: Float negativeZero copy hex = Float negativeZero hex.! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'nice 7/14/2011 13:30' prior: 22383835! testCopySignTo "Set up" | negatives negz positives strictNegatives strictPositives zero | strictPositives := {2. 2.5. Float infinity}. strictNegatives := {-3. -3.25. Float infinity negated}. zero := 0.0. negz := Float negativeZero. positives := strictPositives copyWith: zero. negatives := strictNegatives copyWith: negz. "Test the copy sign functions" positives do: [:aPositiveSign | positives do: [:aPositive | self assert: (aPositiveSign copySignTo: aPositive) = aPositive]. negatives do: [:aNegative | self assert: (aPositiveSign copySignTo: aNegative) = aNegative negated]. (aPositiveSign copySignTo: zero) sign = 0. (aPositiveSign copySignTo: negz) sign = 0]. negatives do: [:aNegativeSign | positives do: [:aPositive | self assert: (aNegativeSign copySignTo: aPositive) = aPositive negated]. negatives do: [:aNegative | self assert: (aNegativeSign copySignTo: aNegative) = aNegative]. (aNegativeSign copySignTo: zero) sign = -1. (aNegativeSign copySignTo: negz) sign = -1].! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49960915! testDegreeCos 45.0 degreeCos. "Following tests use approximate equality, because cosine are generally evaluated using inexact Floating point arithmetic" self assert: (45.0 degreeCos squared - 0.5) abs <= Float epsilon. self assert: (60.0 degreeCos - 0.5) abs <= Float epsilon. self assert: (120.0 degreeCos + 0.5) abs <= Float epsilon. -360.0 to: 360.0 do: [ :i | self assert: (i degreeCos closeTo: i degreesToRadians cos) ]. "Following tests use strict equality which is a requested property of degreeCos" -10.0 to: 10.0 do: [ :k | self assert: (k * 360 + 90) degreeCos = 0. self assert: (k * 360 - 90) degreeCos = 0. self assert: (k * 360 + 180) degreeCos + 1 = 0. self assert: (k * 360) degreeCos - 1 = 0 ]! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'nice 10/31/2010 21:49' prior: 22386019! testDegreeCosForExceptionalValues self assert: Float nan degreeCos isNaN. self assert: Float infinity degreeCos isNaN. self assert: Float infinity negated degreeCos isNaN.! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'CamilloBruni 8/31/2013 20:23' prior: 49961753! testDegreeSin 45.0 degreeSin. "Following tests use approximate equality, because sine are generally evaluated using inexact Floating point arithmetic" self assert: (45.0 degreeSin squared - 0.5) abs <= Float epsilon. self assert: (30.0 degreeSin - 0.5) abs <= Float epsilon. self assert: (-30.0 degreeSin + 0.5) abs <= Float epsilon. -360.0 to: 360.0 do: [ :i | self assert: (i degreeSin closeTo: i degreesToRadians sin) ]. "Following tests use strict equality which is a requested property of degreeSin" -10.0 to: 10.0 do: [ :k | self assert: (k * 360 + 90) degreeSin - 1 = 0. self assert: (k * 360 - 90) degreeSin + 1 = 0. self assert: (k * 360 + 180) degreeSin = 0. self assert: (k * 360) degreeSin = 0 ]! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'nice 10/31/2010 21:49' prior: 22387125! testDegreeSinForExceptionalValues self assert: Float nan degreeSin isNaN. self assert: Float infinity degreeSin isNaN. self assert: Float infinity negated degreeSin isNaN.! ! !FloatTest methodsFor: 'tests - arithmetic' stamp: 'GabrielOmarCotelli 6/6/2009 17:14' prior: 22390564! testDivide self assert: 1.5 / 2.0 = 0.75. self assert: 2.0 / 1 = 2.0. self should: [ 2.0 / 0 ] raise: ZeroDivide. self should: [ 2.0 / 0.0 ] raise: ZeroDivide. self should: [ 1.2 / Float negativeZero ] raise: ZeroDivide. self should: [ 1.2 / (1.3 - 1.3) ] raise: ZeroDivide ! ! !FloatTest methodsFor: 'tests - printing' stamp: 'SvenVanCaekenberghe 2/8/2013 15:54' prior: 22380485! testFloatPrintPolicy "It is hard to test printing Floats reliably, but this at least covers the code path" | pi | pi := FloatPrintPolicy value: InexactFloatPrintPolicy new during: [ Float pi printString ]. self assert: (pi beginsWith: '3.14159'). pi := FloatPrintPolicy value: ExactFloatPrintPolicy new during: [ Float pi printString ]. self assert: (pi beginsWith: '3.14159').! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'StephaneDucasse 11/1/2010 08:09' prior: 22391453! testFloatPrinting "This test shows that floats are printed exactly. The idea is too make sure that users understand that " self assert: (0.1+0.2) printString = '0.30000000000000004'. self assert: (-0.1-0.2) printString = '-0.30000000000000004'. self assert: 240 degreesToRadians cos = -0.5000000000000004. self assert: 240 degreesToRadians cos abs = 0.5000000000000004! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 7/24/2008 02:04' prior: 22391914! testFloatRounded "5000000000000001 asFloat has an exact representation (no round off error). It should round to nearest integer without loosing bits. This is a no regression test on http://bugs.squeak.org/view.php?id=7134" | x y int r | "This is a preamble asserting exactness of representation and quality of various conversions" int := 5000000000000001. x := int asFloat. y := (5 asFloat squared squared squared squared timesTwoPower: 15) + 1. self assert: x = y. self assert: x asTrueFraction = int. "this one should be true for any float in order to conform to ISO/IEC 10967-2" self assert: x rounded = x asTrueFraction rounded. self assert: x negated rounded = x negated asTrueFraction rounded. "a random test" r := Random new. 10000 timesRepeat: [ x := r next * 1.9999e16 + 1.0e12 . self assert: x rounded = x asTrueFraction rounded. self assert: x negated rounded = x negated asTrueFraction rounded]! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 4/26/2006 05:21' prior: 22392933! testFloatTruncated "(10 raisedTo: 16) asFloat has an exact representation (no round off error). It should convert back to integer without loosing bits. This is a no regression test on http://bugs.impara.de/view.php?id=3504" | x y int r | int := 10 raisedTo: 16. x := int asFloat. y := (5 raisedTo: 16) asFloat timesTwoPower: 16. self assert: x = y. self assert: x asInteger = int. "this one should be true for any float" self assert: x asInteger = x asTrueFraction asInteger. "a random test" r := Random new. 10000 timesRepeat: [ x := r next * 1.9999e16 + 1.0e12 . self assert: x truncated = x asTrueFraction truncated]! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 6/3/2011 21:29' prior: 22393658! testFloor self assert: 1.0 floor = 1. self assert: 1.1 floor = 1. self assert: -2.0 floor = -2. self assert: -2.1 floor = -3.! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 5/7/2006 16:22' prior: 22393868! testFractionAsFloat "use a random test" | r m frac err collec | r := Random new seed: 1234567. m := (2 raisedTo: 54) - 1. 200 timesRepeat: [ frac := ((r nextInt: m) * (r nextInt: m) + 1) / ((r nextInt: m) * (r nextInt: m) + 1). err := (frac - frac asFloat asTrueFraction) * frac reciprocal * (1 bitShift: 52). self assert: err < (1/2)]. collec := #(16r10000000000000 16r1FFFFFFFFFFFFF 1 2 16r20000000000000 16r20000000000001 16r3FFFFFFFFFFFFF 16r3FFFFFFFFFFFFE 16r3FFFFFFFFFFFFD). collec do: [:num | collec do: [:den | frac := Fraction numerator: num denominator: den. err := (frac - frac asFloat asTrueFraction) * frac reciprocal * (1 bitShift: 52). self assert: err <= (1/2)]].! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 1/10/2007 02:29' prior: 22394657! testFractionAsFloat2 "test rounding to nearest even" self assert: ((1<<52)+0+(1/4)) asFloat asTrueFraction = ((1<<52)+0). self assert: ((1<<52)+0+(1/2)) asFloat asTrueFraction = ((1<<52)+0). self assert: ((1<<52)+0+(3/4)) asFloat asTrueFraction = ((1<<52)+1). self assert: ((1<<52)+1+(1/4)) asFloat asTrueFraction = ((1<<52)+1). self assert: ((1<<52)+1+(1/2)) asFloat asTrueFraction = ((1<<52)+2). self assert: ((1<<52)+1+(3/4)) asFloat asTrueFraction = ((1<<52)+2).! ! !FloatTest methodsFor: 'tests' stamp: 'nice 7/15/2011 14:53' prior: 22376134! testFractionAsFloatWithUnderflow "test rounding to nearest even" | underflowPower | underflowPower := Float emin - Float precision. self assert: (2 raisedTo: underflowPower) asFloat = 0.0. self assert: (2 raisedTo: underflowPower) negated asFloat = 0.0. self assert: (2 raisedTo: underflowPower) negated asFloat sign = -1 description: 'a negative underflow should return a negative zero'.! ! !FloatTest methodsFor: 'tests - infinity behavior' stamp: 'nice 7/14/2009 09:32' prior: 22378996! testHugeIntegerCloseTo "This is a test for bug http://bugs.squeak.org/view.php?id=7368" "FloatTest new testHugeIntegerCloseTo" self deny: (1.0 closeTo: 200 factorial). self deny: (200 factorial closeTo: 1.0). self assert: (Float infinity closeTo: 200 factorial) = (200 factorial closeTo: Float infinity).! ! !FloatTest methodsFor: 'tests - infinity behavior' stamp: 'sd 6/5/2005 08:30' prior: 22379385! testInfinity1 "FloatTest new testInfinity1" | i1 i2 | i1 := 10000 exp. i2 := 1000000000 exp. self assert: i1 isInfinite & i2 isInfinite & (i1 = i2). "All infinities are equal. (This is a very substantial difference to NaN's, which are never equal." ! ! !FloatTest methodsFor: 'tests - infinity behavior' stamp: 'sd 6/5/2005 08:30' prior: 22379721! testInfinity2 "FloatTest new testInfinity2" | i1 i2 | i1 := 10000 exp. i2 := 1000000000 exp. i2 := 0 - i2. " this is entirely ok. You can compute with infinite values." self assert: i1 isInfinite & i2 isInfinite & i1 positive & i2 negative. self deny: i1 = i2. "All infinities are signed. Negative infinity is not equal to Infinity" ! ! !FloatTest methodsFor: 'tests - infinity behavior' stamp: 'nice 10/17/2007 23:54' prior: 22380149! testInfinityCloseTo "This is a test for bug http://bugs.squeak.org/view.php?id=6729:" "FloatTest new testInfinityCloseTo" self deny: (Float infinity closeTo: Float infinity negated). self deny: (Float infinity negated closeTo: Float infinity).! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 5/6/2006 22:13' prior: 22395214! testIntegerAsFloat "assert IEEE 754 round to nearest even mode is honoured" self deny: 16r1FFFFFFFFFFFF0801 asFloat = 16r1FFFFFFFFFFFF0800 asFloat. "this test is on 65 bits" self deny: 16r1FFFFFFFFFFFF0802 asFloat = 16r1FFFFFFFFFFFF0800 asFloat. "this test is on 64 bits" self assert: 16r1FFFFFFFFFFF1F800 asFloat = 16r1FFFFFFFFFFF20000 asFloat. "nearest even is upper" self assert: 16r1FFFFFFFFFFFF0800 asFloat = 16r1FFFFFFFFFFFF0000 asFloat. "nearest even is lower" ! ! !FloatTest methodsFor: 'tests - zero behavior' stamp: 'md 4/16/2003 15:02' prior: 22401936! testIsZero self assert: 0.0 isZero. self deny: 0.1 isZero.! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'sd 6/5/2005 08:31' prior: 22371400! testNaN1 "FloatTest new testNaN1" self assert: Float nan == Float nan. self deny: Float nan = Float nan. "a NaN is not equal to itself." ! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'StephaneDucasse 5/28/2011 13:45' prior: 22371630! testNaN2 "Two NaN values are always considered to be different. On an little-endian machine (32 bit Intel), Float nan is 16rFFF80000 16r00000000. On a big-endian machine (PowerPC), Float nan is 16r7FF80000 16r00000000. Changing the bit pattern of the first word of a NaN produces another value that is still considered equal to NaN. This test should work on both little endian and big endian machines. However, it is not guaranteed to work on future 64 bit versions of Squeak, for which Float may have different internal representations." "FloatTest new testNaN2" | nan1 nan2 | nan1 := Float nan copy. nan2 := Float nan copy. "test two instances of NaN with the same bit pattern" self deny: nan1 = nan2. self deny: nan1 == nan2. self deny: nan1 = nan1. self assert: nan1 == nan1. "change the bit pattern of nan1" self assert: nan1 size = 2. self assert: (nan1 at: 2) = 0. nan1 at: 1 put: (nan1 at: 1) + 999. self assert: nan1 isNaN. self assert: nan2 isNaN. self deny: (nan1 at: 1) = (nan2 at: 1). "test two instances of NaN with different bit patterns" self deny: nan1 = nan2. self deny: nan1 == nan2. self deny: nan1 = nan1. self assert: nan1 == nan1 ! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'sd 6/5/2005 08:32' prior: 22372887! testNaN3 "FloatTest new testNaN3" | set item identitySet | set := Set new. set add: (item := Float nan). self deny: (set includes: item). identitySet := IdentitySet new. identitySet add: (item := Float nan). self assert: (identitySet includes: item). "as a NaN is not equal to itself, it can not be retrieved from a set" ! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'sd 6/5/2005 08:32' prior: 22373294! testNaN4 "FloatTest new testNaN4" | dict | dict := Dictionary new. dict at: Float nan put: #NaN. self deny: (dict includes: Float nan). "as a NaN is not equal to itself, it can not be retrieved when it is used as a dictionary key" ! ! !FloatTest methodsFor: 'tests - IEEE 754' stamp: 'al 6/22/2008 11:52' prior: 22371088! testNaN5 self assert: ((Float nan asIEEE32BitWord printPaddedWith: $0 to: 32 base: 2) copyFrom: 2 to: 9) = '11111111'. self assert: (Float fromIEEE32Bit: (Integer readFrom: '01111111110000000000000000000000' readStream base: 2)) isNaN! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'nice 10/11/2007 00:09' prior: 22373610! testNaNCompare "IEEE 754 states that NaN cannot be ordered. As a consequence, every arithmetic comparison involving a NaN SHOULD return false. Except the is different test (~=). This test does verify this rule" | compareSelectors theNaN anotherNaN comparand brokenMethods warningMessage | compareSelectors := #(#< #<= #> #>= #=). theNaN := Float nan. anotherNaN := Float infinity - Float infinity. comparand := {1. 2.3. Float infinity. 2/3. 1.25s2. 2 raisedTo: 50}. comparand := comparand , (comparand collect: [:e | e negated]). comparand := comparand , {theNaN. anotherNaN}. "do a first pass to collect all broken methods" brokenMethods := Set new. comparand do: [:comp | compareSelectors do: [:op | (theNaN perform: op with: comp) ifTrue: [brokenMethods add: (theNaN class lookupSelector: op)]. (comp perform: op with: theNaN) ifTrue: [brokenMethods add: (comp class lookupSelector: op)]]. (theNaN ~= comp) ifFalse: [brokenMethods add: (theNaN class lookupSelector: #~=)]. (comp ~= theNaN) ifFalse: [brokenMethods add: (comp class lookupSelector: #~=)]]. "build a warning message to tell about all broken methods at once" warningMessage := String streamContents: [:s | s nextPutAll: 'According to IEEE 754 comparing with a NaN should always return false, except ~= that should return true.'; cr. s nextPutAll: 'All these methods failed to do so. They are either broken or call a broken one'. brokenMethods do: [:e | s cr; print: e methodClass; nextPutAll: '>>'; print: e selector]]. "Redo the tests so as to eventually open a debugger on one of the failures" brokenMethods := Set new. comparand do: [:comp2 | compareSelectors do: [:op2 | self deny: (theNaN perform: op2 with: comp2) description: warningMessage. self deny: (comp2 perform: op2 with: theNaN) description: warningMessage]. self assert: (theNaN ~= comp2) description: warningMessage. self assert: (comp2 ~= theNaN) description: warningMessage].! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'nice 3/14/2008 23:42' prior: 22375651! testNaNisLiteral self deny: Float nan isLiteral description: 'there is no literal representation of NaN'! ! !FloatTest methodsFor: 'tests - zero behavior' stamp: 'nice 8/21/2010 22:29' prior: 22402072! testNegativeZeroAbs self assert: Float negativeZero abs sign positive description: 'the absolute value of a negative zero is zero'! ! !FloatTest methodsFor: 'tests - zero behavior' stamp: 'nice 8/21/2010 22:30' prior: 22402278! testNegativeZeroSign self assert: Float negativeZero sign = -1! ! !FloatTest methodsFor: 'tests - printing' stamp: 'MarcusDenker 4/19/2013 15:01' prior: 35319314! testPrintPaddedWithTo "The problem was caused by treating the format specifier as a number rather than as a string, such the the number may be a Float subject to floating point rounding errors. The solution to treat the format specifier as a string, and extract the integer fields before and after the decimal point in the string." self assert: (1.0 printPaddedWith: $0 to: 2.2) = '01.00'. self assert: (1.0 printPaddedWith: $X to: 2.2) = 'X1.0X'. self assert: (1.0 printPaddedWith: $0 to: 2) = '01.0'. self assert: (12345.6789 printPaddedWith: $0 to: 2) = '12345.6789'. self assert: (12345.6789 printPaddedWith: $0 to: 2.2) = '12345.6789'. self assert: (12.34 printPaddedWith: $0 to: 2.2) = '12.34'. self assert: (12345.6789 printPaddedWith: $0 to: 2.2) = '12345.6789'. self assert: (123.456 printPaddedWith: $X to: 4.4) = 'X123.456X'. self assert: (1.0 printPaddedWith: $0 to: 2.1) = '01.0'. self assert: (1.0 printPaddedWith: $0 to: 2.2) = '01.00'. self assert: (1.0 printPaddedWith: $0 to: 2.3) = '01.000'. "previously failed due to float usage" self assert: (1.0 printPaddedWith: $0 to: 2.4) = '01.0000'. "previously failed due to float usage" self assert: (1.0 printPaddedWith: $0 to: 2.5) = '01.00000' ! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 3/14/2008 23:59' prior: 22395771! testReadFromManyDigits "A naive algorithm may interpret these representations as Infinity or NaN. This is http://bugs.squeak.org/view.php?id=6982" | s1 s2 | s1 := '1' , (String new: 321 withAll: $0) , '.0e-321'. s2 := '0.' , (String new: 320 withAll: $0) , '1e321'. self assert: (Number readFrom: s1) = 1. self assert: (Number readFrom: s2) = 1.! ! !FloatTest methodsFor: 'tests - NaN behavior' stamp: 'GabrielOmarCotelli 5/23/2009 20:38' prior: 22375844! testReciprocal self assert: 1.0 reciprocal = 1.0; assert: 2.0 reciprocal = 0.5; assert: -1.0 reciprocal = -1.0; assert: -2.0 reciprocal = -0.5. self should: [ 0.0 reciprocal ] raise: ZeroDivide! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 6/3/2011 21:37' prior: 22396206! testRounded self assert: 0.9 rounded = 1. self assert: 1.0 rounded = 1. self assert: 1.1 rounded = 1. self assert: -1.9 rounded = -2. self assert: -2.0 rounded = -2. self assert: -2.1 rounded = -2. "In case of tie, round to upper magnitude" self assert: 1.5 rounded = 2. self assert: -1.5 rounded = -2.! ! !FloatTest methodsFor: 'tests - rounding' stamp: 'GuillermoPolito 6/22/2012 14:44' prior: 22382649! testRounding " self debug: #testRounding " self assert: (10.1234 round: 2) = 10.12. self assert: (10.1234 round: 0) = 10! ! !FloatTest methodsFor: 'tests - compare' stamp: 'StephaneDucasse 2/13/2010 11:18' prior: 22400341! testSetOfFloat "Classical disagreement between hash and = did lead to a bug. This is a non regression test from http://bugs.squeak.org/view.php?id=3360" "self debug: #testSetOfFloat" | size3 size4 | size3 := (Set new: 3) add: 3; add: 3.0; size. size4 := (Set new: 4) add: 3; add: 3.0; size. self assert: size3 = size4 description: 'The size of a Set should not depend on its capacity.'! ! !FloatTest methodsFor: 'tests - mathematical functions' stamp: 'Janniklaval 10/23/2010 13:39' prior: 22387398! testSign "Set up" | negatives negz positives strictNegatives strictPositives zero | strictPositives := {2. 2.5. Float infinity}. strictNegatives := {-3. -3.25. Float infinity negated}. zero := 0.0. negz := Float negativeZero. positives := strictPositives copyWith: zero. negatives := strictNegatives copyWith: negz. "The sign of non zeros" strictPositives do: [:aPositive | self assert: aPositive sign = 1]. strictNegatives do: [:aNegative | self assert: aNegative sign = -1]. "The sign of zeros" self assert: zero sign = 0. self assert: negz sign = -1. "remark though that negz >= 0.0, and is thus considered positive... Weird" "Test the copy sign functions" positives do: [:aPositiveSign | positives do: [:aPositive | self assert: (aPositive sign: aPositiveSign) = aPositive]. negatives do: [:aNegative | self assert: (aNegative sign: aPositiveSign) = aNegative negated]. (zero sign: aPositiveSign) sign = 0. (negz sign: aPositiveSign) sign = 0]. negatives do: [:aNegativeSign | positives do: [:aPositive | self assert: (aPositive sign: aNegativeSign) = aPositive negated]. negatives do: [:aNegative | self assert: (aNegative sign: aNegativeSign) = aNegative]. (zero sign: aNegativeSign) sign = -1. (negz sign: aNegativeSign) sign = -1].! ! !FloatTest methodsFor: 'tests - printing' stamp: 'nice 10/11/2008 21:45' prior: 22382346! testStoreBase16 "This bug was reported in mantis http://bugs.squeak.org/view.php?id=6695" self assert: (20.0 storeStringBase: 16) = '16r14.0' description: 'the radix prefix should not be omitted, except in base 10'! ! !FloatTest methodsFor: 'tests' stamp: 'MarcusDenker 5/2/2013 11:27' prior: 36345300! testStoreOn "If storeOn: prints exactly and the parser avoid cumulating round off Errors, then Float should be read back exactly. Note: there is no guarantee to restore the bit pattern of NaN though" self assert: (self class compiler evaluate: Float halfPi storeString) = Float halfPi. self assert: (self class compiler evaluate: Float halfPi negated storeString) = Float halfPi negated. self assert: (self class compiler evaluate: Float infinity storeString) = Float infinity. self assert: (self class compiler evaluate: Float infinity negated storeString) = Float infinity negated. self assert: (self class compiler evaluate: Float nan storeString) isNaN.! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'dtl 9/18/2004 12:40' prior: 22396600! testStringAsNumber "This covers parsing in Number>>readFrom:" | aFloat | aFloat := '10r-12.3456' asNumber. self assert: -12.3456 = aFloat. aFloat := '10r-12.3456e2' asNumber. self assert: -1234.56 = aFloat. aFloat := '10r-12.3456d2' asNumber. self assert: -1234.56 = aFloat. aFloat := '10r-12.3456q2' asNumber. self assert: -1234.56 = aFloat. aFloat := '-12.3456q2' asNumber. self assert: -1234.56 = aFloat. aFloat := '12.3456q2' asNumber. self assert: 1234.56 = aFloat. ! ! !FloatTest methodsFor: 'tests - conversion' stamp: 'nice 6/3/2011 21:34' prior: 22397167! testTruncated self assert: 1.0 truncated = 1. self assert: 1.1 truncated = 1. self assert: -2.0 truncated = -2. self assert: -2.1 truncated = -2.! ! !FloatTest methodsFor: 'tests - zero behavior' stamp: 'sd 6/5/2005 08:33' prior: 22402413! testZero1 "FloatTest new testZero1" self assert: Float negativeZero = 0 asFloat. self assert: (Float negativeZero at: 1) ~= (0 asFloat at: 1). "The negative zero has a bit representation that is different from the bit representation of the positive zero. Nevertheless, both values are defined to be equal." ! ! !FloatTest methodsFor: 'tests - arithmetic' stamp: 'nice 10/14/2011 21:43' prior: 22390933! testZeroRaisedToNegativePower "this is a test related to http://bugs.squeak.org/view.php?id=6781" self should: [0.0 raisedTo: -1] raise: ZeroDivide. self should: [0.0 raisedTo: -1.0] raise: ZeroDivide.! ! !FloatTest methodsFor: 'tests - zero behavior' stamp: 'nice 3/23/2008 16:00' prior: 22402801! testZeroSignificandAsInteger "This is about http://bugs.squeak.org/view.php?id=6990" self assert: 0.0 significandAsInteger = 0! ! !GoferResource commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 81398471! SUnit test resource for Gofer testing! !TestLocalVariable methodsFor: 'defaults' stamp: 'IgorStasenko 11/2/2011 19:04' prior: 52360715! default "My default value for a new process is 0." ^0! ! !BehaviorTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 81398581! SUnit tests for Behavior! !ClassTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 81398675! SUnit tests for classes! !DateAndTimeTest commentStamp: 'TorstenBergmann 2/5/2014 08:33' prior: 81398781! SUnit tests for date and time! !FalseTest commentStamp: 'TorstenBergmann 2/5/2014 08:50' prior: 81398887! SUnit tests for false/False class! !FractionTest commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 81398993! SUnit tests for fractions! !LargeNegativeIntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 81399103! SUnit tests for large negative integers! !LargePositiveIntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 81399227! SUnit tests for large positive integers! !MetaclassTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 81399340! Sunit tests for metaclasses! !NumberTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 81399438! SUnit tests for numbers! !ObjectTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 81399532! SUnit tests for objects! !RandomTest commentStamp: 'TorstenBergmann 2/5/2014 08:43' prior: 81399626! SUnit tests for random generator! !RandomTest methodsFor: 'running' stamp: 'md 4/2/2003 12:32' prior: 32115212! setUp gen := Random seed: 112629.! ! !ScheduleTest commentStamp: 'TorstenBergmann 2/5/2014 08:43' prior: 81399731! SUnit tests for recurring schedules (class Schedule).! !StopwatchTest commentStamp: 'TorstenBergmann 2/5/2014 08:45' prior: 81399858! SUnit tests for the stopwatch ! !TimespanTest commentStamp: 'TorstenBergmann 2/5/2014 08:49' prior: 81399961! SUnit tests for Timespan class! !TrueTest commentStamp: 'TorstenBergmann 2/5/2014 08:49' prior: 81400060! SUnit tests for true/True class! !WeakMessageSendTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 81400171! SUnit tests for WeakMessageSend! !WeekTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 81400271! SUnit tests for weeks! !YearTest commentStamp: 'TorstenBergmann 2/5/2014 08:48' prior: 81400361! SUnit tests for year handling! !RootClassPoolUser class methodsFor: 'accessing' stamp: 'StephaneDucasse 10/7/2011 21:16' prior: 32281714! author ^ Author! ! !RootClassPoolUser class methodsFor: 'accessing' stamp: 'StephaneDucasse 10/7/2011 21:16' prior: 32281838! gloups ^ Gloups! ! !AdditionalMethodStateTest commentStamp: 'TorstenBergmann 2/5/2014 08:30' prior: 81400476! SUnit tests for AdditionalMethodState! !BlockClosureTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 81400590! SUnit tests for BlockClosure! !ByteTextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 81400700! SUnit tests for ByteTextConverter! !ClassHierarchyTest commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 81400812! SUnit tests for the class hierarchy! !ClassHierarchyTest methodsFor: 'tests' stamp: 'MarcusDenker 7/12/2012 18:00' prior: 19284786! testSubclassInstVar | subclasses | SystemNavigation new allClassesDo: [ :cls| subclasses := cls subclasses. self assert: subclasses isNil not. subclasses do: [:subclass| self assert: (subclasses occurrencesOf: subclass) = 1. self assert: subclass superclass == cls. "cls removeSubclass: subclass. cls addSubclass: subclass."]]! ! !ClassHierarchyTest methodsFor: 'tests' stamp: 'CamilloBruni 1/30/2013 15:48' prior: 19285230! testSubclasses " self class fixSubclasses " | subclasses | SystemNavigation new allClassesDo: [ :cls| self assert: (cls superclass subclasses includes: cls) description: cls name, ' is not in ', cls superclass name, '''s subclasses' ]! ! !CodeSimulationTests commentStamp: 'TorstenBergmann 2/5/2014 08:31' prior: 81400927! SUnit tests for code simulation! !CompiledMethodTrailerTest commentStamp: 'TorstenBergmann 2/5/2014 08:32' prior: 81401044! SUnit tests for CompiledMethodTrailer! !DateAndTimeDosEpochTest commentStamp: 'TorstenBergmann 2/5/2014 08:32' prior: 81401165! SUnit test for dos epoch (see DateAndTime)! !DateAndTimeUnixEpochTest commentStamp: 'TorstenBergmann 2/5/2014 08:33' prior: 81401292! Tests for unix epoch of DateAndTime! !EUCTextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 09:58' prior: 81401408! SUnit tests for EUC-JP encoding! !ExceptionTests commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 81401514! SUnit tests for exceptions! !GoferTest commentStamp: 'TorstenBergmann 2/5/2014 09:30' prior: 81401610! SUnit tests for Gofer! !GoferApiTest commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81401704! SUnit tests for Gofer API! !GoferOperationTest commentStamp: 'TorstenBergmann 2/5/2014 09:36' prior: 81401808! SUnit tests for Gofer operations! !GoferReferenceTest commentStamp: 'TorstenBergmann 2/5/2014 09:37' prior: 81401919! SUnit tests for GoferReference and subclasses! !IVsAndClassVarNamesConflictTest commentStamp: 'TorstenBergmann 2/5/2014 08:36' prior: 81402056! SUnit tests to tests conflicts for instance variables and class variable names! !IntegerDigitLogicTest commentStamp: 'TorstenBergmann 2/5/2014 08:37' prior: 81402216! SUnit test to test digit logic of integers! !IntegerTest commentStamp: 'TorstenBergmann 2/5/2014 08:37' prior: 81402330! SUnit tests for integers! !JobTest commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 81402422! SUnit tests for Job class! !MethodDictionaryTest commentStamp: 'TorstenBergmann 2/5/2014 08:40' prior: 81402528! SUnit tests for MethodDictionary! !MethodDictionaryTest methodsFor: 'tests' stamp: 'MarcusDenker 2/21/2010 12:52' prior: 26385541! testBehaviorLocalyDefined "method not acquired from a trait or from its superclass" " self debug: #testBehavior " self assert: (Object methodDict isKindOf: MethodDictionary). self assert: (Object selectors asSortedCollection = Object selectors asSortedCollection).! ! !MethodDictionaryTest methodsFor: 'tests' stamp: 'MarcusDenker 5/10/2013 00:25' prior: 37305735! testIncludesKeyLocalyDefined " self debug: #testIncludesKeyLocalyDefined " self assert: (self class includesSelector: #testIncludesKeyLocalyDefined).! ! !MethodDictionaryTest methodsFor: 'tests' stamp: 'TestRunner 12/25/2009 08:23' prior: 26386170! testKeyAtValueIfAbsentLocalyDefined " self debug: #testKeyAtValueIfAbsentLocalyDefined " self assert: (self class methodDict keyAtValue: (self class >> #testKeyAtValueIfAbsentLocalyDefined) ifAbsent: []) == #testKeyAtValueIfAbsentLocalyDefined. self assert: (self class methodDict keyAtValue: (Object >> #printOn:) ifAbsent: [#notFound]) == #notFound! ! !MethodPragmaTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 81402637! SUnit tests for method pragmas! !MonitorTest commentStamp: 'TorstenBergmann 2/5/2014 08:41' prior: 81402739! SUnit tests for monitors! !MultiByteFileStreamTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 81402847! SUnit tests for MultiByteFileStream ! !PragmaTest commentStamp: 'TorstenBergmann 2/5/2014 08:42' prior: 81402955! SUnit tests for Pragma class! !ProcessTerminateBug commentStamp: 'TorstenBergmann 2/5/2014 08:42' prior: 81403063! SUnit tests for Process termination! !SelfEvaluatingObjectTest commentStamp: 'TorstenBergmann 2/5/2014 08:44' prior: 81403183! SUnit tests for self evaluting objects ! !SizeInMemoryTest commentStamp: 'TorstenBergmann 2/5/2014 08:44' prior: 81403299! SUnit tests for the size of objects in memory! !UTF16TextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 81403427! SUnit tests for UTF16TextConverter ! !UTF8TextConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:18' prior: 81403545! SUnit tests for UTF8TextConverter! !MyTestNotification commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 81403657! A notification for tests ! !SmallIntegerTest methodsFor: 'tests - Class Methods' stamp: 'StephaneDucasse 6/9/2012 22:56' prior: 33430951! testBasicNew self should: [SmallInteger basicNew] raise: self defaultTestError. ! ! !SmallIntegerTest methodsFor: 'tests - operations' stamp: 'AlexandreBergel 8/21/2011 17:44' prior: 33432129! testCeiling self assert: 2 ceiling = 2. self assert: -2 ceiling = -2. self assert: 2.1 ceiling = 3. self assert: -2.1 ceiling = -2.! ! !SmallIntegerTest methodsFor: 'tests - Class Methods' stamp: 'SeanDeNigris 5/18/2012 12:37' prior: 33431133! testDigitAt | number | number := 16rABCDEF. self assert: (number digitAt: 1) equals: 16rEF. self assert: (number digitAt: 2) equals: 16rCD. self assert: (number digitAt: 3) equals: 16rAB.! ! !SmallIntegerTest methodsFor: 'tests - arithmetic' stamp: 'sd 6/5/2005 08:59' prior: 33431890! testDivide self assert: 2 / 1 = 2. self assert: (3 / 2) isFraction. self assert: 4 / 2 = 2. self should: [ 1 / 0 ] raise: ZeroDivide.! ! !SmallIntegerTest methodsFor: 'tests - Class Methods' stamp: 'sd 6/5/2005 08:59' prior: 33431415! testMaxVal self assert: (SmallInteger maxVal = 16r3FFFFFFF).! ! !SmallIntegerTest methodsFor: 'tests - Class Methods' stamp: 'sd 6/5/2005 08:59' prior: 33431566! testMinVal self assert: (SmallInteger minVal = -16r40000000).! ! !SmallIntegerTest methodsFor: 'tests - Class Methods' stamp: 'StephaneDucasse 6/9/2012 22:56' prior: 33431731! testNew self should: [SmallInteger new] raise: self defaultTestError. ! ! !SmallIntegerTest methodsFor: 'tests - printing' stamp: 'fbs 12/8/2005 12:58' prior: 33432352! testPrintPaddedWith self assert: (123 printPaddedWith: $0 to: 10 base: 2) = '0001111011'. self assert: (123 printPaddedWith: $0 to: 10 base: 8) = '0000000173'. self assert: (123 printPaddedWith: $0 to: 10 base: 10) = '0000000123'. self assert: (123 printPaddedWith: $0 to: 10 base: 16) = '000000007B'.! ! !SmallIntegerTest methodsFor: 'tests - printing' stamp: 'al 7/21/2008 21:48' prior: 33432741! testPrintString self assert: 1 printString = '1'. self assert: -1 printString = '-1'. self assert: SmallInteger minVal printString = '-1073741824'. self assert: SmallInteger maxVal printString = '1073741823'. self assert: 12345 printString = '12345'. self assert: -54321 printString = '-54321'. self assert: 0 decimalDigitLength = 1. self assert: 4 decimalDigitLength = 1. self assert: 12 decimalDigitLength = 2. self assert: 123 decimalDigitLength = 3. self assert: 1234 decimalDigitLength = 4. self assert: 56789 decimalDigitLength = 5. self assert: 657483 decimalDigitLength = 6. self assert: 6571483 decimalDigitLength = 7. self assert: 65174383 decimalDigitLength = 8. self assert: 625744831 decimalDigitLength = 9. self assert: 1000001111 decimalDigitLength = 10. self assert: SmallInteger maxVal decimalDigitLength = 10.! ! !MyResumableTestError commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 81403763! A resumable error for tests! !MyResumableTestError methodsFor: 'exception description' stamp: 'tfei 6/13/1999 00:46' prior: 37150000! isResumable ^true! ! !MyTestError commentStamp: 'TorstenBergmann 2/5/2014 08:38' prior: 81403862! An error for tests! !PoolDefiner commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 81403952! A pool used for testing purposes! !PoolDefiner2 commentStamp: 'TorstenBergmann 2/5/2014 08:39' prior: 81404057! A pool used for testing purposes! !CollectionCombinator methodsFor: 'operating' stamp: 'BG 12/20/2001 21:33' prior: 19555661! combineFromIdx: myIdx " this method is recursive. Recursion runs from values 1 to collectionOfArrays size of parameter myIdx. Each time it is called, this method has the responsiblity to provide all possible values for one index position of the result tuples. That index position is given by the value of myIdx." (collectionOfArrays at: myIdx) do: [:item | buffer at: myIdx put: item. myIdx = collectionOfArrays size ifTrue: [resultProcessingBlock value: buffer shallowCopy] ifFalse: [self combineFromIdx: myIdx + 1] ]. " The buffer is a shared object and its contents are later changed. It is therefore necessary to make a copy. "! ! !CollectionCombinator methodsFor: 'operating' stamp: 'BG 12/20/2001 21:32' prior: 19556439! forArrays: anArray processWith: aBlock " anArray is a kind of a sequenceable collection of arrays. aBlock is a block with one argument, that is used to process a tuple immediately after it is constructed. " collectionOfArrays := anArray. resultProcessingBlock := aBlock. buffer := Array new: anArray size. self combineFromIdx: 1 ! ! "KernelTests"! "Multilingual-Encodings"! ----End fileIn----! ----QUIT----2014-02-06T08:23:58.450597+01:00 Pharo.image priorSource: 31051513! ----STARTUP----2014-02-06T08:23:58.634632+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-06T08:24:02.574632+01:00 Pharo.image priorSource: 31126478! ----STARTUP----2014-02-06T08:28:53.691+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-06T08:28:53.959+01:00 Pharo-30745.image priorSource: 31126675! ----STARTUP----2014-02-06T16:35:46.097128+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/6/2014 16:33' prior: 81383458! commentForCurrentUpdate ^ '12514 OCSemanticWarnings ignore "cancel" from a confirmation dialog https://pharo.fogbugz.com/f/cases/12514 12824 Class comment missing for package ConfigurationCommandLineHandler https://pharo.fogbugz.com/f/cases/12824 12512 SemanticAnalyzer ignores answer from UnknownSelectorWarning https://pharo.fogbugz.com/f/cases/12512 12442 Nautilus brakes code when removing more than one unused local variables https://pharo.fogbugz.com/f/cases/12442 12823 Class comment missing in Monticello package https://pharo.fogbugz.com/f/cases/12823 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/6/2014 16:33'! script399 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.66.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-SvenVanCaekenberghe.1717.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.72.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1015.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/6/2014 16:33'! update30746 "self new update30746" self withUpdateLog: '12514 OCSemanticWarnings ignore "cancel" from a confirmation dialog https://pharo.fogbugz.com/f/cases/12514 12824 Class comment missing for package ConfigurationCommandLineHandler https://pharo.fogbugz.com/f/cases/12824 12512 SemanticAnalyzer ignores answer from UnknownSelectorWarning https://pharo.fogbugz.com/f/cases/12512 12442 Nautilus brakes code when removing more than one unused local variables https://pharo.fogbugz.com/f/cases/12442 12823 Class comment missing in Monticello package https://pharo.fogbugz.com/f/cases/12823 '. self loadTogether: self script399 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCFrontier commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 0! Utility class! !MCMergeRecord commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 0! A record for merging! !MCMock commentStamp: 'TorstenBergmann 2/5/2014 13:51' prior: 0! Common superclass for mocks! !MCMockDependentItem commentStamp: 'TorstenBergmann 2/5/2014 13:52' prior: 0! Mock for dependency testing! !MCReader commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 0! Common superclass for Monticello readers! !MCVersionReader commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 0! A version reader! !MCMczReader commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! Reader for an MCZ format! !MCMcdReader commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! Reader for an MCD format! !MCRepository commentStamp: 'TorstenBergmann 2/5/2014 13:54' prior: 0! A Metacello repository! !MCDictionaryRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 0! A dictionary repository (in nemory)! !MCFileBasedRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 0! A file based metacello repository! !MCDirectoryRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 0! A metacello repository in a directory ! !MCServerRegistry commentStamp: 'TorstenBergmann 2/5/2014 13:56' prior: 0! Registry for metacello servers! !MCVersion commentStamp: 'TorstenBergmann 2/5/2014 13:56' prior: 0! A Metacello version! !MCDiffyVersion commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! A diffy version! !MCVersionDependency commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 0! Dependencies! !MCVersionMerger commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 0! Merge versions! !MCVersionNotification commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 0! Version notification! !MCVersionSorter commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 0! Sort versions! !MCFilteredVersionSorter commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 0! Sort filtered versions ! !MCWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! Common superclass for metacello writers! !MCMczWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! Writing MCZ format! !MCMcdWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 0! Writing MCD format! !MCNoChangesException commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 0! Notify that no changes have to be merged! !ConfigurationCommandLineHandlerTest commentStamp: 'TorstenBergmann 2/6/2014 08:16' prior: 0! SUnit tests for class ConfigurationCommandLineHandler! !ConfigurationCommandLineHandler commentStamp: 'TorstenBergmann 2/6/2014 08:17' prior: 42204052! Command line handler for dealing with Metacello configurations from the command line Usage: config [--help] [] [--install[=]] [--group=] [--username=] [--password=] --help show this help message A Monticello repository name A valid Metacello Configuration name A valid version for the given configuration A valid Metacello group name An optional username to access the configuration's repository An optional password to access the configuration's repository Examples: # display this help message pharo Pharo.image config # list all configurations of a repository pharo Pharo.image config $MC_REPOS_URL # list all the available versions of a confgurtation pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo # install the stable version pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install #install a specific version '1.5' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 #install a specific version '1.5' and only a specific group 'Tests' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 --group=Tests ! !MCChangeSelectionRequest commentStamp: 'TorstenBergmann 2/5/2014 13:45' prior: 0! Notify about a change selection request! !MCMergeResolutionRequest commentStamp: 'TorstenBergmann 2/5/2014 13:51' prior: 0! Notify to resolve conflicts by merging! !MCVersionNameAndMessageRequest commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 0! Notify to requests for version name and message! !MCClassTraitDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:45' prior: 0! A class trait definition! !MCMockDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:46' prior: 0! A mock definition used for testing purposes! !MCScriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:46' prior: 0! Common superclass for script definitions! !MCPostscriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:47' prior: 0! A postscript evaluated after load! !MCPreambleDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:47' prior: 0! A preamble evaluated before load! !MCRemovalPostscriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:48' prior: 0! A postscript evaluated after unloading/removing! !MCRemovalPreambleDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:48' prior: 0! A preamble evaluated before unloading/removing! !MCMockAPoolDictionary commentStamp: 'TorstenBergmann 2/5/2014 13:52' prior: 0! Mocking a pool! !MCDirtyPackageInfo commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 0! A mock for dirty package info used for testing purposes! !MCEmptyPackageInfo commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 0! A mock for empty package info used for testing purposes! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'NicolaiHess 2/3/2014 21:42' prior: 78212698! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [ :node | self declareVariableNode: node ]. aSequenceNode parent isMethod ifTrue: [ aSequenceNode parent pragmas detect: [ :pragma | pragma isPrimitiveError ] ifFound: [ :pragma | self declareVariableNode: (RBVariableNode named: pragma arguments last value asString) ] ]. aSequenceNode statements do: [ :each | self visitNode: each ]. aSequenceNode temporaries reverseDo: [ :node | node binding isUnused ifTrue: [ self unusedVariable: node ] ]! ! !MCFrontier commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 81471175! Utility class! !MCMergeRecord commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 81471262! A record for merging! !MCMock commentStamp: 'TorstenBergmann 2/5/2014 13:51' prior: 81471349! Common superclass for mocks! !MCMockDependentItem commentStamp: 'TorstenBergmann 2/5/2014 13:52' prior: 81471456! Mock for dependency testing! !MCReader commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 81471552! Common superclass for Monticello readers! !MCVersionReader commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 81471668! A version reader! !MCMczReader commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81471756! Reader for an MCZ format! !MCMcdReader commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81471852! Reader for an MCD format! !MCRepository commentStamp: 'TorstenBergmann 2/5/2014 13:54' prior: 81471949! A Metacello repository! !MCDictionaryRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 81472054! A dictionary repository (in nemory)! !MCFileBasedRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 81472171! A file based metacello repository! !MCDirectoryRepository commentStamp: 'TorstenBergmann 2/5/2014 13:55' prior: 81472286! A metacello repository in a directory ! !MCServerRegistry commentStamp: 'TorstenBergmann 2/5/2014 13:56' prior: 81472401! Registry for metacello servers! !MCVersion commentStamp: 'TorstenBergmann 2/5/2014 13:56' prior: 81472501! A Metacello version! !MCDiffyVersion commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81472595! A diffy version! !MCVersionDependency commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 81472690! Dependencies! !MCVersionMerger commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 81472778! Merge versions! !MCVersionNotification commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 81472874! Version notification! !MCVersionSorter commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 81472970! Sort versions! !MCFilteredVersionSorter commentStamp: 'TorstenBergmann 2/6/2014 08:10' prior: 81473067! Sort filtered versions ! !MCWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81473159! Common superclass for metacello writers! !MCMczWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81473270! Writing MCZ format! !MCMcdWriter commentStamp: 'TorstenBergmann 2/6/2014 08:08' prior: 81473360! Writing MCD format! !OCUnusedVariableWarning methodsFor: 'correcting' stamp: 'NicolaiHess 2/3/2014 21:44' prior: 49471118! defaultAction | answer | self errorNotification ifFalse: [ ^nil ]. answer := UIManager default chooseFrom: #('yes' 'no') lines: #() title: node name asWideString, ' appears to be unused in this method. OK to remove it?' withCRs. (answer = 2 ) ifTrue: [ ^self]. (answer = 0 ) ifTrue: [ self compilationContext failBlock value]. self node parent scope removeTemp: (self node parent scope lookupVar:(node name)). self node parent removeTemporaryNamed: node name. self requestor correctFrom: node start to: node stop with: ''. ! ! !MCNoChangesException commentStamp: 'TorstenBergmann 2/5/2014 13:53' prior: 81473459! Notify that no changes have to be merged! !OCUnknownSelectorWarning methodsFor: 'correcting' stamp: 'NicolaiHess 2/5/2014 01:07' prior: 68931737! openMenuIn: aBlock | alternatives labels lines caption choice name newSelector | name := node selector. alternatives := Symbol possibleSelectorsFor: name. labels := Array streamContents: [:s | s nextPut: name; nextPutAll: alternatives; nextPut: 'cancel']. lines := {1. alternatives size + 1}. caption := 'Unknown selector, please\confirm, correct, or cancel' withCRs. choice := aBlock value: labels value: lines value: caption. (choice isZero or: [ choice = labels size ]) ifTrue: [ ^ self compilationContext failBlock value ]. choice = 1 ifFalse: [ newSelector := alternatives at: choice - 1. self replaceSelectorTextTo: newSelector. self node selector: newSelector]. self resume: true.! ! !OCUnknownSelectorWarning methodsFor: 'correcting' stamp: 'NicolaiHess 2/5/2014 01:06'! replaceSelectorTextTo: aNewSelector | offset | offset := 0. aNewSelector keywords doWithIndex: [ :k :i | | selectorPart | selectorPart := self node selectorParts at: i. self requestor correctFrom: offset + selectorPart start to: offset + selectorPart stop with: k. offset := offset + k size - selectorPart value size ]! ! !ConfigurationCommandLineHandlerTest commentStamp: 'TorstenBergmann 2/6/2014 08:16' prior: 81473595! SUnit tests for class ConfigurationCommandLineHandler! !ConfigurationCommandLineHandler commentStamp: 'TorstenBergmann 2/6/2014 08:17' prior: 81473747! Command line handler for dealing with Metacello configurations from the command line Usage: config [--help] [] [--install[=]] [--group=] [--username=] [--password=] --help show this help message A Monticello repository name A valid Metacello Configuration name A valid version for the given configuration A valid Metacello group name An optional username to access the configuration's repository An optional password to access the configuration's repository Examples: # display this help message pharo Pharo.image config # list all configurations of a repository pharo Pharo.image config $MC_REPOS_URL # list all the available versions of a confgurtation pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo # install the stable version pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install #install a specific version '1.5' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 #install a specific version '1.5' and only a specific group 'Tests' pharo Pharo.image config $MC_REPOS_URL ConfigurationOfFoo --install=1.5 --group=Tests ! !MCChangeSelectionRequest commentStamp: 'TorstenBergmann 2/5/2014 13:45' prior: 81475136! Notify about a change selection request! !MCMergeResolutionRequest commentStamp: 'TorstenBergmann 2/5/2014 13:51' prior: 81475260! Notify to resolve conflicts by merging! !MCVersionNameAndMessageRequest commentStamp: 'TorstenBergmann 2/6/2014 08:09' prior: 81475389! Notify to requests for version name and message! !OCUninitializedVariableWarning methodsFor: 'correcting' stamp: 'NicolaiHess 2/5/2014 10:07' prior: 38925113! openMenuIn: aBlock | caption index | caption := node name, ' appears to be uninitialized at this point. Proceed anyway?'. index := aBlock value: #('yes' 'no') value: #() value: caption. (index = 1) ifFalse:[^self compilationContext failBlock value]. ^ self resume: true.! ! !MCClassTraitDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:45' prior: 81475519! A class trait definition! !MCMockDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:46' prior: 81475620! A mock definition used for testing purposes! !MCScriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:46' prior: 81475742! Common superclass for script definitions! !MCPostscriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:47' prior: 81475865! A postscript evaluated after load! !MCPreambleDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:47' prior: 81475979! A preamble evaluated before load! !MCRemovalPostscriptDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:48' prior: 81476101! A postscript evaluated after unloading/removing! !MCRemovalPreambleDefinition commentStamp: 'TorstenBergmann 2/5/2014 13:48' prior: 81476236! A preamble evaluated before unloading/removing! !MCMockAPoolDictionary commentStamp: 'TorstenBergmann 2/5/2014 13:52' prior: 81476364! Mocking a pool! !MCDirtyPackageInfo commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 81476457! A mock for dirty package info used for testing purposes! !MCEmptyPackageInfo commentStamp: 'TorstenBergmann 2/5/2014 13:49' prior: 81476591! A mock for empty package info used for testing purposes! "OpalCompiler-Core"! ----End fileIn----! ----QUIT----2014-02-06T16:35:50.12728+01:00 Pharo.image priorSource: 31126869! ----STARTUP----2014-02-06T16:35:50.331711+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-06T16:35:54.511709+01:00 Pharo.image priorSource: 31153793! ----STARTUP----2014-02-06T16:40:59.779002+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-06T16:41:00.101006+01:00 Pharo-30746.image priorSource: 31153989! ----STARTUP----2014-02-06T17:30:38.768624+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/6/2014 17:28' prior: 81458811! commentForCurrentUpdate ^ '12822 CategoryAdded announced twice when a class is created https://pharo.fogbugz.com/f/cases/12822 12803 SimulationGuardException is not referenced and should therefore be moved to "Deprecated" package https://pharo.fogbugz.com/f/cases/12803 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/6/2014 17:28'! script400 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.253.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.677.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.337.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.74.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-MarcusDenker.37.mcz Spec-Tools-MarcusDenker.185.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/6/2014 17:28'! update30747 "self new update30747" self withUpdateLog: '12822 CategoryAdded announced twice when a class is created https://pharo.fogbugz.com/f/cases/12822 12803 SimulationGuardException is not referenced and should therefore be moved to "Deprecated" package https://pharo.fogbugz.com/f/cases/12803 '. self loadTogether: self script400 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SimulationGuardException commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 81347846! Notify about an exception while simulating a guard! !SimulationGuardException commentStamp: 'TorstenBergmann 2/4/2014 21:44' prior: 81497906! Notify about an exception while simulating a guard! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33343963! args ^ args! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33344068! args: arguments args := arguments! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'MarcusDenker 5/16/2013 09:09' prior: 38394875! messageText ^ 'triggered by ', method methodClass printString, '>>', method selector! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33344380! method ^ method! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33344489! method: aMethod method := aMethod! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33344616! receiver ^ receiver! ! !SimulationGuardException methodsFor: 'accessing' stamp: 'ToonVerwaest 6/7/2010 22:13' prior: 33344729! receiver: aReceiver receiver := aReceiver! ! !SystemOrganizer methodsFor: 'accessing' stamp: 'MartinDias 2/5/2014 18:38' prior: 51622110! addCategory: newCategory (self includesCategory: newCategory) ifTrue: [ ^ self ]. super addCategory: newCategory. SystemAnnouncer uniqueInstance classCategoryAdded: newCategory.! ! !SystemOrganizer methodsFor: 'queries' stamp: 'LucFabresse 10/24/2010 17:42' prior: 51627042! categoriesMatching: matchString "Return all matching categories" self categories ifNil: [ ^#() ]. ^ self categories select: [:c | matchString match: c]! ! !SystemOrganizer methodsFor: 'queries' stamp: '' prior: 51627242! classesInCategory: category ^ (self listAtCategoryNamed: category) collect: [ :className | self environment at: className ] ! ! !SystemOrganizer methodsFor: 'queries' stamp: '' prior: 51627410! commentInventory: categoryName "SystemOrganization commentInventory: 'Morphic*'" | classes commentedClasses | classes := OrderedCollection new. self categories withIndexCollect: [ :cat :idx | (categoryName match: cat) ifTrue: [ classes addAll: (self listAtCategoryNumber: idx) ] ifFalse: [ nil ] ]. commentedClasses := classes select: [ :catCls | (self environment at: catCls) hasComment ]. ^ 'There are ' , classes size asString , ' classes in ' , categoryName , ' of which ' , commentedClasses size asString , ' have comments and ' , (classes size - commentedClasses size) asString , ' do not yet have comments.'! ! !SystemOrganizer methodsFor: 'testing' stamp: 'MartinDias 2/5/2014 18:44' prior: 51626319! includesCategory: aString "Tests if a category is already included." ^ self categories ifNil: [ false ] ifNotNil: [ :categories | categories includes: aString ]! ! !SystemOrganizer methodsFor: 'queries' stamp: '' prior: 51628090! orderedTraitsIn: category "Answer an OrderedCollection containing references to the traits in the category whose name is the argument, category (a string). The traits are ordered so they can be filed in." | behaviors traits | behaviors := (self listAtCategoryNamed: category asSymbol) collect: [ :title | self environment at: title ]. traits := behaviors reject: [ :each | each isBehavior ]. traits := traits asSortedCollection: [ :t1 :t2 | (t2 traitComposition allTraits includes: t1) or: [ (t1 traitComposition allTraits includes: t2) not ] ]. ^ traits asArray! ! !SystemOrganizer methodsFor: 'queries' stamp: '' prior: 51628709! removeMissingClasses "Remove any class names that are no longer in the Smalltalk dictionary. Used for cleaning up after garbage collecting user-generated classes." "SystemOrganization removeMissingClasses" elementArray copy do: [ :el | (self environment includesKey: el) ifFalse: [ self removeElement: el ] ]! ! !SystemOrganizer methodsFor: 'queries' stamp: 'GuillermoPolito 6/26/2012 15:58' prior: 51629117! superclassOrder: category "Answer an OrderedCollection containing references to the classes in the category whose name is the argument, category (a string). The classes are ordered with superclasses first so they can be filed in." | behaviors classes | behaviors := (self listAtCategoryNamed: category asSymbol) collect: [ :title | self environment at: title ]. classes := behaviors select: [ :each | each isBehavior ]. ^ Class superclassOrder: classes ! ! !SystemOrganizer methodsFor: 'queries' stamp: '' prior: 51625809! uncommentedClassesIn: categoryName "SystemOrganization uncommentedClassesIn: 'Morphic*'" | classes | classes := OrderedCollection new. self categories withIndexCollect: [ :cat :idx | (categoryName match: cat) ifTrue: [ classes addAll: (self listAtCategoryNumber: idx) ] ifFalse: [ nil ] ]. ^ (classes collect: [ :clsName | self environment at: clsName ] thenSelect: [ :cls | cls hasComment not ]) asArray! ! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'MartinDias 2/5/2014 18:21'! testClassAddedToNewCategoryShouldAnnounceCategoryAdded self subscribeOn: CategoryAdded. self deny: (self class environment organization includesCategory: self aCategory). Object subclass: self aClassName instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: (self class environment organization includesCategory: self aCategory). self assert: self collectedAnnouncements size equals: 1.! ! !SlotClassBuilderTest methodsFor: 'running' stamp: 'MartinDias 2/5/2014 18:18' prior: 44948138! tearDown "We remove the classes that could have been created during test run" super tearDown. SystemAnnouncer uniqueInstance suspendAllWhile: [ { self aClassName. self anotherClassName. self yetAnotherClassName. self yetYetAnotherClassName } do: [ :each | Smalltalk globals at: each ifPresent: [ :class | class removeFromSystem ]]]. SystemAnnouncer uniqueInstance unsubscribe: self. self cleanUpTrait: TOne; cleanUpTrait: TTwo. Smalltalk organization removeCategory: self aCategory.! ! "Deprecated30"! "Kernel"! "SlotTests"! "System-Support"! ----End fileIn----! ----QUIT----2014-02-06T17:30:44.864634+01:00 Pharo.image priorSource: 31154186! ----STARTUP----2014-02-06T17:30:45.061226+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-06T17:30:49.183226+01:00 Pharo.image priorSource: 31172505! ----STARTUP----2014-02-06T17:35:34.167198+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-06T17:35:34.461191+01:00 Pharo-30747.image priorSource: 31172702! ----STARTUP----2014-02-07T08:30:44.749262+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/7/2014 08:27' prior: 81486131! commentForCurrentUpdate ^ '12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag https://pharo.fogbugz.com/f/cases/12789 12827 Part II : Compiling a method often makes nautilus deselect the package https://pharo.fogbugz.com/f/cases/12827 12522 Package filter input capture all keyboard shortcuts https://pharo.fogbugz.com/f/cases/12522 12812 Class comments missing in package Spec-Tools and Spec-Tests and BlocEditor should be renamed to BlockEditor https://pharo.fogbugz.com/f/cases/12812 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/7/2014 08:27'! script401 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.255.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.678.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.340.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.112.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.74.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/7/2014 08:27'! update30748 "self new update30748" self withUpdateLog: '12789 RPackage>>#moveClass:fromPackage:toTag: Ignores Tag https://pharo.fogbugz.com/f/cases/12789 12827 Part II : Compiling a method often makes nautilus deselect the package https://pharo.fogbugz.com/f/cases/12827 12522 Package filter input capture all keyboard shortcuts https://pharo.fogbugz.com/f/cases/12522 12812 Class comments missing in package Spec-Tools and Spec-Tests and BlocEditor should be renamed to BlockEditor https://pharo.fogbugz.com/f/cases/12812 '. self loadTogether: self script401 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Abstract Widget setter API! !BlockApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 0! Widget setter API for BlocEditor! !BooleanApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Widget setter API for boolean! !ColorApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Widget setter API for colors! !IntegerApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Widget setter API for integers! !StApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Widget setter API for STEditor! !StringApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 0! Widget setter API for strings! !BlockEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 0! Block Editor! !ColorEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 0! Color editor! !IntegerEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 0! Integer editor! !STEditor commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 0! ST Editor! !WidgetSetter commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 0! Widget ! !WidgetEditor commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 0! Widget editor! !SubwidgetItem commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 0! A subwidget item! !ButtonModelTest commentStamp: 'TorstenBergmann 2/5/2014 09:21' prior: 0! SUnit tests for Button model! !AbstractApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517117! Abstract Widget setter API! !BlockApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 81517218! Widget setter API for BlocEditor! !BlockApiSetter methodsFor: 'initialize' stamp: 'TorstenBergmann 2/5/2014 09:22' prior: 18207221! initializeWidgets self instantiateModels: #( selector LabelModel choice #BlockEditor ). self selector text: ''. self choice whenBlockChangedDo: [:b | self setValueTo: b ]! ! !BooleanApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517327! Widget setter API for boolean! !ColorApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517431! Widget setter API for colors! !IntegerApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517536! Widget setter API for integers! !StApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517638! Widget setter API for STEditor! !StringApiSetter commentStamp: 'TorstenBergmann 2/5/2014 09:18' prior: 81517744! Widget setter API for strings! !BlockEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 81517845! Block Editor! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:05'! block ^ block value! ! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! block: aBlock block value: aBlock ! ! !BlockEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/11/2012 18:05'! buildWithSpec ^ self buildWithSpecLayout: self layout! ! !BlockEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/11/2012 18:09'! buildWithSpec: aSpec ^ self buildWithSpecLayout: self layout! ! !BlockEditor methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 7/12/2012 18:00'! help: aString text help: aString ! ! !BlockEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 1/23/2014 12:01'! initialize super initialize. block := nil asReactiveVariable! ! !BlockEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 7/12/2012 18:25'! initializeWidgets self instantiateModels: #( pre LabelModel post LabelModel text TextInputFieldModel ok ButtonModel ). pre text: '['. post text: ']'. text autoAccept: false; entryCompletion: nil; acceptBlock: [ self okAction ]; ghostText: 'body'. ok label: 'ok'; state: false; enabled: true; action: [ self okAction ]. self focusOrder add: text; add: ok! ! !BlockEditor methodsFor: 'private' stamp: 'BenjaminVanRyseghem 7/11/2012 18:58'! layout | width width2 | width := StandardFonts defaultFont widthOfStringOrText: pre getText. width2 := StandardFonts defaultFont widthOfStringOrText: post getText. ^ SpecLayout composed newRow: [:r | r newColumn: [:c | c add: #pre ] width: width; add: #text; newColumn: [:c | c add: #post ] width: width2; newColumn: [:c | c add: #ok ] width: 25 ] height: 25; yourself! ! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/12/2012 18:20'! ok ^ ok! ! !BlockEditor methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 10/17/2013 16:06'! okAction text accept. block value: (Smalltalk evaluate: (String streamContents: [:s | s << '[' << text getText <<']'])).! ! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/11/2012 18:08'! post ^ post! ! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/11/2012 18:08'! pre ^ pre! ! !BlockEditor methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 7/12/2012 18:20'! text ^ text! ! !BlockEditor methodsFor: 'protocol-events' stamp: 'BenjaminVanRyseghem 7/11/2012 19:11'! whenBlockChangedDo: aBlock block whenChangedDo: aBlock ! ! !ColorEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 81517929! Color editor! !IntegerEditor commentStamp: 'TorstenBergmann 2/5/2014 09:19' prior: 81518015! Integer editor! !STEditor commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 81518098! ST Editor! !WidgetSetter commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 81518180! Widget ! !WidgetEditor commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 81518260! Widget editor! !RPackage methodsFor: 'private' stamp: 'ThierryGoubier 2/5/2014 07:19'! importClass: aClass inTag: aTag "import a class already created but not attached to a package to the receiver. Handle also *- convention. Methods defined in *category are not added to the package. Pay attention that it will not import anything from the metaClass side" self basicImportClass: aClass. self basicImportClass: aClass theMetaClass. self addClassDefinition: aClass toClassTag: aTag name! ! !RPackage methodsFor: 'private' stamp: 'ThierryGoubier 2/5/2014 07:14' prior: 80800362! moveClass: aClass fromPackage: oldPackage toTag: aTag oldPackage removeClass: aClass. self importClass: aClass inTag: aTag. SystemAnnouncer uniqueInstance classRepackaged: aClass from: oldPackage to: self.! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'NicolaiHess 2/7/2014 00:39' prior: 71865686! addAllToSelection: aCollection | selHolder | self searchedElement: nil. aCollection do: [:m | m highlight; selected: true ]. self selectionChanged. self selectionUpdateFromViewWhile: [ selHolder := self newSelectionHolderWithNodePath: (aCollection last path collect: [:m | m complexContents]). self listModel selection: selHolder] ! ! !MorphTreeListManager methodsFor: 'selection change' stamp: 'NicolaiHess 2/7/2014 00:39' prior: 26922261! selectAll self allNodeMorphs isEmpty ifTrue: [^ self]. self isMultiple ifFalse: [^ self]. self addAllToSelection: self allNodeMorphs! ! !SubwidgetItem commentStamp: 'TorstenBergmann 2/5/2014 09:20' prior: 81518347! A subwidget item! !PackageTreeNautilusUI methodsFor: 'displaying' stamp: 'BenjaminVanRyseghem 1/29/2014 18:03' prior: 78172757! buildFirstColumn: aWindow | buttons | buttons := PanelMorph new. self setShortcuts: #NautilusPackageShortcuts to: buttons. buttons changeProportionalLayout; addMorph: self buildGroupsButton fullFrame: ((0@0 corner: 0.5@1) asLayoutFrame rightOffset: -2); addMorph: self buildToggleButton fullFrame: ((0.5@0 corner: 1@1) asLayoutFrame topLeftOffset: 2@0); hResizing: #spaceFill; vResizing: #spaceFill. ^ PanelMorph new changeProportionalLayout; addMorph: self buildList fullFrame: (LayoutFrame identity topOffset: 30; bottomOffset: -30); addMorph: self buildPackageSearch fullFrame: (LayoutFrame identity bottomFraction: 0; bottomOffset: 25; leftOffset: -1; rightOffset: 1); addMorph: buttons fullFrame: ((0@1 corner: 1@1) asLayoutFrame topOffset: -25; bottomOffset: -1); hResizing: #spaceFill; vResizing: #spaceFill; yourself.! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'BenjaminVanRyseghem 1/29/2014 18:01' prior: 79768302! buildPackageSearch "It is an search dialog which filters package list" | textMorph | searchWidget := SearchMorph new model: self; updateSelector: #packageSearchUpdate:; ghostText: 'Type: Pkg1|^Pkg2|Pk.*Core$'; list: SharedValueHolder instance; useSelectionIndex: false; setIndexSelector: #packageSearchUpdate:; yourself. textMorph := searchWidget contentMorph textMorph. self setShortcuts: #NautilusGlobalShortcuts to: textMorph. textMorph bindKeyCombination: Character tab asKeyCombination toAction: [ textMorph navigateFocusForward ]. ^ searchWidget! ! !ButtonModelTest commentStamp: 'TorstenBergmann 2/5/2014 09:21' prior: 81518439! SUnit tests for Button model! BlocEditor removeSelector: #whenBlockChangedDo:! BlocEditor removeSelector: #text! BlocEditor removeSelector: #pre! BlocEditor removeSelector: #post! BlocEditor removeSelector: #okAction! BlocEditor removeSelector: #ok! BlocEditor removeSelector: #layout! BlocEditor removeSelector: #initializeWidgets! BlocEditor removeSelector: #initialize! BlocEditor removeSelector: #help:! BlocEditor removeSelector: #buildWithSpec:! BlocEditor removeSelector: #buildWithSpec! BlocEditor removeSelector: #block:! BlocEditor removeSelector: #block! Smalltalk globals removeClassNamed: #BlocEditor! "Morphic-Base"! "Nautilus"! "RPackage-Core"! "Spec-Tools"! ----End fileIn----! ----QUIT----2014-02-07T08:30:51.465273+01:00 Pharo.image priorSource: 31172899! ----STARTUP----2014-02-07T08:30:51.685652+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-07T08:30:55.991649+01:00 Pharo.image priorSource: 31195115! ----STARTUP----2014-02-07T08:35:55.755321+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-07T08:35:56.153323+01:00 Pharo-30748.image priorSource: 31195312! ----STARTUP----2014-02-07T10:20:35.476049+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/7/2014 10:18' prior: 81504851! commentForCurrentUpdate ^ '12825 SimulateMouseSpecification>>testSimulateClick https://pharo.fogbugz.com/f/cases/12825 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/7/2014 10:18'! script402 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.255.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.678.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.340.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.74.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/7/2014 10:18'! update30749 "self new update30749" self withUpdateLog: '12825 SimulateMouseSpecification>>testSimulateClick https://pharo.fogbugz.com/f/cases/12825 '. self loadTogether: self script402 merge: false. RPackageOrganizer default unregisterPackageNamed: 'ReactiveVariable'. self flushCaches. ! ! "ScriptLoader30"! !UITestCase methodsFor: 'running' stamp: 'BenComan 2/7/2014 00:25' prior: 53919437! runCase | result | "Skip the test if we're in headless mode" self flag: 'Use skip feature once it is ready'. Smalltalk isHeadless ifTrue: [ ^ self skip ]. SystemProgressMorph allInstances do: [ :spm | spm hide ]. World activeHand resetClickState. result := super runCase . SystemProgressMorph allInstances do: [ :spm | spm show ]. ^ result! ! "SUnit-Core"! ----End fileIn----! ----QUIT----2014-02-07T10:20:37.892283+01:00 Pharo.image priorSource: 31195509! ----STARTUP----2014-02-07T10:20:38.073945+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-07T10:20:42.235939+01:00 Pharo.image priorSource: 31207766! ----STARTUP----2014-02-07T10:25:35.525244+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-07T10:25:35.993258+01:00 Pharo-30749.image priorSource: 31207963! ----STARTUP----2014-02-07T17:05:41.447208+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 2/7/2014 17:01' prior: 81527454! commentForCurrentUpdate ^ '12255 Integrate Versionner in Pharo 3.0 https://pharo.fogbugz.com/f/cases/12255 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 2/7/2014 17:01'! script403 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.44.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.255.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.678.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1020.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.340.mcz RPackage-SystemIntegration-EstebanLorenzano.208.mcz RPackage-Tests-MarcusDenker.136.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.74.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-EstebanLorenzano.6.mcz Versionner-Core-Commands-EstebanLorenzano.39.mcz Versionner-Core-DependenciesModel-EstebanLorenzano.68.mcz Versionner-Core-Model-EstebanLorenzano.35.mcz Versionner-Help-EstebanLorenzano.4.mcz Versionner-Spec-Browser-EstebanLorenzano.108.mcz Versionner-Tests-Core-Commands-EstebanLorenzano.8.mcz Versionner-Tests-Core-DependenciesModel-EstebanLorenzano.30.mcz Versionner-Tests-Core-Model-EstebanLorenzano.12.mcz Versionner-Tests-Resources-EstebanLorenzano.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 2/7/2014 17:02'! update30750 "self new update30750" self withUpdateLog: '12255 Integrate Versionner in Pharo 3.0 https://pharo.fogbugz.com/f/cases/12255 '. self loadTogether: self script403 merge: false. self flushCaches. ! ! "ScriptLoader30"! !VSVersionMorph commentStamp: '' prior: 0! A MTVersionMorph is morph used to display a Metacello version. It display the version string and optional tags (dev, stable, etc.)! !VersionnerProjectBrowser commentStamp: '' prior: 0! A VersionnerProjectBrowser can be used to browse a Metacello configuration. You can display and edit project versions and dependencies. Quick overview: VersionnerProjectBrowser example! !VersionnerProjectPackagesPanel commentStamp: '' prior: 0! A VersionnerProjectPackagesPanel is the panel related to packages defined in a project (a configuration). It shows packages and provides actions on them. Instance Variables addPackageButton: ButtonModel editPackageButton: ButtonModel packageChangesButton: ButtonModel packages: A collection of MTPackage to display packagesList: IconListModel packagesLabel: LabelModel project: MTProject savePackageButton: ButtonModel addPackageButton - Add a new package editPackageButton - Edit an existing package packageChangesButton - Get changes on a package packages - the list of packages that belongs to a specfied project (configuration) packagesLabel - The top label of this pane project - The project owning packages. removePackageButton - remove a declared package. savePackageButton - Commit changes and update package version ! !VersionnerProjectPanel commentStamp: '' prior: 0! A VersionPanel is the panel used to show details about a given version of a configurationOf. Instance Variables config: The configuration (an MBConfigurationInfo instance) of the project to display details on. packageList: The specWidget used to display packages describes in the version ! !VersionnerProjectToolBar commentStamp: '' prior: 0! Versionner toolbar spec definition. ! !VersionnerSpecBrowser commentStamp: '' prior: 0! Tool used to manage project dependencies. This tool uses ToolBox and Metacello to manage project dependencies (ConfigurationOf*). The GUI is built with Spec. You can find Versionner in the World menu (Tools category). Otherwise, you can launch it with : VersionnerSpecBrowser open. ! !VersionnerToolBar commentStamp: '' prior: 0! Versionner configuration list toolBar spec definition. ! !MTProjectModelChanged commentStamp: '' prior: 0! A MTAnnouncement is used to signal a change on a MTProject model.! !MTDependantProjectTest commentStamp: '' prior: 0! Test clas for a dependant project! !MTProjectTest commentStamp: '' prior: 0! Test class for MTProject! !VersionListModel commentStamp: '' prior: 0! A VersionListModel is a lsit model used to display package versions. It is needed to be able to override the okToChange method to be able to ask the user before he loose changes made on the selected version. ! !VSGroupNode commentStamp: '' prior: 0! Abstract class used to display groups in a tree.! !VSGroupLeafNode commentStamp: '' prior: 0! Abstract class used to display a group with its specific icons and no child in a tree.! !VSPackageNode commentStamp: '' prior: 0! Class used to display packages in a tree.! !VSPackageLeafNode commentStamp: '' prior: 0! Abstract class used to display a package with its specific icons and no child in a tree.! !VSProjectNode commentStamp: '' prior: 0! Class used to display projects with specific icons and no child in a tree.! !VSProjectLeafNode commentStamp: '' prior: 0! Abstract class used to display a project with its specific icons and no child in a tree.! !VSRequirementsNode commentStamp: '' prior: 0! A VSRequirementsNode is used to display dependencies requirements in a tree.! !ConfigurationOfVersionnerTestBitmapCharacterSet commentStamp: '' prior: 0! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfVersionnerTestBitmapCharacterSet-StephaneDucasse.2. ! !ConfigurationOfVersionnerTestXMLParserTemplate commentStamp: '' prior: 0! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfXMLParser-StephaneDucasse.11. ! !ConfigurationOfVersionnerTestXMLWriter commentStamp: '' prior: 0! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfXMLWriter-StephaneDucasse.29. ! !MBCommand commentStamp: '' prior: 0! MBCommand is a command design pattern for capturing actions.! !MBAbstractPackageCommand commentStamp: '' prior: 0! For grouping package commands! !MBConfigurationRoot commentStamp: '' prior: 0! MB stands for Metacello Borwser. MBConfigurationRoot is the root object holding information on all available configurations in the image. Instance Variables announcer: configurations: a collection of MBConfigurationInfo. password: username: ! !MBAbstractInfoList commentStamp: '' prior: 0! A MBAbstractInfoList is an abstraction used to hold information on groups, packages and projects. Instance Variables groups: a list of groups (MBGroupInfo instances) infoList: packages: projects: ! !MBBaselineInfo commentStamp: '' prior: 0! A MBBaselineInfo holds information on a baselinf of a configuration. ! !MBConfigurationInfo commentStamp: '' prior: 0! A MBConfigurationInfo holds information on a specific configuration, i.e. on the ConfigurationOf class of a project. Instance Variables baselines: list of baselines (MBBaseLineInfo instances) of this configuration. branch: ?? configurationClass: the configuration class (ConfigurationOf instance). configurationRoot: a link to the root object with all configurations. currentVersion: ?? trimVersionLists: true if ?? versions: list of versions (MBVersionInfo instances) of this configuration. workingCopy: the Metacello working copy ! !MBSpecInfo commentStamp: '' prior: 0! A MBSpecInfo holds information on Metacello specifications. Instance Variables configurationInfo: the object holding information on the whole configuration. spec: the specification of this object (a MetacelloSpec). ! !MBAbstractPackageInfo commentStamp: '' prior: 0! A MBAbstractPackageInfo is an abstraction to represent both project and packages. Instance Variables packageName: name of the package workingCopy: a MCWorkingCopy representing the version of the package in memory ! !MBGroupInfo commentStamp: '' prior: 0! A MBGroupInfo holds information on a group defintiion. Instance Variables groupContents: an array with group contents as literals . ! !MCModel2MTModelVisitor commentStamp: '' prior: 0! A MCModel2MTModelVisitor visits a Metacello model to transform it to a MT Model . Instance variables: - project : the root element (an MTProject) of the target model MCModel2MTModelVisitor new visitConfiguration: ConfigurationOfVersionner withVersion: (ConfigurationOfVersionner project version: #development)! !MTDependency commentStamp: '' prior: 0! A MTDependency is an abstraction for project dependencies. Instance Variables - name : The dependency name - repository : The repository URL used to find this dependency - version : The specific version describes by the dependency - platforms : If not nil, the dependency is only applicable to specified platforms - dependencies : A dependency could have dependencies - project : The project root node - parent: The owner of the dependency.! !MTDependantProject commentStamp: '' prior: 0! A dependant project represents an external projetc you are dependending on. Instance Variables - configurationClass : the configurationClass this project represents - repository : The core repository URL of this project! !MTGroup commentStamp: '' prior: 0! A MTGroup is a convenient way to group software dependencies (instances of MTDependency). Instance Variables - dependencies : A collection of dependencies defiing the group. ! !MTPackage commentStamp: '' prior: 0! A MTPackage represents an internal depedency of a project, i.e a package located in the same MCPackage. Note: Metacello allows to describe external dependencies. In this case, transitive dependencies are not fetched. As this is not the good way to express dependencies, it is not supported here!!! !MTDevelopmentWorkfow commentStamp: '' prior: 0! This class is used to manage the development workflow for a dedicated project. ! !MTModelComparator commentStamp: '' prior: 0! A comparator that can be used to compare a whole dependency graph.! !MTPlatform commentStamp: '' prior: 0! A MTPlatform reprensents targeted platforms (ex: pharo1.4.x, pharo2.x) ! !MTProject commentStamp: '' prior: 0! A project represents a software development project, and more presicely, its depdendencies (also known as configuration). Note: Need to add extra methods with "for:" parameter to handle platforms (e.g. for: #'pharo' do) Instance Variables - configurationClass : the configurationClass this project represents - repository : The core repository URL of this project - packages : internal packages (MTPackage) the project depends on - groups : definitions of set of dependencies (MTGroups) - depedentProjects : list of external projects this project depends on (list of project names) ! !MTProjectBFSIterator commentStamp: '' prior: 0! BFS (see http://en.wikipedia.org/wiki/Breadth-first_search) iterator for an MTProject graph. We avoid to visit already visited children of a node.! !MTProjectExampleBuilder commentStamp: '' prior: 0! A MTProjectExampleBuilder is used to create some MTProjects with dummy data or tests purposes. ! !MTVersion commentStamp: '' prior: 0! A MTVersion describes a specific version of a dependency. Instance Variables - author : the version author - versionString : a version String that can be used to load the described version (e.g ConfigurationOfXXX project version: versionString) - description : the version description - timestamp : the commit time of this version - project : a reference to the described project! !TagMorphFactory commentStamp: '' prior: 0! A TagMorph is a morph used to define some tags. It uses a rounded rectancle with a text inside. self example! !VSCommand commentStamp: '' prior: 0! VSCommand is a command design pattern for capturing actions.! !VSConfigurationCommand commentStamp: '' prior: 0! A command that apply to a project configuration.! !VSBrowseConfigurationCommand commentStamp: '' prior: 0! Browse the configuration class.! !VSLoadProjectCommand commentStamp: '' prior: 0! Load a project configuration into the image. The project should have a configuration class. It will always load the latest version of the configuration package.! !VSUnloadConfigurationCommand commentStamp: '' prior: 0! Unload the package with the selected configuration.! !VSUpdateFromItsRepositoryCommand commentStamp: '' prior: 0! Update the configuration from the version contained in its repository.! !VSValidateConfigurationCommand commentStamp: '' prior: 0! This command allows you to check inconsistencies in a Configuration class.! !VSDevCycleCommands commentStamp: '' prior: 0! Versionnner commands related to the development workflow.! !VSReleaseDevelopmentVersionCommand commentStamp: '' prior: 0! Turn the version into a release. It therefore appears as #stable afterward". ! !VSUpdateDevelopmentVersionCommand commentStamp: 'ChristopheDemarey 2/6/2014 13:29' prior: 0! Update the current development version with infomation provided by the project. ! !VSOpenRepositoryCommand commentStamp: '' prior: 0! Open an inspector on the remote repository.! !VSVersionCommand commentStamp: '' prior: 0! A command that apply to a project version.! !VSBrowseVersionCommand commentStamp: '' prior: 0! Open a browser on the selected version of a configuration. The receiver is a aCompiledMethod.! !VSLoadCommand commentStamp: '' prior: 0! Load into your image the selected version or baseline. If you already have a version installed, then it will be simply overriden! !VSRemoveCommand commentStamp: '' prior: 0! Remove from the configuration the selected version or baseline! !VSSaveProjectCommand commentStamp: '' prior: 0! A command to save all dirty packages of a project, including the configuration.! !VSSetDescriptionCommand commentStamp: '' prior: 0! Set the description on the selected development version! !VersionnerRepositoriesManager commentStamp: 'ChristopheDemarey 1/17/2014 16:28' prior: 0! A VersionnerRepositoriesManager allows to select / deselect / add new repositories. The UI is shared with Komitter.! !MetacelloBrowserHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:24'! bookName ^'Metacello Browser'! ! !MetacelloBrowserHelp class methodsFor: 'defaults' stamp: 'dkh 4/10/2011 18:44'! builder ^MetacelloBrowserHelpBuilder! ! !MetacelloBrowserHelp class methodsFor: 'pages' stamp: 'dkh 4/10/2011 18:23'! icon ^HelpIcons iconNamed: #packageIcon! ! !MetacelloBrowserHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:28'! introduction ^HelpTopic title: 'Introduction' contents: 'MetacelloBrowser is a graphical tool to manage the dependencies and the version of your software. It is a complete replacement of the Monticello browser and acts as a facade for Metacello. You can use MetacelloBrowser in a number of different scenarios. **1-Creating a new configuration** Press the button ''+Configuration'' and enter the name of your configuration. An initial baseline will also be produced. Your configuration and the new baseline will be listed on the left hand side of the browser. **2-Load a configuration** The first button of the browser is for loading a configuration from its corresponding SqueakSource project. For example, entering ''Pharo'' will try to load ''ConfigurationOfPharo'' from the ''Pharo'' squeaksource project. **3-Add a new baseline** A baseline defines the dependencies of your software, including the list of dependent configurations, and the list of packages that defines your applications. Selecting ''Add Baseline'' by right clicking on an existing baseline will first ask you about your squeaksource username and password will be requested. You then need to enter the version of your baseline (e.g., 0.1). The final step is to add the dependent packages. **4-Add a new version** A version defines the version of each packages used by your last baseline. At each change in your source code, you need to create a new version. Pressing ''save all and add development version'' by right clicking in a baseline or version may be the option you want to use. MetacelloBrowser will try to guess what is the following number you need to use. Each unsaved dependent package is then saved. You need to enter a comment for the individual saved package. The configuration itself is then saved. At that stage, all your code is stored in squeaksource. **5-Reviewing recent changes** It may be useful to review your change, for example when you want to enter a comment when creating a version. At the bottom of the right hand side panel, you have the list of dependent packages. Modified packages will be designed with a ''*''. Right click on a package to see the difference with the last version stored in the squeaksource project. You can compare a package from the stable version of the software, or from the last commit made on squeaksource. **6-Load a baseline or a version** Simply right click on it and press ''load'' **7-Updating a configuration** In case of concurrent development, you may have to update your configuration. Right-click on the configuration, and press the corresponding menu entry. **8-Contact** Feedback are welcome. Send them to the pharo mailing list, or directly to the author alexandrebergel@me.com '! ! !MetacelloBrowserHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:23'! key ^'Metacello Configuration help'! ! !MetacelloBrowserHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:27'! pages ^#(introduction)! ! !VersionnerHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:24'! bookName ^'Metacello Browser'! ! !VersionnerHelp class methodsFor: 'defaults' stamp: 'dkh 4/10/2011 18:44'! builder ^VersionnerHelpBuilder! ! !VersionnerHelp class methodsFor: 'pages' stamp: 'dkh 4/10/2011 18:23'! icon ^HelpIcons iconNamed: #packageIcon! ! !VersionnerHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:28'! introduction ^HelpTopic title: 'Introduction' contents: 'Versionner is a graphical tool to manage the dependencies and the version of your software. It is a complete replacement of the Monticello browser and acts as a facade for Metacello. You can use Versionner in a number of different scenarios. **1-Creating a new configuration** Press the button ''+Configuration'' and enter the name of your configuration. An initial baseline will also be produced. Your configuration and the new baseline will be listed on the left hand side of the browser. **2-Load a configuration** The first button of the browser is for loading a configuration from its corresponding SqueakSource project. For example, entering ''Pharo'' will try to load ''ConfigurationOfPharo'' from the ''Pharo'' squeaksource project. **3-Add a new baseline** A baseline defines the dependencies of your software, including the list of dependent configurations, and the list of packages that defines your applications. Selecting ''Add Baseline'' by right clicking on an existing baseline will first ask you about your squeaksource username and password will be requested. You then need to enter the version of your baseline (e.g., 0.1). The final step is to add the dependent packages. **4-Add a new version** A version defines the version of each packages used by your last baseline. At each change in your source code, you need to create a new version. Pressing ''save all and add development version'' by right clicking in a baseline or version may be the option you want to use. Versionner will try to guess what is the following number you need to use. Each unsaved dependent package is then saved. You need to enter a comment for the individual saved package. The configuration itself is then saved. At that stage, all your code is stored in squeaksource. **5-Reviewing recent changes** It may be useful to review your change, for example when you want to enter a comment when creating a version. At the bottom of the right hand side panel, you have the list of dependent packages. Modified packages will be designed with a ''*''. Right click on a package to see the difference with the last version stored in the squeaksource project. You can compare a package from the stable version of the software, or from the last commit made on squeaksource. **6-Load a baseline or a version** Simply right click on it and press ''load'' **7-Updating a configuration** In case of concurrent development, you may have to update your configuration. Right-click on the configuration, and press the corresponding menu entry. **8-Contact** Feedback are welcome. Send them to the pharo mailing list, or directly to the author alexandrebergel@me.com '! ! !VersionnerHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:23'! key ^'Metacello Configuration help'! ! !VersionnerHelp class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 18:27'! pages ^#(introduction)! ! !VSVersionMorph commentStamp: '' prior: 81552074! A MTVersionMorph is morph used to display a Metacello version. It display the version string and optional tags (dev, stable, etc.)! !VSVersionMorph class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 10/22/2013 17:10'! withVersion: anMTVersion ^ self new version: anMTVersion ; yourself.! ! !VSVersionMorph methodsFor: 'private' stamp: 'ChristopheDemarey 10/22/2013 17:49'! addTag: aStringOrSymbol tags add: (TagMorphFactory newTag: aStringOrSymbol asMorph) morph! ! !VSVersionMorph methodsFor: 'private' stamp: 'ChristopheDemarey 11/20/2013 14:54'! adoptPaneColor: paneColor "We prevent the adoption of the parent color to be sure to be able to control the final rendered color"! ! !VSVersionMorph methodsFor: 'private' stamp: 'ChristopheDemarey 10/24/2013 16:54'! build version isStable ifTrue: [ self addTag: #stable ]. version isDevelopment ifTrue: [ self addTag: #development ]. self addAllMorphs: tags; addMorphFront: version name asMorph; yourself.! ! !VSVersionMorph methodsFor: 'initialization' stamp: 'ChristopheDemarey 11/20/2013 15:03'! initialize super initialize. tags := OrderedCollection new. self changeTableLayout; listDirection: #leftToRight; vResizing: #shrinkWrap; hResizing: #shrinkWrap; cellInset: 3; color: Color transparent; yourself. ! ! !VSVersionMorph methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/22/2013 17:46'! version: anObject version := anObject. version ifNotNil: [ self build ].! ! !MBMonticelloPackagesResource class methodsFor: 'accessing' stamp: 'dkh 3/10/2011 07:29'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !MBMonticelloPackagesResource class methodsFor: 'accessing' stamp: 'dkh 3/9/2011 17:18'! project ^self new project! ! !MBMonticelloPackagesResource class methodsFor: 'accessing' stamp: 'dkh 3/9/2011 17:17'! projectAttributes ^#()! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/9/2011 18:51'! baseline10MBFooTest: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://MB_Foo_Test_Repository'. spec blessing: #baseline. spec package: 'MBFooTests'; yourself ]. ! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/19/2011 14:28'! baseline20MBFooTest: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://MB_Foo_Test_Repository'. spec blessing: #baseline. spec package: 'MBFooTests'; yourself ]. ! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/19/2011 14:41'! baseline30MBFooTest: spec "self reset" spec for: #common do: [ spec repository: 'dictionary://MB_Foo_Test_Repository'. spec blessing: #baseline. spec package: 'MBFooTests'; yourself ]. ! ! !MBMonticelloPackagesResource methodsFor: 'accessing' stamp: 'dkh 3/9/2011 16:56'! monticelloRepository ^ monticelloRepository! ! !MBMonticelloPackagesResource methodsFor: 'accessing' stamp: 'dkh 3/9/2011 17:39'! project "self reset" | constructor project | "Construct Metacello project" project := MetacelloMCProject new. "Allow for customization of #projectAttributes" project projectAttributes: (Smalltalk at: #MBMonticelloPackagesResource) projectAttributes. MetacelloVersionConstructor on: self project: project. project loader: ((project loaderClass new) shouldDisablePackageCache: true; yourself). project loadType: #linear. ^project ! ! !MBMonticelloPackagesResource methodsFor: 'running' stamp: 'dkh 4/17/2011 12:27'! setUp "self reset" super setUp. self setUpMonticelloRepository; setUpPackagesMBFooTests; setUpConfigurationOfMBFooTest; setUpPackagesMBCommandFooTests; setUpConfigurationOfMBFooIssue117; setUpConfigurationOfMBBranchTest! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBBranchTest' stamp: 'dkh 4/17/2011 12:26'! setUpConfigurationOfMBBranchTest "self reset" | versionInfo | versionInfo := self setUpConfigurationOfMBBranchTest1. versionInfo := self setUpConfigurationOfMBBranchTest2: { versionInfo }. ! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBBranchTest' stamp: 'ChristopheDemarey 2/8/2013 17:39'! setUpConfigurationOfMBBranchTest1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBBranchTests-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopmentNotDefinedMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopmentNotDefinedMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBBranchTest' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBBranchTest2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBBranchTests.branch-dkh.2'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopmentNotDefinedMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopmentNotDefinedMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable11MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/23/2011 10:43'! setUpConfigurationOfMBFooIssue117 "self reset" | versionInfo | versionInfo := self setUpConfigurationOfMBFooIssue117dkh1: #(). versionInfo := self setUpConfigurationOfMBFooIssue117dkh2: #(). versionInfo := self setUpConfigurationOfMBFooIssue117dkh3: #(). ! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooIssue117dkh1: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooIssue117-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopment10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopment10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version12MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version12MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooIssue117dkh2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooIssue117-dkh.2'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopment10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopment10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline20MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline20MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version12MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version12MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooIssue117dkh3: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooIssue117-dkh.3'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionBleedingEdge20baselineMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionBleedingEdge20baselineMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline20MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline20MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline30MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline30MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version12MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version12MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/10/2011 06:09'! setUpConfigurationOfMBFooTest "self reset" | versionInfo | versionInfo := self setUpConfigurationOfMBFooTest1. versionInfo := self setUpConfigurationOfMBFooTest2: { versionInfo }. versionInfo := self setUpConfigurationOfMBFooTest3: { versionInfo }. ! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooTest1 "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooTests-dkh.1'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopmentNotDefinedMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopmentNotDefinedMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: #()) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooTest2: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooTests-dkh.2'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopmentNotDefinedMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopmentNotDefinedMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable11MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'ChristopheDemarey 2/8/2013 17:40'! setUpConfigurationOfMBFooTest3: ancestors "self reset" | reference className definitionArray versionInfo | reference := GoferVersionReference name: 'ConfigurationOfMBFooTests-dkh.3'. className := reference packageName asSymbol. definitionArray := { MCOrganizationDefinition categories: (Array with: reference packageName). MCClassDefinition name: className superclassName: #Object category: className instVarNames: #() comment: ''. MCMethodDefinition className: className asString classIsMeta: true selector: 'isMetacelloConfig' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #isMetacelloConfig) asString. MCMethodDefinition className: className asString classIsMeta: true selector: 'project' category: 'cat' timeStamp: '' source: (self class class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'project' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #project) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionDevelopmentNotDefinedMBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionDevelopmentNotDefinedMBFooTest:) asString. MCMethodDefinition className: className asString selector: 'baseline10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #baseline10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version11MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version11MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'symbolicVersionStable10MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #symbolicVersionStable10MBFooTest:) asString. MCMethodDefinition className: className asString selector: 'version12MBFooTest:' category: 'cat' timeStamp: '' source: (self class sourceCodeAt: #version12MBFooTest:) asString. }. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: reference packageName) info: (versionInfo := MCVersionInfo name: reference name id: UUID new message: 'This is a mock version' date: Date today time: Time now author: reference author ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitionArray) dependencies: #()). ^versionInfo! ! !MBMonticelloPackagesResource methodsFor: 'running' stamp: 'dkh 3/9/2011 16:59'! setUpMonticelloRepository "This method builds a fake repository with the version references from #buildReferences." "self reset" monticelloRepository := MCDictionaryRepository new. ! ! !MBMonticelloPackagesResource methodsFor: 'running' stamp: 'EstebanLorenzano 2/12/2013 17:27'! setUpPackageClassDefs: classDefArray methodDefs: methodDefArray named: packageName ancestors: ancestors "self reset" | definitions superclassName className ivNames cvNames civNames versionInfo methodSelector methodSource basePackageName authorName | definitions := OrderedCollection new. basePackageName := packageName copyUpToLast: $-. authorName := (packageName copyAfterLast: $-) copyUpTo: $.. 1 to: classDefArray size by: 5 do: [:index | superclassName := (classDefArray at: index) asSymbol. className := (classDefArray at: index + 1) asSymbol. ivNames := (classDefArray at: index + 2). cvNames := (classDefArray at: index + 3). civNames := (classDefArray at: index + 4). definitions add: (MCOrganizationDefinition categories: (Array with: basePackageName)). definitions add: (MCClassDefinition name: className superclassName: superclassName category: basePackageName instVarNames: ivNames classVarNames: cvNames poolDictionaryNames: #() classInstVarNames: civNames comment: ''). (cvNames, ivNames) do: [:ivName | definitions addAll: { MCMethodDefinition className: className asString selector: ivName asSymbol category: 'cat' timeStamp: '' source: ivName, ' ^', ivName. MCMethodDefinition className: className asString selector: (ivName, ':') asSymbol category: 'cat' timeStamp: '' source: ivName, ': anObject ', ivName, ' := anObject'. } ]. civNames do: [:ivName | definitions addAll: { MCMethodDefinition className: className asString selector: ivName asSymbol category: 'cat' timeStamp: '' source: ivName, ' ^self class ', ivName. MCMethodDefinition className: className asString selector: (ivName, ':') asSymbol category: 'cat' timeStamp: '' source: ivName, ': anObject self class ', ivName, ': anObject'. MCMethodDefinition className: className asString classIsMeta: true selector: ivName asSymbol category: 'cat' timeStamp: '' source: ivName, ' ^', ivName. MCMethodDefinition className: className asString classIsMeta: true selector: (ivName, ':') asSymbol category: 'cat' timeStamp: '' source: ivName, ': anObject ', ivName, ' := anObject'. } ]. ivNames do: [:ivName| definitions add: (MCMethodDefinition className: className asString selector: #sampleValue category: 'cat' timeStamp: '' source: 'sampleValue ^#''', ivName, '''') ]. ]. 1 to: methodDefArray size by: 3 do: [:index | className := (methodDefArray at: index) asSymbol. methodSelector := (methodDefArray at: index + 1) asSymbol. methodSource := (methodDefArray at: index + 2). definitions add: (MCMethodDefinition className: className asString selector: methodSelector category: ('*', packageName) asString timeStamp: '' source: methodSource). ]. monticelloRepository basicStoreVersion: (MCVersion new setPackage: (MCPackage new name: basePackageName) info: (versionInfo := MCVersionInfo name: packageName id: UUID new message: 'This is a mock version' date: Date today time: Time now author: authorName ancestors: ancestors) snapshot: (MCSnapshot fromDefinitions: definitions asArray) dependencies: #()). ^versionInfo ! ! !MBMonticelloPackagesResource methodsFor: 'running' stamp: 'dkh 3/9/2011 16:56'! setUpPackageClassDefs: classDefArray named: pName ancestors: ancestors "self reset" ^self setUpPackageClassDefs: classDefArray methodDefs: #() named: pName ancestors: ancestors ! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/19/2011 09:56'! setUpPackagesMBCommandFooTests "self reset" self setUpPackageClassDefs: { #Object. #MBFooCommandTestA. #(). #(). #(). } methodDefs: #() named: 'MBFooCommandTestA-dkh.1' ancestors: #(). self setUpPackageClassDefs: { #Object. #MBFooCommandTestB. #(). #(). #(). } methodDefs: #() named: 'MBFooCommandTestB-dkh.1' ancestors: #(). ! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/20/2011 10:09'! setUpPackagesMBFooTests "self reset" | versionInfo | versionInfo := self setUpPackageClassDefs: { #Object. #MBFooTestA. #(). #(). #(). } methodDefs: #() named: 'MBFooTests-dkh.1' ancestors: #(). versionInfo := self setUpPackageClassDefs: { #Object. #MBFooTestA. #(). #(). #(). } methodDefs: #() named: 'MBFooTests-dkh.2' ancestors: {versionInfo} . versionInfo := self setUpPackageClassDefs: { #Object. #MBFooTestA. #(). #(). #(). } methodDefs: #(MBFooTestA foo 'foo ^self') named: 'MBFooTests-dkh.3' ancestors: {versionInfo} . versionInfo := self setUpPackageClassDefs: { #Object. #MBFooTestA. #(). #(). #(). } methodDefs: #() named: 'MBFooTests-dkh.4' ancestors: {versionInfo} . ! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/19/2011 14:40'! symbolicVersionBleedingEdge20baselineMBFooTest: spec "self reset" spec for: #'common' version: '2.0-baseline'.! ! !MBMonticelloPackagesResource methodsFor: 'command tests' stamp: 'dkh 3/19/2011 10:32'! symbolicVersionDevelopment10MBFooTest: spec "self reset" spec for: #'common' version: '1.0'.! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/10/2011 05:41'! symbolicVersionDevelopmentNotDefinedMBFooTest: spec "self reset" spec for: #'common' version: #'notDefined'.! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/10/2011 05:40'! symbolicVersionStable10MBFooTest: spec "self reset" spec for: #'common' version: '1.0'.! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/10/2011 05:40'! symbolicVersionStable11MBFooTest: spec "self reset" spec for: #'common' version: '1.1'.! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/9/2011 18:51'! version10MBFooTest: spec "self reset" spec for: #'common' do: [ spec blessing: #release. spec package: 'MBFooTests' with: 'MBFooTests-dkh.1' ]. ! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/9/2011 23:16'! version11MBFooTest: spec "self reset" spec for: #'common' do: [ spec blessing: #release. spec package: 'MBFooTests' with: 'MBFooTests-dkh.2' ]. ! ! !MBMonticelloPackagesResource methodsFor: 'ConfigurationOfMBFooTest' stamp: 'dkh 3/10/2011 06:06'! version12MBFooTest: spec "self reset" spec for: #'common' do: [ spec blessing: #release. spec package: 'MBFooTests' with: 'MBFooTests-dkh.3' ]. ! ! !VersionnerProjectBrowser commentStamp: '' prior: 81552271! A VersionnerProjectBrowser can be used to browse a Metacello configuration. You can display and edit project versions and dependencies. Quick overview: VersionnerProjectBrowser example! !VersionnerProjectBrowser class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/25/2013 11:18'! defaultSpec "Define the layout of the Versionner Browser" ^ SpecLayout composed newColumn: [ : column | column add: #toolbar height: self toolbarHeight; newRow: [ :mainPanel | mainPanel newColumn: [ :leftPanel | leftPanel newRow: [ :versionsHeader | versionsHeader add: #versionsLabel; add: #allVersionsCheckBox ] height: self toolbarHeight; add: #versionList ] right: 0.7; addSplitter; add: #projectPanel left: 0.3 ]; newRow: [ :row | row newColumn: [ :col | col newRow: [:repoHeader | repoHeader add: #repositoryLabel width: 75; add: #repository; add: #repositoryAddButton width: self toolbarHeight ] height: self toolbarHeight; newColumn: [:versionDescRow | versionDescRow add: #versionDescriptionLabel height: self toolbarHeight; add: #versionDescription ]; add: #versionCommitMessage height: self toolbarHeight ] ] height: 120 ]; yourself. ! ! !VersionnerProjectBrowser class methodsFor: 'examples' stamp: 'ChristopheDemarey 7/11/2013 10:20'! example ^ self openOn: (MBConfigurationRoot current configurations detect: [ :config | config name = 'ConfigurationOfVersionner' ])! ! !VersionnerProjectBrowser class methodsFor: 'ui' stamp: 'ChristopheDemarey 7/11/2013 10:14'! openOn: configuration | browser | browser := self new. browser configuration: configuration. browser openWithSpec. ^ browser.! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 09:59'! allVersionsCheckBox ^ allVersionsCheckBox! ! !VersionnerProjectBrowser methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/15/2013 13:37'! configuration: aMBConfigurationInfo configuration := aMBConfigurationInfo. self versionList: configuration versions.! ! !VersionnerProjectBrowser methodsFor: 'testing' stamp: 'ChristopheDemarey 12/12/2013 17:43'! hasChanges | initialProject | versionList selectedItem ifNil: [ ^ false ]. initialProject := MTProject newFromVersion: versionList selectedItem version inRepository: configuration configurationClass. ^ (MTModelComparator is: project equalsTo: initialProject) not! ! !VersionnerProjectBrowser methodsFor: 'ui' stamp: 'ChristopheDemarey 7/11/2013 11:01'! iconForVersion: aMBVersionInfo ^ Smalltalk ui icons iconNamed: #databaseIcon! ! !VersionnerProjectBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/19/2013 14:43'! initialExtent ^ (900.0@650.0)! ! !VersionnerProjectBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/26/2013 10:40'! initialize super initialize. self register.! ! !VersionnerProjectBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 10/22/2013 18:23'! initializePresenter "Initialize widgets behavior" versionList whenSelectedItemChanged: [ :selection | selection ifNotNil: [ versionList menu: [ :aMenu | self loadMenuFor: selection in: aMenu ] ]. self update ]; displayBlock: [ :item | VSVersionMorph withVersion: item ]; yourself. allVersionsCheckBox whenChangedDo: [ :selector | self versionList: configuration versions ]. repository acceptBlock: [ project repository: repository text ]. repositoryAddButton action: [ self updateRepository ]! ! !VersionnerProjectBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/29/2014 17:44'! initializeWidgets "toolbar" toolbar := self instantiate: VersionnerProjectToolBar. toolbar browser: self. "repository" (repositoryLabel := self instantiate: LabelModel) text: 'Repository:'. (repository := self instantiate: TextInputFieldModel) entryCompletion: nil; acceptOnCR: true; ghostText: 'none'. repositoryAddButton := (self instantiate: ButtonModel) icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); help: 'Add a new repository to this project'; yourself. "versions" versionList := (self instantiate: VersionListModel ) icons: [:version | self iconForVersion: version ]; on: $b command do: [ versionList selectedItem ifNotNilDo: [ :selection | (VSBrowseVersionCommand target: selection version for: self) execute ] ]; changedBlock: [ self hasChanges ]; yourself. versionsLabel := (self instantiate: LabelModel) text: 'Versions'; yourself. allVersionsCheckBox := (self instantiate: CheckBoxModel) label: 'browse all'; state: false; yourself. "Version details" versionDescriptionLabel := (self instantiate: LabelModel) text: 'Version description:'; yourself. versionDescription := (self instantiate: TextModel) enabled: false; yourself. versionCommitMessage := self instantiate: LabelModel. "Project details" projectPanel := self instantiate: VersionnerProjectPanel. ! ! !VersionnerProjectBrowser methodsFor: 'menu' stamp: 'ChristopheDemarey 12/13/2013 10:32'! loadMenuFor: mbInfo in: aMenu "dynamic menu" aMenu target: self. ((mbInfo commands collect: [ :commandClass |commandClass target: mbInfo for: (versionList selectedItem)]) asArray sort: [:a :b | a order <= b order ]) do: [:cmd | aMenu add: cmd title target: [ cmd execute ] selector:#value.]. ^ aMenu.! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 9/8/2013 15:58'! project ^ project! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 10:00'! projectPanel ^ projectPanel! ! !VersionnerProjectBrowser methodsFor: 'refreshing' stamp: 'ChristopheDemarey 10/2/2013 15:08'! refreshConfiguration configuration ifNotNil: [ self configuration: (MBConfigurationRoot current configurationInfoFor: configuration configurationClass) ]! ! !VersionnerProjectBrowser methodsFor: 'announcement registration' stamp: 'ChristopheDemarey 10/2/2013 15:12'! register MBConfigurationRoot current announcer weak on: MBConfigurationInfoChanged send: #refreshConfiguration to: self! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/12/2013 18:07'! repository ^ repository! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/25/2013 11:15'! repositoryAddButton ^ repositoryAddButton! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/12/2013 18:07'! repositoryLabel ^ repositoryLabel! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 12:57'! title ^ configuration name configurationBaseName! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 10:00'! toolbar ^ toolbar.! ! !VersionnerProjectBrowser methodsFor: 'announcement registration' stamp: 'ChristopheDemarey 7/26/2013 10:40'! unregister "Unregister from the dependent object. Typically used when closing the browser" MBConfigurationRoot current announcer unsubscribe: self ! ! !VersionnerProjectBrowser methodsFor: 'refreshing' stamp: 'ChristopheDemarey 11/21/2013 17:35'! update "Update the project details according to selected configuration and version." versionList selectedItem ifNil: [ projectPanel project: nil ] ifNotNilDo: [ :selectedVersion | project := MTProject newFromVersion: selectedVersion version inRepository: configuration configurationClass. projectPanel project: project. repository text: project repository. versionDescription text: project version description. versionCommitMessage text: 'Commited: ' , project version author , ' - ' , project version timestamp ]! ! !VersionnerProjectBrowser methodsFor: 'actions' stamp: 'ChristopheDemarey 1/29/2014 17:46'! updateRepository "Update the core repository of this project" | packageName repoManager | project ifNotNil: [ packageName := project configurationClass package name. repoManager := VersionnerRepositoriesManager new. repoManager selectedChangedBlock: [:remote :selected | selected ifTrue: [ repository accept: remote location ] ]; open; yourself ]! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 15:26'! versionCommitMessage ^ versionCommitMessage! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 16:02'! versionDescription ^ versionDescription! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/19/2013 14:30'! versionDescriptionLabel ^ versionDescriptionLabel! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 10:02'! versionList ^ versionList.! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 10:02'! versionList: aVersionList "Select versions to display and give them to the list model." | selectedVersions | selectedVersions := allVersionsCheckBox state ifTrue: [ aVersionList ] ifFalse: [ aVersionList select: [ :version | version isStable or: [ version isDevelopment or: [ version isCurrentVersion or: [ version isBleedingEdge ] ] ] ] ]. self versionList items: selectedVersions! ! !VersionnerProjectBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 10:02'! versionsLabel ^ versionsLabel! ! !VersionnerProjectBrowser methodsFor: 'ui' stamp: 'ChristopheDemarey 7/26/2013 11:20'! windowIsClosing self unregister.! ! !VersionnerProjectPackagesPanel commentStamp: '' prior: 81552529! A VersionnerProjectPackagesPanel is the panel related to packages defined in a project (a configuration). It shows packages and provides actions on them. Instance Variables addPackageButton: ButtonModel editPackageButton: ButtonModel packageChangesButton: ButtonModel packages: A collection of MTPackage to display packagesList: IconListModel packagesLabel: LabelModel project: MTProject savePackageButton: ButtonModel addPackageButton - Add a new package editPackageButton - Edit an existing package packageChangesButton - Get changes on a package packages - the list of packages that belongs to a specfied project (configuration) packagesLabel - The top label of this pane project - The project owning packages. removePackageButton - remove a declared package. savePackageButton - Commit changes and update package version ! !VersionnerProjectPackagesPanel class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/25/2013 08:58'! defaultSpec "Define the layout of the Project Packages Panel" ^ SpecLayout composed "newColumn: [ :c1 | c1 newRow: [:r1 | r1 add: #packagesLabel; add: #addPackageButton; add: #removePackageButton; add: #editPackageButton; add: #savePackageButton; add: #packageChangesButton] height: 25; add: #packages ];" "Use the code below because Spec parser takes too much time to load Versionner with the previous declaration." add: #packagesLabel origin: 0@0 corner: 1/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #addPackageButton origin: 1/4@0 corner: 2/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #removePackageButton origin: 2/4@0 corner: 3/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #editPackageButton origin: 3/4@0 corner: 4/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; "add: #savePackageButton origin: 4/6@0 corner: 5/6@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #packageChangesButton origin: 5/6@0 corner: 1@0 offsetOrigin: 0@0 offsetCorner: 0@25;" add: #packagesList origin: 0@0 corner: 1@1 offsetOrigin: 0@25 offsetCorner: 0@0; yourself. ! ! !VersionnerProjectPackagesPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 12/10/2013 13:15'! addPackage "Add a package as internal dependency." | searchUI packageWC package | searchUI := SearchFacade mcPackageSearchRejectAll: [ :workingCopy || versionedPackages pkgName | versionedPackages := project packages collect: [ :each | each name ]. pkgName := workingCopy package name. (versionedPackages includes: pkgName) or: [pkgName beginsWith: 'ConfigurationOf'] ] withInitialFilter: project name. packageWC := searchUI chooseFromOwner: self window. packageWC ifNotNil: [ package := MTPackage newNamed: packageWC package name. owner project addDependency: package. packagesList roots: project packages. "package ancestry ancestors isEmpty ifTrue: [ (MBPlatform current confirm: 'The package: ' , package package name printString , ' has not been committed yet. Would you like to commit it into the ' , repository description printString, ' repository?') ifTrue: [ package repositoryGroup repositories size <= 1 ifTrue: [ package repositoryGroup addRepository: repository ]. package currentVersionInfo ] ] " ]! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! addPackageButton ^ addPackageButton! ! !VersionnerProjectPackagesPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 9/10/2013 17:28'! addPackageRequirement "Add a requirement (a group, another package) for the selected package." packagesList selectedItem ifNil: [ UIManager default inform: 'No package selected' ] ifNotNilDo: [ :package | | potentialRequirements | potentialRequirements := project dependencies collect: [ :dependency | dependency name ]. ^ UIManager default chooseFrom: potentialRequirements values: potentialRequirements ]. ^ nil! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! editPackageButton ^ editPackageButton! ! !VersionnerProjectPackagesPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 12/3/2013 16:41'! editSelectedPackageRequirements "Edit package requirements for the selected package" | selectedPackage editionWidget | selectedPackage := packagesList selectedItem content. selectedPackage ifNil: [ ^self ]. editionWidget := (EditableList new: selectedPackage dependencies) title: selectedPackage name , ' requirements'; addItemBlock: [ self addPackageRequirement ]; yourself. editionWidget okAction: [ "propagate changes" selectedPackage dependencies: editionWidget list getItems. packagesList roots: project packages ]. self window openModal: editionWidget openDialogWithSpec window ! ! !VersionnerProjectPackagesPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/10/2013 00:48'! initializePresenter "Initialize widgets behavior" packagesList whenSelectedItemsChanged: [:selection | removePackageButton enabled: selection notEmpty. editPackageButton enabled: selection notEmpty ]. packageChangesButton action: [ "(MCVersionInspector new version: packages selectedItem workingCopy ) show" ] . addPackageButton action: [ self addPackage ]. removePackageButton action: [ self removeSelectedPackage ]. editPackageButton action: [ self editSelectedPackageRequirements ].! ! !VersionnerProjectPackagesPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/6/2013 15:54'! initializeWidgets packagesList := (self instantiate: TreeModel) dragEnabled: true; whenBuiltDo: [ packagesList rootNodeHolder: [ :item | VSPackageNode new content: item ] ]; yourself. "packagesList icons: [:configuration | self iconForConfiguration: configuration ]. " "packagesList displayBlock: [:item | |attributes text version| attributes := OrderedCollection new. text := item packageName. (item name size) > (text size) ifTrue: [ version := (item name copyFrom: (text size + 2) to: (item name size)). (version size > 0) ifTrue: [ text := text , ' (' , version , ')'. ]. ]. item isDirty ifTrue: [ text := '*', text ]. text. ]." packagesLabel := self instantiate: LabelModel . packagesLabel text: 'Packages' . addPackageButton := self instantiate: ButtonModel . addPackageButton icon: (Smalltalk ui icons iconNamed: #packageAddIcon); enabled: false; help: 'Add a package to this project'. removePackageButton := self instantiate: ButtonModel . removePackageButton icon: (Smalltalk ui icons iconNamed: #packageDeleteIcon); enabled: false; help: 'Remove a package from this project'. editPackageButton := self instantiate: ButtonModel . editPackageButton icon: (Smalltalk ui icons iconNamed: #editIcon); enabled: false; help: 'Edit package requirements'. savePackageButton := self instantiate: ButtonModel . savePackageButton icon: (Smalltalk ui icons iconNamed: #smallSaveIcon); enabled: false; help: 'Save the selected package'. packageChangesButton := self instantiate: ButtonModel . packageChangesButton label: 'changes'. ! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! packageChangesButton ^ packageChangesButton! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! packageChangesButton: anObject packageChangesButton := anObject! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/18/2013 18:46'! packages ^ project ifNil: [ #() ] ifNotNil: [ project packages ] ! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! packagesLabel ^ packagesLabel! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/18/2012 16:42'! packagesList ^ packagesList! ! !VersionnerProjectPackagesPanel methodsFor: 'protocol' stamp: 'ChristopheDemarey 10/2/2013 15:25'! project: anMTProject project := anMTProject. packagesList roots: self packages. project ifNotNil: [ project announcer weak on: MTProjectModelChanged send: #refreshPackages to: self ].! ! !VersionnerProjectPackagesPanel methodsFor: 'refreshing' stamp: 'ChristopheDemarey 10/2/2013 15:25'! refreshPackages packagesList roots: project packages! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:45'! removePackageButton ^ removePackageButton! ! !VersionnerProjectPackagesPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 11/27/2013 16:24'! removeSelectedPackage "remove the selected package from the model and the list." | selectedPackage index | selectedPackage := packagesList selectedItem. selectedPackage ifNil: [ ^self ]. selectedPackage content remove. "index := packagesList selectedIndex." packagesList roots: project packages. "packagesList setSelectedIndex: index." ! ! !VersionnerProjectPackagesPanel methodsFor: 'accessing' stamp: 'TesterBob 10/4/2012 15:46'! savePackageButton ^ savePackageButton! ! !VersionnerProjectPackagesPanel methodsFor: 'metacello' stamp: 'ChristopheDemarey 12/21/2012 13:31'! workingCopies ^ MCWorkingCopy allManagers asSortedCollection: [ :a :b | a name <= b name]! ! !VersionnerProjectPanel commentStamp: '' prior: 81553458! A VersionPanel is the panel used to show details about a given version of a configurationOf. Instance Variables config: The configuration (an MBConfigurationInfo instance) of the project to display details on. packageList: The specWidget used to display packages describes in the version ! !VersionnerProjectPanel class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/23/2013 23:25'! defaultSpec "Define the layout of the Project Panel" ^ SpecLayout composed newColumn: [ :c1 | c1 newRow: [ :r1 | r1 add: #projectsLabel origin: 0@0 corner: 1@1; add: #addProjectButton width: 50; add: #removeProjectButton width: 50] height: 25; add: #projectList; addSplitter; newRow: [ :r2 | r2 add: #groupsLabel origin: 0@0 corner: 1@1; add: #addGroupButton width: 50; add: #removeGroupButton width: 50] height: 25; add: #groupList; addSplitter; add: #packagesPanel ]; yourself! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 7/24/2013 23:36'! addDependentProject "Add a new dependent project to the configuration" | requiredProjectNames dependentProject searchUI | project ifNotNil: [ requiredProjectNames := project requiredProjects collect: [ :reqProject | reqProject name ]. searchUI := SearchFacade projectWithConfigurationSearchRejectAll: [ :item | (requiredProjectNames includes: item name configurationBaseName) or: [ project name = item name configurationBaseName ] ]. dependentProject := searchUI chooseFromOwner: self window. dependentProject ifNotNil: [ project addDependency: (MTDependantProject newWithWorkingCopy: dependentProject) ]. projectList roots: project requiredProjects ]! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 6/26/2013 17:00'! addGroup "Add a new group to the configuration" | groupName | project ifNotNil: [ groupName := UIManager default request: 'New group:'. groupName ifNotNil: [ project addDependency: (MTGroup new name: groupName) ]. groupList roots: project groups ]! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 6/25/2013 17:45'! addGroupButton ^ addGroupButton! ! !VersionnerProjectPanel methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/23/2013 23:24'! addProjectButton ^ addProjectButton! ! !VersionnerProjectPanel methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/18/2013 18:43'! config: anMBConfigurationInfo | allGroups | config := anMBConfigurationInfo. "allGroups := config groups." "(allGroups includes: 'All') ifFalse: [ allGroups addFirst: 'All' ] ." " self groups roots: allGroups." "self packagesPanel packages: config packages." "self projects: config projects". project := MCModel2MTModelVisitor new visitConfiguration: anMBConfigurationInfo. groupList roots: project groups. projectList items: project requiredProjects. packagesPanel project: project.! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 2/14/2013 16:33'! groupList ^ groupList! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 8/13/2012 12:08'! groupsLabel ^ groupsLabel! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/6/2013 15:54'! initializeGroupsWidget groupList := (self instantiate: TreeModel) autoDeselection: true; dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | | passengerItem | receiver parent ifNotNil: [ receiver := receiver parent ]. "Only add dependencies on top elements" passengerItem := transfer passenger item. receiver complexContents item addDependency: ((passengerItem isKindOf: MTDependency) "Ugly test because String>>name adds extra quotes" ifTrue: [ passengerItem name ] ifFalse: [ passengerItem ]) ]; whenBuiltDo: [ groupList rootNodeHolder: [ :item | VSGroupNode new content: item ] ]; yourself. addGroupButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #addIcon); enabled: false; help: 'Add a new group to this project'. removeGroupButton := (self instantiate: ButtonModel) icon: (Smalltalk ui icons iconNamed: #deleteIcon); enabled: false; help: 'Remove a group from this project'.! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/17/2014 18:58'! initializePresenter "Initialize widgets behavior" projectList whenSelectedItemsChanged: [ :selection | removeProjectButton enabled: selection notEmpty. projectList menu: [ :aMenu | self requiredProjectMenu: aMenu] ]. addProjectButton action: [ self addDependentProject ]. removeProjectButton action: [ projectList selectedItem ifNotNilDo: [ :selectedItem | self removeDependentProject: selectedItem content ] ]. groupList whenSelectedItemsChanged: [ :selection | removeGroupButton enabled: selection notEmpty ]. addGroupButton action: [ self addGroup ]. removeGroupButton action: [ groupList selectedItem ifNotNilDo: [ :selectedItem | self remove: selectedItem fromGroup: groupList selectedNode parentNode item ] ]! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/6/2013 15:54'! initializeProjectsWidget projectList := (self instantiate: TreeModel) whenBuiltDo: [ projectList rootNodeHolder: [ :item | VSProjectNode new content: item ] ]; yourself. "projectList displayBlock: [:item | item asString ]. projectList childrenBlock: [:item | (item isKindOf: MTDependency ) ifTrue: [ item dependencies collect: [ :each | '--> loads: ' , each] ] ifFalse: [{}] ]." "| text version | text := item name. version := item currentVersion. (version size > 0) ifTrue: [ text := text , ' (' , item currentVersion , ')' ]. text asStringMorph ]." addProjectButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #addIcon); enabled: false; help: 'Add a new dependent project to this project'. removeProjectButton := (self instantiate: ButtonModel) icon: (Smalltalk ui icons iconNamed: #deleteIcon); enabled: false; help: 'Remove a dependent project from this project'.! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/17/2014 19:23'! initializeWidgets self initializeGroupsWidget. self initializeProjectsWidget. packagesPanel := self instantiate: VersionnerProjectPackagesPanel. groupsLabel := (self instantiate: LabelModel) text: 'Groups'; yourself. projectsLabel := self instantiate: LabelModel. projectsLabel text: 'Dependent projects'. ! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'TesterBob 10/4/2012 15:58'! packagesPanel ^ packagesPanel! ! !VersionnerProjectPanel methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/20/2012 17:55'! project ^ project! ! !VersionnerProjectPanel methodsFor: 'protocol' stamp: 'ChristopheDemarey 10/2/2013 15:20'! project: anMTProject project := anMTProject. project ifNil: [ groupList roots: #(). projectList roots: #() ] ifNotNil: [ project announcer weak on: MTProjectModelChanged send: #refreshGroups to: self. groupList roots: project groups. projectList roots: project requiredProjects ]. packagesPanel project: anMTProject. addProjectButton enabled: project isNotNil. addGroupButton enabled: project isNotNil. packagesPanel addPackageButton enabled: project isNotNil.! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 2/14/2013 16:31'! projectList ^ projectList! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 8/13/2012 12:08'! projectsLabel ^ projectsLabel! ! !VersionnerProjectPanel methodsFor: 'refreshing' stamp: 'ChristopheDemarey 10/2/2013 15:18'! refreshGroups groupList roots: project groups! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 7/25/2013 14:40'! remove: aDependency fromGroup: aGroup "Remove a dependency from a group or project" aDependency ifNotNil: [ (UIManager default confirm: 'Are your sure you want to remove ', aDependency label: 'Remove a group') ifTrue: [ aGroup ifNil: [ project removeDependencyNamed: aDependency name ] ifNotNil: [ aGroup dependencies: (aGroup dependencies reject: [ :dependency | dependency = aDependency ]) ]. groupList roots: project groups ] ] ! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 7/24/2013 22:54'! removeDependentProject: aMTDependantProject aMTDependantProject remove. projectList roots: project requiredProjects.! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 6/25/2013 17:45'! removeGroupButton ^ removeGroupButton! ! !VersionnerProjectPanel methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/23/2013 23:24'! removeProjectButton ^ removeProjectButton! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 1/17/2014 19:17'! requiredProjectMenu: aMenu | menuGroup | menuGroup := MenuGroupModel new. menuGroup addMenuItem: (MenuItemModel new name: #'edit repositories'; action: [ projectList selectedItem content editRepositories ]). aMenu addMenuGroup: menuGroup. ^aMenu! ! !VersionnerProjectToolBar commentStamp: '' prior: 81553823! Versionner toolbar spec definition. ! !VersionnerProjectToolBar class methodsFor: 'specs' stamp: 'ChristopheDemarey 1/13/2014 17:12'! defaultSpec "Define the layout of the Versionner ToolBar" ^ SpecLayout composed newRow: [ :r | r add: #updateButton; add: #releaseButton; add: #commitButton ]; yourself.! ! !VersionnerProjectToolBar class methodsFor: 'specs' stamp: 'ChristopheDemarey 7/24/2013 23:52'! title ^ 'Versionner Project Browser ToolBar'! ! !VersionnerProjectToolBar methodsFor: 'accessing' stamp: 'JuanPabloSandovalA 6/7/2012 15:59'! browser ^ browser.! ! !VersionnerProjectToolBar methodsFor: 'accessing' stamp: 'JuanPabloSandovalA 6/7/2012 15:59'! browser: aSpecBrowser browser := aSpecBrowser.! ! !VersionnerProjectToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/13/2014 17:13'! commitButton ^ commitButton.! ! !VersionnerProjectToolBar methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 2/6/2014 16:15'! executeWithDevWorkflow: aCommandClass browser projectPanel project ifNotNilDo: [ :project | | cmd | cmd := aCommandClass target: project devWorkflow for: self. cmd execute ]. browser refreshConfiguration. browser update! ! !VersionnerProjectToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/6/2014 13:39'! initializePresenter "Initialize widgets behavior" updateButton action: [ self executeWithDevWorkflow: VSUpdateDevelopmentVersionCommand ]. releaseButton action: [ self executeWithDevWorkflow: VSReleaseDevelopmentVersionCommand ]. commitButton action: [ (VSSaveProjectCommand target: browser project for: self) execute ].! ! !VersionnerProjectToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/21/2014 16:49'! initializeWidgets updateButton := (self instantiate: ButtonModel) label: ' Save development (baseline)'; icon: (Smalltalk ui icons iconNamed: #smallSaveIcon); help: 'Save the current modifications into the development baseline.'; yourself. releaseButton := (self instantiate: ButtonModel) label: ' Release version'; icon: (Smalltalk ui icons iconNamed: #smallPublishIcon); help: 'Make a release. It will create a version method for this release and a new development baseline.'; yourself. commitButton := (self instantiate: ButtonModel) label: ' Commit the project'; icon: (Smalltalk ui icons iconNamed: #monticelloPackageIcon); help: 'Commit the configuration and all dirty packages of the project to the main repository'; yourself. ! ! !VersionnerProjectToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/4/2013 11:50'! releaseButton ^ releaseButton.! ! !VersionnerProjectToolBar methodsFor: 'actions' stamp: 'ChristopheDemarey 2/6/2014 13:32'! releaseDevelopment browser projectPanel project ifNotNilDo: [ :project | | cmd | cmd := VSReleaseDevelopmentVersionCommand target: project devWorkflow for: self. cmd execute ]! ! !VersionnerProjectToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/24/2013 23:56'! updateButton ^ updateButton.! ! !VersionnerSpecBrowser commentStamp: '' prior: 81553923! Tool used to manage project dependencies. This tool uses ToolBox and Metacello to manage project dependencies (ConfigurationOf*). The GUI is built with Spec. You can find Versionner in the World menu (Tools category). Otherwise, you can launch it with : VersionnerSpecBrowser open. ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 20:36'! clean self allInstances do:[ :a| a unregister]. Smalltalk garbageCollect.! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'ChristopheDemarey 8/7/2012 11:38'! commitIcon ^ (Form extent: 48@48 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 54880517 54880517 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10143076 10143076 10143076 10143076 10143076 10143076 10208868 1212508421 4282804742 4282804742 1212508421 10208868 10143076 10143076 10143076 10143076 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10143076 10143076 10143076 10143076 10143076 10208868 1514498309 4283002121 4287873619 4287873619 4283002121 1514498309 10208868 10143076 10143076 10143076 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10077283 10077283 10077283 10077283 10143332 1766156549 4283133963 4288004695 4289386862 4289386862 4288004695 4283133963 1766156549 10143332 10077283 10077283 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10011489 10011489 10011489 10143074 2068146437 4283462928 4288333915 4288992105 4288333411 4288333411 4288992105 4288333915 4283462928 2068146437 10143074 10011489 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9879904 9879904 10011746 2168809733 4283923735 4288597345 4288794727 4288201569 4288069984 4288069984 4288201569 4288794727 4288597345 4283923735 2168809733 10011746 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9814110 10077536 2370136325 4284121370 4288663137 4288597092 4288070239 4288004190 4288004190 4288004190 4288004190 4288070239 4288597092 4288663137 4284121370 2370136325 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9945952 2470799621 4284713764 4288794981 4288465507 4287938654 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287938654 4288465507 4288794981 4284713764 2470799621 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 256207109 2521131269 4285108778 4288794468 4288333408 4287872347 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287872347 4288333408 4288794468 4285108778 2521131269 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 709191941 2521131269 4285700914 4288662882 4288070237 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4288070237 4288662882 4285700914 2521131269 709191941 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1011181829 2772789509 4286227771 4288465504 4287872858 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287872858 4288465504 4286227771 2772789509 1011181829 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1313171717 4282870535 4286556735 4288268124 4287741015 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287741015 4288268124 4286556735 4282870535 1313171717 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1615161605 4282936328 4286820420 4288070745 4287477844 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287477844 4288070745 4286820420 4282936328 1615161605 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1766156549 4283199756 4287083848 4287938903 4287346258 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287346258 4287938903 4287083848 4283199756 1766156549 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2068146437 4283331342 4287215177 4287675731 4287148878 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287148878 4287675731 4287215177 4283331342 2068146437 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2168809733 4283528977 4287412556 4287543889 4287016780 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4287016780 4287543889 4287412556 4283528977 2168809733 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2370136325 4283857941 4287346763 4287346253 4286819401 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286819401 4287346253 4287346763 4283857941 2370136325 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2420467973 4283989784 4287347019 4287083338 4286622023 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286622023 4287083338 4287347019 4283989784 2420467973 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2470799621 4284384541 4287215433 4286885703 4286424899 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424899 4286885703 4287215433 4284384541 2470799621 4548869 16777215 16777215 16777215 16777215 16777215 16777215 608528645 4283331342 4286688579 4286622531 4286227520 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227520 4286622531 4286688579 4283331342 608528645 16777215 16777215 16777215 16777215 16777215 16777215 2370136325 4284647973 4286425151 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286425151 4284647973 2370136325 16777215 16777215 16777215 16777215 16777215 16777215 3427100933 4285305648 4286095676 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4286095676 4285305648 3427100933 16777215 16777215 16777215 16777215 16777215 16777215 3527764229 4285239855 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285634870 4283857688 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4283857688 4285634870 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285239855 3527764229 16777215 16777215 16777215 16777215 16777215 16777215 2923784453 4284713510 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285174061 4283199757 4282738949 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4282738949 4283199757 4285174061 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4284713510 2923784453 16777215 16777215 16777215 16777215 16777215 16777215 1615161605 4283726358 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4284581924 4282870535 1816488197 4282738949 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4282738949 1816488197 4282870535 4284581924 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4283726358 1615161605 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3024447749 4284581667 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4283989530 2923784453 1162176773 7115568 4282738949 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4282738949 4548869 1162176773 2923784453 4283989530 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4284581667 3024447749 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1262840069 4282738949 4283857687 4284976682 4285174061 4285174061 4285174061 4284581924 4283462929 2521131269 356870405 6983981 6983981 4282738949 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4282738949 4548869 4548869 356870405 2521131269 4283462929 4284581924 4285174061 4285174061 4285174061 4284976682 4283857687 4282738949 1262840069 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 205875461 2219141381 4282738949 4283068171 4283133707 4282870535 3276105989 1514498309 16777215 16777215 6786602 6786602 4282738949 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4282738949 4548869 4548869 4548869 4548869 1514498309 3276105989 4282870535 4283133707 4283068171 4282738949 2219141381 205875461 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 54880517 658860293 709191941 256207109 16777215 16777215 16777215 16777215 6655015 6655015 4282738949 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 256207109 709191941 658860293 54880517 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 6457637 6457637 4282738949 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 6326050 6326050 4282738949 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 6194208 6194208 4282738949 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 6062621 6062621 4282738949 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5931035 5931035 4282738949 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5799449 5799449 4282738949 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5667862 5667862 4282738949 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5536276 5536276 4282738949 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5404690 5404690 4282738949 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5338640 5338640 4282738949 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4282738949 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5207055 5207055 2823121157 4283199500 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283199500 2823121157 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5141261 5141261 1061513477 4282804742 4283265548 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283265548 4282804742 1061513477 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5009676 5009676 5009676 2017814789 4282804742 4283068170 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283068170 4282804742 2017814789 5009676 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4943882 4943882 4943882 4943882 1464166661 3225774341 4282804998 4282936584 4283002377 4283002377 4282936584 4282804998 3225774341 1464166661 4943882 4943882 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 960850181 2470799621 3125111045 3125111045 2470799621 960850181 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0) scaledToSize: (15@15).! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'ChristopheDemarey 8/7/2012 11:38'! configurationChangedIcon ^ (Form extent: 24@24 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1714558735 1798707217 117440512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 335676163 3178315048 4293494062 4294086450 3701490203 470156291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 335676163 3193792361 4293449168 4292116059 4292701221 4294082346 3701489434 470156291 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 184549633 3193792105 4291085508 4293059298 4293848814 4292520346 4292110131 4293487393 3701488664 470156291 0 0 0 0 0 0 0 0 0 0 0 0 0 184549633 2601467211 4288853435 4292401368 4293848814 4292598747 4293190884 4292855488 4291647271 4293089048 3431084567 0 0 0 0 0 0 0 0 0 0 0 0 184549633 2517186373 4280726496 4280790231 4285118669 4290168266 4292532954 4291019715 4292861919 4292057480 4291313424 4291313426 1074792968 0 0 0 0 0 0 0 0 0 0 184549633 2517186116 4280659417 4280592336 4282170336 4282172652 4281907939 4288721848 4292203989 4292467161 4292927455 4290923820 4138415381 402916098 0 0 0 0 0 0 0 0 0 184549633 2517185858 4280526801 4280525256 4282037977 4282040037 4280858854 4280859111 4281840345 4290495944 4293519849 4291611852 4121462912 1680349204 0 0 0 0 0 0 0 0 0 184549633 2517120065 4280394186 4280392384 4281839826 4281841885 4280660189 4280725982 4280659931 4281972442 4285508283 4291480266 4103247512 1629036321 0 0 0 0 0 0 0 0 0 184549633 2517119808 4280261313 4280193976 4281641419 4281709270 4280527315 4280527572 4280526801 4281774290 4281443268 4280586676 4101410710 1629036321 0 0 0 0 0 0 0 0 0 184549633 2685286209 4280128697 4280061104 4281443267 4281576397 4280394186 4280394443 4280328136 4281575883 4281310652 4280060590 3843188353 1040255500 0 0 0 0 0 0 0 0 0 335741698 3189720390 4279995825 4279928232 4281244860 4281378246 4280195521 4280261314 4280195263 4281377731 4281112502 4279927974 3843122045 1040255500 0 0 0 0 0 0 0 0 0 100663296 3189719620 4279862953 4279795359 4280980143 4281113531 4280062134 4280062648 4280062134 4281179323 4280914350 4279795102 3843055480 1040255500 0 0 0 0 0 0 0 0 0 0 1732323588 4280971383 4279530129 4280715942 4280715942 4279796130 4279863467 4279863468 4280915636 4280716456 4279662486 3842989173 1040255500 0 0 0 0 0 0 0 0 0 0 0 3180223756 4294753844 4288783951 4281302403 4279529871 4279530385 4279663258 4280716971 4280583842 4279529871 3842922864 1040255500 0 0 0 0 0 0 0 0 0 0 0 503842048 4293697049 4294949675 4294955825 4292855867 4281036915 4279462792 4280385690 4280385433 4279463048 3842856301 1040255500 0 0 0 0 0 0 0 0 0 0 0 0 2052469505 4294747934 4294949411 4294953766 4294954022 4292721457 4280775807 4280253332 4279330691 4095171694 1124338702 0 0 0 0 0 0 0 0 0 0 0 0 0 3753471751 4294943767 4294948634 4294950427 4294949915 4294948378 4287333700 4279263869 4095105643 1594955538 0 0 0 0 0 0 0 0 0 0 0 0 0 1092555264 4294086922 4294678798 4294944783 4294944015 4294745102 4294546701 4293168145 4097662544 1628510226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2639540996 4293756677 4294281990 4294544646 4294019334 4293231620 3129561089 1715874048 268632576 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1997015048 4282598211 4287125525 4293165057 3281081088 1867328768 369427200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 3742963993 4280690214 1996949255 335741440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 637600001 1577453062 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0) scaledToSize: (15@15).! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'ChristopheDemarey 8/7/2012 11:44'! configurationIcon ^(Form extent: 24@24 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117440512 2808374372 4173447617 4291611852 4291611852 4291611852 4291611852 3886655913 1630350637 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1546332971 4293717228 4294177779 4293914607 4293914607 4293914607 4293914607 4294440951 3954159535 117440512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2135706700 4293914607 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293519849 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 4291611852 3650656408 1311188775 0 0 2135706700 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4293783021 4292863206 4287738556 4286358705 4286358705 4286358962 4286819256 3762711672 654378504 0 2135706700 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4293651435 4283078060 4281258222 4281457140 4281457140 4281457140 4281457140 4281456884 4280196284 687933193 2135706700 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4293585642 4292534497 4280062133 4280924646 4280924132 4280924132 4280924132 4280924132 4280924132 4280924389 2047093302 2135706700 4293454056 4293059813 4288329407 4286161583 4286161583 4286161583 4286161583 4286161583 4286161583 4286161583 4286161583 4286161583 4286161583 4285504426 4280062648 4280857054 4280857054 4280857054 4280857054 4280857054 4280857054 4280857054 2131045690 2135706700 4293388263 4284061867 4280859103 4281124586 4281124585 4281124585 4281124585 4281124585 4281124585 4281124585 4281124585 4281124585 4281124585 4281124329 4280923876 4280724438 4280724438 4280724438 4280724438 4280724438 4280724438 4280724438 2131045690 2135706700 4293256677 4279927201 4280592080 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 4280526029 2131045690 2135706700 4293125091 4279597980 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 4280392899 2131045690 2135706700 4292993505 4279531415 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 4280259769 2131045690 2135706700 4292927712 4279464850 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 4280061103 2131045690 2135706700 4292796126 4279398285 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 4279927717 2131045690 2135706700 4292730333 4279266184 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 4279729051 2131045690 2135706700 4292598747 4279199619 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 4279596178 2131045690 2135706700 4292532954 4279133311 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 4279463306 2131045690 1546332971 4291875024 4279329661 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330690 4279330434 2047093302 117440512 2875285857 4181488002 4279198075 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279263868 4279198076 4279066233 704710409 0 0 150994945 1560484129 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2131045690 2030315829 738264841 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0) scaledToSize: (15@15).! ! !VersionnerSpecBrowser class methodsFor: 'spec' stamp: 'ChristopheDemarey 7/11/2013 13:11'! defaultSpec "Define the layout of the Versionner Browser" ^ SpecLayout composed newColumn: [ :column | column add: #toolbar height: self toolbarHeight; add: #configurationList ]; yourself. ! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'ChristopheDemarey 7/19/2013 10:44'! menuCommandOn: aBuilder (aBuilder item: #VersionnerSpecBrowser) " order: 3; " parent: #Tools; label: 'Versionner'; icon: (Smalltalk ui icons iconNamed: #databaseIcon); action: [ VersionnerSpecBrowser open ]! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'ChristopheDemarey 8/7/2012 11:59'! newConfigurationIcon "( Form fromFileNamed: '/home/juampi/Downloads/icons/PNG/onebit_31.png') storeString " ^ (Form extent: 48@48 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 10143076 2521131269 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 2521131269 10208868 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 10077283 4282738949 4289452911 4290309239 4290309239 4290309239 4290309239 4290309239 4290309239 4290309239 4290309239 4290309239 4290309239 4289584496 4283068171 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 10011489 4282738949 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4288201569 4283067914 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9879904 4282738949 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4283067914 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9814110 4282738949 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4283067914 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9682525 4282738949 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4283067914 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9616475 4282738949 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4283067914 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9484889 4282738949 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4283002378 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9353303 4282738949 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4283002378 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9221716 4282738949 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4283002378 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 9090130 4282738949 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4283002122 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 8958544 4282738949 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4283002121 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 8826957 4282738949 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4283002121 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 8695115 4282738949 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4283002121 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 2269473029 4031080709 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4287214668 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4287214668 4283002377 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 2521131269 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4287280970 4288203092 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4287741776 4287148875 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4287148875 4287675983 4288203092 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4288268884 4287544398 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4286227007 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4286029885 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285898298 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285766456 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285569077 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285437490 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285305647 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285174061 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4285042475 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4284845096 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4282738949 4548869 16777215 16777215 16777215 16777215 16777215 4031080709 4284713509 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4282804742 155543813 16777215 16777215 16777215 16777215 16777215 2269473029 4031080709 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282870535 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4282870535 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 2521131269 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282870535 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4282870535 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804999 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4282804999 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804742 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4282804742 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282804741 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4283331341 4282804741 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282738949 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4283199756 4282738949 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 256207109 4282738949 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4283133962 4282738949 256207109 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4878089 2521131269 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 4282738949 2521131269 4878089 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0) scaledToSize: (15@15).! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 20:27'! open |windows| windows := self openOn: (MBConfigurationRoot current configurations). ^ windows.! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'ChristopheDemarey 2/14/2013 16:50'! openOn: configurations | browser | browser := self new. browser configurationList: configurations. browser openWithSpec. ^ browser.! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'ChristopheDemarey 8/7/2012 12:01'! updateIcon ^ (Form extent: 48@48 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 4548869 4548869 4548869 4548869 4548869 960850181 2470799621 3125111045 3125111045 2470799621 960850181 4548869 4548869 4548869 4548869 4548869 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 16777215 16777215 16777215 16777215 16777215 16777215 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 10143076 10143076 10209125 1464166661 3225774341 4284384798 4287149383 4288334169 4288334169 4287149383 4284384798 3225774341 1464166661 10209125 10143076 10143076 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 678773 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10077283 10143332 2017814789 4283265550 4288268121 4289847922 4289321069 4288991850 4288991850 4289321069 4289847922 4288268121 4283265550 2017814789 10143332 10077283 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 10011489 1061513477 4283265549 4288531296 4288992105 4288399203 4288201569 4288201569 4288201569 4288201569 4288399203 4288992105 4288531296 4283265549 1061513477 10011489 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9879904 2823121157 4286490692 4288728678 4288136033 4288069984 4288069984 4288069984 4288069984 4288069984 4288069984 4288136033 4288728678 4286490692 2823121157 9879904 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9814110 4282738949 4288004190 4288267616 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288004190 4288267616 4288004190 4282738949 9814110 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9682525 4282738949 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4287872605 4282738949 9682525 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9616475 4282738949 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4287806555 4282738949 9616475 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9484889 4282738949 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4287674969 4282738949 9484889 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9353303 4282738949 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4287543383 4282738949 9353303 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9221716 4282738949 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4287411796 4282738949 9221716 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 9090130 4282738949 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4287280210 4282738949 9090130 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 8958544 4282738949 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4287148624 4282738949 8958544 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 8826957 4282738949 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4287017037 4282738949 8826957 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 8695115 4282738949 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4286885195 4282738949 8695115 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 54880517 658860293 709191941 256207109 16777215 16777215 16777215 16777215 16777215 8563528 4282738949 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4286753608 4282738949 8563528 16777215 16777215 16777215 16777215 16777215 256207109 709191941 658860293 54880517 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 205875461 2219141381 4282804742 4283594769 4283660562 4283068170 3276105989 1514498309 16777215 16777215 16777215 8366150 4282738949 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4286556230 4282738949 8366150 16777215 16777215 16777215 1514498309 3276105989 4283068170 4283660562 4283594769 4282804742 2219141381 205875461 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1262840069 4282804742 4285108775 4287610699 4287939919 4287939663 4287939919 4286820670 4284252954 2521131269 356870405 16777215 8234563 4282738949 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4286424643 4282738949 8234563 16777215 356870405 2521131269 4284252954 4286820670 4287939919 4287939663 4287939919 4287610699 4285108775 4282804742 1262840069 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 3024447749 4285833012 4287083847 4286622275 4286227520 4286227264 4286359105 4286754372 4287281224 4285108775 2923784453 1162176773 8037440 4282738949 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4286227264 4282738949 8037440 1162176773 2923784453 4285108775 4287281224 4286754372 4286359105 4286227264 4286227520 4286622275 4287083847 4285833012 3024447749 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1615161605 4284121371 4286491200 4286227518 4286095677 4286095677 4286095677 4286095677 4286095677 4286359359 4286886211 4285833265 4282936584 1816488197 4282738949 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4286095677 4282738949 1816488197 4282936584 4285833265 4286886211 4286359359 4286095677 4286095677 4286095677 4286095677 4286095677 4286227518 4286491200 4284121371 1615161605 16777215 16777215 16777215 16777215 16777215 16777215 2923784453 4284911146 4286161469 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4286161468 4286622528 4286359609 4283463183 4282738949 4285964091 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285964091 4282738949 4283463183 4286359609 4286622528 4286161468 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4285963835 4286161469 4284911146 2923784453 16777215 16777215 16777215 16777215 16777215 16777215 3527764229 4285239855 4285832248 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285832505 4286293564 4286623037 4284187418 4286227772 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4286227772 4284187418 4286623037 4286293564 4285832505 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285766456 4285832248 4285239855 3527764229 16777215 16777215 16777215 16777215 16777215 16777215 3427100933 4285042475 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285635125 4286030136 4286030136 4285964343 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285964343 4286030136 4286030136 4285635125 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285634869 4285042475 3427100933 16777215 16777215 16777215 16777215 16777215 16777215 2370136325 4284252702 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4285437490 4284252702 2370136325 16777215 16777215 16777215 16777215 16777215 16777215 608528645 4283133707 4285305647 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305648 4285305647 4283133707 608528645 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2470799621 4283594515 4285108268 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285174061 4285108268 4283594515 2470799621 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2420467973 4283331343 4284910889 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284976682 4284910889 4283331343 2420467973 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2370136325 4283199500 4284647716 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284845095 4284647716 4283199500 2370136325 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2168809733 4283002378 4284450338 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284647717 4284450338 4283002378 2168809733 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2068146437 4282936328 4284187165 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284516130 4284187165 4282936328 2068146437 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1766156549 4282870535 4284055066 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284384288 4284055066 4282870535 1766156549 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1615161605 4282804742 4283857686 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4284252701 4283857686 4282804742 1615161605 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1313171717 4282739206 4283660307 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4284121115 4283660307 4282739206 1313171717 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1011181829 2772789509 4283462929 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283989529 4283462929 2772789509 1011181829 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 709191941 2521131269 4283265549 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283857942 4283265549 2521131269 709191941 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 256207109 2521131269 4283133707 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283726356 4283133707 2521131269 256207109 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 2470799621 4283002377 4283594514 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594770 4283594514 4283002377 2470799621 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5338640 2370136325 4282936327 4283462927 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283528720 4283462927 4282936327 2370136325 5338640 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5207055 5207055 2168809733 4282870535 4283331342 4283397135 4283397135 4283397135 4283397135 4283397135 4283397135 4283331342 4282870535 2168809733 5207055 5207055 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5141261 5141261 5141261 2068146437 4282804742 4283199756 4283331341 4283331341 4283331341 4283331341 4283199756 4282804742 2068146437 5141261 5141261 5141261 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 5009676 5009676 5009676 5009676 1766156549 4282738949 4283068170 4283199756 4283199756 4283068170 4282738949 1766156549 5009676 5009676 5009676 5009676 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4943882 4943882 4943882 4943882 4943882 1514498309 4282738949 4283002376 4283002376 4282738949 1514498309 4943882 4943882 4943882 4943882 4943882 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4878089 4878089 4878089 4878089 4878089 4878089 1212508421 4282738949 4282738949 1212508421 4878089 4878089 4878089 4878089 4878089 4878089 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4548869 4548869 4548869 4548869 4548869 4548869 4548869 54880517 54880517 4548869 4548869 4548869 4548869 4548869 4548869 4548869 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0) scaledToSize: (15@15).! ! !VersionnerSpecBrowser methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/13/2013 14:00'! browseConfiguration: aConfiguration aConfiguration recalculate. ^ VersionnerProjectBrowser openOn: aConfiguration.! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/14/2013 16:47'! configurationList ^ configurationList! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/14/2013 16:50'! configurationList: aList "Here I reroute my entry point to the list model's entry point" self configurationList items: aList.! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/25/2013 14:46'! iconForConfiguration: aConfiguration "should return an IconMorph" ^ (aConfiguration isDirty) ifTrue: [ self class configurationChangedIcon] ifFalse: [ self class configurationIcon ].! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/11/2013 13:34'! initialExtent ^ (400.0@500.0)! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 10/17/2012 14:57'! initialize super initialize. self register.! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/19/2013 14:04'! initializePresenter "Initialize widgets behavior" configurationList whenSelectedItemChanged: [ :selection | selection ifNotNil: [ configurationList menu: [ :aMenu | self loadMenuFor: selection in: aMenu ] ] ].! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/19/2013 14:21'! initializeWidgets "configurations" configurationList := (self instantiate: NewListModel) icons: [ :configuration | self iconForConfiguration: configuration ]; displayBlock: [:item | item asStringMorph ]; iconMaxSize: 16@16; handlesDoubleClick: true; on: $b command do: [ configurationList selectedItem ifNotNilDo: [ :selection | selection configurationClass browse ] ]; doubleClickAction: [ configurationList selectedItem ifNotNilDo: [ :selection | self browseConfiguration: selection ] ]; yourself. "toolbar" toolbar := self instantiate: VersionnerToolBar.! ! !VersionnerSpecBrowser methodsFor: 'menu' stamp: 'ChristopheDemarey 2/6/2014 12:53'! loadMenuFor: mbInfo in: aMenu | commands menuGroup | "dynamic menu" commands := mbInfo commands collect: [ :commandClass | commandClass target: mbInfo for: (configurationList selectedItem) ]. commands := commands asArray sort: [:a :b | a order <= b order]. menuGroup := MenuGroupModel new. commands do: [ :command | menuGroup addMenuItem: (MenuItemModel new name: command title; action: [ self unregister. command execute. self register ]) ]. aMenu addMenuGroup: menuGroup. ^aMenu! ! !VersionnerSpecBrowser methodsFor: 'actions' stamp: 'ChristopheDemarey 7/26/2013 10:41'! refresh self configurationList: (MBConfigurationRoot current configurations).! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 7/25/2013 16:18'! register "Set up dependencies" MBConfigurationRoot current announcer weak on: MBConfigurationInfoCreated send: #refresh to: self; on: MBConfigurationInfoChanged send: #refresh to: self; on: MBConfigurationInfoDeleted send: #refresh to: self; on: MBInfoListChanged send: #refresh to: self. ! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 13:14'! title ^ 'Versionner- Configuration list'! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 18:29'! toolbar ^ toolbar.! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 19:31'! unregister "Unregister from the dependent object. Typically used when closing the browser" MBConfigurationRoot current announcer unsubscribe: self ! ! !VersionnerSpecBrowser methodsFor: 'actions' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 20:35'! windowIsClosing self unregister.! ! !VersionnerToolBar commentStamp: '' prior: 81554269! Versionner configuration list toolBar spec definition. ! !VersionnerToolBar class methodsFor: 'spec' stamp: 'ChristopheDemarey 8/23/2013 16:49'! defaultSpec "Define the layout of the Versionner configuration list toolBar" ^ SpecLayout composed newRow: [ :row | row add: #newButton; add: #loadButton ]; yourself.! ! !VersionnerToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 9/18/2013 11:14'! initializePresenter "Initialize widgets behavior" newButton action: [ self newConfiguration ]. loadButton action: [ (VSLoadProjectCommand target: self for: self) execute ].! ! !VersionnerToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 8/23/2013 16:43'! initializeWidgets newButton := (self instantiate: ButtonModel) label: 'New project'; help: 'Create a new project (configuration). Once created, double-click on the projet to edit it'; yourself. loadButton := (self instantiate: ButtonModel) label: 'Load project'; help: 'Load an existing project (only its configuration) into the image'; yourself. ! ! !VersionnerToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 13:32'! loadButton ^ loadButton! ! !VersionnerToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/11/2013 13:32'! newButton ^ newButton! ! !VersionnerToolBar methodsFor: 'actions' stamp: 'ChristopheDemarey 2/7/2014 10:28'! newConfiguration | name selection | name := UIManager default request: 'Name of the new project'. name isEmptyOrNil ifFalse: [ Cursor execute showWhile: [ | project | project := MTProject newNamed: name configurationBaseName withInitialVersion: '0.1' inRepository: nil. MCWorkingCopy forPackage: (MCPackage new name: project configurationClass name). selection := owner configurationList getItems detect: [ :item | item name configurationBaseName = name configurationBaseName]. owner configurationList setSelectedItem: selection. owner browseConfiguration: selection ] ]! ! !MBAnnouncement methodsFor: 'accessing' stamp: 'dkh 03/12/2011 02:09'! configurationInfo ^nil! ! !MBConfigurationInfoChanged class methodsFor: 'instance creation' stamp: 'dkh 3/10/2011 12:56'! changed: aConfigurationInfo ^(self new) configurationInfo: aConfigurationInfo; yourself! ! !MBConfigurationInfoChanged methodsFor: 'accessing' stamp: 'dkh 3/10/2011 12:55'! configurationInfo ^ configurationInfo! ! !MBConfigurationInfoChanged methodsFor: 'accessing' stamp: 'JuanPabloSandovalAlcocer 3/27/2012 10:51'! configurationInfo: anObject configurationInfo := anObject ! ! !MBInfoListChanged class methodsFor: 'instance creation' stamp: 'dkh 3/10/2011 18:29'! changed: aConfigurationInfo ^(self new) configurationInfo: aConfigurationInfo; yourself! ! !MBInfoListChanged methodsFor: 'accessing' stamp: 'dkh 3/10/2011 18:29'! configurationInfo ^ configurationInfo! ! !MBInfoListChanged methodsFor: 'accessing' stamp: 'dkh 3/10/2011 18:29'! configurationInfo: anObject configurationInfo := anObject! ! !MTProjectModelChanged commentStamp: '' prior: 81554388! A MTAnnouncement is used to signal a change on a MTProject model.! !MTProjectModelChanged class methodsFor: 'creation' stamp: 'ChristopheDemarey 7/23/2013 18:00'! project: anObject ^ self new project: anObject; yourself! ! !MTProjectModelChanged methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/23/2013 17:22'! project ^ project! ! !MTProjectModelChanged methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/23/2013 17:22'! project: anObject project := anObject! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:40'! addIcon ^ icons at: #'addIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self addIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:11'! addIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7Yv BYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61Ci jSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKS WstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+ 7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysM fh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXIt nPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbF BIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd 7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk 3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcut KBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEY ckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOx yGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/25/2013 11:13'! databaseAddIcon ^ icons at: #'databaseAddIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self databaseAddIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/25/2013 11:12'! databaseAddIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0 KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgV g5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7W Ju0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LI AYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq9 8Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+ hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31x lwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+a hamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI 8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CI nMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAA AABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/11/2013 10:57'! databaseIcon ^ icons at: #'databaseIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self databaseIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/11/2013 10:56'! databaseIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+ R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAA AEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMh r55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls 6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3j gpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1H AAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/25/2013 17:56'! deleteIcon ^ icons at: #'deleteIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self deleteIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/20/2013 22:35'! deleteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7Yf ogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJO TWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplx Uml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A0 9RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqE L1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHL vAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw34 0/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8Ed V8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE 10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEV Atda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqG Rzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb /gAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:50'! editIcon ^ icons at: #'editIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self editIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:51'! editIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuD lnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzE U5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATK Igs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2 UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMH xLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8Age fWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc 9yYcH50CAAAAAElFTkSuQmCC'! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:27'! packageAddIcon ^ icons at: #'packageAddIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self packageAddIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:20'! packageAddIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMVSURBVDjLdZNLaFx1GEfPnZk7 cyfNkElS0jTVKKRpE2PSpAhKHyqo2QhtShUiCPWBLhTdFKUUlxYUqggGxYqIbsSNFKQmVqMh TVujSQuhtnmMaR5NJs0kncz7ztz5f5+LgguNv/WPszkcS1XZbFPnDrUh8q6KRlTkrdYj/Vc3 +1n/Bkz3H65T0TdV5PXapiNRU1jjztxgVkU/UyMfPtg7uLwpYGagx1bVF1Tk7ciO7p3bWp/B J4ZsfAw75Gc1NsTGrfF5FTmtIl90Hhsp/AOYHujpRvSdUHXnwW0tR3Gqm0FLlJMz3Bw6xb0P 7MdXcR/FXILbsXEyiRujasypva+Mfm9N9R/+EpFjW3f2Wk5NO25mjVTiBqaUxcvFCVlF6ht3 g5vEX9mIz4mQjk9zOzZOPjn/TUCNPL/ryT7Ly6yRjQ8hpTShfIJ8Ok56cYm9vR9jh7dAbg7N xbDS09Q2dFBVA1d+mH02oCI5xaoKOiEiNY0UEtepqI4SrQ4TJg/uApgguEtQWCS/Mkp27hLO /UdRI7mAioAAVhC7qhk7FMFdHUOyq9h+sPJ/gU8prfxMJr1BORyFYAj1yqgIATXCXQ8GtAiB LTh1XZSDYRx3HVn5iZSXoexUYkIRJF+CsiKlMmoMATXmrlA1IB5IHrRIoHIHkfpdpO6M4fkc LiyFuLwWJu26lNwUB5MTtBghoCJhn20DYSivgxRBXDBFcBooK/yyEGTKruXxRx/inppmfv3z LOevXWByw630qZHh2eGPKCQXINQA/gowJVAPENQTflzw6GzZg/EZ9mx/CmN5PNK+j4s5z/KJ MU9nFkdenRw4GZv//WsMQYjsBjsMCqbokcisY1uVHGp9A4DjT5yhqa4Do/j8n343b+o7X7oS HzvzbT4x48UnzrVj+Z1I48NY9lZEwnw1OkT1dpvh2bMcaOrhvfMvkimsc21yyv1PTH/0dbWp kZMq8lzTYy9bhdU5Pr84yPVomX0dB2iu72Jm5SqXJka4dTP1gfV/OV8+3datIicQCarI+8eX c/uB14AIkAE++a1v+cTfDyOvKVPjhy0AAAAASUVORK5CYII='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/20/2013 16:12'! packageColoredIcon ^ icons at: #packageColoredIcon ifAbsentPut: [ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self packageColoredIconContents readStream) ]! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/20/2013 16:11'! packageColoredIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALnSURBVDjLfZNLaFx1HIW/e2fu zJ00w0ymkpQpiUKfMT7SblzU4kayELEptRChUEFEqKALUaRUV2YhlCLYjYq4FBeuiqZgC6FI QzBpEGpDkzHNs5PMTJtmHnfu6//7uSh2IYNnffg23zmWqtIpd395YwiRL1Q0qyIfD56cmOvU s/4LWJg40auiH6jI+7v3ncybdo2Hy9ebKvqNGrn03Nj1+x0Bi1dHHVV9W0U+ye4d2d83+Ca2 GJrlGZx0gkppkkfrsysqclFFvh8++3v7CWDh6ugIohfSPcPH+w6fwu05ABoSby9yb3Kc/meP YXc9TdCqslWapVGdn1Zjxo++O33Fujtx4gdEzj61f8xyC8/jN2rsVOcxYZOoVSZtBewZOAT+ NonuAWw3S728wFZpFm975cekGjlz8NXLVtSo0SxPImGdtFfFq5epr21wdOxrnMwuaC2jrRJW fYHdxRfIFeDWr0unkyrSUqxcyk2TLQzQrt6hqydPvidDBg/8VTAp8DegvYa3OU1z+SbuM6dQ I62kioAAVgondwAnncWvzCDNCk4CLO9vsJVw8xqN+iPiTB5SaTSKURGSaoTHHgxoAMlduL1H iFMZXP8BsvkbO1GD2O3GpLOIF0KsSBijxmCrMY+FqgGJQDzQgGT3XrJ7DuI5EKZd4iDG+CHG 84m8AIki1Ai2imRsx4FEBtQHCUB8MG1wi8QKGhjEC4mbAVHTx8kNYSuoiGurkRtLN76ivb0K 6SIkusCEoBEgaCQYPyT2QhKpAXKHTiMmQ2lmChWZTrw32v9TsLOyVlu8Nhi2G4Vs32HsTC9I A2KPRuU2Erp097+O5RRYvz3H1r3JldivfY7IR0+mfOu7l3pV5EM1cq744mi+OPwaRD71tSk0 Vsp3/uLB6s2minyrIpeOf7a00fFMf1w+MqRGzqvIW/teecdqV5a5P/8ncXv9ZxUdf/lCae5/ 3/hvpi4OjajIp4ikVOTLY+cXr3Tq/QPcssKNXib9yAAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:27'! packageDeleteIcon ^ icons at: #'packageDeleteIcon' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self packageDeleteIconContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/7/2013 16:20'! packageDeleteIconContents "Private - Method generated" ^ 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMNSURBVDjLdZNLaFx1GMV/d+bO 3DtJxkwSSWNq05YkrTVa04qIiOiiRIxgE2ohhUIKRQQFBcGiIiJiFaGIYEFERFy5dCE1pQ8J IbSEJhG66GM6idOk6Uwyec7zztz7/z4XlSw0nvXhx4FzjqWqbKXb517rQeRzFY2ryPv7Bkf+ 3Mpn/RuQHDncqqLvqMjbLZ2DCVNZZjV9uaii36uRr58Yunx/S8Cd8wMRVT2hIqfi2/u6tu17 nZAYiplJIk6YpdQo6/em7qrIGRX5sXd4vLIJSJ4f6EP0Y6ep94Vtjx3BbeoGrRGs3eGv0dPs ePx5QnU7qZZyLKamKORuTqgxpw++MfGbdXvk8E+IDD/cNWS5zU/iFZbZyN3E1Ir4pQyOVaWt Yy94a4QbOgi5cfKZJIupKcprd3+x1cjxPYfOWn5hmWJmFKnlcco5yvkM+fkFDg59SyRWD6U0 Wkph5ZO0tO+nsRmmf589aqtISbEao65DvLmDSu4GdU0JEk0xYpTBmwMTBW8BKvOUsxMU01dw dx1BjZRsFQEBrCiRxm4iThxvaRIpLhEJg1WegZBSy16ikF8niCUg6qB+gIpgqxEe9GBAq2DX 47YeIIjGcL0VJHuRDb9A4DZgnDhSrkGgSC1AjcFWYx4UqgbEBymDVrEbthNv28PG6iR+yGVl IsfKtTm8xXVCD0VpfY5/EojEQpEIEINgBaQK4oGpgttOoLA6sUIt6/L08Q9xdvdQuX6BG+OX 8IP1+pAaGZsd+4bK2hw47RCuA1MD9QFBfSFzJUn3S0dxZ0axfj5G3eyv7Opopja3HthizKuF +fHhW+mxU82dh7oe3d9POL4XyinwSpiqj1mr4bbthv73Nidsf/oIIU+czSlP//Bsq4q8q0be an9qINHe2w++R37+KtOffckzrwxSP3eOaiVLGSjkw9yaYeE/Z7p29kCPGvlIRY51vnjSqiyl mb/4B3be0x0tgWWH7lHIBaQXw8b39BPr/+589UxPn4p8gEhURb7ierWntHr/zbCxdpqwLih8 9/KF4Iu/AXSvuZLBEiNYAAAAAElFTkSuQmCC'! ! !String methodsFor: '*versionner-core-model' stamp: 'ChristopheDemarey 11/6/2012 15:24'! configurationBaseName "Return the baseName for this configuration class name." ^ (self indexOfSubCollection: 'ConfigurationOf') = 0 ifTrue: [ self ] ifFalse: [ self copyFrom: ('ConfigurationOf' size + 1) to: self size]! ! !Class methodsFor: '*versionner-core-model' stamp: 'ChristopheDemarey 11/6/2012 15:23'! configurationBaseName "Return the baseName for this configuration class." ^ self name asString configurationBaseName ! ! !MetacelloBrowserHelpBuilder methodsFor: 'building' stamp: 'dkh 4/10/2011 18:33'! build "Start building a help topic from a code description" topicToBuild := self createTopicFrom: rootToBuildFrom ! ! !MetacelloBrowserHelpBuilder methodsFor: 'private' stamp: 'dkh 4/10/2011 18:45'! command: aPragma for: class do: aBlock | factories | factories := class cmdNew perform: aPragma selector. factories isNil ifTrue: [ ^ self ]. factories isCollection ifTrue: [ factories do: aBlock ] ifFalse: [ aBlock value: factories ]! ! !MetacelloBrowserHelpBuilder methodsFor: 'private' stamp: 'dkh 4/10/2011 19:58'! createTopicFrom: aDescription | topic cmd topics cmdTopic classTopic | topic := HelpTopic named: aDescription bookName. topic key: aDescription key. topic icon: aDescription icon. aDescription pages do: [ :pageSelector | topic addSubtopic: (aDescription perform: pageSelector) ]. cmdTopic := HelpTopic title: 'Menu Items' icon: (HelpIcons iconNamed: #packageIcon) contents: ''. topic addSubtopic: cmdTopic. {MBConfigurationInfo. MBBaselineInfo. MBVersionInfo. MBPackageInfo. MBProjectInfo. MBGroupInfo} do: [ :class | topics := OrderedCollection new. classTopic := HelpTopic title: class helpLabel icon: (HelpIcons iconNamed: #packageIcon) contents: ''. (Pragma allNamed: #command from: class to: MBInfo) do: [ :pragma | self command: pragma for: class do: [ :factory | cmd := factory target: class cmdNew for: self. topics add: (HelpTopic title: cmd title contents: cmd helpDocumentation) ] ]. (topics asArray sort: [ :a :b | a title <= b title ]) do: [ :t | classTopic addSubtopic: t ]. cmdTopic addSubtopic: classTopic ]. ^ topic! ! !VersionnerHelpBuilder methodsFor: 'building' stamp: 'dkh 4/10/2011 18:33'! build "Start building a help topic from a code description" topicToBuild := self createTopicFrom: rootToBuildFrom ! ! !VersionnerHelpBuilder methodsFor: 'private' stamp: 'dkh 4/10/2011 18:45'! command: aPragma for: class do: aBlock | factories | factories := class cmdNew perform: aPragma selector. factories isNil ifTrue: [ ^ self ]. factories isCollection ifTrue: [ factories do: aBlock ] ifFalse: [ aBlock value: factories ]! ! !VersionnerHelpBuilder methodsFor: 'private' stamp: 'dkh 4/10/2011 19:58'! createTopicFrom: aDescription | topic cmd topics cmdTopic classTopic | topic := HelpTopic named: aDescription bookName. topic key: aDescription key. topic icon: aDescription icon. aDescription pages do: [ :pageSelector | topic addSubtopic: (aDescription perform: pageSelector) ]. cmdTopic := HelpTopic title: 'Menu Items' icon: (HelpIcons iconNamed: #packageIcon) contents: ''. topic addSubtopic: cmdTopic. {MBConfigurationInfo. MBBaselineInfo. MBVersionInfo. MBPackageInfo. MBProjectInfo. MBGroupInfo} do: [ :class | topics := OrderedCollection new. classTopic := HelpTopic title: class helpLabel icon: (HelpIcons iconNamed: #packageIcon) contents: ''. (Pragma allNamed: #command from: class to: MBInfo) do: [ :pragma | self command: pragma for: class do: [ :factory | cmd := factory target: class cmdNew for: self. topics add: (HelpTopic title: cmd title contents: cmd helpDocumentation) ] ]. (topics asArray sort: [ :a :b | a title <= b title ]) do: [ :t | classTopic addSubtopic: t ]. cmdTopic addSubtopic: classTopic ]. ^ topic! ! !MBAbstractTest class methodsFor: 'testing' stamp: 'topa 4/15/2011 09:50'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^ self name = #MBAbstractTest! ! !MBAbstractTest methodsFor: 'accessing' stamp: 'dkh 2/23/2011 15:19'! configurationName ^'ConfigurationOfDummyConfiguration'! ! !MBAbstractTest methodsFor: 'util' stamp: 'dkh 2/23/2011 15:17'! removeClassIfExist: aSymbol Smalltalk globals at: aSymbol ifPresent: [ :cls | cls removeFromSystem ]! ! !MBAbstractTest methodsFor: 'running' stamp: 'dkh 2/23/2011 21:17'! setUp (Smalltalk globals includesKey: self configurationName asSymbol) ifFalse: [ MetacelloToolBox configurationNamed: self configurationName. (Smalltalk globals at: self configurationName asSymbol) compile: 'baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec repository: ''http://www.squeaksource.com/Versionner''. spec package: ''Collections-Streams''. ].'. (Smalltalk globals at: self configurationName asSymbol) compile: 'default: spec spec for: #common do: [ spec blessing: #baseline. spec repository: ''http://www.squeaksource.com/Versionner''. spec package: ''Collections-Streams''. ].'. ]. configuration := (Smalltalk globals at: self configurationName asSymbol) ! ! !MBAbstractTest methodsFor: 'running' stamp: 'dkh 2/23/2011 15:24'! tearDown super tearDown. configuration := nil. self removeClassIfExist: self configurationName asSymbol ! ! !MBAddConfigurationCommandTest methodsFor: 'as yet unclassified' stamp: 'AlexandreBergel 3/27/2011 23:36'! testExecute | t v | t := false. command := MBAddConfigurationCommand target: self for: nil. [[command execute] valueSupplyingAnswer: self configurationName ] on: Error do: [:ex | t := ex messageText = 'Class #ConfigurationOfMetacello_Command_Tests already exist' ]. self assert: t. v := 10000 atRandom. self should: [[command execute] valueSupplyingAnswers: {{'Name of the new Metacello configuration (e.g., ConfigurationOfYourSoftware)' . self configurationName, v asString } . {'Enter initial version number' . '1.0'} ". {'Would you like to use http://www.squeaksource.com/Metacello_Command_Tests2, for your project?' . true}" }] raise: Exception. self deny: (Smalltalk globals includesKey: (self configurationName, v asString) asSymbol ). ! ! !MBAddDescriptionCommandTest methodsFor: 'accessing' stamp: 'dkh 4/7/2011 00:44'! configurationClass ^ configuration! ! !MBAddDescriptionCommandTest methodsFor: 'accessing' stamp: 'TesterBob 4/7/2011 00:46'! configurationInfo ^ MBConfigurationInfo configurationClass: self configurationClass! ! !MBAddDescriptionCommandTest methodsFor: 'tests' stamp: 'AlexandreBergel 3/28/2011 09:25'! testExecute | packageName mcPackage workingCopy httpRep | "We do not really test execute since the method raises a modal window. Instead, we test the method execute calls" packageName := 'ConfigurationOfMetacello_Command_Tests'. mcPackage := MCPackage named: packageName. workingCopy := mcPackage workingCopy. workingCopy repositoryGroup addRepository: (httpRep := MCHttpRepository location: 'http://www.squeaksource.com/Metacello_Command_Tests' user: 'hello' password: 'world'). [(MBAddDescriptionCommand target: self for: nil) appendDescription: 'HelloWorld' to: '1.0-baseline'] valueSupplyingAnswers: {{ 'You need to say where your project will be saved. No HTTP repository associated. Do you want to add http://www.squeaksource.com/Metacello_Command_Tests' . true} }. workingCopy repositoryGroup removeRepository: httpRep! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'dkh 3/19/2011 10:37'! testAddConfigurationCmd | versionString packageNames projectNames project version packages projects | self tearDownPackages addAll: #('ConfigurationOfMBFooTests' 'MBFooCommandTestA' 'MBFooCommandTestB'). "must be BEFORE the load" gofer version: 'MBFooCommandTestA-dkh.1'. gofer version: 'MBFooCommandTestB-dkh.1'. gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. versionString := '1.0'. packageNames := #('MBFooCommandTestA' 'MBFooCommandTestB'). projectNames := #('ConfigurationOfMBFooTests'). MBAddConfigurationCommand new executeAddBaselineForConfigurationNamed: self configurationName repositoryDescription: 'dictionary://', self repositoryName asString versionString: versionString packages: packageNames configurations: projectNames. project := (Smalltalk at: self configurationName asSymbol) project. version := project version: versionString, '-baseline'. packages := version packages. self assert: packages size == 2. packages do: [:pkg | self assert: (packageNames includes: pkg name)]. projects := version projects. projects do: [:prj | self assert: (projectNames includes: prj name)]. ! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'dkh 3/20/2011 12:45'! testConfigurationChanges! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'ChristopheDemarey 10/24/2013 17:57'! testRemoveVersionCmd01 "Issue 117: Removing a version does not update the #development/#stable symbolic versions." | configName class configurationRoot configInfo versionInfo cmd | configName := 'ConfigurationOfMBFooIssue117'. self tearDownPackages addAll: {configName}. gofer version: 'ConfigurationOfMBFooIssue117-dkh.1'. gofer load. class := Smalltalk at: configName asSymbol. self assert: (class project version: #development) versionString = '1.0'. self assert: (class project version: #stable) versionString = '1.0'. configurationRoot := MBConfigurationRoot new. configurationRoot register. configInfo := configurationRoot configurationInfoFor: class. versionInfo := configInfo versions detect: [ :each | each versionString = '1.0' ]. cmd := VSRemoveCommand target: versionInfo for: self. [ cmd execute ] valueSupplyingAnswers: {{'Are you sure you want to remove*'. true}}. self should: [ class project version: #development ] raise: MetacelloSymbolicVersionNotDefinedError. self should: [ class project version: #stable ] raise: MetacelloSymbolicVersionNotDefinedError. self should: [ class project version: '1.0' ] raise: MetacelloVersionDoesNotExistError! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'ChristopheDemarey 10/24/2013 17:57'! testRemoveVersionCmd02 "Remove a bleedingEdge version that is imported ... should abort the operation" | configName class configurationRoot configInfo versionInfo cmd versionString | configName := 'ConfigurationOfMBFooIssue117'. self tearDownPackages addAll: {configName}. gofer version: 'ConfigurationOfMBFooIssue117-dkh.1'. gofer load. class := Smalltalk at: configName asSymbol. versionString := (class project version: #bleedingEdge) versionString. configurationRoot := MBConfigurationRoot new. configurationRoot register. configInfo := configurationRoot configurationInfoFor: class. versionInfo := configInfo baselines detect: [ :each | each versionString = versionString ]. cmd := VSRemoveCommand target: versionInfo for: self. [ cmd execute ] valueSupplyingAnswers: {{'*is imported by another version*'. true}}. self assert: versionString = (class project version: #bleedingEdge) versionString! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'ChristopheDemarey 10/24/2013 17:57'! testRemoveVersionCmd03 "Remove a bleedingEdge version with no imports" | configName class configurationRoot configInfo versionInfo cmd versionString | configName := 'ConfigurationOfMBFooIssue117'. self tearDownPackages addAll: {configName}. gofer version: 'ConfigurationOfMBFooIssue117-dkh.2'. gofer load. class := Smalltalk at: configName asSymbol. versionString := (class project version: #bleedingEdge) versionString. self assert: versionString = '2.0-baseline'. configurationRoot := MBConfigurationRoot new. configurationRoot register. configInfo := configurationRoot configurationInfoFor: class. versionInfo := configInfo baselines detect: [ :each | each versionString = versionString ]. cmd := VSRemoveCommand target: versionInfo for: self. [ cmd execute ] valueSupplyingAnswers: {{'Are you sure you want to remove*'. true}}. self assert: (class project version: #bleedingEdge) versionString = '1.0-baseline'. self should: [ class project version: versionString ] raise: MetacelloVersionDoesNotExistError! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'ChristopheDemarey 10/24/2013 17:57'! testRemoveVersionCmd04 "Remove a bleedingEdge version with no imports" | configName class configurationRoot configInfo versionInfo cmd versionString | configName := 'ConfigurationOfMBFooIssue117'. self tearDownPackages addAll: {configName}. gofer version: 'ConfigurationOfMBFooIssue117-dkh.3'. gofer load. class := Smalltalk at: configName asSymbol. versionString := (class project version: #bleedingEdge) versionString. self assert: versionString = '2.0-baseline'. configurationRoot := MBConfigurationRoot new. configurationRoot register. configInfo := configurationRoot configurationInfoFor: class. versionInfo := configInfo baselines detect: [ :each | each versionString = versionString ]. cmd := VSRemoveCommand target: versionInfo for: self. [ cmd execute ] valueSupplyingAnswers: {{'Are you sure you want to remove*'. true}}. self should: [ class project version: #bleedingEdge ] raise: MetacelloSymbolicVersionNotDefinedError. self should: [ class project version: versionString ] raise: MetacelloVersionDoesNotExistError! ! !MBCommandMetacelloTests methodsFor: 'tests' stamp: 'dkh 3/19/2011 10:10'! testUsernamePassword | cmd configInfo | gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self tearDownPackages add: 'ConfigurationOfMBFooTests'. configInfo := (MBConfigurationInfo configurationClass: (Smalltalk at: #'ConfigurationOfMBFooTests')) configurationRoot: MBConfigurationRoot new. cmd := MBSaveConfigurationCommand target: configInfo for: self. [cmd username] valueSupplyingAnswer: 'ab'. [cmd password] valueSupplyingAnswer: 'foobar'. self assert: cmd username = 'ab'. self assert: cmd password = 'foobar'.! ! !MBCommandTests methodsFor: 'private' stamp: 'TesterBob 3/20/2011 13:21'! configurationName ^#'ConfigurationOfMetacello_Command_Tests'! ! !MBCommandTests methodsFor: 'running' stamp: 'dkh 3/19/2011 10:08'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MBCommandTests methodsFor: 'private' stamp: 'dkh 3/19/2011 10:13'! repositoryName ^#'Metacello_Dev_Cycle_Repository'! ! !MBCommandTests methodsFor: 'running' stamp: 'ChristopheDemarey 11/21/2013 14:06'! runCase | original | original := MetacelloPlatform current bypassGoferLoadUpdateCategories. ^ [ MetacelloPlatform current bypassGoferLoadUpdateCategories: true. [ super runCase ] ensure: [ MetacelloPlatform current bypassGoferLoadUpdateCategories: original ] ]! ! !MBCommandTests methodsFor: 'running' stamp: 'dkh 3/19/2011 10:16'! setUp | repo | super setUp. gofer := Gofer new. gofer disablePackageCache. repo := MBMonticelloPackagesResource current monticelloRepository. gofer repository: repo. Smalltalk at: #'MB_Foo_Test_Repository' put: repo. repo := MCDictionaryRepository new. repo description: 'dictionary://', self repositoryName asString. Smalltalk at: self repositoryName put: repo. authorName := MetacelloPlatform current authorName. MetacelloPlatform current authorName: 'TesterBob'. ! ! !MBCommandTests methodsFor: 'running' stamp: 'dkh 3/19/2011 10:54'! tearDown gofer := Gofer new. self tearDownPackages do: [:pkgName | (self hasPackage: pkgName) ifTrue: [ gofer package: pkgName ]]. gofer references notEmpty ifTrue: [ gofer unload ]. Smalltalk removeKey: self repositoryName ifAbsent: [ ]. Smalltalk removeKey: #'MB_Foo_Test_Repository' ifAbsent: []. Smalltalk at: self configurationName ifPresent: [:cls | cls removeFromSystem ]. MetacelloPlatform current authorName: authorName.! ! !MBCommandTests methodsFor: 'accessing' stamp: 'dkh 3/19/2011 10:04'! tearDownPackages tearDownPackages ifNil: [ tearDownPackages := OrderedCollection new ]. ^tearDownPackages! ! !VSValidateConfigurationCommandTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/21/2013 14:05'! testExecute self should: [ (VSValidateConfigurationCommand target: (MBConfigurationInfo configurationClass: configuration) for: nil) execute ] raise: MetacelloStackCacheNotification! ! !MBAbstractVersionInfoTest class methodsFor: 'testing' stamp: 'topa 4/15/2011 14:58'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^ self name = #MBAbstractVersionInfoTest! ! !MBBaselineInfoTest methodsFor: 'running' stamp: 'dkh 4/18/2011 20:22'! expectedFailures true ifTrue: [ ^#() ]. ^ #(#testcalculateInfoList)! ! !MBBaselineInfoTest methodsFor: 'running' stamp: 'dkh 3/6/2011 20:33'! setUp | configurationInfo | super setUp. configurationInfo := MBConfigurationInfo configurationClass: configuration. info := configurationInfo baselines detect: [:inf | inf version versionString = '1.0-baseline'] ! ! !MBBaselineInfoTest methodsFor: 'tests' stamp: 'DaleHenrichs 03/08/2011 13:49'! testCopyBaseline | configurationInfo baselineInfo | configurationInfo := MBConfigurationInfo configurationClass: configuration. baselineInfo := configurationInfo baselines detect: [:inf | inf version versionString = '1.0-baseline']. self assert: (baselineInfo isKindOf: MBBaselineInfo). [ (MBCopyBaselineCommand target: baselineInfo for: browser) copyBaselineWithNumber: '1.1'] valueSupplyingAnswer: 'this is my comment'. self assert: (configuration compiledMethodAt: #baseline11: ifAbsent: []) notNil. self assert: (configuration sourceCodeAt: #baseline11:) = 'baseline11: spec spec for: #''common'' do: [ spec blessing: #''baseline''. spec description: ''this is my comment''. spec repository: ''http://www.squeaksource.com/Versionner''. spec package: ''Collections-Streams''. ]. '! ! !MBBaselineInfoTest methodsFor: 'tests' stamp: 'dkh 3/19/2011 10:42'! testInstantiation | configurationInfo baseline | self should: [ MBBaselineInfo new ] raise: Error. self shouldnt: [ configurationInfo := MBConfigurationInfo configurationClass: configuration. baseline := configurationInfo baselines detect: [:inf | inf version versionString = '1.0-baseline']. ] raise: Error. self assert: (baseline versionString = '1.0-baseline'). self assert: (info configurationInfo configurationClass == (Smalltalk at: #ConfigurationOfDummyConfiguration))! ! !MBBaselineInfoTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/31/2012 17:45'! testcalculateInfoList "Doesn't work!! Need to use a real configuration with all information " "info := (MBBaselineInfo version: (MBVersionInfo version: (MetacelloMCVersion fromString: '1.0-baseline'))) configurationInfo: (MBConfigurationInfo configurationClass: configuration). info calculateInfoList"! ! !MBConfigurationInfoTest methodsFor: 'running' stamp: 'dkh 3/4/2011 14:13'! setUp super setUp. info := MBConfigurationInfo configurationClass: configuration. ! ! !MBConfigurationInfoTest methodsFor: 'tests' stamp: 'dkh 3/6/2011 14:56'! testBaselines "+1 is for the default: baseline" self assert: info baselines size = ((configuration selectors select: [ :s | s beginsWith: 'baseline']) size + 1). ! ! !MBConfigurationInfoTest methodsFor: 'tests' stamp: 'ChristopheDemarey 1/13/2014 10:26'! testDefaultVersion self assert: (configuration selectors select: [ :s | s beginsWith: 'baseline']) size + 1 equals: info baselines size ! ! !MBConfigurationInfoTest methodsFor: 'tests' stamp: 'dkh 3/2/2011 08:00'! testInitialization | conf | self should: [ MBConfigurationInfo new ] raise: Error. self shouldnt: [ conf := MBConfigurationInfo configurationClass: ConfigurationOfVersionner ] raise: Error. self assert: conf name = 'ConfigurationOfVersionner'! ! !MBInfoTest methodsFor: 'tests' stamp: 'dkh 3/2/2011 07:58'! testIsDirty "info is not dirty per default" self deny: MBInfo new isDirty! ! !MBInfoTest methodsFor: 'tests' stamp: 'dkh 3/4/2011 14:15'! testName | info | info := MBInfo new. self assert: (info name isNil). info name: 'foobar'. self assert: (info name = 'foobar'). self assert: (info printString = 'foobar'). ! ! !MBPackageInfoTest methodsFor: 'running' stamp: 'dkh 3/2/2011 08:03'! setUp " (Smalltalk includesKey: #TMPClass) ifTrue: [ (Smalltalk at: #TMPClass) removeFromSystem ]. " " Smalltalk organization removeCategory: 'FooBarZork'." (MCPackage named: 'FooBarZork') unload. PackageOrganizer default unregisterPackageNamed: 'FooBarZork'. package := MBPackageInfo named: 'FooBarZork'.! ! !MBPackageInfoTest methodsFor: 'running' stamp: 'AlexandreBergel 1/16/2011 21:06'! tearDown " (Smalltalk includesKey: #TMPClass) ifTrue: [ (Smalltalk at: #TMPClass) removeFromSystem ]. "! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'dkh 3/2/2011 08:03'! testInstantiation self should: [ MBPackageInfo new ] raise: Error. self should: [ MBPackageInfo named: #'FooBar' ] raise: AssertionFailure. self shouldnt: [ MBPackageInfo named: 'FooBar' ] raise: Error.! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'dkh 2/23/2011 21:19'! testIsDirty "This test is likely to be bogus ... cannot just create a package for packages that don'e exist. see Metacello Issue 113" | workingCopy cls | self deny: (package isDirty). self assert: (package printString = 'FooBarZork ---'). "We create a class" self deny: (Smalltalk includesKey: #TMPClass). cls := Object subclass: #TMPClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooBarZork'. self deny: (package isDirty). self assert: (package printString = 'FooBarZork ---'). (Smalltalk includesKey: #TMPClass) ifTrue: [ (Smalltalk at: #TMPClass) removeFromSystem ]. ! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'dkh 2/23/2011 21:22'! testPrintOn self assert: (package printString = 'FooBarZork ---').! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'DaleHenrichs 03/08/2011 13:41'! testWorkingCopy | orga workingCopy | self assert: (PackageOrganizer default packageNamed: 'FooBarZork' ifAbsent: []) isNil. package := MBPackageInfo named: 'FooBarZork'. workingCopy := package workingCopy. "creating a packageInfo for a package that is not currently loaded can create problems. see Metacello Issue 113" self assert: workingCopy isNil. ! ! !MBGroupInfoTest methodsFor: 'tests' stamp: 'AlexandreBergel 3/27/2011 12:11'! testPrintOn | str | self shouldnt: [str := MBGroupInfo new printString] raise: Error. self assert: (str = 'nil ---'). ! ! !MBGroupInfoTest methodsFor: 'tests' stamp: 'AlexandreBergel 3/27/2011 12:11'! testgroupContentsIfLoaded self assert: MBGroupInfo new groupContentsIfLoaded isEmpty! ! !MBSpecInfoTest class methodsFor: 'testing' stamp: 'topa 4/15/2011 09:50'! isAbstract "Override to true if a TestCase subclass is Abstract and should not have TestCase instances built from it" ^ self name = #MBSpecInfoTest! ! !MBConfigurationBranchTest methodsFor: 'running' stamp: 'dkh 4/17/2011 12:41'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MBConfigurationBranchTest methodsFor: 'running' stamp: 'dkh 4/17/2011 12:28'! setUp | repo | super setUp. gofer := Gofer new. gofer disablePackageCache. repo := MBMonticelloPackagesResource current monticelloRepository. gofer repository: repo. Smalltalk at: #'MB_Foo_Test_Repository' put: repo. configurationRoot := MBConfigurationRoot new. configurationRoot register. ! ! !MBConfigurationBranchTest methodsFor: 'running' stamp: 'dkh 4/17/2011 12:28'! tearDown configurationRoot ifNotNil: [ configurationRoot unregister ]. Smalltalk removeKey: #'MB_Foo_Test_Repository' ifAbsent: []. gofer := Gofer new. self tearDownPackages do: [:pkgName | (self hasPackage: pkgName) ifTrue: [ gofer package: pkgName ]]. gofer references notEmpty ifTrue: [ gofer unload ]. ! ! !MBConfigurationBranchTest methodsFor: 'running' stamp: 'dkh 4/17/2011 12:53'! tearDownPackages ^#('MBFooTests' 'ConfigurationOfMBBranchTests')! ! !MBConfigurationBranchTest methodsFor: 'tests' stamp: 'dkh 4/17/2011 12:48'! test0010BasicLoad " - make sure that the configuration can be loaded without error - make sure that version 1.0 can be loaded without error" configurationRoot unregister. self assert: (Smalltalk at: #ConfigurationOfMBBranchTests ifAbsent: []) isNil. gofer version: 'ConfigurationOfMBBranchTests-dkh.1'. gofer load. ((Smalltalk at: #ConfigurationOfMBBranchTests) project version: '1.0') load. self assert: (Smalltalk at: #MBFooTestA ifAbsent: []) notNil ! ! !MBConfigurationBranchTest methodsFor: 'tests' stamp: 'dkh 4/17/2011 12:48'! test0011BasicLoad " - make sure that the branch configuration can be loaded without error - make sure that version 1.0 can be loaded without error" configurationRoot unregister. self assert: (Smalltalk at: #ConfigurationOfMBBranchTests ifAbsent: []) isNil. gofer version: 'ConfigurationOfMBBranchTests.branch-dkh.2'. gofer load. ((Smalltalk at: #ConfigurationOfMBBranchTests) project version: '1.0') load. self assert: (Smalltalk at: #MBFooTestA ifAbsent: []) notNil ! ! !MBConfigurationBranchTest methodsFor: 'tests' stamp: 'dkh 4/17/2011 13:13'! test002ConfigurationReferences "Make sure that the project and project branches show up in configuration references (for load configuration command)" | referenceMap | referenceMap := MBLoadConfigurationCommand new configurationReferencesFrom: MBMonticelloPackagesResource current monticelloRepository. self assert: (referenceMap keys includes: 'ConfigurationOfMBBranchTests.branch')! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/27/2013 12:34'! expectedFailures ^ #( test0021ConfigurationInfoCreated test0030BasicVersionLoad test0031ConfigurationInfoChanged test0040BasicVersionLoad test0050BasicVersionLoad test0060BasicVersionLoad test0061ConfigurationInfoChanged test0062InfoListChanged test0070BasicVersionLoad test0080BasicVersionLoad test0081BasicVersionLoad test0082ConfigurationInfoChanged test0083InfoListChanged test0090BasicVersionLoad test0091PackageMismatch test0101ConfigurationInfoDeleted test0120ConfigPackageSave ) ! ! !MBConfigurationRootTest methodsFor: 'running' stamp: 'dkh 4/17/2011 14:50'! hasPackage: aString | package | package := MCWorkingCopy allManagers detect: [ :each | each packageName = aString ] ifNone: [ nil ]. ^ package notNil! ! !MBConfigurationRootTest methodsFor: 'scenarios' stamp: 'dkh 3/18/2011 19:00'! scenariosForTests " 1. select a configuration, then unload the configuration ... in OB you gtt an error because the project was undefined .... simulate by creating a ConfigurationOf class that is not a real configuration 2. add new configuration should associate the chosen repository with the configuration, too...maybe addConfigurationTest should check this 3. add new configuration then do checkpoing dev and note that dirty * is still on the label in the browser "! ! !MBConfigurationRootTest methodsFor: 'running' stamp: 'dkh 3/9/2011 17:24'! setUp | repo | super setUp. gofer := Gofer new. gofer disablePackageCache. repo := MBMonticelloPackagesResource current monticelloRepository. gofer repository: repo. Smalltalk at: #'MB_Foo_Test_Repository' put: repo. configurationRoot := MBConfigurationRoot new. configurationRoot register. ! ! !MBConfigurationRootTest methodsFor: 'running' stamp: 'dkh 3/9/2011 17:28'! tearDown configurationRoot ifNotNil: [ configurationRoot unregister ]. Smalltalk removeKey: #'MB_Foo_Test_Repository' ifAbsent: []. gofer := Gofer new. self tearDownPackages do: [:pkgName | (self hasPackage: pkgName) ifTrue: [ gofer package: pkgName ]]. gofer references notEmpty ifTrue: [ gofer unload ]. ! ! !MBConfigurationRootTest methodsFor: 'running' stamp: 'dkh 3/9/2011 17:34'! tearDownPackages ^#('MBFooTests' 'ConfigurationOfMBFooTests')! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 3/10/2011 08:08'! test0010BasicLoad "First test: - make sure that the configuration can be loaded without error - make sure that version 1.0 can be loaded without error" configurationRoot unregister. self assert: (Smalltalk at: #ConfigurationOfMBFooTests ifAbsent: []) isNil. gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: (Smalltalk at: #MBFooTestA ifAbsent: []) notNil ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/22/2013 11:14'! test0020BasicConfigurationLoad "Second test: - load configuration version dkh.1 - verify that config info added to root - validate that all of the data structures are correct .... based on the configuration. " | configClassName configClass configInfo baselines versions info packages text | configClassName := #ConfigurationOfMBFooTests. self assert: (Smalltalk at: configClassName ifAbsent: []) isNil. gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. "configuration" configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo notNil. self assert: configInfo configurationClass == configClass. self assert: configInfo isDirty not. self assert: configInfo currentVersion isNil. self assert: configInfo name = configClassName asString. self assert: configInfo validate isEmpty. self assert: configInfo projects isEmpty. self assert: configInfo packages isEmpty. self assert: configInfo groups isEmpty. self assert: configInfo printString = 'MBFooTests(dkh.1)'. text := configInfo asStringOrText. self assert: text isString. self assert: text = 'MBFooTests(dkh.1)'. baselines := configInfo baselines. self assert: baselines size = 1. "baseline" info := baselines first. self assert: info version blessing == #baseline. self assert: info version versionString = '1.0-baseline'. self assert: info isDirty not. self assert: info validate isEmpty. self assert: info projects isEmpty. self assert: info groups isEmpty. packages := info packages. self assert: packages size = 1. info := packages first. self assert: info isDirty not. self assert: info packageName = 'MBFooTests'. self assert: (info spec isKindOf: MetacelloPackageSpec). self assert: info spec file = 'MBFooTests'. versions := configInfo versions. self assert: versions size = 2. "version" info := versions first. self assert: info version blessing == #release. self assert: info version versionString = '1.0'. self assert: info isDirty not. self assert: info validate isEmpty. self assert: info projects isEmpty. self assert: info groups isEmpty. packages := info packages. self assert: packages size = 1. info := packages first. self assert: info isDirty not. self assert: info packageName = 'MBFooTests'. self assert: (info spec isKindOf: MetacelloPackageSpec). self assert: info spec file = 'MBFooTests-dkh.1'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 4/5/2011 15:48'! test0021ConfigurationInfoCreated | createdValuable configClassName configInfoCreated configInfoChanged changedValuable configInfoDeleted deletedValuable | configInfoDeleted := configInfoChanged := configInfoCreated := false. createdValuable := [ :ann | configInfoCreated := true ]. changedValuable := [ :ann | configInfoChanged := true ]. deletedValuable := [ :ann | configInfoDeleted := true ]. [ configurationRoot announcer on: MBConfigurationInfoCreated do: createdValuable. configurationRoot announcer on: MBConfigurationInfoChanged do: changedValuable. configurationRoot announcer on: MBConfigurationInfoDeleted do: deletedValuable. configClassName := #ConfigurationOfMBFooTests. "load configuration" gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self assert: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. ] ensure: [ configurationRoot announcer unsubscribe: createdValuable; unsubscribe: deletedValuable; unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/27/2012 15:48'! test0030BasicVersionLoad "Third test: - load configuration version dkh.1 - verfy that the target data structures are as expected - load version 1.0 - check that that expected changes to the data structures occur ... in this case that the package is loaded" | configClass configClassName configInfo versions versionInfo packages packageInfo text x | gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.1)'. text := configInfo asStringOrText. self assert: text isString. self assert: text = 'MBFooTests(dkh.1)'. versions := configInfo versions. self assert: versions size = 1. versionInfo := versions first. packages := versionInfo packages. self assert: packages size = 1. packageInfo := packages first. self assert: packageInfo workingCopy isNil. self assert: packageInfo printString = 'MBFooTests ---'. text := packageInfo asStringOrText. self assert: text isString. self assert: text = 'MBFooTests ---'. "load version 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: configInfo printString = 'MBFooTests 1.0(dkh.1)'. self assert: configInfo currentVersion versionString = '1.0'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.1)'. text := configInfo asStringOrText. self assert: text isString. self assert: text = 'MBFooTests 1.0(dkh.1)'. versions := configInfo versions. self assert: versions size = 1. "reacquire the packageInfo instance, since the old instance is not valid" versionInfo := versions first. packages := versionInfo packages. self assert: packages size = 1. packageInfo := packages first. self assert: packageInfo workingCopy notNil. self assert: packageInfo printString = 'MBFooTests-dkh.1'. text := packageInfo asStringOrText. self assert: text isString. self assert: text = 'MBFooTests-dkh.1'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/27/2012 16:40'! test0031ConfigurationInfoChanged "If you don't touch the currentVersion of a configurationInfo, then no changed event is signaled on load." | createdValuable configClassName configInfoCreated configInfoChanged changedValuable configInfoDeleted deletedValuable | configInfoDeleted := configInfoChanged := configInfoCreated := false. createdValuable := [ :ann | configInfoCreated := true ]. changedValuable := [ :ann | configInfoChanged := true ]. deletedValuable := [ :ann | configInfoDeleted := true ]. [ configurationRoot announcer on: MBConfigurationInfoCreated do: createdValuable. configurationRoot announcer on: MBConfigurationInfoChanged do: changedValuable. configurationRoot announcer on: MBConfigurationInfoDeleted do: deletedValuable. "load configuration" configClassName := #ConfigurationOfMBFooTests. gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self assert: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. "load 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self deny: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. ] ensure: [ configurationRoot announcer unsubscribe: createdValuable; unsubscribe: deletedValuable; unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 3/10/2011 15:56'! test0032InfoListChanged | infoListChanged changedValuable | infoListChanged := false. changedValuable := [ :ann | infoListChanged := true ]. [ configurationRoot announcer on: MBInfoListChanged do: changedValuable. "load configuration" gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self deny: infoListChanged. infoListChanged := false. "load 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self deny: infoListChanged. ] ensure: [ configurationRoot announcer unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 13:34'! test0040BasicVersionLoad "Fourth test: - load configuration dkh.1 - send currentVersion to configInfo ... which record currentVersion - load version 1.0 and currentVersion should be updated to reflect fact that pacakges loaded." | configClass configClassName configInfo | gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.1)'. self assert: configInfo currentVersion isNil. "load version 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: configInfo printString = 'MBFooTests 1.0(dkh.1)'. self assert: configInfo currentVersion versionString = '1.0'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.1)'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/31/2012 17:51'! test0050BasicVersionLoad "Fifth test: - load configuration dkh.2(no events when loading version 1.1!!) - send currentVersion to configInfo ... which record currentVersion - load version 1.0 and currentVersion should be updated to reflect fact that pacakges loaded. - load version 1.1 and verify" | configClass configClassName configInfo | gofer version: 'ConfigurationOfMBFooTests-dkh.2'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.2)'. self assert: configInfo currentVersion isNil. "load version 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: configInfo printString = 'MBFooTests 1.0(dkh.2)'. self assert: configInfo currentVersion versionString = '1.0'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.2)'. "load version 1.1" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.1') load. self flag: '...NOTE dkh.2 is identical to dkh.1and no events generated on load'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.2)'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 13:57'! test0060BasicVersionLoad "Sixth test: - load configuration dkh.3 - send currentVersion to configInfo ... which record currentVersion - load version 1.0 and currentVersion should be updated to reflect fact that pacakges loaded. - load version 1.2 and verify" | configClass configClassName configInfo | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. self assert: configInfo currentVersion isNil. "load version 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: configInfo printString = 'MBFooTests 1.0(dkh.3)'. self assert: configInfo currentVersion versionString = '1.0'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.3)'. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 4/5/2011 15:52'! test0061ConfigurationInfoChanged "Touch the currentVersion of a configurationInfo, expect a changed event on load" | createdValuable configClassName configInfoCreated configInfoChanged changedValuable configInfoDeleted deletedValuable configInfo configClass | configInfoDeleted := configInfoChanged := configInfoCreated := false. createdValuable := [ :ann | configInfoCreated := true ]. changedValuable := [ :ann | configInfoChanged := true ]. deletedValuable := [ :ann | configInfoDeleted := true ]. [ configurationRoot announcer on: MBConfigurationInfoCreated do: createdValuable. configurationRoot announcer on: MBConfigurationInfoChanged do: changedValuable. configurationRoot announcer on: MBConfigurationInfoDeleted do: deletedValuable. "load configuration" configClassName := #ConfigurationOfMBFooTests. gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. self assert: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self deny: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. self assert: configInfo currentVersion versionString = '1.0'. configInfo packages. "prime the pump" "load 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self deny: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. ] ensure: [ configurationRoot announcer unsubscribe: createdValuable; unsubscribe: deletedValuable; unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 3/10/2011 16:00'! test0062InfoListChanged | infoListChanged changedValuable configClassName configClass configInfo | infoListChanged := false. changedValuable := [ :ann | infoListChanged := true ]. [ configurationRoot announcer on: MBInfoListChanged do: changedValuable. "load configuration" configClassName := #ConfigurationOfMBFooTests. gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. self deny: infoListChanged. infoListChanged := false. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self deny: infoListChanged. infoListChanged := false. self assert: configInfo currentVersion versionString = '1.0'. configInfo infoList. "prime the pump" "load 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: infoListChanged. ] ensure: [ configurationRoot announcer unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 13:58'! test0070BasicVersionLoad "Seventh test: - load configuration dkh.3 - load version 1.0. - validate package, baselines and versions state - load version 1.2 - validate new package, baselines and versions state" | configClass configClassName configInfo expected infos | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. self assert: configInfo currentVersion isNil. "load version 1.0" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.0') load. self assert: configInfo printString = 'MBFooTests 1.0(dkh.3)'. self assert: configInfo currentVersion versionString = '1.0'. self assert: configInfo printString = 'MBFooTests 1.0(dkh.3)'. "baselines" infos := configInfo baselines. self assert: infos size = 1. expected := #('1.0-baseline #bleedingEdge'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "versions" infos := configInfo versions. self assert: infos size = 3. expected := #('1.2' '1.1' ' @ 1.0 #stable'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('MBFooTests-dkh.1'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. "baselines" infos := configInfo baselines. self assert: infos size = 1. expected := #('1.0-baseline #bleedingEdge'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "versions" infos := configInfo versions. self assert: infos size = 3. expected := #(' @ 1.2' '1.1' '1.0 #stable'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 13:59'! test0080BasicVersionLoad "Eighth test: - load configuration dkh.3 - load version 1.2 - validate package and configInfo state - edit class and validate" | configClass configClassName configInfo expected infos x | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. self assert: configInfo currentVersion isNil. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo currentVersion versionString = '1.2'. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText isString. "versions" infos := configInfo versions. self assert: infos size = 3. expected := #(' @ 1.2' '1.1' '1.0 #stable'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index)]. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: info asStringOrText isString ]. "modify class in MBFooTests project" (Smalltalk at: #MBFooTestA) compile: 'bar ^self' classified: 'mod'. self assert: (x := configInfo printString) = '* MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText isText. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('* MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: info asStringOrText isText]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 13:59'! test0081BasicVersionLoad "8.1: - load configuration dkh.3 - load version 1.2 - validate package and configInfo state - edit class - validate #recalculate variant for currentVersion" | configClass configClassName configInfo expected infos| gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. self assert: configInfo currentVersion isNil. self assert: configInfo asStringOrText = 'MBFooTests(dkh.3)'. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo currentVersion versionString = '1.2'. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText = 'MBFooTests 1.2(dkh.3)'. "modify class in MBFooTests project" (Smalltalk at: #MBFooTestA) compile: 'bar ^self' classified: 'mod'. self assert: configInfo printString = '* MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText = '* MBFooTests 1.2(dkh.3)'. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 4/5/2011 15:52'! test0082ConfigurationInfoChanged | configInfoDeleted configInfoChanged configInfoCreated createdValuable changedValuable deletedValuable configClassName configClass configInfo | configInfoDeleted := configInfoChanged := configInfoCreated := false. createdValuable := [ :ann | configInfoCreated := true ]. changedValuable := [ :ann | configInfoChanged := true ]. deletedValuable := [ :ann | configInfoDeleted := true ]. [ configurationRoot announcer on: MBConfigurationInfoCreated do: createdValuable. configurationRoot announcer on: MBConfigurationInfoChanged do: changedValuable. configurationRoot announcer on: MBConfigurationInfoDeleted do: deletedValuable. "load configuration" gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. self assert: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self deny: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. self assert: configInfo currentVersion versionString = '1.2'. configInfo packages. "prime the pump" "modify class in MBFooTests project" (Smalltalk at: #MBFooTestA) compile: 'bar ^self' classified: 'mod'. self deny: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. ] ensure: [ configurationRoot announcer unsubscribe: createdValuable; unsubscribe: deletedValuable; unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 3/10/2011 16:03'! test0083InfoListChanged | infoListChanged changedValuable configClassName configClass configInfo | infoListChanged := false. changedValuable := [ :ann | infoListChanged := true ]. [ configurationRoot announcer on: MBInfoListChanged do: changedValuable. "load configuration" configClassName := #ConfigurationOfMBFooTests. gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. self deny: infoListChanged. infoListChanged := false. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self deny: infoListChanged. infoListChanged := false. self assert: configInfo currentVersion versionString = '1.2'. configInfo infoList. "prime the pump" "modify class in MBFooTests project" (Smalltalk at: #MBFooTestA) compile: 'bar ^self' classified: 'mod'. self assert: infoListChanged. ] ensure: [ configurationRoot announcer unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/31/2012 17:56'! test0090BasicVersionLoad "9: - load configuration dkh.3 - load version 1.2 - edit class - verify state - revert MBFooTests-dkh.3 - validate" | configClass configClassName configInfo expected infos revertGofer | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. self assert: configInfo currentVersion isNil. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: (configInfo printString) = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo currentVersion versionString = '1.2'. "modify class in MBFooTests project" (Smalltalk at: #MBFooTestA) compile: 'bar ^self' classified: 'mod'. self assert: (configInfo printString) = '* MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText isText. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('* MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: info asStringOrText isText]. "revert MBFooTests-dkh.3" revertGofer := Gofer new. revertGofer disablePackageCache. gofer repositories do: [ :repo | revertGofer repository: repo ]. revertGofer version: 'MBFooTests-dkh.3'. [ revertGofer load ] on: Warning do: [:ex | ex resume ]. self assert: (configInfo printString) = '* MBFooTests 1.2(dkh.3)'. self assert: ((configInfo asStringOrText isString) or: (configInfo asStringOrText isText)). "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('* MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: ((info asStringOrText isString) or: (info asStringOrText isText))]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 14:05'! test0091PackageMismatch " - load configuration dkh.3 - load version 1.2 - validate package printString - load MBFooTests-dkh.4 - validate package printString " | configClass configClassName configInfo expected infos revertGofer | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load version 1.1" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: (configInfo printString) = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo currentVersion versionString = '1.2'. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('MBFooTests-dkh.3'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: info asStringOrText isString]. "load MBFooTests-dkh.4" gofer version: 'MBFooTests-dkh.4'. gofer load. "packages" infos := configInfo packages. self assert: infos size = 1. expected := #('MBFooTests-dkh.3[dkh.4]'). 1 to: infos size do: [:index | | info | info := infos at: index. self assert: info printString = (expected at: index). self assert: info asStringOrText isText]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 14:05'! test0100BasicConfigurationUnload "10: - load configuration dkh.3 - unload configuration" "load dkh.3" | configClassName configClass configInfo | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. "unload dkh.3" gofer unload. self assert: (configurationRoot configurations includes: configInfo) not. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 14:08'! test0101ConfigurationInfoDeleted | createdValuable configClassName configInfoCreated configInfoChanged changedValuable configInfoDeleted deletedValuable configClass configInfo | configInfoDeleted := configInfoChanged := configInfoCreated := false. createdValuable := [ :ann | configInfoCreated := true ]. changedValuable := [ :ann | configInfoChanged := true ]. deletedValuable := [ :ann | configInfoDeleted := true ]. [ configurationRoot announcer on: MBConfigurationInfoCreated do: createdValuable. configurationRoot announcer on: MBConfigurationInfoChanged do: changedValuable. configurationRoot announcer on: MBConfigurationInfoDeleted do: deletedValuable. configClassName := #ConfigurationOfMBFooTests. "load configuration" gofer version: 'ConfigurationOfMBFooTests-dkh.1'. gofer load. self assert: configInfoCreated. self assert: configInfoChanged. self deny: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.1)'. "unload dkh.3" gofer unload. self deny: configInfoCreated. self assert: configInfoChanged. self assert: configInfoDeleted. configInfoDeleted := configInfoChanged := configInfoCreated := false. self assert: (configurationRoot configurations includes: configInfo) not. ] ensure: [ configurationRoot announcer unsubscribe: createdValuable; unsubscribe: deletedValuable; unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 14:09'! test0110BasicPackageUnload "load dkh.3" | configClassName configClass configInfo unloadGofer infos | gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. self assert: configInfo printString = 'MBFooTests(dkh.3)'. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. "unload MBFooTests-dkh.3" unloadGofer := Gofer new. unloadGofer disablePackageCache. unloadGofer version: 'MBFooTests-dkh.3'. [ unloadGofer unload ] on: Warning do: [:ex | ex resume ]. self assert: (configInfo printString) = 'MBFooTests(dkh.3)'. self assert: configInfo asStringOrText isString. "packages" infos := configInfo packages. self assert: infos size = 0. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'dkh 3/10/2011 16:51'! test0111InfoListChanged | infoListChanged changedValuable configClassName configClass configInfo unloadGofer | infoListChanged := false. changedValuable := [ :ann | infoListChanged := true ]. [ configurationRoot announcer on: MBInfoListChanged do: changedValuable. "load configuration" gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. self deny: infoListChanged. infoListChanged := false. configClassName := #ConfigurationOfMBFooTests. configClass := Smalltalk at: configClassName ifAbsent: []. configInfo := configurationRoot configurationInfoFor: configClass. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self deny: infoListChanged. infoListChanged := false. self assert: configInfo currentVersion versionString = '1.2'. configInfo infoList. "prime the pump" "unload MBFooTests-dkh.3" unloadGofer := Gofer new. unloadGofer disablePackageCache. unloadGofer version: 'MBFooTests-dkh.3'. [ unloadGofer unload ] on: Warning do: [:ex | ex resume ]. self assert: infoListChanged. ] ensure: [ configurationRoot announcer unsubscribe: changedValuable ]. ! ! !MBConfigurationRootTest methodsFor: 'tests' stamp: 'ChristopheDemarey 8/28/2012 14:09'! test0120ConfigPackageSave "Issue 125 test - load configuration dkh.3 - load version 1.2 - modify configuration and validate - save configuration package and validate" | configClass configClassName configInfo expected infos suggestedName signature | "load configuration dkh.3" gofer version: 'ConfigurationOfMBFooTests-dkh.3'. gofer load. configClassName := #ConfigurationOfMBFooTests. self assert: (configClass := Smalltalk at: configClassName ifAbsent: []) notNil. configInfo := configurationRoot configurationInfoFor: configClass. "load version 1.2" ((Smalltalk at: #ConfigurationOfMBFooTests) project version: '1.2') load. self assert: configInfo workingCopy notNil. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo currentVersion versionString = '1.2'. self assert: configInfo printString = 'MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText isString. "modify class in ConfigurationOfMBFooTests class" (Smalltalk at: #ConfigurationOfMBFooTests) compile: 'bar ^self' classified: 'mod'. self assert: configInfo printString = '* MBFooTests 1.2(dkh.3)'. self assert: configInfo asStringOrText isText. "save the configuraiton package" [ Gofer new disablePackageCache; repository: (MCDictionaryRepository new); package: configClassName asString; commit ] on: MCVersionNameAndMessageRequest do: [:ex | suggestedName := ex suggestedName. ex resume: { suggestedName. 'commit comment'}]. signature := suggestedName copyAfterLast: $-. self assert: configInfo printString = ('MBFooTests 1.2(', signature, ')'). self assert: configInfo asStringOrText isString. ! ! !MBLoadConfigurationCommandTest methodsFor: 'tests' stamp: 'dkh 3/20/2011 14:15'! testExecute | block clsName | block := [(MBLoadConfigurationCommand target: nil) execute]. clsName := 'ConfigurationOfHomeSweetHome'. Smalltalk globals at: clsName ifPresent: [ :cls | (Smalltalk globals at: clsName) removeFromSystem ]. self should: [block valueSupplyingAnswers: { {'Name of the new Metacello configuration (e.g., ConfigurationOfYourSoftware)' . clsName} . {'Would you like to use http://www.squeaksource.com/HomeSweetHome, for your project?' . true} . {'Enter initial version number' . '1.0'} }] raise: Exception ! ! !MTDependantProjectTest commentStamp: '' prior: 81554518! Test clas for a dependant project! !MTDependantProjectTest methodsFor: 'private' stamp: 'ChristopheDemarey 12/12/2013 11:26'! referenceDependency | version | version := MTVersion new name: '1.0'; yourself. ^ (MTDependantProject newNamed: 'LibXYZ') configurationClass: self class; repositories: #('http://smalltalkhub.com/mc/dummy/XYZ/main', 'http://github.com/XYZ'); displayName: 'XYZ'; parent: nil; version: version; yourself.! ! !MTDependantProjectTest methodsFor: 'tests' stamp: 'ChristopheDemarey 12/12/2013 12:44'! testEquals | dependency otherDependency | dependency := self referenceDependency. otherDependency := self referenceDependency. self assert: otherDependency equals: dependency. otherDependency := self referenceDependency name: 'toto'; yourself. self deny: otherDependency = dependency. otherDependency := self referenceDependency parent: self; yourself. self deny: otherDependency = dependency. otherDependency := self referenceDependency configurationClass: Object; yourself. self deny: otherDependency = dependency. otherDependency := self referenceDependency repositories: #('http://smalltalkhub.com/mc/dummy/XYZ/main', 'http://github.com/LibXYZ'); yourself. self deny: otherDependency = dependency.! ! !MTDependencyTest methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 6/27/2013 15:44'! setUp | visitor | visitor := MCModel2MTModelVisitor new. version := ConfigurationOfVersionnerTestXMLWriter project version: '2.1.0'. project := visitor visitConfiguration: ConfigurationOfVersionnerTestXMLWriter withVersion: version. ! ! !MTDependencyTest methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 12/11/2013 18:25'! testProject | dependency | dependency := project dependencyNamed: 'Core'. self assert: dependency project equals: project. dependency := (project dependencyNamed: 'XML-Writer-Core'). self assert: dependency project equals: project. dependency := (project dependencyNamed: 'Collections-Support'). self assert: dependency project equals: project. ! ! !MTDependencyTest methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 6/27/2013 15:58'! testRemove (project dependencyNamed: 'XML-Writer-Core') remove. self assert: ((project dependencyNamed: 'XML-Writer-Core') = nil).! ! !MTDependencyTest methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 6/27/2013 16:00'! testRemoveGroup (project dependencyNamed: 'Core') remove. self assert: (project dependencyNamed: 'Core') = nil. self assert: ((project dependencyNamed: 'default') dependencies includes: 'Core') not! ! !MTDevelopmentWorkfowTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/7/2014 14:57'! testCreateInitialDevelopment | version configuration | project := MTProject newNamed: 'Z' withInitialVersion: '0.1' inRepository: 'http://smalltalkhub.com/mc/demarey/Versionner/main'. configuration := project configurationClass. visitor := MCModel2MTModelVisitor new. self shouldnt: [ version := configuration project version: #development] raise: MetacelloSymbolicVersionDoesNotExistError description: 'Cannot find the #development symbolic version in the metacello description'. self assert: configuration project development versionString equals: '0.1-baseline'. "configuration removeFromSystem."! ! !MTDevelopmentWorkfowTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/21/2013 17:56'! testNewProjectWithInitialVersionInRepository | projectName configClass | projectName := 'VersionnerTest'. project := MTProject newNamed: projectName withInitialVersion: '0.1' inRepository: ''. self assert: (project configurationClass notNil) description: 'Project configuration class is nil.'. self shouldnt: [configClass := Smalltalk globals at: (project configurationClass name)] raise: KeyNotFound description: 'Cannot find the Configuration class in the image.'. self assert: project name equals: projectName. configClass removeFromSystem. ! ! !MTDevelopmentWorkfowTestWithXMLParser methodsFor: 'running' stamp: 'ChristopheDemarey 6/25/2013 13:19'! setUp "Create a model of the project version we want to work on." | version | "create a copy of the class to don't pollute the configuration with code generated for tests purposes" classFactory := ClassFactoryForTestCase new. class := classFactory duplicateClass: ConfigurationOfVersionnerTestXMLParserTemplate withNewName: #ConfigurationOfVersionnerTestXMLParser. visitor := MCModel2MTModelVisitor new. version := class project version: '1.1'. project := visitor visitConfiguration: class withVersion: version. ! ! !MTDevelopmentWorkfowTestWithXMLParser methodsFor: 'running' stamp: 'ChristopheDemarey 6/25/2013 13:19'! tearDown classFactory cleanUp.! ! !MTDevelopmentWorkfowTestWithXMLParser methodsFor: 'tests' stamp: 'ChristopheDemarey 11/21/2013 17:52'! testCreateBaseline | baselineName baseline | baselineName := '84.1'. project devWorkflow createBaseline: baselineName. "Visit the created baseline" baseline := project configurationClass project version: baselineName. project := visitor visitConfiguration: project configurationClass withVersion: baseline. self assert: project notNil. self assert: project name equals: 'VersionnerTestXMLParser'. self assert: project version name equals: baselineName. ! ! !MTDevelopmentWorkfowTestWithXMLParser methodsFor: 'tests' stamp: 'ChristopheDemarey 11/21/2013 18:34'! testCreateNextDevelopment project devWorkflow createNextDevelopment: '999'. self assert: (project configurationClass selectors includes: #'baseline999:').! ! !MTDevelopmentWorkfowTestWithXMLParser methodsFor: 'tests' stamp: 'ChristopheDemarey 11/27/2013 10:32'! testNextDevelopmentVersionString | workflow nextVersion | workflow := project devWorkflow. nextVersion := workflow nextDevelopmentVersionString: '1.0-baseline'. self assert: nextVersion equals: '1.1'. nextVersion := workflow nextDevelopmentVersionString: 'baseline-1.3'. self assert: nextVersion equals: '1.4'.! ! !MTModelComparatorTest methodsFor: 'private' stamp: 'ChristopheDemarey 12/12/2013 14:42'! referenceModel ^ MTProjectExampleBuilder projectA! ! !MTModelComparatorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 12/12/2013 14:48'! testIsEqualsTo | projectA projectB | projectA := MTProjectExampleBuilder projectA. projectB := MTProjectExampleBuilder projectA. self deny: projectA == projectB. self assert: (MTModelComparator is: projectA equalsTo: projectB). projectB removeDependencyNamed: 'PackageA2'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := MTProjectExampleBuilder projectA. projectB removeDependencyNamed: 'LibXYZ'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := MTProjectExampleBuilder projectA. projectB removeDependencyNamed: 'All'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := MTProjectExampleBuilder projectA. (projectB dependencyNamed: 'All') removeDependency: (projectB dependencyNamed: 'SmallGroup'). self deny: (MTModelComparator is: projectA equalsTo: projectB).! ! !MTProjectBFSIteratorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 12/11/2013 13:17'! testNext | iterator currentElement | iterator := MTProjectBFSIterator on: MTProjectExampleBuilder projectA. currentElement := iterator next. self assert: (currentElement isKindOf: MTProject). self assert: currentElement name equals: 'A'. (1 to: 5) do: [ :i | currentElement := iterator next. self assert: (currentElement isKindOf: MTPackage). self assert: currentElement name equals: 'PackageA' , i asString ]. currentElement := iterator next. self assert: (currentElement isKindOf: MTDependantProject). self assert: currentElement name equals: 'LibXYZ'. currentElement := iterator next. self assert: (currentElement isKindOf: MTGroup). self assert: currentElement name equals: 'SmallGroup'. currentElement := iterator next. self assert: (currentElement isKindOf: MTGroup). self assert: currentElement name equals: 'All'. (1 to: 5) do: [ :i | currentElement := iterator next. self assert: (currentElement isKindOf: MTPackage). self assert: currentElement name equals: 'PackageA' , i asString ]. currentElement := iterator next. self assert: (currentElement isKindOf: MTGroup). self assert: currentElement name equals: 'SmallGroup'. currentElement := iterator next. self assert: (currentElement isKindOf: MTDependantProject). self assert: currentElement name equals: 'LibXYZ'. self assert: iterator hasNext not. self assert: iterator next isNil! ! !MTProjectTest commentStamp: '' prior: 81554607! Test class for MTProject! !MTProjectTest methodsFor: 'tests' stamp: 'ChristopheDemarey 12/12/2013 10:28'! testEquals | projectA projectB | projectA := MTProjectExampleBuilder projectA. projectB := MTProjectExampleBuilder projectA. self deny: projectA == projectB. self assert: projectA equals: projectB. projectB name: 'B'. self deny: projectA == projectB. projectB := MTProjectExampleBuilder projectA. projectB version: MTVersion new. self deny: projectA == projectB. projectB := MTProjectExampleBuilder projectA. projectB configurationClass: self class. self deny: projectA == projectB. projectB := MTProjectExampleBuilder projectA. projectB repository: 'http://localhost'. self deny: projectA == projectB.! ! !VSReleaseDevelopmentVersionCommandTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/27/2013 11:17'! testStandardizeDevVersionString | cmd | cmd := VSReleaseDevelopmentVersionCommand new. self assert: (cmd standardizeDevVersionString: '1.0-baseline') equals: '1.0-baseline'. self assert: (cmd standardizeDevVersionString: 'baseline-1.3') equals: '1.3-baseline'.! ! !MCModel2MTModelVisitorTest methodsFor: 'private' stamp: 'ChristopheDemarey 6/5/2013 13:24'! checkGroups: project | group | group := project groups at: 1. self assert: group notNil. self assert: group name equals: 'default'. self assert: (group dependencies hasEqualElements: #('Core' 'Tests')). group := project groups at: 2. self assert: group notNil. self assert: group name equals: 'Core'. self assert: (group dependencies hasEqualElements: #('VersionnerTestXML-Parser')). group := project groups at: 3. self assert: group notNil. self assert: group name equals: 'Tests'. self assert: (group dependencies hasEqualElements: #('VersionnerTestXML-Tests-Parser')). ! ! !MCModel2MTModelVisitorTest methodsFor: 'private' stamp: 'ChristopheDemarey 11/21/2013 17:49'! checkPackages: project | packages proj | packages := project packages. proj := packages at: 1. self assert: proj notNil. self assert: proj name equals: 'VersionnerTestXML-Parser'. self assert: proj dependencies equals: (OrderedCollection newFrom: #('BitmapCharacterSet' 'XMLWriter')). proj := packages at: 2. self assert: proj notNil. self assert: proj name equals: 'VersionnerTestXML-Tests-Parser'. self assert: proj dependencies equals: (OrderedCollection newFrom: #('VersionnerTestXML-Parser')). ! ! !MCModel2MTModelVisitorTest methodsFor: 'private' stamp: 'ChristopheDemarey 6/5/2013 13:26'! checkRequiredProjects: project | requiredProjects proj | requiredProjects := project requiredProjects. proj := requiredProjects at: 1. self assert: proj notNil. self assert: proj displayName equals: 'XMLWriter'. self assert: proj name equals: 'VersionnerTestXMLWriter'. self assert: proj version name equals: 'stable'. proj := requiredProjects at: 2. self assert: proj notNil. self assert: proj displayName equals: 'BitmapCharacterSet'. self assert: proj name equals: 'VersionnerTestBitmapCharacterSet'. self assert: proj version name equals: 'stable'. ! ! !MCModel2MTModelVisitorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 6/5/2013 12:41'! setUp super setUp. classFactory := ClassFactoryForTestCase new.! ! !MCModel2MTModelVisitorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 6/5/2013 12:40'! tearDown super tearDown. classFactory cleanUp.! ! !MCModel2MTModelVisitorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 11/21/2013 16:34'! testVisitXMLParserConfigurationWithVersion101 "test the visitor with the 1.38 version of the Versionner configuration" | visitor config project version | visitor := MCModel2MTModelVisitor new. classFactory duplicateClass: ConfigurationOfVersionnerTestXMLParserTemplate withNewName: 'ConfigurationOfVersionnerTestXMLParser'. config := (Smalltalk globals at: #ConfigurationOfVersionnerTestXMLParser). version := config project version: '1.1'. project := visitor visitConfiguration: config withVersion: version. self assert: project class equals: MTProject. self assert: project name equals: 'VersionnerTestXMLParser'. self assert: project version name equals: '1.1'. self assert: project repository equals: 'http://www.smalltalkhub.com/mc/PharoExtras/XMLParser/main'. self checkGroups: project. self checkRequiredProjects: project. self checkPackages: project.! ! !UIManager methodsFor: '*Versionner-Core-Model' stamp: 'ChristopheDemarey 10/19/2012 11:25'! multilineRequest: request initialAnswer: initial ^ self multiLineRequest: request initialAnswer: initial answerHeight: 200! ! !VersionListModel commentStamp: '' prior: 81554690! A VersionListModel is a lsit model used to display package versions. It is needed to be able to override the okToChange method to be able to ask the user before he loose changes made on the selected version. ! !VersionListModel methodsFor: 'checking' stamp: 'ChristopheDemarey 12/12/2013 16:36'! askConfirmationIfChanges ^ self confirm: 'There are changes made to this version. You will loose changes. Ok to continue?'! ! !VersionListModel methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/12/2013 17:24'! changedBlock: anObject changedBlock := anObject! ! !VersionListModel methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/12/2013 16:43'! initialize super initialize. okToChange := true! ! !VersionListModel methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/12/2013 17:29'! okToChange " okToChange ifTrue: [ ^ true ]." changedBlock value ifFalse: [ ^true ]. okToChange := self askConfirmationIfChanges. ^ okToChange! ! !VersionListModel methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/12/2013 16:36'! okToChange: aBoolean okToChange := aBoolean! ! !VSGroupNode commentStamp: '' prior: 81554952! Abstract class used to display groups in a tree.! !VSGroupLeafNode commentStamp: '' prior: 81555058! Abstract class used to display a group with its specific icons and no child in a tree.! !VSGroupLeafNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:27'! children ^ [ #() ] ! ! !VSGroupNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:42'! childNodeClassFor: anItem "Use a specific wrapper node to display different icons." ^ (self content project dependencyNamed: anItem) treeNodeClass! ! !VSGroupNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:27'! children ^ [ self content dependencies ]! ! !VSGroupNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/20/2013 16:22'! icon ^ Smalltalk ui icons iconNamed: #groupIcon! ! !VSPackageNode commentStamp: '' prior: 81555200! Class used to display packages in a tree.! !VSPackageLeafNode commentStamp: '' prior: 81555301! Abstract class used to display a package with its specific icons and no child in a tree.! !VSPackageLeafNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:28'! children ^ [ #() ] ! ! !VSPackageNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:42'! childNodeClassFor: anItem ^ VSRequirementsNode! ! !VSPackageNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:28'! children ^ [ self content dependencies collect: [ :each | 'requires: ' , each] ]! ! !VSPackageNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/20/2013 16:16'! icon ^ Smalltalk ui icons iconNamed: #packageColoredIcon! ! !VSPackageNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/27/2013 16:31'! textMorph ^ self theme newTextIn: World text: self item asString! ! !VSProjectNode commentStamp: '' prior: 81555445! Class used to display projects with specific icons and no child in a tree.! !VSProjectLeafNode commentStamp: '' prior: 81555579! Abstract class used to display a project with its specific icons and no child in a tree.! !VSProjectLeafNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:28'! children ^ [ #() ] ! ! !VSProjectNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/20/2013 14:27'! children ^ [ #() ] "item dependencies collect: [ :each | '--> loads: ' , each]"! ! !VSProjectNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/21/2013 12:12'! icon "^ Smalltalk ui icons iconNamed: #projectIcon" ^ VersionnerSpecBrowser configurationIcon! ! !VSRequirementsNode commentStamp: '' prior: 81555728! A VSRequirementsNode is used to display dependencies requirements in a tree.! !VSRequirementsNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/20/2013 22:52'! icon ^ Smalltalk ui icons iconNamed: #forwardIcon! ! !SearchFacade class methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/24/2013 08:51'! mcPackageSearch ^ self mcPackageSearchRejectAll: [ :aPackage | false ] withInitialFilter: nil! ! !SearchFacade class methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/17/2013 15:07'! mcPackageSearchRejectAll: aRejectBlock ^ self mcPackageSearchRejectAll: aRejectBlock withInitialFilter: nil! ! !SearchFacade class methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/17/2013 15:07'! mcPackageSearchRejectAll: aRejectBlock withInitialFilter: filter | workingCopies | workingCopies := MCWorkingCopy allManagers asSortedCollection: [ :a :b | a name <= b name]. workingCopies := workingCopies reject: aRejectBlock. ^ ListDialogWindow new getList: [ :regex | workingCopies select: [ :workingCopy | regex search: workingCopy name] ]; displayBlock: [ :workingCopy | workingCopy package name ]; title: 'Monticello packages'; initialFilter: (filter ifNil: [ '' ] ifNotNil: [ filter]); yourself. ! ! !SearchFacade class methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/24/2013 23:24'! projectWithConfigurationSearch "Get a search widget with filled with projects having a ConfigurationOf in the image." ^ self projectWithConfigurationSearchRejectAll: [ :item | false ]! ! !SearchFacade class methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 7/24/2013 23:23'! projectWithConfigurationSearchRejectAll: aRejectBlock "Get a search widget with filled with projects having a ConfigurationOf in the image." | projects | projects := (MBConfigurationRoot current configurations) reject: aRejectBlock. ^ ListDialogWindow new getList: [ :regex | projects select: [ :project | regex search: project name configurationBaseName] ]; displayBlock: [:e | e name configurationBaseName]; browseBlock: [:answer | Smalltalk tools browser openOnPackage: answer ]; title: 'Projects with a configuration'; yourself. ! ! !MCFileBasedRepository methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 1/8/2014 14:42'! location ^ self description! ! !ConfigurationOfVersionnerTestBitmapCharacterSet commentStamp: '' prior: 81555894! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfVersionnerTestBitmapCharacterSet-StephaneDucasse.2. ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'private' stamp: 'ChristopheDemarey 3/27/2013 16:55'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'private' stamp: 'ChristopheDemarey 3/27/2013 16:55'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 3/27/2013 16:55'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 3/27/2013 16:55'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'loading' stamp: 'ChristopheDemarey 3/27/2013 16:55'! load "self load" ^self project latestVersion load! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'loading' stamp: 'ChristopheDemarey 3/27/2013 16:55'! loadDefault "self loadDefault" ^ self loadMostRecentCoreWithTests! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'loading' stamp: 'ChristopheDemarey 3/27/2013 16:55'! loadMostRecentCoreWithTests ^self project lastVersion load: #('Core' 'Tests')! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 3/27/2013 16:55'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'accessing' stamp: 'ChristopheDemarey 3/27/2013 16:55'! project ^self new project! ! !ConfigurationOfVersionnerTestBitmapCharacterSet class methodsFor: 'unloading Metacello' stamp: 'ChristopheDemarey 3/27/2013 16:55'! unloadMetacello Smalltalk at: #ConfigurationOfMetacello ifPresent: [:cls | cls unloadMetacello ]! ! !ConfigurationOfVersionnerTestBitmapCharacterSet methodsFor: 'baselines' stamp: 'ChristopheDemarey 6/7/2013 14:19'! baseline100: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/PharoExtras/BitmapCharacterSet/main'. spec description: 'Imported from SqueakSource'. spec package: 'Collections-BitmapCharacterSet'. spec package: 'Collections-Tests-BitmapCharacterSet' with: [spec requires: 'Collections-BitmapCharacterSet']. spec group: 'default' with: #('Core'); group: 'Core' with: #('Collections-BitmapCharacterSet'); group: 'Tests' with: #('Collections-Tests-BitmapCharacterSet'). ].! ! !ConfigurationOfVersionnerTestBitmapCharacterSet methodsFor: 'symbolic versions' stamp: 'ChristopheDemarey 5/24/2013 10:28'! development: spec spec for: #'common' version: '1.0' ! ! !ConfigurationOfVersionnerTestBitmapCharacterSet methodsFor: 'accessing' stamp: 'ChristopheDemarey 5/24/2013 10:29'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfVersionnerTestBitmapCharacterSet methodsFor: 'symbolic versions' stamp: 'ChristopheDemarey 5/24/2013 10:29'! stable: spec spec for: #'common' version: '1.0'. ! ! !ConfigurationOfVersionnerTestBitmapCharacterSet methodsFor: 'versions' stamp: 'ChristopheDemarey 6/7/2013 14:39'! version100: spec spec for: #common do: [ spec blessing: #release. spec description: 'Latest versions from Squeaksource'. spec package: 'Collections-BitmapCharacterSet' with: ' Collections-BitmapCharacterSet-JAA.5'. spec package: 'Collections-Tests-BitmapCharacterSet' with: 'Collections-Tests-BitmapCharacterSet-JAA.5' ] ! ! !ConfigurationOfVersionnerTestXMLParserTemplate commentStamp: '' prior: 81556138! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfXMLParser-StephaneDucasse.11. ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'private' stamp: 'ChristopheDemarey 5/24/2013 10:31'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'private' stamp: 'ChristopheDemarey 5/24/2013 10:31'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'testing' stamp: 'ChristopheDemarey 5/24/2013 10:31'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 5/24/2013 10:31'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'loading' stamp: 'ChristopheDemarey 5/24/2013 10:31'! load "self load" ^self project latestVersion load! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'loading' stamp: 'ChristopheDemarey 5/24/2013 10:31'! loadDefault "self loadDefault" ^ self loadMostRecentCoreWithTests! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'loading' stamp: 'ChristopheDemarey 5/24/2013 10:31'! loadMostRecentCoreWithTests ^self project lastVersion load: #('Core' 'Tests')! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 5/24/2013 10:32'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'accessing' stamp: 'ChristopheDemarey 5/24/2013 10:32'! project ^self new project! ! !ConfigurationOfVersionnerTestXMLParserTemplate class methodsFor: 'unloading Metacello' stamp: 'ChristopheDemarey 5/24/2013 10:32'! unloadMetacello Smalltalk at: #ConfigurationOfMetacello ifPresent: [:cls | cls unloadMetacello ]! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'baselines' stamp: 'ChristopheDemarey 6/7/2013 13:57'! baseline10: spec spec for: #common do: [ spec blessing: #baseline; description: 'Copy of ConfigurationOfXMLParser used with Versionner tests.'; author: 'ChristopheDemarey'; timestamp: '27/03/2013'; repository: 'http://www.smalltalkhub.com/mc/PharoExtras/XMLParser/main'. spec project: 'XMLWriter' with: [ spec className: 'ConfigurationOfVersionnerTestXMLWriter'; versionString: #stable; file: 'Versionner-Tests-Resources'; repository: 'http://www.smalltalkhub.com/mc/demarey/Versionner/main'.]. spec project: 'BitmapCharacterSet' with: [ spec className: 'ConfigurationOfVersionnerTestBitmapCharacterSet'; versionString: #stable; file: 'Versionner-Tests-Resources'; repository: 'http://www.smalltalkhub.com/mc/demarey/Versionner/main'.]. spec package: 'VersionnerTestXML-Parser' with: [spec requires: #('BitmapCharacterSet' 'XMLWriter')]. spec package: 'VersionnerTestXML-Tests-Parser' with: [ spec requires: 'VersionnerTestXML-Parser' ]. spec group: 'default' with: #('Core' 'Tests'); "default by default is equivalent to loading 'ALL' the packages still we added explicitly Tests to be loaded" group: 'Core' with: #('VersionnerTestXML-Parser'); group: 'Tests' with: #('VersionnerTestXML-Tests-Parser') ]. ! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'symbolic versions' stamp: 'ChristopheDemarey 3/27/2013 16:28'! development: spec spec for: #'common' version: '1.1'. ! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'accessing' stamp: 'ChristopheDemarey 3/27/2013 16:28'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'symbolic versions' stamp: 'ChristopheDemarey 3/27/2013 16:28'! stable: spec spec for: #'common' version: '1.1'. ! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'versions' stamp: 'ChristopheDemarey 6/6/2013 12:58'! version100: spec spec for: #common do: [ spec blessing: #release. spec package: 'VersionnerTestXML-Parser' with: 'XML-Parser-NorbertHartl.141'; package: 'VersionnerTestXML-Tests-Parser' with: 'XML-Tests-Parser-JAA.14' ]. ! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'versions' stamp: 'ChristopheDemarey 6/7/2013 14:03'! version101: spec spec for: #common do: [ spec blessing: #release. spec package: 'VersionnerTestXML-Parser' with: 'VersionnerTestXML-Parser-StephaneDucasse.142'; package: 'VersionnerTestXML-Tests-Parser' with: 'VersionnerTestXML-Tests-Parser-StephaneDucasse.15'. ]. ! ! !ConfigurationOfVersionnerTestXMLWriter commentStamp: '' prior: 81556351! Simple Configuration class used to test Versionner behavior. This class is a rename of ConfigurationOfXMLWriter-StephaneDucasse.29. ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'private' stamp: 'ChristopheDemarey 5/24/2013 10:34'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'private' stamp: 'ChristopheDemarey 5/24/2013 10:34'! ensureMetacello "Bootstrap Gofer (if necessary), load latest mcz file for ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ | error | "list of repositories to try, in case primary repository is not accessible" (Array with: 'http://www.squeaksource.com/MetacelloRepository' with: 'http://seaside.gemstone.com/ss/metacello') do: [:repositoryUrl | ([ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: repositoryUrl ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: repositoryUrl; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]] on: Error do: [ :ex | error := ex. Transcript cr; show: 'failed ensureMetacello: '; show: ex description printString; show: '...retrying'. "try again" ex return: nil ]) ~~ nil ifTrue: [ "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load. ^self ]]. "shouldn't get here unless the load failed ... throw an error" self error: 'retry with alternate repository failed: ', error description printString ]! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'testing' stamp: 'ChristopheDemarey 5/24/2013 10:34'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 5/24/2013 10:34'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'loading' stamp: 'ChristopheDemarey 5/24/2013 10:34'! load "self load" ^self project latestVersion load! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'metacello tool support' stamp: 'ChristopheDemarey 5/24/2013 10:34'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'accessing' stamp: 'ChristopheDemarey 5/24/2013 10:34'! project ^self new project! ! !ConfigurationOfVersionnerTestXMLWriter class methodsFor: 'unloading Metacello' stamp: 'ChristopheDemarey 5/24/2013 10:35'! unloadMetacello Smalltalk at: #ConfigurationOfMetacello ifPresent: [:cls | cls unloadMetacello ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline100: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.squeaksource.com/XMLWriter'. spec package: 'Collections-CharacterMap' with: [ spec repository: 'http://www.squeaksource.com/CharacterMap']; package: 'XML-Writer' with: [spec requires: 'Collections-CharacterMap']. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer'); group: 'Tests' with: #()].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline101: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.squeaksource.com/XMLWriter'. spec package: 'Collections-OrderPreservingDictionary' with: [ spec repository: 'http://www.squeaksource.com/OrderPreservingDict']; package: 'Collections-CharacterMap' with: [ spec repository: 'http://www.squeaksource.com/CharacterMap']; package: 'XML-Writer' with: [ spec requires: #('Collections-OrderPreservingDictionary' 'Collections-CharacterMap')]. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer')].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline104: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.squeaksource.com/XMLWriter'. spec package: 'Collections-OrderPreservingDictionary' with: [ spec repository: 'http://www.squeaksource.com/OrderPreservingDict']; package: 'XML-Writer' with: [ spec requires: #('Collections-OrderPreservingDictionary')]. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer')]. spec for: #gemstone do: [ spec package: 'Collections-CharacterSet'. spec package: 'XML-Writer' with:[spec requires: #('Collections-CharacterSet')]]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline105: spec spec for: #common do: [ spec blessing: #baseline; repository: 'http://www.squeaksource.com/XMLWriter'. spec package: 'Collections-OrderPreservingDictionary' with: [ spec repository: 'http://www.squeaksource.com/OrderPreservingDict' ]; package: 'Collections-Support'; package: 'XML-Writer' with: [ spec requires: #('Collections-Support' 'Collections-OrderPreservingDictionary') ]. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer'); group: 'Tests' with: #() ]. spec for: #squeakCommon do: [ spec package: 'Collections-Support' with: [ spec repository: 'http://www.squeaksource.com/Pharo' ] ]. spec for: #gemstone do: [ spec package: 'Collections-Support' with: [ spec file: 'Collections-Support.g'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]; package: 'Collections-Tests-Support' with: [ spec file: 'Collections-Tests-Support.g'; requires: 'Collections-Support'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]. spec group: 'Tests' with: #('Collections-Tests-Support') ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline200: spec spec for: #common do: [ spec blessing: #baseline; description: 'Migrated to SmalltalkHub and taking into account new configurations of subcomponents'; repository: 'http://smalltalkhub.com/mc/Pharo/XMLWriter/main'. "Does not work without a className: specification spec project: 'OrderPreservingDictionary' with: [ spec versionString: #stable; loads: #('Core'); repository: 'http://smalltalkhub.com/mc/Pharo/OrderPreservingDictionary/main']. spec package: 'XML-Writer' with: [ spec requires: #('OrderPreservingDictionary') ]." spec project: 'OrderPreservingDictionary' with: [ spec className: 'ConfigurationOfOrderPreservingDictionary'; versionString: #stable; loads: #('Core'); repository: 'http://smalltalkhub.com/mc/Pharo/OrderPreservingDictionary/main']. spec package: 'XML-Writer' with: [spec requires: 'OrderPreservingDictionary']. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer'); group: 'Tests' with: #() ]. "I removed it because it loads an old version of the pckage and this is a nonsense" spec for: #squeakCommon do: [ spec package: 'Collections-Support' with: [ spec repository: 'http://ss3.gemstone.com/ss/Pharo20' ] ]. spec for: #gemstone do: [ spec package: 'Collections-Support' with: [ spec file: 'Collections-Support.g'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]; package: 'Collections-Tests-Support' with: [ spec file: 'Collections-Tests-Support.g'; requires: 'Collections-Support'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]. spec group: 'Tests' with: #('Collections-Tests-Support') ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'baselines' stamp: 'ChristopheDemarey 3/27/2013 16:51'! baseline210: spec spec for: #common do: [ spec blessing: #baseline; description: 'Adding a test package'; repository: 'http://smalltalkhub.com/mc/Pharo/XMLWriter/main'. spec project: 'OrderPreservingDictionary' with: [ spec className: 'ConfigurationOfOrderPreservingDictionary'; versionString: #stable; loads: #('Core'); repository: 'http://smalltalkhub.com/mc/Pharo/OrderPreservingDictionary/main']. spec package: 'XML-Writer-Core' with: [spec requires: 'OrderPreservingDictionary']. spec package: 'XML-Writer-Tests' with: [spec requires: 'XML-Writer-Core']. spec group: 'default' with: #('Core'); group: 'Core' with: #('XML-Writer-Core'); group: 'Tests' with: #('XML-Writer-Tests')]. "Can only work for Pharo1.4 and 2.0. To be changed when pharo will be managed on SmalltalkHub" spec for: #squeakCommon do: [ spec package: 'Collections-Support' with: [ spec repository: 'http://ss3.gemstone.com/ss/Pharo20' ] ]. "I did not touch this part because Ido not know it. On Pharo XMLWriter has its own repository" spec for: #gemstone do: [ spec package: 'Collections-Support' with: [ spec file: 'Collections-Support.g'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]; package: 'Collections-Tests-Support' with: [ spec file: 'Collections-Tests-Support.g'; requires: 'Collections-Support'; repository: 'http://seaside.gemstone.com/ss/XMLSupport' ]. spec group: 'Tests' with: #('Collections-Tests-Support') ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'symbolic' stamp: 'ChristopheDemarey 3/27/2013 16:51'! development: spec spec for: #'pharo' version: '2.1.0'. ! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'accessing' stamp: 'ChristopheDemarey 3/27/2013 16:51'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'symbolic' stamp: 'ChristopheDemarey 3/27/2013 16:51'! stable: spec spec for: #'pharo' version: '2.1.0'. ! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version100: spec spec for: #common do: [ spec blessing: #release. spec package: 'Collections-CharacterMap' with: 'Collections-CharacterMap-JAAyer.1'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.1'].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version101: spec spec for: #common do: [ spec blessing: #release. spec package: 'Collections-OrderPreservingDictionary' with: 'Collections-OrderPreservingDictionary-JAAyer.1'; package: 'Collections-CharacterMap' with: 'Collections-CharacterMap-JAAyer.1'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.2'].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version102: spec spec for: #common do: [ spec blessing: #release. spec package: 'Collections-OrderPreservingDictionary' with: 'Collections-OrderPreservingDictionary-JAAyer.1'; package: 'Collections-CharacterMap' with: 'Collections-CharacterMap-JAAyer.1'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.3'].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version103: spec spec for: #common do: [ spec blessing: #release. spec package: 'Collections-OrderPreservingDictionary' with: 'Collections-OrderPreservingDictionary-JAAyer.5'; package: 'Collections-CharacterMap' with: 'Collections-CharacterMap-JAAyer.1'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.4'].! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version104: spec spec for: #common do: [ spec blessing: #release. spec package: 'Collections-OrderPreservingDictionary' with: 'Collections-OrderPreservingDictionary-JAAyer.6'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.5']. spec for: #gemstone do: [ spec package: 'Collections-CharacterSet' with: 'Collections-CharacterSet-JohanBrichau.1']! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version105: spec spec for: #common do: [ spec blessing: #release; package: 'Collections-OrderPreservingDictionary' with: 'Collections-OrderPreservingDictionary-JAAyer.6'; package: 'XML-Writer' with: 'XML-Writer-JAAyer.5' ]; for: #squeakCommon do: [ spec package: 'Collections-Support' with: 'Collections-Support-StephaneDucasse.35' ]; for: #gemstone do: [ spec package: 'Collections-Support' with: 'Collections-Support.g-OttoBehrens.45'; package: 'Collections-Tests-Support' with: 'Collections-Tests-Support.g-OttoBehrens.3' ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version200: spec spec for: #common do: [ spec blessing: #release; package: 'XML-Writer' with: 'XML-Writer-JAAyer.5' ]; " I do not understand the following line because it means that we would load an older version than the one currently in Pharo. Clearly the best way to introduce bugs and losing hours trying to understand why. for: #squeakCommon do: [ spec package: 'Collections-Support' with: 'Collections-Support-StephaneDucasse.35' ];" for: #gemstone do: [ spec package: 'Collections-Support' with: 'Collections-Support.g-OttoBehrens.45'; package: 'Collections-Tests-Support' with: 'Collections-Tests-Support.g-OttoBehrens.3' ]! ! !ConfigurationOfVersionnerTestXMLWriter methodsFor: 'versions' stamp: 'ChristopheDemarey 3/27/2013 16:51'! version210: spec spec for: #common do: [ spec blessing: #release; package: 'XML-Writer-Core' with: 'XML-Writer-Core-StephaneDucasse.1' ; package: 'XML-Writer-Tests' with: 'XML-Writer-Tests-StephaneDucasse.1' ]; " I do not understand the following line because it means that we would load an older version than the one currently in Pharo. Clearly the best way to introduce bugs and losing hours trying to understand why. for: #squeakCommon do: [ spec package: 'Collections-Support' with: 'Collections-Support-StephaneDucasse.35' ];" for: #gemstone do: [ spec package: 'Collections-Support' with: 'Collections-Support.g-OttoBehrens.45'; package: 'Collections-Tests-Support' with: 'Collections-Tests-Support.g-OttoBehrens.3' ]! ! !MBCommand commentStamp: '' prior: 81556535! MBCommand is a command design pattern for capturing actions.! !MBAbstractPackageCommand commentStamp: '' prior: 81556662! For grouping package commands! !MBBrowsePackageCommand methodsFor: 'documentation' stamp: 'dkh 3/2/2011 14:05'! documentation ^ 'Open a system browser on the selected project configuration or package.'! ! !MBBrowsePackageCommand methodsFor: 'execute' stamp: 'dkh 3/2/2011 14:07'! execute target classForBrowsing browse! ! !MBBrowsePackageCommand methodsFor: 'accessing' stamp: 'dkh 3/2/2011 14:05'! title ^ 'browse'! ! !MBLoadPackageCommand methodsFor: 'documentation' stamp: 'dkh 2/28/2011 11:53'! documentation ^ 'Perform a project load using the specified package or project as the load list.'! ! !MBLoadPackageCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:32'! execute | answer | answer := self uiManager confirm: 'Are you sure you want to load using ', target packageName. answer ifTrue: [ | version | version := target configurationInfo currentVersion. version load: version defaultPackageNamesToLoad, { target packageName } ]! ! !MBLoadPackageCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:15'! title ^ 'load ', target typeLabel! ! !MBPackageChangesCommand methodsFor: 'private' stamp: 'ChristopheDemarey 10/18/2012 11:32'! changesForSymbolicVersion: symbolicVersion workingCopy: wc | repository info ancestorVersion ref gofer resolved version packageSpec packageName ancestorVersionInfo | (repository := self selectRepositoryFromWorkingCopy: wc) ifNil: [ ^ self ]. info := target configurationInfo. version := info project version: symbolicVersion. packageSpec := version packageNamed: wc packageName ifAbsent: [ ^ self uiManager inform: 'No package to compare ', target name, ' to in version' , symbolicVersion printString ]. packageName := packageSpec file. ref := ((gofer := Gofer new) repository: repository; version: packageName) references first. (resolved := ref resolveAllWith: gofer) isEmpty ifTrue: [ ref := ((gofer := Gofer new) repository: repository; package: packageName) references first. resolved := ref resolveAllWith: gofer ]. ancestorVersionInfo := repository versionInfoFromVersionNamed: resolved last name. ancestorVersion := repository versionWithInfo: ancestorVersionInfo. self findChangesBetween: wc package snapshot toLabel: wc ancestry ancestorString , ' (' , info currentVersion versionString , ')' and: ancestorVersion snapshot fromLabel: ancestorVersion info name , ' (' , symbolicVersion printString , ' )'! ! !MBPackageChangesCommand methodsFor: 'documentation' stamp: 'dkh 3/20/2011 14:01'! documentation ^ 'View changes to the package ancestor in the selected repository or the corresponding package version in the selected symbolic version.'! ! !MBPackageChangesCommand methodsFor: 'execute' stamp: 'dkh 3/20/2011 12:50'! execute "View the changes made in the working copy." | wc repositoryOrSymbolicVersion | wc := target spec workingCopy ifNil: [ ^ self ]. wc ancestors isEmpty ifTrue: [ ^ self ]. (repositoryOrSymbolicVersion := self selectRepositoryOrSymbolicVersion: wc) ifNil: [ ^ self ]. repositoryOrSymbolicVersion isSymbol ifTrue: [ self changesForSymbolicVersion: repositoryOrSymbolicVersion workingCopy: wc] ifFalse: [ self findChangesFor: wc relativeToRepository: repositoryOrSymbolicVersion ]! ! !MBPackageChangesCommand methodsFor: 'utility' stamp: 'ChristopheDemarey 10/18/2012 11:32'! selectRepositoryOrSymbolicVersion: workingCopy | project symbolicVersions repos list values | project := target spec project. symbolicVersions := project symbolicVersionSymbols select: [ :each | project hasVersion: each ]. repos := workingCopy repositoryGroup repositories. list := (symbolicVersions collect: [:each | each printString]), (repos collect: [ :r | r description ]). values := symbolicVersions, repos. ^self uiManager chooseFrom: list values: values lines: {symbolicVersions size} title: 'Please choose which symbolic version or repository'. ! ! !MBPackageChangesCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:41'! title ^ 'changes'! ! !MBPackageHistoryCommand methodsFor: 'documentation' stamp: 'dkh 3/20/2011 14:04'! documentation ^ 'view package history'! ! !MBPackageHistoryCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 17:39'! execute self browseVersionHistory! ! !MBPackageHistoryCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 14:03'! title ^ 'history'! ! !MBRevertPackageCommand methodsFor: 'documentation' stamp: 'DaleHenrichs 03/07/2011 15:43'! documentation ^ 'Revert the changes that have been made to this package.'! ! !MBRevertPackageCommand methodsFor: 'execute' stamp: 'DaleHenrichs 03/07/2011 15:46'! execute self pickAncestorVersionInfo ifNotNilDo: [:info | (target workingCopy repositoryGroup versionWithInfo: info ifNone: [^self inform: 'No repository found for ', info name] ) load]. ! ! !MBRevertPackageCommand methodsFor: 'private' stamp: 'ChristopheDemarey 10/18/2012 11:03'! pickAncestorVersionInfo | ancestors | ancestors := target workingCopy ancestry breadthFirstAncestors. ^self uiManager chooseFrom: (ancestors collect: [:ea | ea name]) values: ancestors title: 'Package:' ! ! !MBRevertPackageCommand methodsFor: 'accessing' stamp: 'DaleHenrichs 03/07/2011 15:43'! title ^ 'revert'! ! !MBSavePackageCommand methodsFor: 'documentation' stamp: 'DaleHenrichs 03/07/2011 15:33'! documentation ^ 'Save a new version of the mcz for the given repository in its repository.'! ! !MBSavePackageCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 8/23/2013 17:04'! execute | message repo gofer | message := self uiManager multilineRequest: 'Enter commit message' initialAnswer: ''. message == nil ifTrue: [ ^ self ]. repo := self checkUserInRepositoryOfPackage: target spec name. gofer := Gofer new. gofer disablePackageCache. gofer repository: repo. gofer package: target spec name. gofer commit: message! ! !MBSavePackageCommand methodsFor: 'accessing' stamp: 'DaleHenrichs 03/07/2011 15:33'! title ^ 'save'! ! !MBCommand class methodsFor: 'testing' stamp: 'dkh 3/5/2011 17:06'! isMorphicCommand ^true! ! !MBCommand class methodsFor: 'testing' stamp: 'dkh 3/5/2011 17:06'! isOBCommand ^true! ! !MBCommand class methodsFor: 'util' stamp: 'ChristopheDemarey 10/18/2012 11:20'! newCommand " MBCommand newCommand " | command baseName newCommandName receiverClassIndex clss title documentation | baseName := self uiManager request: 'Enter the base name (''MB'' and ''Command'' will be automatically added'. baseName ifNil: [ ^ self ]. clss := MBCommand subclasses. receiverClassIndex := self uiManager chooseFrom: (clss collect: #name). receiverClassIndex isZero ifTrue: [ ^ self ]. newCommandName := 'MB', baseName, 'Command'. command := (clss at: receiverClassIndex) subclass: newCommandName asSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self category. documentation := self uiManager request: 'Enter the documentation'. documentation ifNil: [ ^ self ]. command compile: 'documentation ^ ''', documentation, '''' classified: 'documentation'. command compile: 'execute self subclassResponsibility ' classified: 'execute'. title := self uiManager request: 'Enter the command title'. title ifNil: [ ^ self ]. command compile: 'title ^ ''', title, '''' classified: 'accessing'. clss := MBInfo allSubclasses. receiverClassIndex := self uiManager chooseFrom: (clss collect: #name). receiverClassIndex isZero ifTrue: [ ^ self ]. (clss at: receiverClassIndex) compile: 'cmd', baseName, ' ^ ', newCommandName classified: 'commands'! ! !MBCommand class methodsFor: 'instance creation' stamp: 'dkh 3/6/2011 16:07'! target: target for: requestor ^ self new target: target; requestor: requestor; yourself! ! !MBCommand methodsFor: 'versions' stamp: 'ChristopheDemarey 10/18/2012 11:32'! askForVersionNumber "Return a new version number as a string" | latestVersion newVersion versions | newVersion := (versions := target configurationInfo versions) isEmpty ifTrue: [ '1.0' ] ifFalse: [ latestVersion := versions first version. latestVersion versionNumber copy incrementMinorVersionNumber printString ]. ^ self uiManager request: 'enter new version number' initialAnswer: newVersion! ! !MBCommand methodsFor: 'versions' stamp: 'ChristopheDemarey 10/18/2012 17:38'! browseVersionHistory "Used to browse version history of a Configuration package or a package" target workingCopy ancestors isEmpty ifTrue: [ ^ self ]. (MCVersionHistoryBrowser new ancestry: target workingCopy ancestors first) perform: #show! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 10/18/2012 11:32'! checkUserInRepository: repository "Try to find the http repository of packageName. If it does not find one, then add one and ask for the username and password" | answerUser | (repository isKindOf: MCHttpRepository ) ifFalse: [ ^self ]. repository user ifEmpty: [ answerUser := self uiManager confirm: 'No user defined. Do you want to add one? '. answerUser ifTrue: [ repository user: self username. repository password: self password ] ]! ! !MBCommand methodsFor: 'repositories' stamp: 'DaleHenrichs 03/07/2011 15:59'! checkUserInRepositoryOfPackage: packageName "Try to find the http repository of packageName. If it does not find one, then add one and ask for the username and password" | repo | (repo := self repositoryOfPackageNamed: packageName) ifNil: [ ^nil ]. self checkUserInRepository: repo. ^repo! ! !MBCommand methodsFor: 'utility' stamp: 'ChristopheDemarey 10/18/2012 11:01'! chooseRepositoryFromList: repos "Return the repository of the configuration. Create one (using UI) if necessary" repos size > 1 ifTrue: [ ^ self uiManager chooseFrom: (repos collect: [ :repo | repo description ]) values: repos title: 'Select repository' ]. ^ repos first! ! !MBCommand methodsFor: 'versions' stamp: 'ChristopheDemarey 11/6/2012 16:15'! compiledMethodForVersion: aMetacelloVersion | toolbox pragma | toolbox := MetacelloToolBox new project: aMetacelloVersion project. pragma := (toolbox constructor extractAllVersionPragmas at: aMetacelloVersion versionString ifAbsent: [ ^ nil ]) first. ^pragma method! ! !MBCommand methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 8/23/2013 18:44'! configurationClass ^ target! ! !MBCommand methodsFor: 'repositories' stamp: 'dkh 4/17/2011 13:11'! configurationReferencesFrom: aRepository | map | map := Dictionary new. aRepository goferReferences do: [ :ref | (ref packageName beginsWith: 'ConfigurationOf') ifTrue: [ | nameWithBranch | nameWithBranch := ref metacelloPackageNameWithBranch at: 2. (map at: nameWithBranch ifAbsent: [map at: nameWithBranch put: OrderedCollection new]) add: ref ]]. ^map! ! !MBCommand methodsFor: 'documentation' stamp: 'fds 2/26/2011 10:48'! documentation self subclassResponsibility! ! !MBCommand methodsFor: 'execute' stamp: 'fds 2/26/2011 19:45'! execute self subclassResponsibility ! ! !MBCommand methodsFor: 'changes' stamp: 'ChristopheDemarey 10/19/2012 11:06'! findChangesBetween: versionSnapshot toLabel: toLabel and: ancestorVersionSnapshot fromLabel: fromLabel "View changes between 2 versions." | patch | patch := versionSnapshot patchRelativeToBase: ancestorVersionSnapshot. patch isNil ifTrue: [^ self]. patch isEmpty ifTrue: [ self uiManager inform: 'No changes' ] ifFalse: [ self viewChanges: patch from: fromLabel to: toLabel title: 'Changes between ', fromLabel, ' and ', toLabel ]! ! !MBCommand methodsFor: 'changes' stamp: 'ChristopheDemarey 10/19/2012 11:13'! findChangesFor: workingCopy relativeToRepository: repository | patch fromDescription | repository isNil ifTrue: [ ^ self ]. patch := workingCopy changesRelativeToRepository: repository. patch isNil ifTrue: [ ^ self ]. patch isEmpty ifTrue: [ workingCopy modified: false. self uiManager inform: 'No changes' ] ifFalse: [ workingCopy modified: true. fromDescription := workingCopy packageName , ' (' , workingCopy ancestry ancestorString , ')'. self viewChanges: patch from: fromDescription to: ('Modified {1}' translated format: {(workingCopy description)}) title: ('Changes to {1}' translated format: {fromDescription}) ]! ! !MBCommand methodsFor: 'documentation' stamp: 'dkh 4/10/2011 19:14'! helpDocumentation ^self documentation! ! !MBCommand methodsFor: 'initialize-release' stamp: 'ChristopheDemarey 11/13/2013 13:22'! initialize super initialize. ! ! !MBCommand methodsFor: 'utility' stamp: 'dkh 3/4/2011 05:21'! on: anObject for: aRequestor ^ self class on: anObject for: aRequestor! ! !MBCommand methodsFor: 'ordering' stamp: 'fds 2/26/2011 10:46'! order ^ self title! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 10/18/2012 11:32'! password | password | password := target configurationRoot password. password ifNotNil: [ ^ password ]. password := self uiManager requestPassword: 'enter your Monticello password for '. target configurationRoot password: password. ^ password! ! !MBCommand methodsFor: 'repositories' stamp: 'dkh 3/5/2011 16:02'! pickRepository ^ self pickRepositoryFrom: self repositories. ! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 10/18/2012 15:42'! pickRepositoryFrom: repositories ^self pickRepositoryFrom: repositories title: 'Choose repository'! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 10/18/2012 15:17'! pickRepositoryFrom: repositories title: title | index | index := self uiManager chooseFrom: (repositories collect: [ :ea | ea description ]) title: title. ^ index = 0 ifFalse: [ repositories at: index ] ! ! !MBCommand methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 11/6/2012 15:28'! projectName ^ self configurationClass configurationBaseName! ! !MBCommand methodsFor: 'repositories' stamp: 'dkh 3/5/2011 15:57'! repositories ^MCRepositoryGroup default repositories! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 11/6/2012 15:28'! repositoryOfPackageNamed: packageName "Return the repository of the configuration. Create one (using UI) if necessary" | mcPackage workingCopy repositories repository repositoryIndex username password | mcPackage := MCPackage named: packageName. workingCopy := mcPackage workingCopy. repositories := workingCopy repositoryGroup repositories reject: [ :rep | rep == MCCacheRepository default ]. repositories ifEmpty: [ | projectName answer squeakSourceURL | projectName := self configurationClass configurationBaseName. squeakSourceURL := 'http://www.squeaksource.com/' , projectName. answer := self uiManager confirm: 'No repository associated with your project. Do you want to add ' , squeakSourceURL. answer ifFalse: [ self uiManager inform: 'Add a http repository with Monticello browser'. ^ nil ]. repository := MCHttpRepository location: squeakSourceURL user: '' password: ''. repository user isEmpty ifTrue: [ username := self username ]. repository password isEmpty ifTrue: [ password := self password ]. workingCopy repositoryGroup addRepository: (repository := MCHttpRepository location: squeakSourceURL user: username password: password) ]. repositories size > 1 ifTrue: [ repositoryIndex := self uiManager chooseFrom: (repositories collect: #printString). repositoryIndex = 0 ifTrue: [ ^ nil ]. repository := repositories at: repositoryIndex ]. repositories size = 1 ifTrue: [ repository := repositories first ]. ^ repository! ! !MBCommand methodsFor: 'accessing' stamp: 'dkh 3/6/2011 16:08'! requestor: aRequestor requestor := aRequestor ! ! !MBCommand methodsFor: 'utility' stamp: 'ChristopheDemarey 10/18/2012 11:02'! selectRepositoryFromWorkingCopy: workingCopy | repos repo | repos := workingCopy repositoryGroup repositories. repos size = 0 ifTrue: [ ^ self uiManager inform: 'No repositories associated with ' , target name printString ]. repo := repos size = 1 ifTrue: [ repos first ] ifFalse: [ self uiManager chooseFrom: (repos collect: [ :r | r description ]) values: repos title: 'Please choose which repository to use for diff' ]. ^ repo! ! !MBCommand methodsFor: 'accessing' stamp: 'fds 2/26/2011 20:01'! target ^ target! ! !MBCommand methodsFor: 'accessing' stamp: 'fds 2/26/2011 20:01'! target: anObject target := anObject! ! !MBCommand methodsFor: 'accessing' stamp: 'dkh 3/4/2011 06:16'! targetNode ^ targetNode! ! !MBCommand methodsFor: 'accessing' stamp: 'dkh 3/4/2011 06:16'! targetNode: anObject targetNode := anObject! ! !MBCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/18/2012 10:46'! title ^ 'Abstract Command'! ! !MBCommand methodsFor: 'utility' stamp: 'ChristopheDemarey 10/18/2012 10:57'! uiManager ^ UIManager default! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 10/18/2012 11:32'! username | username | username := target configurationRoot username. username ifNotNil: [ ^ username ]. username := self uiManager request: 'enter your Monticello username (login)'. target configurationRoot username: username. ^ username! ! !MBCommand methodsFor: 'changes' stamp: 'ChristopheDemarey 10/19/2012 11:05'! viewChanges: patch from: fromDescription to: toDescription title: title "Open a browser on the given patch." ^ ( PSMCPatchMorph forPatch: patch) fromDescription: fromDescription; toDescription: toDescription; newWindow; title: title; open ! ! !MBConfigurationChangesCommand methodsFor: 'documentation' stamp: 'dkh 3/20/2011 14:02'! documentation ^ 'View changes for selected configuration against version in selected repository.'! ! !MBConfigurationChangesCommand methodsFor: 'execute' stamp: 'dkh 3/20/2011 12:50'! execute "View the changes made in the working copy." | wc repo | wc := target workingCopy. (repo := self selectRepositoryFromWorkingCopy: wc) ifNil: [ ^self ]. self findChangesFor: wc relativeToRepository: repo! ! !MBConfigurationChangesCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:13'! title ^ 'changes'! ! !MBConfigurationInfoCommand methodsFor: 'ui' stamp: 'ChristopheDemarey 10/18/2012 11:43'! showExecuteWhile: aBlock ^Cursor execute showWhile: aBlock! ! !MBConfigurationPackageHistoryCommand methodsFor: 'documentation' stamp: 'dkh 3/20/2011 14:17'! documentation ^ 'view package history'! ! !MBConfigurationPackageHistoryCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 17:39'! execute self browseVersionHistory! ! !MBConfigurationPackageHistoryCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 14:16'! title ^ 'history'! ! !MBInspectConfigurationCommand methodsFor: 'documentation' stamp: 'fds 2/27/2011 10:47'! documentation ^ 'Open a Smalltalk inspector on the Configuration.'! ! !MBInspectConfigurationCommand methodsFor: 'execute' stamp: 'fds 2/27/2011 10:47'! execute target inspect! ! !MBInspectConfigurationCommand methodsFor: 'accessing' stamp: 'fds 2/27/2011 10:47'! title ^ 'inspect'! ! !MBLoadProjectFromArchiveCommand methodsFor: 'documentation' stamp: 'dkh 4/7/2011 19:54'! documentation ^ 'Load project from an archive.'! ! !MBLoadProjectFromArchiveCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 11/6/2012 15:29'! execute | archiveRepository configRef configurationInfo versionInfos versionInfo version configRefMap configNames configName | archiveRepository := self pickRepositoryFrom: self repositories title: 'Choose the archive repository'. archiveRepository ifNil: [ ^ self ]. configRefMap := self configurationReferencesFrom: archiveRepository. configRefMap isEmpty ifTrue: [ ^ self inform: 'No configurations found in the archive repository ' , archiveRepository description printString ]. configNames := configRefMap keys. configName := self uiManager chooseFrom: (configNames collect: [ :name | name configurationBaseName]) values: configNames title: 'Select the desired project'. configName ifNil: [ ^ self ]. configRef := (configRefMap at: configName) asSortedCollection asArray last. (Gofer new) repository: archiveRepository; version: configRef name; load. configurationInfo := (MBConfigurationInfo configurationClass: (Smalltalk globals at: configRef packageName asSymbol)) configurationRoot: MBConfigurationRoot new; trimVersionLists: false; currentVersion: #notLoaded; yourself. versionInfos := configurationInfo versions. versionInfo := self uiManager chooseFrom: (versionInfos collect: [ :vrsn | vrsn printString ]) values: versionInfos title: 'Select the desired version'. versionInfo ifNil: [ ^ self ]. version := versionInfo version. version repositoryOverrides: {archiveRepository}. version load: version defaultPackageNamesToLoad! ! !MBLoadProjectFromArchiveCommand methodsFor: 'ordering' stamp: 'dkh 4/7/2011 22:23'! order ^'01'! ! !MBLoadProjectFromArchiveCommand methodsFor: 'accessing' stamp: 'dkh 4/7/2011 19:55'! title ^ 'load archive version'! ! !MBSaveConfigurationCommand methodsFor: 'documentation' stamp: 'dkh 3/20/2011 16:14'! documentation ^ 'Save the configuration in its repository. Note that the dependents projects and defined packages are not saved. Use ''checkpoint dev'' command to save packages.'! ! !MBSaveConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:32'! execute | message | message := self uiManager multilineRequest: 'Enter commit message' initialAnswer: ''. message == nil ifTrue: [ ^ self ]. self executeWithMessage: message! ! !MBSaveConfigurationCommand methodsFor: 'execute' stamp: 'JuanPabloSandovalAlcocer 7/11/2012 13:35'! executeWithMessage: message "execute with message" self checkUserInRepositoryOfPackage: self configurationClass name asString. MetacelloToolBox saveConfigurationPackageFor: self configurationClass name asString description: message! ! !MBSaveConfigurationCommand methodsFor: 'accessing' stamp: 'AlexandreBergel 4/15/2011 09:26'! title ^ 'save configuration'! ! !MBSetUserCommand methodsFor: 'as yet unclassified' stamp: 'AlexandreBergel 3/28/2011 09:27'! documentation ^ 'Set the user and password used when saving and loading packages and configurations.'! ! !MBSetUserCommand methodsFor: 'as yet unclassified' stamp: 'dkh 4/5/2011 21:22'! execute target configurationRoot username: nil. target configurationRoot password: nil. self username. self password.! ! !MBSetUserCommand methodsFor: 'as yet unclassified' stamp: 'AlexandreBergel 3/28/2011 09:27'! title ^ 'set user and password'! ! !MBValidateAllConfigurationCommand methodsFor: 'documentation' stamp: 'dkh 2/28/2011 20:48'! documentation ^ 'Validate all configuration.'! ! !MBValidateAllConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:44'! execute self showExecuteWhile: [ target configurationRoot configurations doWithIndex: [ :info :index | info validateFull ] ]! ! !MBValidateAllConfigurationCommand methodsFor: 'accessing' stamp: 'dkh 3/2/2011 08:38'! title ^ 'validate all configurations'! ! !MBAddConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:00'! askForClassName ^ self uiManager request: 'Name of the new Metacello configuration (e.g., ConfigurationOfYourSoftware)' translated initialAnswer: 'ConfigurationOf'! ! !MBAddConfigurationCommand methodsFor: 'private' stamp: 'ChristopheDemarey 10/18/2012 11:01'! collectPackages: addedPackages andProjects: addedConfigurations pattern: patternString repository: repository | packagePattern package | packagePattern := self uiManager request: 'Please enter a pattern to filter package names that will be candidates to add to configuration' initialAnswer: patternString. packagePattern ifNil: [ ^ self ]. [ | packageNames workingCopies | packageNames := OrderedCollection new. workingCopies := OrderedCollection new. self workingCopies do: [ :pkg | ((packagePattern match: pkg package name) and: [ (addedPackages includes: pkg package name) not ]) ifTrue: [ packageNames add: pkg package name. workingCopies add: pkg ] ]. package := self uiManager chooseFrom: packageNames values: workingCopies title: 'Add dependent package (cancel to stop)'. package ifNotNil: [ (package package name beginsWith: 'ConfigurationOf') ifTrue: [ addedConfigurations add: package package name ] ifFalse: [ addedPackages add: package package name ]. package ancestry ancestors isEmpty ifTrue: [ (self uiManager confirm: 'The package: ' , package package name printString , ' has not been committed yet. Would you like to commit it into the ' , repository description printString, ' repository?') ifTrue: [ package repositoryGroup repositories size <= 1 ifTrue: [ package repositoryGroup addRepository: repository ]. package currentVersionInfo ] ] ]. package notNil ] whileTrue. (addedPackages isEmpty and: [ addedConfigurations isEmpty ]) ifTrue: [ self uiManager inform: 'No package or configuration added. No baseline has been created' ]! ! !MBAddConfigurationCommand methodsFor: 'documentation' stamp: 'dkh 3/4/2011 16:25'! documentation ^ 'Create a new configuration. Prompt for packages and dependent projects. Create a baseline version and an initial development version'! ! !MBAddConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 11/6/2012 15:26'! execute | configurationClassName versionNumber addedPackages addedConfigurations repository projectName mcPackage workingCopy configInfo| configurationClassName := self askForClassName. configurationClassName ifNil: [ ^ self ]. Smalltalk globals at: configurationClassName asSymbol ifPresent: [ :ex | ^ self error: 'Class ' , configurationClassName printString , ' already exist' ]. projectName := configurationClassName configurationBaseName. (repository := self repositoryFor: projectName) ifNil: [ ^ self ]. versionNumber := self uiManager request: 'Enter initial version number' initialAnswer: '1.0'. versionNumber ifNil: [ ^ self ]. addedPackages := OrderedCollection new. addedConfigurations := OrderedCollection new. self collectPackages: addedPackages andProjects: addedConfigurations pattern: projectName , '*' repository: repository. self executeAddBaselineForConfigurationNamed: configurationClassName repositoryDescription: repository description versionString: versionNumber packages: addedPackages configurations: addedConfigurations. mcPackage := MCPackage named: configurationClassName. workingCopy := mcPackage workingCopy. workingCopy repositoryGroup addRepository: repository. "after all save configuration" configInfo := (MBConfigurationInfo configurationClass: (Smalltalk globals at: (configurationClassName asSymbol))) configurationRoot: (MBConfigurationRoot current); yourself. "fixing" (MBSaveConfigurationCommand target: configInfo for: requestor) executeWithMessage: 'Creating ConfigurationOf', projectName. ! ! !MBAddConfigurationCommand methodsFor: 'execute' stamp: 'TesterBob 10/11/2012 17:09'! executeAddBaselineForConfigurationNamed: aConfigurationClassName repositoryDescription: repositoryDescription versionString: versionString packages: packageNames configurations: configurationNames | baselineVersionString | baselineVersionString := versionString , '-baseline'. MetacelloToolBox createBaseline: baselineVersionString for: aConfigurationClassName repository: repositoryDescription requiredProjects: configurationNames packages: packageNames repositories: { aConfigurationClassName, repositoryDescription } dependencies: {} groups: {('default' -> packageNames)}; createDevelopment: versionString for: aConfigurationClassName importFromBaseline: baselineVersionString description: ''! ! !MBAddConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/11/2012 17:21'! executeAddBaselineForConfigurationNamed: aConfigurationClassName repositoryDescription: repositoryDescription versionString: versionString packages: packageNames configurations: configurationNames repositories: repositories | baselineVersionString | baselineVersionString := versionString , '-baseline'. MetacelloToolBox createBaseline: baselineVersionString for: aConfigurationClassName repository: repositoryDescription requiredProjects: configurationNames packages: packageNames repositories: repositories dependencies: {} groups: {('default' -> packageNames)}; createDevelopment: versionString for: aConfigurationClassName importFromBaseline: baselineVersionString description: ''! ! !MBAddConfigurationCommand methodsFor: 'ordering' stamp: 'dkh 4/7/2011 22:20'! order ^'20'! ! !MBAddConfigurationCommand methodsFor: 'private' stamp: 'ChristopheDemarey 10/18/2012 11:32'! repositoryFor: projectName | repositories repository | repositories := self repositories select: [ :repo | (repo description beginsWith: 'http:') and: [ repo description endsWith: projectName ] ]. repository := nil. (repositories anySatisfy: [ :http | http description = ('http://www.squeaksource.com/' , projectName) ]) ifFalse: [ (self uiManager confirm: 'Would you like to use http://www.squeaksource.com/' , projectName , ', for your project?') ifTrue: [ ^ MCHttpRepository location: 'http://www.squeaksource.com/' , projectName user: '' password: '' ] ]. repository isNil ifTrue: [ repository := repositories isEmpty ifTrue: [ self chooseRepositoryFromList: self repositories ] ifFalse: [ self chooseRepositoryFromList: repositories , self repositories ] ]. ^ repository! ! !MBAddConfigurationCommand methodsFor: 'accessing' stamp: 'dkh 4/7/2011 21:52'! title ^ 'add configuration'! ! !MBAddConfigurationCommand methodsFor: 'private' stamp: 'dkh 3/4/2011 16:21'! workingCopies ^ MCWorkingCopy allManagers asSortedCollection: [ :a :b | a name <= b name]! ! !MBAddRepositoryCommand methodsFor: 'documentation' stamp: 'dkh 4/8/2011 11:44'! documentation ^ 'Add a Monticello repository to the default repository group.'! ! !MBAddRepositoryCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/19/2012 11:21'! execute self newRepository ifNotNil: [:repos | MCRepositoryGroup default addRepository: repos ]. ! ! !MBAddRepositoryCommand methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 10/19/2012 11:20'! newRepository "Create a new monticello repository" | types index | types := MCRepository allConcreteSubclasses asArray. index := self uiManager chooseFrom: (types collect: [:ea | ea description]) title: 'Repository type:'. ^ index = 0 ifFalse: [(types at: index) perform: #morphicConfigure]! ! !MBAddRepositoryCommand methodsFor: 'accessing' stamp: 'dkh 4/8/2011 11:45'! title ^ 'add repository'! ! !MBCheckpointDevCommand methodsFor: 'documentation' stamp: 'dkh 3/5/2011 13:45'! documentation ^ 'Save modified packages in their respective repository, update the configuration and save a version of the configuration in it''s repository.'! ! !MBCheckpointDevCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 11/6/2012 15:27'! execute | message configClass | configClass := self configurationClass. message := self uiManager multilineRequest: 'Enter commit message for ' , (configClass configurationBaseName) , ' ' , (target project version: #development) versionString initialAnswer: (target project version: #development) versionString, ' ():'. message == nil ifTrue: [ ^ self ]. self executeWithMessage: message ! ! !MBCheckpointDevCommand methodsFor: 'execute' stamp: 'AlexandreBergel 4/15/2011 10:22'! executeWithMessage: message | configClass | configClass := self configurationClass. self checkUserInRepositoryOfPackage: configClass name asString. MetacelloToolBox saveModifiedPackagesAndConfigurationIn: configClass description: message. ! ! !MBCheckpointDevCommand methodsFor: 'ordering' stamp: 'dkh 4/7/2011 22:20'! order ^'50'! ! !MBCheckpointDevCommand methodsFor: 'accessing' stamp: 'dkh 3/5/2011 13:44'! title ^ 'checkpoint dev'! ! !MBHelpCommand methodsFor: 'documentation' stamp: 'dkh 4/6/2011 15:10'! documentation ^ 'Open the help window'! ! !MBHelpCommand methodsFor: 'execute' stamp: 'dkh 4/10/2011 21:20'! execute Smalltalk at: #HelpBrowser ifPresent: [ :class | ^class openOn: (Smalltalk at: #VersionnerHelp) ]. self workspaceHelp! ! !MBHelpCommand methodsFor: 'ordering' stamp: 'dkh 4/7/2011 22:20'! order ^'80'! ! !MBHelpCommand methodsFor: 'accessing' stamp: 'dkh 4/6/2011 15:11'! title ^ 'help'! ! !MBHelpCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:32'! workspaceHelp | helpText | helpText := '"Versionner is a graphical tool to manage the dependencies and the version of your software. It is a complete replacement of the Monticello browser and acts as a facade for Metacello. You can use Versionner in a number of different scenarios. **1-Creating a new configuration** Press the button ''+Configuration'' and enter the name of your configuration. An initial baseline will also be produced. Your configuration and the new baseline will be listed on the left hand side of the browser. **2-Load a configuration** The first button of the browser is for loading a configuration from its corresponding SqueakSource project. For example, entering ''Pharo'' will try to load ''ConfigurationOfPharo'' from the ''Pharo'' squeaksource project. **3-Add a new baseline** A baseline defines the dependencies of your software, including the list of dependent configurations, and the list of packages that defines your applications. Selecting ''Add Baseline'' by right clicking on an existing baseline will first ask you about your squeaksource username and password will be requested. You then need to enter the version of your baseline (e.g., 0.1). The final step is to add the dependent packages. **4-Add a new version** A version defines the version of each packages used by your last baseline. At each change in your source code, you need to create a new version. Pressing ''save all and add development version'' by right clicking in a baseline or version may be the option you want to use. Versionner will try to guess what is the following number you need to use. Each unsaved dependent package is then saved. You need to enter a comment for the individual saved package. The configuration itself is then saved. At that stage, all your code is stored in squeaksource. **5-Reviewing recent changes** It may be useful to review your change, for example when you want to enter a comment when creating a version. At the bottom of the right hand side panel, you have the list of dependent packages. Modified packages will be designed with a ''*''. Right click on a package to see the difference with the last version stored in the squeaksource project. You can compare a package from the stable version of the software, or from the last commit made on squeaksource. **6-Load a baseline or a version** Simply right click on it and press ''load'' **7-Updating a configuration** In case of concurrent development, you may have to update your configuration. Right-click on the configuration, and press the corresponding menu entry. **8-Contact** Feedback are welcome. Send them to the pharo mailing list, or directly to the author alexandrebergel@me.com " '. self uiManager edit: helpText label: 'Versionner Help'! ! !MBLoadConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 15:43'! askForProjectName ^ self pickRepositoryFrom: self repositories title: 'Choose the repository where project is located'! ! !MBLoadConfigurationCommand methodsFor: 'documentation' stamp: 'dkh 3/5/2011 15:27'! documentation ^ 'Load configuration from a repository'! ! !MBLoadConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 11/6/2012 15:29'! execute | projectRepository configRef configurationInfo versionInfos versionInfo version configRefMap configNames configName | projectRepository := self askForProjectName. projectRepository ifNil: [ ^ self ]. configRefMap := self configurationReferencesFrom: projectRepository. configRefMap isEmpty ifTrue: [ ^ self inform: 'No configurations found in the project repository ' , projectRepository description printString ]. configNames := configRefMap keys asSortedCollection asArray. configName := self uiManager chooseFrom: (configNames collect: [ :name | name configurationBaseName]) values: configNames title: 'Select the desired project'. configName ifNil: [ ^ self ]. configRef := (configRefMap at: configName) asSortedCollection asArray last. Gofer new repository: projectRepository; version: configRef name; load! ! !MBLoadConfigurationCommand methodsFor: 'ordering' stamp: 'dkh 4/7/2011 22:20'! order ^'10'! ! !MBLoadConfigurationCommand methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:26'! title ^ 'load configuration'! ! !MBCopyBaselineCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:32'! copyBaselineWithNumber: baselineNumberAsString "Copy myself into a new baseline, with a different number" | sourceCode newSource newNumber newSelector comment | self assert: [ baselineNumberAsString ~= target versionString ] description: 'Cannot assign the same baseline number than me to my copy'. self assert: [ (baselineNumberAsString endsWith: 'baseline') not ] description: 'The baseline number cannot end with "-baseline". It will be automatically added.'. comment := self uiManager request: 'Enter a comment for the new baseline'. MetacelloToolBox createBaseline: baselineNumberAsString, '-baseline' for: target configurationBasename from: target versionString description: comment.! ! !MBCopyBaselineCommand methodsFor: 'documentation' stamp: 'fds 2/26/2011 19:48'! documentation ^ 'Copy the selected baseline under a new name'! ! !MBCopyBaselineCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:32'! execute | answer | answer := self uiManager request: 'give a new baseline number (the prefix "-baseline" will be added)'. answer ifNil: [ ^ self ]. self copyBaselineWithNumber: answer ! ! !MBCopyBaselineCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:16'! title ^ 'copy baseline'! ! !MBConfigurationRoot commentStamp: '' prior: 81556753! MB stands for Metacello Borwser. MBConfigurationRoot is the root object holding information on all available configurations in the image. Instance Variables announcer: configurations: a collection of MBConfigurationInfo. password: username: ! !MBConfigurationRoot class methodsFor: 'accessing' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 23:11'! current "singleton pattern" Current ifNil: [ Current := self new. Current register ]. ^Current ! ! !MBConfigurationRoot class methodsFor: 'accessing' stamp: 'dkh 3/10/2011 18:22'! reset "self reset" | c | Current ifNil: [ ^self ]. c := Current. Current := nil. c unregister. ! ! !MBConfigurationRoot methodsFor: 'actions' stamp: 'dkh 3/10/2011 12:49'! addConfigurationInfoFor: aConfigurationClass (self configurationInfoFor: aConfigurationClass) notNil ifTrue: [ ^ self ]. self configurations add: ((MBConfigurationInfo configurationClass: aConfigurationClass) configurationRoot: self; yourself). self announcer announce: MBConfigurationInfoCreated! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/10/2011 12:37'! announcer ^announcer ! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 8/28/2012 14:49'! categoryModified: anEvent "(anEvent itemClass name asString beginsWith: 'ConfigurationOf') ifTrue: [ self respondToEventFor: anEvent itemClass withOperation: #modified ]" | configName configClass configInfo | self flag: 'update only needed configurations'. "configName := 'ConfigurationOf' , (anEvent item). configClass := Smalltalk at: (configName asSymbol). configClass ifNotNilDo: [ configInfo := self configurationInfoFor: configClass. configInfo fullRecalculate ]." self configurations do: [:config | config fullRecalculate ].! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/2/2013 17:31'! classAdded: anEvent (anEvent classAdded name asString beginsWith: 'ConfigurationOf') ifTrue: [ self respondToEventFor: anEvent classAdded withOperation: #added ]! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/2/2013 17:31'! classModified: anEvent (anEvent classAffected name asString beginsWith: 'ConfigurationOf') ifTrue: [ self respondToEventFor: anEvent classAffected withOperation: #modified ]! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/2/2013 17:31'! classRemoved: anEvent (anEvent classRemoved name asString beginsWith: 'ConfigurationOf') ifTrue: [ self respondToEventFor: anEvent classRemoved withOperation: #removed ]! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:33'! configurationClasses ^ MetacelloToolBox configurationClasses! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 4/9/2011 18:26'! configurationInfoFor: aConfigurationClass self configurations do: [:info | info configurationClass == aConfigurationClass theNonMetaClass ifTrue: [ ^info ]]. ^nil! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/6/2011 14:51'! configurations configurations ifNil: [ configurations := (self configurationClasses collect: [ :cls | (MBConfigurationInfo configurationClass: cls) configurationRoot: self; yourself ]) asSortedCollection: [ :a :b | a name <= b name ] ]. ^ configurations! ! !MBConfigurationRoot methodsFor: 'initialize-release' stamp: 'dkh 3/10/2011 12:37'! initialize super initialize . announcer := Announcer new! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/17/2013 10:46'! methodModified: anEvent (anEvent methodAffected class name asString beginsWith: 'ConfigurationOf') ifTrue: [ self respondToEventFor: anEvent methodAffected withOperation: #modified ]! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:34'! password ^ password! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:34'! password: anObject password := anObject! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/2/2013 17:32'! register "Set up dependencies" SystemAnnouncer uniqueInstance weak on: ClassAdded send: #classAdded: to: self; on: ClassModifiedClassDefinition, ClassCommented, ClassRenamed, ClassReorganized, ClassRenamed send: #classModified: to: self; on: ClassRemoved send: #classRemoved: to: self; on: MethodAdded, MethodModified , MethodRemoved send: #methodModified: to: self. MCWorkingCopy addDependent: self. ! ! !MBConfigurationRoot methodsFor: 'actions' stamp: 'dkh 3/10/2011 14:46'! removeConfigurationInfo: aConfigurationInfo aConfigurationInfo release. self configurations remove: aConfigurationInfo ifAbsent: []. self announcer announce: MBConfigurationInfoDeleted! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'dkh 4/9/2011 21:00'! respondToEventFor: aConfigurationClass withOperation: operation "Events generated by SystemChangeNotifier and involve edits to the configuration itself." | info | operation == #added ifTrue: [ ^self addConfigurationInfoFor: aConfigurationClass ]. (info := self configurationInfoFor: aConfigurationClass) isNil ifTrue: [ ^ self ]. operation == #removed ifTrue: [ ^self removeConfigurationInfo: info ]. "operation == #modified...configuration specs potentially modified" info configurationClassModified. self configurations do: [ :configInfo | configInfo recalculateIfInterestedInConfigurationInfo: info for: operation ]! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'ChristopheDemarey 1/2/2013 17:33'! unregister "Unregister from the dependent object. Typically used when closing the browser" SystemAnnouncer uniqueInstance unsubscribe: self. MCWorkingCopy removeDependent: self. ! ! !MBConfigurationRoot methodsFor: 'updating' stamp: 'dkh 4/7/2011 23:42'! update: anArrayOrSymbol "A package has been modified (loaded, removed, or updated). Find out if any configurations are managing the package. Update events are coming from MCWorkingCopy." | packageName operation | anArrayOrSymbol isArray ifFalse: [ ^ self ]. operation := anArrayOrSymbol at: 1. operation == #modified ifTrue: [ packageName := (anArrayOrSymbol at: 2) packageName ]. operation == #registered ifTrue: [ packageName := (anArrayOrSymbol at: 2) name ]. operation == #unregistered ifTrue: [ packageName := (anArrayOrSymbol at: 2) name ]. (packageName beginsWith: 'ConfigurationOf') ifTrue: [ | wc info | operation ~~ #modified ifTrue: [ ^ self ]. "only interested in modified" wc := anArrayOrSymbol at: 2. wc modified ifTrue: [ ^ self ]. "only interested in transtion from modified to not modified" (info := self configurationInfoFor: (Smalltalk at: packageName asSymbol ifAbsent: [ ^ self ])) isNil ifTrue: [ ^ self ]. "removed and added packages handled by the add/removal of the class" info configurationClassModified. ^ self ]. self configurations do: [ :info | info recalculateIfInterestedInPackageNamed: packageName for: operation ]! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:35'! username ^ username! ! !MBConfigurationRoot methodsFor: 'accessing' stamp: 'dkh 3/5/2011 15:35'! username: anObject username := anObject! ! !MBAbstractInfoList commentStamp: '' prior: 81557090! A MBAbstractInfoList is an abstraction used to hold information on groups, packages and projects. Instance Variables groups: a list of groups (MBGroupInfo instances) infoList: packages: projects: ! !MBAbstractInfoList methodsFor: 'private' stamp: 'dkh 3/2/2011 20:03'! calculateInfoList ^self subclassResponsibility ! ! !MBAbstractInfoList methodsFor: 'updating' stamp: 'dkh 03/14/2011 07:17'! fullRecalculate self recalculate! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'dkh 3/6/2011 15:34'! groups "Return the list of groups for the configuration" | groupSpecs | groups ~~ nil ifTrue: [ ^ groups ]. groups := OrderedCollection new. self versionForInfoList ifNil: [ ^ groups ]. groupSpecs := self versionForInfoList groups. groupSpecs := groupSpecs asSortedCollection: [ :a :b | a name <= b name ]. groups addAll: (groupSpecs collect: [ :grpSpec | (MBGroupInfo spec: grpSpec) configurationInfo: self configurationInfo; yourself ]). ^ groups! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'dkh 3/10/2011 16:00'! infoList infoList ~~ nil ifTrue: [ ^infoList ]. ^ infoList := self calculateInfoList! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'AlexandreBergel 1/17/2012 17:34'! infos "Return the list of info that are displayed" ^self infoList! ! !MBAbstractInfoList methodsFor: 'updating' stamp: 'dkh 4/12/2011 10:54'! interestedInPackage: operation "potential currentVersion change" self fullRecalculate. ^true! ! !MBAbstractInfoList methodsFor: 'updating' stamp: 'dkh 3/2/2011 20:14'! interestedInPackageNamed: packageName packages notNil ifTrue: [ (self packages detect: [ :info | info interestedInPackageNamed: packageName ] ifNone: [ ]) notNil ifTrue: [ ^ true ] ]. ^ false! ! !MBAbstractInfoList methodsFor: 'testing' stamp: 'dkh 3/9/2011 22:15'! isDirty ^ self packages anySatisfy: [:each | each isDirty ]! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'AlexandreBergel 8/2/2011 16:37'! packages "Return the list of dependent packages for the last baseline" | packageSpecs | packages ~~ nil ifTrue: [ ^ packages ]. self versionForInfoList ifNil: [ ^ #() ]. packages := OrderedCollection new. packageSpecs := self versionForInfoList packages. packageSpecs := packageSpecs asSortedCollection: [ :a :b | a name <= b name ]. packages addAll: (packageSpecs collect: [ :pkgSpec | | packageName | (packageName := pkgSpec getFile) ifNil: [ packageName := pkgSpec name asString ]. (MBPackageInfo named: packageName packageName: pkgSpec name asString spec: pkgSpec) configurationInfo: self configurationInfo; yourself ]). ^ packages! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 8/28/2012 14:31'! projects "Return the list of dependent packages for the last baseline" | projectSpecs | projects ifNotNil: [ ^ projects ]. projects := OrderedCollection new. self versionForInfoList ifNil: [ ^ projects ]. projectSpecs := self versionForInfoList projects. projectSpecs := projectSpecs asSortedCollection: [ :a :b | a name <= b name ]. projects addAll: (projectSpecs collect: [ :prjSpec | (MBProjectInfo named: prjSpec name packageName: prjSpec projectPackage name spec: prjSpec) configurationInfo: self configurationInfo; yourself ]). ^ projects! ! !MBAbstractInfoList methodsFor: 'updating' stamp: 'dkh 3/10/2011 18:30'! recalculate text := groups := validationResult := validationIcon := projects:= packages := nil. infoList == nil ifTrue: [ ^self ]. self announcer announce: (MBInfoListChanged changed: self). infoList := nil! ! !MBAbstractInfoList methodsFor: 'updating' stamp: 'dkh 4/12/2011 10:46'! recalculateIfInterestedInPackageNamed: packageName for: operation "keep projects separate, since I'm the only one interested in projects." (self interestedInPackageNamed: packageName) ifTrue: [ ^self interestedInPackage: operation ]. projects notNil ifTrue: [ (self projects detect: [ :info | info interestedInPackageNamed: packageName ] ifNone: [ ]) notNil ifTrue: [ ^self interestedInPackage: operation ] ]. ^false! ! !MBAbstractInfoList methodsFor: 'initialize-release' stamp: 'dkh 3/6/2011 18:38'! release | baselines versions | super release. packages := projects := groups := infoList := nil.! ! !MBAbstractInfoList methodsFor: 'accessing-computed' stamp: 'dkh 3/2/2011 20:29'! versionForInfoList ^self subclassResponsibility ! ! !MBAbstractVersionInfo class methodsFor: 'instance creation' stamp: 'AlexandreBergel 3/1/2011 08:49'! new self error: 'Please use version:browser: or version: instead'! ! !MBAbstractVersionInfo class methodsFor: 'instance creation' stamp: 'dkh 3/6/2011 15:32'! version: aMetacelloVersion ^ super new version: aMetacelloVersion; yourself! ! !MBAbstractVersionInfo methodsFor: 'private' stamp: 'ChristopheDemarey 11/13/2013 13:33'! calculateInfoList | answer list cvs cv | answer := OrderedCollection new. cvs := ''. (cv := self versionForInfoList) ifNil: [cvs := cv versionString, ' ']. (list := self projects) ifNotEmpty: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'projects --'). answer addAll: list. answer add: (MBLabelInfo new name: '') ]. (list := self packages) ifNotEmpty: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'packages --'). answer addAll: list. answer add: (MBLabelInfo new name: '') ]. (list := self groups) ifNotEmpty: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'groups --'). answer addAll: list ]. ^ answer! ! !MBAbstractVersionInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 10/24/2013 17:49'! cmdBrowse ^ VSBrowseVersionCommand! ! !MBAbstractVersionInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 10/24/2013 17:57'! cmdLoad ^ VSLoadCommand! ! !MBAbstractVersionInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 10/24/2013 17:57'! cmdRemove ^ VSRemoveCommand! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/6/2012 15:31'! configurationBasename ^ self configurationClass configurationBaseName! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 17:55'! configurationClass ^ self configurationInfo configurationClass! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 17:50'! configurationInfo ^ configurationInfo! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 17:50'! configurationInfo: anObject configurationInfo := anObject! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 17:56'! currentVersion ^self configurationInfo currentVersion! ! !MBAbstractVersionInfo methodsFor: 'testing' stamp: 'dkh 3/1/2011 21:08'! hasValidationIssues validationResult == nil ifTrue: [ ^false ]. ^validationResult notEmpty! ! !MBAbstractVersionInfo methodsFor: 'testing' stamp: 'dkh 3/2/2011 16:43'! isBleedingEdge ^ (self project hasVersion: #bleedingEdge) and: [ (self project version: #bleedingEdge) = self version ]! ! !MBAbstractVersionInfo methodsFor: 'testing' stamp: 'JuanPabloSandovalAlcocer 1/8/2012 18:10'! isCurrentVersion |cv| (cv := self currentVersion) ~~ nil ifTrue: [ cv = self version ifTrue: [^ true]]. ^false.! ! !MBAbstractVersionInfo methodsFor: 'testing' stamp: 'dkh 3/2/2011 16:44'! isDevelopment ^ (self project hasVersion: #development) and: [ (self project version: #development) = self version ]! ! !MBAbstractVersionInfo methodsFor: 'testing' stamp: 'dkh 3/2/2011 16:43'! isStable ^ (self project hasVersion: #stable) and: [ (self project version: #stable) = self version ]! ! !MBAbstractVersionInfo methodsFor: 'printing' stamp: 'dkh 3/6/2011 15:15'! printOn: aStream | cv | (cv := self currentVersion) ~~ nil ifTrue: [ cv = self version ifTrue: [ aStream nextPutAll: ' @ ' ] ]. super printOn: aStream. ! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 16:42'! project "Answer the MetacelloProject associated with the receiver." ^self version project! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 16:44'! validate validationResult == nil ifTrue: [ validationIcon := nil. validationResult := MetacelloToolBox validateProject: self project version: self version versionString ]. ^ validationResult! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 12:57'! version ^ version! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 14:13'! version: aMetacelloVersion version := aMetacelloVersion. self name: aMetacelloVersion versionString. ! ! !MBAbstractVersionInfo methodsFor: 'accessing-computed' stamp: 'dkh 3/2/2011 20:29'! versionForInfoList ^self version ! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'dkh 3/19/2011 10:42'! versionString ^ self version versionString! ! !MBBaselineInfo commentStamp: '' prior: 81557379! A MBBaselineInfo holds information on a baselinf of a configuration. ! !MBBaselineInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:56'! helpLabel ^'Baseline'! ! !MBBaselineInfo methodsFor: 'commands' stamp: 'dkh 3/4/2011 04:59'! cmdCopyBaseline ^ MBCopyBaselineCommand! ! !MBBaselineInfo methodsFor: 'printing' stamp: 'DaleHenrichs 2/24/2011 18:23'! printOn: aStream super printOn: aStream. self isBleedingEdge ifTrue: [ aStream nextPutAll: ' #bleedingEdge' ].! ! !MBVersionInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:56'! helpLabel ^'Version'! ! !MBVersionInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 11/20/2013 17:48'! cmdReleaseDevelopmentVersion ^ VSReleaseDevelopmentVersionCommand! ! !MBVersionInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 11/13/2013 13:18'! cmdSetDescription ^ VSSetDescriptionCommand! ! !MBVersionInfo methodsFor: 'printing' stamp: 'dkh 2/24/2011 15:33'! printOn: aStream super printOn: aStream. self isDevelopment ifTrue: [ aStream nextPutAll: ' #development'. ^self ]. self isStable ifTrue: [ aStream nextPutAll: ' #stable' ].! ! !MBConfigurationInfo commentStamp: '' prior: 81557511! A MBConfigurationInfo holds information on a specific configuration, i.e. on the ConfigurationOf class of a project. Instance Variables baselines: list of baselines (MBBaseLineInfo instances) of this configuration. branch: ?? configurationClass: the configuration class (ConfigurationOf instance). configurationRoot: a link to the root object with all configurations. currentVersion: ?? trimVersionLists: true if ?? versions: list of versions (MBVersionInfo instances) of this configuration. workingCopy: the Metacello working copy ! !MBConfigurationInfo class methodsFor: 'instance creation' stamp: 'AlexandreBergel 1/16/2011 21:14'! configurationClass: aConfiguration ^ super new configurationClass: aConfiguration; yourself! ! !MBConfigurationInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:56'! helpLabel ^'Configuration'! ! !MBConfigurationInfo class methodsFor: 'instance creation' stamp: 'AlexandreBergel 1/16/2011 21:13'! new self error: 'Please, use #configuration: to instantiate ', self name printString! ! !MBConfigurationInfo methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 1/13/2014 14:34'! baselines baselines ifNotNil: [ ^baselines ]. baselines := self baselinesFor: self project. ^baselines ! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 15:33'! baselinesFor: aMetacelloProject "Return the list of BaselineInfo for the configuration class passed as parameter" "The returned collection is ordered. Labeled baselines are first, numbered baselines are last" | existingBaselines numberedBaselines labeledBaselines | existingBaselines := aMetacelloProject versions select: [ :vrsn | vrsn blessing == #baseline ]. existingBaselines := existingBaselines collect: [ :vrsn | (MBBaselineInfo version: vrsn) configurationInfo: self; yourself ]. numberedBaselines := existingBaselines select: [ :bInfo | ($0 to: $9) includes: bInfo name first ]. labeledBaselines := existingBaselines copyWithoutAll: numberedBaselines. ^ labeledBaselines asArray , numberedBaselines asArray reversed! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 4/7/2011 23:57'! branch branch ifNil: [ branch := self extractBranchFrom: self workingCopy ]. ^branch! ! !MBConfigurationInfo methodsFor: 'converting' stamp: 'dkh 4/5/2011 16:41'! buildStringOrText | string cv specVersion attributes wc | attributes := OrderedCollection new. [ string := super buildStringOrText ] on: Error do: [ :ex | attributes add: TextEmphasis struckOut. ^ Text string: self name asString attributes: attributes ]. ((wc := self workingCopy) notNil and: [ wc needsSaving ]) ifTrue: [ attributes add: TextEmphasis underlined ]. self currentVersion. "prime the pump" currentVersion == #notLoaded ifTrue: [ attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string ]. super isDirty | self currentVersionMismatch ifTrue: [ attributes add: TextEmphasis bold ]. self currentVersion versionStatus == #somethingLoaded ifTrue: [ attributes add: TextColor red ]. attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string! ! !MBConfigurationInfo methodsFor: 'private' stamp: 'dkh 3/18/2011 18:42'! calculateInfoList | answer list cvs cv | answer := OrderedCollection new. [self project ifNil: [ ^answer ]] on: Error do: [:ex | ^answer ]. answer add: (MBLabelInfo new name: ' -- baselines --'). answer addAll: (self trimVersionInfos: self baselines). answer add: (MBLabelInfo new name: ''). answer add: (MBLabelInfo new name: ' -- versions --'). answer addAll: (self trimVersionInfos: self versions). answer add: (MBLabelInfo new name: ''). cvs := ''. (cv := self currentVersion) ~~ nil ifTrue: [cvs := cv versionString, ' ']. (list := self projects) notEmpty ifTrue: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'projects --'). answer addAll: list. answer add: (MBLabelInfo new name: '') ]. (list := self packages) notEmpty ifTrue: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'packages --'). answer addAll: list. answer add: (MBLabelInfo new name: '') ]. (list := self groups) notEmpty ifTrue: [ answer add: (MBLabelInfo new name: ' -- ', cvs, 'groups --'). answer addAll: list]. ^ answer! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 9/17/2013 15:30'! cmdBrowseConfiguration ^ VSBrowseConfigurationCommand! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 9/17/2013 15:32'! cmdOpenRepository ^ VSOpenRepositoryCommand! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'JuanPabloSandovalAlcocer 6/30/2012 18:07'! cmdSaveConfiguration ^ MBSaveConfigurationCommand! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 9/17/2013 15:28'! cmdUnloadConfiguration ^ VSUnloadConfigurationCommand! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 10/25/2013 17:53'! cmdUpdateFromItsRepository ^ VSUpdateFromItsRepositoryCommand! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 9/17/2013 11:37'! cmdValidateConfiguration ^ VSValidateConfigurationCommand! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/18/2012 10:49'! configurationClass "Returns the class configurationOfXXX associted to the configuration info (wrapper for the UI)" ^ configurationClass! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 14:19'! configurationClass: aConfigurationClass configurationClass := aConfigurationClass. self name: configurationClass name asString! ! !MBConfigurationInfo methodsFor: 'updating' stamp: 'dkh 03/12/2011 02:24'! configurationClassModified self fullRecalculate ! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 18:03'! configurationInfo ^self ! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 14:50'! configurationRoot ^ configurationRoot! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 14:50'! configurationRoot: anObject configurationRoot := anObject! ! !MBConfigurationInfo methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 12/11/2012 11:23'! currentVersion "Return the currentVersion of the configuration ... nil if not loaded." currentVersion == #notLoaded ifTrue: [ ^ nil ]. (currentVersion notNil and: [ currentVersion ~~ #recalculate]) ifTrue: [ ^ currentVersion ]. packages := projects := groups := text := nil. self configurationRoot ifNil: [ ^ currentVersion ]. (currentVersion := self project currentVersion) ifNil: [ currentVersion := #notLoaded. self configurationRoot announcer announce: (MBConfigurationInfoChanged changed: self). ^ nil ]. self configurationRoot announcer announce: (MBConfigurationInfoChanged changed: self). ^ currentVersion! ! !MBConfigurationInfo methodsFor: 'accessing-computed' stamp: 'dkh 4/7/2011 23:58'! currentVersion: aVersion currentVersion := aVersion. branch := baselines := versions := infoList := packages := projects := groups := text := nil. self configurationRoot announcer announce: (MBConfigurationInfoChanged changed: self). self announcer announce: (MBInfoListChanged changed: self). ! ! !MBConfigurationInfo methodsFor: 'testing' stamp: 'dkh 3/9/2011 16:30'! currentVersionMismatch ^ (self projects anySatisfy: [ :each | each currentVersionMismatch ]) or: [ self packages anySatisfy: [ :each | each currentVersionMismatch ] ]! ! !MBConfigurationInfo methodsFor: 'utils' stamp: 'dkh 4/7/2011 23:49'! extractBranchFrom: aWorkingCopy | ref | (aWorkingCopy isNil or: [ aWorkingCopy ancestors isEmpty ]) ifTrue: [ ^ '' ]. ref := GoferVersionReference name: aWorkingCopy ancestors first name. ^ ref branch! ! !MBConfigurationInfo methodsFor: 'updating' stamp: 'dkh 3/14/2011 11:10'! fullRecalculate super fullRecalculate. (currentVersion == #recalculate or: [ currentVersion isNil ]) ifTrue: [^self ]. currentVersion := #recalculate. ! ! !MBConfigurationInfo methodsFor: 'testing' stamp: 'ChristopheDemarey 12/5/2013 09:42'! hasVersion: aVersionString [ self project version: aVersionString ] on: MetacelloSymbolicVersionDoesNotExistError do: [ ^ false ]. ^ true! ! !MBConfigurationInfo methodsFor: 'testing' stamp: 'JPSA 4/20/2012 21:22'! isDirty | wc | ^ [super isDirty or: [ (wc := self workingCopy) notNil and: [ wc needsSaving ]]] on:Error do:[false].! ! !MBConfigurationInfo methodsFor: 'printing' stamp: 'ChristopheDemarey 11/6/2012 15:28'! printOn: aStream | cv nameString wc refString branchString | [self name ifNil: [ aStream nextPutAll: ''. ^ self ]. nameString := self name configurationBaseName. (refString := self extractPackageSignatureFrom: (wc := self workingCopy)) notEmpty ifTrue: [ refString := '(' , refString , ')' ]. (branchString := self branch) notEmpty ifTrue: [ nameString := nameString, '.', branchString ]. self isDirty ifTrue: [ aStream nextPutAll: '* ' ]. aStream nextPutAll: nameString. (cv := self currentVersion) notNil ifTrue: [ aStream nextPutAll: ' ' , cv versionString ]. aStream nextPutAll: refString.] on:Error do:[].! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/10/2011 11:25'! project "Answer the MetacelloProject associated with the receiver." ^ self configurationClass project! ! !MBConfigurationInfo methodsFor: 'updating' stamp: 'dkh 4/7/2011 23:58'! recalculate branch := workingCopy := baselines := versions := nil. super recalculate. self configurationRoot announcer announce: (MBConfigurationInfoChanged changed: self). ! ! !MBConfigurationInfo methodsFor: 'updating' stamp: 'dkh 4/12/2011 10:43'! recalculateIfInterestedInConfigurationInfo: configInfo for: operation projects ifNil: [ ^self ]. self projects detect: [ :info | info interestedInConfigurationInfo: configInfo ] ifNone: [ ^self ]. infoList := text := projects := nil. self configurationRoot announcer announce: (MBConfigurationInfoChanged changed: self)! ! !MBConfigurationInfo methodsFor: 'updating' stamp: 'dkh 4/12/2011 10:51'! recalculateIfInterestedInPackageNamed: packageName for: operation | recalculate | recalculate := super recalculateIfInterestedInPackageNamed: packageName for: operation. (recalculate not and: [ baselines notNil ]) ifTrue: [ (self baselines detect: [ :info | info recalculateIfInterestedInPackageNamed: packageName for: operation ] ifNone: [ ]) ifNotNil: [ recalculate := true ] ]. (recalculate not and: [ versions notNil ]) ifTrue: [ (self versions detect: [ :info | info recalculateIfInterestedInPackageNamed: packageName for: operation ] ifNone: [ ]) ifNotNil: [ recalculate := true ] ]. (recalculate and: [ operation ~~ #modified ]) ifTrue: [ currentVersion == #notLoaded ifTrue: [ currentVersion := nil ]. self fullRecalculate ]! ! !MBConfigurationInfo methodsFor: 'initialize-release' stamp: 'dkh 3/6/2011 18:37'! release super release. baselines := versions := nil.! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'ChristopheDemarey 9/17/2013 18:18'! repositories "Return the repositories associated with the configuration." | mcPackage | (mcPackage := self project projectPackage) ifNil: [ ^nil ]. ^ mcPackage workingCopy ifNil: [ nil ] ifNotNilDo: [ :wc | wc repositoryGroup repositories ]! ! !MBConfigurationInfo methodsFor: 'private' stamp: 'dkh 3/2/2011 08:07'! trimVersionInfos: versionInfos | trimmed count marker cv | self trimVersionLists ifFalse: [ ^versionInfos ]. versionInfos size <= 10 ifTrue: [ ^versionInfos ]. trimmed := (versionInfos copyFrom: 1 to: 5) asOrderedCollection. marker := count := 0. cv := self currentVersion. 6 to: versionInfos size do: [:index | | info | info := versionInfos at: index. info isStable | info isBleedingEdge | info isDevelopment | info hasValidationIssues | (cv = info version) ifTrue: [ count - 1 >= marker ifTrue: [ trimmed add:( MBLabelInfo new name: '..') ]. trimmed add: info. marker := count. ]. count := count + 1 ]. count - 1 >= marker ifTrue: [ trimmed add:( MBLabelInfo new name: '..') ]. ^trimmed! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 21:15'! trimVersionLists trimVersionLists == nil ifTrue: [ trimVersionLists := true ]. ^trimVersionLists! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 21:15'! trimVersionLists: aBool trimVersionLists := aBool! ! !MBConfigurationInfo methodsFor: 'actions' stamp: 'dkh 2/27/2011 20:26'! validate validationResult == nil ifTrue: [ validationIcon := nil. validationResult := MetacelloToolBox validateConfiguration: self configurationClass ]. ^ validationResult! ! !MBConfigurationInfo methodsFor: 'actions' stamp: 'dkh 3/6/2011 14:56'! validateFull infoList := baselines := versions := nil. (self baselines, self versions) do: [:version | version validateFull ]. ^super validateFull. ! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 4/8/2011 16:14'! version ^self currentVersion! ! !MBConfigurationInfo methodsFor: 'accessing-computed' stamp: 'dkh 3/2/2011 20:29'! versionForInfoList ^self currentVersion ! ! !MBConfigurationInfo methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 3/6/2013 18:09'! versions "Return the versions of the configuration" | versionList devVersionString | versions ifNotNil: [ versions ifNotEmpty: [ ^ versions ] ]. versionList := self project map values. devVersionString := self project symbolicVersionMap at: #development ifAbsent: [ '' ]. versionList reject: [ :vrsn | (vrsn blessing == #baseline and: [(vrsn name == devVersionString) not]) or: [ vrsn blessing == #broken ] ]. versions := (versionList asArray sort: [:a :b | a > b ]) collect: [ :vrsn | (MBVersionInfo version: vrsn) configurationInfo: self; yourself ]. ^ versions! ! !MBConfigurationInfo methodsFor: 'accessing' stamp: 'dkh 2/27/2011 15:28'! workingCopy | pkg | workingCopy ~~ nil ifTrue: [ ^workingCopy ]. pkg := MCPackage named: self configurationClass category asString. pkg hasWorkingCopy ifFalse: [ ^nil ]. ^workingCopy := pkg workingCopy! ! !MBInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:55'! helpLabel self subclassResponsibility! ! !MBInfo class methodsFor: 'accessing' stamp: 'dkh 2/27/2011 19:57'! validateAll ValidateAll == nil ifTrue: [ ValidateAll := false ]. ^ValidateAll! ! !MBInfo class methodsFor: 'accessing' stamp: 'dkh 2/27/2011 19:57'! validateAll: aBool ValidateAll := aBool! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/10/2011 12:37'! announcer ^self configurationRoot announcer! ! !MBInfo methodsFor: 'converting' stamp: 'dkh 3/7/2011 21:47'! asStringOrText ^self text! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 2/26/2011 16:17'! browseValidationResults self validate explore! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/7/2011 21:48'! buildStringOrText ^self printString! ! !MBInfo methodsFor: 'actions' stamp: 'dkh 2/26/2011 11:46'! clearValidationIcon validationIcon := nil! ! !MBInfo methodsFor: 'commands' stamp: 'dkh 2/28/2011 16:40'! commands ^ (self class allSelectors select: [ :k | k beginsWith: 'cmd' ]) collect: [ :k | self perform: k ]! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 14:53'! configurationInfo ^self subclassResponsibility ! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 14:54'! configurationRoot ^self configurationInfo configurationRoot! ! !MBInfo methodsFor: 'utils' stamp: 'dkh 3/20/2011 09:40'! extractPackageSignatureFrom: aWorkingCopy | ref | (aWorkingCopy isNil or: [ aWorkingCopy ancestors isEmpty ]) ifTrue: [ ^ '' ]. ref := GoferVersionReference name: aWorkingCopy ancestors first name. ^ ref author , '.' , ref versionNumber asString! ! !MBInfo methodsFor: 'testing' stamp: 'dkh 2/27/2011 16:53'! interestedInPackageNamed: packageName ^false! ! !MBInfo methodsFor: 'testing' stamp: 'AlexandreBergel 1/1/2011 15:08'! isDirty ^ false! ! !MBInfo methodsFor: 'accessing' stamp: 'AlexandreBergel 1/1/2011 13:14'! name ^ name! ! !MBInfo methodsFor: 'accessing' stamp: 'AlexandreBergel 1/1/2011 13:14'! name: aName name := aName! ! !MBInfo methodsFor: 'printing' stamp: 'AlexandreBergel 1/1/2011 14:14'! printOn: aStream self name ifNil: [ aStream nextPutAll: '' . ^ self ]. aStream nextPutAll: self name! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 16:39'! project "Answer the MetacelloProject associated with the receiver." ^nil! ! !MBInfo methodsFor: 'utils' stamp: 'dkh 3/4/2011 12:40'! repositories "Return the repositories associated with the receiver." ^#()! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/7/2011 21:47'! text text ifNil: [ text := self buildStringOrText ]. ^text! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 3/7/2011 21:45'! text: anObject text := anObject! ! !MBInfo methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/18/2012 10:50'! validate "Returns by default an empty collection of problems" ^#()! ! !MBInfo methodsFor: 'actions' stamp: 'dkh 2/27/2011 20:45'! validateFull self validationResult: nil. ^self validate! ! !MBInfo methodsFor: 'accessing' stamp: 'dkh 2/27/2011 19:56'! validationResult: anObject validationResult := anObject! ! !MBLabelInfo methodsFor: 'accessing' stamp: 'dkh 2/26/2011 18:30'! validate ^nil! ! !MBLabelInfo methodsFor: 'accessing' stamp: 'dkh 2/27/2011 20:02'! validationIcon ^nil! ! !MBLabelInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 19:25'! validationIconSymbol ^#blank! ! !MBSpecInfo commentStamp: '' prior: 81558113! A MBSpecInfo holds information on Metacello specifications. Instance Variables configurationInfo: the object holding information on the whole configuration. spec: the specification of this object (a MetacelloSpec). ! !MBAbstractPackageInfo commentStamp: '' prior: 81558397! A MBAbstractPackageInfo is an abstraction to represent both project and packages. Instance Variables packageName: name of the package workingCopy: a MCWorkingCopy representing the version of the package in memory ! !MBAbstractPackageInfo class methodsFor: 'instance creation' stamp: 'dkh 2/27/2011 15:32'! named: infoName ^self named: infoName packageName: infoName spec: nil! ! !MBAbstractPackageInfo class methodsFor: 'instance creation' stamp: 'AlexandreBergel 3/5/2011 21:57'! named: infoName packageName: packageName spec: aMetacelloSpec "Create an instance of myself named infoName for the package named packageName" | answer | self assert: [ packageName isString ]. self assert: [ packageName isSymbol not ]. answer := super new. answer name: infoName. answer packageName: packageName. answer spec: aMetacelloSpec. ^ answer! ! !MBAbstractPackageInfo class methodsFor: 'instance creation' stamp: 'AlexandreBergel 1/16/2011 01:05'! new self error: 'Please, use #named: to create an instance'! ! !MBAbstractPackageInfo methodsFor: 'accessing' stamp: 'AlexandreBergel 3/5/2011 22:57'! classForBrowsing self subclassResponsibility ! ! !MBAbstractPackageInfo methodsFor: 'commands' stamp: 'dkh 3/4/2011 05:00'! cmdBrowse ^ MBBrowsePackageCommand! ! !MBAbstractPackageInfo methodsFor: 'commands' stamp: 'dkh 3/20/2011 10:36'! cmdBrowsePackageChanges ^ MBPackageChangesCommand ! ! !MBAbstractPackageInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 9/17/2013 15:32'! cmdOpenRepositoryCommand ^ VSOpenRepositoryCommand! ! !MBAbstractPackageInfo methodsFor: 'testing' stamp: 'DaleHenrichs 2/23/2011 17:29'! isDirty | wc | wc := self workingCopy. wc ifNil: [ ^false ]. ^wc needsSaving! ! !MBAbstractPackageInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 19:02'! packageName ^packageName! ! !MBAbstractPackageInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 19:02'! packageName: aString packageName := aString! ! !MBAbstractPackageInfo methodsFor: 'accessing' stamp: 'dkh 2/27/2011 15:37'! workingCopy | pkg | workingCopy ~~ nil ifTrue: [ ^workingCopy ]. pkg := MCPackage named: self packageName. pkg hasWorkingCopy ifFalse: [ ^nil ]. ^workingCopy := pkg workingCopy! ! !MBPackageInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:56'! helpLabel ^'Package'! ! !MBPackageInfo methodsFor: 'accessing' stamp: 'AlexandreBergel 2/24/2011 14:52'! basePackageName ^ self packageName copyUpToLast: #-! ! !MBPackageInfo methodsFor: 'converting' stamp: 'DaleHenrichs 03/09/2011 11:03'! buildStringOrText | string wc loadedPkgName attributes | string := super buildStringOrText. (wc := self workingCopy) isNil ifTrue: [ ^ string ]. attributes := OrderedCollection new. wc ancestry ancestors notEmpty ifTrue: [ loadedPkgName := wc ancestry ancestors first name. loadedPkgName = self name ifFalse: [ (self compareWorkingCopyNamed: loadedPkgName using: #<=) ifTrue: [ attributes add: TextColor red ]. attributes add: TextEmphasis bold ]]. self isDirty ifTrue: [ attributes add: TextEmphasis underlined ]. attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string! ! !MBPackageInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 14:11'! classForBrowsing ^self workingCopy packageInfo classes anyOne! ! !MBPackageInfo methodsFor: 'commands' stamp: 'dkh 3/20/2011 16:38'! cmdBrowsePackageHistory ^ MBPackageHistoryCommand ! ! !MBPackageInfo methodsFor: 'as yet unclassified' stamp: 'JuanPabloSandovalAlcocer 1/4/2012 15:15'! cmdLoad ^ MBLoadPackageCommand.! ! !MBPackageInfo methodsFor: 'commands' stamp: 'DaleHenrichs 03/07/2011 15:47'! cmdRevertPackage ^ MBRevertPackageCommand! ! !MBPackageInfo methodsFor: 'commands' stamp: 'DaleHenrichs 03/07/2011 15:36'! cmdSavePackage ^ MBSavePackageCommand! ! !MBPackageInfo methodsFor: 'testing' stamp: 'dkh 3/3/2011 07:57'! compareWorkingCopyNamed: wcName using: comarisonOperator | fileRef wcRef | fileRef := GoferResolvedReference name: self spec file. wcRef := GoferResolvedReference name: wcName. ^ wcRef compare: fileRef using: comarisonOperator! ! !MBPackageInfo methodsFor: 'testing' stamp: 'DaleHenrichs 03/09/2011 17:05'! currentVersionMismatch | wc loadedPkgName | (wc := self workingCopy) isNil ifTrue: [ ^ false ]. wc ancestry ancestors isEmpty ifTrue: [ ^ false ]. loadedPkgName := wc ancestry ancestors first name. loadedPkgName = self name ifTrue: [ ^false ]. ^ true ! ! !MBPackageInfo methodsFor: 'testing' stamp: 'dkh 3/9/2011 21:49'! interestedInPackageNamed: aString ^aString beginsWith: self packageName! ! !MBPackageInfo methodsFor: 'as yet unclassified' stamp: 'JuanPabloSandovalAlcocer 1/4/2012 14:04'! mbPacakgeName | string wc loadedPkgName attributes | string := ''. (wc := self workingCopy) isNil ifTrue: [ ^ string ]. attributes := OrderedCollection new. wc ancestry ancestors notEmpty ifTrue: [ loadedPkgName := wc ancestry ancestors first name. loadedPkgName = self name ifFalse: [ (self compareWorkingCopyNamed: loadedPkgName using: #<=) ifTrue: [ attributes add: TextColor red ]. attributes add: TextEmphasis bold ]]. self isDirty ifTrue: [ attributes add: TextEmphasis underlined ]. attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string! ! !MBPackageInfo methodsFor: 'printing' stamp: 'JuanPabloSandovalAlcocer 1/1/2012 22:57'! printOn: aStream | wc | self isDirty ifTrue: [ aStream nextPutAll: '* ' ]. (wc := self workingCopy) isNil ifTrue: [ aStream nextPutAll: self packageName; nextPutAll: ' ---' ] ifFalse: [ wc ancestry ancestors notEmpty ifTrue: [ | loadedPkgName refString | loadedPkgName := wc ancestry ancestors first name. (refString := self extractPackageSignatureFrom: wc) notEmpty ifTrue: [ refString := '[' , refString , ']' ]. loadedPkgName = self name ifTrue: [ aStream nextPutAll: self name ] ifFalse: [ (self compareWorkingCopyNamed: loadedPkgName using: #<=) ifTrue: [ refString := Text string: refString attributes: TextColor red ]. aStream nextPutAll: self name; nextPutAll: refString ] ] ]! ! !MBPackageInfo methodsFor: 'utils' stamp: 'dkh 3/16/2011 06:03'! repositories "Return the repositories associated with the package." ^self spec workingCopy repositoryGroup repositories! ! !MBPackageInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 21:42'! typeLabel ^'package'! ! !MBPackageInfo methodsFor: 'as yet unclassified' stamp: 'JuanPabloSandovalAlcocer 1/8/2012 17:50'! versions "" |wc v| (wc := self workingCopy) isNil ifTrue: [ ^ #() ]. ^ (wc ancestry breadthFirstAncestors) collect: [ : vi| vi].! ! !MBProjectInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:56'! helpLabel ^'Project'! ! !MBProjectInfo methodsFor: 'converting' stamp: 'dkh 3/7/2011 21:53'! buildStringOrText | string cv projectClass info attributes specVersion | string := super buildStringOrText. attributes := OrderedCollection new. self isDirty ifTrue: [ attributes add: TextEmphasis underlined ]. (((projectClass := self spec projectClass) isNil or: [ (cv := self currentVersion) isEmpty ]) or: [ (specVersion := self spec versionOrNil) isNil ]) ifTrue: [ attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string ]. self currentVersionMismatch ifTrue: [ attributes add: TextEmphasis bold ]. specVersion versionStatus == #somethingLoaded ifTrue: [ attributes add: TextColor red ]. attributes notEmpty ifTrue: [ ^ Text string: string attributes: attributes ]. ^ string! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 14:08'! classForBrowsing ^self spec projectClass! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 15:21'! currentVersion currentVersion == nil ifTrue: [ | projectClass version info | (projectClass := self spec projectClass) == nil ifTrue: [ currentVersion := ''. ^ currentVersion ]. (info := self configurationRoot configurationInfoFor: projectClass) == nil ifTrue: [ currentVersion := ''. ^ currentVersion ]. (currentVersion := info currentVersion) == nil ifTrue: [ currentVersion := ''. ^ currentVersion ]. currentVersion := currentVersion versionString ]. ^ currentVersion! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 2/23/2011 20:46'! currentVersion: anObject currentVersion := anObject! ! !MBProjectInfo methodsFor: 'testing' stamp: 'DaleHenrichs 03/07/2011 12:32'! currentVersionMismatch | cv specVersion | (cv := self currentVersion) notEmpty ifTrue: [ (specVersion := self spec versionOrNil) ~~ nil ifTrue: [^ cv asMetacelloVersionNumber ~= specVersion versionNumber ]]. ^false! ! !MBProjectInfo methodsFor: 'testing' stamp: 'dkh 4/9/2011 21:05'! interestedInConfigurationInfo: configInfo | projectClass | (projectClass := self spec projectClass) == nil ifTrue: [ ^ false ]. ^(self configurationRoot configurationInfoFor: projectClass) name = configInfo name ! ! !MBProjectInfo methodsFor: 'testing' stamp: 'dkh 3/6/2011 15:15'! interestedInPackageNamed: aString | projectClass version info | (projectClass := self spec projectClass) == nil ifTrue: [ ^ false ]. (aString beginsWith: projectClass name asString) ifTrue: [ ^ true ]. (info := self configurationRoot configurationInfoFor: projectClass) == nil ifTrue: [ ^ false ]. ^ info interestedInPackageNamed: aString! ! !MBProjectInfo methodsFor: 'printing' stamp: 'dkh 3/3/2011 08:39'! printOn: aStream | cv specVersion | self isDirty ifTrue: [ aStream nextPutAll: '* ' ]. super printOn: aStream. (cv := self currentVersion) isEmpty ifTrue: [ aStream nextPutAll: ' ---' ] ifFalse: [ (specVersion := self spec versionOrNil) ~~ nil ifTrue: [ aStream nextPutAll: ' ' , specVersion versionString. cv asMetacelloVersionNumber = specVersion versionNumber ifFalse: [ aStream nextPutAll: ' [' , cv , ']' ] ] ]! ! !MBProjectInfo methodsFor: 'utils' stamp: 'dkh 3/16/2011 06:04'! repositories "Return the repositories associated with the configuration for the project." ^self spec projectPackage workingCopy repositoryGroup repositories! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 21:42'! typeLabel ^'project'! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 2/27/2011 20:26'! validate validationResult == nil ifTrue: [ validationIcon := nil. validationResult := self validateIfAbsent: [ #() ] ]. ^ validationResult! ! !MBProjectInfo methodsFor: 'accessing' stamp: 'dkh 2/26/2011 16:23'! validateIfAbsent: absentBlock ^MetacelloToolBox validateConfiguration: (Smalltalk at: self packageName asSymbol ifAbsent: absentBlock). ! ! !MBGroupInfo commentStamp: '' prior: 81558669! A MBGroupInfo holds information on a group defintiion. Instance Variables groupContents: an array with group contents as literals . ! !MBGroupInfo class methodsFor: 'accessing' stamp: 'dkh 4/10/2011 19:57'! helpLabel ^'Group'! ! !MBGroupInfo methodsFor: '*versionner-spec-browser' stamp: 'TesterBob 10/5/2012 17:31'! accept: aVisitor ^ aVisitor visitGroup: self.! ! !MBGroupInfo methodsFor: 'accessing' stamp: 'AlexandreBergel 3/27/2011 12:11'! groupContentsIfLoaded | version loadedPackageNames groupPackageNames | groupContents ~~ nil ifTrue: [ ^groupContents ]. groupContents := #(). self configurationInfo ifNil: [ ^ groupContents ]. (version := self configurationInfo currentVersion) ifNil: [ ^groupContents ]. loadedPackageNames := version defaultPackageNamesToLoad: #(). loadedPackageNames remove: 'default' ifAbsent: []. groupPackageNames := (version packagesForSpecNamed: self name) collect: [:spc | spc name ]. groupPackageNames do: [:nm | (loadedPackageNames includes: nm) ifFalse: [ ^groupContents ] ]. ^groupContents := self spec includes! ! !MBGroupInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:51'! name ^ self spec name! ! !MBGroupInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:51'! name: aName self shouldNotImplement! ! !MBGroupInfo methodsFor: 'printing' stamp: 'dkh 3/1/2011 20:03'! printOn: aStream | loadedPackageNames | super printOn: aStream. (loadedPackageNames := self groupContentsIfLoaded) isEmpty ifTrue: [ aStream nextPutAll: ' ---' ] ifFalse: [ aStream nextPutAll: ' [ '. loadedPackageNames do: [:pkgName | aStream nextPutAll: pkgName, ' ' ]. aStream nextPut: $] ].! ! !MBGroupInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 21:42'! typeLabel ^'group'! ! !MBSpecInfo class methodsFor: 'instance creation' stamp: 'DaleHenrichs 03/05/2011 11:15'! spec: aMetacelloSpec "Create an instance of myself with the given spec" ^(super new) spec: aMetacelloSpec! ! !MBSpecInfo methodsFor: 'commands' stamp: 'dkh 3/4/2011 05:00'! cmdLoadSpecCommand ^ MBLoadPackageCommand! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 18:05'! configurationInfo ^ configurationInfo! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/5/2011 18:05'! configurationInfo: anObject configurationInfo := anObject! ! !MBSpecInfo methodsFor: 'testing' stamp: 'DaleHenrichs 03/07/2011 12:38'! currentVersionMismatch ^false! ! !MBSpecInfo methodsFor: 'testing' stamp: 'JuanPabloSandovalAlcocer 1/1/2012 23:22'! isDirty | wc | wc := self workingCopy. wc ifNil: [ ^false ]. ^wc needsSaving! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:57'! packageName ^self name! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 16:43'! project "Answer the MetacelloProject associated with the receiver." ^self spec project! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:46'! spec ^spec! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:46'! spec: aMetacelloSpec spec := aMetacelloSpec ! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/2/2011 21:41'! typeLabel ^''! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:47'! validate ^nil! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/1/2011 11:47'! validationIcon ^nil! ! !MBSpecInfo methodsFor: 'accessing' stamp: 'dkh 3/6/2011 19:25'! validationIconSymbol ^#blank! ! !MCModel2MTModelVisitor commentStamp: '' prior: 81558869! A MCModel2MTModelVisitor visits a Metacello model to transform it to a MT Model . Instance variables: - project : the root element (an MTProject) of the target model MCModel2MTModelVisitor new visitConfiguration: ConfigurationOfVersionner withVersion: (ConfigurationOfVersionner project version: #development)! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2012 13:57'! visitConfiguration: aConfigurationClass "Visits a Configuration class with the current version." | currentVersion | currentVersion := aConfigurationClass project currentVersion. ^ self visitConfiguration: aConfigurationClass withVersion: currentVersion. ! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2012 13:58'! visitConfiguration: aConfigurationClass withVersion: aVersion "visits a Configuration class for the specified version and returns the project root object. Returns the project root object or nil if the given version is nil." aVersion ifNil: [ ^ nil ]. project := MTProject new. project configurationClass: aConfigurationClass. self visitMCProject: aConfigurationClass project withVersion: aVersion. ^project ! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'StephaneDucasse 8/23/2013 14:39'! visitConfiguration: aConfigurationClass withVersionString: aVersionString "visits a Configuration class for the specified version and returns the project root object. Returns the project root object or nil if the given version is nil." project := MTProject new. project configurationClass: aConfigurationClass. self visitMCProject: aConfigurationClass project withVersion: (aConfigurationClass project version: aVersionString). ^project ! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2013 14:14'! visitMCGroup: aGroup "visit a Metacello Group" | group | group := MTGroup new. group name: aGroup name. aGroup includes do: [ :dep | group addDependency: dep]. project addDependency: group. ^ group. ! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2013 14:14'! visitMCPackage: aPackage "visit a Metacello Package" | package version | package := MTPackage new. package name: aPackage name. version := MTVersion fromVersionName: aPackage file. package version: version. package dependencies: aPackage requires asOrderedCollection. project addDependency: package. ^ package. ! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2012 14:36'! visitMCProject: aProject withVersion: aVersion "visit a Metacello Project with the specified version." | version | version := MTVersion fromVersionString: aVersion versionString. project version: version. aVersion ifNotNil: [ self visitMCVersion: aVersion ].! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/11/2013 14:15'! visitMCProjectAsRequiredProject: aProject "visit a Metacello Project to add it as a required projet. It is quite the same as visitMCProject except that we won't dive into the project structure. aProject is an instance of MetacelloMCProjectSpec." | version requiredProject | requiredProject := MTDependantProject new. requiredProject displayName: aProject name. requiredProject name: (aProject className ifNil: [aProject name] ifNotNil: [ :className | className configurationBaseName]). requiredProject configurationClass: aProject projectClass. requiredProject repositories: (aProject repositorySpecs collect: [ :aRepoSpec | aRepoSpec description]). version := MTVersion fromVersionString: aProject versionString. requiredProject version: version. "requiredProject repository: aProject repository." project addDependency: requiredProject. ^ requiredProject.! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 7/15/2013 14:48'! visitMCVersion: aVersion "visit a Metacello Version" | groups packages projects repositories | project version description: aVersion spec description value; author: aVersion spec author value; timestamp: aVersion spec timestamp value. groups := aVersion groups. groups do: [ :aGroup | self visitMCGroup: aGroup ]. packages := aVersion packages. packages do: [ :aPackage | self visitMCPackage: aPackage ]. projects := aVersion projects. projects do: [ :aProject | self visitMCProjectAsRequiredProject: aProject ]. repositories := aVersion spec repositories list. repositories ifNotEmptyDo: [:repo | project repository: repo first name]. ! ! !MTDependency commentStamp: '' prior: 81559244! A MTDependency is an abstraction for project dependencies. Instance Variables - name : The dependency name - repository : The repository URL used to find this dependency - version : The specific version describes by the dependency - platforms : If not nil, the dependency is only applicable to specified platforms - dependencies : A dependency could have dependencies - project : The project root node - parent: The owner of the dependency.! !MTDependantProject commentStamp: '' prior: 81559753! A dependant project represents an external projetc you are dependending on. Instance Variables - configurationClass : the configurationClass this project represents - repository : The core repository URL of this project! !MTDependantProject class methodsFor: 'instantiation' stamp: 'ChristopheDemarey 1/17/2014 18:46'! newWithWorkingCopy: anMBConfigurationInfo "Create a new dependent project with the given project." | requiredProject version | requiredProject := self new name: anMBConfigurationInfo name configurationBaseName; configurationClass: anMBConfigurationInfo configurationClass; yourself. requiredProject displayName: requiredProject name. requiredProject editRepositories. version := (anMBConfigurationInfo hasVersion: #stable) ifTrue: [ #stable ] ifFalse: [ #bleedingEdge ]. requiredProject version: (MTVersion fromVersionString: version). ^ requiredProject! ! !MTDependantProject methodsFor: 'comparing' stamp: 'ChristopheDemarey 12/12/2013 11:17'! = other (super = other) ifFalse: [ ^false ]. (self configurationClass = other configurationClass) ifFalse: [ ^false ]. (self repositories hasEqualElements: other repositories) ifFalse: [ ^false ]. ^ true! ! !MTDependantProject methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 16:48'! acceptVisitor: anMTProjectVisitor anMTProjectVisitor visitDependantProject: self! ! !MTDependantProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 14:55'! configurationClass ^ configurationClass! ! !MTDependantProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 14:55'! configurationClass: anObject configurationClass := anObject! ! !MTDependantProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/31/2013 10:27'! displayName ^ displayName! ! !MTDependantProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/31/2013 10:27'! displayName: anObject displayName := anObject! ! !MTDependantProject methodsFor: 'displaying' stamp: 'ChristopheDemarey 7/26/2013 17:02'! displayString ^ version ifNil: [ displayName ] ifNotNil: [ version name ifNil: [ displayName ] ifNotNil: [displayName, ' (', version name, ')' ] ]! ! !MTDependantProject methodsFor: 'editing' stamp: 'ChristopheDemarey 1/17/2014 18:39'! editRepositories | packageName repoManager | packageName := configurationClass package name. repoManager := VersionnerRepositoriesManager newWithPackage: packageName. repoManager selectedChangedBlock: [:remote :selected | selected ifTrue: [ self repositories add: remote location ] ifFalse: [ self repositories remove: remote location ] ]; open; yourself.! ! !MTDependantProject methodsFor: 'initialize-release' stamp: 'ChristopheDemarey 12/12/2013 14:53'! initialize repositories := OrderedCollection new. dependencies := OrderedCollection new.! ! !MTDependantProject methodsFor: 'displaying' stamp: 'ChristopheDemarey 6/5/2013 10:42'! repositories ^ repositories! ! !MTDependantProject methodsFor: 'displaying' stamp: 'ChristopheDemarey 6/5/2013 16:50'! repositories: aRepositoryArray "Set a list of repository URLs for this project." repositories := aRepositoryArray.! ! !MTDependantProject methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/21/2013 10:44'! treeNodeClass ^ VSProjectLeafNode! ! !MTDependency class methodsFor: 'instantiation' stamp: 'ChristopheDemarey 1/24/2013 17:16'! newNamed: aName "Create a new dependency with the given name." ^ self new name: aName.! ! !MTDependency methodsFor: 'comparing' stamp: 'ChristopheDemarey 12/12/2013 12:42'! = other (self name = other name) ifFalse: [ ^false ]. (self version = other version) ifFalse: [ ^false ]. (self parent = other parent) ifFalse: [ ^false ]. "(self platforms = other platforms) ifFalse: [ ^false ]." ^true! ! !MTDependency methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 16:44'! acceptVisitor: aMTProjectVisitor self subclassResponsibility! ! !MTDependency methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/11/2013 17:20'! addDependency: aDependency (dependencies includes: aDependency) ifFalse: [ [ aDependency parent: self ] on: MessageNotUnderstood do: [ "ignore" ]. dependencies add: aDependency ] ! ! !MTDependency methodsFor: 'displaying' stamp: 'ChristopheDemarey 2/21/2013 16:31'! asString "Pretty print to display a dependency." ^ self displayString.! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/7/2012 13:42'! dependencies ^ dependencies! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/12/2013 10:17'! dependencies: aCollection dependencies := aCollection.! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/19/2013 18:39'! displayName ^ self name! ! !MTDependency methodsFor: 'displaying' stamp: 'ChristopheDemarey 11/30/2012 17:49'! displayString "Pretty print to display a dependency." self subclassResponsibility .! ! !MTDependency methodsFor: 'initialize-release' stamp: 'TesterBob 11/27/2012 15:36'! initialize dependencies := OrderedCollection new. ! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/27/2012 11:48'! name ^ name! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/14/2012 18:19'! name: anObject name := anObject! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/11/2013 14:07'! parent ^ parent! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/11/2013 14:08'! parent: anObject parent := anObject! ! !MTDependency methodsFor: 'printing' stamp: 'ChristopheDemarey 11/30/2012 13:12'! printOn: aStream "Pretty print for dependencies" aStream nextPutAll: self name.! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/11/2013 17:23'! project | myparent | myparent := self parent. [ myparent isNotNil ] whileTrue: [ [ myparent := myparent parent ] on: MessageNotUnderstood do: [ ^ myparent ] ]. ^ myparent! ! !MTDependency methodsFor: 'protocol' stamp: 'ChristopheDemarey 9/10/2013 00:27'! remove "search if I am present in other groups and remove myself from these groups, then remove myself from project dependencies" (self project groups select: [ :aGroup | aGroup dependencies includes: name ]) do: [ :aGroup | aGroup removeDependency: name]. self project dependencies: (self project dependencies reject: [ :dep | dep = self]). self project announcer announce: (MTProjectModelChanged project: self)! ! !MTDependency methodsFor: 'protocol' stamp: 'ChristopheDemarey 9/10/2013 00:21'! removeDependency: aDependency dependencies remove: aDependency ifAbsent: [ ]! ! !MTDependency methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/21/2013 10:41'! treeNodeClass "get the Node class to use to display this dependency in a a TreeModel." self shouldBeImplemented ! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/13/2012 16:04'! version "Get the specific version used for this dependency" ^version.! ! !MTDependency methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 13:10'! version: aVersion "Set the specific version used for this dependency" version := aVersion.! ! !MTGroup commentStamp: '' prior: 81560025! A MTGroup is a convenient way to group software dependencies (instances of MTDependency). Instance Variables - dependencies : A collection of dependencies defiing the group. ! !MTGroup methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 16:49'! acceptVisitor: anMTProjectVisitor anMTProjectVisitor visitGroup: self! ! !MTGroup methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/11/2013 18:26'! addDependency: aDependency super addDependency: aDependency. self project ifNotNil: [ self project announcer announce: (MTProjectModelChanged project: self) ].! ! !MTGroup methodsFor: 'displaying' stamp: 'ChristopheDemarey 11/30/2012 17:50'! displayString ^ name! ! !MTGroup methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/21/2013 10:44'! treeNodeClass ^ VSGroupLeafNode! ! !MTPackage commentStamp: '' prior: 81560254! A MTPackage represents an internal depedency of a project, i.e a package located in the same MCPackage. Note: Metacello allows to describe external dependencies. In this case, transitive dependencies are not fetched. As this is not the good way to express dependencies, it is not supported here!!! !MTPackage methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 16:50'! acceptVisitor: anMTProjectVisitor anMTProjectVisitor visitPackage: self! ! !MTPackage methodsFor: 'displaying' stamp: 'ChristopheDemarey 1/24/2013 17:31'! displayString ^ version ifNil: [ name ] ifNotNilDo: [ :aVersion | name, ' (', aVersion author , '.', aVersion name asString, ')' ].! ! !MTPackage methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 6/21/2013 10:44'! treeNodeClass ^VSPackageLeafNode! ! !MTDevelopmentWorkfow commentStamp: '' prior: 81560614! This class is used to manage the development workflow for a dedicated project. ! !MTDevelopmentWorkfow class methodsFor: 'initialization' stamp: 'ChristopheDemarey 6/25/2013 10:00'! newWithProject: project "Create a new instance dedicated to the project given as parameter." ^ self new project: project; yourself! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 6/25/2013 10:24'! createBaseline "Create a new baseline with information given by the project" |lastBaseline baselineVersionString| lastBaseline := self configurationClass baselines detect: [:aBaseline | aBaseline isBleedingEdge]. baselineVersionString := (lastBaseline name asInteger +1) asString. ^ self createBaseline: baselineVersionString.! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 12/6/2013 16:13'! createBaseline: baselineVersionString "Create a new baseline with information given by the project" MetacelloToolBox createBaseline: baselineVersionString for: project configurationClass name repository: project repository requiredProjects: (project requiredProjects collect: [ :each | each name ]) packages: (project packages collect: [ :aPackage | aPackage name ]) repositories: (project requiredProjects collect: [ :aProject | aProject name -> (OrderedCollection with: aProject repositories) ]) dependencies: project dependenciesMap groups: (project groups collect: [ :aGroup | aGroup name -> aGroup dependencies ])! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 2/7/2014 14:21'! createInitialDevelopment "Create an initial development version for an empty configuration." ^ self createInitialDevelopment: '0.1-baseline'! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 11/21/2013 18:26'! createInitialDevelopment: versionString "Create an initial development version with an empty configuration and return the configuration class." | toolbox | toolbox := MetacelloToolBox configurationNamed: project name. "Only a static method available on the toolbox to create baselines" MetacelloToolBox createBaseline: versionString for: toolbox project configuration class name repository: project repository requiredProjects: #() packages: #() repositories: #() dependencies: #() groups: #(). toolbox symbolicVersionMethod: #development; addSymbolicSection: #common version: versionString; commitMethod. ^toolbox project configuration class! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 7/5/2013 22:24'! createNextDevelopment: newDevVersionString "Create the next baseline that will be used as development version." self createBaseline: newDevVersionString. self developmentVersion: newDevVersionString platformAttribute: #common.! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 2/6/2014 15:43'! developmentVersion ^ project configurationClass project version: #development! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 2/6/2014 13:51'! developmentVersion: devVersionString platformAttribute: platformAttribute "Set the #development symbolic version to the given version, using the given platformAttribute." (MetacelloToolBox configurationNamed: project name) symbolicVersionMethod: #development; addSymbolicSection: platformAttribute version: devVersionString; commitMethod. ! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 11/27/2013 13:10'! developmentVersionNumber: aDevelopmentVersionString | versionNumber | versionNumber := aDevelopmentVersionString copyReplaceAll: 'baseline' with: ''. versionNumber := versionNumber copyReplaceAll: '-' with: ''. ^ versionNumber! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 2/6/2014 13:58'! nextDevelopmentVersionString ^ self nextDevelopmentVersionString: self developmentVersion versionString! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 11/27/2013 13:14'! nextDevelopmentVersionString: aDevelopmentVersionString | versionNumber lastPointIndex | versionNumber := self developmentVersionNumber: aDevelopmentVersionString. lastPointIndex := versionNumber lastIndexOf: $. ifAbsent: [ nil ]. ^ lastPointIndex ifNil: [ versionNumber + 1 ] ifNotNil: [ | newMinorVersion | newMinorVersion := (versionNumber allButFirst: lastPointIndex) asInteger + 1. (versionNumber copyFrom: 1 to: lastPointIndex) , (newMinorVersion asString) ] ! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 9/16/2013 11:45'! notifyConfigurationModified (MBConfigurationRoot current configurationInfoFor: project configurationClass class) configurationClassModified! ! !MTDevelopmentWorkfow methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/25/2013 10:02'! project ^ project! ! !MTDevelopmentWorkfow methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/25/2013 10:02'! project: anObject project := anObject! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 2/7/2014 14:50'! releaseDevelopment: newDevVersionString "Release the development baseline (will give a version method) and prepare the next development baseline." | devVersionString versionName | devVersionString := self developmentVersion versionString. versionName := self developmentVersionNumber: devVersionString. MetacelloToolBox createVersion: versionName for: project name from: devVersionString description: 'version ' , versionName. self setStableBlessingFor: versionName. MetacelloToolBox stableVersion: versionName for: project name platformAttribute: #common. "keep the development version pointing to the baseline, and ..." self developmentVersion: devVersionString platformAttribute: #common. " ... create the new dev version" self createNextDevelopment: newDevVersionString. self notifyConfigurationModified.! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 2/7/2014 14:53'! setStableBlessingFor: versionName (MetacelloToolBox configurationNamed: project name) modifyVersionMethodForVersion: versionName versionSpecsDo: [ :attr :versionSpec | attr == #common ifTrue: [ versionSpec blessing: #stable ]. true ]; commitMethod! ! !MTDevelopmentWorkfow methodsFor: 'protocol' stamp: 'ChristopheDemarey 2/6/2014 13:58'! updateDevelopment "Update development baseline with information present in the project." | baseline versionString | versionString := self developmentVersion versionString. baseline := MetacelloToolBox compiledMethodForVersion: self developmentVersion. baseline methodClass class removeSelector: baseline selector. self createBaseline: versionString. self notifyConfigurationModified.! ! !MTModelComparator commentStamp: '' prior: 81560753! A comparator that can be used to compare a whole dependency graph.! !MTModelComparator class methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/12/2013 13:34'! is: anMTProject equalsTo: anOtherMTProject ^self new is: anMTProject equalsTo: anOtherMTProject! ! !MTModelComparator methodsFor: 'comparing' stamp: 'ChristopheDemarey 12/12/2013 14:52'! is: anMTProject equalsTo: anOtherMTProject | referenceModelIterator modelToCompareIterator | referenceModelIterator := MTProjectBFSIterator on: anMTProject. modelToCompareIterator := MTProjectBFSIterator on: anOtherMTProject. [ true ] whileTrue: [ | referenceElement elementToCompare | referenceElement := referenceModelIterator next. elementToCompare := modelToCompareIterator next. (referenceModelIterator next = modelToCompareIterator next) ifFalse: [ ^false ]. referenceModelIterator hasNext ifFalse: [ ^true ] ] ! ! !MTPlatform commentStamp: '' prior: 81560872! A MTPlatform reprensents targeted platforms (ex: pharo1.4.x, pharo2.x) ! !MTProject commentStamp: '' prior: 81560995! A project represents a software development project, and more presicely, its depdendencies (also known as configuration). Note: Need to add extra methods with "for:" parameter to handle platforms (e.g. for: #'pharo' do) Instance Variables - configurationClass : the configurationClass this project represents - repository : The core repository URL of this project - packages : internal packages (MTPackage) the project depends on - groups : definitions of set of dependencies (MTGroups) - depedentProjects : list of external projects this project depends on (list of project names) ! !MTProject class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 11/21/2013 17:35'! newFromVersion: aMetacelloVersion inRepository: aConfigurationClass ^ MCModel2MTModelVisitor new visitConfiguration: aConfigurationClass withVersion: aMetacelloVersion! ! !MTProject class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 11/21/2013 15:06'! newNamed: projectName withInitialVersion: version inRepository: repositoryURL "Create the skeleton of a new project (alos known as configuration)" | project | project := self new. project name: projectName. project configurationClass: project devWorkflow createInitialDevelopment. ^ project. ! ! !MTProject methodsFor: 'comparing' stamp: 'ChristopheDemarey 12/12/2013 09:38'! = other (self name = other name) ifFalse: [ ^false ]. (self version = other version) ifFalse: [ ^false ]. (self configurationClass = other configurationClass) ifFalse: [ ^false ]. (self repository = other repository) ifFalse: [ ^false ]. ^true! ! !MTProject methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 17:20'! acceptVisitor: anMTProjectVisitor anMTProjectVisitor visitProject: self. dependencies do: [ :dependency | dependency acceptVisitor: anMTProjectVisitor ]! ! !MTProject methodsFor: 'setting' stamp: 'ChristopheDemarey 12/11/2013 14:11'! addDependency: aDependency "Add a dependency to the configuration (will create a new baseline)." dependencies add: aDependency. aDependency parent: self. self announcer announce: (MTProjectModelChanged project: self).! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/23/2013 17:17'! announcer ^ announcer ifNil: [announcer := Announcer new]! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 16:17'! configurationClass ^ configurationClass! ! !MTProject methodsFor: 'protocol' stamp: 'ChristopheDemarey 3/6/2013 16:25'! configurationClass: aConfigurationClass configurationClass := aConfigurationClass. self name: configurationClass name configurationBaseName. ! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/6/2013 12:53'! currentBaseline | baselines | baselines := self configurationClass project versions select: [:aVersion | aVersion blessing == #baseline]. ^baselines last! ! !MTProject methodsFor: 'accessing' stamp: 'TesterBob 11/27/2012 15:27'! dependencies ^dependencies .! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/26/2013 18:03'! dependencies: aDependencyList dependencies := aDependencyList! ! !MTProject methodsFor: 'private' stamp: 'TesterBob 11/27/2012 15:30'! dependenciesFilteredBy: aClass "Filter dependencies to only get Class instances" ^dependencies select: [ :each | each class = aClass ].! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/25/2013 10:45'! dependenciesMap ^ self packages collect: [ :aPackage | aPackage name -> aPackage dependencies ]! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/19/2013 18:41'! dependencyNamed: aDependencyName "Get a depedency from its name" ^ dependencies detect: [ :aDependency | (aDependency name = aDependencyName) or: [ aDependency displayName = aDependencyName ] ] ifNone: [ nil ] ! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/25/2013 13:25'! devWorkflow ^ devWorkflow ifNil: [ devWorkflow := MTDevelopmentWorkfow newWithProject: self ] ifNotNil: [ :myself | myself ]! ! !MTProject methodsFor: 'accessing' stamp: 'TesterBob 11/27/2012 15:31'! groups "Filter dependencies to only get groups" ^ self dependenciesFilteredBy: MTGroup .! ! !MTProject methodsFor: 'initialize-release' stamp: 'TesterBob 11/27/2012 15:42'! initialize dependencies := OrderedCollection new. ! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/12/2012 14:05'! name ^ name! ! !MTProject methodsFor: 'accessing' stamp: 'TesterBob 11/27/2012 15:41'! name: anObject name := anObject! ! !MTProject methodsFor: 'accessing' stamp: 'TesterBob 11/27/2012 15:31'! packages "Filter dependencies to only get packages" ^ self dependenciesFilteredBy: MTPackage .! ! !MTProject methodsFor: 'protocol' stamp: 'ChristopheDemarey 6/27/2013 15:48'! removeDependencyNamed: aDependencyName "Remove a depedency from the configuration" (self dependencyNamed: aDependencyName) remove! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/30/2013 15:00'! repository ^ repository ! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/31/2013 10:54'! repository: aRepositoryURL repository := aRepositoryURL.! ! !MTProject methodsFor: 'accessing' stamp: 'TesterBob 11/27/2012 15:32'! requiredProjects "Filter dependencies to only get RquiredProject" ^ self dependenciesFilteredBy: MTDependantProject .! ! !MTProject methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/12/2012 15:04'! version ^ version! ! !MTProject methodsFor: 'setting' stamp: 'ChristopheDemarey 12/12/2012 15:03'! version: aMTVersion version := aMTVersion! ! !MTProjectBFSIterator commentStamp: '' prior: 81561647! BFS (see http://en.wikipedia.org/wiki/Breadth-first_search) iterator for an MTProject graph. We avoid to visit already visited children of a node.! !MTProjectBFSIterator class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 12/10/2013 13:43'! on: anMTProject ^ self new project: anMTProject; yourself.! ! !MTProjectBFSIterator methodsFor: 'private' stamp: 'ChristopheDemarey 12/12/2013 17:34'! hasChildNodes: aNode | dependencies | [ dependencies := aNode dependencies ] on: MessageNotUnderstood do: [ ^false ]. ^ dependencies size > 0! ! !MTProjectBFSIterator methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/11/2013 13:20'! hasNext ^ queue isEmpty not ! ! !MTProjectBFSIterator methodsFor: 'initialization' stamp: 'ChristopheDemarey 12/11/2013 11:35'! initialize queue := SharedQueue new. alreadyVisited := Set new.! ! !MTProjectBFSIterator methodsFor: 'private' stamp: 'ChristopheDemarey 12/11/2013 13:03'! isNotVisited: aNode ^ (alreadyVisited includes: aNode) not! ! !MTProjectBFSIterator methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/11/2013 13:11'! next | currentElement | currentElement := queue nextOrNil. currentElement ifNotNil: [ ((self hasChildNodes: currentElement) and: [ self isNotVisited: currentElement ]) ifTrue: [ queue nextPutAll: currentElement dependencies. alreadyVisited add: currentElement ] ]. ^ currentElement! ! !MTProjectBFSIterator methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/11/2013 13:07'! project: anMTProject project := anMTProject. self reset! ! !MTProjectBFSIterator methodsFor: 'protocol' stamp: 'ChristopheDemarey 12/11/2013 13:07'! reset self initialize. queue nextPut: project! ! !MTProjectExampleBuilder commentStamp: '' prior: 81561860! A MTProjectExampleBuilder is used to create some MTProjects with dummy data or tests purposes. ! !MTProjectExampleBuilder class methodsFor: 'building projects' stamp: 'ChristopheDemarey 12/10/2013 13:39'! projectA | project allGroup smallGroup | project := MTProject newNamed: 'A' withInitialVersion: '0.1' inRepository: 'http://smalltalkhub.com/mc/dummy/A/main'. (1 to: 5) do: [ :i | project addDependency: (MTPackage newNamed: 'PackageA' , i asString) ]. project addDependency: (MTDependantProject newNamed: 'LibXYZ'). smallGroup := MTGroup newNamed: 'SmallGroup'. project packages do: [ :package | smallGroup addDependency: package ]. project addDependency: smallGroup. allGroup := MTGroup newNamed: 'All'. allGroup addDependency: smallGroup. allGroup addDependency: project requiredProjects first. project addDependency: allGroup. ^ project! ! !MTProjectExampleBuilder class methodsFor: 'building projects' stamp: 'ChristopheDemarey 12/10/2013 13:39'! projectB | project allGroup smallGroup | project := MTProject newNamed: 'B' withInitialVersion: '0.2' inRepository: 'http://smalltalkhub.com/mc/dummy/A/main'. (1 to: 4) do: [ :i | project addDependency: (MTPackage newNamed: 'PackageA' , i asString) ]. project addDependency: (MTDependantProject newNamed: 'LibXYZ'). smallGroup := MTGroup newNamed: 'SmallGroup'. project packages do: [ :package | smallGroup addDependency: package ]. project addDependency: smallGroup. allGroup := MTGroup newNamed: 'All'. allGroup addDependency: smallGroup. project addDependency: allGroup. ^ project! ! !MTVersion commentStamp: '' prior: 81562007! A MTVersion describes a specific version of a dependency. Instance Variables - author : the version author - versionString : a version String that can be used to load the described version (e.g ConfigurationOfXXX project version: versionString) - description : the version description - timestamp : the commit time of this version - project : a reference to the described project! !MTVersion class methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 7/25/2013 15:21'! fromVersionName: aVersionName "Create a new version from a versionName (a file reference)." | version names | names := MetacelloCommonMCSpecLoader nameComponentsFrom: aVersionName. version := self new. version name: names first. version author: (names at: 2). version versionString: (names at: 3). ^ (version versionString = 0) ifTrue: [ nil ] ifFalse: [ version ] ! ! !MTVersion class methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 11/30/2012 15:57'! fromVersionString: aVersionString "Create a new version from a versionString." | version | version := self new. version versionString: aVersionString . ^ version ! ! !MTVersion methodsFor: 'as yet unclassified' stamp: 'ChristopheDemarey 12/12/2013 12:42'! = other (self name = other name) ifFalse: [ ^false ]. (self author = other author) ifFalse: [ ^false ]. (self versionString = other versionString) ifFalse: [ ^false ]. (self description = other description) ifFalse: [ ^false ]. (self timestamp = other timestamp) ifFalse: [ ^false ]. (self project = other project) ifFalse: [ ^false ]. ^true.! ! !MTVersion methodsFor: 'visiting' stamp: 'ChristopheDemarey 12/6/2013 16:54'! acceptVisitor: anMTProjectVisitor anMTProjectVisitor visitVersion: self.! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 11:44'! author ^ author! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 11:44'! author: anObject author := anObject! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 14:10'! description ^ description! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 14:10'! description: anObject description := anObject! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/7/2012 14:34'! mcVersion "Get the MetacelloMCVersion object representing this version" | configurationClass | configurationClass := project configurationClass. configurationClass project version: versionString. ! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/13/2012 16:04'! name ^name.! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 11:39'! name: aName name := aName.! ! !MTVersion methodsFor: 'printing' stamp: 'ChristopheDemarey 11/30/2012 16:26'! printOn: aStream "Pretty print for a version" aStream "nextPutAll: name ; nextPut: $- ; nextPutAll: author ; nextPut: $. ;" nextPutAll: versionString asString .! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/30/2012 16:15'! project "Get the project this version is refering to. May be a project or a required project" ^ project! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 14:10'! timestamp ^ timestamp! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/15/2013 14:10'! timestamp: anObject timestamp := anObject! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 7/25/2013 15:23'! versionString ^ versionString! ! !MTVersion methodsFor: 'accessing' stamp: 'ChristopheDemarey 12/13/2012 16:08'! versionString: aVersionString versionString := aVersionString. name := aVersionString.! ! !TagMorphFactory commentStamp: '' prior: 81562451! A TagMorph is a morph used to define some tags. It uses a rounded rectancle with a text inside. self example! !TagMorphFactory class methodsFor: 'example' stamp: 'ChristopheDemarey 10/22/2013 16:32'! example (TagMorphFactory newTag: 'development') morph openInHand ! ! !TagMorphFactory class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 10/22/2013 16:32'! newTag: aText ^ self new text: aText; yourself.! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 17:48'! color ^ color ifNil: [ Color green ]! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 17:47'! color: aColor color := aColor! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 18:13'! font ^ (LogicalFont familyName: TextStyle defaultFont familyName pointSize: 8) emphasis: 1.! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 18:12'! height ^ 12! ! !TagMorphFactory methodsFor: 'protocol' stamp: 'ChristopheDemarey 10/16/2013 18:12'! morph | textMorph width | textMorph := self textMorph. width := textMorph width + 10. ^ BorderedMorph new extent: width @ self height; borderWidth: 1; color: self color; useRoundedCorners; addMorphCentered: textMorph; yourself! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 17:46'! text ^ text! ! !TagMorphFactory methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/16/2013 17:47'! text: aString text := aString! ! !TagMorphFactory methodsFor: 'private' stamp: 'ChristopheDemarey 10/16/2013 17:59'! textMorph ^ text asMorph font: self font; yourself.! ! !VSCommand commentStamp: '' prior: 81562612! VSCommand is a command design pattern for capturing actions.! !VSCommand class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 8/28/2013 15:11'! target: target for: requestor ^ self new target: target; requestor: requestor; yourself! ! !VSCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 9/17/2013 15:47'! chooseRepositoryFromList: repositories repositories size > 1 ifTrue: [ ^ UIManager default chooseFrom: (repositories collect: [ :repository | repository description ]) values: repositories title: 'Select repository' ]. ^ repositories first! ! !VSCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 8/28/2013 15:02'! execute self subclassResponsibility ! ! !VSCommand methodsFor: 'ordering' stamp: 'ChristopheDemarey 9/17/2013 15:12'! order ^ self title! ! !VSCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 8/28/2013 17:31'! repositoryOfPackageNamed: packageName "Return the repository of the package given as parameter. Create one (using UI) if necessary" | mcPackage workingCopy repositories repository repositoryIndex | mcPackage := MCPackage named: packageName. workingCopy := mcPackage workingCopy. repositories := workingCopy repositoryGroup repositories reject: [ :rep | rep == MCCacheRepository default ]. repositories ifEmpty: [ repository := NautilusMonticello new newRepository. workingCopy repositoryGroup addRepository: repository. ]. repositories size > 1 ifTrue: [ repositoryIndex := self uiManager chooseFrom: (repositories collect: #printString). repositoryIndex = 0 ifTrue: [ ^ nil ]. repository := repositories at: repositoryIndex ]. repositories size = 1 ifTrue: [ repository := repositories first ]. ^ repository! ! !VSCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/28/2013 15:03'! requestor ^ requestor! ! !VSCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/28/2013 15:03'! requestor: anObject requestor := anObject! ! !VSCommand methodsFor: 'ui' stamp: 'ChristopheDemarey 9/17/2013 11:48'! showExecuteWhile: aBlock ^Cursor execute showWhile: aBlock! ! !VSCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/28/2013 15:03'! target ^ target! ! !VSCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 8/28/2013 17:33'! target: aConfigurationClass target := aConfigurationClass! ! !VSConfigurationCommand commentStamp: '' prior: 81562737! A command that apply to a project configuration.! !VSBrowseConfigurationCommand commentStamp: '' prior: 81562856! Browse the configuration class.! !VSBrowseConfigurationCommand methodsFor: 'execute' stamp: 'dkh 4/7/2011 00:29'! execute self configurationClass browse! ! !VSBrowseConfigurationCommand methodsFor: 'accessing' stamp: 'AlexandreBergel 4/15/2011 09:26'! title ^ 'browse configuration'! ! !VSConfigurationCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/7/2014 09:54'! configurationClass ^ target configurationClass! ! !VSLoadProjectCommand commentStamp: '' prior: 81562950! Load a project configuration into the image. The project should have a configuration class. It will always load the latest version of the configuration package.! !VSLoadProjectCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 9/18/2013 11:50'! askProjectName ^ UIManager default request: 'Enter a project name'! ! !VSLoadProjectCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 9/18/2013 11:52'! configurationNameForProject: aProjectName ^ 'ConfigurationOf', aProjectName! ! !VSLoadProjectCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 9/18/2013 16:18'! execute | mcRepository projectName configurationName | mcRepository := NautilusMonticello new newRepository. (mcRepository isNil or: [ mcRepository location isEmpty ]) ifTrue: [ ^ self ]. projectName := ([ mcRepository project ] on: Error do: [ UIManager default request: 'Enter the name of the project to load' ]) value. (projectName isNil or: [ projectName isEmpty ]) ifTrue: [ ^ self ]. configurationName := self configurationNameForProject: projectName. [ Gofer new url: mcRepository location; package: configurationName; load ] on: Error do: [ :ex | self inform: 'Cannot find the repository or the configuration. Please check'. ^ self ].! ! !VSLoadProjectCommand methodsFor: 'accessing' stamp: 'AlexandreBergel 5/18/2011 19:05'! title ^ 'load project'! ! !VSUnloadConfigurationCommand commentStamp: '' prior: 81563181! Unload the package with the selected configuration.! !VSUnloadConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 9/18/2013 16:07'! execute | answer | answer := UIManager default confirm: 'Are you sure you want to unload ' , target name. answer ifTrue: [ self halt. target workingCopy unload ]! ! !VSUnloadConfigurationCommand methodsFor: 'accessing' stamp: 'dkh 2/27/2011 23:26'! title ^ 'unload'! ! !VSUpdateFromItsRepositoryCommand commentStamp: '' prior: 81563307! Update the configuration from the version contained in its repository.! !VSUpdateFromItsRepositoryCommand methodsFor: 'execute' stamp: 'dkh 3/2/2011 16:50'! execute "use the Metacello api" target project updateProject. ! ! !VSUpdateFromItsRepositoryCommand methodsFor: 'accessing' stamp: 'fds 2/27/2011 10:48'! title ^ 'update from its repository'! ! !VSValidateConfigurationCommand commentStamp: '' prior: 81563450! This command allows you to check inconsistencies in a Configuration class.! !VSValidateConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/7/2014 14:19'! execute | result | result := self validate. result ifEmpty: [ UIManager default inform: 'The configuration is correctly defined'. ^ self ]. UIManager default inform: 'Issues were found'. result := result collect: [ :each | each explanation ]. result explore! ! !VSValidateConfigurationCommand methodsFor: 'accessing' stamp: 'fds 2/27/2011 10:49'! title ^ 'validate'! ! !VSValidateConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/18/2012 11:44'! validate self showExecuteWhile: [ ^ target validateFull ]! ! !VSDevCycleCommands commentStamp: '' prior: 81563585! Versionnner commands related to the development workflow.! !VSDevCycleCommands methodsFor: 'private' stamp: 'ChristopheDemarey 2/6/2014 15:14'! createDevelopmentVersion | workflow newDevVersionString | workflow := target. newDevVersionString := UIManager default request: 'No development version found!!' , Character cr asString , 'Version number for the next development version' initialAnswer: 1.0 title: 'Create a development version'. newDevVersionString ifNotNil: [ workflow createNextDevelopment: newDevVersionString ]! ! !VSReleaseDevelopmentVersionCommand commentStamp: '' prior: 81563719! Turn the version into a release. It therefore appears as #stable afterward". ! !VSReleaseDevelopmentVersionCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/6/2014 15:29'! execute | message workflow newDevVersion | "message := self uiManager multilineRequest: 'Enter commit message' initialAnswer: ''. message == nil ifTrue: [ ^ self ]." workflow := target. [ workflow developmentVersion ] on: MetacelloVersionDoesNotExistError do: [ UIManager default inform: 'Cannot find a development version for this project!!'. ^ self ]. newDevVersion := UIManager default request: 'Version number for the next development version' initialAnswer: workflow nextDevelopmentVersionString title: 'Next version'. newDevVersion ifNotNil: [ workflow releaseDevelopment: (self standardizeDevVersionString: newDevVersion) ]! ! !VSReleaseDevelopmentVersionCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 11/27/2013 11:21'! standardizeDevVersionString: aDevVersionString aDevVersionString := aDevVersionString copyReplaceAll: 'baseline-' with: ''. aDevVersionString := aDevVersionString copyReplaceAll: '-baseline' with: ''. aDevVersionString := aDevVersionString copyReplaceAll: 'baseline' with: ''. ^ aDevVersionString , '-baseline'! ! !VSReleaseDevelopmentVersionCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/6/2014 13:09'! title ^ 'release from development version'! ! !VSUpdateDevelopmentVersionCommand commentStamp: 'ChristopheDemarey 2/6/2014 13:29' prior: 81563892! Update the current development version with infomation provided by the project. ! !VSUpdateDevelopmentVersionCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/6/2014 15:23'! execute | workflow | workflow := target. [ workflow developmentVersion ] on: MetacelloVersionDoesNotExistError do: [ self createDevelopmentVersion ]. workflow updateDevelopment.! ! !VSUpdateDevelopmentVersionCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/6/2014 13:29'! title ^ 'Update development version'! ! !VSOpenRepositoryCommand commentStamp: '' prior: 81564038! Open an inspector on the remote repository.! !VSOpenRepositoryCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 9/17/2013 18:24'! execute self repository ifNil: [ UIManager default inform: 'No repository associated to this configuration' ] ifNotNilDo: [ :repository | repository morphicOpen ]! ! !VSOpenRepositoryCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 9/17/2013 18:23'! repository ^ (target repositories) ifNil: [ nil ] ifNotNilDo: [ :repos |self chooseRepositoryFromList: repos ] ! ! !VSOpenRepositoryCommand methodsFor: 'accessing' stamp: 'dkh 03/12/2011 02:36'! title ^ 'open repository'! ! !VSVersionCommand commentStamp: '' prior: 81564140! A command that apply to a project version.! !VSBrowseVersionCommand commentStamp: '' prior: 81564247! Open a browser on the selected version of a configuration. The receiver is a aCompiledMethod.! !VSBrowseVersionCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 8/28/2013 17:47'! execute "I expect that target is an MCVersion" | cm | cm := MetacelloToolBox compiledMethodForVersion: target. Smalltalk tools browser fullOnClass: cm methodClass selector: cm selector! ! !VSBrowseVersionCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/24/2013 18:03'! title ^ 'browse version'! ! !VSLoadCommand commentStamp: '' prior: 81564396! Load into your image the selected version or baseline. If you already have a version installed, then it will be simply overriden! !VSLoadCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/24/2013 17:52'! execute | answer | answer := UIManager default confirm: 'Are you sure you want to load ', target name. answer ifTrue: [ target version load: target version defaultPackageNamesToLoad ]! ! !VSLoadCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:15'! title ^ 'load version'! ! !VSRemoveCommand commentStamp: '' prior: 81564582! Remove from the configuration the selected version or baseline! !VSRemoveCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 10/25/2013 18:20'! execute "Remove from the configuration class what is selected in the versions panel list" | answer imported | imported := Set new. self configurationClass project versions do: [ :version | imported addAll: version importedVersions ]. (imported includes: target versionString) ifTrue: [ ^ UIManager default inform: 'The version ' , target printString , ' is imported by another version. You must remove the import reference before you can remove this version.' ]. answer := UIManager default confirm: 'Are you sure you want to remove ' , target printString , ' from ' , self configurationClass name , '?'. answer ifTrue: [ | cm | self configurationClass project symbolicVersionSymbols do: [ :symbolicVersion | (MetacelloToolBox configurationNamed: self configurationClass name asString) modifySymbolicVersionMethodFor: symbolicVersion symbolicVersionSpecsDo: [ :symbolicVersionSpec | symbolicVersionSpec versionString = target versionString ifTrue: [ symbolicVersionSpec versionString: #notDefined ]. true ]; commitMethod ]. cm := MetacelloToolBox compiledMethodForVersion: target version. cm methodClass removeSelector: cm selector ]! ! !VSRemoveCommand methodsFor: 'accessing' stamp: 'dkh 3/20/2011 16:16'! title ^ 'remove version'! ! !VSSaveProjectCommand commentStamp: '' prior: 81564707! A command to save all dirty packages of a project, including the configuration.! !VSSaveProjectCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 1/21/2014 17:21'! alertValidationErrors: errors for: configClassName | message | message := 'There are critical issues in configuration ' , configClassName printString, '. Configuration not saved!!' , Character cr asString. errors do: [ :error | message := message , Character cr asString, error asString ]. UIManager default alert: message title: 'Critical Issues'! ! !VSSaveProjectCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 1/21/2014 17:23'! execute | configClassName | target ifNil: [ self inform: 'Select the version to commit.'. ^ self ]. configClassName := self configurationClass name asString. (MetacelloToolBox checkForCriticalValidationIssues: configClassName) ifEmpty: [ Komitter openAndCommitToMonticelloWorkingCopiesFilteredBy: self filterBlock ] ifNotEmptyDo: [ :errors | self alertValidationErrors: errors for: configClassName ] ! ! !VSSaveProjectCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 1/13/2014 16:57'! filterBlock | project packageNames | project := target. packageNames := project packages collect: [ :package | package name ]. packageNames add: project configurationClass name asString. ^ [ :workingCopy | packageNames includes: workingCopy package name ] ! ! !VSSetDescriptionCommand commentStamp: '' prior: 81564852! Set the description on the selected development version! !VSSetDescriptionCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 11/21/2013 14:11'! execute | message | message := UIManager default multilineRequest: 'Enter description' initialAnswer: ''. (message isNil or: [ message isEmpty ]) ifTrue: [ ^ self ]. self executeWithMessage: message! ! !VSSetDescriptionCommand methodsFor: 'execute' stamp: 'AlexandreBergel 4/15/2011 10:29'! executeWithMessage: message | toolbox updatedSpecs | toolbox := MetacelloToolBox configurationNamed: target configurationBasename. toolbox updateVersionMethodForVersion: target version versionString updateProjects: false updatePackages: false versionSpecsDo: [ :attribute :versionSpec | attribute == #common ifTrue: [ "update the author, description and timeStamp" versionSpec author: MetacelloPlatform current authorName; timestamp: MetacelloPlatform current timestamp. MetacelloToolBox appendDescription: message to: versionSpec ]. true ]. toolbox commitMethod ! ! !VSSetDescriptionCommand methodsFor: 'accessing' stamp: 'dkh 3/2/2011 19:55'! title ^ 'set description'! ! !VSVersionCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 10/25/2013 18:20'! configurationClass ^ target configurationClass! ! !VersionnerRepositoriesManager commentStamp: 'ChristopheDemarey 1/17/2014 16:28' prior: 81565000! A VersionnerRepositoriesManager allows to select / deselect / add new repositories. The UI is shared with Komitter.! !VersionnerRepositoriesManager class methodsFor: 'instance creation' stamp: 'ChristopheDemarey 1/17/2014 17:48'! newWithPackage: aPackageName | repoManager | repoManager := self new. aPackageName ifNotNil: [ repoManager packageName: aPackageName; initializeSelectedRemotes; yourself ]. ^ repoManager! ! !VersionnerRepositoriesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/17/2014 15:47'! initialize super initialize. remotesUI := RemotesManager new.! ! !VersionnerRepositoriesManager methodsFor: 'initialization' stamp: 'ChristopheDemarey 1/17/2014 19:36'! initializeSelectedRemotes | workingCopy | workingCopy := MCWorkingCopy allManagers detect: [ :wc | wc package name = packageName ]. remotesUI selectedRemotes: workingCopy repositoryGroup repositories. remotesUI initializeWidgets. remotesUI initializePresenter ! ! !VersionnerRepositoriesManager methodsFor: 'ui' stamp: 'ChristopheDemarey 1/17/2014 16:27'! open | dialog | dialog := remotesUI openDialogWithSpec. dialog okAction: [ ]! ! !VersionnerRepositoriesManager methodsFor: 'accessing' stamp: 'ChristopheDemarey 1/17/2014 10:36'! packageName: aString packageName := aString! ! !VersionnerRepositoriesManager methodsFor: 'protocol' stamp: 'ChristopheDemarey 1/17/2014 15:11'! selectedChangedBlock: aBlock remotesUI selectedChangedBlock: aBlock! ! "Versionner-Core-Announcements"! "Versionner-Core-Commands"! "Versionner-Core-DependenciesModel"! "Versionner-Core-Model"! "Versionner-Help"! "Versionner-Spec-Browser"! "Versionner-Tests-Core-Commands"! "Versionner-Tests-Core-DependenciesModel"! "Versionner-Tests-Core-Model"! "Versionner-Tests-Resources"! ----End fileIn----! ----QUIT----2014-02-07T17:05:50.427221+01:00 Pharo.image priorSource: 31208160! ----STARTUP----2014-02-07T17:05:50.665557+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-07T17:05:55.449562+01:00 Pharo.image priorSource: 31658607! ----STARTUP----2014-02-07T17:11:21.795279+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-07T17:11:22.064129+01:00 Pharo-30750.image priorSource: 31658804! ----STARTUP----2014-02-08T10:09:56.576538+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/8/2014 10:06' prior: 81540109! commentForCurrentUpdate ^ '12833 IconicListItem does not give visual feedback about the enablement status https://pharo.fogbugz.com/f/cases/12833 12628 KeyNotFound in RPackage>>methods in the presence of anonymous classes https://pharo.fogbugz.com/f/cases/12628 12739 Class definition NOT available in the "Recover Lost Changes" tool https://pharo.fogbugz.com/f/cases/12739 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/8/2014 10:06'! script404 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.257.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.678.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.340.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.138.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.407.mcz SlotTests-MarcusDenker.74.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-SvenVanCaekenberghe.1409.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-EstebanLorenzano.6.mcz Versionner-Core-Commands-EstebanLorenzano.39.mcz Versionner-Core-DependenciesModel-EstebanLorenzano.68.mcz Versionner-Core-Model-EstebanLorenzano.35.mcz Versionner-Help-EstebanLorenzano.4.mcz Versionner-Spec-Browser-EstebanLorenzano.108.mcz Versionner-Tests-Core-Commands-EstebanLorenzano.8.mcz Versionner-Tests-Core-DependenciesModel-EstebanLorenzano.30.mcz Versionner-Tests-Core-Model-EstebanLorenzano.12.mcz Versionner-Tests-Resources-EstebanLorenzano.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/8/2014 10:06'! update30751 "self new update30751" self withUpdateLog: '12833 IconicListItem does not give visual feedback about the enablement status https://pharo.fogbugz.com/f/cases/12833 12628 KeyNotFound in RPackage>>methods in the presence of anonymous classes https://pharo.fogbugz.com/f/cases/12628 12739 Class definition NOT available in the "Recover Lost Changes" tool https://pharo.fogbugz.com/f/cases/12739 '. self loadTogether: self script404 merge: false. self flushCaches. ! ! "ScriptLoader30"! !DoItDeclaration methodsFor: 'importing' stamp: 'MartinDias 2/7/2014 16:11' prior: 45082260! importFor: requestor self flag: #fixme. "Ugly hack to parse preamble and postcript as a do it." ((contents beginsWith: '"Change Set:') and: [ ChangeSet current preambleString isNil ]) ifTrue: [ ChangeSet current preambleString: contents ]. ((contents beginsWith: '"Postscript:') and: [ ChangeSet current postscriptString isNil ]) ifTrue: [ ChangeSet current postscriptString: contents ]. ^Smalltalk compiler class new source: contents; requestor: requestor; logged: true; evaluate.! ! !Form methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 2/7/2014 15:20'! asAlphaImageMorph ^ AlphaImageMorph new image: self! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'ThierryGoubier 2/7/2014 11:51' prior: 80320890! systemMethodRecategorizedActionFrom: ann "a protocol has been renamed a method has been removed. // WILL BE TREATED WITH SystemMethodRemovedAnnouncement a method has been moved to another category -maybe from the classic category to an extending package -maybe from an extending package to another extending package -maybe from an extending package to a classic category - maybe from a classic category to another classic category. Get out of here if my organizer has no package for the class!! (Anonymous classes)" | oldProtocol newProtocol method methodPackage destinationPackage | method := ann methodRecategorized. method ifNil: [ ^ self ]. method origin = ann methodClass ifFalse: [ ^ self]. (self packageOfClassNamed: ann methodClass name) ifNil: [ ^ self ]. newProtocol := ann newProtocol. newProtocol ifNil: [ ^ self ]. oldProtocol := ann oldProtocol ifNil: [ '' ]. methodPackage := method packageFromOrganizer: self. newProtocol asLowercase = oldProtocol asLowercase ifFalse: [ destinationPackage := (self hasPackageForProtocol: newProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: newProtocol inClass: method methodClass ] ifFalse: [ (newProtocol beginsWith: '*') ifTrue: [ self ensureExistAndRegisterPackageNamed: newProtocol allButFirst capitalized ] ifFalse: [ method methodClass package ] ]. methodPackage := (self hasPackageForProtocol: oldProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: oldProtocol inClass: method methodClass ] ifFalse: [ method methodClass package ]. methodPackage = destinationPackage ifFalse: [ (methodPackage methods includes: method) ifTrue: [ methodPackage removeMethod: method ]. destinationPackage addMethod: method. SystemAnnouncer uniqueInstance methodRepackaged: method from: methodPackage to: destinationPackage ] ]! ! !RPackageTest methodsFor: 'tests' stamp: 'ThierryGoubier 2/7/2014 11:48'! testAnonymousClassAndSelector "jgeidel test case from issue 12628." "Make sure we don't have a registration or a package for the method." | ghost method uPackage | ghost := Object newAnonymousSubclass. uPackage := self organizer packageNamed: #_UnpackagedPackage. method := ghost compiler compile: 'rpackagetest'. ghost addSelector: #rpackagetest withMethod: method. self deny: (uPackage includesDefinedSelector: #rpackagetest ofClass: ghost). self deny: (self organizer packageOfClassNamed: ghost name) notNil. ghost organization classify: #rpackagetest under: '*rpackagetest'! ! !Object methodsFor: '*Morphic-Base' stamp: 'BenjaminVanRyseghem 2/7/2014 15:19'! asAlphaImageMorph ^ self asMorph! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 2/7/2014 15:21' prior: 79753173! text: aText icon: form | morph | aText ifNotNil: [ morph := aText asMorph lock; yourself ]. ^ self new morph: morph; icon: form asAlphaImageMorph; yourself! ! "CodeImport"! "Morphic-Base"! "Polymorph-Widgets"! "RPackage-SystemIntegration"! "RPackage-Tests"! ----End fileIn----! ----QUIT----2014-02-08T10:10:06.080605+01:00 Pharo.image priorSource: 31659001! ----STARTUP----2014-02-08T10:10:06.28954+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-08T10:10:10.609535+01:00 Pharo.image priorSource: 31675741! ----STARTUP----2014-02-08T10:15:38.104214+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-08T10:15:38.372215+01:00 Pharo-30751.image priorSource: 31675937! ----STARTUP----2014-02-09T12:35:45.202345+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/9/2014 12:31' prior: 81990946! commentForCurrentUpdate ^ '12830 MethodFinderTest>>testPower https://pharo.fogbugz.com/f/cases/12830 11579 When adding a class variable, the monticello package is not dirty https://pharo.fogbugz.com/f/cases/11579 12500 No accept/ok button in FileList https://pharo.fogbugz.com/f/cases/12500 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/9/2014 12:32'! script405 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.257.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.678.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.468.mcz OpalCompiler-Tests-MarcusDenker.229.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-SvenVanCaekenberghe.340.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.138.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-EstebanLorenzano.6.mcz Versionner-Core-Commands-EstebanLorenzano.39.mcz Versionner-Core-DependenciesModel-EstebanLorenzano.68.mcz Versionner-Core-Model-EstebanLorenzano.35.mcz Versionner-Help-EstebanLorenzano.4.mcz Versionner-Spec-Browser-EstebanLorenzano.108.mcz Versionner-Tests-Core-Commands-EstebanLorenzano.8.mcz Versionner-Tests-Core-DependenciesModel-EstebanLorenzano.30.mcz Versionner-Tests-Core-Model-EstebanLorenzano.12.mcz Versionner-Tests-Resources-EstebanLorenzano.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/9/2014 12:32'! update30752 "self new update30752" self withUpdateLog: '12830 MethodFinderTest>>testPower https://pharo.fogbugz.com/f/cases/12830 11579 When adding a class variable, the monticello package is not dirty https://pharo.fogbugz.com/f/cases/11579 12500 No accept/ok button in FileList https://pharo.fogbugz.com/f/cases/12500 '. self loadTogether: self script405 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ClassModification commentStamp: '' prior: 42172409! I represent a modification in a class. ! !FileList class methodsFor: 'modal dialogs' stamp: 'NicolaiHess 2/8/2014 00:10' prior: 21900131! modalFolderSelector: aDir | window fileModel | window := self morphicViewFolderSelector: aDir. fileModel := window model. window openInWorld: self currentWorld extent: 300@400. World openModal: window. ^fileModel getSelectedFolder! ! !FileList class methodsFor: 'morphic ui' stamp: 'NicolaiHess 2/8/2014 00:29' prior: 74083582! morphicViewFolderSelector: aDir "Answer a tool that allows the user to select a folder" | window buttonRow fileListTopOffset aFileList | aFileList := self new directory: aDir. aFileList optionalButtonSpecs: aFileList servicesForFolderSelector. window := (SystemWindow labelled: aDir fullName) model: aFileList. aFileList modalView: window. buttonRow := aFileList folderSelectButtonRow. aFileList universalButtonServices do: [:service | buttonRow addMorphBack: (service buttonToTriggerIn: self)]. fileListTopOffset := (TextStyle defaultFont pointSize * 2) + 11. self addFullPanesTo: window from: { {aFileList morphicDirectoryTreePane. (0@0 corner: 1@1) asLayoutFrame topOffset: (fileListTopOffset)}. {buttonRow . (0@0 corner: 1@0) asLayoutFrame bottomOffset: (fileListTopOffset-3)}. }. aFileList postOpen. ^ window ! ! !FileList methodsFor: 'file menu action' stamp: 'NicolaiHess 2/8/2014 00:27' prior: 21863176! addNew: aString byEvaluating: aBlock "A parameterization of earlier versions of #addNewDirectory and #addNewFile. Fixes the bug in each that pushing the cancel button in the FillInTheBlank dialog gave a walkback." | response newName index | self okToChange ifFalse: [^ self]. (response := UIManager default request: ('New {1} Name?' translated format: {aString translated}) initialAnswer: ('{1}Name' translated format: {aString translated})) isEmptyOrNil ifTrue: [^ self]. newName := response asFileName. Cursor wait showWhile: [ aBlock value: newName]. self updateFileList. self updateDirectory. list ifNotNil:[ index := list indexOf: newName. index = 0 ifTrue: [ index := list findFirst: [:line | line basename endsWith: newName]]. self fileListIndex: index.] ! ! !FileList methodsFor: 'initialization' stamp: 'NicolaiHess 2/7/2014 23:51'! folderSelectButtonRow "Answer the button row used for folder selection" | aRow | aRow := AlignmentMorph newRow beSticky. aRow color: Color transparent. aRow clipSubmorphs: true. aRow layoutInset: 0@0; cellInset: 6. aRow setNameTo: 'buttons'. ^ aRow! ! !FileList methodsFor: 'private' stamp: 'NicolaiHess 2/8/2014 00:10'! getSelectedFolder "Answer the selected folder or nil if dialog was canceled" ok ifFalse: [ ^ nil ]. ^ self directory! ! !FileList methodsFor: 'private' stamp: 'NicolaiHess 2/8/2014 01:02' prior: 21893890! updateFileList "Update my files list with file names in the current directory that match the pattern. The pattern string may have embedded newlines or semicolons; these separate different patterns." list := grid ifNil:[#()] ifNotNil:[self listForPattern: pattern]. listIndex := self getListIndex. volumeListIndex := volumeList size. contents := ''. self changed: #volumeListIndex. self changed: #fileList. self grid updateList. self updateButtonRow! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 2/7/2014 17:04' prior: 43906253! apply: classModification "HELP ME" classModification modifiesSlots ifTrue: [self applySlotChange: classModification] ifFalse: [ classModification modifiesFormat ifTrue: [ self applyFormatChange: classModification] ifFalse: [ classModification modifiesSuperclass ifTrue: [ self applySuperclassChange: classModification ] ifFalse: [ (classModification modifiesSharedPools or: [ classModification modifiesSharedVariables ]) ifTrue: [ self applySharedVariableOrPoolChange: classModification ] ifFalse: [ "Note: In the other cases of this evil if nesting, the trait composition is setted by the installer." ^ self installTraitComposition: classModification ] ]]]. self migrateClasses: classModification; cleanUp! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 2/7/2014 16:59'! applyAndUpdateSharedVariableOrSharedPool: classModification ^ self track: classModification during: [ :old :new | installer classDefinitionChangedFrom: old to: new by: classModification ].! ! !SlotClassBuilder methodsFor: 'private' stamp: 'MartinDias 2/7/2014 16:58'! applySharedVariableOrPoolChange: classModification "This method updates both shared variables and shared pools since they use the same mechanism" result := self applyAndUpdateSharedVariableOrSharedPool: classModification. classModification allPropagationsDo: [ :propagation | self applyAndUpdateSharedVariableOrSharedPool: propagation ]! ! !SlotClassBuilder methodsFor: 'initialize-release' stamp: 'MartinDias 2/7/2014 17:16' prior: 80921130! build | oldClass metaChange classChange | result := oldClass := installer classAt: name ifAbsent: [ ^ self buildNewClass ]. self validateSuperChain: oldClass. metaChange := ClassModification modify: oldClass class extend: self superMetaclass withLayoutType: FixedLayout slots: classSlots sharedVariables: '' sharedPools: '' traitComposition: classTraitComposition compactClassIndex: oldClass class indexIfCompact. classChange := ClassModification modify: oldClass extend: superclass withLayoutType: self layoutClass slots: slots sharedVariables: sharedVariablesString sharedPools: sharedPoolsString traitComposition: traitComposition compactClassIndex: oldClass indexIfCompact. self apply: metaChange. self apply: classChange. result instanceSide declare: sharedVariablesString; sharing: sharedPoolsString. result isMeta ifFalse: [ installer recategorize: result to: category ]. ^ result instanceSide! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 2/7/2014 17:35'! testChangeInSharedPoolShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class" aClass := self make: [ :builder | builder name: self aClassName ]. self assert: self collectedAnnouncements size equals: 0. "Modify the class" aClass := self make: [ :builder | builder name: self aClassName; sharedPools: 'TestSharedPool' ]. self assert: self collectedAnnouncements size equals: 1. self assert: self collectedAnnouncements first newClassDefinition equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 2/7/2014 17:36'! testChangeInSharedVariablesAndSharedPoolsShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class" aClass := self make: [ :builder | builder name: self aClassName ]. self assert: self collectedAnnouncements size equals: 0. "Modify the class" aClass := self make: [ :builder | builder name: self aClassName; sharedPools: 'TestSharedPool'; sharedVariables: 'A B' ]. self assert: self collectedAnnouncements size equals: 1. self assert: self collectedAnnouncements first newClassDefinition equals: aClass.! ! !SlotAnnouncementsTest methodsFor: 'tests' stamp: 'MartinDias 2/7/2014 17:36'! testChangeInSharedVariablesShouldAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class" aClass := self make: [ :builder | builder name: self aClassName ]. self assert: self collectedAnnouncements size equals: 0. "Modify the class" aClass := self make: [ :builder | builder name: self aClassName; sharedVariables: 'A B C' ]. self assert: self collectedAnnouncements size equals: 1. self assert: self collectedAnnouncements first newClassDefinition equals: aClass.! ! !MethodFinder methodsFor: 'initialize' stamp: 'BenComan 2/7/2014 23:49' prior: 80410886! initialize "The methods we are allowed to use. (MethodFinder new initialize) " super initialize. Approved := Set new. AddAndRemove := Set new. Blocks := Set new. "These modify an argument and are not used by the MethodFinder: longPrintOn: printOn: storeOn: sentTo: storeOn:base: printOn:base: absPrintExactlyOn:base: absPrintOn:base: absPrintOn:base:digitCount: writeOn: writeScanOn: possibleVariablesFor:continuedFrom: printOn:format:" "Object" #("in class, instance creation" newFrom: "accessing" at: basicAt: basicSize in: size yourself "testing" ifNil: ifNil:ifNotNil: ifNotNil: ifNotNil:ifNil: isColor isFloat isFraction isInteger isMorph isNil isNumber isPoint isText isTransparent isWebBrowser notNil pointsTo: wantsSteps "comparing" = == hash identityHash ~= ~~ "copying" copy shallowCopy "dependents access" canDiscardEdits dependents hasUnacceptedEdits "updating" changed changed: okToChange update: windowIsClosing "printing" fullPrintString isLiteral longPrintString printString storeString "class membership" class isKindOf: isMemberOf: respondsTo: "error handling" "user interface" addModelMenuItemsTo:forMorph:hand: defaultBackgroundColor defaultLabel fullscreenSize initialExtent modelWakeUp "system primitives" instVarAt: instVarNamed: "private" "associating" -> "converting" as: asOrderedCollection asString "casing" caseOf: caseOf:otherwise: "binding" bindingOf: "macpal" contentsChanged currentEvent currentHand currentWorld flash "flagging" flag: "translation support" "objects from disk" "finalization" ) do: [:sel | Approved add: sel]. #(at:add: at:put: basicAt:put: "NOT instVar:at:" "message handling" perform: perform:orSendTo: perform:with: perform:with:with: perform:with:with:with: perform:withArguments: perform:withArguments:inSuperclass: ) do: [:sel | AddAndRemove add: sel]. "Boolean, True, False, UndefinedObject" #("logical operations" & eqv: not xor: | "controlling" and: ifFalse: ifFalse:ifTrue: ifTrue: ifTrue:ifFalse: or: "copying" "testing" isEmptyOrNil) do: [:sel | Approved add: sel]. "Behavior" #("initialize-release" "accessing" format methodDict sourceCodeTemplate subclassDefinerClass "testing" instSize instSpec isBits isBytes isFixed isPointers isVariable isWeak isWords "copying" "printing" printHierarchy "creating class hierarchy" "creating method dictionary" "instance creation" basicNew basicNew: new new: "accessing class hierarchy" allSubclasses allSubclassesWithLevelDo:startingLevel: allSuperclasses subclasses superclass withAllSubclasses withAllSuperclasses "accessing method dictionary" allSelectors changeRecordsAt: compiledMethodAt: compiledMethodAt:ifAbsent: firstCommentAt: lookupSelector: selectors selectorsDo: selectorsWithArgs: "slow but useful ->" sourceCodeAt: sourceCodeAt:ifAbsent: sourceMethodAt: sourceMethodAt:ifAbsent: "accessing instances and variables" allClassVarNames allInstVarNames allSharedPools classVarNames instVarNames instanceCount sharedPools someInstance subclassInstVarNames "testing class hierarchy" inheritsFrom: kindOfSubclass "testing method dictionary" canUnderstand: classThatUnderstands: hasMethods includesSelector: whichClassIncludesSelector: whichSelectorsAccess: whichSelectorsReferTo: whichSelectorsReferTo:special:byte: whichSelectorsStoreInto: "enumerating" "user interface" "private" indexIfCompact) do: [:sel | Approved add: sel]. "ClassDescription" #("initialize-release" "accessing" isMeta name theNonMetaClass "copying" "printing" classVariablesString instanceVariablesString sharedPoolsString "instance variables" checkForInstVarsOK: "method dictionary" "organization" category organization whichCategoryIncludesSelector: "compiling" acceptsLoggingOfCompilation wantsChangeSetLogging "fileIn/Out" definition "private" ) do: [:sel | Approved add: sel]. "Class" #("initialize-release" "accessing" classPool "testing" "copying" "class name" "instance variables" "class variables" classVarAt: classVariableAssociationAt: "pool variables" "compiling" "subclass creation" "fileIn/Out" ) do: [:sel | Approved add: sel]. "Metaclass" #("initialize-release" "accessing" isSystemDefined soleInstance "copying" "instance creation" "instance variables" "pool variables" "class hierarchy" "compiling" "fileIn/Out" nonTrivial ) do: [:sel | Approved add: sel]. "Context, BlockContext" #(receiver client method receiver tempAt: "debugger access" pc selector sender shortStack sourceCode tempNames tempsAndValues "controlling" "printing" "system simulation" "initialize-release" "accessing" hasMethodReturn home numArgs "evaluating" value value:ifError: value:value: value:value:value: value:value:value:value: valueWithArguments: "controlling" "scheduling" "instruction decoding" "printing" "private" "system simulation" ) do: [:sel | Approved add: sel]. #(value: "<- Association has it as a store" ) do: [:sel | AddAndRemove add: sel]. "Message" #("inclass, instance creation" selector: selector:argument: selector:arguments: "accessing" argument argument: arguments sends: "printing" "sending" ) do: [:sel | Approved add: sel]. #("private" setSelector:arguments:) do: [:sel | AddAndRemove add: sel]. "Magnitude" #("comparing" < <= > >= between:and: "testing" max: min: min:max: ) do: [:sel | Approved add: sel]. "Date, Time" #("in class, instance creation" fromDays: fromSeconds: fromString: today "in class, general inquiries" dayOfWeek: daysInMonth:forYear: daysInYear: firstWeekdayOfMonth:year: indexOfMonth: nameOfDay: nameOfMonth: "accessing" day leap monthIndex monthName weekday year "arithmetic" addDays: subtractDate: subtractDays: "comparing" "inquiries" dayOfMonth daysInMonth daysInYear daysLeftInYear firstDayOfMonth previous: "converting" asSeconds "printing" mmddyyyy printFormat: "private" weekdayIndex "in class, instance creation" fromSeconds: now "in class, general inquiries" dateAndTimeFromSeconds: millisecondClockValue millisecondsToRun: totalSeconds "accessing" hours minutes seconds "arithmetic" addTime: subtractTime: "comparing" "printing" intervalString print24 "converting") do: [:sel | Approved add: sel]. #("private" ) do: [:sel | AddAndRemove add: sel]. "Number" #("in class" readFrom:base: "arithmetic" * + - / // \\ abs negated quo: reciprocal rem: "mathematical functions" arcCos arcSin arcTan arcTan: cos exp floorLog: ln log log: raisedTo: raisedToInteger: sin sqrt squared tan "truncation and round off" ceiling detentBy:atMultiplesOf:snap: floor roundTo: roundUpTo: rounded truncateTo: truncated "comparing" "testing" even isDivisibleBy: isInfinite isNaN isZero negative odd positive sign strictlyPositive "converting" @ asInteger asNumber asPoint asSmallAngleDegrees degreesToRadians radiansToDegrees "intervals" to: to:by: "printing" printStringBase: storeStringBase: ) do: [:sel | Approved add: sel]. "Integer" #("in class" primesUpTo: "testing" isPowerOfTwo "arithmetic" alignedTo: "comparing" "truncation and round off" normalize "enumerating" timesRepeat: "mathematical functions" degreeCos degreeSin factorial gcd: lcm: take: "bit manipulation" << >> allMask: anyMask: bitAnd: bitClear: bitInvert bitInvert32 bitOr: bitShift: bitXor: lowBit noMask: "converting" asCharacter asColorOfDepth: asFloat asFraction asHexDigit "printing" asStringWithCommas hex hex8 radix: "system primitives" lastDigit replaceFrom:to:with:startingAt: "private" "benchmarks" ) do: [:sel | Approved add: sel]. "SmallInteger, LargeNegativeInteger, LargePositiveInteger" #("arithmetic" "bit manipulation" highBit "testing" "comparing" "copying" "converting" "printing" "system primitives" digitAt: digitLength "private" fromString:radix: ) do: [:sel | Approved add: sel]. #(digitAt:put: ) do: [:sel | AddAndRemove add: sel]. "Float" #("arithmetic" "mathematical functions" reciprocalFloorLog: reciprocalLogBase2 timesTwoPower: "comparing" "testing" "truncation and round off" exponent fractionPart integerPart significand significandAsInteger "converting" asApproximateFraction asIEEE32BitWord asTrueFraction "copying") do: [:sel | Approved add: sel]. "Fraction, Random" #(denominator numerator reduced next nextValue) do: [:sel | Approved add: sel]. #(setNumerator:denominator:) do: [:sel | AddAndRemove add: sel]. "Collection" #("accessing" anyOne "testing" includes: includesAllOf: includesAnyOf: includesSubstringAnywhere: isEmpty isSequenceable occurrencesOf: "enumerating" collect: collect:thenSelect: count: detect: detect:ifNone: detectMax: detectMin: detectSum: inject:into: reject: select: select:thenCollect: intersection: "converting" asBag asCharacterSet asSet asSortedCollection asSortedCollection: "printing" "private" maxSize "arithmetic" "math functions" average max median min range sum) do: [:sel | Approved add: sel]. #("adding" add: addAll: addIfNotPresent: "removing" remove: remove:ifAbsent: removeAll: removeAllFoundIn: removeAllSuchThat: remove:ifAbsent:) do: [:sel | AddAndRemove add: sel]. "SequenceableCollection" #("comparing" hasEqualElements: "accessing" allButFirst allButLast at:ifAbsent: atAll: atPin: atWrap: fifth first first: fourth identityIndexOf: identityIndexOf:ifAbsent: indexOf: indexOf:ifAbsent: indexOf:startingAt:ifAbsent: indexOfSubCollection:startingAt: indexOfSubCollection:startingAt:ifAbsent: last second sixth third "removing" "copying" , copyAfterLast: copyAt:put: copyFrom:to: copyReplaceAll:with: copyReplaceFrom:to:with: copyUpTo: copyUpToLast: copyWith: copyWithout: copyWithoutAll: forceTo:paddingWith: shuffled sort: "enumerating" collectWithIndex: findFirst: findLast: pairsCollect: with:collect: withIndexCollect: polynomialEval: "converting" asArray asDictionary asFloatArray asIntegerArray asStringWithCr asWordArray reversed ) do: [:sel | Approved add: sel]. #( swap:with:) do: [:sel | AddAndRemove add: sel]. "ArrayedCollection, Bag" #("private" defaultElement "sorting" isSorted "accessing" cumulativeCounts sortedCounts sortedElements "testing" "adding" add:withOccurrences: "removing" "enumerating" ) do: [:sel | Approved add: sel]. #( mergeSortFrom:to:by: sort sort: add: add:withOccurrences: "private" setDictionary ) do: [:sel | AddAndRemove add: sel]. "Other messages that modify the receiver" #(atAll:put: atAll:putAll: atAllPut: atWrap:put: replaceAll:with: replaceFrom:to:with: removeFirst removeLast) do: [:sel | AddAndRemove add: sel]. self initialize2. " MethodFinder new initialize. MethodFinder new organizationFiltered: Set " ! ! !ClassModification commentStamp: '' prior: 82020406! I represent a modification in a class. ! !ClassModification class methodsFor: 'instance creation' stamp: 'MartinDias 2/7/2014 16:29'! modify: aClass extend: aSuperclass withLayoutType: layoutClass slots: someSlots sharedVariables: someSharedVariables sharedPools: someSharedPools traitComposition: aTraitComposition compactClassIndex: compactClassIndex ^ self new target: aClass; superclass: aSuperclass; traitComposition: aTraitComposition; sharedVariables: someSharedVariables; sharedPools: someSharedPools; layoutClass: layoutClass slots: someSlots compactClassIndex: compactClassIndex; yourself! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 16:44' prior: 80919614! isPropagation ^ false! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 16:44' prior: 41757530! modifiesFormat ^ (layout format = target layout format) not! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 17:16'! modifiesSharedPools ^ (target sharedPoolsString = sharedPools) not! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 17:16'! modifiesSharedVariables ^ (target classVariablesString = sharedVariables) not! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 16:43' prior: 41757674! modifiesSlots ^ (changes isEmpty and: [ removals isEmpty and: [ additions isEmpty ]]) not! ! !ClassModification methodsFor: 'testing' stamp: 'MartinDias 2/7/2014 16:43' prior: 41757848! modifiesSuperclass ^ (target superclass == superclass) not! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 2/7/2014 16:30'! sharedPools ^ sharedPools! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 2/7/2014 16:30'! sharedPools: anObject sharedPools := anObject! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 2/7/2014 16:30'! sharedVariables ^ sharedVariables! ! !ClassModification methodsFor: 'accessing' stamp: 'MartinDias 2/7/2014 16:30'! sharedVariables: anObject sharedVariables := anObject! ! ClassModification class removeSelector: #modify:extend:withLayoutType:slots:traitComposition:compactClassIndex:! "Slot"! "SlotTests"! "Tools"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.919.mcz') load. ScriptLoader new update30752. ! ----End fileIn----! ----QUIT----2014-02-09T12:35:49.678352+01:00 Pharo.image priorSource: 31676134! ----STARTUP----2014-02-09T12:35:49.888748+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-09T12:35:54.130742+01:00 Pharo.image priorSource: 31710068! ----STARTUP----2014-02-09T12:48:17.135477+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-09T12:48:17.403476+01:00 Pharo-30752.image priorSource: 31710265! ----STARTUP----2014-02-10T09:48:43.964839+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/10/2014 09:45' prior: 82008079! commentForCurrentUpdate ^ '12832 OpalCompiler / Debugger - Unknown variable: please correct, or cancel https://pharo.fogbugz.com/f/cases/12832 12831 rpackages should not be registered is name matches packagetag name https://pharo.fogbugz.com/f/cases/12831 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/10/2014 09:45'! script406 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.257.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.679.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.470.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.341.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.139.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-EstebanLorenzano.6.mcz Versionner-Core-Commands-EstebanLorenzano.39.mcz Versionner-Core-DependenciesModel-EstebanLorenzano.68.mcz Versionner-Core-Model-EstebanLorenzano.35.mcz Versionner-Help-EstebanLorenzano.4.mcz Versionner-Spec-Browser-EstebanLorenzano.108.mcz Versionner-Tests-Core-Commands-EstebanLorenzano.8.mcz Versionner-Tests-Core-DependenciesModel-EstebanLorenzano.30.mcz Versionner-Tests-Core-Model-EstebanLorenzano.12.mcz Versionner-Tests-Resources-EstebanLorenzano.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/10/2014 09:45'! update30753 "self new update30753" self withUpdateLog: '12832 OpalCompiler / Debugger - Unknown variable: please correct, or cancel https://pharo.fogbugz.com/f/cases/12832 12831 rpackages should not be registered is name matches packagetag name https://pharo.fogbugz.com/f/cases/12831 '. self loadTogether: self script406 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageConflictError commentStamp: '' prior: 0! I'm an error that happens when someone attempts to register a package with a conflicting name. Conflicting names can be of two ways: PackageA(tagB) conflicts with PackageA-B PackageA-B conflicts with PackageA(tagB)! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 2/7/2014 15:06' prior: 80313415! addClassTag: aSymbol "Add the class tag from the receiver, if already added do nothing." | tagName | "strip package name if needed" tagName := self toTagName: aSymbol. ^ self classTagNamed: tagName ifAbsent: [ self class organizer validateCanBeAddedPackage: self tagName: tagName. self basicAddClassTag: tagName ]! ! !RPackage methodsFor: 'testing' stamp: 'EstebanLorenzano 2/7/2014 14:27'! includesClassTagNamed: aString ^ self classTags anySatisfy: [ :each | each name = aString ]! ! !RPackageOrganizer methodsFor: 'public registration' stamp: 'EstebanLorenzano 2/7/2014 14:11' prior: 74370420! registerPackage: aPackage "A new package is now available and declared in the receiver. " self validateCanBeAddedPackage: aPackage. self basicRegisterPackage: aPackage. aPackage extendedClasses do: [ :extendedClass | self registerExtendingPackage: aPackage forClass: extendedClass]. aPackage definedClasses do: [ :definedClass | self registerPackage: aPackage forClass: definedClass]. self announcer announce: (RPackageCreated to: aPackage). ^ aPackage! ! !RPackageOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 2/7/2014 14:37'! validateCanBeAddedPackage: aPackage self validateCanBeAddedPackageName: aPackage categoryName tagName: nil! ! !RPackageOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 2/7/2014 15:52'! validateCanBeAddedPackage: aPackage tagName: aSymbol aPackage name = aSymbol ifTrue: [ ^ self ]. self validateCanBeAddedPackageName: aPackage categoryName, '-', aSymbol tagName: nil! ! !RPackageOrganizer methodsFor: 'private' stamp: 'EstebanLorenzano 2/7/2014 16:19'! validateCanBeAddedPackageName: packageName tagName: tagName | package | package := self packageNamed: packageName ifAbsent: [ (packageName includes: $-) ifFalse: [ ^ self ]. ^ self validateCanBeAddedPackageName: (packageName copyUpToLast: $-) tagName: ((packageName copyAfterLast: $-), (tagName ifNotNil: [ '-', tagName ] ifNil: [ '' ] )) ]. (tagName isEmptyOrNil or: [ package includesClassTagNamed: tagName ]) ifTrue: [ RPackageConflictError signal: ('Package/Tag can not be added because it conflicts with package {1} tag {2}' format: { packageName. tagName }) ] ! ! !RPackageConflictError commentStamp: '' prior: 82054648! I'm an error that happens when someone attempts to register a package with a conflicting name. Conflicting names can be of two ways: PackageA(tagB) conflicts with PackageA-B PackageA-B conflicts with PackageA(tagB)! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 2/7/2014 17:47'! inlinedBlockSourceNode 1 to: 1 do: [ :i | ^ thisContext sourceNode ]. ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 2/7/2014 17:54'! testBlockWithArgAndEnclosedBlockSourceNode | sourceNode | sourceNode := [ :arg | [ arg ] ] sourceNode. self assert: sourceNode equals: (RBParser parseExpression: '[ :arg | [ arg ] ]'). ! ! !MethodMapTests methodsFor: 'testing - ast mapping' stamp: 'CamilleTeruel 2/7/2014 17:48'! testThisContextSourceNodeInInlinedMessage | inlinedBlockSourceNode | inlinedBlockSourceNode := self inlinedBlockSourceNode. self assert: (inlinedBlockSourceNode isKindOf: RBBlockNode). self assert: inlinedBlockSourceNode equals: (RBParser parseExpression: '[ :i | ^ thisContext sourceNode ]')! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/7/2014 18:36' prior: 80982935! sourceNode "Return the source node of the method or the block corresponding to the receiver" ^ self isDead ifTrue: [ method sourceNode ] ifFalse: [ (method sourceNodeForPC: (method initialPC max: pc - 1)) methodOrBlockNode ] ! ! !RPackageOrganizerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/7/2014 14:52' prior: 32027242! testFullRegistration "self debug: #testFullRegistration" | p1 p2 p3 a1 a2 b1 b2 a3 | "taken from setup of RPackageReadOnlyCompleteSetup" p1 := self createNewPackageNamed: self p1Name. p2 := self createNewPackageNamed: self p2Name. p3 := self createNewPackageNamed: self p3Name. a1 := self createNewClassNamed: #A1DefinedInP1 inPackage: p1. b1 := self createNewClassNamed: #B1DefinedInP1 inPackage: p1. a2 := self createNewClassNamed: #A2DefinedInP2 inPackage: p2. b2 := self createNewClassNamed: #B2DefinedInP2 inPackage: p2. a3 := self createNewClassNamed: #A3DefinedInP3 inPackage: p3. a1 compileSilently: 'methodDefinedInP1 ^ #methodDefinedInP1'. p1 addMethod: (a1>>#methodDefinedInP1). a1 compileSilently: 'anotherMethodDefinedInP1 ^ #anotherMethodDefinedInP1'. p1 addMethod: (a1>>#anotherMethodDefinedInP1). a2 compileSilently: 'methodDefinedInP1 ^ #methodDefinedInP1'. p1 addMethod: (a2>>#methodDefinedInP1). a2 compileSilently: 'methodDefinedInP2 ^ #methodDefinedInP2'. p2 addMethod: (a2>>#methodDefinedInP2). a2 compileSilently: 'methodDefinedInP3 ^ #methodDefinedInP3'. p3 addMethod: (a2>>#methodDefinedInP3). a2 class compileSilently: 'classSideMethodDefinedInP3 ^ #classSideMethodDefinedInP3'. p3 addMethod: (a2 class>>#classSideMethodDefinedInP3). self packageOrganizer registerPackage: p1. self packageOrganizer registerPackage: p2. self packageOrganizer registerPackage: p3. self deny: (p2 includesClass: b1). self assert: (p2 includesClass: b2). "a locally defined class not extended by other packages" self assert: (p2 includesClass: a2). "a locally defined class extended by other packages" self assert: (p1 definesOrExtendsClass: a2). self deny: (p1 includesClass: a2). ! ! !RPackageOrganizerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/7/2014 15:51'! testRegisterPackageConflictWithPackage "self debug: #testRegisteredIsThere" | package1 package2 | package1 := self createNewPackageNamed: 'P1'. package1 register. package2 := self packageClass named: 'P1'. self should: [ package2 register ] raise: Error! ! !RPackageOrganizerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/7/2014 13:17'! testRegisterPackageConflictWithPackageTag "self debug: #testRegisteredIsThere" | package1 package2 | package1 := self createNewPackageNamed: 'P1'. package1 register. package1 addClassTag: #T1. package2 := self createNewPackageNamed: 'P1-T1'. self should: [ package2 register ] raise: Error! ! !RPackageOrganizerTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/7/2014 13:19'! testRegisterPackageTagConflictWithPackage | package1 package2 | package1 := self createNewPackageNamed: 'P1-T1'. package1 register. package2 := self createNewPackageNamed: 'P1'. self should: [ package2 addClassTag: #T1 ] raise: Error! ! !RPackageOrganizerTest methodsFor: 'tests extending' stamp: 'EstebanLorenzano 2/7/2014 15:48' prior: 41875529! testTestingPackageExistence | extensionCategory package existingPackage | self skip. "This tests seems to not have sense anymore (because creating of duplicated packages is forbidden). Loot at RPackageOrganizerTest>>#testRegisterPackageConflictWithPackageTag" existingPackage := (RPackage named: 'RPackage-Tests') register; yourself. extensionCategory := existingPackage name, '-subcategory'. package := RPackage named: extensionCategory. packageOrganizer := package organizer. self deny: (packageOrganizer includesPackageNamed: extensionCategory). packageOrganizer checkPackageExistsOrRegister: extensionCategory. self deny: (packageOrganizer includesPackageNamed: extensionCategory).! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 2/7/2014 16:14' prior: 80314924! addClassCategoryBasedOn: aSelection | name package packageTag | packageTag := nil. package := aSelection package. name := UIManager default request: ('New category: {1}-' format: { package name }) initialAnswer: '' title: 'Create a new category'. [ (self isValidPackageName: name) ifTrue: [ packageTag := package addClassTag: name ] ifFalse: [ self alertInvalidPackageName: name ] ] on: RPackageConflictError do: [ :e | UIManager default inform: e messageText ]. ^ packageTag! ! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'EstebanLorenzano 2/7/2014 16:22'! addPackageBasedOn: aPackage [ ^ super addPackageBasedOn: aPackage ] on: RPackageConflictError do: [ :e | UIManager default inform: e messageText ]. ^ nil! ! RPackageMCSynchronisationTest removeSelector: #testImportSystemClassWithSubCategoryAndAnotherCategory! RPackageMCSynchronisationTest removeSelector: #testImportSystemClassWithSubCategory! RPackageMCSynchronisationTest removeSelector: #testImportSystallManagershSubCategoryAndAnotherCategory! RPackageMCSynchronisationTest removeSelector: #testBasicImportSystemClass! RPackage removeSelector: #importCategory! "Nautilus"! "OpalCompiler-Core"! "OpalCompiler-Tests"! "RPackage-Core"! "RPackage-Tests"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.920.mcz') load. ScriptLoader new update30753. ! ----End fileIn----! ----QUIT----2014-02-10T09:48:49.129028+01:00 Pharo.image priorSource: 31710462! ----STARTUP----2014-02-10T09:48:49.337303+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-10T09:48:53.625311+01:00 Pharo.image priorSource: 31732774! ----STARTUP----2014-02-10T10:04:49.839471+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-10T10:04:50.107468+01:00 Pharo-30753.image priorSource: 31732971! ----STARTUP----2014-02-12T13:58:52.925777+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/12/2014 13:56' prior: 82042408! commentForCurrentUpdate ^ '12847 update Versionner https://pharo.fogbugz.com/f/cases/12847/fix-rules-violations'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/12/2014 13:56'! script407 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-MarcusDenker.136.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.257.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.679.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.470.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.341.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.139.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-MarcusDenker.29.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Help-MarcusDenker.4.mcz Versionner-Spec-Browser-MarcusDenker.109.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/12/2014 13:56'! update30754 "self new update30754" self withUpdateLog: '12847 update Versionner https://pharo.fogbugz.com/f/cases/12847/fix-rules-violations'. self loadTogether: self script407 merge: false. (MCPackage named: #'Versionner-Help') unload. self flushCaches. ! ! "ScriptLoader30"! !MBConfigurationInfoTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/7/2014 18:29' prior: 81755544! testInitialization | configClass conf | self should: [ MBConfigurationInfo new ] raise: Error. configClass := Smalltalk globals at: #ConfigurationOfVersionner. self shouldnt: [ conf := MBConfigurationInfo configurationClass: configClass ] raise: Error. self assert: conf name = 'ConfigurationOfVersionner'! ! !MBCommand methodsFor: 'accessing-computed' stamp: 'ChristopheDemarey 2/11/2014 15:54' prior: 81861827! projectName ^ self configurationClass name configurationBaseName! ! !MBCommand methodsFor: 'repositories' stamp: 'ChristopheDemarey 2/11/2014 15:54' prior: 81862097! repositoryOfPackageNamed: packageName "Return the repository of the configuration. Create one (using UI) if necessary" | mcPackage workingCopy repositories repository repositoryIndex username password | mcPackage := MCPackage named: packageName. workingCopy := mcPackage workingCopy. repositories := workingCopy repositoryGroup repositories reject: [ :rep | rep == MCCacheRepository default ]. repositories ifEmpty: [ | projectName answer squeakSourceURL | projectName := self configurationClass name configurationBaseName. squeakSourceURL := 'http://www.squeaksource.com/' , projectName. answer := self uiManager confirm: 'No repository associated with your project. Do you want to add ' , squeakSourceURL. answer ifFalse: [ self uiManager inform: 'Add a http repository with Monticello browser'. ^ nil ]. repository := MCHttpRepository location: squeakSourceURL user: '' password: ''. repository user isEmpty ifTrue: [ username := self username ]. repository password isEmpty ifTrue: [ password := self password ]. workingCopy repositoryGroup addRepository: (repository := MCHttpRepository location: squeakSourceURL user: username password: password) ]. repositories size > 1 ifTrue: [ repositoryIndex := self uiManager chooseFrom: (repositories collect: #printString). repositoryIndex = 0 ifTrue: [ ^ nil ]. repository := repositories at: repositoryIndex ]. repositories size = 1 ifTrue: [ repository := repositories first ]. ^ repository! ! !MBAbstractVersionInfo methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/11/2014 15:54' prior: 81899953! configurationBasename ^ self configurationClass name configurationBaseName! ! !MBAddConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/11/2014 15:55' prior: 81873487! execute | configurationClassName versionNumber addedPackages addedConfigurations repository projectName mcPackage workingCopy configInfo| configurationClassName := self askForClassName. configurationClassName ifNil: [ ^ self ]. Smalltalk globals at: configurationClassName asSymbol ifPresent: [ :ex | ^ self error: 'Class ' , configurationClassName printString , ' already exist' ]. projectName := configurationClassName name configurationBaseName. (repository := self repositoryFor: projectName) ifNil: [ ^ self ]. versionNumber := self uiManager request: 'Enter initial version number' initialAnswer: '1.0'. versionNumber ifNil: [ ^ self ]. addedPackages := OrderedCollection new. addedConfigurations := OrderedCollection new. self collectPackages: addedPackages andProjects: addedConfigurations pattern: projectName , '*' repository: repository. self executeAddBaselineForConfigurationNamed: configurationClassName repositoryDescription: repository description versionString: versionNumber packages: addedPackages configurations: addedConfigurations. mcPackage := MCPackage named: configurationClassName. workingCopy := mcPackage workingCopy. workingCopy repositoryGroup addRepository: repository. "after all save configuration" configInfo := (MBConfigurationInfo configurationClass: (Smalltalk globals at: (configurationClassName asSymbol))) configurationRoot: (MBConfigurationRoot current); yourself. "fixing" (MBSaveConfigurationCommand target: configInfo for: requestor) executeWithMessage: 'Creating ConfigurationOf', projectName. ! ! !MBCheckpointDevCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/11/2014 15:55' prior: 81879255! execute | message configClass | configClass := self configurationClass. message := self uiManager multilineRequest: 'Enter commit message for ' , (configClass name configurationBaseName) , ' ' , (target project version: #development) versionString initialAnswer: (target project version: #development) versionString, ' ():'. message == nil ifTrue: [ ^ self ]. self executeWithMessage: message ! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/7/2014 15:13' prior: 81630332! initializeGroupsWidget groupList := (self instantiate: TreeModel) autoDeselection: true; dragEnabled: true; dropEnabled: true; acceptDropBlock: [ :transfer :event :source :receiver | | passengerItem | receiver parent ifNotNil: [ receiver := receiver parent ]. "Only add dependencies on top elements" passengerItem := transfer passenger item. receiver complexContents item addDependency: ((passengerItem isKindOf: MTDependency) "Ugly test because String>>name adds extra quotes" ifTrue: [ passengerItem name ] ifFalse: [ passengerItem ]) ]; whenBuiltDo: [ groupList rootNodeHolder: [ :item | VSGroupNode new content: item ] ]; yourself. addGroupButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #addIcon); enabled: false; help: 'Add a new group to this project'. removeGroupButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #deleteIcon); enabled: false; help: 'Remove a group from this project'.! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/7/2014 15:13' prior: 81632310! initializeProjectsWidget projectList := (self instantiate: TreeModel) whenBuiltDo: [ projectList rootNodeHolder: [ :item | VSProjectNode new content: item ] ]; yourself. "projectList displayBlock: [:item | item asString ]. projectList childrenBlock: [:item | (item isKindOf: MTDependency ) ifTrue: [ item dependencies collect: [ :each | '--> loads: ' , each] ] ifFalse: [{}] ]." "| text version | text := item name. version := item currentVersion. (version size > 0) ifTrue: [ text := text , ' (' , item currentVersion , ')' ]. text asStringMorph ]." addProjectButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #addIcon); enabled: false; help: 'Add a new dependent project to this project'. removeProjectButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #deleteIcon); enabled: false; help: 'Remove a dependent project from this project'.! ! Class removeSelector: #configurationBaseName! MBAddDescriptionCommandTest removeSelector: #testExecute! MBAddDescriptionCommandTest removeSelector: #configurationInfo! MBAddDescriptionCommandTest removeSelector: #configurationClass! Smalltalk globals removeClassNamed: #MBAddDescriptionCommandTest! "Versionner-Core-Commands"! "Versionner-Core-Model"! "Versionner-Spec-Browser"! "Versionner-Tests-Core-Commands"! "Versionner-Tests-Core-Model"! VersionnerHelp class removeSelector: #pages! VersionnerHelp class removeSelector: #key! VersionnerHelp class removeSelector: #introduction! VersionnerHelp class removeSelector: #icon! VersionnerHelp class removeSelector: #builder! VersionnerHelp class removeSelector: #bookName! Smalltalk globals removeClassNamed: #VersionnerHelp! MetacelloBrowserHelp class removeSelector: #pages! MetacelloBrowserHelp class removeSelector: #key! MetacelloBrowserHelp class removeSelector: #introduction! MetacelloBrowserHelp class removeSelector: #icon! MetacelloBrowserHelp class removeSelector: #builder! MetacelloBrowserHelp class removeSelector: #bookName! Smalltalk globals removeClassNamed: #MetacelloBrowserHelp! VersionnerHelpBuilder removeSelector: #createTopicFrom:! VersionnerHelpBuilder removeSelector: #command:for:do:! VersionnerHelpBuilder removeSelector: #build! Smalltalk globals removeClassNamed: #VersionnerHelpBuilder! MetacelloBrowserHelpBuilder removeSelector: #createTopicFrom:! MetacelloBrowserHelpBuilder removeSelector: #command:for:do:! MetacelloBrowserHelpBuilder removeSelector: #build! Smalltalk globals removeClassNamed: #MetacelloBrowserHelpBuilder! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.921.mcz') load. ScriptLoader new update30754. ! ----End fileIn----! ----QUIT----2014-02-12T13:58:58.163853+01:00 Pharo.image priorSource: 31733168! ----STARTUP----2014-02-12T13:58:58.358755+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-12T13:59:02.846696+01:00 Pharo.image priorSource: 31754541! ----STARTUP----2014-02-12T14:05:48.079275+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-12T14:05:48.361276+01:00 Pharo-30754.image priorSource: 31754738! ----STARTUP----2014-02-12T19:33:44.196955+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/12/2014 19:30' prior: 82065114! commentForCurrentUpdate ^ '12845 Make Cmd-L working the cancel without asking to cancel https://pharo.fogbugz.com/f/cases/12845 12856 Class comments missing in package Graphics-Display Objects https://pharo.fogbugz.com/f/cases/12856 12848 The filtering on top of packages is broken https://pharo.fogbugz.com/f/cases/12848 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/12/2014 19:30'! script408 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.141.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.681.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.470.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.341.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.139.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.17.mcz Settings-Display-MarcusDenker.7.mcz Settings-FreeType-EstebanLorenzano.12.mcz Settings-Graphics-EstebanLorenzano.17.mcz Settings-Kernel-StephaneDucasse.3.mcz Settings-Monticello-MarcusDenker.14.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.59.mcz Settings-System-MarcusDenker.29.mcz Settings-Tools-MarcusDenker.49.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.109.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/12/2014 19:31'! update30755 "self new update30755" self withUpdateLog: '12845 Make Cmd-L working the cancel without asking to cancel https://pharo.fogbugz.com/f/cases/12845 12856 Class comments missing in package Graphics-Display Objects https://pharo.fogbugz.com/f/cases/12856 12848 The filtering on top of packages is broken https://pharo.fogbugz.com/f/cases/12848 '. self loadTogether: self script408 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ColorArray commentStamp: 'TorstenBergmann 2/12/2014 15:40' prior: 0! An array of colors! !ColorArray commentStamp: 'TorstenBergmann 2/12/2014 15:40' prior: 82099237! An array of colors! !MorphTreeListManager methodsFor: 'selection change' stamp: 'NicolaiHess 2/11/2014 23:02' prior: 26924239! selectedItems: aNodeItemCollection self listModel okToDiscardEdits ifFalse: [^ self]. self emptySelection. (self nodeMorphsWithAllNodeItems: aNodeItemCollection) ifNotEmpty:[:selection | self addAllToSelection: selection]. lastClickedMorph ifNil: [lastClickedMorph := self selectedMorphList ifEmpty: [] ifNotEmpty: [self selectedMorphList last]]! ! !TextEditor class methodsFor: 'shortcuts' stamp: 'StephaneDucasse 2/11/2014 10:54' prior: 75271628! buildTextEditorShortcutsOn: aBuilder (aBuilder shortcut: #toggleCommentOnSelectionOrLine) category: #TextEditor shortcut: $/ ctrl win | $/ ctrl unix | $/ command mac do: [ :target | target handleEdit: [ target toggleCommentOnSelectionOrLine ] ]. (aBuilder shortcut: #selectAll) category: #TextEditor shortcut: $a ctrl win | $a ctrl unix | $a command mac do: [ :target | target handleEdit: [ target selectAll ] ]. (aBuilder shortcut: #copySelection) category: #TextEditor default: $c ctrl win | $c ctrl unix | $c command mac do: [ :target | target copySelection ]. (aBuilder shortcut: #find) category: #TextEditor default: $f ctrl win | $f ctrl unix | $f command mac do: [ :target | target find ]. (aBuilder shortcut: #findAgain) category: #TextEditor default: $g ctrl win | $g ctrl unix | $g command mac do: [ :target | target findAgain ]. (aBuilder shortcut: #setSearchString) category: #TextEditor default: $h ctrl win | $h ctrl unix | $h command mac do: [ :target | target setSearchString ]. (aBuilder shortcut: #cancel) category: #TextEditor default: $l ctrl win | $l ctrl unix | $l command mac do: [ :target | target cancelWithoutConfirmation ]. (aBuilder shortcut: #paste) category: #TextEditor default: $v ctrl win | $v ctrl unix | $v command mac do: [ :target | target paste ]. (aBuilder shortcut: #cut) category: #TextEditor default: $x ctrl win | $x ctrl unix | $x command mac do: [ :target | target cut ]. (aBuilder shortcut: #undo) category: #TextEditor default: $z ctrl win | $z ctrl unix | $z command mac do: [ :target | target undo ]. (aBuilder shortcut: #redo) category: #TextEditor default: $z ctrl shift win | $z ctrl shift unix | $z command shift mac do: [ :target | target redo ]. (aBuilder shortcut: #cursorHome) category: #TextEditor default: Character home ctrl win | Character home ctrl unix | Character home command mac do: [ :target :morph :event | target cursorHome: event ]. (aBuilder shortcut: #cursorEnd) category: #TextEditor default: Character end ctrl win | Character end ctrl unix | Character end command mac do: [ :target :morph :event | target cursorEnd: event ].! ! !AbstractNautilusUI class methodsFor: 'shortcut-old' stamp: 'StephaneDucasse 2/11/2014 10:58' prior: 17397016! buildEditorCommentKeymappingsOldOn: aBuilder (aBuilder shortcut: #selectAll) category: #NautilusCommentShortcuts default: $a command do: [ :target | target commentTextArea handleEdit: [ target commentTextArea selectAll ] ]. (aBuilder shortcut: #copySelection) category: #NautilusCommentShortcuts default: $c command do: [ :target | target commentTextArea copySelection ]. (aBuilder shortcut: #find) category: #NautilusCommentShortcuts default: $f command do: [ :target | target commentTextArea find ]. (aBuilder shortcut: #findAgain) category: #NautilusCommentShortcuts default: $g command do: [ :target | target commentTextArea findAgain ]. (aBuilder shortcut: #setSearchString) category: #NautilusCommentShortcuts default: $h command do: [ :target | target commentTextArea setSearchString ]. (aBuilder shortcut: #cancel) category: #NautilusCommentShortcuts default: $l command do: [ :target | target commentTextArea cancelWithoutConfirmation ]. (aBuilder shortcut: #paste) category: #NautilusCommentShortcuts default: $v command do: [ :target | target commentTextArea paste ]. (aBuilder shortcut: #cut) category: #NautilusCommentShortcuts default: $x command do: [ :target | target commentTextArea cut ]. (aBuilder shortcut: #undo) category: #NautilusCommentShortcuts default: $z command do: [ :target | target commentTextArea undo ]. (aBuilder shortcut: #redo) category: #NautilusCommentShortcuts default: $z command shift do: [ :target | target commentTextArea redo ]. (aBuilder shortcut: #cursorHome) category: #NautilusCommentShortcuts default: Character home command do: [ :target :morph :event | target commentTextArea cursorHome: event ]. (aBuilder shortcut: #cursorEnd) category: #NautilusCommentShortcuts default: Character end command do: [ :target :morph :event | target commentTextArea cursorEnd: event ]. (aBuilder shortcut: #browseIt) category: #NautilusCommentShortcuts default: $b command do: [ :target | target commentTextArea browseIt ]. (aBuilder shortcut: #doIt) category: #NautilusCommentShortcuts default: $d command do: [ :target | target commentTextArea doIt ]. (aBuilder shortcut: #inspectIt) category: #NautilusCommentShortcuts default: $i command do: [ :target | target commentTextArea inspectIt ]. (aBuilder shortcut: #implementorsOfIt) category: #NautilusCommentShortcuts default: $m command do: [ :target | target commentTextArea implementorsOfIt ]. (aBuilder shortcut: #sendersOfIt) category: #NautilusCommentShortcuts default: $n command do: [ :target | target commentTextArea sendersOfIt ]. (aBuilder shortcut: #printIt) category: #NautilusCommentShortcuts default: $p command do: [ :target | target commentTextArea printIt ].! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'StephaneDucasse 2/11/2014 10:58' prior: 17412426! buildEditorCommentKeymappingsOn: aBuilder (aBuilder shortcut: #selectAll) category: #NautilusCommentShortcuts default: $a command do: [ :target | target commentTextArea handleEdit: [ target commentTextArea selectAll ] ]. (aBuilder shortcut: #copySelection) category: #NautilusCommentShortcuts default: $c command do: [ :target | target commentTextArea copySelection ]. (aBuilder shortcut: #find) category: #NautilusCommentShortcuts default: $f command, $f command do: [ :target | target commentTextArea find ]. (aBuilder shortcut: #findAgain) category: #NautilusCommentShortcuts default: $f command, $g command do: [ :target | target commentTextArea findAgain ]. (aBuilder shortcut: #setSearchString) category: #NautilusCommentShortcuts default: $h command do: [ :target | target commentTextArea setSearchString ]. (aBuilder shortcut: #cancel) category: #NautilusCommentShortcuts default: $l command do: [ :target | target commentTextArea cancelWithoutConfirmation ]. (aBuilder shortcut: #paste) category: #NautilusCommentShortcuts default: $v command do: [ :target | target commentTextArea paste ]. (aBuilder shortcut: #cut) category: #NautilusCommentShortcuts default: $x command do: [ :target | target commentTextArea cut ]. (aBuilder shortcut: #undo) category: #NautilusCommentShortcuts default: $z command do: [ :target | target commentTextArea undo ]. (aBuilder shortcut: #redo) category: #NautilusCommentShortcuts default: $z command shift do: [ :target | target commentTextArea redo ]. (aBuilder shortcut: #cursorHome) category: #NautilusCommentShortcuts default: Character home command do: [ :target :morph :event | target commentTextArea cursorHome: event ]. (aBuilder shortcut: #cursorEnd) category: #NautilusCommentShortcuts default: Character end command do: [ :target :morph :event | target commentTextArea cursorEnd: event ]. (aBuilder shortcut: #browseIt) category: #NautilusCommentShortcuts default: $b command do: [ :target | target commentTextArea browseIt ]. (aBuilder shortcut: #doIt) category: #NautilusCommentShortcuts default: $d command do: [ :target | target commentTextArea doIt ]. (aBuilder shortcut: #inspectIt) category: #NautilusCommentShortcuts default: $i command do: [ :target | target commentTextArea inspectIt ]. (aBuilder shortcut: #implementorsOfIt) category: #NautilusCommentShortcuts default: $m command do: [ :target | target commentTextArea implementorsOfIt ]. (aBuilder shortcut: #sendersOfIt) category: #NautilusCommentShortcuts default: $n command do: [ :target | target commentTextArea sendersOfIt ]. (aBuilder shortcut: #printIt) category: #NautilusCommentShortcuts default: $p command do: [ :target | target commentTextArea printIt ].! ! !AbstractNautilusUI class methodsFor: 'shortcuts' stamp: 'StephaneDucasse 2/11/2014 10:59' prior: 17415379! buildEditorKeymappingsOn: aBuilder (aBuilder shortcut: #selectAll) category: #NautilusSourceCodeShortcuts default: $a command do: [ :target | target sourceTextArea handleEdit: [ target sourceTextArea selectAll ] ]. (aBuilder shortcut: #copySelection) category: #NautilusSourceCodeShortcuts default: $c command do: [ :target | target sourceTextArea copySelection ]. (aBuilder shortcut: #find) category: #NautilusSourceCodeShortcuts default: $f command, $f command do: [ :target | target sourceTextArea find ]. (aBuilder shortcut: #findAgain) category: #NautilusSourceCodeShortcuts default: $f command, $g command do: [ :target | target sourceTextArea findAgain ]. (aBuilder shortcut: #setSearchString) category: #NautilusSourceCodeShortcuts default: $h command do: [ :target | target sourceTextArea setSearchString ]. (aBuilder shortcut: #cancel) category: #NautilusSourceCodeShortcuts default: $l command do: [ :target | target sourceTextArea cancelWithoutConfirmation ]. (aBuilder shortcut: #paste) category: #NautilusSourceCodeShortcuts default: $v command do: [ :target | target sourceTextArea paste ]. (aBuilder shortcut: #cut) category: #NautilusSourceCodeShortcuts default: $x command do: [ :target | target sourceTextArea cut ]. (aBuilder shortcut: #undo) category: #NautilusSourceCodeShortcuts default: $z command do: [ :target | target sourceTextArea undo ]. (aBuilder shortcut: #redo) category: #NautilusSourceCodeShortcuts default: $z command shift do: [ :target | target sourceTextArea redo ]. (aBuilder shortcut: #cursorHome) category: #NautilusSourceCodeShortcuts default: Character home command do: [ :target :morph :event | target sourceTextArea cursorHome: event ]. (aBuilder shortcut: #cursorEnd) category: #NautilusSourceCodeShortcuts default: Character end command do: [ :target :morph :event | target sourceTextArea cursorEnd: event ]. (aBuilder shortcut: #browseIt) category: #NautilusSourceCodeShortcuts default: $b command do: [ :target | target sourceTextArea browseIt ]. (aBuilder shortcut: #doIt) category: #NautilusSourceCodeShortcuts default: $d command do: [ :target | target sourceTextArea doIt ]. (aBuilder shortcut: #inspectIt) category: #NautilusSourceCodeShortcuts default: $i command do: [ :target | target sourceTextArea inspectIt ]. (aBuilder shortcut: #implementorsOfIt) category: #NautilusSourceCodeShortcuts default: $m command do: [ :target | target sourceTextArea implementorsOfIt ]. (aBuilder shortcut: #sendersOfIt) category: #NautilusSourceCodeShortcuts default: $n command do: [ :target | target sourceTextArea sendersOfIt ]. (aBuilder shortcut: #printIt) category: #NautilusSourceCodeShortcuts default: $p command do: [ :target | target sourceTextArea printIt ].! ! !PluggableTextMorph methodsFor: 'menu commands' stamp: 'StephaneDucasse 2/11/2014 10:56'! cancelWithoutConfirmation self setText: self getText. self setSelection: self getSelection. ! ! "Morphic-Base"! "Nautilus"! "Text-Edition"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.922.mcz') load. ScriptLoader new update30755. ! ----End fileIn----! ----QUIT----2014-02-12T19:33:50.608973+01:00 Pharo.image priorSource: 31754935! ----STARTUP----2014-02-12T19:33:50.798255+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-12T19:33:55.182225+01:00 Pharo.image priorSource: 31780320! ----STARTUP----2014-02-12T19:39:30.112912+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-12T19:39:30.38691+01:00 Pharo-30755.image priorSource: 31780517! ----STARTUP----2014-02-14T08:20:00.442749+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 08:13' prior: 82086888! commentForCurrentUpdate ^ '12871 Class comments missing for Settings-... packages https://pharo.fogbugz.com/f/cases/12871 12024 ExtractAll does not work for a .mcz in a FileList https://pharo.fogbugz.com/f/cases/12024 12829 Dragging a morph to system browser results in DNU >> #passenger https://pharo.fogbugz.com/f/cases/12829 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 08:14'! script409 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-StephaneDucasse.7.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-StephaneDucasse.54.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.470.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-EstebanLorenzano.17.mcz RPackage-Core-MarcusDenker.341.mcz RPackage-SystemIntegration-MarcusDenker.210.mcz RPackage-Tests-MarcusDenker.139.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.109.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 08:14'! update30756 "self new update30756" self withUpdateLog: '12871 Class comments missing for Settings-... packages https://pharo.fogbugz.com/f/cases/12871 12024 ExtractAll does not work for a .mcz in a FileList https://pharo.fogbugz.com/f/cases/12024 12829 Dragging a morph to system browser results in DNU >> #passenger https://pharo.fogbugz.com/f/cases/12829 '. self loadTogether: self script409 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CodeHolderSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:30' prior: 0! Settings for code holder! !CompilerSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:26' prior: 0! System settings for the compiler! !DebugSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:30' prior: 0! Settings for debugging! !DisplaySettings commentStamp: 'TorstenBergmann 2/12/2014 23:26' prior: 0! Settings for the display! !FreeTypeSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:27' prior: 0! Settings for the FreeType system! !GraphicFontSettings commentStamp: 'TorstenBergmann 2/12/2014 23:27' prior: 0! Settings for the fonts! !InputEventSensorSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:28' prior: 0! Settings for the InputEventSensor! !MCSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:28' prior: 0! Settings for Monticello! !PSMCSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 0! Settings for the polymorph system! !SystemSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 0! Settings for the system itself! !TaskListSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 0! Settings for the task list! !TaskbarSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 0! Settings for the task bar! !CodeHolderSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:30' prior: 82125002! Settings for code holder! !CompilerSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:26' prior: 82125110! System settings for the compiler! !DebugSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:30' prior: 82125223! Settings for debugging! !DisplaySettings commentStamp: 'TorstenBergmann 2/12/2014 23:26' prior: 82125322! Settings for the display! !FreeTypeSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:27' prior: 82125430! Settings for the FreeType system! !GraphicFontSettings commentStamp: 'TorstenBergmann 2/12/2014 23:27' prior: 82125543! Settings for the fonts! !InputEventSensorSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:28' prior: 82125657! Settings for the InputEventSensor! !MCSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:28' prior: 82125768! Settings for Monticello! !PSMCSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 82125871! Settings for the polymorph system! !SystemSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 82125986! Settings for the system itself! !TaskListSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 82126100! Settings for the task list! !TaskbarSystemSettings commentStamp: 'TorstenBergmann 2/12/2014 23:29' prior: 82126209! Settings for the task bar! !PackageTreeModel methodsFor: 'drag and drop' stamp: 'NicolaiHess 2/13/2014 11:19' prior: 75420322! wantsDroppedMorph: aMorph event: anEvent inMorph: destMorph "TODO: Filter out to avoid drag and drop of different objet types. Here, we don't know what the target may be so filtering is limited." aMorph dragTransferType ifNil: [ ^ false ]. ^ destMorph model == self! ! !ZipArchive class methodsFor: 'fileIn/Out' stamp: 'NicolaiHess 2/10/2014 10:17' prior: 55124932! extractAllIn: aFileName "Service method to extract all contents of a zip." | directory | directory := (self directorySelectorModel modalFolderSelector:aFileName asFileReference) ifNil: [^ self]. ^ (self new) readFrom: aFileName; extractAllTo: directory.! ! "Compression"! "Nautilus"! "Settings-FreeType"! "Settings-System"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.923.mcz') load. ScriptLoader new update30756. ! ----End fileIn----! ----QUIT----2014-02-14T08:21:22.220821+01:00 Pharo.image priorSource: 31780714! ----STARTUP----2014-02-14T08:21:22.447142+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T08:21:26.817142+01:00 Pharo.image priorSource: 31797384! ----STARTUP----2014-02-14T08:36:14.263629+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T08:36:14.515629+01:00 Pharo-30756.image priorSource: 31797581! ----STARTUP----2014-02-14T10:32:37.38434+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 10:28' prior: 82112659! commentForCurrentUpdate ^ '12662 "Unknown Variable" name correction doesnt work properly in Nautilus https://pharo.fogbugz.com/f/cases/12662 12864 Class comments missing in package Hudson https://pharo.fogbugz.com/f/cases/12864 12866 Class comments missing in package ProfStef https://pharo.fogbugz.com/f/cases/12866 12867 Class comments missing for RPackage package https://pharo.fogbugz.com/f/cases/12867 12863 Class comments missing in Graphics-Transformations package https://pharo.fogbugz.com/f/cases/12863 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 10:29'! script410 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.31.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.344.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.109.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 10:29'! update30757 "self new update30757" self withUpdateLog: '12662 "Unknown Variable" name correction doesnt work properly in Nautilus https://pharo.fogbugz.com/f/cases/12662 12864 Class comments missing in package Hudson https://pharo.fogbugz.com/f/cases/12864 12866 Class comments missing in package ProfStef https://pharo.fogbugz.com/f/cases/12866 12867 Class comments missing for RPackage package https://pharo.fogbugz.com/f/cases/12867 12863 Class comments missing in Graphics-Transformations package https://pharo.fogbugz.com/f/cases/12863 '. self loadTogether: self script410 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 0! Trait for testing tutorials! !ClassRepackaged commentStamp: 'TorstenBergmann 2/12/2014 22:56' prior: 0! Notify about repackaging of a class! !MethodRepackaged commentStamp: 'TorstenBergmann 2/12/2014 22:57' prior: 0! Notify about repackaging of a method! !RPackageAnnouncement commentStamp: 'TorstenBergmann 2/12/2014 22:55' prior: 0! Common superclass for package related announcements! !RPackageCompleteSetupButForModificationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 0! SUnit tests for RPackage! !RPackageObsoleteTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 0! SUnit tests for RPackage! !RPackageTraitTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 0! SUnit tests for RPackage! !HDTestCoverage commentStamp: 'TorstenBergmann 2/12/2014 22:32' prior: 0! Used to measure test coverage for Hudson reports! !IdentityTransform commentStamp: 'TorstenBergmann 2/12/2014 22:28' prior: 0! Identity transformation! !AbstractTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:51' prior: 0! SUnit tests for AbstractTutorial! !HowToMakeYourOwnTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:50' prior: 0! Tests for HowToMakeYourOwnTutorial! !LessonTestInstanciation commentStamp: 'TorstenBergmann 2/12/2014 22:50' prior: 0! SUnit tests for lessons! !ProfStefHelpTest commentStamp: 'TorstenBergmann 2/12/2014 22:51' prior: 0! SUnit tests for ProfStefHelp! !ProfStefHelpTutorialBuilderTest commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for ProfStefHelpTutorialBuilder! !ProfStefTestGo commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !ProfStefTestGoOnMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !ProfStefTestNavigation commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !RPackageTestCase commentStamp: 'TorstenBergmann 2/12/2014 22:58' prior: 0! Common superclass for RPackage related tests! !RPackageImportFromPackageInfoTest commentStamp: 'TorstenBergmann 2/12/2014 22:58' prior: 0! SUnit test for importing from PackageInfo! !RPackageTagTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 0! SUnit tests for RPackage tags! !RPackageTest commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 0! SUnit tests for RPackage ! !RPackageWithDoTest commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 0! SUnit tests for RPackage! !SmalltalkSyntaxTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for SmalltalkSyntaxTutorial! !TestRPackagePrequisites commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 0! SUnit tests for RPackage prerequisites! !TutorialPlayerTestTutorialAccessor commentStamp: 'TorstenBergmann 2/12/2014 22:53' prior: 0! SUnit tests for tutorial player! !TutorialPlayerTestWithMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:53' prior: 0! SUnit tests for tutorial player! !MockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 0! Mocking a tutorial for test purposes! !MockTutorial2 commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 0! Mocking another tutorial for test purposes! !RPackageCategorySynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 0! SUnit tests for RPackage category synchronization! !RPackageClassesSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 0! SUnit tests for RPackage classes synchronisation! !RPackageExtensionMethodsSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 0! SUnit tests for RPackage extension methods! !RPackageMethodsSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 0! SUnit tests for RPackage method synchronization! !RPackageMonticelloSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 0! SUnit tests for RPackage Monticello synchronization! !RPackageTraitSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 0! SUnit tests for RPackage trait synchronization ! !HDReport commentStamp: 'TorstenBergmann 2/12/2014 22:30' prior: 0! A Hudson report! !HDChangeReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 0! A change report! !HDLintReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 0! Hudson report for lint results! !HDTestReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 0! Hudson report for test results! !HDCoverageReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 0! Hudson report for test coverage! !MockLessonView commentStamp: 'TorstenBergmann 2/12/2014 22:48' prior: 0! A LessonView mock for testing purposes! !PackageChecker commentStamp: 'TorstenBergmann 2/12/2014 22:57' prior: 0! Utility class to check packages! !TTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 82142422! Trait for testing tutorials! !ClassRepackaged commentStamp: 'TorstenBergmann 2/12/2014 22:56' prior: 82142526! Notify about repackaging of a class! !MethodRepackaged commentStamp: 'TorstenBergmann 2/12/2014 22:57' prior: 82142639! Notify about repackaging of a method! !RPackageAnnouncement commentStamp: 'TorstenBergmann 2/12/2014 22:55' prior: 82142757! Common superclass for package related announcements! !RPackageCompleteSetupButForModificationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 82142913! SUnit tests for RPackage! !RPackageObsoleteTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 82143019! SUnit tests for RPackage! !RPackageTraitTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 82143122! SUnit tests for RPackage! !HDTestCoverage commentStamp: 'TorstenBergmann 2/12/2014 22:32' prior: 82143222! Used to measure test coverage for Hudson reports! !IdentityTransform commentStamp: 'TorstenBergmann 2/12/2014 22:28' prior: 82143349! Identity transformation! !AbstractTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:51' prior: 82143454! SUnit tests for AbstractTutorial! !HowToMakeYourOwnTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:50' prior: 82143576! Tests for HowToMakeYourOwnTutorial! !HowToMakeYourOwnTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:05' prior: 72788039! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self testedTutorial respondsTo: aSelector) ]! ! !HowToMakeYourOwnTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:04' prior: 72788279! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ HowToMakeYourOwnTutorial new! ! !LessonTestInstanciation commentStamp: 'TorstenBergmann 2/12/2014 22:50' prior: 82143695! SUnit tests for lessons! !ProfStefHelpTest commentStamp: 'TorstenBergmann 2/12/2014 22:51' prior: 82143796! SUnit tests for ProfStefHelp! !ProfStefHelpTutorialBuilderTest commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82143917! SUnit tests for ProfStefHelpTutorialBuilder! !ProfStefTestGo commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82144036! SUnit tests for tutorial navigation! !ProfStefTestGoOnMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82144161! SUnit tests for tutorial navigation! !ProfStefTestNavigation commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82144280! SUnit tests for tutorial navigation! !RPackageTestCase commentStamp: 'TorstenBergmann 2/12/2014 22:58' prior: 82144393! Common superclass for RPackage related tests! !RPackageImportFromPackageInfoTest commentStamp: 'TorstenBergmann 2/12/2014 22:58' prior: 82144532! SUnit test for importing from PackageInfo! !RPackageTagTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 82144650! SUnit tests for RPackage tags! !RPackageTest commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 82144753! SUnit tests for RPackage ! !RPackageWithDoTest commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 82144858! SUnit tests for RPackage! !SmalltalkSyntaxTutorialTest commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82144971! SUnit tests for SmalltalkSyntaxTutorial! !TestRPackagePrequisites commentStamp: 'TorstenBergmann 2/12/2014 23:01' prior: 82145095! SUnit tests for RPackage prerequisites! !TutorialPlayerTestTutorialAccessor commentStamp: 'TorstenBergmann 2/12/2014 22:53' prior: 82145229! SUnit tests for tutorial player! !TutorialPlayerTestWithMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:53' prior: 82145356! SUnit tests for tutorial player! !RBVariableNode methodsFor: '*opalcompiler-core' stamp: 'BenComan 2/12/2014 00:19'! substituteVariableNamed: newVariableName (self owningScope lookupVar: newVariableName) ifNotNil: [ :newBinding | self replaceWith:((self class named: newVariableName ) binding: newBinding)] ! ! !MockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 82145461! Mocking a tutorial for test purposes! !MockTutorial2 commentStamp: 'TorstenBergmann 2/12/2014 22:49' prior: 82145572! Mocking another tutorial for test purposes! !RPackageCategorySynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 82145711! SUnit tests for RPackage category synchronization! !RPackageClassesSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 22:59' prior: 82145856! SUnit tests for RPackage classes synchronisation! !RPackageExtensionMethodsSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 82146009! SUnit tests for RPackage extension methods! !RPackageMethodsSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 82146147! SUnit tests for RPackage method synchronization! !RPackageMonticelloSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 82146293! SUnit tests for RPackage Monticello synchronization! !RPackageTraitSynchronisationTest commentStamp: 'TorstenBergmann 2/12/2014 23:00' prior: 82146438! SUnit tests for RPackage trait synchronization ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'BenComan 2/12/2014 21:57' prior: 38922350! openMenuIn: aBlock | alternatives labels actions lines caption choice name | name := node name. alternatives := self possibleVariablesFor: name. labels := OrderedCollection new. actions := OrderedCollection new. lines := OrderedCollection new. name first isLowercase ifTrue: [labels add: 'Declare new temporary variable'. actions add: [self declareTempAndPaste: name]. labels add: 'Declare new instance variable'. actions add: [self declareInstVar: name]] ifFalse: [labels add: 'Define new class'. actions add: [self defineClass: name]. labels add: 'Declare new global'. actions add: [self declareGlobal]. labels add: 'Declare new class variable'. actions add: [self declareClassVar]]. lines add: labels size. alternatives do: [:each | labels add: each. actions add: [self substituteVariableNamed: each]]. lines add: labels size. labels add: 'Cancel'. caption := 'Unknown variable: ' , name , ' please correct, or cancel:'. choice := aBlock value: labels value: lines value: caption. choice ifNotNil: [self resume: (actions at: choice ifAbsent: [compilationContext failBlock value]) value]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'BenComan 2/13/2014 01:23'! substituteVariableNamed: newVariableName node substituteVariableNamed: newVariableName. self requestor setText: (node methodNode newSource). ^ (node owningScope lookupVar: newVariableName) ifNil: [self error: 'should be found'].! ! !HDReport commentStamp: 'TorstenBergmann 2/12/2014 22:30' prior: 82146555! A Hudson report! !HDChangeReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 82146646! A change report! !HDLintReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 82146735! Hudson report for lint results! !HDTestReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 82146839! Hudson report for test results! !HDCoverageReport commentStamp: 'TorstenBergmann 2/12/2014 22:31' prior: 82146947! Hudson report for test coverage! !MockLessonView commentStamp: 'TorstenBergmann 2/12/2014 22:48' prior: 82147054! A LessonView mock for testing purposes! !PackageChecker commentStamp: 'TorstenBergmann 2/12/2014 22:57' prior: 82147168! Utility class to check packages! OCUndeclaredVariableWarning removeSelector: #substituteVariable:atInterval:! "Graphics-Transformations"! "OpalCompiler-Core"! "ProfStef-Tests"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.924.mcz') load. ScriptLoader new update30757. ! ----End fileIn----! ----QUIT----2014-02-14T10:32:42.936417+01:00 Pharo.image priorSource: 31797778! ----STARTUP----2014-02-14T10:32:43.132558+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T10:32:47.726556+01:00 Pharo.image priorSource: 31823764! ----STARTUP----2014-02-14T10:38:29.003482+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T10:38:29.283482+01:00 Pharo-30757.image priorSource: 31823961! ----STARTUP----2014-02-14T11:01:36.696937+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 10:58' prior: 82129723! commentForCurrentUpdate ^ '11573 CTRL shortcuts missing / not working under linux https://pharo.fogbugz.com/f/cases/11573 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 10:58'! script411 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.30.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.32.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-SvenVanCaekenberghe.79.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.144.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.39.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.344.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.208.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.114.mcz SUnit-Help-MarcusDenker.7.mcz SUnit-Tests-MarcusDenker.35.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.200.mcz ShoutTests-MarcusDenker.19.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.187.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1413.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.15.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.109.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 10:58'! update30758 "self new update30758" self withUpdateLog: '11573 CTRL shortcuts missing / not working under linux https://pharo.fogbugz.com/f/cases/11573 '. self loadTogether: self script411 merge: false. KMRepository reset. self flushCaches. ! ! "ScriptLoader30"! !KMCommandModifier commentStamp: '' prior: 0! I represent the default modifier key for the current platform, late bound to Meta or Ctrl key modifier depending on the platform.! !KMCommandModifier commentStamp: '' prior: 82168013! I represent the default modifier key for the current platform, late bound to Meta or Ctrl key modifier depending on the platform.! !KMCommandModifier methodsFor: 'comparing' stamp: 'NicolasPetton 12/6/2013 16:16'! = aModifier ^ aModifier = self delegatedModifier! ! !KMCommandModifier methodsFor: 'private' stamp: 'NicolasPetton 12/6/2013 15:52'! delegatedModifier ^ OSPlatform current defaultModifier ! ! !KMCommandModifier methodsFor: 'comparing' stamp: 'NicolasPetton 12/6/2013 16:17'! hash ^ self delegatedModifier hash! ! !KMCommandModifier methodsFor: 'initialization' stamp: 'NicolasPetton 2/13/2014 16:55'! initialize super initialize. identifier := #k. name := 'Cmd'! ! !KMCommandModifier methodsFor: 'matching' stamp: 'NicolasPetton 12/6/2013 15:54'! matchesEvent: aKeyboardEvent ^ self delegatedModifier matchesEvent: aKeyboardEvent ! ! !KMModifier class methodsFor: 'instance creation' stamp: 'NicolasPetton 12/6/2013 15:56' prior: 68332415! command ^ KMCommandModifier new! ! !KMModifiedKeyCombination methodsFor: 'comparing' stamp: 'NicolasPetton 12/6/2013 16:21' prior: 34023170! = aShortcut super = aShortcut ifFalse: [ ^ false ]. modifier = aShortcut modifier ifFalse: [ ^ false ]. aShortcut character = character ifFalse: [ ^ false ]. ^ true! ! !KMMetaModifier methodsFor: 'initialization' stamp: 'NicolasPetton 12/6/2013 15:51' prior: 68331637! initialize super initialize. identifier := #m. name := 'Meta'.! ! "Keymapping-KeyCombinations"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.925.mcz') load. ScriptLoader new update30758. ! ----End fileIn----! ----QUIT----2014-02-14T11:01:39.31194+01:00 Pharo.image priorSource: 31824158! ----STARTUP----2014-02-14T11:01:39.508179+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T11:01:44.072179+01:00 Pharo.image priorSource: 31838633! ----STARTUP----2014-02-14T11:07:14.05656+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T11:07:14.33456+01:00 Pharo-30758.image priorSource: 31838829! ----STARTUP----2014-02-14T11:41:37.091631+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 11:38' prior: 82156104! commentForCurrentUpdate ^ '12849 Tools menu should be more clean https://pharo.fogbugz.com/f/cases/12849 12870 Class comments missing for Shout package https://pharo.fogbugz.com/f/cases/12870 12754 FileBrowser save on files smaller than the original not working https://pharo.fogbugz.com/f/cases/12754 12869 Class comments missing in SUnit packages https://pharo.fogbugz.com/f/cases/12869 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 11:39'! script412 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.32.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.81.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.344.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-StephaneDucasse.28.mcz Ring-Core-Kernel-MarcusDenker.160.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.9.mcz Ring-Tests-Kernel-MarcusDenker.61.mcz Ring-Tests-Monticello-MarcusDenker.17.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.189.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 11:39'! update30759 "self new update30759" self withUpdateLog: '12849 Tools menu should be more clean https://pharo.fogbugz.com/f/cases/12849 12870 Class comments missing for Shout package https://pharo.fogbugz.com/f/cases/12870 12754 FileBrowser save on files smaller than the original not working https://pharo.fogbugz.com/f/cases/12754 12869 Class comments missing in SUnit packages https://pharo.fogbugz.com/f/cases/12869 '. self loadTogether: self script412 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SHPreferences commentStamp: 'TorstenBergmann 2/12/2014 23:23' prior: 0! Preferences for Shout! !SHStyleElement commentStamp: 'TorstenBergmann 2/12/2014 23:23' prior: 0! A Shout style element! !SimpleTestResource commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceA commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceA1 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceA2 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceB commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceB1 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceCircular commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! I'm a simple test ressource for test purposes! !SimpleTestResourceCircular1 commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! I'm a simple test ressource for test purposes! !TestAnnouncement commentStamp: 'TorstenBergmann 2/12/2014 23:12' prior: 0! Notify about testing a test! !ClassFactoryForTestCaseTest commentStamp: 'TorstenBergmann 2/12/2014 23:17' prior: 0! SUnit tests for ClassFactoryForTestCase ! !ClassFactoryWithOrganizationTest commentStamp: 'TorstenBergmann 2/12/2014 23:16' prior: 0! SUnit tests for ClassFactoryWithOrganization! !ExampleSetTest commentStamp: 'TorstenBergmann 2/12/2014 23:16' prior: 0! SUnit tests for example set! !ResumableTestFailureTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:15' prior: 0! SUnit tests for ResumableTestFailure! !SHParserST80Test commentStamp: 'TorstenBergmann 2/12/2014 23:22' prior: 0! SUnit tests for shouts ST80 parser! !SUnitExtensionsTest commentStamp: 'TorstenBergmann 2/12/2014 23:15' prior: 0! SUnit tests for extensions to SUnit! !SimpleTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! SUnit tests for simple test resources! !FailingTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! SUnit tests for failing test resources! !ManyTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! SUnit tests for handling of many test resources! !TestCaseTest commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 0! SUnit test for TestCase class! !SUnitAPIDocumentation commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 0! SUnit API documentation for help system! !SHPreferences commentStamp: 'TorstenBergmann 2/12/2014 23:23' prior: 82183405! Preferences for Shout! !SHStyleElement commentStamp: 'TorstenBergmann 2/12/2014 23:23' prior: 82183502! A Shout style element! !SimpleTestResource commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82183603! I'm a simple test ressource for test purposes! !SimpleTestResourceA commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82183729! I'm a simple test ressource for test purposes! !SimpleTestResourceA1 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82183856! I'm a simple test ressource for test purposes! !SimpleTestResourceA2 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82183983! I'm a simple test ressource for test purposes! !SimpleTestResourceB commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82184109! I'm a simple test ressource for test purposes! !SimpleTestResourceB1 commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82184236! I'm a simple test ressource for test purposes! !SimpleTestResourceCircular commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82184369! I'm a simple test ressource for test purposes! !SimpleTestResourceCircular1 commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82184503! I'm a simple test ressource for test purposes! !Finder class methodsFor: 'menu' stamp: 'TorstenBergmann 2/12/2014 09:22' prior: 22132975! finderMenuOn: aBuilder "I build a menu" (aBuilder item: #Finder) action: [self open]; order: 0.10; parent: #Tools; help: 'Looking for something ?'; icon: self icon. aBuilder withSeparatorAfter. ! ! !TestAnnouncement commentStamp: 'TorstenBergmann 2/12/2014 23:12' prior: 82184626! Notify about testing a test! !RecentMessageList class methodsFor: 'setting' stamp: 'TorstenBergmann 2/12/2014 09:26' prior: 32154607! recentMessageListMenuOn: aBuilder (aBuilder item: #'Recent Messages') action: [self open]; parent: #Tools; order: 0.50; help: 'Browse the last messages you''ve submitted'; icon: self icon! ! !FileList class methodsFor: 'world menu' stamp: 'TorstenBergmann 2/12/2014 09:25' prior: 21904901! menuCommandOn: aBuilder (aBuilder item: #'File Browser') parent: #Tools; order: 0.43; action:[self open]; icon: self taskbarIcon. aBuilder withSeparatorAfter. ! ! !FileList methodsFor: 'private' stamp: 'NicolaiHess 2/11/2014 23:51' prior: 21886535! put: aText "Private - put the supplied text onto the file" | ff type | brevityState == #fullFile ifTrue:[ ff := StandardFileStream newFileNamed:reference fullName. Cursor write showWhile: [ff nextPutAll: aText asString; close]. reference basename = ff localName ifTrue: [contents := aText asString] ifFalse: [ self updateFileList. "user renamed the file" ]. ^ true "accepted"]. listIndex = 0 ifTrue: [ self inform: 'No fileName is selected' translated. ^ false "failed" ]. type := 'These'. brevityState = #briefFile ifTrue: [type := 'Abbreviated']. brevityState = #briefHex ifTrue: [type := 'Abbreviated']. brevityState = #fullHex ifTrue: [type := 'Hexadecimal']. brevityState = #FileList ifTrue: [type := 'Directory']. self inform: ('{1} contents cannot meaningfully be saved at present.' translated format:{type translated}). ^ false "failed"! ! !ThreadSafeTranscript class methodsFor: 'world menu' stamp: 'TorstenBergmann 2/12/2014 09:24' prior: 53094050! menuCommandOn: aBuilder (aBuilder item: #'Transcript') action: [Smalltalk tools transcript open]; order: 0.30; parent: #Tools; help: 'Transcript'; icon: self taskbarIcon. aBuilder withSeparatorAfter. ! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'TorstenBergmann 2/12/2014 09:22' prior: 81671423! menuCommandOn: aBuilder (aBuilder item: #VersionnerSpecBrowser) order: 0.21; parent: #Tools; label: 'Versionner'; icon: (Smalltalk ui icons iconNamed: #databaseIcon); action: [ VersionnerSpecBrowser open ]! ! !ClassFactoryForTestCaseTest commentStamp: 'TorstenBergmann 2/12/2014 23:17' prior: 82184742! SUnit tests for ClassFactoryForTestCase ! !ClassFactoryWithOrganizationTest commentStamp: 'TorstenBergmann 2/12/2014 23:16' prior: 82184876! SUnit tests for ClassFactoryWithOrganization! !ExampleSetTest commentStamp: 'TorstenBergmann 2/12/2014 23:16' prior: 82184996! SUnit tests for example set! !ResumableTestFailureTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:15' prior: 82185113! SUnit tests for ResumableTestFailure! !SHParserST80Test commentStamp: 'TorstenBergmann 2/12/2014 23:22' prior: 82185227! SUnit tests for shouts ST80 parser! !SUnitExtensionsTest commentStamp: 'TorstenBergmann 2/12/2014 23:15' prior: 82185342! SUnit tests for extensions to SUnit! !SimpleTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82185465! SUnit tests for simple test resources! !FailingTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82185591! SUnit tests for failing test resources! !ManyTestResourceTestCase commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82185715! SUnit tests for handling of many test resources! !TestCaseTest commentStamp: 'TorstenBergmann 2/12/2014 23:14' prior: 82185836! SUnit test for TestCase class! !Komitter class methodsFor: 'world menu' stamp: 'TorstenBergmann 2/12/2014 09:24' prior: 78473149! komitterMenuOn: aBuilder (aBuilder item: #Komitter) action: [ self openAndCommitToMonticello ]; order: 0.29; parent: #Tools; help: 'Cherry pick what you commit'; icon: self taskbarIcon. aBuilder withSeparatorAfter. ! ! !ProcessBrowser class methodsFor: 'world menu' stamp: 'TorstenBergmann 2/12/2014 09:25' prior: 30009546! menuCommandOn: aBuilder (aBuilder item: #'Process Browser') parent: #Tools; order: 0.42; action:[self open]; icon: self taskbarIcon.! ! !SUnitAPIDocumentation commentStamp: 'TorstenBergmann 2/12/2014 23:13' prior: 82185948! SUnit API documentation for help system! !Transcripter class methodsFor: 'menu' stamp: 'TorstenBergmann 2/12/2014 09:30' prior: 53472385! emergencyEvaluatorMenuOn: aBuilder (aBuilder item: #'Emergency Evaluator') action: [self emergencyEvaluator. World restoreMorphicDisplay]; parent: #Tools; order: 0.57; help: 'Invoke the emergency evaluator'; icon: self icon ! ! !WorldState class methodsFor: 'world menu items' stamp: 'TorstenBergmann 2/12/2014 09:30' prior: 74910139! screenShotCommandOn: aBuilder (aBuilder item: #Screenshot) parent: #Tools; target: World; order: 0.59; selector: #makeAScreenshot; label: 'Screenshot' translated; icon: Smalltalk ui icons smallScreenshotIcon! ! !MetacelloConfigurationBrowser class methodsFor: 'registration' stamp: 'TorstenBergmann 2/12/2014 09:34' prior: 43797069! menuCommandOn: aBuilder (aBuilder item: 'Configuration Browser') parent: #Tools; order: 0.20; action: [self new openWithSpec]; icon: Smalltalk ui icons configIcon! ! !MetacelloConfigurationBrowser methodsFor: 'icons' stamp: 'TorstenBergmann 2/12/2014 09:34' prior: 43747407! taskbarIcon ^ Smalltalk ui icons configIcon! ! !TimeProfiler class methodsFor: 'world menu' stamp: 'TorstenBergmann 2/12/2014 09:24' prior: 53180871! menuCommandOn: aBuilder (aBuilder item: #'Time Profiler') parent: #Tools; order: 0.40; icon: self taskbarIcon; action: [TimeProfiler new open]! ! !DualChangeSorterApplication class methodsFor: 'menu' stamp: 'TorstenBergmann 2/12/2014 09:31' prior: 68891637! menuCommandOn: aBuilder (aBuilder group: #SystemChanges) parent: #Tools; order: 0.51; with: [ (aBuilder item: #'Change Sorter') action:[self open]; icon: self taskbarIcon. (aBuilder item: #'Recover lost changes...') icon: Smalltalk ui icons recoverLostChangesIcon; action: [Smalltalk tools changeList browseRecentLog].]. aBuilder withSeparatorAfter. ! ! !CriticBrowser class methodsFor: 'menu' stamp: 'TorstenBergmann 2/12/2014 09:25' prior: 20251225! criticsBrowserMenuOn: aBuilder "I build a menu" (aBuilder item: 'Critic Browser') action: [ self openOnCurrentWorkingConfiguration]; order: 0.41; parent: #Tools; help: 'To manage rule checks'; icon: self icon! ! "EmergencyEvaluator"! "Komitter"! "Manifest-CriticBrowser"! "Morphic-Core"! "RecentSubmissions"! "Shout"! "Spec-Tools"! "Tools"! "Transcript"! "Versionner-Spec-Browser"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.926.mcz') load. ScriptLoader new update30759. ! ----End fileIn----! ----QUIT----2014-02-14T11:41:46.768828+01:00 Pharo.image priorSource: 31839025! ----STARTUP----2014-02-14T11:41:46.991137+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T11:41:51.433135+01:00 Pharo.image priorSource: 31863438! ----STARTUP----2014-02-14T11:47:46.738595+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T11:47:47.146614+01:00 Pharo-30759.image priorSource: 31863635! ----STARTUP----2014-02-14T13:14:46.171355+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 13:11' prior: 82170970! commentForCurrentUpdate ^ '12874 Error on TBehavior>>originalName when the class is not in system dictionary but also does not start with AnObsolete https://pharo.fogbugz.com/f/cases/12874 12868 Class comments missing for Ring package https://pharo.fogbugz.com/f/cases/12868 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 13:11'! script413 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-SvenVanCaekenberghe.64.mcz Athens-CairoPools-MarcusDenker.11.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.27.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.10.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-SvenVanCaekenberghe.30.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.32.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.81.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.303.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.128.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.189.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 13:11'! update30760 "self new update30760" self withUpdateLog: '12874 Error on TBehavior>>originalName when the class is not in system dictionary but also does not start with AnObsolete https://pharo.fogbugz.com/f/cases/12874 12868 Class comments missing for Ring package https://pharo.fogbugz.com/f/cases/12868 '. self loadTogether: self script413 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RGGlobalVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! A global variable definition! !RGOrganization commentStamp: 'TorstenBergmann 2/12/2014 23:06' prior: 0! An organization with categories! !RGDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 0! Common superclass for definitions! !RGVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 0! A variable definition! !RGClassInstanceVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 0! A class instance variable definition! !RGClassVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 0! A class variable definition! !RGInstanceVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 0! An instance variable definition! !RGPoolVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! A pool variable definition! !RGClassDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 0! SUnit tests for class definitions! !RGCommentDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 0! SUnit tests for comment definitions! !RGContainerTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! SUnit tests for container! !RGGlobalDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 0! SUnit tests for global definitions (pools, global variables)! !RGMethodDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 0! SUnit tests for method definitions! !RGMonticelloTest commentStamp: 'TorstenBergmann 2/12/2014 23:10' prior: 0! SUnit tests for monticello! !RGNamespaceTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! SUnit tests for namespaces! !RGPackageTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! SUnit tests for packages! !RGSliceTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 0! SUnit tests for slices! !RGTraitDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 0! SUnit tests for trait definitions! !RGVariableDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:10' prior: 0! SUnit tests for variable definitions! !RGGlobalVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82207988! A global variable definition! !RGOrganization commentStamp: 'TorstenBergmann 2/12/2014 23:06' prior: 82208092! An organization with categories! !RGDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 82208197! Common superclass for definitions! !TBehavior methodsFor: '*Rpackage-Core' stamp: 'MartinDias 2/13/2014 14:56' prior: 44763064! originalName ^ ((self isObsolete and: [ self name beginsWith: 'AnObsolete' ]) ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) ] ifFalse: [ self name ]) asSymbol! ! !RGVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 82208312! A variable definition! !RGClassInstanceVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 82208428! A class instance variable definition! !RGClassVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 82208551! A class variable definition! !RGInstanceVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:07' prior: 82208668! An instance variable definition! !RGPoolVariableDefinition commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82208785! A pool variable definition! !RGClassDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 82208894! SUnit tests for class definitions! !RGCommentDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 82209012! SUnit tests for comment definitions! !RGContainerTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82209124! SUnit tests for container! !RGGlobalDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 82209233! SUnit tests for global definitions (pools, global variables)! !RGMethodDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 82209377! SUnit tests for method definitions! !RGMonticelloTest commentStamp: 'TorstenBergmann 2/12/2014 23:10' prior: 82209489! SUnit tests for monticello! !RGNamespaceTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82209592! SUnit tests for namespaces! !RGPackageTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82209693! SUnit tests for packages! !RGSliceTest commentStamp: 'TorstenBergmann 2/12/2014 23:08' prior: 82209790! SUnit tests for slices! !RGTraitDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:09' prior: 82209895! SUnit tests for trait definitions! !RGVariableDefinitionTest commentStamp: 'TorstenBergmann 2/12/2014 23:10' prior: 82210014! SUnit tests for variable definitions! !Trait method! originalName ^ ((self isObsolete and: [ self name beginsWith: 'AnObsolete' ]) ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) ] ifFalse: [ self name ]) asSymbol! ! !Trait method! originalName ^ ((self isObsolete and: [ self name beginsWith: 'AnObsolete' ]) ifTrue: [ (self name copyFrom: 'AnObsolete' size + 1 to: self name size ) ] ifFalse: [ self name ]) asSymbol! ! "RPackage-Core"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.927.mcz') load. ScriptLoader new update30760. ! ----End fileIn----! ----QUIT----2014-02-14T13:14:50.503457+01:00 Pharo.image priorSource: 31863832! ----STARTUP----2014-02-14T13:14:50.701435+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T13:14:55.159436+01:00 Pharo.image priorSource: 31882009! ----STARTUP----2014-02-14T13:20:34.507296+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T13:20:34.795292+01:00 Pharo-30760.image priorSource: 31882206! ----STARTUP----2014-02-14T15:25:42.033016+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 15:21' prior: 82195778! commentForCurrentUpdate ^ '12862 Class comments missing in Athens package https://pharo.fogbugz.com/f/cases/12862 12773 Adding packages to group raises DNU Metaclass>>prettyName: https://pharo.fogbugz.com/f/cases/12773 12741 [Dual]ChangeSorter is badly broken https://pharo.fogbugz.com/f/cases/12741 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 15:22'! script414 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.32.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.82.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.81.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.683.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 15:22'! update30761 "self new update30761" self withUpdateLog: '12862 Class comments missing in Athens package https://pharo.fogbugz.com/f/cases/12862 12773 Adding packages to group raises DNU Metaclass>>prettyName: https://pharo.fogbugz.com/f/cases/12773 12741 [Dual]ChangeSorter is badly broken https://pharo.fogbugz.com/f/cases/12741 '. self loadTogether: self script414 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AthensCairoDefs commentStamp: 'TorstenBergmann 2/12/2014 22:22' prior: 81249534! I hold a lot of different constants needed to work with cairo library! !SimpleTextGlyphInfo commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 0! Simple glyph infos! !AthensBalloonSurfaceExamples commentStamp: 'TorstenBergmann 2/12/2014 22:18' prior: 0! Athens example using Ballon as surface ! !AthensTextBackground commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 0! Athens text background ! !AthensMorphScene commentStamp: 'TorstenBergmann 2/12/2014 22:01' prior: 0! Allows to render a morph as a scene in athens! !AthensSimpleTreeNode commentStamp: 'TorstenBergmann 2/12/2014 22:17' prior: 0! A node in an AthensTreeView! !AthensTextComposer commentStamp: 'TorstenBergmann 2/12/2014 22:20' prior: 0! Compose text! !AthensTextRenderTest commentStamp: 'TorstenBergmann 2/12/2014 22:20' prior: 0! Visual tests for correct rendering of text using Athens! !AthensTigerShape commentStamp: 'TorstenBergmann 2/12/2014 22:16' prior: 0! The tiger shape (see VGTigerDemo runDemo)! !AthensTreeView commentStamp: 'TorstenBergmann 2/12/2014 22:16' prior: 0! A tree visualization using Athens for display! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontMetricsProvider commentStamp: 'TorstenBergmann 2/12/2014 22:22' prior: 0! Provide font metrics (Cairo)! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontRenderer commentStamp: 'TorstenBergmann 2/12/2014 22:23' prior: 0! Font renderer (Cairo)! !CurveWorkshop commentStamp: 'TorstenBergmann 2/12/2014 22:19' prior: 0! An example from a workshop! !GlyphRenderer commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 0! Renderer for font glyphs! !AthensCairoDefs commentStamp: 'TorstenBergmann 2/12/2014 22:22' prior: 82226595! I hold a lot of different constants needed to work with cairo library! !SimpleTextGlyphInfo commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 82226745! Simple glyph infos! !SimpleTextGlyphInfo class methodsFor: 'instance-creation' stamp: 'IgorStasenko 7/13/2011 04:04' prior: 40312762! fromFace: anFT2Face ^(self new) loadFrom: anFT2Face; yourself.! ! !SimpleTextGlyphInfo methodsFor: 'initialization' stamp: 'IgorStasenko 10/20/2011 05:09' prior: 40313028! loadFrom: anFT2Face "Same as in superclass, but avoid converting coordinates to not waste CPU cycles" face := anFT2Face. self primLoadFrom: anFT2Face. format := ((Smalltalk isLittleEndian) ifTrue: [ format reversed ] ifFalse: [ format ]) asString. ! ! !MorphicMenuAdapter methodsFor: 'private' stamp: 'StephaneDucasse 2/14/2014 12:53' prior: 76857244! buildWidget widget := super buildWidget. self menuGroups do: [ :group || items | items := group buildWithSpec. items do: [ :item | widget addMenuItem: item ] ] separatedBy: [ widget addLine ]. ^ widget! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:03' prior: 18894805! changeSetMenu1: aBuilder | target | target := aBuilder model. target selectedChangeSet ifNotNil: [ (aBuilder item: #'Make changes go to me') keyText: 'm'; selector: #setCurrentChangeSet. (aBuilder item: #'New change set...') keyText: 'n'; selector: #newSet ]. (aBuilder item: #'Find...') keyText: 'f'; selector: #findChangeSet. target selectedChangeSet ifNotNil: [ aBuilder withSeparatorAfter. (aBuilder item: #'Rename change set') keyText: 'r'; selector: #rename. (aBuilder item: #'File out') keyText: 'o'; selector: #fileOut. (aBuilder item: #'Browse methods') keyText: 'b'; selector: #browseChangeSet. (aBuilder item: #'Browse change set') keyText: 'B'; selector: #openChangeSetBrowser ]. ! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:03' prior: 18895715! changeSetMenu2: aBuilder | target cs | target := aBuilder model. cs := target selectedChangeSet. cs ifNil: [ ^self ]. cs hasPreamble ifTrue: [ (aBuilder item: #'Edit preamble') keyText: 'p'; selector: #addPreamble. (aBuilder item: #'Remove preamble') selector: #removePreamble ] ifFalse: [ (aBuilder item: #'Add preamble') keyText: 'p'; selector: #addPreamble ]. cs hasPreamble ifTrue: [ (aBuilder item: #'Edit postscript...') selector: #editPostscript. (aBuilder item: #'Remove postscript') selector: #removePostscript ] ifFalse: [ (aBuilder item: #'Add postscript...') selector: #editPostscript ]. aBuilder withSeparatorAfter. (aBuilder item: #'Destroy change set') keyText: 'x'; selector: #remove. ! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:07' prior: 18896652! classListMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Delete class from change set') keyText: 'd'; selector: #forgetClass. (aBuilder item: #'Remove class from system') keyText: 'x'; selector: #removeClass; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b'; selector: #browseMethodFull; withSeparatorAfter. (aBuilder item: #'FileOut') selector: #fileOutClass. ! ! !ChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:11' prior: 18897229! messageListMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Delete method from changeSet') keyText: 'd'; selector: #forgetMessage. (aBuilder item: #'Remove method from system') keyText: 'x'; selector: #removeMessage; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b'; selector: #browseMethodFull; withSeparatorAfter. (aBuilder item: #'FileOut') selector: #fileOutMessage. (aBuilder item: #'Senders of...') keyText: 'n'; selector: #browseSendersOfMessages. (aBuilder item: #'Implementors of...') keyText: 'm'; selector: #browseImplementorsOfMessages. (aBuilder item: #'Versions') keyText: 'v'; selector: #browseVersions. ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:10' prior: 79310508! changeSetMenu1: aMenu shifted: isShifted "Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter" aMenu addAllFromPragma: 'changeSorterChangeSetList1Menu' target: self. ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:10' prior: 18879519! changeSetMenu2: aMenu shifted: isShifted "Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter" aMenu addAllFromPragma: 'changeSorterChangeSetList2Menu' target: self. ^aMenu ! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 12:53' prior: 18879850! changeSetMenu: aMenu shifted: isShifted "Set up aMenu to hold commands for the change-set-list pane. This could be for a single or double changeSorter" aMenu title: 'Change Set'. self changeSetMenu1: aMenu shifted: isShifted. self changeSetMenu2: aMenu shifted: isShifted. ^ aMenu! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:10' prior: 18880205! classMenu: aMenu shifted: shifted "Fill aMenu with items appropriate for the class list" self selectedClass ifNil: [ ^ nil ]. aMenu title: 'Class list'. aMenu addAllFromPragma: 'changeSorterClassListMenu' target: self. ^aMenu! ! !ChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:10' prior: 79312253! messageMenu: aMenu shifted: shifted "Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter" self selectedSelector ifNil: [ ^ nil ]. aMenu title: 'Message list'. aMenu addAllFromPragma:'changeSorterMessageListMenu' target: self. ^aMenu ! ! !TBehavior methodsFor: '*GroupManagerUI' stamp: 'GuillermoPolito 2/14/2014 14:08'! prettyName ^ self printString! ! !MenuModel methodsFor: 'initialize' stamp: 'StephaneDucasse 2/14/2014 12:21' prior: 80635329! initialize super initialize. groups := OrderedCollection new asReactiveVariable. title := 'NoTitle' asReactiveVariable. icon := nil asReactiveVariable. autoRefresh := nil asReactiveVariable. autoRefresh whenChangedDo: [ :aBoolean | self menuGroups do: [ :each | each autoRefresh: aBoolean ] ]! ! !AthensBalloonSurfaceExamples commentStamp: 'TorstenBergmann 2/12/2014 22:18' prior: 82226853! Athens example using Ballon as surface ! !AthensBalloonSurfaceExamples class methodsFor: 'instance creation' stamp: 'sig 2/29/2012 21:37' prior: 40618835! newSurface: extent ^ AthensBalloonSurface extent: extent! ! !AthensTextBackground commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 82226976! Athens text background ! !AthensMorphScene commentStamp: 'TorstenBergmann 2/12/2014 22:01' prior: 82227077! Allows to render a morph as a scene in athens! !AthensSimpleTreeNode commentStamp: 'TorstenBergmann 2/12/2014 22:17' prior: 82227204! A node in an AthensTreeView! !AthensTextComposer commentStamp: 'TorstenBergmann 2/12/2014 22:20' prior: 82227311! Compose text! !AthensTextRenderTest commentStamp: 'TorstenBergmann 2/12/2014 22:20' prior: 82227405! Visual tests for correct rendering of text using Athens! !AthensTigerShape commentStamp: 'TorstenBergmann 2/12/2014 22:16' prior: 82227538! The tiger shape (see VGTigerDemo runDemo)! !AthensTreeView commentStamp: 'TorstenBergmann 2/12/2014 22:16' prior: 82227655! A tree visualization using Athens for display! !AthensTreeView class methodsFor: 'examples' stamp: 'TorstenBergmann 2/12/2014 22:15'! example1 AthensTreeView openOn: Collection extentBlock: [ :each | (5 + each instVarNames size)@(5 + each methodDict size) ] childsBlock: [:el | el subclasses ] ! ! !AthensTreeView class methodsFor: 'instance creation' stamp: 'IgorStasenko 5/3/2013 23:21' prior: 40637598! openOn: root extentBlock: extBlock childsBlock: childsBlock | scene | scene := self new root: root extentBlock: extBlock childsBlock: childsBlock. ^ AthensSceneView new scene: scene; openInWindow.! ! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontMetricsProvider commentStamp: 'TorstenBergmann 2/12/2014 22:22' prior: 82227865! Provide font metrics (Cairo)! !Trait method! nbLibraryNameOrHandle ^ CairoLibraryLoader getLibraryHandle! ! !CairoFontRenderer commentStamp: 'TorstenBergmann 2/12/2014 22:23' prior: 82228051! Font renderer (Cairo)! !CurveWorkshop commentStamp: 'TorstenBergmann 2/12/2014 22:19' prior: 82228147! An example from a workshop! !GlyphRenderer commentStamp: 'TorstenBergmann 2/12/2014 22:21' prior: 82228248! Renderer for font glyphs! !DualChangeSorterApplication class methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:36' prior: 21015690! changesListMenu: aBuilder | target src dest | self flag: #todo. "I do not like how I'm getting the parameters (an Array), but looks the faster way now :( And I need src and dest parameters because it is called in two sides of change sorter" target := aBuilder model first. src := aBuilder model second. dest := aBuilder model third. src selectedChangeSet ifNil:[ ^self ]. (aBuilder item: #'Copy all to the other change set') keyText: 'c'; action: [ target copyAllFrom: src to: dest ]. (aBuilder item: #'Submerge into the other change set') action: [ target submerge: src into: dest ]. (aBuilder item: #'Subtract the other change set') keyText: '-'; action: [ target subtractFrom: src to: dest ]; withSeparatorAfter.! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:49' prior: 79308336! changesMenu: menu shifted: shifted from: sourcePanel to: destinationPanel | menuDest | sourcePanel changeSetMenu1: menu shifted: shifted. menuDest := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorteChangesListMenu' model: {self. sourcePanel. destinationPanel}) menuSpec. menuDest menuGroups do: [ :each | menu addMenuGroup: each ]. sourcePanel changeSetMenu2: menu shifted: shifted. ^ menu! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:49' prior: 79309000! classMenu: menu shifted: shifted from: sourcePanel to: destinationPanel "Fill aMenu with items appropriate for the class list" | menuDest | sourcePanel selectedClass ifNil: [ ^ nil ]. sourcePanel classMenu: menu shifted: shifted. menuDest := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorterClassListMenu' model: {self. sourcePanel. destinationPanel}) menuSpec. menuDest menuGroups do: [ :each | menu addMenuGroup: each ]. ^ menu! ! !DualChangeSorterApplication methodsFor: 'menu' stamp: 'StephaneDucasse 2/14/2014 13:48' prior: 79309502! messageMenu: menu shifted: shifted from: sourcePanel to: destinationPanel "Fill aMenu with items appropriate for the message list; could be for a single or double changeSorter" | menuDual | sourcePanel selectedSelector ifNil: [ ^ nil ]. sourcePanel messageMenu: menu shifted: shifted. menuDual := MenuModel new fromSpec: (PragmaMenuBuilder pragmaKeyword: 'dualChangeSorterMessageListMenu' model: { self. sourcePanel. destinationPanel }) menuSpec. menuDual menuGroups do: [ :each | menu addMenuGroup: each ]. ^menu ! ! TClass removeSelector: #prettyName! ChangeSorterApplication removeSelector: #changeSetMenu1NewGeneration:! ChangeSorterApplication class removeSelector: #changeSetMenu1NewGeneration:! !Trait method! prettyName ^ self printString! ! !Trait method! prettyName ^ self printString! ! "Athens-CairoPools"! "Athens-Examples"! "Athens-Text"! "GroupManagerUI"! "Spec-Core"! "Spec-MorphicAdapters"! "Spec-Tools"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.928.mcz') load. ScriptLoader new update30761. ! ----End fileIn----! ----QUIT----2014-02-14T15:25:48.021361+01:00 Pharo.image priorSource: 31882403! ----STARTUP----2014-02-14T15:25:48.296736+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T15:25:52.822725+01:00 Pharo.image priorSource: 31909434! ----STARTUP----2014-02-14T15:31:30.901735+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T15:31:31.167732+01:00 Pharo-30761.image priorSource: 31909631! ----STARTUP----2014-02-14T16:23:38.364718+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 16:20' prior: 82214349! commentForCurrentUpdate ^ '12843 MessageNotUnderstood: MCDirectoryRepository>>koRemote https://pharo.fogbugz.com/f/cases/12843 12591 Nautilus: Class Pane Update after DND https://pharo.fogbugz.com/f/cases/12591 12881 Failing tests for Shortcuts on Mac https://pharo.fogbugz.com/f/cases/12881 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 16:21'! script415 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.144.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-SvenVanCaekenberghe.60.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1719.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.685.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.475.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 16:21'! update30762 "self new update30762" self withUpdateLog: '12843 MessageNotUnderstood: MCDirectoryRepository>>koRemote https://pharo.fogbugz.com/f/cases/12843 12591 Nautilus: Class Pane Update after DND https://pharo.fogbugz.com/f/cases/12591 12881 Failing tests for Shortcuts on Mac https://pharo.fogbugz.com/f/cases/12881 '. self loadTogether: self script415 merge: false. self flushCaches. ! ! "ScriptLoader30"! !KomitDirectoryRemote commentStamp: '' prior: 0! I encapsulate a gemstone repository! !PackageTreePackageSelection methodsFor: 'testing' stamp: 'NicolasPetton 2/14/2014 15:23'! includesCategory: aSymbol ^ self package name == aSymbol! ! !KMComposedModifier methodsFor: 'comparing' stamp: 'GuillermoPolito 2/14/2014 15:56' prior: 34027007! = aShortcut (aShortcut isKindOf: self class) ifFalse: [^ false]. ^ (aShortcut modifiers includesAll: modifiers) and: [ modifiers includesAll: aShortcut modifiers ]! ! !KMComposedModifier methodsFor: 'initialization' stamp: 'GuillermoPolito 2/14/2014 15:54' prior: 34027882! initialize super initialize. modifiers := OrderedCollection new.! ! !MCFileTreeRepository methodsFor: '*Komitter-Models' stamp: 'BenjaminVanRyseghem 1/5/2014 15:46' prior: 79692937! isRemote ^ true! ! !PackageTreeTagSelection methodsFor: 'testing' stamp: 'NicolasPetton 2/14/2014 15:31'! includesCategory: aSymbol ^ self categoryName asSymbol == aSymbol! ! !KMShortcutTest methodsFor: 'as yet unclassified' stamp: 'GuillermoPolito 2/14/2014 15:54' prior: 24182791! testAsString self assert: $a ctrl asString = 'Ctrl + A'. self assert: $b command asString = 'Cmd + B'. self assert: $c shift asString = 'Shift + C'. self assert: $d alt asString = 'Alt + D'. self assert: $e ctrl command asString = (KMCtrlModifier new asString ,' + ' , KMCommandModifier new asString,' + E'). ! ! !MCDirectoryRepository methodsFor: '*Komitter-Models' stamp: 'SeanDeNigris 2/9/2014 00:12'! koRemote ^ KomitDirectoryRemote new remote: self; yourself! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'NicolasPetton 2/14/2014 15:26' prior: 17345097! classRecategorized: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. ({ anAnnouncement oldCategory. anAnnouncement newCategory } anySatisfy: [ :each | self selectedPackage includesCategory: each ]) ifTrue: [ self updateBothView ]! ! !PackageTreeSelection methodsFor: 'testing' stamp: 'NicolasPetton 2/14/2014 15:21'! includesCategory: aSymbol ^ false! ! !PackageTreeGroupSelection methodsFor: 'testing' stamp: 'NicolasPetton 2/14/2014 15:22'! includesCategory: aSymbol ^ self item packages anySatisfy: [ :each | each name == aSymbol ]! ! !KomitDirectoryRemote commentStamp: '' prior: 82253983! I encapsulate a gemstone repository! !KomitDirectoryRemote class methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 12/4/2013 10:16'! icon ^ 'DIR'! ! !KomitDirectoryRemote methodsFor: '*Komitter-UI' stamp: 'BenjaminVanRyseghem 11/30/2013 20:34'! label ^ self remote directory basename! ! KomitCacheRemote removeSelector: #label! KomitCacheRemote class removeSelector: #icon! Smalltalk globals removeClassNamed: #KomitCacheRemote! MCFileTreeRepository removeSelector: #koRemote! MCCacheRepository removeSelector: #koRemote! "Keymapping-KeyCombinations"! "Keymapping-Tests"! "Komitter"! "Nautilus"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.929.mcz') load. ScriptLoader new update30762. ! ----End fileIn----! ----QUIT----2014-02-14T16:23:45.842693+01:00 Pharo.image priorSource: 31909828! ----STARTUP----2014-02-14T16:23:46.079796+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T16:23:50.723794+01:00 Pharo.image priorSource: 31925818! ----STARTUP----2014-02-14T16:29:27.176259+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T16:29:27.988254+01:00 Pharo-30762.image priorSource: 31926015! ----STARTUP----2014-02-14T20:03:42.421053+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/14/2014 20:00' prior: 82241774! commentForCurrentUpdate ^ '12508 Really strange error with Komitter on windows https://pharo.fogbugz.com/f/cases/12508 12875 Still some problems with #sourceNode https://pharo.fogbugz.com/f/cases/12875 12884 Cannot add a class to a dynamic group with drag and drop https://pharo.fogbugz.com/f/cases/12884 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/14/2014 20:00'! script416 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.685.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-MarcusDenker.213.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/14/2014 20:00'! update30763 "self new update30763" self withUpdateLog: '12508 Really strange error with Komitter on windows https://pharo.fogbugz.com/f/cases/12508 12875 Still some problems with #sourceNode https://pharo.fogbugz.com/f/cases/12875 12884 Cannot add a class to a dynamic group with drag and drop https://pharo.fogbugz.com/f/cases/12884 '. self loadTogether: self script416 merge: false. self flushCaches. ! ! "ScriptLoader30"! !Path class methodsFor: 'private' stamp: 'CamilloBruni 2/14/2014 18:43' prior: 39336230! absoluteWindowsPathRegex "Return a copy of the regex since it is not thread-safe. Note: That the #copy only makes a shallow copy which is fast and but sufficient. Note: The slow part is parsing the regular expression, which only happens once here" ^ (absoluteWindowsPathRegex ifNil: [ absoluteWindowsPathRegex := '[a-zA-Z]\:\\.*' asRegex ]) copy! ! !DynamicGroup methodsFor: 'protocol' stamp: 'EstebanLorenzano 2/14/2014 15:38'! addClass: aClass self addClasses: { aClass }! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 15:16'! isBlockReturn: aPC ^ (self method at: aPC) = 125! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 15:21'! isPushLiteralNil: aPC ^ (self method at: aPC) = 115! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 15:42'! isPushTemp: aPC ^ (self method at: aPC) between: 16 and: 31! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 16:04'! neighborPCWithCorrectMapping "Answer a pc inside the enclosing block or mathod that is correctly mapped to an AST node" "This is an ugly and temporary fix for Pharo 3. Must be removed as soon as mappings are fixed" | neighborPC | neighborPC := self isDead ifTrue: [ self startpc ] ifFalse: [ pc ]. "There is a pushLiteral: nil bytecode for each temps in a block. There is a 'pushTemp:' bytecode for each copied value of a block. These bytecodes are not mapped to any IR. We skip both" [ self isPushLiteralNil: neighborPC ] whileTrue: [ neighborPC := neighborPC + 1 ]. [ self isPushTemp: neighborPC ] whileTrue: [ neighborPC := neighborPC + 1 ]. "The block return ir instruction is mapped to the block instead of the sequence AST node. So we go just before it" (self isBlockReturn: neighborPC) ifTrue: [ neighborPC := neighborPC - 1 ]. ^ neighborPC! ! !MethodContext methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 16:15' prior: 82058477! sourceNode "Return the source node of the method or the block corresponding to the receiver" ^ (method sourceNodeForPC: self neighborPCWithCorrectMapping) enclosingMethodOrBlockNode "Uncomment the following once the pc->AST mapping is fixed" "^ (method sourceNodeForPC: (pc ifNil: [ self startpc ])) enclosingMethodOrBlockNode"! ! !BlockClosure methodsFor: 'accessing' stamp: 'CamilleTeruel 2/14/2014 14:52'! numLocalTemps "Answer the number of local temporaries for the receiver" ^BlockLocalTempCounter tempCountForBlockAt: startpc - 4 "size of push closure copy bytecode" in: self method! ! !BlockClosure methodsFor: 'accessing' stamp: 'CamilleTeruel 2/14/2014 14:52' prior: 18217743! numTemps "Answer the number of temporaries for the receiver; this includes the number of arguments and the number of copied values." ^self numCopiedValues + self numArgs + self numLocalTemps! ! !BlockClosure methodsFor: '*OpalCompiler-Core' stamp: 'CamilleTeruel 2/14/2014 14:44' prior: 80983151! sourceNode ^ self asContext sourceNode! ! !RBProgramNode methodsFor: '*opalcompiler-core' stamp: 'CamilleTeruel 2/14/2014 14:33'! enclosingMethodOrBlockNode ^ self methodOrBlockNode ! ! !RBBlockNode methodsFor: '*opalcompiler-core' stamp: 'CamilleTeruel 2/14/2014 14:37'! enclosingMethodOrBlockNode ^ parent ifNotNil: [ parent methodOrBlockNode ]! ! "FileSystem-Core"! "GroupManager"! "Kernel"! "OpalCompiler-Core"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.930.mcz') load. ScriptLoader new update30763. ! ----End fileIn----! ----QUIT----2014-02-14T20:03:48.795788+01:00 Pharo.image priorSource: 31926212! ----STARTUP----2014-02-14T20:03:49.010383+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-14T20:03:53.518374+01:00 Pharo.image priorSource: 31942758! ----STARTUP----2014-02-14T20:09:26.545178+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-14T20:09:26.817174+01:00 Pharo-30763.image priorSource: 31942955! ----STARTUP----2014-02-16T13:39:42.839517+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 2/16/2014 13:36' prior: 82258158! commentForCurrentUpdate ^ '12880 Monticello shows new class-side extension methods as local (i.e. not as extensions) https://pharo.fogbugz.com/f/cases/12880 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 2/16/2014 13:36'! script417 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.41.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.685.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1022.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 2/16/2014 13:37'! update30764 "self new update30764" self withUpdateLog: '12880 Monticello shows new class-side extension methods as local (i.e. not as extensions) https://pharo.fogbugz.com/f/cases/12880 '. self loadTogether: self script417 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 2/14/2014 23:18' prior: 82004229! systemMethodRecategorizedActionFrom: ann "a protocol has been renamed a method has been removed. // WILL BE TREATED WITH SystemMethodRemovedAnnouncement a method has been moved to another category -maybe from the classic category to an extending package -maybe from an extending package to another extending package -maybe from an extending package to a classic category - maybe from a classic category to another classic category. Get out of here if my organizer has no package for the class!! (Anonymous classes)" | oldProtocol newProtocol method methodPackage destinationPackage | method := ann methodRecategorized. method ifNil: [ ^ self ]. method origin = ann methodClass ifFalse: [ ^ self]. (self packageOfClassNamed: ann methodClass theNonMetaClass name) ifNil: [ ^ self ]. newProtocol := ann newProtocol. newProtocol ifNil: [ ^ self ]. oldProtocol := ann oldProtocol ifNil: [ '' ]. methodPackage := method packageFromOrganizer: self. newProtocol asLowercase = oldProtocol asLowercase ifTrue: [ ^ self ]. destinationPackage := (self hasPackageForProtocol: newProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: newProtocol inClass: method methodClass ] ifFalse: [ (newProtocol beginsWith: '*') ifTrue: [ self ensureExistAndRegisterPackageNamed: newProtocol allButFirst capitalized ] ifFalse: [ method methodClass package ] ]. methodPackage := (self hasPackageForProtocol: oldProtocol inClass: method methodClass) ifTrue: [ self packageForProtocol: oldProtocol inClass: method methodClass ] ifFalse: [ method methodClass package ]. methodPackage = destinationPackage ifFalse: [ (methodPackage methods includes: method) ifTrue: [ methodPackage removeMethod: method ]. destinationPackage addMethod: method. SystemAnnouncer uniqueInstance methodRepackaged: method from: methodPackage to: destinationPackage ]! ! "RPackage-SystemIntegration"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-EstebanLorenzano.933.mcz') load. ScriptLoader new update30764. ! ----End fileIn----! ----QUIT----2014-02-16T13:39:45.319633+01:00 Pharo.image priorSource: 31943152! ----STARTUP----2014-02-16T13:39:45.509497+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-16T13:39:49.935483+01:00 Pharo.image priorSource: 31958003! ----STARTUP----2014-02-16T13:45:29.69798+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-16T13:45:30.401977+01:00 Pharo-30764.image priorSource: 31958200! ----STARTUP----2014-02-17T13:54:41.854597+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/17/2014 13:52' prior: 82275102! commentForCurrentUpdate ^ '12896 Screenshot tool: tell save location https://pharo.fogbugz.com/f/cases/12896 12895 #centeredAlert:title:configure dialog is not centered https://pharo.fogbugz.com/f/cases/12895 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/17/2014 13:52'! script418 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.70.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.685.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1024.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-SvenVanCaekenberghe.295.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/17/2014 13:52'! update30765 "self new update30765" self withUpdateLog: '12896 Screenshot tool: tell save location https://pharo.fogbugz.com/f/cases/12896 12895 #centeredAlert:title:configure dialog is not centered https://pharo.fogbugz.com/f/cases/12895 '. self loadTogether: self script418 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PasteUpMorph methodsFor: 'world menu' stamp: 'SeanDeNigris 2/16/2014 20:33' prior: 74588219! makeAScreenshot | filePrefix | filePrefix := 'PharoScreenshot'. (UIManager default chooseFrom: {'The entire world' translated. 'A selected area' translated} values: #(#world #area ) message: 'What do you want to shoot? (File will be saved in image directory)' translated title: 'Make a screenshot') ifNotNil: [:choice | |form | form := choice = #world ifTrue: [World imageForm] ifFalse: [Form fromUser]. PNGReadWriter putForm: form onFileNamed: (FileSystem workingDirectory / filePrefix , 'png') nextVersion] ! ! !UITheme methodsFor: 'services' stamp: 'HernanMoralesDurand 2/16/2014 20:37' prior: 54074928! centeredAlertIn: aThemedMorph text: aStringOrText title: aString configure: aBlock "Answer the result of an alert dialog (true) with the given label and title." | dialog | SoundTheme useThemeSounds ifTrue: [ self alertSound play ]. dialog := (AlertDialogWindow newWithTheme: aThemedMorph theme) textFont: self textFont; title: aString; text: aStringOrText. aBlock value: dialog. dialog left: ((World width / 2) - (dialog width /2)). dialog top: ((World height / 2) - (dialog height /2)). aThemedMorph openModal: dialog. ^ dialog cancelled not! ! !WorldState class methodsFor: 'world menu items' stamp: 'SeanDeNigris 2/16/2014 20:49' prior: 82192472! screenShotCommandOn: aBuilder (aBuilder item: #Screenshot) parent: #Tools; target: World; order: 0.59; selector: #makeAScreenshot; label: 'Screenshot' translated; icon: Smalltalk ui icons smallScreenshotIcon! ! "Morphic-Core"! "Polymorph-Widgets"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.934.mcz') load. ScriptLoader new update30765. ! ----End fileIn----! ----QUIT----2014-02-17T13:54:48.540623+01:00 Pharo.image priorSource: 31958396! ----STARTUP----2014-02-17T13:54:48.792309+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-17T13:54:53.584304+01:00 Pharo.image priorSource: 31972959! ----STARTUP----2014-02-17T14:00:37.846001+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-17T14:00:38.85801+01:00 Pharo-30765.image priorSource: 31973156! ----STARTUP----2014-02-17T16:27:45.192738+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/17/2014 16:25' prior: 82290342! commentForCurrentUpdate ^ '12892 DiskFileSystemTest>>#testEntryAt https://pharo.fogbugz.com/f/cases/12892 12897 Settings Browser is slow when opened on a package https://pharo.fogbugz.com/f/cases/12897 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/17/2014 16:25'! script419 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.72.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.685.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1024.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/17/2014 16:25'! update30766 "self new update30766" self withUpdateLog: '12892 DiskFileSystemTest>>#testEntryAt https://pharo.fogbugz.com/f/cases/12892 12897 Settings Browser is slow when opened on a package https://pharo.fogbugz.com/f/cases/12897 '. self loadTogether: self script419 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FileSystemTest methodsFor: 'tests' stamp: 'BenComan 2/17/2014 21:33' prior: 39130029! testEntryAt | path1 path2 entry1 entry2 | Transcript show: $. ; flush. path1 := Path * 'plonk1'. path2 := Path * 'plonk2'. self markForCleanup: path1. self markForCleanup: path2. filesystem createDirectory: path1. (Delay forSeconds: 2) wait. "#creationTime seems limited to 1 second resolution" filesystem createDirectory: path2. entry1 := filesystem entryAt: path1. entry2 := filesystem entryAt: path2. self assert: entry1 isDirectory. self assert: entry2 isDirectory. self assert: entry1 reference = (filesystem referenceTo: path1) asAbsolute. self assert: entry2 reference = (filesystem referenceTo: path2) asAbsolute. Transcript crShow: entry1 creationTime printString , ' ', entry2 creationTime printString. self assert: entry1 creationTime < entry2 creationTime. self assert: entry1 modificationTime < entry2 modificationTime. ! ! !SettingBrowser methodsFor: 'user interface' stamp: 'TudorGirba 2/16/2014 21:44' prior: 33146053! setViewedPackageNames: aText | allViewed | allViewed := Set new. aText asString substrings do: [:sub | (RPackageOrganizer default packageNamed: sub ifAbsent: []) ifNotNil: [:pkg | allViewed add: pkg]]. self changePackageSet: allViewed. self changed: #getViewedPackageNames ! ! !SettingNode methodsFor: 'accessing' stamp: 'TudorGirba 2/16/2014 21:45' prior: 33178631! receiverPackage ^ self settingReceiver ifNotNil: [self settingReceiver class package] ! ! SettingNode removeSelector: #package! "FileSystem-Tests-Core"! "System-Settings"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.935.mcz') load. ScriptLoader new update30766. ! ----End fileIn----! ----QUIT----2014-02-17T16:27:48.36075+01:00 Pharo.image priorSource: 31973353! ----STARTUP----2014-02-17T16:27:48.56838+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-17T16:27:53.06038+01:00 Pharo.image priorSource: 31987795! ----STARTUP----2014-02-17T16:33:33.858996+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-17T16:33:34.152984+01:00 Pharo-30766.image priorSource: 31987990! ----STARTUP----2014-02-18T08:55:47.248891+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/18/2014 08:52' prior: 82305298! commentForCurrentUpdate ^ '12892 DiskFileSystemTest>>#testEntryAt https://pharo.fogbugz.com/f/cases/12892 12890 Spotlight with package names opens Nautilus with nil sourceTextArea https://pharo.fogbugz.com/f/cases/12890 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/18/2014 08:52'! script420 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.73.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.914.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.689.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1024.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.130.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-SvenVanCaekenberghe.627.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/18/2014 08:52'! update30767 "self new update30767" self withUpdateLog: '12892 DiskFileSystemTest>>#testEntryAt https://pharo.fogbugz.com/f/cases/12892 12890 Spotlight with package names opens Nautilus with nil sourceTextArea https://pharo.fogbugz.com/f/cases/12890 '. self loadTogether: self script420 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractNautilusUI methodsFor: 'source code area' stamp: 'BenComan 2/16/2014 23:20' prior: 79535444! okToChange sourceTextArea ifNil: [ ^ true ]. sourceTextArea text asString trimBoth = sourceTextArea getText asString trimBoth ifTrue: [ ^ true ]. sourceTextArea canDiscardEdits ifTrue: [ ^ true]. sourceTextArea update: #wantToChange. ^ sourceTextArea canDiscardEdits! ! !FileSystemTest methodsFor: 'tests' stamp: 'BenComan 2/18/2014 01:26' prior: 82317325! testEntryAt | path1 path2 entry1 entry2 | path1 := Path * 'plonk1'. path2 := Path * 'plonk2'. self markForCleanup: path1. self markForCleanup: path2. filesystem createDirectory: path1. (Delay forSeconds: 2) wait. "#creationTime seems limited to 1 second resolution" filesystem createDirectory: path2. entry1 := filesystem entryAt: path1. entry2 := filesystem entryAt: path2. self assert: entry1 isDirectory. self assert: entry2 isDirectory. self assert: entry1 reference = (filesystem referenceTo: path1) asAbsolute. self assert: entry2 reference = (filesystem referenceTo: path2) asAbsolute. self assert: entry1 creationTime < entry2 creationTime. self assert: entry1 modificationTime < entry2 modificationTime. ! ! "FileSystem-Tests-Core"! "Nautilus"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.936.mcz') load. ScriptLoader new update30767. ! ----End fileIn----! ----QUIT----2014-02-18T08:55:50.914889+01:00 Pharo.image priorSource: 31988186! ----STARTUP----2014-02-18T08:55:51.119646+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-18T08:55:55.793643+01:00 Pharo.image priorSource: 32002292! ----STARTUP----2014-02-18T09:01:52.276688+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-18T09:01:52.552687+01:00 Pharo-30767.image priorSource: 32002489! ----STARTUP----2014-02-19T18:15:46.932012+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/19/2014 18:12' prior: 82320132! commentForCurrentUpdate ^ '12855 #removeClassVarNamed: is broken https://pharo.fogbugz.com/f/cases/12855 12909 initializeDefaultFromMC is over an old organizer (while calling RPackage stuff) https://pharo.fogbugz.com/f/cases/12909 12921 TreeInspector default right-click menu causes error https://pharo.fogbugz.com/f/cases/12921 12910 Add Inbox to all Versionner packages https://pharo.fogbugz.com/f/cases/12910 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/19/2014 18:12'! script421 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.73.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1723.mcz KernelTests-MarcusDenker.625.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.259.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.689.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-MarcusDenker.102.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-MarcusDenker.93.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1024.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.305.mcz Spec-Debugger-MarcusDenker.202.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.154.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/19/2014 18:12'! update30768 "self new update30768" ScriptLoader new addHomeRepositoryToAllPackages. self withUpdateLog: '12855 #removeClassVarNamed: is broken https://pharo.fogbugz.com/f/cases/12855 12909 initializeDefaultFromMC is over an old organizer (while calling RPackage stuff) https://pharo.fogbugz.com/f/cases/12909 12921 TreeInspector default right-click menu causes error https://pharo.fogbugz.com/f/cases/12921 12910 Add Inbox to all Versionner packages https://pharo.fogbugz.com/f/cases/12910 '. self loadTogether: self script421 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 2/18/2014 15:06'! basicInitializeFromMC self allManagers do: [ :workingCopy | self basicRegisterPackage: (RPackage named: workingCopy packageName) ] displayingProgress: 'Importing monticello packages'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCFor: eachBehavior ] displayingProgress: 'Importing behaviors'. Smalltalk allClassesAndTraits do: [ :eachBehavior | self initializeFromMCMethodsFor: eachBehavior. self initializeFromMCMethodsFor: eachBehavior class ] displayingProgress: 'Importing methods'. Smalltalk allClassesAndTraits do: [ :eachBehavior | eachBehavior organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior protocol: eachProtocol ]. eachBehavior class organization extensionProtocols do: [ :eachProtocol | self initializeFromMCExtensionsFor: eachBehavior class protocol: eachProtocol ] ] displayingProgress: 'Importing extensions'. ! ! !RPackageOrganizer methodsFor: '*Monticello-RPackage' stamp: 'EstebanLorenzano 2/18/2014 15:06' prior: 77727655! initializeFromMC RPackage withOrganizer: self do: [ self basicInitializeFromMC ]. ! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'CamilloBruni 2/19/2014 15:57' prior: 78213332! menu: aMenu shifted: aBoolean ^ (self model menu: aMenu shifted: aBoolean) ifNotNil: [ :menu | menu buildWithSpec ]! ! !TClass methodsFor: 'class variables' stamp: 'MarcusDenker 2/17/2014 13:44' prior: 40989586! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [ ^ self error: aString , ' is not a class variable' ]. self withAllSubclasses do: [ :subclass | (Array with: subclass with: subclass class) do: [ :classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name , ' (' , aString , ' is Undeclared) '. ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ (self confirm: (aString , ' is still used in code of class ' , classOrMeta name , '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [ ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ ^ self ] ] ] ] ]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [ self classPool: nil ]! ! !Trait method! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [ ^ self error: aString , ' is not a class variable' ]. self withAllSubclasses do: [ :subclass | (Array with: subclass with: subclass class) do: [ :classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name , ' (' , aString , ' is Undeclared) '. ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ (self confirm: (aString , ' is still used in code of class ' , classOrMeta name , '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [ ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ ^ self ] ] ] ] ]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [ self classPool: nil ]! ! !Trait method! removeClassVarNamed: aString "Remove the class variable whose name is the argument, aString, from the names defined in the receiver, a class. Create an error notification if aString is not a class variable or if it is still being used in the code of the class." | aSymbol | aSymbol := aString asSymbol. (self classPool includesKey: aSymbol) ifFalse: [ ^ self error: aString , ' is not a class variable' ]. self withAllSubclasses do: [ :subclass | (Array with: subclass with: subclass class) do: [ :classOrMeta | (classOrMeta whichSelectorsReferTo: (self classPool associationAt: aSymbol)) isEmpty ifFalse: [ InMidstOfFileinNotification signal ifTrue: [ self crTrace: self name , ' (' , aString , ' is Undeclared) '. ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ (self confirm: (aString , ' is still used in code of class ' , classOrMeta name , '.\Is it okay to move it to Undeclared?') withCRs) ifTrue: [ ^ Undeclared declare: aSymbol from: self classPool ] ifFalse: [ ^ self ] ] ] ] ]. self classPool removeKey: aSymbol. self classPool isEmpty ifTrue: [ self classPool: nil ]! ! "Monticello"! "Spec-MorphicAdapters"! "Traits"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.937.mcz') load. ScriptLoader new update30768. ! ----End fileIn----! ----QUIT----2014-02-19T18:15:50.914487+01:00 Pharo.image priorSource: 32002686! ----STARTUP----2014-02-19T18:15:51.113741+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-19T18:15:55.579732+01:00 Pharo.image priorSource: 32021395! ----STARTUP----2014-02-19T18:21:44.981218+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-19T18:21:45.245215+01:00 Pharo-30768.image priorSource: 32021592! ----STARTUP----2014-02-19T23:16:36.125512+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/19/2014 23:12' prior: 82334632! commentForCurrentUpdate ^ '12925 MorphTreeNodeModel speedup https://pharo.fogbugz.com/f/cases/12925 12923 DateAndTime gets into infinite loop when a time is missing https://pharo.fogbugz.com/f/cases/12923 12815 Class comments missing for Network package https://pharo.fogbugz.com/f/cases/12815 12927 Speed up Slider and ScrollBar by reusing submorphs https://pharo.fogbugz.com/f/cases/12927 12891 Inspector menu histroy back/forward shows "a KeyCombinationChoice" keyboard shortcut https://pharo.fogbugz.com/f/cases/12891 12929 Reduce default filtering overhead in TreeNautilus https://pharo.fogbugz.com/f/cases/12929 12922 Newly opened full Debugger has no selection set when opened directly https://pharo.fogbugz.com/f/cases/12922 12888 NoTitle menu title in inspector context menu https://pharo.fogbugz.com/f/cases/12888 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/19/2014 23:13'! script422 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.147.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.73.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-SvenVanCaekenberghe.1725.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-MarcusDenker.148.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.691.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1027.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-MarcusDenker.1017.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/19/2014 23:13'! update30769 "self new update30769" self withUpdateLog: '12925 MorphTreeNodeModel speedup https://pharo.fogbugz.com/f/cases/12925 12923 DateAndTime gets into infinite loop when a time is missing https://pharo.fogbugz.com/f/cases/12923 12815 Class comments missing for Network package https://pharo.fogbugz.com/f/cases/12815 12927 Speed up Slider and ScrollBar by reusing submorphs https://pharo.fogbugz.com/f/cases/12927 12891 Inspector menu histroy back/forward shows "a KeyCombinationChoice" keyboard shortcut https://pharo.fogbugz.com/f/cases/12891 12929 Reduce default filtering overhead in TreeNautilus https://pharo.fogbugz.com/f/cases/12929 12922 Newly opened full Debugger has no selection set when opened directly https://pharo.fogbugz.com/f/cases/12922 12888 NoTitle menu title in inspector context menu https://pharo.fogbugz.com/f/cases/12888 '. self loadTogether: self script422 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MockSocketStream commentStamp: 'TorstenBergmann 2/5/2014 10:10' prior: 0! A test mock for socket streams! !HTTPEncodingTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 0! SUnit tests for HTTPEncoding! !HttpUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 0! SUnit tests for HttpUrl ! !MailMessageTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 0! SUnit tests for MailMessage! !NetNameResolverTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 0! SUnit tests for NetNameResolver ! !QuotedPrintableMimeConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 0! SUnit tests for QuotedPrintableMimeConverter! !SMTPClientTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 0! SUnit tests for SMTP client! !SocketTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 0! SUnit tests for sockets! !UUIDPrimitivesTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 0! SUnit tests for UUIDPrimitives ! !UUIDTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 0! SUnit tests for UUID! !FileUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 0! SUnit tests for FileUrl! !HierarchicalUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 0! SUnit tests for hierarchical Urls! !SocketStreamTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 0! SUnit tests for socket streams! !SocketPrimitiveFailed commentStamp: 'TorstenBergmann 2/5/2014 09:59' prior: 0! Notify that a socket primitive failed! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'CamilloBruni 2/19/2014 21:13' prior: 77458778! packageMatchPattern: aRPackage ^ self packagePattern ifNil: [ true ] ifNotNil: [ :pattern | pattern search: aRPackage name ]! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'CamilloBruni 2/19/2014 21:14' prior: 77458953! packagePattern ^ packagePattern ifNil: [ nil ]! ! !PackageTreeNautilusUI methodsFor: 'package filter' stamp: 'CamilloBruni 2/19/2014 21:14' prior: 77459117! packageSearchUpdate: aPattern packagePattern := (aPattern isNil or: [ aPattern trimBoth isEmpty ]) ifTrue: [ nil ] ifFalse: [ self ensureSafePackagePattern: aPattern ]. self updatePackages! ! !PluggableTextMorph methodsFor: 'editor access' stamp: 'CamilloBruni 2/19/2014 18:20' prior: 35621265! handleEdit: editBlock | result | textMorph editor selectFrom: selectionInterval first to: selectionInterval last; model: model. "For, eg, evaluateSelection" textMorph handleEdit: [result := editBlock value]. "Update selection after edit" self scrollSelectionIntoView. self textChanged. ^ result! ! !MorphTreeNodeModel methodsFor: 'accessing' stamp: 'CamilloBruni 2/19/2014 18:44'! name ^ self item name! ! !DateAndTimeTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 2/19/2014 19:40'! testReadFromDateOnly self assert: '2014-02-19' asDateAndTime translateToUTC printString equals: '2014-02-19T00:00:00+00:00'. self assert: '2014-02-19Z' asDateAndTime printString equals: '2014-02-19T00:00:00+00:00'. self assert: '2014-02-19T+07:00' asDateAndTime printString equals: '2014-02-19T00:00:00+07:00'. self assert: '2014-02-19 -05:00' asDateAndTime printString equals: '2014-02-19T00:00:00-05:00'. ! ! !MockSocketStream commentStamp: 'TorstenBergmann 2/5/2014 10:10' prior: 82367088! A test mock for socket streams! !InspectorNavigator methodsFor: 'menu' stamp: 'NicolaiHess 2/15/2014 23:59' prior: 78737069! customMenuActions ^ [:aMenu :currentGroup | currentGroup addItem: [ :item | item name: 'Dive Into' translated; action: [ self diveIntoSelectedObject ]; shortcut: $d command mac | $d alt win | $d alt unix]. (history hasPrevious or: [ history hasNext ]) ifTrue: [ aMenu addGroup: [ :aGroup | history hasPrevious ifTrue: [ aGroup addItem: [ :item | item name: 'Back' translated; action: [ self inspectPrevious ]; shortcut: $[ command mac | $[ alt win | $[ alt unix ] ]. history hasNext ifTrue: [ aGroup addItem: [ :item | item name: 'Forward' translated; action: [ self inspectNext ]; shortcut: $] command mac | $] alt win | $] alt unix ] ] ] ] ]! ! !ScrollBar methodsFor: 'update' stamp: 'CamilloBruni 2/19/2014 20:55'! updateDownButtonBounds "update the receiver's downButton bounds" downButton bounds: (self theme scrollBarDownButtonBoundsFor: self)! ! !ScrollBar methodsFor: 'update' stamp: 'CamilloBruni 2/19/2014 20:36'! updatePagingAreaBounds "Initialize the receiver's pagingArea." pagingArea bounds: self totalSliderArea! ! !ScrollBar methodsFor: 'update' stamp: 'CamilloBruni 2/19/2014 20:55'! updateSliderBounds "Initialize the receiver's slider." self updateUpButtonBounds; updateDownButtonBounds; updatePagingAreaBounds. super updateSliderBounds. ! ! !ScrollBar methodsFor: 'update' stamp: 'CamilloBruni 2/19/2014 20:40'! updateUpButtonBounds "update the receiver's upButton bounds" upButton bounds: (self theme scrollBarUpButtonBoundsFor: self)! ! !Slider methodsFor: 'geometry' stamp: 'CamilloBruni 2/19/2014 20:35' prior: 33376693! extent: newExtent newExtent = bounds extent ifTrue: [^ self]. bounds isWide ifTrue: [super extent: (newExtent x max: self sliderThickness * 2) @ newExtent y] ifFalse: [super extent: newExtent x @ (newExtent y max: self sliderThickness * 2)]. self updateSliderBounds! ! !Slider methodsFor: 'update' stamp: 'CamilloBruni 2/19/2014 20:35'! updateSliderBounds slider bounds: self totalSliderArea. sliderShadow bounds: self totalSliderArea. self computeSlider. ! ! !HTTPEncodingTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 82367195! SUnit tests for HTTPEncoding! !HTTPEncodingTest methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 10/27/2013 11:45' prior: 75816487! testEncodeForHTTP self assert: 'aa aa éé aa aa' urlEncoded = 'aa%20aa%20%C3%A9%C3%A9%20aa%20aa'! ! !HttpUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 82367295! SUnit tests for HttpUrl ! !MailMessageTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 82367396! SUnit tests for MailMessage! !NetNameResolverTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 82367503! SUnit tests for NetNameResolver ! !NetNameResolverTest methodsFor: 'accessing' stamp: 'NouryBouraqadi 10/1/2010 16:27' prior: 28356514! localHostAddressIsLoopBackAddress ^NetNameResolver localHostAddress = NetNameResolver loopBackAddress! ! !NetNameResolverTest methodsFor: 'accessing' stamp: 'NouryBouraqadi 10/1/2010 16:29' prior: 28356706! localHostNameIsLoopBackName ^NetNameResolver localHostName = NetNameResolver loopBackName! ! !QuotedPrintableMimeConverterTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 82367628! SUnit tests for QuotedPrintableMimeConverter! !SMTPClientTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 82367747! SUnit tests for SMTP client! !SocketTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 82367845! SUnit tests for sockets! !UUIDPrimitivesTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 82367947! SUnit tests for UUIDPrimitives ! !UUIDTest commentStamp: 'TorstenBergmann 2/5/2014 10:12' prior: 82368047! SUnit tests for UUID! !FileUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 82368139! SUnit tests for FileUrl! !HierarchicalUrlTest commentStamp: 'TorstenBergmann 2/5/2014 10:13' prior: 82368242! SUnit tests for hierarchical Urls! !SocketStreamTest commentStamp: 'TorstenBergmann 2/5/2014 10:11' prior: 82368352! SUnit tests for socket streams! !MenuModel methodsFor: 'initialize' stamp: 'CamilloBruni 2/19/2014 14:32' prior: 82234749! initialize super initialize. groups := OrderedCollection new asReactiveVariable. title := nil asReactiveVariable. icon := nil asReactiveVariable. autoRefresh := nil asReactiveVariable. autoRefresh whenChangedDo: [ :aBoolean | self menuGroups do: [ :each | each autoRefresh: aBoolean ] ]! ! !UITheme methodsFor: 'morph creation' stamp: 'CamilloBruni 2/19/2014 20:39' prior: 39876865! newScrollBarDownButtonFor: aScrollbar ^ BorderedMorph newBounds: (self scrollBarDownButtonBoundsFor: aScrollbar)! ! !UITheme methodsFor: 'morph creation' stamp: 'CamilloBruni 2/19/2014 20:40' prior: 39877120! newScrollBarUpButtonFor: aScrollbar ^ BorderedMorph newBounds: (self scrollBarUpButtonBoundsFor: aScrollbar)! ! !UITheme methodsFor: 'morph creation' stamp: 'CamilloBruni 2/19/2014 20:39'! scrollBarDownButtonBoundsFor: aScrollbar ^ aScrollbar innerBounds bottomRight - aScrollbar buttonExtent extent: aScrollbar buttonExtent! ! !UITheme methodsFor: 'morph creation' stamp: 'CamilloBruni 2/19/2014 20:40'! scrollBarUpButtonBoundsFor: aScrollbar ^ aScrollbar innerBounds topLeft extent: aScrollbar buttonExtent! ! !Password class methodsFor: 'system startup' stamp: 'tk 6/24/1999 11:36' prior: 29166819! shutDown "Forget all cached passwords, so they won't stay in the image" self allSubInstancesDo: [:each | each cache: nil].! ! !Password methodsFor: 'accessing' stamp: 'tk 1/5/98 21:08' prior: 29165824! decode: string "Xor with secret number -- just so file won't have raw password in it" | kk rand | rand := Random new seed: 234237. kk := (ByteArray new: string size) collect: [:bb | (rand next * 255) asInteger]. 1 to: kk size do: [:ii | kk at: ii put: ((kk at: ii) bitXor: (string at: ii) asciiValue)]. ^ kk asString! ! !Password methodsFor: 'accessing' stamp: 'StephaneDucasse 6/22/2012 18:58' prior: 29166239! serverPasswords "Get the server passwords off the disk and decode them. The file 'sqk.info' must be in some folder that Squeak thinks is special (vm folder, or default directory). (Note: This code works even if you are running with no system sources file.)" | sfile | (sfile := FileSystem lookInUsualPlaces: 'pass.info') ifNil: [^ nil]. ^ (self decode: sfile contentsOfEntireFile) lines ! ! !DateAndTime class methodsFor: 'input' stamp: 'SvenVanCaekenberghe 2/19/2014 19:37' prior: 33623198! readFrom: aStream "Parse and return a new DateAndTime instance from stream, as a Date, an optional Time and an optional TimeZone offset. The time defaults to midnight, the timezone to the local offset" "self readFrom: '2013-03-04T23:47:52.876+01:00' readStream" | date time offset | date := Date readFrom: aStream. [ aStream atEnd or: [ '0123456789Z+-' includes: aStream peek ] ] whileFalse: [ aStream next ]. ('0123456789' includes: aStream peek) ifTrue: [ time := Time readFrom: aStream ] ifFalse: [ time := Time midnight ]. aStream skipSeparators. offset := self readTimezoneOffsetFrom: aStream. ^ self year: date year month: date monthIndex day: date dayOfMonth hour: time hour minute: time minute second: time second nanoSecond: time nanoSecond offset: offset! ! !SpecDebugger methodsFor: 'opening' stamp: 'CamilloBruni 2/19/2014 16:45' prior: 68775487! openFullNoSuspendLabel: aString "Create and schedule a full debugger with the given label. Do not terminate the current active process." self openWithSpec; updateToolbar; updateCodeFromContext; label: aString. self flag: 'Would ne better to move this into the session'. self session errorWasInUIProcess: (UIManager default spawnNewProcessIfThisIsUI: self interruptedProcess) "errorWasInUIProcess := UIManager default spawnNewProcessIfThisIsUI: interruptedProcess"! ! !SocketPrimitiveFailed commentStamp: 'TorstenBergmann 2/5/2014 09:59' prior: 82368464! Notify that a socket primitive failed! "Kernel"! "KernelTests"! "Morphic-Base"! "Nautilus"! "Network-Kernel"! "NetworkTests"! "Polymorph-Widgets"! "Spec-Core"! "Spec-Debugger"! "Spec-Inspector"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.938.mcz') load. ScriptLoader new update30769. ! ----End fileIn----! ----QUIT----2014-02-19T23:16:51.039519+01:00 Pharo.image priorSource: 32021789! ----STARTUP----2014-02-19T23:16:51.266536+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-19T23:16:55.796531+01:00 Pharo.image priorSource: 32047633! ----STARTUP----2014-02-19T23:22:32.583896+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-19T23:22:32.877895+01:00 Pharo-30769.image priorSource: 32047830! ----STARTUP----2014-02-19T23:57:34.930165+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/19/2014 23:53' prior: 82353742! commentForCurrentUpdate ^ '12905 Completion is bugging under Linux/Ubuntu 13.04 with factorial method https://pharo.fogbugz.com/f/cases/12905 12919 Beeper>>#beepPrimitive calls deprecated code https://pharo.fogbugz.com/f/cases/12919 11434 Nautilus should keep the scroll position in list of methods https://pharo.fogbugz.com/f/cases/11434 12913 Issue in IconicListItem https://pharo.fogbugz.com/f/cases/12913 12872 Issues with resolving parent Path https://pharo.fogbugz.com/f/cases/12872 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/19/2014 23:54'! script423 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-SvenVanCaekenberghe.1725.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1028.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.6.mcz Versionner-Core-Commands-MarcusDenker.40.mcz Versionner-Core-DependenciesModel-MarcusDenker.68.mcz Versionner-Core-Model-MarcusDenker.36.mcz Versionner-Spec-Browser-MarcusDenker.114.mcz Versionner-Tests-Core-Commands-MarcusDenker.9.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.30.mcz Versionner-Tests-Core-Model-MarcusDenker.14.mcz Versionner-Tests-Resources-MarcusDenker.9.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/19/2014 23:54'! update30770 "self new update30770" self withUpdateLog: '12905 Completion is bugging under Linux/Ubuntu 13.04 with factorial method https://pharo.fogbugz.com/f/cases/12905 12919 Beeper>>#beepPrimitive calls deprecated code https://pharo.fogbugz.com/f/cases/12919 11434 Nautilus should keep the scroll position in list of methods https://pharo.fogbugz.com/f/cases/11434 12913 Issue in IconicListItem https://pharo.fogbugz.com/f/cases/12913 12872 Issues with resolving parent Path https://pharo.fogbugz.com/f/cases/12872 '. self loadTogether: self script423 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NECTestClass commentStamp: '' prior: 69900324! I'm only for SUnit TestCases.! !Beeper class methodsFor: 'beeping' stamp: 'NorbertHartl 2/19/2014 11:54' prior: 38838259! beepPrimitive "Make a primitive beep. Only use this if you want to force this to be a primitive beep. Otherwise use Beeper class>>beep since this method bypasses the current registered playable entity." SoundSystem current soundEnabled ifTrue: [self primitiveBeep]! ! !NECTestClass commentStamp: '' prior: 82392657! I'm only for SUnit TestCases.! !NECTestClass methodsFor: 'initialization' stamp: 'NicolaiHess 2/19/2014 15:37' prior: 69900425! initialize: aRectangle constantInteger := 15. constantLargeInteger := 1073741824. constantString := 'Ruben'. constantSymbol := #Symbol. constantArray := #(15 16 17 28 ). constantBoolean := true. typeSuggestingParameter := aRectangle. messageSend := Dictionary new. messageSend2 := aRectangle origin. globalVarKeyword := SortedCollection sortBlock: [:a :b | a <= b]. globalVarKeyword2 := SortedCollection new: 15. constantNil := nil. typeSuggestingParameter2 := nil. complexInit := 15 > 16 ifTrue: [#Symbol] ifFalse: ['String']. complexInit2 := Dictionary new: aRectangle origin x. ! ! !NautilusUI methodsFor: 'menus behavior' stamp: 'BenComan 2/18/2014 00:47' prior: 28307268! toggleBreakPoint | savedSelectedMethodIndex savedVscroll | self selectedMethod ifNotNil: [ :meth | savedSelectedMethodIndex := methodWidget selectedMethodIndex. savedVscroll := methodWidget vScrollValue. self toggleBreakOnEntryIn: meth. self update. methodWidget selectedMethodIndex: savedSelectedMethodIndex. savedVscroll := methodWidget vScrollValue: savedVscroll. ]. ! ! !NECContext methodsFor: 'private-type-guessing' stamp: 'NicolaiHess 2/18/2014 14:16' prior: 27773374! guessTypeOf: aNumber | range | self configureSelectorsOnly. recurseCount > 10 ifTrue: [ ^ nil ]. recurseCount := recurseCount + 1. range := ranges at: aNumber. range isSelf ifTrue: [ ^theClass ]. range isSuper ifTrue: [ ^theClass superclass ]. range isConstant ifTrue: [ ^self nonAbstractTypeOf: range ]. range isArgument ifTrue: [ ^self guessArgument: range ]. range isTemporaryVariable ifTrue: [ ^self guessTempVarClass: range ]. range isInstanceVariable ifTrue: [ ^self guessInstVarClass: range ]. range isClassVariable ifTrue: [ ^self guessClassVarClass: range ]. range isGlobal ifTrue: [ ^self guessGlobal: aNumber ]. ^nil! ! !NECContext methodsFor: 'private-type-guessing' stamp: 'NicolaiHess 2/18/2014 14:13'! nonAbstractTypeOf: aRange | cls | cls := aRange asType. cls hasAbstractMethods ifFalse: [ ^ cls ]. ^ (cls readFromString: (aRange textIn: source)) class! ! !NECUntypedModelTest methodsFor: 'tests' stamp: 'NicolaiHess 2/19/2014 15:38' prior: 27877747! testCaseSensitive | model locals | self assert: NECPreferences caseSensitive. model := NECUntypedModel class: NECTestClass temporaries: OrderedCollection new. model loadEntries. locals := model entriesOfType: #instVar. self assert: locals size == 18. self assert: (locals includes: 'third'). self assert: (locals includes: 'constantInteger'). self assert: (locals includes: 'complexInit2'). self assert: (locals includes: 'typeSuggestingParameter'). model narrowWith: 'fo'! ! !NECUntypedModelTest methodsFor: 'tests' stamp: 'NicolaiHess 2/19/2014 15:38' prior: 27879217! testForClassInstVars | model locals | model := NECUntypedModel class: NECTestClass temporaries: OrderedCollection new. model loadEntries. locals := model entriesOfType: #instVar. self assert: locals size == 18. self assert: (locals includes: 'third'). self assert: (locals includes: 'constantInteger'). self assert: (locals includes: 'complexInit2'). self assert: (locals includes: 'typeSuggestingParameter'). locals := model entriesOfType: #self. self assert: (locals includes: 'self'). locals := model entriesOfType: #super. self assert: (locals includes: 'super'). model narrowWith: 'fo'. locals := model entriesOfType: #instVar. self assert: locals size == 1. self assert: (locals includes: 'fourth')! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:29' prior: 29258800! testAbsolutePath | path | self assert: (AbsolutePath new isAbsolute). self assert: (Path root isAbsolute). path := AbsolutePath from: 'parent/child/grandChild' delimiter: $/. self assert: path size equals: 3. self assert: (path at: 1) equals: 'parent'. self assert: (path at: 2) equals: 'child'. self assert: (path at: 3) equals: 'grandChild'. path := AbsolutePath from: '/' delimiter: $/. self assert: path equals: Path root. ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29259292! testAbsolutePrintString | path actual | path := Path / 'plonk' / 'griffle'. actual := path printString. self assert: actual equals: 'Path / ''plonk'' / ''griffle'''! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29259531! testAbsoluteWithParents | path allPaths | path := Path / 'plonk' / 'griffle' / 'nurb'. allPaths := path withParents. self assert: allPaths size equals: 4. self assert: allPaths first isRoot. self assert: allPaths second basename equals: 'plonk'. self assert: allPaths second size equals: 1. self assert: (allPaths second isChildOf: allPaths first). self assert: allPaths third basename equals: 'griffle'. self assert: allPaths third size equals: 2. self assert: (allPaths third isChildOf: allPaths second). self assert: allPaths fourth basename equals: 'nurb'. self assert: allPaths fourth size equals: 3. self assert: (allPaths fourth isChildOf: allPaths third). self assert: allPaths fourth equals: path. self assert: allPaths fourth == path! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29260324! testAsReference | path reference | path := Path * 'plonk'. reference := path asFileReference. self assert: reference class equals: FileReference. self assert: reference path equals: path! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29260580! testBasename | path | path := Path * 'plonk' / 'griffle'. self assert: path basename equals: 'griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29260753! testBasenameWithoutExtension "self debug: #testBasenameWithoutExtension" | path | path := Path * 'plonk' / 'griffle'. self assert: path basenameWithoutExtension equals: 'griffle'. path := Path * 'plonk' / 'griffle.taz'. self assert: path basenameWithoutExtension equals: 'griffle'. path := Path * 'plonk' / 'griffle.taz.zork'. self assert: path basenameWithoutExtension equals: 'griffle.taz'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29261216! testCommaAddsExtension | path result | path := Path * 'plonk' . result := path, 'griffle'. self assert: result basename equals: 'plonk.griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:30' prior: 29261434! testCommaAddsExtensionAgain | path result | path := Path * 'plonk.griffle'. result := path, 'nurp'. self assert: result basename equals: 'plonk.griffle.nurp'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:31' prior: 29262263! testEqual | a b | a := Path * 'plonk'. b := Path * 'plonk'. self deny: a == b. self assert: a equals: b.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29262440! testExtensions self assertCollection: (Path from: 'foo') extensions asArray equals: #(). self assertCollection: (Path from: 'foo.tar') extensions asArray equals: #( 'tar' ). self assertCollection: (Path from: 'foo.tar.gz') extensions asArray equals: #( 'tar' 'gz'). self assertCollection: (Path from: 'foo.1.tar.gz') extensions asArray equals: #( '1' 'tar' 'gz').! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29264547! testMakeRelative "self run: #testMakeRelative" | parent child relative | parent := Path / 'griffle' / 'bibb'. child := Path / 'griffle' / 'plonk' / 'nurp'. relative := parent makeRelative: child. self assert: relative equals: (Path parent / 'plonk' / 'nurp')! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29264884! testParent | path parent | path := (Path * 'plonk') / 'griffle'. parent := path parent. self assert: parent isRelative. self assert: (parent at: 1) equals: 'plonk'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29265123! testParentParent | path | path := (Path * '..') parent. self assert: path size equals: 2. self assert: (path at: 1) equals: '..'. self assert: (path at: 2) equals: '..'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29265357! testParentResolution | base relative absolute | base := Path / 'plonk' / 'pinto'. relative := Path parent / 'griffle' / 'zonk'. absolute := base resolve: relative. self assert: absolute isAbsolute. self assert: (absolute at: 1) equals: 'plonk'. self assert: (absolute at: 2) equals: 'griffle'. self assert: (absolute at: 3) equals: 'zonk'. ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29265764! testParse "self run: #testParse" | path | path := Path from: 'parent/child/grandChild' delimiter: $/. self assert: path size equals: 3. self assert: (path at: 1) equals: 'parent'. self assert: (path at: 2) equals: 'child'. self assert: (path at: 3) equals: 'grandChild'. ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:32' prior: 29266099! testParseBogus "self run: #testParseBogus" | path | path := Path from: 'parent?<>~ \child/grandChild' delimiter: $/. self assert: path size equals: 2. self assert: (path at: 1) equals: 'parent?<>~ \child'. self assert: (path at: 2) equals: 'grandChild'. ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29266422! testParseTrailingSlash | path | path := Path from: 'griffle/' delimiter: $/. self assert: path size equals: 1. self assert: (path at: 1) equals: 'griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29266645! testParseWindowsPathWithUnixDelimiters "self run: #testParse" | path | path := WindowsStore new pathFromString: 'C:\a/b/c'. self assert: path segments size equals: 4. self assertCollection: path segments equals: #('C:' 'a' 'b' 'c') ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29266939! testPrintRelativeWithParent | path | path := Path parent / 'foo'. self assert: (path printWithDelimiter: $/) equals: '../foo'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29267138! testPrintWithDelimiter | path | path := (Path * 'plonk') / 'griffle'. self assert: (path printWithDelimiter: $%) equals: 'plonk%griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:39'! testRelativeFromString | path | path := Path from: 'plonk/griffle'. self assert: path isRelative. self assert: path size equals: 2. self assert: (path at: 1) equals: 'plonk'. self assert: (path at: 2) equals: 'griffle'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:41'! testRelativeFromStringNormalization | path | path := Path from: 'plonk/../griffle'. self assert: path isRelative. self assert: path size equals: 1. self assert: (path at: 1) equals: 'griffle'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:41'! testRelativeFromStringNormalizationParent | path | path := Path from: 'plonk/../../griffle'. self assert: path isRelative. self assert: path size equals: 2. self assert: (path at: 1) equals: '..'. self assert: (path at: 2) equals: 'griffle'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:41'! testRelativeFromStringParent | path | path := Path from: '../..'. self assert: path isRelative. self assert: path size equals: 2. self assert: (path at: 1) equals: '..'. self assert: (path at: 2) equals: '..'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29267348! testRelativePrintString | path actual | path := Path * 'plonk' / 'griffle'. actual := path printString. self assert: actual equals: 'Path * ''plonk'' / ''griffle'''! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29267587! testRelativeTo "self run: #testRelativeTo" "aPath relativeTo: aParent returns a new path relative to the parent" | parent child relative | parent := Path / 'griffle'. child := Path / 'griffle' / 'plonk' / 'nurp'. relative := child relativeTo: parent. self assert: relative equals: (Path * 'plonk' / 'nurp')! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29267973! testRelativeToBranch | parent child relative | parent := Path / 'griffle' / 'bibb'. child := Path / 'griffle' / 'plonk' / 'nurp'. relative := child relativeTo: parent. self assert: relative equals: (Path parent / 'plonk' / 'nurp')! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:33' prior: 29268279! testRelativeWithParents | path allPaths | path := Path * 'plonk' / 'griffle' / 'nurb'. allPaths := path withParents. self assert: allPaths size equals: 3. self assert: allPaths first basename equals: 'plonk'. self assert: allPaths first size equals: 1. self assert: allPaths second basename equals: 'griffle'. self assert: allPaths second size equals: 2. self assert: (allPaths second isChildOf: allPaths first). self assert: allPaths third basename equals: 'nurb'. self assert: allPaths third size equals: 3. self assert: (allPaths third isChildOf: allPaths second). self assert: allPaths third == path! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29269131! testResolvePath "self debug: #testResolvePath" | path | path := Path / 'grandfather' / 'father' / 'child'. self assert: (path resolvePath: Path / 'grandfather') equals: (Path / 'grandfather'). self assert: (path resolvePath: Path / 'child') equals: (Path / 'child'). self assert: (path resolvePath: Path * 'grandfather') equals: (Path / 'grandfather' / 'father' / 'child' / 'grandfather'). self assert: (path resolvePath: Path * 'child') equals: (Path / 'grandfather' / 'father' / 'child' / 'child'). self assert: (path resolvePath: Path * 'grandfather') equals: (Path / 'grandfather' / 'father' / 'child' / 'grandfather'). self assert: (path resolvePath: Path * 'child') equals: (Path / 'grandfather' / 'father' / 'child' / 'child'). self assert: (path resolvePath: (Path parent) / '..') equals: (Path / 'grandfather')! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29270200! testResolveString "self debug: #testResolveString" | path result | path := Path * 'plonk'. result := path resolve: 'griffle'. self assert: result class equals: path class. self assert: result size equals: 2. self assert: (result at: 1) equals: 'plonk'. self assert: (result at: 2) equals: 'griffle'.! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29270716! testRootPrintString | path actual | path := Path root. actual := path printString. self assert: actual equals: 'Path root'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29271158! testSimpleResolution | base relative absolute | base := Path / 'plonk'. relative := (Path * 'griffle') / 'zonk'. absolute := base resolve: relative. self assert: absolute isAbsolute. self assert: (absolute at: 1) equals: 'plonk'. self assert: (absolute at: 2) equals: 'griffle'. self assert: (absolute at: 3) equals: 'zonk'. ! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29271550! testSlash | path actual | path := Path * 'plonk'. actual := path / 'griffle'. self assert: actual class equals: path class. self assert: (actual printWithDelimiter: $/) equals: 'plonk/griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29272581! testWithExtentionAddsExtension | path result | path := Path * 'plonk'. result := path withExtension: 'griffle'. self assert: result basename equals: 'plonk.griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29272820! testWithExtentionReplacesExtension | path result | path := Path * 'plonk.griffle'. result := path withExtension: 'griffle'. self assert: result basename equals: 'plonk.griffle'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29273071! testWorkingDirPrintString | path actual | path := Path workingDirectory. actual := path printString. self assert: actual equals: 'Path workingDirectory'! ! !PathTest methodsFor: 'tests' stamp: 'CamilloBruni 2/14/2014 14:35' prior: 29273299! testWorkingDirectoryParent | path | path := Path workingDirectory parent. self assert: path size equals: 1. self assert: (path at: 1) equals: '..'! ! !NECContextTest methodsFor: 'tests' stamp: 'NicolaiHess 2/19/2014 15:31' prior: 27778253! testReceiverConstant | text context | text := 'testIt 15r16 printS'. context := self createContextFor: text at: text size. self assert: context receiverClass == SmallInteger. text := 'testIt ''test'' printS'. context := self createContextFor: text at: text size. self assert: context receiverClass == ByteString. text := 'testIt true ifTrue:'. context := self createContextFor: text at: text size. self assert: context receiverClass == True. text := 'testIt false "this is it" printStr'. context := self createContextFor: text at: text size. self assert: context receiverClass == False. text := 'testIt a _ [ :test | test * test ] v'. context := self createContextFor: text at: text size. self assert: context receiverClass == BlockClosure. text := 'testIt $c as'. context := self createContextFor: text at: text size. self assert: context receiverClass == Character. text := 'testIt #gaga as'. context := self createContextFor: text at: text size. self assert: context receiverClass == Symbol. text := 'testIt #( 1 2 3) as'. context := self createContextFor: text at: text size. self assert: context receiverClass == Array. text:='testIt 2r1.1e2 as'. context := self createContextFor: text at: text size. self assert: context receiverClass == Float. text:='testIt 23s32 as'. context := self createContextFor: text at: text size. self assert: context receiverClass == ScaledDecimal. ! ! !NECContextTest methodsFor: 'tests' stamp: 'NicolaiHess 2/19/2014 15:38' prior: 27779901! testReceiverTempVar | text context | text := 'testIt | aha | aha _ ''test''. aha p'. context := self createContextFor: text at: text size. self assert: context receiverClass == ByteString. text := 'testIt | aha | ah _ ''test''. ah p'. context := self createContextFor: text at: text size. self assert: context receiverClass isNil. text := 'testIt | aha | aha _ constantString. aha p'. context := self createContextFor: text at: text size. self assert: context receiverClass == ByteString. text := 'testIt | aha | aha _ constant asDate. aha p'. context := self createContextFor: text at: text size. self assert: context receiverClass isNil. text := 'testIt | aha bili | aha _ constantString. bili _ aha. bili p'. context := self createContextFor: text at: text size. self assert: context receiverClass == ByteString. text := 'testIt | aha bili | aha _ constantString. bili _ aha _ 15. bili p'. context := self createContextFor: text at: text size. self assert: context receiverClass = SmallInteger. text := 'testIt | aha bili | aha _ constantString. bili _ 15. bili _ aha. bili p'. context := self createContextFor: text at: text size. self assert: context receiverClass == SmallInteger. text := 'testIt [ :each | |a| a _ 16. a print'. context := self createContextFor: text at: text size. self assert: context receiverClass == SmallInteger. text := 'testIt [ :each | |a| a _ Dictionary new. a print'. context := self createContextFor: text at: text size. self assert: context receiverClass == Dictionary. text := 'testIt [ :each | |a| a _ Dictionary. a print'. context := self createContextFor: text at: text size. self assert: context receiverClass == Dictionary class. text := 'testIt | aha | aha _ constantLargeInteger. aha p'. context := self createContextFor: text at: text size. self assert: context receiverClass = LargePositiveInteger.! ! !Path class methodsFor: 'private' stamp: 'CamilloBruni 2/14/2014 14:44' prior: 29253701! addElement: element to: result element = '..' ifTrue: [ ^ self addParentElementTo: result ]. element = '' ifTrue: [ ^ self addEmptyElementTo: result ]. element = '.' ifFalse: [ result add: element ]! ! !Path class methodsFor: 'private' stamp: 'CamilloBruni 2/14/2014 14:46' prior: 29254108! addParentElementTo: result (result isEmpty or: [ result last = '..' ]) ifTrue: [ result add: '..' ] ifFalse: [ result removeLast ] ! ! !Path class methodsFor: 'private' stamp: 'CamilloBruni 2/14/2014 14:28' prior: 29254283! canonicalizeElements: aCollection | result | result := OrderedCollection new. aCollection do: [ :element | self addElement: element to: result]. ^ result! ! !Path class methodsFor: 'instance creation' stamp: 'CamilloBruni 2/14/2014 14:28' prior: 29252348! from: aString delimiter: aDelimiterCharacter "Answer a path composed of several elements delimited by aCharacter" | pathClass | aString isEmpty ifTrue: [ ^ self root ]. pathClass := ((self isAbsoluteUnixPath: aString) or: [self isAbsoluteWindowsPath: aString]) ifTrue: [ AbsolutePath ] ifFalse:[ RelativePath ]. ^ pathClass withAll: (pathClass canonicalizeElements: (aDelimiterCharacter split: aString))! ! !IconicListItem class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 2/18/2014 22:37' prior: 82007089! text: aText icon: form | morph | aText ifNotNil: [ morph := aText asMorph lock; yourself ]. ^ self new morph: morph; icon: form; yourself! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/18/2014 22:53' prior: 39515896! icon: anObject icon ifNotNil: [ self removeMorph: icon ]. icon ifNil: [ ^ self ]. icon := anObject asAlphaImageMorph. icon ifNotNil: [ "since the text can be removed" self addMorphFront: icon. self adjustLayoutBounds] ! ! "FileSystem-Core"! "FileSystem-Tests-Core"! "NECompletion"! "Nautilus"! "Polymorph-Widgets"! "System-Support"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.939.mcz') load. ScriptLoader new update30770. ! ----End fileIn----! ----QUIT----2014-02-19T23:57:44.151158+01:00 Pharo.image priorSource: 32048027! ----STARTUP----2014-02-19T23:57:44.366856+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-19T23:57:48.744854+01:00 Pharo.image priorSource: 32084328! ----STARTUP----2014-02-20T00:06:29.499813+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T00:06:30.455815+01:00 Pharo-30770.image priorSource: 32084525! ----STARTUP----2014-02-20T10:04:49.764397+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/20/2014 10:00' prior: 82379980! commentForCurrentUpdate ^ '12916 Integrate Versionner 2.3 https://pharo.fogbugz.com/f/cases/12916 12882 MTDependantProject uses an Array instead of OrderedCollection for #repositories https://pharo.fogbugz.com/f/cases/12882 12878 Versionner: Filter Test Configurations https://pharo.fogbugz.com/f/cases/12878 12852 Versionner should use more consistent icon style for configs https://pharo.fogbugz.com/f/cases/12852'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/20/2014 10:01'! script424 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-SvenVanCaekenberghe.1725.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1028.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.410.mcz SlotTests-MarcusDenker.77.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.678.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.7.mcz Versionner-Core-Commands-MarcusDenker.41.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.37.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.15.mcz Versionner-Tests-Resources-MarcusDenker.10.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/20/2014 10:02'! update30771 "self new update30771" self withUpdateLog: '12916 Integrate Versionner 2.3 https://pharo.fogbugz.com/f/cases/12916 12882 MTDependantProject uses an Array instead of OrderedCollection for #repositories https://pharo.fogbugz.com/f/cases/12882 12878 Versionner: Filter Test Configurations https://pharo.fogbugz.com/f/cases/12878 12852 Versionner should use more consistent icon style for configs https://pharo.fogbugz.com/f/cases/12852'. self loadTogether: self script424 merge: false. ScriptLoader new addHomeRepositoryToAllPackages. self flushCaches. ! ! "ScriptLoader30"! !VSCatalogAdderCommand commentStamp: 'ChristopheDemarey 2/14/2014 17:53' prior: 0! A VSCatalogAdderCommand adds methods to ConfigurationOf class to declare catalog metadata. ! !VersionnerToolBar commentStamp: '' prior: 81721042! Versionner configuration list toolBar spec definition. ! !VSCatalogAdderCommand commentStamp: 'ChristopheDemarey 2/14/2014 17:53' prior: 82429258! A VSCatalogAdderCommand adds methods to ConfigurationOf class to declare catalog metadata. ! !VSCatalogAdderCommand methodsFor: 'metadata methods defintion' stamp: 'ChristopheDemarey 2/14/2014 17:58'! defineCatalogDescriptionTemplate self configurationClass compile: 'catalogDescription "Returns a paragraph describing the project" ^ ''MyProject is an amazing project that will change your life.''' classified: 'catalog'! ! !VSCatalogAdderCommand methodsFor: 'metadata methods defintion' stamp: 'ChristopheDemarey 2/14/2014 17:58'! defineChangeLogTemplate self configurationClass compile: 'catalogChangeLog "Returns a paragraph describing the most important changes in the configuration class." ^ ''- Version number - Date - topics [[[ ConfigurationOfXXX project version: ''''xx'''' ) load ]]] or simply - Version number - Date - topics - Version number - Date - topics - Version number - Date - topics.''' classified: 'catalog'! ! !VSCatalogAdderCommand methodsFor: 'metadata methods defintion' stamp: 'ChristopheDemarey 2/14/2014 17:58'! defineContactInfoTemplate self configurationClass compile: 'catalogContactInfo "Returns a paragraph describing contact information such as email, mailing lists and website." ^ ''MyProject is an amazing project . You can get in contact with our great MyProject programmer at myProject@gmail.com''' classified: 'catalog'! ! !VSCatalogAdderCommand methodsFor: 'metadata methods defintion' stamp: 'ChristopheDemarey 2/14/2014 17:58'! defineKeyClassesTemplate self configurationClass compile: 'catalogKeyClassesAndExample "Returns a paragraph or more describing the key classes of your project. You can use Pillar/Pier syntax to layout out the text i.e., ==Code== and - for bullet." ^ ''MyProject is composed of one cool key class named ==MyProject==. There is also ==MyKeyHelper== - ==MyProject== is the responsible for many cool aspects. - ==MyKeyHelper== is helping ==MyProject==''' classified: 'catalog'! ! !VSCatalogAdderCommand methodsFor: 'metadata methods defintion' stamp: 'ChristopheDemarey 2/14/2014 17:58'! defineKeywordsTemplate self configurationClass compile: 'catalogKeywords "Returns an array of symbols" ^ #(web fun) ' classified: 'catalog'! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'StephaneDucasse 2/10/2014 22:13'! ensureCatalogDescription ^ self hasCatalogDescription ifFalse: [ self defineCatalogDescriptionTemplate ]! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 18:06'! ensureChangeLog ^ self hasChangeLog ifFalse: [ self defineChangeLogTemplate ]! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'StephaneDucasse 2/10/2014 22:03'! ensureContactInfo ^ self hasContactInfo ifFalse: [ self defineContactInfoTemplate ]! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'StephaneDucasse 2/10/2014 22:22'! ensureKeyClasses ^ self hasKeyClasses ifFalse: [ self defineKeyClassesTemplate ]! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'StephaneDucasse 2/10/2014 21:30'! ensureKeywords ^ self hasKeywords ifFalse: [ self defineKeywordsTemplate ]! ! !VSCatalogAdderCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/14/2014 17:55'! execute self ensureChangeLog; ensureCatalogDescription ; ensureContactInfo ; ensureKeyClasses ; ensureKeywords ! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 17:59'! hasCatalogDescription ^ (self configurationClass includesSelector: #catalogDescription) ! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 17:59'! hasChangeLog ^ (self configurationClass includesSelector: #catalogChangeLog) ! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 17:59'! hasContactInfo ^ (self configurationClass includesSelector: #catalogContactInfo) ! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 17:59'! hasKeyClasses ^ (self configurationClass includesSelector: #catalogKeyClassesAndExample) ! ! !VSCatalogAdderCommand methodsFor: 'testing' stamp: 'ChristopheDemarey 2/14/2014 18:00'! hasKeywords ^ (self configurationClass includesSelector: #catalogKeywords) ! ! !VSCatalogAdderCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/14/2014 17:52'! title ^ 'Add catalog methods'! ! !VSProjectNode methodsFor: 'accessing' stamp: 'TorstenBergmann 2/12/2014 17:41' prior: 81816455! icon ^ VersionnerSpecBrowser configurationLoadedIcon! ! !VSUnloadConfigurationCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/14/2014 18:03' prior: 81977724! execute | answer | answer := UIManager default confirm: 'Are you sure you want to unload ' , target name. answer ifTrue: [ target workingCopy unload ]! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'TorstenBergmann 2/12/2014 17:42'! configIconDirty ^ icons at: #'configIconDirty' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self configIconDirtyContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'TorstenBergmann 2/12/2014 17:42'! configIconDirtyContents ^'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADE0lEQVR42nWTa0hTYRjH/++2 46ZpU9OZZV7wnqTigqw009SsLCztoliK+UnpQlFU9CkSgqIv0YcytQtZdKEwg9A+WHTVaRmV YjPnreW2cjvucrazs/U6sCLzgZfn5Zzn/zvP8/A/BHNEbIRf0sHy+NM+UrHf2at9Rz5/Zd/9 r478+2CBv1Sxe0vU/rINEbWRydv9BZsBY/1t5jttY5eutQ6f1/20f/svgJGImK15Syqrt0Uf TVpeFBOSWAKRS4BZqwIjFUOn7kBf76vha60j5x48m2jgHILtNyBDqciv2Rl3clVGTmZIQjFk AbGA2wHn5BcMddRhydLVEPlEwG7RY0LdjdedXW+vPBqre947+YicOZzWtDVncUVQzC4iC1wG bsoAk74PgsMM3qKFlNixMDwe4CYh9g2HSOYHVjvgAT1sf3+LfGop5BPzL0p4KjRrX8LlYOGY 0sPKavFjdBxpuy6A8Z4HWDRwW9Qg1hFAngwnN4Su1rtO0nV7vTGtqF4u4lnwJjVs+s+Q0K8C dkwOf4RCWQ2G8aIdjFPAIGzaNzBzAmSRxVC11JtIZ3OeUVnUIBe5ODo3Twu/g9Op4DJrYNaP IjAuGxKRG47vTzHFGuH09gecUsiCM6F63GAib2+sMyqLm+RilwVw0cUKDlrAwmnsh/XbC8gI Cxs/BafMFwLnokeg7xnIQrPR/aTRRN5cXWtcvuO6XCywVGz56zjgpt4x/VSh6tCnufwG8u5m tj1lR7MX4a107DFKp1kw02yHm0J/jLdgz74PmMcoPILm540oW1PluVucOpDLx1Pac3ILchcl FMA7IIzugBrNRkEu2gEdy6Bpwfba92jveeIRzgCmc25aAQh1oNfmDEVFxfrQoykrC2PCkjdC LGEAqxpuzoCJgfsorOlFVFC4RzQT0xCNYfiPlQPnM4rSnJADJRkLauLSi/0XpW4EeA7s6Guk bzqF3sFnszpIjc6a/TNFh3onVeYFn8hLnV8anbWX2HQaZFXWQxkVN2sHPUMDswEzsSLeN798 beAxhsCr7t7E6rnqfgGXH2ZIRnFzTgAAAABJRU5ErkJggg=='! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'TorstenBergmann 2/12/2014 17:42'! configIconNew ^ icons at: #'configIconNew' ifAbsentPut:[ Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: self configIconNewContents readStream) ].! ! !ThemeIcons methodsFor: '*Versionner-Spec-Browser' stamp: 'TorstenBergmann 2/12/2014 17:42'! configIconNewContents ^'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC8ElEQVR42nWTa0iTYRTH/69u 81ZuXpqZGSVG4dTSlrfmhpqzsA9CEgSREfTBDEMqiehjfgjKPvTJQvwiZHSBUHMqKpq3SlPx fsWZm7rpejenuzhnR98lXdYLh+d9z3vO73+e55yHwX+e3Jx0SW5m+CNvvufeKpX6XtX7pj53 cczfjqxMuViZElqYkRhSIIxQiGAzwTT31dzSoy+r71oqrWto07oFyM6k8FOl4mvZ8gPFYcdk kfBL5n5sTVOUB6Drx/zUsFrVtfSkfeBHeeunDssu4EbeeWVO2sGHUTHxqQiUk8fXhTVhc7IS noejAX4IYGfh1ExgeHTsc22XvqSssrGaqXh2tUIWF5zHC0tnwIugJCPAquF0WOCwGsCHHUzI IUpeBXzEgAfBjd9hI1B7z9QrZqy5aMPrSCEPoADLELCxRqsRzrUVmHTLECUVEtSbbJFMA9h0 gBcJORdg6G51MAN1haz/8SIhYKUAOp+1WdrYBr2TLc4AERfonfhYpiro/8oIrZvAfgUWOmuM TH/tLVYYdYcA5ISDzEAq41QFKbKkFh5HwC1yfwPWzaS+h0L5gCgG2q6PRqavuoAVRd8V7ijC 5oLQNpxzJDpIyevkIhP4kLKTs02qKCgO2i/bgA/5rCi22LWF342Ajkk6mglKcHBcG1Vpc3AV iOOh6VUZmaGafJufpFhADacIvauK7RbbyUjZ0EkuO5ds3QYQOEBCnQ7EUp/Kxrx9fqUx7lTC WY/QBErYxx3WDsjBgXQEsNBqpdJ5NAsBR2k8jDBq1RidmWpjaAIFKbEBeVmnA4sjJMmRECdR oifXEbDUuTZSpe8g6U4l6+ppzGvG1c1D5qfdE+vlu6OszJCJM+IDbiuihTdDouQiBCdy27BQ 2za3sDE7C7120Nw+Yn7RMmQuVTV1aNxepovZCsk5qeiBNNL3suhENgN2kQZzGr3jc+/q+1dL 3tS0/XEr/wH8eq5fSlNmnvS/z2MgaOg3PX75uqXaXdxPRfBBOgbrUTMAAAAASUVORK5CYII='! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'TorstenBergmann 2/12/2014 17:43' prior: 81662493! configurationChangedIcon ^Smalltalk ui icons configIconDirty ! ! !VersionnerSpecBrowser class methodsFor: 'icons' stamp: 'TorstenBergmann 2/12/2014 17:44'! configurationLoadedIcon ^Smalltalk ui icons configIconLoaded! ! !VersionnerSpecBrowser class methodsFor: 'configurations' stamp: 'ChristopheDemarey 2/14/2014 11:15'! imageConfigurations | configs | configs := MBConfigurationRoot current configurations. configs := configs reject: [ :config | self testConfigurations includes: config name ]. ^ configs! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'ChristopheDemarey 2/14/2014 15:01' prior: 82189753! menuCommandOn: aBuilder (aBuilder item: #VersionnerSpecBrowser) order: 0.21; parent: #Tools; label: 'Versionner'; icon: (Smalltalk ui icons iconNamed: #databaseIcon); action: [ VersionnerSpecBrowser open ]! ! !VersionnerSpecBrowser class methodsFor: 'ui' stamp: 'ChristopheDemarey 2/14/2014 11:12' prior: 81694000! open |windows| windows := self openOn: self imageConfigurations. ^ windows.! ! !VersionnerSpecBrowser class methodsFor: 'configurations' stamp: 'ChristopheDemarey 2/14/2014 11:18'! testConfigurations ^ #( 'ConfigurationOfVersionnerTestBitmapCharacterSet' . 'ConfigurationOfVersionnerTestXMLParserTemplate' . 'ConfigurationOfVersionnerTestXMLWriter' . 'MetacelloBaseConfiguration' . 'MetacelloExampleProjectConfig' . 'MetacelloMCTestsAbstractConfig' )! ! !VersionnerSpecBrowser methodsFor: 'accessing' stamp: 'TorstenBergmann 2/12/2014 17:43' prior: 81717648! iconForConfiguration: aConfiguration "should return an IconMorph" ^ (aConfiguration isDirty) ifTrue: [ self class configurationChangedIcon] ifFalse: [ self class configurationLoadedIcon ].! ! !VersionnerSpecBrowser methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/14/2014 10:58' prior: 81718225! initializePresenter "Initialize widgets behavior" configurationList whenSelectedItemChanged: [ :selection | selection ifNil: [ toolbar openButton enabled: false ] ifNotNil: [ toolbar openButton enabled: true. configurationList menu: [ :aMenu | self loadMenuFor: selection in: aMenu ] ] ]. ! ! !MBConfigurationInfo methodsFor: 'commands' stamp: 'ChristopheDemarey 2/14/2014 18:01'! cmdCatalogAdder ^ VSCatalogAdderCommand! ! !VersionnerToolBar commentStamp: '' prior: 82429417! Versionner configuration list toolBar spec definition. ! !VersionnerToolBar class methodsFor: 'spec' stamp: 'ChristopheDemarey 2/14/2014 10:29' prior: 81721187! defaultSpec "Define the layout of the Versionner configuration list toolBar" ^ SpecLayout composed newRow: [ :row | row add: #newButton; add: #loadButton; add: #openButton ]; yourself.! ! !VersionnerToolBar class methodsFor: 'icons' stamp: 'ChristopheDemarey 2/14/2014 10:46'! loadIcon ^ Smalltalk ui icons downIcon ! ! !VersionnerToolBar class methodsFor: 'icons' stamp: 'ChristopheDemarey 2/14/2014 10:46'! newIcon ^ Smalltalk ui icons packageAddIcon ! ! !VersionnerToolBar class methodsFor: 'icons' stamp: 'ChristopheDemarey 2/14/2014 10:34'! openIcon ^ Smalltalk ui icons openIcon ! ! !VersionnerToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/14/2014 10:30' prior: 81721475! initializePresenter "Initialize widgets behavior" newButton action: [ self newConfiguration ]. loadButton action: [ (VSLoadProjectCommand target: self for: self) execute ]. openButton action: [ owner configurationList selectedItem ifNotNilDo: [ :selection | owner browseConfiguration: selection ] ].! ! !VersionnerToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/14/2014 10:44' prior: 81721747! initializeWidgets newButton := (self instantiate: ButtonModel) label: ' New project'; icon: self class newIcon; help: 'Create a new project (configuration). Once created, double-click on the projet to edit it'; yourself. loadButton := (self instantiate: ButtonModel) label: ' Load project'; icon: self class loadIcon; help: 'Load an existing project (only its configuration) into the image'; yourself. openButton := (self instantiate: ButtonModel) label: ' Open project'; icon: self class openIcon; help: 'Open a new window on the selected project'; yourself. ! ! !VersionnerToolBar methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/14/2014 10:26'! openButton ^ openButton! ! VersionnerSpecBrowser class removeSelector: #updateIcon! VersionnerSpecBrowser class removeSelector: #newConfigurationIcon! VersionnerSpecBrowser class removeSelector: #configurationIcon! VersionnerSpecBrowser class removeSelector: #commitIcon! "Versionner-Core-Commands"! "Versionner-Core-Model"! "Versionner-Spec-Browser"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.940.mcz') load. ScriptLoader new update30771. ! ----End fileIn----! ----QUIT----2014-02-20T10:04:55.140655+01:00 Pharo.image priorSource: 32084722! ----STARTUP----2014-02-20T10:04:55.34134+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T10:04:59.881341+01:00 Pharo.image priorSource: 32111173! ----STARTUP----2014-02-20T10:10:41.66839+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T10:10:41.932388+01:00 Pharo-30771.image priorSource: 32111369! ----STARTUP----2014-02-20T10:43:33.887285+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/20/2014 10:40' prior: 82416668! commentForCurrentUpdate ^ '12603 Should not be able to add instance variables to SmallInteger, Float, ... https://pharo.fogbugz.com/f/cases/12603 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/20/2014 10:41'! script425 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.68.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-SvenVanCaekenberghe.1725.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.34.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1028.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.81.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.7.mcz Versionner-Core-Commands-MarcusDenker.41.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.37.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.15.mcz Versionner-Tests-Resources-MarcusDenker.10.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/20/2014 10:41'! update30772 "self new update30772" self withUpdateLog: '12603 Should not be able to add instance variables to SmallInteger, Float, ... https://pharo.fogbugz.com/f/cases/12603 '. self loadTogether: self script425 merge: false. DangerousClassNotifier enable. self flushCaches. ! ! "ScriptLoader30"! !DangerousClassNotifier commentStamp: 'BenComan 2/18/2014 01:44' prior: 0! Some classes have special importance to the core system. DangerousClassNotifier notifies users which class defiitions should not be modified. This class is refactored from the following Pharo2 methods: * Behaviour>>shouldNotBeRedefined * ClassBuilder>>tooDangerousClasses * ClassBuilder>>name: inEnvironment: subclassOf: type: instanceVariableNames: classVariableNames: poolDictionaries: category: unsafe: Instance Variables enabled: restoreState: enabled - Specifies whether this checking is performed. Some system tests that check "dangerous" behaviour need this turned off. restoreState - After disabling for testing, need to restore the previous state. ! !SystemNavigationOnNewlyCreatedEnvironmentTest methodsFor: 'testing' stamp: 'BenComan 2/15/2014 22:05' prior: 51602152! testEnsureDefaultEnvironmentNotUsed | allClasses orginalProtoObjectClass orginalObjectClass anotherObjectClass | allClasses := self systemNavigationToTest allClasses. self assert: allClasses isEmpty. orginalProtoObjectClass := Smalltalk globals at: #ProtoObject. orginalObjectClass := Smalltalk globals at: #Object. DangerousClassNotifier disableForTesting. anotherObjectClass := self classFactory newClassNamed: #Object subclassOf: orginalProtoObjectClass instanceVariableNames: '' classVariableNames: 'DependentsFields'. DangerousClassNotifier restoreAfterTesting. self assert: ((self environmentToTest at: #Object) = anotherObjectClass). self assert: ((Smalltalk globals at: #Object) = orginalObjectClass). ! ! !SlotIntegrationTest methodsFor: 'tests-compact index' stamp: 'BenComan 2/15/2014 22:04' prior: 48526968! testReshapeCompactClass aClass := self make: [ :builder | builder name: self aClassName ]. self assert: aClass indexIfCompact equals: 0. [ aClass becomeCompact. self assert: aClass indexIfCompact > 0. DangerousClassNotifier disableForTesting. aClass := self make: [ :builder | builder name: self aClassName; slots:#(x) ]. DangerousClassNotifier restoreAfterTesting. self assert: aClass indexIfCompact > 0 ] ensure: [ aClass becomeUncompact ]. self assert: aClass indexIfCompact equals: 0. ! ! !SlotClassBuilder methodsFor: 'accessing' stamp: 'BenComan 2/19/2014 01:32' prior: 46094915! name: aName [ name := aName asSymbol ] on: Error do: [ InvalidGlobalName signal: 'Global names should be symbols' for: aName ]. self validateClassName. self warnOfDangerousClasses.! ! !SlotClassBuilder methodsFor: 'private validating' stamp: 'BenComan 2/19/2014 01:31'! warnOfDangerousClasses DangerousClassNotifier check: name ! ! !DangerousClassNotifier commentStamp: 'BenComan 2/18/2014 01:44' prior: 82455521! Some classes have special importance to the core system. DangerousClassNotifier notifies users which class defiitions should not be modified. This class is refactored from the following Pharo2 methods: * Behaviour>>shouldNotBeRedefined * ClassBuilder>>tooDangerousClasses * ClassBuilder>>name: inEnvironment: subclassOf: type: instanceVariableNames: classVariableNames: poolDictionaries: category: unsafe: Instance Variables enabled: restoreState: enabled - Specifies whether this checking is performed. Some system tests that check "dangerous" behaviour need this turned off. restoreState - After disabling for testing, need to restore the previous state. ! !DangerousClassNotifier class methodsFor: 'validation' stamp: 'BenComan 2/15/2014 22:02'! check: classSymbol self enabled ifTrue: [ (self tooDangerousClasses includes: classSymbol) ifTrue: [ self error: classSymbol name , ' cannot be changed' ]. "Check if the receiver should not be redefined" (self shouldNotBeRedefined: classSymbol) ifTrue: [ self notify: classSymbol asText allBold , ' should not be redefined. \Proceed to store over it.' withCRs ]. ]. ^true "Just to keep some tests happy"! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/15/2014 22:01'! disable enabled := false. ! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/15/2014 22:01'! disableForTesting restoreState ifNotNil: [ self error: 'Cannot nest disable for testing' ]. restoreState := enabled. enabled := false.! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/15/2014 22:01'! enable enabled := true. ! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/19/2014 01:36'! enabled ^enabled ifNil: [ enabled := false ] ! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/18/2014 01:19'! initialize enabled := true.! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/15/2014 22:01'! restoreAfterTesting restoreState ifNil: [ self error: 'Cannot nest disable for testing' ]. enabled := restoreState. restoreState := nil.! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/15/2014 22:02'! shouldNotBeRedefined: classSymbol Smalltalk at: classSymbol ifPresent: [ :class | ^(Smalltalk compactClassesArray includes: class) or: [ (Smalltalk specialObjectsArray includes: class) or: [class isKindOf: class] ] ]. ^false. ! ! !DangerousClassNotifier class methodsFor: 'accessing' stamp: 'BenComan 2/19/2014 01:38'! tooDangerousClasses "Return a list of class names which will not be modified in the public interface" ^#( "Object will break immediately" #ProtoObject #Object "Contexts and their superclasses" #InstructionStream #ContextPart #MethodContext #BlockClosure "Superclasses of basic collections" #Collection #SequenceableCollection #ArrayedCollection "Collections known to the VM" #Array #Bitmap #String #Symbol #ByteArray #CompiledMethod "Basic Numbers and logic" #Magnitude #Number #SmallInteger #Float #Boolean #True #False "Misc other" #LookupKey #Association #Link #Point #Rectangle #Behavior #PositionableStream #UndefinedObject )! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'BenComan 2/15/2014 22:03'! testDangerousClassesConditions | compactClassesArrayItem specialObjectsArrayItem | compactClassesArrayItem := ( (Smalltalk compactClassesArray copyWithout: Smalltalk specialObjectsArray) select: [ :x | x isClass ] ) anyOne name. specialObjectsArrayItem := ( (Smalltalk specialObjectsArray copyWithout: Smalltalk compactClassesArray) select: [ :x | x isClass ] ) anyOne name. self assert: (DangerousClassNotifier tooDangerousClasses includes: #ProtoObject). self assert: (DangerousClassNotifier shouldNotBeRedefined: compactClassesArrayItem). self assert: (DangerousClassNotifier shouldNotBeRedefined: specialObjectsArrayItem). ! ! !SlotErrorsTest methodsFor: 'tests' stamp: 'BenComan 2/15/2014 22:02'! testDangerousClassesEnabling | savedExistingSystemSetting myExpectedError | savedExistingSystemSetting := DangerousClassNotifier enabled. DangerousClassNotifier disable. self assert: DangerousClassNotifier enabled not. DangerousClassNotifier disableForTesting. self assert: DangerousClassNotifier enabled not. DangerousClassNotifier restoreAfterTesting. self assert: DangerousClassNotifier enabled not. DangerousClassNotifier enable. self assert: DangerousClassNotifier enabled. DangerousClassNotifier disableForTesting. self assert: DangerousClassNotifier enabled not. DangerousClassNotifier restoreAfterTesting. self assert: DangerousClassNotifier enabled. myExpectedError := false. [ DangerousClassNotifier disableForTesting. DangerousClassNotifier disableForTesting. ] on: Error do: [ myExpectedError := true ]. self assert: myExpectedError. myExpectedError := false. [ DangerousClassNotifier restoreAfterTesting. DangerousClassNotifier restoreAfterTesting. ] on: Error do: [ myExpectedError := true ]. self assert: myExpectedError. DangerousClassNotifier enable. DangerousClassNotifier disableForTesting. self assert: (DangerousClassNotifier check: #ProtoObject). DangerousClassNotifier restoreAfterTesting. myExpectedError := false. [ DangerousClassNotifier check: #ProtoObject ] on: Error do: [ myExpectedError := true ]. self assert: myExpectedError. savedExistingSystemSetting ifTrue: [ DangerousClassNotifier enable ] ifFalse: [ DangerousClassNotifier disable ]. self assert: DangerousClassNotifier enabled equals: savedExistingSystemSetting. ! ! "Slot"! "SlotTests"! "Tests"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.941.mcz') load. ScriptLoader new update30772. ! ----End fileIn----! ----QUIT----2014-02-20T10:43:37.841296+01:00 Pharo.image priorSource: 32111565! ----STARTUP----2014-02-20T10:43:38.042325+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T10:43:42.540318+01:00 Pharo.image priorSource: 32132898! ----STARTUP----2014-02-20T10:49:35.861719+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T10:49:36.125715+01:00 Pharo-30772.image priorSource: 32133095! ----STARTUP----2014-02-20T14:11:44.83204+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/20/2014 14:08' prior: 82443511! commentForCurrentUpdate ^ '12730 Message>>sentTo: could be faster https://pharo.fogbugz.com/f/cases/12730 12913 Issue in IconicListItem https://pharo.fogbugz.com/f/cases/12913 12933 Class comment missing in Deprecated30 package https://pharo.fogbugz.com/f/cases/12933 12914 Spec Menu Shortcut Printing: DNU #prettyPrintOn: on OSX with fonts supporting special characters https://pharo.fogbugz.com/f/cases/12914 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/20/2014 14:09'! script426 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.70.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.11.mcz Manifest-Tests-MarcusDenker.39.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-SvenVanCaekenberghe.280.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1030.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.210.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.81.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.630.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.7.mcz Versionner-Core-Commands-MarcusDenker.41.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.37.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.15.mcz Versionner-Tests-Resources-MarcusDenker.10.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/20/2014 14:09'! update30773 "self new update30773" self withUpdateLog: '12730 Message>>sentTo: could be faster https://pharo.fogbugz.com/f/cases/12730 12913 Issue in IconicListItem https://pharo.fogbugz.com/f/cases/12913 12933 Class comment missing in Deprecated30 package https://pharo.fogbugz.com/f/cases/12933 12914 Spec Menu Shortcut Printing: DNU #prettyPrintOn: on OSX with fonts supporting special characters https://pharo.fogbugz.com/f/cases/12914 '. self loadTogether: self script426 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FTPConnectionException commentStamp: 'TorstenBergmann 2/20/2014 13:34' prior: 0! An exception occured while connection using FTP! !KMPlatformSpecificKeyCombination methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 2/19/2014 11:55'! prettyPrintOn: aStream self platform = #MacOSX ifTrue: [ shortcut prettyPrintOn: aStream ] ifFalse: [ shortcut printOn: aStream ]! ! !KMKeyCombinationChoice methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 2/19/2014 11:57'! prettyPrintOn: aStream (shortcuts select:[ :e | e platform = Smalltalk os platformFamily or: [ e platform = #all ] ]) do: [ :e | e prettyPrintOn: aStream ] separatedBy: [ aStream << ' | ' ]! ! !FTPConnectionException commentStamp: 'TorstenBergmann 2/20/2014 13:34' prior: 82477750! An exception occured while connection using FTP! !KMCommandModifier methodsFor: 'printing' stamp: 'CamilloBruni 2/19/2014 14:11'! symbol ^ self delegatedModifier symbol! ! !KMKeyCombinationSequence methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 2/19/2014 11:51'! prettyPrintOn: aStream shortcuts do: [ :e | e prettyPrintOn: aStream ] separatedBy: [ aStream << ' + ' ]! ! !KMKeyCombination methodsFor: 'printing' stamp: 'BenjaminVanRyseghem 2/19/2014 11:45'! prettyPrintOn: aStream aStream << self shortcut modifier symbol. self shortcut character printOn: aStream! ! !Message methodsFor: 'sending' stamp: 'HernanMoralesDurand 1/26/2014 08:32' prior: 25563289! sentTo: receiver "answer the result of sending this message to receiver" ^ lookupClass ifNil: [ receiver perform: selector withArguments: args] ifNotNil: [ receiver perform: selector withArguments: args inSuperclass: lookupClass]! ! !IconicListItem methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/20/2014 12:55' prior: 82415030! icon: anObject icon ifNotNil: [ self removeMorph: icon ]. icon := anObject asAlphaImageMorph. anObject ifNotNil: [ "since the text can be removed" self addMorphFront: icon. self adjustLayoutBounds] ! ! "Kernel"! "Keymapping-KeyCombinations"! "Polymorph-Widgets"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.942.mcz') load. ScriptLoader new update30773. ! ----End fileIn----! ----QUIT----2014-02-20T14:11:54.080605+01:00 Pharo.image priorSource: 32133292! ----STARTUP----2014-02-20T14:11:54.283586+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T14:11:58.727585+01:00 Pharo.image priorSource: 32148656! ----STARTUP----2014-02-20T14:17:56.325655+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T14:17:56.63166+01:00 Pharo-30773.image priorSource: 32148853! ----STARTUP----2014-02-20T16:48:39.030865+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/20/2014 16:45' prior: 82465237! commentForCurrentUpdate ^ '12290 Newly loaded SLICE does not have PharoInbox in the repository group https://pharo.fogbugz.com/f/cases/12290 12865 Class comments missing in Manifest package https://pharo.fogbugz.com/f/cases/12865 12898 When creating a subclass -that includes a Trait- with a VariableLayout it uses a ByteLayout instead https://pharo.fogbugz.com/f/cases/12898 12934 Class comments missing in RecentSubmissions package https://pharo.fogbugz.com/f/cases/12934 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/20/2014 16:45'! script427 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.16.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.646.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.70.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.68.mcz MonticelloFileTree-Core-MarcusDenker.166.mcz MonticelloFileTree-FileSystem-Utilities-EstebanLorenzano.29.mcz MonticelloGUI-MarcusDenker.282.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1030.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.307.mcz Spec-Debugger-SvenVanCaekenberghe.204.mcz Spec-Examples-MarcusDenker.69.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.132.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.7.mcz Versionner-Core-Commands-MarcusDenker.41.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.37.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.15.mcz Versionner-Tests-Resources-MarcusDenker.10.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/20/2014 16:45'! update30774 "self new update30774" self withUpdateLog: '12290 Newly loaded SLICE does not have PharoInbox in the repository group https://pharo.fogbugz.com/f/cases/12290 12865 Class comments missing in Manifest package https://pharo.fogbugz.com/f/cases/12865 12898 When creating a subclass -that includes a Trait- with a VariableLayout it uses a ByteLayout instead https://pharo.fogbugz.com/f/cases/12898 12934 Class comments missing in RecentSubmissions package https://pharo.fogbugz.com/f/cases/12934 '. self loadTogether: self script427 merge: false. self flushCaches. ! ! "ScriptLoader30"! !AbstractMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 0! Abstract wrapper for method references! !DiffMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 0! For diffs! !VersionMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 0! For versions! !MFClassB commentStamp: 'TorstenBergmann 2/19/2014 08:33' prior: 0! I'm a dummy class for test purposes ! !ManifestManifestTests commentStamp: 'TorstenBergmann 2/19/2014 08:33' prior: 0! The manifest for Manifest-Tests package! !MessageListInspectableNode commentStamp: 'TorstenBergmann 2/20/2014 13:46' prior: 0! Node model for inspectable nodes! !MessageListNonInspectableNode commentStamp: 'TorstenBergmann 2/20/2014 13:47' prior: 0! Node model for non-inspectable nodes! !SmalllintManifestCheckerTest commentStamp: 'TorstenBergmann 2/19/2014 08:34' prior: 0! SUnit tests for SmalllintManifestChecker! !AbstractMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 82493637! Abstract wrapper for method references! !DiffMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 82493765! For diffs! !VersionMethodReferenceConverter commentStamp: 'TorstenBergmann 2/20/2014 13:48' prior: 82493867! For versions! !TClass methodsFor: 'subclass creation' stamp: 'PabloHerrero 2/17/2014 16:27' prior: 81086926! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !MFClassB commentStamp: 'TorstenBergmann 2/19/2014 08:33' prior: 82493949! I'm a dummy class for test purposes ! !ManifestManifestTests commentStamp: 'TorstenBergmann 2/19/2014 08:33' prior: 82494069! The manifest for Manifest-Tests package! !MessageListInspectableNode commentStamp: 'TorstenBergmann 2/20/2014 13:46' prior: 82494196! Node model for inspectable nodes! !MessageListNonInspectableNode commentStamp: 'TorstenBergmann 2/20/2014 13:47' prior: 82494319! Node model for non-inspectable nodes! !SlotAnnouncementsTest methodsFor: 'tests-integration' stamp: 'PabloHerrero 2/20/2014 13:04' prior: 81093469! testVariableClassWithTraitCreatedShouldntAnnounceClassModified self subscribeOn: ClassModifiedClassDefinition. "Create a class with a trait composition" aClass := Object variableSubclass: self aClassName uses: TOne instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self aCategory. self assert: self collectedAnnouncements size isZero. self assert: aClass layout isVariable. self deny: aClass layout isBits . self assert: (aClass traitComposition syntacticallyEquals: TOne asTraitComposition).! ! !SmalllintManifestCheckerTest commentStamp: 'TorstenBergmann 2/19/2014 08:34' prior: 82494445! SUnit tests for SmalllintManifestChecker! !MCWorkingCopyBrowser methodsFor: 'actions' stamp: 'BenComan 2/18/2014 20:52' prior: 36602430! addSlice (MCSliceMaker openFor: self window) ifNotNil: [:sliceInfo | workingCopy := sliceInfo makeSlice. workingCopy ifNotNil: [ workingCopy repositoryGroup addRepository: ScriptLoader new repository; addRepository: ScriptLoader new inboxRepository. workingCopyWrapper := MCDependentsWrapper with: workingCopy model: self. self repositorySelection: 0.]]. self workingCopyListChanged; changed: #workingCopySelection; repositoryListChanged. self changedButtons. ! ! !Trait method! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! !Trait method! variableSubclass: aName uses: aTraitComposition instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory "Creates a new class as a subclass of an existing class (the receiver) in which the subclass is to have indexable pointer variables." ^ self subclass: aName uses: aTraitComposition with: [ self variableSubclass: aName instanceVariableNames: someInstanceVariableNames classVariableNames: someClassVariableNames poolDictionaries: someSharedPoolNames category: aCategory ]! ! "MonticelloGUI"! "SlotTests"! "Traits"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.943.mcz') load. ScriptLoader new update30774. ! ----End fileIn----! ----QUIT----2014-02-20T16:48:43.737353+01:00 Pharo.image priorSource: 32149050! ----STARTUP----2014-02-20T16:48:43.951312+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T16:48:48.449312+01:00 Pharo.image priorSource: 32167665! ----STARTUP----2014-02-20T16:54:44.461227+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T16:54:44.725226+01:00 Pharo-30774.image priorSource: 32167862! ----STARTUP----2014-02-20T18:04:34.972712+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/20/2014 18:00' prior: 82480995! commentForCurrentUpdate ^ '12939 Class comments missing for Announcements-Tests package https://pharo.fogbugz.com/f/cases/12939 12928 Spec new update https://pharo.fogbugz.com/f/cases/12928 12937 Class comments missing in Versionner package https://pharo.fogbugz.com/f/cases/12937 12940 Class comments missing for CollectionsTests package https://pharo.fogbugz.com/f/cases/12940 12943 Class comments missing for Monticello- packages https://pharo.fogbugz.com/f/cases/12943 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/20/2014 18:01'! script428 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-MarcusDenker.83.mcz Deprecated30-MarcusDenker.70.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-MarcusDenker.57.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.263.mcz Morphic-Core-MarcusDenker.44.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1030.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.310.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.134.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.9.mcz Versionner-Core-Commands-MarcusDenker.43.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.39.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.17.mcz Versionner-Tests-Resources-MarcusDenker.12.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/20/2014 18:01'! update30775 "self new update30775" self withUpdateLog: '12939 Class comments missing for Announcements-Tests package https://pharo.fogbugz.com/f/cases/12939 12928 Spec new update https://pharo.fogbugz.com/f/cases/12928 12937 Class comments missing in Versionner package https://pharo.fogbugz.com/f/cases/12937 12940 Class comments missing for CollectionsTests package https://pharo.fogbugz.com/f/cases/12940 12943 Class comments missing for Monticello- packages https://pharo.fogbugz.com/f/cases/12943 '. self loadTogether: self script428 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TAddForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TAddForUniquenessTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TAddTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TAsStringCommaAndDelimiterTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TAsStringCommaAndDelimiterSequenceableTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TBeginsEndsWith commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TCloneTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TConcatenationTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TConcatenationEqualElementsRemovedTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TConvertAsSetForMultiplinessTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TConvertAsSetForMultiplinessIdentityTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 0! A trait for test purposes! !TConvertAsSortedTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TConvertTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopyPartOfSequenceable commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopyPartOfSequenceableForMultipliness commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopyPreservingIdentityTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopySequenceableSameContents commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopySequenceableWithOrWithoutSpecificElements commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopySequenceableWithReplacement commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCopySequenceableWithReplacementForSorted commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TCreationWithTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryAddingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryAssociationAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryComparingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryCopyingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryEnumeratingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryImplementationTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryIncludesTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryIncludesWithIdentityCheckTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 0! A trait for test purposes! !TDictionaryKeyAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TDictionaryKeysValuesAssociationsAccess commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TDictionaryPrintingTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TDictionaryRemovingTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TDictionaryValueAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TEmptySequenceableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TGrowableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIdentityAddTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIncludesForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIncludesTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIncludesWithIdentityCheckTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIndexAccess commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIndexAccessForMultipliness commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TIterateSequencedReadableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TOccurrencesForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TOccurrencesTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TOccurrencesForMultiplinessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 0! A trait for test purposes! !TPrintTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TPrintOnSequencedTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TPutBasicTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TPutTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TRemoveByIndexTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TRemoveTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TRemoveForMultiplenessTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TReplacementSequencedTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSequencedConcatenationTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSequencedElementAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSetArithmetic commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSizeTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSortTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !TSubCollectionAccess commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !ApplicationWithToolbar commentStamp: 'BenjaminVanRyseghem 2/18/2014 23:30' prior: 0! I am a simple example showing how to use a menu model to have a menu toolbar. ApplicationWithToolbar new openWithSpec! !AssociationTest commentStamp: 'TorstenBergmann 2/20/2014 15:19' prior: 0! SUnit tests for Associations! !WeakRegistryTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 0! A trait for test purposes! !WriteStreamTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 0! A trait for test purposes! !MBBrowsePackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 0! Command to browse a package in versionner! !MBLoadPackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 0! Command to load a package in versionner! !MBPackageChangesCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 0! Command to browse package changes in versionner! !MBPackageHistoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 0! Command to browse package history in versionner! !MBRevertPackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 0! Command to revert a package in versionner! !MBSavePackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 0! Command to save a package in versionner! !MCFileTreeAbstractStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:56' prior: 0! Abstract superclass for FileTree writers! !MCFileTreeStSnapshotWriter commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 0! Snapshot writer! !MCFileTreeStCypressWriter commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 0! Writer for Cypress format see https://github.com/CampSmalltalk/Cypress! !MCFileTreeStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:58' prior: 0! A writer for Smalltalk code! !MCMcmWriter commentStamp: 'TorstenBergmann 2/20/2014 16:24' prior: 0! Writer for Metacello MCM! !AnnouncementSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:16' prior: 0! SUnit tests for announcement sets! !ByteArrayTest commentStamp: 'TorstenBergmann 2/20/2014 15:19' prior: 0! SUnit tests for ByteArray! !FIFOQueueTests commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 0! SUnit tests for FIFO queues! !GeneratorTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 0! SUnit tests for class Generator! !IntegerArrayTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 0! SUnit tests for integer arrays! !KeyedTreeTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 0! SUnit tests for keyed trees! !LIFOQueueTests commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 0! SUnit tests for LIFO queues! !MBAbstractTest commentStamp: 'TorstenBergmann 2/20/2014 14:13' prior: 0! Common superclass for test for Versionner! !MBInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:13' prior: 0! Common SUnit tests for MBInfo! !MBAbstractVersionInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:20' prior: 0! Abstract superclass for version info tests for Versionner! !MBBaselineInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:19' prior: 0! SUnit tests for MBBaselineInfo in Versionner! !MBConfigurationInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:19' prior: 0! SUnit tests for MBConfigurationInfo in Versionner! !MBPackageInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 0! SUnit tests for MBPackageInfo in Versionner! !MBSpecInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 0! SUnit tests for MBSpecInfo in Versionner! !MBGroupInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 0! SUnit tests for MBGroupInfo in Versionner! !MBConfigurationBranchTest commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 0! SUnit tests for configuration branches in Versionner! !MBConfigurationRootTest commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 0! SUnit tests for configurations in Versionner! !MatrixTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 0! SUnit tests for matrix! !ReduceTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 0! SUnit tests for reducing collections! !SharedQueueTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 0! SUnit tests for shared queues! !StackTest commentStamp: 'TorstenBergmann 2/20/2014 15:31' prior: 0! SUnit tests for stacks! !WeakFinalizersTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 0! A trait for test purposes! !WeakOrderedCollectionTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 0! A trait for test purposes! !WeakSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 0! A trait for test purposes! !ByteSymbolTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 0! SUnit tests for byte symbols! !MCMcmReader commentStamp: 'TorstenBergmann 2/20/2014 16:24' prior: 0! Reader for Metacello MCM! !TSequencedStructuralEqualityTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 0! A trait for test purposes! !MCDependentsWrapper commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 0! Specialized list item wrapper for dependents! !WeakAnnouncerTest commentStamp: 'TorstenBergmann 2/20/2014 15:15' prior: 0! SUnit tests for weak announcements! !MBConfigurationInfoCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 0! Common superclass for commands on configuration infos in Versionner! !MBConfigurationChangesCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 0! Command to browse changes on a configuration in versionner! !MBConfigurationPackageHistoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 0! Command to browse package history for configurations in versionner! !MBInspectConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 0! Command to inspect a configuration in versionner! !MBLoadProjectFromArchiveCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 0! Command to load project from archive in versionner! !MBSaveConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 0! Command to load a configuration in versionner! !MBSetUserCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 0! Command to bset the user in Versionner! !MBValidateAllConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 0! Command to validate all configurations in versionner! !MBDevCycleCommands commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 0! Common superclass for Versionner commands related to the development cycle! !MBAddConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 0! Command to add a configuration in Versionner! !MBAddRepositoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 0! Command to add a repository in Versionner! !MBCheckpointDevCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 0! Command for a check point in Versionner! !MBHelpCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 0! Command to open help for Versionner! !MBLoadConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 0! Command to load a configuration in Versionner! !MBVersionCommand commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 0! Superclass for commands on versions! !MBCopyBaselineCommand commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 0! Command to copy a baseline in Versionner! !IdentitySetTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 0! SUnit tests for identity sets! !PluggableSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 0! SUnit tests for pluggable sets! !MCSliceInfo commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 0! A slice info! !MCTool commentStamp: 'TorstenBergmann 2/20/2014 15:51' prior: 0! Common superclass for Monticello tools! !MCVersionHistoryBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 0! Browser for version history! !MCWorkingHistoryBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 0! Browser for working history! !MCWorkingCopyBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 0! Browser for working copies! !MCFileTreeVersionInfoWriter commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 0! Write for the version info! !MCFileTreeAbstractReader commentStamp: 'TorstenBergmann 2/20/2014 15:54' prior: 0! Abstract reader superclass for FileTree! !MCFileTreeStReader commentStamp: 'TorstenBergmann 2/20/2014 15:58' prior: 0! A reader for Smalltalk code! !MCFileTreeStSnapshotReader commentStamp: 'TorstenBergmann 2/20/2014 15:55' prior: 0! Snapshot reader! !MCFileTreeStCypressReader commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 0! Reader for Cypress format see https://github.com/CampSmalltalk/Cypress! !MCFileTreeWriter commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 0! Writer for the file tree! !MCPatchBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 0! The Monticello patch browser! !MCChangeSelector commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 0! Monticello selector for changes! !MCMergeBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 0! Browser to merge changes! !MCSnapshotBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 0! Browser for snapshots! !MBPackageInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 0! Infos about a package! !MBProjectInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 0! Infos about a project! !MCFileTreePackageStructureStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 0! Writer for a package structure! !BagTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 0! SUnit tests for bags! !IdentityBagTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 0! SUnit tests for identity bags! !DictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 0! SUnit tests for dictionaries! !IdentityDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 0! SUnit tests for identity dictionaries! !LiteralDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:21' prior: 0! SUnit tests for literal dictionaries! !PluggableDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:21' prior: 0! SUnit tests for pluggable dictionaries! !SmallDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 0! SUnit tests for small dictionaries! !SmallIdentityDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 0! SUnit tests for small identity dictionaries! !WeakKeyDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 0! SUnit tests for weak key dictionaries! !WeakIdentityKeyDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 0! SUnit tests for weak identity key dictionaries! !WeakKeyToCollectionDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:27' prior: 0! SUnit tests for weak key to collection dictionaries ! !WeakValueDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:27' prior: 0! SUnit tests for weak value dictionaries! !HeapTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 0! SUnit tests for heap collections! !IntervalTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 0! SUnit tests for intervals! !SortedCollectionTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 0! SUnit tests for sorted collections! !MBAnnouncement commentStamp: 'TorstenBergmann 2/20/2014 14:04' prior: 0! Common superclass for Versionner announcements! !MBConfigurationInfoChanged commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 0! A configuration info changed! !MBConfigurationInfoCreated commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 0! A configuration info was created! !MBConfigurationInfoDeleted commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 0! A configuration info was deleted! !MBInfoListChanged commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 0! The info list changed! !MCFileTreeRepository commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 0! A file tree repository! !MBAbstractVersionInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 0! Abstract info for a version in Versionner! !MBVersionInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 0! A version info! !MCRepositoryInspector commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 0! Inspector for a repository! !MBInfo commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 0! Common superclass for Versionner infos! !MBLabelInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 0! A label info! !MCFileTreeFileUtils commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 0! Utility class for file access! !MCFileTreeFileSystemUtils commentStamp: 'TorstenBergmann 2/20/2014 15:54' prior: 0! Utility class! !MCFileTreeJsonParser commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 0! JSON parser! !MBMonticelloPackagesResource commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 0! A test resource for test purposes for Versionner! !TAddForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82512629! A trait for test purposes! !TAddForUniquenessTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82512737! A trait for test purposes! !TAddTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82512832! A trait for test purposes! !TAsStringCommaAndDelimiterTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82512949! A trait for test purposes! !TAsStringCommaAndDelimiterSequenceableTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513078! A trait for test purposes! !TBeginsEndsWith commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513180! A trait for test purposes! !TCloneTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513277! A trait for test purposes! !TConcatenationTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513382! A trait for test purposes! !TConcatenationEqualElementsRemovedTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513507! A trait for test purposes! !TConvertAsSetForMultiplinessTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513626! A trait for test purposes! !TConvertAsSetForMultiplinessIdentityTest commentStamp: 'TorstenBergmann 2/20/2014 15:32' prior: 82513753! A trait for test purposes! !TConvertAsSortedTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82513860! A trait for test purposes! !TConvertTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82513959! A trait for test purposes! !TCopyPartOfSequenceable commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514069! A trait for test purposes! !TCopyPartOfSequenceableForMultipliness commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514194! A trait for test purposes! !TCopyPreservingIdentityTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514308! A trait for test purposes! !TCopySequenceableSameContents commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514424! A trait for test purposes! !TCopySequenceableWithOrWithoutSpecificElements commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514557! A trait for test purposes! !TCopySequenceableWithReplacement commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514676! A trait for test purposes! !TCopySequenceableWithReplacementForSorted commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514804! A trait for test purposes! !TCreationWithTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82514908! A trait for test purposes! !TDictionaryAddingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515016! A trait for test purposes! !TDictionaryAssociationAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515135! A trait for test purposes! !TDictionaryComparingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515246! A trait for test purposes! !TDictionaryCopyingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515355! A trait for test purposes! !TDictionaryEnumeratingTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515468! A trait for test purposes! !TDictionaryImplementationTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515584! A trait for test purposes! !TDictionaryIncludesTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515694! A trait for test purposes! !TDictionaryIncludesWithIdentityCheckTest commentStamp: 'TorstenBergmann 2/20/2014 15:33' prior: 82515821! A trait for test purposes! !TDictionaryKeyAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82515932! A trait for test purposes! !TDictionaryKeysValuesAssociationsAccess commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516058! A trait for test purposes! !TDictionaryPrintingTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516168! A trait for test purposes! !TDictionaryRemovingTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516278! A trait for test purposes! !TDictionaryValueAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516391! A trait for test purposes! !TEmptySequenceableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516500! A trait for test purposes! !TGrowableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516600! A trait for test purposes! !TIdentityAddTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516703! A trait for test purposes! !TIncludesForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516825! A trait for test purposes! !TIncludesTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82516925! A trait for test purposes! !TIncludesWithIdentityCheckTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517042! A trait for test purposes! !TIndexAccess commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517141! A trait for test purposes! !TIndexAccessForMultipliness commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517255! A trait for test purposes! !TIterateSequencedReadableTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517371! A trait for test purposes! !TOccurrencesForIdentityCollectionsTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517496! A trait for test purposes! !TOccurrencesTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517599! A trait for test purposes! !TOccurrencesForMultiplinessTest commentStamp: 'TorstenBergmann 2/20/2014 15:34' prior: 82517717! A trait for test purposes! !TPrintTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82517814! A trait for test purposes! !TPrintOnSequencedTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82517922! A trait for test purposes! !TPutBasicTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518022! A trait for test purposes! !TPutTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518117! A trait for test purposes! !TRemoveByIndexTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518222! A trait for test purposes! !TRemoveTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518320! A trait for test purposes! !TRemoveForMultiplenessTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518433! A trait for test purposes! !TReplacementSequencedTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518545! A trait for test purposes! !TSequencedConcatenationTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518659! A trait for test purposes! !TSequencedElementAccessTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518773! A trait for test purposes! !TSetArithmetic commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518874! A trait for test purposes! !TSizeTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82518970! A trait for test purposes! !TSortTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82519066! A trait for test purposes! !TSubCollectionAccess commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82519173! A trait for test purposes! !ApplicationWithToolbar commentStamp: 'BenjaminVanRyseghem 2/18/2014 23:30' prior: 82519286! I am a simple example showing how to use a menu model to have a menu toolbar. ApplicationWithToolbar new openWithSpec! !ApplicationWithToolbar class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/18/2014 23:21'! defaultSpec ^ SpecLayout composed newColumn: [ :c | c add: #menu height: self toolbarHeight; add: #text ]; yourself! ! !ApplicationWithToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/18/2014 23:51'! initializeWidgets menu := MenuModel new addGroup: [ :group | group addItem: [ :item | item name: 'File'; icon: Smalltalk ui icons openIcon; subMenu: self subMenu ]. group addItem: [ :item | item name: nil; description: 'Open file'; icon: Smalltalk ui icons openIcon; action: [ self inform: 'Open File' ] ]. group addItem: [ :item | item name: nil; description: 'Save File'; icon: Smalltalk ui icons smallSaveIcon; action: [ self inform: 'Save File' ] ]. group addItem: [ :item | item name: nil; description: 'Print file'; icon: Smalltalk ui icons smallPrintIcon; action: [ self inform: 'Print file' ] ] ]; addGroup: [ :group | group addItem: [ :item | item name: nil; description: 'Undo'; icon: Smalltalk ui icons smallUndoIcon; action: [ self inform: 'Undo' ] ]. group addItem: [ :item | item name: nil; description: 'Redo'; icon: Smalltalk ui icons smallRedoIcon; action: [ self inform: 'Redo' ] ] ]. menu applyTo: self. text := self newText. self focusOrder add: text! ! !ApplicationWithToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/18/2014 23:20'! menu ^ menu! ! !ApplicationWithToolbar methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/18/2014 23:52'! subMenu ^ MenuModel new addGroup: [ :group | group addItem: [ :item | item name: 'Open'; icon: Smalltalk ui icons openIcon; shortcut: $o command; action: [ self inform: 'Open' ] ]. group addItem: [ :item | item name: 'Save'; icon: Smalltalk ui icons smallSaveIcon; shortcut: $s command; action: [ self inform: 'Save' ] ]. group addItem: [ :item | item name: 'Print'; shortcut: $p command; icon: Smalltalk ui icons smallPrintIcon; action: [ self inform: 'Print' ] ]. group addItem: [ :item | item name: 'Kill'; shortcut: $k command; icon: Smalltalk ui icons smallCancelIcon; action: [ self inform: 'Kill' ] ] ]! ! !ApplicationWithToolbar methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 2/18/2014 23:20'! text ^ text! ! !ApplicationWithToolbar methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:47'! title ^ 'Text editor'! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 2/7/2014 17:30' prior: 41714212! buttonHeight ^ StandardFonts defaultFont height + 12! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 2/7/2014 17:31' prior: 77566226! buttonWidth ^ (StandardFonts defaultFont widthOfString: 'eilwp') + 44! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 2/7/2014 17:30' prior: 77594434! inputTextHeight ^ StandardFonts defaultFont height + 12! ! !ComposableModel class methodsFor: 'defaults' stamp: 'BenjaminVanRyseghem 2/7/2014 17:31' prior: 41714442! toolbarHeight ^ StandardFonts defaultFont height + 12! ! !ComposableModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/3/2014 17:42' prior: 76493565! aboutText ^ aboutText value ifNil: [ aboutText value: self class comment ]! ! !ComposableModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/19/2014 20:38' prior: 80616066! initialize super initialize. extentHolder := nil asReactiveVariable. needRebuild := true asReactiveVariable. keyStrokesForNextFocusHolder := { KMNoShortcut new } asReactiveVariable. keyStrokesForPreviousFocusHolder := { KMNoShortcut new } asReactiveVariable. additionalKeyBindings := Dictionary new. announcer := Announcer new asReactiveVariable. aboutText := nil asReactiveVariable. windowIcon := nil asReactiveVariable. window := nil asReactiveVariable. askOkToClose := false asReactiveVariable. titleHolder := self class title asReactiveVariable. self initializeWidgets. self initializePresenter. keyStrokesForNextFocusHolder whenChangedDo: [ self registerKeyStrokesForNextFor: self widget ]. keyStrokesForPreviousFocusHolder whenChangedDo: [ self registerKeyStrokesForPreviousFor: self widget ]. titleHolder whenChangedDo: [ self updateTitle ]! ! !AssociationTest commentStamp: 'TorstenBergmann 2/20/2014 15:19' prior: 82519481! SUnit tests for Associations! !WeakRegistryTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 82519587! A trait for test purposes! !WriteStreamTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 82519689! A trait for test purposes! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 2/18/2014 23:12' prior: 76847999! getMenu: shiftKeyState ^ (self model getMenu: shiftKeyState) buildWithSpecAsPopup! ! !MBBrowsePackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 82519798! Command to browse a package in versionner! !MBLoadPackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 82519921! Command to load a package in versionner! !MBPackageChangesCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 82520045! Command to browse package changes in versionner! !MBPackageHistoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 82520177! Command to browse package history in versionner! !MBRevertPackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 82520308! Command to revert a package in versionner! !MBSavePackageCommand commentStamp: 'TorstenBergmann 2/20/2014 14:06' prior: 82520431! Command to save a package in versionner! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 2/19/2014 20:31' prior: 77539853! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | col do: [ :each | each container: self ]. self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. rootNodeHolder whenChangedDo: [ :aBlock | self updateTree ]. isCheckList whenChangedDo: [ :boolean | self changed: #isCheckList: with: { boolean }]. menuBlockHolder whenChangedDo: [ :aMenuModel :oldMenuModel | oldMenuModel ifNotNil: [ | oldMenu | oldMenuModel isBlock ifTrue: [ oldMenu := MenuModel new. oldMenuModel cull: oldMenu ] ifFalse: [ oldMenu := oldMenuModel ]. oldMenu applyTo: self ]. aMenuModel ifNotNil: [ | newMenu | aMenuModel isBlock ifTrue: [ newMenu := MenuModel new. aMenuModel cull: newMenu ] ifFalse: [ newMenu := aMenuModel ]. newMenu applyTo: self ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !MCFileTreeAbstractStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:56' prior: 82520558! Abstract superclass for FileTree writers! !MCFileTreeStSnapshotWriter commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 82520686! Snapshot writer! !MCFileTreeStCypressWriter commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 82520788! Writer for Cypress format see https://github.com/CampSmalltalk/Cypress! !MCFileTreeStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:58' prior: 82520940! A writer for Smalltalk code! !MCMcmWriter commentStamp: 'TorstenBergmann 2/20/2014 16:24' prior: 82521040! Writer for Metacello MCM! !AnnouncementSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:16' prior: 82521145! SUnit tests for announcement sets! !ByteArrayTest commentStamp: 'TorstenBergmann 2/20/2014 15:19' prior: 82521253! SUnit tests for ByteArray! !FIFOQueueTests commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 82521354! SUnit tests for FIFO queues! !GeneratorTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 82521456! SUnit tests for class Generator! !IntegerArrayTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 82521565! SUnit tests for integer arrays! !KeyedTreeTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 82521670! SUnit tests for keyed trees! !LIFOQueueTests commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 82521773! SUnit tests for LIFO queues! !MBAbstractTest commentStamp: 'TorstenBergmann 2/20/2014 14:13' prior: 82521876! Common superclass for test for Versionner! !MBInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:13' prior: 82521989! Common SUnit tests for MBInfo! !MBAbstractVersionInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:20' prior: 82522105! Abstract superclass for version info tests for Versionner! !MBBaselineInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:19' prior: 82522242! SUnit tests for MBBaselineInfo in Versionner! !MBConfigurationInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:19' prior: 82522371! SUnit tests for MBConfigurationInfo in Versionner! !MBPackageInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 82522499! SUnit tests for MBPackageInfo in Versionner! !MBSpecInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 82522618! SUnit tests for MBSpecInfo in Versionner! !MBGroupInfoTest commentStamp: 'TorstenBergmann 2/20/2014 14:17' prior: 82522735! SUnit tests for MBGroupInfo in Versionner! !MBConfigurationBranchTest commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 82522863! SUnit tests for configuration branches in Versionner! !MBConfigurationRootTest commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 82523000! SUnit tests for configurations in Versionner! !MatrixTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 82523116! SUnit tests for matrix! !ReduceTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 82523210! SUnit tests for reducing collections! !SharedQueueTest commentStamp: 'TorstenBergmann 2/20/2014 15:30' prior: 82523323! SUnit tests for shared queues! !StackTest commentStamp: 'TorstenBergmann 2/20/2014 15:31' prior: 82523423! SUnit tests for stacks! !WeakFinalizersTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 82523525! A trait for test purposes! !WeakOrderedCollectionTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 82523637! A trait for test purposes! !WeakSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:36' prior: 82523735! A trait for test purposes! !ByteSymbolTest commentStamp: 'TorstenBergmann 2/20/2014 15:29' prior: 82523836! SUnit tests for byte symbols! !MCMcmReader commentStamp: 'TorstenBergmann 2/20/2014 16:24' prior: 82523937! Reader for Metacello MCM! !TSequencedStructuralEqualityTest commentStamp: 'TorstenBergmann 2/20/2014 15:35' prior: 82524055! A trait for test purposes! !MCDependentsWrapper commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 82524161! Specialized list item wrapper for dependents! !WeakAnnouncerTest commentStamp: 'TorstenBergmann 2/20/2014 15:15' prior: 82524284! SUnit tests for weak announcements! !MBConfigurationInfoCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 82524406! Common superclass for commands on configuration infos in Versionner! !MBConfigurationChangesCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 82524564! Command to browse changes on a configuration in versionner! !MBConfigurationPackageHistoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:07' prior: 82524720! Command to browse package history for configurations in versionner! !MBInspectConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 82524877! Command to inspect a configuration in versionner! !MBLoadProjectFromArchiveCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 82525018! Command to load project from archive in versionner! !MBSaveConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 82525156! Command to load a configuration in versionner! !MBSetUserCommand commentStamp: 'TorstenBergmann 2/20/2014 14:08' prior: 82525279! Command to bset the user in Versionner! !MBValidateAllConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 82525412! Command to validate all configurations in versionner! !MBDevCycleCommands commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 82525544! Common superclass for Versionner commands related to the development cycle! !MBAddConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 82525705! Command to add a configuration in Versionner! !MBAddRepositoryCommand commentStamp: 'TorstenBergmann 2/20/2014 14:09' prior: 82525833! Command to add a repository in Versionner! !MBCheckpointDevCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 82525958! Command for a check point in Versionner! !MBHelpCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 82526072! Command to open help for Versionner! !MBLoadConfigurationCommand commentStamp: 'TorstenBergmann 2/20/2014 14:10' prior: 82526195! Command to load a configuration in Versionner! !MBVersionCommand commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 82526318! Superclass for commands on versions! !MBCopyBaselineCommand commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 82526436! Command to copy a baseline in Versionner! !IdentitySetTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 82526553! SUnit tests for identity sets! !PluggableSetTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 82526660! SUnit tests for pluggable sets! !MCSliceInfo commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 82526763! A slice info! !MCTool commentStamp: 'TorstenBergmann 2/20/2014 15:51' prior: 82526843! Common superclass for Monticello tools! !MCVersionHistoryBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 82526966! Browser for version history! !MCWorkingHistoryBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 82527078! Browser for working history! !MCWorkingCopyBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 82527187! Browser for working copies! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:52:52.039866'! maximize self changed: #maximize with: #()! ! !WindowModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:52:52.039866'! minimize self changed: #minimize with: #()! ! !MCFileTreeVersionInfoWriter commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 82527302! Write for the version info! !MenuModel class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/18/2014 23:04'! popup ^ #(MenuAdapter adaptAsPopup: #(model))! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:08'! buildWithSpecAsPopup ^ self buildWithSpec: #popup! ! !MenuModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:08' prior: 79704818! openWithSpecAt: aPosition self buildWithSpecAsPopup. self changed: #openAt: with: { aPosition }! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 2/19/2014 20:32' prior: 82348438! menu: aMenu shifted: aBoolean ^ (self model menu: aMenu shifted: aBoolean) buildWithSpecAsPopup! ! !MCFileTreeAbstractReader commentStamp: 'TorstenBergmann 2/20/2014 15:54' prior: 82527414! Abstract reader superclass for FileTree! !MCFileTreeStReader commentStamp: 'TorstenBergmann 2/20/2014 15:58' prior: 82527533! A reader for Smalltalk code! !MCFileTreeStSnapshotReader commentStamp: 'TorstenBergmann 2/20/2014 15:55' prior: 82527648! Snapshot reader! !MCFileTreeStCypressReader commentStamp: 'TorstenBergmann 2/20/2014 15:57' prior: 82527750! Reader for Cypress format see https://github.com/CampSmalltalk/Cypress! !SpecDebugger class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/7/2014 17:34' prior: 38669397! specOptimized | toolbarHeight | toolbarHeight := self toolbarHeight. ^ SpecLayout composed add: #stack origin: 0@0 corner: 1@0.25; add: #toolbar origin: 0@0.25 corner: 1@0.25 offsetOrigin: 0@0 offsetCorner: 0@toolbarHeight; addHSplitter; add: #code origin: 0@0.25 corner: 1@0.80 offsetOrigin: 0@toolbarHeight offsetCorner: 0@0; addHSplitter; newRow: [ :r | r add: #receiverInspector; addSplitter; add: #contextInspector] top: 0.8; yourself ! ! !MCFileTreeWriter commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 82527899! Writer for the file tree! !MorphicMenuAdapter class methodsFor: 'instance creation' stamp: 'BenjaminVanRyseghem 2/18/2014 23:02'! adaptAsPopup: aComposableModel ^ self new adaptAsPopup: aComposableModel; yourself! ! !MorphicMenuAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/18/2014 23:29' prior: 76857058! defaultSpec ^ {#ToolDockingBarMorph. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #borderColor:. Color transparent}! ! !MorphicMenuAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 2/18/2014 23:03'! popupSpec ^ #(MenuMorph addIfNeededTitle:andIcon: #(model title) #(model icon))! ! !MorphicMenuAdapter methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 2/18/2014 23:11'! adaptAsPopup: aComposableModel model := aComposableModel. aComposableModel addDependent: self. widget := self buildWidgetPopup.! ! !MorphicMenuAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 2/18/2014 23:53' prior: 82229182! buildWidget widget := super buildWidget. widget adoptMenuModel: self model. ^ widget! ! !MorphicMenuAdapter methodsFor: 'private' stamp: 'BenjaminVanRyseghem 2/18/2014 23:03'! buildWidgetPopup widget := SpecInterpreter interpretASpec: self class popupSpec model: self. self menuGroups do: [ :group || items | items := group buildWithSpec. items do: [ :item | widget addMenuItem: item ] ] separatedBy: [ widget addLine ]. ^ widget! ! !MCPatchBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 82527999! The Monticello patch browser! !MCChangeSelector commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 82528105! Monticello selector for changes! !MCMergeBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 82528212! Browser to merge changes! !MCSnapshotBrowser commentStamp: 'TorstenBergmann 2/20/2014 15:52' prior: 82528315! Browser for snapshots! !ToolDockingBarMorph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 2/18/2014 23:33'! adoptMenuGroupModel: aGroupModel first: aBoolean | controls | aBoolean ifFalse: [ self addMorphBack: (Smalltalk ui theme newToolSpacerIn: self); addMorphBack: (Smalltalk ui theme newToolbarHandleIn: self); addMorphBack: (Smalltalk ui theme newToolSpacerIn: self) ]. controls := OrderedCollection new. aGroupModel menuItems do: [ :item | self adoptMenuItemModel: item accumulator: controls ]. self emptyAccumulator: controls! ! !ToolDockingBarMorph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 2/18/2014 23:42'! adoptMenuItemModel: item accumulator: controls item subMenu ifNil: [ | button | button := self buildButtonFor: item. controls add: button ] ifNotNil: [ self emptyAccumulator: controls. self addMorphBack: (Smalltalk ui theme newToolSpacerIn: self). self add: item name font: Smalltalk ui theme menuBarFont icon: item icon help: item description subMenu: item subMenu buildWithSpecAsPopup. self addMorphBack: (Smalltalk ui theme newToolSpacerIn: self) ]! ! !ToolDockingBarMorph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 2/18/2014 23:33'! adoptMenuModel: aMenuModel aMenuModel menuGroups doWithIndex: [ :aGroup :index | self adoptMenuGroupModel: aGroup first: (index = 1) ]! ! !ToolDockingBarMorph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 2/18/2014 23:46'! buildButtonFor: item ^ Smalltalk ui theme newButtonIn: self for: item getState: #enabled action: #performMenuActionWith: arguments: { self } getEnabled: #enabled label: (IconicListItem text: item name icon: item icon) help: item description ! ! !ToolDockingBarMorph methodsFor: '*Spec-Core' stamp: 'BenjaminVanRyseghem 2/18/2014 23:31'! emptyAccumulator: controls controls do: [ :button | self addMorphBack: button ]. controls removeAll! ! !MBPackageInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 82528411! Infos about a package! !MBProjectInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 82528507! Infos about a project! !MCFileTreePackageStructureStWriter commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 82528624! Writer for a package structure! !BagTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 82528723! SUnit tests for bags! !IdentityBagTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 82528820! SUnit tests for identity bags! !DictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 82528925! SUnit tests for dictionaries! !IdentityDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:20' prior: 82529037! SUnit tests for identity dictionaries! !LiteralDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:21' prior: 82529157! SUnit tests for literal dictionaries! !PluggableDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:21' prior: 82529278! SUnit tests for pluggable dictionaries! !SmallDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 82529397! SUnit tests for small dictionaries! !SmallIdentityDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 82529520! SUnit tests for small identity dictionaries! !WeakKeyDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 82529646! SUnit tests for weak key dictionaries! !WeakIdentityKeyDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:22' prior: 82529774! SUnit tests for weak identity key dictionaries! !WeakKeyToCollectionDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:27' prior: 82529915! SUnit tests for weak key to collection dictionaries ! !WeakValueDictionaryTest commentStamp: 'TorstenBergmann 2/20/2014 15:27' prior: 82530052! SUnit tests for weak value dictionaries! !HeapTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 82530161! SUnit tests for heap collections! !IntervalTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 82530267! SUnit tests for intervals! !SortedCollectionTest commentStamp: 'TorstenBergmann 2/20/2014 15:28' prior: 82530374! SUnit tests for sorted collections! !MBAnnouncement commentStamp: 'TorstenBergmann 2/20/2014 14:04' prior: 82530484! Common superclass for Versionner announcements! !MBConfigurationInfoChanged commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 82530618! A configuration info changed! !MBConfigurationInfoCreated commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 82530734! A configuration info was created! !MBConfigurationInfoDeleted commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 82530854! A configuration info was deleted! !MBInfoListChanged commentStamp: 'TorstenBergmann 2/20/2014 14:05' prior: 82530965! The info list changed! !MCFileTreeRepository commentStamp: 'TorstenBergmann 2/20/2014 16:23' prior: 82531068! A file tree repository! !MBAbstractVersionInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 82531173! Abstract info for a version in Versionner! !MBVersionInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 82531289! A version info! !MorphicWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:54:16.555818'! maximize self widgetDo: [ :w | w maximize ]! ! !MorphicWindowAdapter methodsFor: 'spec protocol' stamp: 'BenjaminVanRyseghem 2/18/2014 23:54:16.555818'! minimize self widgetDo: [ :w | w minimize ]! ! !MCRepositoryInspector commentStamp: 'TorstenBergmann 2/20/2014 15:53' prior: 82531386! Inspector for a repository! !MBInfo commentStamp: 'TorstenBergmann 2/20/2014 14:11' prior: 82531480! Common superclass for Versionner infos! !MBLabelInfo commentStamp: 'TorstenBergmann 2/20/2014 14:12' prior: 82531591! A label info! !MCFileTreeFileUtils commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 82531684! Utility class for file access! !MCFileTreeFileSystemUtils commentStamp: 'TorstenBergmann 2/20/2014 15:54' prior: 82531800! Utility class! !MCFileTreeJsonParser commentStamp: 'TorstenBergmann 2/20/2014 15:59' prior: 82531895! JSON parser! !MBMonticelloPackagesResource commentStamp: 'TorstenBergmann 2/20/2014 14:16' prior: 82531996! A test resource for test purposes for Versionner! "CollectionsTests"! "MonticelloFileTree-Core"! "MonticelloGUI"! "Spec-Core"! "Spec-Debugger"! "Spec-Examples"! "Spec-MorphicAdapters"! "Versionner-Core-Model"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.944.mcz') load. ScriptLoader new update30775. ! ----End fileIn----! ----QUIT----2014-02-20T18:04:45.287094+01:00 Pharo.image priorSource: 32168059! ----STARTUP----2014-02-20T18:04:45.497283+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T18:04:50.239278+01:00 Pharo.image priorSource: 32233123! ----STARTUP----2014-02-20T18:10:36.427986+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T18:10:36.693989+01:00 Pharo-30775.image priorSource: 32233320! ----STARTUP----2014-02-20T23:21:45.449006+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/20/2014 23:18' prior: 82500005! commentForCurrentUpdate ^ '12924 PluggableTextMorph does not notify changes when pasting/cutting text https://pharo.fogbugz.com/f/cases/12924 12949 Class comments missing in Morphic-Core package https://pharo.fogbugz.com/f/cases/12949 12944 Class comments missing for DebuggerModel package https://pharo.fogbugz.com/f/cases/12944 12930 Sliders / ScrollBars in inspectors have black borders https://pharo.fogbugz.com/f/cases/12930 12946 HDTestReport cannot write error with UTF-8 text https://pharo.fogbugz.com/f/cases/12946 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/20/2014 23:18'! script429 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.70.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.627.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.265.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1030.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.310.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.134.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.62.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.9.mcz Versionner-Core-Commands-MarcusDenker.43.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.39.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.17.mcz Versionner-Tests-Resources-MarcusDenker.12.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/20/2014 23:18'! update30776 "self new update30776" self withUpdateLog: '12924 PluggableTextMorph does not notify changes when pasting/cutting text https://pharo.fogbugz.com/f/cases/12924 12949 Class comments missing in Morphic-Core package https://pharo.fogbugz.com/f/cases/12949 12944 Class comments missing for DebuggerModel package https://pharo.fogbugz.com/f/cases/12944 12930 Sliders / ScrollBars in inspectors have black borders https://pharo.fogbugz.com/f/cases/12930 12946 HDTestReport cannot write error with UTF-8 text https://pharo.fogbugz.com/f/cases/12946 '. self loadTogether: self script429 merge: false. self flushCaches. ! ! "ScriptLoader30"! !GrafPort commentStamp: 'TorstenBergmann 2/20/2014 18:35' prior: 0! Provides extended Graphic support like translucency! !DamageRecorder commentStamp: 'TorstenBergmann 2/20/2014 18:27' prior: 0! Recording damages to repair by repainting! !EllipseMidpointTracer commentStamp: 'TorstenBergmann 2/20/2014 18:32' prior: 0! Utility class for calculating! !MouseOverHandler commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 0! Mouse over handler in a hand morph! !UserInputEvent commentStamp: 'TorstenBergmann 2/20/2014 18:30' prior: 0! A general user input event like for keyboard or mouse! !MouseEvent commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 0! Superclass for mouse events! !MouseButtonEvent commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 0! A button event from a mouse! !MouseMoveEvent commentStamp: 'TorstenBergmann 2/20/2014 18:30' prior: 0! A move event from the mouse! !DebuggerModelTest commentStamp: 'TorstenBergmann 2/20/2014 15:44' prior: 0! SUnit tests for the debugger model! !Slider methodsFor: 'geometry' stamp: 'dew 2/21/1999 03:08' prior: 82372161! extent: newExtent newExtent = bounds extent ifTrue: [^ self]. bounds isWide ifTrue: [super extent: (newExtent x max: self sliderThickness * 2) @ newExtent y] ifFalse: [super extent: newExtent x @ (newExtent y max: self sliderThickness * 2)]. self removeAllMorphs; initializeSlider! ! !HDTestReport methodsFor: 'running' stamp: 'DamienCassou 2/20/2014 16:54' prior: 76286407! setUp progressFile nextPutAll: 'running suite: '; nextPutAll: suite name ; crlf; flush. stream := StandardFileStream forceNewFileNamed: suite name , '-Test.xml'. stream := MultiByteFileStream newFrom: stream. stream nextPutAll: ''; lf. stream nextPutAll: ''. "Now this is ugly. We want to update the time and the number of failures and errors, but still at the same time stream a valid XML. So remember this position and add some whitespace, that we can fill later." suitePosition := stream position - 1. stream nextPutAll: (String new: 100 withAll: $ ); lf. "Initialize the test resources." suite resources do: [ :each | each isAvailable ifFalse: [ each signalInitializationError ] ]! ! !GrafPort commentStamp: 'TorstenBergmann 2/20/2014 18:35' prior: 82578209! Provides extended Graphic support like translucency! !DamageRecorder commentStamp: 'TorstenBergmann 2/20/2014 18:27' prior: 82578336! Recording damages to repair by repainting! !EllipseMidpointTracer commentStamp: 'TorstenBergmann 2/20/2014 18:32' prior: 82578460! Utility class for calculating! !MouseOverHandler commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 82578567! Mouse over handler in a hand morph! !UserInputEvent commentStamp: 'TorstenBergmann 2/20/2014 18:30' prior: 82578677! A general user input event like for keyboard or mouse! !MouseEvent commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 82578802! Superclass for mouse events! !MouseButtonEvent commentStamp: 'TorstenBergmann 2/20/2014 18:29' prior: 82578907! A button event from a mouse! !MouseMoveEvent commentStamp: 'TorstenBergmann 2/20/2014 18:30' prior: 82579010! A move event from the mouse! !DebuggerModelTest commentStamp: 'TorstenBergmann 2/20/2014 15:44' prior: 82579116! SUnit tests for the debugger model! "HudsonBuildTools20"! "Morphic-Base"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.945.mcz') load. ScriptLoader new update30776. ! ----End fileIn----! ----QUIT----2014-02-20T23:21:52.823381+01:00 Pharo.image priorSource: 32233517! ----STARTUP----2014-02-20T23:21:53.027855+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-20T23:21:57.591854+01:00 Pharo.image priorSource: 32250548! ----STARTUP----2014-02-20T23:27:39.981675+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-20T23:27:40.247673+01:00 Pharo-30776.image priorSource: 32250745! ----STARTUP----2014-02-21T10:54:51.042125+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/21/2014 10:51' prior: 82565470! commentForCurrentUpdate ^ '12951 Skip KernelTests.Methods.BlockClosureTest.testOnForkErrorTakesLessThanOneSecond https://pharo.fogbugz.com/f/cases/12951 12938 Class "UnknownSystemChange" should be deprecated for Pharo 3.0 https://pharo.fogbugz.com/f/cases/12938 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/21/2014 10:51'! script430 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.265.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1030.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-StephaneDucasse.15.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.310.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.134.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.9.mcz Versionner-Core-Commands-MarcusDenker.43.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.39.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.17.mcz Versionner-Tests-Resources-MarcusDenker.12.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/21/2014 10:51'! update30777 "self new update30777" self withUpdateLog: '12951 Skip KernelTests.Methods.BlockClosureTest.testOnForkErrorTakesLessThanOneSecond https://pharo.fogbugz.com/f/cases/12951 12938 Class "UnknownSystemChange" should be deprecated for Pharo 3.0 https://pharo.fogbugz.com/f/cases/12938 '. self loadTogether: self script430 merge: false. self flushCaches. ! ! "ScriptLoader30"! !UnknownSystemChange commentStamp: 'MarcusDenker 2/21/2014 10:29' prior: 0! This Announcemnet was undocumented and usused --> deprecated ! !BlockClosureTest methodsFor: 'tests - on-fork' stamp: 'SvenVanCaekenberghe 2/20/2014 23:38' prior: 79037212! testOnForkErrorTakesLessThanOneSecond "Test that if code runs with error, there is fork" | sema timeout | self flag: 'This test is too brittle, failing often on Windows CI'; skip. self flag: 'The following line makes the test pass under headless linux. Everywhere else this test works'. Smalltalk os isUnix ifTrue: [ 1 milliSecond wait ]. sema := Semaphore new. [ 1/0 ] on: Exception fork: [ sema signal ]. timeout := (sema waitTimeoutSeconds: 1). self assert: timeout == false! ! !UnknownSystemChange commentStamp: 'MarcusDenker 2/21/2014 10:29' prior: 82595080! This Announcemnet was undocumented and usused --> deprecated ! "Deprecated30"! "KernelTests"! "System-Announcements"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.946.mcz') load. ScriptLoader new update30777. ! ----End fileIn----! ----QUIT----2014-02-21T10:54:55.188581+01:00 Pharo.image priorSource: 32250942! ----STARTUP----2014-02-21T10:54:55.397333+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-21T10:54:59.961332+01:00 Pharo.image priorSource: 32264900! ----STARTUP----2014-02-21T11:00:39.216169+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-21T11:00:39.488168+01:00 Pharo-30777.image priorSource: 32265097! ----STARTUP----2014-02-21T13:31:38.02532+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/21/2014 13:28' prior: 82582888! commentForCurrentUpdate ^ '12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12144 12936 SUnit-UITesting package should be cleaned up https://pharo.fogbugz.com/f/cases/12936 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/21/2014 13:28'! script431 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.266.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.148.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1031.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.135.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.9.mcz Versionner-Core-Commands-MarcusDenker.43.mcz Versionner-Core-DependenciesModel-MarcusDenker.69.mcz Versionner-Core-Model-MarcusDenker.39.mcz Versionner-Spec-Browser-MarcusDenker.117.mcz Versionner-Tests-Core-Commands-MarcusDenker.10.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.31.mcz Versionner-Tests-Core-Model-MarcusDenker.17.mcz Versionner-Tests-Resources-MarcusDenker.12.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/21/2014 13:28'! update30778 "self new update30778" self withUpdateLog: '12144 TextModel>>getSelection https://pharo.fogbugz.com/f/cases/12144 12936 SUnit-UITesting package should be cleaned up https://pharo.fogbugz.com/f/cases/12936 '. self loadTogether: self script431 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MenuCapturingMorph commentStamp: 'SeanDeNigris 2/20/2014 08:47' prior: 0! It's difficult to test whether menus appear because the test might block the UI thread and prevent it. I use Morphic stepping to monitor the world for a new menu. If I find one, you can get it by sending me #menu.! !MorphHandlingMiddleButton commentStamp: 'SeanDeNigris 2/20/2014 08:53' prior: 0! I log when the middle mouse button has been clicked on me, which is useful for testing.! !SimulateMouseSpecification methodsFor: 'tests' stamp: 'SeanDeNigris 2/20/2014 08:52'! testSimulateMiddleClick "self run: #testSimulateMiddleClick" morph := MorphHandlingMiddleButton new openInWorld. morph simulateMiddleClick. self assert: morph wasClickedWithMiddleButton. ! ! !PluggableTextFieldMorph methodsFor: 'editor access' stamp: 'NicolaiHess 2/15/2014 01:01' prior: 29534346! scrollSelectionIntoView: event "Scroll my text into view if necessary and return true, else return false. Redone here to deal with horizontal scrolling!!" | selRects delta selRect rectToTest transform cpHere | self selectionInterval: textMorph editor selectionInterval. selRects := textMorph paragraph selectionRects. selRects isEmpty ifTrue: [^ false]. rectToTest := selRects first merge: selRects last. transform := scroller transformFrom: self. (event notNil and: [event anyButtonPressed]) ifTrue: "Check for autoscroll" [cpHere := transform localPointToGlobal: event cursorPoint. cpHere x <= self left ifTrue: [rectToTest := selRects first topLeft extent: 2@2] ifFalse: [cpHere x >= self right ifTrue: [rectToTest := selRects last bottomRight extent: 2@2] ifFalse: [^ false]]]. selRect := transform localBoundsToGlobal: rectToTest. selRect width > bounds width ifTrue: [^ false]. "Would not fit, even if we tried to scroll" (delta := selRect amountToTranslateWithin: self innerBounds) ~= (0@0) ifTrue: ["Scroll end of selection into view if necessary" self scrollBy: delta truncated. ^ true]. ^ false! ! !MorphicTextAdapter class methodsFor: 'specs' stamp: 'NicolaiHess 2/15/2014 23:13' prior: 79520243! defaultSpec ^ SpecLayout new type: #PluggableTextMorph; send: #color: withArguments: #(#(model color)); send: #classOrMetaClass: withArguments: {#(model behavior)}; send: #on:text:accept:readSelection:menu:setSelection: withArguments: #(model getText accept:notifying: readSelection codePaneMenu:shifted: setSelection:); send: #enabled: withArguments: #(#(model enabled)); send: #askBeforeDiscardingEdits: withArguments: #(#(model askBeforeDiscardingEdits)); send: #borderWidth: withArguments: #(#(model borderWidth)); send: #autoAccept: withArguments: #(#(model autoAccept)); send: #borderColor: withArguments: #(#(model borderColor)); send:#setBalloonText: withArguments: { #(model help)}; send: #dragEnabled: withArguments: #(#(model dragEnabled)); send: #dropEnabled: withArguments: #(#(model dropEnabled)); send: #registerScrollChanges: withArguments: #(scrollValueChanged:); send: #vResizing: withArguments: #(spaceFill); send: #hResizing: withArguments: #(spaceFill); yourself! ! !MorphicTextAdapter methodsFor: 'widget API' stamp: 'NicolaiHess 2/15/2014 23:13' prior: 79257135! setSelection: interval self model setSelectionInterval: interval! ! !TextModel methodsFor: 'protocol' stamp: 'NicolaiHess 2/18/2014 23:33'! setSelectionInterval: anInterval selection rawValue: anInterval! ! !MenuCapturingMorph commentStamp: 'SeanDeNigris 2/20/2014 08:47' prior: 82609270! It's difficult to test whether menus appear because the test might block the UI thread and prevent it. I use Morphic stepping to monitor the world for a new menu. If I find one, you can get it by sending me #menu.! !MorphHandlingMiddleButton commentStamp: 'SeanDeNigris 2/20/2014 08:53' prior: 82609568! I log when the middle mouse button has been clicked on me, which is useful for testing.! !PluggableTextMorph class methodsFor: 'instance creation' stamp: 'NicolaiHess 2/15/2014 00:01' prior: 29586367! on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel ^ self new on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel setSelection: nil! ! !PluggableTextMorph class methodsFor: 'instance creation' stamp: 'NicolaiHess 2/15/2014 00:00'! on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel setSelection: setSelectionSel ^ self new on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel setSelection: setSelectionSel! ! !PluggableTextMorph methodsFor: 'initialization' stamp: 'NicolaiHess 2/15/2014 00:01' prior: 29565357! on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel self on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel setSelection: nil. ! ! !PluggableTextMorph methodsFor: 'initialization' stamp: 'NicolaiHess 2/15/2014 00:01'! on: anObject text: getTextSel accept: setTextSel readSelection: getSelectionSel menu: getMenuSel setSelection: setSelectionSel self model: anObject. getTextSelector := getTextSel. setTextSelector := setTextSel. getSelectionSelector := getSelectionSel. setSelectionSelector := setSelectionSel. getMenuSelector := getMenuSel. self borderWidth: 1. self setText: self getText. self setSelection: self getSelection.! ! !PluggableTextMorph methodsFor: 'editor access' stamp: 'NicolaiHess 2/15/2014 00:59' prior: 29557939! scrollSelectionIntoView: event "Scroll my text into view if necessary and return true, else return false" | selRects delta selRect rectToTest transform cpHere editor | editor := textMorph editor. self selectionInterval: editor selectionInterval. selRects := textMorph paragraph selectionRects. selRects isEmpty ifTrue: [^ false]. rectToTest := selRects first merge: selRects last. transform := scroller transformFrom: self. (event notNil and: [event anyButtonPressed]) ifTrue: "Check for autoscroll" [cpHere := transform localPointToGlobal: event cursorPoint. cpHere y <= self top ifTrue: [rectToTest := selRects first topLeft extent: 2@2] ifFalse: [cpHere y >= self bottom ifTrue: [rectToTest := selRects last bottomRight extent: 2@2] ifFalse: [^ false]]]. selRect := transform localBoundsToGlobal: rectToTest. selRect height > bounds height ifTrue: [(editor pointIndex - editor markIndex) < 0 ifTrue: [self scrollBy: 0@(self innerBounds top - selRect top)] ifFalse: [self scrollBy: 0@(self innerBounds bottom - selRect bottom)]. ^ true]. (delta := selRect amountToTranslateWithin: self innerBounds) y ~= 0 ifTrue: ["Scroll end of selection into view if necessary" self scrollBy: 0@delta y. ^ true]. ^ false ! ! !PluggableTextMorph methodsFor: 'editor access' stamp: 'NicolaiHess 2/15/2014 00:59' prior: 77592886! selectAll "Tell my textMorph's editor to select all" self textMorph editor selectAll. self selectionInterval: self textMorph editor selectionInterval! ! !PluggableTextMorph methodsFor: 'interactive error protocol' stamp: 'NicolaiHess 2/15/2014 01:01' prior: 29567299! selectFrom: start to: stop self textMorph editor selectFrom: start to: stop. self selectionInterval: self textMorph editor selectionInterval. ^ self selectionInterval! ! !PluggableTextMorph methodsFor: 'model access' stamp: 'NicolaiHess 2/15/2014 00:02' prior: 79521570! selectionInterval: sel selectionInterval := sel. setSelectionSelector ifNotNil: [ model perform:setSelectionSelector with: sel ].! ! !PluggableTextMorph methodsFor: 'model access' stamp: 'NicolaiHess 2/15/2014 01:01' prior: 29576698! setSelection: sel self selectionInterval: sel. textMorph editor selectFrom: sel first to: sel last. self scrollSelectionIntoView ifFalse: [scroller changed].! ! SimulateMouseSpecification removeSelector: #zorktestSimulateMiddleClick! MenuCaptureMorph removeSelector: #step! MenuCaptureMorph removeSelector: #setTimeout:! MenuCaptureMorph removeSelector: #initialize! MenuCaptureMorph class removeSelector: #timingOutAfter:! Smalltalk globals removeClassNamed: #MenuCaptureMorph! "Morphic-Base"! "Polymorph-Widgets"! "SUnit-UITesting"! "Spec-Core"! "Spec-MorphicAdapters"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.947.mcz') load. ScriptLoader new update30778. ! ----End fileIn----! ----QUIT----2014-02-21T13:31:48.120625+01:00 Pharo.image priorSource: 32265294! ----STARTUP----2014-02-21T13:31:48.352111+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-21T13:31:53.024111+01:00 Pharo.image priorSource: 32286472! ----STARTUP----2014-02-21T13:37:32.671443+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-21T13:37:32.971438+01:00 Pharo-30778.image priorSource: 32286669! ----STARTUP----2014-02-24T09:05:47.916341+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/24/2014 09:01' prior: 82597239! commentForCurrentUpdate ^ '12835 NBExternalArray ofType: bool is wrong https://pharo.fogbugz.com/f/cases/12835 12955 Wrong name on protocol addition in Nautilus https://pharo.fogbugz.com/f/cases/12955 12958 Integrate Versionner 2.4 https://pharo.fogbugz.com/f/cases/12958 12953 Display sub project loads directives https://pharo.fogbugz.com/f/cases/12953 12932 Versionner: Filter Test Configurations - Still does not work https://pharo.fogbugz.com/f/cases/12932 12903 Versionner rewrite of baseline renames project labels and strips off sub project load https://pharo.fogbugz.com/f/cases/12903 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/24/2014 09:02'! script432 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.266.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.135.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1415.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-SvenVanCaekenberghe.126.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.8.mcz Versionner-Core-Commands-MarcusDenker.44.mcz Versionner-Core-DependenciesModel-MarcusDenker.72.mcz Versionner-Core-Model-MarcusDenker.38.mcz Versionner-Spec-Browser-MarcusDenker.121.mcz Versionner-Tests-Core-Commands-MarcusDenker.11.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.32.mcz Versionner-Tests-Core-Model-MarcusDenker.16.mcz Versionner-Tests-Resources-MarcusDenker.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/24/2014 09:02'! update30779 "self new update30779" self withUpdateLog: '12835 NBExternalArray ofType: bool is wrong https://pharo.fogbugz.com/f/cases/12835 12955 Wrong name on protocol addition in Nautilus https://pharo.fogbugz.com/f/cases/12955 12958 Integrate Versionner 2.4 https://pharo.fogbugz.com/f/cases/12958 12953 Display sub project loads directives https://pharo.fogbugz.com/f/cases/12953 12932 Versionner: Filter Test Configurations - Still does not work https://pharo.fogbugz.com/f/cases/12932 12903 Versionner rewrite of baseline renames project labels and strips off sub project load https://pharo.fogbugz.com/f/cases/12903 '. self loadTogether: self script432 merge: false. self flushCaches. ! ! "ScriptLoader30"! !VersionnerProjectPanel commentStamp: '' prior: 81626965! A VersionPanel is the panel used to show details about a given version of a configurationOf. Instance Variables config: The configuration (an MBConfigurationInfo instance) of the project to display details on. packageList: The specWidget used to display packages describes in the version ! !VSDevCycleCommand commentStamp: '' prior: 0! Versionnner commands related to the development workflow.! !VSReleaseDevelopmentVersionCommand commentStamp: '' prior: 81979918! Turn the version into a release. It therefore appears as #stable afterward". ! !VSUpdateDevelopmentVersionCommand commentStamp: 'ChristopheDemarey 2/6/2014 13:29' prior: 81981445! Update the current development version with infomation provided by the project. ! !VSDevCycleCommandTest commentStamp: '' prior: 0! A VSReleaseDevelopmentVersionCommandTest is xxxxxxxxx. Instance Variables project: version: project - xxxxx version - xxxxx ! !VersionnerToolBoxTest commentStamp: 'ChristopheDemarey 2/21/2014 14:00' prior: 0! test class for the versionner toolbox.! !VSDetailsLeafNode commentStamp: 'ChristopheDemarey 2/21/2014 17:41' prior: 0! A VSDetailsLeafNode is used to display dependencies requirements or project loads in a tree.! !VersionnerToolBox commentStamp: 'ChristopheDemarey 2/21/2014 13:50' prior: 0! This class is used to fill the gap between Versionner dependencies model and the flatten objects (collections, maps) expected by Metacello ToolBox.! !ListDialogWindow methodsFor: 'morphic protocol' stamp: 'NicolaiHess 2/22/2014 00:53' prior: 78340856! searchAccept: aString self searchUpdate: aString. list detect: [ :item | (self displayItem: item) = aString ] ifFound: [ :item | ^ self accept: item ]. acceptNewEntry ifTrue: [ ^ self accept: aString ] ifFalse: [ list size = 1 ifTrue: [ ^ self accept: list first ] ]. list ifNotEmpty: [ ^ self giveFocusToList ]! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 2/21/2014 16:19' prior: 81939431! visitMCProjectAsRequiredProject: aProject "visit a Metacello Project to add it as a required projet. It is quite the same as visitMCProject except that we won't dive into the project structure. aProject is an instance of MetacelloMCProjectSpec." | version requiredProject | requiredProject := MTDependantProject new. requiredProject displayName: aProject name. requiredProject name: (aProject className ifNil: [aProject name] ifNotNil: [ :className | className configurationBaseName]). requiredProject configurationClass: aProject projectClass. requiredProject repositories: (aProject repositorySpecs collect: [ :aRepoSpec | aRepoSpec description]). requiredProject dependencies: aProject loads asOrderedCollection. version := MTVersion fromVersionString: aProject versionString. requiredProject version: version. project addDependency: requiredProject. ^ requiredProject.! ! !VersionnerProjectPanel commentStamp: '' prior: 82631676! A VersionPanel is the panel used to show details about a given version of a configurationOf. Instance Variables config: The configuration (an MBConfigurationInfo instance) of the project to display details on. packageList: The specWidget used to display packages describes in the version ! !VersionnerProjectPanel class methodsFor: 'spec' stamp: 'ChristopheDemarey 2/21/2014 18:04' prior: 81627358! defaultSpec "Define the layout of the Project Panel" ^ SpecLayout composed newColumn: [ :c1 | c1 newRow: [ :r1 | r1 add: #projectsLabel origin: 0@0 corner: 1@1; add: #addProjectButton width: 50; add: #removeProjectButton width: 50; add: #editProjectButton width: 50] height: 25; add: #projectList; addSplitter; newRow: [ :r2 | r2 add: #groupsLabel origin: 0@0 corner: 1@1; add: #addGroupButton width: 50; add: #removeGroupButton width: 50] height: 25; add: #groupList; addSplitter; add: #packagesPanel ]; yourself! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 7/23/2013 23:24' prior: 81629355! addProjectButton ^ addProjectButton! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 2/21/2014 18:16'! addProjectLoadDirective "Add a load directive to the selected project." projectList selectedItem ifNil: [ UIManager default inform: 'No project selected' ] ifNotNilDo: [ :requiredProject | ^ UIManager default request: 'Package or group to load?' "| potentialRequirements | potentialRequirements := project dependencies collect: [ :dependency | dependency name ]. ^ UIManager default chooseFrom: potentialRequirements values: potentialRequirements" ]. ^ nil! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 2/21/2014 17:59'! editProjectButton ^ editProjectButton! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 2/21/2014 18:17'! editSelectedProjectLoads "Edit load directives for the selected project" | selectedProject editionWidget | selectedProject := projectList selectedItem content. selectedProject ifNil: [ ^self ]. editionWidget := (EditableList new: selectedProject dependencies) title: selectedProject name , ' load directives'; addItemBlock: [ self addProjectLoadDirective ]; yourself. editionWidget okAction: [ "propagate changes" selectedProject dependencies: editionWidget list getItems. projectList roots: project requiredProjects ]. self window openModal: editionWidget openDialogWithSpec window ! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/21/2014 18:04' prior: 81631464! initializePresenter "Initialize widgets behavior" projectList whenSelectedItemsChanged: [ :selection | removeProjectButton enabled: selection notEmpty. editProjectButton enabled: selection notEmpty. projectList menu: [ :aMenu | self requiredProjectMenu: aMenu] ]. addProjectButton action: [ self addDependentProject ]. removeProjectButton action: [ projectList selectedItem ifNotNilDo: [ :selectedItem | self removeDependentProject: selectedItem content ] ]. editProjectButton action: [ self editSelectedProjectLoads ]. groupList whenSelectedItemsChanged: [ :selection | removeGroupButton enabled: selection notEmpty ]. addGroupButton action: [ self addGroup ]. removeGroupButton action: [ groupList selectedItem ifNotNilDo: [ :selectedItem | self remove: selectedItem fromGroup: groupList selectedNode parentNode item ] ]! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/21/2014 18:01' prior: 82082971! initializeProjectsWidget projectList := (self instantiate: TreeModel) whenBuiltDo: [ projectList rootNodeHolder: [ :item | VSProjectNode new content: item ] ]; yourself. "projectList displayBlock: [:item | item asString ]. projectList childrenBlock: [:item | (item isKindOf: MTDependency ) ifTrue: [ item dependencies collect: [ :each | '--> loads: ' , each] ] ifFalse: [{}] ]." "| text version | text := item name. version := item currentVersion. (version size > 0) ifTrue: [ text := text , ' (' , item currentVersion , ')' ]. text asStringMorph ]." addProjectButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #addIcon); enabled: false; help: 'Add a new dependent project to this project'. removeProjectButton := (self instantiate: ButtonModel) label: nil; icon: (Smalltalk ui icons iconNamed: #deleteIcon); enabled: false; help: 'Remove a dependent project from this project'. editProjectButton := self newButton label: nil; icon: (Smalltalk ui icons iconNamed: #editIcon); enabled: false; help: 'Edit the dependent project loads list'.! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 7/23/2013 23:24' prior: 81635940! removeProjectButton ^ removeProjectButton! ! !VSCatalogAdderCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/17/2014 14:52' prior: 82433904! title ^ 'add catalog methods'! ! !MTDependantProject methodsFor: 'displaying' stamp: 'ChristopheDemarey 2/17/2014 15:58' prior: 81944696! repositories: aRepositoryList "Set a list of repository URLs for this project." repositories := aRepositoryList asOrderedCollection.! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 2/21/2014 16:16' prior: 81951442! createBaseline: baselineVersionString "Create a new baseline with information given by the project" MetacelloToolBox createBaseline: baselineVersionString for: project configurationClass name repository: project repository requiredProjects: (project requiredProjects collect: [ :each | each name ]) packages: (project packages collect: [ :aPackage | aPackage name ]) repositories: #() dependencies: project dependenciesMap groups: (project groups collect: [ :aGroup | aGroup name -> aGroup dependencies ]) requiredProjectSpecs: self requiredProjectSpecs! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 2/21/2014 16:16'! requiredProjectSpecs ^ project requiredProjects collect: [ :requiredProject | VersionnerToolBox projectSpecFromRequiredProject: requiredProject ].! ! !VersionnerProjectToolBar methodsFor: 'actions' stamp: 'ChristopheDemarey 2/6/2014 16:15' prior: 81637394! executeWithDevWorkflow: aCommandClass browser projectPanel project ifNotNilDo: [ :project | | cmd | cmd := aCommandClass target: project devWorkflow for: self. cmd execute ]. browser refreshConfiguration. browser update! ! !NBBool methodsFor: 'emitting code' stamp: 'StephaneDucasse 2/7/2014 16:16' prior: 27355873! coerceReturnValue: gen "convert C Bool to true or false" | proxy asm lfalse done | proxy := gen proxy. asm := gen asm. lfalse := asm uniqueLabelName: 'false'. done := asm uniqueLabelName: 'done'. asm or: asm AL with: asm AL; je: lfalse. proxy trueObject. asm jmp: done. asm label: lfalse. proxy falseObject. asm label: done.! ! !VersionnerSpecBrowser methodsFor: 'actions' stamp: 'ChristopheDemarey 2/21/2014 09:50' prior: 81719844! refresh self configurationList: self class imageConfigurations! ! !VSDevCycleCommand commentStamp: '' prior: 82632034! Versionnner commands related to the development workflow.! !VSDevCycleCommand methodsFor: 'private' stamp: 'ChristopheDemarey 2/21/2014 10:13'! createDevelopmentVersion | workflow newDevVersionString | workflow := target. newDevVersionString := UIManager default request: 'No development version found!! (must be a baseline)' , Character cr asString , 'Version number for the next development version' initialAnswer: 1.0 title: 'Create a development version'. newDevVersionString ifNotNil: [ newDevVersionString := self standardizeDevVersionString: newDevVersionString. workflow createNextDevelopment: newDevVersionString ]! ! !VSDevCycleCommand methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/21/2014 10:10'! standardizeDevVersionString: aDevVersionString aDevVersionString := aDevVersionString copyReplaceAll: 'baseline-' with: ''. aDevVersionString := aDevVersionString copyReplaceAll: '-baseline' with: ''. aDevVersionString := aDevVersionString copyReplaceAll: 'baseline' with: ''. ^ aDevVersionString , '-baseline'! ! !VSReleaseDevelopmentVersionCommand commentStamp: '' prior: 82632175! Turn the version into a release. It therefore appears as #stable afterward". ! !VSUpdateDevelopmentVersionCommand commentStamp: 'ChristopheDemarey 2/6/2014 13:29' prior: 82632355! Update the current development version with infomation provided by the project. ! !VSUpdateDevelopmentVersionCommand methodsFor: 'checking' stamp: 'ChristopheDemarey 2/21/2014 10:02'! ensureDevelopmentVersionExists | workflow | workflow := target. [ workflow developmentVersion ] on: MetacelloVersionDoesNotExistError do: [ self createDevelopmentVersion ]! ! !VSUpdateDevelopmentVersionCommand methodsFor: 'checking' stamp: 'ChristopheDemarey 2/21/2014 10:08'! ensureDevelopmentVersionIsBaseline | workflow devVersion | workflow := target. devVersion := workflow developmentVersion. (devVersion blessing = #baseline) ifFalse: [ self createDevelopmentVersion ]! ! !VSUpdateDevelopmentVersionCommand methodsFor: 'execute' stamp: 'ChristopheDemarey 2/21/2014 10:04' prior: 81981627! execute | workflow | workflow := target. self ensureDevelopmentVersionExists. self ensureDevelopmentVersionIsBaseline. workflow updateDevelopment.! ! !VSPackageNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/21/2014 17:41' prior: 81815282! childNodeClassFor: anItem ^ VSDetailsLeafNode! ! !VSDevCycleCommandTest commentStamp: '' prior: 82632487! A VSReleaseDevelopmentVersionCommandTest is xxxxxxxxx. Instance Variables project: version: project - xxxxx version - xxxxx ! !VSDevCycleCommandTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/21/2014 10:12'! testStandardizeDevVersionString | cmd | cmd := VSReleaseDevelopmentVersionCommand new. self assert: (cmd standardizeDevVersionString: '1.0-baseline') equals: '1.0-baseline'. self assert: (cmd standardizeDevVersionString: 'baseline-1.3') equals: '1.3-baseline'.! ! !VersionnerToolBoxTest commentStamp: 'ChristopheDemarey 2/21/2014 14:00' prior: 82632723! test class for the versionner toolbox.! !VersionnerToolBoxTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/21/2014 15:53'! testProjectSpecFromRequiredProject | spec | spec := VersionnerToolBox projectSpecFromRequiredProject: self versionnerTestXMLWriter. self assert: spec asString equals: self versionnerTestXMLWriterSpec! ! !VersionnerToolBoxTest methodsFor: 'test data' stamp: 'ChristopheDemarey 2/21/2014 14:23'! versionnerTestXMLWriter ^ MTDependantProject new name: 'VersionnerTestXMLWriter'; configurationClass: ConfigurationOfVersionnerTestXMLWriter; displayName: 'aProjectAlias' yourself.! ! !VersionnerToolBoxTest methodsFor: 'expected results' stamp: 'ChristopheDemarey 2/21/2014 15:51'! versionnerTestXMLWriterSpec ^ 'spec name: ''aProjectAlias''; projectReference: [ spec className: #ConfigurationOfVersionnerTestXMLWriter; versionString: #''stable'' ].'! ! !VSProjectNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/21/2014 17:41'! childNodeClassFor: anItem ^ VSDetailsLeafNode! ! !VSProjectNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 2/21/2014 17:32' prior: 81816287! children ^ [ self content dependencies collect: [ :each | 'loads: ' , each] ]! ! !MetacelloToolBox class methodsFor: '*Versionner-Core-DependenciesModel' stamp: 'ChristopheDemarey 2/21/2014 15:58'! createBaseline: baselineVersionString for: configurationBasename repository: repositoryDescription requiredProjects: projectList packages: packageList repositories: repositories dependencies: dependencies groups: groups requiredProjectSpecs: requiredProjectSpecs "Create a new baseline version based on the specified project structure. repositoryDescription - metacello repository string projectList - collection of project base names (without ConfigurationOf prefix) packageList - collection of package base names repositories - collection of associations where key is name of package and value is collection of repository descriptions dependencies - collection of associations where key is name of package and value is collection of required packages and projects groups - collection of associations where key is the name of the group and value is the collection of group members loads - collection of associations where key is name of a project and value is collection of packages/groups to load. " | toolbox | (toolbox := self configurationNamed: configurationBasename) createVersionMethod: 'baseline' , (self stripVersionStringForSelector: baselineVersionString) , ':' inCategory: 'baselines' forVersion: baselineVersionString; addSection: #'common' repository: repositoryDescription requiredProjects: projectList packages: packageList dependencies: dependencies includes: #() files: #() repositories: repositories preLoadDoIts: #() postLoadDoIts: #() supplyingAnswers: #() groups: groups versionSpecsDo: [ :versionSpec | versionSpec blessing: #'baseline' ] requiredProjectSpecs: requiredProjectSpecs; commitMethod. ^ toolbox! ! !MetacelloToolBox methodsFor: '*Versionner-Core-DependenciesModel' stamp: 'ChristopheDemarey 2/21/2014 16:01'! addSection: sectionAttributeOrPath repository: repositoryDescription requiredProjects: projectList packages: packageList dependencies: dependecies includes: includes files: files repositories: repositories preLoadDoIts: preLoadDoIts postLoadDoIts: postLoadDoIts supplyingAnswers: supplyingAnswers groups: groups versionSpecsDo: aBlock requiredProjectSpecs: requiredProjectSpecs " repositoryDescription - metacello repository string projectList - collection of project base names (without ConfigurationOf prefix) packageList - collection of package base names dependencies - collection of associations where key is name of package and value is collection of required packages and projects includes - collection of associations where key is name of package and value is collection of included packages and projects files - collection of associations where key is name of package and value is name of file repositories - collection of associations where key is name of package and value is collection of repository descriptions preLoadDoIts - collection of associations where key is name of package and value is preload doit selector postLoadDoIts - collection of associations where key is name of package and value is postload doit selector supplyingAnswers - collection of associations where key is name of package and value is the supplyingAnswers array groups - collection of associations where key is the name of the group and value is the collection of group members requiredProjectSpecs - collection of already computed required project specs. " | versionSpec dependencyMap includesMap filesMap repositoriesMap preLoadDoItsMap postLoadDoItsMap supplyingAnswersMap | versionSpec := self createVersionSpec: self methodSpec versionString. repositoryDescription ~~ nil ifTrue: [ versionSpec repository: repositoryDescription ]. dependencyMap := self buildMapFrom: dependecies for: packageList. includesMap := self buildMapFrom: includes for: packageList. filesMap := self buildMapFrom: files for: packageList. repositoriesMap := self buildMapFrom: repositories for: packageList , projectList. preLoadDoItsMap := self buildMapFrom: preLoadDoIts for: packageList. postLoadDoItsMap := self buildMapFrom: postLoadDoIts for: packageList. supplyingAnswersMap := self buildMapFrom: supplyingAnswers for: packageList. requiredProjectSpecs do: [ :projectSpec | versionSpec packages merge: projectSpec ]. packageList do: [ :packageName | | spec | spec := self createPackageSpec: packageName. dependencyMap at: packageName ifPresent: [ :dependencyList | spec requires: dependencyList ]. includesMap at: packageName ifPresent: [ :includesList | spec includes: includesList ]. filesMap at: packageName ifPresent: [ :file | spec file: file ]. repositoriesMap at: packageName ifPresent: [ :repositoriesList | repositoriesList do: [ :repoString | spec repository: repoString ] ]. preLoadDoItsMap at: packageName ifPresent: [ :preLoad | spec preLoadDoIt: preLoad ]. postLoadDoItsMap at: packageName ifPresent: [ :postLoad | spec postLoadDoIt: postLoad ]. supplyingAnswersMap at: packageName ifPresent: [ :answer | spec answers: answer ]. versionSpec packages merge: spec ]. groups do: [ :assoc | | spec | spec := self createGroupSpec: assoc key. spec includes: assoc value. versionSpec packages merge: spec ]. aBlock value: versionSpec. self methodSpec addMethodSection: sectionAttributeOrPath asMetacelloAttributePath versionSpec: versionSpec! ! !VSDetailsLeafNode commentStamp: 'ChristopheDemarey 2/21/2014 17:41' prior: 82632842! A VSDetailsLeafNode is used to display dependencies requirements or project loads in a tree.! !VSDetailsLeafNode methodsFor: 'accessing' stamp: 'ChristopheDemarey 6/20/2013 22:52'! icon ^ Smalltalk ui icons iconNamed: #forwardIcon! ! !VersionnerToolBox commentStamp: 'ChristopheDemarey 2/21/2014 13:50' prior: 82633015! This class is used to fill the gap between Versionner dependencies model and the flatten objects (collections, maps) expected by Metacello ToolBox.! !VersionnerToolBox class methodsFor: 'spec creation' stamp: 'ChristopheDemarey 2/21/2014 14:56'! projectSpecFromRequiredProject: aRequiredProject ^ self new projectSpecFromRequiredProject: aRequiredProject! ! !VersionnerToolBox methodsFor: 'spec creation' stamp: 'ChristopheDemarey 2/21/2014 14:36'! createProjectReferenceSpec: aProject | projectReferenceProject versionString | projectReferenceProject := aProject configurationClass project. versionString := (projectReferenceProject hasVersion: #'stable') ifTrue: [ #'stable' ] ifFalse: [ #'bleedingEdge' ]. " ^ project projectReferenceSpec name: aProject displayName; projectReference: (project projectSpec name: projectBaseName; className: configurationName; versionString: versionString; yourself); yourself"! ! !VersionnerToolBox methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/21/2014 13:59'! initialize super initialize. metacelloToolBox := MetacelloToolBox new.! ! !VersionnerToolBox methodsFor: 'spec creation' stamp: 'ChristopheDemarey 2/21/2014 17:19'! projectSpecFromRequiredProject: aRequiredProject | mcProject versionString projectReferenceSpec spec | mcProject := aRequiredProject configurationClass project. versionString := (mcProject hasVersion: #'stable') ifTrue: [ #'stable' ] ifFalse: [ #'bleedingEdge' ]. projectReferenceSpec := mcProject projectSpec name: aRequiredProject displayName; className: aRequiredProject configurationClass name; versionString: versionString; yourself. spec := mcProject projectReferenceSpec name: aRequiredProject displayName; projectReference: projectReferenceSpec. aRequiredProject repositories do: [ :repoString | spec repository: repoString ]. aRequiredProject dependencies ifNotEmptyDo: [ :loadsList | spec projectReference loads: loadsList ]. ^ spec! ! VSReleaseDevelopmentVersionCommandTest removeSelector: #testStandardizeDevVersionString! Smalltalk globals removeClassNamed: #VSReleaseDevelopmentVersionCommandTest! VSDevCycleCommands removeSelector: #createDevelopmentVersion! Smalltalk globals removeClassNamed: #VSDevCycleCommands! VSRequirementsNode removeSelector: #icon! Smalltalk globals removeClassNamed: #VSRequirementsNode! VSReleaseDevelopmentVersionCommand removeSelector: #standardizeDevVersionString:! "NativeBoost-Core"! "Polymorph-Widgets"! "Versionner-Core-Commands"! "Versionner-Core-DependenciesModel"! "Versionner-Spec-Browser"! "Versionner-Tests-Core-Commands"! "Versionner-Tests-Core-DependenciesModel"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.948.mcz') load. ScriptLoader new update30779. ! ----End fileIn----! ----QUIT----2014-02-24T09:05:57.780609+01:00 Pharo.image priorSource: 32286866! ----STARTUP----2014-02-24T09:05:57.986264+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-24T09:06:02.546261+01:00 Pharo.image priorSource: 32324426! ----STARTUP----2014-02-24T09:25:53.695364+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-24T09:25:53.977365+01:00 Pharo-30779.image priorSource: 32324623! ----STARTUP----2014-02-25T08:08:48.063482+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 2/25/2014 08:05' prior: 82618812! commentForCurrentUpdate ^ '12458 PointerExplorer MNU MenuMorph>>addGroup: https://pharo.fogbugz.com/f/cases/12458 12211 Special #inform: in headless mode no longer required https://pharo.fogbugz.com/f/cases/12211 12985 Sometimes multi-selection is lost on trees https://pharo.fogbugz.com/f/cases/12985 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 2/25/2014 08:05'! script433 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-MarcusDenker.916.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.268.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.692.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-MarcusDenker.345.mcz RPackage-SystemIntegration-EstebanLorenzano.216.mcz RPackage-Tests-MarcusDenker.142.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.135.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.8.mcz Versionner-Core-Commands-MarcusDenker.44.mcz Versionner-Core-DependenciesModel-MarcusDenker.72.mcz Versionner-Core-Model-MarcusDenker.38.mcz Versionner-Spec-Browser-MarcusDenker.121.mcz Versionner-Tests-Core-Commands-MarcusDenker.11.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.32.mcz Versionner-Tests-Core-Model-MarcusDenker.16.mcz Versionner-Tests-Resources-MarcusDenker.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 2/25/2014 08:05'! update30780 "self new update30780" self withUpdateLog: '12458 PointerExplorer MNU MenuMorph>>addGroup: https://pharo.fogbugz.com/f/cases/12458 12211 Special #inform: in headless mode no longer required https://pharo.fogbugz.com/f/cases/12211 12985 Sometimes multi-selection is lost on trees https://pharo.fogbugz.com/f/cases/12985 '. self loadTogether: self script433 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MorphTreeMorph methodsFor: 'events-processing' stamp: 'MartinDias 2/24/2014 18:08' prior: 38705666! startDrag: anEvent | aTransferMorph itemMorph passenger | self dragEnabled ifTrue: [itemMorph := self allNodeMorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [anEvent hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. (self listManager selectedMorphList includes: itemMorph) ifFalse: [self listManager setSelectedMorph: itemMorph]. passenger := self model dragPassengerFor: itemMorph inMorph: self. passenger ifNotNil: [ aTransferMorph := self model transferFor: passenger from: self. "Ask the draggedMorph otherwise the transferMorph has not yet its bounds" aTransferMorph align: aTransferMorph draggedMorph center with: anEvent position. aTransferMorph dragTransferType: (self model dragTransferTypeForMorph: self). anEvent hand grabMorph: aTransferMorph]. anEvent hand releaseMouseFocus: self! ! !ObjectExplorer methodsFor: 'menus' stamp: 'NicolaiHess 2/23/2014 10:53'! addTo: aMenu fromMenuModelOf: element "adapt elements menuModel items as menu morph items " | menuModel | menuModel := MenuModel new. element inspectionMenu: menuModel. menuModel menuGroups do: [ :group | | items | items := group buildWithSpec. items do: [ :item | aMenu addMenuItem: item ] ] separatedBy: [ aMenu addLine ]! ! !ObjectExplorer methodsFor: 'menus' stamp: 'NicolaiHess 2/23/2014 10:53' prior: 49516805! buildMenuForSelection: aMenu "Borrow a menu from my inspector" | element | aMenu defaultTarget: self. element := SelfEyeElement host: self object. element mainInspectSubMenu: aMenu. self addTo:aMenu fromMenuModelOf:element. aMenu addLine; add: 'monitor changes' target: self selector: #monitor: argument: currentSelection. monitorList isEmptyOrNil ifFalse: [aMenu addLine; add: 'stop monitoring all' target: self selector: #stopMonitoring]. ! ! !CommandLineUIManager methodsFor: 'ui requests' stamp: 'CamilloBruni 2/22/2014 20:50' prior: 19753881! inform: aString | logBlock | "Just log notifications" (ProvideAnswerNotification signal: aString) ifNotNil: [:answer | ^true]. logBlock := [:logger | logger cr; nextPutAll: (String new: 79 withAll: $= ); cr; nextPutAll: 'Notice: '; nextPutAll: aString; cr; nextPutAll: (String new: 79 withAll: $= ); cr]. Smalltalk logDuring: logBlock. aString logCr.! ! "Morphic-Base"! "Tools"! "UIManager"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.949.mcz') load. ScriptLoader new update30780. ! ----End fileIn----! ----QUIT----2014-02-25T08:08:55.316371+01:00 Pharo.image priorSource: 32324820! ----STARTUP----2014-02-25T08:08:55.515419+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-25T08:09:00.02142+01:00 Pharo.image priorSource: 32340432! ----STARTUP----2014-02-25T08:19:03.833153+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-25T08:19:04.119148+01:00 Pharo-30780.image priorSource: 32340629! ----STARTUP----2014-02-25T14:07:39.401078+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'EstebanLorenzano 2/25/2014 14:04' prior: 82656766! commentForCurrentUpdate ^ '12601 Can not split Packages https://pharo.fogbugz.com/f/cases/12601 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'EstebanLorenzano 2/25/2014 14:04'! script434 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.918.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.268.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.156.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-EstebanLorenzano.31.mcz ProfStef-Help-MarcusDenker.11.mcz ProfStef-Tests-MarcusDenker.20.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-EstebanLorenzano.218.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.156.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.135.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1019.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.8.mcz Versionner-Core-Commands-MarcusDenker.44.mcz Versionner-Core-DependenciesModel-MarcusDenker.72.mcz Versionner-Core-Model-MarcusDenker.38.mcz Versionner-Spec-Browser-MarcusDenker.121.mcz Versionner-Tests-Core-Commands-MarcusDenker.11.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.32.mcz Versionner-Tests-Core-Model-EstebanLorenzano.20.mcz Versionner-Tests-Resources-MarcusDenker.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'EstebanLorenzano 2/25/2014 14:04'! update30781 "self new update30781" self withUpdateLog: '12601 Can not split Packages https://pharo.fogbugz.com/f/cases/12601 '. self loadTogether: self script434 merge: false. self flushCaches. ! ! "ScriptLoader30"! !RPackage methodsFor: 'compiled method handling' stamp: 'EstebanLorenzano 2/22/2014 11:13' prior: 31790181! addMethod: aCompiledMethod "Add the method to the receiver as a defined method if the class is defined in it, else as an extension." | methodClass | methodClass := aCompiledMethod methodClass. (self includesClass: methodClass ) ifTrue: [ methodClass isMeta ifTrue: [ (metaclassDefinedSelectors at: methodClass theNonMetaClass name ifAbsentPut: [ Set new ]) add: aCompiledMethod selector] ifFalse: [ (classDefinedSelectors at: methodClass name ifAbsentPut: [ Set new ]) add: aCompiledMethod selector ] ] ifFalse: [ methodClass isMeta ifTrue: [ (metaclassExtensionSelectors at: methodClass theNonMetaClass name ifAbsentPut: [ Set new ]) add: aCompiledMethod selector.] ifFalse: [ (classExtensionSelectors at: methodClass name ifAbsentPut: [ Set new ]) add: aCompiledMethod selector]. "we added a method extension so the receiver is an extending package of the class" self organizer registerExtendingPackage: self forClass: methodClass ]. ^ aCompiledMethod.! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 2/19/2014 16:12'! classExtensionSelectors ^ classExtensionSelectors! ! !RPackage methodsFor: 'class tags' stamp: 'GuillermoPolito 2/14/2014 13:05'! classTagNamed: aSymbol ^ classTags detect: [ :each | each name = aSymbol ]! ! !RPackage methodsFor: '*RPackage-SystemIntegration' stamp: 'EstebanLorenzano 2/21/2014 11:31' prior: 80383661! correspondingMcPackage "Answers the corresponding MCPackage. Normally it should exist, but in certain patterns could happen that the monticello package is not there. " self flag: #todo. "Rename this method as #mcPackage" ^ MCWorkingCopy allManagers detect: [ :each | each package name = name ] ifFound: [ :workingCopy | workingCopy package ] ifNone: [ nil ]. ! ! !RPackage methodsFor: 'converting' stamp: 'EstebanLorenzano 2/22/2014 11:36'! demoteToRPackageNamed: aString | newRPackage | self unregister. newRPackage := self class organizer packageNamed: aString ifAbsent: [ (self class named: aString) register ]. newRPackage importPackage: self. newRPackage classes do: [ :each | SystemAnnouncer uniqueInstance classRepackaged: each from: self to: newRPackage ].! ! !RPackage methodsFor: 'class tags' stamp: 'EstebanLorenzano 2/14/2014 15:28'! extensionsForTag: aRPackageTag ^ self extensionMethods select: [ :extensionMethod | | category | category := extensionMethod protocol allButFirst. self category: category matches: aRPackageTag categoryName ]! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 2/22/2014 11:56'! importPackage: anRPackage anRPackage definedClasses do: [ :className | self importClass: className ]. "new rpackage inherits the extentions" classExtensionSelectors := classExtensionSelectors, (anRPackage classExtensionSelectors). metaclassExtensionSelectors := metaclassExtensionSelectors, (anRPackage metaclassExtensionSelectors). ! ! !RPackage methodsFor: 'private' stamp: 'EstebanLorenzano 2/19/2014 16:13'! metaclassExtensionSelectors ^ metaclassExtensionSelectors! ! !RPackage methodsFor: 'class tags' stamp: 'GuillermoPolito 2/14/2014 12:00'! removeClassesMatchingTag: aTag aTag classes do: [ :class | self removeClassDefinition: class ]! ! !RPackage methodsFor: 'compiled method handling' stamp: 'EstebanLorenzano 2/22/2014 11:10' prior: 31791386! removeMethod: aCompiledMethod "Remove the method to the receiver as a defined method." | methodClass | methodClass := aCompiledMethod methodClass. methodClass isMeta ifTrue: [ self removeSelector: aCompiledMethod selector ofMetaclassName: methodClass theNonMetaClass originalName ] ifFalse: [ self removeSelector: aCompiledMethod selector ofClassName: methodClass originalName ]. ^ aCompiledMethod.! ! !RPackage methodsFor: 'compiled method handling' stamp: 'EstebanLorenzano 2/22/2014 11:09'! removeMethods: aCollection aCollection do: [ :each | self removeMethod: each ] ! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/21/2014 16:31' prior: 81757105! testIsDirty "This test is likely to be bogus ... cannot just create a package for packages that don'e exist. see Metacello Issue 113" | workingCopy cls | self deny: (package isDirty). self assert: (package printString = 'FooBarZork ---'). "We create a class" self deny: (Smalltalk includesKey: #TMPClass). cls := Object subclass: #TMPClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooBarZork'. self assert: (package isDirty). "self assert: (package printString = 'FooBarZork ---')." (Smalltalk includesKey: #TMPClass) ifTrue: [ (Smalltalk at: #TMPClass) removeFromSystem ]. ! ! !RPackageTag methodsFor: 'private ' stamp: 'EstebanLorenzano 2/14/2014 15:29'! asRPackage "Create a new RPackage with the same contents as this rpackage tag" | newRPackage | newRPackage := RPackage named: self categoryName. self classes do: [ :className | newRPackage importClass: className ]. (self package extensionsForTag: self) do: [ :extensionMethod | newRPackage addMethod: extensionMethod ]. ^ newRPackage! ! !RPackageTag methodsFor: 'converting' stamp: 'EstebanLorenzano 2/22/2014 12:13'! promoteAsRPackage "This method converts this rpackage tag into an rpackage, removes the tag from the parent package with all classes included and registers the new package in the system. The tag has to be removed before registering to avoid conflicts. Smells like we could have an error and lose package tags!! registerPackage should not fail because names Package-Tag are unique in the system." | newRPackage | newRPackage := self asRPackage. self classes do: [ :each | self package removeClass: each ]. self package removeClassTag: self name. self package removeMethods: newRPackage extensionMethods. RPackage organizer registerPackage: newRPackage. newRPackage classes do: [ :each | SystemAnnouncer uniqueInstance classRepackaged: each from: self package to: newRPackage ].! ! !PackageTreeNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 2/19/2014 16:44' prior: 74337741! packagesFixMenu: aBuilder | target | target := aBuilder model. (aBuilder item: #'Find Class...') keyText: 'f, c' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [target findClass]; order: 0; help: 'Search for a class by name'. (aBuilder item: #'Find Package...') keyText: 'f, p' if: Nautilus useOldStyleKeys not; keyText: 'F' if: Nautilus useOldStyleKeys; action: [ target findPackage ]; order: 100; help: 'Search for a package by name'; withSeparatorAfter. (aBuilder item: #'Add package...') keyText: 'n, p' if: Nautilus useOldStyleKeys not; keyText: 'n' if: Nautilus useOldStyleKeys; action: [target addPackage]; order: 200; help: 'Add a package'. (aBuilder item: #'Add tag...') action: [ target addClassCategory ]; order: 210; help: 'Add a tag/category in package'; withSeparatorAfter. (aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [target fullBrowse]; order: 999; help: 'Open the same browser'.! ! !PackageTreeNautilusUI methodsFor: 'private' stamp: 'EstebanLorenzano 2/21/2014 13:07' prior: 82062573! addClassCategoryBasedOn: aSelection | name package packageTag | packageTag := nil. package := aSelection package. name := UIManager default request: ('New category: {1}-' format: { package name }) initialAnswer: '' title: 'Create a new category'. [ (self isValidPackageName: name) ifTrue: [ packageTag := package addClassTag: name ] ifFalse: [ self alertInvalidPackageName: name ] ] on: RPackageConflictError do: [ :e | UIManager default inform: e messageText, '. You need to use promote/demote options instead.' ]. ^ packageTag! ! !PackageTreeNautilusUI methodsFor: 'package' stamp: 'EstebanLorenzano 2/21/2014 13:07' prior: 82063164! addPackageBasedOn: aPackage [ ^ super addPackageBasedOn: aPackage ] on: RPackageConflictError do: [ :e | UIManager default inform: e messageText, '. You need to use promote/demote options instead.' ]. ^ nil! ! !PackageTreeNautilusUI methodsFor: 'private dispatch' stamp: 'EstebanLorenzano 2/21/2014 12:33' prior: 74346321! removePackageCategory: package self basicRemoveClasses: package definedClasses. self browsedEnvironment packageOrganizer unregisterPackage: package asNautilusSelection item ! ! !PackageTreeTagSelection methodsFor: 'testing' stamp: 'GuillermoPolito 2/14/2014 11:05'! isPackageTag ^ true! ! !MCPackageManager methodsFor: 'operations' stamp: 'EstebanLorenzano 2/21/2014 15:33' prior: 24907196! unregister self class registry removeKey: package ifAbsent: [ ^ self ]. self class changed: (Array with: #unregistered with: package). self announcer announce: (MCWorkingCopyDeleted workingCopy: self package: package)! ! !NautilusUI methodsFor: 'menu-packages' stamp: 'EstebanLorenzano 2/21/2014 12:42'! demoteSelectedPackageAsPackageWithTag | package | package := self selectedPackage item. (package name includes: $-) ifFalse: [ ^ self inform: 'Package {1} does not have levels to downgrade.' ]. package demoteToRPackageNamed: (package name copyUpToLast: $-)! ! !NautilusUI methodsFor: 'menu-packages' stamp: 'EstebanLorenzano 2/19/2014 16:33'! promoteSelectedPackageTagAsPackage self selectedPackage item promoteAsRPackage! ! !PackageTreeSelection methodsFor: 'testing' stamp: 'GuillermoPolito 2/14/2014 11:06'! isPackageTag ^ false! ! !AbstractNautilusUI class methodsFor: 'menu' stamp: 'EstebanLorenzano 2/21/2014 12:42' prior: 37880025! packagesMenu: aBuilder | package target | target := aBuilder model. (package := target selectedPackage) ifNil: [ ^ target ]. (aBuilder item: #'Browse scoped') keyText: 'b, s' if: Nautilus useOldStyleKeys not; action: [ target restrictedBrowsePackage ]; order: 1000; help: 'Open a browser on a restricted view'; withSeparatorAfter. (aBuilder item: #'Rename...') keyText: 'r, p' if: Nautilus useOldStyleKeys not; keyText: 'r' if: Nautilus useOldStyleKeys; action: [target renamePackage]; order: 1100; help: 'Rename a package'; enabledBlock: [ target selectedPackages size < 2 ]. (aBuilder item: #'Remove...') keyText: 'x, p' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [target removePackages ]; order: 1200; help: 'Remove a package'; icon: (Smalltalk ui icons iconNamed: #removeIcon). (aBuilder item: #'Run tests...') keyText: 'j, p' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [target runPackagesTestsNotifying: true ]; enabled: (package classes anySatisfy: [:e | e inheritsFrom: TestCase ]); order: 1250; help: 'Run tests'; withSeparatorAfter. (aBuilder item: #'Promote as package') action: [ target promoteSelectedPackageTagAsPackage ]; enabled: package isPackageTag; order: 1260; help: 'Promote this package tag as one package'. (aBuilder item: #'Demote to package with tag') action: [ target demoteSelectedPackageAsPackageWithTag ]; enabled: (package isPackageTag not and: [ package name includes: $- ]); order: 1261; help: 'Downgrade this package as one package with a tag'; withSeparatorAfter. (aBuilder item: #'File Out') action: [target fileOutPackage]; order: 1300; help: 'File out a package'; withSeparatorAfter. target selectedPackages size > 1 ifTrue: [ (aBuilder item: #'Add as Groups & Browse') keyText: 'n, g' if: Nautilus useOldStyleKeys not; action: [ target addPackagesAsGroupsAndBrowse ]; order: 1400; help: 'Create a group based on the current package and browse it'. (aBuilder item: #'Add as Groups') keyText: 'n, G' if: Nautilus useOldStyleKeys not; action: [ target addPackagesAsGroups ]; order: 1600; help: 'Create a group based on the current package'. (aBuilder item: #'Add as Group') action: [target addPackageAsGroup]; order: 1700; help: 'Create a group based on the current package'. ] ifFalse: [ (aBuilder item: #'Add as Group & Browse') keyText: 'n, g' if: Nautilus useOldStyleKeys not; keyText: 'G' if: Nautilus useOldStyleKeys; action: [ target addPackageAsGroupAndBrowse ]; order: 1500; help: 'Create a group based on the current package and browse it'. (aBuilder item: #'Add as Group') keyText: 'n, G' if: Nautilus useOldStyleKeys not; action: [target addPackageAsGroup]; order: 1700; help: 'Create a group based on the current package' ]. (aBuilder item: #'Add Matching Packages as Groups and Browse') keyText: 'n, m' if: Nautilus useOldStyleKeys not; keyText: 'M' if: Nautilus useOldStyleKeys; action: [ target addMatchingPackagesInGroupsAndBrowse ]; order: 1800. (aBuilder item: #'Add in Group...') keyText: 'n, e, p' if: Nautilus useOldStyleKeys not; action: [target addPackagesInGroup]; order: 1900; help: 'Add current package in a group'; withSeparatorAfter.! ! !AbstractNautilusUI methodsFor: 'menu-packages' stamp: 'EstebanLorenzano 2/21/2014 12:42'! demoteSelectedPackageAsPackageWithTag self subclassResponsibility! ! !AbstractNautilusUI methodsFor: 'menu-packages' stamp: 'EstebanLorenzano 2/19/2014 16:32'! promoteSelectedPackageTagAsPackage self subclassResponsibility! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'EstebanLorenzano 2/21/2014 12:56' prior: 32012463! basicRegisterPackage: aPackage "A new package is now available and declared in the receiver. Note that it is a low level implementation method since it does not deal with package contained information and does not update the related mapping tables." packages at: aPackage name asSymbol put: aPackage. "register mc package" MCWorkingCopy forPackage: (MCPackage named: aPackage name). ^ aPackage! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'EstebanLorenzano 2/22/2014 11:30' prior: 70011887! basicUnregisterPackage: aPackage "Unregister the specified package from the list of registered packages. Raise the announcement RPackageUnregistered. This is a low level action. It does not unregister the back pointer from classes to packages or any other information managed by the organizer" packages removeKey: aPackage name asSymbol ifAbsent: [ self reportExtraRemovalOf: aPackage ]. "unregister also mc package" aPackage correspondingMcPackage ifNotNil: [ :mcPackage | mcPackage workingCopy unregister ].! ! !RPackageOrganizer methodsFor: 'public registration' stamp: 'EstebanLorenzano 2/21/2014 10:44' prior: 82055587! registerPackage: aPackage "A new package is now available and declared in the receiver. " self validateCanBeAddedPackage: aPackage. self basicRegisterPackage: aPackage. aPackage extendedClasses do: [ :extendedClass | self registerExtendingPackage: aPackage forClass: extendedClass]. aPackage definedClasses do: [ :definedClass | self registerPackage: aPackage forClass: definedClass]. self announcer announce: (RPackageCreated to: aPackage). ^ aPackage! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'EstebanLorenzano 2/22/2014 11:28' prior: 32015969! unregisterExtendingPackage: aPackage forClass: aClass | extendingPackageForClass | extendingPackageForClass := classExtendingPackagesMapping at: aClass theNonMetaClass name ifAbsent: [ nil ]. extendingPackageForClass ifNotNil: [ extendingPackageForClass remove: aPackage ifAbsent: [] "not happy with this one" ]! ! !RPackageOrganizer methodsFor: 'public registration' stamp: 'EstebanLorenzano 2/22/2014 11:29' prior: 32007372! unregisterPackage: aPackage "Unregister the specified package from the list of registered packages. Raise the announcement RPackageUnregistered." self basicUnregisterPackage: aPackage. aPackage extendedClasses do: [ :extendedClass | self unregisterExtendingPackage: aPackage forClass: extendedClass]. aPackage definedClasses do: [ :definedClass | self unregisterPackage: aPackage forClass: definedClass]. self announcer announce: (RPackageUnregistered to: aPackage). ^ aPackage! ! !RPackageOrganizer methodsFor: 'private registration' stamp: 'EstebanLorenzano 2/22/2014 11:29' prior: 32016643! unregisterPackage: aPackage forClass: aClass "unregister the back pointer mapping from classes to packages." ^classPackageMapping removeKey: aClass theNonMetaClass name ifAbsent: [ self reportExtraRemovalOf: aClass ]! ! !RPackageTest methodsFor: 'running' stamp: 'EstebanLorenzano 2/22/2014 11:22' prior: 80803860! tearDown super tearDown. #(TestClass TestClassOther) do: [ :each | each asClassIfPresent: #removeFromSystem ]! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/21/2014 11:35'! testDemoteToRPackageNamed | package1 package2 class | package1 := (RPackage named: #'Test1-TAG1') register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: 'accessing'. package1 demoteToRPackageNamed: 'Test1'. self deny: (RPackage organizer includesPackage: package1). package2 := RPackage organizer packageNamed: 'Test1'. self assert: package2 notNil. self assert: (package2 classes includes: class). self assert: ((package2 classTagNamed: 'TAG1') classes includes: class).! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/21/2014 11:36'! testDemoteToRPackageNamedExistingPackage | package1 package2 packageExisting class | package1 := (RPackage named: #'Test1-TAG1') register. packageExisting := (RPackage named: #'Test1') register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: 'accessing'. package1 demoteToRPackageNamed: 'Test1'. self deny: (RPackage organizer includesPackage: package1). package2 := RPackage organizer packageNamed: 'Test1'. self assert: package2 notNil. self assert: package2 equals: packageExisting. self assert: (package2 classes includes: class). self assert: ((package2 classTagNamed: 'TAG1') classes includes: class).! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/21/2014 11:36'! testDemoteToRPackageNamedMultilevelPackage1 | package1 package2 class | package1 := (RPackage named: #'Test1-TAG1-X1') register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1-X1'. class compile: 'foo ^42' classified: 'accessing'. package1 demoteToRPackageNamed: 'Test1'. self deny: (RPackage organizer includesPackage: package1). package2 := RPackage organizer packageNamed: 'Test1'. self assert: package2 notNil. self assert: (package2 classes includes: class). self assert: ((package2 classTagNamed: 'TAG1-X1') classes includes: class).! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/21/2014 11:35'! testDemoteToRPackageNamedMultilevelPackage2 | package1 package2 class | package1 := (RPackage named: #'Test1-TAG1-X1') register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1-X1'. class compile: 'foo ^42' classified: 'accessing'. package1 demoteToRPackageNamed: 'Test1-TAG1'. self deny: (RPackage organizer includesPackage: package1). package2 := RPackage organizer packageNamed: 'Test1-TAG1'. self assert: package2 notNil. self assert: (package2 classes includes: class). self assert: ((package2 classTagNamed: 'X1') classes includes: class).! ! !RPackageTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/25/2014 13:49'! testDemoteToRPackageNamedWithExtension | packageOriginal packageDemoted class classOther | packageOriginal := (RPackage named: #'Test1-TAG1') register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: 'accessing'. classOther := self createNewClassNamed: 'TestClassOther' inCategory: 'XXXX'. classOther compile: 'bar ^42' classified: #'*Test1-TAG1'. packageOriginal demoteToRPackageNamed: 'Test1'. self deny: (RPackage organizer includesPackage: packageOriginal). packageDemoted := RPackage organizer packageNamed: 'Test1'. self assert: packageDemoted notNil. self assert: (packageDemoted classes includes: class). self assert: ((packageDemoted classTagNamed: 'TAG1') classes includes: class). self assert: (packageDemoted extensionMethods includes: classOther>>#bar). self assert: ((classOther>>#bar) protocol) equals: '*Test1-TAG1'. self assert: (packageDemoted classes includesAll: {class. classOther}). ! ! !RPackageTagTest methodsFor: 'running' stamp: 'EstebanLorenzano 2/22/2014 11:05' prior: 80802232! tearDown super tearDown. #(TestClass TestClassOther) do: [ :each | each asClassIfPresent: #removeFromSystem ]! ! !RPackageTagTest methodsFor: 'tests' stamp: 'GuillermoPolito 2/14/2014 13:09'! testAsRPackage | package1 tag convertedTag class | package1 := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: 'accessing'. tag := (package1 classTagNamed: #TAG1). convertedTag := tag asRPackage. self assert: (convertedTag includesClass: class). self assert: (convertedTag includesSelector: 'foo' ofClass: class).! ! !RPackageTagTest methodsFor: 'tests' stamp: 'GuillermoPolito 2/14/2014 14:17'! testAsRPackageWithExtensionMethods | package1 convertedTag class | package1 := (RPackage named: #Test1) register. package1 addClassTag: #TAG1. (RPackage named: #Test2) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test2'. class compile: 'foo ^42' classified: '*Test1-TAG1'. convertedTag := (package1 classTagNamed: #TAG1) asRPackage. self assert: (convertedTag definedClasses isEmpty). self assert: (convertedTag includesExtensionSelector: 'foo' ofClass: class).! ! !RPackageTagTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/22/2014 12:04'! testPromoteAsRPackage | package1 package2 class tag1 | package1 := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: 'accessing'. tag1 := package1 classTagNamed: 'TAG1'. tag1 promoteAsRPackage. package2:= RPackage organizer packageNamed: 'Test1-TAG1'. self assert: package2 notNil. self assert: (package2 classes includes: class). self deny: (package1 classes includes: class).! ! !RPackageTagTest methodsFor: 'tests' stamp: 'EstebanLorenzano 2/25/2014 13:49'! testPromoteAsRPackageWithExtension | packageOriginal packagePromoted class classOther tag | packageOriginal := (RPackage named: #Test1) register. class := self createNewClassNamed: 'TestClass' inCategory: 'Test1-TAG1'. class compile: 'foo ^42' classified: #'accessing'. classOther := self createNewClassNamed: 'TestClassOther' inCategory: 'XXXX'. classOther compile: 'bar ^42' classified: #'*Test1-TAG1'. tag := packageOriginal classTagNamed: 'TAG1'. tag promoteAsRPackage. packagePromoted:= RPackage organizer packageNamed: 'Test1-TAG1'. self assert: packagePromoted notNil. self assert: (packagePromoted classes includes: class). self assert: (packagePromoted extensionMethods includes: classOther>>#bar). self assert: (classOther>>#bar) protocol equals: '*Test1-TAG1'. self deny: (packageOriginal classes includes: class). self deny: (packageOriginal extensionMethods includes: classOther>>#bar) ! ! "Monticello"! "Nautilus"! "RPackage-Core"! "RPackage-SystemIntegration"! "RPackage-Tests"! "Versionner-Tests-Core-Model"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-EstebanLorenzano.950.mcz') load. ScriptLoader new update30781. ! ----End fileIn----! ----QUIT----2014-02-25T14:07:45.039617+01:00 Pharo.image priorSource: 32340825! ----STARTUP----2014-02-25T14:07:45.266423+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-25T14:07:49.740419+01:00 Pharo.image priorSource: 32377478! ----STARTUP----2014-02-25T14:14:26.893786+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-25T14:14:27.155784+01:00 Pharo-30781.image priorSource: 32377675! ----STARTUP----2014-02-25T16:42:34.111136+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 2/25/2014 16:36' prior: 82672775! commentForCurrentUpdate ^ '12974 Rename ProfStef to PharoTutorial https://pharo.fogbugz.com/f/cases/12974 12987 Cancel Add iVar Refactoring in Nautlilus gives MNU https://pharo.fogbugz.com/f/cases/12987 12988 Wrong Searching all source code... progressbar size https://pharo.fogbugz.com/f/cases/12988 12981 Some EyeInspector extensions https://pharo.fogbugz.com/f/cases/12981 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 2/25/2014 16:37'! script435 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-MarcusDenker.36.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-MarcusDenker.86.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-EstebanLorenzano.918.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-MarcusDenker.268.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-StephaneDucasse.115.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-EstebanLorenzano.218.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.159.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.135.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-MarcusDenker.190.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.8.mcz Versionner-Core-Commands-MarcusDenker.44.mcz Versionner-Core-DependenciesModel-MarcusDenker.72.mcz Versionner-Core-Model-MarcusDenker.38.mcz Versionner-Spec-Browser-MarcusDenker.121.mcz Versionner-Tests-Core-Commands-MarcusDenker.11.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.32.mcz Versionner-Tests-Core-Model-EstebanLorenzano.20.mcz Versionner-Tests-Resources-MarcusDenker.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 2/25/2014 16:37'! update30782 "self new update30782" self withUpdateLog: '12974 Rename ProfStef to PharoTutorial https://pharo.fogbugz.com/f/cases/12974 12987 Cancel Add iVar Refactoring in Nautlilus gives MNU https://pharo.fogbugz.com/f/cases/12987 12988 Wrong Searching all source code... progressbar size https://pharo.fogbugz.com/f/cases/12988 12981 Some EyeInspector extensions https://pharo.fogbugz.com/f/cases/12981 '. self loadTogether: self script435 merge: false. self flushCaches. ! ! "ScriptLoader30"! !PharoTutorialHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 0! HelpSystem book documenting PharoTutorial! !PharoTutorialAPIHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 0! I'm a PharoTutorial which builds a HelpSystem book by collecting comment from classes and method.! !PharoTutorialsHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 0! I'm a HelpSystem book which list all Pharo tutorials! !PharoTutorialHelpTutorialBuilder commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 0! I build HelpSystem topics to browse PharoTutorial tutorials! !Trait method! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ self explicitRequirement! ! !Trait method! testNotEmpty self assert: self testedTutorial tutorial notEmpty.! ! !Trait method! testSizeReturnsNumberOfSelectors self assert: (self testedTutorial tutorial size) equals: self testedTutorial size.! ! !Trait method! testEachSelectorReturnsALesson | answer | self testedTutorial tutorial do: [:aSelector| answer := (self testedTutorial perform: aSelector). self assert: (answer isKindOf: Lesson). ]! ! !Trait method! testLessonAtReturnsCorrespondingLesson | answer | 1 to: (self testedTutorial tutorial size) do: [:index| answer := self testedTutorial lessonAt: index. self assert: (answer isKindOf: Lesson) ] ! ! !Trait method! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self tutorial respondsTo: aSelector) ]! ! !PharoSyntaxTutorialTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 0! SUnit tests for PharoSyntaxTutorial! !PharoTutorialHelpTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 0! SUnit tests for PharoTutorialHelp! !PharoTutorialHelpTutorialBuilderTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 0! SUnit tests for PharoTutorialHelpTutorialBuilder! !PharoTutorialTestGo commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !PharoTutorialTestGoOnMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !PharoTutorialTestNavigation commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 0! SUnit tests for tutorial navigation! !EyeCharacterInspector commentStamp: 'SvenVanCaekenberghe 2/24/2014 14:44' prior: 0! I am EyeCharacterInspector. I am a EyeInspector. I offer a specialized inspector to look at Character instances. I show the Unicode code point in standard notation, like U+0041 for $A. ! !AbstractTutorial commentStamp: 'CamilloBruni 2/22/2014 19:03' prior: 73584869! Parent class of all Pharo tutorials. To create your own tutorial: - subclass AbstractTutorial - implement a few methods which returns a Lesson instance - implement tutorial which returns a Collection of selectors to the methods you've created. For example, see MockTutorial (minimalist) and PharoySntaxTutorial (default PharoTutorial one). See the PharoTutorial class comment to execute your own tutorial.! !HowToMakeYourOwnTutorial commentStamp: 'CamilloBruni 2/22/2014 18:44' prior: 73587166! I'm a Pharo tutorial which teach to create a Pharo tutorial. Open me with PharoTutorial goOn: HowToMakeYourOwnTutorial.! !PharoSyntaxTutorial commentStamp: 'CamilloBruni 2/22/2014 19:04' prior: 0! The default Pharo tutorial to learn the Pharo syntax! !PharoTutorial commentStamp: 'CamilloBruni 2/22/2014 19:02' prior: 0! A PharoTutorial is the Pharo teacher. To start the tutorial, evaluate: PharoTutorial go. To go to the next lesson evaluate: PharoTutorial next. To execute your own tutorial: PharoTutorial goOn: MyOwnTutorial To see a table of contents with all defined tutorials: PharoTutorial contents! !ProfStef commentStamp: 'CamilloBruni 2/22/2014 19:01' prior: 73901336! I am here for backwards compatibility. PharoTutorial was called ProfStef before.! !PharoTutorialHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 82722278! HelpSystem book documenting PharoTutorial! !PharoTutorialAPIHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 82722398! I'm a PharoTutorial which builds a HelpSystem book by collecting comment from classes and method.! !PharoTutorialAPIHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:14'! bookName ^ 'Reference'! ! !PharoTutorialAPIHelp class methodsFor: 'defaults' stamp: 'LaurentLaffont 9/19/2010 15:14'! builder ^ PackageAPIHelpBuilder! ! !PharoTutorialAPIHelp class methodsFor: 'accessing' stamp: 'CamilloBruni 2/22/2014 19:17'! helpPackages ^ #('ProfStef-Core')! ! !PharoTutorialHelp class methodsFor: 'accessing' stamp: 'CamilloBruni 2/22/2014 18:59'! bookName ^ 'Pharo Tutorial'! ! !PharoTutorialHelp class methodsFor: 'testing' stamp: 'AlainPantec 2/23/2012 08:16'! canHaveSyntaxHighlighting ^ true ! ! !PharoTutorialHelp class methodsFor: 'pages' stamp: 'LaurentLaffont 9/19/2010 15:13'! createATutorial ^ HelpTopic title: 'Create a tutorial' contents: 'See AbstractTutorial comment: ', AbstractTutorial comment.! ! !PharoTutorialHelp class methodsFor: 'pages' stamp: 'CamilloBruni 2/22/2014 18:59'! introduction ^ HelpTopic title: 'Introduction' contents: 'PharoTutorial is a framework to create interactive tutorials'.! ! !PharoTutorialHelp class methodsFor: 'pages' stamp: 'CamilloBruni 2/22/2014 18:59'! listOfTutorials |contents| contents := String streamContents: [:aStream| AbstractTutorial tutorials do: [:aTutorial| aStream nextPutAll: aTutorial title; cr; tab; nextPutAll: 'PharoTutorial goOn:'; nextPutAll: aTutorial name; cr;cr. ] ]. ^ HelpTopic title: 'List of tutorials' contents: contents.! ! !PharoTutorialHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:13'! pages ^ #(introduction listOfTutorials createATutorial)! ! !PharoTutorialsHelp commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 82722572! I'm a HelpSystem book which list all Pharo tutorials! !PharoTutorialsHelp class methodsFor: 'accessing' stamp: 'LaurentLaffont 9/19/2010 15:16'! bookName ^ 'Browse tutorials'! ! !PharoTutorialsHelp class methodsFor: 'defaults' stamp: 'CamilloBruni 2/22/2014 18:59'! builder ^ PharoTutorialHelpTutorialBuilder! ! !PharoTutorialsHelp class methodsFor: 'menu' stamp: 'CamilloBruni 2/22/2014 19:00'! menuCommandOn: aBuilder (aBuilder item: #'Pharo Tutorials') parent: #Help; action:[ HelpBrowser openOn: self ]; help: 'Browse and create Pharo tutorials'.! ! !TutorialPlayerTestTutorialAccessor methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:48' prior: 73452515! testDefaultsToSmalltalkSyntaxTutorial | player | player := TutorialPlayer new. self assert: (player tutorial isKindOf: PharoSyntaxTutorial).! ! !Character class methodsFor: '*Spec-Inspector' stamp: 'SvenVanCaekenberghe 2/24/2014 14:35'! inspectorClass ^ EyeCharacterInspector! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 19:10' prior: 72787044! testTitleHumanizeClassName self assert: 'How To Make Your Own Tutorial' equals: HowToMakeYourOwnTutorial title. self assert: 'Pharo Syntax Tutorial' equals: PharoSyntaxTutorial title.! ! !AbstractTutorialTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:48' prior: 72787665! testTutorialsReturnsAllButMockTutorial | tutorials | tutorials := AbstractTutorial tutorials. self assert: (tutorials includes: PharoSyntaxTutorial). self assert: (tutorials includes: HowToMakeYourOwnTutorial). self deny: (tutorials includes: MockTutorial).! ! !NautilusRefactoring methodsFor: 'private-inst var' stamp: 'TorstenBergmann 2/25/2014 10:40' prior: 28246555! privateAddInstVarFrom: aClass | name | name := (self request: 'Enter the new variable name:' initialAnswer: 'inst'). name ifNil: [ ^nil ]. ^ RBAddInstanceVariableRefactoring model: environment variable: name class: aClass theNonMetaClass! ! !EyeDateAndTimeInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 2/25/2014 09:05' prior: 79417240! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'year' value: [ self object year ]). elements add: (DynamicEyeElement host: self object label: 'month of year' value: [ self object monthIndex ]). elements add: (DynamicEyeElement host: self object label: 'day of month' value: [ self object dayOfMonth ]). elements add: (DynamicEyeElement host: self object label: 'full hours' value: [ self object hours ]). elements add: (DynamicEyeElement host: self object label: 'full minutes' value: [ self object minutes ]). elements add: (DynamicEyeElement host: self object label: 'full seconds' value: [ self object seconds ]). elements add: (DynamicEyeElement host: self object label: 'utc' value: [ self object asUTC ])! ! !PharoTutorialHelpTutorialBuilder commentStamp: 'CamilloBruni 2/22/2014 18:59' prior: 82722715! I build HelpSystem topics to browse PharoTutorial tutorials! !PharoTutorialHelpTutorialBuilder class methodsFor: 'instance creation' stamp: 'LaurentLaffont 4/26/2011 13:00'! new "We prohibid new" ^ (self class lookupSelector: #buildHelpTopicFrom:) == thisContext sender method ifFalse:[self error: 'Please use buildHelpTopicFrom: instead'] ifTrue: [super new]! ! !PharoTutorialHelpTutorialBuilder methodsFor: 'building' stamp: 'LaurentLaffont 9/19/2010 15:25'! build topicToBuild := HelpTopic named: rootToBuildFrom bookName. AbstractTutorial tutorials do: [:aTutorial| topicToBuild addSubtopic: (self buildTutorialTopicFor: aTutorial) ]. ^ topicToBuild.! ! !PharoTutorialHelpTutorialBuilder methodsFor: 'building' stamp: 'LaurentLaffont 9/19/2010 15:30'! buildTutorialTopicFor: aTutorial |tutorialTopic| tutorialTopic := HelpTopic named: aTutorial title. aTutorial new lessons do:[:aLesson| tutorialTopic addSubtopic: (HelpTopic title: aLesson title contents: aLesson lesson) ]. ^ tutorialTopic ! ! !PharoSyntaxTutorialTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 82723763! SUnit tests for PharoSyntaxTutorial! !PharoSyntaxTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 12/12/2010 22:20'! testDivideTwoByZeroSignalsZeroDivide [self testedTutorial divideTwoByZero. self fail] on: ZeroDivide do: []! ! !PharoSyntaxTutorialTest methodsFor: 'tests' stamp: 'LaurentLaffont 2/1/2010 22:07' prior: 82723553! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self testedTutorial respondsTo: aSelector) ]! ! !PharoSyntaxTutorialTest methodsFor: 'requirements' stamp: 'CamilloBruni 2/22/2014 18:48' prior: 82722791! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ PharoSyntaxTutorial new! ! !PharoTutorialHelpTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 82723878! SUnit tests for PharoTutorialHelp! !PharoTutorialHelpTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:58'! testBookName self assert: PharoTutorialHelp bookName isString! ! !PharoTutorialHelpTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:58'! testCreateATutorial | helpTopic | helpTopic := PharoTutorialHelp createATutorial. self assert: helpTopic notNil. self assert: helpTopic class == HelpTopic. self assert: helpTopic title = 'Create a tutorial'! ! !PharoTutorialHelpTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:58'! testIntroduction | helpTopic | helpTopic := PharoTutorialHelp introduction. self assert: helpTopic notNil. self assert: helpTopic class == HelpTopic. self assert: helpTopic title = 'Introduction'! ! !PharoTutorialHelpTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:58'! testListOfTutorials | helpTopic | helpTopic := PharoTutorialHelp listOfTutorials. self assert: (helpTopic notNil). self assert: (helpTopic title = 'List of tutorials' )! ! !PharoTutorialHelpTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:58'! testPages self assert: PharoTutorialHelp pages isCollection. self assert: (PharoTutorialHelp pages allSatisfy: #isSymbol).! ! !PharoTutorialHelpTutorialBuilderTest commentStamp: 'CamilloBruni 2/22/2014 18:58' prior: 82724006! SUnit tests for PharoTutorialHelpTutorialBuilder! !PharoTutorialHelpTutorialBuilderTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 19:44'! testBuild | helpTopic tutorial | tutorial := PharoTutorialsHelp. helpTopic := PharoTutorialHelpTutorialBuilder buildHelpTopicFrom: tutorial. self assert: helpTopic notNil! ! !PharoTutorialHelpTutorialBuilderTest methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:59'! testInstantiation self should: [ PharoTutorialHelpTutorialBuilder new ] raise: Error! ! !PharoTutorialTestGo commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82724135! SUnit tests for tutorial navigation! !PharoTutorialTestGo methodsFor: 'running' stamp: 'CamilloBruni 2/22/2014 18:42'! tearDown PharoTutorial default close! ! !PharoTutorialTestGo methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testGoOnMockTutorial | displayedText expected | PharoTutorial goOn: MockTutorial. displayedText := PharoTutorial default lessonView text. expected := MockTutorial new firstLesson lesson. self assert: displayedText equals: expected.! ! !PharoTutorialTestGo methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:48'! testGoOpenSmalltalkSyntaxTutorial | displayedText expected | PharoTutorial go. displayedText := PharoTutorial default lessonView text. expected := PharoSyntaxTutorial new welcome lesson. self assert: displayedText equals: expected.! ! !PharoTutorialTestGo methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:48'! testGoTwiceShowLessonViewIfNotVisible | firstLessonView | PharoTutorial go. firstLessonView := PharoTutorial default lessonView. firstLessonView close. PharoTutorial goOn: PharoSyntaxTutorial. self assert: (World systemWindows includes: firstLessonView window).! ! !PharoTutorialTestGo methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:48'! testGoTwiceUseSameLessonView | firstLessonView | PharoTutorial go. firstLessonView := PharoTutorial default lessonView. PharoTutorial goOn: PharoSyntaxTutorial. self assert: (firstLessonView == PharoTutorial default lessonView).! ! !PharoTutorialTestGoOnMockTutorial commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82724265! SUnit tests for tutorial navigation! !PharoTutorialTestGoOnMockTutorial methodsFor: 'running' stamp: 'CamilloBruni 2/22/2014 18:42'! setUp PharoTutorial tutorial: MockTutorial lesson: #firstLesson ! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'running' stamp: 'CamilloBruni 2/22/2014 18:42'! tearDown PharoTutorial default close! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testFirstLessonShouldBeDisplayed. self assert: 'First lesson' equals: PharoTutorial default lessonView text! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testLastShouldGoToThirdLesson PharoTutorial last. self assert: 'Third lesson' equals: PharoTutorial default lessonView text! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testLastThenFirstShouldGoToFirstLesson PharoTutorial last; first. self assert: 'First lesson' equals: PharoTutorial default lessonView text! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testLastThenPreviousShouldGoToSecondLesson PharoTutorial last; previous. self assert: 'Second lesson' equals: PharoTutorial default lessonView text! ! !PharoTutorialTestGoOnMockTutorial methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 18:42'! testNextShouldGoToSecondLesson PharoTutorial next. self assert: 'Second lesson' equals: PharoTutorial default lessonView text! ! !PharoTutorialTestNavigation commentStamp: 'TorstenBergmann 2/12/2014 22:52' prior: 82724389! SUnit tests for tutorial navigation! !PharoTutorialTestNavigation methodsFor: 'running' stamp: 'CamilloBruni 2/22/2014 18:42'! setUp prof := PharoTutorial new. prof player: ( TutorialPlayer new tutorial: MockTutorial new; yourself). mockView := MockLessonView new. prof lessonView: mockView. prof open.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:13'! testNextOpenSecondLesson prof next. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:12'! testSequenceNextNextOpenThirdLesson prof next; next. self assert: mockView title equals: 'third (3/3)'. self assert: mockView lesson lesson equals: 'Third lesson'.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:11'! testSequenceNextNextPreviousOpenSecondLesson prof next; next; previous. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 1/21/2010 16:27'! testShowFirstLessonOnGo | lesson | lesson := mockView lesson. self assert: lesson title equals: 'first'. self assert: lesson lesson equals: 'First lesson'.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:12'! testShowingLessonByIndex prof tutorial: MockTutorial lessonAt: 2. self assert: mockView title equals: 'second (2/3)'. self assert: mockView lesson lesson equals: 'Second lesson'.! ! !PharoTutorialTestNavigation methodsFor: 'tests' stamp: 'LaurentLaffont 2/15/2011 22:12'! testShowingLessonBySelector prof tutorial: MockTutorial lesson: #firstLesson. self assert: mockView title equals: 'first (1/3)'. self assert: mockView lesson lesson equals: 'First lesson'.! ! !EyeIntegerInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 2/25/2014 09:17' prior: 79419235! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex' description: [ self object printStringRadix: 16 ] value: [ self object ]). elements add: (DynamicEyeElement host: self object label: 'octal' description: [ self object printStringRadix: 8 ] value: [ self object ]). elements add: (DynamicEyeElement host: self object label: 'binary' description: [ self object printStringRadix: 2 ] value: [ self object ]). (self object between: 0 and: 16r10FFFF) ifTrue: [ elements add: (DynamicEyeElement host: self object label: 'character' description: [ :value | value printString ] value: [ self object asCharacter ]) ]! ! !TutorialPlayer methodsFor: 'accessing' stamp: 'CamilloBruni 2/22/2014 18:48' prior: 73906823! tutorial ^ tutorial ifNil: [tutorial := PharoSyntaxTutorial new]! ! !EyeCharacterInspector commentStamp: 'SvenVanCaekenberghe 2/24/2014 14:44' prior: 82724511! I am EyeCharacterInspector. I am a EyeInspector. I offer a specialized inspector to look at Character instances. I show the Unicode code point in standard notation, like U+0041 for $A. ! !EyeCharacterInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 2/25/2014 09:01'! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'unicode' description: [ self objectAsUnicodeCodePoint ] value: [ self object codePoint ])! ! !EyeCharacterInspector methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 14:51'! objectAsUnicodeCodePoint ^ String streamContents: [ :stream | stream << 'U+'. self object codePoint printOn: stream base: 16 nDigits: 4 ]! ! !LessonTestInstanciation methodsFor: 'tests' stamp: 'CamilloBruni 2/22/2014 19:02' prior: 72788729! testTitleLessonCreation | firstLesson secondLesson | firstLesson := Lesson title: 'First lesson' lesson: 'Pharo rules!!'. secondLesson := Lesson title: 'Second lesson' lesson: 'PharoTutorial is cool'. self assert: firstLesson title equals: 'First lesson'. self assert: firstLesson lesson equals: 'Pharo rules!!'. self assert: secondLesson title equals: 'Second lesson'. self assert: secondLesson lesson equals: 'PharoTutorial is cool'.! ! !EyeByteArrayInspector methodsFor: 'list' stamp: 'SvenVanCaekenberghe 2/25/2014 09:03' prior: 79412634! addSpecialFields: elements elements add: (DynamicEyeElement host: self object label: 'hex bytes' description: [ self objectAsHexBytes ] value: [ self object ]). elements add: (DynamicEyeElement host: self object label: 'hex string' value: [ self objectAsHexString ]). elements add: (DynamicEyeElement host: self object label: 'latin-1 string' value: [ self objectAsLatin1String ]). elements add: (DynamicEyeElement host: self object label: 'utf-8 string' value: [ [ self objectAsUTF8String ] on: ZnInvalidUTF8 do: [ :exception | exception asString ] ]).! ! !SystemNavigation methodsFor: 'query' stamp: 'NicolaiHess 2/25/2014 12:55' prior: 51581634! allMethodsWithSourceString: aString matchCase: caseSensitive "Answer a SortedCollection of all the methods that contain, in source code, aString as a substring. Search the class comments also" | list addMethod addComment | list := Set new. addMethod := [ :mrClass :mrSel | list add: (self createMethodNamed: mrSel realParent: mrClass)]. addComment := [ :mrClass | list add: (RGCommentDefinition realClass: mrClass)]. 'Searching all source code...' displayProgressFrom: 0 to: (2*Smalltalk globals classAndTraitNames size) during: [:bar | | count | count := 0. self allBehaviorsDo: [:each | bar current: (count := count + 1). each selectorsDo: [:sel | ((each sourceCodeAt: sel) includesSubstring: aString caseSensitive: caseSensitive) ifTrue: [ addMethod value: each value: sel]]. (each organization classComment asString includesSubstring: aString caseSensitive: caseSensitive) ifTrue: [ addComment value: each] ]]. ^ list asSortedCollection! ! !AbstractTutorial commentStamp: 'CamilloBruni 2/22/2014 19:03' prior: 82724782! Parent class of all Pharo tutorials. To create your own tutorial: - subclass AbstractTutorial - implement a few methods which returns a Lesson instance - implement tutorial which returns a Collection of selectors to the methods you've created. For example, see MockTutorial (minimalist) and PharoySntaxTutorial (default PharoTutorial one). See the PharoTutorial class comment to execute your own tutorial.! !AbstractTutorial class methodsFor: 'tutorial metainfo' stamp: 'CamilloBruni 2/22/2014 19:08' prior: 73585841! tutorials ^ (self subclasses sort: [:a :b | a name < b name]) select: [:aTutorial | (aTutorial category = 'ProfStef-Tests') not ]. ! ! !AbstractTutorial methodsFor: 'printing' stamp: 'CamilloBruni 2/22/2014 18:44' prior: 73586615! printOn: aStream aStream nextPutAll: 'a Pharo Tutorial ('; nextPutAll: self class title; nextPutAll: ')'. ! ! !HowToMakeYourOwnTutorial commentStamp: 'CamilloBruni 2/22/2014 18:44' prior: 82725280! I'm a Pharo tutorial which teach to create a Pharo tutorial. Open me with PharoTutorial goOn: HowToMakeYourOwnTutorial.! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:45' prior: 73587378! createLessonFactoryMethods ^ Lesson title: 'Lesson factory methods' lesson: '"Next, create category ''lessons'' and add a method per lesson. Each method must return a Lesson object. Your can use Lesson class>>title:lesson: to create Lesson object." HowToDebug compile: ''useSelfHalt ^ Lesson title: ''''self halt'''' lesson: ''''"Put self halt. in the method you want to debug." PharoTutorial next.'''''' classified: ''lessons''. HowToDebug compile: ''examineStackTrace ^ Lesson title: ''''self halt'''' lesson: ''''"Look at PharoDebug.log." PharoTutorial next.'''''' classified: ''lessons''. HowToDebug compile: ''changeReturnValue ^ Lesson title: ''''Change return value'''' lesson: ''''"Easy in the debugger !!"'''''' classified: ''lessons''. PharoTutorial next.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:45' prior: 73588240! implementTutorial ^ Lesson title: 'Implement tutorial method' lesson: '"Finally implement the tutorial method to return an Array of your lesson factory methods:" HowToDebug compile: ''tutorial ^ #( #useSelfHalt #examineStackTrace #changeReturnValue )'' classified: ''tutorial''. PharoTutorial next.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:45' prior: 73588635! runYourTutorial ^ Lesson title: 'Run your tutorial' lesson: '"You can run your fresh new tutorial like this:" PharoTutorial goOn: HowToDebug.'.! ! !HowToMakeYourOwnTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:45' prior: 73588871! subclassAbstractTutorial ^ Lesson title: 'AbstractTutorial' lesson: '"Here are the steps to create your own Pharo tutorial. First, create a subclass of AbstractTutorial. For example:" AbstractTutorial subclass: #HowToDebug instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: ''PharoTutorial''. PharoTutorial next.'! ! !PharoSyntaxTutorial commentStamp: 'CamilloBruni 2/22/2014 19:04' prior: 82725478! The default Pharo tutorial to learn the Pharo syntax! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:51'! basicTypesArray ^ Lesson title: 'Basic types: Array' lesson: '"Literal arrays are created at parse time:" #(1 2 3). #( 1 2 3 #(4 5 6)) size. #(1 2 4) isEmpty. #(1 2 3) first. #(''hello'' ''World'') at: 2 put: ''Pharo''; yourself. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:48'! basicTypesCharacters ^ Lesson title: 'Basic types: Characters' lesson: '"A Character can be instantiated using $ operator:" $A. $A class. $B charCode. Character cr. Character space. "You can print all 256 characters of the ASCII extended set:" Character allByteCharacters. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:48'! basicTypesDynamicArray ^ Lesson title: 'Basic types: Dynamic Array' lesson: '"Dynamic Arrays are created at execution time:" { (2+3) . (6*6) }. { (2+3) . (6*6) . ''hello'', '' Stef''} size. { PharoTutorial } first next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:52'! basicTypesNumbers ^ Lesson title: 'Basic types: Numbers' lesson: '"You now know how to execute Pharo code. Now let''s talk about basic objects. 1, 2, 100, 2/3 ... are Numbers, and respond to many messages evaluating mathematical expressions. Evaluate these ones:" 2. 20 factorial. 1000 factorial / 999 factorial. (1/3). (1/3) + (4/5). (1/3) asFloat. 1 class. 1 class maxVal class. (1 class maxVal + 1) class. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! basicTypesString ^ Lesson title: 'Basic types: Strings' lesson: '"A String is a collection of characters. Use single quotes to create a String object. Print these expressions:" ''PharoTutorial''. ''PharoTutorial'' size. ''abc'' asUppercase. ''Hello World'' reverse. "You can access each character using at: message" ''PharoTutorial'' at: 1. "String concatenation uses the comma operator:" ''PharoTutorial'', '' is cool''. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! basicTypesSymbol ^ Lesson title: 'Basic types: Symbols' lesson: '"A Symbol is a String which is guaranteed to be globally unique. There is one and only one Symbol #PharoTutorial. There may be several ''PharoTutorial'' String objects. (Message == returns true if the two objects are the SAME)" ''PharoTutorial'' asSymbol. #PharoTutorial asString. (2 asString) == (2 asString). (2 asString) asSymbol == (2 asString) asSymbol. (Smalltalk at: #PharoTutorial) next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! blocks ^ Lesson title: 'Blocks' lesson: '"Cascade is cool !! Let''s talk about blocks. Blocks are anonymous methods that can be stored into variables and executed on demand. Blocks are delimited by square brackets: []" [Browser open]. "does not open a Browser because the block is not executed. Here is a block that adds 2 to its argument (its argument is named x):" [:x | x+2]. "We can execute a block by sending it value messages." [:x | x+2] value: 5. [Browser open] value. [:x | x+2] value: 10. [:x :y| x + y] value:3 value:5. [PharoTutorial next] value.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! blocksAssignation ^ Lesson title: 'Block assignation' lesson: '"Blocks can be assigned to a variable then executed later. Note that |b| is the declaration of a variable named ''b'' and that '':='' assigns a value to a variable. Select the three lines then Print It:" |b| b := [:x | x+2]. b value: 12. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! conditionals ^ Lesson title: 'Conditionals' lesson: '"Conditionals are just messages sent to Boolean objects" 1 < 2 ifTrue: [100] ifFalse: [42]. "Here the message is ifTrue:ifFalse Try this:" Transcript open. 3 > 10 ifTrue: [Transcript show: ''maybe there''''s a bug ....''] ifFalse: [Transcript show: ''No : 3 is less than 10'']. 3 = 3 ifTrue: [PharoTutorial next].'.! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:52'! debugger ^ Lesson title: 'Debugger' lesson: '"The Debugger may be the most famous tool of Smalltalk environments. It will open as soon as an unmanaged Exception occurs. The following code will open the debugger on the message stack, select PharoSyntaxTutorial>>divideTwoByZero". PharoSyntaxTutorial new divideTwoByZero. '! ! !PharoSyntaxTutorial methodsFor: 'interactive' stamp: 'CamilloBruni 2/22/2014 19:17'! divideTwoByZero 2/0. "Oups!! 2/0 raises a ZeroDivide exception. So the debugger opens to let you fix the code. - Remove the line of code above. - Right-click and select 'Accept' to compile the new version of the method - click the button 'Proceed' to continue execution. ". PharoTutorial next. ! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:52'! doingVSPrinting ^ Lesson title: 'Doing VS Printing: Doing' lesson: '"Cool !! (I like to say Cooool :) ). You''ve just executed a Pharo expression. More precisely, you sent the message ''next'' to PharoTutorial class (it''s me !!). Note you can run this tutorial again by evaluating: ''PharoTutorial go''. ''PharoTutorial previous'' returns to the previous lesson. You can also Do It using the keyboard shortcut ''ALT d'' (this varies according to your operating system/computer: it can be ''CMD d'' or ''CTRL d''). Try to evaluate these expressions:" Browser open. SmalltalkImage current aboutThisSystem. "Then go to the next lesson:" PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'initialize-release' stamp: 'LaurentLaffont 12/12/2010 17:18'! initialize super initialize. self prepareDebuggerExample.! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:49'! instanciation ^ Lesson title: 'Instanciation' lesson: '"Objects are instances of their class. Usually, we send the message #new to a class for creating an instance of this class. The message #allInstances sent to a class answers an Array with all instances of this class. For example, let''s look at how many instances of SimpleButtonMorph exist:" SimpleButtonMorph allInstances size. "Now create a new instance of it:" SimpleButtonMorph new label: ''A nice button''; openCenteredInWorld. "See the button centered on the world ? The list of all instances should contains one more instance:" SimpleButtonMorph allInstances size. "Let''s play with it:" SimpleButtonMorph allInstances last label: ''PharoTutorial is cooooool !!''; color: Color cyan. "Let''s delete it and ask the system to clean the memory:" SimpleButtonMorph allInstances last delete. Smalltalk garbageCollect. SimpleButtonMorph allInstances size. "Click on the button to go to next lesson:" SimpleButtonMorph new label: ''Go to next lesson''; target: [PharoTutorial next. SimpleButtonMorph allInstances last delete]; actionSelector: #value; openCenteredInWorld.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! iterators ^ Lesson title: 'Iterators' lesson: '"The message do: is sent to a collection of objects (Array, Set, OrderedCollection), evaluating the block for each element. Here we want to print all the numbers on the Transcript (a console)" #(11 38 3 -2 10) do: [:each | Transcript show: each printString; cr]. "Some other really nice iterators" #(11 38 3 -2 10) collect: [:each | each abs]. #(11 38 3 -2 10) collect: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each odd]. #(11 38 3 -2 10) select: [:each | each > 10]. #(11 38 3 -2 10) reject: [:each | each > 10]. #(11 38 3 -2 10) do: [:each | Transcript show: each printString] separatedBy: [Transcript show: ''.'']. PharoTutorial allInstances do: [:aPharoTutorial | aPharoTutorial next].'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! loops ^ Lesson title: 'Loops' lesson: '"Loops are high-level collection iterators, implemented as regular methods." "Basic loops: to:do: to:by:do" 1 to: 100 do: [:i | Transcript show: i asString; cr ]. 1 to: 100 by: 3 do: [:i | Transcript show: i asString; cr]. 100 to: 0 by: -2 do: [:i | Transcript show: i asString; cr]. 1 to: 1 do: [:i | PharoTutorial next].'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:53'! mathematicalPrecedence ^ Lesson title: 'Mathematical precedence' lesson: '"Traditional precedence rules from mathematics do not apply in Pharo." 2 * 10 + 2. "Here the message * is sent to 2, which answers 20, then 20 receive the message + Remember that all messages always follow a simple left-to-right precedence rule, * without exceptions *." 2 + 2 * 10. 2 + (2 * 10). 8 - 5 / 2. (8 - 5) / 2. 8 - (5 / 2). PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxBinary ^ Lesson title: 'Message syntax: Binary messages' lesson: '"Binary messages have the following form: anObject + anotherObject" 3 * 2. Date today + 3 weeks. false | false. true & true. true & false. 10 @ 100. 10 <= 12. ''ab'', ''cd''. Date today < Date yesterday. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxCascade ^ Lesson title: 'Message syntax: Cascade' lesson: '"; is the cascade operator. It''s useful to send message to the SAME receiver Open a Transcript (console):" Transcript open. "Then:" Transcript show: ''hello''. Transcript show: ''Pharo''. Transcript cr. "is equivalent to:" Transcript show: ''hello''; show: ''Pharo'' ; cr. "Try to go to the next lesson with a cascade of two ''next'' messages:" PharoTutorial'.! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxCascadeShouldNotBeHere ^ Lesson title: 'Lost ?' lesson: '"Hey, you should not be here !!!! Go back and use a cascade !!" PharoTutorial previous.'.! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxExecutionOrder ^ Lesson title: 'Message syntax: Execution order' lesson: '"Unary messages are executed first, then binary messages and finally keyword messages: Unary > Binary > Keywords" 2 + 3 squared. 2 raisedTo: 3 + 2. (0@0) class. 0@0 corner: 100@200. (0@0 corner: 100@200) class. "Between messages of similar precedence, expressions are executed from left to right" -3 abs negated reciprocal. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxExecutionOrderParentheses ^ Lesson title: 'Message syntax: Parentheses' lesson: '"Use parentheses to change order of evaluation" (2 + 3) squared. (2 raisedTo: 3) + 2. (0@0 extent: 100@200) bottomRight. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxKeyword ^ Lesson title: 'Message syntax: Keyword messages' lesson: '"Keyword Messages are messages with arguments. They have the following form: anObject akey: anotherObject akey2: anotherObject2" 4 between: 0 and: 10. "The message is between:and: sent to the Number 4" 1 max: 3. Color r:1 g:0 b:0. "The message is r:g:b: implemented on class Color. Note you can also write" Color r:1 g:1 b:0. PharoTutorial perform: #next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:50'! messageSyntaxUnary ^ Lesson title: 'Message syntax: Unary messages' lesson: '"Messages are sent to objects. There are three types of message: Unary, Binary and Keyword. Unary messages have the following form: anObject aMessage You''ve already sent unary messages. For example:" 1 class. false not. Time now. Date today. Float pi. "And of course: " PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 19:04'! pharoEnvironment ^ Lesson title: 'Pharo environment' lesson: '"Pharo is full of objects. There are windows, text, numbers, dates, colors, points and much more. You can interact with objects in a much more direct way than is possible with other programming languages. Every object understands the message ''explore''. As a result, you get an Explorer window that shows details about the object." Date today explore. "This shows that the date object consists of a point in time (start) and a duration (one day long)." PharoTutorial explore. "You see, PharoTutorial class has a lot of objects. Let''s take a look at my code:" PharoTutorial browse. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'interactive' stamp: 'CamilloBruni 2/22/2014 18:50'! prepareDebuggerExample self class compile: 'divideTwoByZero 2/0. "Oups!! 2/0 raises a ZeroDivide exception. So the debugger opens to let you fix the code. - Remove the line of code above. - Right-click and select ''Accept'' to compile the new version of the method - click the button ''Proceed'' to continue execution. ". PharoTutorial next. ' classified: 'interactive'.! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:51'! printing ^ Lesson title: 'Doing VS Printing: Printing' lesson: '"Now you''re a Do It master !! Let''s talk about printing. It''s a Do It which prints the result next to the expression you''ve selected. For example, select the text below, open the menu and click on ''print it (p)'':" 1 + 2. "You''ve seen the letter ''p'' between parentheses next to ''print it'' ? It indicates the ALT- shortcut to execute this command. Try ALT-p on the following expressions:" Date today. Time now. "The result is selected, so you can erase it using the backspace key. Try it !!" SmalltalkImage current datedVersion. PharoTutorial next.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 19:05'! reflection ^ Lesson title: 'Reflection' lesson: '"You can inspect and change the system at runtime. Take a look at method #ifFalse:ifTrue: source code of class True:" (True>>#ifFalse:ifTrue:) definition. "Or just its comment:" (True>>#ifFalse:ifTrue:) comment. "Here''s all the methods I implement:" PharoTutorial selectors. "Let''s create a new method to go to the next lesson:" PharoTutorial class compile:''goToNextLesson self next''. "Wow !! I can''t wait to use my new method !! " PharoTutorial goToNextLesson.'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:51'! reflectionContinued ^ Lesson title: 'Reflection continued' lesson: '"So cool, isn''t it ? Before going further, let''s remove this method:" PharoTutorial respondsTo: #goToNextLesson. PharoTutorial class removeSelector: #goToNextLesson. PharoTutorial respondsTo: #goToNextLesson. "Then move forward:" PharoTutorial default executeMethod: (PharoTutorial lookupSelector:#next).'! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:53'! theEnd ^ Lesson title: 'Tutorial done !!' lesson: '"This tutorial is done. Enjoy programming with Pharo. Don''t forget to read ''Pharo By Example'' found here: http://pharo-project.org/PharoByExample. You can run this tutorial again by evaluating: PharoTutorial go. Do you want to create your own interactive tutorial with PharoTutorial ? That''s very easy!!!! How ? There''s a PharoTutorial interactive tutorial for that :D Just evaluate the following code: PharoTutorial goOn: HowToMakeYourOwnTutorial See you soon !!" '! ! !PharoSyntaxTutorial methodsFor: 'tutorial' stamp: 'LaurentLaffont 2/6/2011 19:05'! tutorial ^ #( welcome doingVSPrinting printing basicTypesNumbers basicTypesCharacters basicTypesString basicTypesSymbol basicTypesArray basicTypesDynamicArray messageSyntaxUnary messageSyntaxBinary messageSyntaxKeyword messageSyntaxExecutionOrder messageSyntaxExecutionOrderParentheses mathematicalPrecedence messageSyntaxCascade messageSyntaxCascadeShouldNotBeHere blocks blocksAssignation conditionals loops iterators instanciation reflection reflectionContinued pharoEnvironment debugger theEnd )! ! !PharoSyntaxTutorial methodsFor: 'lessons' stamp: 'CamilloBruni 2/22/2014 18:51'! welcome ^ Lesson title: 'Welcome' lesson: '"Hello!! I''m Professor Stef. You must want me to help you learn Pharo. So let''s go to the first lesson. Select the text below, right-click and choose ''do it (d)''" PharoTutorial next.'! ! !PharoTutorial commentStamp: 'CamilloBruni 2/22/2014 19:02' prior: 82725602! A PharoTutorial is the Pharo teacher. To start the tutorial, evaluate: PharoTutorial go. To go to the next lesson evaluate: PharoTutorial next. To execute your own tutorial: PharoTutorial goOn: MyOwnTutorial To see a table of contents with all defined tutorials: PharoTutorial contents! !PharoTutorial class methodsFor: 'class initialization' stamp: 'CamilloBruni 2/22/2014 19:45'! default ^ Instance ifNil: [Instance := self new]! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:30'! first ^ self default first.! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'LaurentLaffont 9/18/2011 20:01'! go ^ self default go.! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'LaurentLaffont 9/18/2011 20:01'! goOn: aTutorialClass ^ self default goOn: aTutorialClass.! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:30'! last ^ self default last.! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:01'! next ^ self default next.! ! !PharoTutorial class methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:01'! previous ^ self default previous.! ! !PharoTutorial class methodsFor: 'class initialization' stamp: 'CamilloBruni 2/22/2014 19:45'! reset Instance := nil! ! !PharoTutorial class methodsFor: 'starting' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lesson: aSelector self default tutorial: aTutorialClass lesson: aSelector.! ! !PharoTutorial class methodsFor: 'starting' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lessonAt: lessonIndex self default tutorial: aTutorialClass lessonAt: lessonIndex.! ! !PharoTutorial methodsFor: 'gui' stamp: 'LaurentLaffont 1/21/2010 21:05'! close self lessonView close! ! !PharoTutorial methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:28'! first self player first. ^ self showCurrentLesson.! ! !PharoTutorial methodsFor: 'starting' stamp: 'CamilloBruni 2/22/2014 18:48'! go ^ self goOn: PharoSyntaxTutorial.! ! !PharoTutorial methodsFor: 'starting' stamp: 'tg 2/1/2010 16:02'! goOn: aTutorialClass self player tutorial: aTutorialClass new. ^ self open.! ! !PharoTutorial methodsFor: 'navigating' stamp: 'DannyChan 2/9/2010 19:28'! last self player last. ^ self showCurrentLesson.! ! !PharoTutorial methodsFor: 'accessing' stamp: 'DannyChan 2/2/2010 19:39'! lessonView ^ lessonView ifNil: [lessonView := LessonView new]! ! !PharoTutorial methodsFor: 'accessing' stamp: 'DannyChan 2/2/2010 19:16'! lessonView: aLessonView lessonView := aLessonView.! ! !PharoTutorial methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:02'! next self player next. ^ self showCurrentLesson.! ! !PharoTutorial methodsFor: 'gui' stamp: 'tg 2/1/2010 16:02'! open self player first. ^ self showCurrentLesson.! ! !PharoTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:38'! player ^ player ifNil: [player := TutorialPlayer new]! ! !PharoTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:39'! player: aTutorialPlayer player := aTutorialPlayer.! ! !PharoTutorial methodsFor: 'navigating' stamp: 'tg 2/1/2010 16:02'! previous self player previous. ^ self showCurrentLesson.! ! !PharoTutorial methodsFor: 'gui' stamp: 'CamilloBruni 2/22/2014 19:44'! showCurrentLesson | progressInfo lesson | lesson := self player currentLesson. progressInfo := '(', self tutorialPositionString, '/', self tutorialSizeString, ')'. ^ self lessonView showLesson: lesson withTitle: lesson title, ' ', progressInfo.! ! !PharoTutorial methodsFor: 'navigating' stamp: 'DannyChan 2/1/2010 21:23'! tutorial: aTutorialClass lesson: aSelector | tutorial | tutorial := aTutorialClass new. self player tutorial: tutorial. self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).! ! !PharoTutorial methodsFor: 'navigating' stamp: 'DannyChan 2/1/2010 19:23'! tutorial: aTutorialClass lessonAt: lessonIndex self player tutorial: aTutorialClass new. self player tutorialPosition: lessonIndex. self showCurrentLesson.! ! !PharoTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:37'! tutorialPositionString ^ player tutorialPosition asString.! ! !PharoTutorial methodsFor: 'accessing' stamp: 'LaurentLaffont 1/21/2010 20:38'! tutorialSizeString ^ self player size asString! ! !ProfStef commentStamp: 'CamilloBruni 2/22/2014 19:01' prior: 82725964! I am here for backwards compatibility. PharoTutorial was called ProfStef before.! ProfStefTutorialsHelp class removeSelector: #menuCommandOn:! ProfStefTutorialsHelp class removeSelector: #builder! ProfStefTutorialsHelp class removeSelector: #bookName! Smalltalk globals removeClassNamed: #ProfStefTutorialsHelp! ProfStefHelp class removeSelector: #pages! ProfStefHelp class removeSelector: #listOfTutorials! ProfStefHelp class removeSelector: #introduction! ProfStefHelp class removeSelector: #createATutorial! ProfStefHelp class removeSelector: #canHaveSyntaxHighlighting! ProfStefHelp class removeSelector: #bookName! ProfStefAPIHelp class removeSelector: #helpPackages! ProfStefAPIHelp class removeSelector: #builder! ProfStefAPIHelp class removeSelector: #bookName! Smalltalk globals removeClassNamed: #ProfStefAPIHelp! Smalltalk globals removeClassNamed: #ProfStefHelp! ProfStef removeSelector: #tutorialSizeString! ProfStef removeSelector: #tutorialPositionString! ProfStef removeSelector: #tutorial:lessonAt:! ProfStef removeSelector: #tutorial:lesson:! ProfStef removeSelector: #showCurrentLesson! ProfStef removeSelector: #previous! ProfStef removeSelector: #player:! ProfStef removeSelector: #player! ProfStef removeSelector: #open! ProfStef removeSelector: #next! ProfStef removeSelector: #lessonView:! ProfStef removeSelector: #lessonView! ProfStef removeSelector: #last! ProfStef removeSelector: #goOn:! ProfStef removeSelector: #go! ProfStef removeSelector: #first! ProfStef removeSelector: #close! ProfStef class removeSelector: #tutorial:lessonAt:! ProfStef class removeSelector: #tutorial:lesson:! ProfStef class removeSelector: #reset! ProfStef class removeSelector: #previous! ProfStef class removeSelector: #next! ProfStef class removeSelector: #last! ProfStef class removeSelector: #goOn:! ProfStef class removeSelector: #go! ProfStef class removeSelector: #first! ProfStef class removeSelector: #default! ProfStefHelpTutorialBuilder removeSelector: #buildTutorialTopicFor:! ProfStefHelpTutorialBuilder removeSelector: #build! ProfStefHelpTutorialBuilder class removeSelector: #new! Smalltalk globals removeClassNamed: #ProfStefHelpTutorialBuilder! SmalltalkSyntaxTutorial removeSelector: #welcome! SmalltalkSyntaxTutorial removeSelector: #tutorial! SmalltalkSyntaxTutorial removeSelector: #theEnd! SmalltalkSyntaxTutorial removeSelector: #reflectionContinued! SmalltalkSyntaxTutorial removeSelector: #reflection! SmalltalkSyntaxTutorial removeSelector: #printing! SmalltalkSyntaxTutorial removeSelector: #prepareDebuggerExample! SmalltalkSyntaxTutorial removeSelector: #pharoEnvironment! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxUnary! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxKeyword! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxExecutionOrderParentheses! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxExecutionOrder! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxCascadeShouldNotBeHere! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxCascade! SmalltalkSyntaxTutorial removeSelector: #messageSyntaxBinary! SmalltalkSyntaxTutorial removeSelector: #mathematicalPrecedence! SmalltalkSyntaxTutorial removeSelector: #loops! SmalltalkSyntaxTutorial removeSelector: #iterators! SmalltalkSyntaxTutorial removeSelector: #instanciation! SmalltalkSyntaxTutorial removeSelector: #initialize! SmalltalkSyntaxTutorial removeSelector: #doingVSPrinting! SmalltalkSyntaxTutorial removeSelector: #divideTwoByZero! SmalltalkSyntaxTutorial removeSelector: #debugger! SmalltalkSyntaxTutorial removeSelector: #conditionals! SmalltalkSyntaxTutorial removeSelector: #blocksAssignation! SmalltalkSyntaxTutorial removeSelector: #blocks! SmalltalkSyntaxTutorial removeSelector: #basicTypesSymbol! SmalltalkSyntaxTutorial removeSelector: #basicTypesString! SmalltalkSyntaxTutorial removeSelector: #basicTypesNumbers! SmalltalkSyntaxTutorial removeSelector: #basicTypesDynamicArray! SmalltalkSyntaxTutorial removeSelector: #basicTypesCharacters! SmalltalkSyntaxTutorial removeSelector: #basicTypesArray! Smalltalk globals removeClassNamed: #SmalltalkSyntaxTutorial! !Trait method! testedTutorial "Returns an instance of an AbstractTutorial subclass" ^ self explicitRequirement! ! SmalltalkSyntaxTutorialTest removeSelector: #testedTutorial! !Trait method! testEachSelectorExists self testedTutorial tutorial do: [:aSelector| self assert: (self tutorial respondsTo: aSelector) ]! ! SmalltalkSyntaxTutorialTest removeSelector: #testEachSelectorExists! SmalltalkSyntaxTutorialTest removeSelector: #testDivideTwoByZeroSignalsZeroDivide! Smalltalk globals removeClassNamed: #SmalltalkSyntaxTutorialTest! ProfStefTestNavigation removeSelector: #testShowingLessonBySelector! ProfStefTestNavigation removeSelector: #testShowingLessonByIndex! ProfStefTestNavigation removeSelector: #testShowFirstLessonOnGo! ProfStefTestNavigation removeSelector: #testSequenceNextNextPreviousOpenSecondLesson! ProfStefTestNavigation removeSelector: #testSequenceNextNextOpenThirdLesson! ProfStefTestNavigation removeSelector: #testNextOpenSecondLesson! ProfStefTestNavigation removeSelector: #setUp! Smalltalk globals removeClassNamed: #ProfStefTestNavigation! ProfStefTestGoOnMockTutorial removeSelector: #testNextShouldGoToSecondLesson! ProfStefTestGoOnMockTutorial removeSelector: #testLastThenPreviousShouldGoToSecondLesson! ProfStefTestGoOnMockTutorial removeSelector: #testLastThenFirstShouldGoToFirstLesson! ProfStefTestGoOnMockTutorial removeSelector: #testLastShouldGoToThirdLesson! ProfStefTestGoOnMockTutorial removeSelector: #testFirstLessonShouldBeDisplayed! ProfStefTestGoOnMockTutorial removeSelector: #tearDown! ProfStefTestGoOnMockTutorial removeSelector: #setUp! Smalltalk globals removeClassNamed: #ProfStefTestGoOnMockTutorial! ProfStefTestGo removeSelector: #testGoTwiceUseSameLessonView! ProfStefTestGo removeSelector: #testGoTwiceShowLessonViewIfNotVisible! ProfStefTestGo removeSelector: #testGoOpenSmalltalkSyntaxTutorial! ProfStefTestGo removeSelector: #testGoOnMockTutorial! ProfStefTestGo removeSelector: #tearDown! Smalltalk globals removeClassNamed: #ProfStefTestGo! ProfStefHelpTutorialBuilderTest removeSelector: #testInstantiation! ProfStefHelpTutorialBuilderTest removeSelector: #testBuild! Smalltalk globals removeClassNamed: #ProfStefHelpTutorialBuilderTest! ProfStefHelpTest removeSelector: #testPages! ProfStefHelpTest removeSelector: #testListOfTutorials! ProfStefHelpTest removeSelector: #testIntroduction! ProfStefHelpTest removeSelector: #testCreateATutorial! ProfStefHelpTest removeSelector: #testBookName! Smalltalk globals removeClassNamed: #ProfStefHelpTest! "NautilusRefactoring"! "ProfStef-Core"! "ProfStef-Help"! "ProfStef-Tests"! "Spec-Inspector"! "System-Support"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.951.mcz') load. ScriptLoader new update30782. ! ----End fileIn----! ----QUIT----2014-02-25T16:42:40.17714+01:00 Pharo.image priorSource: 32377872! ----STARTUP----2014-02-25T16:42:40.39673+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-02-25T16:42:44.796727+01:00 Pharo.image priorSource: 32444528! ----STARTUP----2014-02-25T16:48:57.828898+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-02-25T16:48:58.096743+01:00 Pharo-30782.image priorSource: 32444723! ----STARTUP----2014-03-01T10:18:40.133448+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/1/2014 10:14' prior: 82709825! commentForCurrentUpdate ^ '12997 Class comment missing for package PackageInfo https://pharo.fogbugz.com/f/cases/12997 12952 Context menu for dependentProjcts gives DNU for a new project https://pharo.fogbugz.com/f/cases/12952 13001 SystemWindow sendTopWindowToBack does not work when invoked from World menu or global shortcut https://pharo.fogbugz.com/f/cases/13001 12957 SimulateKeystrokesSpecification >> testSimulateCmdKeystroke failure https://pharo.fogbugz.com/f/cases/12957 12976 Komitter provokes race-condition in MCMethodDefinition class>>#instanceLike: https://pharo.fogbugz.com/f/cases/12976 13015 Fix MessageBrowser button size https://pharo.fogbugz.com/f/cases/13015 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/1/2014 10:14'! script436 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.919.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.274.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-EstebanLorenzano.218.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.159.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-MarcusDenker.8.mcz Versionner-Core-Commands-MarcusDenker.44.mcz Versionner-Core-DependenciesModel-MarcusDenker.72.mcz Versionner-Core-Model-MarcusDenker.38.mcz Versionner-Spec-Browser-MarcusDenker.121.mcz Versionner-Tests-Core-Commands-MarcusDenker.11.mcz Versionner-Tests-Core-DependenciesModel-MarcusDenker.32.mcz Versionner-Tests-Core-Model-EstebanLorenzano.20.mcz Versionner-Tests-Resources-MarcusDenker.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/1/2014 10:15'! update30783 "self new update30783" self withUpdateLog: '12997 Class comment missing for package PackageInfo https://pharo.fogbugz.com/f/cases/12997 12952 Context menu for dependentProjcts gives DNU for a new project https://pharo.fogbugz.com/f/cases/12952 13001 SystemWindow sendTopWindowToBack does not work when invoked from World menu or global shortcut https://pharo.fogbugz.com/f/cases/13001 12957 SimulateKeystrokesSpecification >> testSimulateCmdKeystroke failure https://pharo.fogbugz.com/f/cases/12957 12976 Komitter provokes race-condition in MCMethodDefinition class>>#instanceLike: https://pharo.fogbugz.com/f/cases/12976 13015 Fix MessageBrowser button size https://pharo.fogbugz.com/f/cases/13015 '. self loadTogether: self script436 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MCDefinition commentStamp: '' prior: 42388889! A MCDefinition is the root of inheritance of entities representing code. ! !PackageOrganizer commentStamp: 'TorstenBergmann 2/26/2014 08:28' prior: 0! The package organizer. Access using PackageOrganizer default! !MessageBrowser class methodsFor: 'specs' stamp: 'CamilloBruni 3/1/2014 03:24' prior: 25588990! testSpec ^ SpecLayout composed newColumn: [:col | col add: #listModel; addSplitter; add: #toolbarModel height: self buttonHeight; add: #textModel ] ! ! !KMShortcutTest methodsFor: 'tests' stamp: 'GuillermoPolito 2/14/2014 15:54' prior: 82255021! testAsString self assert: $a ctrl asString = 'Ctrl + A'. self assert: $b command asString = 'Cmd + B'. self assert: $c shift asString = 'Shift + C'. self assert: $d alt asString = 'Alt + D'. self assert: $e ctrl command asString = (KMCtrlModifier new asString ,' + ' , KMCommandModifier new asString,' + E'). ! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183138! testBadComposedCmdShortcutFails ^ self should: [ KMModifier ctrl ctrl ] raise: Error! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183317! testChainIntegerSucceds ^ self assert: ($e ctrl , 1) = ($e ctrl , 1)! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183480! testChainShortcutSucceds ^ self assert: ($e ctrl , $e ctrl) = ($e ctrl , $e ctrl)! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183656! testChainSimpleCharsSucceds ^ self assert: ($e ctrl , $e) = ($e ctrl , $e)! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183825! testCmdIntegerSucceds ^ self assert: 1 ctrl = 1 ctrl! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24183972! testCmdKeySucceds ^ self assert: $e ctrl = $e ctrl! ! !KMShortcutTest methodsFor: 'tests' stamp: 'GuillermoPolito 1/21/2012 20:39' prior: 24184120! testCmdShiftSucceds ^ self assert: ($1 shift ctrl matches: {self eventKey: $1 alt: false ctrl: true command: false shift: true})! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24184343! testComplexChainMatches |eCtrl eShift e f| f := self eventKey: $f. eCtrl := self eventKey: $e ctrl: true. eShift := self eventKey: $e shift: true. self assert: (($e ctrl, $e shift, $f) matches: {eCtrl}). self assert: (($e ctrl, $e shift, $f) matches: {eCtrl. eShift}). self assert: (($e ctrl, $e shift, $f) matches: {eCtrl. eShift. f}). self deny: (($e ctrl, $e shift, $f) matchesCompletely: {eCtrl}). self deny: (($e ctrl, $e shift, $f) matchesCompletely: {eCtrl. eShift}). self assert: (($e ctrl, $e shift, $f) matchesCompletely: {eCtrl. eShift. f}).! ! !KMShortcutTest methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 20:28' prior: 34000612! testCreation self assert: ($e asKeyCombination isKindOf: KMSingleKeyCombination). self assert: ($e ctrl isKindOf: KMModifiedKeyCombination). self assert: ($e ctrl alt shift command isKindOf: KMModifiedKeyCombination).! ! !KMShortcutTest methodsFor: 'tests' stamp: 'BenComan 2/23/2014 01:40'! testEventCodes self assert: $s command modifier eventCode equals: OSPlatform current defaultModifier eventCode ! ! !KMShortcutTest methodsFor: 'tests' stamp: 'GuillermoPolito 1/21/2012 20:39' prior: 24185304! testModifiedShortcutsMatch |a oneShift oneCommand oneCommandShift| a := self eventKey: $a ctrl: true. oneShift := self eventKey: $1 shift: true. oneCommand := self eventKey: $1 command: true. oneCommandShift := self eventKey: $1 alt: false ctrl: false command: true shift: true. self assert: ($a ctrl matches: {a}). self assert: ($1 shift matches: {oneShift}). self assert: ($1 command matches: {oneCommand}). self assert: ($1 command shift matches: {oneCommandShift}). self deny: ($a ctrl matches: {self eventKey: $a command: true}). self deny: ($i command shift matches: {self eventKey: $i command: true}). self assert: ($i ctrl shift matches: {self eventKey: $i alt: false ctrl: true command: false shift: true}). self deny: ($i ctrl matches: {self eventKey: $i alt: false ctrl: true command: false shift: true}). self assert: ($a ctrl matchesCompletely: {a}). self assert: ($1 shift matchesCompletely: {oneShift}). self assert: ($1 command matchesCompletely: {oneCommand}). self assert: ($1 command shift matchesCompletely: {oneCommandShift}).! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24186472! testShiftKeySucceds ^ self assert: $e shift = $e shift! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24186621! testSimpleChainMatches |e eCtrl | e := self eventKey: $e. eCtrl := self eventKey: $e ctrl: true. self assert: (($e ctrl, $e) matches: {eCtrl}). self assert: ($e ctrl matches: {eCtrl. e}). self deny: (($e ctrl, $e) matches: {eCtrl. self eventKey: $a}). self deny: ($e ctrl matches: {e}).! ! !KMShortcutTest methodsFor: 'tests' stamp: 'GuillermoPolito 3/19/2013 19:12' prior: 34000944! testSingleShortcutsMatch |a one home | a := self eventKey: $a. one := self eventKey: 1 asCharacter. home := self eventKey: Character home. self assert: ($a asKeyCombination matches: {a}). self assert: (1 asKeyCombination matches: {one}). self assert: (Character home asKeyCombination matches: {home}). self deny: ($b asKeyCombination matches: {a}). self assert: ($a asKeyCombination matchesCompletely: {a}). self assert: (1 asKeyCombination matchesCompletely: {one}).! ! !KMShortcutTest methodsFor: 'tests' stamp: 'CamilloBruni 3/21/2011 21:56' prior: 24187556! testTripleChainShortcutSucceds ^ self assert: ($e ctrl , $e ctrl , $d ctrl) = ($e ctrl , $e ctrl , $d ctrl)! ! !SystemWindow class methodsFor: 'top window' stamp: 'BenComan 2/28/2014 01:05' prior: 51785338! sendTopWindowToBack "Send the top window of the world to the back. Relies on #submorphs array being ordered top to bottom. " ActiveWorld submorphs detect: [ :morph | morph isSystemWindow ] ifFound: [ :morph | morph sendToBack ].! ! !KMCommandModifier methodsFor: 'accessing' stamp: 'BenComan 2/22/2014 12:24'! eventCode ^ self delegatedModifier eventCode! ! !KMShiftModifier methodsFor: 'accessing' stamp: 'BenComan 2/23/2014 01:29'! eventCode ^8! ! !KMCtrlModifier methodsFor: 'accessing' stamp: 'BenComan 2/22/2014 12:24'! eventCode ^16! ! !MCDefinition commentStamp: '' prior: 82789971! A MCDefinition is the root of inheritance of entities representing code. ! !MCDefinition class methodsFor: 'instance creation' stamp: 'CamilloBruni 2/22/2014 21:10' prior: 24736549! instanceLike: aDefinition Instances ifNil: [ Instances := WeakSet new ]. InstancesWriteLock ifNil: [ InstancesWriteLock := Semaphore forMutualExclusion ]. ^ (Instances like: aDefinition) ifNil: [ InstancesWriteLock critical: [ Instances add: aDefinition ]]! ! !PackageOrganizer commentStamp: 'TorstenBergmann 2/26/2014 08:28' prior: 82790122! The package organizer. Access using PackageOrganizer default! !KMAltModifier methodsFor: 'accessing' stamp: 'BenComan 2/23/2014 01:40'! eventCode ^64 ! ! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'ChristopheDemarey 2/28/2014 14:54' prior: 82554634! menu: aMenu shifted: aBoolean ^ (self model menu: aMenu shifted: aBoolean) ifNotNil: [ :menuModel | menuModel buildWithSpecAsPopup ]! ! "Keymapping-KeyCombinations"! "Keymapping-Tests"! "Monticello"! "Morphic-Base"! "Spec-MorphicAdapters"! "Spec-Tools"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.952.mcz') load. ScriptLoader new update30783. ! ----End fileIn----! ----QUIT----2014-03-01T10:18:49.071762+01:00 Pharo.image priorSource: 32444920! ----STARTUP----2014-03-01T10:18:49.30108+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-01T10:18:53.865076+01:00 Pharo.image priorSource: 32466509! ----STARTUP----2014-03-01T10:24:44.102502+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-01T10:24:44.4045+01:00 Pharo-30783.image priorSource: 32466705! ----STARTUP----2014-03-01T11:19:26.963407+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/1/2014 11:12' prior: 82776872! commentForCurrentUpdate ^ '12983 integrate Versionner 2.5 https://pharo.fogbugz.com/f/cases/12983 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/1/2014 11:13'! script437 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-SvenVanCaekenberghe.148.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-SvenVanCaekenberghe.74.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.146.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.919.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.274.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-EstebanLorenzano.218.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.233.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.311.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.159.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/1/2014 11:13'! update30784 "self new update30784" self withUpdateLog: '12983 integrate Versionner 2.5 https://pharo.fogbugz.com/f/cases/12983 '. self loadTogether: self script437 merge: false. self flushCaches. ! ! "ScriptLoader30"! !VersionnerProjectPackagesPanel commentStamp: '' prior: 81617568! A VersionnerProjectPackagesPanel is the panel related to packages defined in a project (a configuration). It shows packages and provides actions on them. Instance Variables addPackageButton: ButtonModel editPackageButton: ButtonModel packageChangesButton: ButtonModel packages: A collection of MTPackage to display packagesList: IconListModel packagesLabel: LabelModel project: MTProject savePackageButton: ButtonModel addPackageButton - Add a new package editPackageButton - Edit an existing package packageChangesButton - Get changes on a package packages - the list of packages that belongs to a specfied project (configuration) packagesLabel - The top label of this pane project - The project owning packages. removePackageButton - remove a declared package. savePackageButton - Commit changes and update package version ! !ConfigurationNotFound commentStamp: 'ChristopheDemarey 2/24/2014 16:36' prior: 0! Error raised when a configuration class for a project is not loaded and / or cannot be found!!! !MTModelComparator methodsFor: 'comparing' stamp: 'ChristopheDemarey 2/24/2014 18:09' prior: 81957821! is: anMTProject equalsTo: anOtherMTProject | referenceModelIterator modelToCompareIterator | referenceModelIterator := MTProjectBFSIterator on: anMTProject. modelToCompareIterator := MTProjectBFSIterator on: anOtherMTProject. [ true ] whileTrue: [ | referenceElement elementToCompare | referenceElement := referenceModelIterator next. elementToCompare := modelToCompareIterator next. (referenceElement = elementToCompare ) ifFalse: [ ^false ]. referenceModelIterator hasNext ifFalse: [ ^true ] ] ! ! !ConfigurationOfVersionnerTestXMLParserTemplate methodsFor: 'baselines' stamp: 'ChristopheDemarey 2/25/2014 15:20'! baseline20: spec spec for: #common do: [ spec blessing: #baseline; description: 'New baseline to test use of baselines in numbered versions'; author: 'ChristopheDemarey'; timestamp: '25/02/2014'; repository: 'http://www.smalltalkhub.com/mc/PharoExtras/XMLParser/main'. spec project: 'XMLWriter' with: [ spec className: 'ConfigurationOfVersionnerTestXMLWriter'; versionString: #stable; file: 'Versionner-Tests-Resources'; repository: 'http://www.smalltalkhub.com/mc/demarey/Versionner/main'.]. spec project: 'BitmapCharacterSet' with: [ spec className: 'ConfigurationOfVersionnerTestBitmapCharacterSet'; versionString: #stable; file: 'Versionner-Tests-Resources'; repository: 'http://www.smalltalkhub.com/mc/demarey/Versionner/main'.]. spec package: 'VersionnerTestXML-Parser' with: [spec requires: #('BitmapCharacterSet' 'XMLWriter')]. spec package: 'VersionnerTestXML-Tests-Parser' with: [ spec requires: 'VersionnerTestXML-Parser' ]. spec group: 'default' with: #('Core' 'Tests'); "default by default is equivalent to loading 'ALL' the packages still we added explicitly Tests to be loaded" group: 'Core' with: #('VersionnerTestXML-Parser'); group: 'Tests' with: #('VersionnerTestXML-Tests-Parser') ]. ! ! !MBPackageInfoTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/28/2014 18:20' prior: 82688856! testIsDirty "This test is likely to be bogus ... cannot just create a package for packages that don'e exist. see Metacello Issue 113" | cls | self deny: (package isDirty). self assert: (package printString = 'FooBarZork ---'). "We create a class" self deny: (Smalltalk includesKey: #TMPClass). cls := Object subclass: #TMPClass instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'FooBarZork'. self assert: (package isDirty). "self assert: (package printString = 'FooBarZork ---')." (Smalltalk includesKey: #TMPClass) ifTrue: [ (Smalltalk at: #TMPClass) removeFromSystem ]. ! ! !VersionnerProjectPackagesPanel commentStamp: '' prior: 82810836! A VersionnerProjectPackagesPanel is the panel related to packages defined in a project (a configuration). It shows packages and provides actions on them. Instance Variables addPackageButton: ButtonModel editPackageButton: ButtonModel packageChangesButton: ButtonModel packages: A collection of MTPackage to display packagesList: IconListModel packagesLabel: LabelModel project: MTProject savePackageButton: ButtonModel addPackageButton - Add a new package editPackageButton - Edit an existing package packageChangesButton - Get changes on a package packages - the list of packages that belongs to a specfied project (configuration) packagesLabel - The top label of this pane project - The project owning packages. removePackageButton - remove a declared package. savePackageButton - Commit changes and update package version ! !VersionnerProjectPackagesPanel class methodsFor: 'spec' stamp: 'ChristopheDemarey 2/28/2014 15:48' prior: 81618535! defaultSpec "Define the layout of the Project Packages Panel" ^ SpecLayout composed "newColumn: [ :c1 | c1 newRow: [:r1 | r1 add: #packagesLabel; add: #addPackageButton; add: #removePackageButton; add: #editPackageButton; add: #savePackageButton] height: 25; add: #packages ];" "Use the code below because Spec parser takes too much time to load Versionner with the previous declaration." add: #packagesLabel origin: 0@0 corner: 1/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #addPackageButton origin: 1/4@0 corner: 2/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #removePackageButton origin: 2/4@0 corner: 3/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; add: #editPackageButton origin: 3/4@0 corner: 4/4@0 offsetOrigin: 0@0 offsetCorner: 0@25; "add: #savePackageButton origin: 4/6@0 corner: 5/6@0 offsetOrigin: 0@0 offsetCorner: 0@25;" add: #packagesList origin: 0@0 corner: 1@1 offsetOrigin: 0@25 offsetCorner: 0@0; yourself. ! ! !VersionnerProjectPackagesPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 2/28/2014 16:02' prior: 81621779! editSelectedPackageRequirements "Edit package requirements for the selected package" | selectedPackage editionWidget | selectedPackage := self packageBoundToSelection. selectedPackage ifNil: [ ^self ]. editionWidget := (EditableList new: selectedPackage dependencies) title: selectedPackage name , ' requirements'; addItemBlock: [ self addPackageRequirement ]; yourself. editionWidget okAction: [ "propagate changes" selectedPackage dependencies: editionWidget list getItems. packagesList roots: project packages ]. self window openModal: editionWidget openDialogWithSpec window ! ! !VersionnerProjectPackagesPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/28/2014 15:47' prior: 81622495! initializePresenter "Initialize widgets behavior" packagesList whenSelectedNodesChanged: [:selection | removePackageButton enabled: (self isPackage: selection). editPackageButton enabled: selection notEmpty ]. addPackageButton action: [ self addPackage ]. removePackageButton action: [ self removeSelectedPackage ]. editPackageButton action: [ self editSelectedPackageRequirements ].! ! !VersionnerProjectPackagesPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/28/2014 15:48' prior: 81623105! initializeWidgets packagesList := (self instantiate: TreeModel) dragEnabled: true; whenBuiltDo: [ packagesList rootNodeHolder: [ :item | VSPackageNode new content: item ] ]; yourself. "packagesList icons: [:configuration | self iconForConfiguration: configuration ]. " "packagesList displayBlock: [:item | |attributes text version| attributes := OrderedCollection new. text := item packageName. (item name size) > (text size) ifTrue: [ version := (item name copyFrom: (text size + 2) to: (item name size)). (version size > 0) ifTrue: [ text := text , ' (' , version , ')'. ]. ]. item isDirty ifTrue: [ text := '*', text ]. text. ]." packagesLabel := self instantiate: LabelModel . packagesLabel text: 'Packages' . addPackageButton := self instantiate: ButtonModel . addPackageButton icon: (Smalltalk ui icons iconNamed: #packageAddIcon); enabled: false; help: 'Add a package to this project'. removePackageButton := self instantiate: ButtonModel . removePackageButton icon: (Smalltalk ui icons iconNamed: #packageDeleteIcon); enabled: false; help: 'Remove a package from this project'. editPackageButton := self instantiate: ButtonModel . editPackageButton icon: (Smalltalk ui icons iconNamed: #editIcon); enabled: false; help: 'Edit package requirements'. savePackageButton := self instantiate: ButtonModel . savePackageButton icon: (Smalltalk ui icons iconNamed: #smallSaveIcon); enabled: false; help: 'Save the selected package'.! ! !VersionnerProjectPackagesPanel methodsFor: 'testing' stamp: 'ChristopheDemarey 2/28/2014 15:57'! isPackage: selection | node | (selection size = 1) ifFalse: [ ^false ]. node := selection at: 1. ^ node parentNode isNil! ! !VersionnerProjectPackagesPanel methodsFor: 'selection' stamp: 'ChristopheDemarey 2/28/2014 16:05'! packageBoundToSelection | selection | selection := packagesList selectedItem. selection ifNil: [ ^ nil ]. ^ (selection parentNode) ifNil: [ selection content ] ifNotNil: [ selection parentNode content ]! ! !VersionnerProjectBrowser methodsFor: 'actions' stamp: 'ChristopheDemarey 2/25/2014 18:33' prior: 81615807! updateRepository "Update the core repository of this project" | package repoManager | project ifNotNil: [ package := project configurationClass package correspondingMcPackage. repoManager := VersionnerRepositoriesManager new. repoManager selectedChangedBlock: [:remote :selected | selected ifTrue: [ | repositoryGroup | repositoryGroup := package workingCopy repositoryGroup. repositoryGroup repositoriesDo: [ :aRepository | (aRepository location = repository text) ifTrue: [ repositoryGroup removeRepository: aRepository ] ]. repository accept: remote location. repositoryGroup addRepository: remote ] ]; open; yourself ]! ! !MCModel2MTModelVisitor methodsFor: 'visiting' stamp: 'ChristopheDemarey 2/24/2014 16:51' prior: 82633705! visitMCProjectAsRequiredProject: aProject "visit a Metacello Project to add it as a required projet. It is quite the same as visitMCProject except that we won't dive into the project structure. aProject is an instance of MetacelloMCProjectSpec." | version requiredProject | requiredProject := MTDependantProject new. requiredProject displayName: aProject name. requiredProject name: (aProject className ifNil: [aProject name] ifNotNil: [ :className | className configurationBaseName]). requiredProject configurationClass: aProject projectClass. requiredProject repositories: (aProject repositorySpecs collect: [ :aRepoSpec | aRepoSpec description]). requiredProject dependencies: (aProject loads ifNil: [ #() ] ifNotNilDo: [ :loads | loads ]) asOrderedCollection. version := MTVersion fromVersionString: aProject versionString. requiredProject version: version. project addDependency: requiredProject. ^ requiredProject.! ! !MTDevelopmentWorkfow methodsFor: 'private' stamp: 'ChristopheDemarey 2/25/2014 15:32'! isDevelopmentUsedInRelease | devVersion allProjectVersions | devVersion := self developmentVersion. devVersion ifNil: [ ^ false ]. (devVersion blessing = #baseline) ifFalse: [ ^false ]. allProjectVersions := project configurationClass project versions. ^ allProjectVersions detect: [ :aVersion | aVersion importedVersions includes: devVersion versionString ] ifFound: [ true ] ifNone: [ false ]! ! !MTDependantProject methodsFor: 'comparing' stamp: 'ChristopheDemarey 2/24/2014 18:15' prior: 81942644! = other (super = other) ifFalse: [ ^false ]. (self configurationClass = other configurationClass) ifFalse: [ ^false ]. (self displayName = other displayName) ifFalse: [ ^false ]. (self repositories hasEqualElements: other repositories) ifFalse: [ ^false ]. ^ true! ! !MTDependantProject methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 1/17/2014 18:39' prior: 81943911! editRepositories | packageName repoManager | packageName := configurationClass package name. repoManager := VersionnerRepositoriesManager newWithPackage: packageName. repoManager selectedChangedBlock: [:remote :selected | selected ifTrue: [ self repositories add: remote location ] ifFalse: [ self repositories remove: remote location ] ]; open; yourself.! ! !MTDependantProject methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 2/24/2014 15:47'! editVersion | availableVersions index | configurationClass ifNil: [ UIManager inform: 'Cannot find the configuration class for ' , name. ^ self ]. availableVersions := configurationClass project versions select: [ :aVersion | aVersion blessing ~= #baseline ] thenCollect: [ :aVersion | aVersion versionString ]. availableVersions := configurationClass project symbolicVersionSymbols , availableVersions. index := UIManager default chooseFrom: availableVersions title: 'Available versions in ', name. (index = 0) ifFalse: [ | versionString | versionString := availableVersions at: index. self version: (MTVersion fromVersionString: versionString) ]! ! !VersionnerProjectToolBar methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/24/2014 18:30' prior: 81637740! initializePresenter "Initialize widgets behavior" updateButton action: [ self browser hasChanges ifTrue: [ self executeWithDevWorkflow: VSUpdateDevelopmentVersionCommand ] ifFalse: [ UIManager default inform: 'Nothing to save' ] ]. releaseButton action: [ self executeWithDevWorkflow: VSReleaseDevelopmentVersionCommand ]. commitButton action: [ (VSSaveProjectCommand target: browser project for: self) execute ].! ! !TreeModel methodsFor: '*Versionner-Spec-Browser' stamp: 'ChristopheDemarey 2/28/2014 15:35'! whenSelectedNodesChanged: aBlock "Set a block to perform when a new node is selected" selectionHolder whenChangedDo: [ :col | aBlock cull: col ]! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 2/28/2014 18:03' prior: 82636714! editSelectedProjectLoads "Edit load directives for the selected project" | selectedProject editionWidget | selectedProject := self projectBoundToSelection. selectedProject ifNil: [ ^self ]. editionWidget := (EditableList new: selectedProject dependencies) title: selectedProject name , ' load directives'; addItemBlock: [ self addProjectLoadDirective ]; yourself. editionWidget okAction: [ "propagate changes" selectedProject dependencies: editionWidget list getItems. projectList roots: project requiredProjects ]. self window openModal: editionWidget openDialogWithSpec window ! ! !VersionnerProjectPanel methodsFor: 'initialization' stamp: 'ChristopheDemarey 2/28/2014 18:00' prior: 82637437! initializePresenter "Initialize widgets behavior" projectList whenSelectedNodesChanged: [ :selection | removeProjectButton enabled: (self isProject: selection). editProjectButton enabled: selection notEmpty. projectList menu: [ :aMenu | self requiredProjectMenu: aMenu] ]. addProjectButton action: [ self addDependentProject ]. removeProjectButton action: [ projectList selectedItem ifNotNilDo: [ :selectedItem | self removeDependentProject: selectedItem content ] ]. editProjectButton action: [ self editSelectedProjectLoads ]. groupList whenSelectedItemsChanged: [ :selection | removeGroupButton enabled: selection notEmpty ]. addGroupButton action: [ self addGroup ]. removeGroupButton action: [ groupList selectedItem ifNotNilDo: [ :selectedItem | | parentGroup | parentGroup := groupList selectedItem parentNode ifNil: [ nil ] ifNotNilDo: [ :parentNode | parentNode content ]. self remove: selectedItem content fromGroup: parentGroup ] ]! ! !VersionnerProjectPanel methodsFor: 'testing' stamp: 'ChristopheDemarey 2/28/2014 17:59'! isProject: selection | node | (selection size = 1) ifFalse: [ ^false ]. node := selection at: 1. ^ node parentNode isNil! ! !VersionnerProjectPanel methodsFor: 'selection' stamp: 'ChristopheDemarey 2/28/2014 18:02'! projectBoundToSelection | selection | selection := projectList selectedItem. selection ifNil: [ ^ nil ]. ^ (selection parentNode) ifNil: [ selection content ] ifNotNil: [ selection parentNode content ]! ! !VersionnerProjectPanel methodsFor: 'actions' stamp: 'ChristopheDemarey 2/28/2014 16:41' prior: 81635027! remove: aDependency fromGroup: aGroup "Remove a dependency from a group or project" aDependency ifNotNil: [ (UIManager default confirm: 'Are your sure you want to remove ', aDependency asString label: 'Remove a group') ifTrue: [ aGroup ifNil: [ project removeDependencyNamed: aDependency name ] ifNotNil: [ aGroup dependencies: (aGroup dependencies reject: [ :dependency | dependency = aDependency ]) ]. groupList roots: project groups ] ] ! ! !VersionnerProjectPanel methodsFor: 'accessing-ui' stamp: 'ChristopheDemarey 2/24/2014 14:24' prior: 81636081! requiredProjectMenu: aMenu | menuGroup | menuGroup := MenuGroupModel new. menuGroup addMenuItem: (MenuItemModel new name: #'edit version'; action: [ projectList selectedItem content editVersion ]). menuGroup addMenuItem: (MenuItemModel new name: #'edit repositories'; action: [ projectList selectedItem content editRepositories ]). aMenu addMenuGroup: menuGroup. ^aMenu! ! !MTModelComparatorTest methodsFor: 'tests' stamp: 'ChristopheDemarey 2/24/2014 17:47' prior: 81805800! testIsEqualsTo | projectA projectB | projectA := self referenceModel. projectB := self referenceModel. self deny: projectA == projectB. self assert: (MTModelComparator is: projectA equalsTo: projectB). projectB removeDependencyNamed: 'PackageA2'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB :=self referenceModel. projectB removeDependencyNamed: 'LibXYZ'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := self referenceModel. projectB removeDependencyNamed: 'All'. self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := self referenceModel. (projectB dependencyNamed: 'All') removeDependency: (projectB dependencyNamed: 'SmallGroup'). self deny: (MTModelComparator is: projectA equalsTo: projectB). projectB := self referenceModel. (projectB dependencyNamed: 'LibXYZ') addDependency: 'Core'. self deny: (MTModelComparator is: projectA equalsTo: projectB).! ! !ConfigurationNotFound commentStamp: 'ChristopheDemarey 2/24/2014 16:36' prior: 82811785! Error raised when a configuration class for a project is not loaded and / or cannot be found!!! !VersionnerToolBox methodsFor: 'spec creation' stamp: 'ChristopheDemarey 2/25/2014 13:09' prior: 82653966! projectSpecFromRequiredProject: aRequiredProject | mcProject versionString projectReferenceSpec spec | aRequiredProject configurationClass ifNil: [ ConfigurationNotFound signal: aRequiredProject name , ' configuration class cannot be found!!' ]. mcProject := aRequiredProject configurationClass project. versionString := aRequiredProject version ifNil: [ (mcProject hasVersion: #stable) ifTrue: [ #stable ] ifFalse: [ #bleedingEdge ] ] ifNotNilDo: [ :aVersion | aVersion ]. projectReferenceSpec := mcProject projectSpec name: aRequiredProject displayName; className: aRequiredProject configurationClass name; versionString: versionString; yourself. spec := mcProject projectReferenceSpec name: aRequiredProject displayName; projectReference: projectReferenceSpec. aRequiredProject repositories do: [ :repoString | spec repository: repoString ]. aRequiredProject dependencies ifNotEmptyDo: [ :loadsList | spec projectReference loads: loadsList ]. ^ spec! ! VersionnerProjectToolBar removeSelector: #releaseDevelopment! "Versionner-Core-DependenciesModel"! "Versionner-Spec-Browser"! "Versionner-Tests-Core-DependenciesModel"! "Versionner-Tests-Core-Model"! "Versionner-Tests-Resources"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.953.mcz') load. ScriptLoader new update30784. ! ----End fileIn----! ----QUIT----2014-03-01T11:19:32.673464+01:00 Pharo.image priorSource: 32466902! ----STARTUP----2014-03-01T11:19:32.878993+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-01T11:19:37.524992+01:00 Pharo.image priorSource: 32500280! ----STARTUP----2014-03-01T11:25:25.8052+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-01T11:25:26.085202+01:00 Pharo-30784.image priorSource: 32500477! ----STARTUP----2014-03-03T15:46:36.799134+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/3/2014 15:43' prior: 82798852! commentForCurrentUpdate ^ '12998 Split class refactoring does not work (gives MNU) https://pharo.fogbugz.com/f/cases/12998 12965 Cannot moveTo: FileLocator https://pharo.fogbugz.com/f/cases/12965 12971 CriticBrowser causes error on opening when delivering notification https://pharo.fogbugz.com/f/cases/12971 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/3/2014 15:43'! script438 ^ 'AST-Core-MarcusDenker.204.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.629.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.919.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.274.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.478.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-EstebanLorenzano.218.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.313.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.159.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/3/2014 15:43'! update30785 "self new update30785" self withUpdateLog: '12998 Split class refactoring does not work (gives MNU) https://pharo.fogbugz.com/f/cases/12998 12965 Cannot moveTo: FileLocator https://pharo.fogbugz.com/f/cases/12965 12971 CriticBrowser causes error on opening when delivering notification https://pharo.fogbugz.com/f/cases/12971 '. self loadTogether: self script438 merge: false. self flushCaches. ! ! "ScriptLoader30"! !CriticBrowser methodsFor: 'initialization' stamp: 'CamilloBruni 2/25/2014 19:40' prior: 68382397! initializeWidgets title := 'Critic Browser'. self instantiateModels: #( rulesModel TreeModel resetButton ButtonModel logButton ButtonModel ). self setLogButton. self setResetButton. criticModel := SingleCodeCriticResultList new. rulesModel childrenBlock: [ :rule | rule isComposite ifTrue: [ rule rules ] ifFalse: [ #() ]]. rulesModel displayBlock: [ :rule | self stringMorphForRule: rule ]. rulesModel menu: [ :aMenu :shifted | self menu: aMenu shifted: shifted ]. self focusOrder add: rulesModel; add: criticModel! ! !TreeModel methodsFor: 'initialize' stamp: 'CamilloBruni 2/25/2014 19:41' prior: 82545273! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | col do: [ :each | each container: self ]. self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. rootNodeHolder whenChangedDo: [ :aBlock | self updateTree ]. isCheckList whenChangedDo: [ :boolean | self changed: #isCheckList: with: { boolean }]. menuBlockHolder whenChangedDo: [ :aMenuModel :oldMenuModel | oldMenuModel ifNotNil: [ | oldMenu | oldMenuModel isBlock ifTrue: [ oldMenu := MenuModel new. oldMenuModel cull: oldMenu cull: false ] ifFalse: [ oldMenu := oldMenuModel ]. oldMenu applyTo: self ]. aMenuModel ifNotNil: [ | newMenu | aMenuModel isBlock ifTrue: [ newMenu := MenuModel new. aMenuModel cull: newMenu cull: false ] ifFalse: [ newMenu := aMenuModel ]. newMenu applyTo: self ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !FileLocatorTest methodsFor: 'compatibility tests' stamp: 'CamilloBruni 2/25/2014 14:38'! testMoveTo | old new | [ old := FileLocator imageDirectory / 'testMoveTo_old'. old ensureCreateFile. new := FileLocator home / 'testMoveTo_new'. old moveTo: new. self deny: old exists. self assert: new exists. ] ensure: [ old ensureDelete. new ensureDelete. ]! ! !FileLocatorTest methodsFor: 'resolution tests' stamp: 'CamilloBruni 2/22/2014 15:03' prior: 21923040! testResolvePath | result path | locator := FileLocator image / 'plonk'. result := locator resolve: (Path * 'griffle'). path := (Path * 'plonk') / 'griffle'. self assert: result class = locator class. self assert: result origin = locator origin. self assert: result path = path.! ! !FileLocatorTest methodsFor: 'resolution tests' stamp: 'CamilloBruni 2/22/2014 15:03' prior: 21923862! testResolveString | result path | locator := FileLocator image / 'plonk'. result := locator resolve: 'griffle'. path := (Path * 'plonk') / 'griffle'. self assert: result class = locator class. self assert: result origin = locator origin. self assert: result path = path.! ! !RBSplitClassRefactoring methodsFor: 'private-transforming' stamp: 'TorstenBergmann 2/26/2014 09:08' prior: 31425041! addClass self performComponentRefactoring: (RBAddClassRefactoring model: self model addClass: newClassName superclass: Object subclasses: #() category: class category). newClass := self model classNamed: newClassName asSymbol! ! !FileReference methodsFor: 'operations' stamp: 'CamilloBruni 2/22/2014 14:56' prior: 40050521! copyTo: aReference self isDirectory ifTrue: [ aReference ensureCreateDirectory ] ifFalse: [ filesystem = aReference fileSystem ifTrue: [ filesystem copy: path to: aReference resolve path ] ifFalse: [ filesystem copy: path toReference: aReference ] ]! ! !FileReference methodsFor: 'operations' stamp: 'CamilloBruni 2/22/2014 14:58' prior: 21950207! moveTo: aReference | result | result := self fileSystem rename: self path to: aReference resolve path. result ifNotNil: [ self setFileSystem: filesystem path: aReference path ]. ! ! !FileReference methodsFor: 'operations' stamp: 'CamilloBruni 2/22/2014 14:58' prior: 21950469! renameTo: newBasename | destinationPath | destinationPath := self fileSystem rename: self to: self parent / newBasename. destinationPath ifNotNil: [ self setFileSystem: filesystem path: destinationPath ]. ^ self ! ! "FileSystem-Core"! "FileSystem-Tests-Core"! "Manifest-CriticBrowser"! "Refactoring-Core"! "Spec-Core"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.954.mcz') load. ScriptLoader new update30785. ! ----End fileIn----! ----QUIT----2014-03-03T15:46:41.897515+01:00 Pharo.image priorSource: 32500672! ----STARTUP----2014-03-03T15:46:42.100782+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-03T15:46:46.510766+01:00 Pharo.image priorSource: 32518502! ----STARTUP----2014-03-03T15:52:30.895295+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-03T15:52:31.155294+01:00 Pharo-30785.image priorSource: 32518699! ----STARTUP----2014-03-03T17:13:34.783102+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/3/2014 17:09' prior: 82832617! commentForCurrentUpdate ^ '13021 ClassTest>>#testRenaming is failing - make temporary package consistent across ClassTest and CompiledMethodTest https://pharo.fogbugz.com/f/cases/13021 12920 Primitive Pragma not parsed in all cases, error code not supported https://pharo.fogbugz.com/f/cases/12920 12996 ClassTest>>#testRenaming leaves dirty package Dummy-Tests-Class behind https://pharo.fogbugz.com/f/cases/12996 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/3/2014 17:10'! script439 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-MarcusDenker.635.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.919.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.274.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.481.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.313.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.159.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/3/2014 17:10'! update30786 "self new update30786" self withUpdateLog: '13021 ClassTest>>#testRenaming is failing - make temporary package consistent across ClassTest and CompiledMethodTest https://pharo.fogbugz.com/f/cases/13021 12920 Primitive Pragma not parsed in all cases, error code not supported https://pharo.fogbugz.com/f/cases/12920 12996 ClassTest>>#testRenaming leaves dirty package Dummy-Tests-Class behind https://pharo.fogbugz.com/f/cases/12996 '. self loadTogether: self script439 merge: false. self flushCaches. ! ! "ScriptLoader30"! !MethodPragmaTest methodsFor: 'testing-primitives' stamp: 'CamilloBruni 2/26/2014 16:51' prior: 26501132! testPrimitiveNamed1 "This test useses the #primitiveDirectoryLookup primitive." self compile: ' ^ #lookup' selector: #lookup. self assert: self lookup equals: #lookup. ! ! !MethodPragmaTest methodsFor: 'testing-primitives' stamp: 'CamilloBruni 2/26/2014 16:08' prior: 26501458! testPrimitiveNamed2 "This test useses the #primPathNameDelimiter primitive." self compile: ' ^ #delim' selector: #delim. self assert: self delim equals: FilePluginPrims new delimiter. ! ! !MethodPragmaTest methodsFor: 'testing-primitives' stamp: 'CamilloBruni 2/26/2014 16:52'! testPrimitiveNamedErrorCode1 "This test useses the #primitiveDirectoryLookup primitive." self compile: ' ^ errorCode' selector: #lookup. self assert: self lookup equals: nil. ! ! !MethodPragmaTest methodsFor: 'testing-primitives' stamp: 'CamilloBruni 2/26/2014 16:52'! testPrimitiveNamedErrorCode2 "This test useses the #primitiveDirectoryLookup primitive." self compile: ' ^ errorCode' selector: #lookup. self assert: self lookup equals: nil. ! ! !OCASTSemanticAnalyzer methodsFor: 'visitor' stamp: 'CamilloBruni 2/26/2014 16:45' prior: 81476746! visitSequenceNode: aSequenceNode aSequenceNode temporaries do: [ :node | self declareVariableNode: node ]. aSequenceNode parent isMethod ifTrue: [ aSequenceNode parent pragmas detect: [ :pragma | pragma isPrimitiveError ] ifFound: [ :pragma | self declareVariableNode: (RBVariableNode named: (pragma argumentAt: #error:) value asString) ] ]. aSequenceNode statements do: [ :each | self visitNode: each ]. aSequenceNode temporaries reverseDo: [ :node | node binding isUnused ifTrue: [ self unusedVariable: node ] ]! ! !ClassTest methodsFor: 'setup' stamp: 'BenComan 3/2/2014 09:38' prior: 19336211! categoryNameForTemporaryClasses "Answer the category where to classify temporarily created classes" ^'Dummy-Tests-Class' ! ! !ClassTest methodsFor: 'setup' stamp: 'BenComan 3/2/2014 20:54' prior: 19337144! tearDown self deleteClass. self deleteRenamedClass. {self unclassifiedCategory. self categoryNameForTemporaryClasses} do: [:category| RPackage organizer unregisterPackageNamed: category]! ! !RBPragmaNode methodsFor: 'accessing' stamp: 'CamilloBruni 2/26/2014 18:28'! argumentAt: keywordSelector ^ self argumentAt: keywordSelector ifAbsent: [ KeyNotFound signalFor: keywordSelector ]! ! !RBPragmaNode methodsFor: 'accessing' stamp: 'CamilloBruni 2/26/2014 18:28'! argumentAt: keywordSelector ifAbsent: absentBlock self selectorParts with: self arguments do: [ :selectorPart :argument | selectorPart value = keywordSelector ifTrue: [ ^ argument ]]. ^ absentBlock value! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'CamilloBruni 2/26/2014 16:50' prior: 38313273! asPrimitive | args module name spec | args := (self arguments collect: [ :each | each value ]) asArray. self isPrimitive ifFalse: [ IRPrimitive null ]. args first isString ifTrue: [ name := args first. module := self argumentAt: #module: ifAbsent: [ nil ]. spec := {(module ifNotNil: [ module value asSymbol ]). (name asSymbol). 0. 0}. ^ IRPrimitive new num: 117; spec: spec; yourself ] ifFalse: [ ^ IRPrimitive new num: args first; spec: nil; yourself ]! ! !RBPragmaNode methodsFor: '*opalcompiler-core' stamp: 'CamilloBruni 2/26/2014 16:20' prior: 34732884! isPrimitiveError ^ #( primitive:error: primitive:module:error: primitive:error:module:) includes: self selector! ! !CompiledMethodTest methodsFor: 'running' stamp: 'BenComan 3/2/2014 02:38'! categoryNameForTemporaryClasses "Answer the category where to classify temporarily created classes" ^'Dummy-Tests-Class'! ! !CompiledMethodTest methodsFor: 'running' stamp: 'BenComan 3/2/2014 20:37'! tearDown RPackage organizer unregisterPackageNamed: self categoryNameForTemporaryClasses.! ! !CompiledMethodTest methodsFor: 'tests - testing' stamp: 'BenComan 3/2/2014 02:40' prior: 19873915! testIsInstalled | method cls | method := (self class)>>#returnTrue. self assert: method isInstalled. "now make an orphaned method by just deleting the class." Smalltalk removeClassNamed: #TUTU. cls := Object subclass: #TUTU instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryNameForTemporaryClasses. cls compile: 'foo ^ 10'. method := cls >> #foo. Smalltalk removeClassNamed: #TUTU. self deny: method isInstalled. ! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'BenComan 3/2/2014 02:39' prior: 19862818! testMethodClass | method cls | method := self class >> #returnTrue. self assert: method selector = #returnTrue. "now make an orphaned method by just deleting the class. old: #unknown new semantics: return Absolete class" Smalltalk removeClassNamed: #TUTU. cls := Object subclass: #TUTU instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryNameForTemporaryClasses. cls compile: 'foo ^ 10'. method := cls >> #foo. Smalltalk removeClassNamed: #TUTU. self assert: method methodClass = cls! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'BenComan 3/2/2014 02:39' prior: 19864080! testSearchForClass | method cls | method := self class >> #returnTrue. self assert: method searchForClass = self class. "now make an orphaned method. we want to get nil as the class" Smalltalk removeClassNamed: #TUTU. cls := Object subclass: #TUTU instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryNameForTemporaryClasses. cls compile: 'foo ^ 10'. method := cls >> #foo. Smalltalk removeClassNamed: #TUTU. self assert: method searchForClass isNil! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'BenComan 3/2/2014 02:39' prior: 19864675! testSearchForSelector | method cls | method := self class >> #returnTrue. self assert: method searchForSelector = #returnTrue. "now make an orphaned method. we want to get nil as the selector" Smalltalk removeClassNamed: #TUTU. cls := Object subclass: #TUTU instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryNameForTemporaryClasses. cls compile: 'foo ^ 10'. method := cls >> #foo. Smalltalk removeClassNamed: #TUTU. self assert: method searchForSelector isNil! ! !CompiledMethodTest methodsFor: 'tests - accessing' stamp: 'BenComan 3/2/2014 02:36' prior: 19865267! testSelector | method cls | method := (self class)>>#returnTrue. self assert: (method selector = #returnTrue). "now make an orphaned method. new semantics: return corrent name" Smalltalk removeClassNamed: #TUTU. cls := Object subclass: #TUTU instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryNameForTemporaryClasses. cls compile: 'foo ^ 10'. method := cls >> #foo. Smalltalk removeClassNamed: #TUTU. self assert: method selector = #foo. ! ! !OCASTTranslator methodsFor: 'visitor' stamp: 'CamilloBruni 2/26/2014 16:45' prior: 38902356! visitPragmaNode: aPragmaNode methodBuilder addPragma: aPragmaNode asPragma. aPragmaNode isPrimitiveError ifTrue: [ methodBuilder storeTemp: (aPragmaNode argumentAt: #error:) value ]. ! ! !RPackageOrganizer methodsFor: '*RPackage-SystemIntegration' stamp: 'ThierryGoubier 3/2/2014 11:00' prior: 77732397! systemCategoryRemovedActionFrom: ann "When a system category is removed, we may: remove a tag, or remove a rpackage. If we remove a RPackage, unregister the linked MCWorkingCopy. If it is a tag, do nothing? (from what I know of RPackage, the tag should already have disappeared because it would have been empty)." | rPackage categoryName categoryNameSymbol managers | categoryName := ann categoryName. categoryNameSymbol := categoryName asSymbol. self flag: #hack. "for decoupling MC" managers := (self respondsTo: #allManagers) ifTrue: [ self perform: #allManagers ] ifFalse: [ #() ]. "Reverse the test. First check that this is the root category of a RPackage. If yes, unregister the RPackage and the corresponding MCWorkingCopy." rPackage := packages at: categoryNameSymbol ifAbsent: [ ^ self ]. "Consider that a rPackage with extension selectors or tags is not empty and shouldn't be removed." (rPackage extensionSelectors notEmpty or: [ (rPackage classTags reject: [ :tag | tag name = categoryName ]) notEmpty ]) ifTrue: [ ^ self ]. self basicUnregisterPackageNamed: categoryNameSymbol. (managers detect: [ :each | each packageName = categoryName ] ifNone: [ ]) ifNotNil: [ :mcWorkingCopy | mcWorkingCopy unregister ]! ! "AST-Core"! "KernelTests"! "OpalCompiler-Core"! "RPackage-SystemIntegration"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.955.mcz') load. ScriptLoader new update30786. ! ----End fileIn----! ----QUIT----2014-03-03T17:13:40.123104+01:00 Pharo.image priorSource: 32518896! ----STARTUP----2014-03-03T17:13:40.336627+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-03T17:13:44.870625+01:00 Pharo.image priorSource: 32541394! ----STARTUP----2014-03-03T17:19:32.541479+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-03T17:19:33.06948+01:00 Pharo-30786.image priorSource: 32541591! ----STARTUP----2014-03-03T22:20:36.063461+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/3/2014 22:17' prior: 82850841! commentForCurrentUpdate ^ '13016 Skip KernelTests.Methods.BlockClosureTest.testOnForkSplit https://pharo.fogbugz.com/f/cases/13016 12907 TreeInspector a MetacelloMCProject gives Error: Name not found: Example-AddOn https://pharo.fogbugz.com/f/cases/12907 13033 LargeInteger are not compact classes any more https://pharo.fogbugz.com/f/cases/13033 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/3/2014 22:18'! script440 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.636.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.919.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.274.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-EstebanLorenzano.695.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.481.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-MarcusDenker.1032.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.313.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.162.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-MarcusDenker.17.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/3/2014 22:18'! update30787 "self new update30787" self withUpdateLog: '13016 Skip KernelTests.Methods.BlockClosureTest.testOnForkSplit https://pharo.fogbugz.com/f/cases/13016 12907 TreeInspector a MetacelloMCProject gives Error: Name not found: Example-AddOn https://pharo.fogbugz.com/f/cases/12907 13033 LargeInteger are not compact classes any more https://pharo.fogbugz.com/f/cases/13033 '. self loadTogether: self script440 merge: false. Smalltalk compactClassesArray at: 4 put: nil. Smalltalk compactClassesArray at: 5 put: nil. Integer initialize. . self flushCaches. ! ! "ScriptLoader30"! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 2/25/2014 18:24' prior: 68593864! iconFor: anEyeElement anEyeElement withErrorsDo: [ :error | ^ self iconFor: anEyeElement error: error ]. ^ [ anEyeElement icon ] on: Error do: [ :error | self iconFor: anEyeElement error: error ]! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 2/25/2014 18:08'! iconFor: anEyeElement error: error ^ Smalltalk ui icons smallWarningIcon! ! !EyeTreeInspector methodsFor: 'api' stamp: 'CamilloBruni 2/25/2014 18:48' prior: 68593985! labelFor: anEyeElement "Take care of errors that might occur during label access" ^ [ anEyeElement longLabel ] on: Error do: [ :error | anEyeElement label, ': ', (self labelFor: anEyeElement error: error) ]! ! !EyeAbstractInspector methodsFor: 'api' stamp: 'CamilloBruni 2/25/2014 18:39'! labelFor: anEyeElement error: error ^ 'Error while accessing label of ', anEyeElement accessorCode printString! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:16' prior: 76855754! browseSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Browse Full'; action: [ self browseSelectedObject ]; shortcut: $b command mac | $b alt win | $b alt unix ]. aGroup addItem: [ :anItem | anItem name: 'Browse Class'; action: [ self browseSelectedObjectClass ] ]. aGroup addItem: [ :anItem | anItem name: 'Browse Hierarchy'; action: [ self browseSelectedObjectClassHierarchy ]; shortcut: $h command mac | $h alt win | $h alt unix ] ]! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:16' prior: 76856368! endSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Copy Name'; action: [ self copyAccessorCode ]; shortcut: $c command mac | $c alt win | $c alt unix ] ]! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 2/25/2014 18:30'! errorPropertySelectors "Return a collection of selectors on this eye-element that are checked against errors. See #withErrorsDo: and #errorSubMenu:" ^ #(icon label longLabel description)! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:49'! errorSubMenu: aMenu "Add debug menu entries for the failing #errorPropertySelectors of this eye element" self hasError ifFalse: [ ^ self ]. aMenu addGroup: [ :aGroup | self withErrorsDo: [ :accessError :itemSelector | aGroup addItem: [ :anItem | anItem name: 'Debug Accessing ', itemSelector printString, ' of ', self accessorCode ; icon: Smalltalk ui icons smallWarningIcon; action: [ [ self perform: itemSelector] fork ]]]]! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 2/25/2014 18:23'! errorWhileAccessing: selector do: aBlock [ self perform: selector ] on: Error do: [ :error | aBlock cull: error cull: selector ].! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:15' prior: 76856678! exploreSubMenu: aMenu aMenu addGroup: [ :aGroup | aGroup addItem: [ :anItem | anItem name: 'Explore Pointers'; action: [ self explorePointers ] ] ]! ! !AbstractEyeElement methodsFor: 'testing' stamp: 'CamilloBruni 2/25/2014 18:24'! hasError self withErrorsDo: [ ^ true ]. ^ false! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:14' prior: 36468423! inspectionMenu: aMenu "specific menu for the current element" self exploreSubMenu: aMenu; browseSubMenu: aMenu; customSubMenu: aMenu; endSubMenu: aMenu; errorSubMenu: aMenu.! ! !AbstractEyeElement methodsFor: 'menu' stamp: 'CamilloBruni 2/25/2014 18:15' prior: 74108162! mainInspectSubMenu: aMenu aMenu add: 'Inspect (i)' translated target: self selector: #inspectSelectedObjectInNewWindow. aMenu add: 'Explore (I)' translated target: self selector: #exploreSelectedObject.! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'CamilloBruni 2/25/2014 18:29'! withErrorsDo: aBlock self errorPropertySelectors do: [ :selector | self errorWhileAccessing: selector do: aBlock ].! ! !EyeInspector class methodsFor: 'settings' stamp: 'CamilloBruni 2/25/2014 18:36' prior: 39892068! defaultBrowserSettingOn: aBuilder (aBuilder setting: #useAutoRefresh) target: self; parent: #debugging; label: 'Auto Refresh Inspectors' translated; description: 'If true, refreshes inspectors in regular intervals' translated ! ! !EyeInspector methodsFor: 'initialization' stamp: 'CamilloBruni 2/25/2014 18:01' prior: 74114251! initializeAutoRefresh refreshLoop := self useAutoRefresh ifTrue: [ [ self refresh. self hasWindow ifFalse: [ refreshLoop terminate ] ] valueWithInterval: self updateTime ]! ! !EyeInspector methodsFor: 'private' stamp: 'CamilloBruni 2/25/2014 18:48'! labelFor: anEyeElement ^ anEyeElement label! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 2/25/2014 18:59' prior: 68255173! refreshDescription: item "When you select an element in the list of the inspector, print on the description textModel the element selected" | newDescription | item ifNil: [ ^ self ]. newDescription := ([ item description ] on: Error do: [ 'Error while printing ', item accessorCode ]). description text = newDescription ifTrue: [ ^ self ]. self keepScrollPositionOf: description during: [ description text: newDescription ].! ! !EyeInspector methodsFor: 'event-handling' stamp: 'CamilloBruni 2/25/2014 18:41' prior: 68592370! updateList "update the list of elements displayed according to the new object" |elements| elements := self generateElements. "first reset the items to make sure we don't interfere with the display block" self list items: #(). self list displayBlock: [ :eyeElement :index | self labelFor: (elements at: index ifAbsent: [ InstanceVariableEyeElement host: nil ])]. self list items: elements. self list menu: [ :aMenu | self inspectionMenu: aMenu ]. ! ! !BlockClosureTest methodsFor: 'tests - on-fork' stamp: 'SvenVanCaekenberghe 3/1/2014 13:29' prior: 18260728! testOnForkSplit "Test that when forking, the stack are split correctly (there is no any contexts referenced by both processes)" | sema timeout forkedContexts myContexts c | self flag: 'This test is too brittle, failing often on CI'; skip. sema := Semaphore new. [ 1/0 ] on: Exception fork: [ | ctx | forkedContexts := IdentitySet new. ctx := thisContext. [ ctx notNil ] whileTrue: [ forkedContexts add: ctx. ctx := ctx sender ]. sema signal ]. timeout := (sema waitTimeoutSeconds: 1). self assert: timeout == false description: 'fork lasted more than one second'. myContexts := IdentitySet new. c := thisContext. [ c notNil ] whileTrue: [ myContexts add: c. c := c sender ]. self assert: (myContexts noneSatisfy: [:b | forkedContexts includes: b ]) description: 'myContexts are not within forkedContexts'. self assert: (forkedContexts noneSatisfy: [:b | myContexts includes: b ]) description: 'forkedContexts are not within myContexts'.! ! "KernelTests"! "Spec-Inspector"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.956.mcz') load. ScriptLoader new update30787. ! ----End fileIn----! ----QUIT----2014-03-03T22:20:40.110029+01:00 Pharo.image priorSource: 32541788! ----STARTUP----2014-03-03T22:20:40.323917+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-03T22:20:44.877909+01:00 Pharo.image priorSource: 32562364! ----STARTUP----2014-03-03T22:26:29.111416+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-03T22:26:30.021327+01:00 Pharo-30787.image priorSource: 32562561! ----STARTUP----2014-03-05T22:45:42.7847+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/5/2014 22:41' prior: 82873739! commentForCurrentUpdate ^ '13006 Browsers do not synchronize class definitions https://pharo.fogbugz.com/f/cases/13006 13032 Transcript red screen of death https://pharo.fogbugz.com/f/cases/13032 13046 Error when browsing a Traits class-side in Monticello Browser https://pharo.fogbugz.com/f/cases/13046 13005 SystemWindow>>sendToBack should only consider other SystemWindows https://pharo.fogbugz.com/f/cases/13005 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/5/2014 22:42'! script441 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1726.mcz KernelTests-SvenVanCaekenberghe.636.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.699.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.481.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.313.mcz Spec-Debugger-MarcusDenker.205.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.162.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.137.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.192.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/5/2014 22:42'! update30788 "self new update30788" self withUpdateLog: '13006 Browsers do not synchronize class definitions https://pharo.fogbugz.com/f/cases/13006 13032 Transcript red screen of death https://pharo.fogbugz.com/f/cases/13032 13046 Error when browsing a Traits class-side in Monticello Browser https://pharo.fogbugz.com/f/cases/13046 13005 SystemWindow>>sendToBack should only consider other SystemWindows https://pharo.fogbugz.com/f/cases/13005 '. self loadTogether: self script441 merge: false. self flushCaches. ! ! "ScriptLoader30"! !NautilusUITest commentStamp: '' prior: 42503957! A NautilusUITest is a test class for testing the behavior of NautilusUI! !ThreadSafeTranscriptPluggableTextMorph commentStamp: 'BenComan 3/6/2014 01:08' prior: 0! A ThreadSafeTranscriptPluggableTextMorph implements just enough thread-safe-ness required to updating its PluggableTextMorph while that is in its #drawSubmorphsOn: routine! !SystemWindow methodsFor: 'menu actions' stamp: 'BenComan 3/1/2014 20:33' prior: 78351700! sendToBack "Relies on #submorphs array being ordered top to bottom." | otherSystemWindows | otherSystemWindows := self world submorphs select: [ :morph | morph isSystemWindow and: morph ~~ self ]. otherSystemWindows ifNotEmpty: [ otherSystemWindows first activate. self world addMorph: self behind: otherSystemWindows last. ].! ! !NautilusUITest commentStamp: '' prior: 82907332! A NautilusUITest is a test class for testing the behavior of NautilusUI! !ThreadSafeTranscript methodsFor: '*Polymorph-Widgets' stamp: 'BenComan 3/6/2014 01:11' prior: 53085967! openLabel: aString | window | window := (SystemWindow labelled: aString) model: self. window addMorph: (ThreadSafeTranscriptPluggableTextMorph on: self text: nil accept: nil readSelection: nil menu: #codePaneMenu:shifted:) frame: (0@0 corner: 1@1). ^ window openInWorld! ! !MCTraitDefinition methodsFor: 'printing' stamp: 'MartinDias 3/5/2014 18:49'! printClassDefinitionOn: stream ^ self printMetaDefinitionOn: stream! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'BenComan 3/1/2014 23:16' prior: 17344499! classDefinitionModified: anAnnouncement | class | self haltOnce. window ifNil: [^ self ]. window isDisplayed ifFalse: [ ^ self ]. class := anAnnouncement oldClassDefinition. ((self showGroups and: [ self selectedGroup notNil and: [ self selectedGroup elements includes: class ]]) or: [ self getList2 includes: class ]) ifTrue: [ (model selectedClass = anAnnouncement oldClassDefinition) ifTrue: [ model selectedClass: anAnnouncement newClassDefinition ]. "Minimal change to fix Case13006. Further investigation required in Pharo 4 on Case13020" self updateClassView. self removeFromPackagesIconsCache: class package. sourceTextArea hasUnacceptedEdits ifFalse: [ self changed: #sourceCodeFrom: ]].! ! !ThreadSafeTranscriptPluggableTextMorph commentStamp: 'BenComan 3/6/2014 01:08' prior: 82907495! A ThreadSafeTranscriptPluggableTextMorph implements just enough thread-safe-ness required to updating its PluggableTextMorph while that is in its #drawSubmorphsOn: routine! !ThreadSafeTranscriptPluggableTextMorph methodsFor: 'drawing' stamp: 'BenComan 3/6/2014 01:09'! drawSubmorphsOn: aCanvas mutex critical: [ super drawSubmorphsOn: aCanvas ].! ! !ThreadSafeTranscriptPluggableTextMorph methodsFor: 'initialization' stamp: 'BenComan 3/6/2014 01:09'! initialize mutex := Mutex new. super initialize.! ! !ThreadSafeTranscriptPluggableTextMorph methodsFor: 'transcript' stamp: 'BenComan 3/6/2014 01:09'! update: aSymbol mutex critical: [ super update: aSymbol ] ! ! "Monticello"! "Morphic-Base"! "Nautilus"! "Polymorph-Widgets"! "Transcript"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.957.mcz') load. ScriptLoader new update30788. ! ----End fileIn----! ----QUIT----2014-03-05T22:45:53.652717+01:00 Pharo.image priorSource: 32562758! ----STARTUP----2014-03-05T22:45:53.855784+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-05T22:45:58.437787+01:00 Pharo.image priorSource: 32579414! ----STARTUP----2014-03-05T22:51:41.564088+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-05T22:51:41.83409+01:00 Pharo-30788.image priorSource: 32579611! ----STARTUP----2014-03-05T23:24:27.204672+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/5/2014 23:21' prior: 82894708! commentForCurrentUpdate ^ '13045 Integer>>#printSeparatedBy:every:signed:base:on: does not respect the given delimiter https://pharo.fogbugz.com/f/cases/13045 13040 Spec update https://pharo.fogbugz.com/f/cases/13040 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/5/2014 23:21'! script442 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-MarcusDenker.791.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-MarcusDenker.341.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-SvenVanCaekenberghe.1728.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.699.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.481.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.317.mcz Spec-Debugger-SvenVanCaekenberghe.207.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.164.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.139.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/5/2014 23:21'! update30789 "self new update30789" self withUpdateLog: '13045 Integer>>#printSeparatedBy:every:signed:base:on: does not respect the given delimiter https://pharo.fogbugz.com/f/cases/13045 13040 Spec update https://pharo.fogbugz.com/f/cases/13040 '. self loadTogether: self script442 merge: false. self flushCaches. ! ! "ScriptLoader30"! !SpecTreeNodeModel commentStamp: '' prior: 76780139! I am a Tree node especially made for being used by the Spec framework.! !TreeModel commentStamp: '' prior: 77537541! I am the Spec model of a MorphTreeMorph tree.! !TreeNodeModel commentStamp: '' prior: 77542397! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !MorphicTreeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 82797296! menu: aMenu shifted: aBoolean ^ (self model menu: aMenu shifted: aBoolean) ifNotNil: [ :menuModel | menuModel buildWithSpecAsPopup ]! ! !MorphicNewListAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 77330018! defaultSpec ^ { #NewList. #model:. #model. #hResizing:. #spaceFill. #vResizing:. #spaceFill. #deSelectOnReclick:. #(model deSelectOnReclick). #isMultipleSelection:. #(model isMultipleSelection). #unselectOnChange:. #(model unselectOnChange). #whenSelectedIndexChangedDo:. #(model indexHasBeenSelected). #whenSelectedIndexesChangedDo:. #(model indexesHasBeenSelected). #whenSelectedItemChangedDo:. #(model itemHasBeenSelected). #whenSelectedItemsChangedDo:. #(model itemsHasBeenSelected). #whenHeaderIsClickedDo:. #(model headerClickedBlock). #dragEnabled:. #(model dragEnabled). #dropEnabled:. #(model dropEnabled). #endOfInitialization. #setIndex:. #(model selectedIndex). #hasHeader:. #(model hasHeader).}! ! !MorphicNewListAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 82544290! getMenu: shiftKeyState ^ (self model getMenu: shiftKeyState) ifNotNil: [ :menuModel | menuModel buildWithSpecAsPopup ]! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 69636942! heightToDisplayInList: aList "Return the width of my representation as a list item" self model extent ifNotNil: [:ex | ^ ex y ]. self model initialExtent ifNotNil: [:ex | ^ ex y ]. self widget ifNil: [ self buildWithSpec ]. self widget vResizing: #rigid; hResizing: #rigid. ^ self widget heightToDisplayInList: aList! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 69638005! listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph "Specify how this object as a list item should be drawn" self widget ifNil: [ self buildWithSpec ]. self widget vResizing: #rigid; hResizing: #rigid. self widget listRenderOn: aCanvas atRow: aRow bounds: drawBounds color: drawColor backgroundColor: backgroundColor from: aMorph! ! !AbstractMorphicAdapter methodsFor: 'dispatch' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 69640744! widthToDisplayInList: aList "Return the width of my representation as a list item" self model extent ifNotNil: [:ex | ^ ex x ]. self model initialExtent ifNotNil: [:ex | ^ ex x ]. self widget ifNil: [ self buildWithSpec ]. self widget vResizing: #rigid; hResizing: #rigid. ^ self widget widthToDisplayInList: aList! ! !SpecTreeNodeModel commentStamp: '' prior: 82924001! I am a Tree node especially made for being used by the Spec framework.! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 76780616! childrenItems childrenItems isBlock ifTrue: [ childrenItems := childrenItems value ]. ^ childrenItems! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 76780890! contents ^ contents ifNil: [ contents := self childrenItems collect: [:ci | self childNodeFromItem: ci ] ]! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 76781089! hasContents hasContents isBlock ifTrue: [ ^ hasContents value ]. ^ self childrenItems notEmpty! ! !SpecTreeNodeModel methodsFor: 'building' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06'! hasContents: aBlock hasContents := aBlock! ! !SpecTreeNodeModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 76781823! setChildren: aBlock "Store a aBlock which will return the children when evaluated." self childrenItems: aBlock! ! !MorphicTreeNodeAdapter class methodsFor: 'specs' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 78315786! defaultSpec ^ #(SpecTreeNodeModel setItemFromBlock:#(model itemBlock) icon: #(model icon) setChildren: #(model childrenBlock) hasContents: #(model hasChildrenBlock))! ! !MorphicTreeNodeAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06'! hasChildrenBlock ^ self model hasChildren! ! !ComposableModel methodsFor: 'accessing' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07' prior: 19977848! owner: anObject owner := anObject.! ! !MorphicTabAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 69664343! selected: aBoolean self widgetDo: [ :w | w selected: aBoolean ]! ! !MorphicMenuItemAdapter methodsFor: 'widget API' stamp: 'BenjaminVanRyseghem 3/4/2014 17:25:06' prior: 76863035! subMenu | subMenu | subMenu := self model subMenu. subMenu ifNil: [ ^ nil ]. ^ (subMenu isBlock or: [ subMenu isMessageSend ]) ifTrue: [ subMenu cull: self model ] ifFalse: [ subMenu buildWithSpecAsPopup ]! ! !TreeModel commentStamp: '' prior: 82924130! I am the Spec model of a MorphTreeMorph tree.! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07' prior: 76525940! childrenFor: anItem ^ self childrenBlock cull: anItem cull: self! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07' prior: 77332405! defaultNodeFor: item ^ TreeNodeModel new content: item; children: [ self childrenFor: item ]; hasChildren: [ self hasChildrenFor: item ]; yourself! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07'! hasChildrenBlock < api: #inspect> "Get the block used to check if a node has children. The optional block arguments are: - the node - the tree" ^ hasChildrenBlockHolder value! ! !TreeModel methodsFor: 'protocol-compatibility' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07'! hasChildrenBlock: aBlock < api: #block getter: #hasChildrenBlock registration: #whenHasChildrenBlockChanged:> "Set the block used to check if a node has children. The optional block arguments are: - the node - the tree" hasChildrenBlockHolder value: aBlock! ! !TreeModel methodsFor: 'protocol' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07'! hasChildrenFor: anItem ^ self hasChildrenBlock cull: anItem cull: self! ! !TreeModel methodsFor: 'initialization' stamp: 'BenjaminVanRyseghem 3/4/2014 18:31' prior: 80630231! initialize super initialize. childrenBlockHolder := [ {} ] asReactiveVariable. hasChildrenBlockHolder := [ :item | (self childrenFor: item) notEmpty ] asReactiveVariable. rootsHolder := {} asReactiveVariable. selectionHolder := {} asReactiveVariable. menuBlockHolder := [] asReactiveVariable. displayBlock := [:item | item asString ] asReactiveVariable. removeOnlyLastSelected := false asReactiveVariable. autoDeselection := true asReactiveVariable. autoMultiSelection := false asReactiveVariable. columnInset := 5 asReactiveVariable. doubleClick := [] asReactiveVariable. allowMenuOnNoItem := false asReactiveVariable. evenRowColor := Color veryLightGray muchLighter asReactiveVariable. isCheckList := false asReactiveVariable. keyStroke := [ :key | ] asReactiveVariable. multiSelection := false asReactiveVariable. oddRowColor := Color white asReactiveVariable. preferedPaneColor := Color white asReactiveVariable. resizerWidth := 2 asReactiveVariable. rowInset := 2 asReactiveVariable. iconBlock := [ :each : node | node icon ] asReactiveVariable. highlightedItem := nil asReactiveVariable. rootNodeHolder := [ :item | TreeNodeModel new content: item; children: [ self childrenFor: item ] ] asReactiveVariable. columns := { TreeColumnModel new displayBlock: [:node | (self wrapItem: node content) ] } asReactiveVariable. "Since my nodes are already morphs, dragging them will actually extract them from their owner" dragTransformationBlock := [ :item :source | item complexContents ] asReactiveVariable. treeUpdated := nil asReactiveVariable. self registerEvents! ! !TreeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 3/4/2014 17:30' prior: 82845682! registerEvents rootsHolder whenChangedDo: [ self updateTree ]. childrenBlockHolder whenChangedDo: [ self updateTree ]. hasChildrenBlockHolder whenChangedDo: [ self updateTree ]. displayBlock whenChangedDo: [ self updateTree ]. iconBlock whenChangedDo: [ self updateTree ]. autoDeselection whenChangedDo: [ :boolean | self update: {#autoDeselection:. boolean} ]. columns whenChangedDo: [ :col | col do: [ :each | each container: self ]. self changed: #columns: with: { col } ]. selectionHolder whenChangedDo: [:items | self changed: { #selectItems. items } ]. rootNodeHolder whenChangedDo: [ :aBlock | self updateTree ]. isCheckList whenChangedDo: [ :boolean | self changed: #isCheckList: with: { boolean }]. menuBlockHolder whenChangedDo: [ :aMenuModel :oldMenuModel | oldMenuModel ifNotNil: [ | oldMenu | oldMenuModel isBlock ifTrue: [ oldMenu := MenuModel new. oldMenuModel cull: oldMenu cull: false ] ifFalse: [ oldMenu := oldMenuModel ]. oldMenu applyTo: self ]. aMenuModel ifNotNil: [ | newMenu | aMenuModel isBlock ifTrue: [ newMenu := MenuModel new. aMenuModel cull: newMenu cull: false ] ifFalse: [ newMenu := aMenuModel ]. newMenu applyTo: self ] ]. self announcer weak on: WidgetBuilt send: #onWidgetBuilt to: self.! ! !TreeModel methodsFor: 'protocol-events-compatibility' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07'! whenHasChildrenBlockChanged: aBlock "Set a block to perform when a new hasChildrenBlock is set" hasChildrenBlockHolder whenChangedDo: aBlock! ! !TreeNodeModel commentStamp: '' prior: 82924238! I represent a node in a tree widget. I hold an item, an icon and the list of my children. In addition, I have a filtering mechanism! !TreeNodeModel methodsFor: 'procotol' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07'! hasChildren ^ hasChildren value! ! !TreeNodeModel methodsFor: 'initialize' stamp: 'BenjaminVanRyseghem 3/4/2014 17:18:07' prior: 80598178! initialize super initialize. children := [ self container childrenFor: self content ] asReactiveVariable. hasChildren := [ self container hasChildrenFor: self content ] asReactiveVariable. content := nil asReactiveVariable. icon := nil asReactiveVariable. container := nil asReactiveVariable. matchTokenFilter := [ :aFilter | false ] asReactiveVariable. parentNode := nil asReactiveVariable. childNodeClass := self class asReactiveVariable. selected := false asReactiveVariable. lastClicked := false asReactiveVariable. mouseDownAction := [:event | ] asReactiveVariable. hasContentToShow := false asReactiveVariable. isExpanded := false asReactiveVariable. selected whenChangedDo: [ :aBoolean | self changed: #selected: with: { aBoolean } ]. isExpanded whenChangedDo: [ :aBoolean | self changed: #isExpanded: with: { aBoolean } ].! ! !IntegerTest methodsFor: 'tests - printing' stamp: 'SvenVanCaekenberghe 3/5/2014 22:17'! testAsStringWithCommas self assert: 123456789 asStringWithCommas equals: '123,456,789'. self assert: -123456789 asStringWithCommas equals: '-123,456,789'! ! !IntegerTest methodsFor: 'tests - printing' stamp: 'SvenVanCaekenberghe 3/5/2014 22:16'! testPrintSeparatedByEverySignedOn | printer | printer := [ :integer :printSigned | String streamContents: [ :stream | integer printSeparatedBy: $. every: 3 signed: printSigned on: stream ] ]. self assert: (printer value: 123456789 value: false) equals: '123.456.789'. self assert: (printer value: -123456789 value: false) equals: '-123.456.789'. self assert: (printer value: 123456789 value: true) equals: '+123.456.789'. self assert: (printer value: -123456789 value: true) equals: '-123.456.789'! ! !Integer methodsFor: 'printing' stamp: 'SvenVanCaekenberghe 3/5/2014 22:15' prior: 23772340! printSeparatedBy: aDelimiter every: offset signed: printSigned base: base on: aStream | digits | digits := self abs printStringBase: base. self sign = -1 ifTrue: [ aStream nextPut: $- ] ifFalse: [ printSigned ifTrue: [ aStream nextPut: $+ ] ]. 1 to: digits size do: [ :i | aStream nextPut: (digits at: i). (i < digits size and: [ (i - digits size) \\ offset = 0 ]) ifTrue: [ aStream nextPut: aDelimiter ] ]! ! "Kernel"! "KernelTests"! "Spec-Core"! "Spec-MorphicAdapters"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.958.mcz') load. ScriptLoader new update30789. ! ----End fileIn----! ----QUIT----2014-03-05T23:24:36.871855+01:00 Pharo.image priorSource: 32579808! ----STARTUP----2014-03-05T23:24:37.087838+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-05T23:24:41.793838+01:00 Pharo.image priorSource: 32605815! ----STARTUP----2014-03-05T23:30:25.921558+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-05T23:30:26.191552+01:00 Pharo-30789.image priorSource: 32606012! ----STARTUP----2014-03-05T23:47:29.644935+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'SvenVanCaekenberghe 3/5/2014 23:44' prior: 82911759! commentForCurrentUpdate ^ '13000 Integrate Fuel 1.9.3 https://pharo.fogbugz.com/f/cases/13000 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'SvenVanCaekenberghe 3/5/2014 23:44'! script443 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-SvenVanCaekenberghe.1728.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-SvenVanCaekenberghe.699.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.481.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-SvenVanCaekenberghe.317.mcz Spec-Debugger-SvenVanCaekenberghe.207.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.164.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-SvenVanCaekenberghe.139.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'SvenVanCaekenberghe 3/5/2014 23:44'! update30790 "self new update30790" self withUpdateLog: '13000 Integrate Fuel 1.9.3 https://pharo.fogbugz.com/f/cases/13000 '. self loadTogether: self script443 merge: false. self flushCaches. ! ! "ScriptLoader30"! !FLIteratingCluster commentStamp: '' prior: 42268723! I am a template class whose algorithm for serialize a collection of objects consists on delegate the serialization of each individual object to the subclass.! !FLVariableObjectCluster commentStamp: 'MartinDias 5/30/2011 01:25' prior: 42276460! I am a generic cluster for objects with indexable variables.! !FLVariablesMapping commentStamp: 'MartinDias 8/1/2011 03:01' prior: 42276522! I am used to materialize instance variables in an object, tolerating "class shape changing". Cases tolerated are: - instance variable added - instance variable order change - instance variable removed ! !FLMigrationTest methodsFor: 'tests-automatic' stamp: 'MartinDias 1/6/2012 15:46' prior: 79878679! testChangeInSuperclass "Tests that serializer tolarates when there is a change in the superclass between serialization and materialization" | aClass aClassSubclass instance materializedInstance | aClass := self newClassWithInstanceVariableNames: 'a b c' superclass: Object. aClassSubclass := self newClassWithInstanceVariableNames: 'd e' superclass: aClass. instance := aClassSubclass new. instance instVarNamed: 'a' put: $A. instance instVarNamed: 'b' put: $B. instance instVarNamed: 'c' put: $C. instance instVarNamed: 'd' put: $D. instance instVarNamed: 'e' put: $E. self serialize: instance. aClass removeInstVarNamed: 'a'. aClass removeInstVarNamed: 'b'. aClass addInstVarNamed: 'x'. aClassSubclass superclass: aClass. materializedInstance := self materialized. self assert: $D = (materializedInstance instVarNamed: 'd'). self assert: $E = (materializedInstance instVarNamed: 'e'). self should: [materializedInstance instVarNamed: 'a'] raise: Error. self should: [materializedInstance instVarNamed: 'b'] raise: Error. self assert: $C = (materializedInstance instVarNamed: 'c'). self assert: (materializedInstance instVarNamed: 'x') isNil. ! ! !LargeNegativeInteger methodsFor: '*Fuel' stamp: 'MaxLeske 2/17/2014 20:40' prior: 76289124! fuelAccept: aGeneralMapper ^ self >= -4294967295 ifTrue: [ aGeneralMapper mapAndTraceByClusterName: self to: FLNegative32SmallIntegerCluster ] ifFalse: [ aGeneralMapper visitBytesObject: self]! ! !FLIteratingCluster commentStamp: '' prior: 82950204! I am a template class whose algorithm for serialize a collection of objects consists on delegate the serialization of each individual object to the subclass.! !FLIteratingCluster methodsFor: 'analyzing' stamp: 'MaxLeske 5/4/2013 09:46' prior: 21558136! add: anObject traceWith: aAnalysis "Add an object to the cluster and trace references." objects addIfNotPresent: anObject ifPresentDo: [ ^ self ]. self referencesOf: anObject do: [ :aChild || actual | actual := aChild fuelReplacement. self addReferenceFrom: anObject to: actual. aAnalysis trace: actual ]! ! !FLIteratingCluster methodsFor: 'analyzing' stamp: 'MaxLeske 5/3/2013 15:22'! addReferenceFrom: anObject to: anotherObject | list | list := self references at: anObject ifAbsent: [ nil ]. list ifNil: [ self references at: anObject put: (list := OrderedCollection new) ]. list add: anotherObject! ! !FLIteratingCluster methodsFor: 'analyzing' stamp: 'MaxLeske 5/3/2013 10:48'! addReferencesFrom: anObject to: aCollection aCollection do: [ :ref | self addReferenceFrom: anObject to: ref ]! ! !FLIteratingCluster methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 08:36'! references ^ references ifNil: [ references := FLLargeIdentityDictionary new ]! ! !BlockClosure methodsFor: '*Fuel' stamp: 'MarianoMartinezPeck 9/24/2013 14:49' prior: 18210930! fuelAccept: aGeneralMapper ^ self shouldBeSubstitutedByCleanCopy "The 'onRecursionDo:' is just to avoid an infinitive loop for the substitution. The cleanCopy MUST be a clean copy so it can be serialized normally" ifTrue: [ aGeneralMapper visitSubstitution: self by: self cleanCopy onRecursionDo: [ aGeneralMapper visitVariableObject: self ] ] ifFalse: [ aGeneralMapper visitVariableObject: self ]! ! !BlockClosure methodsFor: '*Fuel' stamp: 'MarianoMartinezPeck 9/24/2013 14:48' prior: 18211195! shouldBeSubstitutedByCleanCopy ^ self isClean ! ! !FLCompiledMethodSerializationTest methodsFor: 'running' stamp: 'MaxLeske 11/6/2013 15:01'! setUp super setUp. theClass := self newClass class! ! !FLCompiledMethodSerializationTest methodsFor: 'tests' stamp: 'MaxLeske 11/6/2013 15:29'! testDoIt | materialized | "Since Pharo 3.0 decompilation of compiled methods is no longer possible. That means we have to store the source too." self useDoIt. theCompiledMethod selector: #DoIt. self assert: theCompiledMethod isDoIt. self assert: theCompiledMethod isInstalled. self deny: theCompiledMethod trailer hasSource. self assert: theCompiledMethod trailer isEmpty. self deny: theCompiledMethod trailer hasSourcePointer. materialized := self resultOfSerializeAndMaterialize: theCompiledMethod. "not possible since it's a different instance" self deny: materialized isInstalled. self assert: materialized isDoIt. "we serialized the source" self assert: materialized trailer hasSource. self deny: materialized trailer isEmpty. self deny: materialized trailer hasSourcePointer. self assert: (materialized isEqualRegardlessTrailerTo: theCompiledMethod)! ! !FLCompiledMethodSerializationTest methodsFor: 'tests' stamp: 'MaxLeske 11/6/2013 15:21'! testInstalled | materialized | "Since Pharo 3.0 decompilation of compiled methods is no longer possible. That means we have to store the source too." self useInstalled. self assert: theCompiledMethod isInstalled. self deny: theCompiledMethod isDoIt. self deny: theCompiledMethod trailer hasSource. self deny: theCompiledMethod trailer isEmpty. self assert: theCompiledMethod trailer hasSourcePointer. "if installed but not different, the installed instance will be answered" materialized := self resultOfSerializeAndMaterialize: theCompiledMethod. self assert: materialized == theCompiledMethod! ! !FLCompiledMethodSerializationTest methodsFor: 'as yet unclassified' stamp: 'MaxLeske 11/6/2013 15:29'! testInstalledModified | copy materialized | "Since Pharo 3.0 decompilation of compiled methods is no longer possible. That means we have to store the source too." self useInstalled. self assert: theCompiledMethod isInstalled. self deny: theCompiledMethod isDoIt. self deny: theCompiledMethod trailer hasSource. self deny: theCompiledMethod trailer isEmpty. self assert: theCompiledMethod trailer hasSourcePointer. copy := theCompiledMethod copy. "different instance can not be installed at the same time." self deny: copy isInstalled. self deny: copy isDoIt. self deny: copy trailer hasSource. self deny: copy trailer isEmpty. self assert: copy trailer hasSourcePointer. "if installed but not different, the installed instance will be answered" materialized := self resultOfSerializeAndMaterialize: copy. self deny: materialized == theCompiledMethod. self deny: materialized == copy. self deny: materialized isInstalled. self deny: materialized isDoIt. "we serialized the source" self assert: materialized trailer hasSource. self deny: materialized trailer isEmpty. self deny: materialized trailer hasSourcePointer! ! !FLCompiledMethodSerializationTest methodsFor: 'tests' stamp: 'MaxLeske 11/6/2013 15:29'! testNotInstalled | materialized | "Since Pharo 3.0 decompilation of compiled methods is no longer possible. That means we have to store the source too." self useNotInstalled. self deny: theCompiledMethod isInstalled. self deny: theCompiledMethod isDoIt. self deny: theCompiledMethod trailer hasSource. self assert: theCompiledMethod trailer isEmpty. self deny: theCompiledMethod trailer hasSourcePointer. materialized := self resultOfSerializeAndMaterialize: theCompiledMethod. self deny: materialized isInstalled. self deny: materialized isDoIt. "we serialized the source" self assert: materialized trailer hasSource. self deny: materialized trailer isEmpty. self deny: materialized trailer hasSourcePointer. self assert: (materialized isEqualRegardlessTrailerTo: theCompiledMethod)! ! !FLCompiledMethodSerializationTest methodsFor: 'helpers' stamp: 'MaxLeske 11/6/2013 15:04'! useDoIt theClass duringTestCompileSilently: 'm ^ 42' storeSource: false. theCompiledMethod := theClass methodNamed: #m. theClass methodDict at: #DoIt put: theCompiledMethod! ! !FLCompiledMethodSerializationTest methodsFor: 'helpers' stamp: 'MaxLeske 11/6/2013 15:05'! useInstalled theClass duringTestCompileSilently: 'm ^ 42' storeSource: true. theCompiledMethod := theClass methodNamed: #m! ! !FLCompiledMethodSerializationTest methodsFor: 'helpers' stamp: 'MaxLeske 11/6/2013 15:04'! useNotInstalled theClass duringTestCompileSilently: 'm ^ 42' storeSource: false. theCompiledMethod := theClass methodNamed: #m. theClass methodDict removeKey: #m! ! !FLSerializationTest methodsFor: 'running' stamp: 'MaxLeske 2/27/2013 21:49' prior: 21652444! tearDown super tearDown. "Traits should be cleaned before classFactory because it seems class factory only knwos how to clean classes, not traits." self tearDownTraits. self tearDownClassFactory. self tearDownGlobalVariables. self tearDownInstanceVariables! ! !FLSerializationTest methodsFor: 'running' stamp: 'MaxLeske 2/27/2013 21:49'! tearDownInstanceVariables self class withAllSuperclasses do: [ :class | class = TestCase ifTrue: [ ^ self ]. class instVarNames do: [ :varName | self instVarNamed: varName put: nil ] ]! ! !FLOptimizedObjectCluster methodsFor: 'serialize/materialize' stamp: 'MaxLeske 5/3/2013 09:32' prior: 21623392! serializeReferencesOf: anObject with: anEncoder (self references at: anObject ifAbsent: [ ^ self ]) do: [ :value | anEncoder encodeReferenceTo: value ]! ! !FLPointerObjectCluster methodsFor: 'initialize-release' stamp: 'MaxLeske 5/3/2013 17:43' prior: 21633975! initializeAnalyzing: aClass super initializeAnalyzing: aClass. variablesMapping := FLVariablesMapping newAnalyzing: theClass references: self references! ! !FLVariableObjectCluster commentStamp: 'MartinDias 5/30/2011 01:25' prior: 82950448! I am a generic cluster for objects with indexable variables.! !FLVariableObjectCluster methodsFor: 'analyzing' stamp: 'MaxLeske 5/4/2013 11:05'! add: anObject traceWith: aAnalysis "Add an object to the cluster and trace references." objects addIfNotPresent: anObject ifPresentDo: [ ^ self ]. self referencesOf: anObject do: [ :aChild || actual | actual := aChild fuelReplacement. self addReferenceFrom: anObject to: actual. aAnalysis trace: actual ]. self variablePartReferencesOf: anObject do: [ :aChild || actual | actual := aChild fuelReplacement. self addVariableReferenceFrom: anObject to: actual. aAnalysis trace: actual ]! ! !FLVariableObjectCluster methodsFor: 'analyzing' stamp: 'MaxLeske 5/4/2013 10:35'! addVariableReferenceFrom: anObject to: anotherObject | list | list := self variableReferences at: anObject ifAbsent: [ nil ]. list ifNil: [ self variableReferences at: anObject put: (list := OrderedCollection new) ]. list add: anotherObject! ! !FLVariableObjectCluster methodsFor: 'serialize/materialize' stamp: 'MaxLeske 5/4/2013 10:24' prior: 21695271! serializeReferencesVariablePartOf: anObject with: anEncoder (self variableReferences at: anObject ifAbsent: [ ^ self ]) do: [ :value | anEncoder encodeReferenceTo: value ]! ! !FLVariableObjectCluster methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 17:31'! variableReferences ^ variableReferences ifNil: [ variableReferences := FLLargeIdentityDictionary new ]! ! !FLDecoder methodsFor: 'accessing' stamp: 'MartinDias 1/5/2012 13:12' prior: 78596596! classNamed: className ^ (migrations detect: [:m | m sourceClassName = className ] ifNone: [ ^ self globalClassNamed: className ]) targetClass. ! ! !FLDecoder methodsFor: 'accessing' stamp: 'MarianoMartinezPeck 8/1/2013 10:01' prior: 21483892! variablesMappingFor: aClass | variables | variables := FLVariablesMapping materializing: aClass from: self. migrations select: [ :m | (m targetClass == aClass) or: [ aClass inheritsFrom: m targetClass ] ] thenDo: [ :m | m applyTo: variables ]. ^ variables ! ! !FLAnalysis methodsFor: 'mapping' stamp: 'MaxLeske 5/3/2013 15:35' prior: 21417006! mapAndTrace: anObject "Map an object to its cluster. Trace its references." firstMapper mapAndTrace: anObject fuelReplacement! ! !FLDelayedSerializationMock methodsFor: 'serializing' stamp: 'MaxLeske 5/2/2013 09:15'! run "Serialize the graph starting at the root object." self analysisStep. self headerStep. self instancesStep. (Delay forMilliseconds: 100) wait. self referencesStep. self trailerStep.! ! !FLSerialization methodsFor: 'private' stamp: 'MaxLeske 5/3/2013 09:27' prior: 21643807! analysisStep | anAnalysis | anAnalysis := analyzer analysisFor: root. clusters := anAnalysis clusterization clusters. encoder objectCount: anAnalysis clusterization objectCount ! ! !FLSerialization methodsFor: 'debugging' stamp: 'MarianoMartinezPeck 9/24/2013 15:57'! clustersSortedByAmountOfObjects ^ self clusters sorted: [ :a :b | a objects size > b objects size ]! ! !FLSerialization methodsFor: 'initialize-release' stamp: 'MaxLeske 5/3/2013 17:39' prior: 21643323! initializeWith: anEncoder root: anObject analyzer: anAnalyzer self initialize. encoder := anEncoder. root := anObject fuelReplacement. analyzer := anAnalyzer.! ! !FLGZipStrategy methodsFor: 'reading' stamp: 'MaxLeske 8/5/2013 09:01' prior: 21502571! readStreamDo: aValuable "Evaluates the argument with a read stream. Answers the result." targetStrategy readStreamDo: [:aStream | ^ GZipReadStream with: aStream do: aValuable] ! ! !FLGZipStrategy methodsFor: 'writing' stamp: 'MaxLeske 8/5/2013 09:01' prior: 21502833! writeStreamDo: aValuable "Evaluates the argument with a write stream. Answers the result." targetStrategy writeStreamDo: [:aStream | ^ GZipWriteStream with: aStream do: aValuable] ! ! !FLSimpleCollectionCluster methodsFor: 'serialize/materialize' stamp: 'MaxLeske 5/3/2013 09:49' prior: 21664204! serializeReferencesOf: anObject with: anEncoder | refs | refs := self references at: anObject ifAbsent: [ ^ self ]. anEncoder encodePositiveInteger: refs first. refs allButFirst do: [ :each | anEncoder encodeReferenceTo: each ] ! ! !FLBasicSerializationTest methodsFor: 'tests-graph-modification' stamp: 'MaxLeske 5/3/2013 17:38'! testFuelReplacement | object | self assert: (self resultOfSerializeAndMaterialize: FLReplacementClassMock) equals: nil. self assert: (self resultOfSerializeAndMaterialize: {FLReplacementClassMock}) equals: { nil }. object := FLReplacementMock new ignoreMe; yourself. self assert: (self resultOfSerializeAndMaterialize: {object}) equals: { nil }. object dontIgnoreMe. self assert: (self resultOfSerializeAndMaterialize: {object}) equals: { object }! ! !FLProcessSerializationTest methodsFor: 'running' stamp: 'MaxLeske 5/4/2013 16:17'! setUpSerializer ^ serializer := FLDelayedSerializerMock newDefault! ! !FLProcessSerializationTest methodsFor: 'tests' stamp: 'MaxLeske 5/2/2013 09:20'! testSerializingShortDelay | process | process := [ 2 timesRepeat: [ | d | d := Delay forMilliseconds: 50. d wait ] ] forkAt: Processor userBackgroundPriority. self shouldnt: [ self serialize: process ] raise: FLObjectNotFound! ! !FLDictionaryCollectionCluster methodsFor: 'serialize/materialize' stamp: 'MaxLeske 5/3/2013 09:54' prior: 21489623! serializeReferencesOf: anObject with: anEncoder | refs | refs := self references at: anObject ifAbsent: [ ^ self ]. anEncoder encodePositiveInteger: refs first. refs allButFirst do: [ :value | anEncoder encodeReferenceTo: value ] ! ! !FLBufferedWriteStream methodsFor: 'private' stamp: 'MaxLeske 10/29/2013 21:51' prior: 75657392! copyWordObjectToBuffer: aWordObject | blt | blt := (BitBlt toForm: (Form new hackBits: self buffer)) sourceForm: (Form new hackBits: aWordObject). blt combinationRule: Form over. "store" blt sourceX: 0; sourceY: 0; height: aWordObject byteSize // 4; width: 4. blt destX: 0; destY: position // 4. blt copyBits! ! !FLBufferedWriteStream methodsFor: 'writing' stamp: 'MartinDias 2/20/2014 00:26' prior: 21463357! nextWordsPut: aWordObject | byteSize | byteSize := aWordObject basicSize * 4. "Ensure we are at bigger than the words added, with size next power-of-two" byteSize > buffer size ifTrue: [ self sizeBuffer: 1 << (byteSize highBit)]. "BitBlt needs word-aligned access of object. Flushing the buffer is a very good idea because after the position will be zero, which is word aligned. Word objects always have a full number of words of data to write. (otherwise they'd be variableByte objects or something :P) So as long as the size you write per instance also takes N words, the position will always be aligned (except when writing the first object of a cluster) . After that, we flush when an object larger than current buffer is encountered (statistically rare), or if the buffer is full (which we do anyways). Finally, we also need enough free space in the buffer" ((position bitAnd: 3) = 0 and: [byteSize < self bufferFreeSize]) ifFalse: [self flushBuffer]. self copyWordObjectToBuffer: aWordObject. position := position + byteSize.! ! !FLCompiledMethodCluster class methodsFor: 'class initialization' stamp: 'MaxLeske 11/6/2013 09:11' prior: 21481491! initialize self setTrailerWithSourceCode! ! !PositionableStream class methodsFor: '*FuelTests' stamp: 'MaxLeske 8/5/2013 09:00'! with: aCollectionOrStream do: aBlock "Evaluates a block with a new stream based on the collection or stream. Answers the result of the block evaluation. Follows the style of FileStream>>fileNamed:do:." | aStream | aStream := self on: aCollectionOrStream. [ ^ aBlock value: aStream ] ensure: [ aStream close ]! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'MaxLeske 11/6/2013 12:18' prior: 44509517! duringTestCompileSilently: code ^ self duringTestCompileSilently: code storeSource: true! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'MaxLeske 11/6/2013 12:20' prior: 44508604! duringTestCompileSilently: code classified: aCategory ^ self duringTestCompileSilently: code storeSource: true classified: aCategory! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'MaxLeske 11/6/2013 12:20'! duringTestCompileSilently: code storeSource: storeSource ^ self duringTestCompileSilently: code storeSource: storeSource classified: ''! ! !TClassDescription methodsFor: '*FuelTests' stamp: 'MaxLeske 11/6/2013 12:21'! duringTestCompileSilently: code storeSource: storeSource classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ [ self compile: code classified: (aCategory ifNil: [ '' ]) withStamp: nil notifying: nil logSource: storeSource ] fuelValueWithoutNotifications ]! ! !FLMaterializer class methodsFor: 'protected' stamp: 'MaxLeske 2/18/2014 14:11' prior: 21595060! currentVersion "If you change this method, you should also create a version in ConfigurationOfFuel and FLSerializer >> currentVersion" ^ 193! ! !FLReplacementClassMock class methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 16:28'! fuelReplacement ^ nil! ! !FLReplacementMock methodsFor: 'comparing' stamp: 'MaxLeske 5/3/2013 11:26'! = anObject ^ self class = anObject class! ! !FLReplacementMock methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 17:34'! dontIgnoreMe ignoreMe := false! ! !FLReplacementMock methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 17:34'! fuelReplacement ^ ignoreMe ifTrue: [ nil ] ifFalse: [ self ]! ! !FLReplacementMock methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 17:34'! ignoreMe ^ ignoreMe := true! ! !FLVariablesMapping commentStamp: 'MartinDias 8/1/2011 03:01' prior: 82950589! I am used to materialize instance variables in an object, tolerating "class shape changing". Cases tolerated are: - instance variable added - instance variable order change - instance variable removed ! !FLVariablesMapping class methodsFor: 'instance creation' stamp: 'MaxLeske 5/3/2013 17:03' prior: 21698777! materializing: aClass from: aDecoder ^ self basicNew initializeWithClass: aClass; initializeMaterializingFrom: aDecoder; yourself.! ! !FLVariablesMapping class methodsFor: 'instance creation' stamp: 'MaxLeske 5/3/2013 17:42'! newAnalyzing: anAnalysis references: aCollection ^ self basicNew initializeWithClass: anAnalysis references: aCollection; initializeAnalyzing; yourself! ! !FLVariablesMapping methodsFor: 'initialize-release' stamp: 'MaxLeske 5/3/2013 17:03'! initializeWithClass: aClass self initialize. theClass := aClass! ! !FLVariablesMapping methodsFor: 'initialize-release' stamp: 'MaxLeske 5/3/2013 17:42'! initializeWithClass: aClass references: aCollection self initialize. theClass := aClass. references := aCollection! ! !FLVariablesMapping methodsFor: 'accessing' stamp: 'MaxLeske 5/3/2013 17:41'! references ^ references! ! !FLVariablesMapping methodsFor: 'serialize/materialize' stamp: 'MaxLeske 5/3/2013 17:41' prior: 21697914! serializeReferencesOf: anObject with: anEncoder (self references at: anObject ifAbsent: [ ^ self ]) do: [ :value | anEncoder encodeReferenceTo: value ].! ! !Object methodsFor: '*Fuel' stamp: 'MaxLeske 5/3/2013 15:18'! fuelReplacement ^ self! ! !FLDelayedSerializerMock methodsFor: 'protected' stamp: 'MaxLeske 5/4/2013 16:17'! setDefaultSerialization ^ serializationFactory := [:anObject :anEncoder | (FLDelayedSerializationMock with: anEncoder root: anObject analyzer: self analyzer) run; yourself ]! ! !FLSerializer class methodsFor: 'protected' stamp: 'MaxLeske 2/18/2014 14:11' prior: 21661312! currentVersion "If you change this method, you should also create a version in ConfigurationOfFuel and FLMaterializer >> currentVersion" ^ 193! ! FLRectangleCluster removeSelector: #serializeReferencesOf:with:! FLPointCluster removeSelector: #serializeReferencesOf:with:! FLVariableObjectCluster removeSelector: #referencesOf:do:! PositionableStream class removeSelector: #on:do:! FLVariablesMapping removeSelector: #initializeWith:! FLVariablesMapping class removeSelector: #newAnalyzing:! FLMethodContextSerializationTest removeSelector: #testFuelShouldIgnoreFuel! !Trait method! duringTestCompileSilently: code ^ self duringTestCompileSilently: code storeSource: true! ! !Trait method! duringTestCompileSilently: code ^ self duringTestCompileSilently: code storeSource: true! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ self duringTestCompileSilently: code storeSource: true classified: aCategory! ! !Trait method! duringTestCompileSilently: code classified: aCategory ^ self duringTestCompileSilently: code storeSource: true classified: aCategory! ! !Trait method! duringTestCompileSilently: code storeSource: storeSource ^ self duringTestCompileSilently: code storeSource: storeSource classified: ''! ! !Trait method! duringTestCompileSilently: code storeSource: storeSource ^ self duringTestCompileSilently: code storeSource: storeSource classified: ''! ! !Trait method! duringTestCompileSilently: code storeSource: storeSource classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ [ self compile: code classified: (aCategory ifNil: [ '' ]) withStamp: nil notifying: nil logSource: storeSource ] fuelValueWithoutNotifications ]! ! !Trait method! duringTestCompileSilently: code storeSource: storeSource classified: aCategory ^ Author useAuthor: 'TestsAuthor' during: [ [ self compile: code classified: (aCategory ifNil: [ '' ]) withStamp: nil notifying: nil logSource: storeSource ] fuelValueWithoutNotifications ]! ! "Fuel"! "FuelHacks"! "FuelTests"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-SvenVanCaekenberghe.959.mcz') load. ScriptLoader new update30790. ! ----End fileIn----! ----QUIT----2014-03-05T23:47:34.810934+01:00 Pharo.image priorSource: 32606209! ----STARTUP----2014-03-05T23:47:35.023902+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-05T23:47:39.665903+01:00 Pharo.image priorSource: 32643135! ----STARTUP----2014-03-05T23:53:39.694029+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-05T23:53:39.960027+01:00 Pharo-30790.image priorSource: 32643332! ----STARTUP----2014-03-07T11:41:38.614066+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/7/2014 11:37' prior: 82938161! commentForCurrentUpdate ^ '13043 losing menu title when building menus with spec https://pharo.fogbugz.com/f/cases/13043 12954 Workspace Undeclared variable change broken: missing TextMorphForEditView>>#setText: https://pharo.fogbugz.com/f/cases/12954 13049 Dragging and dropping a class to another package fails: #MNU receiver of includesCategory: is nil https://pharo.fogbugz.com/f/cases/13049 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/7/2014 11:38'! script444 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-SvenVanCaekenberghe.1728.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.701.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.482.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.318.mcz Spec-Debugger-SvenVanCaekenberghe.207.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.164.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.140.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/7/2014 11:38'! update30791 "self new update30791" self withUpdateLog: '13043 losing menu title when building menus with spec https://pharo.fogbugz.com/f/cases/13043 12954 Workspace Undeclared variable change broken: missing TextMorphForEditView>>#setText: https://pharo.fogbugz.com/f/cases/12954 13049 Dragging and dropping a class to another package fails: #MNU receiver of includesCategory: is nil https://pharo.fogbugz.com/f/cases/13049 '. self loadTogether: self script444 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCSourceCodeChanged commentStamp: 'BenComan 3/6/2014 02:40' prior: 0! An OCSourceCodeChanged is used to pass corrected source code from OCUndeclaredVariableWarning back to OpalCompiler>>compile so that parsing can be restarted,. Introduced to resolve Case 12954.! !OCSourceCodeChanged commentStamp: 'BenComan 3/6/2014 02:40' prior: 82988099! An OCSourceCodeChanged is used to pass corrected source code from OCUndeclaredVariableWarning back to OpalCompiler>>compile so that parsing can be restarted,. Introduced to resolve Case 12954.! !OCSourceCodeChanged methodsFor: 'accessing' stamp: 'BenComan 3/3/2014 09:06'! newSourceCode ^newSourceCode! ! !OCSourceCodeChanged methodsFor: 'accessing' stamp: 'BenComan 3/3/2014 09:06'! newSourceCode: aString newSourceCode := aString! ! !MorphicMenuAdapter methodsFor: 'private' stamp: 'StephaneDucasse 3/5/2014 10:09' prior: 82557117! buildWidgetPopup widget := SpecInterpreter interpretASpec: self class popupSpec model: self. widget title: self title. "not sure about this line because the popupSpec since to manage title. But it works like that." self menuGroups do: [ :group || items | items := group buildWithSpec. items do: [ :item | widget addMenuItem: item ] ] separatedBy: [ widget addLine ]. ^ widget! ! !OpalCompiler methodsFor: 'public access' stamp: 'BenComan 3/3/2014 14:56' prior: 79092959! compile | cm | [ [ ast := self parse. self doSemanticAnalysis. ] on: OCSourceCodeChanged do: [ :notification | self source: notification newSourceCode. notification retry. ]. cm := ast generate: self compilationContext compiledMethodTrailer ] on: SyntaxErrorNotification do: [ :exception | self compilationContext requestor ifNotNil: [ self compilationContext requestor notify: exception errorMessage , ' ->' at: exception location in: exception errorCode. ^ self compilationContext failBlock value ] ifNil: [ exception pass ]]. ^cm! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'BenComan 3/3/2014 09:17' prior: 82152427! openMenuIn: aBlock | alternatives labels actions lines caption choice name interval | interval := node sourceInterval. name := node name. alternatives := self possibleVariablesFor: name. labels := OrderedCollection new. actions := OrderedCollection new. lines := OrderedCollection new. name first isLowercase ifTrue: [labels add: 'Declare new temporary variable'. actions add: [self declareTempAndPaste: name]. labels add: 'Declare new instance variable'. actions add: [self declareInstVar: name]] ifFalse: [labels add: 'Define new class'. actions add: [self defineClass: name]. labels add: 'Declare new global'. actions add: [self declareGlobal]. labels add: 'Declare new class variable'. actions add: [self declareClassVar]]. lines add: labels size. alternatives do: [:each | labels add: each. actions add: [ self substituteVariable: each atInterval: interval. (OCSourceCodeChanged new newSourceCode: self requestor text) signal. ]]. lines add: labels size. labels add: 'Cancel'. caption := 'Unknown variable: ' , name , ' please correct, or cancel:'. choice := aBlock value: labels value: lines value: caption. choice ifNotNil: [self resume: (actions at: choice ifAbsent: [compilationContext failBlock value]) value]! ! !OCUndeclaredVariableWarning methodsFor: 'correcting' stamp: 'BenComan 3/3/2014 14:28'! substituteVariable: varName atInterval: anInterval self substituteWord: varName wordInterval: anInterval offset: 0. self methodNode source: self requestor text. node replaceWith:((RBVariableNode named: varName) binding: (node owningScope lookupVar: varName)). ^ (node owningScope lookupVar: varName) ifNil: [self error: 'should be found'].! ! !AbstractNautilusUI methodsFor: 'system announcements' stamp: 'NicolaiHess 3/7/2014 10:51' prior: 82255616! classRecategorized: anAnnouncement window ifNil: [ ^ self ]. window isDisplayed ifFalse: [ ^ self ]. self selectedPackage ifNotNil:[:selection | ({ anAnnouncement oldCategory. anAnnouncement newCategory } anySatisfy: [ :each | selection includesCategory: each ]) ifTrue: [ self updateBothView ]]! ! !PluggableMenuSpec methodsFor: '*Spec-Core' stamp: 'StephaneDucasse 3/5/2014 10:10' prior: 80965476! addToMenuModel: aMenuModel | groups tmp | groups := OrderedCollection new. self label ifNotNil: [ aMenuModel title: self label ]. "only change the title when a new one is specified" tmp := OrderedCollection new. self items do: [ :each | tmp add: each. each separator ifTrue: [ groups add: tmp copy. tmp removeAll ] ]. tmp ifNotEmpty: [ groups add: tmp copy ]. groups do: [ :each | aMenuModel addGroup: [ :group | each do: [ :spec | group addItem: [ :item | item fromSpec: spec ] ] ] ]! ! RBVariableNode removeSelector: #substituteVariableNamed:! OCUndeclaredVariableWarning removeSelector: #substituteVariableNamed:! "Nautilus"! "OpalCompiler-Core"! "Spec-Core"! "Spec-MorphicAdapters"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.960.mcz') load. ScriptLoader new update30791. ! ----End fileIn----! ----QUIT----2014-03-07T11:41:44.450065+01:00 Pharo.image priorSource: 32643529! ----STARTUP----2014-03-07T11:41:44.652887+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-07T11:41:49.028886+01:00 Pharo.image priorSource: 32662091! ----STARTUP----2014-03-07T11:47:32.680989+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-07T11:47:32.950999+01:00 Pharo-30791.image priorSource: 32662288! ----STARTUP----2014-03-07T13:49:29.857032+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/7/2014 13:47' prior: 82975474! commentForCurrentUpdate ^ '13053 Sync image with repo https://pharo.fogbugz.com/f/cases/13053 13002 StoreInstVar: is missing in IRPrinter https://pharo.fogbugz.com/f/cases/13002 13003 Opal cannot optimize twice an IRMethod https://pharo.fogbugz.com/f/cases/13003'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/7/2014 13:47'! script445 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-SvenVanCaekenberghe.1728.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.701.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.484.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.318.mcz Spec-Debugger-SvenVanCaekenberghe.207.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.164.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.140.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/7/2014 13:47'! update30792 "self new update30792" self withUpdateLog: '13053 Sync image with repo https://pharo.fogbugz.com/f/cases/13053 13002 StoreInstVar: is missing in IRPrinter https://pharo.fogbugz.com/f/cases/13002 13003 Opal cannot optimize twice an IRMethod https://pharo.fogbugz.com/f/cases/13003'. self loadTogether: self script445 merge: false. self flushCaches. ! ! "ScriptLoader30"! !IRInterpreter methodsFor: 'instructions' stamp: 'ClementBera 2/28/2014 10:23'! storeInstVar: index ! ! !IRPrinter methodsFor: 'instructions' stamp: 'ClementBera 2/28/2014 10:23'! storeInstVar: index stream nextPutAll: 'storeInstVar: '. index printOn: stream.! ! !IRMethod methodsFor: 'optimizing' stamp: 'ClementBera 2/28/2014 10:24' prior: 34884813! removeEmptyStart (startSequence size = 1 and: [ startSequence last isPushClosureCopy not ]) ifTrue: [ "startSeq is just unconditional jump, forget it" startSequence := startSequence last destination]. ! ! "OpalCompiler-Core"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.961.mcz') load. ScriptLoader new update30792. ! ----End fileIn----! ----QUIT----2014-03-07T13:49:33.251523+01:00 Pharo.image priorSource: 32662485! ----STARTUP----2014-03-07T13:49:33.458467+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-07T13:49:38.042462+01:00 Pharo.image priorSource: 32676262! ----STARTUP----2014-03-07T13:55:22.626092+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-07T13:55:22.904092+01:00 Pharo-30792.image priorSource: 32676459! ----STARTUP----2014-03-11T12:59:41.892237+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/11/2014 12:56' prior: 82994430! commentForCurrentUpdate ^ '5041 ContextPart>>#runUntilErrorOrReturnFrom: https://pharo.fogbugz.com/f/cases/5041 12722 #ifNil:#ifNotNil: must return a value? https://pharo.fogbugz.com/f/cases/12722 12699 Debugger clears selection on update https://pharo.fogbugz.com/f/cases/12699 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/11/2014 12:56'! script446 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1730.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.701.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.485.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.318.mcz Spec-Debugger-MarcusDenker.209.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-SvenVanCaekenberghe.164.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.140.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-SvenVanCaekenberghe.28.mcz Zinc-Character-Encoding-Tests-SvenVanCaekenberghe.15.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.385.mcz Zinc-Resource-Meta-Core-SvenVanCaekenberghe.28.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-SvenVanCaekenberghe.16.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-SvenVanCaekenberghe.199.mcz Zinc-Zodiac-MarcusDenker.30.mcz Zodiac-Core-StephaneDucasse.34.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-StephaneDucasse.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/11/2014 12:56'! update30793 "self new update30793" self withUpdateLog: '5041 ContextPart>>#runUntilErrorOrReturnFrom: https://pharo.fogbugz.com/f/cases/5041 12722 #ifNil:#ifNotNil: must return a value? https://pharo.fogbugz.com/f/cases/12722 12699 Debugger clears selection on update https://pharo.fogbugz.com/f/cases/12699 '. self loadTogether: self script446 merge: false. self flushCaches. ! ! "ScriptLoader30"! !OCASTTranslatorForEffect methodsFor: 'visitor-double dispatching' stamp: 'CamilleTeruel 3/7/2014 11:17'! visitLiteralArrayNode: aLiteralNode "when visiting a literal array for effect, we could push it and then pop it, but we do nothing"! ! !ContextPart methodsFor: 'controlling' stamp: 'cb 3/7/2014 13:51' prior: 45219812! runUntilErrorOrReturnFrom: aSender "ASSUMES aSender is a sender of self. Execute self's stack until aSender returns or an unhandled exception is raised. Return a pair containing the new top context and a possibly nil exception. The exception is not nil if it was raised before aSender returned and it was not handled. The exception is returned rather than openning the debugger, giving the caller the choice of how to handle it." "Self is run by jumping directly to it (the active process abandons thisContext and executes self). However, before jumping to self we insert an ensure block under aSender that jumps back to thisContext when evaluated. We also insert an exception handler under aSender that jumps back to thisContext when an unhandled exception is raised. In either case, the inserted ensure and exception handler are removed once control jumps back to thisContext." | error context here topContext aSendersSender | here := thisContext. aSendersSender := aSender sender. "Insert ensure and exception handler contexts under aSender" error := nil. context := aSender insertSender: (ContextPart contextOn: UnhandledError, Halt do: [:ex | error ifNil: [ "this is ugly but it fixes the side-effects of not sending an Unhandled error on Halt" error := (ex isKindOf: Halt) ifTrue: [ ex ] ifFalse: [ ex exception ]. topContext := thisContext. ex resumeUnchecked: here jump ] ifNotNil: [ ex pass ]]). context := context insertSender: (ContextPart contextEnsure: [error ifNil: [ topContext := thisContext. here jump] ]). self jump. "Control jumps to self" "Control resumes here once above ensure block or exception handler is executed" ^ error ifNil: [ "No error was raised, remove ensure context by stepping until popped" [context isDead or: [aSender isDead]] whileFalse: [topContext := topContext stepToCallee]. {aSender isDead ifTrue: [| retValue | retValue := (context method == (BlockClosure >> #ensure:) or: [context method == (BlockClosure >> #ifCurtailed:)]) ifTrue: [context tempAt: 3]. "returnValue in ensure: and result in ifCurtailed:" aSendersSender push: retValue. aSendersSender] ifFalse: [topContext]. nil} ] ifNotNil: [ "Error was raised, remove inserted above contexts then return signaler context" aSender terminateTo: context sender. "remove above ensure and handler contexts" {topContext. error} ]. ! ! !SpecDebugger methodsFor: 'updating' stamp: 'BenComan 3/7/2014 01:29'! updateContextInspectorFromContext: aContext | oldSelection newSelectionIndex | oldSelection := contextInspector list selectedItem. contextInspector inspect: aContext. newSelectionIndex := 1. oldSelection ifNotNil: [ contextInspector list getItems withIndexDo: [ :item :index | item label = oldSelection label ifTrue: [ newSelectionIndex := index ] ]. ]. contextInspector list setSelectedIndex: newSelectionIndex. ! ! !SpecDebugger methodsFor: 'updating' stamp: 'BenComan 3/7/2014 01:35' prior: 76922008! updateInspectorsFromContext: aContext self updateContextInspectorFromContext: aContext. self updateReceiverInspectorFromContext: aContext.! ! !SpecDebugger methodsFor: 'updating' stamp: 'BenComan 3/7/2014 01:48'! updateReceiverInspectorFromContext: aContext | receiver oldSelection newSelectionIndex | oldSelection := receiverInspector inspector ifNotNil: [ :inspector | inspector list selectedItem ]. receiver := aContext ifNotNil: [ aContext home receiver ]. receiverInspector inspect: receiver. newSelectionIndex := 1. oldSelection ifNotNil: [ receiverInspector inspector list getItems withIndexDo: [ :item :index | item label = oldSelection label ifTrue: [ newSelectionIndex := index ] ]. ]. receiverInspector inspector list setSelectedIndex: newSelectionIndex. ! ! "Kernel"! "OpalCompiler-Core"! "Spec-Debugger"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.962.mcz') load. ScriptLoader new update30793. ! ----End fileIn----! ----QUIT----2014-03-11T12:59:48.253343+01:00 Pharo.image priorSource: 32676656! ----STARTUP----2014-03-11T12:59:48.468819+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-11T12:59:53.13475+01:00 Pharo.image priorSource: 32694065! ----STARTUP----2014-03-11T13:05:44.178924+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-11T13:05:44.436924+01:00 Pharo-30793.image priorSource: 32694262! ----STARTUP----2014-03-12T11:35:37.953467+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/12/2014 11:31' prior: 83008602! commentForCurrentUpdate ^ '13052 EyeTreeInspector does not respect the description of EyeDynamicElement https://pharo.fogbugz.com/f/cases/13052 13058 Smalltalk tools explore does not work where Smalltalk tools inspect does. https://pharo.fogbugz.com/f/cases/13058 12989 Zn Update https://pharo.fogbugz.com/f/cases/12989/'! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/12/2014 11:32'! script447 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1730.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.701.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.485.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.318.mcz Spec-Debugger-MarcusDenker.209.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.167.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.140.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.631.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-MarcusDenker.31.mcz Zinc-Character-Encoding-Tests-MarcusDenker.18.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.393.mcz Zinc-Resource-Meta-Core-MarcusDenker.33.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-MarcusDenker.21.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.205.mcz Zinc-Zodiac-MarcusDenker.31.mcz Zodiac-Core-MarcusDenker.31.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-MarcusDenker.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/12/2014 11:32'! update30794 "self new update30794" self withUpdateLog: '13052 EyeTreeInspector does not respect the description of EyeDynamicElement https://pharo.fogbugz.com/f/cases/13052 13058 Smalltalk tools explore does not work where Smalltalk tools inspect does. https://pharo.fogbugz.com/f/cases/13058 12989 Zn Update https://pharo.fogbugz.com/f/cases/12989/'. self loadTogether: self script447 merge: false. self flushCaches. ! ! "ScriptLoader30"! !ZnCharacterEncoder commentStamp: 'SvenVanCaekenberghe 2/24/2014 15:41' prior: 42808253! I am ZnCharacterEncoder, I encode and decode Character objects to and from a binary stream. I am an abstract class with following protocol: #nextFromStream: #nextPut:toStream: #encodedByteCountFor: #backOnStream: The first two are compatible with TextConverter and subclasses. I add some convenience methods: #encodeString: #decodeBytes: #encodedByteCountForString: Contrary to older encoders, I work strictly from strings to bytes and vice versa and I will throw errors instead of silently ignoring them. I also implement optimized bulk operations: #next:putAll:startingAt:toStream: #readInto:startingAt:count:fromStream: Part of Zinc HTTP Components.! !ZnPercentEncoder commentStamp: 'SvenVanCaekenberghe 2/14/2014 14:06' prior: 42822222! I am ZnPercentEncoder. I implement RFC 3986 percent encoding and decoding. All characters that are not part of a safe set are encoded using a percent (%) followed by a two digit hexadecimal number of a byte value. Non-ASCII characters are first encoded, normally using UTF-8. My #encode: and #decode: messages work from String to String. My decoder will accept + as an encoding for a space by default. See also http://en.wikipedia.org/wiki/Percent-encoding Part of Zinc HTTP Components ! !ZnDispatcherDelegateTest methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:14' prior: 43965705! withServerDo: block | server | server := ZnServer on: 1700 + 32 atRandom. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 2/14/2014 15:07' prior: 55634152! decodePercent: string ^ ZnPercentEncoder new decodePlusAsSpace: false; decode: string! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 2/14/2014 15:07'! decodePercentForQuery: string ^ ZnPercentEncoder new decodePlusAsSpace: true; decode: string! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 2/14/2014 15:07' prior: 55634573! parseQueryFrom: stream | string index fields | fields := ZnMultiValueDictionary new. [ stream atEnd ] whileFalse: [ string := stream upTo: $&. index := string indexOf: $=. index > 0 ifFalse: [ fields at: (self decodePercentForQuery: string) put: nil ] ifTrue: [ fields at: (self decodePercentForQuery: (string copyFrom: 1 to: index - 1)) add: (self decodePercentForQuery: (string copyFrom: index + 1 to: string size)) ] ]. ^ fields! ! !ZnResourceMetaUtils class methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 2/15/2014 10:21'! queryKeyValueSafeSet "When a query is interpreted as a list of key=value&.. pairs, it is better to encode = and & and leave them out of the safe set. Furthermore, since + is interpreted as space in the query part, it is unsafe as well" ^ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!!$''()*,;:@/?'! ! !ZnResourceMetaUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 12/12/2013 21:33' prior: 75611580! writeQueryFields: dictionary withTextEncoding: encoding on: stream | first | first := true. dictionary keysAndValuesDo: [ :key :value | first ifFalse: [ stream nextPut: $& ]. first := false. stream nextPutAll: (self encodePercent: key safeSet: #queryKeyValueSafeSet encoding: encoding). value ifNotNil: [ stream nextPut: $=; nextPutAll: (self encodePercent: value safeSet: #queryKeyValueSafeSet encoding: encoding) ] ]! ! !ZnNullEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 15:38'! backOnStream: stream stream back! ! !ZnNetworkingUtils class methodsFor: 'constants' stamp: 'SvenVanCaekenberghe 3/2/2014 22:42' prior: 55605326! socketStreamTimeout "Access the current timeout in seconds for SocketStream IO" ^ ZnConnectionTimeout value ifNil: [ self defaultSocketStreamTimeout ]! ! !ZdcPluginSSLSession methodsFor: 'initialize' stamp: 'SvenVanCaekenberghe 6/28/2012 09:27' prior: 48964068! initialize "Initialize the receiver" [ handle := self primitiveSSLCreate ] on: PrimitiveFailed do: [ :exception | "Give a more human friendly error message" ZdcPluginMissing signal ] ! ! !AbstractEyeElement methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 3/7/2014 13:21' prior: 68609625! longLabel "This is used by EyeTreeInspector" | description | description := self description. description size > 150 ifTrue: [ description := description first: 150 ]. ^ self label ifNotNil: [ :label | label , ': ' , description ] ifNil: [ description ]! ! !EyeTreeInspector methodsFor: 'api' stamp: 'NicolaiHess 3/11/2014 13:52' prior: 68593549! childrenForObject: anObject self flag: 'Minor Ugliness to filter out the self and instavr node'. ^ (EyeInspector inspector: anObject) elements reject: [ :element | (element isKindOf: SelfEyeElement) or: [ element isKindOf: AllInstVarsEyeElement ] ]! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/13/2014 22:27'! testNoSchemeColonInPath | url | url := '/foo:bar' asZnUrl. self deny: url hasScheme. self deny: url hasHost. self deny: url hasPort. self deny: url hasQuery. self deny: url hasFragment. self assert: url hasPath. self assert: url firstPathSegment equals: 'foo:bar'! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/15/2014 12:34'! testPlusHandling "While percent decoding, a + is translated as a space only in the context of application/x-www-form-urlencoded get/post requests: http://en.wikipedia.org/wiki/Percent-encoding#The_application.2Fx-www-form-urlencoded_type ZnUrl interprets its query part as key value pairs where this translation is applicable, even though strictly speaking + (and =, &) are plain unreserved characters in the query part" "$+ is not special in the path part of the URL and it remains itself" self assert: 'http://localhost/foo+bar' asZnUrl firstPathSegment equals: 'foo+bar'. self assert: 'http://localhost/foo+bar' asZnUrl printString equals: 'http://localhost/foo+bar'. "$+ gets decoded to space in the interpreted query part of the URL, and becomes an encoded space if needed" self assert: ('http://localhost/test?q=foo+bar' asZnUrl queryAt: #q) equals: 'foo bar'. self assert: 'http://localhost/test?q=foo+bar' asZnUrl printString equals: 'http://localhost/test?q=foo%20bar'. "to pass $+ as $+ in a query, it has to be encoded" self assert: 'http://localhost/test?q=foo%2Bbar' asZnUrl printString equals: 'http://localhost/test?q=foo%2Bbar'! ! !ZnUrlTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/12/2013 21:26'! testQueryEncodingExtended | url | url := 'http://server.com/foo' asZnUrl. url queryAt: 'one' put: '1'; queryAt: 'equalSign' put: 'a=0'; queryAt: 'ampersand' put: 'm&m'; queryAt: 'questionMark' put: 'x?-1'. url := url asString asZnUrl. self assert: (url queryAt: 'one') equals: '1'. self assert: (url queryAt: 'equalSign') equals: 'a=0'. self assert: (url queryAt: 'ampersand') equals: 'm&m'. self assert: (url queryAt: 'questionMark') equals: 'x?-1' ! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 3/2/2014 18:40' prior: 55339736! accept: mimeTypeObject "Set the Accept HTTP header to mimeTypeObject for the current request." | mimeType | mimeType := mimeTypeObject asZnMimeType. self request setAccept: mimeType! ! !ZnClient methodsFor: 'options' stamp: 'SvenVanCaekenberghe 3/2/2014 18:50'! autoResetEntityMethods "Return a collection of HTTP methods for which to auto #resetEntity. The default is to do this only for HEAD and DELETE, although most people would want it for GET too, but this can be used for forms" ^ self optionAt: #autoResetEntityMethods ifAbsent: [ #(HEAD DELETE) ]! ! !ZnClient methodsFor: 'options' stamp: 'SvenVanCaekenberghe 3/2/2014 18:51'! autoResetEntityMethods: methods "Set the collection of HTTP methods for which to auto #resetEntity. The default is to do this only for HEAD and DELETE, although most people would want it for GET too, but this can be used for forms" ^ self optionAt: #autoResetEntityMethods put: methods! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 3/2/2014 18:42' prior: 55343744! headerAddAll: keyedCollection "Add all key/value pairs of keyedCollection as headers. Note that #addAllMulti: is used" request headers addAll: keyedCollection ! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 3/2/2014 18:54' prior: 55345001! method: httpMethod "Set the HTTP method of the current request to httpMethod. An uppercase symbol such as #GET is expected. Note that for all methods in #autoResetEntityMethods #resetEntity is called automatically, since you don't want the entity of a previous request to be sent again" (self autoResetEntityMethods includes: httpMethod) ifTrue: [ self resetEntity ]. request method: httpMethod! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 3/2/2014 18:47' prior: 55347494! resetEntity "Make sure that the current request does not hold an entity from a previous request. This is sometimes necessary after a POST or PUT. This method will be called automatically by #method: for certain requests." (request notNil and: [ request hasEntity ]) ifTrue: [ request resetEntity: nil ]! ! !ZnClient methodsFor: 'accessing request' stamp: 'SvenVanCaekenberghe 3/2/2014 18:39' prior: 55348193! setBasicAuthenticationUsername: username password: password "Set the username/password for basic authenticationfor the current request." self request setBasicAuthenticationUsername: username password: password ! ! !ZnUrl methodsFor: 'parsing' stamp: 'SvenVanCaekenberghe 2/12/2014 23:37' prior: 75628658! parseFrom: string defaultScheme: defaultScheme | start end index | start := 1. end := string size. (index := string indexOf: $#) > 0 ifTrue: [ self fragment: (self decodePercent: (string copyFrom: index + 1 to: end)). end := index - 1 ]. (index := string indexOf: $?) > 0 ifTrue: [ self query: (ZnResourceMetaUtils parseQueryFrom: (ReadStream on: string from: index + 1 to: end)). end := index - 1 ]. (index := string indexOfSubCollection: '://') > 0 ifTrue: [ self scheme: (string copyFrom: 1 to: index - 1). start := index + 3 ] ifFalse: [ ((index := string indexOf: $:) > 0 and: [ self class schemesNotUsingDoubleSlash includes: (string copyFrom: 1 to: index - 1) ]) ifTrue: [ self scheme: (string copyFrom: 1 to: index - 1). start := index + 1 ] ifFalse: [ defaultScheme ifNotNil: [ self scheme: defaultScheme ] ] ]. self hasScheme ifTrue: [ (index := string indexOf: $/ startingAt: start) > 0 ifTrue: [ self parseAuthority: string from: start to: index - 1. start := index ] ifFalse: [ ^ self parseAuthority: string from: start to: end ] ]. self parsePath: (ReadStream on: string from: start to: end)! ! !ZdcAbstractSocketStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/18/2011 15:59' prior: 48980670! initialize timeout := 5. debug := false. self initializeBuffers ! ! !ZnValueDelegate class methodsFor: 'instance creation' stamp: 'SvenVanCaekenberghe 3/2/2014 22:36' prior: 55793106! with: object ^ self new object: object; yourself! ! !ZnMimeTypeTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 12/29/2013 11:15' prior: 77125961! testIsBinary self assert: ZnMimeType applicationOctetStream isBinary. self assert: ZnMimeType imagePng isBinary. self deny: ZnMimeType textPlain isBinary. self deny: ZnMimeType textHtml isBinary. self deny: ZnMimeType textJavascript isBinary. self deny: ZnMimeType applicationJson isBinary. #( 'text/plain;charset=ascii' 'application/json;charset=utf-8' 'application/vnd.com.runkeeper.user+json;charset=ISO-8859-1' 'application/xml-dtd' 'application/xslt+xml' ) do: [ :each | self deny: each asZnMimeType isBinary ]! ! !ZnPercentEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/14/2014 14:23'! testDecodePlusAsSpace | encoder | encoder := ZnPercentEncoder new. self assert: (encoder decode: '+') equals: ' '. self assert: encoder decodePlusAsSpace. encoder decodePlusAsSpace: false. self assert: (encoder decode: '+') equals: '+'. self deny: encoder decodePlusAsSpace! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/24/2014 15:58'! testUTF16Back | encoder stream | encoder := ZnUTF16Encoder new. stream := (encoder encodeString: 'Les élèves Françaises') readStream. self should: [ encoder backOnStream: stream ] raise: Error. 4 timesRepeat: [ encoder nextFromStream: stream ]. self assert: (encoder nextFromStream: stream) equals: $é. encoder backOnStream: stream. self assert: (encoder nextFromStream: stream) equals: $é. 10 timesRepeat: [ encoder nextFromStream: stream ]. 13 timesRepeat: [ encoder backOnStream: stream ]. self assert: (encoder nextFromStream: stream) equals: $s! ! !ZnCharacterEncoderTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/24/2014 15:50'! testUTF8Back | encoder stream | encoder := ZnUTF8Encoder new. stream := (encoder encodeString: 'Les élèves Françaises') readStream. self should: [ encoder backOnStream: stream ] raise: Error. 4 timesRepeat: [ encoder nextFromStream: stream ]. self assert: (encoder nextFromStream: stream) equals: $é. encoder backOnStream: stream. self assert: (encoder nextFromStream: stream) equals: $é. 10 timesRepeat: [ encoder nextFromStream: stream ]. 13 timesRepeat: [ encoder backOnStream: stream ]. self assert: (encoder nextFromStream: stream) equals: $s! ! !ZdcSecureSocketStream methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 5/18/2011 16:00' prior: 48891778! initialize super initialize. connecting := false! ! !ZnEasyTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:15' prior: 43971502! withServerDo: block | server | server := ZnServer on: 1700 + 32 atRandom. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). self assert: server isRunning & server isListening. block cull: server ] ensure: [ server stop ]! ! !ZnReadEvalPrintDelegate methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/21/2014 22:47' prior: 78680674! evaluate: string | output | output := String streamContents: [ :out | [ | compiler result | compiler := [ self class compiler ] on: MessageNotUnderstood do: [ Compiler ]. result := compiler evaluate: string. out print: result; cr ] on: Error, ParserNotification do: [ :exception | out print: exception; cr. exception signalerContext printDetails: out. exception signalerContext sender debugStack: 8 on: out ]. out cr ]. ^ String lf join: output lines! ! !ZnUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 2/24/2014 17:08' prior: 55778626! decodeBase64: string | bytes | bytes := ZnBase64Encoder new decode: string. ^ ZnNullEncoder new decodeBytes: bytes! ! !ZnUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 2/24/2014 17:07' prior: 55778763! encodeBase64: string | bytes | bytes := ZnNullEncoder new encodeString: string. ^ ZnBase64Encoder new encode: bytes! ! !ZnUtils class methodsFor: 'conversions' stamp: 'SvenVanCaekenberghe 3/2/2014 19:02' prior: 55779291! httpDate: object "Answers a string formatting object as time stamp for HTTP1.1 (RFC 1123). Eg. Sun, 06 Nov 1994 08:49:37 GMT" | utc | utc := object asDateAndTime asUTC. ^ String streamContents: [ :stream | stream nextPutAll: utc dayOfWeekAbbreviation; nextPut: $,; space. stream nextPutAll: (utc dayOfMonth printStringLength: 2 padded: true). stream space; nextPutAll: utc monthAbbreviation; space. utc year printOn: stream. stream space. utc printHMSOn: stream. stream nextPutAll: ' GMT' ]! ! !ZnMimeType methodsFor: 'testing' stamp: 'monty 12/27/2013 19:42' prior: 77121539! isBinary "Answers whether the contents of a resource described by me should be considered as binary instead of textual." | subTypes | self main = 'text' ifTrue: [ ^ false ]. (self matches: self class applicationJson) ifTrue: [ ^ false ]. self main = 'application' ifFalse: [ ^ true ]. subTypes := self sub subStrings: '+-'. ^ subTypes noneSatisfy: [ :each | #('x-javascript' 'xml' 'json') includes: each ]! ! !ZnUTF16Encoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 2/24/2014 16:01'! back16BitWordOnStream: stream | firstByte secondByte | firstByte := stream back. secondByte := stream back. ^ self isBigEndian ifTrue: [ secondByte + (firstByte << 8) ] ifFalse: [ firstByte + (secondByte << 8) ]! ! !ZnUTF16Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 16:02'! backOnStream: stream "Move back one character on stream" | word | word := self back16BitWordOnStream: stream. (word < 16rD800 or: [ word > 16rDBFF ]) ifFalse: [ self back16BitWordOnStream: stream ]! ! !ZnImageExampleDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:15' prior: 43973411! withServerDo: block | server | server := ZnServer on: 1700 + 32 atRandom. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). server delegate: ZnImageExampleDelegate new. block cull: server ] ensure: [ server stop ]! ! !ZnChunkedWriteStream methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 3/2/2014 22:21' prior: 39640282! extraHeaders ^ extraHeaders ifNil: [ extraHeaders := ZnHeaders new ]! ! !ZnDefaultServerDelegate methodsFor: 'responses' stamp: 'SvenVanCaekenberghe 2/15/2014 13:15'! formTest1: request | input html | input := request uri queryAt: #input ifAbsent: [ 'input' ]. html := '

Form Test 1

', '
', 'Input ', ' for input {1}', '
' format: { input }. ^ ZnResponse ok: (ZnEntity html: html )! ! !ZnDefaultServerDelegate methodsFor: 'initialization' stamp: 'SvenVanCaekenberghe 2/14/2014 16:17' prior: 48895403! initialize self map: 'welcome' to: #welcome:; map: 'help' to: #help:; map: 'echo' to: #echoRequest:; map: 'dw-bench' to: #dwbench:; map: 'favicon.ico' to: #favicon:; map: 'random' to: #random:; map: 'bytes' to: #bytes:; map: 'status' to: #status:; map: 'unicode' to: #unicode:; map: 'session' to: #sessionRequest:; map: 'error' to: #errorResponse:; map: 'form-test-1' to: #formTest1:; map: '/' to: 'welcome'! ! !ZnByteEncoder class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 2/24/2014 16:09'! iso88591 ^ self newForEncoding: #'iso-8859-1'! ! !ZnByteEncoder class methodsFor: 'convenience' stamp: 'SvenVanCaekenberghe 2/24/2014 16:07'! latin1 ^ self newForEncoding: #latin1! ! !ZnByteEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 15:37'! backOnStream: stream stream back! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 3/2/2014 19:07' prior: 77145609! testBasicGet self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'small.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self smallHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'small.html') asUTC. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 3/2/2014 19:07' prior: 77146459! testBasicGetLarge self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'large.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self largeHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'large.html') asUTC. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 3/2/2014 19:07' prior: 77147314! testBasicGetWide self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'wide.html'); get. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self assert: client contents equals: self wideHtml. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'large.html') asUTC. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'tests' stamp: 'SvenVanCaekenberghe 3/2/2014 19:08' prior: 55708757! testBasicHead self withServerDo: [ :server | | client | (client := ZnClient new) beOneShot; url: server localUrl; addPath: #('local-files' 'small.html'); head. self assert: client isSuccess. self assert: client response contentType = ZnMimeType textHtml. self deny: client response hasEntity. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Modification-Date')) equals: (ZnFileSystemUtils modificationTimeFor: 'small.html') asUTC. self assert: (ZnUtils parseHttpDate: (client response headers at: 'Expires')) > (DateAndTime now + 10 days). self assert: (client response headers at: 'Cache-Control') equals: (server delegate maxAgeFor: ZnMimeType textHtml) ]! ! !ZnStaticFileServerDelegateTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:16' prior: 43969410! withServerDo: block | server staticFileServerDelegate | server := ZnServer on: 1700 + 32 atRandom. [ (staticFileServerDelegate := ZnStaticFileServerDelegate new) prefixFromString: 'local-files'; directory: ZnFileSystemUtils defaultDirectory; mimeTypeExpirations: ZnStaticFileServerDelegate defaultMimeTypeExpirations. server delegate: staticFileServerDelegate. server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). block cull: server ] ensure: [ server stop ]! ! !ZnUTF8Encoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 15:38'! backOnStream: stream [ (stream back bitAnd: 2r11000000) == 2r10000000 ] whileTrue! ! !ZnCharacterEncoder commentStamp: 'SvenVanCaekenberghe 2/24/2014 15:41' prior: 83038833! I am ZnCharacterEncoder, I encode and decode Character objects to and from a binary stream. I am an abstract class with following protocol: #nextFromStream: #nextPut:toStream: #encodedByteCountFor: #backOnStream: The first two are compatible with TextConverter and subclasses. I add some convenience methods: #encodeString: #decodeBytes: #encodedByteCountForString: Contrary to older encoders, I work strictly from strings to bytes and vice versa and I will throw errors instead of silently ignoring them. I also implement optimized bulk operations: #next:putAll:startingAt:toStream: #readInto:startingAt:count:fromStream: Part of Zinc HTTP Components.! !ZnCharacterEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/24/2014 15:37'! backOnStream: stream "Move back one character on stream, assuming stream understands #back" self subclassResponsibility ! ! !ZnPercentEncoder commentStamp: 'SvenVanCaekenberghe 2/14/2014 14:06' prior: 83039582! I am ZnPercentEncoder. I implement RFC 3986 percent encoding and decoding. All characters that are not part of a safe set are encoded using a percent (%) followed by a two digit hexadecimal number of a byte value. Non-ASCII characters are first encoded, normally using UTF-8. My #encode: and #decode: messages work from String to String. My decoder will accept + as an encoding for a space by default. See also http://en.wikipedia.org/wiki/Percent-encoding Part of Zinc HTTP Components ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/14/2014 14:23' prior: 55610914! decode: string "Decode a percent encoded string and return the resulting byte array. After percent decoding I will use my character encoder to convert byte values to characters." | bytes stringStream | stringStream := string readStream. bytes := ByteArray streamContents: [ :byteStream | self decode: stringStream to: byteStream ]. ^ self characterEncoder decodeBytes: bytes! ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/14/2014 14:20' prior: 55611390! decode: stringStream to: byteStream | char | self decodePlusAsSpace. [ stringStream atEnd ] whileFalse: [ ((char := stringStream next) == $+ and: [ decodePlusAsSpace ]) ifTrue: [ byteStream nextPut: 32 ] ifFalse: [ char == $% ifTrue: [ byteStream nextPut: (self readHexFrom: stringStream) ] ifFalse: [ char charCode < 128 ifTrue: [ byteStream nextPut: char charCode ] ifFalse: [ self errorAsciiCharacterExpected ] ] ] ]! ! !ZnPercentEncoder methodsFor: 'accessing' stamp: 'SvenVanCaekenberghe 2/14/2014 14:08'! decodePlusAsSpace "Return if $+ on input should be decoded as Character space. This is normally only done application/x-www-form-urlencoded data, but is is on by default anyway." ^ decodePlusAsSpace ifNil: [ decodePlusAsSpace := true ]! ! !ZnPercentEncoder methodsFor: 'initialize-release' stamp: 'SvenVanCaekenberghe 2/14/2014 14:10'! decodePlusAsSpace: boolean "When boolean is true, $+ on input will be decoded as Character space. Else $+ is treated as a normal character, filtered by the safe set. This is normally only done application/x-www-form-urlencoded data, but is is on by default anyway." decodePlusAsSpace := boolean! ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/14/2014 14:24' prior: 55611936! encode: string "Encode string using percent encoding and return the resulting string. I will use my character encoder to convert string to bytes and then percent encode all byte values that are not in my safe set." ^ String streamContents: [ :stream | self encode: string readStream to: stream ]! ! !ZnPercentEncoder methodsFor: 'converting' stamp: 'SvenVanCaekenberghe 2/14/2014 14:24'! errorAsciiCharacterExpected ZnCharacterEncodingError signal: 'ASCII character expected'! ! !ZnPercentEncoder methodsFor: 'error handling' stamp: 'SvenVanCaekenberghe 2/14/2014 14:12'! errorHexDigitExpected ZnCharacterEncodingError signal: 'hex digit expected'! ! !ZnPercentEncoder methodsFor: 'private' stamp: 'SvenVanCaekenberghe 2/14/2014 14:12' prior: 55613371! readHexFrom: stream | first second | (stream atEnd not and: [ (first := stream next digitValue) between: 0 and: 15 ]) ifFalse: [ self errorHexDigitExpected ]. (stream atEnd not and: [ (second := stream next digitValue) between: 0 and: 15 ]) ifFalse: [ self errorHexDigitExpected ]. ^ (first << 4) + second! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:12' prior: 43965278! port ^ 1700 + 32 atRandom! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/21/2014 20:48'! runningOnWindows "Pharo 3+" [ ^ OSPlatform current isWindows ] on: MessageNotUnderstood do: [ ]. "Pharo 2-" [ ^ OSPlatform isWin32 ] on: MessageNotUnderstood do: [ ]. "Give up" ^ false! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 1/22/2014 10:17' prior: 55676190! testEchoLocalInterface | server response | (server := ZnServer on: self port) bindingAddress: NetNameResolver loopBackAddress. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). response := ZnEasy get: (server localUrl addPathSegments: #('echo' 'foo'); yourself). self assert: (response contentType = ZnMimeType textPlain). self assert: (response statusLine code = 200). self assert: (response entity contents includesSubstring: 'Zinc'). self assert: (response entity contents includesSubstring: 'foo') ] ensure: [ server stop ]! ! !ZnServerTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/15/2014 21:52'! testFormTest1 | input client | input := '1+2=3 & 2+1=3 single '' double " - cool ?'. self withServerDo: [ :server | (client := ZnClient new) beOneShot; url: server localUrl; addPathSegment: 'form-test-1'; queryAt: #input put: input; get. self assert: client isSuccess. self assert: (client contents includesSubstring: input) ]! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/21/2014 20:45' prior: 77144124! usingClassicSocketStreamsOnWindowsDo: block | originalSocketStreamClass | originalSocketStreamClass := ZnNetworkingUtils default socketStreamClass. self runningOnWindows ifTrue: [ ZnNetworkingUtils default socketStreamClass: SocketStream ]. block ensure: [ ZnNetworkingUtils default socketStreamClass: originalSocketStreamClass ]! ! !ZnServerTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:16' prior: 43965406! withServerDo: block | server | server := ZnServer on: self port. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). block cull: server ] ensure: [ server stop ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 3/2/2014 18:52' prior: 55380280! testGetAfterPost self withServerDo: [ :server | | client | server onRequestRespond: [ :request | request uri firstPathSegment = 'one' ifTrue: [ (request method = #POST and: [ request hasEntity ]) ifTrue: [ ZnResponse ok: (ZnEntity text: 'OK for one') ] ifFalse: [ ZnResponse badRequest: request ] ] ifFalse: [ request uri firstPathSegment = 'two' ifTrue: [ (request method = #GET and: [ request hasEntity not ]) ifTrue: [ ZnResponse ok: (ZnEntity text: 'OK for two') ] ifFalse: [ ZnResponse badRequest: request ] ] ifFalse: [ ZnResponse notFound: request uri ] ] ]. (client := ZnClient new) autoResetEntityMethods: #(HEAD DELETE GET); url: server localUrl; url: 'one'; entity: (ZnEntity text: 'One two three'); post. self assert: client isSuccess. self assert: client contents = 'OK for one'. client url: 'two'; get. self assert: client isSuccess. self assert: client contents = 'OK for two'. client close ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 3/2/2014 18:43'! testGetForm | client | self withServerDo: [ :server | (client := ZnClient new) url: server localUrl; addPath: 'echo'; formAt: 'username' put: 'john'; formAdd: 'password' -> 'secret'; get. self assert: client isSuccess. self assert: (client contents includesSubstring: 'john'). self assert: (client contents includesSubstring: 'secret') ]! ! !ZnClientTests methodsFor: 'testing' stamp: 'SvenVanCaekenberghe 2/25/2014 11:51' prior: 55388295! testProgress "[ :bar | bar title: 'Downloading Sources...'. [ ZnClient new url: 'http://files.pharo.org/image/PharoV20.sources'; signalProgress: true; downloadTo: FileLocator temp ] on: HTTPProgress do: [ :progress | progress isEmpty ifFalse: [ bar current: progress percentage ]. progress resume ] ] asJob run." self should: [ ZnClient new beOneShot; signalProgress: true; get: 'http://zn.stfx.eu/zn/small.html' ] raise: HTTPProgress ! ! !ZnClientTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/22/2014 10:14' prior: 43976503! withServerDo: block | server | server := ZnServer on: 1700 + 32 atRandom. [ server start. self assert: server isRunning & server isListening description: ('Failed to start server on port {1}. Is there one already?' format: { server port }). block cull: server ] ensure: [ server stop ]! ! !ZnHTTPSTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/21/2014 20:48'! runningOnWindows "Pharo 3+" [ ^ OSPlatform current isWindows ] on: MessageNotUnderstood do: [ ]. "Pharo 2-" [ ^ OSPlatform isWin32 ] on: MessageNotUnderstood do: [ ]. "Give up" ^ false! ! !ZnHTTPSTests methodsFor: 'private' stamp: 'SvenVanCaekenberghe 1/21/2014 20:49' prior: 79797945! runningOnWindowsInriaCI | platform ci | self runningOnWindows ifFalse: [ ^ false ]. ^ [ platform := OSPlatform current. ci := platform environment at: #CI ifAbsent: [ '' ]. ci = 'ci.inria.fr' ] on: MessageNotUnderstood do: [ false ]! ! ZnStandardOutputLogger removeSelector: #initialize! ZnBivalentWriteStream removeSelector: #print:! "Spec-Inspector"! "Zinc-Character-Encoding-Core"! "Zinc-Character-Encoding-Tests"! "Zinc-HTTP"! "Zinc-Resource-Meta-Core"! "Zinc-Resource-Meta-Tests"! "Zinc-Tests"! "Zinc-Zodiac"! "Zodiac-Core"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.963.mcz') load. ScriptLoader new update30794. ! ----End fileIn----! ----QUIT----2014-03-12T11:35:44.643957+01:00 Pharo.image priorSource: 32694458! ----STARTUP----2014-03-12T11:35:44.845783+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-12T11:35:49.217781+01:00 Pharo.image priorSource: 32741982! ----STARTUP----2014-03-12T11:41:51.412202+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-12T11:41:51.682204+01:00 Pharo-30794.image priorSource: 32742179! ----STARTUP----2014-03-12T12:02:24.693938+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! !ScriptLoader methodsFor: 'public' stamp: 'MarcusDenker 3/12/2014 11:59' prior: 83026404! commentForCurrentUpdate ^ '13019 Browser method-pane menuitem [Add breakpoint] corrupts debugger stepping behavior https://pharo.fogbugz.com/f/cases/13019 12294 Copying class copies comment template https://pharo.fogbugz.com/f/cases/12294 '! ! !ScriptLoader methodsFor: 'pharo - scripts' stamp: 'MarcusDenker 3/12/2014 11:59'! script448 ^ 'AST-Core-MarcusDenker.206.mcz AST-Interpreter-Core-MarcusDenker.112.mcz AST-Interpreter-Extension-MarcusDenker.36.mcz AST-Interpreter-Test-SvenVanCaekenberghe.92.mcz AST-Tests-Core-SvenVanCaekenberghe.41.mcz Announcements-Core-MarcusDenker.55.mcz Announcements-Help-MarcusDenker.8.mcz Announcements-Tests-Core-MarcusDenker.18.mcz Announcements-View-MarcusDenker.20.mcz AsmJit-Core-MarcusDenker.8.mcz AsmJit-Extension-MarcusDenker.8.mcz AsmJit-Instructions-MarcusDenker.11.mcz AsmJit-Operands-StephaneDucasse.14.mcz AsmJit-StackManagement-SvenVanCaekenberghe.11.mcz AsmJit-Tests-SvenVanCaekenberghe.15.mcz AsmJit-x86-MarcusDenker.31.mcz Athens-Balloon-MarcusDenker.16.mcz Athens-Cairo-MarcusDenker.66.mcz Athens-CairoPools-MarcusDenker.13.mcz Athens-Core-MarcusDenker.41.mcz Athens-Examples-MarcusDenker.29.mcz Athens-Morphic-MarcusDenker.29.mcz Athens-Text-MarcusDenker.12.mcz Balloon-MarcusDenker.114.mcz BalloonTests-MarcusDenker.3.mcz ClassOrganizer-Core-MarcusDenker.24.mcz ClassOrganizer-Tests-SvenVanCaekenberghe.7.mcz CodeImport-MarcusDenker.46.mcz Collections-Abstract-MarcusDenker.246.mcz Collections-Arithmetic-StephaneDucasse.12.mcz Collections-Arrayed-EstebanLorenzano.69.mcz Collections-Atomic-MarcusDenker.10.mcz Collections-Native-MarcusDenker.6.mcz Collections-Sequenceable-StephaneDucasse.161.mcz Collections-Stack-MarcusDenker.7.mcz Collections-Streams-MarcusDenker.157.mcz Collections-Strings-MarcusDenker.303.mcz Collections-Support-SvenVanCaekenberghe.54.mcz Collections-Traits-MarcusDenker.17.mcz Collections-Unordered-MarcusDenker.184.mcz Collections-Weak-MarcusDenker.86.mcz CollectionsTests-MarcusDenker.648.mcz Compiler-MarcusDenker.551.mcz CompilerTests-MarcusDenker.183.mcz Compression-MarcusDenker.143.mcz CompressionTests-MarcusDenker.27.mcz ConfigurationCommandLineHandler-Core-MarcusDenker.25.mcz ConfigurationCommandLineHandler-Tests-MarcusDenker.11.mcz DebuggerActions-MarcusDenker.70.mcz DebuggerFilters-MarcusDenker.6.mcz DebuggerModel-SvenVanCaekenberghe.85.mcz Deprecated30-MarcusDenker.71.mcz EmergencyEvaluator-MarcusDenker.32.mcz EventModel-MarcusDenker.3.mcz FileSystem-Core-MarcusDenker.150.mcz FileSystem-Disk-SvenVanCaekenberghe.73.mcz FileSystem-Memory-SvenVanCaekenberghe.47.mcz FileSystem-Tests-Core-MarcusDenker.78.mcz FileSystem-Tests-Disk-SvenVanCaekenberghe.15.mcz FileSystem-Tests-Memory-SvenVanCaekenberghe.6.mcz FileSystem-Zip-StephaneDucasse.11.mcz Files-MarcusDenker.ducasse.346.mcz FreeType-SvenVanCaekenberghe.658.mcz FreeTypeTests-SvenVanCaekenberghe.5.mcz Fuel-SvenVanCaekenberghe.792.mcz FuelCommandLineHandler-MarcusDenker.24.mcz FuelHacks-SvenVanCaekenberghe.1.mcz FuelSystem-FileRegistry-EstebanLorenzano.3.mcz FuelTests-SvenVanCaekenberghe.372.mcz FuelTools-Debugger-MarcusDenker.9.mcz Generated-code-non-existing-package-MarcusDenker.1.mcz Gofer-Core-MarcusDenker.215.mcz Gofer-Tests-MarcusDenker.162.mcz Graphics-Display Objects-SvenVanCaekenberghe.138.mcz Graphics-Files-MarcusDenker.53.mcz Graphics-Fonts-MarcusDenker.90.mcz Graphics-Primitives-MarcusDenker.136.mcz Graphics-Resources-EstebanLorenzano.22.mcz Graphics-Tests-StephaneDucasse.47.mcz Graphics-Transformations-MarcusDenker.10.mcz GroupManager-MarcusDenker.62.mcz GroupManagerUI-MarcusDenker.32.mcz Growl-SvenVanCaekenberghe.30.mcz HelpSystem-Core-SvenVanCaekenberghe.108.mcz HelpSystem-Tests-SvenVanCaekenberghe.28.mcz History-MarcusDenker.3.mcz HudsonBuildTools20-SvenVanCaekenberghe.59.mcz Kernel-MarcusDenker.1730.mcz KernelTests-SvenVanCaekenberghe.638.mcz KeyChain-SvenVanCaekenberghe.75.mcz Keymapping-Core-MarcusDenker.184.mcz Keymapping-KeyCombinations-SvenVanCaekenberghe.41.mcz Keymapping-Pragmas-MarcusDenker.46.mcz Keymapping-Settings-MarcusDenker.77.mcz Keymapping-Tests-SvenVanCaekenberghe.93.mcz Keymapping-Tools-Spec-SvenVanCaekenberghe.27.mcz Keys-MarcusDenker.10.mcz Komitter-MarcusDenker.83.mcz Manifest-Core-MarcusDenker.178.mcz Manifest-CriticBrowser-MarcusDenker.148.mcz Manifest-Resources-Tests-MarcusDenker.14.mcz Manifest-Tests-MarcusDenker.42.mcz MenuRegistration-MarcusDenker.72.mcz Metacello-Base-EstebanLorenzano.114.mcz Metacello-Core-MarcusDenker.722.mcz Metacello-FileTree-EstebanLorenzano.30.mcz Metacello-GitHub-EstebanLorenzano.31.mcz Metacello-MC-MarcusDenker.696.mcz Metacello-PharoCommonPlatform-MarcusDenker.10.mcz Metacello-Platform.pharo20-EstebanLorenzano.36.mcz Metacello-Platform.pharo30-EstebanLorenzano.4.mcz Metacello-ProfStef-EstebanLorenzano.14.mcz Metacello-Reference-EstebanLorenzano.37.mcz Metacello-TestsCore-EstebanLorenzano.36.mcz Metacello-TestsMC-EstebanLorenzano.388.mcz Metacello-TestsMCCore-EstebanLorenzano.6.mcz Metacello-TestsMCResources-EstebanLorenzano.13.mcz Metacello-TestsCommonMC.pharo20-EstebanLorenzano.4.mcz Metacello-TestsPlatform.squeakCommon-EstebanLorenzano.12.mcz Metacello-TestsTutorial-EstebanLorenzano.42.mcz Metacello-ToolBox-EstebanLorenzano.136.mcz Metacello-Tutorial-EstebanLorenzano.27.mcz Monticello-SvenVanCaekenberghe.921.mcz MonticelloConfigurations-MarcusDenker.70.mcz MonticelloFileTree-Core-MarcusDenker.168.mcz MonticelloFileTree-FileSystem-Utilities-MarcusDenker.31.mcz MonticelloGUI-MarcusDenker.283.mcz MonticelloMocks-EstebanLorenzano.2.mcz Morphic-Base-SvenVanCaekenberghe.276.mcz Morphic-Core-SvenVanCaekenberghe.46.mcz Morphic-Examples-MarcusDenker.18.mcz MorphicTests-MarcusDenker.78.mcz Multilingual-Encodings-MarcusDenker.47.mcz Multilingual-Languages-MarcusDenker.38.mcz Multilingual-OtherLanguages-MarcusDenker.8.mcz Multilingual-Tests-MarcusDenker.33.mcz Multilingual-TextConversion-MarcusDenker.68.mcz Multilingual-TextConverterOtherLanguages-MarcusDenker.2.mcz NECompletion-SvenVanCaekenberghe.151.mcz NOCompletion-MarcusDenker.46.mcz NativeBoost-Core-MarcusDenker.149.mcz NativeBoost-Examples-CamilloBruni.16.mcz NativeBoost-Mac-CamilloBruni.9.mcz NativeBoost-Pools-CamilloBruni.13.mcz NativeBoost-Tests-MarcusDenker.82.mcz NativeBoost-Unix-MarcusDenker.15.mcz NativeBoost-Win32-MarcusDenker.48.mcz Nautilus-MarcusDenker.702.mcz NautilusCommon-SvenVanCaekenberghe.195.mcz NautilusRefactoring-SvenVanCaekenberghe.158.mcz Network-Kernel-SvenVanCaekenberghe.104.mcz Network-MIME-MarcusDenker.65.mcz Network-Mail-MarcusDenker.31.mcz Network-Protocols-MarcusDenker.101.mcz Network-RFC822-MarcusDenker.9.mcz Network-UUID-StephaneDucasse.27.mcz Network-Url-MarcusDenker.99.mcz NetworkTests-SvenVanCaekenberghe.95.mcz NewList-SvenVanCaekenberghe.70.mcz NewValueHolder-SvenVanCaekenberghe.6.mcz NodeNavigation-StephaneDucasse.44.mcz NonInteractiveTranscript-MarcusDenker.13.mcz OpalCompiler-Core-MarcusDenker.485.mcz OpalCompiler-Tests-MarcusDenker.231.mcz PackageInfo-SvenVanCaekenberghe.117.mcz Polymorph-EventEnhancements-MarcusDenker.18.mcz Polymorph-Geometry-MarcusDenker.13.mcz Polymorph-TaskbarIcons-MarcusDenker.33.mcz Polymorph-Tools-Diff-MarcusDenker.133.mcz Polymorph-Widgets-SvenVanCaekenberghe.1034.mcz ProfStef-Core-SvenVanCaekenberghe.35.mcz ProfStef-Help-SvenVanCaekenberghe.14.mcz ProfStef-Tests-SvenVanCaekenberghe.23.mcz RPackage-Core-EstebanLorenzano.354.mcz RPackage-SystemIntegration-MarcusDenker.222.mcz RPackage-Tests-EstebanLorenzano.149.mcz RecentSubmissions-MarcusDenker.212.mcz Refactoring-Changes-MarcusDenker.52.mcz Refactoring-Core-MarcusDenker.235.mcz Refactoring-Critics-MarcusDenker.102.mcz Refactoring-Environment-MarcusDenker.40.mcz Refactoring-Tests-Changes-MarcusDenker.36.mcz Refactoring-Tests-Core-MarcusDenker.88.mcz Refactoring-Tests-Critics-MarcusDenker.19.mcz Refactoring-Tests-Environment-StephaneDucasse.11.mcz Regex-Core-MarcusDenker.33.mcz Regex-Help-MarcusDenker.5.mcz Regex-Tests-Core-MarcusDenker.9.mcz ReleaseTests-MarcusDenker.3.mcz Ring-Core-Containers-MarcusDenker.30.mcz Ring-Core-Kernel-MarcusDenker.162.mcz Ring-Monticello-MarcusDenker.20.mcz Ring-Tests-Containers-MarcusDenker.11.mcz Ring-Tests-Kernel-MarcusDenker.63.mcz Ring-Tests-Monticello-MarcusDenker.19.mcz SUnit-Core-MarcusDenker.116.mcz SUnit-Help-MarcusDenker.9.mcz SUnit-Tests-MarcusDenker.37.mcz SUnit-UI-MarcusDenker.79.mcz SUnit-UITesting-MarcusDenker.17.mcz SUnit-Utilities-MarcusDenker.12.mcz Settings-Compiler-MarcusDenker.19.mcz Settings-Display-MarcusDenker.9.mcz Settings-FreeType-MarcusDenker.14.mcz Settings-Graphics-MarcusDenker.19.mcz Settings-Kernel-MarcusDenker.5.mcz Settings-Monticello-MarcusDenker.16.mcz Settings-Network-MarcusDenker.18.mcz Settings-Polymorph-MarcusDenker.61.mcz Settings-System-MarcusDenker.31.mcz Settings-Tools-MarcusDenker.51.mcz Shout-MarcusDenker.202.mcz ShoutTests-MarcusDenker.21.mcz Slot-MarcusDenker.417.mcz SlotTests-MarcusDenker.82.mcz SmartSuggestions-StephaneDucasse.122.mcz SmartSuggestionsTests-MarcusDenker.4.mcz Spec-Core-MarcusDenker.318.mcz Spec-Debugger-MarcusDenker.209.mcz Spec-Examples-MarcusDenker.71.mcz Spec-Extensions-MarcusDenker.3.mcz Spec-Inspector-MarcusDenker.167.mcz Spec-Layout-MarcusDenker.65.mcz Spec-MorphicAdapters-MarcusDenker.140.mcz Spec-PolyWidgets-MarcusDenker.41.mcz Spec-Tests-SvenVanCaekenberghe.39.mcz Spec-Tools-SvenVanCaekenberghe.194.mcz StartupPreferences-EstebanLorenzano.118.mcz System-Announcements-MarcusDenker.63.mcz System-Caching-SvenVanCaekenberghe.3.mcz System-Changes-SvenVanCaekenberghe.244.mcz System-Clipboard-SvenVanCaekenberghe.32.mcz System-CommandLine-MarcusDenker.161.mcz System-FilePackage-SvenVanCaekenberghe.116.mcz System-FileRegistry-SvenVanCaekenberghe.31.mcz System-Finalization-StephaneDucasse.17.mcz System-Hashing-SvenVanCaekenberghe.39.mcz System-History-MarcusDenker.5.mcz System-Installers-SvenVanCaekenberghe.42.mcz System-Localization-SvenVanCaekenberghe.79.mcz System-Object Events-MarcusDenker.13.mcz System-Platforms-EstebanLorenzano.55.mcz System-Serial Port-StephaneDucasse.23.mcz System-Settings-MarcusDenker.297.mcz System-Sound-MarcusDenker.16.mcz System-Support-SvenVanCaekenberghe.1021.mcz System-Tools-MarcusDenker.114.mcz Tabs-MarcusDenker.33.mcz Tests-MarcusDenker.681.mcz Text-Core-MarcusDenker.27.mcz Text-Edition-SvenVanCaekenberghe.31.mcz Text-Scanning-MarcusDenker.20.mcz Text-Tests-MarcusDenker.4.mcz Tools-MarcusDenker.1417.mcz ToolsTest-SvenVanCaekenberghe.denker.67.mcz Traits-MarcusDenker.633.mcz Transcript-SvenVanCaekenberghe.19.mcz UI-MarcusDenker.9.mcz UIManager-MarcusDenker.128.mcz Unicode-Initialization-MarcusDenker.10.mcz UpdateStreamer-Core-MarcusDenker.32.mcz UpdateStreamer-Tests-SvenVanCaekenberghe.6.mcz Versionner-Core-Announcements-SvenVanCaekenberghe.7.mcz Versionner-Core-Commands-SvenVanCaekenberghe.44.mcz Versionner-Core-DependenciesModel-SvenVanCaekenberghe.77.mcz Versionner-Core-Model-SvenVanCaekenberghe.38.mcz Versionner-Spec-Browser-SvenVanCaekenberghe.130.mcz Versionner-Tests-Core-Commands-SvenVanCaekenberghe.10.mcz Versionner-Tests-Core-DependenciesModel-SvenVanCaekenberghe.33.mcz Versionner-Tests-Core-Model-SvenVanCaekenberghe.24.mcz Versionner-Tests-Resources-SvenVanCaekenberghe.11.mcz Zinc-Character-Encoding-Core-MarcusDenker.31.mcz Zinc-Character-Encoding-Tests-MarcusDenker.18.mcz Zinc-FileSystem-SvenVanCaekenberghe.10.mcz Zinc-HTTP-MarcusDenker.393.mcz Zinc-Resource-Meta-Core-MarcusDenker.33.mcz Zinc-Resource-Meta-FileSystem-SvenVanCaekenberghe.4.mcz Zinc-Resource-Meta-Tests-MarcusDenker.21.mcz Zinc-System-Support-MarcusDenker.6.mcz Zinc-Tests-MarcusDenker.205.mcz Zinc-Zodiac-MarcusDenker.31.mcz Zodiac-Core-MarcusDenker.31.mcz Zodiac-Extra-StephaneDucasse.10.mcz Zodiac-Tests-MarcusDenker.13.mcz' findTokens: String lf , String cr! ! !ScriptLoader methodsFor: 'pharo - updates' stamp: 'MarcusDenker 3/12/2014 12:00'! update30795 "self new update30795" self withUpdateLog: '13019 Browser method-pane menuitem [Add breakpoint] corrupts debugger stepping behavior https://pharo.fogbugz.com/f/cases/13019 12294 Copying class copies comment template https://pharo.fogbugz.com/f/cases/12294 '. self loadTogether: self script448 merge: false. self flushCaches. ! ! "ScriptLoader30"! !TClass methodsFor: 'copying' stamp: 'CamilleTeruel 3/7/2014 17:04' prior: 77698386! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. self hasComment ifTrue: [ class comment: self comment stamp: self organization commentStamp ]. ^ class! ! !MethodWidget class methodsFor: 'menu' stamp: 'cb 3/7/2014 12:59' prior: 37825636! elementsMenu: aBuilder | selectedMethods selectedMethod tmp target | target := aBuilder model. selectedMethods := target selectedMethods. selectedMethod := target selectedMethod. (aBuilder item: #'Find Method...') keyText: 'f, m' if: Nautilus useOldStyleKeys not; keyText: 'f' if: Nautilus useOldStyleKeys; action: [ target findMethod ]; order: 0; help: 'Search for a method by name'. target selectedMethod ifNotNil: [ (aBuilder item: #'ToggleBreakPoint') action: [ target toggleBreakPoint ]; order: 199; label: (selectedMethod hasBreakpoint ifFalse: [ 'Add breakpoint (experimental)'] ifTrue: [ 'Remove breakpoint (experimental)'] )]. tmp := ((aBuilder item: #'Browse full') keyText: 'b, f' if: Nautilus useOldStyleKeys not; keyText: 'b' if: Nautilus useOldStyleKeys; action: [ target fullBrowse ]; order: 200; yourself). target selectedMethod ifNil: [ tmp withSeparatorAfter. ^ target ]. (aBuilder item: #'Generate test and jump') keyText: 'h, j' if: Nautilus useOldStyleKeys not; keyText: 'j' if: Nautilus useOldStyleKeys; action: [ target generateTestMethodsAndFocus: true ]; order: 300. (aBuilder item: #'Generate test') keyText: 'h, J' if: Nautilus useOldStyleKeys not; keyText: 'J' if: Nautilus useOldStyleKeys; action: [ target generateTestMethodsAndFocus: false ]; order: 400; withSeparatorAfter. (target selectedMethods allSatisfy: [:meth | meth isTestMethod ]) ifTrue: [ (aBuilder item: #'Run tests') keyText: 'j, m' if: Nautilus useOldStyleKeys not; keyText: 't' if: Nautilus useOldStyleKeys; action: [ target runTestForMethods: selectedMethods notifying: true ]; order: 1000 ]. target selectedMethod correspondingTestMethod notNil ifTrue: [ (aBuilder item: #'Debug tests') keyText: 'd' if: Nautilus useOldStyleKeys not; action: [ target debugTest ]; order: 1001 ]. (aBuilder item: #'Senders of...') keyText: 'b, n' if: Nautilus useOldStyleKeys not; keyText: 'n' if: Nautilus useOldStyleKeys; action: [ target browseSendersOfMessages ]; order: 1100; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Implementors of...') keyText: 'b, m' if: Nautilus useOldStyleKeys not; keyText: 'm' if: Nautilus useOldStyleKeys; action: [ target browseMessages ]; order: 1200; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Inheritance') keyText: 'b, i' if: Nautilus useOldStyleKeys not; keyText: 'i' if: Nautilus useOldStyleKeys; action: [ target methodHierarchy ]; order: 1300; enabledBlock: [ target enableMethodSingleSelection ]. (aBuilder item: #'Versions') keyText: 'b, v' if: Nautilus useOldStyleKeys not; keyText: 'v' if: Nautilus useOldStyleKeys; action: [ target browseVersions ]; order: 1400; enabledBlock: [ target enableMethodSingleSelection ]; withSeparatorAfter. (aBuilder item: #'Categorize method') keyText: 'm, m' if: Nautilus useOldStyleKeys not; action: [ target categorizeMethod ]; order: 1500. (aBuilder item: #'Move to package...') action: [ target moveMethodToPackage ]; order: 1600. (aBuilder item: #'Remove...') keyText: 'x, m' if: Nautilus useOldStyleKeys not; keyText: 'x' if: Nautilus useOldStyleKeys; action: [ target removeMethods ]; order: 1700; icon: (Smalltalk ui icons iconNamed: #removeIcon); withSeparatorAfter. (aBuilder item: #'Add in group...') keyText: 'n, e, m' if: Nautilus useOldStyleKeys not; action: [ target addMethodsInGroup ]; order: 1800. (aBuilder item: #'File Out') action: [ target fileOutMethods ]; order: 1900! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. self hasComment ifTrue: [ class comment: self comment stamp: self organization commentStamp ]. ^ class! ! !Trait method! duplicateClassWithNewName: aSymbol | copysName class newDefinition | copysName := aSymbol asSymbol. copysName = self name ifTrue: [ ^ self ]. (Smalltalk globals includesKey: copysName) ifTrue: [ ^ self error: copysName , ' already exists' ]. newDefinition := self definition copyReplaceAll: '#' , self name asString with: '#' , copysName asString. class := self class compiler source: newDefinition; logged: true; evaluate. class classSide instanceVariableNames: self classSide instanceVariablesString. class copyAllCategoriesFrom: self. class class copyAllCategoriesFrom: self class. self hasComment ifTrue: [ class comment: self comment stamp: self organization commentStamp ]. ^ class! ! "Nautilus"! "Traits"! "Postscript: Leave the line above, and replace the rest of this comment by a useful one. Executable statements should follow this comment, and should be separated by periods, with no exclamation points (!!). Be sure to put any further comments in double-quotes, like this one." |repository| repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/Pharo/Pharo30/main' user: '' password: ''. (repository loadVersionFromFileNamed:'ScriptLoader30-MarcusDenker.964.mcz') load. ScriptLoader new update30795. ! ----End fileIn----! ----QUIT----2014-03-12T12:02:28.999937+01:00 Pharo.image priorSource: 32742376! ----STARTUP----2014-03-12T12:02:29.196099+01:00 as /builds/workspace/Pharo-3.0-Update-Step-1-Tracker/Pharo.image! ----QUIT----2014-03-12T12:02:33.782103+01:00 Pharo.image priorSource: 32761465! ----STARTUP----2014-03-12T12:08:36.485857+01:00 as /builds/workspace/Pharo-3.0-Update-Step-4-Publish/Pharo.image! ----SNAPSHOT----2014-03-12T12:08:36.761858+01:00 Pharo-30795.image priorSource: 32761662! !ConfigurationOfPlatypus commentStamp: '' prior: 0! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !ConfigurationOfPlatypus commentStamp: '' prior: 83093663! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! ----STARTUP----2014-03-12T14:09:28.971432+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #'ConfigurationOf' ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #'ConfigurationOf' ifAbsent: aBlock ]. ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacelloBaseConfiguration Smalltalk at: #'ConfigurationOf' ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/dkh/metacello/main' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-dkh.107' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfPlatypus class methodsFor: 'metacello tool support' stamp: 'AlainPlantec 12/10/2013 09:50'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! load self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! loadBleedingEdge self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 09:08'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: '0.1') load! ! !ConfigurationOfPlatypus class methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^self new project! ! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfPlatypus methodsFor: 'baselines' stamp: 'AlainPlantec 12/16/2013 09:44'! baseline01: spec spec for: #pharo do: [ spec blessing: #baseline. spec project: 'SmaCCDev' with: [ spec className: 'ConfigurationOfSmaCC'; file: 'ConfigurationOfSmaCC'; repository: 'http://smalltalkhub.com/mc/PharoExtras/Smacc/main'; loads: #('Runtime' 'Tools') ]. spec project: 'PetitParser' with: [ spec repository: 'http://smalltalkhub.com/mc/Moose/PetitParser'. spec className: 'ConfigurationOfPetitParser'; versionString: '1.6'; loads: #(#Core 'Tests') ]. spec package: 'PetitStepExpress' with: [ spec repository: 'http://smalltalkhub.com/mc/AlainPlantec/StepExpress/main'. spec requires: 'PetitParser' ]. spec repository: 'http://ss3.gemstone.com/ss/Platypus'. spec package: 'Tamaris'. spec package: 'Platypus' with: [ spec requires: 'SmaCCDev' ]. spec package: 'SqPlatypus' with: [ spec requires: 'Platypus'; requires: 'Tamaris' ]. spec package: 'xtra-platypus' with: [ spec requires: 'SqPlatypus' ]. spec package: 'PlatypusPostLoad' with: [ spec requires: 'xtra-platypus'; requires: 'SqPlatypus' ] ]! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! default: spec spec for: #pharo version: '0.1'.! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! development: spec spec for: #pharo version: '0.1'. ! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project" (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !ConfigurationOfPlatypus methodsFor: 'versions' stamp: 'AlainPlantec 12/16/2013 09:31'! version01: spec spec for: #pharo do: [ spec blessing: #development. spec description: 'releasing a version of Platypus 1'. spec author: 'AlainPlantec'. spec timestamp: '10/12/2013 18:01' ]! ! "ConfigurationOfPlatypus"! !ConfigurationOfPetitParser commentStamp: '' prior: 0! self loadDevelopment! !ConfigurationOfPetitParser commentStamp: '' prior: 83102070! self loadDevelopment! !ConfigurationOfPetitParser class methodsFor: 'private' stamp: 'FabrizioPerin 4/27/2010 15:04'! ensureMetacello Smalltalk at: #MetacelloProject ifAbsent: [ Gofer new url: 'http://seaside.gemstone.com/ss/metacello'; package: 'ConfigurationOfMetacello'; load. (Smalltalk at: #ConfigurationOfMetacello) loadLatestVersion ]! ! !ConfigurationOfPetitParser class methodsFor: 'metacello tool support' stamp: 'tg 4/18/2010 23:51'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:28'! loadDefault self loadDevelopment! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:27'! loadDevelopment (self project version: #development) load! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 12/12/2010 21:25'! loadMinimal (self project version: 'minimal') load! ! !ConfigurationOfPetitParser class methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:51'! project ^self new project! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:14'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec author: 'Alexandre Bergel'. spec description: 'work on Pharo 1.1.1'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']; package: 'PetitGui' with: [ spec requires: 'Glamour for Petit']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ). spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: '2.0-beta.8'; repository: 'http://www.squeaksource.com/Glamour' ]. ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 2/18/2011 13:56'! baseline11: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Preparing Moose 4.3.2'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ). ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:15'! baseline12: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec project: 'AST-Core' with: [ spec repository: 'http://www.squeaksource.com/MetacelloRepository'; className: 'ConfigurationOfRefactoringBrowser'; loads: #('AST-Core') ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ) ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ) ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ) ]; package: 'PetitSmalltalk' with: [ spec requires: #( 'AST-Core' 'PetitParser' 'PetitTests') ]. "todo: declare all other packages & dependencies here" spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ) ] ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline13: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitSQL' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline15: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: #stable; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'default' with: #('UI' 'Tests'); group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'UI' with: #('Core' 'PetitGui' ); group: 'Tests' with: #('Core' 'PetitTests'). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 09/02/2013 04:58'! baseline16: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'Describing all satellite packages. Loads configuration from new repository on SmalltalkHub'. spec repository: 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]. spec for: #( 'squeakCommon' ) do: [ spec project: 'Glamour' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: #development; loads: #('Core' 'Morphic' 'Roassal'); repository: 'http://www.smalltalkhub.com/mc/Moose/Glamour/main' ]. spec package: 'PetitGui' with: [ spec requires: #('Glamour' 'PetitAnalyzer')]. spec group: 'Gui' with: #( 'PetitGui' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'usmanbhatti 3/1/2013 17:03'! default: spec self baseline16: spec.! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'DamienCassou 6/19/2013 13:43'! development: spec spec for: #'pharo1.4.x' version: '1.6-baseline'. spec for: #'pharo2.x' version: '1.6-baseline'. spec for: #'pharo3.x' version: '1.6-baseline'.! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:12'! minimal: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! populateSpec: aSpec with: list "generated by Snapshotcello creates a spec object for the package and the version stored in the list" list do: [:each | aSpec package: each third with: [ aSpec file: (each first copyUpToLast: $. ). aSpec repository: each second ] ]! ! !ConfigurationOfPetitParser methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:50'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! snapshot1 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.117.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-TudorGirba.1186.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.32.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-AndreiChis.256.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-AndreiChis.101.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.68.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-AndreiChis.208.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.78.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.262.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('Roassal-AlexandreBergel.668.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.146.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('Glamour-Roassal-Presentations-TudorGirba.14.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 10/24/2013 00:56'! snapshot2 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.122.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-AlexandreBergel.1190.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-TudorGirba.258.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-DiegoLont.103.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.69.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-TudorGirba.211.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.79.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Roassal-AlexandreBergel.702.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.165.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('RoassalExtras-RobertoMinelli.26.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalExtras' ) #('Glamour-Roassal-Presentations-TudorGirba.15.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.267.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'TudorGirba 10/24/2013 00:56'! stable: spec spec for: #'common' version: '1.6'. spec for: #'pharo1.3.x' version: '1.5'. spec for: #'pharo2.x' version: '1.8-snapshot'. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 12/10/2010 18:51'! version10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'First release'. spec author: 'AlexandreBergel'. spec timestamp: '12/6/2010 16:11'. spec project: 'Glamour for Petit' with: '2.0-beta.8'. spec package: 'PetitParser' with: 'PetitParser-lr.208'; package: 'PetitTests' with: 'PetitTests-TudorGirba.24'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.31'; package: 'PetitGui' with: 'PetitGui-TudorGirba.58'.]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version11: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:30'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version12: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:56'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version13: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'AlexandreBergel'. spec timestamp: '5/16/2011 16:23'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DamienPollet 8/11/2011 19:21'! version14: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.218'; package: 'PetitTests' with: 'PetitTests-DamienPollet.35'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.47'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'TudorGirba 3/4/2012 20:22'! version15: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.2'. spec package: 'PetitParser' with: 'PetitParser-lr.228'; package: 'PetitTests' with: 'PetitTests-lr.43'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.90'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.57'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DiegoLont 9/2/2013 13:21'! version16: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'releasing a version of petitparser for moose 4.7 release'. spec author: 'usmanbhatti'. spec timestamp: '3/1/2013 18:01'. spec project: 'Glamour for Petit' with: '2.4'. spec package: 'PetitParser' with: 'PetitParser-YuriyTymchuk.232'; package: 'PetitTests' with: 'PetitTests-AndreHora.47'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-DiegoLont.46'; package: 'PetitGui' with: 'PetitGui-DiegoLont.125'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'DiegoLont 9/17/2013 11:12'! version17snapshot: spec "generated by Snapshotcello" spec for: #common do: [ self populateSpec: spec with: self snapshot1. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'StephanEggermont 11/21/2013 09:37'! version18snapshot: spec "generated by Snapshotcello" spec for: #common do: [ spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. self populateSpec: spec with: self snapshot2. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! "ConfigurationOfPetitParser"! !ConfigurationOfSmaCC class methodsFor: 'private' stamp: 'DamienPollet 3/7/2010 17:17'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfSmaCC class methodsFor: 'private' stamp: 'DamienPollet 3/7/2010 17:17'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfSmaCC class methodsFor: 'loading' stamp: 'DamienPollet 3/7/2010 17:17'! load "self load" ^self project latestVersion load! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfSmaCC class methodsFor: 'accessing' stamp: 'DamienPollet 3/7/2010 17:17'! project ^self new project! ! !ConfigurationOfSmaCC class methodsFor: 'unloading Metacello' stamp: 'DamienPollet 3/7/2010 17:17'! unloadMetacello Smalltalk at: #ConfigurationOfMetacello ifPresent: [:cls | cls unloadMetacello ]! ! !ConfigurationOfSmaCC methodsFor: 'baselines' stamp: 'DamienPollet 3/7/2010 18:59'! baseline01: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.squeaksource.com/SmaccDevelopment'. spec package: 'SmaCC'; package: 'SmaCCDev' with: [ spec requires: 'SmaCC' ]. spec group: 'default' with: #('Runtime'); group: 'Runtime' with: #('SmaCC'); group: 'Tools' with: #('SmaCCDev') ]! ! !ConfigurationOfSmaCC methodsFor: 'accessing' stamp: 'DamienPollet 3/7/2010 17:17'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfSmaCC methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 3/11/2013 17:36'! stable: spec spec for: #'common' version: '0.1'. spec for: #'pharo1.4.x' version: '0.2'. spec for: #'pharo2.0.x' version: '0.3' ! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'topa 4/21/2011 10:31'! version01: spec spec for: #common do: [ spec blessing: #stable; author: 'topa'; description: 'Make SmaCC available via Metacello'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-AlainPlantec.25'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/11/2013 17:37'! version02: spec spec for: #common do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 1.4'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.31'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/18/2013 16:40'! version03: spec spec for: #common do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 2.0'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.33'. ]! ! "ConfigurationOfSmaCC"! !SmaCCParserError commentStamp: '' prior: 0! SmaCCParserException is the exception raised when a parsing error occurs. The description of the exception will be the error message and the parameter of the exception is the parser. With this information, you can insert a custom error message in your text view that you are parsing. For example, in VisualWorks, the following code will insert an error message into your text view: textController insertAndSelect: ex description , ' ->' at: ex parameter position! !SmaCCLineNumberStream commentStamp: '' prior: 0! SmaCCLineNumberStream is a wrapper for streams that calculates line numbers. Instance Variables: eolPositions the positions of each end of line lastPosition the position of the last character that we have calculated the end of line information for (we know the line number for all characters before this position and don't know anything about the characters after this position) previousWasCR was the previous character a CR. This is used for CR LF streams. A CR LF combination should only increment the line counter by 1 sourceStream the stream that we are wrapping ! !SmaCCParser commentStamp: '' prior: 0! SmaCCParser is an abstract class that defines most of the parsing actions. Subclasses will define methods that specify their transitions and reduction actions. These are normally defined automatically when compiling the parser. Subclasses must implement the following messages: accessing emptySymbolTokenId reduceTable transitionTable Instance Variables: currentToken the token last returned by the scanner that has not been shifted (reduce actions leave the current token alone) nodeStack collection of items on stack. These items are specific to the parser and can be any object. scanner our scanner stateStack the stack of states for our parser (standard LR state stack) ! !SmaCCScanner commentStamp: '' prior: 0! SmaCCScanner is an abstract class that represents a scanner for the parser. The scanner converts its string input into SmaCCToken objects that the parser then uses for its parsing. Subclasses must implement the following messages: accessing scanForToken Instance Variables: currentCharacter the current character we are scanning lastMatchWasEmpty was our last scanning match an empty string -- don't allow two empty matches in a row lastOutputStreamMatchPosition the position in the outputStream of the last match matchActions the actions for the last match (a symbol means that the action should be performed on the scanner) matchEnd the position of the last match in the stream (our input stream) outputStream the matched characters go in this stream. After a match is made, we take this stream's contents and create a token object. returnMatchBlock when we match a token evaluate this block with the token (hack to return from multiple levels) start the starting position of a match in the stream stream our input ! !SmaCCToken commentStamp: '' prior: 0! SmaCCTokens are used as the interface objects between scanner and parser. They hold the string that was scanned and its position information. Also, included in the token is its id. The id specifies what type of token it is. Instance Variables: id the list of possible token types this represents. There can be overlapping tokens, so we list all of the id here. The default parser only looks at the first id, but we can redefine this behavior in a subclass to look at all possibilities until we find a valid token. start the starting position of the token in the original input value the value of our token (normally a string, but could be anything) ! !SmaCCParserError commentStamp: '' prior: 83128743! SmaCCParserException is the exception raised when a parsing error occurs. The description of the exception will be the error message and the parameter of the exception is the parser. With this information, you can insert a custom error message in your text view that you are parsing. For example, in VisualWorks, the following code will insert an error message into your text view: textController insertAndSelect: ex description , ' ->' at: ex parameter position! !SmaCCLineNumberStream commentStamp: '' prior: 83129270! SmaCCLineNumberStream is a wrapper for streams that calculates line numbers. Instance Variables: eolPositions the positions of each end of line lastPosition the position of the last character that we have calculated the end of line information for (we know the line number for all characters before this position and don't know anything about the characters after this position) previousWasCR was the previous character a CR. This is used for CR LF streams. A CR LF combination should only increment the line counter by 1 sourceStream the stream that we are wrapping ! !SmaCCLineNumberStream class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aReadStream ^(self basicNew) on: aReadStream; yourself! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! atEnd ^sourceStream atEnd! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! columnNumber ^self columnNumberFor: self position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! columnNumberFor: anInteger ^anInteger - (eolPositions at: (self lineNumberFor: anInteger)) + 1! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! contents ^sourceStream contents! ! !SmaCCLineNumberStream methodsFor: 'error handling' stamp: ' 6/1/07 20:34'! doesNotUnderstand: aMessage ^sourceStream perform: aMessage selector withArguments: aMessage arguments! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! flush ^sourceStream flush! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isReadable ^sourceStream isReadable! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isWritable ^sourceStream isWritable! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumber ^self lineNumberFor: self position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumberFor: anInteger | index start stop pos | pos := anInteger. pos >= eolPositions last ifTrue: [^eolPositions size]. start := 1. stop := eolPositions size. [start + 1 < stop] whileTrue: [index := (start + stop) // 2. (eolPositions at: index) <= pos ifTrue: [start := index] ifFalse: [stop := index]]. ^start! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! next | character streamPosition | character := sourceStream next. streamPosition := sourceStream position. streamPosition - 1 >= lastPosition ifTrue: [lastPosition := streamPosition. character == Character cr ifTrue: [eolPositions add: lastPosition. previousWasCR := true] ifFalse: [character == Character lf ifTrue: [previousWasCR ifTrue: [eolPositions at: eolPositions size put: lastPosition] ifFalse: [eolPositions add: lastPosition]]. previousWasCR := false]]. ^character! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! nextPut: anObject ^sourceStream nextPut: anObject! ! !SmaCCLineNumberStream methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! on: aReadStream sourceStream := aReadStream. eolPositions := OrderedCollection with: aReadStream position. lastPosition := aReadStream position. previousWasCR := false! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! peek ^sourceStream peek! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^sourceStream position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position: anInteger anInteger > lastPosition ifTrue: [sourceStream position: lastPosition. [sourceStream position < anInteger and: [sourceStream atEnd not]] whileTrue: [self next]] ifFalse: [sourceStream position: anInteger]! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! skip: anInteger ^self position: self position + anInteger! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: 'lr 1/6/2007 20:56'! upTo: aCharacter | stream char | stream := WriteStream on: String new. [self atEnd or: [ (char := self next) = aCharacter]] whileFalse: [stream nextPut: char]. ^ stream contents! ! !SmaCCParser commentStamp: '' prior: 83129958! SmaCCParser is an abstract class that defines most of the parsing actions. Subclasses will define methods that specify their transitions and reduction actions. These are normally defined automatically when compiling the parser. Subclasses must implement the following messages: accessing emptySymbolTokenId reduceTable transitionTable Instance Variables: currentToken the token last returned by the scanner that has not been shifted (reduce actions leave the current token alone) nodeStack collection of items on stack. These items are specific to the parser and can be any object. scanner our scanner stateStack the stack of states for our parser (standard LR state stack) ! !SmaCCParser class methodsFor: 'private' stamp: ' 6/1/07 20:34'! defaultStartingState ^1! ! !SmaCCParser class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aStream | parser scanner | scanner := self scannerClass on: aStream. parser := self new. parser scanner: scanner. ^parser! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse: aString ^self parse: aString startingAt: self defaultStartingState! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parse: aString onError: aBlock ^[self parse: aString] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse: aString startingAt: anInteger ^self parseStream: (ReadStream on: aString) startingAt: anInteger! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parse: aString startingAt: anInteger onError: aBlock ^[self parse: aString startingAt: anInteger] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parseStream: aStream ^self parseStream: aStream startingAt: self defaultStartingState! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parseStream: aStream onError: aBlock ^[self parseStream: aStream] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parseStream: aStream startingAt: anInteger | parser | parser := self on: aStream. parser setStartingState: anInteger. ^parser parse! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parseStream: aStream startingAt: anInteger onError: aBlock ^[self parseStream: aStream startingAt: anInteger] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'private' stamp: ' 6/1/07 20:34'! scannerClass ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! acceptAction ^0! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionFor: aSymbolIndex ^self actionForState: self currentState and: aSymbolIndex! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionForCurrentToken ^self actionFor: currentToken id first! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:47'! actionForState: stateIndex and: aSymbolIndex | index row | row := self transitionTable at: stateIndex. ^ row isArray ifTrue: [ (row at: 1) == 2 ifTrue: [ index := self binarySearchInArray: row for: aSymbolIndex size: 1. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ row at: 2 ] ] ifFalse: [ index := self binarySearchInArray: row for: aSymbolIndex size: 2. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ row at: index - 1 ] ] ] ifFalse: [ (row at: 1) == 0 ifTrue: [ index := self binarySearchInBytes: row for: aSymbolIndex size: 2. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ ((row at: 2) bitShift: 8) + (row at: 3) ] ] ifFalse: [ index := self binarySearchInBytes: row for: aSymbolIndex size: 4. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ ((row at: index - 2) bitShift: 8) + (row at: index - 1) ] ] ]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionMask ^2r11! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:47'! binarySearchInArray: aRow for: aSymbolIndex size: step | start mid length midItem stop | start := 3. stop := aRow size. length := (stop - start) // step. [length > 4] whileTrue: [length := length bitShift: -1. mid := length * step + start. midItem := aRow at: mid. midItem <= aSymbolIndex ifTrue: [start := mid] ifFalse: [stop := mid]]. [start <= stop] whileTrue: [(aRow at: start) == aSymbolIndex ifTrue: [^start]. start := start + step]. ^0! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:48'! binarySearchInBytes: aRow for: aSymbolIndex size: step | start mid length high low midItem stop | high := aSymbolIndex bitShift: -8. low := aSymbolIndex bitAnd: 16rFF. start := 4. stop := aRow size - 1. length := (stop - start) // step. [length > 4] whileTrue: [length := length bitShift: -1. mid := length * step + start. midItem := aRow at: mid. ((midItem == high and: [(aRow at: mid + 1) <= low]) or: [midItem < high]) ifTrue: [start := mid] ifFalse: [stop := mid]]. [start <= stop] whileTrue: [((aRow at: start) == high and: [(aRow at: start + 1) == low]) ifTrue: [^start]. start := start + step]. ^0! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! checkForErrors "If we have an error correction installed, we might have handled the errors. If we did, we don't want to return the result, so we raise a final exception that can't be proceeded." errorToken isNil ifTrue: [^self]. currentToken := errorToken. self reportErrorMessage: 'Token not expected'! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! currentState ^stateStack last! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! dismissErrorToken currentToken := nil. self getNextToken! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! dismissStackTopForErrorRecovery stateStack removeLast. ^nodeStack removeLast! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! emptySymbolTokenId ^scanner emptySymbolTokenId! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! errorAction ^3! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! errorHandlerStates ^stateStack collect: [:each | | action | action := self actionForState: each and: self errorTokenId. (action bitAnd: self actionMask) = 1 ifTrue: [action bitShift: -2] ifFalse: [0]]! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTable ^#()! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTokenId ^scanner errorTokenId! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! findErrorHandlerIfNoneUseErrorNumber: anInteger | handlerStates index startingErrorToken newStack | handlerStates := self errorHandlerStates reverse. startingErrorToken := currentToken. [index := (1 to: handlerStates size) detect: [:each | | state | state := handlerStates at: each. state ~= 0 and: [newStack := stateStack copyFrom: 1 to: handlerStates size - each + 1. newStack add: state. self willShift: newStack]] ifNone: [nil]. index isNil] whileTrue: [self dismissErrorToken. self isEOFToken ifTrue: [currentToken := startingErrorToken. self reportError: anInteger]]. index - 1 timesRepeat: [self dismissStackTopForErrorRecovery]. stateStack addLast: (handlerStates at: index). nodeStack addLast: startingErrorToken! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! getNextToken currentToken isNil ifTrue: [currentToken := scanner next]! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! handleError: anInteger errorToken isNil ifTrue: [errorToken := currentToken]. (self isEOFToken or: [self hasErrorHandler not]) ifTrue: [self reportError: anInteger]. self findErrorHandlerIfNoneUseErrorNumber: anInteger! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! hasErrorHandler ^self errorHandlerStates anySatisfy: [:each | each ~~ 0]! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! initialize nodeStack := OrderedCollection new! ! !SmaCCParser methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isEOFToken ^currentToken id first = self emptySymbolTokenId! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftFirstValue: aCollection ^aCollection first! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftLastValue: aCollection ^aCollection last! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftSecondValue: aCollection ^aCollection at: 2! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! nil ^nil! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse self setDefaultStartingStateIfNone. self performParsingLoop. ^nodeStack last! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performAction: action | value actionType | actionType := action bitAnd: self actionMask. value := action bitShift: -2. actionType == self shiftAction ifTrue: [self shift: value] ifFalse: [actionType == self reduceAction ifTrue: [self reduce: value] ifFalse: [self handleError: value]]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performParsingLoop | action | [self getNextToken. action := self actionForCurrentToken. action = self acceptAction] whileFalse: [self performAction: action]. self checkForErrors! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performReduceMethod: aSymbol with: items ^aSymbol last == $: ifTrue: [self perform: aSymbol with: items] ifFalse: [self perform: aSymbol]! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^currentToken isNil ifTrue: [scanner position] ifFalse: [currentToken startPosition]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduce: anInteger | reduceEntry items size | reduceEntry := self reduceTable at: anInteger. items := OrderedCollection new: (size := reduceEntry at: 2). size timesRepeat: [items addFirst: nodeStack removeLast. stateStack removeLast]. nodeStack add: (self performReduceMethod: (reduceEntry at: 3) with: items). stateStack add: ((self actionFor: (reduceEntry at: 1)) bitShift: -2)! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduceAction ^2r10! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduceFor: aCollection | newCollection item | (aCollection allSatisfy: [:each | each class ~~ OrderedCollection]) ifTrue: [^aCollection]. aCollection first class == OrderedCollection ifTrue: [newCollection := aCollection first. 2 to: aCollection size do: [:i | item := aCollection at: i. item class = OrderedCollection ifTrue: [newCollection addAll: item] ifFalse: [newCollection add: item]]. ^newCollection]. newCollection := OrderedCollection new. aCollection do: [:each | each class == OrderedCollection ifTrue: [newCollection addAll: each] ifFalse: [newCollection add: each]]. ^newCollection! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! reduceTable ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! reportError: anInteger self reportErrorMessage: (anInteger = 0 ifTrue: ['Token not expected'] ifFalse: [self errorTable at: anInteger])! ! !SmaCCParser methodsFor: 'private-error handling' stamp: 'lr 1/6/2007 22:43'! reportErrorMessage: aString SmaCCParserError new tag: self; signal: aString! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! scanner ^scanner! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! scanner: aScanner scanner := aScanner! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! setDefaultStartingStateIfNone stateStack isNil ifTrue: [self setStartingState: self class defaultStartingState]! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! setStartingState: startingState stateStack := OrderedCollection with: startingState! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! shift: stateIndex stateStack add: stateIndex. nodeStack add: currentToken. currentToken := nil! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! shiftAction ^2r01! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! stringValue: anOrderedCollection ^anOrderedCollection first value! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! transitionTable ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! willShift: potentialStateStack | action compoundAction reduceEntry size | compoundAction := self actionForState: potentialStateStack last and: currentToken id first. action := compoundAction bitAnd: self actionMask. action == self shiftAction ifTrue: [^true]. action == self reduceAction ifTrue: [reduceEntry := self reduceTable at: (compoundAction bitShift: -2). size := reduceEntry at: 2. size timesRepeat: [potentialStateStack removeLast]. potentialStateStack add: ((self actionForState: potentialStateStack last and: (reduceEntry at: 1)) bitShift: -2). ^self willShift: potentialStateStack]. ^false! ! !SmaCCScanner commentStamp: '' prior: 83130782! SmaCCScanner is an abstract class that represents a scanner for the parser. The scanner converts its string input into SmaCCToken objects that the parser then uses for its parsing. Subclasses must implement the following messages: accessing scanForToken Instance Variables: currentCharacter the current character we are scanning lastMatchWasEmpty was our last scanning match an empty string -- don't allow two empty matches in a row lastOutputStreamMatchPosition the position in the outputStream of the last match matchActions the actions for the last match (a symbol means that the action should be performed on the scanner) matchEnd the position of the last match in the stream (our input stream) outputStream the matched characters go in this stream. After a match is made, we take this stream's contents and create a token object. returnMatchBlock when we match a token evaluate this block with the token (hack to return from multiple levels) start the starting position of a match in the stream stream our input ! !SmaCCScanner class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! frequencyTable ^#(1)! ! !SmaCCScanner class methodsFor: 'class initialization' stamp: ' 6/1/07 20:34'! initialize self initializeKeywordMap! ! !SmaCCScanner class methodsFor: 'class initialization' stamp: ' 6/1/07 20:34'! initializeKeywordMap keywordMap := Dictionary new! ! !SmaCCScanner class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! keywordMap keywordMap isNil ifTrue: [self initializeKeywordMap]. ^keywordMap! ! !SmaCCScanner class methodsFor: 'testing' stamp: ' 6/1/07 20:34'! needsLineNumbers "Redefine to return true, if you need line number information" ^false! ! !SmaCCScanner class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aStream ^(self new) on: (self needsLineNumbers ifTrue: [SmaCCLineNumberStream on: aStream] ifFalse: [aStream]); yourself! ! !SmaCCScanner methodsFor: 'testing' stamp: ' 6/1/07 20:34'! atEnd ^stream atEnd! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! checkForKeyword: aString | stateMap action | action := matchActions isSymbol ifTrue: [matchActions] ifFalse: [matchActions first]. stateMap := self class keywordMap at: action ifAbsent: [nil]. stateMap isNil ifTrue: [^self]. matchActions := stateMap at: (self keywordFor: aString) ifAbsent: [matchActions]. matchActions isInteger ifTrue: [matchActions := Array with: matchActions with: action]! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! checkForValidMatch matchActions isNil ifTrue: [self scannerError]! ! !SmaCCScanner methodsFor: 'default token handling' stamp: ' 6/1/07 20:34'! comment "In case someone wants to record the comments" ^self whitespace! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! contents | writeStream token | writeStream := WriteStream with: Array new. [self atEnd] whileFalse: [token := self next. token notNil ifTrue: [writeStream nextPut: token]]. ^writeStream contents! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! createTokenFor: string | token | token := self tokenClass value: string start: start + 1 id: matchActions. outputStream reset. ^token! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! emptySymbolTokenId ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! eofTokenId ^Array with: self emptySymbolTokenId! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTokenId ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! initialize outputStream := WriteStream with: String new. lastMatchWasEmpty := true. state := #default! ! !SmaCCScanner methodsFor: 'private-utility' stamp: ' 6/1/07 20:34'! keywordFor: aString "Subclasses can override this to ignore case" ^aString! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumber "This requires the stream to be a line number stream (see the #needsLineNumbers class method)." ^stream lineNumber! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! next self resetScanner. returnMatchBlock := [:match | ^match]. ^self scanForToken! ! !SmaCCScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! on: aStream stream := aStream. start := stream position! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^stream position! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position: anInteger ^stream position: anInteger! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! recordAndReportMatch: aCollection ^self recordMatch: aCollection; reportLastMatch! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! recordMatch: aCollection matchActions := aCollection. matchEnd := stream position. lastOutputStreamMatchPosition := outputStream position! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! reportLastMatch "The scanner has found the end of a token and must report it" | string token | self checkForValidMatch. self resetOutputToLastMatch. stream position: matchEnd. string := outputStream contents. self checkForKeyword: string. token := matchActions isSymbol ifTrue: [self perform: matchActions] ifFalse: [self createTokenFor: string]. matchActions := nil. ^token! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! resetOutputToLastMatch outputStream position: lastOutputStreamMatchPosition. lastOutputStreamMatchPosition == 0 ifTrue: [lastMatchWasEmpty ifTrue: [self scannerError]. lastMatchWasEmpty := true] ifFalse: [lastMatchWasEmpty := false]! ! !SmaCCScanner methodsFor: 'private' stamp: 'lr 1/7/2007 02:23'! resetScanner start := stream position. outputStream reset. lastOutputStreamMatchPosition := 0! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! scanForToken ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! scannerError | string | (stream atEnd and: [start == stream position]) ifTrue: [string := ''. matchActions := self eofTokenId] ifFalse: [stream position: start. string := String with: stream next. matchActions := #(0)]. returnMatchBlock value: (self createTokenFor: string)! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! state ^state! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! state: aSymbol state := aSymbol! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! step stream atEnd ifTrue: [^returnMatchBlock value: self reportLastMatch]. currentCharacter := stream next. outputStream nextPut: currentCharacter! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! tokenClass ^SmaCCToken! ! !SmaCCScanner methodsFor: 'default token handling' stamp: ' 6/1/07 20:34'! whitespace "By default, eat the whitespace" self resetScanner. ^self scanForToken! ! !SmaCCToken commentStamp: '' prior: 83131981! SmaCCTokens are used as the interface objects between scanner and parser. They hold the string that was scanned and its position information. Also, included in the token is its id. The id specifies what type of token it is. Instance Variables: id the list of possible token types this represents. There can be overlapping tokens, so we list all of the id here. The default parser only looks at the first id, but we can redefine this behavior in a subclass to look at all possibilities until we find a valid token. start the starting position of the token in the original input value the value of our token (normally a string, but could be anything) ! !SmaCCToken class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! value: aString start: anInteger id: anObject ^(self new) value: aString start: anInteger id: anObject; yourself! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! id ^id! ! !SmaCCToken methodsFor: 'printing' stamp: ' 6/1/07 20:34'! printOn: aStream aStream nextPut: ${; nextPutAll: self value; nextPut: $(; nextPutAll: self startPosition printString; nextPut: $,; nextPutAll: self stopPosition printString; nextPut: $,; nextPutAll: self id printString; nextPutAll: ')}'! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! startPosition ^start! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! stopPosition ^start + value size - 1! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! value ^value! ! !SmaCCToken methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! value: anObject start: startPositionInteger id: anInteger value := anObject. start := startPositionInteger. id := anInteger! ! "SmaCC"! !SmaCCCompilationNotification commentStamp: 'jmb' prior: 0! SmaCCCompilationNotification is a notification that is raised when we discover a problem with the parser. For example, a shift/reduce conflict will raise this notification.! !SmaCCGrammarParser commentStamp: 'jmb' prior: 0! SmaCCGrammarParser is a parser for grammars. Instance Variables: grammar the grammar we are producing ! !SmaCCScannerParser commentStamp: '' prior: 0! SmaCCScannerParser is the parser for the scanner definition. Instance Variables: tokens the tokens that are parsed ! !SmaCCGrammarScanner commentStamp: 'jmb' prior: 0! SmaCCGrammarScanner is the scanner for the grammar parser! !SmaCCScannerScanner commentStamp: 'jmb' prior: 0! SmaCCScannerScanner is the scanner for the scanner definition! !SmaCCItemSet commentStamp: 'jmb' prior: 0! SmaCCItemSet represents a LALR(1) or a LR(1) item set. Instance Variables: type #LALR1 or #LR1 ! !SmaCCAction commentStamp: 'jmb' prior: 0! SmaCCAction is an abstract class that represents an action in the LR parsing table. Subclasses must implement the following messages: accessing id! !SmaCCAcceptAction commentStamp: 'jmb' prior: 0! SmaCCAcceptAction represents an accept action in the parser (i.e., we have parsed a valid string).! !SmaCCReduceAction commentStamp: 'jmb' prior: 0! SmaCCReduceAction represents a reduce action in our parser's table. Instance Variables: rhs the rhs that is being reduced symbol the symbol that has the rhs! !SmaCCRejectAction commentStamp: 'jmb' prior: 0! SmaCCRejectAction represents a reject action in the parsing tables.! !SmaCCShiftAction commentStamp: 'jmb' prior: 0! SmaCCShiftAction represents a shift action in the parser's tables.! !SmaCCEdge commentStamp: '' prior: 0! SmaCCEdge represents a transition in a Finite Automata (directed graph). It is labeled with the characters or states (possibly none, indicating an epsilon transition) that cause the transition. Instance Variables: toNode The node that this is transitioning to. transitionObjects The characters or symbols that cause the transition. Note that there are no duplicates and all characters/symbols are sorted.! !SmaCCCharacterEdge commentStamp: '' prior: 0! SmaCCCharacterEdge is a SmaCCEdge for Character transitions! !SmaCCStateEdge commentStamp: '' prior: 0! SmaCCStateEdge is a SmaCCEdge for Symbol (state) transitions ! !SmaCCGrammar commentStamp: '' prior: 0! SmaCCGrammar represents a LR(1) or a LALR(1) grammar. Instance Variables: otherStartingSymbols other starting productions. The first production in the grammar is the defaulting starting position, but this can list other starting positions. shiftReduceTable when we have a shift/reduce conflict how should we handle it. This table contains the left/right associative rules. Left is a reduce action and right is a shift action. symbols all symbols in our grammar -- includes both terminal and non-terminal tokens the tokens for our scanner type the type of grammar (LALR1 or LR1) ! !SmaCCGrammarCompiler commentStamp: 'jmb' prior: 0! SmaCCGrammarCompiler compiles a SmaCCGrammar. Instance Variables: actions the action table for the parser. It contains the action (shift/reduce/accept/reject) for each possible state/symbol pair grammar our grammar itemSets the item sets for our grammar model where we are compiling our changes into parserClass the parser class for our changes parserDefinitionString the definition of our parser scannerCompiler a compiler for the scanner shiftTable a table mapping a state/symbol pair to the new state that is aquired by shifting the symbol startingStateMap the state for SmaCCSymbol's starting item set ! !SmaCCGraphAlgorithm commentStamp: '' prior: 0! SmaCCGraphAlgorithm is an abstract class that has support for the graph transformation algorithms. ! !SmaCCDuplicateNodeEliminator commentStamp: '' prior: 0! SmaCCDuplicateNodeEliminator removes duplicate nodes in a SmaCCNode graph. Instance Variables: comparisonState dictionary mapping equivalent nodes root the root of the graph ! !SmaCCEpsilonRemoval commentStamp: '' prior: 0! SmaCCEpsilonRemoval removes epsilon nodes from a NFA. Instance Variables: nodeMap Dictionary mapping sets of states to a new state in the new graph ! !SmaCCNFAtoDFA commentStamp: '' prior: 0! SmaCCNFAtoDFAAlgorithm converts an NFA without epsilon transitions into a DFA. If a node contains edges that lead to multiple nodes for the same character, then a new state is created that merges all states for the given character. Instance Variables: mergedStates dictionary that maps a collection of states to the resulting merged state ! !SmaCCLR1Item commentStamp: 'jmb' prior: 0! SmaCCLR1Item represents an item in a SmaCCItemSet. Instance Variables: followers all possible symbols that can follow this production in this state location the position in the rhs of the production we are at rhs the rhs of the production symbol the symbol for the production! !SmaCCNode commentStamp: '' prior: 0! SmaCCNode is a node in a directed graph. Instance Variables: action a collection of integers or a symbol. This contains the action to be performed when we match and can't find a longer match. id a unique number that allows us to sort the nodes transitions our transitions ! !SmaCCParserGenerator commentStamp: 'jmb 1/23/2003 15:59' prior: 0! SmaCC: The Smalltalk Compiler-Compiler from John Brant and Don Roberts (http://www.refactory.com/Software/SmaCC) Tutorial This is a walk-through tutorial to demonstrate many of the features of SmaCC, the Smalltalk Compiler Compiler. In this example, we will incrementally develop a simple calculator. Our first calculator is going to be relatively simple. It is going to take two numbers and add them together. To start things off, we have to tell the scanner how to recognize a number. It starts with one or more digits, possibly followed by an decimal point with zero or more digits after it. The scanner definition for this token is: : [0-9]+ (\. [0-9]*) ? ; Enter that line into the scanner tab on the interface. Let's go over each part: Names the token. The name inside the <> must be a legal Smalltalk variable name. : Separates the name of the token from the token's definition. [0-9] Matches any single character in the range '0' to '9' (a digit). + Matches the previous expression one or more times. In this case, we are matching one or more digits. ( ... ) Groups subexpressions. \. Matches the '.' character (. has a special meaning in regular expressions, \ quotes it). * Matches the previous expression zero or more times. ? Matches the previous expression zero or one time (i.e., it is optional). ; Terminates a token specification. We don't want to have to worry about whitespace in our language, so we need to define what a whitespace is and to ignore it. To do this, enter the following token specification on the next line on the scanner page: : \s+; \s matches any whitespace character (space, tab, linefeed, etc.). So how do we tell the scanner to ignore it? If you look in the SmaCCScanner class, you will find a method named 'whitespace'. If a scanner understands a method that has the same name as a token name, that method will get called whenever the scanner matches that kind of token. As you can see, the whitespace method eats whitespace. There is also a 'comment' method that behaves similarly. The only other token that will appear in our system would be the '+' token for addition. However, since this is token is always the same, we don't have to tell the scanner what it looks like. It will figure it out from our grammar. Speaking of our grammar, let's go ahead and define it. Enter the following specification in the Parser tab: Expression : Expression "+" Number | Number ; Number : ; This basically says that an expressions is either a number or an expression added to a number. We should be able to compile a parser now. Switch to the Compile tab. You need to enter the class name for both the scanner and parser. Use CalculatorScanner and CalculatorParser respectively. Once the class names are entered, we are ready to compile the parser. Press the 'Compile LALR(1)' button (you should always push this one unless you know what you are doing. Basically, it will generate smaller parsers than the other option). This will create new Smalltalk classes for the CalculatorScanner and CalculatorParser and compile several methods in those classes. All methods that SmaCC compiles will go into a "generated-*" method protocol. You should not change those methods since they are replace each time you compile. Whenever SmaCC creates new classes, they are compiled in the default application/package. If you are using VisualAge, you will need to make sure that the default application is an open edition and that it prereqs the SmaCCRuntime application. If you have already created the scanner and parser classes, you can load their definitions by using the "..." buttons next to the class name entry fields. If you answer "Yes" to the dialog, the text in the scanner/parser tabs will be replaced with the definition that was last compiled (assuming that the "Generate definition comments" was checked during the last compile). Now we are ready to test our parser. Go to the “test” pane, enter “3 + 4”, and press the “parse” button; you will see that the parser correctly parses it. If you press “Parse and Inspect” you will see and inspector on an OrderedCollection that contains the parsed tokens. This is because we haven't specified what the parser is supposed to do when it parses. You can also enter incorrect items. For example, try to parse "3 + + 4" or "3 + a". An error message should appear in the text. Now we need to define the actions that need to happen when we parse our expressions. Currently, our parser is just validating that the expression is a bunch of numbers added together. Generally, you will create some structure that represents what you've parsed (e.g., a parse tree). However, in this case, we are not concerned about the structure, but we are concerned about the result (the value of the expression). For our example, you need to modify the grammar definition to be: Expression : Expression "+" Number {'1' + '3'} | Number {'1'} ; Number : {'1' value asNumber} ; The text between the braces is Smalltalk code that gets evaluated when the rule is applied. Strings with a number get replaced with the corresponding parse node. In the first Expression rule, the '1' will get replaced by the ParseNode that matches Expression and the '3' gets replaced by the ParseNode that matches Number. The second item in the rule is the "+" token. Since we already know what it is, it is not interesting. Compile the new parser. Now when you do a 'Parse and Inspect' from the test pane, you should see the result: 7. One problem with the previous code is that if you need to change a rule then you may also need to change the code for that rule. For example, suppose you inserted a new token at the beginning of a rule, then you would need to change all of your references in the Smalltalk code. We can alleviate this problem by using named expressions. After each part of a rule, we can specify its name. Names are specified with single quotes and must be legal Smalltalk variable names. Doing this for our grammar we get: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Number 'number' {number} ; Number : 'numberToken' {numberToken value asNumber} ; While this will result in the same language being parsed, it makes it easier to maintain your parsers. Let's extend our language to add subtraction. Here's the new grammar: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; After you've compiled this, '3 + 4 - 2 ' should return '5'. Next, let's add multiplication and division: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Expression 'expression' "*" Number 'number' {expression * number} | Expression 'expression' "/" Number 'number' {expression / number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Here we run into a problem. If you evaluate '2 + 3 * 4' you end up with 20. The problem is that in standard mathematics, multiplication has a higher precedence than addition. Our grammar evaluates strictly left-to-right. The standard solution for this problem is to define additional nonterminals to force the sequence of evaluation. Our grammar with that solution would look like: Expression : Term 'term' {term} | Expression 'expression' "+" Term 'term' {expression + term} | Expression 'expression' "-" Term 'term' {expression - term}; Term : Number 'number' {number} | Term 'term' "*" Number 'number' {term * number} | Term 'term' "/" Number 'number' {term / number}; Number : 'numberToken' {numberToken value asNumber}; If you compile this grammar, you will see that '2 + 3 * 4' evaluates to 14 like we would expect. Now, as you can imagine, this gets pretty complicated as the number of precedence rules increases (e.g., C). We can use ambiguous grammars and precedence rules to simplify this situation. Here is the same grammar using precedence to enforce our evaluation order: %left "+" "-"; %left "*" "/"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Notice that we changed the grammar so that there are Expressions on both sides of the operator. The two lines that we added to the top of the grammar mean that “+” and “-” are evaluated left-to-right and have the same precedence, which is lower than “*” and “/”. Likewise, the second line means that “*” and “/” have equal precedence. Grammars in this form are usually much more intuitive, especially in cases with many precedence levels. Just as an example, let's add exponentiation and parentheses: %left "+" "-"; %left "*" "/"; %right "^"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Expression 'exp1' "^" Expression 'exp2' {exp1 raisedTo: exp2} | "(" Expression 'expression' ")" {expression} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Once you have compiled the grammar, you will be able to evaluate '3 + 4 * 5 ^ 2 ^ 2' to get 2503. Since the exponent operator is right associative, this expression is evaluated like 3 + (4 * (5 ^ (2 ^ 2))). We can also evaluate expressions with parentheses. For example, evaluating '(3 + 4) * (5 - 2) ^ 3' results in 189. The Scanner Scanning takes an input stream of characters and converts that into a stream of tokens. The tokens are then passed on to the parsing phase. The scanner is specified by a collection of token specifications. Each token is specified by: TokenName : RegularExpression ; TokenName is a valid Smalltalk variable name that is surrounded by <>. For example, "" is a valid TokenName, but "" is not since "token name" isn't a valid Smalltalk variable name. The RegularExpression is a regular expression that matches a token. It should match one or more characters in the input stream. The colon character, ":", is used to separate the TokenName and the RegularExpression, and the semicolon character, ";", is used to terminate the token specification. Regular Expression Syntax While the rules are specified as regular expressions, there are many different syntaxes for regular expressions. We choose a relatively simple syntax that is specified below. If you wish to have a more rich syntax, you can modify the scanner's parser: SmaCCScannerScanner & SmaCCScannerParser. These classes were created using SmaCC. \character Matches a special character. The character immediately following the backslash is matched exactly, unless it is a letter. Backslash-letter combinations have other meanings and are specified below. \cLetter Matches a control character. Control characters are the first 26 characters (e.g., \cA equals "Character value: 0"). The letter that follows the "\c" must be an uppercase letter. \d Matches a digit, 0-9. \D Matches anything that is not a digit. \f Matches a form-feed character, "Character value: 12". \n Matches a newline character, "Character value: 10". \r Matches a carriage return character, "Character value: 13". \s Matches any whitespace character, [ \f\n\r\t\v]. \S Matches any non-whitespace character. \t Matches a tab, "Character value: 9". \v Matches a vertical tab, "Character value: 11" \w Matches any letter, number or underscore, [A-Za-z0-9_]. \W Matches anything that is not a letter, number or underscore. \xHexNumber Matches a character specified by the hex number following the "\x". The hex number must be at least one character long and no more than four characters for Unicode characters and two characters for non-Unicode characters. For example, "\x20" matches the space character (Character value: 16r20), and "\x1FFF" matches "Character value: 16r1FFF". Copies the definition of into the current regular expression. For example, if we have " : \d | [A-F] ;", we can use in a later rule: " : + ;". [characters] Matches one of the characters inside the []. This is a shortcut for the "|" operator. In addition to single characters, you can also specify character ranges with the "-" character. For example, "[a-z]" matches any lower case letter. [^characters] Matches any character not listed in the characters block. "[^a]" matches anything except for "a". # comment Creates a comment that is ignored by SmaCC. Everything from the # to the end of the line is ignored. exp1| exp2 Matches either exp1 or exp2. exp1 exp2 Matches exp1 followed by exp2. "\d \d" matches two digits. exp* Matches exp zero or more times. "0*" matches "" and "000". exp? Matches exp zero or one time. "0?" matches only "" or "0". exp+ Matches exp one or more times. "0+" matches "0" and "000", but not "". exp{min,max} Matches exp at least min times but no more than max times. "0{1,2}" matches only "0" or "00". It does not match "" or "000". (exp) Groups exp for precedence. For example, "(a b)*" matches "ababab". Without the parentheses, "a b *" would match "abbbb" but not "ababab". Since there are multiple ways to combine expressions, we need precedence rules for their combination. The or operator, "|", has the lowest precedence and the "*", "?", "+", and "{,}" operators have the highest precedence. For example, "a | b c *" matches "a" or "bcccc", but not "accc" or "bcbcbc". If you wish to match "a" or "b" followed by any number of c's, you need to use "(a | b) c *". Overlapping Tokens Unlike T-Gen, SmaCC can handle overlapping tokens with any problems. For example, the following is a legal SmaCC scanner definition: : [a-zA-Z] \w* ; : . ; This definition will match a variable or a single character. A variable can also be a single character [a-zA-Z], so the two tokens overlap. SmaCC handles overlapping characters by preferring the first token specified by the grammar. For example, an "a" could be a or an token, but since is specified first, SmaCC will use it. Matching Methods If your scanner has a method name that matches the name of the token, (e.g. whitespace), that method will get called upon a match of that type. The SmaCCScanner superclass already has a default implementation of #whitespace and #comment. These methods ignore those tokens by default. Matching methods can also be used to handle overlapping token classes. For example, in the C grammar, a type definition is the same as an identifier. The only way that they can be disambiguated is by looking up the name in the type table. In our example C parser, we have an IDENTIFIER method that is used to determine whether the token is really an IDENTIFIER or whether it is a TYPE_NAME. Unreferenced Tokens If a token is not referenced from a grammar specification, it will not be included in the generated scanner, unless the token's name is also a name of a method (see previous section). This, coupled with the ability to do substitutions, allows you to have the equivalent of macros within your scanner specification. However, be aware that if you are simply trying to generate a scanner, you will have to make sure that you create a dummy parser specification that references all of the tokens that you want in the final scanner. Case Insensitive Scanning You can specify that the scanner should ignore case differences by checking the "Ignore Case" option on the compile tab. If you have a language that is case insensitive and has several keywords, this can be a handy feature to have. For example, if you have "THEN" as a keyword in a case insensitive language, you would need to specify a token for then as " : [tT] [hH] [eE] [nN] ;". This is a pain to enter correctly. When the ignore case option is checked, SmaCC will automatically convert "THEN" into "[tT][hH][eE][nN]". Unicode Characters SmaCC compiles the scanner into a bunch of conditional tests on characters. Normally, it assumes that characters have values between 0 and 255, and it can make some optimizations based on this fact. With the "Allow Unicode Characters" option checked, it will assume that characters have values between 0 and 65535. The Parser Parsing converts the stream of tokens provided by the scanner into some object. Normally, this object will be a parse tree, but it does not have to be a parse tree. For example, the SmaCC tutorial shows a calculator. This calculator does not produce a parse tree; it produces the result, a number. In SmaCC the parser is defined by the grammar specification entered in the 'Parser' tab. The grammar specification has two parts, an optional directives section and the production rules. The directives section is used to tell SmaCC how to handle ambiguous grammars as well as how it should generate the code for the parser. The production rules section contains the grammar for the parser and the code that executes when a production rule is matched. Directives The optional directives section consists of a set of directives. The system currently has 5 directives. Each directive begins with a "%" character and the directive keyword, then lists a set of symbols, and finally ends with the semicolon character, ";". Ambiguous Grammars and Precedence SmaCC can handle ambiguous grammars. Given an ambiguous grammar, SmaCC will produce some parser. However, it may not parse correctly. For an LR parser, there are two basic types of ambiguities, reduce/reduce conflicts and shift/reduce conflicts. Reduce/reduce conflicts are bad. SmaCC has no directives to handle them and just picks one of the choices. These conflicts normally require a rewrite of your grammar. On the other hand, shift/reduce conflicts can be handled by SmaCC without rewriting your grammar. When SmaCC encounters a shift/reduce conflict it will perform the shift action by default. However, you can control this action with the "%left", "%right", and "%nonassoc" directives. If a token has been declared in a "%left" directive, it means that the token is left-associative. Therefore, the parser will perform a reduce operation. However, if it has been declared as right-associative, it will perform a shift operation. A token defined as %nonassoc will produce an error if that is encountered during parsing. For example, you may want to specify that the equal operator, "=", is non-associative, so "a = b = c" is not parsed as a valid expression. All three directives are followed by a list of tokens. Additionally, the %left, %right, and %nonassoc directives allow precedence to be specified. The order of the directives specifies the precedence of the tokens. The higher precedence tokens appear on the higher line numbers. For example, the following directive section gives the precedence for the simple calculator in our tutorial: %left "+" "-"; %left "*" "/"; %right "^"; The "+" and "-" symbols appear on the first line and have the lowest precedence. They are also left-associative so "1 + 2 +3" will be evaluated as "(1 + 2) + 3". On the next line are the "*" and "/" symbols. Since they appear on a higher line number, they have higher precedence than the "+" and "-". Finally, on line three we have the "^" symbol. It has the highest precedence. Combining all the rules allows us to parse "1 + 2 * 3 / 4 ^ 2 ^ 3" as "1 + ((2 * 3) / (4 ^ (2 ^ 3)))". Start Symbols By default, the left-hand side of the first grammar rule is the start symbol. If you want to multiple start symbols, then you can specify them by using the "%start" directive followed by the nonterminals that are additional start symbols. This is useful for creating two parsers with two grammars that are similar but slightly different. For example, consider a Smalltalk parser. You can parse methods, and you can parse expressions. These are two different operations, but have very similar grammars. Instead of creating two different parsers for parsing methods and expressions, we can specify one grammar that parses methods and also specify another starting position for parsing expressions. The StParser in the SmaCC Example Parsers package has an example of this. The StParser class>>parseMethod: uses the #startingStateForMethod position to parse methods and the StParser class>>parseExpression: uses the #startingStateForSequenceNode position to parse expressions. Id Methods Internally, the various token types are represented as integers. However, there are times that you need to reference the various token types. For example, in the CScanner and CParser classes, the TYPE_NAME token is identical to the IDENTIFIER token. The IDENTIFIER matching method does a lookup in the type table and if it finds a type definition with the same name as the current IDENTIFIER, it want to return the TYPE_NAME token type. To determine what integer this is, the parser was created with an %id directive for and . This generates the IDENTIFIERId and TYPE_NAMEId methods on the scanner. These methods simply return the number representing that token type. See the C sample scanner and parser for a good example of how this is used. Production Rules The production rules contains the grammar for the parser. The first production rule is considered to be the starting rule for the parser. Each production rule consists of a non-terminal symbol name followed by a ":" separator which is followed by a list of possible productions separated by vertical bar, "|", and finally terminated by a semicolon, ";". Each production consists of a sequence of non-terminal symbols, tokens, or keywords followed by some optional Smalltalk code enclosed in curly brackets, {}. Non-terminal symbols are valid Smalltalk variable names and must be defined somewhere in the parser definition. Forward references are valid. Tokens are enclosed in angle brackets as they are defined in the scanner (e.g., ) and keywords are enclosed in double-quotes (e.g., "then"). Keywords that contain double-quotes need to have two double-quotes per each double-quote in the keyword. For example, if you need a keyword for one double-quote character, you would need to enter """" (four double-quote characters). The Smalltalk code is evaluated whenever that production is matched. If the code is a zero or a one argument symbol, then that method is performed. For a one argument symbol, the argument is an OrderedCollection that contains one element for each item in the production. If the code isn't a zero or one argument symbol, then the code is executed and whatever is returned by the code is the result of the production. If no Smalltalk code is specified, then the default action is to execute the #reduceFor: method. This method converts all items into an OrderedCollection. If one of the items is another OrderedCollection, then all of its elements are added to the new collection. Inside the Smalltalk code you can refer to the values of each production item by using literal strings. The literal string, '1', refers the to value of the first production item. The values for tokens and keywords will be SmaCCToken objects. The value for all non-terminal symbols will be whatever the Smalltalk code evaluates to for that non-terminal symbol. Named Symbols When entering the Smalltalk code, you can get the value for a symbol by using the literal strings (e.g., '2'). However, this creates difficulties when modifying a grammar. If you insert some symbol at the beginning of a production, then you will need to modify your Smalltalk code changing all literal string numbers. Instead you can name each symbol in the production and then refer to the name in the Smalltalk code. To name a symbol (non-terminal, token, or keyword), you need to add a quoted variable name after the symbol in the grammar. For example, "MySymbol : Expression 'expr' "+" 'num' {expr + num} ;" creates two named variables. One for the non-terminal Expression and one for the token. These variables are then used in the Smalltalk code. Extended Syntax SmaCC also has some extended syntax that makes it easier to enter different grammars. Most of the additions are for the productions, but one change that is not for productions is the addition of "::=" as the separator between the non-terminal and the production. The production syntax enhancements are listed in the following table: Symbol ? Makes symbol optional. It is equivalent to defining a new production rule: "Optional_Symbol : Symbol {'1'} | {nil};". Symbol * or Symbol + Makes a repeating symbol. The "*" repeats zero or more times, and the "+" repeats one or more times. It is equivalent to defining a new production rule: "Repeat_Symbol : | Symbol;" for "*" and "Repeat_Symbol : Symbol | Repeat_Symbol Symbol ;" for "+". ( Productions ) Groups the items in Productions. By itself it is not that useful, but it can be combined with the "?", "*", or "+". It is equivalent to defining "Group_Productions : Productions ;". [ Productions ] Equivalent to "( Productions ) ?". <% Productions %> Equivalent to "( Productions ) *" Parser Comments The compile page has three options to generate comments. You should always select the "Generate definition comments". That saves the scanner and parser definition strings into the scanner and parser classes. It allows your grammar to be under the same version control system as your Smalltalk code. The other two comment options should not be needed unless you need to debug a parser generated. The "generate symbol comments" option will generate a comment that explains what each symbol is mapped to. When SmaCC compiles a grammar it converts all symbols into integers. This comment gives you the integer for each symbol. You may need this information if you have an incorrect scanner definition. For example, you may have overlapping token definitions and SmaCC is picking the wrong one (by default it picks the first one in your scanner definition). When you debug, you can inspect the SmaCCToken object and validate its "id" with those in the symbol comment. If they are different, then you have a bug in your scanner. Finally, the "generate item set comments" option should rarely be needed. It generates a listing of all LR(1) item sets in the parser. If you are familiar with LR parsing, then it might be interesting to look at. However, for a moderate sized grammar (e.g., Java), this comment can be a few MB in size. I would not recommend generating such comments when using ENVY -- you don't want to store a 10MB method in your library. For the calculator example in the tutorial, this comment is 9,000 characters long. Error Recovery Normally, when the parser encounters an error, it raises the SmaCCParserError exception and parsing is immediately stopped. However, there are times when you may wish to try to parse more of the input. For example, if you are highlighting code, you do not want to stop highlighting at the first syntax error. Instead you may wish to attempt to recover after the statement separator -- the period ".". SmaCC uses the error symbol to specify where error recovery should be attempted. For example, we may have the following rule to specify a list of Smalltalk statements: Statements : Expression | Statements "." Expression ; If we wish to attempt recovery from a syntax error when we encounter a period, we can change our rule to be: Statements : Expression | Statements "." Expression | error "." Expression ; While the error recovery allows you to proceed parsing after a syntax error, it will not allow you to return a parse tree from the input. Once the input has been parsed with errors, it will raise a non-resumable SmaCCParserError. ! !SmaCCRHS commentStamp: 'jmb' prior: 0! SmaCCRHS represents the right hand side of the production. Instance variables: collection the collection of symbols that represent the rhs grammar the grammar that the production is in variableNames the name of each symbol in the rhs. These names can be used in the {} code blocks.! !SmaCCRegularExpressionNode commentStamp: '' prior: 0! SmaCCRegularExpressionNode represents a regular expression. The scanner is represented by a regular expression. These are the initial objects created in producing the scanner. From these nodes, we create a directed graph and then we compile the graph. Subclasses must implement the following messages: accessing possibleMatchesSize private asNFAStartingWith: possibleMatchesDo:on: Instance Variables: action the actions to be performed when we find a match position the position of the RE in the scanner. If we have multiple matches, we prefer the ones listed first.! !SmaCCCharacterRENode commentStamp: 'jmb' prior: 0! SmaCCCharacterRENode represents a regular expression that matches one of a set of characters. Instance Variables: characters The characters that this node can accept. Note that there are no duplicates and all characters are sorted. ! !SmaCCOrRENode commentStamp: 'jmb' prior: 0! SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative. Instance Variables: nodes our possible choices! !SmaCCRepeatingRENode commentStamp: 'jmb' prior: 0! SmaCCRepeatingRENode represents a repeating node in a regular expression. Instance Variables: maximumMatches the minimum number of matches required minimumMatches the maximum number of matches allowed. An infinite amount of matches is represented by (SmaCCRepeatingRENode finiteInfinity). node what we need to match! !SmaCCSequenceRENode commentStamp: 'jmb' prior: 0! SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together. Instance Variables: nodes our children nodes in left-to-right order! !SmaCCScannerCompiler commentStamp: 'jmb' prior: 0! SmaCCScannerCompiler represents the compiler for the scanner part of the parser. Instance Variables: grammar the grammar that defines the scanner scannerClass the class to compile the scanner into scannerDefinitionString the string that defines the scanner! !SmaCCScannerDefinition commentStamp: '' prior: 0! SmaCCScannerDefinition is the parsed representation of the scanner. It contains the tokens and states for the scanner. Instance Variables: excludeStates exclusive states (when we are in one of these, then we shouldn't try to parse the default tokens) states states in the scanner -- if no states are specified, then this will only contain #default tokens dictionary mapping token names to their regular expressions ! !SmaCCSymbol commentStamp: '' prior: 0! SmaCCSymbol is an abstract class that represents a symbol in the grammar. Subclasses must implement the following messages: accessing calculateFirstTerminals testing isTerminal Instance Variables: firstItems the first terminals that can be produced from us name our name precedence our precedence (in case of shift/reduce conflicts) ! !SmaCCNonTerminalSymbol commentStamp: 'jmb' prior: 0! SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar. Instance Variables: productions our rhs' for the symbol! !SmaCCStartingSymbol commentStamp: 'jmb' prior: 0! SmaCCStartingSymbol is the starting symbol in the grammar. A grammar can only have one starting symbol, but it can have may different starting item sets.! !SmaCCTerminalSymbol commentStamp: 'jmb' prior: 0! SmaCCTerminalSymbol represents a terminal symbol in our grammar. Instance Variables: createIdMethod should we create a symbolNameId method for this symbol. regularExpression our regular expression that we must match for this terminal symbol! !SmaCCSymbolSet commentStamp: 'jmb' prior: 0! SmaCCSymbolSet represents a set of follow symbols in the LALR(1) item sets. Instance Variables: components other SmaCCSymbolSets that we depend on, we include all items in these sets also symbols our follow symbols! !SmaCCCompilationNotification commentStamp: 'jmb' prior: 83160582! SmaCCCompilationNotification is a notification that is raised when we discover a problem with the parser. For example, a shift/reduce conflict will raise this notification.! !CParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "%id ; translationUnit : external_declaration | translationUnit external_declaration ; primary_expression : | | | ""("" expression "")"" ; postfix_expression : primary_expression | postfix_expression expression | postfix_expression ""("" "")"" | postfix_expression ""("" argument_expression_list "")"" | postfix_expression ""."" | postfix_expression ""->"" | postfix_expression ""++"" | postfix_expression ""--"" ; argument_expression_list : assignment_expression | argument_expression_list "","" assignment_expression ; unary_expression : postfix_expression | ""++"" unary_expression | ""--"" unary_expression | unary_operator cast_expression | ""sizeof"" unary_expression | ""sizeof"" ""("" type_name "")"" ; unary_operator : ""&"" | ""*"" | ""+"" | ""-"" | ""~"" | ""!!"" ; cast_expression : unary_expression | ""("" type_name "")"" cast_expression ; multiplicative_expression : cast_expression | multiplicative_expression ""*"" cast_expression | multiplicative_expression ""/"" cast_expression | multiplicative_expression ""%"" cast_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; logical_and_expression : inclusive_or_expression | logical_and_expression ""&&"" inclusive_or_expression ; logical_or_expression : logical_and_expression | logical_or_expression ""||"" logical_and_expression ; conditional_expression : logical_or_expression | logical_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | unary_expression assignment_operator assignment_expression ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | ""&="" | ""^="" | ""|="" ; expression : assignment_expression | expression "","" assignment_expression ; constant_expression : conditional_expression ; declaration : declaration_specifiers "";"" | declaration_specifiers init_declarator_list "";"" ; declaration_specifiers : storage_class_specifier | storage_class_specifier declaration_specifiers | type_specifier | type_specifier declaration_specifiers | type_qualifier | type_qualifier declaration_specifiers ; init_declarator_list : init_declarator | init_declarator_list "","" init_declarator ; init_declarator : declarator | declarator ""="" initializer ; storage_class_specifier : ""typedef"" | ""extern"" | ""static"" | ""auto"" | ""register"" ; type_specifier : ""void"" | ""char"" | ""short"" | ""int"" | ""long"" | ""float"" | ""double"" | ""signed"" | ""unsigned"" | struct_or_union_specifier | enum_specifier | ; struct_or_union_specifier : struct_or_union struct_declaration_list {self addTypeName: '2' value. self reduceFor: nodes} | struct_or_union struct_declaration_list | struct_or_union {self addTypeName: '2' value. self reduceFor: nodes} ; struct_or_union : ""struct"" | ""union"" ; struct_declaration_list : struct_declaration | struct_declaration_list struct_declaration ; struct_declaration : specifier_qualifier_list struct_declarator_list "";"" ; specifier_qualifier_list : type_specifier specifier_qualifier_list | type_specifier | type_qualifier specifier_qualifier_list | type_qualifier ; struct_declarator_list : struct_declarator | struct_declarator_list "","" struct_declarator ; struct_declarator : declarator | "":"" constant_expression | declarator "":"" constant_expression ; enum_specifier : ""enum"" enumerator_list | ""enum"" enumerator_list {self addTypeName: '2' value. self reduceFor: nodes} | ""enum"" {self addTypeName: '2' value. self reduceFor: nodes} ; enumerator_list : enumerator | enumerator_list "","" enumerator ; enumerator : | ""="" constant_expression ; type_qualifier : ""const"" | ""volatile"" ; declarator : pointer direct_declarator | direct_declarator ; direct_declarator : | ""("" declarator "")"" | direct_declarator constant_expression | direct_declarator | direct_declarator ""("" parameter_type_list "")"" | direct_declarator ""("" identifier_list "")"" | direct_declarator ""("" "")"" ; pointer : ""*"" | ""*"" type_qualifier_list | ""*"" pointer | ""*"" type_qualifier_list pointer ; type_qualifier_list : type_qualifier | type_qualifier_list type_qualifier ; parameter_type_list : parameter_list | parameter_list "","" ; parameter_list : parameter_declaration | parameter_list "","" parameter_declaration ; parameter_declaration : declaration_specifiers declarator | declaration_specifiers abstract_declarator | declaration_specifiers ; identifier_list : | identifier_list "","" ; type_name : specifier_qualifier_list | specifier_qualifier_list abstract_declarator ; abstract_declarator : pointer | direct_abstract_declarator | pointer direct_abstract_declarator ; direct_abstract_declarator : ""("" abstract_declarator "")"" | | constant_expression | direct_abstract_declarator | direct_abstract_declarator constant_expression | ""("" "")"" | ""("" parameter_type_list "")"" | direct_abstract_declarator ""("" "")"" | direct_abstract_declarator ""("" parameter_type_list "")"" ; initializer : assignment_expression | initializer_list | initializer_list "","" ; initializer_list : initializer | initializer_list "","" initializer ; statement : labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement ; labeled_statement : "":"" statement | ""case"" constant_expression "":"" statement | ""default"" "":"" statement ; compound_statement : | statement_list | declaration_list | declaration_list statement_list ; declaration_list : declaration | declaration_list declaration ; statement_list : statement | statement_list statement ; expression_statement : "";"" | expression "";"" ; selection_statement : ""if"" ""("" expression "")"" statement | ""if"" ""("" expression "")"" statement ""else"" statement | ""switch"" ""("" expression "")"" statement ; iteration_statement : ""while"" ""("" expression "")"" statement | ""do"" statement ""while"" ""("" expression "")"" "";"" | ""for"" ""("" expression_statement expression_statement "")"" statement | ""for"" ""("" expression_statement expression_statement expression "")"" statement ; jump_statement : ""goto"" "";"" | ""continue"" "";"" | ""break"" "";"" | ""return"" "";"" | ""return"" expression "";"" ; external_declaration : function_definition | declaration ; function_definition : declaration_specifiers declarator declaration_list compound_statement | declaration_specifiers declarator compound_statement | declarator declaration_list compound_statement | declarator compound_statement ; "! ! !CParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^CScanner! ! !CParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateFortranslationUnit ^1! ! !CParser methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! addTypeName: aString scanner addTypeName: aString! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForenumXspecifier2: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForenumXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForstructXorXunionXspecifier1: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForstructXorXunionXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(84 1 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 3 #reduceFor:) #(84 2 #reduceFor:) #(84 2 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 3 #reduceFor:) #(86 1 #reduceFor:) #(86 3 #reduceFor:) #(87 1 #reduceFor:) #(87 3 #reduceFor:) #(88 1 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 4 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(90 1 #reduceFor:) #(90 4 #reduceFor:) #(91 1 #reduceFor:) #(91 2 #reduceFor:) #(92 1 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(93 1 #reduceFor:) #(93 3 #reduceFor:) #(93 3 #reduceFor:) #(94 1 #reduceFor:) #(94 3 #reduceFor:) #(94 3 #reduceFor:) #(95 1 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(96 1 #reduceFor:) #(96 3 #reduceFor:) #(96 3 #reduceFor:) #(97 1 #reduceFor:) #(97 3 #reduceFor:) #(98 1 #reduceFor:) #(98 3 #reduceFor:) #(99 1 #reduceFor:) #(99 3 #reduceFor:) #(100 1 #reduceFor:) #(100 3 #reduceFor:) #(101 1 #reduceFor:) #(101 3 #reduceFor:) #(102 1 #reduceFor:) #(102 5 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(106 1 #reduceFor:) #(106 3 #reduceFor:) #(107 2 #reduceFor:) #(107 3 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(110 1 #reduceFor:) #(110 1 #reduceFor:) #(111 1 #reduceFor:) #(111 3 #reduceFor:) #(112 2 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(113 1 #reduceFor:) #(114 5 #reduceActionForstructXorXunionXspecifier1:) #(114 4 #reduceFor:) #(114 2 #reduceActionForstructXorXunionXspecifier3:) #(115 4 #reduceFor:) #(115 5 #reduceActionForenumXspecifier2:) #(115 2 #reduceActionForenumXspecifier3:) #(116 1 #reduceFor:) #(116 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 2 #reduceFor:) #(119 1 #reduceFor:) #(119 3 #reduceFor:) #(120 3 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(122 1 #reduceFor:) #(122 3 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(123 3 #reduceFor:) #(124 1 #reduceFor:) #(124 3 #reduceFor:) #(125 1 #reduceFor:) #(125 3 #reduceFor:) #(126 1 #reduceFor:) #(126 2 #reduceFor:) #(126 2 #reduceFor:) #(126 3 #reduceFor:) #(127 1 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(128 1 #reduceFor:) #(128 3 #reduceFor:) #(129 1 #reduceFor:) #(129 3 #reduceFor:) #(130 1 #reduceFor:) #(130 2 #reduceFor:) #(131 1 #reduceFor:) #(131 3 #reduceFor:) #(133 2 #reduceFor:) #(133 2 #reduceFor:) #(133 1 #reduceFor:) #(134 1 #reduceFor:) #(134 1 #reduceFor:) #(134 2 #reduceFor:) #(135 3 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(136 1 #reduceFor:) #(136 3 #reduceFor:) #(137 3 #reduceFor:) #(137 4 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(138 3 #reduceFor:) #(138 3 #reduceFor:) #(138 4 #reduceFor:) #(139 1 #reduceFor:) #(139 2 #reduceFor:) #(140 5 #reduceFor:) #(140 7 #reduceFor:) #(140 5 #reduceFor:) #(141 5 #reduceFor:) #(141 7 #reduceFor:) #(141 6 #reduceFor:) #(141 7 #reduceFor:) #(142 3 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 3 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(144 1 #reduceFor:) #(144 2 #reduceFor:) #(145 1 #reduceFor:) #(145 2 #reduceFor:) #(146 4 #reduceFor:) #(146 3 #reduceFor:) #(146 3 #reduceFor:) #(146 2 #reduceFor:) #(149 1 #reduceFor:) #(149 2 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(150 4 #reduceFor:) )! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 121 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 153 0 149] #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112 0 137 0 126 0 141 0 127] #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 38 0 76 2 38 0 79 0 161 0 110 0 165 0 126 0 169 0 130] #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 158 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 210 0 76 0 81] #[0 1 214 0 76 0 81] #[1 0 173 0 76 0 177 0 81] #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 138 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 86 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 90 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 94 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 98 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 122 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 126 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 114 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 118 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 130 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 102 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 106 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 110 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 54 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 0 193 0 112 0 137 0 126 0 141 0 127] #[0 1 182 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 46 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 46 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 46 0 76 1 46 0 79 0 197 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 54 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 54 0 76 1 54 0 79 0 201 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 62 0 21 1 62 0 25 1 62 0 26 1 62 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 62 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 62 0 76 1 62 0 79 0 205 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 0 221 0 138 0 225 0 145] #[0 3 66 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 1 142 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 146 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[1 0 229 0 76 0 233 0 81] #[1 0 9 0 25 0 93 0 76 0 237 0 127] #[1 1 174 0 16 1 174 0 17 1 174 0 21 0 241 0 25 1 174 0 26 1 174 0 40 1 174 0 41 1 174 0 43 1 174 0 44 1 174 0 45 1 174 0 51 1 174 0 55 1 174 0 57 1 174 0 58 1 174 0 60 1 174 0 61 1 174 0 65 1 174 0 66 1 174 0 67 1 174 0 68 1 174 0 69 1 174 0 70 1 174 0 71 1 174 0 72 1 174 0 73 0 245 0 79 1 174 0 81 1 174 0 132] #[0 1 150 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 178 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 249 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 0 0 147] #[0 0 253 0 26] #[0 2 98 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 46 0 21 0 25 0 26 0 76 0 79] #[1 2 42 0 21 2 42 0 25 2 42 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 42 0 76 2 42 0 79 1 1 0 110 1 5 0 126] #[1 1 206 0 16 1 206 0 21 1 206 0 25 1 206 0 26 1 206 0 34 1 206 0 40 1 206 0 41 1 206 0 43 1 206 0 44 1 206 0 45 1 206 0 51 1 206 0 55 1 206 0 57 1 206 0 58 1 206 0 60 1 206 0 61 1 206 0 65 1 206 0 66 1 206 0 67 1 206 0 68 1 206 0 69 1 206 0 70 1 206 0 71 1 206 0 72 1 206 0 73 1 206 0 76 1 206 0 79 1 9 0 81 1 206 0 132] #[1 1 13 0 76 1 17 0 124 1 21 0 125] #[0 1 78 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 25 0 21 1 29 0 60] #[0 1 70 0 21 0 60] #[1 1 33 0 17 1 162 0 21 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 162 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 1 37 0 138 1 41 0 145] #[0 1 50 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 58 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 66 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 145 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 1 249 0 144 1 253 0 145] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 3 42 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 62 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 9 0 138] #[1 1 194 0 16 1 194 0 21 1 194 0 25 1 194 0 26 1 194 0 34 1 194 0 40 1 194 0 41 1 194 0 43 1 194 0 44 1 194 0 45 1 194 0 51 1 194 0 55 1 194 0 57 1 194 0 58 1 194 0 60 1 194 0 61 1 194 0 65 1 194 0 66 1 194 0 67 1 194 0 68 1 194 0 69 1 194 0 70 1 194 0 71 1 194 0 72 1 194 0 73 1 194 0 76 1 194 0 79 2 13 0 81 1 194 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 25 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 170 0 16 1 170 0 17 1 170 0 21 0 241 0 25 1 170 0 26 1 170 0 40 1 170 0 41 1 170 0 43 1 170 0 44 1 170 0 45 1 170 0 51 1 170 0 55 1 170 0 57 1 170 0 58 1 170 0 60 1 170 0 61 1 170 0 65 1 170 0 66 1 170 0 67 1 170 0 68 1 170 0 69 1 170 0 70 1 170 0 71 1 170 0 72 1 170 0 73 0 245 0 79 1 170 0 81 1 170 0 132] #[1 2 37 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 41 0 76 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 49 0 128 2 53 0 129 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 69 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 81 0 104 1 217 0 119] #[0 3 70 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 2 58 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 50 0 21 0 25 0 26 0 76 0 79] #[1 1 13 0 76 2 85 0 124 1 21 0 125] #[1 2 89 0 17 2 30 0 21 2 30 0 82] #[1 2 93 0 21 2 97 0 82] #[0 2 22 0 21 0 82] #[1 0 9 0 25 0 13 0 34 0 93 0 76 2 101 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 1 82 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 2 113 0 150] #[0 3 54 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 117 0 138] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 125 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 129 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 133 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 137 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 2 141 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 94 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 110 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 114 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 98 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 102 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 106 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 153 0 104 1 217 0 119] #[0 2 157 0 16] #[0 2 161 0 25] #[0 2 165 0 60] #[0 2 169 0 60] #[0 2 173 0 25] #[0 2 177 0 76] #[0 2 181 0 25] #[0 2 185 0 25] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 2 189 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 193 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 210 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 0 38 0 1 0 38 0 2 0 38 0 3 0 38 0 4 0 38 0 5 0 38 0 6 0 38 0 7 0 38 0 8 0 38 0 9 0 38 0 10 0 38 0 11 0 38 0 12 0 38 0 13 0 38 0 14 0 38 0 15 2 201 0 16 0 38 0 17 0 38 0 18 0 38 0 19 0 38 0 20 0 38 0 21 0 38 0 22 0 38 0 23 0 38 0 25 0 38 0 27 0 38 0 28 0 38 0 29 0 38 0 30 0 38 0 33 0 38 0 34 0 38 0 35 0 38 0 36 0 38 0 37 0 38 0 59 0 38 0 60 0 38 0 62 0 38 0 63 0 38 0 64 0 38 0 79] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 194 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 0 70 0 1 0 70 0 2 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 7 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 0 70 0 12 0 70 0 13 0 70 0 14 0 70 0 15 0 70 0 16 0 70 0 17 0 70 0 18 0 70 0 19 2 205 0 20 0 70 0 21 2 209 0 22 2 213 0 23 2 217 0 25 0 70 0 26 2 221 0 27 0 70 0 28 0 70 0 29 0 70 0 30 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 36 0 70 0 37 0 70 0 59 0 70 0 60 0 70 0 62 0 70 0 63 0 70 0 64 2 225 0 79 0 70 0 80 0 70 0 82] #[0 0 6 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 214 0 16 0 21 0 26 0 60 0 80] #[1 0 118 0 1 0 118 0 2 0 118 0 3 0 118 0 4 0 118 0 5 0 118 0 6 0 118 0 7 0 118 0 8 0 118 0 9 2 229 0 10 2 233 0 11 2 237 0 12 2 241 0 13 0 118 0 14 0 118 0 15 0 118 0 16 2 245 0 17 0 118 0 18 2 249 0 19 0 118 0 21 0 118 0 26 0 118 0 28 0 118 0 29 0 118 0 30 0 118 0 33 0 118 0 34 0 118 0 35 0 118 0 36 2 253 0 37 3 1 0 59 0 118 0 60 3 5 0 62 3 9 0 63 3 13 0 64 0 118 0 80 0 118 0 82 3 17 0 103] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 3 21 0 90] #[0 0 134 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 150 0 1 0 150 0 2 0 150 0 3 0 150 0 4 0 150 0 5 0 150 0 6 0 150 0 7 0 150 0 8 0 150 0 9 0 150 0 14 0 150 0 15 0 150 0 16 0 150 0 18 0 150 0 21 0 150 0 26 0 150 0 28 3 25 0 29 3 29 0 30 0 150 0 33 3 33 0 34 0 150 0 35 0 150 0 36 0 150 0 60 0 150 0 80 0 150 0 82] #[1 0 162 0 1 0 162 0 2 0 162 0 3 0 162 0 4 0 162 0 5 0 162 0 6 0 162 0 7 0 162 0 8 0 162 0 9 0 162 0 14 0 162 0 15 0 162 0 16 0 162 0 18 0 162 0 21 0 162 0 26 0 162 0 28 0 162 0 33 3 37 0 35 3 41 0 36 0 162 0 60 0 162 0 80 0 162 0 82] #[1 0 174 0 1 0 174 0 2 0 174 0 3 0 174 0 4 0 174 0 5 0 174 0 6 0 174 0 7 0 174 0 8 0 174 0 9 3 45 0 14 0 174 0 15 0 174 0 16 0 174 0 18 0 174 0 21 0 174 0 26 0 174 0 28 3 49 0 33 0 174 0 60 0 174 0 80 0 174 0 82] #[1 0 194 0 1 0 194 0 2 0 194 0 3 0 194 0 4 0 194 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 194 0 9 0 194 0 15 0 194 0 16 3 65 0 18 0 194 0 21 0 194 0 26 0 194 0 28 0 194 0 60 0 194 0 80 0 194 0 82] #[1 0 206 0 1 0 206 0 2 3 69 0 3 3 73 0 4 0 206 0 5 0 206 0 9 0 206 0 15 0 206 0 16 0 206 0 21 0 206 0 26 0 206 0 28 0 206 0 60 0 206 0 80 0 206 0 82] #[1 1 230 0 1 1 230 0 2 1 230 0 5 1 230 0 9 1 230 0 15 1 230 0 16 1 230 0 21 1 230 0 26 3 77 0 28 1 230 0 60 1 230 0 80 1 230 0 82] #[1 3 81 0 21 3 85 0 60] #[1 3 89 0 2 0 230 0 5 0 230 0 9 0 230 0 15 0 230 0 16 0 230 0 21 0 230 0 26 0 230 0 60 0 230 0 80 0 230 0 82] #[1 3 93 0 5 0 238 0 9 0 238 0 15 0 238 0 16 0 238 0 21 0 238 0 26 0 238 0 60 0 238 0 80 0 238 0 82] #[1 3 97 0 9 3 101 0 15 0 246 0 16 0 246 0 21 0 246 0 26 0 246 0 60 0 246 0 80 0 246 0 82] #[0 0 62 0 16 0 21 0 26 0 60 0 80 0 82] #[1 3 105 0 1 0 222 0 2 0 222 0 5 0 222 0 9 0 222 0 15 0 222 0 16 0 222 0 21 0 222 0 26 0 222 0 60 0 222 0 80 0 222 0 82] #[0 3 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 109 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 117 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 3 121 0 144] #[1 1 33 0 17 1 162 0 21 1 162 0 60] #[0 3 46 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 58 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 125 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 246 0 16 1 246 0 25 1 246 0 26 1 246 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 246 0 76 1 246 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 129 0 121 0 145 0 132] #[1 1 254 0 16 1 254 0 25 1 254 0 26 1 254 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 254 0 76 1 254 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 133 0 121 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 3 137 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 222 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 3 153 0 122 3 157 0 123 0 137 0 126 0 141 0 127] #[0 2 78 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 90 0 21 0 26] #[1 2 122 0 21 3 161 0 25 2 122 0 26 0 13 0 34 0 93 0 76 3 165 0 79 3 169 0 112 3 173 0 126 0 141 0 127 3 177 0 134 3 181 0 135] #[0 3 185 0 26] #[1 3 189 0 21 3 193 0 26] #[1 3 197 0 21 2 82 0 26] #[0 2 106 0 21 0 26] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 66 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 0 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 1 42 0 16 0 21 0 60 0 80 0 82] #[0 3 201 0 80] #[1 2 93 0 21 3 205 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 3 209 0 104 1 217 0 119] #[1 1 13 0 76 3 213 0 125] #[0 1 198 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 74 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 3 217 0 136 3 221 0 150] #[0 3 74 0 21 0 60 0 82] #[0 1 166 0 21 0 60] #[0 3 50 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 3 225 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 3 229 0 26] #[1 3 81 0 21 3 233 0 26] #[1 3 237 0 25 0 126 0 26 0 13 0 34 3 165 0 79 3 241 0 126 3 245 0 134 3 181 0 135] #[0 3 249 0 16] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 253 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 1 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 250 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 5 0 139] #[0 4 9 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 13 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 17 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 21 0 53] #[0 3 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 25 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 29 0 143] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 4 33 0 76] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 4 37 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 41 0 86 4 45 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 49 0 76] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 53 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 1 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 57 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 61 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 65 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 69 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 73 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 77 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 81 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 85 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 89 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 93 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 97 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 101 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 105 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 109 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 4 113 0 96] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 117 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 214 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 121 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 125 0 99 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 4 129 0 100 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 133 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 4 137 0 97] #[0 2 198 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 3 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 202 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 4 141 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 4 145 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 242 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 250 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 190 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 226 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 149 0 104 1 217 0 119] #[1 4 153 0 16 2 10 0 21 2 10 0 60] #[1 4 157 0 21 4 161 0 60] #[0 2 2 0 21 0 60] #[1 3 161 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 157 0 112 0 125 0 114 0 129 0 115 0 133 0 116 3 173 0 126 0 141 0 127 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 4 177 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 181 0 104 1 217 0 119] #[0 2 114 0 21 0 26] #[1 2 126 0 21 3 161 0 25 2 126 0 26 0 93 0 76 3 165 0 79 0 237 0 127 4 185 0 135] #[0 2 118 0 21 0 26] #[1 2 130 0 21 4 189 0 25 2 130 0 26 4 193 0 79] #[0 2 70 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 4 197 0 76] #[0 2 74 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 4 201 0 74 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 4 205 0 133] #[0 2 62 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 1 202 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 34 0 21 0 82] #[0 2 26 0 21 0 82] #[1 4 209 0 21 4 213 0 82] #[0 2 174 0 21 0 82] #[0 4 217 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 221 0 90] #[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 237 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 241 0 126 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 3 237 0 25 2 126 0 26 3 165 0 79 4 185 0 135] #[0 0 130 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 225 0 143] #[0 2 190 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 229 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 233 0 139] #[0 2 246 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 237 0 26] #[1 3 81 0 21 4 241 0 26] #[0 4 245 0 25] #[0 3 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 182 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 4 249 0 21 4 253 0 26] #[0 0 54 0 21 0 26] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 81 0 21 5 1 0 80] #[0 0 66 0 16 0 21 0 26 0 60 0 80 0 82] #[0 0 142 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 146 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 138 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 154 0 1 0 154 0 2 0 154 0 3 0 154 0 4 0 154 0 5 0 154 0 6 0 154 0 7 0 154 0 8 0 154 0 9 0 154 0 14 0 154 0 15 0 154 0 16 0 154 0 18 0 154 0 21 0 154 0 26 0 154 0 28 3 25 0 29 3 29 0 30 0 154 0 33 3 33 0 34 0 154 0 35 0 154 0 36 0 154 0 60 0 154 0 80 0 154 0 82] #[1 0 158 0 1 0 158 0 2 0 158 0 3 0 158 0 4 0 158 0 5 0 158 0 6 0 158 0 7 0 158 0 8 0 158 0 9 0 158 0 14 0 158 0 15 0 158 0 16 0 158 0 18 0 158 0 21 0 158 0 26 0 158 0 28 3 25 0 29 3 29 0 30 0 158 0 33 3 33 0 34 0 158 0 35 0 158 0 36 0 158 0 60 0 158 0 80 0 158 0 82] #[1 0 170 0 1 0 170 0 2 0 170 0 3 0 170 0 4 0 170 0 5 0 170 0 6 0 170 0 7 0 170 0 8 0 170 0 9 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 18 0 170 0 21 0 170 0 26 0 170 0 28 0 170 0 33 3 37 0 35 3 41 0 36 0 170 0 60 0 170 0 80 0 170 0 82] #[1 0 166 0 1 0 166 0 2 0 166 0 3 0 166 0 4 0 166 0 5 0 166 0 6 0 166 0 7 0 166 0 8 0 166 0 9 0 166 0 14 0 166 0 15 0 166 0 16 0 166 0 18 0 166 0 21 0 166 0 26 0 166 0 28 0 166 0 33 3 37 0 35 3 41 0 36 0 166 0 60 0 166 0 80 0 166 0 82] #[1 0 182 0 1 0 182 0 2 0 182 0 3 0 182 0 4 0 182 0 5 0 182 0 6 0 182 0 7 0 182 0 8 0 182 0 9 3 45 0 14 0 182 0 15 0 182 0 16 0 182 0 18 0 182 0 21 0 182 0 26 0 182 0 28 3 49 0 33 0 182 0 60 0 182 0 80 0 182 0 82] #[1 0 186 0 1 0 186 0 2 0 186 0 3 0 186 0 4 0 186 0 5 0 186 0 6 0 186 0 7 0 186 0 8 0 186 0 9 3 45 0 14 0 186 0 15 0 186 0 16 0 186 0 18 0 186 0 21 0 186 0 26 0 186 0 28 3 49 0 33 0 186 0 60 0 186 0 80 0 186 0 82] #[1 0 190 0 1 0 190 0 2 0 190 0 3 0 190 0 4 0 190 0 5 0 190 0 6 0 190 0 7 0 190 0 8 0 190 0 9 3 45 0 14 0 190 0 15 0 190 0 16 0 190 0 18 0 190 0 21 0 190 0 26 0 190 0 28 3 49 0 33 0 190 0 60 0 190 0 80 0 190 0 82] #[1 0 178 0 1 0 178 0 2 0 178 0 3 0 178 0 4 0 178 0 5 0 178 0 6 0 178 0 7 0 178 0 8 0 178 0 9 3 45 0 14 0 178 0 15 0 178 0 16 0 178 0 18 0 178 0 21 0 178 0 26 0 178 0 28 3 49 0 33 0 178 0 60 0 178 0 80 0 178 0 82] #[1 0 198 0 1 0 198 0 2 0 198 0 3 0 198 0 4 0 198 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 198 0 9 0 198 0 15 0 198 0 16 3 65 0 18 0 198 0 21 0 198 0 26 0 198 0 28 0 198 0 60 0 198 0 80 0 198 0 82] #[1 0 202 0 1 0 202 0 2 0 202 0 3 0 202 0 4 0 202 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 202 0 9 0 202 0 15 0 202 0 16 3 65 0 18 0 202 0 21 0 202 0 26 0 202 0 28 0 202 0 60 0 202 0 80 0 202 0 82] #[1 0 210 0 1 0 210 0 2 3 69 0 3 3 73 0 4 0 210 0 5 0 210 0 9 0 210 0 15 0 210 0 16 0 210 0 21 0 210 0 26 0 210 0 28 0 210 0 60 0 210 0 80 0 210 0 82] #[0 0 218 0 16 0 21 0 26 0 60 0 80] #[1 3 105 0 1 0 226 0 2 0 226 0 5 0 226 0 9 0 226 0 15 0 226 0 16 0 226 0 21 0 226 0 26 0 226 0 60 0 226 0 80 0 226 0 82] #[1 3 89 0 2 0 234 0 5 0 234 0 9 0 234 0 15 0 234 0 16 0 234 0 21 0 234 0 26 0 234 0 60 0 234 0 80 0 234 0 82] #[1 3 93 0 5 0 242 0 9 0 242 0 15 0 242 0 16 0 242 0 21 0 242 0 26 0 242 0 60 0 242 0 80 0 242 0 82] #[1 5 5 0 16 3 81 0 21] #[1 1 234 0 1 1 234 0 2 1 234 0 5 1 234 0 9 1 234 0 15 1 234 0 16 1 234 0 21 1 234 0 26 3 77 0 28 1 234 0 60 1 234 0 80 1 234 0 82] #[0 2 206 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 1 186 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 14 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 9 0 104 1 217 0 119] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 5 13 0 123 0 137 0 126 0 141 0 127] #[0 1 238 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[0 2 158 0 21 0 25 0 26 0 79] #[0 5 17 0 26] #[0 5 21 0 26] #[0 2 142 0 21 0 25 0 26 0 79] #[0 5 25 0 80] #[1 2 134 0 21 4 189 0 25 2 134 0 26 4 193 0 79] #[1 5 29 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 5 33 0 128 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 5 37 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 41 0 104 1 217 0 119] #[0 2 94 0 21 0 26] #[0 2 86 0 26] #[0 2 110 0 21 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 5 45 0 82 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 5 49 0 150] #[0 3 78 0 21 0 60 0 82] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 122 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 2 186 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 53 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 5 57 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 61 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 65 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 69 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 73 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 5 77 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 5 81 0 102 1 217 0 119] #[0 2 18 0 21 0 60] #[0 2 6 0 21 0 60] #[0 2 162 0 21 0 25 0 26 0 79] #[0 2 138 0 21 0 25 0 26 0 79] #[0 2 146 0 21 0 25 0 26 0 79] #[0 2 166 0 21 0 25 0 26 0 79] #[0 5 85 0 26] #[0 2 150 0 21 0 25 0 26 0 79] #[0 5 89 0 80] #[0 3 82 0 21 0 60 0 82] #[0 2 178 0 21 0 82] #[1 2 218 0 20 2 218 0 23 2 218 0 24 2 218 0 25 2 218 0 28 2 218 0 31 2 218 0 32 2 218 0 34 2 218 0 35 2 218 0 36 2 218 0 38 2 218 0 39 2 218 0 42 5 93 0 46 2 218 0 47 2 218 0 48 2 218 0 49 2 218 0 50 2 218 0 52 2 218 0 53 2 218 0 54 2 218 0 56 2 218 0 60 2 218 0 76 2 218 0 77 2 218 0 78 2 218 0 81 2 218 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 97 0 143] #[1 3 81 0 21 5 101 0 26] #[0 2 226 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 230 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 5 105 0 26] #[0 0 58 0 21 0 26] #[0 0 250 0 16 0 21 0 26 0 60 0 80 0 82] #[0 2 170 0 21 0 25 0 26 0 79] #[0 2 154 0 21 0 25 0 26 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 109 0 143] #[0 2 238 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 113 0 143] #[0 5 117 0 60] #[0 2 222 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 242 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 234 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] )! ! !JavaParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! parserDefinitionComment "goal : compilation_unit ; # 19.3) Lexical Structure. literal : | | # | ""true"" # | ""false"" | | | ; # 19.4) Types, Values, and Variables type : primitive_type | reference_type ; primitive_type : numeric_type | ""boolean"" ; numeric_type: integral_type | floating_point_type ; integral_type : ""byte"" | ""short"" | ""int"" | ""long"" | ""char"" ; floating_point_type : ""float"" | ""double"" ; reference_type : class_or_interface_type | array_type ; class_or_interface_type : name; class_type : class_or_interface_type; interface_type : class_or_interface_type; array_type : primitive_type dims | name dims ; # 19.5) Names name : simple_name | qualified_name ; simple_name : ; qualified_name : name ""."" ; # 19.6) ""package""s compilation_unit : package_declaration_opt import_declarations_opt type_declarations_opt ; package_declaration_opt : package_declaration | ; import_declarations_opt : import_declarations | ; type_declarations_opt : type_declarations | ; import_declarations : import_declaration | import_declarations import_declaration ; type_declarations : type_declaration | type_declarations type_declaration ; package_declaration : ""package"" name "";"" ; import_declaration : single_type_import_declaration | type_import_on_demand_declaration ; single_type_import_declaration : ""import"" name "";"" ; type_import_on_demand_declaration : ""import"" name ""."" ""*"" "";"" ; type_declaration : class_declaration | interface_declaration | "";"" ; # 19.7) Productions used only in the LALR(1) grammar modifiers_opt: | modifiers ; modifiers : modifier | modifiers modifier ; modifier : ""public"" | ""protected"" | ""private"" | ""static"" | ""abstract"" | ""final"" | ""native"" | ""synchronized"" | ""transient"" | ""volatile"" | ""strictfp"" # note that semantic analysis must check that the # context of the modifier allows strictfp. ; # 19.8) Classes # 19.8.1) Class Declaration: class_declaration : modifiers_opt ""class"" super_opt interfaces_opt class_body ; super : ""extends"" class_type ; super_opt : | super ; interfaces : ""implements"" interface_type_list ; interfaces_opt: | interfaces ; interface_type_list : interface_type | interface_type_list "","" interface_type ; class_body : ""{"" class_body_declarations_opt ""}"" ; class_body_declarations_opt : | class_body_declarations ; class_body_declarations : class_body_declaration | class_body_declarations class_body_declaration ; class_body_declaration : class_member_declaration | static_initializer | constructor_declaration | block ; class_member_declaration : field_declaration | method_declaration # repeat the prod for 'class_declaration' here: | modifiers_opt ""class"" super_opt interfaces_opt class_body | interface_declaration | "";"" ; # 19.8.2) Field Declarations field_declaration : modifiers_opt type variable_declarators "";"" ; variable_declarators : variable_declarator | variable_declarators "","" variable_declarator ; variable_declarator : variable_declarator_id | variable_declarator_id ""="" variable_initializer ; variable_declarator_id : | variable_declarator_id ""["" ""]"" ; variable_initializer : expression | array_initializer ; # 19.8.3) Method Declarations method_declaration : method_header method_body ; method_header : modifiers_opt type method_declarator throws_opt | modifiers_opt ""void"" method_declarator throws_opt ; method_declarator : ""("" formal_parameter_list_opt "")"" | method_declarator ""["" ""]"" # deprecated # be careful; the above production also allows 'void foo() []' ; formal_parameter_list_opt : | formal_parameter_list ; formal_parameter_list : formal_parameter | formal_parameter_list "","" formal_parameter ; formal_parameter : type variable_declarator_id | ""final"" type variable_declarator_id ; throws_opt : | throws ; throws : ""throws"" class_type_list ; class_type_list : class_type | class_type_list "","" class_type ; method_body : block | "";"" ; # 19.8.4) Static Initializers static_initializer : ""static"" block ; # 19.8.5) Constructor Declarations constructor_declaration : modifiers_opt constructor_declarator throws_opt constructor_body ; constructor_declarator : simple_name ""("" formal_parameter_list_opt "")"" ; constructor_body : ""{"" explicit_constructor_invocation block_statements ""}"" | ""{"" explicit_constructor_invocation ""}"" | ""{"" block_statements ""}"" | ""{"" ""}"" ; explicit_constructor_invocation : ""this"" ""("" argument_list_opt "")"" "";"" | ""super"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""this"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""super"" ""("" argument_list_opt "")"" "";"" ; # 19.9) Interfaces # 19.9.1) Interface Declarations interface_declaration : modifiers_opt ""interface"" extends_interfaces_opt interface_body ; extends_interfaces_opt : | extends_interfaces ; extends_interfaces : ""extends"" interface_type | extends_interfaces "","" interface_type ; interface_body : ""{"" interface_member_declarations_opt ""}"" ; interface_member_declarations_opt : | interface_member_declarations ; interface_member_declarations : interface_member_declaration | interface_member_declarations interface_member_declaration ; interface_member_declaration : constant_declaration | abstract_method_declaration | class_declaration | interface_declaration ; constant_declaration : field_declaration # need to semantically check that modifiers of field declaration # include only PUBLIC, ""static"", or ""final"". Other modifiers are # disallowed. ; abstract_method_declaration : method_header "";"" ; # 19.10) Arrays array_initializer : ""{"" variable_initializers "","" ""}"" | ""{"" variable_initializers ""}"" | ""{"" "","" ""}"" | ""{"" ""}"" ; variable_initializers : variable_initializer | variable_initializers "","" variable_initializer ; # 19.11) Blocks and Statements block : ""{"" block_statements_opt ""}"" ; block_statements_opt : | block_statements ; block_statements : block_statement | block_statements block_statement ; block_statement : local_variable_declaration_statement | statement | class_declaration | interface_declaration ; local_variable_declaration_statement : local_variable_declaration "";"" ; local_variable_declaration : type variable_declarators | ""final"" type variable_declarators ; statement : statement_without_trailing_substatement | labeled_statement | if_then_statement | if_then_else_statement | while_statement | for_statement ; statement_no_short_if : statement_without_trailing_substatement | labeled_statement_no_short_if | if_then_else_statement_no_short_if | while_statement_no_short_if | for_statement_no_short_if ; statement_without_trailing_substatement : block | empty_statement | expression_statement | switch_statement | do_statement | break_statement | continue_statement | return_statement | synchronized_statement | throw_statement | try_statement ; empty_statement : "";"" ; labeled_statement : "":"" statement ; labeled_statement_no_short_if : "":"" statement_no_short_if ; expression_statement : statement_expression "";"" ; statement_expression : assignment | preincrement_expression | predecrement_expression | postincrement_expression | postdecrement_expression | method_invocation | class_instance_creation_expression ; if_then_statement : ""if"" ""("" expression "")"" statement ; if_then_else_statement : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement ; if_then_else_statement_no_short_if : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement_no_short_if ; switch_statement : ""switch"" ""("" expression "")"" switch_block ; switch_block : ""{"" switch_block_statement_groups switch_labels ""}"" | ""{"" switch_block_statement_groups ""}"" | ""{"" switch_labels ""}"" | ""{"" ""}"" ; switch_block_statement_groups : switch_block_statement_group | switch_block_statement_groups switch_block_statement_group ; switch_block_statement_group : switch_labels block_statements ; switch_labels : switch_label | switch_labels switch_label ; switch_label : ""case"" constant_expression "":"" | ""default"" "":"" ; while_statement : ""while"" ""("" expression "")"" statement ; while_statement_no_short_if : ""while"" ""("" expression "")"" statement_no_short_if ; do_statement : ""do"" statement ""while"" ""("" expression "")"" "";"" ; for_statement : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement ; for_statement_no_short_if : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement_no_short_if ; for_init_opt : | for_init ; for_init : statement_expression_list | local_variable_declaration ; for_update_opt : | for_update ; for_update : statement_expression_list ; statement_expression_list : statement_expression | statement_expression_list "","" statement_expression ; identifier_opt : | ; break_statement : ""break"" identifier_opt "";"" ; continue_statement : ""continue"" identifier_opt "";"" ; return_statement : ""return"" expression_opt "";"" ; throw_statement : ""throw"" expression "";"" ; synchronized_statement : ""synchronized"" ""("" expression "")"" block ; try_statement : ""try"" block catches | ""try"" block catches_opt finally ; catches_opt : | catches ; catches : catch_clause | catches catch_clause ; catch_clause : ""catch"" ""("" formal_parameter "")"" block ; finally : ""finally"" block ; # 19.12) Expressions primary : primary_no_new_array | array_creation_expression ; primary_no_new_array : literal | ""this"" | ""("" expression "")"" | class_instance_creation_expression | field_access | method_invocation | array_access | primitive_type ""."" ""class"" | ""void"" ""."" ""class"" | array_type ""."" ""class"" | name ""."" ""class"" | name ""."" ""this"" ; class_instance_creation_expression : ""new"" class_type ""("" argument_list_opt "")"" | ""new"" class_type ""("" argument_list_opt "")"" class_body | primary ""."" ""new"" ""("" argument_list_opt "")"" | primary ""."" ""new"" ""("" argument_list_opt "")"" class_body ; argument_list_opt : | argument_list ; argument_list : expression | argument_list "","" expression ; array_creation_expression : ""new"" primitive_type dim_exprs dims_opt | ""new"" class_or_interface_type dim_exprs dims_opt | ""new"" primitive_type dims array_initializer | ""new"" class_or_interface_type dims array_initializer ; dim_exprs : dim_expr | dim_exprs dim_expr ; dim_expr : ""["" expression ""]"" ; dims_opt : | dims ; dims : ""["" ""]"" | dims ""["" ""]"" ; field_access : primary ""."" | ""super"" ""."" | name ""."" ""super"" ""."" ; method_invocation : name ""("" argument_list_opt "")"" | primary ""."" ""("" argument_list_opt "")"" | ""super"" ""."" ""("" argument_list_opt "")"" | name ""."" ""super"" ""."" ""("" argument_list_opt "")"" ; array_access : name ""["" expression ""]"" | primary_no_new_array ""["" expression ""]"" ; postfix_expression : primary | name | postincrement_expression | postdecrement_expression ; postincrement_expression : postfix_expression ""++"" ; postdecrement_expression : postfix_expression ""--"" ; unary_expression : preincrement_expression | predecrement_expression | ""+"" unary_expression | ""-"" unary_expression | unary_expression_not_plus_minus ; preincrement_expression : ""++"" unary_expression ; predecrement_expression : ""--"" unary_expression ; unary_expression_not_plus_minus : postfix_expression | ""~"" unary_expression | ""!!"" unary_expression | cast_expression ; cast_expression : ""("" primitive_type dims_opt "")"" unary_expression | ""("" expression "")"" unary_expression_not_plus_minus | ""("" name dims "")"" unary_expression_not_plus_minus ; multiplicative_expression : unary_expression | multiplicative_expression ""*"" unary_expression | multiplicative_expression ""/"" unary_expression | multiplicative_expression ""%"" unary_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression | shift_expression "">>>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression | relational_expression ""instanceof"" reference_type ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; conditional_and_expression : inclusive_or_expression | conditional_and_expression ""&&"" inclusive_or_expression ; conditional_or_expression : conditional_and_expression | conditional_or_expression ""||"" conditional_and_expression ; conditional_expression : conditional_or_expression | conditional_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | assignment ; assignment : left_hand_side assignment_operator assignment_expression ; left_hand_side : name | field_access | array_access ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | "">>>="" | ""&="" | ""^="" | ""|="" ; expression_opt : | expression ; expression : assignment_expression ; constant_expression : expression ;"! ! !JavaParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50'! scannerClass ^JavaScanner! ! !JavaParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForgoal ^1! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! reduceTable ^#( #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 1 #reduceFor:) #(106 1 #reduceFor:) #(106 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(110 2 #reduceFor:) #(110 2 #reduceFor:) #(111 1 #reduceFor:) #(111 1 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(114 2 #reduceFor:) #(114 3 #reduceFor:) #(115 1 #reduceFor:) #(116 3 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 0 #reduceFor:) #(119 1 #reduceFor:) #(119 0 #reduceFor:) #(120 1 #reduceFor:) #(120 0 #reduceFor:) #(121 3 #reduceFor:) #(122 1 #reduceFor:) #(122 2 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(124 1 #reduceFor:) #(124 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(126 3 #reduceFor:) #(127 5 #reduceFor:) #(128 6 #reduceFor:) #(129 5 #reduceFor:) #(130 1 #reduceFor:) #(131 0 #reduceFor:) #(131 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(133 0 #reduceFor:) #(133 1 #reduceFor:) #(134 0 #reduceFor:) #(134 1 #reduceFor:) #(135 3 #reduceFor:) #(136 2 #reduceFor:) #(137 1 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(139 0 #reduceFor:) #(139 1 #reduceFor:) #(140 1 #reduceFor:) #(140 2 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(142 6 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(143 2 #reduceFor:) #(144 4 #reduceFor:) #(145 3 #reduceFor:) #(146 4 #reduceFor:) #(147 2 #reduceFor:) #(148 1 #reduceFor:) #(148 3 #reduceFor:) #(149 1 #reduceFor:) #(149 3 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(151 1 #reduceFor:) #(151 1 #reduceFor:) #(152 1 #reduceFor:) #(153 4 #reduceFor:) #(153 3 #reduceFor:) #(153 3 #reduceFor:) #(153 2 #reduceFor:) #(154 4 #reduceFor:) #(154 4 #reduceFor:) #(155 1 #reduceFor:) #(155 1 #reduceFor:) #(156 4 #reduceFor:) #(156 3 #reduceFor:) #(157 0 #reduceFor:) #(157 1 #reduceFor:) #(158 0 #reduceFor:) #(158 1 #reduceFor:) #(159 1 #reduceFor:) #(159 3 #reduceFor:) #(160 2 #reduceFor:) #(160 3 #reduceFor:) #(161 2 #reduceFor:) #(162 1 #reduceFor:) #(162 3 #reduceFor:) #(163 4 #reduceFor:) #(164 4 #reduceFor:) #(164 3 #reduceFor:) #(164 3 #reduceFor:) #(164 2 #reduceFor:) #(165 5 #reduceFor:) #(165 5 #reduceFor:) #(165 7 #reduceFor:) #(165 7 #reduceFor:) #(166 1 #reduceFor:) #(166 2 #reduceFor:) #(167 0 #reduceFor:) #(167 1 #reduceFor:) #(168 1 #reduceFor:) #(168 1 #reduceFor:) #(169 0 #reduceFor:) #(169 1 #reduceFor:) #(170 3 #reduceFor:) #(171 2 #reduceFor:) #(171 3 #reduceFor:) #(172 0 #reduceFor:) #(172 1 #reduceFor:) #(173 1 #reduceFor:) #(173 2 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(175 1 #reduceFor:) #(176 2 #reduceFor:) #(177 1 #reduceFor:) #(177 3 #reduceFor:) #(178 0 #reduceFor:) #(178 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(180 2 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(182 2 #reduceFor:) #(182 3 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(184 3 #reduceFor:) #(185 5 #reduceFor:) #(186 7 #reduceFor:) #(187 5 #reduceFor:) #(188 9 #reduceFor:) #(189 3 #reduceFor:) #(190 7 #reduceFor:) #(191 5 #reduceFor:) #(192 9 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(194 1 #reduceFor:) #(195 2 #reduceFor:) #(196 5 #reduceFor:) #(197 7 #reduceFor:) #(198 3 #reduceFor:) #(199 3 #reduceFor:) #(200 3 #reduceFor:) #(201 5 #reduceFor:) #(202 3 #reduceFor:) #(203 3 #reduceFor:) #(203 4 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(205 3 #reduceFor:) #(206 2 #reduceFor:) #(207 2 #reduceFor:) #(208 2 #reduceFor:) #(209 2 #reduceFor:) #(210 4 #reduceFor:) #(210 6 #reduceFor:) #(210 6 #reduceFor:) #(210 8 #reduceFor:) #(211 5 #reduceFor:) #(211 6 #reduceFor:) #(211 7 #reduceFor:) #(211 8 #reduceFor:) #(212 4 #reduceFor:) #(212 3 #reduceFor:) #(212 3 #reduceFor:) #(212 2 #reduceFor:) #(213 1 #reduceFor:) #(213 2 #reduceFor:) #(214 1 #reduceFor:) #(214 2 #reduceFor:) #(215 2 #reduceFor:) #(216 3 #reduceFor:) #(216 2 #reduceFor:) #(217 1 #reduceFor:) #(218 0 #reduceFor:) #(218 1 #reduceFor:) #(219 0 #reduceFor:) #(219 1 #reduceFor:) #(220 0 #reduceFor:) #(220 1 #reduceFor:) #(221 1 #reduceFor:) #(221 1 #reduceFor:) #(222 1 #reduceFor:) #(222 3 #reduceFor:) #(223 1 #reduceFor:) #(224 0 #reduceFor:) #(224 1 #reduceFor:) #(225 1 #reduceFor:) #(225 2 #reduceFor:) #(226 0 #reduceFor:) #(226 1 #reduceFor:) #(227 2 #reduceFor:) #(228 5 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(231 3 #reduceFor:) #(231 3 #reduceFor:) #(231 5 #reduceFor:) #(232 4 #reduceFor:) #(232 4 #reduceFor:) #(233 1 #reduceFor:) #(233 3 #reduceFor:) #(234 1 #reduceFor:) #(234 2 #reduceFor:) #(235 0 #reduceFor:) #(235 1 #reduceFor:) #(236 3 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(238 1 #reduceFor:) #(238 1 #reduceFor:) #(238 2 #reduceFor:) #(238 2 #reduceFor:) #(238 1 #reduceFor:) #(239 1 #reduceFor:) #(239 2 #reduceFor:) #(239 2 #reduceFor:) #(239 1 #reduceFor:) #(240 5 #reduceFor:) #(240 4 #reduceFor:) #(240 5 #reduceFor:) #(241 1 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(242 1 #reduceFor:) #(242 3 #reduceFor:) #(242 3 #reduceFor:) #(243 1 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(244 1 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(245 1 #reduceFor:) #(245 3 #reduceFor:) #(245 3 #reduceFor:) #(246 1 #reduceFor:) #(246 3 #reduceFor:) #(247 1 #reduceFor:) #(247 3 #reduceFor:) #(248 1 #reduceFor:) #(248 3 #reduceFor:) #(249 1 #reduceFor:) #(249 3 #reduceFor:) #(250 1 #reduceFor:) #(250 3 #reduceFor:) #(251 1 #reduceFor:) #(251 5 #reduceFor:) #(252 1 #reduceFor:) #(252 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(257 1 #reduceFor:) #(258 3 #reduceFor:) #(259 1 #reduceFor:) #(259 2 #reduceFor:) )! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! transitionTable ^#( #[1 0 138 0 7 0 138 0 8 0 138 0 12 0 138 0 16 0 138 0 18 0 9 0 29 0 138 0 32 0 138 0 36 0 138 0 37 0 138 0 38 0 138 0 39 0 138 0 40 0 138 0 43 0 138 0 44 0 138 0 45 0 138 0 46 0 13 0 118 0 17 0 121 0 138 0 255 0 21 1 1 0 25 1 2] #[1 0 29 0 99 0 33 0 111 0 37 0 115 0 41 0 116] #[1 0 146 0 7 0 146 0 8 0 146 0 12 0 146 0 16 0 146 0 18 0 146 0 32 0 146 0 36 0 146 0 37 0 146 0 38 0 146 0 39 0 146 0 40 0 146 0 43 0 45 0 44 0 146 0 45 0 146 0 46 0 49 0 119 0 53 0 122 0 57 0 124 0 61 0 126 0 65 0 127 0 146 0 255] #[0 0 134 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 0 0 255] #[0 5 126 0 255] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 69 0 28 0 73 0 32] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 29 0 99 0 77 0 111 0 37 0 115 0 41 0 116] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 129 0 120 0 133 0 123 0 137 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 154 0 255 0 157 1 3] #[1 0 142 0 7 0 142 0 8 0 142 0 12 0 142 0 16 0 142 0 18 0 142 0 32 0 142 0 36 0 142 0 37 0 142 0 38 0 142 0 39 0 142 0 40 0 142 0 43 0 45 0 44 0 142 0 45 0 142 0 46 0 161 0 124 0 61 0 126 0 65 0 127 0 142 0 255] #[0 0 162 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 178 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 182 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 165 0 99] #[0 0 158 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 169 0 28 0 173 0 32] #[0 1 10 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 6 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 2 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 194 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 246 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 250 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 242 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 238 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 254 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 226 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 234 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 230 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 5 130 0 255] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 177 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 150 0 255 0 157 1 3] #[0 0 170 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 186 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 190 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[1 0 181 0 8 0 185 0 16] #[0 5 134 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 81 0 7 0 222 0 8 0 222 0 9 0 85 0 12 0 222 0 16 0 89 0 18 0 222 0 24 0 222 0 25 0 222 0 26 0 222 0 27 0 222 0 30 0 222 0 31 0 222 0 33 0 222 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 222 0 99 0 189 0 132] #[0 0 166 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 193 0 42 0 165 0 99] #[0 0 198 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 174 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 197 0 99] #[0 0 201 0 99] #[0 5 138 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 205 0 32] #[1 1 14 0 3 1 14 0 10 0 209 0 11 0 213 0 133 0 217 0 136] #[1 2 46 0 3 0 221 0 11 0 225 0 169 0 229 0 171] #[0 0 202 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 29 0 99 0 233 0 109 0 237 0 111 0 241 0 112 0 37 0 115 0 41 0 116] #[1 1 22 0 3 0 245 0 10 0 249 0 134 0 253 0 138] #[0 1 18 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 5 0 113 0 37 0 115 0 41 0 116] #[1 1 9 0 3 1 13 0 170] #[1 2 50 0 3 1 17 0 4] #[0 0 86 0 3 0 4 0 10 0 32] #[1 0 66 0 3 0 66 0 4 0 66 0 5 0 66 0 10 0 66 0 21 0 69 0 28 0 66 0 32] #[0 1 34 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 21 0 113 0 37 0 115 0 41 0 116 1 25 0 137] #[1 1 29 0 3 1 33 0 135] #[0 1 26 0 3] #[0 0 90 0 3 0 4] #[0 2 58 0 3 0 4] #[1 2 66 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 57 0 172 1 61 0 173 1 65 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 0 210 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 77 0 113 0 37 0 115 0 41 0 116] #[0 1 38 0 3 0 4] #[1 1 46 0 3 1 81 0 4] #[1 1 50 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 1 105 0 139 1 109 0 140 1 113 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 0 206 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 90 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 94 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 181 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 2 98 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 217 0 32] #[0 1 221 0 1] #[1 2 70 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 225 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 2 74 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 82 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 86 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 62 0 3 0 4] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 229 0 113 0 37 0 115 0 41 0 116] #[1 2 114 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 117 0 166 2 121 0 168 2 125 0 178 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 98 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 0 238 0 7 0 238 0 8 0 238 0 9 0 238 0 12 0 238 0 16 0 238 0 18 0 238 0 24 0 238 0 25 0 238 0 26 0 238 0 27 0 238 0 30 0 238 0 31 0 238 0 33 0 238 0 34 0 238 0 36 0 238 0 37 0 238 0 38 0 238 0 39 0 238 0 40 0 238 0 43 0 238 0 45 0 238 0 46 0 238 0 99 3 9 0 145] #[0 1 94 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 3 13 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 3 17 0 115 0 41 0 116 3 21 0 163] #[0 3 25 0 1] #[1 1 54 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 3 29 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 1 58 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 66 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 70 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 74 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 78 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 82 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 86 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 3 33 0 32 3 37 0 145 3 41 0 155] #[1 3 45 0 99 3 49 0 156] #[0 0 58 0 5 0 19 0 28 0 99] #[0 0 62 0 5 0 19 0 28 0 99] #[0 0 54 0 5 0 19 0 28 0 99] #[0 0 50 0 5 0 19 0 28 0 99] #[0 0 10 0 5 0 19 0 28 0 99] #[0 0 38 0 5 0 19 0 28 0 99] #[0 0 46 0 5 0 19 0 28 0 99] #[0 0 42 0 5 0 19 0 28 0 99] #[1 3 53 0 5 0 22 0 99 3 57 0 114] #[0 0 26 0 99] #[1 3 61 0 99 3 65 0 148 3 69 0 149 3 73 0 150 3 77 0 156] #[0 0 6 0 5 0 19 0 28 0 99] #[0 0 30 0 5 0 19 0 28 0 99] #[0 0 34 0 5 0 19 0 28 0 99] #[0 0 14 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[0 0 18 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[1 0 66 0 1 0 66 0 4 3 53 0 5 0 66 0 6 0 66 0 15 0 66 0 19 0 69 0 28 0 66 0 32 0 66 0 48 0 66 0 49 0 66 0 50 0 66 0 51 0 66 0 52 0 66 0 53 0 66 0 54 0 66 0 55 0 66 0 56 0 66 0 58 0 66 0 59 0 66 0 65 0 66 0 71 0 66 0 99 3 81 0 114] #[0 2 102 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 54 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 78 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 42 0 3 0 4] #[0 3 85 0 28] #[0 3 89 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 125 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 221 0 28] #[0 4 14 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 18 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 225 0 21] #[1 0 246 0 7 0 246 0 8 0 246 0 12 0 246 0 16 0 246 0 18 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 246 0 36 0 246 0 37 0 246 0 38 0 246 0 39 0 246 0 40 0 246 0 43 0 246 0 45 0 246 0 46 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 0 254 0 7 0 254 0 8 0 254 0 12 0 254 0 16 0 254 0 18 3 233 0 21 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 43 0 254 0 45 0 254 0 46] #[0 3 237 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 241 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 3 249 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 3 253 0 103 1 193 0 106 1 197 0 107 1 201 0 108 4 1 0 109 0 237 0 111 4 5 0 112 0 37 0 115 0 41 0 116] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 4 13 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 4 17 0 21] #[1 1 85 0 3 4 21 0 145] #[1 3 234 0 32 4 25 0 99 4 29 0 224] #[1 3 234 0 32 4 25 0 99 4 33 0 224] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 49 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 53 0 238 3 165 0 239 3 169 0 240] #[0 0 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 126 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 0 102 0 2 0 102 0 5 0 102 0 13 4 57 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87 0 102 0 99] #[1 3 53 0 5 4 61 0 28 0 22 0 99 3 57 0 114] #[1 4 65 0 99 4 69 0 148 3 69 0 149 3 73 0 150] #[1 4 73 0 28 0 18 0 99] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 81 0 21 4 85 0 28 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 82 4 126 0 87 0 66 0 99 3 81 0 114] #[0 4 10 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 130 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 134 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 174 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 118 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 4 122 0 1 4 122 0 4 4 122 0 6 4 122 0 15 4 122 0 19 4 93 0 28 4 122 0 32 4 122 0 42 4 122 0 48 4 122 0 49 4 122 0 50 4 122 0 51 4 122 0 52 4 122 0 53 4 122 0 54 4 122 0 55 4 122 0 56 4 122 0 58 4 122 0 59 4 122 0 65 4 122 0 71 4 122 0 82 4 122 0 83 4 122 0 84 4 122 0 85 4 122 0 86 4 122 0 87 4 122 0 88 4 122 0 89 4 122 0 90] #[0 4 97 0 1] #[0 2 22 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 122 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 126 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 101 0 32] #[0 2 142 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 146 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 150 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 154 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 158 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 162 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 178 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 182 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 186 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 190 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 194 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 198 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 202 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 206 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 210 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 214 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 105 0 32] #[0 3 62 0 4 0 19 0 32] #[0 3 66 0 4 0 19 0 32] #[0 3 70 0 4 0 19 0 32] #[1 3 74 0 4 3 74 0 19 3 74 0 32 4 130 0 82 4 130 0 87] #[1 3 78 0 4 3 78 0 19 3 78 0 32 4 134 0 82 4 134 0 87] #[1 3 82 0 4 4 30 0 5 3 82 0 19 4 30 0 28 3 82 0 32 4 30 0 82 4 30 0 87] #[1 3 86 0 4 4 22 0 5 3 86 0 19 4 22 0 28 3 86 0 32 4 22 0 82 4 22 0 87] #[1 2 38 0 1 2 38 0 4 4 109 0 5 2 38 0 6 2 38 0 15 2 38 0 19 2 38 0 28 2 38 0 32 2 38 0 42 2 38 0 48 2 38 0 49 2 38 0 50 2 38 0 51 2 38 0 52 2 38 0 53 2 38 0 54 2 38 0 55 2 38 0 56 2 38 0 58 2 38 0 59 2 38 0 65 2 38 0 71 2 38 0 82 2 38 0 83 2 38 0 84 2 38 0 85 2 38 0 86 2 38 0 87 2 38 0 88 2 38 0 89 2 38 0 90] #[0 2 42 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 26 0 1 5 70 0 2 4 26 0 4 4 26 0 5 4 26 0 6 5 70 0 13 4 26 0 15 4 26 0 19 4 26 0 28 4 26 0 32 4 26 0 42 4 26 0 48 4 26 0 49 4 26 0 50 4 26 0 51 4 26 0 52 4 26 0 53 4 26 0 54 4 26 0 55 4 26 0 56 4 26 0 58 4 26 0 59 5 70 0 60 5 70 0 61 5 70 0 62 5 70 0 63 5 70 0 64 4 26 0 65 5 70 0 66 5 70 0 67 5 70 0 68 5 70 0 69 5 70 0 70 4 26 0 71 4 26 0 82 4 26 0 83 4 26 0 84 4 26 0 85 4 26 0 86 4 26 0 87 4 26 0 88 4 26 0 89 4 26 0 90] #[1 4 34 0 1 5 74 0 2 4 34 0 4 4 34 0 5 4 34 0 6 5 74 0 13 4 34 0 15 4 34 0 19 4 34 0 28 4 34 0 32 4 34 0 42 4 34 0 48 4 34 0 49 4 34 0 50 4 34 0 51 4 34 0 52 4 34 0 53 4 34 0 54 4 34 0 55 4 34 0 56 4 34 0 58 4 34 0 59 5 74 0 60 5 74 0 61 5 74 0 62 5 74 0 63 5 74 0 64 4 34 0 65 5 74 0 66 5 74 0 67 5 74 0 68 5 74 0 69 5 74 0 70 4 34 0 71 4 34 0 82 4 34 0 83 4 34 0 84 4 34 0 85 4 34 0 86 4 34 0 87 4 34 0 88 4 34 0 89 4 34 0 90] #[1 4 113 0 82 4 117 0 87] #[1 4 121 0 2 4 125 0 13 4 129 0 60 4 133 0 61 4 137 0 62 4 141 0 63 4 145 0 64 4 149 0 66 4 153 0 67 4 157 0 68 4 161 0 69 4 165 0 70 4 169 0 254] #[0 1 102 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 173 0 99] #[1 0 78 0 5 4 177 0 21 0 78 0 28 0 78 0 99] #[1 1 198 0 3 4 181 0 20 4 185 0 157 4 189 0 161] #[0 1 30 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 12 0 15 0 16 0 17 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 65 0 71 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 1 62 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 186 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 118 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 193 0 21] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 201 0 157 4 189 0 161] #[0 4 205 0 6] #[1 0 70 0 1 0 70 0 4 4 209 0 5 0 70 0 6 0 70 0 15 0 70 0 19 0 70 0 28 0 70 0 32 0 70 0 48 0 70 0 49 0 70 0 50 0 70 0 51 0 70 0 52 0 70 0 53 0 70 0 54 0 70 0 55 0 70 0 56 0 70 0 58 0 70 0 59 0 70 0 65 0 70 0 71 0 70 0 99] #[1 1 138 0 2 1 138 0 4 1 138 0 5 4 193 0 21 1 138 0 32] #[1 4 213 0 4 4 217 0 32] #[0 1 122 0 4 0 32] #[1 4 221 0 2 1 130 0 4 4 225 0 5 1 130 0 32] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 229 0 157 4 189 0 161] #[1 0 74 0 1 0 74 0 4 4 209 0 5 0 74 0 6 0 74 0 15 0 74 0 19 0 74 0 28 0 74 0 32 0 74 0 48 0 74 0 49 0 74 0 50 0 74 0 51 0 74 0 52 0 74 0 53 0 74 0 54 0 74 0 55 0 74 0 56 0 74 0 58 0 74 0 59 0 74 0 65 0 74 0 71 0 74 0 99] #[0 4 233 0 8] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 237 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 4 241 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 245 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 249 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 253 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 1 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 5 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 9 0 238 3 165 0 239 3 169 0 240] #[1 3 53 0 5 4 61 0 28 3 57 0 114] #[0 4 73 0 28] #[1 4 126 0 1 5 66 0 2 4 126 0 4 4 77 0 5 4 126 0 6 5 66 0 13 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 5 13 0 19] #[0 5 62 0 1 0 4 0 6 0 15 0 19 0 32] #[0 4 138 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 142 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 130 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 134 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 30 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 22 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 158 0 1 4 158 0 4 4 158 0 6 4 158 0 15 4 158 0 19 4 158 0 32 4 158 0 42 4 158 0 48 4 158 0 49 4 158 0 50 4 158 0 51 4 158 0 52 4 158 0 53 4 158 0 54 4 158 0 55 4 158 0 56 4 158 0 58 4 158 0 59 4 158 0 65 4 158 0 71 4 113 0 82 4 158 0 83 4 158 0 84 4 158 0 85 4 158 0 86 4 117 0 87 4 158 0 88 4 158 0 89 4 158 0 90] #[0 4 186 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 154 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 170 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 202 0 1 4 202 0 4 4 202 0 6 4 202 0 15 4 202 0 19 4 202 0 32 5 17 0 42 4 202 0 48 4 202 0 49 4 202 0 50 4 202 0 51 4 202 0 52 4 202 0 53 4 202 0 54 4 202 0 55 4 202 0 56 4 202 0 58 4 202 0 59 4 202 0 65 4 202 0 71 4 202 0 83 4 202 0 84 5 21 0 85 4 202 0 86 5 25 0 88 4 202 0 89 4 202 0 90] #[1 4 214 0 1 4 214 0 4 4 214 0 6 4 214 0 15 4 214 0 19 4 214 0 32 4 214 0 48 4 214 0 49 4 214 0 50 4 214 0 51 4 214 0 52 4 214 0 53 4 214 0 54 4 214 0 55 4 214 0 56 4 214 0 58 4 214 0 59 4 214 0 65 4 214 0 71 4 214 0 83 4 214 0 84 4 214 0 86 5 29 0 89 5 33 0 90] #[1 4 230 0 1 4 230 0 4 4 230 0 6 4 230 0 15 4 230 0 19 4 230 0 32 4 230 0 48 4 230 0 49 4 230 0 50 4 230 0 51 4 230 0 52 4 230 0 53 4 230 0 54 4 230 0 55 4 230 0 56 4 230 0 58 4 230 0 59 4 230 0 65 4 230 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 254 0 1 4 254 0 4 4 254 0 6 4 254 0 15 4 254 0 19 4 254 0 32 4 254 0 48 4 254 0 49 4 254 0 50 4 254 0 51 4 254 0 52 4 254 0 53 5 49 0 54 5 53 0 55 4 254 0 56 5 57 0 58 5 61 0 59 4 254 0 65 5 65 0 71] #[1 5 10 0 1 5 10 0 4 5 10 0 6 5 10 0 15 5 10 0 19 5 10 0 32 5 10 0 48 5 10 0 49 5 10 0 50 5 69 0 51 5 10 0 52 5 10 0 53 5 10 0 56 5 73 0 65] #[1 5 18 0 1 5 18 0 4 5 18 0 6 5 18 0 15 5 18 0 19 5 18 0 32 5 18 0 48 5 18 0 49 5 77 0 50 5 18 0 52 5 18 0 53 5 18 0 56] #[1 5 26 0 1 5 26 0 4 5 26 0 6 5 26 0 15 5 26 0 19 5 26 0 32 5 81 0 48 5 26 0 49 5 26 0 52 5 26 0 53 5 26 0 56] #[1 5 34 0 1 5 34 0 4 5 34 0 6 5 34 0 15 5 34 0 19 5 34 0 32 5 85 0 49 5 34 0 52 5 34 0 53 5 34 0 56] #[1 5 42 0 1 5 42 0 4 5 42 0 6 5 42 0 15 5 42 0 19 5 42 0 32 5 89 0 52 5 42 0 53 5 42 0 56] #[1 5 50 0 1 5 50 0 4 5 50 0 6 5 50 0 15 5 50 0 19 5 50 0 32 5 93 0 53 5 97 0 56] #[0 5 58 0 1 0 4 0 6 0 15 0 19 0 32] #[0 1 154 0 1 0 4 0 6 0 15 0 19 0 32] #[0 5 101 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 105 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 65 0 99 5 109 0 148 3 69 0 149 3 73 0 150] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 113 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 117 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 5 121 0 32] #[0 3 202 0 32] #[0 5 125 0 32] #[1 5 129 0 5 5 133 0 114 5 137 0 234 5 141 0 236] #[1 5 129 0 5 0 86 0 21 5 145 0 114 5 149 0 234 5 141 0 236] #[0 5 153 0 21] #[0 3 233 0 21] #[0 5 157 0 57] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 5 173 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 5 185 0 72 3 250 0 75 5 189 0 225 5 193 0 226 5 197 0 228] #[0 3 238 0 32] #[0 5 201 0 32] #[0 5 205 0 32] #[1 4 126 0 1 4 126 0 4 4 77 0 5 4 126 0 6 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 4 126 0 65 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 4 26 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 34 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 94 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 3 98 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 5 213 0 8] #[0 1 138 0 2 0 4 0 5 0 19 0 32] #[1 4 213 0 4 2 166 0 32] #[0 5 217 0 8] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 221 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 5 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 5 237 0 8 5 241 0 22 5 245 0 23 0 165 0 99] #[0 2 26 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 5 249 0 76 5 253 0 99] #[0 1 110 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 138 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 22 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 1 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 102 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 106 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 5 78 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 122 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 110 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 114 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 106 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 102 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 118 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 86 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 90 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 82 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 98 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 94 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 6 5 0 252 3 5 0 253] #[1 1 14 0 3 1 14 0 10 0 209 0 11 6 9 0 133 0 217 0 136] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 21 0 158 6 25 0 159 6 29 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 6 33 0 112 0 37 0 115 0 41 0 116 6 37 0 162] #[1 6 41 0 3 6 45 0 164] #[0 1 202 0 3 0 32] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 49 0 158 6 25 0 159 6 29 0 160] #[0 6 53 0 6] #[0 1 178 0 3 0 32] #[0 0 94 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 6 57 0 6] #[1 4 65 0 99 6 61 0 149 3 73 0 150] #[0 1 114 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 69 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 81 0 6] #[0 1 174 0 3 0 32] #[0 4 42 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 6 85 0 19] #[1 3 53 0 5 4 110 0 19 4 61 0 28 6 89 0 114 6 93 0 235] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 6 97 0 114] #[0 6 101 0 19] #[0 4 146 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 150 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 166 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 162 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 18 0 5 0 28 0 82 0 87] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 105 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 109 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 113 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 117 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 121 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 125 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 129 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 133 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 137 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 141 0 243] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 6 145 0 103 6 149 0 104 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 153 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 157 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 161 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 165 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 6 169 0 245] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 6 173 0 246] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 6 177 0 247] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 6 181 0 248] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 6 185 0 249] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 78 0 1 4 78 0 2 4 78 0 4 4 78 0 5 4 78 0 6 4 78 0 13 4 78 0 15 4 78 0 19 6 193 0 21 4 78 0 28 4 78 0 32 4 78 0 42 4 78 0 48 4 78 0 49 4 78 0 50 4 78 0 51 4 78 0 52 4 78 0 53 4 78 0 54 4 78 0 55 4 78 0 56 4 78 0 58 4 78 0 59 4 78 0 60 4 78 0 61 4 78 0 62 4 78 0 63 4 78 0 64 4 78 0 65 4 78 0 66 4 78 0 67 4 78 0 68 4 78 0 69 4 78 0 70 4 78 0 71 4 78 0 82 4 78 0 83 4 78 0 84 4 78 0 85 4 78 0 86 4 78 0 87 4 78 0 88 4 78 0 89 4 78 0 90] #[0 6 197 0 19] #[1 4 213 0 4 2 170 0 32] #[0 6 201 0 19] #[0 6 205 0 19] #[0 3 50 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 42 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 209 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 6 65 0 3 4 209 0 5 6 213 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 221 0 235 6 225 0 236] #[0 4 102 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 6 65 0 3 4 209 0 5 6 229 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 233 0 235 6 225 0 236] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 6 237 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 241 0 21] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 3 218 0 32] #[0 3 222 0 4 0 19 0 32] #[0 6 245 0 32] #[0 3 194 0 32] #[1 6 249 0 4 3 214 0 32] #[0 6 253 0 21] #[1 3 54 0 1 3 54 0 3 3 54 0 7 3 54 0 8 3 54 0 9 3 54 0 12 3 54 0 14 3 54 0 16 3 54 0 17 3 54 0 18 3 54 0 21 3 54 0 22 3 54 0 23 3 54 0 24 3 54 0 25 3 54 0 26 3 54 0 27 3 54 0 30 3 54 0 31 3 54 0 32 3 54 0 33 3 54 0 34 3 54 0 35 3 54 0 36 3 54 0 37 3 54 0 38 3 54 0 39 3 54 0 40 3 54 0 41 3 54 0 43 3 54 0 45 3 54 0 46 3 54 0 47 3 54 0 57 5 185 0 72 3 54 0 73 3 54 0 74 3 254 0 75 3 54 0 76 3 54 0 77 3 54 0 78 3 54 0 79 3 54 0 80 3 54 0 81 3 54 0 82 3 54 0 87 3 54 0 93 3 54 0 94 3 54 0 95 3 54 0 96 3 54 0 97 3 54 0 98 3 54 0 99 7 1 0 228] #[1 7 5 0 75 7 9 0 227] #[0 3 242 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 38 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 34 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 218 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 38 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 46 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 13 0 6] #[0 4 94 0 4 0 19] #[0 7 17 0 19] #[1 7 21 0 4 2 34 0 19] #[0 4 50 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 25 0 28] #[0 4 54 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 29 0 99] #[1 4 74 0 1 4 74 0 2 4 74 0 4 4 74 0 5 4 74 0 6 4 74 0 13 4 74 0 15 4 74 0 19 7 33 0 21 4 74 0 28 4 74 0 32 4 74 0 42 4 74 0 48 4 74 0 49 4 74 0 50 4 74 0 51 4 74 0 52 4 74 0 53 4 74 0 54 4 74 0 55 4 74 0 56 4 74 0 58 4 74 0 59 4 74 0 60 4 74 0 61 4 74 0 62 4 74 0 63 4 74 0 64 4 74 0 65 4 74 0 66 4 74 0 67 4 74 0 68 4 74 0 69 4 74 0 70 4 74 0 71 4 74 0 82 4 74 0 83 4 74 0 84 4 74 0 85 4 74 0 86 4 74 0 87 4 74 0 88 4 74 0 89 4 74 0 90] #[0 7 37 0 6] #[0 3 90 0 1 0 4 0 6 0 15 0 19 0 32] #[1 1 22 0 3 0 245 0 10 7 41 0 134 0 253 0 138] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 7 45 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 4 65 0 99 7 49 0 150] #[0 7 53 0 19] #[1 7 57 0 4 1 210 0 19] #[0 1 214 0 4 0 19] #[0 1 234 0 3 0 4 0 32] #[1 1 230 0 3 7 61 0 4 1 230 0 32] #[1 7 65 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 7 69 0 22 7 73 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 7 77 0 165 7 81 0 166 7 85 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 106 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 7 89 0 19] #[0 1 194 0 3 0 5 0 20 0 32] #[0 0 98 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 1 126 0 4 0 32] #[1 7 93 0 1 6 65 0 3 7 97 0 4 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 101 0 151 6 73 0 152 6 77 0 153 2 121 0 168 7 105 0 177 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 134 0 4 0 32] #[0 1 146 0 1 0 4 0 32] #[0 1 150 0 1 0 4 0 32] #[0 1 142 0 2 0 4 0 5 0 19 0 32] #[1 7 109 0 3 7 113 0 212] #[1 4 209 0 5 4 114 0 19 0 70 0 28] #[0 7 117 0 19] #[1 4 209 0 5 7 121 0 19 0 74 0 28] #[1 4 18 0 1 4 18 0 4 4 18 0 5 4 18 0 6 1 233 0 9 4 18 0 15 4 18 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 4 18 0 28 1 165 0 30 1 169 0 31 4 18 0 32 1 173 0 33 1 177 0 34 4 18 0 42 4 18 0 48 4 18 0 49 4 18 0 50 4 18 0 51 4 18 0 52 4 18 0 53 4 18 0 54 4 18 0 55 4 18 0 56 4 18 0 58 4 18 0 59 4 18 0 65 4 18 0 71 2 25 0 76 4 18 0 82 4 18 0 83 4 18 0 84 4 18 0 85 4 18 0 86 4 18 0 87 4 18 0 88 4 18 0 89 4 18 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 7 125 0 239 3 169 0 240] #[0 4 190 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 198 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 194 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 206 0 1 4 206 0 4 4 206 0 6 4 206 0 15 4 206 0 19 4 206 0 32 5 17 0 42 4 206 0 48 4 206 0 49 4 206 0 50 4 206 0 51 4 206 0 52 4 206 0 53 4 206 0 54 4 206 0 55 4 206 0 56 4 206 0 58 4 206 0 59 4 206 0 65 4 206 0 71 4 206 0 83 4 206 0 84 5 21 0 85 4 206 0 86 5 25 0 88 4 206 0 89 4 206 0 90] #[1 4 210 0 1 4 210 0 4 4 210 0 6 4 210 0 15 4 210 0 19 4 210 0 32 5 17 0 42 4 210 0 48 4 210 0 49 4 210 0 50 4 210 0 51 4 210 0 52 4 210 0 53 4 210 0 54 4 210 0 55 4 210 0 56 4 210 0 58 4 210 0 59 4 210 0 65 4 210 0 71 4 210 0 83 4 210 0 84 5 21 0 85 4 210 0 86 5 25 0 88 4 210 0 89 4 210 0 90] #[1 4 218 0 1 4 218 0 4 4 218 0 6 4 218 0 15 4 218 0 19 4 218 0 32 4 218 0 48 4 218 0 49 4 218 0 50 4 218 0 51 4 218 0 52 4 218 0 53 4 218 0 54 4 218 0 55 4 218 0 56 4 218 0 58 4 218 0 59 4 218 0 65 4 218 0 71 4 218 0 83 4 218 0 84 4 218 0 86 5 29 0 89 5 33 0 90] #[1 4 222 0 1 4 222 0 4 4 222 0 6 4 222 0 15 4 222 0 19 4 222 0 32 4 222 0 48 4 222 0 49 4 222 0 50 4 222 0 51 4 222 0 52 4 222 0 53 4 222 0 54 4 222 0 55 4 222 0 56 4 222 0 58 4 222 0 59 4 222 0 65 4 222 0 71 4 222 0 83 4 222 0 84 4 222 0 86 5 29 0 89 5 33 0 90] #[1 4 226 0 1 4 226 0 4 4 226 0 6 4 226 0 15 4 226 0 19 4 226 0 32 4 226 0 48 4 226 0 49 4 226 0 50 4 226 0 51 4 226 0 52 4 226 0 53 4 226 0 54 4 226 0 55 4 226 0 56 4 226 0 58 4 226 0 59 4 226 0 65 4 226 0 71 4 226 0 83 4 226 0 84 4 226 0 86 5 29 0 89 5 33 0 90] #[1 4 242 0 1 4 242 0 4 4 242 0 6 4 242 0 15 4 242 0 19 4 242 0 32 4 242 0 48 4 242 0 49 4 242 0 50 4 242 0 51 4 242 0 52 4 242 0 53 4 242 0 54 4 242 0 55 4 242 0 56 4 242 0 58 4 242 0 59 4 242 0 65 4 242 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 246 0 1 4 246 0 4 4 246 0 6 4 246 0 15 4 246 0 19 4 246 0 32 4 246 0 48 4 246 0 49 4 246 0 50 4 246 0 51 4 246 0 52 4 246 0 53 4 246 0 54 4 246 0 55 4 246 0 56 4 246 0 58 4 246 0 59 4 246 0 65 4 246 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 3 53 0 5 3 57 0 114] #[0 4 250 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71] #[1 4 238 0 1 4 238 0 4 4 238 0 6 4 238 0 15 4 238 0 19 4 238 0 32 4 238 0 48 4 238 0 49 4 238 0 50 4 238 0 51 4 238 0 52 4 238 0 53 4 238 0 54 4 238 0 55 4 238 0 56 4 238 0 58 4 238 0 59 4 238 0 65 4 238 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 234 0 1 4 234 0 4 4 234 0 6 4 234 0 15 4 234 0 19 4 234 0 32 4 234 0 48 4 234 0 49 4 234 0 50 4 234 0 51 4 234 0 52 4 234 0 53 4 234 0 54 4 234 0 55 4 234 0 56 4 234 0 58 4 234 0 59 4 234 0 65 4 234 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 5 6 0 1 5 6 0 4 5 6 0 6 5 6 0 15 5 6 0 19 5 6 0 32 5 6 0 48 5 6 0 49 5 6 0 50 5 6 0 51 5 6 0 52 5 6 0 53 5 49 0 54 5 53 0 55 5 6 0 56 5 57 0 58 5 61 0 59 5 6 0 65 5 65 0 71] #[1 5 2 0 1 5 2 0 4 5 2 0 6 5 2 0 15 5 2 0 19 5 2 0 32 5 2 0 48 5 2 0 49 5 2 0 50 5 2 0 51 5 2 0 52 5 2 0 53 5 49 0 54 5 53 0 55 5 2 0 56 5 57 0 58 5 61 0 59 5 2 0 65 5 65 0 71] #[1 5 14 0 1 5 14 0 4 5 14 0 6 5 14 0 15 5 14 0 19 5 14 0 32 5 14 0 48 5 14 0 49 5 14 0 50 5 69 0 51 5 14 0 52 5 14 0 53 5 14 0 56 5 73 0 65] #[1 5 22 0 1 5 22 0 4 5 22 0 6 5 22 0 15 5 22 0 19 5 22 0 32 5 22 0 48 5 22 0 49 5 77 0 50 5 22 0 52 5 22 0 53 5 22 0 56] #[1 5 30 0 1 5 30 0 4 5 30 0 6 5 30 0 15 5 30 0 19 5 30 0 32 5 81 0 48 5 30 0 49 5 30 0 52 5 30 0 53 5 30 0 56] #[1 5 38 0 1 5 38 0 4 5 38 0 6 5 38 0 15 5 38 0 19 5 38 0 32 5 85 0 49 5 38 0 52 5 38 0 53 5 38 0 56] #[1 5 46 0 1 5 46 0 4 5 46 0 6 5 46 0 15 5 46 0 19 5 46 0 32 5 89 0 52 5 46 0 53 5 46 0 56] #[0 7 129 0 15] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 133 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 7 177 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 7 181 0 145] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 7 189 0 6] #[0 4 66 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 114 0 1 4 114 0 4 4 209 0 5 4 114 0 6 4 114 0 15 4 114 0 19 4 114 0 28 4 114 0 32 4 114 0 42 4 114 0 48 4 114 0 49 4 114 0 50 4 114 0 51 4 114 0 52 4 114 0 53 4 114 0 54 4 114 0 55 4 114 0 56 4 114 0 58 4 114 0 59 4 114 0 65 4 114 0 71 4 114 0 82 4 114 0 83 4 114 0 84 4 114 0 85 4 114 0 86 4 114 0 87 4 114 0 88 4 114 0 89 4 114 0 90] #[0 4 58 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 106 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 70 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 62 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 193 0 19] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 197 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 7 201 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 7 205 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 209 0 160] #[0 3 246 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 7 213 0 145] #[0 3 58 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 86 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 217 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 7 221 0 99] #[0 7 225 0 21] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 4 90 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 29 0 3 7 233 0 135] #[1 4 65 0 99 7 237 0 150] #[1 1 222 0 4 4 225 0 5 1 222 0 19] #[0 1 242 0 3 0 20] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 241 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 7 245 0 112 0 37 0 115 0 41 0 116] #[0 2 2 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 7 249 0 21 3 221 0 28] #[1 4 14 0 5 7 253 0 21 4 14 0 28 4 14 0 82 4 14 0 87] #[1 8 1 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 5 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 9 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 13 0 28 4 122 0 82 4 122 0 87] #[0 1 190 0 3 0 5 0 20 0 32] #[0 1 170 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 17 0 1] #[0 2 106 0 1 0 4] #[1 8 21 0 1 8 25 0 4] #[1 8 29 0 1 8 33 0 41 8 37 0 47 8 41 0 213 8 45 0 214 8 49 0 215 8 53 0 216] #[0 3 26 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 57 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 61 0 239 3 169 0 240] #[0 4 178 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 8 65 0 251] #[0 8 69 0 19] #[0 8 73 0 21] #[0 8 77 0 21] #[0 8 81 0 21] #[1 0 102 0 2 0 102 0 5 0 102 0 13 8 85 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87] #[0 2 222 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 142 0 1 2 142 0 3 2 142 0 7 2 142 0 8 2 142 0 9 2 142 0 12 2 254 0 14 2 142 0 16 2 142 0 17 2 142 0 18 2 142 0 21 2 142 0 22 2 142 0 23 2 142 0 24 2 142 0 25 2 142 0 26 2 142 0 27 2 142 0 30 2 142 0 31 2 142 0 32 2 142 0 33 2 142 0 34 2 142 0 35 2 142 0 36 2 142 0 37 2 142 0 38 2 142 0 39 2 142 0 40 2 142 0 41 2 142 0 43 2 142 0 45 2 142 0 46 2 142 0 47 2 142 0 57 2 142 0 73 2 142 0 74 2 142 0 76 2 142 0 77 2 142 0 78 2 142 0 79 2 142 0 80 2 142 0 81 2 142 0 82 2 142 0 87 2 142 0 93 2 142 0 94 2 142 0 95 2 142 0 96 2 142 0 97 2 142 0 98 2 142 0 99] #[0 3 2 0 14] #[0 3 6 0 14] #[0 3 10 0 14] #[0 3 14 0 14] #[0 8 89 0 14] #[0 3 46 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 230 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 3 126 0 1 1 29 0 3 3 126 0 4 3 126 0 5 3 126 0 6 3 126 0 15 3 126 0 19 3 126 0 28 3 126 0 32 3 126 0 42 3 126 0 48 3 126 0 49 3 126 0 50 3 126 0 51 3 126 0 52 3 126 0 53 3 126 0 54 3 126 0 55 3 126 0 56 3 126 0 58 3 126 0 59 3 126 0 65 3 126 0 71 3 126 0 82 3 126 0 83 3 126 0 84 3 126 0 85 3 126 0 86 3 126 0 87 3 126 0 88 3 126 0 89 3 126 0 90 8 93 0 135] #[0 8 97 0 19] #[0 8 101 0 32] #[0 3 226 0 4 0 19 0 32] #[0 8 105 0 19] #[0 4 2 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 98 0 4 0 19] #[1 4 82 0 1 4 82 0 2 4 82 0 4 4 82 0 5 4 82 0 6 4 82 0 13 4 82 0 15 4 82 0 19 8 109 0 21 4 82 0 28 4 82 0 32 4 82 0 42 4 82 0 48 4 82 0 49 4 82 0 50 4 82 0 51 4 82 0 52 4 82 0 53 4 82 0 54 4 82 0 55 4 82 0 56 4 82 0 58 4 82 0 59 4 82 0 60 4 82 0 61 4 82 0 62 4 82 0 63 4 82 0 64 4 82 0 65 4 82 0 66 4 82 0 67 4 82 0 68 4 82 0 69 4 82 0 70 4 82 0 71 4 82 0 82 4 82 0 83 4 82 0 84 4 82 0 85 4 82 0 86 4 82 0 87 4 82 0 88 4 82 0 89 4 82 0 90] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 113 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 117 0 19] #[0 1 90 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 226 0 4 4 225 0 5 1 226 0 19] #[0 1 218 0 4 0 19] #[0 1 238 0 3 0 4 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 121 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 125 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 250 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 129 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 254 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 133 0 22 8 137 0 23 5 249 0 76 5 253 0 99] #[0 1 166 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 1 162 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 8 141 0 1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 145 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 154 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 149 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 8 153 0 217 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 157 0 15] #[1 8 161 0 1 8 33 0 41 8 37 0 47 8 165 0 214 8 169 0 215 8 53 0 216] #[1 8 173 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 158 0 1 0 41 0 47] #[0 3 166 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 174 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 182 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 5 54 0 1 0 4 0 6 0 15 0 19 0 32] #[0 3 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 185 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 193 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 8 197 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 205 0 32] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 209 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 8 221 0 145] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 225 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 229 0 19] #[0 3 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 233 0 19] #[0 8 237 0 19] #[0 1 246 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 8 241 0 21] #[0 8 245 0 21] #[0 1 158 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 110 0 1 0 4] #[0 3 186 0 15] #[0 8 249 0 15] #[0 3 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 146 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 8 253 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 162 0 1 0 41 0 47] #[0 3 150 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 3 174 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 3 174 0 41 0 117 0 43 0 121 0 45 0 125 0 46 3 174 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 170 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 1 0 19] #[0 9 5 0 19] #[0 9 9 0 32] #[0 2 238 0 14] #[0 2 226 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 30 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 13 0 19] #[1 6 249 0 4 3 230 0 19] #[0 3 210 0 19] #[0 4 6 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 17 0 19] #[1 3 134 0 1 1 29 0 3 3 134 0 4 3 134 0 5 3 134 0 6 3 134 0 15 3 134 0 19 3 134 0 28 3 134 0 32 3 134 0 42 3 134 0 48 3 134 0 49 3 134 0 50 3 134 0 51 3 134 0 52 3 134 0 53 3 134 0 54 3 134 0 55 3 134 0 56 3 134 0 58 3 134 0 59 3 134 0 65 3 134 0 71 3 134 0 82 3 134 0 83 3 134 0 84 3 134 0 85 3 134 0 86 3 134 0 87 3 134 0 88 3 134 0 89 3 134 0 90 9 21 0 135] #[0 9 25 0 32] #[0 9 29 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 33 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 37 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 178 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 142 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 41 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 45 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 9 49 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 138 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 10 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 6 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 57 0 19] #[0 9 61 0 19] #[0 9 65 0 14] #[0 2 246 0 14] #[0 9 69 0 32] #[0 2 234 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 73 0 32] #[0 9 77 0 32] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 81 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 9 85 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 18 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 14 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 242 0 14] #[0 9 89 0 19] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 93 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 250 0 14] )! ! !SmaCCGrammarParser commentStamp: 'jmb' prior: 83160806! SmaCCGrammarParser is a parser for grammars. Instance Variables: grammar the grammar we are producing ! !SmaCCGrammarParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "File: Parser {grammar addEmptySymbol; yourself}; Parser: Rule | Parser Rule ; Rule : ProductionRule {grammar setStartSymbolIfNone: '1'. nil} | LeftLine | RightLine | NonAssociativeLine | IdMethodLine | StartLine ; LeftLine: ""%left"" TokenList 'tokens' "";"" { tokens do: [:each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; RightLine: ""%right"" TokenList 'tokens' "";"" { tokens do: [:each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; NonAssociativeLine: ""%nonassoc"" TokenList 'tokens' "";"" { tokens do: [:each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; IdMethodLine: ""%id"" IdTokens 'tokens' "";"" {tokens do: [:each | grammar makeTokenIdMethodFor: each]. nil}; StartLine: ""%start"" StartingTokens "";""; IdTokens: {OrderedCollection with: '1' value} | IdTokens {'1' add: '2' value; yourself}; TokenList: Term | TokenList Term ; StartingTokens: 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)} | StartingTokens 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)}; ProductionRule: ParserRules "";"" {| symbol | symbol := grammar nonTerminalSymbolNamed: '1' value. '3' do: [:each | symbol addProduction: each]. symbol}; ParserRules: ParserRules ""|"" ParserRule {'1' add: '3'; yourself} | ParserRule ; ParserRule : Terms 'rhs' {rhs} | Terms 'rhs' 'code' {self verifyCodeToken: code for: rhs} ; Terms : {SmaCCRHS new} | Terms 'rhs' Term 'term' {rhs add: term; yourself} | Terms 'rhs' Term 'term' 'variableNameToken' {rhs add: term; nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""?"" 'variableNameToken' {rhs add: (grammar makeOptionalSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""*"" 'variableNameToken' {rhs add: (grammar makeRepeatSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""+"" 'variableNameToken' {rhs add: (grammar makeRepeatMultipleSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} ; Term: {grammar keywordTerminalNamed: '1' value} | {grammar terminalSymbolNamed: '1' value ifAbsent: [currentToken := '1'. self reportErrorMessage: 'Token not specified']} | {grammar nonTerminalSymbolNamed: '1' value} | ""error"" {SmaCCSymbol error} | ""("" SimpleTerms "")"" {grammar makeGroupFor: '2'} | ""<%"" SimpleTerms ""%>"" {grammar makeRepeatSymbolFor: (grammar makeGroupFor: '2')} | ""["" SimpleTerms ""]"" {grammar makeOptionalSymbolFor: (grammar makeGroupFor: '2')}; SimpleTerms : SimpleTerm {OrderedCollection with: '1'} | SimpleTerms 'terms' ""|"" SimpleTerm 'term' {terms add: term; yourself}; SimpleTerm : { SmaCCRHS new } | SimpleTerm 'rhs' Term 'term' {rhs add: term; yourself} | SimpleTerm 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} ;"! ! !SmaCCGrammarParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^SmaCCGrammarScanner! ! !SmaCCGrammarParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateForFile ^1! ! !SmaCCGrammarParser methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! grammar: aSmaCCGrammar grammar := aSmaCCGrammar! ! !SmaCCGrammarParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. grammar := SmaCCGrammar new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile1: nodes ^ grammar addEmptySymbol; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdMethodLine1: nodes (nodes at: 2) do: [ :each | grammar makeTokenIdMethodFor: each ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdTokens1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdTokens2: nodes ^ (nodes at: 1) add: (nodes at: 2) value; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForLeftLine1: nodes (nodes at: 2) do: [ :each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForNonAssociativeLine1: nodes (nodes at: 2) do: [ :each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRule1: nodes ^ nodes at: 1! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRule2: nodes ^ self verifyCodeToken: (nodes at: 2) for: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRules1: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForProductionRule1: nodes | symbol | symbol := grammar nonTerminalSymbolNamed: (nodes at: 1) value. (nodes at: 3) do: [ :each | symbol addProduction: each ]. ^ symbol! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRightLine1: nodes (nodes at: 2) do: [ :each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRule1: nodes grammar setStartSymbolIfNone: (nodes at: 1). ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm3: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm4: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm5: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerms1: nodes ^ OrderedCollection with: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerms2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStartingTokens1: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 1) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStartingTokens2: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 2) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm1: nodes ^ grammar keywordTerminalNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm2: nodes ^ grammar terminalSymbolNamed: (nodes at: 1) value ifAbsent: [ currentToken := nodes at: 1. self reportErrorMessage: 'Token not specified' ]! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm3: nodes ^ grammar nonTerminalSymbolNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm4: nodes ^ SmaCCSymbol error! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm5: nodes ^ grammar makeGroupFor: (nodes at: 2)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm6: nodes ^ grammar makeRepeatSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm7: nodes ^ grammar makeOptionalSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms3: nodes ^ (nodes at: 1) add: (nodes at: 2); nameLastItem: ((nodes at: 3) value copyFrom: 2 to: (nodes at: 3) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms4: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms5: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms6: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms7: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms8: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms9: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(26 3 #reduceActionForIdMethodLine1:) #(27 3 #reduceFor:) #(28 1 #reduceFor:) #(28 2 #reduceFor:) #(29 1 #reduceActionForIdTokens1:) #(29 2 #reduceActionForIdTokens2:) #(30 1 #reduceActionForStartingTokens1:) #(30 2 #reduceActionForStartingTokens2:) #(31 3 #reduceActionForNonAssociativeLine1:) #(32 1 #reduceActionForTerm1:) #(32 1 #reduceActionForTerm2:) #(32 1 #reduceActionForTerm3:) #(32 1 #reduceActionForTerm4:) #(32 3 #reduceActionForTerm5:) #(32 3 #reduceActionForTerm6:) #(32 3 #reduceActionForTerm7:) #(33 1 #reduceFor:) #(34 4 #reduceActionForProductionRule1:) #(35 3 #reduceActionForParserRules1:) #(35 1 #reduceFor:) #(36 1 #reduceActionForParserRule1:) #(36 2 #reduceActionForParserRule2:) #(37 0 #reduceActionForTerms1:) #(37 2 #reduceActionForTerms2:) #(37 3 #reduceActionForTerms3:) #(37 3 #reduceActionForTerms4:) #(37 4 #reduceActionForTerms5:) #(37 3 #reduceActionForTerms6:) #(37 4 #reduceActionForTerms7:) #(37 3 #reduceActionForTerms8:) #(37 4 #reduceActionForTerms9:) #(38 3 #reduceActionForRightLine1:) #(39 1 #reduceActionForRule1:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(40 1 #reduceActionForFile1:) #(41 1 #reduceActionForSimpleTerms1:) #(41 3 #reduceActionForSimpleTerms2:) #(42 0 #reduceActionForSimpleTerm1:) #(42 2 #reduceActionForSimpleTerm2:) #(42 3 #reduceActionForSimpleTerm3:) #(42 3 #reduceActionForSimpleTerm4:) #(42 3 #reduceActionForSimpleTerm5:) #(45 1 #reduceFor:) #(45 2 #reduceFor:) #(46 3 #reduceActionForLeftLine1:) )! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 53 0 39 0 57 0 40 0 61 0 45 0 65 0 46] #[1 0 69 0 20 0 73 0 30] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 105 0 28 0 109 0 32] #[1 0 113 0 19 0 117 0 29] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 121 0 28 0 109 0 32] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 125 0 28 0 109 0 32] #[0 0 129 0 25] #[0 0 150 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 154 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 146 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 134 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 142 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 190 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 0 0 43] #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 133 0 39 0 158 0 43 0 65 0 46] #[0 0 138 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 30 0 7 0 20] #[1 0 137 0 7 0 141 0 20] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 145 0 41 0 149 0 42] #[1 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 153 0 41 0 149 0 42] #[0 0 54 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 157 0 41 0 149 0 42] #[0 0 46 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 50 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 42 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 161 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[0 0 14 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 22 0 7 0 19] #[1 0 169 0 7 0 173 0 19] #[1 0 177 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 181 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 185 0 35 0 189 0 36 0 193 0 37] #[0 0 194 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 10 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 34 0 7 0 20] #[1 0 197 0 2 0 201 0 9] #[1 0 162 0 2 0 162 0 9 0 77 0 11 0 162 0 12 0 81 0 13 0 162 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[1 0 201 0 9 0 209 0 12] #[1 0 201 0 9 0 213 0 14] #[0 0 38 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 18 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 6 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 26 0 7 0 19] #[0 0 198 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 130 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 217 0 7 0 221 0 9] #[0 0 82 0 7 0 9] #[1 0 86 0 7 0 86 0 9 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 225 0 23 0 229 0 32] #[0 0 66 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 233 0 42] #[1 0 174 0 2 0 237 0 5 0 174 0 9 0 241 0 10 0 174 0 11 0 174 0 12 0 174 0 13 0 174 0 14 0 174 0 15 0 245 0 16 0 174 0 17 0 174 0 19 0 174 0 20 0 174 0 21] #[0 0 62 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 58 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 74 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 249 0 36 0 193 0 37] #[0 0 90 0 7 0 9] #[1 0 253 0 5 0 98 0 7 0 98 0 9 1 1 0 10 0 98 0 11 0 98 0 13 0 98 0 15 1 5 0 16 0 98 0 17 0 98 0 19 0 98 0 20 0 98 0 21 0 98 0 23 1 9 0 24] #[1 0 166 0 2 0 166 0 9 0 77 0 11 0 166 0 12 0 81 0 13 0 166 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[0 0 178 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 182 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 186 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 78 0 7 0 9] #[1 0 106 0 7 0 106 0 9 0 106 0 11 0 106 0 13 0 106 0 15 0 106 0 17 0 106 0 19 0 106 0 20 0 106 0 21 0 106 0 23 1 13 0 24] #[1 0 114 0 7 0 114 0 9 0 114 0 11 0 114 0 13 0 114 0 15 0 114 0 17 0 114 0 19 0 114 0 20 0 114 0 21 0 114 0 23 1 17 0 24] #[1 0 122 0 7 0 122 0 9 0 122 0 11 0 122 0 13 0 122 0 15 0 122 0 17 0 122 0 19 0 122 0 20 0 122 0 21 0 122 0 23 1 21 0 24] #[0 0 102 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 110 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 118 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 126 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] )! ! !SmaCCGrammarParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! verifyCodeToken: codeToken for: aSmaCCRHS | code | code := codeToken value copyFrom: 2 to: codeToken value size - 1. RBParser parseExpression: code onError: [:string :position | currentToken := nil. scanner position: codeToken startPosition + position. self reportErrorMessage: string]. aSmaCCRHS reduceAction: code. ^aSmaCCRHS! ! !SmaCCScannerParser commentStamp: '' prior: 83160986! SmaCCScannerParser is the parser for the scanner definition. Instance Variables: tokens the tokens that are parsed ! !SmaCCScannerParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "%left ""|""; %left ""("" ; %left ""*"" ""+"" ""?"" ; File: Rules {scannerDefinition} | {scannerDefinition}; Rules: Rule "";"" | Rules Rule "";"" ; Rule: RegexRule {'1' states isEmpty ifTrue: ['1' addStates: scannerDefinition nonExcludeStates]} | ExcludeStatesLine | StatesLine ; RegexRule : "":"" Regex {'3' position: '1' startPosition. scannerDefinition addToken: '3' withName: '1' value. '3'} | Symbol RegexRule {'2' addState: '1'; yourself}; StatesLine : ""%states"" States ; States : | States Symbol {scannerDefinition addState: '2'}; ExcludeStatesLine : ""%excludes"" ExcludeStates ; ExcludeStates : | ExcludeStates Symbol {scannerDefinition addExcludeState: '2'}; Symbol : {'1' value asSymbol}; Regex: RegexTerm {'1'} | Regex ""|"" Regex {'1' | '3'} | Regex RegexTerm {'1' , '2'}; RegexTerm: {SmaCCCharacterRENode characters: '1' value} | {SmaCCCharacterRENode characters: self allCharacters} | {self nodeFor: (ReadStream on: ('1' value copyFrom: 2 to: '1' value size))} | ""("" Regex "")"" {'2'} | {SmaCCCharacterRENode characters: (self parseCharacterBlock: '1')} | {(scannerDefinition tokenNamed: '1' value ifAbsentPut: [self generateImplicitToken: '1']) copy} | {SmaCCSequenceRENode nodes: ('1' value asOrderedCollection collect: [:each | SmaCCCharacterRENode characters: (String with: each)])} | RegexTerm ""*"" {'1' repeat} | RegexTerm ""+"" {'1' repeatForAtLeast: 1} | RegexTerm ""?"" {'1' repeatFor: 0 to: 1} | RegexTerm {| readStream start stop | readStream := ReadStream on: ('2' value copyFrom: 2 to: '2' value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. '1' repeatFor: (start isEmpty ifTrue: [0] ifFalse: [start asNumber]) to: (stop isEmpty ifTrue: [(1 bitShift: 31)] ifFalse: [stop asNumber])} ;"! ! !SmaCCScannerParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^SmaCCScannerScanner! ! !SmaCCScannerParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateForFile ^1! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! allCharacters ^SmaCCGrammar allCharacters! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! charactersFor: aStream in: aToken | characters char endCharacters | aStream atEnd ifTrue: [self reportCharacterBlockErrorForToken: aToken]. char := aStream next. characters := char == $\ ifTrue: [(self nodeFor: aStream) characters] ifFalse: [OrderedCollection with: char]. (characters size = 1 and: [aStream peekFor: $-]) ifFalse: [^characters]. endCharacters := self charactersFor: aStream in: aToken. endCharacters size > 1 ifTrue: [self reportCharacterBlockErrorForToken: aToken]. ^(characters first asInteger to: endCharacters first asInteger) collect: [:each | Character value: each]! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! generateImplicitToken: aSmaCCToken | node | node := SmaCCGrammar implicitToken: aSmaCCToken value. node isNil ifTrue: [currentToken := aSmaCCToken. self reportErrorMessage: 'Token not specified']. ^node! ! !SmaCCScannerParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. scannerDefinition := SmaCCScannerDefinition new! ! !SmaCCScannerParser methodsFor: 'private' stamp: 'lr 1/6/2007 21:44'! nodeFor: aStream | block char value count | char := aStream next. char == $f ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 12))]. char == $n ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 10))]. char == $r ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 13))]. char == $t ifTrue: [^SmaCCCharacterRENode characters: ' ']. char == $v ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 11))]. char == $c ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: aStream next asInteger - $A asInteger))]. char == $x ifTrue: [count := value := 0. [aStream atEnd not and: [count < 4 and: [char := aStream peek. (char between: $0 and: $9) or: [(char between: $A and: $F) or: [char between: $a and: $f]]]]] whileTrue: [count := count + 1. value := value * 16 + aStream next digitValue]. ^SmaCCCharacterRENode characters: (String with: (Character value: value))]. char == $d ifTrue: [block := [:each | each between: $0 and: $9]]. char == $D ifTrue: [block := [:each | (each between: $0 and: $9) not]]. char == $s ifTrue: [block := [:each | #(9 10 11 12 13 32) includes: each asInteger]]. char == $S ifTrue: [block := [:each | (#(9 10 11 12 13 32) includes: each asInteger) not]]. char == $w ifTrue: [block := [:each | (each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]]]. char == $W ifTrue: [block := [:each | ((each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]) not]]. block isNil ifTrue: [^SmaCCCharacterRENode characters: (String with: char)]. ^SmaCCCharacterRENode characters: (String withAll: (self allCharacters select: block))! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! parseCharacterBlock: aToken | characters aStream invert | aStream := ReadStream on: (aToken value copyFrom: 2 to: aToken value size - 1). characters := OrderedCollection new. invert := aStream peekFor: $^. [aStream atEnd] whileFalse: [characters addAll: (self charactersFor: aStream in: aToken)]. ^String withAll: (invert ifTrue: [self allCharacters reject: [:each | characters includes: each]] ifFalse: [characters])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForExcludeStates2: nodes ^ scannerDefinition addExcludeState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile1: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile2: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex1: nodes ^ nodes at: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex2: nodes ^ (nodes at: 1) | (nodes at: 3)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex3: nodes ^ (nodes at: 1) , (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexRule1: nodes (nodes at: 3) position: (nodes at: 1) startPosition. scannerDefinition addToken: (nodes at: 3) withName: (nodes at: 1) value. ^ nodes at: 3! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexRule2: nodes ^ (nodes at: 2) addState: (nodes at: 1); yourself! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm10: nodes ^ (nodes at: 1) repeatFor: 0 to: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm11: nodes | readStream start stop | readStream := ReadStream on: ((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. ^ (nodes at: 1) repeatFor: (start isEmpty ifTrue: [ 0 ] ifFalse: [ start asNumber ]) to: (stop isEmpty ifTrue: [ 1 bitShift: 31 ] ifFalse: [ stop asNumber ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm1: nodes ^ SmaCCCharacterRENode characters: (nodes at: 1) value! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm2: nodes ^ SmaCCCharacterRENode characters: self allCharacters! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm3: nodes ^ self nodeFor: (ReadStream on: ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm4: nodes ^ nodes at: 2! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm5: nodes ^ SmaCCCharacterRENode characters: (self parseCharacterBlock: (nodes at: 1))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm6: nodes ^ (scannerDefinition tokenNamed: (nodes at: 1) value ifAbsentPut: [ self generateImplicitToken: (nodes at: 1) ]) copy! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm7: nodes ^ SmaCCSequenceRENode nodes: ((nodes at: 1) value asOrderedCollection collect: [ :each | SmaCCCharacterRENode characters: (String with: each) ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm8: nodes ^ (nodes at: 1) repeat! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm9: nodes ^ (nodes at: 1) repeatForAtLeast: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRule1: nodes ^ (nodes at: 1) states isEmpty ifTrue: [ (nodes at: 1) addStates: scannerDefinition nonExcludeStates ]! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStates2: nodes ^ scannerDefinition addState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSymbol1: nodes ^ (nodes at: 1) value asSymbol! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(20 1 #reduceFor:) #(21 1 #reduceActionForFile1:) #(21 0 #reduceActionForFile2:) #(22 3 #reduceActionForRegexRule1:) #(22 2 #reduceActionForRegexRule2:) #(23 2 #reduceFor:) #(24 1 #reduceActionForRule1:) #(24 1 #reduceFor:) #(24 1 #reduceFor:) #(25 1 #reduceActionForRegex1:) #(25 3 #reduceActionForRegex2:) #(25 2 #reduceActionForRegex3:) #(26 1 #reduceActionForSymbol1:) #(27 0 #reduceFor:) #(27 2 #reduceActionForStates2:) #(28 0 #reduceFor:) #(28 2 #reduceActionForExcludeStates2:) #(29 1 #reduceActionForRegexTerm1:) #(29 1 #reduceActionForRegexTerm2:) #(29 1 #reduceActionForRegexTerm3:) #(29 3 #reduceActionForRegexTerm4:) #(29 1 #reduceActionForRegexTerm5:) #(29 1 #reduceActionForRegexTerm6:) #(29 1 #reduceActionForRegexTerm7:) #(29 2 #reduceActionForRegexTerm8:) #(29 2 #reduceActionForRegexTerm9:) #(29 2 #reduceActionForRegexTerm10:) #(29 2 #reduceActionForRegexTerm11:) #(32 2 #reduceFor:) #(32 3 #reduceFor:) #(33 2 #reduceFor:) )! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! reportCharacterBlockErrorForToken: aToken currentToken := aToken. self reportErrorMessage: 'Invalid character block'! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 25 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 26 0 14 0 30 0 45 0 32 0 49 0 33] #[1 0 66 0 9 0 66 0 17 0 53 0 28] #[1 0 58 0 9 0 58 0 17 0 57 0 27] #[0 0 61 0 10] #[0 0 54 0 9 0 14 0 17] #[0 0 0 0 30] #[0 0 30 0 9] #[0 0 34 0 9] #[0 0 65 0 9] #[1 0 17 0 14 0 21 0 17 0 69 0 22 0 41 0 26] #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 29 0 22 0 33 0 23 0 73 0 24 0 41 0 26 0 10 0 30 0 49 0 33] #[0 0 38 0 9] #[1 0 26 0 9 0 21 0 17 0 77 0 26] #[1 0 126 0 9 0 21 0 17 0 81 0 26] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 113 0 25 0 117 0 29] #[0 0 118 0 7 0 8 0 14 0 17 0 30] #[0 0 22 0 9] #[0 0 121 0 9] #[0 0 70 0 9 0 17] #[0 0 62 0 9 0 17] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 125 0 25 0 117 0 29] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 94 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 98 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 85 0 2 0 129 0 5 0 18 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 42 0 1 0 42 0 2 0 137 0 3 0 141 0 4 0 42 0 5 0 145 0 6 0 42 0 9 0 42 0 11 0 42 0 12 0 42 0 14 0 149 0 16 0 42 0 17 0 42 0 18 0 42 0 19] #[0 0 122 0 7 0 8 0 14 0 17 0 30] #[1 0 153 0 1 0 85 0 2 0 129 0 5 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 157 0 25 0 117 0 29] #[1 0 50 0 1 0 50 0 2 0 137 0 3 0 141 0 4 0 50 0 5 0 145 0 6 0 50 0 9 0 50 0 11 0 50 0 12 0 50 0 14 0 149 0 16 0 50 0 17 0 50 0 18 0 50 0 19] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 110 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 114 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 46 0 1 0 85 0 2 0 46 0 5 0 46 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] )! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseExpression: aString ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseExpression: aString onError: aBlock ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode onError: aBlock)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseMethod: aString ^self parse: aString startingAt: self startingStateForMethod! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseMethod: aString onError: aBlock ^self parse: aString startingAt: self startingStateForMethod onError: aBlock! ! !StParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! parserDefinitionComment "%id ; %start SequenceNode ; Method: MethodSequenceNode {(RBMethodNode selector: '1' value asSymbol arguments: #() body: '2' last)} | BinaryMethodName MethodSequenceNode {(RBMethodNode selector: '1' first arguments: '1' last body: '2' last)} | KeywordMethodName MethodSequenceNode {(RBMethodNode selector: '1' first contents asSymbol arguments: '1' last body: '2' last)}; BinaryMethodName: Variable {Array with: '1' value asSymbol with: (Array with: '2')} ; KeywordMethodName: Variable {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMethodName Variable {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; Primitives: {OrderedCollection new} | Primitives ""<"" PrimitiveMessageSend "">"" {'1' add: ('2' startPosition to: '4' startPosition); yourself}; PrimitiveMessageSend: | PrimitiveMessageSend {nil} | PrimitiveMessageSend Literal {nil} | PrimitiveMessageSend ""("" {nil} | PrimitiveMessageSend "")"" {nil} | PrimitiveMessageSend ""{"" {nil} | PrimitiveMessageSend ""}"" {nil} | PrimitiveMessageSend "";"" {nil} | PrimitiveMessageSend ""."" {nil} | PrimitiveMessageSend {nil} | PrimitiveMessageSend {nil}; MethodSequenceNode: Primitives ""|"" TemporaryVariables ""|"" Primitives Statements {Array with: ('1' addAll: '5'; yourself) with: (RBSequenceNode temporaries: '3' statements: '6')} | Primitives ""||"" Primitives Statements {Array with: ('1' addAll: '3'; yourself) with: (RBSequenceNode temporaries: #() statements: '4')} | Primitives Statements {Array with: '1' with: (RBSequenceNode temporaries: #() statements: '2')}; SequenceNode: Temporaries Statements {RBSequenceNode temporaries: '1' statements: '2'}; Temporaries: {#()} | ""||"" {#()} | ""|"" TemporaryVariables ""|"" {'2'}; TemporaryVariables: {OrderedCollection new} | TemporaryVariables Variable {'1' add: '2'; yourself}; Statements: {OrderedCollection new} | StatementList "".""? {#liftFirstValue:} | StatementList ""."" ""^"" Expression "".""? {'1' add: (RBReturnNode value: '4'); yourself} | ""^"" Expression "".""? {OrderedCollection with: (RBReturnNode value: '2')}; StatementList: Expression | StatementList ""."" Expression {'1' add: '3'; yourself}; Block: ""["" BlockArgs ""|"" SequenceNode ""]"" {RBBlockNode arguments: '2' body: '4'} | ""["" SequenceNode ""]"" {RBBlockNode body: '2'} | ""["" BlockArgs ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode statements: #())} | ""["" BlockArgs ""||"" TemporaryVariables ""|"" Statements ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode temporaries: '4' statements: '6')}; BlockArgs: "":"" Variable {OrderedCollection with: '2'} | BlockArgs "":"" Variable {'1' add: '3'; yourself}; Expression: Variable "":="" Expression {RBAssignmentNode variable: '1' value: '3'} | Cascade {#liftFirstValue:}; Cascade: MessageSend CascadeList {| messages | '2' isEmpty ifTrue: [^'1']. messages := OrderedCollection new: '2' size + 1. messages add: '1'. '2' do: [:each | messages add: (RBMessageNode receiver: '1' receiver selector: each first contents asSymbol arguments: each last)]. RBCascadeNode messages: messages} | Primary {#liftFirstValue:}; MessageSend: KeywordMessageSend {#liftFirstValue:} | BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:}; CascadeList: {OrderedCollection new} | CascadeList "";"" SimpleMessage {'1' add: '3'; yourself}; SimpleMessage: UnaryMessage {#liftFirstValue:} | BinaryMessage {#liftFirstValue:} | KeywordMessage {#liftFirstValue:}; KeywordMessageSend: BinaryMessageSend KeywordMessage {#createMessageNodeFrom:} | UnaryMessageSend KeywordMessage {#createMessageNodeFrom:} | Primary KeywordMessage {#createMessageNodeFrom:}; KeywordMessage: KeywordArgument {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMessage KeywordArgument {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; KeywordArgument: BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; BinaryMessageSend: BinaryMessageSend BinaryMessage {#createMessageNodeFrom:} | UnaryMessageSend BinaryMessage {#createMessageNodeFrom:} | Primary BinaryMessage {#createMessageNodeFrom:} ; BinaryMessage : BinaryArgument {Array with: (ReadStream on: '1' value) with: (Array with: '2')}; BinaryArgument: UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; UnaryMessageSend : UnaryMessageSend UnaryMessage {#createMessageNodeFrom:} | Primary UnaryMessage {#createMessageNodeFrom:}; UnaryMessage : {Array with: (ReadStream on: '1' value) with: #()}; Primary: ""("" Expression "")"" {#liftSecondValue:} | Literal {RBLiteralNode value: '1'} | Variable {#liftFirstValue:} | Block {#liftFirstValue:}; Variable: {RBVariableNode named: '1' value} | {RBVariableNode named: '1' value}; Literal: ""true"" {true} | ""false"" {false} | ""nil"" {nil} | {'1' value} | {'1' value} | {'1' value at: 2} | {('1' value copyFrom: 2 to: '1' value size - 1) copyReplaceAll: '''''' with: ''''} | ""#"" {(('2' value copyFrom: 2 to: '2' value size - 1) copyReplaceAll: '''''' with: '''') asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" ""["" ByteArray ""]"" {'3' contents} | ""#"" ""("" Array "")"" {'3' contents} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference}; ByteArray: {WriteStream on: ByteArray new} | ByteArray {'1' nextPut: '2' value; yourself}; Array: {WriteStream on: Array new} | Array ArrayLiteral {'1' nextPut: '2'; yourself} | Array "":="" {'2' stopPosition + 1 = '3' startPosition ifTrue: ['1' nextPut: ('2' value, ':') asSymbol] ifFalse: ['1' nextPut: '2' value asSymbol; nextPut: #':']. scanner position: '3' startPosition. currentToken := nil. '1'}; ArrayLiteral: Literal {#liftFirstValue:} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | ""{"" ""}"" {'2' value asQualifiedReference} | ""{"" ""}"" {'2' value asQualifiedReference} | ""("" Array "")"" {'2' contents} | ""["" ByteArray ""]"" {'2' contents} | {'1' value asSymbol} | {'1' value};"! ! !StParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50'! scannerClass ^StScanner! ! !StParser class methodsFor: 'private' stamp: 'lr 4/12/2010 13:58'! simplifyExpression: aSequenceNode ^aSequenceNode isNil ifFalse: [ (aSequenceNode statements size == 1 and: [aSequenceNode temporaries isEmpty]) ifTrue: [aSequenceNode statements first] ifFalse: [aSequenceNode] ]! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForMethod ^1! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForSequenceNode ^2! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! actionForCurrentToken | ids action | ids := currentToken id. 1 to: ids size do: [:i | action := self actionFor: (ids at: i). (action bitAnd: self actionMask) = self errorAction ifFalse: [^action]. (ids at: i) = scanner negativeNumberId ifTrue: [currentToken := SmaCCToken value: '-' start: currentToken startPosition id: (Array with: scanner binarySymbolId). scanner position: currentToken stopPosition - 1. ^self actionForCurrentToken]]. ^self errorAction! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! createMessageNodeFrom: aCollection ^RBMessageNode receiver: aCollection first selector: (aCollection at: 2) first contents asSymbol arguments: (aCollection at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray1: nodes ^ WriteStream on: Array new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray3: nodes (nodes at: 2) stopPosition + 1 = (nodes at: 3) startPosition ifTrue: [ (nodes at: 1) nextPut: ((nodes at: 2) value , ':') asSymbol ] ifFalse: [ (nodes at: 1) nextPut: (nodes at: 2) value asSymbol; nextPut: #':' ]. scanner position: (nodes at: 3) startPosition. currentToken := nil. ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral10: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral11: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral2: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral3: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral4: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral5: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral6: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral7: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral8: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral9: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBinaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBinaryMethodName1: nodes ^ Array with: (nodes at: 1) value asSymbol with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock1: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (nodes at: 4)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock2: nodes ^ RBBlockNode body: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock3: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode statements: #())! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock4: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode temporaries: (nodes at: 4) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlockArgs1: nodes ^ OrderedCollection with: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlockArgs2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForByteArray1: nodes ^ WriteStream on: ByteArray new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForByteArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2) value; yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascade1: nodes | messages | (nodes at: 2) isEmpty ifTrue: [ ^ nodes at: 1 ]. messages := OrderedCollection new: (nodes at: 2) size + 1. messages add: (nodes at: 1). (nodes at: 2) do: [ :each | messages add: (RBMessageNode receiver: (nodes at: 1) receiver selector: each first contents asSymbol arguments: each last) ]. ^ RBCascadeNode messages: messages! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascadeList1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascadeList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForExpression1: nodes ^ RBAssignmentNode variable: (nodes at: 1) value: (nodes at: 3)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMessage1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMessage2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMethodName1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMethodName2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral10: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral11: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral12: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral13: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral14: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral15: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral16: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral1: nodes ^ true! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral2: nodes ^ false! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral4: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral5: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral6: nodes ^ (nodes at: 1) value at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral7: nodes ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) copyReplaceAll: '''''' with: ''''! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral8: nodes ^ (((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1) copyReplaceAll: '''''' with: '''') asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral9: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod1: nodes ^ RBMethodNode selector: (nodes at: 1) value asSymbol arguments: #() body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod2: nodes ^ RBMethodNode selector: (nodes at: 1) first arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod3: nodes ^ RBMethodNode selector: (nodes at: 1) first contents asSymbol arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode1: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 5); yourself) with: (RBSequenceNode temporaries: (nodes at: 3) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode2: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 3); yourself) with: (RBSequenceNode temporaries: #() statements: (nodes at: 4))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode3: nodes ^ Array with: (nodes at: 1) with: (RBSequenceNode temporaries: #() statements: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForOptionalXXXXX1: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForOptionalXXXXX2: nodes ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimary2: nodes ^ RBLiteralNode value: (nodes at: 1)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend10: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend11: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend2: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend4: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend5: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend6: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend7: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend8: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend9: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitives1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitives2: nodes ^ (nodes at: 1) add: ((nodes at: 2) startPosition to: (nodes at: 4) startPosition); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForSequenceNode1: nodes ^ RBSequenceNode temporaries: (nodes at: 1) statements: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatementList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements3: nodes ^ (nodes at: 1) add: (RBReturnNode value: (nodes at: 4)); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements4: nodes ^ OrderedCollection with: (RBReturnNode value: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries1: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries2: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries3: nodes ^ nodes at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaryVariables1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaryVariables2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForUnaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForVariable1: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForVariable2: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! reduceTable ^#( #(33 0 #reduceFor:) #(33 2 #reduceActionForPrimitiveMessageSend2:) #(33 2 #reduceActionForPrimitiveMessageSend3:) #(33 2 #reduceActionForPrimitiveMessageSend4:) #(33 2 #reduceActionForPrimitiveMessageSend5:) #(33 2 #reduceActionForPrimitiveMessageSend6:) #(33 2 #reduceActionForPrimitiveMessageSend7:) #(33 2 #reduceActionForPrimitiveMessageSend8:) #(33 2 #reduceActionForPrimitiveMessageSend9:) #(33 2 #reduceActionForPrimitiveMessageSend10:) #(33 2 #reduceActionForPrimitiveMessageSend11:) #(34 2 #reduceActionForKeywordMethodName1:) #(34 3 #reduceActionForKeywordMethodName2:) #(35 0 #reduceActionForTemporaryVariables1:) #(35 2 #reduceActionForTemporaryVariables2:) #(36 0 #reduceActionForStatements1:) #(36 2 #liftFirstValue:) #(36 5 #reduceActionForStatements3:) #(36 3 #reduceActionForStatements4:) #(37 0 #reduceActionForTemporaries1:) #(37 1 #reduceActionForTemporaries2:) #(37 3 #reduceActionForTemporaries3:) #(38 1 #reduceFor:) #(38 3 #reduceActionForStatementList2:) #(39 0 #reduceActionForOptionalXXXXX1:) #(39 1 #reduceActionForOptionalXXXXX2:) #(40 3 #reduceActionForExpression1:) #(40 1 #liftFirstValue:) #(41 2 #reduceActionForBlockArgs1:) #(41 3 #reduceActionForBlockArgs2:) #(42 5 #reduceActionForBlock1:) #(42 3 #reduceActionForBlock2:) #(42 3 #reduceActionForBlock3:) #(42 7 #reduceActionForBlock4:) #(43 2 #reduceActionForCascade1:) #(43 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(45 0 #reduceActionForCascadeList1:) #(45 3 #reduceActionForCascadeList2:) #(46 0 #reduceActionForPrimitives1:) #(46 4 #reduceActionForPrimitives2:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(51 1 #reduceActionForUnaryMessage1:) #(52 2 #reduceActionForBinaryMessage1:) #(53 2 #reduceActionForKeywordMessage1:) #(53 3 #reduceActionForKeywordMessage2:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(56 2 #reduceActionForMethod1:) #(56 2 #reduceActionForMethod2:) #(56 2 #reduceActionForMethod3:) #(57 1 #reduceActionForVariable1:) #(57 1 #reduceActionForVariable2:) #(58 2 #reduceActionForBinaryMethodName1:) #(59 6 #reduceActionForMethodSequenceNode1:) #(59 4 #reduceActionForMethodSequenceNode2:) #(59 2 #reduceActionForMethodSequenceNode3:) #(60 0 #reduceActionForByteArray1:) #(60 2 #reduceActionForByteArray2:) #(61 0 #reduceActionForArray1:) #(61 2 #reduceActionForArray2:) #(61 3 #reduceActionForArray3:) #(62 1 #liftFirstValue:) #(62 1 #reduceActionForArrayLiteral2:) #(62 1 #reduceActionForArrayLiteral3:) #(62 1 #reduceActionForArrayLiteral4:) #(62 1 #reduceActionForArrayLiteral5:) #(62 3 #reduceActionForArrayLiteral6:) #(62 3 #reduceActionForArrayLiteral7:) #(62 3 #reduceActionForArrayLiteral8:) #(62 3 #reduceActionForArrayLiteral9:) #(62 1 #reduceActionForArrayLiteral10:) #(62 1 #reduceActionForArrayLiteral11:) #(63 3 #liftSecondValue:) #(63 1 #reduceActionForPrimary2:) #(63 1 #liftFirstValue:) #(63 1 #liftFirstValue:) #(66 2 #reduceActionForSequenceNode1:) #(67 1 #reduceFor:) #(68 1 #reduceActionForLiteral1:) #(68 1 #reduceActionForLiteral2:) #(68 1 #reduceActionForLiteral3:) #(68 1 #reduceActionForLiteral4:) #(68 1 #reduceActionForLiteral5:) #(68 1 #reduceActionForLiteral6:) #(68 1 #reduceActionForLiteral7:) #(68 2 #reduceActionForLiteral8:) #(68 2 #reduceActionForLiteral9:) #(68 2 #reduceActionForLiteral10:) #(68 2 #reduceActionForLiteral11:) #(68 2 #reduceActionForLiteral12:) #(68 4 #reduceActionForLiteral13:) #(68 4 #reduceActionForLiteral14:) #(68 4 #reduceActionForLiteral15:) #(68 4 #reduceActionForLiteral16:) )! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! transitionTable ^#( #[1 0 13 0 20 0 17 0 24 0 21 0 26 0 25 0 34 0 29 0 56 0 33 0 58] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 0 82 0 64 0 49 0 66] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 57 0 59 0 170 0 64] #[1 0 61 0 20 0 65 0 29 0 69 0 57] #[1 0 61 0 20 0 65 0 29 0 73 0 57] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 77 0 24 0 170 0 29 0 170 0 30 0 53 0 46 0 81 0 59 0 170 0 64] #[0 0 0 0 64] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 85 0 59 0 170 0 64] #[1 0 58 0 9 0 58 0 20 0 58 0 29 0 89 0 35] #[0 0 86 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 0 0 0 64] #[1 0 93 0 1 0 185 0 6 0 189 0 9 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 193 0 15 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 197 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 2 0 64] #[0 1 14 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 1 18 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 0 50 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 1 22 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 61 0 20 0 65 0 29 0 201 0 57] #[0 1 10 0 64] #[0 1 6 0 64] #[1 0 205 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 213 0 3 0 217 0 10 0 221 0 17 0 225 0 20 0 229 0 23 0 233 0 24 0 237 0 25 0 241 0 26] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 245 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 1 126 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 130 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 134 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 249 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 253 0 18 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 1 1 0 41 1 5 0 66] #[0 1 138 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 142 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 150 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 146 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 118 0 19 0 64] #[1 1 9 0 5 0 102 0 19 1 13 0 39 0 102 0 64] #[0 0 94 0 5 0 19 0 64] #[0 1 114 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 114 0 4 0 5 0 19 0 64] #[1 0 162 0 2 0 162 0 4 0 162 0 5 0 162 0 19 1 17 0 45 0 162 0 64] #[0 0 150 0 2 0 4 0 5 0 19 0 64] #[1 0 154 0 2 0 154 0 4 0 154 0 5 0 154 0 19 1 21 0 24 1 25 0 26 1 29 0 52 1 33 0 53 0 154 0 64] #[1 0 158 0 2 0 158 0 4 0 158 0 5 0 158 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 41 0 51 1 45 0 52 1 49 0 53 0 158 0 64] #[1 1 110 0 4 1 110 0 5 1 53 0 13 1 110 0 19 1 110 0 20 1 110 0 24 1 110 0 26 1 110 0 64] #[1 0 146 0 4 0 146 0 5 0 146 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 57 0 51 1 61 0 52 1 65 0 53 0 146 0 64] #[0 1 106 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 7 0 6 0 8 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 14 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 24 0 6 0 26 0 6 0 30 1 69 0 33] #[1 0 58 0 9 0 58 0 20 0 58 0 29 1 73 0 35] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 1 77 0 46 0 170 0 64] #[0 1 34 0 64] #[0 0 54 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 0 90 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 62 0 9 0 20 0 29] #[1 1 81 0 20 1 85 0 29] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 1 89 0 61] #[1 1 38 0 19 1 38 0 21 1 93 0 60] #[0 1 158 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 154 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 166 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 170 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 162 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 97 0 4] #[1 1 101 0 5 0 102 0 19 1 105 0 39 0 102 0 64] #[1 0 61 0 20 0 65 0 29 1 109 0 57] #[1 1 113 0 9 1 117 0 15 1 121 0 18 1 125 0 19] #[0 1 129 0 19] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 133 0 16 0 117 0 17 0 106 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 137 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 106 0 64 0 181 0 68] #[0 0 70 0 19 0 64] #[1 1 141 0 2 0 142 0 4 0 142 0 5 0 142 0 19 0 142 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 1 153 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 165 0 49 1 169 0 55 1 157 0 57 1 173 0 63 0 181 0 68] #[0 0 190 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 178 0 2 0 178 0 4 0 178 0 5 0 178 0 19 1 177 0 24 0 178 0 64] #[0 0 222 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 202 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 194 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 182 0 2 0 182 0 4 0 182 0 5 0 182 0 19 1 177 0 24 0 182 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 181 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 206 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 198 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 186 0 2 0 186 0 4 0 186 0 5 0 186 0 19 1 177 0 24 0 186 0 64] #[1 0 93 0 1 1 185 0 2 1 189 0 3 1 193 0 4 1 197 0 5 1 201 0 7 1 205 0 8 1 209 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 213 0 20 0 121 0 21 0 125 0 22 0 129 0 23 1 217 0 24 1 221 0 26 0 133 0 30 1 225 0 68] #[1 1 229 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 233 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 237 0 8] #[0 1 241 0 8] #[1 0 93 0 1 1 245 0 3 1 249 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 37 0 19 2 41 0 21] #[0 1 102 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 106 0 19 0 64] #[0 0 78 0 19 0 64] #[0 0 118 0 9 0 15 0 18 0 19] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 2 45 0 66] #[1 0 58 0 9 0 58 0 20 0 58 0 29 2 49 0 35] #[1 0 61 0 20 0 65 0 29 2 53 0 57] #[0 0 134 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 130 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 57 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 98 0 5 0 19 0 64] #[1 1 37 0 20 1 21 0 24 1 25 0 26 2 61 0 50 2 65 0 51 2 69 0 52 2 73 0 53] #[1 0 238 0 2 0 238 0 4 0 238 0 5 0 238 0 19 0 238 0 24 1 25 0 26 1 29 0 52 0 238 0 64] #[1 0 242 0 2 0 242 0 4 0 242 0 5 0 242 0 19 1 37 0 20 0 242 0 24 1 25 0 26 1 41 0 51 1 45 0 52 0 242 0 64] #[0 0 230 0 2 0 4 0 5 0 19 0 24 0 64] #[0 1 110 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 246 0 2 0 246 0 4 0 246 0 5 0 246 0 19 1 37 0 20 0 246 0 24 1 25 0 26 1 57 0 51 1 61 0 52 0 246 0 64] #[1 0 250 0 2 0 250 0 4 0 250 0 5 0 250 0 19 1 37 0 20 0 250 0 24 0 250 0 26 1 41 0 51 0 250 0 64] #[0 0 226 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 254 0 2 0 254 0 4 0 254 0 5 0 254 0 19 1 37 0 20 0 254 0 24 0 254 0 26 1 57 0 51 0 254 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 2 77 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[0 0 110 0 4 0 5 0 19 0 64] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 174 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 2 81 0 46 0 170 0 64] #[0 1 30 0 64] #[0 1 182 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 186 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 2 85 0 20 2 89 0 29] #[0 1 178 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 2 93 0 61] #[1 1 38 0 19 1 38 0 21 2 97 0 60] #[1 1 62 0 1 1 62 0 3 1 62 0 4 1 62 0 10 1 62 0 11 1 62 0 12 2 101 0 13 1 62 0 14 1 62 0 17 1 62 0 20 1 62 0 21 1 62 0 22 1 62 0 23 1 62 0 24 1 62 0 25 1 62 0 26 1 62 0 29 1 62 0 30 1 62 0 32] #[0 1 70 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 74 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 66 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 98 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 94 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 50 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 58 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 174 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 42 0 19 0 21] #[0 2 105 0 19] #[1 2 109 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[0 0 122 0 9 0 15 0 18 0 19] #[1 1 101 0 5 0 102 0 19 2 113 0 39 0 102 0 64] #[0 0 166 0 2 0 4 0 5 0 19 0 64] #[0 0 210 0 2 0 4 0 5 0 19 0 64] #[0 0 214 0 2 0 4 0 5 0 19 0 64] #[1 0 218 0 2 0 218 0 4 0 218 0 5 0 218 0 19 1 177 0 24 0 218 0 64] #[0 0 234 0 2 0 4 0 5 0 19 0 24 0 64] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 117 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 2 121 0 8] #[0 2 125 0 8] #[1 0 93 0 1 1 245 0 3 2 129 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 133 0 19 2 41 0 21] #[0 1 54 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 0 126 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 74 0 19 0 64] #[0 1 26 0 64] #[0 1 78 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 82 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 86 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 90 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 2 141 0 19] #[0 0 138 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] )! ! !CScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49'! initializeKeywordMap keywordMap := Dictionary new. #(#(#IDENTIFIER 'auto' 65) #(#IDENTIFIER 'break' 48) #(#IDENTIFIER 'case' 38) #(#IDENTIFIER 'char' 73) #(#IDENTIFIER 'const' 40) #(#IDENTIFIER 'continue' 47) #(#IDENTIFIER 'default' 39) #(#IDENTIFIER 'do' 54) #(#IDENTIFIER 'double' 70) #(#IDENTIFIER 'else' 46) #(#IDENTIFIER 'enum' 45) #(#IDENTIFIER 'extern' 58) #(#IDENTIFIER 'float' 67) #(#IDENTIFIER 'for' 49) #(#IDENTIFIER 'goto' 50) #(#IDENTIFIER 'if' 42) #(#IDENTIFIER 'int' 69) #(#IDENTIFIER 'long' 66) #(#IDENTIFIER 'register' 71) #(#IDENTIFIER 'return' 56) #(#IDENTIFIER 'short' 68) #(#IDENTIFIER 'signed' 51) #(#IDENTIFIER 'sizeof' 24) #(#IDENTIFIER 'static' 61) #(#IDENTIFIER 'struct' 43) #(#IDENTIFIER 'switch' 52) #(#IDENTIFIER 'typedef' 57) #(#IDENTIFIER 'union' 44) #(#IDENTIFIER 'unsigned' 55) #(#IDENTIFIER 'void' 72) #(#IDENTIFIER 'volatile' 41) #(#IDENTIFIER 'while' 53)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !CScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19'! needsLineNumbers ^true! ! !CScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment ": [a-fA-F0-9] ; : [uUlL] ; : [0-9] ; : [Ee][\+\-]?+ ; : [fFlL] ; : \.\.\. ; : \/ \* ; : [a-zA-Z_] ; : [0-9] ; : (|)* ; : (0[xX]+?) | (+?) | (+?) | *\.+?? | (L? \' ( (\\ .) | ([^\\\""]) )+ \') ; : L? \"" ( (\\ .) | ([^\\\""]) )* \"" ; : \[ | (\< \:) ; : \] | (\: \>) ; : \{ | (\< \%) ; : \} | (\% \>) ; : \s+ ;"! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! CONSTANTId ^77! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! IDENTIFIER | name | name := outputStream contents. matchActions := (typeNames includes: name) ifTrue: [Array with: self TypeNameId] ifFalse: [Array with: self IDENTIFIERId]. outputStream reset. ^SmaCCToken value: name start: start id: matchActions! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! IDENTIFIERId ^76! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! TypeNameId ^132! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! addTypeName: aString typeNames add: aString! ! !CScanner methodsFor: 'default token handling' stamp: ' 6/1/07 21:19'! comment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^147! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^148! ! !CScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. typeNames := Set new! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan4 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan5 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan6 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(78) ]. currentCharacter = $\ ifTrue: [ self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan6 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan7 self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan8 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $' ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan9 self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan8 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. ((currentCharacter between: $A and: $K) or: [ (currentCharacter between: $M and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ ^ self scan5 ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(30). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(82) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(28). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(25) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(34). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(35). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(23) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(36). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(20) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(22) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(27). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. currentCharacter = $. ifTrue: [ self step. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(74) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(29). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan5 ]. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(16). self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(80) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(60) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(33). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(37) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(17). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(6). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(8) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(14). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $L ifTrue: [ self recordMatch: #IDENTIFIER. self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(80) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(1). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(59) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(31) ]. ^ self reportLastMatch! ! !JavaScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50'! initializeKeywordMap keywordMap := Dictionary new. #(#(99 'abstract' 38) #(99 'boolean' 30) #(99 'break' 81) #(99 'byte' 31) #(99 'case' 41) #(99 'catch' 72) #(99 'char' 26) #(99 'class' 8) #(99 'continue' 80) #(99 'default' 47) #(99 'do' 77) #(99 'double' 25) #(99 'else' 14) #(99 'extends' 11) #(99 'false' 95) #(99 'final' 36) #(99 'finally' 75) #(99 'float' 24) #(99 'for' 78) #(99 'if' 35) #(99 'implements' 10) #(99 'import' 44) #(99 'instanceof' 58) #(99 'int' 33) #(99 'interface' 16) #(99 'long' 27) #(99 'native' 37) #(99 'new' 76) #(99 'null' 98) #(99 'package' 29) #(99 'private' 45) #(99 'protected' 46) #(99 'public' 43) #(99 'return' 74) #(99 'short' 34) #(99 'static' 39) #(99 'strictfp' 7) #(99 'super' 22) #(99 'switch' 17) #(99 'synchronized' 40) #(99 'this' 23) #(99 'throw' 73) #(99 'throws' 20) #(99 'transient' 18) #(99 'true' 95) #(99 'try' 79) #(99 'void' 9) #(99 'volatile' 12) #(99 'while' 57)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !JavaScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! scannerDefinitionComment ": 0 | [1-9] [0-9]* ; : 0[xX][0-9a-fA-F]+ ; : 0[0-7]+ ; : [eE] [\-\+]? [0-9]+ ; : [fFdD] ; : \\ ([btnfr\""\'\\] | ([0-3] [0-7]{0,2} | [4-7][0-7]?)) ; : ( | | ) [lL]? ; : [0-9]+ \. [0-9]* ? ? | \. [0-9]+ ? ? | [0-9]+ ? | [0-9]+ ; : true | false ; : \' ([^\\\'] | ) \' ; : \"" ([^\\\""] | )* \"" ; : null ; : [a-zA-Z_] \w* ; : \r | \n | \r\n ; : \s+ ; : \/\/ [^\r\n]* ; : \/ \* ;"! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! emptySymbolTokenId ^255! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! errorTokenId ^256! ! !JavaScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! multipleLineComment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan1 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan3 [ self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan4 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan5 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(97) ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ (currentCharacter between: $0 and: $7) or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan6 self step. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan7 self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(99). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(91). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(51) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan5 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(85). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(67) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(50). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(52) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(61) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self step. (currentCharacter <= $& or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan6 ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ]) ifTrue: [ ^ self scan6 ]. (currentCharacter between: $0 and: $3) ifTrue: [ self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan7 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch ]. (currentCharacter between: $4 and: $7) ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(42). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(68) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(89). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(70) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(4) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(90). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(87) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(69) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(28). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(88). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #multipleLineComment ]. currentCharacter = $/ ifTrue: [ [ self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = Character cr ifTrue: [ self recordMatch: #comment. self step. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(66) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $7) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $7 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(71). self step. currentCharacter = $< ifTrue: [ self recordMatch: #(83). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(54) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(65) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(59). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(55) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(84). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(86). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(60) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(56) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(6) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(48). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(49). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(53) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(1) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(92) ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner commentStamp: 'jmb' prior: 83161216! SmaCCGrammarScanner is the scanner for the grammar parser! !SmaCCGrammarScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49'! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'error' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !SmaCCGrammarScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19'! needsLineNumbers ^true! ! !SmaCCGrammarScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment " : [a-zA-Z_] \w* ; : \s+ ; : \< \> ; : ; : (\"" [^\""]* \"") + ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [^\}]+ \} ; : \' \' ; : \: (\: \=)? ;"! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^43! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^44! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(12) ]. currentCharacter = $i ifTrue: [ self step. currentCharacter = $d ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $l ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $f ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(6) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $n ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $n ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $c ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $r ifTrue: [ self step. currentCharacter = $i ifTrue: [ self step. currentCharacter = $g ifTrue: [ self step. currentCharacter = $h ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $r ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(1) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ self recordMatch: #(21). self step. currentCharacter = $" ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan2 ]. currentCharacter = $# ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(24) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(17) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(14) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(16) ]. currentCharacter = $/ ifTrue: [ self step. currentCharacter = $* ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. currentCharacter = $: ifTrue: [ self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(25) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(7) ]. currentCharacter = $< ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(19) ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = ${ ifTrue: [ self step. currentCharacter ~= $} ifTrue: [ [ self step. currentCharacter ~= $} ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(23) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner commentStamp: 'jmb' prior: 83161326! SmaCCScannerScanner is the scanner for the scanner definition! !SmaCCScannerScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment " : \\ [^cx] | \\ c [A-Z] | \\ x [0-9A-Fa-f]{1,4} ; : \[ ([^\]\\] | )+ \] ; : [\ \t\v\r\n]+ ; : \< [a-zA-Z_] \w* \> ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [0-9]* \, [0-9]* \} ; : [a-zA-Z_] \w* ; : [^\ \t\v\\\r\n\{\(\[\.] ; : \. ;"! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^30! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^31! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan1 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 [ self step. currentCharacter <= $[ or: [ currentCharacter >= $^ ] ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan4 self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. (currentCharacter <= Character backspace or: [ currentCharacter = Character newPage or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ (currentCharacter between: $!! and: $") or: [ currentCharacter = $$ or: [ (currentCharacter between: $& and: $') or: [ (currentCharacter between: $, and: $-) or: [ (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $= and: $>) or: [ currentCharacter = $@ or: [ (currentCharacter between: $] and: $^) or: [ currentCharacter = $` or: [ currentCharacter >= $} ] ] ] ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(18) ]. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ self recordMatch: #(17 18). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #(17). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ self recordMatch: #comment. self step. (currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ]) ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $x ifTrue: [ self step. currentCharacter = $c ifTrue: [ self step. currentCharacter = $l ifTrue: [ self step. currentCharacter = $u ifTrue: [ self step. currentCharacter = $d ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(1 18) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(4 18) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(3 18) ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $* ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(10 18) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(9 18) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(14) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(6 18) ]. currentCharacter = $[ ifTrue: [ self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $, ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(16) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(5 18) ]. ^ self reportLastMatch! ! !StScanner class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! frequencyTable ^#(0.0 1.31372e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0481767 0.0 0.0 0.0 0.0252514 0.0 0.0 2.62743e-7 1.31372e-7 5.25487e-7 1.31372e-7 1.31372e-7 0.0 1.31372e-7 0.0 2.62743e-7 0.0 1.31372e-7 7.8823e-7 2.62743e-7 2.62743e-7 1.31372e-7 5.25487e-7 0.106011 5.13007e-5 0.004554 0.00655584 2.41133e-4 3.60615e-5 1.93248e-4 0.00410241 0.00463893 0.0046369 2.82712e-4 4.64268e-4 0.0011675 9.75895e-4 0.00982753 2.26945e-4 0.00795055 0.00590903 0.0036363 0.00220212 0.00180485 0.00224265 0.00183191 0.00138545 0.00146217 0.00115246 0.0248349 0.00129723 7.50395e-4 0.00496762 8.97532e-4 1.44378e-4 0.00164497 0.00403659 0.00332443 0.00587547 0.00266882 0.00223293 0.00382922 9.91266e-4 9.99673e-4 0.00418163 3.27773e-5 6.31044e-4 0.00271013 0.00248917 0.00292348 0.00278226 0.00359742 7.08751e-4 0.00239287 0.00749351 0.00486778 0.00145908 0.00167453 0.00112251 2.2458e-4 2.32856e-4 4.40752e-5 0.00467815 1.22701e-4 0.00470173 0.00298378 7.73451e-4 2.634e-4 0.0515694 0.00918972 0.0257636 0.0226939 0.09244 0.0167193 0.0108988 0.0138365 0.042864 9.52379e-4 0.00366494 0.0402202 0.0159142 0.0440905 0.0418992 0.0154463 5.66869e-4 0.043972 0.0443068 0.0543899 0.0180997 0.00593537 0.00725816 0.00494884 0.00808567 0.00128285 7.45009e-4 0.00281083 7.45206e-4 1.08907e-4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 3.28429e-7 0.0 0.0 1.97058e-7 0.0 0.0 0.0 0.0 3.94115e-7 6.56859e-8 0.0 2.62743e-7 1.31372e-7 0.0 1.31372e-7 1.31372e-7 0.0 0.0 1.97058e-7 1.31372e-7 6.56859e-8 1.31372e-7 0.0 0.0 7.8823e-7 0.0 0.0 1.31372e-7 1.31372e-7 4.59801e-7 7.8823e-7 0.0 9.85288e-7 5.25487e-7 1.31372e-7 6.56859e-8 1.05097e-6 0.0 2.62743e-7 0.0 1.97058e-7 4.59801e-7 1.97058e-7 5.25487e-7 2.62743e-7 0.0 1.51078e-6 5.91173e-7 1.11666e-6 0.0 1.97058e-7 8.53916e-7 1.57646e-6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.25487e-7 0.0 0.0 0.0 0.0 0.0 0.0 7.8823e-7 0.0 2.62743e-7 0.0 0.0 3.28429e-7 1.31372e-7 0.0 2.62743e-7 0.0 3.28429e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.62743e-7 0.0 5.25487e-7 0.0 0.0 1.31372e-7 0.0 0.0 0.0 0.0)! ! !StScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50'! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'false' 12) #(20 'nil' 14) #(20 'true' 11) #(26 '||' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !StScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! scannerDefinitionComment " : ( | \_) ( | [\d\_]) *; : \d ; : \- ; : \' [^\']* \' (\' [^\']* \')* ; : \: ; : \: ( \: )+ ; : [\~\-\!!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!!\@\%\&\*\+\=\\\|\?\/\>\<\,]? ; : + ; : \"" [^\""]* \"" ; : (\. )+ ; : \$ . ; : \: \= ; : . ; # For VW literal arrays that handle #(;) -> #(#';')"! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! binarySymbolId ^26! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! emptySymbolTokenId ^64! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! errorTokenId ^65! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! nameId ^20! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06'! negativeNumber stream skip: -2. ^self scanNumber: self negativeNumberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! negativeNumberId ^22! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06'! number stream skip: -1. ^self scanNumber: self numberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! numberId ^21! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan1 [ self step. currentCharacter ~= $' ] whileTrue. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan2 self recordMatch: #(23). self step. currentCharacter = $' ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan3 self recordMatch: #(24). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #variableAssignment ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan4 [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan5 self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(29). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(20 32). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ self recordMatch: #whitespace. self step. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #number ]. currentCharacter = $: ifTrue: [ self recordMatch: #(18 32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(5 32) ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ currentCharacter = $= or: [ (currentCharacter between: $? and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ ^ self recordAndReportMatch: #(1 32) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(19 32) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(17 32) ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(10 32) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(4 32) ]. currentCharacter = $" ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $" ifTrue: [ [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $' ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $^ ifTrue: [ ^ self recordAndReportMatch: #(16 32) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(9 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(2 32) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #negativeNumber ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(7 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $< ifTrue: [ self recordMatch: #(6 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(8 32) ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3 32) ]. (currentCharacter <= Character backspace or: [ currentCharacter = Character pageUp or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ currentCharacter = $` or: [ (currentCharacter between: $ and: $©) or: [ (currentCharacter between: $« and: $´) or: [ (currentCharacter between: $¶ and: $¹) or: [ (currentCharacter between: $» and: $¿) or: [ currentCharacter = $× or: [ currentCharacter = $÷ ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $$ ifTrue: [ self recordMatch: #(32). self step. currentCharacter <= $ÿ ifTrue: [ ^ self recordAndReportMatch: #(30) ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! scanNumber: id | number | number := Number readFrom: stream. outputStream reset. matchActions := Array with: id. ^self createTokenFor: number! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! variableAssignment | token | outputStream skip: -2. stream skip: -2. matchActions := Array with: self nameId. token := self createTokenFor: outputStream contents. outputStream reset. ^token! ! !SmaCCItemSet commentStamp: 'jmb' prior: 83161433! SmaCCItemSet represents a LALR(1) or a LR(1) item set. Instance Variables: type #LALR1 or #LR1 ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCItemSet self class = aSmaCCItemSet class ifTrue: [type == #LALR1 ifTrue: [^self isLALREqualTo: aSmaCCItemSet] ifFalse: [^self isLREqualTo: aSmaCCItemSet]]. ^false! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! action: aSmaCCSymbol prefer: aClass | action actionItem eachAction | action := SmaCCRejectAction new. self do: [:each | eachAction := each action: aSmaCCSymbol. action class = SmaCCRejectAction ifTrue: [action := eachAction. actionItem := each] ifFalse: [(eachAction = action or: [eachAction class = SmaCCRejectAction]) ifFalse: [eachAction class = SmaCCShiftAction | (action class = SmaCCShiftAction) ifTrue: ["Shift/Reduce conflict -- check precedence" (aSmaCCSymbol precedence isNil or: [each precedence isNil or: [actionItem precedence isNil]]) ifTrue: ["No precedence, choose shift" eachAction class = SmaCCShiftAction ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict'. action := eachAction. actionItem := each] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict']] ifFalse: [(each precedence > actionItem precedence or: [each precedence = actionItem precedence and: [eachAction class = aClass]]) ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict (handled by precedence rules)'. action := eachAction. actionItem := each] ifFalse: [(each precedence = actionItem precedence and: [SmaCCRejectAction = aClass]) ifTrue: [self raiseXReduceNotificationWithNoPreferredItem: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)'. ^aClass new] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)']]]] ifFalse: ["Reduce/Reduce conflict -- just pick one and proceed" self raiseXReduceNotification: actionItem with: each type: 'Reduce/Reduce Conflict']]]]. ^action! ! !SmaCCItemSet methodsFor: 'adding' stamp: 'lr 1/6/2007 22:24'! add: aSmaCCLR1Item | index item | aSmaCCLR1Item == nil ifTrue: [^aSmaCCLR1Item]. index := self findElementOrNil: aSmaCCLR1Item. item := array at: index. item == nil ifTrue: [self atNewIndex: index put: aSmaCCLR1Item. self performClosureOn: aSmaCCLR1Item] ifFalse: [item mergeWith: aSmaCCLR1Item]. ^aSmaCCLR1Item! ! !SmaCCItemSet methodsFor: 'copying' stamp: 'lr 11/25/2009 18:30'! copyEmpty: anInteger ^ (Set new: anInteger) type: type; yourself! ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^self inject: self class hash into: [:sum :each | sum bitXor: each hash]! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:37'! initialize super initialize. type := #LALR1! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLALREqualTo: aSmaCCItemSet ^aSmaCCItemSet size = self size and: [self allSatisfy: [:each | aSmaCCItemSet includes: each]]! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLREqualTo: anItemSet ^anItemSet size = self size and: [self allSatisfy: [:each | | item | (item := anItemSet itemFor: each) notNil and: [each isLR1EqualTo: item]]]! ! !SmaCCItemSet methodsFor: 'private' stamp: 'lr 1/6/2007 22:24'! itemFor: anObject ^array at: (self findElementOrNil: anObject)! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCItemSet self == aSmaCCItemSet ifTrue: [^self]. aSmaCCItemSet do: [:each | self add: each]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! moveOn: aSmaCCSymbol | anItemSet | anItemSet := self class new. anItemSet type: type. self do: [:each | each nextSymbol == aSmaCCSymbol ifTrue: [anItemSet add: each moveNext]]. ^anItemSet! ! !SmaCCItemSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! performClosureOn: aSmaCCLR1Item | nextSymbol rest first followers | nextSymbol := aSmaCCLR1Item nextSymbol. nextSymbol isTerminal ifTrue: [^self]. rest := aSmaCCLR1Item rest. first := rest firstTerminals. followers := SmaCCSymbolSet new. (first includes: SmaCCSymbol empty) ifTrue: [first remove: SmaCCSymbol empty. followers baseOn: aSmaCCLR1Item followers]. followers addAll: first. nextSymbol productionsDo: [:each | self add: (SmaCCLR1Item symbol: nextSymbol rhs: each follow: followers)]! ! !SmaCCItemSet methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream self do: [:each | aStream tab; nextPutAll: each printString; cr]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:06'! raiseXReduceNotification: preferredSmaCCLR1Item with: otherSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: preferredSmaCCLR1Item printString; nextPutAll: ' *****'; cr; nextPutAll: otherSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:07'! raiseXReduceNotificationWithNoPreferredItem: firstSmaCCLR1Item with: secondSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: firstSmaCCLR1Item printString; cr; nextPutAll: secondSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! type: aSmaCCSymbol type := aSmaCCSymbol! ! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/18/2003 13:44'! owner: aSmaCCParserGenerator ^ self owner: aSmaCCParserGenerator ownerAcceptSelector: nil! ! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/17/2003 11:26'! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ^ self new owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/18/2003 12:39'! contents: aStringOrText notifying: aRequestor | result | self ownerAcceptSelector notNil ifTrue: [result := (self owner perform: self ownerAcceptSelector with: aStringOrText with: aRequestor)] ifFalse: [result := true]. result ifTrue: [self acceptContents: aStringOrText. ^ true]. ^ false! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:13'! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | selections labelsString linesArray | selections := #(#find #findAgain #setSearchString #again #undo #copySelection #cut #paste #pasteRecent #accept #cancel #saveContentsInFile #readContentsFromFile ). labelsString := 'find...(f)\find again (g)\set search string (h)\do again (j)\undo (z)\copy (c)\cut (x)\paste (v)\paste...\accept (s)\cancel (l)\save contents in file...\read contents from file...' withCRs. linesArray := #(3 5 9 11 14). ^ aMenu labels: labelsString lines: linesArray selections: selections! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:30'! contentsMorph contentsMorph isNil ifTrue: [ contentsMorph := PluggableTextMorph on: self text: #contents accept: #contents:notifying: readSelection: nil menu: #contentsMenu:shifted:]. ^ contentsMorph ! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/18/2003 10:25'! hasUnacceptedEdits ^ self contentsMorph hasUnacceptedEdits! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39'! hasUnacceptedEdits: aBoolean ^ self contentsMorph hasUnacceptedEdits: aBoolean! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39'! okToChange ^ super okToChange! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23'! owner ^owner! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23'! owner: anObject owner := anObject! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 12:30'! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol self owner: aSmaCCParserGenerator. self ownerAcceptSelector: aSymbol. ! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26'! ownerAcceptSelector ^ownerAcceptSelector! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26'! ownerAcceptSelector: anObject ownerAcceptSelector := anObject! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/17/2003 11:16'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 14:31'! readContentsFromFile | result | (result := UIManager default chooseFileMatching: nil label: 'Choose file to open' translated) ifNotNil: [ result asFileReference exists ifFalse: [ ^ UIManager default inform: ' ' , result , ' doesn''t exists ' ]. self acceptContents: result asFileReference readStream contents. self changed: #contents ]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:07'! saveContentsInFile | result | (result := UITheme current fileSaveIn: World title: 'Choose file to open' translated extensions: nil path: FileSystem workingDirectory) ifNotNil: [ result asFileReference exists ifTrue: [ ^ UIManager default inform: ' ' , result , ' already exists ' ]. result asFileReference writeStream nextPutAll: contents. self changed: #contents ]! ! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 22:45'! bootstrap | scanner grammer | scanner := self buildScanner: SmaCCScannerScanner andParser: SmaCCScannerParser. grammer := self buildScanner: SmaCCGrammarScanner andParser: SmaCCGrammarParser. scanner compileChanges. grammer compileChanges! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/22/2007 13:12'! buildScanner: aScannerClass andParser: aParserClass | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: (self definitionFrom: aScannerClass selector: #scannerDefinitionComment) andParser: (self definitionFrom: aParserClass selector: #parserDefinitionComment). parserCompiler scannerClass: aScannerClass; parserClass: aParserClass. [ parserCompiler createChanges; compileDefinitionComments ] on: SmaCCCompilationNotification do: [ :notification | Transcript show: notification messageText; cr. notification resume ]. ^ parserCompiler! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50'! definitionFrom: aClass selector: aSymbol | source input output | source := aClass class sourceCodeAt: aSymbol. input := ReadStream on: source. output := WriteStream with: String new. input upTo: $". [ input atEnd ] whileFalse: [ (input peekFor: $") ifTrue: [ output nextPut: $" ]. output nextPutAll: (input upTo: $") ]. ^ output contents! ! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 11:54'! examples | class | #( CParser JavaParser StParser ) do: [ :each | class := Smalltalk classNamed: each. (self buildScanner: class scannerClass andParser: class) compileChanges ]! ! !SmaCCAction commentStamp: 'jmb' prior: 83161585! SmaCCAction is an abstract class that represents an action in the LR parsing table. Subclasses must implement the following messages: accessing id! !SmaCCAcceptAction commentStamp: 'jmb' prior: 83161786! SmaCCAcceptAction represents an accept action in the parser (i.e., we have parsed a valid string).! !SmaCCAcceptAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r00! ! !SmaCCAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^self subclassResponsibility! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isReduce ^false! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isShift ^false! ! !SmaCCReduceAction commentStamp: 'jmb' prior: 83161935! SmaCCReduceAction represents a reduce action in our parser's table. Instance Variables: rhs the rhs that is being reduced symbol the symbol that has the rhs! !SmaCCReduceAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS; yourself! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r10! ! !SmaCCReduceAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isReduce ^true! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! rhs ^rhs! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^rhs size! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! symbol ^symbol! ! !SmaCCReduceAction methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS rhs := aSmaCCRHS. symbol := aSmaCCSymbol! ! !SmaCCRejectAction commentStamp: 'jmb' prior: 83162181! SmaCCRejectAction represents a reject action in the parsing tables.! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize Reject := self basicNew! ! !SmaCCRejectAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^Reject! ! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! releaseObjects Reject := nil! ! !SmaCCRejectAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r11! ! !SmaCCShiftAction commentStamp: 'jmb' prior: 83162298! SmaCCShiftAction represents a shift action in the parser's tables.! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize Shift := self basicNew! ! !SmaCCShiftAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^Shift! ! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! releaseObjects Shift := nil! ! !SmaCCShiftAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r01! ! !SmaCCShiftAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isShift ^true! ! !SmaCCEdge commentStamp: '' prior: 83162416! SmaCCEdge represents a transition in a Finite Automata (directed graph). It is labeled with the characters or states (possibly none, indicating an epsilon transition) that cause the transition. Instance Variables: toNode The node that this is transitioning to. transitionObjects The characters or symbols that cause the transition. Note that there are no duplicates and all characters/symbols are sorted.! !SmaCCCharacterEdge commentStamp: '' prior: 83162940! SmaCCCharacterEdge is a SmaCCEdge for Character transitions! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/6/2007 22:50'! generateCharacterSetFor: aSelector | stream | stream := WriteStream with: String new. 0 to: SmaCCGrammar maximumCharacterValue do: [:i | | ch | ch := Character value: i. (ch perform: aSelector) ifTrue: [stream nextPut: ch]]. ^stream contents! ! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/8/2007 23:30'! initializeIsExpressions "Creates a map from sets of characters to selectors that start with 'is' on Character. This allows generated scanners to take full advantage of selectors that are already implemented on Character" IsExpressions := Dictionary new. "selectors := Character selectors select: [:each | ('is*' match: each) and: [each numArgs = 0 and: [(each at: 3) isUppercase]]]. selectors do: [:sel | | string | string := self generateCharacterSetFor: sel. string isEmpty ifFalse: [IsExpressions at: string put: sel]]"! ! !SmaCCCharacterEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^self class = aSmaCCEdge class and: [self transitionObjects <= aSmaCCEdge transitionObjects]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! closestIsExpression "Attempts to find the #is selector that most closely matches the character set that this edge transitions on." | expressions closest | expressions := IsExpressions keys select: [:each | each allSatisfy: [:ch | self includes: ch]]. expressions isEmpty ifTrue: [^nil]. closest := IsExpressions at: (expressions asSortedCollection: [:a :b | a size > b size]) first. (self minMaxPairsWithout: closest) size <= (self minMaxPairsWithout: nil) size ifFalse: [^nil]. ^closest! ! !SmaCCCharacterEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! does: aSequenceableCollection include: anObject | start stop mid | (anObject isKindOf: Character) ifFalse: [^false]. start := 1. stop := aSequenceableCollection size. stop = 0 ifTrue: [^false]. [mid := (start + stop) // 2. mid = start] whileFalse: [(aSequenceableCollection at: mid) asInteger < anObject asInteger ifTrue: [start := mid] ifFalse: [stop := mid]]. ^(aSequenceableCollection at: start) = anObject or: [(aSequenceableCollection at: stop) = anObject]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^self transitionObjects inject: 0 into: [:sum :each | sum + (frequencyTable at: each asInteger \\ frequencyTable size + 1)]! ! !SmaCCCharacterEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! edgeLabel ^transitionObjects! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! expression | stream isSelector | stream := WriteStream with: String new. stream nextPut: $(. transitionObjects size = SmaCCGrammar maximumCharacterValue ifTrue: [self outputInvertedMatchOn: stream] ifFalse: [isSelector := self outputClosestIsMethodOn: stream. self outputExpressionOn: stream without: isSelector]. stream nextPut: $). ^stream contents! ! !SmaCCCharacterEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isCharacterTransition ^true! ! !SmaCCCharacterEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCEdge super mergeWith: aSmaCCEdge. transitionObjects := String withAll: (transitionObjects asSortedCollection: [:a :b | a asInteger < b asInteger])! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! minMaxPairsWithout: aSelector "Converts a list of characters into a collection of pairs representing the minimum and maximum of each sequence. The list is first filtered to include only those characters that fail aSelector." | start last pairs charsLeft | charsLeft := aSelector isNil ifTrue: [transitionObjects] ifFalse: [transitionObjects reject: [:ch | ch perform: aSelector]]. pairs := OrderedCollection new. charsLeft isEmpty ifTrue: [^pairs]. last := charsLeft first. start := nil. charsLeft do: [:each | last asInteger + 1 = each asInteger ifFalse: [start notNil ifTrue: [pairs add: (Array with: start with: last)]. start := each]. last := each]. pairs add: (Array with: start with: last). ^pairs! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputClosestIsMethodOn: aStream | expr | expr := self closestIsExpression. expr isNil ifFalse: [aStream nextPutAll: 'currentCharacter ' , expr]. ^expr! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputExpressionFor: aPair on: aStream aPair first = aPair last ifTrue: [^self outputMatchSingleCharacter: aPair first on: aStream]. aPair first = (Character value: 0) ifTrue: [^self outputMatchLessThan: aPair last on: aStream]. aPair last = (Character value: SmaCCGrammar maximumCharacterValue) ifTrue: [^self outputMatchGreaterThan: aPair first on: aStream]. self outputMatchRange: aPair on: aStream! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputExpressionOn: aStream without: aSelector | pairs | pairs := self minMaxPairsWithout: aSelector. pairs isEmpty ifTrue: [^self]. aSelector notNil ifTrue: [aStream nextPutAll: ' or: [']. pairs do: [:each | self outputExpressionFor: each on: aStream] separatedBy: [aStream nextPutAll: ' or: [']. aStream next: pairs size - 1 put: $]. aSelector notNil ifTrue: [aStream nextPut: $]]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16'! outputInvertedMatchOn: aStream | char | char := Character value: ((0 to: SmaCCGrammar maximumCharacterValue) detect: [:each | (transitionObjects includes: (Character value: each)) not]). aStream nextPutAll: 'currentCharacter ~= '; nextPutAll: char storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchGreaterThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter >= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchLessThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter <= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchRange: aPair on: aStream aStream nextPutAll: '(currentCharacter between: '; nextPutAll: aPair first storeString; nextPutAll: ' and: '; nextPutAll: aPair last storeString; nextPutAll: ')'! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16'! outputMatchSingleCharacter: aCharacter on: aStream aStream nextPutAll: 'currentCharacter = '; nextPutAll: aCharacter storeString! ! !SmaCCEdge class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! to: aSmaCCNode on: aCollectionOrNil | edge | edge := self new. edge to: aSmaCCNode on: aCollectionOrNil. ^edge! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^true! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCEdge self class = aSmaCCEdge class ifFalse: [^false]. ^self to = aSmaCCEdge to and: [self transitionObjects = aSmaCCEdge transitionObjects]! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! canMergeWith: aSmaCCEdge ^self class = aSmaCCEdge class! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! does: aSequenceableCollection include: anObject ^aSequenceableCollection includes: anObject! ! !SmaCCEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^0! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! edgeLabel ^transitionObjects isNil ifTrue: ['epsilon'] ifFalse: [transitionObjects inject: '' into: [:sum :each | sum , each printString]]! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^(self to hash bitShift: 14) bitXor: transitionObjects hash! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includes: anObject ^self does: transitionObjects include: anObject! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isCharacterTransition ^false! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEmpty ^transitionObjects isEmpty! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEpsilonTransition ^transitionObjects isNil! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCEdge transitionObjects := Array withAll: (transitionObjects , aSmaCCEdge transitionObjects) asSet asSortedCollection! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: '---'; nextPutAll: self edgeLabel; nextPutAll: '--->'; nextPutAll: toNode printString! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! remove: aCollection transitionObjects := transitionObjects reject: [:each | self does: aCollection include: each]! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! to ^toNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! to: aSmaCCNode toNode := aSmaCCNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! to: aSmaCCNode on: aStringOrNil toNode := aSmaCCNode. transitionObjects := aStringOrNil! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! transitionObjects ^transitionObjects! ! !SmaCCStateEdge commentStamp: '' prior: 83163056! SmaCCStateEdge is a SmaCCEdge for Symbol (state) transitions ! !SmaCCStateEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^self class ~= aSmaCCEdge class or: [self transitionObjects first <= aSmaCCEdge transitionObjects first]! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^SmallInteger maxVal * transitionObjects size! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! expression ^transitionObjects size = 1 ifTrue: ['state == #' , transitionObjects asArray first] ifFalse: ['(' , transitionObjects asArray storeString , ' includes: state)']! ! !SmaCCGrammar commentStamp: '' prior: 83163172! SmaCCGrammar represents a LR(1) or a LALR(1) grammar. Instance Variables: otherStartingSymbols other starting productions. The first production in the grammar is the defaulting starting position, but this can list other starting positions. shiftReduceTable when we have a shift/reduce conflict how should we handle it. This table contains the left/right associative rules. Left is a reduce action and right is a shift action. symbols all symbols in our grammar -- includes both terminal and non-terminal tokens the tokens for our scanner type the type of grammar (LALR1 or LR1) ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! allCharacters ^String withAll: ((0 to: self maximumCharacterValue) collect: [:each | Character value: each])! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! ignoreCase ^IgnoreCase! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! ignoreCase: aBoolean IgnoreCase := aBoolean! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! implicitToken: aString | symbol node | symbol := (aString copyFrom: 2 to: aString size - 1) asSymbol. (Character canUnderstand: symbol) ifFalse: [^nil]. node := SmaCCCharacterRENode characters: (self allCharacters select: [:each | each perform: symbol]). node position: SmallInteger maxVal. "Implicit nodes have least precedence" ^node! ! !SmaCCGrammar class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize IgnoreCase := false. self maximumCharacterValue: 255! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maximumCharacterValue ^MaximumCharacterValue! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maximumCharacterValue: anInteger MaximumCharacterValue := anInteger. SmaCCCharacterEdge initializeIsExpressions! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addEmptySymbol self addSymbol: SmaCCSymbol empty. self addSymbol: SmaCCSymbol error! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addStartingSymbol: aSmaCCSymbol (otherStartingSymbols includes: aSmaCCSymbol) ifFalse: [otherStartingSymbols add: aSmaCCSymbol]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! addSymbol: aSmaCCSymbol ^symbols add: aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! allStartingSymbols "Return all starting symbols with the default starting symbol listed first." | startingSymbols default | default := self startSymbol. startingSymbols := otherStartingSymbols copy. startingSymbols remove: default ifAbsent: []. startingSymbols := startingSymbols collect: [:each | (SmaCCStartingSymbol name: 'B e g i n' , each name) addProduction: ((SmaCCRHS new) add: each; yourself); yourself]. startingSymbols addFirst: default. ^startingSymbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! calculateFirstSets | changed | changed := true. [changed] whileTrue: [changed := false. self symbols do: [:each | changed := changed | each calculateFirstTerminals]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! emptySymbols ^self symbols select: [:each | each isTerminal not and: [each isEmpty]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! initialItemSetFor: aSmaCCSymbol ^(aSmaCCSymbol asLRItemSet) type: type; yourself! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize type := #LALR1. symbols := OrderedCollection new. shiftReduceTable := Dictionary new. otherStartingSymbols := OrderedCollection new! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! keywordRegularExpressionFor: aString | regularExpressionString regex | regularExpressionString := (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '""' with: '"'. regex := regularExpressionString inject: nil into: [:sum :each | sum isNil ifTrue: [SmaCCCharacterRENode characters: (String with: each)] ifFalse: [sum , (SmaCCCharacterRENode characters: (String with: each))]]. regex addStates: scannerDefinition states. ^regex! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! keywordTerminalNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols addFirst: ((SmaCCTerminalSymbol name: aString) regularExpression: (self keywordRegularExpressionFor: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! leftPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCReduceAction! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeGroupFor: aSmaCCRHSCollection | symbol name | name := aSmaCCRHSCollection inject: '' into: [:sum :each | sum , ' | ' , each printString]. symbol := self nonTerminalSymbolNamed: 'Group: ' , name. symbol isEmpty ifTrue: [(aSmaCCRHSCollection allSatisfy: [:each | each size = 1]) ifTrue: [aSmaCCRHSCollection do: [:each | each reduceAction: '''1''']]. aSmaCCRHSCollection do: [:each | symbol addProduction: each]]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeOptionalSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Optional: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'nil'; yourself); addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: '''1'''; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeRepeatMultipleSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat Multiple: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: 'OrderedCollection with: ''1'''; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeRepeatSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'OrderedCollection new'; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeTokenIdMethodFor: aString | token | token := (scannerDefinition includesTokenNamed: aString) ifTrue: [self terminalSymbolNamed: aString] ifFalse: [symbols detect: [:each | each name = aString] ifNone: [symbols add: (SmaCCTerminalSymbol name: aString)]]. token createIdMethod: true! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! nonAssociativePrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCRejectAction! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! nonTerminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [self addSymbol: (SmaCCNonTerminalSymbol name: aString)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! preferredActionFor: aSmaCCSymbol ^shiftReduceTable at: aSmaCCSymbol ifAbsent: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! reduceTableIndexFor: aSmaCCSymbol rhs: aSmaCCRHS | index | index := 0. self symbols do: [:each | each = aSmaCCSymbol ifTrue: [^index + (each positionOf: aSmaCCRHS)]. index := index + each size]. ^0! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! rightPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCShiftAction! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! scannerDefinition: aSmaCCScannerDefinition scannerDefinition := aSmaCCScannerDefinition! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! setOperatorPrecedenceFor: aSmaCCSymbol to: anInteger aSmaCCSymbol precedence: anInteger! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! setStartSymbolIfNone: aSmaCCSymbol | startSymbol | self startSymbol notNil ifTrue: [^self]. startSymbol := SmaCCStartingSymbol name: 'B e g i n'. self addSymbol: startSymbol. startSymbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; yourself)! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! startSymbol ^symbols detect: [:each | each isStartingSymbol] ifNone: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols ^symbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols: aCollection symbols := aCollection! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! terminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! terminalSymbolNamed: aString ifAbsent: aBlock ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString ifAbsentPut: [| node | node := self class implicitToken: aString. node isNil ifTrue: [^aBlock value]. node addStates: scannerDefinition nonExcludeStates. node]); yourself)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokens ^scannerDefinition tokens! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! type: aSmaCCSymbol type := aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! unusedSymbols | nonTerminals problemSymbols todo symbol | nonTerminals := self symbols reject: [:each | each isTerminal]. problemSymbols := nonTerminals asSet. problemSymbols remove: self startSymbol. todo := OrderedCollection with: self startSymbol. [todo isEmpty] whileFalse: [symbol := todo removeFirst. symbol productionsDo: [:rhs | rhs do: [:each | each isTerminal ifFalse: [(problemSymbols includes: each) ifTrue: [todo add: each. problemSymbols remove: each]]]]]. ^problemSymbols! ! !SmaCCGrammarCompiler commentStamp: 'jmb' prior: 83163999! SmaCCGrammarCompiler compiles a SmaCCGrammar. Instance Variables: actions the action table for the parser. It contains the action (shift/reduce/accept/reject) for each possible state/symbol pair grammar our grammar itemSets the item sets for our grammar model where we are compiling our changes into parserClass the parser class for our changes parserDefinitionString the definition of our parser scannerCompiler a compiler for the scanner shiftTable a table mapping a state/symbol pair to the new state that is aquired by shifting the symbol startingStateMap the state for SmaCCSymbol's starting item set ! !SmaCCGrammarCompiler class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^self basicNew initialize! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! actionForState: anInteger on: aSmaCCSymbol | action newStateIndex | action := (itemSets at: anInteger) action: aSmaCCSymbol prefer: (grammar preferredActionFor: aSmaCCSymbol). action isShift ifTrue: [newStateIndex := shiftTable at: (Array with: anInteger with: aSmaCCSymbol). ^(newStateIndex bitShift: 2) + action id]. action isReduce ifTrue: [^((grammar reduceTableIndexFor: action symbol rhs: action rhs) bitShift: 2) + action id]. ^action id! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! arrayTypeMask ^self hasLiteralByteArrays ifTrue: [0] ifFalse: [2]! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! buildScanner: scannerString andParser: parserString | parser | scannerCompiler grammar: self grammar. scannerCompiler scannerDefinitionString: scannerString. parserDefinitionString := parserString. scannerCompiler parseTokens. parser := SmaCCGrammarParser on: (ReadStream on: parserString). parser grammar: grammar. parser parse! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! changes ^model changes! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 1/7/2007 11:08'! checkFor: problemSymbols errorMessage: errorMessage | stream | problemSymbols isEmpty ifTrue: [^self]. stream := WriteStream with: String new. problemSymbols do: [:each | stream nextPutAll: each printString] separatedBy: [stream space]. SmaCCCompilationNotification new tag: stream contents; signal: errorMessage! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! checkForEmptySymbols self checkFor: grammar emptySymbols errorMessage: 'Missing non-terminal productions'! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! checkForUnusedSymbols self checkFor: grammar unusedSymbols errorMessage: 'Unused non-terminal symbols'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 3/10/2012 22:52'! compileChanges RBRefactoryChangeManager instance performChange: self changes. scannerCompiler scannerClass realClass ifNotNilDo: [:each | each initializeKeywordMap]! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileDefinitionComments scannerCompiler compileScannerDefinitionComment. self compileParserDefinitionComment! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileInto: sClass andParser: pClass self scannerClass: sClass. self parserClass: pClass. self createChanges. self compileChanges! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileItemSetsComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'itemSetsComment'; cr; cr; tab; nextPut: $"; cr. itemSets keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileParser self compileTransitionTable. self compileStartingStateIds. self compileReductionTable. self compileScannerClassIntoParser! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileParserDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'parserDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (parserDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileReductionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'reduceTable'; cr; tab; nextPutAll: '^#('; cr. self reduceTable do: [:each | stream nextPutAll: '#('. each do: [:e | stream nextPutAll: e storeString] separatedBy: [stream space]. stream nextPut: $); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileScanner scannerCompiler compileScanner! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileScannerClassIntoParser | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerClass'; cr; tab; nextPutAll: '^'; nextPutAll: scannerCompiler scannerClass name. self parserClass theMetaClass compile: stream contents classified: #'generated-accessing'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileStartingStateIds startingStateMap keysAndValuesDo: [:symbol :position | | stream | stream := WriteStream with: String new. stream nextPutAll: 'startingStateFor'; nextPutAll: symbol compileName; cr; tab; nextPutAll: '^'; nextPutAll: position printString. parserClass theMetaClass compile: stream contents classified: #'generated-starting states']! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 6/14/2012 11:42'! compileSymbolComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'symbolComment'; cr; cr; tab; nextPut: $"; cr. scannerCompiler symbols keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: '. '; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileTransitionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'transitionTable'; cr; tab; nextPutAll: '^#('; cr. self transitionTable do: [:each | stream nextPutAll: (self hasLiteralByteArrays ifTrue: ['#['] ifFalse: ['#(']). each do: [:byte | stream nextPutAll: byte printString] separatedBy: [stream nextPut: $ ]. stream nextPut: (self hasLiteralByteArrays ifTrue: [$]] ifFalse: [$)]); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressTable: table ^table collect: [:row | self compressTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressTableRow: row | uniqueItems | uniqueItems := self uniqueNonErrorActionsForTableRow: row. ^uniqueItems size = 1 ifTrue: [self singleActionTableRow: row forAction: uniqueItems first] ifFalse: [self multipleActionTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressedRowStream ^WriteStream with: (self hasLiteralByteArrays ifTrue: [ByteArray new] ifFalse: [Array new])! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! createChanges self removeOldMethods. self checkForEmptySymbols. self checkForUnusedSymbols. self compileScanner. self compileParser! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! createItemSets | itemSet newState index | startingStateMap := Dictionary new. grammar calculateFirstSets. itemSets := OrderedCollection new. grammar allStartingSymbols do: [:each | itemSets add: (grammar initialItemSetFor: each). startingStateMap at: each put: itemSets size]. shiftTable := Dictionary new. index := 1. [index <= itemSets size] whileTrue: [itemSet := itemSets at: index. grammar symbols do: [:each | newState := itemSet moveOn: each. newState notEmpty ifTrue: [shiftTable at: (Array with: index with: each) put: (self indexOfState: newState)]]. index := index + 1]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! createTransitionTable | table | table := (1 to: itemSets size) collect: [:index | scannerCompiler symbols collect: [:each | self actionForState: index on: each]]. actions := self compressTable: table! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:33'! defineClass: aString asSubclassOf: aBehavior model defineClass: aBehavior name , ' subclass: #' , aString , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: '''' '. ^model classNamed: aString asSymbol! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! generatedMethodsIn: aRBClass ^aRBClass selectors select: [:each | (aRBClass protocolsFor: each) allSatisfy: [:protocol | protocol notNil and: ['generated*' match: protocol]]]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! grammar ^grammar isNil ifTrue: [grammar := SmaCCGrammar new] ifFalse: [grammar]! ! !SmaCCGrammarCompiler methodsFor: 'testing' stamp: 'lr 11/25/2009 18:59'! hasLiteralByteArrays "The #hasLiteralByteArrays wasn't meant to be changed without also changing the SmaCCParser #actionForState:and: and #binarySearchIn:for:size: methods. This issue is fixed now and the SmaCCParser can now handle both cases." ^ true! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! indexOfState: newState | newStateIndex | newStateIndex := itemSets indexOf: newState. newStateIndex = 0 ifTrue: [itemSets add: newState. newStateIndex := itemSets size] ifFalse: [(itemSets at: newStateIndex) mergeWith: newState]. ^newStateIndex! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: 'lr 1/6/2007 21:55'! initialize scannerCompiler := SmaCCScannerCompiler new. model := (RBNamespace new) name: 'Compile Scanner/Parser'; yourself. startingStateMap := Dictionary new! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! multipleActionTableRow: row | stream | stream := self compressedRowStream. stream nextPut: 1 + self arrayTypeMask. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: each on: stream. self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parserClass ^parserClass! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05'! parserClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [parserClass := model classFor: aClassOrString] ifFalse: [parserClass := model classNamed: aClassOrString. parserClass isNil ifTrue: [parserClass := self defineClass: aClassOrString asSubclassOf: SmaCCParser]]! ! !SmaCCGrammarCompiler methodsFor: 'reduction table' stamp: ' 6/1/07 21:19'! reduceTable | table nonterminals | table := OrderedCollection new. nonterminals := scannerCompiler symbols reject: [:each | each isTerminal]. nonterminals do: [:each | each productionsDo: [:rhs | table add: (Array with: (scannerCompiler symbols indexOf: each) with: rhs size with: (rhs compileSourceFor: each in: parserClass))]]. ^table! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 11/25/2009 18:00'! removeOldMethods self removeOldMethodsFrom: scannerCompiler scannerClass; removeOldMethodsFrom: scannerCompiler scannerClass theMetaClass; removeOldMethodsFrom: parserClass; removeOldMethodsFrom: parserClass theMetaClass! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! removeOldMethodsFrom: aRBClass (self generatedMethodsIn: aRBClass) do: [:each | aRBClass removeMethod: each]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05'! scannerClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [scannerCompiler scannerClass: (model classFor: aClassOrString)] ifFalse: [scannerCompiler scannerClass: (model classNamed: aClassOrString). scannerCompiler scannerClass isNil ifTrue: [scannerCompiler scannerClass: (self defineClass: aClassOrString asSubclassOf: SmaCCScanner)]]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! singleActionTableRow: row forAction: anInteger | stream | stream := self compressedRowStream. stream nextPut: 0 + self arrayTypeMask. self writeInteger: anInteger on: stream. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! transitionTable actions isNil ifTrue: [self createItemSets. self createTransitionTable]. ^actions! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! uniqueNonErrorActionsForTableRow: row ^(row asSet) remove: 3 ifAbsent: []; asArray! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! writeInteger: anInteger on: aStream self hasLiteralByteArrays ifTrue: [aStream nextPut: (anInteger bitShift: -8); nextPut: (anInteger bitAnd: 16rFF)] ifFalse: [aStream nextPut: anInteger]! ! !SmaCCGraphAlgorithm commentStamp: '' prior: 83164925! SmaCCGraphAlgorithm is an abstract class that has support for the graph transformation algorithms. ! !SmaCCDuplicateNodeEliminator commentStamp: '' prior: 83165096! SmaCCDuplicateNodeEliminator removes duplicate nodes in a SmaCCNode graph. Instance Variables: comparisonState dictionary mapping equivalent nodes root the root of the graph ! !SmaCCDuplicateNodeEliminator class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! removeDuplicateNodesIn: aSmaCCNode ^self new removeDuplicateNodesIn: aSmaCCNode! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! isNode: firstSmaCCNode equivalentTo: secondSmaCCNode | firstTransitions secondTransitions | firstSmaCCNode = secondSmaCCNode ifTrue: [^true]. firstSmaCCNode transitions size = secondSmaCCNode transitions size ifFalse: [^false]. firstSmaCCNode action = secondSmaCCNode action ifFalse: [^false]. ((comparisonState at: firstSmaCCNode ifAbsent: [#()]) includes: secondSmaCCNode) ifTrue: [^true]. (comparisonState at: firstSmaCCNode ifAbsentPut: [Set new]) add: secondSmaCCNode. (comparisonState at: secondSmaCCNode ifAbsentPut: [Set new]) add: firstSmaCCNode. firstTransitions := firstSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. secondTransitions := secondSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. firstTransitions with: secondTransitions do: [:first :second | first transitionObjects = second transitionObjects ifFalse: [^false]. (self isNode: first to equivalentTo: second to) ifFalse: [^false]]. ^true! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! mergeAllTransitions root allStates do: [:each | each mergeTransitions]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! pairsDo: aBlock | nodes | nodes := root allStates asOrderedCollection. 1 to: nodes size - 1 do: [:i | i + 1 to: nodes size do: [:j | aBlock value: (nodes at: i) value: (nodes at: j)]]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! removeDuplicateNodesIn: aSmaCCNode root := aSmaCCNode. self removeDuplicates. ^root! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: 'lr 1/8/2007 22:44'! removeDuplicates | changed iterations | changed := true. iterations := root allStates size. [changed and: [iterations > 0]] whileTrue: [changed := false. iterations := iterations - 1. self mergeAllTransitions. self pairsDo: [:firstNode :secondNode | comparisonState := Dictionary new. (self isNode: firstNode equivalentTo: secondNode) ifTrue: [firstNode mergeWith: secondNode. changed := true]]]! ! !SmaCCEpsilonRemoval commentStamp: '' prior: 83165361! SmaCCEpsilonRemoval removes epsilon nodes from a NFA. Instance Variables: nodeMap Dictionary mapping sets of states to a new state in the new graph ! !SmaCCEpsilonRemoval class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! removeEpsilonEdgesFrom: aSmaCCNode "Returns an equivalent graph to aSmaCCNode that doesn't contain any epsilon transitions" ^self new removeEpsilonEdgesFrom: aSmaCCNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! createNodeWithoutEpsilonEdges: aSmaCCNode | newNode newTransitions | newNode := self createMergedNodeFrom: (self epsilonReachableNodesFrom: aSmaCCNode). nodeMap at: aSmaCCNode put: newNode. newTransitions := OrderedCollection new. newNode transitions do: [:each | each isEpsilonTransition ifFalse: [newTransitions add: (each class to: (self removeEpsilonEdgesFrom: each to) on: each transitionObjects)]]. newNode transitions: newTransitions. ^newNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! epsilonReachableNodesFrom: aSmaCCNode | todo reachable node | reachable := Set with: aSmaCCNode. todo := OrderedCollection with: aSmaCCNode. [todo notEmpty] whileTrue: [node := todo removeLast. node transitions do: [:each | (each isEpsilonTransition and: [(reachable includes: each to) not]) ifTrue: [reachable add: each to. todo add: each to]]]. ^reachable! ! !SmaCCEpsilonRemoval methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. nodeMap := Dictionary new! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! removeEpsilonEdgesFrom: aSmaCCNode ^nodeMap at: aSmaCCNode ifAbsent: [self createNodeWithoutEpsilonEdges: aSmaCCNode]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! createMergedNodeFrom: nodeCollection | newNode | newNode := SmaCCNode new. self mergeTransitionsFrom: nodeCollection into: newNode. self mergeActionsFrom: nodeCollection into: newNode. ^newNode! ! !SmaCCGraphAlgorithm methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! mergeActionsFrom: nodeCollection into: aSmaCCNode nodeCollection do: [:each | aSmaCCNode addActions: each action]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! mergeTransitionsFrom: nodeCollection into: aSmaCCNode | transitions | transitions := Set new. nodeCollection do: [:each | each transitions do: [:edge | transitions add: edge copy]]. aSmaCCNode transitions: transitions. aSmaCCNode mergeTransitions! ! !SmaCCNFAtoDFA commentStamp: '' prior: 83165581! SmaCCNFAtoDFAAlgorithm converts an NFA without epsilon transitions into a DFA. If a node contains edges that lead to multiple nodes for the same character, then a new state is created that merges all states for the given character. Instance Variables: mergedStates dictionary that maps a collection of states to the resulting merged state ! !SmaCCNFAtoDFA class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! convertToDFA: aSmaCCNode "Returns an equivalent DFA from the NFA specified by aSmaCCNode -- the NFA must not contain epsilon edges." ^self new convertToDFA: aSmaCCNode! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! commonTransitionObjectsForEdges: edgeCollection ^edgeCollection inject: edgeCollection first transitionObjects into: [:sum :each | sum select: [:char | each includes: char]]! ! !SmaCCNFAtoDFA methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! convertToDFA: aSmaCCNode ^self mergedNodeFor: (Array with: aSmaCCNode)! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! createEdgeMerging: conflictingEdgeCollection | newNode common newEdge | newNode := self mergedNodeFor: (conflictingEdgeCollection collect: [:each | each to]). common := self commonTransitionObjectsForEdges: conflictingEdgeCollection. newEdge := conflictingEdgeCollection first class to: newNode on: common. conflictingEdgeCollection do: [:each | each remove: common]. ^newEdge! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19'! eliminateDuplicateTransitionsIn: aSmaCCNode | newTransitions conflictingObject | newTransitions := aSmaCCNode transitions collect: [:each | each copy]. [conflictingObject := self someDuplicateIn: newTransitions. conflictingObject notNil] whileTrue: [| conflictingEdges newEdge | conflictingEdges := newTransitions select: [:each | each includes: conflictingObject]. newEdge := self createEdgeMerging: conflictingEdges. newTransitions add: newEdge]. self setTransitionsOn: aSmaCCNode to: newTransitions! ! !SmaCCNFAtoDFA methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. mergedStates := Dictionary new! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19'! mergedNodeFor: nodeCollection | mergedNodes | mergedNodes := nodeCollection asSortedCollection asArray. ^mergedStates at: mergedNodes ifAbsent: [| newNode | newNode := self createMergedNodeFrom: mergedNodes. mergedStates at: mergedNodes put: newNode; at: (Array with: newNode) put: newNode. self eliminateDuplicateTransitionsIn: newNode. newNode]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! setTransitionsOn: aSmaCCNode to: edgeCollection aSmaCCNode transitions: (edgeCollection reject: [:each | each isEmpty]). aSmaCCNode transitions do: [:each | each to: (self convertToDFA: each to)]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! someDuplicateIn: edgeCollection | objects | objects := Set new. edgeCollection do: [:edge | edge transitionObjects do: [:each | (objects includes: each) ifTrue: [^each]]. objects addAll: edge transitionObjects]. ^nil! ! !SmaCCLR1Item commentStamp: 'jmb' prior: 83165982! SmaCCLR1Item represents an item in a SmaCCItemSet. Instance Variables: followers all possible symbols that can follow this production in this state location the position in the rhs of the production we are at rhs the rhs of the production symbol the symbol for the production! !SmaCCLR1Item class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection; yourself! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCLR1Item ^self class == aSmaCCLR1Item class and: [location = aSmaCCLR1Item location and: [rhs == aSmaCCLR1Item rhs and: [symbol == aSmaCCLR1Item symbol]]]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! action: aSmaCCSymbol location > rhs size ifTrue: [(symbol isStartingSymbol and: [aSmaCCSymbol isEmptySymbol]) ifTrue: [^SmaCCAcceptAction new]. (followers includes: aSmaCCSymbol) ifTrue: [^SmaCCReduceAction symbol: symbol rhs: rhs]] ifFalse: [(rhs at: location) = aSmaCCSymbol ifTrue: [^SmaCCShiftAction new]]. ^SmaCCRejectAction new! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! followers ^followers! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! followers: aSmaCCSymbolSet followers := aSmaCCSymbolSet! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^(symbol identityHash bitXor: (location bitShift: 14)) bitXor: rhs identityHash! ! !SmaCCLR1Item methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLR1EqualTo: aSmaCCLR1Item ^self followers size = aSmaCCLR1Item followers size and: [self followers allSatisfy: [:each | aSmaCCLR1Item followers includes: each]]! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! location ^location! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! location: anInteger location := anInteger! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCLR1Item followers mergeWith: aSmaCCLR1Item followers! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! moveNext ^(self copy) followers: (followers class basedOn: followers); location: location + 1; yourself! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nextSymbol ^location > rhs size ifTrue: [SmaCCSymbol sentinel] ifFalse: [rhs at: location]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence "If we don't have a precedence, then assume we are the lowest precedence (which will cause a shift action)." | max | max := -1. rhs do: [:each | max := max max: (each precedence ifNil: [max])]. ^max! ! !SmaCCLR1Item methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream | i | aStream nextPut: $[; nextPutAll: symbol printString; nextPutAll: ' :'. i := 1. rhs do: [:each | i = location ifTrue: [aStream nextPutAll: ' . ']. aStream space; nextPutAll: each printString. i := i + 1]. location > rhs size ifTrue: [aStream nextPutAll: ' . ']. aStream nextPut: $;. followers printOn: aStream. aStream nextPut: $]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! rest | newRHS | newRHS := SmaCCRHS new. location + 1 to: rhs size do: [:each | newRHS add: (rhs at: each)]. ^newRHS! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! rhs ^rhs! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbol ^symbol! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection symbol := aSmaCCSymbol. rhs := aSmaCCRHS. location := 1. followers := aSmaCCSymbolCollection! ! !SmaCCNode commentStamp: '' prior: 83166366! SmaCCNode is a node in a directed graph. Instance Variables: action a collection of integers or a symbol. This contains the action to be performed when we match and can't find a longer match. id a unique number that allows us to sort the nodes transitions our transitions ! !SmaCCNode class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize NextId := 0. MaxSubNodesInMethod := 20! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maxSubNodesInMethod ^MaxSubNodesInMethod! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maxSubNodesInMethod: anInteger MaxSubNodesInMethod := anInteger! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCNode ^self id <= aSmaCCNode id! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = anObject ^self class = anObject class and: [self id = anObject id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! action ^action! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action: anObject anObject isNil ifTrue: [^self]. action := anObject isSymbol ifTrue: [anObject] ifFalse: [SortedCollection with: anObject]! ! !SmaCCNode methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! actionForSpecificRegularExpression: aSmaCCRegularExpression | matchedAction strings | strings := aSmaCCRegularExpression possibleMatches. matchedAction := self simulate: (ReadStream on: strings first). strings do: [:each | matchedAction = (self simulate: (ReadStream on: each)) ifFalse: [^nil]]. ^matchedAction! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! addActions: aCollection aCollection isNil ifTrue: [^self]. action isNil ifTrue: [action := aCollection copy. ^self]. action isSymbol ifTrue: [^self]. aCollection isSymbol ifTrue: [^action := aCollection]. aCollection do: [:each | (action includes: each) ifFalse: [action add: each]]! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode transitions add: (SmaCCEdge to: aSmaCCNode on: nil)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode onCharacters: characterCollection transitions add: (SmaCCCharacterEdge to: aSmaCCNode on: characterCollection)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode onStates: symbolCollection transitions add: (SmaCCStateEdge to: aSmaCCNode on: symbolCollection)! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:22'! addImplementationSpecificRewritesTo: rewriter! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! allStates | nodes | nodes := Set new. self allStatesInto: nodes. ^nodes! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! allStatesInto: aSet (aSet includes: self) ifTrue: [^self]. aSet add: self. transitions do: [:each | each to allStatesInto: aSet]! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asDFA | new | new := (SmaCCNFAtoDFA convertToDFA: self asNFAWithoutEpsilonTransitions) startingNodeWithoutUnnecessaryDefaultTransition. new removeDuplicateNodes. ^new! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asNFAWithoutEpsilonTransitions ^SmaCCEpsilonRemoval removeEpsilonEdgesFrom: self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass | stream | stream := WriteStream with: String new. self hasSimpleLoop ifTrue: [stream nextPut: $[]. self writeMatchingCodeOn: stream usingSelectorMap: aDictionary. (self sortedTransitionsFor: aClass) do: [:each | each to = self ifTrue: [stream nextPutAll: each expression; nextPut: $]; nextPutAll: ' whileTrue.'; cr] ifFalse: [stream nextPutAll: each expression; nextPutAll: ' ifTrue: ['. stream nextPutAll: (methodMap at: each to ifAbsentPut: [each to asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass]); nextPutAll: '].'; cr]]. (transitions notEmpty or: [action isNil]) ifTrue: [stream nextPutAll: '^self reportLastMatch'; cr]. ^stream contents! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileInto: aClass usingSelectorMap: aDictionary | methodNodes methodMap index | methodNodes := self statesToMakeIntoMethods. methodMap := self methodNameMapFor: methodNodes. index := 0. methodNodes do: [:each | | stream | stream := WriteStream with: String new. stream nextPutAll: (each = self ifTrue: ['scanForToken'] ifFalse: ['scan' , (index := index + 1) printString]); cr. stream nextPutAll: (each asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass). aClass compile: (self optimizedParseTreeFor: stream contents) formattedCode classified: #'generated-scanner']! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! groupedTransitions ^transitions inject: OrderedCollection new into: [:sum :each | (sum detect: [:edgeCollection | edgeCollection first canMergeWith: each] ifNone: [sum add: OrderedCollection new]) add: each. sum]! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! hasSimpleLoop ^transitions anySatisfy: [:each | each to = self]! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^id bitShift: 4! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! id ^id! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize id := NextId := NextId + 1. transitions := SortedCollection new! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminalNode ^transitions isEmpty or: [transitions size = 1 and: [self hasSimpleLoop]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! mergeTransitions self groupedTransitions do: [:edges | | toMap | toMap := Dictionary new. edges do: [:each | (toMap includesKey: each to) ifTrue: [(toMap at: each to) mergeWith: each. transitions remove: each] ifFalse: [toMap at: each to put: each]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCNode id := aSmaCCNode id. transitions := aSmaCCNode transitions. action := aSmaCCNode action! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! methodNameMapFor: methodNodes | index methodMap | methodMap := Dictionary new. index := 0. methodNodes do: [:value | methodMap at: value put: (value = self ifTrue: ['^self scanForToken'] ifFalse: ['^self scan' , (index := index + 1) printString])]. ^methodMap! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! needsSeparateMethod ^self allStates size > MaxSubNodesInMethod! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:01'! optimizationRewriter | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. currentCharacter == `#l ifTrue: [`@.Stmts3]. `@.Stmts4' with: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [ ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [`@.Stmts2. ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue: [`@.Stmts2]. `@.Stmts3'; replace: '`@.Stmts1. currentCharacter isLiteral ifTrue: [`@.Stmts2]. `@.Stmts3' with: '`@.Stmts1. `@.Stmts2'; replace: '`@.Stmts1. `.Stmt. `@.Stmts. `@a ifTrue: [self step. `.Stmt. `@.Stmts]. `@.Stmts2' with: '`@.Stmts1. `@a ifTrue: [self step]. `.Stmt. `@.Stmts. `@.Stmts2'; replace: '`@.Stmts1. `@a ifTrue: [`@.Stmts. ^self reportLastMatch]' with: '`@.Stmts1. `@a ifTrue: [`@.Stmts]'. self addImplementationSpecificRewritesTo: rewriter. ^rewriter! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! optimizedParseTreeFor: aString | tree rewriter | tree := RBParser parseMethod: aString. rewriter := self optimizationRewriter. [rewriter executeTree: tree] whileTrue: [tree := rewriter tree]. ^tree! ! !SmaCCNode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: self class name; nextPut: $(; nextPutAll: id printString; nextPut: $)! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! removeDuplicateNodes ^SmaCCDuplicateNodeEliminator removeDuplicateNodesIn: self! ! !SmaCCNode methodsFor: 'simulating' stamp: ' 6/1/07 21:19'! simulate: aStream | char | aStream atEnd ifTrue: [^action]. char := aStream next. transitions do: [:each | (each includes: char) ifTrue: [^each to simulate: aStream]]. ^nil! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:10'! sortedTransitionsFor: aClass | frequencies | frequencies := (aClass realClass ifNil: [SmaCCScanner]) frequencyTable. ^transitions asSortedCollection: [:a :b | | aFrequency bFrequency | aFrequency := a edgeFrequencyUsingTable: frequencies. bFrequency := b edgeFrequencyUsingTable: frequencies. aFrequency > bFrequency or: [aFrequency = bFrequency and: [a <= b]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! startingNodeWithoutUnnecessaryDefaultTransition | edge | self transitions size = 1 ifFalse: [^self]. edge := self transitions first. (edge includes: #default) ifTrue: [^edge to]. ^self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! statesToMakeIntoMethods | allStates incoming | allStates := self allStates. incoming := Dictionary new. allStates do: [:each | each transitions do: [:edge | each ~= edge to ifTrue: [(incoming at: edge to ifAbsentPut: [Set new]) add: each]]]. ^(allStates asOrderedCollection select: [:each | self = each or: [each isTerminalNode not and: [(incoming at: each ifAbsent: [#()]) size > 1 or: [each needsSeparateMethod]]]]) asSortedCollection: [:a :b | a id < b id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! transitions ^transitions! ! !SmaCCNode methodsFor: 'private' stamp: 'lr 1/6/2007 22:08'! transitions: aCollection transitions reset. transitions addAll: aCollection! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! writeMatchingCodeOn: aStream usingSelectorMap: aDictionary | matchedItem | (action notNil and: [action size > 0]) ifTrue: [matchedItem := aDictionary at: action first ifAbsent: [action asArray]. aStream nextPutAll: (transitions isEmpty ifTrue: ['^self recordAndReportMatch:'] ifFalse: ['self recordMatch: ']). matchedItem isSymbol ifTrue: [aStream nextPutAll: matchedItem storeString] ifFalse: [aStream nextPutAll: '#('. matchedItem do: [:each | aStream nextPutAll: each storeString] separatedBy: [aStream nextPut: $ ]. aStream nextPut: $)]. aStream nextPut: $.; cr]. (transitions anySatisfy: [:each | each isCharacterTransition]) ifTrue: [aStream nextPutAll: 'self step.'; cr]! ! !SmaCCParserGenerator commentStamp: 'jmb 1/23/2003 15:59' prior: 83166775! SmaCC: The Smalltalk Compiler-Compiler from John Brant and Don Roberts (http://www.refactory.com/Software/SmaCC) Tutorial This is a walk-through tutorial to demonstrate many of the features of SmaCC, the Smalltalk Compiler Compiler. In this example, we will incrementally develop a simple calculator. Our first calculator is going to be relatively simple. It is going to take two numbers and add them together. To start things off, we have to tell the scanner how to recognize a number. It starts with one or more digits, possibly followed by an decimal point with zero or more digits after it. The scanner definition for this token is: : [0-9]+ (\. [0-9]*) ? ; Enter that line into the scanner tab on the interface. Let's go over each part: Names the token. The name inside the <> must be a legal Smalltalk variable name. : Separates the name of the token from the token's definition. [0-9] Matches any single character in the range '0' to '9' (a digit). + Matches the previous expression one or more times. In this case, we are matching one or more digits. ( ... ) Groups subexpressions. \. Matches the '.' character (. has a special meaning in regular expressions, \ quotes it). * Matches the previous expression zero or more times. ? Matches the previous expression zero or one time (i.e., it is optional). ; Terminates a token specification. We don't want to have to worry about whitespace in our language, so we need to define what a whitespace is and to ignore it. To do this, enter the following token specification on the next line on the scanner page: : \s+; \s matches any whitespace character (space, tab, linefeed, etc.). So how do we tell the scanner to ignore it? If you look in the SmaCCScanner class, you will find a method named 'whitespace'. If a scanner understands a method that has the same name as a token name, that method will get called whenever the scanner matches that kind of token. As you can see, the whitespace method eats whitespace. There is also a 'comment' method that behaves similarly. The only other token that will appear in our system would be the '+' token for addition. However, since this is token is always the same, we don't have to tell the scanner what it looks like. It will figure it out from our grammar. Speaking of our grammar, let's go ahead and define it. Enter the following specification in the Parser tab: Expression : Expression "+" Number | Number ; Number : ; This basically says that an expressions is either a number or an expression added to a number. We should be able to compile a parser now. Switch to the Compile tab. You need to enter the class name for both the scanner and parser. Use CalculatorScanner and CalculatorParser respectively. Once the class names are entered, we are ready to compile the parser. Press the 'Compile LALR(1)' button (you should always push this one unless you know what you are doing. Basically, it will generate smaller parsers than the other option). This will create new Smalltalk classes for the CalculatorScanner and CalculatorParser and compile several methods in those classes. All methods that SmaCC compiles will go into a "generated-*" method protocol. You should not change those methods since they are replace each time you compile. Whenever SmaCC creates new classes, they are compiled in the default application/package. If you are using VisualAge, you will need to make sure that the default application is an open edition and that it prereqs the SmaCCRuntime application. If you have already created the scanner and parser classes, you can load their definitions by using the "..." buttons next to the class name entry fields. If you answer "Yes" to the dialog, the text in the scanner/parser tabs will be replaced with the definition that was last compiled (assuming that the "Generate definition comments" was checked during the last compile). Now we are ready to test our parser. Go to the “test” pane, enter “3 + 4”, and press the “parse” button; you will see that the parser correctly parses it. If you press “Parse and Inspect” you will see and inspector on an OrderedCollection that contains the parsed tokens. This is because we haven't specified what the parser is supposed to do when it parses. You can also enter incorrect items. For example, try to parse "3 + + 4" or "3 + a". An error message should appear in the text. Now we need to define the actions that need to happen when we parse our expressions. Currently, our parser is just validating that the expression is a bunch of numbers added together. Generally, you will create some structure that represents what you've parsed (e.g., a parse tree). However, in this case, we are not concerned about the structure, but we are concerned about the result (the value of the expression). For our example, you need to modify the grammar definition to be: Expression : Expression "+" Number {'1' + '3'} | Number {'1'} ; Number : {'1' value asNumber} ; The text between the braces is Smalltalk code that gets evaluated when the rule is applied. Strings with a number get replaced with the corresponding parse node. In the first Expression rule, the '1' will get replaced by the ParseNode that matches Expression and the '3' gets replaced by the ParseNode that matches Number. The second item in the rule is the "+" token. Since we already know what it is, it is not interesting. Compile the new parser. Now when you do a 'Parse and Inspect' from the test pane, you should see the result: 7. One problem with the previous code is that if you need to change a rule then you may also need to change the code for that rule. For example, suppose you inserted a new token at the beginning of a rule, then you would need to change all of your references in the Smalltalk code. We can alleviate this problem by using named expressions. After each part of a rule, we can specify its name. Names are specified with single quotes and must be legal Smalltalk variable names. Doing this for our grammar we get: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Number 'number' {number} ; Number : 'numberToken' {numberToken value asNumber} ; While this will result in the same language being parsed, it makes it easier to maintain your parsers. Let's extend our language to add subtraction. Here's the new grammar: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; After you've compiled this, '3 + 4 - 2 ' should return '5'. Next, let's add multiplication and division: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Expression 'expression' "*" Number 'number' {expression * number} | Expression 'expression' "/" Number 'number' {expression / number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Here we run into a problem. If you evaluate '2 + 3 * 4' you end up with 20. The problem is that in standard mathematics, multiplication has a higher precedence than addition. Our grammar evaluates strictly left-to-right. The standard solution for this problem is to define additional nonterminals to force the sequence of evaluation. Our grammar with that solution would look like: Expression : Term 'term' {term} | Expression 'expression' "+" Term 'term' {expression + term} | Expression 'expression' "-" Term 'term' {expression - term}; Term : Number 'number' {number} | Term 'term' "*" Number 'number' {term * number} | Term 'term' "/" Number 'number' {term / number}; Number : 'numberToken' {numberToken value asNumber}; If you compile this grammar, you will see that '2 + 3 * 4' evaluates to 14 like we would expect. Now, as you can imagine, this gets pretty complicated as the number of precedence rules increases (e.g., C). We can use ambiguous grammars and precedence rules to simplify this situation. Here is the same grammar using precedence to enforce our evaluation order: %left "+" "-"; %left "*" "/"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Notice that we changed the grammar so that there are Expressions on both sides of the operator. The two lines that we added to the top of the grammar mean that “+” and “-” are evaluated left-to-right and have the same precedence, which is lower than “*” and “/”. Likewise, the second line means that “*” and “/” have equal precedence. Grammars in this form are usually much more intuitive, especially in cases with many precedence levels. Just as an example, let's add exponentiation and parentheses: %left "+" "-"; %left "*" "/"; %right "^"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Expression 'exp1' "^" Expression 'exp2' {exp1 raisedTo: exp2} | "(" Expression 'expression' ")" {expression} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Once you have compiled the grammar, you will be able to evaluate '3 + 4 * 5 ^ 2 ^ 2' to get 2503. Since the exponent operator is right associative, this expression is evaluated like 3 + (4 * (5 ^ (2 ^ 2))). We can also evaluate expressions with parentheses. For example, evaluating '(3 + 4) * (5 - 2) ^ 3' results in 189. The Scanner Scanning takes an input stream of characters and converts that into a stream of tokens. The tokens are then passed on to the parsing phase. The scanner is specified by a collection of token specifications. Each token is specified by: TokenName : RegularExpression ; TokenName is a valid Smalltalk variable name that is surrounded by <>. For example, "" is a valid TokenName, but "" is not since "token name" isn't a valid Smalltalk variable name. The RegularExpression is a regular expression that matches a token. It should match one or more characters in the input stream. The colon character, ":", is used to separate the TokenName and the RegularExpression, and the semicolon character, ";", is used to terminate the token specification. Regular Expression Syntax While the rules are specified as regular expressions, there are many different syntaxes for regular expressions. We choose a relatively simple syntax that is specified below. If you wish to have a more rich syntax, you can modify the scanner's parser: SmaCCScannerScanner & SmaCCScannerParser. These classes were created using SmaCC. \character Matches a special character. The character immediately following the backslash is matched exactly, unless it is a letter. Backslash-letter combinations have other meanings and are specified below. \cLetter Matches a control character. Control characters are the first 26 characters (e.g., \cA equals "Character value: 0"). The letter that follows the "\c" must be an uppercase letter. \d Matches a digit, 0-9. \D Matches anything that is not a digit. \f Matches a form-feed character, "Character value: 12". \n Matches a newline character, "Character value: 10". \r Matches a carriage return character, "Character value: 13". \s Matches any whitespace character, [ \f\n\r\t\v]. \S Matches any non-whitespace character. \t Matches a tab, "Character value: 9". \v Matches a vertical tab, "Character value: 11" \w Matches any letter, number or underscore, [A-Za-z0-9_]. \W Matches anything that is not a letter, number or underscore. \xHexNumber Matches a character specified by the hex number following the "\x". The hex number must be at least one character long and no more than four characters for Unicode characters and two characters for non-Unicode characters. For example, "\x20" matches the space character (Character value: 16r20), and "\x1FFF" matches "Character value: 16r1FFF". Copies the definition of into the current regular expression. For example, if we have " : \d | [A-F] ;", we can use in a later rule: " : + ;". [characters] Matches one of the characters inside the []. This is a shortcut for the "|" operator. In addition to single characters, you can also specify character ranges with the "-" character. For example, "[a-z]" matches any lower case letter. [^characters] Matches any character not listed in the characters block. "[^a]" matches anything except for "a". # comment Creates a comment that is ignored by SmaCC. Everything from the # to the end of the line is ignored. exp1| exp2 Matches either exp1 or exp2. exp1 exp2 Matches exp1 followed by exp2. "\d \d" matches two digits. exp* Matches exp zero or more times. "0*" matches "" and "000". exp? Matches exp zero or one time. "0?" matches only "" or "0". exp+ Matches exp one or more times. "0+" matches "0" and "000", but not "". exp{min,max} Matches exp at least min times but no more than max times. "0{1,2}" matches only "0" or "00". It does not match "" or "000". (exp) Groups exp for precedence. For example, "(a b)*" matches "ababab". Without the parentheses, "a b *" would match "abbbb" but not "ababab". Since there are multiple ways to combine expressions, we need precedence rules for their combination. The or operator, "|", has the lowest precedence and the "*", "?", "+", and "{,}" operators have the highest precedence. For example, "a | b c *" matches "a" or "bcccc", but not "accc" or "bcbcbc". If you wish to match "a" or "b" followed by any number of c's, you need to use "(a | b) c *". Overlapping Tokens Unlike T-Gen, SmaCC can handle overlapping tokens with any problems. For example, the following is a legal SmaCC scanner definition: : [a-zA-Z] \w* ; : . ; This definition will match a variable or a single character. A variable can also be a single character [a-zA-Z], so the two tokens overlap. SmaCC handles overlapping characters by preferring the first token specified by the grammar. For example, an "a" could be a or an token, but since is specified first, SmaCC will use it. Matching Methods If your scanner has a method name that matches the name of the token, (e.g. whitespace), that method will get called upon a match of that type. The SmaCCScanner superclass already has a default implementation of #whitespace and #comment. These methods ignore those tokens by default. Matching methods can also be used to handle overlapping token classes. For example, in the C grammar, a type definition is the same as an identifier. The only way that they can be disambiguated is by looking up the name in the type table. In our example C parser, we have an IDENTIFIER method that is used to determine whether the token is really an IDENTIFIER or whether it is a TYPE_NAME. Unreferenced Tokens If a token is not referenced from a grammar specification, it will not be included in the generated scanner, unless the token's name is also a name of a method (see previous section). This, coupled with the ability to do substitutions, allows you to have the equivalent of macros within your scanner specification. However, be aware that if you are simply trying to generate a scanner, you will have to make sure that you create a dummy parser specification that references all of the tokens that you want in the final scanner. Case Insensitive Scanning You can specify that the scanner should ignore case differences by checking the "Ignore Case" option on the compile tab. If you have a language that is case insensitive and has several keywords, this can be a handy feature to have. For example, if you have "THEN" as a keyword in a case insensitive language, you would need to specify a token for then as " : [tT] [hH] [eE] [nN] ;". This is a pain to enter correctly. When the ignore case option is checked, SmaCC will automatically convert "THEN" into "[tT][hH][eE][nN]". Unicode Characters SmaCC compiles the scanner into a bunch of conditional tests on characters. Normally, it assumes that characters have values between 0 and 255, and it can make some optimizations based on this fact. With the "Allow Unicode Characters" option checked, it will assume that characters have values between 0 and 65535. The Parser Parsing converts the stream of tokens provided by the scanner into some object. Normally, this object will be a parse tree, but it does not have to be a parse tree. For example, the SmaCC tutorial shows a calculator. This calculator does not produce a parse tree; it produces the result, a number. In SmaCC the parser is defined by the grammar specification entered in the 'Parser' tab. The grammar specification has two parts, an optional directives section and the production rules. The directives section is used to tell SmaCC how to handle ambiguous grammars as well as how it should generate the code for the parser. The production rules section contains the grammar for the parser and the code that executes when a production rule is matched. Directives The optional directives section consists of a set of directives. The system currently has 5 directives. Each directive begins with a "%" character and the directive keyword, then lists a set of symbols, and finally ends with the semicolon character, ";". Ambiguous Grammars and Precedence SmaCC can handle ambiguous grammars. Given an ambiguous grammar, SmaCC will produce some parser. However, it may not parse correctly. For an LR parser, there are two basic types of ambiguities, reduce/reduce conflicts and shift/reduce conflicts. Reduce/reduce conflicts are bad. SmaCC has no directives to handle them and just picks one of the choices. These conflicts normally require a rewrite of your grammar. On the other hand, shift/reduce conflicts can be handled by SmaCC without rewriting your grammar. When SmaCC encounters a shift/reduce conflict it will perform the shift action by default. However, you can control this action with the "%left", "%right", and "%nonassoc" directives. If a token has been declared in a "%left" directive, it means that the token is left-associative. Therefore, the parser will perform a reduce operation. However, if it has been declared as right-associative, it will perform a shift operation. A token defined as %nonassoc will produce an error if that is encountered during parsing. For example, you may want to specify that the equal operator, "=", is non-associative, so "a = b = c" is not parsed as a valid expression. All three directives are followed by a list of tokens. Additionally, the %left, %right, and %nonassoc directives allow precedence to be specified. The order of the directives specifies the precedence of the tokens. The higher precedence tokens appear on the higher line numbers. For example, the following directive section gives the precedence for the simple calculator in our tutorial: %left "+" "-"; %left "*" "/"; %right "^"; The "+" and "-" symbols appear on the first line and have the lowest precedence. They are also left-associative so "1 + 2 +3" will be evaluated as "(1 + 2) + 3". On the next line are the "*" and "/" symbols. Since they appear on a higher line number, they have higher precedence than the "+" and "-". Finally, on line three we have the "^" symbol. It has the highest precedence. Combining all the rules allows us to parse "1 + 2 * 3 / 4 ^ 2 ^ 3" as "1 + ((2 * 3) / (4 ^ (2 ^ 3)))". Start Symbols By default, the left-hand side of the first grammar rule is the start symbol. If you want to multiple start symbols, then you can specify them by using the "%start" directive followed by the nonterminals that are additional start symbols. This is useful for creating two parsers with two grammars that are similar but slightly different. For example, consider a Smalltalk parser. You can parse methods, and you can parse expressions. These are two different operations, but have very similar grammars. Instead of creating two different parsers for parsing methods and expressions, we can specify one grammar that parses methods and also specify another starting position for parsing expressions. The StParser in the SmaCC Example Parsers package has an example of this. The StParser class>>parseMethod: uses the #startingStateForMethod position to parse methods and the StParser class>>parseExpression: uses the #startingStateForSequenceNode position to parse expressions. Id Methods Internally, the various token types are represented as integers. However, there are times that you need to reference the various token types. For example, in the CScanner and CParser classes, the TYPE_NAME token is identical to the IDENTIFIER token. The IDENTIFIER matching method does a lookup in the type table and if it finds a type definition with the same name as the current IDENTIFIER, it want to return the TYPE_NAME token type. To determine what integer this is, the parser was created with an %id directive for and . This generates the IDENTIFIERId and TYPE_NAMEId methods on the scanner. These methods simply return the number representing that token type. See the C sample scanner and parser for a good example of how this is used. Production Rules The production rules contains the grammar for the parser. The first production rule is considered to be the starting rule for the parser. Each production rule consists of a non-terminal symbol name followed by a ":" separator which is followed by a list of possible productions separated by vertical bar, "|", and finally terminated by a semicolon, ";". Each production consists of a sequence of non-terminal symbols, tokens, or keywords followed by some optional Smalltalk code enclosed in curly brackets, {}. Non-terminal symbols are valid Smalltalk variable names and must be defined somewhere in the parser definition. Forward references are valid. Tokens are enclosed in angle brackets as they are defined in the scanner (e.g., ) and keywords are enclosed in double-quotes (e.g., "then"). Keywords that contain double-quotes need to have two double-quotes per each double-quote in the keyword. For example, if you need a keyword for one double-quote character, you would need to enter """" (four double-quote characters). The Smalltalk code is evaluated whenever that production is matched. If the code is a zero or a one argument symbol, then that method is performed. For a one argument symbol, the argument is an OrderedCollection that contains one element for each item in the production. If the code isn't a zero or one argument symbol, then the code is executed and whatever is returned by the code is the result of the production. If no Smalltalk code is specified, then the default action is to execute the #reduceFor: method. This method converts all items into an OrderedCollection. If one of the items is another OrderedCollection, then all of its elements are added to the new collection. Inside the Smalltalk code you can refer to the values of each production item by using literal strings. The literal string, '1', refers the to value of the first production item. The values for tokens and keywords will be SmaCCToken objects. The value for all non-terminal symbols will be whatever the Smalltalk code evaluates to for that non-terminal symbol. Named Symbols When entering the Smalltalk code, you can get the value for a symbol by using the literal strings (e.g., '2'). However, this creates difficulties when modifying a grammar. If you insert some symbol at the beginning of a production, then you will need to modify your Smalltalk code changing all literal string numbers. Instead you can name each symbol in the production and then refer to the name in the Smalltalk code. To name a symbol (non-terminal, token, or keyword), you need to add a quoted variable name after the symbol in the grammar. For example, "MySymbol : Expression 'expr' "+" 'num' {expr + num} ;" creates two named variables. One for the non-terminal Expression and one for the token. These variables are then used in the Smalltalk code. Extended Syntax SmaCC also has some extended syntax that makes it easier to enter different grammars. Most of the additions are for the productions, but one change that is not for productions is the addition of "::=" as the separator between the non-terminal and the production. The production syntax enhancements are listed in the following table: Symbol ? Makes symbol optional. It is equivalent to defining a new production rule: "Optional_Symbol : Symbol {'1'} | {nil};". Symbol * or Symbol + Makes a repeating symbol. The "*" repeats zero or more times, and the "+" repeats one or more times. It is equivalent to defining a new production rule: "Repeat_Symbol : | Symbol;" for "*" and "Repeat_Symbol : Symbol | Repeat_Symbol Symbol ;" for "+". ( Productions ) Groups the items in Productions. By itself it is not that useful, but it can be combined with the "?", "*", or "+". It is equivalent to defining "Group_Productions : Productions ;". [ Productions ] Equivalent to "( Productions ) ?". <% Productions %> Equivalent to "( Productions ) *" Parser Comments The compile page has three options to generate comments. You should always select the "Generate definition comments". That saves the scanner and parser definition strings into the scanner and parser classes. It allows your grammar to be under the same version control system as your Smalltalk code. The other two comment options should not be needed unless you need to debug a parser generated. The "generate symbol comments" option will generate a comment that explains what each symbol is mapped to. When SmaCC compiles a grammar it converts all symbols into integers. This comment gives you the integer for each symbol. You may need this information if you have an incorrect scanner definition. For example, you may have overlapping token definitions and SmaCC is picking the wrong one (by default it picks the first one in your scanner definition). When you debug, you can inspect the SmaCCToken object and validate its "id" with those in the symbol comment. If they are different, then you have a bug in your scanner. Finally, the "generate item set comments" option should rarely be needed. It generates a listing of all LR(1) item sets in the parser. If you are familiar with LR parsing, then it might be interesting to look at. However, for a moderate sized grammar (e.g., Java), this comment can be a few MB in size. I would not recommend generating such comments when using ENVY -- you don't want to store a 10MB method in your library. For the calculator example in the tutorial, this comment is 9,000 characters long. Error Recovery Normally, when the parser encounters an error, it raises the SmaCCParserError exception and parsing is immediately stopped. However, there are times when you may wish to try to parse more of the input. For example, if you are highlighting code, you do not want to stop highlighting at the first syntax error. Instead you may wish to attempt to recover after the statement separator -- the period ".". SmaCC uses the error symbol to specify where error recovery should be attempted. For example, we may have the following rule to specify a list of Smalltalk statements: Statements : Expression | Statements "." Expression ; If we wish to attempt recovery from a syntax error when we encounter a period, we can change our rule to be: Statements : Expression | Statements "." Expression | error "." Expression ; While the error recovery allows you to proceed parsing after a syntax error, it will not allow you to return a parse tree from the input. Once the input has been parsed with errors, it will raise a non-resumable SmaCCParserError. ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:19'! initialize ShowPrecedenceConflicts:=false. " (TheWorldMenu respondsTo: #registerOpenCommand:) ifTrue: [ TheWorldMenu unregisterOpenCommand: 'SmaCC'. TheWorldMenu registerOpenCommand: {'SmaCC Generator'. {self. #open}}] "! ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:21'! menuCommandOn: aBuilder (aBuilder item: #'SmaCC Parser Generator') parent: #Tools; action: [ self open ]; help: 'Create and test parsers with SmaCC'.! ! !SmaCCParserGenerator class methodsFor: 'instance creation' stamp: 'lr 11/25/2009 18:03'! open ^ self new openInWorld! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:12'! acceptParserCode: aStringOrAText notifying: aRequestor | scannerText | scannerText := self scannerCodeHolder contentsMorph text. ^ [SmaCCGrammarCompiler new buildScanner: scannerText andParser: aStringOrAText. true] on: SmaCCParserError do: [:ex | self tabList selectedPageIndex: 2. self displayError: ex description at: ex tag position notifying: aRequestor. ex return: false]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 11/25/2009 18:27'! acceptScannerCode: aStringOrAText notifying: aRequestor SmaCCScannerParser parse: aStringOrAText onError: [:aString :position | | morph | self tabList selectedPageIndex: 1. self displayError: aString at: position notifying: aRequestor. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:13'! acceptTestCode: aStringOrAText notifying: aRequestor | class | class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false]. ^ self parse! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:16'! addButtonsToTestPage: aTestPage | aParserButton aParserInspectButton aParserExploreButton | aParserButton := PluggableButtonMorph on: self getState: nil action: #parse. aParserButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse'. aParserInspectButton := PluggableButtonMorph on: self getState: nil action: #parseAndInspect. aParserInspectButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and inspect'. aParserExploreButton := PluggableButtonMorph on: self getState: nil action: #parseAndExplore. aParserExploreButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and explore'. aTestPage addMorph: aParserButton fullFrame: (LayoutFrame fractions: (0 @ 1 corner: 0.33 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserInspectButton fullFrame: (LayoutFrame fractions: (0.33 @ 1 corner: 0.66 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserExploreButton fullFrame: (LayoutFrame fractions: (0.66 @ 1 corner: 1 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:18'! addCheckBoxesToCompilePage: aCompilePage #((toggleIgnoreCase ignoreCase 'Ignore Case') (toggleGenerateDefinitionComments generateDefinitionComments 'Generate definition comments') (toggleGenerateSymbolComments generateSymbolComments 'Generate symbol comments') (toggleGenerateItemSetComments generateItemSetComments 'Generate item set comments')) withIndexDo: [ :each :index | | checkbox | checkbox := self theme newCheckboxIn: World for: self getSelected: each second setSelected: each first getEnabled: nil label: each third help: nil. checkbox position: 10 @ 35 + (index * (0 @ 20)). aCompilePage addMorph: checkbox ]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:30'! addClassSelectorsToCompilePage: aCompilePage | aScannerLabel aParserLabel | aScannerLabel := 'Scanner class:' asMorph position: 10 @ 10. aParserLabel := 'Parser class:' asMorph position: 10 @ 30. findScannerClassButton := PluggableButtonMorph on: self getState: nil action: #findScannerClass. findScannerClassButton label: ' ... '; position: 410 @ 6. findParserClassButton := PluggableButtonMorph on: self getState: nil action: #findParserClass. findParserClassButton label: ' ... '; position: 410 @ 26. scannerClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 8. scannerClassMorph on: #keyStroke send: #updateWindowLabel to: self. scannerClassMorph addDependent: self. parserClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 28. parserClassMorph on: #keyStroke send: #updateWindowLabel to: self. parserClassMorph addDependent: self. {aScannerLabel. aParserLabel. scannerClassMorph. parserClassMorph. findScannerClassButton. findParserClassButton} do: [:e | aCompilePage addMorph: e]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 23:21'! addCompileButtonsToCompilePage: aCompilePage | aLALRButton aLR1Button | aLALRButton := PluggableButtonMorph on: self getState: nil action: #compileLALR1. aLALRButton label: 'Compile LALR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 10 @ 140. aCompilePage addMorph: aLALRButton. aLR1Button := PluggableButtonMorph on: self getState: nil action: #compileLR1. aLR1Button label: 'Compile LR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 150 @ 140. aCompilePage addMorph: aLR1Button! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'apl 2/20/2003 16:23'! addMessageBoxToCompilePage: aCompilePage aCompilePage addMorph: ('Messages:' asMorph position: 10 @ 180; yourself). self conflictTextMorph: (PluggableTextMorph on: self text: #conflicts accept: nil readSelection: nil menu: nil). aCompilePage addMorph: (self conflictTextMorph) fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (10 @ 200 corner: -10 @ -10))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:15'! addTextToTestPage: aTestPage | aTestText | testCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptTestCode:notifying:. aTestText := testCodeHolder contentsMorph. aTestText hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. aTestPage addMorph: aTestText fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ -25))! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:14'! choose: aString from: aCollection | choice | choice := UIManager default chooseFrom: aCollection title: aString withCRs. choice > 0 ifTrue: [^ aCollection at: choice]. ^ nil! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:31'! compile: aSymbol | grammar stream oldIgnoreCase oldCharacterSize parserCompiler | (self scannerClassString isEmpty or: [self parserClassString isEmpty]) ifTrue: [^ UIManager default inform: 'Both classes are not specified']. Cursor read showWhile: [self verifySyntax ifFalse: [^ self]]. Cursor wait showWhile: [oldIgnoreCase := SmaCCGrammar ignoreCase. oldCharacterSize := SmaCCGrammar maximumCharacterValue. [SmaCCGrammar ignoreCase: self ignoreCase; maximumCharacterValue: 255. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self scannerText andParser: self parserText; scannerClass: self scannerClassString; parserClass: self parserClassString. grammar := parserCompiler grammar. grammar type: aSymbol. stream := WriteStream on: Text new. [parserCompiler createChanges. self generateDefinitionComments ifTrue: [parserCompiler compileDefinitionComments]. self generateSymbolComments ifTrue: [parserCompiler compileSymbolComment]. self generateItemSetComments ifTrue: [parserCompiler compileItemSetsComment]. parserCompiler compileChanges] on: SmaCCCompilationNotification do: [:ex | (ShowPrecedenceConflicts or: [('*precedence*' match: ex messageText) not]) ifTrue: [stream nextPutAll: '-------------------------\' withCRs asText , ex messageText asText allBold; cr; cr; nextPutAll: ex description; cr; nextPutAll: ex tag; cr; cr.]. ex pass]. self conflicts: stream contents. self testText string trimBoth notEmpty ifTrue: [self testCodeHolder hasUnacceptedEdits: true]] ensure: [SmaCCGrammar ignoreCase: oldIgnoreCase; maximumCharacterValue: oldCharacterSize]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 2/15/2003 12:55'! compileLALR1 self compile: #LALR1! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/18/2003 14:41'! compileLR1 self compile: #LR1! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22'! conflictTextMorph ^conflictTextMorph! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22'! conflictTextMorph: anObject conflictTextMorph := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:00'! conflicts conflicts isNil ifTrue: [conflicts:=String new]. ^conflicts! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:35'! conflicts: aString conflicts := aString. self changed: #conflicts! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 08:57'! createCompilePage | aCompilePage | aCompilePage := (Morph new) layoutPolicy: ProportionalLayout new; hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. self tabList addPage: (self tabList newContentMorph addMorph: aCompilePage; yourself) label: 'Compile'. self addClassSelectorsToCompilePage: aCompilePage; addCompileButtonsToCompilePage: aCompilePage; addCheckBoxesToCompilePage: aCompilePage; addMessageBoxToCompilePage: aCompilePage! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50'! createParserPage | aParserPage | parserCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptParserCode:notifying:. aParserPage := parserCodeHolder contentsMorph. aParserPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aParserPage; yourself) label: 'Parser'.! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50'! createScannerPage | aScannerPage | scannerCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptScannerCode:notifying:. aScannerPage := scannerCodeHolder contentsMorph. aScannerPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aScannerPage; yourself) label: 'Scanner'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:13'! createTabbedPalette self tabList: (self theme newTabGroupIn: World for: #()). self mainWindow addMorph: self tabList frame: (0 @ 0 corner: 1 @ 1)! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:52'! createTestPage | aTestPage | aTestPage := (Morph new) hResizing: #spaceFill; vResizing: #spaceFill; layoutPolicy: ProportionalLayout new; color: Color transparent; yourself. self addTextToTestPage: aTestPage. self addButtonsToTestPage: aTestPage. self tabList addPage: (self tabList newContentMorph addMorph: aTestPage; yourself) label: 'Test'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:49'! createTutorialPage | aTutorialPage | tutorialTextHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: nil. aTutorialPage := tutorialTextHolder contentsMorph. tutorialTextHolder acceptContents: self tutorialText. tutorialTextHolder changed: #contents. aTutorialPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aTutorialPage; yourself) label: 'Tutorial'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 1/8/2007 23:12'! defaultBackgroundColor ^ Color tan! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/20/2003 18:20'! defaultWindowLabelPrefix ^ 'SmaCCParserGenerator'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 20:22'! displayError: aString at: position notifying: aRequestor aRequestor selectFrom: position to: position - 1. aRequestor replaceSelectionWith: (Text string: aString , '->' attribute: TextEmphasis bold). aRequestor setSelection: (position to: position + aString size + 1)! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! findParserClass | className class text | self scannerClassString isEmpty ifTrue: [^ UIManager default inform: 'Undefined scanner class']. className := self choose: 'What class do you want to use?' from: (SmaCCParser allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [parserClassMorph hResizing: #rigid. parserClassMorph newContents: ''; newContents: className. parserClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #parserDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #parserDefinitionComment). self parserText: text]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! findScannerClass | className class text | className := self choose: 'What class do you want to use?' from: (SmaCCScanner allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [scannerClassMorph newContents: ''; newContents: className. scannerClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #scannerDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #scannerDefinitionComment). self scannerText: text]]! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateDefinitionComments generateDefinitionComments isNil ifTrue: [generateDefinitionComments:=true]. ^generateDefinitionComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateItemSetComments generateItemSetComments isNil ifTrue: [generateItemSetComments:=false]. ^generateItemSetComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateSymbolComments generateSymbolComments isNil ifTrue: [generateSymbolComments:=false]. ^generateSymbolComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:26'! ignoreCase ignoreCase isNil ifTrue: [ignoreCase:=false]. ^ignoreCase! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 11/25/2009 18:18'! initialExtent ^ 750 @ 650! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16'! initialize mainWindow := StandardWindow labelled: self defaultWindowLabelPrefix. mainWindow model: self. self createTabbedPalette. self createScannerPage. self createParserPage. self createCompilePage. self createTestPage. self createTutorialPage. self updateWindowLabel. self tabList selectedPageIndex: 3! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 2/15/2003 12:58'! mainWindow ^mainWindow! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16'! openInWorld self mainWindow openInWorld! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 09:47'! paneColorToUse ^Color blue muchLighter! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 15:52'! parse self parseAndEvaluate: [:each | ^ true]. ^ false! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! parseAndEvaluate: aBlock | class | self testCodeHolder acceptContents: self testText. self testCodeHolder changed: #contents. class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false] ifFalse: [Cursor wait showWhile: [aBlock value: (class parse: self testText onError: [:aString :position | self displayError: aString at: position notifying: self testCodeHolder contentsMorph. self testCodeHolder hasUnacceptedEdits: true. ^ false])]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'md 4/3/2003 14:03'! parseAndExplore ^self parseAndEvaluate: [:each | each explore] ! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/18/2003 20:01'! parseAndInspect ^self parseAndEvaluate: [:each | each inspect] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:47'! parserClass | classname | classname := self parserClassString asSymbol. ^classname notEmpty ifTrue: [Smalltalk at: classname] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:21'! parserClassString ^parserClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43'! parserCodeHolder ^parserCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43'! parserCodeHolder: anObject parserCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:53'! parserText ^ self parserCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:25'! parserText: text self parserCodeHolder contents: text. self parserCodeHolder contentsMorph setText: text. ! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'mga 1/18/2003 14:42'! removeCommentedPartOf: aString | inStream outStream | inStream := ReadStream on: aString. outStream := WriteStream on: String new. inStream upTo: $". [inStream atEnd] whileFalse: [(inStream peekFor: $") ifTrue: [outStream nextPut: $"]. outStream nextPutAll: (inStream upTo: $")]. ^ outStream contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:20'! scannerClassString ^scannerClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22'! scannerCodeHolder ^scannerCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22'! scannerCodeHolder: anObject scannerCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/19/2003 09:55'! scannerText ^ self scannerCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:43'! scannerText: text self scannerCodeHolder contents: text. self scannerCodeHolder contentsMorph setText: text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:32'! tabList ^tabList! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 13:40'! tabList: anObject tabList := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39'! testCodeHolder ^testCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39'! testCodeHolder: anObject testCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 19:36'! testText ^ self testCodeHolder contentsMorph text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:12'! theme ^ UITheme current! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25'! toggleGenerateDefinitionComments generateDefinitionComments:=self generateDefinitionComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28'! toggleGenerateItemSetComments generateItemSetComments:=self generateItemSetComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28'! toggleGenerateSymbolComments generateSymbolComments:=self generateSymbolComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25'! toggleIgnoreCase ignoreCase:= self ignoreCase not! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 11:15'! tutorialText ^self class comment! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/20/2003 18:14'! update: anObjectOrASymbol (anObjectOrASymbol isKindOf: Symbol) ifTrue: [(self respondsTo: anObjectOrASymbol) ifTrue: [self perform: anObjectOrASymbol]]. super update: anObjectOrASymbol! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 1/8/2007 22:58'! updateWindowLabel | scannerLabel parserLabel | scannerLabel := self scannerClassString isEmpty ifFalse: [self scannerClassString] ifTrue: ['Undefined']. parserLabel := self parserClassString isEmpty ifFalse: [self parserClassString] ifTrue: ['Undefined']. ^ self mainWindow setLabel: self defaultWindowLabelPrefix , ': ' , scannerLabel , '/' , parserLabel! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:30'! verifyParser | parserCode | parserCode := self parserCodeHolder contentsMorph text. parserCode string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Parser code'. self tabList selectedPageIndex: 2. ^ false]. self parserCodeHolder hasUnacceptedEdits ifTrue: [(self acceptParserCode: parserCode notifying: self parserCodeHolder contentsMorph) ifTrue: [self parserCodeHolder acceptContents: parserCode. self parserCodeHolder changed: #contents] ifFalse: [^ false]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:29'! verifyScanner | scannerText | scannerText := self scannerCodeHolder contentsMorph text. scannerText string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Scanner code'. self tabList selectedPageIndex: 1. ^ false]. self scannerCodeHolder hasUnacceptedEdits ifTrue: [(self acceptScannerCode: scannerText notifying: self scannerCodeHolder contentsMorph) ifTrue: [self scannerCodeHolder acceptContents: scannerText. self scannerCodeHolder changed: #contents. ^ true]. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 10:37'! verifySyntax self verifyScanner ifFalse: [^ false]. self verifyParser ifFalse: [^false]. ^ true! ! !SmaCCRHS commentStamp: 'jmb' prior: 83195346! SmaCCRHS represents the right hand side of the production. Instance variables: collection the collection of symbols that represent the rhs grammar the grammar that the production is in variableNames the name of each symbol in the rhs. These names can be used in the {} code blocks.! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCRHS ^self class = aSmaCCRHS class and: [collection = aSmaCCRHS collection]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! add: aSmaCCSymbol collection add: aSmaCCSymbol! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! at: anInteger ^collection at: anInteger! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19'! collection ^collection! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 1/7/2007 11:08'! compileSourceFor: aSmaCCSymbol in: aClass | action rewriter parseTree methodName | action := self reduceAction. action isNil ifTrue: [^self defaultReduceAction]. parseTree := RBParser parseExpression: action onError: [:s :p | SmaCCCompilationNotification new tag: aSmaCCSymbol name , ' : ' , self printString , '\\' withCRs , action; signal: 'Invalid Smalltalk code in reduction rule'. ^self defaultReduceAction]. (parseTree isLiteral and: [parseTree value isSymbol and: [parseTree value numArgs <= 1 and: [aClass definesMethod: parseTree value]]]) ifTrue: [^parseTree value]. rewriter := self parseTreeRewriter. rewriter executeTree: parseTree. parseTree := rewriter tree. methodName := ('reduceActionFor' , aSmaCCSymbol safeMethodName , (aSmaCCSymbol positionOf: self) printString , ':') asSymbol. parseTree isSequence ifFalse: [parseTree := RBSequenceNode statements: (Array with: parseTree)]. parseTree := RBMethodNode selector: methodName arguments: (Array with: (RBVariableNode named: 'nodes')) body: parseTree. parseTree addReturn. aClass compile: parseTree formattedCode classified: 'generated-reduction actions'. ^methodName! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19'! defaultReduceAction ^#reduceFor:! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! do: aBlock collection do: aBlock! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! firstTerminals | items | collection isEmpty ifTrue: [^Set with: SmaCCSymbol empty]. items := Set new. 1 to: collection size do: [:index | items addAll: (collection at: index) firstTerminals. (items includes: SmaCCSymbol empty) ifTrue: [index < collection size ifTrue: [items remove: SmaCCSymbol empty]] ifFalse: [^items]]. ^items! ! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^self class hash bitXor: (collection hash bitShift: 14)! ! !SmaCCRHS methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize collection := OrderedCollection new. reduceAction := nil. variableNames := Dictionary new! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nameLastItem: aString variableNames at: aString put: collection size! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 11/25/2009 18:01'! parseTreeRewriter | rewriter | rewriter := RBParseTreeRewriter new. 1 to: self size do: [:i | rewriter replace: i printString storeString with: '(nodes at: ' , i printString , ')']. variableNames keysAndValuesDo: [:key :value | rewriter replace: key with: '(nodes at: ' , value printString , ')']. ^rewriter! ! !SmaCCRHS methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream ^collection do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! reduceAction ^reduceAction! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! reduceAction: anObject reduceAction := anObject! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^collection size! ! !SmaCCRegularExpressionNode commentStamp: '' prior: 83195791! SmaCCRegularExpressionNode represents a regular expression. The scanner is represented by a regular expression. These are the initial objects created in producing the scanner. From these nodes, we create a directed graph and then we compile the graph. Subclasses must implement the following messages: accessing possibleMatchesSize private asNFAStartingWith: possibleMatchesDo:on: Instance Variables: action the actions to be performed when we find a match position the position of the RE in the scanner. If we have multiple matches, we prefer the ones listed first.! !SmaCCCharacterRENode commentStamp: 'jmb' prior: 83196458! SmaCCCharacterRENode represents a regular expression that matches one of a set of characters. Instance Variables: characters The characters that this node can accept. Note that there are no duplicates and all characters are sorted. ! !SmaCCCharacterRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! characters: aString ^(self new) characters: (self sortedCharactersFor: aString); yourself! ! !SmaCCCharacterRENode class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50'! sortedCharactersFor: aString | characters stream | stream := WriteStream with: String new. SmaCCGrammar ignoreCase ifTrue: [aString do: [:each | stream nextPut: each asUppercase; nextPut: each asLowercase]] ifFalse: [stream nextPutAll: aString]. characters := stream contents asSortedCollection: [:a :b | a asInteger < b asInteger]. stream := WriteStream with: String new. characters inject: nil into: [:sum :each | sum = each ifFalse: [stream nextPut: each]. each]. ^stream contents! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. startNode addEdgeTo: endNode onCharacters: characters. ^endNode! ! !SmaCCCharacterRENode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! canMergeWith: aSmaCCRegularExpressionNode ^self class = aSmaCCRegularExpressionNode class and: [characters notNil and: [aSmaCCRegularExpressionNode characters notNil and: [self action = aSmaCCRegularExpressionNode action]]]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! characters ^characters! ! !SmaCCCharacterRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! characters: aString characters := aString! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! matchingCharacters ^SmaCCGrammar ignoreCase ifTrue: [characters reject: [:each | each isLowercase]] ifFalse: [characters]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self matchingCharacters do: [:each | aStream nextPut: each. aBlock value. aStream skip: -1]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^self matchingCharacters size! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: 'lr 11/25/2009 18:29'! printCharacter: aCharacter on: aStream (aCharacter asInteger between: 32 and: 126) ifTrue: [^aStream nextPut: aCharacter]. aStream nextPutAll: '\x'. aStream nextPutAll: (aCharacter asInteger printPaddedWith: $0 to: 2 base: 16)! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream | allCharacters | characters size = 1 ifTrue: [^self printCharacter: characters first on: aStream]. aStream nextPut: $[. allCharacters := characters. characters size > 128 ifTrue: [aStream nextPut: $^. allCharacters := ((0 to: SmaCCGrammar maximumCharacterValue) collect: [:each | Character value: each]) reject: [:each | characters includes: each]]. allCharacters do: [:each | self printCharacter: each on: aStream]. aStream nextPut: $]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode (self canMergeWith: aSmaCCRegularExpressionNode) ifFalse: [^super | aSmaCCRegularExpressionNode]. characters := String withAll: ((characters , aSmaCCRegularExpressionNode characters) asSet asSortedCollection: [:a :b | a asInteger < b asInteger]). ^self! ! !SmaCCOrRENode commentStamp: 'jmb' prior: 83196773! SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative. Instance Variables: nodes our possible choices! !SmaCCOrRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. nodes do: [:each | | componentStart | componentStart := SmaCCNode new. startNode addEdgeTo: componentStart. (each asNFAStartingWith: componentStart) addEdgeTo: endNode]. ^endNode! ! !SmaCCOrRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! nodes: aCollection nodes := aCollection! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream nodes do: [:each | | pos | pos := aStream position. each possibleMatchesDo: aBlock on: aStream. aStream position: pos]! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^nodes inject: 0 into: [:sum :each | sum + each possibleMatchesSize]! ! !SmaCCOrRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. nodes := nodes copy! ! !SmaCCOrRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPut: $(. nodes do: [:each | each printOn: aStream] separatedBy: [aStream nextPutAll: ' | ']. aStream nextPut: $)! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super | aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! , aSmaCCRegularExpressionNode ^SmaCCSequenceRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action ^action! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action: aString action := aString! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addState: aSymbol states add: aSymbol! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! addStateTransitionsTo: aSmaCCNode | endNode | states isEmpty ifTrue: [^aSmaCCNode]. endNode := SmaCCNode new. aSmaCCNode addEdgeTo: endNode onStates: states asSortedCollection asArray. ^endNode! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addStates: aCollection states addAll: aCollection! ! !SmaCCRegularExpressionNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asDFA | startNode | startNode := SmaCCNode new. self asNFAStartingWith: startNode. ^startNode asDFA! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isKeywordLiteral ^self possibleMatchesSize < 50 and: [self possibleMatchesDo: [:each | each size > 1 ifTrue: [^true]]. false]! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! position ^position! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! position: anInteger position := anInteger! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatches | matches | matches := OrderedCollection new. self possibleMatchesDo: [:each | matches add: each]. ^matches! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock | stream | stream := WriteStream with: String new. self possibleMatchesDo: [aBlock value: stream contents] on: stream! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeat ^SmaCCRepeatingRENode component: self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeatFor: minimum to: maximum ^SmaCCRepeatingRENode component: self minimum: minimum maximum: maximum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeatForAtLeast: minimum ^SmaCCRepeatingRENode component: self minimum: minimum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! states ^states! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode ^SmaCCOrRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! !SmaCCRepeatingRENode commentStamp: 'jmb' prior: 83196997! SmaCCRepeatingRENode represents a repeating node in a regular expression. Instance Variables: maximumMatches the minimum number of matches required minimumMatches the maximum number of matches allowed. An infinite amount of matches is represented by (SmaCCRepeatingRENode finiteInfinity). node what we need to match! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode ^self component: aSmaCCRegularExpressionNode minimum: 0! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: anInteger ^self component: aSmaCCRegularExpressionNode minimum: anInteger maximum: self finiteInfinity! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger ^(self new) component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger; yourself! ! !SmaCCRepeatingRENode class methodsFor: 'constants' stamp: ' 6/1/07 21:19'! finiteInfinity "The number that we consider to be 'infinite'" ^2147483648! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode start | start := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. minimumMatches timesRepeat: [start := node asNFAStartingWith: start]. start addEdgeTo: endNode. maximumMatches < self class finiteInfinity ifTrue: [maximumMatches - minimumMatches timesRepeat: [start := node asNFAStartingWith: start. start addEdgeTo: endNode]] ifFalse: [(node asNFAStartingWith: start) addEdgeTo: start]. ^endNode! ! !SmaCCRepeatingRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger node := aSmaCCRegularExpressionNode. minimumMatches := minInteger. maximumMatches := maxInteger! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 0! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream startingAt: anInteger (anInteger between: minimumMatches and: maximumMatches) ifTrue: [aBlock value]. anInteger < maximumMatches ifTrue: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCRepeatingRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^node possibleMatchesSize * (maximumMatches - minimumMatches + 1)! ! !SmaCCRepeatingRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream node printOn: aStream. maximumMatches = (1 bitShift: 31) ifTrue: [minimumMatches = 0 ifTrue: [^aStream nextPut: $*]. minimumMatches = 1 ifTrue: [^aStream nextPut: $+]. ^aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPutAll: ',}']. aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPut: $,; nextPutAll: maximumMatches printString; nextPut: $}! ! !SmaCCSequenceRENode commentStamp: 'jmb' prior: 83197418! SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together. Instance Variables: nodes our children nodes in left-to-right order! !SmaCCSequenceRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! , aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super , aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. (nodes inject: startNode into: [:sum :each | each asNFAStartingWith: sum]) addEdgeTo: endNode. ^endNode! ! !SmaCCSequenceRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! nodes: aCollection nodes := aCollection! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 1! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream startingAt: anInteger | node | node := nodes at: anInteger. nodes size = anInteger ifTrue: [node possibleMatchesDo: aBlock on: aStream] ifFalse: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^nodes inject: 1 into: [:sum :each | sum * each possibleMatchesSize]! ! !SmaCCSequenceRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. nodes := nodes copy! ! !SmaCCSequenceRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream nodes do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! !SmaCCScannerCompiler commentStamp: 'jmb' prior: 83197713! SmaCCScannerCompiler represents the compiler for the scanner part of the parser. Instance Variables: grammar the grammar that defines the scanner scannerClass the class to compile the scanner into scannerDefinitionString the string that defines the scanner! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:42'! addActions self symbols keysAndValuesDo: [:index :each | each regularExpression ifNotNilDo: [:eachRegex | eachRegex action: index ]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addActionsFrom: aRegularExpression to: aKeywordMap at: states ^states do: [:state | state ~= aRegularExpression action ifTrue: [aRegularExpression possibleMatchesDo: [:string | (aKeywordMap at: state ifAbsentPut: [Dictionary new]) at: string put: aRegularExpression action]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addNormalSymbols grammar symbols: (self symbols asSortedCollection: self filePositionSortBlock)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! addSpecialSymbols grammar tokens keysDo: [:each | (self scannerActionFor: each) notNil ifTrue: [grammar terminalSymbolNamed: each]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addSpecificREsWithoutActionsTo: aRegularExpression | dfa regex | regex := aRegularExpression. dfa := regex isNil ifTrue: [nil] ifFalse: [regex asDFA]. self specificRegularExpressionsDo: [:each | | actions | actions := dfa isNil ifTrue: [nil] ifFalse: [dfa actionForSpecificRegularExpression: each]. actions isNil ifTrue: [regex isNil ifTrue: [regex := each] ifFalse: [regex := regex | each]]]. ^regex! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! combinedGeneralRegexes | combinedRegex | combinedRegex := nil. self generalRegularExpressionsDo: [:each | combinedRegex := combinedRegex isNil ifTrue: [each] ifFalse: [combinedRegex | each]]. ^combinedRegex! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileEmptySymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'emptySymbolTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol empty) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileErrorSymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'errorTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol error) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileIgnoreCaseMethod SmaCCGrammar ignoreCase ifTrue: [scannerClass compile: 'keywordFor: aString ^aString asUppercase' classified: #'generated-scanner']! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00'! compileKeywordInitializerUsing: keywordMapDictionary selectorMap: selectorMapDictionary | stream dataStream | keywordMapDictionary isEmpty ifTrue: [^self]. stream := WriteStream with: String new. stream nextPutAll: 'initializeKeywordMap'. stream nextPutAll: ' keywordMap := Dictionary new. '. dataStream := WriteStream with: Array new. keywordMapDictionary keysAndValuesDo: [:key :value | value keys asSortedCollection do: [:each | dataStream nextPut: (Array with: (selectorMapDictionary at: key ifAbsent: [key]) with: each with: (selectorMapDictionary at: (value at: each) ifAbsent: [value at: each]))]]. stream nextPutAll: '#('; cr. dataStream contents do: [:each | stream nextPutAll: '#('. each do: [:item | item storeOn: stream] separatedBy: [stream nextPut: $ ]. stream nextPut: $)] separatedBy: [stream cr]. stream nextPut: $). stream nextPutAll: ' do: [:each | (keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last]. ^keywordMap'. scannerClass theMetaClass compile: (RBParser parseMethod: stream contents) formattedCode classified: #'generated-initialization'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileMethodsFor: regex withSelectors: selectorMap | keywordmap dfa | dfa := regex asDFA. keywordmap := self computeKeywordMapFor: dfa. self compileKeywordInitializerUsing: keywordmap selectorMap: selectorMap. dfa compileInto: scannerClass usingSelectorMap: selectorMap. self compileEmptySymbolTokenId. self compileErrorSymbolTokenId. self compileIgnoreCaseMethod! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileScanner | regex | self addSpecialSymbols. self addNormalSymbols. self addActions. self compileTokenIdMethods. regex := self addSpecificREsWithoutActionsTo: self combinedGeneralRegexes. self compileMethodsFor: regex withSelectors: self computeSelectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00'! compileScannerDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (scannerDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". self scannerClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileTokenIdMethodFor: aTerminalSymbol | stream | stream := WriteStream with: String new. stream nextPutAll: aTerminalSymbol safeMethodName; nextPutAll: 'Id'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: aTerminalSymbol) printString. scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileTokenIdMethods (self symbols select: [:each | each createIdMethod]) do: [:each | self compileTokenIdMethodFor: each]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! computeKeywordMapFor: dfa | keywordmap | keywordmap := Dictionary new. self specificRegularExpressionsDo: [:each | | actions | actions := dfa actionForSpecificRegularExpression: each. actions isNil ifFalse: [self addActionsFrom: each to: keywordmap at: actions]]. ^keywordmap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:43'! computeSelectorMap | selectorMap | selectorMap := Dictionary new. self symbols keysAndValuesDo: [:index :each | (self scannerActionFor: each name) ifNotNilDo: [:selector | selectorMap at: index put: selector]]. ^selectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! filePositionSortBlock ^ [:a :b | | aRegex bRegex | aRegex := a regularExpression. bRegex := b regularExpression. bRegex isNil or: [aRegex notNil and: [(aRegex position ifNil: [0]) < (bRegex position ifNil: [0])]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! generalRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifFalse: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! grammar: aGrammar grammar := aGrammar! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! parseTokens grammar scannerDefinition: (SmaCCScannerParser parse: scannerDefinitionString)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! regularExpressionsDo: aBlock self symbols do: [:each | each regularExpression ifNotNil: aBlock]! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'ThierryGoubier 5/14/2012 15:41'! scannerActionFor: aString | selector | aString size > 2 ifFalse: [ ^ nil ]. selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. ^ ((scannerClass definesMethod: selector) and: [ (Object canUnderstand: selector) not and: [ ((SmaCCScanner canUnderstand: selector) not or: [ #(#comment #whitespace) includes: selector ]) and: [ selector numArgs = 0 ] ] ]) ifTrue: [ selector ] ifFalse: [ nil ]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerClass ^scannerClass! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerClass: anObject scannerClass := anObject! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerDefinitionString: aString scannerDefinitionString := aString! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! specificRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifTrue: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! symbols ^grammar symbols! ! !SmaCCScannerDefinition commentStamp: '' prior: 83198080! SmaCCScannerDefinition is the parsed representation of the scanner. It contains the tokens and states for the scanner. Instance Variables: excludeStates exclusive states (when we are in one of these, then we shouldn't try to parse the default tokens) states states in the scanner -- if no states are specified, then this will only contain #default tokens dictionary mapping token names to their regular expressions ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addExcludeState: aSymbol excludeStates add: aSymbol. self addState: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addState: aSymbol states add: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addToken: aSmaCCRENode withName: aString tokens at: aString put: aSmaCCRENode! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! defaultState ^#default! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includesTokenNamed: aString ^tokens includesKey: aString! ! !SmaCCScannerDefinition methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize tokens := Dictionary new. states := Set with: self defaultState. excludeStates := Set new! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isExcludeState: aSymbol ^excludeStates includes: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nonExcludeStates | nonExcludeStates | nonExcludeStates := states reject: [:each | self isExcludeState: each]. nonExcludeStates add: self defaultState. ^nonExcludeStates! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! states ^states! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokenNamed: aString ^tokens at: aString! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokenNamed: aString ifAbsentPut: aBlock ^tokens at: aString ifAbsentPut: aBlock! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokens ^tokens! ! !SmaCCSymbol commentStamp: '' prior: 83198593! SmaCCSymbol is an abstract class that represents a symbol in the grammar. Subclasses must implement the following messages: accessing calculateFirstTerminals testing isTerminal Instance Variables: firstItems the first terminals that can be produced from us name our name precedence our precedence (in case of shift/reduce conflicts) ! !SmaCCNonTerminalSymbol commentStamp: 'jmb' prior: 83199050! SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar. Instance Variables: productions our rhs' for the symbol! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addProduction: aSmaCCRHS productions add: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! calculateFirstTerminals | initialSize | initialSize := firstItems size. productions isEmpty ifTrue: [firstItems add: self class empty] ifFalse: [productions do: [:each | firstItems addAll: each firstTerminals]]. ^initialSize ~= firstItems size! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEmpty ^productions isEmpty! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^false! ! !SmaCCNonTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString super name: aString. productions := OrderedCollection new! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! positionOf: aSmaCCRHS ^productions indexOf: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! productionsDo: aBlock productions do: aBlock! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^productions size! ! !SmaCCStartingSymbol commentStamp: 'jmb' prior: 83199270! SmaCCStartingSymbol is the starting symbol in the grammar. A grammar can only have one starting symbol, but it can have may different starting item sets.! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! asLRItemSet | itemSet | itemSet := SmaCCItemSet new. productions do: [:each | itemSet add: (SmaCCLR1Item symbol: self rhs: each follow: ((SmaCCSymbolSet new) add: self class empty; yourself))]. ^itemSet! ! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! compileName ^(productions first at: 1) safeMethodName! ! !SmaCCStartingSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isStartingSymbol ^true! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! empty EmptySymbol isNil ifTrue: [EmptySymbol := SmaCCTerminalSymbol name: 'E O F']. ^EmptySymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! error ErrorSymbol isNil ifTrue: [ErrorSymbol := SmaCCTerminalSymbol name: 'error']. ^ErrorSymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! name: aString ^(self new) name: aString; yourself! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! releaseObjects EmptySymbol := nil. SentinelSymbol := nil. ErrorSymbol := nil! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! sentinel SentinelSymbol isNil ifTrue: [SentinelSymbol := SmaCCTerminalSymbol name: 'S e n t i n e l']. ^SentinelSymbol! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! calculateFirstTerminals ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod ^false! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! firstTerminals ^firstItems! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! isEmptySymbol ^self = self class empty! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isStartingSymbol ^false! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! name ^name! ! !SmaCCSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString name := aString. firstItems := Set new! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence ^precedence! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence: anInteger precedence := anInteger! ! !SmaCCSymbol methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: name! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! productionsDo: aBlock! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression ^nil! ! !SmaCCSymbol methodsFor: 'accessing' stamp: 'lr 1/7/2007 10:57'! safeMethodName ^self unsafeMethodName collect: [:each | each isAlphaNumeric ifTrue: [each] ifFalse: [$X]]! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^0! ! !SmaCCSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! unsafeMethodName ^self printString! ! !SmaCCTerminalSymbol commentStamp: 'jmb' prior: 83199476! SmaCCTerminalSymbol represents a terminal symbol in our grammar. Instance Variables: createIdMethod should we create a symbolNameId method for this symbol. regularExpression our regular expression that we must match for this terminal symbol! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! calculateFirstTerminals ^false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod ^createIdMethod! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod: aBoolean createIdMethod := aBoolean! ! !SmaCCTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^true! ! !SmaCCTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString super name: aString. firstItems add: self. createIdMethod := false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression ^regularExpression! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression: aSmaCCRegularExpressionNode regularExpression := aSmaCCRegularExpressionNode! ! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! unsafeMethodName ^name copyFrom: 2 to: name size - 1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testDuplicateLoop | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 1. node3 := SmaCCNode new. node3 action: 1. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 1. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. self assert: node1 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testNoDuplicates | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 3. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 3. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'a'. node3 := node2 transitions first to. self deny: node1 = node3. self deny: node2 = node3. self assert: node3 transitions size = 1. self assert: (node3 action includes: 3). self assert: node3 transitions first transitionObjects = 'a'. self assert: node3 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testSimpleDuplicateWithEdges | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node2 addEdgeTo: node1 onCharacters: 'c'. node3 addEdgeTo: node1 onCharacters: 'c'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'c'. self assert: node2 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testSimpleTerminalDuplicate | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions isEmpty. self assert: (node2 action includes: 2)! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testApplet JavaParser parse: '// Hello.java import java.applet.Applet; import java.awt.Graphics; public class Hello extends Applet { public void paint(Graphics gc) { gc.drawString("Hello, world!!", 65, 95); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30'! testEcho CParser parse: 'int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) { printf("%s", argv[i]); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30'! testHello CParser parse: 'main( ) { printf("Hello World\n"); }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:34'! testSelfParsing StParser parseMethod: (self class sourceCodeAt: thisContext selector)! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testServlet JavaParser parse: '// Hello.java import java.io.*; import javax.servlet.*; public class Hello extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter pw = response.getWriter(); pw.println("Hello, world!!"); pw.close(); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testStandAlone JavaParser parse: '// Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello, World!!"); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testSwing JavaParser parse: '// Hello.java (Java SE 5) import java.awt.BorderLayout; import javax.swing.*; public class Hello extends JFrame { public Hello() { super("hello"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); getContentPane().add(new JLabel("Hello, world!!")); pack(); } public static void main(String[] args) { new Hello().setVisible(true); } }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:32'! testTranscript StParser parseExpression: 'Transcript show: ''Hello World''; cr'! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addCRLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr with: Character lf)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addCRsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character lf)! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testEmptyLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '\\\')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testForwardPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testNoLines | stream index | stream := SmaCCLineNumberStream on: (ReadStream on: 'this is a test'). self assert: stream lineNumber = 1. index := 1. stream do: [:each | self assert: stream lineNumber = 1. index := index + 1. self assert: stream columnNumber = index]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testPositionCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream skip: -1. self assert: stream lineNumber = 4. self assert: stream columnNumber = 1. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 2. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !ParserGeneratorTest class methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:58'! packageNamesUnderTest ^ #('SmaCC' 'SmaCCDev')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! expressionParserString ^' %left "+" "-" ; %left "*" "/" ; %right "^" ; Expression: Expression ''first'' "+" Expression ''last'' {first + last} | Expression "-" Expression {''1'' - ''3''} | Expression "*" Expression {''1'' * ''3''} | Expression "/" Expression {''1'' / ''3''} | Expression "^" Expression {''1'' raisedTo: ''3''} | "(" Expression ")" {''2''} | {''1'' value asNumber};'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! expressionScannerString ^' : [0-9]+ (\. [0-9]+) ? ; : \s+;'! ! !ParserGeneratorTest methodsFor: 'private' stamp: 'lr 1/8/2007 21:49'! removeAllSelectorsFrom: aClass aClass selectors do: [ :each | aClass removeSelector: each ]. aClass organization removeEmptyCategories! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'ThierryGoubier 3/8/2013 17:00'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! !ParserGeneratorTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! supportsUnicodeStrings ^ [String with: (Character value: 16rFF00). true] on: Error do: [:ex | ex return: false]! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'lr 1/7/2007 11:19'! tearDown super tearDown. self removeAllSelectorsFrom: TestParser; removeAllSelectorsFrom: TestParser class; removeAllSelectorsFrom: TestScanner; removeAllSelectorsFrom: TestScanner class! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBadCharacterBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : [a-] ;' andParser: 'Start : ;'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBadSmalltalkBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : foo ;' andParser: 'Start : {self printOn: };'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBraceRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : <%%>;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBracketOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : [":"] begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileDefinitionComments; compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testComments | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : /* q */ /***/ /****/ a # b ;' andParser: '/* */ /***/ /****/ #this is a comment begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testCrLf | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \r? \n | \r ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String with: Character cr with: Character lf)). self should: [TestParser parse: (String with: Character cr with: Character cr)] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testErrorToken | parserCompiler countingBlock | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z]+; : \s+;' andParser: '%left "+"; Expression : | Expression "+" Expression {[Notification signal] on: Error do: [:ex | ex return: (Notification raise)]} | error "+" Expression ;'. parserCompiler compileInto: TestScanner andParser: TestParser. countingBlock := [:string | | count | count := 0. [[TestParser parse: string] on: Notification do: [:ex | count := count + 1. [ex resume] on: Error do: [:ex1 | ex isResumable: true. ex1 retry]]] on: SmaCCParserError do: [:ex | ex return]. count]. #(#('a + b + c' 2) #('+ a + b + c' 2) #('a + b +' 1) #('a + 1 / 2 + b + c + 3' 2) #('1 + 1 / 2 + b + c + 3' 1)) do: [:each | self assert: (countingBlock value: each first) = each last]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testErrors | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: '+3*4' onError: [:str :pos | position := pos]. self assert: position = 1. TestParser parseStream: (ReadStream on: '1+a+4') onError: [:str :pos | position := pos]. self assert: position = 3! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testExcludeScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %excludes a; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self should: [parser parse] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testExpressions #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '2 + 3 * 4 / 5 ^ 3 ^ 2') = (2 + (3 * 4 / (5 raisedTo: (3 raisedTo: 2)))). self assert: (TestParser parse: '1.0*2/3+4.0^2^3+3') = (1.0 * 2 / 3 + (4.0 raisedTo: (2 raisedTo: 3)) + 3). self assert: (TestParser parse: '(((1 + 2) * 3) ^ 2) ^ 3') = (((1 + 2) * 3 raisedTo: 2) raisedTo: 3)]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testIgnoreCaseKeywords | parserCompiler case | case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-z_]+ ; : \s+ ;' andParser: 'Start ::= "Foo" {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'FOo'). self deny: (TestParser parse: 'FoObAr ASDS')] ensure: [SmaCCGrammar ignoreCase: case]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitParserTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a'). self should: [TestParser parse: ' '] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitScannerTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : + ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'asdfssdafADSFS'). self should: [TestParser parse: ' asdf asdf'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitTokenPrecedence | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : . ;' andParser: 'A : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. 0 to: 255 do: [:each | self assert: (TestParser parse: (String with: (Character value: each)))]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testInvertedCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : [^a]+ ; : \s+ ;' andParser: 'begin : {0} | begin {''1'' + 1} | begin {''1'' - 1};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa') = 1. self assert: (TestParser parse: 'aaaa') = 2. self assert: (TestParser parse: 'a bab') = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testKeywords | parserCompiler size case | size := SmaCCGrammar maximumCharacterValue. case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. self supportsUnicodeStrings ifTrue: [SmaCCGrammar maximumCharacterValue: (2 raisedTo: 16) - 1]. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'Start ::= "Foo" "bar";'. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: 'FoObAr'] ensure: [SmaCCGrammar ignoreCase: case; maximumCharacterValue: size]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testLALRErrorHandler | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \s+ ;' andParser: 'Start : Foo "]" Foo ")"; Foo : "a" Bar ; Bar : "b" | error ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a ] a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a ) a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a b ] a ]'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testMultipleStartingPositions | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+;' andParser: '%start plus ; multiply: plus "*" plus {true}; plus: {false} | "+" {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a*a'). self assert: (TestParser parse: 'a+a*a'). self should: [TestParser parse: 'a+a'] raise: SmaCCParserError. self deny: (TestParser parse: 'a+a' startingAt: TestParser startingStateForplus). TestParser parse: 'a*a' startingAt: TestParser startingStateForplus onError: [:str :pos | position := pos]. self assert: position = 2! ! !ParserGeneratorTest methodsFor: 'testing' stamp: 'lr 1/6/2007 21:32'! testNodeAccess | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'start : "a" ''x'' { Array with: ''1'' value with: ''1'' value with: x value with: x value } ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a') = #( 'a' 'a' 'a' 'a' )! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testNonAssociativeTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+ ; : \s+ ;' andParser: '%left "and" ; %nonassoc "=" "<="; %left "+" ; expr : expr "=" expr {true} | expr "<=" expr {true} | expr "and" expr {true} | expr "+" expr {true} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a=b=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b<=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b+c=d'] raise: SmaCCParserError. self assert: (TestParser parse: 'a=b and c=d')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : ":" ? begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testParenthesesOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : (":" | "|") begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a | b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testPriority | parserCompiler | TestScanner compile: 'all ^self recordAndReportMatch: (Array with: self allId)'. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \{ | \< \% ; : .;' andParser: '%id ; begin : A {true} | All {false}; A : ; All: ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '{'). self assert: (TestParser parse: '<%'). self deny: (TestParser parse: '}')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRecursiveRule #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: 'Test: Test1 Recursive; Test1: {''1'' value}; Recursive: | Recursive "|" {''1'' add: ''3'' value; yourself};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: ((parserCompiler grammar nonTerminalSymbolNamed: 'Recursive') firstTerminals includes: (parserCompiler grammar keywordTerminalNamed: '"|"')). self assert: (TestParser parse: '2|3|4') = (OrderedCollection with: '2' with: '3' with: '4')]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReduceReduceConflict | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w ; : \s+ ;' andParser: 'begin : Foo {true} | Bar {false}; Foo : ; Bar : ;'. self assert: ( [parserCompiler compileInto: TestScanner andParser: TestParser. false] on: SmaCCCompilationNotification do: [:ex | ('*Reduce/Reduce*' match: ex messageText) ifTrue: [ex return: true] ifFalse: [ex resume: nil]])! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReduceRules | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z] ; : \s ;' andParser: ' Start ::= Chars {#liftFirstValue:}; Chars : WS A WS {#liftSecondValue:}; A : WS WS C {#liftLastValue:} | C WS {#liftLastValue:}; WS : {#nil}; C : {#stringValue:};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: ' a ') = nil. self assert: (TestParser parse: ' a ') = 'a'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatMultipleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|){1,2} ; : \s+ ;' andParser: 'begin : + ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a1 bb c44') collect: [:each | each value]) asArray = #('a1' 'bb' 'c44'). self assert: ((TestParser parse: 'aaaaa') collect: [:each | each value]) asArray = #('aaa' 'aa'). self should: [TestParser parse: ''] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : * ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatingCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : \w+ ; : \s+ ;' andParser: 'begin : {true} | begin {''1''} | begin {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa'). self deny: (TestParser parse: 'aaaa')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReuseCompositeToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] \d ; : aa | bb; : | ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'aa'). self assert: (TestParser parse: 'bb'). self assert: (TestParser parse: 'a4'). self should: [TestParser parse: 'ab'] raise: SmaCCParserError. self should: [TestParser parse: '4b'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReuseSimpleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_\\] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: '\')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %states a ; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self assert: parser parse! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testSimple | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a ;' andParser: 'begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testSpecialCharacters | parserCompiler | [String with: (Character value: 16rFF00)] on: Error do: [:ex | ^self]. "Unicode characters not supported" parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \x3g \x20 \xFF \xFF1 \xFF00 \cC;' andParser: 'begin ::= {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String withAll: (#(3 103 16r20 16rFF 16rFF1 16rFF00 2) collect: [:each | Character value: each])))! ! !SmaCCSymbolSet commentStamp: 'jmb' prior: 83199802! SmaCCSymbolSet represents a set of follow symbols in the LALR(1) item sets. Instance Variables: components other SmaCCSymbolSets that we depend on, we include all items in these sets also symbols our follow symbols! !SmaCCSymbolSet class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! basedOn: aSmaCCSymbolSet ^(self new) baseOn: aSmaCCSymbolSet; yourself! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! add: aSmaCCSymbol (symbols includes: aSmaCCSymbol) ifTrue: [^self]. symbols add: aSmaCCSymbol. self changed! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addAll: aCollection | oldSize | oldSize := symbols size. symbols addAll: aCollection. oldSize ~= symbols size ifTrue: [self changed]! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! addComponent: each (each = self or: [components includes: each]) ifTrue: [^self]. components add: each. each addDependent: self. self addAll: each symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! addComponentsFrom: aSmaCCSymbolSet aSmaCCSymbolSet components do: [:each | self addComponent: each]! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! allSatisfy: aBlock ^symbols allSatisfy: aBlock! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! baseOn: aSmaCCSymbolSet self addComponent: aSmaCCSymbolSet. self addAll: aSmaCCSymbolSet symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! components ^components! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includes: aSmaCCSymbol ^symbols includes: aSmaCCSymbol! ! !SmaCCSymbolSet methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 14:42'! initialize symbols := Set new. components := Set new! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCSymbolSet self addAll: aSmaCCSymbolSet symbols. self addComponentsFrom: aSmaCCSymbolSet! ! !SmaCCSymbolSet methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream symbols do: [:each | aStream nextPutAll: each printString] separatedBy: [aStream space]! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^symbols size! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols ^symbols! ! !SmaCCSymbolSet methodsFor: 'updating' stamp: 'lr 1/8/2007 14:47'! update: aSender (components includes: aSender) ifTrue: [self addAll: aSender symbols]! ! "SmaCCDev"! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83716453! scannerActionFor: aString | selector | aString size > 2 ifFalse: [^nil]. selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. ^((scannerClass definesMethod: selector) and: [(Object canUnderstand: selector) not and: [selector numArgs = 0]]) ifTrue: [selector] ifFalse: [nil]! ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'mga 2/15/2003 13:03'! windowColorSpecification "Answer a WindowColorSpec object that declares my preference" ^ WindowColorSpec classSymbol: self name asSymbol wording: self name asSymbol brightColor: #lightBlue pastelColor: #paleBlue helpMessage: 'Squeak port UI of SmaCC'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'AlainPlantec 12/10/2010 08:27' prior: 83673204! compile: aSymbol | grammar stream oldIgnoreCase oldCharacterSize parserCompiler | (self scannerClassString isEmpty or: [self parserClassString isEmpty]) ifTrue: [^ UIManager default inform: 'Both classes are not specified']. Cursor read showWhile: [self verifySyntax ifFalse: [^ self]]. Cursor wait showWhile: [oldIgnoreCase := SmaCCGrammar ignoreCase. oldCharacterSize := SmaCCGrammar maximumCharacterValue. [SmaCCGrammar ignoreCase: self ignoreCase; maximumCharacterValue: 255. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self scannerText andParser: self parserText; scannerClass: self scannerClassString; parserClass: self parserClassString. grammar := parserCompiler grammar. grammar type: aSymbol. stream := WriteStream on: Text new. [parserCompiler createChanges. self generateDefinitionComments ifTrue: [parserCompiler compileDefinitionComments]. self generateSymbolComments ifTrue: [parserCompiler compileSymbolComment]. self generateItemSetComments ifTrue: [parserCompiler compileItemSetsComment]. parserCompiler compileChanges] on: SmaCCCompilationNotification do: [:ex | (ShowPrecedenceConflicts or: [('*precedence*' match: ex messageText) not]) ifTrue: [stream nextPutAll: '-------------------------\' withCRs asText , ex messageText asText allBold; cr; cr; nextPutAll: ex description; cr; nextPutAll: ex tag; cr; cr.]. ex pass]. self conflicts: stream contents. self testText string withBlanksTrimmed notEmpty ifTrue: [self testCodeHolder hasUnacceptedEdits: true]] ensure: [SmaCCGrammar ignoreCase: oldIgnoreCase; maximumCharacterValue: oldCharacterSize]]! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'AlainPlantec 12/10/2010 08:29' prior: 83687491! verifyParser | parserCode | parserCode := self parserCodeHolder contentsMorph text. parserCode string withBlanksTrimmed isEmpty ifTrue: [UIManager default inform: 'Empty Parser code'. self tabList selectedPageIndex: 2. ^ false]. self parserCodeHolder hasUnacceptedEdits ifTrue: [(self acceptParserCode: parserCode notifying: self parserCodeHolder contentsMorph) ifTrue: [self parserCodeHolder acceptContents: parserCode. self parserCodeHolder changed: #contents] ifFalse: [^ false]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'AlainPlantec 12/10/2010 08:29' prior: 83688089! verifyScanner | scannerText | scannerText := self scannerCodeHolder contentsMorph text. scannerText string withBlanksTrimmed isEmpty ifTrue: [UIManager default inform: 'Empty Scanner code'. self tabList selectedPageIndex: 1. ^ false]. self scannerCodeHolder hasUnacceptedEdits ifTrue: [(self acceptScannerCode: scannerText notifying: self scannerCodeHolder contentsMorph) ifTrue: [self scannerCodeHolder acceptContents: scannerText. self scannerCodeHolder changed: #contents. ^ true]. ^ false]. ^ true! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/20/2003 11:32' prior: 83569286! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | selections labelsString linesArray | selections := #(#menuFind #findAgain #setSearchString #again #undo #copySelection #cut #paste #pasteRecent #accept #cancel #saveContentsInFile #sendContentsToPrinter #printerSetup #readContentsFromFile ). labelsString := 'find...(f)\find again (g)\set search string (h)\do again (j)\undo (z)\copy (c)\cut (x)\paste (v)\paste...\accept (s)\cancel (l)\save contents to file...\send contents to printer\printer setup\read contents from file...' withCRs. linesArray := #(3 5 9 11 14). ^ aMenu labels: labelsString lines: linesArray selections: selections! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'AlainPlantec 12/10/2010 08:22' prior: 83571924! readContentsFromFile | result | (result := UIManager default chooseFileMatching: nil label: 'Choose file to open' translated) ifNotNil: [ (FileDirectory default fileExists: result) ifFalse: [^ UIManager default inform: ' ' , result , ' doesn''t exists ']. self acceptContents: (FileStream fileNamed: result) contents. self changed: #contents]! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:10' prior: 83602051! compileChanges RefactoryChangeManager instance performChange: self changes. scannerCompiler scannerClass realClass ifNotNilDo: [:each | each initializeKeywordMap]! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'lr 1/8/2007 21:46' prior: 83736381! runCase SystemChangeNotifier uniqueInstance doSilently: [ super runCase ]! ! SmaCCCodeHolder removeSelector: #saveContentsInFile! "SmaCCDev"! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'ThierryGoubier 5/14/2012 15:41' prior: 83759651! scannerActionFor: aString | selector | aString size > 2 ifFalse: [ ^ nil ]. selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. ^ ((scannerClass definesMethod: selector) and: [ (Object canUnderstand: selector) not and: [ ((SmaCCScanner canUnderstand: selector) not or: [ #(#comment #whitespace) includes: selector ]) and: [ selector numArgs = 0 ] ] ]) ifTrue: [ selector ] ifFalse: [ nil ]! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:31' prior: 83760414! compile: aSymbol | grammar stream oldIgnoreCase oldCharacterSize parserCompiler | (self scannerClassString isEmpty or: [self parserClassString isEmpty]) ifTrue: [^ UIManager default inform: 'Both classes are not specified']. Cursor read showWhile: [self verifySyntax ifFalse: [^ self]]. Cursor wait showWhile: [oldIgnoreCase := SmaCCGrammar ignoreCase. oldCharacterSize := SmaCCGrammar maximumCharacterValue. [SmaCCGrammar ignoreCase: self ignoreCase; maximumCharacterValue: 255. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self scannerText andParser: self parserText; scannerClass: self scannerClassString; parserClass: self parserClassString. grammar := parserCompiler grammar. grammar type: aSymbol. stream := WriteStream on: Text new. [parserCompiler createChanges. self generateDefinitionComments ifTrue: [parserCompiler compileDefinitionComments]. self generateSymbolComments ifTrue: [parserCompiler compileSymbolComment]. self generateItemSetComments ifTrue: [parserCompiler compileItemSetsComment]. parserCompiler compileChanges] on: SmaCCCompilationNotification do: [:ex | (ShowPrecedenceConflicts or: [('*precedence*' match: ex messageText) not]) ifTrue: [stream nextPutAll: '-------------------------\' withCRs asText , ex messageText asText allBold; cr; cr; nextPutAll: ex description; cr; nextPutAll: ex tag; cr; cr.]. ex pass]. self conflicts: stream contents. self testText string trimBoth notEmpty ifTrue: [self testCodeHolder hasUnacceptedEdits: true]] ensure: [SmaCCGrammar ignoreCase: oldIgnoreCase; maximumCharacterValue: oldCharacterSize]]! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:30' prior: 83762300! verifyParser | parserCode | parserCode := self parserCodeHolder contentsMorph text. parserCode string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Parser code'. self tabList selectedPageIndex: 2. ^ false]. self parserCodeHolder hasUnacceptedEdits ifTrue: [(self acceptParserCode: parserCode notifying: self parserCodeHolder contentsMorph) ifTrue: [self parserCodeHolder acceptContents: parserCode. self parserCodeHolder changed: #contents] ifFalse: [^ false]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:29' prior: 83762922! verifyScanner | scannerText | scannerText := self scannerCodeHolder contentsMorph text. scannerText string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Scanner code'. self tabList selectedPageIndex: 1. ^ false]. self scannerCodeHolder hasUnacceptedEdits ifTrue: [(self acceptScannerCode: scannerText notifying: self scannerCodeHolder contentsMorph) ifTrue: [self scannerCodeHolder acceptContents: scannerText. self scannerCodeHolder changed: #contents. ^ true]. ^ false]. ^ true! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:13' prior: 83763542! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | selections labelsString linesArray | selections := #(#find #findAgain #setSearchString #again #undo #copySelection #cut #paste #pasteRecent #accept #cancel #saveContentsInFile #readContentsFromFile ). labelsString := 'find...(f)\find again (g)\set search string (h)\do again (j)\undo (z)\copy (c)\cut (x)\paste (v)\paste...\accept (s)\cancel (l)\save contents in file...\read contents from file...' withCRs. linesArray := #(3 5 9 11 14). ^ aMenu labels: labelsString lines: linesArray selections: selections! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 14:31' prior: 83764401! readContentsFromFile | result | (result := UIManager default chooseFileMatching: nil label: 'Choose file to open' translated) ifNotNil: [ result asFileReference exists ifFalse: [ ^ UIManager default inform: ' ' , result , ' doesn''t exists ' ]. self acceptContents: result asFileReference readStream contents. self changed: #contents ]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:07'! saveContentsInFile | result | (result := UITheme current fileSaveIn: World title: 'Choose file to open' translated extensions: nil path: FileSystem workingDirectory) ifNotNil: [ result asFileReference exists ifTrue: [ ^ UIManager default inform: ' ' , result , ' already exists ' ]. result asFileReference writeStream nextPutAll: contents. self changed: #contents ]! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 3/10/2012 22:52' prior: 83764859! compileChanges RBRefactoryChangeManager instance performChange: self changes. scannerCompiler scannerClass realClass ifNotNilDo: [:each | each initializeKeywordMap]! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'ThierryGoubier 3/8/2013 17:00' prior: 83765117! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! SmaCCParserGenerator class removeSelector: #windowColorSpecification! "SmaCCDev"! SystemOrganization addCategory: #SmaCCDev! SystemOrganization addCategory: #'SmaCCDev-Examples'! SystemOrganization addCategory: #'SmaCCDev-ParserGenerator'! SystemOrganization addCategory: #'SmaCCDev-ScannerGenerator'! SystemOrganization addCategory: #'SmaCCDev-Tests'! SystemOrganization addCategory: #'SmaCCDev-UI'! Notification subclass: #SmaCCCompilationNotification instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCCompilationNotification commentStamp: 'jmb' prior: 83200157! SmaCCCompilationNotification is a notification that is raised when we discover a problem with the parser. For example, a shift/reduce conflict will raise this notification.! StringHolder subclass: #SmaCCCodeHolder instanceVariableNames: 'contentsMorph owner ownerAcceptSelector' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-UI'! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/18/2003 13:44' prior: 83568518! owner: aSmaCCParserGenerator ^ self owner: aSmaCCParserGenerator ownerAcceptSelector: nil! ! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/17/2003 11:26' prior: 83568698! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ^ self new owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/18/2003 12:39' prior: 83568898! contents: aStringOrText notifying: aRequestor | result | self ownerAcceptSelector notNil ifTrue: [result := (self owner perform: self ownerAcceptSelector with: aStringOrText with: aRequestor)] ifFalse: [result := true]. result ifTrue: [self acceptContents: aStringOrText. ^ true]. ^ false! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:13' prior: 83769029! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | selections labelsString linesArray | selections := #(#find #findAgain #setSearchString #again #undo #copySelection #cut #paste #pasteRecent #accept #cancel #saveContentsInFile #readContentsFromFile ). labelsString := 'find...(f)\find again (g)\set search string (h)\do again (j)\undo (z)\copy (c)\cut (x)\paste (v)\paste...\accept (s)\cancel (l)\save contents in file...\read contents from file...' withCRs. linesArray := #(3 5 9 11 14). ^ aMenu labels: labelsString lines: linesArray selections: selections! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:30' prior: 83570043! contentsMorph contentsMorph isNil ifTrue: [ contentsMorph := PluggableTextMorph on: self text: #contents accept: #contents:notifying: readSelection: nil menu: #contentsMenu:shifted:]. ^ contentsMorph ! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/18/2003 10:25' prior: 83570457! hasUnacceptedEdits ^ self contentsMorph hasUnacceptedEdits! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39' prior: 83570591! hasUnacceptedEdits: aBoolean ^ self contentsMorph hasUnacceptedEdits: aBoolean! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39' prior: 83570746! okToChange ^ super okToChange! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23' prior: 83570851! owner ^owner! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23' prior: 83570939! owner: anObject owner := anObject! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 12:30' prior: 83571048! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol self owner: aSmaCCParserGenerator. self ownerAcceptSelector: aSymbol. ! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26' prior: 83571254! ownerAcceptSelector ^ownerAcceptSelector! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26' prior: 83571370! ownerAcceptSelector: anObject ownerAcceptSelector := anObject! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/17/2003 11:16' prior: 83571503! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 14:31' prior: 83769809! readContentsFromFile | result | (result := UIManager default chooseFileMatching: nil label: 'Choose file to open' translated) ifNotNil: [ result asFileReference exists ifFalse: [ ^ UIManager default inform: ' ' , result , ' doesn''t exists ' ]. self acceptContents: result asFileReference readStream contents. self changed: #contents ]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:07' prior: 83770244! saveContentsInFile | result | (result := UITheme current fileSaveIn: World title: 'Choose file to open' translated extensions: nil path: FileSystem workingDirectory) ifNotNil: [ result asFileReference exists ifTrue: [ ^ UIManager default inform: ' ' , result , ' already exists ' ]. result asFileReference writeStream nextPutAll: contents. self changed: #contents ]! ! Model subclass: #SmaCCSymbolSet instanceVariableNames: 'symbols components' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCSymbolSet commentStamp: 'jmb' prior: 83757018! SmaCCSymbolSet represents a set of follow symbols in the LALR(1) item sets. Instance Variables: components other SmaCCSymbolSets that we depend on, we include all items in these sets also symbols our follow symbols! !SmaCCSymbolSet class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83757384! basedOn: aSmaCCSymbolSet ^(self new) baseOn: aSmaCCSymbolSet; yourself! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83757528! add: aSmaCCSymbol (symbols includes: aSmaCCSymbol) ifTrue: [^self]. symbols add: aSmaCCSymbol. self changed! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83757707! addAll: aCollection | oldSize | oldSize := symbols size. symbols addAll: aCollection. oldSize ~= symbols size ifTrue: [self changed]! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83757910! addComponent: each (each = self or: [components includes: each]) ifTrue: [^self]. components add: each. each addDependent: self. self addAll: each symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83758135! addComponentsFrom: aSmaCCSymbolSet aSmaCCSymbolSet components do: [:each | self addComponent: each]! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83758302! allSatisfy: aBlock ^symbols allSatisfy: aBlock! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83758418! baseOn: aSmaCCSymbolSet self addComponent: aSmaCCSymbolSet. self addAll: aSmaCCSymbolSet symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83758583! components ^components! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83758672! includes: aSmaCCSymbol ^symbols includes: aSmaCCSymbol! ! !SmaCCSymbolSet methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 14:42' prior: 83758809! initialize symbols := Set new. components := Set new! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83758931! mergeWith: aSmaCCSymbolSet self addAll: aSmaCCSymbolSet symbols. self addComponentsFrom: aSmaCCSymbolSet! ! !SmaCCSymbolSet methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83759105! printOn: aStream symbols do: [:each | aStream nextPutAll: each printString] separatedBy: [aStream space]! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83759281! size ^symbols size! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83759366! symbols ^symbols! ! !SmaCCSymbolSet methodsFor: 'updating' stamp: 'lr 1/8/2007 14:47' prior: 83759454! update: aSender (components includes: aSender) ifTrue: [self addAll: aSender symbols]! ! SmaCCScanner subclass: #CScanner instanceVariableNames: 'typeNames' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !CScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49' prior: 83498444! initializeKeywordMap keywordMap := Dictionary new. #(#(#IDENTIFIER 'auto' 65) #(#IDENTIFIER 'break' 48) #(#IDENTIFIER 'case' 38) #(#IDENTIFIER 'char' 73) #(#IDENTIFIER 'const' 40) #(#IDENTIFIER 'continue' 47) #(#IDENTIFIER 'default' 39) #(#IDENTIFIER 'do' 54) #(#IDENTIFIER 'double' 70) #(#IDENTIFIER 'else' 46) #(#IDENTIFIER 'enum' 45) #(#IDENTIFIER 'extern' 58) #(#IDENTIFIER 'float' 67) #(#IDENTIFIER 'for' 49) #(#IDENTIFIER 'goto' 50) #(#IDENTIFIER 'if' 42) #(#IDENTIFIER 'int' 69) #(#IDENTIFIER 'long' 66) #(#IDENTIFIER 'register' 71) #(#IDENTIFIER 'return' 56) #(#IDENTIFIER 'short' 68) #(#IDENTIFIER 'signed' 51) #(#IDENTIFIER 'sizeof' 24) #(#IDENTIFIER 'static' 61) #(#IDENTIFIER 'struct' 43) #(#IDENTIFIER 'switch' 52) #(#IDENTIFIER 'typedef' 57) #(#IDENTIFIER 'union' 44) #(#IDENTIFIER 'unsigned' 55) #(#IDENTIFIER 'void' 72) #(#IDENTIFIER 'volatile' 41) #(#IDENTIFIER 'while' 53)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !CScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83499528! needsLineNumbers ^true! ! !CScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83499633! scannerDefinitionComment ": [a-fA-F0-9] ; : [uUlL] ; : [0-9] ; : [Ee][\+\-]?+ ; : [fFlL] ; : \.\.\. ; : \/ \* ; : [a-zA-Z_] ; : [0-9] ; : (|)* ; : (0[xX]+?) | (+?) | (+?) | *\.+?? | (L? \' ( (\\ .) | ([^\\\""]) )+ \') ; : L? \"" ( (\\ .) | ([^\\\""]) )* \"" ; : \[ | (\< \:) ; : \] | (\: \>) ; : \{ | (\< \%) ; : \} | (\% \>) ; : \s+ ;"! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83500286! CONSTANTId ^77! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83500362! IDENTIFIER | name | name := outputStream contents. matchActions := (typeNames includes: name) ifTrue: [Array with: self TypeNameId] ifFalse: [Array with: self IDENTIFIERId]. outputStream reset. ^SmaCCToken value: name start: start id: matchActions! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83500704! IDENTIFIERId ^76! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83500795! TypeNameId ^132! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83500872! addTypeName: aString typeNames add: aString! ! !CScanner methodsFor: 'default token handling' stamp: ' 6/1/07 21:19' prior: 83500992! comment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83501244! emptySymbolTokenId ^147! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83501342! errorTokenId ^148! ! !CScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83501431! initialize super initialize. typeNames := Set new! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83501557! scan1 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83502002! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83502186! scan3 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83502553! scan4 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83502915! scan5 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83503411! scan6 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(78) ]. currentCharacter = $\ ifTrue: [ self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan6 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83503856! scan7 self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83504156! scan8 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $' ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83504888! scan9 self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan8 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83505057! scanForToken self step. ((currentCharacter between: $A and: $K) or: [ (currentCharacter between: $M and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ ^ self scan5 ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(30). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(82) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(28). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(25) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(34). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(35). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(23) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(36). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(20) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(22) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(27). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. currentCharacter = $. ifTrue: [ self step. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(74) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(29). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan5 ]. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(16). self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(80) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(60) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(33). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(37) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(17). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(6). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(8) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(14). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $L ifTrue: [ self recordMatch: #IDENTIFIER. self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(80) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(1). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(59) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(31) ]. ^ self reportLastMatch! ! SmaCCScanner subclass: #JavaScanner instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !JavaScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50' prior: 83512576! initializeKeywordMap keywordMap := Dictionary new. #(#(99 'abstract' 38) #(99 'boolean' 30) #(99 'break' 81) #(99 'byte' 31) #(99 'case' 41) #(99 'catch' 72) #(99 'char' 26) #(99 'class' 8) #(99 'continue' 80) #(99 'default' 47) #(99 'do' 77) #(99 'double' 25) #(99 'else' 14) #(99 'extends' 11) #(99 'false' 95) #(99 'final' 36) #(99 'finally' 75) #(99 'float' 24) #(99 'for' 78) #(99 'if' 35) #(99 'implements' 10) #(99 'import' 44) #(99 'instanceof' 58) #(99 'int' 33) #(99 'interface' 16) #(99 'long' 27) #(99 'native' 37) #(99 'new' 76) #(99 'null' 98) #(99 'package' 29) #(99 'private' 45) #(99 'protected' 46) #(99 'public' 43) #(99 'return' 74) #(99 'short' 34) #(99 'static' 39) #(99 'strictfp' 7) #(99 'super' 22) #(99 'switch' 17) #(99 'synchronized' 40) #(99 'this' 23) #(99 'throw' 73) #(99 'throws' 20) #(99 'transient' 18) #(99 'true' 95) #(99 'try' 79) #(99 'void' 9) #(99 'volatile' 12) #(99 'while' 57)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !JavaScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50' prior: 83513709! scannerDefinitionComment ": 0 | [1-9] [0-9]* ; : 0[xX][0-9a-fA-F]+ ; : 0[0-7]+ ; : [eE] [\-\+]? [0-9]+ ; : [fFdD] ; : \\ ([btnfr\""\'\\] | ([0-3] [0-7]{0,2} | [4-7][0-7]?)) ; : ( | | ) [lL]? ; : [0-9]+ \. [0-9]* ? ? | \. [0-9]+ ? ? | [0-9]+ ? | [0-9]+ ; : true | false ; : \' ([^\\\'] | ) \' ; : \"" ([^\\\""] | )* \"" ; : null ; : [a-zA-Z_] \w* ; : \r | \n | \r\n ; : \s+ ; : \/\/ [^\r\n]* ; : \/ \* ;"! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83514616! emptySymbolTokenId ^255! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83514717! errorTokenId ^256! ! !JavaScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83514799! multipleLineComment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83515067! scan1 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83515515! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83515885! scan3 [ self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83516358! scan4 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83516723! scan5 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(97) ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ (currentCharacter between: $0 and: $7) or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83517504! scan6 self step. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83517696! scan7 self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83517956! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(99). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(91). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(51) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan5 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(85). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(67) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(50). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(52) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(61) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self step. (currentCharacter <= $& or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan6 ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ]) ifTrue: [ ^ self scan6 ]. (currentCharacter between: $0 and: $3) ifTrue: [ self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan7 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch ]. (currentCharacter between: $4 and: $7) ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(42). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(68) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(89). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(70) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(4) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(90). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(87) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(69) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(28). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(88). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #multipleLineComment ]. currentCharacter = $/ ifTrue: [ [ self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = Character cr ifTrue: [ self recordMatch: #comment. self step. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(66) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $7) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $7 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(71). self step. currentCharacter = $< ifTrue: [ self recordMatch: #(83). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(54) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(65) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(59). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(55) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(84). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(86). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(60) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(56) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(6) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(48). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(49). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(53) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(1) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(92) ]. ^ self reportLastMatch! ! SmaCCScanner subclass: #SmaCCGrammarScanner instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCGrammarScanner commentStamp: 'jmb' prior: 83527192! SmaCCGrammarScanner is the scanner for the grammar parser! !SmaCCGrammarScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49' prior: 83527346! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'error' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !SmaCCGrammarScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83527620! needsLineNumbers ^true! ! !SmaCCGrammarScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83527736! scannerDefinitionComment " : [a-zA-Z_] \w* ; : \s+ ; : \< \> ; : ; : (\"" [^\""]* \"") + ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [^\}]+ \} ; : \' \' ; : \: (\: \=)? ;"! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83528140! emptySymbolTokenId ^43! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83528248! errorTokenId ^44! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83528351! scan1 self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(12) ]. currentCharacter = $i ifTrue: [ self step. currentCharacter = $d ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $l ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $f ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(6) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $n ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $n ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $c ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $r ifTrue: [ self step. currentCharacter = $i ifTrue: [ self step. currentCharacter = $g ifTrue: [ self step. currentCharacter = $h ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $r ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(1) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83530776! scan2 [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ self recordMatch: #(21). self step. currentCharacter = $" ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83531106! scan3 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83531613! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan2 ]. currentCharacter = $# ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(24) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(17) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(14) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(16) ]. currentCharacter = $/ ifTrue: [ self step. currentCharacter = $* ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. currentCharacter = $: ifTrue: [ self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(25) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(7) ]. currentCharacter = $< ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(19) ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = ${ ifTrue: [ self step. currentCharacter ~= $} ifTrue: [ [ self step. currentCharacter ~= $} ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(23) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch! ! SmaCCScanner subclass: #SmaCCScannerScanner instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCScannerScanner commentStamp: 'jmb' prior: 83535354! SmaCCScannerScanner is the scanner for the scanner definition! !SmaCCScannerScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83535506! scannerDefinitionComment " : \\ [^cx] | \\ c [A-Z] | \\ x [0-9A-Fa-f]{1,4} ; : \[ ([^\]\\] | )+ \] ; : [\ \t\v\r\n]+ ; : \< [a-zA-Z_] \w* \> ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [0-9]* \, [0-9]* \} ; : [a-zA-Z_] \w* ; : [^\ \t\v\\\r\n\{\(\[\.] ; : \. ;"! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83536018! emptySymbolTokenId ^30! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49' prior: 83536126! errorTokenId ^31! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83536229! scan1 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan1 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83536736! scan2 self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83537395! scan3 [ self step. currentCharacter <= $[ or: [ currentCharacter >= $^ ] ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83537718! scan4 self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49' prior: 83538054! scanForToken self step. (currentCharacter <= Character backspace or: [ currentCharacter = Character newPage or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ (currentCharacter between: $!! and: $") or: [ currentCharacter = $$ or: [ (currentCharacter between: $& and: $') or: [ (currentCharacter between: $, and: $-) or: [ (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $= and: $>) or: [ currentCharacter = $@ or: [ (currentCharacter between: $] and: $^) or: [ currentCharacter = $` or: [ currentCharacter >= $} ] ] ] ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(18) ]. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ self recordMatch: #(17 18). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #(17). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ self recordMatch: #comment. self step. (currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ]) ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $x ifTrue: [ self step. currentCharacter = $c ifTrue: [ self step. currentCharacter = $l ifTrue: [ self step. currentCharacter = $u ifTrue: [ self step. currentCharacter = $d ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(1 18) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(4 18) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(3 18) ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $* ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(10 18) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(9 18) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(14) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(6 18) ]. currentCharacter = $[ ifTrue: [ self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $, ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(16) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(5 18) ]. ^ self reportLastMatch! ! SmaCCScanner subclass: #StScanner instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !StScanner class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83545751! frequencyTable ^#(0.0 1.31372e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0481767 0.0 0.0 0.0 0.0252514 0.0 0.0 2.62743e-7 1.31372e-7 5.25487e-7 1.31372e-7 1.31372e-7 0.0 1.31372e-7 0.0 2.62743e-7 0.0 1.31372e-7 7.8823e-7 2.62743e-7 2.62743e-7 1.31372e-7 5.25487e-7 0.106011 5.13007e-5 0.004554 0.00655584 2.41133e-4 3.60615e-5 1.93248e-4 0.00410241 0.00463893 0.0046369 2.82712e-4 4.64268e-4 0.0011675 9.75895e-4 0.00982753 2.26945e-4 0.00795055 0.00590903 0.0036363 0.00220212 0.00180485 0.00224265 0.00183191 0.00138545 0.00146217 0.00115246 0.0248349 0.00129723 7.50395e-4 0.00496762 8.97532e-4 1.44378e-4 0.00164497 0.00403659 0.00332443 0.00587547 0.00266882 0.00223293 0.00382922 9.91266e-4 9.99673e-4 0.00418163 3.27773e-5 6.31044e-4 0.00271013 0.00248917 0.00292348 0.00278226 0.00359742 7.08751e-4 0.00239287 0.00749351 0.00486778 0.00145908 0.00167453 0.00112251 2.2458e-4 2.32856e-4 4.40752e-5 0.00467815 1.22701e-4 0.00470173 0.00298378 7.73451e-4 2.634e-4 0.0515694 0.00918972 0.0257636 0.0226939 0.09244 0.0167193 0.0108988 0.0138365 0.042864 9.52379e-4 0.00366494 0.0402202 0.0159142 0.0440905 0.0418992 0.0154463 5.66869e-4 0.043972 0.0443068 0.0543899 0.0180997 0.00593537 0.00725816 0.00494884 0.00808567 0.00128285 7.45009e-4 0.00281083 7.45206e-4 1.08907e-4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 3.28429e-7 0.0 0.0 1.97058e-7 0.0 0.0 0.0 0.0 3.94115e-7 6.56859e-8 0.0 2.62743e-7 1.31372e-7 0.0 1.31372e-7 1.31372e-7 0.0 0.0 1.97058e-7 1.31372e-7 6.56859e-8 1.31372e-7 0.0 0.0 7.8823e-7 0.0 0.0 1.31372e-7 1.31372e-7 4.59801e-7 7.8823e-7 0.0 9.85288e-7 5.25487e-7 1.31372e-7 6.56859e-8 1.05097e-6 0.0 2.62743e-7 0.0 1.97058e-7 4.59801e-7 1.97058e-7 5.25487e-7 2.62743e-7 0.0 1.51078e-6 5.91173e-7 1.11666e-6 0.0 1.97058e-7 8.53916e-7 1.57646e-6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.25487e-7 0.0 0.0 0.0 0.0 0.0 0.0 7.8823e-7 0.0 2.62743e-7 0.0 0.0 3.28429e-7 1.31372e-7 0.0 2.62743e-7 0.0 3.28429e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.62743e-7 0.0 5.25487e-7 0.0 0.0 1.31372e-7 0.0 0.0 0.0 0.0)! ! !StScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50' prior: 83547944! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'false' 12) #(20 'nil' 14) #(20 'true' 11) #(26 '||' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !StScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50' prior: 83548269! scannerDefinitionComment " : ( | \_) ( | [\d\_]) *; : \d ; : \- ; : \' [^\']* \' (\' [^\']* \')* ; : \: ; : \: ( \: )+ ; : [\~\-\!!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!!\@\%\&\*\+\=\\\|\?\/\>\<\,]? ; : + ; : \"" [^\""]* \"" ; : (\. )+ ; : \$ . ; : \: \= ; : . ; # For VW literal arrays that handle #(;) -> #(#';')"! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83548899! binarySymbolId ^26! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83548993! emptySymbolTokenId ^64! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83549091! errorTokenId ^65! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83549183! nameId ^20! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06' prior: 83549261! negativeNumber stream skip: -2. ^self scanNumber: self negativeNumberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83549409! negativeNumberId ^22! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06' prior: 83549497! number stream skip: -1. ^self scanNumber: self numberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50' prior: 83549629! numberId ^21! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83549718! scan1 [ self step. currentCharacter ~= $' ] whileTrue. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83549927! scan2 self recordMatch: #(23). self step. currentCharacter = $' ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83550121! scan3 self recordMatch: #(24). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #variableAssignment ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83550803! scan4 [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83552021! scan5 self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(29). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50' prior: 83553249! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(20 32). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ self recordMatch: #whitespace. self step. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #number ]. currentCharacter = $: ifTrue: [ self recordMatch: #(18 32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(5 32) ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ currentCharacter = $= or: [ (currentCharacter between: $? and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ ^ self recordAndReportMatch: #(1 32) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(19 32) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(17 32) ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(10 32) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(4 32) ]. currentCharacter = $" ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $" ifTrue: [ [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $' ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $^ ifTrue: [ ^ self recordAndReportMatch: #(16 32) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(9 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(2 32) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #negativeNumber ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(7 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $< ifTrue: [ self recordMatch: #(6 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(8 32) ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3 32) ]. (currentCharacter <= Character backspace or: [ currentCharacter = Character pageUp or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ currentCharacter = $` or: [ (currentCharacter between: $ and: $©) or: [ (currentCharacter between: $« and: $´) or: [ (currentCharacter between: $¶ and: $¹) or: [ (currentCharacter between: $» and: $¿) or: [ currentCharacter = $× or: [ currentCharacter = $÷ ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $$ ifTrue: [ self recordMatch: #(32). self step. currentCharacter <= $ÿ ifTrue: [ ^ self recordAndReportMatch: #(30) ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83561591! scanNumber: id | number | number := Number readFrom: stream. outputStream reset. matchActions := Array with: id. ^self createTokenFor: number! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83561800! variableAssignment | token | outputStream skip: -2. stream skip: -2. matchActions := Array with: self nameId. token := self createTokenFor: outputStream contents. outputStream reset. ^token! ! SmaCCScanner subclass: #TestScanner instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! Set variableSubclass: #SmaCCItemSet instanceVariableNames: 'type' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCItemSet commentStamp: 'jmb' prior: 83562051! SmaCCItemSet represents a LALR(1) or a LR(1) item set. Instance Variables: type #LALR1 or #LR1 ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83562222! = aSmaCCItemSet self class = aSmaCCItemSet class ifTrue: [type == #LALR1 ifTrue: [^self isLALREqualTo: aSmaCCItemSet] ifFalse: [^self isLREqualTo: aSmaCCItemSet]]. ^false! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83562476! action: aSmaCCSymbol prefer: aClass | action actionItem eachAction | action := SmaCCRejectAction new. self do: [:each | eachAction := each action: aSmaCCSymbol. action class = SmaCCRejectAction ifTrue: [action := eachAction. actionItem := each] ifFalse: [(eachAction = action or: [eachAction class = SmaCCRejectAction]) ifFalse: [eachAction class = SmaCCShiftAction | (action class = SmaCCShiftAction) ifTrue: ["Shift/Reduce conflict -- check precedence" (aSmaCCSymbol precedence isNil or: [each precedence isNil or: [actionItem precedence isNil]]) ifTrue: ["No precedence, choose shift" eachAction class = SmaCCShiftAction ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict'. action := eachAction. actionItem := each] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict']] ifFalse: [(each precedence > actionItem precedence or: [each precedence = actionItem precedence and: [eachAction class = aClass]]) ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict (handled by precedence rules)'. action := eachAction. actionItem := each] ifFalse: [(each precedence = actionItem precedence and: [SmaCCRejectAction = aClass]) ifTrue: [self raiseXReduceNotificationWithNoPreferredItem: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)'. ^aClass new] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)']]]] ifFalse: ["Reduce/Reduce conflict -- just pick one and proceed" self raiseXReduceNotification: actionItem with: each type: 'Reduce/Reduce Conflict']]]]. ^action! ! !SmaCCItemSet methodsFor: 'adding' stamp: 'lr 1/6/2007 22:24' prior: 83564966! add: aSmaCCLR1Item | index item | aSmaCCLR1Item == nil ifTrue: [^aSmaCCLR1Item]. index := self findElementOrNil: aSmaCCLR1Item. item := array at: index. item == nil ifTrue: [self atNewIndex: index put: aSmaCCLR1Item. self performClosureOn: aSmaCCLR1Item] ifFalse: [item mergeWith: aSmaCCLR1Item]. ^aSmaCCLR1Item! ! !SmaCCItemSet methodsFor: 'copying' stamp: 'lr 11/25/2009 18:30' prior: 83565366! copyEmpty: anInteger ^ (Set new: anInteger) type: type; yourself! ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83565502! hash ^self inject: self class hash into: [:sum :each | sum bitXor: each hash]! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:37' prior: 83565661! initialize super initialize. type := #LALR1! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83565770! isLALREqualTo: aSmaCCItemSet ^aSmaCCItemSet size = self size and: [self allSatisfy: [:each | aSmaCCItemSet includes: each]]! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83565962! isLREqualTo: anItemSet ^anItemSet size = self size and: [self allSatisfy: [:each | | item | (item := anItemSet itemFor: each) notNil and: [each isLR1EqualTo: item]]]! ! !SmaCCItemSet methodsFor: 'private' stamp: 'lr 1/6/2007 22:24' prior: 83566218! itemFor: anObject ^array at: (self findElementOrNil: anObject)! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83566348! mergeWith: aSmaCCItemSet self == aSmaCCItemSet ifTrue: [^self]. aSmaCCItemSet do: [:each | self add: each]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83566523! moveOn: aSmaCCSymbol | anItemSet | anItemSet := self class new. anItemSet type: type. self do: [:each | each nextSymbol == aSmaCCSymbol ifTrue: [anItemSet add: each moveNext]]. ^anItemSet! ! !SmaCCItemSet methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83566783! performClosureOn: aSmaCCLR1Item | nextSymbol rest first followers | nextSymbol := aSmaCCLR1Item nextSymbol. nextSymbol isTerminal ifTrue: [^self]. rest := aSmaCCLR1Item rest. first := rest firstTerminals. followers := SmaCCSymbolSet new. (first includes: SmaCCSymbol empty) ifTrue: [first remove: SmaCCSymbol empty. followers baseOn: aSmaCCLR1Item followers]. followers addAll: first. nextSymbol productionsDo: [:each | self add: (SmaCCLR1Item symbol: nextSymbol rhs: each follow: followers)]! ! !SmaCCItemSet methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83567387! printOn: aStream self do: [:each | aStream tab; nextPutAll: each printString; cr]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:06' prior: 83567560! raiseXReduceNotification: preferredSmaCCLR1Item with: otherSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: preferredSmaCCLR1Item printString; nextPutAll: ' *****'; cr; nextPutAll: otherSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:07' prior: 83567977! raiseXReduceNotificationWithNoPreferredItem: firstSmaCCLR1Item with: secondSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: firstSmaCCLR1Item printString; cr; nextPutAll: secondSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83568388! type: aSmaCCSymbol type := aSmaCCSymbol! ! TestCase subclass: #DuplicationNodeEliminationTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83726276! testDuplicateLoop | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 1. node3 := SmaCCNode new. node3 action: 1. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 1. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. self assert: node1 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83726928! testNoDuplicates | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 3. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 3. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'a'. node3 := node2 transitions first to. self deny: node1 = node3. self deny: node2 = node3. self assert: node3 transitions size = 1. self assert: (node3 action includes: 3). self assert: node3 transitions first transitionObjects = 'a'. self assert: node3 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83728030! testSimpleDuplicateWithEdges | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node2 addEdgeTo: node1 onCharacters: 'c'. node3 addEdgeTo: node1 onCharacters: 'c'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'c'. self assert: node2 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83728889! testSimpleTerminalDuplicate | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions isEmpty. self assert: (node2 action includes: 2)! ! TestCase subclass: #ExampleParserTests instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30' prior: 83729546! testApplet JavaParser parse: '// Hello.java import java.applet.Applet; import java.awt.Graphics; public class Hello extends Applet { public void paint(Graphics gc) { gc.drawString("Hello, world!!", 65, 95); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30' prior: 83729851! testEcho CParser parse: 'int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) { printf("%s", argv[i]); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30' prior: 83730056! testHello CParser parse: 'main( ) { printf("Hello World\n"); }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:34' prior: 83730198! testSelfParsing StParser parseMethod: (self class sourceCodeAt: thisContext selector)! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30' prior: 83730366! testServlet JavaParser parse: '// Hello.java import java.io.*; import javax.servlet.*; public class Hello extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter pw = response.getWriter(); pw.println("Hello, world!!"); pw.close(); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30' prior: 83730854! testStandAlone JavaParser parse: '// Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello, World!!"); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30' prior: 83731104! testSwing JavaParser parse: '// Hello.java (Java SE 5) import java.awt.BorderLayout; import javax.swing.*; public class Hello extends JFrame { public Hello() { super("hello"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); getContentPane().add(new JLabel("Hello, world!!")); pack(); } public static void main(String[] args) { new Hello().setVisible(true); } }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:32' prior: 83731623! testTranscript StParser parseExpression: 'Transcript show: ''Hello World''; cr'! ! TestCase subclass: #LineNumberStreamTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20' prior: 83731775! addCRLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr with: Character lf)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20' prior: 83731952! addCRsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20' prior: 83732106! addLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character lf)! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83732258! testCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83732649! testCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83733036! testEmptyLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '\\\')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83733316! testForwardPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83733611! testLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83733999! testNoLines | stream index | stream := SmaCCLineNumberStream on: (ReadStream on: 'this is a test'). self assert: stream lineNumber = 1. index := 1. stream do: [:each | self assert: stream lineNumber = 1. index := index + 1. self assert: stream columnNumber = index]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83734353! testPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20' prior: 83734830! testPositionCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream skip: -1. self assert: stream lineNumber = 4. self assert: stream columnNumber = 1. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 2. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! TestCase subclass: #ParserGeneratorTest instanceVariableNames: 'wrappers' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! !ParserGeneratorTest class methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:58' prior: 83735412! packageNamesUnderTest ^ #('SmaCC' 'SmaCCDev')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83735529! expressionParserString ^' %left "+" "-" ; %left "*" "/" ; %right "^" ; Expression: Expression ''first'' "+" Expression ''last'' {first + last} | Expression "-" Expression {''1'' - ''3''} | Expression "*" Expression {''1'' * ''3''} | Expression "/" Expression {''1'' / ''3''} | Expression "^" Expression {''1'' raisedTo: ''3''} | "(" Expression ")" {''2''} | {''1'' value asNumber};'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83736000! expressionScannerString ^' : [0-9]+ (\. [0-9]+) ? ; : \s+;'! ! !ParserGeneratorTest methodsFor: 'private' stamp: 'lr 1/8/2007 21:49' prior: 83736157! removeAllSelectorsFrom: aClass aClass selectors do: [ :each | aClass removeSelector: each ]. aClass organization removeEmptyCategories! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'ThierryGoubier 3/8/2013 17:00' prior: 83771014! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! !ParserGeneratorTest methodsFor: 'private' stamp: ' 6/1/07 21:20' prior: 83736526! supportsUnicodeStrings ^ [String with: (Character value: 16rFF00). true] on: Error do: [:ex | ex return: false]! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'lr 1/7/2007 11:19' prior: 83736718! tearDown super tearDown. self removeAllSelectorsFrom: TestParser; removeAllSelectorsFrom: TestParser class; removeAllSelectorsFrom: TestScanner; removeAllSelectorsFrom: TestScanner class! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83736985! testBadCharacterBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : [a-] ;' andParser: 'Start : ;'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83737328! testBadSmalltalkBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : foo ;' andParser: 'Start : {self printOn: };'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83737687! testBraceRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : <%%>;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83738328! testBracketOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : [":"] begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileDefinitionComments; compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83738959! testComments | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : /* q */ /***/ /****/ a # b ;' andParser: '/* */ /***/ /****/ #this is a comment begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83739349! testCrLf | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \r? \n | \r ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String with: Character cr with: Character lf)). self should: [TestParser parse: (String with: Character cr with: Character cr)] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83739836! testErrorToken | parserCompiler countingBlock | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z]+; : \s+;' andParser: '%left "+"; Expression : | Expression "+" Expression {[Notification signal] on: Error do: [:ex | ex return: (Notification raise)]} | error "+" Expression ;'. parserCompiler compileInto: TestScanner andParser: TestParser. countingBlock := [:string | | count | count := 0. [[TestParser parse: string] on: Notification do: [:ex | count := count + 1. [ex resume] on: Error do: [:ex1 | ex isResumable: true. ex1 retry]]] on: SmaCCParserError do: [:ex | ex return]. count]. #(#('a + b + c' 2) #('+ a + b + c' 2) #('a + b +' 1) #('a + 1 / 2 + b + c + 3' 2) #('1 + 1 / 2 + b + c + 3' 1)) do: [:each | self assert: (countingBlock value: each first) = each last]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83740832! testErrors | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: '+3*4' onError: [:str :pos | position := pos]. self assert: position = 1. TestParser parseStream: (ReadStream on: '1+a+4') onError: [:str :pos | position := pos]. self assert: position = 3! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83741365! testExcludeScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %excludes a; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self should: [parser parse] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83742073! testExpressions #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '2 + 3 * 4 / 5 ^ 3 ^ 2') = (2 + (3 * 4 / (5 raisedTo: (3 raisedTo: 2)))). self assert: (TestParser parse: '1.0*2/3+4.0^2^3+3') = (1.0 * 2 / 3 + (4.0 raisedTo: (2 raisedTo: 3)) + 3). self assert: (TestParser parse: '(((1 + 2) * 3) ^ 2) ^ 3') = (((1 + 2) * 3 raisedTo: 2) raisedTo: 3)]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83742817! testIgnoreCaseKeywords | parserCompiler case | case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-z_]+ ; : \s+ ;' andParser: 'Start ::= "Foo" {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'FOo'). self deny: (TestParser parse: 'FoObAr ASDS')] ensure: [SmaCCGrammar ignoreCase: case]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83743402! testImplicitParserTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a'). self should: [TestParser parse: ' '] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83743797! testImplicitScannerTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : + ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'asdfssdafADSFS'). self should: [TestParser parse: ' asdf asdf'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83744230! testImplicitTokenPrecedence | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : . ;' andParser: 'A : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. 0 to: 255 do: [:each | self assert: (TestParser parse: (String with: (Character value: each)))]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83744651! testInvertedCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : [^a]+ ; : \s+ ;' andParser: 'begin : {0} | begin {''1'' + 1} | begin {''1'' - 1};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa') = 1. self assert: (TestParser parse: 'aaaa') = 2. self assert: (TestParser parse: 'a bab') = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83745187! testKeywords | parserCompiler size case | size := SmaCCGrammar maximumCharacterValue. case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. self supportsUnicodeStrings ifTrue: [SmaCCGrammar maximumCharacterValue: (2 raisedTo: 16) - 1]. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'Start ::= "Foo" "bar";'. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: 'FoObAr'] ensure: [SmaCCGrammar ignoreCase: case; maximumCharacterValue: size]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83745810! testLALRErrorHandler | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \s+ ;' andParser: 'Start : Foo "]" Foo ")"; Foo : "a" Bar ; Bar : "b" | error ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a ] a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a ) a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a b ] a ]'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83746383! testMultipleStartingPositions | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+;' andParser: '%start plus ; multiply: plus "*" plus {true}; plus: {false} | "+" {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a*a'). self assert: (TestParser parse: 'a+a*a'). self should: [TestParser parse: 'a+a'] raise: SmaCCParserError. self deny: (TestParser parse: 'a+a' startingAt: TestParser startingStateForplus). TestParser parse: 'a*a' startingAt: TestParser startingStateForplus onError: [:str :pos | position := pos]. self assert: position = 2! ! !ParserGeneratorTest methodsFor: 'testing' stamp: 'lr 1/6/2007 21:32' prior: 83747172! testNodeAccess | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'start : "a" ''x'' { Array with: ''1'' value with: ''1'' value with: x value with: x value } ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a') = #( 'a' 'a' 'a' 'a' )! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83747595! testNonAssociativeTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+ ; : \s+ ;' andParser: '%left "and" ; %nonassoc "=" "<="; %left "+" ; expr : expr "=" expr {true} | expr "<=" expr {true} | expr "and" expr {true} | expr "+" expr {true} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a=b=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b<=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b+c=d'] raise: SmaCCParserError. self assert: (TestParser parse: 'a=b and c=d')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83748349! testOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : ":" ? begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83748944! testParenthesesOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : (":" | "|") begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a | b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83749558! testPriority | parserCompiler | TestScanner compile: 'all ^self recordAndReportMatch: (Array with: self allId)'. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \{ | \< \% ; : .;' andParser: '%id ; begin : A {true} | All {false}; A : ; All: ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '{'). self assert: (TestParser parse: '<%'). self deny: (TestParser parse: '}')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83750141! testRecursiveRule #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: 'Test: Test1 Recursive; Test1: {''1'' value}; Recursive: | Recursive "|" {''1'' add: ''3'' value; yourself};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: ((parserCompiler grammar nonTerminalSymbolNamed: 'Recursive') firstTerminals includes: (parserCompiler grammar keywordTerminalNamed: '"|"')). self assert: (TestParser parse: '2|3|4') = (OrderedCollection with: '2' with: '3' with: '4')]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83750960! testReduceReduceConflict | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w ; : \s+ ;' andParser: 'begin : Foo {true} | Bar {false}; Foo : ; Bar : ;'. self assert: ( [parserCompiler compileInto: TestScanner andParser: TestParser. false] on: SmaCCCompilationNotification do: [:ex | ('*Reduce/Reduce*' match: ex messageText) ifTrue: [ex return: true] ifFalse: [ex resume: nil]])! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83751565! testReduceRules | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z] ; : \s ;' andParser: ' Start ::= Chars {#liftFirstValue:}; Chars : WS A WS {#liftSecondValue:}; A : WS WS C {#liftLastValue:} | C WS {#liftLastValue:}; WS : {#nil}; C : {#stringValue:};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: ' a ') = nil. self assert: (TestParser parse: ' a ') = 'a'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83752164! testRepeatMultipleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|){1,2} ; : \s+ ;' andParser: 'begin : + ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a1 bb c44') collect: [:each | each value]) asArray = #('a1' 'bb' 'c44'). self assert: ((TestParser parse: 'aaaaa') collect: [:each | each value]) asArray = #('aaa' 'aa'). self should: [TestParser parse: ''] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83752941! testRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : * ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83753576! testRepeatingCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : \w+ ; : \s+ ;' andParser: 'begin : {true} | begin {''1''} | begin {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa'). self deny: (TestParser parse: 'aaaa')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83754052! testReuseCompositeToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] \d ; : aa | bb; : | ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'aa'). self assert: (TestParser parse: 'bb'). self assert: (TestParser parse: 'a4'). self should: [TestParser parse: 'ab'] raise: SmaCCParserError. self should: [TestParser parse: '4b'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83754825! testReuseSimpleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_\\] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: '\')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83755381! testScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %states a ; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self assert: parser parse! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83756055! testSimple | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a ;' andParser: 'begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20' prior: 83756442! testSpecialCharacters | parserCompiler | [String with: (Character value: 16rFF00)] on: Error do: [:ex | ^self]. "Unicode characters not supported" parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \x3g \x20 \xFF \xFF1 \xFF00 \cC;' andParser: 'begin ::= {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String withAll: (#(3 103 16r20 16rFF 16rFF1 16rFF00 2) collect: [:each | Character value: each])))! ! SmaCCParser subclass: #CParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !CParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83200408! parserDefinitionComment "%id ; translationUnit : external_declaration | translationUnit external_declaration ; primary_expression : | | | ""("" expression "")"" ; postfix_expression : primary_expression | postfix_expression expression | postfix_expression ""("" "")"" | postfix_expression ""("" argument_expression_list "")"" | postfix_expression ""."" | postfix_expression ""->"" | postfix_expression ""++"" | postfix_expression ""--"" ; argument_expression_list : assignment_expression | argument_expression_list "","" assignment_expression ; unary_expression : postfix_expression | ""++"" unary_expression | ""--"" unary_expression | unary_operator cast_expression | ""sizeof"" unary_expression | ""sizeof"" ""("" type_name "")"" ; unary_operator : ""&"" | ""*"" | ""+"" | ""-"" | ""~"" | ""!!"" ; cast_expression : unary_expression | ""("" type_name "")"" cast_expression ; multiplicative_expression : cast_expression | multiplicative_expression ""*"" cast_expression | multiplicative_expression ""/"" cast_expression | multiplicative_expression ""%"" cast_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; logical_and_expression : inclusive_or_expression | logical_and_expression ""&&"" inclusive_or_expression ; logical_or_expression : logical_and_expression | logical_or_expression ""||"" logical_and_expression ; conditional_expression : logical_or_expression | logical_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | unary_expression assignment_operator assignment_expression ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | ""&="" | ""^="" | ""|="" ; expression : assignment_expression | expression "","" assignment_expression ; constant_expression : conditional_expression ; declaration : declaration_specifiers "";"" | declaration_specifiers init_declarator_list "";"" ; declaration_specifiers : storage_class_specifier | storage_class_specifier declaration_specifiers | type_specifier | type_specifier declaration_specifiers | type_qualifier | type_qualifier declaration_specifiers ; init_declarator_list : init_declarator | init_declarator_list "","" init_declarator ; init_declarator : declarator | declarator ""="" initializer ; storage_class_specifier : ""typedef"" | ""extern"" | ""static"" | ""auto"" | ""register"" ; type_specifier : ""void"" | ""char"" | ""short"" | ""int"" | ""long"" | ""float"" | ""double"" | ""signed"" | ""unsigned"" | struct_or_union_specifier | enum_specifier | ; struct_or_union_specifier : struct_or_union struct_declaration_list {self addTypeName: '2' value. self reduceFor: nodes} | struct_or_union struct_declaration_list | struct_or_union {self addTypeName: '2' value. self reduceFor: nodes} ; struct_or_union : ""struct"" | ""union"" ; struct_declaration_list : struct_declaration | struct_declaration_list struct_declaration ; struct_declaration : specifier_qualifier_list struct_declarator_list "";"" ; specifier_qualifier_list : type_specifier specifier_qualifier_list | type_specifier | type_qualifier specifier_qualifier_list | type_qualifier ; struct_declarator_list : struct_declarator | struct_declarator_list "","" struct_declarator ; struct_declarator : declarator | "":"" constant_expression | declarator "":"" constant_expression ; enum_specifier : ""enum"" enumerator_list | ""enum"" enumerator_list {self addTypeName: '2' value. self reduceFor: nodes} | ""enum"" {self addTypeName: '2' value. self reduceFor: nodes} ; enumerator_list : enumerator | enumerator_list "","" enumerator ; enumerator : | ""="" constant_expression ; type_qualifier : ""const"" | ""volatile"" ; declarator : pointer direct_declarator | direct_declarator ; direct_declarator : | ""("" declarator "")"" | direct_declarator constant_expression | direct_declarator | direct_declarator ""("" parameter_type_list "")"" | direct_declarator ""("" identifier_list "")"" | direct_declarator ""("" "")"" ; pointer : ""*"" | ""*"" type_qualifier_list | ""*"" pointer | ""*"" type_qualifier_list pointer ; type_qualifier_list : type_qualifier | type_qualifier_list type_qualifier ; parameter_type_list : parameter_list | parameter_list "","" ; parameter_list : parameter_declaration | parameter_list "","" parameter_declaration ; parameter_declaration : declaration_specifiers declarator | declaration_specifiers abstract_declarator | declaration_specifiers ; identifier_list : | identifier_list "","" ; type_name : specifier_qualifier_list | specifier_qualifier_list abstract_declarator ; abstract_declarator : pointer | direct_abstract_declarator | pointer direct_abstract_declarator ; direct_abstract_declarator : ""("" abstract_declarator "")"" | | constant_expression | direct_abstract_declarator | direct_abstract_declarator constant_expression | ""("" "")"" | ""("" parameter_type_list "")"" | direct_abstract_declarator ""("" "")"" | direct_abstract_declarator ""("" parameter_type_list "")"" ; initializer : assignment_expression | initializer_list | initializer_list "","" ; initializer_list : initializer | initializer_list "","" initializer ; statement : labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement ; labeled_statement : "":"" statement | ""case"" constant_expression "":"" statement | ""default"" "":"" statement ; compound_statement : | statement_list | declaration_list | declaration_list statement_list ; declaration_list : declaration | declaration_list declaration ; statement_list : statement | statement_list statement ; expression_statement : "";"" | expression "";"" ; selection_statement : ""if"" ""("" expression "")"" statement | ""if"" ""("" expression "")"" statement ""else"" statement | ""switch"" ""("" expression "")"" statement ; iteration_statement : ""while"" ""("" expression "")"" statement | ""do"" statement ""while"" ""("" expression "")"" "";"" | ""for"" ""("" expression_statement expression_statement "")"" statement | ""for"" ""("" expression_statement expression_statement expression "")"" statement ; jump_statement : ""goto"" "";"" | ""continue"" "";"" | ""break"" "";"" | ""return"" "";"" | ""return"" expression "";"" ; external_declaration : function_definition | declaration ; function_definition : declaration_specifiers declarator declaration_list compound_statement | declaration_specifiers declarator compound_statement | declarator declaration_list compound_statement | declarator compound_statement ; "! ! !CParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49' prior: 83208952! scannerClass ^CScanner! ! !CParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49' prior: 83209063! startingStateFortranslationUnit ^1! ! !CParser methodsFor: 'scanning' stamp: ' 6/1/07 21:19' prior: 83209158! addTypeName: aString scanner addTypeName: aString! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83209293! reduceActionForenumXspecifier2: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83209479! reduceActionForenumXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83209665! reduceActionForstructXorXunionXspecifier1: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83209862! reduceActionForstructXorXunionXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83210048! reduceTable ^#( #(84 1 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 3 #reduceFor:) #(84 2 #reduceFor:) #(84 2 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 3 #reduceFor:) #(86 1 #reduceFor:) #(86 3 #reduceFor:) #(87 1 #reduceFor:) #(87 3 #reduceFor:) #(88 1 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 4 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(90 1 #reduceFor:) #(90 4 #reduceFor:) #(91 1 #reduceFor:) #(91 2 #reduceFor:) #(92 1 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(93 1 #reduceFor:) #(93 3 #reduceFor:) #(93 3 #reduceFor:) #(94 1 #reduceFor:) #(94 3 #reduceFor:) #(94 3 #reduceFor:) #(95 1 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(96 1 #reduceFor:) #(96 3 #reduceFor:) #(96 3 #reduceFor:) #(97 1 #reduceFor:) #(97 3 #reduceFor:) #(98 1 #reduceFor:) #(98 3 #reduceFor:) #(99 1 #reduceFor:) #(99 3 #reduceFor:) #(100 1 #reduceFor:) #(100 3 #reduceFor:) #(101 1 #reduceFor:) #(101 3 #reduceFor:) #(102 1 #reduceFor:) #(102 5 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(106 1 #reduceFor:) #(106 3 #reduceFor:) #(107 2 #reduceFor:) #(107 3 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(110 1 #reduceFor:) #(110 1 #reduceFor:) #(111 1 #reduceFor:) #(111 3 #reduceFor:) #(112 2 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(113 1 #reduceFor:) #(114 5 #reduceActionForstructXorXunionXspecifier1:) #(114 4 #reduceFor:) #(114 2 #reduceActionForstructXorXunionXspecifier3:) #(115 4 #reduceFor:) #(115 5 #reduceActionForenumXspecifier2:) #(115 2 #reduceActionForenumXspecifier3:) #(116 1 #reduceFor:) #(116 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 2 #reduceFor:) #(119 1 #reduceFor:) #(119 3 #reduceFor:) #(120 3 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(122 1 #reduceFor:) #(122 3 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(123 3 #reduceFor:) #(124 1 #reduceFor:) #(124 3 #reduceFor:) #(125 1 #reduceFor:) #(125 3 #reduceFor:) #(126 1 #reduceFor:) #(126 2 #reduceFor:) #(126 2 #reduceFor:) #(126 3 #reduceFor:) #(127 1 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(128 1 #reduceFor:) #(128 3 #reduceFor:) #(129 1 #reduceFor:) #(129 3 #reduceFor:) #(130 1 #reduceFor:) #(130 2 #reduceFor:) #(131 1 #reduceFor:) #(131 3 #reduceFor:) #(133 2 #reduceFor:) #(133 2 #reduceFor:) #(133 1 #reduceFor:) #(134 1 #reduceFor:) #(134 1 #reduceFor:) #(134 2 #reduceFor:) #(135 3 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(136 1 #reduceFor:) #(136 3 #reduceFor:) #(137 3 #reduceFor:) #(137 4 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(138 3 #reduceFor:) #(138 3 #reduceFor:) #(138 4 #reduceFor:) #(139 1 #reduceFor:) #(139 2 #reduceFor:) #(140 5 #reduceFor:) #(140 7 #reduceFor:) #(140 5 #reduceFor:) #(141 5 #reduceFor:) #(141 7 #reduceFor:) #(141 6 #reduceFor:) #(141 7 #reduceFor:) #(142 3 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 3 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(144 1 #reduceFor:) #(144 2 #reduceFor:) #(145 1 #reduceFor:) #(145 2 #reduceFor:) #(146 4 #reduceFor:) #(146 3 #reduceFor:) #(146 3 #reduceFor:) #(146 2 #reduceFor:) #(149 1 #reduceFor:) #(149 2 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(150 4 #reduceFor:) )! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83214641! transitionTable ^#( #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 121 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 153 0 149] #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112 0 137 0 126 0 141 0 127] #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 38 0 76 2 38 0 79 0 161 0 110 0 165 0 126 0 169 0 130] #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 158 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 210 0 76 0 81] #[0 1 214 0 76 0 81] #[1 0 173 0 76 0 177 0 81] #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 138 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 86 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 90 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 94 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 98 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 122 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 126 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 114 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 118 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 130 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 102 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 106 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 110 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 54 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 0 193 0 112 0 137 0 126 0 141 0 127] #[0 1 182 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 46 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 46 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 46 0 76 1 46 0 79 0 197 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 54 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 54 0 76 1 54 0 79 0 201 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 62 0 21 1 62 0 25 1 62 0 26 1 62 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 62 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 62 0 76 1 62 0 79 0 205 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 0 221 0 138 0 225 0 145] #[0 3 66 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 1 142 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 146 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[1 0 229 0 76 0 233 0 81] #[1 0 9 0 25 0 93 0 76 0 237 0 127] #[1 1 174 0 16 1 174 0 17 1 174 0 21 0 241 0 25 1 174 0 26 1 174 0 40 1 174 0 41 1 174 0 43 1 174 0 44 1 174 0 45 1 174 0 51 1 174 0 55 1 174 0 57 1 174 0 58 1 174 0 60 1 174 0 61 1 174 0 65 1 174 0 66 1 174 0 67 1 174 0 68 1 174 0 69 1 174 0 70 1 174 0 71 1 174 0 72 1 174 0 73 0 245 0 79 1 174 0 81 1 174 0 132] #[0 1 150 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 178 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 249 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 0 0 147] #[0 0 253 0 26] #[0 2 98 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 46 0 21 0 25 0 26 0 76 0 79] #[1 2 42 0 21 2 42 0 25 2 42 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 42 0 76 2 42 0 79 1 1 0 110 1 5 0 126] #[1 1 206 0 16 1 206 0 21 1 206 0 25 1 206 0 26 1 206 0 34 1 206 0 40 1 206 0 41 1 206 0 43 1 206 0 44 1 206 0 45 1 206 0 51 1 206 0 55 1 206 0 57 1 206 0 58 1 206 0 60 1 206 0 61 1 206 0 65 1 206 0 66 1 206 0 67 1 206 0 68 1 206 0 69 1 206 0 70 1 206 0 71 1 206 0 72 1 206 0 73 1 206 0 76 1 206 0 79 1 9 0 81 1 206 0 132] #[1 1 13 0 76 1 17 0 124 1 21 0 125] #[0 1 78 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 25 0 21 1 29 0 60] #[0 1 70 0 21 0 60] #[1 1 33 0 17 1 162 0 21 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 162 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 1 37 0 138 1 41 0 145] #[0 1 50 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 58 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 66 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 145 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 1 249 0 144 1 253 0 145] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 3 42 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 62 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 9 0 138] #[1 1 194 0 16 1 194 0 21 1 194 0 25 1 194 0 26 1 194 0 34 1 194 0 40 1 194 0 41 1 194 0 43 1 194 0 44 1 194 0 45 1 194 0 51 1 194 0 55 1 194 0 57 1 194 0 58 1 194 0 60 1 194 0 61 1 194 0 65 1 194 0 66 1 194 0 67 1 194 0 68 1 194 0 69 1 194 0 70 1 194 0 71 1 194 0 72 1 194 0 73 1 194 0 76 1 194 0 79 2 13 0 81 1 194 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 25 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 170 0 16 1 170 0 17 1 170 0 21 0 241 0 25 1 170 0 26 1 170 0 40 1 170 0 41 1 170 0 43 1 170 0 44 1 170 0 45 1 170 0 51 1 170 0 55 1 170 0 57 1 170 0 58 1 170 0 60 1 170 0 61 1 170 0 65 1 170 0 66 1 170 0 67 1 170 0 68 1 170 0 69 1 170 0 70 1 170 0 71 1 170 0 72 1 170 0 73 0 245 0 79 1 170 0 81 1 170 0 132] #[1 2 37 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 41 0 76 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 49 0 128 2 53 0 129 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 69 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 81 0 104 1 217 0 119] #[0 3 70 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 2 58 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 50 0 21 0 25 0 26 0 76 0 79] #[1 1 13 0 76 2 85 0 124 1 21 0 125] #[1 2 89 0 17 2 30 0 21 2 30 0 82] #[1 2 93 0 21 2 97 0 82] #[0 2 22 0 21 0 82] #[1 0 9 0 25 0 13 0 34 0 93 0 76 2 101 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 1 82 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 2 113 0 150] #[0 3 54 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 117 0 138] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 125 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 129 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 133 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 137 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 2 141 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 94 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 110 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 114 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 98 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 102 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 106 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 153 0 104 1 217 0 119] #[0 2 157 0 16] #[0 2 161 0 25] #[0 2 165 0 60] #[0 2 169 0 60] #[0 2 173 0 25] #[0 2 177 0 76] #[0 2 181 0 25] #[0 2 185 0 25] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 2 189 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 193 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 210 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 0 38 0 1 0 38 0 2 0 38 0 3 0 38 0 4 0 38 0 5 0 38 0 6 0 38 0 7 0 38 0 8 0 38 0 9 0 38 0 10 0 38 0 11 0 38 0 12 0 38 0 13 0 38 0 14 0 38 0 15 2 201 0 16 0 38 0 17 0 38 0 18 0 38 0 19 0 38 0 20 0 38 0 21 0 38 0 22 0 38 0 23 0 38 0 25 0 38 0 27 0 38 0 28 0 38 0 29 0 38 0 30 0 38 0 33 0 38 0 34 0 38 0 35 0 38 0 36 0 38 0 37 0 38 0 59 0 38 0 60 0 38 0 62 0 38 0 63 0 38 0 64 0 38 0 79] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 194 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 0 70 0 1 0 70 0 2 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 7 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 0 70 0 12 0 70 0 13 0 70 0 14 0 70 0 15 0 70 0 16 0 70 0 17 0 70 0 18 0 70 0 19 2 205 0 20 0 70 0 21 2 209 0 22 2 213 0 23 2 217 0 25 0 70 0 26 2 221 0 27 0 70 0 28 0 70 0 29 0 70 0 30 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 36 0 70 0 37 0 70 0 59 0 70 0 60 0 70 0 62 0 70 0 63 0 70 0 64 2 225 0 79 0 70 0 80 0 70 0 82] #[0 0 6 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 214 0 16 0 21 0 26 0 60 0 80] #[1 0 118 0 1 0 118 0 2 0 118 0 3 0 118 0 4 0 118 0 5 0 118 0 6 0 118 0 7 0 118 0 8 0 118 0 9 2 229 0 10 2 233 0 11 2 237 0 12 2 241 0 13 0 118 0 14 0 118 0 15 0 118 0 16 2 245 0 17 0 118 0 18 2 249 0 19 0 118 0 21 0 118 0 26 0 118 0 28 0 118 0 29 0 118 0 30 0 118 0 33 0 118 0 34 0 118 0 35 0 118 0 36 2 253 0 37 3 1 0 59 0 118 0 60 3 5 0 62 3 9 0 63 3 13 0 64 0 118 0 80 0 118 0 82 3 17 0 103] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 3 21 0 90] #[0 0 134 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 150 0 1 0 150 0 2 0 150 0 3 0 150 0 4 0 150 0 5 0 150 0 6 0 150 0 7 0 150 0 8 0 150 0 9 0 150 0 14 0 150 0 15 0 150 0 16 0 150 0 18 0 150 0 21 0 150 0 26 0 150 0 28 3 25 0 29 3 29 0 30 0 150 0 33 3 33 0 34 0 150 0 35 0 150 0 36 0 150 0 60 0 150 0 80 0 150 0 82] #[1 0 162 0 1 0 162 0 2 0 162 0 3 0 162 0 4 0 162 0 5 0 162 0 6 0 162 0 7 0 162 0 8 0 162 0 9 0 162 0 14 0 162 0 15 0 162 0 16 0 162 0 18 0 162 0 21 0 162 0 26 0 162 0 28 0 162 0 33 3 37 0 35 3 41 0 36 0 162 0 60 0 162 0 80 0 162 0 82] #[1 0 174 0 1 0 174 0 2 0 174 0 3 0 174 0 4 0 174 0 5 0 174 0 6 0 174 0 7 0 174 0 8 0 174 0 9 3 45 0 14 0 174 0 15 0 174 0 16 0 174 0 18 0 174 0 21 0 174 0 26 0 174 0 28 3 49 0 33 0 174 0 60 0 174 0 80 0 174 0 82] #[1 0 194 0 1 0 194 0 2 0 194 0 3 0 194 0 4 0 194 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 194 0 9 0 194 0 15 0 194 0 16 3 65 0 18 0 194 0 21 0 194 0 26 0 194 0 28 0 194 0 60 0 194 0 80 0 194 0 82] #[1 0 206 0 1 0 206 0 2 3 69 0 3 3 73 0 4 0 206 0 5 0 206 0 9 0 206 0 15 0 206 0 16 0 206 0 21 0 206 0 26 0 206 0 28 0 206 0 60 0 206 0 80 0 206 0 82] #[1 1 230 0 1 1 230 0 2 1 230 0 5 1 230 0 9 1 230 0 15 1 230 0 16 1 230 0 21 1 230 0 26 3 77 0 28 1 230 0 60 1 230 0 80 1 230 0 82] #[1 3 81 0 21 3 85 0 60] #[1 3 89 0 2 0 230 0 5 0 230 0 9 0 230 0 15 0 230 0 16 0 230 0 21 0 230 0 26 0 230 0 60 0 230 0 80 0 230 0 82] #[1 3 93 0 5 0 238 0 9 0 238 0 15 0 238 0 16 0 238 0 21 0 238 0 26 0 238 0 60 0 238 0 80 0 238 0 82] #[1 3 97 0 9 3 101 0 15 0 246 0 16 0 246 0 21 0 246 0 26 0 246 0 60 0 246 0 80 0 246 0 82] #[0 0 62 0 16 0 21 0 26 0 60 0 80 0 82] #[1 3 105 0 1 0 222 0 2 0 222 0 5 0 222 0 9 0 222 0 15 0 222 0 16 0 222 0 21 0 222 0 26 0 222 0 60 0 222 0 80 0 222 0 82] #[0 3 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 109 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 117 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 3 121 0 144] #[1 1 33 0 17 1 162 0 21 1 162 0 60] #[0 3 46 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 58 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 125 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 246 0 16 1 246 0 25 1 246 0 26 1 246 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 246 0 76 1 246 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 129 0 121 0 145 0 132] #[1 1 254 0 16 1 254 0 25 1 254 0 26 1 254 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 254 0 76 1 254 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 133 0 121 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 3 137 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 222 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 3 153 0 122 3 157 0 123 0 137 0 126 0 141 0 127] #[0 2 78 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 90 0 21 0 26] #[1 2 122 0 21 3 161 0 25 2 122 0 26 0 13 0 34 0 93 0 76 3 165 0 79 3 169 0 112 3 173 0 126 0 141 0 127 3 177 0 134 3 181 0 135] #[0 3 185 0 26] #[1 3 189 0 21 3 193 0 26] #[1 3 197 0 21 2 82 0 26] #[0 2 106 0 21 0 26] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 66 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 0 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 1 42 0 16 0 21 0 60 0 80 0 82] #[0 3 201 0 80] #[1 2 93 0 21 3 205 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 3 209 0 104 1 217 0 119] #[1 1 13 0 76 3 213 0 125] #[0 1 198 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 74 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 3 217 0 136 3 221 0 150] #[0 3 74 0 21 0 60 0 82] #[0 1 166 0 21 0 60] #[0 3 50 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 3 225 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 3 229 0 26] #[1 3 81 0 21 3 233 0 26] #[1 3 237 0 25 0 126 0 26 0 13 0 34 3 165 0 79 3 241 0 126 3 245 0 134 3 181 0 135] #[0 3 249 0 16] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 253 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 1 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 250 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 5 0 139] #[0 4 9 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 13 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 17 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 21 0 53] #[0 3 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 25 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 29 0 143] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 4 33 0 76] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 4 37 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 41 0 86 4 45 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 49 0 76] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 53 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 1 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 57 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 61 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 65 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 69 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 73 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 77 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 81 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 85 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 89 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 93 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 97 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 101 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 105 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 109 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 4 113 0 96] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 117 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 214 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 121 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 125 0 99 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 4 129 0 100 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 133 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 4 137 0 97] #[0 2 198 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 3 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 202 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 4 141 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 4 145 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 242 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 250 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 190 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 226 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 149 0 104 1 217 0 119] #[1 4 153 0 16 2 10 0 21 2 10 0 60] #[1 4 157 0 21 4 161 0 60] #[0 2 2 0 21 0 60] #[1 3 161 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 157 0 112 0 125 0 114 0 129 0 115 0 133 0 116 3 173 0 126 0 141 0 127 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 4 177 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 181 0 104 1 217 0 119] #[0 2 114 0 21 0 26] #[1 2 126 0 21 3 161 0 25 2 126 0 26 0 93 0 76 3 165 0 79 0 237 0 127 4 185 0 135] #[0 2 118 0 21 0 26] #[1 2 130 0 21 4 189 0 25 2 130 0 26 4 193 0 79] #[0 2 70 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 4 197 0 76] #[0 2 74 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 4 201 0 74 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 4 205 0 133] #[0 2 62 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 1 202 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 34 0 21 0 82] #[0 2 26 0 21 0 82] #[1 4 209 0 21 4 213 0 82] #[0 2 174 0 21 0 82] #[0 4 217 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 221 0 90] #[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 237 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 241 0 126 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 3 237 0 25 2 126 0 26 3 165 0 79 4 185 0 135] #[0 0 130 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 225 0 143] #[0 2 190 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 229 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 233 0 139] #[0 2 246 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 237 0 26] #[1 3 81 0 21 4 241 0 26] #[0 4 245 0 25] #[0 3 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 182 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 4 249 0 21 4 253 0 26] #[0 0 54 0 21 0 26] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 81 0 21 5 1 0 80] #[0 0 66 0 16 0 21 0 26 0 60 0 80 0 82] #[0 0 142 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 146 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 138 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 154 0 1 0 154 0 2 0 154 0 3 0 154 0 4 0 154 0 5 0 154 0 6 0 154 0 7 0 154 0 8 0 154 0 9 0 154 0 14 0 154 0 15 0 154 0 16 0 154 0 18 0 154 0 21 0 154 0 26 0 154 0 28 3 25 0 29 3 29 0 30 0 154 0 33 3 33 0 34 0 154 0 35 0 154 0 36 0 154 0 60 0 154 0 80 0 154 0 82] #[1 0 158 0 1 0 158 0 2 0 158 0 3 0 158 0 4 0 158 0 5 0 158 0 6 0 158 0 7 0 158 0 8 0 158 0 9 0 158 0 14 0 158 0 15 0 158 0 16 0 158 0 18 0 158 0 21 0 158 0 26 0 158 0 28 3 25 0 29 3 29 0 30 0 158 0 33 3 33 0 34 0 158 0 35 0 158 0 36 0 158 0 60 0 158 0 80 0 158 0 82] #[1 0 170 0 1 0 170 0 2 0 170 0 3 0 170 0 4 0 170 0 5 0 170 0 6 0 170 0 7 0 170 0 8 0 170 0 9 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 18 0 170 0 21 0 170 0 26 0 170 0 28 0 170 0 33 3 37 0 35 3 41 0 36 0 170 0 60 0 170 0 80 0 170 0 82] #[1 0 166 0 1 0 166 0 2 0 166 0 3 0 166 0 4 0 166 0 5 0 166 0 6 0 166 0 7 0 166 0 8 0 166 0 9 0 166 0 14 0 166 0 15 0 166 0 16 0 166 0 18 0 166 0 21 0 166 0 26 0 166 0 28 0 166 0 33 3 37 0 35 3 41 0 36 0 166 0 60 0 166 0 80 0 166 0 82] #[1 0 182 0 1 0 182 0 2 0 182 0 3 0 182 0 4 0 182 0 5 0 182 0 6 0 182 0 7 0 182 0 8 0 182 0 9 3 45 0 14 0 182 0 15 0 182 0 16 0 182 0 18 0 182 0 21 0 182 0 26 0 182 0 28 3 49 0 33 0 182 0 60 0 182 0 80 0 182 0 82] #[1 0 186 0 1 0 186 0 2 0 186 0 3 0 186 0 4 0 186 0 5 0 186 0 6 0 186 0 7 0 186 0 8 0 186 0 9 3 45 0 14 0 186 0 15 0 186 0 16 0 186 0 18 0 186 0 21 0 186 0 26 0 186 0 28 3 49 0 33 0 186 0 60 0 186 0 80 0 186 0 82] #[1 0 190 0 1 0 190 0 2 0 190 0 3 0 190 0 4 0 190 0 5 0 190 0 6 0 190 0 7 0 190 0 8 0 190 0 9 3 45 0 14 0 190 0 15 0 190 0 16 0 190 0 18 0 190 0 21 0 190 0 26 0 190 0 28 3 49 0 33 0 190 0 60 0 190 0 80 0 190 0 82] #[1 0 178 0 1 0 178 0 2 0 178 0 3 0 178 0 4 0 178 0 5 0 178 0 6 0 178 0 7 0 178 0 8 0 178 0 9 3 45 0 14 0 178 0 15 0 178 0 16 0 178 0 18 0 178 0 21 0 178 0 26 0 178 0 28 3 49 0 33 0 178 0 60 0 178 0 80 0 178 0 82] #[1 0 198 0 1 0 198 0 2 0 198 0 3 0 198 0 4 0 198 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 198 0 9 0 198 0 15 0 198 0 16 3 65 0 18 0 198 0 21 0 198 0 26 0 198 0 28 0 198 0 60 0 198 0 80 0 198 0 82] #[1 0 202 0 1 0 202 0 2 0 202 0 3 0 202 0 4 0 202 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 202 0 9 0 202 0 15 0 202 0 16 3 65 0 18 0 202 0 21 0 202 0 26 0 202 0 28 0 202 0 60 0 202 0 80 0 202 0 82] #[1 0 210 0 1 0 210 0 2 3 69 0 3 3 73 0 4 0 210 0 5 0 210 0 9 0 210 0 15 0 210 0 16 0 210 0 21 0 210 0 26 0 210 0 28 0 210 0 60 0 210 0 80 0 210 0 82] #[0 0 218 0 16 0 21 0 26 0 60 0 80] #[1 3 105 0 1 0 226 0 2 0 226 0 5 0 226 0 9 0 226 0 15 0 226 0 16 0 226 0 21 0 226 0 26 0 226 0 60 0 226 0 80 0 226 0 82] #[1 3 89 0 2 0 234 0 5 0 234 0 9 0 234 0 15 0 234 0 16 0 234 0 21 0 234 0 26 0 234 0 60 0 234 0 80 0 234 0 82] #[1 3 93 0 5 0 242 0 9 0 242 0 15 0 242 0 16 0 242 0 21 0 242 0 26 0 242 0 60 0 242 0 80 0 242 0 82] #[1 5 5 0 16 3 81 0 21] #[1 1 234 0 1 1 234 0 2 1 234 0 5 1 234 0 9 1 234 0 15 1 234 0 16 1 234 0 21 1 234 0 26 3 77 0 28 1 234 0 60 1 234 0 80 1 234 0 82] #[0 2 206 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 1 186 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 14 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 9 0 104 1 217 0 119] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 5 13 0 123 0 137 0 126 0 141 0 127] #[0 1 238 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[0 2 158 0 21 0 25 0 26 0 79] #[0 5 17 0 26] #[0 5 21 0 26] #[0 2 142 0 21 0 25 0 26 0 79] #[0 5 25 0 80] #[1 2 134 0 21 4 189 0 25 2 134 0 26 4 193 0 79] #[1 5 29 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 5 33 0 128 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 5 37 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 41 0 104 1 217 0 119] #[0 2 94 0 21 0 26] #[0 2 86 0 26] #[0 2 110 0 21 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 5 45 0 82 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 5 49 0 150] #[0 3 78 0 21 0 60 0 82] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 122 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 2 186 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 53 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 5 57 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 61 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 65 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 69 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 73 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 5 77 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 5 81 0 102 1 217 0 119] #[0 2 18 0 21 0 60] #[0 2 6 0 21 0 60] #[0 2 162 0 21 0 25 0 26 0 79] #[0 2 138 0 21 0 25 0 26 0 79] #[0 2 146 0 21 0 25 0 26 0 79] #[0 2 166 0 21 0 25 0 26 0 79] #[0 5 85 0 26] #[0 2 150 0 21 0 25 0 26 0 79] #[0 5 89 0 80] #[0 3 82 0 21 0 60 0 82] #[0 2 178 0 21 0 82] #[1 2 218 0 20 2 218 0 23 2 218 0 24 2 218 0 25 2 218 0 28 2 218 0 31 2 218 0 32 2 218 0 34 2 218 0 35 2 218 0 36 2 218 0 38 2 218 0 39 2 218 0 42 5 93 0 46 2 218 0 47 2 218 0 48 2 218 0 49 2 218 0 50 2 218 0 52 2 218 0 53 2 218 0 54 2 218 0 56 2 218 0 60 2 218 0 76 2 218 0 77 2 218 0 78 2 218 0 81 2 218 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 97 0 143] #[1 3 81 0 21 5 101 0 26] #[0 2 226 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 230 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 5 105 0 26] #[0 0 58 0 21 0 26] #[0 0 250 0 16 0 21 0 26 0 60 0 80 0 82] #[0 2 170 0 21 0 25 0 26 0 79] #[0 2 154 0 21 0 25 0 26 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 109 0 143] #[0 2 238 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 113 0 143] #[0 5 117 0 60] #[0 2 222 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 242 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 234 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] )! ! SmaCCParser subclass: #JavaParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !JavaParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50' prior: 83273148! parserDefinitionComment "goal : compilation_unit ; # 19.3) Lexical Structure. literal : | | # | ""true"" # | ""false"" | | | ; # 19.4) Types, Values, and Variables type : primitive_type | reference_type ; primitive_type : numeric_type | ""boolean"" ; numeric_type: integral_type | floating_point_type ; integral_type : ""byte"" | ""short"" | ""int"" | ""long"" | ""char"" ; floating_point_type : ""float"" | ""double"" ; reference_type : class_or_interface_type | array_type ; class_or_interface_type : name; class_type : class_or_interface_type; interface_type : class_or_interface_type; array_type : primitive_type dims | name dims ; # 19.5) Names name : simple_name | qualified_name ; simple_name : ; qualified_name : name ""."" ; # 19.6) ""package""s compilation_unit : package_declaration_opt import_declarations_opt type_declarations_opt ; package_declaration_opt : package_declaration | ; import_declarations_opt : import_declarations | ; type_declarations_opt : type_declarations | ; import_declarations : import_declaration | import_declarations import_declaration ; type_declarations : type_declaration | type_declarations type_declaration ; package_declaration : ""package"" name "";"" ; import_declaration : single_type_import_declaration | type_import_on_demand_declaration ; single_type_import_declaration : ""import"" name "";"" ; type_import_on_demand_declaration : ""import"" name ""."" ""*"" "";"" ; type_declaration : class_declaration | interface_declaration | "";"" ; # 19.7) Productions used only in the LALR(1) grammar modifiers_opt: | modifiers ; modifiers : modifier | modifiers modifier ; modifier : ""public"" | ""protected"" | ""private"" | ""static"" | ""abstract"" | ""final"" | ""native"" | ""synchronized"" | ""transient"" | ""volatile"" | ""strictfp"" # note that semantic analysis must check that the # context of the modifier allows strictfp. ; # 19.8) Classes # 19.8.1) Class Declaration: class_declaration : modifiers_opt ""class"" super_opt interfaces_opt class_body ; super : ""extends"" class_type ; super_opt : | super ; interfaces : ""implements"" interface_type_list ; interfaces_opt: | interfaces ; interface_type_list : interface_type | interface_type_list "","" interface_type ; class_body : ""{"" class_body_declarations_opt ""}"" ; class_body_declarations_opt : | class_body_declarations ; class_body_declarations : class_body_declaration | class_body_declarations class_body_declaration ; class_body_declaration : class_member_declaration | static_initializer | constructor_declaration | block ; class_member_declaration : field_declaration | method_declaration # repeat the prod for 'class_declaration' here: | modifiers_opt ""class"" super_opt interfaces_opt class_body | interface_declaration | "";"" ; # 19.8.2) Field Declarations field_declaration : modifiers_opt type variable_declarators "";"" ; variable_declarators : variable_declarator | variable_declarators "","" variable_declarator ; variable_declarator : variable_declarator_id | variable_declarator_id ""="" variable_initializer ; variable_declarator_id : | variable_declarator_id ""["" ""]"" ; variable_initializer : expression | array_initializer ; # 19.8.3) Method Declarations method_declaration : method_header method_body ; method_header : modifiers_opt type method_declarator throws_opt | modifiers_opt ""void"" method_declarator throws_opt ; method_declarator : ""("" formal_parameter_list_opt "")"" | method_declarator ""["" ""]"" # deprecated # be careful; the above production also allows 'void foo() []' ; formal_parameter_list_opt : | formal_parameter_list ; formal_parameter_list : formal_parameter | formal_parameter_list "","" formal_parameter ; formal_parameter : type variable_declarator_id | ""final"" type variable_declarator_id ; throws_opt : | throws ; throws : ""throws"" class_type_list ; class_type_list : class_type | class_type_list "","" class_type ; method_body : block | "";"" ; # 19.8.4) Static Initializers static_initializer : ""static"" block ; # 19.8.5) Constructor Declarations constructor_declaration : modifiers_opt constructor_declarator throws_opt constructor_body ; constructor_declarator : simple_name ""("" formal_parameter_list_opt "")"" ; constructor_body : ""{"" explicit_constructor_invocation block_statements ""}"" | ""{"" explicit_constructor_invocation ""}"" | ""{"" block_statements ""}"" | ""{"" ""}"" ; explicit_constructor_invocation : ""this"" ""("" argument_list_opt "")"" "";"" | ""super"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""this"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""super"" ""("" argument_list_opt "")"" "";"" ; # 19.9) Interfaces # 19.9.1) Interface Declarations interface_declaration : modifiers_opt ""interface"" extends_interfaces_opt interface_body ; extends_interfaces_opt : | extends_interfaces ; extends_interfaces : ""extends"" interface_type | extends_interfaces "","" interface_type ; interface_body : ""{"" interface_member_declarations_opt ""}"" ; interface_member_declarations_opt : | interface_member_declarations ; interface_member_declarations : interface_member_declaration | interface_member_declarations interface_member_declaration ; interface_member_declaration : constant_declaration | abstract_method_declaration | class_declaration | interface_declaration ; constant_declaration : field_declaration # need to semantically check that modifiers of field declaration # include only PUBLIC, ""static"", or ""final"". Other modifiers are # disallowed. ; abstract_method_declaration : method_header "";"" ; # 19.10) Arrays array_initializer : ""{"" variable_initializers "","" ""}"" | ""{"" variable_initializers ""}"" | ""{"" "","" ""}"" | ""{"" ""}"" ; variable_initializers : variable_initializer | variable_initializers "","" variable_initializer ; # 19.11) Blocks and Statements block : ""{"" block_statements_opt ""}"" ; block_statements_opt : | block_statements ; block_statements : block_statement | block_statements block_statement ; block_statement : local_variable_declaration_statement | statement | class_declaration | interface_declaration ; local_variable_declaration_statement : local_variable_declaration "";"" ; local_variable_declaration : type variable_declarators | ""final"" type variable_declarators ; statement : statement_without_trailing_substatement | labeled_statement | if_then_statement | if_then_else_statement | while_statement | for_statement ; statement_no_short_if : statement_without_trailing_substatement | labeled_statement_no_short_if | if_then_else_statement_no_short_if | while_statement_no_short_if | for_statement_no_short_if ; statement_without_trailing_substatement : block | empty_statement | expression_statement | switch_statement | do_statement | break_statement | continue_statement | return_statement | synchronized_statement | throw_statement | try_statement ; empty_statement : "";"" ; labeled_statement : "":"" statement ; labeled_statement_no_short_if : "":"" statement_no_short_if ; expression_statement : statement_expression "";"" ; statement_expression : assignment | preincrement_expression | predecrement_expression | postincrement_expression | postdecrement_expression | method_invocation | class_instance_creation_expression ; if_then_statement : ""if"" ""("" expression "")"" statement ; if_then_else_statement : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement ; if_then_else_statement_no_short_if : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement_no_short_if ; switch_statement : ""switch"" ""("" expression "")"" switch_block ; switch_block : ""{"" switch_block_statement_groups switch_labels ""}"" | ""{"" switch_block_statement_groups ""}"" | ""{"" switch_labels ""}"" | ""{"" ""}"" ; switch_block_statement_groups : switch_block_statement_group | switch_block_statement_groups switch_block_statement_group ; switch_block_statement_group : switch_labels block_statements ; switch_labels : switch_label | switch_labels switch_label ; switch_label : ""case"" constant_expression "":"" | ""default"" "":"" ; while_statement : ""while"" ""("" expression "")"" statement ; while_statement_no_short_if : ""while"" ""("" expression "")"" statement_no_short_if ; do_statement : ""do"" statement ""while"" ""("" expression "")"" "";"" ; for_statement : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement ; for_statement_no_short_if : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement_no_short_if ; for_init_opt : | for_init ; for_init : statement_expression_list | local_variable_declaration ; for_update_opt : | for_update ; for_update : statement_expression_list ; statement_expression_list : statement_expression | statement_expression_list "","" statement_expression ; identifier_opt : | ; break_statement : ""break"" identifier_opt "";"" ; continue_statement : ""continue"" identifier_opt "";"" ; return_statement : ""return"" expression_opt "";"" ; throw_statement : ""throw"" expression "";"" ; synchronized_statement : ""synchronized"" ""("" expression "")"" block ; try_statement : ""try"" block catches | ""try"" block catches_opt finally ; catches_opt : | catches ; catches : catch_clause | catches catch_clause ; catch_clause : ""catch"" ""("" formal_parameter "")"" block ; finally : ""finally"" block ; # 19.12) Expressions primary : primary_no_new_array | array_creation_expression ; primary_no_new_array : literal | ""this"" | ""("" expression "")"" | class_instance_creation_expression | field_access | method_invocation | array_access | primitive_type ""."" ""class"" | ""void"" ""."" ""class"" | array_type ""."" ""class"" | name ""."" ""class"" | name ""."" ""this"" ; class_instance_creation_expression : ""new"" class_type ""("" argument_list_opt "")"" | ""new"" class_type ""("" argument_list_opt "")"" class_body | primary ""."" ""new"" ""("" argument_list_opt "")"" | primary ""."" ""new"" ""("" argument_list_opt "")"" class_body ; argument_list_opt : | argument_list ; argument_list : expression | argument_list "","" expression ; array_creation_expression : ""new"" primitive_type dim_exprs dims_opt | ""new"" class_or_interface_type dim_exprs dims_opt | ""new"" primitive_type dims array_initializer | ""new"" class_or_interface_type dims array_initializer ; dim_exprs : dim_expr | dim_exprs dim_expr ; dim_expr : ""["" expression ""]"" ; dims_opt : | dims ; dims : ""["" ""]"" | dims ""["" ""]"" ; field_access : primary ""."" | ""super"" ""."" | name ""."" ""super"" ""."" ; method_invocation : name ""("" argument_list_opt "")"" | primary ""."" ""("" argument_list_opt "")"" | ""super"" ""."" ""("" argument_list_opt "")"" | name ""."" ""super"" ""."" ""("" argument_list_opt "")"" ; array_access : name ""["" expression ""]"" | primary_no_new_array ""["" expression ""]"" ; postfix_expression : primary | name | postincrement_expression | postdecrement_expression ; postincrement_expression : postfix_expression ""++"" ; postdecrement_expression : postfix_expression ""--"" ; unary_expression : preincrement_expression | predecrement_expression | ""+"" unary_expression | ""-"" unary_expression | unary_expression_not_plus_minus ; preincrement_expression : ""++"" unary_expression ; predecrement_expression : ""--"" unary_expression ; unary_expression_not_plus_minus : postfix_expression | ""~"" unary_expression | ""!!"" unary_expression | cast_expression ; cast_expression : ""("" primitive_type dims_opt "")"" unary_expression | ""("" expression "")"" unary_expression_not_plus_minus | ""("" name dims "")"" unary_expression_not_plus_minus ; multiplicative_expression : unary_expression | multiplicative_expression ""*"" unary_expression | multiplicative_expression ""/"" unary_expression | multiplicative_expression ""%"" unary_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression | shift_expression "">>>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression | relational_expression ""instanceof"" reference_type ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; conditional_and_expression : inclusive_or_expression | conditional_and_expression ""&&"" inclusive_or_expression ; conditional_or_expression : conditional_and_expression | conditional_or_expression ""||"" conditional_and_expression ; conditional_expression : conditional_or_expression | conditional_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | assignment ; assignment : left_hand_side assignment_operator assignment_expression ; left_hand_side : name | field_access | array_access ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | "">>>="" | ""&="" | ""^="" | ""|="" ; expression_opt : | expression ; expression : assignment_expression ; constant_expression : expression ;"! ! !JavaParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50' prior: 83287872! scannerClass ^JavaScanner! ! !JavaParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50' prior: 83287989! startingStateForgoal ^1! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50' prior: 83288089! reduceTable ^#( #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 1 #reduceFor:) #(106 1 #reduceFor:) #(106 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(110 2 #reduceFor:) #(110 2 #reduceFor:) #(111 1 #reduceFor:) #(111 1 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(114 2 #reduceFor:) #(114 3 #reduceFor:) #(115 1 #reduceFor:) #(116 3 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 0 #reduceFor:) #(119 1 #reduceFor:) #(119 0 #reduceFor:) #(120 1 #reduceFor:) #(120 0 #reduceFor:) #(121 3 #reduceFor:) #(122 1 #reduceFor:) #(122 2 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(124 1 #reduceFor:) #(124 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(126 3 #reduceFor:) #(127 5 #reduceFor:) #(128 6 #reduceFor:) #(129 5 #reduceFor:) #(130 1 #reduceFor:) #(131 0 #reduceFor:) #(131 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(133 0 #reduceFor:) #(133 1 #reduceFor:) #(134 0 #reduceFor:) #(134 1 #reduceFor:) #(135 3 #reduceFor:) #(136 2 #reduceFor:) #(137 1 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(139 0 #reduceFor:) #(139 1 #reduceFor:) #(140 1 #reduceFor:) #(140 2 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(142 6 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(143 2 #reduceFor:) #(144 4 #reduceFor:) #(145 3 #reduceFor:) #(146 4 #reduceFor:) #(147 2 #reduceFor:) #(148 1 #reduceFor:) #(148 3 #reduceFor:) #(149 1 #reduceFor:) #(149 3 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(151 1 #reduceFor:) #(151 1 #reduceFor:) #(152 1 #reduceFor:) #(153 4 #reduceFor:) #(153 3 #reduceFor:) #(153 3 #reduceFor:) #(153 2 #reduceFor:) #(154 4 #reduceFor:) #(154 4 #reduceFor:) #(155 1 #reduceFor:) #(155 1 #reduceFor:) #(156 4 #reduceFor:) #(156 3 #reduceFor:) #(157 0 #reduceFor:) #(157 1 #reduceFor:) #(158 0 #reduceFor:) #(158 1 #reduceFor:) #(159 1 #reduceFor:) #(159 3 #reduceFor:) #(160 2 #reduceFor:) #(160 3 #reduceFor:) #(161 2 #reduceFor:) #(162 1 #reduceFor:) #(162 3 #reduceFor:) #(163 4 #reduceFor:) #(164 4 #reduceFor:) #(164 3 #reduceFor:) #(164 3 #reduceFor:) #(164 2 #reduceFor:) #(165 5 #reduceFor:) #(165 5 #reduceFor:) #(165 7 #reduceFor:) #(165 7 #reduceFor:) #(166 1 #reduceFor:) #(166 2 #reduceFor:) #(167 0 #reduceFor:) #(167 1 #reduceFor:) #(168 1 #reduceFor:) #(168 1 #reduceFor:) #(169 0 #reduceFor:) #(169 1 #reduceFor:) #(170 3 #reduceFor:) #(171 2 #reduceFor:) #(171 3 #reduceFor:) #(172 0 #reduceFor:) #(172 1 #reduceFor:) #(173 1 #reduceFor:) #(173 2 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(175 1 #reduceFor:) #(176 2 #reduceFor:) #(177 1 #reduceFor:) #(177 3 #reduceFor:) #(178 0 #reduceFor:) #(178 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(180 2 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(182 2 #reduceFor:) #(182 3 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(184 3 #reduceFor:) #(185 5 #reduceFor:) #(186 7 #reduceFor:) #(187 5 #reduceFor:) #(188 9 #reduceFor:) #(189 3 #reduceFor:) #(190 7 #reduceFor:) #(191 5 #reduceFor:) #(192 9 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(194 1 #reduceFor:) #(195 2 #reduceFor:) #(196 5 #reduceFor:) #(197 7 #reduceFor:) #(198 3 #reduceFor:) #(199 3 #reduceFor:) #(200 3 #reduceFor:) #(201 5 #reduceFor:) #(202 3 #reduceFor:) #(203 3 #reduceFor:) #(203 4 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(205 3 #reduceFor:) #(206 2 #reduceFor:) #(207 2 #reduceFor:) #(208 2 #reduceFor:) #(209 2 #reduceFor:) #(210 4 #reduceFor:) #(210 6 #reduceFor:) #(210 6 #reduceFor:) #(210 8 #reduceFor:) #(211 5 #reduceFor:) #(211 6 #reduceFor:) #(211 7 #reduceFor:) #(211 8 #reduceFor:) #(212 4 #reduceFor:) #(212 3 #reduceFor:) #(212 3 #reduceFor:) #(212 2 #reduceFor:) #(213 1 #reduceFor:) #(213 2 #reduceFor:) #(214 1 #reduceFor:) #(214 2 #reduceFor:) #(215 2 #reduceFor:) #(216 3 #reduceFor:) #(216 2 #reduceFor:) #(217 1 #reduceFor:) #(218 0 #reduceFor:) #(218 1 #reduceFor:) #(219 0 #reduceFor:) #(219 1 #reduceFor:) #(220 0 #reduceFor:) #(220 1 #reduceFor:) #(221 1 #reduceFor:) #(221 1 #reduceFor:) #(222 1 #reduceFor:) #(222 3 #reduceFor:) #(223 1 #reduceFor:) #(224 0 #reduceFor:) #(224 1 #reduceFor:) #(225 1 #reduceFor:) #(225 2 #reduceFor:) #(226 0 #reduceFor:) #(226 1 #reduceFor:) #(227 2 #reduceFor:) #(228 5 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(231 3 #reduceFor:) #(231 3 #reduceFor:) #(231 5 #reduceFor:) #(232 4 #reduceFor:) #(232 4 #reduceFor:) #(233 1 #reduceFor:) #(233 3 #reduceFor:) #(234 1 #reduceFor:) #(234 2 #reduceFor:) #(235 0 #reduceFor:) #(235 1 #reduceFor:) #(236 3 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(238 1 #reduceFor:) #(238 1 #reduceFor:) #(238 2 #reduceFor:) #(238 2 #reduceFor:) #(238 1 #reduceFor:) #(239 1 #reduceFor:) #(239 2 #reduceFor:) #(239 2 #reduceFor:) #(239 1 #reduceFor:) #(240 5 #reduceFor:) #(240 4 #reduceFor:) #(240 5 #reduceFor:) #(241 1 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(242 1 #reduceFor:) #(242 3 #reduceFor:) #(242 3 #reduceFor:) #(243 1 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(244 1 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(245 1 #reduceFor:) #(245 3 #reduceFor:) #(245 3 #reduceFor:) #(246 1 #reduceFor:) #(246 3 #reduceFor:) #(247 1 #reduceFor:) #(247 3 #reduceFor:) #(248 1 #reduceFor:) #(248 3 #reduceFor:) #(249 1 #reduceFor:) #(249 3 #reduceFor:) #(250 1 #reduceFor:) #(250 3 #reduceFor:) #(251 1 #reduceFor:) #(251 5 #reduceFor:) #(252 1 #reduceFor:) #(252 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(257 1 #reduceFor:) #(258 3 #reduceFor:) #(259 1 #reduceFor:) #(259 2 #reduceFor:) )! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50' prior: 83295617! transitionTable ^#( #[1 0 138 0 7 0 138 0 8 0 138 0 12 0 138 0 16 0 138 0 18 0 9 0 29 0 138 0 32 0 138 0 36 0 138 0 37 0 138 0 38 0 138 0 39 0 138 0 40 0 138 0 43 0 138 0 44 0 138 0 45 0 138 0 46 0 13 0 118 0 17 0 121 0 138 0 255 0 21 1 1 0 25 1 2] #[1 0 29 0 99 0 33 0 111 0 37 0 115 0 41 0 116] #[1 0 146 0 7 0 146 0 8 0 146 0 12 0 146 0 16 0 146 0 18 0 146 0 32 0 146 0 36 0 146 0 37 0 146 0 38 0 146 0 39 0 146 0 40 0 146 0 43 0 45 0 44 0 146 0 45 0 146 0 46 0 49 0 119 0 53 0 122 0 57 0 124 0 61 0 126 0 65 0 127 0 146 0 255] #[0 0 134 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 0 0 255] #[0 5 126 0 255] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 69 0 28 0 73 0 32] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 29 0 99 0 77 0 111 0 37 0 115 0 41 0 116] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 129 0 120 0 133 0 123 0 137 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 154 0 255 0 157 1 3] #[1 0 142 0 7 0 142 0 8 0 142 0 12 0 142 0 16 0 142 0 18 0 142 0 32 0 142 0 36 0 142 0 37 0 142 0 38 0 142 0 39 0 142 0 40 0 142 0 43 0 45 0 44 0 142 0 45 0 142 0 46 0 161 0 124 0 61 0 126 0 65 0 127 0 142 0 255] #[0 0 162 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 178 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 182 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 165 0 99] #[0 0 158 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 169 0 28 0 173 0 32] #[0 1 10 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 6 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 2 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 194 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 246 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 250 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 242 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 238 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 254 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 226 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 234 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 230 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 5 130 0 255] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 177 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 150 0 255 0 157 1 3] #[0 0 170 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 186 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 190 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[1 0 181 0 8 0 185 0 16] #[0 5 134 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 81 0 7 0 222 0 8 0 222 0 9 0 85 0 12 0 222 0 16 0 89 0 18 0 222 0 24 0 222 0 25 0 222 0 26 0 222 0 27 0 222 0 30 0 222 0 31 0 222 0 33 0 222 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 222 0 99 0 189 0 132] #[0 0 166 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 193 0 42 0 165 0 99] #[0 0 198 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 174 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 197 0 99] #[0 0 201 0 99] #[0 5 138 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 205 0 32] #[1 1 14 0 3 1 14 0 10 0 209 0 11 0 213 0 133 0 217 0 136] #[1 2 46 0 3 0 221 0 11 0 225 0 169 0 229 0 171] #[0 0 202 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 29 0 99 0 233 0 109 0 237 0 111 0 241 0 112 0 37 0 115 0 41 0 116] #[1 1 22 0 3 0 245 0 10 0 249 0 134 0 253 0 138] #[0 1 18 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 5 0 113 0 37 0 115 0 41 0 116] #[1 1 9 0 3 1 13 0 170] #[1 2 50 0 3 1 17 0 4] #[0 0 86 0 3 0 4 0 10 0 32] #[1 0 66 0 3 0 66 0 4 0 66 0 5 0 66 0 10 0 66 0 21 0 69 0 28 0 66 0 32] #[0 1 34 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 21 0 113 0 37 0 115 0 41 0 116 1 25 0 137] #[1 1 29 0 3 1 33 0 135] #[0 1 26 0 3] #[0 0 90 0 3 0 4] #[0 2 58 0 3 0 4] #[1 2 66 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 57 0 172 1 61 0 173 1 65 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 0 210 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 77 0 113 0 37 0 115 0 41 0 116] #[0 1 38 0 3 0 4] #[1 1 46 0 3 1 81 0 4] #[1 1 50 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 1 105 0 139 1 109 0 140 1 113 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 0 206 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 90 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 94 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 181 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 2 98 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 217 0 32] #[0 1 221 0 1] #[1 2 70 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 225 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 2 74 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 82 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 86 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 62 0 3 0 4] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 229 0 113 0 37 0 115 0 41 0 116] #[1 2 114 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 117 0 166 2 121 0 168 2 125 0 178 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 98 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 0 238 0 7 0 238 0 8 0 238 0 9 0 238 0 12 0 238 0 16 0 238 0 18 0 238 0 24 0 238 0 25 0 238 0 26 0 238 0 27 0 238 0 30 0 238 0 31 0 238 0 33 0 238 0 34 0 238 0 36 0 238 0 37 0 238 0 38 0 238 0 39 0 238 0 40 0 238 0 43 0 238 0 45 0 238 0 46 0 238 0 99 3 9 0 145] #[0 1 94 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 3 13 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 3 17 0 115 0 41 0 116 3 21 0 163] #[0 3 25 0 1] #[1 1 54 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 3 29 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 1 58 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 66 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 70 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 74 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 78 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 82 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 86 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 3 33 0 32 3 37 0 145 3 41 0 155] #[1 3 45 0 99 3 49 0 156] #[0 0 58 0 5 0 19 0 28 0 99] #[0 0 62 0 5 0 19 0 28 0 99] #[0 0 54 0 5 0 19 0 28 0 99] #[0 0 50 0 5 0 19 0 28 0 99] #[0 0 10 0 5 0 19 0 28 0 99] #[0 0 38 0 5 0 19 0 28 0 99] #[0 0 46 0 5 0 19 0 28 0 99] #[0 0 42 0 5 0 19 0 28 0 99] #[1 3 53 0 5 0 22 0 99 3 57 0 114] #[0 0 26 0 99] #[1 3 61 0 99 3 65 0 148 3 69 0 149 3 73 0 150 3 77 0 156] #[0 0 6 0 5 0 19 0 28 0 99] #[0 0 30 0 5 0 19 0 28 0 99] #[0 0 34 0 5 0 19 0 28 0 99] #[0 0 14 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[0 0 18 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[1 0 66 0 1 0 66 0 4 3 53 0 5 0 66 0 6 0 66 0 15 0 66 0 19 0 69 0 28 0 66 0 32 0 66 0 48 0 66 0 49 0 66 0 50 0 66 0 51 0 66 0 52 0 66 0 53 0 66 0 54 0 66 0 55 0 66 0 56 0 66 0 58 0 66 0 59 0 66 0 65 0 66 0 71 0 66 0 99 3 81 0 114] #[0 2 102 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 54 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 78 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 42 0 3 0 4] #[0 3 85 0 28] #[0 3 89 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 125 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 221 0 28] #[0 4 14 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 18 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 225 0 21] #[1 0 246 0 7 0 246 0 8 0 246 0 12 0 246 0 16 0 246 0 18 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 246 0 36 0 246 0 37 0 246 0 38 0 246 0 39 0 246 0 40 0 246 0 43 0 246 0 45 0 246 0 46 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 0 254 0 7 0 254 0 8 0 254 0 12 0 254 0 16 0 254 0 18 3 233 0 21 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 43 0 254 0 45 0 254 0 46] #[0 3 237 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 241 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 3 249 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 3 253 0 103 1 193 0 106 1 197 0 107 1 201 0 108 4 1 0 109 0 237 0 111 4 5 0 112 0 37 0 115 0 41 0 116] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 4 13 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 4 17 0 21] #[1 1 85 0 3 4 21 0 145] #[1 3 234 0 32 4 25 0 99 4 29 0 224] #[1 3 234 0 32 4 25 0 99 4 33 0 224] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 49 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 53 0 238 3 165 0 239 3 169 0 240] #[0 0 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 126 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 0 102 0 2 0 102 0 5 0 102 0 13 4 57 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87 0 102 0 99] #[1 3 53 0 5 4 61 0 28 0 22 0 99 3 57 0 114] #[1 4 65 0 99 4 69 0 148 3 69 0 149 3 73 0 150] #[1 4 73 0 28 0 18 0 99] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 81 0 21 4 85 0 28 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 82 4 126 0 87 0 66 0 99 3 81 0 114] #[0 4 10 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 130 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 134 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 174 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 118 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 4 122 0 1 4 122 0 4 4 122 0 6 4 122 0 15 4 122 0 19 4 93 0 28 4 122 0 32 4 122 0 42 4 122 0 48 4 122 0 49 4 122 0 50 4 122 0 51 4 122 0 52 4 122 0 53 4 122 0 54 4 122 0 55 4 122 0 56 4 122 0 58 4 122 0 59 4 122 0 65 4 122 0 71 4 122 0 82 4 122 0 83 4 122 0 84 4 122 0 85 4 122 0 86 4 122 0 87 4 122 0 88 4 122 0 89 4 122 0 90] #[0 4 97 0 1] #[0 2 22 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 122 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 126 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 101 0 32] #[0 2 142 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 146 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 150 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 154 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 158 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 162 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 178 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 182 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 186 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 190 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 194 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 198 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 202 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 206 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 210 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 214 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 105 0 32] #[0 3 62 0 4 0 19 0 32] #[0 3 66 0 4 0 19 0 32] #[0 3 70 0 4 0 19 0 32] #[1 3 74 0 4 3 74 0 19 3 74 0 32 4 130 0 82 4 130 0 87] #[1 3 78 0 4 3 78 0 19 3 78 0 32 4 134 0 82 4 134 0 87] #[1 3 82 0 4 4 30 0 5 3 82 0 19 4 30 0 28 3 82 0 32 4 30 0 82 4 30 0 87] #[1 3 86 0 4 4 22 0 5 3 86 0 19 4 22 0 28 3 86 0 32 4 22 0 82 4 22 0 87] #[1 2 38 0 1 2 38 0 4 4 109 0 5 2 38 0 6 2 38 0 15 2 38 0 19 2 38 0 28 2 38 0 32 2 38 0 42 2 38 0 48 2 38 0 49 2 38 0 50 2 38 0 51 2 38 0 52 2 38 0 53 2 38 0 54 2 38 0 55 2 38 0 56 2 38 0 58 2 38 0 59 2 38 0 65 2 38 0 71 2 38 0 82 2 38 0 83 2 38 0 84 2 38 0 85 2 38 0 86 2 38 0 87 2 38 0 88 2 38 0 89 2 38 0 90] #[0 2 42 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 26 0 1 5 70 0 2 4 26 0 4 4 26 0 5 4 26 0 6 5 70 0 13 4 26 0 15 4 26 0 19 4 26 0 28 4 26 0 32 4 26 0 42 4 26 0 48 4 26 0 49 4 26 0 50 4 26 0 51 4 26 0 52 4 26 0 53 4 26 0 54 4 26 0 55 4 26 0 56 4 26 0 58 4 26 0 59 5 70 0 60 5 70 0 61 5 70 0 62 5 70 0 63 5 70 0 64 4 26 0 65 5 70 0 66 5 70 0 67 5 70 0 68 5 70 0 69 5 70 0 70 4 26 0 71 4 26 0 82 4 26 0 83 4 26 0 84 4 26 0 85 4 26 0 86 4 26 0 87 4 26 0 88 4 26 0 89 4 26 0 90] #[1 4 34 0 1 5 74 0 2 4 34 0 4 4 34 0 5 4 34 0 6 5 74 0 13 4 34 0 15 4 34 0 19 4 34 0 28 4 34 0 32 4 34 0 42 4 34 0 48 4 34 0 49 4 34 0 50 4 34 0 51 4 34 0 52 4 34 0 53 4 34 0 54 4 34 0 55 4 34 0 56 4 34 0 58 4 34 0 59 5 74 0 60 5 74 0 61 5 74 0 62 5 74 0 63 5 74 0 64 4 34 0 65 5 74 0 66 5 74 0 67 5 74 0 68 5 74 0 69 5 74 0 70 4 34 0 71 4 34 0 82 4 34 0 83 4 34 0 84 4 34 0 85 4 34 0 86 4 34 0 87 4 34 0 88 4 34 0 89 4 34 0 90] #[1 4 113 0 82 4 117 0 87] #[1 4 121 0 2 4 125 0 13 4 129 0 60 4 133 0 61 4 137 0 62 4 141 0 63 4 145 0 64 4 149 0 66 4 153 0 67 4 157 0 68 4 161 0 69 4 165 0 70 4 169 0 254] #[0 1 102 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 173 0 99] #[1 0 78 0 5 4 177 0 21 0 78 0 28 0 78 0 99] #[1 1 198 0 3 4 181 0 20 4 185 0 157 4 189 0 161] #[0 1 30 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 12 0 15 0 16 0 17 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 65 0 71 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 1 62 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 186 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 118 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 193 0 21] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 201 0 157 4 189 0 161] #[0 4 205 0 6] #[1 0 70 0 1 0 70 0 4 4 209 0 5 0 70 0 6 0 70 0 15 0 70 0 19 0 70 0 28 0 70 0 32 0 70 0 48 0 70 0 49 0 70 0 50 0 70 0 51 0 70 0 52 0 70 0 53 0 70 0 54 0 70 0 55 0 70 0 56 0 70 0 58 0 70 0 59 0 70 0 65 0 70 0 71 0 70 0 99] #[1 1 138 0 2 1 138 0 4 1 138 0 5 4 193 0 21 1 138 0 32] #[1 4 213 0 4 4 217 0 32] #[0 1 122 0 4 0 32] #[1 4 221 0 2 1 130 0 4 4 225 0 5 1 130 0 32] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 229 0 157 4 189 0 161] #[1 0 74 0 1 0 74 0 4 4 209 0 5 0 74 0 6 0 74 0 15 0 74 0 19 0 74 0 28 0 74 0 32 0 74 0 48 0 74 0 49 0 74 0 50 0 74 0 51 0 74 0 52 0 74 0 53 0 74 0 54 0 74 0 55 0 74 0 56 0 74 0 58 0 74 0 59 0 74 0 65 0 74 0 71 0 74 0 99] #[0 4 233 0 8] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 237 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 4 241 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 245 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 249 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 253 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 1 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 5 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 9 0 238 3 165 0 239 3 169 0 240] #[1 3 53 0 5 4 61 0 28 3 57 0 114] #[0 4 73 0 28] #[1 4 126 0 1 5 66 0 2 4 126 0 4 4 77 0 5 4 126 0 6 5 66 0 13 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 5 13 0 19] #[0 5 62 0 1 0 4 0 6 0 15 0 19 0 32] #[0 4 138 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 142 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 130 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 134 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 30 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 22 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 158 0 1 4 158 0 4 4 158 0 6 4 158 0 15 4 158 0 19 4 158 0 32 4 158 0 42 4 158 0 48 4 158 0 49 4 158 0 50 4 158 0 51 4 158 0 52 4 158 0 53 4 158 0 54 4 158 0 55 4 158 0 56 4 158 0 58 4 158 0 59 4 158 0 65 4 158 0 71 4 113 0 82 4 158 0 83 4 158 0 84 4 158 0 85 4 158 0 86 4 117 0 87 4 158 0 88 4 158 0 89 4 158 0 90] #[0 4 186 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 154 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 170 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 202 0 1 4 202 0 4 4 202 0 6 4 202 0 15 4 202 0 19 4 202 0 32 5 17 0 42 4 202 0 48 4 202 0 49 4 202 0 50 4 202 0 51 4 202 0 52 4 202 0 53 4 202 0 54 4 202 0 55 4 202 0 56 4 202 0 58 4 202 0 59 4 202 0 65 4 202 0 71 4 202 0 83 4 202 0 84 5 21 0 85 4 202 0 86 5 25 0 88 4 202 0 89 4 202 0 90] #[1 4 214 0 1 4 214 0 4 4 214 0 6 4 214 0 15 4 214 0 19 4 214 0 32 4 214 0 48 4 214 0 49 4 214 0 50 4 214 0 51 4 214 0 52 4 214 0 53 4 214 0 54 4 214 0 55 4 214 0 56 4 214 0 58 4 214 0 59 4 214 0 65 4 214 0 71 4 214 0 83 4 214 0 84 4 214 0 86 5 29 0 89 5 33 0 90] #[1 4 230 0 1 4 230 0 4 4 230 0 6 4 230 0 15 4 230 0 19 4 230 0 32 4 230 0 48 4 230 0 49 4 230 0 50 4 230 0 51 4 230 0 52 4 230 0 53 4 230 0 54 4 230 0 55 4 230 0 56 4 230 0 58 4 230 0 59 4 230 0 65 4 230 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 254 0 1 4 254 0 4 4 254 0 6 4 254 0 15 4 254 0 19 4 254 0 32 4 254 0 48 4 254 0 49 4 254 0 50 4 254 0 51 4 254 0 52 4 254 0 53 5 49 0 54 5 53 0 55 4 254 0 56 5 57 0 58 5 61 0 59 4 254 0 65 5 65 0 71] #[1 5 10 0 1 5 10 0 4 5 10 0 6 5 10 0 15 5 10 0 19 5 10 0 32 5 10 0 48 5 10 0 49 5 10 0 50 5 69 0 51 5 10 0 52 5 10 0 53 5 10 0 56 5 73 0 65] #[1 5 18 0 1 5 18 0 4 5 18 0 6 5 18 0 15 5 18 0 19 5 18 0 32 5 18 0 48 5 18 0 49 5 77 0 50 5 18 0 52 5 18 0 53 5 18 0 56] #[1 5 26 0 1 5 26 0 4 5 26 0 6 5 26 0 15 5 26 0 19 5 26 0 32 5 81 0 48 5 26 0 49 5 26 0 52 5 26 0 53 5 26 0 56] #[1 5 34 0 1 5 34 0 4 5 34 0 6 5 34 0 15 5 34 0 19 5 34 0 32 5 85 0 49 5 34 0 52 5 34 0 53 5 34 0 56] #[1 5 42 0 1 5 42 0 4 5 42 0 6 5 42 0 15 5 42 0 19 5 42 0 32 5 89 0 52 5 42 0 53 5 42 0 56] #[1 5 50 0 1 5 50 0 4 5 50 0 6 5 50 0 15 5 50 0 19 5 50 0 32 5 93 0 53 5 97 0 56] #[0 5 58 0 1 0 4 0 6 0 15 0 19 0 32] #[0 1 154 0 1 0 4 0 6 0 15 0 19 0 32] #[0 5 101 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 105 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 65 0 99 5 109 0 148 3 69 0 149 3 73 0 150] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 113 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 117 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 5 121 0 32] #[0 3 202 0 32] #[0 5 125 0 32] #[1 5 129 0 5 5 133 0 114 5 137 0 234 5 141 0 236] #[1 5 129 0 5 0 86 0 21 5 145 0 114 5 149 0 234 5 141 0 236] #[0 5 153 0 21] #[0 3 233 0 21] #[0 5 157 0 57] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 5 173 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 5 185 0 72 3 250 0 75 5 189 0 225 5 193 0 226 5 197 0 228] #[0 3 238 0 32] #[0 5 201 0 32] #[0 5 205 0 32] #[1 4 126 0 1 4 126 0 4 4 77 0 5 4 126 0 6 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 4 126 0 65 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 4 26 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 34 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 94 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 3 98 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 5 213 0 8] #[0 1 138 0 2 0 4 0 5 0 19 0 32] #[1 4 213 0 4 2 166 0 32] #[0 5 217 0 8] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 221 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 5 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 5 237 0 8 5 241 0 22 5 245 0 23 0 165 0 99] #[0 2 26 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 5 249 0 76 5 253 0 99] #[0 1 110 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 138 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 22 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 1 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 102 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 106 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 5 78 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 122 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 110 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 114 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 106 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 102 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 118 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 86 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 90 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 82 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 98 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 94 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 6 5 0 252 3 5 0 253] #[1 1 14 0 3 1 14 0 10 0 209 0 11 6 9 0 133 0 217 0 136] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 21 0 158 6 25 0 159 6 29 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 6 33 0 112 0 37 0 115 0 41 0 116 6 37 0 162] #[1 6 41 0 3 6 45 0 164] #[0 1 202 0 3 0 32] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 49 0 158 6 25 0 159 6 29 0 160] #[0 6 53 0 6] #[0 1 178 0 3 0 32] #[0 0 94 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 6 57 0 6] #[1 4 65 0 99 6 61 0 149 3 73 0 150] #[0 1 114 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 69 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 81 0 6] #[0 1 174 0 3 0 32] #[0 4 42 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 6 85 0 19] #[1 3 53 0 5 4 110 0 19 4 61 0 28 6 89 0 114 6 93 0 235] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 6 97 0 114] #[0 6 101 0 19] #[0 4 146 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 150 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 166 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 162 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 18 0 5 0 28 0 82 0 87] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 105 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 109 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 113 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 117 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 121 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 125 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 129 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 133 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 137 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 141 0 243] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 6 145 0 103 6 149 0 104 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 153 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 157 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 161 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 165 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 6 169 0 245] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 6 173 0 246] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 6 177 0 247] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 6 181 0 248] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 6 185 0 249] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 78 0 1 4 78 0 2 4 78 0 4 4 78 0 5 4 78 0 6 4 78 0 13 4 78 0 15 4 78 0 19 6 193 0 21 4 78 0 28 4 78 0 32 4 78 0 42 4 78 0 48 4 78 0 49 4 78 0 50 4 78 0 51 4 78 0 52 4 78 0 53 4 78 0 54 4 78 0 55 4 78 0 56 4 78 0 58 4 78 0 59 4 78 0 60 4 78 0 61 4 78 0 62 4 78 0 63 4 78 0 64 4 78 0 65 4 78 0 66 4 78 0 67 4 78 0 68 4 78 0 69 4 78 0 70 4 78 0 71 4 78 0 82 4 78 0 83 4 78 0 84 4 78 0 85 4 78 0 86 4 78 0 87 4 78 0 88 4 78 0 89 4 78 0 90] #[0 6 197 0 19] #[1 4 213 0 4 2 170 0 32] #[0 6 201 0 19] #[0 6 205 0 19] #[0 3 50 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 42 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 209 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 6 65 0 3 4 209 0 5 6 213 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 221 0 235 6 225 0 236] #[0 4 102 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 6 65 0 3 4 209 0 5 6 229 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 233 0 235 6 225 0 236] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 6 237 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 241 0 21] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 3 218 0 32] #[0 3 222 0 4 0 19 0 32] #[0 6 245 0 32] #[0 3 194 0 32] #[1 6 249 0 4 3 214 0 32] #[0 6 253 0 21] #[1 3 54 0 1 3 54 0 3 3 54 0 7 3 54 0 8 3 54 0 9 3 54 0 12 3 54 0 14 3 54 0 16 3 54 0 17 3 54 0 18 3 54 0 21 3 54 0 22 3 54 0 23 3 54 0 24 3 54 0 25 3 54 0 26 3 54 0 27 3 54 0 30 3 54 0 31 3 54 0 32 3 54 0 33 3 54 0 34 3 54 0 35 3 54 0 36 3 54 0 37 3 54 0 38 3 54 0 39 3 54 0 40 3 54 0 41 3 54 0 43 3 54 0 45 3 54 0 46 3 54 0 47 3 54 0 57 5 185 0 72 3 54 0 73 3 54 0 74 3 254 0 75 3 54 0 76 3 54 0 77 3 54 0 78 3 54 0 79 3 54 0 80 3 54 0 81 3 54 0 82 3 54 0 87 3 54 0 93 3 54 0 94 3 54 0 95 3 54 0 96 3 54 0 97 3 54 0 98 3 54 0 99 7 1 0 228] #[1 7 5 0 75 7 9 0 227] #[0 3 242 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 38 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 34 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 218 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 38 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 46 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 13 0 6] #[0 4 94 0 4 0 19] #[0 7 17 0 19] #[1 7 21 0 4 2 34 0 19] #[0 4 50 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 25 0 28] #[0 4 54 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 29 0 99] #[1 4 74 0 1 4 74 0 2 4 74 0 4 4 74 0 5 4 74 0 6 4 74 0 13 4 74 0 15 4 74 0 19 7 33 0 21 4 74 0 28 4 74 0 32 4 74 0 42 4 74 0 48 4 74 0 49 4 74 0 50 4 74 0 51 4 74 0 52 4 74 0 53 4 74 0 54 4 74 0 55 4 74 0 56 4 74 0 58 4 74 0 59 4 74 0 60 4 74 0 61 4 74 0 62 4 74 0 63 4 74 0 64 4 74 0 65 4 74 0 66 4 74 0 67 4 74 0 68 4 74 0 69 4 74 0 70 4 74 0 71 4 74 0 82 4 74 0 83 4 74 0 84 4 74 0 85 4 74 0 86 4 74 0 87 4 74 0 88 4 74 0 89 4 74 0 90] #[0 7 37 0 6] #[0 3 90 0 1 0 4 0 6 0 15 0 19 0 32] #[1 1 22 0 3 0 245 0 10 7 41 0 134 0 253 0 138] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 7 45 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 4 65 0 99 7 49 0 150] #[0 7 53 0 19] #[1 7 57 0 4 1 210 0 19] #[0 1 214 0 4 0 19] #[0 1 234 0 3 0 4 0 32] #[1 1 230 0 3 7 61 0 4 1 230 0 32] #[1 7 65 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 7 69 0 22 7 73 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 7 77 0 165 7 81 0 166 7 85 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 106 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 7 89 0 19] #[0 1 194 0 3 0 5 0 20 0 32] #[0 0 98 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 1 126 0 4 0 32] #[1 7 93 0 1 6 65 0 3 7 97 0 4 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 101 0 151 6 73 0 152 6 77 0 153 2 121 0 168 7 105 0 177 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 134 0 4 0 32] #[0 1 146 0 1 0 4 0 32] #[0 1 150 0 1 0 4 0 32] #[0 1 142 0 2 0 4 0 5 0 19 0 32] #[1 7 109 0 3 7 113 0 212] #[1 4 209 0 5 4 114 0 19 0 70 0 28] #[0 7 117 0 19] #[1 4 209 0 5 7 121 0 19 0 74 0 28] #[1 4 18 0 1 4 18 0 4 4 18 0 5 4 18 0 6 1 233 0 9 4 18 0 15 4 18 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 4 18 0 28 1 165 0 30 1 169 0 31 4 18 0 32 1 173 0 33 1 177 0 34 4 18 0 42 4 18 0 48 4 18 0 49 4 18 0 50 4 18 0 51 4 18 0 52 4 18 0 53 4 18 0 54 4 18 0 55 4 18 0 56 4 18 0 58 4 18 0 59 4 18 0 65 4 18 0 71 2 25 0 76 4 18 0 82 4 18 0 83 4 18 0 84 4 18 0 85 4 18 0 86 4 18 0 87 4 18 0 88 4 18 0 89 4 18 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 7 125 0 239 3 169 0 240] #[0 4 190 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 198 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 194 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 206 0 1 4 206 0 4 4 206 0 6 4 206 0 15 4 206 0 19 4 206 0 32 5 17 0 42 4 206 0 48 4 206 0 49 4 206 0 50 4 206 0 51 4 206 0 52 4 206 0 53 4 206 0 54 4 206 0 55 4 206 0 56 4 206 0 58 4 206 0 59 4 206 0 65 4 206 0 71 4 206 0 83 4 206 0 84 5 21 0 85 4 206 0 86 5 25 0 88 4 206 0 89 4 206 0 90] #[1 4 210 0 1 4 210 0 4 4 210 0 6 4 210 0 15 4 210 0 19 4 210 0 32 5 17 0 42 4 210 0 48 4 210 0 49 4 210 0 50 4 210 0 51 4 210 0 52 4 210 0 53 4 210 0 54 4 210 0 55 4 210 0 56 4 210 0 58 4 210 0 59 4 210 0 65 4 210 0 71 4 210 0 83 4 210 0 84 5 21 0 85 4 210 0 86 5 25 0 88 4 210 0 89 4 210 0 90] #[1 4 218 0 1 4 218 0 4 4 218 0 6 4 218 0 15 4 218 0 19 4 218 0 32 4 218 0 48 4 218 0 49 4 218 0 50 4 218 0 51 4 218 0 52 4 218 0 53 4 218 0 54 4 218 0 55 4 218 0 56 4 218 0 58 4 218 0 59 4 218 0 65 4 218 0 71 4 218 0 83 4 218 0 84 4 218 0 86 5 29 0 89 5 33 0 90] #[1 4 222 0 1 4 222 0 4 4 222 0 6 4 222 0 15 4 222 0 19 4 222 0 32 4 222 0 48 4 222 0 49 4 222 0 50 4 222 0 51 4 222 0 52 4 222 0 53 4 222 0 54 4 222 0 55 4 222 0 56 4 222 0 58 4 222 0 59 4 222 0 65 4 222 0 71 4 222 0 83 4 222 0 84 4 222 0 86 5 29 0 89 5 33 0 90] #[1 4 226 0 1 4 226 0 4 4 226 0 6 4 226 0 15 4 226 0 19 4 226 0 32 4 226 0 48 4 226 0 49 4 226 0 50 4 226 0 51 4 226 0 52 4 226 0 53 4 226 0 54 4 226 0 55 4 226 0 56 4 226 0 58 4 226 0 59 4 226 0 65 4 226 0 71 4 226 0 83 4 226 0 84 4 226 0 86 5 29 0 89 5 33 0 90] #[1 4 242 0 1 4 242 0 4 4 242 0 6 4 242 0 15 4 242 0 19 4 242 0 32 4 242 0 48 4 242 0 49 4 242 0 50 4 242 0 51 4 242 0 52 4 242 0 53 4 242 0 54 4 242 0 55 4 242 0 56 4 242 0 58 4 242 0 59 4 242 0 65 4 242 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 246 0 1 4 246 0 4 4 246 0 6 4 246 0 15 4 246 0 19 4 246 0 32 4 246 0 48 4 246 0 49 4 246 0 50 4 246 0 51 4 246 0 52 4 246 0 53 4 246 0 54 4 246 0 55 4 246 0 56 4 246 0 58 4 246 0 59 4 246 0 65 4 246 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 3 53 0 5 3 57 0 114] #[0 4 250 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71] #[1 4 238 0 1 4 238 0 4 4 238 0 6 4 238 0 15 4 238 0 19 4 238 0 32 4 238 0 48 4 238 0 49 4 238 0 50 4 238 0 51 4 238 0 52 4 238 0 53 4 238 0 54 4 238 0 55 4 238 0 56 4 238 0 58 4 238 0 59 4 238 0 65 4 238 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 234 0 1 4 234 0 4 4 234 0 6 4 234 0 15 4 234 0 19 4 234 0 32 4 234 0 48 4 234 0 49 4 234 0 50 4 234 0 51 4 234 0 52 4 234 0 53 4 234 0 54 4 234 0 55 4 234 0 56 4 234 0 58 4 234 0 59 4 234 0 65 4 234 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 5 6 0 1 5 6 0 4 5 6 0 6 5 6 0 15 5 6 0 19 5 6 0 32 5 6 0 48 5 6 0 49 5 6 0 50 5 6 0 51 5 6 0 52 5 6 0 53 5 49 0 54 5 53 0 55 5 6 0 56 5 57 0 58 5 61 0 59 5 6 0 65 5 65 0 71] #[1 5 2 0 1 5 2 0 4 5 2 0 6 5 2 0 15 5 2 0 19 5 2 0 32 5 2 0 48 5 2 0 49 5 2 0 50 5 2 0 51 5 2 0 52 5 2 0 53 5 49 0 54 5 53 0 55 5 2 0 56 5 57 0 58 5 61 0 59 5 2 0 65 5 65 0 71] #[1 5 14 0 1 5 14 0 4 5 14 0 6 5 14 0 15 5 14 0 19 5 14 0 32 5 14 0 48 5 14 0 49 5 14 0 50 5 69 0 51 5 14 0 52 5 14 0 53 5 14 0 56 5 73 0 65] #[1 5 22 0 1 5 22 0 4 5 22 0 6 5 22 0 15 5 22 0 19 5 22 0 32 5 22 0 48 5 22 0 49 5 77 0 50 5 22 0 52 5 22 0 53 5 22 0 56] #[1 5 30 0 1 5 30 0 4 5 30 0 6 5 30 0 15 5 30 0 19 5 30 0 32 5 81 0 48 5 30 0 49 5 30 0 52 5 30 0 53 5 30 0 56] #[1 5 38 0 1 5 38 0 4 5 38 0 6 5 38 0 15 5 38 0 19 5 38 0 32 5 85 0 49 5 38 0 52 5 38 0 53 5 38 0 56] #[1 5 46 0 1 5 46 0 4 5 46 0 6 5 46 0 15 5 46 0 19 5 46 0 32 5 89 0 52 5 46 0 53 5 46 0 56] #[0 7 129 0 15] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 133 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 7 177 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 7 181 0 145] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 7 189 0 6] #[0 4 66 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 114 0 1 4 114 0 4 4 209 0 5 4 114 0 6 4 114 0 15 4 114 0 19 4 114 0 28 4 114 0 32 4 114 0 42 4 114 0 48 4 114 0 49 4 114 0 50 4 114 0 51 4 114 0 52 4 114 0 53 4 114 0 54 4 114 0 55 4 114 0 56 4 114 0 58 4 114 0 59 4 114 0 65 4 114 0 71 4 114 0 82 4 114 0 83 4 114 0 84 4 114 0 85 4 114 0 86 4 114 0 87 4 114 0 88 4 114 0 89 4 114 0 90] #[0 4 58 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 106 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 70 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 62 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 193 0 19] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 197 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 7 201 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 7 205 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 209 0 160] #[0 3 246 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 7 213 0 145] #[0 3 58 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 86 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 217 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 7 221 0 99] #[0 7 225 0 21] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 4 90 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 29 0 3 7 233 0 135] #[1 4 65 0 99 7 237 0 150] #[1 1 222 0 4 4 225 0 5 1 222 0 19] #[0 1 242 0 3 0 20] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 241 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 7 245 0 112 0 37 0 115 0 41 0 116] #[0 2 2 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 7 249 0 21 3 221 0 28] #[1 4 14 0 5 7 253 0 21 4 14 0 28 4 14 0 82 4 14 0 87] #[1 8 1 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 5 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 9 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 13 0 28 4 122 0 82 4 122 0 87] #[0 1 190 0 3 0 5 0 20 0 32] #[0 1 170 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 17 0 1] #[0 2 106 0 1 0 4] #[1 8 21 0 1 8 25 0 4] #[1 8 29 0 1 8 33 0 41 8 37 0 47 8 41 0 213 8 45 0 214 8 49 0 215 8 53 0 216] #[0 3 26 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 57 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 61 0 239 3 169 0 240] #[0 4 178 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 8 65 0 251] #[0 8 69 0 19] #[0 8 73 0 21] #[0 8 77 0 21] #[0 8 81 0 21] #[1 0 102 0 2 0 102 0 5 0 102 0 13 8 85 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87] #[0 2 222 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 142 0 1 2 142 0 3 2 142 0 7 2 142 0 8 2 142 0 9 2 142 0 12 2 254 0 14 2 142 0 16 2 142 0 17 2 142 0 18 2 142 0 21 2 142 0 22 2 142 0 23 2 142 0 24 2 142 0 25 2 142 0 26 2 142 0 27 2 142 0 30 2 142 0 31 2 142 0 32 2 142 0 33 2 142 0 34 2 142 0 35 2 142 0 36 2 142 0 37 2 142 0 38 2 142 0 39 2 142 0 40 2 142 0 41 2 142 0 43 2 142 0 45 2 142 0 46 2 142 0 47 2 142 0 57 2 142 0 73 2 142 0 74 2 142 0 76 2 142 0 77 2 142 0 78 2 142 0 79 2 142 0 80 2 142 0 81 2 142 0 82 2 142 0 87 2 142 0 93 2 142 0 94 2 142 0 95 2 142 0 96 2 142 0 97 2 142 0 98 2 142 0 99] #[0 3 2 0 14] #[0 3 6 0 14] #[0 3 10 0 14] #[0 3 14 0 14] #[0 8 89 0 14] #[0 3 46 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 230 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 3 126 0 1 1 29 0 3 3 126 0 4 3 126 0 5 3 126 0 6 3 126 0 15 3 126 0 19 3 126 0 28 3 126 0 32 3 126 0 42 3 126 0 48 3 126 0 49 3 126 0 50 3 126 0 51 3 126 0 52 3 126 0 53 3 126 0 54 3 126 0 55 3 126 0 56 3 126 0 58 3 126 0 59 3 126 0 65 3 126 0 71 3 126 0 82 3 126 0 83 3 126 0 84 3 126 0 85 3 126 0 86 3 126 0 87 3 126 0 88 3 126 0 89 3 126 0 90 8 93 0 135] #[0 8 97 0 19] #[0 8 101 0 32] #[0 3 226 0 4 0 19 0 32] #[0 8 105 0 19] #[0 4 2 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 98 0 4 0 19] #[1 4 82 0 1 4 82 0 2 4 82 0 4 4 82 0 5 4 82 0 6 4 82 0 13 4 82 0 15 4 82 0 19 8 109 0 21 4 82 0 28 4 82 0 32 4 82 0 42 4 82 0 48 4 82 0 49 4 82 0 50 4 82 0 51 4 82 0 52 4 82 0 53 4 82 0 54 4 82 0 55 4 82 0 56 4 82 0 58 4 82 0 59 4 82 0 60 4 82 0 61 4 82 0 62 4 82 0 63 4 82 0 64 4 82 0 65 4 82 0 66 4 82 0 67 4 82 0 68 4 82 0 69 4 82 0 70 4 82 0 71 4 82 0 82 4 82 0 83 4 82 0 84 4 82 0 85 4 82 0 86 4 82 0 87 4 82 0 88 4 82 0 89 4 82 0 90] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 113 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 117 0 19] #[0 1 90 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 226 0 4 4 225 0 5 1 226 0 19] #[0 1 218 0 4 0 19] #[0 1 238 0 3 0 4 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 121 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 125 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 250 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 129 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 254 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 133 0 22 8 137 0 23 5 249 0 76 5 253 0 99] #[0 1 166 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 1 162 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 8 141 0 1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 145 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 154 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 149 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 8 153 0 217 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 157 0 15] #[1 8 161 0 1 8 33 0 41 8 37 0 47 8 165 0 214 8 169 0 215 8 53 0 216] #[1 8 173 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 158 0 1 0 41 0 47] #[0 3 166 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 174 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 182 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 5 54 0 1 0 4 0 6 0 15 0 19 0 32] #[0 3 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 185 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 193 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 8 197 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 205 0 32] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 209 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 8 221 0 145] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 225 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 229 0 19] #[0 3 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 233 0 19] #[0 8 237 0 19] #[0 1 246 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 8 241 0 21] #[0 8 245 0 21] #[0 1 158 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 110 0 1 0 4] #[0 3 186 0 15] #[0 8 249 0 15] #[0 3 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 146 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 8 253 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 162 0 1 0 41 0 47] #[0 3 150 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 3 174 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 3 174 0 41 0 117 0 43 0 121 0 45 0 125 0 46 3 174 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 170 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 1 0 19] #[0 9 5 0 19] #[0 9 9 0 32] #[0 2 238 0 14] #[0 2 226 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 30 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 13 0 19] #[1 6 249 0 4 3 230 0 19] #[0 3 210 0 19] #[0 4 6 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 17 0 19] #[1 3 134 0 1 1 29 0 3 3 134 0 4 3 134 0 5 3 134 0 6 3 134 0 15 3 134 0 19 3 134 0 28 3 134 0 32 3 134 0 42 3 134 0 48 3 134 0 49 3 134 0 50 3 134 0 51 3 134 0 52 3 134 0 53 3 134 0 54 3 134 0 55 3 134 0 56 3 134 0 58 3 134 0 59 3 134 0 65 3 134 0 71 3 134 0 82 3 134 0 83 3 134 0 84 3 134 0 85 3 134 0 86 3 134 0 87 3 134 0 88 3 134 0 89 3 134 0 90 9 21 0 135] #[0 9 25 0 32] #[0 9 29 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 33 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 37 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 178 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 142 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 41 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 45 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 9 49 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 138 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 10 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 6 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 57 0 19] #[0 9 61 0 19] #[0 9 65 0 14] #[0 2 246 0 14] #[0 9 69 0 32] #[0 2 234 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 73 0 32] #[0 9 77 0 32] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 81 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 9 85 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 18 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 14 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 242 0 14] #[0 9 89 0 19] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 93 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 250 0 14] )! ! SmaCCParser subclass: #SmaCCGrammarParser instanceVariableNames: 'grammar' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCGrammarParser commentStamp: 'jmb' prior: 83422364! SmaCCGrammarParser is a parser for grammars. Instance Variables: grammar the grammar we are producing ! !SmaCCGrammarParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83422573! parserDefinitionComment "File: Parser {grammar addEmptySymbol; yourself}; Parser: Rule | Parser Rule ; Rule : ProductionRule {grammar setStartSymbolIfNone: '1'. nil} | LeftLine | RightLine | NonAssociativeLine | IdMethodLine | StartLine ; LeftLine: ""%left"" TokenList 'tokens' "";"" { tokens do: [:each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; RightLine: ""%right"" TokenList 'tokens' "";"" { tokens do: [:each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; NonAssociativeLine: ""%nonassoc"" TokenList 'tokens' "";"" { tokens do: [:each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; IdMethodLine: ""%id"" IdTokens 'tokens' "";"" {tokens do: [:each | grammar makeTokenIdMethodFor: each]. nil}; StartLine: ""%start"" StartingTokens "";""; IdTokens: {OrderedCollection with: '1' value} | IdTokens {'1' add: '2' value; yourself}; TokenList: Term | TokenList Term ; StartingTokens: 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)} | StartingTokens 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)}; ProductionRule: ParserRules "";"" {| symbol | symbol := grammar nonTerminalSymbolNamed: '1' value. '3' do: [:each | symbol addProduction: each]. symbol}; ParserRules: ParserRules ""|"" ParserRule {'1' add: '3'; yourself} | ParserRule ; ParserRule : Terms 'rhs' {rhs} | Terms 'rhs' 'code' {self verifyCodeToken: code for: rhs} ; Terms : {SmaCCRHS new} | Terms 'rhs' Term 'term' {rhs add: term; yourself} | Terms 'rhs' Term 'term' 'variableNameToken' {rhs add: term; nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""?"" 'variableNameToken' {rhs add: (grammar makeOptionalSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""*"" 'variableNameToken' {rhs add: (grammar makeRepeatSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""+"" 'variableNameToken' {rhs add: (grammar makeRepeatMultipleSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} ; Term: {grammar keywordTerminalNamed: '1' value} | {grammar terminalSymbolNamed: '1' value ifAbsent: [currentToken := '1'. self reportErrorMessage: 'Token not specified']} | {grammar nonTerminalSymbolNamed: '1' value} | ""error"" {SmaCCSymbol error} | ""("" SimpleTerms "")"" {grammar makeGroupFor: '2'} | ""<%"" SimpleTerms ""%>"" {grammar makeRepeatSymbolFor: (grammar makeGroupFor: '2')} | ""["" SimpleTerms ""]"" {grammar makeOptionalSymbolFor: (grammar makeGroupFor: '2')}; SimpleTerms : SimpleTerm {OrderedCollection with: '1'} | SimpleTerms 'terms' ""|"" SimpleTerm 'term' {terms add: term; yourself}; SimpleTerm : { SmaCCRHS new } | SimpleTerm 'rhs' Term 'term' {rhs add: term; yourself} | SimpleTerm 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} ;"! ! !SmaCCGrammarParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49' prior: 83426575! scannerClass ^SmaCCGrammarScanner! ! !SmaCCGrammarParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49' prior: 83426708! startingStateForFile ^1! ! !SmaCCGrammarParser methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83426804! grammar: aSmaCCGrammar grammar := aSmaCCGrammar! ! !SmaCCGrammarParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83426933! initialize super initialize. grammar := SmaCCGrammar new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83427086! reduceActionForFile1: nodes ^ grammar addEmptySymbol; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83427248! reduceActionForIdMethodLine1: nodes (nodes at: 2) do: [ :each | grammar makeTokenIdMethodFor: each ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83427452! reduceActionForIdTokens1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83427625! reduceActionForIdTokens2: nodes ^ (nodes at: 1) add: (nodes at: 2) value; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83427807! reduceActionForLeftLine1: nodes (nodes at: 2) do: [ :each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83428073! reduceActionForNonAssociativeLine1: nodes (nodes at: 2) do: [ :each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83428359! reduceActionForParserRule1: nodes ^ nodes at: 1! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83428502! reduceActionForParserRule2: nodes ^ self verifyCodeToken: (nodes at: 2) for: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83428688! reduceActionForParserRules1: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83428867! reduceActionForProductionRule1: nodes | symbol | symbol := grammar nonTerminalSymbolNamed: (nodes at: 1) value. (nodes at: 3) do: [ :each | symbol addProduction: each ]. ^ symbol! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83429144! reduceActionForRightLine1: nodes (nodes at: 2) do: [ :each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83429412! reduceActionForRule1: nodes grammar setStartSymbolIfNone: (nodes at: 1). ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83429587! reduceActionForSimpleTerm1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83429731! reduceActionForSimpleTerm2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83429909! reduceActionForSimpleTerm3: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83430120! reduceActionForSimpleTerm4: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83430329! reduceActionForSimpleTerm5: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83430546! reduceActionForSimpleTerms1: nodes ^ OrderedCollection with: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83430716! reduceActionForSimpleTerms2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83430895! reduceActionForStartingTokens1: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 1) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83431111! reduceActionForStartingTokens2: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 2) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83431327! reduceActionForTerm1: nodes ^ grammar keywordTerminalNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83431502! reduceActionForTerm2: nodes ^ grammar terminalSymbolNamed: (nodes at: 1) value ifAbsent: [ currentToken := nodes at: 1. self reportErrorMessage: 'Token not specified' ]! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83431777! reduceActionForTerm3: nodes ^ grammar nonTerminalSymbolNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83431954! reduceActionForTerm4: nodes ^ SmaCCSymbol error! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432097! reduceActionForTerm5: nodes ^ grammar makeGroupFor: (nodes at: 2)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432258! reduceActionForTerm6: nodes ^ grammar makeRepeatSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432450! reduceActionForTerm7: nodes ^ grammar makeOptionalSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432644! reduceActionForTerms1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432783! reduceActionForTerms2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83432956! reduceActionForTerms3: nodes ^ (nodes at: 1) add: (nodes at: 2); nameLastItem: ((nodes at: 3) value copyFrom: 2 to: (nodes at: 3) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83433213! reduceActionForTerms4: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83433419! reduceActionForTerms5: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83433709! reduceActionForTerms6: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83433913! reduceActionForTerms7: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83434201! reduceActionForTerms8: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83434413! reduceActionForTerms9: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83434698! reduceTable ^#( #(26 3 #reduceActionForIdMethodLine1:) #(27 3 #reduceFor:) #(28 1 #reduceFor:) #(28 2 #reduceFor:) #(29 1 #reduceActionForIdTokens1:) #(29 2 #reduceActionForIdTokens2:) #(30 1 #reduceActionForStartingTokens1:) #(30 2 #reduceActionForStartingTokens2:) #(31 3 #reduceActionForNonAssociativeLine1:) #(32 1 #reduceActionForTerm1:) #(32 1 #reduceActionForTerm2:) #(32 1 #reduceActionForTerm3:) #(32 1 #reduceActionForTerm4:) #(32 3 #reduceActionForTerm5:) #(32 3 #reduceActionForTerm6:) #(32 3 #reduceActionForTerm7:) #(33 1 #reduceFor:) #(34 4 #reduceActionForProductionRule1:) #(35 3 #reduceActionForParserRules1:) #(35 1 #reduceFor:) #(36 1 #reduceActionForParserRule1:) #(36 2 #reduceActionForParserRule2:) #(37 0 #reduceActionForTerms1:) #(37 2 #reduceActionForTerms2:) #(37 3 #reduceActionForTerms3:) #(37 3 #reduceActionForTerms4:) #(37 4 #reduceActionForTerms5:) #(37 3 #reduceActionForTerms6:) #(37 4 #reduceActionForTerms7:) #(37 3 #reduceActionForTerms8:) #(37 4 #reduceActionForTerms9:) #(38 3 #reduceActionForRightLine1:) #(39 1 #reduceActionForRule1:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(40 1 #reduceActionForFile1:) #(41 1 #reduceActionForSimpleTerms1:) #(41 3 #reduceActionForSimpleTerms2:) #(42 0 #reduceActionForSimpleTerm1:) #(42 2 #reduceActionForSimpleTerm2:) #(42 3 #reduceActionForSimpleTerm3:) #(42 3 #reduceActionForSimpleTerm4:) #(42 3 #reduceActionForSimpleTerm5:) #(45 1 #reduceFor:) #(45 2 #reduceFor:) #(46 3 #reduceActionForLeftLine1:) )! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83436328! transitionTable ^#( #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 53 0 39 0 57 0 40 0 61 0 45 0 65 0 46] #[1 0 69 0 20 0 73 0 30] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 105 0 28 0 109 0 32] #[1 0 113 0 19 0 117 0 29] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 121 0 28 0 109 0 32] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 125 0 28 0 109 0 32] #[0 0 129 0 25] #[0 0 150 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 154 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 146 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 134 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 142 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 190 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 0 0 43] #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 133 0 39 0 158 0 43 0 65 0 46] #[0 0 138 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 30 0 7 0 20] #[1 0 137 0 7 0 141 0 20] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 145 0 41 0 149 0 42] #[1 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 153 0 41 0 149 0 42] #[0 0 54 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 157 0 41 0 149 0 42] #[0 0 46 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 50 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 42 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 161 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[0 0 14 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 22 0 7 0 19] #[1 0 169 0 7 0 173 0 19] #[1 0 177 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 181 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 185 0 35 0 189 0 36 0 193 0 37] #[0 0 194 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 10 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 34 0 7 0 20] #[1 0 197 0 2 0 201 0 9] #[1 0 162 0 2 0 162 0 9 0 77 0 11 0 162 0 12 0 81 0 13 0 162 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[1 0 201 0 9 0 209 0 12] #[1 0 201 0 9 0 213 0 14] #[0 0 38 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 18 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 6 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 26 0 7 0 19] #[0 0 198 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 130 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 217 0 7 0 221 0 9] #[0 0 82 0 7 0 9] #[1 0 86 0 7 0 86 0 9 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 225 0 23 0 229 0 32] #[0 0 66 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 233 0 42] #[1 0 174 0 2 0 237 0 5 0 174 0 9 0 241 0 10 0 174 0 11 0 174 0 12 0 174 0 13 0 174 0 14 0 174 0 15 0 245 0 16 0 174 0 17 0 174 0 19 0 174 0 20 0 174 0 21] #[0 0 62 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 58 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 74 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 249 0 36 0 193 0 37] #[0 0 90 0 7 0 9] #[1 0 253 0 5 0 98 0 7 0 98 0 9 1 1 0 10 0 98 0 11 0 98 0 13 0 98 0 15 1 5 0 16 0 98 0 17 0 98 0 19 0 98 0 20 0 98 0 21 0 98 0 23 1 9 0 24] #[1 0 166 0 2 0 166 0 9 0 77 0 11 0 166 0 12 0 81 0 13 0 166 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[0 0 178 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 182 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 186 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 78 0 7 0 9] #[1 0 106 0 7 0 106 0 9 0 106 0 11 0 106 0 13 0 106 0 15 0 106 0 17 0 106 0 19 0 106 0 20 0 106 0 21 0 106 0 23 1 13 0 24] #[1 0 114 0 7 0 114 0 9 0 114 0 11 0 114 0 13 0 114 0 15 0 114 0 17 0 114 0 19 0 114 0 20 0 114 0 21 0 114 0 23 1 17 0 24] #[1 0 122 0 7 0 122 0 9 0 122 0 11 0 122 0 13 0 122 0 15 0 122 0 17 0 122 0 19 0 122 0 20 0 122 0 21 0 122 0 23 1 21 0 24] #[0 0 102 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 110 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 118 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 126 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] )! ! !SmaCCGrammarParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83441202! verifyCodeToken: codeToken for: aSmaCCRHS | code | code := codeToken value copyFrom: 2 to: codeToken value size - 1. RBParser parseExpression: code onError: [:string :position | currentToken := nil. scanner position: codeToken startPosition + position. self reportErrorMessage: string]. aSmaCCRHS reduceAction: code. ^aSmaCCRHS! ! SmaCCParser subclass: #SmaCCScannerParser instanceVariableNames: 'scannerDefinition' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCScannerParser commentStamp: '' prior: 83441621! SmaCCScannerParser is the parser for the scanner definition. Instance Variables: tokens the tokens that are parsed ! !SmaCCScannerParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49' prior: 83441888! parserDefinitionComment "%left ""|""; %left ""("" ; %left ""*"" ""+"" ""?"" ; File: Rules {scannerDefinition} | {scannerDefinition}; Rules: Rule "";"" | Rules Rule "";"" ; Rule: RegexRule {'1' states isEmpty ifTrue: ['1' addStates: scannerDefinition nonExcludeStates]} | ExcludeStatesLine | StatesLine ; RegexRule : "":"" Regex {'3' position: '1' startPosition. scannerDefinition addToken: '3' withName: '1' value. '3'} | Symbol RegexRule {'2' addState: '1'; yourself}; StatesLine : ""%states"" States ; States : | States Symbol {scannerDefinition addState: '2'}; ExcludeStatesLine : ""%excludes"" ExcludeStates ; ExcludeStates : | ExcludeStates Symbol {scannerDefinition addExcludeState: '2'}; Symbol : {'1' value asSymbol}; Regex: RegexTerm {'1'} | Regex ""|"" Regex {'1' | '3'} | Regex RegexTerm {'1' , '2'}; RegexTerm: {SmaCCCharacterRENode characters: '1' value} | {SmaCCCharacterRENode characters: self allCharacters} | {self nodeFor: (ReadStream on: ('1' value copyFrom: 2 to: '1' value size))} | ""("" Regex "")"" {'2'} | {SmaCCCharacterRENode characters: (self parseCharacterBlock: '1')} | {(scannerDefinition tokenNamed: '1' value ifAbsentPut: [self generateImplicitToken: '1']) copy} | {SmaCCSequenceRENode nodes: ('1' value asOrderedCollection collect: [:each | SmaCCCharacterRENode characters: (String with: each)])} | RegexTerm ""*"" {'1' repeat} | RegexTerm ""+"" {'1' repeatForAtLeast: 1} | RegexTerm ""?"" {'1' repeatFor: 0 to: 1} | RegexTerm {| readStream start stop | readStream := ReadStream on: ('2' value copyFrom: 2 to: '2' value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. '1' repeatFor: (start isEmpty ifTrue: [0] ifFalse: [start asNumber]) to: (stop isEmpty ifTrue: [(1 bitShift: 31)] ifFalse: [stop asNumber])} ;"! ! !SmaCCScannerParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49' prior: 83444015! scannerClass ^SmaCCScannerScanner! ! !SmaCCScannerParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49' prior: 83444148! startingStateForFile ^1! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83444242! allCharacters ^SmaCCGrammar allCharacters! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83444354! charactersFor: aStream in: aToken | characters char endCharacters | aStream atEnd ifTrue: [self reportCharacterBlockErrorForToken: aToken]. char := aStream next. characters := char == $\ ifTrue: [(self nodeFor: aStream) characters] ifFalse: [OrderedCollection with: char]. (characters size = 1 and: [aStream peekFor: $-]) ifFalse: [^characters]. endCharacters := self charactersFor: aStream in: aToken. endCharacters size > 1 ifTrue: [self reportCharacterBlockErrorForToken: aToken]. ^(characters first asInteger to: endCharacters first asInteger) collect: [:each | Character value: each]! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83445036! generateImplicitToken: aSmaCCToken | node | node := SmaCCGrammar implicitToken: aSmaCCToken value. node isNil ifTrue: [currentToken := aSmaCCToken. self reportErrorMessage: 'Token not specified']. ^node! ! !SmaCCScannerParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83445334! initialize super initialize. scannerDefinition := SmaCCScannerDefinition new! ! !SmaCCScannerParser methodsFor: 'private' stamp: 'lr 1/6/2007 21:44' prior: 83445486! nodeFor: aStream | block char value count | char := aStream next. char == $f ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 12))]. char == $n ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 10))]. char == $r ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 13))]. char == $t ifTrue: [^SmaCCCharacterRENode characters: ' ']. char == $v ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 11))]. char == $c ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: aStream next asInteger - $A asInteger))]. char == $x ifTrue: [count := value := 0. [aStream atEnd not and: [count < 4 and: [char := aStream peek. (char between: $0 and: $9) or: [(char between: $A and: $F) or: [char between: $a and: $f]]]]] whileTrue: [count := count + 1. value := value * 16 + aStream next digitValue]. ^SmaCCCharacterRENode characters: (String with: (Character value: value))]. char == $d ifTrue: [block := [:each | each between: $0 and: $9]]. char == $D ifTrue: [block := [:each | (each between: $0 and: $9) not]]. char == $s ifTrue: [block := [:each | #(9 10 11 12 13 32) includes: each asInteger]]. char == $S ifTrue: [block := [:each | (#(9 10 11 12 13 32) includes: each asInteger) not]]. char == $w ifTrue: [block := [:each | (each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]]]. char == $W ifTrue: [block := [:each | ((each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]) not]]. block isNil ifTrue: [^SmaCCCharacterRENode characters: (String with: char)]. ^SmaCCCharacterRENode characters: (String withAll: (self allCharacters select: block))! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83447544! parseCharacterBlock: aToken | characters aStream invert | aStream := ReadStream on: (aToken value copyFrom: 2 to: aToken value size - 1). characters := OrderedCollection new. invert := aStream peekFor: $^. [aStream atEnd] whileFalse: [characters addAll: (self charactersFor: aStream in: aToken)]. ^String withAll: (invert ifTrue: [self allCharacters reject: [:each | characters includes: each]] ifFalse: [characters])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448080! reduceActionForExcludeStates2: nodes ^ scannerDefinition addExcludeState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448263! reduceActionForFile1: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448406! reduceActionForFile2: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448549! reduceActionForRegex1: nodes ^ nodes at: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448687! reduceActionForRegex2: nodes ^ (nodes at: 1) | (nodes at: 3)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448843! reduceActionForRegex3: nodes ^ (nodes at: 1) , (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83448999! reduceActionForRegexRule1: nodes (nodes at: 3) position: (nodes at: 1) startPosition. scannerDefinition addToken: (nodes at: 3) withName: (nodes at: 1) value. ^ nodes at: 3! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83449269! reduceActionForRegexRule2: nodes ^ (nodes at: 2) addState: (nodes at: 1); yourself! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83449451! reduceActionForRegexTerm10: nodes ^ (nodes at: 1) repeatFor: 0 to: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83449615! reduceActionForRegexTerm11: nodes | readStream start stop | readStream := ReadStream on: ((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. ^ (nodes at: 1) repeatFor: (start isEmpty ifTrue: [ 0 ] ifFalse: [ start asNumber ]) to: (stop isEmpty ifTrue: [ 1 bitShift: 31 ] ifFalse: [ stop asNumber ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83450113! reduceActionForRegexTerm1: nodes ^ SmaCCCharacterRENode characters: (nodes at: 1) value! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83450296! reduceActionForRegexTerm2: nodes ^ SmaCCCharacterRENode characters: self allCharacters! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83450478! reduceActionForRegexTerm3: nodes ^ self nodeFor: (ReadStream on: ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83450702! reduceActionForRegexTerm4: nodes ^ nodes at: 2! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83450844! reduceActionForRegexTerm5: nodes ^ SmaCCCharacterRENode characters: (self parseCharacterBlock: (nodes at: 1))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83451049! reduceActionForRegexTerm6: nodes ^ (scannerDefinition tokenNamed: (nodes at: 1) value ifAbsentPut: [ self generateImplicitToken: (nodes at: 1) ]) copy! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83451295! reduceActionForRegexTerm7: nodes ^ SmaCCSequenceRENode nodes: ((nodes at: 1) value asOrderedCollection collect: [ :each | SmaCCCharacterRENode characters: (String with: each) ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83451573! reduceActionForRegexTerm8: nodes ^ (nodes at: 1) repeat! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83451724! reduceActionForRegexTerm9: nodes ^ (nodes at: 1) repeatForAtLeast: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83451888! reduceActionForRule1: nodes ^ (nodes at: 1) states isEmpty ifTrue: [ (nodes at: 1) addStates: scannerDefinition nonExcludeStates ]! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83452116! reduceActionForStates2: nodes ^ scannerDefinition addState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49' prior: 83452285! reduceActionForSymbol1: nodes ^ (nodes at: 1) value asSymbol! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83452430! reduceTable ^#( #(20 1 #reduceFor:) #(21 1 #reduceActionForFile1:) #(21 0 #reduceActionForFile2:) #(22 3 #reduceActionForRegexRule1:) #(22 2 #reduceActionForRegexRule2:) #(23 2 #reduceFor:) #(24 1 #reduceActionForRule1:) #(24 1 #reduceFor:) #(24 1 #reduceFor:) #(25 1 #reduceActionForRegex1:) #(25 3 #reduceActionForRegex2:) #(25 2 #reduceActionForRegex3:) #(26 1 #reduceActionForSymbol1:) #(27 0 #reduceFor:) #(27 2 #reduceActionForStates2:) #(28 0 #reduceFor:) #(28 2 #reduceActionForExcludeStates2:) #(29 1 #reduceActionForRegexTerm1:) #(29 1 #reduceActionForRegexTerm2:) #(29 1 #reduceActionForRegexTerm3:) #(29 3 #reduceActionForRegexTerm4:) #(29 1 #reduceActionForRegexTerm5:) #(29 1 #reduceActionForRegexTerm6:) #(29 1 #reduceActionForRegexTerm7:) #(29 2 #reduceActionForRegexTerm8:) #(29 2 #reduceActionForRegexTerm9:) #(29 2 #reduceActionForRegexTerm10:) #(29 2 #reduceActionForRegexTerm11:) #(32 2 #reduceFor:) #(32 3 #reduceFor:) #(33 2 #reduceFor:) )! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83453463! reportCharacterBlockErrorForToken: aToken currentToken := aToken. self reportErrorMessage: 'Invalid character block'! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49' prior: 83453666! transitionTable ^#( #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 25 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 26 0 14 0 30 0 45 0 32 0 49 0 33] #[1 0 66 0 9 0 66 0 17 0 53 0 28] #[1 0 58 0 9 0 58 0 17 0 57 0 27] #[0 0 61 0 10] #[0 0 54 0 9 0 14 0 17] #[0 0 0 0 30] #[0 0 30 0 9] #[0 0 34 0 9] #[0 0 65 0 9] #[1 0 17 0 14 0 21 0 17 0 69 0 22 0 41 0 26] #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 29 0 22 0 33 0 23 0 73 0 24 0 41 0 26 0 10 0 30 0 49 0 33] #[0 0 38 0 9] #[1 0 26 0 9 0 21 0 17 0 77 0 26] #[1 0 126 0 9 0 21 0 17 0 81 0 26] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 113 0 25 0 117 0 29] #[0 0 118 0 7 0 8 0 14 0 17 0 30] #[0 0 22 0 9] #[0 0 121 0 9] #[0 0 70 0 9 0 17] #[0 0 62 0 9 0 17] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 125 0 25 0 117 0 29] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 94 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 98 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 85 0 2 0 129 0 5 0 18 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 42 0 1 0 42 0 2 0 137 0 3 0 141 0 4 0 42 0 5 0 145 0 6 0 42 0 9 0 42 0 11 0 42 0 12 0 42 0 14 0 149 0 16 0 42 0 17 0 42 0 18 0 42 0 19] #[0 0 122 0 7 0 8 0 14 0 17 0 30] #[1 0 153 0 1 0 85 0 2 0 129 0 5 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 157 0 25 0 117 0 29] #[1 0 50 0 1 0 50 0 2 0 137 0 3 0 141 0 4 0 50 0 5 0 145 0 6 0 50 0 9 0 50 0 11 0 50 0 12 0 50 0 14 0 149 0 16 0 50 0 17 0 50 0 18 0 50 0 19] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 110 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 114 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 46 0 1 0 85 0 2 0 46 0 5 0 46 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] )! ! SmaCCParser subclass: #StParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Examples'! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83456124! parseExpression: aString ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83456316! parseExpression: aString onError: aBlock ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode onError: aBlock)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83456549! parseMethod: aString ^self parse: aString startingAt: self startingStateForMethod! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83456700! parseMethod: aString onError: aBlock ^self parse: aString startingAt: self startingStateForMethod onError: aBlock! ! !StParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50' prior: 83456904! parserDefinitionComment "%id ; %start SequenceNode ; Method: MethodSequenceNode {(RBMethodNode selector: '1' value asSymbol arguments: #() body: '2' last)} | BinaryMethodName MethodSequenceNode {(RBMethodNode selector: '1' first arguments: '1' last body: '2' last)} | KeywordMethodName MethodSequenceNode {(RBMethodNode selector: '1' first contents asSymbol arguments: '1' last body: '2' last)}; BinaryMethodName: Variable {Array with: '1' value asSymbol with: (Array with: '2')} ; KeywordMethodName: Variable {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMethodName Variable {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; Primitives: {OrderedCollection new} | Primitives ""<"" PrimitiveMessageSend "">"" {'1' add: ('2' startPosition to: '4' startPosition); yourself}; PrimitiveMessageSend: | PrimitiveMessageSend {nil} | PrimitiveMessageSend Literal {nil} | PrimitiveMessageSend ""("" {nil} | PrimitiveMessageSend "")"" {nil} | PrimitiveMessageSend ""{"" {nil} | PrimitiveMessageSend ""}"" {nil} | PrimitiveMessageSend "";"" {nil} | PrimitiveMessageSend ""."" {nil} | PrimitiveMessageSend {nil} | PrimitiveMessageSend {nil}; MethodSequenceNode: Primitives ""|"" TemporaryVariables ""|"" Primitives Statements {Array with: ('1' addAll: '5'; yourself) with: (RBSequenceNode temporaries: '3' statements: '6')} | Primitives ""||"" Primitives Statements {Array with: ('1' addAll: '3'; yourself) with: (RBSequenceNode temporaries: #() statements: '4')} | Primitives Statements {Array with: '1' with: (RBSequenceNode temporaries: #() statements: '2')}; SequenceNode: Temporaries Statements {RBSequenceNode temporaries: '1' statements: '2'}; Temporaries: {#()} | ""||"" {#()} | ""|"" TemporaryVariables ""|"" {'2'}; TemporaryVariables: {OrderedCollection new} | TemporaryVariables Variable {'1' add: '2'; yourself}; Statements: {OrderedCollection new} | StatementList "".""? {#liftFirstValue:} | StatementList ""."" ""^"" Expression "".""? {'1' add: (RBReturnNode value: '4'); yourself} | ""^"" Expression "".""? {OrderedCollection with: (RBReturnNode value: '2')}; StatementList: Expression | StatementList ""."" Expression {'1' add: '3'; yourself}; Block: ""["" BlockArgs ""|"" SequenceNode ""]"" {RBBlockNode arguments: '2' body: '4'} | ""["" SequenceNode ""]"" {RBBlockNode body: '2'} | ""["" BlockArgs ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode statements: #())} | ""["" BlockArgs ""||"" TemporaryVariables ""|"" Statements ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode temporaries: '4' statements: '6')}; BlockArgs: "":"" Variable {OrderedCollection with: '2'} | BlockArgs "":"" Variable {'1' add: '3'; yourself}; Expression: Variable "":="" Expression {RBAssignmentNode variable: '1' value: '3'} | Cascade {#liftFirstValue:}; Cascade: MessageSend CascadeList {| messages | '2' isEmpty ifTrue: [^'1']. messages := OrderedCollection new: '2' size + 1. messages add: '1'. '2' do: [:each | messages add: (RBMessageNode receiver: '1' receiver selector: each first contents asSymbol arguments: each last)]. RBCascadeNode messages: messages} | Primary {#liftFirstValue:}; MessageSend: KeywordMessageSend {#liftFirstValue:} | BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:}; CascadeList: {OrderedCollection new} | CascadeList "";"" SimpleMessage {'1' add: '3'; yourself}; SimpleMessage: UnaryMessage {#liftFirstValue:} | BinaryMessage {#liftFirstValue:} | KeywordMessage {#liftFirstValue:}; KeywordMessageSend: BinaryMessageSend KeywordMessage {#createMessageNodeFrom:} | UnaryMessageSend KeywordMessage {#createMessageNodeFrom:} | Primary KeywordMessage {#createMessageNodeFrom:}; KeywordMessage: KeywordArgument {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMessage KeywordArgument {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; KeywordArgument: BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; BinaryMessageSend: BinaryMessageSend BinaryMessage {#createMessageNodeFrom:} | UnaryMessageSend BinaryMessage {#createMessageNodeFrom:} | Primary BinaryMessage {#createMessageNodeFrom:} ; BinaryMessage : BinaryArgument {Array with: (ReadStream on: '1' value) with: (Array with: '2')}; BinaryArgument: UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; UnaryMessageSend : UnaryMessageSend UnaryMessage {#createMessageNodeFrom:} | Primary UnaryMessage {#createMessageNodeFrom:}; UnaryMessage : {Array with: (ReadStream on: '1' value) with: #()}; Primary: ""("" Expression "")"" {#liftSecondValue:} | Literal {RBLiteralNode value: '1'} | Variable {#liftFirstValue:} | Block {#liftFirstValue:}; Variable: {RBVariableNode named: '1' value} | {RBVariableNode named: '1' value}; Literal: ""true"" {true} | ""false"" {false} | ""nil"" {nil} | {'1' value} | {'1' value} | {'1' value at: 2} | {('1' value copyFrom: 2 to: '1' value size - 1) copyReplaceAll: '''''' with: ''''} | ""#"" {(('2' value copyFrom: 2 to: '2' value size - 1) copyReplaceAll: '''''' with: '''') asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" ""["" ByteArray ""]"" {'3' contents} | ""#"" ""("" Array "")"" {'3' contents} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference}; ByteArray: {WriteStream on: ByteArray new} | ByteArray {'1' nextPut: '2' value; yourself}; Array: {WriteStream on: Array new} | Array ArrayLiteral {'1' nextPut: '2'; yourself} | Array "":="" {'2' stopPosition + 1 = '3' startPosition ifTrue: ['1' nextPut: ('2' value, ':') asSymbol] ifFalse: ['1' nextPut: '2' value asSymbol; nextPut: #':']. scanner position: '3' startPosition. currentToken := nil. '1'}; ArrayLiteral: Literal {#liftFirstValue:} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | ""{"" ""}"" {'2' value asQualifiedReference} | ""{"" ""}"" {'2' value asQualifiedReference} | ""("" Array "")"" {'2' contents} | ""["" ByteArray ""]"" {'2' contents} | {'1' value asSymbol} | {'1' value};"! ! !StParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50' prior: 83463791! scannerClass ^StScanner! ! !StParser class methodsFor: 'private' stamp: 'lr 4/12/2010 13:58' prior: 83463886! simplifyExpression: aSequenceNode ^aSequenceNode isNil ifFalse: [ (aSequenceNode statements size == 1 and: [aSequenceNode temporaries isEmpty]) ifTrue: [aSequenceNode statements first] ifFalse: [aSequenceNode] ]! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50' prior: 83464204! startingStateForMethod ^1! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50' prior: 83464319! startingStateForSequenceNode ^2! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83464411! actionForCurrentToken | ids action | ids := currentToken id. 1 to: ids size do: [:i | action := self actionFor: (ids at: i). (action bitAnd: self actionMask) = self errorAction ifFalse: [^action]. (ids at: i) = scanner negativeNumberId ifTrue: [currentToken := SmaCCToken value: '-' start: currentToken startPosition id: (Array with: scanner binarySymbolId). scanner position: currentToken stopPosition - 1. ^self actionForCurrentToken]]. ^self errorAction! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83464993! createMessageNodeFrom: aCollection ^RBMessageNode receiver: aCollection first selector: (aCollection at: 2) first contents asSymbol arguments: (aCollection at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83465254! reduceActionForArray1: nodes ^ WriteStream on: Array new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83465396! reduceActionForArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83465563! reduceActionForArray3: nodes (nodes at: 2) stopPosition + 1 = (nodes at: 3) startPosition ifTrue: [ (nodes at: 1) nextPut: ((nodes at: 2) value , ':') asSymbol ] ifFalse: [ (nodes at: 1) nextPut: (nodes at: 2) value asSymbol; nextPut: #':' ]. scanner position: (nodes at: 3) startPosition. currentToken := nil. ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83465992! reduceActionForArrayLiteral10: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466145! reduceActionForArrayLiteral11: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466289! reduceActionForArrayLiteral2: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466441! reduceActionForArrayLiteral3: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466593! reduceActionForArrayLiteral4: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466745! reduceActionForArrayLiteral5: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83466897! reduceActionForArrayLiteral6: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467061! reduceActionForArrayLiteral7: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467225! reduceActionForArrayLiteral8: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467371! reduceActionForArrayLiteral9: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467517! reduceActionForBinaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467724! reduceActionForBinaryMethodName1: nodes ^ Array with: (nodes at: 1) value asSymbol with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83467926! reduceActionForBlock1: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (nodes at: 4)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468099! reduceActionForBlock2: nodes ^ RBBlockNode body: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468247! reduceActionForBlock3: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode statements: #())! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468439! reduceActionForBlock4: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode temporaries: (nodes at: 4) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468668! reduceActionForBlockArgs1: nodes ^ OrderedCollection with: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468826! reduceActionForBlockArgs2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83468993! reduceActionForByteArray1: nodes ^ WriteStream on: ByteArray new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83469143! reduceActionForByteArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2) value; yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83469320! reduceActionForCascade1: nodes | messages | (nodes at: 2) isEmpty ifTrue: [ ^ nodes at: 1 ]. messages := OrderedCollection new: (nodes at: 2) size + 1. messages add: (nodes at: 1). (nodes at: 2) do: [ :each | messages add: (RBMessageNode receiver: (nodes at: 1) receiver selector: each first contents asSymbol arguments: each last) ]. ^ RBCascadeNode messages: messages! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83469792! reduceActionForCascadeList1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83469936! reduceActionForCascadeList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83470105! reduceActionForExpression1: nodes ^ RBAssignmentNode variable: (nodes at: 1) value: (nodes at: 3)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83470288! reduceActionForKeywordMessage1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83470576! reduceActionForKeywordMessage2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83470807! reduceActionForKeywordMethodName1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471098! reduceActionForKeywordMethodName2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471332! reduceActionForLiteral10: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471480! reduceActionForLiteral11: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471628! reduceActionForLiteral12: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471776! reduceActionForLiteral13: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83471918! reduceActionForLiteral14: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472060! reduceActionForLiteral15: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472220! reduceActionForLiteral16: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472380! reduceActionForLiteral1: nodes ^ true! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472503! reduceActionForLiteral2: nodes ^ false! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472627! reduceActionForLiteral3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472749! reduceActionForLiteral4: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83472887! reduceActionForLiteral5: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473025! reduceActionForLiteral6: nodes ^ (nodes at: 1) value at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473169! reduceActionForLiteral7: nodes ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) copyReplaceAll: '''''' with: ''''! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473388! reduceActionForLiteral8: nodes ^ (((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1) copyReplaceAll: '''''' with: '''') asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473618! reduceActionForLiteral9: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473765! reduceActionForMethod1: nodes ^ RBMethodNode selector: (nodes at: 1) value asSymbol arguments: #() body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83473974! reduceActionForMethod2: nodes ^ RBMethodNode selector: (nodes at: 1) first arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83474189! reduceActionForMethod3: nodes ^ RBMethodNode selector: (nodes at: 1) first contents asSymbol arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83474422! reduceActionForMethodSequenceNode1: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 5); yourself) with: (RBSequenceNode temporaries: (nodes at: 3) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83474702! reduceActionForMethodSequenceNode2: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 3); yourself) with: (RBSequenceNode temporaries: #() statements: (nodes at: 4))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83474972! reduceActionForMethodSequenceNode3: nodes ^ Array with: (nodes at: 1) with: (RBSequenceNode temporaries: #() statements: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475193! reduceActionForOptionalXXXXX1: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475321! reduceActionForOptionalXXXXX2: nodes ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475457! reduceActionForPrimary2: nodes ^ RBLiteralNode value: (nodes at: 1)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475610! reduceActionForPrimitiveMessageSend10: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475746! reduceActionForPrimitiveMessageSend11: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83475882! reduceActionForPrimitiveMessageSend2: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476017! reduceActionForPrimitiveMessageSend3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476152! reduceActionForPrimitiveMessageSend4: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476287! reduceActionForPrimitiveMessageSend5: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476422! reduceActionForPrimitiveMessageSend6: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476557! reduceActionForPrimitiveMessageSend7: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476692! reduceActionForPrimitiveMessageSend8: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476827! reduceActionForPrimitiveMessageSend9: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83476962! reduceActionForPrimitives1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83477105! reduceActionForPrimitives2: nodes ^ (nodes at: 1) add: ((nodes at: 2) startPosition to: (nodes at: 4) startPosition); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83477321! reduceActionForSequenceNode1: nodes ^ RBSequenceNode temporaries: (nodes at: 1) statements: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83477512! reduceActionForStatementList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83477683! reduceActionForStatements1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83477826! reduceActionForStatements3: nodes ^ (nodes at: 1) add: (RBReturnNode value: (nodes at: 4)); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478016! reduceActionForStatements4: nodes ^ OrderedCollection with: (RBReturnNode value: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478197! reduceActionForTemporaries1: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478323! reduceActionForTemporaries2: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478449! reduceActionForTemporaries3: nodes ^ nodes at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478583! reduceActionForTemporaryVariables1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478734! reduceActionForTemporaryVariables2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83478910! reduceActionForUnaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83479092! reduceActionForVariable1: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50' prior: 83479253! reduceActionForVariable2: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50' prior: 83479403! reduceTable ^#( #(33 0 #reduceFor:) #(33 2 #reduceActionForPrimitiveMessageSend2:) #(33 2 #reduceActionForPrimitiveMessageSend3:) #(33 2 #reduceActionForPrimitiveMessageSend4:) #(33 2 #reduceActionForPrimitiveMessageSend5:) #(33 2 #reduceActionForPrimitiveMessageSend6:) #(33 2 #reduceActionForPrimitiveMessageSend7:) #(33 2 #reduceActionForPrimitiveMessageSend8:) #(33 2 #reduceActionForPrimitiveMessageSend9:) #(33 2 #reduceActionForPrimitiveMessageSend10:) #(33 2 #reduceActionForPrimitiveMessageSend11:) #(34 2 #reduceActionForKeywordMethodName1:) #(34 3 #reduceActionForKeywordMethodName2:) #(35 0 #reduceActionForTemporaryVariables1:) #(35 2 #reduceActionForTemporaryVariables2:) #(36 0 #reduceActionForStatements1:) #(36 2 #liftFirstValue:) #(36 5 #reduceActionForStatements3:) #(36 3 #reduceActionForStatements4:) #(37 0 #reduceActionForTemporaries1:) #(37 1 #reduceActionForTemporaries2:) #(37 3 #reduceActionForTemporaries3:) #(38 1 #reduceFor:) #(38 3 #reduceActionForStatementList2:) #(39 0 #reduceActionForOptionalXXXXX1:) #(39 1 #reduceActionForOptionalXXXXX2:) #(40 3 #reduceActionForExpression1:) #(40 1 #liftFirstValue:) #(41 2 #reduceActionForBlockArgs1:) #(41 3 #reduceActionForBlockArgs2:) #(42 5 #reduceActionForBlock1:) #(42 3 #reduceActionForBlock2:) #(42 3 #reduceActionForBlock3:) #(42 7 #reduceActionForBlock4:) #(43 2 #reduceActionForCascade1:) #(43 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(45 0 #reduceActionForCascadeList1:) #(45 3 #reduceActionForCascadeList2:) #(46 0 #reduceActionForPrimitives1:) #(46 4 #reduceActionForPrimitives2:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(51 1 #reduceActionForUnaryMessage1:) #(52 2 #reduceActionForBinaryMessage1:) #(53 2 #reduceActionForKeywordMessage1:) #(53 3 #reduceActionForKeywordMessage2:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(56 2 #reduceActionForMethod1:) #(56 2 #reduceActionForMethod2:) #(56 2 #reduceActionForMethod3:) #(57 1 #reduceActionForVariable1:) #(57 1 #reduceActionForVariable2:) #(58 2 #reduceActionForBinaryMethodName1:) #(59 6 #reduceActionForMethodSequenceNode1:) #(59 4 #reduceActionForMethodSequenceNode2:) #(59 2 #reduceActionForMethodSequenceNode3:) #(60 0 #reduceActionForByteArray1:) #(60 2 #reduceActionForByteArray2:) #(61 0 #reduceActionForArray1:) #(61 2 #reduceActionForArray2:) #(61 3 #reduceActionForArray3:) #(62 1 #liftFirstValue:) #(62 1 #reduceActionForArrayLiteral2:) #(62 1 #reduceActionForArrayLiteral3:) #(62 1 #reduceActionForArrayLiteral4:) #(62 1 #reduceActionForArrayLiteral5:) #(62 3 #reduceActionForArrayLiteral6:) #(62 3 #reduceActionForArrayLiteral7:) #(62 3 #reduceActionForArrayLiteral8:) #(62 3 #reduceActionForArrayLiteral9:) #(62 1 #reduceActionForArrayLiteral10:) #(62 1 #reduceActionForArrayLiteral11:) #(63 3 #liftSecondValue:) #(63 1 #reduceActionForPrimary2:) #(63 1 #liftFirstValue:) #(63 1 #liftFirstValue:) #(66 2 #reduceActionForSequenceNode1:) #(67 1 #reduceFor:) #(68 1 #reduceActionForLiteral1:) #(68 1 #reduceActionForLiteral2:) #(68 1 #reduceActionForLiteral3:) #(68 1 #reduceActionForLiteral4:) #(68 1 #reduceActionForLiteral5:) #(68 1 #reduceActionForLiteral6:) #(68 1 #reduceActionForLiteral7:) #(68 2 #reduceActionForLiteral8:) #(68 2 #reduceActionForLiteral9:) #(68 2 #reduceActionForLiteral10:) #(68 2 #reduceActionForLiteral11:) #(68 2 #reduceActionForLiteral12:) #(68 4 #reduceActionForLiteral13:) #(68 4 #reduceActionForLiteral14:) #(68 4 #reduceActionForLiteral15:) #(68 4 #reduceActionForLiteral16:) )! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50' prior: 83483370! transitionTable ^#( #[1 0 13 0 20 0 17 0 24 0 21 0 26 0 25 0 34 0 29 0 56 0 33 0 58] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 0 82 0 64 0 49 0 66] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 57 0 59 0 170 0 64] #[1 0 61 0 20 0 65 0 29 0 69 0 57] #[1 0 61 0 20 0 65 0 29 0 73 0 57] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 77 0 24 0 170 0 29 0 170 0 30 0 53 0 46 0 81 0 59 0 170 0 64] #[0 0 0 0 64] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 85 0 59 0 170 0 64] #[1 0 58 0 9 0 58 0 20 0 58 0 29 0 89 0 35] #[0 0 86 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 0 0 0 64] #[1 0 93 0 1 0 185 0 6 0 189 0 9 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 193 0 15 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 197 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 2 0 64] #[0 1 14 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 1 18 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 0 50 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 1 22 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 61 0 20 0 65 0 29 0 201 0 57] #[0 1 10 0 64] #[0 1 6 0 64] #[1 0 205 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 213 0 3 0 217 0 10 0 221 0 17 0 225 0 20 0 229 0 23 0 233 0 24 0 237 0 25 0 241 0 26] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 245 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 1 126 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 130 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 134 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 249 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 253 0 18 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 1 1 0 41 1 5 0 66] #[0 1 138 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 142 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 150 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 146 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 118 0 19 0 64] #[1 1 9 0 5 0 102 0 19 1 13 0 39 0 102 0 64] #[0 0 94 0 5 0 19 0 64] #[0 1 114 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 114 0 4 0 5 0 19 0 64] #[1 0 162 0 2 0 162 0 4 0 162 0 5 0 162 0 19 1 17 0 45 0 162 0 64] #[0 0 150 0 2 0 4 0 5 0 19 0 64] #[1 0 154 0 2 0 154 0 4 0 154 0 5 0 154 0 19 1 21 0 24 1 25 0 26 1 29 0 52 1 33 0 53 0 154 0 64] #[1 0 158 0 2 0 158 0 4 0 158 0 5 0 158 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 41 0 51 1 45 0 52 1 49 0 53 0 158 0 64] #[1 1 110 0 4 1 110 0 5 1 53 0 13 1 110 0 19 1 110 0 20 1 110 0 24 1 110 0 26 1 110 0 64] #[1 0 146 0 4 0 146 0 5 0 146 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 57 0 51 1 61 0 52 1 65 0 53 0 146 0 64] #[0 1 106 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 7 0 6 0 8 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 14 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 24 0 6 0 26 0 6 0 30 1 69 0 33] #[1 0 58 0 9 0 58 0 20 0 58 0 29 1 73 0 35] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 1 77 0 46 0 170 0 64] #[0 1 34 0 64] #[0 0 54 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 0 90 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 62 0 9 0 20 0 29] #[1 1 81 0 20 1 85 0 29] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 1 89 0 61] #[1 1 38 0 19 1 38 0 21 1 93 0 60] #[0 1 158 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 154 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 166 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 170 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 162 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 97 0 4] #[1 1 101 0 5 0 102 0 19 1 105 0 39 0 102 0 64] #[1 0 61 0 20 0 65 0 29 1 109 0 57] #[1 1 113 0 9 1 117 0 15 1 121 0 18 1 125 0 19] #[0 1 129 0 19] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 133 0 16 0 117 0 17 0 106 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 137 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 106 0 64 0 181 0 68] #[0 0 70 0 19 0 64] #[1 1 141 0 2 0 142 0 4 0 142 0 5 0 142 0 19 0 142 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 1 153 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 165 0 49 1 169 0 55 1 157 0 57 1 173 0 63 0 181 0 68] #[0 0 190 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 178 0 2 0 178 0 4 0 178 0 5 0 178 0 19 1 177 0 24 0 178 0 64] #[0 0 222 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 202 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 194 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 182 0 2 0 182 0 4 0 182 0 5 0 182 0 19 1 177 0 24 0 182 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 181 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 206 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 198 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 186 0 2 0 186 0 4 0 186 0 5 0 186 0 19 1 177 0 24 0 186 0 64] #[1 0 93 0 1 1 185 0 2 1 189 0 3 1 193 0 4 1 197 0 5 1 201 0 7 1 205 0 8 1 209 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 213 0 20 0 121 0 21 0 125 0 22 0 129 0 23 1 217 0 24 1 221 0 26 0 133 0 30 1 225 0 68] #[1 1 229 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 233 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 237 0 8] #[0 1 241 0 8] #[1 0 93 0 1 1 245 0 3 1 249 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 37 0 19 2 41 0 21] #[0 1 102 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 106 0 19 0 64] #[0 0 78 0 19 0 64] #[0 0 118 0 9 0 15 0 18 0 19] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 2 45 0 66] #[1 0 58 0 9 0 58 0 20 0 58 0 29 2 49 0 35] #[1 0 61 0 20 0 65 0 29 2 53 0 57] #[0 0 134 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 130 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 57 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 98 0 5 0 19 0 64] #[1 1 37 0 20 1 21 0 24 1 25 0 26 2 61 0 50 2 65 0 51 2 69 0 52 2 73 0 53] #[1 0 238 0 2 0 238 0 4 0 238 0 5 0 238 0 19 0 238 0 24 1 25 0 26 1 29 0 52 0 238 0 64] #[1 0 242 0 2 0 242 0 4 0 242 0 5 0 242 0 19 1 37 0 20 0 242 0 24 1 25 0 26 1 41 0 51 1 45 0 52 0 242 0 64] #[0 0 230 0 2 0 4 0 5 0 19 0 24 0 64] #[0 1 110 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 246 0 2 0 246 0 4 0 246 0 5 0 246 0 19 1 37 0 20 0 246 0 24 1 25 0 26 1 57 0 51 1 61 0 52 0 246 0 64] #[1 0 250 0 2 0 250 0 4 0 250 0 5 0 250 0 19 1 37 0 20 0 250 0 24 0 250 0 26 1 41 0 51 0 250 0 64] #[0 0 226 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 254 0 2 0 254 0 4 0 254 0 5 0 254 0 19 1 37 0 20 0 254 0 24 0 254 0 26 1 57 0 51 0 254 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 2 77 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[0 0 110 0 4 0 5 0 19 0 64] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 174 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 2 81 0 46 0 170 0 64] #[0 1 30 0 64] #[0 1 182 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 186 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 2 85 0 20 2 89 0 29] #[0 1 178 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 2 93 0 61] #[1 1 38 0 19 1 38 0 21 2 97 0 60] #[1 1 62 0 1 1 62 0 3 1 62 0 4 1 62 0 10 1 62 0 11 1 62 0 12 2 101 0 13 1 62 0 14 1 62 0 17 1 62 0 20 1 62 0 21 1 62 0 22 1 62 0 23 1 62 0 24 1 62 0 25 1 62 0 26 1 62 0 29 1 62 0 30 1 62 0 32] #[0 1 70 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 74 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 66 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 98 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 94 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 50 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 58 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 174 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 42 0 19 0 21] #[0 2 105 0 19] #[1 2 109 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[0 0 122 0 9 0 15 0 18 0 19] #[1 1 101 0 5 0 102 0 19 2 113 0 39 0 102 0 64] #[0 0 166 0 2 0 4 0 5 0 19 0 64] #[0 0 210 0 2 0 4 0 5 0 19 0 64] #[0 0 214 0 2 0 4 0 5 0 19 0 64] #[1 0 218 0 2 0 218 0 4 0 218 0 5 0 218 0 19 1 177 0 24 0 218 0 64] #[0 0 234 0 2 0 4 0 5 0 19 0 24 0 64] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 117 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 2 121 0 8] #[0 2 125 0 8] #[1 0 93 0 1 1 245 0 3 2 129 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 133 0 19 2 41 0 21] #[0 1 54 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 0 126 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 74 0 19 0 64] #[0 1 26 0 64] #[0 1 78 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 82 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 86 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 90 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 2 141 0 19] #[0 0 138 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] )! ! SmaCCParser subclass: #TestParser instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! Object subclass: #ParserRecompiler instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-Tests'! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 22:45' prior: 83572827! bootstrap | scanner grammer | scanner := self buildScanner: SmaCCScannerScanner andParser: SmaCCScannerParser. grammer := self buildScanner: SmaCCGrammarScanner andParser: SmaCCGrammarParser. scanner compileChanges. grammer compileChanges! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/22/2007 13:12' prior: 83573157! buildScanner: aScannerClass andParser: aParserClass | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: (self definitionFrom: aScannerClass selector: #scannerDefinitionComment) andParser: (self definitionFrom: aParserClass selector: #parserDefinitionComment). parserCompiler scannerClass: aScannerClass; parserClass: aParserClass. [ parserCompiler createChanges; compileDefinitionComments ] on: SmaCCCompilationNotification do: [ :notification | Transcript show: notification messageText; cr. notification resume ]. ^ parserCompiler! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50' prior: 83573851! definitionFrom: aClass selector: aSymbol | source input output | source := aClass class sourceCodeAt: aSymbol. input := ReadStream on: source. output := WriteStream with: String new. input upTo: $". [ input atEnd ] whileFalse: [ (input peekFor: $") ifTrue: [ output nextPut: $" ]. output nextPutAll: (input upTo: $") ]. ^ output contents! ! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 11:54' prior: 83574279! examples | class | #( CParser JavaParser StParser ) do: [ :each | class := Smalltalk classNamed: each. (self buildScanner: class scannerClass andParser: class) compileChanges ]! ! Object subclass: #SmaCCAction instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCAction commentStamp: 'jmb' prior: 83574525! SmaCCAction is an abstract class that represents an action in the LR parsing table. Subclasses must implement the following messages: accessing id! SmaCCAction subclass: #SmaCCAcceptAction instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCAcceptAction commentStamp: 'jmb' prior: 83574733! SmaCCAcceptAction represents an accept action in the parser (i.e., we have parsed a valid string).! !SmaCCAcceptAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83574900! id ^2r00! ! !SmaCCAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83574974! id ^self subclassResponsibility! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83575069! isReduce ^false! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83575148! isShift ^false! ! SmaCCAction subclass: #SmaCCReduceAction instanceVariableNames: 'symbol rhs' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCReduceAction commentStamp: 'jmb' prior: 83575223! SmaCCReduceAction represents a reduce action in our parser's table. Instance Variables: rhs the rhs that is being reduced symbol the symbol that has the rhs! !SmaCCReduceAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83575501! symbol: aSmaCCSymbol rhs: aSmaCCRHS ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS; yourself! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83575671! id ^2r10! ! !SmaCCReduceAction methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83575749! isReduce ^true! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83575835! rhs ^rhs! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83575915! size ^rhs size! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83576001! symbol ^symbol! ! !SmaCCReduceAction methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83576096! symbol: aSmaCCSymbol rhs: aSmaCCRHS rhs := aSmaCCRHS. symbol := aSmaCCSymbol! ! SmaCCAction subclass: #SmaCCRejectAction instanceVariableNames: '' classVariableNames: 'Reject' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCRejectAction commentStamp: 'jmb' prior: 83576234! SmaCCRejectAction represents a reject action in the parsing tables.! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83576387! initialize Reject := self basicNew! ! !SmaCCRejectAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83576507! new ^Reject! ! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83576607! releaseObjects Reject := nil! ! !SmaCCRejectAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83576707! id ^2r11! ! SmaCCAction subclass: #SmaCCShiftAction instanceVariableNames: '' classVariableNames: 'Shift' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCShiftAction commentStamp: 'jmb' prior: 83576775! SmaCCShiftAction represents a shift action in the parser's tables.! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83576926! initialize Shift := self basicNew! ! !SmaCCShiftAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83577044! new ^Shift! ! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83577142! releaseObjects Shift := nil! ! !SmaCCShiftAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83577240! id ^2r01! ! !SmaCCShiftAction methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83577317! isShift ^true! ! Object subclass: #SmaCCEdge instanceVariableNames: 'toNode transitionObjects' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCEdge commentStamp: '' prior: 83577392! SmaCCEdge represents a transition in a Finite Automata (directed graph). It is labeled with the characters or states (possibly none, indicating an epsilon transition) that cause the transition. Instance Variables: toNode The node that this is transitioning to. transitionObjects The characters or symbols that cause the transition. Note that there are no duplicates and all characters/symbols are sorted.! SmaCCEdge subclass: #SmaCCCharacterEdge instanceVariableNames: '' classVariableNames: 'IsExpressions' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCCharacterEdge commentStamp: '' prior: 83577923! SmaCCCharacterEdge is a SmaCCEdge for Character transitions! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/6/2007 22:50' prior: 83578073! generateCharacterSetFor: aSelector | stream | stream := WriteStream with: String new. 0 to: SmaCCGrammar maximumCharacterValue do: [:i | | ch | ch := Character value: i. (ch perform: aSelector) ifTrue: [stream nextPut: ch]]. ^stream contents! ! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/8/2007 23:30' prior: 83578428! initializeIsExpressions "Creates a map from sets of characters to selectors that start with 'is' on Character. This allows generated scanners to take full advantage of selectors that are already implemented on Character" IsExpressions := Dictionary new. "selectors := Character selectors select: [:each | ('is*' match: each) and: [each numArgs = 0 and: [(each at: 3) isUppercase]]]. selectors do: [:sel | | string | string := self generateCharacterSetFor: sel. string isEmpty ifFalse: [IsExpressions at: string put: sel]]"! ! !SmaCCCharacterEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83579061! <= aSmaCCEdge ^self class = aSmaCCEdge class and: [self transitionObjects <= aSmaCCEdge transitionObjects]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83579244! closestIsExpression "Attempts to find the #is selector that most closely matches the character set that this edge transitions on." | expressions closest | expressions := IsExpressions keys select: [:each | each allSatisfy: [:ch | self includes: ch]]. expressions isEmpty ifTrue: [^nil]. closest := IsExpressions at: (expressions asSortedCollection: [:a :b | a size > b size]) first. (self minMaxPairsWithout: closest) size <= (self minMaxPairsWithout: nil) size ifFalse: [^nil]. ^closest! ! !SmaCCCharacterEdge methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83579822! does: aSequenceableCollection include: anObject | start stop mid | (anObject isKindOf: Character) ifFalse: [^false]. start := 1. stop := aSequenceableCollection size. stop = 0 ifTrue: [^false]. [mid := (start + stop) // 2. mid = start] whileFalse: [(aSequenceableCollection at: mid) asInteger < anObject asInteger ifTrue: [start := mid] ifFalse: [stop := mid]]. ^(aSequenceableCollection at: start) = anObject or: [(aSequenceableCollection at: stop) = anObject]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83580385! edgeFrequencyUsingTable: frequencyTable ^self transitionObjects inject: 0 into: [:sum :each | sum + (frequencyTable at: each asInteger \\ frequencyTable size + 1)]! ! !SmaCCCharacterEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83580623! edgeLabel ^transitionObjects! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83580724! expression | stream isSelector | stream := WriteStream with: String new. stream nextPut: $(. transitionObjects size = SmaCCGrammar maximumCharacterValue ifTrue: [self outputInvertedMatchOn: stream] ifFalse: [isSelector := self outputClosestIsMethodOn: stream. self outputExpressionOn: stream without: isSelector]. stream nextPut: $). ^stream contents! ! !SmaCCCharacterEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83581162! isCharacterTransition ^true! ! !SmaCCCharacterEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83581262! mergeWith: aSmaCCEdge super mergeWith: aSmaCCEdge. transitionObjects := String withAll: (transitionObjects asSortedCollection: [:a :b | a asInteger < b asInteger])! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83581507! minMaxPairsWithout: aSelector "Converts a list of characters into a collection of pairs representing the minimum and maximum of each sequence. The list is first filtered to include only those characters that fail aSelector." | start last pairs charsLeft | charsLeft := aSelector isNil ifTrue: [transitionObjects] ifFalse: [transitionObjects reject: [:ch | ch perform: aSelector]]. pairs := OrderedCollection new. charsLeft isEmpty ifTrue: [^pairs]. last := charsLeft first. start := nil. charsLeft do: [:each | last asInteger + 1 = each asInteger ifFalse: [start notNil ifTrue: [pairs add: (Array with: start with: last)]. start := each]. last := each]. pairs add: (Array with: start with: last). ^pairs! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83582331! outputClosestIsMethodOn: aStream | expr | expr := self closestIsExpression. expr isNil ifFalse: [aStream nextPutAll: 'currentCharacter ' , expr]. ^expr! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83582559! outputExpressionFor: aPair on: aStream aPair first = aPair last ifTrue: [^self outputMatchSingleCharacter: aPair first on: aStream]. aPair first = (Character value: 0) ifTrue: [^self outputMatchLessThan: aPair last on: aStream]. aPair last = (Character value: SmaCCGrammar maximumCharacterValue) ifTrue: [^self outputMatchGreaterThan: aPair first on: aStream]. self outputMatchRange: aPair on: aStream! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83583046! outputExpressionOn: aStream without: aSelector | pairs | pairs := self minMaxPairsWithout: aSelector. pairs isEmpty ifTrue: [^self]. aSelector notNil ifTrue: [aStream nextPutAll: ' or: [']. pairs do: [:each | self outputExpressionFor: each on: aStream] separatedBy: [aStream nextPutAll: ' or: [']. aStream next: pairs size - 1 put: $]. aSelector notNil ifTrue: [aStream nextPut: $]]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16' prior: 83583514! outputInvertedMatchOn: aStream | char | char := Character value: ((0 to: SmaCCGrammar maximumCharacterValue) detect: [:each | (transitionObjects includes: (Character value: each)) not]). aStream nextPutAll: 'currentCharacter ~= '; nextPutAll: char storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83583860! outputMatchGreaterThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter >= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83584063! outputMatchLessThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter <= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83584263! outputMatchRange: aPair on: aStream aStream nextPutAll: '(currentCharacter between: '; nextPutAll: aPair first storeString; nextPutAll: ' and: '; nextPutAll: aPair last storeString; nextPutAll: ')'! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16' prior: 83584548! outputMatchSingleCharacter: aCharacter on: aStream aStream nextPutAll: 'currentCharacter = '; nextPutAll: aCharacter storeString! ! !SmaCCEdge class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83584759! to: aSmaCCNode on: aCollectionOrNil | edge | edge := self new. edge to: aSmaCCNode on: aCollectionOrNil. ^edge! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83584937! <= aSmaCCEdge ^true! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83585021! = aSmaCCEdge self class = aSmaCCEdge class ifFalse: [^false]. ^self to = aSmaCCEdge to and: [self transitionObjects = aSmaCCEdge transitionObjects]! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83585232! canMergeWith: aSmaCCEdge ^self class = aSmaCCEdge class! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83585350! does: aSequenceableCollection include: anObject ^aSequenceableCollection includes: anObject! ! !SmaCCEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83585506! edgeFrequencyUsingTable: frequencyTable ^0! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83585612! edgeLabel ^transitionObjects isNil ifTrue: ['epsilon'] ifFalse: [transitionObjects inject: '' into: [:sum :each | sum , each printString]]! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83585823! hash ^(self to hash bitShift: 14) bitXor: transitionObjects hash! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83585949! includes: anObject ^self does: transitionObjects include: anObject! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83586078! isCharacterTransition ^false! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83586168! isEmpty ^transitionObjects isEmpty! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83586264! isEpsilonTransition ^transitionObjects isNil! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83586372! mergeWith: aSmaCCEdge transitionObjects := Array withAll: (transitionObjects , aSmaCCEdge transitionObjects) asSet asSortedCollection! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83586581! printOn: aStream aStream nextPutAll: '---'; nextPutAll: self edgeLabel; nextPutAll: '--->'; nextPutAll: toNode printString! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83586774! remove: aCollection transitionObjects := transitionObjects reject: [:each | self does: aCollection include: each]! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83586957! to ^toNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83587040! to: aSmaCCNode toNode := aSmaCCNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83587149! to: aSmaCCNode on: aStringOrNil toNode := aSmaCCNode. transitionObjects := aStringOrNil! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83587300! transitionObjects ^transitionObjects! ! SmaCCEdge subclass: #SmaCCStateEdge instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCStateEdge commentStamp: '' prior: 83587403! SmaCCStateEdge is a SmaCCEdge for Symbol (state) transitions ! !SmaCCStateEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83587530! <= aSmaCCEdge ^self class ~= aSmaCCEdge class or: [self transitionObjects first <= aSmaCCEdge transitionObjects first]! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83587721! edgeFrequencyUsingTable: frequencyTable ^SmallInteger maxVal * transitionObjects size! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83587876! expression ^transitionObjects size = 1 ifTrue: ['state == #' , transitionObjects asArray first] ifFalse: ['(' , transitionObjects asArray storeString , ' includes: state)']! ! Object subclass: #SmaCCGrammar instanceVariableNames: 'type shiftReduceTable symbols scannerDefinition otherStartingSymbols' classVariableNames: 'IgnoreCase MaximumCharacterValue' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCGrammar commentStamp: '' prior: 83588118! SmaCCGrammar represents a LR(1) or a LALR(1) grammar. Instance Variables: otherStartingSymbols other starting productions. The first production in the grammar is the defaulting starting position, but this can list other starting positions. shiftReduceTable when we have a shift/reduce conflict how should we handle it. This table contains the left/right associative rules. Left is a reduce action and right is a shift action. symbols all symbols in our grammar -- includes both terminal and non-terminal tokens the tokens for our scanner type the type of grammar (LALR1 or LR1) ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83588961! allCharacters ^String withAll: ((0 to: self maximumCharacterValue) collect: [:each | Character value: each])! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83589147! ignoreCase ^IgnoreCase! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83589242! ignoreCase: aBoolean IgnoreCase := aBoolean! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83589359! implicitToken: aString | symbol node | symbol := (aString copyFrom: 2 to: aString size - 1) asSymbol. (Character canUnderstand: symbol) ifFalse: [^nil]. node := SmaCCCharacterRENode characters: (self allCharacters select: [:each | each perform: symbol]). node position: SmallInteger maxVal. "Implicit nodes have least precedence" ^node! ! !SmaCCGrammar class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83589789! initialize IgnoreCase := false. self maximumCharacterValue: 255! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83589926! maximumCharacterValue ^MaximumCharacterValue! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83590043! maximumCharacterValue: anInteger MaximumCharacterValue := anInteger. SmaCCCharacterEdge initializeIsExpressions! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83590223! addEmptySymbol self addSymbol: SmaCCSymbol empty. self addSymbol: SmaCCSymbol error! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83590374! addStartingSymbol: aSmaCCSymbol (otherStartingSymbols includes: aSmaCCSymbol) ifFalse: [otherStartingSymbols add: aSmaCCSymbol]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83590570! addSymbol: aSmaCCSymbol ^symbols add: aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83590688! allStartingSymbols "Return all starting symbols with the default starting symbol listed first." | startingSymbols default | default := self startSymbol. startingSymbols := otherStartingSymbols copy. startingSymbols remove: default ifAbsent: []. startingSymbols := startingSymbols collect: [:each | (SmaCCStartingSymbol name: 'B e g i n' , each name) addProduction: ((SmaCCRHS new) add: each; yourself); yourself]. startingSymbols addFirst: default. ^startingSymbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83591268! calculateFirstSets | changed | changed := true. [changed] whileTrue: [changed := false. self symbols do: [:each | changed := changed | each calculateFirstTerminals]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83591514! emptySymbols ^self symbols select: [:each | each isTerminal not and: [each isEmpty]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83591665! initialItemSetFor: aSmaCCSymbol ^(aSmaCCSymbol asLRItemSet) type: type; yourself! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83591826! initialize type := #LALR1. symbols := OrderedCollection new. shiftReduceTable := Dictionary new. otherStartingSymbols := OrderedCollection new! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83592036! keywordRegularExpressionFor: aString | regularExpressionString regex | regularExpressionString := (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '""' with: '"'. regex := regularExpressionString inject: nil into: [:sum :each | sum isNil ifTrue: [SmaCCCharacterRENode characters: (String with: each)] ifFalse: [sum , (SmaCCCharacterRENode characters: (String with: each))]]. regex addStates: scannerDefinition states. ^regex! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83592578! keywordTerminalNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols addFirst: ((SmaCCTerminalSymbol name: aString) regularExpression: (self keywordRegularExpressionFor: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19' prior: 83592880! leftPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCReduceAction! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83593036! makeGroupFor: aSmaCCRHSCollection | symbol name | name := aSmaCCRHSCollection inject: '' into: [:sum :each | sum , ' | ' , each printString]. symbol := self nonTerminalSymbolNamed: 'Group: ' , name. symbol isEmpty ifTrue: [(aSmaCCRHSCollection allSatisfy: [:each | each size = 1]) ifTrue: [aSmaCCRHSCollection do: [:each | each reduceAction: '''1''']]. aSmaCCRHSCollection do: [:each | symbol addProduction: each]]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83593550! makeOptionalSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Optional: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'nil'; yourself); addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: '''1'''; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83593984! makeRepeatMultipleSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat Multiple: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: 'OrderedCollection with: ''1'''; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83594529! makeRepeatSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'OrderedCollection new'; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83595018! makeTokenIdMethodFor: aString | token | token := (scannerDefinition includesTokenNamed: aString) ifTrue: [self terminalSymbolNamed: aString] ifFalse: [symbols detect: [:each | each name = aString] ifNone: [symbols add: (SmaCCTerminalSymbol name: aString)]]. token createIdMethod: true! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19' prior: 83595394! nonAssociativePrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCRejectAction! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83595558! nonTerminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [self addSymbol: (SmaCCNonTerminalSymbol name: aString)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83595771! preferredActionFor: aSmaCCSymbol ^shiftReduceTable at: aSmaCCSymbol ifAbsent: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83595920! reduceTableIndexFor: aSmaCCSymbol rhs: aSmaCCRHS | index | index := 0. self symbols do: [:each | each = aSmaCCSymbol ifTrue: [^index + (each positionOf: aSmaCCRHS)]. index := index + each size]. ^0! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19' prior: 83596200! rightPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCShiftAction! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83596365! scannerDefinition: aSmaCCScannerDefinition scannerDefinition := aSmaCCScannerDefinition! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19' prior: 83596520! setOperatorPrecedenceFor: aSmaCCSymbol to: anInteger aSmaCCSymbol precedence: anInteger! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83596674! setStartSymbolIfNone: aSmaCCSymbol | startSymbol | self startSymbol notNil ifTrue: [^self]. startSymbol := SmaCCStartingSymbol name: 'B e g i n'. self addSymbol: startSymbol. startSymbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; yourself)! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83597000! startSymbol ^symbols detect: [:each | each isStartingSymbol] ifNone: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83597139! symbols ^symbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83597220! symbols: aCollection symbols := aCollection! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83597328! terminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83597617! terminalSymbolNamed: aString ifAbsent: aBlock ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString ifAbsentPut: [| node | node := self class implicitToken: aString. node isNil ifTrue: [^aBlock value]. node addStates: scannerDefinition nonExcludeStates. node]); yourself)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83598145! tokens ^scannerDefinition tokens! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83598253! type: aSmaCCSymbol type := aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83598359! unusedSymbols | nonTerminals problemSymbols todo symbol | nonTerminals := self symbols reject: [:each | each isTerminal]. problemSymbols := nonTerminals asSet. problemSymbols remove: self startSymbol. todo := OrderedCollection with: self startSymbol. [todo isEmpty] whileFalse: [symbol := todo removeFirst. symbol productionsDo: [:rhs | rhs do: [:each | each isTerminal ifFalse: [(problemSymbols includes: each) ifTrue: [todo add: each. problemSymbols remove: each]]]]]. ^problemSymbols! ! Object subclass: #SmaCCGrammarCompiler instanceVariableNames: 'shiftTable itemSets startingStateMap actions parserClass parserDefinitionString scannerCompiler grammar model' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCGrammarCompiler commentStamp: 'jmb' prior: 83599003! SmaCCGrammarCompiler compiles a SmaCCGrammar. Instance Variables: actions the action table for the parser. It contains the action (shift/reduce/accept/reject) for each possible state/symbol pair grammar our grammar itemSets the item sets for our grammar model where we are compiling our changes into parserClass the parser class for our changes parserDefinitionString the definition of our parser scannerCompiler a compiler for the scanner shiftTable a table mapping a state/symbol pair to the new state that is aquired by shifting the symbol startingStateMap the state for SmaCCSymbol's starting item set ! !SmaCCGrammarCompiler class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83599953! new ^self basicNew initialize! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83600060! actionForState: anInteger on: aSmaCCSymbol | action newStateIndex | action := (itemSets at: anInteger) action: aSmaCCSymbol prefer: (grammar preferredActionFor: aSmaCCSymbol). action isShift ifTrue: [newStateIndex := shiftTable at: (Array with: anInteger with: aSmaCCSymbol). ^(newStateIndex bitShift: 2) + action id]. action isReduce ifTrue: [^((grammar reduceTableIndexFor: action symbol rhs: action rhs) bitShift: 2) + action id]. ^action id! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83600620! arrayTypeMask ^self hasLiteralByteArrays ifTrue: [0] ifFalse: [2]! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83600769! buildScanner: scannerString andParser: parserString | parser | scannerCompiler grammar: self grammar. scannerCompiler scannerDefinitionString: scannerString. parserDefinitionString := parserString. scannerCompiler parseTokens. parser := SmaCCGrammarParser on: (ReadStream on: parserString). parser grammar: grammar. parser parse! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83601180! changes ^model changes! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 1/7/2007 11:08' prior: 83601279! checkFor: problemSymbols errorMessage: errorMessage | stream | problemSymbols isEmpty ifTrue: [^self]. stream := WriteStream with: String new. problemSymbols do: [:each | stream nextPutAll: each printString] separatedBy: [stream space]. SmaCCCompilationNotification new tag: stream contents; signal: errorMessage! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83601675! checkForEmptySymbols self checkFor: grammar emptySymbols errorMessage: 'Missing non-terminal productions'! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83601855! checkForUnusedSymbols self checkFor: grammar unusedSymbols errorMessage: 'Unused non-terminal symbols'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 3/10/2012 22:52' prior: 83770742! compileChanges RBRefactoryChangeManager instance performChange: self changes. scannerCompiler scannerClass realClass ifNotNilDo: [:each | each initializeKeywordMap]! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83602294! compileDefinitionComments scannerCompiler compileScannerDefinitionComment. self compileParserDefinitionComment! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83602480! compileInto: sClass andParser: pClass self scannerClass: sClass. self parserClass: pClass. self createChanges. self compileChanges! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00' prior: 83602695! compileItemSetsComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'itemSetsComment'; cr; cr; tab; nextPut: $"; cr. itemSets keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83603207! compileParser self compileTransitionTable. self compileStartingStateIds. self compileReductionTable. self compileScannerClassIntoParser! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00' prior: 83603426! compileParserDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'parserDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (parserDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83603839! compileReductionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'reduceTable'; cr; tab; nextPutAll: '^#('; cr. self reduceTable do: [:each | stream nextPutAll: '#('. each do: [:e | stream nextPutAll: e storeString] separatedBy: [stream space]. stream nextPut: $); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83604340! compileScanner scannerCompiler compileScanner! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00' prior: 83604466! compileScannerClassIntoParser | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerClass'; cr; tab; nextPutAll: '^'; nextPutAll: scannerCompiler scannerClass name. self parserClass theMetaClass compile: stream contents classified: #'generated-accessing'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00' prior: 83604840! compileStartingStateIds startingStateMap keysAndValuesDo: [:symbol :position | | stream | stream := WriteStream with: String new. stream nextPutAll: 'startingStateFor'; nextPutAll: symbol compileName; cr; tab; nextPutAll: '^'; nextPutAll: position printString. parserClass theMetaClass compile: stream contents classified: #'generated-starting states']! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 6/14/2012 11:42' prior: 83605329! compileSymbolComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'symbolComment'; cr; cr; tab; nextPut: $"; cr. scannerCompiler symbols keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: '. '; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83605874! compileTransitionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'transitionTable'; cr; tab; nextPutAll: '^#('; cr. self transitionTable do: [:each | stream nextPutAll: (self hasLiteralByteArrays ifTrue: ['#['] ifFalse: ['#(']). each do: [:byte | stream nextPutAll: byte printString] separatedBy: [stream nextPut: $ ]. stream nextPut: (self hasLiteralByteArrays ifTrue: [$]] ifFalse: [$)]); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83606510! compressTable: table ^table collect: [:row | self compressTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83606661! compressTableRow: row | uniqueItems | uniqueItems := self uniqueNonErrorActionsForTableRow: row. ^uniqueItems size = 1 ifTrue: [self singleActionTableRow: row forAction: uniqueItems first] ifFalse: [self multipleActionTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83606979! compressedRowStream ^WriteStream with: (self hasLiteralByteArrays ifTrue: [ByteArray new] ifFalse: [Array new])! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83607174! createChanges self removeOldMethods. self checkForEmptySymbols. self checkForUnusedSymbols. self compileScanner. self compileParser! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83607387! createItemSets | itemSet newState index | startingStateMap := Dictionary new. grammar calculateFirstSets. itemSets := OrderedCollection new. grammar allStartingSymbols do: [:each | itemSets add: (grammar initialItemSetFor: each). startingStateMap at: each put: itemSets size]. shiftTable := Dictionary new. index := 1. [index <= itemSets size] whileTrue: [itemSet := itemSets at: index. grammar symbols do: [:each | newState := itemSet moveOn: each. newState notEmpty ifTrue: [shiftTable at: (Array with: index with: each) put: (self indexOfState: newState)]]. index := index + 1]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83608113! createTransitionTable | table | table := (1 to: itemSets size) collect: [:index | scannerCompiler symbols collect: [:each | self actionForState: index on: each]]. actions := self compressTable: table! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:33' prior: 83608412! defineClass: aString asSubclassOf: aBehavior model defineClass: aBehavior name , ' subclass: #' , aString , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: '''' '. ^model classNamed: aString asSymbol! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83608725! generatedMethodsIn: aRBClass ^aRBClass selectors select: [:each | (aRBClass protocolsFor: each) allSatisfy: [:protocol | protocol notNil and: ['generated*' match: protocol]]]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83608988! grammar ^grammar isNil ifTrue: [grammar := SmaCCGrammar new] ifFalse: [grammar]! ! !SmaCCGrammarCompiler methodsFor: 'testing' stamp: 'lr 11/25/2009 18:59' prior: 83609146! hasLiteralByteArrays "The #hasLiteralByteArrays wasn't meant to be changed without also changing the SmaCCParser #actionForState:and: and #binarySearchIn:for:size: methods. This issue is fixed now and the SmaCCParser can now handle both cases." ^ true! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83609477! indexOfState: newState | newStateIndex | newStateIndex := itemSets indexOf: newState. newStateIndex = 0 ifTrue: [itemSets add: newState. newStateIndex := itemSets size] ifFalse: [(itemSets at: newStateIndex) mergeWith: newState]. ^newStateIndex! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: 'lr 1/6/2007 21:55' prior: 83609825! initialize scannerCompiler := SmaCCScannerCompiler new. model := (RBNamespace new) name: 'Compile Scanner/Parser'; yourself. startingStateMap := Dictionary new! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83610072! multipleActionTableRow: row | stream | stream := self compressedRowStream. stream nextPut: 1 + self arrayTypeMask. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: each on: stream. self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83610438! parserClass ^parserClass! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05' prior: 83610541! parserClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [parserClass := model classFor: aClassOrString] ifFalse: [parserClass := model classNamed: aClassOrString. parserClass isNil ifTrue: [parserClass := self defineClass: aClassOrString asSubclassOf: SmaCCParser]]! ! !SmaCCGrammarCompiler methodsFor: 'reduction table' stamp: ' 6/1/07 21:19' prior: 83610921! reduceTable | table nonterminals | table := OrderedCollection new. nonterminals := scannerCompiler symbols reject: [:each | each isTerminal]. nonterminals do: [:each | each productionsDo: [:rhs | table add: (Array with: (scannerCompiler symbols indexOf: each) with: rhs size with: (rhs compileSourceFor: each in: parserClass))]]. ^table! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 11/25/2009 18:00' prior: 83611385! removeOldMethods self removeOldMethodsFrom: scannerCompiler scannerClass; removeOldMethodsFrom: scannerCompiler scannerClass theMetaClass; removeOldMethodsFrom: parserClass; removeOldMethodsFrom: parserClass theMetaClass! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83611686! removeOldMethodsFrom: aRBClass (self generatedMethodsIn: aRBClass) do: [:each | aRBClass removeMethod: each]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05' prior: 83611877! scannerClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [scannerCompiler scannerClass: (model classFor: aClassOrString)] ifFalse: [scannerCompiler scannerClass: (model classNamed: aClassOrString). scannerCompiler scannerClass isNil ifTrue: [scannerCompiler scannerClass: (self defineClass: aClassOrString asSubclassOf: SmaCCScanner)]]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83612337! singleActionTableRow: row forAction: anInteger | stream | stream := self compressedRowStream. stream nextPut: 0 + self arrayTypeMask. self writeInteger: anInteger on: stream. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83612710! transitionTable actions isNil ifTrue: [self createItemSets. self createTransitionTable]. ^actions! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83612896! uniqueNonErrorActionsForTableRow: row ^(row asSet) remove: 3 ifAbsent: []; asArray! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19' prior: 83613061! writeInteger: anInteger on: aStream self hasLiteralByteArrays ifTrue: [aStream nextPut: (anInteger bitShift: -8); nextPut: (anInteger bitAnd: 16rFF)] ifFalse: [aStream nextPut: anInteger]! ! Object subclass: #SmaCCGraphAlgorithm instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCGraphAlgorithm commentStamp: '' prior: 83613338! SmaCCGraphAlgorithm is an abstract class that has support for the graph transformation algorithms. ! SmaCCGraphAlgorithm subclass: #SmaCCDuplicateNodeEliminator instanceVariableNames: 'comparisonState root' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCDuplicateNodeEliminator commentStamp: '' prior: 83613516! SmaCCDuplicateNodeEliminator removes duplicate nodes in a SmaCCNode graph. Instance Variables: comparisonState dictionary mapping equivalent nodes root the root of the graph ! !SmaCCDuplicateNodeEliminator class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83613805! removeDuplicateNodesIn: aSmaCCNode ^self new removeDuplicateNodesIn: aSmaCCNode! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83613968! isNode: firstSmaCCNode equivalentTo: secondSmaCCNode | firstTransitions secondTransitions | firstSmaCCNode = secondSmaCCNode ifTrue: [^true]. firstSmaCCNode transitions size = secondSmaCCNode transitions size ifFalse: [^false]. firstSmaCCNode action = secondSmaCCNode action ifFalse: [^false]. ((comparisonState at: firstSmaCCNode ifAbsent: [#()]) includes: secondSmaCCNode) ifTrue: [^true]. (comparisonState at: firstSmaCCNode ifAbsentPut: [Set new]) add: secondSmaCCNode. (comparisonState at: secondSmaCCNode ifAbsentPut: [Set new]) add: firstSmaCCNode. firstTransitions := firstSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. secondTransitions := secondSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. firstTransitions with: secondTransitions do: [:first :second | first transitionObjects = second transitionObjects ifFalse: [^false]. (self isNode: first to equivalentTo: second to) ifFalse: [^false]]. ^true! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83615127! mergeAllTransitions root allStates do: [:each | each mergeTransitions]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83615280! pairsDo: aBlock | nodes | nodes := root allStates asOrderedCollection. 1 to: nodes size - 1 do: [:i | i + 1 to: nodes size do: [:j | aBlock value: (nodes at: i) value: (nodes at: j)]]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83615563! removeDuplicateNodesIn: aSmaCCNode root := aSmaCCNode. self removeDuplicates. ^root! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: 'lr 1/8/2007 22:44' prior: 83615736! removeDuplicates | changed iterations | changed := true. iterations := root allStates size. [changed and: [iterations > 0]] whileTrue: [changed := false. iterations := iterations - 1. self mergeAllTransitions. self pairsDo: [:firstNode :secondNode | comparisonState := Dictionary new. (self isNode: firstNode equivalentTo: secondNode) ifTrue: [firstNode mergeWith: secondNode. changed := true]]]! ! SmaCCGraphAlgorithm subclass: #SmaCCEpsilonRemoval instanceVariableNames: 'nodeMap' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCEpsilonRemoval commentStamp: '' prior: 83616258! SmaCCEpsilonRemoval removes epsilon nodes from a NFA. Instance Variables: nodeMap Dictionary mapping sets of states to a new state in the new graph ! !SmaCCEpsilonRemoval class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83616499! removeEpsilonEdgesFrom: aSmaCCNode "Returns an equivalent graph to aSmaCCNode that doesn't contain any epsilon transitions" ^self new removeEpsilonEdgesFrom: aSmaCCNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83616744! createNodeWithoutEpsilonEdges: aSmaCCNode | newNode newTransitions | newNode := self createMergedNodeFrom: (self epsilonReachableNodesFrom: aSmaCCNode). nodeMap at: aSmaCCNode put: newNode. newTransitions := OrderedCollection new. newNode transitions do: [:each | each isEpsilonTransition ifFalse: [newTransitions add: (each class to: (self removeEpsilonEdgesFrom: each to) on: each transitionObjects)]]. newNode transitions: newTransitions. ^newNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83617307! epsilonReachableNodesFrom: aSmaCCNode | todo reachable node | reachable := Set with: aSmaCCNode. todo := OrderedCollection with: aSmaCCNode. [todo notEmpty] whileTrue: [node := todo removeLast. node transitions do: [:each | (each isEpsilonTransition and: [(reachable includes: each to) not]) ifTrue: [reachable add: each to. todo add: each to]]]. ^reachable! ! !SmaCCEpsilonRemoval methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83617793! initialize super initialize. nodeMap := Dictionary new! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83617922! removeEpsilonEdgesFrom: aSmaCCNode ^nodeMap at: aSmaCCNode ifAbsent: [self createNodeWithoutEpsilonEdges: aSmaCCNode]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19' prior: 83618112! createMergedNodeFrom: nodeCollection | newNode | newNode := SmaCCNode new. self mergeTransitionsFrom: nodeCollection into: newNode. self mergeActionsFrom: nodeCollection into: newNode. ^newNode! ! !SmaCCGraphAlgorithm methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83618393! initialize! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19' prior: 83618472! mergeActionsFrom: nodeCollection into: aSmaCCNode nodeCollection do: [:each | aSmaCCNode addActions: each action]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19' prior: 83618656! mergeTransitionsFrom: nodeCollection into: aSmaCCNode | transitions | transitions := Set new. nodeCollection do: [:each | each transitions do: [:edge | transitions add: edge copy]]. aSmaCCNode transitions: transitions. aSmaCCNode mergeTransitions! ! SmaCCGraphAlgorithm subclass: #SmaCCNFAtoDFA instanceVariableNames: 'mergedStates' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCNFAtoDFA commentStamp: '' prior: 83618976! SmaCCNFAtoDFAAlgorithm converts an NFA without epsilon transitions into a DFA. If a node contains edges that lead to multiple nodes for the same character, then a new state is created that merges all states for the given character. Instance Variables: mergedStates dictionary that maps a collection of states to the resulting merged state ! !SmaCCNFAtoDFA class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83619402! convertToDFA: aSmaCCNode "Returns an equivalent DFA from the NFA specified by aSmaCCNode -- the NFA must not contain epsilon edges." ^self new convertToDFA: aSmaCCNode! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19' prior: 83619644! commonTransitionObjectsForEdges: edgeCollection ^edgeCollection inject: edgeCollection first transitionObjects into: [:sum :each | sum select: [:char | each includes: char]]! ! !SmaCCNFAtoDFA methodsFor: 'algorithm' stamp: ' 6/1/07 21:19' prior: 83619888! convertToDFA: aSmaCCNode ^self mergedNodeFor: (Array with: aSmaCCNode)! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19' prior: 83620031! createEdgeMerging: conflictingEdgeCollection | newNode common newEdge | newNode := self mergedNodeFor: (conflictingEdgeCollection collect: [:each | each to]). common := self commonTransitionObjectsForEdges: conflictingEdgeCollection. newEdge := conflictingEdgeCollection first class to: newNode on: common. conflictingEdgeCollection do: [:each | each remove: common]. ^newEdge! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19' prior: 83620498! eliminateDuplicateTransitionsIn: aSmaCCNode | newTransitions conflictingObject | newTransitions := aSmaCCNode transitions collect: [:each | each copy]. [conflictingObject := self someDuplicateIn: newTransitions. conflictingObject notNil] whileTrue: [| conflictingEdges newEdge | conflictingEdges := newTransitions select: [:each | each includes: conflictingObject]. newEdge := self createEdgeMerging: conflictingEdges. newTransitions add: newEdge]. self setTransitionsOn: aSmaCCNode to: newTransitions! ! !SmaCCNFAtoDFA methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83621112! initialize super initialize. mergedStates := Dictionary new! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19' prior: 83621252! mergedNodeFor: nodeCollection | mergedNodes | mergedNodes := nodeCollection asSortedCollection asArray. ^mergedStates at: mergedNodes ifAbsent: [| newNode | newNode := self createMergedNodeFrom: mergedNodes. mergedStates at: mergedNodes put: newNode; at: (Array with: newNode) put: newNode. self eliminateDuplicateTransitionsIn: newNode. newNode]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19' prior: 83621699! setTransitionsOn: aSmaCCNode to: edgeCollection aSmaCCNode transitions: (edgeCollection reject: [:each | each isEmpty]). aSmaCCNode transitions do: [:each | each to: (self convertToDFA: each to)]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19' prior: 83621968! someDuplicateIn: edgeCollection | objects | objects := Set new. edgeCollection do: [:edge | edge transitionObjects do: [:each | (objects includes: each) ifTrue: [^each]]. objects addAll: edge transitionObjects]. ^nil! ! Object subclass: #SmaCCLR1Item instanceVariableNames: 'rhs symbol location followers' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCLR1Item commentStamp: 'jmb' prior: 83622255! SmaCCLR1Item represents an item in a SmaCCItemSet. Instance Variables: followers all possible symbols that can follow this production in this state location the position in the rhs of the production we are at rhs the rhs of the production symbol the symbol for the production! !SmaCCLR1Item class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83622665! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection; yourself! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83622898! = aSmaCCLR1Item ^self class == aSmaCCLR1Item class and: [location = aSmaCCLR1Item location and: [rhs == aSmaCCLR1Item rhs and: [symbol == aSmaCCLR1Item symbol]]]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83623136! action: aSmaCCSymbol location > rhs size ifTrue: [(symbol isStartingSymbol and: [aSmaCCSymbol isEmptySymbol]) ifTrue: [^SmaCCAcceptAction new]. (followers includes: aSmaCCSymbol) ifTrue: [^SmaCCReduceAction symbol: symbol rhs: rhs]] ifFalse: [(rhs at: location) = aSmaCCSymbol ifTrue: [^SmaCCShiftAction new]]. ^SmaCCRejectAction new! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83623560! followers ^followers! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83623656! followers: aSmaCCSymbolSet followers := aSmaCCSymbolSet! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83623779! hash ^(symbol identityHash bitXor: (location bitShift: 14)) bitXor: rhs identityHash! ! !SmaCCLR1Item methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83623931! isLR1EqualTo: aSmaCCLR1Item ^self followers size = aSmaCCLR1Item followers size and: [self followers allSatisfy: [:each | aSmaCCLR1Item followers includes: each]]! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83624162! location ^location! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83624256! location: anInteger location := anInteger! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83624365! mergeWith: aSmaCCLR1Item followers mergeWith: aSmaCCLR1Item followers! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83624502! moveNext ^(self copy) followers: (followers class basedOn: followers); location: location + 1; yourself! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83624678! nextSymbol ^location > rhs size ifTrue: [SmaCCSymbol sentinel] ifFalse: [rhs at: location]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83624840! precedence "If we don't have a precedence, then assume we are the lowest precedence (which will cause a shift action)." | max | max := -1. rhs do: [:each | max := max max: (each precedence ifNil: [max])]. ^max! ! !SmaCCLR1Item methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83625120! printOn: aStream | i | aStream nextPut: $[; nextPutAll: symbol printString; nextPutAll: ' :'. i := 1. rhs do: [:each | i = location ifTrue: [aStream nextPutAll: ' . ']. aStream space; nextPutAll: each printString. i := i + 1]. location > rhs size ifTrue: [aStream nextPutAll: ' . ']. aStream nextPut: $;. followers printOn: aStream. aStream nextPut: $]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83625575! rest | newRHS | newRHS := SmaCCRHS new. location + 1 to: rhs size do: [:each | newRHS add: (rhs at: each)]. ^newRHS! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83625758! rhs ^rhs! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83625831! symbol ^symbol! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83625921! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection symbol := aSmaCCSymbol. rhs := aSmaCCRHS. location := 1. followers := aSmaCCSymbolCollection! ! Object subclass: #SmaCCNode instanceVariableNames: 'transitions action id' classVariableNames: 'MaxSubNodesInMethod NextId' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCNode commentStamp: '' prior: 83626146! SmaCCNode is a node in a directed graph. Instance Variables: action a collection of integers or a symbol. This contains the action to be performed when we match and can't find a longer match. id a unique number that allows us to sort the nodes transitions our transitions ! !SmaCCNode class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19' prior: 83626563! initialize NextId := 0. MaxSubNodesInMethod := 20! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83626683! maxSubNodesInMethod ^MaxSubNodesInMethod! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83626793! maxSubNodesInMethod: anInteger MaxSubNodesInMethod := anInteger! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83626920! <= aSmaCCNode ^self id <= aSmaCCNode id! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83627024! = anObject ^self class = anObject class and: [self id = anObject id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83627155! action ^action! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83627242! action: anObject anObject isNil ifTrue: [^self]. action := anObject isSymbol ifTrue: [anObject] ifFalse: [SortedCollection with: anObject]! ! !SmaCCNode methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83627463! actionForSpecificRegularExpression: aSmaCCRegularExpression | matchedAction strings | strings := aSmaCCRegularExpression possibleMatches. matchedAction := self simulate: (ReadStream on: strings first). strings do: [:each | matchedAction = (self simulate: (ReadStream on: each)) ifFalse: [^nil]]. ^matchedAction! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83627843! addActions: aCollection aCollection isNil ifTrue: [^self]. action isNil ifTrue: [action := aCollection copy. ^self]. action isSymbol ifTrue: [^self]. aCollection isSymbol ifTrue: [^action := aCollection]. aCollection do: [:each | (action includes: each) ifFalse: [action add: each]]! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19' prior: 83628203! addEdgeTo: aSmaCCNode transitions add: (SmaCCEdge to: aSmaCCNode on: nil)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19' prior: 83628337! addEdgeTo: aSmaCCNode onCharacters: characterCollection transitions add: (SmaCCCharacterEdge to: aSmaCCNode on: characterCollection)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19' prior: 83628530! addEdgeTo: aSmaCCNode onStates: symbolCollection transitions add: (SmaCCStateEdge to: aSmaCCNode on: symbolCollection)! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:22' prior: 83628717! addImplementationSpecificRewritesTo: rewriter! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83628823! allStates | nodes | nodes := Set new. self allStatesInto: nodes. ^nodes! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83628959! allStatesInto: aSet (aSet includes: self) ifTrue: [^self]. aSet add: self. transitions do: [:each | each to allStatesInto: aSet]! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19' prior: 83629155! asDFA | new | new := (SmaCCNFAtoDFA convertToDFA: self asNFAWithoutEpsilonTransitions) startingNodeWithoutUnnecessaryDefaultTransition. new removeDuplicateNodes. ^new! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19' prior: 83629394! asNFAWithoutEpsilonTransitions ^SmaCCEpsilonRemoval removeEpsilonEdgesFrom: self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83629538! asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass | stream | stream := WriteStream with: String new. self hasSimpleLoop ifTrue: [stream nextPut: $[]. self writeMatchingCodeOn: stream usingSelectorMap: aDictionary. (self sortedTransitionsFor: aClass) do: [:each | each to = self ifTrue: [stream nextPutAll: each expression; nextPut: $]; nextPutAll: ' whileTrue.'; cr] ifFalse: [stream nextPutAll: each expression; nextPutAll: ' ifTrue: ['. stream nextPutAll: (methodMap at: each to ifAbsentPut: [each to asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass]); nextPutAll: '].'; cr]]. (transitions notEmpty or: [action isNil]) ifTrue: [stream nextPutAll: '^self reportLastMatch'; cr]. ^stream contents! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83630502! compileInto: aClass usingSelectorMap: aDictionary | methodNodes methodMap index | methodNodes := self statesToMakeIntoMethods. methodMap := self methodNameMapFor: methodNodes. index := 0. methodNodes do: [:each | | stream | stream := WriteStream with: String new. stream nextPutAll: (each = self ifTrue: ['scanForToken'] ifFalse: ['scan' , (index := index + 1) printString]); cr. stream nextPutAll: (each asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass). aClass compile: (self optimizedParseTreeFor: stream contents) formattedCode classified: #'generated-scanner']! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83631226! groupedTransitions ^transitions inject: OrderedCollection new into: [:sum :each | (sum detect: [:edgeCollection | edgeCollection first canMergeWith: each] ifNone: [sum add: OrderedCollection new]) add: each. sum]! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83631517! hasSimpleLoop ^transitions anySatisfy: [:each | each to = self]! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83631644! hash ^id bitShift: 4! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83631726! id ^id! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83631805! initialize id := NextId := NextId + 1. transitions := SortedCollection new! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83631942! isTerminalNode ^transitions isEmpty or: [transitions size = 1 and: [self hasSimpleLoop]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83632092! mergeTransitions self groupedTransitions do: [:edges | | toMap | toMap := Dictionary new. edges do: [:each | (toMap includesKey: each to) ifTrue: [(toMap at: each to) mergeWith: each. transitions remove: each] ifFalse: [toMap at: each to put: each]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83632458! mergeWith: aSmaCCNode id := aSmaCCNode id. transitions := aSmaCCNode transitions. action := aSmaCCNode action! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83632634! methodNameMapFor: methodNodes | index methodMap | methodMap := Dictionary new. index := 0. methodNodes do: [:value | methodMap at: value put: (value = self ifTrue: ['^self scanForToken'] ifFalse: ['^self scan' , (index := index + 1) printString])]. ^methodMap! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83632987! needsSeparateMethod ^self allStates size > MaxSubNodesInMethod! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:01' prior: 83633119! optimizationRewriter | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. currentCharacter == `#l ifTrue: [`@.Stmts3]. `@.Stmts4' with: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [ ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [`@.Stmts2. ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue: [`@.Stmts2]. `@.Stmts3'; replace: '`@.Stmts1. currentCharacter isLiteral ifTrue: [`@.Stmts2]. `@.Stmts3' with: '`@.Stmts1. `@.Stmts2'; replace: '`@.Stmts1. `.Stmt. `@.Stmts. `@a ifTrue: [self step. `.Stmt. `@.Stmts]. `@.Stmts2' with: '`@.Stmts1. `@a ifTrue: [self step]. `.Stmt. `@.Stmts. `@.Stmts2'; replace: '`@.Stmts1. `@a ifTrue: [`@.Stmts. ^self reportLastMatch]' with: '`@.Stmts1. `@a ifTrue: [`@.Stmts]'. self addImplementationSpecificRewritesTo: rewriter. ^rewriter! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83634376! optimizedParseTreeFor: aString | tree rewriter | tree := RBParser parseMethod: aString. rewriter := self optimizationRewriter. [rewriter executeTree: tree] whileTrue: [tree := rewriter tree]. ^tree! ! !SmaCCNode methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83634641! printOn: aStream aStream nextPutAll: self class name; nextPut: $(; nextPutAll: id printString; nextPut: $)! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83634818! removeDuplicateNodes ^SmaCCDuplicateNodeEliminator removeDuplicateNodesIn: self! ! !SmaCCNode methodsFor: 'simulating' stamp: ' 6/1/07 21:19' prior: 83634962! simulate: aStream | char | aStream atEnd ifTrue: [^action]. char := aStream next. transitions do: [:each | (each includes: char) ifTrue: [^each to simulate: aStream]]. ^nil! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:10' prior: 83635210! sortedTransitionsFor: aClass | frequencies | frequencies := (aClass realClass ifNil: [SmaCCScanner]) frequencyTable. ^transitions asSortedCollection: [:a :b | | aFrequency bFrequency | aFrequency := a edgeFrequencyUsingTable: frequencies. bFrequency := b edgeFrequencyUsingTable: frequencies. aFrequency > bFrequency or: [aFrequency = bFrequency and: [a <= b]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83635653! startingNodeWithoutUnnecessaryDefaultTransition | edge | self transitions size = 1 ifFalse: [^self]. edge := self transitions first. (edge includes: #default) ifTrue: [^edge to]. ^self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83635905! statesToMakeIntoMethods | allStates incoming | allStates := self allStates. incoming := Dictionary new. allStates do: [:each | each transitions do: [:edge | each ~= edge to ifTrue: [(incoming at: edge to ifAbsentPut: [Set new]) add: each]]]. ^(allStates asOrderedCollection select: [:each | self = each or: [each isTerminalNode not and: [(incoming at: each ifAbsent: [#()]) size > 1 or: [each needsSeparateMethod]]]]) asSortedCollection: [:a :b | a id < b id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83636491! transitions ^transitions! ! !SmaCCNode methodsFor: 'private' stamp: 'lr 1/6/2007 22:08' prior: 83636581! transitions: aCollection transitions reset. transitions addAll: aCollection! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19' prior: 83636722! writeMatchingCodeOn: aStream usingSelectorMap: aDictionary | matchedItem | (action notNil and: [action size > 0]) ifTrue: [matchedItem := aDictionary at: action first ifAbsent: [action asArray]. aStream nextPutAll: (transitions isEmpty ifTrue: ['^self recordAndReportMatch:'] ifFalse: ['self recordMatch: ']). matchedItem isSymbol ifTrue: [aStream nextPutAll: matchedItem storeString] ifFalse: [aStream nextPutAll: '#('. matchedItem do: [:each | aStream nextPutAll: each storeString] separatedBy: [aStream nextPut: $ ]. aStream nextPut: $)]. aStream nextPut: $.; cr]. (transitions anySatisfy: [:each | each isCharacterTransition]) ifTrue: [aStream nextPutAll: 'self step.'; cr]! ! Object subclass: #SmaCCParserGenerator instanceVariableNames: 'tabList parserClassMorph scannerClassMorph findScannerClassButton findParserClassButton conflicts generateDefinitionComments generateSymbolComments generateItemSetComments ignoreCase mainWindow parserCodeHolder scannerCodeHolder testCodeHolder tutorialTextHolder conflictTextMorph' classVariableNames: 'ShowPrecedenceConflicts' poolDictionaries: '' category: 'SmaCCDev-UI'! !SmaCCParserGenerator commentStamp: 'jmb 1/23/2003 15:59' prior: 83637565! SmaCC: The Smalltalk Compiler-Compiler from John Brant and Don Roberts (http://www.refactory.com/Software/SmaCC) Tutorial This is a walk-through tutorial to demonstrate many of the features of SmaCC, the Smalltalk Compiler Compiler. In this example, we will incrementally develop a simple calculator. Our first calculator is going to be relatively simple. It is going to take two numbers and add them together. To start things off, we have to tell the scanner how to recognize a number. It starts with one or more digits, possibly followed by an decimal point with zero or more digits after it. The scanner definition for this token is: : [0-9]+ (\. [0-9]*) ? ; Enter that line into the scanner tab on the interface. Let's go over each part: Names the token. The name inside the <> must be a legal Smalltalk variable name. : Separates the name of the token from the token's definition. [0-9] Matches any single character in the range '0' to '9' (a digit). + Matches the previous expression one or more times. In this case, we are matching one or more digits. ( ... ) Groups subexpressions. \. Matches the '.' character (. has a special meaning in regular expressions, \ quotes it). * Matches the previous expression zero or more times. ? Matches the previous expression zero or one time (i.e., it is optional). ; Terminates a token specification. We don't want to have to worry about whitespace in our language, so we need to define what a whitespace is and to ignore it. To do this, enter the following token specification on the next line on the scanner page: : \s+; \s matches any whitespace character (space, tab, linefeed, etc.). So how do we tell the scanner to ignore it? If you look in the SmaCCScanner class, you will find a method named 'whitespace'. If a scanner understands a method that has the same name as a token name, that method will get called whenever the scanner matches that kind of token. As you can see, the whitespace method eats whitespace. There is also a 'comment' method that behaves similarly. The only other token that will appear in our system would be the '+' token for addition. However, since this is token is always the same, we don't have to tell the scanner what it looks like. It will figure it out from our grammar. Speaking of our grammar, let's go ahead and define it. Enter the following specification in the Parser tab: Expression : Expression "+" Number | Number ; Number : ; This basically says that an expressions is either a number or an expression added to a number. We should be able to compile a parser now. Switch to the Compile tab. You need to enter the class name for both the scanner and parser. Use CalculatorScanner and CalculatorParser respectively. Once the class names are entered, we are ready to compile the parser. Press the 'Compile LALR(1)' button (you should always push this one unless you know what you are doing. Basically, it will generate smaller parsers than the other option). This will create new Smalltalk classes for the CalculatorScanner and CalculatorParser and compile several methods in those classes. All methods that SmaCC compiles will go into a "generated-*" method protocol. You should not change those methods since they are replace each time you compile. Whenever SmaCC creates new classes, they are compiled in the default application/package. If you are using VisualAge, you will need to make sure that the default application is an open edition and that it prereqs the SmaCCRuntime application. If you have already created the scanner and parser classes, you can load their definitions by using the "..." buttons next to the class name entry fields. If you answer "Yes" to the dialog, the text in the scanner/parser tabs will be replaced with the definition that was last compiled (assuming that the "Generate definition comments" was checked during the last compile). Now we are ready to test our parser. Go to the “test” pane, enter “3 + 4”, and press the “parse” button; you will see that the parser correctly parses it. If you press “Parse and Inspect” you will see and inspector on an OrderedCollection that contains the parsed tokens. This is because we haven't specified what the parser is supposed to do when it parses. You can also enter incorrect items. For example, try to parse "3 + + 4" or "3 + a". An error message should appear in the text. Now we need to define the actions that need to happen when we parse our expressions. Currently, our parser is just validating that the expression is a bunch of numbers added together. Generally, you will create some structure that represents what you've parsed (e.g., a parse tree). However, in this case, we are not concerned about the structure, but we are concerned about the result (the value of the expression). For our example, you need to modify the grammar definition to be: Expression : Expression "+" Number {'1' + '3'} | Number {'1'} ; Number : {'1' value asNumber} ; The text between the braces is Smalltalk code that gets evaluated when the rule is applied. Strings with a number get replaced with the corresponding parse node. In the first Expression rule, the '1' will get replaced by the ParseNode that matches Expression and the '3' gets replaced by the ParseNode that matches Number. The second item in the rule is the "+" token. Since we already know what it is, it is not interesting. Compile the new parser. Now when you do a 'Parse and Inspect' from the test pane, you should see the result: 7. One problem with the previous code is that if you need to change a rule then you may also need to change the code for that rule. For example, suppose you inserted a new token at the beginning of a rule, then you would need to change all of your references in the Smalltalk code. We can alleviate this problem by using named expressions. After each part of a rule, we can specify its name. Names are specified with single quotes and must be legal Smalltalk variable names. Doing this for our grammar we get: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Number 'number' {number} ; Number : 'numberToken' {numberToken value asNumber} ; While this will result in the same language being parsed, it makes it easier to maintain your parsers. Let's extend our language to add subtraction. Here's the new grammar: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; After you've compiled this, '3 + 4 - 2 ' should return '5'. Next, let's add multiplication and division: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Expression 'expression' "*" Number 'number' {expression * number} | Expression 'expression' "/" Number 'number' {expression / number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Here we run into a problem. If you evaluate '2 + 3 * 4' you end up with 20. The problem is that in standard mathematics, multiplication has a higher precedence than addition. Our grammar evaluates strictly left-to-right. The standard solution for this problem is to define additional nonterminals to force the sequence of evaluation. Our grammar with that solution would look like: Expression : Term 'term' {term} | Expression 'expression' "+" Term 'term' {expression + term} | Expression 'expression' "-" Term 'term' {expression - term}; Term : Number 'number' {number} | Term 'term' "*" Number 'number' {term * number} | Term 'term' "/" Number 'number' {term / number}; Number : 'numberToken' {numberToken value asNumber}; If you compile this grammar, you will see that '2 + 3 * 4' evaluates to 14 like we would expect. Now, as you can imagine, this gets pretty complicated as the number of precedence rules increases (e.g., C). We can use ambiguous grammars and precedence rules to simplify this situation. Here is the same grammar using precedence to enforce our evaluation order: %left "+" "-"; %left "*" "/"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Notice that we changed the grammar so that there are Expressions on both sides of the operator. The two lines that we added to the top of the grammar mean that “+” and “-” are evaluated left-to-right and have the same precedence, which is lower than “*” and “/”. Likewise, the second line means that “*” and “/” have equal precedence. Grammars in this form are usually much more intuitive, especially in cases with many precedence levels. Just as an example, let's add exponentiation and parentheses: %left "+" "-"; %left "*" "/"; %right "^"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Expression 'exp1' "^" Expression 'exp2' {exp1 raisedTo: exp2} | "(" Expression 'expression' ")" {expression} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Once you have compiled the grammar, you will be able to evaluate '3 + 4 * 5 ^ 2 ^ 2' to get 2503. Since the exponent operator is right associative, this expression is evaluated like 3 + (4 * (5 ^ (2 ^ 2))). We can also evaluate expressions with parentheses. For example, evaluating '(3 + 4) * (5 - 2) ^ 3' results in 189. The Scanner Scanning takes an input stream of characters and converts that into a stream of tokens. The tokens are then passed on to the parsing phase. The scanner is specified by a collection of token specifications. Each token is specified by: TokenName : RegularExpression ; TokenName is a valid Smalltalk variable name that is surrounded by <>. For example, "" is a valid TokenName, but "" is not since "token name" isn't a valid Smalltalk variable name. The RegularExpression is a regular expression that matches a token. It should match one or more characters in the input stream. The colon character, ":", is used to separate the TokenName and the RegularExpression, and the semicolon character, ";", is used to terminate the token specification. Regular Expression Syntax While the rules are specified as regular expressions, there are many different syntaxes for regular expressions. We choose a relatively simple syntax that is specified below. If you wish to have a more rich syntax, you can modify the scanner's parser: SmaCCScannerScanner & SmaCCScannerParser. These classes were created using SmaCC. \character Matches a special character. The character immediately following the backslash is matched exactly, unless it is a letter. Backslash-letter combinations have other meanings and are specified below. \cLetter Matches a control character. Control characters are the first 26 characters (e.g., \cA equals "Character value: 0"). The letter that follows the "\c" must be an uppercase letter. \d Matches a digit, 0-9. \D Matches anything that is not a digit. \f Matches a form-feed character, "Character value: 12". \n Matches a newline character, "Character value: 10". \r Matches a carriage return character, "Character value: 13". \s Matches any whitespace character, [ \f\n\r\t\v]. \S Matches any non-whitespace character. \t Matches a tab, "Character value: 9". \v Matches a vertical tab, "Character value: 11" \w Matches any letter, number or underscore, [A-Za-z0-9_]. \W Matches anything that is not a letter, number or underscore. \xHexNumber Matches a character specified by the hex number following the "\x". The hex number must be at least one character long and no more than four characters for Unicode characters and two characters for non-Unicode characters. For example, "\x20" matches the space character (Character value: 16r20), and "\x1FFF" matches "Character value: 16r1FFF". Copies the definition of into the current regular expression. For example, if we have " : \d | [A-F] ;", we can use in a later rule: " : + ;". [characters] Matches one of the characters inside the []. This is a shortcut for the "|" operator. In addition to single characters, you can also specify character ranges with the "-" character. For example, "[a-z]" matches any lower case letter. [^characters] Matches any character not listed in the characters block. "[^a]" matches anything except for "a". # comment Creates a comment that is ignored by SmaCC. Everything from the # to the end of the line is ignored. exp1| exp2 Matches either exp1 or exp2. exp1 exp2 Matches exp1 followed by exp2. "\d \d" matches two digits. exp* Matches exp zero or more times. "0*" matches "" and "000". exp? Matches exp zero or one time. "0?" matches only "" or "0". exp+ Matches exp one or more times. "0+" matches "0" and "000", but not "". exp{min,max} Matches exp at least min times but no more than max times. "0{1,2}" matches only "0" or "00". It does not match "" or "000". (exp) Groups exp for precedence. For example, "(a b)*" matches "ababab". Without the parentheses, "a b *" would match "abbbb" but not "ababab". Since there are multiple ways to combine expressions, we need precedence rules for their combination. The or operator, "|", has the lowest precedence and the "*", "?", "+", and "{,}" operators have the highest precedence. For example, "a | b c *" matches "a" or "bcccc", but not "accc" or "bcbcbc". If you wish to match "a" or "b" followed by any number of c's, you need to use "(a | b) c *". Overlapping Tokens Unlike T-Gen, SmaCC can handle overlapping tokens with any problems. For example, the following is a legal SmaCC scanner definition: : [a-zA-Z] \w* ; : . ; This definition will match a variable or a single character. A variable can also be a single character [a-zA-Z], so the two tokens overlap. SmaCC handles overlapping characters by preferring the first token specified by the grammar. For example, an "a" could be a or an token, but since is specified first, SmaCC will use it. Matching Methods If your scanner has a method name that matches the name of the token, (e.g. whitespace), that method will get called upon a match of that type. The SmaCCScanner superclass already has a default implementation of #whitespace and #comment. These methods ignore those tokens by default. Matching methods can also be used to handle overlapping token classes. For example, in the C grammar, a type definition is the same as an identifier. The only way that they can be disambiguated is by looking up the name in the type table. In our example C parser, we have an IDENTIFIER method that is used to determine whether the token is really an IDENTIFIER or whether it is a TYPE_NAME. Unreferenced Tokens If a token is not referenced from a grammar specification, it will not be included in the generated scanner, unless the token's name is also a name of a method (see previous section). This, coupled with the ability to do substitutions, allows you to have the equivalent of macros within your scanner specification. However, be aware that if you are simply trying to generate a scanner, you will have to make sure that you create a dummy parser specification that references all of the tokens that you want in the final scanner. Case Insensitive Scanning You can specify that the scanner should ignore case differences by checking the "Ignore Case" option on the compile tab. If you have a language that is case insensitive and has several keywords, this can be a handy feature to have. For example, if you have "THEN" as a keyword in a case insensitive language, you would need to specify a token for then as " : [tT] [hH] [eE] [nN] ;". This is a pain to enter correctly. When the ignore case option is checked, SmaCC will automatically convert "THEN" into "[tT][hH][eE][nN]". Unicode Characters SmaCC compiles the scanner into a bunch of conditional tests on characters. Normally, it assumes that characters have values between 0 and 255, and it can make some optimizations based on this fact. With the "Allow Unicode Characters" option checked, it will assume that characters have values between 0 and 65535. The Parser Parsing converts the stream of tokens provided by the scanner into some object. Normally, this object will be a parse tree, but it does not have to be a parse tree. For example, the SmaCC tutorial shows a calculator. This calculator does not produce a parse tree; it produces the result, a number. In SmaCC the parser is defined by the grammar specification entered in the 'Parser' tab. The grammar specification has two parts, an optional directives section and the production rules. The directives section is used to tell SmaCC how to handle ambiguous grammars as well as how it should generate the code for the parser. The production rules section contains the grammar for the parser and the code that executes when a production rule is matched. Directives The optional directives section consists of a set of directives. The system currently has 5 directives. Each directive begins with a "%" character and the directive keyword, then lists a set of symbols, and finally ends with the semicolon character, ";". Ambiguous Grammars and Precedence SmaCC can handle ambiguous grammars. Given an ambiguous grammar, SmaCC will produce some parser. However, it may not parse correctly. For an LR parser, there are two basic types of ambiguities, reduce/reduce conflicts and shift/reduce conflicts. Reduce/reduce conflicts are bad. SmaCC has no directives to handle them and just picks one of the choices. These conflicts normally require a rewrite of your grammar. On the other hand, shift/reduce conflicts can be handled by SmaCC without rewriting your grammar. When SmaCC encounters a shift/reduce conflict it will perform the shift action by default. However, you can control this action with the "%left", "%right", and "%nonassoc" directives. If a token has been declared in a "%left" directive, it means that the token is left-associative. Therefore, the parser will perform a reduce operation. However, if it has been declared as right-associative, it will perform a shift operation. A token defined as %nonassoc will produce an error if that is encountered during parsing. For example, you may want to specify that the equal operator, "=", is non-associative, so "a = b = c" is not parsed as a valid expression. All three directives are followed by a list of tokens. Additionally, the %left, %right, and %nonassoc directives allow precedence to be specified. The order of the directives specifies the precedence of the tokens. The higher precedence tokens appear on the higher line numbers. For example, the following directive section gives the precedence for the simple calculator in our tutorial: %left "+" "-"; %left "*" "/"; %right "^"; The "+" and "-" symbols appear on the first line and have the lowest precedence. They are also left-associative so "1 + 2 +3" will be evaluated as "(1 + 2) + 3". On the next line are the "*" and "/" symbols. Since they appear on a higher line number, they have higher precedence than the "+" and "-". Finally, on line three we have the "^" symbol. It has the highest precedence. Combining all the rules allows us to parse "1 + 2 * 3 / 4 ^ 2 ^ 3" as "1 + ((2 * 3) / (4 ^ (2 ^ 3)))". Start Symbols By default, the left-hand side of the first grammar rule is the start symbol. If you want to multiple start symbols, then you can specify them by using the "%start" directive followed by the nonterminals that are additional start symbols. This is useful for creating two parsers with two grammars that are similar but slightly different. For example, consider a Smalltalk parser. You can parse methods, and you can parse expressions. These are two different operations, but have very similar grammars. Instead of creating two different parsers for parsing methods and expressions, we can specify one grammar that parses methods and also specify another starting position for parsing expressions. The StParser in the SmaCC Example Parsers package has an example of this. The StParser class>>parseMethod: uses the #startingStateForMethod position to parse methods and the StParser class>>parseExpression: uses the #startingStateForSequenceNode position to parse expressions. Id Methods Internally, the various token types are represented as integers. However, there are times that you need to reference the various token types. For example, in the CScanner and CParser classes, the TYPE_NAME token is identical to the IDENTIFIER token. The IDENTIFIER matching method does a lookup in the type table and if it finds a type definition with the same name as the current IDENTIFIER, it want to return the TYPE_NAME token type. To determine what integer this is, the parser was created with an %id directive for and . This generates the IDENTIFIERId and TYPE_NAMEId methods on the scanner. These methods simply return the number representing that token type. See the C sample scanner and parser for a good example of how this is used. Production Rules The production rules contains the grammar for the parser. The first production rule is considered to be the starting rule for the parser. Each production rule consists of a non-terminal symbol name followed by a ":" separator which is followed by a list of possible productions separated by vertical bar, "|", and finally terminated by a semicolon, ";". Each production consists of a sequence of non-terminal symbols, tokens, or keywords followed by some optional Smalltalk code enclosed in curly brackets, {}. Non-terminal symbols are valid Smalltalk variable names and must be defined somewhere in the parser definition. Forward references are valid. Tokens are enclosed in angle brackets as they are defined in the scanner (e.g., ) and keywords are enclosed in double-quotes (e.g., "then"). Keywords that contain double-quotes need to have two double-quotes per each double-quote in the keyword. For example, if you need a keyword for one double-quote character, you would need to enter """" (four double-quote characters). The Smalltalk code is evaluated whenever that production is matched. If the code is a zero or a one argument symbol, then that method is performed. For a one argument symbol, the argument is an OrderedCollection that contains one element for each item in the production. If the code isn't a zero or one argument symbol, then the code is executed and whatever is returned by the code is the result of the production. If no Smalltalk code is specified, then the default action is to execute the #reduceFor: method. This method converts all items into an OrderedCollection. If one of the items is another OrderedCollection, then all of its elements are added to the new collection. Inside the Smalltalk code you can refer to the values of each production item by using literal strings. The literal string, '1', refers the to value of the first production item. The values for tokens and keywords will be SmaCCToken objects. The value for all non-terminal symbols will be whatever the Smalltalk code evaluates to for that non-terminal symbol. Named Symbols When entering the Smalltalk code, you can get the value for a symbol by using the literal strings (e.g., '2'). However, this creates difficulties when modifying a grammar. If you insert some symbol at the beginning of a production, then you will need to modify your Smalltalk code changing all literal string numbers. Instead you can name each symbol in the production and then refer to the name in the Smalltalk code. To name a symbol (non-terminal, token, or keyword), you need to add a quoted variable name after the symbol in the grammar. For example, "MySymbol : Expression 'expr' "+" 'num' {expr + num} ;" creates two named variables. One for the non-terminal Expression and one for the token. These variables are then used in the Smalltalk code. Extended Syntax SmaCC also has some extended syntax that makes it easier to enter different grammars. Most of the additions are for the productions, but one change that is not for productions is the addition of "::=" as the separator between the non-terminal and the production. The production syntax enhancements are listed in the following table: Symbol ? Makes symbol optional. It is equivalent to defining a new production rule: "Optional_Symbol : Symbol {'1'} | {nil};". Symbol * or Symbol + Makes a repeating symbol. The "*" repeats zero or more times, and the "+" repeats one or more times. It is equivalent to defining a new production rule: "Repeat_Symbol : | Symbol;" for "*" and "Repeat_Symbol : Symbol | Repeat_Symbol Symbol ;" for "+". ( Productions ) Groups the items in Productions. By itself it is not that useful, but it can be combined with the "?", "*", or "+". It is equivalent to defining "Group_Productions : Productions ;". [ Productions ] Equivalent to "( Productions ) ?". <% Productions %> Equivalent to "( Productions ) *" Parser Comments The compile page has three options to generate comments. You should always select the "Generate definition comments". That saves the scanner and parser definition strings into the scanner and parser classes. It allows your grammar to be under the same version control system as your Smalltalk code. The other two comment options should not be needed unless you need to debug a parser generated. The "generate symbol comments" option will generate a comment that explains what each symbol is mapped to. When SmaCC compiles a grammar it converts all symbols into integers. This comment gives you the integer for each symbol. You may need this information if you have an incorrect scanner definition. For example, you may have overlapping token definitions and SmaCC is picking the wrong one (by default it picks the first one in your scanner definition). When you debug, you can inspect the SmaCCToken object and validate its "id" with those in the symbol comment. If they are different, then you have a bug in your scanner. Finally, the "generate item set comments" option should rarely be needed. It generates a listing of all LR(1) item sets in the parser. If you are familiar with LR parsing, then it might be interesting to look at. However, for a moderate sized grammar (e.g., Java), this comment can be a few MB in size. I would not recommend generating such comments when using ENVY -- you don't want to store a 10MB method in your library. For the calculator example in the tutorial, this comment is 9,000 characters long. Error Recovery Normally, when the parser encounters an error, it raises the SmaCCParserError exception and parsing is immediately stopped. However, there are times when you may wish to try to parse more of the input. For example, if you are highlighting code, you do not want to stop highlighting at the first syntax error. Instead you may wish to attempt to recover after the statement separator -- the period ".". SmaCC uses the error symbol to specify where error recovery should be attempted. For example, we may have the following rule to specify a list of Smalltalk statements: Statements : Expression | Statements "." Expression ; If we wish to attempt recovery from a syntax error when we encounter a period, we can change our rule to be: Statements : Expression | Statements "." Expression | error "." Expression ; While the error recovery allows you to proceed parsing after a syntax error, it will not allow you to return a parse tree from the input. Once the input has been parsed with errors, it will raise a non-resumable SmaCCParserError. ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:19' prior: 83666198! initialize ShowPrecedenceConflicts:=false. " (TheWorldMenu respondsTo: #registerOpenCommand:) ifTrue: [ TheWorldMenu unregisterOpenCommand: 'SmaCC'. TheWorldMenu registerOpenCommand: {'SmaCC Generator'. {self. #open}}] "! ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:21' prior: 83666529! menuCommandOn: aBuilder (aBuilder item: #'SmaCC Parser Generator') parent: #Tools; action: [ self open ]; help: 'Create and test parsers with SmaCC'.! ! !SmaCCParserGenerator class methodsFor: 'instance creation' stamp: 'lr 11/25/2009 18:03' prior: 83666798! open ^ self new openInWorld! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:12' prior: 83666914! acceptParserCode: aStringOrAText notifying: aRequestor | scannerText | scannerText := self scannerCodeHolder contentsMorph text. ^ [SmaCCGrammarCompiler new buildScanner: scannerText andParser: aStringOrAText. true] on: SmaCCParserError do: [:ex | self tabList selectedPageIndex: 2. self displayError: ex description at: ex tag position notifying: aRequestor. ex return: false]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 11/25/2009 18:27' prior: 83667401! acceptScannerCode: aStringOrAText notifying: aRequestor SmaCCScannerParser parse: aStringOrAText onError: [:aString :position | | morph | self tabList selectedPageIndex: 1. self displayError: aString at: position notifying: aRequestor. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:13' prior: 83667774! acceptTestCode: aStringOrAText notifying: aRequestor | class | class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false]. ^ self parse! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:16' prior: 83668052! addButtonsToTestPage: aTestPage | aParserButton aParserInspectButton aParserExploreButton | aParserButton := PluggableButtonMorph on: self getState: nil action: #parse. aParserButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse'. aParserInspectButton := PluggableButtonMorph on: self getState: nil action: #parseAndInspect. aParserInspectButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and inspect'. aParserExploreButton := PluggableButtonMorph on: self getState: nil action: #parseAndExplore. aParserExploreButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and explore'. aTestPage addMorph: aParserButton fullFrame: (LayoutFrame fractions: (0 @ 1 corner: 0.33 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserInspectButton fullFrame: (LayoutFrame fractions: (0.33 @ 1 corner: 0.66 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserExploreButton fullFrame: (LayoutFrame fractions: (0.66 @ 1 corner: 1 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:18' prior: 83669264! addCheckBoxesToCompilePage: aCompilePage #((toggleIgnoreCase ignoreCase 'Ignore Case') (toggleGenerateDefinitionComments generateDefinitionComments 'Generate definition comments') (toggleGenerateSymbolComments generateSymbolComments 'Generate symbol comments') (toggleGenerateItemSetComments generateItemSetComments 'Generate item set comments')) withIndexDo: [ :each :index | | checkbox | checkbox := self theme newCheckboxIn: World for: self getSelected: each second setSelected: each first getEnabled: nil label: each third help: nil. checkbox position: 10 @ 35 + (index * (0 @ 20)). aCompilePage addMorph: checkbox ]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:30' prior: 83670024! addClassSelectorsToCompilePage: aCompilePage | aScannerLabel aParserLabel | aScannerLabel := 'Scanner class:' asMorph position: 10 @ 10. aParserLabel := 'Parser class:' asMorph position: 10 @ 30. findScannerClassButton := PluggableButtonMorph on: self getState: nil action: #findScannerClass. findScannerClassButton label: ' ... '; position: 410 @ 6. findParserClassButton := PluggableButtonMorph on: self getState: nil action: #findParserClass. findParserClassButton label: ' ... '; position: 410 @ 26. scannerClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 8. scannerClassMorph on: #keyStroke send: #updateWindowLabel to: self. scannerClassMorph addDependent: self. parserClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 28. parserClassMorph on: #keyStroke send: #updateWindowLabel to: self. parserClassMorph addDependent: self. {aScannerLabel. aParserLabel. scannerClassMorph. parserClassMorph. findScannerClassButton. findParserClassButton} do: [:e | aCompilePage addMorph: e]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 23:21' prior: 83671224! addCompileButtonsToCompilePage: aCompilePage | aLALRButton aLR1Button | aLALRButton := PluggableButtonMorph on: self getState: nil action: #compileLALR1. aLALRButton label: 'Compile LALR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 10 @ 140. aCompilePage addMorph: aLALRButton. aLR1Button := PluggableButtonMorph on: self getState: nil action: #compileLR1. aLR1Button label: 'Compile LR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 150 @ 140. aCompilePage addMorph: aLR1Button! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'apl 2/20/2003 16:23' prior: 83671940! addMessageBoxToCompilePage: aCompilePage aCompilePage addMorph: ('Messages:' asMorph position: 10 @ 180; yourself). self conflictTextMorph: (PluggableTextMorph on: self text: #conflicts accept: nil readSelection: nil menu: nil). aCompilePage addMorph: (self conflictTextMorph) fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (10 @ 200 corner: -10 @ -10))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:15' prior: 83672440! addTextToTestPage: aTestPage | aTestText | testCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptTestCode:notifying:. aTestText := testCodeHolder contentsMorph. aTestText hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. aTestPage addMorph: aTestText fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ -25))! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:14' prior: 83672935! choose: aString from: aCollection | choice | choice := UIManager default chooseFrom: aCollection title: aString withCRs. choice > 0 ifTrue: [^ aCollection at: choice]. ^ nil! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:31' prior: 83765915! compile: aSymbol | grammar stream oldIgnoreCase oldCharacterSize parserCompiler | (self scannerClassString isEmpty or: [self parserClassString isEmpty]) ifTrue: [^ UIManager default inform: 'Both classes are not specified']. Cursor read showWhile: [self verifySyntax ifFalse: [^ self]]. Cursor wait showWhile: [oldIgnoreCase := SmaCCGrammar ignoreCase. oldCharacterSize := SmaCCGrammar maximumCharacterValue. [SmaCCGrammar ignoreCase: self ignoreCase; maximumCharacterValue: 255. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self scannerText andParser: self parserText; scannerClass: self scannerClassString; parserClass: self parserClassString. grammar := parserCompiler grammar. grammar type: aSymbol. stream := WriteStream on: Text new. [parserCompiler createChanges. self generateDefinitionComments ifTrue: [parserCompiler compileDefinitionComments]. self generateSymbolComments ifTrue: [parserCompiler compileSymbolComment]. self generateItemSetComments ifTrue: [parserCompiler compileItemSetsComment]. parserCompiler compileChanges] on: SmaCCCompilationNotification do: [:ex | (ShowPrecedenceConflicts or: [('*precedence*' match: ex messageText) not]) ifTrue: [stream nextPutAll: '-------------------------\' withCRs asText , ex messageText asText allBold; cr; cr; nextPutAll: ex description; cr; nextPutAll: ex tag; cr; cr.]. ex pass]. self conflicts: stream contents. self testText string trimBoth notEmpty ifTrue: [self testCodeHolder hasUnacceptedEdits: true]] ensure: [SmaCCGrammar ignoreCase: oldIgnoreCase; maximumCharacterValue: oldCharacterSize]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 2/15/2003 12:55' prior: 83675055! compileLALR1 self compile: #LALR1! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/18/2003 14:41' prior: 83675169! compileLR1 self compile: #LR1! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22' prior: 83675279! conflictTextMorph ^conflictTextMorph! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22' prior: 83675396! conflictTextMorph: anObject conflictTextMorph := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:00' prior: 83675534! conflicts conflicts isNil ifTrue: [conflicts:=String new]. ^conflicts! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:35' prior: 83675685! conflicts: aString conflicts := aString. self changed: #conflicts! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 08:57' prior: 83675841! createCompilePage | aCompilePage | aCompilePage := (Morph new) layoutPolicy: ProportionalLayout new; hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. self tabList addPage: (self tabList newContentMorph addMorph: aCompilePage; yourself) label: 'Compile'. self addClassSelectorsToCompilePage: aCompilePage; addCompileButtonsToCompilePage: aCompilePage; addCheckBoxesToCompilePage: aCompilePage; addMessageBoxToCompilePage: aCompilePage! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50' prior: 83676427! createParserPage | aParserPage | parserCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptParserCode:notifying:. aParserPage := parserCodeHolder contentsMorph. aParserPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aParserPage; yourself) label: 'Parser'.! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50' prior: 83676880! createScannerPage | aScannerPage | scannerCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptScannerCode:notifying:. aScannerPage := scannerCodeHolder contentsMorph. aScannerPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aScannerPage; yourself) label: 'Scanner'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:13' prior: 83677342! createTabbedPalette self tabList: (self theme newTabGroupIn: World for: #()). self mainWindow addMorph: self tabList frame: (0 @ 0 corner: 1 @ 1)! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:52' prior: 83677582! createTestPage | aTestPage | aTestPage := (Morph new) hResizing: #spaceFill; vResizing: #spaceFill; layoutPolicy: ProportionalLayout new; color: Color transparent; yourself. self addTextToTestPage: aTestPage. self addButtonsToTestPage: aTestPage. self tabList addPage: (self tabList newContentMorph addMorph: aTestPage; yourself) label: 'Test'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:49' prior: 83678052! createTutorialPage | aTutorialPage | tutorialTextHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: nil. aTutorialPage := tutorialTextHolder contentsMorph. tutorialTextHolder acceptContents: self tutorialText. tutorialTextHolder changed: #contents. aTutorialPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aTutorialPage; yourself) label: 'Tutorial'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 1/8/2007 23:12' prior: 83678576! defaultBackgroundColor ^ Color tan! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/20/2003 18:20' prior: 83678689! defaultWindowLabelPrefix ^ 'SmaCCParserGenerator'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 20:22' prior: 83678817! displayError: aString at: position notifying: aRequestor aRequestor selectFrom: position to: position - 1. aRequestor replaceSelectionWith: (Text string: aString , '->' attribute: TextEmphasis bold). aRequestor setSelection: (position to: position + aString size + 1)! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28' prior: 83679180! findParserClass | className class text | self scannerClassString isEmpty ifTrue: [^ UIManager default inform: 'Undefined scanner class']. className := self choose: 'What class do you want to use?' from: (SmaCCParser allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [parserClassMorph hResizing: #rigid. parserClassMorph newContents: ''; newContents: className. parserClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #parserDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #parserDefinitionComment). self parserText: text]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28' prior: 83679969! findScannerClass | className class text | className := self choose: 'What class do you want to use?' from: (SmaCCScanner allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [scannerClassMorph newContents: ''; newContents: className. scannerClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #scannerDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #scannerDefinitionComment). self scannerText: text]]! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27' prior: 83680620! generateDefinitionComments generateDefinitionComments isNil ifTrue: [generateDefinitionComments:=true]. ^generateDefinitionComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27' prior: 83680833! generateItemSetComments generateItemSetComments isNil ifTrue: [generateItemSetComments:=false]. ^generateItemSetComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27' prior: 83681035! generateSymbolComments generateSymbolComments isNil ifTrue: [generateSymbolComments:=false]. ^generateSymbolComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:26' prior: 83681233! ignoreCase ignoreCase isNil ifTrue: [ignoreCase:=false]. ^ignoreCase! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 11/25/2009 18:18' prior: 83681381! initialExtent ^ 750 @ 650! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16' prior: 83681496! initialize mainWindow := StandardWindow labelled: self defaultWindowLabelPrefix. mainWindow model: self. self createTabbedPalette. self createScannerPage. self createParserPage. self createCompilePage. self createTestPage. self createTutorialPage. self updateWindowLabel. self tabList selectedPageIndex: 3! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 2/15/2003 12:58' prior: 83681891! mainWindow ^mainWindow! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16' prior: 83682005! openInWorld self mainWindow openInWorld! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 09:47' prior: 83682125! paneColorToUse ^Color blue muchLighter! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 15:52' prior: 83682252! parse self parseAndEvaluate: [:each | ^ true]. ^ false! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28' prior: 83682398! parseAndEvaluate: aBlock | class | self testCodeHolder acceptContents: self testText. self testCodeHolder changed: #contents. class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false] ifFalse: [Cursor wait showWhile: [aBlock value: (class parse: self testText onError: [:aString :position | self displayError: aString at: position notifying: self testCodeHolder contentsMorph. self testCodeHolder hasUnacceptedEdits: true. ^ false])]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'md 4/3/2003 14:03' prior: 83683038! parseAndExplore ^self parseAndEvaluate: [:each | each explore] ! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/18/2003 20:01' prior: 83683183! parseAndInspect ^self parseAndEvaluate: [:each | each inspect] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:47' prior: 83683330! parserClass | classname | classname := self parserClassString asSymbol. ^classname notEmpty ifTrue: [Smalltalk at: classname] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:21' prior: 83683539! parserClassString ^parserClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43' prior: 83683671! parserCodeHolder ^parserCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43' prior: 83683786! parserCodeHolder: anObject parserCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:53' prior: 83683922! parserText ^ self parserCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:25' prior: 83684046! parserText: text self parserCodeHolder contents: text. self parserCodeHolder contentsMorph setText: text. ! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'mga 1/18/2003 14:42' prior: 83684233! removeCommentedPartOf: aString | inStream outStream | inStream := ReadStream on: aString. outStream := WriteStream on: String new. inStream upTo: $". [inStream atEnd] whileFalse: [(inStream peekFor: $") ifTrue: [outStream nextPut: $"]. outStream nextPutAll: (inStream upTo: $")]. ^ outStream contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:20' prior: 83684633! scannerClassString ^scannerClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22' prior: 83684767! scannerCodeHolder ^scannerCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22' prior: 83684884! scannerCodeHolder: anObject scannerCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/19/2003 09:55' prior: 83685022! scannerText ^ self scannerCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:43' prior: 83685148! scannerText: text self scannerCodeHolder contents: text. self scannerCodeHolder contentsMorph setText: text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:32' prior: 83685338! tabList ^tabList! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 13:40' prior: 83685435! tabList: anObject tabList := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39' prior: 83685553! testCodeHolder ^testCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39' prior: 83685664! testCodeHolder: anObject testCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 19:36' prior: 83685796! testText ^ self testCodeHolder contentsMorph text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:12' prior: 83685926! theme ^ UITheme current! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25' prior: 83686028! toggleGenerateDefinitionComments generateDefinitionComments:=self generateDefinitionComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28' prior: 83686203! toggleGenerateItemSetComments generateItemSetComments:=self generateItemSetComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28' prior: 83686369! toggleGenerateSymbolComments generateSymbolComments:=self generateSymbolComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25' prior: 83686532! toggleIgnoreCase ignoreCase:= self ignoreCase not! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 11:15' prior: 83686662! tutorialText ^self class comment! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/20/2003 18:14' prior: 83686773! update: anObjectOrASymbol (anObjectOrASymbol isKindOf: Symbol) ifTrue: [(self respondsTo: anObjectOrASymbol) ifTrue: [self perform: anObjectOrASymbol]]. super update: anObjectOrASymbol! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 1/8/2007 22:58' prior: 83687042! updateWindowLabel | scannerLabel parserLabel | scannerLabel := self scannerClassString isEmpty ifFalse: [self scannerClassString] ifTrue: ['Undefined']. parserLabel := self parserClassString isEmpty ifFalse: [self parserClassString] ifTrue: ['Undefined']. ^ self mainWindow setLabel: self defaultWindowLabelPrefix , ': ' , scannerLabel , '/' , parserLabel! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:30' prior: 83767793! verifyParser | parserCode | parserCode := self parserCodeHolder contentsMorph text. parserCode string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Parser code'. self tabList selectedPageIndex: 2. ^ false]. self parserCodeHolder hasUnacceptedEdits ifTrue: [(self acceptParserCode: parserCode notifying: self parserCodeHolder contentsMorph) ifTrue: [self parserCodeHolder acceptContents: parserCode. self parserCodeHolder changed: #contents] ifFalse: [^ false]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:29' prior: 83768407! verifyScanner | scannerText | scannerText := self scannerCodeHolder contentsMorph text. scannerText string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Scanner code'. self tabList selectedPageIndex: 1. ^ false]. self scannerCodeHolder hasUnacceptedEdits ifTrue: [(self acceptScannerCode: scannerText notifying: self scannerCodeHolder contentsMorph) ifTrue: [self scannerCodeHolder acceptContents: scannerText. self scannerCodeHolder changed: #contents. ^ true]. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 10:37' prior: 83688691! verifySyntax self verifyScanner ifFalse: [^ false]. self verifyParser ifFalse: [^false]. ^ true! ! Object subclass: #SmaCCRHS instanceVariableNames: 'collection reduceAction variableNames' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCRHS commentStamp: 'jmb' prior: 83688842! SmaCCRHS represents the right hand side of the production. Instance variables: collection the collection of symbols that represent the rhs grammar the grammar that the production is in variableNames the name of each symbol in the rhs. These names can be used in the {} code blocks.! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83689278! = aSmaCCRHS ^self class = aSmaCCRHS class and: [collection = aSmaCCRHS collection]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83689424! add: aSmaCCSymbol collection add: aSmaCCSymbol! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83689534! at: anInteger ^collection at: anInteger! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83689635! collection ^collection! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 1/7/2007 11:08' prior: 83689730! compileSourceFor: aSmaCCSymbol in: aClass | action rewriter parseTree methodName | action := self reduceAction. action isNil ifTrue: [^self defaultReduceAction]. parseTree := RBParser parseExpression: action onError: [:s :p | SmaCCCompilationNotification new tag: aSmaCCSymbol name , ' : ' , self printString , '\\' withCRs , action; signal: 'Invalid Smalltalk code in reduction rule'. ^self defaultReduceAction]. (parseTree isLiteral and: [parseTree value isSymbol and: [parseTree value numArgs <= 1 and: [aClass definesMethod: parseTree value]]]) ifTrue: [^parseTree value]. rewriter := self parseTreeRewriter. rewriter executeTree: parseTree. parseTree := rewriter tree. methodName := ('reduceActionFor' , aSmaCCSymbol safeMethodName , (aSmaCCSymbol positionOf: self) printString , ':') asSymbol. parseTree isSequence ifFalse: [parseTree := RBSequenceNode statements: (Array with: parseTree)]. parseTree := RBMethodNode selector: methodName arguments: (Array with: (RBVariableNode named: 'nodes')) body: parseTree. parseTree addReturn. aClass compile: parseTree formattedCode classified: 'generated-reduction actions'. ^methodName! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83691021! defaultReduceAction ^#reduceFor:! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83691116! do: aBlock collection do: aBlock! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83691211! firstTerminals | items | collection isEmpty ifTrue: [^Set with: SmaCCSymbol empty]. items := Set new. 1 to: collection size do: [:index | items addAll: (collection at: index) firstTerminals. (items includes: SmaCCSymbol empty) ifTrue: [index < collection size ifTrue: [items remove: SmaCCSymbol empty]] ifFalse: [^items]]. ^items! ! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19' prior: 83691629! hash ^self class hash bitXor: (collection hash bitShift: 14)! ! !SmaCCRHS methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83691761! initialize collection := OrderedCollection new. reduceAction := nil. variableNames := Dictionary new! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83691926! nameLastItem: aString variableNames at: aString put: collection size! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 11/25/2009 18:01' prior: 83692070! parseTreeRewriter | rewriter | rewriter := RBParseTreeRewriter new. 1 to: self size do: [:i | rewriter replace: i printString storeString with: '(nodes at: ' , i printString , ')']. variableNames keysAndValuesDo: [:key :value | rewriter replace: key with: '(nodes at: ' , value printString , ')']. ^rewriter! ! !SmaCCRHS methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83692465! printOn: aStream ^collection do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83692624! reduceAction ^reduceAction! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83692713! reduceAction: anObject reduceAction := anObject! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83692823! size ^collection size! ! Object subclass: #SmaCCRegularExpressionNode instanceVariableNames: 'action position states' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCRegularExpressionNode commentStamp: '' prior: 83692923! SmaCCRegularExpressionNode represents a regular expression. The scanner is represented by a regular expression. These are the initial objects created in producing the scanner. From these nodes, we create a directed graph and then we compile the graph. Subclasses must implement the following messages: accessing possibleMatchesSize private asNFAStartingWith: possibleMatchesDo:on: Instance Variables: action the actions to be performed when we find a match position the position of the RE in the scanner. If we have multiple matches, we prefer the ones listed first.! SmaCCRegularExpressionNode subclass: #SmaCCCharacterRENode instanceVariableNames: 'characters' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCCharacterRENode commentStamp: 'jmb' prior: 83693597! SmaCCCharacterRENode represents a regular expression that matches one of a set of characters. Instance Variables: characters The characters that this node can accept. Note that there are no duplicates and all characters are sorted. ! !SmaCCCharacterRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83693951! characters: aString ^(self new) characters: (self sortedCharactersFor: aString); yourself! ! !SmaCCCharacterRENode class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50' prior: 83694128! sortedCharactersFor: aString | characters stream | stream := WriteStream with: String new. SmaCCGrammar ignoreCase ifTrue: [aString do: [:each | stream nextPut: each asUppercase; nextPut: each asLowercase]] ifFalse: [stream nextPutAll: aString]. characters := stream contents asSortedCollection: [:a :b | a asInteger < b asInteger]. stream := WriteStream with: String new. characters inject: nil into: [:sum :each | sum = each ifFalse: [stream nextPut: each]. each]. ^stream contents! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83694742! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. startNode addEdgeTo: endNode onCharacters: characters. ^endNode! ! !SmaCCCharacterRENode methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83695039! canMergeWith: aSmaCCRegularExpressionNode ^self class = aSmaCCRegularExpressionNode class and: [characters notNil and: [aSmaCCRegularExpressionNode characters notNil and: [self action = aSmaCCRegularExpressionNode action]]]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83695353! characters ^characters! ! !SmaCCCharacterRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83695459! characters: aString characters := aString! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83695574! matchingCharacters ^SmaCCGrammar ignoreCase ifTrue: [characters reject: [:each | each isLowercase]] ifFalse: [characters]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83695773! possibleMatchesDo: aBlock on: aStream self matchingCharacters do: [:each | aStream nextPut: each. aBlock value. aStream skip: -1]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83695992! possibleMatchesSize ^self matchingCharacters size! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: 'lr 11/25/2009 18:29' prior: 83696121! printCharacter: aCharacter on: aStream (aCharacter asInteger between: 32 and: 126) ifTrue: [^aStream nextPut: aCharacter]. aStream nextPutAll: '\x'. aStream nextPutAll: (aCharacter asInteger printPaddedWith: $0 to: 2 base: 16)! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83696429! printOn: aStream | allCharacters | characters size = 1 ifTrue: [^self printCharacter: characters first on: aStream]. aStream nextPut: $[. allCharacters := characters. characters size > 128 ifTrue: [aStream nextPut: $^. allCharacters := ((0 to: SmaCCGrammar maximumCharacterValue) collect: [:each | Character value: each]) reject: [:each | characters includes: each]]. allCharacters do: [:each | self printCharacter: each on: aStream]. aStream nextPut: $]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83696993! | aSmaCCRegularExpressionNode (self canMergeWith: aSmaCCRegularExpressionNode) ifFalse: [^super | aSmaCCRegularExpressionNode]. characters := String withAll: ((characters , aSmaCCRegularExpressionNode characters) asSet asSortedCollection: [:a :b | a asInteger < b asInteger]). ^self! ! SmaCCRegularExpressionNode subclass: #SmaCCOrRENode instanceVariableNames: 'nodes' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCOrRENode commentStamp: 'jmb' prior: 83697350! SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative. Instance Variables: nodes our possible choices! !SmaCCOrRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83697599! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83697729! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. nodes do: [:each | | componentStart | componentStart := SmaCCNode new. startNode addEdgeTo: componentStart. (each asNFAStartingWith: componentStart) addEdgeTo: endNode]. ^endNode! ! !SmaCCOrRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83698162! nodes: aCollection nodes := aCollection! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83698268! possibleMatchesDo: aBlock on: aStream nodes do: [:each | | pos | pos := aStream position. each possibleMatchesDo: aBlock on: aStream. aStream position: pos]! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83698510! possibleMatchesSize ^nodes inject: 0 into: [:sum :each | sum + each possibleMatchesSize]! ! !SmaCCOrRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19' prior: 83698664! postCopy super postCopy. nodes := nodes copy! ! !SmaCCOrRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83698776! printOn: aStream aStream nextPut: $(. nodes do: [:each | each printOn: aStream] separatedBy: [aStream nextPutAll: ' | ']. aStream nextPut: $)! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83698990! | aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super | aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83699250! , aSmaCCRegularExpressionNode ^SmaCCSequenceRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83699466! action ^action! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83699570! action: aString action := aString! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83699684! addState: aSymbol states add: aSymbol! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83699800! addStateTransitionsTo: aSmaCCNode | endNode | states isEmpty ifTrue: [^aSmaCCNode]. endNode := SmaCCNode new. aSmaCCNode addEdgeTo: endNode onStates: states asSortedCollection asArray. ^endNode! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83700079! addStates: aCollection states addAll: aCollection! ! !SmaCCRegularExpressionNode methodsFor: 'converting' stamp: ' 6/1/07 21:19' prior: 83700211! asDFA | startNode | startNode := SmaCCNode new. self asNFAStartingWith: startNode. ^startNode asDFA! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83700392! asNFAStartingWith: aSmaCCNode ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83700541! initialize states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83700648! isKeywordLiteral ^self possibleMatchesSize < 50 and: [self possibleMatchesDo: [:each | each size > 1 ifTrue: [^true]]. false]! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83700861! position ^position! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83700960! position: anInteger position := anInteger! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83701082! possibleMatches | matches | matches := OrderedCollection new. self possibleMatchesDo: [:each | matches add: each]. ^matches! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83701289! possibleMatchesDo: aBlock | stream | stream := WriteStream with: String new. self possibleMatchesDo: [aBlock value: stream contents] on: stream! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83701514! possibleMatchesDo: aBlock on: aStream self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83701661! possibleMatchesSize ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'copying' stamp: ' 6/1/07 21:19' prior: 83701788! postCopy super postCopy. states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83701912! repeat ^SmaCCRepeatingRENode component: self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83702037! repeatFor: minimum to: maximum ^SmaCCRepeatingRENode component: self minimum: minimum maximum: maximum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83702228! repeatForAtLeast: minimum ^SmaCCRepeatingRENode component: self minimum: minimum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83702390! states ^states! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83702485! | aSmaCCRegularExpressionNode ^SmaCCOrRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! SmaCCRegularExpressionNode subclass: #SmaCCRepeatingRENode instanceVariableNames: 'node minimumMatches maximumMatches' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCRepeatingRENode commentStamp: 'jmb' prior: 83702669! SmaCCRepeatingRENode represents a repeating node in a regular expression. Instance Variables: maximumMatches the minimum number of matches required minimumMatches the maximum number of matches allowed. An infinite amount of matches is represented by (SmaCCRepeatingRENode finiteInfinity). node what we need to match! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83703123! component: aSmaCCRegularExpressionNode ^self component: aSmaCCRegularExpressionNode minimum: 0! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83703307! component: aSmaCCRegularExpressionNode minimum: anInteger ^self component: aSmaCCRegularExpressionNode minimum: anInteger maximum: self finiteInfinity! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83703554! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger ^(self new) component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger; yourself! ! !SmaCCRepeatingRENode class methodsFor: 'constants' stamp: ' 6/1/07 21:19' prior: 83703825! finiteInfinity "The number that we consider to be 'infinite'" ^2147483648! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83703973! asNFAStartingWith: aSmaCCNode | endNode start | start := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. minimumMatches timesRepeat: [start := node asNFAStartingWith: start]. start addEdgeTo: endNode. maximumMatches < self class finiteInfinity ifTrue: [maximumMatches - minimumMatches timesRepeat: [start := node asNFAStartingWith: start. start addEdgeTo: endNode]] ifFalse: [(node asNFAStartingWith: start) addEdgeTo: start]. ^endNode! ! !SmaCCRepeatingRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83704562! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger node := aSmaCCRegularExpressionNode. minimumMatches := minInteger. maximumMatches := maxInteger! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83704812! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 0! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83704987! possibleMatchesDo: aBlock on: aStream startingAt: anInteger (anInteger between: minimumMatches and: maximumMatches) ifTrue: [aBlock value]. anInteger < maximumMatches ifTrue: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCRepeatingRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83705386! possibleMatchesSize ^node possibleMatchesSize * (maximumMatches - minimumMatches + 1)! ! !SmaCCRepeatingRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83705545! printOn: aStream node printOn: aStream. maximumMatches = (1 bitShift: 31) ifTrue: [minimumMatches = 0 ifTrue: [^aStream nextPut: $*]. minimumMatches = 1 ifTrue: [^aStream nextPut: $+]. ^aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPutAll: ',}']. aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPut: $,; nextPutAll: maximumMatches printString; nextPut: $}! ! SmaCCRegularExpressionNode subclass: #SmaCCSequenceRENode instanceVariableNames: 'nodes' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCSequenceRENode commentStamp: 'jmb' prior: 83706037! SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together. Instance Variables: nodes our children nodes in left-to-right order! !SmaCCSequenceRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83706363! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83706501! , aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super , aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83706752! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. (nodes inject: startNode into: [:sum :each | each asNFAStartingWith: sum]) addEdgeTo: endNode. ^endNode! ! !SmaCCSequenceRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83707102! nodes: aCollection nodes := aCollection! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83707214! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 1! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83707388! possibleMatchesDo: aBlock on: aStream startingAt: anInteger | node | node := nodes at: anInteger. nodes size = anInteger ifTrue: [node possibleMatchesDo: aBlock on: aStream] ifFalse: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83707794! possibleMatchesSize ^nodes inject: 1 into: [:sum :each | sum * each possibleMatchesSize]! ! !SmaCCSequenceRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19' prior: 83707954! postCopy super postCopy. nodes := nodes copy! ! !SmaCCSequenceRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83708072! printOn: aStream nodes do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! Object subclass: #SmaCCScannerCompiler instanceVariableNames: 'grammar scannerClass scannerDefinitionString' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCScannerCompiler commentStamp: 'jmb' prior: 83708224! SmaCCScannerCompiler represents the compiler for the scanner part of the parser. Instance Variables: grammar the grammar that defines the scanner scannerClass the class to compile the scanner into scannerDefinitionString the string that defines the scanner! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:42' prior: 83708610! addActions self symbols keysAndValuesDo: [:index :each | each regularExpression ifNotNilDo: [:eachRegex | eachRegex action: index ]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83708842! addActionsFrom: aRegularExpression to: aKeywordMap at: states ^states do: [:state | state ~= aRegularExpression action ifTrue: [aRegularExpression possibleMatchesDo: [:string | (aKeywordMap at: state ifAbsentPut: [Dictionary new]) at: string put: aRegularExpression action]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83709258! addNormalSymbols grammar symbols: (self symbols asSortedCollection: self filePositionSortBlock)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83709439! addSpecialSymbols grammar tokens keysDo: [:each | (self scannerActionFor: each) notNil ifTrue: [grammar terminalSymbolNamed: each]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83709680! addSpecificREsWithoutActionsTo: aRegularExpression | dfa regex | regex := aRegularExpression. dfa := regex isNil ifTrue: [nil] ifFalse: [regex asDFA]. self specificRegularExpressionsDo: [:each | | actions | actions := dfa isNil ifTrue: [nil] ifFalse: [dfa actionForSpecificRegularExpression: each]. actions isNil ifTrue: [regex isNil ifTrue: [regex := each] ifFalse: [regex := regex | each]]]. ^regex! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83710214! combinedGeneralRegexes | combinedRegex | combinedRegex := nil. self generalRegularExpressionsDo: [:each | combinedRegex := combinedRegex isNil ifTrue: [each] ifFalse: [combinedRegex | each]]. ^combinedRegex! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83710527! compileEmptySymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'emptySymbolTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol empty) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83710908! compileErrorSymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'errorTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol error) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83711283! compileIgnoreCaseMethod SmaCCGrammar ignoreCase ifTrue: [scannerClass compile: 'keywordFor: aString ^aString asUppercase' classified: #'generated-scanner']! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00' prior: 83711540! compileKeywordInitializerUsing: keywordMapDictionary selectorMap: selectorMapDictionary | stream dataStream | keywordMapDictionary isEmpty ifTrue: [^self]. stream := WriteStream with: String new. stream nextPutAll: 'initializeKeywordMap'. stream nextPutAll: ' keywordMap := Dictionary new. '. dataStream := WriteStream with: Array new. keywordMapDictionary keysAndValuesDo: [:key :value | value keys asSortedCollection do: [:each | dataStream nextPut: (Array with: (selectorMapDictionary at: key ifAbsent: [key]) with: each with: (selectorMapDictionary at: (value at: each) ifAbsent: [value at: each]))]]. stream nextPutAll: '#('; cr. dataStream contents do: [:each | stream nextPutAll: '#('. each do: [:item | item storeOn: stream] separatedBy: [stream nextPut: $ ]. stream nextPut: $)] separatedBy: [stream cr]. stream nextPut: $). stream nextPutAll: ' do: [:each | (keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last]. ^keywordMap'. scannerClass theMetaClass compile: (RBParser parseMethod: stream contents) formattedCode classified: #'generated-initialization'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83712811! compileMethodsFor: regex withSelectors: selectorMap | keywordmap dfa | dfa := regex asDFA. keywordmap := self computeKeywordMapFor: dfa. self compileKeywordInitializerUsing: keywordmap selectorMap: selectorMap. dfa compileInto: scannerClass usingSelectorMap: selectorMap. self compileEmptySymbolTokenId. self compileErrorSymbolTokenId. self compileIgnoreCaseMethod! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83713266! compileScanner | regex | self addSpecialSymbols. self addNormalSymbols. self addActions. self compileTokenIdMethods. regex := self addSpecificREsWithoutActionsTo: self combinedGeneralRegexes. self compileMethodsFor: regex withSelectors: self computeSelectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00' prior: 83713621! compileScannerDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (scannerDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". self scannerClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83714051! compileTokenIdMethodFor: aTerminalSymbol | stream | stream := WriteStream with: String new. stream nextPutAll: aTerminalSymbol safeMethodName; nextPutAll: 'Id'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: aTerminalSymbol) printString. scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83714471! compileTokenIdMethods (self symbols select: [:each | each createIdMethod]) do: [:each | self compileTokenIdMethodFor: each]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83714694! computeKeywordMapFor: dfa | keywordmap | keywordmap := Dictionary new. self specificRegularExpressionsDo: [:each | | actions | actions := dfa actionForSpecificRegularExpression: each. actions isNil ifFalse: [self addActionsFrom: each to: keywordmap at: actions]]. ^keywordmap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:43' prior: 83715104! computeSelectorMap | selectorMap | selectorMap := Dictionary new. self symbols keysAndValuesDo: [:index :each | (self scannerActionFor: each name) ifNotNilDo: [:selector | selectorMap at: index put: selector]]. ^selectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83715426! filePositionSortBlock ^ [:a :b | | aRegex bRegex | aRegex := a regularExpression. bRegex := b regularExpression. bRegex isNil or: [aRegex notNil and: [(aRegex position ifNil: [0]) < (bRegex position ifNil: [0])]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83715751! generalRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifFalse: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83715963! grammar: aGrammar grammar := aGrammar! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83716084! parseTokens grammar scannerDefinition: (SmaCCScannerParser parse: scannerDefinitionString)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19' prior: 83716257! regularExpressionsDo: aBlock self symbols do: [:each | each regularExpression ifNotNil: aBlock]! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'ThierryGoubier 5/14/2012 15:41' prior: 83765376! scannerActionFor: aString | selector | aString size > 2 ifFalse: [ ^ nil ]. selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. ^ ((scannerClass definesMethod: selector) and: [ (Object canUnderstand: selector) not and: [ ((SmaCCScanner canUnderstand: selector) not or: [ #(#comment #whitespace) includes: selector ]) and: [ selector numArgs = 0 ] ] ]) ifTrue: [ selector ] ifFalse: [ nil ]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83716961! scannerClass ^scannerClass! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83717062! scannerClass: anObject scannerClass := anObject! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83717184! scannerDefinitionString: aString scannerDefinitionString := aString! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19' prior: 83717348! specificRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifTrue: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83717551! symbols ^grammar symbols! ! Object subclass: #SmaCCScannerDefinition instanceVariableNames: 'tokens states excludeStates' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ScannerGenerator'! !SmaCCScannerDefinition commentStamp: '' prior: 83717650! SmaCCScannerDefinition is the parsed representation of the scanner. It contains the tokens and states for the scanner. Instance Variables: excludeStates exclusive states (when we are in one of these, then we shouldn't try to parse the default tokens) states states in the scanner -- if no states are specified, then this will only contain #default tokens dictionary mapping token names to their regular expressions ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83718183! addExcludeState: aSymbol excludeStates add: aSymbol. self addState: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83718337! addState: aSymbol states add: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83718451! addToken: aSmaCCRENode withName: aString tokens at: aString put: aSmaCCRENode! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83718605! defaultState ^#default! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83718702! includesTokenNamed: aString ^tokens includesKey: aString! ! !SmaCCScannerDefinition methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83718844! initialize tokens := Dictionary new. states := Set with: self defaultState. excludeStates := Set new! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83719021! isExcludeState: aSymbol ^excludeStates includes: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83719154! nonExcludeStates | nonExcludeStates | nonExcludeStates := states reject: [:each | self isExcludeState: each]. nonExcludeStates add: self defaultState. ^nonExcludeStates! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83719402! states ^states! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83719493! tokenNamed: aString ^tokens at: aString! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83719609! tokenNamed: aString ifAbsentPut: aBlock ^tokens at: aString ifAbsentPut: aBlock! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83719766! tokens ^tokens! ! Object subclass: #SmaCCSymbol instanceVariableNames: 'name precedence firstItems' classVariableNames: 'EmptySymbol ErrorSymbol SentinelSymbol' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCSymbol commentStamp: '' prior: 83719844! SmaCCSymbol is an abstract class that represents a symbol in the grammar. Subclasses must implement the following messages: accessing calculateFirstTerminals testing isTerminal Instance Variables: firstItems the first terminals that can be produced from us name our name precedence our precedence (in case of shift/reduce conflicts) ! SmaCCSymbol subclass: #SmaCCNonTerminalSymbol instanceVariableNames: 'productions' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCNonTerminalSymbol commentStamp: 'jmb' prior: 83720308! SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar. Instance Variables: productions our rhs' for the symbol! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83720549! addProduction: aSmaCCRHS productions add: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83720677! calculateFirstTerminals | initialSize | initialSize := firstItems size. productions isEmpty ifTrue: [firstItems add: self class empty] ifFalse: [productions do: [:each | firstItems addAll: each firstTerminals]]. ^initialSize ~= firstItems size! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83721003! isEmpty ^productions isEmpty! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83721106! isTerminal ^false! ! !SmaCCNonTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83721209! name: aString super name: aString. productions := OrderedCollection new! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83721359! positionOf: aSmaCCRHS ^productions indexOf: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83721490! productionsDo: aBlock productions do: aBlock! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83721612! size ^productions size! ! SmaCCNonTerminalSymbol subclass: #SmaCCStartingSymbol instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCStartingSymbol commentStamp: 'jmb' prior: 83721697! SmaCCStartingSymbol is the starting symbol in the grammar. A grammar can only have one starting symbol, but it can have may different starting item sets.! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83721921! asLRItemSet | itemSet | itemSet := SmaCCItemSet new. productions do: [:each | itemSet add: (SmaCCLR1Item symbol: self rhs: each follow: ((SmaCCSymbolSet new) add: self class empty; yourself))]. ^itemSet! ! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83722243! compileName ^(productions first at: 1) safeMethodName! ! !SmaCCStartingSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83722368! isStartingSymbol ^true! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83722470! empty EmptySymbol isNil ifTrue: [EmptySymbol := SmaCCTerminalSymbol name: 'E O F']. ^EmptySymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83722650! error ErrorSymbol isNil ifTrue: [ErrorSymbol := SmaCCTerminalSymbol name: 'error']. ^ErrorSymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83722830! name: aString ^(self new) name: aString; yourself! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83722964! releaseObjects EmptySymbol := nil. SentinelSymbol := nil. ErrorSymbol := nil! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19' prior: 83723122! sentinel SentinelSymbol isNil ifTrue: [SentinelSymbol := SmaCCTerminalSymbol name: 'S e n t i n e l']. ^SentinelSymbol! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83723310! calculateFirstTerminals ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83723428! createIdMethod ^false! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83723515! firstTerminals ^firstItems! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83723607! isEmptySymbol ^self = self class empty! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83723709! isStartingSymbol ^false! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83723796! isTerminal ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83723901! name ^name! ! !SmaCCSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83723986! name: aString name := aString. firstItems := Set new! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83724106! precedence ^precedence! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83724194! precedence: anInteger precedence := anInteger! ! !SmaCCSymbol methodsFor: 'printing' stamp: ' 6/1/07 21:19' prior: 83724304! printOn: aStream aStream nextPutAll: name! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83724412! productionsDo: aBlock! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83724498! regularExpression ^nil! ! !SmaCCSymbol methodsFor: 'accessing' stamp: 'lr 1/7/2007 10:57' prior: 83724590! safeMethodName ^self unsafeMethodName collect: [:each | each isAlphaNumeric ifTrue: [each] ifFalse: [$X]]! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83724764! size ^0! ! !SmaCCSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83724835! unsafeMethodName ^self printString! ! SmaCCSymbol subclass: #SmaCCTerminalSymbol instanceVariableNames: 'regularExpression createIdMethod' classVariableNames: '' poolDictionaries: '' category: 'SmaCCDev-ParserGenerator'! !SmaCCTerminalSymbol commentStamp: 'jmb' prior: 83724932! SmaCCTerminalSymbol represents a terminal symbol in our grammar. Instance Variables: createIdMethod should we create a symbolNameId method for this symbol. regularExpression our regular expression that we must match for this terminal symbol! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83725279! calculateFirstTerminals ^false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83725383! createIdMethod ^createIdMethod! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83725487! createIdMethod: aBoolean createIdMethod := aBoolean! ! !SmaCCTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19' prior: 83725610! isTerminal ^true! ! !SmaCCTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19' prior: 83725709! name: aString super name: aString. firstItems add: self. createIdMethod := false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83725866! regularExpression ^regularExpression! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19' prior: 83725976! regularExpression: aSmaCCRegularExpressionNode regularExpression := aSmaCCRegularExpressionNode! ! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19' prior: 83726143! unsafeMethodName ^name copyFrom: 2 to: name size - 1! ! SmaCCShiftAction initialize! SmaCCRejectAction initialize! SmaCCGrammar initialize! SmaCCParserGenerator initialize! SmaCCNode initialize! ----End fileIn----! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'AlainPlantec 3/12/2014 14:37' prior: 83774357! hasUnacceptedEdits: aBoolean ^ contentsMorph ifNotNil: [self contentsMorph hasUnacceptedEdits: aBoolean]! ! ----STARTUP----2014-03-12T14:42:32.038898+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! !ConfigurationOfSmaCC class methodsFor: 'private' stamp: 'DamienPollet 3/7/2010 17:17'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfSmaCC class methodsFor: 'private' stamp: 'DamienPollet 3/7/2010 17:17'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.21" self bootstrapPackage: 'Gofer-Core-lr.115' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfSmaCC class methodsFor: 'loading' stamp: 'DamienPollet 3/7/2010 17:17'! load "self load" ^self project latestVersion load! ! !ConfigurationOfSmaCC class methodsFor: 'metacello tool support' stamp: 'DamienPollet 3/7/2010 17:17'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfSmaCC class methodsFor: 'accessing' stamp: 'DamienPollet 3/7/2010 17:17'! project ^self new project! ! !ConfigurationOfSmaCC class methodsFor: 'unloading Metacello' stamp: 'DamienPollet 3/7/2010 17:17'! unloadMetacello Smalltalk at: #ConfigurationOfMetacello ifPresent: [:cls | cls unloadMetacello ]! ! !ConfigurationOfSmaCC methodsFor: 'baselines' stamp: 'DamienPollet 3/7/2010 18:59'! baseline01: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://www.squeaksource.com/SmaccDevelopment'. spec package: 'SmaCC'; package: 'SmaCCDev' with: [ spec requires: 'SmaCC' ]. spec group: 'default' with: #('Runtime'); group: 'Runtime' with: #('SmaCC'); group: 'Tools' with: #('SmaCCDev') ]! ! !ConfigurationOfSmaCC methodsFor: 'accessing' stamp: 'DamienPollet 3/7/2010 17:17'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfSmaCC methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 3/11/2013 17:36'! stable: spec spec for: #'common' version: '0.1'. spec for: #'pharo1.4.x' version: '0.2'. spec for: #'pharo2.0.x' version: '0.3' ! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'topa 4/21/2011 10:31'! version01: spec spec for: #common do: [ spec blessing: #stable; author: 'topa'; description: 'Make SmaCC available via Metacello'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-AlainPlantec.25'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/11/2013 17:37'! version02: spec spec for: #common do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 1.4'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.31'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/18/2013 16:40'! version03: spec spec for: #common do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 2.0'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.33'. ]! ! "ConfigurationOfSmaCC"! !SmaCCParserError commentStamp: '' prior: 0! SmaCCParserException is the exception raised when a parsing error occurs. The description of the exception will be the error message and the parameter of the exception is the parser. With this information, you can insert a custom error message in your text view that you are parsing. For example, in VisualWorks, the following code will insert an error message into your text view: textController insertAndSelect: ex description , ' ->' at: ex parameter position! !SmaCCLineNumberStream commentStamp: '' prior: 0! SmaCCLineNumberStream is a wrapper for streams that calculates line numbers. Instance Variables: eolPositions the positions of each end of line lastPosition the position of the last character that we have calculated the end of line information for (we know the line number for all characters before this position and don't know anything about the characters after this position) previousWasCR was the previous character a CR. This is used for CR LF streams. A CR LF combination should only increment the line counter by 1 sourceStream the stream that we are wrapping ! !SmaCCParser commentStamp: '' prior: 0! SmaCCParser is an abstract class that defines most of the parsing actions. Subclasses will define methods that specify their transitions and reduction actions. These are normally defined automatically when compiling the parser. Subclasses must implement the following messages: accessing emptySymbolTokenId reduceTable transitionTable Instance Variables: currentToken the token last returned by the scanner that has not been shifted (reduce actions leave the current token alone) nodeStack collection of items on stack. These items are specific to the parser and can be any object. scanner our scanner stateStack the stack of states for our parser (standard LR state stack) ! !SmaCCScanner commentStamp: '' prior: 0! SmaCCScanner is an abstract class that represents a scanner for the parser. The scanner converts its string input into SmaCCToken objects that the parser then uses for its parsing. Subclasses must implement the following messages: accessing scanForToken Instance Variables: currentCharacter the current character we are scanning lastMatchWasEmpty was our last scanning match an empty string -- don't allow two empty matches in a row lastOutputStreamMatchPosition the position in the outputStream of the last match matchActions the actions for the last match (a symbol means that the action should be performed on the scanner) matchEnd the position of the last match in the stream (our input stream) outputStream the matched characters go in this stream. After a match is made, we take this stream's contents and create a token object. returnMatchBlock when we match a token evaluate this block with the token (hack to return from multiple levels) start the starting position of a match in the stream stream our input ! !SmaCCToken commentStamp: '' prior: 0! SmaCCTokens are used as the interface objects between scanner and parser. They hold the string that was scanned and its position information. Also, included in the token is its id. The id specifies what type of token it is. Instance Variables: id the list of possible token types this represents. There can be overlapping tokens, so we list all of the id here. The default parser only looks at the first id, but we can redefine this behavior in a subclass to look at all possibilities until we find a valid token. start the starting position of the token in the original input value the value of our token (normally a string, but could be anything) ! !SmaCCParserError commentStamp: '' prior: 101135617! SmaCCParserException is the exception raised when a parsing error occurs. The description of the exception will be the error message and the parameter of the exception is the parser. With this information, you can insert a custom error message in your text view that you are parsing. For example, in VisualWorks, the following code will insert an error message into your text view: textController insertAndSelect: ex description , ' ->' at: ex parameter position! !SmaCCLineNumberStream commentStamp: '' prior: 101136144! SmaCCLineNumberStream is a wrapper for streams that calculates line numbers. Instance Variables: eolPositions the positions of each end of line lastPosition the position of the last character that we have calculated the end of line information for (we know the line number for all characters before this position and don't know anything about the characters after this position) previousWasCR was the previous character a CR. This is used for CR LF streams. A CR LF combination should only increment the line counter by 1 sourceStream the stream that we are wrapping ! !SmaCCLineNumberStream class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aReadStream ^(self basicNew) on: aReadStream; yourself! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! atEnd ^sourceStream atEnd! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! columnNumber ^self columnNumberFor: self position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! columnNumberFor: anInteger ^anInteger - (eolPositions at: (self lineNumberFor: anInteger)) + 1! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! contents ^sourceStream contents! ! !SmaCCLineNumberStream methodsFor: 'error handling' stamp: ' 6/1/07 20:34'! doesNotUnderstand: aMessage ^sourceStream perform: aMessage selector withArguments: aMessage arguments! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! flush ^sourceStream flush! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isReadable ^sourceStream isReadable! ! !SmaCCLineNumberStream methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isWritable ^sourceStream isWritable! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumber ^self lineNumberFor: self position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumberFor: anInteger | index start stop pos | pos := anInteger. pos >= eolPositions last ifTrue: [^eolPositions size]. start := 1. stop := eolPositions size. [start + 1 < stop] whileTrue: [index := (start + stop) // 2. (eolPositions at: index) <= pos ifTrue: [start := index] ifFalse: [stop := index]]. ^start! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! next | character streamPosition | character := sourceStream next. streamPosition := sourceStream position. streamPosition - 1 >= lastPosition ifTrue: [lastPosition := streamPosition. character == Character cr ifTrue: [eolPositions add: lastPosition. previousWasCR := true] ifFalse: [character == Character lf ifTrue: [previousWasCR ifTrue: [eolPositions at: eolPositions size put: lastPosition] ifFalse: [eolPositions add: lastPosition]]. previousWasCR := false]]. ^character! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! nextPut: anObject ^sourceStream nextPut: anObject! ! !SmaCCLineNumberStream methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! on: aReadStream sourceStream := aReadStream. eolPositions := OrderedCollection with: aReadStream position. lastPosition := aReadStream position. previousWasCR := false! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! peek ^sourceStream peek! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^sourceStream position! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position: anInteger anInteger > lastPosition ifTrue: [sourceStream position: lastPosition. [sourceStream position < anInteger and: [sourceStream atEnd not]] whileTrue: [self next]] ifFalse: [sourceStream position: anInteger]! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! skip: anInteger ^self position: self position + anInteger! ! !SmaCCLineNumberStream methodsFor: 'accessing' stamp: 'lr 1/6/2007 20:56'! upTo: aCharacter | stream char | stream := WriteStream on: String new. [self atEnd or: [ (char := self next) = aCharacter]] whileFalse: [stream nextPut: char]. ^ stream contents! ! !SmaCCParser commentStamp: '' prior: 101136832! SmaCCParser is an abstract class that defines most of the parsing actions. Subclasses will define methods that specify their transitions and reduction actions. These are normally defined automatically when compiling the parser. Subclasses must implement the following messages: accessing emptySymbolTokenId reduceTable transitionTable Instance Variables: currentToken the token last returned by the scanner that has not been shifted (reduce actions leave the current token alone) nodeStack collection of items on stack. These items are specific to the parser and can be any object. scanner our scanner stateStack the stack of states for our parser (standard LR state stack) ! !SmaCCParser class methodsFor: 'private' stamp: ' 6/1/07 20:34'! defaultStartingState ^1! ! !SmaCCParser class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aStream | parser scanner | scanner := self scannerClass on: aStream. parser := self new. parser scanner: scanner. ^parser! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse: aString ^self parse: aString startingAt: self defaultStartingState! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parse: aString onError: aBlock ^[self parse: aString] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse: aString startingAt: anInteger ^self parseStream: (ReadStream on: aString) startingAt: anInteger! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parse: aString startingAt: anInteger onError: aBlock ^[self parse: aString startingAt: anInteger] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parseStream: aStream ^self parseStream: aStream startingAt: self defaultStartingState! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parseStream: aStream onError: aBlock ^[self parseStream: aStream] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parseStream: aStream startingAt: anInteger | parser | parser := self on: aStream. parser setStartingState: anInteger. ^parser parse! ! !SmaCCParser class methodsFor: 'accessing' stamp: 'lr 1/6/2007 22:39'! parseStream: aStream startingAt: anInteger onError: aBlock ^[self parseStream: aStream startingAt: anInteger] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !SmaCCParser class methodsFor: 'private' stamp: ' 6/1/07 20:34'! scannerClass ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! acceptAction ^0! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionFor: aSymbolIndex ^self actionForState: self currentState and: aSymbolIndex! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionForCurrentToken ^self actionFor: currentToken id first! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:47'! actionForState: stateIndex and: aSymbolIndex | index row | row := self transitionTable at: stateIndex. ^ row isArray ifTrue: [ (row at: 1) == 2 ifTrue: [ index := self binarySearchInArray: row for: aSymbolIndex size: 1. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ row at: 2 ] ] ifFalse: [ index := self binarySearchInArray: row for: aSymbolIndex size: 2. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ row at: index - 1 ] ] ] ifFalse: [ (row at: 1) == 0 ifTrue: [ index := self binarySearchInBytes: row for: aSymbolIndex size: 2. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ ((row at: 2) bitShift: 8) + (row at: 3) ] ] ifFalse: [ index := self binarySearchInBytes: row for: aSymbolIndex size: 4. index == 0 ifTrue: [ ^ self errorAction ] ifFalse: [ ^ ((row at: index - 2) bitShift: 8) + (row at: index - 1) ] ] ]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! actionMask ^2r11! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:47'! binarySearchInArray: aRow for: aSymbolIndex size: step | start mid length midItem stop | start := 3. stop := aRow size. length := (stop - start) // step. [length > 4] whileTrue: [length := length bitShift: -1. mid := length * step + start. midItem := aRow at: mid. midItem <= aSymbolIndex ifTrue: [start := mid] ifFalse: [stop := mid]]. [start <= stop] whileTrue: [(aRow at: start) == aSymbolIndex ifTrue: [^start]. start := start + step]. ^0! ! !SmaCCParser methodsFor: 'private' stamp: 'lr 11/25/2009 18:48'! binarySearchInBytes: aRow for: aSymbolIndex size: step | start mid length high low midItem stop | high := aSymbolIndex bitShift: -8. low := aSymbolIndex bitAnd: 16rFF. start := 4. stop := aRow size - 1. length := (stop - start) // step. [length > 4] whileTrue: [length := length bitShift: -1. mid := length * step + start. midItem := aRow at: mid. ((midItem == high and: [(aRow at: mid + 1) <= low]) or: [midItem < high]) ifTrue: [start := mid] ifFalse: [stop := mid]]. [start <= stop] whileTrue: [((aRow at: start) == high and: [(aRow at: start + 1) == low]) ifTrue: [^start]. start := start + step]. ^0! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! checkForErrors "If we have an error correction installed, we might have handled the errors. If we did, we don't want to return the result, so we raise a final exception that can't be proceeded." errorToken isNil ifTrue: [^self]. currentToken := errorToken. self reportErrorMessage: 'Token not expected'! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! currentState ^stateStack last! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! dismissErrorToken currentToken := nil. self getNextToken! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! dismissStackTopForErrorRecovery stateStack removeLast. ^nodeStack removeLast! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! emptySymbolTokenId ^scanner emptySymbolTokenId! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! errorAction ^3! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! errorHandlerStates ^stateStack collect: [:each | | action | action := self actionForState: each and: self errorTokenId. (action bitAnd: self actionMask) = 1 ifTrue: [action bitShift: -2] ifFalse: [0]]! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTable ^#()! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTokenId ^scanner errorTokenId! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! findErrorHandlerIfNoneUseErrorNumber: anInteger | handlerStates index startingErrorToken newStack | handlerStates := self errorHandlerStates reverse. startingErrorToken := currentToken. [index := (1 to: handlerStates size) detect: [:each | | state | state := handlerStates at: each. state ~= 0 and: [newStack := stateStack copyFrom: 1 to: handlerStates size - each + 1. newStack add: state. self willShift: newStack]] ifNone: [nil]. index isNil] whileTrue: [self dismissErrorToken. self isEOFToken ifTrue: [currentToken := startingErrorToken. self reportError: anInteger]]. index - 1 timesRepeat: [self dismissStackTopForErrorRecovery]. stateStack addLast: (handlerStates at: index). nodeStack addLast: startingErrorToken! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! getNextToken currentToken isNil ifTrue: [currentToken := scanner next]! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! handleError: anInteger errorToken isNil ifTrue: [errorToken := currentToken]. (self isEOFToken or: [self hasErrorHandler not]) ifTrue: [self reportError: anInteger]. self findErrorHandlerIfNoneUseErrorNumber: anInteger! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! hasErrorHandler ^self errorHandlerStates anySatisfy: [:each | each ~~ 0]! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! initialize nodeStack := OrderedCollection new! ! !SmaCCParser methodsFor: 'testing' stamp: ' 6/1/07 20:34'! isEOFToken ^currentToken id first = self emptySymbolTokenId! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftFirstValue: aCollection ^aCollection first! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftLastValue: aCollection ^aCollection last! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! liftSecondValue: aCollection ^aCollection at: 2! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! nil ^nil! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! parse self setDefaultStartingStateIfNone. self performParsingLoop. ^nodeStack last! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performAction: action | value actionType | actionType := action bitAnd: self actionMask. value := action bitShift: -2. actionType == self shiftAction ifTrue: [self shift: value] ifFalse: [actionType == self reduceAction ifTrue: [self reduce: value] ifFalse: [self handleError: value]]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performParsingLoop | action | [self getNextToken. action := self actionForCurrentToken. action = self acceptAction] whileFalse: [self performAction: action]. self checkForErrors! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! performReduceMethod: aSymbol with: items ^aSymbol last == $: ifTrue: [self perform: aSymbol with: items] ifFalse: [self perform: aSymbol]! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^currentToken isNil ifTrue: [scanner position] ifFalse: [currentToken startPosition]! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduce: anInteger | reduceEntry items size | reduceEntry := self reduceTable at: anInteger. items := OrderedCollection new: (size := reduceEntry at: 2). size timesRepeat: [items addFirst: nodeStack removeLast. stateStack removeLast]. nodeStack add: (self performReduceMethod: (reduceEntry at: 3) with: items). stateStack add: ((self actionFor: (reduceEntry at: 1)) bitShift: -2)! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduceAction ^2r10! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! reduceFor: aCollection | newCollection item | (aCollection allSatisfy: [:each | each class ~~ OrderedCollection]) ifTrue: [^aCollection]. aCollection first class == OrderedCollection ifTrue: [newCollection := aCollection first. 2 to: aCollection size do: [:i | item := aCollection at: i. item class = OrderedCollection ifTrue: [newCollection addAll: item] ifFalse: [newCollection add: item]]. ^newCollection]. newCollection := OrderedCollection new. aCollection do: [:each | each class == OrderedCollection ifTrue: [newCollection addAll: each] ifFalse: [newCollection add: each]]. ^newCollection! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! reduceTable ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! reportError: anInteger self reportErrorMessage: (anInteger = 0 ifTrue: ['Token not expected'] ifFalse: [self errorTable at: anInteger])! ! !SmaCCParser methodsFor: 'private-error handling' stamp: 'lr 1/6/2007 22:43'! reportErrorMessage: aString SmaCCParserError new tag: self; signal: aString! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! scanner ^scanner! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! scanner: aScanner scanner := aScanner! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! setDefaultStartingStateIfNone stateStack isNil ifTrue: [self setStartingState: self class defaultStartingState]! ! !SmaCCParser methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! setStartingState: startingState stateStack := OrderedCollection with: startingState! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! shift: stateIndex stateStack add: stateIndex. nodeStack add: currentToken. currentToken := nil! ! !SmaCCParser methodsFor: 'private' stamp: ' 6/1/07 20:34'! shiftAction ^2r01! ! !SmaCCParser methodsFor: 'standard reduction rules' stamp: ' 6/1/07 20:34'! stringValue: anOrderedCollection ^anOrderedCollection first value! ! !SmaCCParser methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! transitionTable ^self subclassResponsibility! ! !SmaCCParser methodsFor: 'private-error handling' stamp: ' 6/1/07 20:34'! willShift: potentialStateStack | action compoundAction reduceEntry size | compoundAction := self actionForState: potentialStateStack last and: currentToken id first. action := compoundAction bitAnd: self actionMask. action == self shiftAction ifTrue: [^true]. action == self reduceAction ifTrue: [reduceEntry := self reduceTable at: (compoundAction bitShift: -2). size := reduceEntry at: 2. size timesRepeat: [potentialStateStack removeLast]. potentialStateStack add: ((self actionForState: potentialStateStack last and: (reduceEntry at: 1)) bitShift: -2). ^self willShift: potentialStateStack]. ^false! ! !SmaCCScanner commentStamp: '' prior: 101137656! SmaCCScanner is an abstract class that represents a scanner for the parser. The scanner converts its string input into SmaCCToken objects that the parser then uses for its parsing. Subclasses must implement the following messages: accessing scanForToken Instance Variables: currentCharacter the current character we are scanning lastMatchWasEmpty was our last scanning match an empty string -- don't allow two empty matches in a row lastOutputStreamMatchPosition the position in the outputStream of the last match matchActions the actions for the last match (a symbol means that the action should be performed on the scanner) matchEnd the position of the last match in the stream (our input stream) outputStream the matched characters go in this stream. After a match is made, we take this stream's contents and create a token object. returnMatchBlock when we match a token evaluate this block with the token (hack to return from multiple levels) start the starting position of a match in the stream stream our input ! !SmaCCScanner class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! frequencyTable ^#(1)! ! !SmaCCScanner class methodsFor: 'class initialization' stamp: ' 6/1/07 20:34'! initialize self initializeKeywordMap! ! !SmaCCScanner class methodsFor: 'class initialization' stamp: ' 6/1/07 20:34'! initializeKeywordMap keywordMap := Dictionary new! ! !SmaCCScanner class methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! keywordMap keywordMap isNil ifTrue: [self initializeKeywordMap]. ^keywordMap! ! !SmaCCScanner class methodsFor: 'testing' stamp: ' 6/1/07 20:34'! needsLineNumbers "Redefine to return true, if you need line number information" ^false! ! !SmaCCScanner class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! on: aStream ^(self new) on: (self needsLineNumbers ifTrue: [SmaCCLineNumberStream on: aStream] ifFalse: [aStream]); yourself! ! !SmaCCScanner methodsFor: 'testing' stamp: ' 6/1/07 20:34'! atEnd ^stream atEnd! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! checkForKeyword: aString | stateMap action | action := matchActions isSymbol ifTrue: [matchActions] ifFalse: [matchActions first]. stateMap := self class keywordMap at: action ifAbsent: [nil]. stateMap isNil ifTrue: [^self]. matchActions := stateMap at: (self keywordFor: aString) ifAbsent: [matchActions]. matchActions isInteger ifTrue: [matchActions := Array with: matchActions with: action]! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! checkForValidMatch matchActions isNil ifTrue: [self scannerError]! ! !SmaCCScanner methodsFor: 'default token handling' stamp: ' 6/1/07 20:34'! comment "In case someone wants to record the comments" ^self whitespace! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! contents | writeStream token | writeStream := WriteStream with: Array new. [self atEnd] whileFalse: [token := self next. token notNil ifTrue: [writeStream nextPut: token]]. ^writeStream contents! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! createTokenFor: string | token | token := self tokenClass value: string start: start + 1 id: matchActions. outputStream reset. ^token! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! emptySymbolTokenId ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! eofTokenId ^Array with: self emptySymbolTokenId! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! errorTokenId ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! initialize outputStream := WriteStream with: String new. lastMatchWasEmpty := true. state := #default! ! !SmaCCScanner methodsFor: 'private-utility' stamp: ' 6/1/07 20:34'! keywordFor: aString "Subclasses can override this to ignore case" ^aString! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! lineNumber "This requires the stream to be a line number stream (see the #needsLineNumbers class method)." ^stream lineNumber! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! next self resetScanner. returnMatchBlock := [:match | ^match]. ^self scanForToken! ! !SmaCCScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! on: aStream stream := aStream. start := stream position! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position ^stream position! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! position: anInteger ^stream position: anInteger! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! recordAndReportMatch: aCollection ^self recordMatch: aCollection; reportLastMatch! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! recordMatch: aCollection matchActions := aCollection. matchEnd := stream position. lastOutputStreamMatchPosition := outputStream position! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! reportLastMatch "The scanner has found the end of a token and must report it" | string token | self checkForValidMatch. self resetOutputToLastMatch. stream position: matchEnd. string := outputStream contents. self checkForKeyword: string. token := matchActions isSymbol ifTrue: [self perform: matchActions] ifFalse: [self createTokenFor: string]. matchActions := nil. ^token! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! resetOutputToLastMatch outputStream position: lastOutputStreamMatchPosition. lastOutputStreamMatchPosition == 0 ifTrue: [lastMatchWasEmpty ifTrue: [self scannerError]. lastMatchWasEmpty := true] ifFalse: [lastMatchWasEmpty := false]! ! !SmaCCScanner methodsFor: 'private' stamp: 'lr 1/7/2007 02:23'! resetScanner start := stream position. outputStream reset. lastOutputStreamMatchPosition := 0! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! scanForToken ^self subclassResponsibility! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! scannerError | string | (stream atEnd and: [start == stream position]) ifTrue: [string := ''. matchActions := self eofTokenId] ifFalse: [stream position: start. string := String with: stream next. matchActions := #(0)]. returnMatchBlock value: (self createTokenFor: string)! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! state ^state! ! !SmaCCScanner methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! state: aSymbol state := aSymbol! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! step stream atEnd ifTrue: [^returnMatchBlock value: self reportLastMatch]. currentCharacter := stream next. outputStream nextPut: currentCharacter! ! !SmaCCScanner methodsFor: 'private' stamp: ' 6/1/07 20:34'! tokenClass ^SmaCCToken! ! !SmaCCScanner methodsFor: 'default token handling' stamp: ' 6/1/07 20:34'! whitespace "By default, eat the whitespace" self resetScanner. ^self scanForToken! ! !SmaCCToken commentStamp: '' prior: 101138855! SmaCCTokens are used as the interface objects between scanner and parser. They hold the string that was scanned and its position information. Also, included in the token is its id. The id specifies what type of token it is. Instance Variables: id the list of possible token types this represents. There can be overlapping tokens, so we list all of the id here. The default parser only looks at the first id, but we can redefine this behavior in a subclass to look at all possibilities until we find a valid token. start the starting position of the token in the original input value the value of our token (normally a string, but could be anything) ! !SmaCCToken class methodsFor: 'instance creation' stamp: ' 6/1/07 20:34'! value: aString start: anInteger id: anObject ^(self new) value: aString start: anInteger id: anObject; yourself! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! id ^id! ! !SmaCCToken methodsFor: 'printing' stamp: ' 6/1/07 20:34'! printOn: aStream aStream nextPut: ${; nextPutAll: self value; nextPut: $(; nextPutAll: self startPosition printString; nextPut: $,; nextPutAll: self stopPosition printString; nextPut: $,; nextPutAll: self id printString; nextPutAll: ')}'! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! startPosition ^start! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! stopPosition ^start + value size - 1! ! !SmaCCToken methodsFor: 'accessing' stamp: ' 6/1/07 20:34'! value ^value! ! !SmaCCToken methodsFor: 'initialize-release' stamp: ' 6/1/07 20:34'! value: anObject start: startPositionInteger id: anInteger value := anObject. start := startPositionInteger. id := anInteger! ! "SmaCC"! !SmaCCCompilationNotification commentStamp: 'jmb' prior: 0! SmaCCCompilationNotification is a notification that is raised when we discover a problem with the parser. For example, a shift/reduce conflict will raise this notification.! !SmaCCGrammarParser commentStamp: 'jmb' prior: 0! SmaCCGrammarParser is a parser for grammars. Instance Variables: grammar the grammar we are producing ! !SmaCCScannerParser commentStamp: '' prior: 0! SmaCCScannerParser is the parser for the scanner definition. Instance Variables: tokens the tokens that are parsed ! !SmaCCGrammarScanner commentStamp: 'jmb' prior: 0! SmaCCGrammarScanner is the scanner for the grammar parser! !SmaCCScannerScanner commentStamp: 'jmb' prior: 0! SmaCCScannerScanner is the scanner for the scanner definition! !SmaCCItemSet commentStamp: 'jmb' prior: 0! SmaCCItemSet represents a LALR(1) or a LR(1) item set. Instance Variables: type #LALR1 or #LR1 ! !SmaCCAction commentStamp: 'jmb' prior: 0! SmaCCAction is an abstract class that represents an action in the LR parsing table. Subclasses must implement the following messages: accessing id! !SmaCCAcceptAction commentStamp: 'jmb' prior: 0! SmaCCAcceptAction represents an accept action in the parser (i.e., we have parsed a valid string).! !SmaCCReduceAction commentStamp: 'jmb' prior: 0! SmaCCReduceAction represents a reduce action in our parser's table. Instance Variables: rhs the rhs that is being reduced symbol the symbol that has the rhs! !SmaCCRejectAction commentStamp: 'jmb' prior: 0! SmaCCRejectAction represents a reject action in the parsing tables.! !SmaCCShiftAction commentStamp: 'jmb' prior: 0! SmaCCShiftAction represents a shift action in the parser's tables.! !SmaCCEdge commentStamp: '' prior: 0! SmaCCEdge represents a transition in a Finite Automata (directed graph). It is labeled with the characters or states (possibly none, indicating an epsilon transition) that cause the transition. Instance Variables: toNode The node that this is transitioning to. transitionObjects The characters or symbols that cause the transition. Note that there are no duplicates and all characters/symbols are sorted.! !SmaCCCharacterEdge commentStamp: '' prior: 0! SmaCCCharacterEdge is a SmaCCEdge for Character transitions! !SmaCCStateEdge commentStamp: '' prior: 0! SmaCCStateEdge is a SmaCCEdge for Symbol (state) transitions ! !SmaCCGrammar commentStamp: '' prior: 0! SmaCCGrammar represents a LR(1) or a LALR(1) grammar. Instance Variables: otherStartingSymbols other starting productions. The first production in the grammar is the defaulting starting position, but this can list other starting positions. shiftReduceTable when we have a shift/reduce conflict how should we handle it. This table contains the left/right associative rules. Left is a reduce action and right is a shift action. symbols all symbols in our grammar -- includes both terminal and non-terminal tokens the tokens for our scanner type the type of grammar (LALR1 or LR1) ! !SmaCCGrammarCompiler commentStamp: 'jmb' prior: 0! SmaCCGrammarCompiler compiles a SmaCCGrammar. Instance Variables: actions the action table for the parser. It contains the action (shift/reduce/accept/reject) for each possible state/symbol pair grammar our grammar itemSets the item sets for our grammar model where we are compiling our changes into parserClass the parser class for our changes parserDefinitionString the definition of our parser scannerCompiler a compiler for the scanner shiftTable a table mapping a state/symbol pair to the new state that is aquired by shifting the symbol startingStateMap the state for SmaCCSymbol's starting item set ! !SmaCCGraphAlgorithm commentStamp: '' prior: 0! SmaCCGraphAlgorithm is an abstract class that has support for the graph transformation algorithms. ! !SmaCCDuplicateNodeEliminator commentStamp: '' prior: 0! SmaCCDuplicateNodeEliminator removes duplicate nodes in a SmaCCNode graph. Instance Variables: comparisonState dictionary mapping equivalent nodes root the root of the graph ! !SmaCCEpsilonRemoval commentStamp: '' prior: 0! SmaCCEpsilonRemoval removes epsilon nodes from a NFA. Instance Variables: nodeMap Dictionary mapping sets of states to a new state in the new graph ! !SmaCCNFAtoDFA commentStamp: '' prior: 0! SmaCCNFAtoDFAAlgorithm converts an NFA without epsilon transitions into a DFA. If a node contains edges that lead to multiple nodes for the same character, then a new state is created that merges all states for the given character. Instance Variables: mergedStates dictionary that maps a collection of states to the resulting merged state ! !SmaCCLR1Item commentStamp: 'jmb' prior: 0! SmaCCLR1Item represents an item in a SmaCCItemSet. Instance Variables: followers all possible symbols that can follow this production in this state location the position in the rhs of the production we are at rhs the rhs of the production symbol the symbol for the production! !SmaCCNode commentStamp: '' prior: 0! SmaCCNode is a node in a directed graph. Instance Variables: action a collection of integers or a symbol. This contains the action to be performed when we match and can't find a longer match. id a unique number that allows us to sort the nodes transitions our transitions ! !SmaCCParserGenerator commentStamp: 'jmb 1/23/2003 15:59' prior: 0! SmaCC: The Smalltalk Compiler-Compiler from John Brant and Don Roberts (http://www.refactory.com/Software/SmaCC) Tutorial This is a walk-through tutorial to demonstrate many of the features of SmaCC, the Smalltalk Compiler Compiler. In this example, we will incrementally develop a simple calculator. Our first calculator is going to be relatively simple. It is going to take two numbers and add them together. To start things off, we have to tell the scanner how to recognize a number. It starts with one or more digits, possibly followed by an decimal point with zero or more digits after it. The scanner definition for this token is: : [0-9]+ (\. [0-9]*) ? ; Enter that line into the scanner tab on the interface. Let's go over each part: Names the token. The name inside the <> must be a legal Smalltalk variable name. : Separates the name of the token from the token's definition. [0-9] Matches any single character in the range '0' to '9' (a digit). + Matches the previous expression one or more times. In this case, we are matching one or more digits. ( ... ) Groups subexpressions. \. Matches the '.' character (. has a special meaning in regular expressions, \ quotes it). * Matches the previous expression zero or more times. ? Matches the previous expression zero or one time (i.e., it is optional). ; Terminates a token specification. We don't want to have to worry about whitespace in our language, so we need to define what a whitespace is and to ignore it. To do this, enter the following token specification on the next line on the scanner page: : \s+; \s matches any whitespace character (space, tab, linefeed, etc.). So how do we tell the scanner to ignore it? If you look in the SmaCCScanner class, you will find a method named 'whitespace'. If a scanner understands a method that has the same name as a token name, that method will get called whenever the scanner matches that kind of token. As you can see, the whitespace method eats whitespace. There is also a 'comment' method that behaves similarly. The only other token that will appear in our system would be the '+' token for addition. However, since this is token is always the same, we don't have to tell the scanner what it looks like. It will figure it out from our grammar. Speaking of our grammar, let's go ahead and define it. Enter the following specification in the Parser tab: Expression : Expression "+" Number | Number ; Number : ; This basically says that an expressions is either a number or an expression added to a number. We should be able to compile a parser now. Switch to the Compile tab. You need to enter the class name for both the scanner and parser. Use CalculatorScanner and CalculatorParser respectively. Once the class names are entered, we are ready to compile the parser. Press the 'Compile LALR(1)' button (you should always push this one unless you know what you are doing. Basically, it will generate smaller parsers than the other option). This will create new Smalltalk classes for the CalculatorScanner and CalculatorParser and compile several methods in those classes. All methods that SmaCC compiles will go into a "generated-*" method protocol. You should not change those methods since they are replace each time you compile. Whenever SmaCC creates new classes, they are compiled in the default application/package. If you are using VisualAge, you will need to make sure that the default application is an open edition and that it prereqs the SmaCCRuntime application. If you have already created the scanner and parser classes, you can load their definitions by using the "..." buttons next to the class name entry fields. If you answer "Yes" to the dialog, the text in the scanner/parser tabs will be replaced with the definition that was last compiled (assuming that the "Generate definition comments" was checked during the last compile). Now we are ready to test our parser. Go to the “test” pane, enter “3 + 4”, and press the “parse” button; you will see that the parser correctly parses it. If you press “Parse and Inspect” you will see and inspector on an OrderedCollection that contains the parsed tokens. This is because we haven't specified what the parser is supposed to do when it parses. You can also enter incorrect items. For example, try to parse "3 + + 4" or "3 + a". An error message should appear in the text. Now we need to define the actions that need to happen when we parse our expressions. Currently, our parser is just validating that the expression is a bunch of numbers added together. Generally, you will create some structure that represents what you've parsed (e.g., a parse tree). However, in this case, we are not concerned about the structure, but we are concerned about the result (the value of the expression). For our example, you need to modify the grammar definition to be: Expression : Expression "+" Number {'1' + '3'} | Number {'1'} ; Number : {'1' value asNumber} ; The text between the braces is Smalltalk code that gets evaluated when the rule is applied. Strings with a number get replaced with the corresponding parse node. In the first Expression rule, the '1' will get replaced by the ParseNode that matches Expression and the '3' gets replaced by the ParseNode that matches Number. The second item in the rule is the "+" token. Since we already know what it is, it is not interesting. Compile the new parser. Now when you do a 'Parse and Inspect' from the test pane, you should see the result: 7. One problem with the previous code is that if you need to change a rule then you may also need to change the code for that rule. For example, suppose you inserted a new token at the beginning of a rule, then you would need to change all of your references in the Smalltalk code. We can alleviate this problem by using named expressions. After each part of a rule, we can specify its name. Names are specified with single quotes and must be legal Smalltalk variable names. Doing this for our grammar we get: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Number 'number' {number} ; Number : 'numberToken' {numberToken value asNumber} ; While this will result in the same language being parsed, it makes it easier to maintain your parsers. Let's extend our language to add subtraction. Here's the new grammar: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; After you've compiled this, '3 + 4 - 2 ' should return '5'. Next, let's add multiplication and division: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Expression 'expression' "*" Number 'number' {expression * number} | Expression 'expression' "/" Number 'number' {expression / number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Here we run into a problem. If you evaluate '2 + 3 * 4' you end up with 20. The problem is that in standard mathematics, multiplication has a higher precedence than addition. Our grammar evaluates strictly left-to-right. The standard solution for this problem is to define additional nonterminals to force the sequence of evaluation. Our grammar with that solution would look like: Expression : Term 'term' {term} | Expression 'expression' "+" Term 'term' {expression + term} | Expression 'expression' "-" Term 'term' {expression - term}; Term : Number 'number' {number} | Term 'term' "*" Number 'number' {term * number} | Term 'term' "/" Number 'number' {term / number}; Number : 'numberToken' {numberToken value asNumber}; If you compile this grammar, you will see that '2 + 3 * 4' evaluates to 14 like we would expect. Now, as you can imagine, this gets pretty complicated as the number of precedence rules increases (e.g., C). We can use ambiguous grammars and precedence rules to simplify this situation. Here is the same grammar using precedence to enforce our evaluation order: %left "+" "-"; %left "*" "/"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Notice that we changed the grammar so that there are Expressions on both sides of the operator. The two lines that we added to the top of the grammar mean that “+” and “-” are evaluated left-to-right and have the same precedence, which is lower than “*” and “/”. Likewise, the second line means that “*” and “/” have equal precedence. Grammars in this form are usually much more intuitive, especially in cases with many precedence levels. Just as an example, let's add exponentiation and parentheses: %left "+" "-"; %left "*" "/"; %right "^"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Expression 'exp1' "^" Expression 'exp2' {exp1 raisedTo: exp2} | "(" Expression 'expression' ")" {expression} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Once you have compiled the grammar, you will be able to evaluate '3 + 4 * 5 ^ 2 ^ 2' to get 2503. Since the exponent operator is right associative, this expression is evaluated like 3 + (4 * (5 ^ (2 ^ 2))). We can also evaluate expressions with parentheses. For example, evaluating '(3 + 4) * (5 - 2) ^ 3' results in 189. The Scanner Scanning takes an input stream of characters and converts that into a stream of tokens. The tokens are then passed on to the parsing phase. The scanner is specified by a collection of token specifications. Each token is specified by: TokenName : RegularExpression ; TokenName is a valid Smalltalk variable name that is surrounded by <>. For example, "" is a valid TokenName, but "" is not since "token name" isn't a valid Smalltalk variable name. The RegularExpression is a regular expression that matches a token. It should match one or more characters in the input stream. The colon character, ":", is used to separate the TokenName and the RegularExpression, and the semicolon character, ";", is used to terminate the token specification. Regular Expression Syntax While the rules are specified as regular expressions, there are many different syntaxes for regular expressions. We choose a relatively simple syntax that is specified below. If you wish to have a more rich syntax, you can modify the scanner's parser: SmaCCScannerScanner & SmaCCScannerParser. These classes were created using SmaCC. \character Matches a special character. The character immediately following the backslash is matched exactly, unless it is a letter. Backslash-letter combinations have other meanings and are specified below. \cLetter Matches a control character. Control characters are the first 26 characters (e.g., \cA equals "Character value: 0"). The letter that follows the "\c" must be an uppercase letter. \d Matches a digit, 0-9. \D Matches anything that is not a digit. \f Matches a form-feed character, "Character value: 12". \n Matches a newline character, "Character value: 10". \r Matches a carriage return character, "Character value: 13". \s Matches any whitespace character, [ \f\n\r\t\v]. \S Matches any non-whitespace character. \t Matches a tab, "Character value: 9". \v Matches a vertical tab, "Character value: 11" \w Matches any letter, number or underscore, [A-Za-z0-9_]. \W Matches anything that is not a letter, number or underscore. \xHexNumber Matches a character specified by the hex number following the "\x". The hex number must be at least one character long and no more than four characters for Unicode characters and two characters for non-Unicode characters. For example, "\x20" matches the space character (Character value: 16r20), and "\x1FFF" matches "Character value: 16r1FFF". Copies the definition of into the current regular expression. For example, if we have " : \d | [A-F] ;", we can use in a later rule: " : + ;". [characters] Matches one of the characters inside the []. This is a shortcut for the "|" operator. In addition to single characters, you can also specify character ranges with the "-" character. For example, "[a-z]" matches any lower case letter. [^characters] Matches any character not listed in the characters block. "[^a]" matches anything except for "a". # comment Creates a comment that is ignored by SmaCC. Everything from the # to the end of the line is ignored. exp1| exp2 Matches either exp1 or exp2. exp1 exp2 Matches exp1 followed by exp2. "\d \d" matches two digits. exp* Matches exp zero or more times. "0*" matches "" and "000". exp? Matches exp zero or one time. "0?" matches only "" or "0". exp+ Matches exp one or more times. "0+" matches "0" and "000", but not "". exp{min,max} Matches exp at least min times but no more than max times. "0{1,2}" matches only "0" or "00". It does not match "" or "000". (exp) Groups exp for precedence. For example, "(a b)*" matches "ababab". Without the parentheses, "a b *" would match "abbbb" but not "ababab". Since there are multiple ways to combine expressions, we need precedence rules for their combination. The or operator, "|", has the lowest precedence and the "*", "?", "+", and "{,}" operators have the highest precedence. For example, "a | b c *" matches "a" or "bcccc", but not "accc" or "bcbcbc". If you wish to match "a" or "b" followed by any number of c's, you need to use "(a | b) c *". Overlapping Tokens Unlike T-Gen, SmaCC can handle overlapping tokens with any problems. For example, the following is a legal SmaCC scanner definition: : [a-zA-Z] \w* ; : . ; This definition will match a variable or a single character. A variable can also be a single character [a-zA-Z], so the two tokens overlap. SmaCC handles overlapping characters by preferring the first token specified by the grammar. For example, an "a" could be a or an token, but since is specified first, SmaCC will use it. Matching Methods If your scanner has a method name that matches the name of the token, (e.g. whitespace), that method will get called upon a match of that type. The SmaCCScanner superclass already has a default implementation of #whitespace and #comment. These methods ignore those tokens by default. Matching methods can also be used to handle overlapping token classes. For example, in the C grammar, a type definition is the same as an identifier. The only way that they can be disambiguated is by looking up the name in the type table. In our example C parser, we have an IDENTIFIER method that is used to determine whether the token is really an IDENTIFIER or whether it is a TYPE_NAME. Unreferenced Tokens If a token is not referenced from a grammar specification, it will not be included in the generated scanner, unless the token's name is also a name of a method (see previous section). This, coupled with the ability to do substitutions, allows you to have the equivalent of macros within your scanner specification. However, be aware that if you are simply trying to generate a scanner, you will have to make sure that you create a dummy parser specification that references all of the tokens that you want in the final scanner. Case Insensitive Scanning You can specify that the scanner should ignore case differences by checking the "Ignore Case" option on the compile tab. If you have a language that is case insensitive and has several keywords, this can be a handy feature to have. For example, if you have "THEN" as a keyword in a case insensitive language, you would need to specify a token for then as " : [tT] [hH] [eE] [nN] ;". This is a pain to enter correctly. When the ignore case option is checked, SmaCC will automatically convert "THEN" into "[tT][hH][eE][nN]". Unicode Characters SmaCC compiles the scanner into a bunch of conditional tests on characters. Normally, it assumes that characters have values between 0 and 255, and it can make some optimizations based on this fact. With the "Allow Unicode Characters" option checked, it will assume that characters have values between 0 and 65535. The Parser Parsing converts the stream of tokens provided by the scanner into some object. Normally, this object will be a parse tree, but it does not have to be a parse tree. For example, the SmaCC tutorial shows a calculator. This calculator does not produce a parse tree; it produces the result, a number. In SmaCC the parser is defined by the grammar specification entered in the 'Parser' tab. The grammar specification has two parts, an optional directives section and the production rules. The directives section is used to tell SmaCC how to handle ambiguous grammars as well as how it should generate the code for the parser. The production rules section contains the grammar for the parser and the code that executes when a production rule is matched. Directives The optional directives section consists of a set of directives. The system currently has 5 directives. Each directive begins with a "%" character and the directive keyword, then lists a set of symbols, and finally ends with the semicolon character, ";". Ambiguous Grammars and Precedence SmaCC can handle ambiguous grammars. Given an ambiguous grammar, SmaCC will produce some parser. However, it may not parse correctly. For an LR parser, there are two basic types of ambiguities, reduce/reduce conflicts and shift/reduce conflicts. Reduce/reduce conflicts are bad. SmaCC has no directives to handle them and just picks one of the choices. These conflicts normally require a rewrite of your grammar. On the other hand, shift/reduce conflicts can be handled by SmaCC without rewriting your grammar. When SmaCC encounters a shift/reduce conflict it will perform the shift action by default. However, you can control this action with the "%left", "%right", and "%nonassoc" directives. If a token has been declared in a "%left" directive, it means that the token is left-associative. Therefore, the parser will perform a reduce operation. However, if it has been declared as right-associative, it will perform a shift operation. A token defined as %nonassoc will produce an error if that is encountered during parsing. For example, you may want to specify that the equal operator, "=", is non-associative, so "a = b = c" is not parsed as a valid expression. All three directives are followed by a list of tokens. Additionally, the %left, %right, and %nonassoc directives allow precedence to be specified. The order of the directives specifies the precedence of the tokens. The higher precedence tokens appear on the higher line numbers. For example, the following directive section gives the precedence for the simple calculator in our tutorial: %left "+" "-"; %left "*" "/"; %right "^"; The "+" and "-" symbols appear on the first line and have the lowest precedence. They are also left-associative so "1 + 2 +3" will be evaluated as "(1 + 2) + 3". On the next line are the "*" and "/" symbols. Since they appear on a higher line number, they have higher precedence than the "+" and "-". Finally, on line three we have the "^" symbol. It has the highest precedence. Combining all the rules allows us to parse "1 + 2 * 3 / 4 ^ 2 ^ 3" as "1 + ((2 * 3) / (4 ^ (2 ^ 3)))". Start Symbols By default, the left-hand side of the first grammar rule is the start symbol. If you want to multiple start symbols, then you can specify them by using the "%start" directive followed by the nonterminals that are additional start symbols. This is useful for creating two parsers with two grammars that are similar but slightly different. For example, consider a Smalltalk parser. You can parse methods, and you can parse expressions. These are two different operations, but have very similar grammars. Instead of creating two different parsers for parsing methods and expressions, we can specify one grammar that parses methods and also specify another starting position for parsing expressions. The StParser in the SmaCC Example Parsers package has an example of this. The StParser class>>parseMethod: uses the #startingStateForMethod position to parse methods and the StParser class>>parseExpression: uses the #startingStateForSequenceNode position to parse expressions. Id Methods Internally, the various token types are represented as integers. However, there are times that you need to reference the various token types. For example, in the CScanner and CParser classes, the TYPE_NAME token is identical to the IDENTIFIER token. The IDENTIFIER matching method does a lookup in the type table and if it finds a type definition with the same name as the current IDENTIFIER, it want to return the TYPE_NAME token type. To determine what integer this is, the parser was created with an %id directive for and . This generates the IDENTIFIERId and TYPE_NAMEId methods on the scanner. These methods simply return the number representing that token type. See the C sample scanner and parser for a good example of how this is used. Production Rules The production rules contains the grammar for the parser. The first production rule is considered to be the starting rule for the parser. Each production rule consists of a non-terminal symbol name followed by a ":" separator which is followed by a list of possible productions separated by vertical bar, "|", and finally terminated by a semicolon, ";". Each production consists of a sequence of non-terminal symbols, tokens, or keywords followed by some optional Smalltalk code enclosed in curly brackets, {}. Non-terminal symbols are valid Smalltalk variable names and must be defined somewhere in the parser definition. Forward references are valid. Tokens are enclosed in angle brackets as they are defined in the scanner (e.g., ) and keywords are enclosed in double-quotes (e.g., "then"). Keywords that contain double-quotes need to have two double-quotes per each double-quote in the keyword. For example, if you need a keyword for one double-quote character, you would need to enter """" (four double-quote characters). The Smalltalk code is evaluated whenever that production is matched. If the code is a zero or a one argument symbol, then that method is performed. For a one argument symbol, the argument is an OrderedCollection that contains one element for each item in the production. If the code isn't a zero or one argument symbol, then the code is executed and whatever is returned by the code is the result of the production. If no Smalltalk code is specified, then the default action is to execute the #reduceFor: method. This method converts all items into an OrderedCollection. If one of the items is another OrderedCollection, then all of its elements are added to the new collection. Inside the Smalltalk code you can refer to the values of each production item by using literal strings. The literal string, '1', refers the to value of the first production item. The values for tokens and keywords will be SmaCCToken objects. The value for all non-terminal symbols will be whatever the Smalltalk code evaluates to for that non-terminal symbol. Named Symbols When entering the Smalltalk code, you can get the value for a symbol by using the literal strings (e.g., '2'). However, this creates difficulties when modifying a grammar. If you insert some symbol at the beginning of a production, then you will need to modify your Smalltalk code changing all literal string numbers. Instead you can name each symbol in the production and then refer to the name in the Smalltalk code. To name a symbol (non-terminal, token, or keyword), you need to add a quoted variable name after the symbol in the grammar. For example, "MySymbol : Expression 'expr' "+" 'num' {expr + num} ;" creates two named variables. One for the non-terminal Expression and one for the token. These variables are then used in the Smalltalk code. Extended Syntax SmaCC also has some extended syntax that makes it easier to enter different grammars. Most of the additions are for the productions, but one change that is not for productions is the addition of "::=" as the separator between the non-terminal and the production. The production syntax enhancements are listed in the following table: Symbol ? Makes symbol optional. It is equivalent to defining a new production rule: "Optional_Symbol : Symbol {'1'} | {nil};". Symbol * or Symbol + Makes a repeating symbol. The "*" repeats zero or more times, and the "+" repeats one or more times. It is equivalent to defining a new production rule: "Repeat_Symbol : | Symbol;" for "*" and "Repeat_Symbol : Symbol | Repeat_Symbol Symbol ;" for "+". ( Productions ) Groups the items in Productions. By itself it is not that useful, but it can be combined with the "?", "*", or "+". It is equivalent to defining "Group_Productions : Productions ;". [ Productions ] Equivalent to "( Productions ) ?". <% Productions %> Equivalent to "( Productions ) *" Parser Comments The compile page has three options to generate comments. You should always select the "Generate definition comments". That saves the scanner and parser definition strings into the scanner and parser classes. It allows your grammar to be under the same version control system as your Smalltalk code. The other two comment options should not be needed unless you need to debug a parser generated. The "generate symbol comments" option will generate a comment that explains what each symbol is mapped to. When SmaCC compiles a grammar it converts all symbols into integers. This comment gives you the integer for each symbol. You may need this information if you have an incorrect scanner definition. For example, you may have overlapping token definitions and SmaCC is picking the wrong one (by default it picks the first one in your scanner definition). When you debug, you can inspect the SmaCCToken object and validate its "id" with those in the symbol comment. If they are different, then you have a bug in your scanner. Finally, the "generate item set comments" option should rarely be needed. It generates a listing of all LR(1) item sets in the parser. If you are familiar with LR parsing, then it might be interesting to look at. However, for a moderate sized grammar (e.g., Java), this comment can be a few MB in size. I would not recommend generating such comments when using ENVY -- you don't want to store a 10MB method in your library. For the calculator example in the tutorial, this comment is 9,000 characters long. Error Recovery Normally, when the parser encounters an error, it raises the SmaCCParserError exception and parsing is immediately stopped. However, there are times when you may wish to try to parse more of the input. For example, if you are highlighting code, you do not want to stop highlighting at the first syntax error. Instead you may wish to attempt to recover after the statement separator -- the period ".". SmaCC uses the error symbol to specify where error recovery should be attempted. For example, we may have the following rule to specify a list of Smalltalk statements: Statements : Expression | Statements "." Expression ; If we wish to attempt recovery from a syntax error when we encounter a period, we can change our rule to be: Statements : Expression | Statements "." Expression | error "." Expression ; While the error recovery allows you to proceed parsing after a syntax error, it will not allow you to return a parse tree from the input. Once the input has been parsed with errors, it will raise a non-resumable SmaCCParserError. ! !SmaCCRHS commentStamp: 'jmb' prior: 0! SmaCCRHS represents the right hand side of the production. Instance variables: collection the collection of symbols that represent the rhs grammar the grammar that the production is in variableNames the name of each symbol in the rhs. These names can be used in the {} code blocks.! !SmaCCRegularExpressionNode commentStamp: '' prior: 0! SmaCCRegularExpressionNode represents a regular expression. The scanner is represented by a regular expression. These are the initial objects created in producing the scanner. From these nodes, we create a directed graph and then we compile the graph. Subclasses must implement the following messages: accessing possibleMatchesSize private asNFAStartingWith: possibleMatchesDo:on: Instance Variables: action the actions to be performed when we find a match position the position of the RE in the scanner. If we have multiple matches, we prefer the ones listed first.! !SmaCCCharacterRENode commentStamp: 'jmb' prior: 0! SmaCCCharacterRENode represents a regular expression that matches one of a set of characters. Instance Variables: characters The characters that this node can accept. Note that there are no duplicates and all characters are sorted. ! !SmaCCOrRENode commentStamp: 'jmb' prior: 0! SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative. Instance Variables: nodes our possible choices! !SmaCCRepeatingRENode commentStamp: 'jmb' prior: 0! SmaCCRepeatingRENode represents a repeating node in a regular expression. Instance Variables: maximumMatches the minimum number of matches required minimumMatches the maximum number of matches allowed. An infinite amount of matches is represented by (SmaCCRepeatingRENode finiteInfinity). node what we need to match! !SmaCCSequenceRENode commentStamp: 'jmb' prior: 0! SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together. Instance Variables: nodes our children nodes in left-to-right order! !SmaCCScannerCompiler commentStamp: 'jmb' prior: 0! SmaCCScannerCompiler represents the compiler for the scanner part of the parser. Instance Variables: grammar the grammar that defines the scanner scannerClass the class to compile the scanner into scannerDefinitionString the string that defines the scanner! !SmaCCScannerDefinition commentStamp: '' prior: 0! SmaCCScannerDefinition is the parsed representation of the scanner. It contains the tokens and states for the scanner. Instance Variables: excludeStates exclusive states (when we are in one of these, then we shouldn't try to parse the default tokens) states states in the scanner -- if no states are specified, then this will only contain #default tokens dictionary mapping token names to their regular expressions ! !SmaCCSymbol commentStamp: '' prior: 0! SmaCCSymbol is an abstract class that represents a symbol in the grammar. Subclasses must implement the following messages: accessing calculateFirstTerminals testing isTerminal Instance Variables: firstItems the first terminals that can be produced from us name our name precedence our precedence (in case of shift/reduce conflicts) ! !SmaCCNonTerminalSymbol commentStamp: 'jmb' prior: 0! SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar. Instance Variables: productions our rhs' for the symbol! !SmaCCStartingSymbol commentStamp: 'jmb' prior: 0! SmaCCStartingSymbol is the starting symbol in the grammar. A grammar can only have one starting symbol, but it can have may different starting item sets.! !SmaCCTerminalSymbol commentStamp: 'jmb' prior: 0! SmaCCTerminalSymbol represents a terminal symbol in our grammar. Instance Variables: createIdMethod should we create a symbolNameId method for this symbol. regularExpression our regular expression that we must match for this terminal symbol! !SmaCCSymbolSet commentStamp: 'jmb' prior: 0! SmaCCSymbolSet represents a set of follow symbols in the LALR(1) item sets. Instance Variables: components other SmaCCSymbolSets that we depend on, we include all items in these sets also symbols our follow symbols! !SmaCCCompilationNotification commentStamp: 'jmb' prior: 101167461! SmaCCCompilationNotification is a notification that is raised when we discover a problem with the parser. For example, a shift/reduce conflict will raise this notification.! !CParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "%id ; translationUnit : external_declaration | translationUnit external_declaration ; primary_expression : | | | ""("" expression "")"" ; postfix_expression : primary_expression | postfix_expression expression | postfix_expression ""("" "")"" | postfix_expression ""("" argument_expression_list "")"" | postfix_expression ""."" | postfix_expression ""->"" | postfix_expression ""++"" | postfix_expression ""--"" ; argument_expression_list : assignment_expression | argument_expression_list "","" assignment_expression ; unary_expression : postfix_expression | ""++"" unary_expression | ""--"" unary_expression | unary_operator cast_expression | ""sizeof"" unary_expression | ""sizeof"" ""("" type_name "")"" ; unary_operator : ""&"" | ""*"" | ""+"" | ""-"" | ""~"" | ""!!"" ; cast_expression : unary_expression | ""("" type_name "")"" cast_expression ; multiplicative_expression : cast_expression | multiplicative_expression ""*"" cast_expression | multiplicative_expression ""/"" cast_expression | multiplicative_expression ""%"" cast_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; logical_and_expression : inclusive_or_expression | logical_and_expression ""&&"" inclusive_or_expression ; logical_or_expression : logical_and_expression | logical_or_expression ""||"" logical_and_expression ; conditional_expression : logical_or_expression | logical_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | unary_expression assignment_operator assignment_expression ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | ""&="" | ""^="" | ""|="" ; expression : assignment_expression | expression "","" assignment_expression ; constant_expression : conditional_expression ; declaration : declaration_specifiers "";"" | declaration_specifiers init_declarator_list "";"" ; declaration_specifiers : storage_class_specifier | storage_class_specifier declaration_specifiers | type_specifier | type_specifier declaration_specifiers | type_qualifier | type_qualifier declaration_specifiers ; init_declarator_list : init_declarator | init_declarator_list "","" init_declarator ; init_declarator : declarator | declarator ""="" initializer ; storage_class_specifier : ""typedef"" | ""extern"" | ""static"" | ""auto"" | ""register"" ; type_specifier : ""void"" | ""char"" | ""short"" | ""int"" | ""long"" | ""float"" | ""double"" | ""signed"" | ""unsigned"" | struct_or_union_specifier | enum_specifier | ; struct_or_union_specifier : struct_or_union struct_declaration_list {self addTypeName: '2' value. self reduceFor: nodes} | struct_or_union struct_declaration_list | struct_or_union {self addTypeName: '2' value. self reduceFor: nodes} ; struct_or_union : ""struct"" | ""union"" ; struct_declaration_list : struct_declaration | struct_declaration_list struct_declaration ; struct_declaration : specifier_qualifier_list struct_declarator_list "";"" ; specifier_qualifier_list : type_specifier specifier_qualifier_list | type_specifier | type_qualifier specifier_qualifier_list | type_qualifier ; struct_declarator_list : struct_declarator | struct_declarator_list "","" struct_declarator ; struct_declarator : declarator | "":"" constant_expression | declarator "":"" constant_expression ; enum_specifier : ""enum"" enumerator_list | ""enum"" enumerator_list {self addTypeName: '2' value. self reduceFor: nodes} | ""enum"" {self addTypeName: '2' value. self reduceFor: nodes} ; enumerator_list : enumerator | enumerator_list "","" enumerator ; enumerator : | ""="" constant_expression ; type_qualifier : ""const"" | ""volatile"" ; declarator : pointer direct_declarator | direct_declarator ; direct_declarator : | ""("" declarator "")"" | direct_declarator constant_expression | direct_declarator | direct_declarator ""("" parameter_type_list "")"" | direct_declarator ""("" identifier_list "")"" | direct_declarator ""("" "")"" ; pointer : ""*"" | ""*"" type_qualifier_list | ""*"" pointer | ""*"" type_qualifier_list pointer ; type_qualifier_list : type_qualifier | type_qualifier_list type_qualifier ; parameter_type_list : parameter_list | parameter_list "","" ; parameter_list : parameter_declaration | parameter_list "","" parameter_declaration ; parameter_declaration : declaration_specifiers declarator | declaration_specifiers abstract_declarator | declaration_specifiers ; identifier_list : | identifier_list "","" ; type_name : specifier_qualifier_list | specifier_qualifier_list abstract_declarator ; abstract_declarator : pointer | direct_abstract_declarator | pointer direct_abstract_declarator ; direct_abstract_declarator : ""("" abstract_declarator "")"" | | constant_expression | direct_abstract_declarator | direct_abstract_declarator constant_expression | ""("" "")"" | ""("" parameter_type_list "")"" | direct_abstract_declarator ""("" "")"" | direct_abstract_declarator ""("" parameter_type_list "")"" ; initializer : assignment_expression | initializer_list | initializer_list "","" ; initializer_list : initializer | initializer_list "","" initializer ; statement : labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement ; labeled_statement : "":"" statement | ""case"" constant_expression "":"" statement | ""default"" "":"" statement ; compound_statement : | statement_list | declaration_list | declaration_list statement_list ; declaration_list : declaration | declaration_list declaration ; statement_list : statement | statement_list statement ; expression_statement : "";"" | expression "";"" ; selection_statement : ""if"" ""("" expression "")"" statement | ""if"" ""("" expression "")"" statement ""else"" statement | ""switch"" ""("" expression "")"" statement ; iteration_statement : ""while"" ""("" expression "")"" statement | ""do"" statement ""while"" ""("" expression "")"" "";"" | ""for"" ""("" expression_statement expression_statement "")"" statement | ""for"" ""("" expression_statement expression_statement expression "")"" statement ; jump_statement : ""goto"" "";"" | ""continue"" "";"" | ""break"" "";"" | ""return"" "";"" | ""return"" expression "";"" ; external_declaration : function_definition | declaration ; function_definition : declaration_specifiers declarator declaration_list compound_statement | declaration_specifiers declarator compound_statement | declarator declaration_list compound_statement | declarator compound_statement ; "! ! !CParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^CScanner! ! !CParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateFortranslationUnit ^1! ! !CParser methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! addTypeName: aString scanner addTypeName: aString! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForenumXspecifier2: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForenumXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForstructXorXunionXspecifier1: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForstructXorXunionXspecifier3: nodes self addTypeName: (nodes at: 2) value. ^ self reduceFor: nodes! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(84 1 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 4 #reduceFor:) #(84 3 #reduceFor:) #(84 3 #reduceFor:) #(84 2 #reduceFor:) #(84 2 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 1 #reduceFor:) #(85 3 #reduceFor:) #(86 1 #reduceFor:) #(86 3 #reduceFor:) #(87 1 #reduceFor:) #(87 3 #reduceFor:) #(88 1 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 2 #reduceFor:) #(88 4 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(89 1 #reduceFor:) #(90 1 #reduceFor:) #(90 4 #reduceFor:) #(91 1 #reduceFor:) #(91 2 #reduceFor:) #(92 1 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(92 3 #reduceFor:) #(93 1 #reduceFor:) #(93 3 #reduceFor:) #(93 3 #reduceFor:) #(94 1 #reduceFor:) #(94 3 #reduceFor:) #(94 3 #reduceFor:) #(95 1 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(95 3 #reduceFor:) #(96 1 #reduceFor:) #(96 3 #reduceFor:) #(96 3 #reduceFor:) #(97 1 #reduceFor:) #(97 3 #reduceFor:) #(98 1 #reduceFor:) #(98 3 #reduceFor:) #(99 1 #reduceFor:) #(99 3 #reduceFor:) #(100 1 #reduceFor:) #(100 3 #reduceFor:) #(101 1 #reduceFor:) #(101 3 #reduceFor:) #(102 1 #reduceFor:) #(102 5 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(105 1 #reduceFor:) #(105 2 #reduceFor:) #(106 1 #reduceFor:) #(106 3 #reduceFor:) #(107 2 #reduceFor:) #(107 3 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(109 1 #reduceFor:) #(110 1 #reduceFor:) #(110 1 #reduceFor:) #(111 1 #reduceFor:) #(111 3 #reduceFor:) #(112 2 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(113 1 #reduceFor:) #(114 5 #reduceActionForstructXorXunionXspecifier1:) #(114 4 #reduceFor:) #(114 2 #reduceActionForstructXorXunionXspecifier3:) #(115 4 #reduceFor:) #(115 5 #reduceActionForenumXspecifier2:) #(115 2 #reduceActionForenumXspecifier3:) #(116 1 #reduceFor:) #(116 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 2 #reduceFor:) #(119 1 #reduceFor:) #(119 3 #reduceFor:) #(120 3 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(121 2 #reduceFor:) #(121 1 #reduceFor:) #(122 1 #reduceFor:) #(122 3 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(123 3 #reduceFor:) #(124 1 #reduceFor:) #(124 3 #reduceFor:) #(125 1 #reduceFor:) #(125 3 #reduceFor:) #(126 1 #reduceFor:) #(126 2 #reduceFor:) #(126 2 #reduceFor:) #(126 3 #reduceFor:) #(127 1 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(127 4 #reduceFor:) #(127 4 #reduceFor:) #(127 3 #reduceFor:) #(128 1 #reduceFor:) #(128 3 #reduceFor:) #(129 1 #reduceFor:) #(129 3 #reduceFor:) #(130 1 #reduceFor:) #(130 2 #reduceFor:) #(131 1 #reduceFor:) #(131 3 #reduceFor:) #(133 2 #reduceFor:) #(133 2 #reduceFor:) #(133 1 #reduceFor:) #(134 1 #reduceFor:) #(134 1 #reduceFor:) #(134 2 #reduceFor:) #(135 3 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(135 2 #reduceFor:) #(135 3 #reduceFor:) #(135 3 #reduceFor:) #(135 4 #reduceFor:) #(136 1 #reduceFor:) #(136 3 #reduceFor:) #(137 3 #reduceFor:) #(137 4 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(138 3 #reduceFor:) #(138 3 #reduceFor:) #(138 4 #reduceFor:) #(139 1 #reduceFor:) #(139 2 #reduceFor:) #(140 5 #reduceFor:) #(140 7 #reduceFor:) #(140 5 #reduceFor:) #(141 5 #reduceFor:) #(141 7 #reduceFor:) #(141 6 #reduceFor:) #(141 7 #reduceFor:) #(142 3 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 2 #reduceFor:) #(142 3 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(143 1 #reduceFor:) #(144 1 #reduceFor:) #(144 2 #reduceFor:) #(145 1 #reduceFor:) #(145 2 #reduceFor:) #(146 4 #reduceFor:) #(146 3 #reduceFor:) #(146 3 #reduceFor:) #(146 2 #reduceFor:) #(149 1 #reduceFor:) #(149 2 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(150 4 #reduceFor:) )! ! !CParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 121 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 153 0 149] #[1 0 9 0 25 0 13 0 34 0 93 0 76 0 157 0 112 0 137 0 126 0 141 0 127] #[1 2 38 0 21 2 38 0 25 2 38 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 38 0 76 2 38 0 79 0 161 0 110 0 165 0 126 0 169 0 130] #[0 1 154 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 158 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 210 0 76 0 81] #[0 1 214 0 76 0 81] #[1 0 173 0 76 0 177 0 81] #[0 1 134 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 138 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 86 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 90 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 94 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 98 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 122 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 126 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 114 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 118 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 130 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 102 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 106 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 110 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 54 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 0 193 0 112 0 137 0 126 0 141 0 127] #[0 1 182 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 46 0 21 1 46 0 25 1 46 0 26 1 46 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 46 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 46 0 76 1 46 0 79 0 197 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 54 0 21 1 54 0 25 1 54 0 26 1 54 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 54 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 54 0 76 1 54 0 79 0 201 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 1 62 0 21 1 62 0 25 1 62 0 26 1 62 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 62 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 62 0 76 1 62 0 79 0 205 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 0 221 0 138 0 225 0 145] #[0 3 66 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 1 142 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 146 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[1 0 229 0 76 0 233 0 81] #[1 0 9 0 25 0 93 0 76 0 237 0 127] #[1 1 174 0 16 1 174 0 17 1 174 0 21 0 241 0 25 1 174 0 26 1 174 0 40 1 174 0 41 1 174 0 43 1 174 0 44 1 174 0 45 1 174 0 51 1 174 0 55 1 174 0 57 1 174 0 58 1 174 0 60 1 174 0 61 1 174 0 65 1 174 0 66 1 174 0 67 1 174 0 68 1 174 0 69 1 174 0 70 1 174 0 71 1 174 0 72 1 174 0 73 0 245 0 79 1 174 0 81 1 174 0 132] #[0 1 150 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 178 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 9 0 25 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 0 97 0 105 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 117 0 112 0 249 0 113 0 125 0 114 0 129 0 115 0 133 0 116 0 137 0 126 0 141 0 127 0 145 0 132 0 149 0 146 0 0 0 147] #[0 0 253 0 26] #[0 2 98 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 46 0 21 0 25 0 26 0 76 0 79] #[1 2 42 0 21 2 42 0 25 2 42 0 26 0 13 0 34 0 17 0 40 0 21 0 41 2 42 0 76 2 42 0 79 1 1 0 110 1 5 0 126] #[1 1 206 0 16 1 206 0 21 1 206 0 25 1 206 0 26 1 206 0 34 1 206 0 40 1 206 0 41 1 206 0 43 1 206 0 44 1 206 0 45 1 206 0 51 1 206 0 55 1 206 0 57 1 206 0 58 1 206 0 60 1 206 0 61 1 206 0 65 1 206 0 66 1 206 0 67 1 206 0 68 1 206 0 69 1 206 0 70 1 206 0 71 1 206 0 72 1 206 0 73 1 206 0 76 1 206 0 79 1 9 0 81 1 206 0 132] #[1 1 13 0 76 1 17 0 124 1 21 0 125] #[0 1 78 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 25 0 21 1 29 0 60] #[0 1 70 0 21 0 60] #[1 1 33 0 17 1 162 0 21 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 1 162 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 1 37 0 138 1 41 0 145] #[0 1 50 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 58 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[0 1 66 0 21 0 25 0 26 0 34 0 60 0 76 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 145 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 0 217 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 1 249 0 144 1 253 0 145] #[1 0 9 0 25 0 13 0 34 0 181 0 60 0 93 0 76 0 185 0 106 0 189 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 3 42 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 62 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 9 0 138] #[1 1 194 0 16 1 194 0 21 1 194 0 25 1 194 0 26 1 194 0 34 1 194 0 40 1 194 0 41 1 194 0 43 1 194 0 44 1 194 0 45 1 194 0 51 1 194 0 55 1 194 0 57 1 194 0 58 1 194 0 60 1 194 0 61 1 194 0 65 1 194 0 66 1 194 0 67 1 194 0 68 1 194 0 69 1 194 0 70 1 194 0 71 1 194 0 72 1 194 0 73 1 194 0 76 1 194 0 79 2 13 0 81 1 194 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 25 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 170 0 16 1 170 0 17 1 170 0 21 0 241 0 25 1 170 0 26 1 170 0 40 1 170 0 41 1 170 0 43 1 170 0 44 1 170 0 45 1 170 0 51 1 170 0 55 1 170 0 57 1 170 0 58 1 170 0 60 1 170 0 61 1 170 0 65 1 170 0 66 1 170 0 67 1 170 0 68 1 170 0 69 1 170 0 70 1 170 0 71 1 170 0 72 1 170 0 73 0 245 0 79 1 170 0 81 1 170 0 132] #[1 2 37 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 41 0 76 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 2 49 0 128 2 53 0 129 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 69 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 81 0 104 1 217 0 119] #[0 3 70 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[0 2 58 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 102 0 21 0 25 0 26 0 34 0 40 0 41 0 76 0 79] #[0 2 50 0 21 0 25 0 26 0 76 0 79] #[1 1 13 0 76 2 85 0 124 1 21 0 125] #[1 2 89 0 17 2 30 0 21 2 30 0 82] #[1 2 93 0 21 2 97 0 82] #[0 2 22 0 21 0 82] #[1 0 9 0 25 0 13 0 34 0 93 0 76 2 101 0 111 2 1 0 112 0 137 0 126 0 141 0 127] #[0 1 82 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 2 113 0 150] #[0 3 54 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 209 0 81 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 2 117 0 138] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 125 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 121 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 129 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 2 133 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 137 0 88 1 165 0 89] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 2 141 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 94 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 110 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 114 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 98 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 102 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 106 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 2 153 0 104 1 217 0 119] #[0 2 157 0 16] #[0 2 161 0 25] #[0 2 165 0 60] #[0 2 169 0 60] #[0 2 173 0 25] #[0 2 177 0 76] #[0 2 181 0 25] #[0 2 185 0 25] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 2 189 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 193 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 210 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 0 38 0 1 0 38 0 2 0 38 0 3 0 38 0 4 0 38 0 5 0 38 0 6 0 38 0 7 0 38 0 8 0 38 0 9 0 38 0 10 0 38 0 11 0 38 0 12 0 38 0 13 0 38 0 14 0 38 0 15 2 201 0 16 0 38 0 17 0 38 0 18 0 38 0 19 0 38 0 20 0 38 0 21 0 38 0 22 0 38 0 23 0 38 0 25 0 38 0 27 0 38 0 28 0 38 0 29 0 38 0 30 0 38 0 33 0 38 0 34 0 38 0 35 0 38 0 36 0 38 0 37 0 38 0 59 0 38 0 60 0 38 0 62 0 38 0 63 0 38 0 64 0 38 0 79] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 194 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 0 70 0 1 0 70 0 2 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 7 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 0 70 0 12 0 70 0 13 0 70 0 14 0 70 0 15 0 70 0 16 0 70 0 17 0 70 0 18 0 70 0 19 2 205 0 20 0 70 0 21 2 209 0 22 2 213 0 23 2 217 0 25 0 70 0 26 2 221 0 27 0 70 0 28 0 70 0 29 0 70 0 30 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 36 0 70 0 37 0 70 0 59 0 70 0 60 0 70 0 62 0 70 0 63 0 70 0 64 2 225 0 79 0 70 0 80 0 70 0 82] #[0 0 6 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 214 0 16 0 21 0 26 0 60 0 80] #[1 0 118 0 1 0 118 0 2 0 118 0 3 0 118 0 4 0 118 0 5 0 118 0 6 0 118 0 7 0 118 0 8 0 118 0 9 2 229 0 10 2 233 0 11 2 237 0 12 2 241 0 13 0 118 0 14 0 118 0 15 0 118 0 16 2 245 0 17 0 118 0 18 2 249 0 19 0 118 0 21 0 118 0 26 0 118 0 28 0 118 0 29 0 118 0 30 0 118 0 33 0 118 0 34 0 118 0 35 0 118 0 36 2 253 0 37 3 1 0 59 0 118 0 60 3 5 0 62 3 9 0 63 3 13 0 64 0 118 0 80 0 118 0 82 3 17 0 103] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 3 21 0 90] #[0 0 134 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 150 0 1 0 150 0 2 0 150 0 3 0 150 0 4 0 150 0 5 0 150 0 6 0 150 0 7 0 150 0 8 0 150 0 9 0 150 0 14 0 150 0 15 0 150 0 16 0 150 0 18 0 150 0 21 0 150 0 26 0 150 0 28 3 25 0 29 3 29 0 30 0 150 0 33 3 33 0 34 0 150 0 35 0 150 0 36 0 150 0 60 0 150 0 80 0 150 0 82] #[1 0 162 0 1 0 162 0 2 0 162 0 3 0 162 0 4 0 162 0 5 0 162 0 6 0 162 0 7 0 162 0 8 0 162 0 9 0 162 0 14 0 162 0 15 0 162 0 16 0 162 0 18 0 162 0 21 0 162 0 26 0 162 0 28 0 162 0 33 3 37 0 35 3 41 0 36 0 162 0 60 0 162 0 80 0 162 0 82] #[1 0 174 0 1 0 174 0 2 0 174 0 3 0 174 0 4 0 174 0 5 0 174 0 6 0 174 0 7 0 174 0 8 0 174 0 9 3 45 0 14 0 174 0 15 0 174 0 16 0 174 0 18 0 174 0 21 0 174 0 26 0 174 0 28 3 49 0 33 0 174 0 60 0 174 0 80 0 174 0 82] #[1 0 194 0 1 0 194 0 2 0 194 0 3 0 194 0 4 0 194 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 194 0 9 0 194 0 15 0 194 0 16 3 65 0 18 0 194 0 21 0 194 0 26 0 194 0 28 0 194 0 60 0 194 0 80 0 194 0 82] #[1 0 206 0 1 0 206 0 2 3 69 0 3 3 73 0 4 0 206 0 5 0 206 0 9 0 206 0 15 0 206 0 16 0 206 0 21 0 206 0 26 0 206 0 28 0 206 0 60 0 206 0 80 0 206 0 82] #[1 1 230 0 1 1 230 0 2 1 230 0 5 1 230 0 9 1 230 0 15 1 230 0 16 1 230 0 21 1 230 0 26 3 77 0 28 1 230 0 60 1 230 0 80 1 230 0 82] #[1 3 81 0 21 3 85 0 60] #[1 3 89 0 2 0 230 0 5 0 230 0 9 0 230 0 15 0 230 0 16 0 230 0 21 0 230 0 26 0 230 0 60 0 230 0 80 0 230 0 82] #[1 3 93 0 5 0 238 0 9 0 238 0 15 0 238 0 16 0 238 0 21 0 238 0 26 0 238 0 60 0 238 0 80 0 238 0 82] #[1 3 97 0 9 3 101 0 15 0 246 0 16 0 246 0 21 0 246 0 26 0 246 0 60 0 246 0 80 0 246 0 82] #[0 0 62 0 16 0 21 0 26 0 60 0 80 0 82] #[1 3 105 0 1 0 222 0 2 0 222 0 5 0 222 0 9 0 222 0 15 0 222 0 16 0 222 0 21 0 222 0 26 0 222 0 60 0 222 0 80 0 222 0 82] #[0 3 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 3 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 109 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 0 17 0 40 0 21 0 41 1 93 0 42 0 25 0 43 0 29 0 44 0 33 0 45 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 0 37 0 51 1 113 0 52 1 117 0 53 1 121 0 54 0 41 0 55 1 125 0 56 0 45 0 57 0 49 0 58 1 129 0 60 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 3 117 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 0 213 0 105 2 5 0 107 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 0 145 0 132 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 1 245 0 143 3 121 0 144] #[1 1 33 0 17 1 162 0 21 1 162 0 60] #[0 3 46 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132] #[0 3 58 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 125 0 118 2 29 0 120 2 33 0 121 0 145 0 132] #[1 1 246 0 16 1 246 0 25 1 246 0 26 1 246 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 246 0 76 1 246 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 129 0 121 0 145 0 132] #[1 1 254 0 16 1 254 0 25 1 254 0 26 1 254 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 1 254 0 76 1 254 0 79 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 133 0 121 0 145 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 3 137 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 222 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 3 153 0 122 3 157 0 123 0 137 0 126 0 141 0 127] #[0 2 78 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 2 90 0 21 0 26] #[1 2 122 0 21 3 161 0 25 2 122 0 26 0 13 0 34 0 93 0 76 3 165 0 79 3 169 0 112 3 173 0 126 0 141 0 127 3 177 0 134 3 181 0 135] #[0 3 185 0 26] #[1 3 189 0 21 3 193 0 26] #[1 3 197 0 21 2 82 0 26] #[0 2 106 0 21 0 26] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 2 66 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 0 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 1 42 0 16 0 21 0 60 0 80 0 82] #[0 3 201 0 80] #[1 2 93 0 21 3 205 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 3 209 0 104 1 217 0 119] #[1 1 13 0 76 3 213 0 125] #[0 1 198 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 74 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 3 217 0 136 3 221 0 150] #[0 3 74 0 21 0 60 0 82] #[0 1 166 0 21 0 60] #[0 3 50 0 25 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 3 225 0 91 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 2 145 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 1 217 0 119 2 149 0 121 0 145 0 132] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 3 229 0 26] #[1 3 81 0 21 3 233 0 26] #[1 3 237 0 25 0 126 0 26 0 13 0 34 3 165 0 79 3 241 0 126 3 245 0 134 3 181 0 135] #[0 3 249 0 16] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 253 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 1 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 250 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 5 0 139] #[0 4 9 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 13 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 17 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 21 0 53] #[0 3 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 25 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 29 0 143] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 4 33 0 76] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 4 37 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 41 0 86 4 45 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 4 49 0 76] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 53 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 1 10 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 14 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 2 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 0 254 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 18 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 22 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 26 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 30 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[0 1 34 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 76 0 77 0 78] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 57 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 61 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 65 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 69 0 90] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 73 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 4 77 0 92] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 81 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 4 85 0 93] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 89 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 93 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 97 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 4 101 0 94] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 105 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 4 109 0 95] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 4 113 0 96] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 4 117 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 2 214 0 20 0 23 0 24 0 25 0 26 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 121 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 125 0 99 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 4 129 0 100 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 4 133 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 4 137 0 97] #[0 2 198 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 3 38 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 202 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 4 141 0 82 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 3 113 0 143] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 85 0 72 0 89 0 73 4 145 0 82 2 17 0 109 2 21 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 141 0 120 2 33 0 121 0 145 0 132] #[0 1 242 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 250 0 16 0 25 0 26 0 34 0 76 0 79] #[0 1 190 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 1 226 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 149 0 104 1 217 0 119] #[1 4 153 0 16 2 10 0 21 2 10 0 60] #[1 4 157 0 21 4 161 0 60] #[0 2 2 0 21 0 60] #[1 3 161 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 0 93 0 76 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 157 0 112 0 125 0 114 0 129 0 115 0 133 0 116 3 173 0 126 0 141 0 127 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 4 177 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 4 181 0 104 1 217 0 119] #[0 2 114 0 21 0 26] #[1 2 126 0 21 3 161 0 25 2 126 0 26 0 93 0 76 3 165 0 79 0 237 0 127 4 185 0 135] #[0 2 118 0 21 0 26] #[1 2 130 0 21 4 189 0 25 2 130 0 26 4 193 0 79] #[0 2 70 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 4 197 0 76] #[0 2 74 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[1 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 4 201 0 74 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 0 145 0 132 4 205 0 133] #[0 2 62 0 16 0 17 0 21 0 25 0 26 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 79 0 81 0 132] #[0 1 202 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 34 0 21 0 82] #[0 2 26 0 21 0 82] #[1 4 209 0 21 4 213 0 82] #[0 2 174 0 21 0 82] #[0 4 217 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 4 221 0 90] #[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 237 0 25 4 165 0 26 0 13 0 34 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 3 165 0 79 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 3 241 0 126 4 169 0 128 2 57 0 131 0 145 0 132 2 61 0 133 4 173 0 134 3 181 0 135] #[1 3 237 0 25 2 126 0 26 3 165 0 79 4 185 0 135] #[0 0 130 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 4 225 0 143] #[0 2 190 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 229 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 129 0 60 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 4 233 0 139] #[0 2 246 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 4 237 0 26] #[1 3 81 0 21 4 241 0 26] #[0 4 245 0 25] #[0 3 6 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 182 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 4 249 0 21 4 253 0 26] #[0 0 54 0 21 0 26] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 3 81 0 21 5 1 0 80] #[0 0 66 0 16 0 21 0 26 0 60 0 80 0 82] #[0 0 142 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 146 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[0 0 138 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 14 0 15 0 16 0 18 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 60 0 80 0 82] #[1 0 154 0 1 0 154 0 2 0 154 0 3 0 154 0 4 0 154 0 5 0 154 0 6 0 154 0 7 0 154 0 8 0 154 0 9 0 154 0 14 0 154 0 15 0 154 0 16 0 154 0 18 0 154 0 21 0 154 0 26 0 154 0 28 3 25 0 29 3 29 0 30 0 154 0 33 3 33 0 34 0 154 0 35 0 154 0 36 0 154 0 60 0 154 0 80 0 154 0 82] #[1 0 158 0 1 0 158 0 2 0 158 0 3 0 158 0 4 0 158 0 5 0 158 0 6 0 158 0 7 0 158 0 8 0 158 0 9 0 158 0 14 0 158 0 15 0 158 0 16 0 158 0 18 0 158 0 21 0 158 0 26 0 158 0 28 3 25 0 29 3 29 0 30 0 158 0 33 3 33 0 34 0 158 0 35 0 158 0 36 0 158 0 60 0 158 0 80 0 158 0 82] #[1 0 170 0 1 0 170 0 2 0 170 0 3 0 170 0 4 0 170 0 5 0 170 0 6 0 170 0 7 0 170 0 8 0 170 0 9 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 18 0 170 0 21 0 170 0 26 0 170 0 28 0 170 0 33 3 37 0 35 3 41 0 36 0 170 0 60 0 170 0 80 0 170 0 82] #[1 0 166 0 1 0 166 0 2 0 166 0 3 0 166 0 4 0 166 0 5 0 166 0 6 0 166 0 7 0 166 0 8 0 166 0 9 0 166 0 14 0 166 0 15 0 166 0 16 0 166 0 18 0 166 0 21 0 166 0 26 0 166 0 28 0 166 0 33 3 37 0 35 3 41 0 36 0 166 0 60 0 166 0 80 0 166 0 82] #[1 0 182 0 1 0 182 0 2 0 182 0 3 0 182 0 4 0 182 0 5 0 182 0 6 0 182 0 7 0 182 0 8 0 182 0 9 3 45 0 14 0 182 0 15 0 182 0 16 0 182 0 18 0 182 0 21 0 182 0 26 0 182 0 28 3 49 0 33 0 182 0 60 0 182 0 80 0 182 0 82] #[1 0 186 0 1 0 186 0 2 0 186 0 3 0 186 0 4 0 186 0 5 0 186 0 6 0 186 0 7 0 186 0 8 0 186 0 9 3 45 0 14 0 186 0 15 0 186 0 16 0 186 0 18 0 186 0 21 0 186 0 26 0 186 0 28 3 49 0 33 0 186 0 60 0 186 0 80 0 186 0 82] #[1 0 190 0 1 0 190 0 2 0 190 0 3 0 190 0 4 0 190 0 5 0 190 0 6 0 190 0 7 0 190 0 8 0 190 0 9 3 45 0 14 0 190 0 15 0 190 0 16 0 190 0 18 0 190 0 21 0 190 0 26 0 190 0 28 3 49 0 33 0 190 0 60 0 190 0 80 0 190 0 82] #[1 0 178 0 1 0 178 0 2 0 178 0 3 0 178 0 4 0 178 0 5 0 178 0 6 0 178 0 7 0 178 0 8 0 178 0 9 3 45 0 14 0 178 0 15 0 178 0 16 0 178 0 18 0 178 0 21 0 178 0 26 0 178 0 28 3 49 0 33 0 178 0 60 0 178 0 80 0 178 0 82] #[1 0 198 0 1 0 198 0 2 0 198 0 3 0 198 0 4 0 198 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 198 0 9 0 198 0 15 0 198 0 16 3 65 0 18 0 198 0 21 0 198 0 26 0 198 0 28 0 198 0 60 0 198 0 80 0 198 0 82] #[1 0 202 0 1 0 202 0 2 0 202 0 3 0 202 0 4 0 202 0 5 3 53 0 6 3 57 0 7 3 61 0 8 0 202 0 9 0 202 0 15 0 202 0 16 3 65 0 18 0 202 0 21 0 202 0 26 0 202 0 28 0 202 0 60 0 202 0 80 0 202 0 82] #[1 0 210 0 1 0 210 0 2 3 69 0 3 3 73 0 4 0 210 0 5 0 210 0 9 0 210 0 15 0 210 0 16 0 210 0 21 0 210 0 26 0 210 0 28 0 210 0 60 0 210 0 80 0 210 0 82] #[0 0 218 0 16 0 21 0 26 0 60 0 80] #[1 3 105 0 1 0 226 0 2 0 226 0 5 0 226 0 9 0 226 0 15 0 226 0 16 0 226 0 21 0 226 0 26 0 226 0 60 0 226 0 80 0 226 0 82] #[1 3 89 0 2 0 234 0 5 0 234 0 9 0 234 0 15 0 234 0 16 0 234 0 21 0 234 0 26 0 234 0 60 0 234 0 80 0 234 0 82] #[1 3 93 0 5 0 242 0 9 0 242 0 15 0 242 0 16 0 242 0 21 0 242 0 26 0 242 0 60 0 242 0 80 0 242 0 82] #[1 5 5 0 16 3 81 0 21] #[1 1 234 0 1 1 234 0 2 1 234 0 5 1 234 0 9 1 234 0 15 1 234 0 16 1 234 0 21 1 234 0 26 3 77 0 28 1 234 0 60 1 234 0 80 1 234 0 82] #[0 2 206 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 77 0 78 0 81 0 82 0 132 0 147] #[0 1 186 0 16 0 21 0 25 0 26 0 34 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 57 0 58 0 60 0 61 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 76 0 79 0 132] #[0 2 14 0 21 0 60] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 9 0 104 1 217 0 119] #[1 3 145 0 16 0 9 0 25 0 13 0 34 0 93 0 76 3 149 0 112 5 13 0 123 0 137 0 126 0 141 0 127] #[0 1 238 0 40 0 41 0 43 0 44 0 45 0 51 0 55 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 82 0 132] #[0 2 158 0 21 0 25 0 26 0 79] #[0 5 17 0 26] #[0 5 21 0 26] #[0 2 142 0 21 0 25 0 26 0 79] #[0 5 25 0 80] #[1 2 134 0 21 4 189 0 25 2 134 0 26 4 193 0 79] #[1 5 29 0 26 0 17 0 40 0 21 0 41 0 25 0 43 0 29 0 44 0 33 0 45 0 37 0 51 0 41 0 55 0 45 0 57 0 49 0 58 0 53 0 61 0 57 0 65 0 61 0 66 0 65 0 67 0 69 0 68 0 73 0 69 0 77 0 70 0 81 0 71 0 85 0 72 0 89 0 73 2 45 0 105 0 105 0 108 0 109 0 109 0 113 0 110 0 125 0 114 0 129 0 115 0 133 0 116 5 33 0 128 2 57 0 131 0 145 0 132 2 61 0 133] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 5 37 0 80 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 2 77 0 102 5 41 0 104 1 217 0 119] #[0 2 94 0 21 0 26] #[0 2 86 0 26] #[0 2 110 0 21 0 26] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 2 105 0 81 5 45 0 82 1 149 0 84 1 153 0 85 2 109 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 5 49 0 150] #[0 3 78 0 21 0 60 0 82] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 0 122 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 21 0 26 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 80 0 82] #[0 2 186 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 53 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 5 57 0 26 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 61 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 65 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 69 0 143] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 5 73 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 5 77 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 33 0 34 0 35 0 36 0 37 0 59 0 60 0 62 0 63 0 64 0 79 0 80 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 2 65 0 76 1 137 0 77 1 141 0 78 1 149 0 84 1 153 0 85 2 73 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 201 0 99 1 205 0 100 1 209 0 101 5 81 0 102 1 217 0 119] #[0 2 18 0 21 0 60] #[0 2 6 0 21 0 60] #[0 2 162 0 21 0 25 0 26 0 79] #[0 2 138 0 21 0 25 0 26 0 79] #[0 2 146 0 21 0 25 0 26 0 79] #[0 2 166 0 21 0 25 0 26 0 79] #[0 5 85 0 26] #[0 2 150 0 21 0 25 0 26 0 79] #[0 5 89 0 80] #[0 3 82 0 21 0 60 0 82] #[0 2 178 0 21 0 82] #[1 2 218 0 20 2 218 0 23 2 218 0 24 2 218 0 25 2 218 0 28 2 218 0 31 2 218 0 32 2 218 0 34 2 218 0 35 2 218 0 36 2 218 0 38 2 218 0 39 2 218 0 42 5 93 0 46 2 218 0 47 2 218 0 48 2 218 0 49 2 218 0 50 2 218 0 52 2 218 0 53 2 218 0 54 2 218 0 56 2 218 0 60 2 218 0 76 2 218 0 77 2 218 0 78 2 218 0 81 2 218 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 97 0 143] #[1 3 81 0 21 5 101 0 26] #[0 2 226 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 230 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 3 81 0 21 5 105 0 26] #[0 0 58 0 21 0 26] #[0 0 250 0 16 0 21 0 26 0 60 0 80 0 82] #[0 2 170 0 21 0 25 0 26 0 79] #[0 2 154 0 21 0 25 0 26 0 79] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 109 0 143] #[0 2 238 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[1 1 45 0 20 1 49 0 23 1 53 0 24 1 57 0 25 1 61 0 28 1 65 0 31 1 69 0 32 1 73 0 34 1 77 0 35 1 81 0 36 1 85 0 38 1 89 0 39 1 93 0 42 1 97 0 47 1 101 0 48 1 105 0 49 1 109 0 50 1 113 0 52 1 117 0 53 1 121 0 54 1 125 0 56 1 129 0 60 1 133 0 76 1 137 0 77 1 141 0 78 0 209 0 81 1 149 0 84 1 153 0 85 1 157 0 87 1 161 0 88 1 165 0 89 1 169 0 90 1 173 0 92 1 177 0 93 1 181 0 94 1 185 0 95 1 189 0 96 1 193 0 97 1 197 0 98 1 201 0 99 1 205 0 100 1 209 0 101 1 213 0 102 1 217 0 119 1 221 0 137 1 225 0 138 1 229 0 139 1 233 0 140 1 237 0 141 1 241 0 142 5 113 0 143] #[0 5 117 0 60] #[0 2 222 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 242 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] #[0 2 234 0 20 0 23 0 24 0 25 0 28 0 31 0 32 0 34 0 35 0 36 0 38 0 39 0 42 0 46 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 56 0 60 0 76 0 77 0 78 0 81 0 82] )! ! !JavaParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! parserDefinitionComment "goal : compilation_unit ; # 19.3) Lexical Structure. literal : | | # | ""true"" # | ""false"" | | | ; # 19.4) Types, Values, and Variables type : primitive_type | reference_type ; primitive_type : numeric_type | ""boolean"" ; numeric_type: integral_type | floating_point_type ; integral_type : ""byte"" | ""short"" | ""int"" | ""long"" | ""char"" ; floating_point_type : ""float"" | ""double"" ; reference_type : class_or_interface_type | array_type ; class_or_interface_type : name; class_type : class_or_interface_type; interface_type : class_or_interface_type; array_type : primitive_type dims | name dims ; # 19.5) Names name : simple_name | qualified_name ; simple_name : ; qualified_name : name ""."" ; # 19.6) ""package""s compilation_unit : package_declaration_opt import_declarations_opt type_declarations_opt ; package_declaration_opt : package_declaration | ; import_declarations_opt : import_declarations | ; type_declarations_opt : type_declarations | ; import_declarations : import_declaration | import_declarations import_declaration ; type_declarations : type_declaration | type_declarations type_declaration ; package_declaration : ""package"" name "";"" ; import_declaration : single_type_import_declaration | type_import_on_demand_declaration ; single_type_import_declaration : ""import"" name "";"" ; type_import_on_demand_declaration : ""import"" name ""."" ""*"" "";"" ; type_declaration : class_declaration | interface_declaration | "";"" ; # 19.7) Productions used only in the LALR(1) grammar modifiers_opt: | modifiers ; modifiers : modifier | modifiers modifier ; modifier : ""public"" | ""protected"" | ""private"" | ""static"" | ""abstract"" | ""final"" | ""native"" | ""synchronized"" | ""transient"" | ""volatile"" | ""strictfp"" # note that semantic analysis must check that the # context of the modifier allows strictfp. ; # 19.8) Classes # 19.8.1) Class Declaration: class_declaration : modifiers_opt ""class"" super_opt interfaces_opt class_body ; super : ""extends"" class_type ; super_opt : | super ; interfaces : ""implements"" interface_type_list ; interfaces_opt: | interfaces ; interface_type_list : interface_type | interface_type_list "","" interface_type ; class_body : ""{"" class_body_declarations_opt ""}"" ; class_body_declarations_opt : | class_body_declarations ; class_body_declarations : class_body_declaration | class_body_declarations class_body_declaration ; class_body_declaration : class_member_declaration | static_initializer | constructor_declaration | block ; class_member_declaration : field_declaration | method_declaration # repeat the prod for 'class_declaration' here: | modifiers_opt ""class"" super_opt interfaces_opt class_body | interface_declaration | "";"" ; # 19.8.2) Field Declarations field_declaration : modifiers_opt type variable_declarators "";"" ; variable_declarators : variable_declarator | variable_declarators "","" variable_declarator ; variable_declarator : variable_declarator_id | variable_declarator_id ""="" variable_initializer ; variable_declarator_id : | variable_declarator_id ""["" ""]"" ; variable_initializer : expression | array_initializer ; # 19.8.3) Method Declarations method_declaration : method_header method_body ; method_header : modifiers_opt type method_declarator throws_opt | modifiers_opt ""void"" method_declarator throws_opt ; method_declarator : ""("" formal_parameter_list_opt "")"" | method_declarator ""["" ""]"" # deprecated # be careful; the above production also allows 'void foo() []' ; formal_parameter_list_opt : | formal_parameter_list ; formal_parameter_list : formal_parameter | formal_parameter_list "","" formal_parameter ; formal_parameter : type variable_declarator_id | ""final"" type variable_declarator_id ; throws_opt : | throws ; throws : ""throws"" class_type_list ; class_type_list : class_type | class_type_list "","" class_type ; method_body : block | "";"" ; # 19.8.4) Static Initializers static_initializer : ""static"" block ; # 19.8.5) Constructor Declarations constructor_declaration : modifiers_opt constructor_declarator throws_opt constructor_body ; constructor_declarator : simple_name ""("" formal_parameter_list_opt "")"" ; constructor_body : ""{"" explicit_constructor_invocation block_statements ""}"" | ""{"" explicit_constructor_invocation ""}"" | ""{"" block_statements ""}"" | ""{"" ""}"" ; explicit_constructor_invocation : ""this"" ""("" argument_list_opt "")"" "";"" | ""super"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""this"" ""("" argument_list_opt "")"" "";"" | primary ""."" ""super"" ""("" argument_list_opt "")"" "";"" ; # 19.9) Interfaces # 19.9.1) Interface Declarations interface_declaration : modifiers_opt ""interface"" extends_interfaces_opt interface_body ; extends_interfaces_opt : | extends_interfaces ; extends_interfaces : ""extends"" interface_type | extends_interfaces "","" interface_type ; interface_body : ""{"" interface_member_declarations_opt ""}"" ; interface_member_declarations_opt : | interface_member_declarations ; interface_member_declarations : interface_member_declaration | interface_member_declarations interface_member_declaration ; interface_member_declaration : constant_declaration | abstract_method_declaration | class_declaration | interface_declaration ; constant_declaration : field_declaration # need to semantically check that modifiers of field declaration # include only PUBLIC, ""static"", or ""final"". Other modifiers are # disallowed. ; abstract_method_declaration : method_header "";"" ; # 19.10) Arrays array_initializer : ""{"" variable_initializers "","" ""}"" | ""{"" variable_initializers ""}"" | ""{"" "","" ""}"" | ""{"" ""}"" ; variable_initializers : variable_initializer | variable_initializers "","" variable_initializer ; # 19.11) Blocks and Statements block : ""{"" block_statements_opt ""}"" ; block_statements_opt : | block_statements ; block_statements : block_statement | block_statements block_statement ; block_statement : local_variable_declaration_statement | statement | class_declaration | interface_declaration ; local_variable_declaration_statement : local_variable_declaration "";"" ; local_variable_declaration : type variable_declarators | ""final"" type variable_declarators ; statement : statement_without_trailing_substatement | labeled_statement | if_then_statement | if_then_else_statement | while_statement | for_statement ; statement_no_short_if : statement_without_trailing_substatement | labeled_statement_no_short_if | if_then_else_statement_no_short_if | while_statement_no_short_if | for_statement_no_short_if ; statement_without_trailing_substatement : block | empty_statement | expression_statement | switch_statement | do_statement | break_statement | continue_statement | return_statement | synchronized_statement | throw_statement | try_statement ; empty_statement : "";"" ; labeled_statement : "":"" statement ; labeled_statement_no_short_if : "":"" statement_no_short_if ; expression_statement : statement_expression "";"" ; statement_expression : assignment | preincrement_expression | predecrement_expression | postincrement_expression | postdecrement_expression | method_invocation | class_instance_creation_expression ; if_then_statement : ""if"" ""("" expression "")"" statement ; if_then_else_statement : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement ; if_then_else_statement_no_short_if : ""if"" ""("" expression "")"" statement_no_short_if ""else"" statement_no_short_if ; switch_statement : ""switch"" ""("" expression "")"" switch_block ; switch_block : ""{"" switch_block_statement_groups switch_labels ""}"" | ""{"" switch_block_statement_groups ""}"" | ""{"" switch_labels ""}"" | ""{"" ""}"" ; switch_block_statement_groups : switch_block_statement_group | switch_block_statement_groups switch_block_statement_group ; switch_block_statement_group : switch_labels block_statements ; switch_labels : switch_label | switch_labels switch_label ; switch_label : ""case"" constant_expression "":"" | ""default"" "":"" ; while_statement : ""while"" ""("" expression "")"" statement ; while_statement_no_short_if : ""while"" ""("" expression "")"" statement_no_short_if ; do_statement : ""do"" statement ""while"" ""("" expression "")"" "";"" ; for_statement : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement ; for_statement_no_short_if : ""for"" ""("" for_init_opt "";"" expression_opt "";"" for_update_opt "")"" statement_no_short_if ; for_init_opt : | for_init ; for_init : statement_expression_list | local_variable_declaration ; for_update_opt : | for_update ; for_update : statement_expression_list ; statement_expression_list : statement_expression | statement_expression_list "","" statement_expression ; identifier_opt : | ; break_statement : ""break"" identifier_opt "";"" ; continue_statement : ""continue"" identifier_opt "";"" ; return_statement : ""return"" expression_opt "";"" ; throw_statement : ""throw"" expression "";"" ; synchronized_statement : ""synchronized"" ""("" expression "")"" block ; try_statement : ""try"" block catches | ""try"" block catches_opt finally ; catches_opt : | catches ; catches : catch_clause | catches catch_clause ; catch_clause : ""catch"" ""("" formal_parameter "")"" block ; finally : ""finally"" block ; # 19.12) Expressions primary : primary_no_new_array | array_creation_expression ; primary_no_new_array : literal | ""this"" | ""("" expression "")"" | class_instance_creation_expression | field_access | method_invocation | array_access | primitive_type ""."" ""class"" | ""void"" ""."" ""class"" | array_type ""."" ""class"" | name ""."" ""class"" | name ""."" ""this"" ; class_instance_creation_expression : ""new"" class_type ""("" argument_list_opt "")"" | ""new"" class_type ""("" argument_list_opt "")"" class_body | primary ""."" ""new"" ""("" argument_list_opt "")"" | primary ""."" ""new"" ""("" argument_list_opt "")"" class_body ; argument_list_opt : | argument_list ; argument_list : expression | argument_list "","" expression ; array_creation_expression : ""new"" primitive_type dim_exprs dims_opt | ""new"" class_or_interface_type dim_exprs dims_opt | ""new"" primitive_type dims array_initializer | ""new"" class_or_interface_type dims array_initializer ; dim_exprs : dim_expr | dim_exprs dim_expr ; dim_expr : ""["" expression ""]"" ; dims_opt : | dims ; dims : ""["" ""]"" | dims ""["" ""]"" ; field_access : primary ""."" | ""super"" ""."" | name ""."" ""super"" ""."" ; method_invocation : name ""("" argument_list_opt "")"" | primary ""."" ""("" argument_list_opt "")"" | ""super"" ""."" ""("" argument_list_opt "")"" | name ""."" ""super"" ""."" ""("" argument_list_opt "")"" ; array_access : name ""["" expression ""]"" | primary_no_new_array ""["" expression ""]"" ; postfix_expression : primary | name | postincrement_expression | postdecrement_expression ; postincrement_expression : postfix_expression ""++"" ; postdecrement_expression : postfix_expression ""--"" ; unary_expression : preincrement_expression | predecrement_expression | ""+"" unary_expression | ""-"" unary_expression | unary_expression_not_plus_minus ; preincrement_expression : ""++"" unary_expression ; predecrement_expression : ""--"" unary_expression ; unary_expression_not_plus_minus : postfix_expression | ""~"" unary_expression | ""!!"" unary_expression | cast_expression ; cast_expression : ""("" primitive_type dims_opt "")"" unary_expression | ""("" expression "")"" unary_expression_not_plus_minus | ""("" name dims "")"" unary_expression_not_plus_minus ; multiplicative_expression : unary_expression | multiplicative_expression ""*"" unary_expression | multiplicative_expression ""/"" unary_expression | multiplicative_expression ""%"" unary_expression ; additive_expression : multiplicative_expression | additive_expression ""+"" multiplicative_expression | additive_expression ""-"" multiplicative_expression ; shift_expression : additive_expression | shift_expression ""<<"" additive_expression | shift_expression "">>"" additive_expression | shift_expression "">>>"" additive_expression ; relational_expression : shift_expression | relational_expression ""<"" shift_expression | relational_expression "">"" shift_expression | relational_expression ""<="" shift_expression | relational_expression "">="" shift_expression | relational_expression ""instanceof"" reference_type ; equality_expression : relational_expression | equality_expression ""=="" relational_expression | equality_expression ""!!="" relational_expression ; and_expression : equality_expression | and_expression ""&"" equality_expression ; exclusive_or_expression : and_expression | exclusive_or_expression ""^"" and_expression ; inclusive_or_expression : exclusive_or_expression | inclusive_or_expression ""|"" exclusive_or_expression ; conditional_and_expression : inclusive_or_expression | conditional_and_expression ""&&"" inclusive_or_expression ; conditional_or_expression : conditional_and_expression | conditional_or_expression ""||"" conditional_and_expression ; conditional_expression : conditional_or_expression | conditional_or_expression ""?"" expression "":"" conditional_expression ; assignment_expression : conditional_expression | assignment ; assignment : left_hand_side assignment_operator assignment_expression ; left_hand_side : name | field_access | array_access ; assignment_operator : ""="" | ""*="" | ""/="" | ""%="" | ""+="" | ""-="" | ""<<="" | "">>="" | "">>>="" | ""&="" | ""^="" | ""|="" ; expression_opt : | expression ; expression : assignment_expression ; constant_expression : expression ;"! ! !JavaParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50'! scannerClass ^JavaScanner! ! !JavaParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForgoal ^1! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! reduceTable ^#( #(103 1 #reduceFor:) #(103 1 #reduceFor:) #(104 1 #reduceFor:) #(104 1 #reduceFor:) #(105 1 #reduceFor:) #(105 1 #reduceFor:) #(106 1 #reduceFor:) #(106 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(107 1 #reduceFor:) #(108 1 #reduceFor:) #(108 1 #reduceFor:) #(109 1 #reduceFor:) #(110 2 #reduceFor:) #(110 2 #reduceFor:) #(111 1 #reduceFor:) #(111 1 #reduceFor:) #(112 1 #reduceFor:) #(113 1 #reduceFor:) #(114 2 #reduceFor:) #(114 3 #reduceFor:) #(115 1 #reduceFor:) #(116 3 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(117 1 #reduceFor:) #(118 1 #reduceFor:) #(118 0 #reduceFor:) #(119 1 #reduceFor:) #(119 0 #reduceFor:) #(120 1 #reduceFor:) #(120 0 #reduceFor:) #(121 3 #reduceFor:) #(122 1 #reduceFor:) #(122 2 #reduceFor:) #(123 1 #reduceFor:) #(123 2 #reduceFor:) #(124 1 #reduceFor:) #(124 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(125 1 #reduceFor:) #(126 3 #reduceFor:) #(127 5 #reduceFor:) #(128 6 #reduceFor:) #(129 5 #reduceFor:) #(130 1 #reduceFor:) #(131 0 #reduceFor:) #(131 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(132 1 #reduceFor:) #(133 0 #reduceFor:) #(133 1 #reduceFor:) #(134 0 #reduceFor:) #(134 1 #reduceFor:) #(135 3 #reduceFor:) #(136 2 #reduceFor:) #(137 1 #reduceFor:) #(137 3 #reduceFor:) #(138 2 #reduceFor:) #(139 0 #reduceFor:) #(139 1 #reduceFor:) #(140 1 #reduceFor:) #(140 2 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(141 1 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(142 6 #reduceFor:) #(142 1 #reduceFor:) #(142 1 #reduceFor:) #(143 2 #reduceFor:) #(144 4 #reduceFor:) #(145 3 #reduceFor:) #(146 4 #reduceFor:) #(147 2 #reduceFor:) #(148 1 #reduceFor:) #(148 3 #reduceFor:) #(149 1 #reduceFor:) #(149 3 #reduceFor:) #(150 1 #reduceFor:) #(150 3 #reduceFor:) #(151 1 #reduceFor:) #(151 1 #reduceFor:) #(152 1 #reduceFor:) #(153 4 #reduceFor:) #(153 3 #reduceFor:) #(153 3 #reduceFor:) #(153 2 #reduceFor:) #(154 4 #reduceFor:) #(154 4 #reduceFor:) #(155 1 #reduceFor:) #(155 1 #reduceFor:) #(156 4 #reduceFor:) #(156 3 #reduceFor:) #(157 0 #reduceFor:) #(157 1 #reduceFor:) #(158 0 #reduceFor:) #(158 1 #reduceFor:) #(159 1 #reduceFor:) #(159 3 #reduceFor:) #(160 2 #reduceFor:) #(160 3 #reduceFor:) #(161 2 #reduceFor:) #(162 1 #reduceFor:) #(162 3 #reduceFor:) #(163 4 #reduceFor:) #(164 4 #reduceFor:) #(164 3 #reduceFor:) #(164 3 #reduceFor:) #(164 2 #reduceFor:) #(165 5 #reduceFor:) #(165 5 #reduceFor:) #(165 7 #reduceFor:) #(165 7 #reduceFor:) #(166 1 #reduceFor:) #(166 2 #reduceFor:) #(167 0 #reduceFor:) #(167 1 #reduceFor:) #(168 1 #reduceFor:) #(168 1 #reduceFor:) #(169 0 #reduceFor:) #(169 1 #reduceFor:) #(170 3 #reduceFor:) #(171 2 #reduceFor:) #(171 3 #reduceFor:) #(172 0 #reduceFor:) #(172 1 #reduceFor:) #(173 1 #reduceFor:) #(173 2 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(174 1 #reduceFor:) #(175 1 #reduceFor:) #(176 2 #reduceFor:) #(177 1 #reduceFor:) #(177 3 #reduceFor:) #(178 0 #reduceFor:) #(178 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(179 1 #reduceFor:) #(180 2 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(181 1 #reduceFor:) #(182 2 #reduceFor:) #(182 3 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(183 1 #reduceFor:) #(184 3 #reduceFor:) #(185 5 #reduceFor:) #(186 7 #reduceFor:) #(187 5 #reduceFor:) #(188 9 #reduceFor:) #(189 3 #reduceFor:) #(190 7 #reduceFor:) #(191 5 #reduceFor:) #(192 9 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(193 1 #reduceFor:) #(194 1 #reduceFor:) #(195 2 #reduceFor:) #(196 5 #reduceFor:) #(197 7 #reduceFor:) #(198 3 #reduceFor:) #(199 3 #reduceFor:) #(200 3 #reduceFor:) #(201 5 #reduceFor:) #(202 3 #reduceFor:) #(203 3 #reduceFor:) #(203 4 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(204 1 #reduceFor:) #(205 3 #reduceFor:) #(206 2 #reduceFor:) #(207 2 #reduceFor:) #(208 2 #reduceFor:) #(209 2 #reduceFor:) #(210 4 #reduceFor:) #(210 6 #reduceFor:) #(210 6 #reduceFor:) #(210 8 #reduceFor:) #(211 5 #reduceFor:) #(211 6 #reduceFor:) #(211 7 #reduceFor:) #(211 8 #reduceFor:) #(212 4 #reduceFor:) #(212 3 #reduceFor:) #(212 3 #reduceFor:) #(212 2 #reduceFor:) #(213 1 #reduceFor:) #(213 2 #reduceFor:) #(214 1 #reduceFor:) #(214 2 #reduceFor:) #(215 2 #reduceFor:) #(216 3 #reduceFor:) #(216 2 #reduceFor:) #(217 1 #reduceFor:) #(218 0 #reduceFor:) #(218 1 #reduceFor:) #(219 0 #reduceFor:) #(219 1 #reduceFor:) #(220 0 #reduceFor:) #(220 1 #reduceFor:) #(221 1 #reduceFor:) #(221 1 #reduceFor:) #(222 1 #reduceFor:) #(222 3 #reduceFor:) #(223 1 #reduceFor:) #(224 0 #reduceFor:) #(224 1 #reduceFor:) #(225 1 #reduceFor:) #(225 2 #reduceFor:) #(226 0 #reduceFor:) #(226 1 #reduceFor:) #(227 2 #reduceFor:) #(228 5 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 1 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(229 3 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(230 4 #reduceFor:) #(231 3 #reduceFor:) #(231 3 #reduceFor:) #(231 5 #reduceFor:) #(232 4 #reduceFor:) #(232 4 #reduceFor:) #(233 1 #reduceFor:) #(233 3 #reduceFor:) #(234 1 #reduceFor:) #(234 2 #reduceFor:) #(235 0 #reduceFor:) #(235 1 #reduceFor:) #(236 3 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(237 1 #reduceFor:) #(238 1 #reduceFor:) #(238 1 #reduceFor:) #(238 2 #reduceFor:) #(238 2 #reduceFor:) #(238 1 #reduceFor:) #(239 1 #reduceFor:) #(239 2 #reduceFor:) #(239 2 #reduceFor:) #(239 1 #reduceFor:) #(240 5 #reduceFor:) #(240 4 #reduceFor:) #(240 5 #reduceFor:) #(241 1 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(241 3 #reduceFor:) #(242 1 #reduceFor:) #(242 3 #reduceFor:) #(242 3 #reduceFor:) #(243 1 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(243 3 #reduceFor:) #(244 1 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(244 3 #reduceFor:) #(245 1 #reduceFor:) #(245 3 #reduceFor:) #(245 3 #reduceFor:) #(246 1 #reduceFor:) #(246 3 #reduceFor:) #(247 1 #reduceFor:) #(247 3 #reduceFor:) #(248 1 #reduceFor:) #(248 3 #reduceFor:) #(249 1 #reduceFor:) #(249 3 #reduceFor:) #(250 1 #reduceFor:) #(250 3 #reduceFor:) #(251 1 #reduceFor:) #(251 5 #reduceFor:) #(252 1 #reduceFor:) #(252 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(253 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(254 1 #reduceFor:) #(257 1 #reduceFor:) #(258 3 #reduceFor:) #(259 1 #reduceFor:) #(259 2 #reduceFor:) )! ! !JavaParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! transitionTable ^#( #[1 0 138 0 7 0 138 0 8 0 138 0 12 0 138 0 16 0 138 0 18 0 9 0 29 0 138 0 32 0 138 0 36 0 138 0 37 0 138 0 38 0 138 0 39 0 138 0 40 0 138 0 43 0 138 0 44 0 138 0 45 0 138 0 46 0 13 0 118 0 17 0 121 0 138 0 255 0 21 1 1 0 25 1 2] #[1 0 29 0 99 0 33 0 111 0 37 0 115 0 41 0 116] #[1 0 146 0 7 0 146 0 8 0 146 0 12 0 146 0 16 0 146 0 18 0 146 0 32 0 146 0 36 0 146 0 37 0 146 0 38 0 146 0 39 0 146 0 40 0 146 0 43 0 45 0 44 0 146 0 45 0 146 0 46 0 49 0 119 0 53 0 122 0 57 0 124 0 61 0 126 0 65 0 127 0 146 0 255] #[0 0 134 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 0 0 255] #[0 5 126 0 255] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 69 0 28 0 73 0 32] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 29 0 99 0 77 0 111 0 37 0 115 0 41 0 116] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 129 0 120 0 133 0 123 0 137 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 154 0 255 0 157 1 3] #[1 0 142 0 7 0 142 0 8 0 142 0 12 0 142 0 16 0 142 0 18 0 142 0 32 0 142 0 36 0 142 0 37 0 142 0 38 0 142 0 39 0 142 0 40 0 142 0 43 0 45 0 44 0 142 0 45 0 142 0 46 0 161 0 124 0 61 0 126 0 65 0 127 0 142 0 255] #[0 0 162 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 178 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 182 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 165 0 99] #[0 0 158 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 169 0 28 0 173 0 32] #[0 1 10 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 6 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 2 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 194 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 246 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 250 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 242 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 238 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 254 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 226 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 234 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 230 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 5 130 0 255] #[1 0 81 0 7 0 218 0 8 0 85 0 12 0 218 0 16 0 89 0 18 0 93 0 32 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 177 0 125 0 141 0 128 0 145 0 129 0 149 0 131 0 153 0 132 0 150 0 255 0 157 1 3] #[0 0 170 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 186 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 190 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[1 0 181 0 8 0 185 0 16] #[0 5 134 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 81 0 7 0 222 0 8 0 222 0 9 0 85 0 12 0 222 0 16 0 89 0 18 0 222 0 24 0 222 0 25 0 222 0 26 0 222 0 27 0 222 0 30 0 222 0 31 0 222 0 33 0 222 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 222 0 99 0 189 0 132] #[0 0 166 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 10 0 13 0 15 0 19 0 21 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[1 0 193 0 42 0 165 0 99] #[0 0 198 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[0 0 174 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 255] #[0 0 197 0 99] #[0 0 201 0 99] #[0 5 138 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 0 205 0 32] #[1 1 14 0 3 1 14 0 10 0 209 0 11 0 213 0 133 0 217 0 136] #[1 2 46 0 3 0 221 0 11 0 225 0 169 0 229 0 171] #[0 0 202 0 7 0 8 0 12 0 16 0 18 0 32 0 36 0 37 0 38 0 39 0 40 0 43 0 44 0 45 0 46 0 255] #[1 0 29 0 99 0 233 0 109 0 237 0 111 0 241 0 112 0 37 0 115 0 41 0 116] #[1 1 22 0 3 0 245 0 10 0 249 0 134 0 253 0 138] #[0 1 18 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 5 0 113 0 37 0 115 0 41 0 116] #[1 1 9 0 3 1 13 0 170] #[1 2 50 0 3 1 17 0 4] #[0 0 86 0 3 0 4 0 10 0 32] #[1 0 66 0 3 0 66 0 4 0 66 0 5 0 66 0 10 0 66 0 21 0 69 0 28 0 66 0 32] #[0 1 34 0 3 0 10] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 21 0 113 0 37 0 115 0 41 0 116 1 25 0 137] #[1 1 29 0 3 1 33 0 135] #[0 1 26 0 3] #[0 0 90 0 3 0 4] #[0 2 58 0 3 0 4] #[1 2 66 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 57 0 172 1 61 0 173 1 65 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 0 210 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 77 0 113 0 37 0 115 0 41 0 116] #[0 1 38 0 3 0 4] #[1 1 46 0 3 1 81 0 4] #[1 1 50 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 1 105 0 139 1 109 0 140 1 113 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 0 206 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 90 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 94 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 0 181 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 2 98 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 217 0 32] #[0 1 221 0 1] #[1 2 70 0 1 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 0 109 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 37 0 128 1 41 0 129 1 45 0 131 0 153 0 132 1 49 0 146 1 53 0 154 1 225 0 174 1 69 0 175 1 73 0 176 0 157 1 3] #[0 2 74 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 82 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 86 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 62 0 3 0 4] #[1 0 29 0 99 1 1 0 109 0 237 0 111 1 229 0 113 0 37 0 115 0 41 0 116] #[1 2 114 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 117 0 166 2 121 0 168 2 125 0 178 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 98 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 0 238 0 7 0 238 0 8 0 238 0 9 0 238 0 12 0 238 0 16 0 238 0 18 0 238 0 24 0 238 0 25 0 238 0 26 0 238 0 27 0 238 0 30 0 238 0 31 0 238 0 33 0 238 0 34 0 238 0 36 0 238 0 37 0 238 0 38 0 238 0 39 0 238 0 40 0 238 0 43 0 238 0 45 0 238 0 46 0 238 0 99 3 9 0 145] #[0 1 94 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 3 13 0 8 1 145 0 9 0 185 0 16 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 1 189 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 3 17 0 115 0 41 0 116 3 21 0 163] #[0 3 25 0 1] #[1 1 54 0 1 1 85 0 3 0 81 0 7 0 218 0 8 0 218 0 9 0 85 0 12 0 218 0 16 0 89 0 18 0 218 0 24 0 218 0 25 0 218 0 26 0 218 0 27 0 218 0 30 0 218 0 31 1 89 0 32 0 218 0 33 0 218 0 34 0 97 0 36 0 101 0 37 0 105 0 38 1 93 0 39 0 113 0 40 0 117 0 43 0 121 0 45 0 125 0 46 0 218 0 99 1 97 0 129 1 101 0 131 0 153 0 132 3 29 0 141 1 117 0 142 1 121 0 143 1 125 0 144 1 129 0 145 1 133 0 146 1 137 0 147 1 141 0 154 0 157 1 3] #[0 1 58 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 66 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 70 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 74 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 78 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 82 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 86 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 85 0 3 3 33 0 32 3 37 0 145 3 41 0 155] #[1 3 45 0 99 3 49 0 156] #[0 0 58 0 5 0 19 0 28 0 99] #[0 0 62 0 5 0 19 0 28 0 99] #[0 0 54 0 5 0 19 0 28 0 99] #[0 0 50 0 5 0 19 0 28 0 99] #[0 0 10 0 5 0 19 0 28 0 99] #[0 0 38 0 5 0 19 0 28 0 99] #[0 0 46 0 5 0 19 0 28 0 99] #[0 0 42 0 5 0 19 0 28 0 99] #[1 3 53 0 5 0 22 0 99 3 57 0 114] #[0 0 26 0 99] #[1 3 61 0 99 3 65 0 148 3 69 0 149 3 73 0 150 3 77 0 156] #[0 0 6 0 5 0 19 0 28 0 99] #[0 0 30 0 5 0 19 0 28 0 99] #[0 0 34 0 5 0 19 0 28 0 99] #[0 0 14 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[0 0 18 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 99] #[1 0 66 0 1 0 66 0 4 3 53 0 5 0 66 0 6 0 66 0 15 0 66 0 19 0 69 0 28 0 66 0 32 0 66 0 48 0 66 0 49 0 66 0 50 0 66 0 51 0 66 0 52 0 66 0 53 0 66 0 54 0 66 0 55 0 66 0 56 0 66 0 58 0 66 0 59 0 66 0 65 0 66 0 71 0 66 0 99 3 81 0 114] #[0 2 102 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 2 54 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 2 78 0 1 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 42 0 3 0 4] #[0 3 85 0 28] #[0 3 89 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 125 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 221 0 28] #[0 4 14 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 18 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 225 0 21] #[1 0 246 0 7 0 246 0 8 0 246 0 12 0 246 0 16 0 246 0 18 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 246 0 36 0 246 0 37 0 246 0 38 0 246 0 39 0 246 0 40 0 246 0 43 0 246 0 45 0 246 0 46 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 0 254 0 7 0 254 0 8 0 254 0 12 0 254 0 16 0 254 0 18 3 233 0 21 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 43 0 254 0 45 0 254 0 46] #[0 3 237 0 21] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 241 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 3 249 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 3 253 0 103 1 193 0 106 1 197 0 107 1 201 0 108 4 1 0 109 0 237 0 111 4 5 0 112 0 37 0 115 0 41 0 116] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 4 13 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 4 17 0 21] #[1 1 85 0 3 4 21 0 145] #[1 3 234 0 32 4 25 0 99 4 29 0 224] #[1 3 234 0 32 4 25 0 99 4 33 0 224] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 49 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 53 0 238 3 165 0 239 3 169 0 240] #[0 0 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 126 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 0 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 0 102 0 2 0 102 0 5 0 102 0 13 4 57 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87 0 102 0 99] #[1 3 53 0 5 4 61 0 28 0 22 0 99 3 57 0 114] #[1 4 65 0 99 4 69 0 148 3 69 0 149 3 73 0 150] #[1 4 73 0 28 0 18 0 99] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 81 0 21 4 85 0 28 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 82 4 126 0 87 0 66 0 99 3 81 0 114] #[0 4 10 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 130 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 134 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 174 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 118 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 4 122 0 1 4 122 0 4 4 122 0 6 4 122 0 15 4 122 0 19 4 93 0 28 4 122 0 32 4 122 0 42 4 122 0 48 4 122 0 49 4 122 0 50 4 122 0 51 4 122 0 52 4 122 0 53 4 122 0 54 4 122 0 55 4 122 0 56 4 122 0 58 4 122 0 59 4 122 0 65 4 122 0 71 4 122 0 82 4 122 0 83 4 122 0 84 4 122 0 85 4 122 0 86 4 122 0 87 4 122 0 88 4 122 0 89 4 122 0 90] #[0 4 97 0 1] #[0 2 22 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 122 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 126 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 101 0 32] #[0 2 142 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 146 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 150 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 154 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 158 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 162 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 178 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 182 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 186 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 190 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 194 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 198 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 202 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 206 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 210 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 214 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 105 0 32] #[0 3 62 0 4 0 19 0 32] #[0 3 66 0 4 0 19 0 32] #[0 3 70 0 4 0 19 0 32] #[1 3 74 0 4 3 74 0 19 3 74 0 32 4 130 0 82 4 130 0 87] #[1 3 78 0 4 3 78 0 19 3 78 0 32 4 134 0 82 4 134 0 87] #[1 3 82 0 4 4 30 0 5 3 82 0 19 4 30 0 28 3 82 0 32 4 30 0 82 4 30 0 87] #[1 3 86 0 4 4 22 0 5 3 86 0 19 4 22 0 28 3 86 0 32 4 22 0 82 4 22 0 87] #[1 2 38 0 1 2 38 0 4 4 109 0 5 2 38 0 6 2 38 0 15 2 38 0 19 2 38 0 28 2 38 0 32 2 38 0 42 2 38 0 48 2 38 0 49 2 38 0 50 2 38 0 51 2 38 0 52 2 38 0 53 2 38 0 54 2 38 0 55 2 38 0 56 2 38 0 58 2 38 0 59 2 38 0 65 2 38 0 71 2 38 0 82 2 38 0 83 2 38 0 84 2 38 0 85 2 38 0 86 2 38 0 87 2 38 0 88 2 38 0 89 2 38 0 90] #[0 2 42 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 26 0 1 5 70 0 2 4 26 0 4 4 26 0 5 4 26 0 6 5 70 0 13 4 26 0 15 4 26 0 19 4 26 0 28 4 26 0 32 4 26 0 42 4 26 0 48 4 26 0 49 4 26 0 50 4 26 0 51 4 26 0 52 4 26 0 53 4 26 0 54 4 26 0 55 4 26 0 56 4 26 0 58 4 26 0 59 5 70 0 60 5 70 0 61 5 70 0 62 5 70 0 63 5 70 0 64 4 26 0 65 5 70 0 66 5 70 0 67 5 70 0 68 5 70 0 69 5 70 0 70 4 26 0 71 4 26 0 82 4 26 0 83 4 26 0 84 4 26 0 85 4 26 0 86 4 26 0 87 4 26 0 88 4 26 0 89 4 26 0 90] #[1 4 34 0 1 5 74 0 2 4 34 0 4 4 34 0 5 4 34 0 6 5 74 0 13 4 34 0 15 4 34 0 19 4 34 0 28 4 34 0 32 4 34 0 42 4 34 0 48 4 34 0 49 4 34 0 50 4 34 0 51 4 34 0 52 4 34 0 53 4 34 0 54 4 34 0 55 4 34 0 56 4 34 0 58 4 34 0 59 5 74 0 60 5 74 0 61 5 74 0 62 5 74 0 63 5 74 0 64 4 34 0 65 5 74 0 66 5 74 0 67 5 74 0 68 5 74 0 69 5 74 0 70 4 34 0 71 4 34 0 82 4 34 0 83 4 34 0 84 4 34 0 85 4 34 0 86 4 34 0 87 4 34 0 88 4 34 0 89 4 34 0 90] #[1 4 113 0 82 4 117 0 87] #[1 4 121 0 2 4 125 0 13 4 129 0 60 4 133 0 61 4 137 0 62 4 141 0 63 4 145 0 64 4 149 0 66 4 153 0 67 4 157 0 68 4 161 0 69 4 165 0 70 4 169 0 254] #[0 1 102 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 173 0 99] #[1 0 78 0 5 4 177 0 21 0 78 0 28 0 78 0 99] #[1 1 198 0 3 4 181 0 20 4 185 0 157 4 189 0 161] #[0 1 30 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 12 0 15 0 16 0 17 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 65 0 71 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0 255] #[0 1 62 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 186 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 1 118 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 4 193 0 21] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 201 0 157 4 189 0 161] #[0 4 205 0 6] #[1 0 70 0 1 0 70 0 4 4 209 0 5 0 70 0 6 0 70 0 15 0 70 0 19 0 70 0 28 0 70 0 32 0 70 0 48 0 70 0 49 0 70 0 50 0 70 0 51 0 70 0 52 0 70 0 53 0 70 0 54 0 70 0 55 0 70 0 56 0 70 0 58 0 70 0 59 0 70 0 65 0 70 0 71 0 70 0 99] #[1 1 138 0 2 1 138 0 4 1 138 0 5 4 193 0 21 1 138 0 32] #[1 4 213 0 4 4 217 0 32] #[0 1 122 0 4 0 32] #[1 4 221 0 2 1 130 0 4 4 225 0 5 1 130 0 32] #[1 1 198 0 3 4 197 0 5 4 181 0 20 1 198 0 32 4 229 0 157 4 189 0 161] #[1 0 74 0 1 0 74 0 4 4 209 0 5 0 74 0 6 0 74 0 15 0 74 0 19 0 74 0 28 0 74 0 32 0 74 0 48 0 74 0 49 0 74 0 50 0 74 0 51 0 74 0 52 0 74 0 53 0 74 0 54 0 74 0 55 0 74 0 56 0 74 0 58 0 74 0 59 0 74 0 65 0 74 0 71 0 74 0 99] #[0 4 233 0 8] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 237 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 4 241 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 245 0 111 0 37 0 115 0 41 0 116 2 101 0 117 4 249 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 4 253 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 1 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 5 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 5 9 0 238 3 165 0 239 3 169 0 240] #[1 3 53 0 5 4 61 0 28 3 57 0 114] #[0 4 73 0 28] #[1 4 126 0 1 5 66 0 2 4 126 0 4 4 77 0 5 4 126 0 6 5 66 0 13 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 5 13 0 19] #[0 5 62 0 1 0 4 0 6 0 15 0 19 0 32] #[0 4 138 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 142 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 130 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 134 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 30 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 22 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 158 0 1 4 158 0 4 4 158 0 6 4 158 0 15 4 158 0 19 4 158 0 32 4 158 0 42 4 158 0 48 4 158 0 49 4 158 0 50 4 158 0 51 4 158 0 52 4 158 0 53 4 158 0 54 4 158 0 55 4 158 0 56 4 158 0 58 4 158 0 59 4 158 0 65 4 158 0 71 4 113 0 82 4 158 0 83 4 158 0 84 4 158 0 85 4 158 0 86 4 117 0 87 4 158 0 88 4 158 0 89 4 158 0 90] #[0 4 186 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 154 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 170 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 202 0 1 4 202 0 4 4 202 0 6 4 202 0 15 4 202 0 19 4 202 0 32 5 17 0 42 4 202 0 48 4 202 0 49 4 202 0 50 4 202 0 51 4 202 0 52 4 202 0 53 4 202 0 54 4 202 0 55 4 202 0 56 4 202 0 58 4 202 0 59 4 202 0 65 4 202 0 71 4 202 0 83 4 202 0 84 5 21 0 85 4 202 0 86 5 25 0 88 4 202 0 89 4 202 0 90] #[1 4 214 0 1 4 214 0 4 4 214 0 6 4 214 0 15 4 214 0 19 4 214 0 32 4 214 0 48 4 214 0 49 4 214 0 50 4 214 0 51 4 214 0 52 4 214 0 53 4 214 0 54 4 214 0 55 4 214 0 56 4 214 0 58 4 214 0 59 4 214 0 65 4 214 0 71 4 214 0 83 4 214 0 84 4 214 0 86 5 29 0 89 5 33 0 90] #[1 4 230 0 1 4 230 0 4 4 230 0 6 4 230 0 15 4 230 0 19 4 230 0 32 4 230 0 48 4 230 0 49 4 230 0 50 4 230 0 51 4 230 0 52 4 230 0 53 4 230 0 54 4 230 0 55 4 230 0 56 4 230 0 58 4 230 0 59 4 230 0 65 4 230 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 254 0 1 4 254 0 4 4 254 0 6 4 254 0 15 4 254 0 19 4 254 0 32 4 254 0 48 4 254 0 49 4 254 0 50 4 254 0 51 4 254 0 52 4 254 0 53 5 49 0 54 5 53 0 55 4 254 0 56 5 57 0 58 5 61 0 59 4 254 0 65 5 65 0 71] #[1 5 10 0 1 5 10 0 4 5 10 0 6 5 10 0 15 5 10 0 19 5 10 0 32 5 10 0 48 5 10 0 49 5 10 0 50 5 69 0 51 5 10 0 52 5 10 0 53 5 10 0 56 5 73 0 65] #[1 5 18 0 1 5 18 0 4 5 18 0 6 5 18 0 15 5 18 0 19 5 18 0 32 5 18 0 48 5 18 0 49 5 77 0 50 5 18 0 52 5 18 0 53 5 18 0 56] #[1 5 26 0 1 5 26 0 4 5 26 0 6 5 26 0 15 5 26 0 19 5 26 0 32 5 81 0 48 5 26 0 49 5 26 0 52 5 26 0 53 5 26 0 56] #[1 5 34 0 1 5 34 0 4 5 34 0 6 5 34 0 15 5 34 0 19 5 34 0 32 5 85 0 49 5 34 0 52 5 34 0 53 5 34 0 56] #[1 5 42 0 1 5 42 0 4 5 42 0 6 5 42 0 15 5 42 0 19 5 42 0 32 5 89 0 52 5 42 0 53 5 42 0 56] #[1 5 50 0 1 5 50 0 4 5 50 0 6 5 50 0 15 5 50 0 19 5 50 0 32 5 93 0 53 5 97 0 56] #[0 5 58 0 1 0 4 0 6 0 15 0 19 0 32] #[0 1 154 0 1 0 4 0 6 0 15 0 19 0 32] #[0 5 101 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 105 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 65 0 99 5 109 0 148 3 69 0 149 3 73 0 150] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 113 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 117 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 5 121 0 32] #[0 3 202 0 32] #[0 5 125 0 32] #[1 5 129 0 5 5 133 0 114 5 137 0 234 5 141 0 236] #[1 5 129 0 5 0 86 0 21 5 145 0 114 5 149 0 234 5 141 0 236] #[0 5 153 0 21] #[0 3 233 0 21] #[0 5 157 0 57] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 5 173 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 5 185 0 72 3 250 0 75 5 189 0 225 5 193 0 226 5 197 0 228] #[0 3 238 0 32] #[0 5 201 0 32] #[0 5 205 0 32] #[1 4 126 0 1 4 126 0 4 4 77 0 5 4 126 0 6 4 126 0 15 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 32 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 4 126 0 65 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 3 81 0 114] #[0 4 26 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 34 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 94 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 3 98 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 5 213 0 8] #[0 1 138 0 2 0 4 0 5 0 19 0 32] #[1 4 213 0 4 2 166 0 32] #[0 5 217 0 8] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 221 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 5 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 5 237 0 8 5 241 0 22 5 245 0 23 0 165 0 99] #[0 2 26 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 5 249 0 76 5 253 0 99] #[0 1 110 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 138 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 22 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 1 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 102 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 106 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 5 78 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 122 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 110 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 114 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 106 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 102 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 118 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 86 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 90 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 82 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 98 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 5 94 0 9 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 33 0 34 0 76 0 82 0 87 0 89 0 90 0 91 0 92 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 6 5 0 252 3 5 0 253] #[1 1 14 0 3 1 14 0 10 0 209 0 11 6 9 0 133 0 217 0 136] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 21 0 158 6 25 0 159 6 29 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 6 33 0 112 0 37 0 115 0 41 0 116 6 37 0 162] #[1 6 41 0 3 6 45 0 164] #[0 1 202 0 3 0 32] #[1 1 206 0 19 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 6 49 0 158 6 25 0 159 6 29 0 160] #[0 6 53 0 6] #[0 1 178 0 3 0 32] #[0 0 94 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 6 57 0 6] #[1 4 65 0 99 6 61 0 149 3 73 0 150] #[0 1 114 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 69 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 81 0 6] #[0 1 174 0 3 0 32] #[0 4 42 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 6 85 0 19] #[1 3 53 0 5 4 110 0 19 4 61 0 28 6 89 0 114 6 93 0 235] #[1 5 66 0 2 4 77 0 5 5 66 0 13 4 126 0 19 4 81 0 21 4 85 0 28 4 126 0 42 4 126 0 48 4 126 0 49 4 126 0 50 4 126 0 51 4 126 0 52 4 126 0 53 4 126 0 54 4 126 0 55 4 126 0 56 4 126 0 58 4 126 0 59 5 66 0 60 5 66 0 61 5 66 0 62 5 66 0 63 5 66 0 64 4 126 0 65 5 66 0 66 5 66 0 67 5 66 0 68 5 66 0 69 5 66 0 70 4 126 0 71 4 126 0 82 4 126 0 83 4 126 0 84 4 126 0 85 4 126 0 86 4 126 0 87 4 126 0 88 4 126 0 89 4 126 0 90 6 97 0 114] #[0 6 101 0 19] #[0 4 146 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 150 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 166 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 162 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 18 0 5 0 28 0 82 0 87] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 105 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 109 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 6 113 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 117 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 6 121 0 241] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 125 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 129 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 6 133 0 242] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 137 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 141 0 243] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 6 145 0 103 6 149 0 104 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 153 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 6 157 0 243] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 161 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 6 165 0 244] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 6 169 0 245] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 6 173 0 246] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 6 177 0 247] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 6 181 0 248] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 6 185 0 249] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 4 78 0 1 4 78 0 2 4 78 0 4 4 78 0 5 4 78 0 6 4 78 0 13 4 78 0 15 4 78 0 19 6 193 0 21 4 78 0 28 4 78 0 32 4 78 0 42 4 78 0 48 4 78 0 49 4 78 0 50 4 78 0 51 4 78 0 52 4 78 0 53 4 78 0 54 4 78 0 55 4 78 0 56 4 78 0 58 4 78 0 59 4 78 0 60 4 78 0 61 4 78 0 62 4 78 0 63 4 78 0 64 4 78 0 65 4 78 0 66 4 78 0 67 4 78 0 68 4 78 0 69 4 78 0 70 4 78 0 71 4 78 0 82 4 78 0 83 4 78 0 84 4 78 0 85 4 78 0 86 4 78 0 87 4 78 0 88 4 78 0 89 4 78 0 90] #[0 6 197 0 19] #[1 4 213 0 4 2 170 0 32] #[0 6 201 0 19] #[0 6 205 0 19] #[0 3 50 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 42 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 4 205 0 6 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 6 209 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 6 65 0 3 4 209 0 5 6 213 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 221 0 235 6 225 0 236] #[0 4 102 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 6 65 0 3 4 209 0 5 6 229 0 153] #[1 4 110 0 1 4 110 0 4 5 129 0 5 4 110 0 6 4 110 0 15 4 110 0 19 4 110 0 28 4 110 0 32 4 110 0 42 4 110 0 48 4 110 0 49 4 110 0 50 4 110 0 51 4 110 0 52 4 110 0 53 4 110 0 54 4 110 0 55 4 110 0 56 4 110 0 58 4 110 0 59 4 110 0 65 4 110 0 71 4 110 0 82 4 110 0 83 4 110 0 84 4 110 0 85 4 110 0 86 4 110 0 87 4 110 0 88 4 110 0 89 4 110 0 90 6 217 0 114 6 233 0 235 6 225 0 236] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 6 237 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 6 241 0 21] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 3 229 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[0 3 218 0 32] #[0 3 222 0 4 0 19 0 32] #[0 6 245 0 32] #[0 3 194 0 32] #[1 6 249 0 4 3 214 0 32] #[0 6 253 0 21] #[1 3 54 0 1 3 54 0 3 3 54 0 7 3 54 0 8 3 54 0 9 3 54 0 12 3 54 0 14 3 54 0 16 3 54 0 17 3 54 0 18 3 54 0 21 3 54 0 22 3 54 0 23 3 54 0 24 3 54 0 25 3 54 0 26 3 54 0 27 3 54 0 30 3 54 0 31 3 54 0 32 3 54 0 33 3 54 0 34 3 54 0 35 3 54 0 36 3 54 0 37 3 54 0 38 3 54 0 39 3 54 0 40 3 54 0 41 3 54 0 43 3 54 0 45 3 54 0 46 3 54 0 47 3 54 0 57 5 185 0 72 3 54 0 73 3 54 0 74 3 254 0 75 3 54 0 76 3 54 0 77 3 54 0 78 3 54 0 79 3 54 0 80 3 54 0 81 3 54 0 82 3 54 0 87 3 54 0 93 3 54 0 94 3 54 0 95 3 54 0 96 3 54 0 97 3 54 0 98 3 54 0 99 7 1 0 228] #[1 7 5 0 75 7 9 0 227] #[0 3 242 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 38 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 34 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 218 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 38 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 46 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 13 0 6] #[0 4 94 0 4 0 19] #[0 7 17 0 19] #[1 7 21 0 4 2 34 0 19] #[0 4 50 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 25 0 28] #[0 4 54 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 29 0 99] #[1 4 74 0 1 4 74 0 2 4 74 0 4 4 74 0 5 4 74 0 6 4 74 0 13 4 74 0 15 4 74 0 19 7 33 0 21 4 74 0 28 4 74 0 32 4 74 0 42 4 74 0 48 4 74 0 49 4 74 0 50 4 74 0 51 4 74 0 52 4 74 0 53 4 74 0 54 4 74 0 55 4 74 0 56 4 74 0 58 4 74 0 59 4 74 0 60 4 74 0 61 4 74 0 62 4 74 0 63 4 74 0 64 4 74 0 65 4 74 0 66 4 74 0 67 4 74 0 68 4 74 0 69 4 74 0 70 4 74 0 71 4 74 0 82 4 74 0 83 4 74 0 84 4 74 0 85 4 74 0 86 4 74 0 87 4 74 0 88 4 74 0 89 4 74 0 90] #[0 7 37 0 6] #[0 3 90 0 1 0 4 0 6 0 15 0 19 0 32] #[1 1 22 0 3 0 245 0 10 7 41 0 134 0 253 0 138] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 0 29 0 99 1 181 0 103 1 185 0 104 7 45 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116] #[1 4 65 0 99 7 49 0 150] #[0 7 53 0 19] #[1 7 57 0 4 1 210 0 19] #[0 1 214 0 4 0 19] #[0 1 234 0 3 0 4 0 32] #[1 1 230 0 3 7 61 0 4 1 230 0 32] #[1 7 65 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 7 69 0 22 7 73 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 7 77 0 165 7 81 0 166 7 85 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 106 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 7 89 0 19] #[0 1 194 0 3 0 5 0 20 0 32] #[0 0 98 0 1 0 3 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 99] #[0 1 126 0 4 0 32] #[1 7 93 0 1 6 65 0 3 7 97 0 4 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 101 0 151 6 73 0 152 6 77 0 153 2 121 0 168 7 105 0 177 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 134 0 4 0 32] #[0 1 146 0 1 0 4 0 32] #[0 1 150 0 1 0 4 0 32] #[0 1 142 0 2 0 4 0 5 0 19 0 32] #[1 7 109 0 3 7 113 0 212] #[1 4 209 0 5 4 114 0 19 0 70 0 28] #[0 7 117 0 19] #[1 4 209 0 5 7 121 0 19 0 74 0 28] #[1 4 18 0 1 4 18 0 4 4 18 0 5 4 18 0 6 1 233 0 9 4 18 0 15 4 18 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 4 18 0 28 1 165 0 30 1 169 0 31 4 18 0 32 1 173 0 33 1 177 0 34 4 18 0 42 4 18 0 48 4 18 0 49 4 18 0 50 4 18 0 51 4 18 0 52 4 18 0 53 4 18 0 54 4 18 0 55 4 18 0 56 4 18 0 58 4 18 0 59 4 18 0 65 4 18 0 71 2 25 0 76 4 18 0 82 4 18 0 83 4 18 0 84 4 18 0 85 4 18 0 86 4 18 0 87 4 18 0 88 4 18 0 89 4 18 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 7 125 0 239 3 169 0 240] #[0 4 190 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 198 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 194 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 4 206 0 1 4 206 0 4 4 206 0 6 4 206 0 15 4 206 0 19 4 206 0 32 5 17 0 42 4 206 0 48 4 206 0 49 4 206 0 50 4 206 0 51 4 206 0 52 4 206 0 53 4 206 0 54 4 206 0 55 4 206 0 56 4 206 0 58 4 206 0 59 4 206 0 65 4 206 0 71 4 206 0 83 4 206 0 84 5 21 0 85 4 206 0 86 5 25 0 88 4 206 0 89 4 206 0 90] #[1 4 210 0 1 4 210 0 4 4 210 0 6 4 210 0 15 4 210 0 19 4 210 0 32 5 17 0 42 4 210 0 48 4 210 0 49 4 210 0 50 4 210 0 51 4 210 0 52 4 210 0 53 4 210 0 54 4 210 0 55 4 210 0 56 4 210 0 58 4 210 0 59 4 210 0 65 4 210 0 71 4 210 0 83 4 210 0 84 5 21 0 85 4 210 0 86 5 25 0 88 4 210 0 89 4 210 0 90] #[1 4 218 0 1 4 218 0 4 4 218 0 6 4 218 0 15 4 218 0 19 4 218 0 32 4 218 0 48 4 218 0 49 4 218 0 50 4 218 0 51 4 218 0 52 4 218 0 53 4 218 0 54 4 218 0 55 4 218 0 56 4 218 0 58 4 218 0 59 4 218 0 65 4 218 0 71 4 218 0 83 4 218 0 84 4 218 0 86 5 29 0 89 5 33 0 90] #[1 4 222 0 1 4 222 0 4 4 222 0 6 4 222 0 15 4 222 0 19 4 222 0 32 4 222 0 48 4 222 0 49 4 222 0 50 4 222 0 51 4 222 0 52 4 222 0 53 4 222 0 54 4 222 0 55 4 222 0 56 4 222 0 58 4 222 0 59 4 222 0 65 4 222 0 71 4 222 0 83 4 222 0 84 4 222 0 86 5 29 0 89 5 33 0 90] #[1 4 226 0 1 4 226 0 4 4 226 0 6 4 226 0 15 4 226 0 19 4 226 0 32 4 226 0 48 4 226 0 49 4 226 0 50 4 226 0 51 4 226 0 52 4 226 0 53 4 226 0 54 4 226 0 55 4 226 0 56 4 226 0 58 4 226 0 59 4 226 0 65 4 226 0 71 4 226 0 83 4 226 0 84 4 226 0 86 5 29 0 89 5 33 0 90] #[1 4 242 0 1 4 242 0 4 4 242 0 6 4 242 0 15 4 242 0 19 4 242 0 32 4 242 0 48 4 242 0 49 4 242 0 50 4 242 0 51 4 242 0 52 4 242 0 53 4 242 0 54 4 242 0 55 4 242 0 56 4 242 0 58 4 242 0 59 4 242 0 65 4 242 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 246 0 1 4 246 0 4 4 246 0 6 4 246 0 15 4 246 0 19 4 246 0 32 4 246 0 48 4 246 0 49 4 246 0 50 4 246 0 51 4 246 0 52 4 246 0 53 4 246 0 54 4 246 0 55 4 246 0 56 4 246 0 58 4 246 0 59 4 246 0 65 4 246 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 3 53 0 5 3 57 0 114] #[0 4 250 0 1 0 4 0 6 0 15 0 19 0 32 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71] #[1 4 238 0 1 4 238 0 4 4 238 0 6 4 238 0 15 4 238 0 19 4 238 0 32 4 238 0 48 4 238 0 49 4 238 0 50 4 238 0 51 4 238 0 52 4 238 0 53 4 238 0 54 4 238 0 55 4 238 0 56 4 238 0 58 4 238 0 59 4 238 0 65 4 238 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 4 234 0 1 4 234 0 4 4 234 0 6 4 234 0 15 4 234 0 19 4 234 0 32 4 234 0 48 4 234 0 49 4 234 0 50 4 234 0 51 4 234 0 52 4 234 0 53 4 234 0 54 4 234 0 55 4 234 0 56 4 234 0 58 4 234 0 59 4 234 0 65 4 234 0 71 5 37 0 83 5 41 0 84 5 45 0 86] #[1 5 6 0 1 5 6 0 4 5 6 0 6 5 6 0 15 5 6 0 19 5 6 0 32 5 6 0 48 5 6 0 49 5 6 0 50 5 6 0 51 5 6 0 52 5 6 0 53 5 49 0 54 5 53 0 55 5 6 0 56 5 57 0 58 5 61 0 59 5 6 0 65 5 65 0 71] #[1 5 2 0 1 5 2 0 4 5 2 0 6 5 2 0 15 5 2 0 19 5 2 0 32 5 2 0 48 5 2 0 49 5 2 0 50 5 2 0 51 5 2 0 52 5 2 0 53 5 49 0 54 5 53 0 55 5 2 0 56 5 57 0 58 5 61 0 59 5 2 0 65 5 65 0 71] #[1 5 14 0 1 5 14 0 4 5 14 0 6 5 14 0 15 5 14 0 19 5 14 0 32 5 14 0 48 5 14 0 49 5 14 0 50 5 69 0 51 5 14 0 52 5 14 0 53 5 14 0 56 5 73 0 65] #[1 5 22 0 1 5 22 0 4 5 22 0 6 5 22 0 15 5 22 0 19 5 22 0 32 5 22 0 48 5 22 0 49 5 77 0 50 5 22 0 52 5 22 0 53 5 22 0 56] #[1 5 30 0 1 5 30 0 4 5 30 0 6 5 30 0 15 5 30 0 19 5 30 0 32 5 81 0 48 5 30 0 49 5 30 0 52 5 30 0 53 5 30 0 56] #[1 5 38 0 1 5 38 0 4 5 38 0 6 5 38 0 15 5 38 0 19 5 38 0 32 5 85 0 49 5 38 0 52 5 38 0 53 5 38 0 56] #[1 5 46 0 1 5 46 0 4 5 46 0 6 5 46 0 15 5 46 0 19 5 46 0 32 5 89 0 52 5 46 0 53 5 46 0 56] #[0 7 129 0 15] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 133 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 7 177 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 7 181 0 145] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 7 189 0 6] #[0 4 66 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 4 114 0 1 4 114 0 4 4 209 0 5 4 114 0 6 4 114 0 15 4 114 0 19 4 114 0 28 4 114 0 32 4 114 0 42 4 114 0 48 4 114 0 49 4 114 0 50 4 114 0 51 4 114 0 52 4 114 0 53 4 114 0 54 4 114 0 55 4 114 0 56 4 114 0 58 4 114 0 59 4 114 0 65 4 114 0 71 4 114 0 82 4 114 0 83 4 114 0 84 4 114 0 85 4 114 0 86 4 114 0 87 4 114 0 88 4 114 0 89 4 114 0 90] #[0 4 58 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 106 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 70 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 4 62 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 7 193 0 19] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 197 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 7 201 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 7 205 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 209 0 160] #[0 3 246 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 7 213 0 145] #[0 3 58 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 86 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 110 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 7 217 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 7 221 0 99] #[0 7 225 0 21] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 7 229 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 4 90 0 1 0 2 0 4 0 5 0 6 0 13 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 29 0 3 7 233 0 135] #[1 4 65 0 99 7 237 0 150] #[1 1 222 0 4 4 225 0 5 1 222 0 19] #[0 1 242 0 3 0 20] #[1 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 6 13 0 36 0 29 0 99 1 181 0 103 1 185 0 104 6 17 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 1 209 0 110 1 213 0 111 0 37 0 115 0 41 0 116 7 241 0 160] #[1 0 29 0 99 0 233 0 109 0 237 0 111 7 245 0 112 0 37 0 115 0 41 0 116] #[0 2 2 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 7 249 0 21 3 221 0 28] #[1 4 14 0 5 7 253 0 21 4 14 0 28 4 14 0 82 4 14 0 87] #[1 8 1 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 5 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 9 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[1 8 13 0 28 4 122 0 82 4 122 0 87] #[0 1 190 0 3 0 5 0 20 0 32] #[0 1 170 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 17 0 1] #[0 2 106 0 1 0 4] #[1 8 21 0 1 8 25 0 4] #[1 8 29 0 1 8 33 0 41 8 37 0 47 8 41 0 213 8 45 0 214 8 49 0 215 8 53 0 216] #[0 3 26 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 57 0 238 3 165 0 239 3 169 0 240] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 8 61 0 239 3 169 0 240] #[0 4 178 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 4 37 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 4 41 0 231 4 45 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 8 65 0 251] #[0 8 69 0 19] #[0 8 73 0 21] #[0 8 77 0 21] #[0 8 81 0 21] #[1 0 102 0 2 0 102 0 5 0 102 0 13 8 85 0 15 0 102 0 21 0 102 0 28 0 102 0 60 0 102 0 61 0 102 0 62 0 102 0 63 0 102 0 64 0 102 0 66 0 102 0 67 0 102 0 68 0 102 0 69 0 102 0 70 0 102 0 82 0 102 0 87] #[0 2 222 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 2 142 0 1 2 142 0 3 2 142 0 7 2 142 0 8 2 142 0 9 2 142 0 12 2 254 0 14 2 142 0 16 2 142 0 17 2 142 0 18 2 142 0 21 2 142 0 22 2 142 0 23 2 142 0 24 2 142 0 25 2 142 0 26 2 142 0 27 2 142 0 30 2 142 0 31 2 142 0 32 2 142 0 33 2 142 0 34 2 142 0 35 2 142 0 36 2 142 0 37 2 142 0 38 2 142 0 39 2 142 0 40 2 142 0 41 2 142 0 43 2 142 0 45 2 142 0 46 2 142 0 47 2 142 0 57 2 142 0 73 2 142 0 74 2 142 0 76 2 142 0 77 2 142 0 78 2 142 0 79 2 142 0 80 2 142 0 81 2 142 0 82 2 142 0 87 2 142 0 93 2 142 0 94 2 142 0 95 2 142 0 96 2 142 0 97 2 142 0 98 2 142 0 99] #[0 3 2 0 14] #[0 3 6 0 14] #[0 3 10 0 14] #[0 3 14 0 14] #[0 8 89 0 14] #[0 3 46 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 230 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 3 126 0 1 1 29 0 3 3 126 0 4 3 126 0 5 3 126 0 6 3 126 0 15 3 126 0 19 3 126 0 28 3 126 0 32 3 126 0 42 3 126 0 48 3 126 0 49 3 126 0 50 3 126 0 51 3 126 0 52 3 126 0 53 3 126 0 54 3 126 0 55 3 126 0 56 3 126 0 58 3 126 0 59 3 126 0 65 3 126 0 71 3 126 0 82 3 126 0 83 3 126 0 84 3 126 0 85 3 126 0 86 3 126 0 87 3 126 0 88 3 126 0 89 3 126 0 90 8 93 0 135] #[0 8 97 0 19] #[0 8 101 0 32] #[0 3 226 0 4 0 19 0 32] #[0 8 105 0 19] #[0 4 2 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 98 0 4 0 19] #[1 4 82 0 1 4 82 0 2 4 82 0 4 4 82 0 5 4 82 0 6 4 82 0 13 4 82 0 15 4 82 0 19 8 109 0 21 4 82 0 28 4 82 0 32 4 82 0 42 4 82 0 48 4 82 0 49 4 82 0 50 4 82 0 51 4 82 0 52 4 82 0 53 4 82 0 54 4 82 0 55 4 82 0 56 4 82 0 58 4 82 0 59 4 82 0 60 4 82 0 61 4 82 0 62 4 82 0 63 4 82 0 64 4 82 0 65 4 82 0 66 4 82 0 67 4 82 0 68 4 82 0 69 4 82 0 70 4 82 0 71 4 82 0 82 4 82 0 83 4 82 0 84 4 82 0 85 4 82 0 86 4 82 0 87 4 82 0 88 4 82 0 89 4 82 0 90] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 113 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 117 0 19] #[0 1 90 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 1 226 0 4 4 225 0 5 1 226 0 19] #[0 1 218 0 4 0 19] #[0 1 238 0 3 0 4 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 121 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 125 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 1 250 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 129 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 0 117 0 43 0 121 0 45 0 125 0 46 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 1 254 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[1 8 133 0 22 8 137 0 23 5 249 0 76 5 253 0 99] #[0 1 166 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 1 162 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 8 141 0 1 6 65 0 3 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 145 0 151 6 73 0 152 6 77 0 153 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 154 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 149 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 8 153 0 217 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 157 0 15] #[1 8 161 0 1 8 33 0 41 8 37 0 47 8 165 0 214 8 169 0 215 8 53 0 216] #[1 8 173 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 158 0 1 0 41 0 47] #[0 3 166 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 4 174 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 4 182 0 1 0 4 0 6 0 15 0 19 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 83 0 84 0 85 0 86 0 88 0 89 0 90] #[0 5 54 0 1 0 4 0 6 0 15 0 19 0 32] #[0 3 118 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 185 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 8 189 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 190 0 32 1 173 0 33 1 177 0 34 5 161 0 36 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 165 0 182 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 193 0 218 5 177 0 221 5 181 0 222 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 5 209 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 8 197 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 130 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 205 0 32] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 209 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 8 221 0 145] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 8 225 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 8 229 0 19] #[0 3 114 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 8 233 0 19] #[0 8 237 0 19] #[0 1 246 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 18 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 99] #[0 8 241 0 21] #[0 8 245 0 21] #[0 1 158 0 1 0 4 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 110 0 1 0 4] #[0 3 186 0 15] #[0 8 249 0 15] #[0 3 182 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 146 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 8 253 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 8 33 0 41 0 117 0 43 0 121 0 45 0 125 0 46 8 37 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 8 177 0 166 2 121 0 168 2 129 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 8 181 0 216 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 162 0 1 0 41 0 47] #[0 3 150 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 3 174 0 1 1 85 0 3 0 81 0 7 0 218 0 8 1 233 0 9 0 85 0 12 0 218 0 16 1 237 0 17 0 89 0 18 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 2 5 0 36 0 101 0 37 0 105 0 38 0 109 0 39 2 9 0 40 3 174 0 41 0 117 0 43 0 121 0 45 0 125 0 46 3 174 0 47 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 2 85 0 103 1 185 0 104 2 89 0 105 1 193 0 106 1 197 0 107 1 201 0 108 1 205 0 109 2 93 0 110 2 97 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 105 0 128 2 109 0 129 0 149 0 131 0 153 0 132 2 113 0 145 2 121 0 168 4 89 0 179 2 133 0 180 2 137 0 181 2 141 0 182 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253 0 157 1 3] #[0 3 170 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 1 0 19] #[0 9 5 0 19] #[0 9 9 0 32] #[0 2 238 0 14] #[0 2 226 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 30 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 13 0 19] #[1 6 249 0 4 3 230 0 19] #[0 3 210 0 19] #[0 4 6 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 17 0 19] #[1 3 134 0 1 1 29 0 3 3 134 0 4 3 134 0 5 3 134 0 6 3 134 0 15 3 134 0 19 3 134 0 28 3 134 0 32 3 134 0 42 3 134 0 48 3 134 0 49 3 134 0 50 3 134 0 51 3 134 0 52 3 134 0 53 3 134 0 54 3 134 0 55 3 134 0 56 3 134 0 58 3 134 0 59 3 134 0 65 3 134 0 71 3 134 0 82 3 134 0 83 3 134 0 84 3 134 0 85 3 134 0 86 3 134 0 87 3 134 0 88 3 134 0 89 3 134 0 90 9 21 0 135] #[0 9 25 0 32] #[0 9 29 0 32] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 33 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 233 0 9 2 30 0 19 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 5 225 0 152 9 37 0 167 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 5 233 0 233 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[0 3 178 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 3 142 0 1 0 3 0 7 0 8 0 9 0 12 0 14 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 153 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 41 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 7 185 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 45 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 93 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 3 198 0 32 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 3 97 0 89 3 101 0 90 3 105 0 91 3 109 0 92 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 3 245 0 152 2 121 0 168 3 129 0 205 3 133 0 206 3 137 0 207 3 141 0 208 3 145 0 209 3 149 0 210 3 153 0 211 9 49 0 219 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 157 0 237 3 161 0 238 3 165 0 239 3 169 0 240 3 173 0 241 3 177 0 242 3 181 0 243 3 185 0 244 3 189 0 245 3 193 0 246 3 197 0 247 3 201 0 248 3 205 0 249 3 209 0 250 3 213 0 251 3 217 0 252 3 5 0 253] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 2 1 0 35 4 9 0 40 2 13 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 2 33 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 2 81 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 2 145 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 3 122 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 3 138 0 1 0 4 0 5 0 6 0 15 0 19 0 28 0 32 0 42 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 65 0 71 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90] #[0 2 10 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 6 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 57 0 19] #[0 9 61 0 19] #[0 9 65 0 14] #[0 2 246 0 14] #[0 9 69 0 32] #[0 2 234 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 43 0 45 0 46 0 47 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 9 73 0 32] #[0 9 77 0 32] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 8 201 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 81 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[1 1 233 0 9 3 206 0 19 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 173 0 33 1 177 0 34 2 25 0 76 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 0 29 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 121 0 168 5 169 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 9 85 0 220 8 213 0 222 8 217 0 223 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 18 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 14 0 1 0 3 0 7 0 8 0 9 0 12 0 16 0 17 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 43 0 45 0 46 0 57 0 73 0 74 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 87 0 93 0 94 0 95 0 96 0 97 0 98 0 99] #[0 2 242 0 14] #[0 9 89 0 19] #[1 1 85 0 3 1 233 0 9 1 237 0 17 1 241 0 21 1 245 0 22 1 249 0 23 1 149 0 24 1 153 0 25 1 157 0 26 1 161 0 27 1 165 0 30 1 169 0 31 1 253 0 32 1 173 0 33 1 177 0 34 7 137 0 35 4 9 0 40 7 141 0 57 2 17 0 73 2 21 0 74 2 25 0 76 2 29 0 77 7 145 0 78 2 37 0 79 2 41 0 80 2 45 0 81 2 49 0 82 2 53 0 87 2 57 0 93 2 61 0 94 2 65 0 95 2 69 0 96 2 73 0 97 2 77 0 98 7 149 0 99 3 113 0 103 1 193 0 106 1 197 0 107 1 201 0 108 3 117 0 110 3 121 0 111 0 37 0 115 0 41 0 116 2 101 0 117 2 113 0 145 2 121 0 168 9 53 0 181 7 157 0 183 2 149 0 184 2 153 0 185 2 157 0 186 2 161 0 187 2 165 0 188 7 161 0 189 7 165 0 190 7 169 0 191 7 173 0 192 9 93 0 193 2 169 0 194 2 173 0 195 2 177 0 196 2 181 0 197 2 185 0 198 2 189 0 199 2 193 0 200 2 197 0 201 2 201 0 202 2 205 0 203 2 209 0 204 2 213 0 205 2 217 0 206 2 221 0 207 2 225 0 208 2 229 0 209 2 233 0 210 2 237 0 211 2 241 0 229 2 245 0 230 2 249 0 231 2 253 0 232 3 1 0 237 3 5 0 253] #[0 2 250 0 14] )! ! !SmaCCGrammarParser commentStamp: 'jmb' prior: 101167685! SmaCCGrammarParser is a parser for grammars. Instance Variables: grammar the grammar we are producing ! !SmaCCGrammarParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "File: Parser {grammar addEmptySymbol; yourself}; Parser: Rule | Parser Rule ; Rule : ProductionRule {grammar setStartSymbolIfNone: '1'. nil} | LeftLine | RightLine | NonAssociativeLine | IdMethodLine | StartLine ; LeftLine: ""%left"" TokenList 'tokens' "";"" { tokens do: [:each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; RightLine: ""%right"" TokenList 'tokens' "";"" { tokens do: [:each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; NonAssociativeLine: ""%nonassoc"" TokenList 'tokens' "";"" { tokens do: [:each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber]. nil }; IdMethodLine: ""%id"" IdTokens 'tokens' "";"" {tokens do: [:each | grammar makeTokenIdMethodFor: each]. nil}; StartLine: ""%start"" StartingTokens "";""; IdTokens: {OrderedCollection with: '1' value} | IdTokens {'1' add: '2' value; yourself}; TokenList: Term | TokenList Term ; StartingTokens: 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)} | StartingTokens 'symbol' {grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: symbol value)}; ProductionRule: ParserRules "";"" {| symbol | symbol := grammar nonTerminalSymbolNamed: '1' value. '3' do: [:each | symbol addProduction: each]. symbol}; ParserRules: ParserRules ""|"" ParserRule {'1' add: '3'; yourself} | ParserRule ; ParserRule : Terms 'rhs' {rhs} | Terms 'rhs' 'code' {self verifyCodeToken: code for: rhs} ; Terms : {SmaCCRHS new} | Terms 'rhs' Term 'term' {rhs add: term; yourself} | Terms 'rhs' Term 'term' 'variableNameToken' {rhs add: term; nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""?"" 'variableNameToken' {rhs add: (grammar makeOptionalSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""*"" 'variableNameToken' {rhs add: (grammar makeRepeatSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} | Terms 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} | Terms 'rhs' Term 'term' ""+"" 'variableNameToken' {rhs add: (grammar makeRepeatMultipleSymbolFor: term); nameLastItem: (variableNameToken value copyFrom: 2 to: variableNameToken value size - 1); yourself} ; Term: {grammar keywordTerminalNamed: '1' value} | {grammar terminalSymbolNamed: '1' value ifAbsent: [currentToken := '1'. self reportErrorMessage: 'Token not specified']} | {grammar nonTerminalSymbolNamed: '1' value} | ""error"" {SmaCCSymbol error} | ""("" SimpleTerms "")"" {grammar makeGroupFor: '2'} | ""<%"" SimpleTerms ""%>"" {grammar makeRepeatSymbolFor: (grammar makeGroupFor: '2')} | ""["" SimpleTerms ""]"" {grammar makeOptionalSymbolFor: (grammar makeGroupFor: '2')}; SimpleTerms : SimpleTerm {OrderedCollection with: '1'} | SimpleTerms 'terms' ""|"" SimpleTerm 'term' {terms add: term; yourself}; SimpleTerm : { SmaCCRHS new } | SimpleTerm 'rhs' Term 'term' {rhs add: term; yourself} | SimpleTerm 'rhs' Term 'term' ""?"" {rhs add: (grammar makeOptionalSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""*"" {rhs add: (grammar makeRepeatSymbolFor: term); yourself} | SimpleTerm 'rhs' Term 'term' ""+"" {rhs add: (grammar makeRepeatMultipleSymbolFor: term); yourself} ;"! ! !SmaCCGrammarParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^SmaCCGrammarScanner! ! !SmaCCGrammarParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateForFile ^1! ! !SmaCCGrammarParser methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! grammar: aSmaCCGrammar grammar := aSmaCCGrammar! ! !SmaCCGrammarParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. grammar := SmaCCGrammar new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile1: nodes ^ grammar addEmptySymbol; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdMethodLine1: nodes (nodes at: 2) do: [ :each | grammar makeTokenIdMethodFor: each ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdTokens1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForIdTokens2: nodes ^ (nodes at: 1) add: (nodes at: 2) value; yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForLeftLine1: nodes (nodes at: 2) do: [ :each | grammar leftPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForNonAssociativeLine1: nodes (nodes at: 2) do: [ :each | grammar nonAssociativePrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRule1: nodes ^ nodes at: 1! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRule2: nodes ^ self verifyCodeToken: (nodes at: 2) for: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForParserRules1: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForProductionRule1: nodes | symbol | symbol := grammar nonTerminalSymbolNamed: (nodes at: 1) value. (nodes at: 3) do: [ :each | symbol addProduction: each ]. ^ symbol! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRightLine1: nodes (nodes at: 2) do: [ :each | grammar rightPrecedenceFor: each; setOperatorPrecedenceFor: each to: scanner lineNumber ]. ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRule1: nodes grammar setStartSymbolIfNone: (nodes at: 1). ^ nil! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm3: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm4: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerm5: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerms1: nodes ^ OrderedCollection with: (nodes at: 1)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSimpleTerms2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStartingTokens1: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 1) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStartingTokens2: nodes ^ grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: (nodes at: 2) value)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm1: nodes ^ grammar keywordTerminalNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm2: nodes ^ grammar terminalSymbolNamed: (nodes at: 1) value ifAbsent: [ currentToken := nodes at: 1. self reportErrorMessage: 'Token not specified' ]! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm3: nodes ^ grammar nonTerminalSymbolNamed: (nodes at: 1) value! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm4: nodes ^ SmaCCSymbol error! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm5: nodes ^ grammar makeGroupFor: (nodes at: 2)! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm6: nodes ^ grammar makeRepeatSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerm7: nodes ^ grammar makeOptionalSymbolFor: (grammar makeGroupFor: (nodes at: 2))! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms1: nodes ^ SmaCCRHS new! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms3: nodes ^ (nodes at: 1) add: (nodes at: 2); nameLastItem: ((nodes at: 3) value copyFrom: 2 to: (nodes at: 3) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms4: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms5: nodes ^ (nodes at: 1) add: (grammar makeOptionalSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms6: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms7: nodes ^ (nodes at: 1) add: (grammar makeRepeatSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms8: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForTerms9: nodes ^ (nodes at: 1) add: (grammar makeRepeatMultipleSymbolFor: (nodes at: 2)); nameLastItem: ((nodes at: 4) value copyFrom: 2 to: (nodes at: 4) value size - 1); yourself! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(26 3 #reduceActionForIdMethodLine1:) #(27 3 #reduceFor:) #(28 1 #reduceFor:) #(28 2 #reduceFor:) #(29 1 #reduceActionForIdTokens1:) #(29 2 #reduceActionForIdTokens2:) #(30 1 #reduceActionForStartingTokens1:) #(30 2 #reduceActionForStartingTokens2:) #(31 3 #reduceActionForNonAssociativeLine1:) #(32 1 #reduceActionForTerm1:) #(32 1 #reduceActionForTerm2:) #(32 1 #reduceActionForTerm3:) #(32 1 #reduceActionForTerm4:) #(32 3 #reduceActionForTerm5:) #(32 3 #reduceActionForTerm6:) #(32 3 #reduceActionForTerm7:) #(33 1 #reduceFor:) #(34 4 #reduceActionForProductionRule1:) #(35 3 #reduceActionForParserRules1:) #(35 1 #reduceFor:) #(36 1 #reduceActionForParserRule1:) #(36 2 #reduceActionForParserRule2:) #(37 0 #reduceActionForTerms1:) #(37 2 #reduceActionForTerms2:) #(37 3 #reduceActionForTerms3:) #(37 3 #reduceActionForTerms4:) #(37 4 #reduceActionForTerms5:) #(37 3 #reduceActionForTerms6:) #(37 4 #reduceActionForTerms7:) #(37 3 #reduceActionForTerms8:) #(37 4 #reduceActionForTerms9:) #(38 3 #reduceActionForRightLine1:) #(39 1 #reduceActionForRule1:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(39 1 #reduceFor:) #(40 1 #reduceActionForFile1:) #(41 1 #reduceActionForSimpleTerms1:) #(41 3 #reduceActionForSimpleTerms2:) #(42 0 #reduceActionForSimpleTerm1:) #(42 2 #reduceActionForSimpleTerm2:) #(42 3 #reduceActionForSimpleTerm3:) #(42 3 #reduceActionForSimpleTerm4:) #(42 3 #reduceActionForSimpleTerm5:) #(45 1 #reduceFor:) #(45 2 #reduceFor:) #(46 3 #reduceActionForLeftLine1:) )! ! !SmaCCGrammarParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 53 0 39 0 57 0 40 0 61 0 45 0 65 0 46] #[1 0 69 0 20 0 73 0 30] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 105 0 28 0 109 0 32] #[1 0 113 0 19 0 117 0 29] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 121 0 28 0 109 0 32] #[1 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 125 0 28 0 109 0 32] #[0 0 129 0 25] #[0 0 150 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 154 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 146 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 134 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 142 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 190 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 0 0 43] #[1 0 9 0 1 0 13 0 3 0 17 0 4 0 21 0 6 0 25 0 8 0 29 0 20 0 33 0 26 0 37 0 27 0 41 0 31 0 45 0 34 0 49 0 38 0 133 0 39 0 158 0 43 0 65 0 46] #[0 0 138 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 30 0 7 0 20] #[1 0 137 0 7 0 141 0 20] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 145 0 41 0 149 0 42] #[1 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 153 0 41 0 149 0 42] #[0 0 54 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 9 0 170 0 11 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 157 0 41 0 149 0 42] #[0 0 46 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 50 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 42 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 161 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[0 0 14 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 22 0 7 0 19] #[1 0 169 0 7 0 173 0 19] #[1 0 177 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 181 0 7 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 165 0 32] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 185 0 35 0 189 0 36 0 193 0 37] #[0 0 194 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 10 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 34 0 7 0 20] #[1 0 197 0 2 0 201 0 9] #[1 0 162 0 2 0 162 0 9 0 77 0 11 0 162 0 12 0 81 0 13 0 162 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[1 0 201 0 9 0 209 0 12] #[1 0 201 0 9 0 213 0 14] #[0 0 38 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 18 0 7 0 11 0 13 0 15 0 17 0 19 0 20 0 21] #[0 0 6 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 26 0 7 0 19] #[0 0 198 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[0 0 130 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 217 0 7 0 221 0 9] #[0 0 82 0 7 0 9] #[1 0 86 0 7 0 86 0 9 0 77 0 11 0 81 0 13 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 225 0 23 0 229 0 32] #[0 0 66 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[1 0 170 0 2 0 170 0 9 0 170 0 11 0 170 0 12 0 170 0 13 0 170 0 14 0 170 0 15 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 21 0 233 0 42] #[1 0 174 0 2 0 237 0 5 0 174 0 9 0 241 0 10 0 174 0 11 0 174 0 12 0 174 0 13 0 174 0 14 0 174 0 15 0 245 0 16 0 174 0 17 0 174 0 19 0 174 0 20 0 174 0 21] #[0 0 62 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 58 0 2 0 5 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 23 0 24] #[0 0 74 0 1 0 3 0 4 0 6 0 8 0 20 0 43] #[1 0 94 0 7 0 94 0 9 0 94 0 11 0 94 0 13 0 94 0 15 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 23 0 249 0 36 0 193 0 37] #[0 0 90 0 7 0 9] #[1 0 253 0 5 0 98 0 7 0 98 0 9 1 1 0 10 0 98 0 11 0 98 0 13 0 98 0 15 1 5 0 16 0 98 0 17 0 98 0 19 0 98 0 20 0 98 0 21 0 98 0 23 1 9 0 24] #[1 0 166 0 2 0 166 0 9 0 77 0 11 0 166 0 12 0 81 0 13 0 166 0 14 0 85 0 15 0 89 0 17 0 93 0 19 0 97 0 20 0 101 0 21 0 205 0 32] #[0 0 178 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 182 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 186 0 2 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21] #[0 0 78 0 7 0 9] #[1 0 106 0 7 0 106 0 9 0 106 0 11 0 106 0 13 0 106 0 15 0 106 0 17 0 106 0 19 0 106 0 20 0 106 0 21 0 106 0 23 1 13 0 24] #[1 0 114 0 7 0 114 0 9 0 114 0 11 0 114 0 13 0 114 0 15 0 114 0 17 0 114 0 19 0 114 0 20 0 114 0 21 0 114 0 23 1 17 0 24] #[1 0 122 0 7 0 122 0 9 0 122 0 11 0 122 0 13 0 122 0 15 0 122 0 17 0 122 0 19 0 122 0 20 0 122 0 21 0 122 0 23 1 21 0 24] #[0 0 102 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 110 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 118 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] #[0 0 126 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 20 0 21 0 23] )! ! !SmaCCGrammarParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! verifyCodeToken: codeToken for: aSmaCCRHS | code | code := codeToken value copyFrom: 2 to: codeToken value size - 1. RBParser parseExpression: code onError: [:string :position | currentToken := nil. scanner position: codeToken startPosition + position. self reportErrorMessage: string]. aSmaCCRHS reduceAction: code. ^aSmaCCRHS! ! !SmaCCScannerParser commentStamp: '' prior: 101167865! SmaCCScannerParser is the parser for the scanner definition. Instance Variables: tokens the tokens that are parsed ! !SmaCCScannerParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! parserDefinitionComment "%left ""|""; %left ""("" ; %left ""*"" ""+"" ""?"" ; File: Rules {scannerDefinition} | {scannerDefinition}; Rules: Rule "";"" | Rules Rule "";"" ; Rule: RegexRule {'1' states isEmpty ifTrue: ['1' addStates: scannerDefinition nonExcludeStates]} | ExcludeStatesLine | StatesLine ; RegexRule : "":"" Regex {'3' position: '1' startPosition. scannerDefinition addToken: '3' withName: '1' value. '3'} | Symbol RegexRule {'2' addState: '1'; yourself}; StatesLine : ""%states"" States ; States : | States Symbol {scannerDefinition addState: '2'}; ExcludeStatesLine : ""%excludes"" ExcludeStates ; ExcludeStates : | ExcludeStates Symbol {scannerDefinition addExcludeState: '2'}; Symbol : {'1' value asSymbol}; Regex: RegexTerm {'1'} | Regex ""|"" Regex {'1' | '3'} | Regex RegexTerm {'1' , '2'}; RegexTerm: {SmaCCCharacterRENode characters: '1' value} | {SmaCCCharacterRENode characters: self allCharacters} | {self nodeFor: (ReadStream on: ('1' value copyFrom: 2 to: '1' value size))} | ""("" Regex "")"" {'2'} | {SmaCCCharacterRENode characters: (self parseCharacterBlock: '1')} | {(scannerDefinition tokenNamed: '1' value ifAbsentPut: [self generateImplicitToken: '1']) copy} | {SmaCCSequenceRENode nodes: ('1' value asOrderedCollection collect: [:each | SmaCCCharacterRENode characters: (String with: each)])} | RegexTerm ""*"" {'1' repeat} | RegexTerm ""+"" {'1' repeatForAtLeast: 1} | RegexTerm ""?"" {'1' repeatFor: 0 to: 1} | RegexTerm {| readStream start stop | readStream := ReadStream on: ('2' value copyFrom: 2 to: '2' value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. '1' repeatFor: (start isEmpty ifTrue: [0] ifFalse: [start asNumber]) to: (stop isEmpty ifTrue: [(1 bitShift: 31)] ifFalse: [stop asNumber])} ;"! ! !SmaCCScannerParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:49'! scannerClass ^SmaCCScannerScanner! ! !SmaCCScannerParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:49'! startingStateForFile ^1! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! allCharacters ^SmaCCGrammar allCharacters! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! charactersFor: aStream in: aToken | characters char endCharacters | aStream atEnd ifTrue: [self reportCharacterBlockErrorForToken: aToken]. char := aStream next. characters := char == $\ ifTrue: [(self nodeFor: aStream) characters] ifFalse: [OrderedCollection with: char]. (characters size = 1 and: [aStream peekFor: $-]) ifFalse: [^characters]. endCharacters := self charactersFor: aStream in: aToken. endCharacters size > 1 ifTrue: [self reportCharacterBlockErrorForToken: aToken]. ^(characters first asInteger to: endCharacters first asInteger) collect: [:each | Character value: each]! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! generateImplicitToken: aSmaCCToken | node | node := SmaCCGrammar implicitToken: aSmaCCToken value. node isNil ifTrue: [currentToken := aSmaCCToken. self reportErrorMessage: 'Token not specified']. ^node! ! !SmaCCScannerParser methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. scannerDefinition := SmaCCScannerDefinition new! ! !SmaCCScannerParser methodsFor: 'private' stamp: 'lr 1/6/2007 21:44'! nodeFor: aStream | block char value count | char := aStream next. char == $f ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 12))]. char == $n ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 10))]. char == $r ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 13))]. char == $t ifTrue: [^SmaCCCharacterRENode characters: ' ']. char == $v ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: 11))]. char == $c ifTrue: [^SmaCCCharacterRENode characters: (String with: (Character value: aStream next asInteger - $A asInteger))]. char == $x ifTrue: [count := value := 0. [aStream atEnd not and: [count < 4 and: [char := aStream peek. (char between: $0 and: $9) or: [(char between: $A and: $F) or: [char between: $a and: $f]]]]] whileTrue: [count := count + 1. value := value * 16 + aStream next digitValue]. ^SmaCCCharacterRENode characters: (String with: (Character value: value))]. char == $d ifTrue: [block := [:each | each between: $0 and: $9]]. char == $D ifTrue: [block := [:each | (each between: $0 and: $9) not]]. char == $s ifTrue: [block := [:each | #(9 10 11 12 13 32) includes: each asInteger]]. char == $S ifTrue: [block := [:each | (#(9 10 11 12 13 32) includes: each asInteger) not]]. char == $w ifTrue: [block := [:each | (each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]]]. char == $W ifTrue: [block := [:each | ((each between: $a and: $z) or: [(each between: $A and: $Z) or: [(each between: $0 and: $9) or: [each == $_]]]) not]]. block isNil ifTrue: [^SmaCCCharacterRENode characters: (String with: char)]. ^SmaCCCharacterRENode characters: (String withAll: (self allCharacters select: block))! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! parseCharacterBlock: aToken | characters aStream invert | aStream := ReadStream on: (aToken value copyFrom: 2 to: aToken value size - 1). characters := OrderedCollection new. invert := aStream peekFor: $^. [aStream atEnd] whileFalse: [characters addAll: (self charactersFor: aStream in: aToken)]. ^String withAll: (invert ifTrue: [self allCharacters reject: [:each | characters includes: each]] ifFalse: [characters])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForExcludeStates2: nodes ^ scannerDefinition addExcludeState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile1: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForFile2: nodes ^ scannerDefinition! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex1: nodes ^ nodes at: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex2: nodes ^ (nodes at: 1) | (nodes at: 3)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegex3: nodes ^ (nodes at: 1) , (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexRule1: nodes (nodes at: 3) position: (nodes at: 1) startPosition. scannerDefinition addToken: (nodes at: 3) withName: (nodes at: 1) value. ^ nodes at: 3! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexRule2: nodes ^ (nodes at: 2) addState: (nodes at: 1); yourself! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm10: nodes ^ (nodes at: 1) repeatFor: 0 to: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm11: nodes | readStream start stop | readStream := ReadStream on: ((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1). start := readStream upTo: $,. stop := readStream upToEnd. ^ (nodes at: 1) repeatFor: (start isEmpty ifTrue: [ 0 ] ifFalse: [ start asNumber ]) to: (stop isEmpty ifTrue: [ 1 bitShift: 31 ] ifFalse: [ stop asNumber ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm1: nodes ^ SmaCCCharacterRENode characters: (nodes at: 1) value! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm2: nodes ^ SmaCCCharacterRENode characters: self allCharacters! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm3: nodes ^ self nodeFor: (ReadStream on: ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm4: nodes ^ nodes at: 2! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm5: nodes ^ SmaCCCharacterRENode characters: (self parseCharacterBlock: (nodes at: 1))! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm6: nodes ^ (scannerDefinition tokenNamed: (nodes at: 1) value ifAbsentPut: [ self generateImplicitToken: (nodes at: 1) ]) copy! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm7: nodes ^ SmaCCSequenceRENode nodes: ((nodes at: 1) value asOrderedCollection collect: [ :each | SmaCCCharacterRENode characters: (String with: each) ])! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm8: nodes ^ (nodes at: 1) repeat! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRegexTerm9: nodes ^ (nodes at: 1) repeatForAtLeast: 1! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForRule1: nodes ^ (nodes at: 1) states isEmpty ifTrue: [ (nodes at: 1) addStates: scannerDefinition nonExcludeStates ]! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForStates2: nodes ^ scannerDefinition addState: (nodes at: 2)! ! !SmaCCScannerParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:49'! reduceActionForSymbol1: nodes ^ (nodes at: 1) value asSymbol! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! reduceTable ^#( #(20 1 #reduceFor:) #(21 1 #reduceActionForFile1:) #(21 0 #reduceActionForFile2:) #(22 3 #reduceActionForRegexRule1:) #(22 2 #reduceActionForRegexRule2:) #(23 2 #reduceFor:) #(24 1 #reduceActionForRule1:) #(24 1 #reduceFor:) #(24 1 #reduceFor:) #(25 1 #reduceActionForRegex1:) #(25 3 #reduceActionForRegex2:) #(25 2 #reduceActionForRegex3:) #(26 1 #reduceActionForSymbol1:) #(27 0 #reduceFor:) #(27 2 #reduceActionForStates2:) #(28 0 #reduceFor:) #(28 2 #reduceActionForExcludeStates2:) #(29 1 #reduceActionForRegexTerm1:) #(29 1 #reduceActionForRegexTerm2:) #(29 1 #reduceActionForRegexTerm3:) #(29 3 #reduceActionForRegexTerm4:) #(29 1 #reduceActionForRegexTerm5:) #(29 1 #reduceActionForRegexTerm6:) #(29 1 #reduceActionForRegexTerm7:) #(29 2 #reduceActionForRegexTerm8:) #(29 2 #reduceActionForRegexTerm9:) #(29 2 #reduceActionForRegexTerm10:) #(29 2 #reduceActionForRegexTerm11:) #(32 2 #reduceFor:) #(32 3 #reduceFor:) #(33 2 #reduceFor:) )! ! !SmaCCScannerParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! reportCharacterBlockErrorForToken: aToken currentToken := aToken. self reportErrorMessage: 'Invalid character block'! ! !SmaCCScannerParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:49'! transitionTable ^#( #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 25 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 26 0 14 0 30 0 45 0 32 0 49 0 33] #[1 0 66 0 9 0 66 0 17 0 53 0 28] #[1 0 58 0 9 0 58 0 17 0 57 0 27] #[0 0 61 0 10] #[0 0 54 0 9 0 14 0 17] #[0 0 0 0 30] #[0 0 30 0 9] #[0 0 34 0 9] #[0 0 65 0 9] #[1 0 17 0 14 0 21 0 17 0 69 0 22 0 41 0 26] #[1 0 9 0 7 0 13 0 8 0 17 0 14 0 21 0 17 0 29 0 22 0 33 0 23 0 73 0 24 0 41 0 26 0 10 0 30 0 49 0 33] #[0 0 38 0 9] #[1 0 26 0 9 0 21 0 17 0 77 0 26] #[1 0 126 0 9 0 21 0 17 0 81 0 26] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 113 0 25 0 117 0 29] #[0 0 118 0 7 0 8 0 14 0 17 0 30] #[0 0 22 0 9] #[0 0 121 0 9] #[0 0 70 0 9 0 17] #[0 0 62 0 9 0 17] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 125 0 25 0 117 0 29] #[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 94 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 98 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 85 0 2 0 129 0 5 0 18 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 42 0 1 0 42 0 2 0 137 0 3 0 141 0 4 0 42 0 5 0 145 0 6 0 42 0 9 0 42 0 11 0 42 0 12 0 42 0 14 0 149 0 16 0 42 0 17 0 42 0 18 0 42 0 19] #[0 0 122 0 7 0 8 0 14 0 17 0 30] #[1 0 153 0 1 0 85 0 2 0 129 0 5 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] #[1 0 85 0 2 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 157 0 25 0 117 0 29] #[1 0 50 0 1 0 50 0 2 0 137 0 3 0 141 0 4 0 50 0 5 0 145 0 6 0 50 0 9 0 50 0 11 0 50 0 12 0 50 0 14 0 149 0 16 0 50 0 17 0 50 0 18 0 50 0 19] #[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 102 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 110 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 114 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 9 0 11 0 12 0 14 0 16 0 17 0 18 0 19] #[1 0 46 0 1 0 85 0 2 0 46 0 5 0 46 0 9 0 89 0 11 0 93 0 12 0 97 0 14 0 101 0 17 0 105 0 18 0 109 0 19 0 133 0 29] )! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseExpression: aString ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseExpression: aString onError: aBlock ^self simplifyExpression: (self parse: aString startingAt: self startingStateForSequenceNode onError: aBlock)! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseMethod: aString ^self parse: aString startingAt: self startingStateForMethod! ! !StParser class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parseMethod: aString onError: aBlock ^self parse: aString startingAt: self startingStateForMethod onError: aBlock! ! !StParser class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! parserDefinitionComment "%id ; %start SequenceNode ; Method: MethodSequenceNode {(RBMethodNode selector: '1' value asSymbol arguments: #() body: '2' last)} | BinaryMethodName MethodSequenceNode {(RBMethodNode selector: '1' first arguments: '1' last body: '2' last)} | KeywordMethodName MethodSequenceNode {(RBMethodNode selector: '1' first contents asSymbol arguments: '1' last body: '2' last)}; BinaryMethodName: Variable {Array with: '1' value asSymbol with: (Array with: '2')} ; KeywordMethodName: Variable {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMethodName Variable {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; Primitives: {OrderedCollection new} | Primitives ""<"" PrimitiveMessageSend "">"" {'1' add: ('2' startPosition to: '4' startPosition); yourself}; PrimitiveMessageSend: | PrimitiveMessageSend {nil} | PrimitiveMessageSend Literal {nil} | PrimitiveMessageSend ""("" {nil} | PrimitiveMessageSend "")"" {nil} | PrimitiveMessageSend ""{"" {nil} | PrimitiveMessageSend ""}"" {nil} | PrimitiveMessageSend "";"" {nil} | PrimitiveMessageSend ""."" {nil} | PrimitiveMessageSend {nil} | PrimitiveMessageSend {nil}; MethodSequenceNode: Primitives ""|"" TemporaryVariables ""|"" Primitives Statements {Array with: ('1' addAll: '5'; yourself) with: (RBSequenceNode temporaries: '3' statements: '6')} | Primitives ""||"" Primitives Statements {Array with: ('1' addAll: '3'; yourself) with: (RBSequenceNode temporaries: #() statements: '4')} | Primitives Statements {Array with: '1' with: (RBSequenceNode temporaries: #() statements: '2')}; SequenceNode: Temporaries Statements {RBSequenceNode temporaries: '1' statements: '2'}; Temporaries: {#()} | ""||"" {#()} | ""|"" TemporaryVariables ""|"" {'2'}; TemporaryVariables: {OrderedCollection new} | TemporaryVariables Variable {'1' add: '2'; yourself}; Statements: {OrderedCollection new} | StatementList "".""? {#liftFirstValue:} | StatementList ""."" ""^"" Expression "".""? {'1' add: (RBReturnNode value: '4'); yourself} | ""^"" Expression "".""? {OrderedCollection with: (RBReturnNode value: '2')}; StatementList: Expression | StatementList ""."" Expression {'1' add: '3'; yourself}; Block: ""["" BlockArgs ""|"" SequenceNode ""]"" {RBBlockNode arguments: '2' body: '4'} | ""["" SequenceNode ""]"" {RBBlockNode body: '2'} | ""["" BlockArgs ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode statements: #())} | ""["" BlockArgs ""||"" TemporaryVariables ""|"" Statements ""]"" {RBBlockNode arguments: '2' body: (RBSequenceNode temporaries: '4' statements: '6')}; BlockArgs: "":"" Variable {OrderedCollection with: '2'} | BlockArgs "":"" Variable {'1' add: '3'; yourself}; Expression: Variable "":="" Expression {RBAssignmentNode variable: '1' value: '3'} | Cascade {#liftFirstValue:}; Cascade: MessageSend CascadeList {| messages | '2' isEmpty ifTrue: [^'1']. messages := OrderedCollection new: '2' size + 1. messages add: '1'. '2' do: [:each | messages add: (RBMessageNode receiver: '1' receiver selector: each first contents asSymbol arguments: each last)]. RBCascadeNode messages: messages} | Primary {#liftFirstValue:}; MessageSend: KeywordMessageSend {#liftFirstValue:} | BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:}; CascadeList: {OrderedCollection new} | CascadeList "";"" SimpleMessage {'1' add: '3'; yourself}; SimpleMessage: UnaryMessage {#liftFirstValue:} | BinaryMessage {#liftFirstValue:} | KeywordMessage {#liftFirstValue:}; KeywordMessageSend: BinaryMessageSend KeywordMessage {#createMessageNodeFrom:} | UnaryMessageSend KeywordMessage {#createMessageNodeFrom:} | Primary KeywordMessage {#createMessageNodeFrom:}; KeywordMessage: KeywordArgument {| stream | stream := WriteStream on: (String new: 30). stream nextPutAll: '1' value. Array with: stream with: (OrderedCollection with: '2')} | KeywordMessage KeywordArgument {'1' first nextPutAll: '2' value. '1' last add: '3'. '1'}; KeywordArgument: BinaryMessageSend {#liftFirstValue:} | UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; BinaryMessageSend: BinaryMessageSend BinaryMessage {#createMessageNodeFrom:} | UnaryMessageSend BinaryMessage {#createMessageNodeFrom:} | Primary BinaryMessage {#createMessageNodeFrom:} ; BinaryMessage : BinaryArgument {Array with: (ReadStream on: '1' value) with: (Array with: '2')}; BinaryArgument: UnaryMessageSend {#liftFirstValue:} | Primary {#liftFirstValue:}; UnaryMessageSend : UnaryMessageSend UnaryMessage {#createMessageNodeFrom:} | Primary UnaryMessage {#createMessageNodeFrom:}; UnaryMessage : {Array with: (ReadStream on: '1' value) with: #()}; Primary: ""("" Expression "")"" {#liftSecondValue:} | Literal {RBLiteralNode value: '1'} | Variable {#liftFirstValue:} | Block {#liftFirstValue:}; Variable: {RBVariableNode named: '1' value} | {RBVariableNode named: '1' value}; Literal: ""true"" {true} | ""false"" {false} | ""nil"" {nil} | {'1' value} | {'1' value} | {'1' value at: 2} | {('1' value copyFrom: 2 to: '1' value size - 1) copyReplaceAll: '''''' with: ''''} | ""#"" {(('2' value copyFrom: 2 to: '2' value size - 1) copyReplaceAll: '''''' with: '''') asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" {'2' value asSymbol} | ""#"" ""["" ByteArray ""]"" {'3' contents} | ""#"" ""("" Array "")"" {'3' contents} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference} | ""#"" ""{"" ""}"" {'3' value asQualifiedReference}; ByteArray: {WriteStream on: ByteArray new} | ByteArray {'1' nextPut: '2' value; yourself}; Array: {WriteStream on: Array new} | Array ArrayLiteral {'1' nextPut: '2'; yourself} | Array "":="" {'2' stopPosition + 1 = '3' startPosition ifTrue: ['1' nextPut: ('2' value, ':') asSymbol] ifFalse: ['1' nextPut: '2' value asSymbol; nextPut: #':']. scanner position: '3' startPosition. currentToken := nil. '1'}; ArrayLiteral: Literal {#liftFirstValue:} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | {'1' value asSymbol} | ""{"" ""}"" {'2' value asQualifiedReference} | ""{"" ""}"" {'2' value asQualifiedReference} | ""("" Array "")"" {'2' contents} | ""["" ByteArray ""]"" {'2' contents} | {'1' value asSymbol} | {'1' value};"! ! !StParser class methodsFor: 'generated-accessing' stamp: 'lr 4/12/2010 17:50'! scannerClass ^StScanner! ! !StParser class methodsFor: 'private' stamp: 'lr 4/12/2010 13:58'! simplifyExpression: aSequenceNode ^aSequenceNode isNil ifFalse: [ (aSequenceNode statements size == 1 and: [aSequenceNode temporaries isEmpty]) ifTrue: [aSequenceNode statements first] ifFalse: [aSequenceNode] ]! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForMethod ^1! ! !StParser class methodsFor: 'generated-starting states' stamp: 'lr 4/12/2010 17:50'! startingStateForSequenceNode ^2! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! actionForCurrentToken | ids action | ids := currentToken id. 1 to: ids size do: [:i | action := self actionFor: (ids at: i). (action bitAnd: self actionMask) = self errorAction ifFalse: [^action]. (ids at: i) = scanner negativeNumberId ifTrue: [currentToken := SmaCCToken value: '-' start: currentToken startPosition id: (Array with: scanner binarySymbolId). scanner position: currentToken stopPosition - 1. ^self actionForCurrentToken]]. ^self errorAction! ! !StParser methodsFor: 'private' stamp: ' 6/1/07 21:19'! createMessageNodeFrom: aCollection ^RBMessageNode receiver: aCollection first selector: (aCollection at: 2) first contents asSymbol arguments: (aCollection at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray1: nodes ^ WriteStream on: Array new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArray3: nodes (nodes at: 2) stopPosition + 1 = (nodes at: 3) startPosition ifTrue: [ (nodes at: 1) nextPut: ((nodes at: 2) value , ':') asSymbol ] ifFalse: [ (nodes at: 1) nextPut: (nodes at: 2) value asSymbol; nextPut: #':' ]. scanner position: (nodes at: 3) startPosition. currentToken := nil. ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral10: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral11: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral2: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral3: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral4: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral5: nodes ^ (nodes at: 1) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral6: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral7: nodes ^ (nodes at: 2) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral8: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForArrayLiteral9: nodes ^ (nodes at: 2) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBinaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBinaryMethodName1: nodes ^ Array with: (nodes at: 1) value asSymbol with: (Array with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock1: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (nodes at: 4)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock2: nodes ^ RBBlockNode body: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock3: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode statements: #())! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlock4: nodes ^ RBBlockNode arguments: (nodes at: 2) body: (RBSequenceNode temporaries: (nodes at: 4) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlockArgs1: nodes ^ OrderedCollection with: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForBlockArgs2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForByteArray1: nodes ^ WriteStream on: ByteArray new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForByteArray2: nodes ^ (nodes at: 1) nextPut: (nodes at: 2) value; yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascade1: nodes | messages | (nodes at: 2) isEmpty ifTrue: [ ^ nodes at: 1 ]. messages := OrderedCollection new: (nodes at: 2) size + 1. messages add: (nodes at: 1). (nodes at: 2) do: [ :each | messages add: (RBMessageNode receiver: (nodes at: 1) receiver selector: each first contents asSymbol arguments: each last) ]. ^ RBCascadeNode messages: messages! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascadeList1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForCascadeList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForExpression1: nodes ^ RBAssignmentNode variable: (nodes at: 1) value: (nodes at: 3)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMessage1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMessage2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMethodName1: nodes | stream | stream := WriteStream on: (String new: 30). stream nextPutAll: (nodes at: 1) value. ^ Array with: stream with: (OrderedCollection with: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForKeywordMethodName2: nodes (nodes at: 1) first nextPutAll: (nodes at: 2) value. (nodes at: 1) last add: (nodes at: 3). ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral10: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral11: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral12: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral13: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral14: nodes ^ (nodes at: 3) contents! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral15: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral16: nodes ^ (nodes at: 3) value asQualifiedReference! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral1: nodes ^ true! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral2: nodes ^ false! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral4: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral5: nodes ^ (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral6: nodes ^ (nodes at: 1) value at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral7: nodes ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) copyReplaceAll: '''''' with: ''''! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral8: nodes ^ (((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1) copyReplaceAll: '''''' with: '''') asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForLiteral9: nodes ^ (nodes at: 2) value asSymbol! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod1: nodes ^ RBMethodNode selector: (nodes at: 1) value asSymbol arguments: #() body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod2: nodes ^ RBMethodNode selector: (nodes at: 1) first arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethod3: nodes ^ RBMethodNode selector: (nodes at: 1) first contents asSymbol arguments: (nodes at: 1) last body: (nodes at: 2) last! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode1: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 5); yourself) with: (RBSequenceNode temporaries: (nodes at: 3) statements: (nodes at: 6))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode2: nodes ^ Array with: ((nodes at: 1) addAll: (nodes at: 3); yourself) with: (RBSequenceNode temporaries: #() statements: (nodes at: 4))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForMethodSequenceNode3: nodes ^ Array with: (nodes at: 1) with: (RBSequenceNode temporaries: #() statements: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForOptionalXXXXX1: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForOptionalXXXXX2: nodes ^ nodes at: 1! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimary2: nodes ^ RBLiteralNode value: (nodes at: 1)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend10: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend11: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend2: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend3: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend4: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend5: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend6: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend7: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend8: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitiveMessageSend9: nodes ^ nil! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitives1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForPrimitives2: nodes ^ (nodes at: 1) add: ((nodes at: 2) startPosition to: (nodes at: 4) startPosition); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForSequenceNode1: nodes ^ RBSequenceNode temporaries: (nodes at: 1) statements: (nodes at: 2)! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatementList2: nodes ^ (nodes at: 1) add: (nodes at: 3); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements3: nodes ^ (nodes at: 1) add: (RBReturnNode value: (nodes at: 4)); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForStatements4: nodes ^ OrderedCollection with: (RBReturnNode value: (nodes at: 2))! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries1: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries2: nodes ^ #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaries3: nodes ^ nodes at: 2! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaryVariables1: nodes ^ OrderedCollection new! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForTemporaryVariables2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForUnaryMessage1: nodes ^ Array with: (ReadStream on: (nodes at: 1) value) with: #()! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForVariable1: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-reduction actions' stamp: 'lr 4/12/2010 17:50'! reduceActionForVariable2: nodes ^ RBVariableNode named: (nodes at: 1) value! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! reduceTable ^#( #(33 0 #reduceFor:) #(33 2 #reduceActionForPrimitiveMessageSend2:) #(33 2 #reduceActionForPrimitiveMessageSend3:) #(33 2 #reduceActionForPrimitiveMessageSend4:) #(33 2 #reduceActionForPrimitiveMessageSend5:) #(33 2 #reduceActionForPrimitiveMessageSend6:) #(33 2 #reduceActionForPrimitiveMessageSend7:) #(33 2 #reduceActionForPrimitiveMessageSend8:) #(33 2 #reduceActionForPrimitiveMessageSend9:) #(33 2 #reduceActionForPrimitiveMessageSend10:) #(33 2 #reduceActionForPrimitiveMessageSend11:) #(34 2 #reduceActionForKeywordMethodName1:) #(34 3 #reduceActionForKeywordMethodName2:) #(35 0 #reduceActionForTemporaryVariables1:) #(35 2 #reduceActionForTemporaryVariables2:) #(36 0 #reduceActionForStatements1:) #(36 2 #liftFirstValue:) #(36 5 #reduceActionForStatements3:) #(36 3 #reduceActionForStatements4:) #(37 0 #reduceActionForTemporaries1:) #(37 1 #reduceActionForTemporaries2:) #(37 3 #reduceActionForTemporaries3:) #(38 1 #reduceFor:) #(38 3 #reduceActionForStatementList2:) #(39 0 #reduceActionForOptionalXXXXX1:) #(39 1 #reduceActionForOptionalXXXXX2:) #(40 3 #reduceActionForExpression1:) #(40 1 #liftFirstValue:) #(41 2 #reduceActionForBlockArgs1:) #(41 3 #reduceActionForBlockArgs2:) #(42 5 #reduceActionForBlock1:) #(42 3 #reduceActionForBlock2:) #(42 3 #reduceActionForBlock3:) #(42 7 #reduceActionForBlock4:) #(43 2 #reduceActionForCascade1:) #(43 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(44 1 #liftFirstValue:) #(45 0 #reduceActionForCascadeList1:) #(45 3 #reduceActionForCascadeList2:) #(46 0 #reduceActionForPrimitives1:) #(46 4 #reduceActionForPrimitives2:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(47 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(48 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(49 2 #createMessageNodeFrom:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(50 1 #liftFirstValue:) #(51 1 #reduceActionForUnaryMessage1:) #(52 2 #reduceActionForBinaryMessage1:) #(53 2 #reduceActionForKeywordMessage1:) #(53 3 #reduceActionForKeywordMessage2:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(54 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(55 1 #liftFirstValue:) #(56 2 #reduceActionForMethod1:) #(56 2 #reduceActionForMethod2:) #(56 2 #reduceActionForMethod3:) #(57 1 #reduceActionForVariable1:) #(57 1 #reduceActionForVariable2:) #(58 2 #reduceActionForBinaryMethodName1:) #(59 6 #reduceActionForMethodSequenceNode1:) #(59 4 #reduceActionForMethodSequenceNode2:) #(59 2 #reduceActionForMethodSequenceNode3:) #(60 0 #reduceActionForByteArray1:) #(60 2 #reduceActionForByteArray2:) #(61 0 #reduceActionForArray1:) #(61 2 #reduceActionForArray2:) #(61 3 #reduceActionForArray3:) #(62 1 #liftFirstValue:) #(62 1 #reduceActionForArrayLiteral2:) #(62 1 #reduceActionForArrayLiteral3:) #(62 1 #reduceActionForArrayLiteral4:) #(62 1 #reduceActionForArrayLiteral5:) #(62 3 #reduceActionForArrayLiteral6:) #(62 3 #reduceActionForArrayLiteral7:) #(62 3 #reduceActionForArrayLiteral8:) #(62 3 #reduceActionForArrayLiteral9:) #(62 1 #reduceActionForArrayLiteral10:) #(62 1 #reduceActionForArrayLiteral11:) #(63 3 #liftSecondValue:) #(63 1 #reduceActionForPrimary2:) #(63 1 #liftFirstValue:) #(63 1 #liftFirstValue:) #(66 2 #reduceActionForSequenceNode1:) #(67 1 #reduceFor:) #(68 1 #reduceActionForLiteral1:) #(68 1 #reduceActionForLiteral2:) #(68 1 #reduceActionForLiteral3:) #(68 1 #reduceActionForLiteral4:) #(68 1 #reduceActionForLiteral5:) #(68 1 #reduceActionForLiteral6:) #(68 1 #reduceActionForLiteral7:) #(68 2 #reduceActionForLiteral8:) #(68 2 #reduceActionForLiteral9:) #(68 2 #reduceActionForLiteral10:) #(68 2 #reduceActionForLiteral11:) #(68 2 #reduceActionForLiteral12:) #(68 4 #reduceActionForLiteral13:) #(68 4 #reduceActionForLiteral14:) #(68 4 #reduceActionForLiteral15:) #(68 4 #reduceActionForLiteral16:) )! ! !StParser methodsFor: 'generated-tables' stamp: 'lr 4/12/2010 17:50'! transitionTable ^#( #[1 0 13 0 20 0 17 0 24 0 21 0 26 0 25 0 34 0 29 0 56 0 33 0 58] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 0 82 0 64 0 49 0 66] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 57 0 59 0 170 0 64] #[1 0 61 0 20 0 65 0 29 0 69 0 57] #[1 0 61 0 20 0 65 0 29 0 73 0 57] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 77 0 24 0 170 0 29 0 170 0 30 0 53 0 46 0 81 0 59 0 170 0 64] #[0 0 0 0 64] #[1 0 170 0 1 0 170 0 6 0 170 0 9 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 15 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 0 53 0 46 0 85 0 59 0 170 0 64] #[1 0 58 0 9 0 58 0 20 0 58 0 29 0 89 0 35] #[0 0 86 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 0 0 0 64] #[1 0 93 0 1 0 185 0 6 0 189 0 9 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 193 0 15 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 197 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 2 0 64] #[0 1 14 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 1 18 0 1 0 2 0 4 0 5 0 6 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 64] #[0 0 50 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 1 22 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[1 0 61 0 20 0 65 0 29 0 201 0 57] #[0 1 10 0 64] #[0 1 6 0 64] #[1 0 205 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 213 0 3 0 217 0 10 0 221 0 17 0 225 0 20 0 229 0 23 0 233 0 24 0 237 0 25 0 241 0 26] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 245 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 1 126 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 130 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 134 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 249 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 253 0 18 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 1 1 0 41 1 5 0 66] #[0 1 138 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 142 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 150 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 146 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 118 0 19 0 64] #[1 1 9 0 5 0 102 0 19 1 13 0 39 0 102 0 64] #[0 0 94 0 5 0 19 0 64] #[0 1 114 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 114 0 4 0 5 0 19 0 64] #[1 0 162 0 2 0 162 0 4 0 162 0 5 0 162 0 19 1 17 0 45 0 162 0 64] #[0 0 150 0 2 0 4 0 5 0 19 0 64] #[1 0 154 0 2 0 154 0 4 0 154 0 5 0 154 0 19 1 21 0 24 1 25 0 26 1 29 0 52 1 33 0 53 0 154 0 64] #[1 0 158 0 2 0 158 0 4 0 158 0 5 0 158 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 41 0 51 1 45 0 52 1 49 0 53 0 158 0 64] #[1 1 110 0 4 1 110 0 5 1 53 0 13 1 110 0 19 1 110 0 20 1 110 0 24 1 110 0 26 1 110 0 64] #[1 0 146 0 4 0 146 0 5 0 146 0 19 1 37 0 20 1 21 0 24 1 25 0 26 1 57 0 51 1 61 0 52 1 65 0 53 0 146 0 64] #[0 1 106 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 4 0 6 0 5 0 6 0 7 0 6 0 8 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 14 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 24 0 6 0 26 0 6 0 30 1 69 0 33] #[1 0 58 0 9 0 58 0 20 0 58 0 29 1 73 0 35] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 1 77 0 46 0 170 0 64] #[0 1 34 0 64] #[0 0 54 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 64] #[0 0 90 0 1 0 10 0 11 0 12 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 62 0 9 0 20 0 29] #[1 1 81 0 20 1 85 0 29] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 1 89 0 61] #[1 1 38 0 19 1 38 0 21 1 93 0 60] #[0 1 158 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 154 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 166 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 170 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 162 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 97 0 4] #[1 1 101 0 5 0 102 0 19 1 105 0 39 0 102 0 64] #[1 0 61 0 20 0 65 0 29 1 109 0 57] #[1 1 113 0 9 1 117 0 15 1 121 0 18 1 125 0 19] #[0 1 129 0 19] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 133 0 16 0 117 0 17 0 106 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 137 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 106 0 64 0 181 0 68] #[0 0 70 0 19 0 64] #[1 1 141 0 2 0 142 0 4 0 142 0 5 0 142 0 19 0 142 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 1 153 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 165 0 49 1 169 0 55 1 157 0 57 1 173 0 63 0 181 0 68] #[0 0 190 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 178 0 2 0 178 0 4 0 178 0 5 0 178 0 19 1 177 0 24 0 178 0 64] #[0 0 222 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 202 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 194 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 182 0 2 0 182 0 4 0 182 0 5 0 182 0 19 1 177 0 24 0 182 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 181 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 206 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 198 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 186 0 2 0 186 0 4 0 186 0 5 0 186 0 19 1 177 0 24 0 186 0 64] #[1 0 93 0 1 1 185 0 2 1 189 0 3 1 193 0 4 1 197 0 5 1 201 0 7 1 205 0 8 1 209 0 10 0 101 0 11 0 105 0 12 0 109 0 14 1 213 0 20 0 121 0 21 0 125 0 22 0 129 0 23 1 217 0 24 1 221 0 26 0 133 0 30 1 225 0 68] #[1 1 229 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 233 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 1 237 0 8] #[0 1 241 0 8] #[1 0 93 0 1 1 245 0 3 1 249 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 37 0 19 2 41 0 21] #[0 1 102 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 106 0 19 0 64] #[0 0 78 0 19 0 64] #[0 0 118 0 9 0 15 0 18 0 19] #[1 0 82 0 1 0 37 0 9 0 82 0 10 0 82 0 11 0 82 0 12 0 82 0 14 0 41 0 15 0 82 0 16 0 82 0 17 0 82 0 19 0 82 0 20 0 82 0 21 0 82 0 22 0 82 0 23 0 82 0 29 0 82 0 30 0 45 0 37 2 45 0 66] #[1 0 58 0 9 0 58 0 20 0 58 0 29 2 49 0 35] #[1 0 61 0 20 0 65 0 29 2 53 0 57] #[0 0 134 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[0 0 130 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 57 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 98 0 5 0 19 0 64] #[1 1 37 0 20 1 21 0 24 1 25 0 26 2 61 0 50 2 65 0 51 2 69 0 52 2 73 0 53] #[1 0 238 0 2 0 238 0 4 0 238 0 5 0 238 0 19 0 238 0 24 1 25 0 26 1 29 0 52 0 238 0 64] #[1 0 242 0 2 0 242 0 4 0 242 0 5 0 242 0 19 1 37 0 20 0 242 0 24 1 25 0 26 1 41 0 51 1 45 0 52 0 242 0 64] #[0 0 230 0 2 0 4 0 5 0 19 0 24 0 64] #[0 1 110 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 246 0 2 0 246 0 4 0 246 0 5 0 246 0 19 1 37 0 20 0 246 0 24 1 25 0 26 1 57 0 51 1 61 0 52 0 246 0 64] #[1 0 250 0 2 0 250 0 4 0 250 0 5 0 250 0 19 1 37 0 20 0 250 0 24 0 250 0 26 1 41 0 51 0 250 0 64] #[0 0 226 0 2 0 4 0 5 0 19 0 24 0 26 0 64] #[1 0 254 0 2 0 254 0 4 0 254 0 5 0 254 0 19 1 37 0 20 0 254 0 24 0 254 0 26 1 57 0 51 0 254 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 149 0 42 1 145 0 48 1 149 0 49 2 77 0 54 1 157 0 57 1 161 0 63 0 181 0 68] #[0 0 110 0 4 0 5 0 19 0 64] #[0 0 34 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 26 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 22 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 38 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 174 0 1 0 6 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 29 0 30 0 64] #[0 0 30 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 18 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 42 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 10 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 46 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[0 0 14 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 20 0 21 0 22 0 23 0 24 0 26 0 30] #[1 0 170 0 1 0 170 0 6 0 170 0 10 0 170 0 11 0 170 0 12 0 170 0 14 0 170 0 16 0 170 0 17 0 170 0 20 0 170 0 21 0 170 0 22 0 170 0 23 0 170 0 29 0 170 0 30 2 81 0 46 0 170 0 64] #[0 1 30 0 64] #[0 1 182 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 186 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 2 85 0 20 2 89 0 29] #[0 1 178 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[1 1 46 0 1 1 46 0 3 1 46 0 4 1 46 0 10 1 46 0 11 1 46 0 12 1 46 0 14 1 46 0 17 1 46 0 20 1 46 0 21 1 46 0 22 1 46 0 23 1 46 0 24 1 46 0 25 1 46 0 26 1 46 0 29 1 46 0 30 1 46 0 32 2 93 0 61] #[1 1 38 0 19 1 38 0 21 2 97 0 60] #[1 1 62 0 1 1 62 0 3 1 62 0 4 1 62 0 10 1 62 0 11 1 62 0 12 2 101 0 13 1 62 0 14 1 62 0 17 1 62 0 20 1 62 0 21 1 62 0 22 1 62 0 23 1 62 0 24 1 62 0 25 1 62 0 26 1 62 0 29 1 62 0 30 1 62 0 32] #[0 1 70 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 74 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 66 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 98 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 94 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 50 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 58 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 174 0 1 0 2 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 12 0 14 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 64] #[0 1 42 0 19 0 21] #[0 2 105 0 19] #[1 2 109 0 9 0 61 0 20 0 65 0 29 0 209 0 57] #[0 0 122 0 9 0 15 0 18 0 19] #[1 1 101 0 5 0 102 0 19 2 113 0 39 0 102 0 64] #[0 0 166 0 2 0 4 0 5 0 19 0 64] #[0 0 210 0 2 0 4 0 5 0 19 0 64] #[0 0 214 0 2 0 4 0 5 0 19 0 64] #[1 0 218 0 2 0 218 0 4 0 218 0 5 0 218 0 19 1 177 0 24 0 218 0 64] #[0 0 234 0 2 0 4 0 5 0 19 0 24 0 64] #[1 0 93 0 1 0 185 0 6 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 117 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 66 0 64 0 181 0 68] #[0 2 121 0 8] #[0 2 125 0 8] #[1 0 93 0 1 1 245 0 3 2 129 0 4 1 253 0 10 0 101 0 11 0 105 0 12 0 109 0 14 2 1 0 17 2 5 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 9 0 24 2 13 0 25 2 17 0 26 2 21 0 29 0 133 0 30 2 25 0 32 2 29 0 62 2 33 0 68] #[1 2 133 0 19 2 41 0 21] #[0 1 54 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 0 126 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] #[1 0 93 0 1 0 97 0 10 0 101 0 11 0 105 0 12 0 109 0 14 0 113 0 16 0 117 0 17 0 66 0 19 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 137 0 36 0 141 0 38 0 145 0 40 0 149 0 42 0 153 0 43 0 157 0 44 0 161 0 47 0 165 0 48 0 169 0 49 0 173 0 57 0 177 0 63 0 181 0 68] #[0 0 74 0 19 0 64] #[0 1 26 0 64] #[0 1 78 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 82 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 86 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 1 90 0 1 0 3 0 4 0 10 0 11 0 12 0 14 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] #[0 2 141 0 19] #[0 0 138 0 2 0 4 0 5 0 19 0 20 0 24 0 26 0 64] )! ! !CScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49'! initializeKeywordMap keywordMap := Dictionary new. #(#(#IDENTIFIER 'auto' 65) #(#IDENTIFIER 'break' 48) #(#IDENTIFIER 'case' 38) #(#IDENTIFIER 'char' 73) #(#IDENTIFIER 'const' 40) #(#IDENTIFIER 'continue' 47) #(#IDENTIFIER 'default' 39) #(#IDENTIFIER 'do' 54) #(#IDENTIFIER 'double' 70) #(#IDENTIFIER 'else' 46) #(#IDENTIFIER 'enum' 45) #(#IDENTIFIER 'extern' 58) #(#IDENTIFIER 'float' 67) #(#IDENTIFIER 'for' 49) #(#IDENTIFIER 'goto' 50) #(#IDENTIFIER 'if' 42) #(#IDENTIFIER 'int' 69) #(#IDENTIFIER 'long' 66) #(#IDENTIFIER 'register' 71) #(#IDENTIFIER 'return' 56) #(#IDENTIFIER 'short' 68) #(#IDENTIFIER 'signed' 51) #(#IDENTIFIER 'sizeof' 24) #(#IDENTIFIER 'static' 61) #(#IDENTIFIER 'struct' 43) #(#IDENTIFIER 'switch' 52) #(#IDENTIFIER 'typedef' 57) #(#IDENTIFIER 'union' 44) #(#IDENTIFIER 'unsigned' 55) #(#IDENTIFIER 'void' 72) #(#IDENTIFIER 'volatile' 41) #(#IDENTIFIER 'while' 53)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !CScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19'! needsLineNumbers ^true! ! !CScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment ": [a-fA-F0-9] ; : [uUlL] ; : [0-9] ; : [Ee][\+\-]?+ ; : [fFlL] ; : \.\.\. ; : \/ \* ; : [a-zA-Z_] ; : [0-9] ; : (|)* ; : (0[xX]+?) | (+?) | (+?) | *\.+?? | (L? \' ( (\\ .) | ([^\\\""]) )+ \') ; : L? \"" ( (\\ .) | ([^\\\""]) )* \"" ; : \[ | (\< \:) ; : \] | (\: \>) ; : \{ | (\< \%) ; : \} | (\% \>) ; : \s+ ;"! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! CONSTANTId ^77! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! IDENTIFIER | name | name := outputStream contents. matchActions := (typeNames includes: name) ifTrue: [Array with: self TypeNameId] ifFalse: [Array with: self IDENTIFIERId]. outputStream reset. ^SmaCCToken value: name start: start id: matchActions! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! IDENTIFIERId ^76! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! TypeNameId ^132! ! !CScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! addTypeName: aString typeNames add: aString! ! !CScanner methodsFor: 'default token handling' stamp: ' 6/1/07 21:19'! comment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^147! ! !CScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^148! ! !CScanner methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. typeNames := Set new! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan4 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $F or: [ currentCharacter = $L or: [ currentCharacter = $f or: [ currentCharacter = $l ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan5 [ self recordMatch: #(77). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan6 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(78) ]. currentCharacter = $\ ifTrue: [ self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan6 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan7 self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan8 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter <= $!! or: [ (currentCharacter between: $# and: $&) or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ] ]) ifTrue: [ ^ self scan8 ]. currentCharacter = $' ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ ^ self scan9 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan9 self step. currentCharacter <= $ÿ ifTrue: [ ^ self scan8 ]. ^ self reportLastMatch! ! !CScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. ((currentCharacter between: $A and: $K) or: [ (currentCharacter between: $M and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ ^ self scan5 ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(30). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(82) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(28). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(25) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(34). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(35). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(23) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(36). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(20) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(22) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(27). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. currentCharacter = $. ifTrue: [ self step. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(74) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(29). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan5 ]. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan3 ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(77). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $U or: [ currentCharacter = $l or: [ currentCharacter = $u ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(77) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(16). self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(80) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(60) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(33). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(37) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(17). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(6). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(8) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(14). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $L ifTrue: [ self recordMatch: #IDENTIFIER. self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #IDENTIFIER. self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(79) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(80) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(1). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(81) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(59) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(31) ]. ^ self reportLastMatch! ! !JavaScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50'! initializeKeywordMap keywordMap := Dictionary new. #(#(99 'abstract' 38) #(99 'boolean' 30) #(99 'break' 81) #(99 'byte' 31) #(99 'case' 41) #(99 'catch' 72) #(99 'char' 26) #(99 'class' 8) #(99 'continue' 80) #(99 'default' 47) #(99 'do' 77) #(99 'double' 25) #(99 'else' 14) #(99 'extends' 11) #(99 'false' 95) #(99 'final' 36) #(99 'finally' 75) #(99 'float' 24) #(99 'for' 78) #(99 'if' 35) #(99 'implements' 10) #(99 'import' 44) #(99 'instanceof' 58) #(99 'int' 33) #(99 'interface' 16) #(99 'long' 27) #(99 'native' 37) #(99 'new' 76) #(99 'null' 98) #(99 'package' 29) #(99 'private' 45) #(99 'protected' 46) #(99 'public' 43) #(99 'return' 74) #(99 'short' 34) #(99 'static' 39) #(99 'strictfp' 7) #(99 'super' 22) #(99 'switch' 17) #(99 'synchronized' 40) #(99 'this' 23) #(99 'throw' 73) #(99 'throws' 20) #(99 'transient' 18) #(99 'true' 95) #(99 'try' 79) #(99 'void' 9) #(99 'volatile' 12) #(99 'while' 57)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !JavaScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! scannerDefinitionComment ": 0 | [1-9] [0-9]* ; : 0[xX][0-9a-fA-F]+ ; : 0[0-7]+ ; : [eE] [\-\+]? [0-9]+ ; : [fFdD] ; : \\ ([btnfr\""\'\\] | ([0-3] [0-7]{0,2} | [4-7][0-7]?)) ; : ( | | ) [lL]? ; : [0-9]+ \. [0-9]* ? ? | \. [0-9]+ ? ? | [0-9]+ ? | [0-9]+ ; : true | false ; : \' ([^\\\'] | ) \' ; : \"" ([^\\\""] | )* \"" ; : null ; : [a-zA-Z_] \w* ; : \r | \n | \r\n ; : \s+ ; : \/\/ [^\r\n]* ; : \/ \* ;"! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! emptySymbolTokenId ^255! ! !JavaScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! errorTokenId ^256! ! !JavaScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! multipleLineComment | char | [[(char := stream next) isNil or: [char == $*]] whileFalse. stream atEnd ifTrue: [self scannerError]. stream peekFor: $/] whileFalse. ^self whitespace! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan1 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan2 self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan3 [ self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan4 [ self recordMatch: #(94). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan5 [ self step. currentCharacter <= $!! or: [ (currentCharacter between: $# and: $[) or: [ currentCharacter >= $] ] ] ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(97) ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ (currentCharacter between: $0 and: $7) or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan6 self step. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan7 self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan6 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch! ! !JavaScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(99). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $1 and: $9) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $!! ifTrue: [ self recordMatch: #(91). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(51) ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan5 ]. currentCharacter = $% ifTrue: [ self recordMatch: #(85). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(67) ]. ^ self reportLastMatch ]. currentCharacter = $& ifTrue: [ self recordMatch: #(50). self step. currentCharacter = $& ifTrue: [ ^ self recordAndReportMatch: #(52) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(61) ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self step. (currentCharacter <= $& or: [ (currentCharacter between: $( and: $[) or: [ currentCharacter >= $] ] ]) ifTrue: [ ^ self scan6 ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter = $" or: [ currentCharacter = $' or: [ currentCharacter = $\ or: [ currentCharacter = $b or: [ currentCharacter = $f or: [ currentCharacter = $n or: [ currentCharacter = $r or: [ currentCharacter = $t ] ] ] ] ] ] ]) ifTrue: [ ^ self scan6 ]. (currentCharacter between: $0 and: $3) ifTrue: [ self step. (currentCharacter between: $0 and: $7) ifTrue: [ ^ self scan7 ]. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(96) ]. ^ self reportLastMatch ]. (currentCharacter between: $4 and: $7) ifTrue: [ ^ self scan7 ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(21) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(42). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(68) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ self recordMatch: #(89). self step. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(82) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(70) ]. ^ self reportLastMatch ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(4) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(90). self step. currentCharacter = $- ifTrue: [ ^ self recordAndReportMatch: #(87) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(69) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ self recordMatch: #(28). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(88). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #multipleLineComment ]. currentCharacter = $/ ifTrue: [ [ self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. currentCharacter = Character cr ifTrue: [ self recordMatch: #comment. self step. currentCharacter = Character lf ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(66) ]. ^ self reportLastMatch ]. currentCharacter = $0 ifTrue: [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $7) ifTrue: [ [ self recordMatch: #(93). self step. currentCharacter between: $0 and: $7 ] whileTrue. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. (currentCharacter = $D or: [ currentCharacter = $F or: [ currentCharacter = $d or: [ currentCharacter = $f ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(94) ]. (currentCharacter between: $8 and: $9) ifTrue: [ ^ self scan3 ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ ^ self scan2 ]. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. (currentCharacter = $X or: [ currentCharacter = $x ]) ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ [ self recordMatch: #(93). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. (currentCharacter = $L or: [ currentCharacter = $l ]) ifTrue: [ ^ self recordAndReportMatch: #(93) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(71). self step. currentCharacter = $< ifTrue: [ self recordMatch: #(83). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(63) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(54) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(2). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(65) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(59). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(55) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(84). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(62) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(86). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(60) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(56) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(6) ]. currentCharacter = $^ ifTrue: [ self recordMatch: #(48). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(64) ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(49). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(53) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(1) ]. currentCharacter = $~ ifTrue: [ ^ self recordAndReportMatch: #(92) ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner commentStamp: 'jmb' prior: 101168095! SmaCCGrammarScanner is the scanner for the grammar parser! !SmaCCGrammarScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:49'! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'error' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !SmaCCGrammarScanner class methodsFor: 'testing' stamp: ' 6/1/07 21:19'! needsLineNumbers ^true! ! !SmaCCGrammarScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment " : [a-zA-Z_] \w* ; : \s+ ; : \< \> ; : ; : (\"" [^\""]* \"") + ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [^\}]+ \} ; : \' \' ; : \: (\: \=)? ;"! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^43! ! !SmaCCGrammarScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^44! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 self step. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(12) ]. currentCharacter = $i ifTrue: [ self step. currentCharacter = $d ifTrue: [ ^ self recordAndReportMatch: #(4) ]. ^ self reportLastMatch ]. currentCharacter = $l ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $f ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(6) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $n ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $n ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $s ifTrue: [ self step. currentCharacter = $o ifTrue: [ self step. currentCharacter = $c ifTrue: [ ^ self recordAndReportMatch: #(3) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $r ifTrue: [ self step. currentCharacter = $i ifTrue: [ self step. currentCharacter = $g ifTrue: [ self step. currentCharacter = $h ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $r ifTrue: [ self step. currentCharacter = $t ifTrue: [ ^ self recordAndReportMatch: #(1) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ self recordMatch: #(21). self step. currentCharacter = $" ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCGrammarScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self scan2 ]. currentCharacter = $# ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $' ifTrue: [ ^ self recordAndReportMatch: #(24) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(17) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(14) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(10) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(16) ]. currentCharacter = $/ ifTrue: [ self step. currentCharacter = $* ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. currentCharacter = $: ifTrue: [ self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(25) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(7) ]. currentCharacter = $< ifTrue: [ self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(19) ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(5) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = ${ ifTrue: [ self step. currentCharacter ~= $} ifTrue: [ [ self step. currentCharacter ~= $} ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(23) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(9) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner commentStamp: 'jmb' prior: 101168205! SmaCCScannerScanner is the scanner for the scanner definition! !SmaCCScannerScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:49'! scannerDefinitionComment " : \\ [^cx] | \\ c [A-Z] | \\ x [0-9A-Fa-f]{1,4} ; : \[ ([^\]\\] | )+ \] ; : [\ \t\v\r\n]+ ; : \< [a-zA-Z_] \w* \> ; : (\# [^\r\n]*) | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) ; : \{ [0-9]* \, [0-9]* \} ; : [a-zA-Z_] \w* ; : [^\ \t\v\\\r\n\{\(\[\.] ; : \. ;"! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! emptySymbolTokenId ^30! ! !SmaCCScannerScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:49'! errorTokenId ^31! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan1 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan1 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan2 self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan3 [ self step. currentCharacter <= $[ or: [ currentCharacter >= $^ ] ] whileTrue. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scan4 self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(12) ]. ^ self reportLastMatch! ! !SmaCCScannerScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:49'! scanForToken self step. (currentCharacter <= Character backspace or: [ currentCharacter = Character newPage or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ (currentCharacter between: $!! and: $") or: [ currentCharacter = $$ or: [ (currentCharacter between: $& and: $') or: [ (currentCharacter between: $, and: $-) or: [ (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $= and: $>) or: [ currentCharacter = $@ or: [ (currentCharacter between: $] and: $^) or: [ currentCharacter = $` or: [ currentCharacter >= $} ] ] ] ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(18) ]. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ self recordMatch: #(17 18). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #(17). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character pageUp) or: [ currentCharacter = Character cr or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ self recordMatch: #comment. self step. (currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ]) ifTrue: [ [ self recordMatch: #comment. self step. currentCharacter <= Character tab or: [ (currentCharacter between: Character pageUp and: Character newPage) or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $x ifTrue: [ self step. currentCharacter = $c ifTrue: [ self step. currentCharacter = $l ifTrue: [ self step. currentCharacter = $u ifTrue: [ self step. currentCharacter = $d ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(7) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $s ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $a ifTrue: [ self step. currentCharacter = $t ifTrue: [ self step. currentCharacter = $e ifTrue: [ self step. currentCharacter = $s ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(2) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(1 18) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(4 18) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(3 18) ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(18). self step. currentCharacter = $* ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(10 18) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(9 18) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(18). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(14) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(6 18) ]. currentCharacter = $[ ifTrue: [ self step. (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) ifTrue: [ ^ self scan3 ]. currentCharacter = $\ ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $\ ifTrue: [ self step. (currentCharacter <= $b or: [ (currentCharacter between: $d and: $w) or: [ currentCharacter >= $y ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $c ifTrue: [ self step. (currentCharacter between: $A and: $Z) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. currentCharacter = $x ifTrue: [ self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ self recordMatch: #(11). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $F) or: [ currentCharacter between: $a and: $f ] ]) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = ${ ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $, ifTrue: [ [ self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(16) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(5 18) ]. ^ self reportLastMatch! ! !StScanner class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! frequencyTable ^#(0.0 1.31372e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0481767 0.0 0.0 0.0 0.0252514 0.0 0.0 2.62743e-7 1.31372e-7 5.25487e-7 1.31372e-7 1.31372e-7 0.0 1.31372e-7 0.0 2.62743e-7 0.0 1.31372e-7 7.8823e-7 2.62743e-7 2.62743e-7 1.31372e-7 5.25487e-7 0.106011 5.13007e-5 0.004554 0.00655584 2.41133e-4 3.60615e-5 1.93248e-4 0.00410241 0.00463893 0.0046369 2.82712e-4 4.64268e-4 0.0011675 9.75895e-4 0.00982753 2.26945e-4 0.00795055 0.00590903 0.0036363 0.00220212 0.00180485 0.00224265 0.00183191 0.00138545 0.00146217 0.00115246 0.0248349 0.00129723 7.50395e-4 0.00496762 8.97532e-4 1.44378e-4 0.00164497 0.00403659 0.00332443 0.00587547 0.00266882 0.00223293 0.00382922 9.91266e-4 9.99673e-4 0.00418163 3.27773e-5 6.31044e-4 0.00271013 0.00248917 0.00292348 0.00278226 0.00359742 7.08751e-4 0.00239287 0.00749351 0.00486778 0.00145908 0.00167453 0.00112251 2.2458e-4 2.32856e-4 4.40752e-5 0.00467815 1.22701e-4 0.00470173 0.00298378 7.73451e-4 2.634e-4 0.0515694 0.00918972 0.0257636 0.0226939 0.09244 0.0167193 0.0108988 0.0138365 0.042864 9.52379e-4 0.00366494 0.0402202 0.0159142 0.0440905 0.0418992 0.0154463 5.66869e-4 0.043972 0.0443068 0.0543899 0.0180997 0.00593537 0.00725816 0.00494884 0.00808567 0.00128285 7.45009e-4 0.00281083 7.45206e-4 1.08907e-4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 3.28429e-7 0.0 0.0 1.97058e-7 0.0 0.0 0.0 0.0 3.94115e-7 6.56859e-8 0.0 2.62743e-7 1.31372e-7 0.0 1.31372e-7 1.31372e-7 0.0 0.0 1.97058e-7 1.31372e-7 6.56859e-8 1.31372e-7 0.0 0.0 7.8823e-7 0.0 0.0 1.31372e-7 1.31372e-7 4.59801e-7 7.8823e-7 0.0 9.85288e-7 5.25487e-7 1.31372e-7 6.56859e-8 1.05097e-6 0.0 2.62743e-7 0.0 1.97058e-7 4.59801e-7 1.97058e-7 5.25487e-7 2.62743e-7 0.0 1.51078e-6 5.91173e-7 1.11666e-6 0.0 1.97058e-7 8.53916e-7 1.57646e-6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.56859e-8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.25487e-7 0.0 0.0 0.0 0.0 0.0 0.0 7.8823e-7 0.0 2.62743e-7 0.0 0.0 3.28429e-7 1.31372e-7 0.0 2.62743e-7 0.0 3.28429e-7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.62743e-7 0.0 5.25487e-7 0.0 0.0 1.31372e-7 0.0 0.0 0.0 0.0)! ! !StScanner class methodsFor: 'generated-initialization' stamp: 'lr 4/12/2010 17:50'! initializeKeywordMap keywordMap := Dictionary new. #(#(20 'false' 12) #(20 'nil' 14) #(20 'true' 11) #(26 '||' 15)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !StScanner class methodsFor: 'generated-comments' stamp: 'lr 4/12/2010 17:50'! scannerDefinitionComment " : ( | \_) ( | [\d\_]) *; : \d ; : \- ; : \' [^\']* \' (\' [^\']* \')* ; : \: ; : \: ( \: )+ ; : [\~\-\!!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!!\@\%\&\*\+\=\\\|\?\/\>\<\,]? ; : + ; : \"" [^\""]* \"" ; : (\. )+ ; : \$ . ; : \: \= ; : . ; # For VW literal arrays that handle #(;) -> #(#';')"! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! binarySymbolId ^26! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! emptySymbolTokenId ^64! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! errorTokenId ^65! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! nameId ^20! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06'! negativeNumber stream skip: -2. ^self scanNumber: self negativeNumberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! negativeNumberId ^22! ! !StScanner methodsFor: 'scanning' stamp: 'lr 6/28/2007 12:06'! number stream skip: -1. ^self scanNumber: self numberId! ! !StScanner methodsFor: 'generated-tokens' stamp: 'lr 4/12/2010 17:50'! numberId ^21! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan1 [ self step. currentCharacter ~= $' ] whileTrue. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan2 self recordMatch: #(23). self step. currentCharacter = $' ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan3 self recordMatch: #(24). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #variableAssignment ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan4 [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ ^ self scan4 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scan5 self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(29). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'generated-scanner' stamp: 'lr 4/12/2010 17:50'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(20 32). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(20). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $z) or: [ currentCharacter = $ª or: [ currentCharacter = $µ or: [ currentCharacter = $º or: [ (currentCharacter between: $À and: $Ö) or: [ (currentCharacter between: $Ø and: $ö) or: [ currentCharacter >= $ø ] ] ] ] ] ] ] ] ] ] whileTrue. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self scan3 ]. currentCharacter = $. ifTrue: [ ^ self scan5 ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ self recordMatch: #whitespace. self step. ((currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character lf) or: [ (currentCharacter between: Character newPage and: Character cr) or: [ currentCharacter = Character space ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #number ]. currentCharacter = $: ifTrue: [ self recordMatch: #(18 32). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(13) ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(5 32) ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ currentCharacter = $= or: [ (currentCharacter between: $? and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ ^ self recordAndReportMatch: #(1 32) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(19 32) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(17 32) ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(10 32) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(4 32) ]. currentCharacter = $" ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $" ifTrue: [ [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #comment ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ self recordMatch: #(32). self step. currentCharacter ~= $' ifTrue: [ ^ self scan1 ]. currentCharacter = $' ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $^ ifTrue: [ ^ self recordAndReportMatch: #(16 32) ]. currentCharacter = $| ifTrue: [ self recordMatch: #(9 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(2 32) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(26 32). self step. (currentCharacter between: $0 and: $9) ifTrue: [ ^ self recordAndReportMatch: #negativeNumber ]. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $> ifTrue: [ self recordMatch: #(7 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $< ifTrue: [ self recordMatch: #(6 26 32). self step. (currentCharacter = $!! or: [ (currentCharacter between: $% and: $&) or: [ (currentCharacter between: $* and: $,) or: [ currentCharacter = $/ or: [ (currentCharacter between: $< and: $@) or: [ currentCharacter = $\ or: [ currentCharacter = $| or: [ currentCharacter = $~ ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(8 32) ]. currentCharacter = ${ ifTrue: [ ^ self recordAndReportMatch: #(3 32) ]. (currentCharacter <= Character backspace or: [ currentCharacter = Character pageUp or: [ (currentCharacter between: (Character value: 14) and: Character arrowDown) or: [ currentCharacter = $` or: [ (currentCharacter between: $ and: $©) or: [ (currentCharacter between: $« and: $´) or: [ (currentCharacter between: $¶ and: $¹) or: [ (currentCharacter between: $» and: $¿) or: [ currentCharacter = $× or: [ currentCharacter = $÷ ] ] ] ] ] ] ] ] ]) ifTrue: [ ^ self recordAndReportMatch: #(32) ]. currentCharacter = $$ ifTrue: [ self recordMatch: #(32). self step. currentCharacter <= $ÿ ifTrue: [ ^ self recordAndReportMatch: #(30) ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! scanNumber: id | number | number := Number readFrom: stream. outputStream reset. matchActions := Array with: id. ^self createTokenFor: number! ! !StScanner methodsFor: 'scanning' stamp: ' 6/1/07 21:19'! variableAssignment | token | outputStream skip: -2. stream skip: -2. matchActions := Array with: self nameId. token := self createTokenFor: outputStream contents. outputStream reset. ^token! ! !SmaCCItemSet commentStamp: 'jmb' prior: 101168312! SmaCCItemSet represents a LALR(1) or a LR(1) item set. Instance Variables: type #LALR1 or #LR1 ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCItemSet self class = aSmaCCItemSet class ifTrue: [type == #LALR1 ifTrue: [^self isLALREqualTo: aSmaCCItemSet] ifFalse: [^self isLREqualTo: aSmaCCItemSet]]. ^false! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! action: aSmaCCSymbol prefer: aClass | action actionItem eachAction | action := SmaCCRejectAction new. self do: [:each | eachAction := each action: aSmaCCSymbol. action class = SmaCCRejectAction ifTrue: [action := eachAction. actionItem := each] ifFalse: [(eachAction = action or: [eachAction class = SmaCCRejectAction]) ifFalse: [eachAction class = SmaCCShiftAction | (action class = SmaCCShiftAction) ifTrue: ["Shift/Reduce conflict -- check precedence" (aSmaCCSymbol precedence isNil or: [each precedence isNil or: [actionItem precedence isNil]]) ifTrue: ["No precedence, choose shift" eachAction class = SmaCCShiftAction ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict'. action := eachAction. actionItem := each] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict']] ifFalse: [(each precedence > actionItem precedence or: [each precedence = actionItem precedence and: [eachAction class = aClass]]) ifTrue: [self raiseXReduceNotification: each with: actionItem type: 'Shift/Reduce Conflict (handled by precedence rules)'. action := eachAction. actionItem := each] ifFalse: [(each precedence = actionItem precedence and: [SmaCCRejectAction = aClass]) ifTrue: [self raiseXReduceNotificationWithNoPreferredItem: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)'. ^aClass new] ifFalse: [self raiseXReduceNotification: actionItem with: each type: 'Shift/Reduce Conflict (handled by precedence rules)']]]] ifFalse: ["Reduce/Reduce conflict -- just pick one and proceed" self raiseXReduceNotification: actionItem with: each type: 'Reduce/Reduce Conflict']]]]. ^action! ! !SmaCCItemSet methodsFor: 'adding' stamp: 'lr 1/6/2007 22:24'! add: aSmaCCLR1Item | index item | aSmaCCLR1Item == nil ifTrue: [^aSmaCCLR1Item]. index := self findElementOrNil: aSmaCCLR1Item. item := array at: index. item == nil ifTrue: [self atNewIndex: index put: aSmaCCLR1Item. self performClosureOn: aSmaCCLR1Item] ifFalse: [item mergeWith: aSmaCCLR1Item]. ^aSmaCCLR1Item! ! !SmaCCItemSet methodsFor: 'copying' stamp: 'lr 11/25/2009 18:30'! copyEmpty: anInteger ^ (Set new: anInteger) type: type; yourself! ! !SmaCCItemSet methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^self inject: self class hash into: [:sum :each | sum bitXor: each hash]! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:37'! initialize super initialize. type := #LALR1! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLALREqualTo: aSmaCCItemSet ^aSmaCCItemSet size = self size and: [self allSatisfy: [:each | aSmaCCItemSet includes: each]]! ! !SmaCCItemSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLREqualTo: anItemSet ^anItemSet size = self size and: [self allSatisfy: [:each | | item | (item := anItemSet itemFor: each) notNil and: [each isLR1EqualTo: item]]]! ! !SmaCCItemSet methodsFor: 'private' stamp: 'lr 1/6/2007 22:24'! itemFor: anObject ^array at: (self findElementOrNil: anObject)! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCItemSet self == aSmaCCItemSet ifTrue: [^self]. aSmaCCItemSet do: [:each | self add: each]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! moveOn: aSmaCCSymbol | anItemSet | anItemSet := self class new. anItemSet type: type. self do: [:each | each nextSymbol == aSmaCCSymbol ifTrue: [anItemSet add: each moveNext]]. ^anItemSet! ! !SmaCCItemSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! performClosureOn: aSmaCCLR1Item | nextSymbol rest first followers | nextSymbol := aSmaCCLR1Item nextSymbol. nextSymbol isTerminal ifTrue: [^self]. rest := aSmaCCLR1Item rest. first := rest firstTerminals. followers := SmaCCSymbolSet new. (first includes: SmaCCSymbol empty) ifTrue: [first remove: SmaCCSymbol empty. followers baseOn: aSmaCCLR1Item followers]. followers addAll: first. nextSymbol productionsDo: [:each | self add: (SmaCCLR1Item symbol: nextSymbol rhs: each follow: followers)]! ! !SmaCCItemSet methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream self do: [:each | aStream tab; nextPutAll: each printString; cr]! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:06'! raiseXReduceNotification: preferredSmaCCLR1Item with: otherSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: preferredSmaCCLR1Item printString; nextPutAll: ' *****'; cr; nextPutAll: otherSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'accessing' stamp: 'lr 1/7/2007 11:07'! raiseXReduceNotificationWithNoPreferredItem: firstSmaCCLR1Item with: secondSmaCCLR1Item type: aString | stream | stream := WriteStream with: String new. stream nextPutAll: firstSmaCCLR1Item printString; cr; nextPutAll: secondSmaCCLR1Item printString. SmaCCCompilationNotification new tag: stream contents; signal: aString! ! !SmaCCItemSet methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! type: aSmaCCSymbol type := aSmaCCSymbol! ! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/18/2003 13:44'! owner: aSmaCCParserGenerator ^ self owner: aSmaCCParserGenerator ownerAcceptSelector: nil! ! !SmaCCCodeHolder class methodsFor: 'instance creation' stamp: 'apl 2/17/2003 11:26'! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ^ self new owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol ! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/18/2003 12:39'! contents: aStringOrText notifying: aRequestor | result | self ownerAcceptSelector notNil ifTrue: [result := (self owner perform: self ownerAcceptSelector with: aStringOrText with: aRequestor)] ifFalse: [result := true]. result ifTrue: [self acceptContents: aStringOrText. ^ true]. ^ false! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:13'! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | selections labelsString linesArray | selections := #(#find #findAgain #setSearchString #again #undo #copySelection #cut #paste #pasteRecent #accept #cancel #saveContentsInFile #readContentsFromFile ). labelsString := 'find...(f)\find again (g)\set search string (h)\do again (j)\undo (z)\copy (c)\cut (x)\paste (v)\paste...\accept (s)\cancel (l)\save contents in file...\read contents from file...' withCRs. linesArray := #(3 5 9 11 14). ^ aMenu labels: labelsString lines: linesArray selections: selections! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:30'! contentsMorph contentsMorph isNil ifTrue: [ contentsMorph := PluggableTextMorph on: self text: #contents accept: #contents:notifying: readSelection: nil menu: #contentsMenu:shifted:]. ^ contentsMorph ! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/18/2003 10:25'! hasUnacceptedEdits ^ self contentsMorph hasUnacceptedEdits! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39'! hasUnacceptedEdits: aBoolean ^ self contentsMorph hasUnacceptedEdits: aBoolean! ! !SmaCCCodeHolder methodsFor: 'edit flag' stamp: 'apl 2/17/2003 11:39'! okToChange ^ super okToChange! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23'! owner ^owner! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:23'! owner: anObject owner := anObject! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 12:30'! owner: aSmaCCParserGenerator ownerAcceptSelector: aSymbol self owner: aSmaCCParserGenerator. self ownerAcceptSelector: aSymbol. ! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26'! ownerAcceptSelector ^ownerAcceptSelector! ! !SmaCCCodeHolder methodsFor: 'accessing' stamp: 'apl 2/17/2003 11:26'! ownerAcceptSelector: anObject ownerAcceptSelector := anObject! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'apl 2/17/2003 11:16'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 14:31'! readContentsFromFile | result | (result := UIManager default chooseFileMatching: nil label: 'Choose file to open' translated) ifNotNil: [ result asFileReference exists ifFalse: [ ^ UIManager default inform: ' ' , result , ' doesn''t exists ' ]. self acceptContents: result asFileReference readStream contents. self changed: #contents ]! ! !SmaCCCodeHolder methodsFor: 'menus' stamp: 'ThierryGoubier 3/18/2013 16:07'! saveContentsInFile | result | (result := UITheme current fileSaveIn: World title: 'Choose file to open' translated extensions: nil path: FileSystem workingDirectory) ifNotNil: [ result asFileReference exists ifTrue: [ ^ UIManager default inform: ' ' , result , ' already exists ' ]. result asFileReference writeStream nextPutAll: contents. self changed: #contents ]! ! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 22:45'! bootstrap | scanner grammer | scanner := self buildScanner: SmaCCScannerScanner andParser: SmaCCScannerParser. grammer := self buildScanner: SmaCCGrammarScanner andParser: SmaCCGrammarParser. scanner compileChanges. grammer compileChanges! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/22/2007 13:12'! buildScanner: aScannerClass andParser: aParserClass | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: (self definitionFrom: aScannerClass selector: #scannerDefinitionComment) andParser: (self definitionFrom: aParserClass selector: #parserDefinitionComment). parserCompiler scannerClass: aScannerClass; parserClass: aParserClass. [ parserCompiler createChanges; compileDefinitionComments ] on: SmaCCCompilationNotification do: [ :notification | Transcript show: notification messageText; cr. notification resume ]. ^ parserCompiler! ! !ParserRecompiler class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50'! definitionFrom: aClass selector: aSymbol | source input output | source := aClass class sourceCodeAt: aSymbol. input := ReadStream on: source. output := WriteStream with: String new. input upTo: $". [ input atEnd ] whileFalse: [ (input peekFor: $") ifTrue: [ output nextPut: $" ]. output nextPutAll: (input upTo: $") ]. ^ output contents! ! !ParserRecompiler class methodsFor: 'public' stamp: 'lr 1/8/2007 11:54'! examples | class | #( CParser JavaParser StParser ) do: [ :each | class := Smalltalk classNamed: each. (self buildScanner: class scannerClass andParser: class) compileChanges ]! ! !SmaCCAction commentStamp: 'jmb' prior: 101168464! SmaCCAction is an abstract class that represents an action in the LR parsing table. Subclasses must implement the following messages: accessing id! !SmaCCAcceptAction commentStamp: 'jmb' prior: 101168665! SmaCCAcceptAction represents an accept action in the parser (i.e., we have parsed a valid string).! !SmaCCAcceptAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r00! ! !SmaCCAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^self subclassResponsibility! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isReduce ^false! ! !SmaCCAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isShift ^false! ! !SmaCCReduceAction commentStamp: 'jmb' prior: 101168814! SmaCCReduceAction represents a reduce action in our parser's table. Instance Variables: rhs the rhs that is being reduced symbol the symbol that has the rhs! !SmaCCReduceAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS; yourself! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r10! ! !SmaCCReduceAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isReduce ^true! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! rhs ^rhs! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^rhs size! ! !SmaCCReduceAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! symbol ^symbol! ! !SmaCCReduceAction methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS rhs := aSmaCCRHS. symbol := aSmaCCSymbol! ! !SmaCCRejectAction commentStamp: 'jmb' prior: 101169060! SmaCCRejectAction represents a reject action in the parsing tables.! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize Reject := self basicNew! ! !SmaCCRejectAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^Reject! ! !SmaCCRejectAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! releaseObjects Reject := nil! ! !SmaCCRejectAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r11! ! !SmaCCShiftAction commentStamp: 'jmb' prior: 101169177! SmaCCShiftAction represents a shift action in the parser's tables.! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize Shift := self basicNew! ! !SmaCCShiftAction class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^Shift! ! !SmaCCShiftAction class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! releaseObjects Shift := nil! ! !SmaCCShiftAction methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! id ^2r01! ! !SmaCCShiftAction methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isShift ^true! ! !SmaCCEdge commentStamp: '' prior: 101169295! SmaCCEdge represents a transition in a Finite Automata (directed graph). It is labeled with the characters or states (possibly none, indicating an epsilon transition) that cause the transition. Instance Variables: toNode The node that this is transitioning to. transitionObjects The characters or symbols that cause the transition. Note that there are no duplicates and all characters/symbols are sorted.! !SmaCCCharacterEdge commentStamp: '' prior: 101169819! SmaCCCharacterEdge is a SmaCCEdge for Character transitions! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/6/2007 22:50'! generateCharacterSetFor: aSelector | stream | stream := WriteStream with: String new. 0 to: SmaCCGrammar maximumCharacterValue do: [:i | | ch | ch := Character value: i. (ch perform: aSelector) ifTrue: [stream nextPut: ch]]. ^stream contents! ! !SmaCCCharacterEdge class methodsFor: 'class initialization' stamp: 'lr 1/8/2007 23:30'! initializeIsExpressions "Creates a map from sets of characters to selectors that start with 'is' on Character. This allows generated scanners to take full advantage of selectors that are already implemented on Character" IsExpressions := Dictionary new. "selectors := Character selectors select: [:each | ('is*' match: each) and: [each numArgs = 0 and: [(each at: 3) isUppercase]]]. selectors do: [:sel | | string | string := self generateCharacterSetFor: sel. string isEmpty ifFalse: [IsExpressions at: string put: sel]]"! ! !SmaCCCharacterEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^self class = aSmaCCEdge class and: [self transitionObjects <= aSmaCCEdge transitionObjects]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! closestIsExpression "Attempts to find the #is selector that most closely matches the character set that this edge transitions on." | expressions closest | expressions := IsExpressions keys select: [:each | each allSatisfy: [:ch | self includes: ch]]. expressions isEmpty ifTrue: [^nil]. closest := IsExpressions at: (expressions asSortedCollection: [:a :b | a size > b size]) first. (self minMaxPairsWithout: closest) size <= (self minMaxPairsWithout: nil) size ifFalse: [^nil]. ^closest! ! !SmaCCCharacterEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! does: aSequenceableCollection include: anObject | start stop mid | (anObject isKindOf: Character) ifFalse: [^false]. start := 1. stop := aSequenceableCollection size. stop = 0 ifTrue: [^false]. [mid := (start + stop) // 2. mid = start] whileFalse: [(aSequenceableCollection at: mid) asInteger < anObject asInteger ifTrue: [start := mid] ifFalse: [stop := mid]]. ^(aSequenceableCollection at: start) = anObject or: [(aSequenceableCollection at: stop) = anObject]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^self transitionObjects inject: 0 into: [:sum :each | sum + (frequencyTable at: each asInteger \\ frequencyTable size + 1)]! ! !SmaCCCharacterEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! edgeLabel ^transitionObjects! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! expression | stream isSelector | stream := WriteStream with: String new. stream nextPut: $(. transitionObjects size = SmaCCGrammar maximumCharacterValue ifTrue: [self outputInvertedMatchOn: stream] ifFalse: [isSelector := self outputClosestIsMethodOn: stream. self outputExpressionOn: stream without: isSelector]. stream nextPut: $). ^stream contents! ! !SmaCCCharacterEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isCharacterTransition ^true! ! !SmaCCCharacterEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCEdge super mergeWith: aSmaCCEdge. transitionObjects := String withAll: (transitionObjects asSortedCollection: [:a :b | a asInteger < b asInteger])! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! minMaxPairsWithout: aSelector "Converts a list of characters into a collection of pairs representing the minimum and maximum of each sequence. The list is first filtered to include only those characters that fail aSelector." | start last pairs charsLeft | charsLeft := aSelector isNil ifTrue: [transitionObjects] ifFalse: [transitionObjects reject: [:ch | ch perform: aSelector]]. pairs := OrderedCollection new. charsLeft isEmpty ifTrue: [^pairs]. last := charsLeft first. start := nil. charsLeft do: [:each | last asInteger + 1 = each asInteger ifFalse: [start notNil ifTrue: [pairs add: (Array with: start with: last)]. start := each]. last := each]. pairs add: (Array with: start with: last). ^pairs! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputClosestIsMethodOn: aStream | expr | expr := self closestIsExpression. expr isNil ifFalse: [aStream nextPutAll: 'currentCharacter ' , expr]. ^expr! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputExpressionFor: aPair on: aStream aPair first = aPair last ifTrue: [^self outputMatchSingleCharacter: aPair first on: aStream]. aPair first = (Character value: 0) ifTrue: [^self outputMatchLessThan: aPair last on: aStream]. aPair last = (Character value: SmaCCGrammar maximumCharacterValue) ifTrue: [^self outputMatchGreaterThan: aPair first on: aStream]. self outputMatchRange: aPair on: aStream! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputExpressionOn: aStream without: aSelector | pairs | pairs := self minMaxPairsWithout: aSelector. pairs isEmpty ifTrue: [^self]. aSelector notNil ifTrue: [aStream nextPutAll: ' or: [']. pairs do: [:each | self outputExpressionFor: each on: aStream] separatedBy: [aStream nextPutAll: ' or: [']. aStream next: pairs size - 1 put: $]. aSelector notNil ifTrue: [aStream nextPut: $]]! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16'! outputInvertedMatchOn: aStream | char | char := Character value: ((0 to: SmaCCGrammar maximumCharacterValue) detect: [:each | (transitionObjects includes: (Character value: each)) not]). aStream nextPutAll: 'currentCharacter ~= '; nextPutAll: char storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchGreaterThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter >= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchLessThan: aCharacter on: aStream aStream nextPutAll: 'currentCharacter <= '; nextPutAll: aCharacter storeString! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! outputMatchRange: aPair on: aStream aStream nextPutAll: '(currentCharacter between: '; nextPutAll: aPair first storeString; nextPutAll: ' and: '; nextPutAll: aPair last storeString; nextPutAll: ')'! ! !SmaCCCharacterEdge methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:16'! outputMatchSingleCharacter: aCharacter on: aStream aStream nextPutAll: 'currentCharacter = '; nextPutAll: aCharacter storeString! ! !SmaCCEdge class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! to: aSmaCCNode on: aCollectionOrNil | edge | edge := self new. edge to: aSmaCCNode on: aCollectionOrNil. ^edge! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^true! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCEdge self class = aSmaCCEdge class ifFalse: [^false]. ^self to = aSmaCCEdge to and: [self transitionObjects = aSmaCCEdge transitionObjects]! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! canMergeWith: aSmaCCEdge ^self class = aSmaCCEdge class! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! does: aSequenceableCollection include: anObject ^aSequenceableCollection includes: anObject! ! !SmaCCEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^0! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! edgeLabel ^transitionObjects isNil ifTrue: ['epsilon'] ifFalse: [transitionObjects inject: '' into: [:sum :each | sum , each printString]]! ! !SmaCCEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^(self to hash bitShift: 14) bitXor: transitionObjects hash! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includes: anObject ^self does: transitionObjects include: anObject! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isCharacterTransition ^false! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEmpty ^transitionObjects isEmpty! ! !SmaCCEdge methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEpsilonTransition ^transitionObjects isNil! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCEdge transitionObjects := Array withAll: (transitionObjects , aSmaCCEdge transitionObjects) asSet asSortedCollection! ! !SmaCCEdge methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: '---'; nextPutAll: self edgeLabel; nextPutAll: '--->'; nextPutAll: toNode printString! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! remove: aCollection transitionObjects := transitionObjects reject: [:each | self does: aCollection include: each]! ! !SmaCCEdge methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! to ^toNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! to: aSmaCCNode toNode := aSmaCCNode! ! !SmaCCEdge methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! to: aSmaCCNode on: aStringOrNil toNode := aSmaCCNode. transitionObjects := aStringOrNil! ! !SmaCCEdge methodsFor: 'private' stamp: ' 6/1/07 21:19'! transitionObjects ^transitionObjects! ! !SmaCCStateEdge commentStamp: '' prior: 101169935! SmaCCStateEdge is a SmaCCEdge for Symbol (state) transitions ! !SmaCCStateEdge methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCEdge ^self class ~= aSmaCCEdge class or: [self transitionObjects first <= aSmaCCEdge transitionObjects first]! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! edgeFrequencyUsingTable: frequencyTable ^SmallInteger maxVal * transitionObjects size! ! !SmaCCStateEdge methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! expression ^transitionObjects size = 1 ifTrue: ['state == #' , transitionObjects asArray first] ifFalse: ['(' , transitionObjects asArray storeString , ' includes: state)']! ! !SmaCCGrammar commentStamp: '' prior: 101170051! SmaCCGrammar represents a LR(1) or a LALR(1) grammar. Instance Variables: otherStartingSymbols other starting productions. The first production in the grammar is the defaulting starting position, but this can list other starting positions. shiftReduceTable when we have a shift/reduce conflict how should we handle it. This table contains the left/right associative rules. Left is a reduce action and right is a shift action. symbols all symbols in our grammar -- includes both terminal and non-terminal tokens the tokens for our scanner type the type of grammar (LALR1 or LR1) ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! allCharacters ^String withAll: ((0 to: self maximumCharacterValue) collect: [:each | Character value: each])! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! ignoreCase ^IgnoreCase! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! ignoreCase: aBoolean IgnoreCase := aBoolean! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! implicitToken: aString | symbol node | symbol := (aString copyFrom: 2 to: aString size - 1) asSymbol. (Character canUnderstand: symbol) ifFalse: [^nil]. node := SmaCCCharacterRENode characters: (self allCharacters select: [:each | each perform: symbol]). node position: SmallInteger maxVal. "Implicit nodes have least precedence" ^node! ! !SmaCCGrammar class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize IgnoreCase := false. self maximumCharacterValue: 255! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maximumCharacterValue ^MaximumCharacterValue! ! !SmaCCGrammar class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maximumCharacterValue: anInteger MaximumCharacterValue := anInteger. SmaCCCharacterEdge initializeIsExpressions! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addEmptySymbol self addSymbol: SmaCCSymbol empty. self addSymbol: SmaCCSymbol error! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addStartingSymbol: aSmaCCSymbol (otherStartingSymbols includes: aSmaCCSymbol) ifFalse: [otherStartingSymbols add: aSmaCCSymbol]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! addSymbol: aSmaCCSymbol ^symbols add: aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! allStartingSymbols "Return all starting symbols with the default starting symbol listed first." | startingSymbols default | default := self startSymbol. startingSymbols := otherStartingSymbols copy. startingSymbols remove: default ifAbsent: []. startingSymbols := startingSymbols collect: [:each | (SmaCCStartingSymbol name: 'B e g i n' , each name) addProduction: ((SmaCCRHS new) add: each; yourself); yourself]. startingSymbols addFirst: default. ^startingSymbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! calculateFirstSets | changed | changed := true. [changed] whileTrue: [changed := false. self symbols do: [:each | changed := changed | each calculateFirstTerminals]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! emptySymbols ^self symbols select: [:each | each isTerminal not and: [each isEmpty]]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! initialItemSetFor: aSmaCCSymbol ^(aSmaCCSymbol asLRItemSet) type: type; yourself! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize type := #LALR1. symbols := OrderedCollection new. shiftReduceTable := Dictionary new. otherStartingSymbols := OrderedCollection new! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! keywordRegularExpressionFor: aString | regularExpressionString regex | regularExpressionString := (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '""' with: '"'. regex := regularExpressionString inject: nil into: [:sum :each | sum isNil ifTrue: [SmaCCCharacterRENode characters: (String with: each)] ifFalse: [sum , (SmaCCCharacterRENode characters: (String with: each))]]. regex addStates: scannerDefinition states. ^regex! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! keywordTerminalNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols addFirst: ((SmaCCTerminalSymbol name: aString) regularExpression: (self keywordRegularExpressionFor: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! leftPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCReduceAction! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeGroupFor: aSmaCCRHSCollection | symbol name | name := aSmaCCRHSCollection inject: '' into: [:sum :each | sum , ' | ' , each printString]. symbol := self nonTerminalSymbolNamed: 'Group: ' , name. symbol isEmpty ifTrue: [(aSmaCCRHSCollection allSatisfy: [:each | each size = 1]) ifTrue: [aSmaCCRHSCollection do: [:each | each reduceAction: '''1''']]. aSmaCCRHSCollection do: [:each | symbol addProduction: each]]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeOptionalSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Optional: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'nil'; yourself); addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: '''1'''; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeRepeatMultipleSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat Multiple: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; reduceAction: 'OrderedCollection with: ''1'''; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeRepeatSymbolFor: aSmaCCSymbol | symbol | symbol := self nonTerminalSymbolNamed: 'Repeat: ' , aSmaCCSymbol printString. symbol isEmpty ifTrue: [symbol addProduction: ((SmaCCRHS new) reduceAction: 'OrderedCollection new'; yourself); addProduction: ((SmaCCRHS new) add: symbol; add: aSmaCCSymbol; reduceAction: '''1'' add: ''2''; yourself'; yourself)]. ^symbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! makeTokenIdMethodFor: aString | token | token := (scannerDefinition includesTokenNamed: aString) ifTrue: [self terminalSymbolNamed: aString] ifFalse: [symbols detect: [:each | each name = aString] ifNone: [symbols add: (SmaCCTerminalSymbol name: aString)]]. token createIdMethod: true! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! nonAssociativePrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCRejectAction! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! nonTerminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [self addSymbol: (SmaCCNonTerminalSymbol name: aString)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! preferredActionFor: aSmaCCSymbol ^shiftReduceTable at: aSmaCCSymbol ifAbsent: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! reduceTableIndexFor: aSmaCCSymbol rhs: aSmaCCRHS | index | index := 0. self symbols do: [:each | each = aSmaCCSymbol ifTrue: [^index + (each positionOf: aSmaCCRHS)]. index := index + each size]. ^0! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! rightPrecedenceFor: aSmaCCSymbol shiftReduceTable at: aSmaCCSymbol put: SmaCCShiftAction! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! scannerDefinition: aSmaCCScannerDefinition scannerDefinition := aSmaCCScannerDefinition! ! !SmaCCGrammar methodsFor: 'precedence' stamp: ' 6/1/07 21:19'! setOperatorPrecedenceFor: aSmaCCSymbol to: anInteger aSmaCCSymbol precedence: anInteger! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! setStartSymbolIfNone: aSmaCCSymbol | startSymbol | self startSymbol notNil ifTrue: [^self]. startSymbol := SmaCCStartingSymbol name: 'B e g i n'. self addSymbol: startSymbol. startSymbol addProduction: ((SmaCCRHS new) add: aSmaCCSymbol; yourself)! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! startSymbol ^symbols detect: [:each | each isStartingSymbol] ifNone: [nil]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols ^symbols! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols: aCollection symbols := aCollection! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! terminalSymbolNamed: aString ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString); yourself)]! ! !SmaCCGrammar methodsFor: 'private' stamp: ' 6/1/07 21:19'! terminalSymbolNamed: aString ifAbsent: aBlock ^symbols detect: [:each | each name = aString] ifNone: [symbols add: ((SmaCCTerminalSymbol name: aString) regularExpression: (scannerDefinition tokenNamed: aString ifAbsentPut: [| node | node := self class implicitToken: aString. node isNil ifTrue: [^aBlock value]. node addStates: scannerDefinition nonExcludeStates. node]); yourself)]! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokens ^scannerDefinition tokens! ! !SmaCCGrammar methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! type: aSmaCCSymbol type := aSmaCCSymbol! ! !SmaCCGrammar methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! unusedSymbols | nonTerminals problemSymbols todo symbol | nonTerminals := self symbols reject: [:each | each isTerminal]. problemSymbols := nonTerminals asSet. problemSymbols remove: self startSymbol. todo := OrderedCollection with: self startSymbol. [todo isEmpty] whileFalse: [symbol := todo removeFirst. symbol productionsDo: [:rhs | rhs do: [:each | each isTerminal ifFalse: [(problemSymbols includes: each) ifTrue: [todo add: each. problemSymbols remove: each]]]]]. ^problemSymbols! ! !SmaCCGrammarCompiler commentStamp: 'jmb' prior: 101170878! SmaCCGrammarCompiler compiles a SmaCCGrammar. Instance Variables: actions the action table for the parser. It contains the action (shift/reduce/accept/reject) for each possible state/symbol pair grammar our grammar itemSets the item sets for our grammar model where we are compiling our changes into parserClass the parser class for our changes parserDefinitionString the definition of our parser scannerCompiler a compiler for the scanner shiftTable a table mapping a state/symbol pair to the new state that is aquired by shifting the symbol startingStateMap the state for SmaCCSymbol's starting item set ! !SmaCCGrammarCompiler class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! new ^self basicNew initialize! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! actionForState: anInteger on: aSmaCCSymbol | action newStateIndex | action := (itemSets at: anInteger) action: aSmaCCSymbol prefer: (grammar preferredActionFor: aSmaCCSymbol). action isShift ifTrue: [newStateIndex := shiftTable at: (Array with: anInteger with: aSmaCCSymbol). ^(newStateIndex bitShift: 2) + action id]. action isReduce ifTrue: [^((grammar reduceTableIndexFor: action symbol rhs: action rhs) bitShift: 2) + action id]. ^action id! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! arrayTypeMask ^self hasLiteralByteArrays ifTrue: [0] ifFalse: [2]! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! buildScanner: scannerString andParser: parserString | parser | scannerCompiler grammar: self grammar. scannerCompiler scannerDefinitionString: scannerString. parserDefinitionString := parserString. scannerCompiler parseTokens. parser := SmaCCGrammarParser on: (ReadStream on: parserString). parser grammar: grammar. parser parse! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! changes ^model changes! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 1/7/2007 11:08'! checkFor: problemSymbols errorMessage: errorMessage | stream | problemSymbols isEmpty ifTrue: [^self]. stream := WriteStream with: String new. problemSymbols do: [:each | stream nextPutAll: each printString] separatedBy: [stream space]. SmaCCCompilationNotification new tag: stream contents; signal: errorMessage! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! checkForEmptySymbols self checkFor: grammar emptySymbols errorMessage: 'Missing non-terminal productions'! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! checkForUnusedSymbols self checkFor: grammar unusedSymbols errorMessage: 'Unused non-terminal symbols'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 3/10/2012 22:52'! compileChanges RBRefactoryChangeManager instance performChange: self changes. scannerCompiler scannerClass realClass ifNotNilDo: [:each | each initializeKeywordMap]! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileDefinitionComments scannerCompiler compileScannerDefinitionComment. self compileParserDefinitionComment! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileInto: sClass andParser: pClass self scannerClass: sClass. self parserClass: pClass. self createChanges. self compileChanges! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileItemSetsComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'itemSetsComment'; cr; cr; tab; nextPut: $"; cr. itemSets keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileParser self compileTransitionTable. self compileStartingStateIds. self compileReductionTable. self compileScannerClassIntoParser! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileParserDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'parserDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (parserDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileReductionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'reduceTable'; cr; tab; nextPutAll: '^#('; cr. self reduceTable do: [:each | stream nextPutAll: '#('. each do: [:e | stream nextPutAll: e storeString] separatedBy: [stream space]. stream nextPut: $); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileScanner scannerCompiler compileScanner! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileScannerClassIntoParser | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerClass'; cr; tab; nextPutAll: '^'; nextPutAll: scannerCompiler scannerClass name. self parserClass theMetaClass compile: stream contents classified: #'generated-accessing'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:00'! compileStartingStateIds startingStateMap keysAndValuesDo: [:symbol :position | | stream | stream := WriteStream with: String new. stream nextPutAll: 'startingStateFor'; nextPutAll: symbol compileName; cr; tab; nextPutAll: '^'; nextPutAll: position printString. parserClass theMetaClass compile: stream contents classified: #'generated-starting states']! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'ThierryGoubier 6/14/2012 11:42'! compileSymbolComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'symbolComment'; cr; cr; tab; nextPut: $"; cr. scannerCompiler symbols keysAndValuesDo: [:index :each | stream nextPutAll: index printString; nextPutAll: '. '; nextPutAll: (each printString copyReplaceAll: '"' with: '""'); cr]. stream nextPut: $". self parserClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileTransitionTable | stream | stream := WriteStream with: String new. stream nextPutAll: 'transitionTable'; cr; tab; nextPutAll: '^#('; cr. self transitionTable do: [:each | stream nextPutAll: (self hasLiteralByteArrays ifTrue: ['#['] ifFalse: ['#(']). each do: [:byte | stream nextPutAll: byte printString] separatedBy: [stream nextPut: $ ]. stream nextPut: (self hasLiteralByteArrays ifTrue: [$]] ifFalse: [$)]); cr]. stream nextPut: $). parserClass compile: stream contents classified: #'generated-tables'! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressTable: table ^table collect: [:row | self compressTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressTableRow: row | uniqueItems | uniqueItems := self uniqueNonErrorActionsForTableRow: row. ^uniqueItems size = 1 ifTrue: [self singleActionTableRow: row forAction: uniqueItems first] ifFalse: [self multipleActionTableRow: row]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! compressedRowStream ^WriteStream with: (self hasLiteralByteArrays ifTrue: [ByteArray new] ifFalse: [Array new])! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! createChanges self removeOldMethods. self checkForEmptySymbols. self checkForUnusedSymbols. self compileScanner. self compileParser! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! createItemSets | itemSet newState index | startingStateMap := Dictionary new. grammar calculateFirstSets. itemSets := OrderedCollection new. grammar allStartingSymbols do: [:each | itemSets add: (grammar initialItemSetFor: each). startingStateMap at: each put: itemSets size]. shiftTable := Dictionary new. index := 1. [index <= itemSets size] whileTrue: [itemSet := itemSets at: index. grammar symbols do: [:each | newState := itemSet moveOn: each. newState notEmpty ifTrue: [shiftTable at: (Array with: index with: each) put: (self indexOfState: newState)]]. index := index + 1]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! createTransitionTable | table | table := (1 to: itemSets size) collect: [:index | scannerCompiler symbols collect: [:each | self actionForState: index on: each]]. actions := self compressTable: table! ! !SmaCCGrammarCompiler methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:33'! defineClass: aString asSubclassOf: aBehavior model defineClass: aBehavior name , ' subclass: #' , aString , ' instanceVariableNames: '''' classVariableNames: '''' poolDictionaries: '''' category: '''' '. ^model classNamed: aString asSymbol! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! generatedMethodsIn: aRBClass ^aRBClass selectors select: [:each | (aRBClass protocolsFor: each) allSatisfy: [:protocol | protocol notNil and: ['generated*' match: protocol]]]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! grammar ^grammar isNil ifTrue: [grammar := SmaCCGrammar new] ifFalse: [grammar]! ! !SmaCCGrammarCompiler methodsFor: 'testing' stamp: 'lr 11/25/2009 18:59'! hasLiteralByteArrays "The #hasLiteralByteArrays wasn't meant to be changed without also changing the SmaCCParser #actionForState:and: and #binarySearchIn:for:size: methods. This issue is fixed now and the SmaCCParser can now handle both cases." ^ true! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! indexOfState: newState | newStateIndex | newStateIndex := itemSets indexOf: newState. newStateIndex = 0 ifTrue: [itemSets add: newState. newStateIndex := itemSets size] ifFalse: [(itemSets at: newStateIndex) mergeWith: newState]. ^newStateIndex! ! !SmaCCGrammarCompiler methodsFor: 'initialize-release' stamp: 'lr 1/6/2007 21:55'! initialize scannerCompiler := SmaCCScannerCompiler new. model := (RBNamespace new) name: 'Compile Scanner/Parser'; yourself. startingStateMap := Dictionary new! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! multipleActionTableRow: row | stream | stream := self compressedRowStream. stream nextPut: 1 + self arrayTypeMask. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: each on: stream. self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! parserClass ^parserClass! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05'! parserClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [parserClass := model classFor: aClassOrString] ifFalse: [parserClass := model classNamed: aClassOrString. parserClass isNil ifTrue: [parserClass := self defineClass: aClassOrString asSubclassOf: SmaCCParser]]! ! !SmaCCGrammarCompiler methodsFor: 'reduction table' stamp: ' 6/1/07 21:19'! reduceTable | table nonterminals | table := OrderedCollection new. nonterminals := scannerCompiler symbols reject: [:each | each isTerminal]. nonterminals do: [:each | each productionsDo: [:rhs | table add: (Array with: (scannerCompiler symbols indexOf: each) with: rhs size with: (rhs compileSourceFor: each in: parserClass))]]. ^table! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: 'lr 11/25/2009 18:00'! removeOldMethods self removeOldMethodsFrom: scannerCompiler scannerClass; removeOldMethodsFrom: scannerCompiler scannerClass theMetaClass; removeOldMethodsFrom: parserClass; removeOldMethodsFrom: parserClass theMetaClass! ! !SmaCCGrammarCompiler methodsFor: 'private' stamp: ' 6/1/07 21:19'! removeOldMethodsFrom: aRBClass (self generatedMethodsIn: aRBClass) do: [:each | aRBClass removeMethod: each]! ! !SmaCCGrammarCompiler methodsFor: 'accessing' stamp: 'lr 1/7/2007 12:05'! scannerClass: aClassOrString (aClassOrString isKindOf: Behavior) ifTrue: [scannerCompiler scannerClass: (model classFor: aClassOrString)] ifFalse: [scannerCompiler scannerClass: (model classNamed: aClassOrString). scannerCompiler scannerClass isNil ifTrue: [scannerCompiler scannerClass: (self defineClass: aClassOrString asSubclassOf: SmaCCScanner)]]! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! singleActionTableRow: row forAction: anInteger | stream | stream := self compressedRowStream. stream nextPut: 0 + self arrayTypeMask. self writeInteger: anInteger on: stream. row keysAndValuesDo: [:index :each | each ~= 3 ifTrue: [self writeInteger: index on: stream]]. ^stream contents! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! transitionTable actions isNil ifTrue: [self createItemSets. self createTransitionTable]. ^actions! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! uniqueNonErrorActionsForTableRow: row ^(row asSet) remove: 3 ifAbsent: []; asArray! ! !SmaCCGrammarCompiler methodsFor: 'action table' stamp: ' 6/1/07 21:19'! writeInteger: anInteger on: aStream self hasLiteralByteArrays ifTrue: [aStream nextPut: (anInteger bitShift: -8); nextPut: (anInteger bitAnd: 16rFF)] ifFalse: [aStream nextPut: anInteger]! ! !SmaCCGraphAlgorithm commentStamp: '' prior: 101171804! SmaCCGraphAlgorithm is an abstract class that has support for the graph transformation algorithms. ! !SmaCCDuplicateNodeEliminator commentStamp: '' prior: 101171975! SmaCCDuplicateNodeEliminator removes duplicate nodes in a SmaCCNode graph. Instance Variables: comparisonState dictionary mapping equivalent nodes root the root of the graph ! !SmaCCDuplicateNodeEliminator class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! removeDuplicateNodesIn: aSmaCCNode ^self new removeDuplicateNodesIn: aSmaCCNode! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! isNode: firstSmaCCNode equivalentTo: secondSmaCCNode | firstTransitions secondTransitions | firstSmaCCNode = secondSmaCCNode ifTrue: [^true]. firstSmaCCNode transitions size = secondSmaCCNode transitions size ifFalse: [^false]. firstSmaCCNode action = secondSmaCCNode action ifFalse: [^false]. ((comparisonState at: firstSmaCCNode ifAbsent: [#()]) includes: secondSmaCCNode) ifTrue: [^true]. (comparisonState at: firstSmaCCNode ifAbsentPut: [Set new]) add: secondSmaCCNode. (comparisonState at: secondSmaCCNode ifAbsentPut: [Set new]) add: firstSmaCCNode. firstTransitions := firstSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. secondTransitions := secondSmaCCNode transitions asSortedCollection: [:a :b | a transitionObjects first <= b transitionObjects first]. firstTransitions with: secondTransitions do: [:first :second | first transitionObjects = second transitionObjects ifFalse: [^false]. (self isNode: first to equivalentTo: second to) ifFalse: [^false]]. ^true! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! mergeAllTransitions root allStates do: [:each | each mergeTransitions]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! pairsDo: aBlock | nodes | nodes := root allStates asOrderedCollection. 1 to: nodes size - 1 do: [:i | i + 1 to: nodes size do: [:j | aBlock value: (nodes at: i) value: (nodes at: j)]]! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! removeDuplicateNodesIn: aSmaCCNode root := aSmaCCNode. self removeDuplicates. ^root! ! !SmaCCDuplicateNodeEliminator methodsFor: 'algorithm' stamp: 'lr 1/8/2007 22:44'! removeDuplicates | changed iterations | changed := true. iterations := root allStates size. [changed and: [iterations > 0]] whileTrue: [changed := false. iterations := iterations - 1. self mergeAllTransitions. self pairsDo: [:firstNode :secondNode | comparisonState := Dictionary new. (self isNode: firstNode equivalentTo: secondNode) ifTrue: [firstNode mergeWith: secondNode. changed := true]]]! ! !SmaCCEpsilonRemoval commentStamp: '' prior: 101172240! SmaCCEpsilonRemoval removes epsilon nodes from a NFA. Instance Variables: nodeMap Dictionary mapping sets of states to a new state in the new graph ! !SmaCCEpsilonRemoval class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! removeEpsilonEdgesFrom: aSmaCCNode "Returns an equivalent graph to aSmaCCNode that doesn't contain any epsilon transitions" ^self new removeEpsilonEdgesFrom: aSmaCCNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! createNodeWithoutEpsilonEdges: aSmaCCNode | newNode newTransitions | newNode := self createMergedNodeFrom: (self epsilonReachableNodesFrom: aSmaCCNode). nodeMap at: aSmaCCNode put: newNode. newTransitions := OrderedCollection new. newNode transitions do: [:each | each isEpsilonTransition ifFalse: [newTransitions add: (each class to: (self removeEpsilonEdgesFrom: each to) on: each transitionObjects)]]. newNode transitions: newTransitions. ^newNode! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! epsilonReachableNodesFrom: aSmaCCNode | todo reachable node | reachable := Set with: aSmaCCNode. todo := OrderedCollection with: aSmaCCNode. [todo notEmpty] whileTrue: [node := todo removeLast. node transitions do: [:each | (each isEpsilonTransition and: [(reachable includes: each to) not]) ifTrue: [reachable add: each to. todo add: each to]]]. ^reachable! ! !SmaCCEpsilonRemoval methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. nodeMap := Dictionary new! ! !SmaCCEpsilonRemoval methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! removeEpsilonEdgesFrom: aSmaCCNode ^nodeMap at: aSmaCCNode ifAbsent: [self createNodeWithoutEpsilonEdges: aSmaCCNode]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! createMergedNodeFrom: nodeCollection | newNode | newNode := SmaCCNode new. self mergeTransitionsFrom: nodeCollection into: newNode. self mergeActionsFrom: nodeCollection into: newNode. ^newNode! ! !SmaCCGraphAlgorithm methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! mergeActionsFrom: nodeCollection into: aSmaCCNode nodeCollection do: [:each | aSmaCCNode addActions: each action]! ! !SmaCCGraphAlgorithm methodsFor: 'nodes' stamp: ' 6/1/07 21:19'! mergeTransitionsFrom: nodeCollection into: aSmaCCNode | transitions | transitions := Set new. nodeCollection do: [:each | each transitions do: [:edge | transitions add: edge copy]]. aSmaCCNode transitions: transitions. aSmaCCNode mergeTransitions! ! !SmaCCNFAtoDFA commentStamp: '' prior: 101172460! SmaCCNFAtoDFAAlgorithm converts an NFA without epsilon transitions into a DFA. If a node contains edges that lead to multiple nodes for the same character, then a new state is created that merges all states for the given character. Instance Variables: mergedStates dictionary that maps a collection of states to the resulting merged state ! !SmaCCNFAtoDFA class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! convertToDFA: aSmaCCNode "Returns an equivalent DFA from the NFA specified by aSmaCCNode -- the NFA must not contain epsilon edges." ^self new convertToDFA: aSmaCCNode! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! commonTransitionObjectsForEdges: edgeCollection ^edgeCollection inject: edgeCollection first transitionObjects into: [:sum :each | sum select: [:char | each includes: char]]! ! !SmaCCNFAtoDFA methodsFor: 'algorithm' stamp: ' 6/1/07 21:19'! convertToDFA: aSmaCCNode ^self mergedNodeFor: (Array with: aSmaCCNode)! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! createEdgeMerging: conflictingEdgeCollection | newNode common newEdge | newNode := self mergedNodeFor: (conflictingEdgeCollection collect: [:each | each to]). common := self commonTransitionObjectsForEdges: conflictingEdgeCollection. newEdge := conflictingEdgeCollection first class to: newNode on: common. conflictingEdgeCollection do: [:each | each remove: common]. ^newEdge! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19'! eliminateDuplicateTransitionsIn: aSmaCCNode | newTransitions conflictingObject | newTransitions := aSmaCCNode transitions collect: [:each | each copy]. [conflictingObject := self someDuplicateIn: newTransitions. conflictingObject notNil] whileTrue: [| conflictingEdges newEdge | conflictingEdges := newTransitions select: [:each | each includes: conflictingObject]. newEdge := self createEdgeMerging: conflictingEdges. newTransitions add: newEdge]. self setTransitionsOn: aSmaCCNode to: newTransitions! ! !SmaCCNFAtoDFA methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize super initialize. mergedStates := Dictionary new! ! !SmaCCNFAtoDFA methodsFor: 'private-merging nodes' stamp: ' 6/1/07 21:19'! mergedNodeFor: nodeCollection | mergedNodes | mergedNodes := nodeCollection asSortedCollection asArray. ^mergedStates at: mergedNodes ifAbsent: [| newNode | newNode := self createMergedNodeFrom: mergedNodes. mergedStates at: mergedNodes put: newNode; at: (Array with: newNode) put: newNode. self eliminateDuplicateTransitionsIn: newNode. newNode]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! setTransitionsOn: aSmaCCNode to: edgeCollection aSmaCCNode transitions: (edgeCollection reject: [:each | each isEmpty]). aSmaCCNode transitions do: [:each | each to: (self convertToDFA: each to)]! ! !SmaCCNFAtoDFA methodsFor: 'private-edges' stamp: ' 6/1/07 21:19'! someDuplicateIn: edgeCollection | objects | objects := Set new. edgeCollection do: [:edge | edge transitionObjects do: [:each | (objects includes: each) ifTrue: [^each]]. objects addAll: edge transitionObjects]. ^nil! ! !SmaCCLR1Item commentStamp: 'jmb' prior: 101172861! SmaCCLR1Item represents an item in a SmaCCItemSet. Instance Variables: followers all possible symbols that can follow this production in this state location the position in the rhs of the production we are at rhs the rhs of the production symbol the symbol for the production! !SmaCCLR1Item class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection ^(self new) symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection; yourself! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCLR1Item ^self class == aSmaCCLR1Item class and: [location = aSmaCCLR1Item location and: [rhs == aSmaCCLR1Item rhs and: [symbol == aSmaCCLR1Item symbol]]]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! action: aSmaCCSymbol location > rhs size ifTrue: [(symbol isStartingSymbol and: [aSmaCCSymbol isEmptySymbol]) ifTrue: [^SmaCCAcceptAction new]. (followers includes: aSmaCCSymbol) ifTrue: [^SmaCCReduceAction symbol: symbol rhs: rhs]] ifFalse: [(rhs at: location) = aSmaCCSymbol ifTrue: [^SmaCCShiftAction new]]. ^SmaCCRejectAction new! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! followers ^followers! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! followers: aSmaCCSymbolSet followers := aSmaCCSymbolSet! ! !SmaCCLR1Item methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^(symbol identityHash bitXor: (location bitShift: 14)) bitXor: rhs identityHash! ! !SmaCCLR1Item methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isLR1EqualTo: aSmaCCLR1Item ^self followers size = aSmaCCLR1Item followers size and: [self followers allSatisfy: [:each | aSmaCCLR1Item followers includes: each]]! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! location ^location! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! location: anInteger location := anInteger! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCLR1Item followers mergeWith: aSmaCCLR1Item followers! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! moveNext ^(self copy) followers: (followers class basedOn: followers); location: location + 1; yourself! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nextSymbol ^location > rhs size ifTrue: [SmaCCSymbol sentinel] ifFalse: [rhs at: location]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence "If we don't have a precedence, then assume we are the lowest precedence (which will cause a shift action)." | max | max := -1. rhs do: [:each | max := max max: (each precedence ifNil: [max])]. ^max! ! !SmaCCLR1Item methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream | i | aStream nextPut: $[; nextPutAll: symbol printString; nextPutAll: ' :'. i := 1. rhs do: [:each | i = location ifTrue: [aStream nextPutAll: ' . ']. aStream space; nextPutAll: each printString. i := i + 1]. location > rhs size ifTrue: [aStream nextPutAll: ' . ']. aStream nextPut: $;. followers printOn: aStream. aStream nextPut: $]! ! !SmaCCLR1Item methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! rest | newRHS | newRHS := SmaCCRHS new. location + 1 to: rhs size do: [:each | newRHS add: (rhs at: each)]. ^newRHS! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! rhs ^rhs! ! !SmaCCLR1Item methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbol ^symbol! ! !SmaCCLR1Item methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! symbol: aSmaCCSymbol rhs: aSmaCCRHS follow: aSmaCCSymbolCollection symbol := aSmaCCSymbol. rhs := aSmaCCRHS. location := 1. followers := aSmaCCSymbolCollection! ! !SmaCCNode commentStamp: '' prior: 101173245! SmaCCNode is a node in a directed graph. Instance Variables: action a collection of integers or a symbol. This contains the action to be performed when we match and can't find a longer match. id a unique number that allows us to sort the nodes transitions our transitions ! !SmaCCNode class methodsFor: 'class initialization' stamp: ' 6/1/07 21:19'! initialize NextId := 0. MaxSubNodesInMethod := 20! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maxSubNodesInMethod ^MaxSubNodesInMethod! ! !SmaCCNode class methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! maxSubNodesInMethod: anInteger MaxSubNodesInMethod := anInteger! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! <= aSmaCCNode ^self id <= aSmaCCNode id! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = anObject ^self class = anObject class and: [self id = anObject id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! action ^action! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action: anObject anObject isNil ifTrue: [^self]. action := anObject isSymbol ifTrue: [anObject] ifFalse: [SortedCollection with: anObject]! ! !SmaCCNode methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! actionForSpecificRegularExpression: aSmaCCRegularExpression | matchedAction strings | strings := aSmaCCRegularExpression possibleMatches. matchedAction := self simulate: (ReadStream on: strings first). strings do: [:each | matchedAction = (self simulate: (ReadStream on: each)) ifFalse: [^nil]]. ^matchedAction! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! addActions: aCollection aCollection isNil ifTrue: [^self]. action isNil ifTrue: [action := aCollection copy. ^self]. action isSymbol ifTrue: [^self]. aCollection isSymbol ifTrue: [^action := aCollection]. aCollection do: [:each | (action includes: each) ifFalse: [action add: each]]! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode transitions add: (SmaCCEdge to: aSmaCCNode on: nil)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode onCharacters: characterCollection transitions add: (SmaCCCharacterEdge to: aSmaCCNode on: characterCollection)! ! !SmaCCNode methodsFor: 'edges' stamp: ' 6/1/07 21:19'! addEdgeTo: aSmaCCNode onStates: symbolCollection transitions add: (SmaCCStateEdge to: aSmaCCNode on: symbolCollection)! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/7/2007 11:22'! addImplementationSpecificRewritesTo: rewriter! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! allStates | nodes | nodes := Set new. self allStatesInto: nodes. ^nodes! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! allStatesInto: aSet (aSet includes: self) ifTrue: [^self]. aSet add: self. transitions do: [:each | each to allStatesInto: aSet]! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asDFA | new | new := (SmaCCNFAtoDFA convertToDFA: self asNFAWithoutEpsilonTransitions) startingNodeWithoutUnnecessaryDefaultTransition. new removeDuplicateNodes. ^new! ! !SmaCCNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asNFAWithoutEpsilonTransitions ^SmaCCEpsilonRemoval removeEpsilonEdgesFrom: self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass | stream | stream := WriteStream with: String new. self hasSimpleLoop ifTrue: [stream nextPut: $[]. self writeMatchingCodeOn: stream usingSelectorMap: aDictionary. (self sortedTransitionsFor: aClass) do: [:each | each to = self ifTrue: [stream nextPutAll: each expression; nextPut: $]; nextPutAll: ' whileTrue.'; cr] ifFalse: [stream nextPutAll: each expression; nextPutAll: ' ifTrue: ['. stream nextPutAll: (methodMap at: each to ifAbsentPut: [each to asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass]); nextPutAll: '].'; cr]]. (transitions notEmpty or: [action isNil]) ifTrue: [stream nextPutAll: '^self reportLastMatch'; cr]. ^stream contents! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! compileInto: aClass usingSelectorMap: aDictionary | methodNodes methodMap index | methodNodes := self statesToMakeIntoMethods. methodMap := self methodNameMapFor: methodNodes. index := 0. methodNodes do: [:each | | stream | stream := WriteStream with: String new. stream nextPutAll: (each = self ifTrue: ['scanForToken'] ifFalse: ['scan' , (index := index + 1) printString]); cr. stream nextPutAll: (each asStatement: methodMap usingSelectorMap: aDictionary forClass: aClass). aClass compile: (self optimizedParseTreeFor: stream contents) formattedCode classified: #'generated-scanner']! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! groupedTransitions ^transitions inject: OrderedCollection new into: [:sum :each | (sum detect: [:edgeCollection | edgeCollection first canMergeWith: each] ifNone: [sum add: OrderedCollection new]) add: each. sum]! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! hasSimpleLoop ^transitions anySatisfy: [:each | each to = self]! ! !SmaCCNode methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^id bitShift: 4! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! id ^id! ! !SmaCCNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize id := NextId := NextId + 1. transitions := SortedCollection new! ! !SmaCCNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminalNode ^transitions isEmpty or: [transitions size = 1 and: [self hasSimpleLoop]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! mergeTransitions self groupedTransitions do: [:edges | | toMap | toMap := Dictionary new. edges do: [:each | (toMap includesKey: each to) ifTrue: [(toMap at: each to) mergeWith: each. transitions remove: each] ifFalse: [toMap at: each to put: each]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCNode id := aSmaCCNode id. transitions := aSmaCCNode transitions. action := aSmaCCNode action! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! methodNameMapFor: methodNodes | index methodMap | methodMap := Dictionary new. index := 0. methodNodes do: [:value | methodMap at: value put: (value = self ifTrue: ['^self scanForToken'] ifFalse: ['^self scan' , (index := index + 1) printString])]. ^methodMap! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! needsSeparateMethod ^self allStates size > MaxSubNodesInMethod! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 11/25/2009 18:01'! optimizationRewriter | rewriter | rewriter := RBParseTreeRewriter new. rewriter replace: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. currentCharacter == `#l ifTrue: [`@.Stmts3]. `@.Stmts4' with: '`@.Stmts1. [`@.Stmts2. currentCharacter ~~ `#l] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [ ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue. `@.Stmts3'; replaceMethod: '`name `@.Stmts1. `@a ifTrue: [`@.Stmts2. ^self `name]. `@.Stmts3' with: '`name [`@.Stmts1. `@a] whileTrue: [`@.Stmts2]. `@.Stmts3'; replace: '`@.Stmts1. currentCharacter isLiteral ifTrue: [`@.Stmts2]. `@.Stmts3' with: '`@.Stmts1. `@.Stmts2'; replace: '`@.Stmts1. `.Stmt. `@.Stmts. `@a ifTrue: [self step. `.Stmt. `@.Stmts]. `@.Stmts2' with: '`@.Stmts1. `@a ifTrue: [self step]. `.Stmt. `@.Stmts. `@.Stmts2'; replace: '`@.Stmts1. `@a ifTrue: [`@.Stmts. ^self reportLastMatch]' with: '`@.Stmts1. `@a ifTrue: [`@.Stmts]'. self addImplementationSpecificRewritesTo: rewriter. ^rewriter! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! optimizedParseTreeFor: aString | tree rewriter | tree := RBParser parseMethod: aString. rewriter := self optimizationRewriter. [rewriter executeTree: tree] whileTrue: [tree := rewriter tree]. ^tree! ! !SmaCCNode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: self class name; nextPut: $(; nextPutAll: id printString; nextPut: $)! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! removeDuplicateNodes ^SmaCCDuplicateNodeEliminator removeDuplicateNodesIn: self! ! !SmaCCNode methodsFor: 'simulating' stamp: ' 6/1/07 21:19'! simulate: aStream | char | aStream atEnd ifTrue: [^action]. char := aStream next. transitions do: [:each | (each includes: char) ifTrue: [^each to simulate: aStream]]. ^nil! ! !SmaCCNode methodsFor: 'compiling' stamp: 'lr 1/6/2007 22:10'! sortedTransitionsFor: aClass | frequencies | frequencies := (aClass realClass ifNil: [SmaCCScanner]) frequencyTable. ^transitions asSortedCollection: [:a :b | | aFrequency bFrequency | aFrequency := a edgeFrequencyUsingTable: frequencies. bFrequency := b edgeFrequencyUsingTable: frequencies. aFrequency > bFrequency or: [aFrequency = bFrequency and: [a <= b]]]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! startingNodeWithoutUnnecessaryDefaultTransition | edge | self transitions size = 1 ifFalse: [^self]. edge := self transitions first. (edge includes: #default) ifTrue: [^edge to]. ^self! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! statesToMakeIntoMethods | allStates incoming | allStates := self allStates. incoming := Dictionary new. allStates do: [:each | each transitions do: [:edge | each ~= edge to ifTrue: [(incoming at: edge to ifAbsentPut: [Set new]) add: each]]]. ^(allStates asOrderedCollection select: [:each | self = each or: [each isTerminalNode not and: [(incoming at: each ifAbsent: [#()]) size > 1 or: [each needsSeparateMethod]]]]) asSortedCollection: [:a :b | a id < b id]! ! !SmaCCNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! transitions ^transitions! ! !SmaCCNode methodsFor: 'private' stamp: 'lr 1/6/2007 22:08'! transitions: aCollection transitions reset. transitions addAll: aCollection! ! !SmaCCNode methodsFor: 'compiling' stamp: ' 6/1/07 21:19'! writeMatchingCodeOn: aStream usingSelectorMap: aDictionary | matchedItem | (action notNil and: [action size > 0]) ifTrue: [matchedItem := aDictionary at: action first ifAbsent: [action asArray]. aStream nextPutAll: (transitions isEmpty ifTrue: ['^self recordAndReportMatch:'] ifFalse: ['self recordMatch: ']). matchedItem isSymbol ifTrue: [aStream nextPutAll: matchedItem storeString] ifFalse: [aStream nextPutAll: '#('. matchedItem do: [:each | aStream nextPutAll: each storeString] separatedBy: [aStream nextPut: $ ]. aStream nextPut: $)]. aStream nextPut: $.; cr]. (transitions anySatisfy: [:each | each isCharacterTransition]) ifTrue: [aStream nextPutAll: 'self step.'; cr]! ! !SmaCCParserGenerator commentStamp: 'jmb 1/23/2003 15:59' prior: 101173654! SmaCC: The Smalltalk Compiler-Compiler from John Brant and Don Roberts (http://www.refactory.com/Software/SmaCC) Tutorial This is a walk-through tutorial to demonstrate many of the features of SmaCC, the Smalltalk Compiler Compiler. In this example, we will incrementally develop a simple calculator. Our first calculator is going to be relatively simple. It is going to take two numbers and add them together. To start things off, we have to tell the scanner how to recognize a number. It starts with one or more digits, possibly followed by an decimal point with zero or more digits after it. The scanner definition for this token is: : [0-9]+ (\. [0-9]*) ? ; Enter that line into the scanner tab on the interface. Let's go over each part: Names the token. The name inside the <> must be a legal Smalltalk variable name. : Separates the name of the token from the token's definition. [0-9] Matches any single character in the range '0' to '9' (a digit). + Matches the previous expression one or more times. In this case, we are matching one or more digits. ( ... ) Groups subexpressions. \. Matches the '.' character (. has a special meaning in regular expressions, \ quotes it). * Matches the previous expression zero or more times. ? Matches the previous expression zero or one time (i.e., it is optional). ; Terminates a token specification. We don't want to have to worry about whitespace in our language, so we need to define what a whitespace is and to ignore it. To do this, enter the following token specification on the next line on the scanner page: : \s+; \s matches any whitespace character (space, tab, linefeed, etc.). So how do we tell the scanner to ignore it? If you look in the SmaCCScanner class, you will find a method named 'whitespace'. If a scanner understands a method that has the same name as a token name, that method will get called whenever the scanner matches that kind of token. As you can see, the whitespace method eats whitespace. There is also a 'comment' method that behaves similarly. The only other token that will appear in our system would be the '+' token for addition. However, since this is token is always the same, we don't have to tell the scanner what it looks like. It will figure it out from our grammar. Speaking of our grammar, let's go ahead and define it. Enter the following specification in the Parser tab: Expression : Expression "+" Number | Number ; Number : ; This basically says that an expressions is either a number or an expression added to a number. We should be able to compile a parser now. Switch to the Compile tab. You need to enter the class name for both the scanner and parser. Use CalculatorScanner and CalculatorParser respectively. Once the class names are entered, we are ready to compile the parser. Press the 'Compile LALR(1)' button (you should always push this one unless you know what you are doing. Basically, it will generate smaller parsers than the other option). This will create new Smalltalk classes for the CalculatorScanner and CalculatorParser and compile several methods in those classes. All methods that SmaCC compiles will go into a "generated-*" method protocol. You should not change those methods since they are replace each time you compile. Whenever SmaCC creates new classes, they are compiled in the default application/package. If you are using VisualAge, you will need to make sure that the default application is an open edition and that it prereqs the SmaCCRuntime application. If you have already created the scanner and parser classes, you can load their definitions by using the "..." buttons next to the class name entry fields. If you answer "Yes" to the dialog, the text in the scanner/parser tabs will be replaced with the definition that was last compiled (assuming that the "Generate definition comments" was checked during the last compile). Now we are ready to test our parser. Go to the “test” pane, enter “3 + 4”, and press the “parse” button; you will see that the parser correctly parses it. If you press “Parse and Inspect” you will see and inspector on an OrderedCollection that contains the parsed tokens. This is because we haven't specified what the parser is supposed to do when it parses. You can also enter incorrect items. For example, try to parse "3 + + 4" or "3 + a". An error message should appear in the text. Now we need to define the actions that need to happen when we parse our expressions. Currently, our parser is just validating that the expression is a bunch of numbers added together. Generally, you will create some structure that represents what you've parsed (e.g., a parse tree). However, in this case, we are not concerned about the structure, but we are concerned about the result (the value of the expression). For our example, you need to modify the grammar definition to be: Expression : Expression "+" Number {'1' + '3'} | Number {'1'} ; Number : {'1' value asNumber} ; The text between the braces is Smalltalk code that gets evaluated when the rule is applied. Strings with a number get replaced with the corresponding parse node. In the first Expression rule, the '1' will get replaced by the ParseNode that matches Expression and the '3' gets replaced by the ParseNode that matches Number. The second item in the rule is the "+" token. Since we already know what it is, it is not interesting. Compile the new parser. Now when you do a 'Parse and Inspect' from the test pane, you should see the result: 7. One problem with the previous code is that if you need to change a rule then you may also need to change the code for that rule. For example, suppose you inserted a new token at the beginning of a rule, then you would need to change all of your references in the Smalltalk code. We can alleviate this problem by using named expressions. After each part of a rule, we can specify its name. Names are specified with single quotes and must be legal Smalltalk variable names. Doing this for our grammar we get: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Number 'number' {number} ; Number : 'numberToken' {numberToken value asNumber} ; While this will result in the same language being parsed, it makes it easier to maintain your parsers. Let's extend our language to add subtraction. Here's the new grammar: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; After you've compiled this, '3 + 4 - 2 ' should return '5'. Next, let's add multiplication and division: Expression : Expression 'expression' "+" Number 'number' {expression + number} | Expression 'expression' "-" Number 'number' {expression - number} | Expression 'expression' "*" Number 'number' {expression * number} | Expression 'expression' "/" Number 'number' {expression / number} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Here we run into a problem. If you evaluate '2 + 3 * 4' you end up with 20. The problem is that in standard mathematics, multiplication has a higher precedence than addition. Our grammar evaluates strictly left-to-right. The standard solution for this problem is to define additional nonterminals to force the sequence of evaluation. Our grammar with that solution would look like: Expression : Term 'term' {term} | Expression 'expression' "+" Term 'term' {expression + term} | Expression 'expression' "-" Term 'term' {expression - term}; Term : Number 'number' {number} | Term 'term' "*" Number 'number' {term * number} | Term 'term' "/" Number 'number' {term / number}; Number : 'numberToken' {numberToken value asNumber}; If you compile this grammar, you will see that '2 + 3 * 4' evaluates to 14 like we would expect. Now, as you can imagine, this gets pretty complicated as the number of precedence rules increases (e.g., C). We can use ambiguous grammars and precedence rules to simplify this situation. Here is the same grammar using precedence to enforce our evaluation order: %left "+" "-"; %left "*" "/"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Notice that we changed the grammar so that there are Expressions on both sides of the operator. The two lines that we added to the top of the grammar mean that “+” and “-” are evaluated left-to-right and have the same precedence, which is lower than “*” and “/”. Likewise, the second line means that “*” and “/” have equal precedence. Grammars in this form are usually much more intuitive, especially in cases with many precedence levels. Just as an example, let's add exponentiation and parentheses: %left "+" "-"; %left "*" "/"; %right "^"; Expression : Expression 'exp1' "+" Expression 'exp2' {exp1 + exp2} | Expression 'exp1' "-" Expression 'exp2' {exp1 - exp2} | Expression 'exp1' "*" Expression 'exp2' {exp1 * exp2} | Expression 'exp1' "/" Expression 'exp2' {exp1 / exp2} | Expression 'exp1' "^" Expression 'exp2' {exp1 raisedTo: exp2} | "(" Expression 'expression' ")" {expression} | Number 'number' {number}; Number : 'numberToken' {numberToken value asNumber}; Once you have compiled the grammar, you will be able to evaluate '3 + 4 * 5 ^ 2 ^ 2' to get 2503. Since the exponent operator is right associative, this expression is evaluated like 3 + (4 * (5 ^ (2 ^ 2))). We can also evaluate expressions with parentheses. For example, evaluating '(3 + 4) * (5 - 2) ^ 3' results in 189. The Scanner Scanning takes an input stream of characters and converts that into a stream of tokens. The tokens are then passed on to the parsing phase. The scanner is specified by a collection of token specifications. Each token is specified by: TokenName : RegularExpression ; TokenName is a valid Smalltalk variable name that is surrounded by <>. For example, "" is a valid TokenName, but "" is not since "token name" isn't a valid Smalltalk variable name. The RegularExpression is a regular expression that matches a token. It should match one or more characters in the input stream. The colon character, ":", is used to separate the TokenName and the RegularExpression, and the semicolon character, ";", is used to terminate the token specification. Regular Expression Syntax While the rules are specified as regular expressions, there are many different syntaxes for regular expressions. We choose a relatively simple syntax that is specified below. If you wish to have a more rich syntax, you can modify the scanner's parser: SmaCCScannerScanner & SmaCCScannerParser. These classes were created using SmaCC. \character Matches a special character. The character immediately following the backslash is matched exactly, unless it is a letter. Backslash-letter combinations have other meanings and are specified below. \cLetter Matches a control character. Control characters are the first 26 characters (e.g., \cA equals "Character value: 0"). The letter that follows the "\c" must be an uppercase letter. \d Matches a digit, 0-9. \D Matches anything that is not a digit. \f Matches a form-feed character, "Character value: 12". \n Matches a newline character, "Character value: 10". \r Matches a carriage return character, "Character value: 13". \s Matches any whitespace character, [ \f\n\r\t\v]. \S Matches any non-whitespace character. \t Matches a tab, "Character value: 9". \v Matches a vertical tab, "Character value: 11" \w Matches any letter, number or underscore, [A-Za-z0-9_]. \W Matches anything that is not a letter, number or underscore. \xHexNumber Matches a character specified by the hex number following the "\x". The hex number must be at least one character long and no more than four characters for Unicode characters and two characters for non-Unicode characters. For example, "\x20" matches the space character (Character value: 16r20), and "\x1FFF" matches "Character value: 16r1FFF". Copies the definition of into the current regular expression. For example, if we have " : \d | [A-F] ;", we can use in a later rule: " : + ;". [characters] Matches one of the characters inside the []. This is a shortcut for the "|" operator. In addition to single characters, you can also specify character ranges with the "-" character. For example, "[a-z]" matches any lower case letter. [^characters] Matches any character not listed in the characters block. "[^a]" matches anything except for "a". # comment Creates a comment that is ignored by SmaCC. Everything from the # to the end of the line is ignored. exp1| exp2 Matches either exp1 or exp2. exp1 exp2 Matches exp1 followed by exp2. "\d \d" matches two digits. exp* Matches exp zero or more times. "0*" matches "" and "000". exp? Matches exp zero or one time. "0?" matches only "" or "0". exp+ Matches exp one or more times. "0+" matches "0" and "000", but not "". exp{min,max} Matches exp at least min times but no more than max times. "0{1,2}" matches only "0" or "00". It does not match "" or "000". (exp) Groups exp for precedence. For example, "(a b)*" matches "ababab". Without the parentheses, "a b *" would match "abbbb" but not "ababab". Since there are multiple ways to combine expressions, we need precedence rules for their combination. The or operator, "|", has the lowest precedence and the "*", "?", "+", and "{,}" operators have the highest precedence. For example, "a | b c *" matches "a" or "bcccc", but not "accc" or "bcbcbc". If you wish to match "a" or "b" followed by any number of c's, you need to use "(a | b) c *". Overlapping Tokens Unlike T-Gen, SmaCC can handle overlapping tokens with any problems. For example, the following is a legal SmaCC scanner definition: : [a-zA-Z] \w* ; : . ; This definition will match a variable or a single character. A variable can also be a single character [a-zA-Z], so the two tokens overlap. SmaCC handles overlapping characters by preferring the first token specified by the grammar. For example, an "a" could be a or an token, but since is specified first, SmaCC will use it. Matching Methods If your scanner has a method name that matches the name of the token, (e.g. whitespace), that method will get called upon a match of that type. The SmaCCScanner superclass already has a default implementation of #whitespace and #comment. These methods ignore those tokens by default. Matching methods can also be used to handle overlapping token classes. For example, in the C grammar, a type definition is the same as an identifier. The only way that they can be disambiguated is by looking up the name in the type table. In our example C parser, we have an IDENTIFIER method that is used to determine whether the token is really an IDENTIFIER or whether it is a TYPE_NAME. Unreferenced Tokens If a token is not referenced from a grammar specification, it will not be included in the generated scanner, unless the token's name is also a name of a method (see previous section). This, coupled with the ability to do substitutions, allows you to have the equivalent of macros within your scanner specification. However, be aware that if you are simply trying to generate a scanner, you will have to make sure that you create a dummy parser specification that references all of the tokens that you want in the final scanner. Case Insensitive Scanning You can specify that the scanner should ignore case differences by checking the "Ignore Case" option on the compile tab. If you have a language that is case insensitive and has several keywords, this can be a handy feature to have. For example, if you have "THEN" as a keyword in a case insensitive language, you would need to specify a token for then as " : [tT] [hH] [eE] [nN] ;". This is a pain to enter correctly. When the ignore case option is checked, SmaCC will automatically convert "THEN" into "[tT][hH][eE][nN]". Unicode Characters SmaCC compiles the scanner into a bunch of conditional tests on characters. Normally, it assumes that characters have values between 0 and 255, and it can make some optimizations based on this fact. With the "Allow Unicode Characters" option checked, it will assume that characters have values between 0 and 65535. The Parser Parsing converts the stream of tokens provided by the scanner into some object. Normally, this object will be a parse tree, but it does not have to be a parse tree. For example, the SmaCC tutorial shows a calculator. This calculator does not produce a parse tree; it produces the result, a number. In SmaCC the parser is defined by the grammar specification entered in the 'Parser' tab. The grammar specification has two parts, an optional directives section and the production rules. The directives section is used to tell SmaCC how to handle ambiguous grammars as well as how it should generate the code for the parser. The production rules section contains the grammar for the parser and the code that executes when a production rule is matched. Directives The optional directives section consists of a set of directives. The system currently has 5 directives. Each directive begins with a "%" character and the directive keyword, then lists a set of symbols, and finally ends with the semicolon character, ";". Ambiguous Grammars and Precedence SmaCC can handle ambiguous grammars. Given an ambiguous grammar, SmaCC will produce some parser. However, it may not parse correctly. For an LR parser, there are two basic types of ambiguities, reduce/reduce conflicts and shift/reduce conflicts. Reduce/reduce conflicts are bad. SmaCC has no directives to handle them and just picks one of the choices. These conflicts normally require a rewrite of your grammar. On the other hand, shift/reduce conflicts can be handled by SmaCC without rewriting your grammar. When SmaCC encounters a shift/reduce conflict it will perform the shift action by default. However, you can control this action with the "%left", "%right", and "%nonassoc" directives. If a token has been declared in a "%left" directive, it means that the token is left-associative. Therefore, the parser will perform a reduce operation. However, if it has been declared as right-associative, it will perform a shift operation. A token defined as %nonassoc will produce an error if that is encountered during parsing. For example, you may want to specify that the equal operator, "=", is non-associative, so "a = b = c" is not parsed as a valid expression. All three directives are followed by a list of tokens. Additionally, the %left, %right, and %nonassoc directives allow precedence to be specified. The order of the directives specifies the precedence of the tokens. The higher precedence tokens appear on the higher line numbers. For example, the following directive section gives the precedence for the simple calculator in our tutorial: %left "+" "-"; %left "*" "/"; %right "^"; The "+" and "-" symbols appear on the first line and have the lowest precedence. They are also left-associative so "1 + 2 +3" will be evaluated as "(1 + 2) + 3". On the next line are the "*" and "/" symbols. Since they appear on a higher line number, they have higher precedence than the "+" and "-". Finally, on line three we have the "^" symbol. It has the highest precedence. Combining all the rules allows us to parse "1 + 2 * 3 / 4 ^ 2 ^ 3" as "1 + ((2 * 3) / (4 ^ (2 ^ 3)))". Start Symbols By default, the left-hand side of the first grammar rule is the start symbol. If you want to multiple start symbols, then you can specify them by using the "%start" directive followed by the nonterminals that are additional start symbols. This is useful for creating two parsers with two grammars that are similar but slightly different. For example, consider a Smalltalk parser. You can parse methods, and you can parse expressions. These are two different operations, but have very similar grammars. Instead of creating two different parsers for parsing methods and expressions, we can specify one grammar that parses methods and also specify another starting position for parsing expressions. The StParser in the SmaCC Example Parsers package has an example of this. The StParser class>>parseMethod: uses the #startingStateForMethod position to parse methods and the StParser class>>parseExpression: uses the #startingStateForSequenceNode position to parse expressions. Id Methods Internally, the various token types are represented as integers. However, there are times that you need to reference the various token types. For example, in the CScanner and CParser classes, the TYPE_NAME token is identical to the IDENTIFIER token. The IDENTIFIER matching method does a lookup in the type table and if it finds a type definition with the same name as the current IDENTIFIER, it want to return the TYPE_NAME token type. To determine what integer this is, the parser was created with an %id directive for and . This generates the IDENTIFIERId and TYPE_NAMEId methods on the scanner. These methods simply return the number representing that token type. See the C sample scanner and parser for a good example of how this is used. Production Rules The production rules contains the grammar for the parser. The first production rule is considered to be the starting rule for the parser. Each production rule consists of a non-terminal symbol name followed by a ":" separator which is followed by a list of possible productions separated by vertical bar, "|", and finally terminated by a semicolon, ";". Each production consists of a sequence of non-terminal symbols, tokens, or keywords followed by some optional Smalltalk code enclosed in curly brackets, {}. Non-terminal symbols are valid Smalltalk variable names and must be defined somewhere in the parser definition. Forward references are valid. Tokens are enclosed in angle brackets as they are defined in the scanner (e.g., ) and keywords are enclosed in double-quotes (e.g., "then"). Keywords that contain double-quotes need to have two double-quotes per each double-quote in the keyword. For example, if you need a keyword for one double-quote character, you would need to enter """" (four double-quote characters). The Smalltalk code is evaluated whenever that production is matched. If the code is a zero or a one argument symbol, then that method is performed. For a one argument symbol, the argument is an OrderedCollection that contains one element for each item in the production. If the code isn't a zero or one argument symbol, then the code is executed and whatever is returned by the code is the result of the production. If no Smalltalk code is specified, then the default action is to execute the #reduceFor: method. This method converts all items into an OrderedCollection. If one of the items is another OrderedCollection, then all of its elements are added to the new collection. Inside the Smalltalk code you can refer to the values of each production item by using literal strings. The literal string, '1', refers the to value of the first production item. The values for tokens and keywords will be SmaCCToken objects. The value for all non-terminal symbols will be whatever the Smalltalk code evaluates to for that non-terminal symbol. Named Symbols When entering the Smalltalk code, you can get the value for a symbol by using the literal strings (e.g., '2'). However, this creates difficulties when modifying a grammar. If you insert some symbol at the beginning of a production, then you will need to modify your Smalltalk code changing all literal string numbers. Instead you can name each symbol in the production and then refer to the name in the Smalltalk code. To name a symbol (non-terminal, token, or keyword), you need to add a quoted variable name after the symbol in the grammar. For example, "MySymbol : Expression 'expr' "+" 'num' {expr + num} ;" creates two named variables. One for the non-terminal Expression and one for the token. These variables are then used in the Smalltalk code. Extended Syntax SmaCC also has some extended syntax that makes it easier to enter different grammars. Most of the additions are for the productions, but one change that is not for productions is the addition of "::=" as the separator between the non-terminal and the production. The production syntax enhancements are listed in the following table: Symbol ? Makes symbol optional. It is equivalent to defining a new production rule: "Optional_Symbol : Symbol {'1'} | {nil};". Symbol * or Symbol + Makes a repeating symbol. The "*" repeats zero or more times, and the "+" repeats one or more times. It is equivalent to defining a new production rule: "Repeat_Symbol : | Symbol;" for "*" and "Repeat_Symbol : Symbol | Repeat_Symbol Symbol ;" for "+". ( Productions ) Groups the items in Productions. By itself it is not that useful, but it can be combined with the "?", "*", or "+". It is equivalent to defining "Group_Productions : Productions ;". [ Productions ] Equivalent to "( Productions ) ?". <% Productions %> Equivalent to "( Productions ) *" Parser Comments The compile page has three options to generate comments. You should always select the "Generate definition comments". That saves the scanner and parser definition strings into the scanner and parser classes. It allows your grammar to be under the same version control system as your Smalltalk code. The other two comment options should not be needed unless you need to debug a parser generated. The "generate symbol comments" option will generate a comment that explains what each symbol is mapped to. When SmaCC compiles a grammar it converts all symbols into integers. This comment gives you the integer for each symbol. You may need this information if you have an incorrect scanner definition. For example, you may have overlapping token definitions and SmaCC is picking the wrong one (by default it picks the first one in your scanner definition). When you debug, you can inspect the SmaCCToken object and validate its "id" with those in the symbol comment. If they are different, then you have a bug in your scanner. Finally, the "generate item set comments" option should rarely be needed. It generates a listing of all LR(1) item sets in the parser. If you are familiar with LR parsing, then it might be interesting to look at. However, for a moderate sized grammar (e.g., Java), this comment can be a few MB in size. I would not recommend generating such comments when using ENVY -- you don't want to store a 10MB method in your library. For the calculator example in the tutorial, this comment is 9,000 characters long. Error Recovery Normally, when the parser encounters an error, it raises the SmaCCParserError exception and parsing is immediately stopped. However, there are times when you may wish to try to parse more of the input. For example, if you are highlighting code, you do not want to stop highlighting at the first syntax error. Instead you may wish to attempt to recover after the statement separator -- the period ".". SmaCC uses the error symbol to specify where error recovery should be attempted. For example, we may have the following rule to specify a list of Smalltalk statements: Statements : Expression | Statements "." Expression ; If we wish to attempt recovery from a syntax error when we encounter a period, we can change our rule to be: Statements : Expression | Statements "." Expression | error "." Expression ; While the error recovery allows you to proceed parsing after a syntax error, it will not allow you to return a parse tree from the input. Once the input has been parsed with errors, it will raise a non-resumable SmaCCParserError. ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:19'! initialize ShowPrecedenceConflicts:=false. " (TheWorldMenu respondsTo: #registerOpenCommand:) ifTrue: [ TheWorldMenu unregisterOpenCommand: 'SmaCC'. TheWorldMenu registerOpenCommand: {'SmaCC Generator'. {self. #open}}] "! ! !SmaCCParserGenerator class methodsFor: 'class initialization' stamp: 'AdrienBarreau 6/9/2010 15:21'! menuCommandOn: aBuilder (aBuilder item: #'SmaCC Parser Generator') parent: #Tools; action: [ self open ]; help: 'Create and test parsers with SmaCC'.! ! !SmaCCParserGenerator class methodsFor: 'instance creation' stamp: 'lr 11/25/2009 18:03'! open ^ self new openInWorld! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:12'! acceptParserCode: aStringOrAText notifying: aRequestor | scannerText | scannerText := self scannerCodeHolder contentsMorph text. ^ [SmaCCGrammarCompiler new buildScanner: scannerText andParser: aStringOrAText. true] on: SmaCCParserError do: [:ex | self tabList selectedPageIndex: 2. self displayError: ex description at: ex tag position notifying: aRequestor. ex return: false]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 11/25/2009 18:27'! acceptScannerCode: aStringOrAText notifying: aRequestor SmaCCScannerParser parse: aStringOrAText onError: [:aString :position | | morph | self tabList selectedPageIndex: 1. self displayError: aString at: position notifying: aRequestor. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:13'! acceptTestCode: aStringOrAText notifying: aRequestor | class | class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false]. ^ self parse! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:16'! addButtonsToTestPage: aTestPage | aParserButton aParserInspectButton aParserExploreButton | aParserButton := PluggableButtonMorph on: self getState: nil action: #parse. aParserButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse'. aParserInspectButton := PluggableButtonMorph on: self getState: nil action: #parseAndInspect. aParserInspectButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and inspect'. aParserExploreButton := PluggableButtonMorph on: self getState: nil action: #parseAndExplore. aParserExploreButton hResizing: #spaceFill; vResizing: #shrinkWrap; label: 'Parse and explore'. aTestPage addMorph: aParserButton fullFrame: (LayoutFrame fractions: (0 @ 1 corner: 0.33 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserInspectButton fullFrame: (LayoutFrame fractions: (0.33 @ 1 corner: 0.66 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0)); addMorph: aParserExploreButton fullFrame: (LayoutFrame fractions: (0.66 @ 1 corner: 1 @ 1) offsets: (0 @ (1 - 25) corner: 0 @ 0))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:18'! addCheckBoxesToCompilePage: aCompilePage #((toggleIgnoreCase ignoreCase 'Ignore Case') (toggleGenerateDefinitionComments generateDefinitionComments 'Generate definition comments') (toggleGenerateSymbolComments generateSymbolComments 'Generate symbol comments') (toggleGenerateItemSetComments generateItemSetComments 'Generate item set comments')) withIndexDo: [ :each :index | | checkbox | checkbox := self theme newCheckboxIn: World for: self getSelected: each second setSelected: each first getEnabled: nil label: each third help: nil. checkbox position: 10 @ 35 + (index * (0 @ 20)). aCompilePage addMorph: checkbox ]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:30'! addClassSelectorsToCompilePage: aCompilePage | aScannerLabel aParserLabel | aScannerLabel := 'Scanner class:' asMorph position: 10 @ 10. aParserLabel := 'Parser class:' asMorph position: 10 @ 30. findScannerClassButton := PluggableButtonMorph on: self getState: nil action: #findScannerClass. findScannerClassButton label: ' ... '; position: 410 @ 6. findParserClassButton := PluggableButtonMorph on: self getState: nil action: #findParserClass. findParserClassButton label: ' ... '; position: 410 @ 26. scannerClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 8. scannerClassMorph on: #keyStroke send: #updateWindowLabel to: self. scannerClassMorph addDependent: self. parserClassMorph := TextMorph new newContents: ''; extent: 300 @ 70; position: 100 @ 28. parserClassMorph on: #keyStroke send: #updateWindowLabel to: self. parserClassMorph addDependent: self. {aScannerLabel. aParserLabel. scannerClassMorph. parserClassMorph. findScannerClassButton. findParserClassButton} do: [:e | aCompilePage addMorph: e]! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 23:21'! addCompileButtonsToCompilePage: aCompilePage | aLALRButton aLR1Button | aLALRButton := PluggableButtonMorph on: self getState: nil action: #compileLALR1. aLALRButton label: 'Compile LALR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 10 @ 140. aCompilePage addMorph: aLALRButton. aLR1Button := PluggableButtonMorph on: self getState: nil action: #compileLR1. aLR1Button label: 'Compile LR(1)'; onColor: self defaultBackgroundColor offColor: self defaultBackgroundColor lighter; position: 150 @ 140. aCompilePage addMorph: aLR1Button! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'apl 2/20/2003 16:23'! addMessageBoxToCompilePage: aCompilePage aCompilePage addMorph: ('Messages:' asMorph position: 10 @ 180; yourself). self conflictTextMorph: (PluggableTextMorph on: self text: #conflicts accept: nil readSelection: nil menu: nil). aCompilePage addMorph: (self conflictTextMorph) fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (10 @ 200 corner: -10 @ -10))! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 10:15'! addTextToTestPage: aTestPage | aTestText | testCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptTestCode:notifying:. aTestText := testCodeHolder contentsMorph. aTestText hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. aTestPage addMorph: aTestText fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ -25))! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:14'! choose: aString from: aCollection | choice | choice := UIManager default chooseFrom: aCollection title: aString withCRs. choice > 0 ifTrue: [^ aCollection at: choice]. ^ nil! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:31'! compile: aSymbol | grammar stream oldIgnoreCase oldCharacterSize parserCompiler | (self scannerClassString isEmpty or: [self parserClassString isEmpty]) ifTrue: [^ UIManager default inform: 'Both classes are not specified']. Cursor read showWhile: [self verifySyntax ifFalse: [^ self]]. Cursor wait showWhile: [oldIgnoreCase := SmaCCGrammar ignoreCase. oldCharacterSize := SmaCCGrammar maximumCharacterValue. [SmaCCGrammar ignoreCase: self ignoreCase; maximumCharacterValue: 255. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self scannerText andParser: self parserText; scannerClass: self scannerClassString; parserClass: self parserClassString. grammar := parserCompiler grammar. grammar type: aSymbol. stream := WriteStream on: Text new. [parserCompiler createChanges. self generateDefinitionComments ifTrue: [parserCompiler compileDefinitionComments]. self generateSymbolComments ifTrue: [parserCompiler compileSymbolComment]. self generateItemSetComments ifTrue: [parserCompiler compileItemSetsComment]. parserCompiler compileChanges] on: SmaCCCompilationNotification do: [:ex | (ShowPrecedenceConflicts or: [('*precedence*' match: ex messageText) not]) ifTrue: [stream nextPutAll: '-------------------------\' withCRs asText , ex messageText asText allBold; cr; cr; nextPutAll: ex description; cr; nextPutAll: ex tag; cr; cr.]. ex pass]. self conflicts: stream contents. self testText string trimBoth notEmpty ifTrue: [self testCodeHolder hasUnacceptedEdits: true]] ensure: [SmaCCGrammar ignoreCase: oldIgnoreCase; maximumCharacterValue: oldCharacterSize]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 2/15/2003 12:55'! compileLALR1 self compile: #LALR1! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/18/2003 14:41'! compileLR1 self compile: #LR1! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22'! conflictTextMorph ^conflictTextMorph! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:22'! conflictTextMorph: anObject conflictTextMorph := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:00'! conflicts conflicts isNil ifTrue: [conflicts:=String new]. ^conflicts! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/20/2003 16:35'! conflicts: aString conflicts := aString. self changed: #conflicts! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 08:57'! createCompilePage | aCompilePage | aCompilePage := (Morph new) layoutPolicy: ProportionalLayout new; hResizing: #spaceFill; vResizing: #spaceFill; color: Color transparent. self tabList addPage: (self tabList newContentMorph addMorph: aCompilePage; yourself) label: 'Compile'. self addClassSelectorsToCompilePage: aCompilePage; addCompileButtonsToCompilePage: aCompilePage; addCheckBoxesToCompilePage: aCompilePage; addMessageBoxToCompilePage: aCompilePage! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50'! createParserPage | aParserPage | parserCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptParserCode:notifying:. aParserPage := parserCodeHolder contentsMorph. aParserPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aParserPage; yourself) label: 'Parser'.! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:50'! createScannerPage | aScannerPage | scannerCodeHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: #acceptScannerCode:notifying:. aScannerPage := scannerCodeHolder contentsMorph. aScannerPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aScannerPage; yourself) label: 'Scanner'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:13'! createTabbedPalette self tabList: (self theme newTabGroupIn: World for: #()). self mainWindow addMorph: self tabList frame: (0 @ 0 corner: 1 @ 1)! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:52'! createTestPage | aTestPage | aTestPage := (Morph new) hResizing: #spaceFill; vResizing: #spaceFill; layoutPolicy: ProportionalLayout new; color: Color transparent; yourself. self addTextToTestPage: aTestPage. self addButtonsToTestPage: aTestPage. self tabList addPage: (self tabList newContentMorph addMorph: aTestPage; yourself) label: 'Test'! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 4/25/2009 09:49'! createTutorialPage | aTutorialPage | tutorialTextHolder := SmaCCCodeHolder owner: self ownerAcceptSelector: nil. aTutorialPage := tutorialTextHolder contentsMorph. tutorialTextHolder acceptContents: self tutorialText. tutorialTextHolder changed: #contents. aTutorialPage hResizing: #spaceFill; vResizing: #spaceFill. self tabList addPage: (self tabList newContentMorph addMorph: aTutorialPage; yourself) label: 'Tutorial'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 1/8/2007 23:12'! defaultBackgroundColor ^ Color tan! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/20/2003 18:20'! defaultWindowLabelPrefix ^ 'SmaCCParserGenerator'! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 20:22'! displayError: aString at: position notifying: aRequestor aRequestor selectFrom: position to: position - 1. aRequestor replaceSelectionWith: (Text string: aString , '->' attribute: TextEmphasis bold). aRequestor setSelection: (position to: position + aString size + 1)! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! findParserClass | className class text | self scannerClassString isEmpty ifTrue: [^ UIManager default inform: 'Undefined scanner class']. className := self choose: 'What class do you want to use?' from: (SmaCCParser allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [parserClassMorph hResizing: #rigid. parserClassMorph newContents: ''; newContents: className. parserClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #parserDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #parserDefinitionComment). self parserText: text]]! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! findScannerClass | className class text | className := self choose: 'What class do you want to use?' from: (SmaCCScanner allSubclasses collect: [:c | c name]) asSortedCollection. className notNil ifTrue: [scannerClassMorph newContents: ''; newContents: className. scannerClassMorph changed: #updateWindowLabel. class := Smalltalk at: className asSymbol. (class class includesSelector: #scannerDefinitionComment) ifTrue: [text := self removeCommentedPartOf: (class class sourceCodeAt: #scannerDefinitionComment). self scannerText: text]]! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateDefinitionComments generateDefinitionComments isNil ifTrue: [generateDefinitionComments:=true]. ^generateDefinitionComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateItemSetComments generateItemSetComments isNil ifTrue: [generateItemSetComments:=false]. ^generateItemSetComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:27'! generateSymbolComments generateSymbolComments isNil ifTrue: [generateSymbolComments:=false]. ^generateSymbolComments! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 15:26'! ignoreCase ignoreCase isNil ifTrue: [ignoreCase:=false]. ^ignoreCase! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'lr 11/25/2009 18:18'! initialExtent ^ 750 @ 650! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16'! initialize mainWindow := StandardWindow labelled: self defaultWindowLabelPrefix. mainWindow model: self. self createTabbedPalette. self createScannerPage. self createParserPage. self createCompilePage. self createTestPage. self createTutorialPage. self updateWindowLabel. self tabList selectedPageIndex: 3! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 2/15/2003 12:58'! mainWindow ^mainWindow! ! !SmaCCParserGenerator methodsFor: 'initialize-release' stamp: 'lr 11/25/2009 18:16'! openInWorld self mainWindow openInWorld! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 09:47'! paneColorToUse ^Color blue muchLighter! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 15:52'! parse self parseAndEvaluate: [:each | ^ true]. ^ false! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'AlainPlantec 12/10/2010 08:28'! parseAndEvaluate: aBlock | class | self testCodeHolder acceptContents: self testText. self testCodeHolder changed: #contents. class := self parserClass. class isNil ifTrue: [UIManager default inform: 'No parser defined'. ^ false] ifFalse: [Cursor wait showWhile: [aBlock value: (class parse: self testText onError: [:aString :position | self displayError: aString at: position notifying: self testCodeHolder contentsMorph. self testCodeHolder hasUnacceptedEdits: true. ^ false])]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'md 4/3/2003 14:03'! parseAndExplore ^self parseAndEvaluate: [:each | each explore] ! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/18/2003 20:01'! parseAndInspect ^self parseAndEvaluate: [:each | each inspect] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:47'! parserClass | classname | classname := self parserClassString asSymbol. ^classname notEmpty ifTrue: [Smalltalk at: classname] ! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:21'! parserClassString ^parserClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43'! parserCodeHolder ^parserCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:43'! parserCodeHolder: anObject parserCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 10:53'! parserText ^ self parserCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:25'! parserText: text self parserCodeHolder contents: text. self parserCodeHolder contentsMorph setText: text. ! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'mga 1/18/2003 14:42'! removeCommentedPartOf: aString | inStream outStream | inStream := ReadStream on: aString. outStream := WriteStream on: String new. inStream upTo: $". [inStream atEnd] whileFalse: [(inStream peekFor: $") ifTrue: [outStream nextPut: $"]. outStream nextPutAll: (inStream upTo: $")]. ^ outStream contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 12:20'! scannerClassString ^scannerClassMorph contents string! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22'! scannerCodeHolder ^scannerCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/17/2003 15:22'! scannerCodeHolder: anObject scannerCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/19/2003 09:55'! scannerText ^ self scannerCodeHolder contents! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:43'! scannerText: text self scannerCodeHolder contents: text. self scannerCodeHolder contentsMorph setText: text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/22/2003 16:32'! tabList ^tabList! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 13:40'! tabList: anObject tabList := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39'! testCodeHolder ^testCodeHolder! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 11:39'! testCodeHolder: anObject testCodeHolder := anObject! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'apl 2/18/2003 19:36'! testText ^ self testCodeHolder contentsMorph text! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:12'! theme ^ UITheme current! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25'! toggleGenerateDefinitionComments generateDefinitionComments:=self generateDefinitionComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28'! toggleGenerateItemSetComments generateItemSetComments:=self generateItemSetComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:28'! toggleGenerateSymbolComments generateSymbolComments:=self generateSymbolComments not! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'mga 1/22/2003 15:25'! toggleIgnoreCase ignoreCase:= self ignoreCase not! ! !SmaCCParserGenerator methodsFor: 'accessing' stamp: 'mga 1/23/2003 11:15'! tutorialText ^self class comment! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'apl 2/20/2003 18:14'! update: anObjectOrASymbol (anObjectOrASymbol isKindOf: Symbol) ifTrue: [(self respondsTo: anObjectOrASymbol) ifTrue: [self perform: anObjectOrASymbol]]. super update: anObjectOrASymbol! ! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'lr 1/8/2007 22:58'! updateWindowLabel | scannerLabel parserLabel | scannerLabel := self scannerClassString isEmpty ifFalse: [self scannerClassString] ifTrue: ['Undefined']. parserLabel := self parserClassString isEmpty ifFalse: [self parserClassString] ifTrue: ['Undefined']. ^ self mainWindow setLabel: self defaultWindowLabelPrefix , ': ' , scannerLabel , '/' , parserLabel! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:30'! verifyParser | parserCode | parserCode := self parserCodeHolder contentsMorph text. parserCode string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Parser code'. self tabList selectedPageIndex: 2. ^ false]. self parserCodeHolder hasUnacceptedEdits ifTrue: [(self acceptParserCode: parserCode notifying: self parserCodeHolder contentsMorph) ifTrue: [self parserCodeHolder acceptContents: parserCode. self parserCodeHolder changed: #contents] ifFalse: [^ false]]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'ThierryGoubier 4/20/2012 15:29'! verifyScanner | scannerText | scannerText := self scannerCodeHolder contentsMorph text. scannerText string trimBoth isEmpty ifTrue: [UIManager default inform: 'Empty Scanner code'. self tabList selectedPageIndex: 1. ^ false]. self scannerCodeHolder hasUnacceptedEdits ifTrue: [(self acceptScannerCode: scannerText notifying: self scannerCodeHolder contentsMorph) ifTrue: [self scannerCodeHolder acceptContents: scannerText. self scannerCodeHolder changed: #contents. ^ true]. ^ false]. ^ true! ! !SmaCCParserGenerator methodsFor: 'private' stamp: 'apl 2/18/2003 10:37'! verifySyntax self verifyScanner ifFalse: [^ false]. self verifyParser ifFalse: [^false]. ^ true! ! !SmaCCRHS commentStamp: 'jmb' prior: 101202225! SmaCCRHS represents the right hand side of the production. Instance variables: collection the collection of symbols that represent the rhs grammar the grammar that the production is in variableNames the name of each symbol in the rhs. These names can be used in the {} code blocks.! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! = aSmaCCRHS ^self class = aSmaCCRHS class and: [collection = aSmaCCRHS collection]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! add: aSmaCCSymbol collection add: aSmaCCSymbol! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! at: anInteger ^collection at: anInteger! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19'! collection ^collection! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 1/7/2007 11:08'! compileSourceFor: aSmaCCSymbol in: aClass | action rewriter parseTree methodName | action := self reduceAction. action isNil ifTrue: [^self defaultReduceAction]. parseTree := RBParser parseExpression: action onError: [:s :p | SmaCCCompilationNotification new tag: aSmaCCSymbol name , ' : ' , self printString , '\\' withCRs , action; signal: 'Invalid Smalltalk code in reduction rule'. ^self defaultReduceAction]. (parseTree isLiteral and: [parseTree value isSymbol and: [parseTree value numArgs <= 1 and: [aClass definesMethod: parseTree value]]]) ifTrue: [^parseTree value]. rewriter := self parseTreeRewriter. rewriter executeTree: parseTree. parseTree := rewriter tree. methodName := ('reduceActionFor' , aSmaCCSymbol safeMethodName , (aSmaCCSymbol positionOf: self) printString , ':') asSymbol. parseTree isSequence ifFalse: [parseTree := RBSequenceNode statements: (Array with: parseTree)]. parseTree := RBMethodNode selector: methodName arguments: (Array with: (RBVariableNode named: 'nodes')) body: parseTree. parseTree addReturn. aClass compile: parseTree formattedCode classified: 'generated-reduction actions'. ^methodName! ! !SmaCCRHS methodsFor: 'private' stamp: ' 6/1/07 21:19'! defaultReduceAction ^#reduceFor:! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! do: aBlock collection do: aBlock! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! firstTerminals | items | collection isEmpty ifTrue: [^Set with: SmaCCSymbol empty]. items := Set new. 1 to: collection size do: [:index | items addAll: (collection at: index) firstTerminals. (items includes: SmaCCSymbol empty) ifTrue: [index < collection size ifTrue: [items remove: SmaCCSymbol empty]] ifFalse: [^items]]. ^items! ! !SmaCCRHS methodsFor: 'comparing' stamp: ' 6/1/07 21:19'! hash ^self class hash bitXor: (collection hash bitShift: 14)! ! !SmaCCRHS methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize collection := OrderedCollection new. reduceAction := nil. variableNames := Dictionary new! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nameLastItem: aString variableNames at: aString put: collection size! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'lr 11/25/2009 18:01'! parseTreeRewriter | rewriter | rewriter := RBParseTreeRewriter new. 1 to: self size do: [:i | rewriter replace: i printString storeString with: '(nodes at: ' , i printString , ')']. variableNames keysAndValuesDo: [:key :value | rewriter replace: key with: '(nodes at: ' , value printString , ')']. ^rewriter! ! !SmaCCRHS methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream ^collection do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! reduceAction ^reduceAction! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! reduceAction: anObject reduceAction := anObject! ! !SmaCCRHS methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^collection size! ! !SmaCCRegularExpressionNode commentStamp: '' prior: 101202670! SmaCCRegularExpressionNode represents a regular expression. The scanner is represented by a regular expression. These are the initial objects created in producing the scanner. From these nodes, we create a directed graph and then we compile the graph. Subclasses must implement the following messages: accessing possibleMatchesSize private asNFAStartingWith: possibleMatchesDo:on: Instance Variables: action the actions to be performed when we find a match position the position of the RE in the scanner. If we have multiple matches, we prefer the ones listed first.! !SmaCCCharacterRENode commentStamp: 'jmb' prior: 101203337! SmaCCCharacterRENode represents a regular expression that matches one of a set of characters. Instance Variables: characters The characters that this node can accept. Note that there are no duplicates and all characters are sorted. ! !SmaCCCharacterRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! characters: aString ^(self new) characters: (self sortedCharactersFor: aString); yourself! ! !SmaCCCharacterRENode class methodsFor: 'private' stamp: 'lr 1/6/2007 22:50'! sortedCharactersFor: aString | characters stream | stream := WriteStream with: String new. SmaCCGrammar ignoreCase ifTrue: [aString do: [:each | stream nextPut: each asUppercase; nextPut: each asLowercase]] ifFalse: [stream nextPutAll: aString]. characters := stream contents asSortedCollection: [:a :b | a asInteger < b asInteger]. stream := WriteStream with: String new. characters inject: nil into: [:sum :each | sum = each ifFalse: [stream nextPut: each]. each]. ^stream contents! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. startNode addEdgeTo: endNode onCharacters: characters. ^endNode! ! !SmaCCCharacterRENode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! canMergeWith: aSmaCCRegularExpressionNode ^self class = aSmaCCRegularExpressionNode class and: [characters notNil and: [aSmaCCRegularExpressionNode characters notNil and: [self action = aSmaCCRegularExpressionNode action]]]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! characters ^characters! ! !SmaCCCharacterRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! characters: aString characters := aString! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! matchingCharacters ^SmaCCGrammar ignoreCase ifTrue: [characters reject: [:each | each isLowercase]] ifFalse: [characters]! ! !SmaCCCharacterRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self matchingCharacters do: [:each | aStream nextPut: each. aBlock value. aStream skip: -1]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^self matchingCharacters size! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: 'lr 11/25/2009 18:29'! printCharacter: aCharacter on: aStream (aCharacter asInteger between: 32 and: 126) ifTrue: [^aStream nextPut: aCharacter]. aStream nextPutAll: '\x'. aStream nextPutAll: (aCharacter asInteger printPaddedWith: $0 to: 2 base: 16)! ! !SmaCCCharacterRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream | allCharacters | characters size = 1 ifTrue: [^self printCharacter: characters first on: aStream]. aStream nextPut: $[. allCharacters := characters. characters size > 128 ifTrue: [aStream nextPut: $^. allCharacters := ((0 to: SmaCCGrammar maximumCharacterValue) collect: [:each | Character value: each]) reject: [:each | characters includes: each]]. allCharacters do: [:each | self printCharacter: each on: aStream]. aStream nextPut: $]! ! !SmaCCCharacterRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode (self canMergeWith: aSmaCCRegularExpressionNode) ifFalse: [^super | aSmaCCRegularExpressionNode]. characters := String withAll: ((characters , aSmaCCRegularExpressionNode characters) asSet asSortedCollection: [:a :b | a asInteger < b asInteger]). ^self! ! !SmaCCOrRENode commentStamp: 'jmb' prior: 101203652! SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative. Instance Variables: nodes our possible choices! !SmaCCOrRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. nodes do: [:each | | componentStart | componentStart := SmaCCNode new. startNode addEdgeTo: componentStart. (each asNFAStartingWith: componentStart) addEdgeTo: endNode]. ^endNode! ! !SmaCCOrRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! nodes: aCollection nodes := aCollection! ! !SmaCCOrRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream nodes do: [:each | | pos | pos := aStream position. each possibleMatchesDo: aBlock on: aStream. aStream position: pos]! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^nodes inject: 0 into: [:sum :each | sum + each possibleMatchesSize]! ! !SmaCCOrRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. nodes := nodes copy! ! !SmaCCOrRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPut: $(. nodes do: [:each | each printOn: aStream] separatedBy: [aStream nextPutAll: ' | ']. aStream nextPut: $)! ! !SmaCCOrRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super | aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! , aSmaCCRegularExpressionNode ^SmaCCSequenceRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action ^action! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! action: aString action := aString! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addState: aSymbol states add: aSymbol! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! addStateTransitionsTo: aSmaCCNode | endNode | states isEmpty ifTrue: [^aSmaCCNode]. endNode := SmaCCNode new. aSmaCCNode addEdgeTo: endNode onStates: states asSortedCollection asArray. ^endNode! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addStates: aCollection states addAll: aCollection! ! !SmaCCRegularExpressionNode methodsFor: 'converting' stamp: ' 6/1/07 21:19'! asDFA | startNode | startNode := SmaCCNode new. self asNFAStartingWith: startNode. ^startNode asDFA! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isKeywordLiteral ^self possibleMatchesSize < 50 and: [self possibleMatchesDo: [:each | each size > 1 ifTrue: [^true]]. false]! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! position ^position! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! position: anInteger position := anInteger! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatches | matches | matches := OrderedCollection new. self possibleMatchesDo: [:each | matches add: each]. ^matches! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock | stream | stream := WriteStream with: String new. self possibleMatchesDo: [aBlock value: stream contents] on: stream! ! !SmaCCRegularExpressionNode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^self subclassResponsibility! ! !SmaCCRegularExpressionNode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. states := Set new! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeat ^SmaCCRepeatingRENode component: self! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeatFor: minimum to: maximum ^SmaCCRepeatingRENode component: self minimum: minimum maximum: maximum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! repeatForAtLeast: minimum ^SmaCCRepeatingRENode component: self minimum: minimum! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! states ^states! ! !SmaCCRegularExpressionNode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! | aSmaCCRegularExpressionNode ^SmaCCOrRENode nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode)! ! !SmaCCRepeatingRENode commentStamp: 'jmb' prior: 101203876! SmaCCRepeatingRENode represents a repeating node in a regular expression. Instance Variables: maximumMatches the minimum number of matches required minimumMatches the maximum number of matches allowed. An infinite amount of matches is represented by (SmaCCRepeatingRENode finiteInfinity). node what we need to match! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode ^self component: aSmaCCRegularExpressionNode minimum: 0! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: anInteger ^self component: aSmaCCRegularExpressionNode minimum: anInteger maximum: self finiteInfinity! ! !SmaCCRepeatingRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger ^(self new) component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger; yourself! ! !SmaCCRepeatingRENode class methodsFor: 'constants' stamp: ' 6/1/07 21:19'! finiteInfinity "The number that we consider to be 'infinite'" ^2147483648! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode start | start := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. minimumMatches timesRepeat: [start := node asNFAStartingWith: start]. start addEdgeTo: endNode. maximumMatches < self class finiteInfinity ifTrue: [maximumMatches - minimumMatches timesRepeat: [start := node asNFAStartingWith: start. start addEdgeTo: endNode]] ifFalse: [(node asNFAStartingWith: start) addEdgeTo: start]. ^endNode! ! !SmaCCRepeatingRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger node := aSmaCCRegularExpressionNode. minimumMatches := minInteger. maximumMatches := maxInteger! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 0! ! !SmaCCRepeatingRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream startingAt: anInteger (anInteger between: minimumMatches and: maximumMatches) ifTrue: [aBlock value]. anInteger < maximumMatches ifTrue: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCRepeatingRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^node possibleMatchesSize * (maximumMatches - minimumMatches + 1)! ! !SmaCCRepeatingRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream node printOn: aStream. maximumMatches = (1 bitShift: 31) ifTrue: [minimumMatches = 0 ifTrue: [^aStream nextPut: $*]. minimumMatches = 1 ifTrue: [^aStream nextPut: $+]. ^aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPutAll: ',}']. aStream nextPut: ${; nextPutAll: minimumMatches printString; nextPut: $,; nextPutAll: maximumMatches printString; nextPut: $}! ! !SmaCCSequenceRENode commentStamp: 'jmb' prior: 101204297! SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together. Instance Variables: nodes our children nodes in left-to-right order! !SmaCCSequenceRENode class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! nodes: aCollection ^(self new) nodes: aCollection; yourself! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! , aSmaCCRegularExpressionNode self action = aSmaCCRegularExpressionNode action ifFalse: [^super , aSmaCCRegularExpressionNode]. nodes add: aSmaCCRegularExpressionNode. ^self! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! asNFAStartingWith: aSmaCCNode | endNode startNode | startNode := self addStateTransitionsTo: aSmaCCNode. endNode := SmaCCNode new. endNode action: action. (nodes inject: startNode into: [:sum :each | each asNFAStartingWith: sum]) addEdgeTo: endNode. ^endNode! ! !SmaCCSequenceRENode methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! nodes: aCollection nodes := aCollection! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream self possibleMatchesDo: aBlock on: aStream startingAt: 1! ! !SmaCCSequenceRENode methodsFor: 'private' stamp: ' 6/1/07 21:19'! possibleMatchesDo: aBlock on: aStream startingAt: anInteger | node | node := nodes at: anInteger. nodes size = anInteger ifTrue: [node possibleMatchesDo: aBlock on: aStream] ifFalse: [node possibleMatchesDo: [self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1] on: aStream]! ! !SmaCCSequenceRENode methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! possibleMatchesSize ^nodes inject: 1 into: [:sum :each | sum * each possibleMatchesSize]! ! !SmaCCSequenceRENode methodsFor: 'copying' stamp: ' 6/1/07 21:19'! postCopy super postCopy. nodes := nodes copy! ! !SmaCCSequenceRENode methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream nodes do: [:each | each printOn: aStream] separatedBy: [aStream space]! ! !SmaCCScannerCompiler commentStamp: 'jmb' prior: 101204592! SmaCCScannerCompiler represents the compiler for the scanner part of the parser. Instance Variables: grammar the grammar that defines the scanner scannerClass the class to compile the scanner into scannerDefinitionString the string that defines the scanner! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:42'! addActions self symbols keysAndValuesDo: [:index :each | each regularExpression ifNotNilDo: [:eachRegex | eachRegex action: index ]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addActionsFrom: aRegularExpression to: aKeywordMap at: states ^states do: [:state | state ~= aRegularExpression action ifTrue: [aRegularExpression possibleMatchesDo: [:string | (aKeywordMap at: state ifAbsentPut: [Dictionary new]) at: string put: aRegularExpression action]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addNormalSymbols grammar symbols: (self symbols asSortedCollection: self filePositionSortBlock)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! addSpecialSymbols grammar tokens keysDo: [:each | (self scannerActionFor: each) notNil ifTrue: [grammar terminalSymbolNamed: each]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! addSpecificREsWithoutActionsTo: aRegularExpression | dfa regex | regex := aRegularExpression. dfa := regex isNil ifTrue: [nil] ifFalse: [regex asDFA]. self specificRegularExpressionsDo: [:each | | actions | actions := dfa isNil ifTrue: [nil] ifFalse: [dfa actionForSpecificRegularExpression: each]. actions isNil ifTrue: [regex isNil ifTrue: [regex := each] ifFalse: [regex := regex | each]]]. ^regex! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! combinedGeneralRegexes | combinedRegex | combinedRegex := nil. self generalRegularExpressionsDo: [:each | combinedRegex := combinedRegex isNil ifTrue: [each] ifFalse: [combinedRegex | each]]. ^combinedRegex! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileEmptySymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'emptySymbolTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol empty) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileErrorSymbolTokenId | stream | stream := WriteStream with: String new. stream nextPutAll: 'errorTokenId'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: SmaCCSymbol error) printString. self scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileIgnoreCaseMethod SmaCCGrammar ignoreCase ifTrue: [scannerClass compile: 'keywordFor: aString ^aString asUppercase' classified: #'generated-scanner']! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00'! compileKeywordInitializerUsing: keywordMapDictionary selectorMap: selectorMapDictionary | stream dataStream | keywordMapDictionary isEmpty ifTrue: [^self]. stream := WriteStream with: String new. stream nextPutAll: 'initializeKeywordMap'. stream nextPutAll: ' keywordMap := Dictionary new. '. dataStream := WriteStream with: Array new. keywordMapDictionary keysAndValuesDo: [:key :value | value keys asSortedCollection do: [:each | dataStream nextPut: (Array with: (selectorMapDictionary at: key ifAbsent: [key]) with: each with: (selectorMapDictionary at: (value at: each) ifAbsent: [value at: each]))]]. stream nextPutAll: '#('; cr. dataStream contents do: [:each | stream nextPutAll: '#('. each do: [:item | item storeOn: stream] separatedBy: [stream nextPut: $ ]. stream nextPut: $)] separatedBy: [stream cr]. stream nextPut: $). stream nextPutAll: ' do: [:each | (keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last]. ^keywordMap'. scannerClass theMetaClass compile: (RBParser parseMethod: stream contents) formattedCode classified: #'generated-initialization'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileMethodsFor: regex withSelectors: selectorMap | keywordmap dfa | dfa := regex asDFA. keywordmap := self computeKeywordMapFor: dfa. self compileKeywordInitializerUsing: keywordmap selectorMap: selectorMap. dfa compileInto: scannerClass usingSelectorMap: selectorMap. self compileEmptySymbolTokenId. self compileErrorSymbolTokenId. self compileIgnoreCaseMethod! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileScanner | regex | self addSpecialSymbols. self addNormalSymbols. self addActions. self compileTokenIdMethods. regex := self addSpecificREsWithoutActionsTo: self combinedGeneralRegexes. self compileMethodsFor: regex withSelectors: self computeSelectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 11/25/2009 18:00'! compileScannerDefinitionComment | stream | stream := WriteStream with: String new. stream nextPutAll: 'scannerDefinitionComment'; cr; cr; tab; nextPut: $"; nextPutAll: (scannerDefinitionString copyReplaceAll: '"' with: '""'); nextPut: $". self scannerClass theMetaClass compile: stream contents classified: #'generated-comments'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileTokenIdMethodFor: aTerminalSymbol | stream | stream := WriteStream with: String new. stream nextPutAll: aTerminalSymbol safeMethodName; nextPutAll: 'Id'; cr; tab; nextPutAll: '^'; nextPutAll: (self symbols indexOf: aTerminalSymbol) printString. scannerClass compile: stream contents classified: #'generated-tokens'! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! compileTokenIdMethods (self symbols select: [:each | each createIdMethod]) do: [:each | self compileTokenIdMethodFor: each]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! computeKeywordMapFor: dfa | keywordmap | keywordmap := Dictionary new. self specificRegularExpressionsDo: [:each | | actions | actions := dfa actionForSpecificRegularExpression: each. actions isNil ifFalse: [self addActionsFrom: each to: keywordmap at: actions]]. ^keywordmap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'lr 1/6/2007 21:43'! computeSelectorMap | selectorMap | selectorMap := Dictionary new. self symbols keysAndValuesDo: [:index :each | (self scannerActionFor: each name) ifNotNilDo: [:selector | selectorMap at: index put: selector]]. ^selectorMap! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! filePositionSortBlock ^ [:a :b | | aRegex bRegex | aRegex := a regularExpression. bRegex := b regularExpression. bRegex isNil or: [aRegex notNil and: [(aRegex position ifNil: [0]) < (bRegex position ifNil: [0])]]]! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! generalRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifFalse: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! grammar: aGrammar grammar := aGrammar! ! !SmaCCScannerCompiler methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! parseTokens grammar scannerDefinition: (SmaCCScannerParser parse: scannerDefinitionString)! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: ' 6/1/07 21:19'! regularExpressionsDo: aBlock self symbols do: [:each | each regularExpression ifNotNil: aBlock]! ! !SmaCCScannerCompiler methodsFor: 'compiling-scanner' stamp: 'ThierryGoubier 5/14/2012 15:41'! scannerActionFor: aString | selector | aString size > 2 ifFalse: [ ^ nil ]. selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. ^ ((scannerClass definesMethod: selector) and: [ (Object canUnderstand: selector) not and: [ ((SmaCCScanner canUnderstand: selector) not or: [ #(#comment #whitespace) includes: selector ]) and: [ selector numArgs = 0 ] ] ]) ifTrue: [ selector ] ifFalse: [ nil ]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerClass ^scannerClass! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerClass: anObject scannerClass := anObject! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! scannerDefinitionString: aString scannerDefinitionString := aString! ! !SmaCCScannerCompiler methodsFor: 'regular expression construction' stamp: ' 6/1/07 21:19'! specificRegularExpressionsDo: aBlock self regularExpressionsDo: [:each | each isKeywordLiteral ifTrue: [aBlock value: each]]! ! !SmaCCScannerCompiler methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! symbols ^grammar symbols! ! !SmaCCScannerDefinition commentStamp: '' prior: 101204959! SmaCCScannerDefinition is the parsed representation of the scanner. It contains the tokens and states for the scanner. Instance Variables: excludeStates exclusive states (when we are in one of these, then we shouldn't try to parse the default tokens) states states in the scanner -- if no states are specified, then this will only contain #default tokens dictionary mapping token names to their regular expressions ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addExcludeState: aSymbol excludeStates add: aSymbol. self addState: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addState: aSymbol states add: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addToken: aSmaCCRENode withName: aString tokens at: aString put: aSmaCCRENode! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! defaultState ^#default! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includesTokenNamed: aString ^tokens includesKey: aString! ! !SmaCCScannerDefinition methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! initialize tokens := Dictionary new. states := Set with: self defaultState. excludeStates := Set new! ! !SmaCCScannerDefinition methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isExcludeState: aSymbol ^excludeStates includes: aSymbol! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! nonExcludeStates | nonExcludeStates | nonExcludeStates := states reject: [:each | self isExcludeState: each]. nonExcludeStates add: self defaultState. ^nonExcludeStates! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! states ^states! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokenNamed: aString ^tokens at: aString! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokenNamed: aString ifAbsentPut: aBlock ^tokens at: aString ifAbsentPut: aBlock! ! !SmaCCScannerDefinition methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! tokens ^tokens! ! !SmaCCSymbol commentStamp: '' prior: 101205472! SmaCCSymbol is an abstract class that represents a symbol in the grammar. Subclasses must implement the following messages: accessing calculateFirstTerminals testing isTerminal Instance Variables: firstItems the first terminals that can be produced from us name our name precedence our precedence (in case of shift/reduce conflicts) ! !SmaCCNonTerminalSymbol commentStamp: 'jmb' prior: 101205929! SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar. Instance Variables: productions our rhs' for the symbol! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addProduction: aSmaCCRHS productions add: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! calculateFirstTerminals | initialSize | initialSize := firstItems size. productions isEmpty ifTrue: [firstItems add: self class empty] ifFalse: [productions do: [:each | firstItems addAll: each firstTerminals]]. ^initialSize ~= firstItems size! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isEmpty ^productions isEmpty! ! !SmaCCNonTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^false! ! !SmaCCNonTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString super name: aString. productions := OrderedCollection new! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! positionOf: aSmaCCRHS ^productions indexOf: aSmaCCRHS! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! productionsDo: aBlock productions do: aBlock! ! !SmaCCNonTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^productions size! ! !SmaCCStartingSymbol commentStamp: 'jmb' prior: 101206149! SmaCCStartingSymbol is the starting symbol in the grammar. A grammar can only have one starting symbol, but it can have may different starting item sets.! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! asLRItemSet | itemSet | itemSet := SmaCCItemSet new. productions do: [:each | itemSet add: (SmaCCLR1Item symbol: self rhs: each follow: ((SmaCCSymbolSet new) add: self class empty; yourself))]. ^itemSet! ! !SmaCCStartingSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! compileName ^(productions first at: 1) safeMethodName! ! !SmaCCStartingSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isStartingSymbol ^true! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! empty EmptySymbol isNil ifTrue: [EmptySymbol := SmaCCTerminalSymbol name: 'E O F']. ^EmptySymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! error ErrorSymbol isNil ifTrue: [ErrorSymbol := SmaCCTerminalSymbol name: 'error']. ^ErrorSymbol! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! name: aString ^(self new) name: aString; yourself! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! releaseObjects EmptySymbol := nil. SentinelSymbol := nil. ErrorSymbol := nil! ! !SmaCCSymbol class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! sentinel SentinelSymbol isNil ifTrue: [SentinelSymbol := SmaCCTerminalSymbol name: 'S e n t i n e l']. ^SentinelSymbol! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! calculateFirstTerminals ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod ^false! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! firstTerminals ^firstItems! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! isEmptySymbol ^self = self class empty! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isStartingSymbol ^false! ! !SmaCCSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^self subclassResponsibility! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! name ^name! ! !SmaCCSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString name := aString. firstItems := Set new! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence ^precedence! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! precedence: anInteger precedence := anInteger! ! !SmaCCSymbol methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream aStream nextPutAll: name! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! productionsDo: aBlock! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression ^nil! ! !SmaCCSymbol methodsFor: 'accessing' stamp: 'lr 1/7/2007 10:57'! safeMethodName ^self unsafeMethodName collect: [:each | each isAlphaNumeric ifTrue: [each] ifFalse: [$X]]! ! !SmaCCSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^0! ! !SmaCCSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! unsafeMethodName ^self printString! ! !SmaCCTerminalSymbol commentStamp: 'jmb' prior: 101206355! SmaCCTerminalSymbol represents a terminal symbol in our grammar. Instance Variables: createIdMethod should we create a symbolNameId method for this symbol. regularExpression our regular expression that we must match for this terminal symbol! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! calculateFirstTerminals ^false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod ^createIdMethod! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! createIdMethod: aBoolean createIdMethod := aBoolean! ! !SmaCCTerminalSymbol methodsFor: 'testing' stamp: ' 6/1/07 21:19'! isTerminal ^true! ! !SmaCCTerminalSymbol methodsFor: 'initialize-release' stamp: ' 6/1/07 21:19'! name: aString super name: aString. firstItems add: self. createIdMethod := false! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression ^regularExpression! ! !SmaCCTerminalSymbol methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! regularExpression: aSmaCCRegularExpressionNode regularExpression := aSmaCCRegularExpressionNode! ! !SmaCCTerminalSymbol methodsFor: 'private' stamp: ' 6/1/07 21:19'! unsafeMethodName ^name copyFrom: 2 to: name size - 1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testDuplicateLoop | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 1. node3 := SmaCCNode new. node3 action: 1. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 1. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. self assert: node1 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testNoDuplicates | node1 node2 node3 | node1 := SmaCCNode new. node1 action: 1. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 3. node1 addEdgeTo: node2 onCharacters: 'a'. node2 addEdgeTo: node3 onCharacters: 'a'. node3 addEdgeTo: node1 onCharacters: 'a'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 3. self assert: node1 transitions size = 1. self assert: (node1 action includes: 1). self assert: node1 transitions first transitionObjects = 'a'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'a'. node3 := node2 transitions first to. self deny: node1 = node3. self deny: node2 = node3. self assert: node3 transitions size = 1. self assert: (node3 action includes: 3). self assert: node3 transitions first transitionObjects = 'a'. self assert: node3 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testSimpleDuplicateWithEdges | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node2 addEdgeTo: node1 onCharacters: 'c'. node3 addEdgeTo: node1 onCharacters: 'c'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions size = 1. self assert: (node2 action includes: 2). self assert: node2 transitions first transitionObjects = 'c'. self assert: node2 transitions first to = node1! ! !DuplicationNodeEliminationTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testSimpleTerminalDuplicate | node1 node2 node3 | node1 := SmaCCNode new. node2 := SmaCCNode new. node2 action: 2. node3 := SmaCCNode new. node3 action: 2. node1 addEdgeTo: node2 onCharacters: 'a'. node1 addEdgeTo: node3 onCharacters: 'b'. node1 := node1 removeDuplicateNodes. self assert: node1 allStates size = 2. self assert: node1 transitions size = 1. self assert: node1 transitions first transitionObjects = 'ab'. node2 := node1 transitions first to. self deny: node1 = node2. self assert: node2 transitions isEmpty. self assert: (node2 action includes: 2)! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testApplet JavaParser parse: '// Hello.java import java.applet.Applet; import java.awt.Graphics; public class Hello extends Applet { public void paint(Graphics gc) { gc.drawString("Hello, world!!", 65, 95); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30'! testEcho CParser parse: 'int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) { printf("%s", argv[i]); } }'! ! !ExampleParserTests methodsFor: 'testing-c' stamp: 'lr 1/8/2007 22:30'! testHello CParser parse: 'main( ) { printf("Hello World\n"); }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:34'! testSelfParsing StParser parseMethod: (self class sourceCodeAt: thisContext selector)! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testServlet JavaParser parse: '// Hello.java import java.io.*; import javax.servlet.*; public class Hello extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter pw = response.getWriter(); pw.println("Hello, world!!"); pw.close(); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testStandAlone JavaParser parse: '// Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello, World!!"); } }'! ! !ExampleParserTests methodsFor: 'testing-java' stamp: 'lr 1/8/2007 22:30'! testSwing JavaParser parse: '// Hello.java (Java SE 5) import java.awt.BorderLayout; import javax.swing.*; public class Hello extends JFrame { public Hello() { super("hello"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); getContentPane().add(new JLabel("Hello, world!!")); pack(); } public static void main(String[] args) { new Hello().setVisible(true); } }'! ! !ExampleParserTests methodsFor: 'testing-st' stamp: 'lr 1/8/2007 22:32'! testTranscript StParser parseExpression: 'Transcript show: ''Hello World''; cr'! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addCRLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr with: Character lf)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addCRsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character cr)! ! !LineNumberStreamTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! addLFsTo: aString ^aString copyReplaceAll: '\' with: (String with: Character lf)! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testEmptyLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '\\\')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. stream upTo: Character cr]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testForwardPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addLFsTo: '1234\1234\1234\1234')). 1 to: 4 do: [:each | self assert: stream lineNumber = each. 4 timesRepeat: [self assert: stream columnNumber = (stream next asInteger - $0 asInteger)]. stream upTo: Character lf]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testNoLines | stream index | stream := SmaCCLineNumberStream on: (ReadStream on: 'this is a test'). self assert: stream lineNumber = 1. index := 1. stream do: [:each | self assert: stream lineNumber = 1. index := index + 1. self assert: stream columnNumber = index]! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testPositionCRLFLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 3. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !LineNumberStreamTest methodsFor: 'tests' stamp: ' 6/1/07 21:20'! testPositionCRLines | stream | stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1\2\3\4')). self assert: stream lineNumber = 1. stream upTo: $5. self assert: stream lineNumber = 4. stream skip: -1. self assert: stream lineNumber = 4. self assert: stream columnNumber = 1. stream position: 0. self assert: stream lineNumber = 1. self assert: stream columnNumber = 1. stream position: 2. self assert: stream lineNumber = 2. self assert: stream columnNumber = 1! ! !ParserGeneratorTest class methodsFor: 'accessing' stamp: 'lr 11/25/2009 18:58'! packageNamesUnderTest ^ #('SmaCC' 'SmaCCDev')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! expressionParserString ^' %left "+" "-" ; %left "*" "/" ; %right "^" ; Expression: Expression ''first'' "+" Expression ''last'' {first + last} | Expression "-" Expression {''1'' - ''3''} | Expression "*" Expression {''1'' * ''3''} | Expression "/" Expression {''1'' / ''3''} | Expression "^" Expression {''1'' raisedTo: ''3''} | "(" Expression ")" {''2''} | {''1'' value asNumber};'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! expressionScannerString ^' : [0-9]+ (\. [0-9]+) ? ; : \s+;'! ! !ParserGeneratorTest methodsFor: 'private' stamp: 'lr 1/8/2007 21:49'! removeAllSelectorsFrom: aClass aClass selectors do: [ :each | aClass removeSelector: each ]. aClass organization removeEmptyCategories! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'ThierryGoubier 3/8/2013 17:00'! runCase SystemAnnouncer uniqueInstance suspendAllWhile: [ super runCase ]! ! !ParserGeneratorTest methodsFor: 'private' stamp: ' 6/1/07 21:20'! supportsUnicodeStrings ^ [String with: (Character value: 16rFF00). true] on: Error do: [:ex | ex return: false]! ! !ParserGeneratorTest methodsFor: 'running' stamp: 'lr 1/7/2007 11:19'! tearDown super tearDown. self removeAllSelectorsFrom: TestParser; removeAllSelectorsFrom: TestParser class; removeAllSelectorsFrom: TestScanner; removeAllSelectorsFrom: TestScanner class! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBadCharacterBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : [a-] ;' andParser: 'Start : ;'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBadSmalltalkBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. self should: [parserCompiler buildScanner: ' : foo ;' andParser: 'Start : {self printOn: };'. parserCompiler compileInto: TestScanner andParser: TestParser] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBraceRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : <%%>;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testBracketOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : [":"] begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileDefinitionComments; compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testComments | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : /* q */ /***/ /****/ a # b ;' andParser: '/* */ /***/ /****/ #this is a comment begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testCrLf | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \r? \n | \r ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String with: Character cr with: Character lf)). self should: [TestParser parse: (String with: Character cr with: Character cr)] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testErrorToken | parserCompiler countingBlock | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z]+; : \s+;' andParser: '%left "+"; Expression : | Expression "+" Expression {[Notification signal] on: Error do: [:ex | ex return: (Notification raise)]} | error "+" Expression ;'. parserCompiler compileInto: TestScanner andParser: TestParser. countingBlock := [:string | | count | count := 0. [[TestParser parse: string] on: Notification do: [:ex | count := count + 1. [ex resume] on: Error do: [:ex1 | ex isResumable: true. ex1 retry]]] on: SmaCCParserError do: [:ex | ex return]. count]. #(#('a + b + c' 2) #('+ a + b + c' 2) #('a + b +' 1) #('a + 1 / 2 + b + c + 3' 2) #('1 + 1 / 2 + b + c + 3' 1)) do: [:each | self assert: (countingBlock value: each first) = each last]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testErrors | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: '+3*4' onError: [:str :pos | position := pos]. self assert: position = 1. TestParser parseStream: (ReadStream on: '1+a+4') onError: [:str :pos | position := pos]. self assert: position = 3! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testExcludeScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %excludes a; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self should: [parser parse] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testExpressions #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: self expressionParserString. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '2 + 3 * 4 / 5 ^ 3 ^ 2') = (2 + (3 * 4 / (5 raisedTo: (3 raisedTo: 2)))). self assert: (TestParser parse: '1.0*2/3+4.0^2^3+3') = (1.0 * 2 / 3 + (4.0 raisedTo: (2 raisedTo: 3)) + 3). self assert: (TestParser parse: '(((1 + 2) * 3) ^ 2) ^ 3') = (((1 + 2) * 3 raisedTo: 2) raisedTo: 3)]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testIgnoreCaseKeywords | parserCompiler case | case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-z_]+ ; : \s+ ;' andParser: 'Start ::= "Foo" {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'FOo'). self deny: (TestParser parse: 'FoObAr ASDS')] ensure: [SmaCCGrammar ignoreCase: case]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitParserTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a'). self should: [TestParser parse: ' '] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitScannerTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : + ;' andParser: 'A : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'asdfssdafADSFS'). self should: [TestParser parse: ' asdf asdf'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testImplicitTokenPrecedence | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : . ;' andParser: 'A : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. 0 to: 255 do: [:each | self assert: (TestParser parse: (String with: (Character value: each)))]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testInvertedCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : [^a]+ ; : \s+ ;' andParser: 'begin : {0} | begin {''1'' + 1} | begin {''1'' - 1};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa') = 1. self assert: (TestParser parse: 'aaaa') = 2. self assert: (TestParser parse: 'a bab') = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testKeywords | parserCompiler size case | size := SmaCCGrammar maximumCharacterValue. case := SmaCCGrammar ignoreCase. SmaCCGrammar ignoreCase: true. self supportsUnicodeStrings ifTrue: [SmaCCGrammar maximumCharacterValue: (2 raisedTo: 16) - 1]. [parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'Start ::= "Foo" "bar";'. parserCompiler compileInto: TestScanner andParser: TestParser. TestParser parse: 'FoObAr'] ensure: [SmaCCGrammar ignoreCase: case; maximumCharacterValue: size]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testLALRErrorHandler | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \s+ ;' andParser: 'Start : Foo "]" Foo ")"; Foo : "a" Bar ; Bar : "b" | error ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a ] a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a ) a b )'] raise: SmaCCParserError. self should: [TestParser parse: 'a b ] a ]'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testMultipleStartingPositions | parserCompiler position | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+;' andParser: '%start plus ; multiply: plus "*" plus {true}; plus: {false} | "+" {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a*a'). self assert: (TestParser parse: 'a+a*a'). self should: [TestParser parse: 'a+a'] raise: SmaCCParserError. self deny: (TestParser parse: 'a+a' startingAt: TestParser startingStateForplus). TestParser parse: 'a*a' startingAt: TestParser startingStateForplus onError: [:str :pos | position := pos]. self assert: position = 2! ! !ParserGeneratorTest methodsFor: 'testing' stamp: 'lr 1/6/2007 21:32'! testNodeAccess | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: '' andParser: 'start : "a" ''x'' { Array with: ''1'' value with: ''1'' value with: x value with: x value } ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'a') = #( 'a' 'a' 'a' 'a' )! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testNonAssociativeTokens | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w+ ; : \s+ ;' andParser: '%left "and" ; %nonassoc "=" "<="; %left "+" ; expr : expr "=" expr {true} | expr "<=" expr {true} | expr "and" expr {true} | expr "+" expr {true} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: 'a=b=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b<=c'] raise: SmaCCParserError. self should: [TestParser parse: 'a=b+c=d'] raise: SmaCCParserError. self assert: (TestParser parse: 'a=b and c=d')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : ":" ? begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testParenthesesOptionalToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : (":" | "|") begin {''1'' value , ''3''} | {''1'' value};'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: (TestParser parse: 'a | b : c') = 'abc'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testPriority | parserCompiler | TestScanner compile: 'all ^self recordAndReportMatch: (Array with: self allId)'. parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \{ | \< \% ; : .;' andParser: '%id ; begin : A {true} | All {false}; A : ; All: ;'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: '{'). self assert: (TestParser parse: '<%'). self deny: (TestParser parse: '}')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRecursiveRule #(#LR1 #LALR1) do: [:each | | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler grammar type: each. parserCompiler buildScanner: self expressionScannerString andParser: 'Test: Test1 Recursive; Test1: {''1'' value}; Recursive: | Recursive "|" {''1'' add: ''3'' value; yourself};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: ((parserCompiler grammar nonTerminalSymbolNamed: 'Recursive') firstTerminals includes: (parserCompiler grammar keywordTerminalNamed: '"|"')). self assert: (TestParser parse: '2|3|4') = (OrderedCollection with: '2' with: '3' with: '4')]! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReduceReduceConflict | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \w ; : \s+ ;' andParser: 'begin : Foo {true} | Bar {false}; Foo : ; Bar : ;'. self assert: ( [parserCompiler compileInto: TestScanner andParser: TestParser. false] on: SmaCCCompilationNotification do: [:ex | ('*Reduce/Reduce*' match: ex messageText) ifTrue: [ex return: true] ifFalse: [ex resume: nil]])! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReduceRules | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z] ; : \s ;' andParser: ' Start ::= Chars {#liftFirstValue:}; Chars : WS A WS {#liftSecondValue:}; A : WS WS C {#liftLastValue:} | C WS {#liftLastValue:}; WS : {#nil}; C : {#stringValue:};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: ' a ') = nil. self assert: (TestParser parse: ' a ') = 'a'! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatMultipleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|){1,2} ; : \s+ ;' andParser: 'begin : + ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a1 bb c44') collect: [:each | each value]) asArray = #('a1' 'bb' 'c44'). self assert: ((TestParser parse: 'aaaaa') collect: [:each | each value]) asArray = #('aaa' 'aa'). self should: [TestParser parse: ''] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : * ;'. parserCompiler compileInto: TestScanner andParser: TestParser. parserCompiler compileItemSetsComment; compileSymbolComment. self assert: ((TestParser parse: 'a b c') collect: [:each | each value]) asArray = #('a' 'b' 'c'). self assert: (TestParser parse: '') size = 0! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testRepeatingCharactersBlock | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a{1,3} ; : \w+ ; : \s+ ;' andParser: 'begin : {true} | begin {''1''} | begin {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'aa'). self deny: (TestParser parse: 'aaaa')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReuseCompositeToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_] \d ; : aa | bb; : | ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'aa'). self assert: (TestParser parse: 'bb'). self assert: (TestParser parse: 'a4'). self should: [TestParser parse: 'ab'] raise: SmaCCParserError. self should: [TestParser parse: '4b'] raise: SmaCCParserError! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testReuseSimpleToken | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : [a-zA-Z_\\] ; : [0-9] ; : (|)* ; : \s+ ;' andParser: 'begin : begin {false} | {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: '\')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testScannerState | parserCompiler parser | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' %states a ; : b; a : a;' andParser: ' Start : {true} | {false};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: 'b'). self should: [TestParser parse: 'a'] raise: SmaCCParserError. parser := TestParser on: (ReadStream on: 'a'). parser scanner state: #a. self deny: parser parse. parser := TestParser on: (ReadStream on: 'b'). parser scanner state: #a. self assert: parser parse! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testSimple | parserCompiler | parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : a ;' andParser: 'begin : {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self should: [TestParser parse: '2'] raise: SmaCCParserError. self assert: (TestParser parse: 'a')! ! !ParserGeneratorTest methodsFor: 'testing' stamp: ' 6/1/07 21:20'! testSpecialCharacters | parserCompiler | [String with: (Character value: 16rFF00)] on: Error do: [:ex | ^self]. "Unicode characters not supported" parserCompiler := SmaCCGrammarCompiler new. parserCompiler buildScanner: ' : \x3g \x20 \xFF \xFF1 \xFF00 \cC;' andParser: 'begin ::= {true};'. parserCompiler compileInto: TestScanner andParser: TestParser. self assert: (TestParser parse: (String withAll: (#(3 103 16r20 16rFF 16rFF1 16rFF00 2) collect: [:each | Character value: each])))! ! !SmaCCSymbolSet commentStamp: 'jmb' prior: 101206681! SmaCCSymbolSet represents a set of follow symbols in the LALR(1) item sets. Instance Variables: components other SmaCCSymbolSets that we depend on, we include all items in these sets also symbols our follow symbols! !SmaCCSymbolSet class methodsFor: 'instance creation' stamp: ' 6/1/07 21:19'! basedOn: aSmaCCSymbolSet ^(self new) baseOn: aSmaCCSymbolSet; yourself! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! add: aSmaCCSymbol (symbols includes: aSmaCCSymbol) ifTrue: [^self]. symbols add: aSmaCCSymbol. self changed! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! addAll: aCollection | oldSize | oldSize := symbols size. symbols addAll: aCollection. oldSize ~= symbols size ifTrue: [self changed]! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! addComponent: each (each = self or: [components includes: each]) ifTrue: [^self]. components add: each. each addDependent: self. self addAll: each symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! addComponentsFrom: aSmaCCSymbolSet aSmaCCSymbolSet components do: [:each | self addComponent: each]! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! allSatisfy: aBlock ^symbols allSatisfy: aBlock! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! baseOn: aSmaCCSymbolSet self addComponent: aSmaCCSymbolSet. self addAll: aSmaCCSymbolSet symbols! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! components ^components! ! !SmaCCSymbolSet methodsFor: 'testing' stamp: ' 6/1/07 21:19'! includes: aSmaCCSymbol ^symbols includes: aSmaCCSymbol! ! !SmaCCSymbolSet methodsFor: 'initialize-release' stamp: 'lr 1/8/2007 14:42'! initialize symbols := Set new. components := Set new! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! mergeWith: aSmaCCSymbolSet self addAll: aSmaCCSymbolSet symbols. self addComponentsFrom: aSmaCCSymbolSet! ! !SmaCCSymbolSet methodsFor: 'printing' stamp: ' 6/1/07 21:19'! printOn: aStream symbols do: [:each | aStream nextPutAll: each printString] separatedBy: [aStream space]! ! !SmaCCSymbolSet methodsFor: 'accessing' stamp: ' 6/1/07 21:19'! size ^symbols size! ! !SmaCCSymbolSet methodsFor: 'private' stamp: ' 6/1/07 21:19'! symbols ^symbols! ! !SmaCCSymbolSet methodsFor: 'updating' stamp: 'lr 1/8/2007 14:47'! update: aSender (components includes: aSender) ifTrue: [self addAll: aSender symbols]! ! "SmaCCDev"! ----QUIT----2014-03-12T14:47:43.583803+01:00 Pharo.image priorSource: 32761859! !ConfigurationOfSmaCC commentStamp: '' prior: 0! SmaCC is a parser generator, doing LR, LALR and GLR generation, parse tree automatic building, parse tree based rewritting (refactoring). Copyright (c) 2014 Thierry Goubier Copyright (c) 2002-2010 John Brant, Don Roberts Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ! !ConfigurationOfSmaCC commentStamp: '' prior: 101766614! SmaCC is a parser generator, doing LR, LALR and GLR generation, parse tree automatic building, parse tree based rewritting (refactoring). Copyright (c) 2014 Thierry Goubier Copyright (c) 2002-2010 John Brant, Don Roberts Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ! ----STARTUP----2014-03-13T09:29:48.95639+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! !ConfigurationOfSmaCC class methodsFor: 'gitfiletree support' stamp: 'ThierryGoubier 2/3/2014 11:19'! ensureGitFileTree "And all related dependencies." Smalltalk at: #MCFileTreeGitRepository ifAbsent: [ Gofer new url: 'http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo30/main'; configurationOf: 'GitFileTree'; loadDevelopment ]! ! !ConfigurationOfSmaCC class methodsFor: 'loading' stamp: 'ThierryGoubier 3/5/2014 13:04'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfSmaCC methodsFor: 'baselines' stamp: 'ThierryGoubier 3/5/2014 13:31'! baseline20: spec self class ensureGitFileTree. spec for: #'pharo3.x' do: [ spec blessing: #baseline. spec package: 'SmaCC-Source-Editing'; package: 'SmaCC-Runtime' with: [ spec requires: 'SmaCC-Source-Editing' ]; package: 'SmaCC-GLR-Runtime' with: [ spec requires: 'SmaCC-Runtime' ]; package: 'SmaCC-Development' with: [ spec requires: 'SmaCC-GLR-Runtime' ]; package: 'SmaCC-Development-UI' with: [ spec requires: 'SmaCC-Development' ]; package: 'SmaCC-Tests' with: [ spec requires: 'SmaCC-GLR-Runtime' ]; package: 'SmaCC-Rewrite-Engine' with: [ spec requires: 'SmaCC-Runtime' ]; package: 'SmaCC-Rewrite-Engine-Tests' with: [ spec requires: 'SmaCC-Rewrite-Engine' ]; package: 'SmaCC-Server-Session'; package: 'SmaCC-Rewrite-Server' with: [ spec requires: 'SmaCC-Server-Session' ]; package: 'SmaCC-Rewrite-Server-Worker' with: [ spec requires: 'SmaCC-Rewrite-Engine'; requires: 'SmaCC-Server-Session' ]; package: 'SmaCC-Smalltalk-Parser' with: [ spec requires: 'SmaCC-Runtime' ]; package: 'SmaCC-C-Parser' with: [ spec requires: 'SmaCC-Runtime' ]; package: 'SmaCC-CSharp' with: [ spec requires: 'SmaCC-GLR-Runtime' ]; package: 'SmaCC-Java' with: [ spec requires: 'SmaCC-GLR-Runtime' ]. spec group: 'default' with: #('Tools'); group: 'Runtime' with: #('SmaCC-GLR-Runtime'); group: 'Rewrite' with: #('SmaCC-Rewrite-Engine'); group: 'Rewrite-Server' with: #('SmaCC-Rewrite-Server-Worker' 'SmaCC-Rewrite-Server' 'Rewrite'); group: 'Tools' with: #('SmaCC-Development-UI' 'Examples' 'Rewrite'); group: 'Examples' with: #('SmaCC-Smalltalk-Parser' 'SmaCC-C-Parser' 'SmaCC-CSharp' 'SmaCC-Java') ]! ! !ConfigurationOfSmaCC methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 2/28/2014 10:37'! development: spec spec for: #'pharo3.x' version: '2.0.3'! ! !ConfigurationOfSmaCC methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 3/5/2014 13:31' prior: 101134158! stable: spec spec for: #common version: '0.1'. spec for: #'pharo1.4.x' version: '0.2'. spec for: #'pharo2.x' version: '0.3'. spec for: #'pharo3.x' version: '0.5'! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 2/28/2014 10:39' prior: 101134791! version02: spec spec for: #'pharo1.4.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 1.4'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.31'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 2/28/2014 10:39' prior: 101135206! version03: spec spec for: #'pharo2.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 2.0'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.33'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/5/2014 13:31'! version04: spec spec for: #'pharo3.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 3.0'. spec package: 'SmaCC' with: 'SmaCC-lr.14'; package: 'SmaCCDev' with: 'SmaCCDev-ThierryGoubier.36'. ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/5/2014 14:11'! version05: spec spec for: #'pharo3.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 3.0'. spec repository: 'github://ThierryGoubier/SmaCC:master'. spec package: 'SmaCC-Source-Editing' with: 'SmaCC-Source-Editing-ThierryGoubier.1'; package: 'SmaCC-Runtime' with: 'SmaCC-Runtime-ThierryGoubier.2'; package: 'SmaCC-GLR-Runtime' with: 'SmaCC-GLR-Runtime-ThierryGoubier.2'; package: 'SmaCC-Development' with: 'SmaCC-Development-ThierryGoubier.13'; package: 'SmaCC-Development-UI' with: 'SmaCC-Development-UI-ThierryGoubier.15'; package: 'SmaCC-Tests' with: 'SmaCC-Tests-ThierryGoubier.9'; package: 'SmaCC-Rewrite-Engine' with: 'SmaCC-Rewrite-Engine-ThierryGoubier.3'; package: 'SmaCC-Rewrite-Engine-Tests' with: 'SmaCC-Rewrite-Engine-Tests-ThierryGoubier.1'; package: 'SmaCC-Server-Session' with: 'SmaCC-Server-Session-ThierryGoubier.2'; package: 'SmaCC-Rewrite-Server' with: 'SmaCC-Rewrite-Server-ThierryGoubier.2'; package: 'SmaCC-Rewrite-Server-Worker' with: 'SmaCC-Rewrite-Server-Worker-ThierryGoubier.1'; package: 'SmaCC-Smalltalk-Parser' with: 'SmaCC-Smalltalk-Parser-ThierryGoubier.2'; package: 'SmaCC-C-Parser' with: 'SmaCC-C-Parser-ThierryGoubier.1'; package: 'SmaCC-CSharp' with: 'SmaCC-CSharp-ThierryGoubier.2'; package: 'SmaCC-Java' with: 'SmaCC-Java-ThierryGoubier.3' ]! ! !ConfigurationOfSmaCC methodsFor: 'versions' stamp: 'ThierryGoubier 3/5/2014 13:32'! version203: spec spec for: #'pharo3.x' do: [ spec repository: 'gitfiletree://github.com/ThierryGoubier/SmaCC.git?protocol=git'. spec blessing: #development; author: 'ThierryGoubier'; description: 'SmaCC Smalltalk Compiler Compiler for Pharo 3.0' ]! ! "ConfigurationOfSmaCC"! !ConfigurationOfGitFileTree commentStamp: '' prior: 0! This configuration is for loading gitfiletree on Pharo3.0 with the correct dependencies. This works on Linux and Mac OS X. Access to git on Windows is however not yet possible due to deficiencies in the ability of Pharo to call external commands.! !ConfigurationOfGitFileTree commentStamp: '' prior: 101775693! This configuration is for loading gitfiletree on Pharo3.0 with the correct dependencies. This works on Linux and Mac OS X. Access to git on Windows is however not yet possible due to deficiencies in the ability of Pharo to call external commands.! !ConfigurationOfGitFileTree class methodsFor: 'development support' stamp: 'ThierryGoubier 1/16/2014 14:11'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfGitFileTree class methodsFor: 'private' stamp: 'ThierryGoubier 1/16/2014 14:13'! baseConfigurationClassIfAbsent: aBlock ^ Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]! ! !ConfigurationOfGitFileTree class methodsFor: 'catalog' stamp: 'ThierryGoubier 1/16/2014 14:37'! catalogChangeLog ^ ' Time: jeudi 16 janvier 2014, 14:36:59 (UTC+0100) First version to get a simple way to load the dependencies of gitfiletree:// '! ! !ConfigurationOfGitFileTree class methodsFor: 'catalog' stamp: 'ThierryGoubier 1/16/2014 14:37'! catalogContactInfo ^ 'https://github.com/ThierryGoubier'! ! !ConfigurationOfGitFileTree class methodsFor: 'catalog' stamp: 'ThierryGoubier 1/16/2014 15:02'! catalogDescription ^ 'GitFileTree is an integration of Git commands below Monticello, allowing a very simple and powerfull integration with a git repository for tracking Monticello packages (with a bit of a need for the command line to manage git: still, a simple github hosted project can be managed with a single command: git clone :) ). Works with any possible organisation of the git repository related to the package (single language, multi language, single package, multiple packages, single remote repo, multiple remote repositories, branches, you name it). GitFileTree: is partially integrated into the original FileTree, but not easily available. This configuration allow for a one step loading with the dependencies.'! ! !ConfigurationOfGitFileTree class methodsFor: 'catalog' stamp: 'ThierryGoubier 1/16/2014 14:57'! catalogKeyClassesAndExample ^ ' gitfiletree rely on two things : - FileTree to write a package as a file hierarchy on disk. - Git commands to - commit a package to the repo as soon as it has been written - query the repository - extract a specific commit of the package directory - push and pull from the origin repository On top of that, gitfiletree does the following: - Present a complete MC repository GUI with all versions in the history - Read any version in the history of the repository - Rebuilt all the MC metadata out of the git history. Works with any possible organisation of the git repository related to the package (single language, multi language, single package, multiple packages, single remote repo, multiple remote repositories, branches, you name it). Single principle : does one commit per version of a package. Commit message is the version message in Monticello. How to use it: Install from the Configuration (via the configuration browser). From scratch: On the command line, create a git repository on a directory $ git init In the Monticello Browser, do + Repository Choose the Repository type: gitfiletree:// Choose the directory in which you have created your git repository above. Use then as any other Monticello repository. From an existing git repo: Clone the target git repo... (we will use github as an example.) $ git clone https://github.com/ExampleUser/ExampleProject In the Monticello Browser, do + Repository Choose the Repository type: gitfiletree:// Choose any directory in the directory created by your cloning above. Use then as any other Monticello repository. '! ! !ConfigurationOfGitFileTree class methodsFor: 'catalog' stamp: 'ThierryGoubier 1/16/2014 14:58'! catalogKeywords ^ #(#FileTree #git #Monticello #OSProcess)! ! !ConfigurationOfGitFileTree class methodsFor: 'private' stamp: 'ThierryGoubier 1/16/2014 14:12'! ensureMetacello (self baseConfigurationClassIfAbsent: [ ]) ensureMetacello! ! !ConfigurationOfGitFileTree class methodsFor: 'private' stamp: 'ThierryGoubier 1/16/2014 14:12'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ #('http://smalltalkhub.com/mc/dkh/metacello/main' 'http://seaside.gemtalksystems.com/ss/metacello') do: [ :url | | repository version | repository := MCHttpRepository location: url user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.19.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository. ^ self ] ]. self error: 'Error bootstrapping Metacello: likely network error. Please try again' ]! ! !ConfigurationOfGitFileTree class methodsFor: 'metacello tool support' stamp: 'ThierryGoubier 1/16/2014 14:13'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^ true! ! !ConfigurationOfGitFileTree class methodsFor: 'loading' stamp: 'ThierryGoubier 1/16/2014 14:13'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^ (self project version: #stable) load! ! !ConfigurationOfGitFileTree class methodsFor: 'loading' stamp: 'ThierryGoubier 1/16/2014 14:13'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^ (self project version: #bleedingEdge) load! ! !ConfigurationOfGitFileTree class methodsFor: 'loading' stamp: 'ThierryGoubier 1/16/2014 14:13'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^ (self project version: #development) load! ! !ConfigurationOfGitFileTree class methodsFor: 'accessing' stamp: 'ThierryGoubier 1/16/2014 14:11'! project ^self new project! ! !ConfigurationOfGitFileTree class methodsFor: 'development support' stamp: 'ThierryGoubier 1/16/2014 14:11'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfGitFileTree methodsFor: 'baseline' stamp: 'ThierryGoubier 3/8/2014 23:03'! baseline01: spec spec for: #'pharo2.x' do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/ThierryGoubier/MonticelloFileTree-Git/main/'. spec project: 'OSProcess' with: [ spec repository: 'http://ss3.gemstone.com/ss/MetaRepoForPharo20'; className: 'ConfigurationOfOSProcess'; version: '4.5.8'; loads: #('Core with Output') ]. spec project: 'FileTree' with: [ spec repository: 'http://ss3.gemstone.com/ss/FileTree'; className: 'ConfigurationOfFileTree'; version: '1.0.6.1'; loads: #('default') ]. spec package: 'MonticelloFileTree-Git'. spec group: 'default' with: #('MonticelloFileTree-Git' 'FileTree' 'OSProcess') ]! ! !ConfigurationOfGitFileTree methodsFor: 'baseline' stamp: 'ThierryGoubier 3/8/2014 23:03'! baseline02: spec spec for: #'pharo3.x' do: [ spec blessing: #baseline. spec repository: 'http://smalltalkhub.com/mc/ThierryGoubier/Alt30/main/'. spec project: 'OSProcess' with: [ spec repository: 'http://smalltalkhub.com/mc/Pharo/MetaRepoForPharo30/main/'; className: 'ConfigurationOfOSProcess'; version: '4.5.8'; loads: #('Core with Output') ]. spec package: 'MonticelloFileTree-Git'. spec group: 'default' with: #('MonticelloFileTree-Git' 'OSProcess') ]! ! !ConfigurationOfGitFileTree methodsFor: 'accessing' stamp: 'ThierryGoubier 1/16/2014 14:14'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes" ^ #().! ! !ConfigurationOfGitFileTree methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 2/6/2014 16:13'! development: spec spec for: #'pharo2.x' version: '0.2'. spec for: #'pharo3.x' version: '0.4'! ! !ConfigurationOfGitFileTree methodsFor: 'accessing' stamp: 'ThierryGoubier 1/16/2014 14:15'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: [ ]) ensureMetacello. "Construct Metacello project" project := MetacelloMCProject new projectAttributes: self customProjectAttributes. constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self project: project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfGitFileTree methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 2/6/2014 16:13'! stable: spec spec for: #'pharo2.x' version: '0.1'. spec for: #'pharo3.x' version: '0.3'! ! !ConfigurationOfGitFileTree methodsFor: 'versions' stamp: 'ThierryGoubier 3/8/2014 23:02'! version01: spec spec for: #'pharo2.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'Git File Tree: Pharo 2 version of the GitFileTree support'. spec project: 'OSProcess' with: [ spec version: '4.5.8' ]. spec package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git-ThierryGoubier.67' ]! ! !ConfigurationOfGitFileTree methodsFor: 'versions' stamp: 'ThierryGoubier 2/6/2014 17:07'! version02: spec spec for: #'pharo2.x' do: [ spec blessing: #development; author: 'ThierryGoubier'; description: 'Git File Tree: Pharo 2 version of the GitFileTree support'. spec project: 'OSProcess' with: [ spec version: '4.5.8' ] ]! ! !ConfigurationOfGitFileTree methodsFor: 'versions' stamp: 'ThierryGoubier 3/8/2014 23:04'! version03: spec spec for: #'pharo3.x' do: [ spec blessing: #stable; author: 'ThierryGoubier'; description: 'Git File Tree: Pharo 3 version of the GitFileTree support'. spec project: 'OSProcess' with: [ spec version: '4.5.8' ]. spec package: 'MonticelloFileTree-Git' with: 'MonticelloFileTree-Git-ThierryGoubier.62' ]! ! !ConfigurationOfGitFileTree methodsFor: 'versions' stamp: 'ThierryGoubier 2/6/2014 17:07'! version04: spec spec for: #'pharo3.x' do: [ spec blessing: #development; author: 'ThierryGoubier'; description: 'Git File Tree: Pharo 3 version of the GitFileTree support'. spec project: 'OSProcess' with: [ spec version: '4.5.8' ] ]! ! "ConfigurationOfGitFileTree"! !ConfigurationOfOSProcess commentStamp: '' prior: 0! OSProcess provides access to operating system functions, including pipes and child process creation. It is implemented using pluggable primitives in a shared library for Unix or Linux, and a DLL for Windows. The Smalltalk code, including the classes which implement pluggable primitives for Unix or Win32 operating system functions, may be loaded into any Squeak image, but the primitives are only useful on Unix and Windows systems. Placeholder classes are provided for MacOS, OS/2 and RiscOS, but are not yet implemented. ConfigurationOfOSProcess project stableVersion load.! !ConfigurationOfOSProcess commentStamp: '' prior: 101787853! OSProcess provides access to operating system functions, including pipes and child process creation. It is implemented using pluggable primitives in a shared library for Unix or Linux, and a DLL for Windows. The Smalltalk code, including the classes which implement pluggable primitives for Unix or Win32 operating system functions, may be loaded into any Squeak image, but the primitives are only useful on Unix and Windows systems. Placeholder classes are provided for MacOS, OS/2 and RiscOS, but are not yet implemented. ConfigurationOfOSProcess project stableVersion load.! !ConfigurationOfOSProcess class methodsFor: 'private' stamp: 'MiguelCoba 1/12/2010 23:39'! bootstrapPackage: aString from: aPath | repository version | repository := MCHttpRepository location: aPath user: '' password: ''. repository versionReaderForFileNamed: aString , '.mcz' do: [:reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository]! ! !ConfigurationOfOSProcess class methodsFor: 'private' stamp: 'MiguelCoba 1/12/2010 23:39'! ensureMetacello "Bootstrap Gofer (if necessary), bootstrap ConfigurationOfMetacello (using old Gofer API), then load the latest version of Metacello itself." Smalltalk at: #MetacelloProject ifAbsent: [ Smalltalk at: #Gofer ifAbsent: [ "Current version of Gofer from which to bootstrap - as of 1.0-beta.15" self bootstrapPackage: 'Gofer-lr.83' from: 'http://seaside.gemstone.com/ss/metacello' ]. Smalltalk at: #Gofer ifPresent: [:goferClass | | gofer | gofer := goferClass new url: 'http://seaside.gemstone.com/ss/metacello'; yourself. [ gofer addPackage: 'ConfigurationOfMetacello' ] on: Warning do: [:ex | ex resume ]. gofer load ]. "load 'default' group of Metacello" (Smalltalk at: #ConfigurationOfMetacello) perform: #load ]! ! !ConfigurationOfOSProcess class methodsFor: 'metacello tool support' stamp: 'MiguelCoba 1/12/2010 23:39'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfOSProcess class methodsFor: 'metacello tool support' stamp: 'MiguelCoba 1/12/2010 23:39'! lastMetacelloVersionLoad "Answer the last version loaded and the list of packages loaded for that version." LastVersionLoad == nil ifTrue: [ LastVersionLoad := nil -> 'default' ]. ^LastVersionLoad! ! !ConfigurationOfOSProcess class methodsFor: 'loading' stamp: 'dtl 7/1/2010 21:18'! load "self load" | r | r := self project latestVersion load. (Smalltalk at: #ThisOSProcess) ifNotNilDo: [ :osp | osp startUp: true ] "initialize"! ! !ConfigurationOfOSProcess class methodsFor: 'metacello tool support' stamp: 'MiguelCoba 1/12/2010 23:39'! metacelloVersion: versionString loads: anArrayOrString "Stash the last version loaded and the list of packages loaded for that version. The list of packages will be used by the tools when doing 'Load Package Version'" LastVersionLoad := versionString -> anArrayOrString! ! !ConfigurationOfOSProcess class methodsFor: 'accessing' stamp: 'MiguelCoba 1/12/2010 23:39'! project ^self new project! ! !ConfigurationOfOSProcess methodsFor: 'baselines' stamp: 'MiguelCoba 2/19/2011 01:33'! baseline4312: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'Initial baseline for OSProcess'. spec repository: 'http://www.squeaksource.com/OSProcess' ]. spec for: #squeakCommon do: [ spec repository: 'http://www.squeaksource.com/OSProcess'; package: 'OSProcess-Base'; package: 'OSProcess-AIO' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-Mac' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-OS2' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-RiscOS' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-Unix' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-Win32' with: [ spec requires: 'OSProcess-Base' ]; package: 'OSProcess-Tests' with: [ spec requires: 'OSProcess-Base' ] ]. spec for: #common do: [ spec group: 'default' with: #('OSProcess' 'OSProcess-AIO' 'Tests'); group: 'OSProcess' with: #('OSProcess-Base' 'Platforms'); group: 'Platforms' with: 'OSProcess-Mac'; group: 'Platforms' with: 'OSProcess-OS2'; group: 'Platforms' with: 'OSProcess-RiscOS'; group: 'Platforms' with: 'OSProcess-Unix'; group: 'Platforms' with: 'OSProcess-Win32'; group: 'Tests' with: 'OSProcess-Tests' ].! ! !ConfigurationOfOSProcess methodsFor: 'baselines' stamp: 'MiguelCoba 1/13/2010 13:10'! baseline43: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'Initial baseline for OSProcess'. spec repository: 'http://www.squeaksource.com/OSProcess' ]. spec for: #squeakCommon do: [ spec repository: 'http://www.squeaksource.com/OSProcess'; package: 'OSProcess'; package: 'Tests-OSProcess' with: [ spec requires: 'OSProcess' ] ]. spec for: #common do: [ spec group: 'default' with: 'OSProcess'; group: 'Tests' with: 'Tests-OSProcess' ].! ! !ConfigurationOfOSProcess methodsFor: 'baselines' stamp: 'SeanDeNigris 2/12/2013 10:05'! baseline446: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Load the OSProcess-* packages instead of the OSProcess all-in-one package. David Lewis has said that these packages will be kept in sync with the al-in-one and this will give us greater flexibility in what to load. For example, we can now optionally load the tests. This seemed possible with the previous version, but actually the tests were always loaded as part of the all-in-one'. spec repository: 'http://www.squeaksource.com/OSProcess'. spec project: 'Pipeability' with: [ spec repository: 'http://www.squeaksource.com/MetacelloRepository'; className: 'ConfigurationOfCommandShell'; loads: #('Piping') ]. spec package: 'OSProcess-AIO'; package: 'OSProcess-Base' with: [ spec requires: #('OSProcess-AIO') ]; package: 'OSProcess-OS2' with: [ spec requires: #('OSProcess-Base') ]; package: 'OSProcess-Win32' with: [ spec requires: #('OSProcess-Base') ]; package: 'OSProcess-Unix' with: [ spec requires: #('OSProcess-Base') ]; package: 'OSProcess-Mac' with: [ spec requires: #('OSProcess-Base') ]; package: 'OSProcess-RiscOS' with: [ spec requires: #('OSProcess-Base') ]; package: 'OSProcess-Tests' with: [ spec requires: #('OSProcess-Base') ]. spec group: 'All OS' with: #('OSProcess-OS2' 'OSProcess-Win32' 'OSProcess-Unix' 'OSProcess-Mac' 'OSProcess-RiscOS'); group: 'Core' with: #('OSProcess-AIO' 'OSProcess-Base' 'All OS'); group: 'Core with Output' with: #('Core' 'Pipeability'); group: 'Tests' with: #('OSProcess-Tests' ). ]. ! ! !ConfigurationOfOSProcess methodsFor: 'baselines' stamp: 'MiguelCoba 2/19/2011 01:53'! baseline44: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://www.squeaksource.com/OSProcess'. spec package: 'OSProcess'; package: 'OSProcess-Tests' with: [ spec requires: #('OSProcess' ). ]. spec group: 'default' with: #('OSProcess' ); group: 'Tests' with: #('OSProcess-Tests' ). ]. ! ! !ConfigurationOfOSProcess methodsFor: 'private' stamp: 'SeanDeNigris 2/12/2013 10:24'! loadType self flag: 'OSProcess''s packages are highly interdependent (some circular), so we must load atomically for now. After these issues are resolved, this can be shanged to #linear'. ^ #atomic.! ! !ConfigurationOfOSProcess methodsFor: 'accessing' stamp: 'SeanDeNigris 7/6/2012 11:04'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: self loadType. project ]! ! !ConfigurationOfOSProcess methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 10/24/2013 17:38'! stable: spec spec for: #'common' version: '4.5.8'. spec for: #'pharo1.4.x' version: '4.4.6'.! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'MiguelCoba 1/14/2010 00:31'! version4311: spec spec for: #common do: [ spec blessing: #development. spec description: 'Release 4.3.11'. spec author: 'MiguelCoba'. spec timestamp: '01/14/2010 00:30' ]. spec for: #squeakCommon do: [ spec package: 'OSProcess' with: 'OSProcess-dtl.53'; package: 'Tests-OSProcess' with: 'Tests-OSProcess-dtl.20' ].! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'MiguelCoba 2/19/2011 01:32'! version4312: spec spec for: #common do: [ spec blessing: #development. spec description: 'Release 4.3.12'. spec author: 'dtl'. spec timestamp: '06/30/2010 19:55' ]. spec for: #squeakCommon do: [ spec package: 'OSProcess-Base' with: 'OSProcess-Base-dtl.4'; package: 'OSProcess-AIO' with: 'OSProcess-AIO-dtl.1'; package: 'OSProcess-Mac' with: 'OSProcess-Mac-dtl.1'; package: 'OSProcess-OS2' with: 'OSProcess-OS2-dtl.1'; package: 'OSProcess-RiscOS' with: 'OSProcess-RiscOS-dtl.1'; package: 'OSProcess-Unix' with: 'OSProcess-Unix-dtl.3'; package: 'OSProcess-Win32' with: 'OSProcess-Win32-dtl.2'; package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.1' ].! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'mt 6/9/2011 13:25:13.015'! version440: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Version 4.4.0'. spec author: 'MiguelCoba'. spec timestamp: '2/19/2011 01:59'. spec package: 'OSProcess' with: 'OSProcess-dtl.59'; package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.4'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'mt 6/9/2011 13:25:09.479'! version442: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Version 4.4.2'. spec author: 'MiguelCoba'. spec timestamp: '5/29/2011 12:34'. spec package: 'OSProcess' with: 'OSProcess-dtl.61'; package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.4'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'mt 9/28/2011 14:14:43.783'! version445: spec spec for: #'common' do: [ spec blessing: #release. spec description: 'Version 4.4.5'. spec author: 'Marcel Taeumel'. spec timestamp: '9/28/2011 14:00'. spec package: 'OSProcess' with: 'OSProcess-dtl.65'; package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.7'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'SeanDeNigris 2/12/2013 10:06'! version446: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Update to latest package versions'. spec author: 'SeanDeNigris'. spec timestamp: '7/5/2012 12:57'. spec project: 'Pipeability' with: [ spec version: '1.0' ]. spec package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.9'; package: 'OSProcess-Base' with: 'OSProcess-Base-dtl.20'; package: 'OSProcess-OS2' with: 'OSProcess-OS2-dtl.1'; package: 'OSProcess-Win32' with: 'OSProcess-Win32-dtl.7'; package: 'OSProcess-Unix' with: 'OSProcess-Unix-dtl.12'; package: 'OSProcess-Mac' with: 'OSProcess-Mac-dtl.1'; package: 'OSProcess-AIO' with: 'OSProcess-AIO-dtl.4'; package: 'OSProcess-RiscOS' with: 'OSProcess-RiscOS-dtl.1'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'ThierryGoubier 9/23/2013 10:36'! version457: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Update to latest package versions'. spec author: 'ThierryGoubier'. spec timestamp: '9/23/2013 10:36'. spec project: 'Pipeability' with: [ spec version: '4.6.7' ]. spec package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.11'; package: 'OSProcess-Base' with: 'OSProcess-Base-dtl.37'; package: 'OSProcess-OS2' with: 'OSProcess-OS2-dtl.2'; package: 'OSProcess-Win32' with: 'OSProcess-Win32-dtl.9'; package: 'OSProcess-Unix' with: 'OSProcess-Unix-dtl.17'; package: 'OSProcess-Mac' with: 'OSProcess-Mac-dtl.2'; package: 'OSProcess-AIO' with: 'OSProcess-AIO-dtl.8'; package: 'OSProcess-RiscOS' with: 'OSProcess-RiscOS-dtl.2'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'ThierryGoubier 10/24/2013 17:38'! version458: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Update to latest package versions'. spec author: 'ThierryGoubier'. spec timestamp: '9/23/2013 10:36'. spec project: 'Pipeability' with: [ spec version: '4.6.7' ]. spec package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.11'; package: 'OSProcess-Base' with: 'OSProcess-Base-dtl.39'; package: 'OSProcess-OS2' with: 'OSProcess-OS2-dtl.2'; package: 'OSProcess-Win32' with: 'OSProcess-Win32-dtl.9'; package: 'OSProcess-Unix' with: 'OSProcess-Unix-dtl.17'; package: 'OSProcess-Mac' with: 'OSProcess-Mac-dtl.2'; package: 'OSProcess-AIO' with: 'OSProcess-AIO-dtl.8'; package: 'OSProcess-RiscOS' with: 'OSProcess-RiscOS-dtl.2'. ]. ! ! !ConfigurationOfOSProcess methodsFor: 'versions' stamp: 'SeanDeNigris 2/12/2013 10:07'! version45: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'Update to latest package versions'. spec author: 'StephaneDucasse'. spec timestamp: '10/02/2013 12:57'. spec project: 'Pipeability' with: [ spec version: '1.1' ]. spec package: 'OSProcess-Tests' with: 'OSProcess-Tests-dtl.10'; package: 'OSProcess-Base' with: 'OSProcess-Base-dtl.27'; package: 'OSProcess-OS2' with: 'OSProcess-OS2-dtl.2'; package: 'OSProcess-Win32' with: 'OSProcess-Win32-dtl.9'; package: 'OSProcess-Unix' with: 'OSProcess-Unix-dtl.15'; package: 'OSProcess-Mac' with: 'OSProcess-Mac-dtl.2'; package: 'OSProcess-AIO' with: 'OSProcess-AIO-dtl.5'; package: 'OSProcess-RiscOS' with: 'OSProcess-RiscOS-dtl.2'. ]. ! ! "ConfigurationOfOSProcess"! !ConfigurationOfCommandShell commentStamp: '' prior: 0! ConfigurationOfCommandShell project stableVersion load! !ConfigurationOfCommandShell commentStamp: '' prior: 101803034! ConfigurationOfCommandShell project stableVersion load! !ConfigurationOfCommandShell class methodsFor: 'development support' stamp: 'SeanDeNigris 7/5/2012 15:51'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfCommandShell class methodsFor: 'private' stamp: 'SeanDeNigris 7/5/2012 15:51'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #MetacelloBaseConfiguration ifAbsent: aBlock ]. ! ! !ConfigurationOfCommandShell class methodsFor: 'private' stamp: 'SeanDeNigris 7/5/2012 15:51'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfCommandShell class methodsFor: 'private' stamp: 'SeanDeNigris 7/5/2012 15:51'! ensureMetacelloBaseConfiguration Smalltalk at: #MetacelloBaseConfiguration ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://seaside.gemstone.com/ss/metacello' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-DaleHenrichs.2.mcz' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfCommandShell class methodsFor: 'metacello tool support' stamp: 'SeanDeNigris 7/5/2012 15:51'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfCommandShell class methodsFor: 'loading' stamp: 'SeanDeNigris 7/5/2012 15:51'! load "Load the #stable version defined for this platform. The #stable version is the version that is recommended to be used on this platform." "self load" ^(self project version: #stable) load! ! !ConfigurationOfCommandShell class methodsFor: 'loading' stamp: 'SeanDeNigris 7/5/2012 15:51'! loadBleedingEdge "Load the latest versions of the mcz files defined for this project. It is not likely that the #bleedingEdge has been tested." "self loadBleedingEdge" ^(self project version: #bleedingEdge) load! ! !ConfigurationOfCommandShell class methodsFor: 'loading' stamp: 'SeanDeNigris 7/5/2012 15:51'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: #development) load! ! !ConfigurationOfCommandShell class methodsFor: 'accessing' stamp: 'SeanDeNigris 7/5/2012 15:51'! project ^self new project! ! !ConfigurationOfCommandShell class methodsFor: 'development support' stamp: 'SeanDeNigris 7/5/2012 15:51'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfCommandShell methodsFor: 'baselines' stamp: 'SeanDeNigris 2/12/2013 10:52'! baseline10: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec repository: 'http://www.squeaksource.com/CommandShell'. spec project: 'OSProcess' with: [ spec className: 'ConfigurationOfOSProcess'; loads: #('Core'); repository: 'http://www.squeaksource.com/MetacelloRepository' ]. spec package: 'CommandShell-Base' with: [ "Base actually requires the following packages, but the dependency is circular, so we'll include until it''s fixed" spec includes: #('CommandShell-Commands' 'CommandShell-Piping' 'CommandShell-UI') ]; package: 'CommandShell-Commands' with: [ spec requires: #('CommandShell-Base') ]; package: 'CommandShell-Morphic' with: [ spec requires: #('CommandShell-Base') ]; package: 'CommandShell-Piping' with: [ spec requires: #('CommandShell-Base' 'OSProcess') ]; package: 'CommandShell-UI' with: [ spec requires: #('CommandShell-Base' 'CommandShell-Morphic') ]; package: 'CommandShellPharo' with: [ spec requires: #('CommandShell-Base') ]; package: 'CommandShell-Tests' with: [ spec requires: #('CommandShell-Base' 'CommandShell-Piping' 'OSProcess') ]. spec group: 'Core' with: #('CommandShell-Base' 'CommandShell-Commands' 'CommandShell-Morphic' 'CommandShell-Piping' 'CommandShell-UI' 'CommandShellPharo' ); group: 'Piping' with: #('CommandShell-Piping'); group: 'Tests' with: #('CommandShell-Tests'). ]. spec for: #'squeak' do: [ spec package: 'CommandShell-MVC' with: [ "Unknown dependencies" ] ].! ! !ConfigurationOfCommandShell methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 9/23/2013 10:15'! development: spec spec for: #'common' version: '4.6.7'. ! ! !ConfigurationOfCommandShell methodsFor: 'accessing' stamp: 'SeanDeNigris 7/5/2012 15:51'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" (self class baseConfigurationClassIfAbsent: []) ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project loadType: #linear. "change to #atomic if desired" project ]! ! !ConfigurationOfCommandShell methodsFor: 'symbolic versions' stamp: 'ThierryGoubier 9/23/2013 10:14'! stable: spec spec for: #'common' version: '4.6.7'. spec for: #'pharo1.4.x' version: '1.0'.! ! !ConfigurationOfCommandShell methodsFor: 'versions' stamp: 'SeanDeNigris 2/12/2013 10:52'! version10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'SeanDeNigris'. spec timestamp: '7/5/2012 15:51'. spec project: 'OSProcess' with: [ spec version: '4.4.6' ]. spec package: 'CommandShell-Base' with: 'CommandShell-Base-dtl.23'; package: 'CommandShell-Commands' with: 'CommandShell-Commands-dtl.10'; package: 'CommandShell-Morphic' with: 'CommandShell-Morphic-dtl.1'; package: 'CommandShell-Piping' with: 'CommandShell-Piping-dtl.10'; package: 'CommandShell-Tests' with: 'CommandShell-Tests-dtl.9'; package: 'CommandShell-UI' with: 'CommandShell-UI-dtl.9' ]. spec for: #'pharo' do: [ spec package: 'CommandShellPharo' with: 'CommandShellPharo-dtl.2' ]. spec for: #'squeak' do: [ spec package: 'CommandShell-MVC' with: 'CommandShell-MVC-dtl.2' ]. ! ! !ConfigurationOfCommandShell methodsFor: 'versions' stamp: 'SeanDeNigris 2/12/2013 10:54'! version11: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: ''. spec author: 'StephaneDucasse'. spec timestamp: '10/02/2013 12:57'. spec project: 'OSProcess' with: [ spec version: '4.5' ]. spec package: 'CommandShell-Base' with: 'CommandShell-Base-dtl.31'; package: 'CommandShell-Commands' with: 'CommandShell-Commands-dtl.14'; package: 'CommandShell-Morphic' with: 'CommandShell-Morphic-dtl.2'; package: 'CommandShell-Piping' with: 'CommandShell-Piping-dtl.13'; package: 'CommandShell-Tests' with: 'CommandShell-Tests-dtl.11'; package: 'CommandShell-UI' with: 'CommandShell-UI-dtl.10' ]. spec for: #'pharo' do: [ spec package: 'CommandShellPharo' with: 'CommandShellPharo-dtl.2' ]. spec for: #'squeak' do: [ spec package: 'CommandShell-MVC' with: 'CommandShell-MVC-dtl.3' ].! ! !ConfigurationOfCommandShell methodsFor: 'versions' stamp: 'ThierryGoubier 9/11/2013 10:15'! version466: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: ''. spec author: 'ThierryGoubier'. spec timestamp: '09/11/2013 10:13'. spec project: 'OSProcess' with: [ spec version: '4.5.7' ]. spec package: 'CommandShell-Base' with: 'CommandShell-Base-dtl.34'; package: 'CommandShell-Commands' with: 'CommandShell-Commands-dtl.15'; package: 'CommandShell-Morphic' with: 'CommandShell-Morphic-dtl.2'; package: 'CommandShell-Piping' with: 'CommandShell-Piping-dtl.14'; package: 'CommandShell-Tests' with: 'CommandShell-Tests-dtl.11'; package: 'CommandShell-UI' with: 'CommandShell-UI-dtl.11' ]. spec for: #'pharo' do: [ spec package: 'CommandShellPharo' with: 'CommandShellPharo-dtl.2' ]. spec for: #'squeak' do: [ spec package: 'CommandShell-MVC' with: 'CommandShell-MVC-dtl.3' ].! ! !ConfigurationOfCommandShell methodsFor: 'versions' stamp: 'ThierryGoubier 10/24/2013 17:40'! version467: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: ''. spec author: 'ThierryGoubier'. spec timestamp: '9/23/2013 10:12'. spec project: 'OSProcess' with: [ spec version: '4.5.8' ]. spec package: 'CommandShell-Base' with: 'CommandShell-Base-dtl.36'; package: 'CommandShell-Commands' with: 'CommandShell-Commands-ThierryGoubier.16'; package: 'CommandShell-Morphic' with: 'CommandShell-Morphic-dtl.2'; package: 'CommandShell-Piping' with: 'CommandShell-Piping-dtl.14'; package: 'CommandShell-Tests' with: 'CommandShell-Tests-dtl.11'; package: 'CommandShell-UI' with: 'CommandShell-UI-ThierryGoubier.12' ]. spec for: #'pharo' do: [ spec package: 'CommandShellPharo' with: 'CommandShellPharo-dtl.2' ]. spec for: #'squeak' do: [ spec package: 'CommandShell-MVC' with: 'CommandShell-MVC-dtl.3' ].! ! "ConfigurationOfCommandShell"! !AttachableFileStream commentStamp: '' prior: 0! I am a stream on an input or output channel provided by the underlying operating system. I behave like an ordinary file stream, except that I can attach myself to an input or output stream which has already been opened by the underlying operating system.! !AsyncFileReadStream commentStamp: 'dtl 7/9/2003 21:04' prior: 0! AsyncFileReadStream implements event-driven read behavior on a file stream. Whenever data is available, a #changed event is generated. An AsyncFileReadStream expects to have a client object respond immediately to the change notification by reading the available data, otherwise a possibly endless stream of change notifications will be generated. AsyncFileReadStream requires aio support in the AioPlugin module.! !BufferedAsyncFileReadStream commentStamp: 'dtl 3/7/2006 06:55' prior: 0! BufferedAsyncFileReadStream adds output buffering behavior to an event driven file stream, permitting blocking reads without risk of blocking the Squeak VM. This is useful for OS pipes, for which Squeak may wish to read and write the pipe without concern for VM deadlocks. A BufferedAsyncFileReadStream may be set for either blocking or nonblocking reads. When in blocking mode, a Smalltalk Process that requests a read will be blocked until data is available, but the VM will not be blocked and other Smalltalk Processes can proceed normally. Whenever data becomes available, a dataAvailableSemaphore is signalled and a #changed event is generated.! !AioEventHandler commentStamp: 'dtl 11/25/2006 15:55' prior: 0! AioEventHandler responds to external IO events, such as data available on a file descriptor. When an external IO event is received, an instance of AioEventHandler sends #changed to itself to notify its dependents that the event has occurred.! !OSProcessAccessor commentStamp: 'dtl 7/7/2010 07:58' prior: 0! I am an abstract class whose subclasses provide access to an operating system process, such as the process in which the Squeak VM is currently running. My subclasses collaborate with instances of OSProcess subclasses. The single instance ThisOSProcessAccessor provides access to the OS process in which the virtual machine is running. On Unix, this instance sets a signal handler to respond to externally generated sigchld signals. This must be done after each image restart in order to call a primitive which informs the VM of the identity of the semaphore to signal. A similar mechanism is used for Windows to obtain exit status of external OS processes. ThisOSProcessor maintains a process that waits on child exit events and updates a dependent OSProcess of changes to external OS processes. When an image is restarted on a different kind of platform, a new instance is assigned to ThisOSProcessAccessor to provide access to the virtual machine OS process. ! !MacOSProcessAccessor commentStamp: '' prior: 0! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the Macintosh process model.! !OS2OSProcessAccessor commentStamp: '' prior: 0! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the OS2 process model.! !RiscOSProcessAccessor commentStamp: '' prior: 0! I provide access to the operating system process in which the Squeak VM is currently running. I am based on the RiscOS task model. There is only one instance of me, and instances of RiscOSProcess depend on me to provide access to the operating system process which they represent. I know how to create child processes. I use a semaphore to receive signals when child processes die, and I notify my dependents (instances ofRiscOSProcess) when these events occur. ! !UnixOSProcessAccessor commentStamp: '' prior: 0! I provide access to the operating system process in which the Squeak VM is currently running. I am based on the Unix process model. There is only one instance of me, and instances of UnixOSProcess depend on me to provide access to the operating system process which they represent. I know how to create child processes. I use a semaphore to receive signals when child processes die, and I notify my dependents (instances of UnixOSProcess) when these events occur. ! !WindowsOSProcessAccessor commentStamp: '' prior: 0! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the Win32 process model for Windows and Windows NT.! !PseudoAioEventHandler commentStamp: 'dtl 11/25/2006 10:42' prior: 0! PseudoAioEventHandler is a replacement for AioEventHandler for use when an AioPlugin is not present. It creates a polling loop by generating #changed: events periodically. With a real AioEventHandler, events are generated only when actual IO activity occurs, while the PseudoAioEventHandler produces regularly timed events regardless of whether any actual IO changes have happened.! !ExternalPipe commentStamp: 'dtl 3/10/2006 11:06' prior: 0! I represent a pipe provided by the underlying operating system, such as a Unix pipe. I have a reader stream and a writer stream which behave similarly to a read-only FileStream and a writeable FileStream. Subclasses implement buffering behavior for the reader end of a pipe.! !OSPipe commentStamp: 'dtl 3/8/2006 07:27' prior: 0! I represent a pipe provided by the underlying operating system, such as a Unix pipe. I have a reader stream and a writer stream which behave similarly to a read-only FileStream and a writeable FileStream. I use a single-character buffer to implement #peek without losing data from the external OS pipe.! !AioEventHandlerExample commentStamp: 'dtl 7/5/2003 18:38' prior: 0! Demonstrate asynchronous read handers for file streams, OS pipes, standard input, and sockets. See class category "examples". Some examples require OSProcess.! !OSFileLock commentStamp: 'dtl 2/23/2004 19:36' prior: 0! I describe the region representing the entire addressable space of an external file, including regions that have not yet been allocated for use by the file. On platforms that support file locking, an OSFileLock is used to describe a lock on the entire file. ! !OSFileRegionLock commentStamp: 'jf 2/22/2004 19:50' prior: 0! I describe an addressable region of contiguous bytes in an external file. On platforms that support file locking, an OSFileRegionLock is used to specify a portion of the file to be locked. ! !OSProcess commentStamp: '' prior: 0! I represent an operating system process, such as the process in which the Squeak VM is currently running. My subclasses implement system specific features for Unix, Windows, MacOS, or other operating systems. ! !ExternalOSProcess commentStamp: '' prior: 0! I represent an OSProcess other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process.! !ExternalMacOSProcess commentStamp: '' prior: 0! I represent an external MacOS process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton MacOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent MacOSProcess (a singleton) to check the status of all its ExternalMacOSProcess children, and #update: them accordingly.! !ExternalOS2Process commentStamp: '' prior: 0! I represent an external OS2 process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton OS2ProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent OS2Process (a singleton) to check the status of all its ExternalOS2Process children, and #update: them accordingly.! !ExternalRiscOSProcess commentStamp: '' prior: 0! I represent an external RiscOS task other than the process in which this Squeak is executing. I maintain information about the state of the external task during and after the lifetime of the task. In particular, I hold the exit status of the task after it completes execution. When the external task changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton RiscOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent RiscOSProcess (a singleton) to check the status of all its ExternalRiscOSProcess children, and #update: them accordingly. ! !ExternalUnixOSProcess commentStamp: '' prior: 0! I represent an external Unix process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton UnixProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent UnixProcess (a singleton) to check the status of all its ExternalUnixProcess children, and #update: them accordingly.! !ExternalWindowsOSProcess commentStamp: '' prior: 0! I represent an external Windows process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton WindowsOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent WindowsOSProcess (a singleton) to check the status of all its ExternalWindowsOSProcess children, and #update: them accordingly.! !ThisOSProcess commentStamp: '' prior: 0! I represent the operating system process in which the Squeak VM is currently running. My subclasses implement system specific features for Unix, Windows, MacOS, or other operating systems by collaborating with corresponding subclasses of OSProcessAccessor to provide primitive access to the external operating system. ! !MacProcess commentStamp: '' prior: 0! I represent a Macintosh operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of MacOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my MacOSProcessAccessor.! !OS2Process commentStamp: '' prior: 0! I represent an OS2 operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of OS2OSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my OS2OSProcessAccessor.! !RiscOSProcess commentStamp: '' prior: 0! I represent an Acorn RiscOS operating system task, such as the task in which the Squeak VM is currently running. I collaborate with a singleton instance of RiscOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of a RiscOSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my RiscOSProcessAccessor. ! !UnixProcess commentStamp: '' prior: 0! I represent the Unix operating system process in which this Squeak session is running. I collaborate with an instance of UnixOSProcessAccessor to provide access to the external operating system. My instance variables are updated when my process accessor changes, allowing them to be monitored with a Smalltalk inspector. ! !WindowsProcess commentStamp: 'dtl 9/25/2005 16:31' prior: 0! I represent a Windows operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of WindowsOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my WindowsOSProcessAccessor. My process ID and process handle (a Win32 HANDLE) are held by my pid and processHandle variables. The main thread for this process is held by my mainThread variable. Standard input, output, and error streams are available, and my be used when the console is open (WindowsProcess>>openConsole). They can also be reassigned to file streams (WindowsOSProcessAccessor>>setStdOut:). When external processes are created, they are added to my allMyChildren collection, and a thread is created to wait for any of them to exit. This thread is held by my childWatcherThread instance variable while the thread is active, and is also added to my threads collection. Whenever a child process exits, the childWatcherThread will signal a Semaphore (a Smalltalk Semaphore, not a Windows semaphore), then exit. A Squeak process in my processAccessor waits on this Semaphore, and sends an 'update: #childProcessStatus' message to me. In response to this, I update the status of my active child processes, one or more of which will have exited. If any of my child processes are still active, I set a new childWatcherThread to wait for them to exit. Note that some Windows applications will exit their main process after creating another application process. These applications will appear to Squeak as if they have exited immediately, even though the application is running.! !UnixProcessExitStatus commentStamp: 'dtl 8/23/2012 22:48' prior: 0! A UnixProcessExitStatus represents the exit status of a unix process. This is an integer bit field answered by the wait() system call that contains information about exit status of the process. The meaning of the bit field varies according to the cause of process exit. Following a normal process exit, the status may be decoded to provide a small positive integer value in the range 0 - 255, which is the value that is presented by a unix shell as the exit status of a program. If terminated by a signal, the corresponding value is the signal number of the signal that caused process exit. UnixExitStatus decodes the process exit status in a manner compatible with a typical GNU unix implementation. It is not guaranteed to be portable and may produce misleading results on other unix systems. ! !WindowsThread commentStamp: '' prior: 0! I represent a thread of execution within a Windows process. May threadID is a unique identifier for the thread, and my handle is a Windows HANDLE to the thread. My handle should be closed when the thread exits.! !AttachableFileStream commentStamp: '' prior: 101813310! I am a stream on an input or output channel provided by the underlying operating system. I behave like an ordinary file stream, except that I can attach myself to an input or output stream which has already been opened by the underlying operating system.! !AsyncFileReadStream commentStamp: 'dtl 7/9/2003 21:04' prior: 101813632! AsyncFileReadStream implements event-driven read behavior on a file stream. Whenever data is available, a #changed event is generated. An AsyncFileReadStream expects to have a client object respond immediately to the change notification by reading the available data, otherwise a possibly endless stream of change notifications will be generated. AsyncFileReadStream requires aio support in the AioPlugin module.! !AsyncFileReadStream class methodsFor: 'examples' stamp: 'dtl 7/9/2003 20:16'! stdIn "self stdIn" ^ super stdIn initialize ! ! !AsyncFileReadStream methodsFor: 'finalization' stamp: 'dtl 6/17/2006 08:08'! actAsExecutor super actAsExecutor. eventHandler := nil! ! !AsyncFileReadStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 20:53'! asAsyncFileReadStream ^ self ! ! !AsyncFileReadStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 19:40'! asAttachableFileStream "Answer a replacement for this object, with no asynchronous event handling. Do not close the ioHandle when this object is finalized." self keepOpen. ^ AttachableFileStream name: self name attachTo: self ioHandle writable: self isReadOnly not ! ! !AsyncFileReadStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 21:01'! asBufferedAsyncFileReadStream "Answer a replacement for this object, with buffered output." ^ BufferedAsyncFileReadStream name: self name attachTo: self ioHandle writable: self isReadOnly not ! ! !AsyncFileReadStream methodsFor: 'initialize-release' stamp: 'dtl 7/8/2003 21:48'! close self disableEventHandling. ^ super close! ! !AsyncFileReadStream methodsFor: 'read event handling' stamp: 'dtl 9/3/2010 16:50'! disableEventHandling eventHandler ifNotNil: [eventHandler removeDependent: self; close]. self eventHandler: nil! ! !AsyncFileReadStream methodsFor: 'read event handling' stamp: 'dtl 11/25/2006 10:56'! enableEventHandling self eventHandler: (AioEventHandler aioPluginPresent ifTrue: [AioEventHandler forFileStream: self exceptions: true readEvents: true writeEvents: false] ifFalse: [PseudoAioEventHandler new]). self eventHandler addDependent: self! ! !AsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/8/2003 19:26'! eventHandler "The aio event handler. Provides notification whenever external data is available." ^ eventHandler! ! !AsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/8/2003 19:26'! eventHandler: anAioEventHandler "The aio event handler. Provides notification whenever external data is available." eventHandler := anAioEventHandler! ! !AsyncFileReadStream methodsFor: 'finalization' stamp: 'dtl 9/3/2010 16:57'! finalize "Shut the the event handler before closing the file, otherwise aio functions may reference a closed file handle." eventHandler ifNotNil: [eventHandler finalize]. super finalize ! ! !AsyncFileReadStream methodsFor: 'read event handling' stamp: 'dtl 7/8/2003 19:29'! hasValidHandler ^ self eventHandler notNil and: [eventHandler hasValidHandler] ! ! !AsyncFileReadStream methodsFor: 'initialize-release' stamp: 'dtl 3/15/2006 07:45'! initialize super initialize. self readOnly. OSProcess accessor setNonBlocking: self ioHandle. self enableEventHandling ! ! !AsyncFileReadStream methodsFor: 'initialize-release' stamp: 'dtl 7/8/2003 21:48'! open ^ super open initialize ! ! !AsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 9/2/2006 09:58'! upToEndOfFile "Answer a subcollection from the current access position through the last element of the receiver. Use #atEndOfFile to determine end of file status with feof(), required for reliable end of file test on OS pipes. Close the file when end of file is detected." | b | b := super upToEndOfFile. self isReadOnly ifTrue: [self close]. ^ b! ! !AsyncFileReadStream methodsFor: 'updating' stamp: 'dtl 7/8/2003 21:22'! update: aParameter (aParameter == self eventHandler) ifTrue: [self changed] ! ! !BufferedAsyncFileReadStream commentStamp: 'dtl 3/7/2006 06:55' prior: 101814121! BufferedAsyncFileReadStream adds output buffering behavior to an event driven file stream, permitting blocking reads without risk of blocking the Squeak VM. This is useful for OS pipes, for which Squeak may wish to read and write the pipe without concern for VM deadlocks. A BufferedAsyncFileReadStream may be set for either blocking or nonblocking reads. When in blocking mode, a Smalltalk Process that requests a read will be blocked until data is available, but the VM will not be blocked and other Smalltalk Processes can proceed normally. Whenever data becomes available, a dataAvailableSemaphore is signalled and a #changed event is generated.! !BufferedAsyncFileReadStream class methodsFor: 'examples' stamp: 'dtl 7/9/2003 20:24'! stdIn "self stdIn" ^ super stdIn ! ! !BufferedAsyncFileReadStream methodsFor: 'finalization' stamp: 'dtl 6/17/2006 08:10'! actAsExecutor super actAsExecutor. nonBlockingMode := nil. readBuffer := nil. readSyncSemaphore := nil. dataAvailableSemaphore := nil ! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 10/1/2006 17:12'! appendAllToBuffer: chars "Append all chars to readBuffer, then signal dataAvailableSemaphore to inform any blocked reader that the read can proceed. Also generate a #changed event to inform any interested objects that new data has become available." | pos | self readSyncSemaphore critical: [(self readBuffer position > self maxReadBufferSize) ifTrue: ["Read buffer is getting too large. Replace it." self readBuffer: (ReadWriteStream on: readBuffer upToEnd)]. pos := readBuffer position. readBuffer setToEnd. readBuffer nextPutAll: chars. readBuffer position: pos]. self dataAvailableSemaphore signal. self changed! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 10/1/2006 17:12'! appendToBuffer: aCharacter "Append aCharacter to readBuffer, then signal dataAvailableSemaphore to inform any blocked reader that the read can proceed, and trigger a #dataReady event to inform any interested objects that new data has become available." | pos | self readSyncSemaphore critical: [pos := self readBuffer position. readBuffer setToEnd. readBuffer nextPut: aCharacter. readBuffer position: pos]. self dataAvailableSemaphore signal. self changed! ! !BufferedAsyncFileReadStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 20:54'! asAsyncFileReadStream "Answer a replacement for this object, with asynchronous event handling but no buffering." ^ AsyncFileReadStream name: self name attachTo: self ioHandle writable: self isReadOnly not ! ! !BufferedAsyncFileReadStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 20:55'! asBufferedAsyncFileReadStream ^ self! ! !BufferedAsyncFileReadStream methodsFor: 'testing' stamp: 'dtl 2/22/2007 08:00'! atEnd "Answer whether the receiver can access any more objects. Warning: If this instance represents the reader end of an OS pipe, it is possible for the #atEnd test to give a false negative. In particular, after closing the writer end of an empty OSPipe, the reader may not appear to be atEnd until some time has elapsed, or until an explicit read on the pipe causes the status to be updated. To illustrate the problem: (OSPipe new setBufferedReader; yourself) closeWriter; atEnd>>false (OSPipe new ) closeWriter; next; yourself; atEnd>>true (OSPipe new setBufferedReader; yourself) closeWriter; next; yourself; atEnd>>true" ^ self readSyncSemaphore critical: [self readBuffer atEnd and: [super atEnd]]! ! !BufferedAsyncFileReadStream methodsFor: 'testing' stamp: 'dtl 2/22/2007 08:01'! atEndOfFile "Answer whether the receiver is at its end based on the result of the last read operation. This uses feof() to test the underlying file stream status, and can be used as an alternative to #atEnd, which does not properly report end of file status for an OSPipe." ^ self readSyncSemaphore critical: [self readBuffer atEnd and: [fileID isNil or: [OSProcess accessor isAtEndOfFile: fileID]]]! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 2/22/2007 08:02'! basicNext "Answer the next byte from this file, or nil if at the end of the file. If the readBuffer is empty, force a basicNext in order to ensure that the end of file flag is updated (in stdio stream)." (self readSyncSemaphore critical: [self readBuffer atEnd]) ifTrue: [^ super basicNext] ifFalse: [[self isBlocking] ifTrue: [self waitForDataReady]. ^ self readSyncSemaphore critical: [readBuffer next]]! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/6/2003 10:15'! dataAvailableSemaphore "Signalled one or more times when data becomes available. Only one Process is permitted to wait on this Semaphore." ^ dataAvailableSemaphore ifNil: [dataAvailableSemaphore := Semaphore new] ! ! !BufferedAsyncFileReadStream methodsFor: 'testing' stamp: 'dtl 7/9/2003 20:59'! isBlocking "Answer true if set to blocking mode." ^ self nonBlockingMode not! ! !BufferedAsyncFileReadStream methodsFor: 'defaults' stamp: 'dtl 7/6/2003 10:15'! maxReadBufferSize "Replace readBuffer when position exceeds this." ^ 40000 ! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 12/7/2012 20:02'! moveAvailableDataFrom: sqFile | count bufferSize buffer | (readBuffer notNil and: [readBuffer size > self readBufferMemoryWarningThreshold]) ifTrue: [self notify: 'buffer size ', readBuffer size asString. ^(Delay forSeconds: 2) wait]. bufferSize := self readAheadChunkSize. buffer := String new: bufferSize. [count := self primRead: sqFile into: buffer startingAt: 1 count: bufferSize] on: Error "Could fail if closed" do: [count := 0]. (count notNil and: [count > 0]) ifTrue: [count == bufferSize ifTrue: [self appendAllToBuffer: buffer] ifFalse: [count > 0 ifTrue: [self appendAllToBuffer: (buffer copyFrom: 1 to: count)]]] ifFalse: [(self closed or: [OSProcess accessor isAtEndOfFile: self ioHandle]) ifTrue: [self disableEventHandling]] ! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 7/6/2003 20:30'! moveAvailableDataToBuffer ^ self moveAvailableDataFrom: (OSProcess accessor handleFromAccessor: self ioHandle). ! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 9/3/2010 17:01'! next ((self readSyncSemaphore critical: [self readBuffer atEnd]) and: [self isBlocking]) ifTrue: [self waitForDataReady]. ^ self readSyncSemaphore critical: [readBuffer next]! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 7/6/2003 10:15'! next: n into: aString startingAt: startIndex "Read n bytes into the given string. Return aString or a partial copy if less than n elements have been read." | count | count := self readInto: aString startingAt: startIndex count: n. count = n ifTrue: [^ aString] ifFalse: [^ aString copyFrom: 1 to: startIndex+count-1]! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/9/2003 20:57'! nonBlockingMode "True if nonblocking read behavior should be implemented" ^ nonBlockingMode ifNil: [nonBlockingMode := true] ! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/9/2003 20:58'! nonBlockingMode: trueOrFalse "True if nonblocking read behavior should be implemented" nonBlockingMode := trueOrFalse ! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 9/3/2010 17:01'! peek "Answer what would be returned if the message next were sent to the receiver. If the receiver is at the end, answer nil. " ((self readSyncSemaphore critical: [self readBuffer atEnd]) and: [self isBlocking]) ifTrue: [self waitForDataReady]. ^ self readSyncSemaphore critical: [readBuffer peek]! ! !BufferedAsyncFileReadStream methodsFor: 'defaults' stamp: 'dtl 7/6/2003 10:15'! readAheadChunkSize "The async read ahead process will read at most this many characters. Notes: On my system (dtl), a chunk size of 2000 leads to ExternalCommandShell overdriving the stdout stream when doing (for example) a long directory listing. I have added error handling to accommodate this, but I do know know how reliable it is, so I would prefer to avoid generating the condition. A chunk size of 200 is small enough that performance is noticably impacted in a CommandShell window. A chunk size of 1000 seems to produce good overall behavior." ^ 1000! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:22'! readBuffer "Read ahead buffer, filled asynchronously as data becomes available on the IO channel" ^ readBuffer ifNil: [readBuffer := ReadWriteStream on: String new] ! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/6/2003 10:15'! readBuffer: aStream readBuffer := aStream! ! !BufferedAsyncFileReadStream methodsFor: 'defaults' stamp: 'dtl 12/7/2012 19:54'! readBufferMemoryWarningThreshold "A read buffer larger that this may start causing problems. Issue a warning before the object memory becomes too large." ^self maxReadBufferSize * 1000 ! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 3/21/2007 21:56'! readInto: byteArray startingAt: startIndex count: count "Read into the given array as specified, and return the count actually transferred. " | s size | self isBlocking ifTrue: [self waitForDataReady: count. s := self readSyncSemaphore critical: [self readBuffer next: count]. size := count] ifFalse: [size := self readBuffer size - readBuffer position min: count. s := self readSyncSemaphore critical: [self readBuffer next: size]]. byteArray replaceFrom: startIndex to: startIndex + size - 1 with: s. ^ size! ! !BufferedAsyncFileReadStream methodsFor: 'accessing' stamp: 'dtl 7/6/2003 10:15'! readSyncSemaphore "A semaphore for synchronizing access to readBuffer" ^ readSyncSemaphore ifNil: [readSyncSemaphore := Semaphore forMutualExclusion]! ! !BufferedAsyncFileReadStream methodsFor: 'initialize-release' stamp: 'dtl 7/9/2003 20:54'! setBlocking "Set for blocking reads. Default is nonblocking mode." self nonBlockingMode: false ! ! !BufferedAsyncFileReadStream methodsFor: 'initialize-release' stamp: 'dtl 7/9/2003 20:55'! setNonBlocking "Set for nonblocking reads. This is the default mode." self nonBlockingMode: true ! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 3/19/2007 18:28'! upTo: delim ^ self readSyncSemaphore critical: [self readBuffer upTo: delim] ! ! !BufferedAsyncFileReadStream methodsFor: 'read, write, position' stamp: 'dtl 12/21/2007 13:14'! upToEndOfFile "Answer a subcollection from the current access position through the last element of the receiver. Use #atEndOfFile to determine end of file status with feof(), required for reliable end of file test on OS pipes. Close the file when end of file is detected." | newStream buffer | buffer := buffer1 species new: 1000. newStream := WriteStream on: (buffer1 species new: 100). [self atEndOfFile] whileFalse: [self moveAvailableDataToBuffer. newStream nextPutAll: (self nextInto: buffer)]. self isReadOnly ifTrue: [self close]. ^ newStream contents ! ! !BufferedAsyncFileReadStream methodsFor: 'updating' stamp: 'dtl 7/8/2003 22:06'! update: aParameter "A #changed event is generated as a side effect of this method" (aParameter == self eventHandler) ifTrue: [self moveAvailableDataToBuffer] ! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 7/6/2003 10:15'! waitForBufferAvailable "Block if the readBuffer has grown too large. No-op for now, but add this later if large pipes prove to be a problem."! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 7/6/2003 10:15'! waitForDataReady "Block until at least one character is available in the readBuffer. This is not thread safe, and only one Process is permitted to send this message." self dataAvailableSemaphore wait ! ! !BufferedAsyncFileReadStream methodsFor: 'read ahead buffer' stamp: 'dtl 2/22/2007 08:09'! waitForDataReady: count "Block until at least count characters are available in the readBuffer" [self readSyncSemaphore critical: [self readBuffer size - readBuffer position < count]] whileTrue: [self waitForDataReady]! ! !AttachableFileStream class methodsFor: 'file creation' stamp: 'dtl 6/12/1999 15:53'! fileNamed: fileName self shouldNotImplement ! ! !AttachableFileStream class methodsFor: 'initialize-release' stamp: 'dtl 10/19/2001 21:53'! initialize "AttachableFileStream initialize" UseIOHandle := (Smalltalk hasClassNamed: #IOHandle) ! ! !AttachableFileStream class methodsFor: 'file creation' stamp: 'dtl 6/12/1999 15:53'! isAFileNamed: fileName self shouldNotImplement ! ! !AttachableFileStream class methodsFor: 'instance creation' stamp: 'dtl 3/15/2006 19:50'! name: aSymbolOrString attachTo: anIOHandle writable: readWriteFlag "Create a new instance attached to anIOHandle, where anIOHandle represents an open IO channel. For write streams, this represents two Smalltalk streams which write to the same OS file or output stream, presumably with interleaved output. The purpose of this method is to permit a FileStream to be attached to an existing IOHandle, such as the IOHandle for standard input, standard output, and standard error." ^ (super basicNew name: aSymbolOrString attachTo: anIOHandle writable: readWriteFlag) initialize! ! !AttachableFileStream class methodsFor: 'file creation' stamp: 'dtl 6/12/1999 15:54'! newFileNamed: fileName self shouldNotImplement ! ! !AttachableFileStream class methodsFor: 'file creation' stamp: 'dtl 6/12/1999 15:55'! oldFileNamed: fileName self shouldNotImplement ! ! !AttachableFileStream class methodsFor: 'file creation' stamp: 'dtl 6/12/1999 15:56'! readOnlyFileNamed: fileName self shouldNotImplement ! ! !AttachableFileStream class methodsFor: 'registry' stamp: 'dtl 8/25/2006 18:15'! register: anObject "An attachable file stream is generally either a second reference to an existing file stream, or a reference to a transient object such as a pipe endpoint. There is no need to register it for finalization." ^ anObject! ! !AttachableFileStream class methodsFor: 'examples' stamp: 'dtl 3/7/2006 06:42'! stdIn "self stdIn" ^ self name: 'stdIn' attachTo: OSProcess thisOSProcess stdIn ioHandle writable: false ! ! !AttachableFileStream class methodsFor: 'registry' stamp: 'dtl 8/25/2006 18:15'! unregister: anObject "An attachable file stream is generally either a second reference to an existing file stream, or a reference to a transient object such as a pipe endpoint. There is no need to register it for finalization." ^ anObject! ! !AttachableFileStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 21:01'! asAsyncFileReadStream "Answer a replacement for this object, with asynchronous event handling. Do not close the ioHandle when this object is finalized." self keepOpen. ^ AsyncFileReadStream name: self name attachTo: self ioHandle writable: self isReadOnly not ! ! !AttachableFileStream methodsFor: 'converting' stamp: 'dtl 9/16/2002 17:59'! asAttachableFileStream ^ self ! ! !AttachableFileStream methodsFor: 'converting' stamp: 'dtl 7/8/2003 21:01'! asBufferedAsyncFileReadStream "Answer a replacement for this object, with asynchronous event handling and buffered output. Do not close the ioHandle when this object is finalized." self keepOpen. ^ BufferedAsyncFileReadStream name: self name attachTo: self ioHandle writable: self isReadOnly not ! ! !AttachableFileStream methodsFor: 'finalization' stamp: 'dtl 9/17/2002 08:08'! autoClose "Private. Answer true if the file should be automatically closed when this object is finalized." ^ autoClose ifNil: [autoClose := true]! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 9/3/2010 17:00'! close "Close this file." | h | (h := self ioHandle) ifNotNil: [UseIOHandle ifTrue: [h close. self ioHandle: nil] ifFalse: [self primCloseNoError: h. self unregister. fileID := nil]] ! ! !AttachableFileStream methodsFor: 'initialize-release' stamp: 'dtl 4/14/2006 09:34'! disableEventHandling "Subclasses may disable event handling"! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 6/12/1999 16:00'! ensureOpen self shouldNotImplement ! ! !AttachableFileStream methodsFor: 'finalization' stamp: 'dtl 7/6/2006 22:17'! finalize self autoClose ifTrue: [[self primCloseNoError: fileID] on: Error do: []]! ! !AttachableFileStream methodsFor: 'read, write, position' stamp: 'dtl 11/8/2000 21:55'! flush "Flush the external OS stream (the one in the C library)." OSProcess accessor flushExternalStream: self ioHandle! ! !AttachableFileStream methodsFor: 'private - IOHandle' stamp: 'dtl 1/29/2000 15:18'! ioHandle UseIOHandle ifTrue: [^ super ioHandle] ifFalse: [^ fileID]! ! !AttachableFileStream methodsFor: 'testing' stamp: 'dtl 3/26/2006 15:52'! isPipe ^ false ! ! !AttachableFileStream methodsFor: 'finalization' stamp: 'dtl 9/17/2002 08:05'! keepOpen "Do not allow the file to be closed when this object is finalized." autoClose := false ! ! !AttachableFileStream methodsFor: 'attaching' stamp: 'dtl 11/30/2002 09:22'! name: aSymbolOrString attachTo: anIOHandle writable: readWriteFlag "Attach to an existing file handle, assumed to have been previously opened by the underlying operating system." name := aSymbolOrString. UseIOHandle ifTrue: [self ioHandle: anIOHandle] ifFalse: [fileID := anIOHandle]. readWriteFlag ifTrue: [self readWrite] ifFalse: [self readOnly]. self ascii. UseIOHandle ifFalse: [self register] ! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 6/12/1999 16:00'! open self shouldNotImplement ! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 6/12/1999 16:01'! open: fileName forWrite: writeMode self shouldNotImplement ! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 6/12/1999 16:02'! openReadOnly self shouldNotImplement ! ! !AttachableFileStream methodsFor: 'read, write, position' stamp: 'dtl 5/17/2009 14:11'! position "Return the receiver's current file position. If the stream is not positionable, as in the case of a Unix pipe stream, answer 0." ^ [super position] on: Error do: [0] ! ! !AttachableFileStream methodsFor: 'open/close' stamp: 'dtl 6/12/1999 16:02'! reopen self shouldNotImplement ! ! !AttachableFileStream methodsFor: 'nonblocking' stamp: 'dtl 2/17/2007 18:10'! setBlocking OSProcess accessor setBlocking: self ioHandle! ! !AttachableFileStream methodsFor: 'nonblocking' stamp: 'dtl 2/17/2007 18:10'! setNonBlocking OSProcess accessor setNonBlocking: self ioHandle! ! !AttachableFileStream methodsFor: 'read, write, position' stamp: 'dtl 9/2/2006 17:17'! upToEnd "Answer a subcollection from the current access position through the last element of the receiver. This is slower than the method in StandardFileStream, but it works with pipes which answer false to #atEnd when no further input is currently available, but the pipe is not yet closed." | newStream buffer nextBytes | buffer := buffer1 species new: 1000. newStream := WriteStream on: (buffer1 species new: 100). [self atEnd or: [(nextBytes := self nextInto: buffer) isEmpty]] whileFalse: [newStream nextPutAll: nextBytes]. ^ newStream contents ! ! !AttachableFileStream methodsFor: 'read, write, position' stamp: 'dtl 6/4/2006 16:02'! upToEndOfFile "Answer a subcollection from the current access position through the last element of the receiver. Use #atEndOfFile to determine end of file status with feof(), required for reliable end of file test on OS pipes." | newStream buffer | buffer := buffer1 species new: 1000. newStream := WriteStream on: (buffer1 species new: 100). [self atEndOfFile] whileFalse: [newStream nextPutAll: (self nextInto: buffer)]. ^ newStream contents! ! !StandardFileStream methodsFor: '*OSProcess-Base' stamp: 'dtl 6/5/2006 06:59'! atEndOfFile "Answer whether the receiver is at its end based on the result of the last read operation. This uses feof() to test the underlying file stream status, and can be used as an alternative to #atEnd, which does not properly report end of file status for an OSPipe." ^ fileID isNil or: [OSProcess accessor isAtEndOfFile: fileID] ! ! !StandardFileStream methodsFor: '*OSProcess-Base' stamp: 'dtl 1/13/2007 16:44'! fileID "The contents of fileID can and will change after calling this method. The sender should copy the result rather than depending on the result to be immutable." ^ fileID! ! !StandardFileStream methodsFor: '*OSProcess-Base' stamp: 'dtl 6/5/2006 07:18'! isPipe ^ false ! ! !AioEventHandler commentStamp: 'dtl 11/25/2006 15:55' prior: 101814838! AioEventHandler responds to external IO events, such as data available on a file descriptor. When an external IO event is received, an instance of AioEventHandler sends #changed to itself to notify its dependents that the event has occurred.! !AioEventHandler class methodsFor: 'testing' stamp: 'dtl 2/11/2013 19:17'! aioPluginPresent "Answer true if an AIO plugin is available. The value of AioPluginPresent is cleared at startup time, and is reestablished once for each Squeak session. See initializeAioPluginPresent to initialize after an image startup if warning dialog is not desired." "AioEventHandler aioPluginPresent" ^ AioPluginPresent ifNil: [AioPluginPresent := self basicNew primAioModuleVersionString notNil. AioPluginPresent ifFalse: [self notify: 'AioPlugin not present, AioEventHandler will use polling input']. ^ AioPluginPresent]! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/5/2003 09:16'! for: aSocketOrFileStream "self for: SourceFiles first" "self for: Socket new" "self for: OSProcess thisOSProcess stdIn" ^ self new for: aSocketOrFileStream! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/5/2003 11:14'! for: aSocketOrFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Flag parameters are true or false, indicating types of events to be handled." ^ self new for: aSocketOrFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/4/2003 18:47'! forFileStream: aFileStream "self forFileStream: SourceFiles first" ^ self new forFileStream: aFileStream ! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/5/2003 11:14'! forFileStream: aFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Flag parameters are true or false, indicating types of events to be handled." "self forFileStream: SourceFiles first" ^ self new forFileStream: aFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag ! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/4/2003 19:01'! forSocket: aSocket "self forSocket: Socket new" ^ self new forSocket: aSocket ! ! !AioEventHandler class methodsFor: 'instance creation' stamp: 'dtl 7/5/2003 11:14'! forSocket: aSocket exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Flag parameters are true or false, indicating types of events to be handled." "self forSocket: Socket new" ^ self new forSocket: aSocket exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag ! ! !AioEventHandler class methodsFor: 'testing' stamp: 'dtl 10/3/2012 20:24'! initializeAioPluginPresent "Initialize the AioPluginPresent flag silently without invoking a warning if the plugin is not present, and answer the value of the flag. Send this to prevent a warning dialog from being presented after image startup, as may be preferred if the image is to be run headless." "AioEventHandler initializeAioPluginPresent" ^ AioPluginPresent ifNil: [AioPluginPresent := self basicNew primAioModuleVersionString notNil]! ! !AioEventHandler class methodsFor: 'system startup' stamp: 'dtl 11/25/2006 10:04'! startUp: resuming "Clear the value of AioPluginPresent. The value will be set once when #aioPluginPresent is first sent, and will remain set to that value for the duration of this Squeak session. This method is called by ThisOSProcess>>startUp. AioEventHandler does not need to be registered in the system startup list." resuming ifTrue: [AioPluginPresent := nil] ! ! !AioEventHandler methodsFor: 'aio event forwarding' stamp: 'dtl 7/4/2003 19:10'! aioDisable: ioDescriptor "Definitively disable asynchronous event notification for a descriptor. The ioDescriptor parameter is an object representing a low level OS file or socket descriptor." ^ self primAioDisable: ioDescriptor ! ! !AioEventHandler methodsFor: 'aio event forwarding' stamp: 'dtl 9/1/2003 16:58'! aioEnable: ioDescriptor forSemaphore: semaphoreIndex externalObject: trueOrFalse "Enable asynchronous notification for a descriptor. Send this message one time prior to beginning event handling for ioDescriptor. The ioDescriptor parameter is an object representing a low level OS file or socket descriptor. The semaphoreIndex is the index of a Semaphore to be notified, and the third parameter is a flag indicating that ioDescriptor represents an external object which should not be closed on termination of aio handling." ^ (self primAioEnable: ioDescriptor forSemaphore: semaphoreIndex externalObject: trueOrFalse) ifNil: [self notify: 'aio event forwarding not supported'] ! ! !AioEventHandler methodsFor: 'aio event forwarding' stamp: 'dtl 7/4/2003 18:52'! aioHandle: ioDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag "Enable asynchronous notification for a descriptor. Send this message one time to enable a single event notification. Send it again after each event has been received and handled (in other words, the process which waits on the event semaphore is responsible for re-enabling the handler by calling this method each time an event is handled). The ioDescriptor parameter is an object representing a low level OS file or socket descriptor. The remaining three parameters are Boolean flags representing the types of events for which notification is being requested: handle exceptions, handle for read, and handle for write. It is common to watch for read events and exception events, or to watch for write events and exception events." ^ self primAioHandle: ioDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag ! ! !AioEventHandler methodsFor: 'aio event forwarding' stamp: 'dtl 7/4/2003 19:10'! aioSuspend: ioDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag "Temporarily suspend asynchronous event notification for a descriptor. The ioDescriptor parameter is an object representing a low level OS file or socket descriptor. The remaining three parameters are Boolean flags representing the types of events for which notification is being requested: handle exceptions, handle for read, and handle for write." ^ self primAioSuspend: ioDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag ! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 8/20/2006 18:43'! close "When the FileStream or Socket handled by this aio handler is closed, it should send #close to this handler." | p | self breakDependents. Smalltalk unregisterExternalObject: semaphore. self aioDisable: self descriptor. semaphore := nil. semaIndex := nil. p := handlerProc. handlerProc := nil. p ifNotNil: [p terminate] "p may be the active process, do this last" ! ! !AioEventHandler methodsFor: 'handler process' stamp: 'dtl 7/5/2003 10:50'! defaultHandlerProcess "Generate a #changed notification whenever an external aio event occurs" ^ self handleReadAndExceptionsEvents! ! !AioEventHandler methodsFor: 'accessing' stamp: 'dtl 3/30/2003 19:05'! descriptor ^ descriptor! ! !AioEventHandler methodsFor: 'accessing' stamp: 'dtl 3/30/2003 19:05'! descriptor: aLowLevelIODescriptor descriptor := aLowLevelIODescriptor! ! !AioEventHandler methodsFor: 'finalization' stamp: 'dtl 9/4/2003 06:54'! finalize "Note: An aio handler will not be garbage collected until the semaphore is unregistered. When the FileStream or Socket handled by this aio handler is closed, it should send #close to this handler." self close ! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/5/2003 09:15'! for: aSocketOrFileStream "Answer an event handler for any kind of IO stream that can be associated with an OS handle for aio events. Currently, subclasses of FileStream and Socket can have aio event handlers." (aSocketOrFileStream isKindOf: Socket) ifTrue: [^ self forSocket: aSocketOrFileStream]. (aSocketOrFileStream isKindOf: FileStream) ifTrue: [^ self forFileStream: aSocketOrFileStream]. self error: 'expected a FileStream or Socket subclass'! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/5/2003 11:03'! for: aSocketOrFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Answer an event handler for any kind of IO stream that can be associated with an OS handle for aio events. Currently, subclasses of FileStream and Socket can have aio event handlers." (aSocketOrFileStream isKindOf: Socket) ifTrue: [^ self forSocket: aSocketOrFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag]. (aSocketOrFileStream isKindOf: FileStream) ifTrue: [^ self forFileStream: aSocketOrFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag]. self error: 'expected a FileStream or Socket subclass'! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/9/2005 14:00'! forFileStream: aFileStream self descriptor: (self handleForFile: aFileStream). self setDefaultEventMask. ! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/5/2003 11:01'! forFileStream: aFileStream exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag self descriptor: (self handleForFile: aFileStream). self initializeForExceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag ! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/9/2005 14:00'! forSocket: aSocket "Any existing event handling for aSocket will be disabled. Note that this will make the socket useless for any applications that expect the prior event handling behavior." self descriptor: (self handleForSocket: aSocket). self aioDisable: self descriptor. self setDefaultEventMask. ! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/5/2003 12:46'! forSocket: aSocket exceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Any existing event handling for aSocket will be disabled. Note that this will make the socket useless for any applications that expect the prior event handling behavior." self descriptor: (self handleForSocket: aSocket). self aioDisable: self descriptor. self initializeForExceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag ! ! !AioEventHandler methodsFor: 'handler process' stamp: 'dtl 11/12/2011 21:25'! handleExceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag "Generate a #changed notification whenever the requested type of external aio event occurs." | p sema handler | sema := Semaphore new. handler := [[self hasValidHandler] whileTrue: [self aioHandle: self descriptor exceptionEvents: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag. sema signal. "event handler is ready" self semaphore wait. self changed]]. p := handler forkAt: Processor userBackgroundPriority. sema wait. "until process has been started and events are being handled" ^p! ! !AioEventHandler methodsFor: 'private' stamp: 'dtl 9/4/2003 06:40'! handleForFile: aFileStream "self new handleForFile: SourceFiles first" | ioHandle | ioHandle := self useIOHandle ifTrue: [aFileStream ioHandle] ifFalse: [aFileStream fileID]. ^ self primOSFileHandle: ioHandle ! ! !AioEventHandler methodsFor: 'private' stamp: 'dtl 7/4/2003 15:16'! handleForSocket: aSocket "self new handleForSocket: Socket newTCP" | ioHandle | ioHandle := self useIOHandle ifTrue: [aSocket ioHandle] ifFalse: [aSocket socketHandle]. ^ self primOSSocketHandle: ioHandle ! ! !AioEventHandler methodsFor: 'handler process' stamp: 'dtl 7/5/2003 10:49'! handleReadAndExceptionsEvents "Generate a #changed notification whenever data is available for reading or an exception occurs on the external IO channel." ^ self handleExceptions: true readEvents: true writeEvents: false ! ! !AioEventHandler methodsFor: 'handler process' stamp: 'dtl 7/5/2003 10:49'! handleReadEvents "Generate a #changed notification whenever data is available for reading" ^ self handleExceptions: false readEvents: true writeEvents: false ! ! !AioEventHandler methodsFor: 'accessing' stamp: 'dtl 3/30/2003 19:04'! handlerProc ^ handlerProc! ! !AioEventHandler methodsFor: 'handler process' stamp: 'dtl 4/23/2012 06:45'! hasValidHandler "True if the event handler is running, and if it refers to the correct external object semaphore. For protection following an image restart." ^ semaIndex notNil and: [Smalltalk externalObjects size >= semaIndex and: [(Smalltalk externalObjects at: semaIndex) == semaphore]]! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 9/3/2010 16:48'! initializeForExceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag semaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: semaphore. ([self aioEnable: self descriptor forSemaphore: self semaIndex externalObject: true] on: Warning do: [:e | self close. "unregister the semaphore" self notify: e messageText. nil]) ifNotNil: [handlerProc := self handleExceptions: exceptionEventFlag readEvents: readEventFlag writeEvents: writeEventFlag] ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:53'! primAioDisable: aDescriptor "Definitively disable asynchronous event notification for a descriptor. The descriptor parameter is an object representing a low level OS file or socket descriptor." ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:53'! primAioEnable: aDescriptor forSemaphore: semaphoreIndex externalObject: trueOrFalse "Enable asynchronous notification for a descriptor. The descriptor parameter is an object representing a low level OS file or socket descriptor. The semaphoreIndex is the index of a Semaphore to be notified, and the third parameter is a flag indicating that descriptor represents an external object which should not be closed on termination of aio handling." ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:53'! primAioHandle: aDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag "Enable asynchronous notification for a descriptor. The descriptor parameter is an object representing a low level OS file or socket descriptor. The second parameter is the index of a Semaphore to be notified, the remaining three parameters are Boolean flags representing the types of events for which notification is being requested: handle exceptions, handle for read, and handle for write. It is common to watch for read events and exception events, or to watch for write events and exception events." ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:26'! primAioModuleName "Module name of the installed plugin, if any." "self new primAioModuleName" ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:28'! primAioModuleVersionString "Module name of the installed plugin, if any." "self new primAioModuleVersionString" ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:54'! primAioSuspend: aDescriptor exceptionEvents: exceptionFlag readEvents: readFlag writeEvents: writeFlag "Temporarily suspend asynchronous event notification for a descriptor. The descriptor parameter is an object representing a low level OS file or socket descriptor. The remaining three parameters are Boolean flags representing the types of events for which notification is being requested: handle exceptions, handle for read, and handle for write." ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:54'! primOSFileHandle: sqFile "Answer the low level file descriptor for a file IO handle." ^ nil ! ! !AioEventHandler methodsFor: 'primitive access' stamp: 'dtl 9/1/2003 17:54'! primOSSocketHandle: sqFile "Answer the low level socket descriptor for a socket IO handle." ^ nil ! ! !AioEventHandler methodsFor: 'accessing' stamp: 'dtl 3/30/2003 19:04'! semaIndex ^ semaIndex! ! !AioEventHandler methodsFor: 'accessing' stamp: 'dtl 3/30/2003 19:04'! semaphore ^ semaphore! ! !AioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 7/9/2005 14:00'! setDefaultEventMask "Default initialization for read events and exception events" ^ self initializeForExceptions: true readEvents: true writeEvents: false ! ! !AioEventHandler methodsFor: 'private' stamp: 'dtl 3/30/2003 19:26'! useIOHandle ^ Smalltalk hasClassNamed: #IOHandle! ! !OSProcessAccessor commentStamp: 'dtl 7/7/2010 07:58' prior: 101815145! I am an abstract class whose subclasses provide access to an operating system process, such as the process in which the Squeak VM is currently running. My subclasses collaborate with instances of OSProcess subclasses. The single instance ThisOSProcessAccessor provides access to the OS process in which the virtual machine is running. On Unix, this instance sets a signal handler to respond to externally generated sigchld signals. This must be done after each image restart in order to call a primitive which informs the VM of the identity of the semaphore to signal. A similar mechanism is used for Windows to obtain exit status of external OS processes. ThisOSProcessor maintains a process that waits on child exit events and updates a dependent OSProcess of changes to external OS processes. When an image is restarted on a different kind of platform, a new instance is assigned to ThisOSProcessAccessor to provide access to the virtual machine OS process. ! !MacOSProcessAccessor commentStamp: '' prior: 101816172! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the Macintosh process model.! !MacOSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:44'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ OSProcess isNonUnixMac ! ! !MacOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/23/2002 05:57'! primGetSession "Answer the unique identifier for this session of Smalltalk running in this OS Process." ^ nil ! ! !OS2OSProcessAccessor commentStamp: '' prior: 101816391! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the OS2 process model.! !OS2OSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:47'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ OSProcess isOS2 ! ! !OS2OSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/23/2002 05:56'! primGetSession "Answer the unique identifier for this session of Smalltalk running in this OS Process." ^ nil ! ! !OSProcessAccessor class methodsFor: 'concrete subclasses' stamp: 'dtl 3/5/2005 12:04'! concreteClass "OSProcessAccessor concreteClass" ^ self subclasses detect: [:c | c isResponsibleForThisPlatform] ifNone: [self notify: self printString, ': No concrete class implementation available for system type ', OSProcess platformName printString. nil] ! ! !OSProcessAccessor class methodsFor: 'initialize-release' stamp: 'dtl 3/5/2005 13:24'! emulateWin32FileLocking: trueOrFalse "This is a preference that controls whether file locking will attempt to emulation Win32 behavior, in which a lock request will fail if the requested region overlaps a region for which there is an existing lock. This behavior is valid only for locks managed within a single Squeak image, and will not produce the expected results for a Squeak image cooperating with another Squeak image, or with some other external program. Use of the Win32 emulation may result in performance penalties for an application that performs a large number of lock requests, such as a database." "self emulateWin32FileLocking: true" "self emulateWin32FileLocking: false" EmulateWin32FileLocking := trueOrFalse ! ! !OSProcessAccessor class methodsFor: 'instance creation' stamp: 'dtl 9/3/2010 13:24'! forThisOSProcess "Answer a single instance corresponding to the OS process in which this Smalltalk image is executing." "OSProcessAccessor forThisOSProcess" ThisOSProcessAccessor ifNotNil: [ThisOSProcessAccessor isResponsibleForThisPlatform ifTrue: ["Common case, platform has not changed" ^ThisOSProcessAccessor ] ifFalse: ["We are running on a different platform, so start a new accessor" ThisOSProcessAccessor changed: #invalidProcessAccessor. ThisOSProcessAccessor release; finalize]]. ^ ThisOSProcessAccessor := self concreteClass basicNew initialize ! ! !OSProcessAccessor class methodsFor: 'initialize-release' stamp: 'dtl 12/27/2005 10:59'! initialize "OSProcessAccessor initialize" UseIOHandle := (Smalltalk hasClassNamed: #IOHandle). ThisOSProcessAccessor := nil. self emulateWin32FileLocking: false. self allSubInstances do: [:e | e finalize; release] ! ! !OSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/24/2003 09:17'! isResponsibleForThisPlatform "Answer true if an instance of this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self subclassResponsibility! ! !OSProcessAccessor class methodsFor: 'instance creation' stamp: 'dtl 3/2/2002 08:29'! new self inform: 'use OSProcessAccessor>>forThisOSProcess to create or obtain the OSProcess instance for this Smalltalk session.'. ^ nil! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:41'! aioModuleName "Answer a string containing the module name string for the AIO plugin." "OSProcess accessor aioModuleName" ^ self subclassResponsibility! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:41'! aioVersionString "Answer a string containing the version string for the AIO plugin." "OSProcess accessor aioVersionString" ^ self subclassResponsibility! ! !OSProcessAccessor methodsFor: 'testing' stamp: 'dtl 10/18/2001 22:58'! canAccessSystem "Answer true if it is possible to access the external process. Concrete subclasses should know how to answer true." ^ false ! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 4/9/2005 22:44'! canAcquireLock: anOSFileLockDescriptor "Answer true if the file lock cache will permit fileLock to be acquired. This method does not guarantee that the underlying OS will grant the lock." ^ (self fileLockRegistry anySatisfy: [:ld | ld isActive and: [ld conflictsWith: anOSFileLockDescriptor]]) not! ! !OSProcessAccessor methodsFor: 'testing' stamp: 'dtl 2/14/2004 11:43'! canForwardExternalSignals "Answer true if it is possible to forward OS signals to a Smalltalk Semaphore." ^ false ! ! !OSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 4/7/2007 10:19'! canObtainSessionIdentifierFromPlugin ^ canObtainSessionIdentifierFromPlugin ifNil: [canObtainSessionIdentifierFromPlugin := self primGetSession notNil]! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 3/5/2005 13:21'! emulateWin32FileLocking "Answer the current value of this preference" ^ EmulateWin32FileLocking! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 9/24/2009 21:36'! fileLockRegistry ^ FileLockRegistry ifNil: [FileLockRegistry := Set new] ! ! !OSProcessAccessor methodsFor: 'session identification' stamp: 'dtl 8/6/2003 21:39'! getSessionIdentifier "Call a primitive to obtain the unique identifier for this Squeak session. If the primitive fails, try to deduce the session identifier from an instance of StandardFileStream. Some versions of the OSProcessPlugin may not be able to obtain a session ID, so this provides a mechanism for obtaining the session ID indirectly if necessary." "OSProcess accessor getSessionIdentifier" | session | session := self primGetSession. session ifNil: [session := self getSessionIdentifierFromSourcesFile]. session ifNil: [session := self getSessionIdentifierFromFileInSqueakDirectory]. ^ session ! ! !OSProcessAccessor methodsFor: 'session identification' stamp: 'dtl 1/23/2013 21:30'! getSessionIdentifierFromFileInSqueakDirectory "Deduce the session identifier using method of last resort. This is an unreliable method, because it assumes knowledge of the internal structure of the SQFile data structure. Deprecated: As of approximately Squeak 3.8 and beyond, the session id has been moved to the first slot of the data structure. This method will not work for a Squeak VM beyond that point, and will not work for any 64 bit VM. However, an reliable means of obtaining sessionID is now available (#getSessionIdentifier), so this method is retained only for backwards compatibility to allow OSPP to be built on an older VMMaker." "OSProcess accessor getSessionIdentifierFromFileInSqueakDirectory" | id s | (OSProcess directoryEntryNames: OSProcess defaultPathString) do: [:n | (s := FileStream readOnlyFileNamed: n) ifNotNil: [(Smalltalk hasClassNamed: #IOHandle) ifTrue: [id := s ioHandle getHandle copyFrom: 5 to: 8] ifFalse: [(id := s fileID) ifNotNil: [id copyFrom: 5 to: 8]]. s close. ^ id]]. ^ nil ! ! !OSProcessAccessor methodsFor: 'session identification' stamp: 'dtl 8/7/2005 22:02'! getSessionIdentifierFromSourcesFile "Deduce the session identifier from an existing open FileStream on the sources file. This is an unreliable method, because it assumes knowledge of the internal structure of the SQFile data structure. Deprecated: As of approximately Squeak 3.8 and beyond, the session id has been moved to the first slot of the data structure. This method will not work for a Squeak VM beyond that point, and will not work for any 64 bit VM. However, an reliable means of obtaining sessionID is now available (#getSessionIdentifier), so this method is retained only for backwards compatibility to allow OSPP to be built on an older VMMaker." "OSProcess accessor getSessionIdentifierFromSourcesFile" | s id | s := SourceFiles first. s ifNil: [^ nil]. ^ (Smalltalk hasClassNamed: #IOHandle) ifTrue: [s ioHandle getHandle copyFrom: 5 to: 8] ifFalse: [(id := s fileID) ifNotNil: [id copyFrom: 5 to: 8]] ! ! !OSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:07'! getStdErrHandle "Answer the handle (a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing." ^ self subclassResponsibility ! ! !OSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:07'! getStdInHandle "Answer the handle (a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing." ^ self subclassResponsibility ! ! !OSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:06'! getStdOutHandle "Answer the handle (a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing." ^ self subclassResponsibility ! ! !OSProcessAccessor methodsFor: 'private - IOHandle' stamp: 'dtl 3/1/2002 15:19'! handleFromAccessor: aByteArrayOrIOAccessor UseIOHandle ifTrue: [aByteArrayOrIOAccessor isNil ifTrue: [^ nil] ifFalse: [^ aByteArrayOrIOAccessor asSQFileStruct]] ifFalse: [^ aByteArrayOrIOAccessor]! ! !OSProcessAccessor methodsFor: 'private - IOHandle' stamp: 'dtl 1/3/2004 21:21'! handleFromFileStream: aFileStream ^ UseIOHandle ifTrue: [self handleFromAccessor: aFileStream ioHandle] ifFalse: [aFileStream fileID] ! ! !OSProcessAccessor methodsFor: 'testing' stamp: 'dtl 8/8/2002 15:13'! handlesOsSignals "True if OS signals can be handled and forwarded to the image" ^ false! ! !OSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 4/8/2007 11:09'! initialize canObtainSessionIdentifierFromPlugin := nil. self canObtainSessionIdentifierFromPlugin. sessionIdentifier := nil. hasTestEof := nil. self sessionIdentifier. ! ! !OSProcessAccessor methodsFor: 'private - IOHandle' stamp: 'dtl 7/12/2003 12:17'! ioAccessorFromSQFile: aByteArray "Answer an object which represents an IO channel. If IOHandle is present in this image, use it; otherwise just answer aByteArray." UseIOHandle ifTrue: [^ (Smalltalk at: #IOHandle) newFromSqFileStruct: aByteArray] ifFalse: [^ aByteArray]! ! !OSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 11/28/2010 14:04'! isAtEndOfFile: anIOHandle "Answer whether the file represented by anIOHandle is at end of file, as determined by a call to feof(). This is different from StandardFileStream>>primAtEnd: which answers true if the file pointer is at the end of the file, but which does not call feof() to determine that an end of file condition has occurred. The difference is significant if aSqFileStruct represents a pipe or a device file, which may not be positionable in the sense of a conventional disk file." ^ self primTestEndOfFileFlag: (self handleFromAccessor: anIOHandle) ! ! !OSProcessAccessor methodsFor: 'platform identification' stamp: 'dtl 8/24/2003 09:18'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isResponsibleForThisPlatform! ! !OSProcessAccessor methodsFor: 'pipe open' stamp: 'dtl 11/28/2010 12:28'! makePipeHandles "Create a pipe, and answer an array of two IO accessors for the pipe reader and writer." "OSProcess accessor makePipeHandles" ^self primCreatePipe ifNotNilDo: [:p | ^ p collect: [:e | self ioAccessorFromSQFile: e]] ! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:41'! osppModuleName "Answer a string containing the module name string for the OSPP plugin." "OSProcess accessor osppModuleName" ^ self subclassResponsibility! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:41'! osppModuleVersionString "Answer a string containing the version string for the OSPP plugin." "OSProcess accessor osppModuleVersionString" ^ self subclassResponsibility! ! !OSProcessAccessor methodsFor: 'session identification' stamp: 'dtl 3/2/2002 09:07'! primGetSession "Subclasses should override if they know how to obtain the session identifier." ^ nil! ! !OSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 4/8/2007 10:49'! primTestEndOfFileFlag: aSqFileStruct "Answer whether the file represented by aSqFileStruct is at end of file, as determined by a call to feof(). This is different from StandardFileStream>>primAtEnd: which answers true if the file pointer is at the end of the file, but which does not call feof() to determine that an end of file condition has occurred. The difference is significant if aSqFileStruct represents a pipe or a device file, which may not be positionable in the sense of a conventional disk file." ^ self subclassResponsibility ! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 3/5/2005 13:06'! register: fileRegionLock "If an object equal to fileRegionLock exists in the registry, answer it. Otherwise, add fileRegionLock to the registry and answer fileRegionLock." ^ (self fileLockRegistry like: fileRegionLock) ifNil: [self fileLockRegistry add: fileRegionLock] ! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 4/10/2005 15:05'! registeredLocksForFile: aFileStream "Answer all lock descriptors associated with aFileStream" ^ self fileLockRegistry select: [:ea | ea fileStream = aFileStream] ! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'jf 2/26/2004 18:06'! removeInactiveLocks "Go through the lock cache and remove any that have been left behind after their streams were closed." ^ self fileLockRegistry copy do: [:ea | ea isActive ifFalse: [self fileLockCache remove: ea]]! ! !OSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 3/2/2002 08:32'! sessionIdentifier ^ sessionIdentifier ifNil: [sessionIdentifier := self getSessionIdentifier] ! ! !OSProcessAccessor methodsFor: 'file control' stamp: 'dtl 2/11/2001 15:37'! setNonBlocking: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set it non-blocking." ^ self subclassResponsibility ! ! !OSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 3/5/2005 13:07'! unregister: fileRegionLock "If an object equal to fileRegionLock exists in the registry, remove it and answer the object. Otherwise answer nil." ^ self fileLockRegistry remove: fileRegionLock ifAbsent: [nil] ! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:41'! xdcpModuleName "Answer a string containing the module name string for the display control plugin." "OSProcess accessor xdcpModuleName" ^ self subclassResponsibility! ! !OSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:42'! xdcpVersionString "Answer a string containing the version string for the display control plugin." "OSProcess accessor xdcpVersionString" ^ self subclassResponsibility! ! !RiscOSProcessAccessor commentStamp: '' prior: 101816605! I provide access to the operating system process in which the Squeak VM is currently running. I am based on the RiscOS task model. There is only one instance of me, and instances of RiscOSProcess depend on me to provide access to the operating system process which they represent. I know how to create child processes. I use a semaphore to receive signals when child processes die, and I notify my dependents (instances ofRiscOSProcess) when these events occur. ! !RiscOSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:48'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ OSProcess isRiscOS ! ! !RiscOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 1/6/2001 23:15'! primForkAndExec: executableFile withArgs: anArrayOfArgumentStrings argCount: numberOfArgumentStrings withEnv: anArrayOfEnvironmentStrings envCount: numberOfEnvironmentStrings stdIn: inputFileHandle stdOut: outputFileHandle stdErr: errorFileHandle "Parameters are expected to have been properly prepared by the caller, including string values which are to be null terminated strings. In other words, all strings should have (Character value: 0) as the last element in the string."! ! !RiscOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/23/2002 05:56'! primGetSession "Answer the unique identifier for this session of Smalltalk running in this OS Process." ^ nil ! ! !UnixOSProcessAccessor commentStamp: '' prior: 101817131! I provide access to the operating system process in which the Squeak VM is currently running. I am based on the Unix process model. There is only one instance of me, and instances of UnixOSProcess depend on me to provide access to the operating system process which they represent. I know how to create child processes. I use a semaphore to receive signals when child processes die, and I notify my dependents (instances of UnixOSProcess) when these events occur. ! !UnixOSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:49'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ OSProcess isUnix ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:43'! aioModuleName "Answer a string containing the module name string for the AIO plugin." "OSProcess accessor aioModuleName" ^ self primAioPluginModuleName ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:44'! aioVersionString "Answer a string containing the version string for the AIO plugin." "OSProcess accessor aioVersionString" ^ self primAioPluginVersionString ! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 10/7/2000 13:39'! canAccessChildProcess: anExternalProcess "Is the child process still there? Maybe not if we have restarted the image and anExternalProcess refers to a process which died while we were not watching." ^ self primCanReceiveSignals: anExternalProcess pid! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 9/9/2000 15:45'! canAccessSystem "Answer true if it is possible to access the external process, else false. Failure to access the external process is probably due to lack of a UnixOSProcessPlugin module." ^ self primGetPid notNil ! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 8/30/2003 18:43'! canControlXDisplay "True if the XDisplayControlPlugin is accessible. Older versions of OSProcess relied on the X display control to be embedded in the OSProcessPlugin module. This has been moved to a separate display control plugin to allow support of non-X platforms and other display media on Unix platforms (OS X)." "OSProcess accessor canControlXDisplay" ^ self primXDisplayControlPluginModuleName notNil ! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 2/14/2004 12:17'! canForwardExternalSignals "Answer true if it is possible to forward OS signals to a Smalltalk Semaphore." ^ true ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/31/2001 15:07'! chDir: pathString "Change current working directory. The $PWD environment variable is not updated (but see UnixProcess>>chDir:). Answer nil for success, or an error message." "OSProcess accessor chDir: '/tmp'" "OSProcess accessor chDir: '/no/such/path'" "OSProcess accessor chDir: FileDirectory default name" | result message | result := self primChdir: pathString. result isNil ifTrue: [^ nil] ifFalse: [message := self primErrorMessageAt: result. ^ message] ! ! !UnixOSProcessAccessor methodsFor: 'signal print stack trace' stamp: 'dtl 7/20/2010 00:06'! clearPrintAllStacksOnSigUsr1 "Clear any signal handler in the VM that was set to print all call stacks on console output when a SIGUSR1 is received. Restores default SIGUSR1 handler, which may result in exiting the VM on this signal. Answer an identifier for the previously defined signal handler or nil if no handler had been set." ^self primForwardSignal: self primSigUsr1Number toSemaphore: nil ! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 3/2/2009 22:42'! closeUnixFileNumber: unixFileDescriptor "Close the file associated with unixFileDescriptor, a small integer value." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'debugging' stamp: 'dtl 11/19/2006 09:02'! currentSigHandlerAddress: signalNumber "Answer the current machine address of the signal handler for signalNumber, expressed as a ByteArray. Temporarily set a signal forwarded for signalNumber, and remember the machine address of the prior signal handler. Restore the signal handler to its previous value, and answer the machine address of the handler." "OSProcess accessor currentSigHandlerAddress: OSProcess accessor primSigIntNumber" | sema index previousHandlerAddress | sema := Semaphore new. index := Smalltalk registerExternalObject: sema. (previousHandlerAddress := self primForwardSignal: signalNumber toSemaphore: index) ifNil: [Smalltalk unregisterExternalObject: sema. ^ self error: 'could not forward signal number ', signalNumber asString]. self restoreSignal: signalNumber. ^ previousHandlerAddress! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/2/2000 19:59'! environmentAt: aSymbolOrString "Get an environment variable from the external OS process." "OSProcess thisOSProcess environmentAt: 'PATH'" ^ self primEnvironmentAtSymbol: aSymbolOrString ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 10/7/2001 01:18'! environmentAt: aSymbolOrString put: aString "Add or update an environment variable in the external OS process. Convert aSymbol and aString into a KEY=value string and pass this to the OS process environment. Standard C libraries provide a putenv() function for this purpose, with a parameter in the form KEY=value. Note: Maintain a reference to the return value, see note in primitivePutEnv." "OSProcess accessor environmentAt: 'AAAA' put: 'this is the value of AAAA'" "OSProcess accessor environmentAt: 'AAAA' put: nil" "OSProcess accessor environmentAt: 'AAAA'" aString isNil ifTrue: [^ self primUnsetEnv: aSymbolOrString, (Character value: 0) asString] ifFalse: [^ self environmentPut: (aSymbolOrString asString, '=', aString)] ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 9/10/2000 09:48'! environmentPut: aString "Add or update an environment variable in the external OS process using a 'KEY=value' string. Create a null terminated string for use by the external putenv() call in a pluggable primitive." "OSProcess thisOSProcess processAccessor environmentPut: 'SOMEKEY=somevalue'" | cString | cString := aString, (Character value: 0) asString. ^ self primPutEnv: cString ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 05:49'! fileProtectionMask: aPathString "Call stat(2) to obtain the file protection mask for a file." "OSProcess accessor fileProtectionMask: '/bin/sh'" "OSProcess accessor fileProtectionMask: '/etc/hosts'" "OSProcess accessor fileProtectionMask: '/bin/su'" "OSProcess accessor fileProtectionMask: '/bin/NOSUCHFILE'" "OSProcess accessor fileProtectionMask: 12345" | mask | (aPathString isKindOf: String) ifFalse: [self error: 'expected a path string'. ^ nil]. mask := self primFileProtectionMask: aPathString. (mask == nil) ifTrue: [^ nil]. (mask isKindOf: Integer) ifTrue: [^ self primErrorMessageAt: mask]. ^ mask ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 05:49'! fileStat: aPathString "Call stat(2) to obtain the UID, GID, and file protection mask for a file." "OSProcess accessor fileStat: '/var/spool/news'" "OSProcess accessor fileStat: '/etc/hosts'" "OSProcess accessor fileStat: '/bin/su'" "OSProcess accessor fileStat: '/bin/NOSUCHFILE'" "OSProcess accessor fileStat: 12345" | mask | (aPathString isKindOf: String) ifFalse: [self error: 'expected a path string'. ^ nil]. mask := self primFileStat: aPathString. (mask == nil) ifTrue: [^ nil]. (mask isKindOf: Integer) ifTrue: [^ self primErrorMessageAt: mask]. ^ mask ! ! !UnixOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 7/6/2010 21:22'! finalize "Clean up grimReaper and associated semaphore." self grimReaper ifNotNil: [grimReaper terminate. grimReaper := nil]. self sigChldSemaphore ifNotNil: [self restoreSigChld. self sigChldSemaphore: nil] ! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 11/28/2010 12:13'! flushExternalStream: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to flush the external I/O stream." ^ self primSQFileFlush: (self handleFromAccessor: anIOHandle) ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 1/25/2004 21:43'! forkAndExec: executableFile stdIn: inputFileHandle stdOut: outputFileHandle stdErr: errorFileHandle argBuf: argVec argOffsets: argOffsets envBuf: envVec envOffsets: envOffsets workingDir: pathString "Parameters are expected to have been properly prepared by the caller, including string values which are to be null terminated strings. In other words, all strings should have (Character value: 0) as the last element in the string. Parameters should be: executableFile: a string with the name of a file to execute. stdIn: a fileID ByteArray (struct SQFile in C) to be used as standard input. stdOut: a fileID ByteArray to be used as standard output. stdErr: a fileID ByteArray to be used as standard error. argVec: a String arranged to look more or less like a char **, but with the addresses not yet fixed. argOffsets: an Array of offsets for fixing up the argVec addresses. envVec: a String arranged to look more or less like a char **, but with the addresses not yet fixed. envOffsets: an Array of offsets for fixing up the envVec addresses. workingDir: a null terminated path name String, or nil. The envVec parameter may be nil, in which case envOffsets is ignored. workingDir may be nil. The other parameters are required. Parameters with nil value indicate that current values for this process should be used." ^ self primForkExec: executableFile stdIn: inputFileHandle stdOut: outputFileHandle stdErr: errorFileHandle argBuf: argVec argOffsets: argOffsets envBuf: envVec envOffsets: envOffsets workingDir: pathString ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 4/27/2011 21:01'! forkSqueak "Clone this Squeak Smalltalk image in a child OSProcess. The child is the same as the parent, except for its new X session connection, and the return value of this method, which is zero for the child process, and a positive integer equal to the pid of the child for the parent process. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." self safeToForkSqueak ifTrue: [^self primForkSqueak]. [self notify: 'forkSqueak requires XDisplayControlPlugin'] ensure: [^nil] ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:51'! forwardSigChld "Set a signal handler for SIGCHLD. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigChld" ^ self forwardSignal: self primSigChldNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:51'! forwardSigHup "Set a signal handler for SIGHUP. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigHup" ^ self forwardSignal: self primSigHupNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:51'! forwardSigInt "Set a signal handler for SIGINT. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigInt" ^ self forwardSignal: self primSigIntNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:51'! forwardSigKill "Set a signal handler for SIGKILL. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigKill" self notify: 'SIGKILL and SIGSTOP signals cannot be caught, see man signal(2)'. ^ self forwardSignal: self primSigKillNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:52'! forwardSigPipe "Set a signal handler for SIGPIPE. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigPipe" ^ self forwardSignal: self primSigPipeNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:52'! forwardSigQuit "Set a signal handler for SIGQUIT. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigQuit" ^ self forwardSignal: self primSigQuitNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:52'! forwardSigTerm "Set a signal handler for SIGTERM. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigTerm" ^ self forwardSignal: self primSigTermNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:52'! forwardSigUsr1 "Set a signal handler for SIGUSR1. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigUsr1" ^ self forwardSignal: self primSigUsr1Number ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:52'! forwardSigUsr2 "Set a signal handler for SIGUSR2. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set)." "OSProcess accessor forwardSigUsr1" ^ self forwardSignal: self primSigUsr2Number ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 12/6/2002 18:28'! forwardSignal: signalNumber "Set a signal handler in the VM which will signal a Smalltalk semaphore at semaphoreIndex whenever an external signal sigNum is received. Answer a new Semaphore, or nil if unable to set the handler (possibly because it has already been set). A Smalltalk process can wait on the Semaphore, and take action when a signal is detected. See man(7) signal for signal number definitions on your unix system." "OSProcess accessor forwardSignal: OSProcess accessor primSigIntNumber" | sema index | sema := Semaphore new. index := Smalltalk registerExternalObject: sema. (self primForwardSignal: signalNumber toSemaphore: index) ifNil: [Smalltalk unregisterExternalObject: sema. ^ nil]. ^ sema! ! !UnixOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 11/28/2010 12:07'! getStdErrHandle "Answer the handle (a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing." ^ self primGetStdErrHandle ifNotNilDo: [:handle | self ioAccessorFromSQFile: handle]! ! !UnixOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 11/28/2010 12:07'! getStdInHandle "Answer the handle (a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing." ^ self primGetStdInHandle ifNotNilDo: [:handle | self ioAccessorFromSQFile: handle]! ! !UnixOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 11/28/2010 12:08'! getStdOutHandle "Answer the handle (a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing." ^ self primGetStdOutHandle ifNotNilDo: [:handle | self ioAccessorFromSQFile: handle]! ! !UnixOSProcessAccessor methodsFor: 'pthreads' stamp: 'dtl 3/17/2007 23:14'! getThreadID "Answer the ID of the pthread that is currently executing (the interpreter thread). A thread ID may be a 64 bit value on some platforms, so answer a byte array containing the value in machine-dependent byte order." "OSProcess accessor getThreadID" | osppVer | [osppVer := OSProcess accessor osppModuleVersionString asNumber] on: Error do: [^ nil]. (osppVer notNil and: [osppVer >= 4.2]) ifTrue: [^ self primGetThreadID] ifFalse: [^ nil] ! ! !UnixOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 1/25/2004 21:29'! grimReaper "Answer the value of grimReaper" ^ grimReaper! ! !UnixOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 2/14/2004 11:45'! grimReaper: anObject "Set the value of grimReaper" grimReaper := anObject! ! !UnixOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 9/3/2010 12:49'! grimReaperProcess "This is a process which waits for the death of a child OSProcess, and informs any dependents of the change. Use SIGCHLD events if possible, otherwise a Delay to poll for exiting child processes." | event processSynchronizationDelay | ^ self canAccessSystem ifTrue: [event := (self canAccessSystem and: [self canForwardExternalSignals]) ifTrue: [self sigChldSemaphore] ifFalse: [Delay forMilliseconds: 200]. processSynchronizationDelay := Delay forMilliseconds: 20. grimReaper ifNil: [grimReaper := [[event wait. processSynchronizationDelay wait. "Avoids lost signals in heavy process switching" self changed: #childProcessStatus] repeat] newProcess. grimReaper resume. "name selected to look reasonable in the process browser" grimReaper name: ((ReadStream on: grimReaper hash asString) next: 5) , ': the child OSProcess watcher']] ifFalse: [nil] ! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 8/8/2002 15:13'! handlesOsSignals "True if OS signals can be handled and forwarded to the image" ^ true! ! !UnixOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 7/7/2010 07:46'! initialize "Call this method when an instance is first created, or to refresh after an image restart to clean up from the previous session. Notify dependents of my singleton instance if the image has restarted in a different OS process (this is not the case when #startUp is called after a simple image save)." self finalize. super initialize. ThisProcessPid ~~ self primGetPid ifTrue: ["Image has been restarted and is now running in a different OS process" ThisProcessPid := self primGetPid. self changed: #startUp]. self changed. self restartChildWatcherProcess. ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 10/6/2001 12:08'! isExecutable: aPathName "Answer true if file at aPathName has execute permission for this process." "OSProcess accessor isExecutable: '/bin/sh'" "OSProcess accessor isExecutable: '/no/such/file'" ^ self isExecutable: aPathName forUser: self primGetUid inGroup: self primGetGid ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 22:53'! isExecutable: aPathName forUser: uid inGroup: gid "Answer true if file at aPathName has execute permission for a user identified by user uid and group gid." "OSProcess accessor isExecutable: '/bin/sh' forUser: OSProcess accessor primGetUid inGroup: OSProcess accessor primGetGid" | fStat suid sgid user group protectionMask | fStat := self fileStat: aPathName. (fStat isKindOf: String) ifTrue: [self inform: aPathName, ': ', fStat. ^ nil]. protectionMask := fStat at: 3. ((protectionMask at: 4) allMask: 1) ifTrue: [^ true]. "Test executable by any user ID" sgid := (protectionMask at: 1) allMask: 2. sgid ifTrue: [group := gid] ifFalse: [group := fStat at: 2]. ((gid == group) and: [(protectionMask at: 3) allMask: 1]) ifTrue: [^ true]. "Test executable by my group ID" suid := (protectionMask at: 1) allMask: 4. suid ifTrue: [user := uid] ifFalse: [user := fStat at: 1]. ((uid == user) and: [(protectionMask at: 2) allMask: 1]) ifTrue: [^ true]. "Test executable by my user ID" ^ false ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/14/2004 15:10'! isLockableFile: aFileStream "Check for ability to place an exclusive lock on the entire file represented by aFileStream. An exclusive lock (write lock) permits only one OS process to hold the lock. Answer true if the region is lockable." ^ self isLockableFile: aFileStream exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'jf 2/22/2004 17:30'! isLockableFile: aFileStream exclusive: flag "Check for ability to place an exclusive lock on the entire file represented by aFileStream. An exclusive lock (write lock) permits only one OS process to hold the lock. Answer true if the region is lockable." | fileLock | aFileStream ifNil: [^ false]. fileLock := OSFileLock onFile: aFileStream exclusive: flag. ^ self isLockableFileRegion: fileLock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/14/2004 15:09'! isLockableFile: aFileStream from: start to: end "Pass a struct SQFile on the stack, and check for ability to lock the specified region. If the exclusive flag is true, then specify an exclusive (F:=WRLCK) lock on the file. Otherwise, specify a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Answer true if the region is lockable." ^ self isLockableFile: aFileStream from: start to: end exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/22/2004 15:10'! isLockableFile: aFileStream from: start to: end exclusive: flag "Pass a struct SQFile on the stack, and check for ability to lock the specified region. If the exclusive flag is true, then specify an exclusive (F:=WRLCK) lock on the file. Otherwise, specify a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Answer true if the region is lockable." | fileRegion | aFileStream ifNil: [^ false]. fileRegion := OSFileRegionLock onFile: aFileStream from: start to: end exclusive: flag. ^ self isLockableFileRegion: fileRegion ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'jf 2/22/2004 18:42'! isLockableFileRegion: aFileLock "Pass a struct SQFile on the stack, and check for ability to lock the specified region. If the exclusive flag is true, then specify an exclusive (F:=WRLCK) lock on the file. Otherwise, specify a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Answer true if the region is lockable." aFileLock ifNil: [^ false]. (self canAcquireLock: aFileLock) ifFalse: [^ false]. ^ aFileLock test ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 23:09'! isReadable: aPathName "Answer true if file at aPathName has read permission for this process." "OSProcess accessor isWritable: '/bin/sh'" ^ self isReadable: aPathName forUser: self primGetUid inGroup: self primGetGid ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 23:00'! isReadable: aPathName forUser: uid inGroup: gid "Answer true if file at aPathName has read permission for a user identified by user uid and group gid." "OSProcess accessor isReadable: '/bin/sh' forUser: OSProcess accessor primGetUid inGroup: OSProcess accessor primGetGid" | fStat user group protectionMask | fStat := self fileStat: aPathName. (fStat isKindOf: String) ifTrue: [self inform: aPathName, ': ', fStat. ^ nil]. protectionMask := fStat at: 3. ((protectionMask at: 4) allMask: 4) ifTrue: [^ true]. "Test readable by any user ID" group := fStat at: 2. ((gid == group) and: [(protectionMask at: 3) allMask: 4]) ifTrue: [^ true]. "Test readable by my group ID" user := fStat at: 1. ((uid == user) and: [(protectionMask at: 2) allMask: 4]) ifTrue: [^ true]. "Test readable by my user ID" ^ false ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 23:09'! isWritable: aPathName "Answer true if file at aPathName has write permission for this process." "OSProcess accessor isWritable: '/bin/sh'" ^ self isWritable: aPathName forUser: self primGetUid inGroup: self primGetGid ! ! !UnixOSProcessAccessor methodsFor: 'file testing' stamp: 'dtl 5/1/2001 23:08'! isWritable: aPathName forUser: uid inGroup: gid "Answer true if file at aPathName has read permission for a user identified by user uid and group gid." "OSProcess accessor isWritable: '/bin/sh' forUser: OSProcess accessor primGetUid inGroup: OSProcess accessor primGetGid" | fStat user group protectionMask | fStat := self fileStat: aPathName. (fStat isKindOf: String) ifTrue: [self inform: aPathName, ': ', fStat. ^ nil]. protectionMask := fStat at: 3. ((protectionMask at: 4) allMask: 2) ifTrue: [^ true]. "Test writable by any user ID" group := fStat at: 2. ((gid == group) and: [(protectionMask at: 3) allMask: 2]) ifTrue: [^ true]. "Test writable by my group ID" user := fStat at: 1. ((uid == user) and: [(protectionMask at: 2) allMask: 2]) ifTrue: [^ true]. "Test writable by my user ID" ^ false ! ! !UnixOSProcessAccessor methodsFor: 'VM atexit' stamp: 'dtl 3/17/2007 18:39'! kill: listOfPids withSignal: signumOrNil "On exit of the VM process, send signal to the external processes identified by listOfPids. If signumOrNil is nil, the default SIGTERM signal will be sent to listOfPids." ^ self primKill: listOfPids withSignal: signumOrNil ! ! !UnixOSProcessAccessor methodsFor: 'VM atexit' stamp: 'dtl 3/18/2007 10:39'! killOnVmExit: proxies withSignal: signumOrNil "When Squeak uses OSProcess to start a long running external process, it may be useful to guarantee that one or more child processes is killed when the Squeak VM exits, regardless of whether the normal Squeak shutdown processing has occurred. This method arranges for a collection of external process proxies to receive a signal when the Squeak VM exits. If signumOrNil is nil, the default SIGTERM will be used. Each invocation of this method will override the effects of previous calls." "OSProcess accessor killOnVmExit: OSProcess thisOSProcess allMyChildren withSignal: nil" | pids | pids := (proxies select: [:p | p isRunning] thenCollect: [:e | e pid]) asArray. ^ self kill: pids withSignal: signumOrNil ! ! !UnixOSProcessAccessor methodsFor: 'debugging' stamp: 'dtl 11/19/2006 09:05'! listSigHandlerAddressesOnConsole "OSProcess accessor listSigHandlerAddressesOnConsole" (0 to: 67) do: [:sigNum | | prev | [prev := OSProcess accessor currentSigHandlerAddress: sigNum. OSProcess debugMessage: 'signal ', sigNum asString,' hander is ', prev printString] on: Error do: [:ex | OSProcess debugMessage: ex printString]] ! ! !UnixOSProcessAccessor methodsFor: 'debugging' stamp: 'dtl 11/19/2006 09:07'! listSigHandlerAddressesOnTranscript "OSProcess accessor listSigHandlerAddressesOnTranscript" Transcript cr. (0 to: 67) do: [:sigNum | | prev | [prev := OSProcess accessor currentSigHandlerAddress: sigNum. Transcript show: 'signal ', sigNum asString,' hander is ', prev printString; cr] on: Error do: [:ex | Transcript show: ex printString; cr]] ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/14/2004 15:01'! lockFile: aFileStream "Request an exclusive lock on the entire file represented by aFileStream. The exclusive lock (write lock) permits only one OS process to hold the lock. Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self lockFile: aFileStream exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/11/2006 23:40'! lockFile: aFileStream exclusive: flag "Request an exclusive lock on the entire file represented by aFileStream. The exclusive lock (write lock) permits only one OS process to hold the lock. Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self lockFile: aFileStream exclusive: flag ifFail: nil ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/11/2006 23:39'! lockFile: aFileStream exclusive: flag ifFail: failBlock "Request an exclusive lock on the entire file represented by aFileStream. The exclusive lock (write lock) permits only one OS process to hold the lock. Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." | fileLock | aFileStream ifNil: [^ failBlock value]. fileLock := OSFileLock onFile: aFileStream exclusive: flag. ^ self lockFileRegion: fileLock ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/14/2004 15:01'! lockFile: aFileStream from: start to: end "Pass a struct SQFile on the stack, and request a lock on the specified region. If the exclusive flag is true, then request an exclusive (F:=WRLCK) lock on the file. Otherwise, request a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self lockFile: aFileStream from: start to: end exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/22/2004 15:10'! lockFile: aFileStream from: start to: end exclusive: flag "Pass a struct SQFile on the stack, and request a lock on the specified region. If the exclusive flag is true, then request an exclusive (F:=WRLCK) lock on the file. Otherwise, request a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." | fileRegion | aFileStream ifNil: [^ nil]. fileRegion := OSFileRegionLock onFile: aFileStream from: start to: end exclusive: flag. ^ self lockFileRegion: fileRegion ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 8/30/2009 14:51'! lockFile: fileStream from: start to: end exclusive: writeLockFlag ifFail: failBlock | lock | lock := OSFileRegionLock onFile: fileStream from: start to: end exclusive: writeLockFlag. ^ self lockFileRegion: lock ifFail: [failBlock value]! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 11/28/2010 19:07'! lockFile: fileStream from: start to: end ifFail: failBlock ^ self lockFile: fileStream from: start to: end exclusive: true ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/11/2006 23:41'! lockFile: aFileStream ifFail: failBlock "Request an exclusive lock on the entire file represented by aFileStream. The exclusive lock (write lock) permits only one OS process to hold the lock. Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self lockFile: aFileStream exclusive: true ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/8/2006 07:04'! lockFileRegion: aFileLock "Pass a struct SQFile on the stack, and request a lock on the specified region. If the exclusive flag is true, then request an exclusive (F:=WRLCK) lock on the file. Otherwise, request a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self lockFileRegion: aFileLock ifFail: [nil] ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/8/2006 07:03'! lockFileRegion: aFileLock ifFail: failBlock "Pass a struct SQFile on the stack, and request a lock on the specified region. If the exclusive flag is true, then request an exclusive (F:=WRLCK) lock on the file. Otherwise, request a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). Answer a descriptor for the locked file region, an Array of file handle and region interval; or answer nil on error. If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." aFileLock ifNil: [^ failBlock value]. "Check region lock overlap for Win32 compatibility" (self canAcquireLock: aFileLock) ifFalse: [^ failBlock value]. aFileLock lock ifFalse: [^ failBlock value] ifTrue: [self register: aFileLock. ^ aFileLock] ! ! !UnixOSProcessAccessor methodsFor: 'pipe open' stamp: 'dtl 1/31/2004 19:08'! makePipeHandles "Create a pipe, and answer an array of two IO accessors for the pipe reader and writer. Set a signal handler to cause SIGPIPE signals to be ignored. This will register a Semaphore to receive the SIGPIPE events, but we will simply ignore the semaphore, effectively ignoring the external OS signals. This is done instead of explicitly telling the OS to ignore the signals because it allows the use of a uniform signal forwarding mechanism in Squeak, even for signals that are ultimately ignored." self forwardSigPipe. ^ super makePipeHandles ! ! !UnixOSProcessAccessor methodsFor: 'temp files and directories' stamp: 'dtl 6/3/2013 22:05'! mkdtemp: templateString "Call mkdtemp() to generate a uniquely named temporary directory from a template string. The last six or more characters of template must be XXXXXX and these are replaced with characters that make the directory name unique. The directory is then created with permissions 0700. Answer the new directory name." "OSProcess accessor mkdtemp: 'foodir.XXXXXX' " ^self primMkdtemp: templateString ! ! !UnixOSProcessAccessor methodsFor: 'temp files and directories' stamp: 'dtl 6/3/2013 22:36'! mkstemp: templateString "Call mkstemp() to generate a unique temporary file from a template string. The last six or more characters of template must be XXXXXX and these are replaced with a string that make the filename unique. Contents of the template string are modified. The file is created with permissions 0600, that is, read plus write for owner only. Answer an opened file stream on the newly created file." "OSProcess accessor mkstemp: 'foo.XXXXXX' " " | s | { s := 'foo.XXXXXX' . OSProcess accessor mkstemp: s } " | fileName sqFile | fileName := templateString copy. sqFile := self primMkstemp: fileName. ^ AttachableFileStream name: fileName attachTo: sqFile writable: true ! ! !UnixOSProcessAccessor methodsFor: 'temp files and directories' stamp: 'dtl 6/3/2013 21:59'! mktemp: templateString "Call mktemp() to generate a unique temporary filename from a template string. The last six or more characters of template must be XXXXXX and these are replaced with a string that make the filename unique. The templateString must be a mutable string, because the primitive will change its contents. Use primitiveMkstemp to avoid file creation race condition, see man 3 mktemp." "OSProcess accessor mktemp: 'foo.XXXXXX' " "OSProcess accessor mktemp: '/tmp/foo.XXXXXX' " ^ self primMktemp: templateString ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 10/8/2005 09:55'! nice: inc "Change the scheduling priority of this OS process by the given nice increment. A positive increment decreases the priority. Only the superuser can specify a negative value to increase the priority. A typical use is to increase the nice value by 1 in order to make the Squeak VM run at lower priority. This may be useful for a background Squeak doing an image save or other non- interactive process." "OSProcess accessor nice: 1" ^ self primNice: inc ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:34'! oldPrimCanConnectToXDisplay: xDisplayName "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Open and close a connection to displayName. It the connection was successfully opened, answer true; otherwise false. This is intended to check for the ability to open an X display prior to actually making the attempt." "OSProcess accessor primCanConnectToXDisplay: ':0.0' " "OSProcess accessor primCanConnectToXDisplay: ':1' " ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:34'! oldPrimGetXDisplayName "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Answer a string containing the name for the X display, or nil if the display was opened using the $DISPLAY environment variable. This answers the name of the X display as of the time it was last opened, which may be different from the current setting of $DISPLAY." "OSProcess accessor primGetXDisplayName" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:35'! oldPrimIsConnectedToXServer "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Answer true if VM is currently connected to an X server." "OSProcess accessor primIsConnectedToXServer inspect" "| x | OSProcess accessor primKillDisplay. x := OSProcess accessor primIsConnectedToXServer. OSProcess accessor primOpenXDisplay. x inspect" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:35'! oldPrimKillDisplay "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Call an internal function which will disconnect the X display session." "OSProcess thisOSProcess processAccessor primKillDisplay" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:35'! oldPrimOpenXDisplay "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Call an internal function which will open the X display session." "OSProcess thisOSProcess processAccessor primKillDisplay. (Delay forSeconds: 5) wait. OSProcess thisOSProcess processAccessor primOpenXDisplay" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling - old plugin compatibility' stamp: 'dtl 8/3/2003 20:35'! oldPrimSetXDisplayName: aStringOrNil "Deprecated - install the XDisplayControlPlugin to eliminate the need to call this method" "Set the name for the X display for use in the next call to primitiveOpenXDisplay. aStringOrNil must be either a String (such as 'myhost:0') or nil, indicating that the current value of $DISPLAY should be used." "OSProcess accessor primSetXDisplayName: ':0.0' " "OSProcess accessor primSetXDisplayName: nil " ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 11:48'! osppModuleName "Answer a string containing the module name string for the OSPP plugin." "OSProcess accessor osppModuleName" ^ self primOSProcessPluginModuleName ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 11:49'! osppModuleVersionString "Answer a string containing the version string for the OSPP plugin." "OSProcess accessor osppModuleVersionString" ^ self primOSProcessPluginModuleVersionString ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 10:37'! primAioPluginModuleName "Answer a string containing the module name string for the AIO plugin." "OSProcess accessor primAioPluginModuleName" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 10:38'! primAioPluginVersionString "Answer a string containing the version string for the AIO plugin." "OSProcess accessor primAioPluginVersionString" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/22/2000 17:19'! primArgumentAt: index "Answer the argument string in the argument OS process argument list at position index. In Unix, the first element of the list is the program name, and any additional elements of the list are optional command line arguments passed to the program. This convention may be simulated by the C runtime libraries on other operating systems, but argument list handling should be assumed to be operating system dependent." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/3/2003 18:26'! primCanConnectToXDisplay: xDisplayName "Open and close a connection to displayName. It the connection was successfully opened, answer true; otherwise false. This is intended to check for the ability to open an X display prior to actually making the attempt." "OSProcess accessor primCanConnectToXDisplay: ':0.0' " "OSProcess accessor primCanConnectToXDisplay: ':1' " ^ self oldPrimCanConnectToXDisplay: xDisplayName ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 2/24/2001 14:28'! primCanReceiveSignals: anIntegerPid "Answer true if an external OS process can receive signals. In most cases, if the process identified by anIntegerPid cannot receive signals, it is because the process does not exist and anIntegerPid is a stale reference (possibly left over from a previous Squeak session). Answer nil if the primitive does not exist (possibly because the VM is using an older version of the plugin)." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 3/31/2001 11:18'! primChdir: pathString "Change current working directory. Does not update the $PWD environment variable." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 11/28/2010 12:31'! primCreatePipe "Create a pipe, and answer an array of two file handles (SQFile data structures in interp.c) for the pipe reader and writer." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 11/28/2010 12:32'! primCreatePipeWithSessionIdentifier: aByteArray "Create a pipe, and answer an array of two file handles (SQFile data structures in interp.c) for the pipe reader and writer." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/6/2003 06:24'! primDisconnectDisplay "Disconnect the X display session. The actual Squeak window on the X server is not effected, but this instance of Squeak will not have any further interaction with it." "OSProcess thisOSProcess processAccessor primDisconnectDisplay" ^ self oldPrimKillDisplay ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 9/10/2011 23:28'! primDup: fileDescriptor "Call dup2 to duplicate a file descriptor to the next available descriptor. Answer the new file descriptor or -1 on failure." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 5/17/2009 21:57'! primDup: oldFileDescriptor to: newFileDescriptor "Call dup2() to duplicate a file descriptor. Answer the duplicated file descriptor or -1 on failure." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/22/2000 17:20'! primEnvironmentAt: index "Answer the environment string at index position in the OS process environment list. This returns a 'KEY=value' string, which the caller is expected to parse into #KEY and 'value' to be stored an environment dictionary." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primEnvironmentAtSymbol: aSymbol "Answer the value of an environment variable in the external OS process." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/31/2001 11:03'! primErrorMessageAt: anInteger "Answer an error message string from the sys:=errlist array, indexed by anInteger." "OSProcess accessor primErrorMessageAt: 0" "OSProcess accessor primErrorMessageAt: 100" "OSProcess accessor primErrorMessageAt: 1000" "OSProcess accessor primErrorMessageAt: -1" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 4/30/2001 05:49'! primFileProtectionMask: aPathString "Call stat(2) to obtain the file protection mask for a file. Answer an Array of four integers representing the protection mask, or answer errno on failure. The protection mask is four Integers, each of which may be considered an octal digit (0-7), with bit values 4, 2, and 1. The first digit selects the set user ID (4) and set group ID (2) and save text image (1) attributes. The second digit selects permissions for the user who owns the file: read (4), write (2), and execute (1); the third selects permissions for other users in the file's group, with the same values; and the fourth for other users not in the file's group, with the same values." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 4/30/2001 20:56'! primFileStat: aPathString "Call stat(2) to obtain the file protection mask for a file. Answer errno on failure, or on success answer an array with: UID with: GID with: protectionMask. The protectionMask is an Array of four integers representing the protection mask, or answer errno on failure. The protection mask is four Integers, each of which may be considered an octal digit (0-7), with bit values 4, 2, and 1. The first digit selects the set user ID (4) and set group ID (2) and save text image (1) attributes. The second digit selects permissions for the user who owns the file: read (4), write (2), and execute (1); the third selects permissions for other users in the file's group, with the same values; and the fourth for other users not in the file's group, with the same values." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/24/2003 10:13'! primFlushXDisplay "Call an internal function to synchronize output to the X display." "OSProcess thisOSProcess processAccessor primFlushXDisplay" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 11/28/2010 12:35'! primForkExec: executableFile stdIn: inputFileHandle stdOut: outputFileHandle stdErr: errorFileHandle argBuf: argVec argOffsets: argOffsets envBuf: envVec envOffsets: envOffsets workingDir: pathString "Parameters are expected to have been properly prepared by the caller, including string values which are to be null terminated strings. In other words, all strings should have (Character value: 0) as the last element in the string. Parameters should be: executableFile: a string with the name of a file to execute. stdIn: a fileID ByteArray (struct SQFile in C) to be used as standard input. stdOut: a fileID ByteArray to be used as standard output. stdErr: a fileID ByteArray to be used as standard error. argVec: a String arranged to look more or less like a char **, but with the addresses not yet fixed. argOffsets: an Array of offsets for fixing up the argVec addresses. envVec: a String arranged to look more or less like a char **, but with the addresses not yet fixed. envOffsets: an Array of offsets for fixing up the envVec addresses. workingDir: a null terminated path name String, or nil. The envVec parameter may be nil, in which case envOffsets is ignored. workingDir may be nil. The other parameters are required. Parameters with nil value indicate that current values for this process should be used." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 11/28/2010 12:37'! primForkSqueak "Clone this Squeak Smalltalk image in a child OSProcess. The child is the same as the parent, except for its new X session connection, and the return value of this method, which is zero for the child process, and a positive integer equal to the pid of the child for the parent process. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 8/3/2002 20:29'! primForwardSignal: signalNumber toSemaphore: semaphoreIndex "Set a signal handler in the VM which will signal a Smalltalk semaphore at semaphoreIndex whenever an external signal sigNum is received. Answer the prior value of the signal handler. If semaphoreIndex is zero, the handler is unregistered, and the VM returns to its default behavior for handling that signal. The Smalltalk semaphore is expected to be kept at the same index location indefinitely during the lifetime of a Squeak session. If that is not the case, the handler must be unregistered prior to unregistering the Smalltalk semaphore." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 10/14/2001 11:15'! primGetChildExitStatus: childPid "Clean up after the death of a child process, and answer the exit status of the child process." ^ Array with: childPid with: nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/22/2000 17:20'! primGetCurrentWorkingDirectory "Call getcwd() to get the current working directory." "OSProcess thisOSProcess processAccessor primGetCurrentWorkingDirectory" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 4/30/2001 21:07'! primGetEGid "Answer the effective group ID for the OS process in which I am currently executing." "OSProcess accessor primGetEGid" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 4/30/2001 21:01'! primGetEUid "Answer the effective user ID for the OS process in which I am currently executing." "OSProcess accessor primGetEUid" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 4/30/2001 21:01'! primGetGid "Answer the group ID for the OS process in which I am currently executing." "OSProcess accessor primGetGid" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/15/2007 19:43'! primGetPGid: pid "Answer the process group ID of the process identified by pid" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/15/2007 19:39'! primGetPGrp "Answer the process group ID of this OS process" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/22/2000 17:20'! primGetPPid "Answer the OS process ID for the parent process of the OS process in which I am currently executing." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 7/22/2000 17:20'! primGetPid "Answer the OS process ID for the OS process in which I am currently executing." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/2/2002 08:15'! primGetSession "Answer the unique identifier for this session of Smalltalk running in this OS Process." "OSProcess accessor primGetSession" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primGetStdErrHandle "Answer the handle (a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primGetStdInHandle "Answer the handle (a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primGetStdOutHandle "Answer the handle (a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'pthreads' stamp: 'dtl 3/5/2006 10:51'! primGetThreadID "Answer the ID of the pthread that is currently executing (the interpreter thread). A thread ID may be a 64 bit value on some platforms, so answer a byte array containing the value in machine-dependent byte order." "OSProcess accessor primGetThreadID" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 4/30/2001 21:00'! primGetUid "Answer the user ID for the OS process in which I am currently executing." "OSProcess accessor primGetUid" ^ nil! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/3/2003 18:27'! primGetXDisplayName "Answer a string containing the name for the X display, or nil if the display was opened using the $DISPLAY environment variable. This answers the name of the X display as of the time it was last opened, which may be different from the current setting of $DISPLAY." "OSProcess accessor primGetXDisplayName" ^ self oldPrimGetXDisplayName ! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/3/2003 18:29'! primIsConnectedToXServer "Answer true if VM is currently connected to an X server." "OSProcess accessor primIsConnectedToXServer inspect" "| x | OSProcess accessor primKillDisplay. x := OSProcess accessor primIsConnectedToXServer. OSProcess accessor primOpenXDisplay. x inspect" ^ self oldPrimIsConnectedToXServer ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 3/18/2007 10:35'! primKill: listOfPids withSignal: signumOrNil "Set a list of pids to kill with signum when VM exits. If the signum parameter is nil, the default value of SIGTERM will be used." ^ self primitiveFailed! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/6/2003 06:22'! primKillDisplay "Disconnect the X display session and destroy the Squeak window on the X display." "OSProcess thisOSProcess processAccessor primKillDisplay" ^ self oldPrimKillDisplay ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 1/3/2004 19:59'! primLockFileRegion: aSQFileStruct offset: begin length: len exclusive: flag "Pass a struct SQFile on the stack, and request a lock on the specified region. If the exclusive flag is true, then request an exclusive (F:=WRLCK) lock on the file. Otherwise, request a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). Answer the result of the call to fcntl()." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 6/1/2013 17:14'! primMkdtemp: templateString "Call mkdtemp() to generate a uniquely named temporary directory from a template string. The last six characters of template must be XXXXXX and these are replaced with characters that make the directory name unique. The directory is then created with permissions 0700. Answer the new directory name." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 6/3/2013 22:33'! primMkstemp: templateString "Call mkstemp() to generate a unique temporary file from a template string. The last six characters of template must be XXXXXX and these are replaced with a string that make the filename unique. Answer a SQFile descriptor for the file stream. Contents of the template string are modified, and provide the name of the newly created file. The file is created with permissions 0600, that is, read plus write for owner only. Sender must convert the file descriptor to a FileStream before it can be used." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 6/1/2013 17:14'! primMktemp: templateString "Call mktemp() to generate a unique temporary filename from a template string. The last six characters of template must be XXXXXX and these are replaced with a string that make the filename unique. The templateString must be a mutable string, because the primitive will change its contents. Use primitiveMkstemp to avoid file creation race condition, see man 3 mktemp." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 10/8/2005 09:55'! primNice: inc "Change the scheduling priority of this OS process by the given nice increment." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 11:48'! primOSProcessPluginModuleName "Answer a string containing the module name string for the OSPP plugin." "OSProcess accessor primOSProcessPluginModuleName" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 11:48'! primOSProcessPluginModuleVersionString "Answer a string containing the version string for the OSPP plugin." "OSProcess accessor primOSProcessPluginModuleVersionString" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/3/2003 18:31'! primOpenXDisplay "Call an internal function which will open the X display session." "OSProcess thisOSProcess processAccessor primKillDisplay. (Delay forSeconds: 5) wait. OSProcess thisOSProcess processAccessor primOpenXDisplay" ^ self oldPrimOpenXDisplay ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 7/19/2010 23:38'! primPrintAllStacksOnSignal: signalNumber "Set a signal handler in the VM which will print all call stacks on the console output whenever an external signal sigNum is received. Answer the prior value of the signal handler." "OSProcess accessor primPrintAllStacksOnSignal: OSProcess accessor primSigUsr1Number" "OSProcess accessor primForwardSignal: OSProcess accessor primSigUsr1Number toSemaphore: nil" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primPutEnv: aString "Add or update an environment variable in the external OS process using a 'KEY=value' string." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 3/31/2001 15:44'! primRealpath: pathString "Resolve pathString into a real path if possible, or answer nil." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:28'! primSQFileFlush: aSQFileStruct "Pass a struct SQFile on the stack, flush the external file stream." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:29'! primSQFileSetBlocking: aSQFileStruct "Pass a struct SQFile on the stack, and call fcntl() to set the file non-blocking." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:29'! primSQFileSetNonBlocking: aSQFileStruct "Pass a struct SQFile on the stack, and call fcntl() to set the file non-blocking." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 7/22/2000 17:29'! primSQFileSetUnbuffered: aSQFileStruct "Pass a struct SQFile on the stack, set the file non-blocking." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 8/4/2002 01:13'! primSemaIndexFor: sigNum "Answer the registration index of the semaphore currently associated with the signal handler for sigNum." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:24'! primSendSigabrtTo: anIntegerPid "Send SIGABRT (abort) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:24'! primSendSigalrmTo: anIntegerPid "Send SIGALRM (alarm) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:24'! primSendSigchldTo: anIntegerPid "Send SIGCHLD (child status has changed, usually death of child) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigcontTo: anIntegerPid "Send SIGCONT (continue) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSighupTo: anIntegerPid "Send SIGHUP (hangup) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigintTo: anIntegerPid "Send SIGINT (interrupt) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigkillTo: anIntegerPid "Send SIGKILL (kill, unblockable) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigpipeTo: anIntegerPid "Send SIGPIPE (broken pipe) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigquitTo: anIntegerPid "Send SIGQUIT (quit) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:25'! primSendSigstopTo: anIntegerPid "Send SIGSTOP (stop, unblockable) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:26'! primSendSigtermTo: anIntegerPid "Send SIGTERM (termination) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:26'! primSendSigusr1To: anIntegerPid "Send SIGUSR1 (User-defined signal 1) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'OS signal sending' stamp: 'dtl 7/22/2000 17:26'! primSendSigusr2To: anIntegerPid "Send SIGUSR2 (User-defined signal 2) to the OS process identified by anIntegerPid. Answer 0 on success, -1 on failure, and nil if the pluggable primitive is not present." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/15/2007 19:47'! primSet: pid pGid: processGroupId "Set the process group ID of the process identified by pid to a new process group ID." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/15/2007 19:40'! primSetPGrp "Set a new process group for this OS process. Newly created child processes will be members of the new process group." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/18/2007 10:50'! primSetSid "Quoted from Linux man pages: setsid() creates a new session if the calling process is not a process group leader. The calling process is the leader of the new session, the process group leader of the new process group, and has no controlling tty. The process group ID and session ID of the calling process are set to the PID of the calling process. The calling process will be the only process in this new process group and in this new session." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'display handling' stamp: 'dtl 8/3/2003 18:32'! primSetXDisplayName: aStringOrNil "Set the name for the X display for use in the next call to primitiveOpenXDisplay. aStringOrNil must be either a String (such as 'myhost:0') or nil, indicating that the current value of $DISPLAY should be used." "OSProcess accessor primSetXDisplayName: ':0.0' " "OSProcess accessor primSetXDisplayName: nil " ^ self oldPrimSetXDisplayName: aStringOrNil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 8/3/2002 20:36'! primSigChldNumber "Integer value corresponding to SIGCHLD" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 12/6/2002 18:04'! primSigHupNumber "Integer value corresponding to SIGHUP" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 8/4/2002 00:19'! primSigIntNumber "Integer value corresponding to SIGINT" "OSProcess accessor primSigIntNumber" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 12/6/2002 18:05'! primSigKillNumber "Integer value corresponding to SIGKILL" "OSProcess accessor primSigKillNumber" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 8/3/2002 20:35'! primSigPipeNumber "Integer value corresponding to SIGPIPE" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 12/6/2002 18:06'! primSigQuitNumber "Integer value corresponding to SIGQUIT" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 12/6/2002 18:06'! primSigTermNumber "Integer value corresponding to SIGTERM" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 11/4/2005 06:41'! primSigUsr1Number "Integer value corresponding to SIGUSR1" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - signal forwarding' stamp: 'dtl 11/4/2005 06:42'! primSigUsr2Number "Integer value corresponding to SIGUSR2" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 8/7/2005 12:33'! primSizeOfInt "Size of an integer for this C compiler on this machine." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 8/7/2005 12:33'! primSizeOfPointer "Size of a void pointer for this C compiler on this machine." ^ self primitiveFailed ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 11/28/2010 14:06'! primTestEndOfFileFlag: aSqFileStruct "Answer whether the file represented by aSqFileStruct is at end of file, as determined by a call to feof(). This is different from StandardFileStream>>primAtEnd: which answers true if the file pointer is at the end of the file, but which does not call feof() to determine that an end of file condition has occurred. The difference is significant if aSqFileStruct represents a pipe or a device file, which may not be positionable in the sense of a conventional disk file." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 1/4/2004 15:29'! primTestLockableFileRegion: aSQFileStruct offset: begin length: len exclusive: flag "Pass a struct SQFile on the stack, and check for ability to lock the specified region. If the exclusive flag is true, then specify an exclusive (F:=WRLCK) lock on the file. Otherwise, specify a shared (F:=RDLCK) lock. Any number of Unix processes may hold a read lock (shared lock) on a file region, but only one process may hold a write lock (exclusive lock). If length is zero, then the request is for the entire file to be locked, including region extents that have not yet been allocated for the file. If the fcntl() call fails, answer -1 (the result of the failed call). Otherwise, answer an array with the following six fields: lockable (true or false) l:=pid (pid of the process preventing this lock request, or nil) l:=type (request type F:=WRLCK or F:=RDLOCK of the process preventing this lock request) l:=whence (the SEEK:=SET, SEEK:=CUR, or SEEK:=END value of the lock preventing this lock request). l:=start (offset of the region lock preventing this lock request) l:=len (length of the region lock preventing this lock request)" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 5/17/2009 21:07'! primUnixFileClose: integerFileNumber "Close a file handle at the close(2) level, using a handle returned by #primUnixFileNumber." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 2/11/2001 16:23'! primUnixFileNumber: aSQFileStruct "Pass a struct SQFile on the stack, and answer the corresponding Unix file number." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 1/3/2004 23:08'! primUnlockFileRegion: aSQFileStruct offset: begin length: len "Pass a struct SQFile on tthe stack, and unlock the specified region. Answer the result of the call to fcntl(). If the region is in the file lock cache, remove it, but otherwise ignore the cache. The cache supports Win32 semantics within a single Squeak image, but not across separate images, therefore the unlock should be attempted regardless of whether this image thinks that the region has previously been locked. Answer the result of the call to fcntl()." ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/7/2001 00:37'! primUnsetEnv: aKeyString "Remove an environment variable from the external OS process environment." ^ nil! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 8/30/2003 18:29'! primXDisplayControlPluginModuleName "Answer a string containing the module name string for the display control plugin." "OSProcess accessor primXDisplayControlPluginModuleName" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 8/30/2003 18:32'! primXDisplayControlPluginModuleVersionString "Answer a string containing the version string for the display control plugin." "OSProcess accessor primXDisplayControlPluginModuleVersionString" ^ nil ! ! !UnixOSProcessAccessor methodsFor: 'printing' stamp: 'dtl 9/10/2000 10:16'! printOn: aStream "In English, say 'a Unix' rather than 'an Unix'. Therefore do not use super printOn, which treats $U as a vowel." aStream nextPutAll: 'a '; nextPutAll: self class name; nextPutAll: ' on pid '; nextPutAll: self primGetPid printString ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 9/10/2000 11:59'! putPath: aString "Convenience method. Set the environment PATH variable to aString." | pathString | pathString := 'PATH=', aString, ((Character value: 0) asString). ^ self environmentPut: pathString ! ! !UnixOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 1/25/2013 18:59'! realpath: pathString "Get the real path for pathString from the external OS process." "OSProcess accessor realpath: '/tmp'" "OSProcess accessor realpath: OSProcess defaultPathString" "OSProcess accessor realpath: '/bogus/path/name'" ^ self primRealpath: pathString ! ! !UnixOSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 3/5/2005 13:10'! register: fileRegionLock "If an object equal to fileRegionLock exists in the registry, answer it. Otherwise, add fileRegionLock to the registry and answer fileRegionLock. Caching is enabled when EmulateWin32FileLocking is true." ^ self emulateWin32FileLocking ifTrue: [super register: fileRegionLock] ifFalse: [fileRegionLock] ! ! !UnixOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 8/15/2010 15:30'! restartChildWatcherProcess "OSProcess accessor restartChildWatcherProcess" self finalize. ^ self grimReaperProcess ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:45'! restoreSigChld "Unset a SIGCHLD signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigChld" ^ self restoreSignal: self primSigChldNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:47'! restoreSigHup "Unset a SIGHUP signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigHup" ^ self restoreSignal: self primSigHupNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:46'! restoreSigInt "Unset a SIGINT signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigInt" ^ self restoreSignal: self primSigIntNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:48'! restoreSigKill "Unset a SIGKILL signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigKill" self notify: 'SIGKILL and SIGSTOP signals cannot be caught, see man signal(2)'. ^ self restoreSignal: self primSigIntNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:48'! restoreSigPipe "Unset a SIGPIPE signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigPipe" ^ self restoreSignal: self primSigPipeNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:49'! restoreSigQuit "Unset a SIGQUIT signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigQuit" ^ self restoreSignal: self primSigQuitNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:49'! restoreSigTerm "Unset a SIGTERM signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigTerm" ^ self restoreSignal: self primSigTermNumber ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:49'! restoreSigUsr1 "Unset a SIGUSR1 signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigUsr1" ^ self restoreSignal: self primSigUsr1Number ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 11/4/2005 06:50'! restoreSigUsr2 "Unset a SIGUSR2 signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSigUsr2" ^ self restoreSignal: self primSigUsr2Number ! ! !UnixOSProcessAccessor methodsFor: 'signal forwarding' stamp: 'dtl 12/28/2002 15:33'! restoreSignal: signalNumber "Unset a signal handler and unregister the Smalltalk semaphore. Answer the unregistered Semaphore, or nil if unable to restore the signal (possibly because no handler had been set)." "OSProcess accessor restoreSignal: OSProcess accessor primSigIntNumber" | semaphoreIndex sema | semaphoreIndex := self primSemaIndexFor: signalNumber. semaphoreIndex ifNotNil: [sema := Smalltalk externalObjects at: semaphoreIndex ifAbsent: []. sema ifNotNil: [self primForwardSignal: signalNumber toSemaphore: nil. Smalltalk unregisterExternalObject: sema]]. ^ sema ! ! !UnixOSProcessAccessor methodsFor: 'fork and exec' stamp: 'dtl 11/21/2010 12:10'! safeToForkSqueak "The forkSqueak method is currently supported only for X11 displays with XDisplayControlPlugin available. If the plugin is not available, the child Squeak VM will continue interacting with the X display, which leads to errors in the parent Squeak, including VM crashes." ^self canControlXDisplay! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 11/28/2010 12:15'! setBlocking: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set for blocking I/O." ^ self primSQFileSetBlocking: (self handleFromAccessor: anIOHandle) ! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 11/28/2010 12:16'! setNonBlocking: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set it non-blocking." ^ self primSQFileSetNonBlocking: (self handleFromAccessor: anIOHandle)! ! !UnixOSProcessAccessor methodsFor: 'signal print stack trace' stamp: 'dtl 7/20/2010 00:07'! setPrintAllStacksOnSigUsr1 "Set a signal handler in the VM that will print all call stacks on console output whenever a SIGUSR1 is received. Answer an identifier for the previously defined signal handler or nil if this signal handler has already been set." "OSProcess accessor setPrintAllStacksOnSigUsr1" "OSProcess accessor clearPrintAllStacksOnSigUsr1" ^self primPrintAllStacksOnSignal: self primSigUsr1Number ! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 11/28/2010 12:17'! setUnbuffered: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set unbuffered I/O." ^ self primSQFileSetUnbuffered: (self handleFromAccessor: anIOHandle)! ! !UnixOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 1/25/2004 21:31'! sigChldSemaphore "Answer the value of sigChldSemaphore" ^ sigChldSemaphore ifNil: [sigChldSemaphore := self forwardSigChld]. ! ! !UnixOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 1/25/2004 21:29'! sigChldSemaphore: anObject "Set the value of sigChldSemaphore" sigChldSemaphore := anObject! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 3/25/2001 15:34'! sizeOfInt "Size of an integer on this machine with this C compiler." ^ self primSizeOfInt! ! !UnixOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 3/25/2001 20:55'! sizeOfPointer "Size of a void pointer on this machine with this C compiler." ^ self primSizeOfPointer! ! !UnixOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 10/6/2001 07:27'! unixFileNumber: anIOHandle "Answer the integer Unix file number corresponding to anIOHandle." ^ anIOHandle ifNotNil: [self primUnixFileNumber: (self handleFromAccessor: anIOHandle)] ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 4/10/2005 15:17'! unlockAllForFile: aFileStream "Unlock and uncache all locks associated with aFileStream. This could be called before closing a stream, for example." (self registeredLocksForFile: aFileStream) do: [:ea | self unlockFileRegion: ea] ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/22/2004 15:02'! unlockFile: aFileStream "Unlock the file represented by aFileStream. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self unlockFile: aFileStream exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'jf 2/22/2004 17:30'! unlockFile: aFileStream exclusive: flag "Unlock the file represented by aFileStream. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." | fileLock | aFileStream ifNil: [^ nil]. fileLock := OSFileLock onFile: aFileStream exclusive: flag. ^ self unlockFileRegion: fileLock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/12/2006 07:05'! unlockFile: aFileStream exclusive: flag ifFail: failBlock "Unlock the file represented by aFileStream. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." | fileLock | aFileStream ifNil: [^ failBlock value]. fileLock := OSFileLock onFile: aFileStream exclusive: flag. ^ self unlockFileRegion: fileLock ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/22/2004 15:01'! unlockFile: aFileStream from: start to: end "Pass a struct SQFile on the stack, and unlock the specified region. Answer the result of the call to fcntl(). If the region is in the file lock cache, remove it, but otherwise ignore the cache. The cache supports Win32 semantics within a single Squeak image, but not across separate images, therefore the unlock should be attempted regardless of whether this image thinks that the region has previously been locked. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self unlockFile: aFileStream from: start to: end exclusive: true ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 2/22/2004 15:09'! unlockFile: aFileStream from: start to: end exclusive: flag "Pass a struct SQFile on the stack, and unlock the specified region. Answer the result of the call to fcntl(). If the region is in the file lock cache, remove it, but otherwise ignore the cache. The cache supports Win32 semantics within a single Squeak image, but not across separate images, therefore the unlock should be attempted regardless of whether this image thinks that the region has previously been locked. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." | fileRegion | aFileStream ifNil: [^ nil]. fileRegion := OSFileRegionLock onFile: aFileStream from: start to: end exclusive: flag. ^ self unlockFileRegion: fileRegion ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 8/30/2009 14:54'! unlockFile: fileStream from: start to: end exclusive: writeLockFlag ifFail: failBlock | lock | lock := OSFileRegionLock onFile: fileStream from: start to: end exclusive: writeLockFlag. ^ self unlockFileRegion: lock ifFail: [failBlock value]! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 8/30/2009 16:25'! unlockFile: fileStream from: start to: end ifFail: failBlock ^ self unlockFile: fileStream from: start to: end exclusive: true ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/12/2006 07:06'! unlockFile: aFileStream ifFail: failBlock "Unlock the file represented by aFileStream. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self unlockFile: aFileStream exclusive: true ifFail: failBlock ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/8/2006 07:12'! unlockFileRegion: aFileLock "Pass a struct SQFile on the stack, and unlock the specified region. Answer the result of the call to fcntl(). If the region is in the file lock cache, remove it, but otherwise ignore the cache. The cache supports Win32 semantics within a single Squeak image, but not across separate images, therefore the unlock should be attempted regardless of whether this image thinks that the region has previously been locked. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." ^ self unlockFileRegion: aFileLock ifFail: [nil] ! ! !UnixOSProcessAccessor methodsFor: 'file locking' stamp: 'dtl 5/20/2006 12:46'! unlockFileRegion: aFileLock ifFail: failBlock "Pass a struct SQFile on the stack, and unlock the specified region. Answer the result of the call to fcntl(). If the region is in the file lock cache, remove it, but otherwise ignore the cache. The cache supports Win32 semantics within a single Squeak image, but not across separate images, therefore the unlock should be attempted regardless of whether this image thinks that the region has previously been locked. Answer a descriptor for the unlocked file region, an Array of file handle and region interval; or answer nil on error or if the region did not appear in the cache. Warning: The registry permits compatibility with Win32 file locking semantics, but only within a single Squeak image. Multiple cooperating images must not rely on the overlap checking, because the registry is local to this image and cannot be shared across images in different OS process contexts." aFileLock ifNil: [^ failBlock value]. "Check region lock overlap for Win32 compatibility" self emulateWin32FileLocking ifTrue: [ | unregisteredLock | (unregisteredLock := self unregister: aFileLock) ifNil: [^ failBlock value] ifNotNil: [unregisteredLock unlock ifTrue: [^ unregisteredLock] ifFalse: [^ failBlock value]]] ifFalse: [aFileLock unlock ifTrue: [^ aFileLock] ifFalse: [^ failBlock value]] ! ! !UnixOSProcessAccessor methodsFor: 'file lock registry' stamp: 'dtl 3/5/2005 13:10'! unregister: fileRegionLock "If an object equal to fileRegionLock exists in the registry, remove it and answer the object. Otherwise answer nil. Caching is enabled when EmulateWin32FileLocking is true." ^ self emulateWin32FileLocking ifTrue: [super unregister: fileRegionLock] ifFalse: [nil] ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:45'! xdcpModuleName "Answer a string containing the module name string for the display control plugin." "OSProcess accessor xdcpModuleName" ^ self primXDisplayControlPluginModuleName ! ! !UnixOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 10:46'! xdcpVersionString "Answer a string containing the version string for the display control plugin." "OSProcess accessor xdcpVersionString" ^ self primXDisplayControlPluginModuleVersionString ! ! !WindowsOSProcessAccessor commentStamp: '' prior: 101817664! I provide access to an operating system process, such as the process in which the Squeak VM is currently running. I am based on the Win32 process model for Windows and Windows NT.! !WindowsOSProcessAccessor class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:50'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ OSProcess isWindows ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/26/2002 16:11'! activeHandles "Answer an Array of handles for all children that are believed to be running." ^ OSProcess thisOSProcess activeHandles ! ! !WindowsOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 9/10/2002 09:24'! canAccessChildProcess: anExternalProcess "Is the child process still there? Maybe not if we have restarted the image and anExternalProcess refers to a process which died while we were not watching." | handle | ^ (handle := anExternalProcess handle) notNil ifTrue: [self primCanAccessChildProcess: handle] ifFalse: [false] ! ! !WindowsOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 2/22/2002 22:17'! canAccessSystem "Answer true if it is possible to access the external process, else false. Failure to access the external process is probably due to lack of a UnixOSProcessPlugin module." ^ self primGetPid notNil ! ! !WindowsOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 2/27/2002 11:56'! childWatcherThread "A thread which signals my sigChldSemaphore when any child process exits." ^ childWatcherThread! ! !WindowsOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 2/27/2002 11:44'! childWatcherThread: aThreadObject "A thread which signals my sigChldSemaphore when any child process exits." childWatcherThread := aThreadObject ! ! !WindowsOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 2/26/2002 08:43'! finalize "Clean up grimReaper and associated semaphore." grimReaper ifNotNil: [grimReaper terminate. grimReaper := nil]. sigChldSemaphore ifNotNil: [Smalltalk unregisterExternalObject: sigChldSemaphore. sigChldSemaphore := nil]. semaIndex := nil ! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/27/2002 13:22'! getMainThread "Answer the main thread of this OS process. The handle for this thread is a pseudo-handle, and cannot be used to terminate the thread." "OSProcess accessor getMainThread" ^ WindowsThread threadID: self primGetPid handle: self primGetPidHandle running: true ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:09'! getStdErr "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing, or nil if the IO handle cannot be obtained." "OSProcess accessor getStdErr" | error | error := self primGetStdErrorForSession: self sessionIdentifier. ^ (error notNil and: [error last]) ifTrue: [self ioAccessorFromSQFile: error first] ifFalse: [nil] ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:11'! getStdErrHandle "Answer the handle (a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing." ^ self ioAccessorFromSQFile: self getStdErr ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:11'! getStdIn "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing, or nil if the IO handle cannot be obtained." "OSProcess accessor getStdIn" | input | input := self primGetStdInputForSession: self sessionIdentifier. ^ (input notNil and: [input last]) ifTrue: [self ioAccessorFromSQFile: input first] ifFalse: [nil] ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:10'! getStdInHandle "Answer the handle (a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing." ^ self ioAccessorFromSQFile: self getStdIn ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:11'! getStdOut "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing, or nil if the IO handle cannot be obtained." "OSProcess accessor getStdOut" | output | output := self primGetStdOutputForSession: self sessionIdentifier. ^ (output notNil and: [output last]) ifTrue: [self ioAccessorFromSQFile: output first] ifFalse: [nil] ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/25/2005 16:09'! getStdOutHandle "Answer the handle (a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing." ^ self ioAccessorFromSQFile: self getStdOut ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 9/3/2010 13:13'! grimReaperProcess "This is a process which waits for the death of a child OSProcess, and informs any dependents of the change." grimReaper ifNil: [grimReaper := [ [self sigChldSemaphoreSet wait. self changed: #childProcessStatus] repeat] newProcess. grimReaper resume. "name selected to look reasonable in the process browser" grimReaper name: ((ReadStream on: grimReaper hash asString) next: 5) , ': the child OSProcess watcher']. ^ grimReaper! ! !WindowsOSProcessAccessor methodsFor: 'initialize - release' stamp: 'dtl 3/2/2002 08:33'! initialize "Create and register a semaphore to be used for signaling external process exits" super initialize. self sigChldSemaphoreSet. self grimReaperProcess ! ! !WindowsOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 9/26/2005 07:45'! isExecutable: aPathName "Answer true if file at aPathName has execute permission for this process." "FIXME: Default to true for Windows" ^ true ! ! !WindowsOSProcessAccessor methodsFor: 'nonblocking read' stamp: 'dtl 10/1/2005 09:26'! lastReadFor: aSemaphoreIndex "A character has been read into an external buffer corresponding to aSemaphoreIndex, and is now available. Answer integer value of the character, or nil if no character was read, or -1 if an error occurred on the read." | c readResult | readResult := Array new: 3. c := self primLastReadFor: aSemaphoreIndex storeIn: readResult. (c < 1) ifTrue: [self error: 'primLastReadFor: error, returned negative value']. ^ c ! ! !WindowsOSProcessAccessor methodsFor: 'nonblocking read' stamp: 'dtl 10/1/2005 09:26'! lastReadFor: aSemaphoreIndex storeIn: aThreeElementArray "A character has been read into an external buffer corresponding to aSemaphoreIndex, and is now available. Answer integer value of the character, or nil if no character was read, or -1 if an error occurred on the read. The results of the read call are stored in aThreeElementArray as a side effect." ^ self primLastReadFor: aSemaphoreIndex storeIn: aThreeElementArray ! ! !WindowsOSProcessAccessor methodsFor: 'nonblocking read' stamp: 'dtl 4/1/2002 11:02'! nextFrom: aFileStream signaling: aSemaphoreIndex "Read the next character from aFileStream into a buffer in the VM. When the read completes, signal the specified Semaphore to notify that the character is available." | sqFile | sqFile := UseIOHandle ifTrue: [aFileStream ioHandle handle] ifFalse: [aFileStream fileID]. ^ self primNextFrom: sqFile signaling: aSemaphoreIndex ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:03'! openStdErr "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard error for the OS process in which I am currently executing. Open a console if necessary to make standard error available." "OSProcess accessor openStdErr" | error | error := self primGetStdErrorForSession: self sessionIdentifier. error ifNil: [^ nil]. error last ifFalse: [self primAllocConsole. error := self primGetStdOutputForSession: self sessionIdentifier]. ^ self ioAccessorFromSQFile: error first ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:04'! openStdIn "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard input for the OS process in which I am currently executing. Open a console if necessary to make standard input available." "OSProcess accessor openStdIn" | input | input := self primGetStdInputForSession: self sessionIdentifier. input ifNil: [^ nil]. input last ifFalse: [self primAllocConsole. input := self primGetStdOutputForSession: self sessionIdentifier]. ^ self ioAccessorFromSQFile: input first ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/7/2002 20:05'! openStdOut "Answer an IO handle (representing a SQFile data structure in interp.c) for the standard output for the OS process in which I am currently executing. Open a console if necessary to make standard input available." "OSProcess accessor openStdOut" | output | output := self primGetStdOutputForSession: self sessionIdentifier. output ifNil: [^ nil]. output last ifFalse: [self primAllocConsole. output := self primGetStdOutputForSession: self sessionIdentifier]. ^ self ioAccessorFromSQFile: output first ! ! !WindowsOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 11:46'! osppModuleName "Answer a string containing the module name string for the OSPP plugin." "OSProcess accessor osppModuleName" ^ self primOSProcessPluginModuleName ! ! !WindowsOSProcessAccessor methodsFor: 'plugin identification' stamp: 'dtl 10/1/2005 11:46'! osppModuleVersionString "Answer a string containing the version string for the OSPP plugin." "OSProcess accessor osppModuleVersionString" ^ self primOSProcessPluginModuleVersionString ! ! !WindowsOSProcessAccessor methodsFor: 'console' stamp: 'dtl 3/25/2002 06:28'! primAllocConsole "Allocate a console if not already allocated." "OSProcess accessor primAllocConsole" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 8/17/2002 12:46'! primBufferValuesAt: aSemaphoreIndex "For debugging only. Answer the current values of readCharBufferArray, readCharCountArray, and readCharStatusArray at index, an integer corresponding to a semaphore for one read handler thread. Answer an Array with the buffered character, the character count, and the status value." "OSProcess accessor primBufferValuesAt: 1" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 9/10/2002 09:19'! primCanAccessChildProcess: handleObject "Answer true if the OS process represented by a HANDLE can be accessed by this OS process." ^ false! ! !WindowsOSProcessAccessor methodsFor: 'handles' stamp: 'dtl 2/25/2002 07:37'! primCloseHandle: handleObject "Close the specified handle, which may refer to a process, a thread, or some other Win32 object." "| procInfo | procInfo := OSProcess accessor primCommand: 'SOL'. OSProcess accessor primCloseHandle: procInfo first" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'deprecated' stamp: 'dtl 9/9/2002 09:24'! primCommand: commandString "Run a command in a new external process. Answer a result array with hProcess, hThread, dwProcessId, dwThreadId. This primitive has been replaced by #primCommand:stdIn:stdOut:stdErr:, and will be removed in future versions of OSProcess." "OSProcess accessor primCommand: 'C:\WINDOWS\SOL'" "OSProcess accessor primCommand: 'SOL'" "OSProcess accessor primCommand: 'NoSuchProgram'" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'process creation' stamp: 'dtl 9/9/2002 09:19'! primCommand: commandString stdIn: inputFileIoHandle stdOut: outputFileIoHandle stdErr: errorFileIoHandle "Run a command in a new external process. The standard input, output and error stream handles are sqFile byte arrays (not Win32 HANDLE arrays), and may be nil. Answer a result array with hProcess, hThread, dwProcessId, dwThreadId." "OSProcess accessor primCommand: 'C:\WINDOWS\SOL' stdIn: nil stdOut: nil stdErr: nil" "OSProcess accessor primCommand: 'SOL' stdIn: nil stdOut: nil stdErr: nil" "OSProcess accessor primCommand: 'NoSuchProgram' stdIn: nil stdOut: nil stdErr: nil" "OSProcess accessor primCommand: 'SOL' stdIn: (FileStream fileNamed: 'output.tmp') fileID stdOut: nil stdErr: nil" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'pipe open' stamp: 'dtl 11/28/2010 12:51'! primCreatePipe "Create a pipe, and answer an array of two file handles (SQFile data structures in interp.c) for the pipe reader and writer." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'pipe open' stamp: 'dtl 11/28/2010 12:52'! primCreatePipeWithSessionIdentifier: aByteArray "Create a pipe, and answer an array of two file handles (SQFile data structures in interp.c) for the pipe reader and writer." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'console' stamp: 'dtl 3/25/2002 06:27'! primFreeConsole "Deallocate the console if allocated." "OSProcess accessor primFreeConsole" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 9/6/2002 14:58'! primGetCurrentWorkingDirectory "Call getcwd() to get the current working directory." "OSProcess accessor primGetCurrentWorkingDirectory" ^ nil ! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/22/2002 18:23'! primGetEnvironmentStrings "Answer the environment block in the form of an Array of Strings. The caller is expected to parse the strings into a dictionary of keys and values." ^ nil ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/25/2002 08:23'! primGetExitStatusForHandle: handleObject "Answer the exit status for the process represented by a HANDLE. Fail if the process is still active, or if the GetExitCodeProcess call fails." "| procInfo | procInfo := OSProcess accessor primCommand: 'SOL'. (Delay forSeconds: 5) wait. OSProcess accessor primGetExitStatusForHandle: procInfo first" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/27/2002 13:20'! primGetMainThreadHandle "Answer a pseudo-handle for my main thread." "OSProcess accessor primGetMainThreadHandle" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 3/4/2006 17:57'! primGetMainThreadID "Answer the ID of my main thread." "OSProcess accessor primGetMainThreadID" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/22/2002 16:06'! primGetPid "Answer the OS process ID for the OS process in which I am currently executing." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'external process access' stamp: 'dtl 2/27/2002 13:21'! primGetPidHandle "Answer the pseudo-handle for my OS process" "OSProcess accessor primGetPidHandle" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'session identification' stamp: 'dtl 3/2/2002 08:15'! primGetSession "Answer the unique identifier for this session of Smalltalk running in this OS Process." "OSProcess accessor primGetSession" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 9/7/2002 14:55'! primGetStdErrorForSession: sessionIdentifierByteArray "Answer a two element array containing the sqFile data structure representing standard error stream for my OS process, and a flag (true or false) to indicate whether the sqFile data structure contains a valid HANDLE. If no standard error stream is available for this OS process, the sqFile data structure will contain an invalid HANDLE value, which will result in failures on subsequent accesses." "OSProcess accessor primGetStdError" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 9/7/2002 14:55'! primGetStdInputForSession: sessionIdentifierByteArray "Answer a two element array containing the sqFile data structure representing standard input stream for my OS process, and a flag (true or false) to indicate whether the sqFile data structure contains a valid HANDLE. If no standard input stream is available for this OS process, the sqFile data structure will contain an invalid HANDLE value, which will result in failures on subsequent accesses." "OSProcess accessor primGetStdInput" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 9/7/2002 14:55'! primGetStdOutputForSession: sessionIdentifierByteArray "Answer a two element array containing the sqFile data structure representing standard output stream for my OS process, and a flag (true or false) to indicate whether the sqFile data structure contains a valid HANDLE. If no standard output stream is available for this OS process, the sqFile data structure will contain an invalid HANDLE value, which will result in failures on subsequent accesses." "OSProcess accessor primGetStdOutput" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 09:26'! primLastReadFor: aSemaphoreIndex "A character has been read into an external buffer corresponding to aSemaphoreIndex, and is now available. Answer integer value of the character, or nil if no character was read, or -1 if an error occurred on the read." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 09:27'! primLastReadFor: aSemaphoreIndex storeIn: aThreeElementArray "A character has been read into an external buffer corresponding to aSemaphoreIndex, and is now available. Answer integer value of the character, or nil if no character was read, or -1 if an error occurred on the read. Contents of the aThreeElementArray will be status of the read call, character read, and character count (which should always be 1)." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 4/1/2002 10:58'! primNextFrom: anIOHandle signaling: aSemaphoreIndex "Read the next character from anIOHandle (a SQFile struct) into a buffer in the VM. When the read completes, signal the specified Semaphore to notify that the character is available." ^ nil ! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 11:50'! primOSProcessPluginModuleName "Answer a string containing the module name string for the OSPP plugin." "OSProcess accessor primOSProcessPluginModuleName" ^ nil ! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 10/1/2005 11:51'! primOSProcessPluginModuleVersionString "Answer a string containing the version string for the OSPP plugin." "OSProcess accessor primOSProcessPluginModuleVersionString" ^ nil ! ! !WindowsOSProcessAccessor methodsFor: 'testing' stamp: 'dtl 10/10/2012 08:05'! primOneShot "Answer true the first time this is called in a Squeak session, and false thereafter." "OSProcess accessor primOneShot" ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'handles' stamp: 'dtl 3/29/2002 17:47'! primSetStdErr: anIOHandle "Set the standard error handle to that of anIOHandle, where anIOHandle is a ByteArray representation of a SQFile structure." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'handles' stamp: 'dtl 3/29/2002 17:48'! primSetStdIn: anIOHandle "Set the standard input handle to that of anIOHandle, where anIOHandle is a ByteArray representation of a SQFile structure." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'handles' stamp: 'dtl 3/29/2002 17:48'! primSetStdOut: anIOHandle "Set the standard output handle to that of anIOHandle, where anIOHandle is a ByteArray representation of a SQFile structure." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/26/2002 16:14'! primSetWaitForAnyProcessExit: arrayOfProcessHandleObjects thenSignalSemaphoreWithIndex: index "Set up a thread to wait for a process HANDLE to exit, then signal the Semaphore at index. This provides asychronous notification of an external process exit." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/27/2002 11:34'! primTerminateThread: aThreadHandle "Kill the thread. No cleanup is performed, so use with caution for a thread which is (for example) manipulating a mutex. Answer true for success, else false." ^ nil! ! !WindowsOSProcessAccessor methodsFor: 'private - primitive access' stamp: 'dtl 4/8/2007 10:54'! primTestEndOfFileFlag: aSqFileStruct "Answer whether the file represented by aSqFileStruct is at end of file, as determined by a call to feof(). This is different from StandardFileStream>>primAtEnd: which answers true if the file pointer is at the end of the file, but which does not call feof() to determine that an end of file condition has occurred. The difference is significant if aSqFileStruct represents a pipe or a device file, which may not be positionable in the sense of a conventional disk file." self flag: 'FIXME'. "not yet implemented in OSPP for Windows" ^ self primitiveFailed ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 1/13/2007 09:48'! restartChildWatcherThread: arrayOfProcessHandleObjects "Start a new child watcher thread. If a thread is alread active, terminate it before starting a new one." self childWatcherThread ifNotNil: [childWatcherThread terminate]. self childWatcherThread: (self setWaitForAnyProcessExit: arrayOfProcessHandleObjects). ^ childWatcherThread ! ! !WindowsOSProcessAccessor methodsFor: 'accessing' stamp: 'dtl 2/25/2002 21:17'! semaIndex "Index of the registered Semaphore" semaIndex ifNil: [self initialize]. ^ semaIndex! ! !WindowsOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 9/26/2005 07:35'! setBlocking: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set for blocking I/O." "FIXME: need to implement this for Win32" "self notify: 'there is no general mechanism to set blocking IO on Win32'" ! ! !WindowsOSProcessAccessor methodsFor: 'file control' stamp: 'dtl 9/26/2005 07:36'! setNonBlocking: anIOHandle "Convert anIOHandle to an SQFile data structure and call primitive to set it non-blocking." "FIXME: need to implement this for Win32" "self notify: 'there is no general mechanism to set nonblocking IO on Win32'" ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/9/2002 07:22'! setStdErr: aFileStream "Set the standard error handle for this OSProcess to be that of aFileStream" "| fs | fs := FileStream fileNamed: 'stdError.tmp'. OSProcess accessor setStdErr: fs" | sqFile | aFileStream ifNil: [^ false]. sqFile := UseIOHandle ifTrue: [aFileStream ioHandle handle] ifFalse: [aFileStream fileID]. ^ self primSetStdErr: sqFile ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/9/2002 07:22'! setStdIn: aFileStream "Set the standard input handle for this OSProcess to be that of aFileStream" "| fs | fs := FileStream fileNamed: 'stdInput.tmp'. fs nextPutAll: 'this is a line of text'; cr. fs position: 0. OSProcess accessor setStdIn: fs" | sqFile | aFileStream ifNil: [^ false]. sqFile := UseIOHandle ifTrue: [aFileStream ioHandle handle] ifFalse: [aFileStream fileID]. ^ self primSetStdIn: sqFile ! ! !WindowsOSProcessAccessor methodsFor: 'standard IO handles' stamp: 'dtl 9/9/2002 07:22'! setStdOut: aFileStream "Set the standard output handle for this OSProcess to be that of aFileStream" "| fs | fs := FileStream fileNamed: 'stdOutput.tmp'. OSProcess accessor setStdOut: fs" | sqFile | aFileStream ifNil: [^ false]. sqFile := UseIOHandle ifTrue: [aFileStream ioHandle handle] ifFalse: [aFileStream fileID]. ^ self primSetStdOut: sqFile ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/26/2002 19:08'! setWaitForAnyProcessExit: arrayOfProcessHandleObjects "Set up a thread to wait for a process HANDLE to exit, then signal the Semaphore at index. This provides asychronous notification of an external process exit. The caller should close the thread handle when it is no longer needed." "OSProcess command: 'SOL'. OSProcess accessor setWaitForAnyProcessExit: OSProcess thisOSProcess activeHandles." | threadInfo | arrayOfProcessHandleObjects isEmpty ifTrue: [^ nil]. threadInfo := self primSetWaitForAnyProcessExit: arrayOfProcessHandleObjects thenSignalSemaphoreWithIndex: self semaIndex. ^ WindowsThread threadID: threadInfo last handle: threadInfo first running: true ! ! !WindowsOSProcessAccessor methodsFor: 'child process management' stamp: 'dtl 2/25/2002 21:12'! sigChldSemaphoreSet sigChldSemaphore ifNil: [sigChldSemaphore := Semaphore new. semaIndex := Smalltalk registerExternalObject: sigChldSemaphore]. ^ sigChldSemaphore! ! !PseudoAioEventHandler commentStamp: 'dtl 11/25/2006 10:42' prior: 101817915! PseudoAioEventHandler is a replacement for AioEventHandler for use when an AioPlugin is not present. It creates a polling loop by generating #changed: events periodically. With a real AioEventHandler, events are generated only when actual IO activity occurs, while the PseudoAioEventHandler produces regularly timed events regardless of whether any actual IO changes have happened.! !PseudoAioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 11/25/2006 10:49'! close "When the FileStream or Socket handled by this aio handler is closed, it should send #close to this handler." eventGenerator ifNotNil: [eventGenerator terminate]! ! !PseudoAioEventHandler methodsFor: 'accessing' stamp: 'dtl 11/25/2006 13:17'! eventGenerator "Answer the value of eventGenerator" ^ eventGenerator ifNil: [eventGenerator := self eventGeneratorProcess]! ! !PseudoAioEventHandler methodsFor: 'initialize-release' stamp: 'RB 9/3/2010 11:52'! eventGeneratorProcess "A process that generates periodic #changed events" | d p| d := Delay forMilliseconds: 125. p := [[self changed. d wait] repeat] newProcess. ^p resume.! ! !PseudoAioEventHandler methodsFor: 'initialize-release' stamp: 'dtl 11/25/2006 13:15'! initialize self eventGenerator. ^ super initialize! ! !ExternalPipe commentStamp: 'dtl 3/10/2006 11:06' prior: 101818358! I represent a pipe provided by the underlying operating system, such as a Unix pipe. I have a reader stream and a writer stream which behave similarly to a read-only FileStream and a writeable FileStream. Subclasses implement buffering behavior for the reader end of a pipe.! !ExternalPipe class methodsFor: 'instance creation' stamp: 'dtl 4/2/2006 21:34'! blockingPipe "Warning: a read on a blocking pipe will hang the VM if there is insufficient data in the pipe to fulfill the read request." "OSPipe blockingPipe" ^ super basicNew initialize; setBlocking ! ! !ExternalPipe class methodsFor: 'instance creation' stamp: 'dtl 4/2/2006 21:34'! bufferedBlockingPipe "Warning: a read on a blocking pipe will hang the VM if there is insufficient data in the pipe to fulfill the read request." "OSPipe bufferedBlockingPipe" ^ (super basicNew initialize; setBlocking) setBufferedReader; yourself ! ! !ExternalPipe class methodsFor: 'instance creation' stamp: 'dtl 4/2/2006 21:33'! bufferedNonBlockingPipe "OSPipe bufferedNonBlockingPipe" ^ (super basicNew initialize; setNonBlocking) setBufferedReader; yourself ! ! !ExternalPipe class methodsFor: 'instance creation' stamp: 'dtl 4/2/2006 21:35'! new "ExternalPipe new" ^ self nonBlockingPipe ! ! !ExternalPipe class methodsFor: 'instance creation' stamp: 'dtl 3/25/2006 14:14'! nonBlockingPipe "OSPipe nonBlockingPipe" ^ super basicNew initialize; setNonBlocking ! ! !ExternalPipe class methodsFor: 'examples' stamp: 'dtl 3/7/2006 19:44'! testPipe "OSPipe testPipe inspect" | pipe result | pipe := self new. pipe nextPutAll: 'string to send through an OSPipe'. pipe writer close. result := pipe upToEnd. pipe close. ^ result ! ! !ExternalPipe methodsFor: 'testing' stamp: 'dtl 4/2/2006 21:14'! atEnd "Answer whether the receiver can access any more objects." ^ writer closed and: [self peek == nil] ! ! !ExternalPipe methodsFor: 'testing' stamp: 'dtl 6/4/2006 16:01'! atEndOfFile "Answer whether the receiver is at its end based on the result of the last read operation. This uses feof() to test the underlying file stream status, and can be used as an alternative to #atEnd, which does not properly report end of file status for an OSPipe." ^ reader atEndOfFile ! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 20:00'! blocking "True if reader end is set to blocking mode." ^ blocking ifNil: [blocking := true]! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 20:00'! blocking: trueOrFalse "True if reader end is set to blocking mode." blocking := trueOrFalse! ! !ExternalPipe methodsFor: 'finalization' stamp: 'dtl 3/7/2006 19:44'! close self closeWriter; closeReader ! ! !ExternalPipe methodsFor: 'finalization' stamp: 'dtl 3/7/2006 19:44'! closeReader reader ifNotNil: [reader close] ! ! !ExternalPipe methodsFor: 'finalization' stamp: 'dtl 3/7/2006 19:44'! closeWriter writer ifNotNil: [writer close] ! ! !ExternalPipe methodsFor: 'testing' stamp: 'dtl 9/16/2002 17:35'! closed ^ reader closed! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 4/16/2003 06:01'! contents "Answer contents of the pipe, and return the contents to the pipe so it can still be read." "ExternalPipe new nextPutAll: 'hello'; contents" | s | self closed ifTrue: [self notify: self printString, ' ', self reader printString, ' closed'. ^ nil]. s := self reader upToEnd. s isEmpty ifFalse: [self writer closed ifTrue: [self notify: self printString, ' ', self writer printString, ' closed, cannot replace contents'] ifFalse: [self nextPutAll: s]]. ^ s! ! !ExternalPipe methodsFor: 'character writing' stamp: 'dtl 3/7/2006 19:44'! cr "Append a return character to the receiver." self writer cr! ! !ExternalPipe methodsFor: 'initialize-release' stamp: 'dtl 3/25/2006 14:08'! initialize ^ self makePipe ! ! !ExternalPipe methodsFor: 'testing' stamp: 'dtl 3/26/2006 15:48'! isPipe ^ true ! ! !ExternalPipe methodsFor: 'initialize-release' stamp: 'dtl 3/7/2006 19:44'! makePipe "Create an OS pipe and attach it to my input and output streams." | handleArray | handleArray := OSProcess accessor makePipeHandles. handleArray isNil ifTrue: [self error: 'cannot create OS pipe'] ifFalse: [self reader: (AttachableFileStream name: 'pipeReader' attachTo: (handleArray at: 1) writable: false). self writer: (AttachableFileStream name: 'pipeWriter' attachTo: (handleArray at: 2) writable: true)] ! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 9/16/2002 17:33'! next "Answer the next object accessible by the receiver." ^ reader next! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 9/16/2002 17:33'! next: anInteger "Answer the next anInteger elements of my collection." ^ reader next: anInteger ! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! nextPut: anObject "Insert the argument, anObject, as the next object accessible by the receiver. Answer anObject." ^ writer nextPut: anObject! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! nextPutAll: aCollection "Append the elements of aCollection to the sequence of objects accessible by the receiver. Answer aCollection." ^ writer nextPutAll: aCollection! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 9/16/2002 17:34'! peek ^ reader peek! ! !ExternalPipe methodsFor: 'printing' stamp: 'dtl 4/2/2006 11:40'! printOn: aStream "The implementation of Stream>>printOn: has bad side effects when used for OSPipe. This implementation is copied from Object." | title | title := self class name. aStream nextPutAll: (title first isVowel ifTrue: ['an '] ifFalse: ['a ']); nextPutAll: title! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! reader "Answer a stream on the read end of the pipe." ^ reader! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! reader: aReadStream reader := aReadStream! ! !ExternalPipe methodsFor: 'initialize-release' stamp: 'dtl 3/9/2006 06:40'! setBlocking "Set the reader side of the pipe for blocking reads." reader ifNotNil: [OSProcess accessor setBlocking: reader ioHandle]. self blocking: true ! ! !ExternalPipe methodsFor: 'initialize-release' stamp: 'dtl 4/2/2006 19:06'! setBufferedReader "Use an event driven AsyncFileReadStream to represent the reader end of the pipe. This should be used if the pipe will be read by a Smalltalk process. It should not be used if the pipe is to be read by an external OS process." reader ifNotNil: [reader removeDependent: self. reader unregister. self reader: reader asBufferedAsyncFileReadStream. self setNonBlocking. reader addDependent: self. ^ true]. ^ false ! ! !ExternalPipe methodsFor: 'initialize-release' stamp: 'dtl 3/9/2006 06:40'! setNonBlocking "Set the reader side of the pipe for non-blocking reads." reader ifNotNil: [OSProcess accessor setNonBlocking: reader ioHandle]. self blocking: false ! ! !ExternalPipe methodsFor: 'updating' stamp: 'dtl 3/15/2006 07:17'! triggerDataReady "Notify any object waiting for data ready on the pipe." self triggerEvent: #dataReady. ! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 9/18/2002 20:29'! upToEnd "Answer the remaining elements in the string" reader closed ifTrue: [^ ''] ifFalse: [^ reader upToEnd]! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 11/11/2011 09:27'! upToEndOfFile "Answer the remaining elements in the pipe. Use #isAtEndOfFile: to determine end of file status with feof(), required for reliable end of file test on OS pipes." reader closed ifTrue: [^ ''] ifFalse: [^ reader upToEndOfFile]! ! !ExternalPipe methodsFor: 'updating' stamp: 'dtl 1/18/2003 14:31'! update: aParameter "Notify any object waiting for data ready on the pipe." self changed. self triggerDataReady. ^ super update: aParameter ! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! writer "Answer a stream on the write end of the pipe." ^ writer! ! !ExternalPipe methodsFor: 'accessing' stamp: 'dtl 3/7/2006 19:44'! writer: aWriteStream writer := aWriteStream! ! !OSPipe commentStamp: 'dtl 3/8/2006 07:27' prior: 101818688! I represent a pipe provided by the underlying operating system, such as a Unix pipe. I have a reader stream and a writer stream which behave similarly to a read-only FileStream and a writeable FileStream. I use a single-character buffer to implement #peek without losing data from the external OS pipe.! !OSPipe methodsFor: 'accessing' stamp: 'dtl 10/14/2001 12:16'! next "Answer the next object accessible by the receiver." | c | nextChar isNil ifTrue: [^ [reader next] on: Error do: [nil]] ifFalse: [c := nextChar. nextChar := nil. ^ c] ! ! !OSPipe methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:24'! next: anInteger "Answer the next anInteger elements of my collection." | c strm | strm := WriteStream on: String new. (1 to: anInteger) do: [:index | c := self next. c isNil ifTrue: [^ strm contents] ifFalse: [strm nextPut: c. false]]. ^ strm contents ! ! !OSPipe methodsFor: 'accessing' stamp: 'dtl 5/16/2006 06:52'! peek ^ nextChar isNil ifTrue: [reader closed ifFalse: [nextChar := reader next]] ifFalse: [nextChar]! ! !OSPipe methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:24'! upToEnd "Answer the remaining elements in the string. This method is retained for backward compatibility with older versions of CommandShell." | strm s | strm := WriteStream on: String new. [(s := self next: 2000) isEmpty ifTrue: [^ strm contents] ifFalse: [strm nextPutAll: s]] repeat ! ! !OSPipe methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:24'! upToEndOfFile "Answer the remaining elements in the pipe. Use #atEndOfFile to determine end of file status with feof(), required for reliable end of file test on OS pipes. Compare #upToEnd, which uses the generic end of file test in FilePlugin." | strm d s | strm := WriteStream on: String new. d := Delay forMilliseconds: 200. [(s := self next: 2000) isEmpty ifTrue: [self atEndOfFile ifTrue: [^ strm contents] ifFalse: [d wait]] ifFalse: [strm nextPutAll: s]] repeat ! ! !AioEventHandlerExample commentStamp: 'dtl 7/5/2003 18:38' prior: 101819062! Demonstrate asynchronous read handers for file streams, OS pipes, standard input, and sockets. See class category "examples". Some examples require OSProcess.! !AioEventHandlerExample class methodsFor: 'examples' stamp: 'dtl 9/4/2003 06:22'! osPipeExample "Demonstrate an asynchronous read hander on an OS pipe. Output will be displayed on the Transcript." "self osPipeExample" | pipe aio | (Smalltalk hasClassNamed: #OSProcess) ifFalse: [self notify: 'this example requires OSProcess'] ifTrue: [pipe := (Smalltalk at: #OSPipe) new. aio := super new handler: (AioEventHandler for: pipe reader); ioStream: pipe reader. aio handler addDependent: aio. (1 to: 10) do: [:i | pipe nextPutAll: 'this is line ', i asString; cr. (Delay forMilliseconds: 500) wait]. ^ aio handler close] ! ! !AioEventHandlerExample class methodsFor: 'examples' stamp: 'dtl 9/4/2003 06:22'! showTtyOnTranscript: ttyName "Enter lines on /dev/tty, and watch them show up on the Transcript. Normally, /dev/tty corresponds to standard input for the Squeak process, so if you have a serial port connected to something that generates data, try this example with /dev/whatever to demonstrate asych input on a serial port. Warning: This method does not set the file stream for nonblocking input, so it can block the Squeak VM. The #getAvailableData attempts to work around this, but save your image before testing with another serial interfaces." "self showTtyOnTranscript: '/dev/tty'" | inputStream handler example | inputStream := FileStream readOnlyFileNamed: '/dev/tty'. handler := AioEventHandler for: inputStream exceptions: true readEvents: true writeEvents: false. example := super new handler: handler; ioStream: inputStream. handler addDependent: example. Transcript cr; show: ''. self notify: 'Enter lines on ', ttyName, ', watch the Transcript, and select "Proceed" when done'. ^ example handler close ! ! !AioEventHandlerExample class methodsFor: 'examples' stamp: 'dtl 9/4/2003 06:23'! standardInputExample "Enter lines on stdin, and watch them show up on the Transcript." "self standardInputExample" | aio stdin | (Smalltalk hasClassNamed: #OSProcess) ifFalse: [self notify: 'this example requires OSProcess'] ifTrue: [Transcript cr; show: ''. stdin := (Smalltalk at: #OSProcess) thisOSProcess stdIn. aio := super new handler: (AioEventHandler for: stdin); ioStream: stdin. aio handler addDependent: aio. self notify: 'Enter lines on standard input, watch the Transcript, and select "Proceed" when done'. ^ aio handler close] ! ! !AioEventHandlerExample class methodsFor: 'examples' stamp: 'dtl 9/4/2003 06:24'! tcpSocketExample "Loosely based on OldSocket>>remoteTestServerTCP. Output is displayed on the Transcript." "self tcpSocketExample" | port serverTcpSocket serverName clientTcpSocket handler example useOldStyleSockets | port := 8086. serverName := '127.0.0.1'. "The networking code was updated for Squeak 3.6. This checks for which version to use." useOldStyleSockets := Socket respondsTo: #initializeNetworkIfFail:. Transcript show: 'initializing network ... '. useOldStyleSockets ifTrue: [Socket initializeNetworkIfFail: [^Transcript show:'failed']] ifFalse: [[Socket initializeNetwork] on: Error do: [:ex | ^Transcript show:'failed']]. Transcript show:'ok';cr. "Create the server (reader) socket" serverTcpSocket := Socket newTCP. serverTcpSocket listenOn: port. [Transcript show: 'server endpoint created on port ', port asString; cr. useOldStyleSockets ifTrue: [serverTcpSocket waitForConnectionUntil: Socket standardDeadline] ifFalse: [serverTcpSocket waitForConnectionFor: 10]] fork. (Delay forMilliseconds: 1000) wait. "Create the client (writer) socket" clientTcpSocket := Socket newTCP. clientTcpSocket connectTo: (NetNameResolver addressFromString: serverName) port: port. useOldStyleSockets ifTrue: [clientTcpSocket waitForConnectionUntil: Socket standardDeadline] ifFalse: [clientTcpSocket waitForConnectionFor: 10]. Transcript show: 'client endpoint connected to ', serverName, ' port ', port asString; cr. "Set up a read event handler on the server socket" handler := AioEventHandler for: serverTcpSocket exceptions: true readEvents: true writeEvents: false. example := super new handler: handler; ioStream: serverTcpSocket. handler addDependent: example. Transcript show: 'event handler started'; cr. "Send a few lines of data to the client socket, waiting briefly between lines. The event handler will watch the server socket, and copy data to the Transcript each time a new line of data is available to the server." (1 to: 10) do: [:i | clientTcpSocket sendData: 'this is line ', i asString, Character cr asString. (Delay forMilliseconds: 500) wait]. clientTcpSocket closeAndDestroy. Transcript show: 'client endpoint closed'; cr. serverTcpSocket closeAndDestroy. Transcript show: 'server endpoint closed'; cr. example close. Transcript show: 'event handler stopped'; cr. ^ Array with: example with: serverTcpSocket with: clientTcpSocket! ! !AioEventHandlerExample methodsFor: 'initialize-release' stamp: 'dtl 9/4/2003 06:20'! close self handler close. self handler removeDependent: self ! ! !AioEventHandlerExample methodsFor: 'updating' stamp: 'dtl 2/24/2013 10:22'! getAvailableData "Obtain all available data from ioStream. For a FileStream, keep reading until a line terminator is reached. This allows use with a FileStream that has not been set for nonblocking input." | ws c buffer n | buffer := String new: 4000. (self ioStream isKindOf: FileStream) ifTrue: [ws := WriteStream on: String new. [c := ioStream next. (c == Character lf) ifTrue: [ws nextPut: Character cr] ifFalse: [ws nextPut: c]. (c ~= Character lf) and: [c ~= Character cr]] whileTrue. ^ ws contents] ifFalse: [ioStream dataAvailable ifTrue: [n := ioStream receiveDataInto: buffer. ^ buffer copyFrom: 1 to: n] ifFalse: [^ '']] ! ! !AioEventHandlerExample methodsFor: 'accessing' stamp: 'dtl 7/5/2003 09:40'! handler ^ handler! ! !AioEventHandlerExample methodsFor: 'accessing' stamp: 'dtl 7/5/2003 09:40'! handler: anAioHandler handler := anAioHandler! ! !AioEventHandlerExample methodsFor: 'accessing' stamp: 'dtl 7/5/2003 09:57'! ioStream ^ ioStream! ! !AioEventHandlerExample methodsFor: 'accessing' stamp: 'dtl 7/5/2003 09:57'! ioStream: aFileStream ioStream := aFileStream! ! !AioEventHandlerExample methodsFor: 'updating' stamp: 'dtl 7/5/2003 18:23'! update: anObject (anObject isKindOf: AioEventHandler) ifTrue: [Transcript show: self getAvailableData] ! ! !OSFileLock commentStamp: 'dtl 2/23/2004 19:36' prior: 101819280! I describe the region representing the entire addressable space of an external file, including regions that have not yet been allocated for use by the file. On platforms that support file locking, an OSFileLock is used to describe a lock on the entire file. ! !OSFileLock class methodsFor: 'instance creation' stamp: 'jf 2/22/2004 17:35'! onFile: aFileStream exclusive: writeLockFlag "A region representing the whole file" ^ super new onFile: aFileStream exclusive: writeLockFlag ! ! !OSFileLock methodsFor: 'comparing' stamp: 'dtl 11/28/2010 09:18'! = aFileLock ^ ((self species = aFileLock species) and: [self fileStream == aFileLock fileStream]) and: [self exclusive == aFileLock exclusive]! ! !OSFileLock methodsFor: 'conflict testing' stamp: 'jf 2/22/2004 16:38'! conflictsWith: otherFileLock ^ (self isExclusive or: [otherFileLock isExclusive]) and: [self overlaps: otherFileLock]! ! !OSFileLock methodsFor: 'accessing' stamp: 'jf 2/22/2004 16:00'! exclusive "Answer the value of exclusive. Default is true, indicating a read-write lock as opposed to a shared read lock." ^ exclusive ifNil: [exclusive := true].! ! !OSFileLock methodsFor: 'accessing' stamp: 'jf 2/22/2004 16:00'! exclusive: anObject "Set the value of exclusive" exclusive := anObject! ! !OSFileLock methodsFor: 'accessing' stamp: 'jf 2/22/2004 16:00'! fileStream "Answer the value of fileStream" ^ fileStream! ! !OSFileLock methodsFor: 'accessing' stamp: 'jf 2/22/2004 16:00'! fileStream: anObject "Set the value of fileStream" fileStream := anObject! ! !OSFileLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 18:32'! hash ^ (self fileStream hash + self exclusive hash) hashMultiply! ! !OSFileLock methodsFor: 'testing' stamp: 'jf 2/22/2004 18:13'! isActive ^ self fileStream closed not! ! !OSFileLock methodsFor: 'testing' stamp: 'jf 2/22/2004 16:01'! isExclusive ^ self exclusive! ! !OSFileLock methodsFor: 'private' stamp: 'jf 2/22/2004 18:07'! length ^ 0! ! !OSFileLock methodsFor: 'system locking' stamp: 'dtl 5/8/2006 06:52'! lock "Answer true on success" ^ self lockIfFail: [false] ! ! !OSFileLock methodsFor: 'system locking' stamp: 'dtl 5/8/2006 06:57'! lockIfFail: failBlock | handle result | handle := ThisOSProcess accessor handleFromFileStream: self fileStream. result := ThisOSProcess accessor primLockFileRegion: handle offset: self offset length: self length exclusive: self isExclusive. result == 0 ifTrue: [^ true] ifFalse: [^ failBlock value] ! ! !OSFileLock methodsFor: 'private' stamp: 'jf 2/22/2004 18:02'! offset ^ 0! ! !OSFileLock methodsFor: 'initialize-release' stamp: 'jf 2/22/2004 16:02'! onFile: aFileStream exclusive: writeLockFlag self fileStream: aFileStream. self exclusive: writeLockFlag ! ! !OSFileLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 16:31'! overlaps: aFileLock "Answer true if the receiver represents an addressable region that overlaps aFileLock" ^ aFileLock fileStream fullName = self fileStream fullName! ! !OSFileLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 16:35'! overlapsRegion: aFileRegionLock ^ aFileRegionLock fileStream fullName = self fileStream fullName! ! !OSFileLock methodsFor: 'system locking' stamp: 'dtl 5/8/2006 07:00'! test "Answer true if this is a lockable file or region" | handle result | handle := ThisOSProcess accessor handleFromFileStream: self fileStream. result := ThisOSProcess accessor primTestLockableFileRegion: handle offset: self offset length: self length exclusive: self isExclusive. ^ (result == -1 or: [result isNil]) ifTrue: [false] ifFalse: [result first]! ! !OSFileLock methodsFor: 'system locking' stamp: 'dtl 5/8/2006 06:58'! unlock "Answer true on success" ^ self unlockIfFail: [false] ! ! !OSFileLock methodsFor: 'system locking' stamp: 'dtl 5/8/2006 06:57'! unlockIfFail: failBlock | handle result | handle := ThisOSProcess accessor handleFromFileStream: self fileStream. result := ThisOSProcess accessor primUnlockFileRegion: handle offset: self offset length: self length. result == 0 ifTrue: [^ true] ifFalse: [^ failBlock value] ! ! !OSFileRegionLock commentStamp: 'jf 2/22/2004 19:50' prior: 101819603! I describe an addressable region of contiguous bytes in an external file. On platforms that support file locking, an OSFileRegionLock is used to specify a portion of the file to be locked. ! !OSFileRegionLock class methodsFor: 'instance creation' stamp: 'dtl 2/22/2004 13:58'! onFile: aFileStream from: start to: end exclusive: writeLockFlag "A region representing part of a file" ^ self onFile: aFileStream interval: (start to: end) exclusive: writeLockFlag ! ! !OSFileRegionLock class methodsFor: 'instance creation' stamp: 'dtl 2/22/2004 13:59'! onFile: aFileStream interval: anInterval exclusive: writeLockFlag "A region representing part of a file" ^ super new onFile: aFileStream interval: anInterval exclusive: writeLockFlag ! ! !OSFileRegionLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 18:33'! = aFileRegion ^ (super = aFileRegion) and: [self interval = aFileRegion interval] ! ! !OSFileRegionLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 18:33'! hash ^ (super hash + self interval hash) hashMultiply ! ! !OSFileRegionLock methodsFor: 'accessing' stamp: 'dtl 3/10/2005 20:23'! interval "Answer the value of interval" ^ interval! ! !OSFileRegionLock methodsFor: 'accessing' stamp: 'dtl 3/10/2005 20:23'! interval: anObject "Set the value of interval" interval := anObject! ! !OSFileRegionLock methodsFor: 'private' stamp: 'jf 2/22/2004 18:02'! length ^ self interval size! ! !OSFileRegionLock methodsFor: 'private' stamp: 'jf 2/22/2004 18:02'! offset ^ self interval first! ! !OSFileRegionLock methodsFor: 'initialize-release' stamp: 'jf 2/22/2004 16:03'! onFile: aFileStream interval: anInterval exclusive: writeLockFlag self onFile: aFileStream exclusive: writeLockFlag. self interval: anInterval.! ! !OSFileRegionLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 19:47'! overlaps: aFileLock "Call #overlapsRegion: on aFileLock since we know we're a region but we don't know whether aFileLock is" ^ aFileLock overlapsRegion: self! ! !OSFileRegionLock methodsFor: 'comparing' stamp: 'jf 2/22/2004 18:56'! overlapsRegion: aFileRegionLock ^ (super overlapsRegion: aFileRegionLock) and: [(self interval intersection: aFileRegionLock interval) isEmpty not]! ! !OSProcess commentStamp: '' prior: 101819844! I represent an operating system process, such as the process in which the Squeak VM is currently running. My subclasses implement system specific features for Unix, Windows, MacOS, or other operating systems. ! !ExternalOSProcess commentStamp: '' prior: 101820113! I represent an OSProcess other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process.! !ExternalMacOSProcess commentStamp: '' prior: 101820367! I represent an external MacOS process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton MacOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent MacOSProcess (a singleton) to check the status of all its ExternalMacOSProcess children, and #update: them accordingly.! !ExternalMacOSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:45'! isResponsibleForThisPlatform "Answer true if, for the current platform, this class is responsible for representing an OS process other than that in which the Squeak VM is currently running." ^ self isNonUnixMac ! ! !ExternalOS2Process commentStamp: '' prior: 101821102! I represent an external OS2 process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton OS2ProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent OS2Process (a singleton) to check the status of all its ExternalOS2Process children, and #update: them accordingly.! !ExternalOS2Process class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:47'! isResponsibleForThisPlatform "Answer true if, for the current platform, this class is responsible for representing an OS process other than that in which the Squeak VM is currently running." ^ self isOS2 ! ! !ExternalOSProcess class methodsFor: 'concrete subclasses' stamp: 'dtl 3/5/2005 12:02'! concreteClass "ExternalOSProcess concreteClass" ^ self subclasses detect: [:c | c isResponsibleForThisPlatform] ifNone: [self notify: self printString, ': No concrete class implementation available for system type ', self platformName printString. nil] ! ! !ExternalOSProcess class methodsFor: 'instance creation' stamp: 'dtl 1/16/2001 05:36'! exec: programName "Run a program in an external OS process, and answer an instance of myself which represents the external process." "ExternalOSProcess exec: '/bin/ls'" ^ self concreteClass exec: programName ! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2000 21:41'! accessor "Answer an OSProcessAccessor which may be used to obtain information about the external OS process which I represent." ^ OSProcess thisOSProcess processAccessor ! ! !ExternalOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/1/2002 06:41'! closeInitialStdErr initialStdErr ifNotNil: [initialStdErr close] ! ! !ExternalOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/1/2002 06:42'! closeInitialStdIn initialStdIn ifNotNil: [initialStdIn close] ! ! !ExternalOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/1/2002 06:42'! closeInitialStdOut initialStdOut ifNotNil: [initialStdOut close] ! ! !ExternalOSProcess methodsFor: 'initialize - release' stamp: 'dtl 11/21/2006 14:04'! closeStreams self closeInitialStdIn; closeInitialStdOut; closeInitialStdErr! ! !ExternalOSProcess methodsFor: 'setting run state' stamp: 'dtl 3/4/2001 18:55'! complete "Process has exited and has been reaped. It no longer exists in the external operating system." self runState: #complete ! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:38'! initialStdErr "The stderr stream at the time the child process is invoked. If the same as stderr for the current Squeak process, it may change as a result of Squeak using its stderr stream. The child process may also modify its actual stderr; therefore this is not an accurate representation of the child process stderr during the life of the child process." ^ initialStdErr! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:38'! initialStdErr: anExternalStream initialStdErr := anExternalStream! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:39'! initialStdIn "The stdin stream at the time the child process is invoked. If the same as stdin for the current Squeak process, it may change as a result of Squeak using its stdin stream. The child process may also modify its actual stdin; therefore this is not an accurate representation of the child process stdin during the life of the child process." ^ initialStdIn! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:39'! initialStdIn: anExternalStream initialStdIn := anExternalStream! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:39'! initialStdOut "The stdout stream at the time the child process is invoked. If the same as stdout for the current Squeak process, it may change as a result of Squeak using its stdout stream. The child process may also modify its actual stdout; therefore this is not an accurate representation of the child process stdout during the life of the child process." ^ initialStdOut! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/1/2002 06:40'! initialStdOut: anExternalStream initialStdOut := anExternalStream! ! !ExternalOSProcess methodsFor: 'initialize - release' stamp: 'dtl 10/6/2000 21:01'! initialize self notYetRunning! ! !ExternalOSProcess methodsFor: 'testing' stamp: 'dtl 10/7/2000 14:45'! isAccessible ^ self accessor canAccessChildProcess: self! ! !ExternalOSProcess methodsFor: 'testing' stamp: 'dtl 1/20/2001 11:40'! isComplete ^ self runState == #complete! ! !ExternalOSProcess methodsFor: 'testing' stamp: 'dtl 1/20/2001 11:40'! isNotYetRunning ^ self runState == #notYetRunning! ! !ExternalOSProcess methodsFor: 'testing' stamp: 'dtl 1/20/2001 11:40'! isRunning ^ self runState == #running! ! !ExternalOSProcess methodsFor: 'setting run state' stamp: 'dtl 3/26/2000 15:23'! notYetRunning "Process has not yet entered running state." self runState: #notYetRunning ! ! !ExternalOSProcess methodsFor: 'printing' stamp: 'dtl 3/18/2000 14:07'! printOn: aStream super printOn: aStream. self isComplete ifTrue: [ aStream nextPutAll: ' (', self runState, ' with status ', self exitStatus printString, ')' ] ifFalse: [ aStream nextPutAll: ' (', self runState asString, ')' ]! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 1/25/2004 11:01'! runState ^ runState ifNil: [self unknownRunState] ! ! !ExternalOSProcess methodsFor: 'accessing' stamp: 'dtl 3/18/2000 12:30'! runState: aSymbol runState := aSymbol. self changed: #runState ! ! !ExternalOSProcess methodsFor: 'setting run state' stamp: 'dtl 3/26/2000 15:23'! running "Process is actively running." self runState: #running ! ! !ExternalOSProcess methodsFor: 'testing' stamp: 'dtl 12/22/2001 18:32'! succeeded "Answer true if my process completed successfully. Be optimistic here, and let my subclasses implement the details." ^ self isComplete! ! !ExternalOSProcess methodsFor: 'setting run state' stamp: 'dtl 10/6/2000 20:59'! unknownRunState "Unable to determine the current run state of the process, possibly because this is a stale reference to a process which no longer exists." self runState: #unknownRunState ! ! !ExternalOSProcess methodsFor: 'updating' stamp: 'dtl 2/27/2002 09:45'! update: aParameter "Notify any dependents if my run state changes. My subclasses will do additional updating when the run state changes." aParameter == #runState ifTrue: [self changed: #runState] ! ! !ExternalRiscOSProcess commentStamp: '' prior: 101821832! I represent an external RiscOS task other than the process in which this Squeak is executing. I maintain information about the state of the external task during and after the lifetime of the task. In particular, I hold the exit status of the task after it completes execution. When the external task changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton RiscOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent RiscOSProcess (a singleton) to check the status of all its ExternalRiscOSProcess children, and #update: them accordingly. ! !ExternalRiscOSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:48'! isResponsibleForThisPlatform "Answer true if, for the current platform, this class is responsible for representing an OS process other than that in which the Squeak VM is currently running." ^ self isRiscOS ! ! !ExternalUnixOSProcess commentStamp: '' prior: 101822560! I represent an external Unix process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton UnixProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent UnixProcess (a singleton) to check the status of all its ExternalUnixProcess children, and #update: them accordingly.! !ExternalUnixOSProcess class methodsFor: 'shells' stamp: 'dtl 1/23/2013 20:21'! bashShellPath "A more full-featured shell from the Free Software Foundation" | path | path := '/bin/bash'. (OSProcess fileExists: path) ifTrue: [^ path] ifFalse: [self notify: path, ' not found']! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 7/12/2003 11:38'! command: aCommandString "ExternalUnixOSProcess command: 'ls -l /etc'" ^ self forkAndExec: self defaultShellPath arguments: (Array with: '-c' with: aCommandString) environment: nil! ! !ExternalUnixOSProcess class methodsFor: 'shells' stamp: 'dtl 1/23/2013 20:30'! defaultShellPath "Default shell to run" | path | path := '/bin/sh'. (OSProcess fileExists: path) ifTrue: [^ path] ifFalse: [self notify: path, ' not found']! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 1/16/2001 05:33'! exec: programName "Run a program in an external OS process, and answer an instance of myself which represents the external process." ^ self forkAndExec: programName ! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/27/2002 15:25'! forkAndExec: executableFile "ExternalUnixOSProcess forkAndExec: '/bin/ls'" ^ super new programName: executableFile; initialize; forkChild ! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/27/2002 15:25'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary "Run a program in an external OS process, and answer an instance of myself which represents the external process." "ExternalUnixOSProcess forkAndExec: '/bin/ls' arguments: (Array with: '-l') environment: (UnixProcess env)" ^ super new programName: executableFile; arguments: arrayOfStrings; initialEnvironment: stringDictionary; initialize; forkChild ! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/27/2002 15:25'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Run a program in an external OS process, and answer an instance of myself which represents the external process." "ExternalUnixOSProcess forkAndExec: '/bin/ls' arguments: (Array with: '-l') environment: (UnixProcess env) descriptors: nil" | proc | proc := super new programName: executableFile; arguments: arrayOfStrings; initialEnvironment: stringDictionary. arrayOf3Streams ifNotNil: [proc initialStdIn: (arrayOf3Streams at: 1). proc initialStdOut: (arrayOf3Streams at: 2). proc initialStdErr: (arrayOf3Streams at: 3)]. ^ proc initialize forkChild ! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/27/2002 15:25'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams workingDir: pathString "Run a program in an external OS process, and answer an instance of myself which represents the external process." "ExternalUnixOSProcess forkAndExec: '/bin/ls' arguments: nil environment: nil descriptors: nil workingDir: '/etc'" | proc | proc := super new programName: executableFile; arguments: arrayOfStrings; initialEnvironment: stringDictionary. arrayOf3Streams ifNotNil: [proc initialStdIn: (arrayOf3Streams at: 1). proc initialStdOut: (arrayOf3Streams at: 2). proc initialStdErr: (arrayOf3Streams at: 3)]. pathString ifNotNil: [proc pwd: pathString]. ^ proc initialize forkChild ! ! !ExternalUnixOSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:48'! isResponsibleForThisPlatform "Answer true if, for the current platform, this class is responsible for representing an OS process other than that in which the Squeak VM is currently running." ^ self isUnix ! ! !ExternalUnixOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/28/2002 10:15'! programName: executableFile arguments: arrayOfStrings initialEnvironment: stringDictionary "Answer an instance not yet running." ^ super new programName: executableFile; arguments: arrayOfStrings; initialEnvironment: stringDictionary ! ! !ExternalUnixOSProcess class methodsFor: 'shells' stamp: 'dtl 1/23/2013 20:21'! remoteShellPath "A remote shell processor. This may need to be edited for different systems." | path | path := '/usr/bin/rsh'. (OSProcess fileExists: path) ifTrue: [^ path] ifFalse: [self notify: path, ' not found']! ! !ExternalUnixOSProcess class methodsFor: 'shells' stamp: 'dtl 1/23/2013 20:21'! tkShellPath "The wish command shell for Tk/Tcl. This tends to be installed in a wide variety of places, so you may need to edit this method for your system." | path | path := '/usr/bin/wish'. (OSProcess fileExists: path) ifTrue: [^ path] ifFalse: [self notify: path, ' not found']! ! !ExternalUnixOSProcess methodsFor: 'comparing' stamp: 'dtl 6/28/2010 22:25'! = processProxy "True if this is a proxy that represents the same OS process as processProxy" ^ ((self isKindOf: ExternalUnixOSProcess) and: [pid = processProxy pid]) and: [ppid = processProxy ppid]! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 1/20/2001 12:48'! arguments ^ arguments! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 1/20/2001 12:49'! arguments: arrayOfArgumentStrings arguments := arrayOfArgumentStrings! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 7/3/1999 12:34'! exitStatus ^ exitStatus ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 10/22/1999 22:21'! exitStatus: anInteger exitStatus := anInteger ! ! !ExternalUnixOSProcess methodsFor: 'initialize - release' stamp: 'dtl 4/4/2006 21:16'! forkChild "Start the external OS process. All instances variables except for pid should have been set. The pid will be set following creation of the new external process. Creating a child process is the responsibility of the currently executing OS process, so request it to do so on behalf of this instance of ExternalUnixOSProcess." ^ OSProcess thisOSProcess processProxy: self forkAndExec: programName arguments: arguments environment: initialEnvironment descriptors: (Array with: initialStdIn with: initialStdOut with: initialStdErr) ! ! !ExternalUnixOSProcess methodsFor: 'comparing' stamp: 'dtl 6/28/2010 22:26'! hash ^ (pid ifNil: [self identityHash]) + (ppid ifNil: [self identityHash]) ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 3/11/2001 09:17'! initialEnvironment ^ initialEnvironment! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 1/21/2001 11:31'! initialEnvironment: aDictionary initialEnvironment := aDictionary! ! !ExternalUnixOSProcess methodsFor: 'initialize - release' stamp: 'dtl 2/11/2001 19:07'! initialize super initialize. ^ self setDefaults ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 7/3/1999 12:51'! pid ^ pid ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 10/22/1999 22:21'! pid: aPid pid := aPid ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 7/3/1999 12:33'! ppid ^ ppid ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 10/22/1999 22:21'! ppid: aPid ppid := aPid ! ! !ExternalUnixOSProcess methodsFor: 'printing' stamp: 'dtl 8/23/2012 22:45'! printOn: aStream self programName isNil ifTrue: [^ super printOn: aStream] ifFalse: [aStream nextPutAll: 'an '; nextPutAll: self class name, ' with pid '; nextPutAll: self pid printString; nextPutAll: ' on '; nextPutAll: programName; nextPutAll: ' ('; nextPutAll: self runState asString. self isComplete ifTrue: [aStream nextPutAll: ', '; nextPutAll: (UnixProcessExitStatus for: exitStatus) printString]. aStream nextPut: $)]. ! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 1/20/2001 12:51'! programName ^ programName! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 1/20/2001 12:51'! programName: fileName programName := fileName! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 3/31/2001 17:08'! pwd pwd ifNil: [pwd := self accessor primGetCurrentWorkingDirectory]. ^ pwd! ! !ExternalUnixOSProcess methodsFor: 'accessing' stamp: 'dtl 3/31/2001 17:08'! pwd: pathString pwd := pathString! ! !ExternalUnixOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/31/2001 17:10'! setDefaults | this | this := OSProcess thisOSProcess. initialEnvironment ifNil: [self initialEnvironment: this environment]. initialStdIn ifNil: [self initialStdIn: this stdIn]. initialStdOut ifNil: [self initialStdOut: this stdOut]. initialStdErr ifNil: [self initialStdErr: this stdErr]. self pwd ! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:44'! sigabrt "Send a SIGABRT signal to the external process which I represent." OSProcess thisOSProcess sigabrt: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:52'! sigalrm "Send a SIGALRM signal to the external process which I represent." OSProcess thisOSProcess sigalrm: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:52'! sigchld "Send a SIGCHLD signal to the external process which I represent." OSProcess thisOSProcess sigchld: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:52'! sigcont "Send a SIGCONT signal to the external process which I represent." OSProcess thisOSProcess sigcont: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:53'! sighup "Send a SIGHUP signal to the external process which I represent." OSProcess thisOSProcess sighup: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:53'! sigint "Send a SIGINT signal to the external process which I represent." OSProcess thisOSProcess sigint: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:54'! sigkill "Send a SIGKILL signal to the external process which I represent." OSProcess thisOSProcess sigkill: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:54'! sigpipe "Send a SIGPIPE signal to the external process which I represent." OSProcess thisOSProcess sigpipe: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:55'! sigquit "Send a SIGQUIT signal to the external process which I represent." OSProcess thisOSProcess sigquit: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:55'! sigstop "Send a SIGSTOP signal to the external process which I represent." OSProcess thisOSProcess sigstop: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:55'! sigterm "Send a SIGTERM signal to the external process which I represent." OSProcess thisOSProcess sigterm: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:56'! sigusr1 "Send a SIGUSR1 signal to the external process which I represent." OSProcess thisOSProcess sigusr1: self! ! !ExternalUnixOSProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:56'! sigusr2 "Send a SIGUSR2 signal to the external process which I represent." OSProcess thisOSProcess sigusr2: self! ! !ExternalUnixOSProcess methodsFor: 'testing' stamp: 'dtl 12/22/2001 18:30'! succeeded ^ self isComplete and: [self exitStatus == 0]! ! !ExternalUnixOSProcess methodsFor: 'terminating child' stamp: 'dtl 2/11/2001 16:08'! terminate "Kill the child process which I represent." self sigkill. self finalize ! ! !ExternalUnixOSProcess methodsFor: 'updating' stamp: 'dtl 7/6/2006 10:06'! update: aParameter | accessible | aParameter == #runState ifTrue: [| statusArray | "Has the process exited?" statusArray := self accessor primGetChildExitStatus: self pid. statusArray notNil ifTrue: [self exitStatus: (statusArray at: 2). ^ self complete]]. aParameter == #accessibility ifTrue: ["Does the process still exist, and is it reachable?" ((accessible := self isAccessible) notNil and: [accessible]) ifFalse: [^ self isRunning ifTrue: [self unknownRunState]]]. super update: aParameter ! ! !ExternalUnixOSProcess methodsFor: 'evaluating' stamp: 'dtl 11/21/2006 14:09'! value "Start the external process" self isNotYetRunning ifTrue: [self forkChild; closeStreams] ! ! !ExternalWindowsOSProcess commentStamp: '' prior: 101823297! I represent an external Windows process other than the process in which this Squeak is executing. I maintain information about the state of the external process during and after the lifetime of the process. In particular, I hold the exit status of the process after it completes execution. When the external process changes state (e.g. it exits), the VM signals a Squeak semaphore. A singleton WindowsOSProcessAccessor maintains a process which waits on the semaphore, and sends a changed: #childProcessStatus message to itself, thereby notifying its dependent WindowsOSProcess (a singleton) to check the status of all its ExternalWindowsOSProcess children, and #update: them accordingly.! !ExternalWindowsOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/28/2002 10:56'! command: aCommandString "ExternalWindowsOSProcess command: 'SOL'" "ExternalWindowsOSProcess command: 'NoSuchProgram'" ^ (self commandNoEvaluate: aCommandString) value ! ! !ExternalWindowsOSProcess class methodsFor: 'instance creation' stamp: 'dtl 2/28/2002 10:49'! commandNoEvaluate: aCommandString "Answer an instance not yet running." "ExternalWindowsOSProcess commandNoEvaluate: 'SOL'" ^ super new commandLine: aCommandString; ppid: OSProcess thisOSProcess pid; notYetRunning ! ! !ExternalWindowsOSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:50'! isResponsibleForThisPlatform "Answer true if, for the current platform, this class is responsible for representing an OS process other than that in which the Squeak VM is currently running." ^ self isWindows ! ! !ExternalWindowsOSProcess class methodsFor: 'instance creation' stamp: 'dtl 3/1/2002 07:02'! programName: executableFile arguments: arrayOfStrings initialEnvironment: stringDictionary "This is for protocol compatibility with ExternalUnixOSProcess. For now, just reassemble a command line string and ignore the environment argument." | commandLine | commandLine := WriteStream on: String new. commandLine nextPutAll: executableFile. arrayOfStrings ifNotNil: [arrayOfStrings do: [:arg | commandLine nextPut: Character space; nextPutAll: arg]]. ^ self commandNoEvaluate: commandLine contents ! ! !ExternalWindowsOSProcess methodsFor: 'comparing' stamp: 'dtl 6/28/2010 22:28'! = processProxy "True if this is a proxy that represents the same OS process as processProxy" ^ ((self isKindOf: ExternalWindowsOSProcess) and: [pid = processProxy pid]) and: [ppid = processProxy ppid]! ! !ExternalWindowsOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/1/2002 07:44'! closeHandles "Clean up after process exits." self threads do: [:thread | thread closeHandle]. handle ifNotNil: [OSProcess accessor primCloseHandle: handle. handle := nil] ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/26/2002 10:09'! commandLine ^ commandLine! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/26/2002 10:09'! commandLine: aCommandLineString commandLine := aCommandLineString! ! !ExternalWindowsOSProcess methodsFor: 'setting run state' stamp: 'dtl 6/24/2006 08:41'! complete "Process has exited and has been reaped. It no longer exists in the external operating system." (threads notNil and: [threads size > 0]) ifTrue: [threads do: [:t | t complete]]. self closeHandles. super complete ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 08:32'! exitStatus ^ exitStatus! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 08:33'! exitStatus: status exitStatus := status ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:24'! handle "A Windows HANDLE for this OS process, represented as a ByteArray. The handle should be closed when the process exits." ^ handle! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:32'! handle: aHandleObject "A Windows HANDLE for this OS process, represented as a ByteArray. The handle should be closed when the process exits." handle := aHandleObject! ! !ExternalWindowsOSProcess methodsFor: 'comparing' stamp: 'dtl 6/28/2010 22:27'! hash ^ (pid ifNil: [self identityHash]) + (ppid ifNil: [self identityHash]) ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:29'! ppid ^ ppid ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:29'! ppid: aProcessID ppid := aProcessID! ! !ExternalWindowsOSProcess methodsFor: 'printing' stamp: 'dtl 2/26/2002 10:42'! printOn: aStream self commandLine isNil ifTrue: [^ super printOn: aStream] ifFalse: [aStream nextPutAll: 'a '; nextPutAll: self class name, ' with pid '; nextPutAll: self pid printString. (self isComplete and: [handle isNil]) ifTrue: [aStream nextPutAll: ' (handle closed)'] ifFalse: [aStream nextPutAll: ' handle '; nextPutAll: (handle isNil ifTrue: [handle printString] ifFalse: [handle asArray printString])]. aStream nextPutAll: ' on '''; nextPutAll: commandLine; nextPutAll: ''' ('; nextPutAll: self runState asString; nextPut: $)] ! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 10:28'! pwd "Answer the current working directory string." ^ pwd! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 10:28'! pwd: pathString "The current working directory string." pwd := pathString! ! !ExternalWindowsOSProcess methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:09'! threads "One or more threads of execution within the OS process" ^ threads ifNil: [threads := OrderedCollection new] ! ! !ExternalWindowsOSProcess methodsFor: 'updating' stamp: 'dtl 2/27/2002 09:45'! update: aParameter | accessible stat | aParameter == #runState ifTrue: ["Has the process exited?" stat := self accessor primGetExitStatusForHandle: self handle. stat ifNotNil: [self complete closeHandles exitStatus: stat]]. aParameter == #accessibility ifTrue: ["Does the process still exist, and is it reachable?" ((accessible := self isAccessible) notNil and: [accessible]) ifFalse: [self isRunning ifTrue: [self unknownRunState]]]. super update: aParameter ! ! !ExternalWindowsOSProcess methodsFor: 'evaluating' stamp: 'dtl 11/21/2006 14:05'! value "Start the external process" | procInfo mainThread | self isNotYetRunning ifTrue: [procInfo := OSProcess accessor primCommand: self commandLine. procInfo isNil ifTrue: [self initialStdErr nextPutAll: 'cannot execute ', self commandLine; cr. self exitStatus: #cannotExecuteCommandLine. "FIXME: Close the OSPipes now, otherwise the image will block on a read" self closeStreams. [self complete] fork "defer execution so OSPipes stay in place for now"] ifFalse: [self pid: (procInfo at: 3). self handle: (procInfo at: 1). mainThread := WindowsThread threadID: (procInfo at: 4) handle: (procInfo at: 2) running: true. self threads add: mainThread. self running. OSProcess thisOSProcess registerChildProcess: self. "FIXME: Close the initial pipe handles. For now, I have not implemented passing these to the child, and there is no support yet for nonblocking Windows OS pipes. Once those are available, this method needs to change to support." self closeStreams]]. ! ! !OSProcess class methodsFor: 'external process access' stamp: 'dtl 11/8/2000 22:04'! accessor "Answer an OSProcessAccessor for this OS process." ^ self thisOSProcess processAccessor ! ! !OSProcess class methodsFor: 'sUnit' stamp: 'dtl 10/13/2013 11:02'! allTestResults "Run all available sUnit tests and save the results in a file named 'OSProcessTestResults-.txt'. Display results on the Transcript as tests are run. Answer a string with the test results." "OSProcess allTestResults" | resultsFileName writeStream resultString results fs problems result wordSize | self listLoadedModules detect: [:e | '*OSProcessPlugin*' match: e] ifNone: [self notify: 'no OSProcessPlugin loaded']. wordSize := (Smalltalk respondsTo: #wordSize) ifTrue: [Smalltalk wordSize] ifFalse: [4]. resultsFileName := 'OSProcessTestResults-' , OSProcess platformName , '-' , (wordSize * 8) asString , 'bitImage-' , (OSProcess accessor sizeOfPointer * 8) asString , 'bitHw.txt'. [fs := FileStream newFileNamed: resultsFileName. problems := false. writeStream := WriteStream on: String new. writeStream nextPutAll: self authorInitials , ' running OSProcess unit tests ' , TimeStamp now asString; cr. writeStream nextPutAll: 'OSProcess platformName => ' , OSProcess platformName; cr. writeStream nextPutAll: 'OSProcess platformSubtype => ' , OSProcess platformSubtype; cr. writeStream nextPutAll: 'OSProcess osVersion => ' , OSProcess osVersion; cr. writeStream nextPutAll: 'OSProcess vmVersion => ' , OSProcess vmVersion; cr. writeStream nextPutAll: 'size of C int: OSProcess accessor sizeOfInt ==> ' , OSProcess accessor sizeOfInt asString; cr. writeStream nextPutAll: 'size of C pointer: OSProcess accessor sizeOfPointer ==> ' , OSProcess accessor sizeOfPointer asString; cr. writeStream nextPutAll: 'OSProcess versionInformation asString => ' , OSProcess versionInformation asString; cr. Transcript show: writeStream contents. (((Class allSubInstances select: [:class | #'OSProcess-Tests' = class category]) , (Class allSubInstances select: [:class | #'CommandShell-Tests' = class category])) reject: [:class | 'Abstract*' match: class name]) do: [:testCase | writeStream nextPutAll: 'running tests in ' , testCase name; cr. Transcript show: 'running tests in ' , testCase name; cr. testCase allTestSelectors do: [:testSelector | OSProcess thisOSProcess stdOut nextPutAll: testCase name, '>>',testSelector, String lf; flush. resultString := (testSelector -> ([result := (testCase selector: testSelector) run. result hasPassed ifFalse: [problems := true]. result] on: Error do: [:ex | problems := true. 'caught exception ' , ex printString])) printString. writeStream nextPutAll: resultString; cr. Transcript show: resultString; cr]]. problems ifTrue: [writeStream nextPutAll: 'one or more problems found'; cr. Transcript show: 'one or more problems were found, see results file'; cr] ifFalse: [writeStream nextPutAll: 'all tests completed without problems'; cr. Transcript show: 'all tests completed without problems'; cr]. results := writeStream contents copyReplaceAll: String cr with: String lf. fs nextPutAll: results] ensure: [fs close]. Transcript show: 'tests results have been saved in a file named ''' , resultsFileName , ''''; cr. ^ results! ! !OSProcess class methodsFor: 'external system access' stamp: 'dtl 1/7/2001 12:32'! arguments "OSProcess arguments" ^ self thisOSProcess arguments ! ! !OSProcess class methodsFor: 'sUnit' stamp: 'ThierryGoubier 10/11/2013 11:16'! authorInitials "Get the author initials from the system." ((Smalltalk respondsTo: #metacelloPlatformAttributes) and: [ (Smalltalk metacelloPlatformAttributes includes: #'pharo3.x') or: [ Smalltalk metacelloPlatformAttributes includes: #'pharo2.x' ] ]) ifTrue: [ ^ (Smalltalk at: #Author) fullName select: [ :c | c isUppercase ] ]. ^ (Smalltalk at: #Utilities) authorInitials! ! !OSProcess class methodsFor: 'private' stamp: 'dtl 1/7/2001 13:13'! classForThisOSProcess "Answer the class which represents the OS process in which Squeak runs." ^ ThisOSProcess concreteClass! ! !OSProcess class methodsFor: 'external command processing' stamp: 'dtl 1/7/2001 12:09'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process." "OSProcess command: 'ls -l /etc'" ^ self thisOSProcess command: aCommandString ! ! !OSProcess class methodsFor: 'debugging' stamp: 'dtl 4/2/2005 12:32'! debugMessage: aString "Print aString on standard output. The debug message is prefixed with the identity of the process in which the method is being evaluated, and the identity of the object which received the message. Useful for debugging timing or deadlock problems." [self thisOSProcess stdOut "The process in which the traced message is being evaluated" nextPutAll: Processor activeProcess hash printString, ':'; "The identity of the object being traced" nextPutAll: thisContext sender sender sender receiver hash printString, ':'; "The debug message" nextPutAll: aString asString; nextPut: Character lf; flush] on: Error do: []! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 21:48'! defaultPathString ^ self useFileSystem ifTrue: [(((Smalltalk at: #Path) perform: #workingDirectory) perform: #asFileReference) pathString] ifFalse: [(Smalltalk at: #FileDirectory) default pathName] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 9/5/2013 21:11'! deleteFileNamed: fileName "Delete the file with the given name." self useFileSystem ifTrue: [ | file | file := fileName perform: #asFileReference. ( { #ensureDelete "preferred selector" . #ensureDeleted "pharo 2, now deprecated in favor of ensureDelete" . #delete "fallback (earlier pharo versions?)" } detect: [ :e | file respondsTo: e ] ifNone: [ self error: 'do not know how to ensureDelete' ] ) ifNotNilDo: [ :sel | file perform: sel ]. (file respondsTo: #ensureDelete) ifTrue: [ file perform: #ensureDelete ] ifFalse: [ file perform: #ensureDeleted ] ] ifFalse: [ (Smalltalk at: #FileDirectory) default deleteFileNamed: fileName ] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 21:49'! directoryEntryNames: path ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) children collect: [:e | e perform: #basename] ] ifFalse: [ ((Smalltalk at: #FileDirectory) on: path) entries collect: [:e | e name] ] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 21:49'! directoryExists: path "Answer true if a directory of the given name exists. The given name may be either a full path name or a local directory within this directory." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) exists ] ifFalse: [ (Smalltalk at: #FileDirectory) default directoryExists: path ] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 21:49'! fileExists: path "Answer true if a file of the given name exists. The given name may be either a full path name or a local file within this directory." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) exists ] ifFalse: [ (Smalltalk at: #FileDirectory) default fileExists: path ] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 3/5/2005 11:32'! getSystemAttribute: attributeID "After Squeak version 3.6, #getSystemAttribute was moved to SmalltalkImage " ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk getSystemAttribute: attributeID]) current getSystemAttribute: attributeID! ! !OSProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 21:52'! helloStdErr "Write a message on the standard error stream of the OS process, normally the terminal or window from which Squeak is being run. Most operating systems implement stdin, stdout, and stderr in some manner, so this shown as an OSProcess example even though the implemention is in my subclasses." "OSProcess helloStdErr" | this | this := self thisOSProcess. this stdErr ifNil: [self noAccessorAvailable. ^ nil]. ^ this stdErr nextPutAll: 'Hello stderr'; nextPut: (Character lf); yourself! ! !OSProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 21:53'! helloWorld "Write a message on the standard output stream of the OS process, normally the terminal or window from which Squeak is being run. Most operating systems implement stdin, stdout, and stderr in some manner, so this shown as an OSProcess example even though the implemention is in my subclasses." "OSProcess helloWorld" | this | this := self thisOSProcess. this stdOut ifNil: [self noAccessorAvailable. ^ nil]. ^ this stdOut nextPutAll: 'Hello world'; nextPut: Character lf; yourself! ! !OSProcess class methodsFor: 'initialize-release' stamp: 'dtl 10/19/2001 18:44'! initialize "OSProcess initialize" UseIOHandle := (Smalltalk hasClassNamed: #IOHandle) ! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:41'! isNonUnixMac "True if the platform is Mac OS prior to OSX" "OSProcess isNonUnixMac" | numericOsVersion | numericOsVersion := self osVersion asInteger ifNil: [0]. ^ (self platformName = 'Mac OS') and: [numericOsVersion < 1000] ! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:42'! isOS2 "True if the platform is OS2" "FIXME please - What is the correct platform name for OS2?" "OSProcess isOS2" ^ self platformName = 'OS2' ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 9/4/2013 08:35'! isPharo3AndLater "True if this image is a pharo of major version 3 or greater" Smalltalk at: #SystemVersion ifPresent: [:cls | ((cls canUnderstand: #type) and: [ cls canUnderstand: #major ]) ifTrue: [^ cls current type = 'Pharo' and: [ cls current major >= 3 ]]]. ^false ! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/24/2003 09:52'! isResponsibleForThisPlatform "Answer true if this class has responsibilities for the platform on which the Squeak VM is currently running." ^ self subclassResponsibility! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:43'! isRiscOS "True if the platform is RiscOS" "OSProcess isRiscOS" ^ self platformName = 'RiscOS'! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:43'! isUnix "True if the platform is Unix (including Linux, Mac OS X, or other unix-like OS). Note: Keep this method in sync with UnixOSProcessPlugin>>isResponsibleForThisPlatform." "OSProcess isUnix" | numericOsVersion | ^ (self platformName = 'unix') or: [numericOsVersion := self osVersion asInteger ifNil: [0]. (self platformName = 'Mac OS') and: [numericOsVersion >= 1000]] ! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:46'! isUnixMac "True if the platform is Mac OS on OSX" "OSProcess isUnixMac" | osVersion numericOsVersion | osVersion := self osVersion. ^ ('darwin*' match: osVersion "Ian's VM") or: [numericOsVersion := osVersion asInteger ifNil: [0]. (self platformName = 'Mac OS') and: [numericOsVersion >= 1000] "John's VM"] ! ! !OSProcess class methodsFor: 'platform identification' stamp: 'dtl 3/5/2005 11:46'! isWindows "True if the platform is an MS Windows OS" "OSProcess isWindows" ^ self platformName = 'Win32'! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 10/27/2007 10:55'! listLoadedModules "After Squeak version 3.6, #listLoadedModules was moved to SmalltalkImage " ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk listLoadedModules]) current listLoadedModules! ! !OSProcess class methodsFor: 'utility' stamp: 'dtl 1/24/2013 19:59'! makeVM "Rebuild the virtual machine and plugins, assuming that this Squeak is running from a home directory in the appropriate place in the source code tree. If the build is successful, save the image and restart using the new VM." "OSProcess makeVM" ^ self makeVmIn: OSProcess defaultPathString, OSProcess pathSeparator, 'build' ! ! !OSProcess class methodsFor: 'utility' stamp: 'dtl 1/25/2013 18:58'! makeVmIn: buildDirectoryPathName "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory." "OSProcess makeVmIn: OSProcess defaultPathString, OSProcess pathSeparator, 'build'" ^ self classForThisOSProcess makeVmIn: buildDirectoryPathName ! ! !OSProcess class methodsFor: 'private' stamp: 'dtl 6/29/2005 14:18'! noAccessorAvailable self notify: 'process accessor module not available'! ! !OSProcess class methodsFor: 'version dependent' stamp: 'ThierryGoubier 9/5/2013 11:13'! osVersion "After Squeak version 3.6, #osVersion was moved to SmalltalkImage. Some versions of Pharo move this to OSPlatform and issue deprecation warnings about the other usages. Pharo3 deprecated OSPlatform direct access." "self osVersion" self isPharo3AndLater ifTrue: [ ^ (Smalltalk perform: #os) version ]. ^ (((Smalltalk hasClassNamed: #OSPlatform) and: [(Smalltalk at: #OSPlatform) respondsTo: #osVersion]) ifTrue: [Smalltalk at: #OSPlatform] ifFalse: [((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk osVersion]) current]) osVersion! ! !OSProcess class methodsFor: 'version dependent' stamp: 'SeanDeNigris 2/13/2013 09:46'! pathSeparator ^ self useFileSystem ifTrue: [((Smalltalk at: #DiskStore) current perform: #delimiter) asString] ifFalse: [(Smalltalk at: #FileDirectory) slash] ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 9/4/2013 08:35'! platformName "After Squeak version 3.6, #platformName was moved to SmalltalkImage Some versions of Pharo move this to OSPlatform and issue deprecation warnings about the other usages." "OSProcess platformName" self isPharo3AndLater ifTrue: [ ^ (Smalltalk perform: #os) name ]. ^ (((Smalltalk hasClassNamed: #OSPlatform) and: [(Smalltalk at: #OSPlatform) respondsTo: #platformName]) ifTrue: [Smalltalk at: #OSPlatform] ifFalse: [((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk osVersion]) current]) platformName! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 9/4/2013 08:00'! platformSubtype "After Squeak version 3.6, #platformSubtype was moved to SmalltalkImage " "OSProcess platformSubtype" self isPharo3AndLater ifTrue: [ ^ (Smalltalk perform: #os) perform: #subtype ]. ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk platformSubtype]) current platformSubtype! ! !OSProcess class methodsFor: 'external system access' stamp: 'dtl 1/7/2001 12:32'! programName "OSProcess programName" ^ self thisOSProcess programName ! ! !OSProcess class methodsFor: 'utility' stamp: 'dtl 1/7/2001 12:35'! quitAndRestart "Save image, start a new instance from the saved image, and quit this instance. This is useful if the VM has been recompiled or if a new pluggable primitive has been added." "OSProcess quitAndRestart" | firstPid this | firstPid := OSProcess thisOSProcess pid. firstPid ifNil: [self noAccessorAvailable. ^ nil]. Smalltalk saveSession. "Value of firstPid gets saved in the image" this := OSProcess thisOSProcess. this pid = firstPid ifTrue: [self squeak ifNotNil: [Smalltalk quitPrimitive]]. ^ this! ! !OSProcess class methodsFor: 'examples' stamp: 'dtl 11/8/2000 23:23'! readFromStdIn "Type some text on the standard input terminal, followed by or , then call this method. Any available input text in the stdin stream will be read. This method sets standard input for the Squeak OS process for non-blocking reads in order to prevent the Smalltalk image from blocking on the read. After the read, standard input is set back to its normal blocking I/O mode. Most operating systems implement stdin, stdout, and stderr in some manner, so this is shown as an OSProcess example even though the implemention is in my subclasses." "OSProcess readFromStdIn inspect" | input ioHandle resultString | input := self thisOSProcess stdIn. input ifNil: [self noAccessorAvailable. ^ nil]. ioHandle := input ioHandle. self accessor setNonBlocking: ioHandle. resultString := self thisOSProcess stdIn next: 10000. self accessor setBlocking: ioHandle. ^ resultString ! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 3/5/2005 14:16'! snapshot: save andQuit: quit "After Squeak version 3.6, #snapshot:andQuit: was moved to SmalltalkImage " ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk snapshot: save andQuit: quit]) current snapshot: save andQuit: quit! ! !OSProcess class methodsFor: 'external command processing' stamp: 'dtl 1/7/2001 13:06'! squeak "Start a new instance of Squeak running in a child OS process. The new instance will restart from the image file, so it is a clone of this image as it existed at the most recent image save. Note that subclasses can implement additional methods of starting Squeak images, especially for Unix systems." "OSProcess squeak" ^ self thisOSProcess squeak ! ! !OSProcess class methodsFor: 'utility' stamp: 'dtl 3/5/2005 11:34'! systemAttributes "Answer a Dictionary of all of the system attributes which can be obtained from SystemDictionary>>getSystemAttribute." "OSProcess systemAttributes" | args idx a | args := Dictionary new. idx := -1. [a := self getSystemAttribute: idx. a notNil and: [a size > 0]] whileTrue: [args at: idx put: a. idx := idx - 1]. a := self getSystemAttribute: 0. (a notNil and: [a size > 0]) ifTrue: [args at: 0 put: a. idx := idx - 1]. a := self getSystemAttribute: 1. (a notNil and: [a size > 0]) ifTrue: [args at: 1 put: a. idx := idx - 1]. a := self getSystemAttribute: 2. (a notNil and: [a size > 0]) ifTrue: [args at: 2 put: a. idx := idx - 1]. idx := 2. [a := self getSystemAttribute: idx. a notNil and: [a size > 0]] whileTrue: [args at: idx put: a. idx := idx + 1]. idx := 1001. [a := self getSystemAttribute: idx. a notNil and: [a size > 0]] whileTrue: [args at: idx put: a. idx := idx + 1]. ^ args. ! ! !OSProcess class methodsFor: 'instance creation' stamp: 'dtl 1/7/2001 12:03'! thisOSProcess "Answer the single instance of the class corresponding to the OS process in which this Smalltalk image is executing." "OSProcess thisOSProcess" ^ ThisOSProcess thisOSProcess ! ! !OSProcess class methodsFor: 'debugging' stamp: 'dtl 4/2/2005 12:32'! trace "Print the sender's context on standard output. The debug message is prefixed with the identity of the process in which the method is being evaluated, and the identity of the object which received the message. Useful for debugging timing or deadlock problems." [self thisOSProcess stdOut "The process in which the traced message is being evaluated" nextPutAll: Processor activeProcess hash printString, ':'; "The identity of the object being traced" nextPutAll: thisContext sender sender sender receiver hash printString, ':'; "The method context describing the method being evaluated" nextPutAll: thisContext sender sender sender printString; nextPut: Character lf; flush] on: Error do: []! ! !OSProcess class methodsFor: 'debugging' stamp: 'dtl 4/2/2005 12:30'! trace: debugMessageString "Print trace information followed by a debug message" [self thisOSProcess stdOut "The process in which the traced message is being evaluated" nextPutAll: Processor activeProcess hash printString, ':'; "The identity of the object being traced" nextPutAll: thisContext sender sender sender receiver hash printString, ':'; "The method context describing the method being evaluated" nextPutAll: thisContext sender sender sender printString, ':'; nextPutAll: debugMessageString; nextPut: Character lf; flush] on: Error do: []! ! !OSProcess class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 21:48'! useFileSystem "If true use FileSystem, otherwise use traditional FileDirectory. See senders for methods with file system dependencies." ^ Smalltalk hasClassNamed: #FileReference! ! !OSProcess class methodsFor: 'version testing' stamp: 'dtl 8/7/2003 07:28'! versionInformation "OSProcess versionInformation" | osppVersion | osppVersion := (Smalltalk hasClassNamed: #OSProcessPlugin) ifTrue: [(Smalltalk at: #OSProcessPlugin) versionInformation] ifFalse: ['(not installed in this image)']. ^ Array with: (self name, ' version ', self versionString) with: ((Smalltalk hasClassNamed: #CommandShell) ifTrue: [((Smalltalk at: #CommandShell) respondsTo: #versionString) ifTrue: ['CommandShell version ', (Smalltalk at: #CommandShell) versionString] ifFalse: ['CommandShell installed (old version, no versionString)']] ifFalse: ['CommandShell is not installed']) with: osppVersion ! ! !OSProcess class methodsFor: 'version testing' stamp: 'dtl 10/13/2013 09:47'! versionString "OSProcess versionString" ^'4.5.8'! ! !OSProcess class methodsFor: 'version dependent' stamp: 'ThierryGoubier 9/5/2013 11:12'! vmVersion "After Squeak version 3.6, #vmVersion was moved to SmalltalkImage. Pharo3 deprecated vmVersion." self isPharo3AndLater ifTrue: [ ^ (Smalltalk perform: #vm) version ]. ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk vmVersion]) current vmVersion! ! !OSProcess class methodsFor: 'external command processing' stamp: 'dtl 1/7/2001 12:11'! waitForCommand: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process." "OSProcess waitForCommand: 'echo sleeping...; sleep 3; echo I just slept for three seconds'" ^ self thisOSProcess waitForCommand: aCommandString ! ! !OSProcess methodsFor: 'initialize - release' stamp: 'dtl 5/31/1999 13:54'! initialize self subclassResponsibility! ! !OSProcess methodsFor: 'testing' stamp: 'dtl 7/14/2001 21:12'! isExternalProcess ^ true! ! !OSProcess methodsFor: 'private' stamp: 'dtl 8/30/2003 10:11'! noAccessorAvailable ^ self class noAccessorAvailable ! ! !OSProcess methodsFor: 'accessing' stamp: 'dtl 3/18/2000 13:57'! pid ^ pid ! ! !OSProcess methodsFor: 'accessing' stamp: 'dtl 3/18/2000 13:58'! pid: processIdentifier pid := processIdentifier ! ! !OSProcess methodsFor: 'printing' stamp: 'dtl 10/17/1999 21:12'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' with pid '. self pid printOn: aStream! ! !ThisOSProcess commentStamp: '' prior: 101824041! I represent the operating system process in which the Squeak VM is currently running. My subclasses implement system specific features for Unix, Windows, MacOS, or other operating systems by collaborating with corresponding subclasses of OSProcessAccessor to provide primitive access to the external operating system. ! !MacProcess commentStamp: '' prior: 101824412! I represent a Macintosh operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of MacOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my MacOSProcessAccessor.! !MacProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:46'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self isNonUnixMac ! ! !MacProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. Answer an instance of ExternalMacOSProcess which is a proxy for the new MacOS process." self notYetImplemented ! ! !MacProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Use my processAccessor to call vfork() and execve() and create a new child task. Answer a proxy for the new task, an instance of ExternalMacOSProcess." self notYetImplemented ! ! !MacProcess methodsFor: 'environment' stamp: 'dtl 1/23/2013 21:10'! getCwd "Not yet implemented - answer a reasonable default." ^ OSProcess defaultPathString! ! !MacProcess methodsFor: 'initialize - release' stamp: 'dtl 10/14/2001 14:03'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." ! ! !MacProcess methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:46'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isNonUnixMac! ! !OS2Process commentStamp: '' prior: 101824934! I represent an OS2 operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of OS2OSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my OS2OSProcessAccessor.! !OS2Process class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:47'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self isOS2 ! ! !OS2Process methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. Answer an instance of ExternalOS2OSProcess which is a proxy for the new OS2 process." self notYetImplemented ! ! !OS2Process methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Use my processAccessor to call vfork() and execve() and create a new child task. Answer a proxy for the new task, an instance of ExternalOS2OSProcess." self notYetImplemented ! ! !OS2Process methodsFor: 'environment' stamp: 'dtl 1/23/2013 21:09'! getCwd "Not yet implemented - answer a reasonable default." ^ OSProcess defaultPathString! ! !OS2Process methodsFor: 'initialize - release' stamp: 'dtl 10/14/2001 14:03'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." ! ! !OS2Process methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:47'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isOS2 ! ! !RiscOSProcess commentStamp: '' prior: 101825454! I represent an Acorn RiscOS operating system task, such as the task in which the Squeak VM is currently running. I collaborate with a singleton instance of RiscOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of a RiscOSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my RiscOSProcessAccessor. ! !RiscOSProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:48'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self isRiscOS ! ! !RiscOSProcess class methodsFor: 'utility' stamp: 'dtl 3/11/2001 11:47'! makeVmIn: buildDirectoryPathName "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory." ! ! !RiscOSProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. Answer an instance of ExternalRiscOSProcess which is a proxy for the new RiscOS task." self notYetImplemented ! ! !RiscOSProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:18'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Use my processAccessor to call vfork() and execve() and create a new child task. Answer a proxy for the new task, an instance of ExternalRiscOSProcess." self notYetImplemented ! ! !RiscOSProcess methodsFor: 'environment' stamp: 'dtl 1/23/2013 21:10'! getCwd "Not yet implemented - answer a reasonable default." ^ OSProcess defaultPathString! ! !RiscOSProcess methodsFor: 'initialize - release' stamp: 'dtl 10/14/2001 14:04'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." ! ! !RiscOSProcess methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:48'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isRiscOS ! ! !ThisOSProcess class methodsFor: 'concrete subclasses' stamp: 'dtl 3/5/2005 12:08'! concreteClass "ThisOSProcess concreteClass" ^ self subclasses detect: [:c | c isResponsibleForThisPlatform] ifNone: [self notify: self printString, ': No concrete class implementation available for system type ', self platformName printString. nil] ! ! !ThisOSProcess class methodsFor: 'concrete subclasses' stamp: 'dtl 6/28/2010 21:14'! concreteClassOrNil "ThisOSProcess concreteClassOrNil" ^ self subclasses detect: [:c | c isResponsibleForThisPlatform] ifNone: [nil] ! ! !ThisOSProcess class methodsFor: 'initialize-release' stamp: 'dtl 5/20/2011 19:11'! initialize "ThisOSProcess initialize" OSProcess initialize. "required to ensure the change sets file in smoothly" AttachableFileStream initialize. OSProcessAccessor initialize. self initializeThisOSProcess. Smalltalk addToStartUpList: ThisOSProcess. Smalltalk addToShutDownList: ThisOSProcess ! ! !ThisOSProcess class methodsFor: 'initialize-release' stamp: 'dtl 8/25/2010 22:58'! initializeThisOSProcess "Initialize the singleton instance, creating a new instance only if the platform type has changed since shutdown (running on a different type of computer)." (ThisInstance isNil or: [ThisInstance isResponsibleForThisPlatform not]) ifTrue: [ | cls | (cls := self concreteClassOrNil) ifNil: [ThisInstance := nil "no concrete class for this platform"] ifNotNil: [ThisInstance := cls basicNew]]. ThisInstance initialize! ! !ThisOSProcess class methodsFor: 'initialize-release' stamp: 'dtl 7/5/2010 11:56'! initializeThisOSProcessWithNotifier "Initialize the singleton instance, creating a new instance only if the platform type has changed since shutdown (running on a different type of computer). Warn if no implementation is available for this platform." (ThisInstance isNil or: [ThisInstance isResponsibleForThisPlatform not]) ifTrue: [ThisInstance := self concreteClass basicNew]. ThisInstance initialize! ! !ThisOSProcess class methodsFor: 'instance creation' stamp: 'dtl 11/5/2000 16:10'! new self notify: self name, ': Only one instance of ThisOSProcess or any of its subclasses should exist in the image. Use #thisOSProcess to obtain the singleton instance.'. self shouldNotImplement! ! !ThisOSProcess class methodsFor: 'system startup' stamp: 'dtl 3/8/2013 18:42'! shutDown: quitting "Break dependency on my OSProcessAccessor. This is done explicitly at shutDown time in order to prevent possible problems when an image is restarted on another platform type, in which case a new ThisOSProcess instance is created and the old instance could still have an unwanted dependency on an OSProcessAccessor." quitting ifTrue: [OSProcess accessor ifNotNilDo: [:acc | acc breakDependents]]! ! !ThisOSProcess class methodsFor: 'system startup' stamp: 'dtl 9/3/2010 16:41'! startUp: resuming "Initialize my singleton instance, and the singleton instance of my OSProcessAccessor. On Unix, set the signal handler in my process accessor to respond to externally generated sigchld signals. This must be done after each image restart in order to call a primitive which informs the VM of the identity of the semaphore to signal. When not running on a Unix system, the primitive fails and the method has no effect. Notify dependents of the singleton instance if the image has restarted in a different OS process (this is not the case when #startUp is called after a simple image save). The notification is done in the initialization of my OSProcessAccessor." | aio | (aio := Smalltalk at: #AioEventHandler) ifNotNil: [ aio startUp: resuming ]. self initializeThisOSProcess! ! !ThisOSProcess class methodsFor: 'instance creation' stamp: 'dtl 10/1/2006 08:38'! thisOSProcess "Answer a single instance of the class corresponding to the OS process in which this Smalltalk image is executing." "ThisOSProcess thisOSProcess" ^ ThisInstance! ! !ThisOSProcess methodsFor: 'comparing' stamp: 'dtl 6/27/2010 22:34'! = processProxy "True if this is a proxy that represents the same OS process as processProxy" ^ ((self isKindOf: ThisOSProcess) and: [pid = processProxy pid]) and: [sessionID = processProxy sessionID]! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 14:55'! activeChildren "Answer child processes which are currently believed to be running." "OSProcess thisOSProcess activeChildren" | children | accessProtect critical: [ children := allMyChildren select: [ :p | p isRunning ] ]. ^children ! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 11:07'! allMyChildren ^ allMyChildren! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/5/2003 21:59'! canConnectToXDisplay: xDisplayName "Open and close a connection to displayName. It the connection was successfully opened, answer true; otherwise false. This is intended to check for the ability to open an X display prior to actually making the attempt." "self thisOSProcess canConnectToXDisplay: ':0.0' " "self thisOSProcess canConnectToXDisplay: ':1' " "self thisOSProcess canConnectToXDisplay: 'bogus:0' " "<-make sure network is running first!!" (xDisplayName isKindOf: String) ifFalse: [^ false]. ^ self processAccessor primCanConnectToXDisplay: xDisplayName ! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 14:59'! childPids ^ allMyChildren asArray asArray collect: [ :p | p pid ] ! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/6/2003 06:35'! closeXDisplay "Become headless by closing the X session. All subsequent processing should involve no further display interaction." "self thisOSProcess closeXDisplay" | proc | proc := self processAccessor primKillDisplay. proc ifNil: [self noAccessorAvailable]. ^ proc ! ! !ThisOSProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:15'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. Answer an instance of ExternalMacOSProcess which is a proxy for the new OS process." self subclassResponsibility! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/5/2003 22:05'! currentXDisplayName "self thisOSProcess currentXDisplayName" ^ self processAccessor primGetXDisplayName! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/6/2003 06:35'! decapitate "Become headless by closing the X session. All subsequent processing should involve no further display interaction." "self thisOSProcess decapitate" ^ self closeXDisplay ! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 14:52'! discardExitedChildren "Remove entries for completed child processed from dictionary." self updateAllMyChildren. accessProtect critical: [ allMyChildren := allMyChildren select: [ :p | p isComplete not ] ]. ^ allMyChildren ! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/6/2003 06:30'! disconnectXDisplay "Disconnect from the X server, but do not close the existing Squeak window. A new display medium must be opened before further interaction with the display." "self thisOSProcess disconnectXDisplay" | proc | proc := self processAccessor primDisconnectDisplay. proc ifNil: [self noAccessorAvailable]. ^ proc ! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/5/2003 22:12'! displayOnXServer: xDisplayName "Check if it is possible to open a display on the X server identified by xDisplayName. If so, close the current X display and reopen it on the new server. On success, answer the previous display name. On failure, answer a string with an error message. This method is expected to be called by a web server or other application which may wish to make use of the result string." "self thisOSProcess displayOnXServer: ':0.0' " "self thisOSProcess displayOnXServer: 'unix:0' " "self thisOSProcess displayOnXServer: ':1' " "self thisOSProcess displayOnXServer: 'noSuchMachine'" "self thisOSProcess displayOnXServer: 'noSuchMachine:0'" "<-make sure network is running first!!" | previousDisplayName | (xDisplayName isKindOf: String) ifFalse: [^ 'expected display name string']. previousDisplayName := self currentXDisplayName. (self canConnectToXDisplay: xDisplayName) ifTrue: [self decapitate. self setXDisplayName: xDisplayName. self recapitate. ^ previousDisplayName] ifFalse: [^ 'cannot connect to display ', xDisplayName] ! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 14:54'! exitedChildren "Answer child processes which have exited and are no longer running." "OSProcess thisOSProcess exitedChildren" | children | accessProtect critical: [ children := allMyChildren select: [ :p | p isComplete ]]. ^ children ! ! !ThisOSProcess methodsFor: 'finalization' stamp: 'dtl 11/4/2000 15:49'! finalize processAccessor ifNotNil: [processAccessor removeDependent: self. processAccessor finalize]. processAccessor := nil! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 9/1/2003 13:15'! flushXDisplay "Synchronize output to the X display." "self thisOSProcess flushXDisplay" ^ self processAccessor primFlushXDisplay ! ! !ThisOSProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:16'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Use my processAccessor to call vfork() and execve() and create a new child task. Answer a proxy for the new task, an instance of ExternalOSProcess." self subclassResponsibility! ! !ThisOSProcess methodsFor: 'environment' stamp: 'dtl 10/18/2001 20:10'! getCwd self subclassResponsibility! ! !ThisOSProcess methodsFor: 'private - IOHandle' stamp: 'dtl 9/25/2005 16:23'! handleFromAccessor: aByteArrayOrIOAccessor UseIOHandle ifTrue: [aByteArrayOrIOAccessor isNil ifTrue: [^ nil] ifFalse: [^ aByteArrayOrIOAccessor asSQFileStruct]] ifFalse: [^ aByteArrayOrIOAccessor] ! ! !ThisOSProcess methodsFor: 'private - IOHandle' stamp: 'dtl 9/25/2005 16:22'! handleFromFileStream: aFileStream UseIOHandle ifTrue: [^ aFileStream ioHandle asSQFileStruct] ifFalse: [^ aFileStream fileID] ! ! !ThisOSProcess methodsFor: 'comparing' stamp: 'dtl 6/27/2010 22:38'! hash ^ (pid ifNil: [self identityHash]) + (sessionID ifNil: [0] ifNotNil: [sessionID sum])! ! !ThisOSProcess methodsFor: 'initialize - release' stamp: 'dtl 7/26/2010 13:51'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is. executing." accessProtect := Semaphore forMutualExclusion. self initializeAllMyChildren. processAccessor ifNotNil: [processAccessor breakDependents. processAccessor := nil]. ((self processAccessor notNil and: [processAccessor canAccessSystem]) and: [pid ~= processAccessor primGetPid]) ifTrue: [self resetChildProcessDictionary] ! ! !ThisOSProcess methodsFor: 'initialize - release' stamp: 'dtl 7/4/2010 11:18'! initializeAllMyChildren "Use a Dictionary if process identifiers are unique. On Windows, the process ID is not unique, so use an OrderedCollection instead." self subclassResponsibility ! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/24/2003 10:12'! isConnectedToXServer "Answer true if VM is currently connected to an X server." "self thisOSProcess isConnectedToXServer" ^ self processAccessor primIsConnectedToXServer ! ! !ThisOSProcess methodsFor: 'platform identification' stamp: 'dtl 10/10/2001 21:24'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self subclassResponsibility! ! !ThisOSProcess methodsFor: 'private - IOHandle' stamp: 'dtl 9/25/2005 16:23'! isStdErr: anIOHandle "Answer true if anIOHandle represents stderr." | realHandle | anIOHandle ifNil: [^ false]. realHandle := self processAccessor getStdErrHandle. realHandle ifNil: [^ false]. UseIOHandle ifTrue: [^ anIOHandle handle = realHandle handle] ifFalse: [^ anIOHandle = realHandle] ! ! !ThisOSProcess methodsFor: 'private - IOHandle' stamp: 'dtl 9/25/2005 16:23'! isStdIn: anIOHandle "Answer true if anIOHandle represents stdin." | realHandle | anIOHandle ifNil: [^ false]. realHandle := self processAccessor getStdInHandle. realHandle ifNil: [^ false]. UseIOHandle ifTrue: [^ anIOHandle handle = realHandle handle] ifFalse: [^ anIOHandle = realHandle] ! ! !ThisOSProcess methodsFor: 'private - IOHandle' stamp: 'dtl 9/25/2005 16:23'! isStdOut: anIOHandle "Answer true if anIOHandle represents stdout." | realHandle | anIOHandle ifNil: [^ false]. realHandle := self processAccessor getStdOutHandle. realHandle ifNil: [^ false]. UseIOHandle ifTrue: [^ anIOHandle handle = realHandle handle] ifFalse: [^ anIOHandle = realHandle] ! ! !ThisOSProcess methodsFor: 'updating' stamp: 'dtl 2/26/2002 08:37'! needsRefresh "Answer true if the sessionID variable is out of date with respect to the running OS Process. Subclasses should provide implementation, answer true as default." ^ true! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/6/2003 06:36'! openXDisplay "Restore headful display opening the X session." "self thisOSProcess closeXDisplay. (Delay forSeconds: 5) wait. self thisOSProcess openXDisplay." | proc | proc := self processAccessor primOpenXDisplay. proc ifNil: [self noAccessorAvailable]. ^ proc ! ! !ThisOSProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 13:30'! processAccessor | a | processAccessor ifNil: [a := OSProcessAccessor forThisOSProcess. a isResponsibleForThisPlatform ifTrue: [processAccessor := a. processAccessor addDependent: self]]. ^ processAccessor! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/6/2003 06:34'! recapitate "Restore headful display opening the X session." "self thisOSProcess decapitate. (Delay forSeconds: 5) wait. self thisOSProcess recapitate." ^ self openXDisplay ! ! !ThisOSProcess methodsFor: 'updating' stamp: 'dtl 2/26/2002 08:32'! refreshFromProcessAccessor "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." self subclassResponsibility! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/4/2010 16:32'! registerChildProcess: anOSProcess self subclassResponsibility! ! !ThisOSProcess methodsFor: 'updating' stamp: 'dtl 7/4/2010 14:43'! resetChildProcessDictionary "Forget all the entries in the allMyChildren dictionary. This method may be called when a new session is started, since the child processes of the previous session are probably no longer of any interest." self updateAllMyChildren. "Ensure contents are up to date before releasing them." self initializeAllMyChildren ! ! !ThisOSProcess methodsFor: 'accessing' stamp: 'dtl 9/26/2005 20:04'! sessionID ^ sessionID! ! !ThisOSProcess methodsFor: 'private' stamp: 'dtl 9/25/2005 13:28'! setStdErr "If stdErr is nil, then set it. If not nil, check to see if it is has a valid connection to stderr. If not valid, then replace it, otherwise answer the existing valid stream. Obscure bug warning: If a valid AttachableFileStream on stderr is garbage collected, then stderr will be closed. It is advisable (but not necessary) to treat the stream on stderr as a singleton, but in any case, any extra instances attached to stderr should not be allowed to be garbage collected." | stdErrHandle | stdErr ifNotNil: [(self isStdErr: stdErr ioHandle) ifTrue: [^ stdErr]]. stdErrHandle := self processAccessor getStdErrHandle. stdErrHandle ifNotNil: [stdErr := AttachableFileStream name: 'stderr' attachTo: stdErrHandle writable: true]. ^ stdErr ! ! !ThisOSProcess methodsFor: 'private' stamp: 'dtl 9/25/2005 13:28'! setStdIn "If stdIn is nil, then set it. If not nil, check to see if it is has a valid connection to stdin. If not valid, then replace it, otherwise answer the existing valid stream. Obscure bug warning: If a valid AttachableFileStream on stdin is garbage collected, then stdin will be closed. It is advisable (but not necessary) to treat the stream on stdin as a singleton, but in any case, any extra instances attached to stdin should not be allowed to be garbage collected." | stdInHandle | stdIn ifNotNil: [(self isStdIn: stdIn ioHandle) ifTrue: [^ stdIn]]. stdInHandle := self processAccessor getStdInHandle. stdInHandle ifNotNil: [stdIn := AttachableFileStream name: 'stdin' attachTo: stdInHandle writable: false]. ^ stdIn ! ! !ThisOSProcess methodsFor: 'private' stamp: 'dtl 9/25/2005 13:29'! setStdOut "If stdOut is nil, then set it. If not nil, check to see if it is has a valid connection to stdout. If not valid, then replace it, otherwise answer the existing valid stream. Obscure bug warning: If a valid AttachableFileStream on stdout is garbage collected, then stdout will be closed. It is advisable (but not necessary) to treat the stream on stdout as a singleton, but in any case, any extra instances attached to stdout should not be allowed to be garbage collected." | stdOutHandle | stdOut ifNotNil: [(self isStdOut: stdOut ioHandle) ifTrue: [^ stdOut]]. stdOutHandle := self processAccessor getStdOutHandle. stdOutHandle ifNotNil: [stdOut := AttachableFileStream name: 'stdout' attachTo: stdOutHandle writable: true]. ^ stdOut ! ! !ThisOSProcess methodsFor: 'display management' stamp: 'dtl 8/5/2003 22:16'! setXDisplayName: xDisplayName "Set X display name for use by the next call to recapitate" "self thisOSProcess setXDisplayName: 'unix:0' " "self thisOSProcess setXDisplayName: ':1' " self processAccessor primSetXDisplayName: xDisplayName ! ! !ThisOSProcess methodsFor: 'accessing' stamp: 'dtl 9/25/2005 13:30'! stdErr ^ stdErr! ! !ThisOSProcess methodsFor: 'accessing' stamp: 'dtl 9/25/2005 13:30'! stdIn ^ stdIn! ! !ThisOSProcess methodsFor: 'accessing' stamp: 'dtl 9/25/2005 13:31'! stdOut ^ stdOut! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/5/2010 11:02'! unregisterChildProcess: anOSProcess self subclassResponsibility ! ! !ThisOSProcess methodsFor: 'updating' stamp: 'dtl 10/15/2001 21:27'! update: aParameter aParameter == #invalidProcessAccessor ifTrue: [processAccessor := nil]. ^ super update: aParameter! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 2/25/2002 23:23'! updateActiveChildren "Test each active child for its completion status and update runState and exitStatus accordingly. This method may be called when a semaphore is set indicating that some child OSProcess has died. A better approach might be to use an event queue for death of child events; however, until event queues are part of Squeak image, this polling mechanism is sufficient." self activeChildren do: [:child | child update: #runState] ! ! !ThisOSProcess methodsFor: 'child process management' stamp: 'dtl 7/26/2010 11:34'! updateAllMyChildren "Test each child to make sure that it is still accessible. If the child is believed to be running, check to see if it has exited, and update runState and exitStatus accordingly." | children | accessProtect critical: [children := allMyChildren asArray]. children do: [:child | child update: #accessibility. child isRunning ifTrue: [child update: #runState]] ! ! !UnixProcess commentStamp: '' prior: 101825990! I represent the Unix operating system process in which this Squeak session is running. I collaborate with an instance of UnixOSProcessAccessor to provide access to the external operating system. My instance variables are updated when my process accessor changes, allowing them to be monitored with a Smalltalk inspector. ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 3/10/2001 09:52'! arguments "UnixProcess arguments" ^ self thisOSProcess arguments ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 2/24/2013 10:26'! backgroundProcessInHeadlessSqueak "Demonstrate running a ''batch job'' in a low priority background Squeak, with output written to an OSPipe. This Squeak image reads data from the pipe and displays it on the Transcript. The background Squeak will write enough data to block an OSPipe, so the foreground Squeak loops while reading available data up to end of file. Open a Transcript, then '' inspect it '' on this method. Process runs indefinitely, so terminate the process to end demo." "UnixProcess backgroundProcessInHeadlessSqueak" ^ [[| pipe backgroundJob ws s | pipe := OSPipe new. backgroundJob := OSProcess thisOSProcess forkHeadlessSqueakAndDoThenQuit: [| beers | OSProcess accessor nice: 1. "lower priority of background OS process" beers := [:i | (i < 1 ifTrue: ['no more'] ifFalse: [i asString]) , ' bottle' , (i = 1 ifTrue: [''] ifFalse: ['s'])]. (99 to: 1 by: -1) do: [:count | pipe nextPutAll: (beers value: count) , ' of beer on the wall, ' , (beers value: count) , ' of beer' , String cr , 'take one down and pass it around, ' , (beers value: count - 1) , ' of beer on the wall'; cr]. pipe close]. WorldState addDeferredUIMessage: [Transcript show: backgroundJob asString , ' started'; cr]. pipe closeWriter. "don't need writer end, close it before the #upToEnd" "pipe writer blocks when pipe full, so we need to loop while reading to end " ws := WriteStream on: String new. [backgroundJob isComplete] whileFalse: [(Delay forMilliseconds: 200) wait. (s := pipe upToEnd) ifNotNil: [ws nextPutAll: s]]. pipe close. WorldState addDeferredUIMessage: [Transcript show: backgroundJob asString , ' completed, display results in 2 seconds'; cr]. (Delay forSeconds: 2) wait. WorldState addDeferredUIMessage: [Transcript show: ws contents. Transcript cr; show: 'delay 5 seconds before forking next Squeak job'; cr]. (Delay forSeconds: 5) wait] repeat] forkAt: Processor userBackgroundPriority! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:10'! canConnectToXDisplay: xDisplayName "Deprecated. See ThisOSProcess>canConnectToXDisplay:" "self canConnectToXDisplay: ':0.0' " ^ self thisOSProcess canConnectToXDisplay: xDisplayName ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:17'! catAFile "Copy contents of a file to standard output. This demonstrates reassigning stdin to an open FileStream." "UnixProcess catAFile" | in proc | in := FileStream readOnlyFileNamed: '/etc/hosts'. proc := self forkJob: '/bin/cat' arguments: nil environment: nil descriptors: (Array with: in with: nil with: nil). in close. proc ifNil: [self noAccessorAvailable]. ^ proc! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:28'! catFromFileToFiles "Copy contents of a file to another file, with any error messages going to a third file." "UnixProcess catFromFileToFiles" | in out err proc | in := FileStream readOnlyFileNamed: '/etc/hosts'. out := FileStream newFileNamed: '/tmp/deleteMe.out'. err := FileStream newFileNamed: '/tmp/deleteMe.err'. proc := UnixProcess forkJob: '/bin/cat' arguments: nil environment: nil descriptors: (Array with: in with: out with: err). in close. out close. err close. proc ifNil: [self noAccessorAvailable]. ^ proc! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 11/14/2000 00:07'! clientServerDemo "Start a new headless instance of Squeak running in a child OS process. The new instance is a nearly identical copy of its parent, resuming execution at the same point as the parent. The child process will run a TCP server process in the headless image, then exit. Test results are written to the Transcript. Answer '127 0 0 1' in response to the host address dialog." "UnixProcess clientServerDemo" | proc | proc := self forkHeadlessSqueakAndDoThenQuit: [Socket remoteTestServerTCP]. proc ifNotNil: [Socket remoteTestClientTCP]. ^ proc ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 1/7/2001 12:55'! clientServerDemo2 "Start a new instance of Squeak running in a child OS process. The new instance is a nearly identical copy of its parent, resuming execution at the same point as the parent. The child process will run a TCP server process, then exit. Test results are written to the Transcript. " "UnixProcess clientServerDemo2" | remotePort remoteHost serverBlock socket buffer n bytesToSend sendBuf receiveBuf done bytesSent bytesReceived packetsSent packetsReceived t | remotePort := 54321. remoteHost := 'localhost'. serverBlock := [Transcript clear; cr; show: 'This is the server Squeak session'; cr. Socket initializeNetworkIfFail: [^ nil]. socket := Socket newTCP. socket listenOn: remotePort. buffer := String new: 4000. socket waitForConnectionUntil: Socket standardDeadline. [socket isConnected] whileTrue: [socket dataAvailable ifTrue: [n := socket receiveDataInto: buffer. socket sendData: buffer count: n]]. socket closeAndDestroy]. (UnixProcess forkSqueakAndDoThenQuit: serverBlock) ifNil: [self noAccessorAvailable. ^ nil]. Transcript cr; show: 'This is the client Squeak session'; cr. Transcript show: 'starting client/server TCP test'; cr. Transcript show: 'initializing network ... '. Socket initializeNetworkIfFail: [^ Transcript show: 'failed']. Transcript show: 'ok'; cr. socket := Socket newTCP. socket connectTo: (NetNameResolver addressForName: remoteHost) port: remotePort. socket waitForConnectionUntil: Socket standardDeadline. Transcript show: 'client endpoint created'; cr. bytesToSend := 1000000. sendBuf := String new: 4000 withAll: $x. receiveBuf := String new: 50000. done := false. bytesSent := bytesReceived := packetsSent := packetsReceived := 0. t := Time millisecondsToRun: [[done] whileFalse: [(socket sendDone and: [bytesSent < bytesToSend]) ifTrue: [packetsSent := packetsSent + 1. bytesSent := bytesSent + (socket sendData: sendBuf)]. socket dataAvailable ifTrue: [packetsReceived := packetsReceived + 1. bytesReceived := bytesReceived + (socket receiveDataInto: receiveBuf)]. done := bytesSent >= bytesToSend]. [bytesReceived < bytesToSend] whileTrue: [socket dataAvailable ifTrue: [packetsReceived := packetsReceived + 1. bytesReceived := bytesReceived + (socket receiveDataInto: receiveBuf)]]]. socket closeAndDestroy. Transcript show: 'remoteClient TCP test done; time = ' , t printString; cr. Transcript show: packetsSent printString , ' packets, ' , bytesSent printString , ' bytes sent (' , (bytesSent * 1000 // t) printString , ' bytes/sec)'; cr. Transcript show: packetsReceived printString , ' packets, ' , bytesReceived printString , ' bytes received (' , (bytesReceived * 1000 // t) printString , ' bytes/sec)'; cr. ^ bytesReceived! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 9/9/2000 16:00'! cloneSqueak "Start a new instance of Squeak running in a child OS process. The new instance is a nearly identical copy of its parent, resuming execution at the same point as the parent, and differentiated only by the return value of this method." "UnixProcess cloneSqueak" | proc | proc := self forkSqueak. proc ifNil: [self noAccessorAvailable]. ^ proc ! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:10'! currentXDisplayName "Deprecated. See ThisOSProcess>>currentXDisplayName" "self currentXDisplayName" ^ self thisOSProcess currentXDisplayName ! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:09'! decapitate "Deprecated. See ThisOSProcess>>decapitate" "self decapitate" ^ OSProcess thisOSProcess decapitate! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:18'! displayOnXServer: xDisplayName "Deprecated. See ThisOSProcess>>displayOnXServer" "self displayOnXServer: ':0.0' " "self displayOnXServer: 'unix:0' " "self displayOnXServer: ':1' " "self displayOnXServer: 'noSuchMachine'" "self displayOnXServer: 'noSuchMachine:0'" "<-make sure network is running first!!" ^ OSProcess thisOSProcess displayOnXServer: xDisplayName! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:31'! eightLeafSqueakTree "Clone this squeak three times, resulting in a total of (2 raisedTo: 3) nearly identical squeaks. Have a look at the pidArray inspectors and to the debug messages on stdout in order to see what is going on. The tree of processes looks like this: 111 +--------+--------+ | | | 011 101 110 +---+ | | | 100 010 001 | 000 " "UnixProcess eightLeafSqueakTree inspect" | depth this pidArray debugString | depth := 3. this := OSProcess thisOSProcess. this stdOut ifNil: [self noAccessorAvailable. ^ nil]. pidArray := Array new: depth. (1 to: depth) do: [ :e | | p pid | p := this forkSqueak. pid := (p == this) ifTrue: [0] ifFalse: [p pid]. "Use Unix fork(2) convention" pidArray at: e put: pid]. debugString := 'pid ', (this pid printString), ' ppid ', (this ppid printString), ' ', (pidArray printString), (Character lf asString). this stdOut nextPutAll: debugString. ^ pidArray! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 12/27/2000 17:18'! env "Note: The #environment selector has special meaning for classes, so use #env." "UnixProcess env" ^ self thisOSProcess environment ! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 12/27/2000 16:57'! forkHeadlessSqueakAndDo: aBlock "Start a new instance of Squeak running in a child OS process, and execute aBlock in the child instance. The new instance is a clone of this image, but without a connection to the X display. The child instance executes aBlock, which hopefully does not involve interaction with the X display; and the parent continues normally. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess forkHeadlessSqueakAndDo: [UnixProcess helloWorld]" ^ self thisOSProcess forkHeadlessSqueakAndDo: aBlock ! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 12/27/2000 17:00'! forkHeadlessSqueakAndDoThenQuit: aBlock "Start a new instance of Squeak running in a child OS process, and execute aBlock in the child instance. The new instance is a clone of this image, but without a connection to the X display. The child instance executes aBlock, which hopefully does not involve interaction with the X display; and the parent continues normally. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess forkHeadlessSqueakAndDoThenQuit: [UnixProcess helloWorld]" ^ self thisOSProcess forkHeadlessSqueakAndDoThenQuit: aBlock ! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 12/27/2000 16:48'! forkJob: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Call Unix vfork() and execve() to create a child process, and answer the child process. Delegate this to the singleton OSProcess>>thisOSProcess." ^ self thisOSProcess forkJob: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 7/5/2000 07:19'! forkSqueak "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess forkSqueak" ^ self thisOSProcess forkSqueak. ! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 10/8/2001 20:40'! forkSqueakAndDo: aBlock "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess forkSqueakAndDo: [Object inform: 'Hi, I am the child Squeak process.']" ^ self thisOSProcess forkSqueakAndDo: aBlock ! ! !UnixProcess class methodsFor: 'child process creation' stamp: 'dtl 10/8/2001 20:41'! forkSqueakAndDoThenQuit: aBlock "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess forkSqueakAndDoThenQuit: [Object inform: 'Hi, I am the child Squeak process. Click OK to exit the child Squeak.']" ^ self thisOSProcess forkSqueakAndDoThenQuit: aBlock ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 05:11'! headlessChild "Start a new instance of Squeak running in a child OS process. The new instance is a nearly identical copy of its parent, resuming execution at the same point as the parent, and differentiated only by the return value of this method. The child squeak will write a message to standard output, then exit." "UnixProcess headlessChild" | this childBlock | this := OSProcess thisOSProcess. childBlock := [this stdOut nextPutAll: 'hello world from child process '. this pid printOn: OSProcess thisOSProcess stdOut. this stdOut nextPut: Character lf ]. ^ self forkHeadlessSqueakAndDoThenQuit: childBlock ! ! !UnixProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:49'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self isUnix ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:34'! listDirectory "Execute a simple command, sending output to standard output." "UnixProcess listDirectory" | proc | proc := self forkJob: '/bin/ls' arguments: nil environment: nil descriptors: nil. proc ifNil: [self noAccessorAvailable]. ^ proc! ! !UnixProcess class methodsFor: 'utility - VM building' stamp: 'dtl 10/19/2001 13:31'! makeVmIn: buildDirectoryPathName "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory." "UnixProcess makeVmIn: '/usr/local/squeak/Squeak-2.8/build'" "UnixProcess makeVmIn: nil" ^ self makeVmIn: (buildDirectoryPathName ifNil: ['']) interactive: true ! ! !UnixProcess class methodsFor: 'utility - VM building' stamp: 'dtl 10/19/2001 11:41'! makeVmIn: buildDirectoryPathName interactive: aBoolean "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory. If aBoolean is true, display interactive dialogs, otherwise output goes only to the Transcript." "UnixProcess makeVmIn: '/usr/local/squeak/Squeak-2.8/build' interactive: true" | commandString result | commandString := 'cd ', buildDirectoryPathName, '; make'. Transcript cr; show: 'running external command "', commandString, '"'; cr. result := self waitForCommandOutputArray: commandString. ((result at: 3) == 0 and: [(result at: 2) isEmpty]) ifTrue: [Transcript show: 'make completed successfully, restarting VM'; cr. aBoolean ifTrue: [self inform: 'make completed successfully, restarting VM']. self quitAndRestart] ifFalse: [Transcript show: (result at: 2); cr. Transcript show: 'make did not succeed, VM will not be restarted'; cr. aBoolean ifTrue: [self inform: 'make did not succeed, VM will not be restarted'. self inform: (result at: 2)]]. ^ result ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 12/27/2000 17:16'! path "UnixProcess path" ^ self thisOSProcess path ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 3/10/2001 09:53'! programName "UnixProcess programName" ^ self thisOSProcess programName ! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:15'! recapitate "Deprecated. See ThisOSProcess>>recapitate" "self decapitate. (Delay forSeconds: 5) wait. self recapitate." ^ OSProcess thisOSProcess recapitate! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 3/17/2002 13:38'! restartVirtualMachine "Fork a new instance and quit this one. This moves the running VM into a new OS process, and starts a new X display for the new process. It does not reload the VM program text, so this cannot be used to restart the VM after rebuild." "UnixProcess restartVirtualMachine" | proc | proc := self forkSqueak. proc isNil ifTrue: [self noAccessorAvailable. nil] ifFalse: [OSProcess thisOSProcess == proc ifFalse: ["Quit if this is the parent process" Smalltalk quitPrimitive]]. ^ proc! ! !UnixProcess class methodsFor: 'unit tests' stamp: 'dtl 3/5/2005 14:19'! runTests "Run a few tests to see if things are working correctly on Unix/Linux. Output is on stdout, stderr, and the Squeak Transcript. One of the tests requires input from stdin, so Squeak should be run from a shell command line and not as a background process. Warning: This test will crash your VM if your are using the -xshm command line option. For reasons which I do not quite understand, the X shared memory segment becomes invalid when the Squeak VM which initially opened the shared memory exits. The remaining Squeak children will crash when then then next try to update the display. Note: If you see 'select: Bad file descriptor' messages on your console standard output, these are occuring while running headless in the decapitate/recapitate tests. Important: Prior to evaluating this method, please type one line of text followed by a on the terminal standard input. This provides the input for the stdin test. Failing to provide this input prior to evaluating the tests will cause one of the test cases to fail." "UnixProcess runTests" | this s p failures result a | failures := 0. Transcript show: 'Begin OSProcess tests'; cr. Transcript show: 'Test for working ProcessAccessor ... '. this := OSProcess thisOSProcess. (this pid isKindOf: Integer) ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'Echo one line of text previously entered from stdin ... '. s := OSProcess readFromStdIn. s size > 0 ifTrue: [Transcript show: 'OK'; cr; show: s; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'Message to stdout ... '. (OSProcess helloWorld isKindOf: AttachableFileStream) ifTrue: [Transcript show: 'OK'; cr; show: s; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'Message to stderr ... '. (OSProcess helloStdErr isKindOf: AttachableFileStream) ifTrue: [Transcript show: 'OK'; cr; show: s; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess cataFile ... '. p := UnixProcess catAFile. (Delay forSeconds: 1) wait. p exitStatus == 0 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess testEnvSet ... '. p := UnixProcess testEnvSet. (Delay forSeconds: 1) wait. p exitStatus == 0 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess catFromFileToFiles ... '. OSProcess command: 'rm /tmp/deleteMe.out'. OSProcess command: 'rm /tmp/deleteMe.err'. p := UnixProcess catFromFileToFiles. (Delay forSeconds: 1) wait. p exitStatus == 0 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess testRunCommand ... '. OSProcess command: 'rm /tmp/deleteMe.out'. OSProcess command: 'rm /tmp/deleteMe.err'. p := UnixProcess testRunCommand. (Delay forSeconds: 1) wait. p exitStatus == 256 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess testPipe ... '. UnixProcess testPipe = 'this is some text to write into the pipe' ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess testPipeLine ... '. UnixProcess testPipeLine = 'This is the text to write out through one pipe, copy through an external cat command, and then read back in through another pipe.' ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess spawnTenHeadlessChildren ... '. p := UnixProcess spawnTenHeadlessChildren. (p size == 10 and: [(p select: [:e | (e runState == #running) | (e exitStatus == 0)]) size == 10]) ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess cloneSqueak ... '. p := UnixProcess cloneSqueak. (p isKindOf: UnixProcess) ifTrue: [(Delay forSeconds: 1) wait. OSProcess snapshot: false andQuit: true]. (Delay forSeconds: 5) wait. p exitStatus == 0 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess squeakSqueak ... '. p := UnixProcess squeakSqueak. (Delay forSeconds: 5) wait. OSProcess thisOSProcess sigkill: p. (Delay forSeconds: 1) wait. p exitStatus == 9 ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess restartVirtualMachine ... '. p := UnixProcess restartVirtualMachine. p pid == OSProcess thisOSProcess pid ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess command: ''cat'' input: ''this is some test data'' ... '. p := (OSProcess thisOSProcess command: 'cat' input: 'this is some test data'). (Delay forSeconds: 1) wait. p upToEnd = 'this is some test data' ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'UnixProcess waitForCommandOutput: ''echo sleeping...; sleep 1; echo I just slept for one second'' ... '. ('*I just slept for one second*' match: (OSProcess thisOSProcess waitForCommandOutput: 'echo sleeping...; sleep 1; echo I just slept for one second')) ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]. Transcript show: 'Unix command pipeline with output and error returned in an array ... '. (Smalltalk hasClassNamed: #PipeableOSProcess) ifTrue: [a := (((Smalltalk at: #PipeableOSProcess) command: 'echo this is a test; BOGUS') | 'cut -c11-14') outputAndError. (((a isKindOf: Array) and: ['test*' match: (a at: 1)]) and: ['*BOGUS*' match: (a at: 2)]) ifTrue: [Transcript show: 'OK'; cr] ifFalse: [Transcript show: 'NFG'; cr. failures := failures + 1]] ifFalse: [Transcript show: 'skipping PipeableOSProcess test (requires CommandShell)'; cr]. Transcript show: 'UnixProcess decapitate and recapatiate five times'; cr. 5 timesRepeat: [UnixProcess decapitate. UnixProcess recapitate]. failures == 1 ifTrue: [result := 'OSProcess tests completed with ', failures printString, ' failure'] ifFalse: [result := 'OSProcess tests completed with ', failures printString, ' failures']. Transcript show: result; cr. ^ result ! ! !UnixProcess class methodsFor: 'utility - image save' stamp: 'dtl 7/23/2010 07:50'! saveImageInBackground "Save image in a background OS process." "UnixProcess saveImageInBackground" ^ self saveImageInBackground: self uniqueNameForSavedImage nice: false ! ! !UnixProcess class methodsFor: 'utility - image save' stamp: 'dtl 1/8/2008 22:39'! saveImageInBackground: savedImageName nice: niceFlag "When Squeak is used as a server it is sometimes desirable to periodically save image snapshots. This method forks a headless Squeak to perform a snapshot without impacting the server Squeak. Very little additional memory is required to do this because Unix copy-on-write memory management allows the two Squeak images to share object memory while the save is performed. The saved image is given a time stamped name, and the image name of the main server Squeak remains unchanged. If niceFlag is true, the background OS process runs at lowered scheduling priority." ^ self forkHeadlessSqueakAndDo: [| st | "Delay is required in the background process when forking a headless Squeak, probably necessary to permit X session stuff to settle down." (Delay forMilliseconds: 500) wait. (niceFlag notNil and: [niceFlag]) ifTrue: ["lower priority of background OS process" OSProcess accessor nice: 1]. st := SmalltalkImage current. (SourceFiles at: 2) ifNotNil: ["ensure that copying the changes file will always work" st closeSourceFiles. st saveChangesInFileNamed: (st fullNameForChangesNamed: savedImageName)]. st changeImageNameTo: savedImageName,'.image'; closeSourceFiles; openSourceFiles; "so SNAPSHOT appears in new changes file" saveImageSegments; snapshot: true andQuit: true] ! ! !UnixProcess class methodsFor: 'utility - image save' stamp: 'dtl 7/23/2010 07:50'! saveImageInBackgroundNicely "Save image in a background OS process with lowered scheduling priority." "UnixProcess saveImageInBackgroundNicely" ^ self saveImageInBackground: self uniqueNameForSavedImage nice: true ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 3/10/2001 09:53'! sessionID "UnixProcess sessionID" ^ self thisOSProcess sessionID ! ! !UnixProcess class methodsFor: 'X display - deprecated' stamp: 'dtl 8/5/2003 22:18'! setXDisplayName: xDisplayName "Deprecated. See ThisOSProcess>>setXDisplayName" "self setXDisplayName: 'unix:0' " "self setXDisplayName: ':1' " ^ OSProcess thisOSProcess setXDisplayName: xDisplayName ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:35'! spawnTenHeadlessChildren "Spawn ten Squeak children, each of which writes a message to standard output, then exits. Answer an array of pid values for the child processes. " "UnixProcess spawnTenHeadlessChildren" | childBlock count children this | this := OSProcess thisOSProcess. this stdOut ifNil: [self noAccessorAvailable. ^ nil]. count := 10. children := Array new: count. childBlock := [this stdOut nextPutAll: 'hello world from child process '. this pid printOn: this stdOut. this stdOut nextPut: Character lf. this stdOut flush]. (1 to: count) do: [:e | OSProcess thisOSProcess stdOut flush. children at: e put: (self forkHeadlessSqueakAndDoThenQuit: childBlock)]. ^ children! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:38'! squeakSqueak "Start a new instance of Squeak running in a child OS process. The new instance will restart from the image file, so it is a clone of this image as it existed at the most recent image save. See cloneSqueak for an example of how to clone the running image without going back to the saved image file." "UnixProcess squeakSqueak" | proc | proc := self squeak. proc ifNil: [self noAccessorAvailable]. ^ proc ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 7/13/2003 14:47'! startSwiki: aSwiki onPort: num loggingTo: aFileName "Start a swiki in a headless Squeak image." "UnixProcess startSwiki: 'myswiki' onPort: 8081 loggingTo: 'log.txt'" | proc | (Smalltalk hasClassNamed: #SwikiAction) ifTrue: [proc := self forkSqueakAndDo: [(Smalltalk at: #SwikiAction) new restore: 'myswiki'. (Smalltalk at: #PWS) serveOnPort: num loggingTo: aFileName. UnixProcess decapitate]. proc ifNil: [self noAccessorAvailable]. ^ proc] ifFalse: [self notify: 'PWS not installed in this image'] ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 12/27/2000 17:12'! stdErr "UnixProcess stdErr" ^ self thisOSProcess stdErr ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 12/27/2000 17:11'! stdIn "UnixProcess stdIn" ^ self thisOSProcess stdIn ! ! !UnixProcess class methodsFor: 'utility' stamp: 'dtl 12/27/2000 17:11'! stdOut "UnixProcess stdOut" ^ self thisOSProcess stdOut ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:41'! testEnvSet "Set up a new environment for a child process. Exec a shell to show the environment variables on the terminal standard output. Note that many shells will set other environment variables in addition to those which we set up prior to executing the shell." "UnixProcess testEnvSet" | e proc | e := Dictionary new. e at: #KEY1 put: 'value1'; at: #KEY2 put: 'value2'; at: #KEY3 put: 'value3'. proc := self forkJob: '/bin/sh' arguments: #('-c' 'env' ) environment: e descriptors: nil. proc ifNil: [self noAccessorAvailable]. ^ proc! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 2/11/2001 14:03'! testPipe "Create an OS pipe, write some text to it, and read the text back from the other end of the pipe." "UnixProcess testPipe inspect" | s p r | s := 'this is some text to write into the pipe'. p := OSPipe new. p ifNil: [self noAccessorAvailable. ^ p]. p writer nextPutAll: s. p writer close. r := p reader next: s size. p reader close. ^ r! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 2/24/2001 16:28'! testPipeLine "Create two OS pipes, and a child OS process with its input connected to one pipe and its output connected to the other pipe. Write some text to the input pipe, and read the resulting output (just echoed back by the Unix cat command) back through the output pipe. Send a SIGHUP signal to the child process to tell it to exit. This test verifies the ability of Squeak to send text to an external OS process through a pipe, and read the output text back from another pipe. See ConnectedUnixProcess for a more useful implementation." "UnixProcess testPipeLine inspect" | testString pipe1 pipe2 input output src dest desc result child | OSProcess accessor canAccessSystem ifFalse: [^ nil]. testString := 'This is the text to write out through one pipe, copy through an external cat command, and then read back in through another pipe.'. pipe1 := OSPipe blockingPipe. pipe2 := OSPipe nonBlockingPipe. input := pipe1 reader. output := pipe2 writer. src := pipe1 writer. dest := pipe2 reader. desc := Array with: input with: output with: nil. child := self forkJob: '/bin/cat' arguments: nil environment: nil descriptors: desc. input close. output close. src nextPutAll: testString. src close. (Delay forSeconds: 1) wait. result := dest next: testString size. dest close. child sigterm. "Tell the child to exit" ^ result ! ! !UnixProcess class methodsFor: 'examples' stamp: 'dtl 7/12/2000 04:46'! testRunCommand "Run the command 'ls -l /etc /etc/noSuchFile'. The output of the command will be in the file '/tmp/deleteMe.out', and the error output will be in '/tmp/deleteMe.err'. " "UnixProcess testRunCommand" | out err desc args proc | out := FileStream newFileNamed: '/tmp/deleteMe.out'. err := FileStream newFileNamed: '/tmp/deleteMe.err'. desc := Array with: nil with: out with: err. args := Array with: '-l' with: '/etc' with: '/etc/noSuchFile' with: '/etc/anotherNonexistentFile'. proc := self forkJob: '/bin/ls' arguments: args environment: nil descriptors: desc. proc ifNil: [self noAccessorAvailable]. out close. err close. ^ proc! ! !UnixProcess class methodsFor: 'utility - image save' stamp: 'dtl 11/8/2005 11:39'! uniqueNameForSavedImage "A time stamped image name that will sort in date order in a directory listing" "UnixProcess uniqueNameForSavedImage" | now month day hour minute second | now := DateAndTime now. month := now month asString. day := now dayOfMonth asString. hour := now hour24 asString. minute := now minute asString. second := now second asString. ^ 'squeak-', now year asString, (month size < 2 ifTrue: ['0', month] ifFalse: [month]), (day size < 2 ifTrue: ['0', day] ifFalse: [day]), (hour size < 2 ifTrue: ['0', hour] ifFalse: [hour]), (minute size < 2 ifTrue: ['0', minute] ifFalse: [minute]), (second size < 2 ifTrue: ['0', second] ifFalse: [second]) ! ! !UnixProcess class methodsFor: 'external command processing' stamp: 'dtl 1/18/2001 23:14'! waitForCommandOutput: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process." "UnixProcess waitForCommandOutput: 'echo sleeping...; sleep 1; echo I just slept for one second'" "UnixProcess waitForCommandOutput: 'ThisIsABogusCommand'" ^ self thisOSProcess waitForCommandOutput: aCommandString ! ! !UnixProcess class methodsFor: 'external command processing' stamp: 'dtl 1/18/2001 23:14'! waitForCommandOutputArray: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process." "UnixProcess waitForCommandOutputArray: 'echo Hello world!!; ls /NOSUCHFILE'" ^ self thisOSProcess waitForCommandOutputArray: aCommandString! ! !UnixProcess methodsFor: 'private' stamp: 'djr 4/6/2009 14:31'! argsAsFlatArrayAndOffsets: anArrayOfNullTerminatedStrings "Given anArrayOfNullTerminatedStrings, flatten the array into a string buffer, leaving space at the beginning of the buffer for a list of C pointers. Answer the string buffer and an array of address offsets. The address offsets may later be converted to C pointers and overlaid on the beginning of the buffer, resulting in a data structure which can be treated as a C array of strings suitable for use as a Unix argv vector." "OSProcess thisOSProcess argsAsFlatArrayAndOffsets: (UnixProcess arguments collect: [:e | e, (Character value: 0) asString])" | offset arraySize flatStringArray ws addresses | "Preserve offset space to hold address pointers." offset := (anArrayOfNullTerminatedStrings size + 1) * self processAccessor sizeOfPointer. "Allocate flat strings buffer" arraySize := (anArrayOfNullTerminatedStrings collect: [:e | e size]) sum + ((anArrayOfNullTerminatedStrings size + 1) * self processAccessor sizeOfPointer). "Flatten the strings out into a buffer, leaving room at the beginning of the buffer for an array of addresses." flatStringArray := String new: arraySize. ws := WriteStream on: flatStringArray. offset timesRepeat: [ws nextPut: (Character value: 0)]. anArrayOfNullTerminatedStrings do: [:e | ws nextPutAll: e]. "Find address offsets to be used in creating the addresses for the strings." ws := WriteStream on: (Array new: anArrayOfNullTerminatedStrings size). (anArrayOfNullTerminatedStrings collect: [:e | e size]) inject: offset into: [:p :e | ws nextPut: p. p + e]. addresses := ws contents. "Results" ^ Array with: flatStringArray with: addresses ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:09'! arguments ^ arguments ! ! !UnixProcess methodsFor: 'environment' stamp: 'dtl 1/25/2013 19:00'! chDir: pathString "Change current working directory, and update $PWD if it exists in the environment. Answer nil for success, or an error message." "OSProcess thisOSProcess chDir: '/tmp'" "OSProcess thisOSProcess chDir: '/no/such/path'" "OSProcess thisOSProcess chDir: OSProcess defaultPathString" | realPath result | realPath := self processAccessor realpath: pathString. realPath ifNil: [realPath := pathString]. result := self processAccessor chDir: realPath. result isNil ifTrue: [(self environmentAt: #PWD) ifNotNil: [self environmentAt: #PWD put: realPath. ^ nil]] ifFalse: [self inform: realPath, ': ', result. ^ result]! ! !UnixProcess methodsFor: 'external command processing' stamp: 'dtl 2/27/2002 15:24'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. The command is run by a ConnectedUnixProcess in order to facilitate command pipelines within Squeak." "UnixProcess thisOSProcess command: 'ls -l /etc'" | proc | pid isNil ifTrue: [self class noAccessorAvailable. ^nil] ifFalse: [proc := self forkJob: ExternalUnixOSProcess defaultShellPath arguments: (Array with: '-c' with: aCommandString) environment: nil descriptors: nil. proc ifNil: [self class noAccessorAvailable]. ^ proc] ! ! !UnixProcess methodsFor: 'external command processing' stamp: 'dtl 7/12/2003 11:51'! command: aCommandString input: aStreamOrString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process." "OSProcess thisOSProcess command: 'cat' input: 'this is some test data'" "OSProcess thisOSProcess command: 'cat' input: (ReadStream on: 'this is some test data')" | proc | (Smalltalk hasClassNamed: #PipeableOSProcess) ifTrue: [proc := (Smalltalk at: #PipeableOSProcess) command: aCommandString. proc ifNil: [^ nil]. proc nextPutAll: aStreamOrString contents. proc pipeToInput close. ^ proc] ifFalse: [self notify: 'the #command:input: method requires CommandShell, using #command: instead'. ^ self command: aStreamOrString contents] ! ! !UnixProcess methodsFor: 'private' stamp: 'djr 4/6/2009 14:31'! envAsFlatArrayAndOffsets: anEnvironmentDictionary "Given anEnvironmentDictionary, flatten the dictionary into a string buffer, leaving space at the beginning of the buffer for a list of C pointers. Answer the string buffer and an array of address offsets. The address offsets may later be converted to C pointers and overlaid on the beginning of the buffer, resulting in a data structure which can be treated as a C array of strings suitable for use as a Unix process environment." "OSProcess thisOSProcess envAsFlatArrayAndOffsets: UnixProcess env" | offset envArray arraySize flatStringArray ws addresses | "Preserve offset space to hold address pointers." offset := (anEnvironmentDictionary size + 1) * self processAccessor sizeOfPointer. "Build collection of environment strings" envArray := OrderedCollection new. anEnvironmentDictionary keysAndValuesDo: [:k :v | envArray add: (k, '=', v)]. "Allocate flat strings buffer" arraySize := ((envArray collect: [:e | e size + 1]) sum) + offset. "Flatten the strings out into a buffer, leaving room at the beginning of the buffer for an array of addresses." flatStringArray := String new: arraySize. ws := WriteStream on: flatStringArray. offset timesRepeat: [ws nextPut: (Character value: 0)]. envArray do: [:e | ws nextPutAll: e; nextPut: (Character value: 0)]. "Find address offsets to be used in creating the addresses for the strings." ws := WriteStream on: (Array new: anEnvironmentDictionary size). (envArray collect: [:e | e size + 1]) inject: offset into: [:p :e | ws nextPut: p. p + e]. addresses := ws contents. "Results" ^ Array with: flatStringArray with: addresses ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:09'! environment ^ environment ! ! !UnixProcess methodsFor: 'environment' stamp: 'dtl 3/6/2001 21:30'! environmentAt: aSymbol "Answer an environment variable for the external OS process, and update the dictionary in this Smalltalk object." ^ environment at: aSymbol asSymbol ifAbsent: [] ! ! !UnixProcess methodsFor: 'environment' stamp: 'dtl 3/6/2001 21:30'! environmentAt: aSymbol put: aString "Set an environment variable for the external OS process, and update the dictionary in this Smalltalk object." | s | self initialize. s := self processAccessor environmentAt: aSymbol put: aString. s ifNotNil: [ self environment at: aSymbol asSymbol put: aString ]. ^ s ! ! !UnixProcess methodsFor: 'finalization' stamp: 'dtl 1/24/2004 11:23'! finalize "Use this to release any external resources prior to reinitializing." super finalize. stdIn := stdIn ifNotNil: [[stdIn close; release] on: Error do: [:ex | ]. nil]. stdIn := stdOut ifNotNil: [[stdOut close; release] on: Error do: [:ex | ]. nil]. stdIn := stdErr ifNotNil: [[stdErr close; release] on: Error do: [:ex | ]. nil]. sessionID := nil. ppid := nil. programName := nil. arguments := nil. path := nil. environment := nil. self updateAllMyChildren. allMyChildren := nil. processAccessor ifNotNil: [processAccessor removeDependent: self. processAccessor := nil] ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 2/27/2002 15:24'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Call Unix vfork() and execve() to create a child process, and answer the child process. This method is expected to be called by class side methods." ^ ExternalUnixOSProcess forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 6/10/2011 14:27'! forkHeadlessSqueak "Just like forkSqueak, except that the child Squeak continues headless." | thisPid childPid child connected | stdOut ifNil: [^ nil]. self stdOut flush. self stdErr flush. thisPid := self pid. connected := self processAccessor canControlXDisplay and: [self flushXDisplay notNil]. childPid := self processAccessor forkSqueak. ^ childPid ifNotNil: [ childPid == 0 ifTrue: [connected ifTrue: [self disconnectXDisplay]. OSProcess thisOSProcess processAccessor changed: #pid. ^ self] ifFalse: [child := ExternalUnixOSProcess new. child pid: childPid. child ppid: thisPid. child programName: self programName. child initialStdIn: self stdIn. child initialStdOut: self stdOut. child initialStdErr: self stdErr. child arguments: self arguments. child initialEnvironment: self environment. child notYetRunning. self registerChildProcess: child. child running. ^ child]] ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 1/7/2001 12:59'! forkHeadlessSqueakAndDo: aBlock "Start a new instance of Squeak running in a child OS process, and execute aBlock in the child instance. The new instance is a clone of this image, but without a connection to the X display. The child instance executes aBlock, which hopefully does not involve interaction with the X display; and the parent continues normally. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." | childOrThisProc | childOrThisProc := self forkHeadlessSqueak. childOrThisProc ifNil: [self class noAccessorAvailable. ^ nil]. childOrThisProc == self ifTrue: ["Child process" aBlock value]. ^ childOrThisProc ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 8/7/2003 07:17'! forkHeadlessSqueakAndDoThenQuit: aBlock "Start a new instance of Squeak running in a child OS process, and execute aBlock in the child instance. The new instance is a clone of this image, but without a connection to the X display. The child instance executes aBlock, which hopefully does not involve interaction with the X display; and the parent continues normally. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "self thisOSProcess forkHeadlessSqueakAndDoThenQuit: [OSProcess thisOSProcess stdOut nextPutAll: 'hello world!!'; nextPut: Character lf]" "self thisOSProcess forkHeadlessSqueakAndDoThenQuit: [OSProcess thisOSProcess command: 'xeyes']" | childOrThisProc | childOrThisProc := self forkHeadlessSqueak. childOrThisProc ifNil: [self class noAccessorAvailable. ^ nil]. childOrThisProc == self ifTrue: ["Child process" aBlock value. Smalltalk quitPrimitive]. ^ childOrThisProc! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 12/27/2000 16:47'! forkJob: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Call Unix vfork() and execve() to create a child process, and answer the child process. Delegate this to the singleton OSProcess>>thisOSProcess." ^ self forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 4/27/2011 21:28'! forkSqueak "Fork a child and continue running this Squeak image in both the parent and the child. Parent and child are distinguished by the pid returned by primForkSqueak. If continuing as the parent process, answer the ExternalUnixOSProcess which represents the child. This can be inspected to watch the run state of the child process from the parent. If continuing as the child process, answer OSProcess thisOSProcess. This can be inspected to watch the full state of the child process from the child. The child cannot directly view the state of its parent. Parent and child should be cautious about using shared connections to external resources." "self thisOSProcess forkSqueak" | thisPid childPid child connected | stdOut ifNil: [^ nil]. self stdOut flush. self stdErr flush. thisPid := self pid. connected := self processAccessor canControlXDisplay and: [self flushXDisplay notNil]. childPid := self processAccessor forkSqueak. ^ childPid ifNotNil: [ childPid == 0 ifTrue: [connected ifTrue: [self disconnectXDisplay; recapitate]. OSProcess thisOSProcess processAccessor changed: #pid. ^ self] ifFalse: [child := ExternalUnixOSProcess new. child pid: childPid. child ppid: thisPid. child programName: self programName. child initialStdIn: self stdIn. child initialStdOut: self stdOut. child initialStdErr: self stdErr. child arguments: self arguments. child initialEnvironment: self environment. child notYetRunning. self registerChildProcess: child. child running. ^ child]] ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 10/8/2001 19:56'! forkSqueakAndDo: aBlock "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess thisOSProcess forkSqueakAndDo: [Object inform: 'Hi, I am the child Squeak process.']" | childOrThisProc | childOrThisProc := self forkSqueak. (childOrThisProc == self) ifTrue: [aBlock value]. "Child process" ^ childOrThisProc! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 10/8/2001 19:56'! forkSqueakAndDoThenQuit: aBlock "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock. The child should not depend on using existing connections to external resources. For example, the child may lose its connections to stdin, stdout, and stderr after its parent exits." "UnixProcess thisOSProcess forkSqueakAndDoThenQuit: [Object inform: 'Hi, I am the child Squeak process.']" | childOrThisProc | childOrThisProc := self forkSqueak. (childOrThisProc == self) ifTrue: [ aBlock value. Smalltalk quitPrimitive]. "Child process" ^ childOrThisProc! ! !UnixProcess methodsFor: 'private' stamp: 'dtl 3/31/2001 14:16'! getArgumentList "Answer the argument list using anOSProcessAccessor. For Unix, the first element of the list would be the program name. This element will not be treated as an argument; rather, it is stored as the programName instance variable." | index val list | list := OrderedCollection new. index := 2. [(val := processAccessor primArgumentAt: index) notNil] whileTrue: [ list add: val. index := index + 1]. ^ list asArray ! ! !UnixProcess methodsFor: 'environment' stamp: 'dtl 3/22/2000 05:55'! getCwd "Get current working directory. At image startup, this is equivalent to evaluating environmentAt: #PWD" "OSProcess thisOSProcess getCwd" ^ self processAccessor primGetCurrentWorkingDirectory ! ! !UnixProcess methodsFor: 'private' stamp: 'dtl 3/31/2001 14:14'! getEnvironmentDictionary "Answer an environment dictionary using an OSProcessAccessor." | index str key val env | env := Dictionary new. index := 1. [(str := processAccessor primEnvironmentAt: index) notNil] whileTrue: [ key := (str copyUpTo: $=) asSymbol. val := (str copyFrom: ((str indexOf: $=) + 1) to: (str size)). env at: key put: val. index := index + 1]. ^ env ! ! !UnixProcess methodsFor: 'private' stamp: 'dtl 3/31/2001 14:16'! getProgramName "Answer the name of the program which is being run by this OS process. Assume the Unix convention where the first element of (char **)argv is the program name." ^ programName := processAccessor primArgumentAt: 1 ! ! !UnixProcess methodsFor: 'initialize - release' stamp: 'dtl 7/6/2010 21:55'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." super initialize. (self processAccessor notNil and: [processAccessor canAccessSystem]) ifTrue: [self refreshFromProcessAccessor] ifFalse: [stdIn := nil. stdOut := nil. stdErr := nil]. processAccessor restartChildWatcherProcess ! ! !UnixProcess methodsFor: 'initialize - release' stamp: 'dtl 7/4/2010 11:15'! initializeAllMyChildren ^ allMyChildren := Dictionary new ! ! !UnixProcess methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:49'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isUnix ! ! !UnixProcess methodsFor: 'VM atexit' stamp: 'dtl 7/4/2010 14:44'! killCurrentChildrenAtExit "Arrange for the currently active child processes to receive a SIGTERM signal then the Squeak VM exits. Each invokation of this method overrides the effects of any previous calls." "OSProcess thisOSProcess killCurrentChildrenAtExit" self processAccessor killOnVmExit: allMyChildren withSignal: nil ! ! !UnixProcess methodsFor: 'private' stamp: 'dtl 11/7/2000 09:26'! needsRefresh "Answer true if the sessionID variable is out of date with respect to the running OS Process." ^ ((sessionID ~= (self processAccessor primGetSession)) | (pid ~= (self processAccessor primGetPid))) ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:10'! path ^ path := self pathString ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:10'! path: aPathString self environmentAt: #PATH put: aPathString. path := self pathString! ! !UnixProcess methodsFor: 'private' stamp: 'dtl 3/6/2001 21:46'! pathString "Answer the path string from the environment. Assume Unix convention in which the path name is a colon delimited string stored in the PATH environment variable." ^ self environment at: #PATH ifAbsent: [nil]! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 10/18/2001 20:01'! pid ^ pid := self processAccessor primGetPid ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:10'! ppid "Always refresh ppid from the processAccessor, because it is possible for a child to be reparented when the parent exits. The child does not know about this, so we refresh ppid on every access." ^ ppid := processAccessor primGetPPid ! ! !UnixProcess methodsFor: 'printing' stamp: 'dtl 7/7/2010 07:37'! printOn: aStream "In English, say 'a Unix' rather than 'an Unix'. Therefore do not use super printOn, which treats $U as a vowel." self ppid. "Force update of ppid, in case parent may have exited." aStream nextPutAll: 'a '; nextPutAll: self class name; nextPutAll: ' with pid '; nextPutAll: self pid printString ! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 1/25/2004 12:40'! processProxy: anExternalProcess forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Call Unix vfork() and execve() to create a child process, and answer the child process. This method is expected to be called by class side methods. Prepare the arguments before calling the primitive, including null termination of all strings. anExternalProcess is an object which represents the new child process, and which responds to the #pid: message." | nullString progName args argVecAndOffsets argVec argOffsets envVecAndOffsets envVec envOffsets in out err childPid pwd | stdOut ifNil: [^ nil]. nullString := (Character value: 0) asString. progName := executableFile, nullString. "Null terminated string" arrayOfStrings isNil "Should be a (possibly empty) array" ifTrue: [args := Array with: progName] "First argument is the program name (Unix convention)" ifFalse: [args := (OrderedCollection new: arrayOfStrings size + 2) add: progName; addAll: (arrayOfStrings collect: [:e | e, nullString ]); "Null terminate each string" yourself; asArray]. argVecAndOffsets := self argsAsFlatArrayAndOffsets: args. argVec := argVecAndOffsets at: 1. argOffsets := argVecAndOffsets at: 2. (stringDictionary notNil and: [stringDictionary ~= (self environment)]) ifTrue: [envVecAndOffsets := self envAsFlatArrayAndOffsets: stringDictionary. envVec := envVecAndOffsets at: 1. envOffsets := envVecAndOffsets at: 2] ifFalse: [envVec := nil. envOffsets := nil]. "Same as current environment, so just pass nil." arrayOf3Streams isNil ifTrue: [in := self handleFromAccessor: (self stdIn ioHandle). out := self handleFromAccessor: (self stdOut ioHandle). err := self handleFromAccessor: (self stdIn ioHandle)] ifFalse: [(arrayOf3Streams at: 1) isNil ifTrue: [in := self handleFromAccessor: (self stdIn ioHandle)] ifFalse: [in := self handleFromFileStream: (arrayOf3Streams at: 1)]. (arrayOf3Streams at: 2) isNil ifTrue: [ out := self handleFromAccessor: (self stdOut ioHandle)] ifFalse: [ out := self handleFromFileStream: (arrayOf3Streams at: 2)]. (arrayOf3Streams at: 3) isNil ifTrue: [ err := self handleFromAccessor: (self stdErr ioHandle)] ifFalse: [ err := self handleFromFileStream: (arrayOf3Streams at: 3)]]. pwd := anExternalProcess pwd. (pwd = self getCwd) ifTrue: [pwd := nil] ifFalse: [pwd := pwd, nullString]. childPid := self processAccessor forkAndExec: progName stdIn: in stdOut: out stdErr: err argBuf: argVec argOffsets: argOffsets envBuf: envVec envOffsets: envOffsets workingDir: pwd. anExternalProcess pid: childPid. anExternalProcess ppid: self pid. ((childPid == 0) or: [childPid isNil]) ifTrue: [anExternalProcess unknownRunState] ifFalse: [anExternalProcess running. self registerChildProcess: anExternalProcess]. ^ anExternalProcess ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 11/7/2000 09:10'! programName ^ programName ! ! !UnixProcess methodsFor: 'accessing' stamp: 'dtl 3/17/2007 22:54'! pthread "The identity of the pthread in which the interpreter executes. Always refresh pthread from the processAccessor, because it is possible for a child to be reparented when the parent exits. The child does not know about this, so we refresh pthread on every access." ^ pthread := processAccessor getThreadID ! ! !UnixProcess methodsFor: 'IO redirection' stamp: 'dtl 5/18/2009 21:07'! redirect: aFileStream to: newFileStream | oldfd newfd | oldfd := self processAccessor unixFileNumber: aFileStream fileID. newfd := self processAccessor unixFileNumber: newFileStream fileID. self processAccessor primUnixFileClose: oldfd. ^ self processAccessor primDup: newfd to: oldfd ! ! !UnixProcess methodsFor: 'IO redirection' stamp: 'dtl 5/17/2009 23:12'! redirectStdErrTo: fileStream "Redirect the standard error stream to another output stream." ^ self redirect: self stdErr to: fileStream ! ! !UnixProcess methodsFor: 'IO redirection' stamp: 'dtl 5/17/2009 23:12'! redirectStdInTo: fileStream "Redirect the standard input stream to another input stream." ^ self redirect: self stdIn to: fileStream ! ! !UnixProcess methodsFor: 'IO redirection' stamp: 'dtl 5/17/2009 23:11'! redirectStdOutTo: fileStream "Redirect the standard output stream to another output stream." "| pipe | pipe := OSPipe nonBlockingPipe. OSProcess thisOSProcess redirectStdOutTo: pipe writer. pipe" ^ self redirect: self stdOut to: fileStream ! ! !UnixProcess methodsFor: 'updating' stamp: 'dtl 7/4/2010 22:35'! refreshFromProcessAccessor "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." self needsRefresh ifTrue: [ sessionID := self processAccessor getSessionIdentifier. pid := processAccessor primGetPid. ppid := processAccessor primGetPPid. pthread := processAccessor getThreadID. self setStdIn. self setStdOut. self setStdErr. programName := self getProgramName. arguments := self getArgumentList. environment := self getEnvironmentDictionary. path := self pathString. self updateAllMyChildren] ! ! !UnixProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 11:12'! registerChildProcess: anOSProcess self processAccessor sigChldSemaphore. self processAccessor grimReaperProcess. "Start the reaper process if it is not running." accessProtect critical: [allMyChildren at: anOSProcess pid put: anOSProcess]. ^ anOSProcess ! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:49'! sigabrt: anExternalOSProcess "Send a SIGABRT signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigabrtTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:49'! sigalrm: anExternalOSProcess "Send a SIGALRM signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigalrmTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sigchld: anExternalOSProcess "Send a SIGCHLD signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigchldTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sigcont: anExternalOSProcess "Send a SIGCONT signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigcontTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sighup: anExternalOSProcess "Send a SIGHUP signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSighupTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sigint: anExternalOSProcess "Send a SIGINT signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigintTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sigkill: anExternalOSProcess "Send a SIGKILL signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigkillTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:48'! sigpipe: anExternalOSProcess "Send a SIGPIPE signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigpipeTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:49'! sigquit: anExternalOSProcess "Send a SIGQUIT signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigquitTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:50'! sigstop: anExternalOSProcess "Send a SIGSTOP signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigstopTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:50'! sigterm: anExternalOSProcess "Send a SIGTERM signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigtermTo: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:50'! sigusr1: anExternalOSProcess "Send a SIGUSR1 signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigusr1To: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'OS signal sending' stamp: 'dtl 7/6/2000 16:51'! sigusr2: anExternalOSProcess "Send a SIGUSR2 signal to the external process represented by anExternalOSProcess." ^ self processAccessor primSendSigusr2To: anExternalOSProcess pid! ! !UnixProcess methodsFor: 'child process creation' stamp: 'dtl 1/21/2001 11:47'! squeak "Start a new instance of Squeak running in a child OS process. The new instance will restart from the image file, so it is a clone of this image as it existed at the most recent image save." "OSProcess thisOSProcess squeak" ^ self forkJob: self programName arguments: self arguments environment: nil descriptors: nil! ! !UnixProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 11:10'! unregisterChildProcess: anOSProcess accessProtect critical: [allMyChildren removeKey: self pid ifAbsent: []]. ^ anOSProcess ! ! !UnixProcess methodsFor: 'updating' stamp: 'dtl 10/20/2001 09:05'! update: aParameter "Framework to update some or all of the instance variables based on external events, such as receipt of a sigchd signal when a child process exits." (aParameter == (self processAccessor)) ifTrue: [^ self refreshFromProcessAccessor; yourself]. (aParameter == #pid) ifTrue: [^ self resetChildProcessDictionary. "Forget children of prior process"]. (aParameter == #childProcessStatus) ifTrue: [^ self updateActiveChildren; changed; yourself]. (aParameter == #startUp) ifTrue: [^ self update: #pid]. aParameter == #invalidProcessAccessor ifTrue: [processAccessor := processAccessor ifNotNil: [processAccessor removeDependent: self. nil]. ^ self]. self error: 'Unexpected update parameter'! ! !UnixProcess methodsFor: 'external command processing' stamp: 'dtl 2/27/2002 15:24'! waitForCommand: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process. This just uses a simple polling loop, which is not very elegant but works well enough for most purposes." "OSProcess thisOSProcess waitForCommand: 'echo sleeping...; sleep 3; echo I just slept for three seconds'" | proc d | d := Delay forMilliseconds: 50. proc := self forkJob: ExternalUnixOSProcess defaultShellPath arguments: (Array with: '-c' with: aCommandString) environment: nil descriptors: nil. proc ifNil: [self class noAccessorAvailable]. [proc runState == #complete] whileFalse: [d wait]. ^ proc ! ! !UnixProcess methodsFor: 'external command processing' stamp: 'dtl 7/12/2003 12:06'! waitForCommandOutput: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process." "OSProcess thisOSProcess waitForCommandOutput: 'echo sleeping...; sleep 1; echo I just slept for one second'" "OSProcess thisOSProcess waitForCommandOutput: 'ThisIsABogusCommand'" "OSProcess thisOSProcess waitForCommandOutput: '/bin/ls -l /etc /bin'" "OSProcess thisOSProcess waitForCommandOutput: 'echo Hello world!!; ls /NOSUCHFILE'" (Smalltalk hasClassNamed: #PipeableOSProcess) ifTrue: [^ ((Smalltalk at: #PipeableOSProcess) command: aCommandString) output] ifFalse: [self notify: 'the #waitForCommandOutput: method requires CommandShell'. ^ ''] ! ! !UnixProcess methodsFor: 'external command processing' stamp: 'dtl 7/12/2003 12:08'! waitForCommandOutputArray: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process." "OSProcess thisOSProcess waitForCommandOutputArray: 'echo Hello world!!; ls /NOSUCHFILE'" | proc | (Smalltalk hasClassNamed: #PipeableOSProcess) ifTrue: [proc := (Smalltalk at: #PipeableOSProcess) command: aCommandString. ^ Array with: proc output with: proc errorUpToEnd with: proc processProxy exitStatus] ifFalse: [self notify: 'the #waitForCommandOutputArray: method requires CommandShell'. ^ Array with: '' with: '' with: nil] ! ! !WindowsProcess commentStamp: 'dtl 9/25/2005 16:31' prior: 101826375! I represent a Windows operating system process, such as the process in which the Squeak VM is currently running. I collaborate with an instance of WindowsOSProcessAccessor to provide primitive access to the external operating system. My instance variables are maintained as a convenience to allow inspection of an OSProcess. Access to these variables should always be done with my accessor methods, which update the instance variables by querying my WindowsOSProcessAccessor. My process ID and process handle (a Win32 HANDLE) are held by my pid and processHandle variables. The main thread for this process is held by my mainThread variable. Standard input, output, and error streams are available, and my be used when the console is open (WindowsProcess>>openConsole). They can also be reassigned to file streams (WindowsOSProcessAccessor>>setStdOut:). When external processes are created, they are added to my allMyChildren collection, and a thread is created to wait for any of them to exit. This thread is held by my childWatcherThread instance variable while the thread is active, and is also added to my threads collection. Whenever a child process exits, the childWatcherThread will signal a Semaphore (a Smalltalk Semaphore, not a Windows semaphore), then exit. A Squeak process in my processAccessor waits on this Semaphore, and sends an 'update: #childProcessStatus' message to me. In response to this, I update the status of my active child processes, one or more of which will have exited. If any of my child processes are still active, I set a new childWatcherThread to wait for them to exit. Note that some Windows applications will exit their main process after creating another application process. These applications will appear to Squeak as if they have exited immediately, even though the application is running.! !WindowsProcess class methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:50'! isResponsibleForThisPlatform "Answer true if this class is responsible for representing the OS process for the Squeak VM running on the current platform." ^ self isWindows ! ! !WindowsProcess methodsFor: 'child process management' stamp: 'dtl 2/26/2002 16:08'! activeHandles "Answer an Array of handles for all children that are believed to be running." ^ (self activeChildren collect: [:c | c handle]) asArray ! ! !WindowsProcess methodsFor: 'console' stamp: 'dtl 9/7/2002 20:57'! closeConsole "Close the console. The standard input, output and error streams will no longer be available." "OSProcess thisOSProcess closeConsole" self processAccessor primFreeConsole. self refreshFromProcessAccessor ! ! !WindowsProcess methodsFor: 'child process creation' stamp: 'dtl 2/28/2002 14:48'! command: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process. Answer an instance of ExternalWindowsProcess which is a proxy for the new Windows process." "OSProcess command: 'SOL'" ^ ExternalWindowsOSProcess command: aCommandString ! ! !WindowsProcess methodsFor: 'accessing' stamp: 'dtl 2/22/2002 22:02'! environment ^ environment ! ! !WindowsProcess methodsFor: 'environment' stamp: 'DamienCassou 5/3/2012 11:53'! environmentAt: aSymbol "Answer an environment variable for the external OS process, and update the dictionary in this Smalltalk object." ^ environment at: aSymbol asSymbol ifAbsent: [] ! ! !WindowsProcess methodsFor: 'environment' stamp: 'DamienCassou 5/3/2012 11:53'! environmentAt: aSymbol put: aString "Set an environment variable for the external OS process, and update the dictionary in this Smalltalk object." | s | self initialize. s := self processAccessor environmentAt: aSymbol put: aString. s ifNotNil: [ self environment at: aSymbol asSymbol put: aString ]. ^ s ! ! !WindowsProcess methodsFor: 'child process creation' stamp: 'dtl 10/18/2001 20:19'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams "Use my processAccessor to call vfork() and execve() and create a new child task. Answer a proxy for the new task, an instance of ExternalWindowsProcess." self notYetImplemented ! ! !WindowsProcess methodsFor: 'environment' stamp: 'dtl 1/24/2013 19:23'! getCwd "Get current working directory. If this cannot be obtained from the environment, answer a reasonable default." "OSProcess thisOSProcess getCwd" ^ self processAccessor primGetCurrentWorkingDirectory ifNil: [OSProcess defaultPathString] ! ! !WindowsProcess methodsFor: 'private' stamp: 'dtl 2/22/2002 22:00'! getEnvironmentDictionary "Answer an environment dictionary using an OSProcessAccessor." "OSProcess thisOSProcess getEnvironmentDictionary" | strings env | strings := processAccessor primGetEnvironmentStrings. strings isNil ifTrue: [^ nil] ifFalse: [env := Dictionary new. strings do: [:s | env at: (s copyUpTo: $=) asSymbol put: (s copyAfterLast: $=)]. ^ env] ! ! !WindowsProcess methodsFor: 'initialize - release' stamp: 'dtl 8/25/2010 20:49'! initialize "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing. On Windows, we cannot rely on the pid to have changed when the VM is restarted, so use a one-shot function to determine if we are restarting the VM (as opposed to returning from an image save)." super initialize. (self processAccessor canAccessSystem not or: [processAccessor primOneShot]) ifTrue: ["Restarting the VM in a new process" self resetThreads. self threads; mainThread. processHandle := nil. self processHandle]. self refreshFromProcessAccessor ! ! !WindowsProcess methodsFor: 'initialize - release' stamp: 'dtl 7/4/2010 11:16'! initializeAllMyChildren "On Windows, the process ID is not unique. Use an OrderedCollection instead of a Dictionary to keep track of the child processes." ^ allMyChildren := OrderedCollection new ! ! !WindowsProcess methodsFor: 'platform identification' stamp: 'dtl 8/30/2003 17:50'! isResponsibleForThisPlatform "Answer true is this is an instance of the class which is responsible for representing the OS process for the Squeak VM running on the current platform. A false answer is usually the result of running the image on a different platform and VM." ^ self class isWindows ! ! !WindowsProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 07:15'! mainThread "The main thread for this OS process. The handle for this thread is a pseudo-handle, and cannot be used to close the main thread." ^ mainThread ifNil: [mainThread := processAccessor getMainThread]! ! !WindowsProcess methodsFor: 'console' stamp: 'dtl 9/7/2002 20:57'! openConsole "Open a console. This makes the standard input, output and error streams available." "OSProcess thisOSProcess openConsole" self processAccessor primAllocConsole. self refreshFromProcessAccessor ! ! !WindowsProcess methodsFor: 'environment' stamp: 'dtl 9/25/2005 05:11'! path "Newer versions of Windows mixed case" ^ self environment at: #PATH ifAbsent: [environment at: #Path ifAbsent: ['']]! ! !WindowsProcess methodsFor: 'accessing' stamp: 'dtl 2/22/2002 16:43'! pid ^ pid := self processAccessor primGetPid ! ! !WindowsProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 07:26'! processHandle "The handle for this OS process. This is a pseudo-handle, a constant provided by Windows to represent the process. Note that the main thread handle is also represented by a pseudo-handle." ^ processHandle ifNil: [processHandle := self processAccessor primGetPidHandle] ! ! !WindowsProcess methodsFor: 'updating' stamp: 'dtl 9/7/2002 20:47'! refreshFromProcessAccessor "Set my instance variables to reflect the state of the OS process in which this Smalltalk virtual machine is executing." sessionID := self processAccessor getSessionIdentifier. pid := processAccessor primGetPid. self setStdIn. self setStdOut. self setStdErr. environment := self getEnvironmentDictionary ! ! !WindowsProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 15:00'! registerChildProcess: anOSProcess "Register the external process and set an exit handler thread to signal when the process exits." accessProtect critical: [ allMyChildren add: anOSProcess ]. self threads add: self restartChildWatcherThread. ^ anOSProcess ! ! !WindowsProcess methodsFor: 'initialize - release' stamp: 'dtl 2/28/2002 07:16'! resetThreads "If any cleanup is required, do it here." threads := nil. mainThread := nil ! ! !WindowsProcess methodsFor: 'child process management' stamp: 'dtl 1/13/2007 09:49'! restartChildWatcherThread "Set an exit handler thread to signal when the process exits." ^ self processAccessor restartChildWatcherThread: self activeHandles ! ! !WindowsProcess methodsFor: 'private' stamp: 'dtl 9/7/2002 20:55'! setStdErr "Reset to nil if the console has been closed" ^ self processAccessor getStdErr isNil ifTrue: [stdErr := nil] ifFalse: [super setStdErr] ! ! !WindowsProcess methodsFor: 'private' stamp: 'dtl 9/7/2002 20:55'! setStdIn "Reset to nil if the console has been closed" ^ self processAccessor getStdIn isNil ifTrue: [stdIn := nil] ifFalse: [super setStdIn] ! ! !WindowsProcess methodsFor: 'private' stamp: 'dtl 9/7/2002 20:55'! setStdOut "Reset to nil if the console has been closed" ^ self processAccessor getStdOut isNil ifTrue: [stdOut := nil] ifFalse: [super setStdOut] ! ! !WindowsProcess methodsFor: 'accessing' stamp: 'dtl 2/28/2002 08:04'! threads "One or more threads of execution within the OS process. The main thread for the process is held by the mainThread variable and is not included in this collection. Threads are created to wait for the exit of child processes, so this collection grows as child processes are created." ^ threads ifNil: [threads := OrderedCollection new] ! ! !WindowsProcess methodsFor: 'child process management' stamp: 'dtl 7/24/2010 15:00'! unregisterChildProcess: anOSProcess | p | accessProtect critical: [ p := allMyChildren remove: anOSProcess pid ]. ^ p ! ! !WindowsProcess methodsFor: 'updating' stamp: 'dtl 2/25/2002 08:29'! update: aParameter "Framework to update some or all of the instance variables based on external events, such as receipt of a sigchd signal when a child process exits." (aParameter == (self processAccessor)) ifTrue: [^ self refreshFromProcessAccessor; yourself]. (aParameter == #pid) ifTrue: [^ self resetChildProcessDictionary. "Forget children of prior process"]. (aParameter == #childProcessStatus) ifTrue: [^ self updateActiveChildren; changed; yourself]. (aParameter == #startUp) ifTrue: [^ self update: #pid]. aParameter == #invalidProcessAccessor ifTrue: [processAccessor := processAccessor ifNotNil: [processAccessor removeDependent: self. nil]. ^ self]. self error: 'Unexpected update parameter'! ! !WindowsProcess methodsFor: 'child process management' stamp: 'dtl 2/28/2002 08:17'! updateActiveChildren super updateActiveChildren. self restartChildWatcherThread ! ! !WindowsProcess methodsFor: 'child process creation' stamp: 'dtl 11/24/2008 17:47'! waitForCommand: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process. This just uses a simple polling loop, which is not very elegant but works well enough for most purposes." | proc d | d := Delay forMilliseconds: 50. proc := self command: aCommandString. proc ifNil: [self class noAccessorAvailable]. [proc runState == #complete] whileFalse: [d wait]. ^ proc ! ! !UnixProcessExitStatus commentStamp: 'dtl 8/23/2012 22:48' prior: 101828282! A UnixProcessExitStatus represents the exit status of a unix process. This is an integer bit field answered by the wait() system call that contains information about exit status of the process. The meaning of the bit field varies according to the cause of process exit. Following a normal process exit, the status may be decoded to provide a small positive integer value in the range 0 - 255, which is the value that is presented by a unix shell as the exit status of a program. If terminated by a signal, the corresponding value is the signal number of the signal that caused process exit. UnixExitStatus decodes the process exit status in a manner compatible with a typical GNU unix implementation. It is not guaranteed to be portable and may produce misleading results on other unix systems. ! !UnixProcessExitStatus class methodsFor: 'instance creation' stamp: 'dtl 8/22/2012 21:24'! for: integerValue ^self new for: integerValue ! ! !UnixProcessExitStatus methodsFor: 'accessing' stamp: 'dtl 8/22/2012 23:10'! exitStatus self isExited ifTrue: [^self statusIfExited]. self isSignaled ifTrue: [^self statusIfSignaled]. self isStopped ifTrue: [^self statusIfStopped]. self notify: 'cannot decode exit status ', intValue asString. ^intValue! ! !UnixProcessExitStatus methodsFor: 'initialize-release' stamp: 'dtl 8/22/2012 23:10'! for: anInteger intValue := anInteger! ! !UnixProcessExitStatus methodsFor: 'testing' stamp: 'dtl 8/22/2012 22:32'! isExited " /* Nonzero if STATUS indicates normal termination. */ #define __WIFEXITED(status) (__WTERMSIG(status) == 0) " ^ self statusIfSignaled = 0 ! ! !UnixProcessExitStatus methodsFor: 'testing' stamp: 'dtl 8/22/2012 23:11'! isSignaled " /* Nonzero if STATUS indicates termination by a signal. */ #define __WIFSIGNALED(status) \ (((signed char) (((status) & 0x7f) + 1) >> 1) > 0) " ^(((intValue bitAnd: 16r7F) + 1) >> 1) > 0 ! ! !UnixProcessExitStatus methodsFor: 'testing' stamp: 'dtl 8/22/2012 23:11'! isStopped " /* Nonzero if STATUS indicates the child is stopped. */ #define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f) " ^(intValue bitAnd: 16rFF) = 16r7F ! ! !UnixProcessExitStatus methodsFor: 'testing' stamp: 'dtl 8/22/2012 23:31'! isSuccess ^self exitStatus = 0! ! !UnixProcessExitStatus methodsFor: 'printing' stamp: 'dtl 8/22/2012 23:18'! printOn: aStream self isExited ifTrue: [aStream nextPutAll: 'normal termination with status '; nextPutAll: self statusIfExited asString]. self isSignaled ifTrue: [aStream nextPutAll: 'exit due to signal '; nextPutAll: self statusIfSignaled asString]. self isStopped ifTrue: [aStream nextPutAll: 'stopped due to signal '; nextPutAll: self statusIfStopped].! ! !UnixProcessExitStatus methodsFor: 'accessing' stamp: 'dtl 8/22/2012 23:11'! statusIfExited " /* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) " ^(intValue bitAnd: 16rFF00) >> 8! ! !UnixProcessExitStatus methodsFor: 'accessing' stamp: 'dtl 8/22/2012 23:11'! statusIfSignaled " /* If WIFSIGNALED(STATUS), the terminating signal. */ #define __WTERMSIG(status) ((status) & 0x7f) " ^intValue bitAnd: 16r7F! ! !UnixProcessExitStatus methodsFor: 'accessing' stamp: 'dtl 8/22/2012 22:28'! statusIfStopped " /* If WIFSTOPPED(STATUS), the signal that stopped the child. */ #define __WSTOPSIG(status) __WEXITSTATUS(status) " ^self statusIfExited! ! !UnixProcessExitStatus methodsFor: 'accessing' stamp: 'dtl 8/22/2012 23:11'! value ^intValue! ! !WindowsThread commentStamp: '' prior: 101829136! I represent a thread of execution within a Windows process. May threadID is a unique identifier for the thread, and my handle is a Windows HANDLE to the thread. My handle should be closed when the thread exits.! !WindowsThread class methodsFor: 'instance creation' stamp: 'dtl 2/25/2002 07:00'! threadID: anInteger handle: aHandleObject ^ super new threadID: anInteger; handle: aHandleObject; initialize ! ! !WindowsThread class methodsFor: 'instance creation' stamp: 'dtl 2/26/2002 07:17'! threadID: anInteger handle: aHandleObject running: trueOrFalse | thread | thread := super new threadID: anInteger; handle: aHandleObject; initialize. trueOrFalse ifTrue: [thread running]. ^ thread ! ! !WindowsThread methodsFor: 'initialize - release' stamp: 'dtl 2/25/2002 07:38'! closeHandle "Clean up after thread exits." OSProcess accessor primCloseHandle: handle. handle := nil ! ! !WindowsThread methodsFor: 'setting run state' stamp: 'dtl 2/26/2002 10:45'! complete "Thread has exited." self closeHandle; runState: #complete ! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 2/25/2002 06:39'! handle "A Windows HANDLE represented as a ByteArray." ^ handle! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 2/25/2002 06:38'! handle: aHandleObject "A Windows HANDLE represented as a ByteArray." handle := aHandleObject! ! !WindowsThread methodsFor: 'initialize - release' stamp: 'dtl 2/25/2002 07:03'! initialize self runState! ! !WindowsThread methodsFor: 'testing' stamp: 'dtl 2/25/2002 06:37'! isComplete ^ self runState == #complete! ! !WindowsThread methodsFor: 'testing' stamp: 'dtl 2/25/2002 06:37'! isRunning ^ self runState == #running! ! !WindowsThread methodsFor: 'printing' stamp: 'dtl 2/27/2002 12:02'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' (', self threadID printString, ', ', self runState, ')' ! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 1/25/2004 11:01'! runState ^ runState ifNil: [self unknownRunState] ! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 2/25/2002 07:02'! runState: aSymbol runState := aSymbol ! ! !WindowsThread methodsFor: 'setting run state' stamp: 'dtl 2/25/2002 06:36'! running "Thread is scheduled to run." self runState: #running ! ! !WindowsThread methodsFor: 'initialize - release' stamp: 'dtl 2/27/2002 11:35'! terminate "Force an exit. No cleanup is performed. Use with caution for a thread which is (for example) manipulating a mutex." (self isRunning and: [self handle notNil]) ifTrue: [OSProcess accessor primTerminateThread: self handle. self complete] ! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 2/25/2002 06:40'! threadID "A unique identifier for the thread." ^ threadID ! ! !WindowsThread methodsFor: 'accessing' stamp: 'dtl 2/25/2002 06:40'! threadID: anInteger "A unique identifier for the thread." threadID := anInteger ! ! !WindowsThread methodsFor: 'setting run state' stamp: 'dtl 2/25/2002 06:36'! unknownRunState "Unable to determine the current run state of the thread, possibly because this is a stale reference to a thread which no longer exists." self runState: #unknownRunState ! ! "OSProcess-AIO"! "OSProcess-Base"! "OSProcess-OS2"! "OSProcess-Win32"! "OSProcess-Unix"! "OSProcess-Mac"! "OSProcess-RiscOS"! !CommandShell commentStamp: '' prior: 0! I am a command shell, similar to /bin/sh, with a simple command line user interface. I collaborate with process proxies to provide command execution, and I provide a limited set of built in commands similar to those in /bin/sh. My built in commands are implemented in Smalltalk, and any other commands are passed to process proxies to be executed either internally as Smalltalk "doIt" expressions, or externally as commands passed to the external operating system. I am similar to a TranscriptStream (some methods are copied directly from TranscriptStream), but I also know how to accept lines of command input, parse them, and hand them off to process proxies for execution. Three types of commands may be executed from a CommandShell: internal "builtin" commands implemented in Smalltalk; internal Smalltalk "doIt" commands; and external commands. Internal commands (builtin commands or doIt commands) may be freely mixed with external operating system commands in a command pipeline. See CommandShell class>>commandProcessing for more information. Each command line is first evaluated as a Smalltalk expression, and is subject to further parsing only if the Smalltalk evaluation fails. In practice, this permits complete Smalltalk expressions to be evaluated easily without conflicting with shell syntax, and allows Smalltalk and unix shell commands to be freely mixed. Simple command scripting is supported (method category 'command scripting'). Any mix of internal and external commands may be included in a script. Conditional branching is supported based on command exit status. Open a new shell window with "CommandShell open". Type 'help' followed by or for help on builtin commands. Things that work reasonably well: - Simple command execution for running command line programs or starting X programs. - Command pipelines. Built in commands can be mixed with external commands, as in "help sqsh | wc -l". - Command IO redirection with '<', '>', '>>', '2>', and '2>>'. - Command history and command history recall. - Background command execution, as in "xterm&". - to interrupt a running external command. - to indicate end of file in terminal input. Limitations include: - Dumb tty only. Do not try to run vi. - Standard Unix shell syntax is not completely implemented. Race conditions are possible for certain command pipelines. See CommandShell class>>raceConditions for more information. ! !ShellSyntax commentStamp: 'dtl 9/7/2009 12:36' prior: 0! My instances implement parsing of strings in a manner similar to a simple Unix command shell. I provide path name expansion in the context of an external file system, and support the syntax required for IO redirection. All file name globbing and PATH searching are implemented in Smalltalk rather than in C library functions or an external command shell. Most of my syntax is applicable for any operating system. Where needed, platform specific methods are in my "platform dependent" category. Currently, Unix and Windows are supported, and other platforms have not been tested. The primary difference between Unix and Windows support is that device names (such as 'C:') are used in Windows path strings. Separate current working directory strings are maintained for all Windows device names. For Unix, a single current working directory path is used. On Windows, this permits the CommandShell 'cd' command to support changing directories to another device without losing track of the current working directory for the previous device. Command pipeline syntax is not supported here. See CommandShell for the implementation of command pipelines. ! !CommandShell commentStamp: '' prior: 102208479! I am a command shell, similar to /bin/sh, with a simple command line user interface. I collaborate with process proxies to provide command execution, and I provide a limited set of built in commands similar to those in /bin/sh. My built in commands are implemented in Smalltalk, and any other commands are passed to process proxies to be executed either internally as Smalltalk "doIt" expressions, or externally as commands passed to the external operating system. I am similar to a TranscriptStream (some methods are copied directly from TranscriptStream), but I also know how to accept lines of command input, parse them, and hand them off to process proxies for execution. Three types of commands may be executed from a CommandShell: internal "builtin" commands implemented in Smalltalk; internal Smalltalk "doIt" commands; and external commands. Internal commands (builtin commands or doIt commands) may be freely mixed with external operating system commands in a command pipeline. See CommandShell class>>commandProcessing for more information. Each command line is first evaluated as a Smalltalk expression, and is subject to further parsing only if the Smalltalk evaluation fails. In practice, this permits complete Smalltalk expressions to be evaluated easily without conflicting with shell syntax, and allows Smalltalk and unix shell commands to be freely mixed. Simple command scripting is supported (method category 'command scripting'). Any mix of internal and external commands may be included in a script. Conditional branching is supported based on command exit status. Open a new shell window with "CommandShell open". Type 'help' followed by or for help on builtin commands. Things that work reasonably well: - Simple command execution for running command line programs or starting X programs. - Command pipelines. Built in commands can be mixed with external commands, as in "help sqsh | wc -l". - Command IO redirection with '<', '>', '>>', '2>', and '2>>'. - Command history and command history recall. - Background command execution, as in "xterm&". - to interrupt a running external command. - to indicate end of file in terminal input. Limitations include: - Dumb tty only. Do not try to run vi. - Standard Unix shell syntax is not completely implemented. Race conditions are possible for certain command pipelines. See CommandShell class>>raceConditions for more information. ! !CommandShell class methodsFor: 'instance creation' stamp: 'dtl 12/11/2007 21:22'! command: aCommandString "Evaluate aCommandString in the context of a CommandShell, using a CommandShellTranscript to display the results." "CommandShell command: 'help'" "CommandShell command: 'ls'" | cs w | cs := self new. w := cs openLabel: self defaultWindowName. w scheduleToEvaluate: [w nextPutAll: aCommandString; cr]. w processCommand: aCommandString. ^ w ! ! !CommandShell class methodsFor: 'documentation' stamp: 'dtl 12/29/2001 14:18'! commandProcessing "Explanation of the command parsing and evaluation." "CommandShell new pipeline: 'CommandShell commandProcessing!! | edit'" ^ 'CommandShell behaves similarly to a Unix command shell. One or more Morphic or MVC views can be opened on an instance of CommandShell. Command lines are accepted in the view, passed to the CommandShell instance (the model), and the results are displayed in the view(s). The overall behavior can be thought of as a Transcript acting like an xterm window, and the CommandShell acting like a /bin/sh shell. A command line is first evaluated as a Smalltalk expression if possible. If this evaluation fails, either as a result of a sytax error or a runtime error, it is assumed to be a command string with syntax similar to that of a Unix command shell. The command line is parsed by CommandShell to break command lines into elements of a command pipeline. All further parsing, such as file name expansion, is performed by an instance of ShellSyntax. Three types of commands may be executed from a CommandShell: 1) Internal "builtin" commands are implemented in Smalltalk, and behave similarly to the shell builtin commands of a typical Unix command shell. See protocol category "shell builtins" for the implementation of these builtin shell commands. 2) Internal "doIt" commands are simple Smalltalk expression strings, terminated by a $!! character, which are evaluated as Smalltalk expressions, and which recognize the tokens "stdin", "stdout", and "stderr" as temporary variables in the doIt expression. An internal doIt command is evaluated such that it may be incorporated into a command pipeline with access to the stdin/stdout/stderr streams used in the command pipeline. In the current implementation, a doIt command may not include a $| character, which has meaning both for Smalltalk syntax and for Unix command line processor syntax. 3) External commands. Any command expression not recognized as a shell builtin or as a doIt expression is passed to an external process proxy for execution by the external operating system, with stdin/stdout/stderr incorporated into the command pipeline. Internal and external commands can be freely mixed in a command pipeline, with results which should be familiar to users of Unix command shells. Pipes are implemented as instances of OSPipe or InternalPipe, and are capable of passing streams of characters from one process proxy to the next. All commands (internal or external) evaluate to strings, such that their results can either be passed through a pipe to the next command proxy in a pipeline, or displayed in the terminal window view if the proxy represents the last command in a command pipeline. Error messages (also strings) are written to an errorPipelineStream which is shared by all proxies in a command pipeline, such that any error messages are accumulated for the entire command pipeline.'! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/26/2013 15:37'! defaultPathString ^ self useFileSystem ifTrue: [(((Smalltalk at: #Path) perform: #workingDirectory) perform: #asFileReference) pathString] ifFalse: [(Smalltalk at: #FileDirectory) default pathName] ! ! !CommandShell class methodsFor: 'defaults' stamp: 'dtl 4/2/2001 20:48'! defaultWindowName ^ 'Squeak Shell'! ! !CommandShell class methodsFor: 'version dependent' stamp: 'SeanDeNigris 2/13/2013 09:51'! deleteFileNamed: fileName "Delete the file with the given name." self useFileSystem ifTrue: [ | file | file := fileName perform: #asFileReference. (file respondsTo: #ensureDeleted) ifTrue: [ file perform: #ensureDeleted ] ifFalse: [ file perform: #delete ] ] ifFalse: [ (Smalltalk at: #FileDirectory) default deleteFileNamed: fileName ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 18:00'! deleteFileNamed: fileName inDirectory: directoryOrFileReference "Delete the file with the given name in the given directory." ^ self useFileSystem ifTrue: [(directoryOrFileReference files detect: [:e | e basename = fileName ] ifNone: [ ]) ifNotNilDo: [:f | f delete ]] ifFalse: [ directoryOrFileReference deleteFileNamed: fileName ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:59'! dirPathFor: path "Return the directory part the given name." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) parent fullName ] ifFalse: [(Smalltalk at: #FileDirectory) perform: #dirPathFor: with: path] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/26/2013 15:38'! directoryEntryNames: path ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) children collect: [:e | e perform: #basename] ] ifFalse: [ ((Smalltalk at: #FileDirectory) on: path) entries collect: [:e | e name] ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:59'! directoryExists: path "Answer true if a directory of the given name exists. The given name may be either a full path name or a local directory within this directory." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) exists ] ifFalse: [ (Smalltalk at: #FileDirectory) default directoryExists: path ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 22:31'! directoryForPath: path ^ self useFileSystem ifTrue: [path perform: #asFileReference] ifFalse: [(Smalltalk at: #FileDirectory) on: path] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/26/2013 15:38'! directoryNamesInPath: path ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) children select: [:e | e isDirectory ] thenCollect: [:e | e perform: #basename] ] ifFalse: [ ((Smalltalk at: #FileDirectory) on: path) entries select: [:e | e isDirectory ] thenCollect: [:e | e name] ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/28/2013 20:12'! entryName: directoryEntry "Answer the name of a directory entry." ^ self useFileSystem ifTrue: [ directoryEntry basename ] ifFalse: [ directoryEntry name ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:57'! fileExists: path "Answer true if a file of the given name exists. The given name may be either a full path name or a local file within this directory." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) exists ] ifFalse: [ (Smalltalk at: #FileDirectory) default fileExists: path ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:57'! fileExists: fileName inDirectory: directoryOrFileReference "Answer true if a file of the given name exists in this directory." ^ self useFileSystem ifTrue: [ (directoryOrFileReference entries detect: [:e | e basename = fileName] ifNone: []) notNil ] ifFalse: [ directoryOrFileReference fileExists: fileName ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:58'! fileExists: fileName inPath: path "Answer true if a file of the given name exists in the directory named by path." ^ self useFileSystem ifTrue: [ self fileExists: fileName inDirectory: (path perform: #asFileReference) ] ifFalse: [ self fileExists: fileName inDirectory: ((Smalltalk at: #FileDirectory) on: path) ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:52'! fileNamed: fileName inDirectory: directoryOrFileReference "Open the file with the given name in this directory for writing." ^ self useFileSystem ifTrue: [(directoryOrFileReference files detect: [:e | e basename = fileName ] ifNone: [ ]) ifNotNilDo: [:f | f writeStream ]] ifFalse: [ directoryOrFileReference fileNamed: fileName ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:56'! fullNameFor: fileName "Return a corrected, fully-qualified name for the given file name." ^ self useFileSystem ifTrue: [ (fileName perform: #asFileReference) perform: #fullName ] ifFalse: [ (Smalltalk at: #FileDirectory) default fullNameFor: fileName ] ! ! !CommandShell class methodsFor: 'documentation' stamp: 'dtl 8/30/2011 07:30'! htmlOverview "A general overview" ^ 'Introduction to CommandShell

CommandShell

CommandShell is a Smalltalk implementation of a command processor shell and terminal window. It is intended to behave like to a simple terminal window (like xterm) running a Unix command shell (like /bin/sh). It lacks some elements of Unix shell syntax, and does not provide terminal emulation, but it adds some nice Smalltalk enhancements such as a text editor which works in a command pipeline, and the ability to evalute Smalltalk expressions in a command pipeline with Unix commands.

How to use CommandShell

Evaluate "CommandShell open" or, if you have loaded the change set to put CommandShell in your world menu, just select "Squeak Shell" from the "open..." menu entry. To use the command shell window, enter commands on the command line (after the "$ " command prompt, followed by cr to accept the command. The "help" command gives some clues as to what can be done. In general, just try any command which you might otherwise enter into a Unix shell or xterm window. Then try some of the Smalltalk features such as mixing Smalltalk expressions with Unix commands, and piping commands into Smalltalk editors.

Basic Concepts

  • Commands

    Smalltalk uses objects and messages, with expressions arranged in a natural Noun-Verb-Predicate sentence structure, similar to that of some spoken languages. In contrast, many other computer systems use a style in which users issue a command to the system, in which the "command" (a verb) is followed by various (predicate) modifiers. In the case of a traditional command-line interface, such as a Unix shell, the command is usualy the name of a program, and the modifiers are parameters passed to the program to influence its behavior. CommandShell attempts to provide a command line interface for executing commands within Squeak, in a style and environment which is comforable for someone accustomed to the Smalltalk style of expression.

  • Process Proxies

    A command line user interface, such as a Unix shell or a "DOS window" in Windows, revolves around the notion of executing programs from user commands. When Squeak is hosted in another operating system, it is useful to be able to execute an external program from a command line expression. A process proxy is an object which represents the evaluation of such an external command in a command line environment.

    From the point of view of Squeak, a process proxy might just as well represent the evaluation of a Smalltalk expression in the context of a command line environment. Thus a process proxy can be an object which represents the execution of an external program or an internal Smalltalk expression. It is created from a command line expression, and provides a representation of certain aspects of the external (or internal) process execution, such as process run state, exit status, and the input, output and error streams for the process.

    External process proxies are used to evaluate programs in the external operating system (this requires the OSProcess change set in addition to CommandShell). Internal process proxies are used to evaluate "built in" commands for a command shell, such as the "cd" command to change the working directory for the command shell. Internal proxies are also used for evaluating "doIt" expressions within a command pipeline. In this case, the variables "stdin", "stdout", and "stderr" are pre-defined such that the doIt expression can directly access the input, output and error pipes for the internal process proxy (in other words, the doIt expression "stdout nextPutAll: ''Hello world'' !!" will write ''Hello world'' on the output pipe of the proxy).

  • Pipelines

    Powerful computing systems may be built upon simple design metaphors. In Smalltalk, the concept of objects communicating through messages is generalized and extended to produce the Squeak system. In Unix systems, the metaphor of a pipe with data flowing between two programs is generalized to produce a mechanism for connecting small programs to produce complex systems. The command line shells for Unix support this metaphor by providing syntax for connecting two or more commands together into more complex command pipelines.

    CommandShell provides a framework for connecting several process proxies into a command pipeline, using command syntax similar to that of a Unix shell. Since the process proxies are implemented in Smalltalk, the "programs" in a command pipeline may consist of process proxies representing external programs, or of proxies representing the evaluation of internal Smalltalk expressions. The objects which flow through the pipes in a command pipeline are assumed to be characters, such that the external commands can operate on the streams of characters in the usual way, and the internal Smalltalk commands read and write streams of characters.

    Just as programs (or internal expressions) are represented by process proxies, the pipes which interconnect two process proxies are represented by pipe objects. The pipe may be either an OSPipe (a proxy representing a Unix system FIFO pipe) or an InternalPipe (a Smalltalk object which behaves similarly to an OSPipe). The combination of process proxies and pipes is a command pipeline, which may be created and evaluated from a command line expression using conventional Unix shell syntax.

Command Line Syntax

A command or command pipeline may be created from a string expression, and evaluated using Unix shell syntax. CommandShell accepts command line strings and does some high level processing to set up process proxy execution. For most of the command parsing, it relies on a ShellSyntax object to do the syntax evaluation. In particular, a real Unix shell interprets command line parameters in the context of the Unix file system, expanding "wildcard" characters and searching for files in the context of a "current working directory" location in the file system tree. A CommandShell, collaborating with an instance of ShellSyntax, implements this syntax parsing and evaluation in Smalltalk.

Command Execution

Beginning with a command line (which may represent a pipeline of several commands), a CommandShell first attempts to treat the entire command line as a Smalltalk expression. The command line string is used to create an instance of PipeableEvaluator (a kind of process process). If the expression is successfully compiled and evaluated in the PipeableEvaluator, the command line is executed just as if it were an external Unix command, with the result of the evaluation written as a string to the output stream of the process proxy.

If the complete command line cannot be treated as a Smalltalk expression, CommandShell assumes that it must be a Unix style command pipeline. If the command line is a comment (starting with ''#'') it is discarded; otherwise it is broken down into a series of process proxies connected by pipes, with command line parameters and other aspects of the command line parsing handled by a ShellSyntax object.

The process proxies in the command pipeline may represent internal or external commands. CommandShell parses the command line to create the proxies by breaking the command pipeline into segments (separated by the "|" pipe character), with different kinds of process proxy created according to the following priorities:

  • If the command segment is a simple Smalltalk expression terminated by "!!", it is treated as a "doIt" expression, evaluated in a PipeableEvaluator proxy. This kind of simple doIt expression is limited to commands with characters which are unambiguous in a shell command. For example, "|" has special meaning in a command line, and cannot be used in a doIt expression (command line quoting and escape characters have not yet been implemented in the CommandShell syntax).
  • If the command segment is not a doIt expression, CommandShell checks to see if it matches one of several "shell builtin" commands. These are special commands implemented in class ShellBuiltin and evaluated in a PipeableEvaluator proxy. They behave analogously to shell builtin commands in a conventional Unix shell. A number of commands such as "cd" and "pwd" are implemented as internal builtin commands, rather than relying on Unix external equivalents. In addition, other builtin commands such as "edit" do things which are useful in Squeak and have no real equivalent in Unix (the "edit" builtin opens an editor within Squeak, taking its input from files or directly from the output of a command pipeline such as "Smalltalk !! | edit" or "who | edit").
  • If the command segment is not a shell builtin command, it is assumed to be an external command. It this case, the command line segment is fully parsed, then used to create an external OS process proxy to run the external command. The external process proxy responds to a #value message by running the external program, with output and error written to pipes connected to the command pipeline.
  • Finally, if no external program can be found to execute the command, an error message is provided to the command window, and no command is evaluated.
Once the command proxy pipeline has been created, the individual process proxies are evaluated in such a way that they appear to execute in parallel, with each proxy reading its input from a pipe connected to its predecessor in the pipeline, and writing its output to a pipe connected to its successor in the pipeline. An additional error pipe is shared by all process proxies in the pipeline, such that any error output is accumulated in the shared error pipe stream.

A command shell can obtain the output and error of a complex command pipeline simply by evaluating the last process proxy in the chain, and reading up to the end of its output and error pipes. Since a process proxy knows its run state, and a pipe is not "at end" until a process proxy closes one end of the pipe, the pipeline can be constructed in such a way that the command shell is assured that all process proxies have completed their evaluation when the output of the last proxy is read up to the end of the pipe.

As the last process proxy in a command pipeline is evaluated, CommandShell reads its output and error pipes, and displays the text in the View or Morph which it uses as its terminal window. When complete, it issues a new prompt string, and waits for another command line to be entered by the user.

Exercise for the Reader:

Which one of the following five command lines will generate an error, and why?
  1. $ stdout nextPutAll: ''hello world''
  2. $ stdout nextPutAll: ''hello world''; cr
  3. $ stdout nextPutAll: ''hello world''!!
  4. $ stdout nextPutAll: ''hello world''; cr!!
  5. $ stdout nextPutAll: ''hello world''!!; stdout cr!!

Answer:

The fourth command will generate an error.
  • Line one is evaluated as a complete Smalltalk expression, and succeeds.
  • Line two is evaluated as a complete Smalltalk expression, and succeeds.
  • Line three is evaluated as a pipeline after failing evaluation as a complete Smalltalk expression. It succeeds as a pipeline with one internal doIt proxy, and produces the same output as line one.
  • Line four cannot be evaluated as a complete Smalltalk expression. The ";" token causes the command line to be evaluated as two pipelines. The expression for the first pipeline does not have a trailing "!!" token, so it is assumed to be an external command, and fails. The second pipeline is evaluated as a doIt on the string ''cr!!'', which fails as an invalid Smalltalk expression. The error messages for both failures are accumulated on the shared error pipe, and are displayed in the terminal window.
  • Line five is evaluated successfully as two pipelines, each consisting of one doIt proxy. The output is the same as for line two.
'! ! !CommandShell class methodsFor: 'class initialization' stamp: 'dtl 2/3/2012 22:06'! initialize "CommandShell initialize" | preferencesClass | Smalltalk addToStartUpList: self. (Smalltalk hasClassNamed: #Preferences) ifTrue: ["Pharo deprecates Preference in favor of pragma registration mechanism" preferencesClass := Smalltalk at: #Preferences. (preferencesClass respondsTo: #setWindowColorFor:to: ) ifTrue: ["Squeak" preferencesClass setWindowColorFor: #CommandShell to: (Color colorFrom: self windowColorSpecification pastelColor)] ifFalse: ["Pharo images use some other preferences protocol"]]. Smalltalk at: #TheWorldMenu ifPresent: [ :class | class class methodDict at: #registerOpenCommand: ifPresent: [ :method | (method hasLiteral: #deprecated:) "n.b. use #hasLiteral: rather than #sendsSelector: for Squeak 3.8" ifTrue: ["Pharo issues deprecation and tells you to do it their way. Ignore the warning."] ifFalse: [ class unregisterOpenCommand: 'Squeak shell'. "if previously registered" class registerOpenCommand: {'Squeak Shell'. {CommandShell . #open}}]]] ! ! !CommandShell class methodsFor: 'version testing' stamp: 'dtl 6/29/2010 21:06'! isMorphic "Squeak traditionally used #isMorphic to distinguish between Morphic and MVC user interfaces. In newer Squeak images, the current project knows its active user interface, so requests are vectored through the current project. Pharo images pretend to be unaware of the fact that they are running Morphic, refusing to respond to #isMorphic. This implementation does reasonable things in any of the above scenarios." ^(Smalltalk respondsTo: #isMorphic) not or: [Smalltalk isMorphic]! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 17:55'! localNameFor: path "Return the local part the given name." ^ self useFileSystem ifTrue: [ (path perform: #asFileReference) perform: #basename ] ifFalse: [(Smalltalk at: #FileDirectory) perform: #localNameFor: with: path] ! ! !CommandShell class methodsFor: 'VM building' stamp: 'dtl 1/25/2013 19:08'! makeVmIn: buildDirectoryPathName "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory." "CommandShell makeVmIn: CommandShell defaultPathString, CommandShell pathSeparator, 'build'" | shell | shell := self new. shell open. ^ shell makeVmIn: buildDirectoryPathName ! ! !CommandShell class methodsFor: 'instance creation' stamp: 'dtl 12/27/2001 23:36'! open "CommandShell open" ^ self new open! ! !CommandShell class methodsFor: 'instance creation' stamp: 'dtl 3/17/2003 21:19'! openLabel: aString "CommandShell openLabel: self defaultWindowName" ^ self new openLabel: aString ! ! !CommandShell class methodsFor: 'instance creation' stamp: 'dtl 6/27/2010 16:08'! openWithHelp "CommandShell openWithHelp" self open processCommand: 'help' ! ! !CommandShell class methodsFor: 'documentation' stamp: 'dtl 12/1/2001 18:51'! overview "A general overview" "CommandShell new pipeline: 'CommandShell overview!! | edit'" | rs ws | rs := ReadStream on: self htmlOverview. ws := WriteStream on: String new. [rs atEnd] whileFalse: [ws nextPutAll: (rs upTo: $<). rs upTo: $>]. ^ ws contents ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'SeanDeNigris 2/13/2013 09:46'! pathNameDelimiter ^ self useFileSystem ifTrue: [(Smalltalk at: #DiskStore) current perform: #delimiter] ifFalse: [(Smalltalk at: #FileDirectory) pathNameDelimiter] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/27/2013 18:17'! pathNameForDirectory: directoryOrFileReference "Return the full name of this directory." ^ self useFileSystem ifTrue: [directoryOrFileReference fullName] ifFalse: [ directoryOrFileReference pathName ] ! ! !CommandShell class methodsFor: 'version dependent' stamp: 'SeanDeNigris 2/13/2013 09:46'! pathSeparator ^ self useFileSystem ifTrue: [((Smalltalk at: #DiskStore) current perform: #delimiter) asString] ifFalse: [(Smalltalk at: #FileDirectory) slash] ! ! !CommandShell class methodsFor: 'proxy creation' stamp: 'dtl 12/31/2007 14:51'! pipeableProxyFor: commandString "Create a new proxy for a PipeJunction. The proxy may be any type of PipeJunction, such as a PipeableOSProcess or ExpressionEvaluator. Send #value to evaluate the newly created proxy." "(CommandShell pipeableProxyFor: 'ls -l') value upToEndOfFile" "(CommandShell pipeableProxyFor: 'Array new: 4 !!') value upToEndOfFile" "(CommandShell pipeableProxyFor: 'help') value upToEndOfFile" ^ self new pipeableProxyFor: commandString input: nil output: nil error: nil predecessorProxy: nil! ! !CommandShell class methodsFor: 'proxy creation' stamp: 'dtl 12/31/2007 14:55'! pipeline: aCommand "Find the individual commands in a command pipeline string, and evaluate them as a command pipeline. Answer a ProxyPipeline collection of processes in the pipeline." "(CommandShell pipeline: 'ps | grep ps | wc') upToEndOfFile" "(CommandShell pipeline: 'ls NOSUCHFILE * | dd | cat') errorUpToEndOfFile" "(CommandShell pipeline: 'ls NOSUCHFILE * | dd | cat') upToEndOfFile" ^ self new pipeline: aCommand ! ! !CommandShell class methodsFor: 'documentation' stamp: 'dtl 12/15/2007 12:25'! raceConditions "CommandShell new pipeline: 'CommandShell raceConditions!! | edit'" ^ 'It may be possible to hang the Squeak VM in an IO race condition when doing certain command pipelines. These conditions have been largely eliminated for Unix platforms through the use of nonblocking pipes in conjunction with asynchronous IO or polling processes on the Smalltalk side of the pipes. However, these notes are provided to describe possible deadlock scenarios. Note that nonblocking OS pipes are not yet available on Windows. Command pipelines with external OS processes on Windows are not supported. Blocking on read or write to an OSPipe in Windows will definitely lock the VM. Two kinds of deadlock are possible. In both cases, deadlock occurs when the single-threaded Squeak VM is blocked on a read or write to an OS pipe, and the blocked condition can only be cleared by another process running in the blocked VM. 1) Block on write. The Squeak VM can block on a write to an OS pipe if the external process at the other end of the pipe does not keep up with reading it. One internal process proxy writes on an pipe to an external process proxy, and fills the pipe up to some capacity limit, after which the write blocks. The external proxy is writing its output to another internal process proxy in the command pipeline, which never executes because the VM is still blocked trying to write to the full pipe. 2) Block on read. The Squeak VM can block on a read from an OS pipe if the external process writing to the pipe never closes the pipe. The internal proxy will post a read on the output pipe from the external command. If the external command has exited, the read will return with a (possibly empty) string. However, if the external command either does not exit, or exits without Squeak being notified, the read on the output pipe will block indefinitely. 2a) In the case where the external command exits while the Squeak VM is blocked on a read, Squeak is unable to respond to the notification of the external process exiting. The process stays in a zombie state, the pipes therefore never get closed, and the VM stays in a blocked condition. Here are things to try if a deadlock occurs: Squeak will be blocked and will not respond to the mouse or keyboard. Open a command shell outside of Squeak (perhaps an xterm, or log in to another virtual terminal on Linux or FreeBSD). Using the "ps" command, find the Squeak VM process and its subprocesses. Kill the subprocess. In many cases this will free up the deadlock, and Squeak will come back to life. If this does not work, then you will probably find that one of the processes which you just killed is now in a "zombie" state, which means that the Squeak VM is deadlocked in such a way that it cannot recognize that its child process exited (and therefore cannot properly close the associated file handles). In this case, if your operating system supports a /proc file system, you may be able to break things free by emptying the pipes. On Linux, go to /proc//fd/ and do "cat" commands on all the pipe files in this directory. If none of this works, you are just plain stuck, and you will need to kill your Squeak session and recover anything valuable from the changes log.'! ! !CommandShell class methodsFor: 'system startup' stamp: 'dtl 7/12/2002 19:26'! startUp: resuming "A CommandShell may be running external processes in background, and waiting for those processes to complete. If the Squeak image is stopped and restarted, the background processes are no longer children of the Squeak process, and there is no way to receive notification when the processes exit. This would result in leftover Smalltalk processes associated with the CommandShell waiting forever for the external processes to exit. The simplest way to prevent this is to terminate all the Smalltalk processes unconditionally after an image restart." resuming ifTrue: [self allSubInstances do: [:e | e startUpInNewSession]] ! ! !CommandShell class methodsFor: 'class initialization' stamp: 'dtl 2/3/2012 22:06'! unload Smalltalk at: #TheWorldMenu ifPresent: [ :class | class class methodDict at: #unregisterOpenCommandWithReceiver: ifPresent: [ :method | (method hasLiteral: #deprecated:) "n.b. use #hasLiteral: rather than #sendsSelector: for Squeak 3.8" ifFalse: [ class unregisterOpenCommandWithReceiver: self ] ] ]! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/26/2013 15:38'! useFileSystem "If true use FileSystem, otherwise use traditional FileDirectory. See senders for methods with file system dependencies." ^ Smalltalk hasClassNamed: #FileReference! ! !CommandShell class methodsFor: 'version testing' stamp: 'dtl 9/22/2013 17:56'! versionString "CommandShell versionString" ^'4.6.7'! ! !CommandShell class methodsFor: 'window color' stamp: 'dtl 6/29/2010 00:07'! windowColorSpecification "Answer a WindowColorSpec object that declares my preference" | windowColorSpec | windowColorSpec := Smalltalk at: #WindowColorSpec ifAbsent: [^ self error: 'this image does not support WindowColorSpec']. ^ windowColorSpec classSymbol: self name wording: 'Squeak Shell' brightColor: (Color lightGray lighter paler) pastelColor: (Color lightGray lighter lighter paler paler) helpMessage: 'CommandShell window for evaluating Smalltalk and OS commands'! ! !CommandShell class methodsFor: 'version dependent' stamp: 'dtl 1/29/2013 20:40'! withBlanksTrimmed: aString ^ (aString respondsTo: #withBlanksTrimmed) ifFalse: [aString perform: #trimBoth "Pharo"] ifTrue: [aString perform: #withBlanksTrimmed] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/24/2001 19:09'! activeController "In Morphic, alway nil. In MVC, the controller which most recently invoked a command." ^ activeController! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/24/2001 19:09'! activeController: aController "In Morphic, alway nil. In MVC, the controller which most recently invoked a command." activeController := aController! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/19/2002 07:13'! backgroundMessageQueue "When a background pipeline completes, it places a message in this queue. The message will be displayed the next time the user accepts a line of text (presses CR)." ^ backgroundMessageQueue ifNil: [backgroundMessageQueue := OrderedCollection new] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! backgroundMessageQueue: anObject "Set the value of backgroundMessageQueue" backgroundMessageQueue := anObject! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 12/11/2007 21:33'! backgroundPipelineComplete: aPipeline commandIndex: index "This message is sent when aPipeline has completed evaluation. Ensure that the output and error event handlers have had a chance to completely empty the pipes prior to cleaning things up." self waitUntilPipesAreEmpty: aPipeline. aPipeline closePipes; release. self backgroundMessageQueue addLast: ((WriteStream on: String new) nextPutAll: '[', index asString, ']+ Done '; nextPutAll: aPipeline commandLine; cr; contents). self backgroundProxies removeAll: aPipeline. self unRegisterBackgroundPipeline: aPipeline at: index. self notifyRestorePrompt ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/15/2002 16:23'! backgroundPipelines "The pipelines which are currently being evaluated in background. This collection is used to keep track of the background command lines by giving each background pipeline an index number corresponding to its position in this collection. New pipelines are inserted at the first available nil position in the collection, and the collection is expanded as needed." ^ backgroundPipelines ifNil: [backgroundPipelines := OrderedCollection new] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! backgroundPipelines: anObject "Set the value of backgroundPipelines" backgroundPipelines := anObject! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/9/2006 10:23'! backgroundProxies "All of my process proxies that are being evaluated in the background." backgroundProxies ifNil: [backgroundProxies := OrderedCollection new]. ^ backgroundProxies! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/9/2006 10:23'! backgroundProxies: aCollection "All of my process proxies that are being evaluated in the background." backgroundProxies := aCollection ! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 11/21/2006 09:20'! builtinCommandProxyFor: aCommandString input: in output: out error: err "Answer a PipeableEvaluator on a built in command, or nil." "CommandShell new initialize builtinCommandProxyFor: 'help' input: nil output: nil error: nil" | args command commandAndArgs | ^ (self isBuiltInCommand: aCommandString) ifTrue: [commandAndArgs := self shellSyntax programNameAndArgumentsFrom: aCommandString inDirectoryPath: nil findExecutable: false. command := self builtinCommands at: commandAndArgs first. args := commandAndArgs last. ^ ShellBuiltinEvaluator command: command withArguments: args shell: self pipeFrom: in pipeTo: out errorPipelineStream: err] ifFalse: [nil] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/27/2001 12:24'! builtinCommands ^ builtinCommands ifNil: [builtinCommands := Dictionary new]! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 7/14/2002 11:54'! builtinCommands: aCommandDictionary builtinCommands := aCommandDictionary! ! !CommandShell methodsFor: 'testing' stamp: 'dtl 8/7/2002 11:45'! canAccessOSProcess "True if OSProcess is in the image and if the OSProcess plugin is functioning properly" "CommandShell new canAccessOSProcess" | osp | ^ (osp := Smalltalk at: #OSProcess ifAbsent: []) notNil and: [osp accessor canAccessSystem] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 3/16/2001 05:58'! characterLimit "Tell the views how much to retain on screen" ^ 20000! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 2/18/2007 15:37'! checkSttyFor: characterValue "Check for interrupt characters and such. Consume interrupt character and answer nil, otherwise answer characterValue." (self isInterrupt: characterValue) ifTrue: [self changed: #interruptCharacter. ^ nil]. (self isEndOfFile: characterValue) ifTrue: [self doEndOfFile. ^ nil]. ^ characterValue! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/2/2001 12:05'! clearSemaphore [self readSyncSemaphore isEmpty] whileFalse: [readSyncSemaphore terminateProcess]. readSyncSemaphore signal ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:48'! command: aCommandString "Evaluate aCommandString. Answer a collection of evaluated pipelines, or nil if nothing was done." "CommandShell new command: 'ls -l | cat'" "CommandShell new open; command: 'ls -l | cat'" "CommandShell new open; command: 'who'" "CommandShell new open; command: 'who&'" "CommandShell new open; command: 'sol'" "CommandShell new command: 'sol'" ^self command: aCommandString echo: true ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:47'! command: aCommandString echo: showCommand "Evaluate aCommandString. Answer a collection of evaluated pipelines, or nil if nothing was done. If showCommand is true, update dependent views in order to display the command." showCommand ifTrue: [self changed: aCommandString]. ^ self evaluatePipelines: (self evaluateOrMakePipelinesFrom: aCommandString) ! ! !CommandShell methodsFor: 'command scripting' stamp: 'dtl 3/18/2003 20:33'! command: aCommandString onFailureDo: aBlockWithZeroOrOneParameter "Evaluate aCommandString. On failure, answer the result of evaluating aBlockWithOneParameter with the collection of evaluated pipelines as its parameter. Otherwise, answer a collection of evaluated pipelines or nil if nothing was done." "CommandShell new open; command: 'who' onFailureDo: [:p | 'the proxy pipeline collection which failed was ', p printString]" "CommandShell new open; command: 'ls NOSUCHFILE' onFailureDo: [:p | 'the proxy pipeline collection that failed was ', p printString]" "CommandShell new open; command: 'ls NOSUCHFILE' onFailureDo: ['the command failed']" | pipelines | pipelines := self command: aCommandString. (pipelines anySatisfy: [:p | p succeeded not]) ifTrue: [(aBlockWithZeroOrOneParameter numArgs == 0) ifTrue: [^ aBlockWithZeroOrOneParameter value] ifFalse: [^ aBlockWithZeroOrOneParameter value: pipelines]] ifFalse: [^ pipelines] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 4/7/2001 12:48'! commandHistory "Automatically trim the history list, and answer the resulting list." | trimIncrement | trimIncrement := 1. "Could be a larger number to copy the collection less often" commandHistory isNil ifTrue: [commandHistory := OrderedCollection new] ifFalse: [(commandHistory size > (self historyDepth * 2 + (trimIncrement * 2) - 2)) ifTrue: [commandHistory := commandHistory copyFrom: (trimIncrement * 2 + 1) to: commandHistory size]]. ^ commandHistory! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/15/2002 09:21'! commandLineProcesses "The Smalltalk processes associated with currently executing command lines. Keep track of them here so that they can be conveniently terminated if something gets out of whack and needs cleaning up." commandLineProcesses ifNil: [commandLineProcesses := OrderedCollection new]. ^ commandLineProcesses ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! commandLineProcesses: anObject "Set the value of commandLineProcesses" commandLineProcesses := anObject! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 1/13/2007 19:10'! copyAllErrorFrom: aProxy "An event driven data source may send this message to cause its available error stream characters to be processed." | s | self readSyncSemaphore critical: [s := aProxy errorUpToEnd. s isEmpty ifFalse: [[self errorStream nextPutAll: s] on: Error do: [:ex | ex retryUsing: ["If the error pipe overflows we get an unhandled error, so wait a while and retry the write." (Delay forMilliseconds: self pollingDelayTime) wait. self errorStream nextPutAll: s]]]] ! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 1/16/2007 07:05'! copyAllOutputFrom: aProxy "An event driven data source may send this message to cause its available characters to be processed." | s | self readSyncSemaphore critical: [s := aProxy upToEnd. s isEmpty ifFalse: [[self outputStream nextPutAll: s] on: Error do: [:ex | ex retryUsing: ["If the output pipe overflows we get an unhandled error, so wait a while and retry the write." (Delay forMilliseconds: self pollingDelayTime) wait. self outputStream nextPutAll: s]]]] ! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 1/13/2007 19:10'! copyErrorToEofFrom: aProxy "An event driven data source may send this message to cause its available error stream characters to be processed." | s | self readSyncSemaphore critical: [s := aProxy errorUpToEndOfFile. s isEmpty ifFalse: [[self errorStream nextPutAll: s] on: Error do: [:ex | ex retryUsing: ["If the error pipe overflows we get an unhandled error, so wait a while and retry the write." (Delay forMilliseconds: self pollingDelayTime) wait. self errorStream nextPutAll: s]]]] ! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 1/13/2007 19:11'! copyOutputToEofFrom: aProxy "An event driven data source may send this message to cause its available characters to be processed." | s | self readSyncSemaphore critical: [s := aProxy upToEndOfFile. s isEmpty ifFalse: [[self outputStream nextPutAll: s] on: Error do: [:ex | ex retryUsing: ["If the output pipe overflows we get an unhandled error, so wait a while and retry the write." (Delay forMilliseconds: self pollingDelayTime) wait. self outputStream nextPutAll: s]]]] ! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 7/14/2002 12:42'! defaultBuiltinCommands ^ #(cd: clear: copyToError: copyToOutput: edit: snapshot: exit: fc: help: history: inspect: pwd: sls: sqsh: type:) ! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 6/17/2002 23:43'! defaultPromptString ^ '$ '! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 6/17/2002 23:45'! defaultPromptStringTwo ^ '> '! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 9/3/2010 17:02'! doEndOfFile "EOF character detected, close stdin to pipeline." | pipelineInput | (pipelineInput := self keyboardConnector) ifNotNil: [pipelineInput closeWriter] ! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 3/9/2002 18:22'! doInterrupt "Interrupt character detected, do interrupt stuff." | msgStrm children answer | children := self externalChildren collect: [:e | e processProxy]. (children size > 0) ifTrue: [msgStrm := WriteStream on: String new. (children size > 1) ifTrue: [msgStrm nextPutAll: 'kill processes'] ifFalse: [msgStrm nextPutAll: 'kill process']. children do: [:e | msgStrm nextPutAll: ' ', e pid printString, ' (', e programName, ')']. msgStrm nextPut: $?. self readSyncSemaphore critical: [self pauseStProcesses. answer := self confirm: msgStrm contents. self unpauseStProcesses. answer ifTrue: [children reverseDo: [:e | e sigkill]. self terminateStProcesses]]] ! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 1/20/2007 14:18'! doItProxyFor: aCommandString input: in output: out error: err "Answer a PipeableEvaluator on a doIt command, or nil." "CommandShell new doItProxyFor: '#thisIsADoIt !! ' input: nil output: nil error: nil" ^ (self shellSyntax isDoItCommand: aCommandString) ifTrue: [self evaluationProxyFor: (self shellSyntax doItStringFrom: aCommandString) input: in output: out error: err] ! ! !CommandShell methodsFor: 'command history' stamp: 'dtl 1/28/2013 21:40'! editCommand: aString ^ UIManager default request: 'edit command' initialAnswer: aString! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 6/7/2001 23:17'! endOfFileCharacterValue "-D" ^ 4! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 5/18/2008 11:36'! environment ^ environment ifNil: [environment := (Smalltalk at: #OSProcess ifPresent: [:osp | osp thisOSProcess environment deepCopy]) ifNil: [Dictionary new]]. ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! environment: anObject "Set the value of environment" environment := anObject! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:23'! errorStream "Answer the value of errorStream" ^ errorStream ifNil: [errorStream := WriteStream on: String new]! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! errorStream: anObject "Set the value of errorStream" errorStream := anObject! ! !CommandShell methodsFor: 'command line parsing' stamp: 'dtl 1/22/2007 07:04'! evaluateOrMakePipelinesFrom: aCommandString "Convert aCommandString into a structured collection of process proxies, possibly after evaluating aCommandString as Smalltalk." "CommandShell new evaluateOrMakePipelinesFrom: 'who | cat | wc; ps -aef | cat& pwd | cat'" "CommandShell new evaluateOrMakePipelinesFrom: 'Array new: 10' " | process | "Ignore trivial case of a single word starting with $#" (self isOneWordCommentString: aCommandString) ifTrue: [^ #()] ifFalse: [process := self tryEvaluatingAsSmalltalk: aCommandString. (process exitStatus == #success) ifTrue: "aCommandString was successfully evaluated as a Smalltalk expression" [self outputStream nextPutAll: process upToEnd. self errorStream nextPutAll: process errorUpToEnd. self saveInHistoryList: aCommandString. ^ #()] ifFalse: "Treat aCommandString as a command pipeline" [^ self pipelineCollectionFrom: aCommandString]] ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 12/11/2007 18:39'! evaluatePipeline: aPipeline "Evaluate aPipeline with event handlers to process output and error data." "CommandShell new evaluatePipeline: (CommandShell new pipelineCollectionFrom: 'ls NOSUCHFILE * | cat | dd | cat | wc; ps -aef | cat& pwd | cat') first" | index | self registerOutputEventsFor: aPipeline. self registerErrorEventsFor: aPipeline. aPipeline background ifTrue: [index := self registerBackgroundPipeline: aPipeline. self registerBackgroundCompletionEventsFor: aPipeline commandIndex: index. self backgroundProxies addAll: aPipeline. aPipeline value. "Print the index of the background process." self errorStream nextPutAll: '[', index asString, '] '. aPipeline last isExternalProcess ifTrue: [aPipeline last processProxy pid printOn: self errorStream]. self errorStream cr; nextPut: Character lf] ifFalse: [self keyboardConnector: aPipeline pipeToInput. self registerForegroundCompletionEventsFor: aPipeline. self foregroundProxies addAll: aPipeline. aPipeline value]. ^ aPipeline ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/3/2010 17:04'! evaluatePipelines: aPipelineCollection "Evaluate the process proxies in aPipelineCollection, and process their output and error streams. Answer aPipelineCollection." | lastForegroundPipeline completionSemaphore | lastForegroundPipeline := nil. aPipelineCollection isEmpty ifFalse: [lastForegroundPipeline := aPipelineCollection reversed detect: [:p | p background not] ifNone: []. lastForegroundPipeline ifNotNil: [self registerPromptEventFor: lastForegroundPipeline]. aPipelineCollection do: [:pipeline | completionSemaphore := Semaphore new. pipeline background ifTrue: [completionSemaphore signal "no wait"] ifFalse: [pipeline when: #complete send: #signal to: completionSemaphore]. self evaluatePipeline: pipeline. completionSemaphore wait]]. lastForegroundPipeline ifNil: [self notifyPrompt]. self resetSafeToExitFlag. ^ aPipelineCollection ! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 11/21/2006 09:21'! evaluationProxyFor: aCommandString input: in output: out error: err "Answer a PipeableEvaluator on a doIt command, or nil." "CommandShell new evaluationProxyFor: 'Smalltalk' input: nil output: nil error: nil" "CommandShell new evaluationProxyFor: 'BOGUS' input: nil output: nil error: nil" | proxy | proxy := ExpressionEvaluator command: aCommandString pipeFrom: in pipeTo: out errorPipelineStream: err. ^ proxy ! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 6/9/2001 16:13'! filterAndForward: aCharacter "Filter aCharacter, taking special action if needed. If a child process is active, forward aCharacter to the child and answer nil. Otherwise answer aCharacter." ^ (self checkSttyFor: aCharacter asciiValue) ifNotNil: [keyboardConnector isNil ifTrue: [aCharacter] ifFalse: [keyboardConnector closed ifTrue: [aCharacter] ifFalse: [keyboardConnector nextPut: aCharacter; flush. nil]]]! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 11/7/2007 07:01'! filterAndForwardEvent: keyboardEvent "Filter keyboardEvent, taking special action if needed. If a child process is active, forward keyboardEvent to the child and answer nil. Otherwise answer keyboardEvent." (keyboardConnector isNil or: [keyboardConnector closed]) ifTrue: [^ keyboardEvent] ifFalse: [keyboardConnector nextPut: keyboardEvent keyValue asCharacter; flush. ^ nil]! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 7/7/2006 09:19'! foregroundPipelineComplete: aPipeline "This message is sent when aPipeline has completed evaluation. Ensure that the output and error event handlers have had a chance to completely empty the pipes prior to cleaning things up." self waitUntilPipesAreEmpty: aPipeline. aPipeline closePipes; release. self keyboardConnector: nil. [self foregroundProxies removeAll: aPipeline] on: Error do: ["exit command may cause the collection to be eliminated, hence an error"] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/9/2006 10:23'! foregroundProxies "All of my process proxies that are being evaluated in the foreground." ^ foregroundProxies ifNil: [foregroundProxies := OrderedCollection new] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/9/2006 10:23'! foregroundProxies: aCollection "All of my process proxies that are being evaluated in the foreground." foregroundProxies := aCollection ! ! !CommandShell methodsFor: 'command history' stamp: 'dtl 4/22/2001 10:48'! historyAt: anInteger | bufferSize index | bufferSize := commandHistory size / 2. (anInteger > 0) ifTrue: [index := bufferSize + 1 - historyIndex + anInteger * 2] ifFalse: [index := bufferSize + anInteger * 2]. ((index > commandHistory size) | (index < 1)) ifTrue: [^ ''] ifFalse: [^ commandHistory at: index] ! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 4/8/2001 15:26'! historyDepth "Number of commands to retain in the command history list" ^ 100! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 4/3/2001 22:48'! historyIndex historyIndex ifNil: [historyIndex := 1]. ^ historyIndex ! ! !CommandShell methodsFor: 'working directory' stamp: 'dtl 12/29/2002 20:14'! home "Home directory. Use the environment variable, and set it in #initialize." ^ self environment at: #HOME ! ! !CommandShell methodsFor: 'command scripting' stamp: 'dtl 3/18/2003 23:12'! if: aCommandStringOrScript then: successBlock else: failureBlock "Evaluate aCommandStringOrScript, then evaluate successBlock or failureBlock depending on the exit status of the command or script. The blocks may use either zero or one argument. If a single argument is used, the collection of evaluated pipelines is passed to the block as an argument." "CommandShell new open; if: 'who' then: ['the command succeeded'] else: ['the command failed']" "CommandShell new if: 'who ls NOSUCHFILE pwd' then: ['the script succeeded'] else: ['the script failed']" "CommandShell new if: 'who ls NOSUCHFILE pwd' then: [:p | 'the script succeeded ', p printString] else: [:p | 'the script failed ', p printString]" | pipelines | pipelines := self script: aCommandStringOrScript onFailureDo: [:p | (failureBlock numArgs == 0) ifTrue: [^ failureBlock value] ifFalse: [^ failureBlock value: p]]. (successBlock numArgs == 0) ifTrue: [^ successBlock value] ifFalse: [^ successBlock value: pipelines] ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/29/2002 20:00'! initialize self installCommands. self setHomeDirectory ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/27/2001 12:24'! installCommand: aShellBuiltin self builtinCommands at: aShellBuiltin name put: aShellBuiltin! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 7/14/2002 12:05'! installCommands self installCommands: self defaultBuiltinCommands ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 7/14/2002 12:05'! installCommands: aCommandArray self builtinCommands: (ShellBuiltin commandDictionaryFor: self commands: aCommandArray) ! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 6/7/2001 23:17'! interruptCharacterValue "-C" ^ 3! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 4/8/2001 15:11'! invalidCommandMessage ^ 'invalid command', Character cr asString! ! !CommandShell methodsFor: 'testing' stamp: 'dtl 9/26/2009 13:15'! isBuiltInCommand: aCommandString "Answer true if aCommandString can be evaluated as a built in command." "CommandShell new initialize isBuiltInCommand: 'help this should answer true'" "CommandShell new initialize isBuiltInCommand: 'this should answer false'" ^ self builtinCommands includesKey: (aCommandString copyUpTo: Character space)! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 6/7/2001 23:20'! isEndOfFile: anInteger ^ anInteger == self endOfFileCharacterValue ! ! !CommandShell methodsFor: 'testing' stamp: 'dtl 4/7/2001 13:04'! isExcludedFromHistory: commandString "Answer true if commandString should not be remembered in the history list. The 'fc' and 'history' commands should be excluded." ^ ('fc*' match: commandString) or: ['history*' match: commandString]! ! !CommandShell methodsFor: 'testing' stamp: 'dtl 4/19/2003 09:13'! isExternalProcess "Answer true if the process which I represent is an external OSProcess. For protocol compatibility with PipeJunction." ^ false! ! !CommandShell methodsFor: 'input character filtering' stamp: 'dtl 6/7/2001 23:21'! isInterrupt: anInteger ^ anInteger == self interruptCharacterValue ! ! !CommandShell methodsFor: 'testing' stamp: 'dtl 1/29/2013 20:24'! isOneWordCommentString: aCommandString "Answer true if aCommandString is one word beginning with $#, or if it is an empty string." "CommandShell new isOneWordCommentString: '#oneWordComment'" "CommandShell new isOneWordCommentString: ' #oneWordComment'" "CommandShell new isOneWordCommentString: ' #oneWordComment '" "CommandShell new isOneWordCommentString: '#three word comment'" "CommandShell new isOneWordCommentString: 'not a comment'" "CommandShell new isOneWordCommentString: 'notAComment'" "CommandShell new isOneWordCommentString: ''" | s | s := CommandShell withBlanksTrimmed: aCommandString. ^ s isEmpty or: [(s first == self shellSyntax commentChar) and: [(Scanner new scanTokens: s) size == 1]] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 4/22/2001 18:49'! keyboardConnector "If nil, then my views should behave normally. If a WriteStream, then my views should attempt to forward all keyboard inputs to the WriteStream. This is to permit the keyboard to be connected to an externally executing process, then reconnected to its normal functions when the external process is complete." ^ keyboardConnector! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 4/22/2001 18:56'! keyboardConnector: aWriteStreamOrNil "If nil, then my views should behave normally. If a WriteStream, then my views should attempt to forward all keyboard inputs to the WriteStream. This is to permit the keyboard to be connected to an externally executing process, then reconnected to its normal functions when the external process is complete." keyboardConnector := aWriteStreamOrNil ! ! !CommandShell methodsFor: 'VM building' stamp: 'dtl 1/25/2013 19:06'! makeVmIn: buildDirectoryPathName "Rebuild the virtual machine and plugins in the buildDirectoryPathName directory. If the build is successful, save the image and restart using the new VM. This assumes that the currently executing VM is either located in, or linked to, the buildDirectoryPathName directory." "CommandShell makeVmIn: CommandShell defaultPathString, CommandShell pathSeparator, 'build'" self canAccessOSProcess ifFalse: [^ self notify: 'OSProcess not available or OSProcess plugin not functioning']. self if: 'cd ', buildDirectoryPathName then: [self if: 'make' then: [self script: 'echo make completed successfully, restarting VM; OSProcess quitAndRestart !!'] else: [self script: 'echo make failed']] else: [self script: 'echo cannot change directory to ', buildDirectoryPathName] ! ! !CommandShell methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 10:49'! notifyAlternatePrompt "Display $PS2" self changed: #alternatePrompt! ! !CommandShell methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 10:48'! notifyPrompt "Display $PS1" self changed: #prompt! ! !CommandShell methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 10:49'! notifyRestorePrompt "Restore last prompt display" self changed: #restorePrompt! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 1/20/2007 09:26'! open | tty | tty := CommandShellTranscript commandShell: self. tty open. ^ tty ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/11/2007 18:46'! openLabel: aString | tty | tty := CommandShellTranscript commandShell: self. tty openLabel: aString. ^ tty ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:23'! outputStream "Answer the value of outputStream" ^ outputStream ifNil: [outputStream := WriteStream on: String new]! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 8/19/2006 13:14'! outputStream: anObject "Set the value of outputStream" outputStream := anObject! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 10/13/2008 21:22'! pipeableProxyFor: aCommandString input: in output: out error: err predecessorProxy: lastProxy "Answer a proxy for an external OS process, or for an internal builtin command, or for an evaluation string. The proxy is suitable for use in a command pipeline, possibly mixing internal and external commands." "(CommandShell new pipeableProxyFor: '#''this is a doIt'' !! ' input: nil output: nil error: nil predecessorProxy: nil) value upToEnd" "(CommandShell new pipeableProxyFor: 'help' input: nil output: nil error: nil predecessorProxy: nil) value upToEnd" "(CommandShell new pipeableProxyFor: 'cat /etc/hosts' input: nil output: nil error: nil predecessorProxy: nil) value upToEnd" | errorPipelineStream cmd | errorPipelineStream := lastProxy ifNotNil: [lastProxy errorPipeForNextProxy]. ^ (((self doItProxyFor: aCommandString "try entire line as a Smalltalk expression" input: in output: out error: (err ifNil: [errorPipelineStream])) ifNil: [self builtinCommandProxyFor: aCommandString "is it a shell builtin?" input: in output: out error: (err ifNil: [errorPipelineStream])]) ifNil: [self processProxyFor: aCommandString "then it must be an external command" input: in output: out error: err predecessorProxy: lastProxy]) ifNil: [cmd := (aCommandString findTokens: ' ') first. "otherwise create evaluator to print error message" self evaluationProxyFor: 'stderr nextPutAll: ''sqsh: ', cmd, ': command not found''; cr. self fail' input: in output: out error: err] ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 11/20/2006 08:10'! pipeline: aCommand "Find the individual commands in a command pipeline string, and execute them as a command pipeline. Answer a ProxyPipeline collection of processes in the pipeline." "(CommandShell new pipeline: 'ps | grep ps | wc') last output" "CommandShell new pipeline: 'ls NOSUCHFILE * | dd | cat'" | sema pipeline | sema := Semaphore new. pipeline := ProxyPipeline fromString: aCommand shell: self. pipeline when: #complete send: #signal to: sema. pipeline value. sema wait. ^ pipeline ! ! !CommandShell methodsFor: 'command line parsing' stamp: 'dtl 1/29/2013 20:25'! pipelineCollectionFrom: aCommandString "Break aCommandString into individual pipeline command strings, and answer a collection of process proxy pipelines." "CommandShell new pipelineCollectionFrom: 'who | cat | wc; ps -aef | cat& pwd | cat'" | str pipelineCollection tokens strm cmd cmdWithTerm pipeline lastProxy | str := CommandShell withBlanksTrimmed: aCommandString. pipelineCollection := OrderedCollection new. (self shellSyntax isComment: str) ifFalse: [tokens := str findTokens: ';&' keep: ';&'. strm := ReadStream on: tokens. [strm atEnd] whileFalse: [cmd := CommandShell withBlanksTrimmed: strm next. (self shellSyntax isComment: cmd) ifFalse: [strm atEnd ifTrue: [((cmd size == 1) and: [((cmd at: 1) == $;) | ((cmd at: 1) == $&)]) ifTrue: ["Special case, user has entered ';' or '&'" cmd := cmdWithTerm := ''] ifFalse: [cmdWithTerm := cmd]] ifFalse: [cmdWithTerm := cmd, strm peek]. self saveInHistoryList: cmdWithTerm. (cmdWithTerm size > 0) ifTrue: [pipeline := ProxyPipeline fromString: cmd shell: self. pipeline background: (strm next = self shellSyntax noWaitToken). lastProxy := pipeline last. lastProxy ifNil: [self inform: 'cannot access system'. ^ nil]. lastProxy outputPipeForNextProxy ifNotNil: [lastProxy setNonBlockingOutput]. pipelineCollection add: pipeline]]]]. ^ pipelineCollection ! ! !CommandShell methodsFor: 'defaults' stamp: 'dtl 6/4/2006 18:01'! pollingDelayTime "For various polling loops, number of milliseconds to delay" ^ 50 ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:59'! processCommand: aCommandString "Evaluate aCommandString in a separate Smalltalk process. This permits the user interface to remain responsive." ^self processCommand: aCommandString echo: true ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:55'! processCommand: aCommandString echo: showCommand "Evaluate aCommandString in a separate Smalltalk process. This permits the user interface to remain responsive. If showCommand is true, update dependent views in order to display the command." self commandLineProcesses add: ([self command: aCommandString echo: showCommand. self commandLineProcesses remove: Processor activeProcess ifAbsent: []] forkAt: Processor userBackgroundPriority) ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 11/23/2002 13:31'! processProxies "All of my process proxies." ^ self foregroundProxies, self backgroundProxies ! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 10/14/2008 20:11'! processProxyFor: aCommandString input: in output: out error: err predecessorProxy: lastProxy "Answer a proxy for an external OS command process. Note that the sender is responsible for closing the input pipe. Under certain conditions, reading up to end on a proxy can deadlock the VM if the input pipe remains open." "CommandShell new processProxyFor: '/bin/sh' input: nil output: nil error: nil predecessorProxy: nil" | input newInputPipe errorPipelineStream p proxy | self canAccessOSProcess ifFalse: ["Answer a doIt proxy with an error message. Call it this way to make sure that the error streams get wired up correctly" p := self pipeableProxyFor: 'String new: 0 !! ' input: in output: out error: err predecessorProxy: lastProxy. p errorPipelineStream nextPutAll: 'cannot access system to run ''', aCommandString, '''', Character cr asString. ^ p]. ((in isNil or: [lastProxy isNil]) or: [in isPipe not]) ifTrue: [input := in] ifFalse: ["Input from a command pipeline" (in isKindOf: InternalPipe) ifTrue: ["The input stream is not an external OS pipe. Need to create one, and move the contents of the in stream into the new OSPipe prior to starting the external OS process." newInputPipe := PipeJunction externalPipeClass blockingPipe. lastProxy replaceOutputStreamWith: newInputPipe writer. input := newInputPipe reader] ifFalse: [input := in reader]]. errorPipelineStream := lastProxy ifNotNil: [lastProxy errorPipeForNextProxy]. proxy := PipeableOSProcess commandNoEvaluate: aCommandString environment: self environment workingDir: self workingDirectory input: input output: out error: err errorPipelineStream: errorPipelineStream shellSyntax: self shellSyntax. (proxy isNil and: [newInputPipe notNil]) ifTrue: [newInputPipe closeReader]. "replacement pipe will not be read, so close its output" ^ proxy ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/17/2002 23:45'! promptString "The primary command prompt string, equivalent to $PS1 in a Unix shell" ^ promptString ifNil: [promptString := self defaultPromptString] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/17/2002 23:47'! promptString: aString "The primary command prompt string, equivalent to $PS1 in a Unix shell" promptString := aString ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/17/2002 23:46'! promptStringTwo "The secondary command prompt string, equivalent to $PS2 in a Unix shell" ^ promptStringTwo ifNil: [promptStringTwo := self defaultPromptStringTwo] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/17/2002 23:48'! promptStringTwo: aString "The secondary command prompt string, equivalent to $PS2 in a Unix shell" promptStringTwo := aString ! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 1/20/2007 13:41'! promptWhenComplete: aPipeline self waitUntilPipesAreEmpty: aPipeline. self notifyPrompt! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/25/2001 23:07'! readSyncSemaphore "Used in MVC to pause the screen output when presenting a dialogue to the user" readSyncSemaphore ifNil: [readSyncSemaphore := Semaphore forMutualExclusion]. ^ readSyncSemaphore! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 6/25/2001 20:34'! readSyncSemaphore: aSemaphore "Used in MVC to pause the screen output when presenting a dialogue to the user" readSyncSemaphore := aSemaphore! ! !CommandShell methodsFor: 'process proxy creation' stamp: 'dtl 4/8/2006 18:18'! redirectedPipeableProxyFor: aCommandString predecessorProxy: lastProxy "Answer a proxy for an external OS process, or for an internal builtin command, or for an evaluation string. The proxy is suitable for use in a command pipeline, possibly mixing internal and external commands." "(CommandShell new redirectedPipeableProxyFor: '#''this is a doIt'' !! ' predecessorProxy: nil) value upToEnd" "(CommandShell new redirectedPipeableProxyFor: 'help' predecessorProxy: nil) value upToEnd" "(CommandShell new redirectedPipeableProxyFor: 'cat /etc/hosts' predecessorProxy: nil) value upToEnd" | redirectedCommand nextProxy input | redirectedCommand := self shellSyntax redirectIOFor: aCommandString inDirectoryPath: self workingDirectory. lastProxy isNil ifTrue: [input := redirectedCommand at: 2] ifFalse: [(redirectedCommand at: 2) isNil ifTrue: [input := lastProxy outputPipeForNextProxy] ifFalse: [lastProxy replaceOutputStreamWith: nil. input := redirectedCommand at: 2]]. nextProxy := self pipeableProxyFor: (redirectedCommand at: 1) input: input output: (redirectedCommand at: 3) error: (redirectedCommand at: 4) predecessorProxy: lastProxy. ^ nextProxy handleRedirectedOutputOf: lastProxy ! ! !CommandShell methodsFor: 'event registration' stamp: 'dtl 1/20/2007 13:46'! registerBackgroundCompletionEventsFor: aPipeline commandIndex: index "When an event driven pipeline is complete, it will trigger #complete." aPipeline when: #complete send: #backgroundPipelineComplete:commandIndex: to: self withArguments: {aPipeline . index} ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 12/15/2002 16:48'! registerBackgroundPipeline: aPipeline "Register aPipeline and answer an index number identifier." | index | aPipeline background ifTrue: ["Find available slot in registry, expanding if needed" index := self backgroundPipelines identityIndexOf: nil. (index > 0) ifTrue: [self backgroundPipelines at: index put: aPipeline. ^ index] ifFalse: [self backgroundPipelines addLast: aPipeline. ^ backgroundPipelines size]] ifFalse: [self error: 'expected a background pipeline'] ! ! !CommandShell methodsFor: 'event registration' stamp: 'dtl 1/13/2007 17:22'! registerErrorEventsFor: aPipeline "When an event driven PipeJunction has error data available, it will trigger #errorDataReady." aPipeline when: #errorDataReady send: #copyAllErrorFrom: to: self with: aPipeline ! ! !CommandShell methodsFor: 'event registration' stamp: 'dtl 12/15/2002 13:29'! registerForegroundCompletionEventsFor: aPipeline "When an event driven pipeline is complete, it will trigger #complete." aPipeline when: #complete send: #foregroundPipelineComplete: to: self with: aPipeline ! ! !CommandShell methodsFor: 'event registration' stamp: 'dtl 1/13/2007 17:22'! registerOutputEventsFor: aPipeline "When an event driven PipeJunction has new data available, it will trigger #outputDataReady." aPipeline when: #outputDataReady send: #copyAllOutputFrom: to: self with: aPipeline ! ! !CommandShell methodsFor: 'event registration' stamp: 'dtl 1/20/2007 13:45'! registerPromptEventFor: aPipeline aPipeline when: #complete send: #promptWhenComplete: to: self with: aPipeline ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 6/24/2002 07:02'! release self startUpInNewSession. ^ super release! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 6/4/2006 17:44'! resetSafeToExitFlag "When all foreground and background proxies are complete, the safeToExit flag may be set to true. The flag is set false when a snaphot command is evaluated, and is checked by any command which would cause Squeak to exit. This prevents Squeak from automatically exiting when restarting the image." [[self foregroundProxies isEmpty not or: [self backgroundProxies isEmpty not]] whileTrue: [(Delay forMilliseconds: self pollingDelayTime * 2) wait]. self safeToExit: true] forkAt: Processor userBackgroundPriority ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 7/14/2002 15:56'! safeToExit "This is a guard variable to prevent the user from running a command line containing both a snapshot command and an exit command. This prevents the user from entering a command such as 'snapshot; exit' which would cause the image to immediately exit when next restarted." ^ safeToExit ifNil: [safeToExit := true] ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 7/14/2002 15:56'! safeToExit: trueOrFalse "This is a guard variable to prevent the user from running a command line containing both a snapshot command and an exit command. This prevents the user from entering a command such as 'snapshot; exit' which would cause the image to immediately exit when next restarted." safeToExit := trueOrFalse ! ! !CommandShell methodsFor: 'command history' stamp: 'dtl 4/7/2001 13:05'! saveInHistoryList: aCommandString ((aCommandString size == 0) or: [self isExcludedFromHistory: aCommandString]) ifFalse: [self commandHistory add: self historyIndex printString; add: aCommandString. historyIndex := historyIndex + 1] ! ! !CommandShell methodsFor: 'command support' stamp: 'ThierryGoubier 9/20/2013 15:19'! scheduleToEvaluate: aBlock "Evaluate aBlock, typically to create a new scheduled window. Make it work in both Morphic and MVC. In Morphic, just evaluate aBlock, but in MVC, put it in a queue for evaluation within a control loop. This method may be sent from a process running independent of MVC controller scheduling. Newer Squeak images implement #addDeferredUIMessage in the current project, eliminating the need for an #isMorphic test. This mechanism is not available for older images or for Pharo." CommandShell isMorphic ifTrue: [WorldState addDeferredUIMessage: aBlock] ifFalse: [(Smalltalk at: #ScheduledControllers) activeController addDeferredUIMessage: aBlock]! ! !CommandShell methodsFor: 'command scripting' stamp: 'dtl 12/15/2002 18:50'! script: aScriptString "A script is a String containing a list of commands separated by Character cr. Evaluate each command string in the array until a failure is encountered. Answer the last collection of pipelines to have been evaluated." "CommandShell new open; script: 'who help ls -l NOSUCHFILE help'" ^ self script: aScriptString onFailureDo: [:p | p] ! ! !CommandShell methodsFor: 'command scripting' stamp: 'dtl 1/21/2007 20:19'! script: aScriptString onFailureDo: aBlockWithZeroOrOneParameter "A script is a String containing a list of commands separated by Character cr. Evaluate each command in aScriptString until a failure is encountered. On failure, answer the result of evaluating aBlockWithOneParameter with the collection of evaluated pipelines as its parameter. Otherwise, answer the last collection of pipelines to have been evaluated." "CommandShell new open; script: 'who help ls -l NOSUCHFILE help' onFailureDo: [:p | 'the pipeline collection that failed was ', p printString]" "CommandShell new open; script: 'who help ls help' onFailureDo: [:p | 'the pipeline collection that failed was ', p printString]" "CommandShell new open; script: 'who help ls -l NOSUCHFILE help' onFailureDo: ['the pipeline collection failed']" | commandStream pipelines | commandStream := ReadStream on: (aScriptString copyReplaceAll: Character lf asString with: Character cr asString). pipelines := nil. [commandStream atEnd] whileFalse: [pipelines := self command: commandStream nextLine onFailureDo: [:p | (aBlockWithZeroOrOneParameter numArgs == 0) ifTrue: [^ aBlockWithZeroOrOneParameter value] ifFalse: [^ aBlockWithZeroOrOneParameter value: p]]]. ^ pipelines ! ! !CommandShell methodsFor: 'command scripting' stamp: 'dtl 12/15/2002 18:47'! scriptDoAll: aScriptString "A script is a String containing a list of commands separated by Character cr. Evaluate each command in aScriptString. Ignore failures and force evaluation of all commands in the script. Answer the last pipeline collection to have been evaluated." "CommandShell new open; scriptDoAll: 'who help ls -l NOSUCHFILE help'" | commandStream lastPipelineCollection | commandStream := ReadStream on: (aScriptString copyReplaceAll: Character lf asString with: Character cr asString). [commandStream atEnd] whileFalse: [lastPipelineCollection := self command: commandStream nextLine]. ^ lastPipelineCollection ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 1/25/2013 19:07'! setHomeDirectory self environment. ^ environment at: #HOME put: CommandShell defaultPathString ! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 12/17/2001 11:34'! shellSyntax "A pluggable instance of a command processing syntax" ^ shellSyntax ifNil: [shellSyntax := ShellSyntax new]! ! !CommandShell methodsFor: 'accessing' stamp: 'dtl 9/8/2001 11:10'! shellSyntax: aSyntax "A pluggable instance of a command processing syntax" shellSyntax := aSyntax! ! !CommandShell methodsFor: 'command support' stamp: 'dtl 1/20/2007 14:09'! splitPipelineCommands: aCommand "Answer a list of the individual commands in a command pipeline string, delimited by the pipe character." ^ self shellSyntax splitPipelineCommands: aCommand ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/31/2002 11:53'! startUpInNewSession "Do this if the image has been restarted, in which case all external process references are invalid." self clearSemaphore. self terminateCommandLineProcesses. foregroundProxies := backgroundProxies := backgroundPipelines := nil. self keyboardConnector: nil ! ! !CommandShell methodsFor: 'initialize-release' stamp: 'dtl 12/15/2002 17:33'! terminateCommandLineProcesses (self commandLineProcesses reject: [:e | e == Processor activeProcess]) do: [:p | p terminate]. commandLineProcesses := nil ! ! !CommandShell methodsFor: 'command line parsing' stamp: 'dtl 4/20/2003 15:35'! tryEvaluatingAsSmalltalk: aCommandString "Attempt to treat aCommandString as a Smalltalk expression running in an evaluation process. Evaluate the proxy and set exit status to reflect failure on either the expression compilation or the runtime evaluation. Answer the process proxy." "CommandShell new tryEvaluatingAsSmalltalk: 'this expression should fail in the compiler'" "CommandShell new tryEvaluatingAsSmalltalk: '#this expressionShouldFailInRuntimeEvaluation'" "CommandShell new tryEvaluatingAsSmalltalk: '#thisIsAValidSymbolExpression'" "CommandShell new tryEvaluatingAsSmalltalk: 'Smalltalk'" "CommandShell new tryEvaluatingAsSmalltalk: '#oneWordCommentShouldFail'" | process | process := self evaluationProxyFor: aCommandString input: nil output: nil error: nil. process value. process closeErrorPipeline. "Last process in pipeline, so it can be closed." ^ process! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 12/15/2002 16:34'! unRegisterBackgroundPipeline: aPipeline at: index (self backgroundPipelines at: index) == aPipeline ifTrue: [self backgroundPipelines at: index put: nil] ifFalse: [self error: 'inconsistent registry'] ! ! !CommandShell methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:25'! waitForCommand: aCommandString "Evaluate aCommandString in a separate Process, and signal completionSemaphore when complete. Answer a collection of evaluated pipelines, or nil if nothing was done." | sema pipelines lastPipeline | self changed: aCommandString. pipelines := self evaluateOrMakePipelinesFrom: aCommandString. pipelines isEmpty ifFalse: [lastPipeline := pipelines last. lastPipeline isComplete ifFalse: [sema := Semaphore new. lastPipeline when: #complete send: #signal to: sema. [self evaluatePipelines: pipelines] forkAt: Processor userBackgroundPriority. lastPipeline isComplete ifFalse: [sema wait]. self waitUntilPipesAreEmpty: lastPipeline]]. ^ pipelines ! ! !CommandShell methodsFor: 'event handling' stamp: 'dtl 10/3/2006 07:21'! waitUntilPipesAreEmpty: aPipeline "Some other Smalltalk process may be updating the pipes, or we may be waiting for data in an external OS pipe to be read into the image. Wait for these to reach completion." [aPipeline pipesAreEmpty] whileFalse: [(Delay forMilliseconds: 100) wait] ! ! !CommandShell methodsFor: 'working directory' stamp: 'dtl 1/25/2013 19:07'! workingDirectory ^ self shellSyntax workingDirectory ifNil: [shellSyntax workingDirectory: CommandShell defaultPathString; workingDirectory]! ! !CommandShell methodsFor: 'working directory' stamp: 'dtl 12/16/2001 20:15'! workingDirectory: aPathString self shellSyntax workingDirectory: aPathString ! ! !ShellSyntax commentStamp: 'dtl 9/7/2009 12:36' prior: 102210985! My instances implement parsing of strings in a manner similar to a simple Unix command shell. I provide path name expansion in the context of an external file system, and support the syntax required for IO redirection. All file name globbing and PATH searching are implemented in Smalltalk rather than in C library functions or an external command shell. Most of my syntax is applicable for any operating system. Where needed, platform specific methods are in my "platform dependent" category. Currently, Unix and Windows are supported, and other platforms have not been tested. The primary difference between Unix and Windows support is that device names (such as 'C:') are used in Windows path strings. Separate current working directory strings are maintained for all Windows device names. For Unix, a single current working directory path is used. On Windows, this permits the CommandShell 'cd' command to support changing directories to another device without losing track of the current working directory for the previous device. Command pipeline syntax is not supported here. See CommandShell for the implementation of command pipelines. ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/25/2013 19:12'! appendPath: aPathString toPath: startingPathString "ShellSyntax new appendPath: 'hosts' toPath: '/etc'" "ShellSyntax new appendPath: 'etc' toPath: '/'" "ShellSyntax new appendPath: 'hosts' toPath: '/etc'" "ShellSyntax new appendPath: 'WINDOWS' toPath: 'C:\'" "ShellSyntax new appendPath: 'someFileName' toPath: 'C:\WINDOWS'" | newPath | ^ (aPathString findTokens: CommandShell pathSeparator) inject: startingPathString into: [:dirPath :nextPart | nextPart = '..' ifTrue: [newPath := self upOneDirectoryLevel: dirPath] ifFalse: [nextPart = '.' ifTrue: [newPath := dirPath] ifFalse: [newPath := (self isAtFileSystemRoot: dirPath) ifTrue: [dirPath , nextPart] ifFalse: [dirPath , CommandShell pathSeparator , nextPart]]]. newPath]! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 5/11/2002 20:15'! argsFromCommand: aString "Answer a collection of strings from a whitespace delimited string. Single quote characters protect substrings from expansion to tokens. Single quote characters may be escaped by the backslash character to prevent this interpretation." ^ (self stringTokensFrom: aString) first ! ! !ShellSyntax methodsFor: 'private' stamp: 'dtl 8/7/2002 13:09'! canAccessOSProcess "True if OSProcess is in the image and if the OSProcess plugin is functioning properly" "ShellSyntax new canAccessOSProcess" | osp | ^ (osp := Smalltalk at: #OSProcess ifAbsent: []) notNil and: [osp accessor canAccessSystem] ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 3/10/2001 18:07'! character: aCharacter matches: aToken "Test if aCharacter is included in the characters of aToken, or if aToken is a #matchAny" (aToken == #matchAny) ifTrue: [^ true]. ^ aToken includes: aCharacter! ! !ShellSyntax methodsFor: 'defaults' stamp: 'dtl 9/8/2001 10:15'! commentChar ^ $#! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 1/25/2013 19:23'! containsExpansionTokens: aString "Answer true if aString contains wildcard expansion characters, or if it contains anything that might be construed as a regular expression for globbing, or if it contains path separator characters. If false, the sender may safely skip normal glob expansion on aString." ^ aString includesAnyOf: {$? . $* . $[ . CommandShell pathNameDelimiter} ! ! !ShellSyntax methodsFor: 'accessing' stamp: 'dtl 12/16/2001 20:04'! cwdDictionary "Current working directory paths indexed by device or file system name" ^ cwdDictionary ifNil: [cwdDictionary := Dictionary new] ! ! !ShellSyntax methodsFor: 'accessing' stamp: 'dtl 1/25/2013 19:08'! cwdIndex "Key to current cwd path name in cwdDictionary" ^ cwdIndex ifNil: [cwdIndex := self cwdIndexFor: CommandShell defaultPathString] ! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 12/16/2001 20:06'! cwdIndex: aSymbol "Key to current cwd path name in cwdDictionary" cwdIndex := aSymbol ! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 12/17/2001 09:56'! cwdIndexFor: aPathStringWithPrefix "Answer key to use for aPathStringWithPrefix" | prefix | prefix := (self splitLocationPrefixFromPath: aPathStringWithPrefix) first. ^ prefix isEmpty ifTrue: [#default] ifFalse: [prefix]! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 1/3/2002 19:15'! defaultPathFor: aPathStringWithPrefix "Answer a reasonable path string to use as a default" ^ self pathRoot: aPathStringWithPrefix ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/29/2013 20:29'! doItStringFrom: aCommandString "Answer a string which can be evaluated as Smalltalk doIt, or nil." | s | s := CommandShell withBlanksTrimmed: aCommandString. s last == $!! ifTrue: [^ aCommandString copyUpToLast: $!!] ifFalse: [^ nil]! ! !ShellSyntax methodsFor: 'defaults' stamp: 'dtl 4/28/2002 16:09'! escapeChar "The character to use to escape the normal interpretation of the following character in a string." ^ $\! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/25/2013 19:12'! expandArgument: aString inDirectoryPath: aDefaultFileDirectoryPath "Perform globbing expansion of a command argument. If argument is not a pathname, use aDefaultFileDirectory as the context for globbing. Answer a (possibly empty) collection of all matching paths relative to the default directory path." "ShellSyntax new expandArgument: 'ho?ts' inDirectoryPath: '/etc'" "ShellSyntax new expandArgument: '/b?n/s?' inDirectoryPath: '/etc'" "ShellSyntax new expandArgument: 'fs*' inDirectoryPath: '/etc'" "ShellSyntax new expandArgument: 'NOSUCHFILE' inDirectoryPath: '/etc'" "ShellSyntax new expandArgument: '/us*/b?n/v?' inDirectoryPath: '/etc'" "ShellSyntax new expandArgument: 'b?n/v?' inDirectoryPath: '/usr'" "ShellSyntax new expandArgument: nil inDirectoryPath: '/etc'" | dirPath pathNames newArgs | aString ifNil: [^ Array new: 0]. dirPath := (aDefaultFileDirectoryPath ifNil: [self workingDirectory]) ifNil: [CommandShell defaultPathString]. pathNames := (self containsExpansionTokens: aString) ifTrue: [self expandedPathsFrom: aString beginningAt: dirPath] ifFalse: [OrderedCollection new]. newArgs := pathNames collect: [:p | (aDefaultFileDirectoryPath notNil and: [p beginsWith: aDefaultFileDirectoryPath, CommandShell pathSeparator]) ifTrue: [(ReadStream on: p) next: aDefaultFileDirectoryPath size + CommandShell pathSeparator size; upToEnd] ifFalse: [p]]. newArgs isEmpty ifTrue: [newArgs add: aString]. ^ newArgs ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/25/2013 19:09'! expandArgumentsFrom: argArray inDirectoryPath: aDefaultFileDirectoryPath "Perform globbing expansion of command arguments. For each argument which is not a pathname, use aDefaultFileDirectory as the context for globbing." "ShellSyntax new expandArgumentsFrom: #('-help' '/b?n/s?' 'ho?ts' 'fs*' 'NOSUCHFILE') inDirectoryPath: '/etc'" "ShellSyntax new expandArgumentsFrom: #('this' 'is' 'a' 'test' 'Sq*log' '/us*/b?n/v?') inDirectoryPath: CommandShell defaultPathString" "ShellSyntax new expandArgumentsFrom: #('this' 'is' 'a' 'test' 'Sq*log' '/us*/b?n/v?') inDirectoryPath: nil" | newArgs | newArgs := OrderedCollection new. argArray do: [:arg | (self isFlagParameter: arg) ifTrue: [newArgs add: arg] ifFalse: [newArgs addAll: (self expandArgument: arg inDirectoryPath: aDefaultFileDirectoryPath)]]. ^ newArgs! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/26/2013 15:40'! expandPathParts: pathParts beginningAt: root "Walk directory tree and answer a collection of matching path strings." | firstPart remainder dirPaths names dirNames basePath | (pathParts size == 0) ifTrue: ["Should never get here, but just in case" ^ Array with: root]. firstPart := pathParts first. remainder := pathParts allButFirst. (firstPart = '.') ifTrue: "Stay at the current directory level" [dirPaths := Array with: root] ifFalse: [(firstPart = '..') "Move up a directory level if possible" ifTrue: [dirPaths := Array with: (self upOneDirectoryLevel: root)] ifFalse: "Normal case, a directory name" [remainder isEmpty ifTrue: ["This condition terminates recursion" names := self glob: firstPart inDirectory: root. ^ (root = CommandShell pathSeparator) ifTrue: [^ names collect: [:n | root, n]] ifFalse: [^ names collect: [:n | root, CommandShell pathSeparator, n]]] ifFalse: ["Continue recursion until no more elements" CommandShell directoryNamesInPath: root. dirNames := self glob: firstPart names: (CommandShell directoryNamesInPath: root). (('*', CommandShell pathSeparator) match: root) ifTrue: [basePath := root] ifFalse: [basePath := root, CommandShell pathSeparator]. dirPaths := dirNames collect: [:d | basePath, d]]]]. ^ dirPaths inject: OrderedCollection new into: [:result :dir | result addAll: (self expandPathParts: remainder beginningAt: dir). result] ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 12/28/2002 09:48'! expandedPathsFrom: aPathString beginningAt: firstPartOfPath "Answer a collection of all paths which match aPathString. If aPathString is a relative path, expand the path relative to firstPartOfPath." "ShellSyntax new expandedPathsFrom: '/e*c/h*s' beginningAt: nil" "ShellSyntax new expandedPathsFrom: 'e*c/h*s' beginningAt: '/'" "ShellSyntax new expandedPathsFrom: '/usr/bin/vi' beginningAt: nil" "ShellSyntax new expandedPathsFrom: 'bin/vi' beginningAt: '/usr'" "ShellSyntax new expandedPathsFrom: '/usr/*/vi' beginningAt: nil" "ShellSyntax new expandedPathsFrom: '/usr/bin/../bin/./../bin/../../usr/bin/vi' beginningAt: nil" "ShellSyntax new expandedPathsFrom: '/bin/../bin/./../bin/../../usr/bin/vi' beginningAt: '/usr'" "ShellSyntax new expandedPathsFrom: '/usr/bin/../bin/./../bin/../../../../../usr/bin/vi' beginningAt: nil" "ShellSyntax new expandedPathsFrom: '../../../../../../usr/bin/vi' beginningAt: nil" "ShellSyntax new expandedPathsFrom: '/' beginningAt: '/'" "ShellSyntax new expandedPathsFrom: '*.image' beginningAt: nil" "ShellSyntax new expandedPathsFrom: 'C:\WINDOWS\*.*' beginningAt: nil" "ShellSyntax new expandedPathsFrom: '*.*' beginningAt: 'C:\WINDOWS'" "ShellSyntax new expandedPathsFrom: 'C:\*.*' beginningAt: nil" "ShellSyntax new expandedPathsFrom: 'C:\CONFIG.*' beginningAt: nil" "ShellSyntax new expandedPathsFrom: 'C:\CONFIG.*' beginningAt: '\'" ^ (self isAbsolutePath: aPathString) ifTrue: [self expandedPathsFromAbsolutePath: aPathString] ifFalse: [self expandedPathsFromRelativePath: aPathString beginningAt: firstPartOfPath] ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/25/2013 19:12'! expandedPathsFromAbsolutePath: anAbsolutePathString "Answer a collection of all paths which match anAbsolutePathString." "ShellSyntax new expandedPathsFromAbsolutePath: '/e*c/h*s'" "ShellSyntax new expandedPathsFromAbsolutePath: 'e*c/h*s'" "ShellSyntax new expandedPathsFromAbsolutePath: '/usr/bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: 'bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '/usr/*/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '/usr/bin/../bin/./../bin/../../usr/bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '/bin/../bin/./../bin/../../usr/bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '/usr/bin/../bin/./../bin/../../../../../usr/bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '../../../../../../usr/bin/vi'" "ShellSyntax new expandedPathsFromAbsolutePath: '/'" "ShellSyntax new expandedPathsFromAbsolutePath: '*.image'" "ShellSyntax new expandedPathsFromAbsolutePath: 'C:\WINDOWS\*.*'" "ShellSyntax new expandedPathsFromAbsolutePath: '*.*'" "ShellSyntax new expandedPathsFromAbsolutePath: 'C:\*.*'" "ShellSyntax new expandedPathsFromAbsolutePath: 'C:\CONFIG.*'" "ShellSyntax new expandedPathsFromAbsolutePath: 'C:\CONFIG.*'" | result pathParts a prefix dirPathString root | result := OrderedCollection new. a := self splitLocationPrefixFromPath: anAbsolutePathString. prefix := a at: 1. dirPathString := a at: 2. pathParts := dirPathString findTokens: CommandShell pathSeparator. root := prefix, CommandShell pathSeparator. result addAll: (self expandPathParts: pathParts beginningAt: root). ^ result ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/25/2013 19:12'! expandedPathsFromRelativePath: aPathString beginningAt: firstPartOfPath "Answer a collection of all paths which match aPathString. Expand the path relative to firstPartOfPath." "ShellSyntax new expandedPathsFromRelativePath: 'e*c/h*s' beginningAt: '/'" "ShellSyntax new expandedPathsFromRelativePath: 'usr/b?n/vi' beginningAt: '/'" "ShellSyntax new expandedPathsFromRelativePath: 'bin/vi' beginningAt: '/usr'" "ShellSyntax new expandedPathsFromRelativePath: 'usr/*/vi' beginningAt: nil" "ShellSyntax new expandedPathsFromRelativePath: 'usr/bin/../bin/./../bin/../../usr/bin/vi' beginningAt: '/'" "ShellSyntax new expandedPathsFromRelativePath: 'bin/../bin/./../bin/../../usr/bin/vi' beginningAt: '/usr'" "ShellSyntax new expandedPathsFromRelativePath: '../../../../../../usr/bin/vi' beginningAt: '/'" "ShellSyntax new expandedPathsFromRelativePath: '*.image' beginningAt: nil" "ShellSyntax new expandedPathsFromRelativePath: '*.*' beginningAt: 'C:\WINDOWS'" | result pathParts root | result := OrderedCollection new. pathParts := aPathString findTokens: CommandShell pathSeparator. root := firstPartOfPath isNil ifTrue: [CommandShell defaultPathString] ifFalse: [firstPartOfPath]. result addAll: (self expandPathParts: pathParts beginningAt: root). ^ result ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/27/2013 14:31'! findExecutablePathFor: aString inDirectoryPath: pathString "Look for the executable, following Unix conventions for searching the PATH. If no likely candidate is found, answer nil." "ShellSyntax new findExecutablePathFor: 'bash' inDirectoryPath: nil" "ShellSyntax new findExecutablePathFor: 'ReadMe.txt' inDirectoryPath: nil" "ShellSyntax new findExecutablePathFor: 'SqueakDebug.log' inDirectoryPath: nil" "ShellSyntax new findExecutablePathFor: 'noSuchFileName' inDirectoryPath: nil" "ShellSyntax new findExecutablePathFor: 'a' inDirectoryPath: nil" "ShellSyntax new findExecutablePathFor: 'sqcat' inDirectoryPath: '/home/lewis/bin'" | delimiter path localNames fullName fileExists | self canAccessOSProcess ifFalse: [^ nil]. delimiter := CommandShell pathNameDelimiter. path := (pathString ifNil: [self workingDirectory]) ifNil: [CommandShell defaultPathString]. "Unix compatibility note: If aString contains wildcard characters, it is expanded in the context of the current working directory. Expansion does not take place in the context of the PATH directories." (aString includes: delimiter) ifTrue: ["A fully or partially qualified path, do not search PATH" ^ (self expandedPathsFrom: aString beginningAt: pathString) detect: [:fileName | (CommandShell fileExists: fileName inPath: path) and: [self isExecutable: fileName]] ifNone: [nil]] ifFalse: ["Look for the file in the PATH locations" localNames := self glob: aString inDirectory: path. (localNames size == 0) ifTrue: ["Name was not expanded, so use the unmodified value of aString" localNames := Array with: aString]. (self pathEntriesInDirectoryPath: path) do: [:pathName | localNames do: [:fileName | fileExists := [ CommandShell useFileSystem ifTrue: [ CommandShell fileExists: fileName inDirectory: (pathName perform: #asFileReference) ] ifFalse: [ CommandShell fileExists: fileName inDirectory: ((Smalltalk at: #FileDirectory) on: pathName) ] ] on: InvalidDirectoryError do: [:e | false]. fileExists ifTrue: [fullName := pathName, CommandShell pathSeparator, fileName. (self isExecutable: fullName) ifTrue: [^ fullName]]]]. ^ nil]! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/29/2013 20:27'! firstExpandedArgument: aString inDirectoryPath: aPath "Expand a single argument and answer a fully qualified path to the first matching name. If no match, answer the literal path and file name (which does not exist). If aString is nil, answer an empty string. This method may be used to expand a single argument, such as the target for a command output redirection, where the target is expected to resolve to a single file name." "ShellSyntax new firstExpandedArgument: 'b?*h' inDirectoryPath: '/usr/bin'" "ShellSyntax new firstExpandedArgument: 'b?*h' inDirectoryPath: '/no/such/directory'" "ShellSyntax new firstExpandedArgument: 'no*such*file???' inDirectoryPath: '/usr/bin'" "ShellSyntax new firstExpandedArgument: '/usr/bin/vi' inDirectoryPath: '/usr/bin'" "ShellSyntax new firstExpandedArgument: '../bin/vi' inDirectoryPath: '/usr/bin'" "ShellSyntax new firstExpandedArgument: '../b?n' inDirectoryPath: '/usr/bin'" "ShellSyntax new firstExpandedArgument: nil inDirectoryPath: '/usr/bin'" | expanded path trimmedString | aString ifNil: [^ '']. trimmedString := CommandShell withBlanksTrimmed: aString. expanded := self expandArgument: trimmedString inDirectoryPath: aPath. path := expanded isEmpty ifTrue: [trimmedString] ifFalse: [expanded first]. ^ self newPathFor: path fromDefault: aPath ! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 12/17/2001 09:52'! getCwdForPath: aPathString | prefix | prefix := (self splitLocationPrefixFromPath: aPathString) first. ^ prefix isEmpty ifTrue: [self workingDirectory] ifFalse: [self cwdDictionary at: prefix ifAbsentPut: [self defaultPathFor: aPathString]] ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 10/13/2008 20:02'! glob: aString "Apply Unix shell globbing rules to aString, and answer an array of matching file names." "ShellSyntax new glob: 'ReadMe.txt'" "ShellSyntax new glob: 'rEADmE.TXT'" "ShellSyntax new glob: 'R*dM?.txt'" ^ self glob: aString inDirectory: self workingDirectory ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 1/26/2013 14:03'! glob: aString inDirectory: directoryPath "Apply Unix shell globbing rules to aString, and answer an array of matching file names." "ShellSyntax new glob: 'ReadMe.txt' inDirectory: FileDirectory default pathName" "ShellSyntax new glob: 'SqueakDebug.log' inDirectory: FileDirectory default pathName" "ShellSyntax new glob: '?queak*.[0-9].log' inDirectory: FileDirectory default pathName" "ShellSyntax new glob: '*image*' inDirectory: FileDirectory default pathName" "ShellSyntax new glob: 'noSuchFileName' inDirectory: FileDirectory default pathName" "ShellSyntax new glob: 'b?n' inDirectory: '/usr'" [^ self glob: aString names: (CommandShell directoryEntryNames: directoryPath)] on: Error do: [:ex | ^ #()] ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 3/11/2001 17:37'! glob: aString names: fileNameArray "Apply Unix shell globbing rules to aString with respect to the elements of fileNameArray, and answer an array of matching file names. The fileNameArray is expected to have been provided by a FileDirectory query." | tokens | tokens := self globTokensFrom: aString. ^ fileNameArray select: [:n | self tokenStream: (ReadStream on: tokens) matches: (ReadStream on: n)] ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 2/24/2013 10:25'! globRangeFrom: aString tokenStream: aTokenStream "Answer a string containing the characters specified by a range expression such as [a-z]. Sorry, this is just a simple implementation which assumes ASCII." | r w c t | (aString includes: $-) ifFalse: [^ aString]. "Simple case" r := ReadStream on: aString. w := WriteStream on: String new. (r peek == $!!) ifTrue: [r next. aTokenStream nextPut: #not]. [r atEnd] whileFalse: [ c := r next. (r peek == $-) ifTrue: [r next. t := r next. (c asciiValue to: t asciiValue) do: [:e | w nextPut: (Character value: e)]] ifFalse: [w nextPut: c]]. ^ w contents! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 12/17/2001 11:41'! globTokensFrom: aString "Answer a collection of tokens to be used for glob matching." "ShellSyntax new globTokensFrom: 'abc?def\ghi\?jkl*mno\*pqr[hello]there[Xa-eY]Z[!!A-Z]end'" | lastToken r w t | lastToken := nil. r := ReadStream on: aString. w := WriteStream on: #(). [r atEnd] whileFalse: [t := self nextGlobToken: r lastToken: lastToken tokenStream: w. (t ~~ #escape) ifTrue: [w nextPut: t]. lastToken := t]. ^ w contents ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:12'! isAbsolutePath: aPathString "Answer true if aPathString is specified relative to the root of the file system." "ShellSyntax new isAbsolutePath: 'not/absolute/path'" "ShellSyntax new isAbsolutePath: '/absolute/path'" "ShellSyntax new isAbsolutePath: '/'" "ShellSyntax new isAbsolutePath: 'C:\'" "ShellSyntax new isAbsolutePath: '\'" "ShellSyntax new isAbsolutePath: 'C:'" "ShellSyntax new isAbsolutePath: 'C:WINDOWS'" "ShellSyntax new isAbsolutePath: 'C:\WINDOWS'" | prefixAndPath path | ^ ((((CommandShell pathSeparator, '*') match: aPathString) or: [prefixAndPath := self splitLocationPrefixFromPath: aPathString. (CommandShell pathSeparator, '*') match: (path := prefixAndPath last)]) or: [prefixAndPath first isEmpty not and: [path isEmpty]]) "One above the root of a Win32 file system tree" ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:12'! isAtFileSystemRoot: aPathString "Answer true if aPathString is not a subdirectory." "ShellSyntax new isAtFileSystemRoot: 'D:\'" "ShellSyntax new isAtFileSystemRoot: 'D:'" "ShellSyntax new isAtFileSystemRoot: 'D:\Windows'" "ShellSyntax new isAtFileSystemRoot: '\'" ^ (CommandShell pathSeparator = (self splitLocationPrefixFromPath: aPathString) last) or: [aPathString isEmpty] ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/21/2007 14:07'! isComment: aString "Answer true if aString is empty or if its first non-space character is commentChar" ^ (aString size == 0) or: [aString do: [:e | (e isSeparator not) ifTrue: [^ e == self commentChar]]. false]! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/28/2013 00:03'! isDirectoryPath: aPathString | fullPath localName entry | ^ (('*', CommandShell pathSeparator) match: aPathString) or: [fullPath := CommandShell fullNameFor: aPathString. localName := CommandShell localNameFor: fullPath. [entry := CommandShell useFileSystem ifTrue: [entry := ((CommandShell dirPathFor: fullPath) perform: #asFileReference) entries detect: [:e | e basename = localName] ifNone: [nil]] ifFalse: [entry := ((Smalltalk at: #FileDirectory) on: (CommandShell dirPathFor: fullPath)) entries detect: [:e | e name = localName] ifNone: [nil]]] on: Error do: [: ex | ^false]. entry notNil and: [entry isDirectory]] ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/29/2013 20:29'! isDoItCommand: aCommandString "Answer true if aCommandString should be evaluated as Smalltalk doIt." ^ (CommandShell withBlanksTrimmed: aCommandString) last == $!!! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 8/7/2002 13:36'! isExecutable: aPath "Answer true if aPath points to an executable file. This could be enhanced to support setting UID and GID for a CommandShell session. For now, just take the default for the current Squeak process." ^ aPath notNil and: [(Smalltalk at: #OSProcess ifPresent: [:osp | osp accessor isExecutable: aPath]) ifNil: [false]]! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/21/2007 14:12'! isFlagParameter: aString "Answer true if aString begins with $- (the convention for command flags for Unix)" ^ (aString size > 0) and: [(aString at: 1) == $-]! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 9/4/2013 08:35'! isPharo3AndLater "True if this image is a pharo of major version 3 or greater" Smalltalk at: #SystemVersion ifPresent: [:cls | ((cls canUnderstand: #type) and: [ cls canUnderstand: #major ]) ifTrue: [^ cls current type = 'Pharo' and: [ cls current major >= 3 ]]]. ^false ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 4/20/2003 11:31'! newDirPath: aPath from: initialPath "Answer a path string for a change directory command. Change from initialPath (usually the current working directory) to the new path, where aPath may be either an absolute path name (fully specified from the root) or a relative path name (relative to initialPath)." "self new newDirPath: 'b?n' from: '/usr'" "self new newDirPath: '..' from: '/usr/bin'" "self new newDirPath: '.././bin' from: '/usr/bin'" "self new newDirPath: '../../../../..' from: '/usr/bin'" "self new newDirPath: '../../../../../usr' from: '/usr/bin'" ^ (self expandedPathsFrom: aPath beginningAt: initialPath) at: 1 ifAbsent: [nil] ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/2/2002 22:09'! newPathFor: aPathString fromDefault: startingPathString "Answer a new path starting from startingPathString if aPathString is a, relative path, otherwise just answer aPathString unmodified." "ShellSyntax new newPathFor: 'hosts' fromDefault: '/etc'" "ShellSyntax new newPathFor: 'three' fromDefault: 'one/two'" "ShellSyntax new newPathFor: 'one/two/three' fromDefault: ''" "ShellSyntax new newPathFor: '/hosts' fromDefault: '/etc'" "ShellSyntax new newPathFor: 'WINDOWS' fromDefault: 'C:\'" "ShellSyntax new newPathFor: 'D:\WINDOWS' fromDefault: 'C:\'" "ShellSyntax new newPathFor: 'D:WINDOWS' fromDefault: 'C:\'" ^ (self isAbsolutePath: aPathString) ifTrue: [aPathString] ifFalse: [self appendPath: (self splitLocationPrefixFromPath: aPathString) last toPath: startingPathString] ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 12/15/2001 09:55'! nextGlobToken: aStream lastToken: aToken tokenStream: aTokenStream "Escape character processing probably belongs elsewhere. Since it can conflict with Win32 file name conventions, I have commented it out here. The code is otherwise left alone here in case I change my mind later. -dtl" | c | (aToken == #escape) ifTrue: [^ aStream next] ifFalse: [c := aStream next. (c == $[) ifTrue: ["character range" ^ self globRangeFrom: (aStream upTo: $]) tokenStream: aTokenStream] ifFalse: [(c == $*) ifTrue: [^ #matchRun]. (c == $?) ifTrue: [^ #matchAny]. "(c == $\) ifTrue: [^ #escape]. Escape processing disabled here" ^ c asString]]! ! !ShellSyntax methodsFor: 'defaults' stamp: 'dtl 1/20/2007 14:11'! noWaitToken "This character at the end of a command string means execute as detached process." ^ '&'! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 4/20/2003 11:50'! nullDirectoryString "String to display when the current directory is one level above the file system root." ^ '[]'! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:13'! pathAboveRoot "Answer a path pointing to a location above the file system root. The pathStringAboveRoot string refers to this location." "ShellSyntax new pathAboveRoot" ^ (self platformName = 'Win32') ifTrue: [''] ifFalse: [CommandShell pathSeparator]. ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:09'! pathEntriesInDirectoryPath: basePath "Answer a possibly empty collection of path entries from a colon-delimited path string provided by the operating system. Relative path names are interpreted relative to basePath" "ShellSyntax new pathEntriesInDirectoryPath: CommandShell defaultPathString" ^ (Smalltalk at: #OSProcess ifPresent: [:osp | (osp thisOSProcess path findTokens: ':') collect: [:e | self newPathFor: e fromDefault: basePath]]) ifNil: [Array new]. ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:13'! pathRoot: aPathString "For aPathString pointing to a file in a file system, answer the root of the file system. This method works fine for Unix and Windows, but may require conditional code for other platforms." | prefix | prefix := (self splitLocationPrefixFromPath: aPathString) first. ^ prefix, CommandShell pathSeparator ! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 1/4/2002 21:19'! pathStringAboveRoot "Magic string indicating location above the file system root. For Unix, this just points to the file system root. For Windows, it points to one level above the C: drive." ^ '[]'! ! !ShellSyntax methodsFor: 'defaults' stamp: 'dtl 9/8/2001 10:16'! pipeCharToken "The command pipeline character" ^ '|'! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 9/4/2013 08:34'! platformName "After Squeak version 3.6, #platformName was moved to SmalltalkImage Some versions of Pharo move this to OSPlatform and issue deprecation warnings about the other usages." "self new platformName" self isPharo3AndLater ifTrue: [ ^ (Smalltalk perform: #os) name ]. ^ (((Smalltalk hasClassNamed: #OSPlatform) and: [(Smalltalk at: #OSPlatform) respondsTo: #platformName]) ifTrue: [Smalltalk at: #OSPlatform] ifFalse: [((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk osVersion]) current]) platformName! ! !ShellSyntax methodsFor: 'path name expansion' stamp: 'dtl 10/13/2008 06:26'! programNameAndArgumentsFrom: aString inDirectoryPath: pathString findExecutable: expandExePath "Answer an array with the name of the program to run, and with the expanded arguments list. If expandExePath is true, search the file system for an executable program to run, otherwise use the literal command name." "ShellSyntax new programNameAndArgumentsFrom: 'sleep 6' inDirectoryPath: '/etc' findExecutable: true" "ShellSyntax new programNameAndArgumentsFrom: 'sleep 6' inDirectoryPath: '/etc' findExecutable: false" "ShellSyntax new programNameAndArgumentsFrom: 'ls -l h?s*' inDirectoryPath: '/etc' findExecutable: true" | tokens tok args exe | tokens := self argsFromCommand: aString. tokens size == 0 ifTrue: [tok := ''] ifFalse: [tok := tokens at: 1]. args := self expandArgumentsFrom: (tokens copyFrom: 2 to: tokens size) inDirectoryPath: pathString. exe := expandExePath ifTrue: [self findExecutablePathFor: tok inDirectoryPath: pathString] ifFalse: [tok]. ^ exe ifNotNil: [Array with: exe with: args] ! ! !ShellSyntax methodsFor: 'defaults' stamp: 'dtl 4/27/2002 18:57'! quoteChar "In a Unix shell, this character is used to delimit chunks of text which should not be expanded with wildcards or shell variables. In a Smalltalk compiler, this character delimits a String. ShellSyntax interprets it as a delimiter for a literal string which should not be expanded or interpreted in any way." ^ $'! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 12/22/2007 10:17'! redirectIOFor: commandString inDirectoryPath: dirPathString "Handle IO redirection. Answer a four element array with the command string (with IO tokens removed); and stdin, stdout and stderr if specified for redirection." "ShellSyntax new redirectIOFor: 'ls /tmp /NOSUCHFILE > /tmp/sqTempOut.tmp 2> /tmp/sqTempErr.tmp' inDirectoryPath: nil" "ShellSyntax new redirectIOFor: 'cat < /etc/hosts > /tmp/sqHosts.tmp' inDirectoryPath: nil" | cmd tokenStream tok target input output error | cmd := nil. input := output := error := nil. "Default to nil unless overridden by commandString." tokenStream := ReadStream on: (self tokenizeForRedirect: commandString). [tokenStream atEnd] whileFalse: [tok := tokenStream next. tok == #inputRedirect ifTrue: ["Do input redirection" target := self firstExpandedArgument: tokenStream next inDirectoryPath: dirPathString. "Use StandardFileStream to prevent multi-byte interpretation." input := StandardFileStream readOnlyFileNamed: target. input ifNil: [self inform: 'Cannot open ' , target , ', using default stdin']] ifFalse: [tok == #outputRedirect ifTrue: ["Do output redirection" target := self firstExpandedArgument: tokenStream next inDirectoryPath: dirPathString. output := self truncatedOutputFile: target. output ifNil: [self inform: 'Cannot open ' , target , ', using default stdout']] ifFalse: [tok == #outputAppendRedirect ifTrue: ["Do output redirection, appended to existing output file if any." target := self firstExpandedArgument: tokenStream next inDirectoryPath: dirPathString. output := FileStream fileNamed: target. output isNil ifTrue: [self inform: 'Cannot open ' , target , ', using default stdout'] ifFalse: [output setToEnd]] ifFalse: [tok == #errorRedirect ifTrue: ["Do error redirection" target := self firstExpandedArgument: tokenStream next inDirectoryPath: dirPathString. error := self truncatedOutputFile: target. error ifNil: [self inform: 'Cannot open ' , target , ', using default stdout']] ifFalse: [tok == #errorAppendRedirect ifTrue: ["Do error redirection, appended to existing error file if any. " target := self firstExpandedArgument: tokenStream next inDirectoryPath: dirPathString. error := FileStream fileNamed: target. error isNil ifTrue: [self inform: 'Cannot open ' , target , ', using default stdout'] ifFalse: [error setToEnd]] ifFalse: [cmd isNil ifTrue: [cmd := tok] ifFalse: [self inform: 'Ack!! Pfft!! IO redirection parsing error.']]]]]]]. ^ Array with: cmd with: input with: output with: error! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 12/16/2001 21:26'! setCwdIndexFrom: aPathString "Set the current working directory index to a string (Win32 device name) or to #default." | prefix | prefix := (self splitLocationPrefixFromPath: aPathString) first. prefix isEmpty ifTrue: [self cwdIndex: #default] ifFalse: [self cwdIndex: prefix] ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 10/30/2007 18:59'! splitLocationPrefixFromPath: aPathString "Split any leading prefix from a path string, such as the C: device name for Win32. Answer an Array with prefix and path." "ShellSyntax new splitLocationPrefixFromPath: 'C:\u'" "ShellSyntax new splitLocationPrefixFromPath: 'C:\'" "ShellSyntax new splitLocationPrefixFromPath: 'C:'" "ShellSyntax new splitLocationPrefixFromPath: 'C:u'" "ShellSyntax new splitLocationPrefixFromPath: 'c:u'" "ShellSyntax new splitLocationPrefixFromPath: '\u'" | prefix path | (self platformName = 'Win32') ifTrue: [((aPathString at: 2 ifAbsent: []) == $:) ifTrue: [prefix := (String new: 2). prefix at: 1 put: (aPathString at: 1) asUppercase. prefix at: 2 put: $:. path := aPathString copyAfter: $:] ifFalse: [prefix := ''. path := aPathString]] ifFalse: [prefix := ''. path := aPathString]. ^ Array with: prefix with: path ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/29/2013 20:27'! splitPipelineCommands: aCommand "Answer a list of the individual commands in a command pipeline string, delimited by the pipe character." ^ (aCommand findTokens: self pipeCharToken) collect: [:e | CommandShell withBlanksTrimmed: e] ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 1/21/2007 15:11'! stringTokensFrom: aString "Answer a two element array with a collection of strings from a whitespace delimited string, and with an optional error message. Single quote characters protect substrings from expansion to tokens. Single quote characters may be escaped by the backslash character to prevent this interpretation." | result r w errorMessage quoteEnabled t | result := OrderedCollection new. r := ReadStream on: aString. w := WriteStream on: String new. errorMessage := nil. (quoteEnabled := r peek == self quoteChar) ifTrue: [r next]. [r atEnd] whileFalse: [t := r next. (t == self quoteChar) ifTrue: [quoteEnabled := quoteEnabled not] ifFalse: [quoteEnabled ifTrue: [w nextPut: t] ifFalse: [(t == self escapeChar) ifTrue: ["An escaped character is treated as a literal character." t := r next. t isNil ifTrue: ["FIXME: This would indicate an escaped end of line"] ifFalse: [w nextPut: t]] ifFalse: [t isSeparator ifTrue: ["Whitespace delimits tokens." (w isEmpty) ifFalse: [result add: w contents]. w := WriteStream on: String new. [r peek notNil and: [r peek isSeparator]] whileTrue: [r next].] ifFalse: [w nextPut: t]]]]]. quoteEnabled ifTrue: [errorMessage := 'unbalanced quotes']. (w isEmpty) ifFalse: [result add: w contents]. ^ Array with: result with: errorMessage ! ! !ShellSyntax methodsFor: 'globbing' stamp: 'dtl 1/5/2002 09:52'! tokenStream: aTokenStream matches: aCharacterStream "Iterate over both streams. If each character in aCharacterStream matches its corresponding token in tokenStream, answer true." "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'a?c')) matches: (ReadStream on: 'abc')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'ab*cde')) matches: (ReadStream on: 'abcde')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'ab*cde')) matches: (ReadStream on: 'abXXXcde')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'ab*cdX')) matches: (ReadStream on: 'abXXXcde')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'abc*')) matches: (ReadStream on: 'abcde')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'abc*')) matches: (ReadStream on: 'abc')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'a?cde*jkl')) matches: (ReadStream on: 'abcdefghijkl')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'abc[A-C]xyz')) matches: (ReadStream on: 'abcBxyz')" "ShellSyntax new tokenStream: (ReadStream on: (ShellSyntax new globTokensFrom: 'abc[!!A-C]xyz')) matches: (ReadStream on: 'abcZxyz')" | c tok | [aCharacterStream atEnd] whileFalse: [aTokenStream atEnd ifTrue: [^ false]. c := aCharacterStream peek. tok := aTokenStream next. tok == #not ifTrue: ["A negated character range follows" tok := aTokenStream next. (self character: c matches: tok) ifTrue: [^ false]. aCharacterStream next] ifFalse: ["The normal case" tok == #matchRun ifTrue: ["Skip characters until we resync the streams, or answer false" [self tokenStream: aTokenStream copy matches: aCharacterStream copy] whileFalse: [aCharacterStream atEnd ifTrue: [^ false]. aCharacterStream next]] ifFalse: [(self character: c matches: tok) ifFalse: [^ false]. aCharacterStream next]]]. ^ aTokenStream atEnd or: [aTokenStream next == #matchRun and: [aTokenStream atEnd]] ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 2/24/2013 10:25'! tokenizeForRedirect: aString "Answer a collection of tokens for IO redirection. Answers a collection of tokens, where each token is either a String, or a Symbol in: #(#inputRedirect #outputRedirect #outputAppendRedirect #errorRedirect #errorAppendRedirect)" "ShellSyntax new tokenizeForRedirect: 'one > two < three 2> four five six 2>> seven eight > nine ten >> eleven twelve 2 > thirteen'" | oc rs ws c redirectToken tok | oc := OrderedCollection new. rs := ReadStream on: aString. ws := WriteStream on: String new. [rs atEnd] whileFalse: [c := rs next. ((c == $2) and: [rs peek == $>]) ifTrue: [rs next. (rs peek == $>) ifTrue: [rs next. redirectToken := #errorAppendRedirect] ifFalse: [redirectToken := #errorRedirect]. c := ws contents. (c size > 0) ifTrue: [oc add: c. ws resetContents]. oc add: redirectToken] ifFalse: [(c == $>) ifTrue: [(rs peek == $>) ifTrue: [rs next. redirectToken := #outputAppendRedirect] ifFalse: [redirectToken := #outputRedirect]. c := ws contents. (c size > 0) ifTrue: [oc add: c. ws resetContents]. oc add: redirectToken] ifFalse: [(c == $<) ifTrue: [c := ws contents. (c size > 0) ifTrue: [oc add: c. ws resetContents]. oc add: #inputRedirect] ifFalse: [ws nextPut: c]]]]. tok := ws contents. (tok size > 0) ifTrue: [oc add: tok]. ^ oc ! ! !ShellSyntax methodsFor: 'command string parsing' stamp: 'dtl 12/17/2001 11:39'! truncatedOutputFile: fileName "Attempt to do reasonable things to open a file of size zero. Better would be to implement a file truncation primitive." "ShellSyntax new truncatedOutputFile: '/tmp/delete.me'" "ShellSyntax new truncatedOutputFile: '/dev/null'" | strm | [strm := FileStream concreteStream forceNewFileNamed: fileName] on: Error do: [:ex | ^ FileStream fileNamed: fileName]. ^ strm ! ! !ShellSyntax methodsFor: 'platform dependent' stamp: 'dtl 1/25/2013 19:23'! upOneDirectoryLevel: aPathName "Answer a path name for a directory one level up the directory tree" "ShellSyntax new upOneDirectoryLevel: 'C:\Windows\temp'" "ShellSyntax new upOneDirectoryLevel: 'C:\Windows'" "ShellSyntax new upOneDirectoryLevel: 'C:\'" "ShellSyntax new upOneDirectoryLevel: ''" "ShellSyntax new upOneDirectoryLevel: '/usr/bin'" "ShellSyntax new upOneDirectoryLevel: '/usr'" "ShellSyntax new upOneDirectoryLevel: '/'" "ShellSyntax new upOneDirectoryLevel: 'usr'" "ShellSyntax new upOneDirectoryLevel: ''" | prefixAndPath prefix path newPath | prefixAndPath := self splitLocationPrefixFromPath: aPathName. prefix := prefixAndPath at: 1. path := prefixAndPath at: 2. (self isAtFileSystemRoot: aPathName) ifTrue: [(self isAbsolutePath: aPathName) ifTrue: [prefix isEmpty ifTrue: "Normal case, unix. Do not go up a level." [^ aPathName] ifFalse: "A Win32 device name, go up a level above the file systems" [^ '']] ifFalse: ["One level above whererever we are. Unfortunately we have no way to know where we are, so this probably should be treated as a sytax error." ^ '..']] ifFalse: [newPath := (path includes: CommandShell pathNameDelimiter) ifTrue: [path copyUpToLast: CommandShell pathNameDelimiter] ifFalse: ['']. ^ newPath isEmpty ifTrue: [(self isAbsolutePath: aPathName) ifTrue: [prefix, CommandShell pathSeparator] ifFalse: [prefix]] ifFalse: [prefix, newPath]] ! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 8/7/2002 13:32'! workingDirectory ^ self cwdDictionary at: self cwdIndex ifAbsentPut: [Smalltalk at: #OSProcess ifPresent: [:osp | osp thisOSProcess getCwd]] ! ! !ShellSyntax methodsFor: 'working directory' stamp: 'dtl 12/16/2001 21:32'! workingDirectory: aPathString self setCwdIndexFrom: aPathString. self cwdDictionary at: self cwdIndex put: aPathString! ! "CommandShell-Base"! !TtyTextMorphForEditView commentStamp: '' prior: 0! I add a keyboard hook to a TextMorphForEditView to allow filtering of keystrokes for a simple tty terminal emulator.! !ShellWindowMorph commentStamp: '' prior: 0! I am a simple teletype shell session morph, providing a view on an instance of CommandShell.! !TtyTextMorphForEditView commentStamp: '' prior: 102339867! I add a keyboard hook to a TextMorphForEditView to allow filtering of keystrokes for a simple tty terminal emulator.! !TtyTextMorphForEditView methodsFor: 'editing' stamp: 'dtl 11/2/2007 05:18'! keyStroke: evt (self editView model filterAndForwardEvent: evt) ifNotNil: [^ super keyStroke: evt] ! ! !ShellWindowMorph commentStamp: '' prior: 102340042! I am a simple teletype shell session morph, providing a view on an instance of CommandShell.! !ShellWindowMorph class methodsFor: 'instance creation' stamp: 'dtl 1/21/2007 09:57'! open "Open a new CommandShell, and answer the instance of ShellWindowMorph which it uses." "ShellWindowMorph open" ^ CommandShell open dependents at: 2! ! !ShellWindowMorph methodsFor: 'menu commands' stamp: 'dtl 9/15/2012 18:59'! accept self model cr; flush; processCommand: self commandLineInput asString echo: false ! ! !ShellWindowMorph methodsFor: 'updating' stamp: 'dtl 1/21/2007 13:02'! appendEntry | str | "Append the text in the model's writeStream to the editable text. " textMorph asText size > model characterLimit ifTrue: ["Knock off first half of text" self selectInvisiblyFrom: 1 to: textMorph asText size // 2. self replaceSelectionWith: Text new]. self selectInvisiblyFrom: textMorph asText size + 1 to: textMorph asText size. str := model contents. (str size > 0) ifTrue: [self replaceSelectionWith: (Text string: str attribute: (TextFontChange fontNumber: self textStyle defaultFontIndex)). self selectInvisiblyFrom: textMorph asText size + 1 to: textMorph asText size. model reset] ! ! !ShellWindowMorph methodsFor: 'command input' stamp: 'dtl 3/18/2001 18:17'! commandLineInput ^ (self text copyFrom: self positionAfterPromptString to: self text size) asString. ! ! !ShellWindowMorph methodsFor: 'command input' stamp: 'dtl 4/7/2001 12:21'! positionAfterPromptString "Answer the index of the first character after the last prompt string in my text. If not found, then assume that the contents of the text are all intended to be command input." | t loc | t := self text. (1 to: (t size - model promptString size)) reverseDo: [:i | ((loc := t findString: model promptString startingAt: i) ~= 0) ifTrue: [^ loc + model promptString size]]. ^ 1 ! ! !ShellWindowMorph methodsFor: 'model access' stamp: 'dtl 1/21/2007 10:33'! setText: aText scrollBar setValue: 0.0. textMorph ifNil: [textMorph := TtyTextMorphForEditView new contents: aText wrappedTo: self innerBounds width-6. textMorph setEditView: self. textMorph setTextStyle: self textStyle. scroller addMorph: textMorph] ifNotNil: [textMorph newContents: aText]. self hasUnacceptedEdits: false. self setScrollDeltas.! ! !ShellWindowMorph methodsFor: 'model access' stamp: 'dtl 11/18/2009 22:20'! textStyle "A fixed width font for the text morph" ^ (TextStyle named: 'DefaultFixedTextStyle') ifNil: [TextStyle default]! ! !ShellWindowMorph methodsFor: 'updating' stamp: 'dtl 6/3/2001 19:02'! update: something (something == #doCommand) ifTrue: [^ self accept]. (something == #exit) ifTrue: [^ self owner release; delete]. ^ super update: something ! ! "CommandShell-Morphic"! !ProxyPipeline commentStamp: 'dtl 12/13/2002 19:30' prior: 0! A collection of connected PipeJunctions, representing external OS processes or internal evaluators. This class exists primarily to make the functioning of a collection of command pipelines, some of which may be evaluated as asynchronous "background" processes, easier to understand. Events triggered by my proxies are handled and forwarded in such a way that a client (such as a CommandShell) will receive events from a ProxyPipeline as if it were an individual PipeJunction. The user of a ProxyPipeline is responsible for closing the external resources associated with the proxies by sending either #closePipes or #finalize.! !InternalPipe commentStamp: '' prior: 0! I am a first-in, first-out queue with streaming behavior. I behave similarly to an OSPipe, but am implemented in the Smalltalk image rather than with external OS pipes. I can behave either as a blocking pipe or as a nonblocking pipe, similar to an OS pipe with its reader end set in blocking or nonblocking mode.! !PipeJunction commentStamp: '' prior: 0! I am a connector junction for input, output, and error pipelines. I obtain input from an input pipeline and, after possibly performing some kind of operation on the input objects, I send output to an output pipeline. I may also append objects onto an error pipeline. My subclasses implement the operations on the objects which pass through a pipe junction. In general, input pipes are connected to output pipes in a serial fashion, and error pipelines are shared by one or more instances of my subclasses. ! !PipeableEvaluator commentStamp: 'dtl 2/1/2003 16:56' prior: 0! I evaluate Smalltalk expressions, taking input from my pipeToInput, and print the results of the evaluation on my pipeFromOutput. I may append error messages to my errorPipelineStream. I provide a framework for pipelines of expressions, possibly combined in the same pipeline with ExternalOSProcess proxies executing external operating system commands. My evaluationBlock may be supplied directly, or can be compiled from an expression string. If compiled from an expression string, the names 'stdin', 'stdout', 'stderr', and 'args' are used to refer to the input stream, output stream, error stream, and an array of arguments. If any of these names are used in the expression string, then the evaluation block will be compiled in such as way as to connect these names with their corresponding streams or argument array. ! !ExpressionEvaluator commentStamp: 'dtl 2/1/2003 16:58' prior: 0! I provide a context in which a Smalltalk expression can be evaluated as an element of a command pipeline.! !ShellBuiltinEvaluator commentStamp: 'dtl 2/1/2003 17:47' prior: 0! I provide the context in which a ShellBuiltin is evaluated as an element of a command pipeline.! !PipeableOSProcess commentStamp: '' prior: 0! I am a connector junction for input, output, and error pipelines. I collaborate with a process proxy to evaluate an internal or external process, and to move objects through the pipelines as the proxy is evaluated. From Smalltalk, you can write to my pipeToInput, and read from my pipeFromOutput and pipeFromError streams. I implement simple streaming protocol as a convenience for reading and writing these pipe streams. I support command pipelines with the #| message, with the pipeFromOutput of one instance connected to the pipeToInput of the next instance, and a shared errorPipelineStream collecting error output text for the command pipeline. All reading and writing should be done with the streaming protocol, rather than by direct access to the pipe streams. This is because the output pipe streams may be silently replaced by simple ReadStreams following the exit of the child process. Normal exit for the external process may not happen when expected. If the process is writing to the output pipe, it may block on write until enough of its data is read from the pipeFromOutput pipe, after which it will exit normally.! !RemoteTask commentStamp: 'dtl 11/12/2011 23:26' prior: 0! RemoteTask do: [2 + 2] A RemoteTask represents a block to be evaluated in a headless Squeak child process. The results of evaluating the block are returned to the sender through a reference stream on an OS pipe. Asynchronous event notification may be used to signal completion of remote processing. The block is evaluated in a remote headless image beginning with a clone of the sender image at the time of the message send. All side effects of evaluating the task block are localized to the remote image, and have no effect on the sending image. The result object may be an object of any complexity, such as a dictionary or array of result values. On a unix system, the creation of child Squeak images is a relatively light weight operation, so tasks of varying degrees of complexity can be assigned to remote tasks with only moderate overhead. ! !ProxyPipeline commentStamp: 'dtl 12/13/2002 19:30' prior: 102343462! A collection of connected PipeJunctions, representing external OS processes or internal evaluators. This class exists primarily to make the functioning of a collection of command pipelines, some of which may be evaluated as asynchronous "background" processes, easier to understand. Events triggered by my proxies are handled and forwarded in such a way that a client (such as a CommandShell) will receive events from a ProxyPipeline as if it were an individual PipeJunction. The user of a ProxyPipeline is responsible for closing the external resources associated with the proxies by sending either #closePipes or #finalize.! !ProxyPipeline class methodsFor: 'command processing' stamp: 'dtl 1/24/2013 08:39'! command: aCommandString "Evaluate a new instance created from aCommandString. Sender is responsible for closing the pipes with #closePipes or #finalize." "ProxyPipeline command: 'ls | cat | wc'" "ProxyPipeline command: 'ls NOSUCHFILE * | cat | wc'" "ProxyPipeline command: 'ls | copyToOutput | wc'" "ProxyPipeline command: ''" Smalltalk at: #CommandShell ifPresent: [ :cls | ^ self command: aCommandString shell: cls new ]. self notify: 'CommandShell not found' ! ! !ProxyPipeline class methodsFor: 'command processing' stamp: 'dtl 4/27/2003 11:32'! command: aCommandString shell: aCommandShell "Evaluate a new instance created from aCommandString using aCommandShell. Sender is responsible for closing the pipes #closePipes or #finalize." "ProxyPipeline command: 'ls | cat | wc' shell: CommandShell new" "ProxyPipeline command: 'ls NOSUCHFILE * | cat | wc' shell: CommandShell new" "ProxyPipeline command: 'ls | copyToOutput | wc' shell: CommandShell new " "ProxyPipeline command: '' shell: CommandShell new" ^ (self fromString: aCommandString shell: aCommandShell) value ! ! !ProxyPipeline class methodsFor: 'instance creation' stamp: 'dtl 6/8/2006 06:57'! fromString: aCommandString shell: aCommandShell "Answer a new instance created from aCommandString using aCommandShell." "ProxyPipeline fromString: 'ls | cat | wc' shell: CommandShell new" "ProxyPipeline fromString: 'ls NOSUCHFILE * | cat | wc' shell: CommandShell new" "ProxyPipeline fromString: 'ls | copyToOutput | wc' shell: CommandShell new " "ProxyPipeline fromString: '' shell: CommandShell new" ^ super new fromString: aCommandString shell: aCommandShell ! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 3/29/2003 13:49'! atEnd ^ self last atEnd ! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:42'! background "Answer true if this pipeline should be evaluated in the background." ^ background ifNil: [background := false]! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:42'! background: trueOrFalse background := trueOrFalse! ! !ProxyPipeline methodsFor: 'initialize - release' stamp: 'dtl 12/31/2002 10:57'! close "Close input pipe to first proxy in the pipeline. The proxies are not finalized, this simply closes the input stream to allow normal processing to proceed to completion." self isEmpty ifFalse: [self first close] ! ! !ProxyPipeline methodsFor: 'initialize - release' stamp: 'dtl 9/3/2010 17:37'! closePipes | p | self do: [:e | e closePipes]. self unregisterEvents. (p := self pipeFromOutput) ifNotNil: [p close] ! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/20/2002 19:20'! commandLine "Command line string from which this pipeline was constructed" ^ commandLine! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:42'! commandLine: aString "Command line string from which this pipeline was constructed" commandLine := aString! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/20/2006 13:28'! completionSemaphore "Answer the value of completionSemaphore. This semaphore is signaled when the last proxy completes. Subsequent cleanup is preformed by a process waiting on the semaphore. Completion notification is often triggered by the grimReaperProcess, so the separate pipeline cleanup prevents those activities from being processed in the context of the grimReaperProcess." ^ completionSemaphore ifNil: [completionSemaphore := Semaphore new]! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/20/2006 13:21'! completionWatcher "A process that waits for notification that the last proxy has completed, and performs any necessary cleanup. Completion notification is often triggered by the grimReaperProcess, so the separate pipeline cleanup prevents those activities from being processed in the context of the grimReaperProcess." ^ completionWatcher! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:42'! completionWatcher: anObject "Set the value of completionWatcher" completionWatcher := anObject! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 4/28/2003 21:02'! errorPipelineStream "Accumulates the error output of commands in a command pipeline." self isEmpty ifTrue: [^ nil] ifFalse: [^ self last errorPipelineStream]! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:10'! errorUpToEnd "Answer all available characters from the error stream shared by my proxies." ^ self last errorUpToEnd ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 8/25/2006 12:22'! errorUpToEndOfFile "Answer all available characters from the error stream. Block and continue reading until end of file is detected." ^ self last errorUpToEndOfFile ! ! !ProxyPipeline methodsFor: 'finalization' stamp: 'dtl 4/9/2006 09:43'! finalize self closePipes. ^ super finalize ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:10'! flush "Flush output to the standard input stream of my first proxy." ^ self first flush! ! !ProxyPipeline methodsFor: 'initialize - release' stamp: 'dtl 11/8/2007 20:42'! fromString: aCommandString shell: aCommandShell "Initialize a new instance created from aCommandString using aCommandShell. " self commandLine: aCommandString. (aCommandShell splitPipelineCommands: aCommandString) inject: nil into: [:prevProxy :command | | nextProxy | nextProxy := aCommandShell redirectedPipeableProxyFor: command predecessorProxy: prevProxy. prevProxy ifNotNil: [prevProxy prepareOutputFor: nextProxy. prevProxy canProvideOutputPipe ifFalse: [nextProxy closeWriter]]. self add: nextProxy]. self isEmpty ifFalse: [self last prepareOutputFor: self; addDependent: self]! ! !ProxyPipeline methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:51'! handleCompletionWhenSignaled: aSemaphore "Answer a process that will complete processing the the last proxy has signaled its completion." | lastProxy proc | proc := [aSemaphore wait. self waitForAllToComplete. (lastProxy := self last) ifNotNil: [lastProxy closeErrorPipeline. self triggerEvent: #complete]] newProcess. ^ proc resume! ! !ProxyPipeline methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:40'! handleRunstateChange | lastProxy | (lastProxy := self last) ifNotNil: [lastProxy isComplete ifTrue: [self completionSemaphore signal]]! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 9/12/2003 11:53'! isComplete "True if all proxies are complete. The proxies may report their completion events out of sequence, so test all the proxies (not just the last one in the pipeline)." ^ self noneSatisfy: [:proxy | proxy isComplete not] ! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 4/19/2003 09:16'! isExternalProcess "Answer true if the process which I represent is an external OSProcess. For protocol compatibility with PipeJunction." ^ false! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 11/23/2002 13:37'! needsPrompt ^ self last needsPrompt! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:08'! next ^ self last next ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:08'! next: count ^ self last next: count ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:11'! nextFromError: count "Answer up to count characters from the error pipeline stream, or an empty string if no data is available. All characters are routed through the errorPipelineStream, which is shared by all my proxies." ^ self last next: count ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:09'! nextPut: aCharacter "Write aCharacter to the standard input stream of my first proxy." ^ self first nextPut: aCharacter! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:09'! nextPutAll: characters "Write characters to the standard input stream of my first proxy." ^ self first nextPutAll: characters! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 4/14/2006 10:32'! output ^ self last output! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 4/29/2003 05:04'! pipeFromOutput "The output from the last proxy in the pipeline, if any" self isEmpty ifTrue: [^ nil] ifFalse: [^ self last pipeFromOutput]! ! !ProxyPipeline methodsFor: 'accessing' stamp: 'dtl 4/28/2003 20:58'! pipeToInput "The input to the first proxy in the pipeline, if any" self isEmpty ifTrue: [^ nil] ifFalse: [^ self first pipeToInput]! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 9/12/2003 11:49'! pipesAreEmpty "True after processing is complete and all available data has been read from the output pipe and the errorPipelineStream pipe." ^ self isComplete and: [self last pipesAreEmpty] ! ! !ProxyPipeline methodsFor: 'printing' stamp: 'dtl 11/20/2002 19:32'! printOn: aStream self background ifTrue: [aStream nextPutAll: 'a background '] ifFalse: [aStream nextPutAll: 'a foreground ']. aStream nextPutAll: self class name, ' for "', self commandLine asString, '"'! ! !ProxyPipeline methodsFor: 'initialize - release' stamp: 'dtl 1/4/2003 15:35'! release self do: [:proxy | proxy release]. ^ super release! ! !ProxyPipeline methodsFor: 'testing' stamp: 'dtl 7/5/2006 09:07'! succeeded "Answer true if all proxies succeeded, otherwise false" self detect: [:proxy | proxy succeeded not] ifNone: [^ true]. ^ false ! ! !ProxyPipeline methodsFor: 'initialize - release' stamp: 'dtl 8/20/2006 19:05'! unregisterEvents self isEmpty ifFalse: [self last removeDependent: self] ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 8/25/2006 12:21'! upToEnd "Answer all available characters from the output stream." ^ self last upToEnd ! ! !ProxyPipeline methodsFor: 'streaming' stamp: 'dtl 8/25/2006 12:21'! upToEndOfFile "Answer all available characters from the output stream. Block and continue reading until end of file is detected." ^ self last upToEndOfFile ! ! !ProxyPipeline methodsFor: 'updating' stamp: 'dtl 8/22/2006 06:28'! update: aParameter aParameter == self pipeFromOutput ifTrue: [^ self triggerEvent: #outputDataReady]. aParameter == self errorPipelineStream ifTrue: [^ self triggerEvent: #errorDataReady]. aParameter == #runState ifTrue: [^ self handleRunstateChange]. self error: 'unexpected parameter' ! ! !ProxyPipeline methodsFor: 'evaluation' stamp: 'dtl 8/28/2012 07:44'! value "Initiate evaluation of each member of the pipeline, and answer the last proxy in the pipeline. Evaluation may proceed asynchronously, and the sender should wait for the last proxy to complete its evalation in order to obtain complete output and error contents from the pipeline." "(ProxyPipeline command: 'ls | cat | wc' shell: CommandShell new) value" self completionWatcher: (self handleCompletionWhenSignaled: self completionSemaphore). self do: [:proxy | proxy value. "A proxy may have associated Smalltalk processes for stream handling. Schedule a short delay to permit these processes to be started prior to starting the next proxy in the pipeline." (Delay forMilliseconds: 10) wait] ! ! !ProxyPipeline methodsFor: 'event handling' stamp: 'dtl 11/20/2006 12:43'! waitForAllToComplete "In some cases the last proxy in a pipeline may complete before some of the others. In particular, if one proxy has redirected its output to a file, the next proxy will see a nil input stream, and may quickly complete its processing before its predecessor proxies have finished writing to the file. Time out with an error if pipeline fails to complete after 10 seconds." (1 to: 100) do: [:e | self isComplete ifTrue: [^ self]. (Delay forMilliseconds: 100) wait]. self error: 'pipeline did not complete evaluation' ! ! !InternalPipe commentStamp: '' prior: 102344144! I am a first-in, first-out queue with streaming behavior. I behave similarly to an OSPipe, but am implemented in the Smalltalk image rather than with external OS pipes. I can behave either as a blocking pipe or as a nonblocking pipe, similar to an OS pipe with its reader end set in blocking or nonblocking mode.! !InternalPipe class methodsFor: 'instance creation' stamp: 'dtl 12/2/2001 19:24'! blockingPipe "InternalPipe blockingPipe" ^ super basicNew initialize setBlocking ! ! !InternalPipe class methodsFor: 'instance creation' stamp: 'dtl 12/2/2001 19:25'! new "InternalPipe new" ^ self blockingPipe! ! !InternalPipe class methodsFor: 'instance creation' stamp: 'dtl 12/2/2001 19:24'! nonBlockingPipe "InternalPipe nonBlockingPipe" ^ super basicNew initialize setNonBlocking ! ! !InternalPipe class methodsFor: 'examples' stamp: 'dtl 11/8/2007 20:33'! testPipe "InternalPipe testPipe inspect" | pipe result | pipe := self new. pipe nextPutAll: 'string to send through an InternalPipe'. pipe closeWriter. result := pipe upToEnd. pipe close. ^ result ! ! !InternalPipe methodsFor: 'finalization' stamp: 'dtl 4/20/2003 20:34'! addDummyNilAsEndOfFileIndicatorForBlockingPipe "And add a trailing nil to the pipe to mimic the behaviour of an external pipe which blocks until the writer end is closed. Writing a trailing nil the the queue has the side effect of waking up any process which is blocked waiting on the queue, which will receive the nil as an indication that the pipe has been closed. FIXME: This is almost certainly a Bad Idea, so it is encapsulated in its own method." self isBlocking ifTrue: [queue nextPut: nil] ! ! !InternalPipe methodsFor: 'testing' stamp: 'dtl 12/26/2002 19:09'! atEnd "Answer whether the receiver can access any more objects. A nonblocking pipe with writer end closed which answers nil is considered to be at end. See InternalPipe>>closeWriter. Yes, it is ugly to have a pipe which cannot pass a nil object, but this is intended to mimic the behavior of an external OS pipe in nonblocking mode." ^ self writerClosed and: [self isBlocking ifTrue: [(queue size == 0) or: [(queue size == 1) and: [(queue nextPut: queue next) isNil]]] ifFalse: [queue size == 0]] ! ! !InternalPipe methodsFor: 'testing' stamp: 'dtl 6/4/2006 16:09'! atEndOfFile "Answer whether the receiver is at its end based on the result of the last read operation. For compatibility with ExternalPipe." ^ self atEnd ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 1/25/2003 18:58'! basicNext "Answer the next object accessible by the receiver." self nonBlockingMode ifFalse: [^ queue next] ifTrue: [queue isEmpty ifTrue: [^ nil] ifFalse: [^ queue next]] ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 1/7/2003 20:23'! basicNextPut: anObject "Insert the argument, anObject, as the next object accessible by the receiver. Answer anObject." ^ queue nextPut: anObject! ! !InternalPipe methodsFor: 'finalization' stamp: 'dtl 1/1/2002 11:38'! close self closeWriter; closeReader! ! !InternalPipe methodsFor: 'finalization' stamp: 'dtl 1/4/2003 15:12'! closeReader "Protocol compatibility with OSPipe. No further reads are possible after closing the reader, therefore any dependents and events may be released. Nothing actually is done, except to release dependents and events." self release ! ! !InternalPipe methodsFor: 'finalization' stamp: 'dtl 4/20/2003 20:46'! closeWriter "Set the writerClosed flag, and add a trailing nil to the pipe to mimic the behaviour of an external pipe which blocks until the writer end is closed. Writing a trailing nil the the queue has the side effect of waking up any process which is blocked waiting on the queue, which will receive the nil as an indication that the pipe has been closed." self writerClosed ifFalse: [self writerClosed: true. self addDummyNilAsEndOfFileIndicatorForBlockingPipe. self notifyDataReady "in case someone is waiting on the pipe output"] ! ! !InternalPipe methodsFor: 'testing' stamp: 'dtl 11/24/2001 15:03'! closed ^ self writerClosed! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:33'! contents "Answer contents of the pipe, and return the contents to the pipe so it can still be read." "InternalPipe new nextPutAll: 'hello'; contents" | s | s := self next: queue size. self nextPutAll: s. ^ s! ! !InternalPipe methodsFor: 'character writing' stamp: 'dtl 9/23/2001 16:49'! cr "Append a return character to the receiver." self queue nextPut: Character cr! ! !InternalPipe methodsFor: 'initialize-release' stamp: 'dtl 9/16/2001 22:35'! initialize self queue ! ! !InternalPipe methodsFor: 'testing' stamp: 'dtl 8/7/2002 14:20'! isBlocking "Answer true if reader end is set to blocking mode." ^ self nonBlockingMode not! ! !InternalPipe methodsFor: 'testing' stamp: 'dtl 3/26/2006 15:48'! isPipe ^ true ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 3/26/2006 11:23'! next "Answer the next object accessible by the receiver." ^ self basicNext ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:24'! next: anInteger "Answer the next anInteger elements of my collection." | strm c | strm := WriteStream on: String new. (1 to: anInteger) do: [:index | self atEnd ifTrue: [^ strm contents] ifFalse: [(c := self basicNext) ifNil: [^ strm contents]. strm nextPut: c]]. ^ strm contents ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:33'! nextPut: anObject "Insert the argument, anObject, as the next object accessible by the receiver. Answer anObject." | result | result := queue nextPut: anObject. self notifyDataReady. Processor yield. ^ result ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:33'! nextPutAll: aCollection "Append the elements of aCollection to the sequence of objects accessible by the receiver. Answer aCollection." | result | result := aCollection do: [:e | queue nextPut: e]. self notifyDataReady. Processor yield. ^ result ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:33'! nonBlockingMode ^ nonBlockingMode ifNil: [nonBlockingMode := false] ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:33'! nonBlockingMode: trueOrFalse nonBlockingMode := trueOrFalse ! ! !InternalPipe methodsFor: 'event driven reader' stamp: 'dtl 1/7/2003 20:23'! notifyDataReady "Whenever new data becomes available, notify any dependents. This method exists only to document the event generation mechanism, which is intended to be compatible with events generated by an OSPipe." self changed ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 9/16/2001 22:42'! peek ^ queue peek ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:34'! queue ^ queue ifNil: [queue := SharedQueue new] ! ! !InternalPipe methodsFor: 'initialize-release' stamp: 'dtl 11/25/2001 14:33'! setBlocking "For compatibility with OSPipe" self nonBlockingMode: false! ! !InternalPipe methodsFor: 'event driven reader' stamp: 'dtl 1/7/2003 20:31'! setBufferedReader "An InternalPipe behaves like an OSPipe with a buffered reader, and is capable of generating events when data is available. Answer true to indicate that this is the case." ^ true ! ! !InternalPipe methodsFor: 'initialize-release' stamp: 'dtl 11/24/2001 15:56'! setNonBlocking "For compatibility with OSPipe" self nonBlockingMode: true! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/25/2001 19:15'! size "An InternalPipe may contain a trailing nil if it has been closed. This should not be counted as part of the pipe size, so use #contents to determine the size after stripping any trailing nil." "InternalPipe new nextPutAll: 'hello'; size" ^ self closed ifTrue: [self contents size] ifFalse: [self queue size] ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:24'! upToEnd "Answer the remaining elements in the pipe" | strm c | strm := WriteStream on: String new. [self atEnd] whileFalse: [c := self next. c isNil ifTrue: [^ strm contents] ifFalse: [strm nextPut: c]]. ^ strm contents! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 5/20/2006 18:45'! upToEndOfFile "For compatibility with external pipes" ^ self upToEnd ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:34'! writerClosed ^ writerClosed ifNil: [writerClosed := false] ! ! !InternalPipe methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:34'! writerClosed: trueOrFalse writerClosed := trueOrFalse ! ! !PipeJunction commentStamp: '' prior: 102344511! I am a connector junction for input, output, and error pipelines. I obtain input from an input pipeline and, after possibly performing some kind of operation on the input objects, I send output to an output pipeline. I may also append objects onto an error pipeline. My subclasses implement the operations on the objects which pass through a pipe junction. In general, input pipes are connected to output pipes in a serial fashion, and error pipelines are shared by one or more instances of my subclasses. ! !PipeJunction class methodsFor: 'defaults' stamp: 'dtl 4/2/2006 13:10'! externalPipeClass "If external pipes are not supported, use an internal pipe instead" "self externalPipeClass" ^ Smalltalk at: #ExternalPipe ifAbsent: [Smalltalk at: #OSPipe "Older versions of OSProcess" ifAbsent: [InternalPipe]] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 3/29/2003 11:33'! atEnd "True after processing is complete and all available data has been read from the output pipe." ^ pipeFromOutput atEnd and: [self isComplete] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 6/4/2006 18:10'! atEndOfFile "True after processing is complete and all available data has been read from the output pipe. Uses feof() to test for the end of file flag, which will have been set by a previous read operation." ^ pipeFromOutput isNil or: [pipeFromOutput atEndOfFile and: [self isComplete]]! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 11/15/2002 09:09'! canProvideOutputPipe "If a subclass is not able to provide pipe output, it may answer false. This may happen if output has been redirected to a file." ^ self pipeFromOutput notNil! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 3/11/2007 11:00'! close "Close pipe to proxy input." pipeToInput ifNotNil: [pipeToInput close] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 8/24/2012 08:31'! closeErrorPipeline self errorPipelineStream ifNotNil: [[errorPipelineStream close] on: Error do: ["may be called from multiple processes, so tolerate primitive failure"]] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 9/3/2010 17:15'! closeOutput self pipeFromOutput ifNotNil: [pipeFromOutput close] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 11/24/2006 12:59'! closePipeInputs "Close all pipe endpoints not used after process termination." pipeToInput ifNotNil: [pipeToInput close]. pipeFromOutput ifNotNil: [pipeFromOutput isPipe ifTrue: [pipeFromOutput closeWriter] ifFalse: [pipeFromOutput close]] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 8/20/2006 18:54'! closePipes self closeOutput. pipeToInput ifNotNil: [pipeToInput close]. self errorHasBeenRedirected ifTrue: [errorPipelineStream close] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 8/26/2006 13:42'! closeWriter "No further input expected" (self pipeToInput notNil and: [pipeToInput isPipe]) ifTrue: [pipeToInput closeWriter] ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 8/26/2006 12:11'! complete "Evaluation has been completed. Perform any necessary cleanup." ^ self closePipeInputs ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 11/14/2002 06:35'! enableErrorStreamTriggers "Set the error stream to be event driven if possible, and answer true if event driven output is supported, otherwise false." ^ false! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 1/6/2003 20:31'! enableEventTriggers "Set the output stream to be event driven if possible, and answer true if event driven output is supported, otherwise false. See #update: for event triggering logic." ^ self enableOutputStreamTriggers ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 6/5/2006 07:19'! enableOutputStreamTriggers "Set the output stream to be event driven if possible, and answer true if event driven output is supported, otherwise false." (pipeFromOutput notNil and: [pipeFromOutput isPipe]) ifTrue: [^ pipeFromOutput setBufferedReader] ifFalse: [^ false] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 1/25/2003 13:07'! ensurePipeFromOutput "Make sure that an output pipe is provided." ^ self pipeFromOutput ifNil: [self pipeFromOutput: InternalPipe new] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 11/21/2006 14:56'! errorHasBeenRedirected "Answer true if the error output has been redirected to an external file and is not available to be read as error output of a pipeline." ^ self errorPipelineStream isPipe not ! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 3/22/2003 14:48'! errorPipeForNextProxy ^ self errorHasBeenRedirected ifTrue: [nil] ifFalse: [self errorPipelineStream] ! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:35'! errorPipelineStream "Accumulates the error output of commands in a command pipeline." errorPipelineStream isNil ifTrue: [errorPipelineStream := InternalPipe nonBlockingPipe]. ^ errorPipelineStream ! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:35'! errorPipelineStream: aStream "Accumulates the error output of commands in a command pipeline." errorPipelineStream := aStream ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:40'! errorUpToEnd "Answer all available characters from my error stream." ^ (errorPipelineStream isNil or: [self errorHasBeenRedirected]) ifTrue: [''] ifFalse: [errorPipelineStream upToEnd] ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 7/17/2006 05:48'! errorUpToEndOfFile "Answer all available characters from the error stream. Block and continue reading until end of file is detected." ^ (errorPipelineStream isNil or: [self errorHasBeenRedirected]) ifTrue: [''] ifFalse: [errorPipelineStream upToEndOfFile] ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:30'! flush "Flush output to the standard input stream of my external process. If no external process is involved, do nothing." ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:17'! handleRedirectedOutputOf: predecessorProxy "If the output of predecessorProxy (in a pipeline) has been redirected, this pipe junction will not know when predecessorProxy has completed unless it requests notification. The pipe to input of this pipe junction should not be closed until predecessorProxy is complete, so close the pipe when the completion event occurs." predecessorProxy ifNotNil: [(predecessorProxy canProvideOutputPipe not and: [self inputHasBeenRedirected not]) ifTrue: [self pipeToInput ifNotNil: [predecessorProxy when: #complete send: #close to: pipeToInput writer]]] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 9/10/2002 00:15'! initialize (self requiresNonBlockingInput and: [pipeToInput isKindOf: OSPipe]) ifTrue:[pipeToInput setNonBlocking] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 11/21/2006 16:21'! inputHasBeenRedirected "Answer true if the input stream has been redirected to an external file." ^ self pipeToInput notNil and: [pipeToInput isPipe not] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 4/14/2006 11:35'! isComplete ^ self subclassResponsibility ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 3/9/2002 18:16'! isExternalProcess "Answer true if the process which I represent is an external OSProcess." ^ false! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:23'! next ^ pipeFromOutput next ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:24'! next: count ^ pipeFromOutput next: count ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:28'! nextFromError: count "Answer up to count characters from the error pipeline stream, or an empty string if no data is available. All characters are routed through the errorPipelineStream, so that they are concatenated with any preceeding error message text (possibly from a preceeding process in a command pipeline)." ^ errorPipelineStream next: count ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:24'! nextPut: aCharacter "Write aCharacter to the standard input stream of my external process." ^ pipeToInput nextPut: aCharacter! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 9/19/2002 09:25'! nextPutAll: characters "Write characters to the standard input stream of my external process." ^ pipeToInput nextPutAll: characters! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 2/24/2013 10:25'! output "Wait for process completion, and answer all available output." "((PipeableOSProcess command: 'ps') | 'grep squeak' | 'cut -c16-100') output" ^ (self isNotYetRunning not and: [self canProvideOutputPipe]) ifTrue: [(self outputOn: (WriteStream on: String new)) contents] ifFalse: [''] ! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 11/8/2007 20:35'! outputAndError "Answer an array with output and error contents. If standard error has been redirected to a file, answer a null string as the error message." "((PipeableOSProcess command: 'ps') | 'NoSuchCommand; grep squeak' | 'cut -c16-100') outputAndError" | out err | out := self output. (self errorHasBeenRedirected) ifTrue: [err := ''] ifFalse: [err := errorPipelineStream contents]. ^ Array with: out with: err! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 11/8/2007 20:35'! outputOn: aStream "Wait for process completion, writing all available output on aStream" | d | d := nil. [self isComplete] whileFalse: [(d ifNil: [d := Delay forMilliseconds: 50]) wait. aStream nextPutAll: self upToEnd]. aStream nextPutAll: self upToEndOfFile. ^ aStream ! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 4/14/2006 11:31'! outputPipeForNextProxy ^ self canProvideOutputPipe ifTrue: [pipeFromOutput] ifFalse: [nil] ! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 3/4/2002 21:46'! pipeFromOutput ^ pipeFromOutput! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 9/3/2010 17:18'! pipeFromOutput: aPipeStream (pipeFromOutput := aPipeStream) ifNotNil: [pipeFromOutput addDependent: self] ! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 3/4/2002 21:36'! pipeToInput ^ pipeToInput! ! !PipeJunction methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:36'! pipeToInput: aPipeStream pipeToInput := aPipeStream! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 6/4/2006 17:26'! pipesAreEmpty "True after processing is complete and all available data has been read from the output pipe and the errorPipelineStream pipe." ^ self atEndOfFile and: [self errorHasBeenRedirected or: [errorPipelineStream atEnd]]! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 1/2/2003 21:18'! prepareOutputFor: aPipeJunction "External process proxies are independent of the Smalltalk image and do not require event driven input. Internal proxies will prefer to request event notification." aPipeJunction isExternalProcess ifTrue: [self prepareOutputForPipe] ifFalse: [self prepareOutputForInternalReader] ! ! !PipeJunction methodsFor: 'command pipelines - private' stamp: 'dtl 11/25/2006 11:03'! prepareOutputForInternalReader "Output stream will be used directly by a Smalltalk process. Set output stream characteristics accordingly." self canProvideOutputPipe ifTrue: [pipeFromOutput setNonBlocking]. self enableEventTriggers! ! !PipeJunction methodsFor: 'command pipelines - private' stamp: 'dtl 12/3/2006 12:34'! prepareOutputForPipe "Output stream will be used by another process proxy as input. Set output stream characteristics accordingly. The output stream will be owned by the next process in a pipeline, but the error stream is shared by all processes in the pipeline, and can be event driven." Smalltalk at: #AioEventHandler ifPresent: [:aio | aio aioPluginPresent ifTrue: [self enableErrorStreamTriggers]]! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 1/4/2003 15:44'! release "The input pipe may be released, but the output and error pipes may still be in use." self pipeToInput release. ^ super release! ! !PipeJunction methodsFor: 'command pipelines' stamp: 'dtl 11/8/2007 20:35'! replaceOutputStreamWith: anotherStream "Sender is not happy with the kind of output stream we are using. Replace pipeFromOutput with anotherStream, and copy the current contents of pipeFromOutput to the new stream." | oldOutputStream | oldOutputStream := self pipeFromOutput. oldOutputStream removeDependent: self. "Break old dependency" self pipeFromOutput: anotherStream. "Restores the dependency automatically" oldOutputStream ifNotNil: [anotherStream ifNotNil: [anotherStream nextPutAll: oldOutputStream contents]. oldOutputStream close] ! ! !PipeJunction methodsFor: 'testing' stamp: 'dtl 9/9/2002 13:50'! requiresNonBlockingInput "A PipeJunction managed by Squeak may be subject to deadlocks associated with reading or writing an OSPipe. Answer true if the input pipe must function in nonBlocking mode in order to prevent deadlocks. This method exists simply to make the requirement explicit." ^ true! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 7/14/2002 23:51'! resetStdioStreams "After an image restart, call this method to reset to the correct input, output and error streams if they are attached to standard input, output or error." Smalltalk at: #OSProcess ifPresent: [:osp | ((self pipeToInput respondsTo: #isStdIn) and: [pipeToInput isStdIn]) ifTrue: [self pipeToInput: osp thisOSProcess stdIn]. ((self pipeToInput respondsTo: #isStdOut) and: [pipeToInput isStdOut]) ifTrue: [self pipeToInput: osp thisOSProcess stdOut]. ((self pipeToInput respondsTo: #isStdErr) and: [pipeToInput isStdErr]) ifTrue: [self pipeToInput: osp thisOSProcess stdErr]] ! ! !PipeJunction methodsFor: 'initialize - release' stamp: 'dtl 9/28/2002 20:54'! setNonBlockingOutput "Check first to make sure process is not complete because pipeFromOutput will not respond to #setNonBlocking after the process has exited." self isComplete ifFalse: [pipeFromOutput setNonBlocking]! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 7/7/2006 00:32'! triggerComplete self triggerEvent: #complete ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 7/7/2006 09:11'! triggerErrorDataReady self triggerEvent: #errorDataReady. Processor yield ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 7/7/2006 09:11'! triggerOutputDataReady self triggerEvent: #outputDataReady. Processor yield ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:38'! upToEnd "Answer all available characters from the output stream." ^ (self pipeFromOutput notNil and: [self canProvideOutputPipe]) ifTrue: [pipeFromOutput upToEnd] ifFalse: [''] ! ! !PipeJunction methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:38'! upToEndOfFile "Answer all available characters from the output stream. Block and continue reading until end of file is detected." ^ (self pipeFromOutput notNil and: [self canProvideOutputPipe]) ifTrue: [pipeFromOutput upToEndOfFile] ifFalse: [''] ! ! !PipeJunction methodsFor: 'updating' stamp: 'dtl 8/19/2006 11:43'! update: aParameter ^ self changed: aParameter ! ! !PipeJunction methodsFor: 'event handling' stamp: 'dtl 11/21/2002 18:38'! updateErrorPipelineStream "Ensure that all available error output is placed into errorPipelineStream." ! ! !PipeableEvaluator commentStamp: 'dtl 2/1/2003 16:56' prior: 102345085! I evaluate Smalltalk expressions, taking input from my pipeToInput, and print the results of the evaluation on my pipeFromOutput. I may append error messages to my errorPipelineStream. I provide a framework for pipelines of expressions, possibly combined in the same pipeline with ExternalOSProcess proxies executing external operating system commands. My evaluationBlock may be supplied directly, or can be compiled from an expression string. If compiled from an expression string, the names 'stdin', 'stdout', 'stderr', and 'args' are used to refer to the input stream, output stream, error stream, and an array of arguments. If any of these names are used in the expression string, then the evaluation block will be compiled in such as way as to connect these names with their corresponding streams or argument array. ! !ExpressionEvaluator commentStamp: 'dtl 2/1/2003 16:58' prior: 102345975! I provide a context in which a Smalltalk expression can be evaluated as an element of a command pipeline.! !ExpressionEvaluator class methodsFor: 'instance creation' stamp: 'dtl 3/26/2006 12:10'! block: aBlock "(self block: [#'This block answers a symbol as String']) value upToEnd" ^ self basicNew block: aBlock ! ! !ExpressionEvaluator class methodsFor: 'instance creation' stamp: 'dtl 3/26/2006 12:09'! command: aString "(self command: '''Hello world!!''') value upToEnd" ^ self basicNew command: aString ! ! !ExpressionEvaluator class methodsFor: 'instance creation' stamp: 'dtl 12/13/2007 21:38'! command: aString pipeFrom: inputStream errorPipelineStream: errorStream "(self command: 'stdout nextPutAll: stdin upToEnd' pipeFrom: (ReadStream on: 'Here is some input text') errorPipelineStream: InternalPipe nonBlockingPipe) value upToEnd" ^ self command: aString pipeFrom: inputStream pipeTo: nil errorPipelineStream: errorStream! ! !ExpressionEvaluator class methodsFor: 'instance creation' stamp: 'dtl 12/13/2007 21:38'! command: aString pipeFrom: inputStream pipeTo: outputStream errorPipelineStream: errorStream "(self command: 'stdout nextPutAll: stdin contents' pipeFrom: (ReadStream on: 'Here is some input text') pipeTo: nil errorPipelineStream: InternalPipe nonBlockingPipe) value upToEnd" ^ super new expression: aString; pipeToInput: inputStream; pipeFromOutput: outputStream; errorPipelineStream: errorStream; notYetRunning; initialize! ! !ExpressionEvaluator methodsFor: 'evaluating' stamp: 'dtl 2/1/2003 16:34'! addTreeLeaves: treeOfSymbols to: aCollection "Flatten a tree of Symbols built by a Scanner." treeOfSymbols do: [:e | (e isKindOf: Array) ifTrue: [self addTreeLeaves: e to: aCollection] ifFalse: [aCollection add: e]]. ^ aCollection! ! !ExpressionEvaluator methodsFor: 'initialize - release' stamp: 'dtl 4/19/2003 16:29'! block: aBlock self evaluationBlock: aBlock. self initialize. self prepareOutputForInternalReader ! ! !ExpressionEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/8/2007 20:32'! blockString "Answer source code for a block to execute my expression. Attempt to give it the correct number of parameters based on scanning expression for use of #args, #stderr, #stdout, and #stdin tokens." "PipeableEvaluator new expression: 'stdout nextPutAll: (args at: 4)'; blockString" "PipeableEvaluator new expression: 'stderr nextPutAll: stdin contents'; blockString" "PipeableEvaluator new expression: 'stdout nextPutAll: stdin contents'; blockString" "PipeableEvaluator new expression: 'stdin contents'; blockString" "PipeableEvaluator new expression: '#HelloWorld'; blockString" | tokens prefix | self expression isNil ifTrue: [^ '[]'] ifFalse: [tokens := self addTreeLeaves: (Scanner new scanTokens: expression) to: OrderedCollection new. (tokens includes: #args) ifTrue: [prefix := '[:stdin :stdout :stderr :args | '] ifFalse: [(tokens includes: #stderr) ifTrue: [prefix := '[:stdin :stdout :stderr | '] ifFalse: [(tokens includes: #stdout) ifTrue: [prefix := '[:stdin :stdout | '] ifFalse: [(tokens includes: #stdin) ifTrue: [prefix := '[:stdin | '] ifFalse: [prefix := '[']]]]. ^ prefix, self expression, ']'] ! ! !ExpressionEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/8/2007 20:32'! blockValue "Evaluate my evaluationBlock. For a smart block, answer self. For a dumb block, answer the result of evaluating it. Heuristic: If the block receives two or more arguments, then assume that it was smart enough to write output to stdout. Otherwise, assume that it was a dumb block." | nArgs | self evaluationBlock ifNil: [^ nil]. nArgs := evaluationBlock numArgs. (nArgs == 0) ifTrue: "dumb block" [^ evaluationBlock value] ifFalse: [(nArgs == 4) ifTrue: "smart block" [evaluationBlock value: self pipeToInput value: self pipeFromOutput value: self errorPipelineStream value: self argumentArray] ifFalse: [(nArgs == 3) ifTrue: "smart block" [evaluationBlock value: self pipeToInput value: self pipeFromOutput value: self errorPipelineStream] ifFalse: [(nArgs == 2) ifTrue: "smart block" [evaluationBlock value: self pipeToInput value: self pipeFromOutput] ifFalse: [(nArgs == 1) ifTrue: "dumb block" [^ evaluationBlock value: self pipeToInput] ifFalse: "really stupid block" [self error: 'expected block with 4 or fewer arguments'. ^ nil]]]]] ! ! !ExpressionEvaluator methodsFor: 'initialize - release' stamp: 'dtl 4/19/2003 16:25'! command: aString self expression: aString. self initialize. self prepareOutputForInternalReader ! ! !ExpressionEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/29/2010 23:33'! compile "Compile my expression into a block with zero to four parameters. The parameters, if present, correspond to my pipeToInput, pipeFromOutput, errorPipelineStream, and an array of extra parameters (in that order). By convention, these are named 'stdin', 'stdout', 'stderr', and 'args' within my expression string. If the compilation fails due to a syntax error (compile time failure, not run time failure), put an error message on the standard error stream and answer a block which evaluates to a null string." evaluationBlock ifNil: [evaluationBlock := [Compiler evaluate: self blockString for: self notifying: self logged: false] on: Exception do: [:e | self errorPipelineStream nextPutAll: 'Compiler: invalid Smalltalk expression ', self blockString; nextPut: Character lf. self fail. nil]] ! ! !ExpressionEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 16:34'! evaluationBlock "Answer the block to be evaluated, possibly compiling it from the expression string." evaluationBlock ifNil: [self compile]. ^ evaluationBlock! ! !ExpressionEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:32'! evaluationBlock: aBlock "The block to be evaluated, possibly compiled from the expression string." evaluationBlock := aBlock! ! !ExpressionEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 16:34'! expression ^ expression! ! !ExpressionEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:32'! expression: aString expression := aString! ! !ExpressionEvaluator methodsFor: 'printing' stamp: 'dtl 3/24/2003 07:23'! printOn: aStream super printOn: aStream. self expression isNil ifTrue: [self evaluationBlock isNil ifTrue: [aStream nextPutAll: ' for '. self evaluationBlock printOn: aStream] ifFalse: [aStream nextPutAll: ' for a '. self evaluationBlock class printOn: aStream]] ifFalse: [aStream nextPutAll: ' for '. self expression printOn: aStream] ! ! !ExpressionEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/8/2007 20:32'! value "Evaluate my evaluationBlock. If the block evaluates to anything other than self, then print the result on pipeFromOutput as output. Otherwise, assume that the block was smart enough to have written its own output. For a block which does not write its own output, add a trailing line terminator after the evaluation if needed. Answer self as the result of the evaluation." | result resultString | self success. "Hope for the best, send #fail if something goes wrong" self isNotYetRunning ifTrue: [self ensurePipeFromOutput. self running. self evaluationBlock notNil ifTrue: [result := [self blockValue] on: Error do: [:e | self errorPipelineStream nextPutAll: e description; nextPut: Character lf. self fail]. (result == self) ifFalse: [resultString := result asString. pipeFromOutput nextPutAll: resultString. (resultString isEmpty not and: [(resultString last ~= Character cr) and: [resultString last ~= Character lf]]) ifTrue: [pipeFromOutput nextPut: Character lf]]] ifFalse: [self fail]. self complete] ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 16:45'! argumentArray ^ argumentArray ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:36'! argumentArray: anArrayOfStrings argumentArray := anArrayOfStrings ! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 6/8/2003 22:37'! atEnd "True after processing is complete and all available data has been read from the output pipe." ^ self isComplete and: [self outputHasBeenRedirected or: [self outputIsExternalStream or: [pipeFromOutput atEnd]]] ! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 11/15/2002 09:10'! canProvideOutputPipe "Answer false if output has been redirected to a file and cannot be accessed by the next process proxy in a command pipeline." ^ super canProvideOutputPipe and: [self outputHasBeenRedirected not] ! ! !PipeableEvaluator methodsFor: 'setting run state' stamp: 'dtl 11/24/2006 13:01'! complete "Evaluation has been completed. Perform some cleanup and notify interested parties." self closePipeInputs. self runState: #complete. self errorHasBeenRedirected ifTrue: [self closeErrorPipeline]! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:36'! errorPipelineStream "Accumulates the error output of commands in a command pipeline." errorPipelineStream isNil ifTrue: [errorPipelineStream := InternalPipe nonBlockingPipe. errorPipelineStream addDependent: self]. ^ errorPipelineStream ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:36'! errorPipelineStream: aStream "Accumulates the error output of commands in a command pipeline." errorPipelineStream ifNotNil: [errorPipelineStream removeDependent: self]. errorPipelineStream := aStream. errorPipelineStream ifNotNil: [errorPipelineStream addDependent: self] ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 4/19/2003 09:56'! exitStatus ^ exitStatus! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:36'! exitStatus: aSymbol exitStatus := aSymbol! ! !PipeableEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/25/2001 22:39'! fail self exitStatus: #fail! ! !PipeableEvaluator methodsFor: 'initialize - release' stamp: 'dtl 9/9/2002 13:51'! initialize "If pipeFromOutput has been set, then the output stream is being redirected. Set a flag to indicate this, otherwise open new a pipe stream to use for output." pipeFromOutput isNil ifTrue: [self ensurePipeFromOutput] ifFalse: [self outputHasBeenRedirected: true]. ^ super initialize ! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 3/4/2002 06:58'! isComplete ^ self runState == #complete! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 3/4/2002 06:59'! isNotYetRunning ^ self runState == #notYetRunning! ! !PipeableEvaluator methodsFor: 'streaming' stamp: 'dtl 11/8/2007 20:37'! nextPut: aCharacter "Write aCharacter to the standard input stream of my process." | readPosition | readPosition := pipeToInput position. pipeToInput setToEnd nextPut: aCharacter. pipeToInput position: readPosition. ^ pipeToInput ! ! !PipeableEvaluator methodsFor: 'streaming' stamp: 'dtl 11/8/2007 20:37'! nextPutAll: aCollection "Write aCollection to the standard input stream of my process." | readPosition | readPosition := pipeToInput position. pipeToInput setToEnd nextPutAll: aCollection. pipeToInput position: readPosition. ^ pipeToInput ! ! !PipeableEvaluator methodsFor: 'setting run state' stamp: 'dtl 3/4/2002 22:32'! notYetRunning "Process has not yet entered running state." self runState: #notYetRunning ! ! !PipeableEvaluator methodsFor: 'error handling' stamp: 'dtl 11/8/2007 20:37'! notify: aString at: aPosition in: aStream | s | s := aStream contents. self errorPipelineStream nextPutAll: (s copyFrom: 1 to: (aPosition - 1)); nextPutAll: aString; nextPutAll: (s copyFrom: aPosition to: s size); cr ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:37'! outputHasBeenRedirected "True if pipeFromOutput has been redirected to a FileStream" ^ outputHasBeenRedirected ifNil: [outputHasBeenRedirected := false]! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:37'! outputHasBeenRedirected: trueOrFalse "True if pipeFromOutput has been redirected to a FileStream" outputHasBeenRedirected := trueOrFalse! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 6/8/2003 22:35'! outputIsExternalStream "True if output is being piped to an external proxy, or if output has been redirected to a file." ^ self pipeFromOutput isKindOf: FileStream ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/29/2006 06:29'! pipeFromError "Internal evaluators use the errorPipelineStream directly" ^ self errorPipelineStream! ! !PipeableEvaluator methodsFor: 'printing' stamp: 'dtl 1/12/2003 00:45'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' ('; nextPutAll: self runState; nextPut: $) ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:37'! runState ^ runState ifNil: [runState := #notYetRunning] ! ! !PipeableEvaluator methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:37'! runState: aSymbol runState := aSymbol. self changed: #runState ! ! !PipeableEvaluator methodsFor: 'setting run state' stamp: 'dtl 3/4/2002 22:32'! running "Process is actively running." self runState: #running ! ! !PipeableEvaluator methodsFor: 'error handling' stamp: 'dtl 4/7/2001 21:27'! selectFrom: start to: end ^ self blockString copyFrom: start to: end! ! !PipeableEvaluator methodsFor: 'error handling' stamp: 'dtl 4/7/2001 19:50'! selectionInterval "The compiler wants this for some reason." ^ 1 to: 1! ! !PipeableEvaluator methodsFor: 'testing' stamp: 'dtl 12/22/2001 18:37'! succeeded "Answer true if my evaluation completed successfully." ^ self exitStatus == #success! ! !PipeableEvaluator methodsFor: 'evaluating' stamp: 'dtl 11/25/2001 22:39'! success self exitStatus: #success! ! !PipeableEvaluator methodsFor: 'error handling' stamp: 'dtl 12/8/2001 18:13'! text "The compiler needs this to generate error messages." ^ Text fromString: self expression! ! !PipeableEvaluator methodsFor: 'setting run state' stamp: 'dtl 3/4/2002 22:32'! unknownRunState "Unable to determine the current run state of the process." self runState: #unknownRunState ! ! !PipeableEvaluator methodsFor: 'command pipelines' stamp: 'dtl 11/8/2007 20:38'! | anotherCommandString "Pipe my output to another evaluator, where the other evaluator evaluates anotherCommandString." "((ExpressionEvaluator command: 'Smalltalk') | 'stdout nextPutAll: stdin upToEnd' | 'stdout nextPutAll: stdin upToEnd') upToEnd" "(ExpressionEvaluator command: 'BOGUS') | 'stdout nextPutAll: stdin upToEnd' | 'stdout nextPutAll: stdin upToEnd'" "((ExpressionEvaluator command: '(true == false) not') | 'stdout nextPutAll: stdin upToEnd' | 'stdout nextPutAll: stdin upToEnd') upToEnd" | new | new := self species command: anotherCommandString pipeFrom: self pipeFromOutput errorPipelineStream: self errorPipelineStream. self value. ^ new ! ! !ShellBuiltinEvaluator commentStamp: 'dtl 2/1/2003 17:47' prior: 102346150! I provide the context in which a ShellBuiltin is evaluated as an element of a command pipeline.! !ShellBuiltinEvaluator class methodsFor: 'instance creation' stamp: 'dtl 2/1/2003 16:01'! command: aShellBuiltin withArguments: argumentArray shell: commandShell pipeFrom: inputStream pipeTo: outputStream errorPipelineStream: errorStream ^ super new shellBuiltin: aShellBuiltin; argumentArray: argumentArray; commandShell: commandShell; pipeToInput: inputStream; pipeFromOutput: outputStream; errorPipelineStream: errorStream; initialize! ! !ShellBuiltinEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 15:13'! commandShell ^ commandShell ! ! !ShellBuiltinEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 15:12'! commandShell: aCommandShell commandShell := aCommandShell ! ! !ShellBuiltinEvaluator methodsFor: 'testing' stamp: 'dtl 2/1/2003 16:08'! needsPrompt "Answer true if a shell will want to issue a prompt after evaluating me." ^ self shellBuiltin needsPrompt ! ! !ShellBuiltinEvaluator methodsFor: 'printing' stamp: 'dtl 3/22/2003 13:58'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' on '. self shellBuiltin printOn: aStream! ! !ShellBuiltinEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 15:12'! shellBuiltin ^ shellBuiltin! ! !ShellBuiltinEvaluator methodsFor: 'accessing' stamp: 'dtl 2/1/2003 15:12'! shellBuiltin: aShellBuiltin shellBuiltin := aShellBuiltin! ! !ShellBuiltinEvaluator methodsFor: 'evaluating' stamp: 'dtl 12/21/2007 12:50'! value self isNotYetRunning ifTrue: [self success. "Hope for the best, send #fail if something goes wrong" self running. self ensurePipeFromOutput. self shellBuiltin performWith: self argumentArray evaluator: self shell: self commandShell input: self pipeToInput output: self pipeFromOutput error: self errorPipelineStream] ! ! !PipeableOSProcess commentStamp: '' prior: 102346305! I am a connector junction for input, output, and error pipelines. I collaborate with a process proxy to evaluate an internal or external process, and to move objects through the pipelines as the proxy is evaluated. From Smalltalk, you can write to my pipeToInput, and read from my pipeFromOutput and pipeFromError streams. I implement simple streaming protocol as a convenience for reading and writing these pipe streams. I support command pipelines with the #| message, with the pipeFromOutput of one instance connected to the pipeToInput of the next instance, and a shared errorPipelineStream collecting error output text for the command pipeline. All reading and writing should be done with the streaming protocol, rather than by direct access to the pipe streams. This is because the output pipe streams may be silently replaced by simple ReadStreams following the exit of the child process. Normal exit for the external process may not happen when expected. If the process is writing to the output pipe, it may block on write until enough of its data is read from the pipeFromOutput pipe, after which it will exit normally.! !PipeableOSProcess class methodsFor: 'examples' stamp: 'dtl 1/24/2013 19:12'! addTwoPlusTwoInChildSqueak "Fork a headless child Squeak. Send three objects to the child, and read one object returned from the child. The child Squeak uses the three objects to compute a result, which it sends back to its parent Squeak before exiting." "PipeableOSProcess addTwoPlusTwoInChildSqueak" | serializerClass childBlock in out rcv op param result childProxy writer sum s inputStream | (serializerClass := Smalltalk at: #ReferenceStream ifPresent: [:cls | cls ]) ifNil: [^ self notify: 'ReferenceStream not found']. "Create block to be evaluated in a Squeak child process." childBlock := ["First set standard input to blocking. This avoids a delay to wait for data to be available, but note that it is dangerous to do this unless you are certain that you know in advance that the correct number of characters will be available on the input. If this is not the case, then the VM will block on the read and lock up the child squeak process." OSProcess thisOSProcess stdIn setBlocking. in := serializerClass on: OSProcess thisOSProcess stdIn. out := serializerClass on: OSProcess thisOSProcess stdOut. "read three objects" rcv := in next. op := in next. param := in next. "add two plus two" result := rcv perform: op with: param. "answer the result" out nextPut: result]. "Fork a child Squeak that will evaluate the childBlock then exit" childProxy := PipeableOSProcess forkHeadlessSqueakAndDoThenQuit: childBlock. "Write three objects to the child Squeak process" writer := serializerClass on: childProxy pipeToInput writer. writer nextPut: 2. writer nextPut: #+. writer nextPut: 2. "Read the result object from the child Squeak process" s := RWBinaryOrTextStream with: childProxy pipeFromOutput upToEndOfFile. s reset. inputStream := serializerClass on: s. sum := inputStream next. "show result of 2 + 2 evaluated in the child Squeak" self inform: '2 + 2 equals ', sum asString. ^ sum ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 9/3/2010 17:26'! bash "Start a Gnu bash command interpreter (enhanced Unix shell)" "self bash" "self bash exec: 'ls'; exec: 'who'; close; upToEnd" | proxyClass | (proxyClass := self externalProxyClass) ifNotNil: [^ self command: proxyClass bashShellPath]. ^ self notify: 'OSProcess not available' ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 11/8/2007 20:40'! canAccessOSProcess "True if OSProcess is in the image and if the OSProcess plugin is functioning properly" "self canAccessOSProcess" | osp | ^ (osp := Smalltalk at: #OSProcess ifAbsent: []) notNil and: [osp accessor canAccessSystem] ! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 3/4/2002 07:24'! command: aString "(PipeableOSProcess command: '/bin/echo this is a test') output" "(PipeableOSProcess command: 'echo this is a test') output" "(PipeableOSProcess command: '/bin/noSuchCommand this is a test') output" "(PipeableOSProcess command: 'ls -l Sq*log') output" "(PipeableOSProcess command: 'ls -l ?q*log') output" "(PipeableOSProcess command: '/bogusDirectory/ls -l Sq*log') output" ^ self command: aString environment: nil workingDir: nil input: nil output: nil error: nil errorPipelineStream: nil! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 11/8/2011 19:44'! command: aString environment: anEnvironmentDictionary "| env path | env := OSProcess thisOSProcess environment copy. path := (env at: #PATH), ':/opt/local/bin/'. env at: #PATH put: path. (PipeableOSProcess command: 'echo $PATH' environment: env) output" ^ self command: aString environment: anEnvironmentDictionary workingDir: nil input: nil output: nil error: nil errorPipelineStream: nil ! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 12/13/2007 21:46'! command: aString environment: anEnvironmentDictionary workingDir: pathString input: inputStream output: outputStream error: errorStream errorPipelineStream: anErrorWriteStream "(PipeableOSProcess command: 'ls -l hosts NOSUCHFILE' environment: nil workingDir: '/etc' input: nil output: nil error: nil errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself)) output" ^ self command: aString environment: anEnvironmentDictionary workingDir: pathString input: inputStream output: outputStream error: errorStream errorPipelineStream: anErrorWriteStream shellSyntax: nil ! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 12/13/2007 21:46'! command: aString environment: anEnvironmentDictionary workingDir: pathString input: inputStream output: outputStream error: errorStream errorPipelineStream: anErrorWriteStream shellSyntax: aSyntaxProcessor "(PipeableOSProcess command: 'ls -l hosts NOSUCHFILE' environment: nil workingDir: '/etc' input: nil output: nil error: nil errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself) shellSyntax: nil) output" | nameAndArgs proxyClass | nameAndArgs := aSyntaxProcessor isNil ifTrue: [(proxyClass := self externalProxyClass) isNil ifTrue: [Array with: aString with: Array new] ifFalse: [Array with: proxyClass defaultShellPath with: (Array with: '-c' with: aString)]] ifFalse: [aSyntaxProcessor programNameAndArgumentsFrom: aString inDirectoryPath: pathString findExecutable: true]. ^ self forkAndExec: (nameAndArgs at: 1) arguments: (nameAndArgs at: 2) environment: anEnvironmentDictionary descriptors: (Array with: inputStream with: outputStream with: errorStream) workingDir: pathString errorPipelineStream: anErrorWriteStream ! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 4/28/2001 12:04'! command: aCommandString pipeFrom: aPipeStream errorPipelineStream: anErrorStream "Run a command in a shell process. Similar to the system(3) call in the standard C library, except that aCommandString runs asynchronously in a child process." ^ self command: aCommandString environment: nil workingDir: nil input: aPipeStream output: nil error: nil errorPipelineStream: anErrorStream! ! !PipeableOSProcess class methodsFor: 'external command processing' stamp: 'dtl 10/13/2008 06:31'! commandNoEvaluate: aString environment: anEnvironmentDictionary workingDir: pathString input: inputStream output: outputStream error: errorStream errorPipelineStream: anErrorWriteStream shellSyntax: aSyntaxProcessor "Set up the command but do not actually fork the child process." "PipeableOSProcess commandNoEvaluate: 'ls -l hosts NOSUCHFILE' environment: nil workingDir: '/etc' input: nil output: nil error: nil errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself) shellSyntax: nil" | nameAndArgs proxyClass | nameAndArgs := aSyntaxProcessor isNil ifTrue: [(proxyClass := self externalProxyClass) isNil ifTrue: [Array with: aString with: Array new] ifFalse: [Array with: proxyClass defaultShellPath with: (Array with: '-c' with: aString)]] ifFalse: [aSyntaxProcessor programNameAndArgumentsFrom: aString inDirectoryPath: pathString findExecutable: true]. ^ nameAndArgs ifNotNil: [self new: (nameAndArgs at: 1) arguments: (nameAndArgs at: 2) environment: anEnvironmentDictionary descriptors: (Array with: inputStream with: outputStream with: errorStream) workingDir: pathString errorPipelineStream: anErrorWriteStream] ! ! !PipeableOSProcess class methodsFor: 'process proxy classes' stamp: 'dtl 8/7/2002 13:42'! externalProxyClass "self externalProxyClass" ^ Smalltalk at: #ExternalOSProcess ifPresent: [:eosp | eosp concreteClass] ! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 12/13/2007 21:39'! forkAndExec: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams workingDir: pathString errorPipelineStream: anErrorStream "Run a program in an external OS process, and answer an instance of myself which represents the external process." "PipeableOSProcess forkAndExec: '/bin/ls' arguments: #('-ls' 'hosts' 'NOSUCHFILE') environment: nil descriptors: nil workingDir: '/etc' errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself)" ^ self canAccessOSProcess ifTrue: [(self new: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams workingDir: pathString errorPipelineStream: anErrorStream) value; yourself] ifFalse: [self notify: 'OSProcess not available or OSProcess plugin not functioning'] ! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 5/19/2009 23:28'! forkHeadlessSqueakAndDoThenQuit: aBlock "Start a new headless Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock." "| child | child := PipeableOSProcess forkHeadlessSqueakAndDoThenQuit: [OSProcess thisOSProcess stdOut nextPutAll: 'hello from headless Squeak child ', OSProcess thisOSProcess pid asString]. child upToEndOfFile" ^ self forkSqueakAndDoThenQuit: aBlock errorPipelineStream: InternalPipe nonBlockingPipe headless: true ! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 11/11/2011 10:20'! forkSqueakAndDoThenQuit: aBlock "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock." "PipeableOSProcess forkSqueakAndDoThenQuit: [Object inform: 'Hi, I am the child Squeak process. Click OK to exit the child Squeak.']" ^ self forkSqueakAndDoThenQuit: aBlock errorPipelineStream: InternalPipe nonBlockingPipe headless: false ! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 11/10/2011 20:25'! forkSqueakAndDoThenQuit: aBlock errorPipelineStream: anErrorStream headless: headless "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock." ^ self forkSqueakAndDoThenQuit: aBlock errorPipelineStream: anErrorStream headless: headless bufferedOutput: true! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 11/11/2011 11:35'! forkSqueakAndDoThenQuit: aBlock errorPipelineStream: anErrorStream headless: headless bufferedOutput: buffered "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock." ^ self forkSqueakAndDoThenQuit: aBlock errorPipelineStream: anErrorStream headless: headless bufferedOutput: buffered outputNotifier: nil! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 11/11/2011 11:44'! forkSqueakAndDoThenQuit: aBlock errorPipelineStream: anErrorStream headless: headless bufferedOutput: buffered outputNotifier: aioEventHandler "Start a new instance of Squeak running in a child OS process. The new instance is a clone of this image except for the return value of this method. It does not reload the image file from disk. The child image evaluates aBlock." | pp proc parentVmProcess blockWithRedirection | pp := super new. pp createPipes. buffered ifTrue: [pp pipeFromOutput setBufferedReader]. aioEventHandler ifNotNil: [ buffered ifTrue: [self error: 'buffered reader already has AIO handler'] ifFalse: [aioEventHandler forFileStream: pp pipeFromOutput reader]]. blockWithRedirection := [ pp pipeToInput reader setNonBlocking. OSProcess thisOSProcess redirectStdInTo: pp pipeToInput reader. OSProcess thisOSProcess redirectStdOutTo: pp pipeFromOutput writer. OSProcess thisOSProcess redirectStdErrTo: pp pipeFromError writer. aBlock value]. parentVmProcess := OSProcess thisOSProcess. proc := headless ifTrue: [parentVmProcess forkHeadlessSqueakAndDoThenQuit: blockWithRedirection] ifFalse: [parentVmProcess forkSqueakAndDoThenQuit: blockWithRedirection]. proc pid = parentVmProcess pid ifTrue: ["child Squeak - this branch is never reached"] ifFalse: ["parent Squeak - set the child Squeak as the process proxy" pp errorPipelineStream: anErrorStream. pp initialize. ^ pp processProxy: proc] ! ! !PipeableOSProcess class methodsFor: 'instance creation' stamp: 'dtl 9/3/2010 17:33'! new: executableFile arguments: arrayOfStrings environment: stringDictionary descriptors: arrayOf3Streams workingDir: pathString errorPipelineStream: anErrorStream "Prepare to run a program in an external OS process, and answer an instance of myself which will represent the external process." "PipeableOSProcess new: '/bin/ls' arguments: #('-ls' 'hosts' 'NOSUCHFILE') environment: nil descriptors: nil workingDir: '/etc' errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself)" "PipeableOSProcess new: 'sol' arguments: nil environment: nil descriptors: nil workingDir: nil errorPipelineStream: (InternalPipe nonBlockingPipe nextPutAll: 'this is the error stream '; yourself)" | pp proc proxyClass s | pp := super new. (proxyClass := self externalProxyClass) ifNotNil: [proc := proxyClass programName: executableFile arguments: arrayOfStrings initialEnvironment: stringDictionary]. proc ifNil: [^ self notify: 'OSProcess not available']. arrayOf3Streams isNil ifTrue: [pp createPipes. proc initialStdIn: pp pipeToInput reader. proc initialStdOut: pp pipeFromOutput writer. proc initialStdErr: pp pipeFromError writer] ifFalse: [(s := (arrayOf3Streams at: 1)) isNil ifTrue: [pp createInputPipe. proc initialStdIn: pp pipeToInput reader] ifFalse: [proc initialStdIn: s]. (s := (arrayOf3Streams at: 2)) isNil ifTrue: [pp createOutputPipe. proc initialStdOut: pp pipeFromOutput writer] ifFalse: [proc initialStdOut: s]. (s := (arrayOf3Streams at: 3)) isNil ifTrue: [pp createErrorPipe. proc initialStdErr: pp pipeFromError writer] ifFalse: [proc initialStdErr: s]]. pathString ifNotNil: [proc pwd: pathString]. pp errorPipelineStream: anErrorStream. pp initialize. proc initialize. ^ pp processProxy: proc ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 9/3/2010 17:35'! remoteShell: remoteSystemName "Start a remote Unix shell on another computer" "self remoteShell: 'localhost'" | proxyClass | (proxyClass := self externalProxyClass) ifNotNil: [^ self forkAndExec: proxyClass remoteShellPath arguments: (Array with: remoteSystemName with: 'sh') environment: nil descriptors: nil workingDir: nil errorPipelineStream: nil]. ^ self notify: 'OSProcess not available' ! ! !PipeableOSProcess class methodsFor: 'examples' stamp: 'dtl 11/8/2007 20:41'! remoteShellExample: remoteUnixHostName "Start a shell on another computer using rsh, and answer the the output of some commands on the remote host. You must have security access to the remote system in order for this to work." "PipeableOSProcess remoteShellExample: 'minnow.cc.gatech.edu'" "PipeableOSProcess remoteShellExample: 'micron'" "PipeableOSProcess remoteShellExample: 'localhost'" | rsh output | rsh := self remoteShell: remoteUnixHostName. rsh exec: 'echo remote host name is '. rsh exec: 'hostname'. rsh exec: 'exit'. output := rsh output. rsh close. rsh succeeded ifTrue: [self notify: output] ifFalse: [self notify: 'remote shell failed with error message: ', rsh errorUpToEnd]. ^ rsh ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 9/3/2010 17:35'! shell "Start a Unix shell" "self shell" "self shell exec: 'ls'; exec: 'who'; close; upToEnd" | proxyClass | (proxyClass := self externalProxyClass) ifNotNil: [^ self command: proxyClass defaultShellPath]. ^ self notify: 'OSProcess not available' ! ! !PipeableOSProcess class methodsFor: 'examples' stamp: 'dtl 11/8/2007 20:41'! tkExample "Start an interactive Tk shell and send it some commands to display a user interface." "PipeableOSProcess tkExample" | wish | wish := self wish. [wish exec: 'button .b1 -text "This is button b1"'; exec: 'button .b2 -text "This is button b2"'; exec: 'button .exit -text Exit -command exit'; exec: 'pack .b1 .b2 .exit'] fork. ^ wish ! ! !PipeableOSProcess class methodsFor: 'examples' stamp: 'dtl 3/4/2002 07:21'! unixCommandPipeLine "Run a pipeline of commands in a manner similar to Unix command shell usage, and answer the result as a string." "PipeableOSProcess unixCommandPipeLine" ^ ((PipeableOSProcess command: 'ps') | 'grep squeak' | 'cut -c16-100') output! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 11/8/2007 20:40'! waitForCommand: aCommandString "Run a command in a shell process. Similar to the system(3) call in the standard C library. The active Smalltalk process waits for completion of the external command process. This just uses a simple polling loop, which is not very elegant but works well enough for most purposes." "self waitForCommand: 'echo sleeping...; sleep 3; echo I just slept for three seconds'" | proc d | d := Delay forMilliseconds: 50. proc := self command: aCommandString. proc ifNil: [self class noAccessorAvailable]. [proc isComplete] whileFalse: [d wait]. ^ proc ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 9/3/2010 17:36'! wish "Start a Tk/Tcl command interpreter" "self wish" | proxyClass | (proxyClass := self externalProxyClass) ifNotNil: [^ self command: proxyClass tkShellPath]. ^ self notify: 'OSProcess not available' ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 12/15/2007 11:49'! xon: remoteSystem command: aCommandString "Convenience method for running an X program on a remote system and displaying its window on the local display." "self xon: 'someRemoteHost' command: 'xeyes'" ^ self command: 'xon ', remoteSystem, ' ', aCommandString ! ! !PipeableOSProcess class methodsFor: 'utility' stamp: 'dtl 4/19/2003 16:41'! xterm: aCommandString "Convenience method for running a command in an external xterm window" "self xterm: 'top -d 2'" ^ self command: 'xterm -T ''', aCommandString, ''' -e ', aCommandString! ! !PipeableOSProcess class methodsFor: 'examples' stamp: 'dtl 12/15/2007 11:52'! xtermExample "Open an external xterm window running a 'top' command. Works on unix X window platforms." "self xtermExample" ^ self xterm: 'top -d 2'! ! !PipeableOSProcess methodsFor: 'command pipelines - private' stamp: 'dtl 7/7/2006 09:11'! addToErrorPipeline: aString (aString isNil or: [aString isEmpty]) ifFalse: [self errorPipelineStream nextPutAll: aString]! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 6/4/2006 15:55'! atEnd "True after processing is complete and all available data has been read from the output pipe." ^ pipeFromOutput isNil or: [pipeFromOutput atEnd] ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 11/27/2010 12:56'! close "Close pipe to proxy input. The pipes from output and error are not closed. This will result in the external process seeing end of file on its input stream, which typically causes the external process to flush any remaining data to its output and error streams, then exit. It is the responsibility of the user to wait for that data to become available, read any data of interest, then close the output and error pipes to free remaining external pipe references (see closePipes)." ^super close ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 9/3/2010 17:19'! closeOutput | p | (p := self pipeFromOutput) ifNotNil: [p removeDependent: self; close] ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 8/26/2006 12:10'! closePipeInputs "Close all pipe endpoints not used after process termination." super closePipeInputs. pipeFromError ifNotNil: [pipeFromError closeWriter] ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 9/3/2010 17:20'! closePipes "Replace the output and error pipe streams with internal pipes, and close all input and output pipes." | output out err p | self keepInitialStdOutOpen ifTrue: ["The pipe stream will be closed by the next process in the command pipeline" (p := pipeFromOutput) ifNotNil: [p triggerDataReady]] ifFalse: [(output := self pipeFromOutput) ifNotNil: [accessProtect critical: [self pipeFromOutput: InternalPipe new. out := output upToEnd. out isEmpty ifFalse: [self pipeFromOutput nextPutAll: out. self triggerOutputDataReady]. self pipeFromOutput closeWriter. output removeDependent: self; close]]]. (pipeFromError) ifNotNil: [accessProtect critical: [err := pipeFromError upToEnd. err isEmpty ifFalse: [self addToErrorPipeline: err. self triggerEvent: #errorDataReady]. pipeFromError removeDependent: self; close]]. self keepInitialStdErrOpen ifTrue: [self processProxy initialStdErr close]. self pipeToInput ifNotNil: [pipeToInput close] ! ! !PipeableOSProcess methodsFor: 'updating' stamp: 'dtl 11/21/2006 14:34'! complete super complete. self updateErrorPipelineStreamToEndOfFile! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/26/2006 14:06'! createErrorPipe "Create a pipe for the error stream from the child process." self pipeFromError: PipeJunction externalPipeClass nonBlockingPipe ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/26/2006 14:06'! createInputPipe "Create a pipe for input to the child process." self pipeToInput: PipeJunction externalPipeClass blockingPipe ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 3/26/2006 14:06'! createOutputPipe "Create a pipe for output from the child process. The pipe should later be set to nonBlocking mode only if necessary to provent Squeak VM deadlocks." self pipeFromOutput: PipeJunction externalPipeClass blockingPipe ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 2/26/2002 19:03'! createPipes pipeToInput ifNil: [self createInputPipe]. pipeFromOutput ifNil: [self createOutputPipe]. pipeFromError ifNil: [self createErrorPipe] ! ! !PipeableOSProcess methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:20'! enableErrorStreamTriggers "Set the error stream to be event driven if possible, and answer true if event driven output is supported, otherwise false." | err | (err := pipeFromError) ifNotNil: [^ err setBufferedReader]. ^ false! ! !PipeableOSProcess methodsFor: 'event handling' stamp: 'dtl 11/11/2002 22:51'! enableEventTriggers "Set the output and error streams to be event driven if possible, and answer true if event driven output is supported, otherwise false." ^ self enableOutputStreamTriggers and: [self enableErrorStreamTriggers] ! ! !PipeableOSProcess methodsFor: 'command pipelines' stamp: 'dtl 12/3/2001 20:42'! errorPipelineContents ^ self errorHasBeenRedirected ifTrue: ['' "stderr has been redirected to a file"] ifFalse: [self errorPipelineStream contents]! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! errorPipelineStream: aStream "Accumulates the error output of commands in a command pipeline. Overridden to eliminate setting self as a dependent of the error pipeline stream." errorPipelineStream := aStream ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:41'! errorUpToEnd "Answer all available characters from the error stream of my external process." ^ accessProtect critical: [super errorUpToEnd] ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 11/21/2006 14:21'! errorUpToEndOfFile "Answer all available characters from the error stream. Block and continue reading until end of file is detected." self updateErrorPipelineStreamToEndOfFile. ^ errorPipelineStream upToEnd ! ! !PipeableOSProcess methodsFor: 'evaluating' stamp: 'dtl 2/27/2002 14:46'! exec: aString "Pass aString to the child for execution. Presumably the child is running a command processor of some kind, such as a Unix shell." processProxy isRunning ifTrue: [self nextPutAll: aString; nextPut: Character lf; flush] ifFalse: [self notify: 'child process not running'] ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 9/3/2010 17:42'! flush "Flush output to the standard input stream of my external process." | p | (p := pipeToInput) ifNotNil: [p flush]! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 11/8/2007 20:38'! handlePrecedingError "The stderr stream has been redirected. If there are any characters in the errorPipelineStream, write them to the stderr stream before proceeding. Fork a process to keep reading any additional error messages from preceding processes, and write them to the redirected error. When done, close the redirected error stream (this does not affect the actual external process, which has its own file handle on the error stream). A background process is used to copy the errorPipelineStream because it is not straightforward to attach all predecessor proxies in a command pipeline to the redirected error output. This design is kludgy, but it works." | d | d := Delay forMilliseconds: 200. self setKeepInitialStdErrOpen. Processor yield. "A chance to clean up predecessor proxies in command pipeline" errorPipelineStream ifNotNil: [processProxy initialStdErr nextPutAll: errorPipelineStream upToEnd. [[self isRunning or: [self isNotYetRunning]] whileTrue: [processProxy initialStdErr nextPutAll: errorPipelineStream upToEnd. d wait]. self keepInitialStdErrOpen ifFalse: [processProxy initialStdErr close]] fork] ! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 11/8/2007 20:38'! initialize "Semaphore to protect against finalizing the output and error streams while they are being read." accessProtect := Semaphore forMutualExclusion. ^ super initialize ! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 2/27/2002 15:32'! isComplete ^ processProxy isComplete! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 3/9/2002 18:17'! isExternalProcess "Answer true if the process which I represent is an external OSProcess." ^ true! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 2/27/2002 22:50'! isNotYetRunning ^ processProxy isNotYetRunning! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 2/27/2002 22:50'! isRunning ^ processProxy isRunning! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! keepInitialStdErrOpen "True if stderr has been redirected and the handle must be kept open in case a predecessor in a command pipeline might have more error messages to write to the redirected error stream." ^ keepInitialStdErrOpen ifNil: [keepInitialStdErrOpen := false]! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! keepInitialStdErrOpen: trueOrFalse "True if stderr has been redirected and the handle must be kept open in case a predecessor in a command pipeline might have more error messages to write to the redirected error stream." keepInitialStdErrOpen := trueOrFalse! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! keepInitialStdOutOpen "If false, close the output pipe when the child exits. If true, do not close the output pipe. This should be set true for an output pipe connected to another process in a pipeline, where it is assumed that the next process will close the pipe when it is done reading from it. Otherwise, the default behavior is to close the output pipe after transferring its contents to a Smalltalk stream." ^ keepInitialStdOutOpen ifNil: [keepInitialStdOutOpen := false] ! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! keepInitialStdOutOpen: trueOrFalse "If false, close the output pipe when the child exits. If true, do not close the output pipe. This should be set true for an output pipe connected to another process in a pipeline, where it is assumed that the next process will close the pipe when it is done reading from it. Otherwise, the default behavior is to close the output pipe after transfering its contents to a Smalltalk stream." keepInitialStdOutOpen := trueOrFalse ! ! !PipeableOSProcess methodsFor: 'shell support' stamp: 'dtl 10/13/2001 11:33'! needsPrompt "After evaluating the command, a shell will want to issue a prompt" ^ true ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 11/8/2007 20:40'! next "Answer the next character from the output stream of my external process, or nil if no data is available." | s | s := accessProtect critical: [pipeFromOutput ifNotNil: [pipeFromOutput next]]. ^ s! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 11/8/2007 20:40'! next: count "Answer up to count characters from the output stream of my external process, or an empty string if no data is available." | s | s := accessProtect critical: [pipeFromOutput ifNotNil: [pipeFromOutput next: count]]. ^ s! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 11/21/2002 18:37'! nextFromError: count "Answer up to count characters from the error stream of my external process, or an empty string if no data is available. All characters are routed through the errorPipelineStream, so that they are concatenated with any preceeding error message text (possibly from a preceeding process in a command pipeline)." self updateErrorPipelineStream. ^ self errorHasBeenRedirected ifTrue: [nil] ifFalse: [self errorPipelineStream next: count] ! ! !PipeableOSProcess methodsFor: 'private' stamp: 'dtl 1/1/2011 11:11'! notifyError "Display a notifier if child exited with non-zero status, or if any of its predecessors in a command pipeline left error text in the errorPipeline." | errText | self isComplete ifTrue: [ errText := self errorPipelineContents. (errText size ~= 0) ifTrue: [self inform: self processProxy programName, ' exit status ', processProxy exitStatus printString, ', error message: ', errText] ifFalse: [(processProxy exitStatus ~= 0) ifTrue: [self inform: self processProxy programName, ' exit status ', processProxy exitStatus printString]]] ! ! !PipeableOSProcess methodsFor: 'shell support' stamp: 'dtl 10/13/2001 11:33'! nullStream ^ FileStream oldFileNamed: '/dev/null' ! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 1/20/2001 17:14'! pipeFromError ^ pipeFromError! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 9/3/2010 17:22'! pipeFromError: aPipeStream (pipeFromError := aPipeStream) ifNotNil: [pipeFromError addDependent: self] ! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 6/4/2006 17:26'! pipesAreEmpty "True after processing is complete and all available data has been read from the output pipe and the error pipe. Note: uses error handling rather than testing for pipe closed to avoid race condition." ^ (self atEndOfFile and: [pipeFromError isNil or: [pipeFromError atEndOfFile]]) and: [errorPipelineStream atEnd]! ! !PipeableOSProcess methodsFor: 'command pipelines - private' stamp: 'dtl 9/3/2010 17:23'! prepareOutputForInternalReader "Output stream will be used directly by a Smalltalk process. Set output stream characteristics accordingly." | err | super prepareOutputForInternalReader. self setKeepInitialStdOutOpen. (err := self pipeFromError) ifNotNil: [err setNonBlocking] ! ! !PipeableOSProcess methodsFor: 'command pipelines - private' stamp: 'dtl 1/18/2003 10:06'! prepareOutputForPipe "Output stream will be used by another process proxy as input. Set output stream characteristics accordingly." super prepareOutputForPipe. self setKeepInitialStdOutOpen; setBlockingOutput ! ! !PipeableOSProcess methodsFor: 'printing' stamp: 'dtl 4/8/2006 19:32'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' on '. self processProxy printOn: aStream ! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 3/3/2002 13:44'! processProxy "An internal evaluation proxy, or an external OS process proxy." ^ processProxy! ! !PipeableOSProcess methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:39'! processProxy: aProxy "An internal evaluation proxy, or an external OS process proxy. Add myself as a dependent of aProxy in order to receive notification when the process run state changes." aProxy addDependent: self. processProxy := aProxy! ! !PipeableOSProcess methodsFor: 'initialize - release' stamp: 'dtl 1/4/2003 15:45'! release self processProxy release. self pipeFromError release. ^ super release! ! !PipeableOSProcess methodsFor: 'command pipelines' stamp: 'dtl 2/28/2002 07:57'! replaceOutputStreamWith: anotherStreamOrNil "Sender is my successor in a command pipeline." processProxy isNotYetRunning ifFalse: [self error: 'too late to change the output now']. anotherStreamOrNil isNil ifFalse: [processProxy initialStdOut: anotherStreamOrNil. self pipeFromOutput: nil "Not accessible any more"] ifTrue: ["Sender is my successor in a command pipeline, but does not want to use my standard output. Therefore, dump my standard output to the null device." pipeFromOutput ifNotNil: [pipeFromOutput close. self pipeFromOutput: nil]. processProxy initialStdOut: self nullStream] ! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 9/18/2002 11:24'! requiresNonBlockingInput "A PipeJunction managed by Squeak may be subject to deadlocks associated with reading or writing an OSPipe. A PipeableOSProcess relies on the external operating system to provide process scheduling, so it will not block the Squeak VM when it is blocked on a read or a write." ^ false! ! !PipeableOSProcess methodsFor: 'private' stamp: 'dtl 8/7/2002 11:56'! setBlockingOutput "Set the pipe from the child stdout to blocking mode. This is the normal mode for a pipe, although for Squeak we set pipe outputs to nonblocking to protect ourselves from blocking the Squeak VM when reading from a pipe. Unix command pipelines use the normal blocking behavior, and let the operating system timeslice the processes to keep the rest of the world from hanging on a blocked read." Smalltalk at: #OSProcess ifPresent: [:osp | pipeFromOutput ifNotNil: [osp accessor setBlocking: self pipeFromOutput reader ioHandle]] ! ! !PipeableOSProcess methodsFor: 'command pipelines' stamp: 'dtl 12/3/2001 23:52'! setKeepInitialStdErrOpen "Send this message if stderr has been redirected and the handle must be kept open in case a predecessor in a command pipeline might have more error messages to write to the redirected error stream." self keepInitialStdErrOpen: true! ! !PipeableOSProcess methodsFor: 'command pipelines' stamp: 'dtl 1/18/2003 10:06'! setKeepInitialStdOutOpen "When child exits, do not close the output pipe. This is for an output pipe connected to another process in a pipeline, where it is assumed that the next process will close the pipe when it is done reading from it." self keepInitialStdOutOpen: true! ! !PipeableOSProcess methodsFor: 'testing' stamp: 'dtl 2/27/2002 22:51'! succeeded ^ processProxy succeeded! ! !PipeableOSProcess methodsFor: 'private' stamp: 'dtl 2/24/2013 10:25'! unixFileNumbers "Utility method for debugging. Answer the Unix file numbers for the streams associated with this instance. This may be useful for debugging file handle leaks (files or sockets being opened but never closed). When a process proxy is initially set up, it will normally have six file numbers associated with it prior to forking the child (two file numbers each for stdin, stdout, and stderr). Once the child is forked, the process proxy in Squeak will close its copies of the child ends of the pipes, so only three of the original six file numbers remain visible to Squeak." "(PipeableOSProcess command: 'who') unixFileNumbers" "(PipeableOSProcess new: '/bin/ls' arguments: #('-ls' 'hosts' 'NOSUCHFILE') environment: nil descriptors: nil workingDir: '/etc' errorPipelineStream: ((WriteStream on: String new) nextPutAll: 'this is the error stream '; yourself)) unixFileNumbers" | d | Smalltalk at: #OSProcess ifPresent: [:osp | d := Dictionary new. d at: #initialStdIn put: (osp accessor unixFileNumber: processProxy initialStdIn ioHandle). d at: #initialStdOut put: (osp accessor unixFileNumber: processProxy initialStdOut ioHandle). d at: #initialStdErr put: (osp accessor unixFileNumber: processProxy initialStdErr ioHandle). d at: #'pipeToInput writer' put: (osp accessor unixFileNumber: pipeToInput writer ioHandle). d at: #'pipeFromOutput reader' put: (osp accessor unixFileNumber: pipeFromOutput reader ioHandle). d at: #'pipeFromError reader' put: (osp accessor unixFileNumber: pipeFromError reader ioHandle). ^ d]. ^ nil ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:35'! upToEnd "Answer all available characters from the output of my external process." ^ accessProtect critical: [super upToEnd] ! ! !PipeableOSProcess methodsFor: 'streaming' stamp: 'dtl 6/3/2006 10:35'! upToEndOfFile "Answer all available characters from the output stream. Block and continue reading until end of file is detected." ^ accessProtect critical: [super upToEndOfFile] ! ! !PipeableOSProcess methodsFor: 'updating' stamp: 'dtl 9/3/2010 17:24'! update: aParameter "Clean up after processProxy exits. Remove myself as a dependent of processProxy, and close pipes." | err | (aParameter == pipeFromError) ifTrue: [accessProtect critical: [self addToErrorPipeline: pipeFromError upToEnd]. ^ self changed: self errorPipelineStream]. (aParameter == #runState) ifTrue: [processProxy isComplete ifTrue: [(err := self pipeFromError) ifNotNil: [self addToErrorPipeline: err upToEnd]. self complete. self changed: aParameter] ifFalse: [^ self]]. ^ super update: aParameter ! ! !PipeableOSProcess methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:24'! updateErrorPipelineStream "Ensure that all available error output is placed into errorPipelineStream." | p | (p := self pipeFromError) ifNotNil: [ | s | s := p upToEnd. "must be outside the critical block, race condition on #update:" accessProtect critical: [errorPipelineStream nextPutAll: s]] ! ! !PipeableOSProcess methodsFor: 'event handling' stamp: 'dtl 9/3/2010 17:25'! updateErrorPipelineStreamToEndOfFile "Move all error output up to end of file to the errorPipelineStream." | p | (p := self pipeFromError) ifNotNil: [ | s | s := p upToEndOfFile. "must be outside the critical block, race condition on #update:" accessProtect critical: [errorPipelineStream nextPutAll: s]. p close] ! ! !PipeableOSProcess methodsFor: 'evaluating' stamp: 'dtl 12/15/2007 08:54'! value "Start the external process" | p | self errorHasBeenRedirected ifTrue: [self handlePrecedingError]. accessProtect critical: [p := processProxy ifNotNil: [processProxy value]. "The external child process now owns its own copy of the pipe handles. We no longer need our copies of these handles, so close the ones that are not needed." p ifNotNil: [self keepInitialStdOutOpen ifFalse: [p closeInitialStdOut]. self keepInitialStdErrOpen ifFalse: [p closeInitialStdErr]]] ! ! !PipeableOSProcess methodsFor: 'command pipelines' stamp: 'dtl 1/18/2003 10:06'! | anotherCommandString "Pipe my output to another external process, where the other external process executes anotherCommandString." "(PipeableOSProcess command: 'ps') | 'grep squeak' | 'cut -c16-100'" self setKeepInitialStdOutOpen. self setBlockingOutput. ^ self species command: anotherCommandString pipeFrom: pipeFromOutput reader errorPipelineStream: self errorPipelineStream ! ! !RemoteTask commentStamp: 'dtl 11/12/2011 23:26' prior: 102347497! RemoteTask do: [2 + 2] A RemoteTask represents a block to be evaluated in a headless Squeak child process. The results of evaluating the block are returned to the sender through a reference stream on an OS pipe. Asynchronous event notification may be used to signal completion of remote processing. The block is evaluated in a remote headless image beginning with a clone of the sender image at the time of the message send. All side effects of evaluating the task block are localized to the remote image, and have no effect on the sending image. The result object may be an object of any complexity, such as a dictionary or array of result values. On a unix system, the creation of child Squeak images is a relatively light weight operation, so tasks of varying degrees of complexity can be assigned to remote tasks with only moderate overhead. ! !RemoteTask class methodsFor: 'evaluating' stamp: 'dtl 11/12/2011 23:23'! do: aBlock "Start a remote task and read the result object. The image will be blocked on read until completion of the remote task." "RemoteTask do: [2 + 2]" ^(self new task: aBlock) value! ! !RemoteTask class methodsFor: 'evaluating' stamp: 'dtl 11/12/2011 23:20'! do: taskBlock whenComplete: aOneArgumentBlock "Evaluate taskBlock in an image running in a separate OS process. Set the completion block, a block that takes result object as its single argument. Start remote processing with an AIO event notifier. Completion of the remote task will result in a changed notification from the event notifier, which will activate the completion block. The completion block is expected to do something useful with the result of the remote task." "n.b. Inspect the RemoteTask to prevent it being garbage collected and finalized before processing is complete" "(RemoteTask do: [2 + 2] whenComplete: [ :result | result inspect ]) inspect" "(RemoteTask do: [(Delay forSeconds: 3) wait. 2 + 2] whenComplete: [ :result | result inspect ]) inspect" ^ self new task: taskBlock whenComplete: aOneArgumentBlock! ! !RemoteTask class methodsFor: 'finalization' stamp: 'dtl 11/12/2011 23:05'! finalize: aRemoteTask aRemoteTask finalize! ! !RemoteTask class methodsFor: 'class initialization' stamp: 'dtl 11/27/2011 12:57'! initialize "Use Fuel if present in the image, otherwise use reference stream serialization" "RemoteTask initialize" "RemoteTask useFuelSerializer" "RemoteTask useReferenceStreamSerializer" (Smalltalk hasClassNamed: #FLSerializer) ifTrue: [self useFuelSerializer] ifFalse: [self useReferenceStreamSerializer] ! ! !RemoteTask class methodsFor: 'examples' stamp: 'dtl 11/13/2011 00:29'! parallelPerformance "Compare performance of three tasks run in parallel versus the equivalent serial processing. Results will vary depending on availability of CPU cores. On a quad core machine, the parallel processing should complete in well under half the time of the equivalent serial job." "RemoteTask parallelPerformance" | parallelExecutionTime results sema task1 task2 task3 serialExecutionTime p1 p2 p3 | parallelExecutionTime := Time millisecondsToRun: [ results := Array new: 3. sema := Semaphore new. task1 := [(100000000000000000000000000000 to: 100000000000000000000000019999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. task2 := [(100000000000000000000000020000 to: 100000000000000000000000039999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. task3 := [(100000000000000000000000040000 to: 100000000000000000000000059999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. "n.b. assign to variables to prevent RemoteTask from being finalized" p1 := RemoteTask do: task1 whenComplete: [:result | results at: 1 put: result. sema signal]. p2 := RemoteTask do: task2 whenComplete: [:result | results at: 2 put: result. sema signal]. p3 := RemoteTask do: task3 whenComplete: [:result | results at: 3 put: result. sema signal]. sema wait; wait; wait. results]. serialExecutionTime := Time millisecondsToRun: [ (100000000000000000000000000000 to: 100000000000000000000000019999) select: [:f | f isPrime] thenCollect: [:s | s asString]. (100000000000000000000000020000 to: 100000000000000000000000039999) select: [:f | f isPrime] thenCollect: [:s | s asString]. (100000000000000000000000040000 to: 100000000000000000000000059999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. ^ { #parallelExecutionTime -> parallelExecutionTime . #serialExecutionTime -> serialExecutionTime } ! ! !RemoteTask class methodsFor: 'examples' stamp: 'dtl 11/13/2011 00:32'! threeParallelTasks "Find all primes in a range of large integers. Divide the problem into three tasks running the three child images, and return the results to the supervisory image. Answer a tasks array and a results array, where the results array will be populated on completion of the tasks." "RemoteTask threeParallelTasks" | p1 p2 p3 results task1 task2 task3 | results := Array new: 3. task1 := [(100000000000000000000000000000 to: 100000000000000000000000019999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. task2 := [(100000000000000000000000020000 to: 100000000000000000000000039999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. task3 := [(100000000000000000000000040000 to: 100000000000000000000000059999) select: [:f | f isPrime] thenCollect: [:s | s asString]]. "n.b. Assign task to a variable to prevent RemoteTask from being finalized" p1 := RemoteTask do: task1 whenComplete: [:result | results at: 1 put: result]. p2 := RemoteTask do: task2 whenComplete: [:result | results at: 2 put: result]. p3 := RemoteTask do: task3 whenComplete: [:result | results at: 3 put: result]. ^ { #tasks -> { p1 . p2 . p3 } . #results -> results }! ! !RemoteTask class methodsFor: 'class initialization' stamp: 'dtl 11/27/2011 12:21'! useFuelSerializer "RemoteTask useFuelSerializer" "RemoteTask useReferenceStreamSerializer" SerializingStrategy := #fuel! ! !RemoteTask class methodsFor: 'class initialization' stamp: 'dtl 11/27/2011 12:26'! useReferenceStreamSerializer "RemoteTask useReferenceStreamSerializer" SerializingStrategy := #referenceStream! ! !RemoteTask methodsFor: 'finalization' stamp: 'dtl 11/12/2011 21:30'! finalize "If garbage collected before remote processing is complete, the AIO handler process should be terminated and the external process should be stopped. When evaluating a #do:whenComplete: a reference should be maintained to the RemoteTask in order to avoid this finalization." aioHandler ifNotNilDo: [:aio | aio close]. childProxy ifNotNilDo: [:child | child terminate]! ! !RemoteTask methodsFor: 'serializing' stamp: 'dtl 1/24/2013 19:13'! getResult "Materialize the result, reading serialized data from standard input" SerializingStrategy = #referenceStream ifTrue: [ | responseStream responseObject | responseStream := (Smalltalk at: #ReferenceStream) on: childProxy pipeFromOutput reader. responseObject := responseStream next. ^ responseObject]. SerializingStrategy = #fuel ifTrue: [^((Smalltalk at: #FLMaterializer ifAbsent: [self error: 'Fuel not installed']) newDefault materializeFrom: childProxy pipeFromOutput reader binary) root]. self error: 'undefined strategy ', SerializingStrategy asString ! ! !RemoteTask methodsFor: 'serializing' stamp: 'dtl 1/24/2013 19:14'! put: result "Serialize the result and write to standard output" | out | SerializingStrategy = #referenceStream ifTrue: [ out := (Smalltalk at: #ReferenceStream) on: OSProcess thisOSProcess stdOut. ^out nextPut: result]. SerializingStrategy = #fuel ifTrue: [ out := (Smalltalk at: #FLSerializer ifAbsent: [self error: 'Fuel not installed']) newDefault. ^out serialize: result on: OSProcess thisOSProcess stdOut binary]. self error: 'undefined strategy ', SerializingStrategy asString ! ! !RemoteTask methodsFor: 'finalization' stamp: 'dtl 11/12/2011 23:07'! registerForFinalization self toFinalizeSend: #finalize: to: self class with: self copy ! ! !RemoteTask methodsFor: 'evaluating' stamp: 'dtl 11/27/2011 12:26'! result "Answer the result of a previously started task. The child Squeak sends one result object back to its parent Squeak before exiting." ^self getResult ! ! !RemoteTask methodsFor: 'evaluating' stamp: 'dtl 11/27/2011 12:24'! start "Fork a headless child Squeak to evaluate my task." | childBlock result | self registerForFinalization. "Create block to be evaluated in a Squeak child process." childBlock := ["First set standard input to blocking. This avoids a delay to wait for data to be available, but note that it is dangerous to do this unless you are certain that you know in advance that the correct number of characters will be available on the input. If this is not the case, then the VM will block on the read and lock up the child squeak process." result := [self task value] on: Exception do: [:e | result := 'remote task execution failed: ', e printString]. OSProcess thisOSProcess stdIn setBlocking. self put: result. OSProcess thisOSProcess stdOut flush; close]. "Fork a child Squeak that will evaluate the childBlock then exit" childProxy := PipeableOSProcess forkSqueakAndDoThenQuit: childBlock errorPipelineStream: InternalPipe nonBlockingPipe headless: true bufferedOutput: false outputNotifier: aioHandler ! ! !RemoteTask methodsFor: 'accessing' stamp: 'dtl 1/25/2010 19:03'! task "Answer the value of task" ^ task! ! !RemoteTask methodsFor: 'accessing' stamp: 'dtl 1/25/2010 19:03'! task: anObject "Set the value of task" task := anObject! ! !RemoteTask methodsFor: 'evaluating' stamp: 'dtl 11/12/2011 23:20'! task: taskBlock whenComplete: aOneArgumentBlock "Evaluate taskBlock in an image running in a separate OS process. Set the completion block, a block that takes result object as its single argument. Start remote processing with an AIO event notifier. Completion of the remote task will result in a changed notification from the event notifier, which will activate the completion block. The completion block is expected to do something useful with the result of the remote task." "n.b. Inspect the RemoteTask to prevent it being garbage collected and finalized before processing is complete" "(RemoteTask new task: [2 + 2] whenComplete: [ :result | result inspect]) inspect" "(RemoteTask new task: [(Delay forSeconds: 3) wait. 2 + 2] whenComplete: [ :result | result inspect]) inspect" task := taskBlock. completionBlock := aOneArgumentBlock. aioHandler ifNotNil: [aioHandler close]. aioHandler := AioEventHandler new. aioHandler addDependent: self. self start ! ! !RemoteTask methodsFor: 'updating' stamp: 'dtl 11/11/2011 10:47'! update: anObject "An event handler has indicated availability of data on the pipe from the remote process. Begin reading data until the entire result object is received. The remote process will exit when complete, but possibly not until data has been read from the pipe, as it may block on write until the pipe has been serviced." (anObject isKindOf: AioEventHandler) ifTrue: [[completionBlock ifNotNil: [completionBlock value: self result]] ensure: [anObject close]]! ! !RemoteTask methodsFor: 'evaluating' stamp: 'dtl 11/27/2011 11:34'! value "Start a remote task and read the result object. The child Squeak sends one result object back to its parent Squeak before exiting." "(RemoteTask new task: [2 + 2]) value" self start. ^self result ! ! "CommandShell-Piping"! !CrLfFileEditor commentStamp: '' prior: 0! I provide an editor on a single file. I attempt to avoid changing the line termination character convention when writing my text back to a file. Bug: On older Squeak systems which do not support FilesStream>>truncate, file permissions may be lost when a file is rewritten at a shorter length. ! !ShellBuiltin commentStamp: 'dtl 2/1/2003 12:25' prior: 0! A shell builtin command, intended to be invoked by a CommandShell. A builtin command consists of: name - a String identifier, used by the CommandShell to identify and invoke the commmand. helpString - a String to describe the function of the command. procedure - a BlockContext with parameters to be passed by the CommandShell. Commands are implemented in instance methods. To create a new command, write a new command implementation method and a new help method for the command. Write a new class side instance creation method patterned after one of the existing commands and install the instance creation method in an instance of CommandShell with CommandShell>>installCommand:. A command implementation is a method which receives six paramaters. The parameters are to be interpreted as follows: - First parameter: The EvaluatorProxy which is evaluating the command. If a command fails, send #fail to this object. - Second parameter: The CommandShell from which the command was evaluated. Use this for any additional parsing which may be required in the command implementation. - Third parameter: The input stream for the command. - Forth parameter: The output stream for the command. - Fifth parameter: The error stream for the command. - Sixth parameter: An array of optional command arguments. ! !CrLfFileEditor commentStamp: '' prior: 102456714! I provide an editor on a single file. I attempt to avoid changing the line termination character convention when writing my text back to a file. Bug: On older Squeak systems which do not support FilesStream>>truncate, file permissions may be lost when a file is rewritten at a shorter length. ! !CrLfFileEditor class methodsFor: 'private' stamp: 'dtl 12/15/2007 13:38'! defaultLineEndConvention "FIXME: The Unix and Win32 are right, but I just guessed at the others - dtl" | platform | platform := ShellSyntax new platformName. (platform = 'unix') ifTrue: [^ #lf]. (platform = 'Win32') ifTrue: [^ #crlf]. (platform = 'Mac OS') ifTrue: [^ #cr]. (platform = 'RiscOS') ifTrue: [^ #cr]. (platform = 'OS2') ifTrue: [^ #crlf]. "FIXME: Is this the right name for OS2?" "Add other system types here..." ^ #cr ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 9/12/2002 10:16'! editFileNamed: pathName "CrLfFileEditor editFileNamed: '/etc/hosts'" "CrLfFileEditor editFileNamed: '/NO/SUCH/FILE'" "CrLfFileEditor editFileNamed: '/etc/NOSUCHFILE)'" ^ Cursor read showWhile: [self openForFileNamed: pathName]. ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 9/12/2002 11:38'! fileNamed: pathName "Answer a Controller or Morph as view on an instance of myself." "CrLfFileEditor fileNamed: '/etc/hosts'" "CrLfFileEditor fileNamed: '/NO/SUCH/FILE'" "CrLfFileEditor fileNamed: '/etc/NOSUCHFILE'" ^ self fileNamed: pathName withLabel: pathName ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'ThierryGoubier 9/20/2013 15:14'! fileNamed: pathName inDirectoryPath: dirPath "Answer a Controller or Morph as view on an instance of myself." "CrLfFileEditor fileNamed: '/etc/hosts' inDirectoryPath: '/usr/bin'" "CrLfFileEditor fileNamed: 'bin/vi' inDirectoryPath: '/usr'" "CrLfFileEditor fileNamed: 'hosts' inDirectoryPath: '/etc'" "CrLfFileEditor fileNamed: 'hosts' inDirectoryPath: '/usr/bin'" "CrLfFileEditor fileNamed: '/NO/SUCH/FILE' inDirectoryPath: '/etc'" "CrLfFileEditor fileNamed: '/etc/NOSUCHFILE' inDirectoryPath: '/etc'" | dir fs convention editText | dir := CommandShell directoryForPath: dirPath. (dir fileExists: pathName) ifTrue: [[fs := (Smalltalk at: #CrLfFileStream) readOnlyFileNamed: dirPath, CommandShell pathSeparator, pathName. convention := fs detectLineEndConvention. editText := fs contentsOfEntireFile. fs close] on: Error do: [:ex | convention := #lf. "Default for Unix text files" editText := '']] ifFalse: [convention := #lf. "Default for Unix text files" editText := '']. ^ self on: editText withLabel: pathName inDirectory: dir defaultFileName: pathName lineEndConvention: convention ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'ThierryGoubier 9/20/2013 15:14'! fileNamed: pathName withLabel: windowLabel "Answer a Controller or Morph as view on an instance of myself." "CrLfFileEditor fileNamed: '/etc/hosts' withLabel: 'an editor on /etc/hosts'" | dirPath dir fs convention editText localName | dirPath := CommandShell dirPathFor: pathName. dir := CommandShell directoryForPath: dirPath.. localName := CommandShell localNameFor: pathName. (CommandShell fileExists: localName inDirectory: dir) ifTrue: [[fs := (Smalltalk at: #CrLfFileStream) readOnlyFileNamed: pathName. convention := fs detectLineEndConvention. editText := fs contentsOfEntireFile. fs close] on: Error do: [:ex | convention := #lf. "Default for Unix text files" editText := '']] ifFalse: [convention := #lf. "Default for Unix text files" editText := '']. ^ self on: editText withLabel: windowLabel inDirectory: dir defaultFileName: localName lineEndConvention: convention ! ! !CrLfFileEditor class methodsFor: 'class initialization' stamp: 'dtl 11/29/2010 22:10'! initialize "CrLfFileEditor initialize" | preferencesClass | (Smalltalk hasClassNamed: #Preferences) ifTrue: ["Pharo deprecates Preference in favor of pragma registration mechanism" preferencesClass := Smalltalk at: #Preferences. (preferencesClass respondsTo: #setWindowColorFor:to: ) ifTrue: ["Squeak" preferencesClass setWindowColorFor: #CommandShell to: (Color colorFrom: self windowColorSpecification pastelColor)] ifFalse: ["Pharo images use some other preferences protocol"]]. ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 9/12/2002 10:10'! on: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString "(CrLfFileEditor on: 'this is the string to edit' withLabel: 'this is the window label' inDirectory: FileDirectory default defaultFileName: 'buffer.txt') openInWorld" ^ self on: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString lineEndConvention: self defaultLineEndConvention ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 9/12/2002 10:09'! on: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString lineEndConvention: convention "(CrLfFileEditor on: 'this is the string to edit' withLabel: 'this is the window label' inDirectory: FileDirectory default defaultFileName: 'buffer.txt' lineEndConvention: #lf) openInWorld" | model | model := self new contents: aString. model directory: aDirectory. model fileName: nameString. model lineEndConvention: convention. ^ model withLabel: aLabelString ! ! !CrLfFileEditor class methodsFor: 'private' stamp: 'dtl 6/29/2010 21:09'! openForFileNamed: pathName "CrLfFileEditor openForFileNamed: '/etc/hosts'" "CrLfFileEditor openForFileNamed: '/NO/SUCH/FILE'" "CrLfFileEditor openForFileNamed: '/etc/NOSUCHFILE'" ^ CommandShell isMorphic ifTrue: [(self fileNamed: pathName) openInWorld] ifFalse: [(self fileNamed: pathName) open] ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 9/12/2002 10:10'! openOn: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString "CrLfFileEditor openOn: 'this is the string to edit' withLabel: 'this is the window label' inDirectory: FileDirectory default defaultFileName: 'buffer.txt'" ^ self openOn: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString lineEndConvention: self defaultLineEndConvention ! ! !CrLfFileEditor class methodsFor: 'instance creation' stamp: 'dtl 12/13/2007 21:08'! openOn: aString withLabel: aLabelString inDirectory: aDirectory defaultFileName: nameString lineEndConvention: convention "CrLfFileEditor openOn: 'this is the string to edit' withLabel: 'this is the window label' inDirectory: FileDirectory default defaultFileName: 'buffer.txt' lineEndConvention: #lf" | model | model := self new contents: aString. model directory: aDirectory. model fileName: nameString. model lineEndConvention: convention. ^ model openLabel: aLabelString ! ! !CrLfFileEditor class methodsFor: 'window color' stamp: 'dtl 6/29/2010 00:07'! windowColorSpecification "Answer a WindowColorSpec object that declares my preference" | windowColorSpec | windowColorSpec := Smalltalk at: #WindowColorSpec ifAbsent: [^self error: 'this image does not support WindowColorSpec']. ^ windowColorSpec classSymbol: self name wording: 'Squeak Shell File Editor' brightColor: Color lightOrange pastelColor: Color lightOrange paler paler helpMessage: 'CrLfFileEditor window for CommandShell ''edit'' comand' ! ! !CrLfFileEditor methodsFor: 'private' stamp: 'ThierryGoubier 9/20/2013 15:14'! bogusTruncate: fileStream "Truncate the file by brute force if FileStream>>truncate is not supported on this system. Note that this does not preserve file permissions." | name | name := fileStream name. fileStream close. CommandShell deleteFileNamed: name inDirectory: directory. ^ (Smalltalk at: #CrLfFileStream) fileNamed: name ! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 1/27/2013 17:53'! browseChanges "Browse in fileIn format." | fs | fs := CommandShell fileNamed: fileName inDirectory: directory. ChangeList browseStream: fs. fs close ! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'dtl 1/26/2013 12:29'! contents ^ viewStyle == #hex ifTrue: [self hexFormat: contents] ifFalse: [contents] ! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'dtl 1/26/2013 12:30'! contents: aString viewStyle == #hex ifTrue: [self inform: 'cannot update in hex mode'] ifFalse: [^ super contents: aString]! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 6/29/2010 21:08'! controllerForAccept "Find the controller or morph which expects the #accept message" | controller view | CommandShell isMorphic ifTrue: [controller := dependents detect: [:e | e respondsTo: #accept] ifNone: [nil]] ifFalse: [view := dependents detect: [:e | e controller respondsTo: #accept] ifNone: [nil]. controller := view isNil ifTrue: [nil] ifFalse: [view controller]]. ^ controller! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'dtl 1/27/2013 18:05'! currentFilePathName ^ (CommandShell dirPathFor: directory), CommandShell pathSeparator, fileName! ! !CrLfFileEditor methodsFor: 'initialize-release' stamp: 'dtl 12/13/2007 20:57'! defaultFont "A fixed width font suitable for displaying output of shell command lines" ^ StrikeFont familyName: 'Atlanta' size: 11 emphasized: 0! ! !CrLfFileEditor methodsFor: 'accessing' stamp: 'dtl 5/19/2001 17:40'! directory: aDirectory directory := aDirectory! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 6/29/2010 21:09'! exit self changed: #accept. CommandShell isMorphic ifTrue: [dependents do: [:d | (d respondsTo: #closeBoxHit) ifTrue: [d closeBoxHit]]] ifFalse: [dependents first controller closeAndUnschedule]! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'ThierryGoubier 9/20/2013 15:17'! fileContentsMenu: aMenu shifted: shifted | shiftMenu | ^ shifted ifFalse: [aMenu labels: 'save save as... exit view as hex view as text browse changes find...(f) find again (g) set search string (h) do again (j) undo (z) copy (c) cut (x) paste (v) paste... do it (d) print it (p) inspect it (i) fileIn selection accept (s) cancel (l) more...' lines: #(3 6 9 11 15 19 21) selections: #(save saveAs exit getHex getText browseChanges find findAgain setSearchString again undo copySelection cut paste pasteRecent doIt printIt inspectIt fileItIn accept cancel shiftedYellowButtonActivity)] ifTrue: [shiftMenu := (Smalltalk at: #ParagraphEditor) shiftedYellowButtonMenu. aMenu labels: shiftMenu labelString lines: shiftMenu lineArray selections: shiftMenu selections] ! ! !CrLfFileEditor methodsFor: 'accessing' stamp: 'dtl 5/19/2001 17:01'! fileName: aString fileName := aString! ! !CrLfFileEditor methodsFor: 'private' stamp: 'dtl 6/29/2001 23:21'! forceDirtyBuffer "This will force the view to behave as if it had been edited. Call this to enable a file save even if the text has not actually been edited by the user." | controller | controller := self dependents detect: [:e | e respondsTo: #hasUnacceptedEdits:] ifNone: [self dependents collect: [:d | d controller] thenSelect: [:c | c respondsTo: #hasUnacceptedEdits:]]. controller hasUnacceptedEdits: true. ! ! !CrLfFileEditor methodsFor: 'private' stamp: 'ThierryGoubier 9/20/2013 15:16'! getAnotherFileName: initialFileName | choice newFileName | choice := ((Smalltalk at: #PopUpMenu) labels: 'choose another name\cancel' withCRs) startUpWithCaption: initialFileName. choice = 1 ifTrue: [newFileName := (Smalltalk at: #FillInTheBlank) request: 'Enter a new file name' initialAnswer: initialFileName. newFileName := (CommandShell fileExists: newFileName inDirectory: directory) ifTrue: [self getFileName: newFileName] ifFalse: [newFileName]. ^ newFileName]. ^ nil! ! !CrLfFileEditor methodsFor: 'private' stamp: 'ThierryGoubier 9/20/2013 15:16'! getFileName: initialFileName | choice newFileName | choice := ((Smalltalk at: #PopUpMenu) labels: 'overwrite that file\choose another name\cancel' withCRs) startUpWithCaption: initialFileName, ' already exists.'. choice = 1 ifTrue: [^ initialFileName]. choice = 2 ifTrue: [newFileName := (Smalltalk at: #FillInTheBlank) request: 'Enter a new file name' initialAnswer: initialFileName. newFileName := (CommandShell fileExists: newFileName inDirectory: directory) ifTrue: [self getFileName: newFileName] ifFalse: [newFileName]. ^ newFileName]. ^ nil! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 5/20/2001 12:46'! getHex Cursor read showWhile: [self viewStyle: #hex. self changed: #contents] ! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'dtl 5/26/2001 18:23'! getSelection ^ 1 to: 0 "null selection"! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 5/20/2001 14:01'! getText Cursor read showWhile: [self viewStyle: #text. self changed: #contents] ! ! !CrLfFileEditor methodsFor: 'private' stamp: 'dtl 5/20/2001 14:25'! hexFormat: aString "CrLfFileEditor new hexFormat: 'this is a test of the HEX string reformat method'" | s | s := WriteStream on: (String new: aString size*4). 0 to: aString size-1 by: 16 do: [:loc | s nextPutAll: loc hex; space; nextPut: $(; print: loc; nextPut: $); space; tab. loc+1 to: (loc+16 min: aString size) do: [:i | s nextPutAll: (aString at: i) hex; space]. s cr]. ^ s contents. ! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'dtl 5/20/2001 21:22'! labelString "For views to use a labels" ^ self currentFilePathName! ! !CrLfFileEditor methodsFor: 'accessing' stamp: 'dtl 5/19/2001 17:01'! lineEndConvention: aSymbol "See CrLfFileStream for the allowable values of aSymbol." lineEndConvention := aSymbol! ! !CrLfFileEditor methodsFor: 'initialize-release' stamp: 'ThierryGoubier 9/20/2013 15:18'! mvcWithLabel: aLabelString | topView controllerClass fileContentsView | CommandShell isMorphic ifTrue: [ ^ self error: 'this method should be used only for MVC' ]. topView := (Smalltalk at: #StandardSystemView) new. controllerClass := Smalltalk at: #DeferredActionStandardSystemController ifAbsent: [ Smalltalk at: #StandardSystemController ]. topView model: self; controller: controllerClass new; label: aLabelString; minimumSize: 200 @ 200. topView borderWidth: 1. fileContentsView := (Smalltalk at: #PluggableTextView) on: self text: #contents accept: #put: readSelection: #contentsSelection menu: #fileContentsMenu:shifted:. fileContentsView window: (0 @ 0 extent: 200 @ 140). topView addSubView: fileContentsView. ^ topView controller! ! !CrLfFileEditor methodsFor: 'initialize-release' stamp: 'dtl 12/13/2007 20:57'! openAsMorphLabel: aLabelString | window textMorph | textMorph := PluggableTextMorph on: self text: #contents accept: #put: readSelection: #contentsSelection menu: #fileContentsMenu:shifted:. textMorph font: self defaultFont. window := (SystemWindow labelled: aLabelString) model: self. window addMorph: textMorph frame: (0@0 corner: 1@1). ^ window! ! !CrLfFileEditor methodsFor: 'initialize-release' stamp: 'dtl 6/29/2010 21:09'! openLabel: aLabelString CommandShell isMorphic ifTrue: [^ (self openAsMorphLabel: aLabelString) openInWorld] ifFalse: [^ (self mvcWithLabel: aLabelString) open] ! ! !CrLfFileEditor methodsFor: 'model access' stamp: 'ThierryGoubier 9/20/2013 15:15'! put: aText | str newFileName fs | viewStyle == #hex ifTrue: [self inform: 'cannot save file in hex mode'. ^ false]. str := aText asString. self contents: str. (CommandShell fileExists: fileName inDirectory: directory) ifTrue: [newFileName := self getFileName: (CommandShell pathNameForDirectory: directory), CommandShell pathSeparator , fileName.] ifFalse: [newFileName := (CommandShell pathNameForDirectory: directory), CommandShell pathSeparator , fileName]. newFileName ifNil: [^ false]. fs := (Smalltalk at: #CrLfFileStream) fileNamed: newFileName. [fs isNil] whileTrue: [self inform: 'cannot write file'. newFileName := self getAnotherFileName: newFileName. newFileName isNil ifTrue: [self inform: 'file not written'. ^ false] ifFalse: [fs := (Smalltalk at: #CrLfFileStream )fileNamed: newFileName]]. (str size < fs size) ifTrue: [(fs respondsTo: #truncate) ifTrue: [[fs truncate] on: Error do: [:ex | fs := self bogusTruncate: fs]] ifFalse: [fs := self bogusTruncate: fs]]. fs nextPutAll: str. fs close. self updateFilePathWith: newFileName. ^ true! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 6/29/2001 23:22'! save | controller | self forceDirtyBuffer. controller := self controllerForAccept. controller ifNotNil: [controller accept] ! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'ThierryGoubier 9/20/2013 15:17'! saveAs | oldFilePath newFilePath controller | oldFilePath := self currentFilePathName. newFilePath := (Smalltalk at: #FillInTheBlank) request: 'Enter a new file name' initialAnswer: oldFilePath. newFilePath isEmpty ifFalse: [self updateFilePathWith: newFilePath. controller := self controllerForAccept. controller ifNotNil: [self forceDirtyBuffer. controller accept]] ! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 5/20/2001 19:39'! selectedClassOrMetaClass "For support of the pretty printer menu option" ^ self class! ! !CrLfFileEditor methodsFor: 'menus' stamp: 'dtl 5/20/2001 19:37'! selectedMessageCategoryName "For support of the pretty printer menu option" ^ '-- all --'! ! !CrLfFileEditor methodsFor: 'private' stamp: 'dtl 1/27/2013 22:33'! updateFilePathWith: aPathString self fileName: (CommandShell localNameFor: aPathString). self directory: (CommandShell directoryForPath: aPathString). self changed: #relabel ! ! !CrLfFileEditor methodsFor: 'accessing' stamp: 'dtl 5/20/2001 12:45'! viewStyle: aSymbol "#text or #hex" viewStyle := aSymbol! ! !CrLfFileEditor methodsFor: 'initialize-release' stamp: 'dtl 6/29/2010 21:09'! withLabel: aLabelString "Same as #openLabel: but does not open the window in MVC" CommandShell isMorphic ifTrue: [^ self openAsMorphLabel: aLabelString] ifFalse: [^ self mvcWithLabel: aLabelString] ! ! !ShellBuiltin commentStamp: 'dtl 2/1/2003 12:25' prior: 102457069! A shell builtin command, intended to be invoked by a CommandShell. A builtin command consists of: name - a String identifier, used by the CommandShell to identify and invoke the commmand. helpString - a String to describe the function of the command. procedure - a BlockContext with parameters to be passed by the CommandShell. Commands are implemented in instance methods. To create a new command, write a new command implementation method and a new help method for the command. Write a new class side instance creation method patterned after one of the existing commands and install the instance creation method in an instance of CommandShell with CommandShell>>installCommand:. A command implementation is a method which receives six paramaters. The parameters are to be interpreted as follows: - First parameter: The EvaluatorProxy which is evaluating the command. If a command fails, send #fail to this object. - Second parameter: The CommandShell from which the command was evaluated. Use this for any additional parsing which may be required in the command implementation. - Third parameter: The input stream for the command. - Forth parameter: The output stream for the command. - Fifth parameter: The error stream for the command. - Sixth parameter: An array of optional command arguments. ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! cd: commandShell "Define command to set the current working directory. Answer an empty string or #invalidCommand." ^ self name: 'cd' help: #cdHelp procedure: #cdCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! clear: commandShell "Define command to clear the terminal display screen. Answer a string or an invalid command message." ^ self name: 'clear' help: #clearHelp procedure: #clearCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'command dictionary creation' stamp: 'dtl 7/14/2002 12:11'! commandDictionaryFor: aCommandShell commands: commandNameArray "Answer a Dictionary of ShellBuiltin instances suitable for use by a CommandShell" "ShellBuiltin commandDictionaryFor: CommandShell new commands: #(cd: clear: copyToError: copyToOutput: edit: exit: fc: help: history: inspect: pwd: sls: sqsh: type:)" ^ commandNameArray inject: Dictionary new into: [:d :cmd | | b | b := self perform: cmd with: aCommandShell. d at: b name put: b; yourself]! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! copyToError: commandShell "Define command to copy the contents of (argArray at: 1) or stdin onto stderr. This command exists only for purposes of testing stdin and pipelines for PipeableEvaluator proxies." ^ self name: 'copyToError' help: nil procedure: #copyToErrorCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! copyToOutput: commandShell "Define command to copy the contents of (argArray at: 1) or stdin onto stdout. This command exists only for purposes of testing stdin and pipelines for PipeableEvaluator proxies." ^ self name: 'copyToOutput' help: nil procedure: #copyToOutputCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! edit: commandShell "Define command to open an editor on each of the named files." ^ self name: 'edit' help: #editHelp procedure: #editCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! exit: commandShell "Define command to exit the shell window. Answer a string or an invalid command message." ^ self name: 'exit' help: #exitHelp procedure: #exitCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! fc: commandShell "Define 'fix command' command. If argArray is emply, answer the last command in the history list. If there is one argument, interpret it as an integer index into the history list. Otherwise answer an invalid command message." ^ self name: 'fc' help: #fcHelp procedure: #fcCommand:shell:input:output:error:arguments: needsPrompt: false ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:03'! help: commandShell "Define command to display help messages." ^ self name: 'help' help: #helpHelp procedure: #helpCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! history: commandShell "Define command to display the command history list." ^ self name: 'history' help: #historyHelp procedure: #historyCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! inspect: commandShell "Define command to open a Smalltalk inspector on the contents of stdin, or the file(s) named on the command line." ^ self name: 'inspect' help: #inspectHelp procedure: #inspectCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'private' stamp: 'dtl 1/4/2002 21:28'! name: aString help: helpSelector procedure: procedureSelector needsPrompt: trueOrFalse "Command definition methods use this method to create instances representing shell builtin commands. The commands are installed in a CommandShell, and later evaluated in the context of a PipeableEvaluator." ^ self new name: aString; helpSelector: helpSelector; procedureSelector: procedureSelector; needsPrompt: trueOrFalse ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! pwd: commandShell "Define command to answer the current working directory (a string) or an invalid command message." ^ self name: 'pwd' help: #pwdHelp procedure: #pwdCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! sls: commandShell "Define command to for a simple directory contents lister" ^ self name: 'sls' help: #slsHelp procedure: #slsCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! snapshot: commandShell "Define command to save the Squeak image." ^ self name: 'snapshot' help: #snapshotHelp procedure: #snapshotCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! sqsh: commandShell "Define command to open a new shell window." ^ self name: 'sqsh' help: #sqshHelp procedure: #sqshCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! ttyExit: commandShell "Define command to exit the Squeak shell and quit Squeak without saving the image." ^ self name: 'exit' help: #ttyExitHelp procedure: #ttyExitCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin class methodsFor: 'instance creation' stamp: 'dtl 8/4/2002 19:04'! type: commandShell "Define command to answer how each name would be interpreted if used as a command name." ^ self name: 'type' help: #typeHelp procedure: #typeCommand:shell:input:output:error:arguments: needsPrompt: true ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 8/7/2002 12:56'! canAccessOSProcess "True if OSProcess is in the image and if the OSProcess plugin is functioning properly" "self canAccessOSProcess" | osp | ^ (osp := Smalltalk at: #OSProcess ifAbsent: []) notNil and: [osp accessor canAccessSystem] ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 1/25/2013 19:37'! cdCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Set the current working directory. Answer an empty string or #invalidCommand." | newPath path arg pathCwd p | argArray size == 0 ifTrue: [newPath := commandShell home] ifFalse: [argArray size == 1 ifTrue: [path := argArray at: 1. (path = commandShell shellSyntax pathStringAboveRoot) ifTrue: [newPath := commandShell shellSyntax pathAboveRoot] ifFalse: [pathCwd := commandShell shellSyntax getCwdForPath: path. arg := (path = CommandShell pathSeparator) ifTrue: [path] ifFalse: [commandShell shellSyntax firstExpandedArgument: path inDirectoryPath: pathCwd]. newPath := arg isEmpty ifTrue: [arg] ifFalse: [p := commandShell shellSyntax newDirPath: arg from: pathCwd. p ifNotNil: [CommandShell fullNameFor: p]]]] ifFalse: [myProxy fail. ^ commandShell invalidCommandMessage]]. newPath isNil ifTrue: ["No directory found with this name" myProxy fail. stderr nextPutAll: argArray first, ': No such file or directory'; nextPut: Character lf] ifFalse: [(commandShell workingDirectory ~= newPath) ifTrue: [(newPath isEmpty or: [commandShell shellSyntax isDirectoryPath: newPath]) ifTrue: [commandShell workingDirectory: newPath. commandShell changed: #relabel. commandShell environment ifNotNil: [commandShell environment at: #PWD put: commandShell workingDirectory]] ifFalse: ["File of this name exists, but is not a directory" myProxy fail. stderr nextPutAll: newPath, ': not a directory'; nextPut: Character lf]]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 19:58'! cdHelp ^ 'cd [path] - change default directory'! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 8/4/2002 19:38'! clearCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Clear the terminal display screen. Answer a string or an invalid command message." argArray size == 0 ifFalse: [myProxy fail. ^ commandShell invalidCommandMessage]. commandShell startUpInNewSession. commandShell changed: #clearText ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 19:59'! clearHelp ^ 'clear - clear screen' ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 1/25/2013 19:17'! copyToErrorCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Copy the contents of (argArray at: 1) or stdin onto stderr. This command exists only for purposes of testing stdin and pipelines for PipeableEvaluator proxies." | fs | (argArray isNil or: [argArray size == 0]) ifTrue: [stdin ifNotNil: [self copyUntilDoneFrom: stdin to: stderr]] ifFalse: [argArray do: [:file | (CommandShell fileExists: file) ifTrue: [fs := FileStream readOnlyFileNamed: file. fs ifNotNil: [self copyUntilDoneFrom: fs to: stderr. fs close]]]] ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 1/25/2013 19:17'! copyToOutputCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Copy the contents of (argArray at: 1) or stdin onto stdout. This command exists only for purposes of testing stdin and pipelines for PipeableEvaluator proxies." | fs | (argArray isNil or: [argArray size == 0]) ifTrue: [stdin ifNotNil: [self copyUntilDoneFrom: stdin to: stdout]] ifFalse: [argArray do: [:file | (CommandShell fileExists: file) ifTrue: [fs := FileStream readOnlyFileNamed: file. fs ifNotNil: [self copyUntilDoneFrom: fs to: stdout. fs close]]]] ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 4/8/2007 10:21'! copyUntilDoneFrom: aPipe to: aStream "Copy the contents of aPipe to aStream, where aPipe is the output of a process proxy. Whenever new data is available, aPipe will trigger #dataReady. This method responds to the #dataReady events until the end of the pipe is reached. It is possible for the #atEnd check to give a false negative, so a timeout alarm is used to prevent deadlock conditions." | sema s | sema := Semaphore new. aPipe when: #dataReady send: #signal to: sema. [aPipe atEndOfFile] whileFalse: [self timeoutAfter: 200 notifying: sema. sema wait. "Wait for data available" [(s := aPipe next: 10000) isEmpty] whileFalse: [aStream nextPutAll: s; flush]]. aPipe release. ^ aStream ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 1/26/2013 15:24'! dirEntryString: aDirectoryEntry "Original code lifted from Lex Spoon's FileList>>fileNameFormattedFrom:sizePad:" "self new dirEntryString: FileDirectory default entries first" | folderString nameStr dateStr sizeStr date time | folderString := ' [...]'. CommandShell useFileSystem ifTrue: [nameStr := aDirectoryEntry isDirectory ifTrue: [(aDirectoryEntry perform: #basename), folderString] ifFalse: [aDirectoryEntry perform: #basename]. date := aDirectoryEntry modificationTime asDate. time := aDirectoryEntry modificationTime asTime. sizeStr := aDirectoryEntry size asStringWithCommas] ifFalse: [nameStr := aDirectoryEntry isDirectory ifTrue: [aDirectoryEntry name , folderString] ifFalse: [aDirectoryEntry name]. date := Date fromSeconds: aDirectoryEntry modificationTime. time := Time fromSeconds: aDirectoryEntry modificationTime \\ 86400. sizeStr := aDirectoryEntry fileSize asStringWithCommas]. dateStr := (date printFormat: #(3 2 1 $. 1 1 2)) , ' ' , (String streamContents: [:s | time print24: true on: s]). ^ nameStr , ' (' , dateStr , ' ' , sizeStr , ')' ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 1/28/2013 21:45'! editCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Open an editor on each of the named files." | controllers inputString expandedName | (argArray isNil or: [argArray size == 0]) ifTrue: ["When taking input from a command pipeline, the input must be read into inputString now. This is because, in MVC, the CrLfFileEditor is scheduled to be created later, and the input pipe will be closed by the caller of this method before the CrLfFileEditor ever has a chance to read it." | workingDir | inputString := stdin isNil ifTrue: [''] ifFalse: [(self copyUntilDoneFrom: stdin to: (WriteStream on: String new)) contents replaceAll: Character lf with: Character cr]. workingDir := CommandShell useFileSystem ifTrue: [commandShell workingDirectory perform: #asFileReference] ifFalse: [(Smalltalk at: #FileDirectory) on: commandShell workingDirectory]. commandShell scheduleToEvaluate: [CrLfFileEditor openOn: inputString withLabel: (commandShell commandHistory isEmpty ifTrue: [''] ifFalse: [commandShell commandHistory last]) inDirectory: workingDir defaultFileName: 'buffer.txt']] ifFalse: [controllers := argArray collect: [:arg | "Expand arguments to convert them to full pathnames as expected by CrLfFileEditor" expandedName := commandShell shellSyntax firstExpandedArgument: arg inDirectoryPath: commandShell shellSyntax workingDirectory. CrLfFileEditor fileNamed: expandedName withLabel: arg]. CommandShell isMorphic ifFalse: [controllers inject: nil into: [:prev :c | prev ifNotNil: [c addDeferredUIMessage: [prev open]]. c]. commandShell scheduleToEvaluate: [controllers last open]] ifTrue: [controllers do: [:e | WorldState addDeferredUIMessage: [e openInWorld]]]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:00'! editHelp ^ 'edit [files...] - edit the contents of stdin or the named files' ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 8/4/2002 19:38'! exitCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Exit the shell window. Answer a string or an invalid command message." argArray size == 0 ifFalse: [myProxy fail. ^ commandShell invalidCommandMessage]. commandShell changed: #exit ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:00'! exitHelp ^ 'exit - exit shell and close window'! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 9/15/2012 19:00'! fcCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Fix command. If argArray is emply, answer the last command in the history list. If there is one argument, interpret it as an integer index into the history list. Otherwise answer an invalid command message." | index cmd | commandShell commandHistory ifNotNil: [commandShell scheduleToEvaluate: [argArray size == 0 ifTrue: [cmd := commandShell editCommand: (commandShell historyAt: 0)] ifFalse: [[index := (argArray at: 1) asNumber] on: Error do: [:ex | index := nil]. cmd := commandShell editCommand: (index isNil ifTrue: [''] ifFalse: [commandShell historyAt: index])]. commandShell notifyPrompt. cmd isEmpty ifFalse: [commandShell outputStream nextPutAll: cmd; cr; flush; processCommand: cmd echo: false]]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:01'! fcHelp ^ 'fc [i] - "fix command", command number i from history list, or -i, or the last command' ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 2/24/2013 10:25'! helpCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray | topic command cacheStream | argArray size == 0 ifTrue: [cacheStream := WriteStream on: String new. (commandShell builtinCommands collect: [:c | c helpSelector] thenSelect: [:s | s notNil]) asArray sort do: [:sel | cacheStream nextPutAll: (self perform: sel); nextPut: Character lf]. cacheStream nextPutAll: 'simple Smalltalk expression!! evaluates a simple expression as a doIt'; nextPut: Character lf; nextPutAll: ' to interrupt a running program'; nextPut: Character lf; nextPutAll: ' to end input to a running program'; nextPut: Character lf. stdout nextPutAll: cacheStream contents] ifFalse: [topic := argArray at: 1. command := commandShell builtinCommands at: topic ifAbsent: [^ self]. command helpSelector ifNotNil: [stdout nextPutAll: (self perform: command helpSelector); nextPut: Character lf]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:01'! helpHelp ^ 'help - help on sqsh commands' ! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/31/2001 20:08'! helpSelector ^ helpSelector! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/31/2001 20:08'! helpSelector: aSymbol helpSelector := aSymbol! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 12/29/2002 10:45'! historyCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Display the command history list." | ws rs | ws := WriteStream on: Character lf asString. rs := ReadStream on: commandShell commandHistory. [rs atEnd] whileFalse: [ws nextPutAll: rs next. ws nextPutAll: ' '. ws nextPutAll: rs next. rs atEnd ifFalse: [ws nextPut: Character lf]]. stdout nextPutAll: (ws contents, Character lf asString) ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:02'! historyHelp ^ 'history - display command history list' ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 12/23/2007 00:41'! imageName "After Squeak version 3.6, #imageName was moved to SmalltalkImage " ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk imageName]) current imageName! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 1/25/2013 19:17'! inspectCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Open a Smalltalk inspector on the contents of stdin, or the file(s) named on the command line." | fs inputString pathName | (argArray isNil or: [argArray size == 0]) ifTrue: [stdin ifNotNil: ["When taking input from a command pipeline, the input must be read into inputString now. This is because, in MVC, the inspector is scheduled to be created later, and the input pipe will be closed by the caller of this method before the deferred block ever has a chance to read it." inputString := stdin ifNotNil: [(self copyUntilDoneFrom: stdin to: (WriteStream on: String new)) contents replaceAll: Character lf with: Character cr]. commandShell scheduleToEvaluate: [inputString inspect]]] ifFalse: [argArray isEmpty ifTrue: [commandShell scheduleToEvaluate: [nil inspect]] ifFalse: [argArray do: [:e | pathName := commandShell shellSyntax firstExpandedArgument: e inDirectoryPath: commandShell shellSyntax workingDirectory. fs := (CommandShell fileExists: pathName) ifTrue: [FileStream readOnlyFileNamed: pathName] ifFalse: [nil]. fs isNil ifTrue: [commandShell scheduleToEvaluate: [nil inspect]] ifFalse: [commandShell scheduleToEvaluate: [(fs contentsOfEntireFile replaceAll: Character lf with: Character cr) inspect. fs close]]]]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:02'! inspectHelp ^ 'inspect [files...] - open an inspector on the contents of stdin or the named files' ! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/26/2001 19:54'! name ^ name! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/26/2001 19:54'! name: aString name := aString! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/27/2001 01:24'! needsPrompt "True if the command should be followed by a prompt" ^ needsPrompt ifNil: [needsPrompt := true]! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/27/2001 01:22'! needsPrompt: trueOrFalse "True if the command should be followed by a prompt" needsPrompt := trueOrFalse! ! !ShellBuiltin methodsFor: 'evaluating' stamp: 'dtl 2/1/2003 16:21'! performWith: argumentArray evaluator: aPipeableEvaluator shell: aCommandShell input: inputStream output: outputStream error: errorStream self perform: self procedureSelector withArguments: (Array with: aPipeableEvaluator with: aCommandShell with: inputStream with: outputStream with: errorStream with: argumentArray). aPipeableEvaluator complete ! ! !ShellBuiltin methodsFor: 'printing' stamp: 'dtl 3/22/2003 13:53'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' for '. self name printOn: aStream.! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/31/2001 20:09'! procedureSelector ^ procedureSelector! ! !ShellBuiltin methodsFor: 'accessing' stamp: 'dtl 12/31/2001 20:09'! procedureSelector: aSymbol procedureSelector := aSymbol! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 4/20/2003 11:50'! pwdCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Answer the current working directory (a string) or an invalid command message." | directoryString | directoryString := commandShell workingDirectory. directoryString isEmpty ifTrue: [directoryString := self nullDirectoryString]. argArray size == 0 ifFalse: [myProxy fail. ^ commandShell invalidCommandMessage]. stdout nextPutAll: directoryString; nextPut: Character lf ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:02'! pwdHelp ^ 'pwd - print current working directory' ! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 2/24/2013 10:25'! slsCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Simple directory contents lister" | filePatterns d entries names dirs files entry linesToPrint lineCount cacheStream | "A small value of linesToPrint will prevent an ExternalCommandShell from overdriving is stdout stream. Maybe. A larger value allows faster updates to an interactive CommandShell display." linesToPrint := 16. (argArray isNil or: [argArray size == 0]) ifTrue: ["Contents of current directory." filePatterns := Array with: '*'] ifFalse: ["List named files" filePatterns := argArray]. CommandShell useFileSystem ifTrue: [d := commandShell workingDirectory perform: #asFileReference] ifFalse: [d := (Smalltalk at: #FileDirectory) on: commandShell workingDirectory]. entries := d entries. names := Set new. filePatterns do: [:pat | names addAll: (commandShell shellSyntax glob: pat inDirectory: commandShell workingDirectory)]. dirs := OrderedCollection new. files := OrderedCollection new. names asArray sort do: [:n | entry := entries detect: [:e | (CommandShell entryName: e) = n]. entry isDirectory ifTrue: [dirs add: entry] ifFalse: [files add: entry]]. linesToPrint := 5. lineCount := 1. cacheStream := WriteStream on: String new. dirs do: [:dir | lineCount := lineCount + 1. cacheStream nextPutAll: (self dirEntryString: dir); nextPut: Character lf. (lineCount > linesToPrint) ifTrue: [stdout nextPutAll: cacheStream contents. cacheStream := WriteStream on: String new. lineCount := 1]]. files do: [:file | lineCount := lineCount + 1. cacheStream nextPutAll: (self dirEntryString: file); nextPut: Character lf. (lineCount > linesToPrint) ifTrue: [stdout nextPutAll: cacheStream contents. cacheStream := WriteStream on: String new. lineCount := 1]]. stdout nextPutAll: cacheStream contents.! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:06'! slsHelp ^ 'sls [filepatterns] - list current directory contents' ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 12/23/2007 12:23'! snapshot: save andQuit: quit "After Squeak version 3.6, #snapshot:andQuit: was moved to SmalltalkImage " ^ ((Smalltalk classNamed: 'SmalltalkImage') ifNil: [^ Smalltalk snapshot: save andQuit: quit]) current snapshot: save andQuit: quit! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 12/23/2007 12:23'! snapshotCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Save the image" | s | Smalltalk at: #WorldState ifPresent: [:ws | s := Semaphore new. commandShell safeToExit: false. stdout nextPutAll: self imageName; nextPut: Character lf. ws addDeferredUIMessage: [self snapshot: true andQuit: false. s ifNotNil: [s signal] "s is nil when resuming after snapshot"]. s ifNotNil: [s wait]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 1/28/2013 21:47'! snapshotHelp ^ 'snapshot - snapshot and save image'! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 11/30/2010 07:33'! sqshCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Open a new shell window." | ws | argArray size == 0 ifTrue: [commandShell scheduleToEvaluate: [commandShell class open]] ifFalse: [ws := WriteStream on: String new. argArray inject: true into: [:first :each | first ifFalse: [ws nextPut: Character space]. ws nextPutAll: each. false]. commandShell scheduleToEvaluate: [commandShell class openLabel: ws contents]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:03'! sqshHelp ^ 'sqsh [title] - open new shell window' ! ! !ShellBuiltin methodsFor: 'private' stamp: 'dtl 1/25/2003 14:28'! timeoutAfter: milliseconds notifying: sema "Under certain conditions it is possible to receive a false negative on and end of file check (for example, closing the writer end of a pipe from Squeak, and immediately checking for end of file on the reader in the same Squeak method). If looping while waiting on end of file, this timeout method can be used to prevent a deadlock condition." [(Delay forMilliseconds: milliseconds) wait. sema signal] fork! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 12/29/2002 10:51'! ttyExitCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Exit an ExternalCommandShell by quitting Squeak. The image is not saved and the shutdown list is not processed." commandShell safeToExit ifTrue: [Smalltalk quitPrimitive] ifFalse: [stderr nextPutAll: 'cannot exit in same command line with snapshot'; nextPut: Character lf] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 7/14/2002 12:24'! ttyExitHelp ^ 'exit - exit shell and quit Squeak without saving image'! ! !ShellBuiltin methodsFor: 'implementations' stamp: 'dtl 12/29/2002 10:51'! typeCommand: myProxy shell: commandShell input: stdin output: stdout error: stderr arguments: argArray "Answer how each name would be interpreted if used as a command name." | results exe | argArray size == 0 ifTrue: [^ ''] ifFalse: [results := WriteStream on: Array new. argArray do: [:arg | (commandShell isBuiltInCommand: arg) ifTrue: [results nextPut: arg, ' is a shell builtin'] ifFalse: [self canAccessOSProcess ifFalse: [self inform: ((Smalltalk hasClassNamed: #OSProcess) ifTrue: [(Smalltalk at: #OSProcess) accessor class name] ifFalse: [commandShell class name]), ' cannot access system'. stdout nextPutAll: 'cannot access system'; nextPut: Character lf. ^ self]. exe := commandShell shellSyntax findExecutablePathFor: arg inDirectoryPath: commandShell workingDirectory. (commandShell shellSyntax isExecutable: exe) ifFalse: [exe := nil]. exe isNil ifTrue: [results nextPut: arg, ': not found'] ifFalse: [results nextPut: arg, ' is ', exe]]]. results contents do: [:e | stdout nextPutAll: e; nextPut: Character lf]] ! ! !ShellBuiltin methodsFor: 'help messages' stamp: 'dtl 12/31/2001 20:03'! typeHelp ^ 'type [names...] - indicate how each name would be interpreted if used as a command' ! ! "CommandShell-Commands"! !CommandShellTranscript commentStamp: 'dtl 1/20/2007 09:11' prior: 0! CommandShellTranscript is a user interface for a ComandShell. It behaves like a simple teletype text terminal.! !ExternalCommandShell commentStamp: '' prior: 0! On some platforms it is possible to use OSProcess to read and write the standard input, output and error streams. In that case, ExternalCommandShell allows Squeak to be used as a traditional text mode command shell. When used in a headless Squeak image, ExternalCommandShell behaves like a traditional Unix command shell, except that it has the ability to evaluate Smalltalk expressions as well as other programs and commands. On a Unix system running a Squeak shell in a headless image, the Smalltalk display can be opened by entering the command "UnixProcess recapitate" at the Squeak shell prompt. ExternalCommandShell has one instance, which is accessible as "ExternalCommandShell inSmalltalk". The shell can be stopped with "ExternalCommandShell stop" and restarted with "ExternalCommandShell start". If the shell is running when Squeak is shut down, it will be automatically be restarted when the image is restarted. ! !CommandShellTranscript commentStamp: 'dtl 1/20/2007 09:11' prior: 102507164! CommandShellTranscript is a user interface for a ComandShell. It behaves like a simple teletype text terminal.! !CommandShellTranscript class methodsFor: 'instance creation' stamp: 'dtl 1/20/2007 10:32'! commandShell: cliShell | ttyDisplay | ttyDisplay := self new cliShell: cliShell. cliShell outputStream: ttyDisplay; errorStream: ttyDisplay. cliShell addDependent: ttyDisplay. ^ ttyDisplay ! ! !CommandShellTranscript class methodsFor: 'defaults' stamp: 'dtl 1/17/2007 06:29'! defaultWindowName ^ 'Squeak Shell'! ! !CommandShellTranscript class methodsFor: 'instance creation' stamp: 'dtl 1/17/2007 06:29'! new ^ (self on: (String new: 1000)) initialize! ! !CommandShellTranscript class methodsFor: 'instance creation' stamp: 'dtl 1/17/2007 06:29'! open "CommandShell open" ^ self new open! ! !CommandShellTranscript class methodsFor: 'instance creation' stamp: 'dtl 1/17/2007 06:29'! openLabel: aString "CommandShell openLabel: self defaultWindowName" ^ self new openLabel: aString ! ! !CommandShellTranscript class methodsFor: 'window color' stamp: 'dtl 6/29/2010 00:07'! windowColorSpecification "Answer a WindowColorSpec object that declares my preference" | windowColorSpec | windowColorSpec := Smalltalk at: #WindowColorSpec ifAbsent: [^ self error: 'this image does not support WindowColorSpec']. ^ windowColorSpec classSymbol: self name wording: 'Squeak Shell' brightColor: (Color lightGray lighter paler) pastelColor: (Color lightGray lighter lighter paler paler) helpMessage: 'CommandShell window for evaluating Smalltalk and OS commands'! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 6/24/2001 19:09'! activeController "In Morphic, alway nil. In MVC, the controller that most recently invoked a command." ^ activeController! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:28'! activeController: aController "In Morphic, alway nil. In MVC, the controller that most recently invoked a command." activeController := aController! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! bs self position > 0 ifTrue: [^ self skip: -1]. self changed: #bs! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 1/17/2007 06:28'! characterLimit "Tell the views how much to retain on screen" ^ 20000! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 11/8/2007 19:38'! checkSttyForEvent: keyboardEvent "Check for interrupt characters and such. Consume interrupt character and answer nil, otherwise answer keyboardEvent." (self isInterruptEvent: keyboardEvent) ifTrue: [self handleInterruptCharacterEvent. ^ nil]. (self isEndOfFileEvent: keyboardEvent) ifTrue: [self cliShell doEndOfFile. ^ nil]. ^ keyboardEvent! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! clear "Clear all characters and redisplay the view" self changed: #clearText. self reset! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 12/11/2007 19:00'! cliShell "Answer the value of cliShell" ^ cliShell ifNil: [cliShell := CommandShell new]! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:28'! cliShell: commandShell "Set the value of cliShell" cliShell := commandShell! ! !CommandShellTranscript methodsFor: 'initialize-release' stamp: 'dtl 1/20/2007 11:56'! close super close. self changed: #exit! ! !CommandShellTranscript methodsFor: 'model protocol' stamp: 'dtl 1/17/2007 06:29'! codePaneMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items" ^ StringHolder basicNew codePaneMenu: aMenu shifted: shifted ! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 11/8/2007 20:29'! confirmBeforeKilling: externalProxies "Interrupt character detected, do interrupt stuff." | msgStrm | (externalProxies size > 0) ifTrue: [msgStrm := WriteStream on: String new. (externalProxies size > 1) ifTrue: [msgStrm nextPutAll: 'kill processes'] ifFalse: [msgStrm nextPutAll: 'kill process']. externalProxies do: [:e | msgStrm nextPutAll: ' ', e pid printString, ' (', e programName, ')']. msgStrm nextPut: $?. (self confirm: msgStrm contents) ifTrue: [externalProxies reverseDo: [:e | e terminate]]] ! ! !CommandShellTranscript methodsFor: 'model protocol' stamp: 'dtl 12/11/2007 20:19'! defaultLabelStringBlock ^ [ | directoryString | directoryString := self cliShell workingDirectory. directoryString isEmpty ifTrue: [directoryString := self cliShell shellSyntax nullDirectoryString]. self class defaultWindowName, ': ', directoryString] ! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! endEntry "Display all the characters since the last endEntry, and reset the stream" self changed: #appendEntry. self reset! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 1/20/2007 09:42'! filterAndForward: aCharacter "Filter aCharacter, taking special action if needed. If a child process is active, forward aCharacter to the child and answer nil. Otherwise answer aCharacter." ^ self cliShell filterAndForward: aCharacter! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 11/7/2007 06:54'! filterAndForwardEvent: keyboardEvent "Filter keyboardEvent, taking special action if needed. If a child process is active, forward keyboardEvent to the child and answer nil. Otherwise answer keyboardEvent." ^ (self checkSttyForEvent: keyboardEvent) ifNotNil: [self cliShell filterAndForwardEvent: keyboardEvent]! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! flush self endEntry! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 11/8/2007 19:38'! handleInterruptCharacterEvent "Interrupt character detected, do interrupt stuff." self confirmBeforeKilling: (self cliShell foregroundProxies select: [:e | e isExternalProcess] thenCollect: [:r | r processProxy]). self confirmBeforeKilling: (self cliShell backgroundProxies select: [:e | e isExternalProcess] thenCollect: [:r | r processProxy]). ! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 12/25/2007 16:30'! isEndOfFileEvent: keystrokeEvent "A d event, represented either as character value 4, or as $d with the control or meta key. The actual representation varies on different versions of Squeak." ^ keystrokeEvent keyValue == 4 or: [keystrokeEvent keyCharacter = $d and: [keystrokeEvent controlKeyPressed]]! ! !CommandShellTranscript methodsFor: 'input character filtering' stamp: 'dtl 12/25/2007 16:30'! isInterruptEvent: keystrokeEvent "A c event, represented either as character value 3, or as $c with the control or meta key. The actual representation varies on different versions of Squeak." ^ keystrokeEvent keyValue == 3 or: [keystrokeEvent keyCharacter = $c and: [keystrokeEvent controlKeyPressed]]! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 1/22/2007 21:24'! keyboardConnector ^ self cliShell keyboardConnector! ! !CommandShellTranscript methodsFor: 'model protocol' stamp: 'dtl 12/11/2007 20:20'! labelString ^ self labelStringBlock value ! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 12/11/2007 20:18'! labelStringBlock "Answer a block that when evaluated answers a string to be used as the window label." ^ labelStringBlock ifNil: [labelStringBlock := self defaultLabelStringBlock]! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 12/11/2007 20:16'! labelStringBlock: aBlockAnsweringAString labelStringBlock := aBlockAnsweringAString! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 1/20/2007 11:44'! lastPromptString "Answer the value of lastPromptString" ^ lastPromptString ifNil: [lastPromptString := self cliShell promptString]! ! !CommandShellTranscript methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:28'! lastPromptString: anObject "Set the value of lastPromptString" lastPromptString := anObject! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 12/11/2007 21:35'! nextPut: anObject self scheduleToEvaluate: [super nextPut: anObject]! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 12/11/2007 21:35'! nextPutAll: characters "Convert line terminators to cr. Note that #nextPut: does not do this conversion." self scheduleToEvaluate: [characters isEmpty ifFalse: [super nextPutAll: (characters copyReplaceAll: String lf with: String cr). self flush]]! ! !CommandShellTranscript methodsFor: 'initialize-release' stamp: 'dtl 12/11/2007 20:31'! open ^ self openLabel: nil "invoke default label setting block"! ! !CommandShellTranscript methodsFor: 'initialize-release' stamp: 'dtl 12/11/2007 20:30'! openAsMorphLabel: labelString "Build a morph viewing this stream" | window textMorph | window := SystemWindow new model: self. textMorph := ShellWindowMorph on: self text: nil accept: nil readSelection: nil menu: #codePaneMenu:shifted:. textMorph acceptOnCR: true. window addMorph: textMorph frame: (0@0 corner: 1@1). self prompt. labelString ifNotNil: [self labelStringBlock: [labelString]]. self changed: #relabel. ^ window! ! !CommandShellTranscript methodsFor: 'initialize-release' stamp: 'ThierryGoubier 9/20/2013 15:20'! openLabel: aString "Open a window on this stream. This is copied from the corresponding method in TranscriptStream." | topView controllerClass codeView | CommandShell isMorphic ifTrue: [^ (self openAsMorphLabel: aString) openInWorld]. aString ifNotNil: [self labelStringBlock: [aString]]. topView := (Smalltalk at: #StandardSystemView) new. controllerClass := Smalltalk at: #DeferredActionStandardSystemController ifAbsent: [(Smalltalk at: #StandardSystemController)]. topView model: self; controller: controllerClass new; borderWidth: 1; label: aString; minimumSize: 100 @ 50. codeView := (Smalltalk at: #ShellWindowView) on: self text: nil accept: nil readSelection: nil menu: #codePaneMenu:shifted:. codeView window: (0@0 extent: 200@200). topView addSubView: codeView. topView controller addDeferredUIMessage: [self changed: #relabel. self prompt]. topView controller open. ! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! pastEndPut: anObject "If the stream reaches its limit, just output the contents and reset." self endEntry. ^ self nextPut: anObject! ! !CommandShellTranscript methodsFor: 'model protocol' stamp: 'dtl 1/17/2007 06:29'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !CommandShellTranscript methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:59'! processCommand: aCommandString "Evaluate aCommandString in a separate Smalltalk process. This permits the user interface to remain responsive." ^ self processCommand: aCommandString echo: true ! ! !CommandShellTranscript methodsFor: 'evaluation' stamp: 'dtl 9/15/2012 18:56'! processCommand: aCommandString echo: showCommand "Evaluate aCommandString in a separate Smalltalk process. This permits the user interface to remain responsive. If showCommand is true, update dependent views in order to display the command." ^ self cliShell processCommand: aCommandString echo: showCommand ! ! !CommandShellTranscript methodsFor: 'command prompt' stamp: 'dtl 12/11/2007 21:36'! prompt self scheduleToEvaluate: [self show: self cliShell promptString. self restoreSelectionMarker]! ! !CommandShellTranscript methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 11:46'! promptString "Dependents call this when restoring the prompt string display" self flag: #FIXME. "change the dependents to call #lastPromptString" ^ self lastPromptString! ! !CommandShellTranscript methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 11:42'! promptTwo self show: self cliShell promptStringTwo. self restoreSelectionMarker! ! !CommandShellTranscript methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 11:40'! restorePrompt self flag: #FIXME. "remember last prompt string and redisplay it" self prompt! ! !CommandShellTranscript methodsFor: 'command prompt' stamp: 'dtl 11/30/2010 07:33'! restoreSelectionMarker "Restore selection marker in MVC" | c | CommandShell isMorphic ifFalse: [c := self activeController. self scheduleToEvaluate: [c initializeSelection]] ! ! !CommandShellTranscript methodsFor: 'evaluation' stamp: 'dtl 6/29/2010 22:15'! scheduleToEvaluate: aBlock "Evaluate aBlock, typically to create a new scheduled window. Make it work in both Morphic and MVC. In Morphic, just evaluate aBlock, but in MVC, put it in a queue for evaluation within a control loop. This method may be sent from a process running independent of MVC controller scheduling. Newer Squeak images implement #addDeferredUIMessage in the current project, eliminating the need for an #isMorphic test. This mechanism is not available for older images or for Pharo." CommandShell isMorphic ifTrue: [WorldState addDeferredUIMessage: aBlock] ifFalse: [self activeController ifNotNil: [activeController addDeferredUIMessage: aBlock]]! ! !CommandShellTranscript methodsFor: 'stream extensions' stamp: 'dtl 1/17/2007 06:29'! show: anObject "TextCollector compatibility" self nextPutAll: anObject asString; endEntry! ! !CommandShellTranscript methodsFor: 'updating' stamp: 'dtl 9/15/2012 18:22'! update: event event == #prompt "display $PS1" ifTrue: [^ self prompt]. event == #alternatePrompt "display $PS2" ifTrue: [^ self promptTwo]. event == #restorePrompt "restore last prompt display" ifTrue: [self flag: #FIXME. ^ self prompt]. event == #exit ifTrue: [^ self close]. event == #clearText ifTrue: [^ self clear]. event == #interruptCharacter ifTrue: [^ self handleInterruptCharacterEvent]. event == #relabel ifTrue: [^ self changed: event]. "Treat anything other than the symbols above as a string to be displayed on the command line in the view" self show: event asString; cr. ! ! !ExternalCommandShell commentStamp: '' prior: 102507337! On some platforms it is possible to use OSProcess to read and write the standard input, output and error streams. In that case, ExternalCommandShell allows Squeak to be used as a traditional text mode command shell. When used in a headless Squeak image, ExternalCommandShell behaves like a traditional Unix command shell, except that it has the ability to evaluate Smalltalk expressions as well as other programs and commands. On a Unix system running a Squeak shell in a headless image, the Smalltalk display can be opened by entering the command "UnixProcess recapitate" at the Squeak shell prompt. ExternalCommandShell has one instance, which is accessible as "ExternalCommandShell inSmalltalk". The shell can be stopped with "ExternalCommandShell stop" and restarted with "ExternalCommandShell start". If the shell is running when Squeak is shut down, it will be automatically be restarted when the image is restarted. ! !ExternalCommandShell class methodsFor: 'instance creation' stamp: 'dtl 2/18/2007 14:09'! default ^ ExternalShell! ! !ExternalCommandShell class methodsFor: 'class initialization' stamp: 'dtl 5/20/2011 19:12'! initialize "If OSProcess is in this image, it important that #startup be send to ThisOSProcess before it is sent to ExternalCommandShell. Therefore ensure that ExternalCommandShell appears after ThisOSProcess in the system startup list." "ExternalCommandShell initialize" ExternalShell ifNotNil: [ExternalShell stop. ExternalShell := nil]. Smalltalk addToStartUpList: self ! ! !ExternalCommandShell class methodsFor: 'instance creation' stamp: 'dtl 7/12/2002 08:01'! new self notify: self name, ': Only one instance of ExternalCommandShell or any of its subclasses should exist in the image. Use #inSmalltalk to obtain the singleton instance.'. self shouldNotImplement! ! !ExternalCommandShell class methodsFor: 'instance creation' stamp: 'dtl 11/8/2007 20:21'! onTty "Answer a singleton instance. When called the first time, the shell is created and its evaluation loop is started. Subsequent calls answer the singleton instance, which may or may not be running. Use the #stop and #start messages to control the shell once it has been created." "ExternalCommandShell onTty" ^ ExternalShell ifNil: [ExternalShell := self basicNew initialize].! ! !ExternalCommandShell class methodsFor: 'class initialization' stamp: 'dtl 8/4/2002 16:17'! open self start! ! !ExternalCommandShell class methodsFor: 'system startup' stamp: 'dtl 9/3/2010 17:10'! shutDown: quitting "System is going down. Stop input processing so we will not try to refer to invalid IO streams when the image is restarted. If OSProcess is in this image, it important that #startup be send to ThisOSProcess before it is sent to ExternalCommandShell. Therefore ensure that ExternalCommandShell appears after ThisOSProcess in the system startup list." | shell | quitting ifTrue: [(shell := self default) ifNotNil: [shell shutdownInOldSession]] ! ! !ExternalCommandShell class methodsFor: 'start-stop' stamp: 'dtl 8/7/2002 19:29'! start "ExternalCommandShell start" "ExternalCommandShell stop" ^ self onTty start! ! !ExternalCommandShell class methodsFor: 'system startup' stamp: 'dtl 9/3/2010 17:10'! startUp: resuming | shell | resuming ifTrue: [(shell := self default) ifNotNil: [shell startUpInNewSession]]! ! !ExternalCommandShell class methodsFor: 'start-stop' stamp: 'dtl 8/7/2002 19:29'! stop "ExternalCommandShell stop" "ExternalCommandShell start" ^ self onTty stop! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 2/18/2007 11:59'! cliShell "Answer the value of cliShell" ^ cliShell! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:24'! cliShell: anObject "Set the value of cliShell" cliShell := anObject! ! !ExternalCommandShell methodsFor: 'interrupt handling' stamp: 'dtl 2/18/2007 15:57'! confirm: queryString "Put up a yes/no menu with caption queryString. Answer true if the response is yes, false if no." self flag: #FIXME. "bypass the dialog and assume true" self cliShell backgroundMessageQueue addLast: queryString, ' (yes)', Character lf asString. ^ true ! ! !ExternalCommandShell methodsFor: 'input character filtering' stamp: 'dtl 11/8/2007 20:26'! confirmBeforeKilling: externalProxies "Interrupt character detected, do interrupt stuff." | msgStrm | (externalProxies size > 0) ifTrue: [msgStrm := WriteStream on: String new. (externalProxies size > 1) ifTrue: [msgStrm nextPutAll: 'kill processes'] ifFalse: [msgStrm nextPutAll: 'kill process']. externalProxies do: [:e | msgStrm nextPutAll: ' ', e pid printString, ' (', e programName, ')']. msgStrm nextPut: $?. (self confirm: msgStrm contents) ifTrue: [externalProxies reverseDo: [:e | e terminate]]] ! ! !ExternalCommandShell methodsFor: 'defaults' stamp: 'dtl 12/30/2002 10:45'! defaultBuiltinCommands "The commands which make sense in a headless tty environment" ^ #(cd: copyToError: copyToOutput: snapshot: ttyExit: help: history: pwd: sls: type:) ! ! !ExternalCommandShell methodsFor: 'input processing' stamp: 'dtl 3/20/2007 06:15'! disableInputProcessing self inputStream removeDependent: self; disableEventHandling! ! !ExternalCommandShell methodsFor: 'interrupt handling' stamp: 'dtl 2/18/2007 15:49'! doInterruptCharHandler "Interrupt character detected, do interrupt stuff." self confirmBeforeKilling: (self cliShell foregroundProxies select: [:e | e isExternalProcess] thenCollect: [:r | r processProxy]). self confirmBeforeKilling: (self cliShell backgroundProxies select: [:e | e isExternalProcess] thenCollect: [:r | r processProxy]). ! ! !ExternalCommandShell methodsFor: 'command history' stamp: 'dtl 1/20/2007 14:02'! editCommand: aString self flag: #FIXME. "should interact with tty" ^ super editCommand: aString! ! !ExternalCommandShell methodsFor: 'input processing' stamp: 'dtl 3/20/2007 06:14'! enableInputProcessing self inputStream addDependent: self; enableEventHandling! ! !ExternalCommandShell methodsFor: 'input processing' stamp: 'dtl 9/15/2012 18:51'! handleInput: str | rs line | self lineBuffer nextPutAll: str. [self lineBuffer contents includes: Character lf] whileTrue: [rs := ReadStream on: lineBuffer contents. self lineBuffer: nil. line := rs upTo: Character lf. self cliShell command: line echo: false. self lineBuffer nextPutAll: rs upToEnd]! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 3/12/2007 18:44'! initialize super initialize. self cliShell: (CommandShell new installCommands: self defaultBuiltinCommands; promptString: 'sqsh> '; addDependent: self; yourself). self setStdioStreams ! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 7/12/2002 19:15'! inputStream ^ inputStream! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:24'! inputStream: externalStream inputStream := externalStream! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:24'! isRunning "True if my evaluation loop should be running. This instance variable supports restarting the evaluation loop after an image restart." ^ isRunning ifNil: [isRunning := false] ! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:24'! isRunning: trueOrFalse "True if my evaluation loop should be running. This instance variable supports restarting the evaluation loop after an image restart." isRunning := trueOrFalse ! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 2/24/2013 10:23'! lineBuffer "Answer the value of lineBuffer" ^ lineBuffer ifNil: [lineBuffer := WriteStream on: String new]! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:24'! lineBuffer: anObject "Set the value of lineBuffer" lineBuffer := anObject! ! !ExternalCommandShell methodsFor: 'printing' stamp: 'dtl 4/9/2006 11:11'! printOn: aStream super printOn: aStream. aStream nextPutAll: (self isRunning ifTrue: [' (running)'] ifFalse: [' (stopped)']) ! ! !ExternalCommandShell methodsFor: 'command prompt' stamp: 'dtl 2/18/2007 12:37'! prompt self cliShell outputStream nextPutAll: self cliShell promptString. ! ! !ExternalCommandShell methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 11:46'! promptString "Dependents call this when restoring the prompt string display" self flag: #FIXME. "change the dependents to call #lastPromptString" ^ self lastPromptString! ! !ExternalCommandShell methodsFor: 'command prompt' stamp: 'dtl 2/18/2007 17:36'! promptTwo self cliShell outputStream nextPutAll: self cliShell promptStringTwo ! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 9/3/2010 17:08'! release cliShell ifNotNil: [cliShell removeDependent: self]. super release ! ! !ExternalCommandShell methodsFor: 'command prompt' stamp: 'dtl 1/20/2007 11:40'! restorePrompt self flag: #FIXME. "remember last prompt string and redisplay it" self prompt! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 2/18/2007 11:22'! setNonblockingInput Smalltalk at: #OSProcess ifPresent: [:osp | osp thisOSProcess stdIn setNonBlocking] ! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 3/12/2007 22:33'! setStdioStreams Smalltalk at: #OSProcess ifPresent: [:osp | self inputStream: osp thisOSProcess stdIn asBufferedAsyncFileReadStream disableEventHandling. self cliShell outputStream: osp thisOSProcess stdOut. self cliShell errorStream: osp thisOSProcess stdErr]! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 3/12/2007 18:54'! shutdownInOldSession "The VM is about to shut down." self disableInputProcessing. self stopHandlingInterruptSignal ! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:25'! sigIntHandler "The interrupt handler process, for catching C from the keyboard." ^ sigIntHandler ifNil: [sigIntHandler := self sigIntHandlerProcess]! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:25'! sigIntHandler: aProcess "The interrupt handler process, for catching C from the keyboard." sigIntHandler := aProcess! ! !ExternalCommandShell methodsFor: 'interrupt handling' stamp: 'dtl 12/15/2002 15:43'! sigIntHandlerProcess "The interrupt handler process, for catching C from the keyboard." ^ [[self sigIntSema isNil ifTrue: [(Delay forMilliseconds: 1000) wait] ifFalse: [self sigIntSema wait. self doInterruptCharHandler]] repeat] fork ! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 8/4/2002 12:48'! sigIntSema "A Smalltalk Semaphore which will be signalled when an external SIGINT signal is received from the operating system." ^ sigIntSema! ! !ExternalCommandShell methodsFor: 'accessing' stamp: 'dtl 11/8/2007 20:25'! sigIntSema: aSemaphore "A Smalltalk Semaphore which will be signalled when an external SIGINT signal is received from the operating system." sigIntSema := aSemaphore ! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 3/13/2007 06:23'! start self isRunning ifTrue: [self stop]. self setNonblockingInput. self isRunning: true. self startHandlingInterruptSignal. self cliShell addDependent: self. self cliShell outputStream cr; nextPut: Character lf. self cliShell notifyPrompt. self enableInputProcessing ! ! !ExternalCommandShell methodsFor: 'interrupt handling' stamp: 'dtl 11/8/2007 20:26'! startHandlingInterruptSignal "Whenever a SIGINT is received, forward it to my sigIntSema." | sema | sigIntHandler ifNotNil: [sigIntHandler terminate. self sigIntHandler: nil]. Smalltalk at: #OSProcess ifPresent: [:osp | osp accessor handlesOsSignals ifTrue: [sema := osp accessor forwardSignal: osp accessor primSigIntNumber. sema ifNotNil: [self sigIntSema: sema]. self sigIntHandler]] ! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 3/12/2007 22:31'! startUpInNewSession "Image has been restarted, so the references to standard input, output and error are no longer valid. Reinitialize to make things right." self setNonblockingInput. self setStdioStreams. self isRunning ifTrue: [self stop; start]! ! !ExternalCommandShell methodsFor: 'initialize-release' stamp: 'dtl 9/3/2010 17:08'! stop self disableInputProcessing. self stopHandlingInterruptSignal. cliShell ifNotNil: [cliShell removeDependent: self]. self isRunning: false! ! !ExternalCommandShell methodsFor: 'interrupt handling' stamp: 'dtl 8/8/2002 15:19'! stopHandlingInterruptSignal "Revert to prior SIGINT handling behavior in the VM." Smalltalk at: #OSProcess ifPresent: [:osp | osp accessor handlesOsSignals ifTrue: [osp accessor restoreSignal: osp accessor primSigIntNumber]. self sigIntSema: nil. self sigIntHandler terminate. self sigIntHandler: nil] ! ! !ExternalCommandShell methodsFor: 'updating' stamp: 'dtl 9/15/2012 18:22'! update: event event == self inputStream ifTrue: [^ self handleInput: event upToEnd]. event == #prompt "display $PS1" ifTrue: [^ self prompt]. event == #alternatePrompt "display $PS2" ifTrue: [^ self promptTwo]. event == #restorePrompt "restore last prompt display" ifTrue: [self flag: #FIXME. ^ self prompt]. event == #exit ifTrue: [^ self close]. event == #clearText ifTrue: [^ self error: 'FIXME']. event == #interruptCharacter ifTrue: [^ self doInterruptCharHandler]. "Treat anything other than the symbols above as a string to be displayed on the command line in the view" self show: event asString; cr. ! ! "CommandShell-UI"! !MCFileTreeGitRepositoryInspector commentStamp: '' prior: 0! This code is there to adapt the GUI to the FileTreeGitRepository.! !MCFileTreeGitStReader commentStamp: '' prior: 0! This class handles reading a package from a git (via a specific commit ID). Uses OS-Process to call git archive and retrieve a zip of the package. Then sort of reuse the superclass implementation (MczReader?) even if the StCypress format is different. Remember: * stream is the directory holding the .package directory. * Package directory is NameOfPackage.package. * zip contains the archive of the package (the contents of NameOfPackage.package according to the commitID) Complex work-arounds to handle incorrect incoming streams; see parseMember: Avoid reading the version metadata : consider the MCVersionInfo is given by the GUI before loading the package. Do not read any metadata outside of the zip archive, since we know that the repository inspector won't use us for reading the metadata. shouldNotImplement methods are here to protect against program paths I haven't been able to cover in the superclass, or changes in the superclass implementation. It may indicate that the superclass isn't the right one.! !GitFileTreePackageEntry commentStamp: '' prior: 0! A GitFileTreePackage represent a package in a gitfiletree://repository Instance Variables info: packageDirectory: ! !MCFileTreeGitRepository commentStamp: '' prior: 0! A MCFileTreeGitRepository adds git commands via OSProcess when saving a package in a filetree. Uses gitfiletree: as a protocol (:(). A gitfiletree url with a protocol parameter is the target for a remote. Otherwise the url is considered as a local file reference. Parameters are: dir : the directory inside the repository where the target MC packages are. branch : the git branch to fetch. protocol : the protocol to use to access the repository from git. Essentially make the difference between ssh (git@hostname:pathToRepo) and others urls (https://hostname/pathToRepo). readOnly : is the repository read only? If yes, reduce the history to a minimum, restrict operations on the GUI and append the created repository name. Once parameters are set, it becomes mandatory to have a protocol and a remote url Among parameters, protocol is mandatory, all others are optional. Example : MCFileTreeGitRepository fromZnUrl: (ZnUrl fromString: 'gitfiletree://github.com/ThierryGoubier/filetree.git?protocol=git&dir=repository&branch=pharo3.0' ). Creates a MC repository on a git clone of github.com/ThierryGoubier/filetree.git, on branch pharo3.0 stored in a directory named filetree under the Pharo working directory, and pointing to the repository/ subdirectory where the filetree packages are kept. gitfiletree core documentation : gitfiletree maps MC commands onto git commands via OSProcess, and MC metadata out of git commit data. That's all there is to it. A bit of git knowledge can help, but no git command line work is necessary. The inner workings are a bit more complex than that of course, but not by much.! !MCFileTreeGitRemoteRepository commentStamp: '' prior: 0! A MCFileTreeGitRemoteRepository is just there to get in the creation part of the stuff. The main code is in the superclass. Will fix that later, don't want to bother about it now.! !MCFileTreeGitRepositoryInspector commentStamp: '' prior: 102536619! This code is there to adapt the GUI to the FileTreeGitRepository.! !MCFileTreeGitRepositoryInspector methodsFor: 'morphic ui' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! buttonSpecs repository readonly ifTrue: [ ^ super buttonSpecs ] ifFalse: [ ^ #(#('Pull' #gitPull 'git pull and refresh') #('Push' #gitPush 'git push' #gitNeedPush)) , super buttonSpecs ]! ! !MCFileTreeGitRepositoryInspector methodsFor: 'morphic ui' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! defaultLabel ^ 'Repository: ' , repository currentBranch , '@' , repository description! ! !MCFileTreeGitRepositoryInspector methodsFor: 'actions' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! gitNeedPush "Do a git push. A refresh isn't needed. It may fail..." ^ repository gitNeedPush! ! !MCFileTreeGitRepositoryInspector methodsFor: 'actions' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! gitPull "Do a git pull. A refresh isn't needed. It may fail..." repository gitPull. self refresh! ! !MCFileTreeGitRepositoryInspector methodsFor: 'actions' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! gitPush "Do a git push. A refresh isn't needed. It may fail..." repository gitPush. self changed: #gitNeedPush! ! !MCFileTreeGitRepositoryInspector methodsFor: 'actions' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! refresh super refresh. self changed: #gitNeedPush! ! !MCFileTreeGitRepositoryInspector methodsFor: 'morphic ui' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! saveChanges "Ensure we do refresh. A git repository is a local beast, so it is ok to call a refresh." super saveChanges. self refresh! ! !MCFileTreeGitRepositoryInspector methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! version ^ version ifNil: [ Cursor wait showWhile: [ version := repository versionFromFileNamed: (versions detect: [ :e | e last name = selectedVersion ]) last ]. version ]! ! !MCFileTreeGitRepositoryInspector methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! versionHighlight: aPackageEntry "Changed to take in account the fact the version name is in the package entry." "Should correct a bug in FileTree display: current package is allways in bold." | verName | self assert: aPackageEntry class == GitFileTreePackageEntry. inherited ifNil: [ inherited := #() ]. verName := aPackageEntry info name. ^ Text string: verName attribute: (TextEmphasis new emphasisCode: ((loaded includes: verName) ifTrue: [ 4 "underlined" ] ifFalse: [ (inherited includes: verName) ifTrue: [ 0 ] ifFalse: [ 1 "bold" ] ]))! ! !MCFileTreeGitRepositoryInspector methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! versionInfo ^ (Cursor wait showWhile: [ (versions detect: [ :e | e last name = selectedVersion ]) last ]) info! ! !MCFileTreeGitRepositoryInspector methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! versionSummary ^ (Cursor wait showWhile: [ (versions detect: [ :e | e last name = selectedVersion ]) last ]) summary! ! !MetacelloPlatform methodsFor: '*monticellofiletree-git' stamp: 'ThierryGoubier 3/5/2014 11:11:45' prior: 72238613! createRepository: aRepositorySpec | type | type := aRepositorySpec type. aRepositorySpec description asZnUrl scheme = #gitfiletree ifTrue: [ ^ MCFileTreeGitRepository fromZnUrl: aRepositorySpec description asZnUrl ]. type = 'http' ifTrue: [ ^ MCHttpRepository location: aRepositorySpec description user: aRepositorySpec username password: aRepositorySpec password ]. type = 'directory' ifTrue: [ ^ MCDirectoryRepository new directory: (self fileHandleOn: aRepositorySpec description) ]. Smalltalk at: #MCFileTreeRepository ifPresent: [ :cl | type = 'filetree' ifTrue: [ | description headerSize | description := aRepositorySpec description. headerSize := 'filetree://' size. ^ cl new directory: (self fileHandleOn: (aRepositorySpec description copyFrom: headerSize + 1 to: description size)) ] ]. Smalltalk at: #MCGitHubRepository ifPresent: [ :cl | type = 'github' ifTrue: [ ^ cl location: aRepositorySpec description ] ]. type = 'dictionary' ifTrue: [ | description headerSize globalName | description := aRepositorySpec description. headerSize := 'dictionary://' size. globalName := (description copyFrom: headerSize + 1 to: description size) asSymbol. ^ Smalltalk at: globalName ifAbsent: [ Smalltalk at: globalName put: (MCDictionaryRepository new description: description; yourself) ] ]. ^ nil! ! !MCFileTreeGitStReader commentStamp: '' prior: 102536748! This class handles reading a package from a git (via a specific commit ID). Uses OS-Process to call git archive and retrieve a zip of the package. Then sort of reuse the superclass implementation (MczReader?) even if the StCypress format is different. Remember: * stream is the directory holding the .package directory. * Package directory is NameOfPackage.package. * zip contains the archive of the package (the contents of NameOfPackage.package according to the commitID) Complex work-arounds to handle incorrect incoming streams; see parseMember: Avoid reading the version metadata : consider the MCVersionInfo is given by the GUI before loading the package. Do not read any metadata outside of the zip archive, since we know that the repository inspector won't use us for reading the metadata. shouldNotImplement methods are here to protect against program paths I haven't been able to cover in the superclass, or changes in the superclass implementation. It may indicate that the superclass isn't the right one.! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addClassAndMethodDefinitions (self zip members select: [ :m | m isDirectory and: [ m splitFileName last endsWith: '.trait' ] ]) do: [ :entry | self addTraitAndMethodDefinitionsFromEntry: entry ]. (self zip members select: [ :m | m isDirectory and: [ m splitFileName last endsWith: '.class' ] ]) do: [ :entry | self addClassAndMethodDefinitionsFromEntry: entry ]. (self zip members select: [ :m | m isDirectory and: [ m splitFileName last endsWith: '.extension' ] ]) do: [ :entry | self addExtensionClassAndMethodDefinitionsFromEntry: entry ]! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addClassAndMethodDefinitionsFromDirectory: aDirectory self shouldNotImplement! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addClassAndMethodDefinitionsFromEntry: classEntry "A class entry here is a ZipDirectoryMember." "Would have been convenient to have directory members listing the files they contain." | classPropertiesDict classComment entries | entries := self zip members select: [ :entry | entry isDirectory not and: [ entry fileName beginsWith: classEntry fileName ] ]. (entries detect: [ :entry | self isPropertyFile: entry ] ifNone: [ ]) ifNotNil: [ :propertyEntry | classPropertiesDict := MCFileTreeJsonParser parseStream: (self zipEntryContents: propertyEntry) ]. (entries detect: [ :entry | entry splitFileName last = 'README.md' ] ifNone: [ ]) ifNotNil: [ :commentEntry | classComment := (self zipEntryContents: commentEntry) contents withSqueakLineEndings ]. self addClassDefinitionFrom: classPropertiesDict comment: classComment . self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') in: entries root: classEntry! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addDefinitionFromEntry: aZipFileMember (self definitionFromEntry: aZipFileMember) ifNotNil: [ :def | definitions add: def ]! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addDefinitionFromFile: directoryEntry inDirectory: aDirectory self shouldNotImplement! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addExtensionClassAndMethodDefinitionsFromEntry: classEntry "A class entry here is a ZipDirectoryMember." "Would have been convenient to have directory members listing the files they contain." | classPropertiesDict entries | entries := self zip members select: [ :entry | entry fileName beginsWith: classEntry fileName ]. (entries detect: [ :entry | self isPropertyFile: entry ] ifNone: [ ]) ifNotNil: [ :propertyEntry | classPropertiesDict := MCFileTreeJsonParser parseStream: (self zipEntryContents: propertyEntry) ]. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') in: entries root: classEntry! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addMethodDefinitionsForClass: className in: entries root: aClassEntry "Timestamp for methods is recreated from the package info." (entries select: [ :entry | entry fileName matchesRegex: aClassEntry fileName , '((class)|(instance))' , self slash , '[^' , self slash , ']+.st' ]) do: [ :methodEntry | | classIsMeta fileStream category source timestamp selector | classIsMeta := false. (methodEntry fileName beginsWith: aClassEntry fileName , 'class' , self slash) ifTrue: [ classIsMeta := true ]. fileStream := self zipEntryContents: methodEntry. category := fileStream nextLine. source := fileStream upToEnd. selector := self methodSelectorFor: source. timestamp := self info author , ' ' , self info date mmddyyyy , ' ' , self info time print24. " ]" definitions add: (MCMethodDefinition className: className classIsMeta: classIsMeta selector: selector category: category timeStamp: timestamp source: source) ]! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addMethodDefinitionsForClass: className methodProperties: methodProperties in: entries self shouldNotImplement! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! addTraitAndMethodDefinitionsFromEntry: traitEntry | classPropertiesDict classComment entries | entries := self zip members select: [ :entry | entry isDirectory not and: [ entry fileName beginsWith: traitEntry fileName ] ]. (entries detect: [ :entry | self isPropertyFile: entry ] ifNone: [ ]) ifNotNil: [ :propertyEntry | classPropertiesDict := MCFileTreeJsonParser parseStream: (self zipEntryContents: propertyEntry) ]. (entries detect: [ :entry | entry splitFileName last = 'README.md' ] ifNone: [ ]) ifNotNil: [ :commentEntry | classComment := (self zipEntryContents: commentEntry) contents ] ifNil: [ classComment := '' ]. self addTraitDefinitionFrom: classPropertiesDict comment: classComment withSqueakLineEndings. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') in: entries root: traitEntry! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! commitID ^ commitID! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! commitID: aString commitID := aString! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! definitionFromEntry: aZipFileMember | defs reader | reader := MCStReader on: (self zipEntryContents: aZipFileMember). (defs := reader definitions) size <= 1 ifFalse: [ self error: 'we should be writing exactly 1 definition per file' ]. defs size = 0 ifTrue: [ ^ nil ]. ^ defs first! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! definitionFromFile: directoryEntry inDirectory: aDirectory self shouldNotImplement! ! !MCFileTreeGitStReader methodsFor: 'testing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! hasMonticelloMetadata "Try to avoid loading the full package :)" "Since we use a hack to avoid loading the full archive, consider this to be true." ^ true! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! info ^ info! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! info: aMCVersionInfo info := aMCVersionInfo! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! isMethodPropertyFile: entry | entryName | entryName := entry splitFileName last. ^ entryName = 'methodProperties.ston' or: [ entryName = 'methodProperties.json']! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! isPropertyFile: entry | entryName | entryName := entry splitFileName last. ^ entryName = 'properties.ston' or: [ entryName = 'properties.json']! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadDefinitionFor: aMCDefinition "Load the definition in this commit for that MCDefinition. Return nil if it is empty (effect of git tracking renames :))" | classPropertiesDict entries classEntry | definitions := OrderedCollection new. self zipForDefinition: aMCDefinition. classEntry := packageDirectory , self slash , aMCDefinition className , '.class/'. entries := self zip members select: [ :entry | entry isDirectory not and: [ entry fileName beginsWith: classEntry ] ]. entries isEmpty ifTrue: [ ^ nil ]. classPropertiesDict := Dictionary new. (entries detect: [ :entry | entry splitFileName last = 'properties.json' ] ifNone: [ ]) ifNotNil: [ :propertyEntry | classPropertiesDict := MCFileTreeJsonParser parseStream: (self zipEntryContents: propertyEntry) ]. self addMethodDefinitionsForClass: (classPropertiesDict at: 'name') in: entries root: (self zip members detect: [ :entry | entry isDirectory and: [ entry fileName endsWith: classEntry ] ]). ^ definitions! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadDefinitions "Query the zip archive for the relevant data." "Add support for scripts in packages." | query | definitions := OrderedCollection new. query := self zip membersMatching: packageDirectory , self slash , self monticelloMetaDirName , self slash , 'categories*'. query notEmpty ifTrue: [ self addDefinitionFromEntry: query first ] ifFalse: [ definitions add: (MCOrganizationDefinition categories: {(self packageNameFromPackageDirectory)}) ]. self addClassAndMethodDefinitions. #('initializers*' 'preamble.st' 'postscript.st' 'preambleOfRemoval*' 'postscriptOfRemoval*') do: [ :item | query := self zip membersMatching: packageDirectory , self slash , self monticelloMetaDirName , self slash , item. query notEmpty ifTrue: [ self addDefinitionFromEntry: query first ] ]! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadDependencies "Not entirely sure of how that works, but... We'll try." | dependencyDir | dependencyDir := packageDirectory , self slash , self monticelloMetaDirName , self slash , 'dependencies' , self slash. dependencies := OrderedCollection new. (self zip members select: [ :entry | entry isDirectory not and: [ entry fileName beginsWith: dependencyDir ] ]) do: [ :entry | | name | name := entry splitFileName last. dependencies add: (MCVersionDependency package: (MCPackage named: name) info: (self extractInfoFrom: (self parseMember: 'dependencies' , self slash , name))) ]. dependencies := dependencies asArray! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadVersionInfo: aString "If we manage to have a correct string, with some version info, get it there." | tokens | tokens := [ self scanner scan: (ReadStream on: aString) ] on: Error do: [ #() ]. ^ info := self extractInfoFrom: (self associate: tokens)! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageDirectory: aDirectoryName "Set the package name at the same time, no need to read the metadata anymore." packageDirectory := aDirectoryName. package := MCPackage named: self packageNameFromPackageDirectory! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageNameFromPackageDirectory | filename | filename := self fileUtils directoryName: packageDirectory asFileReference. ^ filename copyFrom: 1 to: (filename lastIndexOf: $.) - 1! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! parseMember: fileName "Parse a metadata member?" "Improvement: try to use the default zip file, since we are retrieving a lot of the metadata info by other means (version, author, timestamp, package name)." | monticelloMetaEntry tokens | monticelloMetaEntry := packageDirectory , self slash , self monticelloMetaDirName , self slash , fileName. tokens := [ self scanner scan: (self zipEntryContents: (self zip memberNamed: monticelloMetaEntry)) ] on: Error do: [ #() ]. ^ self associate: tokens! ! !MCFileTreeGitStReader methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! slash ^ String with: self fileUtils pathNameDelimiter! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/8/2014 21:53'! zip "Get the zip based on the commitID." | c output | zip isNil ifTrue: [ zip := ZipArchive new. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: stream) , '"; git archive --format=zip ' , commitID hex , ' ' , packageDirectory. output := c output. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. zip readFrom: (ReadStream on: output asByteArray) ]. ^ zip! ! !MCFileTreeGitStReader methodsFor: 'utilities' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! zipEntryContents: aZipFileMember "Try to get the correct encoding for UTF8." ^ ReadStream on: aZipFileMember contents convertFromSystemString! ! !MCFileTreeGitStReader methodsFor: 'accessing' stamp: 'ThierryGoubier 3/8/2014 21:54'! zipForDefinition: aMCDefinition "We suppose we are trying to load a specific method definition. Recover the relevant archive as needed." "Ask in the archive, the method file, and the class properties file." | c output classDirectory methodFile classPropertiesFile | self assert: aMCDefinition isMethodDefinition. zip := ZipArchive new. classDirectory := packageDirectory , self slash , aMCDefinition className , (aMCDefinition isExtensionMethod ifTrue: [ '.extension' ] ifFalse: [ '.class' ]). methodFile := classDirectory , self slash , (aMCDefinition classIsMeta ifTrue: [ 'class' ] ifFalse: [ 'instance' ]) , self slash , (MCFileTreeStCypressWriter new fileNameForSelector: aMCDefinition selector) , '.st'. classPropertiesFile := classDirectory , self slash , 'properties.json'. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: stream) , '"; git archive --format=zip ' , commitID hex , ' ' , methodFile , ' ' , classPropertiesFile. output := c output. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. zip readFrom: (ReadStream on: output asByteArray). ^ zip! ! !GitFileTreePackageEntry commentStamp: '' prior: 102537839! A GitFileTreePackage represent a package in a gitfiletree://repository Instance Variables info: packageDirectory: ! !GitFileTreePackageEntry class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! on: aPackageDirectory id: aCommitID author: aString message: aMessage timeStamp: aDateAndTime ^ self new packageDirectory: aPackageDirectory; commitID: aCommitID; author: aString; message: aMessage; timeStamp: aDateAndTime! ! !GitFileTreePackageEntry class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! on: aPackageDirectory id: aCommitID info: info ^ self new packageDirectory: aPackageDirectory; info: info; commitID: aCommitID! ! !GitFileTreePackageEntry class methodsFor: 'utility' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! uuidFromGitSHA: cid package: aPackageName "Build a unique SHA1 hash out of the git commit ID and package name." "Should ensure: repeatability... same UUID everytime for a git commitID and a package name. unicity... no two different packages, even with the same commitID, have the same UUID." ^ self uuidFromSHA: (SHA1 new hashStream: (ReadStream on: cid hex , aPackageName))! ! !GitFileTreePackageEntry class methodsFor: 'utility' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! uuidFromSHA: cid "Return an adequate uuid from a git commit ID." ^ UUID nilUUID in: [ :uuid | 1 to: 16 do: [ :i | uuid at: i put: (cid at: i) ]. uuid at: 9 put: (16r80 bitOr: ((uuid at: 9) bitAnd: 16r3F)). "Type" uuid at: 7 put: (16r50 bitOr: ((uuid at: 7) bitAnd: 16r0F)). "Version 5 : SHA-1 Namespace (git)." uuid ]! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! author: aString author := aString! ! !GitFileTreePackageEntry methodsFor: 'building' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! buildInfoWith: aList startingAt: anIndex version: aNumber ancestry: aDictionary "Build the MCVersionInfo we need with all the relevant data." | ancestors aIDs stack packageName | packageName := packageDirectory copyUpToLast: $.. ancestors := OrderedCollection new. stack := Set new. aIDs := Set new. stack addAll: (aDictionary at: commitID). [ stack isEmpty ] whileFalse: [ | newStack j found | newStack := Set new. stack do: [ :current | j := anIndex. found := false. (aIDs includes: current) ifTrue: [ found := true ]. [ j <= aList size and: [ found not ] ] whileTrue: [ (aList at: j) commitID = current ifTrue: [ ancestors add: (aList at: j) info. aIDs add: current. found := true ]. j := j + 1 ]. found ifFalse: [ aIDs add: current. newStack addAll: (aDictionary at: current) ] ]. stack := newStack ]. info := MCVersionInfo name: packageName , '-' , author , '.' , aNumber printString id: (self class uuidFromGitSHA: commitID package: packageName) message: message date: timeStamp asDate time: timeStamp asTime author: author ancestors: ancestors asArray! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! commitID ^ commitID! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! commitID: aString commitID := aString! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! info ^ info! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! info: aMCVersion info := aMCVersion! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! message: aString message := aString! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! name ^ info name! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageDirectory ^ packageDirectory! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageDirectory: aPackageDirectory packageDirectory := aPackageDirectory! ! !GitFileTreePackageEntry methodsFor: 'printing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! printString "Get the name of the package." ^ info name! ! !GitFileTreePackageEntry methodsFor: 'version protocol' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! summary ^ String streamContents: [ :s | s nextPutAll: info summaryHeader. s cr; cr; nextPutAll: info message ]! ! !GitFileTreePackageEntry methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! timeStamp: aDateAndTime timeStamp := aDateAndTime! ! !GitFileTreePackageEntry methodsFor: 'version protocol' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! version ^ self! ! !ZnUrl methodsFor: '*monticellofiletree-git-override' stamp: 'ThierryGoubier 3/5/2014 11:11:45' prior: 79150166! mcRepositoryAsUser: usernameString withPassword: passwordString self isHttp | self isHttps ifTrue: [ ^ MCHttpRepository location: self asString user: usernameString password: passwordString ]. self isFile ifTrue: [ ^ MCDirectoryRepository new directory: self asFileReference ]. self scheme = #filetree ifTrue: [ ^ MCFileTreeRepository new directory: self asFileReferenceWithRelativePath ]. self scheme = #ftp ifTrue: [ ^ MCFtpRepository host: (self hasPort ifTrue: [ self host , ':' , self port asString ] ifFalse: [ self host ]) directory: self path user: usernameString password: passwordString "MCFtpRepository assumes NO prefixed / in the path" ]. self scheme = #gitfiletree ifTrue: [ ^ MCFileTreeGitRepository fromZnUrl: self ]. self error: ('No Monticello repository for URL scheme {1}' format: {(self scheme)})! ! !MCFileTreeGitRepository commentStamp: '' prior: 102538051! A MCFileTreeGitRepository adds git commands via OSProcess when saving a package in a filetree. Uses gitfiletree: as a protocol (:(). A gitfiletree url with a protocol parameter is the target for a remote. Otherwise the url is considered as a local file reference. Parameters are: dir : the directory inside the repository where the target MC packages are. branch : the git branch to fetch. protocol : the protocol to use to access the repository from git. Essentially make the difference between ssh (git@hostname:pathToRepo) and others urls (https://hostname/pathToRepo). readOnly : is the repository read only? If yes, reduce the history to a minimum, restrict operations on the GUI and append the created repository name. Once parameters are set, it becomes mandatory to have a protocol and a remote url Among parameters, protocol is mandatory, all others are optional. Example : MCFileTreeGitRepository fromZnUrl: (ZnUrl fromString: 'gitfiletree://github.com/ThierryGoubier/filetree.git?protocol=git&dir=repository&branch=pharo3.0' ). Creates a MC repository on a git clone of github.com/ThierryGoubier/filetree.git, on branch pharo3.0 stored in a directory named filetree under the Pharo working directory, and pointing to the repository/ subdirectory where the filetree packages are kept. gitfiletree core documentation : gitfiletree maps MC commands onto git commands via OSProcess, and MC metadata out of git commit data. That's all there is to it. A bit of git knowledge can help, but no git command line work is necessary. The inner workings are a bit more complex than that of course, but not by much.! !MCFileTreeGitRemoteRepository commentStamp: '' prior: 102539757! A MCFileTreeGitRemoteRepository is just there to get in the creation part of the stuff. The main code is in the superclass. Will fix that later, don't want to bother about it now.! !MCFileTreeGitRemoteRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! creationTemplate ^ 'MCFileTreeGitRemoteRepository location: ''git@'' name: '''' subdirectory: '''' branch: '''''! ! !MCFileTreeGitRemoteRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! description ^ 'Remote git repository'! ! !MCFileTreeGitRemoteRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! fillInTheBlankRequest ^ 'GIT Repository:' ! ! !MCFileTreeGitRemoteRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! location: aGitUrl name: aName subdirectory: aDirectoryName branch: aBranch "Create this directly." | repo | repo := self new. repo subdirectory: (aDirectoryName isEmpty ifTrue: [ nil ] ifFalse: [ aDirectoryName ]). repo branch: (aBranch isEmpty ifTrue: [ nil ] ifFalse: [ aBranch ]). repo remoteUrl: aGitUrl. repo readonly: false. repo gitCloneRepositoryAndCheckoutIn: aName. ^ repo! ! !MCFileTreeGitRemoteRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! morphicConfigure ^ self fillInTheBlankConfigure! ! !MCFileTreeGitRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! description ^ 'gitfiletree://'! ! !MCFileTreeGitRepository class methodsFor: 'documentation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! docForGitLogAttempts2 "Some of this code is to test various options." "Testing a solution encapsulating the object and the commitID in one go." "MCFileTreeGitRepository docForGitLogAttempts2" "timeToRun: 5135 (x2 sur l'ancienne version). Mais timeToRun: 1862 sur la partie OSProcess seule. timeToRun on splitting then scanning the info: 3818. timeToRun for splitting: 392. Longuest bit is the scan." "Minimizing the scan: 474 to split and scan :) Removing the error handling... 450. Result is correct." | c commitIDs allNames tag uuid | tag := '^6c776b42^'. uuid := UUID new printString. c := PipeableOSProcess command: 'cd /home/thierry/src/gitfiletree/AltBrowser/Alt-Browser.package/monticello.meta/; for i in `git log --pretty="%H" version`; do echo "' , tag , '"; echo $i; echo "' , tag , '"; echo `git show $i:./version`; done'. commitIDs := ReadStream on: c output. allNames := OrderedCollection new. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. self assert: (commitIDs match: tag). ^ [ [ commitIDs atEnd ] whileFalse: [ | commitID rawInfo info | commitID := commitIDs upToAll: tag. rawInfo := (ReadStream on: (commitIDs upToAll: tag)) upToAll: ''' message '''. info := "[" ((MCFileTreeGitStReader on: '/home/thierry/src/GitFileTree/AltBrowser' asFileReference fileName: 'Alt-Browser.package') commitID: commitID) loadVersionInfo: rawInfo , ''' message '''' id ''', uuid, ''' date '''' time '''' author '''' ancestors () stepChildren ())' "] on: KeyNotFound do: [ nil ]". info notNil ifTrue: [ allNames add: (GitFileTreePackageEntry on: 'Alt-Browser.package' id: commitID info: info) ] ]. allNames ] timeToRun! ! !MCFileTreeGitRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! fromZnUrl: aZnUrl "Let hack that. Get fed up with the lack of progress at times, can't work." "A gitfiletree url with a host is the target for a remote. All other parameters are optional. Parameters are: dir : the directory inside the repository where the target MC packages are. branch : the git branch to fetch. protocol: the user name part to add to the ssh Url, default to git. readOnly : is the repository read only? If present, reduce the history to a minimum (and change the GUI)." | repo | repo := self new. self assert: aZnUrl scheme = #gitfiletree. aZnUrl hasHost ifTrue: [ repo subdirectory: (aZnUrl queryAt: 'dir' ifAbsent: [ ]). repo branch: (aZnUrl queryAt: 'branch' ifAbsent: [ ]). repo remoteUrl: (aZnUrl queryAt: 'protocol' ifAbsent: [ 'git' ]) , '@' , aZnUrl host , ':' , aZnUrl path. repo readonly: (aZnUrl queryAt: 'readOnly' ifAbsent: [ ]) notNil. repo gitCloneRepositoryAndCheckoutIn: (aZnUrl lastPathSegment ifNil: [ aZnUrl host ] ifNotNil: [ :n | n asFileReference basenameWithoutExtension ]) ] ifFalse: [ repo directory: aZnUrl asFileReference ]. ^ repo! ! !MCFileTreeGitRepository class methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! monticelloMetaDirName ^ MCFileTreeStCypressWriter monticelloMetaDirName! ! !MCFileTreeGitRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! parseEntry: aPackageEntry extension: extension "picked up from GoferVersionReference>>parseName:" | basicName package branch author versionNumber packageName string | string := aPackageEntry printString. basicName := string last isDigit ifTrue: [ string ] ifFalse: [ (string copyUpToLast: $.) copyUpTo: $( ]. package := basicName copyUpToLast: $-. (package includes: $.) ifFalse: [ branch := '' ] ifTrue: [ branch := '.' , (package copyAfter: $.). package := package copyUpTo: $. ]. author := (basicName copyAfterLast: $-) copyUpToLast: $.. versionNumber := (basicName copyAfterLast: $-) copyAfterLast: $.. (versionNumber notEmpty and: [ versionNumber allSatisfy: [ :each | each isDigit ] ]) ifTrue: [ versionNumber := versionNumber asNumber ] ifFalse: [ versionNumber := 0 ]. packageName := package , branch. ^ {packageName. author. versionNumber. aPackageEntry}! ! !MCFileTreeGitRepository class methodsFor: 'instance creation' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! parseName: aString extension: extension "picked up from GoferVersionReference>>parseName:" | basicName package branch author versionNumber packageName | basicName := aString last isDigit ifTrue: [ aString ] ifFalse: [ (aString copyUpToLast: $.) copyUpTo: $( ]. package := basicName copyUpToLast: $-. (package includes: $.) ifFalse: [ branch := '' ] ifTrue: [ branch := '.' , (package copyAfter: $.). package := package copyUpTo: $. ]. author := (basicName copyAfterLast: $-) copyUpToLast: $.. versionNumber := (basicName copyAfterLast: $-) copyAfterLast: $.. (versionNumber notEmpty and: [ versionNumber allSatisfy: [ :each | each isDigit ] ]) ifTrue: [ versionNumber := versionNumber asNumber ] ifFalse: [ versionNumber := 0 ]. packageName := package , branch. ^ {packageName. author. versionNumber. basicName}! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! allFileNames "Switch to caching for speed." cacheFileNames == true ifFalse: [ ^ self loadAllFileNames ]. ^ allFileNames ifNil: [ allFileNames := self loadAllFileNames]! ! !MCFileTreeGitRepository methodsFor: 'i/o' stamp: 'ThierryGoubier 3/8/2014 21:57'! basicStoreVersion: aVersion "Do a filetree store followed by the right git commands." "cd in the repository; do git add the package to register the new files, then git commit the package with the package message." "A git commit without any change return a non zero status without any error message." | c packageDirectoryString | super basicStoreVersion: aVersion. packageDirectoryString := (self class parseName: aVersion info name) first , self packageExtension. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git add ' , packageDirectoryString , '; git commit -m "' , (self escapeForShell: aVersion info message convertToSystemString) , '" -- ' , packageDirectoryString. c output. c succeeded ifFalse: [ | serr | serr := c errorPipelineContents. serr notEmpty ifTrue: [ self error: 'Git error: ' , serr ] ]! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! branch ^ branch! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! branch: anObject branch := anObject! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! cacheAllFileNames "Switch to caching for speed." cacheFileNames = true! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! currentBranch "How do we handle a detached head status?" | branches indexOfStar current | branches := self gitBranchs. indexOfStar := branches indexOf: '*'. current := branches at: indexOfStar + 1. (current first = $( and: [ current last ~= $) ]) ifTrue: [ (branches allButFirst: indexOfStar + 1) do: [ :each | current := current , ' ' , each. each last = $) ifTrue: [ ^ current ] ]. ^ current ] ifFalse: [ ^ current ]! ! !MCFileTreeGitRepository methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! escapeForShell: aString ^ aString class new: aString size streamContents: [ :stream | | readStream char | readStream := aString readStream. [ readStream atEnd ] whileFalse: [ char := readStream next. char = $" ifTrue: [ stream nextPut: $\ ]. stream nextPut: char ] ]! ! !MCFileTreeGitRepository methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! fileDirectoryOn: aGitFileTreePackageEntry "We are dealing with GitFileTreePackageEntry objects, not FileReferences." ^ self fileUtils directoryFromPath: aGitFileTreePackageEntry packageDirectory relativeTo: self directory! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 21:59'! gitBranchs "Query git for all the branches in the repository" "This is used to determine the current branch." | c output | c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git branch'. output := c output. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. ^ output substrings! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 22:21'! gitCloneRepositoryAndCheckoutIn: aDirectoryName "Do a clone on the remote repository and do a checkout on it to get the right branch. Complement the directory as well with the working directory. Note the name change when the directory is read-only: this is to protect of a Metacello problem when loading from a configuration with both a read-only and a read-write target (do I also need to protect when dealing with branches?)." "Metacello issues: even when selecting a specific version, will I load all repositories? It seems no." "Interesting. I can't use relative paths with MCFileTreeUtils" | c targetDir targetDirName | targetDirName := readonly ifTrue: [ aDirectoryName , '-readonly' ] ifFalse: [ aDirectoryName ]. targetDir := targetDirName asFileReference. targetDir exists ifTrue: [ self error: 'GitFileTree target directory already exists, cancelling clone and repository instanciation : ' , (self fileUtils directoryPathString: targetDir) ]. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: FileSystem workingDirectory) , '"; git clone ' , (branch ifNil: [ '' ] ifNotNil: [ '-b ' , branch ]) , (readonly ifTrue: [ ' --depth 1 ' ] ifFalse: [ ' ' ]) , remoteUrl , ' ' , targetDirName. c output. "Force the command to terminate." c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. GrowlMorph openWithLabel: 'gitfiletree://' contents: 'Cloning remote repository: done!!'. self directory: (subdirectory isNil ifTrue: [ targetDir ] ifFalse: [ targetDir / subdirectory ])! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 22:22'! gitNeedPush "Check if we need a push. Is that message multilingual ?" | c o | c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git log --branches --not --remotes --oneline'. o := c output. "Force the command to terminate." c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. ^ o size > 1! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 22:22'! gitPull "Do a pull on the repository." "The pull may fail because this amounts to a merge (after having done a fetch) and hence may end up in conflicts." | c | c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git pull'. c output. "Force the command to terminate." c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 22:23'! gitPush "Do a push on the repository" | c | c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git push'. c output. "Force the command to terminate." c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 21:59'! gitVersions "Query git for all the commits in the repository" "This is used to establish an ancestry chain package per package." | c commitIDs | c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git log --format="commit %H %P"'. commitIDs := ReadStream on: c output. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. ^ commitIDs! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 21:58'! gitVersionsForDefinition: aMCDefinition in: aPackageName "Query git for all the versions related to that method definition." | c commitIDs fileDirectory methodFile | fileDirectory := self fileUtils directoryFromPath: aMCDefinition className , (aMCDefinition isExtensionMethod ifTrue: [ '.extension' ] ifFalse: [ '.class' ]) relativeTo: (self fileUtils directoryFromPath: aPackageName , '.package' relativeTo: directory). methodFile := (aMCDefinition classIsMeta ifTrue: [ 'class' ] ifFalse: [ 'instance' ]) , '/' , (MCFileTreeStCypressWriter new fileNameForSelector: aMCDefinition selector) , '.st'. (self fileUtils directoryExists: fileDirectory) ifFalse: [ NotFound signalFor: fileDirectory ]. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: fileDirectory) , '"; git log --format="%H" -- ' , methodFile. commitIDs := ReadStream on: c output. c succeeded ifFalse: [ NotFound signalFor: c errorPipelineContents ]. ^ commitIDs contents substrings collect: [ :e | ByteArray readHexFrom: e ]! ! !MCFileTreeGitRepository methodsFor: 'git querying' stamp: 'ThierryGoubier 3/8/2014 21:58'! gitVersionsForPackage: aDirectoryEntry "Query git for all the commits related to that directory entry. Typical use: the package top-level directory entry, i.e. /.package. Return a stream of git sha1, the commit author, the date and time of commit, and the message for each commit changing something in this directory entry." | c commitIDs packageDirectory | packageDirectory := self fileUtils directoryFromPath: aDirectoryEntry relativeTo: directory. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: packageDirectory) , '"; git log --log-size --format="%H|%an|%ai|%s" -- .'. commitIDs := ReadStream on: c output. c succeeded ifFalse: [ self error: 'Git error: ' , c errorPipelineContents ]. ^ commitIDs! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! goferVersionFrom: aVersionReference "gitfiletree:// provides all version names as found by git." "Should be part of gofer, but isn't." "Since gofer is text based, we can't give him git entries, but strings and those are then rematched to get the right entry." | mcR packageName entry | packageName := (self class parseName: aVersionReference name) first , self packageExtension. mcR := MCFileTreeGitStReader on: directory fileName: packageName. mcR commitID: (entry := self allFileNames detect: [ :e | e name = aVersionReference name ]) commitID. mcR info: entry info. ^ mcR version! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadAllFileNames "When reading the file names, generate GitFileTreePackageEntry objects with the path and the info." "Algorithm: may move in a dedicated scanner/parser in the future: input : line *; line : log_size log_data ; log_size : 'log size' ; log_data : '|' user_name '|' time_stamp '|' message ; End of message can be obtained by the log_size entry. " | allNames entries commitIDs ancestry | allNames := OrderedCollection new. entries := self directory entries select: [ :entry | entry isDirectory and: [ self canReadFileNamed: entry name ] ]. 'loading packages versions from git' displayProgressFrom: 0 to: entries size during: [ :bar | ancestry := self loadAncestry. 1 to: entries size do: [ :i | (entries at: i) in: [ :entry | | entryVersions v | entryVersions := OrderedCollection new. commitIDs := self gitVersionsForPackage: entry name. [ commitIDs atEnd ] whileFalse: [ | logSize commitID author position message dateAndTime | (commitIDs match: 'log size ') ifFalse: [ self error: 'Unable to find git data in input' ]. logSize := Integer readFrom: commitIDs. commitIDs next. position := commitIDs position. commitID := ByteArray readHexFrom: (commitIDs upTo: $|) trimBoth. author := (commitIDs upTo: $|) onlyLetters. dateAndTime := DateAndTime fromString: (commitIDs upTo: $|). message := (commitIDs next: logSize + 1 + position - commitIDs position) convertFromSystemString. entryVersions add: (GitFileTreePackageEntry on: entry name id: commitID author: author message: message timeStamp: dateAndTime) ]. v := 1. entryVersions size to: 1 by: -1 do: [ :j | (entryVersions at: j) buildInfoWith: entryVersions startingAt: j + 1 version: v ancestry: ancestry. v := v + 1 ]. allNames addAll: entryVersions ]. bar value: i ] ]. ^ allNames! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! loadAncestry "Load the ancestry chain to be able to scan it properly." | s dict | s := self gitVersions. dict := Dictionary new. (s match: 'commit ') ifFalse: [ self error: 'Unable to find git data in input' ]. [ s atEnd ] whileFalse: [ | a | a := (s upToAll: 'commit') substrings collect: [ :e | ByteArray readHexFrom: e trimBoth ]. dict at: a first put: a allButFirst ]. ^ dict! ! !MCFileTreeGitRepository methodsFor: 'interface' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! morphicOpen: aWorkingCopy (MCFileTreeGitRepositoryInspector repository: self workingCopy: aWorkingCopy) show! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageDescriptionFromPackageEntry: packageEntry | filename extension packageDirectory | packageDirectory := self fileDirectoryOn: packageEntry. filename := self fileUtils current directoryName: packageDirectory. extension := filename copyFrom: (filename lastIndexOf: $.) to: filename size. ^ ((self packageExtension ~= '.package' and: [ (self fileUtils filePathExists: 'version' relativeTo: packageDirectory) and: [ self fileUtils filePathExists: 'package' relativeTo: packageDirectory ] ]) or: [ | dir | dir := self fileUtils directoryFromPath: MCFileTreeStCypressWriter monticelloMetaDirName relativeTo: packageDirectory. self fileUtils directoryExists: dir ]) ifTrue: [ self class parseEntry: packageEntry extension: extension ] ifFalse: [ {(filename copyFrom: 1 to: (filename lastIndexOf: $.) - 1). 'cypress'. 1. packageEntry} ]! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! packageDescriptionsFromReadableFileNames ^ (self readableFileNames select: [ :packageEntry | self fileUtils directoryExists: (self fileDirectoryOn: packageEntry) ]) collect: [ :packageEntry | self packageDescriptionFromPackageEntry: packageEntry ]! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! readableFileNames "Updated for gitfiletree use of packageEntry, not file names." ^ self allFileNames! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! remoteUrl ^ remoteUrl! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! remoteUrl: anObject remoteUrl := anObject! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! subdirectory ^ subdirectory! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! subdirectory: anObject subdirectory := anObject! ! !MCFileTreeGitRepository methodsFor: 'private' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! tag ^ '^6c776b42^'! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! versionFromFileNamed: aGitFileTreePackageEntry "In the GUI, we should have version names (contributeur, version number, branch) for aString instead of the filetree package directory itself. Handle both cases for the moment." "Will change when we will be reading the version directly from the git. This change is underway and should work." | mcR packageName | self assert: aGitFileTreePackageEntry class == GitFileTreePackageEntry. packageName := (self class parseName: aGitFileTreePackageEntry info name) first , self packageExtension. mcR := MCFileTreeGitStReader on: directory fileName: packageName. mcR commitID: aGitFileTreePackageEntry commitID. mcR info: aGitFileTreePackageEntry info. ^ mcR version! ! !MCFileTreeGitRepository methodsFor: 'accessing' stamp: 'ThierryGoubier 3/5/2014 11:11:45'! versionNameFromFileName: ea ^ ea name! ! !MCFileTreeGitRepository methodsFor: 'i/o' stamp: 'ThierryGoubier 3/8/2014 21:54'! writeRepositoryProperties "When writing the repository properties, commit them as well." | c s | super writeRepositoryProperties. c := PipeableOSProcess command: 'cd "' , (self fileUtils directoryPathString: directory) , '"; git add .filetree; git commit -m "gitfiletree repository properties" -- .filetree'. s := c output. c succeeded ifFalse: [ | serr | serr := c errorPipelineContents. serr notEmpty ifTrue: [ self error: 'Git error: ' , serr , ': ' , s ] ]! ! "MonticelloFileTree-Git"! !SmaCCParserGenerator methodsFor: 'actions' stamp: 'ThierryGoubier 1/20/2014 11:33:57'! handleUpdate: aMorphChangedAnnouncement ^ aMorphChangedAnnouncement deliverTo: self! ! !SmaCCRHS methodsFor: 'reduction table' stamp: 'ThierryGoubier 1/20/2014 11:33:57' prior: 101696633! compileSourceFor: aSmaCCSymbol in: aClass | action rewriter parseTree methodName | action := self reduceAction. action isNil ifTrue: [^self defaultReduceAction]. parseTree := RBParser parseExpression: action onError: [:s :p | SmaCCCompilationNotification new tag: aSmaCCSymbol name , ' : ' , self printString , '\\' withCRs , action; signal: 'Invalid Smalltalk code in reduction rule'. ^self defaultReduceAction]. (parseTree isLiteralNode and: [parseTree value isSymbol and: [parseTree value numArgs <= 1 and: [aClass definesMethod: parseTree value]]]) ifTrue: [^parseTree value]. rewriter := self parseTreeRewriter. rewriter executeTree: parseTree. parseTree := rewriter tree. methodName := ('reduceActionFor' , aSmaCCSymbol safeMethodName , (aSmaCCSymbol positionOf: self) printString , ':') asSymbol. parseTree isSequence ifFalse: [parseTree := RBSequenceNode statements: (Array with: parseTree)]. parseTree := RBMethodNode selector: methodName arguments: (Array with: (RBVariableNode named: 'nodes')) body: parseTree. parseTree addReturn. aClass compile: parseTree formattedCode classified: 'generated-reduction actions'. ^methodName! ! SmaCCCodeHolder removeSelector: #hasUnacceptedEdits:! "SmaCCDev"! !ConfigurationOfPlatypus commentStamp: '' prior: 0! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !ConfigurationOfPlatypus commentStamp: '' prior: 102591431! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #'ConfigurationOf' ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #'ConfigurationOf' ifAbsent: aBlock ]. ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacelloBaseConfiguration Smalltalk at: #'ConfigurationOf' ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/dkh/metacello/main' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-dkh.107' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfPlatypus class methodsFor: 'metacello tool support' stamp: 'AlainPlantec 12/10/2013 09:50'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! load self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! loadBleedingEdge self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 09:08'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: '0.1') load! ! !ConfigurationOfPlatypus class methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^self new project! ! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfPlatypus methodsFor: 'baselines' stamp: 'AlainPlantec 12/16/2013 09:44'! baseline01: spec spec for: #pharo do: [ spec blessing: #baseline. spec project: 'SmaCCDev' with: [ spec className: 'ConfigurationOfSmaCC'; file: 'ConfigurationOfSmaCC'; repository: 'http://smalltalkhub.com/mc/PharoExtras/Smacc/main'; loads: #('Runtime' 'Tools') ]. spec project: 'PetitParser' with: [ spec repository: 'http://smalltalkhub.com/mc/Moose/PetitParser'. spec className: 'ConfigurationOfPetitParser'; versionString: '1.6'; loads: #(#Core 'Tests') ]. spec package: 'PetitStepExpress' with: [ spec repository: 'http://smalltalkhub.com/mc/AlainPlantec/StepExpress/main'. spec requires: 'PetitParser' ]. spec repository: 'http://ss3.gemstone.com/ss/Platypus'. spec package: 'Tamaris'. spec package: 'Platypus' with: [ spec requires: 'SmaCCDev' ]. spec package: 'SqPlatypus' with: [ spec requires: 'Platypus'; requires: 'Tamaris' ]. spec package: 'xtra-platypus' with: [ spec requires: 'SqPlatypus' ]. spec package: 'PlatypusPostLoad' with: [ spec requires: 'xtra-platypus'; requires: 'SqPlatypus' ] ]! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! default: spec spec for: #pharo version: '0.1'.! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! development: spec spec for: #pharo version: '0.1'. ! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project" (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !ConfigurationOfPlatypus methodsFor: 'versions' stamp: 'AlainPlantec 12/16/2013 09:31'! version01: spec spec for: #pharo do: [ spec blessing: #development. spec description: 'releasing a version of Platypus 1'. spec author: 'AlainPlantec'. spec timestamp: '10/12/2013 18:01' ]! ! "ConfigurationOfPlatypus"! !ConfigurationOfPetitParser commentStamp: '' prior: 0! self loadDevelopment! !ConfigurationOfPetitParser commentStamp: '' prior: 102599720! self loadDevelopment! !ConfigurationOfPetitParser class methodsFor: 'private' stamp: 'FabrizioPerin 4/27/2010 15:04'! ensureMetacello Smalltalk at: #MetacelloProject ifAbsent: [ Gofer new url: 'http://seaside.gemstone.com/ss/metacello'; package: 'ConfigurationOfMetacello'; load. (Smalltalk at: #ConfigurationOfMetacello) loadLatestVersion ]! ! !ConfigurationOfPetitParser class methodsFor: 'metacello tool support' stamp: 'tg 4/18/2010 23:51'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:28'! loadDefault self loadDevelopment! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:27'! loadDevelopment (self project version: #development) load! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 12/12/2010 21:25'! loadMinimal (self project version: 'minimal') load! ! !ConfigurationOfPetitParser class methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:51'! project ^self new project! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:14'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec author: 'Alexandre Bergel'. spec description: 'work on Pharo 1.1.1'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']; package: 'PetitGui' with: [ spec requires: 'Glamour for Petit']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ). spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: '2.0-beta.8'; repository: 'http://www.squeaksource.com/Glamour' ]. ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 2/18/2011 13:56'! baseline11: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Preparing Moose 4.3.2'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ). ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:15'! baseline12: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec project: 'AST-Core' with: [ spec repository: 'http://www.squeaksource.com/MetacelloRepository'; className: 'ConfigurationOfRefactoringBrowser'; loads: #('AST-Core') ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ) ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ) ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ) ]; package: 'PetitSmalltalk' with: [ spec requires: #( 'AST-Core' 'PetitParser' 'PetitTests') ]. "todo: declare all other packages & dependencies here" spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ) ] ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline13: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitSQL' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline15: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: #stable; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'default' with: #('UI' 'Tests'); group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'UI' with: #('Core' 'PetitGui' ); group: 'Tests' with: #('Core' 'PetitTests'). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 09/02/2013 04:58'! baseline16: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'Describing all satellite packages. Loads configuration from new repository on SmalltalkHub'. spec repository: 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]. spec for: #( 'squeakCommon' ) do: [ spec project: 'Glamour' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: #development; loads: #('Core' 'Morphic' 'Roassal'); repository: 'http://www.smalltalkhub.com/mc/Moose/Glamour/main' ]. spec package: 'PetitGui' with: [ spec requires: #('Glamour' 'PetitAnalyzer')]. spec group: 'Gui' with: #( 'PetitGui' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'usmanbhatti 3/1/2013 17:03'! default: spec self baseline16: spec.! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'DamienCassou 6/19/2013 13:43'! development: spec spec for: #'pharo1.4.x' version: '1.6-baseline'. spec for: #'pharo2.x' version: '1.6-baseline'. spec for: #'pharo3.x' version: '1.6-baseline'.! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:12'! minimal: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! populateSpec: aSpec with: list "generated by Snapshotcello creates a spec object for the package and the version stored in the list" list do: [:each | aSpec package: each third with: [ aSpec file: (each first copyUpToLast: $. ). aSpec repository: each second ] ]! ! !ConfigurationOfPetitParser methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:50'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! snapshot1 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.117.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-TudorGirba.1186.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.32.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-AndreiChis.256.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-AndreiChis.101.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.68.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-AndreiChis.208.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.78.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.262.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('Roassal-AlexandreBergel.668.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.146.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('Glamour-Roassal-Presentations-TudorGirba.14.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 10/24/2013 00:56'! snapshot2 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.122.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-AlexandreBergel.1190.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-TudorGirba.258.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-DiegoLont.103.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.69.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-TudorGirba.211.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.79.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Roassal-AlexandreBergel.702.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.165.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('RoassalExtras-RobertoMinelli.26.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalExtras' ) #('Glamour-Roassal-Presentations-TudorGirba.15.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.267.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'TudorGirba 10/24/2013 00:56'! stable: spec spec for: #'common' version: '1.6'. spec for: #'pharo1.3.x' version: '1.5'. spec for: #'pharo2.x' version: '1.8-snapshot'. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 12/10/2010 18:51'! version10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'First release'. spec author: 'AlexandreBergel'. spec timestamp: '12/6/2010 16:11'. spec project: 'Glamour for Petit' with: '2.0-beta.8'. spec package: 'PetitParser' with: 'PetitParser-lr.208'; package: 'PetitTests' with: 'PetitTests-TudorGirba.24'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.31'; package: 'PetitGui' with: 'PetitGui-TudorGirba.58'.]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version11: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:30'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version12: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:56'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version13: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'AlexandreBergel'. spec timestamp: '5/16/2011 16:23'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DamienPollet 8/11/2011 19:21'! version14: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.218'; package: 'PetitTests' with: 'PetitTests-DamienPollet.35'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.47'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'TudorGirba 3/4/2012 20:22'! version15: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.2'. spec package: 'PetitParser' with: 'PetitParser-lr.228'; package: 'PetitTests' with: 'PetitTests-lr.43'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.90'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.57'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DiegoLont 9/2/2013 13:21'! version16: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'releasing a version of petitparser for moose 4.7 release'. spec author: 'usmanbhatti'. spec timestamp: '3/1/2013 18:01'. spec project: 'Glamour for Petit' with: '2.4'. spec package: 'PetitParser' with: 'PetitParser-YuriyTymchuk.232'; package: 'PetitTests' with: 'PetitTests-AndreHora.47'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-DiegoLont.46'; package: 'PetitGui' with: 'PetitGui-DiegoLont.125'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'DiegoLont 9/17/2013 11:12'! version17snapshot: spec "generated by Snapshotcello" spec for: #common do: [ self populateSpec: spec with: self snapshot1. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'StephanEggermont 11/21/2013 09:37'! version18snapshot: spec "generated by Snapshotcello" spec for: #common do: [ spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. self populateSpec: spec with: self snapshot2. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! "ConfigurationOfPetitParser"! !ConfigurationOfPlatypus commentStamp: '' prior: 0! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! !ConfigurationOfPlatypus commentStamp: '' prior: 102621377! Copy me to create a new configuration or edit and evaluate the following doits. "Create configuration class and initial baseline method" MetacelloToolBox createBaseline: '1.0-baseline' for: 'MyProject' repository: 'http://www.example.com/MyProjectRepository' requiredProjects: #('Gofer') packages: #('MyProject-Core' 'MyProject-Tests') dependencies: {('MyProject-Core' -> #('Gofer')). ('MyProject-Tests' -> #('MyProject-Core'))} groups: {('default' -> #('Core')). ('Core' -> #('MyProject-Core')). ('Tests' -> #('MyProject-Tests'))}. "create initial development method from the baseline" MetacelloToolBox createDevelopment: '1.0' for: 'MyProject' importFromBaseline: '1.0-baseline' description: 'initial version'. ! ----STARTUP----2014-03-13T09:54:24.164842+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! DevelopmentSupport "See the methods in the 'development support' category on the class-side of MetacelloBaseConfiguration. Decide what development support methods you would like to use and copy them the the class-side of your configuration." ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! baseConfigurationClassIfAbsent: aBlock ^Smalltalk at: #'ConfigurationOf' ifAbsent: [ self ensureMetacelloBaseConfiguration. Smalltalk at: #'ConfigurationOf' ifAbsent: aBlock ]. ! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacello (self baseConfigurationClassIfAbsent: []) ensureMetacello! ! !ConfigurationOfPlatypus class methodsFor: 'private' stamp: 'AlainPlantec 12/10/2013 09:50'! ensureMetacelloBaseConfiguration Smalltalk at: #'ConfigurationOf' ifAbsent: [ | repository version | repository := MCHttpRepository location: 'http://smalltalkhub.com/mc/dkh/metacello/main' user: '' password: ''. repository versionReaderForFileNamed: 'Metacello-Base-dkh.107' do: [ :reader | version := reader version. version load. version workingCopy repositoryGroup addRepository: repository ] ]! ! !ConfigurationOfPlatypus class methodsFor: 'metacello tool support' stamp: 'AlainPlantec 12/10/2013 09:50'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! load self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 08:58'! loadBleedingEdge self loadDevelopment! ! !ConfigurationOfPlatypus class methodsFor: 'loading' stamp: 'AlainPlantec 12/16/2013 09:08'! loadDevelopment "Load the #development version defined for this platform. The #development version will change over time and is not expected to be stable." "self loadDevelopment" ^(self project version: '0.1') load! ! !ConfigurationOfPlatypus class methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^self new project! ! !ConfigurationOfPlatypus class methodsFor: 'development support' stamp: 'AlainPlantec 12/10/2013 09:50'! validate "Check the configuration for Errors, Critical Warnings, and Warnings (see class comment for MetacelloMCVersionValidator for more information). Errors identify specification issues that will result in unexpected behaviour when you load the configuration. Critical Warnings identify specification issues that may result in unexpected behavior when you load the configuration. Warnings identify specification issues that are technically correct, but are worth take a look at." "self validate" self ensureMetacello. ^ ((Smalltalk at: #MetacelloToolBox) validateConfiguration: self debug: #() recurse: false) explore! ! !ConfigurationOfPlatypus methodsFor: 'baselines' stamp: 'AlainPlantec 12/16/2013 09:44'! baseline01: spec spec for: #pharo do: [ spec blessing: #baseline. spec project: 'SmaCCDev' with: [ spec className: 'ConfigurationOfSmaCC'; file: 'ConfigurationOfSmaCC'; repository: 'http://smalltalkhub.com/mc/PharoExtras/Smacc/main'; loads: #('Runtime' 'Tools') ]. spec project: 'PetitParser' with: [ spec repository: 'http://smalltalkhub.com/mc/Moose/PetitParser'. spec className: 'ConfigurationOfPetitParser'; versionString: '1.6'; loads: #(#Core 'Tests') ]. spec package: 'PetitStepExpress' with: [ spec repository: 'http://smalltalkhub.com/mc/AlainPlantec/StepExpress/main'. spec requires: 'PetitParser' ]. spec repository: 'http://ss3.gemstone.com/ss/Platypus'. spec package: 'Tamaris'. spec package: 'Platypus' with: [ spec requires: 'SmaCCDev' ]. spec package: 'SqPlatypus' with: [ spec requires: 'Platypus'; requires: 'Tamaris' ]. spec package: 'xtra-platypus' with: [ spec requires: 'SqPlatypus' ]. spec package: 'PlatypusPostLoad' with: [ spec requires: 'xtra-platypus'; requires: 'SqPlatypus' ] ]! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! customProjectAttributes "Edit to return a collection of any custom attributes e.g. for conditional loading: Array with: #'Condition1' with: #'Condition2. For more information see: http://code.google.com/p/metacello/wiki/CustomProjectAttrributes " ^ #()! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! default: spec spec for: #pharo version: '0.1'.! ! !ConfigurationOfPlatypus methodsFor: 'symbolic versions' stamp: 'AlainPlantec 12/16/2013 09:32'! development: spec spec for: #pharo version: '0.1'. ! ! !ConfigurationOfPlatypus methodsFor: 'accessing' stamp: 'AlainPlantec 12/10/2013 09:50'! project ^ project ifNil: [ "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. project := MetacelloMCProject new projectAttributes: self customProjectAttributes. "Create the Metacello project" (Smalltalk at: #'MetacelloVersionConstructor') on: self project: project. "Construct the project" project loadType: #'linear'. "change to #atomic if desired" project ]! ! !ConfigurationOfPlatypus methodsFor: 'versions' stamp: 'AlainPlantec 12/16/2013 09:31'! version01: spec spec for: #pharo do: [ spec blessing: #development. spec description: 'releasing a version of Platypus 1'. spec author: 'AlainPlantec'. spec timestamp: '10/12/2013 18:01' ]! ! "ConfigurationOfPlatypus"! ----SNAPSHOT----2014-03-13T09:55:31.654059+01:00 Pharo.image priorSource: 34657607! !ConfigurationOfPetitParser commentStamp: '' prior: 0! self loadDevelopment! !ConfigurationOfPetitParser commentStamp: '' prior: 102629870! self loadDevelopment! !ConfigurationOfPetitParser class methodsFor: 'private' stamp: 'FabrizioPerin 4/27/2010 15:04'! ensureMetacello Smalltalk at: #MetacelloProject ifAbsent: [ Gofer new url: 'http://seaside.gemstone.com/ss/metacello'; package: 'ConfigurationOfMetacello'; load. (Smalltalk at: #ConfigurationOfMetacello) loadLatestVersion ]! ! !ConfigurationOfPetitParser class methodsFor: 'metacello tool support' stamp: 'tg 4/18/2010 23:51'! isMetacelloConfig "Answer true and the Metacello tools will operate on you" ^true! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:28'! loadDefault self loadDevelopment! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 4/21/2013 23:27'! loadDevelopment (self project version: #development) load! ! !ConfigurationOfPetitParser class methodsFor: 'loading' stamp: 'TudorGirba 12/12/2010 21:25'! loadMinimal (self project version: 'minimal') load! ! !ConfigurationOfPetitParser class methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:51'! project ^self new project! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:14'! baseline10: spec spec for: #common do: [ spec blessing: #baseline. spec author: 'Alexandre Bergel'. spec description: 'work on Pharo 1.1.1'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']; package: 'PetitGui' with: [ spec requires: 'Glamour for Petit']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ). spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: '2.0-beta.8'; repository: 'http://www.squeaksource.com/Glamour' ]. ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 2/18/2011 13:56'! baseline11: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Preparing Moose 4.3.2'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ). ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:15'! baseline12: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; repository: 'http://www.squeaksource.com/Glamour' ]. spec project: 'AST-Core' with: [ spec repository: 'http://www.squeaksource.com/MetacelloRepository'; className: 'ConfigurationOfRefactoringBrowser'; loads: #('AST-Core') ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ) ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ) ]; package: 'PetitGui' with: [ spec requires: #('Glamour for Petit' ) ]; package: 'PetitSmalltalk' with: [ spec requires: #( 'AST-Core' 'PetitParser' 'PetitTests') ]. "todo: declare all other packages & dependencies here" spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ) ] ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline13: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: '2.1'; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitSQL' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'Tests' with: #('PetitTests' 'PetitAnalyzer' ). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 9/2/2013 11:16'! baseline15: spec spec for: #'common' do: [ spec blessing: #'baseline'. spec description: 'Describing all satellite packages'. spec repository: 'http://source.lukas-renggli.ch/petit'. spec project: 'Glamour for Petit' with: [ spec className: 'ConfigurationOfGlamour'; versionString: #stable; loads: #(Core Morphic); repository: 'http://www.squeaksource.com/Glamour' ]. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: #('PetitParser' ). ]; package: 'PetitAnalyzer' with: [ spec requires: #('PetitTests' ). ]; package: 'PetitGui' with: [ spec requires: #('PetitParser' 'Glamour for Petit' ). ]. spec package: 'PrettyPetit'. spec package: 'PetitSmalltalk' with: [ spec requires: #( 'PetitParser' 'PetitTests') ]; package: 'PetitCSV' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitJson' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitMSE' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitManifestMf' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'PetitRegex' with: [ spec requires: #('PetitParser') ]; package: 'PetitXPath' with: [ spec requires: #('PetitParser' 'PetitXml') ]; package: 'PetitXml' with: [ spec requires: #('PetitParser' 'PetitTests') ]; package: 'Factorial-Language' with: [ spec requires: #('PetitParser') ]. spec group: 'default' with: #('UI' 'Tests'); group: 'Core' with: #('PetitParser' 'PetitAnalyzer' ); group: 'UI' with: #('Core' 'PetitGui' ); group: 'Tests' with: #('Core' 'PetitTests'). ]. ! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'DiegoLont 09/02/2013 04:58'! baseline16: spec spec for: #common do: [ spec blessing: #baseline. spec description: 'Describing all satellite packages. Loads configuration from new repository on SmalltalkHub'. spec repository: 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]. spec for: #( 'squeakCommon' ) do: [ spec project: 'Glamour' with: [ spec className: 'ConfigurationOfGlamour'; file: 'ConfigurationOfGlamour'; version: #development; loads: #('Core' 'Morphic' 'Roassal'); repository: 'http://www.smalltalkhub.com/mc/Moose/Glamour/main' ]. spec package: 'PetitGui' with: [ spec requires: #('Glamour' 'PetitAnalyzer')]. spec group: 'Gui' with: #( 'PetitGui' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'usmanbhatti 3/1/2013 17:03'! default: spec self baseline16: spec.! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'DamienCassou 6/19/2013 13:43'! development: spec spec for: #'pharo1.4.x' version: '1.6-baseline'. spec for: #'pharo2.x' version: '1.6-baseline'. spec for: #'pharo3.x' version: '1.6-baseline'.! ! !ConfigurationOfPetitParser methodsFor: 'baselines' stamp: 'AlexandreBergel 12/3/2010 09:12'! minimal: spec spec for: #common do: [ spec blessing: #baseline. spec repository: 'http://source.lukas-renggli.ch/petit'. spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! populateSpec: aSpec with: list "generated by Snapshotcello creates a spec object for the package and the version stored in the list" list do: [:each | aSpec package: each third with: [ aSpec file: (each first copyUpToLast: $. ). aSpec repository: each second ] ]! ! !ConfigurationOfPetitParser methodsFor: 'accessing' stamp: 'tg 4/18/2010 23:50'! project ^ project ifNil: [ | constructor | "Bootstrap Metacello if it is not already loaded" self class ensureMetacello. "Construct Metacello project" constructor := (Smalltalk at: #MetacelloVersionConstructor) on: self. project := constructor project. project]! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 9/10/2013 08:46'! snapshot1 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.117.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-TudorGirba.1186.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.32.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-AndreiChis.256.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-AndreiChis.101.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.68.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-AndreiChis.208.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.78.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.262.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('Roassal-AlexandreBergel.668.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.146.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('Glamour-Roassal-Presentations-TudorGirba.14.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'snapshots' stamp: 'TudorGirba 10/24/2013 00:56'! snapshot2 "generated by Snapshotcello" ^ #( #('ConfigurationOfGlamour-TudorGirba.122.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'ConfigurationOfGlamour' ) #('PetitParser-YuriyTymchuk.232.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitParser' ) #('PetitTests-AndreHora.47.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitTests' ) #('PetitAnalyzer-DiegoLont.46.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitAnalyzer' ) #('ConfigurationOfRoassal-AlexandreBergel.1190.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'ConfigurationOfRoassal' ) #('Glamour-Announcements-TudorGirba.7.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Announcements' ) #('Glamour-Helpers-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Helpers' ) #('Glamour-Core-TudorGirba.258.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Core' ) #('Glamour-Presentations-AndreiChis.121.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Presentations' ) #('Glamour-Browsers-DiegoLont.103.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Browsers' ) #('Glamour-Morphic-Widgets-TudorGirba.69.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Widgets' ) #('Glamour-Morphic-Renderer-TudorGirba.211.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Renderer' ) #('Glamour-Morphic-Theme-TudorGirba.79.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Morphic-Theme' ) #('Roassal-AlexandreBergel.702.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'Roassal' ) #('RoassalMorphic-AlexandreBergel.165.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalMorphic' ) #('RoassalExtras-RobertoMinelli.26.mcz' 'http://www.smalltalkhub.com/mc/ObjectProfile/Roassal/main/' 'RoassalExtras' ) #('Glamour-Roassal-Presentations-TudorGirba.15.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Roassal-Presentations' ) #('CollectionExtensions-TudorGirba.34.mcz' 'http://www.smalltalkhub.com/mc/Moose/CollectionExtensions/main/' 'CollectionExtensions' ) #('Glamour-Tools-TudorGirba.66.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Tools' ) #('Glamour-Examples-TudorGirba.267.mcz' 'http://www.smalltalkhub.com/mc/Moose/Glamour/main/' 'Glamour-Examples' ) #('PetitGui-DiegoLont.125.mcz' 'http://www.smalltalkhub.com/mc/Moose/PetitParser/main/' 'PetitGui' ) )! ! !ConfigurationOfPetitParser methodsFor: 'symbolic versions' stamp: 'TudorGirba 10/24/2013 00:56'! stable: spec spec for: #'common' version: '1.6'. spec for: #'pharo1.3.x' version: '1.5'. spec for: #'pharo2.x' version: '1.8-snapshot'. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 12/10/2010 18:51'! version10: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'First release'. spec author: 'AlexandreBergel'. spec timestamp: '12/6/2010 16:11'. spec project: 'Glamour for Petit' with: '2.0-beta.8'. spec package: 'PetitParser' with: 'PetitParser-lr.208'; package: 'PetitTests' with: 'PetitTests-TudorGirba.24'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.31'; package: 'PetitGui' with: 'PetitGui-TudorGirba.58'.]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version11: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:30'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version12: spec spec for: #'common' do: [ spec blessing: #'release'. spec description: 'New version'. spec author: 'AlexandreBergel'. spec timestamp: '2/18/2011 13:56'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'AlexandreBergel 5/16/2011 16:23'! version13: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'AlexandreBergel'. spec timestamp: '5/16/2011 16:23'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.216'; package: 'PetitTests' with: 'PetitTests-lr.32'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.37'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DamienPollet 8/11/2011 19:21'! version14: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.1'. spec package: 'PetitParser' with: 'PetitParser-lr.218'; package: 'PetitTests' with: 'PetitTests-DamienPollet.35'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.65'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.47'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'TudorGirba 3/4/2012 20:22'! version15: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: ''. spec author: 'DamienPollet'. spec timestamp: '8/11/2011 14:00'. spec project: 'Glamour for Petit' with: '2.2'. spec package: 'PetitParser' with: 'PetitParser-lr.228'; package: 'PetitTests' with: 'PetitTests-lr.43'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-lr.39'; package: 'PetitGui' with: 'PetitGui-TudorGirba.90'; package: 'PetitSmalltalk' with: 'PetitSmalltalk-lr.57'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'versions' stamp: 'DiegoLont 9/2/2013 13:21'! version16: spec spec for: #'common' do: [ spec blessing: #'development'. spec description: 'releasing a version of petitparser for moose 4.7 release'. spec author: 'usmanbhatti'. spec timestamp: '3/1/2013 18:01'. spec project: 'Glamour for Petit' with: '2.4'. spec package: 'PetitParser' with: 'PetitParser-YuriyTymchuk.232'; package: 'PetitTests' with: 'PetitTests-AndreHora.47'; package: 'PetitAnalyzer' with: 'PetitAnalyzer-DiegoLont.46'; package: 'PetitGui' with: 'PetitGui-DiegoLont.125'. ]. ! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'DiegoLont 9/17/2013 11:12'! version17snapshot: spec "generated by Snapshotcello" spec for: #common do: [ self populateSpec: spec with: self snapshot1. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! !ConfigurationOfPetitParser methodsFor: 'snapshot versions' stamp: 'StephanEggermont 11/21/2013 09:37'! version18snapshot: spec "generated by Snapshotcello" spec for: #common do: [ spec package: 'PetitParser'; package: 'PetitTests' with: [ spec requires: 'PetitParser']; package: 'PetitAnalyzer' with: [ spec requires: 'PetitTests']. self populateSpec: spec with: self snapshot2. spec group: 'Core' with: #( 'PetitParser' 'PetitAnalyzer' ). spec group: 'Tests' with: #( 'PetitTests' 'PetitAnalyzer' ) ]! ! "ConfigurationOfPetitParser"! !PPScriptingTest commentStamp: '' prior: 0! These are some simple demo-scripts of parser combinators for the compiler construction course. http://www.iam.unibe.ch/~scg/Teaching/CC/index.html! !PPStream commentStamp: '' prior: 0! A positional stream implementation used for parsing. It overrides some methods for optimization reasons.! !PPFailure commentStamp: '' prior: 0! The failure object in PetitParser. It is the only class that responds to #isPetitFailure with true. It contains an error message and a position of the occurrence of the failure. Instance Variables: message The error message of this failure. position The position of this failure in the input stream. ! !PPMemento commentStamp: '' prior: 0! PPMemento is an internal class used by PPMemoizedParser to cache results and detect left-recursive calls. Instance Variables: result The cached result. count The number of recursive cycles followed. position The position of the cached result in the input stream.! !PPParser commentStamp: '' prior: 0! An abstract parser for all parsers in PetitParser. Subclasses implement #parseOn: to perform the actual recursive-descent parsing. All parsers support a variety of methods to perform an actual parse, see the methods in the #parsing protocol. Parsers are combined with a series of operators that can be found in the #operations protocol. Instance Variables: properties Stores additional state in the parser object.! !PPDelegateParser commentStamp: '' prior: 0! A parser that delegates to another parser. Instance Variables: parser The parser to delegate to.! !PPActionParser commentStamp: '' prior: 0! A parser that performs an action block with the successful parse result of the delegate. Instance Variables: block The action block to be executed. ! !PPWrappingParser commentStamp: '' prior: 0! A parser that performs an action block upon activation with the stream and a continuation block.! !PPAndParser commentStamp: 'TudorGirba 2/27/2011 22:22' prior: 0! The and-predicate, a parser that succeeds whenever its delegate does, but does not consume the input stream [Parr 1994, 1995].! !PPCompositeParser commentStamp: 'lr 12/4/2009 18:38' prior: 0! A PPCompositeParser is composed parser built from various primitive parsers. Every production in the receiver is specified as a method that returns its parser. Note that every production requires an instance variable of the same name, otherwise the production is not cached and cannot be used in recursive grammars. Productions should refer to each other by reading the respective inst-var. Note: these inst-vars are typically not written, as the assignment happens in the initialize method using reflection. The start production is defined in the method start. It is aliased to the inst-var parser defined in the superclass of PPCompositeParser.! !PPEndOfInputParser commentStamp: 'lr 4/18/2008 13:46' prior: 0! A parser that succeeds only at the end of the input stream.! !PPExpressionParser commentStamp: '' prior: 0! A PPExpressionParser is a parser to conveniently define an expression grammar with prefix, postfix, and left- and right-associative infix operators. The following code initializes a parser for arithmetic expressions. First we instantiate an expression parser, a simple parser for expressions in parenthesis and a simple parser for integer numbers. expression := PPExpressionParser new. parens := $( asParser token trim , expression , $) asParser token trim ==> [ :nodes | nodes second ]. integer := #digit asParser plus token trim ==> [ :token | token value asInteger ]. Then we define on what term the expression grammar is built on: expression term: parens / integer. Finally we define the operator-groups in descending precedence. Note, that the action blocks receive both, the terms and the parsed operator in the order they appear in the parsed input. expression group: [ :g | g prefix: $- asParser token trim do: [ :op :a | a negated ] ]; group: [ :g | g postfix: '++' asParser token trim do: [ :a :op | a + 1 ]. g postfix: '--' asParser token trim do: [ :a :op | a - 1 ] ]; group: [ :g | g right: $^ asParser token trim do: [ :a :op :b | a raisedTo: b ] ]; group: [ :g | g left: $* asParser token trim do: [ :a :op :b | a * b ]. g left: $/ asParser token trim do: [ :a :op :b | a / b ] ]; group: [ :g | g left: $+ asParser token trim do: [ :a :op :b | a + b ]. g left: $- asParser token trim do: [ :a :op :b | a - b ] ]. After evaluating the above code the 'expression' is an efficient parser that evaluates examples like: expression parse: '-8++'. expression parse: '1+2*3'. expression parse: '1*2+3'. expression parse: '(1+2)*3'. expression parse: '8/4/2'. expression parse: '8/(4/2)'. expression parse: '2^2^3'. expression parse: '(2^2)^3'. Instance Variables: operators The operators defined in the current group.! !PPFlattenParser commentStamp: 'lr 11/22/2009 13:09' prior: 0! A parser that answers a flat copy of the range my delegate parses.! !PPTokenParser commentStamp: 'lr 2/25/2013 23:31' prior: 0! A parser that answers a token with the value of my delegate parses. Instance Variables: tokenClass The token sub-class to be used.! !PPMemoizedParser commentStamp: '' prior: 0! A memoized parser, for refraining redundant computations. Instance Variables: stream The stream of the associated memento objects. buffer The buffer of memento objects. ! !PPNotParser commentStamp: '' prior: 0! The not-predicate, a parser that succeeds whenever its delegate does not, but consumes no input [Parr 1994, 1995].! !PPOptionalParser commentStamp: 'lr 4/3/2011 14:46' prior: 0! A parser that optionally parsers its delegate, or answers nil.! !PPRepeatingParser commentStamp: 'lr 4/3/2011 14:45' prior: 0! An abstract parser that repeatedly parses between 'min' and 'max' instances of its delegate. The default configuration parses an infinite number of elements, as 'min' is set to 0 and 'max' to infinity (SmallInteger maxVal). Instance Variables: min The minimum number of repetitions. max The maximum number of repetitions.! !PPLimitedRepeatingParser commentStamp: 'lr 4/3/2011 14:37' prior: 0! An abstract parser that repeatedly parses between 'min' and 'max' instances of my delegate and that requires the input to be completed with a specified parser 'limit'. Subclasses provide repeating behavior as typically seen in regular expression implementations (non-blind). Instance Variables: limit The parser to complete the input with.! !PPGreedyRepeatingParser commentStamp: 'lr 4/3/2011 15:08' prior: 0! A greedy repeating parser, commonly seen in regular expression implementations. It aggressively consumes as much input as possible and then backtracks to meet the 'limit' condition. This class essentially implements the iterative version of the following recursive parser composition: | parser | parser := PPChoiceParser new. parser setParsers: (Array with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ]) with: (limit and ==> [ :each | OrderedCollection new ])). ^ parser ==> [ :rest | rest asArray ]! !PPLazyRepeatingParser commentStamp: 'lr 4/3/2011 15:08' prior: 0! A lazy repeating parser, commonly seen in regular expression implementations. It limits its consumption to meet the 'limit' condition as early as possible. This class essentially implements the iterative version of the following recursive parser composition: | parser | parser := PPChoiceParser new. parser setParsers: (Array with: (limit and ==> [ :each | OrderedCollection new ]) with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])). ^ parser ==> [ :rest | rest asArray ]! !PPPossessiveRepeatingParser commentStamp: 'lr 4/3/2011 14:35' prior: 0! The default repeating parser with standard PEG semantics (i.e. possessive, blind, eager).! !PPTrimmingParser commentStamp: 'lr 4/6/2010 19:27' prior: 0! A parser that silently consumes spaces before and after the delegate parser.! !PPEpsilonParser commentStamp: 'lr 5/15/2008 15:09' prior: 0! A parser that consumes nothing and always succeeds.! !PPFailingParser commentStamp: '' prior: 0! A parser that consumes nothing and always fails. Instance Variables: message The failure message.! !PPListParser commentStamp: '' prior: 0! Abstract parser that parses a list of things in some way (to be specified by the subclasses). Instance Variables: parsers A sequence of other parsers to delegate to.! !PPChoiceParser commentStamp: 'lr 4/18/2008 15:35' prior: 0! A parser that uses the first parser that succeeds.! !PPSequenceParser commentStamp: 'lr 4/18/2008 15:34' prior: 0! A parser that parses a sequence of parsers.! !PPLiteralParser commentStamp: '' prior: 0! Abstract literal parser that parses some kind of literal type (to be specified by subclasses). Instance Variables: literal The literal object to be parsed. message The error message to be generated. ! !PPLiteralObjectParser commentStamp: '' prior: 0! A parser that accepts a single literal object, such as a character. This is the same as the predicate parser 'PPPredicateParser expect: literal' but slightly more efficient.! !PPLiteralSequenceParser commentStamp: 'lr 12/4/2009 18:39' prior: 0! A parser accepts a sequence of literal objects, such as a String. This is an optimization to avoid having to compose longer sequences from PPSequenceParser.! !PPPattern commentStamp: '' prior: 0! PPPattern is meta-parser that is solely used to match other types of parsers. It cannot be used for actually parsing something. The constructor method determines what can be matched.! !PPListPattern commentStamp: '' prior: 0! PPListPattern that is used to match any number of parsers. As its superclass, it cannot be used for actually parsing something.! !PPPluggableParser commentStamp: '' prior: 0! A pluggable parser that passes the parser stream into a block. This enables users to perform manual parsing or to embed other parser frameworks into PetitParser. Instance Variables: block The pluggable one-argument block. ! !PPPredicateParser commentStamp: '' prior: 0! An abstract parser that accepts if a given predicate holds. Instance Variables: predicate The block testing for the predicate. predicateMessage The error message of the predicate. negated The block testing for the negation of the predicate. negatedMessage The error message of the negated predicate.! !PPPredicateObjectParser commentStamp: '' prior: 0! A parser that accepts if a given predicate on one element of the input sequence holds.! !PPPredicateSequenceParser commentStamp: '' prior: 0! A parser that accepts if a given predicate on an arbitrary number of elements of the input sequence holds. Instance Variables: size The number of elements to consume.! !PPUnresolvedParser commentStamp: 'lr 11/28/2009 18:50' prior: 0! This is a temporary placeholder or forward reference to a parser that has not been defined yet. If everything goes well it will eventually be replaced with the real parser instance.! !PPProcessor commentStamp: '' prior: 0! PPProcessor is an abstract superclass to PPRewriter and PPSearcher. It implements common functionality to search and transform grammars. The implementation of these matching algorithms is inspired from the refactoring engine by Don Roberts and John Brant. Contrary to the original implementation that worked on syntax trees, this implementation was generalized and works on possibly cyclic search patterns and grammar graphs. Instance Variables: searches The rules to be processed. context The current search context.! !PPRewriter commentStamp: '' prior: 0! PPRewriter walks over a grammar graph and transforms its parsers. If the grammar is modified, #hasChanged returns true. Instance Variables: changed Indicates if the last operation has changed anything.! !PPSearcher commentStamp: '' prior: 0! PPSearcher walks over a grammar specification and matches its parsers against the patterns using #match:inContext:. Instance Variables: answer The answer propagated between matches.! !PPRule commentStamp: '' prior: 0! PPRule is the abstract superclass of all of the grammar search rules. A rule is the first class representation of a particular pattern to search for. The owner of the rule is the algorithms that actually executes the search. This arrangement allows multiple searches to be conducted by a single processor. Instance Variables: owner The processor that is actually performing the search. search The parse pattern to be searched. ! !PPReplaceRule commentStamp: '' prior: 0! PPReplaceRule is the abstract superclass of all of the transforming rules. The rules change the grammar by replacing the node that matches the rule. Subclasses implement different strategies for this replacement. Instance Variables: verificationBlock Is evaluated with the matching parser and allows for further verification of a match.! !PPBlockReplaceRule commentStamp: '' prior: 0! PPBlockReplaceRule replaces the matching node by the result of evaluating replaceBlock. This allows arbitrary computation to come up with a replacement. Instance Variables: replaceBlock The block that returns the parer to replace to matching parser with. ! !PPParserReplaceRule commentStamp: '' prior: 0! PPParserReplaceRule replaces a matched grammar with another grammar, which may include patterns from the matching grammar. Instance Variables: replaceParser The parser to replace the matched parser with.! !PPSearchRule commentStamp: '' prior: 0! PPSearchRule is a rule that simply searches for matches to the rule. Every time a match is found, answerBlock is evaluated with the parser that matches and the current answer. This two-argument approach allows a collection to be formed from all of the matches, like with #inject:into:. Instance Variables: answerBlock Block to evaluate with the matching node and the current answer. ! !PPToken commentStamp: 'lr 2/25/2013 23:34' prior: 0! PPToken represents a parsed part of the input stream. Contrary to a simple String it remembers where it came from, the original collection, its start and stop position and its parse value. Instance Variables: collection The collection this token comes from. start The start position in the collection. stop The stop position in the collection. value The parse result.! !SequenceableCollection methodsFor: '*petitparser-core-converting' stamp: 'lr 2/7/2010 20:53'! asPetitStream ^ PPStream on: self! ! !Character methodsFor: '*petitparser-core-operators' stamp: 'lr 6/12/2010 09:04'! - aCharacter "Create a range of characters between the receiver and the argument." ^ PPPredicateObjectParser between: self and: aCharacter! ! !Character methodsFor: '*petitparser-core-converting' stamp: 'lr 12/18/2011 15:58'! asParser "Answer a parser that accepts the receiving character." ^ PPLiteralObjectParser on: self! ! !Stream methodsFor: '*petitparser-core-converting' stamp: 'lr 4/8/2010 14:46'! asPetitStream ^ self contents asPetitStream! ! !PPParserResource methodsFor: 'accessing' stamp: 'lr 9/15/2010 12:12'! parserAt: aParserClass "Answer a cached instance of aParserClass." ^ parsers at: aParserClass name ifAbsentPut: [ aParserClass new ]! ! !PPParserResource methodsFor: 'running' stamp: 'lr 3/29/2010 15:20'! setUp super setUp. parsers := Dictionary new! ! !Symbol methodsFor: '*petitparser-core-converting' stamp: 'lr 12/18/2011 15:58'! asParser "Answer a predicate parser named after the receiving symbol. Possible symbols are the method selectors on the class-side of PPPredicateObjectParser." ^ PPPredicateObjectParser perform: self! ! !String methodsFor: '*petitparser-core-converting' stamp: 'lr 11/29/2011 20:48'! asParser "Answer a parser that accepts the receiving string." ^ PPLiteralSequenceParser on: self! ! !PPAbstractParserTest class methodsFor: 'testing' stamp: 'lr 1/12/2011 21:23'! isAbstract ^ self name = #PPAbstractParserTest! ! !PPAbstractParserTest class methodsFor: 'accessing' stamp: 'lr 6/12/2010 08:22'! packageNamesUnderTest ^ #('PetitParser' 'PetitTests')! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'DamienPollet 8/11/2011 01:50'! assert: aParser fail: aCollection ^ self assert: aParser fail: aCollection end: 0! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'DamienPollet 8/11/2011 01:49'! assert: aParser fail: aCollection end: anInteger | stream result | self assert: aParser isPetitParser description: 'Parser invalid'. stream := aCollection asPetitStream. result := aParser parse: stream. self assert: result isPetitFailure description: 'Parser did not fail'. self assert: stream position = anInteger description: 'Parser failed at wrong position'. ^ result! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'DamienPollet 8/11/2011 01:49'! assert: aParser parse: aCollection ^ self assert: aParser parse: aCollection to: nil end: aCollection size ! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'DamienPollet 8/11/2011 01:49'! assert: aParser parse: aCollection end: anInteger ^ self assert: aParser parse: aCollection to: nil end: anInteger! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'DamienPollet 8/11/2011 01:49'! assert: aParser parse: aCollection to: anObject ^ self assert: aParser parse: aCollection to: anObject end: aCollection size ! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'Nicolasanquetil 5/3/2013 15:05'! assert: aParser parse: aCollection to: aTargetObject end: anInteger | stream result | self assert: aParser isPetitParser description: 'Parser invalid'. stream := aCollection asPetitStream. result := aParser parse: stream. aTargetObject isNil ifTrue: [ self deny: result isPetitFailure ] ifFalse: [ self assert: result equals: aTargetObject ]. self assert: stream position = anInteger description: 'Parser accepted at wrong position'. ^ result! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'lr 2/26/2013 00:43'! assert: aParser parse: aCollection toToken: aStartInteger stop: aStopInteger ^ self assert: aParser parse: aCollection toToken: aStartInteger stop: aStopInteger end: aCollection size! ! !PPAbstractParserTest methodsFor: 'utilities' stamp: 'Nicolasanquetil 5/3/2013 15:13'! assert: aParser parse: aParserObject toToken: aStartInteger stop: aStopInteger end: anEndInteger | token | token := self assert: aParser parse: aParserObject to: nil end: anEndInteger. self assert: (token isKindOf: PPToken). self assert: token start equals: aStartInteger. self assert: token stop equals: aStopInteger. ^ token! ! !PPAnalyzerTest class methodsFor: 'accessing' stamp: 'lr 11/19/2009 21:51'! packageNamesUnderTest ^ #('PetitAnalyzer')! ! !PPAnalyzerTest methodsFor: 'utilities' stamp: 'lr 2/7/2010 20:54'! assert: aCollection includes: aString epsilon: aBoolean | parsers checker stream | parsers := aCollection collect: [ :each | each end ]. checker := [ :string | parsers anySatisfy: [ :parser | (parser parse: string asPetitStream) isPetitFailure not ] ]. stream := WriteStream on: String new. 32 to: 127 do: [ :index | (checker value: (String with: (Character value: index))) ifTrue: [ stream nextPut: (Character value: index) ] ]. self assert: stream contents = aString description: 'Expected ' , aString printString , ', but got ' , stream contents printString. self assert: (checker value: '') = aBoolean description: 'Expected epsilon to ' , (aBoolean ifTrue: [ 'be' ] ifFalse: [ 'not be' ]) , ' included'! ! !PPAnalyzerTest methodsFor: 'accessing' stamp: 'lr 11/20/2009 15:29'! grammarA "Güting, Erwig, Übersetzerbau, Springer (p.63)" | grammar | grammar := Dictionary new. " terminals " grammar at: #a put: $a asParser. grammar at: #b put: $b asParser. grammar at: #c put: $c asParser. grammar at: #d put: $d asParser. grammar at: #e put: nil asParser. " non terminals " grammar at: #B put: (grammar at: #b) / (grammar at: #e). grammar at: #A put: (grammar at: #a) / (grammar at: #B). grammar at: #S put: (grammar at: #A) , (grammar at: #B) , (grammar at: #c) , (grammar at: #d). ^ grammar ! ! !PPAnalyzerTest methodsFor: 'accessing' stamp: 'lr 11/19/2009 23:42'! grammarB "The canonical grammar to exercise first- and follow-set calculation, probably originally from the dragon-book." | grammar | grammar := Dictionary new. #(E Ep T Tp F) do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ]. (grammar at: #E) def: (grammar at: #T) , (grammar at: #Ep). (grammar at: #Ep) def: ($+ asParser , (grammar at: #T) , (grammar at: #Ep)) optional. (grammar at: #T) def: (grammar at: #F) , (grammar at: #Tp). (grammar at: #Tp) def: ($* asParser , (grammar at: #F) , (grammar at: #Tp)) optional. (grammar at: #F) def: ($( asParser , (grammar at: #E) , $) asParser) / $i asParser. #(E Ep T Tp F) do: [ :each | (grammar at: each) name: each ]. ^ grammar! ! !PPAnalyzerTest methodsFor: 'accessing' stamp: 'DiegoLont 9/2/2013 12:16'! grammarC "A highly recrusive grammar." | grammar | grammar := PPUnresolvedParser new. grammar def: (grammar , $+ asParser , grammar) / $1 asParser. ^grammar! ! !PPAnalyzerTest methodsFor: 'accessing' stamp: 'DiegoLont 9/2/2013 12:37'! grammarD "A highly ambiguous grammar from: Saichaitanya Jampana. Exploring the problem of ambiguity in context-free grammars. Master's thesis, Oklahoma State University, July 2005." | grammar | grammar := Dictionary new. #(S A a B b) do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ]. (grammar at: #a) def: $a asParser. (grammar at: #b) def: $b asParser. (grammar at: #S) def: (grammar at: #A) , (grammar at: #B) / (grammar at: #a). (grammar at: #A) def: (grammar at: #S) , (grammar at: #B) / (grammar at: #b). (grammar at: #B) def: (grammar at: #B) , (grammar at: #A) / (grammar at: #a). ^ grammar! ! !PPAnalyzerTest methodsFor: 'accessing' stamp: 'lr 11/19/2009 23:52'! grammarE "The most stupid parser, it just references itself and never consumes anything. All algorithms should survive such an attack." | parser | parser := PPDelegateParser new. parser setParser: parser. ^ parser! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:20'! testAllNamedParsers | p1 p2 p3 | p1 := #digit asParser name: 'a'. p2 := (#digit asParser name: 'b') star. p3 := (#digit asParser name: 'c') token end. self assert: p1 allNamedParsers size equals: 1. self assert: p1 allNamedParsers first name equals: 'a'. self assert: p2 allNamedParsers size equals: 1. self assert: p2 allNamedParsers first name equals: 'b'. self assert: p3 allNamedParsers size equals: 1. self assert: p3 allNamedParsers first name equals: 'c'! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:06'! testAllParsers | p1 p2 p3 | p1 := #lowercase asParser. p2 := p1 ==> #asUppercase. p3 := PPUnresolvedParser new. p3 def: p2 / p3. self assert: p1 allParsers size equals: 1. self assert: p2 allParsers size equals: 2. self assert: p3 allParsers size equals: 3! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'lr 11/20/2009 00:00'! testCycleSetGrammarA self grammarA do: [ :each | self assert: each cycleSet isEmpty ]! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'lr 11/20/2009 00:01'! testCycleSetGrammarB self grammarB do: [ :each | self assert: each cycleSet isEmpty ]! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testCycleSetGrammarC | grammar cycleSet | grammar := self grammarC. cycleSet := grammar cycleSet. self assert: cycleSet size equals: 2. self assert: (cycleSet includes: grammar)! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'Nicolasanquetil 5/3/2013 15:20'! testCycleSetGrammarD | grammar cycleSet | grammar := self grammarD. cycleSet := (grammar at: #S) cycleSet. self assert: cycleSet size equals: 4. self assert: (cycleSet includes: (grammar at: #A)). self assert: (cycleSet includes: (grammar at: #S)). cycleSet := (grammar at: #A) cycleSet. self assert: cycleSet size equals: 4. self assert: (cycleSet includes: (grammar at: #A)). self assert: (cycleSet includes: (grammar at: #S)). cycleSet := (grammar at: #B) cycleSet. self assert: cycleSet size equals: 2. self assert: (cycleSet includes: (grammar at: #B))! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'Nicolasanquetil 5/3/2013 15:07'! testCycleSetGrammarE | grammar cycleSet | grammar := self grammarE. cycleSet := grammar cycleSet. self assert: cycleSet size equals: 1. self assert: (cycleSet includes: grammar)! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testCycleSetInChoice | parser cycleSet | parser := PPUnresolvedParser new. parser def: parser / $a asParser. cycleSet := parser cycleSet. self assert: cycleSet size equals: 1. self assert: (cycleSet includes: parser). parser := PPUnresolvedParser new. parser def: $a asParser / parser. cycleSet := parser cycleSet. self assert: cycleSet size equals: 1. self assert: (cycleSet includes: parser)! ! !PPAnalyzerTest methodsFor: 'testing-cycleset' stamp: 'Nicolasanquetil 5/3/2013 14:58'! testCycleSetInSequence | parser cycleSet | parser := PPUnresolvedParser new. parser def: parser , $a asParser. cycleSet := parser cycleSet. self assert: cycleSet size equals: 1. self assert: (cycleSet includes: parser). parser := PPUnresolvedParser new. parser def: nil asParser , parser. cycleSet := parser cycleSet. self assert: cycleSet size equals: 1. self assert: (cycleSet includes: parser). parser := PPUnresolvedParser new. parser def: $a asParser , parser. cycleSet := parser cycleSet. self assert: cycleSet isEmpty! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 12:19'! testDelegateReplace | one other delegate | one := $a asParser. other := $b asParser. delegate := one token. self assert: delegate children first == one. self deny: delegate children first == other. delegate replace: other with: one. self assert: delegate children first == one. self deny: delegate children first == other. delegate replace: one with: other. self deny: delegate children first == one. self assert: delegate children first == other! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 7/17/2011 12:22'! testFirstSetExpression | grammar | grammar := PPArithmeticParser new. self assert: grammar start firstSet includes: '(-0123456789' epsilon: false. self assert: grammar addition firstSet includes: '(-0123456789' epsilon: false. self assert: grammar factors firstSet includes: '(-0123456789' epsilon: false. self assert: grammar multiplication firstSet includes: '(-0123456789' epsilon: false. self assert: grammar number firstSet includes: '-0123456789' epsilon: false. self assert: grammar parentheses firstSet includes: '(' epsilon: false. self assert: grammar power firstSet includes: '(-0123456789' epsilon: false. self assert: grammar primary firstSet includes: '(-0123456789' epsilon: false. self assert: grammar terms firstSet includes: '(-0123456789' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 11/12/2009 17:53'! testFirstSetGrammarA | grammar | grammar := self grammarA. self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false. self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false. self assert: (grammar at: #c) firstSet includes: 'c' epsilon: false. self assert: (grammar at: #d) firstSet includes: 'd' epsilon: false. self assert: (grammar at: #e) firstSet includes: '' epsilon: true. self assert: (grammar at: #S) firstSet includes: 'abc' epsilon: false. self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: true. self assert: (grammar at: #B) firstSet includes: 'b' epsilon: true! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 11/12/2009 17:53'! testFirstSetGrammarB | grammar | grammar := self grammarB. self assert: (grammar at: #E) firstSet includes: '(i' epsilon: false. self assert: (grammar at: #Ep) firstSet includes: '+' epsilon: true. self assert: (grammar at: #T) firstSet includes: '(i' epsilon: false. self assert: (grammar at: #Tp) firstSet includes: '*' epsilon: true. self assert: (grammar at: #F) firstSet includes: '(i' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 11/12/2009 17:53'! testFirstSetGrammarC | grammar | grammar := self grammarC. self assert: grammar firstSet includes: '1' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'TestRunner 11/12/2009 17:55'! testFirstSetGrammarD | grammar | grammar := self grammarD. self assert: (grammar at: #S) firstSet includes: 'ab' epsilon: false. self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: false. self assert: (grammar at: #B) firstSet includes: 'a' epsilon: false. self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false. self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 11/19/2009 23:55'! testFirstSetGrammarE self assert: self grammarE firstSet includes: '' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-firstset' stamp: 'lr 10/22/2009 18:10'! testFirstSetLambda | grammar | grammar := PPLambdaParser new. self assert: grammar start firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false. self assert: grammar abstraction firstSet includes: '\' epsilon: false. self assert: grammar application firstSet includes: '(' epsilon: false. self assert: grammar expression firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false. self assert: grammar variable firstSet includes: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-followset' stamp: 'lr 10/22/2009 19:53'! testFollowSetExampleA | grammar followSets | grammar := self grammarA. followSets := (grammar at: #S) followSets. self assert: (followSets at: (grammar at: #a)) includes: 'bc' epsilon: false. self assert: (followSets at: (grammar at: #b)) includes: 'bc' epsilon: false. self assert: (followSets at: (grammar at: #c)) includes: 'd' epsilon: false. self assert: (followSets at: (grammar at: #d)) includes: '' epsilon: true. self assert: (followSets at: (grammar at: #e)) includes: 'bc' epsilon: false. self assert: (followSets at: (grammar at: #S)) includes: '' epsilon: true. self assert: (followSets at: (grammar at: #A)) includes: 'bc' epsilon: false. self assert: (followSets at: (grammar at: #B)) includes: 'bc' epsilon: false! ! !PPAnalyzerTest methodsFor: 'testing-followset' stamp: 'lr 10/22/2009 19:06'! testFollowSetExampleB | grammar followSets | grammar := self grammarB. followSets := (grammar at: #E) followSets. self assert: (followSets at: (grammar at: #E)) includes: ')' epsilon: true. self assert: (followSets at: (grammar at: #Ep)) includes: ')' epsilon: true. self assert: (followSets at: (grammar at: #T)) includes: ')+' epsilon: true. self assert: (followSets at: (grammar at: #Tp)) includes: ')+' epsilon: true. self assert: (followSets at: (grammar at: #F)) includes: ')*+' epsilon: true! ! !PPAnalyzerTest methodsFor: 'testing-followset' stamp: 'lr 10/22/2009 19:10'! testFollowSetExampleC self assert: self grammarC followSet includes: '+' epsilon: true! ! !PPAnalyzerTest methodsFor: 'testing-followset' stamp: 'lr 11/12/2009 18:00'! testFollowSetExampleD | grammar followSets | grammar := self grammarD. followSets := (grammar at: #S) followSets. self assert: (followSets at: (grammar at: #S)) includes: 'a' epsilon: true. self assert: (followSets at: (grammar at: #A)) includes: 'ab' epsilon: true. self assert: (followSets at: (grammar at: #B)) includes: 'ab' epsilon: true. self assert: (followSets at: (grammar at: #a)) includes: 'ab' epsilon: true. self assert: (followSets at: (grammar at: #b)) includes: 'ab' epsilon: true! ! !PPAnalyzerTest methodsFor: 'testing-followset' stamp: 'lr 11/19/2009 23:54'! testFollowSetExampleE self assert: self grammarE followSet includes: '' epsilon: true! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:07'! testInnerChildren | p1 p2 p3 | p1 := #digit asParser name: 'a'. p2 := #digit asParser star name: 'b'. p3 := (#digit asParser name: 'c') token star end. self assert: p1 innerChildren isEmpty. self assert: p2 innerChildren size equals: 1. self assert: (p2 innerChildren allSatisfy: [ :each | each name isNil ]). self assert: p3 innerChildren size equals: 2. self assert: (p3 innerChildren allSatisfy: [ :each | each name isNil ])! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'lr 11/20/2009 15:29'! testIsNullable self assert: $a asParser star isNullable. self assert: nil asParser isNullable. self deny: $a asParser plus isNullable. self deny: PPLiteralSequenceParser new isNullable. self deny: PPLiteralObjectParser new isNullable. self deny: PPPredicateParser new isNullable. self deny: PPChoiceParser new isNullable. self deny: PPSequenceParser new isNullable. self deny: PPAndParser new isNullable. self deny: PPTokenParser new isNullable! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'lr 6/12/2010 09:04'! testIsTerminal self assert: PPEpsilonParser new isTerminal. self assert: PPFailingParser new isTerminal. self assert: PPPluggableParser new isTerminal. self assert: PPLiteralObjectParser new isTerminal. self assert: PPLiteralSequenceParser new isTerminal. self assert: PPPredicateObjectParser new isTerminal. self assert: PPPredicateSequenceParser new isTerminal. self deny: ($a asParser / $b asParser) isTerminal. self deny: ($a asParser , $b asParser) isTerminal. self deny: ($a asParser and) isTerminal. self deny: ($a asParser not) isTerminal! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 12:21'! testListReplace | one other another list | one := $a asParser. other := $b asParser. another := $c asParser. list := one , another , one. self assert: list children first == one. self assert: list children second == another. self assert: list children last == one. list replace: other with: one. self assert: list children first == one. self assert: list children second == another. self assert: list children last == one. list replace: one with: other. self assert: list children first == other. self assert: list children second == another. self assert: list children last == other. list replace: another with: one. self assert: list children first == other. self assert: list children second == one. self assert: list children last == other! ! !PPAnalyzerTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testNamedChildren | p1 p2 p3 p4 | p1 := #digit asParser name: 'a'. p2 := (#digit asParser name: 'b') star. p3 := (#digit asParser name: 'c') token end. p4 := ((#digit asParser name: 'c') token name: 'd') end. self assert: p1 namedChildren isEmpty. self assert: p2 namedChildren size equals: 1. self assert: p2 namedChildren first name equals: 'b'. self assert: p3 namedChildren size equals: 1. self assert: p3 namedChildren first name equals: 'c'. self assert: p4 namedChildren size equals: 1. self assert: p4 namedChildren first name equals: 'd'! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/4/2011 19:22'! testRepetitionReplace | one two otherone othertwo repetition | one := $a asParser. two := $b asParser. otherone := $1 asParser. othertwo := $2 asParser. repetition := one starLazy: two. self assert: repetition children first == one. self assert: repetition children second == two. repetition replace: one with: otherone. self assert: repetition children first == otherone. self assert: repetition children second == two. repetition replace: two with: othertwo. self assert: repetition children first == otherone. self assert: repetition children second == othertwo! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 23:33'! testTransformIdentityGrammarC | orig tran | orig := self grammarC. tran := orig transform: [ :each | each ]. self deny: orig == tran. self deny: orig children first == tran children first. self deny: orig children first children first == tran children first children first. self deny: orig children first children last == tran children first children last. self deny: orig children last == tran children last. self assert: orig class == PPChoiceParser. self assert: orig children first class == PPSequenceParser. self assert: orig children first children first == orig. self assert: orig children first children last == orig. self assert: orig children last class == PPLiteralObjectParser. self assert: tran class == PPChoiceParser. self assert: tran children first class == PPSequenceParser. self assert: tran children first children first == tran. self assert: tran children first children last == tran. self assert: tran children last class == PPLiteralObjectParser! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 23:13'! testTransformIdentityGrammarE | orig tran | orig := self grammarE. tran := orig transform: [ :each | each ]. self deny: orig == tran. self deny: orig children first = tran children first. self assert: orig class == PPDelegateParser. self assert: orig children first == orig. self assert: tran class == PPDelegateParser. self assert: tran children first == tran! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 23:32'! testTransformWrapGrammarC | orig tran | orig := self grammarC. tran := orig transform: [ :each | each memoized ]. self assert: orig class == PPChoiceParser. self assert: orig children first class == PPSequenceParser. self assert: orig children first children first == orig. self assert: orig children first children last == orig. self assert: orig children last class == PPLiteralObjectParser. self assert: tran class == PPMemoizedParser. self assert: tran children first class == PPChoiceParser. self assert: tran children first children first class == PPMemoizedParser. self assert: tran children first children first children first class == PPSequenceParser. self assert: tran children first children first children first children first == tran. self assert: tran children first children first children first children last == tran. self assert: tran children first children last class == PPMemoizedParser. self assert: tran children first children last children first class == PPLiteralObjectParser! ! !PPAnalyzerTest methodsFor: 'testing-transform' stamp: 'lr 4/13/2010 23:08'! testTransformWrapGrammarE | orig tran | orig := self grammarE. tran := orig transform: [ :each | each memoized ]. self assert: orig class == PPDelegateParser. self assert: orig children first == orig. self assert: tran class == PPMemoizedParser. self assert: tran children first class == PPDelegateParser. self assert: tran children first children first == tran! ! !PPComposedTest methodsFor: 'accessing' stamp: 'lr 2/8/2010 16:44'! comment ^ ($" asParser , $" asParser negate star , $" asParser) flatten! ! !PPComposedTest methodsFor: 'accessing' stamp: 'lr 2/8/2010 16:44'! identifier ^ (#letter asParser , #word asParser star) flatten! ! !PPComposedTest methodsFor: 'accessing' stamp: 'lr 2/8/2010 16:44'! number ^ ($- asParser optional , #digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten! ! !PPComposedTest methodsFor: 'testing-examples' stamp: 'lr 2/8/2010 16:44'! testComment self assert: self comment parse: '""' to: '""'. self assert: self comment parse: '"a"' to: '"a"'. self assert: self comment parse: '"ab"' to: '"ab"'. self assert: self comment parse: '"abc"' to: '"abc"'. self assert: self comment parse: '""a' to: '""' end: 2. self assert: self comment parse: '"a"a' to: '"a"' end: 3. self assert: self comment parse: '"ab"a' to: '"ab"' end: 4. self assert: self comment parse: '"abc"a' to: '"abc"' end: 5. self assert: self comment fail: '"'. self assert: self comment fail: '"a'. self assert: self comment fail: '"aa'. self assert: self comment fail: 'a"'. self assert: self comment fail: 'aa"'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 7/6/2009 08:34'! testDoubledString | parser | parser := ($' asParser , (($' asParser , $' asParser) / $' asParser negate) star flatten , $' asParser) ==> [ :nodes | nodes second copyReplaceAll: '''''' with: '''' ]. self assert: parser parse: '''''' to: ''. self assert: parser parse: '''a''' to: 'a'. self assert: parser parse: '''ab''' to: 'ab'. self assert: parser parse: '''a''''b''' to: 'a''b'. self assert: parser parse: '''a''''''''b''' to: 'a''''b'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 12/5/2010 14:25'! testEvenNumber "Create a grammar that parses an even number of a's and b's." | a as b bs s | a := $a asParser ==> [ :char | as := as + 1 ]. b := $b asParser ==> [ :char | bs := bs + 1 ]. s := (a / b) star >=> [ :stream :cc | as := bs := 0. cc value. (as even and: [ bs even ]) ifFalse: [ PPFailure message: 'Even number of a and b expected' at: 0 ] ]. self assert: s fail: 'a' end: 1. self assert: s fail: 'b' end: 1. self assert: s fail: 'ab' end: 2. self assert: s fail: 'ba' end: 2. self assert: s fail: 'aaa' end: 3. self assert: s fail: 'bbb' end: 3. self assert: s fail: 'aab' end: 3. self assert: s fail: 'abb' end: 3. self assert: s parse: ''. self assert: s parse: 'aa'. self assert: s parse: 'bb'. self assert: s parse: 'aaaa'. self assert: s parse: 'aabb'. self assert: s parse: 'abab'. self assert: s parse: 'baba'. self assert: s parse: 'bbaa'. self assert: s parse: 'bbbb'! ! !PPComposedTest methodsFor: 'testing-examples' stamp: 'lr 2/8/2010 16:44'! testIdentifier self assert: self identifier parse: 'a' to: 'a'. self assert: self identifier parse: 'a1' to: 'a1'. self assert: self identifier parse: 'a12' to: 'a12'. self assert: self identifier parse: 'ab' to: 'ab'. self assert: self identifier parse: 'a1b' to: 'a1b'. self assert: self identifier parse: 'a_' to: 'a' end: 1. self assert: self identifier parse: 'a1-' to: 'a1' end: 2. self assert: self identifier parse: 'a12+' to: 'a12' end: 3. self assert: self identifier parse: 'ab^' to: 'ab' end: 2. self assert: self identifier parse: 'a1b*' to: 'a1b' end: 3. self assert: self identifier fail: ''. self assert: self identifier fail: '1'. self assert: self identifier fail: '1a'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:11'! testIfThenElse "S ::= if C then S else S | if C then S | X" | start if then else cond expr parser | start := PPDelegateParser new. if := 'if' asParser token trim. then := 'then' asParser token trim. else := 'else' asParser token trim. cond := 'C' asParser token trim. expr := 'X' asParser token trim. start setParser: (if , cond , then , start , else , start) / (if , cond , then , start) / expr. parser := start end. self assert: parser parse: 'X'. self assert: parser parse: 'if C then X'. self assert: parser parse: 'if C then X else X'. self assert: parser parse: 'if C then if C then X'. self assert: parser parse: 'if C then if C then X else if C then X'. self assert: parser parse: 'if C then if C then X else X else if C then X'. self assert: parser parse: 'if C then if C then X else X else if C then X else X'. self assert: parser fail: 'if C'. self assert: parser fail: 'if C else X'. self assert: parser fail: 'if C then if C'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:09'! testLeftRecursion "S ::= S 'x' S / '1'" | parser | parser := PPDelegateParser new. parser setParser: ((parser , $x asParser , parser) / $1 asParser) memoized flatten. self assert: parser parse: '1' to: '1'. self assert: parser parse: '1x1' to: '1x1'. self assert: parser parse: '1x1x1' to: '1x1x1'. self assert: parser parse: '1x1x1x1' to: '1x1x1x1'. self assert: parser parse: '1x1x1x1x1' to: '1x1x1x1x1'. self assert: parser parse: '1x1x1x1x1x1' to: '1x1x1x1x1x1'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 2/25/2013 23:50'! testListOfIntegers "S ::= S , number | number" | number list parser | number := #digit asParser plus flatten trim ==> [ :node | node asInteger ]. list := (number separatedBy: $, asParser token trim) ==> [ :node | node select: [ :each | each isInteger ] ]. parser := list end. self assert: parser parse: '1' to: (1 to: 1) asArray. self assert: parser parse: '1,2' to: (1 to: 2) asArray. self assert: parser parse: '1,2,3' to: (1 to: 3) asArray. self assert: parser parse: '1,2,3,4' to: (1 to: 4) asArray. self assert: parser parse: '1,2,3,4,5' to: (1 to: 5) asArray. self assert: parser parse: '1' to: (1 to: 1) asArray. self assert: parser parse: '1, 2' to: (1 to: 2) asArray. self assert: parser parse: '1, 2, 3' to: (1 to: 3) asArray. self assert: parser parse: '1, 2, 3, 4' to: (1 to: 4) asArray. self assert: parser parse: '1, 2, 3, 4, 5' to: (1 to: 5) asArray. self assert: parser parse: '1' to: (1 to: 1) asArray. self assert: parser parse: '1 ,2' to: (1 to: 2) asArray. self assert: parser parse: '1 ,2 ,3' to: (1 to: 3) asArray. self assert: parser parse: '1 ,2 ,3 ,4' to: (1 to: 4) asArray. self assert: parser parse: '1 ,2 ,3 ,4 ,5' to: (1 to: 5) asArray. self assert: parser fail: ''. self assert: parser fail: ','. self assert: parser fail: '1,'. self assert: parser fail: '1,,2'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:09'! testNestedComments "C ::= B I* E" "I ::= !!E (C | T)" "B ::= /*" "E ::= */" "T ::= ." | begin end any inside parser | begin := '/*' asParser. end := '*/' asParser. any := #any asParser. parser := PPDelegateParser new. inside := end not , (parser / any). parser setParser: begin , inside star , end. self assert: parser parse: '/*ab*/cd' end: 6. self assert: parser parse: '/*a/*b*/c*/'. self assert: parser fail: '/*a/*b*/c'! ! !PPComposedTest methodsFor: 'testing-examples' stamp: 'lr 2/8/2010 16:44'! testNumber self assert: self number parse: '1' to: '1'. self assert: self number parse: '12' to: '12'. self assert: self number parse: '12.3' to: '12.3'. self assert: self number parse: '12.34' to: '12.34'. self assert: self number parse: '1..' to: '1' end: 1. self assert: self number parse: '12-' to: '12' end: 2. self assert: self number parse: '12.3.' to: '12.3' end: 4. self assert: self number parse: '12.34.' to: '12.34' end: 5. self assert: self number parse: '-1' to: '-1'. self assert: self number parse: '-12' to: '-12'. self assert: self number parse: '-12.3' to: '-12.3'. self assert: self number parse: '-12.34' to: '-12.34'. self assert: self number fail: ''. self assert: self number fail: '-'. self assert: self number fail: '.'. self assert: self number fail: '.1'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:10'! testPalindrome "S0 ::= a S1 a | b S1 b | ... S1 ::= S0 | epsilon" | s0 s1 parser | s0 := PPDelegateParser new. s1 := PPDelegateParser new. s0 setParser: ($a asParser , s1 , $a asParser) / ($b asParser , s1 , $b asParser) / ($c asParser , s1 , $c asParser). s1 setParser: s0 / nil asParser. parser := s0 flatten end. self assert: parser parse: 'aa' to: 'aa'. self assert: parser parse: 'bb' to: 'bb'. self assert: parser parse: 'cc' to: 'cc'. self assert: parser parse: 'abba' to: 'abba'. self assert: parser parse: 'baab' to: 'baab'. self assert: parser parse: 'abccba' to: 'abccba'. self assert: parser parse: 'abaaba' to: 'abaaba'. self assert: parser parse: 'cbaabc' to: 'cbaabc'. self assert: parser fail: 'a'. self assert: parser fail: 'ab'. self assert: parser fail: 'aab'. self assert: parser fail: 'abccbb'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:10'! testParseAaaBbb "S0 ::= a S1 b S1 ::= S0 | epsilon" | s0 s1 parser | s0 := PPDelegateParser new. s1 := PPDelegateParser new. s0 setParser: $a asParser , s1 , $b asParser. s1 setParser: s0 / nil asParser. parser := s0 flatten. self assert: parser parse: 'ab' to: 'ab'. self assert: parser parse: 'aabb' to: 'aabb'. self assert: parser parse: 'aaabbb' to: 'aaabbb'. self assert: parser parse: 'aaaabbbb' to: 'aaaabbbb'. self assert: parser parse: 'abb' to: 'ab' end: 2. self assert: parser parse: 'aabbb' to: 'aabb' end: 4. self assert: parser parse: 'aaabbbb' to: 'aaabbb' end: 6. self assert: parser parse: 'aaaabbbbb' to: 'aaaabbbb' end: 8. self assert: parser fail: 'a'. self assert: parser fail: 'b'. self assert: parser fail: 'aab'. self assert: parser fail: 'aaabb'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:10'! testParseAaaaaa "S ::= a a S | epsilon" | s0 s1 parser | s0 := PPDelegateParser new. s1 := $a asParser , $a asParser , s0. s0 setParser: s1 / nil asParser. parser := s0 flatten. self assert: parser parse: '' to: ''. self assert: parser parse: 'aa' to: 'aa'. self assert: parser parse: 'aaaa' to: 'aaaa'. self assert: parser parse: 'aaaaaa' to: 'aaaaaa'. self assert: parser parse: 'a' to: '' end: 0. self assert: parser parse: 'aaa' to: 'aa' end: 2. self assert: parser parse: 'aaaaa' to: 'aaaa' end: 4. self assert: parser parse: 'aaaaaaa' to: 'aaaaaa' end: 6! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 9/18/2008 09:26'! testParseAbAbAb "S ::= (A B)+" | parser | parser := ($a asParser , $b asParser) plus flatten. self assert: parser parse: 'ab' to: 'ab'. self assert: parser parse: 'abab' to: 'abab'. self assert: parser parse: 'ababab' to: 'ababab'. self assert: parser parse: 'abababab' to: 'abababab'. self assert: parser parse: 'abb' to: 'ab' end: 2. self assert: parser parse: 'ababa' to: 'abab' end: 4. self assert: parser parse: 'abababb' to: 'ababab' end: 6. self assert: parser parse: 'ababababa' to: 'abababab' end: 8. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: 'bab'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 9/18/2008 09:26'! testParseAbabbb "S ::= (A | B)+" | parser | parser := ($a asParser / $b asParser) plus flatten. self assert: parser parse: 'a' to: 'a'. self assert: parser parse: 'b' to: 'b'. self assert: parser parse: 'ab' to: 'ab'. self assert: parser parse: 'ba' to: 'ba'. self assert: parser parse: 'aaa' to: 'aaa'. self assert: parser parse: 'aab' to: 'aab'. self assert: parser parse: 'aba' to: 'aba'. self assert: parser parse: 'baa' to: 'baa'. self assert: parser parse: 'abb' to: 'abb'. self assert: parser parse: 'bab' to: 'bab'. self assert: parser parse: 'bba' to: 'bba'. self assert: parser parse: 'bbb' to: 'bbb'. self assert: parser parse: 'ac' to: 'a' end: 1. self assert: parser parse: 'bc' to: 'b' end: 1. self assert: parser parse: 'abc' to: 'ab' end: 2. self assert: parser parse: 'bac' to: 'ba' end: 2. self assert: parser fail: ''. self assert: parser fail: 'c'! ! !PPComposedTest methodsFor: 'testing' stamp: 'lr 6/24/2011 06:11'! testParseAnBnCn "PEGs for a non context- free language: a^n , b^n , c^n S <- &P1 P2 P1 <- AB 'c' AB <- 'a' AB 'b' / epsilon P2 <- 'a'* BC end BC <- 'b' BC 'c' / epsilon" | s p1 ab p2 bc | s := PPDelegateParser new. p1 := PPDelegateParser new. ab := PPDelegateParser new. p2 := PPDelegateParser new. bc := PPDelegateParser new. s setParser: (p1 and , p2 end) flatten. p1 setParser: ab , $c asParser. ab setParser: ($a asParser , ab , $b asParser) optional. p2 setParser: $a asParser star , bc. bc setParser: ($b asParser , bc , $c asParser) optional. self assert: s parse: 'abc' to: 'abc'. self assert: s parse: 'aabbcc' to: 'aabbcc'. self assert: s parse: 'aaabbbccc' to: 'aaabbbccc'. self assert: s fail: 'bc'. self assert: s fail: 'ac'. self assert: s fail: 'ab'. self assert: s fail: 'abbcc'. self assert: s fail: 'aabcc'. self assert: s fail: 'aabbc'! ! !PPComposedTest methodsFor: 'testing-examples' stamp: 'lr 2/25/2013 23:51'! testReturn | number spaces return | number := #digit asParser plus flatten. spaces := #space asParser star. return := (spaces , $^ asParser token , spaces , number) ==> [ :nodes | Array with: #return with: (nodes at: 4) ]. self assert: return parse: '^1' to: #(return '1'). self assert: return parse: '^12' to: #(return '12'). self assert: return parse: '^ 123' to: #(return '123'). self assert: return parse: '^ 1234' to: #(return '1234'). self assert: return fail: '1'. self assert: return fail: '^'! ! !PPArithmeticParserTest methodsFor: 'accessing' stamp: 'FirstnameLastname 11/26/2009 21:53'! parserClass ^ PPArithmeticParser! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/30/2008 17:21'! testAdd self assert: '1 + 2' is: 3. self assert: '2 + 1' is: 3. self assert: '1 + 2.3' is: 3.3. self assert: '2.3 + 1' is: 3.3. self assert: '1 + -2' is: -1. self assert: '-2 + 1' is: -1! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/21/2008 10:23'! testAddMany self assert: '1' is: 1. self assert: '1 + 2' is: 3. self assert: '1 + 2 + 3' is: 6. self assert: '1 + 2 + 3 + 4' is: 10. self assert: '1 + 2 + 3 + 4 + 5' is: 15! ! !PPArithmeticParserTest methodsFor: 'testing-expression' stamp: 'lr 4/21/2008 10:03'! testBrackets self assert: '(1)' is: 1. self assert: '(1 + 2)' is: 3. self assert: '((1))' is: 1. self assert: '((1 + 2))' is: 3. self assert: '2 * (3 + 4)' is: 14. self assert: '(2 + 3) * 4' is: 20. self assert: '6 / (2 + 4)' is: 1. self assert: '(2 + 6) / 2' is: 4! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/21/2008 09:32'! testDiv self assert: '12 / 3' is: 4. self assert: '-16 / -4' is: 4! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 7/3/2008 15:46'! testDivMany self assert: '100 / 2' is: 50. self assert: '100 / 2 / 2' is: 25. self assert: '100 / 2 / 2 / 5' is: 5. self assert: '100 / 2 / 2 / 5 / 5' is: 1 ! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/21/2008 09:31'! testMul self assert: '2 * 3' is: 6. self assert: '2 * -4' is: -8! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/21/2008 10:16'! testMulMany self assert: '1 * 2' is: 2. self assert: '1 * 2 * 3' is: 6. self assert: '1 * 2 * 3 * 4' is: 24. self assert: '1 * 2 * 3 * 4 * 5' is: 120! ! !PPArithmeticParserTest methodsFor: 'testing' stamp: 'lr 4/21/2008 09:32'! testNum self assert: '0' is: 0. self assert: '0.0' is: 0.0. self assert: '1' is: 1. self assert: '1.2' is: 1.2. self assert: '34' is: 34. self assert: '56.78' is: 56.78. self assert: '-9' is: -9. self assert: '-9.9' is: -9.9! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 7/3/2008 15:28'! testPow self assert: '2 ^ 3' is: 8. self assert: '-2 ^ 3' is: -8. self assert: '-2 ^ -3' is: -0.125! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 7/3/2008 15:45'! testPowMany self assert: '4 ^ 3' is: 64. self assert: '4 ^ 3 ^ 2' is: 262144. self assert: '4 ^ 3 ^ 2 ^ 1' is: 262144. self assert: '4 ^ 3 ^ 2 ^ 1 ^ 0' is: 262144! ! !PPArithmeticParserTest methodsFor: 'testing-expression' stamp: 'lr 4/21/2008 10:00'! testPriority self assert: '2 * 3 + 4' is: 10. self assert: '2 + 3 * 4' is: 14. self assert: '6 / 3 + 4' is: 6. self assert: '2 + 6 / 2' is: 5! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 8/14/2010 13:38'! testSub self assert: '1 - 2' is: -1. self assert: '1.2 - 1.2' is: 0. self assert: '1 - -2' is: 3. self assert: '-1 - -2' is: 1! ! !PPArithmeticParserTest methodsFor: 'testing-operations' stamp: 'lr 4/28/2008 11:56'! testSubMany self assert: '1' is: 1. self assert: '1 - 2' is: -1. self assert: '1 - 2 - 3' is: -4. self assert: '1 - 2 - 3 - 4' is: -8. self assert: '1 - 2 - 3 - 4 - 5' is: -13! ! !PPExpressionParserTest class methodsFor: 'testing' stamp: 'lr 4/6/2010 19:40'! shouldInheritSelectors ^ true! ! !PPExpressionParserTest methodsFor: 'accessing' stamp: 'lr 2/25/2013 23:50'! parserInstance | expression parens number | expression := PPExpressionParser new. parens := $( asParser trim , expression , $) asParser trim ==> [ :value | value second ]. number := (#digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten trim ==> [ :value | value asNumber ]. expression term: parens / number. expression group: [ :g | g prefix: $- asParser trim do: [ :op :a | a negated ] ]; group: [ :g | g postfix: '++' asParser trim do: [ :a :op | a + 1 ]. g postfix: '--' asParser trim do: [ :a :op | a - 1 ] ]; group: [ :g | g right: $^ asParser trim do: [ :a :op :b | a raisedTo: b ] ]; group: [ :g | g left: $* asParser trim do: [ :a :op :b | a * b ]. g left: $/ asParser trim do: [ :a :op :b | a / b ] ]; group: [ :g | g left: $+ asParser trim do: [ :a :op :b | a + b ]. g left: $- asParser trim do: [ :a :op :b | a - b ] ]. ^ expression end! ! !PPExpressionParserTest methodsFor: 'testing' stamp: 'FirstnameLastname 11/26/2009 22:13'! testPostfixAdd self assert: '0++' is: 1. self assert: '0++++' is: 2. self assert: '0++++++' is: 3. self assert: '0+++1' is: 2. self assert: '0+++++1' is: 3. self assert: '0+++++++1' is: 4! ! !PPExpressionParserTest methodsFor: 'testing' stamp: 'FirstnameLastname 11/26/2009 22:11'! testPostfixSub self assert: '1--' is: 0. self assert: '2----' is: 0. self assert: '3------' is: 0. self assert: '2---1' is: 0. self assert: '3-----1' is: 0. self assert: '4-------1' is: 0.! ! !PPExpressionParserTest methodsFor: 'testing' stamp: 'FirstnameLastname 11/26/2009 22:13'! testPrefixNegate self assert: '1' is: 1. self assert: '-1' is: -1. self assert: '--1' is: 1. self assert: '---1' is: -1! ! !PPCompositeParserTest class methodsFor: 'testing' stamp: 'lr 10/4/2009 17:09'! isAbstract ^ self name = #PPCompositeParserTest! ! !PPCompositeParserTest class methodsFor: 'accessing' stamp: 'lr 3/29/2010 15:21'! resources ^ Array with: PPParserResource! ! !PPCompositeParserTest methodsFor: 'utilities' stamp: 'lr 11/29/2010 11:20'! assert: aCollection is: anObject self parse: aCollection. self assert: result = anObject description: 'Got: ' , result printString , '; Expected: ' , anObject printString resumable: true! ! !PPCompositeParserTest methodsFor: 'parsing' stamp: 'lr 11/18/2011 19:45'! fail: aString rule: aSymbol | production | production := self parserInstanceFor: aSymbol. result := production end parse: aString. self assert: result isPetitFailure description: 'Able to parse ' , aString printString. ^ result! ! !PPCompositeParserTest methodsFor: 'parsing' stamp: 'lr 11/29/2010 11:26'! parse: aString ^ self parse: aString rule: #start! ! !PPCompositeParserTest methodsFor: 'parsing' stamp: 'lr 11/18/2011 19:45'! parse: aString rule: aSymbol | production | production := self parserInstanceFor: aSymbol. result := production end parse: aString. self deny: result isPetitFailure description: 'Unable to parse ' , aString printString. ^ result! ! !PPCompositeParserTest methodsFor: 'accessing' stamp: 'FirstnameLastname 11/26/2009 21:52'! parserClass self subclassResponsibility! ! !PPCompositeParserTest methodsFor: 'accessing' stamp: 'lr 3/29/2010 15:21'! parserInstance ^ PPParserResource current parserAt: self parserClass! ! !PPCompositeParserTest methodsFor: 'accessing' stamp: 'lr 11/18/2011 19:44'! parserInstanceFor: aSymbol ^ aSymbol = #start ifTrue: [ self parserInstance ] ifFalse: [ self parserInstance productionAt: aSymbol ifAbsent: [ self error: 'Production ' , self parserClass name , '>>' , aSymbol printString , ' not found.' ] ]! ! !PPCompositeParserTest methodsFor: 'running' stamp: 'FirstnameLastname 11/26/2009 21:48'! setUp super setUp. parser := self parserInstance! ! !PPCompositeParserTest methodsFor: 'running' stamp: 'lr 11/29/2010 11:19'! tearDown super tearDown. parser := result := nil! ! !PPLambdaParserTest methodsFor: 'accessing' stamp: 'FirstnameLastname 11/26/2009 21:53'! parserClass ^ PPLambdaParser! ! !PPLambdaParserTest methodsFor: 'testing' stamp: 'lr 4/30/2008 09:38'! testAbstraction self assert: '\x.y' is: #('x' 'y'). self assert: '\x.\y.z' is: #('x' ('y' 'z'))! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:17'! testAnd self assert: self parserClass and equals: #('p' #('q' #(#('p' 'q') 'p')))! ! !PPLambdaParserTest methodsFor: 'testing' stamp: 'lr 4/30/2008 09:38'! testApplication self assert: '(x x)' is: #('x' 'x'). self assert: '(x y)' is: #('x' 'y'). self assert: '((x y) z)' is: #(('x' 'y') 'z'). self assert: '(x (y z))' is: #('x' ('y' 'z'))! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:02'! testFalse self assert: self parserClass false equals: #('x' #('y' 'y'))! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:11'! testIfThenElse self assert: self parserClass ifthenelse equals: #('p' 'p')! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:18'! testNot self assert: self parserClass not equals: #('p' #('a' #('b' #(#('p' 'b') 'a'))))! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:03'! testOr self assert: self parserClass or equals: #('p' #('q' #(#('p' 'p') 'q')))! ! !PPLambdaParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:11'! testParseOnError | beenHere | result := self parserClass parse: '\x.y' onError: [ self fail ]. self assert: result equals: #('x' 'y'). beenHere := false. result := self parserClass parse: '\x.' onError: [ beenHere := true ]. self assert: beenHere. beenHere := false. result := self parserClass parse: '\x.' onError: [ :fail | beenHere := true. fail ]. self assert: beenHere. self assert: (result message includesSubstring: '$('). self assert: (result message includesSubstring: 'expected'). self assert: result position equals: 0. beenHere := false. result := self parserClass parse: '\x.' onError: [ :msg :pos | self assert: (msg includesSubstring: '$('). self assert: (msg includesSubstring: 'expected'). self assert: pos equals: 0. beenHere := true ]. self assert: result. self assert: beenHere! ! !PPLambdaParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:18'! testParseStartingAtOnError | beenHere | result := self parserClass parse: 'x' startingAt: #variable onError: [ self fail ]. self assert: result equals: 'x'. beenHere := false. result := self parserClass parse: '\' startingAt: #variable onError: [ beenHere := true ]. self assert: beenHere. beenHere := false. result := self parserClass parse: '\' startingAt: #variable onError: [ :fail | beenHere := true. fail ]. self assert: beenHere. self assert: result message equals: 'letter expected'. self assert: result position equals: 0. beenHere := false. result := self parserClass parse: '\' startingAt: #variable onError: [ :msg :pos | self assert: msg equals: 'letter expected'. self assert: pos equals: 0. beenHere := true ]. self assert: beenHere! ! !PPLambdaParserTest methodsFor: 'testing-utilities' stamp: 'FirstnameLastname 11/26/2009 21:56'! testProductionAt self assert: (parser productionAt: #foo) isNil. self assert: (parser productionAt: #foo ifAbsent: [ true ]). self assert: (parser productionAt: #start) notNil. self assert: (parser productionAt: #start ifAbsent: [ true ]) notNil. self assert: (parser productionAt: #variable) notNil. self assert: (parser productionAt: #variable ifAbsent: [ true ]) notNil! ! !PPLambdaParserTest methodsFor: 'testing-curch' stamp: 'Nicolasanquetil 5/3/2013 15:04'! testTrue self assert: self parserClass true equals: #('x' #('y' 'x'))! ! !PPLambdaParserTest methodsFor: 'testing' stamp: 'lr 4/30/2008 09:33'! testVariable self assert: 'x' is: 'x'. self assert: 'xy' is: 'xy'. self assert: 'x12' is: 'x12'! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 5/2/2010 18:18'! testCharacter | parser | parser := $a asParser. self assert: parser parse: 'a' to: $a. self assert: parser fail: 'b'! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 11/29/2011 20:38'! testChoice | parser | parser := #(1 2) asChoiceParser. self assert: parser parse: #(1) to: 1. self assert: parser parse: #(2) to: 2. self assert: parser parse: #(1 2) to: 1 end: 1. self assert: parser parse: #(2 1) to: 2 end: 1. self assert: parser fail: #(). self assert: parser fail: #(3)! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 5/5/2010 14:03'! testClosure | parser | parser := [ :stream | stream upTo: $s ] asParser. self assert: parser parse: '' to: ''. self assert: parser parse: 'a' to: 'a'. self assert: parser parse: 'aa' to: 'aa'. self assert: parser parse: 's' to: ''. self assert: parser parse: 'as' to: 'a'. self assert: parser parse: 'aas' to: 'aa'. self assert: parser parse: 'sa' to: '' end: 1. self assert: parser parse: 'saa' to: '' end: 1. parser := [ :stream | stream upTo: $s. PPFailure message: 'stream' at: stream position ] asParser. self assert: parser fail: ''. self assert: parser fail: 's'. self assert: parser fail: 'as' ! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'Nicolasanquetil 5/3/2013 14:59'! testEpsilon | parser | parser := nil asParser. self assert: parser asParser equals: parser! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'Nicolasanquetil 5/3/2013 15:08'! testParser | parser | parser := $a asParser. self assert: parser asParser equals: parser! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 9/17/2008 22:48'! testRange | parser | parser := $a - $c. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'b' to: $b. self assert: parser parse: 'c' to: $c. self assert: parser fail: 'd'! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 11/29/2011 20:40'! testSequence | parser | parser := #(1 2) asSequenceParser. self assert: parser parse: #(1 2) to: #(1 2). self assert: parser parse: #(1 2 3) to: #(1 2) end: 2. self assert: parser fail: #(). self assert: parser fail: #(1). self assert: parser fail: #(1 1). self assert: parser fail: #(1 1 2)! ! !PPExtensionTest methodsFor: 'testing-stream' stamp: 'Nicolasanquetil 5/3/2013 15:16'! testStream | stream | stream := 'abc' readStream asPetitStream. self assert: stream class equals: PPStream. self assert: stream printString equals: '·abc'. self assert: stream peek equals: $a. self assert: stream uncheckedPeek equals: $a. self assert: stream next equals: $a. self assert: stream printString equals: 'a·bc'. self assert: stream asPetitStream equals: stream! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 5/2/2010 18:18'! testString | parser | parser := 'ab' asParser. self assert: parser parse: 'ab' to: 'ab'. self assert: parser parse: 'aba' to: 'ab' end: 2. self assert: parser parse: 'abb' to: 'ab' end: 2. self assert: parser fail: 'a'. self assert: parser fail: 'ac'! ! !PPExtensionTest methodsFor: 'testing-parser' stamp: 'lr 9/17/2008 22:03'! testSymbol | parser | parser := #any asParser. self assert: parser parse: 'a'. self assert: parser fail: ''! ! !PPExtensionTest methodsFor: 'testing-stream' stamp: 'Nicolasanquetil 5/3/2013 15:00'! testText | stream | stream := 'abc' asText asPetitStream. self assert: stream class equals: PPStream! ! !PPObjectTest methodsFor: 'parsers' stamp: 'lr 12/9/2010 10:25'! integer ^ PPPredicateObjectParser on: [ :each | each isInteger ] message: 'integer expected'! ! !PPObjectTest methodsFor: 'parsers' stamp: 'lr 10/30/2010 12:45'! string ^ PPPredicateObjectParser on: [ :each | each isString ] message: 'string expected'! ! !PPObjectTest methodsFor: 'testing-operators' stamp: 'lr 12/9/2010 10:25'! testChoice | parser | parser := self integer / self string. self assert: parser parse: #(123) to: 123. self assert: parser parse: #('abc') to: 'abc'! ! !PPObjectTest methodsFor: 'testing-fancy' stamp: 'lr 12/9/2010 10:25'! testFibonacci "This parser accepts fibonacci sequences with arbitrary start pairs." | parser | parser := ((self integer , self integer) end ==> [ :pair | pair first + pair last ]) / (self integer , (self integer , self integer) and >=> [ :stream :continuation | | result | result := continuation value. (result isPetitFailure or: [ result first + result last first ~= result last last ]) ifFalse: [ parser parseOn: stream ] ifTrue: [ PPFailure message: 'invalid fibonacci sequence' at: stream position ] ]). self assert: parser parse: #(1 1) to: 2. self assert: parser parse: #(1 1 2) to: 3. self assert: parser parse: #(1 1 2 3) to: 5. self assert: parser parse: #(1 1 2 3 5) to: 8. self assert: parser parse: #(1 1 2 3 5 8) to: 13. self assert: parser parse: #(1 1 2 3 5 8 13) to: 21. self assert: parser fail: #(). self assert: parser fail: #(1). self assert: parser fail: #(1 2 3 4) end: 2 ! ! !PPObjectTest methodsFor: 'testing' stamp: 'lr 12/9/2010 10:25'! testInteger self assert: self integer parse: #(123) to: 123. self assert: self integer fail: #('abc')! ! !PPObjectTest methodsFor: 'testing-operators' stamp: 'lr 12/9/2010 10:25'! testSequence | parser | parser := self integer , self string. self assert: parser parse: #(123 'abc') to: #(123 'abc'). self assert: parser fail: #(123 456). self assert: parser fail: #('abc' 'def'). self assert: parser fail: #('abc' 123) ! ! !PPObjectTest methodsFor: 'testing' stamp: 'lr 10/30/2010 12:47'! testString self assert: self string parse: #('abc') to: 'abc'. self assert: self string fail: #(123)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testAction | block parser | block := [ :char | char asUppercase ]. parser := #any asParser ==> block. self assert: parser block equals: block. self assert: parser parse: 'a' to: $A. self assert: parser parse: 'b' to: $B! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:20'! testAnd | parser | parser := 'foo' asParser flatten , 'bar' asParser flatten and. self assert: parser parse: 'foobar' to: #('foo' 'bar') end: 3. self assert: parser fail: 'foobaz'. parser := 'foo' asParser and. self assert: parser and equals: parser! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testAnswer | parser | parser := $a asParser answer: $b. self assert: parser parse: 'a' to: $b. self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/2/2009 19:56'! testBlock | parser | parser := [ :s | s next ] asParser. self assert: parser parse: 'ab' to: $a end: 1. self assert: parser parse: 'b' to: $b. self assert: parser parse: '' to: nil! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:07'! testChildren | p1 p2 p3 | p1 := #lowercase asParser. p2 := p1 ==> #asUppercase. p3 := PPUnresolvedParser new. p3 def: p2 / p3. self assert: p1 children isEmpty. self assert: p2 children size equals: 1. self assert: p3 children size equals: 2! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 9/15/2008 09:24'! testChoice | parser | parser := $a asParser / $b asParser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'b' to: $b. self assert: parser parse: 'ab' to: $a end: 1. self assert: parser parse: 'ba' to: $b end: 1. self assert: parser fail: ''. self assert: parser fail: 'c'. self assert: parser fail: 'ca'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 5/7/2008 08:58'! testDelimitedBy | parser | parser := $a asParser delimitedBy: $b asParser. self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aba' to: #($a $b $a). self assert: parser parse: 'ababa' to: #($a $b $a $b $a). self assert: parser parse: 'ab' to: #($a $b). self assert: parser parse: 'abab' to: #($a $b $a $b). self assert: parser parse: 'ababab' to: #($a $b $a $b $a $b). self assert: parser parse: 'ac' to: #($a) end: 1. self assert: parser parse: 'abc' to: #($a $b) end: 2. self assert: parser parse: 'abac' to: #($a $b $a) end: 3. self assert: parser parse: 'ababc' to: #($a $b $a $b) end: 4. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'c'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 2/25/2012 16:56'! testDelimitedByWithoutSeparators | parser | parser := ($a asParser delimitedBy: $b asParser) withoutSeparators. self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aba' to: #($a $a). self assert: parser parse: 'ababa' to: #($a $a $a). self assert: parser parse: 'ab' to: #($a). self assert: parser parse: 'abab' to: #($a $a). self assert: parser parse: 'ababab' to: #($a $a $a). self assert: parser parse: 'ac' to: #($a) end: 1. self assert: parser parse: 'abc' to: #($a) end: 2. self assert: parser parse: 'abac' to: #($a $a) end: 3. self assert: parser parse: 'ababc' to: #($a $a) end: 4. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'c'! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testEndOfInput | parser | parser := PPEndOfInputParser on: $a asParser. self assert: parser end equals: parser. self assert: parser parse: 'a' to: $a. self assert: parser fail: ''. self assert: parser fail: 'aa'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 9/17/2008 22:47'! testEndOfInputAfterMatch | parser | parser := 'stuff' asParser end. self assert: parser parse: 'stuff' to: 'stuff'. self assert: parser fail: 'stufff'. self assert: parser fail: 'fluff'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 11/20/2009 15:31'! testEpsilon | parser | parser := nil asParser. self assert: parser parse: '' to: nil. self assert: parser parse: 'a' to: nil end: 0. self assert: parser parse: 'ab' to: nil end: 0! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 14:58'! testFailing | parser result | parser := PPFailingParser message: 'Plonk'. self assert: parser message equals: 'Plonk'. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: 'aa'. result := parser parse: 'a'. self assert: result message equals: 'Plonk'. self assert: result printString equals: 'Plonk at 0'! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:07'! testFailure | failure | failure := PPFailure message: 'Error' at: 3. self assert: failure message equals: 'Error'. self assert: failure position equals: 3. self assert: failure isPetitFailure. self deny: 4 isPetitFailure. self deny: 'foo' isPetitFailure! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 5/2/2010 12:18'! testFlatten | parser | parser := $a asParser flatten. self assert: parser parse: 'a' to: 'a'. self assert: parser parse: #($a) to: #($a). self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testFoldLeft2 | parser | parser := #any asParser star foldLeft: [ :a :b | Array with: a with: b ]. self assert: parser parse: #(a) to: #a. self assert: parser parse: #(a b) to: #(a b). self assert: parser parse: #(a b c) to: #((a b) c). self assert: parser parse: #(a b c d) to: #(((a b) c) d). self assert: parser parse: #(a b c d e) to: #((((a b) c) d) e)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testFoldLeft3 | parser | parser := #any asParser star foldLeft: [ :a :b :c | Array with: a with: b with: c ]. self assert: parser parse: #(a) to: #a. self assert: parser parse: #(a b c) to: #(a b c). self assert: parser parse: #(a b c d e) to: #((a b c) d e)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testFoldRight2 | parser | parser := #any asParser star foldRight: [ :a :b | Array with: a with: b ]. self assert: parser parse: #(a) to: #a. self assert: parser parse: #(a b) to: #(a b). self assert: parser parse: #(a b c) to: #(a (b c)). self assert: parser parse: #(a b c d) to: #(a (b (c d))). self assert: parser parse: #(a b c d e) to: #(a (b (c (d e))))! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testFoldRight3 | parser | parser := #any asParser star foldRight: [ :a :b :c | Array with: a with: b with: c ]. self assert: parser parse: #(a) to: #a. self assert: parser parse: #(a b c) to: #(a b c). self assert: parser parse: #(a b c d e) to: #(a b (c d e))! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:38'! testHasProperty | parser | parser := PPParser new. self deny: (parser hasProperty: #foo). parser propertyAt: #foo put: 123. self assert: (parser hasProperty: #foo)! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testListConstructor | p1 p2 p3 | p1 := PPChoiceParser with: $a asParser. p2 := PPChoiceParser with: $a asParser with: $b asParser. p3 := PPChoiceParser withAll: (Array with: $a asParser with: $b asParser with: $c asParser). self assert: p1 children size equals: 1. self assert: p2 children size equals: 2. self assert: p3 children size equals: 3! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 14:59'! testLiteralObject | parser | parser := PPLiteralObjectParser on: $a message: 'letter "a" expected'. self assert: parser literal equals: $a. self assert: parser message equals: 'letter "a" expected'. self assert: parser parse: 'a' to: $a. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 6/1/2010 22:30'! testLiteralObjectCaseInsensitive | parser | parser := $a asParser caseInsensitive. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'A' to: $A. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'B' ! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:08'! testLiteralSequence | parser | parser := PPLiteralSequenceParser on: 'abc' message: 'sequence "abc" expected'. self assert: parser size equals: 3. self assert: parser literal equals: 'abc'. self assert: parser message equals: 'sequence "abc" expected'. self assert: parser parse: 'abc' to: 'abc'. self assert: parser fail: 'ab'. self assert: parser fail: 'abd'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 6/1/2010 22:31'! testLiteralSequenceCaseInsensitive | parser | parser := 'abc' asParser caseInsensitive. self assert: parser parse: 'abc' to: 'abc'. self assert: parser parse: 'ABC' to: 'ABC'. self assert: parser parse: 'abC' to: 'abC'. self assert: parser parse: 'AbC' to: 'AbC'. self assert: parser fail: 'ab'. self assert: parser fail: 'abd'! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testMap1 | parser | parser := #any asParser map: [ :a | Array with: a ]. self assert: parser parse: #(a) to: #(a)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testMap2 | parser | parser := (#any asParser , #any asParser) map: [ :a :b | Array with: b with: a ]. self assert: parser parse: #(a b) to: #(b a)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testMap3 | parser | parser := (#any asParser , #any asParser , #any asParser) map: [ :a :b :c | Array with: c with: b with: a ]. self assert: parser parse: #(a b c) to: #(c b a)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testMapFail1 self should: [ #any asParser map: [ ] ] raise: Error. self should: [ #any asParser map: [ :a :b | ] ] raise: Error ! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 6/24/2011 06:16'! testMapFail2 self should: [ (#any asParser , #any asParser) map: [ :a | ] ] raise: Error. self should: [ (#any asParser , #any asParser) map: [ :a :b :c | ] ] raise: Error ! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'lr 2/8/2010 00:32'! testMatches | parser | parser := $a asParser. self assert: (parser matches: 'a'). self deny: (parser matches: 'b'). self assert: (parser matches: 'a' readStream). self deny: (parser matches: 'b' readStream)! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testMatchesIn | parser result | parser := $a asParser. result := parser matchesIn: 'abba'. self assert: result size equals: 2. self assert: result first equals: $a. self assert: result last equals: $a. result := parser matchesIn: 'baaah'. self assert: result size equals: 3. self assert: result first equals: $a. self assert: result last equals: $a! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:00'! testMatchesInEmpty "Empty matches should properly advance and match at each position and at the end." | parser result | parser := [ :stream | stream position ] asParser. result := parser matchesIn: '123'. self assert: result asArray equals: #(0 1 2 3)! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:09'! testMatchesInOverlapping "Matches that overlap should be properly reported." | parser result | parser := #digit asParser , #digit asParser. result := parser matchesIn: 'a123b'. self assert: result size equals: 2. self assert: result first equals: #($1 $2). self assert: result last equals: #($2 $3)! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:16'! testMatchesSkipIn | parser result | parser := $a asParser. result := parser matchesSkipIn: 'abba'. self assert: result size equals: 2. self assert: result first equals: $a. self assert: result last equals: $a. result := parser matchesSkipIn: 'baaah'. self assert: result size equals: 3. self assert: result first equals: $a. self assert: result last equals: $a! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:00'! testMatchesSkipInOverlapping "Matches that overlap should be properly reported." | parser result | parser := #digit asParser , #digit asParser. result := parser matchesSkipIn: 'a123b'. self assert: result size equals: 1. self assert: result first equals: #($1 $2)! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:09'! testMatchingRangesIn | input parser result | input := 'a12b3'. parser := #digit asParser plus. result := parser matchingRangesIn: input. result := result collect: [ :each | input copyFrom: each first to: each last ]. self assert: result size equals: 3. self assert: result first equals: '12'. self assert: result second equals: '2'. self assert: result last equals: '3'! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:17'! testMatchingSkipRangesIn | input parser result | input := 'a12b3'. parser := #digit asParser plus. result := parser matchingSkipRangesIn: input. result := result collect: [ :each | input copyFrom: each first to: each last ]. self assert: result size equals: 2. self assert: result first equals: '12'. self assert: result last equals: '3'! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:01'! testMax | parser | parser := $a asParser max: 2. self assert: parser min equals: 0. self assert: parser max equals: 2. self assert: parser parse: '' to: #(). self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a) end: 2. self assert: parser parse: 'aaaa' to: #($a $a) end: 2. self assert: (parser printString endsWith: '[0, 2]')! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 21:02'! testMaxGreedy | parser | parser := #word asParser max: 2 greedy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abc'. self assert: parser parse: '1' to: #() end: 0. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser fail: 'abc1'. self assert: parser parse: '12' to: #($1) end: 1. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser fail: 'abc12'. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1) end: 2. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser fail: 'abc123'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 21:03'! testMaxLazy | parser | parser := #word asParser max: 2 lazy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abc'. self assert: parser parse: '1' to: #() end: 0. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser fail: 'abc1'. self assert: parser parse: '12' to: #() end: 0. self assert: parser parse: 'a12' to: #($a) end: 1. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser fail: 'abc12'. self assert: parser parse: '123' to: #() end: 0. self assert: parser parse: 'a123' to: #($a) end: 1. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser fail: 'abc123'! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:10'! testMemoized | count parser twice | count := 0. parser := [ :s | count := count + 1. s next ] asParser memoized. twice := parser and , parser. count := 0. self assert: parser parse: 'a' to: $a. self assert: count equals: 1. count := 0. self assert: twice parse: 'a' to: #($a $a). self assert: count equals: 1. self assert: parser memoized equals: parser! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:17'! testMin | parser | parser := $a asParser min: 2. self assert: parser min equals: 2. self assert: parser max > parser min. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a $a). self assert: parser parse: 'aaaa' to: #($a $a $a $a). self assert: (parser printString endsWith: '[2, *]')! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 21:12'! testMinGreedy | parser | parser := #word asParser min: 2 greedy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abcde'. self assert: parser fail: '1'. self assert: parser fail: 'a1'. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1' to: #($a $b $c $d) end: 4. self assert: parser parse: 'abcde1' to: #($a $b $c $d $e) end: 5. self assert: parser fail: '12'. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b $1) end: 3. self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4. self assert: parser parse: 'abcd12' to: #($a $b $c $d $1) end: 5. self assert: parser parse: 'abcde12' to: #($a $b $c $d $e $1) end: 6. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1 $2) end: 3. self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4. self assert: parser parse: 'abc123' to: #($a $b $c $1 $2) end: 5. self assert: parser parse: 'abcd123' to: #($a $b $c $d $1 $2) end: 6. self assert: parser parse: 'abcde123' to: #($a $b $c $d $e $1 $2) end: 7. self assert: parser parse: '1234' to: #($1 $2 $3) end: 3. self assert: parser parse: 'a1234' to: #($a $1 $2 $3) end: 4. self assert: parser parse: 'ab1234' to: #($a $b $1 $2 $3) end: 5. self assert: parser parse: 'abc1234' to: #($a $b $c $1 $2 $3) end: 6. self assert: parser parse: 'abcd1234' to: #($a $b $c $d $1 $2 $3) end: 7. self assert: parser parse: 'abcde1234' to: #($a $b $c $d $e $1 $2 $3) end: 8! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 21:15'! testMinLazy | parser | parser := #word asParser min: 2 lazy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abcde'. self assert: parser fail: '1'. self assert: parser fail: 'a1'. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1' to: #($a $b $c $d) end: 4. self assert: parser parse: 'abcde1' to: #($a $b $c $d $e) end: 5. self assert: parser fail: '12'. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser parse: 'abc12' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd12' to: #($a $b $c $d) end: 4. self assert: parser parse: 'abcde12' to: #($a $b $c $d $e) end: 5. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1) end: 2. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser parse: 'abc123' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd123' to: #($a $b $c $d) end: 4. self assert: parser parse: 'abcde123' to: #($a $b $c $d $e) end: 5. self assert: parser parse: '1234' to: #($1 $2) end: 2. self assert: parser parse: 'a1234' to: #($a $1) end: 2. self assert: parser parse: 'ab1234' to: #($a $b) end: 2. self assert: parser parse: 'abc1234' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1234' to: #($a $b $c $d) end: 4. self assert: parser parse: 'abcde1234' to: #($a $b $c $d $e) end: 5! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:02'! testMinMax | parser | parser := $a asParser min: 2 max: 4. self assert: parser min equals: 2. self assert: parser max equals: 4. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a $a). self assert: parser parse: 'aaaa' to: #($a $a $a $a). self assert: parser parse: 'aaaaa' to: #($a $a $a $a) end: 4. self assert: parser parse: 'aaaaaa' to: #($a $a $a $a) end: 4. self assert: (parser printString endsWith: '[2, 4]')! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 20:54'! testMinMaxGreedy | parser | parser := #word asParser min: 2 max: 4 greedy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abcde'. self assert: parser fail: '1'. self assert: parser fail: 'a1'. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde1'. self assert: parser fail: '12'. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b $1) end: 3. self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4. self assert: parser parse: 'abcd12' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde12'. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1 $2) end: 3. self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4. self assert: parser parse: 'abc123' to: #($a $b $c $1) end: 4. self assert: parser parse: 'abcd123' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde123'. self assert: parser parse: '1234' to: #($1 $2 $3) end: 3. self assert: parser parse: 'a1234' to: #($a $1 $2 $3) end: 4. self assert: parser parse: 'ab1234' to: #($a $b $1 $2) end: 4. self assert: parser parse: 'abc1234' to: #($a $b $c $1) end: 4. self assert: parser parse: 'abcd1234' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde1234'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/3/2011 20:57'! testMinMaxLazy | parser | parser := #word asParser min: 2 max: 4 lazy: #digit asParser. self assert: parser fail: ''. self assert: parser fail: 'abcde'. self assert: parser fail: '1'. self assert: parser fail: 'a1'. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde1'. self assert: parser fail: '12'. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser parse: 'abc12' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd12' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde12'. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1) end: 2. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser parse: 'abc123' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd123' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde123'. self assert: parser parse: '1234' to: #($1 $2) end: 2. self assert: parser parse: 'a1234' to: #($a $1) end: 2. self assert: parser parse: 'ab1234' to: #($a $b) end: 2. self assert: parser parse: 'abc1234' to: #($a $b $c) end: 3. self assert: parser parse: 'abcd1234' to: #($a $b $c $d) end: 4. self assert: parser fail: 'abcde1234'! ! !PPParserTest methodsFor: 'testing-accessing' stamp: 'Nicolasanquetil 5/3/2013 15:11'! testNamed | parser | parser := PPSequenceParser new. self assert: parser name isNil. parser := PPChoiceParser named: 'choice'. self assert: parser name equals: 'choice'. parser := $* asParser name: 'star'. self assert: parser name equals: 'star'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 2/7/2010 20:10'! testNegate | parser | parser := 'foo' asParser negate. self assert: parser parse: 'f' to: $f end: 1. self assert: parser parse: 'fo' to: $f end: 1. self assert: parser parse: 'fob' to: $f end: 1. self assert: parser parse: 'ffoo' to: $f end: 1. self assert: parser fail: ''. self assert: parser fail: 'foo'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 8/26/2010 09:54'! testNot | parser | parser := 'foo' asParser flatten , 'bar' asParser flatten not. self assert: parser parse: 'foobaz' to: #('foo' nil) end: 3. self assert: parser fail: 'foobar'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/29/2008 11:32'! testOptional | parser | parser := $a asParser optional. self assert: parser parse: '' to: nil. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'aa' to: $a end: 1. self assert: parser parse: 'ab' to: $a end: 1. self assert: parser parse: 'b' to: nil end: 0. self assert: parser parse: 'bb' to: nil end: 0. self assert: parser parse: 'ba' to: nil end: 0! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:18'! testParse | parser result | parser := $a asParser. self assert: (parser parse: 'a') equals: $a. self assert: (result := parser parse: 'b') isPetitFailure. self assert: (result message includesSubstring: '$a'). self assert: (result message includesSubstring: 'expected'). self assert: result position equals: 0. self assert: (parser parse: 'a' readStream) equals: $a. self assert: (result := parser parse: 'b' readStream) isPetitFailure. self assert: (result message includesSubstring: '$a'). self assert: (result message includesSubstring: 'expected'). self assert: result position equals: 0! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:03'! testParseOnError0 | parser result seen | parser := $a asParser. result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ]. self assert: result equals: $a. result := parser parse: 'b' onError: [ seen := true ]. self assert: result. self assert: seen! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:11'! testParseOnError1 | parser result seen | parser := $a asParser. result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ]. self assert: result equals: $a. result := parser parse: 'b' onError: [ :failure | self assert: failure position equals: 0. self assert: (failure message includesSubstring: '$a'). self assert: (failure message includesSubstring: 'expected'). seen := true ]. self assert: result. self assert: seen! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'Nicolasanquetil 5/3/2013 15:18'! testParseOnError2 | parser result seen | parser := $a asParser. result := parser parse: 'a' onError: [ self signalFailure: 'Not supposed to report an error' ]. self assert: result equals: $a. result := parser parse: 'b' onError: [ :msg :pos | self assert: (msg includesSubstring: '$a'). self assert: (msg includesSubstring: 'expected'). self assert: pos equals: 0. seen := true ]. self assert: result. self assert: seen! ! !PPParserTest methodsFor: 'testing-utilities' stamp: 'lr 8/6/2010 19:06'! testParser | parser | parser := PPParser new. self assert: parser isPetitParser. self deny: 4 isPetitParser. self deny: 'foo' isPetitParser! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 1/8/2010 12:09'! testPermutation | parser | parser := #any asParser , #any asParser , #any asParser. self assert: (parser permutation: #()) parse: '123' to: #(). self assert: (parser permutation: #(1)) parse: '123' to: #($1). self assert: (parser permutation: #(1 3)) parse: '123' to: #($1 $3). self assert: (parser permutation: #(3 1)) parse: '123' to: #($3 $1). self assert: (parser permutation: #(2 2)) parse: '123' to: #($2 $2). self assert: (parser permutation: #(3 2 1)) parse: '123' to: #($3 $2 $1). self should: [ parser permutation: #(0) ] raise: Error. self should: [ parser permutation: #(4) ] raise: Error. self should: [ parser permutation: #($2) ] raise: Error! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:04'! testPluggable | block parser | block := [ :stream | stream position ]. parser := block asParser. self assert: parser block equals: block! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:12'! testPlus | parser | parser := $a asParser plus. self assert: parser min equals: 1. self assert: parser max > parser min. self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a $a). self assert: parser parse: 'ab' to: #($a) end: 1. self assert: parser parse: 'aab' to: #($a $a) end: 2. self assert: parser parse: 'aaab' to: #($a $a $a) end: 3. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'ba'! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:19'! testPlusGreedy | limit parser | limit := #digit asParser. parser := #word asParser plusGreedy: limit. self assert: parser min equals: 1. self assert: parser max > parser min. self assert: parser limit equals: limit. self assert: parser children size equals: 2. self assert: parser children last equals: limit. self assert: parser fail: ''. self assert: parser fail: '1'. self assert: parser fail: 'a'. self assert: parser fail: 'ab'. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b $1) end: 3. self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4. self assert: parser parse: 'a123' to: #($a $1 $2) end: 3. self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4. self assert: parser parse: 'abc123' to: #($a $b $c $1 $2) end: 5! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:04'! testPlusLazy | limit parser | limit := #digit asParser. parser := #word asParser plusLazy: limit. self assert: parser min equals: 1. self assert: parser max > parser min. self assert: parser limit equals: limit. self assert: parser children size equals: 2. self assert: parser children last equals: limit. self assert: parser fail: ''. self assert: parser fail: '1'. self assert: parser fail: 'a'. self assert: parser fail: 'ab'. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: 'a12' to: #($a) end: 1. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser parse: 'abc12' to: #($a $b $c) end: 3. self assert: parser parse: 'a123' to: #($a) end: 1. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser parse: 'abc123' to: #($a $b $c) end: 3! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:41'! testPostCopy | parser copy | parser := PPParser new. parser propertyAt: #foo put: true. copy := parser copy. copy propertyAt: #foo put: false. self assert: (parser propertyAt: #foo). self deny: (copy propertyAt: #foo)! ! !PPParserTest methodsFor: 'testing-accessing' stamp: 'TudorGirba 3/4/2013 07:02'! testPrint | parser | parser := PPParser new. self assert: (parser printString includesSubstring: 'PPParser'). parser := PPParser named: 'choice'. self assert: (parser printString includesSubstring: 'PPParser(choice'). parser := PPLiteralObjectParser on: $a. self assert: (parser printString includesSubstring: '$a'). parser := PPFailingParser message: 'error'. self assert: (parser printString includesSubstring: 'error'). parser := PPPredicateObjectParser on: [ :c | true ] message: 'error'. self assert: (parser printString includesSubstring: 'error')! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:36'! testPropertyAt | parser | parser := PPParser new. self should: [ parser propertyAt: #foo ] raise: Error. parser propertyAt: #foo put: true. self assert: (parser propertyAt: #foo)! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:37'! testPropertyAtIfAbsent | parser | parser := PPParser new. self assert: (parser propertyAt: #foo ifAbsent: [ true ]). parser propertyAt: #foo put: true. self assert: (parser propertyAt: #foo ifAbsent: [ false ])! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:37'! testPropertyAtIfAbsentPut | parser | parser := PPParser new. self assert: (parser propertyAt: #foo ifAbsentPut: [ true ]). self assert: (parser propertyAt: #foo ifAbsentPut: [ false ])! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:37'! testRemoveProperty | parser | parser := PPParser new. self should: [ parser removeProperty: #foo ] raise: Error. parser propertyAt: #foo put: true. self assert: (parser removeProperty: #foo)! ! !PPParserTest methodsFor: 'testing-properties' stamp: 'lr 4/19/2010 10:37'! testRemovePropertyIfAbsent | parser | parser := PPParser new. self assert: (parser removeProperty: #foo ifAbsent: [ true ]). parser propertyAt: #foo put: true. self assert: (parser removeProperty: #foo ifAbsent: [ false ])! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/29/2008 11:42'! testSeparatedBy | parser | parser := $a asParser separatedBy: $b asParser. self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aba' to: #($a $b $a). self assert: parser parse: 'ababa' to: #($a $b $a $b $a). self assert: parser parse: 'ab' to: #($a) end: 1. self assert: parser parse: 'abab' to: #($a $b $a) end: 3. self assert: parser parse: 'ac' to: #($a) end: 1. self assert: parser parse: 'abac' to: #($a $b $a) end: 3. self assert: parser fail: ''. self assert: parser fail: 'c'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 2/25/2012 16:55'! testSeparatedByWithoutSeparators | parser | parser := ($a asParser separatedBy: $b asParser) withoutSeparators. self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aba' to: #($a $a). self assert: parser parse: 'ababa' to: #($a $a $a). self assert: parser parse: 'ab' to: #($a) end: 1. self assert: parser parse: 'abab' to: #($a $a) end: 3. self assert: parser parse: 'ac' to: #($a) end: 1. self assert: parser parse: 'abac' to: #($a $a) end: 3. self assert: parser fail: ''. self assert: parser fail: 'c'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/29/2008 11:33'! testSequence | parser | parser := $a asParser , $b asParser. self assert: parser parse: 'ab' to: #($a $b). self assert: parser parse: 'aba' to: #($a $b) end: 2. self assert: parser parse: 'abb' to: #($a $b) end: 2. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: 'aa'. self assert: parser fail: 'ba'. self assert: parser fail: 'bab'! ! !PPParserTest methodsFor: 'testing-fixtures' stamp: 'lr 2/7/2010 22:00'! testSideEffectChoice "Adding another element to a choice should create a copy, otherwise we get unwanted side-effects." | p1 p2 p3 | p1 := $a asParser. p2 := p1 / $b asParser. p3 := p1 / $c asParser. self assert: p1 parse: 'a'. self assert: p1 fail: 'b'. self assert: p1 fail: 'c'. self assert: p2 parse: 'a'. self assert: p2 parse: 'b'. self assert: p2 fail: 'c'. self assert: p3 parse: 'a'. self assert: p3 fail: 'b'. self assert: p3 parse: 'c'! ! !PPParserTest methodsFor: 'testing-fixtures' stamp: 'lr 5/31/2010 19:25'! testSideEffectListCopy | old new | old := $a asParser , $b asParser. new := old copy. self deny: old == new. self deny: old children == new children. self assert: old children first == new children first. self assert: old children last == new children last! ! !PPParserTest methodsFor: 'testing-fixtures' stamp: 'lr 4/14/2010 11:38'! testSideEffectSequence "Adding another element to a sequence should create a copy, otherwise we get unwanted side-effects." | p1 p2 p3 | p1 := $a asParser. p2 := p1 , $b asParser. p3 := p1 , $c asParser. self assert: p1 parse: 'a'. self assert: p1 parse: 'ab' end: 1. self assert: p1 parse: 'ac' end: 1. self assert: p2 fail: 'a'. self assert: p2 parse: 'ab'. self assert: p2 fail: 'ac'. self assert: p3 fail: 'a'. self assert: p3 fail: 'ab'. self assert: p3 parse: 'ac'! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:13'! testStar | parser | parser := $a asParser star. self assert: parser min equals: 0. self assert: parser max > parser min. self assert: parser parse: '' to: #(). self assert: parser parse: 'a' to: #($a). self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a $a). self assert: parser parse: 'b' to: #() end: 0. self assert: parser parse: 'ab' to: #($a) end: 1. self assert: parser parse: 'aab' to: #($a $a) end: 2. self assert: parser parse: 'aaab' to: #($a $a $a) end: 3! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:19'! testStarGreedy | limit parser | limit := #digit asParser. parser := #word asParser starGreedy: limit. self assert: parser min equals: 0. self assert: parser max > parser min. self assert: parser limit equals: limit. self assert: parser children size equals: 2. self assert: parser children last equals: limit. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: 'ab'. self assert: parser parse: '1' to: #() end: 0. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: '12' to: #($1) end: 1. self assert: parser parse: 'a12' to: #($a $1) end: 2. self assert: parser parse: 'ab12' to: #($a $b $1) end: 3. self assert: parser parse: 'abc12' to: #($a $b $c $1) end: 4. self assert: parser parse: '123' to: #($1 $2) end: 2. self assert: parser parse: 'a123' to: #($a $1 $2) end: 3. self assert: parser parse: 'ab123' to: #($a $b $1 $2) end: 4. self assert: parser parse: 'abc123' to: #($a $b $c $1 $2) end: 5! ! !PPParserTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:05'! testStarLazy | limit parser | limit := #digit asParser. parser := #word asParser starLazy: limit. self assert: parser min equals: 0. self assert: parser max > parser min. self assert: parser limit equals: limit. self assert: parser children size equals: 2. self assert: parser children last equals: limit. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: 'ab'. self assert: parser parse: '1' to: #() end: 0. self assert: parser parse: 'a1' to: #($a) end: 1. self assert: parser parse: 'ab1' to: #($a $b) end: 2. self assert: parser parse: 'abc1' to: #($a $b $c) end: 3. self assert: parser parse: '12' to: #() end: 0. self assert: parser parse: 'a12' to: #($a) end: 1. self assert: parser parse: 'ab12' to: #($a $b) end: 2. self assert: parser parse: 'abc12' to: #($a $b $c) end: 3. self assert: parser parse: '123' to: #() end: 0. self assert: parser parse: 'a123' to: #($a) end: 1. self assert: parser parse: 'ab123' to: #($a $b) end: 2. self assert: parser parse: 'abc123' to: #($a $b $c) end: 3! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 9/15/2010 09:53'! testTimes | parser | parser := $a asParser times: 2. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a) end: 2! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'Nicolasanquetil 5/3/2013 15:13'! testToken | parser | parser := $a asParser token. self assert: parser tokenClass equals: PPToken. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser fail: 'b'. self assert: parser fail: ''. parser := $a asParser token: PPToken. self assert: parser tokenClass equals: PPToken. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 7/11/2011 11:05'! testTrim | parser | parser := $a asParser token trim. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 5 stop: 5. self assert: parser parse: ' a' toToken: 5 stop: 5. self assert: parser parse: 'aa' toToken: 1 stop: 1 end: 1. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 2. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 3. self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 7/31/2010 12:07'! testTrimBlanks | parser | parser := $a asParser token trimBlanks. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 5 stop: 5. self assert: parser parse: 'aa' toToken: 1 stop: 1 end: 1. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 2. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 3. self assert: parser fail: ''. self assert: parser fail: ' '. self assert: parser fail: ' a'. self assert: parser fail: 'b'.! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 7/11/2011 11:05'! testTrimCustom | parser | parser := $a asParser token trim: $b asParser. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: 'ab' toToken: 1 stop: 1. self assert: parser parse: 'abb' toToken: 1 stop: 1. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: 'ba' toToken: 2 stop: 2. self assert: parser parse: 'bba' toToken: 3 stop: 3. self assert: parser parse: 'aa' toToken: 1 stop: 1 end: 1. self assert: parser parse: 'ab' toToken: 1 stop: 1 end: 2. self assert: parser parse: 'abba' toToken: 1 stop: 1 end: 3. self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'lr 7/31/2010 12:07'! testTrimSpaces | parser | parser := $a asParser token trimSpaces. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a ' toToken: 1 stop: 1. self assert: parser parse: 'a' toToken: 1 stop: 1. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 2 stop: 2. self assert: parser parse: ' a' toToken: 5 stop: 5. self assert: parser parse: ' a' toToken: 5 stop: 5. self assert: parser parse: 'aa' toToken: 1 stop: 1 end: 1. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 2. self assert: parser parse: 'a a' toToken: 1 stop: 1 end: 3. self assert: parser fail: ''. self assert: parser fail: 'b'! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 11/20/2009 15:31'! testUnresolved | parser | parser := PPUnresolvedParser new. self assert: parser isUnresolved. self should: [ parser parse: '' ] raise: Error. self should: [ parser parse: 'a' ] raise: Error. self should: [ parser parse: 'ab' ] raise: Error. parser := nil asParser. self deny: parser isUnresolved! ! !PPParserTest methodsFor: 'testing' stamp: 'tg 7/29/2010 22:39'! testWrapped | parser | parser := $a asParser wrapped. self assert: parser parse: 'a' to: $a. self assert: parser fail: 'b'. parser := (($a asParser , $b asParser ) wrapped , $c asParser). self assert: parser parse: 'abc' to: #(#($a $b) $c)! ! !PPParserTest methodsFor: 'testing-mapping' stamp: 'Nicolasanquetil 5/3/2013 15:20'! testWrapping | parser result | parser := #digit asParser plus >=> [ :stream :cc | Array with: stream position with: cc value with: stream position ]. self assert: parser parse: '1' to: #(0 #($1) 1). self assert: parser parse: '12' to: #(0 #($1 $2) 2). self assert: parser parse: '123' to: #(0 #($1 $2 $3) 3). result := parser parse: 'a'. self assert: result first equals: 0. self assert: result second isPetitFailure. self assert: result last equals: 0! ! !PPParserTest methodsFor: 'testing' stamp: 'lr 4/14/2010 16:30'! testXor | parser | parser := ($a asParser / $b asParser) | ($b asParser / $c asParser). self assert: parser parse: 'a' to: $a. self assert: parser parse: 'c' to: $c. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'd'. " truly symmetric " parser := ($b asParser / $c asParser) | ($a asParser / $b asParser). self assert: parser parse: 'a' to: $a. self assert: parser parse: 'c' to: $c. self assert: parser fail: ''. self assert: parser fail: 'b'. self assert: parser fail: 'd'! ! !PPPredicateTest methodsFor: 'utilities' stamp: 'lr 6/12/2010 08:37'! assertCharacterSets: aParser "Assert the character set of aParser does not overlap with the character set with the negated parser, and that they both cover the complete character space." | positives negatives | positives := self parsedCharacterSet: aParser. negatives := self parsedCharacterSet: aParser negate. self charactersDo: [ :char | | positive negative | positive := positives includes: char. negative := negatives includes: char. self assert: ((positive and: [ negative not ]) or: [ positive not and: [ negative ] ]) description: char printString , ' should be in exactly one set' ]! ! !PPPredicateTest methodsFor: 'private' stamp: 'lr 6/12/2010 08:37'! charactersDo: aBlock 1 to: 256 do: [ :index | aBlock value: (Character codePoint: index) ]! ! !PPPredicateTest methodsFor: 'utilities' stamp: 'lr 6/12/2010 08:37'! parsedCharacterSet: aParser | result | result := WriteStream on: String new. self charactersDo: [ :char | (aParser matches: (String with: char)) ifTrue: [ result nextPut: char ] ]. ^ result contents! ! !PPPredicateTest methodsFor: 'testing-objects' stamp: 'lr 11/29/2009 09:32'! testAny | parser | parser := #any asParser. self assertCharacterSets: parser. self assert: parser parse: ' ' to: $ . self assert: parser parse: '1' to: $1. self assert: parser parse: 'a' to: $a. self assert: parser fail: ''! ! !PPPredicateTest methodsFor: 'testing-objects' stamp: 'tg 7/12/2010 11:26'! testAnyExceptAnyOf | parser | parser := PPPredicateObjectParser anyExceptAnyOf: #($: $,). self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'z' to: $z. self assert: parser fail: ':'. self assert: parser fail: ','! ! !PPPredicateTest methodsFor: 'testing-objects' stamp: 'lr 6/12/2010 09:16'! testAnyOf | parser | parser := PPPredicateObjectParser anyOf: #($a $z). self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'z' to: $z. self assert: parser fail: 'x'! ! !PPPredicateTest methodsFor: 'testing-objects' stamp: 'lr 6/12/2010 09:16'! testBetweenAnd | parser | parser := PPPredicateObjectParser between: $b and: $d. self assertCharacterSets: parser. self assert: parser fail: 'a'. self assert: parser parse: 'b' to: $b. self assert: parser parse: 'c' to: $c. self assert: parser parse: 'd' to: $d. self assert: parser fail: 'e'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 5/5/2010 14:15'! testBlank | parser | parser := #blank asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character space) to: Character space. self assert: parser parse: (String with: Character tab) to: Character tab. self assert: parser fail: ''. self assert: parser fail: '1'. self assert: parser fail: (String with: Character cr)! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 5/2/2010 12:51'! testChar | parser | parser := $* asParser. self assertCharacterSets: parser. self assert: parser parse: '*' to: $*. self assert: parser parse: '**' to: $* end: 1. self assert: parser fail: ''. self assert: parser fail: '1'. self assert: parser fail: 'a'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testCr | parser | parser := #cr asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character cr) to: Character cr! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testDigit | parser | parser := #digit asParser. self assertCharacterSets: parser. self assert: parser parse: '0' to: $0. self assert: parser parse: '9' to: $9. self assert: parser fail: ''. self assert: parser fail: 'a'! ! !PPPredicateTest methodsFor: 'testing-objects' stamp: 'lr 6/12/2010 09:16'! testExpect | parser | parser := PPPredicateObjectParser expect: $a. self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser fail: 'b'. self assert: parser fail: ''! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testHex | parser | parser := #hex asParser. self assertCharacterSets: parser. self assert: parser parse: '0' to: $0. self assert: parser parse: '5' to: $5. self assert: parser parse: '9' to: $9. self assert: parser parse: 'A' to: $A. self assert: parser parse: 'D' to: $D. self assert: parser parse: 'F' to: $F. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'e' to: $e. self assert: parser parse: 'f' to: $f. self assert: parser fail: ''. self assert: parser fail: 'g'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testLetter | parser | parser := #letter asParser. self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'Z' to: $Z. self assert: parser fail: ''. self assert: parser fail: '0'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testLf | parser | parser := #lf asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character lf) to: Character lf! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testLowercase | parser | parser := #lowercase asParser. self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'z' to: $z. self assert: parser fail: ''. self assert: parser fail: 'A'. self assert: parser fail: '0'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:36'! testNewline | parser | parser := #newline asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character cr) to: Character cr. self assert: parser parse: (String with: Character lf) to: Character lf. self assert: parser fail: ' '! ! !PPPredicateTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:06'! testOnMessage | block parser | block := [ :char | char = $* ]. parser := PPPredicateObjectParser on: block message: 'starlet'. self assert: parser block equals: block. self assert: parser message equals: 'starlet'. self assertCharacterSets: parser. self assert: parser parse: '*' to: $*. self assert: parser parse: '**' to: $* end: 1. self assert: parser fail: ''. self assert: parser fail: '1'. self assert: parser fail: 'a'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 5/5/2010 14:14'! testPunctuation | parser | parser := #punctuation asParser. self assertCharacterSets: parser. self assert: parser parse: '.' to: $.. self assert: parser parse: ',' to: $,. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: '1'! ! !PPPredicateTest methodsFor: 'testing-sequence' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testSequenceParser | parser | parser := PPPredicateSequenceParser on: [ :value | value first isUppercase ] message: 'uppercase 3 letter words' size: 3. self assert: parser size equals: 3. self assert: parser parse: 'Abc'. self assert: parser parse: 'ABc'. self assert: parser parse: 'ABC'. self assert: parser fail: 'abc'. self assert: parser fail: 'aBC'. self assert: parser fail: 'Ab'. parser := parser negate. self assert: parser size equals: 3. self assert: parser fail: 'Abc'. self assert: parser fail: 'ABc'. self assert: parser fail: 'ABC'. self assert: parser parse: 'abc'. self assert: parser parse: 'aBC'. self assert: parser fail: 'Ab'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testSpace | parser | parser := #space asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character tab) to: Character tab. self assert: parser parse: ' ' to: Character space. self assert: parser fail: ''. self assert: parser fail: 'a'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testTab | parser | parser := #tab asParser. self assertCharacterSets: parser. self assert: parser parse: (String with: Character tab) to: Character tab! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testUppercase | parser | parser := #uppercase asParser. self assertCharacterSets: parser. self assert: parser parse: 'A' to: $A. self assert: parser parse: 'Z' to: $Z. self assert: parser fail: ''. self assert: parser fail: 'a'. self assert: parser fail: '0'! ! !PPPredicateTest methodsFor: 'testing-chars' stamp: 'lr 11/29/2009 09:32'! testWord | parser | parser := #word asParser. self assertCharacterSets: parser. self assert: parser parse: 'a' to: $a. self assert: parser parse: 'A' to: $A. self assert: parser parse: '0' to: $0. self assert: parser fail: ''. self assert: parser fail: '-'! ! !PPRewriterTest methodsFor: 'running' stamp: 'lr 4/29/2010 08:47'! setUp rewriter := PPRewriter new! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:20'! testDuplicationRemoval | duplicate before between after result | duplicate := PPPattern any. before := PPListPattern any. between := PPListPattern any. after := PPListPattern any. rewriter replace: before / duplicate / between / duplicate / after with: before / duplicate / between / after. result := rewriter execute: $a asParser / $a asParser. self assert: rewriter hasChanged. self assert: result children size equals: 1. self assert: result children first literal equals: $a. result := rewriter execute: $b asParser / $a asParser / $a asParser. self assert: rewriter hasChanged. self assert: result children size equals: 2. self assert: result children first literal equals: $b. self assert: result children last literal equals: $a. result := rewriter execute: $a asParser / $b asParser / $a asParser. self assert: rewriter hasChanged. self assert: result children size equals: 2. self assert: result children first literal equals: $a. self assert: result children last literal equals: $b. result := rewriter execute: $a asParser / $a asParser / $b asParser. self assert: rewriter hasChanged. self assert: result children size equals: 2. self assert: result children first literal equals: $a. self assert: result children last literal equals: $b! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:06'! testPatternRemoval | pattern result | pattern := PPPattern class: PPLiteralObjectParser. rewriter replace: pattern / pattern with: pattern. result := rewriter execute: $a asParser / $a asParser. self assert: rewriter hasChanged. self assert: result class equals: PPLiteralObjectParser. self assert: result literal equals: $a. result := rewriter execute: $a asParser / $a asParser / $a asParser. self deny: rewriter hasChanged. self assert: result class equals: PPChoiceParser. self assert: result children size equals: 3! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:14'! testPatternReplacement | pattern result | pattern := PPPattern class: PPLiteralObjectParser. rewriter replace: pattern with: pattern , pattern. result := rewriter execute: $a asParser. self assert: rewriter hasChanged. self assert: result class equals: PPSequenceParser. self assert: result children first literal equals: $a. self assert: result children last literal equals: $a. result := rewriter execute: #any asParser. self deny: rewriter hasChanged. self assert: result class equals: PPPredicateObjectParser! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 14:58'! testReplaceLiteral | result | rewriter replace: $a asParser with: $b asParser. result := rewriter execute: $a asParser. self assert: rewriter hasChanged. self assert: result literal equals: $b. result := rewriter execute: $c asParser. self deny: rewriter hasChanged. self assert: result literal equals: $c. result := rewriter execute: $a asParser , $b asParser , $c asParser. self assert: rewriter hasChanged. self assert: result children size equals: 3. self assert: result children first literal equals: $b. self assert: result children last literal equals: $c! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:07'! testSwapTwoPattern | first second result | first := PPPattern any. second := PPPattern any. rewriter replace: first , second with: second , first. result := rewriter execute: $a asParser , $b asParser. self assert: rewriter hasChanged. self assert: result children first literal equals: $b. self assert: result children last literal equals: $a. result := rewriter execute: $a asParser / $b asParser. self deny: rewriter hasChanged. self assert: result children first literal equals: $a. self assert: result children last literal equals: $b! ! !PPRewriterTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testWrapLiteral | result | rewriter replace: $a asParser withValueFrom: [ :parser | parser token ]. result := rewriter execute: $a asParser. self assert: rewriter hasChanged. self assert: result class equals: PPTokenParser. self assert: result children first literal equals: $a. result := rewriter execute: $c asParser. self deny: rewriter hasChanged. self assert: result literal equals: $c. result := rewriter execute: $a asParser , $b asParser. self assert: rewriter hasChanged. self assert: result children first class equals: PPTokenParser. self assert: result children first children first literal equals: $a. self assert: result children last class equals: PPLiteralObjectParser. self assert: result children last literal equals: $b! ! !PPScriptingTest commentStamp: '' prior: 102651519! These are some simple demo-scripts of parser combinators for the compiler construction course. http://www.iam.unibe.ch/~scg/Teaching/CC/index.html! !PPScriptingTest methodsFor: 'examples' stamp: 'lr 6/12/2010 08:30'! expressionInterpreter "Same as #expressionInterpreter but with semantic actions." | mul prim add dec | add := PPUnresolvedParser new. mul := PPUnresolvedParser new. prim := PPUnresolvedParser new. dec := ($0 - $9) ==> [ :token | token codePoint - $0 codePoint ]. add def: ((mul , $+ asParser , add) ==> [ :nodes | (nodes at: 1) + (nodes at: 3) ]) / mul. mul def: ((prim , $* asParser , mul) ==> [ :nodes | (nodes at: 1) * (nodes at: 3) ]) / prim. prim def: (($( asParser , add , $) asParser) ==> [ :nodes | nodes at: 2 ]) / dec. ^ add end! ! !PPScriptingTest methodsFor: 'examples' stamp: 'lr 6/12/2010 08:30'! expressionParser "Simple demo of scripting an expression parser." | mul prim add dec | add := PPUnresolvedParser new. mul := PPUnresolvedParser new. prim := PPUnresolvedParser new. dec := ($0 - $9). add def: (mul , $+ asParser , add) / mul. mul def: (prim , $* asParser , mul) / prim. prim def: ($( asParser , add , $) asParser) / dec. ^ add end! ! !PPScriptingTest methodsFor: 'examples' stamp: 'lr 10/20/2008 13:27'! straightLineParser | goal stm stmList id char dec exp expList mulExp primExp nonzero num lower upper | goal := PPUnresolvedParser new. stmList := PPUnresolvedParser new. stm := PPUnresolvedParser new. exp := PPUnresolvedParser new. expList := PPUnresolvedParser new. mulExp := PPUnresolvedParser new. primExp := PPUnresolvedParser new. lower := $a - $z. upper := $A - $Z. char := lower / upper. nonzero := $1 - $9. dec := $0 - $9. id := char, ( char / dec ) star. num := $0 asParser / ( nonzero, dec star). goal def: stmList end. stmList def: stm , ( $; asParser, stm ) star. stm def: ( id, ':=' asParser, exp ) / ( 'print' asParser, $( asParser, expList, $) asParser ). exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star. expList def: exp, ( $, asParser, exp ) star. mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star. primExp def: id / num / ( $( asParser, stmList, $, asParser, exp, $) asParser ). ^ goal ! ! !PPScriptingTest methodsFor: 'tests' stamp: 'lr 6/12/2010 08:31'! testExpressionInterpreter self assert: self expressionInterpreter parse: '2*(3+4)' to: 14! ! !PPScriptingTest methodsFor: 'tests' stamp: 'lr 6/12/2010 08:31'! testExpressionParser self assert: self expressionParser parse: '2*(3+4)' to: #($2 $* ($( ($3 $+ $4) $)))! ! !PPScriptingTest methodsFor: 'tests' stamp: 'lr 9/17/2008 22:44'! testSLassign self assert: self straightLineParser parse: 'abc:=1' to: #(#($a #($b $c) ':=' #(#(#($1 #()) #()) #())) #())! ! !PPScriptingTest methodsFor: 'tests' stamp: 'lr 6/12/2010 08:27'! testSLprint self assert: self straightLineParser parse: 'print(3,4)' to: #(('print' $( ((($3 ()) ()) () (($, ((($4 ()) ()) ())))) $)) ())! ! !PPSearcherTest methodsFor: 'running' stamp: 'lr 4/29/2010 08:09'! setUp searcher := PPSearcher new! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 14:59'! testAnyPattern | result | searcher matches: PPPattern any do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser initialAnswer: OrderedCollection new. self assert: result size equals: 1. result := searcher execute: $a asParser star initialAnswer: OrderedCollection new. self assert: result size equals: 2. result := searcher execute: $a asParser , $b asParser initialAnswer: OrderedCollection new. self assert: result size equals: 3! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:08'! testClassPattern | result | searcher matches: (PPPattern class: PPLiteralObjectParser) do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser initialAnswer: OrderedCollection new. self assert: result size equals: 1. self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]). result := searcher execute: 'abc' asParser initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: #any asParser initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: $a asParser / #any asParser , $b asParser initialAnswer: OrderedCollection new. self assert: result size equals: 2. self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ])! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/31/2010 19:16'! testCopyMatchAction | old new | old := $a asParser ==> [ :token | $b ]. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 4/30/2010 08:04'! testCopyMatchDelegate | old new | old := $a asParser token trim. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 9/1/2010 22:08'! testCopyMatchEpsilon | old new | old := nil asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/31/2010 19:17'! testCopyMatchFailure | old new | old := PPFailingParser message: 'problem'. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 4/30/2010 08:04'! testCopyMatchList | old new | old := $a asParser , $b asParser , $c asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 4/30/2010 08:04'! testCopyMatchLiteral | old new | old := $a asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/31/2010 19:18'! testCopyMatchPluggable | old new | old := [ :stream | ] asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/31/2010 19:17'! testCopyMatchPredicate | old new | old := #word asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 1/14/2013 08:37'! testCopyMatchPredicateSequence | old new | old := 'foo' asParser caseInsensitive. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 4/30/2010 08:15'! testCopyMatchRecursiveDelegate | old new | old := PPDelegateParser new. old setParser: old. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 4/30/2010 08:16'! testCopyMatchRecursiveList | old new | old := PPChoiceParser new. old setParsers: (Array with: old). new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/8/2011 20:25'! testCopyMatchRepetition | old new | old := #word asParser star. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/8/2011 20:25'! testCopyMatchRepetitionGreedy | old new | old := #word asParser starGreedy: #digit asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/8/2011 20:25'! testCopyMatchRepetitionLazy | old new | old := #word asParser starLazy: #digit asParser. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing-copy' stamp: 'lr 5/8/2011 20:26'! testCopyMatchRepetitionMinMax | old new | old := #word asParser min: 5 max: 10. new := old copyInContext: Dictionary new. self assert: (old match: old inContext: Dictionary new). self assert: (old match: new inContext: Dictionary new). self deny: (old == new).! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testKindPattern | result | searcher matches: (PPPattern kind: PPLiteralParser) do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser initialAnswer: OrderedCollection new. self assert: result size equals: 1. self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]). result := searcher execute: 'abc' asParser initialAnswer: OrderedCollection new. self assert: result size equals: 1. self assert: (result allSatisfy: [ :each | each class = PPLiteralSequenceParser ]). result := searcher execute: #any asParser initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: $a asParser / #any asParser , $b asParser initialAnswer: OrderedCollection new. self assert: result size equals: 2. self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ])! ! !PPSearcherTest methodsFor: 'testing-lists' stamp: 'lr 6/4/2010 13:37'! testListInfix | result | searcher matches: PPListPattern any , $a asParser , PPListPattern any do: [ :parser :answer | true ]. result := searcher execute: $a asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $a asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $b asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $b asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser , $b asParser initialAnswer: false. self deny: result! ! !PPSearcherTest methodsFor: 'testing-lists' stamp: 'lr 6/4/2010 13:37'! testListPostfix | result | searcher matches: PPListPattern any , $b asParser do: [ :parser :answer | true ]. result := searcher execute: $a asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $b asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $a asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $b asParser , $a asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $b asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $b asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser , $b asParser initialAnswer: false. self assert: result! ! !PPSearcherTest methodsFor: 'testing-lists' stamp: 'lr 6/4/2010 13:37'! testListPrefix | result | searcher matches: $a asParser , PPListPattern any do: [ :parser :answer | true ]. result := searcher execute: $a asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $b asParser , $b asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $a asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $b asParser , $a asParser initialAnswer: false. self assert: result. result := searcher execute: $a asParser , $a asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $b asParser , $a asParser initialAnswer: false. self deny: result. result := searcher execute: $a asParser , $b asParser , $b asParser initialAnswer: false. self assert: result. result := searcher execute: $b asParser , $a asParser , $b asParser initialAnswer: false. self deny: result. result := searcher execute: $b asParser , $b asParser , $b asParser initialAnswer: false. self deny: result! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 14:59'! testMatchesAny | result | searcher matchesAnyOf: (Array with: $a asParser with: $b asParser) do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser , $b asParser , $c asParser initialAnswer: OrderedCollection new. self assert: result size equals: 2. self assert: result first literal equals: $a. self assert: result last literal equals: $b! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:09'! testMultiplePattern | result | searcher matches: $a asParser do: [ :parser :answer | answer first add: parser. answer ]. searcher matches: PPPattern any do: [ :parser :answer | answer second add: parser. answer ]. result := searcher execute: $a asParser , $a asParser , $b asParser initialAnswer: (Array with: OrderedCollection new with: OrderedCollection new). self assert: result first size equals: 2. self assert: result first first literal equals: $a. self assert: result first last literal equals: $a. self assert: result last size equals: 2. self assert: result last first class equals: PPSequenceParser. self assert: result last last literal equals: $b! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:16'! testNamePattern | result | searcher matches: (PPPattern name: 'foo') do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: ($a asParser name: 'foo') initialAnswer: OrderedCollection new. self assert: result size equals: 1. self assert: result first name equals: 'foo'. result := searcher execute: ($a asParser name: 'bar') , ($b asParser name: 'foo') initialAnswer: OrderedCollection new. self assert: result size equals: 1. self assert: result first name equals: 'foo'! ! !PPSearcherTest methodsFor: 'testing' stamp: 'lr 4/29/2010 21:03'! testNewPattern self should: [ PPPattern new ] raise: Error! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:00'! testRecursivePattern | recursive | recursive := PPDelegateParser new. recursive setParser: recursive. searcher matches: recursive do: [ :parser :answer | parser ]. self assert: (searcher execute: recursive) equals: recursive. self assert: (searcher execute: $a asParser) isNil. self assert: (searcher execute: $a asParser / $b asParser star) isNil! ! !PPSearcherTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:09'! testRepeatedPattern | pattern result | searcher matches: (pattern := PPPattern any) , pattern do: [ :parser :answer | answer add: parser; yourself ]. result := searcher execute: $a asParser , $b asParser initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: $a asParser , $a asParser initialAnswer: OrderedCollection new. self assert: result size equals: 1. result := searcher execute: $a asParser , ($a asParser , $b asParser) initialAnswer: OrderedCollection new. self assert: result isEmpty. result := searcher execute: $b asParser , ($a asParser , $a asParser) initialAnswer: OrderedCollection new. self assert: result size equals: 1! ! !PPTokenTest methodsFor: 'accessing' stamp: 'lr 4/3/2009 08:51'! identifier ^ #word asParser plus token! ! !PPTokenTest methodsFor: 'utilities' stamp: 'lr 3/29/2010 15:34'! parse: aString using: aParser ^ aParser parse: aString! ! !PPTokenTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:15'! testCollection | input result | input := 'foo '. result := self parse: input using: self identifier. self assert: result collection equals: input. self assert: result collection == input! ! !PPTokenTest methodsFor: 'testing-querying' stamp: 'Nicolasanquetil 5/3/2013 14:59'! testColumn | input parser result | input := '1' , (String with: Character cr) , '12' , (String with: Character cr with: Character lf) , '123' , (String with: Character lf) , '1234'. parser := #any asParser token star. result := parser parse: input. result with: #(1 2 1 2 3 4 1 2 3 4 1 2 3 4) do: [ :token :line | self assert: token column equals: line ]! ! !PPTokenTest methodsFor: 'testing-copying' stamp: 'Nicolasanquetil 5/3/2013 15:08'! testCopyFromTo | result other | result := PPToken on: 'abc'. other := result copyFrom: 2 to: 2. self assert: other size equals: 1. self assert: other start equals: 2. self assert: other stop equals: 2. self assert: other collection equals: result collection! ! !PPTokenTest methodsFor: 'testing-comparing' stamp: 'Nicolasanquetil 5/3/2013 15:16'! testEquality | token1 token2 | token1 := self parse: 'foo' using: self identifier. token2 := self parse: 'foo' using: self identifier. self deny: token1 == token2. self assert: token1 equals: token2. self assert: token1 hash equals: token2 hash! ! !PPTokenTest methodsFor: 'testing' stamp: 'lr 2/26/2013 02:50'! testInitialize PPToken initialize! ! !PPTokenTest methodsFor: 'testing-values' stamp: 'Nicolasanquetil 5/3/2013 15:00'! testInputValue | input result | input := 'foo'. result := self parse: input using: self identifier. self assert: result inputValue equals: input. self deny: result inputValue == input! ! !PPTokenTest methodsFor: 'testing-querying' stamp: 'Nicolasanquetil 5/3/2013 15:09'! testLine | input parser result | input := '1' , (String with: Character cr) , '12' , (String with: Character cr with: Character lf) , '123' , (String with: Character lf) , '1234'. parser := #any asParser token star. result := parser parse: input. result with: #(1 1 2 2 2 2 3 3 3 3 4 4 4 4) do: [ :token :line | self assert: token line equals: line ]! ! !PPTokenTest methodsFor: 'testing' stamp: 'lr 4/14/2010 11:44'! testNew self should: [ PPToken new ] raise: Error. ! ! !PPTokenTest methodsFor: 'testing-values' stamp: 'Nicolasanquetil 5/3/2013 15:16'! testParsedValue | input result | input := 'foo'. result := self parse: input using: self identifier. self assert: result parsedValue equals: #($f $o $o)! ! !PPTokenTest methodsFor: 'testing' stamp: 'TudorGirba 3/4/2013 07:10'! testPrinting | result | result := PPToken on: 'var'. self assert: (result printString includesSubstring: 'PPToken[1,3]')! ! !PPTokenTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:01'! testSize | result | result := self parse: 'foo' using: self identifier. self assert: result size equals: 3! ! !PPTokenTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:10'! testStart | result | result := self parse: 'foo' using: self identifier. self assert: result start equals: 1! ! !PPTokenTest methodsFor: 'testing' stamp: 'Nicolasanquetil 5/3/2013 15:17'! testStop | result | result := self parse: 'foo' using: self identifier. self assert: result stop equals: 3! ! !PPTokenTest methodsFor: 'testing' stamp: 'lr 2/26/2013 02:49'! testValue | result | result := PPToken on: 'var'. self should: [ result value ] raise: Notification! ! !PPStream commentStamp: '' prior: 102651716! A positional stream implementation used for parsing. It overrides some methods for optimization reasons.! !PPStream methodsFor: 'converting' stamp: 'lr 2/7/2010 20:53'! asPetitStream ^ self! ! !PPStream methodsFor: 'accessing' stamp: 'lr 2/13/2012 20:25'! collection "Answer the underlying collection." ^ collection! ! !PPStream methodsFor: 'accessing' stamp: 'lr 4/29/2008 21:48'! peek "An improved version of peek, that is slightly faster than the built in version." ^ self atEnd ifFalse: [ collection at: position + 1 ]! ! !PPStream methodsFor: 'accessing' stamp: 'lr 8/25/2010 11:36'! position: anInteger "The receiver does not check for invalid arguments passed to this method, as it is solely used with valid indexes for backtracking." position := anInteger! ! !PPStream methodsFor: 'printing' stamp: 'lr 11/4/2010 19:23'! printOn: aStream collection isString ifFalse: [ ^ super printOn: aStream ]. aStream nextPutAll: (collection copyFrom: 1 to: position); nextPutAll: '·'; nextPutAll: (collection copyFrom: position + 1 to: readLimit)! ! !PPStream methodsFor: 'accessing' stamp: 'lr 10/5/2010 16:29'! uncheckedPeek "An unchecked version of peek that throws an error if we try to peek over the end of the stream, even faster than #peek." ^ collection at: position + 1! ! !BlockClosure methodsFor: '*petitparser-core-converting' stamp: 'lr 11/29/2011 20:48'! asParser "Answer a parser implemented in the receiving one-argument block." ^ PPPluggableParser on: self! ! !UndefinedObject methodsFor: '*petitparser-converting' stamp: 'lr 11/29/2011 20:49'! asParser "Answer a parser that succeeds and does not consume anything." ^ PPEpsilonParser new! ! !Text methodsFor: '*petitparser-core-converting' stamp: 'lr 2/7/2010 20:53'! asPetitStream ^ string asPetitStream! ! !Collection methodsFor: '*petitparser-core-converting' stamp: 'lr 11/29/2011 20:38'! asChoiceParser ^ PPChoiceParser withAll: (self collect: [ :each | each asParser ])! ! !Collection methodsFor: '*petitparser-core-converting' stamp: 'lr 11/29/2011 20:38'! asSequenceParser ^ PPSequenceParser withAll: (self collect: [ :each | each asParser ])! ! !Object methodsFor: '*petitparser-core-converting' stamp: 'lr 12/18/2011 15:58'! asParser "Answer a parser accepting the receiving object." ^ PPPredicateObjectParser expect: self! ! !Object methodsFor: '*petitparser-core-testing' stamp: 'lr 2/7/2010 20:54'! isPetitFailure ^ false! ! !Object methodsFor: '*petitparser-core-testing' stamp: 'lr 8/6/2010 16:44'! isPetitParser ^ false! ! !PPCharSetPredicate class methodsFor: 'instance creation' stamp: 'lr 8/25/2010 11:05'! on: aBlock ^ self basicNew initializeOn: aBlock! ! !PPCharSetPredicate methodsFor: 'initialization' stamp: 'lr 8/30/2010 12:19'! initializeOn: aBlock block := aBlock. classification := Array new: 255. 1 to: classification size do: [ :index | classification at: index put: (block value: (Character value: index)) ]! ! !PPCharSetPredicate methodsFor: 'evaluating' stamp: 'lr 8/30/2010 12:19'! value: aCharacter | index | index := aCharacter asInteger. index == 0 ifTrue: [ ^ block value: aCharacter ]. index > 255 ifTrue: [ ^ block value: aCharacter ]. ^ classification at: index! ! !PPFailure commentStamp: '' prior: 102651872! The failure object in PetitParser. It is the only class that responds to #isPetitFailure with true. It contains an error message and a position of the occurrence of the failure. Instance Variables: message The error message of this failure. position The position of this failure in the input stream. ! !PPFailure class methodsFor: 'instance creation' stamp: 'lr 5/5/2010 13:56'! message: aString at: anInteger ^ self basicNew initializeMessage: aString at: anInteger! ! !PPFailure methodsFor: 'initialization' stamp: 'lr 5/5/2010 13:55'! initializeMessage: aString at: anInteger message := aString. position := anInteger! ! !PPFailure methodsFor: 'testing' stamp: 'lr 2/7/2010 20:54'! isPetitFailure "I am the only class that should implement this method to return true." ^ true! ! !PPFailure methodsFor: 'accessing' stamp: 'lr 5/5/2010 13:56'! message "Answer a human readable error message of this parse failure." ^ message! ! !PPFailure methodsFor: 'accessing' stamp: 'lr 5/5/2010 13:55'! position "Answer the position in the source string that caused this parse failure." ^ position! ! !PPFailure methodsFor: 'printing' stamp: 'lr 5/5/2010 14:01'! printOn: aStream aStream nextPutAll: self message; nextPutAll: ' at '; print: position! ! !PPMemento commentStamp: '' prior: 102652246! PPMemento is an internal class used by PPMemoizedParser to cache results and detect left-recursive calls. Instance Variables: result The cached result. count The number of recursive cycles followed. position The position of the cached result in the input stream.! !PPMemento class methodsFor: 'instance creation' stamp: 'lr 4/22/2008 18:21'! new ^ self basicNew initialize! ! !PPMemento methodsFor: 'accessing-readonly' stamp: 'lr 4/22/2008 18:23'! count ^ count! ! !PPMemento methodsFor: 'actions' stamp: 'lr 4/22/2008 18:20'! increment count := count + 1! ! !PPMemento methodsFor: 'initialization' stamp: 'lr 4/22/2008 18:21'! initialize count := 0 ! ! !PPMemento methodsFor: 'accessing' stamp: 'lr 4/22/2008 18:23'! position ^ position! ! !PPMemento methodsFor: 'accessing' stamp: 'lr 4/26/2008 15:48'! position: anInteger position := anInteger! ! !PPMemento methodsFor: 'accessing' stamp: 'lr 4/24/2008 10:15'! result ^ result! ! !PPMemento methodsFor: 'accessing' stamp: 'lr 4/22/2008 18:23'! result: anObject result := anObject! ! !PPParser commentStamp: '' prior: 102652592! An abstract parser for all parsers in PetitParser. Subclasses implement #parseOn: to perform the actual recursive-descent parsing. All parsers support a variety of methods to perform an actual parse, see the methods in the #parsing protocol. Parsers are combined with a series of operators that can be found in the #operations protocol. Instance Variables: properties Stores additional state in the parser object.! !PPDelegateParser commentStamp: '' prior: 102653079! A parser that delegates to another parser. Instance Variables: parser The parser to delegate to.! !PPActionParser commentStamp: '' prior: 102653245! A parser that performs an action block with the successful parse result of the delegate. Instance Variables: block The action block to be executed. ! !PPActionParser class methodsFor: 'instance creation' stamp: 'lr 5/2/2010 16:58'! on: aParser block: aBlock ^ (self on: aParser) setBlock: aBlock! ! !PPActionParser methodsFor: 'accessing' stamp: 'lr 4/30/2010 11:10'! block "Answer the action block of the receiver." ^ block! ! !PPActionParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 5/7/2011 15:08'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]! ! !PPActionParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:10'! parseOn: aStream | element | ^ (element := parser parseOn: aStream) isPetitFailure ifFalse: [ block value: element ] ifTrue: [ element ]! ! !PPActionParser methodsFor: 'initialization' stamp: 'lr 5/2/2010 16:58'! setBlock: aBlock block := aBlock! ! !PPWrappingParser commentStamp: '' prior: 102653469! A parser that performs an action block upon activation with the stream and a continuation block.! !PPWrappingParser methodsFor: 'parsing' stamp: 'lr 5/12/2010 20:19'! parseOn: aStream ^ block value: aStream value: [ parser parseOn: aStream ]! ! !PPAndParser commentStamp: 'TudorGirba 2/27/2011 22:22' prior: 102653633! The and-predicate, a parser that succeeds whenever its delegate does, but does not consume the input stream [Parr 1994, 1995].! !PPAndParser methodsFor: 'operators' stamp: 'lr 5/1/2010 16:16'! and ^ self! ! !PPAndParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:10'! parseOn: aStream | element position | position := aStream position. element := parser parseOn: aStream. aStream position: position. ^ element! ! !PPCompositeParser commentStamp: 'lr 12/4/2009 18:38' prior: 102653825! A PPCompositeParser is composed parser built from various primitive parsers. Every production in the receiver is specified as a method that returns its parser. Note that every production requires an instance variable of the same name, otherwise the production is not cached and cannot be used in recursive grammars. Productions should refer to each other by reading the respective inst-var. Note: these inst-vars are typically not written, as the assignment happens in the initialize method using reflection. The start production is defined in the method start. It is aliased to the inst-var parser defined in the superclass of PPCompositeParser.! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 2/25/2013 23:46'! addition ^ (factors separatedBy: ($+ asParser / $- asParser) trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 9/15/2008 09:28'! factors ^ multiplication / power! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 2/25/2013 23:47'! multiplication ^ (power separatedBy: ($* asParser / $/ asParser) trim) foldLeft: [ :a :op :b | a perform: op asSymbol with: b ]! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 2/25/2013 23:47'! number ^ ($- asParser optional , #digit asParser plus , ($. asParser , #digit asParser plus) optional) flatten trim ==> [ :value | value asNumber ]! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 2/25/2013 23:49'! parentheses ^ $( asParser trim , terms , $) asParser trim ==> [ :nodes | nodes second ]! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 2/25/2013 23:49'! power ^ (primary separatedBy: $^ asParser trim) foldRight: [ :a :op :b | a raisedTo: b ]! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 9/15/2008 09:28'! primary ^ number / parentheses! ! !PPArithmeticParser methodsFor: 'accessing' stamp: 'lr 7/3/2008 17:06'! start ^ terms end! ! !PPArithmeticParser methodsFor: 'grammar' stamp: 'lr 9/15/2008 09:29'! terms ^ addition / factors! ! !PPCompositeParser class methodsFor: 'accessing' stamp: 'lr 3/16/2013 21:42'! dependencies "Answer a collection of PPCompositeParser classes that this parser directly dependends on. Override this method in subclasses to declare dependent parsers. The default implementation does not depend on other PPCompositeParser." ^ #()! ! !PPCompositeParser class methodsFor: 'accessing' stamp: 'lr 1/29/2010 11:35'! ignoredNames "Answer a collection of instance-variables that should not be automatically initialized with productions, but that are used internal to the composite parser." ^ PPCompositeParser allInstVarNames! ! !PPCompositeParser class methodsFor: 'instance creation' stamp: 'lr 12/7/2009 08:24'! new "Answer a new parser starting at the default start symbol." ^ self newStartingAt: self startSymbol! ! !PPCompositeParser class methodsFor: 'instance creation' stamp: 'lr 3/16/2013 21:21'! newStartingAt: aSymbol "Answer a new parser starting at aSymbol. The code makes sure to resolve all dependent parsers correctly." | parsers remaining | parsers := IdentityDictionary new. remaining := OrderedCollection with: self. [ remaining isEmpty ] whileFalse: [ | dependency | dependency := remaining removeLast. (parsers includesKey: dependency) ifFalse: [ parsers at: dependency put: dependency basicNew. remaining addAll: dependency dependencies ] ]. parsers keysAndValuesDo: [ :class :parser | | dependencies | dependencies := IdentityDictionary new. class dependencies do: [ :dependency | dependencies at: dependency put: (parsers at: dependency) ]. parser initializeStartingAt: (class == self ifTrue: [ aSymbol ] ifFalse: [ class startSymbol ]) dependencies: dependencies ]. parsers keysAndValuesDo: [ :class :parser | parser setParser: (parser perform: parser children first name). parser productionNames keysAndValuesDo: [ :key :value | (parser instVarAt: key) setParser: (parser perform: value) ] ]. ^ parsers at: self! ! !PPCompositeParser class methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:57'! parse: anObject ^ self parse: anObject startingAt: self startSymbol! ! !PPCompositeParser class methodsFor: 'parsing' stamp: 'lr 2/7/2010 21:02'! parse: anObject onError: aBlock ^ self parse: anObject startingAt: self startSymbol onError: aBlock! ! !PPCompositeParser class methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:57'! parse: anObject startingAt: aSymbol ^ (self newStartingAt: aSymbol) parse: anObject! ! !PPCompositeParser class methodsFor: 'parsing' stamp: 'lr 2/7/2010 21:02'! parse: anObject startingAt: aSymbol onError: aBlock ^ (self newStartingAt: aSymbol) parse: anObject onError: aBlock! ! !PPCompositeParser class methodsFor: 'accessing' stamp: 'lr 12/7/2009 08:20'! startSymbol "Answer the method that represents the default start symbol." ^ #start! ! !PPCompositeParser methodsFor: 'querying' stamp: 'lr 3/16/2013 21:41'! dependencyAt: aClass "Answer the dependent parser aClass. Throws an error if this parser class is not declared in the method #dependencies on the class-side of the receiver." ^ dependencies at: aClass ifAbsent: [ self error: 'Undeclared dependency in ' , self class name , ' to ' , aClass name ]! ! !PPCompositeParser methodsFor: 'initialization' stamp: 'lr 3/16/2013 17:15'! initializeStartingAt: aSymbol dependencies: aDictionary self initialize. parser := PPDelegateParser named: aSymbol. self productionNames keysAndValuesDo: [ :key :value | self instVarAt: key put: (PPDelegateParser named: value) ]. dependencies := aDictionary! ! !PPCompositeParser methodsFor: 'querying' stamp: 'lr 12/4/2009 18:39'! productionAt: aSymbol "Answer the production named aSymbol." ^ self productionAt: aSymbol ifAbsent: [ nil ]! ! !PPCompositeParser methodsFor: 'querying' stamp: 'lr 6/4/2010 13:37'! productionAt: aSymbol ifAbsent: aBlock "Answer the production named aSymbol, if there is no such production answer the result of evaluating aBlock." (self class ignoredNames includes: aSymbol asString) ifTrue: [ ^ aBlock value ]. (self class startSymbol = aSymbol) ifTrue: [ ^ parser ]. ^ self instVarAt: (self class allInstVarNames indexOf: aSymbol asString ifAbsent: [ ^ aBlock value ])! ! !PPCompositeParser methodsFor: 'querying' stamp: 'lr 5/8/2011 15:45'! productionNames "Answer a dictionary of slot indexes and production names." | productionNames ignoredNames | productionNames := Dictionary new. ignoredNames := self class ignoredNames collect: [ :each | each asSymbol ]. self class allInstVarNames keysAndValuesDo: [ :key :value | (ignoredNames includes: value asSymbol) ifFalse: [ productionNames at: key put: value asSymbol ] ]. ^ productionNames! ! !PPCompositeParser methodsFor: 'accessing' stamp: 'lr 5/16/2008 17:32'! start "Answer the production to start this parser with." self subclassResponsibility! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! and ^ self parse: '\p.\q.((p q) p)'! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! false ^ self parse: '\x.\y.y'! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! ifthenelse ^ self parse: '\p.p'! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! not ^ self parse: '\p.\a.\b.((p b) a)'! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! or ^ self parse: '\p.\q.((p p) q)'! ! !PPLambdaParser class methodsFor: 'curch-booleans' stamp: 'lr 4/3/2009 08:28'! true ^ self parse: '\x.\y.x'! ! !PPLambdaParser methodsFor: 'productions' stamp: 'lr 2/25/2013 23:43'! abstraction ^ $\ asParser trim , variable , $. asParser trim , expression ==> [ :node | Array with: node second with: node fourth ]! ! !PPLambdaParser methodsFor: 'productions' stamp: 'lr 2/25/2013 23:43'! application ^ $( asParser trim , expression , expression , $) asParser trim ==> [ :node | Array with: node second with: node third ]! ! !PPLambdaParser methodsFor: 'productions' stamp: 'lr 9/15/2008 09:29'! expression ^ variable / abstraction / application! ! !PPLambdaParser methodsFor: 'accessing' stamp: 'lr 5/19/2008 11:35'! start ^ expression end! ! !PPLambdaParser methodsFor: 'productions' stamp: 'lr 2/25/2013 23:44'! variable ^ (#letter asParser , #word asParser star) flatten trim! ! !PPDelegateParser class methodsFor: 'instance creation' stamp: 'lr 4/20/2008 16:22'! on: aParser ^ self new setParser: aParser! ! !PPDelegateParser methodsFor: 'accessing' stamp: 'lr 10/21/2009 16:37'! children ^ Array with: parser! ! !PPDelegateParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:47'! parseOn: aStream ^ parser parseOn: aStream! ! !PPDelegateParser methodsFor: '*petitanalyzer-transforming' stamp: 'lr 4/13/2010 09:39'! replace: aParser with: anotherParser super replace: aParser with: anotherParser. parser == aParser ifTrue: [ parser := anotherParser ]! ! !PPDelegateParser methodsFor: 'initialization' stamp: 'lr 4/20/2008 16:23'! setParser: aParser parser := aParser! ! !PPEndOfInputParser commentStamp: 'lr 4/18/2008 13:46' prior: 102654541! A parser that succeeds only at the end of the input stream.! !PPEndOfInputParser methodsFor: 'operators' stamp: 'lr 12/7/2009 08:53'! end ^ self! ! !PPEndOfInputParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:10'! parseOn: aStream | position result | position := aStream position. result := parser parseOn: aStream. (result isPetitFailure or: [ aStream atEnd ]) ifTrue: [ ^ result ]. result := PPFailure message: 'end of input expected' at: aStream position. aStream position: position. ^ result! ! !PPExpressionParser commentStamp: '' prior: 102654661! A PPExpressionParser is a parser to conveniently define an expression grammar with prefix, postfix, and left- and right-associative infix operators. The following code initializes a parser for arithmetic expressions. First we instantiate an expression parser, a simple parser for expressions in parenthesis and a simple parser for integer numbers. expression := PPExpressionParser new. parens := $( asParser token trim , expression , $) asParser token trim ==> [ :nodes | nodes second ]. integer := #digit asParser plus token trim ==> [ :token | token value asInteger ]. Then we define on what term the expression grammar is built on: expression term: parens / integer. Finally we define the operator-groups in descending precedence. Note, that the action blocks receive both, the terms and the parsed operator in the order they appear in the parsed input. expression group: [ :g | g prefix: $- asParser token trim do: [ :op :a | a negated ] ]; group: [ :g | g postfix: '++' asParser token trim do: [ :a :op | a + 1 ]. g postfix: '--' asParser token trim do: [ :a :op | a - 1 ] ]; group: [ :g | g right: $^ asParser token trim do: [ :a :op :b | a raisedTo: b ] ]; group: [ :g | g left: $* asParser token trim do: [ :a :op :b | a * b ]. g left: $/ asParser token trim do: [ :a :op :b | a / b ] ]; group: [ :g | g left: $+ asParser token trim do: [ :a :op :b | a + b ]. g left: $- asParser token trim do: [ :a :op :b | a - b ] ]. After evaluating the above code the 'expression' is an efficient parser that evaluates examples like: expression parse: '-8++'. expression parse: '1+2*3'. expression parse: '1*2+3'. expression parse: '(1+2)*3'. expression parse: '8/4/2'. expression parse: '8/(4/2)'. expression parse: '2^2^3'. expression parse: '(2^2)^3'. Instance Variables: operators The operators defined in the current group.! !PPExpressionParser methodsFor: 'private' stamp: 'FirstnameLastname 11/26/2009 20:48'! build: aParser left: aChoiceParser ^ (aParser separatedBy: aChoiceParser) foldLeft: [ :a :op :b | op first value: a value: op second value: b ]! ! !PPExpressionParser methodsFor: 'private' stamp: 'lr 12/4/2009 17:38'! build: aParser postfix: aChoiceParser ^ aParser , aChoiceParser star map: [ :term :ops | ops inject: term into: [ :result :operator | operator first value: result value: operator second ] ]! ! !PPExpressionParser methodsFor: 'private' stamp: 'lr 12/4/2009 17:39'! build: aParser prefix: aChoiceParser ^ aChoiceParser star , aParser map: [ :ops :term | ops reversed inject: term into: [ :result :operator | operator first value: operator second value: result ] ]! ! !PPExpressionParser methodsFor: 'private' stamp: 'FirstnameLastname 11/26/2009 20:48'! build: aParser right: aChoiceParser ^ (aParser separatedBy: aChoiceParser) foldRight: [ :a :op :b | op first value: a value: op second value: b ]! ! !PPExpressionParser methodsFor: 'private' stamp: 'FirstnameLastname 11/26/2009 21:15'! buildOn: aParser ^ self buildSelectors inject: aParser into: [ :term :selector | | list | list := operators at: selector ifAbsent: [ #() ]. list isEmpty ifTrue: [ term ] ifFalse: [ self perform: selector with: term with: (list size = 1 ifTrue: [ list first first ==> [ :operator | Array with: list first second with: operator ] ] ifFalse: [ list inject: PPChoiceParser new into: [ :choice :each | choice / (each first ==> [ :operator | Array with: each second with: operator ]) ] ]) ] ]! ! !PPExpressionParser methodsFor: 'private' stamp: 'FirstnameLastname 11/26/2009 20:48'! buildSelectors ^ #(build:prefix: build:postfix: build:right: build:left:)! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'lr 2/7/2010 23:20'! group: aOneArgumentBlock "Defines a priority group by evaluating aOneArgumentBlock." operators := Dictionary new. parser := [ aOneArgumentBlock value: self. self buildOn: parser ] ensure: [ operators := nil ]! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'FirstnameLastname 11/26/2009 20:49'! left: aParser do: aThreeArgumentBlock "Define an operator aParser that is left-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term." self operator: #build:left: parser: aParser do: aThreeArgumentBlock! ! !PPExpressionParser methodsFor: 'private' stamp: 'lr 2/7/2010 23:23'! operator: aSymbol parser: aParser do: aBlock parser isNil ifTrue: [ ^ self error: 'You did not specify a term when creating the receiver.' ]. operators isNil ifTrue: [ ^ self error: 'Use #group: to define precedence groups in descending order.' ]. (operators at: aSymbol ifAbsentPut: [ OrderedCollection new ]) addLast: (Array with: aParser asParser with: aBlock)! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'FirstnameLastname 11/26/2009 20:49'! postfix: aParser do: aTwoArgumentBlock "Define a postfix operator aParser. Evaluate aTwoArgumentBlock with the term and the operator." self operator: #build:postfix: parser: aParser do: aTwoArgumentBlock! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'FirstnameLastname 11/26/2009 20:49'! prefix: aParser do: aTwoArgumentBlock "Define a prefix operator aParser. Evaluate aTwoArgumentBlock with the operator and the term." self operator: #build:prefix: parser: aParser do: aTwoArgumentBlock! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'FirstnameLastname 11/26/2009 20:49'! right: aParser do: aThreeArgumentBlock "Define an operator aParser that is right-associative. Evaluate aThreeArgumentBlock with the first term, the operator, and the second term." self operator: #build:right: parser: aParser do: aThreeArgumentBlock! ! !PPExpressionParser methodsFor: 'specifying' stamp: 'FirstnameLastname 11/26/2009 21:26'! term: aParser "Defines the initial term aParser of the receiver." parser isNil ifTrue: [ parser := aParser ] ifFalse: [ self error: 'Unable to redefine the term.' ]! ! !PPFlattenParser commentStamp: 'lr 11/22/2009 13:09' prior: 102656632! A parser that answers a flat copy of the range my delegate parses.! !PPFlattenParser methodsFor: 'private' stamp: 'lr 2/25/2013 23:31'! on: aCollection start: aStartInteger stop: aStopInteger value: anObject ^ aCollection copyFrom: aStartInteger to: aStopInteger! ! !PPFlattenParser methodsFor: 'parsing' stamp: 'lr 2/25/2013 23:30'! parseOn: aStream | start element | start := aStream position. element := parser parseOn: aStream. element isPetitFailure ifTrue: [ ^ element ]. ^ self on: aStream collection start: start + 1 stop: aStream position value: element! ! !PPTokenParser commentStamp: 'lr 2/25/2013 23:31' prior: 102656760! A parser that answers a token with the value of my delegate parses. Instance Variables: tokenClass The token sub-class to be used.! !PPTokenParser methodsFor: 'private' stamp: 'lr 4/6/2010 19:18'! defaultTokenClass ^ PPToken! ! !PPTokenParser methodsFor: 'initialization' stamp: 'lr 4/6/2010 19:19'! initialize tokenClass := self defaultTokenClass ! ! !PPTokenParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 6/18/2010 14:09'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self tokenClass = aParser tokenClass ]! ! !PPTokenParser methodsFor: 'private' stamp: 'lr 2/25/2013 23:32'! on: aCollection start: aStartInteger stop: aStopInteger value: anObject ^ self tokenClass on: aCollection start: aStartInteger stop: aStopInteger value: anObject! ! !PPTokenParser methodsFor: 'accessing' stamp: 'lr 4/6/2010 19:23'! tokenClass ^ tokenClass! ! !PPTokenParser methodsFor: 'accessing' stamp: 'lr 4/6/2010 19:24'! tokenClass: aTokenClass tokenClass := aTokenClass! ! !PPMemoizedParser commentStamp: '' prior: 102656967! A memoized parser, for refraining redundant computations. Instance Variables: stream The stream of the associated memento objects. buffer The buffer of memento objects. ! !PPMemoizedParser methodsFor: 'operators' stamp: 'lr 4/2/2009 19:48'! memoized "Ther is no point in memoizing more than once." ^ self! ! !PPMemoizedParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:11'! parseOn: aStream | memento | stream == aStream ifFalse: [ self reset: aStream ]. memento := (buffer at: stream position + 1) ifNil: [ buffer at: stream position + 1 put: PPMemento new ]. memento position isNil ifTrue: [ memento result: (stream size - stream position + 2 < memento count ifTrue: [ PPFailure message: 'overflow' at: stream position ] ifFalse: [ memento increment. parser parseOn: stream ]). memento position: stream position ] ifFalse: [ stream position: memento position ]. ^ memento result! ! !PPMemoizedParser methodsFor: 'private' stamp: 'lr 4/2/2009 19:22'! reset: aStream stream := aStream. buffer := Array new: aStream size + 1! ! !PPNotParser commentStamp: '' prior: 102657236! The not-predicate, a parser that succeeds whenever its delegate does not, but consumes no input [Parr 1994, 1995].! !PPNotParser methodsFor: '*petitanalyzer-private' stamp: 'JanKurs 5/31/2013 11:50'! firstSets: aFirstDictionary into: aSet ! ! !PPNotParser methodsFor: '*petitanalyzer-testing' stamp: 'JanKurs 5/31/2013 11:50'! isFirstSetTerminal ^ true! ! !PPNotParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:11'! parseOn: aStream | element position | position := aStream position. element := parser parseOn: aStream. aStream position: position. ^ element isPetitFailure ifFalse: [ PPFailure message: '' at: aStream position ]! ! !PPOptionalParser commentStamp: 'lr 4/3/2011 14:46' prior: 102657414! A parser that optionally parsers its delegate, or answers nil.! !PPOptionalParser methodsFor: '*petitanalyzer-testing' stamp: 'lr 9/1/2010 22:10'! isNullable ^ true! ! !PPOptionalParser methodsFor: 'parsing' stamp: 'lr 8/14/2011 11:47'! parseOn: aStream | element | element := parser parseOn: aStream. ^ element isPetitFailure ifFalse: [ element ]! ! !PPRepeatingParser commentStamp: 'lr 4/3/2011 14:45' prior: 102657541! An abstract parser that repeatedly parses between 'min' and 'max' instances of its delegate. The default configuration parses an infinite number of elements, as 'min' is set to 0 and 'max' to infinity (SmallInteger maxVal). Instance Variables: min The minimum number of repetitions. max The maximum number of repetitions.! !PPLimitedRepeatingParser commentStamp: 'lr 4/3/2011 14:37' prior: 102657957! An abstract parser that repeatedly parses between 'min' and 'max' instances of my delegate and that requires the input to be completed with a specified parser 'limit'. Subclasses provide repeating behavior as typically seen in regular expression implementations (non-blind). Instance Variables: limit The parser to complete the input with.! !PPGreedyRepeatingParser commentStamp: 'lr 4/3/2011 15:08' prior: 102658380! A greedy repeating parser, commonly seen in regular expression implementations. It aggressively consumes as much input as possible and then backtracks to meet the 'limit' condition. This class essentially implements the iterative version of the following recursive parser composition: | parser | parser := PPChoiceParser new. parser setParsers: (Array with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ]) with: (limit and ==> [ :each | OrderedCollection new ])). ^ parser ==> [ :rest | rest asArray ]! !PPGreedyRepeatingParser methodsFor: 'parsing' stamp: 'lr 4/2/2011 15:54'! parseOn: aStream | start element elements positions | start := aStream position. elements := OrderedCollection new. [ elements size < min ] whileTrue: [ (element := parser parseOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element ]. positions := OrderedCollection with: aStream position. [ elements size < max and: [ (element := parser parseOn: aStream) isPetitFailure not ] ] whileTrue: [ elements addLast: element. positions addLast: aStream position ]. [ positions isEmpty ] whileFalse: [ aStream position: positions last. element := limit parseOn: aStream. element isPetitFailure ifFalse: [ aStream position: positions last. ^ elements asArray ]. elements isEmpty ifTrue: [ aStream position: start. ^ element ]. elements removeLast. positions removeLast ]. aStream position: start. ^ PPFailure message: 'overflow' at: start! ! !PPLazyRepeatingParser commentStamp: 'lr 4/3/2011 15:08' prior: 102658981! A lazy repeating parser, commonly seen in regular expression implementations. It limits its consumption to meet the 'limit' condition as early as possible. This class essentially implements the iterative version of the following recursive parser composition: | parser | parser := PPChoiceParser new. parser setParsers: (Array with: (limit and ==> [ :each | OrderedCollection new ]) with: (self , parser map: [ :each :rest | rest addFirst: each; yourself ])). ^ parser ==> [ :rest | rest asArray ]! !PPLazyRepeatingParser methodsFor: 'parsing' stamp: 'lr 4/2/2011 10:14'! parseOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ elements size < min ] whileTrue: [ (element := parser parseOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element ]. [ self matchesLimitOn: aStream ] whileFalse: [ elements size < max ifFalse: [ aStream position: start. ^ PPFailure message: 'overflow' at: start ]. element := parser parseOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element ]. ^ elements asArray! ! !PPLimitedRepeatingParser class methodsFor: 'instance creation' stamp: 'lr 4/3/2011 14:58'! on: aParser limit: aLimitParser ^ (self on: aParser) setLimit: aLimitParser! ! !PPLimitedRepeatingParser methodsFor: 'accessing' stamp: 'lr 4/4/2011 18:46'! children ^ Array with: parser with: limit! ! !PPLimitedRepeatingParser methodsFor: 'accessing' stamp: 'lr 4/2/2011 10:00'! limit "Answer the parser that limits (or ends) this repetition." ^ limit! ! !PPLimitedRepeatingParser methodsFor: 'private' stamp: 'lr 4/2/2011 10:10'! matchesLimitOn: aStream | element position | position := aStream position. element := limit parseOn: aStream. aStream position: position. ^ element isPetitFailure not! ! !PPLimitedRepeatingParser methodsFor: '*petitanalyzer-transforming' stamp: 'lr 4/4/2011 18:46'! replace: aParser with: anotherParser super replace: aParser with: anotherParser. limit == aParser ifTrue: [ limit := anotherParser ]! ! !PPLimitedRepeatingParser methodsFor: 'initialization' stamp: 'lr 4/2/2011 10:00'! setLimit: aParser limit := aParser! ! !PPPossessiveRepeatingParser commentStamp: 'lr 4/3/2011 14:35' prior: 102659562! The default repeating parser with standard PEG semantics (i.e. possessive, blind, eager).! !PPPossessiveRepeatingParser methodsFor: 'parsing' stamp: 'lr 4/2/2011 09:52'! parseOn: aStream | start element elements | start := aStream position. elements := OrderedCollection new. [ elements size < min ] whileTrue: [ (element := parser parseOn: aStream) isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements addLast: element ]. [ elements size < max ] whileTrue: [ (element := parser parseOn: aStream) isPetitFailure ifTrue: [ ^ elements asArray ]. elements addLast: element ]. ^ elements asArray! ! !PPRepeatingParser methodsFor: '*petitanalyzer-private' stamp: 'JanKurs 5/31/2013 11:51'! followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet | firstSet | super followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet. firstSet := aFirstDictionary at: self. self children do: [:p | (aFollowDictionary at: p) addAll: (firstSet reject: [:each | each isNullable]) ]! ! !PPRepeatingParser methodsFor: 'initialization' stamp: 'lr 4/1/2011 21:06'! initialize super initialize. self setMin: 0; setMax: SmallInteger maxVal! ! !PPRepeatingParser methodsFor: '*petitanalyzer-testing' stamp: 'lr 10/21/2009 12:13'! isNullable ^ min = 0! ! !PPRepeatingParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 6/18/2010 14:09'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self min = aParser min and: [ self max = aParser max ] ]! ! !PPRepeatingParser methodsFor: 'accessing' stamp: 'lr 4/30/2010 11:08'! max "Answer the maximum number of repetitions." ^ max! ! !PPRepeatingParser methodsFor: 'accessing' stamp: 'lr 4/30/2010 11:08'! min "Answer the minimum number of repetitions." ^ min! ! !PPRepeatingParser methodsFor: 'printing' stamp: 'lr 6/3/2010 14:00'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' ['; print: min; nextPutAll: ', '; nextPutAll: (max = SmallInteger maxVal ifTrue: [ '*' ] ifFalse: [ max printString ]); nextPut: $]! ! !PPRepeatingParser methodsFor: 'initialization' stamp: 'lr 4/1/2011 21:00'! setMax: anInteger max := anInteger! ! !PPRepeatingParser methodsFor: 'initialization' stamp: 'lr 4/1/2011 21:01'! setMin: anInteger min := anInteger! ! !PPTrimmingParser commentStamp: 'lr 4/6/2010 19:27' prior: 102659715! A parser that silently consumes spaces before and after the delegate parser.! !PPTrimmingParser class methodsFor: 'instance creation' stamp: 'lr 7/31/2010 12:01'! on: aParser trimmer: aTrimParser ^ self new setParser: aParser; setTrimmer: aTrimParser; yourself! ! !PPTrimmingParser methodsFor: 'parsing' stamp: 'lr 8/1/2010 17:11'! parseOn: aStream | position element | position := aStream position. [ (trimmer parseOn: aStream) isPetitFailure ] whileFalse. element := parser parseOn: aStream. element isPetitFailure ifTrue: [ aStream position: position. ^ element ]. [ (trimmer parseOn: aStream) isPetitFailure ] whileFalse. ^ element! ! !PPTrimmingParser methodsFor: 'initialization' stamp: 'lr 7/31/2010 12:00'! setTrimmer: aParser trimmer := aParser! ! !PPEpsilonParser commentStamp: 'lr 5/15/2008 15:09' prior: 102659855! A parser that consumes nothing and always succeeds.! !PPEpsilonParser methodsFor: '*petitanalyzer-testing' stamp: 'lr 10/21/2009 12:11'! isNullable ^ true! ! !PPEpsilonParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:49'! parseOn: aStream ^ nil! ! !PPSentinel class methodsFor: 'instance creation' stamp: 'lr 9/16/2010 17:54'! instance ^ instance ifNil: [ instance := self new ]! ! !PPFailingParser commentStamp: '' prior: 102659964! A parser that consumes nothing and always fails. Instance Variables: message The failure message.! !PPFailingParser class methodsFor: 'instance creation' stamp: 'lr 5/2/2010 19:16'! message: aString ^ self new setMessage: aString! ! !PPFailingParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 4/30/2010 12:01'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self message = aParser message ]! ! !PPFailingParser methodsFor: 'accessing' stamp: 'lr 4/30/2010 11:10'! message "Answer the error message of the receiving parser." ^ message! ! !PPFailingParser methodsFor: 'parsing' stamp: 'lr 5/5/2010 13:57'! parseOn: aStream ^ PPFailure message: message at: aStream position! ! !PPFailingParser methodsFor: 'printing' stamp: 'lr 4/16/2010 21:27'! printNameOn: aStream super printNameOn: aStream. aStream nextPutAll: ', '; print: message! ! !PPFailingParser methodsFor: 'initialization' stamp: 'lr 5/2/2010 19:16'! setMessage: aString message := aString! ! !PPListParser commentStamp: '' prior: 102660127! Abstract parser that parses a list of things in some way (to be specified by the subclasses). Instance Variables: parsers A sequence of other parsers to delegate to.! !PPChoiceParser commentStamp: 'lr 4/18/2008 15:35' prior: 102660395! A parser that uses the first parser that succeeds.! !PPChoiceParser methodsFor: 'operators' stamp: 'lr 9/17/2008 00:16'! / aRule ^ self copyWith: aRule! ! !PPChoiceParser methodsFor: 'parsing' stamp: 'lr 5/22/2010 11:48'! parseOn: aStream "This is optimized code that avoids unnecessary block activations, do not change. When all choices fail, the last failure is answered." | element | 1 to: parsers size do: [ :index | element := (parsers at: index) parseOn: aStream. element isPetitFailure ifFalse: [ ^ element ] ]. ^ element! ! !PPListParser class methodsFor: 'instance creation' stamp: 'lr 5/3/2010 20:26'! with: aParser ^ self withAll: (Array with: aParser)! ! !PPListParser class methodsFor: 'instance creation' stamp: 'lr 9/23/2008 18:32'! with: aFirstParser with: aSecondParser ^ self withAll: (Array with: aFirstParser with: aSecondParser)! ! !PPListParser class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 10:12'! withAll: aCollection ^ self basicNew setParsers: aCollection! ! !PPListParser methodsFor: 'accessing' stamp: 'lr 10/21/2009 16:37'! children ^ parsers! ! !PPListParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 4/30/2010 08:15'! copyInContext: aDictionary seen: aSeenDictionary | copy copies | aSeenDictionary at: self ifPresent: [ :value | ^ value ]. copy := aSeenDictionary at: self put: self copy. copies := OrderedCollection new. parsers do: [ :each | | result | result := each copyInContext: aDictionary seen: aSeenDictionary. result isCollection ifTrue: [ copies addAll: result ] ifFalse: [ copies add: result ] ]. ^ copy setParsers: copies; yourself! ! !PPListParser methodsFor: 'copying' stamp: 'lr 9/17/2008 22:36'! copyWith: aParser ^ self species withAll: (parsers copyWith: aParser)! ! !PPListParser methodsFor: 'initialization' stamp: 'lr 4/29/2010 10:12'! initialize super initialize. self setParsers: #()! ! !PPListParser methodsFor: 'copying' stamp: 'lr 5/22/2010 10:26'! postCopy super postCopy. parsers := parsers copy! ! !PPListParser methodsFor: '*petitanalyzer-transforming' stamp: 'lr 5/22/2010 10:24'! replace: aParser with: anotherParser super replace: aParser with: anotherParser. parsers keysAndValuesDo: [ :index :parser | parser == aParser ifTrue: [ parsers at: index put: anotherParser ] ]! ! !PPListParser methodsFor: 'initialization' stamp: 'lr 4/29/2010 10:12'! setParsers: aCollection parsers := aCollection asArray! ! !PPSequenceParser commentStamp: 'lr 4/18/2008 15:34' prior: 102660510! A parser that parses a sequence of parsers.! !PPSequenceParser methodsFor: 'operators' stamp: 'lr 9/17/2008 00:17'! , aRule ^ self copyWith: aRule! ! !PPSequenceParser methodsFor: '*petitanalyzer-private' stamp: 'lr 12/9/2010 10:37'! cycleSet: aDictionary | firstSet | 1 to: parsers size do: [ :index | firstSet := aDictionary at: (parsers at: index). (firstSet anySatisfy: [ :each | each isNullable ]) ifFalse: [ ^ parsers copyFrom: 1 to: index ] ]. ^ parsers! ! !PPSequenceParser methodsFor: '*petitanalyzer-private' stamp: 'lr 9/16/2010 17:56'! firstSets: aFirstDictionary into: aSet | nullable | parsers do: [ :parser | nullable := false. (aFirstDictionary at: parser) do: [ :each | each isNullable ifTrue: [ nullable := true ] ifFalse: [ aSet add: each ] ]. nullable ifFalse: [ ^ self ] ]. aSet add: PPSentinel instance! ! !PPSequenceParser methodsFor: '*petitanalyzer-private' stamp: 'lr 8/14/2010 13:51'! followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet parsers keysAndValuesDo: [ :index :parser | | followSet firstSet | followSet := aFollowDictionary at: parser. index = parsers size ifTrue: [ followSet addAll: aSet ] ifFalse: [ (self class withAll: (parsers copyFrom: index + 1 to: parsers size)) firstSets: aFirstDictionary into: (firstSet := IdentitySet new). (firstSet anySatisfy: [ :each | each isNullable ]) ifTrue: [ followSet addAll: aSet ]. followSet addAll: (firstSet reject: [ :each | each isNullable ]) ] ]! ! !PPSequenceParser methodsFor: 'operators-mapping' stamp: 'lr 5/6/2011 20:27'! map: aBlock ^ aBlock numArgs = self children size ifTrue: [ self ==> [ :nodes | aBlock valueWithArguments: nodes ] ] ifFalse: [ self error: aBlock numArgs asString , ' arguments expected.' ]! ! !PPSequenceParser methodsFor: 'parsing' stamp: 'lr 5/6/2010 10:47'! parseOn: aStream "This is optimized code that avoids unnecessary block activations, do not change." | start elements element | start := aStream position. elements := Array new: parsers size. 1 to: parsers size do: [ :index | element := (parsers at: index) parseOn: aStream. element isPetitFailure ifTrue: [ aStream position: start. ^ element ]. elements at: index put: element ]. ^ elements! ! !PPSequenceParser methodsFor: 'operators-mapping' stamp: 'lr 1/8/2010 12:01'! permutation: anArrayOfIntegers "Answer a permutation of the receivers sequence." anArrayOfIntegers do: [ :index | (index isInteger and: [ index between: 1 and: parsers size ]) ifFalse: [ self error: 'Invalid permutation index: ' , index printString ] ]. ^ self ==> [ :nodes | anArrayOfIntegers collect: [ :index | nodes at: index ] ]! ! !PPLiteralParser commentStamp: '' prior: 102660611! Abstract literal parser that parses some kind of literal type (to be specified by subclasses). Instance Variables: literal The literal object to be parsed. message The error message to be generated. ! !PPLiteralObjectParser commentStamp: '' prior: 102660895! A parser that accepts a single literal object, such as a character. This is the same as the predicate parser 'PPPredicateParser expect: literal' but slightly more efficient.! !PPLiteralObjectParser methodsFor: 'operators' stamp: 'lr 8/18/2010 20:16'! caseInsensitive "Answer a parser that can parse the receiver case-insensitive." literal asUppercase = literal asLowercase ifTrue: [ ^ self ]. ^ PPPredicateObjectParser on: [ :value | literal sameAs: value ] message: message! ! !PPLiteralObjectParser methodsFor: 'operators' stamp: 'lr 4/28/2011 20:02'! negate ^ (PPPredicateObjectParser expect: literal message: message) negate! ! !PPLiteralObjectParser methodsFor: 'parsing' stamp: 'lr 10/30/2010 11:48'! parseOn: aStream ^ (aStream atEnd not and: [ literal = aStream uncheckedPeek ]) ifFalse: [ PPFailure message: message at: aStream position ] ifTrue: [ aStream next ]! ! !PPLiteralParser class methodsFor: 'instance creation' stamp: 'lr 1/7/2010 15:30'! on: anObject ^ self on: anObject message: anObject printString , ' expected'! ! !PPLiteralParser class methodsFor: 'instance creation' stamp: 'lr 1/7/2010 15:29'! on: anObject message: aString ^ self new initializeOn: anObject message: aString! ! !PPLiteralParser methodsFor: 'operators' stamp: 'lr 6/1/2010 22:24'! caseInsensitive "Answer a parser that can parse the receiver case-insensitive." self subclassResponsibility! ! !PPLiteralParser methodsFor: 'initialization' stamp: 'lr 5/2/2010 13:25'! initializeOn: anObject message: aString literal := anObject. message := aString! ! !PPLiteralParser methodsFor: 'accessing' stamp: 'lr 5/2/2010 13:26'! literal "Answer the parsed literal." ^ literal! ! !PPLiteralParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 9/15/2010 12:08'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self literal = aParser literal and: [ self message = aParser message ] ]! ! !PPLiteralParser methodsFor: 'accessing' stamp: 'lr 5/2/2010 13:26'! message "Answer the failure message." ^ message! ! !PPLiteralParser methodsFor: 'printing' stamp: 'lr 4/16/2010 16:38'! printNameOn: aStream super printNameOn: aStream. aStream nextPutAll: ', '; print: literal! ! !PPLiteralSequenceParser commentStamp: 'lr 12/4/2009 18:39' prior: 102661140! A parser accepts a sequence of literal objects, such as a String. This is an optimization to avoid having to compose longer sequences from PPSequenceParser.! !PPLiteralSequenceParser methodsFor: 'operators' stamp: 'lr 8/18/2010 20:16'! caseInsensitive "Answer a parser that can parse the receiver case-insensitive." literal asUppercase = literal asLowercase ifTrue: [ ^ self ]. ^ PPPredicateSequenceParser on: [ :value | literal sameAs: value ] message: message size: size! ! !PPLiteralSequenceParser methodsFor: 'initialization' stamp: 'lr 6/1/2010 22:21'! initializeOn: anObject message: aString super initializeOn: anObject message: aString. size := literal size! ! !PPLiteralSequenceParser methodsFor: 'parsing' stamp: 'lr 10/30/2010 11:48'! parseOn: aStream | position result | position := aStream position. result := aStream next: size. literal = result ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: message at: aStream position! ! !PPLiteralSequenceParser methodsFor: 'accessing' stamp: 'lr 9/15/2010 11:16'! size "Answer the sequence size of the receiver." ^ size! ! !PPParser class methodsFor: 'instance creation' stamp: 'lr 10/27/2008 11:17'! named: aString ^ self new name: aString! ! !PPParser class methodsFor: 'instance creation' stamp: 'lr 4/18/2008 14:00'! new ^ self basicNew initialize! ! !PPParser methodsFor: 'operators' stamp: 'lr 9/23/2008 18:32'! , aParser "Answer a new parser that parses the receiver followed by aParser." ^ PPSequenceParser with: self with: aParser! ! !PPParser methodsFor: 'operators' stamp: 'lr 4/14/2010 11:46'! / aParser "Answer a new parser that parses the receiver, if the receiver fails try with aParser (ordered-choice)." ^ PPChoiceParser with: self with: aParser! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 5/12/2010 20:32'! ==> aBlock "Answer a new parser that performs aBlock as action handler on success." ^ PPActionParser on: self block: aBlock! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 6/12/2010 10:20'! >=> aBlock "Answer a new parser that wraps the receiving parser with a two argument block. The first argument is the parsed stream, the second argument a continuation block on the delegate parser." ^ PPWrappingParser on: self block: aBlock! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 11/23/2010 10:01'! allNamedParsers "Answer all the named parse nodes of the receiver." | result | result := OrderedCollection new. self allNamedParsersDo: [ :parser | result addLast: parser ]. ^ result! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 11/23/2010 10:12'! allNamedParsersDo: aBlock "Iterate over all the named parse nodes of the receiver." self allParsersDo: [ :each | each name notNil ifTrue: [ aBlock value: each ] ]! ! !PPParser methodsFor: '*petitanalyzer-enumerating' stamp: 'lr 4/13/2010 08:36'! allParsers "Answer all the parse nodes of the receiver." | result | result := OrderedCollection new. self allParsersDo: [ :parser | result addLast: parser ]. ^ result! ! !PPParser methodsFor: '*petitanalyzer-enumerating' stamp: 'lr 4/13/2010 08:36'! allParsersDo: aBlock "Iterate over all the parse nodes of the receiver." self allParsersDo: aBlock seen: IdentitySet new! ! !PPParser methodsFor: '*petitanalyzer-enumerating' stamp: 'lr 4/13/2010 08:35'! allParsersDo: aBlock seen: aSet "Iterate over all the parse nodes of the receiver, do not visit and follow the ones contained in aSet." (aSet includes: self) ifTrue: [ ^ self ]. aSet add: self. aBlock value: self. self children do: [ :each | each allParsersDo: aBlock seen: aSet ]! ! !PPParser methodsFor: 'operators' stamp: 'lr 5/31/2010 15:12'! and "Answer a new parser (logical and-predicate) that succeeds whenever the receiver does, but never consumes input." ^ PPAndParser on: self! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 2/19/2010 07:42'! answer: anObject "Answer a new parser that always returns anObject from a successful parse." ^ self ==> [ :nodes | anObject ]! ! !PPParser methodsFor: 'converting' stamp: 'lr 11/29/2011 20:48'! asParser "Answer the receiving parser." ^ self! ! !PPParser methodsFor: 'accessing' stamp: 'lr 10/21/2009 16:38'! children "Answer a set of child parsers that could follow the receiver." ^ #()! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 4/30/2010 07:49'! copyInContext: aDictionary ^ self copyInContext: aDictionary seen: IdentityDictionary new! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 7/17/2011 11:53'! copyInContext: aDictionary seen: aSeenDictionary | copy | aSeenDictionary at: self ifPresent: [ :value | ^ value ]. copy := aSeenDictionary at: self put: self copy. copy children do: [ :each | copy replace: each with: (each copyInContext: aDictionary seen: aSeenDictionary) ]. ^ copy! ! !PPParser methodsFor: '*petitanalyzer-querying' stamp: 'lr 11/19/2009 23:49'! cycleSet "Answer a set of all nodes that are within one or more cycles of left-recursion. This is generally not a problem if at least one of the nodes is memoized, but it might make the grammar very inefficient and should be avoided if possible." | cycles | cycles := IdentitySet new. self cycleSet: OrderedCollection new firstSets: self firstSets into: cycles. ^ cycles! ! !PPParser methodsFor: '*petitanalyzer-private' stamp: 'lr 11/19/2009 23:47'! cycleSet: aDictionary "PRIVATE: Answer the children that could be part of a cycle-set with the receiver, subclasses might restrict the number of children returned. aDictionary is pre-calcualted first-sets." ^ self children! ! !PPParser methodsFor: '*petitanalyzer-private' stamp: 'lr 5/22/2010 10:45'! cycleSet: aStack firstSets: aDictionary into: aSet "PRIVATE: Try to find a cycle, where aStack contains the previously visited parsers. The method returns quickly when the receiver is a terminal, terminals cannot be part of a cycle. If aStack already contains the receiver, then we are in a cycle. In this case we don't process the children further and add the nodes to aSet." | index | self isTerminal ifTrue: [ ^ self ]. (index := aStack indexOf: self) > 0 ifTrue: [ ^ aSet addAll: (aStack copyFrom: index to: aStack size) ]. aStack addLast: self. (self cycleSet: aDictionary) do: [ :each | each cycleSet: aStack firstSets: aDictionary into: aSet ]. aStack removeLast! ! !PPParser methodsFor: 'operators' stamp: 'lr 12/3/2010 11:34'! def: aParser "Redefine the receiver as the argument aParser. This method is useful when defining recursive parsers: instantiate a PPUnresolvedParser and later redefine it with another one." ^ self becomeForward: (aParser name: self name)! ! !PPParser methodsFor: 'operators-convenience' stamp: 'lr 2/19/2010 07:42'! delimitedBy: aParser "Answer a new parser that parses the receiver one or more times, separated and possibly ended by aParser." ^ (self separatedBy: aParser) , (aParser optional) ==> [ :node | node second isNil ifTrue: [ node first ] ifFalse: [ node first copyWith: node second ] ]! ! !PPParser methodsFor: 'operators' stamp: 'lr 4/30/2010 12:13'! end "Answer a new parser that succeeds at the end of the input and return the result of the receiver." ^ PPEndOfInputParser on: self! ! !PPParser methodsFor: '*petitanalyzer-querying' stamp: 'lr 10/22/2009 19:59'! firstSet "Answer the first-set of the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #firstSets to calculate the first-sets at once." ^ self firstSets at: self! ! !PPParser methodsFor: '*petitanalyzer-querying' stamp: 'JanKurs 5/31/2013 11:49'! firstSets "Answer a dictionary with all the parsers reachable from the receiver as key and their first-set as value. The first-set of a parser is the list of terminal parsers that begin the parser derivable from that parser." | firstSets | firstSets := IdentityDictionary new. self allParsersDo: [ :each | firstSets at: each put: (each isFirstSetTerminal ifTrue: [ IdentitySet with: each ] ifFalse: [ IdentitySet new ]). each isNullable ifTrue: [ (firstSets at: each) add: PPSentinel instance ] ]. [ | changed tally | changed := false. firstSets keysAndValuesDo: [ :parser :first | tally := first size. parser firstSets: firstSets into: first. changed := changed or: [ tally ~= first size ] ]. changed ] whileTrue. ^ firstSets! ! !PPParser methodsFor: '*petitanalyzer-private' stamp: 'lr 11/12/2009 21:25'! firstSets: aFirstDictionary into: aSet "PRIVATE: Try to add additional elements to the first-set aSet of the receiver, use the incomplete aFirstDictionary." self children do: [ :parser | aSet addAll: (aFirstDictionary at: parser) ]! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 5/15/2008 16:08'! flatten "Answer a new parser that flattens the underlying collection." ^ PPFlattenParser on: self! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 4/3/2011 15:00'! foldLeft: aBlock "Answer a new parser that that folds the result of the receiver from left-to-right into aBlock. The argument aBlock must take two or more arguments." | size args | size := aBlock numArgs. args := Array new: size. ^ self ==> [ :nodes | args at: 1 put: nodes first. 2 to: nodes size by: size - 1 do: [ :index | args replaceFrom: 2 to: size with: nodes startingAt: index; at: 1 put: (aBlock valueWithArguments: args) ]. args first ]! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 4/3/2011 14:59'! foldRight: aBlock "Answer a new parser that that folds the result of the receiver from right-to-left into aBlock. The argument aBlock must take two or more arguments." | size args | size := aBlock numArgs. args := Array new: size. ^ self ==> [ :nodes | args at: size put: nodes last. nodes size - size + 1 to: 1 by: 1 - size do: [ :index | args replaceFrom: 1 to: size - 1 with: nodes startingAt: index; at: size put: (aBlock valueWithArguments: args) ]. args at: size ]! ! !PPParser methodsFor: '*petitanalyzer-querying' stamp: 'lr 11/12/2009 21:13'! followSet "Answer the follow-set of the receiver starting at the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #followSets to calculate the follow-sets at once." ^ self followSets at: self! ! !PPParser methodsFor: '*petitanalyzer-querying' stamp: 'lr 9/16/2010 17:55'! followSets "Answer a dictionary with all the parsers reachable from the receiver as key and their follow-set as value. The follow-set of a parser is the list of terminal parsers that can appear immediately to the right of that parser." | current previous continue firstSets followSets | current := previous := 0. firstSets := self firstSets. followSets := IdentityDictionary new. self allParsersDo: [ :each | followSets at: each put: IdentitySet new ]. (followSets at: self) add: PPSentinel instance. [ followSets keysAndValuesDo: [ :parser :follow | parser followSets: followSets firstSets: firstSets into: follow ]. current := followSets inject: 0 into: [ :result :each | result + each size ]. continue := previous < current. previous := current. continue ] whileTrue. ^ followSets! ! !PPParser methodsFor: '*petitanalyzer-private' stamp: 'lr 11/12/2009 21:25'! followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet "PRIVATE: Try to add additional elements to the follow-set aSet of the receiver, use the incomplete aFollowDictionary and the complete aFirstDictionary." self children do: [ :parser | (aFollowDictionary at: parser) addAll: aSet ]! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:32'! hasProperty: aKey "Test if the property aKey is present." ^ properties notNil and: [ properties includesKey: aKey ]! ! !PPParser methodsFor: 'initialization' stamp: 'lr 4/24/2008 10:33'! initialize! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 12/3/2010 16:45'! innerChildren "Answer the inner children of the receiver." | result | result := OrderedCollection new. self innerChildrenDo: [ :parser | result addLast: parser ]. ^ result! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 12/3/2010 16:48'! innerChildrenDo: aBlock "Iterate over the inner children of the receiver." self innerChildrenDo: aBlock seen: IdentitySet new! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 12/3/2010 16:51'! innerChildrenDo: aBlock seen: aSet "Iterate over the inner children of the receiver." self children do: [ :each | (aSet includes: each) ifTrue: [ ^ self ]. aSet add: each. each name isNil ifTrue: [ aBlock value: each. each innerChildrenDo: aBlock seen: aSet ] ]! ! !PPParser methodsFor: '*petitanalyzer-testing' stamp: 'JanKurs 5/31/2013 11:49'! isFirstSetTerminal "Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser." ^ self children isEmpty! ! !PPParser methodsFor: '*petitanalyzer-testing' stamp: 'lr 11/12/2009 17:25'! isNullable "Answer true if the receiver is a nullable parser, e.g. it can successfully parse nothing." ^ false! ! !PPParser methodsFor: 'testing' stamp: 'lr 8/6/2010 16:44'! isPetitParser ^ true! ! !PPParser methodsFor: '*petitanalyzer-testing' stamp: 'lr 5/22/2010 10:45'! isTerminal "Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser." ^ self children isEmpty! ! !PPParser methodsFor: 'testing' stamp: 'lr 10/27/2008 11:28'! isUnresolved ^ false! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 5/6/2011 20:28'! map: aBlock "Answer a new parser that works on the receiving sequence an passes in each element as a block argument." ^ aBlock numArgs = 1 ifTrue: [ self ==> aBlock ] ifFalse: [ self error: aBlock numArgs asString , ' arguments expected.' ] ! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 4/29/2010 23:14'! match: aParser inContext: aDictionary ^ self match: aParser inContext: aDictionary seen: IdentitySet new! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 6/18/2010 14:09'! match: aParser inContext: aDictionary seen: anIdentitySet "This is the default implementation to match two parsers. This code can properly handle recursion. This is code is supposed to be overridden in subclasses that add new state." (self == aParser or: [ anIdentitySet includes: self ]) ifTrue: [ ^ true ]. anIdentitySet add: self. ^ self class = aParser class and: [ self matchList: self children against: aParser children inContext: aDictionary seen: anIdentitySet ]! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 4/29/2010 23:07'! matchList: matchList against: parserList inContext: aDictionary seen: aSet ^ self matchList: matchList index: 1 against: parserList index: 1 inContext: aDictionary seen: aSet! ! !PPParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 5/31/2010 18:37'! matchList: matchList index: matchIndex against: parserList index: parserIndex inContext: aDictionary seen: aSet | parser currentIndex currentDictionary currentSeen parsers | matchList size < matchIndex ifTrue: [ ^ parserList size < parserIndex ]. parser := matchList at: matchIndex. parser class = PPListPattern ifTrue: [ currentIndex := parserIndex - 1. [ currentDictionary := aDictionary copy. currentSeen := aSet copy. parserList size < currentIndex or: [ parsers := parserList copyFrom: parserIndex to: currentIndex. (currentDictionary at: parser ifAbsentPut: [ parsers ]) = parsers and: [ (self matchList: matchList index: matchIndex + 1 against: parserList index: currentIndex + 1 inContext: currentDictionary seen: currentSeen) ifTrue: [ currentDictionary keysAndValuesDo: [ :key :value | aDictionary at: key put: value ]. ^ true ]. false ] ] ] whileFalse: [ currentIndex := currentIndex + 1 ]. ^ false ]. parserList size < parserIndex ifTrue: [ ^ false ]. (parser match: (parserList at: parserIndex) inContext: aDictionary seen: aSet) ifFalse: [ ^ false ]. ^ self matchList: matchList index: matchIndex + 1 against: parserList index: parserIndex + 1 inContext: aDictionary seen: aSet! ! !PPParser methodsFor: 'parsing' stamp: 'lr 2/8/2010 00:30'! matches: anObject "Answer if anObject can be parsed by the receiver." ^ (self parse: anObject) isPetitFailure not! ! !PPParser methodsFor: 'parsing' stamp: 'lr 6/4/2011 18:12'! matchesIn: anObject "Search anObject repeatedly for the matches of the receiver. Answered an OrderedCollection of the matched parse-trees." | result | result := OrderedCollection new. self matchesIn: anObject do: [ :each | result addLast: each ]. ^ result! ! !PPParser methodsFor: 'parsing' stamp: 'lr 3/1/2010 21:51'! matchesIn: anObject do: aBlock "Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Make sure to always consume exactly one character with each step, to not miss any match." ((self and ==> aBlock , #any asParser) / #any asParser) star parse: anObject! ! !PPParser methodsFor: 'parsing' stamp: 'lr 8/16/2011 07:26'! matchesSkipIn: anObject "Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of the matched parse-trees. Skip over matches." | result | result := OrderedCollection new. self matchesSkipIn: anObject do: [ :each | result addLast: each ]. ^ result! ! !PPParser methodsFor: 'parsing' stamp: 'lr 8/16/2011 07:26'! matchesSkipIn: anObject do: aBlock "Search anObject repeatedly for the matches of the receiver. Evaluate aBlock for each match with the matched parse-tree as the argument. Skip over matches." (self ==> aBlock / #any asParser) star parse: anObject! ! !PPParser methodsFor: 'parsing' stamp: 'lr 6/4/2011 18:12'! matchingRangesIn: anObject "Search anObject repeatedly for the matches of the receiver. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)." | result | result := OrderedCollection new. self matchingRangesIn: anObject do: [ :value | result addLast: value ]. ^ result! ! !PPParser methodsFor: 'parsing' stamp: 'lr 2/25/2013 23:41'! matchingRangesIn: anObject do: aBlock "Search anObject repeatedly for the matches of the receiver. Evaluate aBlock with the range of each match (index of first character to: index of last character)." self token matchesIn: anObject do: [ :token | aBlock value: (token start to: token stop) ]! ! !PPParser methodsFor: 'parsing' stamp: 'DamienCassou 10/29/2011 19:18'! matchingSkipRangesIn: anObject "Search anObject repeatedly for the matches of the receiver. Skip over matches. Answer an OrderedCollection of ranges of each match (index of first character to: index of last character)." | result | result := OrderedCollection new. self matchingSkipRangesIn: anObject do: [ :value | result addLast: value ]. ^ result! ! !PPParser methodsFor: 'parsing' stamp: 'lr 2/25/2013 23:42'! matchingSkipRangesIn: anObject do: aBlock "Search anObject repeatedly for the matches of the receiver. Skip over matches. Evaluate aBlock with the range of each match (index of first character to: index of last character)." self token matchesSkipIn: anObject do: [ :token | aBlock value: (token start to: token stop) ]! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:03'! max: anInteger "Answer a new parser that parses the receiver at most anInteger times." ^ self star setMax: anInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:56'! max: anInteger greedy: aParser "Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed." ^ (self starGreedy: aParser) setMax: anInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:57'! max: anInteger lazy: aParser "Answer a new parser that parses the receiver at most anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed." ^ (self starLazy: aParser) setMax: anInteger! ! !PPParser methodsFor: 'operators' stamp: 'lr 5/31/2010 16:34'! memoized "Answer a new memoized parser, for refraining redundant computations. This ensures polynomial time O(n^4) for left-recursive grammars and O(n^3) for non left-recursive grammars in the worst case. Not necessary for most grammars that are carefully written and in O(n) anyway." ^ PPMemoizedParser on: self! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:02'! min: anInteger "Answer a new parser that parses the receiver at least anInteger times." ^ self star setMin: anInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:56'! min: anInteger greedy: aParser "Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed." ^ (self starGreedy: aParser) setMin: anInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:57'! min: anInteger lazy: aParser "Answer a new parser that parses the receiver at least anInteger times until it reaches aParser. This is a lazy non-blind implementation. aParser is not consumed." ^ (self starLazy: aParser) setMin: anInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:03'! min: aMinInteger max: aMaxInteger "Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times." ^ self star setMin: aMinInteger; setMax: aMaxInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:56'! min: aMinInteger max: aMaxInteger greedy: aParser "Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed." ^ (self starGreedy: aParser) setMin: aMinInteger; setMax: aMaxInteger! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/3/2011 14:57'! min: aMinInteger max: aMaxInteger lazy: aParser "Answer a new parser that parses the receiver at least aMinInteger and at most aMaxInteger times until it reaches aParser. This is a greedy non-blind implementation. aParser is not consumed." ^ (self starLazy: aParser) setMin: aMinInteger; setMax: aMaxInteger! ! !PPParser methodsFor: 'accessing' stamp: 'lr 4/19/2010 10:35'! name "Answer the production name of the receiver." ^ self propertyAt: #name ifAbsent: [ nil ]! ! !PPParser methodsFor: 'accessing' stamp: 'lr 4/19/2010 10:38'! name: aString self propertyAt: #name put: aString! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 11/23/2010 10:55'! namedChildren "Answer the named children of the receiver." | result | result := OrderedCollection new. self namedChildrenDo: [ :parser | result addLast: parser ]. ^ result! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 11/23/2010 10:55'! namedChildrenDo: aBlock "Iterate over the named children of the receiver." self namedChildrenDo: aBlock seen: IdentitySet new! ! !PPParser methodsFor: '*petitanalyzer-named' stamp: 'lr 11/23/2010 10:55'! namedChildrenDo: aBlock seen: aSet "Iterate over the named children of the receiver." self children do: [ :each | (aSet includes: each) ifTrue: [ ^ self ]. aSet add: each. each name isNil ifTrue: [ each namedChildrenDo: aBlock seen: aSet ] ifFalse: [ aBlock value: each ] ]! ! !PPParser methodsFor: 'operators' stamp: 'lr 2/19/2010 07:36'! negate "Answer a new parser consumes any input token but the receiver." ^ self not , #any asParser ==> #second! ! !PPParser methodsFor: 'operators' stamp: 'lr 5/31/2010 15:12'! not "Answer a new parser (logical not-predicate) that succeeds whenever the receiver fails, but never consumes input." ^ PPNotParser on: self! ! !PPParser methodsFor: 'operators' stamp: 'lr 9/1/2010 22:03'! optional "Answer a new parser that parses the receiver, if possible." ^ PPOptionalParser on: self! ! !PPParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:53'! parse: anObject "Parse anObject with the receiving parser and answer the parse-result or an instance of PPFailure." ^ self parseOn: anObject asPetitStream! ! !PPParser methodsFor: 'parsing' stamp: 'lr 10/29/2010 17:05'! parse: anObject onError: aBlock "Parse anObject with the receiving parser and answer the parse-result or answer the result of evaluating aBlock. Depending on the number of arguments of the block it is simply evaluated, evaluated with the failure object, or evaluated with the error message and position." | result | result := self parse: anObject. result isPetitFailure ifFalse: [ ^ result ]. aBlock numArgs = 0 ifTrue: [ ^ aBlock value ]. aBlock numArgs = 1 ifTrue: [ ^ aBlock value: result ]. ^ aBlock value: result message value: result position! ! !PPParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 22:18'! parseOn: aStream "Parse aStream with the receiving parser and answer the parse-result or an instance of PPFailure. Override this method in subclasses to specify custom parse behavior. Do not call this method from outside, instead use #parse:." self subclassResponsibility! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:03'! plus "Answer a new parser that parses the receiver one or more times." ^ self star setMin: 1! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:04'! plusGreedy: aParser "Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed." ^ (self starGreedy: aParser) setMin: 1! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/1/2011 21:04'! plusLazy: aParser "Answer a new parser that parses the receiver one or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed." ^ (self starLazy: aParser) setMin: 1! ! !PPParser methodsFor: 'copying' stamp: 'lr 4/19/2010 10:33'! postCopy super postCopy. properties := properties copy! ! !PPParser methodsFor: 'printing' stamp: 'lr 4/16/2010 16:36'! printNameOn: aStream self name isNil ifTrue: [ aStream print: self hash ] ifFalse: [ aStream nextPutAll: self name ]! ! !PPParser methodsFor: 'printing' stamp: 'lr 4/16/2010 16:36'! printOn: aStream super printOn: aStream. aStream nextPut: $(. self printNameOn: aStream. aStream nextPut: $)! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:32'! propertyAt: aKey "Answer the property value associated with aKey." ^ self propertyAt: aKey ifAbsent: [ self error: 'Property not found' ]! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:32'! propertyAt: aKey ifAbsent: aBlock "Answer the property value associated with aKey or, if aKey isn't found, answer the result of evaluating aBlock." ^ properties isNil ifTrue: [ aBlock value ] ifFalse: [ properties at: aKey ifAbsent: aBlock ]! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:32'! propertyAt: aKey ifAbsentPut: aBlock "Answer the property associated with aKey or, if aKey isn't found store the result of evaluating aBlock as new value." ^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:33'! propertyAt: aKey put: anObject "Set the property at aKey to be anObject. If aKey is not found, create a new entry for aKey and set is value to anObject. Answer anObject." ^ (properties ifNil: [ properties := Dictionary new: 1 ]) at: aKey put: anObject! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:33'! removeProperty: aKey "Remove the property with aKey. Answer the property or raise an error if aKey isn't found." ^ self removeProperty: aKey ifAbsent: [ self error: 'Property not found' ]! ! !PPParser methodsFor: 'accessing-properties' stamp: 'lr 4/19/2010 10:33'! removeProperty: aKey ifAbsent: aBlock "Remove the property with aKey. Answer the value or, if aKey isn't found, answer the result of evaluating aBlock." | answer | properties isNil ifTrue: [ ^ aBlock value ]. answer := properties removeKey: aKey ifAbsent: aBlock. properties isEmpty ifTrue: [ properties := nil ]. ^ answer! ! !PPParser methodsFor: '*petitanalyzer-transforming' stamp: 'lr 4/13/2010 09:38'! replace: aParser with: anotherParser "Replace the references of the receiver pointing to aParser with anotherParser."! ! !PPParser methodsFor: 'operators-convenience' stamp: 'lr 2/19/2010 07:56'! separatedBy: aParser "Answer a new parser that parses the receiver one or more times, separated by aParser." ^ (PPSequenceParser with: self with: (PPSequenceParser with: aParser with: self) star) ==> [ :nodes | | result | result := Array new: 2 * nodes second size + 1. result at: 1 put: nodes first. nodes second keysAndValuesDo: [ :index :pair | result replaceFrom: 2 * index to: 2 * index + 1 with: pair startingAt: 1 ]. result ]! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/2/2011 10:02'! star "Answer a new parser that parses the receiver zero or more times. This is a greedy and blind implementation that tries to consume as much input as possible and it does not consider what comes afterwards." ^ PPPossessiveRepeatingParser on: self! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/2/2011 10:01'! starGreedy: aParser "Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a greedy non-blind implementation of the star operator. aParser is not consumed." ^ PPGreedyRepeatingParser on: self limit: aParser! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 4/2/2011 10:01'! starLazy: aParser "Answer a new parser that parses the receiver zero or more times until it reaches aParser. This is a lazy non-blind implementation of the star operator. aParser is not consumed." ^ PPLazyRepeatingParser on: self limit: aParser! ! !PPParser methodsFor: 'operators-repeating' stamp: 'lr 9/15/2010 09:34'! times: anInteger "Answer a new parser that parses the receiver exactly anInteger times." ^ self min: anInteger max: anInteger! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 6/29/2010 14:25'! token "Answer a new parser that transforms the input to a token." ^ PPTokenParser on: self! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 4/6/2010 19:26'! token: aTokenClass "Answer a new parser that transforms the input to a token of class aTokenClass." ^ self token tokenClass: aTokenClass! ! !PPParser methodsFor: '*petitanalyzer-transforming' stamp: 'lr 10/30/2010 11:54'! transform: aBlock "Answer a copy of all parsers reachable from the receiver transformed using aBlock." | mapping root | mapping := IdentityDictionary new. self allParsersDo: [ :each | mapping at: each put: (aBlock value: each copy) ]. root := mapping at: self. [ | changed | changed := false. root allParsersDo: [ :each | each children do: [ :old | mapping at: old ifPresent: [ :new | each replace: old with: new. changed := true ] ] ]. changed ] whileTrue. ^ root! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 7/31/2010 12:06'! trim "Answer a new parser that consumes spaces before and after the receiving parser." ^ self trimSpaces! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 7/11/2011 11:03'! trim: aParser "Answer a new parser that consumes and ignores aParser repeatedly before and after the receiving parser." ^ PPTrimmingParser on: self trimmer: aParser! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 7/11/2011 11:03'! trimBlanks "Answer a new parser that consumes blanks before and after the receiving parser." ^ self trim: #blank asParser! ! !PPParser methodsFor: 'operators-mapping' stamp: 'lr 7/11/2011 11:03'! trimSpaces "Answer a new parser that consumes spaces before and after the receiving parser." ^ self trim: #space asParser! ! !PPParser methodsFor: 'operators-convenience' stamp: 'lr 2/25/2012 16:54'! withoutSeparators "Filters out the separators from a parse result produced by one of the productions #delimitedBy: or #separatedBy:." ^ self ==> [ :items | | result | result := Array new: items size + 1 // 2. 1 to: result size do: [ :index | result at: index put: (items at: 2 * index - 1) ]. result ]! ! !PPParser methodsFor: 'operators' stamp: 'lr 10/23/2008 14:05'! wrapped "Answer a new parser that is simply wrapped." ^ PPDelegateParser on: self! ! !PPParser methodsFor: 'operators' stamp: 'lr 4/14/2010 11:53'! | aParser "Answer a new parser that either parses the receiver or aParser. Fail if both pass or fail (exclusive choice, unordered choice)." ^ (self not , aParser) / (aParser not , self) ==> #second! ! !PPPattern commentStamp: '' prior: 102661348! PPPattern is meta-parser that is solely used to match other types of parsers. It cannot be used for actually parsing something. The constructor method determines what can be matched.! !PPListPattern commentStamp: '' prior: 102661586! PPListPattern that is used to match any number of parsers. As its superclass, it cannot be used for actually parsing something.! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 4/30/2010 08:47'! any "Matches all parsers." ^ self on: [ :parser :context | true ]! ! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 3/16/2013 21:45'! class: aBehavior "Matches parsers that are of the class aBehavior." ^ self on: [ :parser :context | parser class = aBehavior ]! ! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 3/16/2013 21:45'! kind: aBehavior "Matches parsers that are of the class aBehavior or one of its subclasses." ^ self on: [ :parser :context | parser isKindOf: aBehavior ]! ! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 4/30/2010 08:46'! name: aString "Matches parsers with the name aString." ^ self on: [ :parser :context | parser name = aString ]! ! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 10:21'! new self error: 'Use an explicit constructur on ' , self name! ! !PPPattern class methodsFor: 'instance creation' stamp: 'lr 4/30/2010 08:46'! on: aBlock "Matches parsers that satisfy an arbitrary condition in aBlock." ^ self basicNew initializeOn: aBlock! ! !PPPattern methodsFor: 'comparing' stamp: 'lr 4/29/2010 10:33'! = aParser ^ self == aParser or: [ self name notNil and: [ self name = aParser name ] ]! ! !PPPattern methodsFor: 'matching' stamp: 'lr 4/30/2010 07:53'! copyInContext: aDictionary seen: aSeenDictionary ^ aDictionary at: self! ! !PPPattern methodsFor: 'comparing' stamp: 'lr 4/29/2010 10:33'! hash ^ self identityHash! ! !PPPattern methodsFor: 'initialization' stamp: 'lr 4/29/2010 10:20'! initializeOn: aBlock verificationBlock := aBlock! ! !PPPattern methodsFor: 'matching' stamp: 'lr 4/30/2010 12:01'! match: aParser inContext: aDictionary seen: anIdentitySet (verificationBlock value: aParser value: aDictionary) ifFalse: [ ^ false ]. ^ (aDictionary at: self ifAbsentPut: [ aParser ]) match: aParser inContext: aDictionary seen: anIdentitySet! ! !PPPattern methodsFor: 'parsing' stamp: 'lr 4/30/2010 08:48'! parseOn: aStream "This is just a pattern used for matching. It should not be used in actual grammars." self shouldNotImplement! ! !PPPluggableParser commentStamp: '' prior: 102661773! A pluggable parser that passes the parser stream into a block. This enables users to perform manual parsing or to embed other parser frameworks into PetitParser. Instance Variables: block The pluggable one-argument block. ! !PPPluggableParser class methodsFor: 'instance creation' stamp: 'lr 5/2/2010 16:52'! on: aBlock ^ self new initializeOn: aBlock! ! !PPPluggableParser methodsFor: 'accessing' stamp: 'lr 4/30/2010 11:10'! block "Answer the pluggable block." ^ block! ! !PPPluggableParser methodsFor: 'initialization' stamp: 'lr 5/2/2010 16:52'! initializeOn: aBlock block := aBlock! ! !PPPluggableParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 6/18/2010 14:09'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ]! ! !PPPluggableParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:54'! parseOn: aStream | position result | position := aStream position. result := block value: aStream. result isPetitFailure ifTrue: [ aStream position: position ]. ^ result! ! !PPPredicateParser commentStamp: '' prior: 102662072! An abstract parser that accepts if a given predicate holds. Instance Variables: predicate The block testing for the predicate. predicateMessage The error message of the predicate. negated The block testing for the negation of the predicate. negatedMessage The error message of the negated predicate.! !PPPredicateObjectParser commentStamp: '' prior: 102662490! A parser that accepts if a given predicate on one element of the input sequence holds.! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 6/12/2010 09:10'! any ^ self on: [ :each | true ] message: 'input expected' negated: [ :each | false ] message: 'no input expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 4/1/2011 20:05'! anyExceptAnyOf: aCollection ^ self on: [ :each | (aCollection includes: each) not ] message: 'any except ' , aCollection printString , ' expected' negated: [ :each | aCollection includes: each ] message: aCollection printString , ' not expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 4/1/2011 20:05'! anyOf: aCollection ^ self on: [ :each | aCollection includes: each ] message: 'any of ' , aCollection printString , ' expected' negated: [ :each | (aCollection includes: each) not ] message: 'none of ' , aCollection printString , 'expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 6/12/2010 09:10'! between: min and: max ^ self on: [ :each | each >= min and: [ each <= max ] ] message: min printString , '..' , max printString , ' expected' negated: [ :each | each < min or: [ each > max ] ] message: min printString , '..' , max printString , ' not expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:02'! blank ^ self chars: (String with: Character space with: Character tab) message: 'blank expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:02'! char: aCharacter ^ self expect: aCharacter message: (String with: $" with: aCharacter with: $") , ' expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 10:57'! char: aCharacter message: aString ^ self expect: aCharacter message: aString! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! chars: aCollection message: aString ^ self on: (PPCharSetPredicate on: [ :char | aCollection includes: char ]) message: aString! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:02'! cr ^ self char: Character cr message: 'carriage return expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! digit ^ self on: (PPCharSetPredicate on: [ :char | char isDigit ]) message: 'digit expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 8/25/2010 10:57'! expect: anObject ^ self expect: anObject message: anObject printString , ' expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-objects' stamp: 'lr 8/25/2010 10:57'! expect: anObject message: aString ^ self on: [ :each | each = anObject ] message: aString negated: [ :each | each ~= anObject ] message: 'no ' , aString! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! hex ^ self on: (PPCharSetPredicate on: [ :char | (char between: $0 and: $9) or: [ (char between: $a and: $f) or: [ (char between: $A and: $F) ] ] ]) message: 'hex digit expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:05'! letter ^ self on: (PPCharSetPredicate on: [ :char | char isLetter ]) message: 'letter expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 6/12/2010 09:10'! lf ^ self char: Character lf! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! lowercase ^ self on: (PPCharSetPredicate on: [ :char | char isLowercase ]) message: 'lowercase letter expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:04'! newline ^ self chars: (String with: Character cr with: Character lf) message: 'newline expected'! ! !PPPredicateObjectParser class methodsFor: 'instance creation' stamp: 'lr 6/12/2010 09:10'! on: aBlock message: aString ^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: 'no ' , aString! ! !PPPredicateObjectParser class methodsFor: 'instance creation' stamp: 'lr 6/12/2010 09:10'! on: aBlock message: aString negated: aNegatedBlock message: aNegatedString ^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:04'! punctuation ^ self chars: '.,"''?!!;:#$%&()*+-/<>=@[]\^_{}|~' message: 'punctuation expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! space ^ self on: (PPCharSetPredicate on: [ :char | char isSeparator ]) message: 'separator expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:04'! tab ^ self char: Character tab message: 'tab expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! uppercase ^ self on: (PPCharSetPredicate on: [ :char | char isUppercase ]) message: 'uppercase letter expected'! ! !PPPredicateObjectParser class methodsFor: 'factory-chars' stamp: 'lr 8/25/2010 11:06'! word ^ self on: (PPCharSetPredicate on: [ :char | char isAlphaNumeric ]) message: 'letter or digit expected'! ! !PPPredicateObjectParser methodsFor: 'initialization' stamp: 'lr 6/12/2010 09:12'! initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString predicate := aBlock. predicateMessage := aString. negated := aNegatedBlock. negatedMessage := aNegatedString! ! !PPPredicateObjectParser methodsFor: 'operators' stamp: 'lr 6/12/2010 09:12'! negate "Answer a parser that is the negation of the receiving predicate parser." ^ self class on: negated message: negatedMessage negated: predicate message: predicateMessage! ! !PPPredicateObjectParser methodsFor: 'parsing' stamp: 'lr 9/30/2010 11:05'! parseOn: aStream ^ (aStream atEnd not and: [ predicate value: aStream uncheckedPeek ]) ifFalse: [ PPFailure message: predicateMessage at: aStream position ] ifTrue: [ aStream next ]! ! !PPPredicateParser methodsFor: 'accessing' stamp: 'lr 5/2/2010 13:36'! block "Answer the predicate block of the receiver." ^ predicate! ! !PPPredicateParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 9/15/2010 11:56'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block and: [ self message = aParser message ] ]! ! !PPPredicateParser methodsFor: 'accessing' stamp: 'lr 5/2/2010 13:36'! message "Answer the failure message." ^ predicateMessage! ! !PPPredicateParser methodsFor: 'printing' stamp: 'lr 5/2/2010 13:37'! printNameOn: aStream super printNameOn: aStream. aStream nextPutAll: ', '; print: predicateMessage! ! !PPPredicateSequenceParser commentStamp: '' prior: 102662644! A parser that accepts if a given predicate on an arbitrary number of elements of the input sequence holds. Instance Variables: size The number of elements to consume.! !PPPredicateSequenceParser class methodsFor: 'instance creation' stamp: 'lr 6/12/2010 09:14'! on: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger ^ self new initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger! ! !PPPredicateSequenceParser class methodsFor: 'instance creation' stamp: 'lr 6/12/2010 09:14'! on: aBlock message: aString size: anInteger ^ self on: aBlock message: aString negated: [ :each | (aBlock value: each) not ] message: 'no ' , aString size: anInteger ! ! !PPPredicateSequenceParser methodsFor: 'initialization' stamp: 'lr 6/12/2010 09:13'! initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString size: anInteger predicate := aBlock. predicateMessage := aString. negated := aNegatedBlock. negatedMessage := aNegatedString. size := anInteger ! ! !PPPredicateSequenceParser methodsFor: '*petitanalyzer-matching' stamp: 'lr 6/18/2010 14:09'! match: aParser inContext: aDictionary seen: anIdentitySet ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self size = aParser size ]! ! !PPPredicateSequenceParser methodsFor: 'operators' stamp: 'lr 6/12/2010 09:14'! negate "Answer a parser that is the negation of the receiving predicate parser." ^ self class on: negated message: negatedMessage negated: predicate message: predicateMessage size: size! ! !PPPredicateSequenceParser methodsFor: 'parsing' stamp: 'lr 6/12/2010 09:25'! parseOn: aStream | position result | position := aStream position. result := aStream next: size. (result size = size and: [ predicate value: result ]) ifTrue: [ ^ result ]. aStream position: position. ^ PPFailure message: predicateMessage at: aStream position! ! !PPPredicateSequenceParser methodsFor: 'accessing' stamp: 'lr 6/12/2010 08:58'! size "Answer the sequence size of the receiver." ^ size! ! !PPUnresolvedParser commentStamp: 'lr 11/28/2009 18:50' prior: 102662890! This is a temporary placeholder or forward reference to a parser that has not been defined yet. If everything goes well it will eventually be replaced with the real parser instance.! !PPUnresolvedParser methodsFor: 'testing' stamp: 'lr 10/27/2008 11:29'! isUnresolved ^ true! ! !PPUnresolvedParser methodsFor: 'parsing' stamp: 'lr 2/7/2010 20:51'! parseOn: aStream self error: self printString , ' need to be resolved before execution.'! ! !PPProcessor commentStamp: '' prior: 102663125! PPProcessor is an abstract superclass to PPRewriter and PPSearcher. It implements common functionality to search and transform grammars. The implementation of these matching algorithms is inspired from the refactoring engine by Don Roberts and John Brant. Contrary to the original implementation that worked on syntax trees, this implementation was generalized and works on possibly cyclic search patterns and grammar graphs. Instance Variables: searches The rules to be processed. context The current search context.! !PPProcessor class methodsFor: 'instance creation' stamp: 'lr 4/30/2010 08:34'! new ^ self basicNew initialize! ! !PPProcessor methodsFor: 'rules' stamp: 'lr 4/29/2010 09:34'! addRule: aGrammarRule searches add: (aGrammarRule setOwner: self)! ! !PPProcessor methodsFor: 'private' stamp: 'lr 4/29/2010 09:34'! context ^ context! ! !PPProcessor methodsFor: 'initialization' stamp: 'lr 4/29/2010 09:38'! initialize super initialize. searches := OrderedCollection new. context := Dictionary new! ! !PPProcessor methodsFor: 'private' stamp: 'lr 9/1/2010 20:53'! performRule: aRule on: aParser context := Dictionary new. ^ aRule performOn: aParser! ! !PPProcessor methodsFor: 'private' stamp: 'lr 9/1/2010 20:56'! performRulesOn: aParser | result | searches do: [ :rule | result := self performRule: rule on: aParser. result notNil ifTrue: [ ^ result ] ]. ^ nil! ! !PPRewriter commentStamp: '' prior: 102663736! PPRewriter walks over a grammar graph and transforms its parsers. If the grammar is modified, #hasChanged returns true. Instance Variables: changed Indicates if the last operation has changed anything.! !PPRewriter methodsFor: 'public' stamp: 'lr 9/1/2010 20:58'! execute: aParser "Perform the replace rules of the receiver on aParser, answer the resulting parser." | previous result | previous := context. changed := false. context := Dictionary new. result := aParser transform: [ :each | | transformed | transformed := self performRulesOn: each. transformed isNil ifTrue: [ each ] ifFalse: [ changed := true. transformed ] ]. context := previous. ^ result! ! !PPRewriter methodsFor: 'testing' stamp: 'lr 4/29/2010 21:28'! hasChanged "Answer if the last operation has changed anything." ^ changed! ! !PPRewriter methodsFor: 'initialization' stamp: 'lr 4/29/2010 21:28'! initialize super initialize. changed := false! ! !PPRewriter methodsFor: 'accessing' stamp: 'lr 4/29/2010 10:16'! replace: aSearchParser with: aReplaceParser self replace: aSearchParser with: aReplaceParser when: [ :node | true ]! ! !PPRewriter methodsFor: 'accessing' stamp: 'lr 4/29/2010 08:25'! replace: aSearchParser with: aReplaceParser when: aValidationBlock self addRule: (PPParserReplaceRule searchFor: aSearchParser replaceWith: aReplaceParser when: aValidationBlock)! ! !PPRewriter methodsFor: 'accessing' stamp: 'lr 4/29/2010 10:16'! replace: aSearchParser withValueFrom: aReplaceBlock self replace: aSearchParser withValueFrom: aReplaceBlock when: [ :node | true ]! ! !PPRewriter methodsFor: 'accessing' stamp: 'lr 4/29/2010 08:25'! replace: aSearchParser withValueFrom: aReplaceBlock when: aValidationBlock self addRule: (PPBlockReplaceRule searchFor: aSearchParser replaceWith: aReplaceBlock when: aValidationBlock)! ! !PPSearcher commentStamp: '' prior: 102664002! PPSearcher walks over a grammar specification and matches its parsers against the patterns using #match:inContext:. Instance Variables: answer The answer propagated between matches.! !PPSearcher methodsFor: 'private' stamp: 'lr 4/29/2010 09:46'! answer ^ answer! ! !PPSearcher methodsFor: 'public' stamp: 'lr 4/29/2010 09:45'! execute: aParser "Perform the search rules of the receiver on aParser. Answer the result of the search." ^ self execute: aParser initialAnswer: nil! ! !PPSearcher methodsFor: 'public' stamp: 'lr 9/1/2010 20:56'! execute: aParser initialAnswer: anObject "Perform the search rules of the receiver on aParser. Inject anObject into the matches and answer the result." | previous | previous := context. answer := anObject. context := Dictionary new. aParser allParsersDo: [ :each | self performRulesOn: each ]. context := previous. ^ answer! ! !PPSearcher methodsFor: 'rules' stamp: 'lr 4/29/2010 09:48'! matches: aParser do: anAnswerBlock "Add a search expression aParser, evaluate anAnswerBlock with the matched node and the previous answer." self addRule: (PPSearchRule searchFor: aParser thenDo: anAnswerBlock)! ! !PPSearcher methodsFor: 'rules' stamp: 'lr 4/29/2010 09:56'! matchesAnyOf: aCollectionOfParsers do: anAnswerBlock "Add a collection of search expressions aCollectionOfParsers, evaluate anAnswerBlock with the matched node and the previous answer." aCollectionOfParsers do: [ :each | self matches: each do: anAnswerBlock ]! ! !PPSearcher methodsFor: 'initialization' stamp: 'lr 4/29/2010 09:37'! setAnswer: anObject answer := anObject! ! !PPRule commentStamp: '' prior: 102664243! PPRule is the abstract superclass of all of the grammar search rules. A rule is the first class representation of a particular pattern to search for. The owner of the rule is the algorithms that actually executes the search. This arrangement allows multiple searches to be conducted by a single processor. Instance Variables: owner The processor that is actually performing the search. search The parse pattern to be searched. ! !PPReplaceRule commentStamp: '' prior: 102664754! PPReplaceRule is the abstract superclass of all of the transforming rules. The rules change the grammar by replacing the node that matches the rule. Subclasses implement different strategies for this replacement. Instance Variables: verificationBlock Is evaluated with the matching parser and allows for further verification of a match.! !PPBlockReplaceRule commentStamp: '' prior: 102665168! PPBlockReplaceRule replaces the matching node by the result of evaluating replaceBlock. This allows arbitrary computation to come up with a replacement. Instance Variables: replaceBlock The block that returns the parer to replace to matching parser with. ! !PPBlockReplaceRule class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 08:28'! searchFor: aSearchParser replaceWith: aReplaceBlock when: aVerificationBlock ^ (self searchFor: aSearchParser) setReplaceBlock: aReplaceBlock; setVerificationBlock: aVerificationBlock; yourself! ! !PPBlockReplaceRule methodsFor: 'matching' stamp: 'lr 6/5/2011 16:51'! foundMatchFor: aParser ^ replaceBlock cull: aParser! ! !PPBlockReplaceRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:29'! setReplaceBlock: aBlock replaceBlock := aBlock! ! !PPParserReplaceRule commentStamp: '' prior: 102665502! PPParserReplaceRule replaces a matched grammar with another grammar, which may include patterns from the matching grammar. Instance Variables: replaceParser The parser to replace the matched parser with.! !PPParserReplaceRule class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 08:28'! searchFor: aSearchParser replaceWith: aReplaceParser when: aVerificationBlock ^ (self searchFor: aSearchParser) setReplaceParser: aReplaceParser; setVerificationBlock: aVerificationBlock; yourself! ! !PPParserReplaceRule methodsFor: 'matching' stamp: 'lr 4/29/2010 08:16'! foundMatchFor: aParser ^ replaceParser copyInContext: owner context! ! !PPParserReplaceRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:29'! setReplaceParser: aParser replaceParser := aParser! ! !PPReplaceRule methodsFor: 'matching' stamp: 'lr 6/5/2011 16:52'! canMatch: aParser ^ verificationBlock cull: aParser! ! !PPReplaceRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:13'! initialize super initialize. verificationBlock := [ :parser | true ]! ! !PPReplaceRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:26'! setVerificationBlock: aBlock verificationBlock := aBlock! ! !PPRule class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 09:51'! new ^ self basicNew initialize! ! !PPRule class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 09:51'! searchFor: aParser ^ self new setSearch: aParser! ! !PPRule methodsFor: 'matching' stamp: 'lr 4/28/2010 21:10'! canMatch: aParser ^ true! ! !PPRule methodsFor: 'matching' stamp: 'lr 4/29/2010 08:14'! foundMatchFor: aParser self subclassResponsibility! ! !PPRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:51'! initialize! ! !PPRule methodsFor: 'matching' stamp: 'lr 4/29/2010 08:53'! performOn: aParser (search match: aParser inContext: owner context) ifFalse: [ ^ nil ]. (self canMatch: aParser) ifFalse: [ ^ nil ]. ^ self foundMatchFor: aParser! ! !PPRule methodsFor: 'initialization' stamp: 'lr 4/28/2010 20:45'! setOwner: aGrammarSearcher owner := aGrammarSearcher! ! !PPRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 08:23'! setSearch: aParser search := aParser! ! !PPSearchRule commentStamp: '' prior: 102665773! PPSearchRule is a rule that simply searches for matches to the rule. Every time a match is found, answerBlock is evaluated with the parser that matches and the current answer. This two-argument approach allows a collection to be formed from all of the matches, like with #inject:into:. Instance Variables: answerBlock Block to evaluate with the matching node and the current answer. ! !PPSearchRule class methodsFor: 'instance creation' stamp: 'lr 4/29/2010 08:21'! searchFor: aParser thenDo: aBlock ^ (self searchFor: aParser) setAnswerBlock: aBlock! ! !PPSearchRule methodsFor: 'matching' stamp: 'lr 6/5/2011 16:51'! canMatch: aParser owner setAnswer: (answerBlock cull: aParser cull: owner answer). ^ super canMatch: aParser! ! !PPSearchRule methodsFor: 'matching' stamp: 'lr 4/29/2010 08:15'! foundMatchFor: aParser ^ aParser! ! !PPSearchRule methodsFor: 'initialization' stamp: 'lr 4/29/2010 09:51'! setAnswerBlock: aBlock answerBlock := aBlock! ! !PPToken commentStamp: 'lr 2/25/2013 23:34' prior: 102666229! PPToken represents a parsed part of the input stream. Contrary to a simple String it remembers where it came from, the original collection, its start and stop position and its parse value. Instance Variables: collection The collection this token comes from. start The start position in the collection. stop The stop position in the collection. value The parse result.! !PPToken class methodsFor: 'initialization' stamp: 'lr 11/29/2011 20:42'! initialize "Platform independent newline sequence. LF: Unix, CR+LF: Windows, and CR: Apple." NewLineParser := (Character lf asParser) / (Character cr asParser , Character lf asParser optional)! ! !PPToken class methodsFor: 'instance creation' stamp: 'lr 4/6/2010 20:58'! new self error: 'Token can only be created using a dedicated constructor.'! ! !PPToken class methodsFor: 'instance creation' stamp: 'lr 2/25/2013 23:36'! on: aSequenceableCollection ^ self on: aSequenceableCollection start: 1 stop: aSequenceableCollection size value: nil! ! !PPToken class methodsFor: 'instance creation' stamp: 'lr 2/25/2013 23:39'! on: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject ^ self basicNew initializeOn: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject! ! !PPToken methodsFor: 'comparing' stamp: 'lr 2/26/2013 00:34'! = anObject ^ self class = anObject class and: [ self parsedValue = anObject parsedValue ]! ! !PPToken methodsFor: 'accessing' stamp: 'lr 6/15/2010 23:34'! collection "Answer the underlying collection of this token." ^ collection! ! !PPToken methodsFor: 'querying' stamp: 'lr 9/7/2011 20:40'! column "Answer the column number of this token in the underlying collection." | position | position := 0. (NewLineParser , [ :stream | start <= stream position ifTrue: [ ^ start - position ]. position := stream position ] asParser / #any asParser) star parse: collection. ^ start - position! ! !PPToken methodsFor: 'copying' stamp: 'lr 2/26/2013 00:34'! copyFrom: aStartInteger to: aStopInteger ^ self class on: collection start: start + aStartInteger - 1 stop: stop + aStopInteger - 3 value: value! ! !PPToken methodsFor: 'comparing' stamp: 'lr 2/26/2013 00:34'! hash ^ self parsedValue hash! ! !PPToken methodsFor: 'initialization' stamp: 'lr 2/25/2013 23:36'! initializeOn: aSequenceableCollection start: aStartInteger stop: aStopInteger value: anObject collection := aSequenceableCollection. start := aStartInteger. stop := aStopInteger. value := anObject! ! !PPToken methodsFor: 'accessing-values' stamp: 'lr 2/26/2013 00:32'! inputValue "Answer the consumed input of this token." ^ collection copyFrom: start to: stop! ! !PPToken methodsFor: 'querying' stamp: 'lr 9/7/2011 20:41'! line "Answer the line number of this token in the underlying collection." | line | line := 1. (NewLineParser , [ :stream | start <= stream position ifTrue: [ ^ line ]. line := line + 1 ] asParser / #any asParser) star parse: collection. ^ line! ! !PPToken methodsFor: 'accessing-values' stamp: 'lr 2/26/2013 00:32'! parsedValue "Answer the parsed value of this token." ^ value! ! !PPToken methodsFor: 'printing' stamp: 'lr 2/26/2013 00:37'! printOn: aStream super printOn: aStream. aStream nextPut: $[; print: self start; nextPut: $,; print: self stop; nextPut: $]. aStream nextPut: $(; print: self parsedValue; nextPut: $)! ! !PPToken methodsFor: 'accessing' stamp: 'lr 2/25/2013 23:56'! size "Answer the size of this token in the underlying collection." ^ stop - start + 1! ! !PPToken methodsFor: 'accessing' stamp: 'lr 6/15/2010 23:33'! start "Answer the start position of this token in the underlying collection." ^ start! ! !PPToken methodsFor: 'accessing' stamp: 'lr 6/15/2010 23:33'! stop "Answer the stop position of this token in the underlying collection." ^ stop! ! !PPToken methodsFor: 'accessing-values' stamp: 'lr 2/26/2013 00:34'! value self notify: 'Token>>#value is no longer supported. Instead use Token>>#inputValue or the more pragmatic #parsedValue.'. ^ self inputValue! ! "PetitParser"! "PetitTests"! "PetitAnalyzer"! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:22'! abstract ^ ((self abstractKW), self supertypeKW) / (self abstractKW ==> [:t | { t. nil} ]) / (self supertypeKW ==> [:t | { t. nil} ] )! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:15'! abstractKW ^ self keywordFor: 'abstract'! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/16/2011 21:54'! actionBody ^ actionBodyDecl star, algorithmStatements! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/20/2011 15:50'! actionBodyDecl ^ expressElement / localSection ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/25/2011 13:15'! aggregateInitBody ^ aggregateInitElement separatedBy: commaSep ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 4/7/2012 11:27'! aggregateInitElement ^ (expressExpression, (self separatorFor: ':') , expressExpression) / (expressExpression ==> [:node | Array with: node with: nil with: nil ])! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/10/2011 16:09'! aggregateInitializer ^ (self separatorFor: '['), ((aggregateInitBody optional) ==>[:arr | arr ifNil: [Array new]]), (self separatorFor: ']') ! ! !PPExpressGrammar methodsFor: 'aggregation' stamp: 'AlainPlantec 1/11/2011 16:01'! aggregationElementType ^ baseType! ! !PPExpressGrammar methodsFor: 'aggregation' stamp: 'AlainPlantec 1/11/2011 16:01'! aggregationType ^ self aggregationTypeHead, aggregationElementType! ! !PPExpressGrammar methodsFor: 'aggregation' stamp: 'AlainPlantec 12/16/2011 22:18'! aggregationTypeHead ^ unresolvedIdentifier, indexSpec optional, self ofKW, self uniqueKW optional! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/16/2011 21:54'! algorithmStatements ^ statement star! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:46'! aliasKW ^ (self keywordFor: 'alias')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:12'! aliasStatement ^ self aliasKW, aliasStatementVariable, semicolon , statement star, self endAliasKW, semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 12:29'! aliasStatementVariable ^ simpleIdentifier , forKW, expressExpression! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:12'! andAndOr ^ self andorKW / self andKW ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:22'! andKW ^ (self keywordFor: 'and') ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/3/2011 10:44'! andLikeOperator " mod -> \\, div -> //" ^ 'and' expressOperator / 'mod' expressOperator / 'div' expressOperator / '*' expressOperator / '||' expressOperator / '/' expressOperator ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:22'! andorKW ^ (self keywordFor: 'andor') ! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:10'! asIdentifier: aParser ^aParser expressIdentifier! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:10'! asKeyword: aParser ^aParser expressKeyword! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:11'! asLiteral: aParser ^aParser expressLiteral! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/23/2011 08:57'! asOperator: aParser ^aParser expressOperator! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:13'! asSeparator: aParser ^aParser expressSeparator! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:14'! asToken: aParser ^aParser expressToken! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 1/9/2012 15:48'! assignable ^ simpleIdentifier, qualifier star! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/7/2011 21:36'! assignmentStatement ^ assignable, expressionAssignment , semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 21:49'! attributeDomain ^ baseType! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:48'! attributeIdentifier ^ (redefinitionPrefix, slotName) / (slotName ==> [:id | Array with: nil with: id])! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 2/2/2012 09:51'! baseType ^ aggregationType / namedType ! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 6/6/2012 11:33'! beginDefinedType ^ typeKW, definedTypeIdentifier, (self separatorFor: '=')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/13/2011 10:42'! beginEntity ^ beginEntityHead, abstract optional, superTypeSpec optional, subTypeSpec optional, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 5/8/2012 08:24'! beginEntityHead ^ self beginEntityKws ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:36'! beginEntityKws ^ private optional, entityKW, primaryElementName! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/15/2011 23:44'! beginFunction ^ beginFunctionHead, formalParametersDecl optional, (self separatorFor: ':'), returnType, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:14'! beginFunctionHead ^ functionKW, functionIdentifier! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/16/2011 22:32'! beginGlobalRule ^ beginGlobalRuleHead, (self separatorFor: '('), unresolvedIdentifiersList, (self separatorFor: ')'), semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:43'! beginGlobalRuleHead ^ ruleKW, primaryElementName , self forKW ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:42'! beginKW ^ (self keywordFor: 'begin')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/15/2011 23:48'! beginProcedure ^ beginProcedureHead, formalParametersDecl optional, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:15'! beginProcedureHead ^ procedureKW, procedureIdentifier! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 5/30/2012 00:01'! beginRepeatStatement ^ self repeatKW! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 6/6/2012 10:31'! beginSchema ^ schemaKW, name, semicolon! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 18:37'! binaryOperator ^ comparOperator / orLikeOperator / andLikeOperator ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/16/2011 22:16'! boolean ^ self trueKW / self falseKW! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:13'! byExpression ^ self byKW, expressExpression! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:47'! byKW ^ (self keywordFor: 'by')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 14:24'! caseAction ^ expressExpressionList , (self separatorFor: ':'), statement ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:45'! caseKW ^ (self keywordFor: 'case')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:19'! caseOtherwise ^ self otherwiseKW, (self separatorFor: ':'), statement! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:13'! caseStatement ^ self caseKW, expressExpression, self ofKW, caseAction star, caseOtherwise optional, self endCaseKW, semicolon ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 10:30'! comparOperator ^ '<=' expressOperator / '>=' expressOperator / '<>' expressOperator / ':=:' expressOperator / ':<>:' expressOperator / 'in' expressOperator / 'like' expressOperator / '<' expressOperator / '>' expressOperator / '=' expressOperator ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 14:25'! compoundStatement ^ compoundStatementBegin , statement star, compoundStatementEnd , semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:12'! compoundStatementBegin ^ self beginKW! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:15'! compoundStatementEnd ^ self endKW! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/16/2011 22:13'! constE ^ self constEKW! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 13:59'! constEKW ^ (self keywordFor: 'const_e')! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPlantec 6/6/2012 17:42'! constant ^ constantDeclaration ! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPantec 2/15/2012 17:19'! constantDeclaration ^ constantDeclarationHead, ((self separatorFor: ':'), baseType) optional, expressionAssignment , semicolon ! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPlantec 6/6/2012 11:39'! constantDeclarationHead ^ primaryElementName ! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPlantec 11/22/2011 10:18'! constantKW ^ self keywordFor: 'constant'! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPlantec 6/6/2012 11:20'! constantSection ^ constantKW, constantDeclaration star, endConstantKW, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 1/10/2011 23:58'! default ^ expressionAssignment! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 1/12/2012 13:58'! definedType ^ beginDefinedType, definedTypeDomain, semicolon, whereClause optional, endDefinedType ! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 2/2/2012 09:50'! definedTypeDomain ^ underlyingType! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 6/6/2012 11:41'! definedTypeIdentifier ^ primaryElementName ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:04'! deriveClause ^ deriveKW, derivedAttribute star! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:20'! deriveKW ^ self keywordFor: 'derive'! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 14:26'! derivedAttribute ^ self derivedAttributeDeclarationHead, attributeDomain, expressionAssignment, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:23'! derivedAttributeDeclarationHead ^ attributeIdentifier, (self separatorFor: ':')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/7/2012 12:20'! elseKW ^ (self keywordFor: 'else') ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 14:27'! emptyStatement ^ semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:46'! endAliasKW ^ (self keywordFor: 'end_alias')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:45'! endCaseKW ^ (self keywordFor: 'end_case')! ! !PPExpressGrammar methodsFor: 'constant' stamp: 'AlainPlantec 11/22/2011 10:19'! endConstantKW ^ self keywordFor: 'end_constant'! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 6/6/2012 10:32'! endDefinedType ^ endTypeKW , semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 10:34'! endEntity ^ endEntityKW , semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:21'! endEntityKW ^ (self keywordFor: 'end_entity')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:15'! endFunction ^ endFunctionKW, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:43'! endFunctionKW ^ (self keywordFor: 'end_function')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:15'! endGlobalRule ^ endRuleKW, semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:53'! endIfKW ^ (self keywordFor: 'end_if')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:42'! endKW ^ (self keywordFor: 'end')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:50'! endLocalKW ^ (self keywordFor: 'end_local')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:14'! endProcedure ^ endProcedureKW, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 14:02'! endProcedureKW ^ (self keywordFor: 'end_procedure')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:46'! endRepeatKW ^ (self keywordFor: 'end_repeat')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 5/29/2012 22:17'! endRepeatStatement ^ self endRepeatKW, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:56'! endRuleKW ^ (self keywordFor: 'end_rule')! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 6/6/2012 10:31'! endSchema ^ endSchemaKW, semicolon ! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/22/2011 16:14'! endSchemaKW ^ (self keywordFor: 'end_schema')! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 11/22/2011 10:36'! endTypeKW ^ self keywordFor: 'end_type'! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/20/2010 12:00'! entity ^ beginEntity, explicitAttribute star, entityClause star, endEntity! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 16:19'! entityClause ^ deriveClause / inverseClause / whereClause / uniqueClause ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:21'! entityKW ^ (self keywordFor: 'entity')! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 11/22/2011 13:58'! enumerationKW ^ self keywordFor: 'enumeration'! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 1/12/2012 13:30'! enumerationType ^ enumerationTypeHeader, identifiersList, enumerationTypeTail! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 1/5/2012 23:50'! enumerationTypeHeader ^ self enumerationKW, self ofKW, (self separatorFor: '(')! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 1/5/2012 23:51'! enumerationTypeTail ^ (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 14:00'! escapeKW ^ (self keywordFor: 'escape')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:16'! escapeStatement ^ self escapeKW, semicolon ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 10:34'! expAssign ^ self operatorFor: ':=' ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/7/2011 21:13'! expAssignToken ^ self operatorFor: ':=' ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPantec 2/14/2012 17:36'! explicitAttribute ^ self explicitAttributeDeclarationHead, optAndOrPrivate optional, attributeDomain, default optional, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:23'! explicitAttributeDeclarationHead ^ (attributeIdentifier separatedBy: commaSep), (self separatorFor: ':')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/1/2011 13:59'! expo ^ '**' expressOperator , term ! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/23/2011 16:18'! expressElement ^ definedType / entity / globalRule / function / procedure ==> [:arr | "Transcript show: arr first first value, ' ', arr first second value, String cr. "arr]! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/2/2011 10:07'! expressExpression ^ (term , (binaryOperator , expressExpression) optional) ==> [ :arr | arr second ifNotNil: [Array with: arr first with: arr second first with: arr second second] ifNil: [arr first] ]! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 21:52'! expressExpressionHolder ^ expressExpression! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 10:39'! expressExpressionList ^ expressExpression separatedBy: commaSep! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 1/23/2012 17:27'! expressNamespace ^ schema plus ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/7/2011 21:50'! expressionAssignment ^ (expAssignToken, expressExpressionHolder) / (stAssignToken, smalltalkExpressionHolder)! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 21:50'! expressionDecl ^ ((self separatorFor: '::'), smalltalkExpressionHolder) / ((self separatorFor: ':'), expressExpressionHolder )! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 15:29'! factor ^ (simpleFactor , (andLikeOperator , factor) optional) ==> [ :arr | arr second ifNotNil: [Array with: arr first with: arr second first with: arr second second] ifNil: [arr first] ]! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 13:41'! falseKW ^ (self keywordFor: 'false')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:47'! forKW ^ (self keywordFor: 'for')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/16/2011 22:23'! formalParameter ^ self varKW optional, identifiersList, (self separatorFor: ':'), parameterType ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/21/2011 14:30'! formalParametersDecl ^ (self separatorFor: '('), formalParametersList, (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/21/2011 14:30'! formalParametersList ^ formalParameter separatedBy: semicolon ! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/22/2011 10:43'! fromKW ^ (self keywordFor: 'from')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/15/2011 23:58'! function ^ beginFunction, actionBody, endFunction ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:38'! functionIdentifier ^ primaryElementName ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:38'! functionKW ^ (self keywordFor: 'function')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 12/16/2011 22:53'! globalRule ^ beginGlobalRule, actionBody, whereClause optional, endGlobalRule! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 1/9/2012 15:08'! identifier ^ null / selfIdentifier / identifierWithArgs ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 12:26'! identifierWithArgs ^ simpleIdentifier, optExpressExpressionArgs optional! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 1/12/2012 13:34'! identifiersList ^ identifier separatedBy: commaSep! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:52'! ifKW ^ (self keywordFor: 'if')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:17'! ifStatement ^ ifThenElseStatement / ifThenStatement ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 12:22'! ifThenElseStatement ^ self ifKW, expressExpression, thenKW, statement star, elseKW , statement star , self endIfKW, semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:14'! ifThenStatement ^ self ifKW, expressExpression, self thenKW, statement star, self endIfKW, semicolon ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 12:30'! incrementControl ^ simpleIdentifier, expAssignToken, expressExpression, toKW, expressExpression, byExpression optional ! ! !PPExpressGrammar methodsFor: 'aggregation' stamp: 'AlainPlantec 12/12/2011 21:29'! indexSpec ^ (self separatorFor: '['), expressExpression trim, (self separatorFor: ':'), expressExpression trim, (self separatorFor: ']') ! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/21/2011 14:34'! interfaceList ^ (self separatorFor: '('), unresolvedIdentifiersList, (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 12/16/2010 15:26'! interfaceSpec ^ useDeclaration star! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 23:37'! intervalExpression ^ (self separatorFor: '{'), term , intervalOperator, term , intervalOperator, term, (self separatorFor: '}')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 10:30'! intervalOperator ^ '<=' expressOperator / '<' expressOperator ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:16'! inverseAttribute ^ inverseAttributeDeclarationHead, inverseAttributeType, self forKW, oppositeAttribute, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:23'! inverseAttributeDeclarationHead ^ attributeIdentifier, (self separatorFor: ':')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:26'! inverseAttributeType ^ manyToOneOrToManyInverseAttributeType / oneToOneOrToManyInverseAttributeType! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:05'! inverseClause ^ inverseKW, inverseAttribute star! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:24'! inverseKW ^ (self keywordFor: 'inverse')! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 10:02'! keywordList ^ PPExpressKeywordParser keywordList ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:50'! localKW ^ (self keywordFor: 'local')! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/7/2012 12:00'! localSection ^ localKW, variableDeclaration star, endLocalKW, semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 1/9/2012 09:10'! manyToOneOrToManyInverseAttributeType ^ unresolvedIdentifier, indexSpec optional, self ofKW, oppositeEntity ! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 6/13/2012 11:46'! namedType ^ stringType / unresolvedIdentifier! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 6/6/2012 17:44'! namespace ^ expressNamespace ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 10:29'! notExpression ^ 'not' expressOperator , factor! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 10:37'! null ^ self keywordFor: '?' ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 10:49'! ofKW ^ (self keywordFor: 'of')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:15'! oneToOneOrToManyInverseAttributeType ^ oppositeEntity! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/13/2011 09:56'! oneof ^ oneofHead, (subTypeExpression separatedBy: commaSep), oneofTail! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:18'! oneofHead ^ self oneofKW, (self separatorFor: '(')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:24'! oneofKW ^ (self keywordFor: 'oneof')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/13/2011 09:55'! oneofTail ^ (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/25/2011 00:13'! operatorFor: aString ^(self asOperator: (aString asParser caseInsensitive)) trim! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/20/2010 21:32'! oppositeAttribute ^ unresolvedIdentifier! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/20/2010 21:32'! oppositeEntity ^ unresolvedIdentifier! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/16/2011 22:19'! opt ^ self optionalKW ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPantec 2/14/2012 17:37'! optAndOrPrivate ^ (opt , private optional) / (private , opt optional)! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 14:36'! optExpressExpressionArgs ^ (self separatorFor: '('), expressExpressionList optional, (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 10:40'! optionalKW ^ (self keywordFor: 'optional')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 10:29'! orLikeOperator ^ '+' expressOperator / '-' expressOperator / 'xor' expressOperator / 'or' expressOperator! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:45'! otherwiseKW ^ (self keywordFor: 'otherwise')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 11:06'! outputStatement ^ '|' asParser trim, expressExpression , '|' asParser trim, semicolon! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 5/25/2012 15:30'! parameterType ^ baseType, ((self separatorFor: ':'), name) optional! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 14:36'! parens ^ (self separatorFor: '(' ) , expressExpression , (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/16/2011 22:19'! pi ^ self piKW! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 13:48'! piKW ^ (self keywordFor: 'pi')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 22:38'! positionOrIntervalQualifier ^ (self separatorFor: '['), expressExpression , ((self separatorFor: ':'), expressExpression) optional, (self separatorFor: ']')! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 6/6/2012 11:35'! primaryElementName ^ name! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPantec 2/14/2012 17:28'! private ^ 'private' expressToken! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/20/2011 16:08'! procedure ^ beginProcedure, actionBody, endProcedure ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/23/2011 12:26'! procedureCallStatement ^ identifierWithArgs, semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:39'! procedureIdentifier ^ primaryElementName ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 13:39'! procedureKW ^ (self keywordFor: 'procedure')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/2/2011 14:01'! qualifiedFactor ^ unarySimpleFactor, qualifier star! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/2/2011 14:07'! qualifier ^ positionOrIntervalQualifier / suffixQualifierOrGroupRef ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/16/2011 22:19'! queryExpression ^ self queryKW, (self separatorFor: '('), queryVariable, (self separatorFor: '<*'), expressExpression, (self separatorFor: '|') , expressExpression, (self separatorFor: ')') ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 13:48'! queryKW ^ (self keywordFor: 'query')! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 14:13'! queryVariable ^ simpleIdentifier ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/12/2011 16:54'! redefinitionPrefix ^ (selfIdentifier, ((self separatorFor: '\'), unresolvedIdentifier) plus, (self separatorFor: '.')) ==> [:arr | arr second]! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/22/2011 10:42'! referenceKW ^ (self keywordFor: 'reference')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:46'! repeatKW ^ (self keywordFor: 'repeat')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 5/30/2012 00:03'! repeatStatement ^ self beginRepeatStatement , incrementControl optional , whileControl optional , untilControl optional , semicolon , statement star , self endRepeatStatement! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 13:45'! returnKW ^ (self keywordFor: 'return') ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:20'! returnStatement ^ self returnKW , (self separatorFor: '('), expressExpression , (self separatorFor: ')') , semicolon ! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 5/25/2012 17:22'! returnType ^ baseType, ((self separatorFor: ':'), name) optional! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 17:44'! rule ^ self globalRule! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 6/6/2012 11:16'! ruleKW ^ (self keywordFor: 'rule')! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 12/20/2010 10:42'! schema ^ beginSchema, interfaceSpec, schemaContent, endSchema! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 1/11/2012 11:19'! schemaContent ^ schemaElement star! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 5/8/2012 09:32'! schemaElement ^ expressElement / constantSection! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/22/2011 16:13'! schemaKW ^ (self keywordFor: 'schema')! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 11/22/2011 13:44'! selectKW ^ (self keywordFor: 'select')! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 1/11/2011 12:51'! selectType ^ selectTypeHeader, unresolvedIdentifiersList , selectTypeTail! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 12/16/2011 22:20'! selectTypeHeader ^ self selectKW, (self separatorFor: '(')! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 11/21/2011 14:43'! selectTypeTail ^ (self separatorFor: ')' )! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/16/2011 22:20'! selfIdentifier ^ self selfKW! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 13:45'! selfKW ^ self keywordFor: 'self' ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 15:13'! simpleFactor ^ notExpression / qualifiedFactor / intervalExpression ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 1/9/2012 15:02'! simpleIdentifier ^ super simpleIdentifier! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:51'! skipKW ^ (self keywordFor: 'skip')! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:20'! skipStatement ^ self skipKW, semicolon ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 6/6/2012 11:47'! slotName ^ name! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 6/6/2012 12:24'! smalltalkExpression | stp | stp := PPSmalltalkGrammar new. ^ stp pragma star, (stp keywordExpression / stp parens) ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 21:29'! smalltalkExpressionHolder ^ smalltalkExpression! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/7/2011 21:02'! stAssign ^ self operatorFor: '::=' ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/7/2011 21:14'! stAssignToken ^ self operatorFor: '::=' ! ! !PPExpressGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 6/6/2012 17:44'! start "Default start production." ^ self namespace end! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 11:04'! startSplitmark ^ '{*' asParser trim, 'splitmark' asParser trim, expressExpression, '*}' asParser trim! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 11:07'! statement ^ assignmentStatement / procedureCallStatement / aliasStatement / compoundStatement /escapeStatement / skipStatement / ifStatement / returnStatement / repeatStatement / caseStatement / emptyStatement / self startSplitmark / self stopSplitmark / self outputStatement ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 6/7/2012 11:04'! stopSplitmark ^ '{*' asParser trim, 'end_splitmark' asParser trim, '*}' asParser trim! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 6/13/2012 11:48'! stringType ^ (self keywordFor: 'string') , optExpressExpressionArgs optional! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 22:13'! subTypeExpression ^ subTypeTermOrBinaryExpression / subTypeExpressionParens! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 21:33'! subTypeExpressionParens ^ (self separatorFor: '('), subTypeExpression, (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/13/2011 09:36'! subTypeExpressionTerm ^ unresolvedIdentifier ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:18'! subTypeSpec ^ self subtypeKW , self ofKW, superTypeIdentifierList! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/23/2011 12:03'! subTypeTermOrBinaryExpression ^ (oneof / subTypeExpressionTerm), (andAndOr, subTypeExpression) optional! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:25'! subtypeKW ^ (self keywordFor: 'subtype') ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/22/2011 22:43'! suffixQualifierOrGroupRef ^ ((self separatorFor: '.') / (self separatorFor: '\')), simpleIdentifier! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/29/2011 21:40'! superTypeIdentifierList ^ (self separatorFor: '('), unresolvedIdentifiersList, (self separatorFor: ')') ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:18'! superTypeSpec ^ self ofKW, (self separatorFor: '('), subTypeExpression, (self separatorFor: ')')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:17'! supertypeKW ^ self keywordFor: 'supertype' ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/1/2011 13:59'! term ^ ('+' expressOperator / '-' expressOperator) optional, factor , expo optional! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/7/2012 12:19'! thenKW ^ (self keywordFor: 'then') ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/7/2012 12:19'! toKW ^ (self keywordFor: 'to') ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 13:41'! trueKW ^ (self keywordFor: 'true') ! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 6/6/2012 17:43'! type ^ definedType ! ! !PPExpressGrammar methodsFor: 'defined type' stamp: 'AlainPlantec 11/22/2011 10:36'! typeKW ^ self keywordFor: 'type'! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 12:22'! unarySimpleFactor ^ parens / aggregateInitializer / queryExpression / identifier / literal ! ! !PPExpressGrammar methodsFor: 'type' stamp: 'AlainPlantec 2/2/2012 09:50'! underlyingType ^ baseType / enumerationType / selectType! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/25/2011 13:16'! uniqueAttributeList ^ uniqueRuleHead optional, (attributeIdentifier separatedBy: commaSep), semicolon ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 6/6/2012 11:05'! uniqueClause ^ uniqueKW, (uniqueAttributeList star)! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 10:26'! uniqueKW ^ (self keywordFor: 'unique')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 21:53'! uniqueRuleHead ^ uniqueRuleIdent, (self separatorFor: ':')! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 21:51'! uniqueRuleIdent ^ simpleIdentifier! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 12/16/2011 22:22'! unknown ^ self unknownKW! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 13:49'! unknownKW ^ (self keywordFor: 'unknown') ! ! !PPExpressGrammar methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 11:32'! unresolvedIdentifier ^ name ! ! !PPExpressGrammar methodsFor: 'lex' stamp: 'AlainPlantec 11/22/2011 10:41'! unresolvedIdentifiersList ^ unresolvedIdentifier separatedBy: commaSep ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:11'! untilControl ^self untilKW, expressExpression ! ! !PPExpressGrammar methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2011 22:11'! untilKW ^ self keywordFor: 'until'! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 12/16/2011 22:17'! useDeclaration ^ useOrReference, self fromKW, unresolvedIdentifier, interfaceList optional, semicolon ! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 11/22/2011 10:42'! useKW ^ (self keywordFor: 'use')! ! !PPExpressGrammar methodsFor: 'schema definition' stamp: 'AlainPlantec 12/16/2011 22:19'! useOrReference ^ self useKW / self referenceKW! ! !PPExpressGrammar methodsFor: 'algorithms' stamp: 'AlainPlantec 11/22/2011 14:01'! varKW ^ self keywordFor: 'var'! ! !PPExpressGrammar methodsFor: 'variable' stamp: 'AlainPlantec 12/16/2011 20:17'! variableDeclaration ^ identifiersList, ((self separatorFor: ':' ) , variableType) optional, expressionAssignment optional, semicolon ! ! !PPExpressGrammar methodsFor: 'variable' stamp: 'AlainPlantec 5/28/2012 14:59'! variableType ^ baseType, ((self separatorFor: ':' ), name) optional! ! !PPExpressGrammar methodsFor: 'where rule' stamp: 'AlainPlantec 6/6/2012 11:05'! whereClause ^ whereKW, whereRuleList! ! !PPExpressGrammar methodsFor: 'where rule' stamp: 'AlainPlantec 11/22/2011 13:43'! whereKW ^ (self keywordFor: 'where')! ! !PPExpressGrammar methodsFor: 'where rule' stamp: 'AlainPlantec 12/8/2011 08:25'! whereRule ^ ((whereRuleIdent, expressionDecl) / ((self separatorFor: ('::')), smalltalkExpressionHolder) / ((self separatorFor: ('::')) not, expressExpressionHolder)) , semicolon! ! !PPExpressGrammar methodsFor: 'where rule' stamp: 'AlainPlantec 6/6/2012 11:48'! whereRuleIdent ^ slotName! ! !PPExpressGrammar methodsFor: 'where rule' stamp: 'AlainPlantec 1/12/2011 08:15'! whereRuleList ^ whereRule star! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 12/16/2011 22:23'! whileControl ^ self whileKW, expressExpression ! ! !PPExpressGrammar methodsFor: 'statement' stamp: 'AlainPlantec 11/22/2011 10:49'! whileKW ^ (self keywordFor: 'while')! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 13:13'! anySeparator ^ PPPredicateObjectParser anyOf: '();,=#.*$'! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:29'! asIdentifier: aParser ^aParser stepIdentifier! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:23'! asKeyword: aParser ^aParser stepKeyword! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:27'! asLiteral: aParser ^aParser stepLiteral! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 23:24'! asSeparator: aParser ^aParser stepSeparator! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 16:13'! attributeName ^ simpleIdentifier , $: asParser trim! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/24/2011 16:38'! boolean ^ $. asParser, (PPPredicateObjectParser anyOf: 'tTfF'), $. asParser! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:40'! charactersInLine ^ inputCharacter plus! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:49'! comment "traditional -> /*" ^ traditionalComment ! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 14:06'! commentTail ^ ('*' asParser , commentTailStar ) / (notStar , commentTail)! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:41'! commentTailStar ^ ('/' asParser ) / ('*' asParser , commentTailStar ) / (notStarNotSlash , commentTail )! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 12/29/2011 12:50'! dataEntities ^ dataEntity star ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:44'! dataEntity ^ dataEntityHead, entityInstanceRHS, semicolon! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:43'! dataEntityHead ^ instLabel, (self separatorFor: '=')! ! !PPStepGrammar methodsFor: 'keyword' stamp: 'AlainPlantec 11/24/2011 11:37'! dataKW ^ self keywordFor: 'data' ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 12/29/2011 12:51'! dataSection ^ dataSectionHead, dataEntities, dataSectionTail ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 10:12'! dataSectionHead ^ dataKW, semicolon ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 13:41'! dataSectionTail ^ endSecKW, semicolon! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 09:29'! embeddedList ^ embeddedListHead, embeddedListTail ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 11:59'! embeddedListHead ^ self separatorFor: '(' ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 1/1/2014 22:48'! embeddedListTail ^ (parameterValue separatedBy: commaSep) optional, (self separatorFor: ')')! ! !PPStepGrammar methodsFor: 'keyword' stamp: 'AlainPlantec 11/24/2011 11:37'! endSecKW ^ self keywordFor: 'endsec' ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:49'! entityInstanceRHS ^ subsuperRecord / simpleEntityInstance ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 16:17'! entityName ^ simpleIdentifier! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/29/2011 11:22'! enum ^ $. asParser, simpleIdentifier, $. asParser! ! !PPStepGrammar methodsFor: 'root' stamp: 'AlainPlantec 11/29/2011 11:37'! exchangeFile ^ exchangeFileStart, semicolon, headerSection, dataSection, exchangeFileEnd, semicolon! ! !PPStepGrammar methodsFor: 'root' stamp: 'AlainPlantec 11/29/2011 11:37'! exchangeFileEnd ^ 'END-ISO-10303-21' asParser trim! ! !PPStepGrammar methodsFor: 'root' stamp: 'AlainPlantec 11/29/2011 11:36'! exchangeFileStart ^ 'ISO-10303-21' asParser trim! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:15'! headerEntity ^ headerEntityHead, headerEntityTail! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:14'! headerEntityHead ^ entityName! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:15'! headerEntityTail ^ (parameter separatedBy: commaSep) optional , semicolon ! ! !PPStepGrammar methodsFor: 'keyword' stamp: 'AlainPlantec 11/24/2011 11:37'! headerKW ^ self keywordFor: 'header' ! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:11'! headerSection ^ headerSectionHead, headerEntity star, headerSectionTail! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:10'! headerSectionHead ^ headerKW, semicolon! ! !PPStepGrammar methodsFor: 'header' stamp: 'AlainPlantec 11/28/2011 14:10'! headerSectionTail ^ endSecKW, semicolon! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:57'! input ^ inputElements ! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:40'! inputCharacter ^(lineTerminator not) , (#any asParser) ==> #second! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 13:15'! inputElement ^ comment / exchangeFileStart / exchangeFileEnd / validKeyword / simpleIdentifier / whiteSpace / literal / anySeparator! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:58'! inputElements ^ inputElement star! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/29/2011 11:23'! instLabel ^((self separatorFor: '#' asParser), integer) ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/24/2011 16:41'! instRef ^ instLabel! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 11/25/2011 13:25'! keywordList ^ #('header' 'data' 'endsec')! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:34'! lineTerminator ^ (Character lf asParser) / (Character cr asParser , (Character lf asParser ) optional )! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:42'! notStar ^ lineTerminator / ('*' asParser not , inputCharacter)! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:42'! notStarNotSlash ^ lineTerminator / ((PPPredicateObjectParser anyOf: '*/') not , inputCharacter )! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/24/2011 16:28'! null ^ $$ asParser! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 16:14'! parameter ^ (attributeName optional , parameterValue, $, asParser trim optional, typeAnnotation optional) ==> [:arr | arr second]! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 15:57'! parameterList ^ parameter plus! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 15:37'! parameterValue ^ null / redefined / literal / enum / binary / instRef / embeddedList / typedValue ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/24/2011 22:05'! redefined ^ self separatorFor: '*'! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 09:30'! simpleEntityInstance ^ simpleEntityInstanceHead, simpleEntityInstanceTail ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 16:17'! simpleEntityInstanceHead ^ entityName, (self separatorFor: '(')! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 15:55'! simpleEntityInstanceTail ^ parameterList optional, (self separatorFor: ')')! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 09:28'! simpleRecord ^ simpleRecordHead, simpleRecordTail ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 08:30'! simpleRecordHead ^ entityName, (self separatorFor: '(')! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 15:55'! simpleRecordTail ^ parameterList optional, (self separatorFor: ')')! ! !PPStepGrammar methodsFor: 'accessing' stamp: 'AlainPlantec 1/24/2012 22:19'! start ^exchangeFile end! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:32'! sub ^ (Character value: 26) asParser ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 13:20'! subsuperRecord ^ subsuperRecordHead, subsuperRecordTail ! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:45'! subsuperRecordHead ^ self separatorFor: '('! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/28/2011 12:41'! subsuperRecordTail ^ simpleRecord star , (self separatorFor: ')')! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:41'! traditionalComment ^ '/*' asParser , commentTail! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 6/8/2012 15:44'! typeAnnotation ^ $< asParser trim, ($> asParser negate) star, $> asParser trim! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:43'! typedValue ^ typedValueHead , (self separatorFor: '('), parameter, (self separatorFor: ')')! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/27/2011 13:43'! typedValueHead ^ simpleIdentifier! ! !PPStepGrammar methodsFor: 'data' stamp: 'AlainPlantec 11/24/2011 16:38'! unknown ^ $. asParser, (PPPredicateObjectParser anyOf: 'uU'), $. asParser! ! !PPStepGrammar methodsFor: 'input' stamp: 'AlainPlantec 11/29/2011 11:34'! whiteSpace ^ (Character space asParser ) / (Character tab asParser ) / ((Character value: 12) asParser ) / lineTerminator ! ! !PPStepLex class methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 13:33'! ignoredNames ^ super ignoredNames, (Array with: #keywordParserIndex)! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:11'! allowedIdentifierChar ^ #word asParser / $_ asParser! ! !PPStepLex methodsFor: 'data' stamp: 'AlainPlantec 1/8/2012 14:50'! binary ^ $% asParser, hexDigits! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:46'! binaryExponent ^ binaryExponentIndicator , signedInteger! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:46'! binaryExponentIndicator ^ PPPredicateObjectParser anyOf: 'pP'! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:11'! commaSep ^ self separatorFor: ','! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 5/29/2012 23:44'! decimalFloatingPointLiteral |dot| dot := $. asParser. ^ sign optional, (( ( (dot , digits) / (digits , dot , digits optional)) , exponentPart optional , floatTypeSuffix optional ) / (digits , ( (exponentPart , floatTypeSuffix optional) / (exponentPart optional , floatTypeSuffix) )))! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:12'! digits "digit is already defined, no need to redefine it" ^#digit asParser plus! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:40'! exponentIndicator ^ PPPredicateObjectParser anyOf: 'eE'! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:40'! exponentPart ^ exponentIndicator , signedInteger! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:44'! floatTypeSuffix ^ PPPredicateObjectParser anyOf: 'fFdD'! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:44'! floatingPointLiteral ^ hexadecimalFloatingPointLiteral / decimalFloatingPointLiteral! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:45'! hexDigit ^#hex asParser! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:45'! hexDigits ^hexDigit plus! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:45'! hexNumeral ^$0 asParser, (PPPredicateObjectParser anyOf: 'xX' ), hexDigits! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:45'! hexSignificand |dot| dot := $. asParser. ^ (hexNumeral , dot optional) / ($0 asParser , (PPPredicateObjectParser anyOf: 'xX') , hexDigits optional , dot , hexDigits )! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:44'! hexadecimalFloatingPointLiteral ^ hexSignificand , binaryExponent , floatTypeSuffix optional! ! !PPStepLex methodsFor: 'initialization' stamp: 'AlainPlantec 11/24/2011 13:32'! initialize super initialize. self initializeKeywords. ! ! !PPStepLex methodsFor: 'initialization' stamp: 'AlainPlantec 1/9/2012 14:59'! initializeKeywords | values | keywordParserIndex := Dictionary new. values := self keywordList. values do: [:eachKeyword | keywordParserIndex at: eachKeyword put: (PPUnresolvedParser named: ('keyword', eachKeyword first asString , eachKeyword allButFirst)) ]. keywordParserIndex keysAndValuesDo: [:key :value | (keywordParserIndex at: key) def: (key asParser caseInsensitive, (self allowedIdentifierChar not))]! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 12/12/2011 21:51'! integer ^ digits flatten! ! !PPStepLex methodsFor: 'accessing' stamp: 'AlainPlantec 1/9/2012 15:53'! keywordFor: aString ^(self asKeyword: (aString asParser caseInsensitive, (self allowedIdentifierChar not))) ! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:11'! letter ^ (#letter asParser / $_ asParser) ! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:15'! letterOrDigit ^ letter / (#digit asParser) ! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 1/8/2012 14:51'! literal ^ real / signedInteger / string / logical / binary! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/25/2011 21:44'! logical ^ boolean / unknown! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 12/7/2011 11:28'! name ^ self asIdentifier: ((validKeyword / #digit asParser) not, allowedIdentifierChar plus, allowedIdentifierChar not)! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/25/2011 22:47'! real ^ self asLiteral: (floatingPointLiteral)! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:12'! semicolon ^ self separatorFor: ';' ! ! !PPStepLex methodsFor: 'accessing' stamp: 'AlainPlantec 11/25/2011 00:12'! separatorFor: aString ^ (self asSeparator: (aString asParser)) trim! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:42'! sign ^PPPredicateObjectParser anyOf: '-+'! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 12/12/2011 21:51'! signedInteger ^ self asLiteral: (sign optional , integer) flatten ! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/25/2011 13:10'! simpleIdentifier ^ self asIdentifier: ((validKeyword / #digit asParser) not, allowedIdentifierChar plus, allowedIdentifierChar not)! ! !PPStepLex methodsFor: 'lex' stamp: 'AlainPlantec 11/23/2011 17:12'! string ^ ($' asParser , ('''''' asParser / $' asParser negate) star token , $' asParser ==> #second) trim! ! !PPStepLex methodsFor: 'accessing' stamp: 'AlainPlantec 11/24/2011 13:07'! validKeyword | keywordParsers | keywordParsers := keywordParserIndex keysSortedSafely collect: [:eachKey | keywordParserIndex at: eachKey ]. ^ self asKeyword: ( (keywordParsers reduce: [ :a :b | a / b ]) )! ! !PPStepToken methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2011 14:38'! comments ^ comments! ! !PPStepToken methodsFor: 'accessing' stamp: 'AlainPlantec 1/15/2011 14:57'! comments: aString comments := aString! ! !PPStepToken methodsFor: 'compatiblity' stamp: 'AlainPlantec 12/15/2010 14:38'! length ^ self size! ! !PPStepToken methodsFor: 'accessing' stamp: 'AlainPlantec 12/7/2011 16:54'! parent ^ parent! ! !PPStepToken methodsFor: 'accessing' stamp: 'AlainPlantec 12/1/2011 13:31'! parent: aToken parent := aToken! ! !PPExpressIdentifierParser methodsFor: 'parsing' stamp: 'AlainPlantec 5/8/2012 09:54'! failureTokenFrom: token ^ PPFailure message: 'Identifier expected' at: token position! ! !PPExpressKeywordParser class methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 12:17'! keywordList ^ #('abstract' 'constant' 'derive' 'end_constant' 'entity' 'end_entity' 'end_local' 'end_rule' 'end_schema' 'end_type' 'enumeration' 'fixed' 'for' 'from' 'inverse' 'local' 'of' 'optional' 'rule' 'schema' 'select' 'subtype' 'supertype' 'type' 'end_alias' 'use' 'reference' 'alias' 'skip' 'escape' 'repeat' 'if' 'then' 'else' 'end_if' 'return' 'end_repeat' 'by' 'while' 'until' 'case' 'end_case' 'otherwise' 'procedure' 'function' 'end_procedure' 'end_function' 'unique' 'where' 'end' 'begin' 'true' 'false' 'unknown' 'var' 'self' 'query' 'andor' 'and' 'oneof' 'to' '?') ! ! !PPExpressTokenParser methodsFor: 'parsing' stamp: 'AlainPantec 2/7/2012 10:32'! parseCommentsOn: aStream | start peekTwice next | self eatWhiteSeparatorsOn: aStream. ((next := aStream peek) = $( ) ifTrue: [ peekTwice := self peekTwiceFrom: aStream. (peekTwice second = $*) ifFalse: [^ false] ifTrue: [aStream next. start := aStream position. self parseEmbeddedCommentsOn: aStream. comments := comments copyWith: (start to: aStream position) ]] ifFalse: [next = $- ifTrue: [ peekTwice := self peekTwiceFrom: aStream. (peekTwice second = $-) ifTrue: [ aStream next. start := aStream position. self parseLineCommentsOn: aStream. comments := comments copyWith: (start to: aStream position - 1) ] ifFalse: [^ false]] ifFalse: [^ false]]. ^ true ! ! !PPExpressTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 11/24/2011 23:01'! parseEmbeddedCommentsOn: aStream | level prevChar currentChar | "Read embedded comments (* ... *) " level := 1. "because we are already inside a comment" currentChar := aStream next. [ aStream atEnd ] whileFalse: [ prevChar := currentChar. currentChar := aStream next. ((prevChar = $() and: [ currentChar = $* ]) ifTrue: [ level := level + 1 ] ifFalse: [ (prevChar = $* and: [ currentChar = $) ]) ifTrue: [ level := level - 1. level = 0 ifTrue: [ ^ self ] ] ] ]! ! !PPExpressTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 11/24/2011 22:58'! parseLineCommentsOn: aStream | level prevChar currentChar | "Read line comments -- " currentChar := aStream next. [ aStream atEnd ] whileFalse: [ ((currentChar = Character cr) or: [(currentChar = Character lf)]) ifTrue: [ ^ self ]. currentChar := aStream next]! ! !PPStepFormatTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 11/24/2011 23:53'! parseCommentsOn: aStream | start peekTwice next | self eatWhiteSeparatorsOn: aStream. ((next := aStream peek) = $/) ifTrue: [ peekTwice := self peekTwiceFrom: aStream. (peekTwice second = $*) ifFalse: [^ false] ifTrue: [aStream next. start := aStream position. self parseEmbeddedCommentsOn: aStream. comments := comments copyWith: (start to: aStream position). ^ true]]. ^ false ! ! !PPStepFormatTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 11/24/2011 23:00'! parseEmbeddedCommentsOn: aStream | level prevChar currentChar | "Read embedded comments (* ... *) " level := 1. "because we are already inside a comment" currentChar := aStream next. [ aStream atEnd ] whileFalse: [ prevChar := currentChar. currentChar := aStream next. ((prevChar = $/) and: [ currentChar = $* ]) ifTrue: [ level := level + 1 ] ifFalse: [ (prevChar = $* and: [ currentChar = $/ ]) ifTrue: [ level := level - 1. level = 0 ifTrue: [ ^ self ] ] ] ]! ! !PPStepTokenParser methodsFor: 'defaults' stamp: 'AlainPlantec 11/23/2011 17:19'! defaultTokenClass ^ PPStepToken! ! !PPStepTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 11/25/2011 08:56'! eatWhiteSeparatorsOn: aStream [ aStream atEnd not and: [ aStream peek isSeparator ] ] whileTrue: [ | c | c := aStream next. (c = Character cr and: [aStream peek = Character lf]) ifTrue: [aStream next]]. ! ! !PPStepTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 5/8/2012 09:53'! failureTokenFrom: token ^ token! ! !PPStepTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 5/8/2012 10:05'! isTokenValid: aToken ^ aToken isPetitFailure not! ! !PPStepTokenParser methodsFor: 'parsing' stamp: 'AlainPlantec 5/8/2012 10:06'! parseOn: aStream | start token commentsContents | comments := #(). [ self parseCommentsOn: aStream ] whileTrue: [ ]. start := aStream position. token := super parseOn: aStream. (self isTokenValid: token) ifFalse: [ aStream position: start. ^ self failureTokenFrom: token ]. comments ifNotEmpty: [commentsContents := String streamContents: [:strm | comments do: [:c | strm nextPutAll: (aStream contents copyFrom: c first to: c last)]]]. ^ token comments: commentsContents! ! !PPStepTokenParser methodsFor: 'private' stamp: 'AlainPlantec 11/22/2011 08:47'! peekTwiceFrom: aStream "Answer what would be returned if the message next were sent to aStream. If the aStream is at the end, answer nil." | array | aStream atEnd ifTrue: [^Array with: nil with: nil]. array := Array with: (aStream next) with: (aStream peek). aStream position: aStream position - 1. ^array! ! !PPExpressGrammarTests methodsFor: 'accessing' stamp: 'AlainPlantec 12/15/2010 19:30'! parserClass ^ PPExpressGrammar! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:47'! testAggregationType1 self parse: 'set of string' rule: #aggregationType! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 5/8/2012 10:20'! testAggregationType2 self parse: 'set [0 : 1 ] of string' rule: #aggregationType! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:47'! testAggregationType3 self parse: 'set [0 : max ] of list of string' rule: #aggregationType! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:48'! testAggregationType4 self parse: 'set [0 : max ] of list of array[1:3] of string' rule: #aggregationType! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:03'! testAlias1 self parse: 'alias x for B.C; end_alias;' rule: #aliasStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:02'! testAlias2 self parse: 'alias x for B.C; x := 3; y := x; end_alias;' rule: #aliasStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:47'! testAssignable1 self parse: 'x' rule: #assignable! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:47'! testAssignable2 self parse: 'x[6]' rule: #assignable! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:47'! testAssignable3 self parse: 'x[a:b]' rule: #assignable! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:50'! testAssignment1 self parse: 'x := 3;' rule: #assignmentStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:50'! testAssignment2 self parse: 'x.y := s;' rule: #assignmentStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 17:50'! testAssignment3 self parse: 'x.y[5].z\X.t := s;' rule: #assignmentStatement! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:16'! testAttributeIdentifier1 self parse: 'aaaa' rule: #attributeIdentifier! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:16'! testAttributeIdentifier2 self parse: 'self\AAA.aaaa' rule: #attributeIdentifier! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/21/2011 12:22'! testBaseType1 self parse: 'Natural' rule: #baseType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/21/2011 12:22'! testBaseType2 self parse: 'LIST of Natural' rule: #baseType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/21/2011 12:23'! testBaseType3 self parse: 'LIST [1:10] of Natural' rule: #baseType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/21/2011 12:20'! testBeginDefinedType1 self parse: 'type Natural =' rule: #beginDefinedType! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:52'! testCase1 self parse: 'case x of end_case;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 09:22'! testCase2 self parse: 'case x of 1,56 : doit; end_case;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 09:22'! testCase3 self parse: 'case x of 1,56 : toto; 5 : faire(3); end_case;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:53'! testCase4 self parse: 'case x of otherwise : skip; end_case;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/21/2011 09:08'! testCase5 self parse: 'case x of ''toto'' : toto(4); otherwise : skip; end_case;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'comments' stamp: 'AlainPlantec 11/21/2011 22:36'! testComment1 self parse: ' --- line comment here schema M; --- line comment here --- line comment here end_schema;'! ! !PPExpressGrammarTests methodsFor: 'comments' stamp: 'AlainPlantec 11/21/2011 22:36'! testComment2 self parse: ' --- line comment here (* embedded (* comments (* here *) *) *) schema M; --- line comment here --- line comment here end_schema;'! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:09'! testCompound1 self parse: 'begin end;' rule: #compoundStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:09'! testCompound2 self parse: 'begin x := t; end;' rule: #compoundStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:09'! testCompound3 self parse: 'begin x := t; x := p(3); end;' rule: #compoundStatement! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/1/2011 09:28'! testConstE self parse: 'x := const_e;' rule: #assignmentStatement ! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/16/2010 17:47'! testConstantDeclaration1 self parse: 'Max : Integer := 100;' rule: #constantDeclaration! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 11/21/2011 09:18'! testConstantDeclaration3 self parse: 'b : boolean := false;' rule: #constantDeclaration! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/16/2010 18:00'! testConstantSection1 self parse: ' CONSTANT END_CONSTANT;' rule: #constantSection! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/16/2010 18:00'! testConstantSection2 self parse: ' CONSTANT Max : Integer := 100; END_CONSTANT;' rule: #constantSection! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/16/2010 18:00'! testConstantSection3 self parse: ' CONSTANT Max_Tasks_For_A_Resource : Natural := 10; Max_User_Defined_Task_Parameters : Natural := 10; Max_Offsets : Natural := 10; Max_Tasks : Natural := 10; Max_Scheduling_Period : Natural := 10; Max_Sections : Natural := 10; Max_Transitions : Natural := 10; END_CONSTANT;' rule: #constantSection! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/16/2010 21:29'! testConstantSection4 self parse: ' CONSTANT Max_Tasks_For_A_Resource := 10; Max_User_Defined_Task_Parameters := 10; Max_Offsets := 10; Max_Tasks := 10; Max_Scheduling_Period := 10; Max_Sections := 10; Max_Transitions := 10; END_CONSTANT;' rule: #constantSection! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/16/2010 16:50'! testDefinedType1 self parse: 'type Natural = Integer; end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/16/2010 16:54'! testDefinedType4 self parse: ' type BaseDomain = select (Collection, Literal, EnumerationType, DefinedType); end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/16/2010 16:58'! testDefinedType5 self parse: ' type Direction = enumeration of (left, up, right, down); end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/7/2011 21:44'! testDefinedType6 self parse: ' type NaturalList = LIST of Natural; where positive : self > t.x; positive2 : self > 0; end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/7/2011 21:38'! testDefinedType7 self parse: ' type NaturalList = LIST of Natural; where self > 0; end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/7/2011 21:47'! testDefinedType8 self parse: ' type NaturalList = LIST of Natural; where ::self > 0; self > 0; end_type;' rule: #definedType! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:31'! testDeriveClause1 self parse: 'derive' rule: #deriveClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 10:34'! testDeriveClause3 self parse: 'derive ads_code : STRING := enumeration_ads_code ( SELF );' rule: #deriveClause! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:11'! testEmptyStatement2 self parse: 'p(3);' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 22:50'! testEntity1 self parse: '(* this is my first *) entity myfirstentity; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:46'! testEntity10 self parse: 'ENTITY car; mnfg_no : identification_no; registration_no : identification_no; model : car_model; destruction_date : date; production_date : date; production_year : INTEGER; owned_by : owner; serial_number : STRING; UNIQUE unique_serial : serial_number; WHERE jan_prod : ( production_year = production_date.year ) XOR ( ( production_date.month = 1 ) AND ( production_year = production_date.year - 1 ) ); END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:46'! testEntity11 self parse: 'ENTITY destroyed_car SUBTYPE OF ( car ); destroyed_on : date; WHERE dates_ok : days_between ( production_date, destroyed_on ) >= 0; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:47'! testEntity12 self parse: 'ENTITY car_model; model_name : name; fuel_consumption : REAL; made_by : manufacturer; UNIQUE unique_model_name : model_name; WHERE authorized_consumption : { 4.0 <= fuel_consumption <= 25.0 }; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:47'! testEntity13 self parse: 'ENTITY group SUBTYPE OF ( owner ); members : SET [ 1 : ? ] OF person; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:47'! testEntity14 self parse: 'ENTITY owner ABSTRACT SUPERTYPE OF ( ONEOF ( named_owner, group ) ); END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:48'! testEntity15 self parse: 'ENTITY named_owner ABSTRACT SUPERTYPE OF ( ONEOF ( manufacturer, dealership, person ) ) SUBTYPE OF ( owner ); called : name; UNIQUE name_must_be_unique : called; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:49'! testEntity16 self parse: 'ENTITY transfer; transferred_car : car; transfer_date : date; transferred_by : owner; transferred_to : owner; INVERSE must_be_in_history : history FOR transfers; WHERE wr1 : NOT ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_to ) ); wr2 : ( NOT ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_by ) ) ) XOR ( ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_by ) ) AND ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_to ) ) ); wr3 : ( NOT ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_by ) ) ) XOR ( ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_by ) ) AND ( ( ''CARREGISTRATION.PERSON'' IN TYPEOF ( transferred_to ) ) XOR ( ''CARREGISTRATION.GROUP'' IN TYPEOF ( transferred_to ) ) ) ); not_destroyed : ( NOT ( ''CARREGISTRATION.DESTROYED_CAR'' IN TYPEOF ( transferred_car ) ) XOR ( ( ''CARREGISTRATION.DESTROYED_CAR'' IN TYPEOF ( transferred_car ) ) AND ( days_between ( transfer_date, transferred_car.destruction_date ) > 0 ) ) ); END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:50'! testEntity17 self parse: ' ENTITY transfer; transferred_by, transferred_to : owner; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 19:33'! testEntity2 self parse: 'entity my_first_entity abstract supertype; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 19:51'! testEntity3 self parse: 'entity my_second_entity abstract supertype subtype of ( my_first_entity ); end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 21:06'! testEntity4 self parse: 'entity my_second_entity abstract supertype subtype of (my_first_entity) ; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 21:44'! testEntity5 self parse: 'entity my_second_entity supertype of ( A ); end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 21:44'! testEntity6 self parse: 'entity my_second_entity supertype of ( oneof (A, B) ); end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 21:50'! testEntity7 self parse: 'entity my_second_entity supertype of ( A andor (oneof(B,C) )); end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:45'! testEntity8 self parse: 'ENTITY date; day : INTEGER; month : INTEGER; year : INTEGER; WHERE days_ok : { 1 <= day <= 31 }; year_ok : year > 0; month : valid_date ( SELF ); END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/8/2011 10:45'! testEntity9 self parse: 'ENTITY history; car : car; transfers : LIST [ 0 : ? ] OF UNIQUE transfer; UNIQUE unique_car : car; END_ENTITY;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 22:41'! testEntityWithAttribute1 self parse: 'entity my_entity; s : string; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/15/2010 22:41'! testEntityWithAttribute2 self parse: 'entity my_first_entity abstract supertype; s : string; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 19:51'! testEntityWithAttribute3 self parse: 'entity my_second_entity abstract supertype subtype of ( my_first_entity) ; arr : array of integer; end_entity ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 19:52'! testEntityWithAttribute4 self parse: ' entity my_second_entity abstract supertype subtype of ( my_first_entity); arr : optional array of integer; end_entity ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 19:52'! testEntityWithAttribute5 self parse: ' entity my_second_entity abstract supertype subtype of ( my_first_entity ) ; s : string; i : integer; end_entity ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 13:06'! testEntityWithAttribute6 self parse: ' entity my_second_ent; end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:54'! testEntityWithClause3 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; WHERE good_x : true; END_ENTITY ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:28'! testEntityWithClause5 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; INVERSE contents : list of Child for parent; END_ENTITY ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:29'! testEntityWithClause6 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; INVERSE contents : list of Child for parent; parent : Container for children; END_ENTITY ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 13:13'! testEntityWithDerivedAttribute1 self parse: ' entity my_second_entity; derive ads_code : STRING := enumeration_ads_code ( SELF ); end_entity ;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 13:12'! testEntityWithEmptyClauses self parse: ' entity withClause; derive inverse where end_entity;' rule: #entity! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/15/2010 21:45'! testEnumerationType1 self parse: 'enumeration of (X)' rule: #enumerationType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/15/2010 21:45'! testEnumerationType2 self parse: 'enumeration of (X, Y)' rule: #enumerationType! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:09'! testExplicitAttribute1 self parse: 's : string;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:32'! testExplicitAttribute2 self parse: 'self\AAAA.s : string;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:38'! testExplicitAttribute3 self parse: 'self\AAAA.s : array [1:2] of string;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/15/2010 22:40'! testExplicitAttribute4 self parse: 'i : optional integer;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/20/2011 23:06'! testExplicitAttribute6 self parse: 'b : boolean;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/9/2011 08:08'! testExplicitAttribute7 self parse: 'a,b,c : boolean;' rule: #explicitAttribute! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 11:31'! testExpression0 | p | p := self parse:'?' rule: #expressExpression. p := self parse:'(?)' rule: #expressExpression. p := self parse:'[?]' rule: #expressExpression. p := self parse:'a[?:?]' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 16:51'! testExpression1 | p | p := self parse:'1 < 2' rule: #expressExpression. self assert: p size = 3. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 10:00'! testExpression10 self parse:'ada_unbounded_string_type ( ''r'')' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 23:45'! testExpression11 self parse:'{ x <= self < t}' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 23:45'! testExpression12 self parse:'{ (x * 3) <= self < t}' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/21/2011 23:45'! testExpression13 self parse:'{ (x * 3) <= (y + 5) < t}' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 16:51'! testExpression2 | p | p := self parse:'(1 < 2)' rule: #expressExpression. self assert: p size = 3. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/23/2011 16:50'! testExpression3 | p | p := self parse:'2**5 div 4' rule: #expressExpression. self assert: p size = 3. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/28/2011 18:49'! testExpression4 | p | p := self parse:'x > 4' rule: #expressExpression. self assert: p size = 3. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 09:27'! testExpression5 self parse:'x > y' rule: #expressExpression. self parse:'x >= y' rule: #expressExpression. self parse:'x <= y' rule: #expressExpression. self parse:'x < y' rule: #expressExpression. self parse:'x = y' rule: #expressExpression. self parse:'x :=: y' rule: #expressExpression. self parse:'x <> y' rule: #expressExpression. self parse:'x :<>: y' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 10:20'! testExpression6 self parse:'(x > y) and (z > o)' rule: #expressExpression. self parse:'(x >= y) or (z > o)' rule: #expressExpression. self parse:'true xor (false)' rule: #expressExpression. self parse:'5 - 4' rule: #expressExpression. self parse:'5 + 4' rule: #expressExpression. self parse:'1 + 1 + 1 * 4' rule: #expressExpression. self parse:'x mod t' rule: #expressExpression. self parse:'x / t' rule: #expressExpression. self parse:'x || t' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 12/7/2011 15:31'! testExpression7 self parse:'-6' rule: #expressExpression. self parse:'+(-6)' rule: #expressExpression. self parse:'1 ++(-6)' rule: #expressExpression. self parse:'-1 + -6' rule: #expressExpression. self parse:'-1 + 2**-6' rule: #expressExpression. self parse:'5 div -1 * 5 + 2**-6' rule: #expressExpression. self parse:'x div y * z + k**-l' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 10:22'! testExpression8 self parse:'[]' rule: #expressExpression. self parse:'[1]' rule: #expressExpression. self parse:'[1,2]' rule: #expressExpression. self parse:'[?]' rule: #expressExpression. self parse:'[?,?]' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 10:30'! testExpression9 self parse:'a.b' rule: #expressExpression. self parse:'a.b.c' rule: #expressExpression. self parse:'a[5]' rule: #expressExpression. self parse:'a[5][6]' rule: #expressExpression. self parse:'a[x.s][4*6]' rule: #expressExpression. self parse:'a[x[5]:y\z]' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/22/2011 23:30'! testFormalParametersDecl self parse:'(the_bag : BAG OF GENERIC : intype)' rule: #formalParametersDecl. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:04'! testFunction1 self parse:'function F : string; end_function;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:04'! testFunction2 self parse:'function F (i : real) : string; end_function;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:05'! testFunction3 self parse:'function F (i,j : integer) : string; end_function;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:05'! testFunction4 self parse:'function F (i,j : integer; k : real) : string; end_function;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 21:18'! testFunction5 self parse:'function F (i,j : integer; k : list of integer) : string; return (''''); ; end_function;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/21/2011 18:24'! testFunction6 self parse:'FUNCTION object_from_name ( objects_list : SET OF generic_object; name : STRING ) : generic_object; RETURN ( ? ); END_FUNCTION;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/21/2011 18:26'! testFunction7 self parse:'FUNCTION object_from_name ( objects_list : SET OF generic_object; name : STRING ) : generic_object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/22/2011 23:34'! testFunction8 self parse:'FUNCTION f( s,v,u : SET OF X : v; name : STRING ) : generic : v; RETURN ( ? ); END_FUNCTION;' rule: #function. ! ! !PPExpressGrammarTests methodsFor: 'global rule' stamp: 'AlainPlantec 11/20/2011 14:42'! testGlobalRule3 self parse:' RULE all_tasks_are_periodic FOR ( generic_task ); local nb : integer := sizeof(generic_task); end_local; WHERE R1 : sizeof ( query ( t <* generic_task | not (''PERIODIC_TASK'' in typeof(t) ) ) ) = 0; END_RULE;' rule: #globalRule ! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/22/2011 22:44'! testGroupRef | p | p := self parse: '\Generic_Object' rule: #suffixQualifierOrGroupRef.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/20/2011 13:46'! testIdentifier1 self parse:'self' rule: #identifier ! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/20/2011 13:47'! testIdentifier2 self parse:'?' rule: #identifier ! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/20/2011 13:48'! testIdentifier3 self parse:'a(b)' rule: #identifier ! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/20/2011 13:48'! testIdentifier4 self parse:'a(b,c)' rule: #identifier ! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/20/2011 13:48'! testIdentifier5 self parse:'xxx' rule: #identifier ! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:19'! testIf1 self parse: 'if true then end_if;' rule: #ifStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:20'! testIf2 self parse: 'if true then else end_if;' rule: #ifStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:22'! testIf3 self parse: 'if (x > 1) and (x < 10) then y := 4; else e := 5; end_if;' rule: #ifStatement! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:28'! testIndexSpec1 self parse: '[ 0 : 10]' rule: #indexSpec! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:41'! testIndexSpec2 self parse: '[ 0 : ? ]' rule: #indexSpec! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:41'! testIndexSpec3 self parse: '[ ? : ? ]' rule: #indexSpec! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 12/15/2010 21:41'! testIndexSpec4 self parse: '[ min : max ]' rule: #indexSpec! ! !PPExpressGrammarTests methodsFor: 'aggregation' stamp: 'AlainPlantec 11/22/2011 15:41'! testIndexSpec5 self parse: '[ self.min.value : self.max.value ]' rule: #indexSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:19'! testInverseAttribute1 self parse: 'owner : Container for contents;' rule: #inverseAttribute! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:22'! testInverseAttribute2 self parse: 'contents : set of Child for owner;' rule: #inverseAttribute! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/22/2011 23:22'! testLocalSection1 self parse:' local x, y : SET OF representation_item; end_local;' rule: #localSection. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/22/2011 23:37'! testLocalSection2 self parse:' local x, y : SET OF representation_item : X; end_local;' rule: #localSection. ! ! !PPExpressGrammarTests methodsFor: 'expression' stamp: 'AlainPlantec 11/20/2011 14:24'! testNotExpression self parse:'not a.b' rule: #expressExpression. self parse:'not true' rule: #expressExpression. self parse:'not a[5]' rule: #expressExpression. self parse:'not a[5][6]' rule: #expressExpression. self parse:'not a[x.s][4*6]' rule: #expressExpression. self parse:'not a[x[5]:y\z]' rule: #expressExpression. self parse:'not a = b' rule: #expressExpression. self parse:'(not a) = b' rule: #expressExpression. self parse:'not (a = b)' rule: #expressExpression. ! ! !PPExpressGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 12/1/2011 09:27'! testPi self parse: 'x := pi;' rule: #assignmentStatement ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:12'! testProcedure1 self parse:'procedure P; end_procedure;' rule: #procedure. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:13'! testProcedure2 self parse:'Procedure P (i : real) ; end_procedure;' rule: #procedure. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:16'! testProcedure3 self parse:'Procedure P (var i,j : integer); end_procedure;' rule: #procedure. ! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/20/2011 16:14'! testProcedure4 self parse:'procedure P (i,j : integer; k : real); end_procedure;' rule: #procedure. ! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 18:39'! testProcedureCall1 self parse: 'p;' rule: #procedureCallStatement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 20:37'! testProcedureCall2 self parse: 'p(3);' rule: #procedureCallStatement! ! !PPExpressGrammarTests methodsFor: 'query' stamp: 'AlainPlantec 11/20/2011 14:15'! testQuery1 self parse: 'query ( x <* tab | ?)' rule: #queryExpression! ! !PPExpressGrammarTests methodsFor: 'query' stamp: 'AlainPlantec 11/20/2011 14:18'! testQuery2 self parse: 'query ( x <* self.tab | x.t = Side.TOP)' rule: #queryExpression! ! !PPExpressGrammarTests methodsFor: 'query' stamp: 'AlainPlantec 11/20/2011 14:20'! testQuery3 self parse: 'query ( x <* self.tab | (x.t = Side.TOP) and (x.r = 0))' rule: #queryExpression! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:36'! testRepeatStatement1 self parse: 'repeat no := 1 to 10; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:36'! testRepeatStatement2 self parse: 'repeat until no < 10; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:37'! testRepeatStatement3 self parse: 'repeat while no < 10; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:38'! testRepeatStatement4 self parse: 'repeat no := 1 to 10 while x < 10 until z = 1 ; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:38'! testRepeatStatement5 self parse: 'repeat while x < 10 until z = 1 ; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'statement' stamp: 'AlainPlantec 11/20/2011 21:39'! testRepeatStatement6 self parse: 'repeat no := loindex(tab) to hiindex(tab) ; skip; end_repeat;' rule: #statement! ! !PPExpressGrammarTests methodsFor: 'function and procedure' stamp: 'AlainPlantec 11/22/2011 23:33'! testReturnType self parse:'BAG OF GENERIC : intype' rule: #returnType. ! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 15:32'! testSchema1 self parse: ' schema M; end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 15:33'! testSchema2 self parse: ' schema M; use from X; end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 15:33'! testSchema3 self parse: ' schema M; use from X(A); end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 15:34'! testSchema4 self parse: ' schema M; use from X ( A, B ); end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 15:34'! testSchema5 self parse: ' schema M; use from X ( A, B ); entity E; end_entity; end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:54'! testSchema6 self parse: ' schema M; use from X ( A, B ); entity E; end_entity; entity E subtype of ( E ); i : string; end_entity; end_schema;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 12/16/2010 18:01'! testSchema9 self parse: ' SCHEMA Framework_Config; USE FROM Basic_Types; CONSTANT Max_Tasks_For_A_Resource : Natural := 10; Max_User_Defined_Task_Parameters : Natural := 10; Max_Offsets : Natural := 10; Max_Tasks : Natural := 10; Max_Scheduling_Period : Natural := 10; Max_Sections : Natural := 10; Max_Transitions : Natural := 10; END_CONSTANT; END_SCHEMA;' rule: #schema! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/15/2010 21:44'! testSelectType1 self parse: 'select (X)' rule: #selectType! ! !PPExpressGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 12/15/2010 21:44'! testSelectType2 self parse: 'select (X,Y)' rule: #selectType! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/21/2011 19:01'! testSimpleFactor1 | p | p := self parse: 'x\Generic_Object' rule: #factor.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/21/2011 19:01'! testSimpleFactor2 | p | p := self parse: 'x\Generic_Object.Object_Type' rule: #factor.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/21/2011 19:01'! testSimpleFactor3 | p | p := self parse: 'self\Generic_Object.Object_Type' rule: #factor.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/21/2011 19:02'! testSimpleFactor4 | p | p := self parse: 'aaa[5].f' rule: #factor.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/22/2011 23:15'! testSimpleFactor5 | p | p := self parse: 'x[i]\mapped_item.mapping_source' rule: #factor.! ! !PPExpressGrammarTests methodsFor: 'identifier' stamp: 'AlainPlantec 11/21/2011 12:14'! testSimpleIdentifier1 self parse:'integer' rule: #simpleIdentifier ! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 22:03'! testSuperTypeSpec self parse: ' of (A)' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 22:03'! testSuperTypeSpec1 self parse: ' of (oneof (A,B,C))' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 22:03'! testSuperTypeSpec2 self parse: ' of (A AND B)' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 22:03'! testSuperTypeSpec3 self parse: ' of (A ANDOR B)' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/21/2011 22:03'! testSuperTypeSpec4 self parse: ' of (oneof (A ANDOR B, C and D, oneof (X,V,Z)))' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 22:02'! testSuperTypeSpec5 self parse: 'OF (ONEOF(u, b, q, be) ANDOR ra)' rule: #superTypeSpec! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 13:00'! testUniqueClause1 self parse: 'unique a;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:34'! testUniqueClause2 self parse: 'unique a;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:34'! testUniqueClause3 self parse: 'unique a, b;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 20:47'! testUniqueClause4 self parse: 'unique ur1 : a, b;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 20:48'! testUniqueClause5 self parse: 'unique ur1 : a, b; c;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 20:48'! testUniqueClause6 self parse: 'unique ur1 : a, b; ur2 : c;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 11/22/2011 22:18'! testUniqueClause7 self parse: 'UNIQUE ur1 : SELF\representation.name;' rule: #uniqueClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:45'! testWhereClause1 self parse: 'where' rule: #whereClause! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 12:05'! testWhereRule1 self parse: 'isTrue : true;' rule: #whereRule! ! !PPExpressGrammarTests methodsFor: 'entity definition' stamp: 'AlainPlantec 12/16/2010 11:44'! testWhereRule2 self parse: 'wr1 : true;' rule: #whereRule! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/23/2011 16:25'! ap214 ^ '-- AIM longform EXPRESS of ISO/IS 10303-214 -- -- { no changes from ISO/FDIS 10303-214: ISO TC184/SC4/WG3 N936 } -- -- Title: Core data for automotive mechanical design processes -- Author: Ullrich Pfeifer -- DiK, University of Technology, Darmstadt -- Petersenstr. 30 -- D-64287 Darmstadt -- Telephone: +49 6151 16 3894 -- Telefacsimile: +49 6151 16 6854 -- Email: ap214@dik.tu-darmstadt.de -- Date: 2000-12-20 -- -- Information object registration: Schema identification: -- { iso standard 10303 part(214) version(1) object(1) automotive-design-schema(1) } -- SCHEMA automotive_design; CONSTANT dummy_gri : geometric_representation_item := representation_item('''') || geometric_representation_item(); -- 10303-42: geometry_schema dummy_tri : topological_representation_item := representation_item('''') || topological_representation_item(); -- 10303-42: topology_schema END_CONSTANT; TYPE action_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_person_and_organization_assignment, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_aspect, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE action_request_item = SELECT ( action, action_method, action_property, action_relationship, alternate_product_relationship, assembly_component_usage_substitute, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, document_file, draughting_model, drawing_revision, general_property, material_designation, mechanical_design_geometric_presentation_representation, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_relationship, product_definition_substitute, property_definition, resource_property, shape_aspect, shape_representation); END_TYPE; -- 10303-214: automotive_design TYPE ahead_or_behind = ENUMERATION OF (ahead,exact,behind); END_TYPE; -- 10303-41: date_time_schema TYPE amount_of_substance_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE angle_relator = ENUMERATION OF (equal,large,small); END_TYPE; -- 10303-47: shape_dimension_schema TYPE approval_item = SELECT ( action, action_directive, action_property, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organizational_project, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_relationship, product_definition_substitute, property_definition, resource_property, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE approximation_method = ENUMERATION OF (chordal_deviation,chordal_length); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE area_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE area_or_view = SELECT ( presentation_area, presentation_view); END_TYPE; -- 10303-46: presentation_organization_schema TYPE attribute_language_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, alternate_product_relationship, application_context, approval_relationship, assembly_component_usage_substitute, attribute_value_assignment, certification, configuration_design, configuration_item, contract, data_environment, date_role, date_time_role, descriptive_representation_item, document_relationship, draughting_title, effectivity, effectivity_relationship, event_occurrence, external_source, general_property, general_property_relationship, geometric_representation_item, geometric_tolerance, group, group_relationship, identification_role, kinematic_pair, mapped_item, name_assignment, organization_relationship, organization_role, organizational_project, organizational_project_relationship, pair_actuator, person_and_organization_role, presentation_layer_assignment, process_product_association, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_relationship, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, product_related_product_category, property_definition, property_definition_relationship, representation, representation_relationship, requirement_for_action_resource, resource_property, resource_requirement_type, security_classification, shape_aspect, shape_aspect_relationship, styled_item, time_interval_role, topological_representation_item, uncertainty_measure_with_unit, uncertainty_qualifier, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE attribute_type = SELECT ( label, text); END_TYPE; -- 10303-41: management_resources_schema TYPE axis2_placement = SELECT ( axis2_placement_2d, axis2_placement_3d); END_TYPE; -- 10303-42: geometry_schema TYPE b_spline_curve_form = ENUMERATION OF (polyline_form,circular_arc,elliptic_arc,parabolic_arc, hyperbolic_arc,unspecified); END_TYPE; -- 10303-42: geometry_schema TYPE b_spline_surface_form = ENUMERATION OF (plane_surf,cylindrical_surf,conical_surf,spherical_surf, toroidal_surf,surf_of_revolution,ruled_surf, generalised_cone,quadric_surf, surf_of_linear_extrusion,unspecified); END_TYPE; -- 10303-42: geometry_schema TYPE boolean_operand = SELECT ( solid_model, half_space_solid, csg_primitive, boolean_result); END_TYPE; -- 10303-42: geometric_model_schema TYPE boolean_operator = ENUMERATION OF (union,intersection,difference); END_TYPE; -- 10303-42: geometric_model_schema TYPE box_characteristic_select = SELECT ( box_height, box_width, box_slant_angle, box_rotate_angle); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE box_height = positive_ratio_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE box_rotate_angle = plane_angle_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE box_slant_angle = plane_angle_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE box_width = positive_ratio_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE category_usage_item = SELECT ( product_class); END_TYPE; -- 10303-214: automotive_design TYPE celsius_temperature_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE central_or_parallel = ENUMERATION OF (central,parallel); END_TYPE; -- 10303-46: presentation_organization_schema TYPE certification_item = SELECT ( product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship); END_TYPE; -- 10303-214: automotive_design TYPE character_spacing_select = SELECT ( length_measure, ratio_measure, measure_with_unit, descriptive_measure); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE character_style_select = SELECT ( text_style_for_defined_font); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE characterized_action_definition = SELECT ( action, action_method, action_method_relationship, action_relationship); END_TYPE; -- 10303-49: process_property_schema TYPE characterized_definition = SELECT ( characterized_object, characterized_product_definition, shape_definition); END_TYPE; -- 10303-41: product_property_definition_schema TYPE characterized_material_property = SELECT ( material_property_representation); END_TYPE; -- 10303-45: material_property_definition_schema TYPE characterized_product_definition = SELECT ( product_definition, product_definition_relationship); END_TYPE; -- 10303-41: product_property_definition_schema TYPE characterized_resource_definition = SELECT ( action_resource, action_resource_requirement); END_TYPE; -- 10303-49: process_property_schema TYPE class_usage_effectivity_context_item = SELECT ( product_definition); END_TYPE; -- 10303-214: automotive_design TYPE classification_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, approval_status, class, configuration_item, contract, document_file, document_type, executed_action, feature_definition, general_feature, general_property, material_designation, organizational_project, planar_extent, plus_minus_tolerance, process_operation, product, product_concept, product_concept_feature_category, product_definition, product_definition_formation, product_definition_relationship, property_definition, resource_property, security_classification_level, shape_aspect, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE compound_item_definition = SELECT ( list_representation_item, set_representation_item); END_TYPE; -- 10303-43: representation_schema TYPE configuration_design_item = SELECT ( product_definition, product_definition_formation); END_TYPE; -- 10303-44: configuration_management_schema TYPE configured_effectivity_context_item = SELECT ( product_concept_feature_association); END_TYPE; -- 10303-214: automotive_design TYPE configured_effectivity_item = SELECT ( action_relationship, process_plan, product_definition, product_process_plan); END_TYPE; -- 10303-214: automotive_design TYPE context_dependent_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE contract_item = SELECT ( drawing_revision, executed_action, product_definition_formation); END_TYPE; -- 10303-214: automotive_design TYPE count_measure = NUMBER; END_TYPE; -- 10303-41: measure_schema TYPE csg_primitive = SELECT ( sphere, block, right_angular_wedge, torus, right_circular_cone, right_circular_cylinder); END_TYPE; -- 10303-42: geometric_model_schema TYPE csg_select = SELECT ( boolean_result, csg_primitive); END_TYPE; -- 10303-42: geometric_model_schema TYPE curve_font_or_scaled_curve_font_select = SELECT ( curve_style_font_select); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE curve_on_surface = SELECT ( pcurve, surface_curve, composite_curve_on_surface); END_TYPE; -- 10303-42: geometry_schema TYPE curve_or_annotation_curve_occurrence = SELECT ( curve, annotation_curve_occurrence); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE curve_or_render = SELECT ( curve_style, curve_style_rendering); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE curve_style_font_select = SELECT ( curve_style_font, pre_defined_curve_font, externally_defined_curve_font); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE curve_tolerance_deviation = positive_length_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE curve_tolerance_parameter = REAL; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE date_and_time_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_organization_assignment, applied_person_and_organization_assignment, approval_person_organization, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, effectivity, event_occurrence, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE date_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_organization_assignment, applied_person_and_organization_assignment, approval_person_organization, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, effectivity, event_occurrence, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE date_time_or_event_occurrence = SELECT ( date_time_select, event_occurrence); END_TYPE; -- 10303-41: date_time_schema TYPE date_time_select = SELECT ( date, local_time, date_and_time); END_TYPE; -- 10303-41: date_time_schema TYPE day_in_month_number = INTEGER; WHERE wr1 : {1<=SELF<=31}; END_TYPE; -- 10303-41: date_time_schema TYPE defined_glyph_select = SELECT ( externally_defined_character_glyph); END_TYPE; -- 10303-46: presentation_definition_schema TYPE defined_symbol_select = SELECT ( pre_defined_symbol, externally_defined_symbol); END_TYPE; -- 10303-46: presentation_definition_schema TYPE derived_property_select = SELECT ( property_definition, action_property, resource_property); END_TYPE; -- 10303-41: product_property_definition_schema TYPE description_attribute_select = SELECT ( action_request_solution, application_context, approval_role, configuration_design, date_role, date_time_role, context_dependent_shape_representation, effectivity, external_source, organization_role, person_and_organization_role, person_and_organization, property_definition_representation, representation); END_TYPE; -- 10303-41: basic_attribute_schema TYPE descriptive_measure = STRING; END_TYPE; -- 10303-41: measure_schema TYPE dimension_count = INTEGER; WHERE wr1 : SELF > 0; END_TYPE; -- 10303-42: geometry_schema TYPE dimension_extent_usage = ENUMERATION OF (origin,target); END_TYPE; -- 10303-101: draughting_element_schema TYPE dimensional_characteristic = SELECT ( dimensional_location, dimensional_size); END_TYPE; -- 10303-47: shape_dimension_schema TYPE direction_count_select = SELECT ( u_direction_count, v_direction_count); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE document_reference_item = SELECT ( action_directive, action_method, action_relationship, applied_action_assignment, approval, certification, class, class_system, configuration_design, configuration_item, contract, descriptive_representation_item, executed_action, feature_definition, general_property, material_designation, organization, organizational_project, person, presentation_area, process_plan, product, product_concept, product_concept_feature, product_concept_feature_category, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_process, product_definition_relationship, product_definition_substitute, product_related_product_category, property_definition, representation, resource_requirement_type, retention, security_classification, shape_aspect, shape_aspect_relationship, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE draughting_callout_element = SELECT ( annotation_text_occurrence, annotation_symbol_occurrence, annotation_curve_occurrence); END_TYPE; -- 10303-101: draughting_element_schema TYPE draughting_titled_item = SELECT ( drawing_revision, drawing_sheet_revision); END_TYPE; -- 10303-101: drawing_definition_schema TYPE effectivity_item = SELECT ( action, action_method, action_method_relationship, action_property, action_relationship, assembly_component_usage_substitute, class_system, configuration_design, configuration_item, configured_effectivity_assignment, document_file, draughting_model, drawing_revision, general_property, material_designation, mechanical_design_geometric_presentation_representation, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, shape_aspect, shape_representation); END_TYPE; -- 10303-214: automotive_design TYPE electric_current_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE event_occurrence_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_person_and_organization_assignment, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE external_identification_item = SELECT ( document_file, externally_defined_class, externally_defined_general_property, product_definition); END_TYPE; -- 10303-214: automotive_design TYPE fill_area_style_tile_shape_select = SELECT ( fill_area_style_tile_symbol_with_style); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE fill_style_select = SELECT ( fill_area_style_colour, externally_defined_tile_style, fill_area_style_tiles, externally_defined_hatch_style, fill_area_style_hatching); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE font_select = SELECT ( pre_defined_text_font, externally_defined_text_font); END_TYPE; -- 10303-46: presentation_resource_schema TYPE founded_item_select = SELECT ( founded_item, representation_item); END_TYPE; -- 10303-43: representation_schema TYPE geometric_set_select = SELECT ( point, curve, surface); END_TYPE; -- 10303-42: geometric_model_schema TYPE group_item = SELECT ( geometric_representation_item, mapped_item, product_concept_feature, shape_aspect, styled_item, topological_representation_item); END_TYPE; -- 10303-214: automotive_design TYPE hiding_or_blanking_select = SELECT ( presentation_area, presentation_view, annotation_fill_area); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE hour_in_day = INTEGER; WHERE wr1 : {0<=SELF<=24}; END_TYPE; -- 10303-41: date_time_schema TYPE id_attribute_select = SELECT ( action, address, product_category, property_definition, shape_aspect, shape_aspect_relationship, application_context, group, organizational_project, representation); END_TYPE; -- 10303-41: basic_attribute_schema TYPE identification_item = SELECT ( action, action_directive, action_method, action_property, applied_identification_assignment, approval_status, class, class_system, configuration_item, dimensional_size, document_file, document_type, draughting_model, effectivity, general_property, measure_representation_item, mechanical_design_geometric_presentation_representation, organization, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_category, product_definition, product_definition_formation, product_definition_relationship, property_definition, property_definition_relationship, security_classification_level, shape_aspect_relationship, shape_representation); END_TYPE; -- 10303-214: automotive_design TYPE identifier = STRING; END_TYPE; -- 10303-41: support_resource_schema TYPE interpolation_type = ENUMERATION OF (undefined,synchronous,linear); END_TYPE; -- 10303-105: kinematic_analysis_control_and_result_schema TYPE invisibility_context = SELECT ( presentation_representation, presentation_set); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE invisible_item = SELECT ( styled_item, presentation_layer_assignment, representation); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE kinematic_analysis_definition = SELECT ( interpolated_configuration_sequence); END_TYPE; -- 10303-105: kinematic_analysis_control_and_result_schema TYPE kinematic_frame_background = SELECT ( point, curve, surface); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE kinematic_result = SELECT ( interpolated_configuration_sequence, resulting_path); END_TYPE; -- 10303-105: kinematic_analysis_control_and_result_schema TYPE knot_type = ENUMERATION OF (uniform_knots,quasi_uniform_knots, piecewise_bezier_knots,unspecified); END_TYPE; -- 10303-42: geometry_schema TYPE label = STRING; END_TYPE; -- 10303-41: support_resource_schema TYPE language_item = SELECT ( representation); END_TYPE; -- 10303-214: automotive_design TYPE layered_item = SELECT ( presentation_representation, representation_item); END_TYPE; -- 10303-46: presentation_organization_schema TYPE length_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE limit_condition = ENUMERATION OF (maximum_material_condition,least_material_condition, regardless_of_feature_size); END_TYPE; -- 10303-47: shape_aspect_definition_schema TYPE list_of_reversible_topology_item = LIST[0:?] OF reversible_topology_item; END_TYPE; -- 10303-42: topology_schema TYPE list_representation_item = LIST[1:?] OF representation_item; END_TYPE; -- 10303-43: representation_schema TYPE luminous_intensity_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE marker_select = SELECT ( pre_defined_marker); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE mass_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE measure_value = SELECT ( length_measure, mass_measure, time_measure, electric_current_measure, thermodynamic_temperature_measure, celsius_temperature_measure, amount_of_substance_measure, luminous_intensity_measure, plane_angle_measure, solid_angle_measure, area_measure, volume_measure, ratio_measure, parameter_value, numeric_measure, context_dependent_measure, descriptive_measure, positive_length_measure, positive_plane_angle_measure, positive_ratio_measure, count_measure); END_TYPE; -- 10303-41: measure_schema TYPE minute_in_hour = INTEGER; WHERE wr1 : {0<=SELF<=59}; END_TYPE; -- 10303-41: date_time_schema TYPE month_in_year_number = INTEGER; WHERE wr1 : {1<=SELF<=12}; END_TYPE; -- 10303-41: date_time_schema TYPE motion_parameter_measure = SELECT ( parameter_value, measure_with_unit); END_TYPE; -- 10303-105: kinematic_motion_representation_schema TYPE multi_language_attribute_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, alternate_product_relationship, application_context, approval_relationship, assembly_component_usage_substitute, certification, configuration_design, configuration_item, contract, data_environment, date_role, date_time_role, descriptive_representation_item, document_relationship, draughting_title, effectivity, effectivity_relationship, event_occurrence, external_source, general_property, general_property_relationship, geometric_representation_item, geometric_tolerance, group, group_relationship, identification_role, kinematic_pair, mapped_item, name_assignment, organization_relationship, organization_role, organizational_project, organizational_project_relationship, pair_actuator, person_and_organization_role, presentation_layer_assignment, process_product_association, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_relationship, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, product_related_product_category, property_definition, property_definition_relationship, representation, representation_relationship, requirement_for_action_resource, resource_property, resource_requirement_type, security_classification, shape_aspect, shape_aspect_relationship, styled_item, time_interval_role, topological_representation_item, uncertainty_measure_with_unit, uncertainty_qualifier, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE name_attribute_select = SELECT ( action_request_solution, address, configuration_design, context_dependent_shape_representation, derived_unit, effectivity, person_and_organization, product_definition, product_definition_substitute, property_definition_representation); END_TYPE; -- 10303-41: basic_attribute_schema TYPE name_item = SELECT ( kinematic_joint, kinematic_link, kinematic_structure); END_TYPE; -- 10303-214: automotive_design TYPE null_style = ENUMERATION OF (null); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE numeric_measure = NUMBER; END_TYPE; -- 10303-41: measure_schema TYPE organization_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_identification_assignment, applied_organization_assignment, applied_person_and_organization_assignment, approval, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, effectivity, event_occurrence, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE organizational_project_item = SELECT ( executed_action, product_concept); END_TYPE; -- 10303-214: automotive_design TYPE parameter_value = REAL; END_TYPE; -- 10303-41: measure_schema TYPE pcurve_or_surface = SELECT ( pcurve, surface); END_TYPE; -- 10303-42: geometry_schema TYPE person_and_organization_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_organization_assignment, applied_person_and_organization_assignment, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, event_occurrence, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE person_organization_select = SELECT ( person, organization, person_and_organization); END_TYPE; -- 10303-41: person_organization_schema TYPE plane_angle_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE positive_length_measure = length_measure; WHERE wr1 : SELF > 0.0; END_TYPE; -- 10303-41: measure_schema TYPE positive_plane_angle_measure = plane_angle_measure; WHERE wr1 : SELF > 0.0; END_TYPE; -- 10303-41: measure_schema TYPE positive_ratio_measure = ratio_measure; WHERE wr1 : SELF > 0.0; END_TYPE; -- 10303-41: measure_schema TYPE preferred_surface_curve_representation = ENUMERATION OF (curve_3d,pcurve_s1,pcurve_s2); END_TYPE; -- 10303-42: geometry_schema TYPE presentable_text = STRING; END_TYPE; -- 10303-46: presentation_resource_schema TYPE presentation_representation_select = SELECT ( presentation_representation, presentation_set); END_TYPE; -- 10303-46: presentation_organization_schema TYPE presentation_size_assignment_select = SELECT ( presentation_view, presentation_area, area_in_set); END_TYPE; -- 10303-46: presentation_organization_schema TYPE presentation_style_select = SELECT ( pre_defined_presentation_style, point_style, curve_style, surface_style_usage, symbol_style, fill_area_style, text_style, approximation_tolerance, externally_defined_style, null_style); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE presented_item_select = SELECT ( action, action_method, action_relationship, product_concept, product_concept_feature, product_concept_feature_category, product_definition, product_definition_formation, product_definition_relationship); END_TYPE; -- 10303-214: automotive_design TYPE product_or_formation_or_definition = SELECT ( product, product_definition_formation, product_definition); END_TYPE; -- 10303-41: document_schema TYPE product_or_presentation_space = ENUMERATION OF (product_shape_space,presentation_area_space); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE property_or_shape_select = SELECT ( property_definition, shape_definition); END_TYPE; -- 10303-49: process_property_schema TYPE ratio_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE rendering_properties_select = SELECT ( surface_style_reflectance_ambient, surface_style_transparent); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE represented_definition = SELECT ( general_property, property_definition, property_definition_relationship, shape_aspect, shape_aspect_relationship); END_TYPE; -- 10303-41: product_property_representation_schema TYPE reversible_topology = SELECT ( reversible_topology_item, list_of_reversible_topology_item, set_of_reversible_topology_item); END_TYPE; -- 10303-42: topology_schema TYPE reversible_topology_item = SELECT ( edge, path, face, face_bound, closed_shell, open_shell); END_TYPE; -- 10303-42: topology_schema TYPE rigid_placement = SELECT ( axis2_placement_3d); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE role_select = SELECT ( action_assignment, action_request_assignment, approval_assignment, approval_date_time, certification_assignment, contract_assignment, document_reference, effectivity_assignment, group_assignment, name_assignment, security_classification_assignment); END_TYPE; -- 10303-41: basic_attribute_schema TYPE rotational_range_measure = SELECT ( plane_angle_measure, unlimited_range); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE second_in_minute = REAL; WHERE wr1 : {0<=SELF<=60.0}; END_TYPE; -- 10303-41: date_time_schema TYPE security_classification_item = SELECT ( action, action_directive, action_property, applied_action_assignment, assembly_component_usage_substitute, class_system, configuration_design, configuration_effectivity, configured_effectivity_assignment, document_file, draughting_model, drawing_revision, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organizational_project, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_category, product_definition, product_definition_formation, product_definition_relationship, property_definition, resource_property, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE set_of_reversible_topology_item = SET[0:?] OF reversible_topology_item; END_TYPE; -- 10303-42: topology_schema TYPE set_representation_item = SET[1:?] OF representation_item; END_TYPE; -- 10303-43: representation_schema TYPE shading_curve_method = ENUMERATION OF (constant_colour,linear_colour); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE shading_surface_method = ENUMERATION OF (constant_shading,colour_shading,dot_shading,normal_shading); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE shape_definition = SELECT ( product_definition_shape, shape_aspect, shape_aspect_relationship); END_TYPE; -- 10303-41: product_property_definition_schema TYPE shape_tolerance_select = SELECT ( geometric_tolerance, plus_minus_tolerance); END_TYPE; -- 10303-47: shape_tolerance_schema TYPE shell = SELECT ( open_shell, closed_shell); END_TYPE; -- 10303-42: topology_schema TYPE si_prefix = ENUMERATION OF (exa,peta,tera,giga,mega,kilo,hecto,deca,deci, centi,milli,micro,nano,pico,femto,atto); END_TYPE; -- 10303-41: measure_schema TYPE si_unit_name = ENUMERATION OF (metre,gram,second,ampere,kelvin,mole,candela,radian,steradian,hertz, newton,pascal,joule,watt,coulomb,volt,farad,ohm,siemens,weber,tesla, henry,degree_celsius,lumen,lux,becquerel,gray,sievert); END_TYPE; -- 10303-41: measure_schema TYPE size_select = SELECT ( positive_length_measure, measure_with_unit, descriptive_measure); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE solid_angle_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE source = ENUMERATION OF (made,bought,not_known); END_TYPE; -- 10303-41: product_definition_schema TYPE source_item = SELECT ( identifier); END_TYPE; -- 10303-41: external_reference_schema TYPE spatial_rotation = SELECT ( ypr_rotation, rotation_about_direction); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE specified_item = SELECT ( drawing_revision); END_TYPE; -- 10303-214: automotive_design TYPE style_context_select = SELECT ( group, presentation_layer_assignment, representation, representation_item, presentation_set); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE supported_item = SELECT ( action_directive, action, action_method); END_TYPE; -- 10303-41: action_schema TYPE surface_boundary = SELECT ( boundary_curve, degenerate_pcurve); END_TYPE; -- 10303-42: geometry_schema TYPE surface_model = SELECT ( shell_based_surface_model, face_based_surface_model); END_TYPE; -- 10303-42: geometric_model_schema TYPE surface_side = ENUMERATION OF (positive,negative,both); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE surface_side_style_select = SELECT ( surface_side_style); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE surface_style_element_select = SELECT ( surface_style_fill_area, surface_style_boundary, surface_style_silhouette, surface_style_segmentation_curve, surface_style_control_grid, surface_style_parameter_line, surface_style_rendering); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE surface_tolerance_deviation = positive_length_measure; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE surface_tolerance_parameter = REAL; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE symbol_style_select = SELECT ( symbol_colour); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE text = STRING; END_TYPE; -- 10303-41: support_resource_schema TYPE text_alignment = label; END_TYPE; -- 10303-46: presentation_definition_schema TYPE text_delineation = label; END_TYPE; -- 10303-46: presentation_definition_schema TYPE text_or_character = SELECT ( annotation_text, annotation_text_character, defined_character_glyph, composite_text, text_literal); END_TYPE; -- 10303-46: presentation_definition_schema TYPE text_path = ENUMERATION OF (left,right,up,down); END_TYPE; -- 10303-46: presentation_definition_schema TYPE thermodynamic_temperature_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE time_interval_item = SELECT ( action, action_directive, action_method, action_property, action_relationship, action_request_solution, alternate_product_relationship, applied_action_assignment, applied_classification_assignment, applied_person_and_organization_assignment, approval_status, assembly_component_usage_substitute, certification, class, class_system, configuration_design, configuration_effectivity, configuration_item, configured_effectivity_assignment, contract, document_file, draughting_model, drawing_revision, executed_action, general_property, material_designation, mechanical_design_geometric_presentation_representation, organization_relationship, organizational_project, person_and_organization, presentation_area, product, product_concept, product_concept_feature, product_concept_feature_association, product_concept_feature_category, product_concept_feature_category_usage, product_definition, product_definition_formation, product_definition_formation_relationship, product_definition_relationship, product_definition_substitute, property_definition, requirement_for_action_resource, resource_property, security_classification, security_classification_level, shape_representation, versioned_action_request); END_TYPE; -- 10303-214: automotive_design TYPE time_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE tolerance_deviation_select = SELECT ( curve_tolerance_deviation, surface_tolerance_deviation); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE tolerance_method_definition = SELECT ( tolerance_value, limits_and_fits); END_TYPE; -- 10303-47: shape_tolerance_schema TYPE tolerance_parameter_select = SELECT ( curve_tolerance_parameter, surface_tolerance_parameter); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE tolerance_select = SELECT ( approximation_tolerance_deviation, approximation_tolerance_parameter); END_TYPE; -- 10303-46: presentation_appearance_schema TYPE transformation = SELECT ( item_defined_transformation, functionally_defined_transformation); END_TYPE; -- 10303-43: representation_schema TYPE transition_code = ENUMERATION OF (discontinuous,continuous,cont_same_gradient, cont_same_gradient_same_curvature); END_TYPE; -- 10303-42: geometry_schema TYPE translational_range_measure = SELECT ( length_measure, unlimited_range); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE trimming_preference = ENUMERATION OF (cartesian,parameter,unspecified); END_TYPE; -- 10303-42: geometry_schema TYPE trimming_select = SELECT ( cartesian_point, parameter_value); END_TYPE; -- 10303-42: geometry_schema TYPE u_direction_count = INTEGER; WHERE wr1 : SELF > 1; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE unit = SELECT ( named_unit, derived_unit); END_TYPE; -- 10303-41: measure_schema TYPE unlimited_range = ENUMERATION OF (unlimited); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE v_direction_count = INTEGER; WHERE wr1 : SELF > 1; END_TYPE; -- 10303-46: presentation_appearance_schema TYPE value_qualifier = SELECT ( precision_qualifier, type_qualifier, uncertainty_qualifier); END_TYPE; -- 10303-45: qualified_measure_schema TYPE vector_or_direction = SELECT ( vector, direction); END_TYPE; -- 10303-42: geometry_schema TYPE volume_measure = REAL; END_TYPE; -- 10303-41: measure_schema TYPE wireframe_model = SELECT ( edge_based_wireframe_model); END_TYPE; -- 10303-42: geometric_model_schema TYPE year_number = INTEGER; END_TYPE; -- 10303-41: date_time_schema TYPE ypr_enumeration = ENUMERATION OF (yaw,pitch,roll); END_TYPE; -- 10303-105: kinematic_structure_schema TYPE ypr_rotation = ARRAY[ypr_index(yaw):ypr_index(roll)] OF plane_angle_measure; END_TYPE; -- 10303-105: kinematic_structure_schema ENTITY abs_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY acos_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY action; name : label; description : OPTIONAL text; chosen_method : action_method; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: action_schema ENTITY action_assignment ABSTRACT SUPERTYPE; assigned_action : action; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY action_directive; name : label; description : OPTIONAL text; analysis : text; comment : text; requests : SET[1:?] OF versioned_action_request; END_ENTITY; -- 10303-41: action_schema ENTITY action_method; name : label; description : OPTIONAL text; consequence : text; purpose : text; END_ENTITY; -- 10303-41: action_schema ENTITY action_method_relationship; name : label; description : OPTIONAL text; relating_method : action_method; related_method : action_method; END_ENTITY; -- 10303-41: action_schema ENTITY action_property; name : label; description : text; definition : characterized_action_definition; END_ENTITY; -- 10303-49: process_property_schema ENTITY action_property_representation; name : label; description : text; property : action_property; representation : representation; END_ENTITY; -- 10303-49: process_property_representation_schema ENTITY action_relationship; name : label; description : OPTIONAL text; relating_action : action; related_action : action; END_ENTITY; -- 10303-41: action_schema ENTITY action_request_assignment ABSTRACT SUPERTYPE; assigned_action_request : versioned_action_request; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY action_request_solution; method : action_method; request : versioned_action_request; DERIVE description : text := get_description_value(SELF); name : label := get_name_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: action_schema ENTITY action_request_status; status : label; assigned_request : versioned_action_request; END_ENTITY; -- 10303-41: action_schema ENTITY action_resource; name : label; description : OPTIONAL text; usage : SET[1:?] OF supported_item; kind : action_resource_type; END_ENTITY; -- 10303-41: action_schema ENTITY action_resource_requirement; name : label; description : text; kind : resource_requirement_type; operations : SET[1:?] OF characterized_action_definition; END_ENTITY; -- 10303-49: process_property_schema ENTITY action_resource_type; name : label; END_ENTITY; -- 10303-41: action_schema ENTITY action_status; status : label; assigned_action : executed_action; END_ENTITY; -- 10303-41: action_schema ENTITY address; internal_location : OPTIONAL label; street_number : OPTIONAL label; street : OPTIONAL label; postal_box : OPTIONAL label; town : OPTIONAL label; region : OPTIONAL label; postal_code : OPTIONAL label; country : OPTIONAL label; facsimile_number : OPTIONAL label; telephone_number : OPTIONAL label; electronic_mail_address : OPTIONAL label; telex_number : OPTIONAL label; DERIVE name : label := get_name_value(SELF); url : identifier := get_id_value(SELF); WHERE wr1: EXISTS ( internal_location ) OR EXISTS ( street_number ) OR EXISTS ( street ) OR EXISTS ( postal_box ) OR EXISTS ( town ) OR EXISTS ( region ) OR EXISTS ( postal_code ) OR EXISTS ( country ) OR EXISTS ( facsimile_number ) OR EXISTS ( telephone_number ) OR EXISTS ( electronic_mail_address ) OR EXISTS ( telex_number ) ; END_ENTITY; -- 10303-41: person_organization_schema ENTITY advanced_brep_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | ( NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SOLID_BREP'' , ''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SOLID_BREP'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) ) >0; wr3: SIZEOF ( QUERY ( msb <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SOLID_BREP'' IN TYPEOF ( it ) ) ) | ( NOT ( SIZEOF ( QUERY ( csh <* msb_shells ( msb ) | ( NOT ( SIZEOF ( QUERY ( fcs <* csh\ connected_face_set.cfs_faces | ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fcs ) ) ) ) ) = 0 ) ) ) ) = 0 ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( msb <* QUERY ( it <* items | ( ''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SOLID_BREP'' IN TYPEOF ( it ) ) ) | ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_CLOSED_SHELL'' IN TYPEOF ( msb\ manifold_solid_brep.outer ) ) ) ) = 0; wr5: SIZEOF ( QUERY ( brv <* QUERY ( it <* items | ( ''AUTOMOTIVE_DESIGN.''+ ''BREP_WITH_VOIDS'' IN TYPEOF ( it ) ) ) | ( NOT ( SIZEOF ( QUERY ( csh <* brv\ brep_with_voids.voids | ( csh\ oriented_closed_shell. orientation ) ) ) = 0 ) ) ) ) = 0; wr6: SIZEOF ( QUERY ( mi <* QUERY ( it <* items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) ) | ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_BREP_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source.mapped_representation ) ) ) ) ) = 0; END_ENTITY; -- 10303-514: aic_advanced_brep ENTITY advanced_face SUBTYPE OF (face_surface); WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''ELEMENTARY_SURFACE'' , ''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_SURFACE'' , ''AUTOMOTIVE_DESIGN.''+ ''SWEPT_SURFACE'']* TYPEOF ( face_geometry ) ) = 1; wr2: SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds.bound\ path.edge_list | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( oe\ oriented_edge.edge_element ) ) ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds.bound\ path.edge_list | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''LINE'' , ''AUTOMOTIVE_DESIGN.''+ ''CONIC'' , ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' , ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE'']* TYPEOF ( oe.edge_element\ edge_curve.edge_geometry ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds.bound\ path.edge_list | NOT ( ( ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe\ edge.edge_start ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' IN TYPEOF ( oe\ edge.edge_start\ vertex_point.vertex_geometry ) ) ) ) AND ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe\ edge.edge_end ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' IN TYPEOF ( oe\ edge.edge_end\ vertex_point.vertex_geometry ) ) ) ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_PATH'' IN TYPEOF ( elp_fbnds.bound ) ) ) = 0; wr6: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''SWEPT_SURFACE'' IN TYPEOF ( face_geometry ) ) ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''LINE'' , ''AUTOMOTIVE_DESIGN.''+ ''CONIC'' , ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' , ''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE'']* TYPEOF ( face_geometry\ swept_surface.swept_curve ) ) = 1 ) ; wr7: SIZEOF ( QUERY ( vlp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'' IN TYPEOF ( bnds. bound ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( vlp_fbnds\ face_bound.bound\ vertex_loop. loop_vertex ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' IN TYPEOF ( vlp_fbnds\ face_bound. bound\ vertex_loop.loop_vertex\ vertex_point.vertex_geometry ) ) ) ) ) = 0; wr8: SIZEOF ( QUERY ( bnd <* bounds | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' , ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'']* TYPEOF ( bnd.bound ) ) = 1 ) ) ) = 0; wr9: SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds.bound\ path.edge_list | ( ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_CURVE'' IN TYPEOF ( oe\ oriented_edge.edge_element\ edge_curve. edge_geometry ) ) AND ( NOT ( SIZEOF ( QUERY ( sc_ag <* oe.edge_element\ edge_curve.edge_geometry\ surface_curve. associated_geometry | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' IN TYPEOF ( sc_ag ) ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0; wr10: ( ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''SWEPT_SURFACE'' IN TYPEOF ( face_geometry ) ) ) OR ( ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' IN TYPEOF ( face_geometry\ swept_surface.swept_curve ) ) ) OR ( SIZEOF ( face_geometry\ swept_surface.swept_curve\ polyline.points ) >=3 ) ) ) AND ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds.bound\ path.edge_list | ( ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' IN TYPEOF ( oe\ oriented_edge.edge_element\ edge_curve. edge_geometry ) ) AND ( NOT ( SIZEOF ( oe\ oriented_edge.edge_element\ edge_curve.edge_geometry\ polyline.points ) >=3 ) ) ) ) = 0 ) ) ) = 0 ) ; END_ENTITY; -- 10303-511: aic_topologically_bounded_surface ENTITY alternate_product_relationship; name : label; definition : OPTIONAL text; alternate : product; base : product; basis : text; UNIQUE ur1 : alternate,base; WHERE wr1:alternate:<>:base; END_ENTITY; -- 10303-44: product_structure_schema ENTITY amount_of_substance_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''AMOUNT_OF_SUBSTANCE_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY amount_of_substance_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 1.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY and_expression SUBTYPE OF (multiple_arity_boolean_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY angular_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY angular_location SUBTYPE OF (dimensional_location); angle_selection : angle_relator; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY angular_size SUBTYPE OF (dimensional_size); angle_selection : angle_relator; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY angularity_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <3; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY annotation_curve_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( SELF\styled_item.item ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_fill_area SUBTYPE OF (geometric_representation_item); boundaries : SET[1:?] OF curve; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_fill_area_occurrence SUBTYPE OF (annotation_occurrence); fill_style_target : point; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA'' IN TYPEOF ( SELF.item ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_occurrence SUPERTYPE OF (ONEOF(annotation_curve_occurrence, annotation_fill_area_occurrence,annotation_text_occurrence, annotation_symbol_occurrence)) SUBTYPE OF (styled_item); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( SELF ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_occurrence_associativity SUBTYPE OF (annotation_occurrence_relationship); WHERE wr1: SIZEOF ( TYPEOF ( SELF.related_annotation_occurrence ) *[''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''LEADER_CURVE''] ) = 1; END_ENTITY; -- 10303-520: aic_associative_draughting_elements ENTITY annotation_occurrence_relationship; name : label; description : text; relating_annotation_occurrence : annotation_occurrence; related_annotation_occurrence : annotation_occurrence; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_subfigure_occurrence SUBTYPE OF (annotation_symbol_occurrence); WHERE wr1: SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( SIZEOF ( sty.styles ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''NULL_STYLE'' IN TYPEOF ( sty. styles[1] ) ) ) ) = 0; wr3: ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL'' IN TYPEOF ( SELF.item ) ) ; wr4: ( ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_SUBFIGURE_REPRESENTATION'' IN TYPEOF ( SELF.item\ mapped_item.mapping_source. mapped_representation ) ) ; END_ENTITY; -- 10303-504: aic_draughting_annotation ENTITY annotation_symbol SUBTYPE OF (mapped_item); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_REPRESENTATION_MAP'' IN TYPEOF ( SELF\mapped_item.mapping_source ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_TARGET'' IN TYPEOF ( SELF\mapped_item.mapping_target ) ; wr3:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( SELF ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_symbol_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.''+ ''DEFINED_SYMBOL'']* TYPEOF ( SELF\styled_item.item ) ) >0; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_text SUBTYPE OF (mapped_item); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( SELF\mapped_item.mapping_target ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''TEXT_STRING_REPRESENTATION'' IN TYPEOF ( SELF\mapped_item.mapping_source. mapped_representation ) ; wr3:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( SELF ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_text_character SUBTYPE OF (mapped_item); alignment : text_alignment; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''CHARACTER_GLYPH_SYMBOL'' IN TYPEOF ( SELF\mapped_item.mapping_source.mapped_representation ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( SELF\mapped_item.mapping_target ) ; wr3:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( SELF ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY annotation_text_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_CHARACTER'' , ''AUTOMOTIVE_DESIGN.''+ ''DEFINED_CHARACTER_GLYPH'' , ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'']* TYPEOF ( SELF\styled_item.item ) ) >0; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY apex SUBTYPE OF (derived_shape_aspect); END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY application_context; application : label; DERIVE description : text := get_description_value(SELF); id : identifier := get_id_value(SELF); INVERSE context_elements : SET[1:?] OF application_context_element FOR frame_of_reference; WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: application_context_schema ENTITY application_context_element SUPERTYPE OF (ONEOF(product_concept_context,product_context, product_definition_context)); name : label; frame_of_reference : application_context; END_ENTITY; -- 10303-41: application_context_schema ENTITY application_context_relationship; name : label; description : OPTIONAL text; relating_context : application_context; related_context : application_context; END_ENTITY; -- 10303-41: application_context_schema ENTITY application_protocol_definition; status : label; application_interpreted_model_schema_name : label; application_protocol_year : year_number; application : application_context; END_ENTITY; -- 10303-41: application_context_schema ENTITY applied_action_assignment SUBTYPE OF (action_assignment); items : SET[1:?] OF action_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_action_request_assignment SUBTYPE OF (action_request_assignment); items : SET[1:?] OF action_request_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_approval_assignment SUBTYPE OF (approval_assignment); items : SET[1:?] OF approval_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_area SUBTYPE OF (shape_aspect); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {2<=SIZEOF ( pdr. used_representation.items ) <=3} ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''effective length'' , ''maximum length'' ] ) ) ) >0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''effective length'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''effective length'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''applied area usage'' ) AND ( ( ''AUTOMOTIVE_DESIGN.'' + ''THREAD'' IN TYPEOF ( sar. relating_shape_aspect.of_shape.definition ) ) OR ( ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_FEATURE_DEFINITION'' IN TYPEOF ( sar. relating_shape_aspect.of_shape.definition ) ) AND ( sar. relating_shape_aspect.of_shape.definition\ externally_defined_item.item_id = ''external thread'' ) AND ( sar.relating_shape_aspect.of_shape.definition\ externally_defined_item.source.source_id = ''external thread specification'' ) ) ) AND ( sar. relating_shape_aspect.of_shape.definition.description = ''partial area occurrence'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_certification_assignment SUBTYPE OF (certification_assignment); items : SET[1:?] OF certification_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_classification_assignment SUBTYPE OF (classification_assignment); items : SET[1:?] OF classification_item; WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' IN TYPEOF ( SELF.assigned_class ) ) OR ( SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''ACTION'' , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_DIRECTIVE'' , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_METHOD'' , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''APPLICATION_CONTEXT'' , ''AUTOMOTIVE_DESIGN.'' + ''APPROVAL_STATUS'' , ''AUTOMOTIVE_DESIGN.'' + ''ASSEMBLY_COMPONENT_USAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''CONTRACT'' , ''AUTOMOTIVE_DESIGN.'' + ''DOCUMENT_TYPE'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''MATERIAL_DESIGNATION'' , ''AUTOMOTIVE_DESIGN.'' + ''ORGANIZATIONAL_PROJECT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_FORMATION'' , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''RESOURCE_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''SECURITY_CLASSIFICATION_LEVEL'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT'' , ''AUTOMOTIVE_DESIGN.'' + ''VERSIONED_ACTION_REQUEST'']* TYPEOF ( i ) ) <>1 ) ) = 0 ) ; wr2: NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''GROUP'' IN TYPEOF ( SELF.assigned_class ) ) AND ( SELF.assigned_class\ group. name = ''E'' ) AND ( SELF.assigned_class\ group. description = ''dimensioning principle'' ) ) OR ( SIZEOF ( QUERY ( i <* SELF.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PLUS_MINUS_TOLERANCE'' IN TYPEOF ( i ) ) ) ) = 0 ) ; wr3: NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS_SYSTEM'' IN TYPEOF ( SELF.assigned_class ) ) AND ( SELF.role.name = ''class system membership'' ) ) OR ( SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''APPROVAL_STATUS'' , ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''DOCUMENT_TYPE'' , ''AUTOMOTIVE_DESIGN.'' + ''SECURITY_CLASSIFICATION_LEVEL'' , ''AUTOMOTIVE_DESIGN.'' + ''APPROVAL_STATUS'']* TYPEOF ( i ) ) <>1 ) ) = 0 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_contract_assignment SUBTYPE OF (contract_assignment); items : SET[1:?] OF contract_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_date_and_time_assignment SUBTYPE OF (date_and_time_assignment); items : SET[1:?] OF date_and_time_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_date_assignment SUBTYPE OF (date_assignment); items : SET[1:?] OF date_item; WHERE wr1: ( NOT ( SELF.role.name = ''actual end'' ) ) OR item_correlation ( SELF.items , [''ACTION'' , ''ORGANIZATIONAL_PROJECT'' , ''EFFECTIVITY''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_document_reference SUBTYPE OF (document_reference); items : SET[1:?] OF document_reference_item; WHERE wr1: ( NOT ( SELF.role.name = ''general tolerance definition'' ) ) OR item_correlation ( SELF.items , [''REPRESENTATION''] ) ; wr2: ( SELF.role.name = ''general tolerance definition'' ) OR item_correlation ( SELF.items , [''ACTION'' , ''ACTION_DIRECTIVE'' , ''ACTION_METHOD'' , ''ACTION_RELATIONSHIP'' , ''APPLIED_ACTION_ASSIGNMENT'' , ''APPROVAL'' , ''CERTIFICATION'' , ''CLASS'' , ''CLASS_SYSTEM'' , ''CONFIGURATION_DESIGN'' , ''CONFIGURATION_ITEM'' , ''CONTRACT'' , ''FEATURE_DEFINITION'' , ''GENERAL_PROPERTY'' , ''MATERIAL_DESIGNATION'' , ''ORGANIZATION'' , ''ORGANIZATIONAL_PROJECT'' , ''PERSON'' , ''PRODUCT_CONCEPT'' , ''PRODUCT_CONCEPT_FEATURE'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''PRODUCT_DEFINITION'' , ''PRODUCT_DEFINITION_FORMATION'' , ''PRODUCT_DEFINITION_FORMATION_RELATIONSHIP'' , ''PRODUCT_DEFINITION_RELATIONSHIP'' , ''PRODUCT_DEFINITION_SUBSTITUTE'' , ''PRODUCT_RELATED_PRODUCT_CATEGORY'' , ''PROPERTY_DEFINITION'' , ''REPRESENTATION'' , ''RESOURCE_REQUIREMENT_TYPE'' , ''SECURITY_CLASSIFICATION'' , ''SHAPE_ASPECT'' , ''SHAPE_ASPECT_RELATIONSHIP'' , ''VERSIONED_ACTION_REQUEST''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_document_usage_constraint_assignment SUBTYPE OF (document_usage_constraint_assignment); items : SET[1:?] OF document_reference_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_effectivity_assignment SUBTYPE OF (effectivity_assignment); items : SET[1:?] OF effectivity_item; WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''LOT_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''SERIAL_NUMBERED_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_EFFECTIVITY'']* TYPEOF ( SELF.assigned_effectivity ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_event_occurrence_assignment SUBTYPE OF (event_occurrence_assignment); items : SET[1:?] OF event_occurrence_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_external_identification_assignment SUBTYPE OF (external_identification_assignment); items : SET[1:?] OF external_identification_item; WHERE wr1: ( NOT ( SELF.role.name = ''alternative document id and location'' ) ) OR item_correlation ( SELF.items , [''DOCUMENT_FILE''] ) ; wr2: ( NOT ( SELF.role.name = ''version'' ) ) OR item_correlation ( SELF.items , [''EXTERNALLY_DEFINED_CLASS'' , ''EXTERNALLY_DEFINED_GENERAL_PROPERTY''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_group_assignment SUBTYPE OF (group_assignment); items : SET[1:?] OF group_item; WHERE wr1: ( NOT ( SELF.role.name = ''exclusiveness'' ) ) OR item_correlation ( SELF.items , [''ACTION''] ) ; wr2: ( NOT ( SELF.role.name = ''simultaneity'' ) ) OR item_correlation ( SELF.items , [''ACTION''] ) ; wr3: ( NOT ( SELF.role.name = ''specification category member'' ) ) OR item_correlation ( SELF.items , [''PRODUCT_CONCEPT_FEATURE''] ) ; wr4: ( NOT ( SELF.role.name = ''group membership'' ) ) OR item_correlation ( SELF.items , [''GEOMETRIC_REPRESENTATION_ITEM'' , ''SHAPE_ASPECT''] ) ; wr5: ( NOT ( SELF.role.name = ''group membership'' ) ) OR ( ( SIZEOF ( SELF.items ) = SIZEOF ( QUERY ( i <* SELF.items | ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) OR ( SIZEOF ( SELF.items ) = SIZEOF ( QUERY ( i <* SELF.items | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT'' IN TYPEOF ( i ) ) ) ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_identification_assignment SUBTYPE OF (identification_assignment); items : SET[1:?] OF identification_item; WHERE wr1: ( NOT ( SELF.role.name = ''version'' ) ) OR item_correlation ( SELF.items , [''ACTION'' , ''ACTION_DIRECTIVE'' , ''SHAPE_REPRESENTATION'' , ''EFFECTIVITY'' , ''PRODUCT_CONCEPT'' , ''CONFIGURATION_ITEM'' , ''PRODUCT_DEFINITION'' , ''PRODUCT_CONCEPT_FEATURE'' , ''DOCUMENT_FILE'' , ''CLASS'' , ''APPLIED_IDENTIFICATION_ASSIGNMENT'' , ''DRAUGHTING_MODEL'' , ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' , ''PRESENTATION_AREA''] ) ; wr2: ( NOT ( SELF.role.name = ''lot context'' ) ) OR item_correlation ( SELF.items , [''PRODUCT_DEFINITION''] ) ; wr3: ( NOT ( SELF.role.name = ''property change id context'' ) ) OR item_correlation ( SELF.items , [''PROPERTY_DEFINITION_RELATIONSHIP'' , ''SHAPE_ASPECT_RELATIONSHIP'' , ''ACTION_PROPERTY''] ) ; wr4: ( NOT ( SELF.role.name = ''size id'' ) ) OR item_correlation ( SELF.items , [''DIMENSIONAL_SIZE''] ) ; wr5: ( NOT ( SELF.role.name = ''model change id'' ) ) OR item_correlation ( SELF.items , [''PROPERTY_DEFINITION'' , ''ACTION_PROPERTY''] ) ; wr6: ( NOT ( SELF.role.name = ''alias'' ) ) OR item_correlation ( SELF.items , [''APPLICATION_CONTEXT'' , ''APPROVAL_STATUS'' , ''ASSEMBLY_COMPONENT_USAGE'' , ''CLASS'' , ''CLASS_SYSTEM'' , ''DOCUMENT_TYPE'' , ''DRAUGHTING_MODEL'' , ''GENERAL_PROPERTY'' , ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' , ''ORGANIZATION'' , ''PRODUCT'' , ''PRODUCT_CONCEPT'' , ''PRODUCT_CONCEPT_FEATURE'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''PRODUCT_DEFINITION'' , ''PRODUCT_DEFINITION_FORMATION'' , ''PROPERTY_DEFINITION'' , ''SECURITY_CLASSIFICATION_LEVEL'' , ''SHAPE_REPRESENTATION''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_ineffectivity_assignment SUBTYPE OF (effectivity_assignment); items : SET[1:?] OF effectivity_item; WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''LOT_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''SERIAL_NUMBERED_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_EFFECTIVITY'']* TYPEOF ( SELF.assigned_effectivity ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_name_assignment SUBTYPE OF (name_assignment); items : SET[1:?] OF name_item; WHERE wr1: ( NOT ( SELF.role.name = ''kinematic element name'' ) ) OR item_correlation ( SELF.items , [''KINEMATIC_STRUCTURE'' , ''KINEMATIC_JOINT'' , ''KINEMATIC_LINK''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_organization_assignment SUBTYPE OF (organization_assignment); items : SET[1:?] OF organization_item; WHERE wr1: ( NOT ( SELF.role.name = ''organization in contract'' ) ) OR item_correlation ( SELF.items , [''CONTRACT''] ) ; wr2: ( NOT ( SELF.role.name = ''signing for contract'' ) ) OR item_correlation ( SELF.items , [''APPLIED_ORGANIZATION_ASSIGNMENT''] ) ; wr3: ( NOT ( SELF.role.name = ''validity context'' ) ) OR item_correlation ( SELF.items , [''ACTION_PROPERTY'' , ''RESOURCE_PROPERTY'' , ''PROPERTY_DEFINITION''] ) ; wr4: ( NOT ( SELF.role.name = ''alias scope'' ) ) OR item_correlation ( SELF.items , [''APPLIED_IDENTIFICATION_ASSIGNMENT''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_organizational_project_assignment SUBTYPE OF (organizational_project_assignment); items : SET[1:?] OF organizational_project_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_person_and_organization_assignment SUBTYPE OF (person_and_organization_assignment); items : SET[1:?] OF person_and_organization_item; WHERE wr1: ( NOT ( SELF.role.name = ''signing for contract'' ) ) OR item_correlation ( SELF.items , [''APPLIED_ORGANIZATION_ASSIGNMENT''] ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_presented_item SUBTYPE OF (presented_item); items : SET[1:?] OF presented_item_select; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_security_classification_assignment SUBTYPE OF (security_classification_assignment); items : SET[1:?] OF security_classification_item; END_ENTITY; -- 10303-214: automotive_design ENTITY applied_time_interval_assignment SUBTYPE OF (time_interval_assignment); items : SET[1:?] OF time_interval_item; END_ENTITY; -- 10303-214: automotive_design ENTITY approval; status : approval_status; level : label; END_ENTITY; -- 10303-41: approval_schema ENTITY approval_assignment ABSTRACT SUPERTYPE; assigned_approval : approval; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY approval_date_time; date_time : date_time_select; dated_approval : approval; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: approval_schema ENTITY approval_person_organization; person_organization : person_organization_select; authorized_approval : approval; role : approval_role; END_ENTITY; -- 10303-41: approval_schema ENTITY approval_relationship; name : label; description : OPTIONAL text; relating_approval : approval; related_approval : approval; END_ENTITY; -- 10303-41: approval_schema ENTITY approval_role; role : label; DERIVE description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: approval_schema ENTITY approval_status; name : label; END_ENTITY; -- 10303-41: approval_schema ENTITY approximation_tolerance; tolerance : tolerance_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY approximation_tolerance_deviation; tessellation_type : approximation_method; tolerances : SET[1:2] OF tolerance_deviation_select; definition_space : product_or_presentation_space; WHERE wr1: ( HIINDEX ( SELF.tolerances ) = 1 ) XOR ( TYPEOF ( SELF.tolerances[1] ) <> TYPEOF ( SELF.tolerances[2] ) ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY approximation_tolerance_parameter; tolerances : SET[1:2] OF tolerance_parameter_select; WHERE wr1: ( HIINDEX ( SELF.tolerances ) = 1 ) XOR ( TYPEOF ( SELF.tolerances[1] ) <> TYPEOF ( SELF.tolerances[2] ) ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY area_in_set; area : presentation_area; in_set : presentation_set; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY area_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''AREA_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY area_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 2.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY asin_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY assembly_component_usage SUPERTYPE OF (ONEOF(next_assembly_usage_occurrence, specified_higher_usage_occurrence, promissory_usage_occurrence)) SUBTYPE OF (product_definition_usage); reference_designator : OPTIONAL identifier; END_ENTITY; -- 10303-44: product_structure_schema ENTITY assembly_component_usage_substitute; name : label; definition : OPTIONAL text; base : assembly_component_usage; substitute : assembly_component_usage; UNIQUE ur1 : base,substitute; WHERE wr1:base.relating_product_definition:=:substitute. relating_product_definition; wr2:base:<>:substitute; END_ENTITY; -- 10303-44: product_structure_schema ENTITY atan_function SUBTYPE OF (binary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY attribute_classification_assignment ABSTRACT SUPERTYPE; assigned_class : group; attribute_name : label; role : classification_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY attribute_language_assignment SUBTYPE OF (attribute_classification_assignment); items : SET[1:?] OF attribute_language_item; DERIVE language : label := SELF\attribute_classification_assignment. assigned_class.name; WHERE wr1:SELF\attribute_classification_assignment.role.name IN [''primary'' , ''translated'']; wr2:''AUTOMOTIVE_DESIGN.'' + ''LANGUAGE'' IN TYPEOF ( SELF\attribute_classification_assignment.assigned_class ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY attribute_value_assignment ABSTRACT SUPERTYPE; attribute_name : label; attribute_value : attribute_type; role : attribute_value_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY attribute_value_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY axis1_placement SUBTYPE OF (placement); axis : OPTIONAL direction; DERIVE z : direction := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0])); WHERE wr1:SELF\geometric_representation_item.dim = 3; END_ENTITY; -- 10303-42: geometry_schema ENTITY axis2_placement_2d SUBTYPE OF (placement); ref_direction : OPTIONAL direction; DERIVE p : LIST[2:2] OF direction := build_2axes(ref_direction); WHERE wr1:SELF\geometric_representation_item.dim = 2; END_ENTITY; -- 10303-42: geometry_schema ENTITY axis2_placement_3d SUBTYPE OF (placement); axis : OPTIONAL direction; ref_direction : OPTIONAL direction; DERIVE p : LIST[3:3] OF direction := build_axes(axis,ref_direction); WHERE wr1:SELF\placement.location.dim = 3; wr2: ( NOT ( EXISTS ( axis ) ) ) OR ( axis.dim = 3 ) ; wr3: ( NOT ( EXISTS ( ref_direction ) ) ) OR ( ref_direction.dim = 3 ) ; wr4: ( NOT ( EXISTS ( axis ) ) ) OR ( NOT ( EXISTS ( ref_direction ) ) ) OR ( cross_product ( axis , ref_direction ) .magnitude>0.0 ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY b_spline_curve SUPERTYPE OF (ONEOF(uniform_curve,b_spline_curve_with_knots, quasi_uniform_curve,bezier_curve) ANDOR rational_b_spline_curve) SUBTYPE OF (bounded_curve); degree : INTEGER; control_points_list : LIST[2:?] OF cartesian_point; curve_form : b_spline_curve_form; closed_curve : LOGICAL; self_intersect : LOGICAL; DERIVE upper_index_on_control_points : INTEGER := (SIZEOF(control_points_list) - 1); control_points : ARRAY[0:upper_index_on_control_points] OF cartesian_point := list_to_array(control_points_list,0, upper_index_on_control_points); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''UNIFORM_CURVE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''QUASI_UNIFORM_CURVE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''BEZIER_CURVE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE_WITH_KNOTS'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY b_spline_curve_with_knots SUBTYPE OF (b_spline_curve); knot_multiplicities : LIST[2:?] OF INTEGER; knots : LIST[2:?] OF parameter_value; knot_spec : knot_type; DERIVE upper_index_on_knots : INTEGER := SIZEOF(knots); WHERE wr1:constraints_param_b_spline ( degree , upper_index_on_knots , upper_index_on_control_points , knot_multiplicities , knots ) ; wr2: SIZEOF ( knot_multiplicities ) = upper_index_on_knots; END_ENTITY; -- 10303-42: geometry_schema ENTITY b_spline_surface SUPERTYPE OF (ONEOF(b_spline_surface_with_knots,uniform_surface, quasi_uniform_surface,bezier_surface) ANDOR rational_b_spline_surface) SUBTYPE OF (bounded_surface); u_degree : INTEGER; v_degree : INTEGER; control_points_list : LIST[2:?] OF LIST[2:?] OF cartesian_point; surface_form : b_spline_surface_form; u_closed : LOGICAL; v_closed : LOGICAL; self_intersect : LOGICAL; DERIVE u_upper : INTEGER := SIZEOF(control_points_list) - 1; v_upper : INTEGER := SIZEOF(control_points_list[1]) - 1; control_points : ARRAY[0:u_upper] OF ARRAY[0:v_upper] OF cartesian_point := make_array_of_array(control_points_list,0, u_upper,0,v_upper); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''UNIFORM_SURFACE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''QUASI_UNIFORM_SURFACE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''BEZIER_SURFACE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_SURFACE_WITH_KNOTS'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY b_spline_surface_with_knots SUBTYPE OF (b_spline_surface); u_multiplicities : LIST[2:?] OF INTEGER; v_multiplicities : LIST[2:?] OF INTEGER; u_knots : LIST[2:?] OF parameter_value; v_knots : LIST[2:?] OF parameter_value; knot_spec : knot_type; DERIVE knot_u_upper : INTEGER := SIZEOF(u_knots); knot_v_upper : INTEGER := SIZEOF(v_knots); WHERE wr1:constraints_param_b_spline ( SELF\b_spline_surface. u_degree , knot_u_upper , SELF\b_spline_surface.u_upper , u_multiplicities , u_knots ) ; wr2:constraints_param_b_spline ( SELF\b_spline_surface. v_degree , knot_v_upper , SELF\b_spline_surface.v_upper , v_multiplicities , v_knots ) ; wr3: SIZEOF ( u_multiplicities ) = knot_u_upper; wr4: SIZEOF ( v_multiplicities ) = knot_v_upper; END_ENTITY; -- 10303-42: geometry_schema ENTITY background_colour SUBTYPE OF (colour); presentation : area_or_view; UNIQUE ur1 : presentation; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY barring_hole SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''hole profile'' ) AND ( sa.description = ''closed profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'']* TYPEOF ( sar. relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''barring profile'' ) AND ( sa.description = ''closed profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) ) ) = 1 ) ) ) = 1; wr3: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {1<=SIZEOF ( pdr. used_representation.items ) <=2} ) ) = 1 ) ; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''base radius'' ] ) ) ) >0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <>1 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY bead SUBTYPE OF (feature_definition); WHERE wr1: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) >2 ) ) ) = 0 ) ; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''base radius'' ] ) ) ) >0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) >1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''sweep path'' ) AND ( sa.description = ''path feature component occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''bead profile'' ) AND ( sa.description = ''open profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'']* TYPEOF ( sar. relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''end condition'' ) AND ( sa.description = ''bead end occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''bead end usage'' ) AND ( sar.description = ''end condition at path start'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''BEAD_END'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''end condition'' ) AND ( sa.description = ''bead end occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''bead end usage'' ) AND ( sar.description = ''end condition at path end'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''BEAD_END'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY bead_end SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [''linear'' , ''open'' , ''radiused'']; wr3: ( SELF.description<>''linear'' ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) >0 ) ; wr4: ( SELF.description<>''linear'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr5: ( SELF.description<>''linear'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''end length'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr6: ( SELF.description<>''linear'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''end shape'' ) AND ( i\ descriptive_representation_item.description IN [''straight'' , ''tapered''] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1 ) ; wr7: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''bead end usage'' ) AND ( sar.description IN [ ''end condition at path start'' , ''end condition at path end'' ] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''BEAD'' IN TYPEOF ( sar.related_shape_aspect.of_shape. definition ) ) AND ( sar.related_shape_aspect.of_shape. definition\ characterized_object.name = ''end condition'' ) AND ( sar.related_shape_aspect.of_shape.definition\ characterized_object.description = ''bead end occurrence'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY bezier_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- 10303-42: geometry_schema ENTITY bezier_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- 10303-42: geometry_schema ENTITY binary_boolean_expression ABSTRACT SUPERTYPE OF (ONEOF(xor_expression,equals_expression)) SUBTYPE OF (boolean_expression,binary_generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY binary_function_call ABSTRACT SUPERTYPE OF (atan_function) SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY binary_generic_expression ABSTRACT SUPERTYPE SUBTYPE OF (generic_expression); operands : LIST[2:2] OF generic_expression; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY binary_numeric_expression ABSTRACT SUPERTYPE OF (ONEOF(minus_expression, div_expression, mod_expression, slash_expression,power_expression, binary_function_call )) SUBTYPE OF (numeric_expression,binary_generic_expression); SELF\binary_generic_expression.operands : LIST[2:2] OF numeric_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY block SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY boolean_expression ABSTRACT SUPERTYPE OF (ONEOF(simple_boolean_expression, unary_boolean_expression, binary_boolean_expression, multiple_arity_boolean_expression, comparison_expression, interval_expression)) SUBTYPE OF (expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY boolean_literal SUBTYPE OF (simple_boolean_expression,generic_literal); the_value : BOOLEAN; END_ENTITY; -- 13584-20: expressions_schema ENTITY boolean_result SUBTYPE OF (geometric_representation_item); operator : boolean_operator; first_operand : boolean_operand; second_operand : boolean_operand; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY boolean_variable SUBTYPE OF (simple_boolean_expression,variable); END_ENTITY; -- 13584-20: expressions_schema ENTITY boss SUBTYPE OF (feature_definition); WHERE wr1:SELF.description IN [''circular'' , ''rectangular'' , ''complex'']; wr2: ( SELF.description<>''circular'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''circular profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1 ) ; wr3: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''enclosed boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'']* TYPEOF ( sar. relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1 ) ; wr4: ( SELF.description<>''rectangular'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''rectangular profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1 ) ; wr5: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {1<=SIZEOF ( pdr. used_representation.items ) <=2} ) ) ) = 0 ) ; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''fillet radius'' ] ) ) ) >0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''fillet radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) >1 ) ) ) = 0; wr8: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''boss hight occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''boss hight'' ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description = ''linear'' ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''top condition occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''boss top usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''BOSS_TOP'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr10: NOT ( SELF.description IN [''rectangular'' , ''complex''] ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''change in boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description IN [ ''angle taper'' , ''directed taper'' ] ) ) ) = 1 ) ) ) <=1 ) ; wr11: ( SELF.description<>''circular'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''change in diameter occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description IN [ ''angle taper'' , ''diameter taper'' ] ) ) ) = 1 ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY boss_top SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [''planar'' , ''complex'']; wr3: ( SELF.description<>''planar'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr4: ( SELF.description<>''planar'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''LOCATION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr5: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr6: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''boss top usage'' ) AND ( sar.description IN [ ''boss height start'' , ''boss height end'' ] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''BOSS'' IN TYPEOF ( sar. related_shape_aspect ) ) AND ( sar.related_shape_aspect. name = ''top condition occurrence'' ) ) ) = 1; wr7: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) >1 ) ) ) = 0 ) ; wr8: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( ( SIZEOF ( pdr. used_representation.items ) = 0 ) XOR ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''top radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY boundary_curve SUBTYPE OF (composite_curve_on_surface); WHERE wr1:SELF\composite_curve.closed_curve; END_ENTITY; -- 10303-42: geometry_schema ENTITY bounded_curve SUPERTYPE OF (ONEOF(polyline,b_spline_curve,trimmed_curve,bounded_pcurve, bounded_surface_curve,composite_curve)) SUBTYPE OF (curve); END_ENTITY; -- 10303-42: geometry_schema ENTITY bounded_pcurve SUBTYPE OF (pcurve,bounded_curve); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''BOUNDED_CURVE'' IN TYPEOF ( SELF\pcurve.reference_to_curve.items[1] ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY bounded_surface SUPERTYPE OF (ONEOF(b_spline_surface,rectangular_trimmed_surface, curve_bounded_surface,rectangular_composite_surface)) SUBTYPE OF (surface); END_ENTITY; -- 10303-42: geometry_schema ENTITY bounded_surface_curve SUBTYPE OF (surface_curve,bounded_curve); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''BOUNDED_CURVE'' IN TYPEOF ( SELF\surface_curve.curve_3d ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY box_domain; corner : cartesian_point; xlength : positive_length_measure; ylength : positive_length_measure; zlength : positive_length_measure; WHERE wr1: SIZEOF ( QUERY ( item <* USEDIN ( SELF , '''' ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''BOXED_HALF_SPACE'' IN TYPEOF ( item ) ) ) ) = 0; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY boxed_half_space SUBTYPE OF (half_space_solid); enclosure : box_domain; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY brep_with_voids SUBTYPE OF (manifold_solid_brep); voids : SET[1:?] OF oriented_closed_shell; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY calendar_date SUBTYPE OF (date); day_component : day_in_month_number; month_component : month_in_year_number; WHERE wr1:valid_calendar_date ( SELF ) ; END_ENTITY; -- 10303-41: date_time_schema ENTITY camera_image SUBTYPE OF (mapped_item); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''CAMERA_USAGE'' IN TYPEOF ( SELF\mapped_item.mapping_source ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''PLANAR_BOX'' IN TYPEOF ( SELF\mapped_item.mapping_target ) ; wr3:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( SELF ) ; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY camera_image_2d_with_scale SUBTYPE OF (camera_image); DERIVE scale : positive_ratio_measure := (SELF\mapped_item.mapping_target\ planar_extent.size_in_x) / (SELF\mapped_item.mapping_source. mapping_origin\camera_model_d2.view_window\ planar_extent.size_in_x); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_MODEL_D2'' IN TYPEOF ( SELF\mapped_item.mapping_source.mapping_origin ) ) ; wr2:aspect_ratio ( SELF\mapped_item.mapping_target ) = aspect_ratio ( SELF\mapped_item.mapping_source. mapping_origin\ camera_model_d2.view_window ) ; wr3:SELF\mapped_item.mapping_source.mapping_origin\ camera_model_d2.view_window_clipping; END_ENTITY; -- 10303-214: automotive_design ENTITY camera_image_3d_with_scale SUBTYPE OF (camera_image); DERIVE scale : positive_ratio_measure := ((SELF\mapped_item.mapping_target\ planar_extent.size_in_x) / (SELF\mapped_item.mapping_source. mapping_origin\camera_model_d3.perspective_of_volume .view_window.size_in_x)); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''CAMERA_MODEL_D3'' IN TYPEOF ( SELF\mapped_item.mapping_source.mapping_origin ) ) ; wr2:aspect_ratio ( SELF\mapped_item.mapping_target ) = aspect_ratio ( SELF\mapped_item.mapping_source. mapping_origin\ camera_model_d3.perspective_of_volume. view_window ) ; wr3:SELF\mapped_item.mapping_source.mapping_origin\ camera_model_d3.perspective_of_volume.front_plane_clipping AND SELF\mapped_item.mapping_source.mapping_origin\ camera_model_d3.perspective_of_volume. view_volume_sides_clipping; wr4: ( SELF\mapped_item.mapping_target\ planar_extent. size_in_x>0 ) AND ( SELF\mapped_item.mapping_target\ planar_extent.size_in_y>0 ) ; wr5: ( SELF\mapped_item.mapping_source.mapping_origin\ camera_model_d3.perspective_of_volume.view_window. size_in_x>0 ) AND ( SELF\mapped_item.mapping_source. mapping_origin\ camera_model_d3.perspective_of_volume. view_window.size_in_y>0 ) ; wr6: ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_2D'' IN TYPEOF ( SELF\mapped_item.mapping_target\ planar_box.placement ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_3D'' IN TYPEOF ( SELF\mapped_item.mapping_target\ planar_box. placement ) ) ; END_ENTITY; -- 10303-517: aic_mechanical_design_geometric_presentation ENTITY camera_model SUPERTYPE OF (ONEOF(camera_model_d2,camera_model_d3)) SUBTYPE OF (geometric_representation_item); WHERE wr1: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ITEM_DEFINED_TRANSFORMATION.'' + ''TRANSFORM_ITEM_1'' ) ) + SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.''+ ''MAPPING_ORIGIN'' ) ) ) >0; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM.''+ ''ITEM'' ) ) = 0; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY camera_model_d2 SUBTYPE OF (camera_model); view_window : planar_box; view_window_clipping : BOOLEAN; WHERE wr1:SELF\geometric_representation_item.dim = 2; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY camera_model_d3 SUBTYPE OF (camera_model); view_reference_system : axis2_placement_3d; perspective_of_volume : view_volume; WHERE wr1: ( dot_product ( SELF.view_reference_system.p[3] , SELF.perspective_of_volume.view_window.placement.p[3] ) = 1.0 ) AND ( SELF.view_reference_system.location. coordinates[3] = SELF.perspective_of_volume.view_window. placement.location.coordinates[3] ) ; wr2:SELF\geometric_representation_item.dim = 3; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY camera_model_d3_with_hlhsr SUBTYPE OF (camera_model_d3); hidden_line_surface_removal : BOOLEAN; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY camera_usage SUBTYPE OF (representation_map); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''PRESENTATION_REPRESENTATION'' IN TYPEOF ( SELF\representation_map. mapped_representation ) ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''CAMERA_MODEL'' IN TYPEOF ( SELF\representation_map.mapping_origin ) ; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY cartesian_point SUBTYPE OF (point); coordinates : LIST[1:3] OF length_measure; END_ENTITY; -- 10303-42: geometry_schema ENTITY cartesian_transformation_operator SUPERTYPE OF (ONEOF(cartesian_transformation_operator_2d, cartesian_transformation_operator_3d)) SUBTYPE OF (geometric_representation_item, functionally_defined_transformation ); axis1 : OPTIONAL direction; axis2 : OPTIONAL direction; local_origin : cartesian_point; scale : OPTIONAL REAL; DERIVE scl : REAL := NVL(scale,1.0); WHERE wr1:scl>0.0; END_ENTITY; -- 10303-42: geometry_schema ENTITY cartesian_transformation_operator_2d SUBTYPE OF (cartesian_transformation_operator); DERIVE u : LIST[2:2] OF direction := base_axis(2,SELF\ cartesian_transformation_operator.axis1,SELF\ cartesian_transformation_operator.axis2,?); WHERE wr1:SELF\geometric_representation_item.dim = 2; END_ENTITY; -- 10303-42: geometry_schema ENTITY cartesian_transformation_operator_3d SUBTYPE OF (cartesian_transformation_operator); axis3 : OPTIONAL direction; DERIVE u : LIST[3:3] OF direction := base_axis(3,SELF\ cartesian_transformation_operator.axis1,SELF\ cartesian_transformation_operator.axis2,axis3); WHERE wr1:SELF\geometric_representation_item.dim = 3; END_ENTITY; -- 10303-42: geometry_schema ENTITY celsius_temperature_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''THERMODYNAMIC_TEMPERATURE_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY centre_of_symmetry SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( QUERY ( sadr <* SELF\derived_shape_aspect. deriving_relationships | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''SYMMETRIC_SHAPE_ASPECT'' IN TYPEOF ( sadr\ shape_aspect_relationship.related_shape_aspect ) ) ) ) = 0; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY certification; name : label; purpose : text; kind : certification_type; END_ENTITY; -- 10303-41: certification_schema ENTITY certification_assignment ABSTRACT SUPERTYPE; assigned_certification : certification; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY certification_type; description : label; END_ENTITY; -- 10303-41: certification_schema ENTITY chamfer SUBTYPE OF (transition_feature); WHERE wr1: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CHAMFER_OFFSET'' IN TYPEOF ( sar.related_shape_aspect ) ) AND ( sar. related_shape_aspect.description = ''first offset'' ) ) ) = 1; wr2: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CHAMFER_OFFSET'' IN TYPEOF ( sar.related_shape_aspect ) ) AND ( sar. related_shape_aspect.description = ''second offset'' ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''chamfer face'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY chamfer_offset SUBTYPE OF (shape_aspect); WHERE wr1:SELF.description IN [ ''first offset'' , ''second offset'' ]; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr4: ( SELF.description<> ''first offset'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''offset amount'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr5: ( SELF.description<> ''second offset'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''offset amount'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) OR ( SIZEOF ( QUERY ( i <* pdr.used_representation. items | ( i.name = ''offset angle'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) ) = 1 ) ; wr6: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CHAMFER'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) >=1; wr7: ( SELF.description<> ''first offset'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''first face shape'' ) ) ) = 1 ) ; wr8: ( SELF.description<> ''second offset'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''second face shape'' ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY character_glyph_symbol SUBTYPE OF (symbol_representation); character_box : planar_extent; baseline_ratio : ratio_measure; DERIVE box_height : length_measure := character_box.size_in_y; WHERE wr1:{0.0<=baseline_ratio<=1.0}; wr2:item_in_context ( SELF.character_box , SELF\representation. context_of_items ) ; wr3:''AUTOMOTIVE_DESIGN.''+ ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( SELF.box_height ) ; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY characterized_class SUBTYPE OF (characterized_object,class); END_ENTITY; -- 10303-214: automotive_design ENTITY characterized_object; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY circle SUBTYPE OF (conic); radius : positive_length_measure; END_ENTITY; -- 10303-42: geometry_schema ENTITY circular_closed_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY circular_pattern SUBTYPE OF (replicate_feature); WHERE wr1: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {2<=SIZEOF ( pdr. used_representation.items ) <=5} ) ) = 1 ) ; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base feature rotation'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''number of features'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''angular spacing'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY circular_runout_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <=2; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY class SUBTYPE OF (group); END_ENTITY; -- 10303-214: automotive_design ENTITY class_system SUBTYPE OF (group); END_ENTITY; -- 10303-214: automotive_design ENTITY class_usage_effectivity_context_assignment SUBTYPE OF (effectivity_context_assignment); items : SET[1:?] OF class_usage_effectivity_context_item; WHERE wr1:SELF.role.name = ''class usage influence'' ; wr2: SIZEOF ( QUERY ( i <* SELF.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( i ) ) ) ) = 0; wr3: ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EFFECTIVITY_ASSIGNMENT'' IN TYPEOF ( SELF.assigned_effectivity_assignment ) ) AND ( SIZEOF ( TYPEOF ( SELF.assigned_effectivity_assignment. assigned_effectivity ) ) = 1 ) AND ( SELF.assigned_effectivity_assignment.assigned_effectivity. id = ''class usage'' ) AND ( SIZEOF ( QUERY ( i <* SELF.assigned_effectivity_assignment\ applied_effectivity_assignment.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' IN TYPEOF ( i ) ) ) ) = 0 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY classification_assignment ABSTRACT SUPERTYPE; assigned_class : group; role : classification_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY classification_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY closed_path_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''profile shape'' ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY closed_shell SUBTYPE OF (connected_face_set); END_ENTITY; -- 10303-42: topology_schema ENTITY coaxiality_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <=2; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY colour; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY colour_rgb SUBTYPE OF (colour_specification); red : REAL; green : REAL; blue : REAL; WHERE wr1:{0.0<=red<=1.0}; wr2:{0.0<=green<=1.0}; wr3:{0.0<=blue<=1.0}; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY colour_specification SUBTYPE OF (colour); name : label; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY common_datum SUBTYPE OF (composite_shape_aspect,datum); WHERE wr1: SIZEOF ( SELF.component_relationships ) = 2; wr2: SIZEOF ( QUERY ( sar <* SELF.component_relationships | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''DATUM'' IN TYPEOF ( sar. related_shape_aspect ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.''+ ''COMMON_DATUM'' IN TYPEOF ( sar.related_shape_aspect ) ) ) ) ) = 0; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY comparison_equal SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_expression ABSTRACT SUPERTYPE OF (ONEOF(comparison_equal,comparison_greater, comparison_greater_equal,comparison_less, comparison_less_equal,comparison_not_equal, like_expression)) SUBTYPE OF (boolean_expression,binary_generic_expression); SELF\binary_generic_expression.operands : LIST[2:2] OF expression; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[1] ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[2] ) ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''BOOLEAN_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[1] ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''BOOLEAN_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[2] ) ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[1] ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF\binary_generic_expression.operands[2] ) ) ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_greater SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_greater_equal SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_less SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_less_equal SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY comparison_not_equal SUBTYPE OF (comparison_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY composite_curve SUBTYPE OF (bounded_curve); segments : LIST[1:?] OF composite_curve_segment; self_intersect : LOGICAL; DERIVE n_segments : INTEGER := SIZEOF(segments); closed_curve : LOGICAL := segments[n_segments]. transition <> discontinuous; WHERE wr1: ( ( NOT closed_curve ) AND ( SIZEOF ( QUERY ( temp <* segments | temp.transition = discontinuous ) ) = 1 ) ) OR ( ( closed_curve ) AND ( SIZEOF ( QUERY ( temp <* segments | temp.transition = discontinuous ) ) = 0 ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY composite_curve_on_surface SUPERTYPE OF (boundary_curve) SUBTYPE OF (composite_curve); DERIVE basis_surface : SET[0:2] OF surface := get_basis_surface(SELF); WHERE wr1: SIZEOF ( basis_surface ) >0; wr2:constraints_composite_curve_on_surface ( SELF ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY composite_curve_segment SUBTYPE OF (founded_item); transition : transition_code; same_sense : BOOLEAN; parent_curve : curve; INVERSE using_curves : BAG[1:?] OF composite_curve FOR segments; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''BOUNDED_CURVE'' IN TYPEOF ( parent_curve ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY composite_hole SUBTYPE OF (compound_feature); WHERE wr1:SELF\characterized_object.description IN [''counterbore'' , ''countersunk'']; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( sa.name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) ) = 2 ) ) ) = 1; wr3: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( sa.name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) ) = 2 ) AND ( SIZEOF ( get_round_holes_for_composite_hole ( bag_to_set ( USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) ) ) ) = 2 ) ) ) = 1; wr4: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( sa.name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( rh1 <* get_round_holes_for_composite_hole ( bag_to_set ( USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) ) ) | ( SIZEOF ( QUERY ( rh2 <* get_round_holes_for_composite_hole ( bag_to_set ( USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) ) ) | ( rh1:<>:rh2 ) AND ( get_diameter_for_round_hole ( rh1 ) = get_diameter_for_round_hole ( rh2 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 1; wr5: ( SELF.description<>''countersunk'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( sa. name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( rh <* get_round_holes_for_composite_hole ( bag_to_set ( USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) ) ) | ( SIZEOF ( QUERY ( sa1 <* get_shape_aspects ( rh ) | ( sa.description = ''change in diameter occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa1 , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'' ) | ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1 ) ) ) = 1 ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY composite_shape_aspect SUBTYPE OF (shape_aspect); INVERSE component_relationships : SET[2:?] OF shape_aspect_relationship FOR relating_shape_aspect; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY composite_text SUBTYPE OF (geometric_representation_item); collected_text : SET[2:?] OF text_or_character; WHERE wr1:acyclic_composite_text ( SELF , SELF.collected_text ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY composite_text_with_associated_curves SUBTYPE OF (composite_text); associated_curves : SET[1:?] OF curve; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY composite_text_with_blanking_box SUBTYPE OF (composite_text); blanking : planar_box; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY composite_text_with_extent SUBTYPE OF (composite_text); extent : planar_extent; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY compound_feature SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name IN [ ''compound feature in solid'' , ''compound feature in panel'' ] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) ) ) = 1; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) ) ) >0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''INSTANCED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''PLACED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_AREA'' , ''AUTOMOTIVE_DESIGN.'' + ''TRANSITION_FEATURE'']* TYPEOF ( sar.related_shape_aspect ) ) = 1 ) ) ) >0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACED_FEATURE'' IN TYPEOF ( sar.related_shape_aspect ) ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( sar. related_shape_aspect.of_shape.definition ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''element placement'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) <>1 ) ) ) >0 ) ) ) >0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''TRANSITION_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''BOSS'' , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_AREA'']* TYPEOF ( sar. related_shape_aspect ) ) + SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SLOT'' , ''AUTOMOTIVE_DESIGN.'' + ''POCKET'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUND_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''RIB'' , ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'']* TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) = 0 ) ) ) >0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''compound feature in panel'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''TRANSITION_FEATURE'']* TYPEOF ( sar.related_shape_aspect ) ) + SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''BEAD'' , ''AUTOMOTIVE_DESIGN.'' + ''HOLE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE'' , ''AUTOMOTIVE_DESIGN.'' + ''LOCATOR'' , ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'']* TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) = 0 ) ) ) >0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''compound feature in panel'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' IN TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) AND ( sar.related_shape_aspect.name = ''compound feature in solid'' ) ) ) >0 ) ) ) + SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''compound feature in solid'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' IN TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) AND ( sar.related_shape_aspect.name = ''compound feature in panel'' ) ) ) >0 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY compound_representation_item SUBTYPE OF (representation_item); item_element : compound_item_definition; END_ENTITY; -- 10303-43: representation_schema ENTITY compound_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF.context_of_items ) ) AND ( SELF.context_of_items\ geometric_representation_context. coordinate_space_dimension = 3 ) ; wr2: SIZEOF ( QUERY ( cbsr_i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''EDGE_BASED_WIREFRAME_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''FACE_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_3D'']* TYPEOF ( cbsr_i ) ) <>1 ) ) = 0; wr3: SIZEOF ( QUERY ( cbsr_i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''EDGE_BASED_WIREFRAME_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''FACE_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'']* TYPEOF ( cbsr_i ) ) = 1 ) ) >0; wr4: SIZEOF ( QUERY ( cbsr_i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( cbsr_i ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'']* TYPEOF ( cbsr_i\ mapped_item.mapping_source ) ) <>1 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY concat_expression SUBTYPE OF (string_expression,multiple_arity_generic_expression); SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF string_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY concentricity_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) = 1; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY concept_feature_operator; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-44: product_concept_schema ENTITY concept_feature_relationship; name : label; description : OPTIONAL text; relating_product_concept_feature : product_concept_feature; related_product_concept_feature : product_concept_feature; END_ENTITY; -- 10303-44: product_concept_schema ENTITY concept_feature_relationship_with_condition SUBTYPE OF (concept_feature_relationship); conditional_operator : concept_feature_operator; END_ENTITY; -- 10303-44: product_concept_schema ENTITY conditional_concept_feature SUBTYPE OF (product_concept_feature); condition : concept_feature_relationship_with_condition; END_ENTITY; -- 10303-44: product_concept_schema ENTITY configurable_item SUBTYPE OF (configuration_item); item_concept_feature : SET[1:?] OF product_concept_feature_association; END_ENTITY; -- 10303-44: configuration_management_schema ENTITY configuration_definition; pair_values : SET[1:?] OF pair_value; t_parameter : motion_parameter_measure; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY configuration_design; configuration : configuration_item; design : configuration_design_item; DERIVE name : label := get_name_value(SELF); description : text := get_description_value(SELF); UNIQUE ur1 : configuration,design; WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-44: configuration_management_schema ENTITY configuration_effectivity SUBTYPE OF (product_definition_effectivity); configuration : configuration_design; UNIQUE ur1 : configuration,usage,id; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''PRODUCT_DEFINITION_USAGE'' IN TYPEOF ( SELF\product_definition_effectivity.usage ) ; END_ENTITY; -- 10303-44: configuration_management_schema ENTITY configuration_interpolation; previous_configuration_definition : configuration_definition; next_configuration_definition : configuration_definition; interpolation : interpolation_type; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY configuration_item; id : identifier; name : label; description : OPTIONAL text; item_concept : product_concept; purpose : OPTIONAL label; END_ENTITY; -- 10303-44: configuration_management_schema ENTITY configured_effectivity_assignment SUBTYPE OF (effectivity_assignment); items : SET[1:?] OF configured_effectivity_item; WHERE wr1: ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''EFFECTIVITY'']* TYPEOF ( SELF.assigned_effectivity ) ) = 1 ) AND ( SELF.assigned_effectivity.id = ''configuration validity'' ) ; wr2: SIZEOF ( SELF.items ) = 1; wr3: SIZEOF ( QUERY ( i <* SELF.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( i ) ) OR NOT ( i\ product_definition.frame_of_reference. name IN [ ''conceptual definition'' , ''part occurrence'' , ''functional definition'' , ''alternative definition'' ] ) ) ) = 0; wr4:SELF.role.name IN [''design'' , ''usage'']; wr5: ( SELF.role.name<>''design'' ) OR ( SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( i ) ) AND ( i\ product_definition.frame_of_reference.name = ''part occurrence'' ) ) ) = 0 ) ; wr6: ( SELF.role.name<>''usage'' ) OR ( SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( i ) ) AND ( i\ product_definition. frame_of_reference.name = ''conceptual definition'' ) ) ) = 0 ) ; wr7:SELF.role.description IN [''exception'' , ''inherited'' , ''local'']; wr8: SIZEOF ( QUERY ( x <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''EFFECTIVITY_CONTEXT_ASSIGNMENT.'' + ''ASSIGNED_EFFECTIVITY_ASSIGNMENT'' ) | ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURED_EFFECTIVITY_CONTEXT_ASSIGNMENT'' IN TYPEOF ( x ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY configured_effectivity_context_assignment SUBTYPE OF (effectivity_context_assignment); items : SET[1:?] OF configured_effectivity_context_item; WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''CONFIGURED_EFFECTIVITY_ASSIGNMENT'' IN TYPEOF ( SELF.assigned_effectivity_assignment ) ; wr2: SIZEOF ( SELF.items ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY conic SUPERTYPE OF (ONEOF(circle,ellipse,hyperbola,parabola)) SUBTYPE OF (curve); position : axis2_placement; END_ENTITY; -- 10303-42: geometry_schema ENTITY conical_surface SUBTYPE OF (elementary_surface); radius : length_measure; semi_angle : plane_angle_measure; WHERE wr1:radius>=0.0; END_ENTITY; -- 10303-42: geometry_schema ENTITY connected_edge_set SUBTYPE OF (topological_representation_item); ces_edges : SET[1:?] OF edge; END_ENTITY; -- 10303-42: topology_schema ENTITY connected_face_set SUPERTYPE OF (ONEOF(closed_shell,open_shell)) SUBTYPE OF (topological_representation_item); cfs_faces : SET[1:?] OF face; END_ENTITY; -- 10303-42: topology_schema ENTITY connected_face_sub_set SUBTYPE OF (connected_face_set); parent_face_set : connected_face_set; END_ENTITY; -- 10303-42: topology_schema ENTITY constructive_geometry_representation SUBTYPE OF (representation); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF.context_of_items ) ) AND ( {2<=SELF.context_of_items\ geometric_representation_context. coordinate_space_dimension<=3} ) ; wr2: SIZEOF ( QUERY ( cgr_i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''CURVE'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE'' , ''AUTOMOTIVE_DESIGN.'' + ''FACE'' , ''AUTOMOTIVE_DESIGN.'' + ''POINT'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE'' , ''AUTOMOTIVE_DESIGN.'' + ''FACE_SURFACE'' , ''AUTOMOTIVE_DESIGN.'' + ''VERTEX_POINT'']* TYPEOF ( cgr_i ) ) <>1 ) ) = 0; wr3: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_2'' ) ) >0; wr4: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.'' + ''MAPPED_REPRESENTATION'' ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY constructive_geometry_representation_relationship SUBTYPE OF (representation_relationship); WHERE wr1: ( SELF.rep_1.context_of_items:=:SELF.rep_2.context_of_items ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF.rep_1.context_of_items ) ) ; wr2:''AUTOMOTIVE_DESIGN.'' + ''CONSTRUCTIVE_GEOMETRY_REPRESENTATION'' IN TYPEOF ( SELF.rep_2 ) ; wr3: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''CONSTRUCTIVE_GEOMETRY_REPRESENTATION'']* TYPEOF ( SELF.rep_1 ) ) = 1; wr4: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY contact_ratio_representation SUBTYPE OF (representation); WHERE wr1: ( SIZEOF ( SELF.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* SELF.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) AND ( i.name = ''ratio value'' ) ) ) = 1 ) ; wr2: ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | pdr.name = ''contact ratio reference'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | ( pdr.name = ''contact ratio reference'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PHYSICALLY_MODELLED_PRODUCT_DEFINITION'' IN TYPEOF ( pdr. definition.definition ) ) ) ) = 1 ) ; wr3: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | SIZEOF ( QUERY ( gpa <* USEDIN ( pdr.definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' IN TYPEOF ( gpa.base_definition ) ) AND ( gpa.base_definition.name = ''surface_condition'' ) ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY context_dependent_invisibility SUBTYPE OF (invisibility); presentation_context : invisibility_context; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY context_dependent_over_riding_styled_item SUBTYPE OF (over_riding_styled_item); style_context : SET[1:2] OF style_context_select; WHERE wr1: ( SIZEOF ( QUERY ( sc <* SELF.style_context | ''AUTOMOTIVE_DESIGN.''+ ''REPRESENTATION'' IN TYPEOF ( sc ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( sc <* SELF.style_context | ''AUTOMOTIVE_DESIGN.''+ ''REPRESENTATION_ITEM'' IN TYPEOF ( sc ) ) ) = 1 ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY context_dependent_shape_representation; representation_relation : shape_representation_relationship; represented_product_relation : product_definition_shape; DERIVE description : text := get_description_value(SELF); name : label := get_name_value(SELF); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''PRODUCT_DEFINITION_RELATIONSHIP'' IN TYPEOF ( SELF.represented_product_relation.definition ) ; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; wr3: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_property_representation_schema ENTITY context_dependent_unit SUBTYPE OF (named_unit); name : label; END_ENTITY; -- 10303-41: measure_schema ENTITY contract; name : label; purpose : text; kind : contract_type; END_ENTITY; -- 10303-41: contract_schema ENTITY contract_assignment ABSTRACT SUPERTYPE; assigned_contract : contract; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY contract_type; description : label; END_ENTITY; -- 10303-41: contract_schema ENTITY conversion_based_unit SUBTYPE OF (named_unit); name : label; conversion_factor : measure_with_unit; END_ENTITY; -- 10303-41: measure_schema ENTITY coordinated_universal_time_offset; hour_offset : INTEGER; minute_offset : OPTIONAL INTEGER; sense : ahead_or_behind; DERIVE actual_minute_offset : INTEGER := NVL(minute_offset,0); WHERE wr1:{0<=hour_offset<=24}; wr2:{0<=actual_minute_offset<=59}; wr3: NOT ( ( ( hour_offset<>0 ) OR ( actual_minute_offset<>0 ) ) AND ( sense = exact ) ) ; END_ENTITY; -- 10303-41: date_time_schema ENTITY cos_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY csg_shape_representation SUBTYPE OF (shape_representation); WHERE wr1:SELF.context_of_items\ geometric_representation_context. coordinate_space_dimension = 3; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CSG_SOLID'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'' , ''AUTOMOTIVE_DESIGN.''+ ''SOLID_REPLICA'' , ''AUTOMOTIVE_DESIGN.''+ ''REVOLVED_FACE_SOLID'' , ''AUTOMOTIVE_DESIGN.''+ ''EXTRUDED_FACE_SOLID'']* TYPEOF ( it ) ) <>1 ) ) = 0; wr3: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''CSG_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source. mapped_representation ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( sr <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SOLID_REPLICA'' IN TYPEOF ( it ) ) | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CSG_SOLID'' , ''AUTOMOTIVE_DESIGN.''+ ''REVOLVED_FACE_SOLID'' , ''AUTOMOTIVE_DESIGN.''+ ''EXTRUDED_FACE_SOLID'']* TYPEOF ( sr\ solid_replica.parent_solid ) ) = 0 ) ) = 0; wr5: SIZEOF ( QUERY ( it <* SELF.items | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'' IN TYPEOF ( it ) ) ) ) >0; END_ENTITY; -- 10303-515: aic_csg ENTITY csg_solid SUBTYPE OF (solid_model); tree_root_expression : csg_select; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY curve SUPERTYPE OF (ONEOF(line,conic,pcurve,surface_curve,offset_curve_2d, offset_curve_3d,curve_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- 10303-42: geometry_schema ENTITY curve_bounded_surface SUBTYPE OF (bounded_surface); basis_surface : surface; boundaries : SET[1:?] OF boundary_curve; implicit_outer : BOOLEAN; WHERE wr1: ( NOT implicit_outer ) OR ( SIZEOF ( QUERY ( temp <* boundaries | ''AUTOMOTIVE_DESIGN.''+ ''OUTER_BOUNDARY_CURVE'' IN TYPEOF ( temp ) ) ) = 0 ) ; wr2: ( NOT ( implicit_outer ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''BOUNDED_SURFACE'' IN TYPEOF ( basis_surface ) ) ; wr3: SIZEOF ( QUERY ( temp <* boundaries | ''AUTOMOTIVE_DESIGN.''+ ''OUTER_BOUNDARY_CURVE'' IN TYPEOF ( temp ) ) ) <=1; wr4: SIZEOF ( QUERY ( temp <* boundaries | ( temp\ composite_curve_on_surface. basis_surface[1]<>SELF.basis_surface ) ) ) = 0; END_ENTITY; -- 10303-42: geometry_schema ENTITY curve_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY curve_replica SUBTYPE OF (curve); parent_curve : curve; transformation : cartesian_transformation_operator; WHERE wr1:transformation.dim = parent_curve.dim; wr2:acyclic_curve_replica ( SELF , parent_curve ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY curve_style; name : label; curve_font : curve_font_or_scaled_curve_font_select; curve_width : size_select; curve_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY curve_style_font; name : label; pattern_list : LIST[1:?] OF curve_style_font_pattern; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY curve_style_font_pattern; visible_segment_length : positive_length_measure; invisible_segment_length : positive_length_measure; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY curve_style_rendering; rendering_method : shading_curve_method; rendering_properties : surface_rendering_properties; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY cylindrical_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY cylindrical_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : cylindrical_pair; lower_limit_actual_translation : translational_range_measure; upper_limit_actual_translation : translational_range_measure; lower_limit_actual_rotation : rotational_range_measure; upper_limit_actual_rotation : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_translation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_translation ) ) ) XOR ( lower_limit_actual_translation1 ) ) = 0; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY datum_feature SUBTYPE OF (shape_aspect); INVERSE feature_basis_relationship : shape_aspect_relationship FOR relating_shape_aspect; WHERE wr1: SIZEOF ( QUERY ( sar <* bag_to_set ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''DATUM'' IN TYPEOF ( sar\ shape_aspect_relationship. related_shape_aspect ) ) ) ) = 0; wr2:SELF\shape_aspect.product_definitional = TRUE; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY datum_feature_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY datum_reference; precedence : INTEGER; referenced_datum : datum; WHERE wr1:precedence>0; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY datum_target SUBTYPE OF (shape_aspect); target_id : identifier; INVERSE target_basis_relationship : shape_aspect_relationship FOR relating_shape_aspect; WHERE wr1: SIZEOF ( QUERY ( sar <* bag_to_set ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''DATUM'' IN TYPEOF ( sar\ shape_aspect_relationship. related_shape_aspect ) ) ) ) = 0; wr2:SELF\shape_aspect.product_definitional = TRUE; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY datum_target_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY default_tolerance_table SUBTYPE OF (representation); WHERE wr1: SIZEOF ( QUERY ( i <* SELF.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''DEFAULT_TOLERANCE_TABLE_CELL'' IN TYPEOF ( i ) ) ) ) = 0; wr2: ( SIZEOF ( QUERY ( rr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_1'' ) | rr.name<> ''general tolerance definition'' ) ) = 0 ) AND ( SIZEOF ( QUERY ( rr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_1'' ) | ( rr.name = ''general tolerance definition'' ) AND ( rr.rep_2.name<> ''default tolerances'' ) ) ) = 0 ) AND ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_2'' ) ) = 0 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY default_tolerance_table_cell SUBTYPE OF (compound_representation_item); WHERE wr1: SIZEOF ( QUERY ( x <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION.'' + ''ITEMS'' ) | ''AUTOMOTIVE_DESIGN.'' + ''DEFAULT_TOLERANCE_TABLE'' IN TYPEOF ( x ) ) ) = 1; wr2:default_tolerance_table_cell_wr2 ( SELF\compound_representation_item.item_element ) ; wr3:default_tolerance_table_cell_wr3 ( SELF\compound_representation_item.item_element ) ; wr4:default_tolerance_table_cell_wr4 ( SELF\compound_representation_item.item_element ) ; wr5:default_tolerance_table_cell_wr5 ( SELF\compound_representation_item.item_element ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY defined_character_glyph SUBTYPE OF (geometric_representation_item); definition : defined_glyph_select; placement : axis2_placement; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY defined_symbol SUBTYPE OF (geometric_representation_item); definition : defined_symbol_select; target : symbol_target; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY definitional_representation SUBTYPE OF (representation); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''PARAMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF\representation.context_of_items ) ; END_ENTITY; -- 10303-43: representation_schema ENTITY degenerate_pcurve SUBTYPE OF (point); basis_surface : surface; reference_to_curve : definitional_representation; WHERE wr1: SIZEOF ( reference_to_curve\ representation.items ) = 1; wr2:''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( reference_to_curve\ representation.items[1] ) ; wr3:reference_to_curve\ representation. items[1]\geometric_representation_item.dim = 2; END_ENTITY; -- 10303-42: geometry_schema ENTITY degenerate_toroidal_surface SUBTYPE OF (toroidal_surface); select_outer : BOOLEAN; WHERE wr1:major_radius1 ) OR ( ( SIZEOF ( elements ) = 1 ) AND ( elements[1].exponent<>1.0 ) ) ; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: measure_schema ENTITY derived_unit_element; unit : named_unit; exponent : REAL; END_ENTITY; -- 10303-41: measure_schema ENTITY derived_unit_variable SUBTYPE OF (derived_unit,variable_semantics); INVERSE associated_variable_environment : environment FOR semantics; END_ENTITY; -- 10303-214: automotive_design ENTITY description_attribute; attribute_value : text; described_item : description_attribute_select; END_ENTITY; -- 10303-41: basic_attribute_schema ENTITY descriptive_representation_item SUBTYPE OF (representation_item); description : text; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY diameter_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY dimension_callout_component_relationship SUBTYPE OF (draughting_callout_relationship); WHERE wr1:SELF.name IN [''prefix'' , ''suffix'']; wr2:''AUTOMOTIVE_DESIGN.''+ ''STRUCTURED_DIMENSION_CALLOUT'' IN TYPEOF ( SELF.relating_draughting_callout ) ; wr3: SIZEOF ( TYPEOF ( SELF.related_draughting_callout ) *[''AUTOMOTIVE_DESIGN.''+ ''LEADER_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''STRUCTURED_DIMENSION_CALLOUT''] ) = 0; wr4:SELF.related_draughting_callout. contents*SELF.relating_draughting_callout.contents = SELF.related_draughting_callout.contents; wr5: ( ( SELF.name = ''prefix'' ) AND ( SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.related_draughting_callout. contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | NOT ( ato.name = ''prefix text'' ) ) ) = 0 ) ) ; wr6: ( ( SELF.name = ''suffix'' ) AND ( SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.related_draughting_callout. contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | NOT ( ato.name = ''suffix text'' ) ) ) = 0 ) ) ; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY dimension_callout_relationship SUBTYPE OF (draughting_callout_relationship); WHERE wr1:SELF.name IN [''primary'' , ''secondary'']; wr2: SIZEOF ( TYPEOF ( SELF.relating_draughting_callout ) *[''AUTOMOTIVE_DESIGN.''+ ''ANGULAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''DIAMETER_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''LEADER_DIRECTED_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''LINEAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''ORDINATE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''RADIUS_DIMENSION''] ) >=1; wr3: SIZEOF ( TYPEOF ( SELF.related_draughting_callout ) *[''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''LEADER_DIRECTED_CALLOUT''] ) = 0; wr4:SELF.related_draughting_callout. contents*SELF.relating_draughting_callout.contents = SELF.related_draughting_callout.contents; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY dimension_curve SUBTYPE OF (annotation_curve_occurrence); WHERE wr1: ( SIZEOF ( QUERY ( dct <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''TERMINATOR_SYMBOL.''+ ''ANNOTATED_CURVE'' ) | ( ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CURVE_TERMINATOR'' IN TYPEOF ( dct ) ) ) ) ) <=2 ) ; wr2: SIZEOF ( QUERY ( dcdc <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT.''+ ''CONTENTS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CURVE_DIRECTED_CALLOUT'' IN TYPEOF ( dcdc ) ) ) ) >=1; wr3: ( SIZEOF ( QUERY ( dct1 <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''TERMINATOR_SYMBOL.''+ ''ANNOTATED_CURVE'' ) | ( ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CURVE_TERMINATOR'' IN TYPEOF ( dct1 ) ) AND ( dct1.role = origin ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( dct2 <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''TERMINATOR_SYMBOL.''+ ''ANNOTATED_CURVE'' ) | ( ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CURVE_TERMINATOR'' IN TYPEOF ( dct2 ) ) AND ( dct2.role = target ) ) ) ) <=1 ) ; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY dimension_curve_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( d_c <* SELF\draughting_callout. contents | ''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE'' IN ( TYPEOF ( d_c ) ) ) ) = 1; wr2: SIZEOF ( SELF\draughting_callout.contents ) >=2; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY dimension_curve_terminator SUBTYPE OF (terminator_symbol); role : dimension_extent_usage; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE'' IN TYPEOF ( SELF\terminator_symbol.annotated_curve ) ; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY dimension_pair SUBTYPE OF (draughting_callout_relationship); WHERE wr1:SELF.name IN [''chained'' , ''parallel'']; wr2: SIZEOF ( TYPEOF ( SELF.relating_draughting_callout ) *[''AUTOMOTIVE_DESIGN.''+ ''ANGULAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''DIAMETER_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''LINEAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''ORDINATE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''RADIUS_DIMENSION''] ) = 1; wr3: SIZEOF ( TYPEOF ( SELF.related_draughting_callout ) *[''AUTOMOTIVE_DESIGN.''+ ''ANGULAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''DIAMETER_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''LINEAR_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''ORDINATE_DIMENSION'' , ''AUTOMOTIVE_DESIGN.''+ ''RADIUS_DIMENSION''] ) = 1; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY dimension_related_tolerance_zone_element; related_dimension : dimensional_location; related_element : tolerance_zone_definition; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY dimension_text_associativity SUBTYPE OF (text_literal,mapped_item); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''SHAPE_DIMENSION_REPRESENTATION'' IN TYPEOF ( SELF\mapped_item.mapping_source. mapped_representation ) ) ; wr2: ( ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT'' IN TYPEOF ( SELF\mapped_item.mapping_target ) ) ; wr3: SIZEOF ( QUERY ( ato <* QUERY ( si <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.STYLED_ITEM.ITEM'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( si ) ) ) | NOT ( SIZEOF ( QUERY ( dc <* USEDIN ( ato , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT.''+ ''CONTENTS'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT'' IN TYPEOF ( dc ) ) ) *[SELF\mapped_item.mapping_target] ) = 1 ) ) ) = 0; END_ENTITY; -- 10303-520: aic_associative_draughting_elements ENTITY dimensional_characteristic_representation; dimension : dimensional_characteristic; representation : shape_dimension_representation; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY dimensional_exponents; length_exponent : REAL; mass_exponent : REAL; time_exponent : REAL; electric_current_exponent : REAL; thermodynamic_temperature_exponent : REAL; amount_of_substance_exponent : REAL; luminous_intensity_exponent : REAL; END_ENTITY; -- 10303-41: measure_schema ENTITY dimensional_location SUPERTYPE OF (ONEOF(angular_location,dimensional_location_with_path)) SUBTYPE OF (shape_aspect_relationship); END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY dimensional_location_with_path SUBTYPE OF (dimensional_location); path : shape_aspect; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY dimensional_size SUPERTYPE OF (ONEOF(angular_size,dimensional_size_with_path)); applies_to : shape_aspect; name : label; WHERE wr1:applies_to.product_definitional = TRUE; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY dimensional_size_with_path SUBTYPE OF (dimensional_size); path : shape_aspect; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY directed_action SUBTYPE OF (executed_action); directive : action_directive; END_ENTITY; -- 10303-41: action_schema ENTITY directed_angle SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr4:SELF.description IN [ ''punch direction'' , ''profile normal'' , ''surface normal'' ]; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY directed_dimensional_location SUBTYPE OF (dimensional_location); END_ENTITY; -- 10303-214: automotive_design ENTITY direction SUBTYPE OF (geometric_representation_item); direction_ratios : LIST[2:3] OF REAL; WHERE wr1: SIZEOF ( QUERY ( tmp <* direction_ratios | tmp<>0.0 ) ) >0; END_ENTITY; -- 10303-42: geometry_schema ENTITY direction_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( SELF.items ) = 1; wr2: SIZEOF ( QUERY ( i <* SELF.items | ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION'' IN TYPEOF ( i ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY div_expression SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY document; id : identifier; name : label; description : OPTIONAL text; kind : document_type; INVERSE representation_types : SET[0:?] OF document_representation_type FOR represented_document; END_ENTITY; -- 10303-41: document_schema ENTITY document_file SUBTYPE OF (document,characterized_object); WHERE wr1:SELF\characterized_object.name = ''''; wr2: NOT EXISTS ( SELF\characterized_object.description ) ; wr3: SIZEOF ( QUERY ( drt <* SELF\document. representation_types | drt.name IN [''digital'' , ''physical''] ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY document_product_association; name : label; description : OPTIONAL text; relating_document : document; related_product : product_or_formation_or_definition; END_ENTITY; -- 10303-41: document_schema ENTITY document_product_equivalence SUBTYPE OF (document_product_association); WHERE wr1:SELF.name = ''equivalence''; wr2: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT'' IN TYPEOF ( SELF.related_product ) ) OR ( ( SELF.relating_document. kind.product_data_type = ''configuration controlled document'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( SELF.related_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc.name = ''document'' ) ) = 1 ) ) ; wr3: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_FORMATION'' IN TYPEOF ( SELF.related_product ) ) OR ( ( SELF.relating_document. kind.product_data_type = ''configuration controlled document version'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( SELF.related_product\ product_definition_formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''document'' ) ) = 1 ) ) ; wr4: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( SELF.related_product ) ) OR ( ( SELF.relating_document.kind.product_data_type = ''configuration controlled document definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( SELF.related_product\ product_definition.formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''document'' ) ) = 1 ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY document_reference ABSTRACT SUPERTYPE; assigned_document : document; source : label; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY document_relationship; name : label; description : OPTIONAL text; relating_document : document; related_document : document; END_ENTITY; -- 10303-41: document_schema ENTITY document_representation_type; name : label; represented_document : document; END_ENTITY; -- 10303-41: document_schema ENTITY document_type; product_data_type : label; END_ENTITY; -- 10303-41: document_schema ENTITY document_usage_constraint; source : document; subject_element : label; subject_element_value : text; END_ENTITY; -- 10303-41: document_schema ENTITY document_usage_constraint_assignment ABSTRACT SUPERTYPE; assigned_document_usage : document_usage_constraint; role : document_usage_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY document_usage_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY draughting_annotation_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_CURVE_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( ( SIZEOF ( sty.styles ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sty.styles[1] ) ) ) ) ) = 0 ) ; wr2: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( ( SIZEOF ( sty.styles ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE'' IN TYPEOF ( sty.styles[1] ) ) ) ) ) = 0 ) ; wr3: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( QUERY ( bound <* SELF.item\ annotation_fill_area.boundaries | NOT ( SIZEOF ( QUERY ( si <* USEDIN ( bound , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM.''+ ''ITEM'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_CURVE_OCCURRENCE'' IN TYPEOF ( si ) ) ) ) >0 ) ) ) = 0 ) ; wr4: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( ( SIZEOF ( sty.styles ) = 1 ) AND ( SIZEOF ( TYPEOF ( sty. styles[1] ) *[''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_STYLE'' , ''AUTOMOTIVE_DESIGN.''+ ''NULL_STYLE''] ) = 1 ) ) ) ) = 0 ) ; wr5: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SYMBOL_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SUBFIGURE_REPRESENTATION'']* TYPEOF ( SELF.item\ mapped_item.mapping_source. mapped_representation ) ) = 1 ) ; wr6: ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( QUERY ( sty <* SELF.styles | NOT ( ( SIZEOF ( sty.styles ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_STYLE'' IN TYPEOF ( sty.styles[1] ) ) ) ) ) = 0 ) ; wr7: ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( TYPEOF ( SELF.item ) *[''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' , ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL''] ) = 1 ) ; wr8: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( QUERY ( tl <* SELF.item\ composite_text.collected_text | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' IN TYPEOF ( tl ) ) ) ) = 0 ) ; wr9: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SELF.item\ text_literal.alignment IN [ ''baseline left'' , ''baseline centre'' , ''baseline right'' ] ) ; wr10: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( QUERY ( tl <* QUERY ( text <* SELF.item\ composite_text.collected_text | ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' IN TYPEOF ( text ) ) ) | NOT ( tl\ text_literal.alignment IN [ ''baseline left'' , ''baseline centre'' , ''baseline right'' ] ) ) ) = 0 ) ; wr11: NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' IN TYPEOF ( SELF.item ) ) ) OR check_text_alignment ( SELF.item ) ; wr12: NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' IN TYPEOF ( SELF.item ) ) ) OR check_text_font ( SELF.item ) ; wr13: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( QUERY ( tl <* QUERY ( text <* SELF.item\ composite_text.collected_text | ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' IN TYPEOF ( text ) ) ) | NOT ( SIZEOF ( TYPEOF ( tl ) *[''AUTOMOTIVE_DESIGN.'' + ''TEXT_LITERAL_WITH_BLANKING_BOX'' , ''AUTOMOTIVE_DESIGN.'' + ''TEXT_LITERAL_WITH_ASSOCIATED_CURVES''] ) = 0 ) ) ) = 0 ) ; wr14: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL_WITH_ASSOCIATED_CURVES'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( QUERY ( crv <* SELF.item\ text_literal_with_associated_curves. associated_curves | NOT ( SIZEOF ( QUERY ( si <* USEDIN ( crv , ''AUTOMOTIVE_DESIGN.STYLED_ITEM.ITEM'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_CURVE_OCCURRENCE'' IN TYPEOF ( si ) ) ) ) >0 ) ) ) = 0 ) ; wr15: ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( SELF ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT_WITH_ASSOCIATED_CURVES'' IN TYPEOF ( SELF.item ) ) ) ) OR ( SIZEOF ( QUERY ( crv <* SELF.item\ composite_text_with_associated_curves. associated_curves | NOT ( SIZEOF ( QUERY ( si <* USEDIN ( crv , ''AUTOMOTIVE_DESIGN.STYLED_ITEM.ITEM'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_CURVE_OCCURRENCE'' IN TYPEOF ( si ) ) ) ) >0 ) ) ) = 0 ) ; wr16: SIZEOF ( QUERY ( cs <* QUERY ( sty <* SELF.styles | ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sty. styles[1] ) ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''LENGTH_MEASURE_WITH_UNIT'' IN TYPEOF ( cs. styles[1]\curve_style.curve_width ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( cs.styles[1]\curve_style.curve_width\ measure_with_unit.value_component ) ) ) ) ) = 0; wr17: SIZEOF ( QUERY ( fas <* QUERY ( sty <* SELF.styles | ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE'' IN TYPEOF ( sty. styles[1] ) ) ) | NOT ( ( SIZEOF ( QUERY ( fs <* fas. styles[1]\fill_area_style.fill_styles | ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE_TILES'' IN TYPEOF ( fs ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( fst <* QUERY ( fs <* fas.styles[1]\fill_area_style.fill_styles | ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE_TILES'' IN TYPEOF ( fs ) ) ) | NOT ( SIZEOF ( fst\ fill_area_style_tiles. tiles ) = 1 ) ) ) = 0 ) ) ) ) = 0; wr18: SIZEOF ( QUERY ( fas <* QUERY ( sty <* SELF.styles | ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE'' IN TYPEOF ( sty. styles[1] ) ) ) | NOT ( SIZEOF ( QUERY ( fsh <* QUERY ( fs <* fas.styles[1]\fill_area_style.fill_styles | ( ''AUTOMOTIVE_DESIGN.''+ ''FILL_AREA_STYLE_HATCHING'' IN TYPEOF ( fs ) ) ) | NOT ( fsh\ fill_area_style_hatching. point_of_reference_hatch_line:=:fsh\ fill_area_style_hatching.pattern_start ) ) ) = 0 ) ) ) = 0; wr19: SIZEOF ( QUERY ( ts <* QUERY ( sty <* SELF.styles | ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_STYLE'' IN TYPEOF ( sty. styles[1] ) ) ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''TEXT_STYLE_WITH_BOX_CHARACTERISTICS'' IN TYPEOF ( ts. styles[1] ) ) ) ) = 0; wr20: SIZEOF ( QUERY ( ts <* QUERY ( sty <* SELF.styles | ( ''AUTOMOTIVE_DESIGN.''+ ''TEXT_STYLE_WITH_BOX_CHARACTERISTICS'' IN TYPEOF ( sty.styles[1] ) ) ) | NOT ( SIZEOF ( ts. styles[1]\text_style_with_box_characteristics. characteristics ) = 4 ) ) ) = 0; END_ENTITY; -- 10303-504: aic_draughting_annotation ENTITY draughting_callout SUBTYPE OF (geometric_representation_item); contents : SET[1:?] OF draughting_callout_element; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY draughting_callout_relationship; name : label; description : text; relating_draughting_callout : draughting_callout; related_draughting_callout : draughting_callout; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY draughting_elements SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( l_c <* QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''LEADER_CURVE'' IN TYPEOF ( con ) ) ) | NOT ( SIZEOF ( QUERY ( ldc <* USEDIN ( l_c , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT.''+ ''CONTENTS'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''LEADER_DIRECTED_CALLOUT'' IN TYPEOF ( ldc ) ) ) ) <=1 ) ) ) = 0; wr2: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE_DIRECTED_CALLOUT'' IN TYPEOF ( SELF ) ) OR ( SIZEOF ( QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_CURVE'' IN TYPEOF ( con ) ) ) ) <=2 ) ; wr3: SIZEOF ( QUERY ( rc <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT_'' + ''RELATIONSHIP.''+ ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_RELATIONSHIP'' IN TYPEOF ( rc ) ) AND ( rc.name = ''primary'' ) ) ) <=1; wr4: SIZEOF ( QUERY ( rc <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT_'' + ''RELATIONSHIP.''+ ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_RELATIONSHIP'' IN TYPEOF ( rc ) ) AND ( rc.name = ''secondary'' ) ) ) <=1; wr5: SIZEOF ( QUERY ( sec <* QUERY ( rc <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT_'' + ''RELATIONSHIP.''+ ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_RELATIONSHIP'' IN TYPEOF ( rc ) ) AND ( rc.name = ''secondary'' ) ) | NOT ( SIZEOF ( QUERY ( prim <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT_'' + ''RELATIONSHIP.''+ ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_RELATIONSHIP'' IN TYPEOF ( prim ) ) AND ( prim.name = ''primary'' ) ) ) = 1 ) ) ) = 0; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY draughting_model SUBTYPE OF (representation); UNIQUE ur1 : SELF\representation.name; WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' , ''AUTOMOTIVE_DESIGN.''+ ''CAMERA_MODEL'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_MODEL'']* TYPEOF ( mi\ mapped_item. mapping_source.mapped_representation ) ) = 1 ) ) ) = 0; wr3: SIZEOF ( QUERY ( smi <* QUERY ( si <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) ) | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( si\ styled_item.item ) ) ) | ( NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''SHAPE_REPRESENTATION'' IN TYPEOF ( smi\ styled_item.item\ mapped_item.mapping_source. mapped_representation ) ) AND ( SIZEOF ( QUERY ( sty <* smi\ styled_item.styles | ( NOT ( SIZEOF ( QUERY ( psa <* sty.styles | ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( psa ) ) ) ) ) = 1 ) ) ) ) = 1 ) ) ) ) ) = 0; END_ENTITY; -- 10303-520: aic_associative_draughting_elements ENTITY draughting_pre_defined_colour SUBTYPE OF (pre_defined_colour); WHERE wr1:SELF.name IN [''red'' , ''green'' , ''blue'' , ''yellow'' , ''magenta'' , ''cyan'' , ''black'' , ''white'']; END_ENTITY; -- 10303-517: aic_mechanical_design_geometric_presentation ENTITY draughting_pre_defined_curve_font SUBTYPE OF (pre_defined_curve_font); WHERE wr1:SELF.name IN [''continuous'' , ''chain'' , ''chain double dash'' , ''dashed'' , ''dotted'']; END_ENTITY; -- 10303-517: aic_mechanical_design_geometric_presentation ENTITY draughting_pre_defined_text_font SUBTYPE OF (pre_defined_text_font); WHERE wr1:SELF.name IN [ ''ISO 3098-1 font A'' , ''ISO 3098-1 font B'' ]; END_ENTITY; -- 10303-214: automotive_design ENTITY draughting_specification_reference SUBTYPE OF (document_reference); specified_items : SET[1:?] OF specified_item; WHERE wr1: ( SELF.assigned_document.kind.product_data_type = ''draughting specification'' ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY draughting_subfigure_representation SUBTYPE OF (symbol_representation); WHERE wr1: SIZEOF ( QUERY ( item <* SELF\representation.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'']* TYPEOF ( item ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( item <* SELF\representation.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''DRAUGHTING_CALLOUT'']* TYPEOF ( item ) ) = 1 ) ) >=1; wr3: SIZEOF ( QUERY ( srm <* QUERY ( rm <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.''+ ''MAPPED_REPRESENTATION'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_REPRESENTATION_MAP'' IN TYPEOF ( rm ) ) ) | NOT ( SIZEOF ( QUERY ( a_s <* QUERY ( mi <* srm.map_usage | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL'' IN TYPEOF ( mi ) ) ) | NOT ( SIZEOF ( QUERY ( aso <* USEDIN ( a_s , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM.''+ ''ITEM'' ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SUBFIGURE_OCCURRENCE'' IN TYPEOF ( aso ) ) ) ) = 0 ) ) ) = 0 ) ) ) >0; wr4: NOT ( acyclic_mapped_item_usage ( SELF ) ) ; wr5: SIZEOF ( SELF.context_of_items. representations_in_context ) = 1; END_ENTITY; -- 10303-504: aic_draughting_annotation ENTITY draughting_symbol_representation SUBTYPE OF (symbol_representation); UNIQUE ur1 : SELF\representation.name; WHERE wr1: SIZEOF ( QUERY ( item <* SELF\representation.items | NOT ( SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_CURVE_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT''] ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( item <* SELF\representation.items | ( SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_CURVE_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_FILL_AREA_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE''] ) = 1 ) ) ) >=1; wr3: SIZEOF ( QUERY ( item <* SELF\representation.items | ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SUBFIGURE_OCCURRENCE'' IN TYPEOF ( item ) ) ) = 0; wr4: SIZEOF ( QUERY ( srm <* QUERY ( rm <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.''+ ''MAPPED_REPRESENTATION'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_REPRESENTATION_MAP'' IN TYPEOF ( rm ) ) ) | NOT ( SIZEOF ( QUERY ( a_s <* QUERY ( mi <* srm.map_usage | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL'' IN TYPEOF ( mi ) ) ) | NOT ( SIZEOF ( QUERY ( aso <* USEDIN ( a_s , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM.''+ ''ITEM'' ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_SYMBOL_OCCURRENCE'' IN TYPEOF ( aso ) ) ) ) = 0 ) ) ) = 0 ) ) ) >0; wr5: NOT ( acyclic_mapped_item_usage ( SELF ) ) ; wr6: SIZEOF ( SELF.context_of_items. representations_in_context ) = 1; END_ENTITY; -- 10303-504: aic_draughting_annotation ENTITY draughting_text_literal_with_delineation SUBTYPE OF (text_literal_with_delineation); WHERE wr1:SELF.delineation IN [''underline'' , ''overline'']; END_ENTITY; -- 10303-504: aic_draughting_annotation ENTITY draughting_title; items : SET[1:?] OF draughting_titled_item; language : label; contents : text; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY drawing_definition; drawing_number : identifier; drawing_type : OPTIONAL label; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY drawing_revision SUBTYPE OF (presentation_set); revision_identifier : identifier; drawing_identifier : drawing_definition; intended_scale : OPTIONAL text; UNIQUE ur1 : revision_identifier,drawing_identifier; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY drawing_revision_sequence; predecessor : drawing_revision; successor : drawing_revision; WHERE wr1:predecessor:<>:successor; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY drawing_sheet_layout SUBTYPE OF (draughting_symbol_representation); END_ENTITY; -- 10303-214: automotive_design ENTITY drawing_sheet_revision SUBTYPE OF (presentation_area); revision_identifier : identifier; WHERE wr1: SIZEOF ( QUERY ( item <* SELF\representation.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN ( TYPEOF ( item ) ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''DRAWING_SHEET_REVISION'' IN ( TYPEOF ( item\ mapped_item.mapping_source. mapped_representation ) ) ) ) ) = 0; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY drawing_sheet_revision_usage SUBTYPE OF (area_in_set); sheet_number : identifier; UNIQUE ur1 : sheet_number,in_set; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''DRAWING_SHEET_REVISION'' IN TYPEOF ( SELF\area_in_set.area ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''DRAWING_REVISION'' IN TYPEOF ( SELF\area_in_set.in_set ) ) ; END_ENTITY; -- 10303-101: drawing_definition_schema ENTITY edge SUPERTYPE OF (ONEOF(edge_curve,oriented_edge,subedge)) SUBTYPE OF (topological_representation_item); edge_start : vertex; edge_end : vertex; END_ENTITY; -- 10303-42: topology_schema ENTITY edge_based_wireframe_model SUBTYPE OF (geometric_representation_item); ebwm_boundary : SET[1:?] OF connected_edge_set; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY edge_based_wireframe_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) >=1; wr3: SIZEOF ( QUERY ( ebwm <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | NOT ( SIZEOF ( QUERY ( edges <* eb.ces_edges | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( edges ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( ebwm <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | NOT ( SIZEOF ( QUERY ( pline_edges <* QUERY ( edges <* eb.ces_edges | ( ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' IN TYPEOF ( edges\ edge_curve.edge_geometry ) ) ) | NOT ( SIZEOF ( pline_edges\ edge_curve.edge_geometry\ polyline.points ) >2 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( ebwm <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | NOT ( SIZEOF ( QUERY ( edges <* eb.ces_edges | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( edges. edge_start ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( edges.edge_end ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( ebwm <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | NOT ( SIZEOF ( QUERY ( edges <* eb.ces_edges | NOT ( valid_wireframe_edge_curve ( edges\ edge_curve. edge_geometry ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( ebwm <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_BASED_WIREFRAME_MODEL'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( eb <* ebwm\ edge_based_wireframe_model.ebwm_boundary | NOT ( SIZEOF ( QUERY ( edges <* eb.ces_edges | NOT ( ( valid_wireframe_vertex_point ( edges.edge_start\ vertex_point.vertex_geometry ) ) AND ( valid_wireframe_vertex_point ( edges.edge_end\ vertex_point.vertex_geometry ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr8: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source.mapped_representation ) ) ) ) = 0; wr9:SELF.context_of_items\ geometric_representation_context. coordinate_space_dimension = 3; END_ENTITY; -- 10303-501: aic_edge_based_wireframe ENTITY edge_curve SUBTYPE OF (edge,geometric_representation_item); edge_geometry : curve; same_sense : BOOLEAN; END_ENTITY; -- 10303-42: topology_schema ENTITY edge_loop SUBTYPE OF (loop,path); DERIVE ne : INTEGER := SIZEOF(SELF\path.edge_list); WHERE wr1: ( SELF\path.edge_list[1].edge_start ) :=: ( SELF\path. edge_list[ne].edge_end ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY edge_round SUBTYPE OF (transition_feature); WHERE wr1: ( SELF.description<> ''constant radius'' ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr2: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {1<=SIZEOF ( pdr. used_representation.items ) <=3} ) ) = 1 ) ; wr3: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''radius'' , ''first offset'' , ''second offset'' ] ) ) ) >0 ) ) ) = 0 ) ; wr4: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr5: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''first offset'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <=1 ) ) ) = 1 ) ; wr6: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''second offset'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <=1 ) ) ) = 1 ) ; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''first face shape'' ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''second face shape'' ) ) ) = 1; wr9: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''edge round face'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY effectivity SUPERTYPE OF (ONEOF(serial_numbered_effectivity,dated_effectivity, lot_effectivity,time_interval_based_effectivity)); id : identifier; DERIVE name : label := get_name_value(SELF); description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: effectivity_schema ENTITY effectivity_assignment ABSTRACT SUPERTYPE; assigned_effectivity : effectivity; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY effectivity_context_assignment ABSTRACT SUPERTYPE; assigned_effectivity_assignment : effectivity_assignment; role : effectivity_context_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY effectivity_context_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY effectivity_relationship; name : label; description : OPTIONAL text; related_effectivity : effectivity; relating_effectivity : effectivity; END_ENTITY; -- 10303-41: effectivity_schema ENTITY electric_current_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''ELECTRIC_CURRENT_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY electric_current_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 1.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY element_delivery SUBTYPE OF (action); WHERE wr1: ( SIZEOF ( QUERY ( aa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.ACTION_ASSIGNMENT.ASSIGNED_ACTION'' ) | ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( aa ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( aaa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_ASSIGNMENT.'' + ''ASSIGNED_ACTION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( aaa ) ) AND ( aaa.role.name = ''deliverable element'' ) AND ( SIZEOF ( aaa.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* aaa. items | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( i ) ) AND ( SIZEOF ( i\ applied_action_assignment.items ) = 1 ) AND ( SIZEOF ( QUERY ( i1 <* aaa\ applied_action_assignment. items | ( ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURATION_ITEM'' IN TYPEOF ( i1 ) ) OR ( ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( i1 ) ) AND ( i1\product_definition.frame_of_reference.name = ''physical occurrence'' ) ) OR ( ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_FORMATION'' IN TYPEOF ( i1 ) ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( i1 , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc\ product_category.name IN [''part'' , ''raw material'' , ''tool''] ) ) = 1 ) ) ) ) = 1 ) ) ) = 1 ) ) ) = 1 ) ; wr2: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( aoa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | aoa.role.name = ''destination'' ) ) = 1 ) ; wr3: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY.'' + ''DEFINITION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( ap <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY.'' + ''DEFINITION'' ) | SIZEOF ( USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) ) = 1 ) ) = 1 ) AND ( SIZEOF ( QUERY ( ap <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY.'' + ''DEFINITION'' ) | SIZEOF ( QUERY ( apr <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | ( apr. representation.name = ''delivery quantity'' ) AND ( SIZEOF ( apr.representation.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* apr.representation.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) ) = 1 ) ) ) = 1 ) ) = 1 ) ; wr4: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) ) + SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATED_ACTION'' ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY elementary_surface SUPERTYPE OF (ONEOF(plane,cylindrical_surface,conical_surface, spherical_surface,toroidal_surface)) SUBTYPE OF (surface); position : axis2_placement_3d; END_ENTITY; -- 10303-42: geometry_schema ENTITY ellipse SUBTYPE OF (conic); semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; END_ENTITY; -- 10303-42: geometry_schema ENTITY environment; syntactic_representation : generic_variable; semantics : variable_semantics; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY equals_expression SUBTYPE OF (binary_boolean_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY evaluated_degenerate_pcurve SUBTYPE OF (degenerate_pcurve); equivalent_point : cartesian_point; END_ENTITY; -- 10303-42: geometry_schema ENTITY event_occurrence; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: date_time_schema ENTITY event_occurrence_assignment ABSTRACT SUPERTYPE; assigned_event_occurrence : event_occurrence; role : event_occurrence_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY event_occurrence_context_assignment ABSTRACT SUPERTYPE; assigned_event_occurrence_assignment : event_occurrence_assignment; role : event_occurrence_context_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY event_occurrence_context_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: date_time_schema ENTITY event_occurrence_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: date_time_schema ENTITY exclusive_product_concept_feature_category SUBTYPE OF (product_concept_feature_category); END_ENTITY; -- 10303-214: automotive_design ENTITY executed_action SUBTYPE OF (action); END_ENTITY; -- 10303-41: action_schema ENTITY exp_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY expression ABSTRACT SUPERTYPE OF (ONEOF(numeric_expression,boolean_expression, string_expression)) SUBTYPE OF (generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY expression_conversion_based_unit SUBTYPE OF (context_dependent_unit,variable_semantics); INVERSE associated_variable_environment : environment FOR semantics; END_ENTITY; -- 10303-214: automotive_design ENTITY extension SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) = 1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY external_identification_assignment ABSTRACT SUPERTYPE SUBTYPE OF (identification_assignment); source : external_source; END_ENTITY; -- 10303-41: management_resources_schema ENTITY external_source; source_id : source_item; DERIVE description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: external_reference_schema ENTITY externally_defined_character_glyph SUBTYPE OF (externally_defined_item); END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY externally_defined_class SUBTYPE OF (class,externally_defined_item); END_ENTITY; -- 10303-214: automotive_design ENTITY externally_defined_curve_font SUBTYPE OF (externally_defined_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY externally_defined_feature_definition SUBTYPE OF (feature_definition,externally_defined_item); WHERE wr1: ( SELF\externally_defined_item.item_id = ''external thread'' ) AND ( SELF\externally_defined_item. source.source_id = ''external feature specification'' ) ; wr2: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.APPLIED_CLASSIFICATION_ASSIGNMENT.ITEMS'' ) ) = 1 ) OR ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.APPLIED_DOCUMENT_REFERENCE.ITEMS'' ) ) + SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.APPLIED_DOCUMENT_USAGE_CONSTRAINT_ASSIGNMENT.ITEMS'' ) ) = 1 ) ; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {6<=SIZEOF ( pdr. used_representation.items ) <=7} ) ) ) = 0; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''thread side'' ) AND ( i\ descriptive_representation_item.description IN [''internal'' , ''external''] ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''major diameter'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''RATIO_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''number of threads'' ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''fit class'' ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''form'' ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''hand'' ) AND ( i\ descriptive_representation_item.description IN [ ''left hand'' , ''right hand'' ] ) ) ) = 1 ) ) ) = 1; wr10: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''qualifier'' ) ) ) = 1 ) ) ) <=1; wr11: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( NOT ( i.name IN [ ''thread side'' , ''major diameter'' , ''number of threads'' , ''fit class'' , ''form'' , ''hand'' , ''qualifier''] ) ) ) ) >0 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY externally_defined_general_property SUBTYPE OF (general_property,externally_defined_item); END_ENTITY; -- 10303-214: automotive_design ENTITY externally_defined_hatch_style SUBTYPE OF (externally_defined_item,geometric_representation_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY externally_defined_item; item_id : source_item; source : external_source; END_ENTITY; -- 10303-41: external_reference_schema ENTITY externally_defined_item_relationship; name : label; description : OPTIONAL text; relating_item : externally_defined_item; related_item : externally_defined_item; END_ENTITY; -- 10303-41: external_reference_schema ENTITY externally_defined_style SUBTYPE OF (externally_defined_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY externally_defined_symbol SUBTYPE OF (externally_defined_item); END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY externally_defined_text_font SUBTYPE OF (externally_defined_item); END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY externally_defined_tile_style SUBTYPE OF (externally_defined_item,geometric_representation_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY extruded_face_solid SUBTYPE OF (swept_face_solid); extruded_direction : direction; depth : positive_length_measure; WHERE wr1:dot_product ( ( SELF\swept_face_solid.swept_face. face_geometry\ elementary_surface.position.p[3] ) , extruded_direction ) <>0.0; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY face SUPERTYPE OF (ONEOF(face_surface,subface,oriented_face)) SUBTYPE OF (topological_representation_item); bounds : SET[1:?] OF face_bound; WHERE wr1: NOT ( mixed_loop_type_set ( list_to_set ( list_face_loops ( SELF ) ) ) ) ; wr2: SIZEOF ( QUERY ( temp <* bounds | ''AUTOMOTIVE_DESIGN.''+ ''FACE_OUTER_BOUND'' IN TYPEOF ( temp ) ) ) <=1; END_ENTITY; -- 10303-42: topology_schema ENTITY face_based_surface_model SUBTYPE OF (geometric_representation_item); fbsm_faces : SET[1:?] OF connected_face_set; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY face_bound SUBTYPE OF (topological_representation_item); bound : loop; orientation : BOOLEAN; END_ENTITY; -- 10303-42: topology_schema ENTITY face_outer_bound SUBTYPE OF (face_bound); END_ENTITY; -- 10303-42: topology_schema ENTITY face_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( SELF.items ) = 1; wr2: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''FACE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_SHELL'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_SHELL'']* TYPEOF ( i ) ) = 1 ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY face_surface SUBTYPE OF (face,geometric_representation_item); face_geometry : surface; same_sense : BOOLEAN; WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_SURFACE'' IN TYPEOF ( face_geometry ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY faceted_brep SUBTYPE OF (manifold_solid_brep); END_ENTITY; -- 10303-42: geometric_model_schema ENTITY faceted_brep_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) >0; wr3: SIZEOF ( QUERY ( fbrep <* QUERY ( it <* items | ''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( csh <* msb_shells ( fbrep ) | NOT ( SIZEOF ( QUERY ( fcs <* csh\ connected_face_set. cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''FACE_SURFACE'' IN TYPEOF ( fcs ) ) AND ( ( ''AUTOMOTIVE_DESIGN.''+ ''PLANE'' IN TYPEOF ( fcs\ face_surface.face_geometry ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' IN TYPEOF ( fcs\ face_surface.face_geometry\ elementary_surface. position.location ) ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( fbrep <* QUERY ( it <* items | ''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( csh <* msb_shells ( fbrep ) | NOT ( SIZEOF ( QUERY ( fcs <* csh\ connected_face_set. cfs_faces | NOT ( SIZEOF ( QUERY ( bnds <* fcs.bounds | ''AUTOMOTIVE_DESIGN.''+ ''FACE_OUTER_BOUND'' IN TYPEOF ( bnds ) ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( msb <* QUERY ( it <* items | ''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SOLID_BREP'' IN TYPEOF ( it ) ) | ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_CLOSED_SHELL'' IN TYPEOF ( msb\ manifold_solid_brep.outer ) ) ) = 0; wr6: SIZEOF ( QUERY ( brv <* QUERY ( it <* items | ''AUTOMOTIVE_DESIGN.''+ ''BREP_WITH_VOIDS'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( csh <* brv\ brep_with_voids. voids | csh\ oriented_closed_shell.orientation ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( mi <* QUERY ( it <* items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''FACETED_BREP_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source.mapped_representation ) ) ) ) = 0; END_ENTITY; -- 10303-512: aic_faceted_brep ENTITY feature_component_definition SUBTYPE OF (characterized_object); WHERE wr1: SIZEOF ( get_shape_aspects ( SELF ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY feature_component_relationship SUBTYPE OF (shape_aspect_relationship); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.'' + ''TRANSITION_FEATURE'' IN TYPEOF ( SELF.related_shape_aspect ) ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'']* TYPEOF ( SELF.related_shape_aspect.of_shape.definition ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY feature_definition SUBTYPE OF (characterized_object); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) <=1; wr2: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) = 0 ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) <=1 ) ) ) = 1 ) ; wr3: NOT ( ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''BARRING_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''BEAD'' , ''AUTOMOTIVE_DESIGN.'' + ''HOLE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE'' , ''AUTOMOTIVE_DESIGN.'' + ''LOCATOR'']* TYPEOF ( SELF ) ) = 1 ) OR ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' IN TYPEOF ( SELF ) ) AND ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''compound feature in panel'' ) ) ) = 1 ) ) OR ( ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) <=1 ) AND ( ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) = 0 ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''punch direction'' ) ) ) = 1 ) ) ) ; wr4: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) = 0 ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( pdr. used_representation.context_of_items ) ) AND ( pdr. used_representation.context_of_items\ geometric_representation_context. coordinate_space_dimension = 3 ) ) ) = 1 ) ; wr5: NOT ( ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''BOSS'' , ''AUTOMOTIVE_DESIGN.'' + ''RIB'' , ''AUTOMOTIVE_DESIGN.'' + ''SLOT'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUND_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''POCKET'']* TYPEOF ( SELF ) ) = 1 ) OR ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' IN TYPEOF ( SELF ) ) AND ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( sa ) ) AND ( sa. name = ''compound feature in solid'' ) ) ) = 1 ) ) OR ( ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1 ) ) ; wr6: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''BEAD'' , ''AUTOMOTIVE_DESIGN.'' + ''BARRING_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''BOSS'' , ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''HOLE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE'' , ''AUTOMOTIVE_DESIGN.'' + ''LOCATOR'' , ''AUTOMOTIVE_DESIGN.'' + ''POCKET'' , ''AUTOMOTIVE_DESIGN.'' + ''RIB'' , ''AUTOMOTIVE_DESIGN.'' + ''REPLICATE_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUND_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''SLOT'' , ''AUTOMOTIVE_DESIGN.'' + ''THREAD'']* TYPEOF ( SELF ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY feature_in_panel SUBTYPE OF (feature_definition); WHERE wr1:SELF.description IN [''pocket'' , ''boss'' , ''stairstep'']; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {2<=SIZEOF ( pdr. used_representation.items ) <=3} ) ) ) = 0; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''base radius'' , ''target radius'' ] ) ) ) >0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''target radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''base boundary'' ) AND ( sa.description IN [ ''directed angle occurrence'' , ''closed profile occurrence'' ] ) ) ) = 1; wr7: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''target boundary'' ) AND ( sa.description IN [ ''directed angle occurrence'' , ''closed profile occurrence'' ] ) ) ) = 1; wr8: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''directed angle occurrence'' ) ) ) <=1; wr9: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''directed angle occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''directed angle usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTED_ANGLE'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa. description = ''directed angle occurrence'' ) ) ) ; wr10: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''closed profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'']* TYPEOF ( sar.relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa. description = ''closed profile occurrence'' ) ) ) ; wr11: ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND NOT ( pdr. used_representation.name = ''target face'' ) ) ) = 0 ) ; wr12: ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''target boundary'' ) AND ( sa.description = ''directed angle occurrence'' ) ) ) = 0 ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY feature_pattern SUBTYPE OF (replicate_feature); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''added instance placement'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 1; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) >0 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY featured_shape SUBTYPE OF (product_definition_shape); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( SELF.definition ) ; wr2: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_RELATIONSHIP.'' + ''RELATED_PROPERTY_DEFINITION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_RELATIONSHIP.'' + ''RELATED_PROPERTY_DEFINITION'' ) | ( pdr.name = ''featured shape sequence'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_SHAPE'' IN TYPEOF ( pdr. relating_property_definition ) ) AND ( pdr. relating_property_definition:<>:SELF ) ) ) = 1 ) ; wr3: SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_RELATIONSHIP.'' + ''RELATED_PROPERTY_DEFINITION'' ) | SELF.definition:=:pdr. relating_property_definition.definition ) ) = 1; wr4: SIZEOF ( QUERY ( sa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT.'' + ''OF_SHAPE'' ) | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PLACED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''INSTANCED_FEATURE'']* TYPEOF ( sa ) ) = 1 ) ) >=1; END_ENTITY; -- 10303-214: automotive_design ENTITY fill_area_style; name : label; fill_styles : SET[1:?] OF fill_style_select; WHERE wr1: SIZEOF ( QUERY ( fill_style <* SELF.fill_styles | ''AUTOMOTIVE_DESIGN.'' + ''FILL_AREA_STYLE_COLOUR'' IN TYPEOF ( fill_style ) ) ) <=1; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY fill_area_style_colour; name : label; fill_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY fill_area_style_hatching SUBTYPE OF (geometric_representation_item); hatch_line_appearance : curve_style; start_of_next_hatch_line : one_direction_repeat_factor; point_of_reference_hatch_line : cartesian_point; pattern_start : cartesian_point; hatch_line_angle : plane_angle_measure; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY fill_area_style_tile_symbol_with_style SUBTYPE OF (geometric_representation_item); symbol : annotation_symbol_occurrence; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY fill_area_style_tiles SUBTYPE OF (geometric_representation_item); tiling_pattern : two_direction_repeat_factor; tiles : SET[1:?] OF fill_area_style_tile_shape_select; tiling_scale : positive_ratio_measure; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY fillet SUBTYPE OF (transition_feature); WHERE wr1: ( SELF.description<> ''constant radius'' ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr2: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {1<=SIZEOF ( pdr. used_representation.items ) <=3} ) ) = 1 ) ; wr3: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''radius'' , ''first offset'' , ''second offset'' ] ) ) ) >0 ) ) ) = 0 ) ; wr4: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr5: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''first offset'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <=1 ) ) ) = 1 ) ; wr6: ( SELF.description<> ''constant radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''second offset'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <=1 ) ) ) = 1 ) ; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''first face shape'' ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''second face shape'' ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''fillet face'' ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY flatness_tolerance SUBTYPE OF (geometric_tolerance); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY format_function SUBTYPE OF (string_expression,binary_generic_expression); DERIVE value_to_format : generic_expression := SELF\binary_generic_expression. operands[1]; format_string : generic_expression := SELF\binary_generic_expression. operands[2]; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' ) IN TYPEOF ( value_to_format ) ) AND ( ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' ) IN TYPEOF ( format_string ) ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY founded_item; END_ENTITY; -- 10303-43: representation_schema ENTITY founded_kinematic_path SUBTYPE OF (representation); SELF\representation.items : SET[1:?] OF kinematic_path; SELF\representation.context_of_items : geometric_representation_context; DERIVE paths : SET[1:?] OF kinematic_path := SELF\representation.items; founding : geometric_representation_context := SELF\representation. context_of_items; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY fully_constrained_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY functionally_defined_transformation; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-43: representation_schema ENTITY gear_pair SUBTYPE OF (kinematic_pair); radius_first_link : length_measure; radius_second_link : length_measure; bevel : plane_angle_measure; helical_angle : plane_angle_measure; gear_ratio : REAL; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY gear_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : gear_pair; lower_limit_actual_rotation_1 : rotational_range_measure; upper_limit_actual_rotation_1 : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_rotation_1 ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_rotation_1 ) ) ) XOR ( lower_limit_actual_rotation_1=2 ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY general_material_property SUBTYPE OF (general_property); WHERE wr1: SIZEOF ( QUERY ( gpa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.GENERAL_PROPERTY_ASSOCIATION.'' + ''BASE_DEFINITION'' ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''MATERIAL_PROPERTY'' IN TYPEOF ( gpa.derived_definition ) ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY general_property; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY general_property_association; name : label; description : OPTIONAL text; base_definition : general_property; derived_definition : derived_property_select; WHERE wr1: SIZEOF ( USEDIN ( derived_definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) ) = 1; wr2:derived_definition.name = base_definition.name; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY general_property_relationship; name : label; description : OPTIONAL text; relating_property : general_property; related_property : general_property; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY generic_expression ABSTRACT SUPERTYPE OF (ONEOF(simple_generic_expression, unary_generic_expression, binary_generic_expression, multiple_arity_generic_expression)); WHERE wr1:is_acyclic ( SELF ) ; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY generic_literal ABSTRACT SUPERTYPE SUBTYPE OF (simple_generic_expression); END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY generic_variable ABSTRACT SUPERTYPE SUBTYPE OF (simple_generic_expression); INVERSE interpretation : environment FOR syntactic_representation; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY geometric_alignment SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) >1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY geometric_curve_set SUBTYPE OF (geometric_set); WHERE wr1: SIZEOF ( QUERY ( temp <* SELF\geometric_set.elements | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE'' IN TYPEOF ( temp ) ) ) = 0; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY geometric_intersection SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) >1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY geometric_representation_context SUBTYPE OF (representation_context); coordinate_space_dimension : dimension_count; END_ENTITY; -- 10303-42: geometry_schema ENTITY geometric_representation_item SUPERTYPE OF (ONEOF(point,direction,vector,placement, cartesian_transformation_operator,curve,surface, edge_curve,face_surface,poly_loop,vertex_point, solid_model,boolean_result,sphere, right_circular_cone,right_circular_cylinder,torus, block,right_angular_wedge,half_space_solid, shell_based_surface_model, face_based_surface_model,edge_based_wireframe_model, geometric_set)) SUBTYPE OF (representation_item); DERIVE dim : dimension_count := dimension_of(SELF); WHERE wr1: SIZEOF ( QUERY ( using_rep <* using_representations ( SELF ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( using_rep. context_of_items ) ) ) ) = 0; END_ENTITY; -- 10303-42: geometry_schema ENTITY geometric_set SUPERTYPE OF (geometric_curve_set) SUBTYPE OF (geometric_representation_item); elements : SET[1:?] OF geometric_set_select; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY geometric_tolerance; name : label; description : text; magnitude : measure_with_unit; toleranced_shape_aspect : shape_aspect; WHERE wr1: ( ''NUMBER'' IN TYPEOF ( magnitude\ measure_with_unit. value_component ) ) AND ( magnitude\ measure_with_unit. value_component>=0.0 ) ; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY geometric_tolerance_relationship; name : label; description : text; relating_geometric_tolerance : geometric_tolerance; related_geometric_tolerance : geometric_tolerance; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY geometric_tolerance_with_datum_reference SUBTYPE OF (geometric_tolerance); datum_system : SET[1:?] OF datum_reference; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY geometric_tolerance_with_defined_unit SUBTYPE OF (geometric_tolerance); unit_size : measure_with_unit; WHERE wr1: ( ''NUMBER'' IN TYPEOF ( unit_size\ measure_with_unit. value_component ) ) AND ( unit_size\ measure_with_unit. value_component>0.0 ) ; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY geometrical_tolerance_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY geometrically_bounded_2d_wireframe_representation SUBTYPE OF (shape_representation); WHERE wr1:SELF.context_of_items\ geometric_representation_context. coordinate_space_dimension = 2; wr2: SIZEOF ( QUERY ( item <* SELF.items | NOT ( SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_2D'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM''] ) = 1 ) ) ) = 0; wr3: SIZEOF ( QUERY ( item <* SELF.items | SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM''] ) = 1 ) ) >=1; wr4: SIZEOF ( QUERY ( mi <* QUERY ( item <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( item ) ) ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source. mapped_representation ) ) ) ) = 0; wr5: SIZEOF ( QUERY ( gcs <* QUERY ( item <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( elem <* gcs\ geometric_set.elements | NOT ( SIZEOF ( TYPEOF ( elem ) *[''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''CIRCLE'' , ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''ELLIPSE'' , ''AUTOMOTIVE_DESIGN.''+ ''OFFSET_CURVE_2D'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' , ''AUTOMOTIVE_DESIGN.''+ ''TRIMMED_CURVE''] ) = 1 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( gcs <* QUERY ( item <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( crv <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( elem ) ) ) | NOT ( valid_basis_curve_in_2d_wireframe ( crv ) ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( gcs <* QUERY ( item <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( pnt <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''POINT'' IN TYPEOF ( elem ) ) ) | NOT ( SIZEOF ( TYPEOF ( pnt ) *[''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE''] ) = 1 ) ) ) = 0 ) ) ) = 0; wr8: SIZEOF ( QUERY ( gcs <* QUERY ( item <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( pl <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' IN TYPEOF ( elem ) ) ) | NOT ( SIZEOF ( pl\ polyline.points ) >2 ) ) ) = 0 ) ) ) = 0; END_ENTITY; -- 10303-503: aic_geometrically_bounded_2d_wireframe ENTITY geometrically_bounded_surface_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) >0; wr3: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source. mapped_representation ) ) AND ( SIZEOF ( QUERY ( mr_it <* mi\ mapped_item.mapping_source.mapped_representation. items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' IN TYPEOF ( mr_it ) ) ) ) >0 ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( gs <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( pnt <* QUERY ( gsel <* gs\ geometric_set.elements | ''AUTOMOTIVE_DESIGN.''+ ''POINT'' IN TYPEOF ( gsel ) ) | NOT ( gbsf_check_point ( pnt ) ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( gs <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cv <* QUERY ( gsel <* gs\ geometric_set.elements | ''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( gsel ) ) | NOT ( gbsf_check_curve ( cv ) ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( gs <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( sf <* QUERY ( gsel <* gs\ geometric_set.elements | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE'' IN TYPEOF ( gsel ) ) | NOT ( gbsf_check_surface ( sf ) ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( gs <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_SET'' IN TYPEOF ( it ) ) | SIZEOF ( QUERY ( gsel <* gs\ geometric_set.elements | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE'' IN TYPEOF ( gsel ) ) ) >0 ) ) >0; END_ENTITY; -- 10303-507: aic_geometrically_bounded_surface ENTITY geometrically_bounded_wireframe_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( TYPEOF ( it ) *[''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM''] ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( TYPEOF ( it ) *[''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM''] ) = 1 ) ) >=1; wr3: SIZEOF ( QUERY ( gcs <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( crv <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( elem ) ) ) | NOT ( valid_geometrically_bounded_wf_curve ( crv ) ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( gcs <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( pnts <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''POINT'' IN TYPEOF ( elem ) ) ) | NOT ( valid_geometrically_bounded_wf_point ( pnts ) ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( gcs <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( cnc <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''CONIC'' IN TYPEOF ( elem ) ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'' IN TYPEOF ( cnc\ conic.position ) ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( gcs <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_CURVE_SET'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( QUERY ( pline <* QUERY ( elem <* gcs\ geometric_set.elements | ( ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' IN TYPEOF ( elem ) ) ) | NOT ( SIZEOF ( pline\ polyline.points ) >2 ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source. mapped_representation ) ) ) ) = 0; END_ENTITY; -- 10303-510: aic_geometrically_bounded_wireframe ENTITY global_uncertainty_assigned_context SUBTYPE OF (representation_context); uncertainty : SET[1:?] OF uncertainty_measure_with_unit; END_ENTITY; -- 10303-43: representation_schema ENTITY global_unit_assigned_context SUBTYPE OF (representation_context); units : SET[1:?] OF unit; END_ENTITY; -- 10303-41: measure_schema ENTITY group; name : label; description : OPTIONAL text; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: group_schema ENTITY group_assignment ABSTRACT SUPERTYPE; assigned_group : group; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY group_relationship; name : label; description : OPTIONAL text; relating_group : group; related_group : group; END_ENTITY; -- 10303-41: group_schema ENTITY half_space_solid SUBTYPE OF (geometric_representation_item); base_surface : surface; agreement_flag : BOOLEAN; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY hardness_representation SUBTYPE OF (representation); WHERE wr1: ( {2<=SIZEOF ( SELF.items ) <=4} ) AND ( SIZEOF ( QUERY ( i <* items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name IN [ ''measuring method'' , ''measuring position'' ] ) ) ) + SIZEOF ( QUERY ( i <* items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) AND ( i.name IN [''depth'' , ''hardness''] ) ) ) = SIZEOF ( SELF.items ) ) ; wr2: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''measuring method'' ) ) = 1; wr3: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''hardness'' ) ) = 1; wr4: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''measuring position'' ) ) <=1; wr5: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''depth'' ) ) <=1; wr6: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | SIZEOF ( QUERY ( gpa <* USEDIN ( pdr.definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' IN TYPEOF ( gpa.base_definition ) ) AND ( gpa.base_definition.name = ''surface_condition'' ) ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY hidden_element_over_riding_styled_item SUBTYPE OF (context_dependent_over_riding_styled_item); WHERE wr1: SIZEOF ( SELF.style_context ) = 1; wr2:''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW'' IN TYPEOF ( SELF.style_context[1] ) ; wr3:''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE'' IN TYPEOF ( SELF.item ) ; wr4:''AUTOMOTIVE_DESIGN.'' + ''CAMERA_MODEL_D3_WITH_HLHSR'' IN TYPEOF ( SELF.item\ mapped_item.mapping_source. mapping_origin ) ; wr5: SIZEOF ( QUERY ( rep <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW'' IN TYPEOF ( rep ) ) ) >0; END_ENTITY; -- 10303-214: automotive_design ENTITY hole_bottom SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [''through'' , ''flat'' , ''flat with taper'' , ''flat with radius'' , ''spherical'' , ''conical'']; wr3: NOT ( SELF.description IN [''through'' , ''flat''] ) OR ( SIZEOF ( get_shape_aspect_property_definition_representations ( SELF ) ) = 0 ) ; wr4: NOT ( SELF.description IN [ ''flat with radius'' , ''flat with taper'' , ''spherical'' , ''conical''] ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr5: ( SELF.description<> ''flat with taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr6: ( SELF.description<>''conical'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {1<=SIZEOF ( pdr. used_representation.items ) <=2} ) ) = 1 ) ; wr7: NOT ( SELF.description IN [ ''flat with radius'' , ''spherical''] ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1 ) ; wr8: ( SELF.description<> ''flat with radius'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''corner radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr9: ( SELF.description<>''spherical'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr10: ( SELF.description<>''conical'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''tip radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) <=1 ) ) ) = 1 ) ; wr11: ( SELF.description<>''conical'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''tip angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr12: ( SELF.description<> ''flat with taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''final diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr13: ( SELF.description<> ''flat with taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''taper diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr14: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''hole bottom usage'' ) AND ( sar. related_shape_aspect.description = ''bottom condition occurrence'' ) ) ) = 1; wr15: ( SELF.description = ''through'' ) OR ( SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name IN [ ''hole depth start'' , ''hole depth end'' ] ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY hole_in_panel SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''hole profile'' ) AND ( sa.description = ''closed profile occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'']* TYPEOF ( sar. relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr2: SIZEOF ( get_property_definition_representations ( SELF ) ) = SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | SIZEOF ( pdr.used_representation.items ) = 1 ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY homokinetic_pair SUBTYPE OF (universal_pair); WHERE wr1: NOT EXISTS ( SELF.input_skew_angle ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY hyperbola SUBTYPE OF (conic); semi_axis : positive_length_measure; semi_imag_axis : positive_length_measure; END_ENTITY; -- 10303-42: geometry_schema ENTITY id_attribute; attribute_value : identifier; identified_item : id_attribute_select; END_ENTITY; -- 10303-41: basic_attribute_schema ENTITY identification_assignment ABSTRACT SUPERTYPE; assigned_id : identifier; role : identification_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY identification_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY inclusion_product_concept_feature SUBTYPE OF (conditional_concept_feature); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PACKAGE_PRODUCT_CONCEPT_FEATURE'' IN TYPEOF ( SELF ) ) ; wr2: SIZEOF ( QUERY ( cfr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.CONCEPT_FEATURE_RELATIONSHIP.'' + ''RELATING_PRODUCT_CONCEPT_FEATURE'' ) | ''AUTOMOTIVE_DESIGN.'' + ''CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION'' IN TYPEOF ( cfr ) ) ) + SIZEOF ( QUERY ( cfr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.CONCEPT_FEATURE_RELATIONSHIP.'' + ''RELATED_PRODUCT_CONCEPT_FEATURE'' ) | ''AUTOMOTIVE_DESIGN.'' + ''CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION'' IN TYPEOF ( cfr ) ) ) = 0; wr3:SELF.condition.conditional_operator.name = ''implication''; END_ENTITY; -- 10303-214: automotive_design ENTITY index_expression SUBTYPE OF (string_expression,binary_generic_expression); DERIVE operand : generic_expression := SELF\binary_generic_expression.operands[1]; index : generic_expression := SELF\binary_generic_expression.operands[2]; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( operand ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( index ) ) ; wr2:is_int_expr ( index ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY initial_state; applies_to_mechanism : mechanism; pair_values : SET[1:?] OF pair_value; WHERE wr1: SIZEOF ( QUERY ( joint <* applies_to_mechanism. structure_definition.joints | SIZEOF ( QUERY ( init_val <* pair_values | init_val.applies_to_pair.joint:=:joint ) ) <>1 ) ) = 0; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY instanced_feature SUBTYPE OF (shape_aspect,feature_definition); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.product_definitional; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''maximum feature limit'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY int_literal SUBTYPE OF (literal_number); SELF\literal_number.the_value : INTEGER; END_ENTITY; -- 13584-20: expressions_schema ENTITY int_numeric_variable SUBTYPE OF (numeric_variable); END_ENTITY; -- 13584-20: expressions_schema ENTITY int_value_function SUBTYPE OF (value_function); END_ENTITY; -- 13584-20: expressions_schema ENTITY interpolated_configuration_sequence; interpolation : SET[1:?] OF configuration_interpolation; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY intersection_curve SUBTYPE OF (surface_curve); WHERE wr1: SIZEOF ( SELF\surface_curve.associated_geometry ) = 2; wr2:associated_surface ( SELF\surface_curve. associated_geometry[1] ) <>associated_surface ( SELF\surface_curve.associated_geometry[2] ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY interval_expression SUBTYPE OF (boolean_expression,multiple_arity_generic_expression); DERIVE interval_low : generic_expression := SELF\multiple_arity_generic_expression.operands[1]; interval_item : generic_expression := SELF\multiple_arity_generic_expression.operands[2]; interval_high : generic_expression := SELF\multiple_arity_generic_expression.operands[3]; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''EXPRESSION'' IN TYPEOF ( interval_low ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''EXPRESSION'' IN TYPEOF ( interval_item ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''EXPRESSION'' IN TYPEOF ( interval_high ) ) ; wr2: ( ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF.interval_low ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF.interval_high ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF.interval_item ) ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF.interval_low ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( SELF.interval_item ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( SELF.interval_high ) ) ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY invisibility; invisible_items : SET[1:?] OF invisible_item; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY item_defined_transformation; name : label; description : OPTIONAL text; transform_item_1 : representation_item; transform_item_2 : representation_item; END_ENTITY; -- 10303-43: representation_schema ENTITY joggle SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {5<=SIZEOF ( pdr. used_representation.items ) <=10} ) ) ) = 0; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''base radius 1'' , ''base radius 2'' , ''direction angle 1'' , ''direction angle 2'' , ''height'' , ''slope angle 1'' , ''slope angle 2'' , ''top radius 1'' , ''top radius 2'' ] ) ) ) >0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''direction angle 1'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''direction angle 2'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''height'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''slope angle 1'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''slope angle 2'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''defining path'' ) AND ( sa.description = ''path feature component occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description = ''linear'' ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.name = ''termination'' ) AND ( sa.description = ''joggle termination occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''joggle termination usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE_TERMINATION'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr10: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius 1'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr11: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius 2'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr12: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''top radius 1'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr13: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''top radius 2'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY joggle_termination SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [ ''value termination'' , ''face termination'' ]; wr3: ( SELF.description = ''value termination'' ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 0 ) ; wr4: ( SELF.description<> ''value termination'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr5: ( SELF.description<> ''value termination'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''depth'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr6: ( SELF.description<> ''value termination'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr7: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''joggle termination usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE'' IN TYPEOF ( sar. related_shape_aspect.of_shape.definition ) ) AND ( sar. related_shape_aspect.of_shape.definition\ characterized_object.name = ''termination'' ) AND ( sar. related_shape_aspect.of_shape.definition\ characterized_object.description = ''joggle termination occurrence'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY kinematic_analysis_consistency; control : kinematic_control; result : kinematic_analysis_result; WHERE wr1:control.controlled_mechanism:=:result.analysed_mechanism; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY kinematic_analysis_result; analysed_mechanism : mechanism; contained_kinematic_results : SET[1:?] OF kinematic_result; WHERE wr1: ( SIZEOF ( QUERY ( result <* contained_kinematic_results | ''AUTOMOTIVE_DESIGN.''+ ''RESULTING_PATH'' IN TYPEOF ( result ) ) ) >0 ) XOR ( SIZEOF ( QUERY ( result <* contained_kinematic_results | ( ( ''AUTOMOTIVE_DESIGN.'' + ''INTERPOLATED_CONFIGURATION_SEQUENCE'' IN TYPEOF ( result ) ) AND ( SIZEOF ( QUERY ( sequence <* result\ interpolated_configuration_sequence.interpolation | ( sequence.interpolation<>undefined ) ) ) >0 ) ) ) ) = 0 ) ; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY kinematic_control; controlled_mechanism : mechanism; contained_kinematic_programs : SET[1:?] OF kinematic_analysis_definition; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY kinematic_frame_background_representation SUBTYPE OF (representation); SELF\representation.items : SET[1:?] OF kinematic_frame_background; SELF\representation.context_of_items : geometric_representation_context; WHERE wr1:SELF\representation.context_of_items\ geometric_representation_context. coordinate_space_dimension = 3; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_frame_background_representation_association SUBTYPE OF (representation_relationship_with_transformation); SELF\representation_relationship_with_transformation .transformation_operator : kinematic_frame_based_transformation; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_LINK_REPRESENTATION'' IN TYPEOF ( SELF\representation_relationship.rep_1 ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_FRAME_BACKGROUND_REPRESENTATION'' IN TYPEOF ( SELF\representation_relationship.rep_2 ) ; wr3:SELF\representation_relationship_with_transformation. transformation_operator\ kinematic_frame_based_transformation.transformator IN SELF\representation_relationship.rep_1.items; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_frame_based_transformation SUBTYPE OF (geometric_representation_item, functionally_defined_transformation); transformator : rigid_placement; WHERE wr1:SELF\geometric_representation_item.dim = 3; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_ground_representation SUBTYPE OF (representation); INVERSE property : kinematic_property_representation_relation FOR used_representation; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF\representation.context_of_items ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_joint; first_link : kinematic_link; second_link : kinematic_link; INVERSE structure : kinematic_structure FOR joints; WHERE wr1:first_link:<>:second_link; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_link; WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.KINEMATIC_JOINT.FIRST_LINK'' ) + USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.KINEMATIC_JOINT.SECOND_LINK'' ) ) >0; wr2:unique_link_usage ( SELF ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_link_representation SUBTYPE OF (representation); SELF\representation.context_of_items : geometric_representation_context; DERIVE link_frame : geometric_representation_context := SELF\representation. context_of_items; INVERSE link_representation_relation : kinematic_link_representation_relation FOR geometric_aspects; WHERE wr1: SIZEOF ( QUERY ( item <* SELF\representation.items | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''RIGID_PLACEMENT'' IN TYPEOF ( item ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_TRANSFORMATION_OPERATOR_3D'' IN TYPEOF ( item ) ) ) ) ) = 0; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_link_representation_association SUBTYPE OF (representation_relationship); SELF\representation_relationship.rep_1 : kinematic_link_representation; WHERE wr1:SELF\representation_relationship. rep_2.context_of_items:=:SELF\representation_relationship. rep_1\representation.context_of_items; wr2: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_GROUND_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_LINK_REPRESENTATION'']* TYPEOF ( SELF\representation_relationship.rep_2 ) ) = 0; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_link_representation_relation; topological_aspects : kinematic_link; geometric_aspects : kinematic_link_representation; UNIQUE ur1 : topological_aspects; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_pair SUBTYPE OF (item_defined_transformation); joint : kinematic_joint; DERIVE pair_placement_in_first_link_context : rigid_placement := SELF\ item_defined_transformation. transform_item_1; pair_placement_in_second_link_context : rigid_placement := SELF\ item_defined_transformation. transform_item_2; UNIQUE ur1 : joint; WHERE wr1:coordinated_pair_link_representation ( joint.first_link , pair_placement_in_first_link_context ) ; wr2:coordinated_pair_link_representation ( joint.second_link , pair_placement_in_second_link_context ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_path SUBTYPE OF (representation_item); END_ENTITY; -- 10303-105: kinematic_motion_representation_schema ENTITY kinematic_property_definition SUBTYPE OF (property_definition); ground_definition : characterized_definition; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_property_representation_relation SUBTYPE OF (property_definition_representation); UNIQUE ur1 : SELF\property_definition_representation.definition; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_PROPERTY_DEFINITION'' IN TYPEOF ( SELF\property_definition_representation. definition ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_GROUND_REPRESENTATION'' IN TYPEOF ( SELF\property_definition_representation. used_representation ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY kinematic_structure; joints : SET[1:?] OF kinematic_joint; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY known_source SUBTYPE OF (external_source,pre_defined_item); END_ENTITY; -- 10303-214: automotive_design ENTITY language SUBTYPE OF (group); WHERE wr1: ( SIZEOF ( QUERY ( ca <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''CLASSIFICATION_ASSIGNMENT.'' + ''ASSIGNED_CLASS'' ) | ''AUTOMOTIVE_DESIGN.'' + ''LANGUAGE_ASSIGNMENT'' IN TYPEOF ( ca ) ) ) >0 ) OR ( SIZEOF ( QUERY ( aca <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_CLASSIFICATION_ASSIGNMENT.'' + ''ASSIGNED_CLASS'' ) | ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT'' IN TYPEOF ( aca ) ) ) >0 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY language_assignment SUBTYPE OF (classification_assignment); items : SET[1:?] OF language_item; WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''LANGUAGE'' IN TYPEOF ( SELF.assigned_class ) ; wr2:SELF.role.name = ''language''; wr3: SIZEOF ( SELF.items ) = SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION'' IN TYPEOF ( i ) ) AND ( i\ representation.name = ''document content'' ) ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY leader_curve SUBTYPE OF (annotation_curve_occurrence); WHERE wr1: SIZEOF ( QUERY ( ldc <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT.''+ ''CONTENTS'' ) | ''AUTOMOTIVE_DESIGN.'' + ''LEADER_DIRECTED_CALLOUT'' IN TYPEOF ( ldc ) ) ) >=1; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY leader_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( l_1 <* SELF\draughting_callout. contents | ''AUTOMOTIVE_DESIGN.''+ ''LEADER_CURVE'' IN ( TYPEOF ( l_1 ) ) ) ) >=1; wr2: SIZEOF ( SELF\draughting_callout.contents ) >=2; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY leader_directed_dimension SUBTYPE OF (leader_directed_callout); WHERE wr1: SIZEOF ( QUERY ( con <* SELF.contents | ''AUTOMOTIVE_DESIGN.''+ ''LEADER_CURVE'' IN TYPEOF ( con ) ) ) = 1; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY leader_terminator SUBTYPE OF (terminator_symbol); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''LEADER_CURVE'' IN TYPEOF ( SELF\terminator_symbol.annotated_curve ) ; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY length_function SUBTYPE OF (numeric_expression,unary_generic_expression); SELF\unary_generic_expression.operand : string_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY length_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''LENGTH_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY length_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 1.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY light_source SUPERTYPE OF (ONEOF(light_source_ambient,light_source_directional, light_source_positional,light_source_spot)) SUBTYPE OF (geometric_representation_item); light_colour : colour; WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM.''+ ''ITEM'' ) ) = 0; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY light_source_ambient SUBTYPE OF (light_source); END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY light_source_directional SUBTYPE OF (light_source); orientation : direction; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY light_source_positional SUBTYPE OF (light_source); position : cartesian_point; constant_attenuation : REAL; distance_attenuation : REAL; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY light_source_spot SUBTYPE OF (light_source); position : cartesian_point; orientation : direction; concentration_exponent : REAL; constant_attenuation : REAL; distance_attenuation : REAL; spread_angle : positive_plane_angle_measure; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY like_expression SUBTYPE OF (comparison_expression); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF\comparison_expression.operands[1] ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( SELF\comparison_expression.operands[2] ) ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY limits_and_fits; form_variance : label; zone_variance : label; grade : label; source : text; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY line SUBTYPE OF (curve); pnt : cartesian_point; dir : vector; WHERE wr1:dir.dim = pnt.dim; END_ENTITY; -- 10303-42: geometry_schema ENTITY line_profile_tolerance SUBTYPE OF (geometric_tolerance); WHERE wr1: ( NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE'' ) IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( SELF\geometric_tolerance_with_datum_reference.datum_system ) <=3 ) ; wr2: SIZEOF ( QUERY ( sar <* USEDIN ( SELF\geometric_tolerance.toleranced_shape_aspect , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.''+ ''RELATING_SHAPE_ASPECT'' ) | ( sar.name IN [ ''affected plane association'' , ''resulting intersection curve association'' ] ) ) ) = 1; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY linear_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY literal_number ABSTRACT SUPERTYPE OF (ONEOF(int_literal,real_literal)) SUBTYPE OF (simple_numeric_expression,generic_literal); the_value : NUMBER; END_ENTITY; -- 13584-20: expressions_schema ENTITY local_time; hour_component : hour_in_day; minute_component : OPTIONAL minute_in_hour; second_component : OPTIONAL second_in_minute; zone : coordinated_universal_time_offset; WHERE wr1:valid_time ( SELF ) ; END_ENTITY; -- 10303-41: date_time_schema ENTITY location_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( SELF.items ) = 1; wr2: SIZEOF ( QUERY ( i <* SELF.items | ''AUTOMOTIVE_DESIGN.'' + ''POINT'' IN TYPEOF ( i ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY locator SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {2<=SIZEOF ( pdr. used_representation.items ) <=5} ) ) ) = 0; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''tip radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''tip angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY log10_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY log2_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY log_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY loop SUPERTYPE OF (ONEOF(vertex_loop,edge_loop,poly_loop)) SUBTYPE OF (topological_representation_item); END_ENTITY; -- 10303-42: topology_schema ENTITY lot_effectivity SUBTYPE OF (effectivity); effectivity_lot_id : identifier; effectivity_lot_size : measure_with_unit; END_ENTITY; -- 10303-41: effectivity_schema ENTITY luminous_intensity_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''LUMINOUS_INTENSITY_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY luminous_intensity_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 1.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY make_from_usage_option SUBTYPE OF (product_definition_usage); ranking : INTEGER; ranking_rationale : text; quantity : measure_with_unit; WHERE wr1: ( NOT ( ''NUMBER'' IN TYPEOF ( quantity.value_component ) ) ) OR ( quantity.value_component>0 ) ; END_ENTITY; -- 10303-44: product_structure_schema ENTITY manifold_solid_brep SUBTYPE OF (solid_model); outer : closed_shell; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY manifold_surface_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) >0; wr3: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''MANIFOLD_SURFACE_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\mapped_item.mapping_source.mapped_representation ) ) AND ( SIZEOF ( QUERY ( mr_it <* mi\ mapped_item. mapping_source.mapped_representation.items | ( ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( mr_it ) ) ) ) >0 ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( sh <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''OPEN_SHELL'' , ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_CLOSED_SHELL'' , ''AUTOMOTIVE_DESIGN.''+ ''CLOSED_SHELL'']* TYPEOF ( sh ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''FACE_SURFACE'' IN TYPEOF ( fa ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( msf_surface_check ( fa\ face_surface.face_geometry ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( bnds <* fa.bounds | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' , ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'']* TYPEOF ( bnds.bound ) ) = 1 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr8: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( oe.edge_element ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr9: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe_cv <* QUERY ( oe <* elp_fbnds\ path.edge_list | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( oe.edge_element ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''CONIC'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_REPLICA'' , ''AUTOMOTIVE_DESIGN.''+ ''LINE'' , ''AUTOMOTIVE_DESIGN.''+ ''OFFSET_CURVE_3D'' , ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' , ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_CURVE'']* TYPEOF ( oe_cv.edge_element\ edge_curve.edge_geometry ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr10: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( msf_curve_check ( oe. edge_element\ edge_curve.edge_geometry ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr11: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe.edge_element.edge_start ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe.edge_element.edge_end ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr12: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( oe. edge_element.edge_start\ vertex_point.vertex_geometry ) ) = 1 ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( oe.edge_element.edge_end\ vertex_point.vertex_geometry ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr13: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( vlp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( vlp_fbnds\ vertex_loop. loop_vertex ) ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr14: SIZEOF ( QUERY ( sbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''SHELL_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* sbsm\ shell_based_surface_model.sbsm_boundary | NOT ( SIZEOF ( QUERY ( fa <* cfs\ connected_face_set.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( vlp_fbnds <* QUERY ( bnds <* fa.bounds | ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( vlp_fbnds\ vertex_loop.loop_vertex\ vertex_point. vertex_geometry ) ) = 1 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; END_ENTITY; -- 10303-509: aic_manifold_surface ENTITY mapped_item SUBTYPE OF (representation_item); mapping_source : representation_map; mapping_target : representation_item; WHERE wr1:acyclic_mapped_representation ( using_representations ( SELF ) , [SELF] ) ; END_ENTITY; -- 10303-43: representation_schema ENTITY mass_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''MASS_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY mass_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 1.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY material_designation; name : label; definitions : SET[1:?] OF characterized_definition; END_ENTITY; -- 10303-45: material_property_definition_schema ENTITY material_designation_characterization; name : label; description : text; designation : material_designation; property : characterized_material_property; END_ENTITY; -- 10303-45: material_property_definition_schema ENTITY material_property SUBTYPE OF (property_definition); UNIQUE ur1 : SELF\property_definition.name,SELF\property_definition.definition; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''CHARACTERIZED_OBJECT'' IN TYPEOF ( SELF\property_definition.definition ) ) OR ( SIZEOF ( bag_to_set ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.''+ ''DEFINITION'' ) ) - QUERY ( temp <* bag_to_set ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.''+ ''DEFINITION'' ) ) | ( ''AUTOMOTIVE_DESIGN.'' + ''MATERIAL_PROPERTY_REPRESENTATION'' IN TYPEOF ( temp ) ) ) ) = 0 ) ; END_ENTITY; -- 10303-45: material_property_definition_schema ENTITY material_property_representation SUBTYPE OF (property_definition_representation); dependent_environment : data_environment; END_ENTITY; -- 10303-45: material_property_representation_schema ENTITY maximum_function SUBTYPE OF (multiple_arity_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY measure_qualification; name : label; description : text; qualified_measure : measure_with_unit; qualifiers : SET[1:?] OF value_qualifier; WHERE wr1: SIZEOF ( QUERY ( temp <* qualifiers | ''AUTOMOTIVE_DESIGN.''+ ''PRECISION_QUALIFIER'' IN TYPEOF ( temp ) ) ) <2; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY measure_representation_item SUBTYPE OF (representation_item,measure_with_unit); END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY measure_with_unit SUPERTYPE OF (ONEOF(length_measure_with_unit, mass_measure_with_unit, time_measure_with_unit, electric_current_measure_with_unit, thermodynamic_temperature_measure_with_unit, celsius_temperature_measure_with_unit, amount_of_substance_measure_with_unit, luminous_intensity_measure_with_unit, plane_angle_measure_with_unit, solid_angle_measure_with_unit, area_measure_with_unit, volume_measure_with_unit, ratio_measure_with_unit)); value_component : measure_value; unit_component : unit; WHERE wr1:valid_units ( SELF ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY mechanical_design_geometric_presentation_area SUBTYPE OF (presentation_area); WHERE wr1: SIZEOF ( QUERY ( it1 <* SELF.items | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( it1 ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it1 ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''PRESENTATION_VIEW'' IN TYPEOF ( it1\mapped_item.mapping_source. mapped_representation ) ) ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( pv <* QUERY ( mi1 <* QUERY ( it1 <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it1 ) ) | ''AUTOMOTIVE_DESIGN.''+ ''PRESENTATION_VIEW'' IN TYPEOF ( mi1\mapped_item. mapping_source.mapped_representation ) ) | NOT ( SIZEOF ( QUERY ( it2 <* pv\ mapped_item.mapping_source. mapped_representation\ representation.items | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( it2 ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it2 ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE_3D_WITH_SCALE'' IN TYPEOF ( it2 ) ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.''+ ''PRESENTATION_VIEW'' IN TYPEOF ( it2\mapped_item.mapping_source. mapped_representation ) ) ) OR ( ( ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE_3D_WITH_SCALE'' IN TYPEOF ( it2 ) ) AND NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' IN TYPEOF ( it2\mapped_item.mapping_source. mapped_representation ) ) ) ) ) ) = 0 ) ) ) = 0; wr3: ( SIZEOF ( QUERY ( ps <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ( ps.size\ planar_extent.size_in_x<=0 ) OR ( ps.size\ planar_extent.size_in_y<=0 ) ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( ais <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''AREA_IN_SET.''+ ''AREA'' ) | ( SIZEOF ( QUERY ( ps <* USEDIN ( ais , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ( ps.size\ planar_extent.size_in_x<=0 ) OR ( ps.size\ planar_extent.size_in_y<=0 ) ) ) ) >0 ) ) ) = 0 ) ; wr4: ( SIZEOF ( QUERY ( ps <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_2D'' IN TYPEOF ( ps.size.placement ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( ps <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_3D'' IN TYPEOF ( ps.size.placement ) ) ) ) = 0 ) OR ( ( SIZEOF ( QUERY ( ais <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''AREA_IN_SET.''+ ''AREA'' ) | ( SIZEOF ( QUERY ( ps <* USEDIN ( ais , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_2D'' IN TYPEOF ( ps.size.placement ) ) ) ) = 1 ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( ais <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''AREA_IN_SET.''+ ''AREA'' ) | ( SIZEOF ( QUERY ( ps <* USEDIN ( ais , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT_3D'' IN TYPEOF ( ps.size.placement ) ) ) ) = 0 ) ) ) = 1 ) ) ; END_ENTITY; -- 10303-517: aic_mechanical_design_geometric_presentation ENTITY mechanical_design_geometric_presentation_representation SUBTYPE OF (representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' , ''AUTOMOTIVE_DESIGN.''+ ''CAMERA_MODEL_D3'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'']* TYPEOF ( mi\mapped_item.mapping_source. mapped_representation ) ) = 1 ) ) ) = 0; wr3: SIZEOF ( QUERY ( smi <* QUERY ( si <* QUERY ( it <* SELF.items | ( ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) ) | ( ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( si\ styled_item.item ) ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' IN TYPEOF ( smi\ styled_item.item\ mapped_item.mapping_source. mapped_representation ) ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( pss <* psa.styles | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''POINT_STYLE'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' , ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'']* TYPEOF ( pss ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psbc <* QUERY ( psa <* si\ styled_item.styles | ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_STYLE_BY_CONTEXT'' IN TYPEOF ( psa ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''REPRESENTATION'']* TYPEOF ( psbc\ presentation_style_by_context.style_context ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ps <* QUERY ( pss <* psa.styles | ''AUTOMOTIVE_DESIGN.''+ ''POINT_STYLE'' IN TYPEOF ( pss ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( ps\ point_style.marker_size ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( ps\ point_style.marker_colour ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( cs <* QUERY ( pss <* psa.styles | ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( pss ) ) | NOT ( ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( cs\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( cs\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( cs\ curve_style.curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr8: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_SIDE_STYLE'' IN TYPEOF ( ssu\ surface_style_usage.style ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr9: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_PARAMETER_LINE'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_CONTROL_GRID'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_SILHOUETTE'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_SEGMENTATION_CURVE'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_FILL_AREA'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_BOUNDARY'']* TYPEOF ( sses ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr10: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( sspl <* QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_PARAMETER_LINE'' IN TYPEOF ( sses ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sspl\ surface_style_parameter_line. style_of_parameter_lines ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( sspl\ surface_style_parameter_line.style_of_parameter_lines\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( sspl\ surface_style_parameter_line.style_of_parameter_lines\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( sspl\ surface_style_parameter_line.style_of_parameter_lines\ curve_style.curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr11: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( sscg <* QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_CONTROL_GRID'' IN TYPEOF ( sses ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sscg\ surface_style_control_grid.style_of_control_grid ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( sscg\ surface_style_control_grid. style_of_control_grid\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( sscg\ surface_style_control_grid. style_of_control_grid\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( sscg\ surface_style_control_grid.style_of_control_grid\ curve_style.curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr12: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( sssh <* QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_SILHOUETTE'' IN TYPEOF ( sses ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sssh\ surface_style_silhouette.style_of_silhouette ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( sssh\ surface_style_silhouette. style_of_silhouette\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( sssh\ surface_style_silhouette. style_of_silhouette\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( sssh\ surface_style_silhouette.style_of_silhouette\ curve_style. curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr13: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( sssc <* QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_SEGMENTATION_CURVE'' IN TYPEOF ( sses ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( sssc\ surface_style_segmentation_curve. style_of_segmentation_curve ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( sssc\ surface_style_segmentation_curve. style_of_segmentation_curve\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( sssc\ surface_style_segmentation_curve. style_of_segmentation_curve\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( sssc\ surface_style_segmentation_curve. style_of_segmentation_curve\ curve_style.curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr14: SIZEOF ( QUERY ( si <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''STYLED_ITEM'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( psa <* si\ styled_item.styles | NOT ( SIZEOF ( QUERY ( ssu <* QUERY ( pss <* psa. styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( pss ) ) | NOT ( SIZEOF ( QUERY ( ssbd <* QUERY ( sses <* ssu\ surface_style_usage.style\ surface_side_style.styles | ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_BOUNDARY'' IN TYPEOF ( sses ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE'' IN TYPEOF ( ssbd\ surface_style_boundary.style_of_boundary ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''COLOUR_RGB'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR'']* TYPEOF ( ssbd\surface_style_boundary.style_of_boundary\ curve_style.curve_colour ) ) = 1 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POSITIVE_LENGTH_MEASURE'' IN TYPEOF ( ssbd\ surface_style_boundary.style_of_boundary\ curve_style.curve_width ) ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CURVE_STYLE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT'']* TYPEOF ( ssbd\ surface_style_boundary.style_of_boundary\ curve_style. curve_font ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; END_ENTITY; -- 10303-517: aic_mechanical_design_geometric_presentation ENTITY mechanism; structure_definition : kinematic_structure; base : kinematic_link; containing_property : kinematic_property_definition; WHERE wr1: SIZEOF ( QUERY ( joint <* structure_definition.joints | ( base:=:joint.first_link ) OR ( base:=:joint. second_link ) ) ) >0; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY mechanism_base_placement SUBTYPE OF (representation_relationship_with_transformation); base_of_mechanism : mechanism; SELF\representation_relationship_with_transformation .transformation_operator : cartesian_transformation_operator_3d; DERIVE SELF\representation_relationship.rep_2 : kinematic_link_representation := representation_of_link( base_of_mechanism.base); UNIQUE ur1 : base_of_mechanism; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_GROUND_REPRESENTATION'' IN TYPEOF ( SELF\representation_relationship.rep_1 ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''KINEMATIC_LINK_REPRESENTATION'' IN TYPEOF ( SELF\representation_relationship.rep_1 ) ) ; wr2:suitably_based_mechanism ( SELF , base_of_mechanism ) ; wr3: SELF\representation_relationship_with_transformation. transformation_operator IN SELF\representation_relationship.rep_1.items; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY minimum_function SUBTYPE OF (multiple_arity_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY minus_expression SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY minus_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY mod_expression SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY modified_geometric_tolerance SUBTYPE OF (geometric_tolerance); modifier : limit_condition; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY modified_pattern SUBTYPE OF (replicate_feature); WHERE wr1: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( sar.description = ''base pattern'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'']* TYPEOF ( sar. related_shape_aspect.of_shape.definition ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( SIZEOF ( QUERY ( sar1 <* USEDIN ( sar.related_shape_aspect , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( sar.related_shape_aspect:<>:sar1.related_shape_aspect ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PATTERN_OFFSET_MEMBERSHIP'' , ''AUTOMOTIVE_DESIGN.'' + ''PATTERN_OMIT_MEMBERSHIP'']* TYPEOF ( sar1 ) ) = 1 ) ) ) = 1 ) ) ) >=1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY moments_of_inertia_representation SUBTYPE OF (representation); WHERE wr1: ( SIZEOF ( SELF.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''moments of inertia matrix'' ) ) ) = 1 ) ; wr2: SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( SIZEOF ( i\ compound_representation_item.item_element ) = 3 ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''LIST_REPRESENTATION_ITEM'' IN TYPEOF ( i\ compound_representation_item.item_element ) ) AND value_range_aggregate_rep_item ( i\ compound_representation_item.item_element ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY motion_link_relationship SUPERTYPE OF (resulting_path) SUBTYPE OF (representation_relationship); SELF\representation_relationship.rep_1 : founded_kinematic_path; SELF\representation_relationship.rep_2 : kinematic_link_representation; related_frame : rigid_placement; DERIVE motion : founded_kinematic_path := SELF\representation_relationship.rep_1; frame_link : kinematic_link_representation := SELF\ representation_relationship.rep_2; WHERE wr1:related_frame IN frame_link\ representation.items; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY mult_expression SUBTYPE OF (multiple_arity_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY multi_language_attribute_assignment SUBTYPE OF (attribute_value_assignment); items : SET[1:?] OF multi_language_attribute_item; DERIVE language : label := get_multi_language(SELF); WHERE wr1:SELF\attribute_value_assignment.role.name = ''alternate language'' ; wr2: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( ala <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ala.attribute_name = ''attribute_value'' ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY multiple_arity_boolean_expression ABSTRACT SUPERTYPE OF (ONEOF(and_expression,or_expression)) SUBTYPE OF (boolean_expression,multiple_arity_generic_expression); SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF boolean_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY multiple_arity_function_call ABSTRACT SUPERTYPE OF (ONEOF(maximum_function,minimum_function)) SUBTYPE OF (multiple_arity_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY multiple_arity_generic_expression ABSTRACT SUPERTYPE SUBTYPE OF (generic_expression); operands : LIST[2:?] OF generic_expression; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY multiple_arity_numeric_expression ABSTRACT SUPERTYPE OF (ONEOF(plus_expression,mult_expression, multiple_arity_function_call)) SUBTYPE OF (numeric_expression,multiple_arity_generic_expression); SELF\multiple_arity_generic_expression.operands : LIST[2:?] OF numeric_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY name_assignment ABSTRACT SUPERTYPE; assigned_name : label; DERIVE role : object_role := get_role(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.''+ ''ITEM_WITH_ROLE'' ) ) <=1; END_ENTITY; -- 10303-41: management_resources_schema ENTITY name_attribute; attribute_value : label; named_item : name_attribute_select; END_ENTITY; -- 10303-41: basic_attribute_schema ENTITY named_unit SUPERTYPE OF (ONEOF(si_unit,conversion_based_unit,context_dependent_unit) ANDOR ONEOF(length_unit,mass_unit,time_unit, electric_current_unit,thermodynamic_temperature_unit, amount_of_substance_unit,luminous_intensity_unit, plane_angle_unit,solid_angle_unit,area_unit,volume_unit, ratio_unit)); dimensions : dimensional_exponents; END_ENTITY; -- 10303-41: measure_schema ENTITY named_unit_variable SUBTYPE OF (named_unit,variable_semantics); INVERSE associated_variable_environment : environment FOR semantics; END_ENTITY; -- 10303-214: automotive_design ENTITY next_assembly_usage_occurrence SUBTYPE OF (assembly_component_usage); END_ENTITY; -- 10303-44: product_structure_schema ENTITY ngon_closed_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {3<=SIZEOF ( pdr. used_representation.items ) <=4} ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''number of sides'' , ''circumscibed diameter'' , ''diameter across flats'' , ''corner radius'' ] ) ) ) = 0 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''number of sides'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name IN [ ''circumscribed diameter'' , ''diameter across flats'' ] ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''corner radius'' ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''corner radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''corner radius'' ) ) ) ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY non_manifold_surface_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( it <* SELF.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT_3D'']* TYPEOF ( it ) ) = 1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( it <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' , ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'']* TYPEOF ( it ) ) = 1 ) ) >0; wr3: SIZEOF ( QUERY ( mi <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''MAPPED_ITEM'' IN TYPEOF ( it ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.'' + ''NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'' IN TYPEOF ( mi\ mapped_item.mapping_source.mapped_representation ) ) AND ( SIZEOF ( QUERY ( mr_it <* mi\ mapped_item. mapping_source.mapped_representation.items | ( ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( mr_it ) ) ) ) >0 ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''FACE_SURFACE'' , ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_FACE'']* TYPEOF ( fa ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( f_sf <* QUERY ( fa <* cfs.cfs_faces | ( ''AUTOMOTIVE_DESIGN.''+ ''FACE_SURFACE'' IN TYPEOF ( fa ) ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( f_sf ) ) OR ( nmsf_surface_check ( f_sf\ face_surface.face_geometry ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( o_fa <* QUERY ( fa <* cfs.cfs_faces | ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_FACE'' IN TYPEOF ( fa ) ) ) | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( o_fa\ oriented_face.face_element ) ) OR ( nmsf_surface_check ( o_fa\ oriented_face.face_element\ face_surface.face_geometry ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( bnds <* fa.bounds | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' , ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'']* TYPEOF ( bnds.bound ) ) = 1 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr8: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( oe.edge_element ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr9: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe_cv <* QUERY ( oe <* elp_fbnds\ path.edge_list | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_CURVE'' IN TYPEOF ( oe.edge_element ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''B_SPLINE_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''CONIC'' , ''AUTOMOTIVE_DESIGN.''+ ''CURVE_REPLICA'' , ''AUTOMOTIVE_DESIGN.''+ ''LINE'' , ''AUTOMOTIVE_DESIGN.''+ ''OFFSET_CURVE_3D'' , ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POLYLINE'' , ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_CURVE'']* TYPEOF ( oe_cv.edge_element\ edge_curve.edge_geometry ) ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr10: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( nmsf_curve_check ( oe. edge_element\ edge_curve.edge_geometry ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr11: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe.edge_element.edge_start ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( oe.edge_element.edge_end ) ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr12: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( elp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''EDGE_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( QUERY ( oe <* elp_fbnds\ path.edge_list | NOT ( ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( oe. edge_element.edge_start\ vertex_point.vertex_geometry ) ) = 1 ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( oe.edge_element.edge_end\ vertex_point.vertex_geometry ) ) = 1 ) ) ) ) = 0 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr13: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( vlp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_POINT'' IN TYPEOF ( vlp_fbnds\ vertex_loop. loop_vertex ) ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr14: SIZEOF ( QUERY ( fbsm <* QUERY ( it <* SELF.items | ''AUTOMOTIVE_DESIGN.''+ ''FACE_BASED_SURFACE_MODEL'' IN TYPEOF ( it ) ) | NOT ( SIZEOF ( QUERY ( cfs <* fbsm\ face_based_surface_model.fbsm_faces | NOT ( SIZEOF ( QUERY ( fa <* cfs.cfs_faces | NOT ( ( ''AUTOMOTIVE_DESIGN.''+ ''ADVANCED_FACE'' IN TYPEOF ( fa ) ) OR ( SIZEOF ( QUERY ( vlp_fbnds <* QUERY ( bnds <* fa. bounds | ''AUTOMOTIVE_DESIGN.''+ ''VERTEX_LOOP'' IN TYPEOF ( bnds.bound ) ) | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CARTESIAN_POINT'' , ''AUTOMOTIVE_DESIGN.''+ ''DEGENERATE_PCURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_CURVE'' , ''AUTOMOTIVE_DESIGN.''+ ''POINT_ON_SURFACE'']* TYPEOF ( vlp_fbnds\ vertex_loop. loop_vertex\ vertex_point.vertex_geometry ) ) = 1 ) ) ) = 0 ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; END_ENTITY; -- 10303-508: aic_non_manifold_surface ENTITY not_expression SUBTYPE OF (unary_boolean_expression); SELF\unary_generic_expression.operand : boolean_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY numeric_expression ABSTRACT SUPERTYPE OF (ONEOF(simple_numeric_expression, unary_numeric_expression,binary_numeric_expression, multiple_arity_numeric_expression,length_function, value_function)) SUBTYPE OF (expression); DERIVE is_int : BOOLEAN := is_int_expr(SELF); sql_mappable : BOOLEAN := is_sql_mappable(SELF); END_ENTITY; -- 13584-20: expressions_schema ENTITY numeric_variable SUPERTYPE OF (ONEOF(int_numeric_variable,real_numeric_variable)) SUBTYPE OF (simple_numeric_expression,variable); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''INT_NUMERIC_VARIABLE'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''REAL_NUMERIC_VARIABLE'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY object_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: basic_attribute_schema ENTITY odd_function SUBTYPE OF (unary_boolean_expression); SELF\unary_generic_expression.operand : numeric_expression; WHERE wr1:is_int_expr (SELF\unary_generic_expression.operand) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY offset_curve_2d SUBTYPE OF (curve); basis_curve : curve; distance : length_measure; self_intersect : LOGICAL; WHERE wr1:basis_curve.dim = 2; END_ENTITY; -- 10303-42: geometry_schema ENTITY offset_curve_3d SUBTYPE OF (curve); basis_curve : curve; distance : length_measure; self_intersect : LOGICAL; ref_direction : direction; WHERE wr1: ( basis_curve.dim = 3 ) AND ( ref_direction.dim = 3 ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY offset_surface SUBTYPE OF (surface); basis_surface : surface; distance : length_measure; self_intersect : LOGICAL; END_ENTITY; -- 10303-42: geometry_schema ENTITY one_direction_repeat_factor SUBTYPE OF (geometric_representation_item); repeat_factor : vector; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY open_path_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) = 1; wr6: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) = SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY open_shell SUBTYPE OF (connected_face_set); END_ENTITY; -- 10303-42: topology_schema ENTITY or_expression SUBTYPE OF (multiple_arity_boolean_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY ordinate_dimension SUBTYPE OF (projection_directed_callout); END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY organization; id : OPTIONAL identifier; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organization_assignment ABSTRACT SUPERTYPE; assigned_organization : organization; role : organization_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY organization_relationship; name : label; description : OPTIONAL text; relating_organization : organization; related_organization : organization; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organization_role; name : label; DERIVE description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organizational_address SUBTYPE OF (address); organizations : SET[1:?] OF organization; description : OPTIONAL text; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organizational_project; name : label; description : OPTIONAL text; responsible_organizations : SET[1:?] OF organization; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organizational_project_assignment ABSTRACT SUPERTYPE; assigned_organizational_project : organizational_project; role : organizational_project_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY organizational_project_relationship; name : label; description : OPTIONAL text; relating_organizational_project : organizational_project; related_organizational_project : organizational_project; END_ENTITY; -- 10303-41: person_organization_schema ENTITY organizational_project_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: management_resources_schema ENTITY oriented_closed_shell SUBTYPE OF (closed_shell); closed_shell_element : closed_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET[1:?] OF face := conditional_reverse( SELF.orientation,SELF. closed_shell_element.cfs_faces); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_CLOSED_SHELL'' IN TYPEOF ( SELF.closed_shell_element ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY oriented_edge SUBTYPE OF (edge); edge_element : edge; orientation : BOOLEAN; DERIVE SELF\edge.edge_start : vertex := boolean_choose(SELF.orientation,SELF. edge_element.edge_start,SELF.edge_element.edge_end); SELF\edge.edge_end : vertex := boolean_choose(SELF.orientation,SELF. edge_element.edge_end,SELF.edge_element.edge_start); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_EDGE'' IN TYPEOF ( SELF.edge_element ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY oriented_face SUBTYPE OF (face); face_element : face; orientation : BOOLEAN; DERIVE SELF\face.bounds : SET[1:?] OF face_bound := conditional_reverse(SELF. orientation,SELF.face_element.bounds); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_FACE'' IN TYPEOF ( SELF.face_element ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY oriented_open_shell SUBTYPE OF (open_shell); open_shell_element : open_shell; orientation : BOOLEAN; DERIVE SELF\connected_face_set.cfs_faces : SET[1:?] OF face := conditional_reverse( SELF.orientation,SELF.open_shell_element .cfs_faces); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_OPEN_SHELL'' IN TYPEOF ( SELF.open_shell_element ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY oriented_path SUBTYPE OF (path); path_element : path; orientation : BOOLEAN; DERIVE SELF\path.edge_list : LIST[1:?] OF UNIQUE oriented_edge := conditional_reverse(SELF.orientation, SELF.path_element.edge_list); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''ORIENTED_PATH'' IN TYPEOF ( SELF.path_element ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY oriented_surface SUBTYPE OF (surface); orientation : BOOLEAN; END_ENTITY; -- 10303-42: geometry_schema ENTITY outer_boundary_curve SUBTYPE OF (boundary_curve); END_ENTITY; -- 10303-42: geometry_schema ENTITY over_riding_styled_item SUBTYPE OF (styled_item); over_ridden_style : styled_item; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY package_product_concept_feature SUBTYPE OF (product_concept_feature); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CONDITIONAL_CONCEPT_FEATURE'' IN TYPEOF ( SELF ) ) ; wr2: SIZEOF ( QUERY ( cfr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.CONCEPT_FEATURE_RELATIONSHIP.'' + ''RELATING_PRODUCT_CONCEPT_FEATURE'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION'' IN TYPEOF ( cfr ) ) AND ( SIZEOF ( QUERY ( ipcf <* USEDIN ( cfr , ''AUTOMOTIVE_DESIGN.CONDITIONAL_CONCEPT_FEATURE.'' + ''CONDITION'' ) | ''AUTOMOTIVE_DESIGN.'' + ''INCLUSION_PRODUCT_CONCEPT_FEATURE'' IN TYPEOF ( ipcf ) ) ) = 1 ) ) ) >0; END_ENTITY; -- 10303-214: automotive_design ENTITY pair_actuator; actuated_pair : kinematic_pair; name : label; UNIQUE ur1 : actuated_pair; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY pair_value; applies_to_pair : kinematic_pair; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY parabola SUBTYPE OF (conic); focal_dist : length_measure; WHERE wr1:focal_dist<>0.0; END_ENTITY; -- 10303-42: geometry_schema ENTITY parallel_offset SUBTYPE OF (derived_shape_aspect); offset : measure_with_unit; WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) = 1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY parallelism_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <3; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY parametric_representation_context SUBTYPE OF (representation_context); END_ENTITY; -- 10303-43: representation_schema ENTITY partial_circular_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 3 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''sweep angle'' , ''radius''] ) ) ) = 0 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''sweep angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr8: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) = SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY path SUPERTYPE OF (ONEOF(edge_loop,oriented_path)) SUBTYPE OF (topological_representation_item); edge_list : LIST[1:?] OF UNIQUE oriented_edge; WHERE wr1:path_head_to_tail ( SELF ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY path_feature_component SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [ ''partial circular'' , ''complete circular'' , ''linear'' , ''complex'']; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr5: ( SELF.description<> ''partial circular'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 3 ) ) ) = 1 ) ; wr6: ( SELF.description<> ''partial circular'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr7: ( SELF.description<> ''partial circular'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''sweep angle'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr8: ( SELF.description<> ''complete circular'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr9: ( SELF.description<> ''complete circular'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr10: ( SELF.description<>''linear'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr11: ( SELF.description<>''linear'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''distance'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr12: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) AND ( pdr.name = ''sweep path'' ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.name = ''sweep path'' ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''path curve'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CURVE'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1 ) ; wr13: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY path_shape_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( SELF.items ) = 1; wr2: SIZEOF ( QUERY ( i <* SELF.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''BOUNDED_CURVE'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE_CURVE'' , ''AUTOMOTIVE_DESIGN.'' + ''PATH'']* TYPEOF ( i ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY pattern_offset_membership SUBTYPE OF (feature_component_relationship); WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'']* TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) = 1; wr2: SIZEOF ( QUERY ( sar <* USEDIN ( SELF.related_shape_aspect , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MODIFIED_PATTERN'' IN TYPEOF ( sar.relating_shape_aspect.of_shape.definition ) ) AND ( sar.description = ''modified pattern'' ) ) ) >=1; wr3: SIZEOF ( get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) ) = 1; wr4: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( pdr.used_representation.items ) = 2 ) ) ) = 1 ) ; wr5: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''index number'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; wr6: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''offset'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr7: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( pdr.used_representation.items ) = 3 ) ) ) = 1 ) ; wr8: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''row index'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; wr9: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''column index'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; wr10: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''offset distance'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr11: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''offset direction'' ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY pattern_omit_membership SUBTYPE OF (feature_component_relationship); WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'']* TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) = 1; wr2: SIZEOF ( QUERY ( sar <* USEDIN ( SELF.related_shape_aspect , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MODIFIED_PATTERN'' IN TYPEOF ( sar.relating_shape_aspect.of_shape.definition ) ) AND ( sar.description = ''modified pattern'' ) ) ) >=1; wr3: SIZEOF ( get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) ) = 1; wr4: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( pdr.used_representation.items ) = 1 ) ) ) = 1 ) ; wr5: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''index number'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; wr6: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( pdr.used_representation.items ) = 2 ) ) ) = 1 ) ; wr7: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''row index'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; wr8: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN'' IN TYPEOF ( SELF.relating_shape_aspect.of_shape.definition ) ) OR ( SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF.related_shape_aspect.of_shape.definition ) | ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''column index'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY pcurve SUBTYPE OF (curve); basis_surface : surface; reference_to_curve : definitional_representation; WHERE wr1: SIZEOF ( reference_to_curve\ representation.items ) = 1; wr2:''AUTOMOTIVE_DESIGN.''+ ''CURVE'' IN TYPEOF ( reference_to_curve\ representation.items[1] ) ; wr3:reference_to_curve\ representation. items[1]\geometric_representation_item.dim = 2; END_ENTITY; -- 10303-42: geometry_schema ENTITY perpendicular_to SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) = 1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY perpendicularity_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <=3; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY person; id : identifier; last_name : OPTIONAL label; first_name : OPTIONAL label; middle_names : OPTIONAL LIST[1:?] OF label; prefix_titles : OPTIONAL LIST[1:?] OF label; suffix_titles : OPTIONAL LIST[1:?] OF label; WHERE wr1: EXISTS ( last_name ) OR EXISTS ( first_name ) ; END_ENTITY; -- 10303-41: person_organization_schema ENTITY person_and_organization; the_person : person; the_organization : organization; DERIVE name : label := get_name_value(SELF); description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: person_organization_schema ENTITY person_and_organization_address SUBTYPE OF (organizational_address,personal_address); WHERE wr1: SIZEOF ( SELF\personal_address.people ) = 1; wr2: SIZEOF ( SELF\organizational_address.organizations ) = 1; wr3: SIZEOF ( QUERY ( pao <* USEDIN ( SELF.people[1] , ''AUTOMOTIVE_DESIGN.PERSON_AND_ORGANIZATION.THE_PERSON'' ) | pao.the_organization:=:SELF\organizational_address. organizations[1] ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY person_and_organization_assignment ABSTRACT SUPERTYPE; assigned_person_and_organization : person_and_organization; role : person_and_organization_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY person_and_organization_role; name : label; DERIVE description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: person_organization_schema ENTITY personal_address SUBTYPE OF (address); people : SET[1:?] OF person; description : OPTIONAL text; END_ENTITY; -- 10303-41: person_organization_schema ENTITY physically_modelled_product_definition SUBTYPE OF (product_definition_with_associated_documents); WHERE wr1:SELF.frame_of_reference\ application_context_element.name = ''physical model occurrence'' ; wr2: ( SIZEOF ( documentation_ids ) = 1 ) AND ( SIZEOF ( QUERY ( d <* documentation_ids | ( SIZEOF ( QUERY ( drt <* d.representation_types | ( drt.name = ''physical'' ) ) ) = 1 ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY placed_datum_target_feature SUBTYPE OF (datum_target); WHERE wr1:SELF.description IN [''point'' , ''line'' , ''rectangle'' , ''circle'']; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr4: ( SELF.description<>''point'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1 ) ; wr5: ( SELF.description<>''circle'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr6: ( SELF.description<>''rectangle'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 3 ) ) ) = 1 ) ; wr7: ( SELF.description<>''circle'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''target diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr8: ( SELF.description<>''line'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''target length'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr9: ( SELF.description<>''rectangle'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''target length'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr10: ( SELF.description<>''rectangle'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''target width'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY placed_feature SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''feature definition placement'' ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation. items | ( ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( i ) ) AND ( SIZEOF ( QUERY ( pdr1 <* USEDIN ( i\ mapped_item.mapping_source.mapped_representation , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'') | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_DEFINITION'' IN TYPEOF ( pdr1.definition\ property_definition.definition ) ) ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''maximum feature limit'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY placement SUPERTYPE OF (ONEOF(axis1_placement, axis2_placement_2d, axis2_placement_3d)) SUBTYPE OF (geometric_representation_item); location : cartesian_point; END_ENTITY; -- 10303-42: geometry_schema ENTITY planar_box SUBTYPE OF (planar_extent); placement : axis2_placement; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY planar_curve_pair SUBTYPE OF (kinematic_pair); curve_1 : curve; curve_2 : curve; orientation : BOOLEAN; WHERE wr1:frame_associated_to_background ( SELF\kinematic_pair. pair_placement_in_first_link_context , curve_1 ) ; wr2:frame_associated_to_background ( SELF\kinematic_pair. pair_placement_in_second_link_context , curve_2 ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY planar_curve_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : planar_curve_pair; range_on_curve_1 : trimmed_curve; range_on_curve_2 : trimmed_curve; WHERE wr1:SELF\simple_pair_range.applies_to_pair\ planar_curve_pair. curve_1:=:range_on_curve_1.basis_curve; wr2:SELF\simple_pair_range.applies_to_pair\ planar_curve_pair. curve_2:=:range_on_curve_2.basis_curve; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY planar_extent SUBTYPE OF (geometric_representation_item); size_in_x : length_measure; size_in_y : length_measure; END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY planar_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY planar_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : planar_pair; lower_limit_actual_rotation : rotational_range_measure; upper_limit_actual_rotation : rotational_range_measure; lower_limit_actual_translation_x : translational_range_measure; upper_limit_actual_translation_x : translational_range_measure; lower_limit_actual_translation_y : translational_range_measure; upper_limit_actual_translation_y : translational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_rotation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_rotation ) ) ) XOR ( lower_limit_actual_rotation ''maximum feature limit'' ) OR ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' +''USED_REPRESENTATION'') | SIZEOF ( QUERY ( sa <* get_shape_aspects ( pdr. definition\ property_definition.definition ) | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''INSTANCED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''PLACED_FEATURE'']* TYPEOF ( sa ) ) = 1 ) ) = 1 ) ) = 1 ) ; wr5: ( SELF.name<> ''profile limit'' ) OR ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' +''USED_REPRESENTATION'') | SIZEOF ( QUERY ( sa <* get_shape_aspects ( pdr. definition\ property_definition.definition ) | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'']* TYPEOF ( sa ) ) = 1 ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY plane SUBTYPE OF (elementary_surface); END_ENTITY; -- 10303-42: geometry_schema ENTITY plane_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''PLANE_ANGLE_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY plane_angle_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY plus_expression SUBTYPE OF (multiple_arity_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY plus_minus_tolerance; range : tolerance_method_definition; toleranced_dimension : dimensional_characteristic; UNIQUE ur1 : toleranced_dimension; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY pocket SUBTYPE OF (feature_definition); WHERE wr1:SELF.description IN [ ''open rectangular'' , ''closed rectangular'' , ''complex'']; wr2: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'']* TYPEOF ( sar. relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1 ) ; wr3: ( SELF.description<> ''closed rectangular'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa. description = ''closed boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1 ) ; wr4: ( SELF.description<> ''open rectangular'' ) OR ( SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa. description = ''open boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1 ) ; wr5: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''pocket depth occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''pocket depth'' ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description = ''linear'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''bottom condition occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''pocket bottom usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POCKET_BOTTOM'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''change in boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description IN [ ''angle taper'' , ''directed taper'' ] ) ) ) = 1 ) ) ) <=1; wr8: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {1<=SIZEOF ( pdr. used_representation.items ) <=2} ) ) ) = 0; wr9: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''fillet radius 1'' ] ) ) ) >0 ) ) ) = 0; wr10: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''base radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY pocket_bottom SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [''planar'' , ''complex'' , ''through'']; wr3: NOT ( SELF.description IN [''planar'' , ''complex''] ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1 ) ; wr4: NOT ( SELF.description IN [''planar'' , ''complex''] ) OR ( SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name IN [ ''pocket depth'' , ''pocket depth end'' ] ) ) ) = 1 ) ; wr5: ( SELF.description<>''complex'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''floor'' ) ) ) = 1 ) ; wr6: ( SELF.description<>''planar'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''LOCATION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''LOCATION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) AND ( pdr.used_representation. name = ''floor location'' ) ) ) = 1 ) ; wr7: ( SELF.description<>''planar'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) AND ( pdr.used_representation. name = ''floor normal'' ) ) ) = 1 ) ; wr8: ( SELF.description<>''through'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 0 ) ; wr9: ( SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''pocket bottom usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''POCKET'' IN TYPEOF ( sar. related_shape_aspect.of_shape.definition ) ) AND ( sar. related_shape_aspect.of_shape.definition\ characterized_object.description = ''bottom condition occurrence'' ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY point SUPERTYPE OF (ONEOF(cartesian_point,point_on_curve,point_on_surface, point_replica,degenerate_pcurve)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- 10303-42: geometry_schema ENTITY point_on_curve SUBTYPE OF (point); basis_curve : curve; point_parameter : parameter_value; END_ENTITY; -- 10303-42: geometry_schema ENTITY point_on_planar_curve_pair SUBTYPE OF (kinematic_pair); pair_curve : curve; orientation : BOOLEAN; WHERE wr1:frame_associated_to_background ( SELF\kinematic_pair. pair_placement_in_first_link_context , pair_curve ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY point_on_planar_curve_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : point_on_planar_curve_pair; range_on_pair_curve : trimmed_curve; lower_limit_yaw : rotational_range_measure; upper_limit_yaw : rotational_range_measure; lower_limit_pitch : rotational_range_measure; upper_limit_pitch : rotational_range_measure; lower_limit_roll : rotational_range_measure; upper_limit_roll : rotational_range_measure; WHERE wr1:SELF\simple_pair_range.applies_to_pair\ point_on_planar_curve_pair. pair_curve:=:range_on_pair_curve.basis_curve; wr2: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_yaw ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_yaw ) ) ) XOR ( lower_limit_yaw1 ) ) = 0; wr2: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'']* TYPEOF ( i ) ) = 1 ) ) >0; END_ENTITY; -- 10303-214: automotive_design ENTITY point_replica SUBTYPE OF (point); parent_pt : point; transformation : cartesian_transformation_operator; WHERE wr1:transformation.dim = parent_pt.dim; wr2:acyclic_point_replica ( SELF , parent_pt ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY point_style; name : label; marker : marker_select; marker_size : size_select; marker_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY poly_loop SUBTYPE OF (loop,geometric_representation_item); polygon : LIST[3:?] OF UNIQUE cartesian_point; END_ENTITY; -- 10303-42: topology_schema ENTITY polyline SUBTYPE OF (bounded_curve); points : LIST[2:?] OF cartesian_point; END_ENTITY; -- 10303-42: geometry_schema ENTITY position_tolerance SUBTYPE OF (geometric_tolerance); WHERE wr1: ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE'' IN TYPEOF ( SELF ) ) ) OR ( SIZEOF ( SELF\geometric_tolerance_with_datum_reference.datum_system ) <=3 ) ; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY power_expression SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY pre_defined_colour SUBTYPE OF (pre_defined_item,colour); END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY pre_defined_curve_font SUBTYPE OF (pre_defined_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY pre_defined_dimension_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1:SELF.name IN [ ''arc length'' , ''conical taper'' , ''counterbore'' , ''countersink'' , ''depth'' , ''diameter'' , ''plus minus'' , ''radius'' , ''slope'' , ''spherical diameter'' , ''spherical radius'' , ''square'']; END_ENTITY; -- 10303-214: automotive_design ENTITY pre_defined_geometrical_tolerance_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1:SELF.name IN [''angularity'' , ''basic dimension'' , ''blanked datum reference'' , ''circular runout'' , ''circularity'' , ''concentricity'' , ''cylindricity'' , ''datum target identification'' , ''diameter'' , ''filled datum reference'' , ''flatness'' , ''least material condition'' , ''maximum material condition'' , ''parallelism'' , ''perpendicularity'' , ''position'' , ''profile of a line'' , ''profile of a surface'' , ''projected tolerance zone'' , ''regardless of feature size'' , ''straightness'' , ''symmetry'' , ''total runout'' ]; END_ENTITY; -- 10303-214: automotive_design ENTITY pre_defined_item; name : label; END_ENTITY; -- 10303-41: external_reference_schema ENTITY pre_defined_marker SUBTYPE OF (pre_defined_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY pre_defined_point_marker_symbol SUBTYPE OF (pre_defined_marker,pre_defined_symbol); WHERE wr1:SELF.name IN [''asterisk'' , ''circle'' , ''dot'' , ''plus'' , ''square'' , ''triangle'' , ''x'']; END_ENTITY; -- 10303-214: automotive_design ENTITY pre_defined_presentation_style SUBTYPE OF (pre_defined_item); END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY pre_defined_surface_condition_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1:SELF.name IN [''000'' , ''010'' , ''020'' , ''030'' , ''040'' , ''050'' , ''060'' , ''070'' , ''001'' , ''011'' , ''021'' , ''031'' , ''041'' , ''051'' , ''061'' , ''071'' , ''100'' , ''110'' , ''120'' , ''130'' , ''140'' , ''150'' , ''160'' , ''170'' , ''101'' , ''111'' , ''121'' , ''131'' , ''141'' , ''151'' , ''161'' , ''171'' , ''200'' , ''210'' , ''220'' , ''230'' , ''240'' , ''250'' , ''260'' , ''270'' , ''201'' , ''211'' , ''221'' , ''231'' , ''241'' , ''251'' , ''261'' , ''271'']; END_ENTITY; -- 10303-214: automotive_design ENTITY pre_defined_symbol SUBTYPE OF (pre_defined_item); END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY pre_defined_terminator_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1:SELF.name IN [ ''blanked arrow'' , ''blanked box'' , ''blanked dot'' , ''dimension origin'' , ''filled arrow'' , ''filled box'' , ''filled dot'' , ''integral symbol'' , ''open arrow'' , ''slash'' , ''unfilled arrow'' ]; END_ENTITY; -- 10303-214: automotive_design ENTITY pre_defined_text_font SUBTYPE OF (pre_defined_item); END_ENTITY; -- 10303-46: presentation_resource_schema ENTITY precision_qualifier; precision_value : INTEGER; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY presentation_area SUBTYPE OF (presentation_representation); WHERE wr1: ( ( SIZEOF ( QUERY ( ais <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''AREA_IN_SET.''+ ''AREA'' ) | SIZEOF ( USEDIN ( ais , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) ) = 1 ) ) >0 ) OR ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.''+ ''UNIT'' ) ) = 1 ) ) ; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presentation_layer_assignment; name : label; description : text; assigned_items : SET[1:?] OF layered_item; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presentation_representation SUBTYPE OF (representation); WHERE wr1:SELF\representation.context_of_items\ geometric_representation_context. coordinate_space_dimension = 2; wr2:''AUTOMOTIVE_DESIGN.''+ ''GEOMETRIC_REPRESENTATION_CONTEXT'' IN TYPEOF ( SELF\representation.context_of_items ) ; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presentation_set; INVERSE areas : SET[1:?] OF area_in_set FOR in_set; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presentation_size; unit : presentation_size_assignment_select; size : planar_box; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''PRESENTATION_REPRESENTATION'' IN TYPEOF ( SELF.unit ) ) AND item_in_context ( SELF.size , SELF.unit\ representation.context_of_items ) ) OR ( ( ''AUTOMOTIVE_DESIGN.''+ ''AREA_IN_SET'' IN TYPEOF ( SELF.unit ) ) AND ( SIZEOF ( QUERY ( ais <* SELF.unit\ area_in_set.in_set.areas | NOT item_in_context ( SELF.size , ais.area\ representation.context_of_items ) ) ) = 0 ) ) ; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presentation_style_assignment; styles : SET[1:?] OF presentation_style_select; WHERE wr1: SIZEOF ( QUERY ( style1 <* SELF.styles | NOT ( SIZEOF ( QUERY ( style2 <* ( SELF.styles-style1 ) | NOT ( ( TYPEOF ( style1 ) <> TYPEOF ( style2 ) ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SURFACE_STYLE_USAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_STYLE'']* TYPEOF ( style1 ) ) = 1 ) ) ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( style1 <* SELF.styles | ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_STYLE_USAGE'' IN TYPEOF ( style1 ) ) ) <=2; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY presentation_style_by_context SUBTYPE OF (presentation_style_assignment); style_context : style_context_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY presentation_view SUBTYPE OF (presentation_representation); END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presented_item ABSTRACT SUPERTYPE; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY presented_item_representation; presentation : presentation_representation_select; item : presented_item; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY prismatic_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY prismatic_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : prismatic_pair; lower_limit_actual_translation : translational_range_measure; upper_limit_actual_translation : translational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_translation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_translation ) ) ) XOR ( lower_limit_actual_translation1 ) ) = 0; wr2: SIZEOF ( QUERY ( ar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PROCESS_PLAN'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_PROCESS_PLAN'']* TYPEOF ( ar.related_action ) ) = 1 ) OR ( ( ar.name = ''process operation occurrence'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PROCESS_OPERATION'' IN TYPEOF ( ar.related_action.chosen_method ) ) ) ) ) = SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY process_product_association; name : label; description : text; defined_product : characterized_product_definition; process : product_definition_process; END_ENTITY; -- 10303-49: process_property_schema ENTITY process_property_association; name : label; description : text; process : property_process; property_or_shape : property_or_shape_select; END_ENTITY; -- 10303-49: process_property_schema ENTITY product; id : identifier; name : label; description : OPTIONAL text; frame_of_reference : SET[1:?] OF product_context; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_category; name : label; description : OPTIONAL text; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_category_relationship; name : label; description : OPTIONAL text; category : product_category; sub_category : product_category; WHERE wr1:acyclic_product_category_relationship ( SELF , [SELF.sub_category] ) ; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_class SUBTYPE OF (product_concept,characterized_object); END_ENTITY; -- 10303-214: automotive_design ENTITY product_concept; id : identifier; name : label; description : OPTIONAL text; market_context : product_concept_context; UNIQUE ur1 : id; END_ENTITY; -- 10303-44: product_concept_schema ENTITY product_concept_context SUBTYPE OF (application_context_element); market_segment_type : label; END_ENTITY; -- 10303-41: application_context_schema ENTITY product_concept_feature; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-44: product_concept_schema ENTITY product_concept_feature_association; name : label; description : OPTIONAL text; concept : product_concept; feature : product_concept_feature; END_ENTITY; -- 10303-44: product_concept_schema ENTITY product_concept_feature_category SUBTYPE OF (group); WHERE wr1: SIZEOF ( QUERY ( aga <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.GROUP_ASSIGNMENT.'' + ''ASSIGNED_GROUP'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_GROUP_ASSIGNMENT'' IN TYPEOF ( aga ) ) AND ( ( aga.role.name<> ''specification category member'' ) OR ( SIZEOF ( QUERY ( i <* aga.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE'' IN TYPEOF ( i ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CONDITIONAL_CONCEPT_FEATURE'' IN TYPEOF ( i ) ) ) ) <> SIZEOF ( aga.items ) ) ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY product_concept_feature_category_usage SUBTYPE OF (group_assignment); items : SET[1:?] OF category_usage_item; WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' IN TYPEOF ( SELF.assigned_group ) ; wr2:SELF.role.name IN [ ''mandatory category usage'' , ''optional category usage'' ]; END_ENTITY; -- 10303-214: automotive_design ENTITY product_concept_relationship; name : label; description : OPTIONAL text; relating_product_concept : product_concept; related_product_concept : product_concept; END_ENTITY; -- 10303-44: product_concept_schema ENTITY product_context SUBTYPE OF (application_context_element); discipline_type : label; END_ENTITY; -- 10303-41: application_context_schema ENTITY product_definition; id : identifier; description : OPTIONAL text; formation : product_definition_formation; frame_of_reference : product_definition_context; DERIVE name : label := get_name_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_context SUBTYPE OF (application_context_element); life_cycle_stage : label; END_ENTITY; -- 10303-41: application_context_schema ENTITY product_definition_context_association; definition : product_definition; frame_of_reference : product_definition_context; role : product_definition_context_role; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_context_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_effectivity SUBTYPE OF (effectivity); usage : product_definition_relationship; WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''EFFECTIVITY_ASSIGNMENT.''+ ''ASSIGNED_EFFECTIVITY'' ) ) = 0; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_formation; id : identifier; description : OPTIONAL text; of_product : product; UNIQUE ur1 : id,of_product; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_formation_relationship; id : identifier; name : label; description : OPTIONAL text; relating_product_definition_formation : product_definition_formation; related_product_definition_formation : product_definition_formation; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_formation_with_specified_source SUBTYPE OF (product_definition_formation); make_or_buy : source; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_occurrence_relationship; name : label; description : OPTIONAL text; occurrence : product_definition; occurrence_usage : assembly_component_usage; WHERE wr1:occurrence_usage. relating_product_definition:<>:occurrence; wr2:occurrence_usage.related_product_definition:<>:occurrence; wr3:occurrence.formation:=:occurrence_usage. related_product_definition.formation; END_ENTITY; -- 10303-44: product_structure_schema ENTITY product_definition_process SUBTYPE OF (action); identification : identifier; INVERSE product_definitions : SET[1:?] OF process_product_association FOR process; END_ENTITY; -- 10303-49: process_property_schema ENTITY product_definition_relationship; id : identifier; name : label; description : OPTIONAL text; relating_product_definition : product_definition; related_product_definition : product_definition; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_resource SUBTYPE OF (action_resource,product_definition); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REQUIREMENT_FOR_ACTION_RESOURCE.'' + ''RESOURCES'' ) ) >0; wr2:SELF.frame_of_reference.name IN [''part_definition'' , ''part occurrence'' , ''physical occurrence'' ]; END_ENTITY; -- 10303-214: automotive_design ENTITY product_definition_shape SUBTYPE OF (property_definition); UNIQUE ur1 : SELF\property_definition.definition; WHERE wr1: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''CHARACTERIZED_PRODUCT_DEFINITION'' , ''AUTOMOTIVE_DESIGN.''+ ''CHARACTERIZED_OBJECT'']* TYPEOF ( SELF\property_definition.definition ) ) >0; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY product_definition_substitute; description : OPTIONAL text; context_relationship : product_definition_relationship; substitute_definition : product_definition; DERIVE name : label := get_name_value(SELF); WHERE wr1:context_relationship. related_product_definition:<>:substitute_definition; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_definition_usage SUPERTYPE OF (ONEOF(make_from_usage_option,assembly_component_usage)) SUBTYPE OF (product_definition_relationship); UNIQUE ur1 : SELF\product_definition_relationship.id,SELF\ product_definition_relationship.relating_product_definition,SELF\ product_definition_relationship.related_product_definition; WHERE wr1:acyclic_product_definition_relationship ( SELF , [SELF\product_definition_relationship. related_product_definition] , ''AUTOMOTIVE_DESIGN.''+ ''PRODUCT_DEFINITION_USAGE'' ) ; END_ENTITY; -- 10303-44: product_structure_schema ENTITY product_definition_with_associated_documents SUBTYPE OF (product_definition); documentation_ids : SET[1:?] OF document; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_identification SUBTYPE OF (configuration_item,characterized_object); WHERE wr1: SIZEOF ( QUERY ( cd <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.CONFIGURATION_DESIGN.CONFIGURATION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_FORMATION'' IN TYPEOF ( cd.design ) ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( cd.design\ product_definition_formation. of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name IN [''part'' , ''raw material'' , ''tool''] ) ) >0 ) ) ) <=1; wr2:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CLASS'' IN TYPEOF ( SELF.item_concept ) ; wr3: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURABLE_ITEM'' IN TYPEOF ( SELF ) ) OR ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_SPECIFICATION'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY product_process_plan SUBTYPE OF (product_definition_process); WHERE wr1: SIZEOF ( QUERY ( ar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATED_ACTION'' ) | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PROCESS_PLAN'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_PROCESS_PLAN'']* TYPEOF ( ar.relating_action ) ) <>1 ) ) = 0; wr2: SIZEOF ( QUERY ( ar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PROCESS_PLAN'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_PROCESS_PLAN'']* TYPEOF ( ar.related_action ) ) = 1 ) OR ( ( ar.name = ''process operation occurrence'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PROCESS_OPERATION'' IN TYPEOF ( ar.related_action.chosen_method ) ) ) ) ) = SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) ) ; wr3: SIZEOF ( QUERY ( ppa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROCESS_PRODUCT_ASSOCIATION.'' + ''PROCESS'' ) | ( ppa.name<> ''produced output'' ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( ppa.defined_product ) ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY product_related_product_category SUBTYPE OF (product_category); products : SET[1:?] OF product; END_ENTITY; -- 10303-41: product_definition_schema ENTITY product_specification SUBTYPE OF (product_identification,configurable_item); END_ENTITY; -- 10303-214: automotive_design ENTITY projected_zone_definition SUBTYPE OF (tolerance_zone_definition); projection_end : shape_aspect; projected_length : measure_with_unit; WHERE wr1: ( ''NUMBER'' IN TYPEOF ( projected_length\ measure_with_unit.value_component ) ) AND ( projected_length\ measure_with_unit.value_component>0.0 ) ; wr2: ( derive_dimensional_exponents ( projected_length\ measure_with_unit.unit_component ) = dimensional_exponents ( 1 , 0 , 0 , 0 , 0 , 0 , 0 ) ) ; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY projection_curve SUBTYPE OF (annotation_curve_occurrence); END_ENTITY; -- 10303-101: draughting_element_schema ENTITY projection_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( p_1 <* SELF\draughting_callout. contents | ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_CURVE'' IN ( TYPEOF ( p_1 ) ) ) ) = 1; wr2: SIZEOF ( SELF\draughting_callout.contents ) >=2; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY promissory_usage_occurrence SUBTYPE OF (assembly_component_usage); END_ENTITY; -- 10303-44: product_structure_schema ENTITY property_definition; name : label; description : OPTIONAL text; definition : characterized_definition; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY property_definition_relationship; name : label; description : text; relating_property_definition : property_definition; related_property_definition : property_definition; END_ENTITY; -- 10303-45: material_property_definition_schema ENTITY property_definition_representation; definition : represented_definition; used_representation : representation; DERIVE description : text := get_description_value(SELF); name : label := get_name_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.''+ ''NAMED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_property_representation_schema ENTITY property_process SUBTYPE OF (action); identification : identifier; INVERSE properties : SET[1:?] OF process_property_association FOR process; END_ENTITY; -- 10303-49: process_property_schema ENTITY qualified_representation_item SUBTYPE OF (representation_item); qualifiers : SET[1:?] OF value_qualifier; WHERE wr1: SIZEOF ( QUERY ( temp <* qualifiers | ''AUTOMOTIVE_DESIGN.''+ ''PRECISION_QUALIFIER'' IN TYPEOF ( temp ) ) ) <2; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY quantified_assembly_component_usage SUBTYPE OF (assembly_component_usage); quantity : measure_with_unit; WHERE wr1: ( NOT ( ''NUMBER'' IN TYPEOF ( quantity.value_component ) ) ) OR ( quantity.value_component>0 ) ; END_ENTITY; -- 10303-44: product_structure_schema ENTITY quasi_uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- 10303-42: geometry_schema ENTITY quasi_uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- 10303-42: geometry_schema ENTITY rack_and_pinion_pair SUBTYPE OF (kinematic_pair); pinion_radius : length_measure; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY rack_and_pinion_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : rack_and_pinion_pair; lower_limit_rack_displacement : translational_range_measure; upper_limit_rack_displacement : translational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_rack_displacement ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_rack_displacement ) ) ) XOR ( lower_limit_rack_displacement0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''width'' ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''length'' ) ) ) = 1 ) ) ) = 1; wr8: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''corner radius'' ) ) ) = 1 ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY rectangular_composite_surface SUBTYPE OF (bounded_surface); segments : LIST[1:?] OF LIST[1:?] OF surface_patch; DERIVE n_u : INTEGER := SIZEOF(segments); n_v : INTEGER := SIZEOF(segments[1]); WHERE wr1: SIZEOF ( QUERY ( s <* segments | n_v<> SIZEOF ( s ) ) ) = 0; wr2:constraints_rectangular_composite_surface ( SELF ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY rectangular_pattern SUBTYPE OF (replicate_feature); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''row layout direction'' ) ) ) = 1; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''column layout direction'' ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 5 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''number of rows'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''number of columnws'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COUNT_MEASURE'' IN TYPEOF ( i\ measure_with_unit.value_component ) ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''row spacing'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''column spacing'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY rectangular_trimmed_surface SUBTYPE OF (bounded_surface); basis_surface : surface; u1 : parameter_value; u2 : parameter_value; v1 : parameter_value; v2 : parameter_value; usense : BOOLEAN; vsense : BOOLEAN; WHERE wr1:u1<>u2; wr2:v1<>v2; wr3: ( ( ''AUTOMOTIVE_DESIGN.''+ ''ELEMENTARY_SURFACE'' IN TYPEOF ( basis_surface ) ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.''+ ''PLANE'' IN TYPEOF ( basis_surface ) ) ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''SURFACE_OF_REVOLUTION'' IN TYPEOF ( basis_surface ) ) OR ( usense = ( u2>u1 ) ) ; wr4: ( ( ''AUTOMOTIVE_DESIGN.''+ ''SPHERICAL_SURFACE'' IN TYPEOF ( basis_surface ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''TOROIDAL_SURFACE'' IN TYPEOF ( basis_surface ) ) ) OR ( vsense = ( v2>v1 ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY referenced_modified_datum SUBTYPE OF (datum_reference); modifier : limit_condition; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY relative_event_occurrence SUBTYPE OF (event_occurrence); base_event : event_occurrence; offset : time_measure_with_unit; END_ENTITY; -- 10303-41: date_time_schema ENTITY rep_item_group SUBTYPE OF (group,representation_item); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_LAYER_ASSIGNMENT.'' + ''ASSIGNED_ITEMS'' ) ) >0; wr2: SIZEOF ( QUERY ( r <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION.'' + ''ITEMS'' ) | r. name = ''group representation'' ) ) >0; wr3: SIZEOF ( QUERY ( ga <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''GROUP_ASSIGNMENT.'' + ''ASSIGNED_GROUP'' ) | ga.role.name<> ''group membership'' ) ) = 0; wr4: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''TOPOLOGICAL_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM'']* TYPEOF ( SELF ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY reparametrised_composite_curve_segment SUBTYPE OF (composite_curve_segment); param_length : parameter_value; WHERE wr1:param_length>0.0; END_ENTITY; -- 10303-42: geometry_schema ENTITY replicate_feature SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''orientation'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''pattern basis'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_DEFINITION'' IN TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY representation; name : label; items : SET[1:?] OF representation_item; context_of_items : representation_context; DERIVE id : identifier := get_id_value(SELF); description : text := get_description_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; wr2: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.''+ ''DESCRIBED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-43: representation_schema ENTITY representation_context; context_identifier : identifier; context_type : text; INVERSE representations_in_context : SET[1:?] OF representation FOR context_of_items; END_ENTITY; -- 10303-43: representation_schema ENTITY representation_item; name : label; WHERE wr1: SIZEOF ( using_representations ( SELF ) ) >0; END_ENTITY; -- 10303-43: representation_schema ENTITY representation_map; mapping_origin : representation_item; mapped_representation : representation; INVERSE map_usage : SET[1:?] OF mapped_item FOR mapping_source; WHERE wr1:item_in_context ( SELF.mapping_origin , SELF.mapped_representation.context_of_items ) ; END_ENTITY; -- 10303-43: representation_schema ENTITY representation_relationship; name : label; description : OPTIONAL text; rep_1 : representation; rep_2 : representation; END_ENTITY; -- 10303-43: representation_schema ENTITY representation_relationship_with_transformation SUBTYPE OF (representation_relationship); transformation_operator : transformation; WHERE wr1:SELF\representation_relationship. rep_1.context_of_items:<>:SELF\representation_relationship. rep_2.context_of_items; END_ENTITY; -- 10303-43: representation_schema ENTITY requirement_for_action_resource SUBTYPE OF (action_resource_requirement); resources : SET[1:?] OF action_resource; END_ENTITY; -- 10303-49: process_property_schema ENTITY resource_property; name : label; description : text; resource : characterized_resource_definition; END_ENTITY; -- 10303-49: process_property_schema ENTITY resource_property_representation; name : label; description : text; property : resource_property; representation : representation; END_ENTITY; -- 10303-49: process_property_representation_schema ENTITY resource_requirement_type; name : label; description : text; END_ENTITY; -- 10303-49: process_property_schema ENTITY resulting_path SUBTYPE OF (motion_link_relationship); controlling_joints : SET[1:?] OF kinematic_joint; END_ENTITY; -- 10303-105: kinematic_analysis_control_and_result_schema ENTITY retention SUBTYPE OF (action); WHERE wr1: SIZEOF ( QUERY ( aa <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_ASSIGNMENT.'' + ''ASSIGNED_ACTION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( aa ) ) AND ( aa. role.name = ''retention'' ) ) ) >=1; wr2: ( SIZEOF ( QUERY ( atia <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_TIME_INTERVAL_ASSIGNMENT.'' + ''ITEMS'' ) | ( atia.role.name = ''minimum retention period'' ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( atia <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_TIME_INTERVAL_ASSIGNMENT.'' + ''ITEMS'' ) | ( atia. role.name = ''maximum retention period'' ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( atia1 <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_TIME_INTERVAL_ASSIGNMENT.'' + ''ITEMS'' ) | ( atia1.role.name = ''minimum retention period'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TIME_INTERVAL_WITH_BOUNDS'' IN TYPEOF ( atia1.assigned_time_interval ) ) AND ( EXISTS ( atia1.assigned_time_interval\ time_interval_with_bounds. secondary_bound ) OR EXISTS ( atia1.assigned_time_interval\ time_interval_with_bounds. duration ) ) AND ( SIZEOF ( QUERY ( atia2 <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_TIME_INTERVAL_ASSIGNMENT.'' + ''ITEMS'' ) | ( atia2.role.name = ''maximum retention period'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TIME_INTERVAL_WITH_BOUNDS'' IN TYPEOF ( atia2.assigned_time_interval ) ) AND ( EXISTS ( atia2.assigned_time_interval\ time_interval_with_bounds. secondary_bound ) OR EXISTS ( atia2.assigned_time_interval\ time_interval_with_bounds. duration ) ) AND ( atia1.assigned_time_interval\ time_interval_with_bounds. primary_bound:=:atia2.assigned_time_interval\ time_interval_with_bounds.primary_bound ) ) ) = 1 ) ) ) = 1 ) ; wr3: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATING_ACTION'' ) ) + SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATED_ACTION'' ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY revolute_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY revolute_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : revolute_pair; lower_limit_actual_rotation : rotational_range_measure; upper_limit_actual_rotation : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_rotation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_rotation ) ) ) XOR ( lower_limit_actual_rotation0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''fillet radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''shoulder radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr5: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''swept shape occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'']* TYPEOF ( sar.relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''course of travel occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''course of travel'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''change in boundary occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description = ''directed taper'' ) ) ) = 1 ) ) ) <=1; END_ENTITY; -- 10303-214: automotive_design ENTITY right_angular_wedge SUBTYPE OF (geometric_representation_item); position : axis2_placement_3d; x : positive_length_measure; y : positive_length_measure; z : positive_length_measure; ltx : length_measure; WHERE wr1: ( ( 0.0<=ltx ) AND ( ltx=0.0; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY right_circular_cylinder SUBTYPE OF (geometric_representation_item); position : axis1_placement; height : positive_length_measure; radius : positive_length_measure; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY role_association; role : object_role; item_with_role : role_select; END_ENTITY; -- 10303-41: basic_attribute_schema ENTITY rolling_curve_pair SUBTYPE OF (planar_curve_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY rolling_curve_pair_value SUBTYPE OF (pair_value); SELF\pair_value.applies_to_pair : rolling_curve_pair; actual_point_on_curve_1 : point_on_curve; WHERE wr1:SELF\pair_value.applies_to_pair\ planar_curve_pair. curve_1:=:actual_point_on_curve_1.basis_curve; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY rolling_surface_pair SUBTYPE OF (surface_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY rolling_surface_pair_value SUBTYPE OF (pair_value); SELF\pair_value.applies_to_pair : rolling_surface_pair; actual_point_on_surface : point_on_surface; actual_rotation : plane_angle_measure; WHERE wr1:SELF\pair_value.applies_to_pair\ surface_pair. surface_1:=:actual_point_on_surface.basis_surface; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY rotation_about_direction; direction_of_axis : direction; rotation_angle : plane_angle_measure; WHERE wr1: SIZEOF ( direction_of_axis.direction_ratios ) = 3; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY round_hole SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''diameter occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''diameter'' ) AND ( sar.description = ''profile usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''hole depth occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''hole depth'' ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) AND ( sar. relating_shape_aspect.description = ''linear'' ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''bottom condition occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''hole bottom usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''HOLE_BOTTOM'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) <=1; wr4: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''change in diameter occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''taper usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) <>1 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY rounded_u_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''width'' , ''orientation''] ) ) ) >0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''width'' ) ) ) = 1 ) ) ) = 1; wr7: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY roundness_tolerance SUBTYPE OF (geometric_tolerance); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY runout_zone_definition SUBTYPE OF (tolerance_zone_definition); orientation : runout_zone_orientation; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY runout_zone_orientation; angle : measure_with_unit; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY runout_zone_orientation_reference_direction SUBTYPE OF (runout_zone_orientation); orientation_defining_relationship : shape_aspect_relationship; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY screw_pair SUBTYPE OF (kinematic_pair); pitch : length_measure; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY screw_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : screw_pair; lower_limit_actual_rotation : rotational_range_measure; upper_limit_actual_rotation : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_rotation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_rotation ) ) ) XOR ( lower_limit_actual_rotation=1 ) ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pd <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.''+ ''DEFINITION'' ) | NOT ( SIZEOF ( QUERY ( sdr <* QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.''+ ''DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.''+ ''SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF ( pdr ) ) ) | NOT ( check_associative_shape_aspects ( sdr ) ) ) ) = 0 ) ) ) = 0; END_ENTITY; -- 10303-520: aic_associative_draughting_elements ENTITY shape_aspect_deriving_relationship SUBTYPE OF (shape_aspect_relationship); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''DERIVED_SHAPE_ASPECT'' IN TYPEOF ( SELF\shape_aspect_relationship.relating_shape_aspect ) ; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY shape_aspect_relationship; name : label; description : OPTIONAL text; relating_shape_aspect : shape_aspect; related_shape_aspect : shape_aspect; DERIVE id : identifier := get_id_value(SELF); WHERE wr1: SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.''+ ''IDENTIFIED_ITEM'' ) ) <=1; END_ENTITY; -- 10303-41: product_property_definition_schema ENTITY shape_aspect_transition SUBTYPE OF (shape_aspect_relationship); WHERE wr1: SIZEOF ( QUERY ( pdr_1 <* get_shape_aspect_property_definition_representations ( SELF.relating_shape_aspect ) | SIZEOF ( QUERY ( pdr_2 <* get_shape_aspect_property_definition_representations ( SELF.related_shape_aspect ) | SIZEOF ( QUERY ( item_1 <* pdr_1.used_representation.items | SIZEOF ( QUERY ( item_2 <* pdr_2.used_representation.items | NOT ( ( ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE'' IN TYPEOF ( item_1 ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE'' IN TYPEOF ( item_2 ) ) ) XOR ( ( ''AUTOMOTIVE_DESIGN.'' + ''FACE'' IN TYPEOF ( item_1 ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''FACE'' IN TYPEOF ( item_2 ) ) ) ) ) ) >0 ) ) >0 ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( pdr_1 <* get_shape_aspect_property_definition_representations ( SELF.relating_shape_aspect ) | SIZEOF ( QUERY ( pdr_2 <* get_shape_aspect_property_definition_representations ( SELF.related_shape_aspect ) | SIZEOF ( QUERY ( item_1 <* pdr_1.used_representation.items | SIZEOF ( QUERY ( item_2 <* pdr_2.used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE'' IN TYPEOF ( item_1 ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE'' IN TYPEOF ( item_2 ) ) AND NOT ( ( item_1\edge.edge_start:=:item_2\edge. edge_start ) OR ( item_1\edge.edge_start:=:item_2\edge. edge_end ) OR ( item_1\edge.edge_end:=:item_2\edge. edge_start ) OR ( item_1\edge.edge_end:=:item_2\edge. edge_end ) ) ) ) >0 ) ) >0 ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( pdr_1 <* get_shape_aspect_property_definition_representations ( SELF.relating_shape_aspect ) | SIZEOF ( QUERY ( pdr_2 <* get_shape_aspect_property_definition_representations ( SELF.related_shape_aspect ) | SIZEOF ( QUERY ( item_1 <* pdr_1.used_representation.items | SIZEOF ( QUERY ( item_2 <* pdr_2.used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''FACE'' IN TYPEOF ( item_1 ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''FACE'' IN TYPEOF ( item_2 ) ) AND ( SIZEOF ( QUERY ( f_1 <* item_1\face.bounds | ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE_LOOP'' IN TYPEOF ( f_1.bound ) ) AND ( SIZEOF ( QUERY ( f_2 <* item_2\face.bounds | ( ''AUTOMOTIVE_DESIGN.'' + ''EDGE_LOOP'' IN TYPEOF ( f_2.bound ) ) AND ( SIZEOF ( QUERY ( oe_1 <* f_1.bound\ path. edge_list | SIZEOF ( QUERY ( oe_2 <* f_2.bound\ path. edge_list | oe_1.edge_element:=:oe_2.edge_element ) ) = 0 ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0 ) ) = 0 ) ) = 0 ) ) = 0; wr4:SELF.name IN [''g0'' , ''g1'' , ''g2'']; END_ENTITY; -- 10303-214: automotive_design ENTITY shape_defining_relationship SUBTYPE OF (shape_aspect_relationship); WHERE wr1: ( SELF\shape_aspect_relationship.description<> ''profile usage'' ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'']* TYPEOF ( SELF\shape_aspect_relationship.relating_shape_aspect ) ) = 1 ) ; wr2: ( SELF\shape_aspect_relationship.description<> ''path feature component usage'' ) OR ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( SELF\shape_aspect_relationship.relating_shape_aspect ) ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY shape_definition_representation SUBTYPE OF (property_definition_representation); WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''PRODUCT_DEFINITION_SHAPE'' IN TYPEOF ( SELF.definition ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''SHAPE_DEFINITION'' IN TYPEOF ( SELF.definition. definition ) ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''SHAPE_REPRESENTATION'' IN TYPEOF ( SELF.used_representation ) ; END_ENTITY; -- 10303-41: product_property_representation_schema ENTITY shape_dimension_representation SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( temp <* SELF\representation.items | NOT ( ''AUTOMOTIVE_DESIGN.''+ ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( temp ) ) ) ) = 0; wr2: SIZEOF ( SELF\representation.items ) <=3; wr3: SIZEOF ( QUERY ( pos_mri <* QUERY ( real_mri <* SELF\representation.items | ''REAL'' IN TYPEOF ( real_mri\ measure_with_unit.value_component ) ) | NOT ( pos_mri\ measure_with_unit.value_component>0.0 ) ) ) = 0; END_ENTITY; -- 10303-47: shape_dimension_schema ENTITY shape_representation SUBTYPE OF (representation); END_ENTITY; -- 10303-41: product_property_representation_schema ENTITY shape_representation_relationship SUBTYPE OF (representation_relationship); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''SHAPE_REPRESENTATION'' IN ( TYPEOF ( SELF\representation_relationship.rep_1 ) + TYPEOF ( SELF\representation_relationship.rep_2 ) ) ; END_ENTITY; -- 10303-41: product_property_representation_schema ENTITY shape_representation_with_parameters SUBTYPE OF (shape_representation); WHERE wr1: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) = 1 ) ) = SIZEOF ( SELF.items ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY shell_based_surface_model SUBTYPE OF (geometric_representation_item); sbsm_boundary : SET[1:?] OF shell; WHERE wr1:constraints_geometry_shell_based_surface_model ( SELF ) ; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY si_unit SUBTYPE OF (named_unit); prefix : OPTIONAL si_prefix; name : si_unit_name; DERIVE SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit(name); END_ENTITY; -- 10303-41: measure_schema ENTITY simple_boolean_expression ABSTRACT SUPERTYPE OF (ONEOF(boolean_literal,boolean_variable)) SUBTYPE OF (boolean_expression,simple_generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY simple_generic_expression ABSTRACT SUPERTYPE OF (ONEOF(generic_literal,generic_variable)) SUBTYPE OF (generic_expression); END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY simple_numeric_expression ABSTRACT SUPERTYPE OF (ONEOF(literal_number,numeric_variable)) SUBTYPE OF (numeric_expression,simple_generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY simple_pair_range; applies_to_pair : kinematic_pair; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY simple_string_expression ABSTRACT SUPERTYPE OF (ONEOF(string_literal,string_variable)) SUBTYPE OF (string_expression,simple_generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY sin_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY slash_expression SUBTYPE OF (binary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY sliding_curve_pair SUBTYPE OF (planar_curve_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY sliding_curve_pair_value SUBTYPE OF (pair_value); SELF\pair_value.applies_to_pair : sliding_curve_pair; actual_point_on_curve_1 : point_on_curve; actual_point_on_curve_2 : point_on_curve; WHERE wr1:SELF\pair_value.applies_to_pair\ planar_curve_pair. curve_1:=:actual_point_on_curve_1.basis_curve; wr2:SELF\pair_value.applies_to_pair\ planar_curve_pair. curve_2:=:actual_point_on_curve_2.basis_curve; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY sliding_surface_pair SUBTYPE OF (surface_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY sliding_surface_pair_value SUBTYPE OF (pair_value); SELF\pair_value.applies_to_pair : sliding_surface_pair; actual_point_on_surface_1 : point_on_surface; actual_point_on_surface_2 : point_on_surface; actual_rotation : plane_angle_measure; WHERE wr1:SELF\pair_value.applies_to_pair\ surface_pair. surface_1:=:actual_point_on_surface_1.basis_surface; wr2:SELF\pair_value.applies_to_pair\ surface_pair. surface_2:=:actual_point_on_surface_2.basis_surface; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY slot SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr2: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''swept shape occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.description = ''profile usage'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'']* TYPEOF ( sar.relating_shape_aspect ) ) = 1 ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''course of travel occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''course of travel'' ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr4: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''course of travel occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''course of travel'' ) AND ( sar.description = ''path feature component usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' IN TYPEOF ( sar.relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; wr5: SIZEOF ( QUERY ( sa <* get_shape_aspects ( SELF ) | ( sa.description = ''end condition occurrence'' ) AND ( SIZEOF ( QUERY ( sar <* USEDIN ( sa , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name = ''course of travel end'' ) AND ( sar. description = ''slot end usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''SLOT_END'' IN TYPEOF ( sar. relating_shape_aspect ) ) ) ) = 1 ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY slot_end SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [''open'' , ''radiused'' , ''flat'' , ''woodruff'']; wr3: ( SELF.description IN [''open'' , ''radiused''] ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 0 ) ; wr4: NOT ( SELF.description IN [''flat'' , ''woodruff''] ) XOR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) ; wr5: ( SELF.description<>''flat'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) ) ) = 1 ) ; wr6: ( SELF.description<>''flat'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''first radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr7: ( SELF.description<>''flat'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''second radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr8: ( SELF.description<>''woodruff'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1 ) ; wr9: ( SELF.description<>''woodruff'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1 ) ; wr10: SIZEOF ( QUERY ( sar <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( sar ) ) AND ( sar.name IN [ ''course of travel start'' , ''course of travel end'' ] ) AND ( sar.description = ''slot end usage'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''SLOT'' IN TYPEOF ( sar.related_shape_aspect.of_shape.definition ) ) AND ( sar.related_shape_aspect.of_shape.definition\ characterized_object.name = ''end condition'' ) AND ( sar. related_shape_aspect.of_shape.definition\ characterized_object.description = ''slot end occurrence'' ) ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY solid_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''SOLID_ANGLE_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY solid_angle_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY solid_model SUPERTYPE OF (ONEOF(csg_solid,manifold_solid_brep,swept_face_solid, solid_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- 10303-42: geometric_model_schema ENTITY solid_replica SUBTYPE OF (solid_model); parent_solid : solid_model; transformation : cartesian_transformation_operator_3d; WHERE wr1:acyclic_solid_replica ( SELF , parent_solid ) ; wr2:parent_solid\ geometric_representation_item.dim = 3; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY specified_higher_usage_occurrence SUBTYPE OF (assembly_component_usage); upper_usage : assembly_component_usage; next_usage : next_assembly_usage_occurrence; UNIQUE ur1 : upper_usage,next_usage; WHERE wr1:SELF:<>:upper_usage; wr2:SELF\product_definition_relationship. relating_product_definition:=:upper_usage. relating_product_definition; wr3:SELF\product_definition_relationship. related_product_definition:=:next_usage. related_product_definition; wr4: ( upper_usage.related_product_definition:=:next_usage. relating_product_definition ) OR ( SIZEOF ( QUERY ( pdr <* USEDIN ( upper_usage.related_product_definition , ''AUTOMOTIVE_DESIGN.PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'' ) | pdr. relating_product_definition:=:next_usage. relating_product_definition ) ) = 1 ) ; wr5: SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''NEXT_ASSEMBLY_USAGE_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.''+ ''SPECIFIED_HIGHER_USAGE_OCCURRENCE'']* TYPEOF ( upper_usage ) ) = 1; END_ENTITY; -- 10303-44: product_structure_schema ENTITY sphere SUBTYPE OF (geometric_representation_item); radius : positive_length_measure; centre : point; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY spherical_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY spherical_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : spherical_pair; lower_limit_yaw : rotational_range_measure; upper_limit_yaw : rotational_range_measure; lower_limit_pitch : rotational_range_measure; upper_limit_pitch : rotational_range_measure; lower_limit_roll : rotational_range_measure; upper_limit_roll : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_yaw ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_yaw ) ) ) XOR ( lower_limit_yaw0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''width'' ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''first angle'' ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''second angle'' ) ) ) = 1 ) ) ) = 1; wr9: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''first radius'' ) ) ) = 1 ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''first radius'' ) ) ) = 1 ) ) ) <=1 ) ; wr10: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''second radius'' ) ) ) = 1 ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''second radius'' ) ) ) = 1 ) ) ) <=1 ) ; wr11: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY standard_uncertainty SUBTYPE OF (uncertainty_qualifier); uncertainty_value : REAL; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY straightness_tolerance SUBTYPE OF (geometric_tolerance); WHERE wr1: NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_TOLERANCE_WITH_DATUM_REFERENCE'' IN TYPEOF ( SELF ) ) ; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY string_expression ABSTRACT SUPERTYPE OF (ONEOF(simple_string_expression, index_expression, substring_expression, concat_expression, format_function)) SUBTYPE OF (expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY string_literal SUBTYPE OF (simple_string_expression,generic_literal); the_value : STRING; END_ENTITY; -- 13584-20: expressions_schema ENTITY string_variable SUBTYPE OF (simple_string_expression,variable); END_ENTITY; -- 13584-20: expressions_schema ENTITY structured_dimension_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( TYPEOF ( SELF ) *[''AUTOMOTIVE_DESIGN.''+ ''DATUM_FEATURE_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''DATUM_TARGET_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''GEOMETRICAL_TOLERANCE_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''LEADER_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''PROJECTION_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.''+ ''DIMENSION_CURVE_DIRECTED_CALLOUT''] ) = 0; wr2: SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | NOT ( ato.name IN [ ''dimension value'' , ''tolerance value'' , ''unit text'' , ''prefix text'' , ''suffix text'' ] ) ) ) = 0; wr3: SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | ( ato.name = ''dimension value'' ) ) ) >=1; wr4: SIZEOF ( QUERY ( dcr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT_RELATIONSHIP.'' + ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP'' IN TYPEOF ( dcr ) ) AND ( dcr.name = ''prefix'' ) ) ) <=1; wr5: SIZEOF ( QUERY ( dcr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT_RELATIONSHIP.'' + ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP'' IN TYPEOF ( dcr ) ) AND ( dcr.name = ''suffix'' ) ) ) <=1; wr6: NOT ( ( SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | ( ato.name = ''prefix text'' ) ) ) >0 ) ) OR ( SIZEOF ( QUERY ( dcr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT_RELATIONSHIP.'' + ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP'' IN TYPEOF ( dcr ) ) AND ( dcr.name = ''prefix'' ) ) ) = 1 ) ; wr7: NOT ( SIZEOF ( QUERY ( ato <* QUERY ( con <* SELF.contents | ( ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_OCCURRENCE'' IN TYPEOF ( con ) ) ) | ( ato.name = ''suffix text'' ) ) ) >0 ) OR ( SIZEOF ( QUERY ( dcr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_CALLOUT_RELATIONSHIP.'' + ''RELATING_DRAUGHTING_CALLOUT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP'' IN TYPEOF ( dcr ) ) AND ( dcr.name = ''suffix'' ) ) ) = 1 ) ; END_ENTITY; -- 10303-506: aic_draughting_elements ENTITY styled_item SUBTYPE OF (representation_item); styles : SET[1:?] OF presentation_style_assignment; item : representation_item; WHERE wr1: ( SIZEOF ( SELF.styles ) = 1 ) XOR ( SIZEOF ( QUERY ( pres_style <* SELF.styles | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_STYLE_BY_CONTEXT'' IN TYPEOF ( pres_style ) ) ) ) = 0 ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY subedge SUBTYPE OF (edge); parent_edge : edge; END_ENTITY; -- 10303-42: topology_schema ENTITY subface SUBTYPE OF (face); parent_face : face; WHERE wr1: NOT ( mixed_loop_type_set ( list_to_set ( list_face_loops ( SELF ) ) + list_to_set ( list_face_loops ( parent_face ) ) ) ) ; END_ENTITY; -- 10303-42: topology_schema ENTITY substring_expression SUBTYPE OF (string_expression,multiple_arity_generic_expression); DERIVE operand : generic_expression := SELF\multiple_arity_generic_expression. operands[1]; index1 : generic_expression := SELF\multiple_arity_generic_expression. operands[2]; index2 : generic_expression := SELF\multiple_arity_generic_expression. operands[3]; WHERE wr1: ( ''AUTOMOTIVE_DESIGN.''+ ''STRING_EXPRESSION'' IN TYPEOF ( operand ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( index1 ) ) AND ( ''AUTOMOTIVE_DESIGN.''+ ''NUMERIC_EXPRESSION'' IN TYPEOF ( index2 ) ) ; wr2: SIZEOF ( SELF\multiple_arity_generic_expression.operands ) = 3; wr3:is_int_expr ( index1 ) ; wr4:is_int_expr ( index2 ) ; END_ENTITY; -- 13584-20: expressions_schema ENTITY surface SUPERTYPE OF (ONEOF(elementary_surface,swept_surface,bounded_surface, offset_surface,surface_replica)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- 10303-42: geometry_schema ENTITY surface_condition_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( c <* SELF.contents | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_CURVE_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_SYMBOL_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT_OCCURRENCE'']* TYPEOF ( c ) ) <>1 ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY surface_curve SUPERTYPE OF (ONEOF(intersection_curve,seam_curve) ANDOR bounded_surface_curve) SUBTYPE OF (curve); curve_3d : curve; associated_geometry : LIST[1:2] OF pcurve_or_surface; master_representation : preferred_surface_curve_representation; DERIVE basis_surface : SET[1:2] OF surface := get_basis_surface(SELF); WHERE wr1:curve_3d.dim = 3; wr2: ( ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' IN TYPEOF ( associated_geometry[1] ) ) OR ( master_representation<>pcurve_s1 ) ; wr3: ( ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' IN TYPEOF ( associated_geometry[2] ) ) OR ( master_representation<>pcurve_s2 ) ; wr4: NOT ( ''AUTOMOTIVE_DESIGN.''+ ''PCURVE'' IN TYPEOF ( curve_3d ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY surface_of_linear_extrusion SUBTYPE OF (swept_surface); extrusion_axis : vector; END_ENTITY; -- 10303-42: geometry_schema ENTITY surface_of_revolution SUBTYPE OF (swept_surface); axis_position : axis1_placement; DERIVE axis_line : line := dummy_gri || curve() || line(axis_position.location, dummy_gri || vector(axis_position.z,1.0)); END_ENTITY; -- 10303-42: geometry_schema ENTITY surface_pair SUBTYPE OF (kinematic_pair); surface_1 : surface; surface_2 : surface; orientation : BOOLEAN; WHERE wr1:frame_associated_to_background ( SELF\kinematic_pair. pair_placement_in_first_link_context , surface_1 ) ; wr2:frame_associated_to_background ( SELF\kinematic_pair. pair_placement_in_second_link_context , surface_2 ) ; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY surface_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : surface_pair; range_on_surface_1 : rectangular_trimmed_surface; range_on_surface_2 : rectangular_trimmed_surface; lower_limit_actual_rotation : rotational_range_measure; upper_limit_actual_rotation : rotational_range_measure; WHERE wr1:SELF\simple_pair_range.applies_to_pair\ surface_pair. surface_1:=:range_on_surface_1.basis_surface; wr2:SELF\simple_pair_range.applies_to_pair\ surface_pair. surface_2:=:range_on_surface_2.basis_surface; wr3: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_actual_rotation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_actual_rotation ) ) ) XOR ( lower_limit_actual_rotation0 ) ) = 0; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_boundary; style_of_boundary : curve_or_render; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_control_grid; style_of_control_grid : curve_or_render; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_fill_area; fill_area : fill_area_style; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_parameter_line; style_of_parameter_lines : curve_or_render; direction_counts : SET[1:2] OF direction_count_select; WHERE wr1: ( HIINDEX ( SELF.direction_counts ) = 1 ) XOR ( TYPEOF ( SELF.direction_counts[1] ) <> TYPEOF ( SELF.direction_counts[2] ) ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_reflectance_ambient; ambient_reflectance : REAL; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_reflectance_ambient_diffuse SUBTYPE OF (surface_style_reflectance_ambient); diffuse_reflectance : REAL; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_reflectance_ambient_diffuse_specular SUBTYPE OF (surface_style_reflectance_ambient_diffuse); specular_reflectance : REAL; specular_exponent : REAL; specular_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_rendering; rendering_method : shading_surface_method; surface_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_rendering_with_properties SUBTYPE OF (surface_style_rendering); properties : SET[1:2] OF rendering_properties_select; WHERE wr1: ( HIINDEX ( SELF.properties ) = 1 ) XOR ( TYPEOF ( SELF.properties[1] ) <> TYPEOF ( SELF.properties[2] ) ) ; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_segmentation_curve; style_of_segmentation_curve : curve_or_render; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_silhouette; style_of_silhouette : curve_or_render; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_transparent; transparency : REAL; WHERE wr1:{0.0<=transparency<=1.0}; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_style_usage; side : surface_side; style : surface_side_style_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY surface_texture_representation SUBTYPE OF (representation); WHERE wr1: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'' , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) <>1 ) ) = 0; wr2: ( SIZEOF ( QUERY ( i <* SELF.items | ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( i <* SELF.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''measuring method'' ) ) ) = 1 ) ; wr3: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) ) >0; wr4: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_1'' ) ) <=1 ) AND ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_2'' ) ) = 0 ) AND ( SIZEOF ( QUERY ( rr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_1'' ) | rr.rep_2.name = ''measuring direction'' ) ) = SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.'' + ''REP_1'' ) ) ) ; wr5: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | SIZEOF ( QUERY ( gpa <* USEDIN ( pdr.definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' IN TYPEOF ( gpa.base_definition ) ) AND ( gpa.base_definition.name = ''surface_condition'' ) ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY swept_face_solid SUPERTYPE OF (ONEOF(extruded_face_solid,revolved_face_solid)) SUBTYPE OF (solid_model); swept_face : face_surface; WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''PLANE'' IN TYPEOF ( swept_face. face_geometry ) ; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY swept_surface SUPERTYPE OF (ONEOF(surface_of_linear_extrusion,surface_of_revolution)) SUBTYPE OF (surface); swept_curve : curve; END_ENTITY; -- 10303-42: geometry_schema ENTITY symbol_colour; colour_of_symbol : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY symbol_representation SUBTYPE OF (representation); END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY symbol_representation_map SUBTYPE OF (representation_map); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''SYMBOL_REPRESENTATION'' IN TYPEOF ( SELF\representation_map.mapped_representation ) ; wr2:''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( SELF\representation_map.mapping_origin ) ; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY symbol_style; name : label; style_of_symbol : symbol_style_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY symbol_target SUBTYPE OF (geometric_representation_item); placement : axis2_placement; x_scale : positive_ratio_measure; y_scale : positive_ratio_measure; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY symmetric_shape_aspect SUBTYPE OF (shape_aspect); INVERSE basis_relationships : SET[1:?] OF shape_aspect_relationship FOR relating_shape_aspect; WHERE wr1: SIZEOF ( QUERY ( x <* SELF\symmetric_shape_aspect. basis_relationships | ''AUTOMOTIVE_DESIGN.''+ ''CENTRE_OF_SYMMETRY'' IN TYPEOF ( x\ shape_aspect_relationship.related_shape_aspect ) ) ) >=1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY symmetry_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <=3; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY tactile_appearance_representation SUBTYPE OF (representation); WHERE wr1: SIZEOF ( QUERY ( i <* SELF.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) <>1 ) ) = 0; wr2: SIZEOF ( QUERY ( i <* SELF.items | name = ''depth'' ) ) <=1; wr3: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | SIZEOF ( QUERY ( gpa <* USEDIN ( pdr.definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' IN TYPEOF ( gpa.base_definition ) ) AND ( gpa.base_definition.name = ''surface_condition'' ) ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY tan_function SUBTYPE OF (unary_function_call); END_ENTITY; -- 13584-20: expressions_schema ENTITY tangent SUBTYPE OF (derived_shape_aspect); WHERE wr1: SIZEOF ( SELF\derived_shape_aspect. deriving_relationships ) = 1; END_ENTITY; -- 10303-47: shape_aspect_definition_schema ENTITY taper SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2:SELF.description IN [ ''angle taper'' , ''diameter taper'' , ''directed taper'' ]; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( pdr. used_representation.items ) = 1 ) ) ) = 1; wr5: ( SELF.description<> ''angle taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''taper angle'' ) ) ) = 1 ) ) ) = 1 ) ; wr6: ( SELF.description<> ''diameter taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''taper diameter'' ) ) ) = 1 ) ) ) = 1 ) ; wr7: ( SELF.description<> ''directed taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''angle'' ) ) ) = 1 ) ) ) = 1 ) ; wr8: ( SELF.description<> ''directed taper'' ) OR ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr. used_representation ) ) AND ( pdr.used_representation. name = ''direction'' ) ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY tee_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {9<=SIZEOF ( pdr. used_representation.items ) <=10} ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''width'' , ''depth'' , ''cross bar width'' , ''cross bar depth'' , ''first offset'' , ''second offset'' , ''first angle'' , ''second angle'' , ''radius''] ) ) ) >0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''width'' ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''depth'' ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''cross bar width'' ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''cross bar depth'' ) ) ) = 1 ) ) ) = 1; wr10: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''first offset'' ) ) ) = 1 ) ) ) = 1; wr11: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''second offset'' ) ) ) = 1 ) ) ) = 1; wr12: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''first angle'' ) ) ) = 1 ) ) ) = 1; wr13: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''second angle'' ) ) ) = 1 ) ) ) = 1; wr14: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''radius'' ) ) ) = 1 ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''radius'' ) ) ) = 1 ) ) ) <=1 ) ; wr15: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY terminator_symbol SUBTYPE OF (annotation_symbol_occurrence); annotated_curve : annotation_curve_occurrence; END_ENTITY; -- 10303-101: draughting_element_schema ENTITY text_literal SUBTYPE OF (geometric_representation_item); literal : presentable_text; placement : axis2_placement; alignment : text_alignment; path : text_path; font : font_select; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_literal_with_associated_curves SUBTYPE OF (text_literal); associated_curves : SET[1:?] OF curve; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_literal_with_blanking_box SUBTYPE OF (text_literal); blanking : planar_box; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_literal_with_delineation SUBTYPE OF (text_literal); delineation : text_delineation; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_literal_with_extent SUBTYPE OF (text_literal); extent : planar_extent; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_string_representation SUBTYPE OF (representation); WHERE wr1: SIZEOF ( QUERY ( item <* SELF\representation.items | SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_CHARACTER'' , ''AUTOMOTIVE_DESIGN.''+ ''DEFINED_CHARACTER_GLYPH'' , ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'' , ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'']* TYPEOF ( item ) ) = 0 ) ) = 0; wr2: SIZEOF ( QUERY ( item <* SELF\representation.items | NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.''+ ''TEXT_LITERAL'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT'' , ''AUTOMOTIVE_DESIGN.''+ ''ANNOTATION_TEXT_CHARACTER'' , ''AUTOMOTIVE_DESIGN.''+ ''DEFINED_CHARACTER_GLYPH'' , ''AUTOMOTIVE_DESIGN.''+ ''COMPOSITE_TEXT'']* TYPEOF ( item ) ) = 0 ) ) ) >=1; wr3: SIZEOF ( QUERY ( a2p <* QUERY ( item <* SELF\representation.items | ''AUTOMOTIVE_DESIGN.''+ ''AXIS2_PLACEMENT'' IN TYPEOF ( item ) ) | NOT ( ( SIZEOF ( QUERY ( at <* QUERY ( item <* SELF\representation. items | ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT'' IN TYPEOF ( item ) ) | ( at\ mapped_item. mapping_target:=:a2p ) ) ) >=1 ) OR ( SIZEOF ( QUERY ( atc <* QUERY ( item <* SELF\representation.items | ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT_CHARACTER'' IN TYPEOF ( item ) ) | ( atc\ mapped_item. mapping_target:=:a2p ) ) ) >=1 ) ) ) ) = 0; END_ENTITY; -- 10303-46: presentation_definition_schema ENTITY text_style; name : label; character_appearance : character_style_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY text_style_for_defined_font; text_colour : colour; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY text_style_with_box_characteristics SUBTYPE OF (text_style); characteristics : SET[1:4] OF box_characteristic_select; WHERE wr1: SIZEOF ( QUERY ( c1 <* SELF.characteristics | SIZEOF ( QUERY ( c2 <* SELF.characteristics-c1 | TYPEOF ( c1 ) = TYPEOF ( c2 ) ) ) >0 ) ) = 0; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY text_style_with_mirror SUBTYPE OF (text_style); mirror_placement : axis2_placement; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY text_style_with_spacing SUBTYPE OF (text_style); character_spacing : character_spacing_select; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY thermodynamic_temperature_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''THERMODYNAMIC_TEMPERATURE_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY thermodynamic_temperature_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 1.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY thread SUBTYPE OF (feature_definition); WHERE wr1: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND NOT ( {7<=SIZEOF ( pdr. used_representation.items ) <=10} ) ) ) = 0; wr2: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i\ descriptive_representation_item.description IN [''internal'' , ''external''] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''major diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''minor diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr5: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''pitch diameter'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''crest'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) <=1; wr7: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''number of threads'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''RATIO_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) ) ) = 1 ) ) ) = 1; wr8: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''fit class'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr9: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''form'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr10: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''hand'' ) AND ( i\ descriptive_representation_item.description IN [ ''left hand'' , ''right hand'' ] ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) = 1; wr11: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''qualifier'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) <=1; wr12: SIZEOF ( QUERY ( pdr <* get_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [ ''thread side'' , ''major diameter'' , ''minor diameter'' , ''pitch diameter'' , ''crest'' , ''number of threads'' , ''fit class'' , ''form'' , ''hand'' , ''qualifier''] ) ) ) >0 ) ) ) = 0; END_ENTITY; -- 10303-214: automotive_design ENTITY time_interval; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: date_time_schema ENTITY time_interval_assignment ABSTRACT SUPERTYPE; assigned_time_interval : time_interval; role : time_interval_role; END_ENTITY; -- 10303-41: management_resources_schema ENTITY time_interval_based_effectivity SUBTYPE OF (effectivity); effectivity_period : time_interval; END_ENTITY; -- 10303-41: effectivity_schema ENTITY time_interval_role; name : label; description : OPTIONAL text; END_ENTITY; -- 10303-41: date_time_schema ENTITY time_interval_with_bounds SUBTYPE OF (time_interval); primary_bound : OPTIONAL date_time_or_event_occurrence; secondary_bound : OPTIONAL date_time_or_event_occurrence; duration : OPTIONAL time_measure_with_unit; WHERE wr1: NOT ( EXISTS ( secondary_bound ) AND EXISTS ( duration ) ) ; wr2: EXISTS ( primary_bound ) OR EXISTS ( secondary_bound ) ; END_ENTITY; -- 10303-41: date_time_schema ENTITY time_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''TIME_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY time_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 1.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY tolerance_value; lower_bound : measure_with_unit; upper_bound : measure_with_unit; WHERE wr1:upper_bound\ measure_with_unit. value_component>lower_bound\ measure_with_unit. value_component; wr2:upper_bound\ measure_with_unit.unit_component = lower_bound\ measure_with_unit.unit_component; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY tolerance_zone SUBTYPE OF (shape_aspect); defining_tolerance : SET[1:?] OF geometric_tolerance; form : tolerance_zone_form; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY tolerance_zone_definition SUPERTYPE OF (ONEOF(projected_zone_definition,runout_zone_definition)); zone : tolerance_zone; boundaries : SET[1:?] OF shape_aspect; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY tolerance_zone_form; name : label; END_ENTITY; -- 10303-47: shape_tolerance_schema ENTITY topological_representation_item SUPERTYPE OF (ONEOF(vertex,edge,face_bound,face,connected_edge_set, connected_face_set,(loop ANDOR path))) SUBTYPE OF (representation_item); END_ENTITY; -- 10303-42: topology_schema ENTITY toroidal_surface SUBTYPE OF (elementary_surface); major_radius : positive_length_measure; minor_radius : positive_length_measure; END_ENTITY; -- 10303-42: geometry_schema ENTITY torus SUBTYPE OF (geometric_representation_item); position : axis1_placement; major_radius : positive_length_measure; minor_radius : positive_length_measure; WHERE wr1:major_radius>minor_radius; END_ENTITY; -- 10303-42: geometric_model_schema ENTITY total_runout_tolerance SUBTYPE OF (geometric_tolerance_with_datum_reference); WHERE wr1: SIZEOF ( SELF\geometric_tolerance_with_datum_reference. datum_system ) <=2; END_ENTITY; -- 10303-519: aic_geometric_tolerances ENTITY transition_feature SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''CHAMFER'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE_ROUND'' , ''AUTOMOTIVE_DESIGN.'' + ''FILLET'']* TYPEOF ( SELF ) ) = 1; END_ENTITY; -- 10303-214: automotive_design ENTITY trimmed_curve SUBTYPE OF (bounded_curve); basis_curve : curve; trim_1 : SET[1:2] OF trimming_select; trim_2 : SET[1:2] OF trimming_select; sense_agreement : BOOLEAN; master_representation : trimming_preference; WHERE wr1: ( HIINDEX ( trim_1 ) = 1 ) OR ( TYPEOF ( trim_1[1] ) <> TYPEOF ( trim_1[2] ) ) ; wr2: ( HIINDEX ( trim_2 ) = 1 ) OR ( TYPEOF ( trim_2[1] ) <> TYPEOF ( trim_2[2] ) ) ; END_ENTITY; -- 10303-42: geometry_schema ENTITY two_direction_repeat_factor SUBTYPE OF (one_direction_repeat_factor); second_repeat_factor : vector; END_ENTITY; -- 10303-46: presentation_appearance_schema ENTITY type_qualifier; name : label; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY unary_boolean_expression ABSTRACT SUPERTYPE OF (ONEOF(not_expression,odd_function)) SUBTYPE OF (boolean_expression,unary_generic_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY unary_function_call ABSTRACT SUPERTYPE OF (ONEOF(abs_function, minus_function,sin_function, cos_function,tan_function,asin_function, acos_function,exp_function, log_function,log2_function,log10_function, square_root_function)) SUBTYPE OF (unary_numeric_expression); END_ENTITY; -- 13584-20: expressions_schema ENTITY unary_generic_expression ABSTRACT SUPERTYPE SUBTYPE OF (generic_expression); operand : generic_expression; END_ENTITY; -- 13584-20: generic_expressions_schema ENTITY unary_numeric_expression ABSTRACT SUPERTYPE OF (unary_function_call) SUBTYPE OF (numeric_expression,unary_generic_expression); SELF\unary_generic_expression.operand : numeric_expression; END_ENTITY; -- 13584-20: expressions_schema ENTITY uncertainty_assigned_representation SUBTYPE OF (representation); uncertainty : SET[1:?] OF uncertainty_measure_with_unit; END_ENTITY; -- 10303-43: representation_schema ENTITY uncertainty_measure_with_unit SUBTYPE OF (measure_with_unit); name : label; description : OPTIONAL text; WHERE wr1:valid_measure_value ( SELF\measure_with_unit. value_component ) ; END_ENTITY; -- 10303-43: representation_schema ENTITY uncertainty_qualifier SUPERTYPE OF (standard_uncertainty); measure_name : label; description : text; END_ENTITY; -- 10303-45: qualified_measure_schema ENTITY unconstrained_pair SUBTYPE OF (kinematic_pair); END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY unconstrained_pair_value SUBTYPE OF (pair_value); SELF\pair_value.applies_to_pair : unconstrained_pair; actual_placement : axis2_placement_3d; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- 10303-42: geometry_schema ENTITY uniform_surface SUBTYPE OF (b_spline_surface); END_ENTITY; -- 10303-42: geometry_schema ENTITY universal_pair SUBTYPE OF (kinematic_pair); input_skew_angle : OPTIONAL plane_angle_measure; DERIVE skew_angle : plane_angle_measure := NVL(input_skew_angle,0.0); WHERE wr1:COS ( plane_angle_for_pair_in_radian ( SELF , skew_angle ) ) >0.0; END_ENTITY; -- 10303-105: kinematic_structure_schema ENTITY universal_pair_range SUBTYPE OF (simple_pair_range); SELF\simple_pair_range.applies_to_pair : universal_pair; lower_limit_first_rotation : rotational_range_measure; upper_limit_first_rotation : rotational_range_measure; lower_limit_second_rotation : rotational_range_measure; upper_limit_second_rotation : rotational_range_measure; WHERE wr1: ( ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( lower_limit_first_rotation ) ) OR ( ''AUTOMOTIVE_DESIGN.''+ ''UNLIMITED_RANGE'' IN TYPEOF ( upper_limit_first_rotation ) ) ) XOR ( lower_limit_first_rotation=0.0; END_ENTITY; -- 10303-42: geometry_schema ENTITY vector_style SUBTYPE OF (pre_defined_terminator_symbol,curve_style); END_ENTITY; -- 10303-214: automotive_design ENTITY vee_profile SUBTYPE OF (shape_aspect); WHERE wr1:''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' IN TYPEOF ( SELF.of_shape.definition ) ; wr2: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) ) ) = 1; wr3: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND {3<=SIZEOF ( pdr. used_representation.items ) <=4} ) ) = 1; wr4: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | NOT ( i.name IN [''orientation'' , ''profile angle'' , ''tilt angle'' , ''profile radius'' ] ) ) ) >0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PLACEMENT'' IN TYPEOF ( i ) ) AND ( i.name = ''orientation'' ) ) ) = 1 ) ) ) = 1; wr6: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''profile angle'' ) ) ) = 1 ) ) ) = 1; wr7: SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_MEASURE_WITH_UNIT'']* TYPEOF ( i ) ) = 2 ) AND ( i.name = ''tilt angle'' ) ) ) = 1 ) ) ) = 1; wr8: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''profile radius'' ) ) ) = 1 ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF ( pdr. used_representation ) ) AND ( SIZEOF ( QUERY ( i <* pdr. used_representation.items | ( i.name = ''profile radius'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_MEASURE_WITH_UNIT'' IN TYPEOF ( i ) ) ) ) = 1 ) ) ) <=1 ) ; wr9: ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) ) ) <=1 ) AND ( SIZEOF ( QUERY ( pdr <* get_shape_aspect_property_definition_representations ( SELF ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION'' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr. used_representation.name = ''profile limit'' ) ) ) <=1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY versioned_action_request; id : identifier; version : label; purpose : text; description : OPTIONAL text; END_ENTITY; -- 10303-41: action_schema ENTITY vertex SUBTYPE OF (topological_representation_item); END_ENTITY; -- 10303-42: topology_schema ENTITY vertex_loop SUBTYPE OF (loop); loop_vertex : vertex; END_ENTITY; -- 10303-42: topology_schema ENTITY vertex_point SUBTYPE OF (vertex,geometric_representation_item); vertex_geometry : point; END_ENTITY; -- 10303-42: topology_schema ENTITY view_volume SUBTYPE OF (founded_item); projection_type : central_or_parallel; projection_point : cartesian_point; view_plane_distance : length_measure; front_plane_distance : length_measure; front_plane_clipping : BOOLEAN; back_plane_distance : length_measure; back_plane_clipping : BOOLEAN; view_volume_sides_clipping : BOOLEAN; view_window : planar_box; END_ENTITY; -- 10303-46: presentation_organization_schema ENTITY visual_appearance_representation SUBTYPE OF (representation); WHERE wr1: ( {2<=SIZEOF ( SELF.items ) <=5} ) AND ( SIZEOF ( QUERY ( i <* items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name IN [ ''colour id'' , ''colour name'' , ''lustre'' , ''pattern'' , ''transparency''] ) ) ) = SIZEOF ( SELF.items ) ) ; wr2: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''colour id'' ) ) = 1; wr3: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''lustre'' ) ) = 1; wr4: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''colour name'' ) ) <=1; wr5: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''pattern'' ) ) <=1; wr6: SIZEOF ( QUERY ( i <* SELF.items | i.name = ''transparency'' ) ) <=1; wr7: ( SIZEOF ( USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( SELF , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | SIZEOF ( QUERY ( gpa <* USEDIN ( pdr.definition , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY'' IN TYPEOF ( gpa.base_definition ) ) AND ( gpa.base_definition.name = ''surface_condition'' ) ) ) = 1 ) ) = 1 ) ; END_ENTITY; -- 10303-214: automotive_design ENTITY volume_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1:''AUTOMOTIVE_DESIGN.''+ ''VOLUME_UNIT'' IN TYPEOF ( SELF\measure_with_unit.unit_component ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY volume_unit SUBTYPE OF (named_unit); WHERE wr1: ( SELF\named_unit.dimensions.length_exponent = 3.0 ) AND ( SELF\named_unit.dimensions.mass_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.time_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. electric_current_exponent = 0.0 ) AND ( SELF\named_unit. dimensions.thermodynamic_temperature_exponent = 0.0 ) AND ( SELF\named_unit.dimensions. amount_of_substance_exponent = 0.0 ) AND ( SELF\named_unit.dimensions.luminous_intensity_exponent = 0.0 ) ; END_ENTITY; -- 10303-41: measure_schema ENTITY xor_expression SUBTYPE OF (binary_boolean_expression); SELF\binary_generic_expression.operands : LIST[2:2] OF boolean_expression; END_ENTITY; -- 13584-20: expressions_schema FUNCTION acyclic(arg1 : generic_expression;arg2 : SET OF generic_expression) : BOOLEAN; LOCAL result : BOOLEAN; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.SIMPLE_GENERIC_EXPRESSION'' IN TYPEOF(arg1)) THEN RETURN (TRUE); END_IF; IF arg1 IN arg2 THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.UNARY_GENERIC_EXPRESSION'' IN TYPEOF(arg1) THEN RETURN (acyclic(arg1\unary_generic_expression .operand,arg2 + [arg1])); END_IF; IF ''AUTOMOTIVE_DESIGN.BINARY_GENERIC_EXPRESSION'' IN TYPEOF(arg1) THEN RETURN (acyclic(arg1\binary_generic_expression .operands[1],arg2 + [arg1]) AND acyclic(arg1\binary_generic_expression .operands[2],arg2 + [arg1])); END_IF; IF ''AUTOMOTIVE_DESIGN.MULTIPLE_ARITY_GENERIC_EXPRESSION'' IN TYPEOF(arg1) THEN result := TRUE; REPEAT i := 1 TO SIZEOF (arg1\multiple_arity_generic_expression.operands); result := result AND acyclic(arg1\multiple_arity_generic_expression. operands[i],arg2 + [arg1]); END_REPEAT; RETURN (result); END_IF; END_FUNCTION; -- 13584-20: generic_expressions_schema FUNCTION acyclic_composite_text(start_composite : composite_text;child_text : SET[1:?] OF text_or_character) : LOGICAL; LOCAL i : INTEGER; local_composite_text : SET[0:?] OF composite_text; local_annotation_text : SET[0:?] OF annotation_text; local_children : SET[0:?] OF text_or_character; END_LOCAL; local_composite_text := QUERY(child <* child_text | (''AUTOMOTIVE_DESIGN.COMPOSITE_TEXT'' IN TYPEOF(child))); IF (SIZEOF(local_composite_text) > 0) THEN REPEAT i := 1 TO HIINDEX(local_composite_text); IF (start_composite :=: local_composite_text[i]) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; local_children := child_text; IF (SIZEOF(local_composite_text)) > 0 THEN REPEAT i := 1 TO HIINDEX(local_composite_text); local_children := local_children + local_composite_text[i].collected_text; END_REPEAT; END_IF; local_annotation_text := QUERY(child <* child_text | ( ''AUTOMOTIVE_DESIGN.ANNOTATION_TEXT'' IN TYPEOF(child))); IF (SIZEOF(local_annotation_text) > 0) THEN REPEAT i := 1 TO HIINDEX(local_annotation_text); local_children := local_children + QUERY(item <* local_annotation_text[i]\ mapped_item.mapping_source.mapped_representation.items | SIZEOF([''AUTOMOTIVE_DESIGN.ANNOTATION_TEXT'', ''AUTOMOTIVE_DESIGN.COMPOSITE_TEXT''] * TYPEOF(item)) > 0) ; END_REPEAT; END_IF; IF (local_children :<>: child_text) THEN RETURN (acyclic_composite_text(start_composite,local_children)); ELSE RETURN (TRUE); END_IF; END_FUNCTION; -- 10303-46: presentation_definition_schema FUNCTION acyclic_curve_replica(rep : curve_replica;parent : curve) : BOOLEAN; IF NOT ((''AUTOMOTIVE_DESIGN.CURVE_REPLICA'') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN (acyclic_curve_replica(rep,parent\curve_replica.parent_curve)); END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION acyclic_mapped_item_usage(rep : representation) : BOOLEAN; -- returns TRUE if the representation contains one or more mapped_items -- that are a mapping of the representation itself LOCAL items : SET OF representation_item; END_LOCAL; items := QUERY(item <* rep.items | ''AUTOMOTIVE_DESIGN.MAPPED_ITEM'' IN TYPEOF(item)); IF SIZEOF(items) = 0 THEN RETURN (FALSE); ELSE REPEAT i := 1 TO HIINDEX(items); IF items[i]\mapped_item.mapping_source .mapped_representation :=: rep THEN RETURN (TRUE); ELSE RETURN (acyclic_mapped_item_usage (items[i]\mapped_item.mapping_source. mapped_representation)); END_IF; END_REPEAT; RETURN (FALSE); END_IF; END_FUNCTION; -- 10303-504: aic_draughting_annotation FUNCTION acyclic_mapped_representation(parent_set : SET OF representation; children_set : SET OF representation_item) : BOOLEAN; LOCAL x,y : SET OF representation_item; END_LOCAL; -- Determine the subset of children_set that are mapped_items x := QUERY(z <* children_set | ''AUTOMOTIVE_DESIGN.MAPPED_ITEM'' IN TYPEOF(z)); -- Determine that the subset has elements IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x); IF x[i]\mapped_item.mapping_source .mapped_representation IN parent_set THEN RETURN (FALSE); END_IF; -- Recursive check of the items of mapped_representation IF NOT acyclic_mapped_representation(parent_set + x[i]\mapped_item. mapping_source.mapped_representation, x[i]\mapped_item.mapping_source. mapped_representation.items) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; -- Determine the subset of children_set that are not -- mapped_items x := children_set - x; -- Determine that the subset has elements IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x); y := QUERY(z <* bag_to_set(USEDIN(x[i],'''')) | ''AUTOMOTIVE_DESIGN.REPRESENTATION_ITEM'' IN TYPEOF(z)); -- Recursively check for an offending mapped_item -- Return false for any errors encountered IF NOT acyclic_mapped_representation(parent_set,y) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; -- Return true when all elements are checked and -- no error conditions found RETURN (TRUE); END_FUNCTION; -- 10303-43: representation_schema FUNCTION acyclic_point_replica(rep : point_replica;parent : point) : BOOLEAN; IF NOT ((''AUTOMOTIVE_DESIGN.POINT_REPLICA'') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN (acyclic_point_replica(rep,parent\point_replica.parent_pt)); END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION acyclic_product_category_relationship(relation : product_category_relationship; children : SET OF product_category) : BOOLEAN; LOCAL x : SET OF product_category_relationship; local_children : SET OF product_category; END_LOCAL; REPEAT i := 1 TO HIINDEX(children); IF relation.category :=: children[i] THEN RETURN (FALSE); END_IF; END_REPEAT; x := bag_to_set(USEDIN(relation.category,''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY'')); local_children := children + relation.category; IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_product_category_relationship(x[i],local_children) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; RETURN (TRUE); END_FUNCTION; -- 10303-41: product_definition_schema FUNCTION acyclic_product_definition_relationship(relation : product_definition_relationship;relatives : SET[1:?] OF product_definition; specific_relation : STRING) : BOOLEAN; LOCAL x : SET OF product_definition_relationship; END_LOCAL; IF relation.relating_product_definition IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(pd <* bag_to_set(USEDIN(relation .relating_product_definition, ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'')) | specific_relation IN TYPEOF(pd)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_product_definition_relationship(x[i],relatives + relation.relating_product_definition,specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; -- 10303-41: product_definition_schema FUNCTION acyclic_solid_replica(rep : solid_replica;parent : solid_model) : BOOLEAN; IF NOT ((''AUTOMOTIVE_DESIGN.SOLID_REPLICA'') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN (acyclic_solid_replica(rep,parent\solid_replica.parent_solid)); END_IF; END_FUNCTION; -- 10303-42: geometric_model_schema FUNCTION acyclic_surface_replica(rep : surface_replica;parent : surface) : BOOLEAN; IF NOT ((''AUTOMOTIVE_DESIGN.SURFACE_REPLICA'') IN TYPEOF(parent)) THEN RETURN (TRUE); END_IF; IF (parent :=: rep) THEN RETURN (FALSE); ELSE RETURN (acyclic_surface_replica(rep, parent\surface_replica.parent_surface)) ; END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION aspect_ratio(p : planar_box) : positive_ratio_measure; RETURN (p.size_in_x / p.size_in_y); END_FUNCTION; -- 10303-517: aic_mechanical_design_geometric_presentation FUNCTION assembly_shape_is_defined (assy : next_assembly_usage_occurrence) : BOOLEAN; LOCAL sdr_set : SET OF shape_definition_representation := []; srr_set : SET OF shape_representation_relationship := []; sdr1_set : SET OF shape_definition_representation := []; pd_set : SET OF property_definition := []; pdr_set : SET OF product_definition_relationship := []; pds_set : SET OF product_definition_shape := []; prop_set : SET OF property_definition := []; END_LOCAL; -- Gather all instances of shape_definition_representation where the -- component part has a representation defined for it. pd_set := bag_to_set(USEDIN(assy.related_product_definition, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')); pdr_set := QUERY (pdr <* bag_to_set(USEDIN(assy.related_product_definition, ''AUTOMOTIVE_DESIGN.PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'')) | SIZEOF(USEDIN(pdr, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')) > 0); IF SIZEOF(pd_set) > 0 THEN REPEAT i := 1 TO HIINDEX(pd_set); sdr_set := sdr_set + QUERY(pdr <* USEDIN(pd_set[i], ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'') | ''AUTOMOTIVE_DESIGN.SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF( pdr)); END_REPEAT; END_IF; IF SIZEOF(pdr_set) > 0 THEN REPEAT i := 1 TO HIINDEX(pdr_set); prop_set := prop_set + bag_to_set(USEDIN(pdr_set[i], ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')); END_REPEAT; -- that are reps of the properties found IF SIZEOF(prop_set) > 0 THEN REPEAT i := 1 TO HIINDEX(prop_set); sdr_set := sdr_set + QUERY(pdr <* USEDIN(prop_set[i], ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'') | ''AUTOMOTIVE_DESIGN.SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF (pdr)); END_REPEAT; END_IF; END_IF; -- If there is a representation defined for the component part IF SIZEOF(sdr_set) > 0 THEN REPEAT i := 1 TO HIINDEX(sdr_set); srr_set := QUERY(rr <* bag_to_set(USEDIN(sdr_set[i]\ property_definition_representation.used_representation, ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.REP_2'')) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_RELATIONSHIP'' IN TYPEOF (rr)); -- If there is a shape_representation_relationship where the component -- component part''s shape_representation is related to another shape_- -- representation. pd_set := bag_to_set(USEDIN(assy.relating_product_definition, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')); IF SIZEOF(pd_set) > 0 THEN REPEAT i := 1 TO HIINDEX(pd_set); sdr1_set := sdr1_set + QUERY(pdr <* USEDIN(pd_set[i], ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'') | ''AUTOMOTIVE_DESIGN.SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF(pdr)); END_REPEAT; END_IF; IF ((SIZEOF(sdr_set) > 0) AND (SIZEOF(sdr1_set) > 0)) THEN IF SIZEOF(srr_set) > 0 THEN REPEAT j := 1 TO HIINDEX(srr_set); IF SIZEOF(QUERY(pdr <* bag_to_set(USEDIN(srr_set[j]\ representation_relationship.rep_1, ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'')) | ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF(pdr) ) * sdr1_set) >= 1 THEN pds_set := QUERY(x <* bag_to_set(USEDIN(assy, ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.DEFINITION'')) | ''AUTOMOTIVE_DESIGN.PRODUCT_DEFINITION_SHAPE'' IN TYPEOF(x )); IF SIZEOF(pds_set) = 0 THEN RETURN (FALSE); END_IF; REPEAT k := 1 TO HIINDEX(pds_set); IF SIZEOF(QUERY(cdsr <* USEDIN(pds_set[k], ''AUTOMOTIVE_DESIGN.'' + ''CONTEXT_DEPENDENT_SHAPE_REPRESENTATION.'' + ''REPRESENTED_PRODUCT_RELATION'') | (cdsr.representation_relation :=: srr_set[j]))) > 0 THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; END_IF; END_REPEAT; END_IF; -- If the shape of the component is not specified or there are no -- violations then return TRUE RETURN (TRUE); END_FUNCTION; -- 10303-214: automotive_design FUNCTION associated_surface(arg : pcurve_or_surface) : surface; LOCAL surf : surface; END_LOCAL; IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(arg) THEN surf := arg.basis_surface; ELSE surf := arg; END_IF; RETURN (surf); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION bag_to_set(the_bag : BAG OF GENERIC : intype) : SET OF GENERIC : intype; LOCAL the_set : SET OF GENERIC : intype := []; END_LOCAL; IF SIZEOF(the_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(the_bag); the_set := the_set + the_bag[i]; END_REPEAT; END_IF; RETURN (the_set); END_FUNCTION; -- 10303-41: support_resource_schema FUNCTION base_axis(dim : INTEGER;axis1,axis2,axis3 : direction) : LIST[2:3] OF direction; LOCAL u : LIST[2:3] OF direction; factor : REAL; d1,d2 : direction; END_LOCAL; IF (dim = 3) THEN d1 := NVL(normalise(axis3), dummy_gri || direction([0.0,0.0,1.0])); d2 := first_proj_axis(d1,axis1); u := [d2,second_proj_axis(d1,d2,axis2),d1]; ELSE IF EXISTS(axis1) THEN d1 := normalise(axis1); u := [d1,orthogonal_complement(d1)]; IF EXISTS(axis2) THEN factor := dot_product(axis2,u[2]); IF (factor < 0.0) THEN u[2].direction_ratios[1] := - u[2].direction_ratios[1]; u[2].direction_ratios[2] := - u[2].direction_ratios[2]; END_IF; END_IF; ELSE IF EXISTS(axis2) THEN d1 := normalise(axis2); u := [orthogonal_complement(d1),d1]; u[1].direction_ratios[1] := - u[1].direction_ratios[1]; u[1].direction_ratios[2] := - u[1].direction_ratios[2]; ELSE u := [ dummy_gri || direction([1.0,0.0]), dummy_gri || direction([0.0, 1.0])]; END_IF; END_IF; END_IF; RETURN (u); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION boolean_choose(b : BOOLEAN;choice1,choice2 : GENERIC : item) : GENERIC : item; IF b THEN RETURN (choice1); ELSE RETURN (choice2); END_IF; END_FUNCTION; -- 10303-42: topology_schema FUNCTION build_2axes(ref_direction : direction) : LIST[2:2] OF direction; LOCAL d : direction := NVL(normalise(ref_direction), dummy_gri || direction([1.0,0.0])); END_LOCAL; RETURN ([d,orthogonal_complement(d)]); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION build_axes(axis,ref_direction : direction) : LIST[3:3] OF direction; LOCAL d1,d2 : direction; END_LOCAL; d1 := NVL(normalise(axis), dummy_gri || direction([0.0,0.0,1.0])); d2 := first_proj_axis(d1,ref_direction); RETURN ([d2,normalise(cross_product(d1,d2)).orientation,d1]); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION check_associative_shape_aspects (sdr : shape_definition_representation) : BOOLEAN; LOCAL sr1,sr2 : SET OF representation; dm,pv : SET OF representation; END_LOCAL; -- Check if the representation contains only two items IF (SIZEOF(sdr.used_representation.items) <> 2) THEN RETURN (FALSE); END_IF; -- Find the representations that use each item sr1 := using_representations(sdr.used_representation.items[1]); sr2 := using_representations(sdr.used_representation.items[2]); -- Find the representations in which item 1 representations are mapped REPEAT i := 1 TO HIINDEX(sr1); dm := representations_mapped_into(sr1[i]); REPEAT j := 1 TO HIINDEX(dm); IF (''AUTOMOTIVE_DESIGN.DRAUGHTING_MODEL'' IN TYPEOF(dm[j])) THEN IF (dm[j] IN sr2) THEN RETURN (TRUE); END_IF; -- Find the views that the draughting model is mapped into pv := representations_mapped_into(dm[j]); REPEAT k := 1 TO HIINDEX(pv); IF (''AUTOMOTIVE_DESIGN.PRESENTATION_VIEW'' IN TYPEOF(pv[k])) THEN IF (pv[k] IN sr2) THEN RETURN (TRUE); END_IF; END_IF; END_REPEAT; END_IF; END_REPEAT; END_REPEAT; -- Find the representations in which item 2 representations are mapped REPEAT i := 1 TO HIINDEX(sr2); dm := representations_mapped_into(sr2[i]); REPEAT j := 1 TO HIINDEX(dm); IF (''AUTOMOTIVE_DESIGN.DRAUGHTING_MODEL'' IN TYPEOF(dm[j])) THEN IF (dm[j] IN sr1) THEN RETURN (TRUE); END_IF; -- Find the views that the draughting model is mapped into pv := representations_mapped_into(dm[j]); REPEAT k := 1 TO HIINDEX(pv); IF (''AUTOMOTIVE_DESIGN.PRESENTATION_VIEW'' IN TYPEOF(pv[k])) THEN IF (pv[k] IN sr1) THEN RETURN (TRUE); END_IF; END_IF; END_REPEAT; END_IF; END_REPEAT; END_REPEAT; RETURN (FALSE); END_FUNCTION; -- 10303-520: aic_associative_draughting_elements FUNCTION check_text_alignment(ct : composite_text) : BOOLEAN; LOCAL a : SET OF text_alignment := []; END_LOCAL; -- create a set of all the alignments REPEAT i := 1 TO HIINDEX(ct.collected_text); a := a + [ct.collected_text[i]\text_literal.alignment]; END_REPEAT; -- if there is more than one element in the set -- then not all alignments were the same RETURN (SIZEOF(a) = 1); END_FUNCTION; -- 10303-504: aic_draughting_annotation FUNCTION check_text_font(ct : composite_text) : BOOLEAN; LOCAL f : SET OF font_select := []; END_LOCAL; -- build a set of all the fonts REPEAT i := 1 TO HIINDEX(ct.collected_text); f := f + [ct.collected_text[i]\text_literal.font]; END_REPEAT; -- if there is more than one element in the set -- then not all fonts were the same RETURN (SIZEOF(f) <= 1); END_FUNCTION; -- 10303-504: aic_draughting_annotation FUNCTION closed_shell_reversed(a_shell : closed_shell) : oriented_closed_shell; LOCAL the_reverse : oriented_closed_shell; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.ORIENTED_CLOSED_SHELL'' IN TYPEOF(a_shell)) THEN the_reverse := dummy_tri || connected_face_set (a_shell\connected_face_set. cfs_faces) || closed_shell() || oriented_closed_shell( a_shell\oriented_closed_shell.closed_shell_element, NOT ( a_shell\oriented_closed_shell.orientation)); ELSE the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set. cfs_faces) || closed_shell() || oriented_closed_shell(a_shell,FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION conditional_reverse(p : BOOLEAN;an_item : reversible_topology) : reversible_topology; IF p THEN RETURN (an_item); ELSE RETURN (topology_reversed(an_item)); END_IF; END_FUNCTION; -- 10303-42: topology_schema FUNCTION constraints_composite_curve_on_surface(c : composite_curve_on_surface) : BOOLEAN; LOCAL n_segments : INTEGER := SIZEOF(c.segments); END_LOCAL; REPEAT k := 1 TO n_segments; IF (NOT (''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(c\composite_curve.segments[k]. parent_curve))) AND (NOT (''AUTOMOTIVE_DESIGN.SURFACE_CURVE'' IN TYPEOF(c\ composite_curve.segments[k].parent_curve))) AND (NOT ( ''AUTOMOTIVE_DESIGN.COMPOSITE_CURVE_ON_SURFACE'' IN TYPEOF(c\ composite_curve.segments[k].parent_curve))) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION constraints_geometry_shell_based_surface_model(m : shell_based_surface_model) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT j := 1 TO SIZEOF(m.sbsm_boundary); IF (NOT (''AUTOMOTIVE_DESIGN.OPEN_SHELL'' IN TYPEOF(m.sbsm_boundary[j])) AND ( NOT (''AUTOMOTIVE_DESIGN.CLOSED_SHELL'' IN TYPEOF(m.sbsm_boundary[j])))) THEN result := FALSE; RETURN (result); END_IF; END_REPEAT; RETURN (result); END_FUNCTION; -- 10303-42: geometric_model_schema FUNCTION constraints_param_b_spline(degree,up_knots,up_cp : INTEGER;knot_mult : LIST OF INTEGER;knots : LIST OF parameter_value) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; k,sum : INTEGER; END_LOCAL; sum := knot_mult[1]; REPEAT i := 2 TO up_knots; sum := sum + knot_mult[i]; END_REPEAT; IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> (degree + up_cp + 2)) THEN result := FALSE; RETURN (result); END_IF; k := knot_mult[1]; IF (k < 1) OR (k > degree + 1) THEN result := FALSE; RETURN (result); END_IF; REPEAT i := 2 TO up_knots; IF (knot_mult[i] < 1) OR (knots[i] <= knots[i - 1]) THEN result := FALSE; RETURN (result); END_IF; k := knot_mult[i]; IF (i < up_knots) AND (k > degree) THEN result := FALSE; RETURN (result); END_IF; IF (i = up_knots) AND (k > degree + 1) THEN result := FALSE; RETURN (result); END_IF; END_REPEAT; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION constraints_rectangular_composite_surface(s : rectangular_composite_surface) : BOOLEAN; REPEAT i := 1 TO s.n_u; REPEAT j := 1 TO s.n_v; IF NOT ((''AUTOMOTIVE_DESIGN.B_SPLINE_SURFACE'' IN TYPEOF(s.segments[i][j].parent_surface)) OR (''AUTOMOTIVE_DESIGN.RECTANGULAR_TRIMMED_SURFACE'' IN TYPEOF(s.segments[i][j].parent_surface))) THEN RETURN (FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u - 1; REPEAT j := 1 TO s.n_v; IF s.segments[i][j].u_transition = discontinuous THEN RETURN (FALSE); END_IF; END_REPEAT; END_REPEAT; REPEAT i := 1 TO s.n_u; REPEAT j := 1 TO s.n_v - 1; IF s.segments[i][j].v_transition = discontinuous THEN RETURN (FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN (TRUE); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION convert_plane_angle_for_pair_from_radian(pair : kinematic_pair; angle_expr : REAL) : plane_angle_measure; LOCAL link_rep : kinematic_link_representation := representation_of_link(pair.joint.first_link); link_cntxt : representation_context; pa_units : SET OF unit := []; pau : unit; conv_factor : REAL := 1.0; result : plane_angle_measure; END_LOCAL; link_cntxt := link_rep\representation.context_of_items; IF NOT (''AUTOMOTIVE_DESIGN.GLOBAL_UNIT_ASSIGNED_CONTEXT'' IN TYPEOF(link_cntxt)) THEN RETURN (?); END_IF; pa_units := QUERY(unit <* link_cntxt\global_unit_assigned_context.units | ''AUTOMOTIVE_DESIGN.PLANE_ANGLE_UNIT'' IN TYPEOF(unit)); IF SIZEOF(pa_units) <> 1 THEN RETURN (?); END_IF; pau := pa_units[1]; IF (NOT (''AUTOMOTIVE_DESIGN.SI_UNIT'' IN TYPEOF(pau)) AND NOT ( ''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau))) THEN RETURN (?); END_IF; REPEAT WHILE (''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau)); conv_factor := conv_factor * pau\ conversion_based_unit.conversion_factor.value_component; pau := pau\conversion_based_unit.conversion_factor.unit_component; IF ((NOT (''AUTOMOTIVE_DESIGN.SI_UNIT'' IN TYPEOF(pau)) AND NOT ( ''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau))) OR (NOT ( ''AUTOMOTIVE_DESIGN.PLANE_ANGLE_UNIT'' IN TYPEOF(pau)))) THEN RETURN (?); END_IF; END_REPEAT; IF (pau\si_unit.name <> si_unit_name.radian) THEN RETURN (?); END_IF; CASE pau\si_unit.prefix OF si_prefix.exa : conv_factor := 1.E18 * conv_factor; si_prefix.peta : conv_factor := 1.E15 * conv_factor; si_prefix.tera : conv_factor := 1.E12 * conv_factor; si_prefix.giga : conv_factor := 1.E9 * conv_factor; si_prefix.mega : conv_factor := 1.E6 * conv_factor; si_prefix.kilo : conv_factor := 1.E3 * conv_factor; si_prefix.hecto : conv_factor := 1.E2 * conv_factor; si_prefix.deca : conv_factor := 1.E1 * conv_factor; si_prefix.deci : conv_factor := 1.E-1 * conv_factor; si_prefix.centi : conv_factor := 1.E-2 * conv_factor; si_prefix.milli : conv_factor := 1.E-3 * conv_factor; si_prefix.micro : conv_factor := 1.E-6 * conv_factor; si_prefix.nano : conv_factor := 1.E-9 * conv_factor; si_prefix.pico : conv_factor := 1.E-12 * conv_factor; si_prefix.femto : conv_factor := 1.E-15 * conv_factor; si_prefix.atto : conv_factor := 1.E-18 * conv_factor; END_CASE; result := angle_expr / conv_factor; RETURN (result); END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION convert_spatial_to_ypr_rotation(pair : kinematic_pair;rotation : spatial_rotation) : ypr_rotation; LOCAL axis : direction; angle : plane_angle_measure; -- rotation angle in application -- specific units conv_angle : plane_angle_measure; -- rotation angle in radians ya,pa,ra : plane_angle_measure; -- yaw, pitch, and roll angle ucf : REAL; -- unit conversion factor dx,dy,dz : REAL; -- components of direction vector s_a,c_a : REAL; -- sine and cosine of rotation angle rotmat : ARRAY[1:3] OF ARRAY[1:3] OF REAL; -- rotation matrix cm1 : REAL; s_y,c_y : REAL; s_r,c_r : REAL; END_LOCAL; -- If rotation is already a ypr_rotation, return it immediately IF ''AUTOMOTIVE_DESIGN.YPR_ROTATION'' IN TYPEOF(rotation) THEN RETURN (rotation); END_IF; -- rotation is a rotation_about_direction axis := normalise(rotation\rotation_about_direction.direction_of_axis); angle := rotation\rotation_about_direction.rotation_angle; -- a zero rotation is converted trivially IF (angle = 0.0) THEN RETURN ([0.0,0.0,0.0]); END_IF; dx := axis.direction_ratios[1]; dy := axis.direction_ratios[2]; dz := axis.direction_ratios[3]; -- provide angle measured in radian conv_angle := plane_angle_for_pair_in_radian(pair,angle); IF (conv_angle = ?) THEN RETURN (?); END_IF; ucf := angle / conv_angle; s_a := SIN(conv_angle); c_a := COS(conv_angle); -- axis parallel either to x-axis or to z-axis? IF (dy = 0.0) AND (dx * dz = 0.0) THEN REPEAT WHILE (conv_angle <= - PI); conv_angle := conv_angle + 2.0 * PI; END_REPEAT; REPEAT WHILE (conv_angle > PI); conv_angle := conv_angle - 2.0 * PI; END_REPEAT; ya := ucf * conv_angle; IF (conv_angle <> PI) THEN ra := - ya; ELSE ra := ya; END_IF; IF (dx <> 0.0) THEN IF (dx > 0.0) THEN RETURN ([0.0,0.0,ya]); ELSE RETURN ([0.0,0.0,ra]); END_IF; -- axis parallel to z-axis - use z-axis as yaw axis ELSE IF (dz > 0.0) THEN RETURN ([ya,0.0,0.0]); ELSE RETURN ([ra,0.0,0.0]); END_IF; END_IF; END_IF; -- axis parallel to y-axis - use y-axis as pitch axis IF ((dy <> 0.0) AND (dx = 0.0) AND (dz = 0.0)) THEN IF (c_a >= 0.0) THEN ya := 0.0; ra := 0.0; ELSE ya := ucf * PI; ra := ya; END_IF; pa := ucf * ATAN(s_a,ABS(c_a)); IF (dy < 0.0) THEN pa := - pa; END_IF; RETURN ([ya,pa,ra]); END_IF; -- axis not parallel to any axis of coordinate system -- compute rotation matrix cm1 := 1.0 - c_a; rotmat := [[dx * dx * cm1 + c_a,dx * dy * cm1 - dz * s_a, dx * dz * cm1 + dy * s_a],[dx * dy * cm1 + dz * s_a,dy * dy * cm1 + c_a,dy * dz * cm1 - dx * s_a],[dx * dz * cm1 - dy * s_a, dy * dz * cm1 + dx * s_a,dz * dz * cm1 + c_a]]; -- rotmat[1][3] equals SIN (pitch_angle) IF (ABS(rotmat[1][3]) = 1.0) THEN BEGIN IF (rotmat[1][3] = 1.0) THEN pa := 0.5 * PI; ELSE pa := - 0.5 * PI; END_IF; -- In this case, only the sum or difference of roll and yaw angles -- is relevant and can be evaluated from the matrix. -- According to IP `rectangular pitch angle'' for ypr_rotation, -- the roll angle is set to zero. ra := 0.0; ya := ATAN(rotmat[2][1],rotmat[2][2]); -- result of ATAN is in the range [-PI/2, PI/2]. -- Here all four quadrants are needed. IF (rotmat[2][2] < 0.0) THEN IF ya <= 0.0 THEN ya := ya + PI; ELSE ya := ya - PI; END_IF; END_IF; END; -- COS (pitch_angle) not equal to zero ELSE BEGIN ya := ATAN(- rotmat[1][2],rotmat[1][1]); IF (rotmat[1][1] < 0.0) THEN IF (ya <= 0.0) THEN ya := ya + PI; ELSE ya := ya - PI; END_IF; END_IF; ra := ATAN(- rotmat[2][3],rotmat[3][3]); IF (rotmat[3][3] < 0.0) THEN IF (ra <= 0.0) THEN ra := ra + PI; ELSE ra := ra - PI; END_IF; END_IF; s_y := SIN(ya); c_y := COS(ya); s_r := SIN(ra); c_r := COS(ra); IF ((ABS(s_y) > ABS(c_y)) AND (ABS(s_y) > ABS(s_r)) AND (ABS(s_y) > ABS( c_r))) THEN cm1 := - rotmat[1][2] / s_y; ELSE IF ((ABS(c_y) > ABS(s_r)) AND (ABS(c_y) > ABS(c_r))) THEN cm1 := rotmat[1][1] / c_y; ELSE IF (ABS(s_r) > ABS(c_r)) THEN cm1 := - rotmat[2][3] / s_r; ELSE cm1 := rotmat[3][3] / c_r; END_IF; END_IF; END_IF; pa := ATAN(rotmat[1][3],cm1); END; END_IF; ya := ya * ucf; pa := pa * ucf; ra := ra * ucf; RETURN ([ya,pa,ra]); END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION coordinated_pair_link_representation(link : kinematic_link; pair_placement : rigid_placement ) : BOOLEAN; LOCAL link_rep : kinematic_link_representation; END_LOCAL; link_rep := representation_of_link(link); IF (link_rep = ?) THEN RETURN (FALSE); ELSE IF NOT (pair_placement IN link_rep\representation.items) THEN RETURN (FALSE); ELSE RETURN (TRUE); END_IF; END_IF; END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION cross_product(arg1,arg2 : direction) : vector; LOCAL mag : REAL; res : direction; v1,v2 : LIST[3:3] OF REAL; result : vector; END_LOCAL; IF (NOT EXISTS(arg1) OR (arg1.dim = 2)) OR (NOT EXISTS(arg2) OR (arg2.dim = 2)) THEN RETURN (?); ELSE BEGIN v1 := normalise(arg1).direction_ratios; v2 := normalise(arg2).direction_ratios; res := dummy_gri || direction([(v1[2] * v2[3] - v1[3] * v2[2]), (v1[3] * v2[1] - v1[1] * v2[3]), (v1[1] * v2[2] - v1[2] * v2[1])]); mag := 0.0; REPEAT i := 1 TO 3; mag := mag + res.direction_ratios[i] * res.direction_ratios[i]; END_REPEAT; IF (mag > 0.0) THEN result := dummy_gri || vector(res,SQRT(mag)); ELSE result := dummy_gri || vector(arg1,0.0); END_IF; RETURN (result); END; END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION curve_weights_positive(b : rational_b_spline_curve) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.upper_index_on_control_points; IF b.weights[i] <= 0.0 THEN result := FALSE; RETURN (result); END_IF; END_REPEAT; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION default_tolerance_table_cell_wr2(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF SIZEOF(agg) <= 5 THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION default_tolerance_table_cell_wr3(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(QUERY(i <* agg | (( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\ representation_item.name = ''significant number of digits'')))) = 1) OR (( SIZEOF(QUERY(i <* agg | ((''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\representation_item.name = ''lower limit'')))) = 1) AND (SIZEOF(QUERY(i <* agg | (( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\ representation_item.name = ''upper limit'')))) = 1)) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION default_tolerance_table_cell_wr4(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(QUERY(i <* agg | (( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\ representation_item.name = ''plus minus tolerance value'')))) = 1) OR (( SIZEOF(QUERY(i <* agg | ((''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\representation_item.name = ''lower tolerance value'') ))) = 1) AND (SIZEOF(QUERY(i <* agg | (( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\ representation_item.name = ''upper tolerance value'')))) = 1)) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION default_tolerance_table_cell_wr5(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(QUERY(i <* agg | ( ''AUTOMOTIVE_DESIGN.DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF(i)))) <= 1) AND (SIZEOF(QUERY(i <* agg | ( ''AUTOMOTIVE_DESIGN.DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF(i)))) = SIZEOF(QUERY(i <* agg | (( ''AUTOMOTIVE_DESIGN.DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND (i\ representation_item.name = ''cell description''))))) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION derive_dimensional_exponents(x : unit) : dimensional_exponents; LOCAL result : dimensional_exponents := dimensional_exponents(0.0,0.0,0.0,0.0,0.0, 0.0,0.0); END_LOCAL; IF ''AUTOMOTIVE_DESIGN.DERIVED_UNIT'' IN TYPEOF(x) THEN REPEAT i := LOINDEX(x.elements) TO HIINDEX(x.elements); result.length_exponent := result.length_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.length_exponent); result.mass_exponent := result.mass_exponent + (x.elements[i].exponent * x .elements[i].unit.dimensions.mass_exponent); result.time_exponent := result.time_exponent + (x.elements[i].exponent * x .elements[i].unit.dimensions.time_exponent); result.electric_current_exponent := result.electric_current_exponent + (x.elements[i].exponent * x.elements[i]. unit.dimensions. electric_current_exponent); result.thermodynamic_temperature_exponent := result. thermodynamic_temperature_exponent + (x.elements[i].exponent * x.elements[ i].unit.dimensions. thermodynamic_temperature_exponent); result.amount_of_substance_exponent := result.amount_of_substance_exponent + (x.elements[i].exponent * x. elements[i].unit.dimensions. amount_of_substance_exponent); result.luminous_intensity_exponent := result.luminous_intensity_exponent + (x.elements[i].exponent * x. elements[i].unit.dimensions. luminous_intensity_exponent); END_REPEAT; -- x is a unitless or a named unit ELSE result := x.dimensions; END_IF; RETURN (result); END_FUNCTION; -- 10303-41: measure_schema FUNCTION dimension_of(item : geometric_representation_item) : dimension_count; LOCAL x : SET OF representation; y : representation_context; dim : dimension_count; END_LOCAL; -- For cartesian_point, direction, or vector dimension is determined by -- counting components. IF ''AUTOMOTIVE_DESIGN.CARTESIAN_POINT'' IN TYPEOF(item) THEN dim := SIZEOF(item\cartesian_point.coordinates); RETURN (dim); END_IF; IF ''AUTOMOTIVE_DESIGN.DIRECTION'' IN TYPEOF(item) THEN dim := SIZEOF(item\direction.direction_ratios); RETURN (dim); END_IF; IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(item) THEN dim := SIZEOF(item\vector.orientation\direction.direction_ratios); RETURN (dim); END_IF; -- For all other types of geometric_representation_item dim is obtained -- via context. -- Find the set of representation in which the item is used. x := using_representations(item); -- Determines the dimension_count of the -- geometric_representation_context. Note that the -- RULE compatible_dimension ensures that the context_of_items -- is of type geometric_representation_context and has -- the same dimension_count for all values of x. -- The SET x is non-empty since this is required by WR1 of -- representation_item. y := x[1].context_of_items; dim := y\geometric_representation_context.coordinate_space_dimension; RETURN (dim); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION dimensions_for_si_unit(n : si_unit_name) : dimensional_exponents; CASE n OF metre : RETURN (dimensional_exponents(1.0,0.0,0.0,0.0,0.0,0.0,0.0)); gram : RETURN (dimensional_exponents(0.0,1.0,0.0,0.0,0.0,0.0,0.0)); second : RETURN (dimensional_exponents(0.0,0.0,1.0,0.0,0.0,0.0,0.0)); ampere : RETURN (dimensional_exponents(0.0,0.0,0.0,1.0,0.0,0.0,0.0)); kelvin : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,1.0,0.0,0.0)); mole : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,0.0,1.0,0.0)); candela : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,1.0)); radian : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0)); steradian : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0)); hertz : RETURN (dimensional_exponents(0.0,0.0,- 1.0,0.0,0.0,0.0,0.0)); newton : RETURN (dimensional_exponents(1.0,1.0,- 2.0,0.0,0.0,0.0,0.0)); pascal : RETURN (dimensional_exponents(- 1.0,1.0,- 2.0,0.0,0.0,0.0,0.0)); joule : RETURN (dimensional_exponents(2.0,1.0,- 2.0,0.0,0.0,0.0,0.0)); watt : RETURN (dimensional_exponents(2.0,1.0,- 3.0,0.0,0.0,0.0,0.0)); coulomb : RETURN (dimensional_exponents(0.0,0.0,1.0,1.0,0.0,0.0,0.0)); volt : RETURN (dimensional_exponents(2.0,1.0,- 3.0,- 1.0,0.0,0.0,0.0)); farad : RETURN (dimensional_exponents(- 2.0,- 1.0,4.0,1.0,0.0,0.0,0.0)); ohm : RETURN (dimensional_exponents(2.0,1.0,- 3.0,- 2.0,0.0,0.0,0.0)); siemens : RETURN (dimensional_exponents(- 2.0,- 1.0,3.0,2.0,0.0,0.0,0.0)); weber : RETURN (dimensional_exponents(2.0,1.0,- 2.0,- 1.0,0.0,0.0,0.0)); tesla : RETURN (dimensional_exponents(0.0,1.0,- 2.0,- 1.0,0.0,0.0,0.0)); henry : RETURN (dimensional_exponents(2.0,1.0,- 2.0,- 2.0,0.0,0.0,0.0)); degree_celsius : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,1.0,0.0,0.0)); lumen : RETURN (dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,1.0)); lux : RETURN (dimensional_exponents(- 2.0,0.0,0.0,0.0,0.0,0.0,1.0)); becquerel : RETURN (dimensional_exponents(0.0,0.0,- 1.0,0.0,0.0,0.0,0.0)); gray : RETURN (dimensional_exponents(2.0,0.0,- 2.0,0.0,0.0,0.0,0.0)); sievert : RETURN (dimensional_exponents(2.0,0.0,- 2.0,0.0,0.0,0.0,0.0)); OTHERWISE: RETURN(?); END_CASE; END_FUNCTION; -- 10303-41: measure_schema FUNCTION dot_product(arg1,arg2 : direction) : REAL; LOCAL scalar : REAL; vec1,vec2 : direction; ndim : INTEGER; END_LOCAL; IF NOT EXISTS(arg1) OR NOT EXISTS(arg2) THEN scalar := ?; ELSE IF (arg1.dim <> arg2.dim) THEN scalar := ?; ELSE BEGIN vec1 := normalise(arg1); vec2 := normalise(arg2); ndim := arg1.dim; scalar := 0.0; REPEAT i := 1 TO ndim; scalar := scalar + vec1.direction_ratios[i] * vec2.direction_ratios[i]; END_REPEAT; END; END_IF; END_IF; RETURN (scalar); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION edge_reversed(an_edge : edge) : oriented_edge; LOCAL the_reverse : oriented_edge; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.ORIENTED_EDGE'' IN TYPEOF(an_edge)) THEN the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge\oriented_edge.edge_element,NOT ( an_edge\oriented_edge.orientation)); ELSE the_reverse := dummy_tri || edge(an_edge.edge_end, an_edge.edge_start) || oriented_edge(an_edge,FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION face_bound_reversed(a_face_bound : face_bound) : face_bound; LOCAL the_reverse : face_bound; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.FACE_OUTER_BOUND'' IN TYPEOF(a_face_bound)) THEN the_reverse := dummy_tri || face_bound(a_face_bound\face_bound.bound, NOT (a_face_bound\face_bound.orientation)) || face_outer_bound(); ELSE the_reverse := dummy_tri || face_bound(a_face_bound.bound, NOT (a_face_bound.orientation)); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION face_reversed(a_face : face) : oriented_face; LOCAL the_reverse : oriented_face; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.ORIENTED_FACE'' IN TYPEOF(a_face)) THEN the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face\oriented_face.face_element, NOT (a_face\oriented_face.orientation)); ELSE the_reverse := dummy_tri || face(set_of_topology_reversed(a_face.bounds)) || oriented_face(a_face,FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION first_proj_axis(z_axis,arg : direction) : direction; LOCAL x_axis : direction; v : direction; z : direction; x_vec : vector; END_LOCAL; IF (NOT EXISTS(z_axis)) THEN RETURN (?); ELSE z := normalise(z_axis); IF NOT EXISTS(arg) THEN IF (z.direction_ratios <> [1.0,0.0,0.0]) THEN v := dummy_gri || direction([1.0,0.0,0.0]); ELSE v := dummy_gri || direction([0.0,1.0,0.0]); END_IF; ELSE IF (arg.dim <> 3) THEN RETURN (?); END_IF; IF ((cross_product(arg,z).magnitude) = 0.0) THEN RETURN (?); ELSE v := normalise(arg); END_IF; END_IF; x_vec := scalar_times_vector(dot_product(v,z),z); x_axis := vector_difference(v,x_vec).orientation; x_axis := normalise(x_axis); END_IF; RETURN (x_axis); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION frame_associated_to_background(frame : rigid_placement;background : kinematic_frame_background) : BOOLEAN; LOCAL rep_bag : BAG OF kinematic_frame_background_representation; trf_bag : BAG OF kinematic_frame_based_transformation; trm_bag : BAG OF kinematic_frame_based_transformation; ass_bag : BAG OF kinematic_frame_background_representation_association; rep : kinematic_frame_background_representation; ass : kinematic_frame_background_representation_association; END_LOCAL; rep_bag := QUERY(bg <* USEDIN(background, ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION.ITEMS'') | ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_FRAME_BACKGROUND_REPRESENTATION'' IN TYPEOF(bg)); IF SIZEOF(rep_bag) = 0 THEN RETURN (FALSE); END_IF; trf_bag := USEDIN(frame,''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_FRAME_BASED_TRANSFORMATION.'' + ''TRANSFORMATOR''); IF SIZEOF(trf_bag) = 0 THEN RETURN (FALSE); END_IF; REPEAT i := 1 TO HIINDEX(rep_bag); rep := rep_bag[i]; ass_bag := QUERY(kfbra <* USEDIN(rep,''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_RELATIONSHIP.REP_2'') | ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_FRAME_BACKGROUND_REPRESENTATION_ASSOCIATION'' IN TYPEOF(kfbra)); IF SIZEOF(ass_bag) > 0 THEN REPEAT j := 1 TO HIINDEX(ass_bag); ass := ass_bag[j]; trm_bag := QUERY(trm <* trf_bag | (trm :=: ass\ representation_relationship_with_transformation. transformation_operator)); IF SIZEOF(trm_bag) > 0 THEN RETURN (TRUE); END_IF; END_REPEAT; END_IF; END_REPEAT; RETURN (FALSE); END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION gbsf_check_curve(cv : representation_item) : BOOLEAN; IF SIZEOF([''AUTOMOTIVE_DESIGN.BOUNDED_CURVE'', ''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'', ''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D''] * TYPEOF(cv)) > 1 THEN RETURN (FALSE); END_IF; IF SIZEOF([''AUTOMOTIVE_DESIGN.CIRCLE'', ''AUTOMOTIVE_DESIGN.ELLIPSE'', ''AUTOMOTIVE_DESIGN.TRIMMED_CURVE''] * TYPEOF(cv)) = 1 THEN RETURN (TRUE); ELSE IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'' IN TYPEOF(cv)) AND (cv\ b_spline_curve.self_intersect = FALSE) OR (cv\b_spline_curve. self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF ((''AUTOMOTIVE_DESIGN.COMPOSITE_CURVE'' IN TYPEOF(cv)) AND (cv\ composite_curve.self_intersect = FALSE) OR (cv\composite_curve. self_intersect = UNKNOWN)) THEN RETURN (SIZEOF(QUERY(seg <* cv\composite_curve.segments | NOT (gbsf_check_curve(seg.parent_curve)))) = 0); ELSE IF ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'' IN TYPEOF(cv) THEN RETURN (gbsf_check_curve(cv\curve_replica.parent_curve)); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D'' IN TYPEOF(cv)) AND ((cv\ offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d. self_intersect = UNKNOWN)) AND (NOT (''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv\offset_curve_3d.basis_curve)))) THEN RETURN (gbsf_check_curve(cv\offset_curve_3d.basis_curve)); ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv) THEN RETURN ((gbsf_check_curve(cv\pcurve.reference_to_curve\ representation.items[1])) AND (gbsf_check_surface(cv\pcurve. basis_surface))); ELSE IF ''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv) THEN IF (SIZEOF(cv\polyline.points) >= 3) THEN RETURN (TRUE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_CURVE'' IN TYPEOF(cv) THEN IF gbsf_check_curve(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF(cv\surface_curve. associated_geometry); IF ''AUTOMOTIVE_DESIGN.SURFACE'' IN TYPEOF(cv\surface_curve. associated_geometry[i]) THEN IF NOT gbsf_check_surface(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv\surface_curve .associated_geometry[i]) THEN IF NOT gbsf_check_curve(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-507: aic_geometrically_bounded_surface FUNCTION gbsf_check_point(pnt : point) : BOOLEAN; IF ''AUTOMOTIVE_DESIGN.CARTESIAN_POINT'' IN TYPEOF(pnt) THEN RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.POINT_ON_CURVE'' IN TYPEOF(pnt) THEN RETURN (gbsf_check_curve(pnt\point_on_curve.basis_curve)); ELSE IF ''AUTOMOTIVE_DESIGN.POINT_ON_SURFACE'' IN TYPEOF(pnt) THEN RETURN (gbsf_check_surface(pnt\point_on_surface.basis_surface)); ELSE IF ''AUTOMOTIVE_DESIGN.DEGENERATE_PCURVE'' IN TYPEOF(pnt) THEN RETURN ((gbsf_check_curve(pnt\degenerate_pcurve .reference_to_curve\ representation.items[1])) AND (gbsf_check_surface(pnt\ degenerate_pcurve.basis_surface))); END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-507: aic_geometrically_bounded_surface FUNCTION gbsf_check_surface(sf : surface) : BOOLEAN; IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_SURFACE'' IN TYPEOF(sf)) AND (sf\ b_spline_surface.self_intersect = FALSE) OR (sf\b_spline_surface. self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF SIZEOF([''AUTOMOTIVE_DESIGN.SPHERICAL_SURFACE'', ''AUTOMOTIVE_DESIGN.TOROIDAL_SURFACE'', ''AUTOMOTIVE_DESIGN.CURVE_BOUNDED_SURFACE'', ''AUTOMOTIVE_DESIGN.RECTANGULAR_TRIMMED_SURFACE''] * TYPEOF(sf)) = 1 THEN RETURN (TRUE); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_SURFACE'' IN TYPEOF(sf)) AND (sf\ offset_surface.self_intersect = FALSE) OR (sf\offset_surface. self_intersect = UNKNOWN)) THEN RETURN (gbsf_check_surface(sf\offset_surface.basis_surface)); ELSE IF ''AUTOMOTIVE_DESIGN.RECTANGULAR_COMPOSITE_SURFACE'' IN TYPEOF(sf) THEN REPEAT i := 1 TO SIZEOF (sf\rectangular_composite_surface.segments); REPEAT j := 1 TO SIZEOF (sf\rectangular_composite_surface.segments[i] ); IF NOT (gbsf_check_surface(sf\rectangular_composite_surface. segments[i][j].parent_surface)) THEN RETURN (FALSE); END_IF; END_REPEAT; END_REPEAT; RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_REPLICA'' IN TYPEOF(sf) THEN RETURN (gbsf_check_surface(sf\surface_replica.parent_surface)); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_OF_REVOLUTION'' IN TYPEOF(sf) THEN RETURN (gbsf_check_curve(sf\swept_surface.swept_curve)); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-507: aic_geometrically_bounded_surface FUNCTION get_basis_surface(c : curve_on_surface) : SET[0:2] OF surface; LOCAL surfs : SET[0:2] OF surface; n : INTEGER; END_LOCAL; surfs := []; IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(c) THEN surfs := [c\pcurve.basis_surface]; ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_CURVE'' IN TYPEOF(c) THEN n := SIZEOF(c\surface_curve.associated_geometry); REPEAT i := 1 TO n; surfs := surfs + associated_surface(c\surface_curve .associated_geometry[ i]); END_REPEAT; END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.COMPOSITE_CURVE_ON_SURFACE'' IN TYPEOF(c) THEN n := SIZEOF(c\composite_curve.segments); surfs := get_basis_surface(c\composite_curve.segments[1].parent_curve); IF n > 1 THEN REPEAT i := 2 TO n; surfs := surfs * get_basis_surface(c\composite_curve.segments[i]. parent_curve); END_REPEAT; END_IF; END_IF; RETURN (surfs); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION get_description_value(obj : description_attribute_select) : text; LOCAL description_bag : BAG OF description_attribute := (USEDIN(obj, ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTION_ATTRIBUTE.'' + ''DESCRIBED_ITEM'')); END_LOCAL; IF SIZEOF(description_bag) = 1 THEN RETURN (description_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; -- 10303-41: basic_attribute_schema FUNCTION get_diameter_for_round_hole(rh : round_hole) : REAL; LOCAL sa_set : SET OF shape_aspect; sar_set : SET OF shape_aspect_relationship; pdr_set : SET OF property_definition_representation; ri_set : SET OF representation_item; END_LOCAL; sa_set := get_shape_aspects(rh); REPEAT i := 1 TO HIINDEX(sa_set); IF (sa_set[i].description = ''diameter occurrence'') THEN sar_set := bag_to_set(USEDIN(sa_set[i],''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT'')); REPEAT j := 1 TO HIINDEX(sar_set); IF ((sar_set[j].name = ''diameter'') AND (sar_set[j].description = ''profile usage'') AND (''AUTOMOTIVE_DESIGN.SHAPE_DEFINING_RELATIONSHIP'' IN TYPEOF(sar_set[j])) AND ( ''AUTOMOTIVE_DESIGN.CIRCULAR_CLOSED_PROFILE'' IN TYPEOF(sar_set[j]. relating_shape_aspect))) THEN pdr_set := get_shape_aspect_property_definition_representations(sar_set [j].relating_shape_aspect); REPEAT k := 1 TO HIINDEX(pdr_set); IF (''AUTOMOTIVE_DESIGN.SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF (pdr_set[k].used_representation)) THEN ri_set := pdr_set[k].used_representation.items; REPEAT l := 1 TO HIINDEX(ri_set); IF ((''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(ri_set[l])) AND (''AUTOMOTIVE_DESIGN.LENGTH_MEASURE_WITH_UNIT'' IN TYPEOF(ri_set[l]))) THEN RETURN (ri_set[l]\measure_with_unit.value_component); END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; END_REPEAT; RETURN (?); END_FUNCTION; -- 10303-214: automotive_design FUNCTION get_id_value(obj : id_attribute_select) : identifier; LOCAL id_bag : BAG OF id_attribute := (USEDIN(obj,''AUTOMOTIVE_DESIGN.'' + ''ID_ATTRIBUTE.'' + ''IDENTIFIED_ITEM'')); END_LOCAL; IF SIZEOF(id_bag) = 1 THEN RETURN (id_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; -- 10303-41: basic_attribute_schema FUNCTION get_multi_language(x : attribute_value_assignment) : label; LOCAL alas : BAG OF attribute_language_assignment := USEDIN(x,''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.ITEMS''); -- note: sizeof(alas) has to be 1 due to -- multi_language_attribute_assignment.wr2 END_LOCAL; IF SIZEOF(alas) > 0 THEN RETURN (alas[1].language); END_IF; RETURN (?); END_FUNCTION; -- 10303-214: automotive_design FUNCTION get_name_value(obj : name_attribute_select) : label; LOCAL name_bag : BAG OF name_attribute := (USEDIN(obj,''AUTOMOTIVE_DESIGN.'' + ''NAME_ATTRIBUTE.'' + ''NAMED_ITEM'')); END_LOCAL; IF SIZEOF(name_bag) = 1 THEN RETURN (name_bag[1].attribute_value); ELSE RETURN (?); END_IF; END_FUNCTION; -- 10303-41: basic_attribute_schema FUNCTION get_property_definition_representations (c_def_instance : characterized_definition) : SET OF property_definition_representation; LOCAL pd_set : SET OF property_definition := []; pdr_set : SET OF property_definition_representation := []; END_LOCAL; pd_set := bag_to_set(USEDIN(c_def_instance, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')); IF (SIZEOF(pd_set) < 1) THEN RETURN (pdr_set); END_IF; REPEAT i := 1 TO HIINDEX(pd_set); pdr_set := pdr_set + bag_to_set(USEDIN(pd_set[i], ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'')); END_REPEAT; RETURN (pdr_set); END_FUNCTION; -- 10303-41: product_property_representation_schema FUNCTION get_role(obj : role_select) : object_role; LOCAL role_bag : BAG OF role_association := (USEDIN(obj,''AUTOMOTIVE_DESIGN.'' + ''ROLE_ASSOCIATION.'' + ''ITEM_WITH_ROLE'')); END_LOCAL; IF SIZEOF(role_bag) = 1 THEN RETURN (role_bag[1].role); ELSE RETURN (?); END_IF; END_FUNCTION; -- 10303-41: basic_attribute_schema FUNCTION get_round_holes_for_composite_hole (sar_instance_set : SET OF shape_aspect_relationship) : SET OF round_hole; LOCAL rh_set : SET OF round_hole := []; pdr_set : SET OF property_definition_representation; pdr_set1 : SET OF property_definition_representation; ri_set : SET OF representation_item; END_LOCAL; REPEAT i := 1 TO HIINDEX(sar_instance_set); IF (SIZEOF ([''AUTOMOTIVE_DESIGN.INSTANCED_FEATURE'' , ''AUTOMOTIVE_DESIGN.ROUND_HOLE''] * TYPEOF (sar_instance_set[i].related_shape_aspect)) >= 2) THEN rh_set := rh_set + sar_instance_set[i].related_shape_aspect; END_IF; IF (''AUTOMOTIVE_DESIGN.PLACED_FEATURE'' IN TYPEOF(sar_instance_set[i])) THEN pdr_set := get_shape_aspect_property_definition_representations( sar_instance_set[i].related_shape_aspect); REPEAT j := 1 TO HIINDEX(pdr_set); IF ((pdr_set[j].used_representation.name = ''feature definition placement'' ) AND (''AUTOMOTIVE_DESIGN.SHAPE_REPRESENTATION'' IN TYPEOF(pdr_set[j]. used_representation))) THEN ri_set := pdr_set[j].used_representation.items; REPEAT k := 1 TO HIINDEX(ri_set); IF ((''AUTOMOTIVE_DESIGN.MAPPED_ITEM'' IN TYPEOF(ri_set[k])) AND ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION_WITH_PARAMETERS'' IN TYPEOF (ri_set[k]\mapped_item.mapping_source.mapped_representation))) THEN pdr_set1 := bag_to_set(USEDIN(ri_set[k]\ mapped_item.mapping_source.mapped_representation, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'')); REPEAT l := 1 TO HIINDEX(pdr_set1); IF (''AUTOMOTIVE_DESIGN.ROUND_HOLE'' IN TYPEOF(pdr_set1[l].definition .definition)) THEN rh_set := rh_set + pdr_set1[l].definition.definition; END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; END_REPEAT; END_IF; END_REPEAT; RETURN (rh_set); END_FUNCTION; -- 10303-214: automotive_design FUNCTION get_shape_aspect_property_definition_representations (s_a_instance : shape_aspect) : SET OF property_definition_representation; LOCAL pd_set : SET OF property_definition := []; pdr_set : SET OF property_definition_representation := []; END_LOCAL; pd_set := bag_to_set(USEDIN(s_a_instance, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'')); IF (SIZEOF(pd_set) < 1) THEN RETURN (pdr_set); END_IF; REPEAT i := 1 TO HIINDEX(pd_set); pdr_set := pdr_set + (QUERY(pdr <* USEDIN(pd_set[i], ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'') | ''AUTOMOTIVE_DESIGN.SHAPE_DEFINITION_REPRESENTATION'' IN TYPEOF(pdr))); END_REPEAT; RETURN (pdr_set); END_FUNCTION; -- 10303-214: automotive_design FUNCTION get_shape_aspects(c_def_instance : characterized_definition) : SET OF shape_aspect; LOCAL pd_set : SET OF product_definition_shape := []; pdr_set : SET OF shape_aspect := []; END_LOCAL; pd_set := bag_to_set(QUERY(pd <* USEDIN(c_def_instance, ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'') | ''AUTOMOTIVE_DESIGN.PRODUCT_DEFINITION_SHAPE'' IN TYPEOF(pd))); IF (SIZEOF(pd_set) < 1) THEN RETURN (pdr_set); END_IF; REPEAT i := 1 TO HIINDEX(pd_set); pdr_set := pdr_set + bag_to_set(USEDIN(pd_set[i], ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT.OF_SHAPE'')); END_REPEAT; RETURN (pdr_set); END_FUNCTION; -- 10303-41: product_property_definition_schema FUNCTION is_acyclic(arg : generic_expression) : BOOLEAN; RETURN (acyclic(arg,[])); END_FUNCTION; -- 13584-20: generic_expressions_schema FUNCTION is_int_expr(arg : numeric_expression) : BOOLEAN; LOCAL i : INTEGER; END_LOCAL; IF ''AUTOMOTIVE_DESIGN.INT_LITERAL'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.REAL_LITERAL'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.INT_NUMERIC_VARIABLE'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.REAL_NUMERIC_VARIABLE'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.ABS_FUNCTION'' IN TYPEOF(arg) THEN RETURN (is_int_expr(arg\unary_numeric_expression.operand)); END_IF; IF ''AUTOMOTIVE_DESIGN.MINUS_FUNCTION'' IN TYPEOF(arg) THEN RETURN (is_int_expr(arg\unary_numeric_expression.operand)); END_IF; IF (''AUTOMOTIVE_DESIGN.SIN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COS_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.TAN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ASIN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ACOS_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ATAN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.EXP_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG2_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG10_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.SQUARE_ROOT_FUNCTION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF (''AUTOMOTIVE_DESIGN.PLUS_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MULT_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MAXIMUM_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MINIMUM_FUNCTION'' IN TYPEOF(arg)) THEN REPEAT i := 1 TO SIZEOF(arg\ multiple_arity_numeric_expression.operands); IF NOT is_int_expr(arg\ multiple_arity_numeric_expression.operands[i]) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_IF; IF (''AUTOMOTIVE_DESIGN.MINUS_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.POWER_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (is_int_expr(arg\binary_numeric_expression.operands[1]) AND is_int_expr(arg\binary_numeric_expression.operands[2])); END_IF; IF (''AUTOMOTIVE_DESIGN.DIV_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MOD_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.SLASH_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.LENGTH_FUNCTION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.VALUE_FUNCTION'' IN TYPEOF(arg) THEN IF ''AUTOMOTIVE_DESIGN.INT_VALUE_FUNCTION'' IN TYPEOF(arg) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.INTEGER_DEFINED_FUNCTION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.REAL_DEFINED_FUNCTION'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.BOOLEAN_DEFINED_FUNCTION'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.STRING_DEFINED_FUNCTION'' IN TYPEOF(arg) THEN RETURN (FALSE); END_IF; RETURN (FALSE); END_FUNCTION; -- 13584-20: expressions_schema FUNCTION is_sql_mappable(arg : expression) : BOOLEAN; LOCAL i : INTEGER; END_LOCAL; IF ''AUTOMOTIVE_DESIGN.SIMPLE_NUMERIC_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.SQL_MAPPABLE_DEFINED_FUNCTION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.MINUS_FUNCTION'' IN TYPEOF(arg) THEN RETURN (is_sql_mappable(arg\unary_numeric_expression.operand)); END_IF; IF (''AUTOMOTIVE_DESIGN.ABS_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.SIN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COS_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.TAN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ASIN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ACOS_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.ATAN_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.EXP_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG2_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LOG10_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.SQUARE_ROOT_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.VALUE_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LENGTH_FUNCTION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF (''AUTOMOTIVE_DESIGN.PLUS_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MULT_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MAXIMUM_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MINIMUM_FUNCTION'' IN TYPEOF(arg)) THEN REPEAT i := 1 TO SIZEOF(arg\ multiple_arity_numeric_expression.operands); IF NOT is_sql_mappable(arg\ multiple_arity_numeric_expression.operands[i]) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_IF; IF (''AUTOMOTIVE_DESIGN.MINUS_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.SLASH_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (is_sql_mappable(arg\binary_numeric_expression.operands[1]) AND is_sql_mappable(arg\binary_numeric_expression.operands[2])); END_IF; IF (''AUTOMOTIVE_DESIGN.DIV_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.MOD_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.POWER_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.SIMPLE_BOOLEAN_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.NOT_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (is_sql_mappable(arg\unary_generic_expression.operand)); END_IF; IF (''AUTOMOTIVE_DESIGN.ODD_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.XOR_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF (''AUTOMOTIVE_DESIGN.AND_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.OR_EXPRESSION'' IN TYPEOF(arg)) THEN REPEAT i := 1 TO SIZEOF (arg\multiple_arity_boolean_expression.operands); IF NOT is_sql_mappable (arg\multiple_arity_boolean_expression.operands[i]) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_IF; IF ''AUTOMOTIVE_DESIGN.EQUALS_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (is_sql_mappable(arg\binary_generic_expression.operands[1]) AND is_sql_mappable(arg\binary_generic_expression.operands[2])); END_IF; IF (''AUTOMOTIVE_DESIGN.COMPARISON_EQUAL'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COMPARISON_GREATER'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COMPARISON_GREATER_EQUAL'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COMPARISON_LESS'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COMPARISON_LESS_EQUAL'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.COMPARISON_NOT_EQUAL'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.LIKE_EXPRESSION'' IN TYPEOF(arg)) THEN RETURN (is_sql_mappable(arg\comparison_expression.operands[1]) AND is_sql_mappable(arg\comparison_expression.operands[2])); END_IF; IF ''AUTOMOTIVE_DESIGN.INTERVAL_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (is_sql_mappable(arg\interval_expression.interval_low) AND is_sql_mappable(arg\interval_expression.interval_high) AND is_sql_mappable(arg\interval_expression.interval_item)); END_IF; IF (''AUTOMOTIVE_DESIGN.NUMERIC_DEFINED_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.BOOLEAN_DEFINED_FUNCTION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.STRING_DEFINED_FUNCTION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; IF ''AUTOMOTIVE_DESIGN.SIMPLE_STRING_EXPRESSION'' IN TYPEOF(arg) THEN RETURN (TRUE); END_IF; IF (''AUTOMOTIVE_DESIGN.INDEX_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.SUBSTRING_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.CONCAT_EXPRESSION'' IN TYPEOF(arg)) OR ( ''AUTOMOTIVE_DESIGN.FORMAT_FUNCTION'' IN TYPEOF(arg)) THEN RETURN (FALSE); END_IF; RETURN (FALSE); END_FUNCTION; -- 13584-20: expressions_schema FUNCTION item_correlation(items : SET OF GENERIC;c_items : SET OF STRING) : LOGICAL; LOCAL c_types : SET OF STRING := []; c_hit : INTEGER := 0; END_LOCAL; REPEAT i := 1 TO HIINDEX(c_items); c_types := c_types + [''AUTOMOTIVE_DESIGN.'' + c_items[i]]; END_REPEAT; REPEAT i := 1 TO HIINDEX(items); IF (SIZEOF(c_types * TYPEOF(items[i])) = 1) THEN c_hit := c_hit + 1; END_IF; END_REPEAT; IF (SIZEOF(items) = c_hit) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END_FUNCTION; -- 10303-214: automotive_design FUNCTION item_in_context(item : representation_item;cntxt : representation_context) : BOOLEAN; LOCAL y : BAG OF representation_item; END_LOCAL; -- If there is one or more representation using both the item -- and cntxt return true. IF SIZEOF(USEDIN(item, ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'') * cntxt. representations_in_context) > 0 THEN RETURN (TRUE); -- Determine the bag of representation_items that reference -- item ELSE y := QUERY(z <* USEDIN(item,'''') | ''AUTOMOTIVE_DESIGN.REPRESENTATION_ITEM'' IN TYPEOF(z)); -- Ensure that the bag is not empty IF SIZEOF(y) > 0 THEN REPEAT i := 1 TO HIINDEX(y); IF item_in_context(y[i],cntxt) THEN RETURN (TRUE); END_IF; END_REPEAT; END_IF; END_IF; -- Return false when all possible branches have been checked -- with no success. RETURN (FALSE); END_FUNCTION; -- 10303-43: representation_schema FUNCTION leap_year(year : year_number) : BOOLEAN; IF ((((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0)) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END_FUNCTION; -- 10303-41: date_time_schema FUNCTION list_face_loops(f : face) : LIST[0:?] OF loop; LOCAL loops : LIST[0:?] OF loop := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(f.bounds); loops := loops + (f.bounds[i].bound); END_REPEAT; RETURN (loops); END_FUNCTION; -- 10303-42: topology_schema FUNCTION list_of_topology_reversed (a_list : list_of_reversible_topology_item) : list_of_reversible_topology_item; LOCAL the_reverse : list_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF(a_list); the_reverse := topology_reversed(a_list[i]) + the_reverse; END_REPEAT; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION list_to_array(lis : LIST[0:?] OF GENERIC : t;low,u : INTEGER) : ARRAY OF GENERIC : t; LOCAL n : INTEGER; res : ARRAY[low:u] OF GENERIC : t; END_LOCAL; n := SIZEOF(lis); IF (n <> (u - low + 1)) THEN RETURN (?); ELSE res := [lis[1]: n]; REPEAT i := 2 TO n; res[low + i - 1] := lis[i]; END_REPEAT; RETURN (res); END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION list_to_set(l : LIST[0:?] OF GENERIC : t) : SET OF GENERIC : t; LOCAL s : SET OF GENERIC : t := []; END_LOCAL; REPEAT i := 1 TO SIZEOF(l); s := s + l[i]; END_REPEAT; RETURN (s); END_FUNCTION; -- 10303-42: topology_schema FUNCTION make_array_of_array(lis : LIST[1:?] OF LIST[1:?] OF GENERIC : t;low1,u1,low2,u2 : INTEGER) : ARRAY OF ARRAY OF GENERIC : t; LOCAL res : ARRAY[low1:u1] OF ARRAY[low2:u2] OF GENERIC : t; END_LOCAL; IF (u1 - low1 + 1) <> SIZEOF(lis) THEN RETURN (?); END_IF; IF (u2 - low2 + 1) <> SIZEOF(lis[1]) THEN RETURN (?); END_IF; res := [list_to_array(lis[1],low2,u2): (u1 - low1 + 1)]; REPEAT i := 2 TO HIINDEX(lis); IF (u2 - low2 + 1) <> SIZEOF(lis[i]) THEN RETURN (?); END_IF; res[low1 + i - 1] := list_to_array(lis[i],low2,u2); END_REPEAT; RETURN (res); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION mixed_loop_type_set(l : SET[0:?] OF loop) : LOGICAL; LOCAL poly_loop_type : LOGICAL; END_LOCAL; IF (SIZEOF(l) <= 1) THEN RETURN (FALSE); END_IF; poly_loop_type := (''AUTOMOTIVE_DESIGN.POLY_LOOP'' IN TYPEOF(l[1])); REPEAT i := 2 TO SIZEOF(l); IF ((''AUTOMOTIVE_DESIGN.POLY_LOOP'' IN TYPEOF(l[i])) <> poly_loop_type) THEN RETURN (TRUE); END_IF; END_REPEAT; RETURN (FALSE); END_FUNCTION; -- 10303-42: topology_schema FUNCTION msb_shells(brep : manifold_solid_brep) : SET[1:?] OF closed_shell; IF SIZEOF(QUERY(msbtype <* TYPEOF(brep) | msbtype LIKE ''*BREP_WITH_VOIDS'')) >= 1 THEN RETURN (brep\brep_with_voids.voids + brep.outer); ELSE RETURN ([brep.outer]); END_IF; END_FUNCTION; -- 10303-42: geometric_model_schema FUNCTION msf_curve_check(cv : representation_item) : BOOLEAN; IF SIZEOF([''AUTOMOTIVE_DESIGN.BOUNDED_CURVE'', ''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'', ''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D''] * TYPEOF(cv)) > 1 THEN RETURN (FALSE); END_IF; IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'' IN TYPEOF(cv)) AND (cv\b_spline_curve.self_intersect = FALSE) OR (cv\b_spline_curve.self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF SIZEOF([''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.LINE''] * TYPEOF(cv) ) = 1 THEN RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'' IN TYPEOF(cv) THEN RETURN (msf_curve_check(cv\curve_replica.parent_curve)); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D'' IN TYPEOF(cv)) AND ((cv\ offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d. self_intersect = UNKNOWN)) AND (NOT (''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv\offset_curve_3d.basis_curve)))) THEN RETURN (msf_curve_check(cv\offset_curve_3d.basis_curve)); ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv) THEN RETURN ((msf_curve_check(cv\pcurve.reference_to_curve\ representation.items[1])) AND (msf_surface_check(cv\pcurve. basis_surface))); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_CURVE'' IN TYPEOF(cv) THEN IF msf_curve_check(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF (cv\surface_curve.associated_geometry); IF ''AUTOMOTIVE_DESIGN.SURFACE'' IN TYPEOF(cv\surface_curve. associated_geometry[i]) THEN IF NOT msf_surface_check(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv\surface_curve. associated_geometry[i]) THEN IF NOT msf_curve_check(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN (TRUE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv) THEN IF (SIZEOF(cv\polyline.points) >= 3) THEN RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-509: aic_manifold_surface FUNCTION msf_surface_check(surf : surface) : BOOLEAN; IF ''AUTOMOTIVE_DESIGN.ELEMENTARY_SURFACE'' IN TYPEOF(surf) THEN RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.SWEPT_SURFACE'' IN TYPEOF(surf) THEN RETURN (msf_curve_check(surf\swept_surface.swept_curve)); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_SURFACE'' IN TYPEOF(surf)) AND (surf\ offset_surface.self_intersect = FALSE) OR (surf\offset_surface. self_intersect = UNKNOWN)) THEN RETURN (msf_surface_check(surf\offset_surface.basis_surface)); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_REPLICA'' IN TYPEOF(surf) THEN RETURN (msf_surface_check(surf\surface_replica.parent_surface)); ELSE IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_SURFACE'' IN TYPEOF(surf)) AND (surf\ b_spline_surface.self_intersect = FALSE) OR (surf\b_spline_surface.self_intersect = UNKNOWN)) THEN RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-509: aic_manifold_surface FUNCTION nmsf_curve_check(cv : representation_item) : BOOLEAN; IF SIZEOF([''AUTOMOTIVE_DESIGN.BOUNDED_CURVE'', ''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'', ''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D''] * TYPEOF(cv)) > 1 THEN RETURN (FALSE); ELSE IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'' IN TYPEOF(cv)) AND (cv\ b_spline_curve.self_intersect = FALSE) OR (cv\b_spline_curve. self_intersect = UNKNOWN)) THEN RETURN (TRUE); ELSE IF SIZEOF([''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.LINE''] * TYPEOF( cv)) = 1 THEN RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.CURVE_REPLICA'' IN TYPEOF(cv) THEN RETURN (nmsf_curve_check(cv\curve_replica.parent_curve)); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D'' IN TYPEOF(cv)) AND ((cv\ offset_curve_3d.self_intersect = FALSE) OR (cv\offset_curve_3d. self_intersect = UNKNOWN)) AND (NOT (''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv\offset_curve_3d.basis_curve)))) THEN RETURN (nmsf_curve_check(cv\offset_curve_3d.basis_curve)); ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv) THEN RETURN ((nmsf_curve_check(cv\pcurve.reference_to_curve\ representation.items[1])) AND (nmsf_surface_check(cv\pcurve. basis_surface))); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_CURVE'' IN TYPEOF(cv) THEN IF nmsf_curve_check(cv\surface_curve.curve_3d) THEN REPEAT i := 1 TO SIZEOF (cv\surface_curve.associated_geometry) ; IF ''AUTOMOTIVE_DESIGN.SURFACE'' IN TYPEOF(cv\surface_curve. associated_geometry[i]) THEN IF NOT nmsf_surface_check(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.PCURVE'' IN TYPEOF(cv\surface_curve. associated_geometry[i]) THEN IF NOT nmsf_curve_check(cv\surface_curve. associated_geometry[i]) THEN RETURN (FALSE); END_IF; END_IF; END_IF; END_REPEAT; RETURN (TRUE); END_IF; ELSE IF ''AUTOMOTIVE_DESIGN.POLYLINE'' IN TYPEOF(cv) THEN IF (SIZEOF(cv\polyline.points) >= 3) THEN RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-508: aic_non_manifold_surface FUNCTION nmsf_surface_check(surf : surface) : BOOLEAN; IF ''AUTOMOTIVE_DESIGN.ELEMENTARY_SURFACE'' IN TYPEOF(surf) THEN RETURN (TRUE); ELSE IF ''AUTOMOTIVE_DESIGN.SWEPT_SURFACE'' IN TYPEOF(surf) THEN RETURN (nmsf_curve_check(surf\swept_surface.swept_curve)); ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_SURFACE'' IN TYPEOF(surf)) AND (surf\ offset_surface.self_intersect = FALSE) OR (surf\offset_surface. self_intersect = UNKNOWN)) THEN RETURN (nmsf_surface_check(surf\offset_surface.basis_surface)); ELSE IF ''AUTOMOTIVE_DESIGN.SURFACE_REPLICA'' IN TYPEOF(surf) THEN RETURN (nmsf_surface_check(surf\surface_replica.parent_surface)); ELSE IF ((''AUTOMOTIVE_DESIGN.B_SPLINE_SURFACE'' IN TYPEOF(surf)) AND (surf\ b_spline_surface.self_intersect = FALSE) OR (surf\b_spline_surface.self_intersect = UNKNOWN)) THEN RETURN (TRUE); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-508: aic_non_manifold_surface FUNCTION normalise(arg : vector_or_direction) : vector_or_direction; LOCAL ndim : INTEGER; v : direction; result : vector_or_direction; vec : vector; mag : REAL; END_LOCAL; IF NOT EXISTS(arg) THEN result := ?; ELSE ndim := arg.dim; IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(arg) THEN BEGIN v := dummy_gri || direction(arg.orientation.direction_ratios); IF arg.magnitude = 0.0 THEN RETURN (?); ELSE vec := dummy_gri || vector(v,1.0); END_IF; END; ELSE v := dummy_gri || direction(arg.direction_ratios); END_IF; mag := 0.0; REPEAT i := 1 TO ndim; mag := mag + v.direction_ratios[i] * v.direction_ratios[i]; END_REPEAT; IF mag > 0.0 THEN mag := SQRT(mag); REPEAT i := 1 TO ndim; v.direction_ratios[i] := v.direction_ratios[i] / mag; END_REPEAT; IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(arg) THEN vec.orientation := v; result := vec; ELSE result := v; END_IF; ELSE RETURN (?); END_IF; END_IF; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION open_shell_reversed(a_shell : open_shell) : oriented_open_shell; LOCAL the_reverse : oriented_open_shell; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.ORIENTED_OPEN_SHELL'' IN TYPEOF(a_shell)) THEN the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set.cfs_faces) || open_shell() || oriented_open_shell(a_shell\ oriented_open_shell.open_shell_element,(NOT (a_shell\ oriented_open_shell.orientation))); ELSE the_reverse := dummy_tri || connected_face_set(a_shell\connected_face_set. cfs_faces) || open_shell() || oriented_open_shell(a_shell, FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION orthogonal_complement(vec : direction) : direction; LOCAL result : direction; END_LOCAL; IF (vec.dim <> 2) OR NOT EXISTS(vec) THEN RETURN (?); ELSE result := dummy_gri || direction([- vec.direction_ratios[2],vec. direction_ratios[1]]); RETURN (result); END_IF; END_FUNCTION; -- 10303-42: geometry_schema FUNCTION path_head_to_tail(a_path : path) : BOOLEAN; LOCAL n : INTEGER; p : BOOLEAN := TRUE; END_LOCAL; n := SIZEOF(a_path.edge_list); REPEAT i := 2 TO n; p := p AND (a_path.edge_list[i - 1].edge_end :=: a_path.edge_list[i]. edge_start); END_REPEAT; RETURN (p); END_FUNCTION; -- 10303-42: topology_schema FUNCTION path_reversed(a_path : path) : oriented_path; LOCAL the_reverse : oriented_path; END_LOCAL; IF (''AUTOMOTIVE_DESIGN.ORIENTED_PATH'' IN TYPEOF(a_path)) THEN the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) || oriented_path(a_path\oriented_path.path_element, NOT (a_path\oriented_path.orientation)); ELSE the_reverse := dummy_tri || path(list_of_topology_reversed(a_path.edge_list)) || oriented_path(a_path,FALSE); END_IF; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION plane_angle_for_pair_in_radian(pair : kinematic_pair;angle : plane_angle_measure) : plane_angle_measure; LOCAL converted_angle : plane_angle_measure := angle; link_rep : kinematic_link_representation := representation_of_link(pair. joint.first_link); link_cntxt : representation_context; pa_units : SET OF unit := []; pau : unit; END_LOCAL; link_cntxt := link_rep\representation.context_of_items; IF NOT (''AUTOMOTIVE_DESIGN.GLOBAL_UNIT_ASSIGNED_CONTEXT'' IN TYPEOF(link_cntxt )) THEN RETURN (?); END_IF; pa_units := QUERY(unit <* link_cntxt\global_unit_assigned_context.units | ''AUTOMOTIVE_DESIGN.PLANE_ANGLE_UNIT'' IN TYPEOF(unit)); IF SIZEOF(pa_units) <> 1 THEN RETURN (?); END_IF; pau := pa_units[1]; IF (NOT (''AUTOMOTIVE_DESIGN.SI_UNIT'' IN TYPEOF(pau)) AND NOT ( ''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau))) THEN RETURN (?); END_IF; REPEAT WHILE (''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau)); converted_angle := converted_angle * pau\conversion_based_unit. conversion_factor.value_component; pau := pau\conversion_based_unit.conversion_factor.unit_component; IF ((NOT (''AUTOMOTIVE_DESIGN.SI_UNIT'' IN TYPEOF(pau)) AND NOT ( ''AUTOMOTIVE_DESIGN.CONVERSION_BASED_UNIT'' IN TYPEOF(pau))) OR (NOT ( ''AUTOMOTIVE_DESIGN.PLANE_ANGLE_UNIT'' IN TYPEOF(pau)))) THEN RETURN (?); END_IF; END_REPEAT; IF (pau\si_unit.name <> si_unit_name.radian) THEN RETURN (?); END_IF; CASE pau\si_unit.prefix OF si_prefix.exa : RETURN (1.E18 * converted_angle); si_prefix.peta : RETURN (1.E15 * converted_angle); si_prefix.tera : RETURN (1.E12 * converted_angle); si_prefix.giga : RETURN (1.E9 * converted_angle); si_prefix.mega : RETURN (1.E6 * converted_angle); si_prefix.kilo : RETURN (1.E3 * converted_angle); si_prefix.hecto : RETURN (1.E2 * converted_angle); si_prefix.deca : RETURN (1.E1 * converted_angle); si_prefix.deci : RETURN (1.E-1 * converted_angle); si_prefix.centi : RETURN (1.E-2 * converted_angle); si_prefix.milli : RETURN (1.E-3 * converted_angle); si_prefix.micro : RETURN (1.E-6 * converted_angle); si_prefix.nano : RETURN (1.E-9 * converted_angle); si_prefix.pico : RETURN (1.E-12 * converted_angle); si_prefix.femto : RETURN (1.E-15 * converted_angle); si_prefix.atto : RETURN (1.E-18 * converted_angle); OTHERWISE: RETURN (converted_angle); END_CASE; END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION representation_of_link(link : kinematic_link) : kinematic_link_representation; LOCAL link_rep_rel : BAG OF kinematic_link_representation_relation; END_LOCAL; link_rep_rel := USEDIN(link,''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_LINK_REPRESENTATION_RELATION.'' + ''TOPOLOGICAL_ASPECTS''); IF (SIZEOF(link_rep_rel) = 0) THEN RETURN (?); ELSE RETURN (link_rep_rel[1].geometric_aspects); END_IF; END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION representations_mapped_into(rep : representation) : SET OF representation; LOCAL results : SET OF representation := []; rm : SET OF representation_map; mi : SET OF mapped_item := []; END_LOCAL; -- Find set of representation_maps which specify the representation rm := bag_to_set(USEDIN(rep,''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.MAPPED_REPRESENTATION'')); -- Find the set of mapped_items that use each representation_map REPEAT i := 1 TO HIINDEX(rm); mi := mi + rm[i].map_usage; END_REPEAT; -- Find the set of representations that use each mapped_item REPEAT j := 1 TO HIINDEX(mi); results := results + USEDIN(mi[j],''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION.ITEMS''); END_REPEAT; RETURN (results); END_FUNCTION; -- 10303-520: aic_associative_draughting_elements FUNCTION scalar_times_vector(scalar : REAL; vec : vector_or_direction) : vector; LOCAL v : direction; mag : REAL; result : vector; END_LOCAL; IF NOT EXISTS(scalar) OR NOT EXISTS(vec) THEN RETURN (?); ELSE IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(vec) THEN v := dummy_gri || direction(vec.orientation.direction_ratios); mag := scalar * vec.magnitude; ELSE v := dummy_gri || direction(vec.direction_ratios); mag := scalar; END_IF; IF (mag < 0.0) THEN REPEAT i := 1 TO SIZEOF(v.direction_ratios); v.direction_ratios[i] := - v.direction_ratios[i]; END_REPEAT; mag := - mag; END_IF; result := dummy_gri || vector(normalise(v),mag); END_IF; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION second_proj_axis(z_axis,x_axis,arg : direction) : direction; LOCAL y_axis : vector; v : direction; temp : vector; END_LOCAL; IF NOT EXISTS(arg) THEN v := dummy_gri || direction([0.0,1.0,0.0]); ELSE v := arg; END_IF; temp := scalar_times_vector(dot_product(v,z_axis),z_axis); y_axis := vector_difference(v,temp); temp := scalar_times_vector(dot_product(v,x_axis),x_axis); y_axis := vector_difference(y_axis,temp); y_axis := normalise(y_axis); RETURN (y_axis.orientation); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION set_of_topology_reversed(a_set : set_of_reversible_topology_item) : set_of_reversible_topology_item; LOCAL the_reverse : set_of_reversible_topology_item; END_LOCAL; the_reverse := []; REPEAT i := 1 TO SIZEOF(a_set); the_reverse := the_reverse + topology_reversed(a_set[i]); END_REPEAT; RETURN (the_reverse); END_FUNCTION; -- 10303-42: topology_schema FUNCTION shell_reversed(a_shell : shell) : shell; IF (''AUTOMOTIVE_DESIGN.OPEN_SHELL'' IN TYPEOF(a_shell)) THEN RETURN (open_shell_reversed(a_shell)); ELSE IF (''AUTOMOTIVE_DESIGN.CLOSED_SHELL'' IN TYPEOF(a_shell)) THEN RETURN (closed_shell_reversed(a_shell)); ELSE RETURN (?); END_IF; END_IF; END_FUNCTION; -- 10303-42: topology_schema FUNCTION suitably_based_mechanism(mbp : mechanism_base_placement; mech : mechanism) : BOOLEAN; LOCAL kprop : kinematic_property_definition; kgrep : kinematic_ground_representation; klrep : kinematic_link_representation; klnk : kinematic_link; kjnts : BAG OF kinematic_joint; nmechs : BAG OF mechanism; nmbps : BAG OF mechanism_base_placement; END_LOCAL; kprop := mech.containing_property; IF (''AUTOMOTIVE_DESIGN.KINEMATIC_GROUND_REPRESENTATION'' IN TYPEOF(mbp\representation_relationship.rep_1)) THEN kgrep := mbp\representation_relationship.rep_1; IF (kgrep.property\ property_definition_representation.definition :=: kprop) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; ELSE klrep := mbp\representation_relationship.rep_1; klnk := klrep.link_representation_relation.topological_aspects; kjnts := USEDIN(klnk,''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_JOINT.FIRST_LINK'') + USEDIN(klnk,''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_JOINT.SECOND_LINK''); nmechs := USEDIN(kjnts[1].structure, ''AUTOMOTIVE_DESIGN.MECHANISM.STRUCTURE_DEFINITION''); IF (nmechs[1] :=: mech) THEN RETURN (FALSE); ELSE IF (nmechs[1].containing_property :<>: kprop) THEN RETURN (FALSE); ELSE nmbps := USEDIN(nmechs[1],''AUTOMOTIVE_DESIGN.'' + ''MECHANISM_BASE_PLACEMENT.BASE_OF_MECHANISM''); IF (SIZEOF(nmbps) = 0) THEN RETURN (FALSE); ELSE RETURN (suitably_based_mechanism(nmbps[1],mech)); END_IF; END_IF; END_IF; END_IF; END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION surface_weights_positive(b : rational_b_spline_surface) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.u_upper; REPEAT j := 0 TO b.v_upper; IF (b.weights[i][j] <= 0.0) THEN result := FALSE; RETURN (result); END_IF; END_REPEAT; END_REPEAT; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION topology_reversed(an_item : reversible_topology) : reversible_topology; IF (''AUTOMOTIVE_DESIGN.EDGE'' IN TYPEOF(an_item)) THEN RETURN (edge_reversed(an_item)); END_IF; IF (''AUTOMOTIVE_DESIGN.PATH'' IN TYPEOF(an_item)) THEN RETURN (path_reversed(an_item)); END_IF; IF (''AUTOMOTIVE_DESIGN.FACE_BOUND'' IN TYPEOF(an_item)) THEN RETURN (face_bound_reversed(an_item)); END_IF; IF (''AUTOMOTIVE_DESIGN.FACE'' IN TYPEOF(an_item)) THEN RETURN (face_reversed(an_item)); END_IF; IF (''AUTOMOTIVE_DESIGN.SHELL'' IN TYPEOF(an_item)) THEN RETURN (shell_reversed(an_item)); END_IF; IF (''SET'' IN TYPEOF(an_item)) THEN RETURN (set_of_topology_reversed(an_item)); END_IF; IF (''LIST'' IN TYPEOF(an_item)) THEN RETURN (list_of_topology_reversed(an_item)); END_IF; RETURN (?); END_FUNCTION; -- 10303-42: topology_schema FUNCTION type_check_function(the_type : GENERIC; sub_names : SET OF STRING; criterion : INTEGER) : LOGICAL; --first, check the correctness of function arguments IF ((NOT EXISTS(the_type)) OR (NOT ({0<=criterion<=3})) OR (SIZEOF(sub_names) = 0)) THEN RETURN (UNKNOWN); ELSE CASE criterion OF 0 : RETURN (SIZEOF(sub_names * TYPEOF(the_type)) > 0); 1 : RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 0); 2 : RETURN (SIZEOF(sub_names * TYPEOF(the_type)) = 1); 3 : RETURN (SIZEOF(sub_names * TYPEOF(the_type)) <= 1); END_CASE; END_IF; END_FUNCTION; -- 10303-41: support_resource_schema FUNCTION unique_link_usage(link : kinematic_link) : BOOLEAN; LOCAL mechs : SET OF mechanism; joints : SET OF kinematic_joint; struct : kinematic_structure; END_LOCAL; joints := bag_to_set(USEDIN(link, ''AUTOMOTIVE_DESIGN.KINEMATIC_JOINT.FIRST_LINK'') + USEDIN(link, ''AUTOMOTIVE_DESIGN.KINEMATIC_JOINT.SECOND_LINK'')); struct := joints[1].structure; REPEAT i := 2 TO SIZEOF(joints); IF (joints[i].structure :<>: struct) THEN RETURN (FALSE); END_IF; END_REPEAT; mechs := bag_to_set(USEDIN(struct, ''AUTOMOTIVE_DESIGN.MECHANISM.STRUCTURE_DEFINITION'')); IF (SIZEOF(mechs) <> 1) THEN RETURN (FALSE); END_IF; RETURN (TRUE); END_FUNCTION; -- 10303-105: kinematic_structure_schema FUNCTION using_items(item : founded_item_select;checked_items : SET OF founded_item_select) : SET OF founded_item_select; LOCAL new_check_items : SET OF founded_item_select; result_items : SET OF founded_item_select; next_items : SET OF founded_item_select; END_LOCAL; result_items := []; new_check_items := checked_items + item; -- Find the set of representation_items or founded_items -- in which item is used directly. next_items := QUERY(z <* bag_to_set(USEDIN(item,'''')) | ( ''AUTOMOTIVE_DESIGN.REPRESENTATION_ITEM'' IN TYPEOF(z)) OR (''AUTOMOTIVE_DESIGN.FOUNDED_ITEM'' IN TYPEOF(z))); -- If the set of next_items is not empty; IF SIZEOF(next_items) > 0 THEN REPEAT i := 1 TO HIINDEX(next_items); IF NOT (next_items[i] IN new_check_items) THEN result_items := result_items + next_items[i] + using_items(next_items[i] ,new_check_items); END_IF; END_REPEAT; END_IF; -- return the set of representation_items or founded_items -- in which the input item is used directly and indirectly. RETURN (result_items); END_FUNCTION; -- 10303-43: representation_schema FUNCTION using_representations(item : founded_item_select) : SET OF representation; LOCAL results : SET OF representation; result_bag : BAG OF representation; intermediate_items : SET OF founded_item_select; END_LOCAL; -- Find the representations in which the item is used and add to the -- results set. results := []; result_bag := USEDIN(item,''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS''); IF SIZEOF(result_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(result_bag); results := results + result_bag[i]; END_REPEAT; END_IF; -- Find all representation_items or founded_items -- by which item is referenced directly or indirectly. intermediate_items := using_items(item,[]); -- If the set of intermediate items is not empty; IF SIZEOF(intermediate_items) > 0 THEN REPEAT i := 1 TO HIINDEX(intermediate_items); result_bag := USEDIN(intermediate_items[i], ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS''); IF SIZEOF(result_bag) > 0 THEN REPEAT j := 1 TO HIINDEX(result_bag); results := results + result_bag[j]; END_REPEAT; END_IF; END_REPEAT; END_IF; -- Return the set of representation in which the input item is -- used directly and indirectly (through intervening -- representation_items or founded items). RETURN (results); END_FUNCTION; -- 10303-43: representation_schema FUNCTION valid_basis_curve_in_2d_wireframe(crv : curve) : BOOLEAN; -- check for valid basic curve types IF SIZEOF([''AUTOMOTIVE_DESIGN.POLYLINE'', ''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'', ''AUTOMOTIVE_DESIGN.ELLIPSE'', ''AUTOMOTIVE_DESIGN.CIRCLE''] * TYPEOF(crv)) = 1 THEN RETURN (TRUE); -- if the curve is a trimmed_curve ELSE IF ((''AUTOMOTIVE_DESIGN.TRIMMED_CURVE'') IN TYPEOF(crv)) THEN IF SIZEOF([''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.PARABOLA'', ''AUTOMOTIVE_DESIGN.HYPERBOLA''] * TYPEOF(crv\trimmed_curve.basis_curve) ) = 1 THEN RETURN (TRUE); -- otherwise, recursively check basis_curve ELSE RETURN (valid_basis_curve_in_2d_wireframe(crv\ trimmed_curve.basis_curve)); END_IF; -- recursively check the offset_curve basis curve ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_CURVE_2D'') IN TYPEOF(crv)) THEN RETURN (valid_basis_curve_in_2d_wireframe(crv\offset_curve_2d. basis_curve)); -- recursively check the curve_replica parent curve ELSE IF ((''AUTOMOTIVE_DESIGN.CURVE_REPLICA'') IN TYPEOF(crv)) THEN RETURN (valid_basis_curve_in_2d_wireframe(crv\curve_replica. parent_curve)); -- recursively check the composite_curve segments ELSE IF ((''AUTOMOTIVE_DESIGN.COMPOSITE_CURVE'') IN TYPEOF(crv)) THEN RETURN (SIZEOF(QUERY(ccs <* crv\composite_curve.segments | NOT ( valid_basis_curve_in_2d_wireframe(ccs.parent_curve)))) = 0); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-503: aic_geometrically_bounded_2d_wireframe FUNCTION valid_calendar_date(date : calendar_date) : LOGICAL; CASE date.month_component OF 1 : RETURN ({1<=date.day_component<=31}); 2 : BEGIN IF (leap_year(date.year_component)) THEN RETURN ({1<=date.day_component<=29}); ELSE RETURN ({1<=date.day_component<=28}); END_IF; END; 3 : RETURN ({1<=date.day_component<=31}); 4 : RETURN ({1<=date.day_component<=30}); 5 : RETURN ({1<=date.day_component<=31}); 6 : RETURN ({1<=date.day_component<=30}); 7 : RETURN ({1<=date.day_component<=31}); 8 : RETURN ({1<=date.day_component<=31}); 9 : RETURN ({1<=date.day_component<=30}); 10 : RETURN ({1<=date.day_component<=31}); 11 : RETURN ({1<=date.day_component<=30}); 12 : RETURN ({1<=date.day_component<=31}); END_CASE; RETURN (FALSE); END_FUNCTION; -- 10303-41: date_time_schema FUNCTION valid_geometrically_bounded_wf_curve(crv : curve) : BOOLEAN; -- check for valid basic curve types IF SIZEOF([''AUTOMOTIVE_DESIGN.POLYLINE'', ''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'', ''AUTOMOTIVE_DESIGN.ELLIPSE'', ''AUTOMOTIVE_DESIGN.CIRCLE''] * TYPEOF(crv)) = 1 THEN RETURN (TRUE); -- if the curve is a trimmed_curve ELSE IF ((''AUTOMOTIVE_DESIGN.TRIMMED_CURVE'') IN TYPEOF(crv)) THEN IF SIZEOF([''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.PARABOLA'', ''AUTOMOTIVE_DESIGN.HYPERBOLA''] * TYPEOF(crv\trimmed_curve.basis_curve) ) = 1 THEN RETURN (TRUE); -- otherwise, recursively check basis_curve ELSE RETURN (valid_geometrically_bounded_wf_curve(crv\trimmed_curve. basis_curve)); END_IF; -- recursively check the offset_curve basis curve ELSE IF ((''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D'') IN TYPEOF(crv)) THEN RETURN (valid_geometrically_bounded_wf_curve(crv\offset_curve_3d. basis_curve)); -- recursively check the curve_replica parent curve ELSE IF ((''AUTOMOTIVE_DESIGN.CURVE_REPLICA'') IN TYPEOF(crv)) THEN RETURN (valid_geometrically_bounded_wf_curve(crv\curve_replica. parent_curve)); -- recursively check the composite_curve segments ELSE IF ((''AUTOMOTIVE_DESIGN.COMPOSITE_CURVE'') IN TYPEOF(crv)) THEN RETURN (SIZEOF(QUERY(ccs <* crv\composite_curve.segments | NOT (valid_geometrically_bounded_wf_curve(ccs.parent_curve)))) = 0); END_IF; END_IF; END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-510: aic_geometrically_bounded_wireframe FUNCTION valid_geometrically_bounded_wf_point(pnt : point) : BOOLEAN; -- check for valid basis types IF ((''AUTOMOTIVE_DESIGN.CARTESIAN_POINT'') IN TYPEOF(pnt)) THEN RETURN (TRUE); -- if the input type is a point_on_curve then check for a valid -- geometrically bounded curve type as the basis ELSE IF ((''AUTOMOTIVE_DESIGN.POINT_ON_CURVE'') IN TYPEOF(pnt)) THEN RETURN (valid_geometrically_bounded_wf_curve(pnt\point_on_curve. basis_curve)); -- if the input type is a point_replica check for a valid parent point ELSE IF ((''AUTOMOTIVE_DESIGN.POINT_REPLICA'') IN TYPEOF(pnt)) THEN RETURN (valid_geometrically_bounded_wf_point(pnt\point_replica. parent_pt)); END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-510: aic_geometrically_bounded_wireframe FUNCTION valid_measure_value(m : measure_value) : BOOLEAN; IF (''REAL'' IN TYPEOF(m)) THEN RETURN (m > 0.0); ELSE IF (''INTEGER'' IN TYPEOF(m)) THEN RETURN (m > 0); ELSE RETURN (TRUE); END_IF; END_IF; END_FUNCTION; -- 10303-43: representation_schema FUNCTION valid_time(time : local_time) : BOOLEAN; IF EXISTS(time.second_component) THEN RETURN (EXISTS(time.minute_component)); ELSE RETURN (TRUE); END_IF; END_FUNCTION; -- 10303-41: date_time_schema FUNCTION valid_units(m : measure_with_unit) : BOOLEAN; IF ''AUTOMOTIVE_DESIGN.LENGTH_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.MASS_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( 0.0,1.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.TIME_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,1.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.ELECTRIC_CURRENT_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,1.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.'' + ''THERMODYNAMIC_TEMPERATURE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,1.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.'' + ''CELSIUS_TEMPERATURE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,1.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.'' + ''AMOUNT_OF_SUBSTANCE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents( 0.0,0.0,0.0,0.0,0.0,1.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.LUMINOUS_INTENSITY_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,1.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.PLANE_ANGLE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.SOLID_ANGLE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.AREA_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(2.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.VOLUME_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(3.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.RATIO_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.POSITIVE_LENGTH_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(1.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; IF ''AUTOMOTIVE_DESIGN.POSITIVE_PLANE_ANGLE_MEASURE'' IN TYPEOF(m.value_component) THEN IF derive_dimensional_exponents(m.unit_component) <> dimensional_exponents(0.0,0.0,0.0,0.0,0.0,0.0,0.0) THEN RETURN (FALSE); END_IF; END_IF; RETURN (TRUE); END_FUNCTION; -- 10303-41: measure_schema FUNCTION valid_wireframe_edge_curve(crv : curve) : BOOLEAN; -- check for valid basic curve types IF SIZEOF([''AUTOMOTIVE_DESIGN.LINE'', ''AUTOMOTIVE_DESIGN.CONIC'', ''AUTOMOTIVE_DESIGN.B_SPLINE_CURVE'', ''AUTOMOTIVE_DESIGN.POLYLINE''] * TYPEOF(crv)) = 1 THEN RETURN (TRUE); -- recursively check for valid basic curves for curve_replica ELSE IF (''AUTOMOTIVE_DESIGN.CURVE_REPLICA'') IN TYPEOF(crv) THEN RETURN (valid_wireframe_edge_curve(crv\curve_replica.parent_curve)); -- recursively check for valid basis curves for offset_curve ELSE IF (''AUTOMOTIVE_DESIGN.OFFSET_CURVE_3D'') IN TYPEOF(crv) THEN RETURN (valid_wireframe_edge_curve(crv\ offset_curve_3d.basis_curve)); END_IF; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-501: aic_edge_based_wireframe FUNCTION valid_wireframe_vertex_point(pnt : point) : BOOLEAN; -- check for valid basic point types IF (''AUTOMOTIVE_DESIGN.CARTESIAN_POINT'') IN TYPEOF(pnt) THEN RETURN (TRUE); -- recursively check for valid basic point types as parents for a -- point_replica ELSE IF (''AUTOMOTIVE_DESIGN.POINT_REPLICA'') IN TYPEOF(pnt) THEN RETURN (valid_wireframe_vertex_point(pnt\point_replica.parent_pt)); END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- 10303-501: aic_edge_based_wireframe FUNCTION value_range_aggregate_rep_item(agg : AGGREGATE OF representation_item) : BOOLEAN; FUNCTION cri(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(agg) = 3) AND (SIZEOF(QUERY(i1 <* agg | (''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i1)))) = 3) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design BEGIN IF ((SIZEOF(agg) = 3) AND (SIZEOF(QUERY(i <* agg | ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_REPRESENTATION_ITEM'' IN TYPEOF(i)) AND cri(i\compound_representation_item.item_element))) = 1)) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; FUNCTION value_range_wr1(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(agg) = 2) AND ((SIZEOF(QUERY(i1 <* agg | ( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i1)))) = 2) OR (SIZEOF(QUERY(i2 <* agg | (''AUTOMOTIVE_DESIGN.VALUE_REPRESENTATION_ITEM'' IN TYPEOF(i2)))) = 2)) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION value_range_wr2(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(QUERY(i <* agg | (i.name = ''upper limit''))) = 1) AND (SIZEOF( QUERY(i <* agg | (i.name = ''lower limit''))) = 1) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION value_range_wr3(agg : AGGREGATE OF representation_item) : BOOLEAN; BEGIN IF (SIZEOF(QUERY(i <* agg | (''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i)))) <> 2) OR (SIZEOF(QUERY(i1 <* agg | ( ''AUTOMOTIVE_DESIGN.MEASURE_REPRESENTATION_ITEM'' IN TYPEOF(i1)) AND ( SIZEOF(QUERY(i2 <* agg | ((i1\measure_with_unit.unit_component :=: i2\ measure_with_unit.unit_component) OR (i1\measure_with_unit.unit_component :=: i2\measure_with_unit.unit_component)))) = 2))) = 2) THEN RETURN (TRUE); ELSE RETURN (FALSE); END_IF; END; END_FUNCTION; -- 10303-214: automotive_design FUNCTION vector_difference(arg1,arg2 : vector_or_direction) : vector; LOCAL result : vector; res,vec1,vec2 : direction; mag,mag1,mag2 : REAL; ndim : INTEGER; END_LOCAL; IF ((NOT EXISTS(arg1)) OR (NOT EXISTS(arg2))) OR (arg1.dim <> arg2.dim) THEN RETURN (?); ELSE BEGIN IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(arg1) THEN mag1 := arg1.magnitude; vec1 := arg1.orientation; ELSE mag1 := 1.0; vec1 := arg1; END_IF; IF ''AUTOMOTIVE_DESIGN.VECTOR'' IN TYPEOF(arg2) THEN mag2 := arg2.magnitude; vec2 := arg2.orientation; ELSE mag2 := 1.0; vec2 := arg2; END_IF; vec1 := normalise(vec1); vec2 := normalise(vec2); ndim := SIZEOF(vec1.direction_ratios); mag := 0.0; res := dummy_gri || direction(vec1.direction_ratios); REPEAT i := 1 TO ndim; res.direction_ratios[i] := mag1 * vec1.direction_ratios[i] + mag2 * vec2.direction_ratios[i]; mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]); END_REPEAT; IF (mag > 0.0) THEN result := dummy_gri || vector(res,SQRT(mag)); ELSE result := dummy_gri || vector(vec1,0.0); END_IF; END; END_IF; RETURN (result); END_FUNCTION; -- 10303-42: geometry_schema FUNCTION ypr_index(ypr : ypr_enumeration) : INTEGER; CASE ypr OF yaw : RETURN (1); pitch : RETURN (2); roll : RETURN (3); END_CASE; RETURN (?); END_FUNCTION; -- 10303-105: kinematic_structure_schema RULE application_protocol_definition_required FOR (application_context); WHERE wr1: SIZEOF ( QUERY ( ac <* application_context | ( SIZEOF ( QUERY ( apd <* USEDIN ( ac , ''AUTOMOTIVE_DESIGN.APPLICATION_PROTOCOL_DEFINITION.APPLICATION'' ) | apd.application_interpreted_model_schema_name = ''automotive_design'' ) ) >0 ) ) ) >0; END_RULE; -- 10303-214: automotive_design RULE approval_person_organization_requires_date_time FOR (approval_person_organization); WHERE wr1: SIZEOF ( QUERY ( apo <* approval_person_organization | ( SIZEOF ( QUERY ( u <* USEDIN ( apo , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_DATE_ASSIGNMENT.'' + ''ITEMS'' ) | ( u.role.name = ''sign off'' ) ) ) + SIZEOF ( QUERY ( u <* USEDIN ( apo , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_DATE_AND_TIME_ASSIGNMENT.'' + ''ITEMS'' ) | ( u. role.name = ''sign off'' ) ) ) ) <>1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE approval_requires_approval_assignment FOR (approval); WHERE wr1: SIZEOF ( QUERY ( a <* approval | SIZEOF ( USEDIN ( a , ''AUTOMOTIVE_DESIGN.APPROVAL_ASSIGNMENT.ASSIGNED_APPROVAL'' ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE compatible_dimension FOR (cartesian_point,direction, representation_context, geometric_representation_context); WHERE wr1: SIZEOF ( QUERY ( x <* cartesian_point | SIZEOF ( QUERY ( y <* geometric_representation_context | item_in_context ( x , y ) AND ( HIINDEX ( x.coordinates ) <>y. coordinate_space_dimension ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( x <* direction | SIZEOF ( QUERY ( y <* geometric_representation_context | item_in_context ( x , y ) AND ( HIINDEX ( x.direction_ratios ) <>y. coordinate_space_dimension ) ) ) >0 ) ) = 0; END_RULE; -- 10303-42: geometry_schema RULE complex_product_requires_product_definition FOR (product_definition, product_definition_formation, product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( pdf <* product_definition_formation | ( ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdf.of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc.name = ''functionality'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION.'' + ''FORMATION'' ) | pd.frame_of_reference.name = ''functional definition'' ) ) <>1 ) ) OR ( ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdf.of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name = ''conceptual design'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION.'' + ''FORMATION'' ) | pd. frame_of_reference.name = ''conceptual definition'' ) ) <>1 ) ) OR ( ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdf. of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name = ''alternative solution'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION.'' + ''FORMATION'' ) | pd. frame_of_reference.name = ''alternative definition'' ) ) <>1 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE compound_features_of_equal_type FOR (compound_feature, shape_aspect_relationship); WHERE wr1: SIZEOF ( QUERY ( sar <* shape_aspect_relationship | ( sar.name = ''compound feature ordering'' ) AND ( SIZEOF ( QUERY ( fcr <* USEDIN ( sar.relating_shape_aspect , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'') | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( fcr ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( fcr.relating_shape_aspect ) ) AND ( fcr. relating_shape_aspect.name IN [ ''compound feature in solid'' , ''compound feature in panel'' ] ) ) ) = 0 ) OR ( SIZEOF ( QUERY ( fcr <* USEDIN ( sar. related_shape_aspect , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATED_SHAPE_ASPECT'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' IN TYPEOF ( fcr ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_SHAPE_ASPECT'' IN TYPEOF ( fcr.relating_shape_aspect ) ) AND ( fcr. relating_shape_aspect.name IN [ ''compound feature in solid'' , ''compound feature in panel'' ] ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE consistent_uncertainty FOR (global_uncertainty_assigned_context, qualified_representation_item, uncertainty_assigned_representation); WHERE wr1: ( SIZEOF ( QUERY ( guac <* global_uncertainty_assigned_context | SIZEOF ( QUERY ( u1 <* guac.uncertainty | SIZEOF ( QUERY ( u2 <* guac. uncertainty | u2.name = u1.name ) ) >0 ) ) >0 ) ) = 0 ) OR ( SIZEOF ( global_uncertainty_assigned_context ) = 1 ) ; wr2: SIZEOF ( QUERY ( uar <* uncertainty_assigned_representation | SIZEOF ( QUERY ( u1 <* uar.uncertainty | SIZEOF ( QUERY ( u2 <* uar. uncertainty | u2.name = u1.name ) ) >0 ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( qri <* qualified_representation_item | SIZEOF ( QUERY ( u1 <* qri.qualifiers | ( ''AUTOMOTIVE_DESIGN.'' + ''UNCERTAINTY_QUALIFIER'' IN TYPEOF ( u1 ) ) AND ( SIZEOF ( QUERY ( u2 <* qri.qualifiers | ( ''AUTOMOTIVE_DESIGN.'' + ''UNCERTAINTY_QUALIFIER'' IN TYPEOF ( u2 ) ) AND ( u2\uncertainty_qualifier. measure_name = u1\uncertainty_qualifier.measure_name ) ) ) >0 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE coordinated_assembly_and_shape FOR (next_assembly_usage_occurrence); WHERE wr1: SIZEOF ( QUERY ( nauo <* next_assembly_usage_occurrence | NOT ( assembly_shape_is_defined ( nauo ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE curve_font_usage FOR (curve_style_font, externally_defined_curve_font, pre_defined_curve_font); WHERE wr1: SIZEOF ( QUERY ( csf <* curve_style_font | ( SIZEOF ( USEDIN ( csf , ''AUTOMOTIVE_DESIGN.CURVE_STYLE.CURVE_FONT'' ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pdcf <* pre_defined_curve_font | ( SIZEOF ( USEDIN ( pdcf , ''AUTOMOTIVE_DESIGN.CURVE_STYLE.CURVE_FONT'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( edcf <* externally_defined_curve_font | NOT ( SIZEOF ( USEDIN ( edcf , ''AUTOMOTIVE_DESIGN.'' + ''CURVE_STYLE.'' + ''CURVE_FONT'' ) ) >=1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_action_directive FOR (action_directive); WHERE wr1: SIZEOF ( QUERY ( a <* action_directive | NOT ( SIZEOF ( USEDIN ( a , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_action_resource_type FOR (action_resource_type); WHERE wr1: SIZEOF ( QUERY ( a <* action_resource_type | NOT ( SIZEOF ( USEDIN ( a , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_approval_role FOR (approval_role); WHERE wr1: SIZEOF ( QUERY ( a <* approval_role | NOT ( SIZEOF ( USEDIN ( a , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_attribute_value_role FOR (attribute_value_role); WHERE wr1: SIZEOF ( QUERY ( a <* attribute_value_role | NOT ( SIZEOF ( USEDIN ( a , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_classification_role FOR (classification_role); WHERE wr1: SIZEOF ( QUERY ( c <* classification_role | NOT ( SIZEOF ( USEDIN ( c , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_colour_rgb FOR (colour_rgb); WHERE wr1: SIZEOF ( QUERY ( c <* colour_rgb | NOT ( SIZEOF ( USEDIN ( c , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_contract_type FOR (contract_type); WHERE wr1: SIZEOF ( QUERY ( c <* contract_type | NOT ( SIZEOF ( USEDIN ( c , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_curve_style FOR (curve_style); WHERE wr1: SIZEOF ( QUERY ( c <* curve_style | NOT ( SIZEOF ( USEDIN ( c , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_date FOR (date); WHERE wr1: SIZEOF ( QUERY ( d <* date | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_date_and_time FOR (date_and_time); WHERE wr1: SIZEOF ( QUERY ( d <* date_and_time | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_date_role FOR (date_role); WHERE wr1: SIZEOF ( QUERY ( d <* date_role | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_date_time_role FOR (date_time_role); WHERE wr1: SIZEOF ( QUERY ( d <* date_time_role | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_derived_unit FOR (derived_unit); WHERE wr1: SIZEOF ( QUERY ( d <* derived_unit | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_dimensional_size FOR (dimensional_size); WHERE wr1: SIZEOF ( QUERY ( d <* dimensional_size | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_document_usage_role FOR (document_usage_role); WHERE wr1: SIZEOF ( QUERY ( d <* document_usage_role | NOT ( SIZEOF ( USEDIN ( d , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_effectivity_context_role FOR ( effectivity_context_role); WHERE wr1: SIZEOF ( QUERY ( e <* effectivity_context_role | NOT ( SIZEOF ( USEDIN ( e , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_event_occurrence_role FOR (event_occurrence_role); WHERE wr1: SIZEOF ( QUERY ( e <* event_occurrence_role | NOT ( SIZEOF ( USEDIN ( e , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_externally_defined_symbol FOR (externally_defined_symbol); WHERE wr1: SIZEOF ( QUERY ( e <* externally_defined_symbol | NOT ( SIZEOF ( USEDIN ( e , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_fill_area_style FOR (fill_area_style); WHERE wr1: SIZEOF ( QUERY ( f <* fill_area_style | NOT ( SIZEOF ( USEDIN ( f , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_fill_area_style_colour FOR (fill_area_style_colour); WHERE wr1: SIZEOF ( QUERY ( f <* fill_area_style_colour | NOT ( SIZEOF ( USEDIN ( f , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_identification_role FOR (identification_role); WHERE wr1: SIZEOF ( QUERY ( i <* identification_role | NOT ( SIZEOF ( USEDIN ( i , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_measure_with_unit FOR (measure_with_unit); WHERE wr1: SIZEOF ( QUERY ( m <* measure_with_unit | NOT ( SIZEOF ( USEDIN ( m , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_named_unit FOR (named_unit); WHERE wr1: SIZEOF ( QUERY ( n <* named_unit | NOT ( SIZEOF ( USEDIN ( n , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_object_role FOR (object_role); WHERE wr1: SIZEOF ( QUERY ( o <* object_role | NOT ( SIZEOF ( USEDIN ( o , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_organization_role FOR (organization_role); WHERE wr1: SIZEOF ( QUERY ( o <* organization_role | NOT ( SIZEOF ( USEDIN ( o , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_organizational_project_role FOR ( organizational_project_role); WHERE wr1: SIZEOF ( QUERY ( o <* organizational_project_role | NOT ( SIZEOF ( USEDIN ( o , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_person_and_organization_role FOR ( person_and_organization_role); WHERE wr1: SIZEOF ( QUERY ( p <* person_and_organization_role | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_pre_defined_colour FOR (pre_defined_colour); WHERE wr1: SIZEOF ( QUERY ( p <* pre_defined_colour | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_pre_defined_symbol FOR (pre_defined_symbol); WHERE wr1: SIZEOF ( QUERY ( p <* pre_defined_symbol | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_precision_qualifier FOR (precision_qualifier); WHERE wr1: SIZEOF ( QUERY ( p <* precision_qualifier | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_presentation_style_by_context FOR ( presentation_style_by_context); WHERE wr1: SIZEOF ( QUERY ( p <* presentation_style_by_context | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_product_definition_context_role FOR ( product_definition_context_role); WHERE wr1: SIZEOF ( QUERY ( p <* product_definition_context_role | NOT ( SIZEOF ( USEDIN ( p , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_resource_requirement_type FOR ( resource_requirement_type); WHERE wr1: SIZEOF ( QUERY ( r <* resource_requirement_type | NOT ( SIZEOF ( USEDIN ( r , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_retention FOR (retention); WHERE wr1: SIZEOF ( QUERY ( r <* retention | NOT ( SIZEOF ( USEDIN ( r , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_standard_uncertainty FOR (standard_uncertainty); WHERE wr1: SIZEOF ( QUERY ( s <* standard_uncertainty | NOT ( SIZEOF ( USEDIN ( s , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_symbol_colour FOR (symbol_colour); WHERE wr1: SIZEOF ( QUERY ( s <* symbol_colour | NOT ( SIZEOF ( USEDIN ( s , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_text_style FOR (text_style); WHERE wr1: SIZEOF ( QUERY ( t <* text_style | NOT ( SIZEOF ( USEDIN ( t , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_text_style_for_defined_font FOR ( text_style_for_defined_font); WHERE wr1: SIZEOF ( QUERY ( t <* text_style_for_defined_font | NOT ( SIZEOF ( USEDIN ( t , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_time_interval_role FOR (time_interval_role); WHERE wr1: SIZEOF ( QUERY ( t <* time_interval_role | NOT ( SIZEOF ( USEDIN ( t , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_tolerance_value FOR (tolerance_value); WHERE wr1: SIZEOF ( QUERY ( t <* tolerance_value | NOT ( SIZEOF ( USEDIN ( t , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_type_qualifier FOR (type_qualifier); WHERE wr1: SIZEOF ( QUERY ( t <* type_qualifier | NOT ( SIZEOF ( USEDIN ( t , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dependent_instantiable_uncertainty_qualifier FOR (uncertainty_qualifier); WHERE wr1: SIZEOF ( QUERY ( u <* uncertainty_qualifier | NOT ( SIZEOF ( USEDIN ( u , '''' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE design_constraint_requires_product_definition FOR (product_definition, product_definition_formation,product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( pdf <* product_definition_formation | ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdf.of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc.name = ''requirement'' ) ) >0 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION.'' + ''FORMATION'' ) | pd.frame_of_reference.name = ''design constraint definition'' ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE dimensionality_is_two_or_three FOR (geometric_representation_context); WHERE wr1: SIZEOF ( QUERY ( g <* geometric_representation_context | NOT ( ( g.coordinate_space_dimension = 2 ) OR ( g. coordinate_space_dimension = 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE draughting_subfigure_representation_layers FOR ( draughting_subfigure_representation); WHERE wr1: SIZEOF ( QUERY ( dsr <* draughting_subfigure_representation | NOT ( SIZEOF ( QUERY ( item <* dsr\ representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_OCCURRENCE'' IN TYPEOF ( item ) ) AND ( SIZEOF ( USEDIN ( item , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_LAYER_ASSIGNMENT.'' + ''ASSIGNED_ITEMS'' ) ) = 0 ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE drawing_sheet_annotation_layers FOR (drawing_sheet_revision); WHERE wr1: SIZEOF ( QUERY ( dsr <* drawing_sheet_revision | NOT ( SIZEOF ( QUERY ( ao <* QUERY ( it <* dsr\ representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_OCCURRENCE'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( USEDIN ( ao , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_LAYER_ASSIGNMENT.'' + ''ASSIGNED_ITEMS'' ) ) >=1 ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE drawing_sheet_layout_usage FOR (mapped_item); WHERE wr1: SIZEOF ( QUERY ( dsl <* QUERY ( mi <* mapped_item | ( ''AUTOMOTIVE_DESIGN.'' + ''DRAWING_SHEET_LAYOUT'' IN TYPEOF ( mi.mapping_source.mapped_representation ) ) ) | NOT ( SIZEOF ( USEDIN ( dsl , '''' ) ) = SIZEOF ( QUERY ( dsr <* USEDIN ( dsl , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION.'' + ''ITEMS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DRAWING_SHEET_REVISION'' IN TYPEOF ( dsr ) ) ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE drawing_view_annotation_layers FOR (presentation_view); WHERE wr1: SIZEOF ( QUERY ( pv <* presentation_view | NOT ( SIZEOF ( QUERY ( ao <* QUERY ( it <* pv\ representation. items | ( ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_OCCURRENCE'' IN TYPEOF ( it ) ) ) | NOT ( SIZEOF ( USEDIN ( ao , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_LAYER_ASSIGNMENT.'' + ''ASSIGNED_ITEMS'' ) ) >=1 ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE event_occurrence_requires_event_occurrence_assignment FOR (event_occurrence, event_occurrence_assignment, relative_event_occurrence); WHERE wr1: SIZEOF ( QUERY ( eo <* event_occurrence | ( SIZEOF ( USEDIN ( eo , ''AUTOMOTIVE_DESIGN.'' + ''RELATIVE_EVENT_OCCURRENCE.'' + ''BASE_EVENT'' ) ) = 0 ) AND ( SIZEOF ( USEDIN ( eo , ''AUTOMOTIVE_DESIGN.'' + ''EVENT_OCCURRENCE_ASSIGNMENT.'' + ''ASSIGNED_EVENT_OCCURRENCE'' ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE executed_action_requires_action_status FOR (executed_action); WHERE wr1: SIZEOF ( QUERY ( ea <* executed_action | SIZEOF ( USEDIN ( ea , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_STATUS.'' + ''ASSIGNED_ACTION'' ) ) <>1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE externally_defined_class_with_known_source_requirement FOR ( externally_defined_class); WHERE wr1: SIZEOF ( QUERY ( edc <* externally_defined_class | ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edc. source ) ) AND ( SIZEOF ( QUERY ( aoa <* USEDIN ( edc , ''AUTOMOTIVE_DESIGN.APPLIED_ORGANIZATION_ASSIGNMENT.ITEMS'' ) | aoa.role.name = ''class supplier'' ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE fill_area_style_tile_symbol_constraint FOR ( fill_area_style_tile_symbol_with_style); WHERE wr1: SIZEOF ( QUERY ( fast <* fill_area_style_tile_symbol_with_style | ( ( ''AUTOMOTIVE_DESIGN.'' + ''DEFINED_SYMBOL'' IN TYPEOF ( fast. symbol\ styled_item.item ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_SYMBOL'' IN TYPEOF ( fast.symbol\ styled_item.item\ defined_symbol. definition ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE full_model_change_completeness_for_action_property FOR (action_property); WHERE wr1: SIZEOF ( QUERY ( ap <* action_property | ( ap.name = ''full model change'' ) AND ( SIZEOF ( QUERY ( apr <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | apr. name = ''original representation'' ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( ap <* action_property | ( ap.name = ''full model change'' ) AND ( SIZEOF ( QUERY ( apr <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | apr. name = ''replacement representation'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( ap <* action_property | SIZEOF ( QUERY ( apr1 <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | ( apr1.name = ''added elements'' ) AND ( SIZEOF ( QUERY ( apr2 <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | ( apr2.name = ''replacement representation'' ) AND ( SIZEOF ( QUERY ( i1 <* apr1.representation.items | SIZEOF ( QUERY ( i2 <* apr2.representation.items | i1:=:i2 ) ) >0 ) ) <> SIZEOF ( apr1.representation.items ) ) ) ) >0 ) ) ) >0 ) ) = 0; wr4: SIZEOF ( QUERY ( ap <* action_property | SIZEOF ( QUERY ( apr1 <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | ( apr1.name = ''deleted elements'' ) AND ( SIZEOF ( QUERY ( apr2 <* USEDIN ( ap , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_PROPERTY_REPRESENTATION.'' + ''PROPERTY'' ) | ( apr2.name = ''original representation'' ) AND ( SIZEOF ( QUERY ( i1 <* apr1.representation.items | SIZEOF ( QUERY ( i2 <* apr2.representation.items | i1:=:i2 ) ) >0 ) ) <> SIZEOF ( apr1.representation.items ) ) ) ) >0 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE full_model_change_completeness_for_property_definition FOR ( property_definition); WHERE wr1: SIZEOF ( QUERY ( pd <* property_definition | ( pd.name = ''full model change'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'' ) | pdr.name = ''original representation'' ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pd <* property_definition | ( pd.name = ''full model change'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'' ) | pdr.name = ''replacement representation'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pd <* property_definition | ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr.name = ''added elements'' ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | SIZEOF ( QUERY ( pdr1 <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr1.name = ''replacement representation'' ) AND ( NOT ( i IN pdr1.used_representation.items ) ) ) ) >0 ) ) >0 ) ) ) >0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pd <* property_definition | ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr.name = ''deleted elements'' ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | SIZEOF ( QUERY ( pdr1 <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr1.name = ''original representation'' ) AND ( NOT ( i IN pdr1.used_representation.items ) ) ) ) >0 ) ) >0 ) ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE global_length_and_angle_units_2d_or_3d FOR (global_unit_assigned_context); WHERE wr1: SIZEOF ( QUERY ( guac <* global_unit_assigned_context | SIZEOF ( guac.units ) <2 ) ) = 0; wr2: SIZEOF ( QUERY ( guac <* global_unit_assigned_context | ( SIZEOF ( QUERY ( x <* guac.units | ''AUTOMOTIVE_DESIGN.'' + ''LENGTH_UNIT'' IN TYPEOF ( x ) ) ) <>1 ) OR ( SIZEOF ( QUERY ( x <* guac.units | ''AUTOMOTIVE_DESIGN.'' + ''PLANE_ANGLE_UNIT'' IN TYPEOF ( x ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE person_requires_person_and_organization FOR (person); WHERE wr1: SIZEOF ( QUERY ( p <* person | SIZEOF ( USEDIN ( p , ''AUTOMOTIVE_DESIGN.PERSON_AND_ORGANIZATION.THE_PERSON'' ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE physical_instance_requires_product_definition FOR (product_definition, product_definition_formation,product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( pdf <* product_definition_formation | ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdf.of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc.name = ''physically realized product'' ) ) >0 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pdf , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION.'' + ''FORMATION'' ) | pd. frame_of_reference.name = ''physical occurrence'' ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE plib_class_reference_requires_version FOR (externally_defined_class); WHERE wr1: SIZEOF ( QUERY ( edc <* externally_defined_class | ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edc. source ) ) AND ( SIZEOF ( QUERY ( aei <* USEDIN ( edc , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT.ITEMS'' ) | aei.role.name = ''version'' ) ) <>1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( edc <* externally_defined_class | ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edc. source ) ) AND ( SIZEOF ( QUERY ( aei <* USEDIN ( edc , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.ITEMS'' ) | aei.role.name = ''version'' ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE plib_property_reference_requires_name_scope FOR ( externally_defined_general_property); WHERE wr1: SIZEOF ( QUERY ( edgp <* externally_defined_general_property | ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edgp. source ) ) AND ( SIZEOF ( QUERY ( edir <* USEDIN ( edgp , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_ITEM_RELATIONSHIP.'' + ''RELATING_ITEM'' ) | ( edir.name = ''name scope'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CLASS'' IN TYPEOF ( edir.related_item ) ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edir. related_item.source ) ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE plib_property_reference_requires_version FOR ( externally_defined_general_property); WHERE wr1: SIZEOF ( QUERY ( edgp <* externally_defined_general_property | ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edgp. source ) ) AND ( SIZEOF ( QUERY ( edir <* USEDIN ( edgp , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ( edir.role.name = ''version'' ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE presentation_layer_assignment_constraint_2d_or_3d FOR ( presentation_layer_assignment); WHERE wr1: SIZEOF ( QUERY ( pla <* presentation_layer_assignment | NOT ( SIZEOF ( QUERY ( pnt <* QUERY ( item <* pla. assigned_items | ( ''AUTOMOTIVE_DESIGN.'' + ''POINT'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( rep <* USEDIN ( pnt , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' IN TYPEOF ( rep ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pla <* presentation_layer_assignment | NOT ( SIZEOF ( QUERY ( crv <* QUERY ( item <* pla. assigned_items | ( ''AUTOMOTIVE_DESIGN.'' + ''CURVE'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( rep <* USEDIN ( crv , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' IN TYPEOF ( rep ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pla <* presentation_layer_assignment | NOT ( SIZEOF ( QUERY ( srf <* QUERY ( item <* pla. assigned_items | ( ''AUTOMOTIVE_DESIGN.'' + ''SURFACE'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( rep <* USEDIN ( srf , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' IN TYPEOF ( rep ) ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pla <* presentation_layer_assignment | NOT ( SIZEOF ( QUERY ( ao <* QUERY ( item <* pla. assigned_items | ( ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_OCCURRENCE'' IN TYPEOF ( item ) ) ) | NOT ( SIZEOF ( QUERY ( ur <* using_representations ( ao ) | NOT ( SIZEOF ( TYPEOF ( ur ) *[''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SUBFIGURE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_AREA'' , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW''] ) = 1 ) ) ) = 0 ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE presentation_view_presented_once FOR (presentation_view); WHERE wr1: SIZEOF ( QUERY ( pv <* presentation_view | ( SIZEOF ( QUERY ( rm <* USEDIN ( pv , ''AUTOMOTIVE_DESIGN.REPRESENTATION_MAP.'' + ''MAPPED_REPRESENTATION'' ) | ( SIZEOF ( USEDIN ( rm , ''AUTOMOTIVE_DESIGN.MAPPED_ITEM.MAPPING_SOURCE'' ) ) <>1 ) OR ( SIZEOF ( QUERY ( mi <* USEDIN ( rm , ''AUTOMOTIVE_DESIGN.MAPPED_ITEM.MAPPING_SOURCE'' ) | ( SIZEOF ( USEDIN ( mi , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) ) <>1 ) OR ( SIZEOF ( QUERY ( r <* USEDIN ( mi , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_AREA'' IN TYPEOF ( r ) ) ) ) <>0 ) ) ) <>0 ) ) ) <>0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE product_concept_feature_requires_category FOR (product_concept_feature, product_concept_feature_category); WHERE wr1: SIZEOF ( QUERY ( pcf <* product_concept_feature | SIZEOF ( QUERY ( aga <* USEDIN ( pcf , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_GROUP_ASSIGNMENT.'' + ''ITEMS'' ) | ( aga.role.name = ''specification category member'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' IN TYPEOF ( aga.assigned_group ) ) ) ) <>1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE product_definition_replacement_requires_effectivity_assignment FOR ( applied_effectivity_assignment,product_definition_relationship); WHERE wr1: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''definition replacement'' ) AND ( SIZEOF ( USEDIN ( pdr , ''AUTOMOTIVE_DESIGN.APPLIED_EFFECTIVITY_ASSIGNMENT.ITEMS'' ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE product_requires_category FOR (product,product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( p <* product | SIZEOF ( USEDIN ( p , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE product_requires_person_organization FOR (product); WHERE wr1: SIZEOF ( QUERY ( prod <* product | ( SIZEOF ( QUERY ( prpc <* USEDIN ( prod , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'') | prpc.name IN [''part'' , ''tool'' , ''raw material'' ] ) ) >0 ) AND ( SIZEOF ( QUERY ( apoa <* USEDIN ( prod , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT.ITEMS'' ) | apoa\ person_and_organization_assignment.role.name<> ''id owner'' ) ) = 1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE product_requires_version FOR (product); WHERE wr1: SIZEOF ( QUERY ( prod <* product | ( SIZEOF ( USEDIN ( prod , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_FORMATION.'' + ''OF_PRODUCT'' ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_action_resource_requirement_for_process_operation FOR (action, action_resource_requirement); WHERE wr1: SIZEOF ( QUERY ( a <* action | ( a.name = ''process operation'' ) AND ( SIZEOF ( QUERY ( arr <* USEDIN ( a , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RESOURCE_REQUIREMENT.'' + ''OPERATIONS'' ) | arr.name = ''reference tool'' ) ) >1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( arr <* action_resource_requirement | ( arr.name = ''reference tool'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''REQUIREMENT_FOR_ACTION_RESOURCE'' IN TYPEOF ( arr ) ) ) AND ( SIZEOF ( QUERY ( ar <* arr\ requirement_for_action_resource.resources | ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RESOURCE'' IN TYPEOF ( ar ) ) ) <>1 ) ) ) = 0; wr3: SIZEOF ( QUERY ( arr <* action_resource_requirement | ( arr.name<> ''reference tool'' ) AND ( arr.name<> ''non reference tool'' ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_alternative_definition FOR (product_definition, product_definition_context); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''alternative definition'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'' ) | pdr.name = ''solution alternative definition'' ) ) <>1 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''alternative definition'' ) AND NOT ( pd.name IN [''technical'' , ''supplier'' , ''final'' , ''technical supplier'' , ''technical final'' , ''supplier final'' , ''technical supplier final'' , ''''] ) ) ) = 0; wr3: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''alternative definition'' ) AND ( pd.name IN [''supplier'' , ''technical supplier'' , ''supplier final'' , ''technical supplier final'' ] ) AND ( SIZEOF ( QUERY ( aoa <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | aoa.role.name = ''supplier'' ) ) <>1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''alternative definition'' ) AND ( pd.name IN [''final'' , ''technical final'' , ''supplier final'' , ''technical supplier final'' ] ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATING_PRODUCT_DEFINITION'' ) | pdr.name = ''final specification'' ) ) = 0 ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.'' + ''DEFINITION'' ) | SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr.used_representation.name = ''final item characteristics'' ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) = SIZEOF ( pdr.used_representation.items ) ) AND ( SIZEOF ( pdr.used_representation.items ) >=2 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | i.name = ''final item status'' ) ) = 1 ) ) ) >0 ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_applied_action_assignment FOR (applied_action_assignment, object_role); WHERE wr1: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.description = ''activity element'' ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EXECUTED_ACTION'' IN TYPEOF ( aaa. assigned_action ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.description = ''activity element'' ) AND NOT item_correlation ( aaa.items , [''ACTION'' , ''ACTION_METHOD'' , ''ACTION_PROPERTY'' , ''ASSEMBLY_COMPONENT_USAGE_SUBSTITUTE'' , ''CONFIGURATION_ITEM'' , ''CONFIGURATION_EFFECTIVITY'' , ''CONFIGURED_EFFECTIVITY_ASSIGNMENT'' , ''DOCUMENT_FILE'' , ''DRAUGHTING_MODEL'' , ''DRAWING_REVISION'' , ''GENERAL_PROPERTY'' , ''MATERIAL_DESIGNATION'' , ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' , ''PRESENTATION_AREA'' , ''PRODUCT'' , ''PRODUCT_CONCEPT'' , ''PRODUCT_CONCEPT_FEATURE'' , ''PRODUCT_CONCEPT_FEATURE_ASSOCIATION'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' , ''PRODUCT_DEFINITION'' , ''PRODUCT_DEFINITION_FORMATION'' , ''PRODUCT_DEFINITION_RELATIONSHIP'' , ''PRODUCT_DEFINITION_SUBSTITUTE'' , ''PROPERTY_DEFINITION'' , ''RESOURCE_PROPERTY'' , ''SHAPE_ASPECT'' , ''SHAPE_REPRESENTATION''] ) ) ) = 0; wr3: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( NOT EXISTS ( aaa.role ) OR ( aaa.role.description = ''activity element'' ) ) AND ( SIZEOF ( QUERY ( i <* aaa. items | ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( i ) ) ) >0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.name = ''deliverable element'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''ELEMENT_DELIVERY'' IN TYPEOF ( aaa.assigned_action ) ) OR ( SIZEOF ( QUERY ( i <* aaa. items | ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( i ) ) ) >1 ) OR ( SIZEOF ( QUERY ( i <* aaa.items | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( i ) ) AND ( i\ action_assignment.role.description<> ''activity element'' ) ) ) >0 ) ) ) ) = 0; wr5: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.name = ''retention'' ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''RETENTION'' IN TYPEOF ( aaa.assigned_action ) ) ) ) = 0; wr6: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.name = ''retention'' ) AND NOT item_correlation ( aaa.items , [''ACTION'' , ''ACTION_DIRECTIVE'' , ''ACTION_PROPERTY'' , ''ACTION_RELATIONSHIP'' , ''APPLIED_ACTION_ASSIGNMENT'' , ''APPLIED_CLASSIFICATION_ASSIGNMENT'' , ''ASSEMBLY_COMPONENT_USAGE_SUBSTITUTE'' , ''CERTIFICATION'' , ''CLASS_SYSTEM'' , ''CONFIGURATION_EFFECTIVITY'' , ''CONFIGURATION_ITEM'' , ''CONFIGURED_EFFECTIVITY_ASSIGNMENT'' , ''DOCUMENT_FILE'' , ''DRAUGHTING_MODEL'' , ''DRAWING_REVISION'' , ''GENERAL_PROPERTY'' , ''MATERIAL_DESIGNATION'' , ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' , ''ORGANIZATIONAL_PROJECT'' , ''PRESENTATION_AREA'' , ''PRODUCT'' , ''PRODUCT_CONCEPT'' , ''PRODUCT_CONCEPT_FEATURE'' , ''PRODUCT_CONCEPT_FEATURE_ASSOCIATION'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' , ''PRODUCT_DEFINITION'' , ''PRODUCT_DEFINITION_FORMATION'' , ''PRODUCT_DEFINITION_RELATIONSHIP'' , ''PRODUCT_DEFINITION_SUBSTITUTE'' , ''PROPERTY_DEFINITION'' , ''RESOURCE_PROPERTY'' , ''SHAPE_REPRESENTATION'' , ''VERSIONED_ACTION_REQUEST''] ) ) ) = 0; wr7: SIZEOF ( QUERY ( aaa <* applied_action_assignment | ( aaa.role.name = ''test activity'' ) AND NOT item_correlation ( aaa.items , [''PROPERTY_DEFINITION''] ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_applied_action_request_assignment FOR ( applied_action_request_assignment,object_role); WHERE wr1: SIZEOF ( QUERY ( aara <* applied_action_request_assignment | aara.role. name<>''scope'' ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_applied_classification_assignment_role FOR ( applied_classification_assignment); WHERE wr1: SIZEOF ( QUERY ( aca <* applied_classification_assignment | ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' IN TYPEOF ( aca.assigned_class ) ) AND NOT ( aca.role.name IN [''definitional'' , ''non-definitional'' , ''''] ) ) ) = 0; wr2: SIZEOF ( QUERY ( aca <* applied_classification_assignment | ( aca.role.name IN [''definitional'' , ''non-definitional'' , ''''] ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' IN TYPEOF ( aca. assigned_class ) ) ) ) = 0; wr3: SIZEOF ( QUERY ( aca <* applied_classification_assignment | ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS_SYSTEM'' IN TYPEOF ( aca.assigned_class ) ) AND ( aca.role.name<> ''class system membership'' ) ) ) = 0; wr4: SIZEOF ( QUERY ( aca <* applied_classification_assignment | ( aca.role.name = ''class system membership'' ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS_SYSTEM'' IN TYPEOF ( aca. assigned_class ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_applied_event_occurrence_assignment FOR ( applied_event_occurrence_assignment); WHERE wr1: SIZEOF ( QUERY ( eo <* applied_event_occurrence_assignment | ( eo\ event_occurrence_assignment.role.name = ''event context'' ) AND ( SIZEOF ( eo.items ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_applied_organizational_project_assignment FOR ( applied_organizational_project_assignment,object_role); WHERE wr1: SIZEOF ( QUERY ( aopa <* applied_organizational_project_assignment | ( aopa.role. name = ''affecting project'' ) AND NOT item_correlation ( aopa.items , [''PRODUCT_CONCEPT''] ) ) ) = 0; wr2: SIZEOF ( QUERY ( aopa <* applied_organizational_project_assignment | ( aopa.role. name = ''work program'' ) AND NOT item_correlation ( aopa. items , [''EXECUTED_ACTION''] ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_approval FOR (approval,approval_date_time); WHERE wr1: SIZEOF ( QUERY ( a <* approval | SIZEOF ( USEDIN ( a , ''AUTOMOTIVE_DESIGN.APPROVAL_DATE_TIME.DATED_APPROVAL'' ) ) >2 ) ) = 0; wr2: SIZEOF ( QUERY ( adt <* approval_date_time | ( NOT EXISTS ( adt.role ) ) OR ( NOT ( adt.role.name IN [''actual'' , ''planned''] ) ) ) ) = 0; wr3: SIZEOF ( QUERY ( a <* approval | SIZEOF ( QUERY ( adt <* USEDIN ( a , ''AUTOMOTIVE_DESIGN.'' + ''APPROVAL_DATE_TIME.'' + ''DATED_APPROVAL'' ) | adt.role.name = ''actual'' ) ) >1 ) ) = 0; wr4: SIZEOF ( QUERY ( a <* approval | SIZEOF ( QUERY ( adt <* USEDIN ( a , ''AUTOMOTIVE_DESIGN.'' + ''APPROVAL_DATE_TIME.'' + ''DATED_APPROVAL'' ) | adt.role.name = ''planned'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_camera_image_in_view FOR (camera_image,presentation_view); WHERE wr1: SIZEOF ( QUERY ( ci <* camera_image | ( SIZEOF ( QUERY ( r <* USEDIN ( ci , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW'' IN TYPEOF ( r ) ) ) ) ) <>1 ) ) = 0; wr2: SIZEOF ( QUERY ( pv <* presentation_view | ( SIZEOF ( QUERY ( ri <* pv\ representation.items | ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE'' IN TYPEOF ( ri ) ) ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_centre_of_mass_representation FOR (representation); WHERE wr1: SIZEOF ( QUERY ( r <* representation | ( r.name = ''centre of mass'' ) AND ( ( SIZEOF ( r.items ) <>1 ) OR ( SIZEOF ( QUERY ( i <* r.items | ( ''AUTOMOTIVE_DESIGN.'' + ''POINT'' IN TYPEOF ( i ) ) AND ( i.name = ''centre point'' ) ) ) <>1 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_approval_status FOR (applied_classification_assignment,approval_status); WHERE wr1: SIZEOF ( QUERY ( ent <* approval_status | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''class system membership'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_class FOR ( applied_classification_assignment,class); WHERE wr1: SIZEOF ( QUERY ( c <* class | SIZEOF ( QUERY ( aca <* USEDIN ( c , ''AUTOMOTIVE_DESIGN.'' + ''CLASSIFICATION_ASSIGNMENT.'' + ''ASSIGNED_CLASS'' ) | ( ( aca.role.name = ''class system membership'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT'' IN TYPEOF ( aca ) ) ) ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_descriptive_representation_item FOR (applied_classification_assignment, descriptive_representation_item); WHERE wr1: SIZEOF ( QUERY ( ent <* descriptive_representation_item | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia.role.name = ''class system membership'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_document_type FOR ( applied_classification_assignment,document_type); WHERE wr1: SIZEOF ( QUERY ( ent <* document_type | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''class system membership'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_planar_extent FOR ( applied_classification_assignment,planar_extent); WHERE wr1: SIZEOF ( QUERY ( pe <* planar_extent | ( pe\ representation_item.name = ''size format'' ) AND ( SIZEOF ( QUERY ( aca <* USEDIN ( pe , ''AUTOMOTIVE_DESIGN.APPLIED_CLASSIFICATION_ASSIGNMENT.ITEMS'' ) | aca\ classification_assignment.role.name = ''class system membership'' ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_class_system_assignment_for_security_classification_level FOR (applied_classification_assignment,security_classification_level); WHERE wr1: SIZEOF ( QUERY ( ent <* security_classification_level | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia.role.name = ''class system membership'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_concept_feature_operator FOR (concept_feature_operator); WHERE wr1: SIZEOF ( QUERY ( cfo <* concept_feature_operator | NOT ( cfo.name IN [''and'' , ''or'' , ''oneof'' , ''not'' , ''implication''] ) ) ) = 0; wr2: SIZEOF ( QUERY ( cfo <* concept_feature_operator | ( cfo.name = ''implication'' ) AND ( SIZEOF ( QUERY ( cfrwc <* USEDIN ( cfo , ''AUTOMOTIVE_DESIGN.'' + ''CONCEPT_FEATURE_RELATIONSHIP_WITH_CONDITION.'' + ''CONDITIONAL_OPERATOR'' ) | SIZEOF ( QUERY ( ccf <* USEDIN ( cfrwc , ''AUTOMOTIVE_DESIGN.'' + ''CONDITIONAL_CONCEPT_FEATURE.'' + ''CONDITION'' ) | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''INCLUSION_PRODUCT_CONCEPT_FEATURE'' IN TYPEOF ( ccf ) ) ) ) >0 ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_configuration_design_for_product_class FOR (configuration_design, product_class); WHERE wr1: SIZEOF ( QUERY ( cd <* configuration_design | ( cd.name = ''functionality'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( cd.design ) ) OR ( cd. design\ product_definition.frame_of_reference.name<> ''functional definition'' ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( cd <* configuration_design | ( cd.name = ''realization'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( cd.design ) ) OR ( cd. design\ product_definition.frame_of_reference.name<> ''conceptual definition'' ) ) ) ) = 0; wr3: SIZEOF ( QUERY ( cd <* configuration_design | ( cd.name IN [''functionality'' , ''realization''] ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CLASS'' IN TYPEOF ( cd. configuration.item_concept ) ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( cd <* configuration_design | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( cd.design ) ) AND ( cd.design\ product_definition. frame_of_reference.name<> ''design constraint definition'' ) AND ( ( cd.configuration.name<> ''design constraint usage'' ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CLASS'' IN TYPEOF ( cd.configuration. item_concept ) ) ) ) ) = 0; wr5: SIZEOF ( QUERY ( cd <* configuration_design | ( cd.name = ''physical instance basis'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( cd.design ) ) OR ( cd.design\ product_definition. frame_of_reference.name<> ''physical occurrence'' ) ) ) ) = 0; wr6: SIZEOF ( QUERY ( cd <* configuration_design | ( cd.name = ''physical instance basis'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_IDENTIFICATION'' IN TYPEOF ( cd.configuration ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_default_settings FOR (applied_document_reference,representation); WHERE wr1: ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default tolerances'' ) AND ( r.context_of_items. context_type = ''default setting'' ) AND ( SIZEOF ( r. items ) <>1 ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default tolerances'' ) AND ( r.context_of_items.context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''tolerance class'' ) ) ) <>1 ) ) ) = 0 ) ; wr2: SIZEOF ( QUERY ( r <* representation | ( r.name = ''default tolerances'' ) AND ( r.context_of_items. context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( adr <* USEDIN ( r , ''AUTOMOTIVE_DESIGN.APPLIED_DOCUMENT_REFERENCE.ITEMS'' ) | adr.role.name = ''general tolerance definition'' ) ) + SIZEOF ( QUERY ( rr <* USEDIN ( r , ''AUTOMOTIVE_DESIGN.REPRESENTATION_RELATIONSHIP.REP_2'' ) | ( rr.name = ''general tolerance definition'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DEFAULT_TOLERANCE_TABLE'' IN TYPEOF ( rr.rep_1 ) ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_default_thickness FOR (representation); WHERE wr1: ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default thickness'' ) AND ( r.context_of_items. context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default thickness'' ) AND ( r.context_of_items.context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name<> ''parameter name'' ) ) ) >0 ) ) ) = 0 ) ; wr2: ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default thickness'' ) AND ( r.context_of_items. context_type = ''default setting'' ) AND ( SIZEOF ( r. items ) >2 ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''default thickness'' ) AND ( r.context_of_items.context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) <>1 ) ) ) >0 ) ) ) = 0 ) ; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''default thickness'' ) AND ( r.context_of_items. context_type = ''default setting'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i. name = ''thickness value'' ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_drawing FOR (draughting_title,drawing_revision); WHERE wr1: ( SIZEOF ( QUERY ( dr <* drawing_revision | ( SIZEOF ( dr.areas ) = 0 ) OR ( SIZEOF ( QUERY ( ais <* dr. areas | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''DRAWING_SHEET_REVISION'' IN TYPEOF ( ais.area ) ) ) ) >0 ) ) ) = 0 ) ; wr2: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( USEDIN ( dr , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_TITLE.'' + ''ITEMS'' ) ) >1 ) ) = 0; wr3: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( USEDIN ( ais.area , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_TITLE.'' + ''ITEMS'' ) ) >1 ) ) >0 ) ) = 0; wr4: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( item <* ais. area.items | SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_BOX''] ) <>1 ) ) >0 ) ) >0 ) ) = 0; wr5: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( item <* ais. area.items | SIZEOF ( TYPEOF ( item ) *[''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM''] ) = 0 ) ) >0 ) ) >0 ) ) = 0; wr6: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( p_b <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_BOX'' IN TYPEOF ( item ) ) | SIZEOF ( USEDIN ( p_b , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_SIZE.'' + ''SIZE'' ) ) <>1 ) ) >0 ) ) >0 ) ) = 0; wr7: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW'' IN TYPEOF ( mi\ mapped_item. mapping_source.mapped_representation ) ) ) = 0 ) ) >0 ) ) = 0; wr8: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( a2p <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT'' IN TYPEOF ( item ) ) | SIZEOF ( USEDIN ( a2p , ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM.'' + ''MAPPING_TARGET'' ) ) = 0 ) ) >0 ) ) >0 ) ) = 0; wr9: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( ais.area. context_of_items.representations_in_context ) >1 ) ) >0 ) ) = 0; wr10: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | SIZEOF ( USEDIN ( mi\ mapped_item.mapping_source.mapped_representation , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.'' + ''MAPPED_REPRESENTATION'' ) ) <>1 ) ) >0 ) ) >0 ) ) = 0; wr11: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | SIZEOF ( QUERY ( pv_item <* mi\ mapped_item.mapping_source. mapped_representation.items | SIZEOF ( TYPEOF ( pv_item ) *[''AUTOMOTIVE_DESIGN.'' + ''STYLED_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT''] ) <>1 ) ) >0 ) ) >0 ) ) >0 ) ) = 0; wr12: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | SIZEOF ( QUERY ( a2p <* QUERY ( pv_item <* mi\ mapped_item.mapping_source. mapped_representation.items | ''AUTOMOTIVE_DESIGN.'' + ''AXIS2_PLACEMENT'' IN TYPEOF ( pv_item ) ) | SIZEOF ( QUERY ( rm <* USEDIN ( a2p , ''AUTOMOTIVE_DESIGN.'' + ''REPRESENTATION_MAP.'' + ''MAPPING_ORIGIN'' ) | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | mi\ mapped_item.mapping_source:=:rm ) ) >0 ) ) = 1 ) ) <>1 ) ) >0 ) ) >0 ) ) = 0; wr13: SIZEOF ( QUERY ( dr <* drawing_revision | SIZEOF ( QUERY ( ais <* dr.areas | SIZEOF ( QUERY ( mi <* QUERY ( item <* ais.area.items | ''AUTOMOTIVE_DESIGN.'' + ''MAPPED_ITEM'' IN TYPEOF ( item ) ) | SIZEOF ( mi\ mapped_item.mapping_source.mapped_representation. context_of_items.representations_in_context ) <>1 ) ) >0 ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_effectivity_assignment_for_class_category_usage FOR (applied_effectivity_assignment, product_concept_feature_category_usage); WHERE wr1: SIZEOF ( QUERY ( aea <* applied_effectivity_assignment | ( ( SIZEOF ( QUERY ( i <* aea.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' IN TYPEOF ( i ) ) ) ) >0 ) OR ( SIZEOF ( QUERY ( i <* aea.items | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' IN TYPEOF ( i ) ) ) ) <> SIZEOF ( aea.items ) ) ) AND ( ( SIZEOF ( TYPEOF ( aea.assigned_effectivity ) ) >1 ) OR ( aea. assigned_effectivity.id<> ''class usage'' ) OR ( SIZEOF ( QUERY ( cueca <* USEDIN ( aea , ''AUTOMOTIVE_DESIGN.'' + ''EFFECTIVITY_CONTEXT_ASSIGNMENT.'' + ''ASSIGNED_EFFECTIVITY_ASSIGNMENT'' ) | ''AUTOMOTIVE_DESIGN.'' + ''CLASS_USAGE_EFFECTIVITY_CONTEXT_ASSIGNMENT'' IN TYPEOF ( cueca ) ) ) = 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_effectivity_for_effectivity_relationship FOR ( effectivity_relationship); WHERE wr1: SIZEOF ( QUERY ( er <* effectivity_relationship | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''LOT_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''SERIAL_NUMBERED_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_EFFECTIVITY'']* TYPEOF ( er.relating_effectivity ) ) >0 ) OR ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''LOT_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''SERIAL_NUMBERED_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_EFFECTIVITY'']* TYPEOF ( er.related_effectivity ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_effectivity_usage FOR (configured_effectivity_assignment, effectivity); WHERE wr1: SIZEOF ( QUERY ( e <* effectivity | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''DATED_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''TIME_INTERVAL_BASED_EFFECTIVITY'']* TYPEOF ( e ) ) = 0 ) AND ( ( SIZEOF ( QUERY ( er <* USEDIN ( e , ''AUTOMOTIVE_DESIGN.EFFECTIVITY_RELATIONSHIP.'' + ''RELATED_EFFECTIVITY'' ) | er.name = ''inheritance'' ) ) = 0 ) AND ( ( e.id = ''configuration validity'' ) AND ( SIZEOF ( QUERY ( cea <* USEDIN ( e , ''AUTOMOTIVE_DESIGN.EFFECTIVITY_ASSIGNMENT.ASSIGNED_EFFECTIVITY'' ) | ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURED_EFFECTIVITY_ASSIGNMENT'' IN TYPEOF ( cea ) ) ) = 0 ) ) AND ( ( e.id = ''class usage'' ) AND ( SIZEOF ( QUERY ( aea <* USEDIN ( e , ''AUTOMOTIVE_DESIGN.'' + ''EFFECTIVITY_ASSIGNMENT.'' + ''ASSIGNED_EFFECTIVITY'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EFFECTIVITY_ASSIGNMENT'' IN TYPEOF ( aea ) ) AND ( SIZEOF ( QUERY ( i <* aea.items | ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE'' IN TYPEOF ( i ) ) ) >0 ) ) ) = 0 ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_externally_defined_item_relationship FOR (externally_defined_item_relationship); WHERE wr1: SIZEOF ( QUERY ( edir <* externally_defined_item_relationship | ( edir.name = ''name scope'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_GENERAL_PROPERTY'' IN TYPEOF ( edir. relating_item ) ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edir.relating_item.source ) ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CLASS'' IN TYPEOF ( edir.related_item ) ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' IN TYPEOF ( edir.related_item.source ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_general_property_association_for_externally_defined_general_property FOR (general_property_association); WHERE wr1: SIZEOF ( QUERY ( gpa <* general_property_association | ( gpa.name IN [''definitional'' , ''non-definitional''] ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_GENERAL_PROPERTY'' IN TYPEOF ( gpa. base_definition ) ) ) ) = 0; END_RULE; RULE restrict_group_relationship_for_general_classification_hierarchy FOR (class,group_relationship); WHERE wr1: SIZEOF ( QUERY ( gr <* group_relationship | ( gr.name = ''class hierarchy'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' IN TYPEOF ( gr.related_group ) ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''CLASS'' IN TYPEOF ( gr. relating_group ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_group_relationship_for_specification_category FOR ( group_relationship,product_concept_feature_category); WHERE wr1: SIZEOF ( QUERY ( gr <* group_relationship | ( gr.name = ''specification category hierarchy'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' IN TYPEOF ( gr.related_group ) ) OR NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' IN TYPEOF ( gr.relating_group ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_action FOR (action); WHERE wr1: SIZEOF ( QUERY ( ent <* action | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* action | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* action | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_action_directive FOR (action_directive); WHERE wr1: SIZEOF ( QUERY ( ent <* action_directive | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''comment'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* action_directive | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''comment'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* action_directive | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_action_method FOR (action_method); WHERE wr1: SIZEOF ( QUERY ( ent <* action_method | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* action_method | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* action_method | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_action_property FOR (action_property); WHERE wr1: SIZEOF ( QUERY ( ent <* action_property | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* action_property | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* action_property | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_action_relationship FOR (action_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* action_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* action_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* action_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_alternate_product_relationship FOR (alternate_product_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* alternate_product_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''basis'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* alternate_product_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''basis'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* alternate_product_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_application_context FOR (application_context); WHERE wr1: SIZEOF ( QUERY ( ent <* application_context | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* application_context | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* application_context | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_approval_relationship FOR (approval_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* approval_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* approval_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* approval_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_assembly_component_usage_substitute FOR (assembly_component_usage_substitute); WHERE wr1: SIZEOF ( QUERY ( ent <* assembly_component_usage_substitute | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''definition'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* assembly_component_usage_substitute | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''definition'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* assembly_component_usage_substitute | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_certification FOR (certification); WHERE wr1: SIZEOF ( QUERY ( ent <* certification | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) AND ( mlaa. attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* certification | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''name'' ) AND ( ala. attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* certification | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_configuration_design FOR ( configuration_design); WHERE wr1: SIZEOF ( QUERY ( ent <* configuration_design | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* configuration_design | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* configuration_design | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_configuration_item FOR (configuration_item); WHERE wr1: SIZEOF ( QUERY ( ent <* configuration_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* configuration_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* configuration_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_contract FOR (contract); WHERE wr1: SIZEOF ( QUERY ( ent <* contract | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* contract | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* contract | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_data_environment FOR (data_environment); WHERE wr1: SIZEOF ( QUERY ( ent <* data_environment | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* data_environment | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* data_environment | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_date_role FOR (date_role); WHERE wr1: SIZEOF ( QUERY ( ent <* date_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* date_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* date_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_date_time_role FOR (date_time_role); WHERE wr1: SIZEOF ( QUERY ( ent <* date_time_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* date_time_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* date_time_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_descriptive_representation_item FOR (descriptive_representation_item); WHERE wr1: SIZEOF ( QUERY ( ent <* descriptive_representation_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* descriptive_representation_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* descriptive_representation_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_document_relationship FOR (document_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* document_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* document_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* document_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_draughting_title FOR (draughting_title); WHERE wr1: SIZEOF ( QUERY ( ent <* draughting_title | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''contents'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* draughting_title | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''contents'' ) AND ( ala. attribute_name<>''language'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* draughting_title | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_effectivity FOR (effectivity); WHERE wr1: SIZEOF ( QUERY ( ent <* effectivity | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* effectivity | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* effectivity | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_effectivity_relationship FOR ( effectivity_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* effectivity_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* effectivity_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* effectivity_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_event_occurrence FOR (event_occurrence); WHERE wr1: SIZEOF ( QUERY ( ent <* event_occurrence | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* event_occurrence | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* event_occurrence | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_external_source FOR (external_source); WHERE wr1: SIZEOF ( QUERY ( ent <* external_source | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* external_source | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* external_source | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_general_property FOR (general_property); WHERE wr1: SIZEOF ( QUERY ( ent <* general_property | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* general_property | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* general_property | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_general_property_relationship FOR (general_property_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* general_property_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* general_property_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* general_property_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_geometric_representation_item FOR (geometric_representation_item); WHERE wr1: SIZEOF ( QUERY ( ent <* geometric_representation_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* geometric_representation_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* geometric_representation_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_geometric_tolerance FOR (geometric_tolerance); WHERE wr1: SIZEOF ( QUERY ( ent <* geometric_tolerance | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* geometric_tolerance | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* geometric_tolerance | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_group FOR (group); WHERE wr1: SIZEOF ( QUERY ( ent <* group | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* group | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* group | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_group_relationship FOR (group_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* group_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* group_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* group_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_identification_role FOR (identification_role); WHERE wr1: SIZEOF ( QUERY ( ent <* identification_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* identification_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* identification_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_kinematic_pair FOR (kinematic_pair); WHERE wr1: SIZEOF ( QUERY ( ent <* kinematic_pair | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* kinematic_pair | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* kinematic_pair | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_mapped_item FOR (mapped_item); WHERE wr1: SIZEOF ( QUERY ( ent <* mapped_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* mapped_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* mapped_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_name_assignment FOR (name_assignment); WHERE wr1: SIZEOF ( QUERY ( ent <* name_assignment | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''assigned_name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* name_assignment | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''assigned_name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* name_assignment | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_organization_relationship FOR (organization_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* organization_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* organization_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* organization_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_organization_role FOR (organization_role); WHERE wr1: SIZEOF ( QUERY ( ent <* organization_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* organization_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* organization_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_organizational_project FOR ( organizational_project); WHERE wr1: SIZEOF ( QUERY ( ent <* organizational_project | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* organizational_project | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* organizational_project | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_organizational_project_relationship FOR (organizational_project_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* organizational_project_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* organizational_project_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* organizational_project_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_pair_actuator FOR (pair_actuator); WHERE wr1: SIZEOF ( QUERY ( ent <* pair_actuator | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* pair_actuator | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* pair_actuator | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_person_and_organization_role FOR (person_and_organization_role); WHERE wr1: SIZEOF ( QUERY ( ent <* person_and_organization_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* person_and_organization_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* person_and_organization_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_presentation_layer_assignment FOR (presentation_layer_assignment); WHERE wr1: SIZEOF ( QUERY ( ent <* presentation_layer_assignment | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* presentation_layer_assignment | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* presentation_layer_assignment | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_process_product_association FOR (process_product_association); WHERE wr1: SIZEOF ( QUERY ( ent <* process_product_association | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* process_product_association | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* process_product_association | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product FOR (product); WHERE wr1: SIZEOF ( QUERY ( ent <* product | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_concept FOR (product_concept); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_concept | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_concept | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_concept_feature FOR ( product_concept_feature); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept_feature | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_concept_feature | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) AND ( ala.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_concept_feature | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_concept_feature_association FOR (product_concept_feature_association); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept_feature_association | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_concept_feature_association | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_concept_feature_association | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_concept_relationship FOR (product_concept_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_concept_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_concept_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_definition FOR (product_definition); WHERE wr1: SIZEOF ( QUERY ( ent <* product_definition | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_definition | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_definition | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_definition_formation FOR (product_definition_formation); WHERE wr1: SIZEOF ( QUERY ( ent <* product_definition_formation | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_definition_formation | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_definition_formation | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_definition_formation_relationship FOR(product_definition_formation_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* product_definition_formation_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_definition_formation_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_definition_formation_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_definition_relationship FOR ( product_definition_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* product_definition_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_definition_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_definition_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_definition_substitute FOR ( product_definition_substitute); WHERE wr1: SIZEOF ( QUERY ( ent <* product_definition_substitute | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_definition_substitute | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_definition_substitute | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_product_related_product_category FOR (product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( ent <* product_related_product_category | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* product_related_product_category | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* product_related_product_category | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_property_definition FOR (property_definition); WHERE wr1: SIZEOF ( QUERY ( ent <* property_definition | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* property_definition | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* property_definition | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_property_definition_relationship FOR (property_definition_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* property_definition_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* property_definition_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* property_definition_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_representation FOR (representation); WHERE wr1: SIZEOF ( QUERY ( ent <* representation | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) AND ( mlaa. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* representation | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) AND ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* representation | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_representation_relationship FOR (representation_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* representation_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* representation_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* representation_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_requirement_for_action_resource FOR (requirement_for_action_resource); WHERE wr1: SIZEOF ( QUERY ( ent <* requirement_for_action_resource | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* requirement_for_action_resource | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* requirement_for_action_resource | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_resource_property FOR (resource_property); WHERE wr1: SIZEOF ( QUERY ( ent <* resource_property | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* resource_property | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* resource_property | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_resource_requirement_type FOR (resource_requirement_type); WHERE wr1: SIZEOF ( QUERY ( ent <* resource_requirement_type | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* resource_requirement_type | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* resource_requirement_type | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_security_classification FOR (security_classification); WHERE wr1: SIZEOF ( QUERY ( ent <* security_classification | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) AND ( mlaa. attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* security_classification | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''name'' ) AND ( ala. attribute_name<>''purpose'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* security_classification | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_shape_aspect FOR (shape_aspect); WHERE wr1: SIZEOF ( QUERY ( ent <* shape_aspect | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* shape_aspect | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* shape_aspect | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_shape_aspect_relationship FOR (shape_aspect_relationship); WHERE wr1: SIZEOF ( QUERY ( ent <* shape_aspect_relationship | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* shape_aspect_relationship | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* shape_aspect_relationship | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_styled_item FOR (styled_item); WHERE wr1: SIZEOF ( QUERY ( ent <* styled_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* styled_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* styled_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_time_interval_role FOR (time_interval_role); WHERE wr1: SIZEOF ( QUERY ( ent <* time_interval_role | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* time_interval_role | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* time_interval_role | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_topological_representation_item FOR (topological_representation_item); WHERE wr1: SIZEOF ( QUERY ( ent <* topological_representation_item | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* topological_representation_item | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''name'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* topological_representation_item | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_uncertainty_measure_with_unit FOR (uncertainty_measure_with_unit); WHERE wr1: SIZEOF ( QUERY ( ent <* uncertainty_measure_with_unit | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* uncertainty_measure_with_unit | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* uncertainty_measure_with_unit | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_uncertainty_qualifier FOR (uncertainty_qualifier); WHERE wr1: SIZEOF ( QUERY ( ent <* uncertainty_qualifier | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* uncertainty_qualifier | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala. attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* uncertainty_qualifier | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_multi_language_for_versioned_action_request FOR (versioned_action_request); WHERE wr1: SIZEOF ( QUERY ( ent <* versioned_action_request | SIZEOF ( QUERY ( mlaa <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr2: SIZEOF ( QUERY ( ent <* versioned_action_request | SIZEOF ( QUERY ( ala <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala.attribute_name<>''description'' ) ) ) >0 ) ) = 0; wr3: SIZEOF ( QUERY ( ent <* versioned_action_request | ( SIZEOF ( QUERY ( mlaa1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( mlaa2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''MULTI_LANGUAGE_ATTRIBUTE_ASSIGNMENT.'' + ''ITEMS'' ) | ( mlaa1.attribute_name = mlaa2.attribute_name ) AND ( mlaa1.language = mlaa2.language ) ) ) >1 ) ) + SIZEOF ( QUERY ( ala1 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | SIZEOF ( QUERY ( ala2 <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''ATTRIBUTE_LANGUAGE_ASSIGNMENT.'' + ''ITEMS'' ) | ( ala1.attribute_name = ala2.attribute_name ) AND ( ala1.language = ala2.language ) ) ) >1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_name_assignment_for_kinematic_joint FOR (kinematic_joint); WHERE wr1: SIZEOF ( QUERY ( ent <* kinematic_joint | SIZEOF ( USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_NAME_ASSIGNMENT.'' + ''ITEMS'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_name_assignment_for_kinematic_link FOR (kinematic_link); WHERE wr1: SIZEOF ( QUERY ( ent <* kinematic_link | SIZEOF ( USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_NAME_ASSIGNMENT.'' + ''ITEMS'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_name_assignment_for_kinematic_structure FOR (kinematic_structure); WHERE wr1: SIZEOF ( QUERY ( ent <* kinematic_structure | SIZEOF ( USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_NAME_ASSIGNMENT.'' + ''ITEMS'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_name_for_known_source FOR (known_source); WHERE wr1: SIZEOF ( QUERY ( ks <* known_source | ( ks.name<> ''ISO 13584 library'' ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_part_occurrence FOR (product_definition, product_definition_occurrence_relationship); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( NOT ( pd.name IN [ ''single instance'' , ''selected instance'' , ''quantified instance'' , ''specified instance'' ] ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'' ) | pdr.name = ''definition usage'' ) ) <>1 ) AND ( SIZEOF ( QUERY ( cd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURATION_DESIGN.'' + ''DESIGN'' ) | ( cd.name = ''occurrence usage definition'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_IDENTIFICATION'' IN TYPEOF ( cd.configuration ) ) ) ) ) <>1 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( SIZEOF ( QUERY ( cd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATED_PRODUCT_DEFINITION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_USAGE'' IN TYPEOF ( cd ) ) ) ) = 0 ) AND ( SIZEOF ( USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.'' + ''OCCURRENCE'' ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( pd. name = ''selected instance'' ) AND ( SIZEOF ( QUERY ( prd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'' ) | ( prd.name = ''occurrence selection'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( prd , ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION'' ) | ( pdr.used_representation.name = ''selection criteria'' ) AND ( SIZEOF ( pdr. used_representation.items ) = 2 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) AND ( i.name = ''selection quantity'' ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''selection control'' ) ) ) = 1 ) ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( pd. name = ''quantified instance'' ) AND ( SIZEOF ( QUERY ( ppd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.'' + ''DEFINITION'' ) | ( ppd.name = ''occurrence quantity'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( ppd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr.used_representation.name = ''quantity'' ) AND ( SIZEOF ( pdr.used_representation.items ) = 1 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''quantity measure'' ) ) ) = 1 ) ) ) = 1 ) ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''part occurrence'' ) AND ( pd. name = ''specified instance'' ) AND ( SIZEOF ( QUERY ( pdor <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.'' + ''OCCURRENCE'' ) | ''AUTOMOTIVE_DESIGN.'' + ''SPECIFIED_HIGHER_USAGE_OCCURRENCE'' IN TYPEOF ( pdor. occurrence_usage ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_process_product_association FOR (process_product_association); WHERE wr1: SIZEOF ( QUERY ( ppa <* process_product_association | NOT ( ppa.name IN [''input'' , ''output'' , ''produced output'' ] ) ) ) = 0; wr2: SIZEOF ( QUERY ( ppa <* process_product_association | NOT ( ppa.name IN [''input'' , ''output''] ) OR ( SIZEOF ( QUERY ( ar <* USEDIN ( ppa.process , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_RELATIONSHIP.'' + ''RELATED_ACTION'' ) | ar.name = ''process operation occurrence'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( ppa <* process_product_association | ( ppa.name<> ''produced output'' ) OR ( ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION'' IN TYPEOF ( ppa.defined_product ) ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( ppa.defined_product\ product_definition. formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name IN [''part'' , ''tool'' , ''raw material'' ] ) ) = 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_categories_for_tool_part_relationship FOR ( product_definition_relationship); WHERE wr1: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''tool part relationship'' ) AND ( ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdr. relating_product_definition.formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''tool'' ) ) <1 ) OR ( SIZEOF ( QUERY ( prpc <* USEDIN ( pdr.related_product_definition. formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''part'' ) ) <1 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_category_for_product FOR (product); WHERE wr1: SIZEOF ( QUERY ( p <* product | SIZEOF ( QUERY ( prpc <* USEDIN ( p , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name IN [''part'' , ''raw material'' , ''tool'' , ''document'' , ''functionality'' , ''conceptual product'' , ''alternative solution'' , ''requirement'' , ''physically realized product'' ] ) ) = 0 ) ) = 0; wr2: SIZEOF ( QUERY ( p <* product | SIZEOF ( QUERY ( prpc <* USEDIN ( p , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name IN [''part'' , ''document'' , ''functionality'' , ''conceptual product'' , ''alternative solution'' , ''requirement'' , ''physically realized product'' ] ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_definition_context_for_external_properties FOR (general_property_association,product_definition); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( SIZEOF ( QUERY ( propd <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.PROPERTY_DEFINITION.DEFINITION'' ) | ( SIZEOF ( QUERY ( gpa <* USEDIN ( propd , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_PROPERTY_ASSOCIATION.'' + ''DERIVED_DEFINITION'' ) | ( gpa.name = ''definitional'' ) ) ) >0 ) ) ) >0 ) AND ( SIZEOF ( QUERY ( pdca <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.'' + ''DEFINITION'' ) | ( pdca.frame_of_reference.name = ''external'' ) AND ( pdca.role.name = ''external'' ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_definition_context_for_product FOR (product_definition, product_related_product_category); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name IN [ ''part definition'' , ''part occurrence'' ] ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd.formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name IN [''part'' , ''raw material'' , ''tool''] ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''functional definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd. formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''functionality'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''conceptual definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd. formation.of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''conceptual product'' ) ) = 0 ) ) ) = 0; wr4: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''alternative definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd.formation. of_product , ''AUTOMOTIVE_DESIGN.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS'' ) | prpc.name = ''alternative solution'' ) ) = 0 ) ) ) = 0; wr5: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''design constraint definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd.formation. of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name = ''requirement'' ) ) = 0 ) ) ) = 0; wr6: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''physical occurrence'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd.formation. of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name = ''physically realized product'' ) ) = 0 ) ) ) = 0; wr7: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name = ''physical document definition'' ) AND ( SIZEOF ( QUERY ( prpc <* USEDIN ( pd.formation. of_product , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_RELATED_PRODUCT_CATEGORY.'' + ''PRODUCTS'' ) | prpc. name = ''document'' ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_definition_for_mating_tree FOR (product_definition); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( SIZEOF ( QUERY ( pdca <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.'' + ''DEFINITION'' ) | pdca.frame_of_reference.name = ''mating definition'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATING_PRODUCT_DEFINITION'' ) | pdr.name = ''mating membership'' ) ) <>2 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pd <* product_definition | ( SIZEOF ( QUERY ( pdca <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.'' + ''DEFINITION'' ) | pdca.frame_of_reference.name = ''mating definition'' ) ) = 1 ) AND NOT ( {1<=SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATING_PRODUCT_DEFINITION'' ) | ( pdr.name = ''mating membership'' ) AND ( pdr. related_product_definition.frame_of_reference.name = ''part occurrence'' ) ) ) <=2} ) ) ) = 0; wr3: SIZEOF ( QUERY ( pd <* product_definition | ( SIZEOF ( QUERY ( pdca <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.'' + ''DEFINITION'' ) | pdca.frame_of_reference.name = ''mating definition'' ) ) = 1 ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP.'' + ''RELATING_PRODUCT_DEFINITION'' ) | ( pdr.name = ''mating membership'' ) AND ( SIZEOF ( QUERY ( pdca <* USEDIN ( pdr.related_product_definition , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION'' ) | pdca.frame_of_reference.name = ''mating definition'' ) ) = 1 ) ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_definition_substitute FOR (product_definition_substitute); WHERE wr1: SIZEOF ( QUERY ( pds <* product_definition_substitute | ( SIZEOF ( USEDIN ( pds , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EFFECTIVITY_ASSIGNMENT.'' + ''ITEMS'' ) ) = 0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( pds <* product_definition_substitute | pds.substitute_definition.frame_of_reference.name<> ''part occurrence'' ) ) = 0; wr3: SIZEOF ( QUERY ( pds <* product_definition_substitute | ( ( ''AUTOMOTIVE_DESIGN.'' + ''ASSEMBLY_COMPONENT_USAGE'' IN TYPEOF ( pds.context_relationship ) ) AND ( SIZEOF ( USEDIN ( pds.context_relationship , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_OCCURRENCE_RELATIONSHIP.'' + ''OCCURRENCE_USAGE'' ) ) = 0 ) ) AND ( ( ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_RELATIONSHIP'' IN TYPEOF ( pds.context_relationship ) ) AND ( pds. context_relationship.related_product_definition. frame_of_reference.name<> ''part occurrence'' ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_product_definitions_for_product_definition_relationship FOR (assembly_component_usage, product_definition_relationship); WHERE wr1: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''definition usage'' ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part definition'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''part occurrence'' ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name IN [ ''geometrical relationship'' , ''definition replacement'' ] ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part definition'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''part definition'' ) ) ) ) = 0; wr3: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( ''AUTOMOTIVE_DESIGN.'' + ''ASSEMBLY_COMPONENT_USAGE'' IN TYPEOF ( pdr ) ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part definition'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''part definition'' ) ) AND ( ( pdr.relating_product_definition.frame_of_reference. name<> ''physical occurrence'' ) OR ( pdr. related_product_definition.frame_of_reference.name<> ''physical occurrence'' ) ) ) ) = 0; wr4: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( ''AUTOMOTIVE_DESIGN.'' + ''ASSEMBLY_COMPONENT_USAGE'' IN TYPEOF ( pdr ) ) AND ( pdr.name = ''selected instance usage'' ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part definition'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''part definition'' ) ) ) ) = 0; wr5: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''physical realization'' ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part occurrence'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''physical occurrence'' ) ) ) ) = 0; wr6: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''physical occurrence usage'' ) AND ( NOT ( ''AUTOMOTIVE_DESIGN.'' + ''ASSEMBLY_COMPONENT_USAGE'' IN TYPEOF ( pdr ) ) OR ( pdr.relating_product_definition. frame_of_reference.name<> ''physical occurrence'' ) OR ( pdr.related_product_definition.frame_of_reference.name<> ''physical occurrence'' ) ) ) ) = 0; wr7: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''solution alternative definition'' ) AND ( NOT ( pdr.relating_product_definition. frame_of_reference.name IN [ ''alternative definition'' , ''functional definition'' , ''conceptual definition'' ] ) OR ( pdr.related_product_definition.frame_of_reference.name<> ''alternative definition'' ) ) ) ) = 0; wr8: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''collection membership'' ) AND ( ( pdr. relating_product_definition.frame_of_reference.name<> ''part definition'' ) OR ( pdr.related_product_definition. frame_of_reference.name<> ''part occurrence'' ) OR ( SIZEOF ( QUERY ( pdca <* USEDIN ( pdr. relating_product_definition , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_CONTEXT_ASSOCIATION.DEFINITION'' ) | ( pdca.role.name = ''part definition type'' ) AND ( pdca.frame_of_reference.name = ''collection definition'' ) ) ) = 0 ) ) ) ) = 0; wr9: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''design constraint association'' ) AND ( ( pdr.relating_product_definition.frame_of_reference.name<> ''design constraint definition'' ) OR NOT ( pdr. related_product_definition.frame_of_reference.name IN [ ''alternative definition'' , ''functional definition'' , ''conceptual definition'' ] ) ) ) ) = 0; wr10: SIZEOF ( QUERY ( pdr <* product_definition_relationship | ( pdr.name = ''final specification'' ) AND ( NOT ( pdr. relating_product_definition.name IN [''final'' , ''technical final'' , ''supplier final'' , ''technical supplier final'' ] ) OR ( pdr. relating_product_definition.frame_of_reference.name<> ''alternative definition'' ) ) OR NOT ( pdr. related_product_definition.name IN [ ''part definition'' , ''physical occurrence'' ] ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_properties_of_document_file FOR (document_file); WHERE wr1: SIZEOF ( QUERY ( df <* document_file | SIZEOF ( QUERY ( pd <* USEDIN ( df , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.'' + ''DEFINITION'' ) | pd.name = ''document property'' ) ) >1 ) ) = 0; wr2: SIZEOF ( QUERY ( df <* document_file | SIZEOF ( QUERY ( rt <* df.representation_types | ( ''AUTOMOTIVE_DESIGN.'' + ''DOCUMENT_REPRESENTATION_TYPE'' IN TYPEOF ( rt ) ) AND ( rt.name IN [''digital'' , ''physical''] ) ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_properties_of_document_representation FOR (product_definition); WHERE wr1: SIZEOF ( QUERY ( pd <* product_definition | ( pd. frame_of_reference.name IN [ ''physical document definition'' , ''digital document definition'' , ''physical model occurrence'' ] ) AND ( SIZEOF ( QUERY ( pd1 <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.'' + ''DEFINITION'' ) | pd1.name = ''document property'' ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_for_document_content_property FOR (representation, representation_item); WHERE wr1: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document content'' ) AND ( ( SIZEOF ( r.items ) <1 ) OR ( SIZEOF ( r.items ) >3 ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( ri <* representation_item | ( SIZEOF ( QUERY ( r <* USEDIN ( ri , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | r.name = ''document content'' ) ) >0 ) AND NOT ( ri.name IN [ ''detail level'' , ''geometry type'' , ''real world scale'' ] ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document content'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''detail level'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document content'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''geometry type'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; wr5: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document content'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''real world scale'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) = 1 ) ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_for_document_creation_property FOR (representation,representation_item); WHERE wr1: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document creation'' ) AND ( ( SIZEOF ( r.items ) <2 ) OR ( SIZEOF ( r.items ) >3 ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( ri <* representation_item | ( SIZEOF ( QUERY ( r <* USEDIN ( ri , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | r.name = ''document creation'' ) ) >0 ) AND NOT ( ri.name IN [ ''creating interface'' , ''creating system'' , ''operating system'' ] ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document creation'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''creating interface'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document creation'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''creating system'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) <>1 ) ) ) = 0; wr5: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document creation'' ) AND ( SIZEOF ( QUERY ( i <* r. items | ( i.name = ''operating system'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_for_document_format_property FOR (representation, representation_item); WHERE wr1: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document format'' ) AND ( ( SIZEOF ( r.items ) <1 ) OR ( SIZEOF ( r.items ) >2 ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( ri <* representation_item | ( SIZEOF ( QUERY ( r <* USEDIN ( ri , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | r.name = ''document format'' ) ) >0 ) AND NOT ( ri.name IN [ ''character code'' , ''data format'' ] ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document format'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( i.name = ''character code'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document format'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( i.name = ''data format'' ) AND ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_for_document_properties FOR (property_definition, representation, representation_context); WHERE wr1: SIZEOF ( QUERY ( pd <* property_definition | ( pd.name = ''document property'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | NOT ( pdr.used_representation.name IN [ ''document content'' , ''document creation'' , ''document format'' , ''document size'' ] ) ) ) >0 ) ) ) = 0; wr2: SIZEOF ( QUERY ( r <* representation | ( r.name IN [ ''document content'' , ''document creation'' , ''document format'' , ''document size'' ] ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( r , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''USED_REPRESENTATION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION'' IN TYPEOF ( pdr.definition ) ) AND ( pdr.definition.name = ''document property'' ) ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name IN [ ''document content'' , ''document creation'' , ''document format'' , ''document size'' ] ) AND ( r. context_of_items.context_type<> ''document parameters'' ) ) ) = 0; wr4: SIZEOF ( QUERY ( rc <* representation_context | ( rc. context_type = ''document parameters'' ) AND ( SIZEOF ( QUERY ( r <* USEDIN ( rc , ''AUTOMOTIVE_DESIGN.REPRESENTATION.CONTEXT_OF_ITEMS'' ) | NOT ( r.name IN [ ''document content'' , ''document creation'' , ''document format'' , ''document size'' ] ) ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_for_document_size_property FOR (representation, representation_item); WHERE wr1: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document size'' ) AND ( ( SIZEOF ( r.items ) <1 ) OR ( SIZEOF ( r.items ) >2 ) ) ) ) = 0; wr2: SIZEOF ( QUERY ( ri <* representation_item | ( SIZEOF ( QUERY ( r <* USEDIN ( ri , ''AUTOMOTIVE_DESIGN.REPRESENTATION.ITEMS'' ) | r.name = ''document size'' ) ) >0 ) AND NOT ( ri.name IN [ ''file size'' , ''page count'' ] ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document size'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( i.name = ''file size'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) = 1 ) ) ) >1 ) ) ) = 0; wr4: SIZEOF ( QUERY ( r <* representation | ( r.name = ''document size'' ) AND ( SIZEOF ( QUERY ( i <* r.items | ( i.name = ''page count'' ) AND ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_REPRESENTATION_ITEM'']* TYPEOF ( i ) ) = 1 ) ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_representation_item_for_hybrid_geometric_model_3d FOR ( shape_representation); WHERE wr1: SIZEOF ( QUERY ( sr <* shape_representation | ( sr.name = ''hybrid 3d shape representation'' ) AND ( SIZEOF ( QUERY ( i <* sr.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRIC_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_treatment_result FOR (representation); WHERE wr1: ( SIZEOF ( QUERY ( r <* representation | ( r.name = ''treatment result'' ) AND ( SIZEOF ( r.items ) >2 ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( r <* representation | ( r. name = ''treatment result'' ) AND ( SIZEOF ( QUERY ( i <* r.items | NOT ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) ) ) >0 ) ) ) = 0 ) ; wr2: SIZEOF ( QUERY ( r <* representation | ( r.name = ''treatment result'' ) AND ( SIZEOF ( QUERY ( i <* r. items | i.name = ''result'' ) ) = 0 ) ) ) = 0; wr3: SIZEOF ( QUERY ( r <* representation | ( r.name = ''treatment result'' ) AND ( SIZEOF ( QUERY ( i <* r. items | i.name = ''purpose'' ) ) >1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_action FOR (action); WHERE wr1: SIZEOF ( QUERY ( ent <* action | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_action_directive FOR (action_directive); WHERE wr1: SIZEOF ( QUERY ( ent <* action_directive | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_action_method FOR (action_method); WHERE wr1: SIZEOF ( QUERY ( ent <* action_method | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_applied_identification_assignment FOR (applied_identification_assignment); WHERE wr1: SIZEOF ( QUERY ( ent <* applied_identification_assignment | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_class FOR (class); WHERE wr1: SIZEOF ( QUERY ( ent <* class | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_configuration_item FOR ( configuration_item); WHERE wr1: SIZEOF ( QUERY ( ent <* configuration_item | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_document_file FOR (document_file); WHERE wr1: SIZEOF ( QUERY ( ent <* document_file | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_draughting_model FOR (draughting_model); WHERE wr1: SIZEOF ( QUERY ( ent <* draughting_model | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_effectivity FOR (effectivity); WHERE wr1: SIZEOF ( QUERY ( ent <* effectivity | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_general_property FOR (general_property); WHERE wr1: SIZEOF ( QUERY ( ent <* general_property | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_m_d_g_p_r FOR (mechanical_design_geometric_presentation_representation); WHERE wr1: SIZEOF ( QUERY ( ent <* mechanical_design_geometric_presentation_representation | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia.role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; RULE restrict_version_assignment_for_presentation_area FOR (presentation_area); WHERE wr1: SIZEOF ( QUERY ( ent <* presentation_area | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_product_concept FOR (product_concept); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_product_concept_feature FOR ( product_concept_feature); WHERE wr1: SIZEOF ( QUERY ( ent <* product_concept_feature | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia.role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_version_assignment_for_shape_representation FOR ( shape_representation); WHERE wr1: SIZEOF ( QUERY ( ent <* shape_representation | SIZEOF ( QUERY ( ia <* USEDIN ( ent , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT.'' + ''ITEMS'' ) | ia. role.name = ''version'' ) ) >1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_viewing_plane_usage FOR (geometric_tolerance); WHERE wr1: SIZEOF ( QUERY ( gt <* geometric_tolerance | SIZEOF ( QUERY ( sar <* USEDIN ( gt.toleranced_shape_aspect , ''AUTOMOTIVE_DESIGN.SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | sar.name = ''affected plane association'' ) ) >1 ) ) = 0; wr2: SIZEOF ( QUERY ( gt <* geometric_tolerance | SIZEOF ( QUERY ( sar <* USEDIN ( gt.toleranced_shape_aspect , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_RELATIONSHIP.'' + ''RELATING_SHAPE_ASPECT'' ) | ( sar.name = ''affected plane association'' ) AND NOT ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''LINE_PROFILE_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARALLELISM_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PERPENDICULARITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''POSITION_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''STRAIGHTNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''SYMMETRY_TOLERANCE'']* TYPEOF ( gt ) ) <>1 ) ) ) >0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE restrict_zone_boundary FOR (tolerance_zone_definition); WHERE wr1: SIZEOF ( QUERY ( tzd <* tolerance_zone_definition | SIZEOF ( tzd.boundaries ) >2 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE retention_requires_retention_assignment FOR (retention); WHERE wr1: SIZEOF ( QUERY ( r <* retention | SIZEOF ( QUERY ( aa <* USEDIN ( r , ''AUTOMOTIVE_DESIGN.'' + ''ACTION_ASSIGNMENT.'' + ''ASSIGNED_ACTION'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ACTION_ASSIGNMENT'' IN TYPEOF ( aa ) ) AND ( aa. role.name = ''retention'' ) ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE security_classification_requires_security_classification_assignment FOR (security_classification); WHERE wr1: SIZEOF ( QUERY ( sc <* security_classification | SIZEOF ( USEDIN ( sc , ''AUTOMOTIVE_DESIGN.'' + ''SECURITY_CLASSIFICATION_ASSIGNMENT.'' + ''ASSIGNED_SECURITY_CLASSIFICATION'' ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE selected_instance_usage_requires_representation FOR ( assembly_component_usage,representation); WHERE wr1: SIZEOF ( QUERY ( acr <* assembly_component_usage | ( acr.name = ''selected instance usage'' ) AND ( SIZEOF ( QUERY ( pd <* USEDIN ( acr , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION.'' + ''DEFINITION'' ) | ( pd.name = ''occurrence selection'' ) AND ( SIZEOF ( QUERY ( pdr <* USEDIN ( pd , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_DEFINITION_REPRESENTATION.'' + ''DEFINITION'' ) | ( pdr.used_representation.name = ''selection criteria'' ) AND ( SIZEOF ( pdr.used_representation.items ) = 2 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation. items | ( SIZEOF ( [''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE'']* TYPEOF ( i ) ) = 1 ) AND ( i.name = ''selection quantity'' ) ) ) = 1 ) AND ( SIZEOF ( QUERY ( i <* pdr.used_representation.items | ( ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' IN TYPEOF ( i ) ) AND ( i.name = ''selection control'' ) ) ) = 1 ) ) ) >0 ) ) ) = 0 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE sheets_belong_to_one_drawing FOR (drawing_sheet_revision); WHERE wr1: SIZEOF ( QUERY ( dsr <* drawing_sheet_revision | SIZEOF ( QUERY ( dsru <* USEDIN ( dsr , ''AUTOMOTIVE_DESIGN.AREA_IN_SET.AREA'' ) | ( ''AUTOMOTIVE_DESIGN.'' + ''DRAWING_SHEET_REVISION_USAGE'' IN TYPEOF ( dsru ) ) ) ) <>1 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE styled_curve FOR (styled_item); WHERE wr1: SIZEOF ( QUERY ( si <* styled_item | ( ''AUTOMOTIVE_DESIGN.'' + ''CURVE'' IN TYPEOF ( si.item ) ) AND ( SIZEOF ( QUERY ( psa <* si.styles | ( SIZEOF ( QUERY ( cs <* psa.styles | ( ''AUTOMOTIVE_DESIGN.'' + ''CURVE_STYLE'' IN TYPEOF ( cs ) ) ) ) >0 ) ) ) <>1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_action FOR (action); WHERE wr1: SIZEOF ( QUERY ( a <* action | NOT ( type_check_function ( a , [''AUTOMOTIVE_DESIGN.'' + ''ELEMENT_DELIVERY'' , ''AUTOMOTIVE_DESIGN.'' + ''EXECUTED_ACTION'' , ''AUTOMOTIVE_DESIGN.'' + ''PROCESS_PLAN'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_PROCESS'' , ''AUTOMOTIVE_DESIGN.'' + ''PROPERTY_PROCESS'' , ''AUTOMOTIVE_DESIGN.'' + ''RETENTION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_characterized_object FOR (characterized_object); WHERE wr1: SIZEOF ( QUERY ( co <* characterized_object | NOT ( type_check_function ( co , [''AUTOMOTIVE_DESIGN.'' + ''CHARACTERIZED_CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''DOCUMENT_FILE'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_IDENTIFICATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_classification_assignment FOR ( classification_assignment); WHERE wr1: SIZEOF ( QUERY ( ca <* classification_assignment | NOT ( type_check_function ( ca , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_CLASSIFICATION_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''LANGUAGE_ASSIGNMENT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_colour FOR (colour); WHERE wr1: SIZEOF ( QUERY ( c <* colour | NOT ( type_check_function ( c , [''AUTOMOTIVE_DESIGN.'' + ''COLOUR_SPECIFICATION'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_COLOUR''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_compound_representation_item FOR ( compound_representation_item); WHERE wr1: SIZEOF ( QUERY ( cri <* compound_representation_item | NOT ( type_check_function ( cri , [''AUTOMOTIVE_DESIGN.'' + ''DEFAULT_TOLERANCE_TABLE_CELL'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_RANGE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_document_reference FOR (document_reference); WHERE wr1: SIZEOF ( QUERY ( dr <* document_reference | NOT ( type_check_function ( dr , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_DOCUMENT_REFERENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SPECIFICATION_REFERENCE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_effectivity FOR (effectivity); WHERE wr1: SIZEOF ( QUERY ( e <* effectivity | NOT ( type_check_function ( e , [''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_EFFECTIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''TIME_INTERVAL_BASED_EFFECTIVITY''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_effectivity_assignment FOR (effectivity_assignment); WHERE wr1: SIZEOF ( QUERY ( ea <* effectivity_assignment | NOT ( type_check_function ( ea , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_EFFECTIVITY_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_INEFFECTIVITY_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURED_EFFECTIVITY_ASSIGNMENT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_effectivity_context_assignment FOR ( effectivity_context_assignment); WHERE wr1: SIZEOF ( QUERY ( eca <* effectivity_context_assignment | NOT ( type_check_function ( eca , [''AUTOMOTIVE_DESIGN.'' + ''CLASS_USAGE_EFFECTIVITY_CONTEXT_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''CONFIGURED_EFFECTIVITY_CONTEXT_ASSIGNMENT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_externally_defined_item FOR ( externally_defined_item); WHERE wr1: SIZEOF ( QUERY ( edi <* externally_defined_item | NOT ( type_check_function ( edi , [''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CHARACTER_GLYPH'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CURVE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_GENERAL_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_HATCH_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_TEXT_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_TILE_STYLE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_feature_component_relationship FOR ( feature_component_relationship); WHERE wr1: SIZEOF ( QUERY ( fcr <* feature_component_relationship | NOT ( type_check_function ( fcr , [''AUTOMOTIVE_DESIGN.'' + ''PATTERN_OFFSET_MEMBERSHIP'' , ''AUTOMOTIVE_DESIGN.'' + ''PATTERN_OMIT_MEMBERSHIP''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_feature_definition FOR (feature_definition); WHERE wr1: SIZEOF ( QUERY ( fd <* feature_definition | NOT ( type_check_function ( fd , [''AUTOMOTIVE_DESIGN.'' + ''BARRING_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''BEAD'' , ''AUTOMOTIVE_DESIGN.'' + ''BOSS'' , ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''GENERAL_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''HOLE_IN_PANEL'' , ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE'' , ''AUTOMOTIVE_DESIGN.'' + ''LOCATOR'' , ''AUTOMOTIVE_DESIGN.'' + ''POCKET'' , ''AUTOMOTIVE_DESIGN.'' + ''REPLICATE_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''RIB'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUND_HOLE'' , ''AUTOMOTIVE_DESIGN.'' + ''SLOT'' , ''AUTOMOTIVE_DESIGN.'' + ''THREAD''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_founded_item FOR (founded_item); WHERE wr1: SIZEOF ( QUERY ( fi <* founded_item | NOT ( type_check_function ( fi , [''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_CURVE_SEGMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_PATCH'' , ''AUTOMOTIVE_DESIGN.'' + ''VIEW_VOLUME''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_geometric_tolerance FOR (geometric_tolerance); WHERE wr1: SIZEOF ( QUERY ( gt <* geometric_tolerance | NOT ( type_check_function ( gt , [''AUTOMOTIVE_DESIGN.'' + ''ANGULARITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_RUNOUT_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''COAXIALITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CONCENTRICITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CYLINDRICITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''FLATNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''LINE_PROFILE_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARALLELISM_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PERPENDICULARITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''POSITION_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''STRAIGHTNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_PROFILE_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''SYMMETRY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''TOTAL_RUNOUT_TOLERANCE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_group FOR (group); WHERE wr1: SIZEOF ( QUERY ( g <* group | NOT ( type_check_function ( g , [''AUTOMOTIVE_DESIGN.'' + ''CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''CLASS_SYSTEM'' , ''AUTOMOTIVE_DESIGN.'' + ''LANGUAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY'' , ''AUTOMOTIVE_DESIGN.'' + ''REP_ITEM_GROUP''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_group_assignment FOR (group_assignment); WHERE wr1: SIZEOF ( QUERY ( ga <* group_assignment | NOT ( type_check_function ( ga , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_GROUP_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_CONCEPT_FEATURE_CATEGORY_USAGE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_identification_assignment FOR ( identification_assignment); WHERE wr1: SIZEOF ( QUERY ( ia <* identification_assignment | NOT ( type_check_function ( ia , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_IDENTIFICATION_ASSIGNMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNAL_IDENTIFICATION_ASSIGNMENT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_mapped_item FOR (mapped_item); WHERE wr1: SIZEOF ( QUERY ( mi <* mapped_item | NOT ( type_check_function ( mi , [''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT_CHARACTER'' , ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_TEXT_ASSOCIATIVITY''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_pre_defined_item FOR (pre_defined_item); WHERE wr1: SIZEOF ( QUERY ( pdi <* pre_defined_item | NOT ( type_check_function ( pdi , [''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_COLOUR'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_CURVE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_MARKER'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_PRESENTATION_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_TEXT_FONT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_pre_defined_symbol FOR (pre_defined_symbol); WHERE wr1: SIZEOF ( QUERY ( pds <* pre_defined_symbol | NOT ( type_check_function ( pds , [''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_DIMENSION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_GEOMETRICAL_TOLERANCE_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_POINT_MARKER_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_SURFACE_CONDITION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_TERMINATOR_SYMBOL''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_presentation_area FOR (presentation_area); WHERE wr1: SIZEOF ( QUERY ( pa <* presentation_area | NOT ( type_check_function ( pa , [''AUTOMOTIVE_DESIGN.'' + ''DRAWING_SHEET_REVISION'' , ''AUTOMOTIVE_DESIGN.'' + ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_AREA''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_presentation_representation FOR ( presentation_representation); WHERE wr1: SIZEOF ( QUERY ( pr <* presentation_representation | NOT ( type_check_function ( pr , [''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_AREA'' , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_VIEW''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_property_definition FOR (property_definition); WHERE wr1: SIZEOF ( QUERY ( pd <* property_definition | NOT ( type_check_function ( pd , [''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_PROPERTY_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''MATERIAL_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_DEFINITION_SHAPE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_property_definition_representation FOR ( property_definition_representation); WHERE wr1: SIZEOF ( QUERY ( pdr <* property_definition_representation | NOT ( type_check_function ( pdr , [''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_PROPERTY_REPRESENTATION_RELATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MATERIAL_PROPERTY_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINITION_REPRESENTATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_replicate_feature FOR (replicate_feature); WHERE wr1: SIZEOF ( QUERY ( rf <* replicate_feature | NOT ( type_check_function ( rf , [''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''MODIFIED_PATTERN'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_PATTERN''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_representation FOR (representation); WHERE wr1: SIZEOF ( QUERY ( r <* representation | NOT ( type_check_function ( r , [''AUTOMOTIVE_DESIGN.'' + ''CONSTRUCTIVE_GEOMETRY_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''CONTACT_RATIO_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''DEFAULT_TOLERANCE_TABLE'' , ''AUTOMOTIVE_DESIGN.'' + ''DEFINITIONAL_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_MODEL'' , ''AUTOMOTIVE_DESIGN.'' + ''FOUNDED_KINEMATIC_PATH'' , ''AUTOMOTIVE_DESIGN.'' + ''HARDNESS_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_FRAME_BACKGROUND_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_GROUND_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_LINK_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MOMENTS_OF_INERTIA_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''PRESENTATION_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_TEXTURE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''SYMBOL_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''TACTILE_APPEARANCE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''TEXT_STRING_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''VISUAL_APPEARANCE_REPRESENTATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_representation_item FOR (representation_item); WHERE wr1: SIZEOF ( QUERY ( ri <* representation_item | NOT ( type_check_function ( ri , [''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''DESCRIPTIVE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_PATH'' , ''AUTOMOTIVE_DESIGN.'' + ''MEASURE_REPRESENTATION_ITEM'' , ''AUTOMOTIVE_DESIGN.'' + ''REP_ITEM_GROUP'' , ''AUTOMOTIVE_DESIGN.'' + ''VALUE_REPRESENTATION_ITEM''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_representation_map FOR (representation_map); WHERE wr1: SIZEOF ( QUERY ( rm <* representation_map | NOT ( type_check_function ( rm , [''AUTOMOTIVE_DESIGN.'' + ''CAMERA_USAGE'' , ''AUTOMOTIVE_DESIGN.'' + ''SYMBOL_REPRESENTATION_MAP''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_representation_relationship FOR ( representation_relationship); WHERE wr1: SIZEOF ( QUERY ( rr <* representation_relationship | NOT ( type_check_function ( rr , [''AUTOMOTIVE_DESIGN.'' + ''CONSTRUCTIVE_GEOMETRY_REPRESENTATION_RELATIONSHIP'' , ''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_LINK_REPRESENTATION_ASSOCIATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MOTION_LINK_RELATIONSHIP''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_representation_relationship_with_transformation FOR(representation_relationship_with_transformation); WHERE wr1: SIZEOF ( QUERY ( rrwt <* representation_relationship_with_transformation | NOT ( type_check_function ( rrwt , [''AUTOMOTIVE_DESIGN.'' + ''KINEMATIC_FRAME_BACKGROUND_REPRESENTATION_ASSOCIATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MECHANISM_BASE_PLACEMENT''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_shape_aspect FOR (shape_aspect); WHERE wr1: SIZEOF ( QUERY ( sa <* shape_aspect | NOT ( type_check_function ( sa , [''AUTOMOTIVE_DESIGN.'' + ''APPLIED_AREA'' , ''AUTOMOTIVE_DESIGN.'' + ''BEAD_END'' , ''AUTOMOTIVE_DESIGN.'' + ''BOSS_TOP'' , ''AUTOMOTIVE_DESIGN.'' + ''CHAMFER_OFFSET'' , ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''CLOSED_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''DIRECTED_ANGLE'' , ''AUTOMOTIVE_DESIGN.'' + ''HOLE_BOTTOM'' , ''AUTOMOTIVE_DESIGN.'' + ''INSTANCED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''JOGGLE_TERMINATION'' , ''AUTOMOTIVE_DESIGN.'' + ''NGON_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''OPEN_PATH_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARTIAL_CIRCULAR_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''PATH_FEATURE_COMPONENT'' , ''AUTOMOTIVE_DESIGN.'' + ''PLACED_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''POCKET_BOTTOM'' , ''AUTOMOTIVE_DESIGN.'' + ''RECTANGULAR_CLOSED_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDED_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''SLOT_END'' , ''AUTOMOTIVE_DESIGN.'' + ''SQUARE_U_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TAPER'' , ''AUTOMOTIVE_DESIGN.'' + ''TEE_PROFILE'' , ''AUTOMOTIVE_DESIGN.'' + ''TOLERANCE_ZONE'' , ''AUTOMOTIVE_DESIGN.'' + ''TRANSITION_FEATURE'' , ''AUTOMOTIVE_DESIGN.'' + ''VEE_PROFILE''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_shape_aspect_relationship FOR ( shape_aspect_relationship); WHERE wr1: SIZEOF ( QUERY ( sar <* shape_aspect_relationship | NOT ( type_check_function ( sar , [''AUTOMOTIVE_DESIGN.'' + ''DIMENSIONAL_LOCATION'' , ''AUTOMOTIVE_DESIGN.'' + ''FEATURE_COMPONENT_RELATIONSHIP'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_ASSOCIATIVITY'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_DERIVING_RELATIONSHIP'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_ASPECT_TRANSITION'' , ''AUTOMOTIVE_DESIGN.'' + ''SHAPE_DEFINING_RELATIONSHIP''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_shape_representation_feature_geometry FOR ( shape_representation); WHERE wr1: SIZEOF ( QUERY ( sr <* shape_representation | NOT ( type_check_function ( sr , [''AUTOMOTIVE_DESIGN.'' + ''DIRECTION_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''FACE_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''LOCATION_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''PATH_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''PLANAR_SHAPE_REPRESENTATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_shape_representation_geometry FOR (shape_representation); WHERE wr1: SIZEOF ( QUERY ( sr <* shape_representation | NOT ( type_check_function ( sr , [''AUTOMOTIVE_DESIGN.'' + ''ADVANCED_BREP_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''COMPOUND_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''CSG_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''FACETED_BREP_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''MANIFOLD_SURFACE_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''POINT_PLACEMENT_SHAPE_REPRESENTATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_symbol_representation FOR (symbol_representation); WHERE wr1: SIZEOF ( QUERY ( sr <* symbol_representation | NOT ( type_check_function ( sr , [''AUTOMOTIVE_DESIGN.'' + ''CHARACTER_GLYPH_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SUBFIGURE_REPRESENTATION'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_SYMBOL_REPRESENTATION''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_exclusiveness_transition_feature FOR (transition_feature); WHERE wr1: SIZEOF ( QUERY ( tf <* transition_feature | NOT ( type_check_function ( tf , [''AUTOMOTIVE_DESIGN.'' + ''CHAMFER'' , ''AUTOMOTIVE_DESIGN.'' + ''EDGE_ROUND'' , ''AUTOMOTIVE_DESIGN.'' + ''FILLET''] , 3 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_address FOR (address); WHERE wr1: SIZEOF ( QUERY ( a <* address | NOT ( type_check_function ( a , [''AUTOMOTIVE_DESIGN.'' + ''ORGANIZATIONAL_ADDRESS'' , ''AUTOMOTIVE_DESIGN.'' + ''PERSONAL_ADDRESS''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_annotation_occurrence FOR (annotation_occurrence); WHERE wr1: SIZEOF ( QUERY ( ao <* annotation_occurrence | NOT ( type_check_function ( ao , [''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_CURVE_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_FILL_AREA_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_SYMBOL_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ANNOTATION_TEXT_OCCURRENCE'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_ANNOTATION_OCCURRENCE''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_camera_image FOR (camera_image); WHERE wr1: SIZEOF ( QUERY ( ci <* camera_image | NOT ( type_check_function ( ci , [''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE_2D_WITH_SCALE'' , ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_IMAGE_3D_WITH_SCALE''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_camera_model FOR (camera_model); WHERE wr1: SIZEOF ( QUERY ( cm <* camera_model | NOT ( type_check_function ( cm , [''AUTOMOTIVE_DESIGN.'' + ''CAMERA_MODEL_D2'' , ''AUTOMOTIVE_DESIGN.'' + ''CAMERA_MODEL_D3''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_colour_specification FOR (colour_specification); WHERE wr1: SIZEOF ( QUERY ( cs <* colour_specification | NOT ( type_check_function ( cs , [''AUTOMOTIVE_DESIGN.'' + ''COLOUR_RGB''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_configurable_item FOR (configurable_item); WHERE wr1: SIZEOF ( QUERY ( ci <* configurable_item | NOT ( type_check_function ( ci , [''AUTOMOTIVE_DESIGN.'' + ''PRODUCT_SPECIFICATION''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_document_product_association FOR ( document_product_association); WHERE wr1: SIZEOF ( QUERY ( dpa <* document_product_association | NOT ( type_check_function ( dpa , [''AUTOMOTIVE_DESIGN.'' + ''DOCUMENT_PRODUCT_EQUIVALENCE''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_draughting_callout FOR (draughting_callout); WHERE wr1: SIZEOF ( QUERY ( dc <* draughting_callout | NOT ( type_check_function ( dc , [''AUTOMOTIVE_DESIGN.'' + ''DATUM_FEATURE_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''DATUM_TARGET_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''DIMENSION_CURVE_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_ELEMENTS'' , ''AUTOMOTIVE_DESIGN.'' + ''GEOMETRICAL_TOLERANCE_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''LEADER_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''PROJECTION_DIRECTED_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''STRUCTURED_DIMENSION_CALLOUT'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_CONDITION_CALLOUT''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_externally_defined_item FOR (externally_defined_item); WHERE wr1: SIZEOF ( QUERY ( edi <* externally_defined_item | NOT ( type_check_function ( edi , [''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CHARACTER_GLYPH'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CLASS'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_CURVE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_FEATURE_DEFINITION'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_GENERAL_PROPERTY'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_HATCH_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_TEXT_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''EXTERNALLY_DEFINED_TILE_STYLE''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_founded_item FOR (founded_item); WHERE wr1: SIZEOF ( QUERY ( fi <* founded_item | NOT ( type_check_function ( fi , [''AUTOMOTIVE_DESIGN.'' + ''COMPOSITE_CURVE_SEGMENT'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_PATCH'' , ''AUTOMOTIVE_DESIGN.'' + ''VIEW_VOLUME''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_geometric_tolerance FOR (geometric_tolerance); WHERE wr1: SIZEOF ( QUERY ( gt <* geometric_tolerance | NOT ( type_check_function ( gt , [''AUTOMOTIVE_DESIGN.'' + ''ANGULARITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CIRCULAR_RUNOUT_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''COAXIALITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CONCENTRICITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''CYLINDRICITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''FLATNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''LINE_PROFILE_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PARALLELISM_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PERPENDICULARITY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''POSITION_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''ROUNDNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''STRAIGHTNESS_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''SURFACE_PROFILE_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''SYMMETRY_TOLERANCE'' , ''AUTOMOTIVE_DESIGN.'' + ''TOTAL_RUNOUT_TOLERANCE''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_pre_defined_colour FOR (pre_defined_colour); WHERE wr1: SIZEOF ( QUERY ( pdc <* pre_defined_colour | NOT ( type_check_function ( pdc , [''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_COLOUR''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_pre_defined_curve_font FOR (pre_defined_curve_font); WHERE wr1: SIZEOF ( QUERY ( pdcf <* pre_defined_curve_font | NOT ( type_check_function ( pdcf , [''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_CURVE_FONT''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_pre_defined_item FOR (pre_defined_item); WHERE wr1: SIZEOF ( QUERY ( pdi <* pre_defined_item | NOT ( type_check_function ( pdi , [''AUTOMOTIVE_DESIGN.'' + ''KNOWN_SOURCE'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_COLOUR'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_CURVE_FONT'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_MARKER'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_PRESENTATION_STYLE'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_TEXT_FONT''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_pre_defined_symbol FOR (pre_defined_symbol); WHERE wr1: SIZEOF ( QUERY ( pds <* pre_defined_symbol | NOT ( type_check_function ( pds , [''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_GEOMETRICAL_TOLERANCE_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_SURFACE_CONDITION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_DIMENSION_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_POINT_MARKER_SYMBOL'' , ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_TERMINATOR_SYMBOL''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE subtype_mandatory_pre_defined_text_font FOR (pre_defined_text_font); WHERE wr1: SIZEOF ( QUERY ( pdtf <* pre_defined_text_font | NOT ( type_check_function ( pdtf , [''AUTOMOTIVE_DESIGN.'' + ''DRAUGHTING_PRE_DEFINED_TEXT_FONT''] , 0 ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE terminator_symbol_constraint FOR (terminator_symbol); WHERE wr1: SIZEOF ( QUERY ( ts <* terminator_symbol | ( ( ''AUTOMOTIVE_DESIGN.'' + ''DEFINED_SYMBOL'' IN TYPEOF ( ts. item ) ) AND NOT ( ''AUTOMOTIVE_DESIGN.'' + ''PRE_DEFINED_TERMINATOR_SYMBOL'' IN TYPEOF ( ts.item\ defined_symbol.definition ) ) ) ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE text_font_usage FOR (externally_defined_text_font, pre_defined_text_font); WHERE wr1: SIZEOF ( QUERY ( pdtf <* pre_defined_text_font | SIZEOF ( USEDIN ( pdtf , ''AUTOMOTIVE_DESIGN.TEXT_LITERAL.FONT'' ) ) = 0 ) ) = 0; wr2: SIZEOF ( QUERY ( edtf <* externally_defined_text_font | SIZEOF ( USEDIN ( edtf , ''AUTOMOTIVE_DESIGN.TEXT_LITERAL.FONT'' ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE versioned_action_request_requires_date_and_person_or_organization FOR (versioned_action_request); WHERE wr1: SIZEOF ( QUERY ( va <* versioned_action_request | ( SIZEOF ( QUERY ( adapaoa <* USEDIN ( va , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | adapaoa.role.name = ''requestor'' ) ) + SIZEOF ( QUERY ( adaoa <* USEDIN ( va , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | adaoa. role.name = ''requestor'' ) ) ) = 0 ) ) = 0; wr2: SIZEOF ( QUERY ( va <* versioned_action_request | ( SIZEOF ( QUERY ( adapaoa <* USEDIN ( va , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_PERSON_AND_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | adapaoa.role.name = ''notified person or organization'' ) ) + SIZEOF ( QUERY ( adaoa <* USEDIN ( va , ''AUTOMOTIVE_DESIGN.'' + ''APPLIED_ORGANIZATION_ASSIGNMENT.'' + ''ITEMS'' ) | adaoa.role.name = ''notified person or organization'' ) ) ) = 0 ) ) = 0; END_RULE; -- 10303-214: automotive_design RULE versioned_action_request_requires_status FOR (action_request_status, versioned_action_request); WHERE wr1: SIZEOF ( QUERY ( ar <* versioned_action_request | NOT ( SIZEOF ( QUERY ( ars <* action_request_status | ar:=:ars. assigned_request ) ) = 1 ) ) ) = 0; END_RULE; -- 10303-214: automotive_design END_SCHEMA; '! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 1/23/2012 18:00'! carRegistration ^ 'SCHEMA CarRegistration; ENTITY date; day : INTEGER; month : INTEGER; year : INTEGER; WHERE days_ok : { 1 <= day <= 31 }; year_ok : year > 0; month : valid_date ( SELF ); END_ENTITY; TYPE name = STRING; END_TYPE; TYPE identification_no = STRING; END_TYPE; ENTITY history; car : car; transfers : LIST [ 0 : ? ] OF UNIQUE transfer; UNIQUE unique_car : car; END_ENTITY; ENTITY car; mnfg_no : identification_no; registration_no : identification_no; model : car_model; destruction_date : date; production_date : date; production_year : INTEGER; owned_by : owner; serial_number : STRING; UNIQUE unique_serial : serial_number; WHERE jan_prod : ( production_year = production_date.year ) XOR ( ( production_date.month = 1 ) AND ( production_year = production_date.year - 1 ) ); END_ENTITY; ENTITY destroyed_car SUBTYPE OF ( car ); destroyed_on : date; WHERE dates_ok : days_between ( production_date, destroyed_on ) >= 0; END_ENTITY; ENTITY car_model; model_name : name; fuel_consumption : REAL; made_by : manufacturer; UNIQUE unique_model_name : model_name; WHERE authorized_consumption : { 4.0 <= fuel_consumption <= 25.0 }; END_ENTITY; ENTITY manufacturer SUBTYPE OF ( named_owner ); END_ENTITY; ENTITY dealership SUBTYPE OF ( named_owner ); END_ENTITY; ENTITY person SUBTYPE OF ( named_owner ); END_ENTITY; ENTITY group SUBTYPE OF ( owner ); members : SET [ 1 : ? ] OF person; END_ENTITY; ENTITY owner ABSTRACT SUPERTYPE OF ( ONEOF ( named_owner, group ) ); END_ENTITY; ENTITY named_owner ABSTRACT SUPERTYPE OF ( ONEOF ( manufacturer, dealership, person ) ) SUBTYPE OF ( owner ); called : name; UNIQUE name_must_be_unique : called; END_ENTITY; ENTITY authorized_manufacturer SUBTYPE OF ( manufacturer ); END_ENTITY; ENTITY transfer; transferred_car : car; transfer_date : date; transferred_by : owner; transferred_to : owner; INVERSE must_be_in_history : history FOR transfers; WHERE wr1 : NOT ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_to ) ); wr2 : ( NOT ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_by ) ) ) XOR ( ( ''CARREGISTRATION.MANUFACTURER'' IN TYPEOF ( transferred_by ) ) AND ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_to ) ) ); wr3 : ( NOT ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_by ) ) ) XOR ( ( ''CARREGISTRATION.DEALERSHIP'' IN TYPEOF ( transferred_by ) ) AND ( ( ''CARREGISTRATION.PERSON'' IN TYPEOF ( transferred_to ) ) XOR ( ''CARREGISTRATION.GROUP'' IN TYPEOF ( transferred_to ) ) ) ); not_destroyed : ( NOT ( ''CARREGISTRATION.DESTROYED_CAR'' IN TYPEOF ( transferred_car ) ) XOR ( ( ''CARREGISTRATION.DESTROYED_CAR'' IN TYPEOF ( transferred_car ) ) AND ( days_between ( transfer_date, transferred_car.destruction_date ) > 0 ) ) ); END_ENTITY; RULE max_number FOR ( authorized_manufacturer ); LOCAL max : INTEGER := 2 + 3 + 4; END_LOCAL; WHERE max_check : SIZEOF ( authorized_manufacturer ) <= max; END_RULE; (*"exchange_ok" returns TRUE if the transferred_to owner in the Nth transfer of a car is the transferred_by of the N+1th transfer *) FUNCTION exchange_ok ( transfers : LIST OF transfer ) : BOOLEAN; RETURN ( true ); END_FUNCTION; (*"single_car" returns TRUE if a history is of a single car *) FUNCTION single_car ( aHistory : history ) : BOOLEAN; RETURN ( true ); END_FUNCTION; (*"valid_date" returns FALSE if aDate is not a valid date *) FUNCTION valid_date ( aDate : date ) : BOOLEAN; RETURN ( true ); END_FUNCTION; (*"days_between" returns the number of days between the two input dates. If d1 is earlier than d2, a positive number is returned *) FUNCTION days_between ( d1 : date; d2 : date ) : INTEGER; RETURN ( ? ); END_FUNCTION; FUNCTION current_date_infos : ARRAY [ 3 : 3 ] OF INTEGER; (*# Date today dayMonthYearDo: [:d :m :y | self return: (PltArrayInstance contents: {PltIntegerLiteral val: d. PltIntegerLiteral val: m. PltIntegerLiteral val: y})] #*) (*# Date today dayMonthYearDo: [:d :m :y | ^ self return: {d. m. y}] #*) END_FUNCTION; FUNCTION current_date : date; LOCAL infos : ARRAY OF INTEGER := current_date_infos; END_LOCAL; RETURN ( date ( infos [ 1 ], infos [ 2 ], infos [ 3 ] ) ); END_FUNCTION; (*"too_old" returns TRUE if the input history is outdated. That is, if it is of a car that was destroyed more than 2 years ago *) FUNCTION too_old ( aHistory : history ) : BOOLEAN; IF ''CARREGISTRATION.DESTROYED_CAR'' IN TYPEOF ( aHistory.car ) THEN IF current_date.year - aHistory.car.destruction_date.year >= 2 THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar1 ^ 'SCHEMA Framework_Config; USE FROM Basic_Types; CONSTANT Max_Tasks_For_A_Resource : Natural := 10; Max_User_Defined_Task_Parameters : Natural := 10; Max_Offsets : Natural := 10; Max_Tasks : Natural := 10; Max_Scheduling_Period : Natural := 10; Max_Sections : Natural := 10; Max_Transitions : Natural := 10; END_CONSTANT; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar10 ^ 'SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Buffer_Dependency, Communication_Dependency, Synchronous_Data_Flow_Dependency, Resource_Dependency ); END_TYPE; TYPE Synchronous_Data_Flow_Timing_Prioperty_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Synchronous_Data_Flow_Dependency_type; Synchronous_Data_Flow_Sink : Generic_Task; Synchronous_Data_Flow_Source : Generic_Task; Timing_Property : Synchronous_Data_Flow_Timing_Prioperty_Type; END_ENTITY; ENTITY Precedence_Dependency_type; Precedence_Sink : Generic_Task; Precedence_Source : Generic_Task; END_ENTITY; ENTITY Buffer_Dependency_type; Buffer_Dependent_Task : Generic_Task; Buffer_Orientation : Orientation_Dependency_Type; Buffer_Dependency_Object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; Resource_Dependency_Resource : Generic_Resource; Resource_Dependency_Task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_type; Communication_Dependent_Task : Generic_Task; Communication_Orientation : Orientation_Dependency_Type; Communication_Dependency_Object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; Precedence_Dependency : Precedence_Dependency_type; Buffer_Dependency : Buffer_Dependency_type; Communication_Dependency : Communication_Dependency_type; END_ENTITY; ENTITY Dependency; discriminant : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar11 ^ 'SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Schedulers; ENTITY Address_Space SUBTYPE OF ( Generic_Object ); Cpu_Name : STRING; Text_Memory_Size : Natural; Stack_Memory_Size : Natural; Data_Memory_Size : Natural; Heap_Memory_Size : Natural; Scheduler : Generic_Scheduler; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar12 ^ 'SCHEMA Basic_Types; TYPE Natural = INTEGER; where eee: self > 0; END_TYPE; TYPE Identifier = STRING; END_TYPE; ENTITY Range; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar13 ^ 'SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar14 ^ 'SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Generic_Object ); Network_Type : Networks_Type; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar15 ^ 'SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message ); END_TYPE; ENTITY Start_Of_Task_Capacity_Type; Start_Task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; End_Task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; Write_Buffer : Buffer; Write_Task : Generic_Task; Write_Size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; Read_Buffer : Buffer; Read_Task : Generic_Task; Read_Size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; Switched_Task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; Running_Task : Generic_Task; Current_Priority : Priority_Range; END_ENTITY; ENTITY Task_activation_Type; Activation_Task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; Allocate_Task : Generic_Task; Allocate_Resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; Release_Task : Generic_Task; Release_Resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; Wait_For_Task : Generic_Task; Wait_For_Resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; Send_Task : Generic_Task; Send_Message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; Receive_Task : Generic_Task; Receive_Message : Generic_Message; END_ENTITY; ENTITY Time_Unit_Event_Union; Start_Of_Task_Capacity : Start_Of_Task_Capacity_Type; End_Of_Task_Capacity : End_Of_Task_Capacity_Type; Write_To_Buffer : Write_To_Buffer_Type; Read_From_Buffer : Read_From_Buffer_Type; Context_Switch_Overhead : Context_Switch_Overhead_Type; Running_Task : Running_Task_Type; Task_activation : Task_activation_Type; Allocate_Resource : Allocate_Resource_Type; Release_Resource : Release_Resource_Type; Wait_For_Resource : Wait_For_Resource_Type; Send_Message : Send_Message_Type; Receive_Message : Receive_Message_Type; END_ENTITY; ENTITY Time_Unit_Event; discriminant : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ENTITY Time_Unit_Package; Time_Unit_Range : Time_Unit_Range; Indexed_Table : Time_Unit_Table; END_ENTITY; TYPE Time_Unit_Range = Range; END_TYPE; TYPE Time_Unit_Table = LIST OF Association; END_TYPE; ENTITY Time_Unit_Lists_Package; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar16 ^ 'SCHEMA Schedulers; USE FROM Basic_Types; TYPE Preemptive_Type = ENUMERATION OF ( fully_preemptive, non_preemptive, partially_preemptive ); END_TYPE; ENTITY Generic_Scheduler; Quantum : Natural; Preemptivity : Preemptive_Type; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar17 ^ 'SCHEMA Parameters; USE FROM Basic_Types; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; ENTITY Boolean_Parameter_Type; Boolean_Value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; Integer_Value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; Double_Value : REAL; END_ENTITY; ENTITY String_Parameter_Type; String_Value : STRING; END_ENTITY; ENTITY Parameter_Union; Boolean_Parameter : Boolean_Parameter_Type; Integer_Parameter : Integer_Parameter_Type; Double_Parameter : Double_Parameter_Type; String_Parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; discriminant : Parameter_Type; union : Parameter_Union; Name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; Table_Range : User_Defined_Parameters_Range; Table : User_Defined_Parameters_Table; END_ENTITY; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 16:47'! cheddar2 ^ 'SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type ); END_TYPE; ENTITY Generic_Object; Name : Identifier; Object_Type : Objects_Type; END_ENTITY; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 16:48'! cheddar3 ^ 'SCHEMA Offsets; USE FROM Basic_Types; ENTITY Offset_Type; Offset_Value : INTEGER; Activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; Table_Range : Offsets_Range; Table : Offsets_Table; END_ENTITY; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 16:47'! cheddar4 ^ 'SCHEMA Processors; USE FROM Objects; USE FROM Schedulers; ENTITY Processor SUBTYPE OF ( Generic_Object ); Scheduler : Generic_Scheduler; Network : STRING; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Processor_Object_Type; END_ENTITY; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 16:47'! cheddar5 ^ 'SCHEMA Buffers; USE FROM Objects; USE FROM Tasks; USE FROM Processors; USE FROM Basic_Types; TYPE Role_type = ENUMERATION OF ( No_Role, Producer, Consumer ); END_TYPE; ENTITY Buffer_Role; The_Role : Role_type; Size : Natural; Time : Natural; END_ENTITY; ENTITY Buffer_Roles; Indexed_Table_Range : Buffer_Roles_Table; Indexed_Table : Buffer_Roles_Range; END_ENTITY; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Roles; END_TYPE; ENTITY Queueing_Systems_Type; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Generic_Object ); cpu_name : Identifier; Address_Space_Name : STRING; Queueing_System_Type : Queueing_Systems_Type; Size : Natural; Roles : Buffer_Roles_Table; X : Natural; Y : Natural; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar6 ^ 'SCHEMA Resources; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; USE FROM Framework_Config; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; ENTITY Affected_Task_Lists; Task_Begin : Natural; Task_End : Natural; END_ENTITY; ENTITY Task_List_Element; index : STRING; data : Affected_Task_Lists; END_ENTITY; ENTITY Task_Lists; Indexed_Table_Range : Task_Lists_Range; Indexed_Table : Task_Lists_Table; END_ENTITY; TYPE Task_Lists_Range = Range; END_TYPE; TYPE Task_Lists_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Task_List_Element; END_TYPE; ENTITY Start_End_Table; range : Task_Lists_Range; element_type : Affected_task_lists; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); state : INTEGER; protocol : Resources_Type; task_tab : Task_Lists_Table; cpu_name : Identifier; Address_Space_Name : STRING; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : Priority_Range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : resources_type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : resources_type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF (Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : resources_type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/22/2011 18:45'! cheddar8 ^ 'SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; TYPE priority_range = Range; END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); Task_Type : Tasks_Type; Cpu_Name : Identifier; Address_Space_Name : Identifier; Capacity : Natural; Deadline : Natural; Start_Time : Natural; Priority : Priority_Range; Blocking_Time : Natural; Policy : Policies; X : Natural; Y : Natural; Offset : Offsets_Table; Text_Memory_Size : Natural; Stack_Memory_Size : Natural; Param : User_Defined_Parameters_Table; Criticality : Natural; Context_Switch_Overhead : Natural; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Task_Object_Type; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); Period : Natural; Jitter : Natural; DERIVE SELF\Generic_Task.Task_Type : Tasks_Type := Periodic_Type; WHERE wr1 : self.period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.Task_Type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); Seed : INTEGER; Predictable : BOOLEAN; DERIVE SELF\Periodic_Task.Task_Type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.Task_Type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); Activation_Rule : STRING; DERIVE SELF\Poisson_Task.Task_Type : Tasks_Type := Parametric_Type; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! cheddar9 ^ 'SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); Message_Type : Messages_Type; X : Natural; Y : Natural; Param : User_Defined_Parameters_Table; Deadline : Natural; Size : Natural; Response_Time : Natural; Communication_Time : Natural; DERIVE SELF\Generic_Object.Object_Type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); Period : Natural; Jitter : Natural; DERIVE SELF\Generic_Message.Message_Type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.Message_Type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 16:33'! cheddarMetaModel ^ self cheddar1 , ' ', self cheddar2 , ' ', self cheddar3 , ' ', self cheddar4 , ' ', self cheddar5 , ' ', self cheddar6 , ' ', self cheddar8 , ' ', self cheddar9 , ' ', self cheddar10 , ' ', self cheddar11 , ' ', self cheddar12 , ' ', self cheddar13 , ' ', self cheddar14 , ' ', self cheddar15 , ' ', self cheddar16 , ' ', self cheddar17 ! ! !PPExpressHugeGrammarTests methodsFor: 'accessing' stamp: 'AlainPlantec 11/25/2011 19:44'! parserClass ^ PPExpressGrammar! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! schemaExpress2Cheddar1 ^ 'SCHEMA express2cheddar_facade; USE FROM Package; USE FROM platypus_dictionary_schema; CONSTANT source_licence : STRING := ''------------------------------------------------------------------------------\n'' + ''------------------------------------------------------------------------------\n'' + ''-- This Ada package was automatically generated by the software engineering tool Platypus\n'' + ''-- see http://cassoulet.univ-brest.fr/mme\n'' + ''-- \n'' + ''-- Any modification of this file will be lost. \n'' + ''-- Please see the "platypus" directory instead : it contains the Cheddar''''s\n'' + ''-- model and its meta-model. \n'' + ''------------------------------------------------------------------------------\n \n'' + ''------------------------------------------------------------------------------\n'' + ''-- Cheddar is a free real time scheduling tool.\n'' + ''-- This program provides services to automatically check temporal constraints\n'' + ''-- of real time tasks.\n'' + ''--\n'' + ''-- Copyright (C) 2002-2009 Frank Singhoff\n'' + ''-- Cheddar is developed by the LISYC Team, University of Brest\n'' + ''--\n'' + ''-- This program is free software; you can redistribute it and/or modify\n'' + ''-- it under the terms of the GNU General Public License as published by\n'' + ''-- the Free Software Foundation; either version 2 of the License, or\n'' + ''-- (at your option) any later version.\n'' + ''--\n'' + ''-- This program is distributed in the hope that it will be useful,\n'' + ''-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n'' + ''-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n'' + ''-- GNU General Public License for more details.\n'' + ''--\n'' + ''-- You should have received a copy of the GNU General Public License\n'' + ''-- along with this program; if not, write to the Free Software\n'' + ''-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n'' + ''--\n'' + ''--\n'' + ''-- Contact : cheddar@listes.univ-brest.fr\n'' + ''-- To post to this mailing list, you must be subscribed\n'' + ''-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n'' + ''--\n'' + ''------------------------------------------------------------------------------\n'' + ''------------------------------------------------------------------------------\n''; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( ''CHEDDAR_TYPES.ADA_TYPE'' IN TYPEOF ( c ) ) OR ( ''RECORD_AND_CLASS.ADA_ENTITY'' IN TYPEOF ( c ) ) OR ( ''PACKAGE.PACKAGE_ALIAS'' IN TYPEOF ( c ) ) OR ( ''RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR'' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) all_packages_code ( true ); all_packages_code ( false ); END_PROCEDURE; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! schemaExpress2Cheddar2 ^ 'SCHEMA ada_interface; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + ''.'' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF ( int.with_it ) THEN s := s + ''with '' + name + '';\n''; END_IF; IF ( int.use_it ) THEN s := s + ''use '' + name + '';\n''; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF upperize ( from_pkg.name ) <> upperize ( curr.prefix ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF ( EXISTS ( curr.suffix ) ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + ''\n''; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 11:08'! schemaExpress2Cheddar3 ^ 'SCHEMA cheddar_types; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( ''standards_io'', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ''PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE'' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF ( is_of_generated_concept_kind ( t ) ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''''; END_LOCAL; code := ''type '' + a.ada_ident + '' is Array ( ''; IF ( EXISTS ( a.max_idx ) ) THEN code := code + a.min_idx + '' .. '' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( etype ) ) THEN code := code + '' ) of '' + etype.ptr_type + '';\n''; ELSE code := code + '' ) of '' + etype.ada_ident + '';\n''; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ( ads ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''''; adb_code : STRING := ''''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ( basic_ada_domain ( SELF.ref ) ).init_value; ads_code : STRING := ''''; adb_code : STRING := ''''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''''; adb_code : STRING := ''''; END_ENTITY; ENTITY basic_ada_type_getter SUBTYPE OF ( dictionary_instance ); DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := ( SELF ); accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''''; adb_code : STRING := ''''; put_prefix : STRING := ''''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; (* ? cheddar_law_type ? *) ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''Expression'', ?, true, true ), ada_interface ( ''Expression'', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ''law_type''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ''''; adb_code : STRING := ''''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''Framework_Config'', ?, true, true ), ada_interface ( ''Framework_Config'', ''Priority_Io'', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := ''priority_range''; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := ''0''; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( ''standards_io'', ''natural_io'', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Natural''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''0''; SELF\ada_primitive_type.put_prefix : STRING := ''standards_io.natural_io.''; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''ada.strings'', ''unbounded.text_io'', true, true ), ada_interface ( ''Text_io'', ?, true, true ), ada_interface ( ''Unbounded_Strings'', ?, true, true ), ada_interface ( ''Convert_Strings'', ?, true, false ), ada_interface ( ''Convert_Unbounded_Strings'', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''Text_io'', ?, true, true ), ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Unbounded_String''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''empty_string''; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( ''standards_io'', ''boolean_io'', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Boolean''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''false''; SELF\ada_primitive_type.put_prefix : STRING := ''standards_io.boolean_io.''; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( ''Ada'', ''Numerics.Aux'', true, true ), ada_interface ( ''standards_io'', ''float_io'', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Float''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''0.0''; SELF\ada_primitive_type.put_prefix : STRING := ''standards_io.float_io.''; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( ''Ada'', ''Numerics.Aux'', true, true ), ada_interface ( ''standards_io'', ''double_io'', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Double''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''0.0''; SELF\ada_primitive_type.put_prefix : STRING := ''standards_io.double_io.''; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( ''standards_io'', ''integer_io'', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ada_ident : STRING := ''Integer''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ''0''; SELF\ada_primitive_type.put_prefix : STRING := ''standards_io.integer_io.''; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + ''_Ptr''; init_value : STRING := ''initialize''; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + ''_Ptr''; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ''list''; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ''set''; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ''bag''; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''Convert_Strings'', ?, true, false ), ada_interface ( ''Convert_Unbounded_Strings'', ?, true, false ), ada_interface ( ''text_io'', ?, true, true ), ada_interface ( ''ada.strings'', ''unbounded'', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( ''primitive_xml_strings'', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + ''_io''; full_io_type_name : STRING := SELF.owner.name + ''.'' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := ''type '' + e.name + '' is (\n\t'' + StringAggregateConcatSeparatedBy ( e.domain.elements, '',\n\t'' ) + '');\n''; IF ( ''CHEDDAR_TYPES.PRAGMA_CONVENTION'' IN TYPEOF ( e ) ) THEN code := code + ''pragma convention ('' + e.convention + '', '' + e.name + '');\n''; END_IF; code := code + ''\n'' + ''procedure To_'' + e.name + '' is\n'' + ''new Convert_Strings('' + e.name + '', '' + convert_type + '');\n'' + ''procedure To_'' + e.name + '' is\n'' + ''new Convert_Unbounded_Strings('' + e.name + '', '' + convert_type + '');\n'' + ''function XML_String (obj : in '' + e.name + ''; level : in natural := 0) return Unbounded_String;\n'' + ''package '' + e.name + ''_io is new text_io.enumeration_io('' + e.name + '');\n'' + ''use '' + e.name + ''_io;\n''; RETURN ( code ); END_FUNCTION; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : dictionary_instance; DERIVE formated : STRING := SELF.val.name; END_ENTITY; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''function XML_String(obj : in '' + e.name + ''; level : in natural := 0) return Unbounded_String is\n'' + ''begin\n'' + '' return to_unbounded_string('' + e.name + ''''''image (obj) );\n'' + ''end XML_String;\n ''; RETURN ( code ); END_FUNCTION; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''''; END_ENTITY; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := ''type '' + rt.ada_ident + '' is Range '' + rt.lower + '' .. '' + rt.upper + '';\n''; END_LOCAL; IF ( EXISTS ( rt.lower_constant ) ) THEN r := r + rt.lower_constant + '' : constant '' + rt.ada_ident + '' := '' + rt.ada_ident + ''''''First;\n''; END_IF; IF ( EXISTS ( rt.upper_constant ) ) THEN r := r + rt.upper_constant + '' : constant '' + rt.ada_ident + '' := '' + rt.ada_ident + ''''''Last;\n''; END_IF; RETURN ( r ); END_FUNCTION; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + ''_Ptr''; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''''; adb_code : STRING := ''''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, ''_Ptr'' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF ( domain.refed_by_pointer ) THEN code := code + ''\n\tif obj.'' + a.name + '' /= null then\n'' + ''\t\tFree (obj.'' + a.name + '' );\n'' + ''\tend if;\n'' + ''\tobj.'' + a.name + '' := new '' + domain.name + '';\n'' + ''\tInitialize(obj.'' + a.name + ''.all);\n''; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! schemaExpress2Cheddar4 ^ 'SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_types; USE FROM ada_interface; ENTITY dependent_attribute SUBTYPE OF ( explicit_attribute ); END_ENTITY; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, ''generic_object'' ) ); END_IF; RETURN ( false ); END_FUNCTION; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + ''_Ptr''; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | ''PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE'' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | ''PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE'' IN TYPEOF ( a ) ); put_prefix : STRING := ''''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; END_ENTITY; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); END_ENTITY; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := ''\n'' + ''-- --------= '' + cip.name + '' =--------\n\n'' + ''type '' + cip.name + '';'' + ''\ntype '' + cip.ptr_type + '' is access all '' + cip.name + ''''''Class;\n''; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + ''type '' + cip.name + '' is '' + abstr + ''new '' + supref.ada_ident + '' with ''; END_ALIAS; ELSE result := result + ''type '' + cip.name + '' is '' + abstr + ''new Ada.Finalization.Controlled with ''; END_IF; IF ( with_private ) THEN result := result + ''private;\n''; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + ''\nprocedure Initialize(obj : in out '' + cip.name + '');\n'' + ''procedure Put(obj : in '' + cip.name + '');\n'' + ''procedure Put(obj : in '' + cip.ptr_type + '');\n'' + ''procedure Put_Name(obj : in '' + cip.ptr_type + '');\n'' + ''procedure Build_Attributes_XML_String(obj : in '' + cip.name + ''; level : in natural := 0; result : in out Unbounded_String);\n'' + ''function XML_String(obj : in '' + cip.name + ''; level : in natural := 0) return Unbounded_String;\n'' + ''function XML_String(obj : in '' + cip.ptr_type + ''; level : in natural := 0) return Unbounded_String;\n'' + ''function Get_Name (obj : in '' + cip.name + '') return Unbounded_String;\n'' + ''function Get_Name (obj : in '' + cip.ptr_type + '') return Unbounded_String;\n'' + ''function Copy(obj : in '' + cip.ptr_type + '') return '' + local_sup.ptr_type + '';\n'' + ''function Copy(obj : in '' + cip.name + '') return '' + local_sup.ptr_type + '';\n'' + ''function type_of(obj : in '' + cip.name + '') return unbounded_string_list;\n'' + ''function type_of(obj : in '' + cip.ptr_type + '') return unbounded_string_list;\n'' + ''procedure Free is new Unchecked_Deallocation ('' + cip.name + ''''''Class, '' + cip.ptr_type + '');\n''; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''\n'' + ''-- --------= '' + cip.name + '' =--------\n'' + ada_class_initialize_code ( cip ) + ''\n'' + ada_class_copy_code ( cip ) + ''\n'' + ada_class_put_code ( cip ) + ''\n'' + ada_class_get_name_code ( cip ) + ''\n'' + ada_class_typeof_code ( cip ) + ''\n'' + ada_class_xml_writer_code ( cip ) + ''\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''\nprocedure Build_Attributes_XML_String(obj : in '' + cip.name + ''; level : in natural := 0; result : in out Unbounded_String) is \nbegin\n''; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ''\tBuild_Attributes_XML_String('' + sup.name + ''(obj), level, result);\n''; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; code := code + explicit_attribute_xml_writer_code ( ''obj'', attr, 1 ) + ''\n''; END_ALIAS; END_REPEAT; code := code + ''end Build_Attributes_XML_String;\n\n'' + ''function XML_String(obj : in '' + cip.name + ''; level : in natural := 0) return Unbounded_String is\n'' + ''\tresult : Unbounded_String;\n'' + ''begin\n'' + '' result := "<'' + cip.name + '' id=""" & Get_Name(obj) & """ >" & Unbounded_Lf;\n'' + '' Build_Attributes_XML_String(obj, level, result);\n'' + '' result := result & "" & Unbounded_Lf;\n'' + '' return (result);\n'' + ''end XML_String;\n\n'' + ''function XML_String(obj : in '' + cip.ptr_type + ''; level : in natural := 0) return Unbounded_String is\n'' + ''begin\n'' + '' return XML_String(obj.all);\n'' + ''end XML_String;\n\n''; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''\nprocedure Build_Attributes_XML_String(obj : in '' + cip.name + ''; level : in natural := 0; result : in out Unbounded_String) is \nbegin\n''; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; code := code + explicit_attribute_xml_writer_code ( ''obj'', attr, 1 ) + ''\n''; END_ALIAS; END_REPEAT; code := code + ''end Build_Attributes_XML_String;\n\n'' + ''function XML_String(obj : in '' + cip.name + ''; level : in natural := 0) return Unbounded_String is\n'' + ''\tresult : Unbounded_String;\n'' + ''begin\n'' + ''\tresult := "<'' + cip.name + ''>" & Unbounded_Lf;\n'' + ''\tBuild_Attributes_XML_String(obj, level, result);\n'' + ''\tresult := result & "" & Unbounded_Lf;\n'' + ''\treturn (result);\n'' + ''end XML_String;\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := ''\nprocedure Initialize(obj : in out '' + cip.name + '') is \nbegin\n''; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + ''\tinitialize('' + sup.name + ''(obj));\n''; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '''' ) ) THEN innerCode := innerCode + ''\t'' + init + ''\n''; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '''' ) ) THEN innerCode := innerCode + ''\t'' + init + ''\n''; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '''' THEN innerCode := ''\tnull;\n''; END_IF; code := code + innerCode + ''end Initialize;\n''; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( ''CHEDDAR_TYPES.IN_SCOPE_ATTRIBUTE'' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( ''CHEDDAR_TYPES.CHEDDAR_PRIMITIVE_TYPE'' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT ( EXISTS ( init ) ) THEN RETURN ( ? ); ELSE IF init <> ''initialize'' THEN RETURN ( ''obj.'' + attr.name + '' := '' + init + '';'' ); ELSE IF ( domain.handled.refed_by_pointer ) THEN RETURN ( ''initialize( obj.'' + attr.name + ''.all);'' ); ELSE RETURN ( ''initialize( obj.'' + attr.name + '');'' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF ( EXISTS ( attr.redeclaring ) ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := ''obj.'' + attr.name + '' := '' + val + '';''; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := ''function type_of ( obj : in '' + cip.name + '' ) return unbounded_string_list is\n'' + ''\tlist : unbounded_string_list;\n'' + ''\ts : unbounded_string_ptr;\n'' + ''begin\n'' + ''\t'' + ''Initialize(list);\n'' + ''\n''; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + ''\t'' + ''s := new unbounded_string;\n'' + ''\t'' + ''s.all := to_unbounded_string("'' + upperize ( curr.owner.name ) + ''.'' + upperize ( curr.name ) + ''");\n'' + ''\t'' + ''Add (list, s);\n'' + ''\n''; END_ALIAS; END_REPEAT; code := code + ''\treturn list;\nend type_of;\n\n'' + ''function type_of ( obj : in '' + cip.ptr_type + '' ) return unbounded_string_list is\n'' + ''begin\n'' + ''\treturn type_of(obj.all);\n'' + ''end type_of;\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := ''New_'' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := ''function Copy ( obj : in '' + cip.name + '' ) return '' + local_sup.ptr_type + '' is\n'' + ''\t'' + v + '' : '' + cip.ptr_type + '';\n'' + ''begin\n'' + ''\t'' + v + '' := new '' + cip.name + ''''''(obj);\n''; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + ''\treturn '' + local_sup.ptr_type + ''('' + v + '');\n''; ELSE code := code + ''\treturn ('' + v + '');\n''; END_IF; code := code + ''end Copy;\n\n'' + ''function Copy ( obj : in '' + cip.ptr_type + '' ) return '' + local_sup.ptr_type + '' is\n'' + ''begin\n'' + ''\treturn copy(obj.all);\n'' + ''end Copy;\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''procedure Put(obj : in '' + cip.name + '') is \nbegin\n''; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ''\tput('' + sup.name + ''(obj));\n''; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; code := code + ''\t'' + explicit_attribute_put ( attr ) + ''\n''; END_ALIAS; END_REPEAT; code := code + ''end Put;\n \n'' + ''procedure Put(obj : in '' + cip.ptr_type + '') is\n'' + ''begin\n'' + ''\tPut(Obj.All);\n'' + ''end Put;\n \n'' + ''procedure Put_Name ( obj : in '' + cip.ptr_type + '') is\n'' + ''begin\n'' + ''\tPut ( To_String ( Obj.Name ) );\n'' + ''end Put_Name;\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''function Get_Name (obj : in '' + cip.name + '') return Unbounded_String is\n'' + ''begin\n'' + '' return obj.name;\n'' + ''end Get_Name;\n\n'' + ''function Get_Name (obj : in '' + cip.name + ''_ptr) return Unbounded_String is\n'' + ''begin\n'' + '' return obj.name;\n'' + ''end Get_Name;\n''; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := ''null record;\n''; ELSE result := ''\nrecord\n''; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( domain.handled ) ) THEN result := result + '' '' + attr.name + '' : '' + domain.handled.ptr_type + '';\n''; ELSE result := result + '' '' + attr.name + '' : '' + domain.ada_ref_ident + '';\n''; END_IF; END_ALIAS; END_REPEAT; result := result + ''end record;\n''; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_class; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF ''PACKAGE.ADA_PACKAGE'' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( ''Ada.Finalization'', ?, true, false ); result := result + ada_interface ( ''unbounded_strings'', ?, true, true ); result := result + ada_interface ( ''ada.strings'', ''unbounded'', true, true ); result := result + ada_interface ( ''unbounded_strings'', ''Unbounded_String_List_Package'', false, true ); result := result + ada_interface ( ''Unchecked_Deallocation'', ?, true, false ); result := result + ada_interface ( ''Primitive_XML_Strings'', ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( ''CHEDDAR_TYPES.ADA_ENUMERATION'' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> r.owner.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( ''CHEDDAR_TYPES.ADA_PRIMITIVE_TYPE'' IN TYPEOF ( h ) ) OR ( ''DISCRIMINATED_TYPE.DISCRIMINATED_TYPE'' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := ''\n'' + ''-- --------= '' + rec.name + '' =--------\n \n'' + ''type '' + rec.name + '' is\nrecord\n''; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + '' '' + rec.attributes [ no].name + '' : ''; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF ( domain.handled.refed_by_pointer ) THEN result := result + domain.handled.ptr_type + '';\n''; ELSE result := result + domain.ada_ref_ident + '';\n''; END_IF; END_REPEAT; result := result + ''end record;\n\n'' + ''type '' + rec.ptr_type + '' is access all '' + rec.name + '';\n\n'' + ''procedure Initialize(obj : out '' + rec.name + '');\n'' + ''procedure Put(obj : in '' + rec.name + '');\n'' + ''procedure Put(obj : in '' + rec.ptr_type + '');\n'' + ''function Copy(obj : in '' + rec.ptr_type + '') return '' + rec.ptr_type + '';\n'' + ''function Copy(obj : in '' + rec.name + '') return '' + rec.ptr_type + '';\n'' + ''procedure Build_Attributes_XML_String(obj : in '' + rec.name + ''; level : in natural := 0; result : in out Unbounded_String);\n'' + ''function XML_String(obj : in '' + rec.name + ''; level : in natural := 0) return Unbounded_String;\n'' + ''procedure Free is new Unchecked_Deallocation ('' + rec.name + '', '' + rec.ptr_type + '');\n''; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := ''\nprocedure Initialize(obj : out '' + rec.name + '') is \nbegin\n''; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '''' ) ) THEN innerCode := innerCode + ''\t'' + init + ''\n''; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '''' THEN innerCode := ''\tnull;\n''; END_IF; code := code + innerCode + ''end Initialize;\n''; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''\n'' + ''-- --------= '' + rec.name + '' =--------\n'' + record_initialize_code ( rec ) + ''\n'' + record_put_code ( rec ) + ''\n'' + record_xml_writer_code ( rec ) + ''\n'' + record_copy_code ( rec ) + ''\n''; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := ''procedure Put(obj : in '' + rec.name + '') is \nbegin\n''; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; code := code + ''\t'' + explicit_attribute_put ( attr ) + ''\n''; END_ALIAS; END_REPEAT; code := code + ''end Put;\n \n'' + ''procedure Put(obj : in '' + rec.ptr_type + '') is\n'' + ''begin\n'' + ''\tPut(Obj.All);\n'' + ''end Put;\n''; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := ''put("'' + attr.name + '': "); ''; IF ( ''CHEDDAR_TYPES.ADA_PRIMITIVE_TYPE'' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF ( domain.handled.refed_by_pointer ) THEN code := code + ''if obj.'' + attr.name + '' /= null then '' + prfx + ''put(obj.'' + attr.name + ''.all'' + ''); else put("null"); end if;''; ELSE code := code + prfx + ''put(obj.'' + attr.name + ''); ''; END_IF; code := code + ''put ( "; " );''; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute; level : INTEGER ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); lvl : STRING := FORMAT ( level, ''I'' ); END_LOCAL; IF ( ''RECORD_AND_CLASS.DEPENDENT_ATTRIBUTE'' IN TYPEOF ( attr ) ) THEN code := ''\tresult := result & unbounded_ht(level + '' + lvl + '') & "<'' + attr.name + '' type=""'' + domain.ref.name + ''"">" & Unbounded_Lf;\n''; code := code + ''\tBuild_Attributes_XML_String('' + prefix + ''.'' + attr.name + '', '' + ''level'' + '' + 1, result);\n''; code := code + ''\tresult := result & unbounded_ht(level + '' + lvl + '') & "" & Unbounded_Lf;\n''; RETURN ( code ); END_IF; IF ( is_generic_object ( domain.handled ) ) THEN code := ''\tresult := result & unbounded_ht(level + '' + lvl + '' ) & "<'' + attr.name + '' ref=""" & Get_Name('' + prefix + ''.'' + attr.name + '') & """ />" & Unbounded_Lf;''; ELSE code := ''\tresult := result & unbounded_ht(level + '' + lvl + '') & "<'' + attr.name + ''>" & XML_String('' + prefix + ''.'' + attr.name + '', level + '' + lvl + '') & "" & Unbounded_Lf;''; END_IF; RETURN ( code ); END_FUNCTION; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''Type '' + SELF.name + '' is access function ('' + SELF.arguments + '') return '' + SELF.returns + '';''; adb_code : STRING := ''''; dependencies : LIST OF dictionary_instance := [ SELF ]; END_ENTITY; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := ''New_'' + cip.name; END_LOCAL; code := ''function Copy ( obj : in '' + cip.name + '' ) return '' + cip.ptr_type + '' is\n'' + ''\t'' + v + '' : '' + cip.ptr_type + '';\n'' + ''begin\n'' + ''\t'' + v + '' := new '' + cip.name + ''''''(obj);\n''; code := code + ''\treturn ('' + v + '');\n''; code := code + ''end Copy;\n\n'' + ''function Copy ( obj : in '' + cip.ptr_type + '' ) return '' + cip.ptr_type + '' is\n'' + ''begin\n'' + ''\treturn copy(obj.all);\n'' + ''end Copy;\n''; RETURN ( code ); END_FUNCTION; END_SCHEMA;' ! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! schemaExpress2Cheddar5 ^ 'SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_types; USE FROM ada_interface; ENTITY ada_package SUBTYPE OF ( schema_definition ); adb_interface : LIST OF ada_interface; DERIVE ads_head : STRING := source_licence + ''\n'' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + ''\n'' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + ''\n\nPackage '' + name + '' is \n \n'' + ada_package_ads_code ( SELF ) + ''\nEnd '' + name + '';''; adb_code : STRING := adb_head + ''\n\nPackage Body '' + name + '' is \n \n'' + ada_package_adb_code ( SELF ) + ''\nEnd '' + name + '';''; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | ''CHEDDAR_TYPES.CONSTRAINED_ARRAY_TYPE'' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); IF SIZEOF ( private_classes ) > 0 THEN result := result + ''\n\nprivate\n \n''; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + ''\ntype '' + private_classes [ no].name + '' is new '' + supref.ada_ident + '' with\n'' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( ''Ada.Strings.Unbounded'', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( ''Text_io'', ?, true, true ), ada_interface ( ''unbounded_strings'', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF named_type := pkg.entities + pkg.types; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( ''PACKAGE.ADA_PACKAGE'' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( ''CHEDDAR_TYPES.EXPLICIT_TYPE_REFERENCE'' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( ''RECORD_AND_CLASS.ADA_ENTITY'' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( ''CHEDDAR_TYPES.ADA_ENUMERATION'' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( ''CHEDDAR_TYPES.CONSTRAINED_ARRAY_TYPE'' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( ''PACKAGE.GENERIC_PACKAGE_INSTANCIATION'' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ADA_Package; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | ''PACKAGE.ADA_PACKAGE'' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''''; body : STRING; pkgs : LIST OF ADA_Package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '''' ) THEN code := code + body + ''\n\n''; END_IF; END_REPEAT; IF ads THEN WriteFile ( ''Platypus2Cheddar.ads'', code ); ELSE WriteFile ( ''Platypus2Cheddar.adb'', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF ( NOT ( concept_in_list ( wl [ noi], r ) ) ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''''; code : STRING := ''''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ads ) THEN (* contents := concept_list_local_dependencies ( p, concepts ); *) contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '''' ) THEN result := result + ''\n''; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + ''(''; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), '','' ); result := result + '')\n''; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + ''_Ptr''; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := ''subtype '' + SELF.name + '' is '' + package_name + ''.'' + attribute_name + '';\n'' + ''subtype '' + SELF.ptr_type + '' is '' + package_name + ''.'' + attribute_name + ''_Ptr;\n''; adb_code : STRING := ''''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( ''Unchecked_Deallocation'', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''package '' + ada_ident + '' is new '' + generic_package_name + ''('' + StringAggregateConcatSeparatedBy ( parameters, '', '' ) + '');\n'' + ''use '' + ada_ident + '';\n'' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''''; END_ENTITY; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = ''_'' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'source accessing' stamp: 'AlainPlantec 11/21/2011 10:50'! schemaExpress2Cheddar6 ^ 'SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_types; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE discriminant : attribute := ( QUERY ( attr <* attributes | ''DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT'' IN TYPEOF ( attr ) ) ) [ 1 ]; union_attr : attribute := ( QUERY ( attr <* attributes | ''DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION'' IN TYPEOF ( attr ) ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := SELF.union_attr.domain.handled.ads_interfaces_list + ada_interface ( ''Unchecked_Deallocation'', ?, true, false ); adb_interfaces_list : LIST OF ada_interface := SELF.union_attr.domain.handled.adb_interfaces_list; translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''''; adb_code : STRING := ''''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''''; adb_code : STRING := ''''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := ''New_'' + typ.name; END_LOCAL; code := ''procedure Initialize (obj : out '' + typ.name + ''_Ptr) is\n'' + ''begin\n'' + ''\tobj := NULL;\n'' + ''end Initialize;\n \n'' + ''procedure Put(obj : in '' + typ.name + ''_Ptr) is\n'' + ''begin\n'' + ''\tif (obj /= NULL) then\n''; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + ''\t\t'' + explicit_attribute_put ( attr ) + ''\n''; END_ALIAS; END_REPEAT; code := code + ''\t\t'' + explicit_attribute_put ( discrim_attr ) + ''\n'' + ''\t\tput ( "value: " );\n'' + ''\t\tcase obj.'' + discrim_attr.name + '' is \n''; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + ''\t\t\twhen '' + union_attr.name + '' => \n''; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; code := code + ''\t\t\t\t'' + explicit_attribute_put ( element_attr ) + ''\n''; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + ''\n''; END_REPEAT; (*APL*) code := code + ''\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n'' + ''function Copy ( obj : in '' + typ.name + '' ) return '' + typ.ptr_type + '' is\n'' + ''\t'' + v + '' : '' + typ.ptr_type + '';\n'' + ''begin\n'' + ''\t'' + v + '' := new '' + typ.name + ''''''(obj);\n'' + ''\treturn ('' + v + '');\n'' + ''end Copy;\n\n'' + ''function Copy ( obj : in '' + typ.ptr_type + '' ) return '' + typ.ptr_type + '' is\n'' + ''begin\n'' + ''\treturn copy(obj.all);\n'' + ''end Copy;\n\n'' + ''function XML_String(obj : in '' + typ.name + ''; level : in natural := 0) return Unbounded_String is\n'' + ''\tresult : Unbounded_String;\n'' + ''begin\n'' + '' result := "<'' + typ.name + ''>" & Unbounded_Lf;\n'' + explicit_attribute_xml_writer_code ( ''obj'', discrim_attr, 1 ) + ''\n\n'' + ''\tcase obj.'' + discrim_attr.name + '' is \n''; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + ''\t\twhen '' + union_attr.name + '' => \n''; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; code := code + ''\t\t'' + explicit_attribute_xml_writer_code ( ''obj'', element_attr, 1 ) + ''\n''; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + ''\n''; END_REPEAT; (*APL*) code := code + ''\tend case;\n'' + ''\tresult := result & "" & Unbounded_Lf;\n'' + ''\treturn (result);\n'' + ''end XML_String;\n\n'' + ''function XML_String(obj : in '' + typ.name + ''_Ptr; level : in natural := 0) return Unbounded_String is\n'' + ''begin\n'' + '' return XML_String(obj.all);\n'' + ''end XML_String;\n\n''; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := ''type '' + typ.name + '' ('' + discrim_attr.name + '' : '' + discrim_type.name + '' ) is record\n''; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( domain.handled ) ) THEN result := result + ''\t'' + attr.name + '' : '' + domain.handled.ptr_type + '';\n''; ELSE result := result + ''\t'' + attr.name + '' : '' + domain.ada_ref_ident + '';\n''; END_IF; END_ALIAS; END_REPEAT; result := result + ''\tcase '' + discrim_attr.name + '' is \n'' + union_type.union_ads_code + ''\tend case;\nend record;\n\n'' + ''type '' + typ.ptr_type + '' is access all '' + typ.name + '';\n'' + ''\nprocedure Initialize(obj : out '' + typ.ptr_type + '');\n'' + ''\nprocedure Put(obj : in '' + typ.ptr_type + '');\n'' + ''function Copy(obj : in '' + typ.ptr_type + '') return '' + typ.ptr_type + '';\n'' + ''function Copy(obj : in '' + typ.name + '') return '' + typ.ptr_type + '';\n'' + ''function XML_String(obj : in '' + typ.name + ''; level : in natural := 0) return Unbounded_String;\n'' + ''\nfunction XML_String(obj : in '' + typ.ptr_type + ''; level : in natural := 0) return Unbounded_String;\n'' + ''procedure Free is new Unchecked_Deallocation ('' + typ.name + '', '' + typ.ptr_type + '');\n''; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + ''\t\twhen '' + attr.name + '' => \n '' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + ''\n''; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( ''RECORD_AND_CLASS.ADA_CLASS'' IN TYPEOF ( domain.handled ) ) THEN code := code + ''\t\t\t'' + attr.name + '' : '' + domain.handled.ptr_type + '';\n''; ELSE code := code + ''\t\t\t'' + attr.name + '' : '' + domain.ada_ref_ident + '';\n''; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; END_SCHEMA;'! ! !PPExpressHugeGrammarTests methodsFor: 'model' stamp: 'AlainPlantec 12/20/2011 20:31'! testAp214 self parse: self ap214 asPetitStream . ! ! !PPExpressHugeGrammarTests methodsFor: 'model' stamp: 'AlainPlantec 12/8/2011 10:43'! testCarRegistration self parse: self carRegistration asPetitStream ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar1 self parse: self cheddar1 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar10 self parse: self cheddar10 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar11 self parse: self cheddar11 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar12 self parse: self cheddar12 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar13 self parse: self cheddar13 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar14 self parse: self cheddar14 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar15 self parse: self cheddar15 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar16 self parse: self cheddar16 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar17 self parse: self cheddar17 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar2 self parse: self cheddar2 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar3 self parse: self cheddar3 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar4 self parse: self cheddar4 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar5 self parse: self cheddar5 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar6 self parse: self cheddar6 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar8 self parse: self cheddar8 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:53'! testCheddar9 self parse: self cheddar9 ! ! !PPExpressHugeGrammarTests methodsFor: 'model' stamp: 'AlainPlantec 1/23/2012 17:27'! testCheddarMetaModel self parse: self cheddarMetaModel asPetitStream rule: #expressNamespace ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:51'! testExpress2Cheddar1 self parse: self schemaExpress2Cheddar1 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:51'! testExpress2Cheddar2 self parse: self schemaExpress2Cheddar2 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/22/2011 14:39'! testExpress2Cheddar3 self parse: self schemaExpress2Cheddar3 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:51'! testExpress2Cheddar4 self parse: self schemaExpress2Cheddar4 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:51'! testExpress2Cheddar5 self parse: self schemaExpress2Cheddar5 ! ! !PPExpressHugeGrammarTests methodsFor: 'schema' stamp: 'AlainPlantec 11/21/2011 10:51'! testExpress2Cheddar6 self parse: self schemaExpress2Cheddar6 ! ! !PPPlatypusGrammarTests methodsFor: 'model' stamp: 'AlainPlantec 11/28/2011 18:50'! modelExample1 ^ 'schema PlatypusMetaModel; type Identifier = String; end_type; entity ModelDefinition; ident : Identifier; schemas : Collection of SchemaDefinition; unique ident; end_entity; entity SchemaDefinition; ident : Identifier; entities : Collection of EntityDefinition; types : Collection of DefinedType; inverse context : Model for schemas; end_entity; entity NamedType; ident : Identifier; whereRules : Collection of LocalRule; end_entity; entity LocalRule; ident : optional Identifier; assertion : BlockClosure; end_entity; entity EntityDefinition subtype of (NamedType); directSuperType : optional EntityDefinition; attributes : Collection of AttributeDeclaration; derive explicitAttributes : Collection of ExplicitAttribute ::= self attributes select: [:a | a isKindOf: ExplicitAttribute] ; inverseAttributes : Collection of InverseAttribute ::= self attributes select: [:a | a isKindOf: InverseAttribute] ; derivedAttributes : Collection of DerivedAttribute ::= self attributes select: [:a | a isKindOf: DerivedAttribute] ; inheritedAttributes : Collection of AttributeDeclaration ::= self superType ifNil: [attributes] ifNotNil: [self directSuperType inheritedAttributes, self attributes] ; where attrNamesUnicity :: (self inheritedAttributes collect: [:a | a ident]) asSet size = self inheritedAttributes size ; end_entity; entity AttributeDeclaration; ident : Identifier; inverse context : EntityDefinition for explicitAttributes; end_entity; entity ExplicitAttribute subtype of (AttributeDeclaration); domain : BaseDomain; mandatory : Boolean; end_entity; entity DerivedAttribute subtype of (AttributeDeclaration); domain : BaseDomain; expression : BlockContext ; end_entity; entity InverseAttribute subtype of (AttributeDeclaration); oppositeScope : EntityDefinition; oppositeRole : Identifier ; end_entity; type BaseDomain = select (Collection, Literal, EnumerationType, DefinedType); end_type; entity Aggregation; end_entity; entity ListAggregation subtype of (Aggregation); end_entity; entity BagAggregation subtype of (Aggregation); end_entity; entity SetAggregation subtype of (Aggregation); end_entity; entity ArrayAggregation subtype of (Aggregation); end_entity; end_schema;'! ! !PPPlatypusGrammarTests methodsFor: 'accessing' stamp: 'AlainPlantec 12/7/2011 21:10'! parserClass ^ PPExpressGrammar! ! !PPPlatypusGrammarTests methodsFor: 'constant' stamp: 'AlainPlantec 11/22/2011 15:53'! testConstantDeclaration2 self parse: 'Classes : List of Behavior ::= Behavior allSubclasses ;' rule: #constantDeclaration! ! !PPPlatypusGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/22/2011 15:54'! testDefinedType2 self parse: ' type Natural = Integer; where isPositive :: self > 0; end_type;' rule: #definedType! ! !PPPlatypusGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/22/2011 15:54'! testDefinedType3 self parse: ' type NaturalList = list of Natural; where notEmpty :: self size > 0; end_type;' rule: #definedType! ! !PPPlatypusGrammarTests methodsFor: 'type' stamp: 'AlainPlantec 11/22/2011 15:54'! testDefinedType8 self parse: ' type NaturalList = LIST of Natural; where :: self value > 0; end_type;' rule: #definedType! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/22/2011 15:54'! testDeriveAttribute1 self parse: 's : string ::= ''une chaine'';' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/22/2011 15:54'! testDeriveAttribute2 self parse: 's : age ::= 56;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/22/2011 15:54'! testDeriveAttribute3 self parse: 's : Color ::= blue;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/22/2011 15:54'! testDeriveAttribute4 self parse: 's : Color ::= [ Color blue ] value;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:54'! testDeriveClause2 self parse: 'derive s : string ::= ''toto''; i : integer ::= 3; m : Object ::= self;' rule: #deriveClause! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:54'! testEntityWithClause1 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; DERIVE x : integer ::= 3; END_ENTITY ;' rule: #entity! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:54'! testEntityWithClause2 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; DERIVE x : integer ::= [self i squared ] value; END_ENTITY ;' rule: #entity! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testEntityWithClause4 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; DERIVE x : integer ::= self i squared ; WHERE good_x :: true; good_x :: self x > 12 ; END_ENTITY ;' rule: #entity! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testEntityWithClause7 self parse: ' ENTITY my_second_entity ABSTRACT SUPERTYPE SUBTYPE OF ( my_first_entity ); SELF\Object.s : STRING; SELF\Object.i : INTEGER; INVERSE contents : list of Child for parent; parent : Container for children; WHERE wr1 :: self parent notNil ; END_ENTITY ;' rule: #entity! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testEntityWithClause8 self parse: ' entity EntityDefinition ; directSuperType : EntitDefinition; attributes : Collection of AttributeDeclaration; derive explicitAttributes : Collection of ExplicitAttribute ::= self attributes select: [:a | a isKindOf: ExplicitAttribute] ; inverseAttributes : Collection of InverseAttribute ::= self attributes select: [:a | a isKindOf: InverseAttribute] ; derivedAttributes : Collection of DerivedAttribute ::= self attributes select: [:a | a isKindOf: DerivedAttribute] ; inheritedAttributes : Collection of AttributeDeclaration ::= self superType ifNil: [attributes] ifNotNil: [self superType inheritedAttributes, self attributes] ; where attrNamesUnicity :: (self inheritedAttributes collect: [:a | a ident]) asSet size = self inheritedAttributes size ; end_entity;' rule: #entity! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 11/22/2011 15:56'! testExplicitAttribute5 self parse: 's : string ::= ''Une chaine par defaut'';' rule: #explicitAttribute! ! !PPPlatypusGrammarTests methodsFor: 'global rule' stamp: 'AlainPlantec 11/22/2011 15:56'! testGlobalRule1 self parse:' RULE all_tasks_are_periodic FOR ( generic_task ); WHERE R1 :: (generic_task select: [ :t | (t isKindOf: periodicTask) not ] ) size = 0 ; END_RULE;' rule: #globalRule ! ! !PPPlatypusGrammarTests methodsFor: 'global rule' stamp: 'AlainPlantec 11/22/2011 15:56'! testGlobalRule2 self parse:' RULE all_tasks_are_periodic FOR ( generic_task ); local end_local; WHERE R1 :: (generic_task select: [ :t | (t isKindOf: periodic_task) not ] ) size = 0 ; END_RULE;' rule: #globalRule ! ! !PPPlatypusGrammarTests methodsFor: 'global rule' stamp: 'AlainPlantec 11/22/2011 15:56'! testGlobalRule4 self parse:' RULE all_tasks_are_periodic FOR ( generic_task ); local nb : integer ::= [generic_task size] value; end_local; WHERE R1 :: [ (generic_task select: [ (t isKindOf: periodic_task) not ] ) size = 0] value; END_RULE;' rule: #globalRule ! ! !PPPlatypusGrammarTests methodsFor: 'model' stamp: 'AlainPlantec 11/28/2011 18:50'! testModel1 self parse: self modelExample1 rule: #schema! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/5/2011 08:15'! testPragma1 self parse: 's : Color ::=

Color blue;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/5/2011 08:15'! testPragma2 self parse: 's : Color ::= Color blue;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'attribute' stamp: 'AlainPlantec 12/5/2011 08:16'! testPragma3 self parse: 's : Color ::= Color blue;' rule: #derivedAttribute! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testWhereClause2 self parse: 'where wr :: self ident = ''boby lapointe'';' rule: #whereClause! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testWhereClause3 self parse: 'where goodIdent :: self ident = ''boby lapointe'';' rule: #whereClause! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testWhereClause4 self parse: 'where goodIdent :: self ident = ''boby lapointe''; goodIdentAgain :: self ident = ''boby lapointe'';' rule: #whereClause! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testWhereClause6 self parse: 'where boby :: ''boby lapointe'' self ident = ''boby lapointe'' ; noby :: self ident = ''boby lapointe''; voby:: self ident = ''boby lapointe'';' rule: #whereClause! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 12/12/2011 22:56'! testWhereClause7 self parse: 'where noby :: self ident = ''boby lapointe''; ' rule: #whereClause. ! ! !PPPlatypusGrammarTests methodsFor: 'entity' stamp: 'AlainPlantec 11/22/2011 15:55'! testWhereRule3 self parse: 'wr1 :: [ self ok ] value;' rule: #whereRule! ! !PPStepGrammarTests methodsFor: 'accessing' stamp: 'AlainPlantec 11/25/2011 09:47'! parserClass ^ PPStepGrammar! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 09:59'! testBinary1 self parse: '%908ACD4' rule: #binary! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:00'! testBinary2 self parse: '%fffff' rule: #binary! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:29'! testDataEntity1 self parse: '#1=A();' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:29'! testDataEntity2 self parse: '#1=A(1);' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:29'! testDataEntity3 self parse: '#1=A(1, ());' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:31'! testDataEntity4 self parse: '#1=A(*,*);' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:32'! testDataEntity5 self parse: '#1= ( A() B() );' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:32'! testDataEntity6 self parse: '#1= ( A(1,4) );' rule: #dataEntity! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:13'! testDataSection1 self parse: ' DATA; ENDSEC;' rule: #dataSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:13'! testDataSection2 self parse: ' /* and empty section */ DATA; ENDSEC;' rule: #dataSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testDataSectionWithComment1 self parse: ' DATA/*qsdfq*/; /* jfjgh */ #1/* qsdfs */ = /* qsdfqs*/ I /* qsd */ (/* ddd */3/*qsdfq*/)/*qsdf*/; /*sdf*/ /* dddd /* qsdfmlqsd */ */ ENDSEC;' rule: #dataSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:16'! testEmbeddedList1 self parse: '()' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:16'! testEmbeddedList2 self parse: '( )' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:16'! testEmbeddedList3 self parse: '( 1 )' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:16'! testEmbeddedList4 self parse: '( 1, 2 )' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testEmbeddedList5 self parse: '( 1, ''1'', %89AD, .T., .BLUE. , T(3), (), ( (1,2,3), ((3), (), (456, 789) ) , +34, -5, 1.56, 1e456))' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testEmbeddedList6 self parse: ' ( ( ( 1, 2, 3 ), ( ( 3 ), (), ( 456, 789 ) ) , +34, -5, 1.56, 1e456 ) )' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:30'! testEmbeddedList7 self parse: '(*)' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:30'! testEmbeddedList8 self parse: '($)' rule: #embeddedList! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testEmptyFile self parse: ' ISO-10303-21; HEADER; ENDSEC; DATA; ENDSEC; END-ISO-10303-21;' rule: #exchangeFile! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:06'! testEnum1 self parse: '.BLUE.' rule: #enum! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:06'! testEnum2 self parse: '.C.' rule: #enum! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 1/24/2012 22:34'! testFile1 self parse: ' ISO-10303-21; HEADER; ENDSEC; DATA; #1=SCHEMA_INSTANCE(); ENDSEC; END-ISO-10303-21; ' rule: #exchangeFile! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testHeaderSection1 self parse: ' HEADER; FILE_DESCRIPTION (( ''STEP AP203'' ), ''1''); FILE_NAME (''Motorcycle.STEP'', ''2011-10-08T02:23:25'', ( '''' ), ( '''' ), ''SwSTEP 2.0'', ''SolidWorks 2011'', '''' ); FILE_SCHEMA (( ''CONFIG_CONTROL_DESIGN'' )); ENDSEC;' rule: #headerSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testHeaderSection2 self parse: ' HEADER; MY_HSec_INFO(''free comments''); ENDSEC;' rule: #headerSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/29/2011 14:14'! testHeaderSectionWithComments1 self parse: ' /* qsdcfqsdf */ HEADER /* azefaze */; MY_HSec_INFO(''free comments''); /* qdqd */ ENDSEC;' rule: #headerSection! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:08'! testInstRef1 self parse: '#1' rule: #instRef! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:09'! testInstRef2 self parse: '#111' rule: #instRef! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:03'! testLogical1 self parse: '.T.' rule: #logical! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:03'! testLogical2 self parse: '.F.' rule: #logical! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:03'! testLogical3 self parse: '.U.' rule: #logical! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:07'! testNull self parse: '$' rule: #null! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:01'! testReal1 self parse: '1.456' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:02'! testReal2 self parse: '1.456e234' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:02'! testReal3 self parse: '1.456E234' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:02'! testReal4 self parse: '-1.456E234' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:02'! testReal5 self parse: '0.456E-234' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 5/29/2012 23:45'! testReal6 self parse: '0.' rule: #real! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:07'! testRedefined self parse: '*' rule: #redefined! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:01'! testSignedInteger1 self parse: '1' rule: #signedInteger! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:01'! testSignedInteger2 self parse: '+1' rule: #signedInteger! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:01'! testSignedInteger3 self parse: '-1' rule: #signedInteger! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:10'! testString1 self parse: '''my string''' rule: #string! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:10'! testString2 self parse: '''my ''''string''' rule: #string! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:10'! testString3 self parse: '''my '''' \n string''' rule: #string! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:10'! testString4 self parse: '''my '''' \n string''' rule: #string! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:08'! testTypedValue1 self parse: 'TY(456)' rule: #typedValue! ! !PPStepGrammarTests methodsFor: 'tests' stamp: 'AlainPlantec 11/25/2011 10:08'! testTypedValue2 self parse: 'TY($)' rule: #typedValue! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 5/8/2012 09:54'! expressIdentifier ^ PPExpressIdentifierParser on: self ! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 5/8/2012 10:08'! expressKeyword ^ PPExpressKeywordParser on: self ! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:11'! expressLiteral ^ PPExpressTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:11'! expressOperator ^ PPExpressTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:13'! expressSeparator ^ PPExpressTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:20'! expressToken ^ PPExpressTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:30'! stepIdentifier ^ PPStepFormatTokenParser on: self ! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:25'! stepKeyword ^ PPStepFormatTokenParser on: self ! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:27'! stepLiteral ^ PPStepFormatTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:28'! stepSeparator ^ PPStepFormatTokenParser on: self! ! !PPParser methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:21'! stepToken ^ PPStepFormatTokenParser on: self! ! !String methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/23/2011 10:28'! expressOperator ^ self asParser caseInsensitive expressOperator! ! !String methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/24/2011 23:15'! expressToken ^ self asParser caseInsensitive expressToken! ! !String methodsFor: '*PetitStepExpress-parsing' stamp: 'AlainPlantec 11/23/2011 17:19'! stepToken ^ self asParser caseInsensitive stepToken! ! "PetitStepExpress"! !AbstractHistoryItem commentStamp: '' prior: 0! I am abstract item class for AbstractHistoryList. See BrowserHistoryItem as a good example of concrete item implementation! !AbstractHistoryList commentStamp: 'apl 2/28/2007 16:20' prior: 0! I am an handler for history list inside browser: prev, next and recents. owner is typically an instance of Browser ore one of its subclasses. items is the collection of history items (instances of subclasses of AbstractHistoryList) currentIndex is the current position in history canAppendItem is private, it is used to forbid item appending while appending. historyMaxSize is the maximum number of items (passed at history list creation) Typically use : Instance creation with: BrowserHistoryList class >> owner:historyMaxSize: append items with addItem:. next and prev selecting with: selectNext and selectPrev that send updateModel: to selected item (see AbstractHistoryItem). entity BrowserHistoryList; items : list [1:historyMaxSize] of AbstractHistoryItem; currentIndex : integer; canAppendItem : Boolean; historyMaxSize : integer; end_entity; ! !TamListEventRulesHandler commentStamp: '' prior: 0! Handles event rules for list such as PluggableListMorph or SimpleHierarchicalListMorph. The first purpose was to handle item emphasis rules. Event handling is performed from handleEvent: anEvent. 2 importants methods : itemAtPoint: aPoint is subclassResponsibility, it asks list to return item at a given position (aPoint). unwrappedFromItem: aListItem have here a default implementation. It returns the data stored and accessible from aListItem. ENTITY ListEventRulesHandler ABSTRACT SUPERTYPE; list : ScrollPane; (* the target list for event rules *) rules : LIST OF ListEventRule; (* the list of rules to trigger *) END_ENTITY; ! !TamListItemReference commentStamp: 'apl 12/8/2006 21:18' prior: 0! A TamListItemReference is xxxxxxxxx. Instance Variables emphasisModel: listLabel: localWorkspacePaneContents: owner: showSubLists: subLists: updateFlag: emphasisModel - xxxxx listLabel - xxxxx localWorkspacePaneContents - xxxxx owner - xxxxx showSubLists - xxxxx subLists - xxxxx updateFlag - xxxxx ! !TamStringHolder commentStamp: 'apl 12/8/2006 21:15' prior: 0! A TamStringHolder is a StringHolder for Tamaris. Instance Variables doItContext: doItReceiver: textMorph: doItContext - xxxxx doItReceiver - xxxxx textMorph - xxxxx ! !TamGenericHierarchicalListItemWrapper methodsFor: 'accessing' stamp: 'tam 10/13/2003 15:09'! children ^ item children! ! !TamGenericHierarchicalListItemWrapper methodsFor: 'accessing' stamp: 'apl 6/3/2005 18:35'! contents ^self children collect: [:each | item wrapperClass with: each model: nil]! ! !TamGenericHierarchicalListItemWrapper methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:41'! destroy item := nil. model := nil. super destroy! ! !TamGenericHierarchicalListItemWrapper methodsFor: 'accessing' stamp: 'apl 10/27/2006 11:42'! icon ^ (item respondsTo: #icon) ifTrue: [item icon] ! ! !TamGenericHierarchicalListItemWrapper methodsFor: 'accessing' stamp: 'apl 6/23/2005 13:13'! isReleased ^ item = nil! ! !TamListItemWrapper class methodsFor: 'accessing' stamp: 'tam 6/25/2003 14:23'! interPathString ^ '->'! ! !TamListItemWrapper methodsFor: 'drag and drop' stamp: 'tam 4/8/2003 20:26'! acceptDroppingMorph: transferMorph copy: shouldCopy ^ item acceptDroppingMorph: transferMorph copy: shouldCopy! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 6/6/2003 13:30'! balloonText ^ item balloonText! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 5/20/2012 13:14'! children ^ item notNil ifTrue: [item children] ifFalse: [#()]! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'apl 6/3/2005 18:36'! contents ^item isReleased ifTrue: [#()] ifFalse: [self children collect: [:each | each wrapperClass with: each model: nil]]! ! !TamListItemWrapper methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:41'! destroy item := nil. model := nil. super destroy! ! !TamListItemWrapper methodsFor: 'testing' stamp: 'apl 7/8/2005 09:10'! forceOkToChange ^ item isNil or: [item forceOkToChange]! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 6/25/2003 13:22'! fullPathAsString ^ item fullPathAsString! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 6/25/2003 13:20'! fullPathStrings ^ item fullPathStrings.! ! !TamListItemWrapper methodsFor: 'menu' stamp: 'tam 10/21/2003 11:57'! genericMenu: aMenu selector: aSelector conditionBlock: aBlock fromTaxonomyBrowser: aBrowser recursive: aBoolean ^ self genericMenu: aMenu target: aBrowser selector: aSelector conditionBlock: aBlock fromTaxonomyBrowser: aBrowser recursive: aBoolean ! ! !TamListItemWrapper methodsFor: 'menu' stamp: 'apl 5/31/2005 19:17'! genericMenu: aMenu target: aTarget selector: aSelector conditionBlock: aBlock fromTaxonomyBrowser: aBrowser recursive: aBoolean | subM | aBoolean ifTrue: [subM := MenuMorph new. self contents do: [:i | i genericMenu: subM target: aTarget selector: aSelector conditionBlock: aBlock fromTaxonomyBrowser: aBrowser recursive: false]. subM submorphCount > 0 ifTrue: [(aBlock value: item) ifTrue: [aMenu add: self item shortName subMenu: subM target: aTarget selector: aSelector argumentList: { self }] ifFalse: [aMenu add: self item shortName subMenu: subM]] ifFalse: [(aBlock value: item) ifTrue: [aMenu add: self item shortName target: aTarget selector: aSelector argumentList: { self }]]]. ^aMenu! ! !TamListItemWrapper methodsFor: 'testing' stamp: 'apl 6/3/2004 14:08'! hasContents ^ item hasContents! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 4/4/2003 11:14'! icon ^ item icon! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 6/25/2003 14:23'! interPathString ^ self class interPathString! ! !TamListItemWrapper methodsFor: 'testing' stamp: 'tam 10/21/2003 11:17'! isReleased ^ item isNil! ! !TamListItemWrapper methodsFor: 'testing' stamp: 'tam 7/8/2003 13:20'! isTaxon ^ item isTaxon! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 10/10/2003 15:08'! item ^ item! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 10/15/2010 09:00'! maxSubLevelDescent ^ 6! ! !TamListItemWrapper methodsFor: 'menu' stamp: 'tam 7/2/2003 15:22'! menu: aMenu shifted: b ^ item menu: aMenu shifted: b! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'tam 10/21/2003 17:02'! parentsChain ^ item parentsChain! ! !TamListItemWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 10:27'! preferredColor item ifNotNil: [:i | ^ i preferredColor ]. ^ super preferredColor ! ! !TamListItemWrapper methodsFor: 'searching' stamp: 'tam 7/8/2003 13:27'! selectDeeplySuchThat: aBlock ^ self selectDeeplySuchThat: aBlock level: 0! ! !TamListItemWrapper methodsFor: 'searching' stamp: 'AlainPlantec 11/18/2010 10:31'! selectDeeplySuchThat: aBlock level: anInteger | res | res := OrderedCollection new. anInteger < self maxSubLevelDescent ifTrue: [ (aBlock value: self) ifTrue: [res add: self]. self contents do: [:sr | res := res , (sr selectDeeplySuchThat: aBlock level: anInteger + 1)]]. ^ res! ! !TamListItemWrapper methodsFor: 'searching' stamp: 'AlainPlantec 11/18/2010 10:31'! selectItemsDeeplySuchThat: aBlock level: anInteger | res | res := OrderedCollection new. anInteger < self maxSubLevelDescent ifTrue: [(aBlock value: item) ifTrue: [res add: item]. self contents do: [:sr | res := res , (sr selectDeeplySuchThat: aBlock level: anInteger + 1)]]. ^ res! ! !TamListItemWrapper methodsFor: 'updating' stamp: 'tam 2/18/2004 16:04'! selectingFrom: aHierarchicalList ^ item selectingFrom: aHierarchicalList! ! !TamListItemWrapper methodsFor: 'updating' stamp: 'tam 2/18/2004 16:03'! unSelectingFrom: aHierarchicalList ^ item unSelectingFrom: aHierarchicalList! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'AlainPlantec 12/11/2013 18:01'! default ^ Default ifNil: [Default := self rootNamed: self platypusMetaModelsItemName] ! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'apl 6/10/2004 21:33'! defaultTaxonNamed: aName taxonClass: aTaxonSubClass | taxon | taxon := self default taxonomy children detect: [:it | it listLabel = aName] ifNone: []. taxon ifNil: [taxon := aTaxonSubClass taxonLabel: aName. self default taxonomy insertReference: taxon]. ^ taxon! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'apl 3/2/2007 11:31'! fromFileListTaxonName ^ ' *** from file fist *** '! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'apl 4/19/2005 17:11'! linkTo: anotherItem | newTaxonomy rootLink | newTaxonomy := self new . rootLink := TamRootTaxonLinkReference from: anotherItem taxonomy linked. rootLink managerItem: newTaxonomy. newTaxonomy taxonomy: rootLink. newTaxonomy listId: ''. ^newTaxonomy! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'AlainPlantec 12/11/2013 18:01'! platypusMetaModelsItemName ^ 'platypus-meta-models'! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'tam 3/5/2004 17:31'! resetDefault Default := nil ! ! !TamManagerItem class methodsFor: 'instance creation' stamp: 'apl 4/19/2005 17:11'! rootNamed: anIdent | newTaxonomy rootTaxon | newTaxonomy := self new. rootTaxon := TamRootTaxonReference taxonLabel: anIdent. rootTaxon managerItem: newTaxonomy. newTaxonomy taxonomy: rootTaxon. newTaxonomy listId: ''. ^newTaxonomy! ! !TamManagerItem methodsFor: 'drag and drop' stamp: 'AlainPlantec 5/17/2012 23:59'! acceptDroppingMorph: transferMorph event: evt inMorph: dstListMorph "Here we are fetching informations from the dropped transferMorph and performing the correct action for this drop." | shouldCopy | shouldCopy := (transferMorph respondsTo: #shouldCopy) ifTrue: [transferMorph shouldCopy] ifFalse: [true]. ^ self taxonomy acceptDroppingMorph: transferMorph copy: shouldCopy! ! !TamManagerItem methodsFor: 'converting' stamp: 'AlainPlantec 5/18/2012 00:02'! asStringOrText ^ String streamContents: [:strm | strm nextPutAll: self taxonomy listLabel. self listId ifNotEmpty: [ :id | strm nextPutAll: ' - '. strm nextPutAll: id]]! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! currentSelection ^currentSelection! ! !TamManagerItem methodsFor: 'accessing' stamp: 'apl 6/14/2004 11:45'! currentSelection: anObject currentSelection := anObject! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! currentlyExpanded ^currentlyExpanded! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! currentlyExpanded: anObject currentlyExpanded := anObject! ! !TamManagerItem methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/17/2012 23:59'! destroy currentSelection := nil. currentlyExpanded := nil. item ifNotNil: [ item destroy. item := nil]. super destroy! ! !TamManagerItem methodsFor: 'menu' stamp: 'tam 7/8/2003 10:47'! genericMenu: aMenu selector: aSelector fromTaxonomyManager: aManager aMenu add: self asString target: aManager selector: aSelector argumentList: {self}. ^ aMenu! ! !TamManagerItem methodsFor: 'initialize/release' stamp: 'apl 6/26/2005 10:17'! initialize super initialize. currentlyExpanded := #(). ! ! !TamManagerItem methodsFor: 'testing' stamp: 'tam 3/5/2004 17:41'! isDefault ^ self == self class default ! ! !TamManagerItem methodsFor: 'testing' stamp: 'apl 3/2/2005 13:53'! isMoveable ^ false! ! !TamManagerItem methodsFor: 'testing' stamp: 'tam 10/3/2003 09:37'! isReleased ^ item isNil! ! !TamManagerItem methodsFor: 'testing' stamp: 'apl 6/24/2005 18:57'! isRootTaxonLink ^item isRootTaxonLink! ! !TamManagerItem methodsFor: 'menu' stamp: 'tam 5/29/2003 13:38'! keyStroke: aCharacter from: tamuggableListMorph ^ self taxonomy keyStroke: aCharacter from: tamuggableListMorph ! ! !TamManagerItem methodsFor: 'accessing' stamp: 'tam 7/28/2003 10:25'! listId ^listId! ! !TamManagerItem methodsFor: 'accessing' stamp: 'tam 7/28/2003 10:26'! listId: aString listId := aString! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! listLabel ^ listLabel! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! listLabel: aString listLabel := aString! ! !TamManagerItem methodsFor: 'menu' stamp: 'apl 4/18/2005 23:30'! menu: menu shifted: aBoolean ^self taxonomy menu: menu shifted: aBoolean! ! !TamManagerItem methodsFor: 'ui building' stamp: 'AlainPlantec 5/17/2012 23:36'! selectingFrom: aTaxonomiesManager | brw | (brw := aTaxonomiesManager taxonomyBrowser) rootWrapper: (self taxonomy wrapperClass with: self taxonomy model: nil). (self currentSelection notNil and: [self currentSelection isReleased]) ifTrue: [self currentSelection: nil]. brw noteNewSelection: self currentSelection currentlyExpanded: self currentlyExpanded. ! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:03'! taxonomy ^ item! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:53'! taxonomy: anObject item := anObject! ! !TamManagerItem methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:04'! taxonomyWrapper ^ item ifNotNil: [item wrapperClass with: item model: nil]! ! !TamManagerItem methodsFor: 'ui building' stamp: 'apl 6/3/2005 17:05'! unSelectingFrom: aTaxonomiesManager | brw | (brw := aTaxonomiesManager taxonomyBrowser) rootWrapper ifNotNil: ["brw restoreLayoutFramesFrom: self layoutFramesIndex." brw noteNewSelection: nil. brw rootWrapper destroy. brw rootWrapper: nil]! ! !TamManagerItem methodsFor: 'system changes handling' stamp: 'AlainPlantec 5/17/2012 23:58'! updateBrowsers: aBlockOrASelector TamBrowser allSubInstances copy do: [:brw | brw isReleased ifFalse: [brw rootTaxon = item ifTrue: [ aBlockOrASelector isSymbol ifTrue: [brw perform: aBlockOrASelector] ifFalse: [aBlockOrASelector value: brw]]]]! ! !TamBrowserScrollPane methodsFor: 'geometry' stamp: 'apl 4/2/2004 16:13'! extent: newExtent super extent: (newExtent max: 36 @ 16). pastUp ifNotNil: [ pastUp extent: self innerBounds width - 6 @ self extent y. pastUp layoutChanged.self changed]. self setScrollDeltas! ! !TamBrowserScrollPane methodsFor: 'initialize/release' stamp: 'apl 4/2/2004 16:15'! initialize super initialize. pastUp := AlignmentMorph newRow. scroller addMorph: pastUp. pastUp layoutPolicy: TableLayout new. pastUp listDirection: #leftToRight. pastUp wrapDirection: #TopToBottom. pastUp vResizing: #shrinkWrapp. pastUp hResizing: #shrinkWrapp. pastUp borderWidth: 0. pastUp color: Color transparent! ! !TamBrowserScrollPane methodsFor: 'accessing' stamp: 'apl 4/2/2004 10:46'! pastUp ^pastUp! ! !TamBrowserScrollPane methodsFor: 'accessing' stamp: 'apl 4/2/2004 10:46'! pastUp: anObject pastUp := anObject! ! !TamBrowserScrollPane methodsFor: 'geometry' stamp: 'apl 4/2/2004 10:49'! resetExtent self extent: self extent.! ! !TamBrowserScrollPane methodsFor: 'geometry' stamp: 'apl 4/23/2005 01:11'! vUnadjustedScrollRange "Return the width of the widest item in the list" pastUp submorphs notEmpty ifFalse: [^0]. ^pastUp submorphs last fullBounds bottom! ! !TamPluggableListMorph methodsFor: 'updating' stamp: 'apl 4/18/2005 23:03'! bounds: newBounds super bounds: newBounds. (model respondsTo: #boundsOf:updatedWith:) ifTrue: [model boundsOf: self updatedWith: newBounds]! ! !TamPluggableListMorph methodsFor: 'Polymorph-Widgets' stamp: 'AlainPlantec 5/2/2012 16:26'! fillStyleToUse ^ self enabled ifTrue: [(self theme listNormalFillStyleFor: self) darker] ifFalse: [self theme listDisabledFillStyleFor: self]! ! !TamAnnounce methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 18:43'! sourceHandler ^ sourceHandler! ! !TamAnnounce methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 18:43'! sourceHandler: aSourceHandler sourceHandler := aSourceHandler! ! !TamForceTreeUpdating methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 5/17/2012 19:21'! codeMorph ^ codeMorph! ! !TamForceTreeUpdating methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 5/17/2012 19:21'! codeMorph: aMorph codeMorph := aMorph! ! !TamReinitializeEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:28'! itemReference ^ itemReference! ! !TamReinitializeEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:28'! itemReference: aListItemReference itemReference := aListItemReference! ! !TamIndentingListItemMorph class methodsFor: 'preferences' stamp: 'apl 4/13/2005 22:06'! showItemsIcon ^ true! ! !TamIndentingListItemMorph class methodsFor: 'preferences' stamp: 'apl 4/13/2005 23:35'! useStandardToggleIcons ^ false! ! !TamIndentingListItemMorph methodsFor: 'deleting' stamp: 'apl 6/23/2005 13:03'! delete super delete. self destroy! ! !TamIndentingListItemMorph methodsFor: 'deleting' stamp: 'apl 6/23/2005 13:02'! destroy super destroy. complexContents := nil! ! !TamIndentingListItemMorph methodsFor: 'initialization' stamp: 'AlainPlantec 5/19/2012 11:30'! fontToUse (container emphasisOf: complexContents withoutListWrapper) ifNotNil: [:emph | emphasis ~= emph emphasis emphasisCode ifTrue: [ emphasis := emph emphasis emphasisCode. self extent: self minWidth @ self minHeight]]. ^ super fontToUse! ! !TamIndentingListItemMorph methodsFor: 'deleting' stamp: 'apl 7/8/2005 09:06'! hasToggle ^ complexContents notNil and: [super hasToggle]! ! !TamIndentingListItemMorph methodsFor: 'accessing' stamp: 'apl 10/27/2006 11:35'! icon ^ self class showItemsIcon ifTrue: [complexContents ifNotNil: [complexContents withoutListWrapper ifNotNil: [complexContents withoutListWrapper icon]]]! ! !TamIndentingListItemMorph methodsFor: 'initialization' stamp: 'AlainPlantec 12/5/2013 09:27'! initWithContents: anObject prior: priorMorph forList: hostList indentLevel: newLevel | emph | container := hostList. complexContents := anObject. indentLevel := 0. emph := hostList emphasisOf: anObject withoutListWrapper. emphasis := emph emphasis. color := emph textColor. self initWithContents: anObject asString font: StandardFonts listFont emphasis: emphasis emphasisCode. isExpanded := false. nextSibling := firstChild := nil. priorMorph ifNotNil: [priorMorph nextSibling: self]. indentLevel := newLevel. icon := anObject icon. self extent: self minWidth @ self minHeight! ! !TamIndentingListItemMorph methodsFor: 'accessing' stamp: 'apl 2/9/2006 14:21'! isFirstItem ^ owner notNil and: [super isFirstItem]! ! !TamIndentingListItemMorph methodsFor: 'initialization' stamp: 'AlainPlantec 5/19/2012 11:27'! measureContents "Round up in case fractional." ^ super measureContents! ! !TamIndentingListItemMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:01'! unhighlight complexContents ifNotNil: [super unhighlight]! ! !TamStringMorphEditor methodsFor: 'initialization' stamp: 'apl 4/22/2005 20:14'! initialize "Initialize the receiver. Give it a white background" super initialize. self color: Color black.! ! !TamStringMorphEditor methodsFor: 'event handling' stamp: 'apl 4/22/2005 20:01'! keyboardFocusChange: aBoolean owner ifNotNil: [super keyboardFocusChange: aBoolean]. ! ! !AbstractHistoryItem commentStamp: '' prior: 104036738! I am abstract item class for AbstractHistoryList. See BrowserHistoryItem as a good example of concrete item implementation! !AbstractHistoryItem methodsFor: 'testing' stamp: 'apl 4/10/2005 22:14'! isValidFromModel: aModel "only model can say if i'm a valid item" ^ true! ! !AbstractHistoryItem methodsFor: 'model updating' stamp: 'apl 4/10/2005 22:14'! updateModel: aModel "model knows what to do with me" self subclassResponsibility! ! !TamBrowserHistoryItem class methodsFor: 'instance creation' stamp: 'apl 4/9/2005 10:05'! listItemReference: aListItemReference ^ self new listItemReference: aListItemReference! ! !TamBrowserHistoryItem methodsFor: 'comparing' stamp: 'apl 4/9/2005 10:04'! <= other ^ listItemReference <= other listItemReference! ! !TamBrowserHistoryItem methodsFor: 'comparing' stamp: 'apl 4/9/2005 10:04'! = another another class == self class ifFalse: [^ false]. ^ listItemReference = another listItemReference! ! !TamBrowserHistoryItem methodsFor: 'converting' stamp: 'apl 4/9/2005 10:03'! asString ^listItemReference asStringOrText! ! !TamBrowserHistoryItem methodsFor: 'comparing' stamp: 'apl 4/9/2005 10:03'! hash ^listItemReference hash! ! !TamBrowserHistoryItem methodsFor: 'testing' stamp: 'apl 4/9/2005 10:01'! isValidFromModel: aModel ^ aModel isBrowserHistoryItemValid: self ! ! !TamBrowserHistoryItem methodsFor: 'accessing' stamp: 'apl 4/9/2005 10:02'! listItemReference ^listItemReference! ! !TamBrowserHistoryItem methodsFor: 'accessing' stamp: 'apl 4/9/2005 10:02'! listItemReference: anObject listItemReference := anObject! ! !TamBrowserHistoryItem methodsFor: 'model updating' stamp: 'apl 4/9/2005 10:01'! updateModel: aModel aModel setFromBrowserHistoryItem: self! ! !AbstractHistoryList commentStamp: 'apl 2/28/2007 16:20' prior: 104036929! I am an handler for history list inside browser: prev, next and recents. owner is typically an instance of Browser ore one of its subclasses. items is the collection of history items (instances of subclasses of AbstractHistoryList) currentIndex is the current position in history canAppendItem is private, it is used to forbid item appending while appending. historyMaxSize is the maximum number of items (passed at history list creation) Typically use : Instance creation with: BrowserHistoryList class >> owner:historyMaxSize: append items with addItem:. next and prev selecting with: selectNext and selectPrev that send updateModel: to selected item (see AbstractHistoryItem). entity BrowserHistoryList; items : list [1:historyMaxSize] of AbstractHistoryItem; currentIndex : integer; canAppendItem : Boolean; historyMaxSize : integer; end_entity; ! !AbstractHistoryList class methodsFor: 'accessing' stamp: 'apl 2/22/2007 16:49'! getOwnerOf: aHistoryList self historyListsByOwnerIndex keysAndValuesDo: [:k :v | v = aHistoryList ifTrue: [^ k]]. ^ nil! ! !AbstractHistoryList class methodsFor: 'accessing' stamp: 'apl 2/20/2007 17:40'! historyListFor: aBrowser ^ self historyListsByOwnerIndex at: aBrowser ifAbsentPut: [ self owner: aBrowser historyMaxSize: 20]! ! !AbstractHistoryList class methodsFor: 'accessing' stamp: 'apl 2/20/2007 17:59'! historyListsByOwnerIndex ^ HistoryListsByOwnerIndex ifNil: [HistoryListsByOwnerIndex := WeakIdentityKeyDictionary new]! ! !AbstractHistoryList class methodsFor: 'class initialization' stamp: 'apl 2/20/2007 17:22'! initialize HistoryListsByOwnerIndex := nil! ! !AbstractHistoryList class methodsFor: 'instance creation' stamp: 'apl 2/20/2007 17:55'! owner: anObject historyMaxSize: anInteger | newHistory | newHistory := self new historyMaxSize: anInteger. newHistory setOwner: anObject. ^ newHistory! ! !AbstractHistoryList methodsFor: 'updating' stamp: 'apl 9/27/2007 07:27'! addItem: anItem canAppendItem ifTrue: [items notEmpty ifTrue: [anItem = (self items at: currentIndex) ifTrue: [^ false]. items size < (historyMaxSize + 1) ifFalse: [items removeFirst. currentIndex := currentIndex - 1]]. items add: anItem afterIndex: currentIndex. currentIndex := currentIndex + 1]. ^ true! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 4/10/2005 11:03'! canSelectNext "is there an item after currentIndex pos" ^ self items size - currentIndex > 0! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 4/10/2005 11:03'! canSelectPrev "is there an item before currentIndex pos" ^ currentIndex > 1! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 4/10/2005 22:00'! canShowRecents ^ self recents size > 1! ! !AbstractHistoryList methodsFor: 'updating' stamp: 'apl 2/20/2007 17:04'! checkAndClean "remove all 'invalid items" | founds | founds := items select: [:it | [(it isValidFromModel: self owner) not] on: Error do: [true]]. items removeAll: founds. "remove all items that are equal to their next" founds := OrderedCollection new. 1 to: items size - 1 do: [:pos | (items at: pos) = (items at: pos + 1) ifTrue: [founds add: (items at: pos)]]. items removeAll: founds. currentIndex <= items size ifFalse: [currentIndex := items size]! ! !AbstractHistoryList methodsFor: 'updating' stamp: 'apl 4/10/2005 22:09'! clearHistory items removeAllSuchThat: [:e | true]. currentIndex := 0! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 4/10/2005 10:57'! currentItem "return current item if available" ^ (currentIndex <= items size and: [currentIndex > 0]) ifTrue: [items at: currentIndex]! ! !AbstractHistoryList methodsFor: 'private accessing' stamp: 'apl 4/10/2005 10:57'! historyMaxSize: anInteger "maximum number of items in list" historyMaxSize := anInteger! ! !AbstractHistoryList methodsFor: 'initialize/release' stamp: 'apl 4/8/2005 17:22'! initialize super initialize. items := OrderedCollection new. currentIndex := 0. canAppendItem := true. ! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 4/8/2005 17:12'! isEmpty ^ self items isEmpty! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 2/20/2007 17:04'! isFor: aBrowser ^ self owner == aBrowser! ! !AbstractHistoryList methodsFor: 'private accessing' stamp: 'apl 4/10/2005 10:58'! items "return the collection of items" ^ items! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 4/8/2005 17:12'! last ^ items notEmpty ifTrue: [items last]! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 4/10/2005 21:59'! menuNextList: aMenu "build a menu for all next items selection or clear history" | item nextList hidx | nextList := self nextList. hidx := currentIndex. 1 to: nextList size do: [:p | item := nextList at: p. aMenu add: item asString target: self selector: #updateOwnerWithItem: argument: p + hidx]. aMenu addLine. aMenu add: 'clear ' target: self selector: #clearHistory. ^ aMenu! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 4/10/2005 21:59'! menuPrevList: aMenu " build a menu for all previous items selection or clear history" | item prevList | prevList := self prevList. prevList size to: 1 by: -1 do: [:p | item := prevList at: p. aMenu add: item asString target: self selector: #updateOwnerWithItem: argument: p]. aMenu addLine. aMenu add: 'clear ' target: self selector: #clearHistory. ^ aMenu! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 4/10/2005 10:59'! nextList "return 'next' items sublist " ^ items copyFrom: currentIndex + 1 to: items size! ! !AbstractHistoryList methodsFor: 'testing' stamp: 'apl 4/8/2005 17:28'! notEmpty ^ self isEmpty not! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 2/20/2007 17:55'! owner ^ self class getOwnerOf: self! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 4/10/2005 10:59'! prevList "return 'prev' items sublist" ^ items copyFrom: 1 to: currentIndex - 1! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 4/10/2005 22:00'! recents self checkAndClean. ^ items asSet asArray sort! ! !AbstractHistoryList methodsFor: 'initialize/release' stamp: 'apl 2/20/2007 17:04'! release items := nil. super release! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'AlainPlantec 12/12/2010 15:50'! selectFromRecentsList | sortedHistory historyItems index choice | "open a menu with all items in it" self checkAndClean. self isEmpty ifTrue: [^ UIManager default inform: 'empty']. sortedHistory := self recents asArray sort. historyItems := (sortedHistory collect: [:h | h asString]) asOrderedCollection. historyItems add: 'clear recents'. (index := (UIManager default chooseFrom: historyItems lines: {historyItems size - 1})) = 0 ifFalse: [index = historyItems size ifTrue: [self clearHistory] ifFalse: [choice := sortedHistory at: index. self updateOwnerWithItem: choice]]! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 4/10/2005 21:54'! selectNext "next item in history" self canSelectNext ifTrue: [self updateOwnerWithItemIndex: currentIndex + 1]! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 4/10/2005 21:54'! selectPrev "previous item in history" self canSelectPrev ifTrue: [self updateOwnerWithItemIndex: currentIndex - 1]! ! !AbstractHistoryList methodsFor: 'private accessing' stamp: 'apl 2/28/2007 16:17'! setOwner: aBrowserOrSomethingLikeThat ! ! !AbstractHistoryList methodsFor: 'accessing' stamp: 'apl 2/22/2007 16:33'! size ^ items size! ! !AbstractHistoryList methodsFor: 'updating' stamp: 'apl 4/9/2005 11:18'! update: aSymbol super update: aSymbol. self checkAndClean! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 2/20/2007 17:04'! updateOwnerWithItem: anHistoryItem "ask owner to update itself with an item" [canAppendItem := false. anHistoryItem updateModel: self owner] ensure: [canAppendItem := true]! ! !AbstractHistoryList methodsFor: 'history selecting' stamp: 'apl 4/10/2005 22:04'! updateOwnerWithItemIndex: anHistoryItemIndex "take item at an index and ask owner to update itself with fetched item" currentIndex := anHistoryItemIndex. self updateOwnerWithItem: (self items at: currentIndex)! ! !Object methodsFor: '*tamaris-object-freeing' stamp: 'apl 6/3/2005 17:22'! destroy ! ! !Object methodsFor: '*tamaris-classification' stamp: 'apl 4/8/2006 07:47'! isTamListItemReference ^ false! ! !Object methodsFor: '*tamaris-stepping' stamp: 'apl 7/10/2005 21:43'! step! ! !TamGenericHierarchicalListItem class methodsFor: 'instance creation' stamp: 'apl 4/5/2005 09:30'! fromFlatCollection: aCollection | index first result element | index := Dictionary new. aCollection do: [:line | line notEmpty ifTrue: [first := line first. index at: first ifAbsentPut: OrderedCollection new. (index at: first) add: line allButFirst]]. result := OrderedCollection new. index keysAndValuesDo: [:k :subs | element := self linked: k. result add: element. element fromFlatCollection: subs]. ^ result asOrderedCollection! ! !TamGenericHierarchicalListItem class methodsFor: 'instance creation' stamp: 'tam 10/15/2003 11:51'! linked: anObject ^ self new linked: anObject icon: nil! ! !TamGenericHierarchicalListItem class methodsFor: 'instance creation' stamp: 'tam 10/13/2003 15:15'! linked: anObject icon: aForm ^ self new linked: anObject icon: aForm! ! !TamGenericHierarchicalListItem methodsFor: 'testing' stamp: 'tam 2/6/2004 22:48'! = another another class = self class ifFalse: [^ false]. ^ self linked = another linked ! ! !TamGenericHierarchicalListItem methodsFor: 'updating' stamp: 'tam 10/13/2003 16:43'! addChild: anItem children add: anItem. anItem owner: self.! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/5/2005 13:28'! asString ^ self asStringBlock ifNil: [self linked asString] ifNotNil: [self asStringBlock valueWithPossibleArgs: { self }]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/28/2003 12:46'! asStringBlock ^ asStringBlock! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/28/2003 12:46'! asStringBlock: aBlock asStringBlock := aBlock! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/13/2003 14:54'! children ^ children! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/21/2003 10:56'! children: aCollection children := children copyEmpty. aCollection do: [:e | self addChild: e]! ! !TamGenericHierarchicalListItem methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:42'! destroy linked := nil. super destroy! ! !TamGenericHierarchicalListItem methodsFor: 'actions' stamp: 'apl 2/17/2006 15:23'! doDeeply: aBlock from: aHierarchicalList aBlock valueWithPossibleArgs: {self. aHierarchicalList}. self children do: [:child | child doDeeply: aBlock from: aHierarchicalList ]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/3/2006 10:26'! emphasisModel ^ (linked respondsTo: #emphasisModel) ifTrue: [linked emphasisModel]! ! !TamGenericHierarchicalListItem methodsFor: 'updating' stamp: 'apl 4/5/2005 09:31'! fromFlatCollection: aCollection self children: (self class fromFlatCollection: aCollection)! ! !TamGenericHierarchicalListItem methodsFor: 'testing' stamp: 'apl 4/4/2005 11:40'! hash ^ self linked hash! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/5/2005 09:35'! haveIcon ^ self icon notNil! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/4/2005 11:52'! icon ^ icon ifNil: [(linked respondsTo: #icon) ifTrue: [linked icon] ]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:41'! icon: aForm icon := aForm! ! !TamGenericHierarchicalListItem methodsFor: 'initialize/release' stamp: 'tam 2/18/2004 15:43'! initialize super initialize. children := OrderedCollection new! ! !TamGenericHierarchicalListItem methodsFor: 'menu' stamp: 'apl 4/5/2005 09:52'! keyStroke: aCharacter from: tamuggableListMorph aCharacter = $i ifTrue: [^ self inspect]. aCharacter = $I ifTrue: [^ self explore]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/13/2003 23:01'! linked ^ linked ! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:41'! linked: anObject linked := anObject! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'tam 10/13/2003 15:13'! linked: anObject icon: aForm self linked: anObject. self icon: aForm! ! !TamGenericHierarchicalListItem methodsFor: 'menu' stamp: 'apl 4/4/2005 11:46'! menu: aMenu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" ^ aMenu! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/4/2005 11:49'! owner ^ owner! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/4/2005 11:49'! owner: anotherListElement owner := anotherListElement! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 3/23/2006 14:39'! selectingBlock ^ selectingBlock ! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/5/2005 13:24'! selectingBlock: aBlockWithZeroOneOrTwoArgs selectingBlock := aBlockWithZeroOneOrTwoArgs! ! !TamGenericHierarchicalListItem methodsFor: 'updating' stamp: 'apl 3/23/2006 14:38'! selectingFrom: aHierarchicalList ^ self selectingBlock ifNil: [(linked respondsTo: #selectingFrom:) ifTrue: [linked selectingFrom: aHierarchicalList]] ifNotNil: [self selectingBlock valueWithPossibleArgs: {self. aHierarchicalList}]! ! !TamGenericHierarchicalListItem methodsFor: 'updating' stamp: 'apl 2/17/2006 17:10'! sort | sb | sb := [:a :b | a asString < b asString]. self children: (self children asArray sort: sb) asOrderedCollection. self children do: [:c | c sort]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 3/23/2006 15:36'! unSelectingBlock ^ unSelectingBlock ! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/5/2005 13:24'! unSelectingBlock: aBlockWithZeroOneOrTwoArgs unSelectingBlock := aBlockWithZeroOneOrTwoArgs! ! !TamGenericHierarchicalListItem methodsFor: 'updating' stamp: 'apl 3/23/2006 14:39'! unSelectingFrom: aHierarchicalList ^ self unSelectingBlock ifNil: [(linked respondsTo: #unSelectingFrom:) ifTrue: [linked unSelectingFrom: aHierarchicalList]] ifNotNil: [self unSelectingBlock valueWithPossibleArgs: {self. aHierarchicalList}]! ! !TamGenericHierarchicalListItem methodsFor: 'accessing' stamp: 'apl 4/5/2005 09:29'! wrapperClass ^ TamGenericHierarchicalListItemWrapper! ! !TamIcons class methodsFor: 'utilities' stamp: 'apl 1/26/2007 11:24'! capitalize: aString first: firstCapitalized | instr outstr resString curr | instr := ReadStream on: aString. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [(curr := instr next) == $_ ifTrue: [(curr := instr next) ifNotNil: [outstr nextPut: curr asUppercase]] ifFalse: [outstr nextPut: curr asLowercase]]. resString := outstr contents. firstCapitalized ifTrue: [resString at: 1 put: resString first asUppercase] ifFalse: [resString at: 1 put: resString first asLowercase]. ^ resString! ! !TamIcons class methodsFor: 'accessing' stamp: 'AlainPlantec 11/18/2010 09:54'! defaultExtent | prefSet | prefSet := StandardFonts defaultFont height. ^ (prefSet - 12 max: 16) @ (prefSet - 12 max: 16)! ! !TamIcons class methodsFor: 'accessing' stamp: 'AlainPlantec 12/6/2010 21:52'! defaultListExtent | prefSet | prefSet := (StandardFonts listFont height - 10) max: 12. ^ prefSet @ prefSet ! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsArchiveViewer ^ (Form extent: 10@10 depth: 32 fromArray: #( 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4294967295 4286611584 4294967295 4286611584 4294967295 4286611584 4294967295 4286611584 4286611584 4286611584 4294967295 4286611584 4294967295 4286611584 4294967295 4286611584 4294967295 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsBrowser ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278683399 4281771574 4288272025 4283808341 4286501246 4287351179 4288076182 4287420300 4284071001 4289257640 4282231357 4282954312 4289458603 4285319532 4289783984 4288601246 4290838464 4289524396 4285582192 4290838464 4283414095 4281771318 4284267868 4283939415 4284070745 4283742292 4284267868 4284202331 4284463967 4284858981 4281114412 4279997723 4284727651 4284662370 4284202331 4284202075 4284202075 4284202331 4285448814 4285252971 4280457506 4282954312 4287889358 4290838464 4289658821 4289986519 4292345815 4292345815 4292345815 4290969538 4283414095 4282954312 4288607941 4293918703 4293132275 4293394431 4294967295 4294967295 4294967295 4291297223 4283414095 4282954312 4290442426 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4290902465 4283414095 4282954312 4290772415 4291297223 4291034307 4290442426 4290442426 4290442426 4290442426 4289523628 4283414095 4279997723 4282954312 4282954312 4282954312 4282954312 4282954312 4282954312 4282954312 4282954312 4280457506) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsChangeSorter ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4281245856 4286632915 4286830037 4285515976 4279472272 4283939257 4286830037 4286830037 4286632915 4281245856 4282756782 4290968828 4291231743 4289260780 4280194710 4286830037 4291231743 4291231743 4290968828 4282756782 4280391832 4284399294 4284530623 4283873464 4280851612 4283085233 4284530623 4284530623 4284399294 4280391832 4282034344 4289063658 4289260780 4289260780 4289260780 4289260780 4289260780 4289260780 4289063658 4282034344 4282034344 4289063658 4289260780 4289260780 4289260780 4289260780 4289260780 4289260780 4289063658 4282034344 4280391832 4284399294 4284530623 4284530623 4284530623 4284530623 4284530623 4284530623 4284399294 4280391832 4282756782 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4282756782 4282625710 4290706170 4290968828 4290968828 4290968828 4290968828 4290968828 4290968828 4290706170 4282625710 4279800466 4282690989 4282756782 4282756782 4282756782 4282756782 4282756782 4282756782 4282690989 4279800466) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsDualChangeSorter ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4281245856 4285778891 4282231209 4286501586 4283939257 4283939257 4284267708 4283676599 4286632915 4281245856 4282756782 4289655024 4284267965 4290771706 4286830037 4286830037 4287290074 4286435793 4290968828 4282756782 4280391832 4283939514 4282165673 4284399037 4282428331 4282428331 4283216562 4282953904 4284399294 4280391832 4282034344 4289063658 4289260780 4289260780 4285581769 4285581769 4289260780 4289260780 4289063658 4282034344 4282034344 4289063658 4289260780 4289260780 4285581769 4285581769 4289260780 4289260780 4289063658 4282034344 4280391832 4284399294 4284530623 4284530623 4282428331 4282428331 4284530623 4284530623 4284399294 4280391832 4282756782 4290968828 4291231743 4291231743 4286830037 4286830037 4291231743 4291231743 4290968828 4282756782 4282625710 4290706170 4290968828 4290968828 4286698708 4286698708 4290968828 4290968828 4290706170 4282625710 4279800466 4282690989 4282756782 4282756782 4281245856 4281245856 4282756782 4282756782 4282690989 4279800466) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsFileList ^ (Form extent: 10@10 depth: 32 fromArray: #( 4287764626 4289545389 4289611182 4288160152 4289149607 4289611182 4289611182 4289611182 4289545389 4287764626 4289610670 4294622970 4294755068 4290600637 4293502441 4294755068 4294755068 4294755068 4294622970 4289610670 4288621471 4291787727 4291919313 4289215912 4291128005 4291919313 4291919313 4291919313 4291787727 4288621471 4288358043 4289931187 4289660847 4290132150 4289533357 4289599150 4290264248 4289333162 4289865650 4288358043 4288160152 4290464443 4291314120 4290465979 4290201015 4290201015 4290400442 4290134454 4290202295 4288160152 4289611182 4294755068 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294755068 4289611182 4289611182 4294755068 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294755068 4289611182 4289611182 4294755068 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294755068 4289611182 4289610670 4294622970 4294755068 4294755068 4294755068 4294755068 4294755068 4294755068 4294622970 4289610670 4287764626 4289545389 4289611182 4289611182 4289611182 4289611182 4289611182 4289611182 4289545389 4287764626) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsLint ^ (Form extent: 10@10 depth: 32 fromArray: #( 4282534466 4284643426 4284115034 4284246876 4284709219 4284445279 4283916887 4284709219 4284643426 4282534466 4284643170 4290443194 4289121702 4289385898 4290640829 4289980595 4288461468 4290640829 4290443194 4284643170 4284709219 4290640829 4289253544 4289517740 4290838464 4290177974 4288593310 4290838464 4290640829 4284709219 4283916887 4288461468 4287800978 4289451691 4290838464 4290177974 4288593310 4290838464 4290640829 4284709219 4284445279 4289980595 4288856994 4289517484 4290838464 4290177974 4288593310 4290838464 4290640829 4284709219 4284709219 4290640829 4289253544 4289517740 4290838464 4290177974 4288593310 4290838464 4290640829 4284709219 4284643170 4290508475 4289187239 4289385898 4290706110 4290045876 4288527005 4290706110 4290508475 4284643170 4283916631 4288460956 4287800722 4287932820 4288592798 4288328858 4287734673 4288592798 4288460956 4283916631 4284511072 4290046644 4288857506 4289055909 4290244279 4290244279 4290244279 4290244279 4290046644 4284511072 4282534466 4284643426 4284115034 4284246876 4284709219 4284709219 4284709219 4284709219 4284643426 4282534466) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsMessageNames ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278209024 4278218240 4278214656 4278223104 4278220032 4278209792 4278215168 4278216704 4278215936 4278212864 4278220032 4278248704 4278246144 4278253824 4278250752 4278224896 4278241536 4278247936 4278246656 4278223616 4278223872 4278254336 4278255360 4278255360 4278255360 4278230016 4278247936 4278255360 4278254336 4278223872 4278222848 4278249216 4278252544 4278249472 4278249472 4278228224 4278243328 4278252544 4278249216 4278222848 4278219520 4278231040 4278230784 4278225408 4278221568 4278217984 4278227968 4278234880 4278227456 4278215424 4278222080 4278248192 4278240000 4278244608 4278240512 4278240512 4278248192 4278244096 4278244608 4278218240 4278223872 4278254336 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278254336 4278223872 4278223872 4278254336 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278254336 4278223872 4278223616 4278253568 4278254336 4278254336 4278254336 4278254336 4278254336 4278254336 4278253568 4278223616 4278212864 4278223360 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223360 4278212864) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsMonticello ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278190335 4278190335 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4278190335 4278190335 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278190335 4278190335 4289063658 4289260780 4278223103 4278223103 4278223103 4278223103 4278223103 4289063658 4278190335 4278190335 4290968828 4291231743 4291231743 4291231743 4278223103 4291231743 4291231743 4290968828 4278190335 4278190335 4290968828 4291231743 4291231743 4291231743 4278223103 4291231743 4291231743 4290968828 4278190335 4278190335 4290968828 4291231743 4291231743 4291231743 4278223103 4291231743 4291231743 4290968828 4278190335 4278190335 4290706170 4290968828 4290968828 4290968828 4278223103 4290968828 4290968828 4290706170 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsPackageLoader ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294967295 4294967295 4294967295 4294958336 4294967295 4294967295 4294967295 4294967295 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336 4294958336) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsPackagePanel ^ (Form extent: 10@10 depth: 32 fromArray: #( 4289243359 4286874799 4288717013 4287203765 4288651219 4287006386 4288651219 4286809006 4290361846 4290822399 4289374946 4287466935 4289309144 4287927484 4289243351 4287795898 4289243351 4287598517 4290625014 4290822399 4290822399 4293256703 4294506751 4294506751 4294506751 4294506751 4294506751 4294506751 4293256703 4290822399 4290822399 4293519871 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293519871 4290822399 4290822399 4293519871 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293519871 4290822399 4290822399 4293519871 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293519871 4290822399 4290822399 4293519871 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293519871 4290822399 4290822399 4293519871 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293519871 4290822399 4290822399 4292598783 4293519871 4293519871 4293519871 4293519871 4293519871 4293519871 4292598783 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsPda ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4278222848 4294901760 4278222848 4278222848 0 0 0 0 0 4278222848 4278239232 4294901760 4278239232 4278239232 4278222848 0 0 0 4278222848 4278239232 4278239232 4294901760 4278239232 4278239232 4278239232 4278222848 0 0 4278222848 4278239232 4278239232 4294901760 4278239232 4278239232 4278239232 4278239232 4278222848 0 4278222848 4278239232 4278239232 4278239232 4294901760 4278239232 4278239232 4278239232 4278222848 0 0 4278222848 4278239232 4278239232 4278239232 4294901760 4278239232 4278222848 0 0 0 4278222848 4278222848 4278239232 4278239232 4278239232 4278239232 4278222848 0 0 0 0 0 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsRecentSubmissions ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4281245856 4286632915 4286830037 4286830037 4286830037 4286830037 4286830037 4286830037 4286632915 4281245856 4282756782 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4282756782 4280391832 4284399294 4284530623 4284530623 4284530623 4284530623 4284530623 4284530623 4284399294 4280391832 4282034344 4289063658 4289260780 4289260780 4289260780 4289260780 4289260780 4289260780 4289063658 4282034344 4282756782 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4282756782 4282756782 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4282756782 4282756782 4290968828 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290968828 4282756782 4282625710 4290706170 4290968828 4290968828 4290968828 4290968828 4290968828 4290968828 4290706170 4282625710 4279800466 4282690989 4282756782 4282756782 4282756782 4282756782 4282756782 4282756782 4282690989 4279800466) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsSmacc ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278247423 4278693887 4280604159 4279023103 4280472575 4278891263 4280538111 4278628095 4280736255 4278247423 4280736246 4285570789 4287809003 4287017716 4288400885 4286951926 4288533241 4286754294 4288666622 4281197311 4280274895 4283922809 4286092950 4289448393 4289645772 4289778643 4290242021 4289712593 4290509305 4282646527 4280208845 4283725173 4285960850 4289447879 4289645258 4289778129 4290176228 4289712079 4290509305 4282646527 4281987569 4287741373 4288067254 4289054149 4289119942 4289120199 4289252556 4289120199 4289585633 4282646527 4282646527 4288066226 4289121227 4289385684 4289385684 4289385684 4289385684 4289121227 4288066226 4282646527 4282646527 4288198583 4290376434 4290838527 4290838527 4290838527 4290838527 4290376434 4288198583 4282646527 4282646527 4288198583 4290376434 4290838527 4290838527 4290838527 4290838527 4290376434 4288198583 4282646527 4282580991 4287869875 4288925133 4289255126 4289255126 4289255126 4289255126 4288925133 4287869875 4282580991 4279828479 4281590241 4281193170 4281193170 4281193170 4281193170 4281193170 4281193170 4281590241 4279828479) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsTranscript ^ (Form extent: 10@10 depth: 32 fromArray: #( 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292123444 4292458363 4292392572 4292458365 4293050500 4293050500 4292984708 4293905550 4293839499 4292649529 4288902689 4284241483 4286806636 4287266929 4290490009 4290490009 4290226838 4294896848 4294830796 4293045840 4289954605 4284899154 4289766288 4288319358 4288845444 4290095252 4292857782 4289766544 4293975746 4293045840 4290480691 4289700494 4290490010 4292068525 4290292631 4290884510 4291607975 4290687388 4294238661 4293045840 4290480691 4288187771 4291871146 4293844419 4291936939 4292134318 4292068525 4292068525 4294436296 4293045840 4291993926 4292002731 4292068525 4292068525 4292068525 4292068525 4292068525 4293449918 4294830796 4293045840 4293045840 4294830796 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294830796 4293045840 4292980047 4294764744 4294830796 4294830796 4294830796 4294830796 4294830796 4294830796 4294764744 4292980047 4292319268 4292980047 4293045840 4293045840 4293045840 4293045840 4293045840 4293045840 4292980047 4292319268) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/apps' stamp: 'apl 9/20/2007 13:31'! form10x10AppsWorkspace ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190081 4282008378 4288854946 4289052581 4289052581 4289052581 4289052581 4289052581 4289249192 4290362297 4282598211 4278794250 4279871257 4279882521 4279882777 4279873306 4279873306 4279882777 4281392176 4293130979 4284045658 4279057934 4280661541 4279815192 4279618069 4278623494 4279544596 4278631174 4279877657 4294967295 4284045658 4279524629 4284925798 4280609316 4282177852 4285042280 4280214046 4282947144 4284844134 4294967295 4284045658 4279258129 4281125676 4284855397 4286545791 4289111718 4289111718 4286282619 4294967295 4294967295 4284045658 4282927177 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4284045658 4281084973 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4284045658 4283585107 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4283979864 4280229664 4283914072 4284045658 4284045658 4284045658 4284045658 4284045658 4284045658 4283914072 4280229664) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/filesystems' stamp: 'apl 9/20/2007 13:31'! form10x10FilesystemsBlueFolder ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 4278190080 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 4281348144 4281348144 4281348144 4281348144 4289256703 4289256703 4289256703 4281348144 0 0 4281348144 4281348144 4289256703 4289256703 4289256703 4289256703 4289256703 4281348144 0 0 4281348144 4281348144 4289256703 4289256703 4289256703 4289256703 4289256703 4281348144 0 0 4281348144 4281348144 4289256703 4289256703 4289256703 4289256703 4289256703 4281348144 0 0 4281348144 4281348144 4289256703 4289256703 4289256703 4289256703 4281348144 4281348144 0 0 0 4281348144 4289256703 4289256703 4281348144 4281348144 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/filesystems' stamp: 'apl 9/20/2007 13:31'! form10x10FilesystemsGrayFolder ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 4278190080 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 4281348144 4281348144 4281348144 4281348144 4291019715 4291019715 4291019715 4281348144 0 0 4281348144 4281348144 4291019715 4291019715 4291019715 4291019715 4291019715 4281348144 0 0 4281348144 4281348144 4291019715 4291019715 4291019715 4291019715 4291019715 4281348144 0 0 4281348144 4281348144 4291019715 4291019715 4291019715 4291019715 4291019715 4281348144 0 0 4281348144 4281348144 4291019715 4291019715 4291019715 4291019715 4281348144 4281348144 0 0 0 4281348144 4291019715 4291019715 4281348144 4281348144 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/filesystems' stamp: 'apl 9/20/2007 13:31'! form10x10FilesystemsGreenFolder ^ (Form extent: 10@10 depth: 32 fromArray: #( 15132646 15132646 4286611584 4278190080 4278190080 4278190080 4286611584 4286611584 15132646 15132646 15132646 15132646 4286611584 4290838464 4290838464 4290838464 4286611584 4286611584 4278190080 15132646 15132646 15132646 4286611584 4290838464 4290838464 4290838464 4286611584 4286611584 4278190080 15132646 15132646 15132646 4286611584 4290838464 4278255360 4278255360 4290838464 4290838464 4278190080 15132646 15132646 15132646 4286611584 4290838464 4278255360 4278255360 4278255360 4278222848 4278190080 15132646 15132646 15132646 4286611584 4290838464 4278255360 4278255360 4278255360 4278222848 4278190080 15132646 15132646 15132646 4286611584 4290838464 4278255360 4278255360 4278255360 4278222848 4278190080 15132646 15132646 15132646 4286611584 4278222848 4278222848 4278222848 4278222848 4278222848 4278190080 15132646 15132646 15132646 4286611584 4286611584 4286611584 4278190080 4278190080 4278190080 4278190080 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/filesystems' stamp: 'apl 9/20/2007 13:31'! form10x10FilesystemsWhiteFolder ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 4278190080 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 4281348144 4281348144 4281348144 4281348144 4294967295 4294967295 4294967295 4281348144 0 0 4281348144 4281348144 4294967295 4294967295 4294967295 4294967295 4294967295 4281348144 0 0 4281348144 4281348144 4294967295 4294967295 4294967295 4294967295 4294967295 4281348144 0 0 4281348144 4281348144 4294967295 4294967295 4294967295 4294967295 4294967295 4281348144 0 0 4281348144 4281348144 4294967295 4294967295 4294967295 4294967295 4281348144 4281348144 0 0 0 4281348144 4294967295 4294967295 4281348144 4281348144 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/filesystems' stamp: 'apl 9/20/2007 13:31'! form10x10FilesystemsYellowFolder ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 4281348144 15132646 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 4281348144 4281348144 4281348144 4281348144 4294967040 4294967040 4294967040 4281348144 0 0 4281348144 4281348144 4294967040 4294967040 4294967040 4294967040 4294967040 4281348144 0 0 4281348144 4281348144 4294967040 4294967040 4294967040 4294967040 4294967040 4281348144 0 0 4281348144 4281348144 4294967040 4294967040 4294967040 4294967040 4294967040 4281348144 0 0 4281348144 4281348144 4294967040 4294967040 4294967040 4294967040 4281348144 4281348144 0 0 0 4281348144 4294967040 4294967040 4281348144 4281348144 0 0 0 0 0 4281348144 4281348144 4281348144 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesAggregateInstance ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4282335014 4284374585 0 0 4284374585 4282335014 0 0 0 4282335014 4282335014 0 0 0 0 4282335014 4282335014 0 0 4282335014 4284374585 0 0 0 0 4284374585 4282335014 0 4284374585 4282335014 0 0 0 0 0 0 4282335014 4284374585 4284374585 4282335014 0 0 0 0 0 0 4282335014 4284374585 4284374585 4282335014 0 0 0 0 0 0 4282335014 4284374585 4284374585 4282335014 0 0 0 0 0 0 4282335014 4284374585 0 4282335014 4284374585 0 0 0 0 4284374585 4282335014 0 0 4282335014 4282335014 0 0 0 0 4282335014 4282335014 0 0 0 4282335014 4284374585 0 0 4284374585 4282335014 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesAutoTaxon ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4278223103 4278223103 4278223103 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295 4294572295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueC ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueE ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueF ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueFile ^ (Form extent: 10@10 depth: 32 fromArray: #( 15132646 4278223103 4278223103 4278190335 4278190335 4278190335 4278223103 4278223103 15132646 15132646 15132646 4278223103 4278223103 4294967295 4294967295 4294967295 4278223103 4278223103 4278212800 4278223103 15132646 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 15132646 4278223103 4278223103 4294967295 4290838527 4290838527 4290838527 4290838527 4290838527 4278223103 15132646 4278223103 4278223103 4294967295 4294967295 4290838527 4290838527 4290838527 4290838527 4278223103 15132646 4278223103 4278223103 4289256703 4290838527 4290838527 4290838527 4290838527 4290838527 4278223103 0 4278223103 4278223103 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4278223103 0 4278223103 4278223103 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4278223103 0 4278223103 4278223103 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4278223103 15132646 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103 4278223103) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueG ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueP ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueR ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueSphere ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4278239424 4278239424 4278239424 4278239424 4278239424 4278239424 0 0 0 0 4278239424 4278255615 4278255615 4278255615 4278239424 4278239424 4278239424 0 0 4278255615 4278255615 4290838527 4290838527 4290838527 4278255615 4278239424 4278239424 4278222976 4278255615 4278255615 4290838527 4294967295 4294967295 4290838527 4290838527 4278239424 4278239424 4278222976 4278255615 4278255615 4290838527 4294967295 4294967295 4290838527 4290838527 4278239424 4278239424 4278222976 4278255615 4278255615 4290838527 4290838527 4290838527 4290838527 4290838527 4278239424 4278222976 4278190080 4278255615 4278255615 4278255615 4290838527 4290838527 4278239424 4278239424 4278239424 4278222976 4278190080 0 4278239424 4278239424 4278239424 4278239424 4278239424 4278239424 4278222976 4278190080 4278190080 0 4278239424 4278239424 4278239424 4278239424 4278222976 4278222976 4278222976 4278190080 0 0 0 4278239424 4278239424 4278222976 4278222976 4278190080 4278190080 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesBlueT ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4278222976 4278222976 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278222976 4278222976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesCable ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 0 0 0 0 0 4294902015 4294902015 4294902015 4294902015 0 0 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesCarre ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClass ^ (Form extent: 10@10 depth: 32 fromArray: #( 14474460 4292663512 14474460 4294943394 4294901760 4294901760 4294943394 14474460 4292663512 14474460 4292663512 4294943394 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294943394 14474460 14474460 4294901760 4294901760 4294908185 4294919750 4294919750 4294908185 4294901760 4294901760 14474460 4294943394 4294901760 4294908185 4294932086 4294967295 4294967295 4294967295 4294901760 4294901760 4294943394 4294901760 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4294919493 4294901760 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4294919493 4294943394 4294901760 4294908185 4294931829 4294967295 4294967295 4294967295 4294901760 4294901760 4294943394 4292856008 4294901760 4294901760 4294908185 4294919493 4294919493 4294908185 4294901760 4294901760 14474460 4292663512 4294943394 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4293366675 14474460 14474460 4292663512 4292856008 4294943394 4294901760 4294901760 4294943394 4292856008 4292663512 14474460) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClassMethod ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278222976 4278222976 4278222976 0 4278222976 4278222976 4278222976 0 0 0 0 4278222976 4278222976 4278222976 0 4278222976 4278222976 4278222976 0 0 0 0 4278222976 4278222976 4278222976 0 4278222976 4278222976 4278222976 0 0 0 4278222976 4278222976 0 0 4278222976 4278222976 0 0 0 4278222976 4278222976 0 0 4278222976 4278222976 0 0 0 4278222976 4278222976 0 0 4278222976 4278222976 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClassMethodCategory ^ (Form extent: 10@10 depth: 32 fromArray: #( 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4279601545 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4280980114 4278222976 4283277986 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4278239424 4278222976 4283277986 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4278239424 4278222976 4283277986 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4278239424 4278222976 4280061068 4278239424 4278239424 4278239424 4278239424 4278239424 4278239424 4278239424 4278239424 4278222976 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4282358940 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClassWithSelectors ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4278190080 4278190080 4278190080 4294901760 4294901760 4294908185 4294919750 4294919750 4294908185 4294901760 4294901760 4278190080 4278190080 4294901760 4294908185 4294932086 4294967295 4294967295 4294967295 4294901760 4294901760 4278190080 4278190080 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4278190080 4278190080 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4278190080 4278190080 4294901760 4294908185 4294931829 4294967295 4294967295 4294967295 4294901760 4294901760 4278190080 4278190080 4294901760 4294901760 4294908185 4294919493 4294919493 4294908185 4294901760 4294901760 4278190080 4278190080 4278190080 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClassWithSupertype ^ (Form extent: 10@10 depth: 32 fromArray: #( 14474460 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 14474460 0 4278222848 4278239232 4278255360 4278255360 4278255360 4278255360 4278239232 4278222848 14474460 4278222848 4278239232 4278255360 4294901760 4294901760 4294901760 4294901760 4278255360 4278239232 4278222848 4278222848 4278255360 4294901760 4294901760 4294967295 4294967295 4294967295 4294901760 4278255360 4278222848 4278222848 4278255360 4294901760 4294967295 4294901760 4294901760 4294901760 4294901760 4278255360 4278222848 4278222848 4278255360 4294901760 4294967295 4294901760 4294901760 4294901760 4294901760 4278255360 4278222848 4278222848 4278255360 4294908185 4294901760 4294967295 4294967295 4294967295 4294901760 4278255360 4278222848 4278222848 4278239232 4278255360 4294908185 4294901760 4294901760 4294901760 4278255360 4278239232 4278222848 0 4278222848 4278239232 4278255360 4278255360 4278255360 4278255360 4278239232 4278222848 14474460 14474460 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 14474460) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesClassWithSupertypeAndSelectors ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278222848 4278239232 4278255360 4278255360 4278255360 4278255360 4278239232 4278222848 4278190080 4278190080 4278239232 4278255360 4294901760 4294901760 4294901760 4294901760 4278255360 4278239232 4278190080 4278190080 4278255360 4294901760 4294901760 4294967295 4294967295 4294967295 4294901760 4278255360 4278190080 4278190080 4278255360 4294901760 4294967295 4294901760 4294901760 4294901760 4294901760 4278255360 4278190080 4278190080 4278255360 4294901760 4294967295 4294901760 4294901760 4294901760 4294901760 4278255360 4278190080 4278190080 4278255360 4294908185 4294901760 4294967295 4294967295 4294967295 4294901760 4278255360 4278190080 4278190080 4278239232 4278255360 4294908185 4294901760 4294901760 4294901760 4278255360 4278239232 4278190080 4278190080 4278222848 4278239232 4278255360 4278255360 4278255360 4278255360 4278239232 4278222848 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesComponent ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4294902015 4294902015 4294902015 4278190080 0 0 0 0 0 4278190080 4294902015 4294902015 4294902015 4278190080 0 0 0 0 0 4278190080 4294902015 4294902015 4294902015 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesCoulisse ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 0 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4294902015 4283979864 0 0 0 0 4294902015 4294902015 4294902015 4294902015 0 0 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesDerivedAttribute ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 4284000511 4278212800 0 0 0 0 0 0 0 0 4284000511 4278212800 0 0 0 0 0 0 0 0 4284000511 4278212800 0 0 0 0 0 4278212800 4278212800 4278212800 4284000511 4278212800 0 0 0 0 4278212800 4284000511 4284000511 4284000511 4278212800 4278212800 0 0 0 4284000511 4278212800 0 0 0 4278212800 4278212800 0 0 0 4284000511 4278212800 0 0 0 4278212800 4278212800 0 0 0 4284000511 4278212800 0 0 0 4278212800 4278212800 0 0 0 0 4278212800 0 0 0 4278212800 4278212800 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesDiamond ^ (Form extent: 10@10 depth: 32 fromArray: #( 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4294902015 0 4294902015 0 4294902015 0 4294902015 0 4294902015 0 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4294902015 0 4294902015 0 4294902015 0 4294902015 0 4294902015 0 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015 4288716960 4294902015) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesEntityInstance ^ (Form extent: 7@10 depth: 32 fromArray: #( 0 0 4280887601 0 0 4278190088 0 0 0 4278190088 0 0 4278190088 0 4281413945 4280887593 4278190088 4280361257 4279769112 4278190088 4282532418 4281413945 4279242768 4279769112 4281940281 4278190088 4279769121 4281940290 0 4280887601 0 0 4278190088 0 0 0 4278716424 0 0 4278190088 0 0 4278190088 4278190088 4278190088 4278190088 4278190088 4278190088 0 4280887601 4281413937 0 4281413937 0 0 0 4280361249 0 0 4278716424 0 0 0 4281413945 0 0 4281940281 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesExplicitAttribute ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4293166890 4293166890 4293166890 4293166890 0 0 0 0 0 4293166890 4293166890 0 0 4293166890 4293166890 0 0 0 4294940463 4293166890 0 0 0 0 4293166890 4294940463 0 0 4294940463 4293166890 0 0 0 0 4293166890 4294940463 0 0 4294940463 4293166890 4293166890 4293166890 4293166890 4293166890 4293166890 4294940463 0 0 4294940463 4293166890 0 0 0 0 0 0 0 0 4294940463 4293166890 0 0 0 0 0 0 0 0 0 4293166890 4293166890 0 0 4293166890 4293166890 4294940463 0 0 0 0 4293166890 4293166890 4293166890 4293166890 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesFile ^ (Form extent: 10@10 depth: 32 fromArray: #( 15132646 15132646 4286611584 4278190080 4278190080 4278190080 4286611584 4286611584 15132646 15132646 15132646 15132646 4286611584 4294967295 4294967295 4294967295 4286611584 4286611584 4278190080 15132646 15132646 15132646 4286611584 4294967295 4294967295 4294967295 4286611584 4286611584 4278190080 15132646 15132646 15132646 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4278190080 15132646 15132646 15132646 4286611584 4294967295 4294967295 4294967295 4294967232 4294951167 4278190080 15132646 15132646 15132646 4286611584 4294967295 4294967295 4294967232 4294967232 4294951167 4278190080 15132646 15132646 15132646 4286611584 4294967295 4294967232 4294967232 4294967232 4294951167 4278190080 15132646 15132646 15132646 4286611584 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 15132646 15132646 15132646 4286611584 4286611584 4286611584 4278190080 4278190080 4278190080 4278190080 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesFishingNet ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4290773184 4290773184 4290773184 4290773184 0 0 0 0 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 0 0 0 4290773184 4288447972 4288447972 4291147758 4291147758 4288447972 4290773184 4290773184 0 0 4290773184 4288447972 4291147758 4291147758 4291147758 4291147758 4288447972 4290773184 4290773184 0 4290773184 4288447972 4291147758 4293189108 4293189108 4291147758 4291147758 4288447972 4290773184 4290773184 4290773184 4288447972 4291147758 4293189108 4293189108 4291147758 4288447972 4288447972 4288447972 4288447972 4290773184 4288447972 4288447972 4291147758 4291147758 4288447972 4288447972 4288447972 4290773184 4290773184 4290773184 4290773184 4288447972 4288447972 4288447972 4288447972 4290773184 4290773184 4290773184 0 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 0 0 0 0 4290773184 4290773184 4290773184 4290773184 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesGraySphere ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 4286611584 4288716960 4288716960 4288716960 4286611584 4286611584 4286611584 0 0 4288716960 4288716960 4291019715 4291019715 4291019715 4288716960 4286611584 4286611584 4283979864 4288716960 4288716960 4291019715 4294967295 4294967295 4291019715 4291019715 4286611584 4286611584 4283979864 4288716960 4288716960 4291019715 4294967295 4294967295 4291019715 4291019715 4286611584 4286611584 4283979864 4288716960 4288716960 4291019715 4291019715 4291019715 4291019715 4291019715 4286611584 4283979864 4281348144 4288716960 4288716960 4288716960 4291019715 4291019715 4286611584 4286611584 4286611584 4283979864 4281348144 0 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4283979864 4281348144 4281348144 0 4286611584 4286611584 4286611584 4286611584 4283979864 4283979864 4283979864 4281348144 0 0 0 4286611584 4286611584 4283979864 4283979864 4281348144 4281348144 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesGreenSphere ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 4278222848 4278239232 4278239232 4278239232 4278222848 4278222848 4278222848 0 0 4278239232 4278239232 4278255360 4278255360 4278255360 4278239232 4278239232 4278222848 4278206464 4278239232 4278239232 4278255360 4294967295 4294967295 4278255360 4278255360 4278222848 4278222848 4278206464 4278239232 4278239232 4278255360 4294967295 4294967295 4278255360 4278255360 4278222848 4278222848 4278206464 4278239232 4278239232 4278255360 4278255360 4278255360 4278255360 4278255360 4278222848 4278206464 4278206464 4278239232 4278239232 4278239232 4278255360 4278255360 4278222848 4278222848 4278222848 4278206464 4278190080 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278206464 4278206464 4278190080 0 4278222848 4278222848 4278222848 4278222848 4278206464 4278206464 4278206464 4278190080 0 0 4278222848 4278222848 4278222848 4278206464 4278206464 4278190080 4278190080 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesGroup ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4288716960 4288716960 0 4288716960 4288716960 0 4288716960 4288716960 0 0 4283979864 4283979864 4291019715 4283979864 4283979864 4291019715 4283979864 4283979864 0 0 4288716960 4288716960 0 4288716960 4288716960 0 4288716960 4288716960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesHexa ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294902015 0 4294902015 0 0 0 4294902015 0 4294902015 0 0 0 0 4294902015 4294902015 4294902015 0 0 0 4294902015 4294902015 0 4294902015 4288716960 4288716960 4288716960 4294902015 0 4294902015 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960 4294902015 0 4294902015 4288716960 4288716960 4288716960 4294902015 0 4294902015 4288716960 0 0 0 4294902015 4294902015 4294902015 0 0 0 4294902015 4294902015 0 4294902015 4288716960 4288716960 4288716960 4294902015 0 4294902015 4288716960 4288716960 4294902015 4288716960 4288716960 4288716960 4288716960 4288716960 4294902015 4288716960 4288716960) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesImplementor ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 4283979864 0 0 0 0 0 4294951104 4294951104 4294951104 4283979864 4283979864 4294951104 4294951104 0 0 0 0 4294951104 4294951104 4294951104 0 4294951104 4294951104 4294951104 0 0 0 0 4294951104 4283979864 4283979864 0 4294951104 4294951104 4294951104 0 0 0 4294951104 4283979864 4283979864 0 4294951104 4294951104 0 0 0 4294951104 4294951104 4283979864 4283979864 4294951104 4294951104 0 0 0 4294951104 4294951104 0 4283979864 4283979864 4294951104 0 0 0 0 0 0 0 4283979864 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesInstanceMethod ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 4294901760 4294901760 4294901760 0 0 0 0 4294901760 4294901760 4294901760 0 4294901760 4294901760 4294901760 0 0 0 0 4294901760 4294901760 4294901760 0 4294901760 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesInverseAttribute ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 4278222848 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278222848 4278239232 0 0 0 0 0 0 4278239232 4278239232 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278239232 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesLinksTaxon ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278223103 4278223103 4278223103 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesMetaSchema ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4278222976 4278222976 4278222976 4294963989 4278222976 4278222976 4294963989 4278222976 4294963989 4278222976 4278222976 4294963989 4294963989 4294963989 4278222976 4294963989 4294963989 4278222976 4294963989 4278222976 4278222976 4278222976 4278222976 4294963989 4278222976 4294963989 4294963989 4278222976 4278222976 4278222976 4294963989 4294963989 4278222976 4294963989 4278222976 4294963989 4294963989 4278222976 4278222976 4278222976 4278222976 4294963989 4278222976 4294963989 4278222976 4294963989 4294963989 4278222976 4294963989 4278222976 4278222976 4278222976 4278222976 4294963989 4278222976 4278222976 4294963989 4278222976 4294963989 4278222976 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989 4294963989) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesMetaSchemaInstancier ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4281348144 4281348144 4281348144 4294967295 4281348144 4281348144 4294967295 4281348144 4294967295 4281348144 4281348144 4294967295 4294967295 4294967295 4281348144 4294967295 4294967295 4281348144 4294967295 4281348144 4281348144 4281348144 4281348144 4294967295 4281348144 4294967295 4294967295 4281348144 4281348144 4281348144 4294967295 4294967295 4281348144 4294967295 4281348144 4294967295 4294967295 4281348144 4281348144 4281348144 4281348144 4294967295 4281348144 4294967295 4281348144 4294967295 4294967295 4281348144 4294967295 4281348144 4281348144 4281348144 4281348144 4294967295 4281348144 4281348144 4294967295 4281348144 4294967295 4281348144 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesMethodCategory ^ (Form extent: 10@10 depth: 32 fromArray: #( 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4294951104 4294901760 4294901760 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4294951104 4294901760 4294901760 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4294951104 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 4290565331 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesNet ^ (Form extent: 10@10 depth: 32 fromArray: #( 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4290838527 4286611584 4281348144 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4281348144 4286611584 4281348144 4286611584 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4290838527 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4286611584 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4290838527 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4286611584 4286611584 4281348144 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144 4290838527 4290838527 4281348144 4281348144) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesObject ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 0 0 0 0 0 0 4283979864 4286611584 4286611584 4286611584 4283979864 0 0 0 0 4283979864 4286611584 4290822144 4290822144 4290822144 4286611584 4283979864 0 0 0 4283979864 4286611584 4290822144 4290822144 4290822144 4286611584 4283979864 0 0 0 4283979864 4286611584 4290822144 4294967232 4294967295 4286611584 4283979864 0 0 0 0 4283979864 4291019715 4291019715 4291019715 4283979864 0 0 0 0 0 0 4283979864 4283979864 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesOdbcDatasource ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 4283979864 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4288716960 4283979864 4286611584 4288716960 4294902015 4294902015 4294902015 4294902015 4294902015 4294967295 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4292664540 4294967295 4294967295 4294967295 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4291019715 4292664540 4294967295 4294967295 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4291019715 4291019715 4292664540 4294967295 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4291019715 4291019715 4292664540 4294967295 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4291019715 4291019715 4291019715 4292664540 4288716960 4283979864 4286611584 4288716960 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4288716960 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPackageBlue ^ (Form extent: 10@10 depth: 32 fromArray: #( 16777215 16777215 341399897 2202422862 4063247934 4280759348 4279705119 4280693555 4280956984 4279112467 16777215 269027594 2015963433 3932450671 4285369484 4284251003 4281813321 4285305747 4286101688 4280565054 341993320 2019846506 3814221671 4284051825 4282471765 4282405972 4283460203 4284187524 4282488471 4278924341 2202489941 3936465073 4291551200 4289382857 4285497987 4288853430 4289716448 4283470225 4279129173 4278264612 4063841614 4287813334 4287292130 4284720806 4282807670 4286700250 4285191123 4279924342 4278273606 4278198562 4281486156 4283813325 4278961091 4278225290 4278215266 4278239424 4278235569 4278214496 4278207299 4278198562 4281486156 4283813325 4278961091 4278225290 4278215266 4278239424 4278235569 4278214495 4278271807 4279118893 4281486156 4283812297 4278959292 4278224004 4278214238 4278237368 4278233770 4278278747 4094569774 2804628798 4280958783 4282948764 4278813571 4278213210 4278206785 4278222462 4278221177 4111357527 2620143930 557595709 4278980882 4279511338 4278329377 4278195735 4278193936 4278198048 4278198048 2785946411 558323801 42304902) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPackageGreen ^ (Form extent: 10@10 depth: 32 fromArray: #( 16777215 16777215 341399897 2202422862 4063247934 4280759348 4279705119 4280693555 4280956984 4279112467 16777215 269027594 2015963433 3932450671 4290838464 4290838464 4281813321 4290838464 4290838464 4280565054 341993320 2019846506 3814221671 4278222848 4288716960 4282405972 4288716960 4284187524 4288716960 4278924341 2202489941 3936465073 4291551200 4289382857 4285497987 4288853430 4289716448 4283470225 4279129173 4278264612 4063841614 4290838464 4290838464 4284720806 4282807670 4290838464 4290838464 4278239232 4278273606 4278198562 4281486156 4290838464 4278255360 4278239232 4278215266 4290838464 4278255360 4278239232 4278207299 4278198562 4281486156 4290838464 4278255360 4278239232 4278215266 4290838464 4278255360 4278239232 4278271807 4279118893 4281486156 4290838464 4278255360 4278239232 4278214238 4290838464 4278255360 4278239232 4094569774 2804628798 4280958783 4290838464 4278255360 4278239232 4278206785 4290838464 4278255360 4278239232 2620143930 557595709 4278980882 4279511338 4278329377 4278195735 4278193936 4278198048 4278198048 2785946411 558323801 42304902) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPackageMapping ^ (Form extent: 10@10 depth: 32 fromArray: #( 16777215 16777215 341399897 2202422862 4063247934 4280759348 4279705119 4280693555 4280956984 4279112467 16777215 269027594 2015963433 3932450671 4294967040 4294967040 4286611584 4278223103 4278223103 4286611584 341993320 2019846506 3814221671 4286611584 4286611584 4286611584 4286611584 4286611584 4288716960 4283979864 2202489941 3936465073 4294967232 4294967040 4285497987 4278223103 4278223103 4278223103 4286611584 4283979864 4063841614 4294967040 4294967040 4294967040 4286611584 4278223103 4278223103 4278223103 4286611584 4283979864 4281486156 4294967040 4294967040 4294967040 4286611584 4278223103 4278223103 4278223103 4286611584 4283979864 4281486156 4294967040 4294967040 4294967040 4286611584 4278223103 4278223103 4278223103 4286611584 4281348144 4281486156 4294967040 4294967040 4294967040 4286611584 4278223103 4278223103 4278223103 4286611584 2804628798 4280958783 4294967040 4294967040 4294967040 4286611584 4278223103 4278223103 4278223103 2620143930 557595709 4278980882 4279511338 4281348144 4281348144 4278193936 4281348144 4281348144 2785946411 558323801 42304902) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPackageWhite ^ (Form extent: 10@10 depth: 32 fromArray: #( 16777215 16777215 341399897 2202422862 4063247934 4280759348 4279705119 4280693555 4280956984 4279112467 16777215 269027594 2015963433 3932450671 4290838464 4290838464 4286611584 4290838464 4290838464 4286611584 341993320 2019846506 3814221671 4286611584 4286611584 4286611584 4286611584 4286611584 4288716960 4283979864 2202489941 3936465073 4291551200 4291019715 4285497987 4288853430 4289716448 4292664540 4286611584 4283979864 4063841614 4290838464 4290838464 4292664540 4286611584 4290838464 4290838464 4294967295 4286611584 4283979864 4281486156 4290838464 4294967295 4294967295 4286611584 4290838464 4294967295 4294967295 4286611584 4283979864 4281486156 4290838464 4294967295 4294967295 4286611584 4290838464 4294967295 4294967295 4286611584 4281348144 4281486156 4290838464 4294967295 4294967295 4286611584 4290838464 4294967295 4294967295 4286611584 2804628798 4280958783 4290838464 4294967295 4294967295 4286611584 4290838464 4294967295 4294967295 2620143930 557595709 4278980882 4279511338 4281348144 4281348144 4278193936 4281348144 4281348144 2785946411 558323801 42304902) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPackageYellow ^ (Form extent: 10@10 depth: 32 fromArray: #( 16777215 16777215 341399897 2202422862 4063247934 4280759348 4279705119 4280693555 4280956984 4279112467 16777215 269027594 2015963433 3932450671 4294967040 4294967040 4286611456 4290822144 4290822144 4280565054 341993320 2019846506 4294967040 4294967040 4286611456 4286611456 4290822144 4290822144 4290822144 4278924341 2202489941 4290822144 4286611456 4286611456 4286611456 4288853430 4289716448 4290822144 4290822144 4278264612 4063841614 4294967040 4294967040 4294967040 4286611456 4294967040 4294967040 4290822144 4290822144 4278198562 4281486156 4294967040 4294967040 4294967040 4286611456 4294967040 4294967040 4290822144 4290822144 4278198562 4281486156 4294967040 4294967040 4294967040 4286611456 4294967040 4294967040 4290822144 4278271807 4279118893 4281486156 4294967040 4294967040 4294967040 4286611456 4294967040 4294967040 4290822144 4094569774 2804628798 4280958783 4294967040 4294967040 4294967040 4286611456 4294967040 4294967040 4290822144 2620143930 557595709 4278980882 4279511338 4278329377 4278195735 4278193936 4278198048 4278198048 2785946411 558323801 42304902) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPhobos ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4290773184 4290773184 4283979864 4281348144 4278190080 4278190080 4278190080 4278190080 4283979864 4290773184 4290773184 4290773184 4290773184 4286611584 4283979864 4283979864 4278190080 4278190080 4288447972 4288447972 4291147758 4291147758 4288447972 4290773184 4286611584 4283979864 4278190080 4290773184 4288447972 4291147758 4291147758 4291147758 4291147758 4288447972 4290773184 4286611584 4278190080 4290773184 4288447972 4291147758 4293189108 4293189108 4291147758 4291147758 4288447972 4290773184 4290773184 4290773184 4288447972 4291147758 4293189108 4293189108 4291147758 4288447972 4288447972 4288447972 4288447972 4278190080 4288447972 4288447972 4291147758 4291147758 4288447972 4288447972 4288447972 4290773184 4283979864 4278190080 4290773184 4288447972 4288447972 4288447972 4288447972 4290773184 4290773184 4283979864 4278190080 4278190080 4283979864 4290773184 4290773184 4290773184 4290773184 4290773184 4283979864 4283979864 4278190080 4278190080 4278190080 4281348144 4281348144 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesPinkSphere ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 0 0 0 0 4290773184 4294902015 4294902015 4294902015 4290773184 4290773184 4290773184 0 0 4294902015 4294902015 4294951167 4294951167 4294951167 4294902015 4290773184 4290773184 4286578816 4294902015 4294902015 4294951167 4294967295 4294967295 4294951167 4294951167 4290773184 4290773184 4286578816 4294902015 4294902015 4294951167 4294967295 4294967295 4294951167 4294951167 4290773184 4290773184 4286578816 4294902015 4294902015 4294951167 4294951167 4294951167 4294951167 4294951167 4290773184 4286578816 4278190080 4294902015 4294902015 4294902015 4294951167 4294951167 4290773184 4290773184 4290773184 4286578816 4278190080 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 4286578816 4278190080 4278190080 0 4290773184 4290773184 4290773184 4290773184 4286578816 4286578816 4286578816 4278190080 0 0 0 4290773184 4290773184 4286578816 4286578816 4278190080 4278190080 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesPrm ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4288716960 4288716960 4288716960 4288716960 0 0 0 0 0 0 4288716960 4288716960 4288716960 4288716960 0 0 0 0 0 0 4288716960 4288716960 4288716960 4288716960 0 0 0 0 0 0 4288716960 4288716960 4288716960 4288716960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesProperties ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4294967040 4294967040 4294967040 4278190080 0 0 0 0 0 4278190080 4294967040 4294967040 4294967040 4278190080 0 0 0 0 0 4278190080 4294967040 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesQuestion ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190208 4278190208 4278190208 0 0 0 0 0 0 4278190208 0 0 2952790126 4278190080 0 0 0 0 0 4278190208 0 0 1577124217 4278190080 0 0 0 0 0 0 0 1493303914 4278190208 0 0 0 0 0 0 0 0 4278190208 0 0 0 0 0 0 0 0 0 4278190208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3607101518 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesRdbsColumn ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4292664540 4292664540 4283979864 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesRdbsTable ^ (Form extent: 10@10 depth: 32 fromArray: #( 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4283979864 4292664540 4292664540 4283979864 4294967295 4294967295 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesRedQuestion ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 4294901760 0 0 4294901760 4290772992 0 0 0 0 0 4294901760 0 0 4294901760 4290772992 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 4294901760 4290772992 0 0 0 0 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4290772992 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesRootTaxon ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278223103 4278223103 4278223103 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesSchema ^ (Form extent: 10@10 depth: 32 fromArray: #( 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4278222976 4278222976 4278222976 4290838527 4278222976 4278222976 4290838527 4278222976 4290838527 4278222976 4278222976 4290838527 4290838527 4290838527 4278222976 4290838527 4290838527 4278222976 4290838527 4278222976 4278222976 4278222976 4278222976 4290838527 4278222976 4290838527 4290838527 4278222976 4278222976 4278222976 4290838527 4290838527 4278222976 4290838527 4278222976 4290838527 4290838527 4278222976 4278222976 4278222976 4278222976 4290838527 4278222976 4290838527 4278222976 4290838527 4290838527 4278222976 4290838527 4278222976 4278222976 4278222976 4278222976 4290838527 4278222976 4278222976 4290838527 4278222976 4290838527 4278222976 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesSender ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 4283979864 4283979864 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4294951104 4283979864 4283979864 0 4294951104 4283979864 4283979864 0 0 0 0 4283979864 4283979864 4294951104 0 4294951104 4294951104 4294951104 0 0 0 4283979864 4283979864 4294951104 4294951104 0 4294951104 4294951104 4294951104 0 0 0 4283979864 4283979864 4283979864 4283979864 4294951104 4294951104 0 0 0 4294951104 4294951104 0 0 4283979864 4283979864 0 0 0 4283979864 4294951104 0 0 4294951104 4283979864 4283979864 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 4283979864 4283979864 4283979864 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesStepComputedValue ^ (Form extent: 10@10 depth: 32 fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294625541 4294625541 4294625541 4294625541 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294625541 4294625541 4294625541 4294625541 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294625541 4294625541 4294625541 4294625541 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294625541 4294625541 4294625541 4294625541 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesStepValue ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4291371119 4291371119 4291371119 4291371119 0 0 0 0 0 0 4291371119 4291371119 4291371119 4291371119 0 0 0 0 0 0 4291371119 4291371119 4291371119 4291371119 0 0 0 0 0 0 4291371119 4291371119 4291371119 4291371119 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesSuperClass ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 4290838527 4278239232 4278239232 4290838527 0 0 0 0 4290838527 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838527 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 4290838527 4278239232 4278239232 4278239232 4294967295 4294967295 4294967295 4278239232 4278239232 4290838527 4278239232 4278239232 4278239232 4294967295 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4294967295 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838527 4278239232 4278239232 4278239232 4294967295 4294967295 4294967295 4278239232 4278239232 4290838527 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 4290838527 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838527 0 0 0 0 4290838527 4278239232 4278239232 4290838527 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesSuperClassWithSelectors ^ (Form extent: 10@10 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278190080 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278239232 4278239232 4278239232 4294967295 4294967295 4294967295 4278239232 4278239232 4278190080 4278190080 4278239232 4278239232 4294967295 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278239232 4278239232 4294967295 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278239232 4278239232 4278239232 4294967295 4294967295 4294967295 4278239232 4278239232 4278190080 4278190080 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278190080 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesSystemCategory ^ (Form extent: 10@10 depth: 32 fromArray: #( 4285222992 4287446590 4287577405 4287577405 4287577405 4287577405 4287447618 4286476920 4286152583 4284770153 4287184960 4293332237 4293724682 4293724682 4293724682 4293724682 4293400345 4290682800 4290037719 4286283907 4285357914 4287653720 4287323985 4286993997 4287785048 4287916380 4287522649 4286150517 4285763192 4284246877 4285957233 4289058456 4287543943 4286421366 4289256601 4290242738 4288728209 4286090098 4284594780 4282415424 4284573536 4285563500 4285102442 4284837731 4285695084 4286090103 4285497194 4284770914 4284185178 4283458896 4286547079 4291418593 4291813351 4291747559 4291747559 4291747559 4291747559 4290631657 4285449130 4283793493 4286547079 4291418593 4291813607 4291879399 4291945191 4291879143 4291747559 4291484903 4290893535 4286612612 4286612615 4291484130 4291682023 4291747559 4291813351 4292076775 4291747559 4291288040 4290039781 4286218632 4286481285 4289186275 4288924649 4291155937 4291418593 4291615969 4291615203 4290564838 4288004068 4285758854 4284704616 4284643721 4284578189 4286350215 4286547079 4286547079 4286678153 4286612616 4286546564 4284966759) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesTaxon ^ (Form extent: 10@10 depth: 32 fromArray: #( 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4278223103 4278223103 4278223103 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 3/20/2007 11:51'! form10x10MimetypesTriangle ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4294902015 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 4294902015 0 4294902015 0 0 0 0 0 0 4294902015 0 0 4294902015 0 0 0 0 0 4294902015 0 0 0 4294902015 0 0 0 0 4294902015 0 0 0 0 4294902015 0 0 0 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesUnresolvedEntityInstance ^ (Form extent: 7@10 depth: 32 fromArray: #( 0 0 4294901760 0 0 4294901760 0 0 0 4294901760 0 0 4294901760 0 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 0 4294901760 0 0 4294901760 0 0 0 4294901760 0 0 4294901760 0 0 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 0 4294901760 4294901760 0 4294901760 0 0 0 4294901760 0 0 4294901760 0 0 0 4294901760 0 0 4294901760 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesWhereRule ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 0 0 0 0 4290773184 4290773184 4290773184 4290773184 4290773184 4290773184 0 0 0 0 4290773184 4290773184 0 0 0 4290773184 0 0 0 0 4290773184 4294902015 0 0 0 0 0 0 0 0 4290773184 4294902015 0 0 0 0 0 0 0 0 4290773184 4294902015 0 0 0 0 0 0 0 0 4290773184 4294902015 0 0 0 0 0 0 0 0 4290773184 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /10x10/mimetypes' stamp: 'apl 9/20/2007 13:31'! form10x10MimetypesYellowSphere ^ (Form extent: 10@10 depth: 32 fromArray: #( 0 0 4294950439 4294950439 4294950439 4294950439 4294950439 4294950439 0 0 0 0 4294950439 4294962958 4294962958 4294962958 4294950439 4294950439 4294950439 0 0 4294962958 4294962958 4294967232 4294967232 4294967232 4294962958 4294950439 4294950439 4294940463 4294962958 4294962958 4294967232 4294967295 4294967295 4294967232 4294967232 4294950439 4294950439 4294940463 4294962958 4294962958 4294967232 4294967295 4294967295 4294967232 4294967232 4294950439 4294950439 4294940463 4294962958 4294962958 4294967232 4294967232 4294967232 4294967232 4294967232 4294950439 4294940463 4294940463 4294962958 4294962958 4294962958 4294967232 4294967232 4294950439 4294950439 4294950439 4294940463 4293166890 0 4294950439 4294950439 4294950439 4294950439 4294950439 4294950439 4294940463 4293166890 4293166890 0 4294950439 4294950439 4294950439 4294950439 4294940463 4294940463 4293166890 4293166890 0 0 0 4294950439 4294950439 4294940463 4294940463 4293166890 4293166890 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsAxes ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4283979864 4278190080 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 4278190080 0 4283979864 0 4278190080 0 0 0 0 0 0 4281348144 4278190080 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 4281348144 0 4278190080 0 0 0 0 0 4283979864 0 0 0 0 0 0 4281348144 0 0 4278190080 0 0 0 0 0 4283979864 0 0 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 4281348144 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 4283979864 4286611584 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsBlueOk ^ (Form extent: 16@14 depth: 32 fromArray: #( 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 4278223103 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 1090519039 0 0 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 4278190080 0 4278223103 4278223103 4278239424 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 4278190080 1090519039 0 4278223103 4278223103 4278223103 4278239424 1090519039 1090519039 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 0 4278222976 4278223103 4278223103 4278223103 4278239424 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278239424 4290838527 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278190080 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsBlueOkAll ^ (Form extent: 16@14 depth: 32 fromArray: #( 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4290838527 1090519039 4278190080 4278190080 4278190080 4278190080 4278190080 1090519039 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 1090519039 4290838527 4278223103 1090519039 4278190080 1090519039 1090519039 1090519039 4278190080 1090519039 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 4290838527 4278223103 4278223103 1090519039 4278190080 1090519039 1090519039 1090519039 4278190080 1090519039 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 4278223103 4278223103 4278222976 1090519039 4278190080 4278190080 4278190080 4278190080 4278190080 1090519039 4278190080 1090519039 1090519039 1090519039 4290838527 4278190080 4278223103 4278222976 4278239424 0 4278190080 4278223103 4278239424 1090519039 4278190080 1090519039 4278190080 1090519039 1090519039 4290838527 4278223103 4278190080 4278222976 4278239424 1090519039 0 4278190080 4278223103 4278223103 4278239424 4278190080 1090519039 4278190080 4278190080 4278190080 4278190080 4278223103 4278190080 4278190080 4278190080 4278190080 0 4278222976 4278223103 4278223103 4278223103 4278239424 1090519039 1090519039 4290838527 4278223103 4278223103 4278222976 4278239424 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278239424 4290838527 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278223103 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278222976 4278223103 4278222976 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278190080 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsBookmark ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 4278239232 0 4278255360 0 0 0 4288716960 4288716960 4288716960 0 0 0 0 0 0 0 4278239232 4278239232 4278255360 4292664540 4288716960 4288716960 4288716960 4291019715 4291019715 4288716960 4288716960 0 0 0 0 0 4278239232 4278255360 4278255360 4292664540 4291019715 4288716960 4288716960 4291019715 4291019715 4291019715 4291019715 4288716960 4288716960 0 0 4292664540 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4292664540 4292664540 4291019715 4291019715 4291019715 4283979864 4283979864 4292664540 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4294967295 4292664540 4292664540 4292664540 4291019715 4288716960 4288716960 4294967295 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4294967295 4294967295 4294967295 4294967295 4292664540 4283979864 4283979864 4294967295 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4294967295 4294967295 4294967295 4294967295 4292664540 4288716960 4288716960 4294967295 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4294967295 4294967295 4294967295 4294967295 4294967295 4283979864 4283979864 4294967295 4278239232 4278255360 4278255360 4294967295 4291019715 4288716960 4288716960 4291019715 4294967295 4294967295 4294967295 4294967295 4294967295 4288716960 4288716960 4294967295 4278239232 4278239232 4278255360 4294967295 4292664540 4288716960 4288716960 4291019715 4292664540 4294967295 4294967295 4294967295 4294967295 4283979864 4283979864 4294967295 4294967295 4278239232 4294967295 4294967295 4292664540 4288716960 4283979864 4283979864 4292664540 4292664540 4294967295 4294967295 4294967295 4288716960 4288716960 4294967295 4294967295 4294967295 4294967295 4292664540 4283979864 4283979864 0 4283979864 4283979864 4283979864 4292664540 4292664540 4292664540 4283979864 4283979864 4294967295 4294967295 4294967295 4283979864 4283979864 4283979864 0 0 0 0 4283979864 4283979864 4283979864 4292664540 4288716960 4288716960 4292664540 4283979864 4283979864 4283979864 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsCollapse ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4281675567 4285727752 4285989896 4285989896 4284613896 4281796104 4281019179 0 0 0 0 0 0 0 0 0 4283901994 4293853192 4293853192 4293853192 4292083976 4281407513 0 0 0 0 0 0 0 0 0 0 4284098602 4293853192 4293853192 4292870152 4282060561 0 0 0 0 0 0 0 0 0 0 0 4284098602 4293853192 4291887368 4281206280 4279308561 4290032820 0 0 0 0 0 0 0 0 0 0 4284098602 4292411656 4282523681 4284177243 4278716424 4279440147 4290559164 0 0 0 0 0 0 0 0 0 4281608490 4282060561 0 15132646 4285032552 4278716424 4279308561 4290888129 0 0 0 0 0 0 0 0 4283519313 0 15132646 15132646 15132646 4285164911 4278716424 4279374354 4290295992 0 0 0 0 0 0 0 0 0 0 0 0 0 4284900966 4278716424 4278979596 4287730065 0 0 0 0 0 0 0 0 0 0 0 0 0 4283256398 4278716424 4285558896 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsCollapseAll ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 4282206548 4289136390 4289661959 4289530374 4285269000 4283062888 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4293197832 4293853192 4286776328 4285103504 0 0 0 0 0 0 0 0 0 4278190080 4293328904 4285731332 4293591048 4285662216 4278716424 4281679945 0 0 0 0 0 0 0 0 0 4278190080 4293853192 4286520068 4283172104 4283589747 0 4278716424 4281350722 0 0 0 0 0 0 0 4278190080 4281276934 4285340419 4283174914 4278650631 4282338648 0 0 4282400768 4280824119 0 0 0 0 0 0 4278190080 4293853192 4293853192 4292083976 4279702807 4278716424 4281219135 0 0 4282400768 4280560433 0 0 0 0 0 4278190080 4293853192 4292542728 4281472023 0 0 4278716424 4281284672 0 0 4282400768 4278190080 0 0 0 0 4278190080 4293197832 4283636512 4278716424 4280955448 0 0 4278716424 4279967779 0 0 0 0 0 0 0 4278190080 4282659643 0 0 4278716424 4280757812 0 0 4278716424 4278190080 0 0 0 0 0 0 4278190080 0 0 0 0 4278716424 4280692019 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278914060 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsCrossingOff ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 4283979864 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 4294901760 4294901760 0 0 0 0 0 4283979864 4283979864 4283979864 4294901760 4294901760 4283979864 4283979864 4283979864 4283979864 4283979864 4294901760 4294901760 4283979864 4283979864 4283979864 4283979864 0 0 4294901760 4294901760 0 4283979864 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 4294901760 0 0 4283979864 0 0 0 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsCrossingOn ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsDisplay2d ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 4278190080 4294967040 4278190080 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190080 4294967040 4278190080 0 0 4278190080 4278190080 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278190080 4278190080 0 0 0 4278190335 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278239232 4294967295 4278190335 0 0 0 0 4278190335 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278239232 4294967295 4294967295 4294967295 4278190335 0 0 0 4278190080 4278190080 4278190080 4294967295 4294967295 4278239232 4278239232 4294967295 4294967295 4294967295 4294967295 4294967295 4278190335 0 0 0 4278190080 4294967040 4278190080 4278239232 4278239232 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278190335 0 0 0 4278190080 4278190080 4278190080 4278239232 4278239232 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278190335 0 0 0 0 4278190335 4294967295 4294967295 4294967295 4278239232 4278239232 4294967295 4294967295 4294967295 4294967295 4294967295 4278190335 0 0 0 0 4278190335 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278239232 4294967295 4294967295 4294967295 4278190335 0 0 0 0 4278190335 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278239232 4294967295 4278190335 0 0 0 4278190080 4278190080 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278239232 4278190080 4278190080 0 0 4278190080 4294967040 4278190080 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190335 4278190080 4294967040 4278190080 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsDown ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279374354 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279637526 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279505940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279637526 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279571733 0 0 0 0 0 0 0 0 0 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 0 0 0 0 4294440704 4294440704 4294967232 4294967232 4294967232 4294967232 4294440704 4294440704 4294901248 4294440704 4286611456 0 0 0 0 0 0 4294440704 4294967232 4294967295 4294967295 4294967232 4294967232 4294440704 4294440704 4286611456 0 0 0 0 0 0 0 0 4294440704 4294967295 4294967295 4294967232 4294967232 4294440704 4286611456 0 0 0 0 0 0 0 0 0 0 4294440704 4294967232 4294967232 4294440704 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 4294440704 4294440704 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294440704 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsErase ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4290772992 4290772992 0 0 0 0 0 0 0 0 0 0 0 0 0 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 0 0 0 0 0 0 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 0 0 0 0 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 0 0 4278212800 4294967295 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 0 4278212800 4278212800 4294967295 4294967295 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 4294967295 4294967295 4290772992 4290772992 4290772992 4290772992 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4294967295 4294967295 4290772992 4290772992 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4294967295 4278212800 0 0 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 0 0 0 0 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 0 0 0 0 0 0 0 0 0 0 0 4278212800 4278212800 4278212800 4278212800 0 0 0 0 0 0 0 0 0 0 0 0 0 4278212800 4278212800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsFileBroken ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 3097008280 4289177511 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4283979864 4294440951 4294967295 4294967295 4294901502 4294901502 4292730333 4067652467 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4283979864 4294375158 4294967295 4294967295 4294901502 4294967295 4293454056 4289967027 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4283979864 4294440951 4294967295 4294967295 4294901502 4294967295 4293322470 4288716960 4283979864 4283979864 4283979864 4283979864 0 0 0 0 4283979864 4294440951 4294967295 4294967295 4294901502 4294967295 4294243572 4291348679 4289637801 4287531910 4283979864 4283979864 0 0 0 0 4283979864 4294440951 4294967295 4294967295 4294967295 4241937616 3954422190 4294703348 4293650402 4292005059 4291019715 0 0 0 0 0 4283979864 4294440951 4294967295 4294967295 4294967295 4283979864 4294967232 4293057745 0 0 0 0 0 0 0 0 4283979864 4294440951 4292992990 4283979864 4283979864 4283979864 4283979864 0 0 4283979864 3460250679 4283979864 0 0 0 0 4283979864 4158314968 4283979864 0 0 0 0 0 4283979864 4294967232 4294967232 4283979864 0 0 0 0 4283979864 0 0 0 4288716960 4294967232 4294967232 4288716960 4294967232 4294967232 4294951167 4283979864 0 0 0 0 0 0 4125549790 4294967232 4288716960 4294967232 4294967232 4283979864 4294967232 4294951167 4294951167 4283979864 0 0 0 0 4283979864 4056927947 4294703086 4294967232 4283979864 4294967232 4294967232 4294967232 4294967232 4294951167 4294951167 4283979864 0 0 0 0 4283979864 4291808970 4294571240 4294967232 4294967232 4294967232 4294967232 4294951167 4294951167 4294951167 4294951167 4283979864 0 0 0 0 4283979864 4283979864 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4283979864 0 0 0 0 508118850 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsFileRead ^ (Form extent: 16@16 depth: 32 fromArray: #( 16777215 16777215 16777215 3430973568 4284900966 4278190080 4278190080 4278190080 4278190080 4281545523 4286611584 4286611584 3430973568 16777215 16777215 16777215 16777215 16777215 16777215 3430973568 4286282619 4284900966 4284900966 4284900966 4284900966 4285558896 4286611584 4286611584 3765728372 1711407618 688129028 16777215 16777215 16777215 16777215 3430973568 4294967295 4294967295 4294967295 4294967295 4294967295 4291611852 4286611584 4286611584 4284900966 4286611584 1711341825 16777215 16777215 0 16777215 4287924884 4294967295 4294967295 4294967295 4294967295 4294967295 4291611852 4286611584 4286611584 4284900966 4286611584 1711341825 16777215 0 0 0 4287924884 4294967295 4294967295 4294311926 4294967295 4294311926 4294311926 4294311926 4294967295 4286216826 4286611584 1711341825 16777215 0 0 0 4287924884 4294967295 4294311926 4294311926 4294311926 4294311926 4293525483 4293525483 4293525483 4293525483 4293525483 1711341825 16777215 0 0 0 4287924884 4294311926 4294311926 4294311926 4293525483 4293525483 4293525483 4293525483 4293525483 4293525483 4293525483 1711341825 16777215 0 0 0 4287924884 4294311926 4294311926 4293525483 4293525483 4293525483 4293525483 4293525483 4293525483 4293525483 4293525483 1711341825 16777215 0 0 0 4287924884 4294311926 4294311926 4293525483 4293525483 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4288256409 16777215 0 0 0 4287924884 4294311926 4294311926 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4288256409 16777215 0 0 0 4287924884 4294967295 4294967295 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4288256409 16777215 0 0 0 4287924884 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4288256409 16777215 0 0 0 4287924884 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4278255360 4278255360 4278255360 4278255360 4288716960 16777215 0 0 0 4288253849 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4278255360 4278255360 4278255360 4278255360 4288716960 16777215 16777215 16777215 16777215 4288253849 4293525483 4293525483 4290838464 4290838464 4290838464 4290838464 4278255360 4278255360 4278255360 4278255360 4287924884 16777215 16777215 16777215 16777215 4288256409 4288256409 4288256409 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4287924884 4287924884 16777215) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsFileSave ^ (Form extent: 16@16 depth: 32 fromArray: #( 4290559420 4280558628 4280427042 4281677109 4283716692 4283716692 4283848277 4283913814 4283913814 4283913813 4283913813 4283913556 4281808437 4280295456 4280427042 4290493627 4280558628 4286874756 4285427310 4287335307 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4284637794 4285756275 4280427042 4280558628 4286874756 4285427310 4287335307 4294967295 4289382083 4288463040 4288463037 4288462780 4288462267 4289315518 4294967295 4294967295 4284637794 4285756275 4280427042 4280558628 4286874756 4285427310 4287598478 4294967295 4291221460 4290630354 4290630350 4290630093 4290629321 4291154379 4294967295 4294967295 4284506208 4285493103 4280427042 4280558628 4286808963 4285164138 4288058258 4294967295 4291220944 4290630350 4290629321 4290563785 4290301639 4290957510 4294967295 4294967295 4284308829 4285229931 4280361249 4280492835 4286414205 4285032552 4288057999 4294967295 4289381824 4288463037 4288462267 4288396731 4288265658 4289184187 4294967295 4294967295 4284308829 4285229931 4280361249 4280492835 4286282619 4285032552 4288057999 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4284045657 4284835173 4280295456 4280492835 4286151033 4285624689 4284703586 4283913813 4283913556 4283848020 4283848020 4283848019 4283847763 4283847762 4283847762 4284176985 4284572001 4284703587 4280295456 4280427042 4285756275 4285756275 4285690482 4285690482 4285361517 4285229931 4285229931 4285229931 4285164138 4284966759 4284703587 4284703587 4284703587 4284637794 4280295456 4280427042 4285756275 4285690482 4285427310 4284900966 4284637794 4284637794 4284637794 4284572001 4284177243 4284177243 4284177243 4284374622 4284572001 4284177243 4280229663 4280427042 4285558896 4285427310 4284835173 4285295724 4286019447 4285756275 4285558896 4285558896 4284769380 4283058762 4284111450 4283782485 4283914071 4284111450 4280229663 4280361249 4285229931 4285229931 4284045657 4294967295 4294967295 4294967295 4294967295 4294967295 4292664540 4284045657 4287137928 4284572001 4283585106 4283914071 4280229663 4280361249 4285229931 4285098345 4283848278 4294967295 4292664540 4283453520 4294967295 4294967295 4292664540 4283979864 4286743170 4284308829 4283387727 4283650899 4280163870 4280295456 4284111450 4282664004 4283716692 4294967295 4292664540 4284177243 4294967295 4294967295 4292664540 4283848278 4286348412 4284177243 4283256141 4283585106 4280163870 4280295456 4284440415 4283914071 4283716692 4294967295 4294967295 4294967295 4294967295 4294967295 4292664540 4283650899 4285887861 4283979864 4283256141 4283585106 4280163870 4290493627 4280295456 4280295456 4280229663 4282006074 4283519313 4283453520 4283387727 4283387727 4282598211 4280229663 4280427042 4280229663 4280163870 4280163870 4290493627) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsFreezeTree ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4278239232 4278239232 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278239232 4278239232 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4290838464 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838464 4278222848 4278222848 4290838464 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4290838464 4278222848 4278222848 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsFullText ^ (Form extent: 16@16 depth: 32 fromArray: #( 16777215 16777215 16777215 3430973568 4284900966 4278190080 4278190080 4278190080 4278190080 4281545523 4286611584 4286611584 3430973568 16777215 16777215 16777215 16777215 16777215 16777215 3430973568 4286282619 4284900966 4284900966 4284900966 4284900966 4285558896 4286611584 4286611584 3765728372 1711407618 688129028 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4291611852 4286611584 4286611584 4284900966 4286611584 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4291611852 4286611584 4286611584 4284900966 4286611584 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4292269782 4288256409 4288256409 4286216826 4286611584 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 1711341825 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 4294967295 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4294967295 16777215 16777215 16777215 16777215 3430973568 4288256409 4294967295 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4294967295 16777215 16777215 16777215 16777215 3430973568 4288253849 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 4294967295 16777215 16777215 16777215 16777215 3430973568 4287924884 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 4288716960 16777215 16777215 16777215 16777215 3430973568 4291019715 4294967295 4294967295 4294967295 4294967295 4278222848 4278222848 4294967295 4294967295 4294967295 4288716960 16777215 16777215 16777215 16777215 1384153216 1719697536 1719697536 1719697536 1719697536 4294967295 4294967295 4294967295 4294967295 4288716960 4288716960 688129028 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 16777215 16777215) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsGriddingOff ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 4294901760 4294901760 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 4294901760 4294901760 0 0 4288716960 0 0 4288716960 4294901760 4294901760 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4294901760 4294901760 4288716960 4288716960 4288716960 4294901760 4294901760 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 4294901760 4294901760 4294901760 4294901760 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 4294901760 4294901760 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4294901760 4294901760 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4294901760 0 0 4288716960 4294901760 4294901760 4288716960 0 0 4288716960 0 0 0 4288716960 4294901760 4294901760 4288716960 0 0 4288716960 0 4294901760 4294901760 0 0 4288716960 0 4288716960 4288716960 4294901760 4294901760 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4294901760 4294901760 4288716960 4288716960 4288716960 0 0 4294901760 0 0 4288716960 0 0 4288716960 0 0 4288716960 4294901760 0 4288716960 0 0 4294901760 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsGriddingOn ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0 0 4288716960 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsLinks ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 0 0 4294901760 0 4294901760 4294901760 4294901760 0 0 0 0 0 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 4294901760 0 0 0 0 0 4294901760 0 0 0 0 0 4294901760 0 4294901760 4294901760 4294901760 0 0 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsLocalRecents ^ (Form extent: 16@16 depth: 32 fromArray: #( 4284111450 4284900966 4283782485 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4283782485 4283782485 4283782485 4284308829 4293190884 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4291019715 4278190080 4283782485 4291282887 4291282887 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4291282887 4291019715 4278190080 4283782485 4294967283 4294967283 4294967283 4294967283 4294967283 4284000511 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4284000511 4294967295 4294967295 4294967295 4294967293 4294967291 4294967289 4294967287 4293848806 4278190080 4283782485 4292796120 4294967292 4294967295 4294967295 4294967295 4284000511 4294967295 4294967293 4294967289 4294967285 4294967282 4294967278 4294967274 4292796104 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4284000511 4294967291 4294967288 4294967284 4294967280 4294967276 4294967273 4294967279 4292796100 4278190080 4283782485 4292796120 4294967292 4294967292 4294967292 4294967294 4284000511 4294967286 4294967282 4294967279 4294967294 4286611584 4294967267 4294967279 4292796095 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 4294967288 4284000511 4294967294 4294967294 4294967294 4286611584 4278239232 4286611584 4294967279 4292796095 4278190080 4283782485 4292796126 4294967295 4294967291 4294967287 4294967283 4284000511 4294967276 4294967294 4286611584 4278239232 4278239232 4278239232 4286611584 4292796095 0 4283782485 4286611584 4286611584 4286611584 4286611584 4294967278 4284000511 4294967270 4286611584 4278239232 4278239232 4278239232 4278239232 4278239232 4286611584 4292664540 4283782485 4292796120 4292796116 4292796112 4292796110 4292796107 4284000511 4286611584 4278239232 4278239232 4278239232 4281348144 4278239232 4278239232 4278239232 4286611584 4283782485 4278190080 4278190080 4278190080 4278190080 0 4286611584 4278239232 4278239232 4278239232 4281348144 4292664540 4281348144 4278239232 4278239232 4278239232 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4286611584 4278239232 4278239232 4278239232 4281348144 4278239232 4278239232 4278239232 4286611584 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4286611584 4278239232 4278239232 4278239232 4278239232 4278239232 4286611584 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4286611584 4278239232 4278239232 4278239232 4286611584 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsLocalSearch ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 4282733150 4282996580 4283979864 0 0 0 0 0 0 0 0 0 0 4283979864 4278190080 4278190080 4278190080 4281218878 4279440404 4281679170 4283979864 0 0 0 0 0 0 0 0 4278190080 4278190080 4290107122 4291290105 4290437117 4289318893 4284379266 4281613638 4278190080 0 0 0 0 0 0 4278190080 4278190080 4290632432 4289256703 4289256703 4289256703 4289256703 4290043133 4278190080 4283979864 0 0 0 0 0 0 4278190080 4284050554 4289256703 4289256703 4294967295 4294967295 4289256703 4290109183 4278190080 4278190080 0 0 0 0 0 0 4278190080 4284642950 4290838527 4290838527 4294967295 4294967295 4289256703 4290109183 4281482309 4278190080 0 0 0 0 0 0 4283979864 4278190080 4289256703 4278255615 4289256703 4289256703 4289256703 4288660962 4278190080 4278190080 0 0 0 0 0 0 4278190080 4278190080 4288132557 4290699515 4289256703 4289256703 4290633980 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4286225585 4287409862 4278190080 4278190080 4283979864 0 0 0 0 0 4284904056 4279374354 4279308561 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 4278848011 4279242768 4279769112 0 0 0 0 0 0 0 0 0 0 0 4281348144 4278848527 4278979596 4279308561 4286484632 0 0 0 0 0 0 0 0 0 0 0 4281348144 4279243800 4278255874 4284443249 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4281348144 4281348144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsNewElement ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 0 0 0 0 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 4294902015 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsNewRight ^ (Form extent: 16@16 depth: 32 fromArray: #( 4284111450 4284900966 4283782485 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4283782485 4283782485 4283782485 4284308829 4293190884 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 0 4278190080 4283782485 0 0 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 0 0 4278190080 4283782485 0 0 0 0 0 4289256703 0 0 0 0 4294967283 4294967283 4294967283 4294967283 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 0 4289256703 0 0 0 4294967293 4294967291 4294967289 4294967287 4293848806 4278190080 4283782485 4292796120 0 0 0 0 4289256703 0 0 4294967289 4294967285 4294967282 4294967278 4294967274 4292796104 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 0 4289256703 4294967291 4294967288 4294967284 4294967280 4294967276 4294967273 4294967269 4292796100 4278190080 4283782485 4292796120 0 0 0 0 4289256703 4294967286 4294967282 4294967279 4283979864 4294967040 4294967267 4294967263 4292796095 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 0 4289256703 4283979864 4294967173 4294901480 4283979864 4294967040 4294967262 4283979864 4294967173 4278190080 4283782485 4292796126 0 0 0 0 4289256703 4294967276 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 0 4289256703 4294967270 4294967266 4294967040 4294967040 4294967040 4294967040 4278190080 4278190080 4278190080 4283782485 0 0 0 0 0 4289256703 4294967040 4294967040 4294967040 4294967173 4294967294 4294967173 4294967040 4294967040 4294967173 4283782485 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4294967040 4294967040 4294967040 4294967040 4294967040 4278190080 4278190080 0 0 0 0 0 0 0 0 4278190080 4294967040 4294967040 4294967040 4294967040 4294967040 0 0 0 0 0 0 0 0 0 4278190080 4294967040 0 4278190080 4294967040 0 4278190080 4294967173 0 0 0 0 0 0 0 0 0 0 0 4278190080 4294967040 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsNextGreen ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsOk ^ (Form extent: 16@14 depth: 32 fromArray: #( 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 4278239232 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 4278239232 4278206464 1090519039 0 0 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 4278239232 4278206464 4278190080 0 4278255360 4278255360 4278239232 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 4278239232 4278206464 4278190080 1090519039 0 4278239232 4278255360 4278255360 4278239232 1090519039 1090519039 1090519039 1090519039 4278239232 4278255360 4278239232 4278206464 4278190080 1090519039 1090519039 0 4278206464 4278239232 4278255360 4278255360 4278239232 1090519039 1090519039 4278239232 4278255360 4278239232 4278206464 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 4278206464 4278239232 4278255360 4278255360 4278239232 4278239232 4278255360 4278239232 4278206464 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278206464 4278239232 4278255360 4278255360 4278255360 4278239232 4278206464 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278206464 4278239232 4278239232 4278239232 4278206464 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278206464 4278239232 4278206464 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278190080 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsP21Syntax ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294967295 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4286611456 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 4278255615 4294967295 4294967295 4290822144 4286611456 4286611456 4286611456 0 0 0 0 0 0 0 0 0 4278255615 4294967295 4294967295 4294967295 4290822144 4286611456 4286611456 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4294967295 4286611456 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 4294967295 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611456 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsPreviousGreen ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRecents ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsReload ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 1140851456 2315266318 2919251994 2751477778 1828722180 520093696 0 0 0 0 0 0 0 0 503316480 2986425884 4284656512 4287619486 4285588597 4281585977 4279023897 3875567377 1744834307 0 0 0 0 0 0 285212672 3355658531 4289258683 4291231680 4285394026 4281327404 4279428113 4278779653 4278255360 4278233864 1577061377 0 0 0 1879056135 3053536280 3422570007 4286171279 4289133475 4283292747 4280011295 4211183378 3959453968 4278233099 4278255360 4278255360 3942678537 570425344 0 0 3724960295 4283686744 4281061679 4281787190 4280935719 4279294225 4093667862 1509949696 369098752 1392509696 3439348495 4278248192 4278254336 2113935619 0 0 3036692757 4280930093 4279622931 4278382338 4278255360 4278255360 4227910657 2499817221 0 0 234881024 2516592136 4227909377 3305135365 67108864 0 1795166723 4278628375 4278777606 4278255360 4278255360 4278255360 4278255360 2952804615 16777216 0 0 721420288 3825225751 3993001487 268435456 0 352321536 3791676945 4278255360 4278255360 4278255360 4278241283 3053468680 536870912 0 687865856 2668116257 4033718155 4257538006 4232022118 1073741824 0 0 2164267015 4278233094 4194355456 3724569355 1962937603 100663296 0 1191184384 3878715219 4291754968 4294115312 4292739033 4287619996 2902470159 0 0 1275070720 4280252748 3120573713 285212672 0 0 419430400 4011556918 4287166854 4285720944 4283817301 4282440512 4281656625 4144069915 754974720 0 587202560 4184320129 4099317875 1728056576 0 0 218103808 3456193050 4279679777 4279100684 4278382594 4278254848 4278255360 4278244867 1962938883 0 50331648 3205321769 4287625363 4281640779 2868917519 1191183104 771751936 2583701004 4278755354 4279233294 4278255360 4278255360 4278253568 4278247171 2499814151 0 0 1426065664 4280330038 4282379320 4279944995 4278293526 4177562384 4278241547 4278320129 4278255360 4278255360 4244670732 3137351182 3019911437 1056965120 0 0 33554432 2550146824 4278303249 4278320896 4278255360 4278255360 4278255360 4278255360 4278255360 4278233097 2214597380 33554432 0 0 0 0 0 83886080 2466259719 4160789000 4278249728 4278255360 4278254848 4278244354 4043339022 2147487492 33554432 0 0 0 0 0 0 0 0 889192448 2130713347 2717920776 2667588360 2013270531 754974720 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRemove ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRemovePane ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 0 0 4282074702 0 0 0 0 0 0 0 0 0 0 0 4287474886 4282074702 0 0 4282074702 0 0 4294901760 4294901760 0 0 0 0 4294901760 4294901760 0 4285762720 4282074702 0 0 4282074702 0 0 4294901760 4294901760 4294901760 0 0 4294901760 4294901760 4294901760 0 4285499290 4282074702 0 0 4282074702 0 0 15132646 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 0 0 4285499290 4282074702 0 0 4282074702 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 4285499290 4282074702 0 0 4282074702 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 4285433240 4282074702 0 0 4282074702 0 0 0 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 15132646 0 4285433240 4282074702 0 0 4282074702 0 0 4294901760 4294901760 4294901760 0 0 4294901760 4294901760 4294901760 0 4285169810 4282074702 0 0 4282074702 0 0 4294901760 4294901760 0 0 0 0 4294901760 4294901760 0 4284708744 4282074702 0 0 4282074702 4287474886 4291019715 4291019715 4291019715 4291019715 4287474886 4287474886 4291019715 4291019715 4291019715 4291019715 4287474886 4282074702 0 0 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRemoveRight ^ (Form extent: 16@16 depth: 32 fromArray: #( 4284111450 4284900966 4283782485 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4278212800 4283782485 4283782485 4283782485 4284308829 4293190884 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4289256703 4291019715 4278190080 4283782485 4291282887 4291282887 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4284000511 4291282887 4291019715 4278190080 4283782485 4294967283 4294967283 4294967283 4294967283 4294967283 4284000511 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4294967283 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4284000511 4294967295 4294967295 4294967295 4294967293 4294967291 4294967289 4294967287 4293848806 4278190080 4283782485 4292796120 4294967292 4294967295 4294967295 4294967295 4284000511 4294967295 4294967293 4294967289 4294967285 4294967282 4294967278 4294967274 4292796104 4278190080 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4284000511 4294967291 4294967288 4294967284 4294967280 4294967276 4294967273 4294967279 4292796100 4278190080 4283782485 4292796120 4294967292 4294967292 4294967292 4294967294 4284000511 4294967286 4294967282 4294967279 4294967294 4294967294 4294967267 4294967279 4292796095 0 4283782485 4286611584 4286611584 4286611584 4286611584 4294967288 4284000511 4294967294 4294901760 4294901760 4294967294 4294967294 4294967279 4294901760 4294901760 0 4283782485 4292796126 4294967295 4294967291 4294967287 4294967283 4284000511 4294967276 4294901760 4294901760 4294901760 4294967279 4294901760 4294901760 4294901760 0 4283782485 4286611584 4286611584 4286611584 4286611584 4294967278 4284000511 4294967270 4294967279 4294901760 4294901760 4294901760 4294901760 4294901760 4292796095 0 4283782485 4292796120 4292796116 4292796112 4292796110 4292796107 4284000511 4292796095 0 0 4294901760 4294901760 4294901760 0 0 4278190080 4283782485 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 4294901760 4294901760 4294901760 4294901760 4294901760 0 0 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4294901760 4294901760 4294901760 0 4294901760 4294901760 4294901760 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4294901760 4294901760 0 0 0 4294901760 4294901760 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRun ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4293040397 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 0 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294967040 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4294967040 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4294967040 4293040397 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4294967232 4294958336 0 0 0 0 0 0 0 0 0 0 0 0 0 4293040397 4294967040 4294967040 4293765633 4293765633 4293040397 4293040397 0 0 0 0 0 0 0 0 0 0 4293765633 4294967040 4294967040 4294967040 4293040397 0 0 0 0 0 0 0 0 0 0 0 0 4293040397 4294967040 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294967040 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4294958336 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsRunAndSee ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 4293765633 0 0 0 0 0 0 0 0 0 0 4282400768 4282400768 0 0 4293040397 4293765633 0 0 0 0 0 0 0 0 0 4282400768 4278190080 4278190080 4282400768 4293765633 4294958336 0 0 0 0 0 0 0 0 0 4282400768 4278190080 0 0 4278190080 4294967040 4293765633 0 0 0 0 0 0 0 0 4282400768 4278190080 0 0 4293765633 4278190080 4294967040 0 0 0 0 0 0 0 0 4282400768 4278190080 0 0 4293765633 4278190080 4294967040 4293040397 4293765633 0 0 0 0 0 0 4278190080 4278190080 4278190080 0 4293765633 4294958336 4294967232 4294958336 4278190080 4278190080 4278190080 0 0 0 4282400768 4278190080 4286611456 4286611456 4286611456 4278190080 0 4293040397 4294967040 4278190080 4286611456 4286611456 4286611456 4278190080 0 4282400768 4278190080 4286611456 4290822144 4290822144 4286611456 4286611456 4278190080 4278190080 4278190080 4286611456 4290822144 4290822144 4286611456 4286611456 4278190080 4278190080 0 4286611456 4294967040 4290822144 4286611456 4286611456 4278190080 4278190080 4278190080 4286611456 4294967040 4290822144 4286611456 4286611456 4278190080 0 0 4286611456 4294967040 4294967040 4290822144 4286611456 4278190080 4294958336 4294967040 4286611456 4294967040 4294967040 4290822144 4286611456 4278190080 0 0 4278190080 4286611456 4286611456 4286611456 4278190080 4294958336 4294967232 4294958336 4278190080 4286611456 4286611456 4286611456 4278190080 0 0 0 0 4278190080 4278190080 4278190080 0 4293765633 4294958336 4293765633 0 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 4293765633 4294958336 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 4293765633 4293765633 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsSearch ^ (Form extent: 16@16 depth: 32 fromArray: #( 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4278190080 4278190080 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4283979864 4283979864 4282733150 4282996580 4283979864 4283979864 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4283979864 4278190080 4278190080 4278190080 4281218878 4279440404 4281679170 4283979864 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4283979864 4278190080 4278190080 4290107122 4291290105 4290437117 4289318893 4284379266 4281613638 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4278190080 4278190080 4290632432 4294967295 4294967295 4294967295 4290830843 4290043133 4278190080 4283979864 4278190080 4294951167 4294951167 4294951167 4294951167 4278190080 4278190080 4284050554 4292668148 4294967295 4294967295 4294967295 4294967295 4290109183 4278190080 4278190080 4278190080 4294951167 4294951167 4294951167 4294951167 4278190080 4278190080 4284642950 4292340213 4294967295 4294967295 4294967295 4294967295 4290109183 4281482309 4278190080 4278190080 4294951167 4294951167 4294951167 4294951167 4278190080 4283979864 4278190080 4291224314 4293914607 4294967295 4294967295 4291880695 4288660962 4278190080 4278190080 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4278190080 4278190080 4288132557 4290699515 4292208629 4292339700 4290633980 4278190080 4278190080 4278190080 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4286483607 4278190080 4278190080 4278190080 4286225585 4287409862 4278190080 4278190080 4283979864 4278190080 4294951167 4294951167 4294951167 4294951167 4284904056 4279374354 4279308561 4287666849 4286746005 4278190080 4278190080 4278190080 4278190080 4284511356 4278190080 4294951167 4294951167 4294951167 4294951167 4285959068 4278848011 4279242768 4279769112 4294951167 4294951167 4278190080 4278190080 4278190080 4278190080 4278190080 4294951167 4294951167 4294951167 4281348144 4281348144 4278848527 4278979596 4279308561 4286484632 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4281348144 4281348144 4279243800 4278255874 4284443249 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4281348144 4278190080 4278190080 4281348144 4281348144 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4281348144 4281348144 4281348144 4281348144 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167 4294951167) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsSearchMethod ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282733150 4282996580 0 0 0 0 0 0 0 0 0 0 15132646 4288593624 4278190080 4278190080 4278190080 4281218878 4279440404 4281679170 0 0 0 0 0 0 0 0 4289911030 4278190080 4278190080 4290107122 4291290105 4290437117 4289318893 4284379266 4281613638 0 0 0 0 0 0 0 4278190080 4278190080 4290632432 0 0 0 4290830843 4290043133 4278190080 0 0 0 0 0 0 0 4278190080 4284050554 0 0 0 0 0 4290109183 4278190080 4278190080 0 0 0 0 0 0 4278190080 4284642950 0 0 0 0 0 4290109183 4281482309 4278190080 0 0 0 0 0 0 4278190080 4278190080 4291224314 0 0 0 4291880695 4288660962 4278190080 4278190080 0 0 0 0 0 0 4286618282 4278190080 4288132557 0 0 0 4290633980 4278190080 4278190080 0 0 0 0 0 0 4289842659 4286483607 4278190080 0 0 0 0 0 4278190080 4286420911 0 0 0 0 0 4284904056 4279374354 4279308561 0 4294901760 4294901760 15132646 4294901760 4294901760 0 0 0 0 0 15132646 4285959068 4278848011 4279242768 4279769112 4290501361 0 4294901760 4294901760 15132646 4294901760 4294901760 0 0 0 0 4278190080 4278848527 4278979596 4279308561 4286484632 0 0 0 4294901760 4294901760 15132646 4294901760 4294901760 0 0 0 4278190080 4279243800 4278255874 4284443249 0 0 0 0 4294901760 4294901760 15132646 4294901760 4294901760 0 0 0 4278190080 4278190080 4278190080 0 0 0 0 4294901760 4294901760 15132646 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 15132646 4294901760 4294901760 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsSearchSender ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282733150 4282996580 0 0 0 0 0 0 0 0 0 0 15132646 4288593624 4278190080 4278190080 4278190080 4281218878 4279440404 4281679170 0 0 0 0 0 0 0 0 4289911030 4278190080 4278190080 4290107122 4291290105 4290437117 4289318893 4284379266 4281613638 0 0 0 0 0 0 0 4278190080 4278190080 4290632432 0 0 0 4290830843 4290043133 4278190080 0 0 0 0 0 0 0 4278190080 4284050554 0 0 0 0 0 4290109183 4278190080 4278190080 0 0 0 0 0 0 4278190080 4284642950 0 0 0 0 0 0 4281482309 4278190080 0 0 0 0 0 0 4278190080 4278190080 4291224314 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 4289842659 4286483607 4278190080 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 4284904056 4279374354 4279308561 4284443249 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 15132646 4285959068 4278848011 4279242768 4279769112 4290501361 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 4278190080 4278848527 4278979596 4279308561 4286484632 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 4278190080 4279243800 4278255874 4284443249 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/10/2007 09:43'! form16x16ActionsSearchsender ^ Form extent: 16 @ 16 depth: 32 fromArray: #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282733150 4282996580 0 0 0 0 0 0 0 0 0 0 15132646 4288593624 4278190080 4278190080 4278190080 4281218878 4279440404 4281679170 0 0 0 0 0 0 0 0 4289911030 4278190080 4278190080 4290107122 4291290105 4290437117 4289318893 4284379266 4281613638 0 0 0 0 0 0 0 4278190080 4278190080 4290632432 0 0 0 4290830843 4290043133 4278190080 0 0 0 0 0 0 0 4278190080 4284050554 0 0 0 0 0 4290109183 4278190080 4278190080 0 0 0 0 0 0 4278190080 4284642950 0 0 0 0 0 0 4281482309 4278190080 0 0 0 0 0 0 4278190080 4278190080 4291224314 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 4289842659 4286483607 4278190080 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 4284904056 4279374354 4279308561 4284443249 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 15132646 4285959068 4278848011 4279242768 4279769112 4290501361 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 4278190080 4278848527 4278979596 4279308561 4286484632 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 4278190080 4279243800 4278255874 4284443249 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 4278190080 4278190080 4278190080 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 0 ) offset: 0 @ 0! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsSeveralWindows ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282074703 4281745479 4282272339 4281877323 4280362537 4279703578 4279308562 4279571992 4279703578 4279440148 4285762720 0 0 0 0 0 4281218620 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4285499290 0 0 0 4282074703 4281745479 4282008909 4281877323 4280362537 4279703578 4279308562 4279571992 4279703578 4279440148 4285762720 4283984504 4285499290 0 0 0 4281218620 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4285499290 4283918712 4285499290 4282074703 4281745479 4282272339 4281877323 4280362537 4279703578 4279308562 4279571992 4279703578 4279440148 4285762720 4290838527 4283984504 4285499290 4284708744 4284708744 4281218620 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4285499290 4290838527 4283918712 4285499290 4283786868 4285433240 4282008909 4287409092 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4283984504 4285499290 4290838527 4284708744 4284708744 4284313728 4285169810 4281745223 4286157736 4290838527 4294967295 4290838527 4290838527 4294967295 4294967295 4294967295 4283918712 4285499290 4290838527 4283786868 4284708744 4283852918 4284708744 4280296487 4287211712 4290838527 4290838527 4294967295 4290838527 4294967295 4290838527 4294967295 4284708744 4286157736 4290838527 4283852918 4283852918 4280625968 4284708744 4282206546 4287079869 4290838527 4294967295 4290838527 4294967295 4290838527 4294967295 4294967295 4283786868 4286157736 4290838527 4283852918 4284708744 0 0 4282074702 4287409092 4290838527 4290838527 4294967295 4294967295 4290838527 4294967295 4294967295 4284313728 4285169810 4280559918 4280625968 4284708744 0 0 4282074702 4287211712 4290838527 4290838527 4290838527 4294967295 4294967295 4294967295 4294967295 4283852918 4284708744 0 0 0 0 0 4283984505 4279440404 4280296488 4281481536 4280559918 4280559918 4280559918 4280559918 4280559918 4280625968 4284708744 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsSmiley ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0 0 0 0 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 0 0 0 0 0 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 0 0 0 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 0 0 4283979864 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4283979864 0 4283979864 4294967040 4294967040 4294967040 4294967040 4283979864 4294967232 4294967040 4294967040 4283979864 4294967232 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4283979864 4294967232 4294967040 4294967040 4283979864 4294967232 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4281348144 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4281348144 4294967040 4294967040 4294967040 4283979864 4283979864 4294967040 4294967040 4294967040 4281348144 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4281348144 4294967040 4294967040 4294967040 4283979864 0 4283979864 4294967040 4294967040 4294967232 4281348144 4294967040 4294967040 4294967040 4294967040 4281348144 4294967232 4294967040 4294967040 4283979864 0 0 4283979864 4294967040 4294967040 4294967040 4294967232 4281348144 4281348144 4281348144 4281348144 4294967232 4294967040 4294967040 4294967040 4283979864 0 0 0 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 0 0 0 0 0 4283979864 4283979864 4294967040 4294967040 4294967040 4294967040 4294967040 4294967040 4283979864 4283979864 0 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsTamBrowserOpen ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 4292664540 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 4292664540 4278206464 4294967232 4278239232 4294967232 4294967232 4294967232 4294967232 4294967232 4278222848 0 0 0 0 0 0 4292664540 4278206464 4294967232 4278239232 4278239232 4294967232 4294967232 4278239232 4294967232 4278222848 0 0 0 0 0 0 4292664540 4278206464 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278222848 0 0 0 0 0 0 4292664540 4278206464 4294967232 4294967232 4294967232 4294967232 4294967232 4294967232 4294967232 4278222848 0 0 0 0 0 0 4292664540 4278206464 4290838464 4290838464 4290838464 4294967232 4294967232 4290838464 4294967232 4278222848 4284111450 4284900966 4283782485 4291019715 4291019715 4291019715 4292664540 4278206464 4290838464 4294967232 4290838464 4290838464 4294967232 4294967232 4294967232 4278222848 4284308829 4293190884 4289256703 4289256703 4289256703 4289256703 4292664540 4278206464 4290838464 4294967232 4294967232 4294967232 4294967232 4290838464 4290838464 4278222848 4283782485 4291282887 4291282887 4284000511 4284000511 4284000511 4292664540 4278206464 4278206464 4278206464 4278206464 4278206464 4278206464 4278222848 4278222848 4278222848 4283782485 4294967283 4294967283 4294967283 4286611584 4294967283 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4291019715 0 0 0 0 0 4283782485 4292796120 4294967292 4294967295 4286611584 4294967295 4294967295 4294967295 4294967293 4294967289 4291019715 0 0 0 0 0 4283782485 4286611584 4286611584 4286611584 4286611584 4294967295 4294967295 4294967291 4294967288 4294967284 4291019715 0 0 0 0 0 4283782485 4292796120 4294967292 4294967292 4286611584 4294967294 4294967295 4294967286 4294967282 4294967279 4291019715 0 0 0 0 0 4283782485 4286611584 4286611584 4286611584 4286611584 4294967288 4294967295 4294967294 4294967294 4294967294 4291019715 0 0 0 0 0 4283782485 4292796126 4294967295 4294967291 4286611584 4291019715 4291019715 4291019715 4291019715 4291019715 4291019715 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsTwoHorizontalPanes ^ (Form extent: 16@16 depth: 32 fromArray: #( 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 4288716960 0 0 0 0 0 4288716960 0 0 0 0 0 0 0 0 0 4288716960 0 0 0 0 0 4288716960 0 0 0 0 0 0 0 0 0 4288716960 0 0 0 0 0 4288716960 0 0 0 0 0 0 0 0 0 4288716960 0 0 0 0 0 4288716960 0 0 0 0 0 0 0 0 0 4288716960 0 0 0 0 0 4288716960 0 0 0 0 0 0 0 0 0 4288716960 0 0 0 0 0 4288716960 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4288716960 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 4288716960 4288716960 4288716960 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 0 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 0 0 0 4281348144 0 0 0 0 0 0 0 0 0 0 0 4281348144 0 0 0 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsTwoVerticalPanes ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 0 0 4282074702 0 0 0 0 0 4282074702 4285433240 0 0 0 0 4287474886 4282074702 0 0 4282074702 0 0 0 0 0 4282074702 4285433240 0 0 0 0 4285762720 4282074702 0 0 4282074702 0 0 15132646 15132646 15132646 4282074702 4285433240 15132646 15132646 0 0 4285499290 4282074702 0 0 4282074702 0 0 15132646 15132646 15132646 4282074702 4285433240 15132646 15132646 0 0 4285499290 4282074702 0 0 4282074702 0 0 0 0 0 4282074702 4285433240 0 0 0 0 4285499290 4282074702 0 0 4282074702 0 0 0 0 0 4282074702 4285433240 0 0 0 0 4285433240 4282074702 0 0 4282074702 0 0 0 15132646 15132646 4282074702 4285433240 0 0 15132646 0 4285433240 4282074702 0 0 4282074702 0 0 0 0 15132646 4282074702 4285433240 15132646 15132646 15132646 0 4285169810 4282074702 0 0 4282074702 0 0 0 0 0 4282074702 4285433240 0 0 0 0 4284708744 4282074702 0 0 4282074702 4287474886 4287474886 4287474886 4287474886 4287474886 4282074702 4285433240 4287474886 4287474886 4287474886 4287474886 4287474886 4282074702 0 0 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 4282074702 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsUnaccepted ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 0 0 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsUp ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294967040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294967040 4294967040 4286611456 0 0 0 0 0 0 0 0 0 0 0 0 4294967040 4294967232 4294967232 4294967040 4286611456 0 0 0 0 0 0 0 0 0 0 4294967040 4294967232 4294967295 4294967295 4294703872 4294967040 4286611456 0 0 0 0 0 0 0 0 4294967040 4294967232 4294967295 4294967295 4294967295 4294967040 4294967040 4294967040 4286611456 0 0 0 0 0 0 4294967040 4294967040 4294967232 4294967232 4294967232 4294967040 4294967040 4294967040 4294967040 4294967040 4286611456 0 0 0 0 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 4286611456 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsUpLevelGreen ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4285032552 4278663687 4278605830 4278603782 4278661895 4279120910 4282466625 0 0 0 0 0 0 0 0 0 4281874488 4278313473 4278255360 4278255360 4278255360 4278488580 4285822068 0 0 0 0 0 0 0 0 0 4280953386 4278316289 4278255360 4278255360 4278487556 4283914327 0 0 0 0 0 0 0 0 0 0 4280492835 4278254848 4278254080 4278486532 4283323220 0 0 0 0 0 0 0 0 0 0 0 4279505940 4278316545 4278540293 4283453520 4281217075 4286481287 0 0 0 0 0 0 0 0 0 0 4280953386 4278603270 4284703587 0 0 4281348144 4288716960 0 0 0 0 0 0 0 0 0 4287006342 4289309097 0 0 0 4288716960 4282927176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4281216558 4288716960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4288716960 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsUpLevelRed ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4285032552 4278663687 4278605830 4278603782 4278661895 4279120910 4282466625 0 0 0 0 0 0 0 0 0 4281874488 4294901760 4294901760 4294901760 4294901760 4278488580 4285822068 0 0 0 0 0 0 0 0 0 4280953386 4294901760 4294901760 4294901760 4278487556 4283914327 0 0 0 0 0 0 0 0 0 0 4280492835 4294901760 4294901760 4278486532 4283323220 0 0 0 0 0 0 0 0 0 0 0 4279505940 4294901760 4278540293 4283453520 4281217075 4286481287 0 0 0 0 0 0 0 0 0 0 4280953386 4278603270 4284703587 0 4286611584 4281348144 4288716960 0 0 0 0 0 0 0 0 0 4287006342 4289309097 15132646 0 0 4288716960 4282927176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4281216558 4288716960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4288716960 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15132646 15132646 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 9/20/2007 13:31'! form16x16ActionsWhiteOk ^ (Form extent: 16@14 depth: 32 fromArray: #( 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 4291019715 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 4294967295 4291019715 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 4294967295 4294967295 4291019715 1090519039 0 0 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 4294967295 4294967295 4286611584 4278190080 0 4291019715 4291019715 4291019715 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4291019715 4294967295 4294967295 4286611584 4278190080 1090519039 0 4291019715 4294967295 4294967295 4291019715 1090519039 1090519039 1090519039 1090519039 4291019715 4294967295 4294967295 4286611584 4278190080 1090519039 1090519039 0 4286611584 4294967295 4294967295 4294967295 4291019715 1090519039 1090519039 4291019715 4294967295 4294967295 4286611584 4278190080 1090519039 1090519039 1090519039 1090519039 4278190080 4286611584 4294967295 4294967295 4294967295 4291019715 4291019715 4294967295 4294967295 4286611584 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4286611584 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4286611584 4294967295 4294967295 4294967295 4286611584 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4286611584 4294967295 4286611584 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 4278190080 4278190080 4278190080 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039 1090519039) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithHandles ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithNames ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4292664540 4292664540 4278190080 4278190080 4278190080 4292664540 4292664540 4278190080 4278190080 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4292664540 4292664540 4278190080 4278190080 4278190080 4292664540 4292664540 4278190080 4292664540 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4278190080 4292664540 4278190080 4292664540 4278190080 4292664540 4292664540 4278190080 4278190080 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4286611584 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4292664540 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithTriangles ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 0 4278239232 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 0 0 0 4278239232 0 0 0 0 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 4278239232 0 0 0 0 0 0 4278239232 4278239232 0 0 0 0 0 0 0 4278239232 0 0 0 0 0 0 0 4278239232 0 0 0 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithoutHandles ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 4294901760 4294901760 0 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 4294901760 4294901760 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4278190080 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 4278190080 4294967040 4294967040 4278190080 0 4294901760 4294901760 0 0 0 4294901760 4294901760 0 0 0 0 4278190080 4294967040 4294967040 4278190080 0 4278190080 4294901760 4294901760 4294901760 4294901760 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4294967040 4294901760 4294901760 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4294901760 4294901760 4294901760 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4294901760 0 0 0 4294901760 0 4278190080 4278190080 4278190080 4278190080 0 4278190080 4278190080 4278190080 4294901760 4294901760 0 0 0 0 0 4294901760 4294901760 0 0 0 0 4278190080 4294967040 4294901760 4294901760 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4294901760 4294901760 4278190080 0 0 4278190080 4294967040 4294901760 4278190080 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294901760 4278190080 0 0 4278190080 4294901760 4278190080 4278190080 4278190080 4294967040 4294967040 4278190080 0 0 4278190080 4294967040 4294967040 4278190080 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithoutNames ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 4292664540 4292664540 4292664540 4292664540 4292664540 4294901760 4294901760 4292664540 4292664540 4292664540 4294901760 4294901760 4292664540 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4292664540 4292664540 4278190080 4294901760 4294901760 4294901760 4294901760 4278190080 4278190080 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4292664540 4292664540 4278190080 4278190080 4294901760 4294901760 4292664540 4278190080 4292664540 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4278190080 4278190080 4292664540 4278190080 4294901760 4294901760 4294901760 4292664540 4278190080 4278190080 4278190080 4292664540 4292664540 4286611584 4292664540 4292664540 4292664540 4292664540 4292664540 4294901760 4292664540 4292664540 4292664540 4294901760 4292664540 4292664540 4292664540 4292664540 4292664540 4286611584 4292664540 4292664540 4292664540 4294901760 4294901760 4292664540 4292664540 4292664540 4292664540 4292664540 4294901760 4294901760 4292664540 4292664540 4292664540 4286611584 4286611584 4286611584 4294901760 4294901760 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4286611584 4294901760 4294901760 4286611584 4286611584 4286611584 0 0 4294901760 0 0 0 0 0 0 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsWithoutTriangles ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 0 0 0 4278255360 0 0 0 0 0 4294901760 4294901760 0 0 0 0 0 0 4278255360 4278255360 4278255360 0 0 0 0 0 0 4294901760 4294901760 0 0 0 4278255360 4278255360 0 4294901760 4294901760 0 0 0 0 0 0 0 4294901760 4294901760 4278255360 4278255360 0 4294901760 4294901760 4278255360 0 0 0 0 0 0 0 4278255360 4278255360 4294901760 4294901760 4294901760 4294901760 0 4278255360 0 0 0 0 0 0 4278255360 4278255360 0 0 0 4294901760 4294901760 0 0 4278255360 0 0 0 0 0 0 0 4278255360 0 0 4294901760 4294901760 4294901760 0 4278255360 0 0 0 0 0 0 0 0 0 4278255360 4294901760 0 0 0 4294901760 4278255360 0 0 0 0 0 0 0 0 4294901760 4294901760 4278255360 0 0 0 4278255360 4294901760 4294901760 0 0 0 0 0 0 4294901760 4294901760 0 0 4278255360 0 0 4278255360 0 4294901760 4294901760 0 0 0 0 0 4294901760 0 0 0 0 4278255360 4278255360 0 0 0 4294901760 0 0 0 0 4294901760 0 0 0 0 0 0 4278255360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsZoomIn ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 111058606 0 0 0 0 0 0 0 0 0 4290035396 4290627532 4290759118 4290758862 4290692811 0 0 60069029 0 0 0 0 0 0 0 4290364361 4291548375 4292008924 4291614425 4291088082 4291285461 4274573780 0 0 0 0 0 0 0 0 4289837761 4291417047 4292863975 4293455341 4292008669 4292272096 4291943388 4292206303 4291087052 0 0 0 0 0 0 0 4290495946 4291877339 4293389805 4293718257 4292271840 4292929512 4292732389 4292798183 4292535010 0 0 0 0 0 0 0 4290693325 4291219411 4278239232 4278239232 4278239232 4293389805 4293324012 4293455341 4293324012 0 0 0 0 0 0 0 4290495947 4291153619 4278239232 4278255360 4278239232 4293455341 4293784049 4293981428 4293323498 0 0 0 0 0 0 0 4290035139 4290956496 4278239232 4278255360 4278239232 4293652720 4294178550 4294507001 4291217609 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278255360 4278239232 4278239232 4278239232 4278239232 4287401108 0 0 0 0 0 0 4278239232 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278239232 4287137944 3147402381 2025616414 548826394 0 0 0 4278239232 4278239232 4278239232 4278239232 4278255360 4278239232 4278239232 4278239232 4278239232 2827517313 4222451274 4191653932 2948428054 396517144 0 0 0 0 0 4278239232 4278255360 4278239232 0 0 0 1721128729 4090603098 4294299771 4292844083 2947508246 545738009 0 0 0 0 4278239232 4278255360 4278239232 0 0 0 328028185 2376298028 4292523629 4294299770 4191719723 2795526675 477643288 0 0 0 4278239232 4278239232 4278239232 0 0 0 0 259868699 2375311917 4107448685 4294167671 4225077293 3112652056 0 0 0 0 0 0 0 0 0 0 0 325136919 2273661991 4174492014 4292324963 4286667841 0 0 0 0 0 0 0 0 0 0 0 0 291450903 3078245671 4286669388 3579926891) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/actions' stamp: 'apl 3/20/2007 11:51'! form16x16ActionsZoomOut ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 111058606 0 0 0 0 0 0 0 0 0 4290035396 4290627532 4290759118 4290758862 4290692811 0 0 60069029 0 0 0 0 0 0 0 4290364361 4291548375 4292008924 4291614425 4291088082 4291285461 4274573780 0 0 0 0 0 0 0 0 4289837761 4291417047 4292863975 4293455341 4292008669 4292272096 4291943388 4292206303 4291087052 0 0 0 0 0 0 0 4290495946 4291877339 4293389805 4293718257 4292271840 4292929512 4292732389 4292798183 4292535010 0 0 0 0 0 0 0 4290693325 4291219411 4293389805 4293389805 4293389805 4293389805 4293324012 4293455341 4293324012 0 0 0 0 0 0 0 4290495947 4291153619 4293389805 4293389805 4293389805 4293389805 4293784049 4293981428 4293323498 0 0 0 0 0 0 0 4290035139 4290956496 4293389805 4293389805 4293389805 4293389805 4294178550 4294507001 4291217609 0 0 0 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4287401108 0 0 0 0 0 0 4278239232 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278239232 4287137944 3147402381 2025616414 548826394 0 0 0 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 4278239232 2827517313 4222451274 4191653932 2948428054 396517144 0 0 0 0 0 0 0 0 0 0 0 1721128729 4090603098 4294299771 4292844083 2947508246 545738009 0 0 0 0 0 0 0 0 0 0 328028185 2376298028 4292523629 4294299770 4191719723 2795526675 477643288 0 0 0 0 0 0 0 0 0 0 259868699 2375311917 4107448685 4294167671 4225077293 3112652056 0 0 0 0 0 0 0 0 0 0 0 325136919 2273661991 4174492014 4292324963 4286667841 0 0 0 0 0 0 0 0 0 0 0 0 291450903 3078245671 4286669388 3579926891) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsBrowser ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278946315 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278946315 4278223872 4290838208 4294901502 4280457506 4290838208 4290838208 4282691140 4294901502 4289457835 4294901502 4290838208 4281245742 4290838208 4294901502 4290838208 4278946315 4278223872 4290838208 4290838208 4280851496 4290838208 4294901502 4283413839 4294901502 4290838208 4290838208 4290838208 4281705525 4290838208 4290838208 4290838208 4278946315 4278223872 4290838208 4290838208 4278946315 4290838208 4290838208 4279603477 4290838208 4290838208 4290838208 4290838208 4279143438 4290838208 4290838208 4290838208 4278946315 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4281048619 4278946315 4278223872 4290838208 4289457835 4290838208 4290838208 4290838208 4286041463 4290838208 4290838208 4286041463 4290838208 4290838208 4294901502 4290838208 4290838208 4278946315 4278223872 4278223872 4283479376 4279406354 4282625347 4280260383 4281837111 4281048619 4281048619 4281837111 4280260383 4282625347 4279406354 4283479376 4278223872 4278946315 4278223872 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4278946315 4278223872 4290838208 4278255358 4290838208 4290838208 4290838208 4278255358 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4290838208 4290838208 4278946315 4278223872 4290838208 4289457835 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4290838208 4290838208 4278946315 4278223872 4290838208 4289457835 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4290838208 4290838208 4278946315 4278223872 4290838208 4289457835 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4294901502 4289457835 4290838208 4278946315 4278223872 4290838208 4290838208 4290838208 4290838208 4290838208 4289457835 4289457835 4289457835 4289457835 4289457835 4289457835 4289457835 4287946644 4290838208 4278946315 4278223872 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4290838208 4278946315 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278223872 4278946315) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsChangeSorter ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4288669414 4289457902 4289457902 4289457902 4289457902 4282691246 4278224004 4283479477 4289457902 4289457902 4289457902 4289457902 4289457902 4288669414 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4283413941 4278224004 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4283413941 4278224004 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4282231466 4282559917 4282559917 4282559917 4282559917 4279932052 4278224004 4280260503 4282559917 4282559917 4282559917 4282559917 4282559917 4282231466 4278224004 4278224004 4285515976 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4285515976 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4285515976 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4285515976 4278224004 4278224004 4282231466 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282231466 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4289457902 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4289457902 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsDualChangeSorter ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4288669414 4289457902 4280457625 4286435793 4289457902 4289457902 4283479477 4283479477 4289457902 4285713098 4281245856 4289457902 4289457902 4288669414 4278224004 4278224004 4290311926 4291231743 4280851612 4287749854 4291231743 4291231743 4284267965 4284267965 4291231743 4286895830 4281705636 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4280851612 4287749854 4291231743 4291231743 4284267965 4284267965 4291231743 4286895830 4281705636 4291231743 4291231743 4290311926 4278224004 4278224004 4282231466 4282559917 4279078028 4281377442 4282559917 4282559917 4280260503 4280260503 4282559917 4281114527 4279406479 4282559917 4282559917 4282231466 4278224004 4278224004 4285515976 4286041549 4286041549 4286041549 4286041549 4286041549 4281837222 4281837222 4286041549 4286041549 4286041549 4286041549 4286041549 4285515976 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4284267965 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4284267965 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4285515976 4286041549 4286041549 4286041549 4286041549 4286041549 4281837222 4281837222 4286041549 4286041549 4286041549 4286041549 4286041549 4285515976 4278224004 4278224004 4282231466 4282559917 4282559917 4282559917 4282559917 4282559917 4280260503 4280260503 4282559917 4282559917 4282559917 4282559917 4282559917 4282231466 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4284267965 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4284267965 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4284267965 4284267965 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4289457902 4290311926 4290311926 4290311926 4290311926 4290311926 4283873721 4283873721 4290311926 4290311926 4290311926 4290311926 4290311926 4289457902 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsFileList ^ (Form extent: 16@16 depth: 32 fromArray: #( 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4293831662 4294359286 4294359286 4294359286 4289346986 4291325640 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4293831662 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4289544877 4291655629 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4289544877 4291655629 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4288819618 4288951716 4288951716 4288951716 4287500942 4288094359 4288951716 4288951716 4288951716 4288951716 4288951716 4288951716 4288951716 4288819618 4286840964 4286840964 4291853264 4290056885 4289724592 4289724592 4291385545 4290721215 4289724592 4289724592 4290721215 4291385545 4289724592 4289724592 4290056885 4291853264 4286840964 4286840964 4289809073 4288744353 4290642110 4289200296 4289541549 4289142951 4288544926 4288544926 4289142951 4289541549 4288544926 4288544926 4288744353 4289809073 4286840964 4286840964 4290798272 4291127749 4292700637 4291652045 4291127749 4291127749 4291127749 4291127749 4291127749 4291127749 4291127749 4291127749 4291127749 4290798272 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4294359286 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294952703 4294359286 4286840964 4286840964 4293831662 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4294359286 4293831662 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964 4286840964) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsLint ^ (Form extent: 16@16 depth: 32 fromArray: #( 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4289586349 4290179510 4290179510 4287273354 4288858530 4290179510 4290179510 4290179510 4288594334 4287537550 4290179510 4290179510 4290179510 4289586349 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4287537806 4287998613 4287998613 4286942085 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4288594334 4289121446 4289121446 4287272074 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4289121446 4287998613 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4289122726 4289715631 4289715631 4287404428 4288659103 4289715631 4289715631 4289715631 4288460700 4287602575 4289715631 4289715631 4289715631 4289122726 4281413937 4281413937 4287074951 4287469965 4287469965 4286809731 4287139976 4287469965 4287469965 4287469965 4287469965 4287469965 4287469965 4287469965 4287469965 4287074951 4281413937 4281413937 4290179510 4290838464 4290838464 4287734417 4289385642 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290838464 4290179510 4281413937 4281413937 4289586349 4290179510 4290179510 4287273354 4288858530 4290179510 4290179510 4290179510 4290179510 4290179510 4290179510 4290179510 4290179510 4289586349 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937 4281413937) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsMessageNames ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278221568 4278247936 4278215936 4278240000 4278252032 4278252032 4278236160 4278215168 4278213120 4278232320 4278244096 4278222592 4278226432 4278248960 4278206976 4278206976 4278247936 4278254592 4278249984 4278253568 4278255360 4278255360 4278252800 4278230272 4278224640 4278252288 4278254080 4278251008 4278251520 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278232576 4278226176 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278232576 4278226176 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278232576 4278226176 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278243584 4278228736 4278242304 4278246400 4278232832 4278226176 4278236928 4278227968 4278214656 4278232832 4278246400 4278242304 4278228736 4278243584 4278206976 4278206976 4278238464 4278226944 4278223104 4278222592 4278224128 4278214144 4278215168 4278215168 4278214144 4278230016 4278235904 4278223104 4278224640 4278221568 4278206976 4278206976 4278244608 4278247424 4278233088 4278229504 4278241280 4278236672 4278229504 4278229504 4278236672 4278247424 4278242560 4278233088 4278244864 4278227968 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278252032 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278255360 4278252032 4278206976 4278206976 4278248960 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278252032 4278248960 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976 4278206976) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsPackagePanel ^ (Form extent: 16@16 depth: 32 fromArray: #( 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4279834913 4279045393 4288453839 4282203472 4279045393 4286085279 4284506240 4279045393 4283716720 4286874799 4279045393 4281413952 4290822399 4290822399 4290822399 4290822399 4289177567 4289111773 4290427640 4289572326 4289111773 4290098673 4289901292 4289111773 4289769706 4290230259 4289111773 4289440739 4290822399 4290822399 4290822399 4290822399 4290822399 4293651455 4294111999 4294111999 4294111999 4294111999 4294111999 4294111999 4294111999 4294111999 4294111999 4294111999 4293651455 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4294375167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294375167 4290822399 4290822399 4290822399 4290822399 4293848831 4294375167 4294375167 4294375167 4294375167 4294375167 4294375167 4294375167 4294375167 4294375167 4294375167 4293848831 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399 4290822399) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsRecentsSubmissions ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4288669414 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4289457902 4288669414 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4282231466 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282559917 4282231466 4278224004 4278224004 4285515976 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4286041549 4285515976 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4290311926 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4291231743 4290311926 4278224004 4278224004 4289457902 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4290311926 4289457902 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004 4278224004) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsSmacc ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278198783 4278194687 4287614975 4281356543 4278194687 4285243391 4283662591 4278194687 4282872063 4286033919 4278194687 4280566015 4288405503 4278198783 4278255615 4278255615 4288405503 4289125887 4290443519 4289586943 4289125887 4290114047 4289916159 4289125887 4289784575 4290245631 4289125887 4289455103 4290575103 4288405503 4278255615 4278255615 4280500288 4280693555 4280693555 4286878097 4289115059 4289115059 4289115059 4289115059 4289778129 4290242021 4289115059 4289446594 4290838527 4289986559 4278255615 4278255615 4286824383 4287478715 4287478715 4289452505 4290242021 4290242021 4290242021 4290242021 4290441199 4290639606 4290242021 4290308842 4290838527 4289986559 4278255615 4278255615 4282146912 4282406229 4282406229 4287472290 4289380287 4289380287 4289380287 4289380287 4289911000 4290308585 4289380287 4289645515 4290838527 4289986559 4278255615 4278255615 4285243295 4285766041 4285766041 4288858312 4289976793 4289976793 4289976793 4289976793 4290308328 4290507506 4289976793 4290109664 4290838527 4289986559 4278255615 4278255615 4289986559 4288857284 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288857284 4289986559 4278255615 4278255615 4289986559 4287140241 4288196527 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288592827 4288196527 4287140241 4289986559 4278255615 4278255615 4289986559 4287140241 4289979877 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4289979877 4287140241 4289986559 4278255615 4278255615 4289986559 4287140241 4289979877 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4289979877 4287140241 4289986559 4278255615 4278255615 4289986559 4287140241 4289979877 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4289979877 4287140241 4289986559 4278255615 4278255615 4289986559 4287140241 4289979877 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4290838527 4289979877 4287140241 4289986559 4278255615 4278255615 4289986559 4287140241 4289517784 4290244334 4290244334 4290244334 4290244334 4290244334 4290244334 4290244334 4290244334 4289517784 4287140241 4289986559 4278255615 4278255615 4289200127 4286552216 4286023816 4286023816 4286023816 4286023816 4286023816 4286023816 4286023816 4286023816 4286023816 4286023816 4286552216 4289200127 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615 4278255615) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsSqueak ^ (Form extent: 16@16 depth: 32 fromArray: #( 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4281348144 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4281348144 15132646 15132646 15132646 15132646 4281348144 4281348144 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4281348144 4281348144 15132646 15132646 15132646 4286611584 4283979864 15132646 4286611584 15132646 15132646 15132646 15132646 15132646 15132646 4286611584 15132646 4283979864 4286611584 15132646 15132646 15132646 4283979864 15132646 15132646 4286611584 15132646 15132646 15132646 15132646 4286611584 15132646 15132646 4283979864 15132646 15132646 15132646 15132646 4283979864 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4283979864 15132646 15132646 15132646 15132646 4283979864 15132646 15132646 4291875024 4283979864 15132646 15132646 4283979864 4292598747 15132646 15132646 4283979864 15132646 15132646 15132646 15132646 4281348144 15132646 15132646 4283979864 4281348144 4293322470 15132646 4281348144 4283979864 15132646 15132646 4283979864 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4291085508 4283979864 15132646 15132646 4283979864 4288782753 15132646 15132646 15132646 15132646 15132646 15132646 4292401368 4288716960 4288716960 4288716960 4288716960 15132646 4290295992 4288980132 15132646 4288716960 4288716960 4288716960 4288716960 15132646 15132646 4292927712 15132646 4292269782 4292203989 4292269782 4292269782 15132646 4281348144 4281348144 4291151301 4292401368 4292401368 4292401368 4292467161 4293454056 15132646 4293585642 4288716960 15132646 4288716960 4288716960 4288716960 15132646 4293388263 4292730333 15132646 4288716960 4288716960 4288716960 15132646 4288716960 4293388263 15132646 15132646 4288716960 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4288716960 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsTranscript ^ (Form extent: 16@16 depth: 32 fromArray: #( 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4294302122 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294500278 4294302122 4292054284 4292054284 4283780933 4283780933 4284175691 4281544490 4281544490 4289503373 4287727479 4287727479 4289503373 4285951585 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4283780933 4283780933 4291279267 4290424216 4290424216 4293055161 4292463282 4292463282 4293055161 4291871402 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4283780933 4283780933 4286017121 4291936939 4287464307 4283780933 4289700495 4289700495 4288188028 4294896848 4290424216 4286017121 4294896848 4294698435 4292054284 4292054284 4294698435 4283780933 4289503373 4293055162 4290423960 4288187773 4291739561 4291739561 4290818974 4294896848 4293055162 4289503373 4294896848 4294698435 4292054284 4292054284 4283780933 4294896848 4287727479 4292463282 4294896848 4289503373 4290687388 4290687388 4290424216 4290424216 4290424216 4290424216 4294896848 4294698435 4292054284 4292054284 4283780933 4283780933 4287727479 4292463282 4294896848 4289503373 4290687388 4290687388 4290424216 4290424216 4290424216 4290424216 4294896848 4294698435 4292054284 4292054284 4294698435 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4290424216 4294896848 4294896848 4294698435 4292054284 4292054284 4294698435 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4294698435 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4294698435 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294896848 4294698435 4292054284 4292054284 4294500278 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294698435 4294500278 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284 4292054284) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsWeb ^ (Form extent: 16@16 depth: 32 fromArray: #( 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 4291480266 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291480266 15132646 15132646 4291282887 4283979864 4293322470 15132646 15132646 15132646 4283979864 4283979864 15132646 15132646 15132646 15132646 4283979864 4291282887 15132646 15132646 4291282887 15132646 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 4283979864 15132646 15132646 4283979864 4283979864 15132646 15132646 4283979864 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 15132646 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 15132646 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 15132646 4283979864 4294967295 4287927444 4287927444 4294967295 4283979864 15132646 4283979864 15132646 4291282887 15132646 15132646 4291282887 4283979864 4283979864 4283979864 4283979864 4287927444 4283979864 4283979864 4287927444 4283979864 4283979864 4283979864 4283979864 4291282887 15132646 15132646 4291282887 4283979864 4283979864 4283979864 4283979864 4287927444 4283979864 4283979864 4287927444 4283979864 4283979864 4283979864 4283979864 4291282887 15132646 15132646 4291282887 15132646 4283979864 15132646 4283979864 4294967295 4287927444 4287927444 4294967295 4283979864 15132646 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 15132646 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 15132646 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 4283979864 15132646 15132646 4283979864 4283979864 15132646 15132646 4283979864 4283979864 15132646 4291282887 15132646 15132646 4291282887 15132646 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 15132646 4291282887 15132646 15132646 4291282887 4283979864 15132646 15132646 15132646 15132646 4283979864 4283979864 15132646 15132646 15132646 15132646 4283979864 4291282887 15132646 15132646 4291480266 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291282887 4291480266 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646 15132646) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/apps' stamp: 'apl 9/20/2007 13:31'! form16x16AppsWorkspace ^ (Form extent: 16@16 depth: 32 fromArray: #( 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190081 4278190081 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190081 4278190081 4293848814 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293848814 4278190081 4278190081 4281396784 4281597747 4281597747 4281597747 4281597747 4281597747 4281597747 4281597747 4281597747 4281597747 4281597747 4284284764 4294967295 4293848814 4278190081 4278190081 4278206209 4278207489 4278245632 4278220289 4278239232 4278226689 4278207489 4278207489 4278226689 4278239232 4278220289 4281597747 4294967295 4293848814 4278190081 4278190081 4278230528 4278233600 4278251008 4278239232 4278247936 4278242304 4278233600 4278233600 4278242304 4278247936 4278239232 4281597747 4294967295 4293848814 4278190081 4278190081 4287622799 4288282521 4288282521 4280913705 4284927078 4282229566 4278216193 4282887496 4284268892 4278216193 4278216193 4281566260 4294967295 4293848814 4278190081 4278190081 4278255360 4285953654 4278255360 4278255360 4278255360 4290230199 4287137928 4278255360 4278255360 4287137928 4287137928 4288651167 4294967295 4293848814 4278190081 4278190081 4278255360 4278255360 4278255360 4289177511 4287137928 4287137928 4291282887 4291282887 4287137928 4287137928 4287137928 4288651167 4294967295 4293848814 4278190081 4278190081 4285953654 4285953654 4285953654 4287598479 4284900966 4284900966 4290230199 4290230199 4284900966 4284900966 4284900966 4286874756 4294967295 4293848814 4278190081 4278190081 4293848814 4285953654 4294967295 4290822336 4293059298 4291611852 4289374890 4291940817 4292730333 4291217094 4293454056 4290493371 4294967295 4293848814 4278190081 4278190081 4285953654 4294967295 4285953654 4285953654 4290822337 4287598479 4282664005 4288387995 4290032820 4286743171 4291677645 4285098346 4294967295 4293848814 4278190081 4278190081 4285953654 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293848814 4278190081 4278190081 4293848814 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293848814 4278190081 4278190081 4292796126 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4293848814 4292796126 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/mimetypes' stamp: 'apl 9/20/2007 13:31'! form16x16MimetypesClass ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294943394 4294901760 4294901760 4294943394 0 0 0 0 0 0 0 0 0 0 4294943394 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4294943394 0 0 0 0 0 0 0 0 4294901760 4294901760 4294908185 4294919750 4294919750 4294908185 4294901760 4294901760 0 0 0 0 0 0 0 4294943394 4294901760 4294908185 4294932086 4294967295 4294967295 4294967295 4294901760 4294901760 4294943394 0 0 0 0 0 0 4294901760 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4294919493 0 0 0 0 0 0 4294901760 4294901760 4294919750 4294967295 4294901760 4294901760 4294901760 4294901760 4294901760 4294919493 0 0 0 0 0 0 4294943394 4294901760 4294908185 4294931829 4294967295 4294967295 4294967295 4294901760 4294901760 4294943394 0 0 0 0 0 0 4292856008 4294901760 4294901760 4294908185 4294919493 4294919493 4294908185 4294901760 4294901760 0 0 0 0 0 0 0 0 4294943394 4294901760 4294901760 4294901760 4294901760 4294901760 4294901760 4293366675 0 0 0 0 0 0 0 0 0 4292856008 4294943394 4294901760 4294901760 4294943394 4292856008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/mimetypes' stamp: 'apl 9/20/2007 13:31'! form16x16MimetypesGroup ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4287435776 4287435776 4287435776 4287435776 4287435776 4287435776 4287435776 4287435776 4287435776 4287435776 0 0 0 0 0 0 4287435776 4287435776 4287435776 4287435776 4286840832 4286840832 4286840832 4286840832 4286840832 4288031788 0 0 0 0 0 0 4287435776 4288426768 4288096512 4290078208 4290078208 4290078208 4290078208 4290078208 4287501312 4288031788 0 0 0 0 0 0 4287435776 4288426768 4290078208 4294967040 4294967135 4294967135 4294967040 4294967040 4288426752 4288031788 0 0 0 0 0 0 4287435776 4288426768 4290078208 4294967135 4294967295 4294967295 4294967295 4294967295 4288426752 4288031788 0 0 0 0 0 0 4287435776 4288426768 4290078208 4294967135 4294967295 4294967295 4294967295 4294967295 4288426792 4288031788 0 0 0 0 0 0 4287435776 4288426768 4290078208 4294967135 4294967295 4294967295 4294967295 4294967295 4288426792 4288031788 0 0 0 0 0 0 4287435776 4287435776 4290078208 4294967135 4294967295 4294967295 4294967295 4294967295 4288426768 4288031788 0 0 0 0 0 0 4287435776 4287435776 4287435776 4288426752 4288426752 4288426752 4288426752 4288426752 4287171072 4288031788 0 0 0 0 0 0 4287435776 4288426768 4288031788 4288031788 4288031788 4288031788 4288031788 4288031788 4288031788 4288958287 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/mimetypes' stamp: 'apl 9/20/2007 13:31'! form16x16MimetypesPackageBlue ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 0 0 0 0 0 4284308830 4285434763 4285107083 4285107083 4284052854 4278190081 4284579968 4285107083 4285107083 4283525995 4278190081 0 0 0 0 4279374355 4293388263 4290176999 4289652711 4289652711 4287873987 4278190081 4288730581 4290443255 4290247932 4287020991 4278190081 0 0 0 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4286951600 4284998113 4278227860 4278190081 0 0 4284308830 4287996578 4286227106 4286227106 4286227106 4281286207 4281286207 4286227106 4286227106 4286227106 4283855218 4280711032 4278219892 4278190081 0 4282731854 4288257695 4293918719 4291559423 4291559423 4288993239 4284050541 4285169279 4291559423 4291559423 4288738291 4281355083 4278205243 4278215266 4278190081 4278190081 4287874244 4293001215 4294967295 4294967295 4294967295 4280756008 4288519581 4294967295 4294967295 4294967295 4279551172 4278205244 4278205243 4278215266 4278190081 4278190081 4287874244 4286506726 4282765777 4282765777 4282765777 4278919201 4280975489 4282765777 4282765777 4282765777 4278556310 4278201645 4278205243 4278215266 4278190081 4278190081 4287874244 4284014045 4278239424 4278239424 4278239424 4278197534 4278220406 4278239424 4278239424 4278239424 4278224261 4278200104 4278205243 4278215266 4278190081 4278190081 4287874244 4284014045 4278239424 4278239424 4278239424 4278197534 4278220406 4278239424 4278239424 4278239424 4278224261 4278200104 4278205243 4278215266 4278190081 4278190081 4287874244 4284014045 4278239424 4278239424 4278239424 4278197534 4278220406 4278239424 4278239424 4278239424 4278224261 4278200104 4278205243 4278215266 4278190081 4278190081 4287874244 4284014045 4278239424 4278239424 4278239424 4278197534 4278220406 4278239424 4278239424 4278239424 4278224261 4278200104 4278199590 4279456081 4283519314 4278190081 4287874244 4284014045 4278239424 4278239424 4278239424 4278197534 4278220406 4278239424 4278239424 4278239424 4278224261 4278200104 4278190081 4281545524 0 4278190081 4287874244 4284005821 4278224261 4278224261 4278224261 4278195221 4278211154 4278224261 4278224261 4278224261 4278222976 4278200104 4284308830 0 0 4278190081 4283460203 4281361766 4278207814 4278207814 4278207814 4278192908 4278200875 4278207814 4278207814 4278207814 4278207814 4282800988 0 0 0 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 4278190081 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /16x16/mimetypes' stamp: 'apl 9/20/2007 13:31'! form16x16MimetypesSuperClass ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278239232 0 0 0 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278239232 0 0 0 0 0 0 0 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278222848 4294967295 4294967295 4294967295 4278222848 4278222848 4278239232 0 0 0 0 0 0 4278222848 4278222848 4278222848 4294967295 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 4278222848 4278222848 4278222848 4294967295 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278222848 4294967295 4294967295 4294967295 4278222848 4278222848 4278239232 0 0 0 0 0 0 0 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 0 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278222848 4278222848 4278222848 4278222848 4278239232 0 0 0 0 0 0 0 0 0 0 4278239232 4278222848 4278222848 4278239232 4290838464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsBack ^ (Form extent: 24@24 depth: 32 fromArray: #( 0 0 0 0 0 0 0 134217728 452984832 687865856 855638016 922746880 922746880 855638016 687865856 452984832 134217728 0 0 0 0 0 0 0 0 0 0 0 0 134217728 603979776 989855744 1040187392 1006632960 1023410176 956301312 939524096 939524096 939524096 956696070 1007027718 621414922 134415107 0 0 0 0 0 0 0 0 0 369098752 1023410176 1090519040 939524096 1195656260 1636337800 1687129999 1534950781 1416654960 1281187165 1077360439 1009001508 1076044579 1143285029 1193156126 405021732 0 0 0 0 0 0 0 452984832 1107296256 939524096 1263620433 1636535179 2058334127 1957078694 1586137738 1416918132 4279713625 1026831412 1061043774 1061175360 1195129916 1128284224 1228486969 1278292273 523975483 0 0 0 0 0 369098752 1090519040 989855744 1484158582 1906681253 2007739307 1822334622 1603112333 1230921310 4278922576 4279055194 1162430793 1113020247 1130060635 1130126428 1147166816 1130126428 1263357261 1379942464 458248272 0 0 0 134217728 1040187392 939524096 1484158582 2125837749 2109060533 1957539245 1535477125 1144403510 4278922576 4280829033 4279055194 1147561574 1164733548 1181839729 1198814324 1198880117 1198814324 1181839729 1181379178 1347506513 173759323 0 0 603979776 1023410176 1263620433 1923524262 2125771956 2126035128 1484750719 1177957942 4278922576 4285436599 4282867848 4279055194 1215986298 1233224065 1250264453 1250396039 1250396039 1250396039 1250264453 1233224065 1215986298 779252338 0 134217728 1023410176 973078528 1636535179 2108928947 1923721641 1484750719 1211380788 4278922576 4286552250 4292799735 4281096067 4279055194 1284345229 1284739987 1301780375 1318689177 1318754970 1318689177 1301780375 1284739987 1284345229 1250264453 192510329 452984832 1073741824 1195656260 1957144487 1754896793 1535477125 1194669365 4278922576 4286617529 4294769660 4289251037 4279263379 4279055194 4278452996 4281618285 4280434783 4278922576 4278922576 4278922576 4278190599 1336058530 1335663772 1301648789 646613642 687865856 1056964608 1602651782 1906549667 1603112333 1161049140 4278922576 4286288820 4294769660 4292931059 4284003289 4280654538 4282289599 4288137184 4293128696 4294769148 4294769148 4291553012 4281027440 4278455065 1404154289 1386916522 1352967332 983079064 855638016 1023410176 1703973008 1586137738 1230921310 4278922576 4286750913 4294769148 4292602610 4285580255 4279736262 4279208128 4281573324 4288007912 4291028210 4291487987 4289190382 4284721360 4280572809 4278456095 1455275453 1438103479 1404022703 1235592613 922746880 973078528 1568768385 1416918132 4278922576 4285763250 4292668407 4290500842 4286104289 4279869644 4279208128 4279075262 4279208128 4281441486 4286693082 4288203235 4286233053 4282356418 4279194498 4278521376 1523042247 1489158850 1455078074 1387442866 922746880 939524096 1416654960 1179668560 4278388498 4279260807 4279734976 4280399322 4279609818 4279077572 4279075262 4279075262 4279206332 4279337912 4279270575 4279336624 4279336882 4279468726 4279259781 4278456095 1574031825 1523305419 1489224643 1421523642 855638016 939524096 1281187165 1026831412 1179142216 4278455065 4279260807 4279209158 4282106848 4279609818 4279669967 4279541457 4280725971 4282762206 4282566109 4282762206 4280332243 4279608788 4279259781 4278456095 1608112601 1574163411 1523305419 1371652545 687865856 939524096 1077360439 1061043774 1113020247 1164733548 4278455323 4279260807 4280066251 4282895592 4279545304 4279337392 4279337392 4279458444 4279458190 4279458190 4279326858 4279260545 4279122019 4278389270 1675682016 1608112601 1574031825 1137100486 452984832 956696070 1009001508 1061175360 1130060635 1181839729 1250264453 4278455579 4279260807 4280062401 4282106848 4279263889 4279055194 4278588201 4278522148 4278522148 4278719527 4279180334 4278652960 4278321414 1726408422 1658773214 1591138006 784910536 134217728 1007027718 1009133094 1144995647 1130126428 1198814324 1250396039 1318689177 4278455323 4279260807 4279266465 4279259261 4279055194 1675747809 1760160233 1878061296 2046228214 2130245880 2063071223 1878061296 1760160233 1675747809 1608112601 265014219 0 621414922 1260396576 1278621238 1230394966 1198880117 1250396039 1318754970 1386916522 4278455323 4279260807 4279257203 4279055194 1692656611 1793846251 2012476403 2063071223 2113863422 2113468664 1995699187 1793846251 1692656611 1071175896 0 0 134415107 1076044579 1395601199 1246777424 1198814324 1250396039 1318689177 1370073513 1438103479 4278388500 4279055194 4279055194 1675747809 1760160233 1878061296 1979119350 2147023096 2029450998 1894838512 1760160233 1659036386 265606356 0 0 0 405021732 1295003696 1313425737 1298359139 1250264453 1301780375 1353098918 1421128884 1472250048 4278388498 4279055194 1658773214 1726408422 1793912044 1894838512 2012476403 1928458737 1793912044 1726408422 719117532 0 0 0 0 0 523975483 1463433786 1281187165 1233224065 1284739987 1336058530 1404154289 1455275453 1523042247 4278322703 1608112601 1675682016 1726408422 1760160233 1793846251 1760160233 1726408422 870244062 0 0 0 0 0 0 0 491407946 1380863566 1365731175 1284345229 1335663772 1386916522 1438103479 1489158850 1523305419 1574163411 1608112601 1658773214 1675747809 1692656611 1659036386 719117532 0 0 0 0 0 0 0 0 0 173759323 779252338 1250264453 1301648789 1352967332 1404022703 1455078074 1489224643 1523305419 1574031825 1591138006 1608112601 1071175896 265606356 0 0 0 0 0 0 0 0 0 0 0 0 192510329 646613642 983079064 1235592613 1387442866 1421523642 1371652545 1137100486 784910536 265014219 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsBookmarkAdd ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 0 0 0 16777216 4280953386 218103808 134217728 33554432 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33554432 4280953386 4280821800 520093696 184549376 33554432 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50331648 4280558628 4291282887 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67108864 4280361249 4291282887 4291282887 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 0 0 0 0 16777216 33554432 50331648 50331648 117440512 4280492835 4290822336 4289835441 4291282887 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 0 0 0 4282861383 4282861383 4282927176 4282861383 4283782485 4281019179 4290888129 4289638062 4289835441 4291282887 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 0 0 218103808 4278321666 4289177511 4290822336 4290493371 4290559164 4290756543 4289835441 4289177511 4289835441 4291282887 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 0 134217728 520093696 4278255873 4285822068 4288059030 4289177511 4289177511 4289309097 4288716960 4286874756 4289638062 4291151301 4278190080 570425344 184549376 33554432 0 0 0 0 0 0 33554432 184549376 570425344 4278190080 4285361517 4287401100 4287993237 4288387995 4291019715 4290361785 4289967027 4289440683 4291019715 4278190080 587202560 201326592 67108864 16777216 0 0 0 0 0 33554432 184549376 570425344 4278190080 4285229931 4287137928 4285822068 4285098345 4284177243 4285098345 4286414205 4289177511 4290756543 4278190080 4278190080 385875968 150994944 33554432 0 0 0 0 0 33554432 184549376 570425344 4278190080 4284966759 4286874756 4288914339 4290032820 4290624957 4289967027 4289506476 4288980132 4278190080 4294967090 4278190080 553648128 167772160 67108864 33554432 16777216 0 0 0 33554432 184549376 570425344 4278190080 4284769380 4286545791 4285361517 4284769380 4278190080 4278190080 4286085240 4278190080 4294967142 4278190080 1040187392 4278190080 4278190080 335544320 150994944 0 0 0 0 33554432 184549376 570425344 4278190080 4284637794 4286348412 4278190080 4294967066 4291084544 4278190080 4288848153 4294967192 4288848153 4278190080 4291084544 4294967066 4278190080 520093696 0 0 0 0 0 33554432 184549376 570425344 4278190080 4284440415 4286151033 4278190080 4294967133 4294967180 4294967222 4294967244 4294967222 4294967180 4294967133 4278190080 1325400064 771751936 0 0 0 0 0 0 33554432 184549376 570425344 4278190080 4284243036 4285887861 4278190080 4288848153 4294967244 4294967295 4294967244 4288848153 4278190080 1526726656 1107296256 536870912 0 0 0 0 0 0 0 33554432 184549376 570425344 4278190080 4283979864 4278190080 4288848153 4294967244 4294967295 4294967244 4288848153 4278190080 1358954496 721420288 218103808 0 0 0 0 0 0 0 0 33554432 184549376 587202560 4278190080 4294967133 4294967180 4294967222 4294967244 4294967222 4294967180 4294967133 4278190080 721420288 218103808 0 0 0 0 0 0 0 0 0 33554432 4278190080 4294967066 4291084544 4278190080 4288848153 4294967192 4288848153 4278190080 4291084544 4294967066 4278190080 536870912 0 0 0 0 0 0 0 0 0 33554432 251658240 4278190080 4278190080 1509949440 4278190080 4294967142 4278190080 1593835520 4278190080 4278190080 1325400064 771751936 0 0 0 0 0 0 0 0 0 16777216 134217728 520093696 956301312 1040187392 4278190080 4294967090 4278190080 1358954496 1006632960 1040187392 956301312 520093696 0 0 0 0 0 0 0 0 0 0 33554432 150994944 335544320 385875968 503316480 4278190080 1325400064 1023410176 503316480 385875968 335544320 150994944 0 0 0 0 0 0 0 0 0 0 0 16777216 33554432 50331648 167772160 520093696 771751936 520093696 167772160 67108864 33554432 16777216) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsDeletecell ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 12566463 0 0 12566463 12566463 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 12566463 12566463 0 0 12566463 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4278190080 62898111 0 0 12566463 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4278190080 58687359 0 0 79675327 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4294901760 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4294901760 4290772992 4290772992 8355711 0 0 331333567 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4294901760 4294901760 4294967295 4294967295 4294901760 4290772992 4290772992 4290772992 4290772992 4286611584 0 0 364887999 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4290772992 4290772992 4290772992 4294901760 4290772992 4290772992 4290772992 4290772992 4290772992 4286611584 4286611584 0 0 113229759 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 4290772992 4286611584 4286611584 4286611584 8355711 0 0 12566463 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4286611584 4290772992 4290772992 4290772992 4290772992 4286611584 4286611584 4294967295 4278190080 8355711 0 0 62898111 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4290772992 4294901760 4286611584 4294967295 4294967295 4278190080 8355711 0 0 46120895 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4290772992 4290772992 4290772992 4294901760 4294967295 4294967295 4278190080 8355711 0 0 16777215 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4290772992 4286611584 4286611584 4290772992 4290772992 4294901760 4294967295 4278190080 8355711 0 0 12566463 4278190080 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294901760 4290772992 4286611584 4286611584 4294967295 4294967295 4290772992 4290772992 4286611584 4278190080 8355711 0 0 12566463 12566463 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4294901760 4290772992 4286611584 4286611584 4278190080 4278190080 4278190080 4278190080 4290772992 4290772992 8355711 163561407 0 0 12566463 12566463 12566463 12566463 12566463 12566463 0 12566463 4294901760 4290772992 4286611584 8355711 8355711 8355711 0 16776960 0 4290772992 4286611584 12566463 0 0 12566463 12566463 12566463 12566463 12566463 12566463 0 12566463 4294901760 4286611584 4286611584 12566463 12566463 12566463 12566463 0 0 12566463 4286611584 12566463 0 0 12566463 264224703 12566463 12566463 12566463 12566463 8355711 0 4294901760 4286611584 12566463 12566463 12566463 12566463 12566463 12566463 0 12566463 12566463 12566463 0 0 0 0 0 0 0 0 0 0 0 4286611584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsExec ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278979594 4278979594 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4280558625 4292665052 4292664796 4280558369 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4279703317 0 0 0 4281940023 4294177782 4294112248 4281874230 0 0 0 4279834904 4278190080 0 0 0 0 0 0 0 4278190080 4290032820 4292861671 4278190080 4282005553 4282005553 4290099126 4291152329 4291217609 4290362295 4282005553 4282005553 4278190080 4294178040 4290691006 4278190080 0 0 0 0 0 0 4279308302 4292861671 4292861671 4292203473 4291481298 4288322196 4287398507 4287527511 4287461974 4287595631 4288585368 4292533985 4292927710 4293322990 4292006866 4278979337 0 0 0 0 0 0 0 4282400567 4291282882 4289309870 4285292359 4290480188 4292978247 4293373264 4293570642 4293110603 4290350147 4285095750 4290362558 4291940813 4282005553 0 0 0 0 0 0 0 0 4281018921 4290757322 4286212944 4293043016 4293239882 4293307731 4293703258 4293966436 4293638508 4294559100 4293308257 4286475858 4292204767 4281084713 0 0 0 0 0 4280295454 4282005553 4282005553 4289769903 4286869842 4291270466 4293239882 4292978256 4293308251 4289036878 4289168722 4294100104 4294496415 4294956188 4291730259 4286869842 4291086022 4282005553 4282005553 4280360991 0 4279637522 4291151300 4294835967 4292466645 4290822853 4289239684 4292584259 4292387656 4293833564 4286471727 4279307786 4279241474 4287787336 4294960305 4294695080 4294099076 4288845956 4292336345 4292861916 4294967295 4292006870 4278190080 4279308557 4288124306 4292203734 4290756024 4290362302 4290752404 4292320579 4292518733 4293834336 4283711525 0 0 4283711525 4294962101 4294762926 4294298774 4290950561 4292072656 4290887867 4292532952 4288585116 4278190080 0 4279834644 4278190080 4282005553 4288388249 4292463284 4292321096 4293241940 4293704050 4294956442 4283711525 4283711525 4294965951 4294701501 4294962359 4293445009 4293385682 4290295988 4282005553 4278190080 4279768850 0 0 0 0 4278716165 4283979084 4290689973 4294108629 4292846664 4293703792 4294627490 4294963644 4294899649 4294767807 4294964926 4294038430 4292989889 4294046705 4283979084 4278584835 0 0 0 0 0 0 0 4278190080 4287005819 4290494141 4294108629 4293506929 4293835385 4294298777 4294498724 4294631080 4294629542 4294108629 4293520358 4288650641 4278190080 0 0 0 0 0 0 0 4278190080 4293519331 4290756283 4286610548 4289638576 4293189596 4294503905 4294897104 4294962118 4294833120 4294966771 4292138450 4288518799 4292467157 4294704123 4278190080 0 0 0 0 0 4278781959 4290624437 4293059037 4291742919 4284571736 4282005553 4285361253 4288454299 4289836209 4289902001 4288914589 4285953389 4282005553 4284571736 4293388007 4294507262 4291809743 4278716421 0 0 0 0 4278190080 4284571736 4288453264 4283979084 4280163608 4282005553 4280294935 4287795598 4291874507 4291874507 4287795598 4279966226 4282005553 4280032022 4283979084 4289243042 4284571736 4278190080 0 0 0 0 0 4278190080 4280821537 4282005553 0 0 0 4282334259 4294506488 4294967295 4282334259 0 0 0 4282005553 4280755743 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4281150504 4290756278 4290953403 4281216298 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279176717 4283979084 4283979084 4279111179 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278453251 4278518787 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsForward ^ (Form extent: 24@24 depth: 32 fromArray: #( 0 0 0 0 0 0 0 134217728 452984832 687865856 855638016 922746880 922746880 855638016 687865856 452984832 134217728 0 0 0 0 0 0 0 0 0 0 0 0 134217728 603979776 989855744 1040187392 1006632960 1023410176 956301312 939524096 939524096 939524096 956696070 1007027718 621414922 134415107 0 0 0 0 0 0 0 0 0 369098752 1023410176 1090519040 939524096 1195656260 1636337800 1687129999 1534950781 1416654960 1281187165 1077360439 1009001508 1076044579 1143285029 1193156126 405021732 0 0 0 0 0 0 0 452984832 1107296256 939524096 1263620433 1636535179 2058334127 1957078694 1586137738 4280895334 1179668560 1026831412 1061043774 1061175360 1195129916 1128284224 1228486969 1278292273 523975483 0 0 0 0 0 369098752 1090519040 989855744 1484158582 1906681253 2007739307 1822334622 1603112333 1230921310 4279055194 4278190080 1162430793 1113020247 1130060635 1130126428 1147166816 1130126428 1263357261 1379942464 458248272 0 0 0 134217728 1040187392 939524096 1484158582 2125837749 2109060533 1957539245 1535477125 1144403510 1095321929 4279055194 4281496477 4278190080 1164733548 1181839729 1198814324 1198880117 1198814324 1181839729 1181379178 1347506513 173759323 0 0 603979776 1023410176 1263620433 1923524262 2125771956 2126035128 1484750719 1177957942 1162496586 1130126428 4279055194 4286623183 4281496477 4278190080 1250264453 1250396039 1250396039 1250396039 1250264453 1233224065 1215986298 779252338 0 134217728 1023410176 973078528 1636535179 2108928947 1923721641 1484750719 1211380788 1196182604 1180523869 1181773936 4279055194 4288135128 4292799735 4281496477 4278255873 1318689177 1318754970 1318689177 1301780375 1284739987 1284345229 1250264453 192510329 452984832 1073741824 1195656260 1957144487 4282670713 4281486699 4278922318 4278988369 4278988369 4278988369 4279843162 4279055194 4288003030 4289251037 4294769660 4281496477 4278190080 1386916522 1370073513 1353098918 1336058530 1335663772 1301648789 646613642 687865856 1056964608 1602651782 1906549667 4282013041 4287805393 4292471286 4294834941 4294834941 4294834941 4294834941 4290828781 4289187814 4284003289 4292602610 4294769660 4281496477 4278190080 1438103479 1421128884 1404154289 1386916522 1352967332 983079064 855638016 1023410176 1703973008 1586137738 4281486955 4291616235 4287545817 4290567403 4291749105 4290041835 4286233565 4285182679 4279080906 4279077572 4284003289 4292602610 4294769660 4281496477 4278190080 1472250048 1455275453 1438103479 1404022703 1235592613 922746880 973078528 1568768385 1416918132 4281289834 4292929777 4286559188 4282231506 4284396245 4282625750 4279080906 4280522186 4279139767 4279139509 4279142593 4284003289 4290500842 4292668407 4281496477 4278190080 1523042247 1489158850 1455078074 1387442866 922746880 939524096 1416654960 1179668560 4279908699 4292864244 4286365405 4279140533 4279137959 4279139245 4279075512 4279142593 4279139509 4279075262 4279075262 4284003289 4282895592 4280062401 4279260807 4278190080 1574031825 1523305419 1489224643 1421523642 855638016 939524096 1281187165 1026831412 4278922318 4292010479 4287546337 4280332243 4282367962 4282829285 4280725971 4279545304 4279545304 4279669967 4279545304 4282895592 4280062401 4279260807 4278190080 1658773214 1608112601 1574163411 1523305419 1371652545 687865856 939524096 1077360439 1061043774 4278988369 4280182682 4279523979 4279523979 4279523979 4279327888 4279460242 4279206068 4279075262 4279545304 4282895592 4280062401 4279260807 4278190080 1760160233 1726408422 1675682016 1608112601 1574031825 1137100486 452984832 956696070 1009001508 1061175360 4278988369 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4279055194 4279147979 4282895592 4280062401 4279260807 4278387203 1962144755 1878061296 1793912044 1726408422 1658773214 1591138006 784910536 134217728 1007027718 1009133094 1144995647 1130126428 1198814324 1250396039 1318689177 1370073513 1438103479 1489224643 4279055194 4280062401 4280062401 4279260807 4278387203 2046228214 2130245880 2063071223 1878061296 1760160233 1675747809 1608112601 265014219 0 621414922 1260396576 1278621238 1230394966 1198880117 1250396039 1318754970 1386916522 1438103479 1506067652 4279055194 4281496477 4279260807 4278190080 2012476403 2063071223 2113863422 2113468664 1995699187 1793846251 1692656611 1071175896 0 0 134415107 1076044579 1395601199 1246777424 1198814324 1250396039 1318689177 1370073513 1438103479 1489224643 4279055194 4279260807 4278190080 1760160233 1878061296 1979119350 2147023096 2029450998 1894838512 1760160233 1659036386 265606356 0 0 0 405021732 1295003696 1313425737 1298359139 1250264453 1301780375 1353098918 1421128884 1472250048 4279055194 4278190080 1658773214 1726408422 1793912044 1894838512 2012476403 1928458737 1793912044 1726408422 719117532 0 0 0 0 0 523975483 1463433786 1281187165 1233224065 1284739987 1336058530 1404154289 1455275453 4279055194 1574031825 1608112601 1675682016 1726408422 1760160233 1793846251 1760160233 1726408422 870244062 0 0 0 0 0 0 0 491407946 1380863566 1365731175 1284345229 1335663772 1386916522 1438103479 1489158850 1523305419 1574163411 1608112601 1658773214 1675747809 1692656611 1659036386 719117532 0 0 0 0 0 0 0 0 0 173759323 779252338 1250264453 1301648789 1352967332 1404022703 1455078074 1489224643 1523305419 1574031825 1591138006 1608112601 1071175896 265606356 0 0 0 0 0 0 0 0 0 0 0 0 192510329 646613642 983079064 1235592613 1387442866 1421523642 1371652545 1137100486 784910536 265014219 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsRun ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278321668 4278321668 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278321668 4293980398 4291546060 4278321668 0 0 0 0 0 0 0 0 0 0 0 0 0 4278321668 4278321668 0 0 0 4278321668 4294111984 4289769648 4278321668 0 0 0 4278321668 4278321668 0 0 0 0 0 0 0 4278321668 4292796124 4294111984 4278321668 0 4278321668 4278321668 4293980399 4287532685 4278321668 4278321668 0 4278321668 4293190884 4291217092 4278321668 0 0 0 0 0 0 4278321668 4294111984 4292796124 4293519847 4278321668 4294111984 4294111984 4292532952 4292467160 4292993504 4291151300 4278321668 4293190884 4291217092 4286940548 4278321668 0 0 0 0 0 0 0 4278321668 4293454054 4292861918 4292796124 4292993504 4292598746 4292203988 4292072404 4291940817 4291809231 4292203989 4291611852 4284177244 4278321668 0 0 0 0 0 0 0 0 0 4278321668 4292796124 4292730332 4292401368 4292335575 4292072404 4291940817 4291611853 4291480267 4291282887 4290559164 4278321668 0 0 0 0 0 0 0 0 0 4278321668 4294111984 4292861920 4292532956 4292335574 4288059028 4284835174 4284835174 4289835442 4291282885 4291085508 4290624956 4287203719 4278321668 0 0 0 0 0 0 4278321668 4278321668 4278321668 4294111984 4292598746 4292335575 4288059028 4281940281 4278453252 4278650633 4287532685 4291480267 4290888130 4290624959 4288980133 4278321668 4278321668 4278321668 0 0 0 4278321668 4293980398 4294111984 4294111984 4292532952 4292203988 4292072402 4284835174 4278453252 0 0 4278782217 4293190884 4290624956 4290427578 4289835441 4288651166 4289703853 4289835441 4278321668 0 0 4278321668 4291480265 4289835440 4287532685 4292467160 4292072404 4291875023 4284835174 4278650633 0 0 4279242770 4294111984 4290559164 4290295991 4289572268 4287401102 4286348412 4285822068 4278321668 0 0 0 4278321668 4278321668 4278321668 4292993504 4291940817 4291611853 4289703853 4287532685 4278782217 4279242770 4294111984 4292532952 4290230198 4290032821 4287401102 4278321668 4278321668 4278321668 0 0 0 0 0 0 4278321668 4291151300 4291940815 4291546059 4291217093 4291480267 4293190884 4294111984 4292467160 4290164404 4290098611 4289506477 4284045656 4278321668 0 0 0 0 0 0 0 0 0 4278321668 4292006609 4291282886 4291019716 4290888130 4290690748 4290559164 4290230198 4290032820 4289835442 4288322202 4278321668 0 0 0 0 0 0 0 0 0 4278321668 4293190884 4291282886 4290888128 4290756542 4290756543 4290493370 4290295991 4290032821 4289440685 4288453790 4289835442 4287795859 4278321668 0 0 0 0 0 0 0 4278321668 4293190884 4291217093 4284177244 4278321668 4287203719 4288980133 4289967025 4289638060 4287401102 4284045656 4278321668 4288322202 4289177510 4286348412 4278321668 0 0 0 0 0 0 4278321668 4291217092 4286940548 4278321668 0 4278321668 4278321668 4285032553 4287532687 4279834907 4278321668 0 4278321668 4286348412 4285822068 4278321668 0 0 0 0 0 0 0 4278321668 4278321668 0 0 0 4280427044 4289309096 4286874758 4278321668 0 0 0 4278321668 4278321668 0 0 0 0 0 0 0 0 0 0 0 0 0 4281019180 4291217092 4287072136 4278321668 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278321668 4280032285 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsToolDock ^ (Form extent: 15@15 depth: 32 fromArray: #( 262404 17039620 402850051 2533359616 4278649863 4279175439 4245292555 4060151809 419430400 33751299 0 0 0 402653184 1174405120 17039620 419561730 2365652993 4262266893 4266931541 4287455375 4017178739 4162194710 3724541952 838926337 33554432 0 654311424 3506438144 4278190080 402850051 2365652993 4245554958 4166465368 4222649266 4291997139 4256862908 3983492720 4111862551 3506438144 1006632960 838860800 3305111552 3942842627 4144103426 2533359616 4262201101 4166399575 4222384558 4292454873 4293377768 4293050339 4239887544 3966452588 4095479580 3388997632 3254779904 3893167629 3525775656 4061136656 4278649863 4266799443 4222384045 4292320214 4292908511 4292644829 4293111012 4293050595 4222979511 4033561708 4129099805 3926787598 3661833284 4050140265 4264171819 4279109646 4286926727 4290870978 4292379608 4292242649 4291647697 4292047828 4293111780 4292654558 4239425970 4067050091 3897634130 4069087114 4271861920 4282264894 4245226506 4016122725 4254481305 4290463165 4291712211 4291579090 4291316172 4292048596 4292714720 4292190424 4256069553 4238041502 4273898431 4290149301 4282460735 2717974529 4161864465 3981510484 4236710795 4290064825 4291579345 4291644882 4291249355 4291781841 4292447453 4292381660 4292050646 4291656144 4288828835 4281735477 452984832 3724541952 4111466513 3964404304 4219735945 4289802678 4291382735 4291446224 4291248331 4291646161 4292042970 4292107993 4290924743 4287641747 4281209135 33685506 838926337 3506438144 4094951445 4031513680 4236382855 4289605810 4291448272 4291377102 4290781638 4290783175 4290783687 4290063548 4287376272 4281208878 0 33554432 1006632960 3388997632 4128505878 4065068368 4253226632 4290395584 4291112396 4290317248 4290185406 4290185662 4289664182 4287242894 4280355618 0 0 838860800 3254779904 3926787598 3896908617 4236457608 4290333117 4290915273 4290251457 4290118848 4290119103 4289597623 4287177102 4279174159 0 654311424 3305111552 3893167629 3661833028 4068955272 4273502906 4291324616 4290524608 4289861564 4289794748 4289729211 4289338291 4287112589 4279174415 402653184 3506438144 3942842627 3525775656 4050140265 4271861919 4290149044 4288894114 4287574162 4287308945 4287308689 4287243152 4287112589 4285670773 4279043085 2164260864 4278190080 4227858432 4177789444 4262201101 4279438867 4279569940 4279372050 4279174416 4279174416 4279174160 4279174160 4279174415 4279043085 4278255617) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsViewBottom ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 0 5789784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5789784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4282992969 0 0 5789784 5789784 4283979864 4291480266 4291546059 4291611852 4291677645 4291743438 4291677645 4291611852 4291546059 4291480266 4291348680 4291217094 4291085508 4290953922 4290756543 4290690750 4290493371 4281348144 0 0 0 0 4283979864 4291546059 4294177779 4294309365 4294375158 4294375158 4294375158 4294309365 4294177779 4294046193 4293848814 4293717228 4293585642 4293388263 4293190884 4293059298 4290559164 4281348144 0 0 0 0 4283979864 4291611852 4294309365 4294440951 4294506744 4294572537 4294506744 4294440951 4294309365 4294111986 4293980400 4293783021 4293585642 4293454056 4293256677 4293059298 4290624957 4281348144 0 0 0 0 4283979864 4291677645 4294375158 4294506744 4294704123 4294769916 4294704123 4294506744 4294375158 4294177779 4293980400 4293848814 4293651435 4293454056 4293322470 4293125091 4290624957 4281348144 0 0 0 0 4283979864 4291743438 4294375158 4294572537 4294769916 4294967295 4294769916 4294572537 4294375158 4294243572 4294046193 4293848814 4293651435 4293519849 4293322470 4293125091 4290624957 4281348144 0 0 0 0 4283979864 4291677645 4294046193 4294177779 4294375158 4294440951 4294375158 4294177779 4294046193 4293848814 4293651435 4293519849 4293322470 4293125091 4292993505 4292861919 4290624957 4281348144 0 0 0 0 4283979864 4292664540 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4292664540 4281348144 0 0 0 0 4283979864 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4278190080 4291546059 4291546059 4281348144 0 0 0 0 4283979864 4286019447 4283914071 4283914071 4283914071 4283848278 4283716692 4283650899 4283519313 4283453520 4283387727 4283256141 4283124555 4278190080 4294967090 4278190080 4286019447 4281348144 0 0 0 0 4283979864 4289309097 4291414473 4291480266 4291480266 4291546059 4291480266 4291480266 4291414473 4291348680 4278190080 4278190080 4291019715 4278190080 4294967142 4278190080 4288519581 4278190080 4278190080 0 0 0 4283979864 4291217094 4293717228 4293783021 4293848814 4293848814 4293848814 4293783021 4293717228 4278190080 4294967066 4291084544 4278190080 4288848153 4294967192 4288848153 4278190080 4291084544 4294967066 4278190080 0 0 4283979864 4291085508 4293585642 4293585642 4293651435 4293651435 4293651435 4293585642 4293585642 4293454056 4278190080 4294967133 4294967180 4294967222 4294967244 4294967222 4294967180 4294967133 4278190080 0 0 0 4283979864 4290953922 4293388263 4293454056 4293454056 4293519849 4293454056 4293454056 4293388263 4293322470 4293256677 4278190080 4288848153 4294967244 4294967295 4294967244 4288848153 4278190080 0 0 0 0 4283979864 4290756543 4293190884 4293256677 4293322470 4293322470 4293322470 4293256677 4293190884 4293125091 4293059298 4278190080 4288848153 4294967244 4294967295 4294967244 4288848153 4278190080 0 0 0 0 4283979864 4290690750 4293059298 4293059298 4293125091 4293125091 4293125091 4293059298 4293059298 4292993505 4278190080 4294967133 4294967180 4294967222 4294967244 4294967222 4294967180 4294967133 4278190080 0 0 0 4283979864 4290493371 4290559164 4290624957 4290624957 4290624957 4290624957 4290624957 4290559164 4278190080 4294967066 4291084544 4278190080 4288848153 4294967192 4288848153 4278190080 4291084544 4294967066 4278190080 0 0 4282992969 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4278190080 4278190080 4281348144 4278190080 4294967142 4278190080 4281348144 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4294967090 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /22x22/actions' stamp: 'apl 9/20/2007 13:31'! form22x22ActionsViewTopBottom ^ (Form extent: 22@22 depth: 32 fromArray: #( 0 16777216 33554432 50331648 50331648 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 50331648 33554432 16777216 0 16777216 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4283979864 4282992969 335544320 134217728 16777216 33554432 4283979864 4291480266 4291546059 4291611852 4291677645 4291743438 4291677645 4291611852 4291546059 4291480266 4291348680 4291217094 4291085508 4290953922 4290756543 4290690750 4290493371 4281348144 889192448 335544320 50331648 50331648 4283979864 4291546059 4294177779 4294309365 4294375158 4294375158 4294375158 4294309365 4294177779 4294046193 4293848814 4293717228 4293585642 4293388263 4293190884 4293059298 4290559164 4281348144 1191182336 452984832 67108864 67108864 4283979864 4291611852 4294309365 4294440951 4294506744 4294572537 4294506744 4294440951 4294309365 4294111986 4293980400 4293783021 4293585642 4293454056 4293256677 4293059298 4290624957 4281348144 1224736768 469762048 67108864 67108864 4283979864 4291677645 4294375158 4294506744 4294704123 4294769916 4294704123 4294506744 4294375158 4294177779 4293980400 4293848814 4293651435 4293454056 4293322470 4293125091 4290624957 4281348144 1241513984 469762048 67108864 67108864 4283979864 4291743438 4294375158 4294572537 4294769916 4294967295 4294769916 4294572537 4294375158 4294243572 4294046193 4293848814 4293651435 4293519849 4293322470 4293125091 4290624957 4281348144 1241513984 469762048 67108864 67108864 4283979864 4291677645 4294046193 4294177779 4294375158 4294440951 4294375158 4294177779 4294046193 4293848814 4293651435 4293519849 4293322470 4293125091 4292993505 4292861919 4290624957 4281348144 1241513984 469762048 67108864 67108864 4283979864 4292664540 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4292664540 4281348144 1241513984 469762048 67108864 67108864 4283979864 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4291546059 4281348144 1241513984 469762048 67108864 67108864 4283979864 4286019447 4283914071 4283914071 4283914071 4283848278 4283716692 4283650899 4283519313 4283453520 4283387727 4283256141 4283124555 4283058762 4282927176 4282927176 4286019447 4281348144 1241513984 469762048 67108864 67108864 4283979864 4289309097 4291414473 4291480266 4291480266 4291546059 4291480266 4291480266 4291414473 4291348680 4291217094 4291085508 4291019715 4290888129 4290756543 4290624957 4288519581 4281348144 1241513984 469762048 67108864 67108864 4283979864 4291217094 4293717228 4293783021 4293848814 4293848814 4293848814 4293783021 4293717228 4293651435 4293519849 4293388263 4293256677 4293125091 4292993505 4292796126 4290361785 4281348144 1241513984 469762048 67108864 67108864 4283979864 4291085508 4293585642 4293585642 4293651435 4293651435 4293651435 4293585642 4293585642 4293454056 4293388263 4293256677 4293125091 4292993505 4292861919 4292730333 4290361785 4281348144 1241513984 469762048 67108864 67108864 4283979864 4290953922 4293388263 4293454056 4293454056 4293519849 4293454056 4293454056 4293388263 4293322470 4293256677 4293125091 4292993505 4292861919 4292730333 4292664540 4290361785 4281348144 1241513984 469762048 67108864 67108864 4283979864 4290756543 4293190884 4293256677 4293322470 4293322470 4293322470 4293256677 4293190884 4293125091 4293059298 4292993505 4292861919 4292730333 4292664540 4292664540 4290361785 4281348144 1241513984 469762048 67108864 67108864 4283979864 4290690750 4293059298 4293059298 4293125091 4293125091 4293125091 4293059298 4293059298 4292993505 4292927712 4292796126 4292730333 4292664540 4292664540 4292664540 4290361785 4281348144 1241513984 469762048 67108864 67108864 4283979864 4290493371 4290559164 4290624957 4290624957 4290624957 4290624957 4290624957 4290559164 4290493371 4290427578 4290361785 4290361785 4290361785 4290361785 4290361785 4290361785 4281348144 1241513984 469762048 67108864 50331648 4282992969 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 4281348144 1191182336 452984832 67108864 33554432 335544320 889192448 1174405120 1224736768 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1241513984 1191182336 889192448 335544320 50331648 16777216 134217728 335544320 452984832 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 469762048 452984832 335544320 134217728 16777216 0 16777216 33554432 50331648 50331648 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 67108864 50331648 33554432 16777216 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /32x32/actions' stamp: 'apl 9/20/2007 13:31'! form32x32ActionsReload ^ (Form extent: 32@32 depth: 32 fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4278666269 4278666269 4278598936 4278530580 4278463764 4278462736 4278462226 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4278666269 4283994476 4288665778 4291356113 4292865763 4288140459 4283613046 4279411522 4281161788 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4278666269 4283994476 4291356113 4292865763 4288140459 4283613046 4279412038 4279073331 4279003950 4278869800 4278666269 4278666269 4278462224 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283600229 4288531114 4292865763 4288799414 4285192078 4283215212 4279073331 4278869800 4278666269 4278190080 4278190080 4278190080 4278190080 4278190080 4278462224 4278461712 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283271264 4287940001 4292865763 4288799414 4283613046 4280524879 4279003950 4278666269 4278190080 4278190080 0 0 0 0 0 4278190080 4278190080 4278395663 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4288531114 4292865763 4288799414 4279412038 4281247064 4279003950 4278666269 4278190080 0 0 16777215 16777215 16777215 16777215 16777215 0 0 4278190080 4278394893 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283533925 4292865763 4288799414 4283613046 4280919637 4279666491 4278666269 4278190080 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4288793263 4292865763 4285192078 4279412551 4279666491 4279003950 4278190080 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 0 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283136604 4290962380 4288799414 4283613046 4280919637 4279003950 4278666269 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283730791 4292865763 4285192078 4280002637 4279543624 4279264045 4278190080 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278666269 4283730791 4292865763 4283613046 4280067917 4279543624 4279132459 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278463765 4278530069 4278597913 4278599450 4278665756 4278666269 4283730791 4290962380 4283613046 4279543624 4279344707 4278938413 4278190080 4278597913 4278666269 4278666269 4278597913 4278463765 16777215 16777215 16777215 16777215 4281545523 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278529555 4287677859 4291159247 4292865763 4292865763 4290962380 4286957721 4280070990 4279413063 4279344707 4286229387 4287677859 4291159247 4292865763 4287677859 4278666269 4278190080 16777215 16777215 16777215 4281545523 4282992969 4281545523 4278255873 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279277376 4283613046 4285192078 4285192078 4283613046 4279413320 4279479369 4279412551 4284597377 4286044823 4285192078 4279277376 4278666269 4278190080 0 16777215 16777215 4281545523 4282927176 4289309097 4283058762 4281545523 4278255873 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279003950 4279344194 4281256809 4280070990 4279479369 4279479369 4282170720 4282699617 4279277376 4279003950 4278666269 4278190080 0 16777215 16777215 4281545523 4282664004 4291217094 4287993237 4286019447 4283058762 4281545523 4278255873 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279003950 4279277376 4281256809 4279479369 4282170720 4284077171 4279277376 4279003950 4278666269 4278190080 0 16777215 15987699 4281545523 4282927176 4292203989 4287730065 4284243036 4284374622 4287335307 4283058762 4281545523 4278255873 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279003950 4279277376 4282170720 4282699617 4279277376 4279003950 4278666269 4278190080 0 16777215 16777215 4281545523 4282795590 4292006610 4287730065 4283979864 4282203453 4283190348 4284374622 4287993237 4282992969 4281545523 4278255873 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279003950 4279277376 4279277376 4279003950 4278666269 4278190080 0 16777215 16777215 4281545523 4282992969 4291875024 4287730065 4283979864 4282203453 4280427042 4280690214 4283124555 4284374622 4287993237 4282992969 4281545523 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4279003950 4279003950 4278666269 4278190080 0 16777215 16777215 4281545523 4282992969 4291217094 4287730065 4284177243 4282137660 4280427042 4280427042 4280427042 4280821800 4283190348 4284374622 4286743170 4282992969 4281545523 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278666269 4278666269 4278190080 0 16777215 16777215 4281545523 4282992969 4289309097 4287730065 4283979864 4282992969 4282992969 4281677109 4280821800 4280690214 4281808695 4281216558 4283058762 4284572001 4286019447 4282992969 4281545523 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4278190080 4278190080 0 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4286151033 4285361517 4281808695 4280690214 4283782485 4280163870 4278387459 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278782217 4287664272 4285953654 4282664004 4280427042 4284243036 4280163870 4278387459 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4281545523 4289045925 4286874756 4282664004 4280427042 4284308829 4280163870 4278387459 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4281545523 4289506476 4286545791 4282137660 4282006074 4284637794 4280163870 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4281545523 4285229931 4290164406 4285361517 4280427042 4284637794 4282664004 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 0 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 0 4281545523 4284900966 4290756543 4287993237 4283190348 4282269246 4285493103 4280229663 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278387459 4278190080 0 0 16777215 16777215 16777215 16777215 16777215 0 0 4281545523 4282927176 4290295992 4288387995 4284966759 4280427042 4284769380 4281150765 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278387459 4278190080 4278190080 0 0 0 0 0 4281545523 4281545523 4285229931 4290624957 4288914339 4285361517 4280558628 4284769380 4284111450 4280756007 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4281677109 4281677109 4278190080 4278190080 4281545523 4281545523 4281545523 4284966759 4289638062 4290756543 4288453788 4285361517 4281413937 4285690482 4284111450 4280756007 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4281677109 4284703587 4286743170 4287730065 4288651167 4289638062 4288387995 4283782485 4280887593 4284769380 4285690482 4280756007 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4281545523 4282400832 4283650899 4284374622 4285558896 4285032552 4285887861 4284111450 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 4278190080 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /32x32/actions' stamp: 'apl 9/20/2007 13:31'! form32x32ActionsRun ^ (Form extent: 32@32 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4292467161 4294309365 4292467161 4287993237 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4293519849 4293256677 4290427578 4286479998 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4293519849 4293256677 4290427578 4286479998 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 4278190080 4293519849 4293256677 4290098613 4286216826 4278190080 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 4278190080 4287269514 4289572269 4290098613 4289045925 4278190080 0 0 4278190080 4283585106 4293519849 4293256677 4289901234 4285887861 4282532418 4278190080 0 0 4278190080 4288848546 4288848546 4286940549 4282729797 4278190080 0 0 0 0 0 0 0 0 4278190080 4289572269 4293783021 4293519849 4292730333 4288519581 4278190080 4278190080 4287993237 4288322202 4293256677 4293059298 4291151301 4289045925 4287269514 4287269514 4278190080 4278190080 4288519581 4292467161 4292467161 4289901234 4283058762 4278321666 0 0 0 0 0 0 0 0 4278190080 4289901234 4293519849 4292730333 4292730333 4294309365 4288519581 4289572269 4294309365 4294111986 4292730333 4292203989 4292203989 4292730333 4292993505 4292730333 4286743170 4288848546 4292467161 4291151301 4291151301 4287006342 4281479730 4278321666 0 0 0 0 0 0 0 0 4278190080 4289045925 4292730333 4293059298 4292730333 4293059298 4294111986 4293783021 4292730333 4292730333 4292467161 4292203989 4292006610 4292006610 4292006610 4291677645 4292730333 4292203989 4291677645 4291480266 4290888129 4285690482 4280624421 4278321666 0 0 0 0 0 0 0 0 0 4278190080 4288585374 4294111986 4292730333 4292730333 4292993505 4292730333 4292730333 4292532954 4292203989 4292203989 4292006610 4291677645 4291677645 4291480266 4291677645 4291677645 4291480266 4290624957 4285427310 4280427042 4279111182 0 0 0 0 0 0 0 0 0 0 0 4278190080 4288519581 4294111986 4293059298 4292532954 4292203989 4292203989 4292203989 4292006610 4292006610 4292006610 4291677645 4291677645 4291480266 4291217094 4291217094 4290690750 4288519581 4280953386 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4289572269 4293519849 4292730333 4292730333 4292532954 4291677645 4289901234 4288848546 4288585374 4289374890 4290098613 4290690750 4291217094 4291414473 4291151301 4290624957 4288519581 4282729797 4280624421 0 0 0 0 0 0 0 0 0 0 0 4278190080 4287795858 4294309365 4292532954 4292532954 4292532954 4291677645 4289901234 4286151033 4283519313 4283058762 4284111450 4286414205 4289901234 4290690750 4290953922 4290953922 4290953922 4290427578 4287795858 4280953386 4278848010 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 4283321934 4288322202 4294309365 4292730333 4292532954 4292203989 4289901234 4286151033 4283058762 4279045389 4278321666 4278584838 4282006074 4288848546 4290427578 4290953922 4290953922 4290624957 4290098613 4288519581 4281479730 4279045389 4279374354 4279374354 4279374354 4278190080 0 4278190080 4286414205 4293519849 4293519849 4293519849 4293519849 4293256677 4292730333 4292203989 4292203989 4292203989 4288848546 4283256141 4279045389 4278190080 0 0 4278190080 4281479730 4290427578 4290888129 4290690750 4290427578 4290164406 4289374890 4287006342 4287269514 4288322202 4289309097 4289309097 4289572269 4278190080 4278190080 4287466893 4293256677 4293256677 4293519849 4293256677 4292730333 4292532954 4292203989 4292203989 4292006610 4288848546 4283519313 4278321666 0 0 0 0 4280098077 4291677645 4291151301 4290624957 4290427578 4290098613 4289901234 4289309097 4289309097 4289572269 4289572269 4289572269 4288519581 4278190080 4278190080 4286743170 4290427578 4290427578 4290164406 4290164406 4291151301 4292532954 4292006610 4292006610 4291677645 4289045925 4284308829 4278584838 0 0 0 0 4280624421 4292532954 4291414473 4290624957 4290361785 4290098613 4289572269 4288322202 4287466893 4286743170 4286479998 4286479998 4285887861 4278190080 4278190080 4285164138 4286479998 4286479998 4286151033 4285887861 4288848546 4292532954 4292006610 4292006610 4291677645 4290098613 4286414205 4282006074 4278190080 0 0 4282532418 4285427310 4293059298 4291480266 4290427578 4290164406 4289901234 4288322202 4284835173 4282795590 4282532418 4282532418 4282532418 4282269246 4278190080 0 4278190080 4278190080 4278190080 4278190080 4282532418 4287269514 4292993505 4291677645 4291677645 4291480266 4290690750 4289572269 4288848546 4281479730 4280098077 4280953386 4285690482 4294309365 4292467161 4290624957 4290098613 4289901234 4289045925 4286216826 4280098077 4278321666 4278321666 4278321666 4278321666 4278190080 0 0 0 0 0 0 4278190080 4287269514 4292730333 4291677645 4291677645 4291480266 4291151301 4290888129 4290427578 4290624957 4291480266 4292203989 4292993505 4292532954 4290624957 4290361785 4290098613 4290098613 4289045925 4284111450 4279900698 4278190080 0 0 0 0 0 0 0 0 0 0 0 4278190080 4286743170 4292730333 4291677645 4291480266 4291151301 4290953922 4290690750 4290953922 4291151301 4291217094 4291414473 4290624957 4290098613 4290098613 4289901234 4288848546 4286216826 4280098077 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4289374890 4292203989 4291480266 4291151301 4291151301 4290953922 4290953922 4290624957 4290624957 4290624957 4290164406 4290098613 4289901234 4289901234 4289901234 4289045925 4286743170 4281742902 4279571733 0 0 0 0 0 0 0 0 0 0 0 4278190080 4289374890 4293059298 4291151301 4291151301 4290953922 4290888129 4290888129 4290624957 4290690750 4290427578 4290427578 4290427578 4290098613 4289901234 4288848546 4289374890 4289572269 4289045925 4285953654 4281677109 4279637526 0 0 0 0 0 0 0 0 0 4278190080 4289901234 4293059298 4291217094 4291151301 4290624957 4289374890 4289572269 4290361785 4290427578 4290098613 4290361785 4290098613 4289572269 4289374890 4289045925 4286216826 4287006342 4289374890 4289901234 4289374890 4285164138 4280953386 4278321666 0 0 0 0 0 0 0 0 4278190080 4289901234 4293059298 4291151301 4290427578 4285427310 4282795590 4284637794 4287795858 4288585374 4289374890 4290098613 4289572269 4288322202 4285953654 4284308829 4280098077 4282729797 4287269514 4289045925 4289901234 4289374890 4285164138 4278321666 0 0 0 0 0 0 0 0 4278190080 4287993237 4290098613 4286940549 4285690482 4282729797 4278190080 4278190080 4283058762 4283256141 4286151033 4288848546 4288519581 4284835173 4280098077 4279900698 4278190080 4279900698 4282532418 4286940549 4289045925 4289045925 4285164138 4278321666 0 0 0 0 0 0 0 0 4278190080 4284835173 4284637794 4283321934 4282532418 4278190080 0 0 4278190080 4280098077 4285887861 4289045925 4287466893 4283058762 4278321666 4278190080 0 0 4280163870 4281742902 4286940549 4286940549 4286216826 4278190080 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 4278190080 4287730065 4289374890 4287269514 4282795590 4278190080 0 0 0 0 4278321666 4278321666 4278321666 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4289901234 4289901234 4287730065 4283782485 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4289901234 4289901234 4287730065 4283782485 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4290624957 4288848546 4286940549 4283585106 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278190080 4278190080 4278190080 4278190080 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:32'! formCross1 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:32'! formCross2 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:32'! formCross3 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formExpandedform ^ (Form extent: 10@9 depth: 32 fromArray: #( 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formExpandedform2 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formExpandedform3 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'utilities' stamp: 'apl 1/26/2007 13:45'! formFileNamesFromDirectory: path | fd result | result := OrderedCollection new. (fd := FileDirectory on: path) entries do: [:n | n isDirectory ifTrue: [result addAll: (self formFileNamesFromDirectory: path , FileDirectory slash , n name)] ifFalse: [(#('png' 'gif' 'bmp' ) includes: (FileDirectory extensionFor: n name) asLowercase) ifTrue: [ result add: (fd pathName , fd slash , n name)]]]. ^ result! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 1/26/2007 15:44'! formFromRelativePath: aPathString | selector | selector := self selectorFromPath: aPathString. ^ self perform: selector! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formNotexpandedform ^ (Form extent: 10@9 depth: 32 fromArray: #( 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 4289242790 0 0 0 0 0 0 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:32'! formNotexpandedform2 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:32'! formNotexpandedform3 ^ (Form extent: 21@21 depth: 32 fromArray: #( 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 4278190080 4278190080 4278190080 4278190080 4278190080 0 4289242790 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 4278190080 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4289242790 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formTamaris ^ (Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294902015 0 0 0 0 4294902015 4294075115 0 4294075115 4294075115 0 0 0 0 0 4294902015 4292664540 4294902015 0 0 0 4294902015 4294958590 4294075115 4294951167 0 0 0 0 0 0 0 4280250397 4294958590 4290773184 0 4278222848 4278222848 4294958590 4290773184 4294902015 4294902015 4294075115 0 0 0 0 0 0 0 4293475826 4290773184 4290773184 4290773184 4290773184 4290773184 4294902015 0 0 0 0 0 0 4294902015 4294902015 4292664540 4278222848 4290773184 4290773184 0 0 4294951167 4294951167 4290773184 0 0 0 0 4294902015 4292664540 4294902015 4292664540 4290773184 4294951167 4294958590 4290773184 0 4278222848 4290773184 4292664540 4294902015 0 0 0 0 4294902015 4294902015 4278222848 4290773184 4290773184 4278222848 0 0 0 0 4290773184 4294902015 0 0 0 0 0 4278222848 4290773184 4290773184 4294951167 4278239232 0 4290773184 0 0 0 0 0 0 0 0 0 4290773184 4290773184 4280250397 4294951167 4280250397 4278239232 4290773184 4294951167 4290773184 4290773184 0 0 0 0 0 4278222848 4280250397 4280250397 0 4278222848 0 0 4278239232 4290773184 4292664540 4278239232 4294078175 0 0 0 4278222848 4278222848 0 0 0 0 0 0 0 4294902015 4294902015 0 4294902015 0 0 0 4278222848 0 0 0 0 0 0 0 0 0 4294902015 0 0 0 0 4278222848 4278222848 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'accessing forms from /' stamp: 'apl 9/20/2007 13:31'! formTamarix ^ (Form extent: 592@394 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4294924527 4294924527 4294924527 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 4279871232 4279871232 4279871232 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4279871232 4279871232 4279871232 4294933987 4294933987 4294933987 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4279871232 4279871232 4279871232 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 0 0 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4294934758 4294934758 4294934758 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4279871232 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4294934758 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 0 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294934758 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4279871232 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4279871232 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 4294933987 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294933987 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4278243847 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4294934758 0 4294934758 4294934758 4294934758 4294934758 0 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 4294934758 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4294934758 0 4294934758 4294934758 4294934758 4294934758 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 4294934758 4294934758 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 4294934758 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4294934758 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4294934758 4294934758 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294934758 4294934758 4294934758 0 4294934758 4279871232 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4294934758 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4294934758 0 0 0 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4294934758 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 0 4294934758 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 4278226443 4278226443 0 0 0 4294934758 4294934758 4294934758 0 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 4279871232 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 4294934758 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4294934758 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4294934758 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 0 0 4294934758 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278243847 4278243847 4278243847 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 4294934758 4294934758 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294934758 4294934758 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 0 0 0 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4294924527 4294924527 4294924527 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 4278221377 4278221377 4278221377 4294924527 4294924527 4294924527 4294924527 4294924527 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4294934758 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 4278243847 4278243847 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4294934758 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4294934758 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4294934758 4294934758 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4294934758 4294934758 4294934758 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4294934758 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4279871232 4279871232 4279871232 0 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4294934758 0 0 0 0 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4279871232 4279871232 4279871232 4294934758 4294934758 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4279871232 4294934758 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278221377 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 4294934758 4294934758 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4278221377 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294934758 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 0 4278243847 4278243847 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 4279871232 4279871232 4279871232 0 0 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 4279871232 4279871232 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 4279871232 4279871232 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 0 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 4279871232 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4279871232 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278243847 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278243847 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278243847 4278243847 4278243847 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278243847 4278243847 4278243847 4278243847 4278243847 4278243847 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4279871232 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4279871232 4279871232 4279871232 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278243847 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278226443 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4279871232 4279871232 0 0 0 0 0 0 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 0 0 0 0 0 0 0 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4279871232 4279871232 4279871232 4279871232 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4279871232 4279871232 4279871232 4279871232 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4279871232 4279871232 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278226443 4278226443 4278226443 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4279871232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 4278221377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 4/22/2005 02:18'! icon: aName ^self magnifiedForm: (self originalIcon: aName) extent: self defaultExtent! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 1/26/2007 15:36'! iconDefault ^ self magnifiedForm: (self formTamaris) extent: self defaultExtent! ! !TamIcons class methodsFor: 'utilities' stamp: 'AlainPlantec 4/26/2012 09:43'! importFormFromStream: aStream category: aCat selector: aSel | sketch s | sketch := ImageMorph fromStream: aStream. s := WriteStream on: String new. s nextPutAll: aSel; nextPutAll: String cr; nextPutAll: ' ^ '. sketch form storeOn: s. self class compile: s contents classified: 'accessing forms from ' , aCat notifying: nil. ! ! !TamIcons class methodsFor: 'public utilities' stamp: 'alain.plantec 1/7/2009 17:36'! importForms "self importForms" | folder | (folder := FileList modalFolderSelector) ifNotNil: [self importFormsFromDirectory: folder pathName]! ! !TamIcons class methodsFor: 'utilities' stamp: 'apl 1/26/2007 15:19'! importFormsFromDirectory: path | selectorPathPart selector | (self formFileNamesFromDirectory: path) do: [:fn | selectorPathPart := fn copyFrom: path size + 1 to: fn size. FileDirectory splitName: selectorPathPart to: [:cat :n | selector := self selectorFromPath: selectorPathPart. self importFormFromStream: (FileStream readOnlyFileNamed: fn) category: cat selector: selector]]! ! !TamIcons class methodsFor: 'utilities' stamp: 'AlainPlantec 10/14/2010 21:16'! magnifiedForm: form extent: aPoint | scaleY scaleX scale | (form height - aPoint y) abs < 4 ifTrue: [^ form]. scaleY := aPoint y / form height. scaleX := aPoint x / form width. scale := scaleX min: scaleY. (scale - 1.0) abs <= 0.2 ifTrue: [^ form]. ^ form magnify: form boundingBox by: scale @ scale smoothing: 1 ! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 1/26/2007 15:37'! mimeDefault ^ self magnifiedForm: (self formTamaris) extent: self defaultListExtent! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 1/26/2007 15:23'! mimeIcon: aName ^ self magnifiedForm: (self originalIcon: aName) extent: self defaultListExtent! ! !TamIcons class methodsFor: 'icon accessing' stamp: 'apl 4/22/2005 01:39'! originalIcon: aName ^(self formFromRelativePath: aName) ifNil: [self iconDefault]! ! !TamIcons class methodsFor: 'utilities' stamp: 'AlainPlantec 12/5/2013 09:22'! selectorFromPath: path ^ ((self capitalize: 'form_' , (path copyReplaceAll: '/' with: '_') first: false) asIdentifier: false) asSymbol! ! !TamIcons class methodsFor: 'public utilities' stamp: 'alain.plantec 1/7/2009 17:36'! showForms "self showForms" | folder | folder := FileList modalFolderSelector. folder ifNotNil: [self showFormsFromDirectory: folder pathName]! ! !TamIcons class methodsFor: 'utilities' stamp: 'AlainPlantec 5/18/2012 13:30'! showFormsFromDirectory: path | fd window row sketchRow scrollBar | window := StandardWindow labelled: 'Icons from: ''' , path , ''''. scrollBar := TamBrowserScrollPane new. row := scrollBar pastUp. (fd := FileDirectory on: path) fileNames do: [:n | (#('png' 'gif' 'bmp' ) anySatisfy: [:ext | (FileDirectory extensionFor: n) asLowercase = ext]) ifTrue: [sketchRow := AlignmentMorph newColumn hResizing: #shrinkWrap; vResizing: #shrinkWrap; layoutInset: 6; borderWidth: 1; color: Color transparent; yourself. sketchRow addMorph: n asMorph. sketchRow addMorph: (ImageMorph fromFile: fd pathName , fd slash , n). row addMorph: sketchRow]]. window addMorph: scrollBar fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). window openInWorld. scrollBar layoutChanged. scrollBar setScrollDeltas. ^ window! ! !TamHierarchicalListItemMenuRule methodsFor: 'events' stamp: 'apl 3/29/2005 10:07'! doActionOn: anItem | cplxcts menu | anItem ~= self list selectedMorph ifTrue: [self list setSelectedMorph: anItem]. (cplxcts := anItem complexContents) ifNotNil: [menu := MenuMorph new defaultTarget: self list model editorModel. (cplxcts modelSpecificMenu: menu shifted: true) ifNotNil: [menu setInvokingView: self list. menu popUpEvent: self list activeHand lastEvent in: self list world]]! ! !TamHierarchicalListItemMenuRule methodsFor: 'events' stamp: 'apl 3/17/2005 22:23'! eventMatch: anEvent ^ anEvent isMouse and: [anEvent yellowButtonPressed and: [anEvent shiftPressed]]! ! !TamListEventRule methodsFor: 'events' stamp: 'apl 3/25/2005 10:59'! doActionOn: aListItem self subclassResponsibility! ! !TamListEventRule methodsFor: 'events' stamp: 'apl 3/17/2005 21:58'! eventMatch: anEvent ^ false! ! !TamListEventRule methodsFor: 'events' stamp: 'apl 3/25/2005 11:10'! handleEvent: anEvent item: aListItem ^ (self eventMatch: anEvent) and: [self doActionOn: (self unwrappedListItemFrom: aListItem). anEvent wasHandled: true. true]! ! !TamListEventRule methodsFor: 'accessing' stamp: 'apl 3/24/2005 17:37'! handler: aListEventRulesHandler handler := aListEventRulesHandler! ! !TamListEventRule methodsFor: 'accessing' stamp: 'apl 3/25/2005 10:56'! list ^ handler list! ! !TamListEventRule methodsFor: 'accessing' stamp: 'apl 3/25/2005 11:18'! unwrappedListItemFrom: aSourceItem ^ handler unwrappedFromItem: aSourceItem! ! !TamListItemBoldBlueEmphasisRule methodsFor: 'emphasing' stamp: 'apl 3/25/2005 12:57'! emphasisModel ^ self list boldBlueEmphasisModel! ! !TamListItemBoldBlueEmphasisRule methodsFor: 'emphasing' stamp: 'AlainPlantec 5/19/2012 09:31'! eventMatch: anEvent ^ anEvent isMouse and: [anEvent isMouseUp and: [anEvent shiftPressed]]! ! !TamListItemBoldRedEmphasisRule methodsFor: 'emphasing' stamp: 'apl 3/25/2005 12:52'! emphasisModel ^ self list boldRedEmphasisModel! ! !TamListItemBoldRedEmphasisRule methodsFor: 'emphasing' stamp: 'apl 3/29/2005 23:07'! eventMatch: anEvent ^ anEvent isKeyboard and: [anEvent commandKeyPressed and: [anEvent keyCharacter = $X]]! ! !TamListItemEmphasisRule methodsFor: 'emphasing' stamp: 'apl 3/25/2005 13:59'! doActionOn: anUnwrappedItem self list show: anUnwrappedItem asEmphasedWith: self emphasisModel ! ! !TamListItemEmphasisRule methodsFor: 'emphasing' stamp: 'apl 3/25/2005 11:11'! emphasisModel ^ self subclassResponsibility! ! !TamListEventRulesHandler commentStamp: '' prior: 104037878! Handles event rules for list such as PluggableListMorph or SimpleHierarchicalListMorph. The first purpose was to handle item emphasis rules. Event handling is performed from handleEvent: anEvent. 2 importants methods : itemAtPoint: aPoint is subclassResponsibility, it asks list to return item at a given position (aPoint). unwrappedFromItem: aListItem have here a default implementation. It returns the data stored and accessible from aListItem. ENTITY ListEventRulesHandler ABSTRACT SUPERTYPE; list : ScrollPane; (* the target list for event rules *) rules : LIST OF ListEventRule; (* the list of rules to trigger *) END_ENTITY; ! !TamListEventRulesHandler class methodsFor: 'instance creation' stamp: 'apl 3/25/2005 10:52'! list: aList ^ self new list: aList! ! !TamListEventRulesHandler methodsFor: 'accessing' stamp: 'apl 3/27/2005 16:12'! add: aListItemRule "add a new rule (a ListItemRule)" rules add: aListItemRule. aListItemRule handler: self! ! !TamListEventRulesHandler methodsFor: 'public events handling' stamp: 'apl 3/25/2005 11:21'! handleEvent: anEvent ^ self rules anySatisfy: [:rule | rule handleEvent: anEvent item: (self itemAtPoint: anEvent position)]! ! !TamListEventRulesHandler methodsFor: 'initialize-release' stamp: 'apl 3/21/2005 17:39'! initialize super initialize. rules := OrderedCollection new.! ! !TamListEventRulesHandler methodsFor: 'list item accessing' stamp: 'apl 3/27/2005 16:11'! itemAtPoint: aPoint "asks list to return item at a given position (aPoint)" ^self subclassResponsibility! ! !TamListEventRulesHandler methodsFor: 'accessing' stamp: 'apl 3/25/2005 10:51'! list ^list! ! !TamListEventRulesHandler methodsFor: 'accessing' stamp: 'apl 3/25/2005 10:51'! list: anObject list := anObject! ! !TamListEventRulesHandler methodsFor: 'accessing' stamp: 'apl 3/21/2005 17:43'! rules ^ rules! ! !TamListEventRulesHandler methodsFor: 'list item accessing' stamp: 'apl 3/27/2005 16:12'! unwrappedFromItem: aListItem "returns the data stored and accessible from aListItem" ^aListItem! ! !TamPluggableListMorphEventRulesHandler methodsFor: 'list item accessing' stamp: 'apl 3/27/2005 16:11'! itemAtPoint: aPoint "asks list to return item at a given position (aPoint)" ^self list itemAtLocation: aPoint! ! !TamSimpleHierarchicalListMorphEventRulesHandler methodsFor: 'list item accessing' stamp: 'apl 3/27/2005 16:11'! itemAtPoint: aPoint "asks list to return item at a given position (aPoint)" ^self list itemFromPoint: aPoint! ! !TamSimpleHierarchicalListMorphEventRulesHandler methodsFor: 'list item accessing' stamp: 'apl 3/27/2005 16:12'! unwrappedFromItem: aListItem "returns the data stored and accessible from aListItem" ^aListItem complexContents withoutListWrapper! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'AlainPlantec 5/19/2012 09:34'! add: anObject emphasis: aListItemMorphEmphasis | itemsSet | self remove: anObject. itemsSet := itemsByEmphasis at: aListItemMorphEmphasis ifAbsentPut: [Set new]. itemsSet add: anObject. emphasisByItem at: anObject put: aListItemMorphEmphasis! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/29/2005 22:53'! clear emphasisByItem ifNotEmpty: [:dict | emphasisByItem keys do: [:k | emphasisByItem removeKey: k]. itemsByEmphasis keys do: [:k | itemsByEmphasis removeKey: k]]! ! !TamListItemMorphEmphasisIndex methodsFor: 'emphasis handling' stamp: 'apl 3/17/2005 11:36'! emphasisNamed: aSymbol ^ emphasisIndex at: aSymbol ifAbsent: []. ! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/16/2005 22:14'! emphasisOf: anObject ^ emphasisByItem at: anObject ifAbsent: []! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/21/2005 11:45'! emphasisSet: aListItemMorphEmphasis ^ (itemsByEmphasis at: aListItemMorphEmphasis ifAbsent: [Set new]) copy! ! !TamListItemMorphEmphasisIndex methodsFor: 'enumerating' stamp: 'apl 3/18/2005 11:40'! emphasisSet: aListItemMorphEmphasis collect: aBlock ^ self emphasisSet: aListItemMorphEmphasis collect: aBlock! ! !TamListItemMorphEmphasisIndex methodsFor: 'enumerating' stamp: 'apl 3/18/2005 11:41'! emphasisSet: aListItemMorphEmphasis detect: aBlock ^ self emphasisSet: aListItemMorphEmphasis detect: aBlock! ! !TamListItemMorphEmphasisIndex methodsFor: 'enumerating' stamp: 'apl 3/18/2005 11:40'! emphasisSet: aListItemMorphEmphasis do: aBlock self emphasisSet: aListItemMorphEmphasis do: aBlock! ! !TamListItemMorphEmphasisIndex methodsFor: 'enumerating' stamp: 'apl 3/18/2005 11:41'! emphasisSet: aListItemMorphEmphasis select: aBlock ^ self emphasisSet: aListItemMorphEmphasis select: aBlock! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/21/2005 11:47'! emptyEmphasisSet: aListItemMorphEmphasis | | (self emphasisSet: aListItemMorphEmphasis) do: [:item | self remove: item]! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/16/2005 22:46'! includes: anObject ^ emphasisByItem includesKey: anObject ! ! !TamListItemMorphEmphasisIndex methodsFor: 'initialize-release' stamp: 'AlainPlantec 5/19/2012 09:32'! initialize super initialize. itemsByEmphasis := Dictionary new. emphasisByItem := WeakKeyDictionary new. emphasisIndex := Dictionary new. TamListItemMorphEmphasisModel standardEmphasisSet do: [:std | self registerEmphasis: (TamListItemMorphEmphasisModel perform: std)]! ! !TamListItemMorphEmphasisIndex methodsFor: 'emphasis handling' stamp: 'apl 3/17/2005 12:19'! registerEmphasis: aListItemMorphEmphasis emphasisIndex at: aListItemMorphEmphasis key ifPresent: [:e | ^ false]. emphasisIndex at: aListItemMorphEmphasis key put: aListItemMorphEmphasis. ^ true! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/21/2005 11:46'! remove: anObject itemsByEmphasis keysAndValuesDo: [:k :v | v remove: anObject ifAbsent: []]. emphasisByItem removeKey: anObject ifAbsent: []. ! ! !TamListItemMorphEmphasisIndex methodsFor: 'object indexing' stamp: 'apl 3/16/2005 22:48'! switch: anObject emphasis: aListItemMorphEmphasis (self includes: anObject) ifTrue: [self remove: anObject] ifFalse: [self add: anObject emphasis: aListItemMorphEmphasis]! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:54'! blueStandard ^ self key: #blueStandardEmphasis textColor: Color blue darker font: StandardFonts listFont emphasis: TextEmphasis normal! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:54'! boldBlueOnLightBlueStandard ^ self key: #boldBlueOnLightBlueStandardEmphasis textColor: Color blue backgroundColor: Color blue veryMuchLighter font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:54'! boldBlueStandard ^ self key: #boldBlueStantardEmphasis textColor: Color blue font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! boldGreenOnLightGreenStandard ^ self key: #boldGreenOnLightGreenStandardEmphasis textColor: Color green backgroundColor: Color green veryMuchLighter font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! boldGreenStandard ^ self key: #boldGreenStandardEmphasis textColor: Color green darker font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! boldRedStandard ^ self key: #boldRedStantardEmphasis textColor: Color red font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! boldStandard ^ self key: #boldStantardEmphasis textColor: Color black font: StandardFonts listFont emphasis: TextEmphasis bold! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! greenStandard ^ self key: #greenStandardEmphasis textColor: Color green muchDarker font: StandardFonts listFont emphasis: TextEmphasis normal! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! italicBlueStandard ^ self key: #italicBlueStandardEmphasis textColor: Color blue darker font: StandardFonts listFont emphasis: TextEmphasis italic! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! italicGreenStandard ^ self key: #italicGreenStandardEmphasis textColor: Color green darker font: StandardFonts listFont emphasis: TextEmphasis italic! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! italicRedStandard ^ self key: #italicRedStandardEmphasis textColor: Color red darker font: StandardFonts listFont emphasis: TextEmphasis italic! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! italicStandard ^ self key: #italicStantardEmphasis textColor: Color black font: StandardFonts listFont emphasis: TextEmphasis italic! ! !TamListItemMorphEmphasisModel class methodsFor: 'instance creation' stamp: 'apl 3/18/2005 15:25'! key: aSymbol textColor: aColor backgroundColor: anotherColor font: aFont emphasis: anTextEmphasis ^ self new key: aSymbol textColor: aColor backgroundColor: anotherColor font: aFont emphasis: anTextEmphasis! ! !TamListItemMorphEmphasisModel class methodsFor: 'instance creation' stamp: 'apl 3/18/2005 15:24'! key: aSymbol textColor: aColor font: aFont emphasis: anTextEmphasis ^ self new key: aSymbol textColor: aColor font: aFont emphasis: anTextEmphasis! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 21:38'! redStandard ^ RedStandard ifNil: [ RedStandard := self key: #redStandardEmphasis textColor: Color red darker font: StandardFonts listFont emphasis: TextEmphasis normal]! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! standard ^ Standard ifNil: [Standard := self key: #stantardEmphasis textColor: Color black font: StandardFonts listFont emphasis: TextEmphasis normal]! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'apl 3/22/2005 09:43'! standardEmphasisSet ^ {#standard. #boldStandard. #boldBlueStandard. #boldBlueOnLightBlueStandard. #boldRedStandard. #italicStandard. #underlinedStandard} asSet ! ! !TamListItemMorphEmphasisModel class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:55'! underlinedStandard ^ self key: #underlinedStantardEmphasis textColor: Color black font: StandardFonts listFont emphasis: TextEmphasis underlined! ! !TamListItemMorphEmphasisModel methodsFor: 'equality' stamp: 'apl 3/29/2005 23:18'! = anObject (anObject isKindOf: self class) ifFalse: [^ false]. ^ anObject key = key ! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 10:08'! backgroundColor ^backgroundColor ifNil: [backgroundColor := Color transparent]! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 10:52'! backgroundColor: anObject backgroundColor := anObject! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! emphasis ^emphasis! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! emphasis: anObject emphasis := anObject! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/17/2005 14:28'! emphasisCode ^ self emphasis emphasisCode! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/16/2005 11:36'! font ^font! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/16/2005 11:36'! font: anObject font := anObject! ! !TamListItemMorphEmphasisModel methodsFor: 'equality' stamp: 'apl 3/29/2005 23:19'! hash "Hash is re-implemented because #= is re-implemented" ^ key hash ! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! key ^key! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! key: anObject key := anObject! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 10:54'! key: aSymbol color: aColor backgroundColor: anotherColorOrNil font: aFont emphasis: anTextEmphasis self key: aSymbol. self color: aColor. self font: aFont. self backgroundColor: anotherColorOrNil. self emphasis: anTextEmphasis! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:22'! key: aSymbol textColor: aColor backgroundColor: anotherColorOrNil font: aFont emphasis: anTextEmphasis self key: aSymbol. self textColor: aColor. self font: aFont. self backgroundColor: anotherColorOrNil. self emphasis: anTextEmphasis! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:23'! key: aSymbol textColor: aColor font: aFont emphasis: anTextEmphasis self key: aSymbol textColor: aColor backgroundColor: nil font: aFont emphasis: anTextEmphasis! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! textColor ^textColor! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 3/18/2005 15:21'! textColor: anObject textColor := anObject! ! !TamListItemMorphEmphasisModel methodsFor: 'accessing' stamp: 'apl 1/30/2007 11:19'! xor: anotherListItemEmphasis ^ self class key: (self key , 'And' , anotherListItemEmphasis key capitalized) asSymbol textColor: self textColor font: self font emphasis: (TextEmphasis new emphasisCode: (self emphasisCode bitXor: anotherListItemEmphasis emphasisCode))! ! !TamListItemReference commentStamp: 'apl 12/8/2006 21:18' prior: 104038622! A TamListItemReference is xxxxxxxxx. Instance Variables emphasisModel: listLabel: localWorkspacePaneContents: owner: showSubLists: subLists: updateFlag: emphasisModel - xxxxx listLabel - xxxxx localWorkspacePaneContents - xxxxx owner - xxxxx showSubLists - xxxxx subLists - xxxxx updateFlag - xxxxx ! !TamListItemAbstractLinkReference class methodsFor: 'instance creation' stamp: 'tam 3/26/2004 15:47'! from: aListItemReference ^ self new linked: aListItemReference! ! !TamListItemAbstractLinkReference methodsFor: 'drag and drop' stamp: 'tam 3/26/2004 15:47'! acceptDroppingMorph: transferMorph copy: shouldCopy ^ self linked acceptDroppingMorph: transferMorph copy: shouldCopy ! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 16:52'! asStringOrText ^ self subclassResponsibility ! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! basicSmalltalkBrowser: aTaxonomyBrowser ^ self linked basicSmalltalkBrowser: aTaxonomyBrowser ! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! browserClass ^ self linked browserClass! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! children | lnk | ^ (lnk := self linked) ifNil: [#()] ifNotNil: [lnk isReleased ifTrue: [#()] ifFalse: [lnk children]]! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! editorClass ^ self linked editorClass! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:23'! icon | lnk | ^(lnk := self linked) ifNil: [TamIcons mimeIcon: '10x10/mimetypes/question'] ifNotNil: [lnk icon]! ! !TamListItemAbstractLinkReference methodsFor: 'testing' stamp: 'apl 5/26/2005 20:44'! includes: anotherReference ^self linked notNil and:[ self linked includes: anotherReference]! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 6/14/2012 11:19'! insertReference: anotherReference ^ self linked insertReference: anotherReference ! ! !TamListItemAbstractLinkReference methodsFor: 'testing' stamp: 'tam 3/26/2004 15:47'! isLink ^ true! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 16:14'! isLinkTo: anItem ^ self linked = anItem linked! ! !TamListItemAbstractLinkReference methodsFor: 'testing' stamp: 'apl 4/30/2004 17:23'! isRemoveable ^ true! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 16:47'! linkPrefix self subclassResponsibility ! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! linked ^ self subclassResponsibility ! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! linked: anItem ^ self subclassResponsibility! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:47'! listLabel ^ self linked listLabel! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 14:07'! longNameOn: aStream ^ self linked longNameOn: aStream! ! !TamListItemAbstractLinkReference methodsFor: 'menus' stamp: 'apl 4/18/2005 23:30'! menu: aMenu shifted: b | menuDeleteSubmorph | self isRootTaxonLink ifFalse: [ aMenu add: 'remove (x)' target: self selector: #menuDelete. aMenu addLine]. self linked menu: aMenu shifted: b. self isRemoveable ifFalse: [menuDeleteSubmorph := aMenu submorphs select: [:sm | (sm isKindOf: MenuItemMorph) and: [sm selector = #menuDelete]]. aMenu removeAllMorphsIn: menuDeleteSubmorph]. aMenu submorphsDo: [:aMenuItem | ((aMenuItem isKindOf: MenuItemMorph) and: [#( #menuDelete #menuInspect #menuBrowse #menuExplore ) anySatisfy: [:e | e == aMenuItem selector]]) ifTrue: [aMenuItem target: self]]. ^aMenu! ! !TamListItemAbstractLinkReference methodsFor: 'menus' stamp: 'apl 3/21/2005 09:51'! menuDelete | message | message := ' really remove this link ? '. (self confirm: message) ifTrue: [self remove. ^ true]. ^ false! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'tam 3/26/2004 15:47'! moveDownReference: aFirstLevelReference ^ self linked moveDownReference: aFirstLevelReference ! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'tam 3/26/2004 15:47'! moveUpReference: aFirstLevelReference ^ self linked moveUpReference: aFirstLevelReference ! ! !TamListItemAbstractLinkReference methodsFor: 'morphic wrapper' stamp: 'tam 3/26/2004 15:47'! newEditor ^ self linked newEditor! ! !TamListItemAbstractLinkReference methodsFor: 'printing' stamp: 'tam 3/26/2004 15:47'! printOn: aStream aStream nextPutAll: self asStringOrText! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 6/14/2012 11:19'! relabelWith: newName ^ self linked relabelWith: newName ! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 6/14/2012 11:20'! removeAll self linked ifNotNil: [self linked removeAll]! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 6/14/2012 11:18'! removeChild: aReference self linked removeChild: aReference.! ! !TamListItemAbstractLinkReference methodsFor: 'updating' stamp: 'tam 3/26/2004 15:47'! removeChildSilently: aReference self linked removeChildSilently: aReference! ! !TamListItemAbstractLinkReference methodsFor: 'tam taxonomy browser' stamp: 'AlainPlantec 5/16/2012 15:12'! selectingFrom: aTaxonomyBrowser | lnk | ((lnk := self linked) isNil or: [lnk isReleased]) ifTrue: [^ nil]. ^ lnk selectingFrom: aTaxonomyBrowser! ! !TamListItemAbstractLinkReference methodsFor: 'accessing' stamp: 'apl 4/25/2007 16:43'! shortName ^ self linked name! ! !TamListItemAbstractLinkReference methodsFor: 'tam taxonomy browser' stamp: 'AlainPlantec 10/13/2010 16:53'! unSelectingFrom: aTaxonomyBrowser self linked ifNotNil: [:lnk | lnk unSelectingFrom: aTaxonomyBrowser]! ! !TamListItemHardLinkReference methodsFor: 'accessing' stamp: 'apl 4/5/2004 14:48'! asStringOrText ^ self linkPrefix , self linked asStringOrText! ! !TamListItemHardLinkReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:24'! icon | lnk | ^(lnk := self linked) isReleased ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/question'] ifFalse: [lnk icon]! ! !TamListItemHardLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 16:52'! linkPrefix ^ '=> '! ! !TamListItemHardLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:38'! linked ^ linked! ! !TamListItemHardLinkReference methodsFor: 'accessing' stamp: 'apl 2/10/2006 08:31'! linked: anItem linked := anItem. [self localWorkspacePaneContents: anItem localWorkspacePaneContents copy] on: Error do: [:ex | self class name , '>>linked: (' , ex asString, ')']! ! !TamRootTaxonLinkReference methodsFor: 'testing' stamp: 'apl 4/18/2005 23:29'! isRootTaxonLink ^true! ! !TamRootTaxonLinkReference methodsFor: 'accessing' stamp: 'tam 1/10/2004 15:18'! managerItem ^managerItem! ! !TamRootTaxonLinkReference methodsFor: 'accessing' stamp: 'tam 1/10/2004 15:18'! managerItem: anObject managerItem := anObject! ! !TamListItemSoftLinkReference class methodsFor: 'accessing' stamp: 'tam 3/27/2004 09:32'! linkedFrom: aLinkReference | rootTaxonShortName managerItem | rootTaxonShortName := aLinkReference linkedPath first. managerItem := TamManager taxonomies detect: [:cls | cls taxonomy shortName = rootTaxonShortName] ifNone: [^ nil]. ^ managerItem taxonomy findChildReferenceFromPath: aLinkReference linkedPath allButFirst forLink: aLinkReference! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 16:49'! asStringOrText ^ self linkPrefix , self linkedPath last! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'tam 3/27/2004 13:33'! balloonText ^self longName! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'apl 4/5/2004 14:46'! linkPrefix ^ '-> '! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'tam 3/27/2004 09:34'! linked | | ^ self class linkedFrom: self! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'apl 2/10/2006 08:32'! linked: anItem linkedPath := anItem fullPathStrings. [self localWorkspacePaneContents: anItem localWorkspacePaneContents copy] on: Error do: [:ex | self class name , '>>linked: (' , ex asString , ')']! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 15:33'! linkedPath ^ linkedPath! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 14:03'! longNameOn: aStream | | aStream nextPutAll: self linkedPath first. aStream nextPutAll: self longNameFirstSep. self linkedPath allButFirst do: [:p | aStream nextPutAll: p] separatedBy: [aStream nextPutAll: self longNameSep]. ! ! !TamListItemSoftLinkReference methodsFor: 'tam taxonomy browser' stamp: 'apl 6/17/2005 18:03'! selectingFrom: aTaxonomyBrowser | lnk | ^ (lnk := self linked) ifNotNil: [lnk selectingFrom: aTaxonomyBrowser] ! ! !TamListItemSoftLinkReference methodsFor: 'accessing' stamp: 'tam 3/26/2004 16:58'! shortName ^ self linkedPath last! ! !TamListItemReference class methodsFor: 'menu' stamp: 'tam 3/17/2004 17:47'! addReferenceMenuItemToMenu: aMenu owner: anotherReference | | (self subMenuLabelSubMenu: aMenu) add: self externalLabel target: self selector: #menuAddReferenceIntoOwner: argumentList: {anotherReference}! ! !TamListItemReference class methodsFor: 'menu' stamp: 'tam 7/1/2003 16:37'! canNotBeCreatedInteractively ^ true! ! !TamListItemReference class methodsFor: 'accessing' stamp: 'apl 4/29/2004 00:50'! externalLabel ^ self printString! ! !TamListItemReference class methodsFor: 'instance creation' stamp: 'AlainPlantec 12/5/2013 11:55'! from: anObject | ref | ref := anObject withoutListWrapper. (anObject isTamListItemReference) ifTrue: [^ anObject copy]. ^ TamExploredObjectReference new itemObject: (ObjectExplorerWrapper with: ref)! ! !TamListItemReference class methodsFor: 'instance creation' stamp: 'AlainPlantec 12/5/2013 11:55'! fromTransfertMorph: aTransfertMorph | passenger | passenger := (aTransfertMorph class canUnderstand: #passenger) ifTrue: [ aTransfertMorph passenger ] ifFalse: [ aTransfertMorph ]. ^ self from: passenger! ! !TamListItemReference class methodsFor: 'accessing' stamp: 'apl 3/1/2006 11:11'! longNameFirstSep ^ ': '! ! !TamListItemReference class methodsFor: 'accessing' stamp: 'apl 7/9/2005 02:03'! longNameSep ^ '/'! ! !TamListItemReference class methodsFor: 'menu' stamp: 'apl 4/22/2005 14:28'! menuAddReferenceInto: aMenu owner: aListItemReference fromClasses: aCollectionOfListItemReferenceClasses | addable | addable := aCollectionOfListItemReferenceClasses select: [:sc | (sc class includesSelector: #canBeCreatedInteractively) and: [sc canBeCreatedInteractively]]. (addable asArray sort: [:a :b | a name < b name]) do: [:sc | sc addReferenceMenuItemToMenu: aMenu owner: aListItemReference]. aMenu submorphs size = 1 ifTrue: [^aMenu submorphs first subMenu]. ^aMenu! ! !TamListItemReference class methodsFor: 'menu' stamp: 'tam 7/1/2003 16:44'! menuAddReferenceIntoOwner: aReference aReference insertReference: self new! ! !TamListItemReference class methodsFor: 'menu' stamp: 'tam 7/1/2003 16:09'! subMenuLabel ^ nil! ! !TamListItemReference class methodsFor: 'menu' stamp: 'tam 3/17/2004 17:47'! subMenuLabelSubMenu: aMenu | updatedMenu updatedMenuItem | self subMenuLabel ifNil: [updatedMenu := aMenu] ifNotNil: [updatedMenuItem := aMenu submorphs detect: [:sm | sm hasSubMenu and: [sm contents = self subMenuLabel]] ifNone: []. updatedMenuItem ifNil: [aMenu add: self subMenuLabel subMenu: MenuMorph new]. updatedMenuItem := aMenu submorphs detect: [:sm | sm hasSubMenu and: [sm contents = self subMenuLabel]]. updatedMenu := updatedMenuItem subMenu]. ^ updatedMenu ! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 10/21/2003 12:02'! <= another ^ self asString < another asString! ! !TamListItemReference methodsFor: 'drag and drop' stamp: 'apl 4/8/2006 07:49'! acceptDroppingMorph: transferMorph copy: shouldCopy | passenger | (transferMorph respondsTo: #passenger) ifFalse: [^ false]. passenger := transferMorph passenger. owner ifNotNil: [(owner acceptDroppingMorph: transferMorph copy: shouldCopy) ifFalse: [((passenger isTamListItemReference) and: [passenger owner = owner and: [self isMoveable]]) ifTrue: [owner move: passenger before: self. ^ true]]]. ^ false! ! !TamListItemReference methodsFor: 'private' stamp: 'tam 10/1/2003 16:49'! addToParentsChain: aCollection from: aChild aCollection addFirst: self. self owner ifNotNil: [self owner addToParentsChain: aCollection from: self]! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:28'! announce: anAnnouncement self announcer announce: anAnnouncement! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:26'! announcer ^ self taxonomyRoot announcer! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 23:12'! asString ^ self asStringOrText! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 23:12'! asStringOrText ^ self listLabel! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 6/15/2004 08:41'! balloonText | | "^ (bt := self asStringOrText) ifNotNil: [bt contractTo: 100]" ^ nil! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:42'! basicSmalltalkBrowser: aTaxonomyBrowser | editor browser | editor := aTaxonomyBrowser editor ifNotNil: [(editor model isKindOf: Browser) ifTrue: [browser := editor model]]. ^ browser! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/27/2003 22:46'! browserClass ^ TamBrowser! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:19'! canBeMovedDown "true if self can be moved down (in my owner children collection)" | moveableBrothers | self isMoveable ifTrue: [self hierarchyLevel > 0 ifTrue: [moveableBrothers := self owner children select: [:i | i isMoveable]. moveableBrothers size > 1 ifTrue: [^ (moveableBrothers indexOf: self) < moveableBrothers size]]]. ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:19'! canBeMovedUp "true if self can be moved up (in my owner children collection)" | moveableBrothers | self isMoveable ifTrue: [self hierarchyLevel > 0 ifTrue: [moveableBrothers := self owner children select: [:i | i isMoveable]. moveableBrothers size > 1 ifTrue: [^ (moveableBrothers indexOf: self) > 1]]]. ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:20'! canChangeLabel "my label can be changed (not computed)" ^ true! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 6/17/2005 18:00'! canHaveCachedEditor "if true, my editor will be cached by the browser so that next editing will reuse cached editor" ^ true! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/26/2007 09:32'! children | subRefs | self showSubLists = #never ifTrue: [^ self contents] ifFalse: [subRefs := self subLists. self showSubLists = #always ifTrue: [^ subRefs]. subRefs size <= 1 ifTrue: [^ self contents]]. ^ subRefs! ! !TamListItemReference methodsFor: 'system changes handling' stamp: 'apl 12/8/2006 21:21'! commentClass: class (class respondsTo: #platypusMetaData) ifTrue: []! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/26/2003 12:50'! containedLinksTo: aListItem ^#()! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/26/2003 14:46'! contents ^#()! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 15:59'! contentsDo: aBlock self contents do: aBlock! ! !TamListItemReference methodsFor: 'copying' stamp: 'apl 5/26/2005 16:21'! copy ^super copy! ! !TamListItemReference methodsFor: 'tam taxonomy browser' stamp: 'apl 9/14/2007 07:57'! createModelHolderContaining: aMorphicModel inside: aMorph | holder | aMorphicModel model ifNil: [holder := TamListItemReferenceUtil windowWrapperClass new. holder wrapped: aMorphicModel] ifNotNil: [holder := TamListItemReferenceUtil subWindowClass new model: aMorphicModel model]. holder eat: aMorphicModel. ^ holder! ! !TamListItemReference methodsFor: 'tam taxonomy browser' stamp: 'apl 4/18/2005 18:24'! createMorphHolderContaining: aMorph | holder | holder := (PasteUpMorph new) borderWidth: 0; layoutPolicy: TableLayout new; listDirection: #leftToRight; wrapCentering: #center; listCentering: #center; cellPositioning: #center; hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: 6 @ 6; color: Color transparent; yourself. holder addMorph: aMorph. ^holder! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/26/2003 12:50'! deepContainedLinksTo: aListItem ^ #()! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:42'! deepContents | subs | subs := OrderedCollection new. subs addAll: self children. self children do: [:i | subs := subs , i deepContents]. ^ subs! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/7/2006 16:35'! deepIncludesLinkTo: aListItem self isReleased ifFalse: [(self isLinkTo: aListItem) ifTrue: [^ true] ifFalse: [self contentsDo: [:item | (item deepIncludesLinkTo: aListItem) ifTrue: [^ true]]]]. ^ false! ! !TamListItemReference methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/17/2012 21:32'! destroy localWorkspacePaneContents := nil. listLabel := nil. super destroy! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 3/29/2006 12:56'! doInternalChecking! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 4/3/2003 17:15'! editorClass ^ nil! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 14:58'! emphasisModel ^ emphasisModel! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 14:58'! emphasisModel: anEmphasisModel emphasisModel := anEmphasisModel! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 3/20/2007 10:18'! empty! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 6/24/2004 02:01'! findChildReferenceFromPath: aPathArray forLink: aLinkReference | childShortName child | aPathArray ifEmpty: [^ self]. childShortName := aPathArray first. child := self children detect: [:chl | chl shortName = childShortName and: [aLinkReference ~~ chl and: [chl isLink not]]] ifNone: [^ nil]. ^ child findChildReferenceFromPath: aPathArray allButFirst forLink: aLinkReference! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 5/25/2007 11:00'! findDeeplySuchThat: aBlock ^ self findDeeplySuchThat: aBlock visited: Set new! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 5/25/2007 10:59'! findDeeplySuchThat: aBlock visited: aSetOfRefs | res | (aSetOfRefs includes: self) ifFalse: [aSetOfRefs add: self. (aBlock value: self) ifTrue: [^ self]. self children do: [:sr | (res := sr findDeeplySuchThat: aBlock visited: aSetOfRefs) ifNotNil: [^ res]]]. ^ nil! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:30'! forceOkToChange "for some editor, in order to force reference deselection even if okToChange is false" ^ false! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:43'! fullPathAsString | str | str := ''. self fullPathStrings do: [:s | str := str , s] separatedBy: [str := str , self interPathString]. ^ str! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 3/25/2004 18:42'! fullPathStrings ^ (self parentsChain collect: [:p | p shortName]) , (Array with: self shortName)! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 3/29/2005 07:59'! hasContents ^self isReleased not and: [self children isEmpty not]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/4/2005 12:10'! haveIcon ^ true ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:43'! hierarchyLevel | own lvl | own := self owner. lvl := 0. [own notNil] whileTrue: [lvl := lvl + 1. own := own owner]. ^ lvl! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:24'! icon ^TamIcons mimeIcon: '10x10/mimetypes/file'! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 10/2/2003 23:41'! includes: anotherReference ^ anotherReference notNil and: [anotherReference isIncludeIn: self]! ! !TamListItemReference methodsFor: 'initialize/release' stamp: 'apl 3/12/2007 13:20'! initialize super initialize. showSubLists := #ifNotEmpty. localWorkspacePaneContents := ''. ! ! !TamListItemReference methodsFor: 'updating' stamp: 'tam 4/2/2003 17:47'! insertReference: anotherReference ^false! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 6/25/2003 14:23'! interPathString ^ self wrapperClass interPathString! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 4/3/2006 09:21'! internalChecking self isReleased ifFalse: [ [self doInternalChecking] on: AssertionFailure do: [:err | Transcript show: String cr , 'Warning: ' , self longName , ': "' , err printString , '"'. Beeper beep]]! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:30'! isCopyable ^ true! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/7/2006 15:43'! isIncludeIn: maybeOwner ^ maybeOwner = self or: [self owner notNil and: [self owner isIncludeIn: maybeOwner]]! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 5/26/2003 21:47'! isLink ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 5/26/2003 12:35'! isLinkTo: aListItem ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 5/26/2003 14:38'! isLinkToOneOf: aListItem ^ aListItem anySatisfy: [:i | self isLinkTo: i]! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 11/14/2003 11:36'! isLinkable ^ true! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/6/2004 03:31'! isMoveable "true if self can be moved as a child of another owner" ^ self owner isKindOf: TamTaxonReference! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/8/2005 12:18'! isReleased "evalPaneContents serve as a flag for that purpose" ^localWorkspacePaneContents isNil! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 10/2/2003 17:54'! isReleasedOrHaveReleasedOwner self isReleased ifTrue: [^ true]. self owner ifNotNil: [^ self owner isReleasedOrHaveReleasedOwner]. ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 7/16/2003 00:46'! isRemoveable ^ (self owner isKindOf: TamTaxonReference)! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 2/12/2004 16:38'! isRootTaxon ^ false ! ! !TamListItemReference methodsFor: 'testing' stamp: 'apl 4/18/2005 23:29'! isRootTaxonLink ^false! ! !TamListItemReference methodsFor: 'classification' stamp: 'apl 4/8/2006 07:47'! isTamListItemReference ^ true! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 7/8/2003 12:01'! isTaxon ^ false! ! !TamListItemReference methodsFor: 'testing' stamp: 'tam 10/11/2003 18:28'! isTaxonomyRoot ^ self taxonomyRoot = self! ! !TamListItemReference methodsFor: 'menus' stamp: 'apl 3/3/2006 08:36'! keyStroke: aCharacter from: tamuggableListMorph self isRemoveable ifTrue: [aCharacter = $x ifTrue: [^ self menuDelete]]. aCharacter = $u ifTrue: [^ self moveUp]. aCharacter = $d ifTrue: [^ self moveDown]. aCharacter = $n ifTrue: [^ self menuLink]. aCharacter = $b ifTrue: [^ self menuBrowse]. aCharacter = $i ifTrue: [^ self menuInspect]. aCharacter = $I ifTrue: [^ self menuExplore]. aCharacter = $g ifTrue: [^ self subListsSwitchMenu]! ! !TamListItemReference methodsFor: 'morphic wrapper' stamp: 'AlainPlantec 6/15/2012 14:04'! labelString ^ self longName! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 4/30/2004 17:58'! link ^ self taxonomyRoot linkListItemHere: self! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 4/30/2004 16:55'! linkListItemHere: aListItem ^ owner linkListItemHere: aListItem ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 1/16/2004 13:13'! linked ^ self! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 23:12'! listLabel ^listLabel ifNil: [self shortName]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:05'! listLabel: aStringOrNil listLabel := aStringOrNil! ! !TamListItemReference methodsFor: 'system changes handling' stamp: 'apl 5/24/2005 10:09'! localAddClass: class "Include indication that a new class was created." ^ false! ! !TamListItemReference methodsFor: 'system changes handling' stamp: 'apl 6/26/2005 11:10'! localChangeClass: class from: oldClass "Include indication that a new class was created." ^ false! ! !TamListItemReference methodsFor: 'system changes handling' stamp: 'apl 5/24/2005 09:34'! localNoteRemovalOf: class "The class is about to be removed from the system. Adjust the receiver to reflect that fact." ^false! ! !TamListItemReference methodsFor: 'system changes handling' stamp: 'apl 5/24/2005 18:06'! localRenameClass: class as: newName "Include indication that a new class was created." ^false! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:22'! localWorkspacePaneContents ^ localWorkspacePaneContents ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:20'! localWorkspacePaneContents: aStringOrText localWorkspacePaneContents ifNotNil: [localWorkspacePaneContents := aStringOrText]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:06'! longName ^ String streamContents: [:strm | self longNameOn: strm] ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 3/1/2006 10:58'! longNameFirstSep ^ self class longNameFirstSep! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:06'! longNameOn: aStream self isReleased ifTrue: [aStream nextPutAll: 'A released Tamaris reference'] ifFalse: [self owner notNil ifTrue: [ self owner longNameOn: aStream. aStream nextPutAll: self longNameSep. aStream nextPutAll: self shortName] ifFalse: [aStream nextPutAll: self shortName]]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 7/9/2005 01:57'! longNameSep ^ self class longNameSep! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/15/2010 09:01'! maxSubLevelDescent ^ 6! ! !TamListItemReference methodsFor: 'menus' stamp: 'AlainPlantec 12/11/2013 18:04'! menu: aMenu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | | self isLinkable ifTrue: [aMenu add: 'link (n)' target: self selector: #menuLink. aMenu addLine]. self isRemoveable ifTrue: [aMenu add: 'remove (x)' target: self selector: #menuDelete. aMenu addLine]. self isMoveable ifTrue: [self canBeMovedUp ifTrue: [aMenu add: 'move up (u)' target: self selector: #moveUp]. self canBeMovedDown ifTrue: [aMenu add: 'move down (d)' target: self selector: #moveDown]. aMenu addLine]. self isRootTaxon ifFalse: [aMenu add: 'update editor' target: self selector: #reinitializeEditor]. (self owner notNil and: [self canChangeLabel]) ifTrue: [aMenu add: 'change label' target: self selector: #menuRelabel]. aMenu add: 'browse (b)' target: self selector: #menuBrowse. self subListsDefsArray isEmpty ifFalse: [aMenu addLine. aMenu add: 'sublists...' subMenu: self subListsSwitchMenu target: self selector: nil argumentList: #()]. aMenu addLine. self specificMenu: aMenu shifted: b. ^ aMenu! ! !TamListItemReference methodsFor: 'menus' stamp: 'tam 11/11/2003 12:14'! menuBrowse ^ self browserClass openOnReference: self! ! !TamListItemReference methodsFor: 'menus' stamp: 'apl 3/21/2005 09:52'! menuDelete | message | message := ' really remove ? '. (self confirm: message) ifTrue: [self remove. ^ true]. ^ false! ! !TamListItemReference methodsFor: 'menus' stamp: 'tam 5/31/2003 00:26'! menuExplore ^ self explore! ! !TamListItemReference methodsFor: 'menus' stamp: 'tam 5/31/2003 00:26'! menuInspect ^ self inspect! ! !TamListItemReference methodsFor: 'menus' stamp: 'apl 4/30/2004 17:20'! menuLink ^ self link! ! !TamListItemReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:51'! menuRelabel | oldname newname | oldname := self listLabel. (newname := UIManager default request: 'new name ?' translated initialAnswer: (oldname ifNil: [''])) trimBoth ifEmpty: [^ false] ifNotEmpty: [:v | newname ~= oldname ifTrue: [^ self relabelWith: newname]]! ! !TamListItemReference methodsFor: 'menus' stamp: 'tam 2/18/2004 00:50'! modelSpecificMenu: aMenu shifted: b ^ nil! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 3/3/2006 08:34'! moveDown ^ self owner moveDownReference: self! ! !TamListItemReference methodsFor: 'updating' stamp: 'tam 5/23/2003 23:46'! moveDownReference: aFirstLevelReference ^ false! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 3/3/2006 08:34'! moveUp ^ self owner moveUpReference: self! ! !TamListItemReference methodsFor: 'updating' stamp: 'tam 5/23/2003 23:54'! moveUpReference: aFirstLevelReference ^ false! ! !TamListItemReference methodsFor: 'morphic wrapper' stamp: 'tam 10/6/2003 14:25'! newEditor ^ nil! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 3/27/2004 23:03'! numberOfChildren ^ self children size! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 13:26'! on: anAnnounce send: aSelector to: aReceiver ^ (self announcer weak on: anAnnounce send: aSelector to: aReceiver) makeWeak ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 4/3/2003 18:41'! owner ^ owner! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 7/5/2004 19:05'! owner: anotherReference owner ifNotNil: [owner privateSilentlyRemove: self]. owner := anotherReference. ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 14:08'! parentTaxon "Return nearest parent taxon" self isTaxon ifTrue: [^ self] ifFalse: [ self parentsChain reverseDo: [:p | p isTaxon ifTrue: [^p]]]. ^nil! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:44'! parentsChain "Return a collection of all my parents, up until root. The first element is my parent, while the root is the last." | parents | parents := OrderedCollection new. self owner ifNotNil: [self owner addToParentsChain: parents from: self]. ^ parents! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/21/2003 11:59'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 10:54'! preferredColor ^ self emphasisModel ifNotNil: [:em | em textColor]! ! !TamListItemReference methodsFor: 'printing' stamp: 'tam 9/17/2003 11:53'! printOn: aStream aStream nextPutAll: '['. self longName ifNotNil: [aStream nextPutAll: self longName]. aStream nextPutAll: ']'! ! !TamListItemReference methodsFor: 'private' stamp: 'apl 7/5/2004 18:57'! privateSilentlyRemove: aReference! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 5/31/2003 00:26'! receiver ^ self ! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/8/2012 18:33'! refresh self refreshedData ifTrue: [ TamManager changed: self. ^ true]. ^ false! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 5/24/2005 08:24'! refreshedData self children. ^ true! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 00:29'! reinitializeEditor self announce: (TamReinitializeEditor new itemReference: self) ! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 00:22'! reinitializeEditor: aTamBrowser (aTamBrowser editorModel isNil or: [aTamBrowser editorModel okToChange]) ifTrue: [ aTamBrowser destroyEditorFor: self. self == aTamBrowser unwrappedSelection ifTrue: [ aTamBrowser noteNewSelection: self. TamManager changed: self]]! ! !TamListItemReference methodsFor: 'updating' stamp: 'tam 6/11/2003 10:03'! relabelWith: newName self listLabel: newName. TamManager changed: self! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 22:04'! remove self removeSilently. self treeHasChanged ! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 4/13/2005 16:21'! removeChild: aReference self removeChildSilently: aReference. TamManager changed: self! ! !TamListItemReference methodsFor: 'updating' stamp: 'tam 7/22/2003 14:07'! removeChildSilently: aReference ! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 3/30/2006 10:32'! removeSilently Cursor wait showWhile: [owner ifNotNil: [owner removeChildSilently: self]. self destroy]! ! !TamListItemReference methodsFor: 'searching' stamp: 'apl 5/25/2007 11:06'! selectDeeplySuchThat: aBlock ^ self selectDeeplySuchThat: aBlock visited: Set new ! ! !TamListItemReference methodsFor: 'searching' stamp: 'apl 5/25/2007 11:11'! selectDeeplySuchThat: aBlock visited: aSetOfRefs | res chil | res := OrderedCollection new. (aSetOfRefs includes: self) ifFalse: [aSetOfRefs add: self. (aBlock value: self) ifTrue: [res add: self]. (chil := self children) ifNotNil: [chil do: [:sr | res := res , (sr selectDeeplySuchThat: aBlock visited: aSetOfRefs )]]]. ^ res! ! !TamListItemReference methodsFor: 'searching' stamp: 'apl 10/6/2004 09:53'! selectSuchThat: aBlock | res | res := OrderedCollection new. self children ifNotNil: [ self children do: [:chld | (aBlock value: chld) ifTrue: [res add: chld]]]. ^ res! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 3/18/2005 13:14'! selected ^false! ! !TamListItemReference methodsFor: 'tam taxonomy browser' stamp: 'AlainPlantec 1/14/2013 18:07'! selectingFrom: aTaxonomyBrowser | tempEditor editor | (editor := aTaxonomyBrowser editorFor: self) ifNil: [ (tempEditor := self newEditor) ifNotNil: [(tempEditor isMorph and: [tempEditor isMorphicModel]) ifTrue: [editor := self createModelHolderContaining: tempEditor inside: aTaxonomyBrowser editorRow. self announcer unsubscribe: editor. self announcer unsubscribe: aTaxonomyBrowser. self on: TamForceTreeUpdating send: #treeUpdated: to: editor. self on: TamForceTreeUpdating send: #updateTree: to: aTaxonomyBrowser. self on: TamReinitializeEditor send: #reinitializeAnnounce: to: aTaxonomyBrowser. self canHaveCachedEditor ifTrue: [aTaxonomyBrowser editor: editor for: self]. aTaxonomyBrowser editorRow addMorph: editor fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). self updateEditor: aTaxonomyBrowser] ifFalse: [editor := self createMorphHolderContaining: tempEditor. editor bounds: aTaxonomyBrowser editorRow bounds. self canHaveCachedEditor ifTrue: [aTaxonomyBrowser editor: editor for: self]. aTaxonomyBrowser editorRow addMorphCentered: editor. self updateEditor: aTaxonomyBrowser]]] ifNotNil: [aTaxonomyBrowser editorRow addMorph: editor fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1))]. (editor notNil and: [editor model notNil]) ifTrue: [ editor model modelWakeUpIn: editor. editor startStepping. editor model addDependent: self]. aTaxonomyBrowser removeSpecificButtons. aTaxonomyBrowser addSpecificButtonsFor: self. aTaxonomyBrowser historyAddItem: self. "TamManager addToRecents: self." self internalChecking. ^ editor! ! !TamListItemReference methodsFor: 'accessing' stamp: 'apl 4/29/2004 00:49'! shortName ^ listLabel ifNil: [self class externalLabel]! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 14:55'! showSubLists ^ showSubLists! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 19:21'! showSubLists: aSymbol "aSymbol is (#always | #never | #ifNotEmpty) " showSubLists := aSymbol! ! !TamListItemReference methodsFor: 'menus' stamp: 'apl 4/18/2005 19:59'! specificButtonsColumn: aTaxonomyBrowser inAlignment: aButtonsAlignment ^nil! ! !TamListItemReference methodsFor: 'menus' stamp: 'tam 3/29/2004 13:28'! specificMenu: aMenu shifted: aBoolean | editorModel modelMenu | (editorModel := aMenu defaultTarget editorModel) ifNotNil: [modelMenu := MenuMorph new. modelMenu defaultTarget: editorModel. (self modelSpecificMenu: modelMenu shifted: aBoolean) ifNotNil: [ aMenu addLine. aMenu add: 'item menu ...' subMenu: modelMenu target: editorModel selector: nil argumentList: #()]]! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 19:28'! subLists | subs | subs := OrderedCollection new. self subListsDefsArray do: [:s | ((self showSubLists = #always) or: [self showSubLists = #ifNotEmpty and: [(self perform: s first) notEmpty]]) ifTrue: [ subs add: (self subListsReferenceClass owner: self listSelector: s first label: s second)]]. ^ subs! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 15:08'! subListsDefsArray "return an array of array. Each element array is for one sublist and contains first a selector for sublist accessing and second a label for the sublist. Example in platypus in PlatypusSchemaReference : #(#(#typesReferences #types ) #(#entitiesReferences #entities ) #(#functionsReferences #functions ) #(#proceduresReferences #procedures ) #(#rulesReferences #rules ))" ^ #() ! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 15:09'! subListsReferenceClass ^Smalltalk at: self subListsReferenceClassName asSymbol! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 16:56'! subListsReferenceClassName ^#TamSubListReference! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 19:15'! subListsSwitchMenu | menu | menu := MenuMorph new. menu add: 'always shown' target: self selector: #showSubLists: argument: #always. menu add: 'shown if not empty' target: self selector: #showSubLists: argument: #ifNotEmpty. menu add: 'never shown' target: self selector: #showSubLists: argument: #never. ^menu ! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 14:20'! subReferencesOfClass: subReferenceClass ^(self contents asArray select: [:sr | sr isReleased not and: [sr class = subReferenceClass]]) sort: [:a :b | a shortName < b shortName]! ! !TamListItemReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 14:20'! subReferencesOfKind: subReferenceClass ^(self contents asArray select: [:sr | sr isReleased not and: [sr isKindOf: subReferenceClass]]) sort: [:a :b | a shortName < b shortName]! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:23'! taxonomyRoot self owner isNil ifTrue: [^self]. ^ self owner taxonomyRoot ! ! !TamListItemReference methodsFor: 'accessing' stamp: 'tam 4/2/2003 01:24'! tempNames ^ #()! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:41'! treeHasChanged self announce: (TamForceTreeUpdating new sourceHandler: self)! ! !TamListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:41'! treeHasChangedFrom: anEditor self announce: (TamForceTreeUpdating new sourceHandler: self; codeMorph: anEditor)! ! !TamListItemReference methodsFor: 'tam taxonomy browser' stamp: 'apl 9/27/2007 07:17'! unSelectingFrom: aTaxonomyBrowser | editor | editor := aTaxonomyBrowser editor. aTaxonomyBrowser hasUnacceptedEdits ifTrue: [aTaxonomyBrowser editor: editor for: self]. (aTaxonomyBrowser haveEditorFor: self) ifFalse: [ editor ifNotNil: [editor stopStepping. editor model ifNotNil: [editor model windowIsClosing; destroy]. editor isMorph ifTrue: [editor removeAllMorphs. editor delete]]]. editor ifNotNil: [editor model ifNotNil: [editor model removeDependent: self]]. aTaxonomyBrowser editorRow removeAllMorphs; updatePanesFromSubmorphs. aTaxonomyBrowser removeSpecificButtons! ! !TamListItemReference methodsFor: 'updating' stamp: 'apl 4/20/2004 10:27'! updateEditor: aTaxonomyBrowser ^ true! ! !TamListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:46'! wrapperClass ^TamListItemWrapper! ! !TamExploredObjectReference class methodsFor: 'menus' stamp: 'tam 10/6/2003 12:00'! canBeCreatedInteractively ^ true! ! !TamExploredObjectReference class methodsFor: 'accessing' stamp: 'tam 10/6/2003 12:00'! externalLabel ^ 'an explored object'! ! !TamExploredObjectReference class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/26/2012 10:34'! subMenuLabel ^ 'an object'! ! !TamExploredObjectReference methodsFor: 'morphic wrapper' stamp: 'tam 10/6/2003 12:03'! newEditor ^ ObjectExplorer new explorerFor: self itemObject withoutListWrapper! ! !TamObjectReference class methodsFor: 'menus' stamp: 'alain.plantec 2/3/2009 12:06'! menuAddReferenceIntoOwner: aReference | expr result receiver newRef | expr := UIManager default request: 'Expression ' translated initialAnswer: 'self '. expr isEmpty ifFalse: [receiver := aReference. result := receiver withoutListWrapper class evaluatorClass new evaluate: (ReadStream on: expr) in: nil to: receiver withoutListWrapper notifying: nil ifFail: ["fix this" ^ false]. newRef := self new itemObject: result. aReference insertReference: newRef]! ! !TamObjectReference methodsFor: 'accessing' stamp: 'tam 7/1/2003 16:49'! deepContents ^#()! ! !TamObjectReference methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:39'! destroy itemObject := nil. super destroy! ! !TamObjectReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:24'! icon ^TamIcons mimeIcon: '10x10/mimetypes/object'! ! !TamObjectReference methodsFor: 'accessing' stamp: 'tam 6/11/2003 12:00'! itemObject ^ itemObject ! ! !TamObjectReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:52'! itemObject: anObject itemObject := anObject! ! !TamObjectReference methodsFor: 'accessing' stamp: 'tam 6/11/2003 11:56'! listLabel ^ self itemObject asString! ! !TamSubListReference class methodsFor: 'instance creation' stamp: 'apl 5/26/2005 13:44'! owner: anExpressReference listSelector: aSymbol label: aString ^self new owner: anExpressReference listSelector: aSymbol label: aString! ! !TamSubListReference methodsFor: 'comparing' stamp: 'apl 5/26/2005 14:26'! = other ^(other isKindOf: self class) and: [self owner = other owner and: [self listLabel = other listLabel]]! ! !TamSubListReference methodsFor: 'morphic wrapper' stamp: 'apl 5/26/2005 13:59'! asMorph ^(self codeHolderClass sourceHandler: self) openAsMorph! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 13:56'! children ^ (self owner notNil and: [listSelector notNil]) ifTrue: [(self owner perform: listSelector)] ifFalse: [#()]! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:30'! codeHolderClass ^Smalltalk at: self codeHolderClassName asSymbol! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:59'! codeHolderClassName ^self subclassResponsibility! ! !TamSubListReference methodsFor: 'comparing' stamp: 'apl 5/26/2005 13:51'! hash ^self owner hash + self listLabel hash! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:42'! icon ^TamIcons mimeIcon: '10x10/mimetypes/group'! ! !TamSubListReference methodsFor: 'testing' stamp: 'apl 5/26/2005 13:42'! includes: anotherReference ^ self owner includes: anotherReference ! ! !TamSubListReference methodsFor: 'code updating' stamp: 'apl 5/26/2005 13:42'! insertReference: anotherReference ^ self owner insertReference: anotherReference ! ! !TamSubListReference methodsFor: 'testing' stamp: 'apl 5/26/2005 13:42'! isEditable ^ false! ! !TamSubListReference methodsFor: 'testing' stamp: 'apl 5/26/2005 13:42'! isRemoveable ^ false! ! !TamSubListReference methodsFor: 'menus' stamp: 'apl 5/26/2005 13:52'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph. ! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:45'! listSelector ^ listSelector! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:44'! listSelector: aSymbol listSelector := aSymbol ! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 1/30/2007 11:39'! owner: aReference listSelector: aSymbol label: aString self owner: aReference. self listSelector: aSymbol. self listLabel: aString! ! !TamSubListReference methodsFor: 'menus' stamp: 'alain.plantec 2/3/2009 12:27'! remove ^ self inform: 'unremoveable item!!' translated! ! !TamSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:50'! shortName ^'[' , self listLabel , ']'! ! !TamLinksTaxonReference class methodsFor: 'menus' stamp: 'apl 7/27/2005 00:40'! canBeCreatedInteractively ^ false! ! !TamLinksTaxonReference class methodsFor: 'accessing' stamp: 'tam 10/24/2003 17:12'! externalLabel ^ 'a links taxon'! ! !TamLinksTaxonReference methodsFor: 'drag and drop' stamp: 'apl 4/8/2006 07:49'! acceptDroppingMorph: aTransfertMorph copy: shouldCopy | passenger | passenger := (aTransfertMorph respondsTo: #passenger) ifTrue: [aTransfertMorph passenger] ifFalse: [aTransfertMorph]. (passenger isTamListItemReference) ifFalse: [^ false]. ^ self insertReference: passenger! ! !TamLinksTaxonReference methodsFor: 'updating' stamp: 'tam 3/30/2004 11:25'! cleanDuplicates | child toBeKept | child := self children. toBeKept := OrderedCollection new. child do: [:chl | (toBeKept anySatisfy: [:k | k linkedPath = chl linkedPath]) ifFalse: [toBeKept add: chl]]. (child difference: toBeKept) reverseDo: [:e | e removeSilently]. TamManager changed: self! ! !TamLinksTaxonReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:23'! icon ^TamIcons mimeIcon: '10x10/mimetypes/links_taxon'! ! !TamLinksTaxonReference methodsFor: 'updating' stamp: 'apl 7/26/2005 15:47'! insertReference: aReference | newLnk | (aReference owner ~= self and: [aReference ~= self]) ifTrue: [self contents detect: [:lnk | lnk isLinkTo: aReference] ifNone: [newLnk := TamListItemSoftLinkReference from: aReference. newLnk owner: self. self contents add: newLnk. ^ true]]. ^ false! ! !TamLinksTaxonReference methodsFor: 'updating' stamp: 'apl 7/26/2005 13:34'! removeUnlinked | toBeRemoved lnk | toBeRemoved := self children select: [:ch | (lnk := ch linked) isNil or: [lnk isReleased]]. toBeRemoved isEmpty ifFalse: [ toBeRemoved reverseDo: [:e | e removeSilently]. TamManager changed: self]! ! !TamLinksTaxonReference methodsFor: 'menus' stamp: 'tam 3/29/2004 14:00'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | | menu addLine. menu add: 'remove unlinked' target: self selector: #removeUnlinked. super specificMenu: menu shifted: b. ! ! !TamPublicLinksTaxonReference class methodsFor: 'menus' stamp: 'apl 7/27/2005 00:40'! canBeCreatedInteractively ^ true! ! !TamPublicLinksTaxonReference methodsFor: 'updating' stamp: 'apl 7/27/2005 00:42'! insertReference: aReference | result | (result := super insertReference: aReference ) ifTrue: [TamManager changed: self]. ^ result! ! !TamPasteUpTaxonReference class methodsFor: 'accessing' stamp: 'apl 3/9/2006 16:31'! canBeCreatedInteractively ^ true! ! !TamPasteUpTaxonReference class methodsFor: 'accessing' stamp: 'apl 3/9/2006 16:31'! externalLabel ^ 'a paste up taxon'! ! !TamPasteUpTaxonReference methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:44'! newEditor ^ self pasteUp embeddedInMorphicWindowLabeled: ''! ! !TamPasteUpTaxonReference methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:44'! pasteUp ^ pasteUp ifNil: [pasteUp := PasteUpMorph new]! ! !TamPasteUpTaxonReference methodsFor: 'updating' stamp: 'apl 3/10/2006 08:38'! reinitializeEditor! ! !TamRootTaxonReference class methodsFor: 'filein/fileout' stamp: 'tam 2/13/2004 12:23'! tamarisFileNameSuffix ^ 'tam' ! ! !TamRootTaxonReference class methodsFor: 'filein/fileout' stamp: 'AlainPlantec 11/18/2010 10:32'! tamarisRepositoryName ^ repositoryName ifNil: [repositoryName := 'Tamaris-DB'] ! ! !TamRootTaxonReference class methodsFor: 'filein/fileout' stamp: 'alain.plantec 1/20/2009 10:42'! tamarisRepositoryName: aDirName repositoryName := aDirName ! ! !TamRootTaxonReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:26'! announcer ^ announcer ifNil: [announcer := Announcer new]! ! !TamRootTaxonReference methodsFor: 'copying' stamp: 'tam 2/24/2004 11:33'! copy | copy | copy := super copy. copy managerItem: nil. ^ copy ! ! !TamRootTaxonReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:25'! icon ^TamIcons mimeIcon: '10x10/mimetypes/root_taxon'! ! !TamRootTaxonReference methodsFor: 'testing' stamp: 'tam 2/12/2004 16:39'! isRootTaxon ^ true ! ! !TamRootTaxonReference methodsFor: 'accessing' stamp: 'apl 4/7/2006 14:04'! longNameOn: aStream aStream nextPutAll: self shortName. aStream nextPutAll: self longNameFirstSep! ! !TamRootTaxonReference methodsFor: 'accessing' stamp: 'tam 1/10/2004 14:45'! managerItem ^managerItem! ! !TamRootTaxonReference methodsFor: 'accessing' stamp: 'tam 1/10/2004 14:45'! managerItem: anObject managerItem := anObject! ! !TamTaxonReference class methodsFor: 'menus' stamp: 'tam 7/1/2003 16:24'! canBeCreatedInteractively ^ true! ! !TamTaxonReference class methodsFor: 'accessing' stamp: 'tam 4/5/2003 15:34'! externalLabel ^ 'a taxon'! ! !TamTaxonReference class methodsFor: 'menus' stamp: 'apl 4/28/2004 12:32'! menuAddReferenceIntoOwner: aReference | newRef | newRef := self taxonLabel: self externalLabel. aReference insertReference: newRef! ! !TamTaxonReference class methodsFor: 'accessing' stamp: 'tam 11/16/2003 14:53'! subMenuLabel ^ 'a taxon'! ! !TamTaxonReference class methodsFor: 'instance creation' stamp: 'tam 7/16/2003 11:46'! taxonLabel: aString ^ self new listLabel: aString! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'AlainPlantec 12/5/2013 11:08'! acceptDroppingMorph: aTransfertMorph copy: shouldCopy | passenger copyIt | copyIt := shouldCopy. passenger := (aTransfertMorph respondsTo: #passenger) ifTrue: [ aTransfertMorph passenger ] ifFalse: [ aTransfertMorph ]. (passenger isKindOf: String) ifFalse: [ passenger isTamListItemReference ifTrue: [ copyIt := copyIt or: [ passenger isRemoveable not ] ] ]. ^ self insertLinkableListItemFromTransfertMorph: aTransfertMorph copy: copyIt! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'tam 4/10/2003 10:19'! children ^ self contents! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'AlainPlantec 11/18/2010 10:33'! containedLinksTo: aListItemOrACollectionOfListItems | listItems | self isReleased ifFalse: [ (aListItemOrACollectionOfListItems isKindOf: Collection) ifTrue: [listItems := aListItemOrACollectionOfListItems] ifFalse: [listItems := Array with: aListItemOrACollectionOfListItems]. ^ self contents select: [:i | i isLinkToOneOf: listItems]]. ^#()! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'tam 4/10/2003 10:18'! contents ^contents! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'tam 4/10/2003 10:18'! contents: aCollection contents := aCollection! ! !TamTaxonReference methodsFor: 'copying' stamp: 'AlainPlantec 11/18/2010 10:34'! copy | copy sr | copy := super copy. copy contents: (self contents collect: [:r | sr := r copy. sr owner: copy. sr]). ^ copy! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'apl 7/6/2004 10:35'! copyListItemHereFromTransfertMorph: aTransfertMorph | aReference theCopy | aReference := TamListItemReference fromTransfertMorph: aTransfertMorph. aReference isCopyable ifTrue: [theCopy := aReference copy owner: nil. ^ self insertReference: theCopy] ifFalse: [ self inform: 'can''t make a copy of it here'. ^ false]! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'AlainPlantec 11/18/2010 10:34'! deepContainedLinksTo: aListItemOrACollectionOfListItems | links | links := self containedLinksTo: aListItemOrACollectionOfListItems. self children do: [:i | links := links , (i deepContainedLinksTo: aListItemOrACollectionOfListItems)]. ^ links! ! !TamTaxonReference methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:38'! destroy self children ifNotNil: [self children do: [:child | child destroy]]. contents := nil. super destroy! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'apl 4/22/2005 02:25'! icon ^TamIcons mimeIcon: '10x10/mimetypes/taxon'! ! !TamTaxonReference methodsFor: 'accessing' stamp: 'AlainPlantec 11/18/2010 10:34'! includesLinksTo: aListItemOrACollectionOfListItems | listItems | self isReleased ifFalse: [(aListItemOrACollectionOfListItems isKindOf: Collection) ifTrue: [listItems := aListItemOrACollectionOfListItems] ifFalse: [listItems := Array with: aListItemOrACollectionOfListItems]. ^ self contents anySatisfy: [:i | i isLinkToOneOf: listItems]]. ^ false! ! !TamTaxonReference methodsFor: 'initialize/release' stamp: 'tam 4/10/2003 10:17'! initialize super initialize. contents := OrderedCollection new! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'apl 9/27/2007 05:03'! insertLinkableListItemFromTransfertMorph: aTransfertMorph copy: shouldCopy shouldCopy ifTrue: [^ self copyListItemHereFromTransfertMorph: aTransfertMorph] ifFalse: [^ self moveListItemHereFromTransfertMorph: aTransfertMorph]! ! !TamTaxonReference methodsFor: 'updating' stamp: 'apl 7/26/2005 15:11'! insertReference: anotherReference anotherReference owner == self ifFalse: [anotherReference owner: self. self contents add: anotherReference. TamManager changed: self. ^ true]. ^ false! ! !TamTaxonReference methodsFor: 'updating' stamp: 'tam 10/17/2003 15:01'! insertReferenceSilently: anotherReference anotherReference owner: self. self contents add: anotherReference. ^ true! ! !TamTaxonReference methodsFor: 'testing' stamp: 'tam 7/8/2003 12:01'! isTaxon ^ true! ! !TamTaxonReference methodsFor: 'menus' stamp: 'AlainPlantec 5/16/2012 22:39'! keyStroke: aCharacter from: tamuggableListMorph aCharacter = $e ifTrue: [^ self menuRemoveAll]. ^ super keyStroke: aCharacter from: tamuggableListMorph! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'apl 4/30/2004 16:51'! linkListItemHere: aListItem | link | link := TamListItemSoftLinkReference from: aListItem. ^ self insertReference: link! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'apl 4/30/2004 16:52'! linkListItemHereFromTransfertMorph: aTransfertMorph | aPassenger | (aTransfertMorph class canUnderstand: #passenger) ifTrue: [aPassenger := aTransfertMorph passenger] ifFalse: [^ false]. ^ self linkListItemHere: aPassenger ! ! !TamTaxonReference methodsFor: 'menus' stamp: 'AlainPlantec 5/20/2012 13:12'! menuAddReference | menuAddReference | menuAddReference := MenuMorph new. ^ self menuAddReferenceInto: menuAddReference! ! !TamTaxonReference methodsFor: 'menus' stamp: 'apl 4/22/2005 14:29'! menuAddReferenceInto: aMenu | classes | classes := OrderedCollection with: TamListItemReference. classes addAll: TamListItemReference allSubclasses. ^TamListItemReference menuAddReferenceInto: aMenu owner: self fromClasses: classes.! ! !TamTaxonReference methodsFor: 'menus' stamp: 'AlainPlantec 5/16/2012 22:38'! menuRemoveAll | message | message := 'remove all ? '. (self confirm: message) ifTrue: [^ self removeAll]! ! !TamTaxonReference methodsFor: 'updating' stamp: 'apl 5/31/2005 23:22'! move: aReference before: anotherReference aReference ~= anotherReference ifTrue: [ self contents remove: aReference. self contents add: aReference before: anotherReference. TamManager changed: self]! ! !TamTaxonReference methodsFor: 'updating' stamp: 'apl 4/8/2004 15:52'! moveDownReference: aReference | index moveableContents | moveableContents := self contents select: [:i | i isMoveable]. index := moveableContents indexOf: aReference. index < moveableContents size ifTrue: [index := contents indexOf: aReference. contents swap: index with: index + 1. TamManager changed: aReference. ^ true]. ^ false! ! !TamTaxonReference methodsFor: 'drag and drop' stamp: 'alain.plantec 2/3/2009 12:29'! moveListItemHereFromTransfertMorph: aTransfertMorph | aPassenger | aPassenger := (aTransfertMorph class canUnderstand: #passenger) ifTrue: [aTransfertMorph passenger] ifFalse: [aTransfertMorph]. (aPassenger isTamListItemReference and: [aPassenger isLink not]) ifTrue: [(aPassenger includes: self) ifTrue: [self inform: 'Can''t move myself inside myself' translated. ^ false]]. (aPassenger respondsTo: #isMoveable) ifTrue: [aPassenger isMoveable ifTrue: [^ self insertReference: aPassenger] ifFalse: [self inform: 'can''t move it here' translated. ^ false]]. ^ false! ! !TamTaxonReference methodsFor: 'updating' stamp: 'apl 4/8/2004 15:51'! moveUpReference: aReference | index moveableContents | moveableContents := self contents select: [:i | i isMoveable]. index := moveableContents indexOf: aReference. index > 1 ifTrue: [index := contents indexOf: aReference. contents swap: index with: index - 1. TamManager changed: aReference. ^ true]. ^ false! ! !TamTaxonReference methodsFor: 'private' stamp: 'apl 7/5/2004 18:57'! privateSilentlyRemove: aReference contents remove: aReference ifAbsent: []. ! ! !TamTaxonReference methodsFor: 'updating' stamp: 'AlainPlantec 5/16/2012 22:36'! removeAll self children do: [:ch | ch destroy]. [self contents isEmpty] whileFalse: [self contents removeLast]. TamManager changed: self! ! !TamTaxonReference methodsFor: 'updating' stamp: 'tam 5/26/2003 12:47'! removeChild: aReference self contents remove: aReference ifAbsent: []. super removeChild: aReference! ! !TamTaxonReference methodsFor: 'updating' stamp: 'apl 7/7/2004 18:54'! removeChildSilently: aReference self contents ifNotNil: [self contents remove: aReference ifAbsent: []]. super removeChildSilently: aReference! ! !TamTaxonReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 21:31'! removeSilently contents ifNotNil: [ contents do: [:c | c removeSilently. c destroy]]. super removeSilently! ! !TamTaxonReference methodsFor: 'menus' stamp: 'AlainPlantec 5/16/2012 22:39'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | menuAddReference | self isRootTaxon ifTrue: [menu add: 'freeze' target: menu defaultTarget taxonomyBrowser selector: #freeze]. menu add: 'empty (e)' target: self selector: #menuRemoveAll. menu addLine. menuAddReference := self menuAddReference. menu add: 'add reference on ...' subMenu: menuAddReference target: self selector: nil argumentList: #()! ! !TamWorkspaceTaxonReference class methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:45'! canBeCreatedInteractively ^ true! ! !TamWorkspaceTaxonReference class methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:47'! externalLabel ^ 'a workspace taxon'! ! !TamWorkspaceTaxonReference methodsFor: 'accessing' stamp: 'apl 9/26/2007 19:15'! contents: textOrString self workspace contents: textOrString ! ! !TamWorkspaceTaxonReference methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:46'! newEditor ^ self workspace embeddedInMorphicWindowLabeled: ''! ! !TamWorkspaceTaxonReference methodsFor: 'updating' stamp: 'apl 3/10/2006 08:45'! reinitializeEditor! ! !TamWorkspaceTaxonReference methodsFor: 'accessing' stamp: 'apl 3/10/2006 08:48'! workspace ^ workspace ifNil: [workspace := TamStringHolder new]! ! !TamListItemReferenceUtil class methodsFor: 'subwindow' stamp: 'AlainPlantec 5/2/2012 16:32'! subFrameBorderDelta ^ 4! ! !TamListItemReferenceUtil class methodsFor: 'subwindow' stamp: 'apl 6/29/2007 11:13'! subWindowClass ^ TamPaneMorph! ! !TamListItemReferenceUtil class methodsFor: 'subwindow' stamp: 'apl 6/29/2007 11:14'! windowWrapperClass ^ TamPaneMorphWrapper! ! !TamManager class methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:38'! addSelection: aCollection self copyPasteBuffer addAll: (aCollection select: [:item | item isReleased not])! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 2/16/2004 19:14'! allTaxonomiesNamed: anIdent ^ self allTaxonomiesSuchThat: [:c | c taxonomy listLabel = anIdent] ! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 7/28/2003 09:51'! allTaxonomiesSuchThat: aBlock ^ self taxonomies select: [ :c | (aBlock value: c)] ! ! !TamManager class methodsFor: 'accessing' stamp: 'apl 6/29/2007 11:08'! buttonExtent ^ Tamaris buttonExtent! ! !TamManager class methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:37'! copyPasteBuffer ^ CopyPasteBuffer ! ! !TamManager class methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:22'! copyPasteBuffer: aSet CopyPasteBuffer := aSet! ! !TamManager class methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:37'! copyPasteBufferList ^ self copyPasteBuffer select: [:item | item isReleased not]! ! !TamManager class methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:20'! copySelection: aCollection self copyPasteBuffer: WeakSet new. self addSelection: aCollection! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 2/19/2004 16:37'! droppringArea ^ DroppingArea ifNil: [ DroppingArea := AlignmentMorph newVariableTransparentSpacer. DroppingArea setBalloonText: 'here is a dropping area in which you can drop some morphs (typically some buttons)'. DroppingArea dropEnabled: true. DroppingArea borderWidth: 0. DroppingArea useSquareCorners. DroppingArea color: Color white] ! ! !TamManager class methodsFor: 'system changes handling' stamp: 'AlainPlantec 12/5/2013 09:14'! event: anEvent "Hook for SystemChangeNotifier" ! ! !TamManager class methodsFor: 'accessing' stamp: 'apl 3/2/2007 11:33'! fromFileListTaxonomy ^ ((self taxonomyNamed: TamManagerItem fromFileListTaxonName) ifNil: [self newTaxonomyNamed: TamManagerItem fromFileListTaxonName]) taxonomy! ! !TamManager class methodsFor: 'preferences' stamp: 'tam 4/15/2003 14:17'! initialExtent ^ InitialExtent ! ! !TamManager class methodsFor: 'preferences' stamp: 'AlainPlantec 10/7/2010 21:53'! initialExtent: aPoint InitialExtent := aPoint! ! !TamManager class methodsFor: 'class initialization' stamp: 'AlainPlantec 12/5/2013 10:55'! initialize "self initialize" self breakDependents. Taxonomies := SortedCollection sortBlock: [:a :b | a asStringOrText first = $< or: [a asStringOrText < b asStringOrText]]. Taxonomies add: TamManagerItem default. CopyPasteBuffer := Set new. InitialExtent := 600 @ 500. ! ! !TamManager class methodsFor: 'accessing' stamp: 'apl 4/18/2005 23:06'! listWidth ^ ListWidth ifNil: [ListWidth := 120]! ! !TamManager class methodsFor: 'accessing' stamp: 'apl 4/18/2005 23:09'! listWidth: anInteger ListWidth := anInteger! ! !TamManager class methodsFor: 'system changes handling' stamp: 'apl 6/10/2005 14:33'! logChange: message LogSystemChanges ifTrue: [Transcript show: '[TamManager: ' , message , ']' , String cr]! ! !TamManager class methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 13:26'! mainButtonLabel ^'Platypus'! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 4/15/2003 13:55'! managerOpenCommandName ^ 'Tam taxonomies manager'! ! !TamManager class methodsFor: 'accessing' stamp: 'apl 7/26/2005 12:40'! maxRecentsSize ^ 40! ! !TamManager class methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:06'! newTaxonomy: aNewTaxonomy self taxonomies add: aNewTaxonomy. self sort. self changed: #taxonomies. ^ aNewTaxonomy! ! !TamManager class methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:13'! newTaxonomyNamed: anIdent ^ self newTaxonomy: (TamManagerItem rootNamed: anIdent)! ! !TamManager class methodsFor: 'instance creation' stamp: 'apl 4/19/2005 17:10'! open "self open" | newTaxonomiesManager | newTaxonomiesManager := self new. TamManager addDependent: newTaxonomiesManager. ^newTaxonomiesManager buildMainWindow openInWorld! ! !TamManager class methodsFor: 'instance creation' stamp: 'tam 6/5/2003 12:33'! openInWindow: aWindow ^ self openInWindow: aWindow direction: #toRight! ! !TamManager class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/2/2012 17:24'! openInWindow: aWindow direction: ToRightOrToLeft | newTaxonomiesManager | newTaxonomiesManager := self new. TamManager addDependent: newTaxonomiesManager. aWindow model: newTaxonomiesManager. ^newTaxonomiesManager buildWindow: aWindow direction: ToRightOrToLeft! ! !TamManager class methodsFor: 'fileIn/Out' stamp: 'apl 7/6/2004 00:36'! saveAllSet ^ ((self taxonomies select: [:cls | cls isDefault not]) collect: [:cls | cls taxonomy linked]) asSet! ! !TamManager class methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:07'! sort self taxonomies reSort! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 6/2/2003 10:20'! taxonomies ^ Taxonomies! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 6/28/2003 00:49'! taxonomyIndexSuchThat: aBlock 1 to: self taxonomies size do: [:idx | (aBlock value: (self taxonomies at: idx)) ifTrue: [^ idx]]. ^ 0! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 6/27/2003 23:09'! taxonomyNamed: anIdent ^ self taxonomies detect: [:c | c asStringOrText = anIdent] ifNone: []! ! !TamManager class methodsFor: 'accessing' stamp: 'tam 6/27/2003 23:35'! taxonomyOf: aListItemReference ^ self taxonomies detect: [:c | c taxonomy = aListItemReference] ifNone: []! ! !TamManager class methodsFor: 'drag and drop' stamp: 'AlainPlantec 1/28/2011 07:07'! wantsDroppedMorph: transferMorph event: anEvent inMorph: destinationLM (transferMorph respondsTo:#passenger) ifFalse: [^ false]. (transferMorph passenger isKindOf: TamListItemReference) ifTrue: [^ true]. ^ false! ! !TamManager methodsFor: 'drag and drop' stamp: 'apl 11/2/2006 11:28'! acceptDroppingMorph: transferMorph event: evt inMorph: dstListMorph | destItem item itemName passenger | (transferMorph respondsTo: #passenger) ifTrue: [passenger := transferMorph passenger. (transferMorph passenger isKindOf: SelectionMorph) ifTrue: [^ transferMorph passenger justDroppedInto: dstListMorph event: evt]. (passenger isKindOf: TamManagerItem) ifTrue: [self linkTaxonomy: passenger. ^ true]]. destItem := dstListMorph rowAtLocation: evt position. destItem > 0 ifTrue: [itemName := dstListMorph getListItem: destItem. item := self taxonomyNamed: itemName. item notNil ifTrue: [^ item acceptDroppingMorph: transferMorph event: evt inMorph: dstListMorph]]. ^ false! ! !TamManager methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:27'! addButtons: toRightOrToLeft | mainButton | mainButton := (UITheme current newButtonIn: World for: self getState: nil action: #taxonomyMenuPopup arguments: { } getEnabled: nil getLabel: nil help: 'Platypus main menu') label: self mainButtonLabel; yourself. self listButtons addMorph: mainButton. toRightOrToLeft = #toRight ifTrue: [listBtnRow addMorph: listButtons] ifFalse: [listBtnRow addMorphBack: listButtons]. ! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/27/2003 23:08'! allTaxonomiesNamed: anIdent ^ self class allTaxonomiesNamed: anIdent ! ! !TamManager methodsFor: 'accessing' stamp: 'tam 7/28/2003 09:55'! allTaxonomiesSuchThat: aBlock ^ self class allTaxonomiesSuchThat: aBlock ! ! !TamManager methodsFor: 'accessing' stamp: 'apl 6/25/2005 10:13'! boldBlueSelection ^ (listMorph respondsTo: #boldBlueEmphasisSet) ifTrue: [listMorph boldBlueEmphasisSet asOrderedCollection] ifFalse: [#() asOrderedCollection]! ! !TamManager methodsFor: 'accessing' stamp: 'apl 6/25/2005 10:14'! boldRedSelection ^ (listMorph respondsTo: #boldRedEmphasisSet) ifTrue: [listMorph boldRedEmphasisSet asOrderedCollection] ifFalse: [#() asOrderedCollection]! ! !TamManager methodsFor: 'updating' stamp: 'apl 4/19/2005 16:08'! boundsOf: oneOfMyMorphs updatedWith: newBounds mainWindow ifNotNil: [oneOfMyMorphs == listMorph ifTrue: [newBounds origin x >= mainWindow bounds origin x ifTrue: [self class listWidth: newBounds width. ]]]! ! !TamManager methodsFor: 'button actions' stamp: 'tam 10/23/2003 14:35'! browseTaxonomy self selectedTaxonomy notNil ifTrue: [^ self browseTaxonomy: self selectedTaxonomy] ifFalse: [^ (self buildMenuBrowseTaxonomy: MenuMorph new) popUpInWorld]! ! !TamManager methodsFor: 'button actions' stamp: 'tam 7/8/2003 10:52'! browseTaxonomy: aTaxonomy ^ aTaxonomy taxonomy menuBrowse! ! !TamManager methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:28'! buildMainWindow mainWindow := (StandardWindow labelled: self class managerOpenCommandName) model: self; yourself. self buildWindow: mainWindow. mainWindow extent: self initialExtent. ^ mainWindow! ! !TamManager methodsFor: 'menu' stamp: 'tam 7/8/2003 10:58'! buildMenuBrowseTaxonomy: aMenu ^ self genericMenu: aMenu selector: #browseTaxonomy:! ! !TamManager methodsFor: 'menu' stamp: 'tam 7/8/2003 10:59'! buildMenuDeleteTaxonomy: aMenu ^ self genericMenu: aMenu selector: #deleteTaxonomy:! ! !TamManager methodsFor: 'menu' stamp: 'tam 7/8/2003 11:07'! buildMenuEmptyTaxonomy: aMenu ^ self genericMenu: aMenu selector: #emptyTaxonomy:! ! !TamManager methodsFor: 'menu' stamp: 'tam 7/8/2003 11:04'! buildMenuLinkTaxonomy: aMenu ^ self genericMenu: aMenu selector: #linkTaxonomy:! ! !TamManager methodsFor: 'ui building' stamp: 'AlainPlantec 5/2/2012 17:18'! buildWindow: aWindow ^ self buildWindow: aWindow direction: #toRight! ! !TamManager methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 14:36'! buildWindow: aWindow direction: toRightOrToLeft | listBtnRowFrame listMorphFrame editorSubWindowFrame topRowHeight | topRowHeight := listBtnRowHeight + 2. toRightOrToLeft == #toRight ifTrue: [listBtnRowFrame := LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ topRowHeight). listMorphFrame := LayoutFrame fractions: (0 @ 0 corner: 0 @ 1) offsets: (0 @ topRowHeight corner: self listWidth @ 0). editorSubWindowFrame := LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (self listWidth + TamListItemReferenceUtil subFrameBorderDelta @ topRowHeight corner: 0 @ 0)] ifFalse: [listBtnRowFrame := LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ topRowHeight). listMorphFrame := LayoutFrame fractions: (1 @ 0 corner: 1 @ 1) offsets: (self listWidth negated @ topRowHeight corner: 0 negated @ 0). editorSubWindowFrame := LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ topRowHeight corner: (self listWidth negated - TamListItemReferenceUtil subFrameBorderDelta) @ 0)]. listRow := TamListItemReferenceUtil subWindowClass model: self. listBtnRow := TamButtonsAlignmentMorph typicalRowOwner. listButtons := TamButtonsAlignmentMorph newRow. listButtons vResizing: #shrinkWrap. listMorph := self hierarchicalListMorphClass on: self list: #taxonomies selected: #selectedTaxonomyIndex changeSelected: #changeSelectedTaxonomy: menu: #menu:shifted: keystroke: #keyStroke:from:. listMorph hResizing: #spaceFill; vResizing: #spaceFill. listMorph fillStyle: listMorph fillStyleToUse. editorSubWindow := TamBrowser onReference: nil window: TamListItemReferenceUtil subWindowClass new insideManager: self direction: toRightOrToLeft. TamManager addDependent: self. self addDependent: editorSubWindow model. listRow addMorph: listMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). aWindow addMorph: listBtnRow fullFrame: listBtnRowFrame. aWindow addMorph: listRow fullFrame: listMorphFrame. aWindow addMorph: editorSubWindow fullFrame: editorSubWindowFrame. toRightOrToLeft == #toRight ifTrue: [aWindow addPaneVSplitterBetween: listRow and: {editorSubWindow}] ifFalse: [aWindow addPaneVSplitterBetween: editorSubWindow and: {listRow}]. self addButtons: toRightOrToLeft. listMorph enableDragNDrop: true. listMorph useSquareCorners. listRow useSquareCorners. listMorph selection: nil. ^ aWindow! ! !TamManager methodsFor: 'accessing' stamp: 'apl 4/16/2005 08:30'! buttonExtent ^self class buttonExtent! ! !TamManager methodsFor: 'testing' stamp: 'apl 6/8/2004 23:45'! canRemovePane ^ self taxonomyPane notNil and: [self taxonomyPane editorSubWindows size > 1]! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'AlainPlantec 5/18/2012 01:02'! changeSelectedTaxonomy: aTaxonomy | selected oldSelected | self taxonomyBrowser okToChange ifTrue: [self selectedTaxonomyIndex ~= aTaxonomy ifTrue: [selected := aTaxonomy > 0 ifTrue: [self taxonomies at: aTaxonomy]. oldSelected := selectedTaxonomy. selectedTaxonomy := selected. self changed: #selectedTaxonomyIndex. oldSelected ifNotNil: [oldSelected unSelectingFrom: self]. selected ifNil: [self taxonomyBrowser noteNewSelection: nil] ifNotNil: [selected selectingFrom: self]]. ^ true]. ^ false! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'tam 3/26/2004 10:19'! changeSelectedTaxonomyFromWrapper: aWrapper | rootRefIdx | rootRefIdx := self taxonomyItemIndexFromWrapper: aWrapper. (self changeSelectedTaxonomy: rootRefIdx) ifTrue: [^ self taxonomyBrowser noteNewSelectionDeeply: aWrapper]! ! !TamManager methodsFor: 'accessing' stamp: 'apl 6/25/2005 10:20'! currentSelection | sel | sel := (self boldRedSelection , self boldBlueSelection) copy. sel remove: TamManagerItem default. ^ sel! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 11/18/2010 10:31'! deleteTaxonomy: aTaxonomy | oldSelectedIndex | aTaxonomy ifNotNil: [oldSelectedIndex := self taxonomyIndexSuchThat: [:c | c = aTaxonomy]. self removeTaxonomyAt: oldSelectedIndex confirm: true. oldSelectedIndex := oldSelectedIndex <= self taxonomies size ifTrue: [oldSelectedIndex] ifFalse: [self taxonomies size]. self changeSelectedTaxonomy: oldSelectedIndex] ! ! !TamManager methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/18/2012 12:35'! destroy self breakDependents. TamManager removeDependent: self. self taxonomyBrowser ifNotNil: [self taxonomyBrowser destroy]. mainWindow ifNotNil: [mainWindow submorphs do: [:sm | sm destroy]. mainWindow := nil]. selectedTaxonomy := nil. listBtnRow := nil. listButtons destroy. listButtons := nil. listMorph ifNotNil: [listMorph model: nil. listMorph := nil]. listRow ifNotNil: [listRow delete; destroy. listRow := nil]. editorSubWindow ifNotNil: [editorSubWindow destroy. editorSubWindow := nil]. taxonomyPane := nil. super destroy! ! !TamManager methodsFor: 'drag and drop' stamp: 'tam 5/29/2003 10:31'! dragPassengerFor: item inMorph: dragSource ^ (self taxonomyNamed: item contents) ! ! !TamManager methodsFor: 'accessing' stamp: 'tam 5/28/2003 15:27'! editorSubWindow ^ editorSubWindow! ! !TamManager methodsFor: 'button actions' stamp: 'tam 10/23/2003 14:33'! emptyTaxonomy self selectedTaxonomy notNil ifTrue: [^ self emptyTaxonomy: self selectedTaxonomy] ifFalse: [ ^ (self buildMenuEmptyTaxonomy: MenuMorph new) popUpInWorld ]! ! !TamManager methodsFor: 'button actions' stamp: 'AlainPlantec 5/16/2012 22:38'! emptyTaxonomy: aTaxonomy ^ aTaxonomy taxonomy menuRemoveAl! ! !TamManager methodsFor: 'menu' stamp: 'tam 7/8/2003 10:48'! genericMenu: aMenu selector: aSelector | | self taxonomies do: [:item | item genericMenu: aMenu selector: aSelector fromTaxonomyManager: self.]. ^ aMenu! ! !TamManager methodsFor: 'button actions' stamp: 'alain.plantec 2/3/2009 12:05'! globalSearchListItemByName | pattern | pattern := UIManager default request: 'item name or fragment?' translated. pattern isEmpty ifTrue: [^ nil]. ^ self globalSearchListItemFromFragment: pattern! ! !TamManager methodsFor: 'button actions' stamp: 'apl 6/3/2005 18:36'! globalSearchListItemFromFragment: aFragment | toMatch founds parents | toMatch := aFragment asLowercase. founds := OrderedCollection new. self taxonomies do: [:cls | founds := founds , (cls taxonomyWrapper selectDeeplySuchThat: [:e | e item shortName includesSubstring: toMatch caseSensitive: false])]. founds isEmpty ifTrue: [^self taxonomyBrowser noSearchMatchFound]. TamBrowser genericTree: 'Tamaris: selectors from ''' , aFragment , '''' flatCollection: (founds collect: [:e | parents := e item parentsChain. parents add: e item. parents]) selectingBlock: [:e | self changeSelectedTaxonomyFromWrapper: (e linked wrapperClass with: e linked model: nil)] client: self! ! !TamManager methodsFor: 'accessing' stamp: 'apl 4/18/2005 23:04'! hierarchicalListMorphClass ^TamPluggableListMorph! ! !TamManager methodsFor: 'accessing' stamp: 'tam 4/15/2003 14:21'! initialExtent ^ self class initialExtent! ! !TamManager methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/18/2012 12:35'! initialize super initialize. listBtnRowHeight := self buttonExtent y + 4! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 4/27/2012 09:36'! keyStroke: aCharacter from: tamuggableListMorph aCharacter = $f ifTrue: [^ self menuSearch]. aCharacter = $x ifTrue: [^ self menuDeleteTaxonomy]. aCharacter = $l ifTrue: [^ self menuLinkTaxonomy]. aCharacter = $n ifTrue: [^ self menuNewTaxonomy]. aCharacter = $r ifTrue: [^ self menuRenameTaxonomy]. self selectedTaxonomy ifNotNil: [self selectedTaxonomy keyStroke: aCharacter from: tamuggableListMorph] ! ! !TamManager methodsFor: 'button actions' stamp: 'tam 10/23/2003 14:36'! linkTaxonomy self selectedTaxonomy notNil ifTrue: [^ self menuLinkTaxonomy] ifFalse: [^ (self buildMenuLinkTaxonomy: MenuMorph new) popUpInWorld]! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'AlainPlantec 10/7/2010 21:54'! linkTaxonomy: anotherItem | newItem id | newItem := TamManagerItem linkTo: anotherItem. id := (self allTaxonomiesSuchThat: [:c | c taxonomy linked = anotherItem taxonomy linked ]) size. newItem listId: (id + 1) printString. self taxonomies add: newItem. self sort. self class changed: #taxonomies! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/30/2003 18:53'! listBtnRow ^ listBtnRow! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/29/2003 23:30'! listButtons ^ listButtons! ! !TamManager methodsFor: 'accessing' stamp: 'apl 4/18/2005 23:57'! listWidth ^self class listWidth ! ! !TamManager methodsFor: 'accessing' stamp: 'apl 6/9/2005 14:23'! mainButtonLabel ^self class mainButtonLabel! ! !TamManager methodsFor: 'accessing' stamp: 'tam 4/15/2003 13:55'! mainWindow ^ mainWindow! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/5/2003 00:44'! mainWindow: aWindow mainWindow := aWindow! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 4/27/2012 09:56'! menu: menu shifted: aBoolean #(#- #('new (n)' #menuNewTaxonomy ) ) do: [:item | item == #- ifTrue: [menu addLine] ifFalse: [menu add: item first target: self selector: item second]]. self selectedTaxonomy ifNotNil: [#(#- #('remove' #menuRemoveTaxonomy ) #- #('link (l)' #menuLinkTaxonomy ) #- #('rename (r)' #menuRenameTaxonomy ) #- ) do: [:item | item == #- ifTrue: [menu addLine] ifFalse: [menu add: item first target: self selector: item second]]. self selectedTaxonomy menu: menu shifted: aBoolean]. self splitMenu: menu. ^ menu! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 5/19/2012 09:10'! menuDeleteTaxonomy self deleteTaxonomy: self selectedTaxonomy! ! !TamManager methodsFor: 'menu' stamp: 'tam 5/28/2003 17:47'! menuLinkTaxonomy self selectedTaxonomy ifNotNil: [self linkTaxonomy: self selectedTaxonomy]! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 5/19/2012 09:10'! menuNewManager self taxonomyPane ifNotNil: [^self taxonomyPane class open]. ^ self class open! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 4/30/2012 15:44'! menuNewTaxonomy | newname old | newname := UIManager default request: 'new taxonomy name ?' translated initialAnswer: ''. newname notNil ifTrue: [old := self taxonomyNamed: newname. old ifNotNil: [^ self inform: 'name already in use' translated]. self newTaxonomyNamed: newname]! ! !TamManager methodsFor: 'menu' stamp: 'alain.plantec 2/3/2009 12:05'! menuRelabelTaxonomy | label | self selectedTaxonomy ifNotNil: [label := UIManager default request: 'taxonomy label complement ?' translated initialAnswer: ''. self selectedTaxonomy listLabel: label. self sort. self class changed: #taxonomies]! ! !TamManager methodsFor: 'menu' stamp: 'AlainPlantec 4/27/2012 09:56'! menuRemoveTaxonomy | rep | rep := false. self selectedTaxonomy ifNotNil: [self removeTaxonomyAt: self selectedTaxonomyIndex confirm: rep not]! ! !TamManager methodsFor: 'menu' stamp: 'tam 6/3/2003 23:02'! menuRenameTaxonomy self selectedTaxonomy ifNotNil: [self selectedTaxonomy taxonomy menuRelabel]. self changed: self selectedTaxonomy taxonomy. self sort. self class changed: #taxonomies! ! !TamManager methodsFor: 'menu' stamp: 'tam 6/28/2003 00:47'! menuSearch ^ self globalSearchListItemByName! ! !TamManager methodsFor: 'ui opening/closing' stamp: 'AlainPlantec 5/18/2012 13:23'! modelWakeUpIn: aMorph self taxonomyBrowser ifNotNil: [self taxonomyBrowser modelWakeUpIn: aMorph]. self mainWindow ifNotNil: [self mainWindow submorphsDo: [:sm | sm show]]. super modelWakeUpIn: aMorph! ! !TamManager methodsFor: 'button actions' stamp: 'apl 4/18/2005 11:23'! newReference | menu tamBrowser | (tamBrowser := self taxonomyBrowser) ifNotNil: [(tamBrowser unwrappedSelection respondsTo: #menuAddReference) ifTrue: [menu := tamBrowser unwrappedSelection menuAddReference] ifFalse: [tamBrowser rootWrapper withoutListWrapper ifNotNil: [menu := tamBrowser rootWrapper withoutListWrapper linked menuAddReference]]. menu ifNotNil: [menu addTitle: 'add ...'. menu addStayUpItem. menu invokeModal]]! ! !TamManager methodsFor: 'button actions' stamp: 'AlainPlantec 5/19/2012 09:10'! newTaxonomy ^ self menuNewTaxonomy! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:07'! newTaxonomy: aNewTaxonomy ^ self class newTaxonomy: aNewTaxonomy ! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:14'! newTaxonomyNamed: anIdent ^ self class newTaxonomyNamed: anIdent ! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'tam 7/7/2003 22:35'! noteNewSelectionDeeply: aWrapper ^ self changeSelectedTaxonomyFromWrapper: aWrapper ! ! !TamManager methodsFor: 'accessing' stamp: 'tam 5/21/2003 11:58'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !TamManager methodsFor: 'ui opening/closing' stamp: 'AlainPlantec 5/18/2012 13:23'! rememberWindowSize self class initialExtent: mainWindow bounds extent! ! !TamManager methodsFor: 'button actions' stamp: 'apl 4/15/2005 11:59'! removePane self canRemovePane ifTrue: [self taxonomyPane menuRemovePane: self mainWindow]! ! !TamManager methodsFor: 'button actions' stamp: 'tam 10/23/2003 14:36'! removeTaxonomy self selectedTaxonomy notNil ifTrue: [^ self menuDeleteTaxonomy] ifFalse: [^ (self buildMenuDeleteTaxonomy: MenuMorph new) popUpInWorld]! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'AlainPlantec 4/27/2012 09:55'! removeTaxonomyAt: anIndex confirm: aBoolean | found doit ident oldName newList | found := self taxonomies at: anIndex. oldName := found taxonomy asString. aBoolean ifTrue: [ (self allTaxonomiesNamed: oldName) size = 1 ifFalse: [found isRootTaxonLink ifFalse: [^ self inform: 'This taxon is linked, you have to remove those links before' translated]]]. self changeSelectedTaxonomy: 0. self taxonomies remove: found. found destroy. newList := self allTaxonomiesNamed: oldName. 2 to: newList size do: [:pos | (newList at: pos) listId: pos printString]. self class changed: found! ! !TamManager methodsFor: 'accessing' stamp: 'tam 4/15/2003 13:55'! selectedTaxonomy ^ selectedTaxonomy! ! !TamManager methodsFor: 'accessing' stamp: 'tam 5/28/2003 16:47'! selectedTaxonomyIndex ^ self taxonomies indexOf: self selectedTaxonomy ifAbsent: [0]! ! !TamManager methodsFor: 'accessing' stamp: 'apl 7/9/2005 01:01'! showBookmarks ^true! ! !TamManager methodsFor: 'taxonomies managing' stamp: 'apl 3/1/2007 19:15'! sort self class sort! ! !TamManager methodsFor: 'button actions' stamp: 'tam 7/2/2003 00:39'! splitHorizontally self taxonomyPane menuSplitHorizontally: self mainWindow.! ! !TamManager methodsFor: 'menu' stamp: 'apl 6/9/2005 14:46'! splitMenu | menu | menu := MenuMorph new. menu defaultTarget: self. self splitMenu: menu . menu popUpInWorld ! ! !TamManager methodsFor: 'menu' stamp: 'apl 7/26/2005 12:52'! splitMenu: menu #(#- #('split horizontally' #splitHorizontally) #('split vertically' #splitVertically) #- #('browse separately' #browseTaxonomy) ) do: [:item | item == #- ifTrue: [menu addLine] ifFalse: [menu add: item first target: self selector: item second]]. self canRemovePane ifTrue: [menu add: 'remove pane' target: self selector: #removePane]. ^ menu! ! !TamManager methodsFor: 'button actions' stamp: 'tam 7/2/2003 00:39'! splitVertically self taxonomyPane menuSplitVertically: self mainWindow.! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/2/2003 10:19'! taxonomies ^ self class taxonomies! ! !TamManager methodsFor: 'accessing' stamp: 'tam 7/3/2003 11:56'! taxonomyBrowser ^ self editorSubWindow ifNotNil: [self editorSubWindow model]! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/28/2003 00:36'! taxonomyIndexSuchThat: aBlock ^ self class taxonomyIndexSuchThat: aBlock! ! !TamManager methodsFor: 'accessing' stamp: 'tam 2/24/2004 00:28'! taxonomyItemIndexFromWrapper: aWrapper | parentsChain rootRefIdx rootRef | parentsChain := aWrapper parentsChain. parentsChain isEmpty ifTrue: [rootRefIdx := self taxonomyIndexSuchThat: [:ref | ref taxonomy == aWrapper withoutListWrapper]] ifFalse: [rootRef := parentsChain first. rootRefIdx := self taxonomyIndexSuchThat: [:ref | ref taxonomy == rootRef withoutListWrapper]]. ^ rootRefIdx ! ! !TamManager methodsFor: 'button actions' stamp: 'AlainPlantec 5/18/2012 13:32'! taxonomyMenuPopup | taxonomyMenu | taxonomyMenu := MenuMorph new. taxonomyMenu defaultTarget: self. taxonomyMenu addTitle: self mainButtonLabel. taxonomyMenu addStayUpItem. self menu: taxonomyMenu shifted: false. taxonomyMenu popUpInWorld! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/27/2003 23:09'! taxonomyNamed: anIdent ^ self class taxonomyNamed: anIdent ! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/27/2003 23:35'! taxonomyOf: aListItemReference ^ self class taxonomyOf: aListItemReference! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/4/2003 23:57'! taxonomyPane ^ taxonomyPane! ! !TamManager methodsFor: 'accessing' stamp: 'tam 6/4/2003 23:59'! taxonomyPane: aTaxonomyPane taxonomyPane := aTaxonomyPane! ! !TamManager methodsFor: 'updating' stamp: 'AlainPlantec 5/19/2012 09:11'! update: anObject ((anObject isKindOf: TamManagerItem) or: [anObject == #taxonomies]) ifTrue: [(selectedTaxonomy = anObject and: [anObject isReleased]) ifTrue: [self taxonomyBrowser noteNewSelection: nil]. self changed: #taxonomies]. (self taxonomies includes: TamManagerItem default) ifFalse: [TamManagerItem resetDefault. self taxonomies add: TamManagerItem default. self changed: #taxonomies]. super update: anObject! ! !TamManager methodsFor: 'drag and drop' stamp: 'apl 11/2/2006 11:34'! wantsDroppedMorph: transferMorph event: anEvent inMorph: destinationLM ^ self class wantsDroppedMorph: transferMorph event: anEvent inMorph: destinationLM ! ! !TamManager methodsFor: 'updating' stamp: 'AlainPlantec 11/18/2010 09:54'! wantsStepsIn: aWindow ^ false! ! !TamManager methodsFor: 'ui opening/closing' stamp: 'apl 2/20/2007 15:38'! windowIsClosing self destroy. super windowIsClosing! ! !Tamaris class methodsFor: 'preferences' stamp: 'AlainPlantec 5/17/2012 23:53'! buttonExtent "default button extent" | prefSet | prefSet := StandardFonts buttonFont height + 6. ^ (22 max: prefSet) @ (22 max: prefSet)! ! !Tamaris class methodsFor: 'utilities' stamp: 'AlainPlantec 1/28/2011 13:50'! chooseFilePathMatching: patterns label: title | fd | fd := FileDialogWindow basicNew previewType: false; initialize; title: title; answerPathName. patterns ifNotNil: [ fd fileSelectionBlock: [:de | (fd defaultFileSelectionBlock value: de) and: [ de isDirectory or: [patterns anySatisfy: [:pat | pat match: de name]]]]]. ^(UIManager default modalMorph openModal: fd) answer! ! !Tamaris class methodsFor: 'preferences' stamp: 'AlainPlantec 5/17/2012 23:53'! initialExtent ^ InitialExtent! ! !Tamaris class methodsFor: 'preferences' stamp: 'AlainPlantec 10/7/2010 22:00'! initialExtent: aPoint InitialExtent := aPoint! ! !Tamaris class methodsFor: 'class initialization' stamp: 'AlainPlantec 10/7/2010 14:00'! initialize "self initialize" self breakDependents. InitialExtent := 600 @ 500. ! ! !Tamaris class methodsFor: 'queries' stamp: 'MrCleaner 1/17/2011 21:03'! itemNamed: aName | map | TamManager taxonomies detect: [:t | (map := t item findDeeplySuchThat: [:e | e name = aName]) notNil]. ^ map ! ! !Tamaris class methodsFor: 'accessing' stamp: 'tam 11/21/2003 10:26'! managerOpenCommandName ^ self name ! ! !Tamaris class methodsFor: 'instance creation' stamp: 'apl 4/19/2005 17:11'! open "self open" | newTaxonomiesPane | newTaxonomiesPane := self new . ^newTaxonomiesPane buildMainWindow openInWorld! ! !Tamaris class methodsFor: 'instance creation' stamp: 'apl 4/19/2005 17:11'! openInWindow: aWindow "self open" | newTaxonomiesPane | newTaxonomiesPane := self new. newTaxonomiesPane buildWindow: aWindow. aWindow model: newTaxonomiesPane. ^aWindow! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/22/2005 01:51'! paneWorkspaceAndTranscriptNumberOfLines ^4! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:24'! paneWorkspaceStringHolder ^PaneWorkspaceStringHolder ifNil: [PaneWorkspaceStringHolder := TamStringHolder new]! ! !Tamaris class methodsFor: 'preferences' stamp: 'apl 9/26/2007 14:00'! preferedWindowColor ^ Color veryLightGray veryMuchLighter muchLighter! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:54'! showLocalWorkspace ^ ShowLocalWorkspace ifNil: [ShowLocalWorkspace := true]! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:54'! showLocalWorkspace: aBoolean ShowLocalWorkspace := aBoolean! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:21'! showPaneWorkspace ^ShowPaneWorkspace ifNil: [ShowPaneWorkspace := true]! ! !Tamaris class methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:21'! showPaneWorkspace: aBoolean ShowPaneWorkspace := aBoolean! ! !Tamaris class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 22:00'! showTranscript ^ ShowTranscript ifNil: [ShowTranscript := true]! ! !Tamaris class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 22:00'! showTranscript: aBoolean ShowTranscript := aBoolean! ! !Tamaris methodsFor: 'ui building' stamp: 'AlainPlantec 4/27/2012 09:41'! addModelItemsToWindowMenu: aMenu aMenu addLine. aMenu add: 'remember window size' target: self action: #rememberWindowSize. aMenu addLine. aMenu add: (self transcriptMorph ifNil: ['show transcript'] ifNotNil: ['hide transcript']) target: self action: #showHideTranscript. aMenu add: (self workspaceMorph ifNil: ['show pane workspace'] ifNotNil: ['hide pane workspace']) target: self action: #showHidePaneWorkspace. aMenu addLine. aMenu add: (self showLocalWorkspace ifTrue: ['hide local workspace'] ifFalse: ['show local workspace']) target: self action: #showHideLocalWorkspace. aMenu addLine. aMenu add: 'default lists width' target: self action: #setListsWidthToDefault. aMenu addLine. aMenu add: 'load button forms from disk' target: TamIcons action: #importForms. aMenu addLine. aMenu add: 'Quit' target: self action: #destroyAndQuit. aMenu addLine! ! !Tamaris methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:30'! buildMainWindow mainWindow := (StandardWindow labelled: self class managerOpenCommandName) model: self; yourself. topPane := TamListItemReferenceUtil subWindowClass model: self. mainPane := TamListItemReferenceUtil subWindowClass model: self. firstPane := TamListItemReferenceUtil subWindowClass model: self. self buildWindow: firstPane. mainPane addMorph: firstPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). topPane addMorph: mainPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). mainWindow addMorph: topPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). mainWindow extent: self initialExtent. self showPaneWorkspace ifTrue: [self showHidePaneWorkspace]. self showTranscript ifTrue: [self showHideTranscript]. self changed: #taxonomies. ^ mainWindow! ! !Tamaris methodsFor: 'ui building' stamp: 'AlainPlantec 5/2/2012 17:22'! buildWindow: aWindow ^ self buildWindow: aWindow direction: #toRight! ! !Tamaris methodsFor: 'ui building' stamp: 'apl 7/23/2005 10:31'! buildWindow: aWindow direction: ToRightOrToLeft self editorSubWindows add: aWindow. TamManager openInWindow: aWindow direction: ToRightOrToLeft. aWindow model taxonomyPane: self. aWindow model mainWindow: aWindow. self addDependent: aWindow model. aWindow startStepping. ^ aWindow! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 9/26/2007 14:00'! defaultBackgroundColor ^ self class preferedWindowColor! ! !Tamaris methodsFor: 'initialize/release' stamp: 'apl 2/28/2007 15:56'! destroy mainWindow ifNotNil: [ mainWindow := nil]. editorSubWindows ifNotNil: [editorSubWindows do: [:w | self removeWindow: w. w destroy]. editorSubWindows := nil]. mainPane := nil. bottomMorphsPane := nil. super destroy! ! !Tamaris methodsFor: 'ui opening/closing' stamp: 'apl 4/8/2006 10:12'! destroyAndQuit mainWindow ifNotNil: [mainWindow delete]. self destroy! ! !Tamaris methodsFor: 'accessing' stamp: 'AlainPlantec 5/2/2012 17:40'! editorSubWindows ^editorSubWindows! ! !Tamaris methodsFor: 'menu' stamp: 'apl 2/28/2006 11:37'! hide: pane withOtherPane: otherPane topPane removePaneSplitters. bottomMorphsPane removePaneSplitters; removeAllMorphsIn: (Array with: pane). bottomMorphsPane submorphs ifEmpty: [topPane removeAllMorphsIn: (Array with: bottomMorphsPane). bottomMorphsPane := nil. mainPane layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0))]. otherPane ifNotNil: [otherPane layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). topPane addPaneHSplitterBetween: mainPane and: {bottomMorphsPane}]! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/4/2003 18:03'! initialExtent ^ self class initialExtent! ! !Tamaris methodsFor: 'initialize/release' stamp: 'AlainPlantec 10/7/2010 13:59'! initialize super initialize. editorSubWindows := WeakSet new. bottomMorphsHeight := self class paneWorkspaceAndTranscriptNumberOfLines * StandardFonts defaultFont height! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/4/2003 18:03'! mainWindow ^ mainWindow! ! !Tamaris methodsFor: 'menu' stamp: 'apl 7/8/2005 09:20'! menuRemovePane: aWindow | ownerWindow ownerOwnerWindow other | ownerWindow := aWindow owner. ownerOwnerWindow := ownerWindow owner. other := ownerOwnerWindow submorphs detect: [:sm | (sm isKindOf: BorderedMorph) and: [sm ~= ownerWindow]]. [other submorphs allSatisfy: [:sw | sw class == TamListItemReferenceUtil subWindowClass]] whileTrue: [other := other submorphs first]. self removeOtherPane: other! ! !Tamaris methodsFor: 'menu' stamp: 'tam 6/30/2003 12:34'! menuSplitHorizontally: aWindow self split: aWindow axe: #horizontally! ! !Tamaris methodsFor: 'menu' stamp: 'apl 6/29/2007 22:51'! menuSplitVertically: aWindow "| newPane | newPane := aWindow splitVertically. self buildWindow: newPane. self changed: #taxonomies" self split: aWindow axe: #vertically ! ! !Tamaris methodsFor: 'ui opening/closing' stamp: 'apl 5/31/2005 10:00'! modelWakeUpIn: aMorph self mainWindow ifNotNil: [self mainWindow submorphsDo: [:sm | sm show]]. self editorSubWindows ifNotNil: [self editorSubWindows do: [:e | e model modelWakeUpIn: aMorph]]. super modelWakeUpIn: aMorph! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:30'! paneWorkspaceStringHolder ^ self class paneWorkspaceStringHolder ! ! !Tamaris methodsFor: 'menu' stamp: 'tam 6/5/2003 00:05'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !Tamaris methodsFor: 'menu' stamp: 'tam 6/4/2003 18:10'! rememberWindowSize self class initialExtent: mainWindow bounds extent! ! !Tamaris methodsFor: 'menu' stamp: 'apl 2/15/2006 21:41'! removeOtherPane: aWindow | ownerWindow ownerOwnerWindow selectionIndex pane | selectionIndex := 0. selectionIndex := aWindow model ifNotNil: [aWindow model selectedTaxonomyIndex]. ownerWindow := aWindow owner. ownerOwnerWindow := ownerWindow owner. ownerOwnerWindow removePaneSplitters. ownerOwnerWindow submorphsDo: [:sm | self removeWindow: sm firstSubmorph]. ownerOwnerWindow removeAllMorphs. ownerOwnerWindow layoutChanged. pane := TamListItemReferenceUtil subWindowClass model: ownerOwnerWindow model. self buildWindow: pane. ownerOwnerWindow addMorph: pane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). pane borderWidth: 0. pane model changeSelectedTaxonomy: selectionIndex. self changed: #taxonomies! ! !Tamaris methodsFor: 'ui opening/closing' stamp: 'apl 6/3/2005 17:06'! removeWindow: aWindow self removeDependent: aWindow model. self editorSubWindows remove: aWindow ifAbsent: []. (aWindow model) windowIsClosing; destroy. aWindow delete! ! !Tamaris methodsFor: 'initialize/release' stamp: 'apl 4/19/2005 00:11'! setListsWidthToDefault TamManager listWidth: 120. TamBrowser taxonomyListWidth: 220! ! !Tamaris methodsFor: 'menu' stamp: 'apl 2/15/2006 21:41'! show: pane withOtherPane: otherPane | rowFraction deltaX | bottomMorphsPane ifNil: [mainPane layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ bottomMorphsHeight negated)). bottomMorphsPane := TamListItemReferenceUtil subWindowClass model: mainWindow model. topPane addMorph: bottomMorphsPane fullFrame: (LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ (bottomMorphsHeight negated + TamListItemReferenceUtil subFrameBorderDelta) corner: 0 @ 0))]. rowFraction := otherPane ifNil: [0 @ 0 corner: 1 @ 1] ifNotNil: [0.5 @ 0 corner: 1 @ 1]. deltaX := otherPane ifNil: [0] ifNotNil: [TamListItemReferenceUtil subFrameBorderDelta / 2]. bottomMorphsPane addMorph: pane fullFrame: (LayoutFrame fractions: rowFraction offsets: (deltaX @ 0 corner: 0 @ 0)). otherPane ifNotNil: [otherPane layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 0.5 @ 1) offsets: (0 @ 0 corner: deltaX negated @ 0))]. topPane removePaneSplitters. topPane addPaneHSplitterBetween: mainPane and: {bottomMorphsPane}. bottomMorphsPane borderWidth: 0. bottomMorphsPane layoutInset: 0. bottomMorphsPane addPaneSplitters! ! !Tamaris methodsFor: 'menu' stamp: 'apl 4/8/2005 12:01'! showHideLocalWorkspace self showLocalWorkspace: self showLocalWorkspace not. ! ! !Tamaris methodsFor: 'menu' stamp: 'AlainPlantec 1/11/2010 17:02'! showHidePaneWorkspace workspaceMorph ifNil: [workspaceMorph := PluggableTextMorph on: self paneWorkspaceStringHolder text: #contents accept: #acceptContents: readSelection: nil menu: #codePaneMenu:shifted:. self show: workspaceMorph withOtherPane: transcriptMorph. [workspaceMorph color: (Workspace patchworkUIThemeColor)] on: Error do: [workspaceMorph color: Color lightYellow]. self showPaneWorkspace: true] ifNotNil: [workspaceMorph model hasUnacceptedEdits ifTrue: [workspaceMorph accept]. self hide: workspaceMorph withOtherPane: transcriptMorph. workspaceMorph := nil. self showPaneWorkspace: false]! ! !Tamaris methodsFor: 'menu' stamp: 'AlainPlantec 4/26/2012 09:47'! showHideTranscript transcriptMorph ifNil: [transcriptMorph := PluggableTextMorph on: Transcript text: nil accept: nil readSelection: nil menu: #codePaneMenu:shifted:. transcriptMorph borderWidth: 1. self show: transcriptMorph withOtherPane: workspaceMorph. [transcriptMorph color: (ThreadSafeTranscript patchworkUIThemeColor)] on: Error do: [transcriptMorph color: Color lightOrange]. self showTranscript: true] ifNotNil: [self hide: transcriptMorph withOtherPane: workspaceMorph. transcriptMorph := nil. self showTranscript: false]! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:57'! showLocalWorkspace ^ self class showLocalWorkspace! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:01'! showLocalWorkspace: aBoolean self class showLocalWorkspace: aBoolean! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:29'! showPaneWorkspace ^ self class showPaneWorkspace! ! !Tamaris methodsFor: 'accessing' stamp: 'apl 4/8/2005 11:29'! showPaneWorkspace: aBoolean self class showPaneWorkspace: aBoolean ! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/24/2003 17:58'! showTranscript ^ self class showTranscript! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/24/2003 17:58'! showTranscript: aBoolean self class showTranscript: aBoolean! ! !Tamaris methodsFor: 'menu' stamp: 'AlainPlantec 5/2/2012 17:14'! split: aWindow axe: verticallyOrHorizontally | leftPane rightPane selectionIndex ownerWindow tmpPane fractions secondSubPanesDirection deltaY deltaX | verticallyOrHorizontally == #vertically ifTrue: [secondSubPanesDirection := #toLeft. deltaY := 0. deltaX := TamListItemReferenceUtil subFrameBorderDelta / 2. fractions := Array with: (0 @ 0 corner: 0.5 @ 1) with: (0.5 @ 0 corner: 1 @ 1)] ifFalse: [secondSubPanesDirection := #toRight. deltaY := TamListItemReferenceUtil subFrameBorderDelta / 2. deltaX := 0. fractions := Array with: (0 @ 0 corner: 1 @ 0.5) with: (0 @ 0.5 corner: 1 @ 1)]. selectionIndex := aWindow model isNil ifTrue: [0] ifFalse: [aWindow model selectedTaxonomyIndex]. aWindow model changeSelectedTaxonomy: 0. ownerWindow := aWindow owner. ownerWindow removeAllMorphs. leftPane := TamListItemReferenceUtil subWindowClass model: ownerWindow model. ownerWindow addMorph: leftPane fullFrame: (LayoutFrame fractions: fractions first offsets: (0 @ 0 corner: deltaX negated @ deltaY negated)). tmpPane := TamListItemReferenceUtil subWindowClass model: leftPane model. leftPane addMorph: tmpPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). self buildWindow: tmpPane. tmpPane borderWidth: 0. tmpPane model changeSelectedTaxonomy: selectionIndex. rightPane := TamListItemReferenceUtil subWindowClass model: ownerWindow model. ownerWindow addMorph: rightPane fullFrame: (LayoutFrame fractions: fractions second offsets: (deltaX @ deltaY corner: 0 @ 0)). rightPane borderWidth: 0. tmpPane := TamListItemReferenceUtil subWindowClass model: rightPane model. rightPane addMorph: tmpPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). self buildWindow: tmpPane direction: secondSubPanesDirection. tmpPane borderWidth: 0. tmpPane model changeSelectedTaxonomy: selectionIndex. ownerWindow layoutChanged. self removeWindow: aWindow. "" verticallyOrHorizontally = #vertically ifTrue: [ownerWindow addPaneVSplitterBetween: leftPane and: {rightPane}] ifFalse: [ownerWindow addPaneHSplitterBetween: leftPane and: {rightPane}]. self changed: #taxonomies! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/24/2003 17:21'! transcriptMorph ^ transcriptMorph! ! !Tamaris methodsFor: 'ui opening/closing' stamp: 'apl 2/28/2007 15:56'! windowIsClosing self destroy. super windowIsClosing! ! !Tamaris methodsFor: 'accessing' stamp: 'tam 6/24/2003 17:21'! workspaceMorph ^ workspaceMorph! ! !SystemWindow methodsFor: '*tamaris' stamp: 'apl 7/8/2005 19:54'! emptyLabelArea labelArea ifNotNil: [labelArea delete. labelArea := nil]! ! !TamBrowser class methodsFor: 'accessing' stamp: 'apl 6/29/2007 11:08'! buttonExtent ^ Tamaris buttonExtent! ! !TamBrowser class methodsFor: 'private reference removing' stamp: 'apl 6/23/2005 12:28'! destroyEditorFor: aReference self allInstances copy do: [:brw | brw destroyEditorFor: aReference]! ! !TamBrowser class methodsFor: 'private reference removing' stamp: 'apl 4/3/2006 16:55'! destroyNotSelectedEditorFor: aReference self allInstances copy do: [:brw | brw destroyNotSelectedEditorFor: aReference]! ! !TamBrowser class methodsFor: 'dialog building' stamp: 'apl 10/26/2006 18:24'! genericTree: aTitle flatCollection: aCollectionOfCollection selectingBlock: selBlock client: aClientModel | aghl | aghl := TamGenericHierarchicalList fromFlatCollection: aCollectionOfCollection title: aTitle client: aClientModel. aghl doDeeply: [:el | el selectingBlock: selBlock]. aghl doDeeply: [:el | el unSelectingBlock: [:e | ]]. aghl open. aghl expandAll. ^ aghl! ! !TamBrowser class methodsFor: 'dialog building' stamp: 'apl 4/6/2006 22:34'! genericTree: aTitle listBlock: listBlock selectingBlock: selBlock client: aClientModel | aghl parentsChain | (TamGenericHierarchicalList openedHierarchicalListsOfClient: aClientModel key: aTitle) ifNotEmpty: [:founds | founds do: [:w | w delete; destroy]]. aghl := TamGenericHierarchicalList fromUpdateBlock: [:hl | hl fromFlatCollection: (listBlock value inject: OrderedCollection new into: [:col :r | parentsChain := r parentsChain. parentsChain add: r. col add: parentsChain; yourself]). hl doDeeply: [:el | el selectingBlock: selBlock]. hl doDeeply: [:el | el unSelectingBlock: [:e ]]] title: aTitle client: aClientModel. aghl open. aghl expandAll. ^ aghl! ! !TamBrowser class methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:47'! initialExtent ^InitialExtent ifNil: [InitialExtent := 750@550]! ! !TamBrowser class methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:48'! initialExtent: aPoint InitialExtent := aPoint! ! !TamBrowser class methodsFor: 'accessing' stamp: 'apl 4/22/2005 01:54'! localWorkspaceNumberOfLines ^4! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'apl 6/3/2005 18:35'! onReference: aReference | aNewOne | aNewOne := self new. aReference ifNotNil: [aNewOne rootWrapper: (aReference wrapperClass with: aReference model: nil)]. ^aNewOne buildMainWindow! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'tam 6/5/2003 12:36'! onReference: aReference window: aWindow ^ self onReference: aReference window: aWindow direction: #toRight! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'tam 6/30/2003 18:47'! onReference: aReference window: aWindow direction: ToRightOrToLeft ^ self onReference: aReference window: aWindow insideManager: nil direction: ToRightOrToLeft! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'apl 6/3/2005 18:35'! onReference: aReference window: aWindow insideManager: aTamManager direction: ToRightOrToLeft | aNewOne | aNewOne := self new. aReference ifNotNil: [aNewOne rootWrapper: (aReference wrapperClass with: aReference model: nil)]. aWindow model: aNewOne. aNewOne buildWindow: aWindow insideManager: aTamManager direction: ToRightOrToLeft. ^aWindow! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'tam 3/5/2004 17:34'! open self openOnReference: TamManagerItem default taxonomy ! ! !TamBrowser class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/7/2010 21:34'! openOnReference: aReference | awindow | (awindow := self onReference: aReference) openInWorld. ^ awindow! ! !TamBrowser class methodsFor: 'installing/desinstalling' stamp: 'apl 7/9/2005 16:17'! preferedWindowColor ^ Color veryLightGray muchLighter! ! !TamBrowser class methodsFor: 'private reference removing' stamp: 'apl 2/16/2006 11:45'! reloadEditorFor: aReference self allInstances copy do: [:brw | brw reloadEditorFor: aReference ]! ! !TamBrowser class methodsFor: 'accessing' stamp: 'apl 4/18/2005 22:31'! taxonomyListWidth ^TaxonomyListWidth ifNil: [TaxonomyListWidth := 250]! ! !TamBrowser class methodsFor: 'accessing' stamp: 'apl 4/18/2005 22:32'! taxonomyListWidth: anInteger TaxonomyListWidth := anInteger! ! !TamBrowser methodsFor: 'drag and drop' stamp: 'apl 11/2/2006 11:29'! acceptDroppingMorph: transferMorph event: evt inMorph: dstListMorph | destItem shouldCopy | (transferMorph respondsTo: #passenger) ifTrue: [(transferMorph passenger isKindOf: SelectionMorph) ifTrue: [^ transferMorph passenger justDroppedInto: dstListMorph event: evt]. (transferMorph passenger isKindOf: TamManagerItem) ifTrue: [transferMorph passenger: transferMorph passenger taxonomy]]. destItem := dstListMorph itemFromPoint: evt position. shouldCopy := (transferMorph respondsTo: #shouldCopy) ifTrue: [transferMorph shouldCopy or: [(transferMorph source isKindOf: listMorph class) not]] ifFalse: [true]. destItem ifNotNil: [^ destItem complexContents acceptDroppingMorph: transferMorph copy: shouldCopy]. ^ rootWrapper notNil and: [rootWrapper acceptDroppingMorph: transferMorph copy: shouldCopy]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/22/2005 15:47'! acceptRecentsInputContent: aFragment self rootWrapperIsSet ifFalse: [manager ifNotNil: [manager globalSearchListItemFromFragment: aFragment asString. ^ true]]. self localSearchListItemFromFragment: aFragment asString. ^true! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 12/11/2013 18:08'! addButtons: toRightOrToLeft | btn | ({{'32x32/actions/reload'. self. #reinitializeCurrentSelectionEditor. 'rebuild current selection editor'. #haveCurrentSelection}. {'16x16/actions/remove'. self. #removeCurrentSelection. 'remove selected item'. #canRemoveItem. #buildMenuRemoveSelection:}. #spacer. {'16x16/actions/up_level_green'. self. #selectUpLevel. 'move up current selection to owner level'. #canSelectUpLevel. #menuSelectUpLevel:}. {'16x16/actions/collapse_all'. self. #collapseAll. 'collapse all'. #canCollapseAll}. {'16x16/actions/local_recents'. self. #recentsTree. 'local recents list'. #canShowRecents}. {'16x16/actions/unaccepted'. self. #unacceptedList. 'list of unaccepted editors'. #haveUnaccepted}. {'16x16/actions/next_green'. self. #historyNext. 'go forward in history'. #canSelectHistoryNext. #menuHistoryNextList:}. {'16x16/actions/previous_green'. self. #historyPrev. 'go back in history'. #canSelectHistoryPrev. #menuHistoryPrevList:}. #spacer. {'16x16/actions/tam_browser_open'. self. #browseCurrentSelection. 'open selected item specific editor as detached window'. #haveCurrentSelection. #buildMenuBrowseSelection:}. {'16x16/actions/new_right'. self. #newReference. 'add new item into selected taxon or current taxonomy'. #canInsertNewReference}. {'22x22/actions/tool_dock'. self. #freeze. 'freeze current taxonomy'. #rootWrapperIsSet}. (manager ifNotNil: [ {'22x22/actions/view_top_bottom'. manager. #splitHorizontally. 'split manager horizontally'. nil. #splitMenu:} ]). (manager ifNotNil: [ ])} select: [ :e | e notNil ]) do: [ :arr | arr == #spacer ifTrue: [ self listButtons addSpacer ] ifFalse: [ | label | label := ImageMorph withForm: (TamIcons icon: arr first). btn := (UITheme current newButtonIn: World for: arr second getState: nil action: arr third arguments: {} getEnabled: (arr size >= 5 ifTrue: [ arr fifth ]) getLabel: nil help: arr fourth translated) label: label; yourself. self listButtons addMorph: btn ] ]. toRightOrToLeft = #toRight ifTrue: [ listBtnRow addMorph: listButtons ] ifFalse: [ listBtnRow addMorphBack: listButtons ]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 6/15/2005 21:36'! addSpecificButtonsFor: aListItemReference self specificButtonsAlignment addTransparentSpacer. aListItemReference specificButtonsColumn: self inAlignment: self specificButtonsAlignment. ! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'apl 7/26/2005 11:22'! allEditorsSuchThat: aBlock do: anotherBlock editorsIndex ifNotNil: [ editorsIndex copy keysAndValuesDo: [:k :v | (aBlock value: v) ifTrue: [anotherBlock value: v]]]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 3/25/2005 13:05'! anySelectedAndRemoveable ^ self removeableSelection notEmpty! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/14/2005 10:49'! boldBlueSelection ^(listMorph respondsTo: #boldBlueEmphasisSet) ifTrue: [listMorph boldBlueEmphasisSet asOrderedCollection] ifFalse: [#() asOrderedCollection]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/14/2005 10:48'! boldRedSelection ^(listMorph respondsTo: #boldRedEmphasisSet) ifTrue: [listMorph boldRedEmphasisSet asOrderedCollection] ifFalse: [#() asOrderedCollection]! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/2/2012 16:04'! boundsOf: oneOfMyMorphs updatedWith: newBounds oneOfMyMorphs == listMorph ifTrue: [self class taxonomyListWidth: newBounds width]! ! !TamBrowser methodsFor: 'button actions' stamp: 'tam 3/30/2004 10:51'! browseCurrentSelection self getCurrentSelection notNil ifTrue: [^ self browseSelection: self getCurrentSelection]. ! ! !TamBrowser methodsFor: 'button actions' stamp: 'tam 7/8/2003 13:15'! browseSelection: aWrapper ^ aWrapper withoutListWrapper menuBrowse! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:29'! buildMainWindow mainWindow := (StandardWindow labelled: self mainWindowLabel) model: self. self buildWindow: mainWindow. ^ mainWindow! ! !TamBrowser methodsFor: 'menus' stamp: 'tam 7/8/2003 14:21'! buildMenuBrowseSelection: aMenu ^ self genericMenu: aMenu selector: #browseSelection: recursive: true! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 5/31/2005 19:16'! buildMenuRemoveSelection: aMenu self genericMenu: aMenu selector: #removeSelection: conditionBlock: [:r | r isRemoveable] recursive: true. self anySelectedAndRemoveable ifTrue: [aMenu addLine. aMenu add: 'remove all selected' target: self selector: #removeAllSelected]. ^aMenu! ! !TamBrowser methodsFor: 'menus' stamp: 'tam 10/11/2003 09:23'! buildMenuSelection: aMenu ^ self genericMenu: aMenu selector: #noteNewSelection: recursive: true! ! !TamBrowser methodsFor: 'ui building' stamp: 'tam 6/5/2003 12:26'! buildWindow: aWindow ^ self buildWindow: aWindow direction: #toRight! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 10/14/2010 22:04'! buildWindow: aWindow direction: toRightOrToLeft ^ self buildWindow: aWindow insideManager: nil direction: toRightOrToLeft ! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 5/2/2012 17:12'! buildWindow: aWindow insideManager: aManager direction: toRightOrToLeft | listBtnRowFrame listMorphFrame evalPaneMorphFrame editorRowFrame listAndEvalPaneMorphFrame listAndEvalPaneMorph leftDelta topFrame topRowHeight | topRowHeight := listBtnRowHeight + 2. manager := aManager. leftDelta := toRightOrToLeft = #ToRight ifTrue: [TamListItemReferenceUtil subFrameBorderDelta] ifFalse: [0]. topFrame := TamListItemReferenceUtil subWindowClass model: self. aWindow addMorph: topFrame fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (leftDelta @ (aManager ifNil: [topRowHeight] ifNotNil: [0]) corner: 0 @ 0)). aWindow model: self. evalPaneMorphFrame := self localWorkspacePaneMorphFrameInsideManager: aManager direction: toRightOrToLeft. listBtnRowFrame := self listBtnRowFrameInsideManager: aManager direction: toRightOrToLeft. listMorphFrame := self listMorphFrameInsideManager: aManager direction: toRightOrToLeft. editorRowFrame := self editorRowFrameInsideManager: aManager direction: toRightOrToLeft. listAndEvalPaneMorphFrame := self listAndWorkspacePaneMorphsFrameInsideManager: aManager direction: toRightOrToLeft. listButtons := TamButtonsAlignmentMorph newRow. aManager ifNil: [listBtnRow := TamButtonsAlignmentMorph typicalRowOwner] ifNotNil: [listBtnRow := aManager listBtnRow. listBtnRow addMorphBack: listButtons]. listBtnRow borderColor: #raised. specificButtonsAlignment := TamButtonsAlignmentMorph newRow. listBtnRow addMorphBack: specificButtonsAlignment. editorRow := TamListItemReferenceUtil subWindowClass model: self. listAndEvalPaneMorph := TamListItemReferenceUtil subWindowClass model: self. listMorph := self hierarchicalListMorphClass on: self list: #getList selected: #getCurrentSelection changeSelected: #noteNewSelection: menu: #menu:shifted: keystroke: #keyStroke:from:. localWorkspaceHolder := TamStringHolder new. aManager ifNil: [mainWindow addMorph: listBtnRow fullFrame: listBtnRowFrame]. listAndEvalPaneMorph addMorph: listMorph fullFrame: listMorphFrame. localWorkspacePaneMorph := PluggableTextMorph on: localWorkspaceHolder text: #contents accept: #acceptContents: readSelection: nil menu: #codePaneMenu:shifted:. self getLocalWorkspaceHeight > 0 ifTrue: [listAndEvalPaneMorph addMorph: localWorkspacePaneMorph fullFrame: evalPaneMorphFrame. [localWorkspacePaneMorph color: Workspace patchworkUIThemeColor] on: Error do: [localWorkspacePaneMorph color: Color lightYellow twiceLighter twiceLighter twiceLighter]]. localWorkspacePaneMorph borderWidth: 1. topFrame addMorph: listAndEvalPaneMorph fullFrame: listAndEvalPaneMorphFrame. topFrame addMorph: editorRow fullFrame: editorRowFrame. listBtnRow minimumExtent: 1 @ 1. self getLocalWorkspaceHeight > 0 ifTrue: [listAndEvalPaneMorph addPaneHSplitterBetween: listMorph and: {localWorkspacePaneMorph}]. toRightOrToLeft = #toRight ifTrue: [topFrame addPaneVSplitterBetween: listAndEvalPaneMorph and: {editorRow}] ifFalse: [topFrame addPaneVSplitterBetween: editorRow and: {listAndEvalPaneMorph}]. self addButtons: toRightOrToLeft. listMorph autoDeselect: true. listMorph color: Color white. listMorph enableDragNDrop: true. listMorph selection: nil. listMorph changed: #getList. listMorph changed: #getSelection. topFrame startStepping. ^ mainWindow! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/16/2005 08:29'! buttonExtent ^manager ifNil: [self class buttonExtent] ifNotNil: [manager buttonExtent]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:32'! canCollapseAll | topSubmorphs | ^ (topSubmorphs := self listMorph scroller submorphs) size > 2 and: [topSubmorphs anySatisfy: [:sm | sm isExpanded]]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 4/21/2005 23:39'! canInsertNewReference ^true! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:39'! canMoveDownCurrentSelection ^ self haveCurrentSelection and: [self unwrappedSelection canBeMovedDown]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:38'! canMoveUpCurrentSelection ^ self haveCurrentSelection and: [self unwrappedSelection canBeMovedUp]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 4/18/2005 22:26'! canRemoveItem ^self rootWrapperIsSet ! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 4/18/2005 19:44'! canSearchItemByName ^self rootWrapperIsSet or: [manager notNil ] ! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:13'! canSelectHistoryNext ^ self rootWrapperIsSet and: [self getHistory canSelectNext]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:13'! canSelectHistoryPrev ^ self rootWrapperIsSet and: [self getHistory canSelectPrev]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:32'! canSelectUpLevel | | ^ self getCurrentSelection notNil and: [self getCurrentSelection withoutListWrapper hierarchyLevel > 1]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:13'! canShowRecents ^ self rootWrapperIsSet and: [self getHistory canShowRecents]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 1/29/2007 11:13'! checkAndClean self checkAndCleanEditorsIndex. self getHistory checkAndClean. TamListItemWrapper allSubInstances do: [:w | (w item notNil and: [w item isReleased]) ifTrue: [w destroy]]. TamIndentingListItemMorph allSubInstances do: [:w | (w complexContents notNil and: [w complexContents isReleased]) ifTrue: [w delete]]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 2/9/2006 13:49'! checkAndCleanAfterClassRemoval self getCurrentSelection ifNotNil: [(self getCurrentSelection isReleased or: [self getCurrentSelection withoutListWrapper isReleased]) ifTrue: [self noteNewSelection: nil]]. self destroyAllEditors. self getHistory checkAndClean! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 9/28/2007 07:24'! checkAndCleanEditorsIndex ^ editorsIndex ifNotNil: [editorsIndex keysAndValuesRemove: [:k :v | k notNil and: [k isReleased]]]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/16/2005 09:39'! collapseAll self okToChange ifTrue: [self listMorph collapseAll. ]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/16/2005 09:39'! collapseItem: aMorph ^ super collapseItem: aMorph! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 1/16/2004 09:46'! copyPasteBuffer ^ TamManager copyPasteBuffer! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 1/16/2004 09:45'! copyPasteBuffer: aSet TamManager copyPasteBuffer: aSet! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 3/3/2006 15:38'! copyPasteBufferList ^ TamManager copyPasteBufferList! ! !TamBrowser methodsFor: 'copy/paste' stamp: 'apl 3/7/2006 09:42'! copySelection self rootWrapper ifNotNil: [ self copySelection: self selection] ! ! !TamBrowser methodsFor: 'copy/paste' stamp: 'tam 1/16/2004 09:48'! copySelection: aCollection TamManager copySelection: aCollection ! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 6/27/2003 01:22'! currentlyExpanded ^ listMorph currentlyExpanded! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/13/2005 16:19'! currentlyExpanded: aCollection | morphList | listMorph scroller removeAllMorphs. morphList := OrderedCollection new. listMorph addMorphsTo: morphList from: self getList allowSorting: false withExpandedItems: self expandedItems atLevel: 0. listMorph insertNewMorphs: morphList! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 9/27/2007 11:28'! defaultBackgroundColor ^Tamaris preferedWindowColor! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/18/2012 12:36'! destroy self noteNewSelection: nil. self destroyAllEditors. self checkAndClean. self breakDependents. TamManager removeDependent: self. mainWindow ifNotNil: [mainWindow stopStepping. mainWindow submorphs do: [:sm | sm delete]. mainWindow := nil]. rootWrapper ifNotNil: [rootWrapper destroy. rootWrapper := nil]. listBtnRow := nil. listButtons ifNotNil: [listButtons destroy]. listButtons := nil. listMorph ifNotNil: [listMorph model: nil. listMorph := nil]. localWorkspaceHolder destroy. localWorkspaceHolder := nil. editorRow ifNotNil: [editorRow destroy. editorRow := nil]. localWorkspacePaneMorph := nil. localWorkspacePaneContents := nil. manager := nil. editorsIndex := nil. specificButtonsAlignment destroy. specificButtonsAlignment := nil. worldButtons destroy. worldButtons := nil. globalRecentsInput destroy. globalRecentsInput := nil. recentsRow destroy. recentsRow := nil. super destroy! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'apl 7/26/2005 11:22'! destroyAllEditors editorsIndex ifNotNil: [ editorsIndex copy keysAndValuesDo: [:k :v | self destroyEditorFor: k]]! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'apl 7/26/2005 11:23'! destroyAllEditors: editorsList editorsIndex ifNotNil: [ editorsIndex copy keysAndValuesDo: [:k :v | (editorsList includes: v) ifTrue: [self destroyEditorFor: k]]]! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'apl 7/26/2005 11:22'! destroyAllEditorsExceptFor: aReferenceList editorsIndex ifNotNil: [ editorsIndex copy keysAndValuesDo: [:k :v | (aReferenceList includes: k) ifFalse: [self destroyEditorFor: k]]]! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'apl 7/26/2005 11:22'! destroyAllEditorsSuchThat: aBlock editorsIndex ifNotNil: [ editorsIndex copy keysAndValuesDo: [:k :v | (aBlock value: v) ifTrue: [ self destroyEditorFor: k]]]! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 01:35'! destroyEditorFor: aReference | editor | editorsIndex ifNotNil: [(editor := editorsIndex at: aReference ifAbsent: []) ifNotNil: [ aReference announcer unsubscribe: self. aReference announcer unsubscribe: editor. editor removeDependent: aReference. editor model removeDependent: aReference. editor model changed: #clearUserEdits. editor model windowIsClosing; destroy. (editor isKindOf: SystemWindow) ifTrue: [editor delete]. editorsIndex removeKey: aReference]]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 4/3/2006 16:58'! destroyNotSelectedEditorFor: aReference self unwrappedSelection ~= aReference ifTrue: [self destroyEditorFor: aReference. ^ true]. ^ false! ! !TamBrowser methodsFor: 'drag and drop' stamp: 'apl 3/20/2005 22:47'! dragPassengerFor: item inMorph: dragSource ^ item complexContents withoutListWrapper! ! !TamBrowser methodsFor: 'drag and drop' stamp: 'apl 4/29/2004 16:47'! dragTransferTypeForMorph: aMorph ^ #tamaris! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 3/4/2004 11:19'! editor ^self editorRow ifNotNil: [self editorRow findA: TamListItemReferenceUtil subWindowClass ]! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 5/17/2012 18:09'! editor: anEditor for: aReference anEditor ifNotNil: [ editorsIndex at: aReference put: anEditor]! ! !TamBrowser methodsFor: 'ui building' stamp: 'apl 7/26/2005 11:23'! editorFor: aReference ^ editorsIndex ifNotNil: [ editorsIndex at: aReference ifAbsent: []]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 7/2/2003 12:49'! editorModel ^ self editor ifNotNil: [self editor model]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 5/27/2003 10:35'! editorRow ^ editorRow! ! !TamBrowser methodsFor: 'subframes building' stamp: 'AlainPlantec 5/2/2012 17:04'! editorRowFrameInsideManager: aManager direction: toRightOrToLeft ^ toRightOrToLeft == #toRight ifTrue: [aManager ifNil: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: ((self taxonomyListWidth + TamListItemReferenceUtil subFrameBorderDelta) @ 0 corner: 0 @ 0)] ifNotNil: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: ((self taxonomyListWidth + TamListItemReferenceUtil subFrameBorderDelta) @ 0 corner: 0 @ 0)]] ifFalse: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: (self taxonomyListWidth negated - TamListItemReferenceUtil subFrameBorderDelta) @ 0)]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/16/2005 09:40'! expandItem: aMorph ^ super expandItem: aMorph! ! !TamBrowser methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:35'! expandedItems | l | l := self rootTaxon managerItem ifNotNil: [self rootTaxon managerItem currentlyExpanded]. ^ l ifNil: [OrderedCollection new]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/15/2005 11:58'! expandedItems: aCollection | item | self rootTaxon ifNotNil: [ (item := self rootTaxon managerItem) ifNotNil: [item currentlyExpanded: aCollection. item currentSelection: self unwrappedSelection]]! ! !TamBrowser methodsFor: 'button actions' stamp: 'tam 1/24/2004 10:17'! findWindow ^ World findWindow: ActiveEvent! ! !TamBrowser methodsFor: 'updating' stamp: 'tam 1/10/2004 11:55'! freeze self takeExpandedItems. ! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 6/27/2003 21:08'! fullPathAsStringFor: aWrapperOrReference ^ aWrapperOrReference fullPathAsString.! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 5/31/2005 19:18'! genericMenu: aMenu selector: aSelector conditionBlock: aBlock recursive: aBoolean self rootWrapper contents do: [:c | c genericMenu: aMenu selector: aSelector conditionBlock: aBlock fromTaxonomyBrowser: self recursive: aBoolean]. ^aMenu! ! !TamBrowser methodsFor: 'menus' stamp: 'tam 10/12/2003 10:33'! genericMenu: aMenu selector: aSelector recursive: aBoolean ^ self genericMenu: aMenu selector: aSelector conditionBlock: [:r| true] recursive: aBoolean ! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:12'! getHistory ^ TamBrowserHistoryList historyListFor: self ! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 2/9/2006 13:59'! getList rootWrapper withoutListWrapper ifNotNil: [rootWrapper withoutListWrapper isReleased ifTrue: [self mainWindow ifNotNil: [self mainWindow delete]. ^ #()]]. ^ (rootWrapper isNil or: [rootWrapper isReleased]) ifTrue: [#()] ifFalse: [rootWrapper contents]! ! !TamBrowser methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:51'! getLocalWorkspaceHeight ^ Tamaris showLocalWorkspace ifTrue: [localWorkspaceHeight ifNil: [localWorkspaceHeight := self class localWorkspaceNumberOfLines * StandardFonts defaultFont height]] ifFalse: [0]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/22/2005 15:13'! getRecentsInputContent ^self unwrappedSelection ifNil: [''] ifNotNil: [self unwrappedSelection shortName]! ! !TamBrowser methodsFor: 'testing' stamp: 'AlainPlantec 12/5/2013 09:29'! hasUnacceptedEdits ^ self editorModel notNil and: [self editorModel hasUnacceptedEdits]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:36'! haveCurrentSelection ^ self getCurrentSelection notNil ! ! !TamBrowser methodsFor: 'ui building' stamp: 'apl 7/26/2005 11:23'! haveEditorFor: aReference ^( editorsIndex at: aReference ifAbsent: []) notNil! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/6/2006 12:06'! haveUnaccepted editorsIndex keysAndValuesDo: [:k :v | v model ifNotNil: [ v model hasUnacceptedEdits ifTrue: [^ true]]]. ^ false! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 10/11/2003 11:03'! hierarchicalListMorphClass ^ Smalltalk at: #TamHierarchicalListMorph ifAbsent: [SimpleHierarchicalListMorph]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:14'! historyAddItem: aListItemReference self getHistory addItem: (TamBrowserHistoryItem listItemReference: aListItemReference)! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 4/9/2005 11:26'! historyItem ^ self getCurrentSelection notNil ifTrue: [TamBrowserHistoryItem listItemReference: self getCurrentSelection]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 6/16/2005 09:40'! historyNext self okToChange ifTrue: [self getHistory selectNext. ]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 6/16/2005 09:40'! historyPrev self okToChange ifTrue: [self getHistory selectPrev. ]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 6/16/2005 09:40'! historyRecents self getHistory selectFromRecentsList. ! ! !TamBrowser methodsFor: 'ui building' stamp: 'AlainPlantec 5/17/2012 18:10'! initialExtent ^ self class initialExtent! ! !TamBrowser methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/18/2012 12:35'! initialize super initialize. listBtnRowHeight := self buttonExtent y + 4. self getHistory. localWorkspacePaneContents := ''. editorsIndex := WeakIdentityKeyDictionary new! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 4/9/2005 10:31'! isBrowserHistoryItemValid: anHistoryItem ^ anHistoryItem listItemReference isReleasedOrHaveReleasedOwner not! ! !TamBrowser methodsFor: 'testing' stamp: 'tam 2/20/2004 00:48'! isReleased ^ editorsIndex isNil. ! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 3/3/2006 08:36'! keyStroke: aCharacter from: tamuggableListMorph aCharacter = $f ifTrue: [^ self menuSearch]. aCharacter = $c ifTrue: [^ self copySelection]. aCharacter = $v ifTrue: [^ self pasteSelection]. aCharacter = $x ifTrue: [self rootWrapper ifNotNil: [self anySelectedAndRemoveable ifTrue: [^ self removeAllSelected]]]. self unwrappedSelection notNil ifTrue: [^ self unwrappedSelection keyStroke: aCharacter from: tamuggableListMorph]! ! !TamBrowser methodsFor: 'subframes building' stamp: 'apl 7/9/2005 00:14'! listAndWorkspacePaneMorphsFrameInsideManager: aManager direction: toRightOrToLeft ^ toRightOrToLeft == #toRight ifTrue: [aManager ifNil: [LayoutFrame fractions: (0 @ 0 corner: 0 @ 1) offsets: (0 @ 0 corner: self taxonomyListWidth @ 0)] ifNotNil: [LayoutFrame fractions: (0 @ 0 corner: 0 @ 1) offsets: (0 @ 0 corner: self taxonomyListWidth @ 0)]] ifFalse: [LayoutFrame fractions: (1 @ 0 corner: 1 @ 1) offsets: (self taxonomyListWidth negated @ 0 corner: 0 negated @ 0)]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 5/27/2003 10:35'! listBtnRow ^listBtnRow! ! !TamBrowser methodsFor: 'subframes building' stamp: 'apl 4/8/2005 09:34'! listBtnRowFrameInsideManager: aManager direction: toRightOrToLeft ^ toRightOrToLeft == #toRight ifTrue: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ listBtnRowHeight).] ifFalse: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ listBtnRowHeight)]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 5/27/2003 10:35'! listButtons ^ listButtons! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 6/3/2003 12:08'! listMorph ^ listMorph! ! !TamBrowser methodsFor: 'subframes building' stamp: 'apl 7/8/2005 22:50'! listMorphFrameInsideManager: aManager direction: toRightOrToLeft ^ toRightOrToLeft == #toRight ifTrue: [aManager ifNil: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ self getLocalWorkspaceHeight negated)] ifNotNil: [LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ self getLocalWorkspaceHeight negated)]] ifFalse: [LayoutFrame fractions: (0@ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ self getLocalWorkspaceHeight negated)]! ! !TamBrowser methodsFor: 'button actions' stamp: 'AlainPlantec 1/18/2013 09:17'! localSearchListItemByName | pattern | pattern := UIManager default request: 'item name or fragment?' translated. pattern isNil ifTrue: [^nil]. pattern isEmpty ifTrue: [^nil]. ^ self localSearchListItemFromFragment: pattern! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 6/3/2005 18:35'! localSearchListItemFromFragment: aFragment | toMatch founds target parents | toMatch := aFragment asLowercase. founds := self rootWrapper selectDeeplySuchThat: [:e | e item shortName includesSubstring: toMatch caseSensitive: false]. founds remove: self rootWrapper ifAbsent: []. founds isEmpty ifTrue: [^self noSearchMatchFound]. self class genericTree: 'Tamaris: found items from ''' , aFragment , '''' flatCollection: (founds collect: [:e | parents := e item parentsChain. parents add: e item. parents]) selectingBlock: [:e | target := self manager ifNil: [self]. target noteNewSelectionDeeply: (e linked wrapperClass with: e linked model: nil)] client: self! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/8/2005 13:51'! localWorkspaceHeight ^ localWorkspaceHeight! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:08'! localWorkspaceMorph ^localWorkspacePaneMorph! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/18/2005 16:44'! localWorkspacePane ^self localWorkspaceMorph ifNotNil: [self localWorkspaceMorph model]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:10'! localWorkspacePaneContents ^localWorkspacePaneContents! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/8/2005 12:10'! localWorkspacePaneContents: aStringOrText localWorkspacePaneContents := aStringOrText asString! ! !TamBrowser methodsFor: 'subframes building' stamp: 'apl 7/23/2005 15:53'! localWorkspacePaneMorphFrameInsideManager: aManager direction: toRightOrToLeft ^ toRightOrToLeft == #toRight ifTrue: [LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ (self getLocalWorkspaceHeight negated + TamListItemReferenceUtil subFrameBorderDelta) corner: 0 @ 0)] ifFalse: [LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ (self getLocalWorkspaceHeight negated + TamListItemReferenceUtil subFrameBorderDelta) corner: 0 @ 0)]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 5/27/2003 10:35'! mainWindow ^mainWindow! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 6/5/2003 00:35'! mainWindow: aWindow mainWindow := aWindow! ! !TamBrowser methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 13:32'! mainWindowLabel ^ self class name , ' on: ' , self rootWrapper asString! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 7/7/2003 21:17'! manager ^ manager! ! !TamBrowser methodsFor: 'menus' stamp: 'AlainPlantec 10/7/2010 21:32'! menu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | listWrapper | (listWrapper := self getCurrentSelection ifNil: [rootWrapper]) ifNotNil: [^ listWrapper menu: menu shifted: b]. ^ menu! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 1/29/2007 11:14'! menuClearHistory self getHistory clearHistory. self changed! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 4/9/2005 10:18'! menuHistoryNextList: aMenu ^ aMenu! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 4/9/2005 10:18'! menuHistoryPrevList: aMenu ^ aMenu! ! !TamBrowser methodsFor: 'menus' stamp: 'AlainPlantec 12/5/2013 11:12'! menuNewReferenceFrom: aReference Into: aMenu aReference menuAddReferenceInto: aMenu. aMenu addTitle: 'add reference on ...'. ^ aMenu! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:14'! menuRecentsList self getHistory selectFromRecentsList! ! !TamBrowser methodsFor: 'menus' stamp: 'tam 6/28/2003 00:14'! menuSearch self searchListItemByName! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 6/3/2005 18:35'! menuSelectUpLevel: aMenu | owner | owner := self unwrappedSelection owner. [owner owner notNil] whileTrue: [aMenu add: owner fullPathAsString target: self selector: #noteNewSelectionDeeply: argumentList: { (owner wrapperClass with: owner model: nil) }. owner := owner owner]. ^aMenu! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 6/3/2005 18:35'! menuUpLevelCurrentSelection: aMenu | owner | owner := self unwrappedSelection owner. [owner owner notNil] whileTrue: [aMenu add: owner fullPathAsString target: self selector: #noteNewSelectionDeeplyAndCollapse: argumentList: { (owner wrapperClass with: owner model: nil) }. owner := owner owner]. ^aMenu! ! !TamBrowser methodsFor: 'ui building' stamp: 'apl 7/26/2005 11:23'! modelEditor: anEditor for: aReference anEditor ifNotNil: [ editorsIndex at: aReference put: anEditor]! ! !TamBrowser methodsFor: 'ui opening/closing' stamp: 'apl 5/24/2005 15:54'! modelWakeUpIn: aMorph TamManager addDependent: self. super modelWakeUpIn: aMorph. self changed! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 3/3/2006 08:11'! moveDownCurrentSelection | curr | curr := self unwrappedSelection. (curr notNil and: [curr isMoveable]) ifTrue: [curr owner moveDownReference: curr]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 3/3/2006 08:11'! moveUpCurrentSelection | curr | curr := self unwrappedSelection. (curr notNil and: [curr isMoveable]) ifTrue: [curr owner moveUpReference: curr]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/16/2005 11:46'! newReference | menu | (self unwrappedSelection respondsTo: #menuAddReference) ifTrue: [menu := self unwrappedSelection menuAddReference. ] ifFalse: [self rootWrapper withoutListWrapper ifNotNil: [menu := self rootWrapper withoutListWrapper linked menuAddReference. ]]. menu ifNotNil: [ menu addTitle: 'add ...'. menu invokeModal]! ! !TamBrowser methodsFor: 'button actions' stamp: 'alain.plantec 2/3/2009 12:11'! noSearchMatchFound self inform: 'no item found'. ^ nil! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 00:44'! noteNewSelection: aWrapper (self okToChange and: [self rootWrapper notNil]) ifTrue: [self noteNewSelectionFromWrapper: (self wrapperOf: aWrapper)]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/14/2004 12:04'! noteNewSelection: aWrapper currentlyExpanded: aCollection self okToChange ifTrue: [ self currentlyExpanded: aCollection. aWrapper ifNotNil: [self noteNewSelectionFromWrapper: (self wrapperOf: aWrapper)]]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 4/13/2005 23:03'! noteNewSelectionDeeply: aWrapper | path pathMorph relatedWrapper adjustIt | adjustIt := false. self okToChange ifTrue: [self noteNewSelection: nil. (relatedWrapper := self wrapperOf: aWrapper) ifNil: [^ self inform: 'unable to select ''' , aWrapper asString , '''']. (path := relatedWrapper parentsChain allButFirst) isEmpty ifFalse: [pathMorph := self listMorph scroller submorphs detect: [:sm | sm complexContents withoutListWrapper linked = path first withoutListWrapper] ifNone: [^ false]. path allButFirst do: [:p | pathMorph isExpanded ifFalse: [pathMorph toggleExpandedState. adjustIt := true]. self noteNewSelectionSilently: pathMorph complexContents. pathMorph := pathMorph children detect: [:sm | sm complexContents withoutListWrapper = p withoutListWrapper] ifNone: []]. pathMorph ifNotNil: [pathMorph isExpanded ifFalse: [pathMorph toggleExpandedState. adjustIt := true]]]. self noteNewSelectionFromWrapper: relatedWrapper. adjustIt ifTrue: [ listMorph adjustSubmorphPositions]]. ^ true! ! !TamBrowser methodsFor: 'updating' stamp: 'tam 7/8/2003 01:16'! noteNewSelectionDeeplyAndCollapse: aWrapper self okToChange ifTrue: [self noteNewSelectionDeeply: aWrapper. listMorph expandOrCollapseCurrentMorph]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/16/2005 14:51'! noteNewSelectionFromWrapper: aWrapper (self okToChange and: [self rootWrapper notNil]) ifTrue: [self updateCodeRowFor: aWrapper. self updateLocalWorkspacePaneMorphFor: aWrapper. super noteNewSelection: aWrapper]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/14/2004 11:56'! noteNewSelectionSilently: aWrapper self okToChange ifTrue: [super noteNewSelection: (self wrapperOf: aWrapper)]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/23/2005 10:00'! okToChange | okForEditor result | okForEditor := self editorModel ifNil: [true] ifNotNil: [(currentSelection notNil and: [currentSelection forceOkToChange]) or: [self editorModel canDiscardEdits ifFalse: [editorRow flash]. self editorModel okToChange]]. result := self isReleased or: [okForEditor and: [self localWorkspacePane ifNil: [true] ifNotNil: [self localWorkspacePane canDiscardEdits ifFalse: [self localWorkspaceMorph flash. self localWorkspaceMorph flash]. self localWorkspacePane okToChange]]]. ^ result! ! !TamBrowser methodsFor: 'ui building' stamp: 'tam 5/27/2003 23:41'! openAsMorph ^ self buildMainWindow openInWorld ! ! !TamBrowser methodsFor: 'copy/paste' stamp: 'apl 3/3/2006 15:38'! pasteSelection | trs whereToPaste | whereToPaste := self unwrappedSelection ifNil: [self rootWrapper withoutListWrapper]. self copyPasteBufferList do: [:item | trs := TransferMorph withPassenger: item from: self. whereToPaste acceptDroppingMorph: trs copy: true]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 1/29/2007 11:14'! recents ^ self getHistory recents collect: [:wrapper | wrapper listItemReference]! ! !TamBrowser methodsFor: 'button actions' stamp: 'alain.plantec 2/3/2009 12:16'! recentsListPopup | index choice recentsItems usedRecents | self recents isEmpty ifFalse: [usedRecents := self recents reversed. recentsItems := usedRecents collect: [:rec | rec longName contractTo: 100]. recentsItems do: [:ri | ri replaceAll: Character cr with: Character space]. (index := (UIManager default chooseFrom: recentsItems lines: #())) = 0 ifFalse: [choice := usedRecents at: index. self noteNewSelectionDeeply: (choice linked wrapperClass with: choice linked model: nil)]]! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 7/26/2005 13:12'! recentsTree | aghl | aghl := self class genericTree: 'Tamaris: recents list' listBlock: [self recents ] selectingBlock: [:e | (self manager ifNil: [self]) noteNewSelectionDeeply: (e linked wrapperClass with: e linked model: nil)] client: self. aghl addButtonSpacer. aghl addButton: '16x16/actions/erase' target: self selector: #menuClearHistory balloonText: 'clear recents list'. ^ aghl! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/6/2006 12:06'! referencesWithUnacceptedEdits | unaccepted | unaccepted := OrderedCollection new. editorsIndex keysAndValuesDo: [:k :v | v model ifNotNil: [v model hasUnacceptedEdits ifTrue: [unaccepted add: k]]]. ^ unaccepted! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 13:02'! reinitializeAnnounce: anAnnounce self isReleased ifTrue: [^self ]. self reinitializeFrom: anAnnounce itemReference ! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/5/2004 11:49'! reinitializeCurrentSelectionEditor self getCurrentSelection notNil ifTrue: [^ self unwrappedSelection reinitializeEditor]! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 13:26'! reinitializeFrom: aTamListItemReference (self editorModel isNil or: [self editorModel okToChange]) ifTrue: [ self destroyEditorFor: aTamListItemReference. aTamListItemReference = self unwrappedSelection ifTrue: [ self noteNewSelection: aTamListItemReference]]! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 15:09'! reloadEditorFor: aReference self unwrappedSelection = aReference ifTrue: [self noteNewSelection: nil. self destroyEditorFor: aReference. self noteNewSelection: aReference]! ! !TamBrowser methodsFor: 'menus' stamp: 'apl 4/26/2006 16:40'! rememberWindowSize self class initialExtent: mainWindow bounds extent! ! !TamBrowser methodsFor: 'button actions' stamp: 'alain.plantec 2/3/2009 12:17'! removeAllSelected self rootWrapper ifNotNil: [(self confirm: 'remove all selected items ?' translated) ifTrue: [self removeableSelection do: [:item | item remove. listMorph removeEmphasisOf: item]. TamManager changed: #contents. self noteNewSelection: nil]]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/5/2006 19:26'! removeCurrentSelection | menu | self rootWrapper ifNotNil: [(self unwrappedSelection notNil and: [self unwrappedSelection isRemoveable]) ifTrue: [menu := MenuMorph new. menu defaultTarget: self. menu add: 'remove current' target: self selector: #removeSelection: argumentList: {self getCurrentSelection}]. menu ifNil: [menu := MenuMorph new] ifNotNil: [menu addLine]. self buildMenuRemoveSelection: menu]. ^ menu ifNotNil: [menu popUpInWorld]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 1/29/2007 11:14'! removeSelection: aWrapper | currItem | aWrapper withoutListWrapper menuDelete ifTrue: [(listMorph respondsTo: #removeEmphasisOf) ifTrue: [listMorph removeEmphasisOf: aWrapper withoutListWrapper]. (currItem := self getHistory currentItem) ifNotNil: [self noteNewSelection: currItem listItemReference]]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 6/15/2005 19:25'! removeSpecificButtons | buttons | buttons := self specificButtonsAlignment submorphs. self specificButtonsAlignment removeAllMorphs. buttons do: [:btn | btn destroy]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/14/2005 10:48'! removeableSelection ^(self boldRedSelection, self boldBlueSelection) select: [:item | item isRemoveable]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 1/10/2004 15:05'! rootTaxon ^ self rootWrapper withoutListWrapper! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 5/27/2003 10:35'! rootWrapper ^ rootWrapper! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 6/3/2005 17:01'! rootWrapper: aWrapper rootWrapper ifNotNil: [rootWrapper destroy]. (rootWrapper := aWrapper) ifNil: [self noteNewSelection: nil. self changed: #getList]! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 6/8/2004 23:28'! rootWrapperIsSet ^ self rootWrapper notNil! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/18/2005 19:48'! searchListItemByName self rootWrapperIsSet ifFalse: [^manager ifNotNil: [manager globalSearchListItemByName]]. ^self localSearchListItemByName! ! !TamBrowser methodsFor: 'button actions' stamp: 'tam 10/10/2003 11:22'! selectUpLevel listMorph selectedMorph ifNotNil: [self noteNewSelection: self unwrappedSelection owner]! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 3/7/2006 09:41'! selection (self boldBlueSelection) ifNotEmpty: [:selSet | ^ selSet asArray]. self unwrappedSelection ifNotNil: [^ Array with: self unwrappedSelection]. ^ #()! ! !TamBrowser methodsFor: 'history-handling' stamp: 'apl 6/3/2005 21:34'! setFromBrowserHistoryItem: anHistoryItem | target | target := manager ifNil: [self] ifNotNil: [manager]. ^target noteNewSelectionDeeply: anHistoryItem listItemReference! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/18/2005 20:25'! specificButtonsAlignment ^specificButtonsAlignment! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/18/2005 20:26'! specificButtonsAlignment: aButtonsAlignment (specificButtonsAlignment := aButtonsAlignment) ! ! !TamBrowser methodsFor: 'testing' stamp: 'apl 3/16/2005 15:20'! takeEvent: anEvent ^ true! ! !TamBrowser methodsFor: 'updating' stamp: 'tam 1/10/2004 14:29'! takeExpandedItems self expandedItems: self currentlyExpanded! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 11/21/2005 11:06'! taxonomyBrowser ^ self! ! !TamBrowser methodsFor: 'accessing' stamp: 'apl 4/18/2005 22:31'! taxonomyListWidth ^self class taxonomyListWidth! ! !TamBrowser methodsFor: 'button actions' stamp: 'AlainPlantec 1/28/2011 09:10'! unacceptedList | index choice recentsItems list target | (list := self referencesWithUnacceptedEdits) isEmpty ifFalse: [recentsItems := list collect: [:rec | rec longName contractTo: 100]. recentsItems do: [:ri | ri replaceAll: Character cr with: Character space]. (index := UIManager default chooseFrom: recentsItems) = 0 ifFalse: [choice := list at: index. target := self manager ifNil: [self]. target noteNewSelectionDeeply: (choice linked wrapperClass with: choice linked model: nil)]]! ! !TamBrowser methodsFor: 'accessing' stamp: 'tam 6/26/2003 11:07'! unwrappedSelection ^ self getCurrentSelection ifNotNil: [self getCurrentSelection withoutListWrapper]! ! !TamBrowser methodsFor: 'button actions' stamp: 'apl 4/13/2005 23:18'! upLevelCurrentSelection self selectUpLevel. listMorph toggleExpandedState: listMorph selectedMorph! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 01:49'! update: aSymbol aSymbol isTamListItemReference ifTrue: [aSymbol isReleasedOrHaveReleasedOwner ifTrue: [aSymbol = self getCurrentSelection withoutListWrapper ifTrue: [self noteNewSelection: nil]. ^ self updateTree ]]. (aSymbol isTamListItemReference or: [#(#taxonomies #contents ) anySatisfy: [:c | c = aSymbol]]) ifTrue: [(aSymbol = self rootWrapper withoutListWrapper and: [self mainWindow notNil]) ifTrue: [self mainWindow setLabel: self mainWindowLabel]. ^ self updateTree]. super update: aSymbol! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/24/2005 09:44'! updateCodeRowFor: aWrapper (currentSelection notNil and: [ currentSelection isReleased not]) ifTrue: [currentSelection unSelectingFrom: self]. aWrapper notNil ifTrue: [aWrapper selectingFrom: self]! ! !TamBrowser methodsFor: 'updating' stamp: 'apl 6/25/2005 09:56'! updateLocalWorkspacePaneMorphFor: aWrapper aWrapper isNil ifTrue: [(currentSelection notNil and: [currentSelection withoutListWrapper notNil]) ifTrue: [currentSelection withoutListWrapper localWorkspacePaneContents: self localWorkspacePane contents]. self localWorkspacePane doItReceiver: self. self localWorkspacePane acceptContents: self localWorkspacePaneContents] ifFalse: [self localWorkspacePane doItReceiver: aWrapper withoutListWrapper. currentSelection isNil ifTrue: [self localWorkspacePaneContents: self localWorkspacePane contents] ifFalse: [currentSelection withoutListWrapper ifNotNil: [currentSelection withoutListWrapper localWorkspacePaneContents: self localWorkspacePane contents]]. aWrapper withoutListWrapper ifNotNil: [self localWorkspacePane acceptContents: aWrapper withoutListWrapper localWorkspacePaneContents]]. self localWorkspacePane changed: #contents! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 18:30'! updateTree ^ self changed: #getList. ! ! !TamBrowser methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 18:53'! updateTree: anAnnounce ^ self updateTree ! ! !TamBrowser methodsFor: 'drag and drop' stamp: 'apl 11/2/2006 11:34'! wantsDroppedMorph: transferMorph event: anEvent inMorph: destinationLM ^ TamManager wantsDroppedMorph: transferMorph event: anEvent inMorph: destinationLM! ! !TamBrowser methodsFor: 'ui opening/closing' stamp: 'apl 2/20/2007 15:36'! windowIsClosing self destroy. super windowIsClosing! ! !TamBrowser methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 00:54'! wrapperOf: aReferenceOrAWrapper (aReferenceOrAWrapper isKindOf: TamListItemReference) ifTrue: [^ aReferenceOrAWrapper linked wrapperClass with: aReferenceOrAWrapper linked model: nil] ifFalse: [^ aReferenceOrAWrapper]! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'apl 6/29/2007 11:08'! buttonExtent ^ Tamaris buttonExtent! ! !TamGenericHierarchicalList class methodsFor: 'examples' stamp: 'apl 4/5/2005 13:31'! classAndSelectorsByCategoryExample "self classAndSelectorsByCategoryExample" | aghl editorClass categories classesOfCategoryBlock sysCatBrowserBlock browser classBrowserBlock | categories := SystemOrganization categories asOrderedCollection. editorClass := (Smalltalk at: #RefactoringBrowser ifAbsent: []) ifNil: [Browser]. browser := editorClass new. (browser openAsMorphEditing: nil) openAsMorph. sysCatBrowserBlock := [:sysCat | browser systemCategoryListIndex: (browser systemCategoryList indexOf: sysCat)]. classBrowserBlock := [:cls :sel | browser setClass: cls selector: sel]. classesOfCategoryBlock := [:cat :flatCol | (Smalltalk organization listAtCategoryNamed: cat) inject: flatCol into: [:col :cls | col addAll: ((Smalltalk at: cls) selectors asOrderedCollection collect: [:s | OrderedCollection with: #sysCat -> cat with: #class -> (Smalltalk at: cls) with: #selector -> s]); yourself]]. aghl := self fromFlatCollection: (categories inject: OrderedCollection new into: [:col :cat | classesOfCategoryBlock value: cat value: col]) title: 'All selectors by class and system categories'. aghl doDeeply: [:e | e asStringBlock: [:item | item linked value asString]. e selectingBlock: [:item | item linked key = #sysCat ifTrue: [sysCatBrowserBlock value: item linked value] ifFalse: [item linked key = #class ifTrue: [classBrowserBlock value:item linked value value: nil] ifFalse: [classBrowserBlock value: item owner linked value value: item linked value]]]]. aghl open! ! !TamGenericHierarchicalList class methodsFor: 'examples' stamp: 'apl 4/5/2005 13:32'! classAndSelectorsExample "self classAndSelectorsExample" | aghl editorClass browser | editorClass := (Smalltalk at: #RefactoringBrowser ifAbsent: []) ifNil: [Browser]. aghl := self fromFlatCollection: (SystemNavigation default allClasses inject: OrderedCollection new into: [:col :cls | col addAll: (cls selectors asOrderedCollection collect: [:s | OrderedCollection with: cls with: s]); yourself]) title: 'All selectors by class'. aghl doDeeply: [:e | e selectingBlock: [:item | Transcript show: '[+ ' , (item owner ifNil: [item asString] ifNotNil: [item owner asString , '>>' , e asString]) , ']'. browser := item owner ifNil: [editorClass new setClass: item linked selector: nil] ifNotNil: [editorClass new setClass: item owner linked selector: item linked]. (browser openAsMorphEditing: nil) openInWorld]. e unSelectingBlock: [:item | Transcript show: '[- ' , (item owner ifNil: [item asString] ifNotNil: [item owner asString , '>>' ,item asString]) , ']']]. aghl open! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/5/2005 09:31'! fromFlatCollection: aCollectionOfCollections ^ self new fromFlatCollection: aCollectionOfCollections! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 15:20'! fromFlatCollection: aCollectionOfCollections title: aTitle | aghl | aghl := self new fromFlatCollection: aCollectionOfCollections. aghl key: aTitle. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 15:20'! fromFlatCollection: aCollectionOfCollections title: aTitle client: aClientModel | aghl | aghl := self fromFlatCollection: aCollectionOfCollections title: aTitle. aghl clientModel: aClientModel. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'examples' stamp: 'apl 4/5/2005 09:55'! fromFlatCollectionExample | aghl | aghl := self fromFlatCollection: #(#(#String 'titi' 'toto') #(#String 'titi' 'tata') #(#String 'titi' 'momo') #(#String 'kiki' 'tata') #(#String 'mimi' 'tata') #(#Integer 'titi' 'tata') #(#Class 'momo' 'tata') #(#Class 'mimi' 'tata') #(#Class 'mimi' 'riri') #(#String 'titi' 'tata') ). aghl open! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 1/31/2007 12:49'! fromRootListItems: aCollectionOfListItems ^ self new rootListItems: aCollectionOfListItems! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 16:19'! fromRootListItems: aCollectionOfListItems title: aTitle | aghl | aghl := self fromRootListItems: aCollectionOfListItems. aghl key: aTitle. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 16:16'! fromRootListItems: aCollectionOfListItems title: aTitle client: aClientModel | aghl | aghl := self fromRootListItems: aCollectionOfListItems title: aTitle. aghl clientModel: aClientModel. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/5/2005 09:33'! fromUpdateBlock: aOneArgBlock ^ self new updateBlock: aOneArgBlock! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 15:16'! fromUpdateBlock: aOneArgBlock title: aTitle | aghl | aghl := self fromUpdateBlock: aOneArgBlock. aghl key: aTitle. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'instance creation' stamp: 'apl 4/4/2005 15:21'! fromUpdateBlock: aOneArgBlock title: aTitle client: aClientModel | aghl | aghl := self fromUpdateBlock: aOneArgBlock title: aTitle. aghl clientModel: aClientModel. ^ aghl! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:40'! initialExtent ^ InitialExtent ifNil: [InitialExtent := 300 @ 400]! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'tam 10/13/2003 14:25'! initialExtent: aPoint InitialExtent := aPoint! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'apl 4/4/2005 14:30'! openedHierarchicalLists ^ ActiveWorld submorphs select: [:sm | sm isSystemWindow and: [sm model isKindOf: self]]! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'apl 4/4/2005 14:31'! openedHierarchicalListsOfClient: aClientModel ^ self openedHierarchicalLists select: [:h | h model clientModel = aClientModel]! ! !TamGenericHierarchicalList class methodsFor: 'accessing' stamp: 'apl 4/4/2005 14:32'! openedHierarchicalListsOfClient: aClientModel key: anObject ^ (self openedHierarchicalListsOfClient: aClientModel) select: [:h | h model key = anObject]! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 1/31/2007 14:36'! addButton: formName block: aBlock balloonText: aText self addButton: formName target: self selector: #buttonBlock:valueWithArguments: arguments: (Array with: aBlock with: (Array with: self)) balloonText: aText! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 12:38'! addButton: formName target: aTarget selector: aSelector arguments: args balloonText: aText | btn label | label := ImageMorph withForm: (TamIcons icon: formName). btn := (UITheme current newButtonIn: World for: aTarget getState: nil action: aSelector arguments: args getEnabled: nil getLabel: nil help: aText) label: label; yourself. bottomButtons addMorph: btn! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 12:27'! addButton: formName target: aTarget selector: aSelector balloonText: aText ^ self addButton: formName target: aTarget selector: aSelector arguments: {} balloonText: aText ! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 1/31/2007 14:42'! addButtonLabelled: aName block: aBlock balloonText: aText self addButtonLabelled: aName target: self selector: #buttonBlock:valueWithArguments: arguments: (Array with: aBlock with: (Array with: self)) balloonText: aText! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'AlainPlantec 11/18/2010 10:29'! addButtonLabelled: aName target: aTarget selector: aSelector arguments: args balloonText: aText | btn | btn := PluggableButtonMorph new. btn model: aTarget. btn label: aName. btn action: aSelector. btn arguments: args. btn setBalloonText: aText. btn extent: self buttonExtent. btn offColor: Color veryLightGray. btn borderColor: #raised. btn borderWidth: 1. bottomButtons addMorph: btn! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 4/16/2005 09:11'! addButtonSpacer bottomButtons addSpacer! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 1/31/2007 13:13'! addButtons bottomButtons := TamButtonsAlignmentMorph newRow. bottomButtons hResizing: #spaceFill. {{'16x16/actions/remove_pane'. self. #close. 'close this widow'}} do: [:arr | arr == #spacer ifTrue: [bottomButtons addSpacer] ifFalse: [self addButton: arr first target: arr second selector: arr third balloonText: arr fourth]]. bottomButtonsRow addMorph: bottomButtons! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 1/31/2007 13:06'! addExtensibleButtonSpacer bottomButtons addExtensibleSpacer! ! !TamGenericHierarchicalList methodsFor: 'menus' stamp: 'tam 10/13/2003 14:25'! addModelItemsToWindowMenu: aMenu aMenu addLine. aMenu add: 'remember window size' target: self action: #rememberWindowSize! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'tam 10/13/2003 18:20'! buildMainWindow ^ self buildMainWindow: self mainWindowLabel ! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:30'! buildMainWindow: title mainWindow := (StandardWindow labelled: title) model: self. self buildWindowWithButtons: mainWindow. mainWindow paneColor: Color gray muchLighter. listMorph color: Color gray muchLighter. bottomButtonsRow color: Color gray muchLighter. mainWindow extent: self initialExtent. ^mainWindow! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 4/4/2005 15:17'! buildWindow: aWindow listMorph ifNil: [listMorph := self hierarchicalListMorphClass on: self list: #getList selected: #getCurrentSelection changeSelected: #noteNewSelection: menu: #menu:shifted: keystroke: #keyStroke:from:. listMorph autoDeselect: true. listMorph enableDragNDrop: false]. aWindow addMorph: listMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). listMorph selection: nil. listMorph changed: #getList. listMorph changed: #getSelection. ^ aWindow! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 12:34'! buildWindowWithButtons: aWindow | bottomButtonsRowHeight | bottomButtonsRowHeight := self buttonExtent y + 16 + 1. self buildWindow: aWindow. listMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ bottomButtonsRowHeight negated)). bottomButtonsRow := TamButtonsAlignmentMorph typicalRowOwner. self addButtons. aWindow addMorph: bottomButtonsRow fullFrame: (LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ bottomButtonsRowHeight negated corner: 0 @ 0)). ^ aWindow! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'apl 1/31/2007 14:28'! buttonBlock: aBlock valueWithArguments: args aBlock valueWithArguments: args! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/16/2005 08:31'! buttonExtent ^self class buttonExtent! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 10/15/2003 11:08'! clientModel ^clientModel! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:40'! clientModel: anObject clientModel ifNotNil: [clientModel removeDependent: self]. clientModel := anObject. clientModel ifNotNil: [clientModel addDependent: self]! ! !TamGenericHierarchicalList methodsFor: 'ui opening/closing' stamp: 'tam 10/13/2003 23:16'! close mainWindow delete! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 4/13/2005 23:10'! collapseAll self listMorph toggleExpandedState: self listMorph scroller submorphs first. self listMorph adjustSubmorphPositions ! ! !TamGenericHierarchicalList methodsFor: 'initialize/release' stamp: 'apl 4/10/2006 14:05'! destroy mainWindow ifNotNil: [mainWindow submorphs do: [:sm | sm delete]. mainWindow := nil]. bottomButtons ifNotNil: [bottomButtons destroy. bottomButtons := nil]. bottomButtonsRow := nil. listMorph ifNotNil: [listMorph model: nil. listMorph := nil]. clientModel := nil. updateBlock := nil. sortBlock := nil. super destroy! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 2/17/2006 15:26'! doDeeply: aBlock ^ self rootListItems do: [:e | e doDeeply: aBlock from: self ]! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 10/27/2006 11:16'! expandAll self listMorph expandAll ! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 4/5/2005 09:30'! fromFlatCollection: aCollection self rootListItems: (TamGenericHierarchicalListItem fromFlatCollection: aCollection). self sort. self changed: #getList! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 6/3/2005 18:35'! getList ^self rootListItems isNil ifTrue: [#()] ifFalse: [self rootListItems collect: [:each | each wrapperClass with: each model: nil]]! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 2/18/2004 15:32'! hierarchicalListMorphClass ^ TamHierarchicalListMorph! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'tam 10/13/2003 14:25'! initialExtent ^ self class initialExtent! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/4/2005 14:29'! key ^ key! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/4/2005 14:29'! key: anObject key := anObject! ! !TamGenericHierarchicalList methodsFor: 'menus' stamp: 'apl 4/4/2005 12:42'! keyStroke: aCharacter from: tamuggableListMorph self unwrappedSelection notNil ifTrue: [(self unwrappedSelection respondsTo: #keyStroke:from:) ifTrue: [self unwrappedSelection keyStroke: aCharacter from: tamuggableListMorph]]! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 10/13/2003 14:25'! listMorph ^ listMorph! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 10/13/2003 14:25'! mainWindow ^mainWindow! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/4/2005 15:18'! mainWindowLabel ^ key ifNil: [self class name] ifNotNil: [key asString]! ! !TamGenericHierarchicalList methodsFor: 'menus' stamp: 'apl 4/4/2005 11:45'! menu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | listWrapper | (listWrapper := self getCurrentSelection) ifNotNil: [menu defaultTarget: self. ^ listWrapper withoutListWrapper menu: menu shifted: b]. ^ menu! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 10/26/2006 18:24'! noteNewSelection: aWrapper | oldSelection | self okToChange ifTrue: [oldSelection := currentSelection. super noteNewSelection: aWrapper. oldSelection notNil ifTrue: [oldSelection withoutListWrapper unSelectingFrom: self]. aWrapper notNil ifTrue: [aWrapper withoutListWrapper selectingFrom: self]]! ! !TamGenericHierarchicalList methodsFor: 'ui opening/closing' stamp: 'apl 4/4/2005 15:20'! open self buildMainWindow openInWorld. ! ! !TamGenericHierarchicalList methodsFor: 'ui building' stamp: 'tam 10/13/2003 14:25'! openAsMorph ^ self buildMainWindow openInWorld ! ! !TamGenericHierarchicalList methodsFor: 'ui opening/closing' stamp: 'apl 2/23/2007 13:42'! openModal self buildMainWindow openInWorld. [mainWindow notNil] whileTrue: [mainWindow outermostWorldMorph doOneCycle]! ! !TamGenericHierarchicalList methodsFor: 'ui opening/closing' stamp: 'apl 3/16/2007 15:02'! openModalAndExpand self buildMainWindow openInWorld. self expandAll. [mainWindow notNil and: [mainWindow world notNil]] whileTrue: [mainWindow outermostWorldMorph doOneCycle]! ! !TamGenericHierarchicalList methodsFor: 'menus' stamp: 'tam 10/13/2003 14:25'! rememberWindowSize self class initialExtent: mainWindow bounds extent! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/4/2005 16:12'! rootListItems ^ rootListItems! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'apl 4/4/2005 16:12'! rootListItems: aCollection rootListItems := aCollection. self changed: #getList! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'ap 10/17/2003 23:29'! setFirstLevelSortBlock: aBlock sortBlock := aBlock! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'apl 4/4/2005 16:13'! sort | sb | sb := self sortBlock ifNil: [[:a :b | a asString < b asString]]. self rootListItems: (self rootListItems asArray sort: sb) asOrderedCollection. self rootListItems do: [:c | c sort]. self changed: #getList! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'ap 10/17/2003 23:32'! sortBlock ^ sortBlock! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'tam 10/15/2003 18:04'! stepIn: aSystemWindow self updateList. super stepIn: aSystemWindow! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 10/13/2003 14:25'! unwrappedSelection ^ self getCurrentSelection ifNotNil: [self getCurrentSelection withoutListWrapper]! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'tam 10/15/2003 23:44'! update: aSymbol (aSymbol = self clientModel or: [aSymbol = #getCurrentSelection]) ifTrue: [^ self updateList]. super update: aSymbol! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'tam 10/15/2003 17:34'! updateBlock ^updateBlock! ! !TamGenericHierarchicalList methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 21:40'! updateBlock: aBlock updateBlock := aBlock. self updateList! ! !TamGenericHierarchicalList methodsFor: 'updating' stamp: 'tam 10/16/2003 00:04'! updateList self updateBlock ifNotNil: [self updateBlock value: self. self changed: #getList]! ! !TamGenericHierarchicalList methodsFor: 'ui opening/closing' stamp: 'apl 2/20/2007 15:36'! windowIsClosing self destroy. super windowIsClosing! ! !TamHierarchicalList methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/27/2011 13:30'! genericMenu: aMenu aMenu add: 'no menu yet' target: self selector: #yourself. ^aMenu! ! !TamHierarchicalList methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/27/2011 13:30'! getCurrentSelection ^currentSelection! ! !TamHierarchicalList methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 5/18/2012 00:49'! noteNewSelection: x currentSelection := x. self changed: #getCurrentSelection. currentSelection ifNil: [^self]. (currentSelection respondsTo: #sendSettingMessageTo:) ifTrue: [currentSelection sendSettingMessageTo: self]. ! ! !TamHierarchicalList methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/27/2011 13:30'! perform: selector orSendTo: otherTarget "Selector was just chosen from a menu by a user. If can respond, then perform it on myself. If not, send it to otherTarget, presumably the editPane from which the menu was invoked." (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !TamHierarchicalList methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 10/27/2011 13:30'! update: aSymbol aSymbol == #hierarchicalList ifTrue: [ ^self changed: #getList ]. super update: aSymbol! ! !TamStringMorph class methodsFor: 'instance creation' stamp: 'apl 4/22/2005 16:52'! on: anObject text: getTextSel accept: setTextSel ^ self new on: anObject text: getTextSel accept: setTextSel ! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 4/22/2005 17:25'! acceptContents self acceptValue: contents! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 4/22/2005 18:24'! acceptValue: aValue " self currentHand releaseKeyboardFocus: self." setTextSelector isNil or: [setTextSelector numArgs = 2 ifTrue: [self model perform: setTextSelector with: aValue with: self] ifFalse: [self model perform: setTextSelector with: aValue]]! ! !TamStringMorph methodsFor: 'accessing' stamp: 'apl 5/12/2006 11:21'! cpt ^ cpt ifNil: [cpt := 0]! ! !TamStringMorph methodsFor: 'initialize-release' stamp: 'apl 6/3/2005 17:59'! destroy model := nil. editor ifNotNil: [self removeMorph: editor. editor delete. editor := nil].! ! !TamStringMorph methodsFor: 'editing' stamp: 'apl 5/12/2006 11:22'! doneWithEdits editor ifNotNil: [self removeMorph: editor. editor delete. editor := nil]. cpt := self cpt - 1. cpt < 0 ifTrue: [self halt]! ! !TamStringMorph methodsFor: 'editing' stamp: 'apl 4/22/2005 16:56'! getText "Retrieve the current model text" | newText | getTextSelector isNil ifTrue: [^Text new]. newText := model perform: getTextSelector. newText ifNil: [^Text new]. ^newText shallowCopy! ! !TamStringMorph methodsFor: 'accessing' stamp: 'apl 4/22/2005 16:41'! getTextSelector ^getTextSelector! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 4/22/2005 17:52'! handlesMouseDown: evt ^true ! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 4/22/2005 20:07'! handlesMouseOver: evt ^true! ! !TamStringMorph methodsFor: 'editing' stamp: 'apl 5/12/2006 11:28'! launchMiniEditor: evt hasFocus := true. "Really only means edit in progress for this morph" editor := TamStringMorph new contentsAsIs: contents. editor bounds: (self bounds expandBy: 0 @ 2). editor backgroundColor: Color transparent. self addMorphFront: editor. evt hand newMouseFocus: editor. evt hand newKeyboardFocus: editor. cpt := self cpt + 1. cpt < 0 ifTrue: [self halt]! ! !TamStringMorph methodsFor: 'editing' stamp: 'apl 4/23/2005 10:34'! lostFocusWithoutAccepting "self doneWithEdits"! ! !TamStringMorph methodsFor: 'accessing' stamp: 'apl 4/22/2005 16:54'! model ^ model! ! !TamStringMorph methodsFor: 'accessing' stamp: 'apl 4/22/2005 16:55'! model: aModel model := aModel! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 4/22/2005 20:05'! mouseDown: evt self launchMiniEditor: evt! ! !TamStringMorph methodsFor: 'event handling' stamp: 'apl 7/9/2005 00:47'! mouseLeave: evt super mouseLeave: evt. evt hand releaseKeyboardFocus: self. hasFocus := false! ! !TamStringMorph methodsFor: 'initialize-release' stamp: 'apl 4/23/2005 10:30'! on: anObject text: getTextSel accept: setTextSel self model: anObject. getTextSelector := getTextSel. setTextSelector := setTextSel. self borderWidth: 1. self contents: self getText. cpt := 0.! ! !TamStringMorph methodsFor: 'accessing' stamp: 'apl 4/22/2005 16:41'! setTextSelector ^setTextSelector! ! !TamStringMorph methodsFor: 'updating' stamp: 'apl 7/9/2005 00:46'! update: aSymbol hasFocus ifFalse: [ super update: aSymbol. self contents: self getText]! ! !BorderedMorph methodsFor: '*tamaris-overwrite' stamp: 'AlainPlantec 12/5/2013 09:18'! addPaneHSplitterBetween: topMorph and: bottomMorphs | targetY minX maxX splitter | "Halt now." "Hello, anybody here? is there anyone using this?" self flag: #toRemove. targetY := topMorph layoutFrame bottomFraction. minX := (bottomMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction. maxX := (bottomMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction. splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself. splitter layoutFrame: ( (minX @ targetY corner: maxX @ targetY) asLayoutFrame leftOffset: topMorph layoutFrame leftOffset; rightOffset: topMorph layoutFrame rightOffset; bottomOffset: 4 + topMorph layoutFrame bottomOffset; topOffset: topMorph layoutFrame bottomOffset ). self addMorphBack: (splitter position: self position).! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! bottomVisibleRowForCanvas: aCanvas "return the bottom visible row in aCanvas's clip rectangle" ^ self rowAtLocation: (aCanvas clipRect bottomRight). ! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! bottomVisibleRowForCanvas: aCanvas startingAt: aPos "return the bottom visible row in aCanvas's clip rectangle" ^ self rowAtLocation: (aCanvas clipRect bottomRight) startingAt: aPos ! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 10:12'! drawRawColorOn: aCanvas forSubmorph: aSubMorph | c frame emph emphasis | frame := (aSubMorph fullBounds withRight: owner right + owner scroller offset x ). emph := owner emphasisOf: aSubMorph withoutListWrapper. emphasis := emph emphasis. c := emph backgroundColor. (c ifNil: [c := aSubMorph color]) notNil ifTrue: [ c isColor ifTrue: [ aCanvas frameAndFillRectangle: frame fillColor: c borderWidth: 0 borderColor: Color transparent] ifFalse: [ c origin: aSubMorph bounds topLeft. c direction: aSubMorph bounds width@0. aCanvas fillRectangle: frame basicFillStyle: c]]! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:45'! drawSubmorphsOn: aCanvas submorphs ifEmpty: [^ self]. aCanvas transformBy: transform clippingTo: (aCanvas clipRect intersect: (owner clippingBounds)) during: [:myCanvas | | top bottom | top := self topVisibleRowForCanvas: myCanvas. bottom := self bottomVisibleRowForCanvas: myCanvas startingAt: top. bottom to: top by: -1 do: [:row | | m | m := submorphs basicAt: row. self drawRawColorOn: myCanvas forSubmorph: m. myCanvas fullDrawMorph: m] ] smoothing: smoothing.! ! !TamHierarchicalListTransformMorph methodsFor: 'geometry' stamp: 'AlainPlantec 5/19/2012 09:40'! fullBounds "Overridden to clip submorph hit detection to my bounds." "It might be better to override doLayoutIn:, and remove this method" fullBounds ifNotNil:[^ fullBounds]. fullBounds := bounds. ^ fullBounds! ! !TamHierarchicalListTransformMorph methodsFor: 'initialization' stamp: 'AlainPlantec 5/19/2012 09:40'! initialize super initialize. self smoothingOn! ! !TamHierarchicalListTransformMorph methodsFor: 'layout' stamp: 'AlainPlantec 5/19/2012 09:40'! localSubmorphBounds "Answer, in my coordinate system, the bounds of all my visible submorphs (or nil if no visible submorphs)" localBounds ifNil: [ self hasSubmorphs ifFalse: [^ nil]. localBounds := self firstSubmorph fullBounds topLeft corner: owner maxNodeWidth @ (self lastSubmorph fullBounds bottom + owner extraScrollRange)]. ^ localBounds ! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! rowAtLocation: aPoint "return the number of the row at aPoint" | y | y := aPoint y. submorphs ifEmpty: [^ nil]. submorphs doWithIndex: [:m :idx | m topLeft y >= y ifTrue: [^ (idx - 1) max: 1]]. ^ submorphs size! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! rowAtLocation: aPoint startingAt: aPosition "return the number of the row at aPoint" | y | y := aPoint y. submorphs ifEmpty: [^ nil]. aPosition to: submorphs size do: [ :idx | | m | m := submorphs basicAt: idx. m topLeft y >= y ifTrue: [^ (idx - 1) max: 1]]. ^ submorphs size! ! !TamHierarchicalListTransformMorph methodsFor: 'layout' stamp: 'AlainPlantec 5/19/2012 09:40'! submorphBounds "Private. Compute the actual full bounds of the receiver, optimized for speed" self hasSubmorphs ifFalse: [^ nil]. ^ self firstSubmorph topLeft corner: owner scroller bounds bottomLeft + (0@ owner extraScrollRange) ! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! topVisibleRowForCanvas: aCanvas "return the top visible row in aCanvas's clip rectangle" ^ self rowAtLocation: (aCanvas clipRect topLeft). ! ! !TamHierarchicalListTransformMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/19/2012 09:40'! topVisibleRowForCanvas: aCanvas startingAt: aPos "return the top visible row in aCanvas's clip rectangle" ^ self rowAtLocation: (aCanvas clipRect topLeft) startingAt: aPos. ! ! !TamHierarchicalListTransformMorph methodsFor: 'testing' stamp: 'AlainPlantec 5/19/2012 09:40'! wantsSteps ^ false! ! !TamStringHolder commentStamp: 'apl 12/8/2006 21:15' prior: 104039078! A TamStringHolder is a StringHolder for Tamaris. Instance Variables doItContext: doItReceiver: textMorph: doItContext - xxxxx doItReceiver - xxxxx textMorph - xxxxx ! !TamStringHolder methodsFor: 'accessing' stamp: 'tam 2/24/2004 17:35'! contents: textOrString super contents: textOrString . self changed: #contents ! ! !TamStringHolder methodsFor: 'initialize-release' stamp: 'apl 6/3/2005 16:39'! destroy self doItReceiver: nil. super destroy! ! !TamStringHolder methodsFor: 'evaluation' stamp: 'tam 4/23/2003 12:03'! doItContext "Answer the context in which a text selection can be evaluated." ^ doItContext! ! !TamStringHolder methodsFor: 'accessing' stamp: 'tam 4/23/2003 12:03'! doItContext: anObject doItContext := anObject! ! !TamStringHolder methodsFor: 'evaluation' stamp: 'tam 4/23/2003 12:03'! doItReceiver "Answer the object that should be informed of the result of evaluating a text selection." ^ doItReceiver! ! !TamStringHolder methodsFor: 'accessing' stamp: 'tam 4/23/2003 12:03'! doItReceiver: anObject doItReceiver := anObject! ! !TamStringHolder methodsFor: 'initialize-release' stamp: 'AlainPlantec 4/26/2012 09:56'! embeddedInMorphicWindowLabeled: labelString | window | window := super embeddedInMorphicWindowLabeled: labelString. textMorph := window findA: PluggableTextMorph. ^ window! ! !TamStringHolder methodsFor: 'accessing' stamp: 'AlainPlantec 4/26/2012 09:56'! textMorph ^ textMorph! ! !TamHierarchicalListMorph class methodsFor: 'accessing' stamp: 'apl 4/22/2005 01:40'! expandedForm self indentingItemClass useStandardToggleIcons ifTrue: [^super expandedForm]. ^TamIcons originalIcon: 'expandedForm'! ! !TamHierarchicalListMorph class methodsFor: 'accessing' stamp: 'tam 3/10/2004 15:24'! indentingItemClass ^ TamIndentingListItemMorph! ! !TamHierarchicalListMorph class methodsFor: 'accessing' stamp: 'apl 4/22/2005 01:40'! notExpandedForm self indentingItemClass useStandardToggleIcons ifTrue: [^super notExpandedForm]. ^TamIcons originalIcon: 'notExpandedForm'! ! !TamHierarchicalListMorph methodsFor: 'private' stamp: 'AlainPlantec 5/19/2012 11:24'! adjustSubmorphPositions "Fixed to not require setting item widths to 9999." | p | maxNodeWidth := 0. p := 0@0. scroller submorphsDo: [ :each | | h | h := each height. each privateBounds: (p extent: each width@h). maxNodeWidth := maxNodeWidth max: (each fullBounds width + 100). p := p + (0@h) ]. self changed; layoutChanged; setScrollDeltas. ! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/30/2007 11:00'! boldBlueEmphasisModel ^ TamListItemMorphEmphasisModel boldBlueOnLightBlueStandard! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/25/2005 12:48'! boldBlueEmphasisSet ^ self emphasisSet: self boldBlueEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/25/2005 12:48'! boldBlueEmphasisSetRemoveAll self emphasisIndex emptyEmphasisSet: self boldBlueEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/30/2007 11:00'! boldRedEmphasisModel ^ TamListItemMorphEmphasisModel boldRedStandard! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/25/2005 12:50'! boldRedEmphasisSet ^ self emphasisSet: self boldRedEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/25/2005 12:53'! boldRedEmphasisSetRemoveAll self emphasisIndex emptyEmphasisSet: self boldRedEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'updating' stamp: 'apl 4/18/2005 22:50'! bounds: newBounds super bounds: newBounds. (model respondsTo: # boundsOf:updatedWith:) ifTrue: [model boundsOf: self updatedWith: newBounds]! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/29/2005 22:38'! clearAllEmphasis self emphasisIndex clear. self changed! ! !TamHierarchicalListMorph methodsFor: 'updating' stamp: 'apl 4/13/2005 23:15'! collapseAll self scroller submorphsDo: [:sm | sm isExpanded ifTrue: [self toggleExpandedState: sm]]. self adjustSubmorphPositions! ! !TamHierarchicalListMorph methodsFor: 'initialize-release' stamp: 'apl 4/10/2006 14:01'! destroy super destroy. owner := nil.! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/30/2007 10:59'! emphasisIndex ^ emphasisIndex ifNil: [emphasisIndex := TamListItemMorphEmphasisIndex new]! ! !TamHierarchicalListMorph methodsFor: 'accessing' stamp: 'apl 1/30/2007 11:00'! emphasisOf: anObject ^ (self emphasisIndex emphasisOf: anObject) ifNil: [anObject emphasisModel ifNil: [TamListItemMorphEmphasisModel standard]]! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/29/2007 13:58'! emphasisSet: anListEmphasisModel ^ self emphasisIndex emphasisSet: anListEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/29/2007 13:58'! emphasisSet: anListEmphasisModel collect: aBlock ^ self emphasisIndex emphasisSet: anListEmphasisModel collect: aBlock! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/29/2007 13:58'! emphasisSet: anListEmphasisModel detect: aBlock ^ self emphasisIndex emphasisSet: anListEmphasisModel detect: aBlock! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/29/2007 13:58'! emphasisSet: anListEmphasisModel do: aBlock ^ self emphasisIndex emphasisSet: anListEmphasisModel do: aBlock! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 1/29/2007 13:58'! emphasisSet: anListEmphasisModel select: aBlock ^ self emphasisIndex emphasisSet: anListEmphasisModel select: aBlock! ! !TamHierarchicalListMorph methodsFor: 'events' stamp: 'apl 1/30/2007 10:34'! eventRulesHandleEvent: anEvent ^ self eventRulesHandler notNil and: [self eventRulesHandler handleEvent: anEvent]! ! !TamHierarchicalListMorph methodsFor: 'accessing' stamp: 'apl 1/30/2007 09:44'! eventRulesHandler ^ eventRulesHandler! ! !TamHierarchicalListMorph methodsFor: 'updating' stamp: 'apl 4/13/2005 23:31'! expandAll self scroller submorphsDo: [:sm | self expandAll: sm]. self adjustSubmorphPositions! ! !TamHierarchicalListMorph methodsFor: 'accessing' stamp: 'tam 3/10/2004 15:25'! indentingItemClass ^ self class indentingItemClass! ! !TamHierarchicalListMorph methodsFor: 'initialize-release' stamp: 'apl 1/30/2007 10:49'! initialize super initialize. self initializeEventRulesHandler! ! !TamHierarchicalListMorph methodsFor: 'initialize-release' stamp: 'apl 1/30/2007 11:01'! initializeEventRulesHandler eventRulesHandler := TamSimpleHierarchicalListMorphEventRulesHandler list: self. eventRulesHandler add: TamListItemBoldBlueEmphasisRule new. eventRulesHandler add: TamListItemBoldRedEmphasisRule new. eventRulesHandler add: TamHierarchicalListItemMenuRule new! ! !TamHierarchicalListMorph methodsFor: 'private' stamp: 'AlainPlantec 5/19/2012 09:59'! maxNodeWidth ^ maxNodeWidth ifNil: [maxNodeWidth := 0]! ! !TamHierarchicalListMorph methodsFor: 'events' stamp: 'apl 1/30/2007 09:41'! mouseUp: event (self eventRulesHandleEvent: event) ifTrue: [^ self changed]. self clearAllEmphasis. super mouseUp: event! ! !TamHierarchicalListMorph methodsFor: 'initialize-release' stamp: 'AlainPlantec 5/19/2012 09:55'! newTransformMorph ^TamHierarchicalListTransformMorph new ! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'apl 3/25/2005 13:09'! removeEmphasisOf: anObject ^ self emphasisIndex remove: anObject! ! !TamHierarchicalListMorph methodsFor: 'emphasis-handling' stamp: 'AlainPlantec 5/19/2012 09:36'! show: anUnwrappedItem asEmphasedWith: anEmphasisModel self emphasisIndex switch: anUnwrappedItem emphasis: anEmphasisModel! ! !TamHierarchicalListMorph methodsFor: 'dropping/grabbing' stamp: 'AlainPlantec 4/26/2012 09:48'! startDrag: evt | ddm itemMorph passenger trans tm subPassenger | self dragEnabled ifTrue: [itemMorph := scroller submorphs detect: [:any | any highlightedForMouseDown] ifNone: []]. (itemMorph isNil or: [evt hand hasSubmorphs]) ifTrue: [^ self]. itemMorph highlightForMouseDown: false. itemMorph ~= self selectedMorph ifTrue: [self setSelectedMorph: itemMorph]. (self boldBlueEmphasisSet notEmpty and: [self boldBlueEmphasisSet includes: itemMorph complexContents withoutListWrapper]) ifTrue: [trans := OrderedCollection new. self boldBlueEmphasisSet asOrderedCollection do: [:s | (subPassenger := self model dragPassengerFor: s inMorph: self) ifNotNil: [tm := TransferMorph withPassenger: subPassenger. tm dragTransferType: (self model dragTransferTypeForMorph: self). trans add: tm]]. trans isEmpty ifFalse: [passenger := SelectionMorph new. passenger setSelectedItems: trans. ddm := TransferMorph withPassenger: passenger from: self. ddm dragTransferType: (self model dragTransferTypeForMorph: self)]] ifFalse: [(passenger := self model dragPassengerFor: itemMorph inMorph: self) ifNotNil: [ddm := TransferMorph withPassenger: passenger from: self. ddm dragTransferType: (self model dragTransferTypeForMorph: self)]]. ddm ifNotNil: [evt hand grabMorph: ddm]. evt hand releaseMouseFocus: self! ! !TamButtonsAlignmentMorph class methodsFor: 'instance creation' stamp: 'apl 4/22/2005 13:45'! newColumn | bl | bl := super newColumn. bl color: Color transparent; borderWidth: 0; layoutInset: 0; hResizing: #shrinkWrap; vResizing: #shrinkWrap. ^bl! ! !TamButtonsAlignmentMorph class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/18/2012 14:37'! newRow | bl | bl := super newRow. bl color: Color transparent; borderWidth: 0; layoutInset: 2; hResizing: #shrinkWrap; vResizing: #shrinkWrap. ^ bl! ! !TamButtonsAlignmentMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 5/18/2012 14:13'! newSpacer: aColor "Answer a space-filling instance of me of the given color." ^ self new hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: 0; borderWidth: 0; extent: 1@1; color: aColor.! ! !TamButtonsAlignmentMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 10/14/2010 21:51'! typicalColumnOwner ^(AlignmentMorph newColumn) layoutInset: 0; borderWidth: 0; color: Color transparent; yourself ! ! !TamButtonsAlignmentMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 10/14/2010 21:51'! typicalRowOwner ^(AlignmentMorph newRow) layoutInset: 0; borderWidth: 0; color: Color transparent; vResizing: #shrinkWrap; borderColor: Color black; yourself! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 1/31/2007 13:19'! addExtensibleSpacer self addMorphFront: (AlignmentMorph newSpacer: Color transparent)! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/2/2012 19:57'! addSpacer | spacer | spacer := self addSpacerOfColor: self color darker. ^ spacer! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 4/16/2005 11:27'! addSpacerOfColor: aColor | spacer container | container := AlignmentMorph new. container layoutInset: 4. container color: Color transparent. container borderColor: Color transparent. container borderWidth: 0. spacer := self class newSpacer: aColor. container addMorph: spacer. self addMorph: container. ^ spacer! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 9/28/2007 07:40'! addTransparentFixSpacer | spacer | spacer := Morph new. spacer color: Color transparent. spacer hResizing: #rigid; vResizing: #spaceFill; borderWidth: 0; extent: 5@1. self addMorph: spacer. ^ spacer! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 4/16/2005 09:40'! addTransparentSpacer self addSpacerOfColor: Color transparent! ! !TamButtonsAlignmentMorph methodsFor: 'initialize/release' stamp: 'apl 6/15/2005 21:37'! destroy owner := nil. super destroy! ! !TamButtonsAlignmentMorph methodsFor: 'initialize/release' stamp: 'apl 6/15/2005 21:37'! initialize super initialize. self borderColor: Color transparent. self useSquareCorners. self layoutPolicy: TableLayout new. ! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 4/16/2005 09:07'! isColumn ^self rowOrColumn = #column! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 4/16/2005 09:07'! isRow ^ self rowOrColumn = #row ! ! !TamButtonsAlignmentMorph methodsFor: 'accessing' stamp: 'apl 4/16/2005 09:03'! rowOrColumn (#(#leftToRight #rightToLeft) includes: self listDirection) ifTrue: [^#row]. ^ #column ! ! !TamButtonsAlignmentMorph methodsFor: 'updating' stamp: 'apl 6/16/2005 09:49'! step self updateIfNeeded! ! !TamButtonsAlignmentMorph methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:46'! stepTime ^ 600! ! !TamButtonsAlignmentMorph methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 12:36'! updateIfNeeded self submorphsDo: [:sm | (sm respondsTo: #getEnabledSelector) ifTrue: [sm update: sm getEnabledSelector]]! ! !TamButtonsAlignmentMorph methodsFor: 'updating' stamp: 'apl 6/16/2005 09:49'! wantsSteps ^ true! ! !TamPaneMorph class methodsFor: 'instance creation' stamp: 'apl 2/15/2006 21:42'! model: aModel ^ self new model: aModel ! ! !TamPaneMorph methodsFor: 'LookEnhancements- compatibilty' stamp: 'AlainPlantec 5/2/2012 17:00'! addPaneHSplitterBetween: topMorph and: bottomBorphs | splitter | super addPaneHSplitterBetween: topMorph and: bottomBorphs. splitter := self submorphs last. splitter addLeftOrTop: topMorph. bottomBorphs do: [:m | splitter addRightOrBottom: m]. splitter comeToFront! ! !TamPaneMorph methodsFor: 'LookEnhancements- compatibilty' stamp: 'apl 6/29/2007 09:37'! addPaneVSplitterBetween: leftMorph and: rightMorphs | splitter | super addPaneVSplitterBetween: leftMorph and: rightMorphs. splitter := self submorphs last. splitter addLeftOrTop: leftMorph. rightMorphs do: [:m | splitter addRightOrBottom: m]. splitter comeToFront! ! !TamPaneMorph methodsFor: 'panes- compatibility' stamp: 'AlainPlantec 3/11/2010 16:24'! announce: x! ! !TamPaneMorph methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/2/2012 16:53'! eat: aPane | grips | aPane isSystemWindow ifTrue: [aPane emptyLabelArea]. self layoutInset: -4@0. aPane removeCornerGrips. grips := aPane submorphsSatisfying: [:each | each isKindOf: WindowEdgeGripMorph]. grips do: [:each | each delete]. self model: aPane model. self addAllMorphs: aPane submorphs. self updatablePanes: aPane updatablePanes. aPane model ifNotNil: [aPane model removeDependent: aPane]! ! !TamPaneMorph methodsFor: 'accessing' stamp: 'apl 7/3/2007 00:16'! getChildrenSelector ^ getChildrenSelector! ! !TamPaneMorph methodsFor: 'accessing' stamp: 'apl 7/3/2007 00:16'! getChildrenSelector: anObject getChildrenSelector := anObject! ! !TamPaneMorph methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/2/2012 17:11'! initialize super initialize. self useSquareCorners. self color: Color transparent. self borderWidth: 0. self layoutPolicy: ProportionalLayout new. self clipSubmorphs: true. self layoutInset: 0! ! !TamPaneMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 09:16'! minExtent ^ 2 @ 60! ! !TamPaneMorph methodsFor: 'accessing' stamp: 'apl 6/29/2007 10:53'! model ^ model! ! !TamPaneMorph methodsFor: 'accessing' stamp: 'apl 7/7/2005 15:52'! model: anObject model := anObject! ! !TamPaneMorph methodsFor: 'panes- compatibility' stamp: 'apl 6/29/2007 10:07'! setUpdatablePanesFrom: getSelectors "Set my updatablePanes inst var to the list of panes which are list panes with the given get-list selectors. Order is important here!! Note that the method is robust in the face of panes not found, but a warning is printed in the transcript in each such case" | aList aPane possibles | aList := OrderedCollection new. possibles := OrderedCollection new. self allMorphsDo: [:pane | (pane isKindOf: PluggableListMorph) ifTrue: [possibles add: pane]]. getSelectors do: [:sel | aPane := possibles detect: [:pane | pane getListSelector == sel] ifNone: []. aPane ifNil: [Transcript cr; show: 'Warning: pane ' , sel , ' not found.'] ifNotNil: [aList add: aPane]]. updatablePanes := aList asArray! ! !TamPaneMorph methodsFor: 'initialize/release' stamp: 'apl 6/29/2007 22:21'! splitHorizontally | myFrame leftFrame rightFrame newRight newLeft | myFrame := self layoutFrame. leftFrame := myFrame copy. rightFrame := myFrame copy. leftFrame rightFraction: myFrame rightFraction / 2. rightFrame leftFraction: myFrame leftFraction / 2. newRight := self class new. newRight eat: self. newLeft := self class new. self addMorph: newLeft fullFrame: leftFrame. self addMorph: newRight fullFrame: rightFrame. ^ newLeft! ! !TamPaneMorph methodsFor: 'initialize/release' stamp: 'apl 6/29/2007 22:46'! splitVertically | myFrame topFrame bottomFrame newTop newBottom | myFrame := self layoutFrame. topFrame := myFrame copy. bottomFrame := myFrame copy. topFrame bottomFraction: myFrame bottomFraction / 2. bottomFrame topFraction: myFrame topFraction / 2. newTop := self class new. newTop eat: self. newBottom := self class new. self removeAllMorphs. self addMorph: newTop fullFrame: topFrame. self addMorph: newBottom fullFrame: bottomFrame. ^ newBottom! ! !TamPaneMorph methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:34'! treeUpdated: anAnnounce ^ (self model respondsTo: #treeUpdated:) ifTrue: [self model treeUpdated: anAnnounce]! ! !TamPaneMorph methodsFor: 'panes- compatibility' stamp: 'apl 6/29/2007 10:08'! updatablePanes "Answer the list of panes, in order, which should be sent the #verifyContents message" ^ updatablePanes ifNil: [updatablePanes := #()]! ! !TamPaneMorph methodsFor: 'panes- compatibility' stamp: 'apl 6/29/2007 10:19'! updatablePanes: aCollection updatablePanes := aCollection! ! !TamPaneMorph methodsFor: 'panes- compatibility' stamp: 'apl 6/29/2007 10:23'! updatePanesFromSubmorphs ! ! !TamPaneMorphWrapper methodsFor: 'error handling' stamp: 'apl 7/7/2005 16:00'! doesNotUnderstand: aMessage ^ wrapped perform: aMessage selector withArguments: aMessage arguments ! ! !TamPaneMorphWrapper methodsFor: 'accessing' stamp: 'apl 7/7/2005 16:00'! wrapped ^wrapped! ! !TamPaneMorphWrapper methodsFor: 'accessing' stamp: 'apl 7/8/2005 08:57'! wrapped: anObject | frameImagedMorph | wrapped := anObject. wrapped allMorphsDo: [:sm | sm unlock]. frameImagedMorph := wrapped submorphs detect: [:sm | sm class name asSymbol = #WindowFrameImagedMorph] ifNone: []. frameImagedMorph ifNotNil: [wrapped removeMorph: frameImagedMorph]. wrapped clipSubmorphs: true. ! ! !TamTextMorph methodsFor: 'model access' stamp: 'apl 2/16/2006 11:51'! getText "Retrieve the current model text" model ifNotNil: [^ super getText]. ^ '' asText! ! !TamTextMorph methodsFor: 'updating' stamp: 'AlainPlantec 10/7/2010 22:00'! hasUnacceptedEdits: aBoolean | oldHasUnacceptedEdits | oldHasUnacceptedEdits := hasUnacceptedEdits. super hasUnacceptedEdits: aBoolean. aBoolean == oldHasUnacceptedEdits ifFalse: [self changed: #hasUnacceptedEdits:]! ! !TamTextMorph methodsFor: 'initialization' stamp: 'AlainPlantec 5/2/2012 17:37'! initialize super initialize. self color: Color white! ! !TamTextMorph methodsFor: 'error handling' stamp: 'AlainPlantec 5/2/2012 17:33'! notify: errorMessage at: location | repl | self selectFrom: location to: location - 1. self scrollSelectionIntoView. repl := Text string: errorMessage , '->' attribute: TextEmphasis bold. self replaceSelectionWith: repl. self setSelection: (location to: location + errorMessage size + 1). ! ! "Tamaris"! !PltABSFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; ! !PltACOSFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; ! !PltASINFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; ! !PltATANFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; ! !PltBLENGTHFunction commentStamp: 'platypus comment' prior: 0! FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ! !PltCOSFunction commentStamp: 'platypus comment' prior: 0! FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; ! !PltEVENFunction commentStamp: 'platypus comment' prior: 0! FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; ! !PltEXISTSFunction commentStamp: 'platypus comment' prior: 0! FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; ! !PltEXPFunction commentStamp: 'platypus comment' prior: 0! FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; ! !PltFORMATFunction commentStamp: 'platypus comment' prior: 0! FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; ! !PltHIBOUNDFunction commentStamp: 'platypus comment' prior: 0! FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ! !PltHIINDEXFunction commentStamp: 'platypus comment' prior: 0! FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ! !PltINSERTProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; ! !PltLENGTHFunction commentStamp: 'platypus comment' prior: 0! FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ! !PltLOBOUNDFunction commentStamp: 'platypus comment' prior: 0! FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ! !PltLOG10Function commentStamp: 'platypus comment' prior: 0! FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; ! !PltLOG2Function commentStamp: 'platypus comment' prior: 0! FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; ! !PltLOGFunction commentStamp: 'platypus comment' prior: 0! FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; ! !PltLOINDEXFunction commentStamp: 'platypus comment' prior: 0! FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ! !PltNVLFunction commentStamp: 'platypus comment' prior: 0! FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; ! !PltODDFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; ! !PltREMOVEProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; ! !PltROLESOFFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; ! !PltSINFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; ! !PltSIZEOFFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; ! !PltSQRTFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; ! !PltTANFunction commentStamp: 'platypus comment' prior: 0! FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; ! !PltTYPEOFFunction commentStamp: 'platypus comment' prior: 0! FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; ! !PltUSEDINFunction commentStamp: 'platypus comment' prior: 0! FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; ! !PltVALUEFunction commentStamp: 'platypus comment' prior: 0! FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; ! !PltValueInFunction commentStamp: 'platypus comment' prior: 0! FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ! !PltValueUniqueFunction commentStamp: 'platypus comment' prior: 0! FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ! !PltExpressBuiltinsSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ! !PltPlatypusAggregateDataSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; ! !PltPlatypusDictionarySchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ! !PltPlatypusEnvironmentSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; ! !PltPlatypusExpressionsSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; ! !PltPlatypusPopulationSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; ! !PltPlatypusStatementsSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; ! !PltPlatypusExpressPrimitivesSchemaInstance commentStamp: 'platypus comment' prior: 0! SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ! !PltPlatypusMetaSchemasSchemaInstance commentStamp: 'platypus comment' prior: 0! SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ! !PltDLinkedList commentStamp: 'apl 3/2/2005 19:03' prior: 0! Un exemple de commentaire! !PltEntityInstance commentStamp: 'platypus comment' prior: 0! ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ! !PltApplicationInstance commentStamp: 'platypus comment' prior: 0! ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ! !PltGenericInstance commentStamp: 'platypus comment' prior: 0! ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ! !PltExternalRepresentation commentStamp: 'platypus comment' prior: 0! ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ! !PltGroupRepresentation commentStamp: 'platypus comment' prior: 0! ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ! !PltExternalGroupRepresentation commentStamp: 'platypus comment' prior: 0! ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ! !PltInternalGroupRepresentation commentStamp: 'platypus comment' prior: 0! ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ! !PltInternalRepresentation commentStamp: 'platypus comment' prior: 0! ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ! !PltUserDefinedApplicationInstance commentStamp: 'platypus comment' prior: 0! ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ! !PltHeaderInstance commentStamp: 'platypus comment' prior: 0! ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ! !PltFileDescription commentStamp: 'platypus comment' prior: 0! ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ! !PltFileName commentStamp: 'platypus comment' prior: 0! ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ! !PltFileSchema commentStamp: 'platypus comment' prior: 0! ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; ! !PltUserDefinedHeaderInstance commentStamp: 'platypus comment' prior: 0! ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ! !PltRemark commentStamp: 'platypus comment' prior: 0! ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ! !PltEmbeddedRemark commentStamp: 'platypus comment' prior: 0! ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ! !PltTailRemark commentStamp: 'platypus comment' prior: 0! ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ! !PltSdaiInstance commentStamp: 'platypus comment' prior: 0! ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ! !PltDictionaryInstance commentStamp: 'platypus comment' prior: 0! ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ! !PltAggregateInitializerDomain commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ! !PltAggregateInitializerElement commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ! !PltAggregateType commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ! !PltAggregationType commentStamp: 'platypus comment' prior: 0! ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ! !PltArrayType commentStamp: 'platypus comment' prior: 0! ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ! !PltVariableSizeAggregationType commentStamp: 'platypus comment' prior: 0! ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ! !PltBagType commentStamp: 'platypus comment' prior: 0! ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ! !PltListType commentStamp: 'platypus comment' prior: 0! ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ! !PltSetType commentStamp: 'platypus comment' prior: 0! ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ! !PltGeneralAggregateType commentStamp: 'platypus comment' prior: 0! ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ! !PltAliasStatementVariable commentStamp: 'platypus comment' prior: 0! ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ! !PltAnonymousVariable commentStamp: 'platypus comment' prior: 0! ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; ! !PltAssignable commentStamp: 'platypus comment' prior: 0! ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ! !PltAttribute commentStamp: 'platypus comment' prior: 0! ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ! !PltDerivedAttribute commentStamp: 'platypus comment' prior: 0! ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ! !PltExplicitAttribute commentStamp: 'platypus comment' prior: 0! ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ! !PltInverseAttribute commentStamp: 'platypus comment' prior: 0! ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ! !PltBound commentStamp: 'platypus comment' prior: 0! ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltIntegerBound commentStamp: 'platypus comment' prior: 0! ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ! !PltPopulationDependentBound commentStamp: 'platypus comment' prior: 0! ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ! !PltCaseAction commentStamp: 'platypus comment' prior: 0! ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ! !PltConstantDefinition commentStamp: 'platypus comment' prior: 0! ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ! !PltContextDefinition commentStamp: 'platypus comment' prior: 0! ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ! !PltSchemaDefinition commentStamp: 'platypus comment' prior: 0! ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; ! !PltStatementsContainer commentStamp: 'platypus comment' prior: 0! ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ! !PltAlgorithmDeclaration commentStamp: 'platypus comment' prior: 0! ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ! !PltFunctionDeclaration commentStamp: 'platypus comment' prior: 0! ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ! !PltProcedureDeclaration commentStamp: 'platypus comment' prior: 0! ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ! !PltGlobalRule commentStamp: 'platypus comment' prior: 0! ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ! !PltDictionaryInstanceReference commentStamp: 'platypus comment' prior: 0! ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ! !PltAttributeReference commentStamp: 'platypus comment' prior: 0! ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ! !PltNamedTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ! !PltDefinedTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ! !PltEntityDefinitionReference commentStamp: 'platypus comment' prior: 0! ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ! !PltDomainEquivalentItem commentStamp: 'platypus comment' prior: 0! ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ! !PltEnumerationType commentStamp: 'platypus comment' prior: 0! ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ! !PltExpression commentStamp: 'platypus comment' prior: 0! ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltAggregateData commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ! !PltAggregateInitializer commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ! !PltAggregateInstance commentStamp: 'platypus comment' prior: 0! ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ! !PltArrayInstance commentStamp: 'platypus comment' prior: 0! ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ! !PltVariableSizeAggregationInstance commentStamp: 'platypus comment' prior: 0! ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ! !PltBagInstance commentStamp: 'platypus comment' prior: 0! ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ! !PltListInstance commentStamp: 'platypus comment' prior: 0! ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ! !PltSetInstance commentStamp: 'platypus comment' prior: 0! ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; ! !PltBinaryExpression commentStamp: 'platypus comment' prior: 0! ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ! !PltArithmeticExpression commentStamp: 'platypus comment' prior: 0! ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltDivExpression commentStamp: 'platypus comment' prior: 0! ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ! !PltExpoExpression commentStamp: 'platypus comment' prior: 0! ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltMinusExpression commentStamp: 'platypus comment' prior: 0! ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ! !PltModExpression commentStamp: 'platypus comment' prior: 0! ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltMultExpression commentStamp: 'platypus comment' prior: 0! ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ! !PltPlusExpression commentStamp: 'platypus comment' prior: 0! ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ! !PltRealDivExpression commentStamp: 'platypus comment' prior: 0! ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltInstanceConstructionExpression commentStamp: 'platypus comment' prior: 0! ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltLogicalExpression commentStamp: 'platypus comment' prior: 0! ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltAndExpression commentStamp: 'platypus comment' prior: 0! ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ! !PltCardinalityExpression commentStamp: 'platypus comment' prior: 0! ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ! !PltComparisonExpression commentStamp: 'platypus comment' prior: 0! ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltGreaterEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltGreaterThanExpression commentStamp: 'platypus comment' prior: 0! ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltInstComparisonExpression commentStamp: 'platypus comment' prior: 0! ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltInstEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ! !PltInstNotEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ! !PltLessEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltLessThanExpression commentStamp: 'platypus comment' prior: 0! ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltNotEqualExpression commentStamp: 'platypus comment' prior: 0! ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltInExpression commentStamp: 'platypus comment' prior: 0! ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltLikeExpression commentStamp: 'platypus comment' prior: 0! ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltOrExpression commentStamp: 'platypus comment' prior: 0! ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ! !PltXorExpression commentStamp: 'platypus comment' prior: 0! ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltEntityInstanceReference commentStamp: 'platypus comment' prior: 0! ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ! !PltEscapedExpression commentStamp: 'platypus comment' prior: 0! ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; ! !PltNativeExpression commentStamp: 'platypus comment' prior: 0! ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ! !PltUnaryExpression commentStamp: 'platypus comment' prior: 0! ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ! !PltAggrUnaryExpression commentStamp: 'platypus comment' prior: 0! ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltQueryExpression commentStamp: 'platypus comment' prior: 0! ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ! !PltEntityInstanceConstructor commentStamp: 'platypus comment' prior: 0! ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ! !PltEntityInstancesSet commentStamp: 'platypus comment' prior: 0! ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ! !PltIdentifier commentStamp: 'platypus comment' prior: 0! ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ! !PltAttributeIdentifier commentStamp: 'platypus comment' prior: 0! ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ! !PltImplicitlyDeclaredIdentifier commentStamp: 'platypus comment' prior: 0! ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ! !PltUniquenessRuleAttributeIdentifier commentStamp: 'platypus comment' prior: 0! ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ! !PltInterval commentStamp: 'platypus comment' prior: 0! ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ! !PltLiteral commentStamp: 'platypus comment' prior: 0! ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltBinaryLiteral commentStamp: 'platypus comment' prior: 0! ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ! !PltLogicalLiteral commentStamp: 'platypus comment' prior: 0! ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ! !PltFalseConstant commentStamp: 'platypus comment' prior: 0! ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltTrueConstant commentStamp: 'platypus comment' prior: 0! ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltUnknownConstant commentStamp: 'platypus comment' prior: 0! ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltNumericLiteral commentStamp: 'platypus comment' prior: 0! ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ! !PltIntegerLiteral commentStamp: 'platypus comment' prior: 0! ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ! !PltRealLiteral commentStamp: 'platypus comment' prior: 0! ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ! !PltEConstant commentStamp: 'platypus comment' prior: 0! ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ! !PltPiConstant commentStamp: 'platypus comment' prior: 0! ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ! !PltStringLiteral commentStamp: 'platypus comment' prior: 0! ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ! !PltMissingValue commentStamp: 'platypus comment' prior: 0! ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltRedefinedAttributeValue commentStamp: 'platypus comment' prior: 0! ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ! !PltQualifiedExpression commentStamp: 'platypus comment' prior: 0! ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ! !PltQualifier commentStamp: 'platypus comment' prior: 0! ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltAttributeQualifier commentStamp: 'platypus comment' prior: 0! ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ! !PltEnumerationValue commentStamp: 'platypus comment' prior: 0! ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ! !PltGroupQualifier commentStamp: 'platypus comment' prior: 0! ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ! !PltIndexQualifier commentStamp: 'platypus comment' prior: 0! ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ! !PltElementQualifier commentStamp: 'platypus comment' prior: 0! ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ! !PltRangeQualifier commentStamp: 'platypus comment' prior: 0! ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ! !PltSelfIdentifier commentStamp: 'platypus comment' prior: 0! ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltSimpleUnaryExpression commentStamp: 'platypus comment' prior: 0! ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ! !PltNegativeExpression commentStamp: 'platypus comment' prior: 0! ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltNotExpression commentStamp: 'platypus comment' prior: 0! ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltPositiveExpression commentStamp: 'platypus comment' prior: 0! ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltTypedExpression commentStamp: 'platypus comment' prior: 0! ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ! !PltExternalSchema commentStamp: 'platypus comment' prior: 0! ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ! !PltExternalMetaSchema commentStamp: 'platypus comment' prior: 0! ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ! !PltIncludeSchema commentStamp: 'platypus comment' prior: 0! ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ! !PltReferencedSchema commentStamp: 'platypus comment' prior: 0! ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ! !PltUsedSchema commentStamp: 'platypus comment' prior: 0! ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ! !PltGenericType commentStamp: 'platypus comment' prior: 0! ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ! !PltIncrementControl commentStamp: 'platypus comment' prior: 0! ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ! !PltIncrementControlVariable commentStamp: 'platypus comment' prior: 0! ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ! !PltLocalVariable commentStamp: 'platypus comment' prior: 0! ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ! !PltMetaConceptDefinition commentStamp: 'platypus comment' prior: 0! ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ! !PltMetaMappingDefinition commentStamp: 'platypus comment' prior: 0! ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ! !PltMetaMappingRule commentStamp: 'platypus comment' prior: 0! ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ! !PltNamedType commentStamp: 'platypus comment' prior: 0! ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ! !PltDefinedType commentStamp: 'platypus comment' prior: 0! ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ! !PltEntityDefinition commentStamp: 'platypus comment' prior: 0! ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ! !PltNativeAlgorithm commentStamp: 'platypus comment' prior: 0! ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ! !PltNativeCode commentStamp: 'platypus comment' prior: 0! ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ! !PltParameterDefinition commentStamp: 'platypus comment' prior: 0! ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ! !PltQueryVariable commentStamp: 'platypus comment' prior: 0! ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ! !PltRemarkReference commentStamp: 'platypus comment' prior: 0! ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ! !PltSelectType commentStamp: 'platypus comment' prior: 0! ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ! !PltSimpleType commentStamp: 'platypus comment' prior: 0! ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltBinaryType commentStamp: 'platypus comment' prior: 0! ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ! !PltLogicalType commentStamp: 'platypus comment' prior: 0! ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ! !PltBooleanType commentStamp: 'platypus comment' prior: 0! ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ! !PltNumberType commentStamp: 'platypus comment' prior: 0! ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ! !PltIntegerType commentStamp: 'platypus comment' prior: 0! ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ! !PltRealType commentStamp: 'platypus comment' prior: 0! ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ! !PltStringType commentStamp: 'platypus comment' prior: 0! ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ! !PltStatement commentStamp: 'platypus comment' prior: 0! ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltAliasStatement commentStamp: 'platypus comment' prior: 0! ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ! !PltAssignmentStatement commentStamp: 'platypus comment' prior: 0! ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ! !PltCaseStatement commentStamp: 'platypus comment' prior: 0! ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ! !PltCompoundStatement commentStamp: 'platypus comment' prior: 0! ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ! !PltEndSplitmarkStatement commentStamp: 'platypus comment' prior: 0! ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltEscapeStatement commentStamp: 'platypus comment' prior: 0! ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltIfStatement commentStamp: 'platypus comment' prior: 0! ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ! !PltNativeStatement commentStamp: 'platypus comment' prior: 0! ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ! !PltNullStatement commentStamp: 'platypus comment' prior: 0! ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltOutputStatement commentStamp: 'platypus comment' prior: 0! ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ! !PltProcedureCallStatement commentStamp: 'platypus comment' prior: 0! ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ! !PltRepeatStatement commentStamp: 'platypus comment' prior: 0! ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ! !PltReturnStatement commentStamp: 'platypus comment' prior: 0! ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ! !PltSkipStatement commentStamp: 'platypus comment' prior: 0! ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltSplitmarkStatement commentStamp: 'platypus comment' prior: 0! ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ! !PltSupertypeConstraint commentStamp: 'platypus comment' prior: 0! ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ! !PltSupertypeExpression commentStamp: 'platypus comment' prior: 0! ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltBinarySupertypeExpression commentStamp: 'platypus comment' prior: 0! ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ! !PltAndSupertype commentStamp: 'platypus comment' prior: 0! ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ! !PltAndorSupertype commentStamp: 'platypus comment' prior: 0! ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ! !PltOneofSupertypeExpression commentStamp: 'platypus comment' prior: 0! ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ! !PltSubEntityRefExpression commentStamp: 'platypus comment' prior: 0! ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ! !PltUniquenessRule commentStamp: 'platypus comment' prior: 0! ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ! !PltWhereRule commentStamp: 'platypus comment' prior: 0! ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ! !PltSessionInstance commentStamp: 'platypus comment' prior: 0! ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ! !PltInstanceScope commentStamp: 'platypus comment' prior: 0! ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ! !PltModelContents commentStamp: 'platypus comment' prior: 0! ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ! !PltSchemaInstance commentStamp: 'platypus comment' prior: 0! ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; ! !PltSimpleRecord commentStamp: 'platypus comment' prior: 0! ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ! !PlatypusRepositoryBuilder commentStamp: '' prior: 0! Build a repository of Platypus metamodele instances from a generic repository! !PlatypusExpressBuiltinFormatScanner class methodsFor: 'generated-comments' stamp: 'apl 12/12/2005 12:03'! scannerDefinitionComment " : \d+ ; : \s+ ; "! ! !PlatypusExpressBuiltinFormatScanner methodsFor: 'generated-tokens' stamp: 'apl 12/12/2005 12:03'! emptySymbolTokenId ^26! ! !PlatypusExpressBuiltinFormatScanner methodsFor: 'generated-tokens' stamp: 'apl 12/12/2005 12:03'! errorTokenId ^27! ! !PlatypusExpressBuiltinFormatScanner methodsFor: 'generated-scanner' stamp: 'apl 12/12/2005 12:03'! keywordFor: aString ^aString asUppercase! ! !PlatypusExpressBuiltinFormatScanner methodsFor: 'generated-scanner' stamp: 'apl 12/12/2005 12:03'! scanForToken self step. currentCharacter isDigit ifTrue: [ [self recordMatch: #(11 ). self step. currentCharacter isDigit] whileTrue. ^self reportLastMatch]. (currentCharacter isSeparator or: [currentCharacter == $ ]) ifTrue: [ [self recordMatch: #whitespace. self step. currentCharacter isSeparator or: [currentCharacter == $ ]] whileTrue. ^self reportLastMatch]. (currentCharacter == $E or: [currentCharacter == $e]) ifTrue: [^self recordAndReportMatch: #(9 )]. (currentCharacter == $F or: [currentCharacter == $f]) ifTrue: [^self recordAndReportMatch: #(4 )]. (currentCharacter == $I or: [currentCharacter == $i]) ifTrue: [^self recordAndReportMatch: #(3 )]. currentCharacter == $# ifTrue: [^self recordAndReportMatch: #(7 )]. currentCharacter == $( ifTrue: [^self recordAndReportMatch: #(10 )]. currentCharacter == $) ifTrue: [^self recordAndReportMatch: #(8 )]. currentCharacter == $+ ifTrue: [^self recordAndReportMatch: #(5 )]. currentCharacter == $, ifTrue: [^self recordAndReportMatch: #(6 )]. currentCharacter == $- ifTrue: [^self recordAndReportMatch: #(2 )]. currentCharacter == $. ifTrue: [^self recordAndReportMatch: #(1 )]. ^self reportLastMatch! ! !PlatypusExpressLikeScanner class methodsFor: 'generated-comments' stamp: 'apl 2/5/2004 19:15'! scannerDefinitionComment " : \s|\S ; : \\. ;"! ! !PlatypusExpressLikeScanner methodsFor: 'generated-tokens' stamp: 'apl 2/5/2004 19:15'! emptySymbolTokenId ^10! ! !PlatypusExpressLikeScanner methodsFor: 'generated-tokens' stamp: 'apl 2/5/2004 19:15'! errorTokenId ^11! ! !PlatypusExpressLikeScanner methodsFor: 'generated-scanner' stamp: 'apl 2/5/2004 19:15'! scanForToken self step. (currentCharacter <= $> or: [(currentCharacter between: $A and: $[) or: [currentCharacter == $] or: [currentCharacter >= $_]]]) ifTrue: [^self recordAndReportMatch: #(4)]. currentCharacter == $? ifTrue: [^self recordAndReportMatch: #(3 4)]. currentCharacter == $@ ifTrue: [^self recordAndReportMatch: #(1 4)]. currentCharacter == $\ ifTrue: [self recordMatch: #(4). self step. ^self recordAndReportMatch: #(5)]. currentCharacter == $^ ifTrue: [^self recordAndReportMatch: #(2 4)]. ^self reportLastMatch! ! !PlatypusExpressScanner class methodsFor: 'generated-initialization' stamp: 'AlainPlantec 12/8/2012 11:09'! initializeKeywordMap keywordMap := Dictionary new. #(#(130 'ABSTRACT' 121) #(130 'AGGREGATE' 68) #(130 'ALIAS' 25) #(130 'AND' 61) #(130 'ANDOR' 59) #(130 'ARRAY' 62) #(130 'AS' 13) #(130 'BAG' 63) #(130 'BEGIN' 16) #(130 'BINARY' 69) #(130 'BOOLEAN' 91) #(130 'BY' 88) #(130 'CASE' 28) #(130 'CONSTANT' 14) #(130 'CONST_E' 81) #(130 'DERIVE' 110) #(130 'DIV' 56) #(130 'ELSE' 58) #(130 'END' 19) #(130 'END_ALIAS' 26) #(130 'END_CASE' 21) #(130 'END_CONSTANT' 6) #(130 'END_ENTITY' 118) #(130 'END_FUNCTION' 8) #(130 'END_IF' 20) #(130 'END_LOCAL' 104) #(130 'END_MAP' 70) #(130 'END_PROCEDURE' 24) #(130 'END_REPEAT' 105) #(130 'END_RULE' 7) #(130 'END_SCHEMA' 51) #(130 'END_SPLITMARK' 99) #(130 'END_TYPE' 92) #(130 'ENTITY' 116) #(130 'ENUMERATION' 72) #(130 'ESCAPE' 17) #(130 'FALSE' 78) #(130 'FIXED' 89) #(130 'FOR' 3) #(130 'FROM' 54) #(130 'FUNCTION' 5) #(130 'GENERIC' 74) #(130 'IF' 18) #(130 'IN' 46) #(130 'INTEGER' 86) #(130 'INVERSE' 114) #(130 'LIKE' 32) #(130 'LIST' 65) #(130 'LOCAL' 97) #(130 'LOGICAL' 87) #(130 'MAP' 84) #(130 'META' 23) #(130 'MOD' 55) #(130 'NOT' 50) #(130 'NUMBER' 73) #(130 'OF' 29) #(130 'ONEOF' 117) #(130 'OPTIONAL' 109) #(130 'OR' 36) #(130 'OTHERWISE' 30) #(130 'PI' 83) #(130 'PROCEDURE' 12) #(130 'QUERY' 82) #(130 'REAL' 85) #(130 'REFERENCE' 9) #(130 'REPEAT' 107) #(130 'RETURN' 106) #(130 'RULE' 2) #(130 'SCHEMA' 53) #(130 'SELECT' 76) #(130 'SELF' 115) #(130 'SET' 64) #(130 'SKIP' 98) #(130 'SPLITMARK' 94) #(130 'STRING' 66) #(130 'SUBTYPE' 119) #(130 'SUPERTYPE' 120) #(130 'THEN' 22) #(130 'TO' 101) #(130 'TRUE' 77) #(130 'TYPE' 100) #(130 'UNIQUE' 112) #(130 'UNKNOWN' 79) #(130 'UNTIL' 103) #(130 'USE' 27) #(130 'VAR' 111) #(130 'WHERE' 71) #(130 'WHILE' 102) #(130 'XOR' 39)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !PlatypusExpressScanner class methodsFor: 'generated-comments' stamp: 'AlainPlantec 12/8/2012 11:09'! scannerDefinitionComment " : [\-][\-][^\n\r\f]* ; : \( \* \# ; : \( \* ; : \d+ ; : \.?(e(\+|-)?)? ; : %[01]+ ; : '([^']|'')*' ; : \""[^\""]*\"" ; : [A-Za-z0-9]\w* ; : \s+ ; "! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! binaryId ^127! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 11/12/2003 11:36'! buildTokenList [self atEnd] whileFalse: [self next]. ^ self tokenList! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 22:48'! embedRemark | rem remarkToken smaccToken | rem := self readEmbedRemark. remarkToken := PlatypusEmbeddedRemarkToken token: rem. tokenList add: remarkToken. rem notEmpty ifTrue: [(rem first = $" or: [rem first = $<]) ifTrue: [smaccToken := SmaCCToken value: remarkToken start: start id: (Array with: self remarkRefId). matchActions := nil. returnMatchBlock value: smaccToken]]. outputStream reset. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! emptySymbolTokenId ^312! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! encodedStringId ^129! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 22:48'! eol outputStream reset. tokenList add: PlatypusEolToken new. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! errorTokenId ^313! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! identifierId ^130! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 22:48'! indent outputStream reset. tokenList add: PlatypusIndentToken new. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'initialize-release' stamp: 'apl 3/23/2006 14:17'! initialize super initialize. tokenList := PlatypusTokenList new. tokenClassifier := PlatypusExpressTokenClassifier new. ! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! integerId ^125! ! !PlatypusExpressScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 12/8/2012 11:09'! keywordFor: aString ^aString asUppercase! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! logicalId ^314! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 22:48'! nativeAlgorithm | smaccToken nativeAlgorithmToken rem | rem := self readEmbedRemark. nativeAlgorithmToken := PlatypusExpressNativeAlgorithmToken token: rem allButLast. smaccToken := SmaCCToken value: nativeAlgorithmToken start: start id: (Array with: self nativeAlgorithmId). matchActions := nil. returnMatchBlock value: smaccToken. outputStream reset. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! nativeAlgorithmId ^123! ! !PlatypusExpressScanner methodsFor: 'accessing' stamp: 'apl 3/30/2006 14:41'! next | token tokenClass tokenNodeData precToken | token := super next. token value isString ifTrue: [token value isEmpty ifFalse: [tokenClass := tokenClassifier tokenClassFromString: token value ifAbsent: [((precToken := tokenList previousNonBlankFrom: tokenList last) notNil and: [precToken isPrimaryElementOpenKeyword]) ifTrue: [PlatypusPrimaryElementIdentifierToken] ifFalse: [PlatypusIdentifierToken]]. tokenNodeData := tokenClass token: token value]] ifFalse: [tokenNodeData := token value]. tokenNodeData ifNotNil: [tokenList add: tokenNodeData]. ^ token! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'AlainPlantec 10/7/2010 15:54'! readEmbedRemark | level loop rem endFound prevChar | level := 1. endFound := false. outputStream reset. self step. loop := stream atEnd not. [loop] whileTrue: [stream atEnd ifTrue: [Transcript show: 'End of input inside comment\' withCRs. loop := false] ifFalse: [prevChar := currentCharacter. self step. (prevChar == $( and: [currentCharacter == $*]) ifTrue: [level := level + 1] ifFalse: [(prevChar == $* and: [currentCharacter == $)]) ifTrue: [level := level - 1. level == 0 ifTrue: [endFound := true. loop := false]]]]]. rem := outputStream contents. endFound ifTrue: [rem := rem copyFrom: 1 to: rem size - 2]. ^ rem ! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! realId ^126! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! remarkRefId ^220! ! !PlatypusExpressScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 12/8/2012 11:09'! scan1 [ self step. currentCharacter ~= $' ] whileTrue. currentCharacter = $' ifTrue: [ self recordMatch: #(128). self step. currentCharacter = $' ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !PlatypusExpressScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 12/8/2012 11:09'! scanForToken self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter between: $a and: $z ]) ifTrue: [ [ self recordMatch: #(130). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(125 130). self step. ((currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ]) ifTrue: [ [ self recordMatch: #(130). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $. ifTrue: [ [ self recordMatch: #(126). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(126). self step. currentCharacter between: $0 and: $9 ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(126). self step. currentCharacter between: $0 and: $9 ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $" ifTrue: [ [ self step. currentCharacter ~= $" ] whileTrue. currentCharacter = $" ifTrue: [ ^ self recordAndReportMatch: #(129) ]. ^ self reportLastMatch ]. currentCharacter = $% ifTrue: [ self recordMatch: #(90). self step. (currentCharacter between: $0 and: $1) ifTrue: [ [ self recordMatch: #(127). self step. currentCharacter between: $0 and: $1 ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ ^ self scan1 ]. currentCharacter = $( ifTrue: [ self recordMatch: #(10). self step. currentCharacter = $* ifTrue: [ self recordMatch: #embedRemark. self step. currentCharacter = $# ifTrue: [ ^ self recordAndReportMatch: #nativeAlgorithm ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(11) ]. currentCharacter = $* ifTrue: [ self recordMatch: #(57). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(52) ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(95) ]. ^ self reportLastMatch ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(38) ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(34). self step. currentCharacter = $- ifTrue: [ [ self recordMatch: #tailRemark. self step. currentCharacter <= Character tab or: [ currentCharacter = Character pageUp or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(108) ]. currentCharacter = $/ ifTrue: [ ^ self recordAndReportMatch: #(43) ]. currentCharacter = $: ifTrue: [ self recordMatch: #(4). self step. currentCharacter = $< ifTrue: [ self step. currentCharacter = $> ifTrue: [ self step. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(45) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ self recordMatch: #(1). self step. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(44) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(49) ]. currentCharacter = $< ifTrue: [ self recordMatch: #(35). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(80) ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(37) ]. currentCharacter = $> ifTrue: [ ^ self recordAndReportMatch: #(33) ]. ^ self reportLastMatch ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(40) ]. currentCharacter = $> ifTrue: [ self recordMatch: #(42). self step. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(41) ]. ^ self reportLastMatch ]. currentCharacter = $? ifTrue: [ ^ self recordAndReportMatch: #(31) ]. currentCharacter = $[ ifTrue: [ ^ self recordAndReportMatch: #(75) ]. currentCharacter = $\ ifTrue: [ ^ self recordAndReportMatch: #(113) ]. currentCharacter = $] ifTrue: [ ^ self recordAndReportMatch: #(67) ]. currentCharacter = ${ ifTrue: [ self recordMatch: #(47). self step. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(93) ]. ^ self reportLastMatch ]. currentCharacter = $| ifTrue: [ self recordMatch: #(96). self step. currentCharacter = $| ifTrue: [ ^ self recordAndReportMatch: #(60) ]. ^ self reportLastMatch ]. currentCharacter = $} ifTrue: [ ^ self recordAndReportMatch: #(48) ]. ^ self reportLastMatch! ! !PlatypusExpressScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 12/8/2012 11:09'! stringId ^128! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 1/25/2007 11:12'! tailRemark | rem remarkToken smaccToken | outputStream contents size > 2 ifTrue: [rem := outputStream contents copyFrom: 3 to: outputStream contents size. remarkToken := PlatypusTailRemarkToken token: rem. rem notEmpty ifTrue: [(rem first = $" or: [rem first = $<]) ifTrue: [smaccToken := SmaCCToken value: remarkToken start: start id: (Array with: self remarkRefId). matchActions := nil. returnMatchBlock value: smaccToken]]]. outputStream reset. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'accessing' stamp: 'apl 11/12/2003 11:36'! tokenList ^ tokenList! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 22:48'! white outputStream reset. tokenList add: PlatypusOneWhiteSpaceToken new. ^ self whitespace! ! !PlatypusExpressScanner methodsFor: 'scanning' stamp: 'apl 4/18/2006 14:16'! whitespace | tokenClass | outputStream contents do: [:c | (tokenClass := tokenClassifier tokenClassFromCharacter: c ifAbsent: [PlatypusOneWhiteSpaceToken]) ifNotNil: [tokenList add: tokenClass new]]. outputStream reset. ^ super whitespace! ! !StepScanner class methodsFor: 'generated-initialization' stamp: 'AlainPlantec 5/24/2012 00:14'! initializeKeywordMap keywordMap := Dictionary new. #(#(25 'END_SCOPE' 5) #(25 'SCOPE' 2) #(26 '.F.' 13) #(26 '.T.' 16) #(26 '.U.' 11)) do: [ :each | (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) at: (each at: 2) put: each last ]. ^ keywordMap! ! !StepScanner class methodsFor: 'generated-comments' stamp: 'AlainPlantec 5/24/2012 00:14'! scannerDefinitionComment " : [\<] ; : \d+; : \.?(e[\+\-]?+)? ; : %[01]+ ; : '([^']|'')*' ; : \""[^\""]*\"" ; : [A-Za-z]\w* ; : \.\w*\. ; : \/ \* ( \w | \W )* \* \/ ; : [\-][\-][^\n\r\f]* ; : \s+ ;"! ! !StepScanner methodsFor: 'scanning' stamp: 'AlainPlantec 5/12/2012 23:36'! annotation [ self step. currentCharacter ~= $> ] whileTrue. ^ self whitespace ! ! !StepScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 5/24/2012 00:14'! emptySymbolTokenId ^58! ! !StepScanner methodsFor: 'generated-tokens' stamp: 'AlainPlantec 5/24/2012 00:14'! errorTokenId ^59! ! !StepScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 5/24/2012 00:14'! keywordFor: aString ^aString asUppercase! ! !StepScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 5/24/2012 00:14'! scan1 [ self step. (currentCharacter <= $) or: [ (currentCharacter between: $+ and: $.) or: [ currentCharacter >= $0 ] ]) ifTrue: [ ^ self scan2 ]. currentCharacter = $* ] whileTrue. currentCharacter = $/ ifTrue: [ self recordMatch: #comment. self step. currentCharacter ~= $* ifTrue: [ ^ self scan2 ]. currentCharacter = $* ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StepScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 5/24/2012 00:14'! scan2 [ self step. currentCharacter ~= $* ] whileTrue. currentCharacter = $* ifTrue: [ ^ self scan1 ]. ^ self reportLastMatch! ! !StepScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 5/24/2012 00:14'! scan3 [ self step. currentCharacter ~= $' ] whileTrue. currentCharacter = $' ifTrue: [ self recordMatch: #(24). self step. currentCharacter = $' ifTrue: [ ^ self scan3 ]. ^ self reportLastMatch ]. ^ self reportLastMatch! ! !StepScanner methodsFor: 'generated-scanner' stamp: 'AlainPlantec 5/24/2012 00:14'! scanForToken self step. ((currentCharacter between: $A and: $D) or: [ (currentCharacter between: $F and: $H) or: [ (currentCharacter between: $J and: $Z) or: [ (currentCharacter between: $a and: $d) or: [ (currentCharacter between: $f and: $h) or: [ currentCharacter between: $j and: $z ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(21). self step. currentCharacter between: $0 and: $9 ] whileTrue. currentCharacter = $. ifTrue: [ [ self recordMatch: #(22). self step. currentCharacter between: $0 and: $9 ] whileTrue. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(22). self step. currentCharacter between: $0 and: $9 ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $+ or: [ currentCharacter = $- ]) ifTrue: [ self step. (currentCharacter between: $0 and: $9) ifTrue: [ [ self recordMatch: #(22). self step. currentCharacter between: $0 and: $9 ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ((currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ]) ifTrue: [ [ self recordMatch: #whitespace. self step. (currentCharacter between: Character tab and: Character cr) or: [ currentCharacter = Character space ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $E or: [ currentCharacter = $e ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $M) or: [ (currentCharacter between: $O and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $m) or: [ currentCharacter between: $o and: $z ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $N or: [ currentCharacter = $n ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $C) or: [ (currentCharacter between: $E and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $c) or: [ currentCharacter between: $e and: $z ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $D or: [ currentCharacter = $d ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $- ifTrue: [ self step. (currentCharacter = $I or: [ currentCharacter = $i ]) ifTrue: [ self step. (currentCharacter = $S or: [ currentCharacter = $s ]) ifTrue: [ self step. (currentCharacter = $O or: [ currentCharacter = $o ]) ifTrue: [ self step. currentCharacter = $- ifTrue: [ self step. currentCharacter = $1 ifTrue: [ self step. currentCharacter = $0 ifTrue: [ self step. currentCharacter = $3 ifTrue: [ self step. currentCharacter = $0 ifTrue: [ self step. currentCharacter = $3 ifTrue: [ self step. currentCharacter = $- ifTrue: [ self step. currentCharacter = $2 ifTrue: [ self step. currentCharacter = $1 ifTrue: [ ^ self recordAndReportMatch: #(10) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. (currentCharacter = $I or: [ currentCharacter = $i ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $R) or: [ (currentCharacter between: $T and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $r) or: [ currentCharacter between: $t and: $z ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $S or: [ currentCharacter = $s ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $N) or: [ (currentCharacter between: $P and: $Z) or: [ currentCharacter = $_ or: [ (currentCharacter between: $a and: $n) or: [ currentCharacter between: $p and: $z ] ] ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. (currentCharacter = $O or: [ currentCharacter = $o ]) ifTrue: [ self recordMatch: #(25). self step. ((currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ]) ifTrue: [ [ self recordMatch: #(25). self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. ^ self reportLastMatch ]. currentCharacter = $- ifTrue: [ self step. currentCharacter = $1 ifTrue: [ self step. currentCharacter = $0 ifTrue: [ self step. currentCharacter = $3 ifTrue: [ self step. currentCharacter = $0 ifTrue: [ self step. currentCharacter = $3 ifTrue: [ self step. currentCharacter = $- ifTrue: [ self step. currentCharacter = $2 ifTrue: [ self step. currentCharacter = $1 ifTrue: [ ^ self recordAndReportMatch: #(6) ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $# ifTrue: [ ^ self recordAndReportMatch: #(9) ]. currentCharacter = $$ ifTrue: [ ^ self recordAndReportMatch: #(18) ]. currentCharacter = $% ifTrue: [ self step. (currentCharacter between: $0 and: $1) ifTrue: [ [ self recordMatch: #(23). self step. currentCharacter between: $0 and: $1 ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $' ifTrue: [ ^ self scan3 ]. currentCharacter = $( ifTrue: [ ^ self recordAndReportMatch: #(4) ]. currentCharacter = $) ifTrue: [ ^ self recordAndReportMatch: #(3) ]. currentCharacter = $* ifTrue: [ ^ self recordAndReportMatch: #(19) ]. currentCharacter = $+ ifTrue: [ ^ self recordAndReportMatch: #(12) ]. currentCharacter = $, ifTrue: [ ^ self recordAndReportMatch: #(15) ]. currentCharacter = $- ifTrue: [ self recordMatch: #(14). self step. currentCharacter = $- ifTrue: [ [ self recordMatch: #tailRemark. self step. currentCharacter <= Character tab or: [ currentCharacter = Character pageUp or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. ^ self reportLastMatch ]. ^ self reportLastMatch ]. currentCharacter = $. ifTrue: [ [ self step. (currentCharacter between: $0 and: $9) or: [ (currentCharacter between: $A and: $Z) or: [ currentCharacter = $_ or: [ currentCharacter between: $a and: $z ] ] ] ] whileTrue. currentCharacter = $. ifTrue: [ ^ self recordAndReportMatch: #(26) ]. ^ self reportLastMatch ]. currentCharacter = $/ ifTrue: [ self recordMatch: #(1). self step. currentCharacter = $* ifTrue: [ ^ self scan2 ]. ^ self reportLastMatch ]. currentCharacter = $: ifTrue: [ ^ self recordAndReportMatch: #(17) ]. currentCharacter = $; ifTrue: [ ^ self recordAndReportMatch: #(7) ]. currentCharacter = $< ifTrue: [ ^ self recordAndReportMatch: #annotation ]. currentCharacter = $= ifTrue: [ ^ self recordAndReportMatch: #(8) ]. ^ self reportLastMatch! ! !StepScanner methodsFor: 'scanning' stamp: 'AlainPlantec 5/12/2012 23:06'! tailRemark ^ self whitespace! ! !PlatypusAbstractTranslaterInterface class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:55'! translaterClass ^ PlatypusPharoSmalltalk at: self translaterClassName asSymbol! ! !PlatypusAbstractTranslaterInterface class methodsFor: 'accessing' stamp: 'apl 2/1/2007 16:15'! translaterClassName ^ self subclassResponsibility ! ! !PlatypusAbstractTranslaterInterface methodsFor: 'public accessing' stamp: 'apl 2/15/2007 16:05'! localTranslate: aMetaData | translater | translater := self translaterClass namesBuilder: aMetaData namesBuilder. translater localTranslationOnly: true. ^ self translate: aMetaData withStructureTranslater: translater! ! !PlatypusAbstractTranslaterInterface methodsFor: 'public accessing' stamp: 'apl 2/15/2007 16:05'! translate: aMetaData | translater | translater := self translaterClass namesBuilder: aMetaData namesBuilder. ^ self translate: aMetaData withStructureTranslater: translater! ! !PlatypusAbstractTranslaterInterface methodsFor: 'public accessing' stamp: 'apl 2/15/2007 15:54'! translate: aMetaData withStructureTranslater: aTranslater ^ aTranslater translate: aMetaData! ! !PlatypusAbstractTranslaterInterface methodsFor: 'accessing' stamp: 'apl 2/15/2007 15:35'! translaterClass ^ self class translaterClass ! ! !PlatypusToPharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:10'! translaterClassName ^ #PlatypusExpressStructure2PharoTranslater ! ! !PlatypusToVisualWorksTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 15:57'! translaterClassName ^ #PlatypusExpressStructure2VWTranslater! ! !PlatypusAttributeIdentification class methodsFor: 'instance creation' stamp: 'apl 2/4/2006 09:27'! definition: aPltAttribute globalPos: gpos localPos: lpos ^ self new definition: aPltAttribute globalPos: gpos localPos: lpos! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! definition ^definition! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! definition: anObject definition := anObject! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 09:28'! definition: aPltAttribute globalPos: gpos localPos: lpos self definition: aPltAttribute. self globalPos: gpos. self localPos: lpos ! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! globalPos ^globalPos! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! globalPos: anObject globalPos := anObject! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! localPos ^localPos! ! !PlatypusAttributeIdentification methodsFor: 'accessing' stamp: 'apl 2/4/2006 08:52'! localPos: anObject localPos := anObject! ! !PlatypusAttributeIdentification methodsFor: 'printing' stamp: 'apl 2/4/2006 10:27'! printOn: aStream aStream nextPutAll: self class name , '('. self definition owner name printOn: aStream. aStream nextPutAll: '>>'. self definition name printOn: aStream. aStream nextPut: Character space. self globalPos printOn: aStream. aStream nextPut: Character space. self localPos printOn: aStream. aStream nextPut: $)! ! !PlatypusComplexInstance class methodsFor: 'instance creation' stamp: 'apl 3/11/2005 21:53'! fromRecords: aListOfRecords ^ self new addAllRecords: aListOfRecords! ! !PlatypusComplexInstance methodsFor: 'operator' stamp: 'AlainPlantec 7/14/2011 16:55'! \ aClassSymbol | classif groupClass res resRecords curr selector o | groupClass := PlatypusPharoSmalltalk at: aClassSymbol. (classif := records detect: [:rec | rec isKindOf: groupClass] ifNone: []) ifNil: [self error: 'invalid group: ' , aClassSymbol]. res := self class new. resRecords := OrderedCollection new. curr := classif class. [curr == Object or: [curr name == aClassSymbol]] whileFalse: [curr := curr superclass]. [curr class includesSelector: #schemaDefinition] whileTrue: [selector := PlatypusNamesBuilder new localCopyMethodNameFromEntity: curr platypusMetaData. o := curr new. classif perform: selector asSymbol with: o. resRecords add: o. curr := curr superclass]. res records: resRecords. ^ res! ! !PlatypusComplexInstance methodsFor: 'private adding' stamp: 'apl 3/6/2005 23:05'! add: anObject self records add: anObject! ! !PlatypusComplexInstance methodsFor: 'adding' stamp: 'apl 3/11/2005 21:52'! addAllRecords: aListOfRecords aListOfRecords do: [ :rec | self addRecord: rec] ! ! !PlatypusComplexInstance methodsFor: 'adding' stamp: 'apl 3/11/2005 21:58'! addRecord: aRecord aRecord pltAddIntoComplexeInstance: self.! ! !PlatypusComplexInstance methodsFor: 'converting' stamp: 'apl 3/6/2005 23:02'! asPlatypusComplexInstance ^ self! ! !PlatypusComplexInstance methodsFor: 'message handling' stamp: 'apl 12/8/2006 08:47'! doesNotUnderstand: aMessage | found args newMessage wrappedSelector | (found := self records reversed detect: [:rec | rec respondsTo: aMessage selector] ifNone: [^ super doesNotUnderstand: aMessage]) ifNotNil: [wrappedSelector := (aMessage selector , 'receiver:') asSymbol. (found respondsTo: wrappedSelector) ifTrue: [args := Array new: aMessage arguments size + 1. 1 to: aMessage arguments size do: [:pos | args at: pos put: (aMessage arguments at: pos)]. args at: aMessage arguments size + 1 put: self. newMessage := Message selector: wrappedSelector asSymbol arguments: args. ^ newMessage sendTo: found] ifFalse: [aMessage arguments ifEmpty: [args := Array with: nil. wrappedSelector := (aMessage selector , 'UsingContext:') asSymbol. newMessage := Message selector: wrappedSelector asSymbol arguments: args. ^ newMessage sendTo: self]. ^ aMessage sendTo: found]]! ! !PlatypusComplexInstance methodsFor: 'initialize-release' stamp: 'apl 3/6/2005 23:05'! initialize super initialize. records := OrderedCollection new.! ! !PlatypusComplexInstance methodsFor: 'class membership' stamp: 'alain.plantec 1/24/2009 09:19'! isKindOf: aClass (super isKindOf: aClass ) ifTrue: [^true]. self records do: [:rec | (rec isKindOf: aClass) ifTrue: [^true]]. ^ false! ! !PlatypusComplexInstance methodsFor: 'message handling' stamp: 'apl 9/5/2006 12:51'! name ^ self doesNotUnderstand: (Message selector: #name)! ! !PlatypusComplexInstance methodsFor: 'adding' stamp: 'apl 3/11/2005 22:00'! pltAddIntoComplexeInstance: aComplexInstance aComplexInstance addAllRecords: records.! ! !PlatypusComplexInstance methodsFor: 'converting' stamp: 'apl 3/11/2005 22:03'! pltAsObject records size = 1 ifTrue: [^ records first]. ^ self! ! !PlatypusComplexInstance methodsFor: 'private adding' stamp: 'apl 1/18/2007 12:58'! privateAddRecord: aRecord | classif | (classif := self records detect: [:r | r isKindOf: aRecord class] ifNone: []) ifNil: [(classif := self records detect: [:r | aRecord isKindOf: r class] ifNone: []) ifNotNil: [self remove: classif. classif pltLocalCopyTo: aRecord]. self add: aRecord] ifNotNil: [aRecord pltLocalCopyTo: classif]! ! !PlatypusComplexInstance methodsFor: 'private accessing' stamp: 'apl 3/6/2005 22:52'! records ^records! ! !PlatypusComplexInstance methodsFor: 'private accessing' stamp: 'apl 3/6/2005 22:52'! records: anObject records := anObject! ! !PlatypusComplexInstance methodsFor: 'private accessing' stamp: 'apl 3/8/2005 12:34'! remove: anObject self records remove: anObject! ! !PlatypusAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PlatypusAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PlatypusAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptAggrUnaryExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptAggregateData: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptAggregateInitializer: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAggregateInitializerDomain: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptAggregateInitializerElement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptAggregateInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAggregateType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAggregationType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAlgorithmDeclaration: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAlgorithmRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptAliasStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptAliasStatementVariable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptAndExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAndSupertype: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAndorSupertype: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptAnonymousVariable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptApplicationInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptArithmeticExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptArrayInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptArrayType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptAssignable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptAssignmentStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAttribute: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptAttributeIdentifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptAttributeQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptAttributeReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptBagInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptBagType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptBinaryExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptBinaryLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptBinarySupertypeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptBinaryType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptBooleanType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptBound: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptCardinalityExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptCaseAction: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptCaseStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptComparisonExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptCompoundStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptConstantDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptContextDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptContextRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDefinedType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDefinedTypeReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDerivedAttribute: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDictionaryInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDictionaryInstanceReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptDivExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptDomainEquivalentItem: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEConstant: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptElementQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptElementRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptElementReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptEmbeddedRemark: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptEndSplitmarkStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptEntityDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptEntityDefinitionReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema' stamp: 'AlainPlantec 3/11/2014 15:03'! acceptEntityInstance: e! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEntityInstanceConstructor: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEntityInstanceReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEntityInstancesSet: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptEntityReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptEnumerationType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEnumerationValue: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptEscapeStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptEscapedExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptExplicitAttribute: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptExpoExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptExternalGroupRepresentation: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptExternalMetaSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptExternalRepresentation: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptExternalSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptFalseConstant: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptFileDescription: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptFileName: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptFileSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptFunctionDeclaration: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptGeneralAggregateType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptGenericInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptGenericType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptGlobalRule: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptGreaterEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptGreaterThanExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptGroupQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptGroupRepresentation: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptHeaderInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptIdentifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptIfStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptImplicitlyDeclaredIdentifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptIncludeSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptIncrementControl: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptIncrementControlVariable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptIndexQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInstComparisonExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInstEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInstNotEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInstanceConstructionExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptInstanceScope: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptIntegerBound: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptIntegerLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptIntegerType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptInternalGroupRepresentation: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptInternalRepresentation: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptInterval: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptInverseAttribute: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLessEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLessThanExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLikeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptListInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptListType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptLocalVariable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLogicalExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptLogicalLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptLogicalType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptMetaConceptDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptMetaMappingDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptMetaMappingRule: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptMinusExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptMissingValue: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptModExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusEnvironmentSchema'! acceptModelContents: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptMultExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNamedType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNamedTypeRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNamedTypeReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNativeAlgorithm: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNativeCode: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptNativeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptNativeStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptNegativeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptNotEqualExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptNotExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptNullStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptNumberType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptNumericLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptOneofSupertypeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptOrExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptOutputStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptParameterDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptPiConstant: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptPlusExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptPopulationDependentBound: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptPositiveExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptProcedureCallStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptProcedureDeclaration: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptQualifiedExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptQueryExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptQueryVariable: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptRangeQualifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptRealDivExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptRealLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptRealType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptRedefinedAttributeValue: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptReferencedSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptRemark: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptRemarkReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptRepeatStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptReturnStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptRuleRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSchemaDefinition: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusEnvironmentSchema'! acceptSchemaInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSchemaInstanceRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSchemaRef: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSchemaReference: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSdaiInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSelectType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptSelfIdentifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSessionInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptSetInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSetType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptSimpleRecord: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSimpleType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptSimpleUnaryExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptSkipStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptSplitmarkStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusStatementsSchema'! acceptStatement: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptStatementsContainer: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptStringLiteral: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptStringType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSubEntityRefExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSupertypeConstraint: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptSupertypeExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptTailRemark: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptTrueConstant: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptTypedExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptUnaryExpression: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptUniquenessRule: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptUniquenessRuleAttributeIdentifier: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptUnknownConstant: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptUsedSchema: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptUserDefinedApplicationInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusPopulationSchema'! acceptUserDefinedHeaderInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusAggregateDataSchema'! acceptVariableSizeAggregationInstance: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptVariableSizeAggregationType: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema'! acceptWhereRule: e "my subclasses have to redefine it" ! ! !PlatypusAbstractVisitor methodsFor: 'platypus-generated-visitingPlatypusExpressionsSchema'! acceptXorExpression: e "my subclasses have to redefine it" ! ! !PlatypusCoreAbstractVisitor class methodsFor: 'instance creation' stamp: 'apl 5/26/2005 09:17'! accept: e ^ e accept: self new.! ! !PlatypusCoreAbstractVisitor class methodsFor: 'instance creation' stamp: 'apl 4/1/2006 16:00'! visitPath: aStack ^self new visitPath: aStack ! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 5/25/2005 21:58'! acceptSelectorsMap ^ acceptSelectorsMap! ! !PlatypusCoreAbstractVisitor methodsFor: 'visit generic' stamp: 'AlainPlantec 6/13/2012 23:21'! acceptTry: anObject self asVisitPathTop: anObject while: [^ self performAcceptFor: anObject]! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/13/2012 12:16'! addVisitorError: aVisitorError (self visitErrors size < 30) ifTrue: [ (self visitErrors noneSatisfy: [:err | err message = aVisitorError message and: [err path = aVisitorError path]]) ifFalse: [^ false ]. visitErrors add: aVisitorError. ^ true]. ^ false! ! !PlatypusCoreAbstractVisitor methodsFor: 'visit generic' stamp: 'AlainPlantec 5/19/2012 23:07'! asVisitPathTop: anObjectOrCollection while: aBlock anObjectOrCollection ifNil: [^self ]. self pushIntoVisitPath: anObjectOrCollection. aBlock ensure: [self popFromVisitPath]! ! !PlatypusCoreAbstractVisitor methodsFor: 'copying' stamp: 'apl 4/13/2006 18:16'! copy | cpy | cpy := super copy. cpy forget. ^ cpy! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:58'! declareWithError: e objectsWithErrorIndex add: e ! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:58'! declareWithoutError: e objectsWithErrorIndex remove: e ifAbsent: [] ! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:59'! declaredWithError: e ^ objectsWithErrorIndex includes: e ! ! !PlatypusCoreAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:46'! destroy super destroy. logClient ifNotNil: [logClient := nil]. visitPath := nil. visitErrors do: [:e | e destroy]. visitErrors := nil. acceptSelectorsMap := nil! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 2/17/2006 18:45'! errors ^ self visitErrors ! ! !PlatypusCoreAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 6/10/2005 11:27'! forget self initializeVisitErrors. self initializeObjectsWithErrorIndex! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'apl 5/25/2005 21:58'! haveError ^ visitErrors notEmpty! ! !PlatypusCoreAbstractVisitor methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/8/2012 20:23'! initialize | logClientClass | super initialize. logLevel := #NoLog. "logLevel := #debug." (logClientClass := Smalltalk at: #LogClient ifAbsent: []) ifNotNil: [logClient := logClientClass getInstance: self class name]. visitPath := PlatypusStack new. visitErrors := OrderedCollection new. acceptSelectorsMap := SmallIdentityDictionary new. self initializeObjectsWithErrorIndex! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:59'! initializeObjectsWithErrorIndex objectsWithErrorIndex := IdentitySet new! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'apl 5/25/2005 21:58'! initializeVisitErrors visitErrors := OrderedCollection new. ! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 5/25/2005 21:58'! logClient ^ logClient! ! !PlatypusCoreAbstractVisitor methodsFor: 'logging' stamp: 'apl 2/4/2006 11:39'! logInfo: aMessage logLevel ~= #NoLog ifTrue: [self logClient ifNil: [Transcript show: Time now printString , ': ' , aMessage , '\' withCRs] ifNotNil: [self logClient info: aMessage asString]]! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 2/4/2006 11:38'! logLevel ^ logLevel! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 2/4/2006 11:39'! logLevel: aSymbol logLevel := aSymbol! ! !PlatypusCoreAbstractVisitor methodsFor: 'logging' stamp: 'apl 5/25/2005 21:58'! logPathAndInfo: aMessage | mess contexts | logLevel == #debug ifTrue: [mess := WriteStream on: String new. contexts := visitPath asArray select: [:p | p isCollection not and: [p isPltContextDefinition]]. contexts do: [:p | mess nextPutAll: p name] separatedBy: [mess nextPutAll: ' | ']. self logInfo: mess contents , ': ' , aMessage]! ! !PlatypusCoreAbstractVisitor methodsFor: 'visit generic' stamp: 'AlainPlantec 5/8/2012 20:15'! lookUpAndCacheAcceptSelectorOfClass: aClass | currClass str | currClass := aClass. str := WriteStream on: (String new: 50). [currClass ~~ Object] whileTrue: [ | n selector | n := currClass name. str nextPutAll: 'accept'. 4 to: n size do: [:p | str nextPut: (n at: p) ]. str nextPut: $:. selector := str contents asSymbol. (self class whichClassIncludesSelector: selector) ifNotNil: [:cls | self acceptSelectorsMap at: cls put: selector. ^ selector]. str reset. currClass := currClass superclass]. ^ self error: 'unimplemented accept method for class ''' , aClass name , ''''! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'apl 6/10/2005 11:26'! objectsWithErrorIndex ^ objectsWithErrorIndex ! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:18'! pathTo: aDictionaryInstance ^ aDictionaryInstance inclusiveOwnerPath ! ! !PlatypusCoreAbstractVisitor methodsFor: 'visit generic' stamp: 'AlainPlantec 5/19/2012 23:10'! performAcceptFor: anObject | selector | selector := acceptSelectorsMap at: anObject class ifAbsent: [self lookUpAndCacheAcceptSelectorOfClass: anObject class]. ^ self perform: selector with: anObject! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 09:09'! popFromVisitPath ^ visitPath pop ! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 09:09'! pushIntoVisitPath: anObject visitPath push: anObject ! ! !PlatypusCoreAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:04'! registerError: aVisitorError (self addVisitorError: aVisitorError) ifTrue: [ aVisitorError path last inclusiveOwnerPath do: [:p | p addError: aVisitorError]]! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 5/25/2005 21:58'! visitContexts: aCollection aCollection do: [:el | self pushIntoVisitPath: el]! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/24/2012 00:18'! visitErrors ^ visitErrors! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 4/1/2006 16:00'! visitPath: aStack visitPath := aStack! ! !PlatypusCoreAbstractVisitor methodsFor: 'accessing' stamp: 'apl 5/25/2005 21:58'! visitedInstances | | ^ visitPath asArray! ! !PlatypusExpressInterpretor methodsFor: 'visit aggregate data schema' stamp: 'apl 3/17/2006 13:45'! acceptAggregateData: e | interpreted contents domain var | interpreted := e class new stepInitialize. contents := OrderedCollection new. domain := e computedDomain. var := PltAnonymousVariable domain: domain. e contents do: [:i | i acceptTry: self. contents add: self popVal]. interpreted contents: contents. ^ self pushVar: var val: interpreted! ! !PlatypusExpressInterpretor methodsFor: 'visit aggregate data schema' stamp: 'apl 3/1/2004 22:15'! acceptAggregateInitializer: e | interpreted contents el domain var | interpreted := PltAggregateInitializer new. contents := OrderedCollection new. domain := e computedDomain. var := PltAnonymousVariable domain: domain. e contents do: [:i | el := PltAggregateInitializerElement new. i val acceptTry: self. el val: self popVal. i repetition ifNotNil: [i repetition acceptTry: self. el repetition: self popVal]. contents add: el]. interpreted contents: contents. ^ self pushVar: var val: interpreted ! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/4/2012 10:05'! acceptAlgorithmDeclaration: e self asContext: e while: [self acceptStatementsContainer: e]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 12/17/2003 23:06'! acceptAliasStatement: e ^ self asContext: e while: [e statements do: [:stmt | stmt acceptTry: self]]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/27/2006 17:19'! acceptAliasStatementVariable: e | aliasStackElement | (aliasStackElement := self localData: e) ifNil: [e referenced acceptTry: self. aliasStackElement := self top. self localData: e value: aliasStackElement] ifNotNil: [self push: aliasStackElement]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:10'! acceptAndExpression: e | right left | e leftExpr acceptTry: self. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [left isPltLogicalLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. left ifFalseOrUnknownConstant: [^ self pushVal: left]. e rightExpr acceptTry: self. right := self popVal. ^ self pushVal: right]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'AlainPlantec 12/2/2013 12:05'! acceptAssignable: e e head acceptTry: self. self doQualifiers: e qualifiers! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'AlainPlantec 10/7/2010 13:46'! acceptAssignmentStatement: e | rightValue currStackElement | e rightExpr acceptTry: self. rightValue := self popVal. e left acceptTry: self. currStackElement := self pop. currStackElement assign: rightValue! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 3/31/2006 09:11'! acceptAttributeIdentifier: e self asValOfSelf: e selfInstance while: [self acceptIdentifier: e]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 12/20/2005 10:03'! acceptAttributeQualifier: e | stackElement | stackElement := self pop. stackElement pushAttribute: e attributeName! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 7/21/2004 14:42'! acceptAttributeReference: e | | self acceptTry: e ref. ! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 2/23/2005 22:26'! acceptCaseAction: e | selector | selector := self popVal. (e labels anySatisfy: [:l | l acceptTry: self. (self popVal equal: selector) isPltTrueConstant]) ifTrue: [e action acceptTry: self. self pushVal: PltTrueConstant new] ifFalse: [self pushVal: PltFalseConstant new]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 2/23/2005 22:26'! acceptCaseStatement: e | selector | e selector acceptTry: self. selector := self pop. e caseActions detect: [:ca | self push: selector. ca acceptTry: self. self popVal isPltTrueConstant] ifNone: [e caseOtherwise ifNotNil: [e caseOtherwise acceptTry: self]]! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 3/16/2004 12:01'! acceptConstantDefinition: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 7/26/2004 14:14'! acceptDefinedType: e ! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 09:22'! acceptDerivedAttribute: e e assign acceptTry: self! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:17'! acceptDivExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [left isPltNumericLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: left / right]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 13:46'! acceptElementQualifier: e | idx stackElement | e index acceptTry: self. idx := self popVal. stackElement := self pop. stackElement pushIndex: idx val ! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/16/2004 13:04'! acceptEndSplitmarkStatement: e Transcript show: 'Writing ' withCRs , splitMarkStack last name , '\' withCRs. splitMarkStack last close. splitMarkStack removeLast! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/3/2013 11:04'! acceptEntityDefinition: e | stackElem externalRep rec dataIndex attrIdentOrValue | self asContext: e while: [externalRep := PltExternalRepresentation new. (rec := e emptyRecord) addRecordsToExternalRepresentation: externalRep. dataIndex := self currentContext dataIndex. rec definition referenced explicitAttributesWithIndexDo: [:ea :pos | attrIdentOrValue := dataIndex at: ea. rec at: pos put: attrIdentOrValue]. stackElem := PlatypusExpressInterpretorStackAppInst instance: externalRep interpretor: self. externalRep markAsComputed. self modelContents ifNotNil: [:mc | mc recordComputedInstances ifTrue: [mc add: externalRep]]. externalRep owningModel: self modelContents. self push: stackElem]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 3/18/2004 15:48'! acceptEntityInstancesSet: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 3/1/2004 22:15'! acceptEnumerationValue: e ^ self pushVar: (PltAnonymousVariable domain: e computedDomain) val: e ! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 13:46'! acceptEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. left := self popVal. ^ [self pushVal: (left equal: right)] on: MessageNotUnderstood do: [:ex | Transcript show: ex printString , String cr. self pushVal: PltMissingValue new]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 12/17/2003 08:36'! acceptEscapeStatement: e PlatypusExpressEscapeStatementException signal! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 3/31/2006 08:45'! acceptExplicitAttribute: e | stackElement | stackElement := self valOfSelf stackElementOfExplicitAttribute: e interpretor: self. stackElement ifNil: [^ PlatypusExpressInvalidAttributeException signal: 'attribute : ''' , e name , ''' is not computable']. self push: stackElement! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:17'! acceptExpoExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [left isPltNumericLiteral ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left expo: right)]! ! !PlatypusExpressInterpretor methodsFor: 'visit population schema' stamp: 'AlainPlantec 10/7/2010 13:46'! acceptGenericInstance: e | stackElem | stackElem := PlatypusExpressInterpretorStackAppInst instance: e interpretor: self. self push: stackElem! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 4/4/2010 11:15'! acceptGlobalRule: e | result | result := PltListInstance new. self asContext: e while: [e statements do: [:stmt | stmt acceptTry: self]. e whereRules do: [:wr | wr acceptTry: self. result add: self popVal]]. result adjustLowerAndUpperBounds. self pushVal: result! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:19'! acceptGreaterEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [left isPltOrderedLiteral ifTrue: [^ self pushVal: left >= right]. left isPltAggregateData ifTrue: [^ self pushVal: (left isSupersetOf: right interpretor: self)]. ^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:20'! acceptGreaterThanExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [(left isPltOrderedLiteral or: [left isPltAggregateData]) ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: left > right]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 5/4/2012 19:02'! acceptGroupQualifier: e | stackElement domain anonymousVar group instRef | stackElement := self pop. (instRef := stackElement val) ifMissing: [^ self pushVal: instRef] ifNotMissing: [instRef isPltGenericInstance ifFalse: [^ PlatypusExpressInvalidQualifierException signal: 'group qualifier ' , e groupName , ' can''t be interpreted from here ']. domain := instRef entityDefinitionOfGroupNamed: e groupName. domain ifNil: [^ PlatypusExpressInvalidGroupException signal: 'invalid group name ' , e groupName]. anonymousVar := PltAnonymousVariable domain: domain. group := instRef buildGroup: domain. self pushVar: anonymousVar val: group]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 4/8/2011 10:30'! acceptIdentifier: e | args | e ref canHaveArguments ifTrue: [ args := PlatypusExpressInterpretorCallArguments interpretor: self. self pushArgs: args. (e parameters notNil and: [e parameters notEmpty]) ifTrue: [e parameters do: [:param | self acceptTry: param. args addValue: self pop]]]. e ref acceptTry: self. e ref canHaveArguments ifTrue: [self popArgs]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 2/10/2004 16:29'! acceptIfStatement: e e selector acceptTry: self. self popVal ifTrueConstant: [e thenStatements do: [:stmt | stmt acceptTry: self]] ifFalseConstant: [e elseStatements ifNotNil: [e elseStatements do: [:stmt | stmt acceptTry: self]]] ! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 21:37'! acceptInExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [right isPltAggregateData ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. "(left computedDomain isCompatibleWith: right computedDomain elementType) ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']." ^ self pushVal: (right includesVal: left)]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/16/2004 12:13'! acceptIncrementControl: e | counter step last | counter := self data: e variable. step := self currentContext step. last := self currentContext last. counter val val: counter val val + step. step = 0 ifFalse: [^ step > 0 ifTrue: [counter val val <= last] ifFalse: [counter val val >= last]]. ^ false! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 1/4/2004 23:35'! acceptIncrementControlVariable: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 13:47'! acceptInstEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [ ^ self pushVal: (left instEqual: right)]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 13:47'! acceptInstNotEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [ ^ self pushVal: (left instNotEqual: right)]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 5/8/2012 17:54'! acceptInstanceConstructionExpression: e | stackElem right left externalRep | self acceptBinaryExpression: e. right := self pop. left := self pop. externalRep := PltExternalRepresentation new. left addRecordsToExternalRepresentation: externalRep. right addRecordsToExternalRepresentation: externalRep. stackElem := PlatypusExpressInterpretorStackAppInst instance: externalRep interpretor: self. externalRep markAsComputed. self modelContents ifNotNil: [ :mc | mc recordComputedInstances ifTrue: [mc add: externalRep]. "left instance isTemporary ifTrue: [mc remove: left instance]. right instance isTemporary ifTrue: [mc remove: right instance]"]. self push: stackElem. ! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 10/7/2010 15:49'! acceptIntegerBound: e | v var | v := PltIntegerLiteral val: e boundValue. var := PltAnonymousVariable domain: PltIntegerType new. self pushVar: var val: v! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 1/27/2004 17:06'! acceptInterval: e e expr acceptTry: self. ! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/17/2012 11:22'! acceptInverseAttribute: e | invertedAttrVal result var selfRef | selfRef := self valOfSelf. e minCardinality ifNil: [result := (self allInstancesOf: e invertedAttr ref owner) detect: [:d | invertedAttrVal := d stackElementOfExplicitAttribute: e invertedAttr ref interpretor: self. (invertedAttrVal val includesVal: selfRef) isPltTrueConstant] ifNone: [PltMissingValue new]] ifNotNil: [result := e duplicates ifTrue: [PltBagInstance new] ifFalse: [PltSetInstance new]. (self allInstancesOf: e invertedAttr ref owner) do: [:d | invertedAttrVal := d stackElementOfExplicitAttribute: e invertedAttr referenced interpretor: self. (invertedAttrVal val includesVal: selfRef) ifTrueConstant: [result add: d]]. result adjustLowerAndUpperBounds]. result ifNotMissing: [result isPltAggregateInstance ifTrue: [result := result asListInstance]]. var := PltAnonymousVariable domain: result computedDomain. self pushVar: var val: result. ^ result! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:20'! acceptLessEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [left isPltOrderedLiteral ifTrue: [^ self pushVal: left <= right]. left isPltAggregateData ifTrue: [^ self pushVal: (left isSubsetOf: right interpretor: self)]. ^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:20'! acceptLessThanExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [(left isPltOrderedLiteral or: [left isPltAggregateData]) ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: left < right]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 4/8/2011 10:48'! acceptLiteral: e ^ self pushVar: (PltAnonymousVariable domain: e computedDomain) val: e copy! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/4/2012 19:37'! acceptLocalVariable: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:18'! acceptMinusExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [(left isPltNumericLiteral or: [left isPltAggregateData]) ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left minus: right interpretor: self)]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 1/7/2004 15:07'! acceptMissingValue: e ^ self pushVal: e! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:18'! acceptModExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [left isPltNumericLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left mod: right)]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:18'! acceptMultExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [(left isPltNumericLiteral or: [left isPltAggregateData]) ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left mult: right interpretor: self)]! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 10:00'! acceptNativeAlgorithm: e | nativeCode | (nativeCode := e platypusInterpreterCode) ifNil: [Error signal: 'no platypus interpreter code']. ^ self acceptTry: nativeCode! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 09:22'! acceptNativeCode: e ^ PlatypusNativeCodeInterpretor new evaluate: e interpretor: self requestor: requestor! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 6/8/2007 15:01'! acceptNativeExpression: e e source acceptTry: self! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 2/17/2006 09:04'! acceptNativeStatement: e e source acceptTry: self! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:18'! acceptNegativeExpression: e | expr | e expr acceptTry: self. (expr := self popVal) ifMissing: [^ self pushVal: expr] ifNotMissing: [expr isPltNumericLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid argument']. ^ self pushVal: expr negated]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 15:50'! acceptNotEqualExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. left := self popVal. ^ [self pushVal: (left notEqual: right)] on: MessageNotUnderstood do: [:ex | Transcript show: ex printString, String cr. self pushVal: PltMissingValue new]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:10'! acceptNotExpression: e | expr | e expr acceptTry: self. (expr := self popVal) ifMissing: [^ self pushVal: expr] ifNotMissing: [expr isPltLogicalLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid argument']. ^ self pushVal: expr not]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/10/2004 17:45'! acceptNullStatement: e ^ self ! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:10'! acceptOrExpression: e | right left | e leftExpr acceptTry: self. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [left isPltLogicalLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. left ifTrueConstant: [^ self pushVal: left]. e rightExpr acceptTry: self. right := self popVal. ^ self pushVal: right]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/16/2004 13:03'! acceptOutputStatement: e "Transcript show: '#'." e output acceptTry: self. splitMarkStack last nextPutAll: self popVal asClearText! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 3/16/2004 12:25'! acceptParameterDefinition: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 3/31/2006 08:33'! acceptPlusExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [(left isPltNumericLiteral or: [left isPltStringLiteral or: [left isPltAggregateData]]) ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left plus: right interpretor: self)]! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 3/10/2004 18:09'! acceptPopulationDependentBound: e | | e boundValue acceptTry: self. ! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 5/25/2004 14:50'! acceptProcedureCallStatement: e e call acceptTry: self! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 5/4/2012 19:30'! acceptQualifiedExpression: e e head acceptTry: self. self doQualifiers: e qualifiers! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/22/2006 11:45'! acceptQueryExpression: e | resultVar resultVal | self asContext: e while: [[self currentContext atEnd] whileFalse: [self currentContext next. self pushVal: self currentContext current. self data: e variable value: self pop. e suchThat acceptTry: self. self popVal ifTrueConstant: [self currentContext keep] ifFalseConstant: [self currentContext dontKeep] ifUnknownConstant: [self currentContext dontKeep] ]. resultVal := self currentContext result]. resultVar := PltAnonymousVariable domain: resultVal computedDomain. self pushVar: resultVar val: resultVal! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 3/16/2004 12:06'! acceptQueryVariable: e self push: (self data: e)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 15:50'! acceptRangeQualifier: e | idx1 idx2 stackElement | e index1 acceptTry: self. idx1 := self popVal. e index2 acceptTry: self. idx2 := self popVal. stackElement := self pop. stackElement pushRange: (idx1 val to: idx2 val)! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:18'! acceptRealDivExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: left] ifNotMissing: [left isPltNumericLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left div: right)]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 2/21/2006 08:48'! acceptRepeatStatement: e | while untilControl skip | self asContext: e while: [ untilControl := e untilControl. skip := false. [e incrControl ifNil: [while := true] ifNotNil: [while := e incrControl acceptTry: self]. while and: [e whileControl ifNil: [while := true] ifNotNil: [e whileControl acceptTry: self. while := self popVal isPltTrueConstant]]] whileTrue: [[e statements do: [:stmt | [skip ifFalse: [stmt acceptTry: self]] on: PlatypusExpressSkipStatementException do: [skip := true]]] on: PlatypusExpressEscapeStatementException do: [^ nil]. skip := false. untilControl ifNotNil: [untilControl acceptTry: self. self popVal isPltTrueConstant ifTrue: [^ nil]]]]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:25'! acceptReturnStatement: e e returned acceptTry: self. PlatypusExpressReturnStatementException signal! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 6/5/2004 10:36'! acceptSelfIdentifier: e | anonymousVar | anonymousVar := PltAnonymousVariable domain: self valOfSelf computedDomain. self pushVar: anonymousVar val: self valOfSelf! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 12/17/2003 08:39'! acceptSkipStatement: e PlatypusExpressSkipStatementException signal! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'AlainPlantec 4/26/2012 09:27'! acceptSplitmarkStatement: e | contents fileName oldStream | contents := ''. e filename acceptTry: self. fileName := self popVal val. e append ifTrue: [(self isAFileNamed: fileName) ifTrue: [oldStream := self outputFileStreamNamed: fileName. [contents := oldStream contentsOfEntireFile] ensure: [oldStream close]]]. splitMarkStack add: (self outputFileStreamNamed: fileName). e append ifTrue: [splitMarkStack last nextPutAll: contents]! ! !PlatypusExpressInterpretor methodsFor: 'visit statements schema' stamp: 'apl 6/16/2004 19:32'! acceptStatementsContainer: e [e statements do: [:stmt | stmt acceptTry: self]] on: PlatypusExpressReturnStatementException do: []! ! !PlatypusExpressInterpretor methodsFor: 'visit generic' stamp: 'apl 3/28/2006 09:13'! acceptTry: e e referenced ifNil: [^ PlatypusExpressUnresolvedIdentifierException signal: 'Unresolved symbol: ' , e name]. debugger ifNotNil: [Transcript show: e prettyPrintedExpressCode , String cr. e isDebugged ifTrue: [debugger aboutToAccept: e]]. ^ super acceptTry: e! ! !PlatypusExpressInterpretor methodsFor: 'visit dictionary schema' stamp: 'apl 6/8/2004 10:40'! acceptWhereRule: e e whereValue acceptTry: self. self topVal ifTrueConstant: [Transcript show: e fullyQualifiedName , ': true\' withCRs] ifFalseConstant: [Transcript show: e fullyQualifiedName , ': false\' withCRs] ifUnknownConstant: [Transcript show: e fullyQualifiedName , ': unknown\' withCRs]! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:10'! acceptXorExpression: e | right left | self acceptBinaryExpression: e. right := self popVal. (left := self popVal) ifMissing: [^ self pushVal: PltUnknownConstant new] ifNotMissing: [left isPltLogicalLiteral ifFalse: [PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ self pushVal: (left xor: right)]! ! !PlatypusExpressInterpretor methodsFor: 'data accessing' stamp: 'AlainPlantec 5/16/2012 16:20'! allApplicationInstances ^ self applicationInstancesSelect: [:d | d notNil]! ! !PlatypusExpressInterpretor methodsFor: 'data accessing' stamp: 'AlainPlantec 5/4/2012 12:53'! allInstancesOf: anEntityDefinition ^ self applicationInstancesSelect: [:d | d computedDomain isSpecializationOf: anEntityDefinition]! ! !PlatypusExpressInterpretor methodsFor: 'data accessing' stamp: 'AlainPlantec 5/4/2012 18:17'! allPersistentApplicationInstances ^ self modelContents dataInstances ! ! !PlatypusExpressInterpretor methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/18/2012 13:18'! applicationInstancesSelect: aSelectionBlock | selected context schemaInstance models ref | selected := OrderedCollection new. contextsStack reverseDo: [:c | c applicationInstancesSelect: aSelectionBlock in: selected]. self modelContents ifNotNil: [:mc | selected addAll: (mc dataInstances select: aSelectionBlock)]. ^selected! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 09:35'! argsStackSize ^ argsStack size! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 09:36'! argsStackTop ^ argsStack top! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/27/2006 07:43'! asContext: contextInstance while: aBlock contextInstance pushContextInInterpretor: self. aBlock ensure: [self popContext]! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 12/20/2005 12:08'! asContextsStack: aStack while: aBlock | oldContexts | oldContexts := contextsStack. contextsStack := aStack. aBlock ensure: [contextsStack := oldContexts]! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 18:26'! asValOfSelf: anInstance while: aBlock | omc | omc := modelContentsAccessBlock. modelContentsAccessBlock := [anInstance owningModel]. selfStack push: anInstance interpretingContext. aBlock ensure: [ selfStack pop. modelContentsAccessBlock := omc]! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 6/15/2012 12:59'! attributeOrRule: anAttributeOrLocalRule instance: anEntityInstance | toBeEvaluated | toBeEvaluated := anAttributeOrLocalRule isPltWhereRule ifTrue: [anAttributeOrLocalRule whereValue] ifFalse: [anAttributeOrLocalRule]. ^ self expression: toBeEvaluated context: anAttributeOrLocalRule schemaDefinition instance: anEntityInstance ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/16/2004 12:25'! checksAssignments ^ checksAssignments! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/16/2004 15:40'! checksAssignments: trueOrFalse checksAssignments := trueOrFalse! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'apl 9/26/2006 11:38'! compute: anExpressionOrStatement [anExpressionOrStatement acceptTry: self] on: Error do: [:err | PlatypusExpressDebugger interpretor: self statementOrExpression: visitPath top. err signal]! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 6/15/2012 12:40'! compute: anArrayOfExpressionsOrStatements in: context to: receiver notifying: aRequestor ifFail: failBlock logged: isLogged | owners | context isPltSchemaInstance ifTrue: [owners := context schemataLinkedMetaData] ifFalse: [owners := context inclusiveOwnerPath]. self resolves: anArrayOfExpressionsOrStatements in: context to: receiver notifying: aRequestor owners: owners. modelContentsAccessBlock := [context schemaInstance interpreterScope]. (owners "reject: [:o | o isNil]") do: [:own | own pushContextInInterpretor: self]. (receiver isKindOf: PltGenericInstance) ifTrue: [ self asValOfSelf: receiver while: [anArrayOfExpressionsOrStatements do: [:r | self compute: r]]] ifFalse: [anArrayOfExpressionsOrStatements do: [:r | | schi | schi := r schemaInstance. modelContentsAccessBlock := [schi interpreterScope]. self compute: r]]. ^ stack size > 0 ifTrue: [self pop] ifFalse: [self]! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 12/20/2005 12:04'! contextsStack ^ contextsStack! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/18/2004 23:26'! currentContext ^contextsStack top! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/27/2006 18:03'! currentSourceHandler | tam | self contextsStack reverseDo: [:ctxt| (tam := ctxt contextInstance tamarisItemRef) ifNotNil: [^ tam]]. ^ nil ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/15/2005 11:32'! data: aData | found | contextsStack reverseDo: [:c | (found := c data: aData) ifNotNil: [^found]]. ^PlatypusExpressUnresolvedIdentifierException signal: 'Unresolved symbol: ' , aData name! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/15/2005 11:32'! data: aData value: aValue contextsStack reverseDo: [:c | (c includesData: aData) ifTrue: [^c data: aData value: aValue]]. ^self currentContext data: aData value: aValue! ! !PlatypusExpressInterpretor methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 18:20'! dataDo: aBlock contextsStack reverseDo: [:c | c dataDo: aBlock]. self modelContents dataInstances do: aBlock. ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/15/2005 11:32'! dataNamed: anIdent | found | contextsStack reverseDo: [:c | (found := c dataNamed: anIdent) ifNotNil: [^found]]. ^nil! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/15/2005 11:32'! dataNamed: anIdent value: aValue | found | contextsStack reverseDo: [:c | (found := c stackElementOfDataNamed: anIdent) ifNotNil: [c data: found value: aValue. ^true]]. ^false! ! !PlatypusExpressInterpretor methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 18:57'! dataSelect: aSelectionBlock | result | result := OrderedCollection new. contextsStack reverseDo: [:c | c dataSelect: aSelectionBlock in: result]. result addAll: (self modelContents dataInstances select: aSelectionBlock). ^ result ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 2/20/2006 18:06'! debugger: anExpressDebogger debugger := anExpressDebogger. ! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'AlainPlantec 5/4/2012 19:02'! declareConstant: e | varValue value | self pushVar: e val: e defaultValue. self localData: e value: (varValue := self pop). e initializer acceptTry: self. value := self valueFromDomain: e domain assignCompatibleWith: self popVal. varValue val: value copy! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'alain.plantec 12/18/2008 16:19'! declareEntityInstancesSet: e | instancesList | instancesList := PltListInstance new. instancesList contents: (self allInstancesOf: e entityRef). instancesList adjustLowerAndUpperBounds. self pushVar: e val: instancesList. self localData: e value: self pop ! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'AlainPlantec 5/4/2012 19:59'! declareLocalVariable: e | domain value varValue | self pushVar: e val: e defaultValue. self localData: e value: (varValue := self top). e initializer ifNotNil: [e initializer acceptTry: self. domain := e domain. value := self valueFromDomain: domain assignCompatibleWith: self popVal. varValue val: value copy]. self pop! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'apl 2/22/2006 14:58'! declareParameter: e self pushVar: e val: e defaultValue. self localData: e value: (self pop)! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'apl 3/16/2004 12:17'! declareQueryVariable: e self pushVar: e val: e defaultValue. self localData: e value: self pop! ! !PlatypusExpressInterpretor methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:48'! destroy super destroy. stack destroy. stack := nil. contextsStack destroy. contextsStack := nil! ! !PlatypusExpressInterpretor methodsFor: 'visit expressions schema' stamp: 'apl 3/27/2006 17:30'! doQualifiers: quals | first | quals isEmpty ifFalse: [(first := quals first) isPltAttributeQualifier ifTrue: [self asValOfSelf: self top val while: [self acceptTry: first. self doQualifiers: quals allButFirst]] ifFalse: [self acceptTry: first. self doQualifiers: quals allButFirst]]! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'apl 5/27/2004 10:01'! evaluate: textOrStream in: context to: receiver notifying: aRequestor ifFail: failBlock ^ self evaluate: textOrStream in: context to: receiver notifying: aRequestor ifFail: failBlock logged: false! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 1/21/2011 09:32'! evaluate: textOrStream in: context to: receiver notifying: aRequestor ifFail: failBlock logged: isLogged ^ (self parse: textOrStream in: context notifying: aRequestor ifFail: failBlock) ifNotNil: [:result | self compute: result in: context to: receiver notifying: aRequestor ifFail: failBlock logged: isLogged]! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'apl 3/27/2006 07:45'! expression: anExpression context: aContext instance: anEntityInstance requestor := nil. aContext ifNotNil: [aContext pushContextInInterpretor: self]. self asValOfSelf: anEntityInstance while: [self compute: anExpression. ^ self pop val]! ! !PlatypusExpressInterpretor methodsFor: 'initialize/release' stamp: 'apl 3/31/2006 09:29'! initialize super initialize. stack := PlatypusStack new. contextsStack := PlatypusStack new. selfStack := PlatypusStack new. argsStack := PlatypusStack new. splitMarkStack := OrderedCollection new. checksAssignments := true! ! !PlatypusExpressInterpretor methodsFor: 'result output' stamp: 'AlainPlantec 12/6/2013 00:39'! isAFileNamed: aName ^ ( FileLocator workingDirectory / aName) exists! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/16/2004 11:41'! localData: aData ^ self currentContext data: aData! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 1/31/2006 12:27'! localData: aData value: aValue ^ self currentContext data: aData value: aValue! ! !PlatypusExpressInterpretor methodsFor: 'visit generic' stamp: 'apl 4/22/2006 23:11'! lookUpAndCacheAcceptSelectorOfClass: aClass | currClass selector str | currClass := aClass. str := WriteStream on: (String new:50). [currClass ~~ Object] whileTrue: [str nextPutAll: 'accept'. str next: currClass name size - 3 putAll: currClass name startingAt: 4. str nextPut: $:. selector := str contents asSymbol. (self class includesSelector: selector) ifTrue: [self acceptSelectorsMap at: aClass put: selector. ^ selector]. str reset. currClass := currClass superclass]. ^ self error: 'unimplemented accept method for class ''' , aClass name , ''''! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 4/20/2006 10:03'! lookUpIdentifierBN: aName | found | contextsStack reverseDo: [:ctx | (found := ctx lookUpIdentifierBN: aName) ifNotNil: [^ found]]. ^ PltPlatypusExpressPrimitivesSchemaInstance lookUpIdentifierBN: aName! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 6/13/2012 23:48'! lookUpIdentifierBN: aName fromContext: aContext | found | aContext inclusiveOwnerPath reverseDo: [:own | (found := own lookUpIdentifierBN: aName) ifNotNil: [^ found]]. ^ nil! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 4/20/2006 10:03'! lookUpNamedTypeBN: aName | found | contextsStack reverseDo: [:ctx | (found := ctx lookUpNamedTypeBN: aName) ifNotNil: [^ found]]. ^ PltPlatypusExpressPrimitivesSchemaInstance lookUpNamedTypeBN: aName! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 18:24'! modelContents ^ modelContentsAccessBlock value ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 18:36'! modelContents: aModelContents modelContentsAccessBlock := [aModelContents]! ! !PlatypusExpressInterpretor methodsFor: 'result output' stamp: 'AlainPlantec 12/6/2013 00:39'! outputFileStreamNamed: aName | filename dir | (dir := ( FileLocator workingDirectory / self resultOutputDirectoryName) ) ensureDirectory. (filename := dir / aName) ensureFile. ^ filename writeStream! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 6/15/2012 11:47'! parse: textOrStream in: context notifying: aRequestor ifFail: failBlock | position descr repl contents start result stream | stream := textOrStream isStream ifTrue: [textOrStream] ifFalse: [ReadStream on: textOrStream]. contents := stream upToEnd copy trimBoth. stream := ReadStream on: contents. start := (contents last = $; or: [contents size > 2 and: [(contents copyFrom: contents size - 2 to: contents size) = '#*)']]) ifTrue: [PlatypusExpressParser startingStateForStatementsEntry] ifFalse: [PlatypusExpressParser startingStateForExpressionEntry]. result := [PlatypusExpressParser parseStream: stream startingAt: start owner: context] on: SmaCCParserError do: [:ex | position := ex tag position. descr := ex description. aRequestor notNil ifTrue: [aRequestor selectFrom: position to: position - 1. repl := Text string: descr , '->' attribute: TextEmphasis bold. aRequestor replaceSelectionWith: repl]. ex return: failBlock value. ^ nil]. result isCollection ifFalse: [result := Array with: result]. result do: [:r | r owner: context]. ^ result ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/18/2004 23:15'! pop ^ stack pop. ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 09:32'! popArgs ^ argsStack pop! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'apl 3/27/2006 07:43'! popContext contextsStack pop! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:50'! popVal | elem | elem := self pop. ^ elem val! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'apl 3/16/2004 13:07'! prepareIncrControl: e | counter step last | e first acceptTry: self. counter := self pop deepCopy. e step ifNil: [step := 1] ifNotNil: [e step acceptTry: self. step := self popVal val]. counter val val: counter val val - step. e last acceptTry: self. last := self popVal val. self localData: e variable value: counter. self currentContext step: step. self currentContext last: last! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/18/2004 23:15'! push: aStackElement | | stack push: aStackElement ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 09:31'! pushArgs: aStackCallArgumentsElement argsStack push: aStackCallArgumentsElement! ! !PlatypusExpressInterpretor methodsFor: 'context initializing' stamp: 'apl 3/27/2006 13:31'! pushContext: anInterpretorContext contextsStack push: anInterpretorContext. anInterpretorContext initializeContextInInterpretor: self! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 1/2/2004 19:02'! pushVal: anObject self push: (PlatypusExpressInterpretorStackVar val: anObject interpretor: self)! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 1/28/2006 13:38'! pushVar: aVariable val: aValue self push: (PlatypusExpressInterpretorStackVar var: aVariable val: aValue interpretor: self)! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 2/23/2006 15:31'! removeFromStackAt: pos stack removeAt: pos! ! !PlatypusExpressInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 5/23/2012 15:58'! resolves: anArrayOfExpressionsOrStatements in: context to: receiver notifying: aRequestor owners: owners | resolutionOwners checker | requestor := aRequestor. resolutionOwners := owners copy. (receiver isKindOf: PltGenericInstance) ifTrue: [resolutionOwners addAll: receiver definitionInclusiveOwnerPath]. checker := PlatypusExpressResolver new visitContexts: resolutionOwners. anArrayOfExpressionsOrStatements do: [:r | [checker checks: r] on: PlatypusVisitorError do: [:err | self showInterpreterErrorOnSource: err. err signal]]. ^ anArrayOfExpressionsOrStatements ! ! !PlatypusExpressInterpretor methodsFor: 'result output' stamp: 'apl 6/3/2004 17:33'! resultOutputDirectoryName ^ 'Platypus-output'! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 1/30/2006 13:57'! return: anObject self pushVal: anObject ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 12:35'! schemaInstance ^ contextsStack first contextInstance schemaInstance! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 2/20/2006 22:57'! selfStack ^ selfStack ! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 09:14'! selfStackSize ^ selfStack size! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 12/14/2003 14:46'! stack ^ stack! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 2/23/2006 11:40'! stackAt: aPos ^ stack at: aPos! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 2/23/2006 11:40'! stackSize ^ stack size! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 6/18/2004 23:17'! top ^ self stack top! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 12/18/2003 09:42'! topVal ^ self top val! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'apl 3/31/2006 10:25'! valOfSelf ^ selfStack top! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 19:57'! valueFromDomain: aDomain assignCompatibleWith: aValue ^ aValue ifMissing: [aValue] ifNotMissing: [[aDomain assignableValueFrom: aValue interpretor: self] on: Error do: [ PlatypusExpressIncompatibleDomainInAssignmentException signal: 'domain : ' , aDomain prettyPrintedExpressCode , '; value : ' , aValue prettyPrintedExpressCode]]! ! !PlatypusExpressInterpretor methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:50'! valueOf: anIdent | v result | result := (v := self dataNamed: anIdent) ifNil: [PltMissingValue new] ifNotNil: [v val]. ^ result ifNil: [PltMissingValue new]! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:44'! acceptAggregateInitializer: e self flag: 'Not implemented'. e contents isEmpty ifTrue: [self nextPutAll: ' Array new'] ifFalse: [ self nextPutAll: ' ( PlatypusCoreAggregateInitializer collectionFrom: ((OrderedCollection new) '. e contents do: [:c | self nextPutAll: 'add: '. self acceptTry: c] separatedBy: [self nextPutAll: '; ']. self nextPutAll: '; yourself) ) ']! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:45'! acceptAggregateInitializerElement: e | vname | self flag: 'Not implemented'. vname := self namesBuilder uniqueBlockVarName: 'p' owner: e. e repetition ifNil: [self nextPutAll: '('. self acceptTry: e val. self nextPutAll: ')'] ifNotNil: [self nextPutAll: '[((1 to: ('. self acceptTry: e repetition. self nextPutAll: ')) collect: [:' , vname , '| '. self acceptTry: e val. self nextPutAll: '])]']. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit statements schema' stamp: 'AlainPlantec 12/7/2012 11:43'! acceptAliasStatementVariable: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:45'! acceptAndExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' and '. self acceptTry: e rightExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit statements schema' stamp: 'AlainPlantec 12/7/2012 11:43'! acceptAssignable: e e qualifiers ifEmpty: [self nextPutAll: '( '. e head acceptTry: self. self nextPutAll: ') '] ifNotEmpty: [:quals | quals do: [:q | self nextPutAll: '( '. q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e head acceptTry: self. e qualifiers do: [:q | self acceptTry: q. self nextPutAll: ') ']]! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:45'! acceptAttributeQualifier: e | contextvn selector tmpAttr | self flag: 'Not implemented'. contextvn := (self namesBuilder contextArgNameFromQualifier: e) ifNil: [' (self class context) ']. tmpAttr := PltExplicitAttribute new name: e attributeName. selector := tmpAttr getSelectorWithContextArgFromNamesBuilder: self namesBuilder. self nextPutAll: selector , ' ' , contextvn! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptBinaryExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' ', e pltOperator, ' '. self acceptTry: e rightExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:42'! acceptConstantDefinition: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:41'! acceptDerivedAttribute: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptEConstant: e self nextPutAll: ' 2.71828 ' ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:46'! acceptElementQualifier: e self flag: 'Not implemented'. self nextPutAll: ' pltAt: '. self acceptTry: e index! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptEntityInstanceConstructor: e self error: 'deprecated'! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptEntityInstancesSet: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:46'! acceptEnumerationValue: e self nextPutAll: e element! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:41'! acceptExplicitAttribute: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:47'! acceptFalseConstant: e ^ self nextPutAll: 'False'! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:47'! acceptGroupQualifier: e | grpname grpref | self flag: 'Not implemented'. grpref := self schemaInstance lookUpNamedTypeBN: e groupName. grpname := grpref generatedClassName. self nextPutAll: 'asPlatypusComplexInstance \ #' , grpname , ') pltAsObject ' ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptIdentifier: e e referenced isPltEntityDefinition ifTrue: [self nextPutAll: '(' , e referenced generatedClassName , ' new'. (e parameters notNil and: [e parameters notEmpty]) ifTrue: [self nextPutAll: ' ', (self namesBuilder localFromValuesMethodNameFromEntity: e referenced), ' ((OrderedCollection new)'. e parameters do: [:p | self nextPutAll: ' add: '. self acceptTry: p] separatedBy: [self nextPutAll: ';']. self nextPutAll: ' ; yourself); yourself']. self nextPutAll: ')'] ifFalse: [e referenced isPltAlgorithmDeclaration ifTrue: [(e parameters isNil or: [e parameters isEmpty]) ifTrue: [self nextPutAll: '(' , e referenced generatedClassName , ' invoke) '] ifFalse: [self nextPutAll: '(' , e referenced generatedClassName , ' invokeFromValues: ((OrderedCollection new)'. e parameters do: [:p | self nextPutAll: ' add: '. self acceptTry: p] separatedBy: [self nextPutAll: ';']. self nextPutAll: ' ; yourself))']] ifFalse: [self acceptTry: e referenced]]! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:48'! acceptInExpression: e self flag: 'Not implemented'. self nextPutAll: ' ( '. self acceptTry: e rightExpr. self nextPutAll: ' includes: '. self acceptTry: e leftExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit statements schema' stamp: 'AlainPlantec 12/7/2012 11:44'! acceptIncrementControlVariable: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:48'! acceptInstanceConstructionExpression: e self flag: 'Not implemented'. self nextPutAll: ' ((PlatypusComplexInstance fromRecords: ( (OrderedCollection new) add: '. self acceptTry: e leftExpr. self nextPutAll: '; add: '. self acceptTry: e rightExpr. self nextPutAll: '; yourself)) pltAsObject )'! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptInterval: e self acceptTry: e expr. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:42'! acceptInverseAttribute: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:48'! acceptLikeExpression: e self flag: 'Not implemented'. self nextPutAll: ' ( '. self acceptTry: e rightExpr. self nextPutAll: ' match: '. self acceptTry: e leftExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptLiteral: e ^ self nextPutAll: e val printString! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:42'! acceptLocalVariable: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:48'! acceptMissingValue: e self nextPutAll: 'null'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptNativeAlgorithm: e self subclassResponsibility ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:48'! acceptNativeCode: e | stmt | self flag: 'Not implemented'. self nextPutAllCr: '"---------- native statement ---------- "'. stmt := e code trimBoth. (stmt endsWith: '.') ifFalse: [stmt := stmt , '.']. self nextPutAllCr: stmt! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:49'! acceptNegativeExpression: e self nextPutAll: '( ('. self acceptTry: e expr. self nextPutAll: ') * -1) '. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:49'! acceptNotExpression: e self nextPutAll: '( Not ('. self acceptTry: e expr. self nextPutAll: ') ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:49'! acceptOrExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' OR '. self acceptTry: e rightExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/7/2012 11:42'! acceptParameterDefinition: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptPiConstant: e self nextPutAll: ' 3.14159 '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:49'! acceptPositiveExpression: e self flag: 'Not implemented'. self nextPutAll: '( ('. self acceptTry: e expr. self nextPutAll: ') ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:50'! acceptQualifiedExpression: e self flag: 'Not implemented'. e qualifiers do: [:q | self nextPutAll: '( '. q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e head acceptTry: self. e qualifiers do: [:q | self acceptTry: q. self nextPutAll: ') ']! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:50'! acceptQueryExpression: e self flag: 'Not implemented'. self nextPutAll: '('. self acceptTry: e aggregateSource. e aggregateSource computedDomain isPltArrayType ifTrue: [self nextPutAll: ' collect: [ :'. self acceptTry: e variable. self nextPutAll: ' | ('. self acceptTry: e suchThat. self nextPutAll: ' ) ifTrue: [ '. self acceptTry: e variable. self nextPutAll: ' ] ifFalse: [ nil ]'] ifFalse: [self nextPutAll: ' select: [ :'. self acceptTry: e variable. self nextPutAll: ' | '. self acceptTry: e suchThat]. self nextPutAll: '])'! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 12:07'! acceptQueryVariable: e | vn | self flag: 'Not implemented'. vn := self namesBuilder uniqueBlockVarName: e variableId owner: e. self nextPutAll: vn, ' '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 12:07'! acceptRangeQualifier: e self flag: 'Not implemented'. self nextPutAll: ' pltCopyFrom: '. self acceptTry: e index1. self nextPutAll: ' to: '. self acceptTry: e index2! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 12:07'! acceptSelfIdentifier: e self flag: 'Not implemented'. receiverName ifNil: [self nextPutAll: ' self '] ifNotNil: [self nextPutAll: receiverName, ' ']! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptStringLiteral: e self nextPutAll: (self unshunkedString: e val) printString! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 12:08'! acceptTrueConstant: e ^ self nextPutAll: 'True'! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 11:38'! acceptUnknownConstant: e ^ self acceptLiteral: e! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/7/2012 12:08'! acceptXorExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' XOR '. self acceptTry: e rightExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2AdaTranslater methodsFor: 'accessing' stamp: 'AlainPlantec 12/7/2012 12:49'! translate: a self halt. ^super translate: a! ! !PlatypusExpressExpression2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:04'! expressionTranslaterClassName ^ #PlatypusExpressExpression2PharoTranslater! ! !PlatypusExpressExpression2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:03'! statementTranslaterClassName ^ #PlatypusExpressStatement2PharoTranslater! ! !PlatypusExpressExpression2PharoTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 7/14/2011 16:53'! acceptNativeAlgorithm: e | code | (code := e pharoCode) ifNil: [code := e platypusInterpreterCode. code ifNil: [Error signal: 'no pharo code in native algorithm'] ifNotNil: [Transcript show: 'Platypus: Warning: ' , self class name , '>>acceptNativeAlgorithm: "no pharo code, taking platypus interpreter code instead"' withCRs. Transcript show: e asClearText withCRs]]. ^ code acceptTry: self! ! !PlatypusExpressExpression2SmalltalkTranslater class methodsFor: 'instance creation' stamp: 'apl 2/28/2006 10:34'! receiverName: aNameForReceiver accept: aMetaData fromTranslater: aTranslater (self new receiverName: aNameForReceiver fromTranslater: aTranslater) acceptTry: aMetaData! ! !PlatypusExpressExpression2SmalltalkTranslater class methodsFor: 'instance creation' stamp: 'apl 12/5/2006 17:39'! receiverName: aNameForReceiver accept: aMetaData fromTranslater: aTranslater resultStream: aStream | translater | (translater := self new receiverName: aNameForReceiver fromTranslater: aTranslater resultStream: aStream) acceptTry: aMetaData. ^ translater! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 20:05'! acceptAggregateInitializer: e e contents isEmpty ifTrue: [self nextPutAll: ' Array new'] ifFalse: [ self nextPutAll: ' ( PlatypusCoreAggregateInitializer collectionFrom: ((OrderedCollection new) '. e contents do: [:c | self nextPutAll: 'add: '. self acceptTry: c] separatedBy: [self nextPutAll: '; ']. self nextPutAll: '; yourself) ) ']! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 20:01'! acceptAggregateInitializerElement: e | vname | vname := self namesBuilder uniqueBlockVarName: 'p' owner: e. e repetition ifNil: [self nextPutAll: '('. self acceptTry: e val. self nextPutAll: ')'] ifNotNil: [self nextPutAll: '[((1 to: ('. self acceptTry: e repetition. self nextPutAll: ')) collect: [:' , vname , '| '. self acceptTry: e val. self nextPutAll: '])]']. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/27/2006 18:37'! acceptAliasStatementVariable: e | vn | vn := self namesBuilder uniqueBlockVarName: (self namesBuilder normalizedNameFrom: e aliasIdent first: false) owner: e. self nextPutAll: vn , ' '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/4/2005 13:47'! acceptAndExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' and: ['. self acceptTry: e rightExpr. self nextPutAll: ' ]) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 6/29/2007 20:00'! acceptAssignable: e e qualifiers ifEmpty: [self nextPutAll: '( '. e head acceptTry: self. "self acceptTry: PltSelfIdentifier new. self nextPutAll: (self namesBuilder normalizedVarNameFrom: e head name)." self nextPutAll: ') '] ifNotEmpty: [:quals | quals do: [:q | self nextPutAll: '( '. q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e head acceptTry: self. e qualifiers do: [:q | self acceptTry: q. self nextPutAll: ') ']]! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 5/30/2005 00:00'! acceptAttributeQualifier: e | contextvn selector tmpAttr | contextvn := (self namesBuilder contextArgNameFromQualifier: e) ifNil: [' (self class context) ']. tmpAttr := PltExplicitAttribute new name: e attributeName. selector := tmpAttr getSelectorWithContextArgFromNamesBuilder: self namesBuilder. self nextPutAll: selector , ' ' , contextvn! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/4/2005 12:28'! acceptBinaryExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' ', e pltOperator, ' '. self acceptTry: e rightExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 10:52'! acceptDerivedAttribute: e | contextvn | contextvn := self namesBuilder contextArgNameFromAttribute: e. self nextPutAll: '( '. self acceptTry: PltSelfIdentifier new. self nextPutAll: (e getSelectorWithContextArgFromNamesBuilder: self namesBuilder) , ' ' , contextvn , ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/11/2005 23:44'! acceptEConstant: e self nextPutAll: ' 2.71828 ' ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/3/2005 11:44'! acceptElementQualifier: e self nextPutAll: ' pltAt: '. self acceptTry: e index! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 00:36'! acceptEntityInstanceConstructor: e self error: 'deprecated'! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 11/30/2011 14:06'! acceptEntityInstancesSet: e self nextPutAll: '( ', e name, ' )'. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/1/2006 23:37'! acceptEnumerationValue: e self nextPutAll: '#''' , e element asUppercase, ''''! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 10:52'! acceptExplicitAttribute: e self nextPutAll: '( '. self acceptTry: PltSelfIdentifier new. self nextPutAll: (e getSelectorFromNamesBuilder: self namesBuilder) , ') '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2005 23:30'! acceptFalseConstant: e ^ self acceptLiteral:e! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 11:09'! acceptGroupQualifier: e | grpname grpref | grpref := self schemaInstance lookUpNamedTypeBN: e groupName. grpname := grpref generatedClassName. self nextPutAll: 'asPlatypusComplexInstance \ #' , grpname , ') pltAsObject ' ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 1/18/2007 11:12'! acceptIdentifier: e e referenced isPltEntityDefinition ifTrue: [self nextPutAll: '(' , e referenced generatedClassName , ' new'. (e parameters notNil and: [e parameters notEmpty]) ifTrue: [self nextPutAll: ' ', (self namesBuilder localFromValuesMethodNameFromEntity: e referenced), ' ((OrderedCollection new)'. e parameters do: [:p | self nextPutAll: ' add: '. self acceptTry: p] separatedBy: [self nextPutAll: ';']. self nextPutAll: ' ; yourself); yourself']. self nextPutAll: ')'] ifFalse: [e referenced isPltAlgorithmDeclaration ifTrue: [(e parameters isNil or: [e parameters isEmpty]) ifTrue: [self nextPutAll: '(' , e referenced generatedClassName , ' invoke) '] ifFalse: [self nextPutAll: '(' , e referenced generatedClassName , ' invokeFromValues: ((OrderedCollection new)'. e parameters do: [:p | self nextPutAll: ' add: '. self acceptTry: p] separatedBy: [self nextPutAll: ';']. self nextPutAll: ' ; yourself))']] ifFalse: [self acceptTry: e referenced]]! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/6/2005 22:28'! acceptInExpression: e self nextPutAll: ' ( '. self acceptTry: e rightExpr. self nextPutAll: ' includes: '. self acceptTry: e leftExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 5/13/2005 11:28'! acceptIncrementControlVariable: e | vn | vn := self namesBuilder uniqueBlockVarName: e variableId owner: e. self nextPutAll: vn! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/11/2005 22:41'! acceptInstanceConstructionExpression: e self nextPutAll: ' ((PlatypusComplexInstance fromRecords: ( (OrderedCollection new) add: '. self acceptTry: e leftExpr. self nextPutAll: '; add: '. self acceptTry: e rightExpr. self nextPutAll: '; yourself)) pltAsObject )'! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 00:26'! acceptInterval: e self acceptTry: e expr. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 10:52'! acceptInverseAttribute: e | contextvn | contextvn := self namesBuilder contextArgNameFromAttribute: e. self nextPutAll: '( '. self acceptTry: PltSelfIdentifier new. self nextPutAll: (e getSelectorWithContextArgFromNamesBuilder: self namesBuilder) , ' ' , contextvn , ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/4/2005 13:53'! acceptLikeExpression: e self nextPutAll: ' ( '. self acceptTry: e rightExpr. self nextPutAll: ' match: '. self acceptTry: e leftExpr. self nextPutAll: ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2005 23:51'! acceptLiteral: e ^ self nextPutAll: e val printString! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 10:52'! acceptLocalVariable: e self nextPutAll: '( '. self acceptTry: PltSelfIdentifier new. self nextPutAll: (self namesBuilder normalizedVarNameFrom: e name) , ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2005 23:30'! acceptMissingValue: e self nextPutAll: 'nil'. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/15/2007 16:19'! acceptNativeAlgorithm: e self subclassResponsibility ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 4/26/2012 10:50'! acceptNativeCode: e | stmt | self nextPutAllCr: '"---------- native statement ---------- "'. stmt := e code trimBoth. (stmt endsWith: '.') ifFalse: [stmt := stmt , '.']. self nextPutAllCr: stmt! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 00:29'! acceptNegativeExpression: e self nextPutAll: '( ('. self acceptTry: e expr. self nextPutAll: ') negated) '. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2006 15:33'! acceptNotExpression: e self nextPutAll: '( ('. self acceptTry: e expr. self nextPutAll: ') not) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/4/2005 13:47'! acceptOrExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' or: ['. self acceptTry: e rightExpr. self nextPutAll: ' ]) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 10:53'! acceptParameterDefinition: e self nextPutAll: '( '. self acceptTry: PltSelfIdentifier new. self nextPutAll: (self namesBuilder normalizedVarNameFrom: e name) , ' ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 00:39'! acceptPiConstant: e self nextPutAll: ' 3.14159 '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 00:42'! acceptPositiveExpression: e self nextPutAll: '( ('. self acceptTry: e expr. self nextPutAll: ') abs ) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 5/27/2005 10:10'! acceptQualifiedExpression: e e qualifiers do: [:q | self nextPutAll: '( '. q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e head acceptTry: self. e qualifiers do: [:q | self acceptTry: q. self nextPutAll: ') ']! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 14:21'! acceptQueryExpression: e self nextPutAll: '('. self acceptTry: e aggregateSource. e aggregateSource computedDomain isPltArrayType ifTrue: [self nextPutAll: ' collect: [ :'. self acceptTry: e variable. self nextPutAll: ' | ('. self acceptTry: e suchThat. self nextPutAll: ' ) ifTrue: [ '. self acceptTry: e variable. self nextPutAll: ' ] ifFalse: [ nil ]'] ifFalse: [self nextPutAll: ' select: [ :'. self acceptTry: e variable. self nextPutAll: ' | '. self acceptTry: e suchThat]. self nextPutAll: '])'! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 5/27/2005 10:21'! acceptQueryVariable: e | vn | vn := self namesBuilder uniqueBlockVarName: e variableId owner: e. self nextPutAll: vn, ' '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/12/2005 01:10'! acceptRangeQualifier: e self nextPutAll: ' pltCopyFrom: '. self acceptTry: e index1. self nextPutAll: ' to: '. self acceptTry: e index2! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 10:43'! acceptSelfIdentifier: e receiverName ifNil: [self nextPutAll: ' self '] ifNotNil: [self nextPutAll: receiverName, ' ']! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 23:30'! acceptStringLiteral: e self nextPutAll: (self unshunkedString: e val) printString! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2005 23:30'! acceptTrueConstant: e ^ self acceptLiteral: e! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/2/2005 23:30'! acceptUnknownConstant: e ^ self acceptLiteral: e! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 3/4/2005 13:49'! acceptXorExpression: e self nextPutAll: ' ( '. self acceptTry: e leftExpr. self nextPutAll: ' xor: ['. self acceptTry: e rightExpr. self nextPutAll: ' ]) '! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 3/15/2005 19:50'! namesBuilder ^ self requestor namesBuilder! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 2/28/2006 10:35'! receiverName: aNameForReceiver receiverName := aNameForReceiver. ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 2/14/2007 14:55'! receiverName: aNameForReceiver fromTranslater: aTranslater self receiverName: aNameForReceiver. self fromTranslater: aTranslater ! ! !PlatypusExpressExpression2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 2/14/2007 14:55'! receiverName: aNameForReceiver fromTranslater: aTranslater resultStream: aStream self receiverName: aNameForReceiver. self fromTranslater: aTranslater resultStream: aStream! ! !PlatypusExpressExpression2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:43'! expressionTranslaterClassName ^ #PlatypusExpressExpression2VWTranslater! ! !PlatypusExpressExpression2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:43'! statementTranslaterClassName ^ #PlatypusExpressStatement2VWTranslater! ! !PlatypusExpressExpression2VWTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/15/2007 16:20'! acceptNativeAlgorithm: e | code | (code := e visualWorksCode) ifNil: [code := e platypusInterpreterCode. code ifNil: [Error signal: 'no VisualWorks code in native algorithm'] ifNotNil: [Transcript show: 'Platypus: Warning: ' , self class name , '>>acceptNativeAlgorithm: "no VisualWorks code, taking platypus interpreter code instead"' withCRs. Transcript show: e asClearText withCRs]]. ^ code acceptTry: self! ! !PlatypusExpressStatement2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:04'! expressionTranslaterClassName ^ #PlatypusExpressExpression2PharoTranslater! ! !PlatypusExpressStatement2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:03'! statementTranslaterClassName ^ #PlatypusExpressStatement2PharoTranslater! ! !PlatypusExpressStatement2PharoTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 7/14/2011 16:55'! acceptNativeAlgorithm: e | code | (code := e pharoCode) ifNil: [code := e platypusInterpreterCode. code ifNil: [Error signal: 'no pharo code in native algorithm'] ifNotNil: [Transcript show: 'Platypus: Warning: ' , self class name , '>>acceptNativeAlgorithm: "no pharo code, taking platypus interpreter code instead"' withCRs , e asClearText withCRs]]. ^ code acceptTry: self! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 6/29/2007 20:44'! acceptAliasStatement: e self nextPutAll: '(PlatypusCoreAliasStatement alias: ('. self expressionTranslaterClass accept: e variable ref fromTranslater: self. self nextPutAllCr: ') '. self nextPutAll: 'statementsBlock: [ :'. self expressionTranslaterClass accept: e variable fromTranslater: self. self nextPutAll: ' | '. e statements do: [:stmt | self acceptTry: stmt]. self nextPutAllCr: ']).'. ! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/27/2006 17:24'! acceptAliasStatementVariable: e | vn | vn := self namesBuilder uniqueBlockVarName: (self namesBuilder normalizedNameFrom: e aliasIdent first: false) owner: e. self nextPutAll: vn , ': '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:36'! acceptAssignable: e e qualifiers ifEmpty: [self nextPutAll: ' self ' , (self namesBuilder normalizedVarNameFrom: e head name) , ': '] ifNotEmpty: [:quals | quals do: [:q | q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e qualifiers allButLast do: [:q | self nextPutAll: '( ']. self expressionTranslaterClass accept: e head fromTranslater: self. e qualifiers allButLast do: [:q | self expressionTranslaterClass accept: q fromTranslater: self. self nextPutAll: ')'] separatedBy: []. e qualifiers last acceptTry: self]! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:36'! acceptAssignmentStatement: e self acceptTry: e left. self expressionTranslaterClass accept: e rightExpr fromTranslater: self. self nextPutAllCr: ' .'! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 11:15'! acceptAttributeQualifier: e | selector tmpAttr | tmpAttr := PltExplicitAttribute new name: e attributeName. selector := tmpAttr getSelectorFromNamesBuilder: self namesBuilder. self nextPutAll: ' ' , selector , ': '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:36'! acceptCaseStatement: e | guardBlocksAssocs otherWiseBlock selector | guardBlocksAssocs := '((OrderedCollection new) '. e caseActions do: [:ca | guardBlocksAssocs := guardBlocksAssocs , ' add: ( ( (OrderedCollection new) '. ca labels do: [:lab | guardBlocksAssocs := guardBlocksAssocs , 'add: [' , (self expressionTranslaterClass translate: lab fromTranslater: self) , ']; ']. guardBlocksAssocs := guardBlocksAssocs , 'yourself) -> [ ' , (self class translate: ca action fromTranslater: self) , ']); ']. guardBlocksAssocs := guardBlocksAssocs , 'yourself) '. otherWiseBlock := e caseOtherwise ifNil: ['[]'] ifNotNil: ['[' , (self class translate: e caseOtherwise fromTranslater: self) , ']']. selector := self expressionTranslaterClass translate: e selector fromTranslater: self. self nextPutAllCr: 'PlatypusCoreCaseStatement caseActionBlocks: ' , guardBlocksAssocs , ' otherwiseBlock: ' , otherWiseBlock , ' case: ' , selector , '.'! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 5/14/2005 12:06'! acceptCompoundStatement: e e statements do: [:stmt | self acceptTry: stmt]. ! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/15/2007 16:37'! acceptElementQualifier: e self nextPutAll: ' at: '. self expressionTranslaterClass accept: e index fromTranslater: self. self nextPutAll: ' put: '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/28/2006 22:47'! acceptEndSplitmarkStatement: e self nextPutAllCr: 'self class schemaInstance popSplitmark.'! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 1/31/2006 18:12'! acceptEscapeStatement: e self nextPutAllCr: 'PlatypusExpressEscapeStatementException signal. '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit expressions schema' stamp: 'apl 2/15/2007 16:37'! acceptIdentifier: e e referenced isPltAlgorithmDeclaration ifTrue: [(e parameters isNil or: [e parameters isEmpty]) ifTrue: [self nextPutAll: '(' , e referenced generatedClassName , ' invoke).'] ifFalse: [self nextPutAll: '(' , e referenced generatedClassName , ' invokeFromValues: ((OrderedCollection new) '. (e parameters ifNil: [#()]) do: [:p | self nextPutAll: 'add: '. self expressionTranslaterClass accept: p fromTranslater: self] separatedBy: [self nextPutAll: '; ']. self nextPutAllCr: '; yourself)).']] ifFalse: [self acceptTry: e referenced]! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:37'! acceptIfStatement: e self nextPutAll: '('. self expressionTranslaterClass accept: e selector fromTranslater: self. self nextPutAllCr: ') ifTrue: ['. e thenStatements do: [:stmt | self acceptTry: stmt]. e elseStatements ifNotNil: [self nextPutAllCr: '] ifFalse: ['. e elseStatements do: [:stmt | self acceptTry: stmt]]. self nextPutAllCr: '].'! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 11:16'! acceptLocalVariable: e self nextPutAll: ' self ' , (self namesBuilder normalizedVarNameFrom: e name) , ': '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/15/2007 16:25'! acceptNativeAlgorithm: e self subclassResponsibility ! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'AlainPlantec 4/26/2012 10:50'! acceptNativeCode: e | stmt | self nextPutAllCr: '"---------- native statement ---------- "'. stmt := e code trimBoth. (stmt endsWith: '.') ifFalse: [stmt := stmt , '.']. self nextPutAllCr: stmt! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:37'! acceptOutputStatement: e self nextPutAll: 'self class schemaInstance splitMarkOutput: ( '. self expressionTranslaterClass accept: e output fromTranslater: self. self nextPutAllCr: '). '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/28/2006 11:16'! acceptParameterDefinition: e self nextPutAll: ' self ' , (self namesBuilder normalizedVarNameFrom: e name) , ': '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 6/17/2005 22:13'! acceptQualifiedExpression: e e qualifiers do: [:q | q isPltGroupQualifier ifTrue: [self nextPutAll: '( ']]. e head acceptTry: self. e qualifiers do: [:q | self acceptTry: q.] separatedBy: [ self nextPutAll: ') ']! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'AlainPlantec 12/9/2013 21:40'! acceptRepeatStatement: e | whileBlock untilBlock statementsBlock first last incrVar blockHead novar | novar := 'r' , e basicIdentityHash asString. e incrControl ifNil: [blockHead := ' [:' , novar , ' | '] ifNotNil: [incrVar := self expressionTranslaterClass translate: e incrControl variable fromTranslater: self. first := self expressionTranslaterClass translate: e incrControl first fromTranslater: self. last := self expressionTranslaterClass translate: e incrControl last fromTranslater: self. blockHead := ' [ :' , incrVar , ' | ']. whileBlock := e whileControl ifNil: [''] ifNotNil: ['whileControlBlock: ' , blockHead , (self expressionTranslaterClass translate: e whileControl fromTranslater: self) , ']']. untilBlock := e untilControl ifNil: [''] ifNotNil: ['untilControlBlock: ' , blockHead , (self expressionTranslaterClass translate: e untilControl fromTranslater: self) , ']']. statementsBlock := ''. e statements do: [:stmt | statementsBlock := statementsBlock , (self class translate: stmt fromTranslater: self)]. statementsBlock := statementsBlock , ']'. e incrControl ifNil: [self nextPutAllCr: ' PlatypusCoreRepeatStatement ' , whileBlock , ' ' , untilBlock , ' repeat: [' , statementsBlock , '.'] ifNotNil: [self nextPutAllCr: 'PlatypusCoreRepeatStatement ' , whileBlock , ' ' , untilBlock , ' repeat: ' , blockHead , statementsBlock , ' from: ' , first , ' to: ' , last , '.']! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:37'! acceptReturnStatement: e self nextPutAll: ' ^ self return: ('. e returned ifNil: [self nextPutAll: 'self'] ifNotNil: [self expressionTranslaterClass accept: e returned fromTranslater: self]. self nextPutAllCr: ').'! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 1/31/2006 18:13'! acceptSkipStatement: e self nextPutAllCr: 'PlatypusExpressSkipStatementException signal. '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'visit statements schema' stamp: 'apl 2/15/2007 16:37'! acceptSplitmarkStatement: e self nextPutAll: 'self class schemaInstance pushSplitmark: ( '. self expressionTranslaterClass accept: e filename fromTranslater: self. self nextPutAllCr: ') append: ' , e append printString , '. '! ! !PlatypusExpressStatement2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 3/15/2005 19:55'! namesBuilder ^ self requestor namesBuilder! ! !PlatypusExpressStatement2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:42'! expressionTranslaterClassName ^ #PlatypusExpressExpression2VWTranslater! ! !PlatypusExpressStatement2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:43'! statementTranslaterClassName ^ #PlatypusExpressStatement2VWTranslater! ! !PlatypusExpressStatement2VWTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 2/15/2007 16:25'! acceptNativeAlgorithm: e | code | (code := e visualWorksCode) ifNil: [code := e platypusInterpreterCode. code ifNil: [Error signal: 'no visualworks code in native algorithm'] ifNotNil: [Transcript show: 'Platypus: Warning: ' , self class name , '>>acceptNativeAlgorithm: "no visualworks code, taking platypus interpreter code instead"' withCRs , e asClearText withCRs]]. ^ code acceptTry: self! ! !PlatypusExpressMetaStructure2PharoTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 1/30/2007 12:56'! buildInitializeMethodFromSchemaInstance: e | selector clsName code | clsName := e generatedClassName. selector := 'bootstraps'. code := ' self reinitializeSingleton. self singleton buildIndexes.'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: true category: 'initializing'! ! !PlatypusExpressStructure2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:04'! expressionTranslaterClassName ^ #PlatypusExpressExpression2PharoTranslater! ! !PlatypusExpressStructure2PharoTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 18:03'! statementTranslaterClassName ^ #PlatypusExpressStatement2PharoTranslater! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 1/25/2007 11:25'! commentFromMetaData: e classname: aClassName self nextPutAllCr: '!!' , aClassName , ' commentStamp: ''platypus comment'' prior:0!!'. self nextPutAllCr: PlatypusCoreObject expressSchemaCodeStartMark. self nextPutAll: (self unshunkedString: e translatedSchemaCode). self nextPutAll: PlatypusCoreObject expressSchemaCodeStopMark , '!!'! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 12/6/2006 13:52'! fileOutClassDefinition: aClassName superClassName: superClassName instVars: instVars classVars: classVars namespace: namespace packageName: packageName category: aCategoryName | pointPos supName | pointPos := superClassName indexOf: $.. supName := superClassName copyFrom: pointPos + 1 to: superClassName size. self nextPutAllCr: ''. self nextPutAll: supName , ' subclass: #'. self nextPutAllCr: aClassName. self nextPutAllCr: ' instanceVariableNames: ''' , instVars , ''''. self nextPutAllCr: ' classVariableNames: ''' , classVars , ''''. self nextPutAllCr: ' poolDictionaries: '''''. self nextPutAll: ' category: '''. self nextPutAll: aCategoryName. self nextPutAllCrCr: '''!!'. self buildPlatypusSignatureMethodForClass: aClassName namespace: namespace packageName: packageName category: aCategoryName! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 16:18'! fileOutDoIt: aSource self nextPutAllCr: aSource, '!!' ! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'AlainPlantec 4/26/2012 08:14'! fileOutMethodSource: aSource className: aClassName meta: isMeta packageName: packageName category: aCategorySymbol | categoryCode | categoryCode := self namesBuilder normalizedMethodCategory: aCategorySymbol className: aClassName meta: isMeta. self nextPutAllCrCr: categoryCode. self nextPutAllCrCr: (RBConfigurableFormatter new format: (RBParser parseMethod: aSource)). self nextPutAllCr: '!! !!'. ! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 12/5/2006 21:31'! fileOutNamespaceDefinition: aNamespaceName imports: imports environment: envName packageName: packageName category: aCategoryName ! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 2/14/2007 17:18'! finalResultFrom: aString ^ (super finalResultFrom: aString)! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 12/16/2006 00:04'! mcCategory: aCat ^ '*' , aCat! ! !PlatypusExpressStructure2PharoTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:23'! qualifiedClassNameOf: e ^ e generatedClassName! ! !PlatypusExpressStructure2SmalltalkTranslater class methodsFor: 'instance creation' stamp: 'apl 12/7/2006 13:38'! namesBuilder: aNamesBuilder ^ self new namesBuilder: aNamesBuilder! ! !PlatypusExpressStructure2SmalltalkTranslater class methodsFor: 'accessing' stamp: 'apl 12/7/2006 17:28'! translaterRequiredAspects ^ #( #classPrefix #systemCategoryPrefix #rootClassName #rootClassSystemCategory )! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/2/2005 22:18'! acceptDerivedAttribute: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doDerivedAttribute: e. ]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/15/2012 12:41'! acceptEntityDefinition: e (translationsDone includes: e) ifFalse: [translationsDone add: e. schemaInstance = e schemaInstance ifTrue: [self doEntityDefinition: e. super acceptEntityDefinition: e]]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/2/2005 22:18'! acceptExplicitAttribute: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doExplicitAttribute: e. ]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2005 16:04'! acceptFunctionDeclaration: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doAlgorithmDeclaration: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 11/30/2011 10:55'! acceptGlobalRule: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doGlobalRule: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/3/2005 01:06'! acceptInverseAttribute: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doInverseAttribute: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2005 16:04'! acceptProcedureDeclaration: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doAlgorithmDeclaration: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 12/15/2006 18:01'! acceptSchemaDefinition: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doSchemaDefinition: e.self localTranslationOnly ifFalse: [ super acceptSchemaDefinition: e]]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 08:24'! acceptSchemaInstance: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doSchemaInstance: e. e internalSchemata do: [:sch | sch acceptTry: self]]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit generic' stamp: 'AlainPlantec 6/15/2012 12:41'! acceptTry: e schemaInstance ifNil: [schemaInstance := e schemaInstance]. ^ super acceptTry: e ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 5/30/2005 09:50'! acceptWhereRule: e (translationsDone includes: e) ifFalse: [translationsDone add: e. self doWhereRule: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from algorithm' stamp: 'apl 2/15/2007 16:36'! buildAlgorithmCodeFrom: e | clsName invoquing paramInfos localInfos count ln allInfos affect code | clsName := e generatedClassName. paramInfos := self namesBuilder normalizedAlgorithmFormalParametersInfosFrom: e. localInfos := self namesBuilder normalizedAlgorithmLocalVariablesInfosFrom: e. allInfos := paramInfos asOrderedCollection , localInfos. invoquing := self namesBuilder functionInvokingFrom: e. paramInfos isEmpty ifFalse: [paramInfos size < 6 ifTrue: [self fileOutMethodSource: invoquing , ' ^ self new ' , invoquing className: clsName meta: false category: 'instance-creation'. count := 0. code := ''. paramInfos do: [:sp | count := count + 1. code := code , ' self ' , sp first , ': (values at: ' , count asString , ').']. self fileOutMethodSource: 'fromValues: values ' , code className: clsName meta: false category: 'accessing'. paramInfos size > 1 ifTrue: [code := ''. paramInfos do: [:sp | code := code , ' self ' , sp first , ': ' , sp second , '.']. self fileOutMethodSource: invoquing , code className: clsName meta: false category: 'accessing']]]. allInfos isEmpty ifFalse: [allInfos do: [:sp | affect := (sp fourth isPltAggregationType and: [sp third]) ifTrue: [sp second , ' ifNil: [' , (self namesBuilder smalltalkInitializingExpressionOf: sp fourth) , '] ifNotNil: [' , sp second , ' as: ' , (self namesBuilder smalltalkTypeOf: sp fourth) , ']'] ifFalse: [sp second]. code := ' ' , sp first , ' := ' , affect. self fileOutMethodSource: sp first , ': ' , sp second , ' ' , code className: clsName meta: false category: 'accessing']. allInfos do: [:sp | self fileOutMethodSource: sp first , ' ^' , sp first className: clsName meta: false category: 'accessing']]. code := '" ---------- locals assignments ----------"'. (e locals select: [:l | l initializer notNil]) do: [:l | ln := self namesBuilder normalizedVarNameFrom: l name. code := code , 'self ' , ln , ': (' , (self expressionTranslaterClass accept: l initializer fromTranslater: self resultStream: (WriteStream on: String new)) result. code := code , ').']. code := code , '" ---------- statements ----------"'. e statements do: [:stmt | code := code , (self statementTranslaterClass accept: stmt fromTranslater: self resultStream: (WriteStream on: String new)) result]. self fileOutMethodSource: 'invoke ' , code className: clsName meta: false category: 'invoking'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'AlainPlantec 6/15/2012 13:01'! buildClassificationMethodFromEntity: e | selector clsName | clsName := e generatedClassName. selector := 'is' , clsName. self fileOutMethodSource: selector , ' ' , '^ true' className: clsName meta: false category: 'classifying'. self fileOutMethodSource: selector , ' ' , '^ false' className: self rootClassName meta: false packageName: self rootClassSystemCategory category: (self mcCategory: ((e schemaDefinition systemCategoryFromNamesBuilder: self namesBuilder) , '-classifying' ))! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schema' stamp: 'apl 12/5/2006 18:24'! buildContextAccessingMethodsFromSchema: e | selector clsName | clsName := e generatedClassName. selector := 'context'. self fileOutMethodSource: selector , ' ^ self schemaInstance context' className: clsName meta: false category: 'context-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 12/5/2006 18:57'! buildContextAccessingMethodsFromSchemaInstance: e | clsName | clsName := e generatedClassName. self fileOutMethodSource: 'context ^context' className: clsName meta: false category: 'context-accessing'. self fileOutMethodSource: 'context: aContext context := aContext. super context: aContext' className: clsName meta: false category: 'context-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/5/2006 11:06'! buildCopyGroupToMethodFromEntity: e | arg1vn arg2vn selector1 selector2 code | arg1vn := self namesBuilder localVarName: 'aClassSymbol' inScope: e. arg2vn := self namesBuilder localVarName: 'anObject' inScope: e. selector1 := 'pltCopyGroup:'. selector2 := 'to: '. code := ' self class name == ' , arg1vn , ' ifTrue: [self pltCopyTo: ' , arg2vn , '] ifFalse: [super ' , selector1 , ' ' , arg1vn , ' ' , selector2 , ' ', arg2vn , ']'. self fileOutMethodSource: (selector1 , arg1vn , ' ' , selector2 , arg2vn , ' ', code) className: e generatedClassName meta: false category: 'copying'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 1/18/2007 10:22'! buildCopyToMethodFromEntity: e | selector clsName argvn code localCopyMthName | clsName := e generatedClassName. localCopyMthName := self namesBuilder localCopyMethodNameFromEntity: e. argvn := self namesBuilder localVarName: 'another' inScope: e. selector := 'pltCopyTo:'. code := ' super pltCopyTo: ' , argvn , '. self ', localCopyMthName, ' ', argvn , '.'. self fileOutMethodSource: selector , argvn , ' ' , code className: clsName meta: false category: 'copying'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schema' stamp: 'apl 12/5/2006 19:36'! buildEntitiesMethodsFromSchema: e | clsName cpt buildSelector prefix | clsName := e generatedClassName. prefix := 'entityDefinition'. cpt := 0. e entities do: [:elem | cpt := cpt + 1. buildSelector := prefix , cpt asString. self fileOutMethodSource: buildSelector , '^ #( #''' , elem name , ''' #' , (elem generatedClassNameFromNamesBuilder: self namesBuilder) , ' )' className: clsName meta: false category: 'entities']. buildSelector := prefix , 'Count'. self fileOutMethodSource: buildSelector , ' ^ ' , cpt asString className: clsName meta: false category: 'entities'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 2/2/2006 11:48'! buildExpressMetaSchemaCodeMethodFromSchemaInstance: e self buildExpressMetaSchemaCodeMethodFromSchemaInstance: e intoClassNamed: (e generatedClassName)! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 2/2/2006 11:48'! buildExpressSchemaCodeMethodFromSchemaInstance: e self buildExpressSchemaCodeMethodFromSchemaInstance: e intoClassNamed: (e generatedClassName)! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 8/31/2006 11:50'! buildExpressSchemaCodeMethodFromSchemaInstance: e intoClassNamed: aClassName | express | express := e translatedSchemaCode. self fileInSplittedBaseSelector: 'expressSchemaCode' contents: express className: aClassName category: 'schema-accessing' step: 200 meta: false! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'AlainPlantec 1/14/2013 22:28'! buildExternalsSchemaInstancesMethodFromSchemaInstance: e | selector clsName code | clsName := e generatedClassName. selector := 'externalSchemaInstanceClassNames'. code := ' ^ #('. e externalSchemaInstances do: [:s | code := code, ' #' , s generatedClassName]. code := code, ')'. self fileOutMethodSource: selector, ' ', code className: clsName meta: false category: 'accessing'. ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schema' stamp: 'apl 12/5/2006 18:35'! buildFunctionsMethodsFromSchema: e | clsName cpt buildSelector prefix | clsName := e generatedClassName. prefix := 'functionDeclaration'. cpt := 0. e functionDeclarations do: [:elem | cpt := cpt + 1. buildSelector := prefix , cpt asString. self fileOutMethodSource: buildSelector , ' ^ #( #''' , elem name , ''' #' , (elem generatedClassNameFromNamesBuilder: self namesBuilder) , ' )' className: clsName meta: false category: 'functions']. buildSelector := prefix , 'Count'. self fileOutMethodSource: buildSelector , ' ^ ' , cpt asString className: clsName meta: false category: 'functions'. ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 2/15/2007 16:36'! buildGetAccessorMethodFromDerivedAttribute: e | selector clsName contextvn calledSelector receivervn receiverPart code | clsName := e generatedClassName. selector := e getSelectorWithContextArgFromNamesBuilder: self namesBuilder. receiverPart := 'receiver:'. contextvn := self namesBuilder contextArgNameFromAttribute: e. receivervn := self namesBuilder receiverArgNameFromAttribute: e. self fileOutMethodSource: selector , contextvn , ' ^ self ' , selector , ' ' , contextvn , ' ' , receiverPart , ' self' className: clsName meta: false category: 'deriving'. code := (self expressionTranslaterClass receiverName: receivervn accept: e assign fromTranslater: self resultStream: (WriteStream on: String new)) result. self fileOutMethodSource: selector , ' ' , contextvn , ' ' , receiverPart , ' ' , receivervn , ' ^' , code className: clsName meta: false category: 'deriving'. calledSelector := selector. selector := e getSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , ' ^ self ' , calledSelector , self contextAccessingCode className: clsName meta: false category: 'deriving'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 2/9/2007 14:42'! buildGetAccessorMethodFromInverseAttribute: e | selector clsName invertedAttrOwnerClassName invertedAttrGetterSelector foundvn currvn contextvn cmp calledSelector code | clsName := e generatedClassName. selector := e getSelectorWithContextArgFromNamesBuilder: self namesBuilder. contextvn := self namesBuilder contextArgNameFromAttribute: e. invertedAttrOwnerClassName := e invertedAttr ref generatedClassNameFromNamesBuilder: self namesBuilder. invertedAttrGetterSelector := e invertedAttr ref getSelectorFromNamesBuilder: self namesBuilder. currvn := self namesBuilder localVarName: 'curr' inScope: e owner. e minCardinality ifNil: [e invertedAttr ref domain isPltAggregationType ifTrue: [cmp := 'includes: '] ifFalse: [cmp := ' = ']. code := contextvn , ' allInstancesOf: ' , invertedAttrOwnerClassName , ' do: [ :repo :inst | ((inst ' , invertedAttrGetterSelector , ') ' , cmp , ' self) ifTrue: [^ inst ]]. ^ nil'] ifNotNil: [foundvn := self namesBuilder localVarName: 'founds' inScope: e owner. code := ' | ' , foundvn , ' |'. e duplicates ifTrue: [code := code , ' ' , foundvn , ' := Bag new.'] ifFalse: [code := code , ' ' , foundvn , ' := Set new.']. code := code , contextvn , ' allInstancesOf: ' , invertedAttrOwnerClassName , ' do: [ :repo :inst | | ' , currvn , ' | (' , currvn , ' := inst ' , invertedAttrGetterSelector , ') == self ifTrue: [' , foundvn , ' add: ' , currvn , ']].' , ' ^ ' , foundvn]. self fileOutMethodSource: selector , ' ' , contextvn , ' ' , code className: clsName meta: false category: 'inverse-accessing'. selector := e getSelectorFromNamesBuilder: self namesBuilder. calledSelector := e getSelectorWithContextArgFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , ' ^ self ' , calledSelector , self contextAccessingCode className: clsName meta: false category: 'inverse-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'alain.plantec 12/18/2008 10:06'! buildGetAccessorMethodFromWhereRule: e | selector clsName contextvn calledSelector code | clsName := e generatedClassName. selector := e getSelectorWithContextArgFromNamesBuilder: self namesBuilder. contextvn := 'aContext'. code := ' ^ ' , (self expressionTranslaterClass accept: e whereValue fromTranslater: self resultStream: (WriteStream on: String new)) result. self fileOutMethodSource: selector , contextvn , code className: clsName meta: false category: 'rules'. calledSelector := selector. selector := e getSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , ' ^ self ' , calledSelector , self contextAccessingCode className: clsName meta: false category: 'rules'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 12/7/2006 12:36'! buildGetAndSetAccessorMethodFromExpliciteAttribute: e | vname argName selector lowSet clsName getSelector | vname := e instVarNameFromNamesBuilder: self namesBuilder. clsName := e generatedClassName. argName := self namesBuilder argNameFor: e domain scopeMetaData: e owner. lowSet := self lowSetExpressionFromAttribute: e. selector := e getSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , ' ^' , vname className: clsName meta: false category: 'accessing'. selector := e setSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , argName , ' self ' , (e lowSetSelectorFromNamesBuilder: self namesBuilder) , argName className: clsName meta: false category: 'set-accessing'. selector := e lowSetSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , argName , ' ' , vname , ' := ' , lowSet className: clsName meta: false category: 'accessing'. selector := e fastSetSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , argName , ' ' , vname , ' := ' , argName className: clsName meta: false category: 'fast-set-accessing'. selector := e getSelectorWithContextArgFromNamesBuilder: self namesBuilder. argName := self namesBuilder contextArgNameFromAttribute: e. getSelector := e getSelectorFromNamesBuilder: self namesBuilder. self fileOutMethodSource: selector , argName , ' ^ self ' , getSelector className: clsName meta: false category: 'with-context-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from algorithm' stamp: 'AlainPlantec 11/30/2011 14:26'! buildGlobalRuleAccessingFrom: e | clsName localInfos affect code| clsName := e generatedClassName. localInfos := self namesBuilder normalizedAlgorithmLocalVariablesInfosFrom: e. localInfos do: [:sp | affect := (sp fourth isPltAggregationType and: [sp third]) ifTrue: [sp second , ' ifNil: [' , (self namesBuilder smalltalkInitializingExpressionOf: sp fourth) , '] ifNotNil: [' , sp second , ' as: ' , (self namesBuilder smalltalkTypeOf: sp fourth) , ']'] ifFalse: [sp second]. code := ' ' , sp first , ' := ' , affect. self fileOutMethodSource: sp first , ': ' , sp second , ' ' , code className: clsName meta: false category: 'accessing']. localInfos do: [:sp | self fileOutMethodSource: sp first , ' ^' , sp first className: clsName meta: false category: 'accessing']! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from algorithm' stamp: 'AlainPlantec 11/30/2011 12:21'! buildGlobalRuleInitializeFrom: e | code clsName | clsName := e generatedClassName. code := String cr, String tab, 'super initialize.', String cr. code := code, String tab, '" ---------- locals assignments ----------"'. (e locals select: [:l | l initializer notNil]) do: [:l | | ln | ln := self namesBuilder normalizedVarNameFrom: l name. code := code , String cr, String tab, 'self ' , ln , ': (' , (self expressionTranslaterClass accept: l initializer fromTranslater: self resultStream: (WriteStream on: String new)) result. code := code , ').']. e forEntities isEmpty ifFalse: [ code := code, String cr, String tab, '" ---------- entity instance set assignments ----------"'. code := code, (String streamContents: [:strm | e forEntities do: [:fe | | ent | ent := fe entityRef ref. strm nextPutAll: String cr, String tab, fe name, ' := self myContext allInstancesOf: ', ent generatedClassName, '.']])]. self fileOutMethodSource: 'initialize' , code className: clsName meta: false category: 'initializing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from algorithm' stamp: 'AlainPlantec 11/30/2011 14:25'! buildGlobalRuleWhereRulesCodeFrom: e | code clsName | clsName := e generatedClassName. e whereRules do: [:wr | self doWhereRule: wr]. e whereRules ifNotEmpty: [ code := String tab, '" ---------- global checking ----------"', String cr, String tab, ' ^ self ', e whereRules first label, ' '. e whereRules copyWithoutFirst do: [:wr | code := code, ' and: [ self ', wr label ]. 1 to: (e whereRules size) - 1 do: [:i | code := code, '] ']. self fileOutMethodSource: 'invoke ' , code className: clsName meta: false category: 'invoking'] ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/5/2006 11:42'! buildInitializeMethodFromEntity: e | selector clsName code | clsName := e generatedClassName. selector := 'stepInitialize'. code := ' super ' , selector , '.'. e explicitAttributesDo: [:a | code := code , ' ' , (self initializeStatementFromAttribute: a)]. self fileOutMethodSource: selector , ' ' , code className: clsName meta: false category: 'initializing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 1/29/2007 16:59'! buildInitializeMethodFromSchemaInstance: e | selector clsName code | clsName := e generatedClassName. selector := 'initialize'. code := ' self reinitializeSingleton. self singleton buildIndexes.'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: true category: 'initializing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 1/18/2007 11:24'! buildLocalCopyToMethodFromEntity: e | selector clsName argvn getterSelector setterSelector code | clsName := e generatedClassName. argvn := self namesBuilder localVarName: 'another' inScope: e. selector := self namesBuilder localCopyMethodNameFromEntity: e. code := ''. e explicitAttributesDo: [:a | getterSelector := a getSelectorFromNamesBuilder: self namesBuilder. setterSelector := a fastSetSelectorFromNamesBuilder: self namesBuilder. code := code , ' ' , argvn , ' ' , setterSelector , ' (self ' , getterSelector , ').']. self fileOutMethodSource: selector , argvn , ' ' , code className: clsName meta: false category: 'copying'. self fileOutMethodSource: ('pltLocalCopyTo: ' , argvn , ' self ', selector, argvn) className: clsName meta: false category: 'copying'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'MrCleaner 1/18/2011 18:20'! buildLocalGroupAccessingMethodFromEntity: e | clsName setterSelector selectorsAndArgs reservedvn setter argvn localvn getterSelector selector code localFromValuesSelector localToValuesSelector | clsName := e generatedClassName. selectorsAndArgs := OrderedCollection new. reservedvn := OrderedCollection new. e explicitAttributesDo: [:a | setter := a lowSetSelectorFromNamesBuilder: self namesBuilder. argvn := self namesBuilder argNameFor: a domain scopeMetaData: e reservedNames: reservedvn. selectorsAndArgs add: (Array with: a with: setter with: argvn)]. e numberOfExplicitAttributes > 1 ifTrue: [selector := ''. selectorsAndArgs do: [:selarg | selector := selector , selarg second , ' ' , selarg third] separatedBy: [selector := selector , ' ']. code := ''. selectorsAndArgs do: [:selarg | setterSelector := selarg first setSelectorFromNamesBuilder: self namesBuilder. code := code , ' self ' , setterSelector , selarg third , '.']. false ifTrue: [self fileOutMethodSource: selector , ' ' , code className: clsName meta: false category: 'group-accessing']]. argvn := self namesBuilder localVarName: 'values' inScope: e. localvn := self namesBuilder localVarName: argvn , 'loc' inScope: e. code := ' | ' , localvn , ' |' , localvn , ' := ' , argvn , ' asOrderedCollection.'. selectorsAndArgs do: [:selarg | setterSelector := selarg first setSelectorFromNamesBuilder: self namesBuilder. code := code , ' self ' , setterSelector , localvn , ' removeFirst.']. code := code , ' ^ ' , localvn. localFromValuesSelector := self namesBuilder localFromValuesMethodNameFromEntity: e. localToValuesSelector := self namesBuilder localToValuesMethodNameFromEntity: e. self fileOutMethodSource: localFromValuesSelector , argvn , ' ' , code className: clsName meta: false category: 'group-accessing'. code := ''. selectorsAndArgs do: [:selarg | getterSelector := selarg first getSelectorFromNamesBuilder: self namesBuilder. code := code , ' ' , argvn , ' add: (self ' , getterSelector , ').']. code := code , ' ^ ' , argvn. self fileOutMethodSource: localToValuesSelector , argvn , ' ' , code className: clsName meta: false category: 'group-accessing'. code := ' ^ self ' , localToValuesSelector , ' (super toValues: ' , argvn , ')'. self fileOutMethodSource: 'toValues:' , argvn , ' ' , code className: clsName meta: false category: 'group-accessing'. code := ' ^ self ' , localFromValuesSelector , ' (super fromValues: ' , argvn , ')'. self fileOutMethodSource: 'fromValues:' , argvn , ' ' , code className: clsName meta: false category: 'group-accessing'. self fileOutMethodSource: 'localFromValues: ' , argvn , ' ^ self ' , localFromValuesSelector , argvn className: clsName meta: false category: 'group-accessing'. self fileOutMethodSource: 'localToValues: ' , argvn , ' ^ self ' , localToValuesSelector , argvn className: clsName meta: false category: 'group-accessing'. ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 8/31/2006 11:50'! buildMetaDataFileContentsMethodFromSchemaInstance: e | clsName metaDataStream | clsName := e generatedClassName. metaDataStream := WriteStream on: String new. e metaDataToStream: metaDataStream. self fileInSplittedBaseSelector: 'metaDataFileContents' contents: metaDataStream contents className: clsName category: 'meta-data-accessing' step: 200 meta: false! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 12/7/2006 13:20'! buildNamesBuilderClassNameMethodFromSchemaInstance: e | selector clsName | clsName := e generatedClassName. selector := 'namesBuilderClassName'. self fileOutMethodSource: selector , ' ^ #' , self namesBuilder class name className: clsName meta: false category: 'accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 12/7/2006 13:21'! buildNamesBuilderMethodFromSchemaInstance: e | selector clsName code | clsName := e generatedClassName. selector := 'namesBuilder'. code := ' | namesBuilder |'. code := code , ' namesBuilder := self namesBuilderClass new.'. self class translaterRequiredAspects do: [:aspect | code := code , ' namesBuilder ' , aspect , ': ' , (self perform: aspect) printString , '.']. code := code , ' ^ namesBuilder'. self fileOutMethodSource: selector , code className: clsName meta: false category: 'accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/15/2006 23:07'! buildPlatypusSignatureMethodForClass: className namespace: namespace packageName: packageName category: aCategoryName self fileOutMethodSource: 'translatedFromISO10303P11 ^ true.' className: className meta: true packageName: packageName category: 'platypus-signature'. self fileOutMethodSource: 'iso10303P11Translater ^ ''Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.''' className: className meta: true packageName: packageName category: 'platypus-signature'. self fileOutMethodSource: 'vwNamespaceName ^#''' , namespace , '''' className: className meta: true packageName: packageName category: 'platypus-signature'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 12/7/2006 17:15'! buildRepositoryMethodFromSchemaInstance: e | selector clsName repositoryClassName | clsName := e generatedClassName. repositoryClassName := e repositoryClassNameFromNamesBuilder: self namesBuilder. selector := 'repositoryClassName'. self fileOutMethodSource: selector , ' ^ #' , repositoryClassName className: clsName meta: false category: 'accessing'. selector := 'generatedMetaDataSchemaInstanceName'. self fileOutMethodSource: selector , ' ^ #' , clsName className: repositoryClassName meta: true category: 'accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'AlainPlantec 10/27/2011 18:17'! buildRootEntityClass | rootClsName selector code | (translationsDone includes: (rootClsName := self rootClassName asSymbol)) ifFalse: [translationsDone add: rootClsName. self fileOutNamespaceDefinition: self rootClassSystemCategory imports: '' environment: 'Smalltalk' packageName: self rootClassSystemCategory category: self rootClassSystemCategory. self fileOutClassDefinition: rootClsName superClassName: 'Object' instVars: '' classVars: '' namespace: self rootClassSystemCategory packageName: self rootClassSystemCategory category: self rootClassSystemCategory. selector := 'platypusMetaData'. code := ' ^ self schemaDefinition metaDataFor: self name asSymbol'. self fileOutMethodSource: selector , ' ' , code className: rootClsName meta: true packageName: self rootClassSystemCategory category: 'meta-data-accessing'. selector := 'platypusMetaData'. code := ' ^ self class platypusMetaData'. self fileOutMethodSource: selector , ' ' , code className: rootClsName meta: false packageName: self rootClassSystemCategory category: 'meta-data-accessing'. selector := 'context'. self fileOutMethodSource: selector , ' ^ self schemaDefinition context' className: rootClsName meta: true packageName: self rootClassSystemCategory category: 'context-accessing']! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/5/2006 11:35'! buildSchemaDefinitionMethodFromAlgorithm: e | selector clsName schemaClassName code | clsName := e generatedClassName. schemaClassName := e owner generatedClassNameFromNamesBuilder: self namesBuilder. selector := 'schemaDefinition'. code := ' ^ ' , schemaClassName , ' singleton'. self fileOutMethodSource: selector, ' ' , code className: clsName meta: true category: 'meta-data-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/5/2006 11:36'! buildSchemaDefinitionMethodFromEntity: e | selector clsName schemaClassName code | clsName := e generatedClassName. schemaClassName := e owner generatedClassNameFromNamesBuilder: self namesBuilder. selector := 'schemaDefinition'. code := ' ^ ' , schemaClassName , ' singleton'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: true category: 'meta-data-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schemaInstance' stamp: 'apl 12/5/2006 19:09'! buildSchemaDefinitionsMethodsFromSchemaInstance: e | clsName cpt buildSelector prefix code | clsName := e generatedClassName. cpt := 0. prefix := 'schemaDefinition'. e internalSchemata do: [:elem | cpt := cpt + 1. buildSelector := prefix , cpt asString. code := ' ^ #( #''' , elem name , ''' #' , (elem generatedClassNameFromNamesBuilder: self namesBuilder) , ' )'. self fileOutMethodSource: buildSelector , ' ' , code className: clsName meta: false category: 'schemata-accessing']. buildSelector := prefix , 'Count'. self fileOutMethodSource: buildSelector , ' ^ ' , cpt asString className: clsName meta: false category: 'schemata-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from schema' stamp: 'apl 12/5/2006 18:37'! buildSchemaInstanceClassNameMethodsFromSchema: e | clsName schInstClsName selector | clsName := e generatedClassName. schInstClsName := e owner generatedClassNameFromNamesBuilder: self namesBuilder. selector := 'schemaInstanceClassName'. self fileOutMethodSource: selector , ' ^ #' , schInstClsName className: clsName meta: false category: 'meta-data-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'AlainPlantec 6/15/2012 12:42'! buildSchemaInstanceMethodFromEntity: e | selector clsName schemaInstanceClassName code | clsName := e generatedClassName. schemaInstanceClassName := e schemaInstance generatedClassName. selector := 'schemaInstance'. code := ' ^ ' , schemaInstanceClassName , ' singleton'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: true category: 'meta-data-accessing'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from entity' stamp: 'apl 12/5/2006 11:42'! buildVisitMethodFromEntity: e | selector clsName code category | clsName := e generatedClassName. selector := 'accept: aVisitor'. code := ' ^ aVisitor accept' , (self namesBuilder normalizedNameFrom: e name first: true) , ': self.'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: false category: 'visiting'. clsName := self namesBuilder abstractVisitorClassName. category := 'visiting' , (self namesBuilder normalizedNameFrom: e lookUpSchemaDefinition name first: true). selector := 'accept' , (self namesBuilder normalizedNameFrom: e name first: true) , ': e'. code := ' "my subclasses have to redefine it"'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: false category: category. ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:11'! classPrefix ^ self namesBuilder classPrefix! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 2/2/2006 11:49'! commentFromMetaData: e | clsName | clsName := e generatedClassName. self commentFromMetaData: e classname: clsName! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/7/2006 10:51'! commentFromMetaData: e classname: aClassName self subclassResponsibility ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 8/31/2006 11:50'! contextAccessingCode ^ ' self class context'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 12/5/2006 16:01'! doAlgorithmDeclaration: e | paramInfos localInfos allInfos instv | paramInfos := self namesBuilder normalizedAlgorithmFormalParametersInfosFrom: e. localInfos := self namesBuilder normalizedAlgorithmLocalVariablesInfosFrom: e. allInfos := paramInfos asOrderedCollection , localInfos. instv := ''. allInfos do: [:sp | instv := instv , sp first , ' ']. self fileOutClassDefinition: e generatedClassName superClassName: self platypusVWNamespace, '.PlatypusCoreAlgorithmDeclaration' instVars: instv classVars: '' category: e generatedSystemCategory. self commentFromMetaData: e. self buildAlgorithmCodeFrom: e. self buildSchemaDefinitionMethodFromAlgorithm: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/2/2005 09:44'! doDerivedAttribute: e self buildGetAccessorMethodFromDerivedAttribute: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/15/2012 12:42'! doEntityDefinition: e | superClassname instv classv | self localTranslationOnly ifTrue: [self acceptSchemaInstance: e schemaInstance] ifFalse: [self buildRootEntityClass]. e supertypes ifNotEmpty: [:supertypes | self localTranslationOnly ifFalse: [supertypes do: [:st | self acceptEntityDefinition: st ref]]. superClassname := e generatedSystemCategoryPrefix , '.' , e supertypes first generatedClassName] ifEmpty: [superClassname := self rootClassSystemCategory , '.' , self rootClassName]. instv := ''. (self namesBuilder allInstVarNamesFromEntity: e) do: [:n | instv := instv , n] separatedBy: [instv := instv , ' ']. classv := ''. (self namesBuilder allClassVarNamesFromEntity: e) , (self namesBuilder allClassInstVarNamesFromEntity: e) do: [:n | classv := classv , n] separatedBy: [classv := classv , ' ']. superClassname = (e generatedSystemCategory , '.' , e generatedClassName) ifTrue: [superClassname := 'Object']. self fileOutClassDefinition: e generatedClassName superClassName: superClassname instVars: instv classVars: classv category: e generatedSystemCategory. self commentFromMetaData: e. self buildInitializeMethodFromEntity: e. self buildClassificationMethodFromEntity: e. self buildVisitMethodFromEntity: e. self buildLocalCopyToMethodFromEntity: e. self buildCopyToMethodFromEntity: e. self buildCopyGroupToMethodFromEntity: e. self buildLocalGroupAccessingMethodFromEntity: e. self buildSchemaDefinitionMethodFromEntity: e. self buildSchemaInstanceMethodFromEntity: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/1/2005 21:14'! doExplicitAttribute: e self buildGetAndSetAccessorMethodFromExpliciteAttribute: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 11/30/2011 14:25'! doGlobalRule: e | instv allInfos | allInfos := self namesBuilder normalizedAlgorithmLocalVariablesInfosFrom: e. instv := ''. allInfos do: [:sp | instv := instv , sp first , ' ']. instv := instv, ' ', (String streamContents: [:strm | e forEntities do: [:fe | strm nextPutAll: fe name, ' ']]). self fileOutClassDefinition: e generatedClassName superClassName: self platypusVWNamespace, '.PlatypusCoreAlgorithmDeclaration' instVars: instv classVars: '' category: e generatedSystemCategory. self commentFromMetaData: e. self buildGlobalRuleInitializeFrom: e. self buildGlobalRuleAccessingFrom: e. self buildSchemaDefinitionMethodFromAlgorithm: e. self buildGlobalRuleWhereRulesCodeFrom: e ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/3/2005 01:06'! doInverseAttribute: e self buildGetAccessorMethodFromInverseAttribute: e ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 12/5/2006 15:25'! doSchemaDefinition: e self fileOutClassDefinition: e generatedClassName superClassName: self platypusVWNamespace , '.PlatypusCoreSchema' instVars: '' classVars: '' category: e generatedSystemCategory. self commentFromMetaData: e. self buildSchemaInstanceClassNameMethodsFromSchema: e. self buildContextAccessingMethodsFromSchema: e. self buildEntitiesMethodsFromSchema: e. self buildFunctionsMethodsFromSchema: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 3/8/2007 15:06'! doSchemaInstance: e | clsName | self fileOutNamespaceDefinition: self environment imports: self rootClassSystemCategory , '.* ' environment: 'Smalltalk' packageName: self environment category: self environment. self fileOutClassDefinition: (clsName := e generatedClassName) superClassName: self platypusVWNamespace , '.PlatypusCoreSchemaInstance' instVars: 'context' classVars: '' category: e generatedSystemCategory. self commentFromMetaData: e classname: clsName. self buildNamesBuilderClassNameMethodFromSchemaInstance: e. self buildNamesBuilderMethodFromSchemaInstance: e. self buildSchemaDefinitionsMethodsFromSchemaInstance: e. self buildContextAccessingMethodsFromSchemaInstance: e. self fileOutClassDefinition: (e repositoryClassNameFromNamesBuilder: self namesBuilder) superClassName: self platypusVWNamespace , '.PlatypusCoreRepository' instVars: '' classVars: '' category: e generatedSystemCategory. self buildRepositoryMethodFromSchemaInstance: e. self buildExternalsSchemaInstancesMethodFromSchemaInstance: e. self fileOutClassDefinition: self namesBuilder abstractVisitorClassName superClassName: self platypusVWNamespace , '.PlatypusCoreAbstractVisitor' instVars: '' classVars: '' category: e generatedSystemCategory. self buildInitializeMethodFromSchemaInstance: e! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'visit dictionary schema' stamp: 'apl 5/30/2005 09:56'! doWhereRule: e e label ifNotNil: [ self buildGetAccessorMethodFromWhereRule: e]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/5/2006 08:51'! environment ^ self namesBuilder systemCategoryPrefix ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/5/2006 16:10'! fileInSplittedBaseSelector: selector contents: aBigString className: clsName category: category step: step meta: isMeta | lines prev buildSelector count code | lines := OrderedCollection new. aBigString linesDo: [:line | lines add: line , '(*\\*)']. prev := 1. count := 0. 1 to: lines size by: step do: [:cpt | count := count + 1. buildSelector := selector , count asString. code := ' ^'. prev to: (lines size min: prev + step - 1) do: [:cpt2 | code := code , ' ' , (lines at: cpt2) printString , ',']. code := code , ' '''''. self fileOutMethodSource: buildSelector , code className: clsName meta: isMeta category: category. prev := prev + step]. buildSelector := selector , 'PartsCount'. code := ' ^' , count asString. self fileOutMethodSource: buildSelector , code className: clsName meta: isMeta category: category! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/6/2006 21:56'! fileOutClassDefinition: aClassName superClassName: superClassName instVars: instVars classVars: classVars category: aCategoryName self fileOutClassDefinition: aClassName superClassName: superClassName instVars: instVars classVars: classVars namespace: self environment packageName: self environment category: aCategoryName! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/7/2006 10:52'! fileOutClassDefinition: aClassName superClassName: superClassName instVars: instVars classVars: classVars namespace: namespace packageName: packageName category: aCategoryName self subclassResponsibility ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 16:18'! fileOutDoIt: aSource self subclassResponsibility ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/5/2006 10:58'! fileOutMethodSource: aSource className: aClassName meta: isMeta category: aCategorySymbol self fileOutMethodSource: aSource className: aClassName meta: isMeta packageName: self environment category: aCategorySymbol! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/7/2006 10:52'! fileOutMethodSource: aSource className: aClassName meta: isMeta packageName: packageName category: aCategorySymbol self subclassResponsibility ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/7/2006 10:52'! fileOutNamespaceDefinition: aNamespaceName imports: imports environment: envName packageName: packageName category: aCategoryName self subclassResponsibility ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 2/14/2007 17:20'! finalResultFrom: aString ^ super finalResultFrom: aString ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'initialize/release' stamp: 'apl 3/2/2005 18:47'! initialize super initialize. translationsDone := Set new. ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 3/14/2005 10:23'! initializeStatementFromAttribute: e | varName initExpr | varName := e instVarNameFromNamesBuilder: self namesBuilder. e optionalFlag ifTrue: [^ varName , ' := nil.'] ifFalse: [initExpr := self namesBuilder smalltalkInitializingExpressionOf: e domain. ^ varName , ' := ' , initExpr , '.']! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 3/2/2005 14:02'! localTranslationOnly ^ localTranslationOnly ifNil: [localTranslationOnly := false]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 3/2/2005 14:01'! localTranslationOnly: anObject localTranslationOnly := anObject! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'generating from attribute' stamp: 'apl 2/6/2006 16:18'! lowSetExpressionFromAttribute: e | domain argName | domain := e domain referenced. argName := self namesBuilder argNameFor: domain scopeMetaData: e owner. domain isPltAggregationType ifTrue: [^ argName , ' ifNil: [' , (self namesBuilder smalltalkInitializingExpressionOf: domain) , '] ifNotNil: [' , argName , ' as: ' , (self namesBuilder smalltalkTypeOf: domain) , ']'] ifFalse: [(domain isPltDefinedType and: [domain domain isPltEnumerationType]) ifTrue: [^ argName , ' asUppercase asSymbol'] ifFalse: [^ argName]]! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/16/2006 00:05'! mcCategory: aCat self subclassResponsibility! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:07'! namesBuilder ^ namesBuilder ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:07'! namesBuilder: aNamesBuilder namesBuilder := aNamesBuilder ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 8/31/2006 12:50'! platypusVWNamespace ^ 'Platypus'! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 2/1/2007 16:09'! prettyPrint: aString ^ PlatypusVWPackageExporterScanner new outPut: aString! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:23'! qualifiedClassNameOf: e self subclassResponsibility! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:11'! rootClassName ^self namesBuilder rootClassName! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:12'! rootClassSystemCategory ^ self namesBuilder rootClassSystemCategory ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 12/7/2006 13:12'! systemCategoryPrefix ^ self namesBuilder systemCategoryPrefix ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'public accessing' stamp: 'AlainPlantec 6/15/2012 12:42'! translate: aMetaData Cursor wait showWhile: [self acceptTry: aMetaData. self fileOutDoIt: (self qualifiedClassNameOf: aMetaData schemaInstance) , ' initialize.'. ^ self finalResult] ! ! !PlatypusExpressStructure2SmalltalkTranslater methodsFor: 'accessing' stamp: 'apl 3/14/2005 13:57'! xtraMethodCategory: name xtraClassname: aClassName schema: aSchema ^ String cr , '!!' , aClassName , ' methodsFor: ''' , '*' , (aSchema systemCategoryFromNamesBuilder: self namesBuilder) , '-' , name , '''!!'! ! !PlatypusExpressStructure2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:30'! expressionTranslaterClassName ^ #PlatypusExpressExpression2VWTranslater! ! !PlatypusExpressStructure2VWTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:29'! statementTranslaterClassName ^ #PlatypusExpressStatement2VWTranslater! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:36'! asXmlText: aString | wStr | wStr := WriteStream on: (String new: aString size). ^ (self writeXmlText: aString on: wStr) contents! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'generating from schemaInstance' stamp: 'AlainPlantec 7/14/2011 16:57'! buildInitializeMethodFromSchemaInstance: e | selector clsName code | clsName := e generatedClassName. selector := 'initialize'. code := ' PlatypusPharoSmalltalk initialize. self reinitializeSingleton. self singleton buildIndexes.'. self fileOutMethodSource: selector , ' ' , code className: clsName meta: true category: 'initializing'! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'generating from entity' stamp: 'apl 1/22/2007 16:45'! buildRootEntityClass super buildRootEntityClass. self fileOutMethodSource: 'new ^ super new stepInitialize' className: self rootClassName meta: true packageName: self rootClassSystemCategory category: 'instance-creation'. self fileOutMethodSource: 'stepInitialize' className: self rootClassName meta: false packageName: self rootClassSystemCategory category: 'initializing'! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 1/18/2007 18:16'! commentFromMetaData: e classname: aClassName self tag: 'comment' do: [self tag: 'class-id' with: self environment , '.' , aClassName. self tag: 'body' do: [self nextPutAllCr: (self asXmlText:PlatypusCoreObject expressSchemaCodeStartMark , String cr , e prettyPrintedExpressCode , String cr ,PlatypusCoreObject expressSchemaCodeStopMark)]]! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'accessing' stamp: 'apl 12/15/2006 22:37'! convertCharDict ^ convertCharDict! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/6/2006 14:02'! fileOutClassDefinition: aClassName superClassName: superClassName instVars: instVars classVars: classVars namespace: namespace packageName: packageName category: aCategoryName self tag: 'class' do: [self tag: 'name' with: aClassName. self tag: 'environment' with: namespace. self tag: 'super' with: superClassName. self tag: 'private' with: 'false'. self tag: 'indexed-type' with: 'none'. self tag: 'inst-vars' with: instVars. self tag: 'class-inst-vars' with: classVars. self tag: 'imports' with: ''. self tag: 'category' with: aCategoryName. self tag: 'attributes' do: [self tag: 'package' with: packageName]]. self buildPlatypusSignatureMethodForClass: aClassName namespace: namespace packageName: packageName category: aCategoryName! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 16:19'! fileOutDoIt: aSource self tag: 'do-it' do: [self nextPutAllCr: aSource ] ! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 2/15/2007 14:55'! fileOutMethodSource: aSource className: aClassName meta: isMeta packageName: packageName category: aCategorySymbol self tag: 'methods' do: [self tag: 'class-id' with: packageName , '.' , aClassName , (isMeta ifTrue: [' class'] ifFalse: ['']). self tag: 'category' with: self namesBuilder methodCategoryPrefix , '-' , aCategorySymbol. self tag: 'body' attributes: 'package="' , packageName , '"' with: (self asXmlText:aSource)]! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:51'! fileOutNamespaceDefinition: aNamespaceName imports: imports environment: envName packageName: packageName category: aCategoryName self tag: 'name-space' do: [self tag: 'name' with: aNamespaceName. self tag: 'environment' with: envName. self tag: 'private' with: 'false'. self tag: 'imports' with: 'private Smalltalk.* Refactory.SmaCC.* Platypus.* ' , imports. self tag: 'category' with: aCategoryName. self tag: 'attributes' do: [self tag: 'package' with: packageName]]! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'accessing' stamp: 'apl 2/14/2007 17:18'! finalResultFrom: aString ^ '' , String cr , '' , String cr , (super finalResultFrom: aString) , ''! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/7/2006 11:09'! indent level timesRepeat: [self nextPutAll: ' ']! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'initialize/release' stamp: 'apl 12/15/2006 22:36'! initialize super initialize. convertCharDict := Dictionary new. 0 to: 31 do: [:each | convertCharDict at: each put: '(' , each asString , ' asCharacter)']. 32 to: 47 do: [:each | convertCharDict at: each put: '&#' , each asString , ';']. 65534 to: 65535 do: [:each | convertCharDict at: each put: '(' , each asString , ' asCharacter)']. convertCharDict at: $& asciiValue put: '&'; at: $< asciiValue put: '<'; at: $> asciiValue put: '>'; at: $' asciiValue put: '''; at: $" asciiValue put: '"'. convertCharDict removeKey: Character space asciiValue; removeKey: Character tab asciiValue; removeKey: Character cr asciiValue; removeKey: Character lf asciiValue. convertCharDict removeKey: $/ asciiValue; removeKey: $- asciiValue; removeKey: $. asciiValue. level := 0. ! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 8/31/2006 12:23'! mapType: aSymbol aSymbol == #normal ifTrue: [^ #none]. aSymbol == #variable ifTrue: [^ #objects]. ^ aSymbol! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/16/2006 00:05'! mcCategory: aCat ^ aCat! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:18'! qualifiedClassNameOf: e ^ e generatedNamespaceName, '.', e generatedClassName! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/6/2006 09:57'! tag: aString attributes: attrString with: contentString self indent. self nextPutAll: '<'; nextPutAll: aString; nextPutAll: ' ' , attrString; nextPutAll: '>'. self nextPutAll: (contentString). self nextPutAll: ''; cr! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/4/2006 19:26'! tag: aString do: aBlock self indent. self nextPutAll: '<'; nextPutAll: aString; nextPutAll: '>'; cr. level := level + 1. aBlock value. level := level - 1. self indent. self nextPutAll: ''; cr! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:02'! tag: aString with: contentString self indent. self nextPutAll: '<'; nextPutAll: aString; nextPutAll: '>'. self nextPutAll: (contentString). self nextPutAll: ''; cr! ! !PlatypusExpressStructure2VWTranslater methodsFor: 'utilities' stamp: 'apl 12/15/2006 22:37'! writeXmlText: aString on: aWriteStream | cDict wStr | cDict := self convertCharDict. wStr := aWriteStream. aString do: [:eachChar | | val | val := eachChar asciiValue. val >= 127 ifTrue: [wStr nextPutAll: '&#'; nextPutAll: val asString; nextPut: $;] ifFalse: [| conv | conv := cDict at: val ifAbsent: []. conv isNil ifTrue: [wStr nextPut: eachChar] ifFalse: [wStr nextPutAll: conv]]]. ^ wStr! ! !PlatypusExpressTranslater class methodsFor: 'instance creation' stamp: 'apl 3/1/2006 08:41'! accept: aMetaData fromTranslater: aTranslater (self new fromTranslater: aTranslater) acceptTry: aMetaData ! ! !PlatypusExpressTranslater class methodsFor: 'instance creation' stamp: 'apl 12/5/2006 18:08'! accept: aMetaData fromTranslater: aTranslater resultStream: aStream | translater | (translater := self new fromTranslater: aTranslater resultStream: aStream ) acceptTry: aMetaData. ^ translater! ! !PlatypusExpressTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:57'! expressionTranslaterClass ^ PlatypusPharoSmalltalk at: self expressionTranslaterClassName ! ! !PlatypusExpressTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:39'! expressionTranslaterClassName ^ self subclassResponsibility ! ! !PlatypusExpressTranslater class methodsFor: 'utilities' stamp: 'apl 2/26/2005 00:12'! fileIn: code | reader chunk st | reader := ReadStream on: code. [reader atEnd] whileFalse: [reader skipSeparators. [(reader peekFor: $!!) ifTrue: [(st := Compiler evaluate: reader nextChunk logged: false) ifNotNil: [st scanFrom: reader]] ifFalse: [chunk := reader nextChunk. reader checkForPreamble: chunk. Compiler evaluate: chunk logged: true]] on: InMidstOfFileinNotification do: [:ex | ex resume: true]. reader skipStyleChunk]. reader close! ! !PlatypusExpressTranslater class methodsFor: 'utilities' stamp: 'apl 2/15/2005 19:54'! fileIn: code message: aMessage self fileIn: code. "Note: The main purpose of this banner is to flush the changes file." SmalltalkImage current logChange: '----End Platypus of ' , aMessage , '----'! ! !PlatypusExpressTranslater class methodsFor: 'instance creation' stamp: 'apl 3/1/2006 08:40'! fromTranslater: aTranslater ^ self new fromTranslater: aTranslater! ! !PlatypusExpressTranslater class methodsFor: 'instance creation' stamp: 'apl 3/1/2006 08:41'! fromTranslater: aTranslater resultStream: aStream ^ self new fromTranslater: aTranslater resultStream: aStream! ! !PlatypusExpressTranslater class methodsFor: 'instance creation' stamp: 'apl 2/11/2005 00:12'! resultStream: anObject ^ self new resultStream: anObject ! ! !PlatypusExpressTranslater class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:57'! statementTranslaterClass ^ PlatypusPharoSmalltalk at: self statementTranslaterClassName! ! !PlatypusExpressTranslater class methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:39'! statementTranslaterClassName ^ self subclassResponsibility! ! !PlatypusExpressTranslater class methodsFor: 'utilities' stamp: 'apl 5/13/2005 11:02'! translate: aMetaData fromTranslater: aTranslater ^(self new fromTranslater: aTranslater resultStream: (WriteStream on: String new)) translate: aMetaData! ! !PlatypusExpressTranslater methodsFor: 'stream utilities' stamp: 'apl 8/31/2006 11:56'! cr self resultStream cr! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:38'! expressionTranslaterClass ^ self class expressionTranslaterClass! ! !PlatypusExpressTranslater methodsFor: 'public accessing' stamp: 'apl 12/5/2006 15:13'! finalResult ^ self finalResultFrom: self result! ! !PlatypusExpressTranslater methodsFor: 'public accessing' stamp: 'apl 12/5/2006 15:07'! finalResultFrom: aString ^ aString! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 3/1/2006 08:37'! fromTranslater: aTranslater self fromTranslater: aTranslater resultStream: aTranslater resultStream! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 3/1/2006 08:37'! fromTranslater: aTranslater resultStream: aStream self requestor: aTranslater. self resultStream: aStream! ! !PlatypusExpressTranslater methodsFor: 'stream utilities' stamp: 'apl 3/2/2005 16:38'! nextPutAll: aString self resultStream nextPutAll: aString! ! !PlatypusExpressTranslater methodsFor: 'stream utilities' stamp: 'apl 2/14/2005 18:16'! nextPutAllCr: aString self nextPutAll: aString , String cr! ! !PlatypusExpressTranslater methodsFor: 'stream utilities' stamp: 'apl 2/14/2005 18:16'! nextPutAllCrCr: aString self nextPutAllCr: aString , String cr! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 3/1/2006 08:35'! requestor ^ requestor! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 3/1/2006 08:35'! requestor: anObject requestor := anObject! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 3/11/2005 09:41'! result ^ self resultStream contents! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:56'! resultStream ^ resultStream ifNil: [resultStream := WriteStream on: String new]! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 2/10/2005 22:57'! resultStream: anObject resultStream := anObject! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 12:38'! schemaInstance ^ self requestor ifNil: [visitPath first schemaInstance] ifNotNil: [self requestor schemaInstance]! ! !PlatypusExpressTranslater methodsFor: 'accessing' stamp: 'apl 2/15/2007 16:38'! statementTranslaterClass ^ self class statementTranslaterClass ! ! !PlatypusExpressTranslater methodsFor: 'public accessing' stamp: 'apl 2/14/2007 17:22'! translate: aMetaData self acceptTry: aMetaData. ^ self result! ! !PlatypusExpressTranslater methodsFor: 'stream utilities' stamp: 'apl 2/28/2006 23:30'! unshunkedString: aString | terminator code | terminator := $!!. code := WriteStream on: String new. aString do: [:c | c = terminator ifTrue: [code nextPut: terminator. code nextPut: terminator] ifFalse: [code nextPut: c]]. ^ code contents! ! !PlatypusModelContentsStepWriter methodsFor: 'visit aggregate data schema' stamp: 'AlainPlantec 5/4/2012 20:42'! acceptAggregateData: e self nextPut: $(. e contents acceptTry: self separatedBy: [self nextPut: $,]. self nextPut: $)! ! !PlatypusModelContentsStepWriter methodsFor: 'visit aggregate data schema' stamp: 'apl 3/17/2006 09:53'! acceptAggregateInitializer: e self nextPut: $(. e contents acceptTry: self separatedBy: [self nextPut: $,]. self nextPut: $)! ! !PlatypusModelContentsStepWriter methodsFor: 'visit aggregate data schema' stamp: 'apl 1/31/2006 14:08'! acceptAggregateInitializerElement: e self acceptTry: e val. self nextPut: $:. e repetition notNil ifTrue: [self acceptTry: e repetition] ifFalse: [self nextPut: $1]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit aggregate data schema' stamp: 'AlainPlantec 5/4/2012 20:44'! acceptAggregateInstance: e self nextPut: $(. e contents do: [:c | c isPltGenericInstance ifTrue: [ outStream nextPut: $#. outStream nextPutAll: c persistentLabel] ifFalse: [c acceptTry: self ] ] separatedBy: [self nextPut: $,]. self nextPut: $)! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 6/13/2012 13:59'! acceptAllParameters: parameters definition: definition fromSimpleRecord: fromSimpleRecord | attrs | definition ifNotNil: [ fromSimpleRecord ifTrue: [attrs := definition explicitAttributes copy] ifFalse: [attrs := definition inheritedExplicitAttributes copy]]. attrs ifNil: [attrs := OrderedCollection new]. attrs := attrs asOrderedCollection. [parameters size < attrs size] whileTrue: [parameters add: PltMissingValue new]. [attrs size < parameters size] whileTrue: [attrs add: nil]. parameters with: attrs do: [:v :a | self acceptParameter: v entity: definition attribute: a fromSimpleRecord: fromSimpleRecord] separatedBy: [p21Syntax ifTrue: [outStream nextPutAll: ', ']]. p21Syntax ifFalse: [parameters notEmpty ifTrue: [outStream nextPut: Character cr]]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:33'! acceptEConstant: e self nextPutAll: 'E' ! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 1/14/2010 11:55'! acceptEntityDefinitionReference: e e ref ifNil: [outStream nextPutAll: e name asUppercase] ifNotNil: [outStream nextPutAll: e ref name asUppercase]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 16:22'! acceptEnumerationValue: e self nextPutAll: '.', e element asUppercase, '.'. ! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 23:04'! acceptExternalGroupRepresentation: e self acceptExternalInstance: e! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 1/16/2007 15:08'! acceptExternalInstance: e self acceptGenericInstance: e. self nextPutAll: '('. e records isNil ifFalse: [ e records size > 1 ifTrue: [self nextPutAll: String cr , String tab]. e records acceptTry: self separatedBy: [self nextPutAll: String cr , String tab]. e records size > 1 ifTrue: [self nextPutAll: String cr]]. self nextPutAll: ');'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 23:04'! acceptExternalRepresentation: e self acceptExternalInstance: e! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:33'! acceptFalseConstant: e self nextPutAll: '.F.'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 14:33'! acceptFileDescription: e self nextPutAll: 'FILE_DESCRIPTION(('. e description do: [:desc | self nextPutAllString: desc] separatedBy: [self nextPut: $,]. self nextPutAll: '),'. self nextPutAllString: e implementationLevel. self nextPutAll: ');'.! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 14:35'! acceptFileName: e self nextPutAll: 'FILE_NAME('. self nextPutAllString: e name. self nextPutAll: ','. self nextPutAllString: e timeStamp. self nextPutAll: ',('. e author do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '),('. e organization do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '),'. self nextPutAllString: e preprocessorVersion. self nextPutAll: ','. self nextPutAllString: e originatingSystem. self nextPutAll: ','. self nextPutAllString: e authorisation. self nextPutAll: ');'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/16/2012 20:16'! acceptFileSchema: e self nextPutAll: 'FILE_SCHEMA(('. e schemaIdentifiers do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '));'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/13/2012 01:58'! acceptGenericInstance: t1 outStream nextPut: $#. outStream nextPutAll: t1 persistentLabel asString. self nextPut: $=. t1 instanceScope ifNotNil: [t1 instanceScope acceptTry: self]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:54'! acceptInstanceScope: e self nextPutAll: '&SCOPE\' withCRs. e owned acceptTry: self separatedBy: [self nextPut: Character cr]. self nextPutAll: '\END_SCOPE' withCRs. e exportList size > 0 ifTrue: [self nextPutAll: ' /'. e exportList acceptTry: self separatedBy: [self nextPutAll: ',']. self nextPutAll: '/\' withCRs] ifFalse: [self nextPut: Character cr]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:33'! acceptIntegerLiteral: e self nextPutAll: e val printString! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 23:05'! acceptInternalGroupRepresentation: e self acceptInternalInstance: e! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/12/2012 12:02'! acceptInternalInstance: e self acceptGenericInstance: e. self acceptTry: e definition. self nextPut: $(. self acceptAllParameters: e parameters copy definition: e definition referenced fromSimpleRecord: false. self nextPutAll: ');'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 2/2/2004 23:05'! acceptInternalRepresentation: e self acceptInternalInstance: e ! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:33'! acceptMissingValue: e self nextPut: $$! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 13:39'! acceptParameter: aParameter entity: definition attribute: anExplicitAttribute fromSimpleRecord: fromSimpleRecord p21Syntax ifFalse: [ outStream nextPut: Character cr. outStream nextPut: Character tab. fromSimpleRecord ifTrue: [outStream nextPut: Character tab]. anExplicitAttribute ifNotNil: [ outStream nextPutAll: anExplicitAttribute name. outStream nextPutAll: ': ']]. (anExplicitAttribute notNil and: [definition isAttributeRedeclared: anExplicitAttribute]) ifTrue: [outStream nextPut: $*] ifFalse: [ aParameter isPltGenericInstance ifTrue: [ outStream nextPut: $#. outStream nextPutAll: aParameter persistentLabel] ifFalse: [aParameter acceptTry: self]. (p21Syntax not or: [self annote]) ifTrue: [ | ann | ann := anExplicitAttribute ifNil: ['?'] ifNotNil: [anExplicitAttribute annotation]. outStream nextPutAll: ' <' , ann, '>']]. ! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptPiConstant: e self nextPutAll: 'PI'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptRealLiteral: e self nextPutAll: e val printString! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptRedefinedAttributeValue: e self nextPut: $*! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/12/2012 12:44'! acceptSimpleRecord: e self acceptTry: e definition. (p21Syntax not and: [e definitionOk]) ifTrue: [outStream nextPut: Character tab]. self nextPut: $(. self acceptAllParameters: e parameters copy definition: e definition referenced fromSimpleRecord: true. (p21Syntax not and: [e parameters notEmpty and: [e definitionOk]]) ifTrue: [outStream nextPut: Character tab]. self nextPut: $)! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 5/27/2004 16:44'! acceptStringLiteral: e self nextPutAllString: e asClearText! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptTrueConstant: e self nextPutAll: '.T.'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptTypedExpression: e e domain ifNotNil: [self nextPutAll: e domain name asUppercase; nextPut: $(]. e expr acceptTry: self. e domain ifNotNil: [self nextPut: $)]! ! !PlatypusModelContentsStepWriter methodsFor: 'visit expressions schema' stamp: 'apl 11/13/2003 12:34'! acceptUnknownConstant: e self nextPutAll: '.U.'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:54'! acceptUserDefinedApplicationInstance: e self nextPut: $#; nextPutAll: e persistentLabel; nextPut: $!!; nextPutAll: e name; nextPut: $(. e parameters acceptTry: self separatedBy: [self nextPut: $,]. self nextPutAll: ');'! ! !PlatypusModelContentsStepWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:54'! acceptUserDefinedHeaderInstance: e self nextPutAll: e name; nextPut: $(. e parameters acceptTry: self separatedBy: [self nextPut: $,]. self nextPutAll: ');'! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 21:36'! annote ^ annote ifNil: [annote := false]! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 21:36'! annote: aBoolean annote := aBoolean! ! !PlatypusModelContentsStepWriter methodsFor: 'initialize/release' stamp: 'apl 5/20/2005 21:49'! initialize super initialize. p21Syntax := true. tokenClassifier := PlatypusExpressTokenClassifier new! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 2/2/2004 14:55'! modelContents ^modelContents! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 2/2/2004 14:55'! modelContents: anObject modelContents := anObject! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 2/12/2007 10:56'! nextPut: aCharacter "| tokenClass | tokenClass := tokenClassifier tokenClassFromCharacter: aCharacter ifAbsent: []. outStream withStyleFor: tokenClass do: [outStream nextPut: aCharacter]" outStream nextPut: aCharacter! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 2/12/2007 10:44'! nextPutAll: aString "| tokenClass | tokenClass := tokenClassifier tokenClassFromString: aString ifAbsent: []. outStream withStyleFor: tokenClass do: [outStream nextPutAll: aString]." outStream nextPutAll: aString! ! !PlatypusModelContentsStepWriter methodsFor: 'visit generic' stamp: 'apl 2/2/2004 14:29'! nextPutAllString: aString self nextPutAll: '''' , (aString copyReplaceAll: '''' with: '''''') , ''''! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 1/10/2004 10:00'! outStream ^outStream! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'apl 1/10/2004 10:00'! outStream: anObject outStream := anObject! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 19:07'! p21Syntax: useP21Syntax p21Syntax := useP21Syntax! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 12:59'! stream: anOutputStream modelContents: aModelContents instance: anInstance p21Syntax: useP21Syntax self outStream: anOutputStream. self modelContents: aModelContents. self p21Syntax: useP21Syntax. self acceptTry: anInstance! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 12:59'! stream: anOutputStream modelContents: aModelContents instance: anInstance p21Syntax: useP21Syntax annote: withTypeAnnotations self outStream: anOutputStream. self modelContents: aModelContents. self p21Syntax: useP21Syntax. self annote: withTypeAnnotations. self acceptTry: anInstance! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 1/11/2010 17:27'! stream: anOutputStream modelContents: aModelContents p21Syntax: useP21Syntax | hinstances instances dateTime | self modelContents: aModelContents. p21Syntax := useP21Syntax. hinstances := modelContents headerInstances. instances := modelContents dataInstances. outStream := anOutputStream. outStream nextPutAll: 'ISO-10303-21;\HEADER;\' withCRs. hinstances acceptTry: self separatedBy: [outStream nextPut: Character cr]. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileName]) not]) ifTrue: [dateTime := Time dateAndTimeNow. self nextPutAll: String cr , 'FILE_NAME('''', ''' , dateTime first yyyymmdd asString , ' ' , dateTime second asString , ''', (''''), (''''), '''', '''', '''');']. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileSchema]) not]) ifTrue: [self nextPutAll: String cr , 'FILE_SCHEMA(('. self modelContents owner schemata do: [:sch | self nextPutAllString: sch name] separatedBy: [outStream nextPut: $,]. outStream nextPutAll: '));']. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileDescription]) not]) ifTrue: [self nextPutAll: String cr , 'FILE_DESCRIPTION(('''', ''''), ''''); ']. outStream nextPutAll: '\ENDSEC;\DATA;\' withCRs. instances acceptTry: self separatedBy: [outStream nextPut: Character cr]. outStream nextPut: Character cr. outStream nextPutAll: 'ENDSEC;\END-ISO-10303-21;\' withCRs! ! !PlatypusModelContentsStepWriter methodsFor: 'accessing' stamp: 'AlainPlantec 5/10/2012 22:29'! stream: anOutputStream modelContents: aModelContents values: values p21Syntax: useP21Syntax self modelContents: aModelContents. outStream := anOutputStream. p21Syntax := useP21Syntax. values acceptTry: self separatedBy: [outStream nextPut: Character cr]! ! !PlatypusSchemaInstanceTokenizer class methodsFor: 'accessing' stamp: 'AlainPlantec 1/14/2013 18:04'! singleton ^ Singleton ifNil: [Singleton := self new]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit aggregate data schema' stamp: 'apl 12/12/2003 13:28'! acceptAggregateInitializer: e self add: '[' asSymbol. self acceptAll: e contents separator: ',' asSymbol. self add: ']' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 11:25'! acceptAggregateInitializerDomain: e self add: '[' asSymbol. self acceptAll: e types separator: ',' asSymbol. self add: ']' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 4/18/2006 13:23'! acceptAggregateInitializerElement: e e val acceptTry: self. e repetition notNil ifTrue: [self add: ':' asSymbol. e repetition acceptTry: self]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit aggregate data schema' stamp: 'apl 12/18/2003 22:01'! acceptAggregateInstance: e self add: '[' asSymbol. self acceptAll: e contents separator: ',' asSymbol. self add: ']' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit generic' stamp: 'apl 4/18/2006 13:25'! acceptAggregationType: e lower: l upper: u symbol: subtype flags: aCollection self add: subtype. l notNil ifTrue: [self add: '[' asSymbol. l acceptTry: self. self add: ':' asSymbol. u notNil ifTrue: [u acceptTry: self] ifFalse: [self add: '?' asSymbol]. self add: ']' asSymbol]. self add: #of. aCollection do: [:f | self add: f]. self acceptTry: e elementType! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:33'! acceptAliasStatement: e self add: #alias. e variable acceptTry: self. self add: ';' asSymbol. e statements acceptTry: self. self add: #'end_alias'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 11/3/2003 10:24'! acceptAliasStatementVariable: e self add: e name; add: #for. e ref acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit generic'! acceptAll: aCollection separator: sep aCollection do: [:each | each acceptTry: self] separatedBy: [self add: sep]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptAssignmentStatement: e e left acceptTry: self. self add: #':='. e rightExpr acceptTry: self. self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:42'! acceptAttribute: e self remarksBefore: e. e redeclaring notNil ifTrue: [self add: #self; add: '\' asSymbol; add: e redeclaring entityRef name; add: '.' asSymbol]. self add: e name! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 4/18/2006 13:17'! acceptAttributeQualifier: e self add: '.' asSymbol; add: e attributeName! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 3/23/2006 16:04'! acceptAttributeReference: e self add: e name! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptBinaryExpression: e (e parenthesis notNil and: [e parenthesis]) ifTrue: [self add: #'(']. e leftExpr acceptTry: self. self add: e operatorSymbol. e rightExpr acceptTry: self. (e parenthesis notNil and: [e parenthesis]) ifTrue: [self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptBinarySupertypeExpression: e (e parenthesis notNil and: [e parenthesis]) ifTrue: [self add: #'(']. e leftExpr acceptTry: self. self add: e operatorSymbol. e rightExpr acceptTry: self. (e parenthesis notNil and: [e parenthesis]) ifTrue: [self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptBinaryType: e self add: #binary. e width notNil ifTrue: [self add: #'('. e width acceptTry: self. self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptBooleanType: e self add: #boolean! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:23'! acceptCardinalityExpression: e e leftExpr acceptTry: self. self add: '{' asSymbol. e card1 acceptTry: self. self add: ',' asSymbol. e card2 acceptTry: self. self add: '}' asSymbol. e rightExpr acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 4/18/2006 13:26'! acceptCaseAction: e self acceptAll: e labels separator: ',' asSymbol. self add: ':' asSymbol. e action acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 4/18/2006 13:26'! acceptCaseStatement: e self add: #case. e selector acceptTry: self. self add: #of. e caseActions acceptTry: self. e caseOtherwise notNil ifTrue: [self add: #otherwise; add: ':' asSymbol. e caseOtherwise acceptTry: self]. self add: #'end_case'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:33'! acceptCompoundStatement: e self add: #begin. e statements acceptTry: self. self add: #end; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:39'! acceptConstantDefinition: e self remarksBefore: e. self add: e name. self add: ':' asSymbol. self acceptTry: e domain. self add: #':='. e initializer acceptTry: self. self add: ';' asSymbol. self remarksAfter: e. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:45'! acceptContextDefinition: e e constants isEmpty ifFalse: [self add: #constant. e constants acceptTry: self. self add: #'end_constant'; add: ';' asSymbol]. e types acceptTry: self. e entities acceptTry: self. e algorithmes acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:40'! acceptDefinedType: e self remarksBefore: e. self add: #type; add: e name; add: '=' asSymbol. self acceptTry: e domain. self add: ';' asSymbol. e whereRules size > 0 ifTrue: [self add: #where. e whereRules acceptTry: self]. self add: #'end_type'; add: ';' asSymbol. self remarksAfter: e. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptDerivedAttribute: e self acceptAttribute: e. self add: ':' asSymbol. self acceptTry: e domain. self add: #':='. e assign acceptTry: self. self add: ';' asSymbol. self remarksAfter: e! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 6/16/2004 10:56'! acceptDictionaryInstanceReference: e self add: e name! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 3/11/2003 10:25'! acceptDomainEquivalentItem: e | | self add: (e nativeItem name). e nativeItem name asLowercase ~= e externalItemId asLowercase ifTrue: [self add: #as; add: e externalItemId]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 3/7/2003 16:57'! acceptElementQualifier: e self add: '[' asSymbol. e index acceptTry: self. self add: ']' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:22'! acceptEmbeddedRemark: e self tokenList add: (PlatypusEmbeddedRemarkToken token: e text)! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptEndSplitmarkStatement: e self add: '{*'; add: #'end_splitmark'; add: '*}'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:01'! acceptEntityDefinition: e | supertypes | self remarksBefore: e. self add: #entity; add: e name. e metaConcept acceptTry: self. e supertypeConstraint acceptTry: self. (supertypes := e supertypes) ifNotNil: [supertypes isEmpty ifFalse: [self add: #subtype. self add: #of; add: #'('. supertypes acceptTry: self separatedBy: [self add: ',' asSymbol]. self add: #')']]. self add: ';' asSymbol. self remarksAfter: e. e explicitAttributesDo: [:ea | ea acceptTry: self]. e derivedAttributes isEmpty ifFalse: [self add: #derive. e derivedAttributes acceptTry: self]. e inverseAttributes isEmpty ifFalse: [self add: #inverse. e inverseAttributes acceptTry: self]. (e uniquenessRules notNil and: [e uniquenessRules notEmpty]) ifTrue: [self add: #unique. e uniquenessRules acceptTry: self]. (e whereRules notNil and: [e whereRules notEmpty]) ifTrue: [self add: #where. e whereRules acceptTry: self]. self add: #'end_entity'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 3/10/2003 22:34'! acceptEntityInstancesSet: e self add: e entityRef name! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptEnumerationType: e self add: #enumeration; add: #of; add: #'('. e elements do: [:l | self add: l] separatedBy: [self add: ',' asSymbol]. self add: #')'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptEnumerationValue: e self add: e element! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptEscapeStatement: e self add: #escape; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 4/13/2006 12:02'! acceptEscapedExpression: e self add: #%. e expr acceptTry: self. self add: #%! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptExplicitAttribute: e self acceptAttribute: e. self add: ':' asSymbol. e optionalFlag ifTrue: [self add: #optional]. self acceptTry: e domain. self add: ';' asSymbol. self remarksAfter: e! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:37'! acceptExternalSchema: e e isPltExternalMetaSchema ifTrue: [self add: #meta] ifFalse: [e isPltUsedSchema ifTrue: [self add: #use] ifFalse: [self add: #reference]]. self add: #from; add: e name. e isPltIncludeSchema ifTrue: [ e explicitlyImportedItems ifNotNil: [e explicitlyImportedItems size > 0 ifTrue: [self add: #'('. self acceptAll: e explicitlyImportedItems separator: ',' asSymbol. self add: #')']]]. self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptFalseConstant: e self add: #false! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:40'! acceptFunctionDeclaration: e self remarksBefore: e. self add: #function; add: e name. e formalParameters isEmpty ifFalse: [self add: #'('. self acceptAll: e formalParameters separator: ';' asSymbol. self add: #')']. self add: ':' asSymbol. self acceptTry: e returnType. self add: ';' asSymbol. self remarksAfter: e. self acceptContextDefinition: e. e locals isEmpty ifFalse: [self add: #local. e locals acceptTry: self. self add: #'end_local'; add: ';' asSymbol]. e statements acceptTry: self. self add: #'end_function'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 4/18/2006 13:32'! acceptGeneralAggregateType: e self add: #aggregate. e typeLabel notNil ifTrue: [self add: ':' asSymbol; add: e typeLabel]. self add: #of. self acceptTry: e elementType! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/12/2012 13:38'! acceptGenericInstance: e | writer | writer := PlatypusModelContentsStepWriter new. writer outStream: (WriteStream on: String new). writer acceptTry: e. self add: writer outStream contents! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 4/18/2006 13:31'! acceptGenericType: e self add: #generic. e typeLabel notNil ifTrue: [self add: ':' asSymbol; add: e typeLabel]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:41'! acceptGlobalRule: e self remarksBefore: e. self add: #rule; add: e name; add: #for; add: #'('. self acceptAll: e forEntities separator: ',' asSymbol. self add: #')'; add: ';' asSymbol. self remarksAfter: e. self acceptContextDefinition: e. e locals isEmpty ifFalse: [self add: #local. e locals acceptTry: self. self add: #'end_local'; add: ';' asSymbol]. e statements acceptTry: self. e whereRules isEmpty ifFalse: [self add: #where. e whereRules acceptTry: self]. self add: #'end_rule'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 3/10/2003 22:21'! acceptGroupQualifier: e self add: #\; add: e groupName! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 2/28/2006 16:43'! acceptIdentifier: e self add: e name. e parameters ifNotNil: [self add: #'('. self acceptAll: e parameters separator: ',' asSymbol. self add: #')']. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:36'! acceptIfStatement: e self add: #if. e selector acceptTry: self. self add: #then. e thenStatements acceptTry: self. (e elseStatements notNil and: [e elseStatements notEmpty]) ifTrue: [self add: #else. e elseStatements acceptTry: self]. self add: #'end_if'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 9/25/2006 13:12'! acceptIncludeSchema: e self acceptExternalSchema: e ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptIncrementControl: e e variable acceptTry: self. self add: #':='. e first acceptTry: self. self add: #to. e last acceptTry: self. e step notNil ifTrue: [self add: #by. e step acceptTry: self]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 3/11/2003 18:44'! acceptIncrementControlVariable: e self add: e variableId! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptIntegerBound: e self add: e boundValue printString! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptIntegerType: e self add: #integer. e precision notNil ifTrue: [self add: #'('. e precision acceptTry: self. self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 10/7/2010 15:59'! acceptInterval: e | andExpression left right | andExpression := e expr. left := andExpression leftExpr. right := andExpression rightExpr. self add: '{' asSymbol. left leftExpr acceptTry: self. self add: left operatorSymbol. left rightExpr acceptTry: self. self add: right operatorSymbol. right rightExpr acceptTry: self. self add: '}' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptInverseAttribute: e self acceptAttribute: e. self add: ':' asSymbol. e minCardinality notNil ifTrue: [e duplicates ifTrue: [self add: #bag; add: '[' asSymbol] ifFalse: [self add: #set; add: '[' asSymbol]. e minCardinality acceptTry: self. self add: ':' asSymbol. e maxCardinality notNil ifTrue: [e maxCardinality acceptTry: self] ifFalse: [self add: '?' asSymbol]. self add: ']' asSymbol; add: #of]. self add: e domain name; add: #for; add: e invertedAttr name; add: ';' asSymbol. self remarksAfter: e! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 3/11/2005 08:44'! acceptLiteral: e self literalEncoder doToken: e val. self add: self literalEncoder flushedContents! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 4/18/2006 13:29'! acceptLocalVariable: e self add: e name; add: ':' asSymbol. self acceptTry: e domain. e initializer notNil ifTrue: [self add: #':='. e initializer acceptTry: self]. self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptLogicalType: e self add: #logical! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 4/7/2006 17:28'! acceptMetaConceptDefinition: e self add: #'{'. e metaExpression acceptTry: self. self add: #'}'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/6/2013 09:59'! acceptMetaMappingDefinition: e self add: #map. e definitionPath do: [:p | self add: p] separatedBy: [self add: #'.']. self add: #=; add: #'{'. e metaExpression acceptTry: self. self add: #'}'; add: #';'; add: #'end_map'; add: #';'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/6/2013 10:01'! acceptMetaMappingRule: e self add: #map. self add: #to. e metaExpression acceptTry: self. self add: #where. e metaCondition acceptTry: self. self add: #';'; add: #'end_map'; add: #';'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptMissingValue: e self add: '?' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 2/16/2005 10:06'! acceptNamedTypeReference: e self add: e name.! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 10:16'! acceptNativeAlgorithme: e e implementations do: [:i | i acceptTry: self]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 2/19/2006 00:01'! acceptNativeCode: e self add: '(*#'. (e languageSignature notNil and: [e languageSignature notEmpty]) ifTrue: [self add: '<' , e languageSignature , '>' , e code] ifFalse: [self add: e code]. self add: '#*)'. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 2/19/2006 00:13'! acceptNativeExpression: e e source acceptTry: self. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 2/19/2006 00:19'! acceptNativeStatement: e e source acceptTry: self. ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 2/17/2006 10:29'! acceptNullStatement: e self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptNumberType: e self add: #number! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptOneofSupertypeExpression: e self add: e operatorSymbol; add: #'('. self acceptAll: e exprList separator: ',' asSymbol. self add: #')'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptOutputStatement: e self add: #|. e output acceptTry: self. self add: #|; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 4/18/2006 13:29'! acceptParameterDefinition: e e byCopy ifFalse: [self add: #var]. self add: e name; add: ':' asSymbol. self acceptTry: e domain! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 2/28/2006 16:40'! acceptProcedureCallStatement: e super acceptProcedureCallStatement: e. self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:41'! acceptProcedureDeclaration: e self remarksBefore: e. self add: #procedure; add: e name. e formalParameters isEmpty ifFalse: [self add: #'('. self acceptAll: e formalParameters separator: ';' asSymbol. self add: #')']. self add: ';' asSymbol. self remarksAfter: e. self acceptContextDefinition: e. e locals isEmpty ifFalse: [self add: #local. e locals acceptTry: self. self add: #'end_local'; add: ';' asSymbol]. e statements acceptTry: self. self add: #'end_procedure'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptQueryExpression: e self add: #query; add: #'('. e variable acceptTry: self. self add: #<*. e aggregateSource acceptTry: self. self add: #|. e suchThat acceptTry: self. self add: #')'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptQueryVariable: e self add: e variableId! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 4/18/2006 13:24'! acceptRangeQualifier: e self add: '[' asSymbol. e index1 acceptTry: self. self add: ':' asSymbol. e index2 acceptTry: self. self add: ']' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 00:39'! acceptRealType: e self add: #real. (e precision notNil) ifTrue: [self add: #'('. e precision acceptTry: self. self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 6/2/2004 09:46'! acceptRedefinedAttributeValue: e ^ self add: #'*'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 9/25/2006 13:13'! acceptReferencedSchema: e self acceptIncludeSchema: e ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 10:41'! acceptRemarkReference: e e remark acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:36'! acceptRepeatStatement: e self add: #repeat. e incrControl notNil ifTrue: [e incrControl acceptTry: self]. e untilControl notNil ifTrue: [self add: #until. e untilControl acceptTry: self]. e whileControl notNil ifTrue: [self add: #while. e whileControl acceptTry: self]. self add: ';' asSymbol. e statements notNil ifTrue: [e statements acceptTry: self]. self add: #'end_repeat'; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptReturnStatement: e self add: #return. e returned notNil ifTrue: [self add: #'('. e returned acceptTry: self. self add: #')']. self add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 9/19/2007 11:34'! acceptSchemaDefinition: e self remarksBefore: e. self add: #schema; add: e name; add: ';' asSymbol. self remarksAfter: e. e interface acceptTry: self. self acceptContextDefinition: e. e globalRules acceptTry: self. e mappings acceptTry: self. self addEol; add: #'end_schema'; add: ';' asSymbol; addEol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 11:24'! acceptSelectType: e self add: #select. self add: #'('. e selections do: [:s | self acceptTry: s] separatedBy: [self add: ',' asSymbol]. self add: #')'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptSelfIdentifier: e self add: #self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptSimpleUnaryExpression: e self add: e operatorSymbol. e expr acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptSkipStatement: e self add: #skip; add: ';' asSymbol! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit statements schema'! acceptSplitmarkStatement: e self add: #'{*'; add: #splitmark. e filename acceptTry: self. self add: #'*}'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema'! acceptStringType: e self add: #string. e width notNil ifTrue: [self add: #'('. e width acceptTry: self. self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 11/26/2003 14:01'! acceptSubEntityRefExpression: e self add: e entityRef name! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/14/2012 23:04'! acceptSupertypeConstraint: e (e constrained ref notNil and: [e constrained ref instantiable]) ifTrue: [self add: #supertype] ifFalse: [self add: #abstract; add: #supertype]. e expr notNil ifTrue: [self add: #of; add: #'('. e expr acceptTry: self. self add: #')']! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:18'! acceptTailRemark: e self tokenList add: (PlatypusTailRemarkToken token: e text)! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptTrueConstant: e self add: #true! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema' stamp: 'apl 11/26/2003 14:01'! acceptTypedExpression: e self add: e domain name; add: #'('. e expr acceptTry: self. self add: #')'! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:45'! acceptUniquenessRule: e self remarksBefore: e. e label notNil ifTrue: [self add: e label; add: ':' asSymbol]. e attributes do: [:a | self add: a name] separatedBy: [self add: ',' asSymbol]. self add: ';' asSymbol. self remarksAfter: e! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit expressions schema'! acceptUnknownConstant: e self add: #unknown! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 9/25/2006 13:13'! acceptUsedSchema: e self acceptIncludeSchema: e ! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:45'! acceptWhereRule: e self remarksBefore: e. e label notNil ifTrue: [self add: e label; add: ':' asSymbol]. e whereValue acceptTry: self. self add: ';' asSymbol. self remarksAfter: e! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'adding' stamp: 'apl 5/20/2005 19:04'! add: aLexicalElement | tokenClass | tokenClass := tokenClassifier tokenClassFromString: aLexicalElement ifAbsent: [PlatypusIdentifierToken]. self tokenList add: (tokenClass token: aLexicalElement)! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'adding' stamp: 'apl 7/26/2004 23:18'! addAll: aCollection aCollection do: [:e | self add: e]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'adding' stamp: 'apl 5/20/2005 19:02'! addEol self tokenList add: PlatypusEolToken new! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'initializing' stamp: 'apl 5/20/2005 21:50'! initialize tokenList := PlatypusTokenList new. tokenClassifier := PlatypusExpressTokenClassifier new. super initialize! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'accessing' stamp: 'apl 3/11/2005 15:41'! literalEncoder ^ literalEncoder ifNil: [literalEncoder := PlatypusCoreRepositoryStepFileWriter new]! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 10:50'! remarksAfter: e (e relatedRemarks select: [:r | r isPltTailRemark]) acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 10:50'! remarksBefore: e (e relatedRemarks select: [:r | r isPltEmbeddedRemark]) acceptTry: self! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'accessing' stamp: 'apl 11/12/2003 11:38'! tokenList ^ tokenList! ! !PlatypusSchemaInstanceTokenizer methodsFor: 'public tokenizing' stamp: 'AlainPlantec 1/14/2013 18:04'! tokenize: anPlatypusDictionaryInstance tokenList := PlatypusTokenList new. self acceptTry: anPlatypusDictionaryInstance. ^ self tokenList! ! !PlatypusSmartNamer class methodsFor: 'instance creation' stamp: 'apl 1/20/2007 10:02'! query: aQuerySymbol namesBuilder: aNameBuilder ^ self new query: aQuerySymbol namesBuilder: aNameBuilder! ! !PlatypusSmartNamer class methodsFor: 'accessing' stamp: 'apl 1/20/2007 09:51'! querySymbols ^ #(#argName #smalltalkType #smalltalkInitializingExpression)! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptAggregationType: e | suffix | query = #smalltalkType ifTrue: [^ 'OrderedCollection']. query = #smalltalkInitializingExpression ifTrue: [^ 'OrderedCollection new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'aCollectionOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptArrayType: e | suffix | query = #smalltalkType ifTrue: [^ 'OrderedCollection']. query = #smalltalkInitializingExpression ifTrue: [^ 'OrderedCollection new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'anArrayOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptBagType: e | suffix | query = #smalltalkType ifTrue: [^ 'Bag']. query = #smalltalkInitializingExpression ifTrue: [^ 'Bag new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'aBagOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptBinaryType: e query = #smalltalkType ifTrue: [^ 'ByteArray']. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'aBinary']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptBooleanType: e query = #smalltalkType ifTrue: [^ 'Boolean']. query = #smalltalkInitializingExpression ifTrue: [^ 'false']. query = #argName ifTrue: [^ 'aBoolean']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptDefinedType: e ^ e domain acceptTry: self! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 10:18'! acceptEntityDefinition: e query = #smalltalkType ifTrue: [^ e generatedClassNameFromNamesBuilder: namesBuilder]. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'a' , (e generatedClassNameFromNamesBuilder: namesBuilder)]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptEntityDefinitionReference: e ^ self acceptEntityDefinition: e referenced! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptEntityInstance: e query = #smalltalkType ifTrue: [^ 'Object']. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'anObject']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 10:19'! acceptEnumerationType: e query = #smalltalkType ifTrue: [^ 'Symbol']. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'a' , (e owner generatedClassNameFromNamesBuilder: namesBuilder) , 'Symbol']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:50'! acceptGeneralAggregateType: e | suffix | query = #smalltalkType ifTrue: [^ 'OrderedCollection']. query = #smalltalkInitializingExpression ifTrue: [^ 'OrderedCollection new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'aCollectionOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptGenericType: e ^ self acceptEntityInstance: e ! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptIntegerType: e query = #smalltalkType ifTrue: [^ 'Integer']. query = #smalltalkInitializingExpression ifTrue: [^ '0']. query = #argName ifTrue: [^ 'anInteger']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptListType: e | suffix | query = #smalltalkType ifTrue: [^ 'OrderedCollection']. query = #smalltalkInitializingExpression ifTrue: [^ 'OrderedCollection new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'aListOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptLogicalType: e query = #smalltalkType ifTrue: [^ 'Boolean']. query = #smalltalkInitializingExpression ifTrue: [^ 'false']. query = #argName ifTrue: [^ 'aLogical']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptNamedTypeReference: e "query = #smalltalkType ifTrue: [^ self translater classNameFromNamedType: e]. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'a' , (self translater classNameFromNamedType: e)]. ^ self signal error: 'invalid query'" ^ e referenced acceptTry: self! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptNumberType: e query = #smalltalkType ifTrue: [^ 'Number']. query = #smalltalkInitializingExpression ifTrue: [^ '0.0']. query = #argName ifTrue: [^ 'aNumber']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptRealType: e query = #smalltalkType ifTrue: [^ 'Float']. query = #smalltalkInitializingExpression ifTrue: [^ '0.0']. query = #argName ifTrue: [^ 'aReal']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 10:12'! acceptSelectType: e query = #smalltalkType ifTrue: [^ 'Object']. query = #smalltalkInitializingExpression ifTrue: [^ 'nil']. query = #argName ifTrue: [^ 'a' , (e owner generatedClassNameFromNamesBuilder: namesBuilder)]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptSetType: e | suffix | query = #smalltalkType ifTrue: [^ 'Set']. query = #smalltalkInitializingExpression ifTrue: [^ 'Set new']. query = #argName ifTrue: [suffix := self argNameSuffixFor: e elementType. ^ 'aSetOf' , suffix]. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2007 09:51'! acceptStringType: e query = #smalltalkType ifTrue: [^ 'String']. query = #smalltalkInitializingExpression ifTrue: [^ '''''']. query = #argName ifTrue: [^ 'aString']. ^ self signal error: 'invalid query'! ! !PlatypusSmartNamer methodsFor: 'querying' stamp: 'apl 1/20/2007 10:12'! argNameSuffixFor: aMetaData | argname | argname := namesBuilder argNameFor: aMetaData. argname size = 1 ifTrue: [^ argname]. argname first = $a ifTrue: [argname := argname copyFrom: 2 to: argname size]. argname size = 1 ifTrue: [^ argname]. argname first = $n ifTrue: [argname := argname copyFrom: 2 to: argname size]. ^ argname! ! !PlatypusSmartNamer methodsFor: 'accessing' stamp: 'apl 1/20/2007 10:02'! query: anObject namesBuilder: aNameBuilder query := anObject. namesBuilder := aNameBuilder! ! !PlatypusStepAbstractVisitor methodsFor: 'visit aggregate data schema' stamp: 'apl 3/17/2006 09:37'! acceptAggregateData: e e contents acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/17/2006 09:37'! acceptAggregateInitializer: e e contents acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:20'! acceptAggregateInitializerElement: e self acceptTry: e val. e repetition acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit aggregate data schema' stamp: 'apl 5/29/2004 17:14'! acceptAggregateInstance: e e lowerBound acceptTry: self. e upperBound acceptTry: self. self acceptAggregateData: e.! ! !PlatypusStepAbstractVisitor methodsFor: 'visit generic' stamp: 'apl 7/20/2004 01:51'! acceptAggregationType: e lower: l upper: u symbol: subtype flags: aCollection l notNil ifTrue: [l acceptTry: self. u notNil ifTrue: [u acceptTry: self]]. self acceptTry: e elementType. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:37'! acceptAlgorithmDeclaration: e e formalParameters acceptTry: self. self acceptStatementsContainer: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:37'! acceptAliasStatement: e e variable acceptTry: self. e statements acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptAliasStatementVariable: e e ref acceptTry: self ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 12/21/2003 10:36'! acceptAnonymousVariable: e ^ self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 10/7/2010 16:02'! acceptArrayType: e | flags | flags := OrderedCollection new. e uniqueFlag ifTrue: [flags add: #unique]. e optionalFlag ifTrue: [flags add: #optional]. self acceptAggregationType: e lower: e lowerBound upper: e upperBound symbol: #array flags: flags ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'AlainPlantec 5/20/2012 00:51'! acceptAssignable: e e head acceptTry: self. e qualifiers acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptAssignmentStatement: e e left acceptTry: self. e rightExpr acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/10/2003 22:15'! acceptAttributeQualifier: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/23/2006 16:03'! acceptAttributeReference: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptBagType: e self acceptVariableSizeAggregationType: e symbol: #bag flags: #() ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptBinaryExpression: e e leftExpr acceptTry: self. e rightExpr acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptBinarySupertypeExpression: e e leftExpr acceptTry: self. e rightExpr acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:38'! acceptBinaryType: e e width acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptBooleanType: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:23'! acceptCardinalityExpression: e e leftExpr acceptTry: self. e card1 acceptTry: self. e card2 acceptTry: self. e rightExpr acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:37'! acceptCaseAction: e e labels acceptTry: self. e action acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:38'! acceptCaseStatement: e e selector acceptTry: self. e caseActions acceptTry: self. e caseOtherwise notNil ifTrue: [e caseOtherwise acceptTry: self]! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:38'! acceptCompoundStatement: e e statements acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 11:24'! acceptConstantDefinition: e self acceptTry: e domain. e initializer acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:38'! acceptContextDefinition: e e constants acceptTry: self. e types acceptTry: self. e entities acceptTry: self. e algorithmes acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/23/2006 10:32'! acceptDefinedType: e e domain acceptTry: self. self acceptNamedType: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 15:28'! acceptDerivedAttribute: e self acceptTry: e domain. e assign acceptTry: self. e redeclaring acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 6/16/2004 10:51'! acceptDictionaryInstanceReference: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:44'! acceptDomainEquivalentItem: e e nativeItem acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/7/2003 16:57'! acceptElementQualifier: e e index acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptEndSplitmarkStatement: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/29/2006 13:36'! acceptEntityDefinition: e e supertypeConstraint acceptTry: self. e supertypes acceptTry: self. e attributes acceptTry: self. e uniquenessRules acceptTry: self. self acceptNamedType: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 7/20/2004 11:24'! acceptEntityInstancesSet: e ^ self acceptTry: e entityRef! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptEnumerationType: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/14/2012 15:28'! acceptEnumerationValue: e ^ e domain acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptEscapeStatement: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 4/13/2006 11:57'! acceptEscapedExpression: e e expr acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2006 15:51'! acceptExplicitAttribute: e self acceptTry: e domain. e redeclaring acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 13:11'! acceptExternalMetaSchema: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:39'! acceptExternalRepresentation: e self acceptGenericInstance: e. e records acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:38'! acceptExternalSchema: e ^ self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptFalseConstant: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 11/7/2003 14:56'! acceptFileDescription: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 11/7/2003 14:56'! acceptFileName: e ^ self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 11/7/2003 14:57'! acceptFileSchema: e ^ self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 15:08'! acceptFunctionDeclaration: e self acceptAlgorithmDeclaration: e. e returnType acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 11:24'! acceptGeneralAggregateType: e self acceptTry: e elementType! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/13/2012 01:58'! acceptGenericInstance: e e instanceScope acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/7/2003 17:01'! acceptGenericType: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:39'! acceptGlobalRule: e self acceptStatementsContainer: e. e forEntities acceptTry: self. e whereRules acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/10/2003 22:21'! acceptGroupQualifier: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 7/20/2004 11:11'! acceptIdentifier: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:39'! acceptIfStatement: e e selector acceptTry: self. e thenStatements acceptTry: self. e elseStatements acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:26'! acceptIncludeSchema: e e explicitlyImportedItems acceptTry: self. e implicitlyImportedItems acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:22'! acceptIncrementControl: e e variable acceptTry: self. e first acceptTry: self. e last acceptTry: self. e step acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptIncrementControlVariable: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:40'! acceptInstanceScope: e e owned acceptTry: self. e exportList acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptIntegerBound: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2006 15:51'! acceptIntegerType: e e precision acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:40'! acceptInternalRepresentation: e self acceptGenericInstance: e. e parameters acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 6/18/2004 18:43'! acceptInterval: e e expr acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2006 15:51'! acceptInverseAttribute: e e invertedAttr acceptTry: self. e minCardinality acceptTry: self. e maxCardinality acceptTry: self. e redeclaring acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/7/2003 17:02'! acceptListType: e e uniqueFlag ifTrue: [self acceptVariableSizeAggregationType: e symbol: #list flags: #(#unique )] ifFalse: [self acceptVariableSizeAggregationType: e symbol: #list flags: #()] ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/10/2003 23:43'! acceptLiteral: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2006 15:52'! acceptLocalVariable: e self acceptTry: e domain. e initializer acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptLogicalType: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/18/2006 14:48'! acceptMetaConceptDefinition: e ^ self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 9/19/2007 10:11'! acceptMetaMappingDefinition: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'MrCleaner 1/20/2011 21:16'! acceptMetaMappingRule: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptMissingValue: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit environment schema' stamp: 'AlainPlantec 10/14/2010 21:40'! acceptModelContents: e e headerInstances acceptTry: self. e dataInstances do: [:v | v acceptTry: self]! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:40'! acceptNamedType: e e whereRules acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/23/2004 11:03'! acceptNamedTypeReference: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:40'! acceptNativeAlgorithm: e e implementations acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 2/10/2006 13:19'! acceptNativeCode: e ^ self ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 2/17/2006 08:50'! acceptNativeExpression: e e source acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 2/10/2006 11:32'! acceptNativeStatement: e e source acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 12/19/2003 13:55'! acceptNullStatement: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptNumberType: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:41'! acceptOneofSupertypeExpression: e e exprList acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptOutputStatement: e e output acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 11:22'! acceptParameterDefinition: e self acceptTry: e domain! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptPopulationDependentBound: e e boundValue acceptTry: self ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 5/24/2004 15:53'! acceptProcedureCallStatement: e e call acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 6/18/2004 20:05'! acceptProcedureDeclaration: e self acceptAlgorithmDeclaration: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 3/17/2006 09:41'! acceptQualifiedExpression: e e head acceptTry: self. e qualifiers acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 1/28/2011 11:36'! acceptQueryExpression: e e variable acceptTry: self. e aggregateSource acceptTry: self. e suchThat acceptTry: self ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptQueryVariable: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptRangeQualifier: e e index1 acceptTry: self. e index2 acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/15/2006 15:52'! acceptRealType: e e precision acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'apl 11/7/2003 16:24'! acceptRedefinedAttributeValue: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:27'! acceptReferencedSchema: e self acceptIncludeSchema: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 11/6/2003 22:16'! acceptRemark: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 9/21/2006 15:52'! acceptRemarkReference: e e inside ref ifNil: [e inside ref: (self schemaInstance lookUpSchemaDefinitionBN: e inside name)]. e remark acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/17/2006 09:41'! acceptRepeatStatement: e e incrControl acceptTry: self. e untilControl acceptTry: self. e whileControl acceptTry: self. e statements acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:25'! acceptReturnStatement: e e returned acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 10/19/2010 01:08'! acceptSchemaDefinition: e e interface acceptTry: self. self acceptContextDefinition: e. e globalRules acceptTry: self. e remarkReferences acceptTry: self. e mappings acceptTry: self.! ! !PlatypusStepAbstractVisitor methodsFor: 'visit environment schema' stamp: 'apl 3/29/2006 13:56'! acceptSchemaInstance: e e schemataLinkedMetaData acceptTry: self. e metaConceptsIndex acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:42'! acceptSelectType: e e selections acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptSelfIdentifier: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptSetType: e self acceptVariableSizeAggregationType: e symbol: #set flags: #() ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:42'! acceptSimpleRecord: e e parameters acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptSimpleUnaryExpression: e e expr acceptTry: self ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptSkipStatement: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit statements schema'! acceptSplitmarkStatement: e e filename acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:42'! acceptStatementsContainer: e e locals acceptTry: self. self acceptContextDefinition: e. e statements acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:10'! acceptStringType: e e width acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:11'! acceptSubEntityRefExpression: e self acceptTry: e entityRef! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:13'! acceptSupertypeConstraint: e e constrained acceptTry: self. e expr acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptTrueConstant: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptTypedExpression: e e expr acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:43'! acceptUniquenessRule: e e attributes acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit expressions schema'! acceptUnknownConstant: e ! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:27'! acceptUsedSchema: e self acceptIncludeSchema: e! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:43'! acceptUserDefinedApplicationInstance: e e parameters acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:43'! acceptUserDefinedHeaderInstance: e e parameters acceptTry: self! ! !PlatypusStepAbstractVisitor methodsFor: 'visit generic'! acceptVariableSizeAggregationType: e symbol: aSymbol flags: aCollection self acceptAggregationType: e lower: e lowerBound upper: e upperBound symbol: aSymbol flags: aCollection! ! !PlatypusStepAbstractVisitor methodsFor: 'visit dictionary schema'! acceptWhereRule: e e whereValue acceptTry: self. ! ! !PlatypusStepAbstractVisitor methodsFor: 'type checking' stamp: 'apl 7/22/2004 17:17'! checkAssignmentOf: aValue to: anAssignable | leftDomain rightDomain | (self value: aValue isAssignableTo: anAssignable) ifFalse: [ leftDomain := anAssignable computedDomain. rightDomain := aValue computedDomain. PlatypusExpressIncompatibleDomainInAssignmentException signal: 'lhs domain : ' , leftDomain prettyPrintedExpressCode , '; rhs domain : ' , rightDomain prettyPrintedExpressCode]. ^ true! ! !PlatypusStepAbstractVisitor methodsFor: 'accessing' stamp: 'apl 9/8/2006 18:19'! lookUpIdentifierBN: name | found | visitPath reverseDo: [:el | (found := el lookUpIdentifierBN: name) ifNotNil: [^ found]]. ^ nil! ! !PlatypusStepAbstractVisitor methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:37'! lookUpNamedTypeBN: name | found | visitPath reverseDo: [:el | (found := el lookUpNamedTypeBN: name) ifNotNil: [^found]]. ^nil! ! !PlatypusStepAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/24/2006 19:00'! schemaDefinition ^ visitPath asArray reversed detect: [:e | e isPltSchemaDefinition ]! ! !PlatypusStepAbstractVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 12:39'! schemaInstance ^ visitPath notEmpty ifTrue: [visitPath first schemaInstance] ifFalse: [nil]! ! !PlatypusStepAbstractVisitor methodsFor: 'error handling' stamp: 'AlainPlantec 6/14/2012 00:39'! showInterpreterErrorOnSource: error | e | e := PlatypusExpressInterpretorError metaData: visitPath last message: error messageText. self registerError: e. self schemaInstance addError: e. PlatypusExpressEditor openWithSourceHandler: self schemaInstance tamarisItemRef windowLabel: 'Error: ' , error messageText! ! !PlatypusStepAbstractVisitor methodsFor: 'type checking' stamp: 'apl 2/19/2006 20:20'! value: aValue isAssignableTo: anAssignable | leftDomain rightDomain | self checksAssignments ifTrue: [leftDomain := anAssignable domain. rightDomain := aValue computedDomain. ^ rightDomain isAssignableTo: leftDomain]. ^ true! ! !PlatypusExpressInterfaceBuilder class methodsFor: 'instance creation' stamp: 'apl 5/19/2004 09:33'! exportedPrimariesElementsOf: aDictionaryInstance | interfaceBuilder | interfaceBuilder := self new. interfaceBuilder acceptTry: aDictionaryInstance. ^ interfaceBuilder! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:29'! acceptAlgorithmDeclaration: e self acceptContextDefinition: e. self addInInterface: e. e formalParameters acceptTry: self! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 6/18/2004 15:31'! acceptConstantDefinition: e self addInInterface: e. e domain acceptTry: self. e initializer acceptTry: self! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:29'! acceptExternalSchema: e super acceptExternalSchema: e. ! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:29'! acceptGlobalRule: e self addInInterface: e. e forEntities acceptTry: self! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:29'! acceptIncludeSchema: e super acceptIncludeSchema: e. e nativeSchema ifNotNil: [e nativeSchema acceptTry: self]! ! !PlatypusExpressInterfaceBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:29'! acceptNamedType: e self addInInterface: e. e whereRules acceptTry: self! ! !PlatypusExpressInterfaceBuilder methodsFor: 'accessing' stamp: 'apl 4/1/2003 19:39'! addInInterface: e interface add: e! ! !PlatypusExpressInterfaceBuilder methodsFor: 'initialize/release' stamp: 'apl 6/14/2004 19:23'! initialize super initialize. interface := IdentitySet new! ! !PlatypusExpressInterfaceBuilder methodsFor: 'accessing' stamp: 'apl 6/13/2003 14:27'! interface ^ interface ! ! !PlatypusExpressTypeOfBuilder class methodsFor: 'instance creation' stamp: 'apl 6/14/2004 19:31'! typeOfSetFor: anElement ^ self new typeOfSetFor: anElement ! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 6/14/2004 19:26'! acceptAggregateInitializerDomain: e resultSet add: (PltStringLiteral val: 'LIST')! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 6/14/2004 19:26'! acceptAggregationType: e resultSet add: (PltStringLiteral val: e expressTypeForTypeOf)! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2004 23:38'! acceptAnonymousVariable: e e domain acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/30/2004 09:26'! acceptBinarySupertypeExpression: e "e leftExpr acceptTry: self. e rightExpr acceptTry: self" ^ nil! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit native ' stamp: 'apl 2/2/2006 08:22'! acceptCollection: e resultSet add: (PltStringLiteral val: 'AGGREGATE')! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2004 21:29'! acceptConstantDefinition: e e domain acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2004 21:28'! acceptDefinedType: e self acceptNamedType: e. e domain acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 5/26/2004 23:40'! acceptDictionaryInstanceReference: e e ref ifNotNil: [self acceptTry: e ref]! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:31'! acceptEntityDefinition: e self acceptNamedType: e. e supertypes acceptTry: self. e supertypeConstraint acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/21/2004 11:56'! acceptEnumerationType: e ^ e owner acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/21/2004 11:57'! acceptGenericType: e ^ self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/20/2004 21:40'! acceptLocalVariable: e e domain acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 6/14/2004 19:26'! acceptNamedType: e resultSet add: (PltStringLiteral val: e expressTypeForTypeOf)! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit native ' stamp: 'apl 2/2/2006 09:38'! acceptObject: e ^ self acceptTry: e class platypusMetaData ! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/30/2004 09:26'! acceptOneofSupertypeExpression: e "self acceptAll: e exprList" ^ nil! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/17/2006 09:31'! acceptSelectType: e e selections acceptTry: self! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 6/14/2004 19:26'! acceptSimpleType: e resultSet add: (PltStringLiteral val: e expressTypeForTypeOf)! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:11'! acceptSubEntityRefExpression: e ^ nil! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 1/30/2004 09:27'! acceptSupertypeConstraint: e "e expr ifNotNil: [e expr acceptTry: self]" ^ nil! ! !PlatypusExpressTypeOfBuilder methodsFor: 'initialize/release' stamp: 'apl 1/20/2004 21:24'! initialize super initialize. resultSet := Set new! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit generic' stamp: 'apl 2/14/2007 16:17'! lookUpAndCacheAcceptSelectorOfClass: aClass | currClass selector | currClass := aClass. [currClass ~~ nil] whileTrue: [(currClass class canUnderstand: #platypusMetaData) ifTrue: [selector := (#accept , (PlatypusNamesBuilder capitalize: currClass platypusMetaData name first: true) , ':') asSymbol] ifFalse: [selector := (#accept , currClass name , ':') asSymbol]. (self class includesSelector: selector) ifTrue: [self acceptSelectorsMap at: aClass put: selector. ^ selector]. currClass := currClass superclass]. ^ self error: 'unimplemented accept method for class ''' , aClass name , ''''! ! !PlatypusExpressTypeOfBuilder methodsFor: 'visit generic' stamp: 'apl 6/14/2004 19:28'! typeOfSetFor: anElement startElement := anElement. anElement acceptTry: self. ^ resultSet! ! !PlatypusInstanceDoer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 14:55'! acceptAggregateData: e e contents doWithIndex: [:v :p | action value: e contents value: p. self acceptTry: v]! ! !PlatypusInstanceDoer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 14:54'! acceptExternalRepresentation: e e records doWithIndex: [:v :p | action value: e records value: p. self acceptTry: v]! ! !PlatypusInstanceDoer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 14:48'! acceptInternalRepresentation: e e parameters doWithIndex: [:v :p | action value: e parameters value: p. self acceptTry: v]! ! !PlatypusInstanceDoer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 14:55'! acceptModelContents: e self modelContents: e. e dataInstances doWithIndex: [:v :p | (sourceCollection includes: v) ifTrue: [ action value: e dataInstances value: p. self acceptTry: v]]! ! !PlatypusInstanceDoer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 14:54'! acceptSimpleRecord: e e parameters doWithIndex: [:v :p | action value: e parameters value: p. self acceptTry: v]! ! !PlatypusInstanceDoer methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 15:00'! do: aBlock from: aCollection in: aModelContents action := aBlock. sourceCollection := aCollection. self acceptTry: aModelContents. ! ! !PlatypusInstanceDoer methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 14:18'! modelContents: anObject modelContents := anObject! ! !PlatypusInstanceReplacer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/5/2012 01:37'! acceptAggregateData: e e contents doWithIndex: [:v :p | index at: v ifPresent: [:found | e contents at: p put: found] ifAbsent: [self acceptTry: v]]! ! !PlatypusInstanceReplacer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/8/2012 13:07'! acceptExternalRepresentation: e e records doWithIndex: [:v :p | index at: v ifPresent: [:found | e records at: p put: found] ifAbsent: [self acceptTry: v]]! ! !PlatypusInstanceReplacer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/5/2012 01:37'! acceptInternalRepresentation: e e parameters doWithIndex: [:v :p | index at: v ifPresent: [:found | e parameters at: p put: found] ifAbsent: [self acceptTry: v]]! ! !PlatypusInstanceReplacer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/5/2012 01:36'! acceptSimpleRecord: e e parameters doWithIndex: [:v :p | index at: v ifPresent: [:found | e parameters at: p put: found] ifAbsent: [self acceptTry: v]]! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 23:33'! modelContents: anObject modelContents := anObject! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/5/2012 01:50'! remove: oldInst from: aModelContents | idx | idx := IdentityDictionary new. idx at: oldInst put: PltMissingValue new. self removeIndex: idx from: aModelContents! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 16:29'! removeIndex: aDictionary from: aModelContents index := aDictionary. self modelContents: aModelContents. self acceptTry: aModelContents. aDictionary keysAndValuesDo: [:k :v | | pos newInst oldInst | oldInst := k. newInst := v. pos := aModelContents indexOf: oldInst. pos > 0 ifTrue: [ aModelContents dataInstances remove: oldInst. aModelContents removeFromIndexes: oldInst]]. ! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 22:24'! replace: oldInst with: newInst in: aModelContents self modelContents: aModelContents. self replaceInIndexes: oldInst with: newInst. index := IdentityDictionary new. index at: oldInst put: newInst. self acceptTry: aModelContents. ! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 11:14'! replaceInIndexes: oldInst with: newInst | pos | newInst persistentLabel: oldInst persistentLabel. newInst owningModel: modelContents. newInst computed: oldInst computed. pos := modelContents indexOf: newInst. pos > 0 ifTrue: [ modelContents privateRemove: newInst. modelContents dataInstances at: pos put: nil]. pos := modelContents indexOf: oldInst. pos > 0 ifTrue: [ modelContents privateRemove: oldInst. modelContents dataInstances at: pos put: newInst]. modelContents addToIndexes: newInst withPosition: pos. ! ! !PlatypusInstanceReplacer methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 14:52'! replaceIndex: aDictionary in: aModelContents index := aDictionary. self modelContents: aModelContents. self acceptTry: aModelContents. aDictionary keysAndValuesDo: [:k :v | self replaceInIndexes: k with: v]. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit aggregate data schema' stamp: 'apl 3/22/2006 11:25'! acceptAggregateData: e super acceptAggregateData: e. e fastSetContents: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:24'! acceptAggregateInitializer: e super acceptAggregateInitializer: e . e fastSetContents: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:25'! acceptAggregateInitializerElement: e super acceptAggregateInitializerElement: e. e val: nil. e repetition: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit aggregate data schema' stamp: 'apl 3/22/2006 11:26'! acceptAggregateInstance: e super acceptAggregateInstance: e. e lowerBound: nil. e upperBound: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:35'! acceptAlgorithmDeclaration: e super acceptAlgorithmDeclaration: e. e fastSetFormalParameters: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:15'! acceptAliasStatement: e super acceptAliasStatement: e. e variable: nil. e fastSetStatements: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:15'! acceptAliasStatementVariable: e super acceptAliasStatementVariable: e . e ref: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:16'! acceptAnonymousVariable: e e domain acceptTry: self. e domain: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:35'! acceptArrayType: e super acceptArrayType: e. e elementType: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:17'! acceptAssignable: e super acceptAssignable: e. e head: nil. e fastSetQualifiers: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:17'! acceptAssignmentStatement: e super acceptAssignmentStatement: e . e left: nil. e rightExpr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 14:14'! acceptAttributeQualifier: e super acceptAttributeQualifier: e. e owner: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:36'! acceptAttributeReference: e e ref: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:36'! acceptBagType: e super acceptBagType: e. e elementType: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:24'! acceptBinaryExpression: e super acceptBinaryExpression: e . e leftExpr: nil. e rightExpr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:37'! acceptBinarySupertypeExpression: e super acceptBinarySupertypeExpression: e. e leftExpr: nil. e rightExpr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:37'! acceptBinaryType: e super acceptBinaryType: e. e width: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:24'! acceptCardinalityExpression: e super acceptCardinalityExpression: e. e leftExpr: nil. e card1: nil. e card2: nil. e rightExpr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:18'! acceptCaseAction: e super acceptCaseAction: e. e fastSetLabels: nil. e action: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:19'! acceptCaseStatement: e super acceptCaseStatement: e. e selector: nil. e fastSetCaseActions: nil. e caseOtherwise: nil ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:19'! acceptCompoundStatement: e super acceptCompoundStatement: e . e statements: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:38'! acceptConstantDefinition: e super acceptConstantDefinition: e. e domain: nil. e initializer: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/29/2006 13:49'! acceptContextDefinition: e super acceptContextDefinition: e. e removeMetaConcept. e owner: nil. e fastSetConstants: nil. e fastSetTypes: nil. e fastSetEntities: nil. e fastSetAlgorithmes: nil. e namedTypesCache: nil. e identifiersCache: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:41'! acceptDefinedType: e super acceptDefinedType: e. e domain: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 4/18/2006 13:14'! acceptDerivedAttribute: e super acceptDerivedAttribute: e. e domain: nil. e assign: nil. e redeclaring: nil ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/10/2012 16:28'! acceptDictionaryInstanceReference: e e setRef: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:44'! acceptDomainEquivalentItem: e super acceptDomainEquivalentItem: e. e nativeItem: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:26'! acceptElementQualifier: e super acceptElementQualifier: e. e index: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/10/2012 16:21'! acceptEntityDefinition: e super acceptEntityDefinition: e. self acceptNamedType: e. e destroySubtypes. e supertypeConstraint: nil. e fastSetSupertypes: nil. e fastSetAttributes: nil. e fastSetUniquenessRules: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/10/2012 16:19'! acceptEntityDefinitionReference: e self acceptNamedTypeReference: e ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:27'! acceptEntityInstancesSet: e super acceptEntityInstancesSet: e . e entityRef: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:50'! acceptEnumerationType: e super acceptEnumerationType: e. e owner: nil. e fastSetElements: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 15:28'! acceptEnumerationValue: e super acceptEnumerationValue: e. e domain: nil. e element: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 4/13/2006 12:00'! acceptEscapedExpression: e super acceptEscapedExpression: e. e expr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 15:24'! acceptExplicitAttribute: e super acceptExplicitAttribute: e. e domain: nil. e redeclaring: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/13/2012 08:33'! acceptExternalMetaSchema: e e nativeSchema: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:26'! acceptExternalRepresentation: e super acceptExternalRepresentation: e. e fastSetRecords: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/13/2012 08:34'! acceptExternalSchema: e ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:53'! acceptFunctionDeclaration: e super acceptFunctionDeclaration: e. e returnType: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:52'! acceptGeneralAggregateType: e super acceptGeneralAggregateType: e. e elementType: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/13/2012 01:59'! acceptGenericInstance: e super acceptGenericInstance: e. e instanceScope: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:54'! acceptGlobalRule: e super acceptGlobalRule: e. e fastSetForEntities: nil. e fastSetWhereRules: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:30'! acceptIdentifier: e e ref: nil. e parameters acceptTry: self. e fastSetParameters: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:21'! acceptIfStatement: e super acceptIfStatement: e. e selector: nil. e fastSetThenStatements: nil. e fastSetElseStatements: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/13/2012 08:35'! acceptIncludeSchema: e e fastSetExplicitlyImportedItems: nil. e fastSetImplicitlyImportedItems: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:22'! acceptIncrementControl: e super acceptIncrementControl: e . e variable: nil. e first: nil. e last: nil. e step: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:28'! acceptInstanceScope: e super acceptInstanceScope: e. e owned: nil. e fastSetExportList: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:54'! acceptIntegerType: e super acceptIntegerType: e. e precision: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:28'! acceptInternalRepresentation: e super acceptInternalRepresentation: e. e fastSetParameters: nil ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:30'! acceptInterval: e super acceptInterval: e. e expr: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:55'! acceptInverseAttribute: e super acceptInverseAttribute: e. e invertedAttr: nil. e minCardinality: nil. e maxCardinality: nil. e redeclaring: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:55'! acceptListType: e super acceptListType: e . e elementType: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:31'! acceptLiteral: e e val: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:56'! acceptLocalVariable: e super acceptLocalVariable: e. e domain: nil. e initializer: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:57'! acceptMetaConceptDefinition: e super acceptMetaConceptDefinition: e. e metaExpression acceptTry: self. e metaExpression: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 9/19/2007 10:05'! acceptMetaMappingDefinition: e super acceptMetaMappingDefinition: e. e definition: nil. e metaExpression acceptTry: self. e metaExpression: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'MrCleaner 1/20/2011 21:16'! acceptMetaMappingRule: e super acceptMetaMappingRule: e. e metaExpression acceptTry: self. e metaExpression: nil. e metaCondition acceptTry: self. e metaCondition: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/20/2012 11:05'! acceptModelContents: e self modelContents: e. e dataInstances do: [:v | v acceptTry: self]. e headerInstances: nil. e dataInstances: nil. e dataInstancesByLabelIndex: nil. e entitiesByInstanceIndex: nil. e dataInstancesByEntityIndex: nil. e positionByDataInstanceIndex: nil. e owner: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 12/20/2006 11:03'! acceptNamedType: e super acceptNamedType: e. e removeMetaConcept. e owner: nil. e identifiersCache: nil. e setWhereRules: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:57'! acceptNamedTypeReference: e e setRef: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 11:59'! acceptNativeAlgorithm: e super acceptNativeAlgorithm: e. e fastSetImplementations: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:00'! acceptNativeCode: e e code: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:31'! acceptNativeExpression: e super acceptNativeExpression: e . e source: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:23'! acceptNativeStatement: e super acceptNativeStatement: e. e source: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:00'! acceptOneofSupertypeExpression: e super acceptOneofSupertypeExpression: e. e fastSetExprList: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:23'! acceptOutputStatement: e super acceptOutputStatement: e . e output: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:01'! acceptParameterDefinition: e super acceptParameterDefinition: e. e domain: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:01'! acceptPopulationDependentBound: e super acceptPopulationDependentBound: e. e boundValue: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:23'! acceptProcedureCallStatement: e super acceptProcedureCallStatement: e. e call: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:01'! acceptProcedureDeclaration: e super acceptProcedureDeclaration: e ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:32'! acceptQualifiedExpression: e super acceptQualifiedExpression: e. e head: nil. e fastSetQualifiers: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:32'! acceptQueryExpression: e super acceptQueryExpression: e. e variable: nil. e aggregateSource: nil. e suchThat: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:33'! acceptRangeQualifier: e super acceptRangeQualifier: e. e index1: nil. e index2: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:02'! acceptRealType: e super acceptRealType: e. e precision: nil ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/31/2006 22:34'! acceptRemarkReference: e e inside acceptTry: self. e remark acceptTry: self. e inside: nil. e remark: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:24'! acceptRepeatStatement: e super acceptRepeatStatement: e. e incrControl: nil. e untilControl: nil. e whileControl: nil. e fastSetStatements: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:24'! acceptReturnStatement: e super acceptReturnStatement: e. e returned: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:07'! acceptSchemaDefinition: e super acceptSchemaDefinition: e. e interface: nil. e fastSetGlobalRules: nil. e fastSetRemarkReferences: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/20/2012 09:24'! acceptSchemaInstance: e e internalSchemata acceptTry: self. e fastSetSchemata: nil. e associatedModels acceptTry: self. e fastSetAssociatedModels: nil. e removeTamarisItemReferencesIndex. e removeMetaConceptsIndex! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:08'! acceptSelectType: e super acceptSelectType: e. e fastSetSelections: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:09'! acceptSetType: e super acceptSetType: e. e elementType: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:28'! acceptSimpleRecord: e super acceptSimpleRecord: e. e fastSetParameters: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:33'! acceptSimpleUnaryExpression: e super acceptSimpleUnaryExpression: e. e expr: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit statements schema' stamp: 'apl 3/22/2006 12:25'! acceptSplitmarkStatement: e e filename: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:09'! acceptStatementsContainer: e super acceptStatementsContainer: e. e fastSetLocals: nil. e fastSetStatements: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:10'! acceptStringType: e super acceptStringType: e. e width: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:12'! acceptSubEntityRefExpression: e super acceptSubEntityRefExpression: e. e entityRef: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:13'! acceptSupertypeConstraint: e super acceptSupertypeConstraint: e. e constrained: nil. e expr: nil. ! ! !PlatypusMetaDataDestroyer methodsFor: 'visit expressions schema' stamp: 'apl 3/22/2006 11:34'! acceptTypedExpression: e super acceptTypedExpression: e. e expr: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:14'! acceptUniquenessRule: e super acceptUniquenessRule: e. e fastSetAttributes: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/5/2012 22:37'! acceptUnresolvedSymbol: e! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:29'! acceptUserDefinedApplicationInstance: e super acceptUserDefinedApplicationInstance: e. e fastSetParameters: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit population schema' stamp: 'apl 3/22/2006 12:29'! acceptUserDefinedHeaderInstance: e super acceptUserDefinedHeaderInstance: e. e fastSetParameters: nil.! ! !PlatypusMetaDataDestroyer methodsFor: 'visit dictionary schema' stamp: 'apl 3/22/2006 12:14'! acceptWhereRule: e super acceptWhereRule: e. e whereValue: nil! ! !PlatypusMetaDataDestroyer methodsFor: 'accessing' stamp: 'AlainPlantec 5/5/2012 00:26'! modelContents: anObject modelContents := anObject! ! !PlatypusMetaRepositoryBuilder class methodsFor: 'repository building' stamp: 'AlainPlantec 10/7/2010 15:56'! build: aStepRepository with: aMetaData | builder | builder := self new stepRepo: aStepRepository. builder acceptTry: aMetaData. ^ builder! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 5/28/2004 11:26'! acceptContextDefinition: e super acceptContextDefinition: e. e owner acceptTry: self! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/18/2006 10:24'! acceptEntityDefinition: e e owner acceptTry: self. super acceptEntityDefinition: e! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/24/2007 13:46'! acceptExternalMetaSchema: e ^ super acceptExternalMetaSchema: e! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/25/2006 10:32'! acceptExternalSchema: e ! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/24/2007 09:50'! acceptIncludeSchema: e e nativeSchema acceptTry: self. super acceptIncludeSchema: e! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit population schema' stamp: 'apl 10/25/2007 11:24'! acceptInternalRepresentation: e super acceptInternalRepresentation: e. e definition acceptTry: self! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/11/2005 09:29'! acceptInverseAttribute: e e domain acceptTry: self. ^ super acceptInverseAttribute: e! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 2/24/2006 11:50'! acceptLocalVariable: e super acceptLocalVariable: e. e owner ifNotNil: [e owner acceptTry: self]! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 2/24/2006 11:50'! acceptParameterDefinition: e super acceptParameterDefinition: e. e owner ifNotNil: [e owner acceptTry: self]! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 10/3/2006 01:31'! acceptRemarkReference: e super acceptRemarkReference: e. e inside acceptTry: self. e referenced acceptTry: self! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit dictionary schema' stamp: 'apl 3/24/2006 22:59'! acceptSchemaDefinition: e super acceptSchemaDefinition: e! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/5/2012 09:10'! acceptSchemaInstance: e e dataSchemata acceptTry: self. e metaConceptsIndex acceptTry: self. e associatedModels acceptTry: self! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit population schema' stamp: 'apl 5/29/2004 17:09'! acceptSimpleRecord: e super acceptSimpleRecord: e. e definition acceptTry: self! ! !PlatypusMetaRepositoryBuilder methodsFor: 'visit generic' stamp: 'apl 7/26/2004 19:11'! acceptTry: anObject stepRepo registerInstance: anObject. ^ super acceptTry: anObject! ! !PlatypusMetaRepositoryBuilder methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 21:58'! modelContents ^ modelContents! ! !PlatypusMetaRepositoryBuilder methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 21:58'! modelContents: aModelContents modelContents := aModelContents! ! !PlatypusMetaRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 11/3/2003 17:27'! stepRepo: anObject stepRepo := anObject! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit aggregate data schema' stamp: 'apl 3/17/2006 09:50'! acceptAggregateData: e self nextPut: $(. self halt. e contents acceptTry: self separatedBy: [self nextPut: $,]. self nextPut: $)! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit aggregate data schema' stamp: 'apl 3/17/2006 09:50'! acceptAggregateInstance: e self nextPut: $(. e contents acceptTry: self separatedBy: [self nextPut: $,]. self nextPut: $)! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/17/2006 09:50'! acceptAllParameters: parameters definition: definition fromSimpleRecord: fromSimpleRecord | pos attributes attr | (p21Syntax or: [definition isNil]) ifTrue: ["visitPath first persistentLabel = '7' ifTrue: [self halt]." parameters acceptTry: self separatedBy: [self nextPut: $,]] ifFalse: [pos := 1. attributes := fromSimpleRecord ifTrue: [definition explicitAttributes] ifFalse: [definition inheritedExplicitAttributes]. parameters ifNotEmpty: [:arg | outStream nextPut: Character cr. parameters do: [:param | pos <= attributes size ifTrue: [attr := attributes at: pos. outStream nextPut: Character tab. fromSimpleRecord ifTrue: [outStream nextPut: Character tab]. self doSimpleTagNamed: attr name while: [outStream withStyleFor: PlatypusKeywordToken do: [outStream nextPutAll: attr name]]. pos := pos + 1]] separatedBy: [outStream nextPut: Character cr]. outStream nextPut: Character cr]]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptEConstant: e self nextPutAll: 'E' ! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 6/10/2005 11:20'! acceptEntityDefinitionReference: e e ref ifNil: [outStream withStyleFor: PlatypusUnresolvedReferenceToken do: [outStream nextPutAll: e name asUppercase]] ifNotNil: [outStream withStyleFor: PlatypusPrimaryElementOpenKeywordToken do: [outStream nextPutAll: e ref name asUppercase]]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptEnumerationValue: e self nextPutAll: '.', e element asUppercase, '.'. ! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptExternalGroupRepresentation: e self acceptExternalInstance: e! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:51'! acceptExternalInstance: e self acceptGenericInstance: e. self nextPutAll: '('. e records size > 1 ifTrue: [self nextPutAll: String cr , String tab]. e records acceptTry: self separatedBy: [self nextPutAll: String cr , String tab]. e records size > 1 ifTrue: [self nextPutAll: String cr]. self nextPutAll: ');'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptExternalRepresentation: e self acceptExternalInstance: e! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptFalseConstant: e self nextPutAll: '.F.'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptFileDescription: e self nextPutAll: 'FILE_DESCRIPTION(('. e description do: [:desc | self nextPutAllString: desc] separatedBy: [self nextPut: $,]. self nextPutAll: '),'. self nextPutAllString: e implementationLevel. self nextPutAll: ');'.! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptFileName: e self nextPutAll: 'FILE_NAME('. self nextPutAllString: e name. self nextPutAll: ','. self nextPutAllString: e timeStamp. self nextPutAll: ',('. e author do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '),('. e organization do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '),'. self nextPutAllString: e preprocessorVersion. self nextPutAll: ','. self nextPutAllString: e originatingSystem. self nextPutAll: ','. self nextPutAllString: e authorisation. self nextPutAll: ');'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptFileSchema: e self nextPutAll: 'FILE_SCHEMA(('. e schemaIdentifiers do: [:a | self nextPutAllString: a] separatedBy: [self nextPut: $,]. self nextPutAll: '));'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/13/2012 01:58'! acceptGenericInstance: e outStream withStyleFor: PlatypusDelimToken do: [outStream nextPut: $#. outStream nextPutAll: e persistentLabel asString]. self nextPut: $=. e instanceScope ifNotNil: [e instanceScope acceptTry: self]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:51'! acceptInstanceScope: e self nextPutAll: '&SCOPE\' withCRs. e owned acceptTry: self separatedBy: [self nextPut: Character cr]. self nextPutAll: '\END_SCOPE' withCRs. e exportList size > 0 ifTrue: [self nextPutAll: ' /'. e exportList acceptTry: self separatedBy: [self nextPutAll: ',']. self nextPutAll: '/\' withCRs] ifFalse: [self nextPut: Character cr]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptIntegerLiteral: e self nextPutAll: e val printString! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptInternalGroupRepresentation: e self acceptInternalInstance: e! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/3/2012 20:53'! acceptInternalInstance: e self acceptGenericInstance: e. self acceptTry: e definition. self nextPut: $(. self acceptAllParameters: e parameters copy definition: e definition referenced fromSimpleRecord: false. self nextPutAll: ');'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/24/2005 14:52'! acceptInternalRepresentation: e self acceptInternalInstance: e ! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptMissingValue: e self nextPut: $$! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptPiConstant: e self nextPutAll: 'PI'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptRealLiteral: e self nextPutAll: e val printString! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptRedefinedAttributeValue: e self nextPut: $*! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/3/2012 20:53'! acceptSimpleRecord: e self acceptTry: e definition. (p21Syntax not and: [e definitionOk]) ifTrue: [outStream nextPut: Character tab]. self nextPut: $(. self acceptAllParameters: e parameters copy definition: e definition referenced fromSimpleRecord: true. (p21Syntax not and: [e definitionOk]) ifTrue: [outStream nextPut: Character tab]. self nextPut: $)! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptStringLiteral: e self nextPutAllString: e asClearText! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptTrueConstant: e self nextPutAll: '.T.'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptTypedExpression: e e domain ifNotNil: [self nextPutAll: e domain name asUppercase; nextPut: $(]. e expr acceptTry: self. e domain ifNotNil: [self nextPut: $)]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit expressions schema' stamp: 'apl 3/24/2005 14:52'! acceptUnknownConstant: e self nextPutAll: '.U.'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:51'! acceptUserDefinedApplicationInstance: e self nextPut: $#; nextPutAll: e persistentLabel; nextPut: $!!; nextPutAll: e name; nextPut: $(. e parameters acceptTry: self separatedBy: [self nextPut: $,]. self nextPutAll: ');'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:51'! acceptUserDefinedHeaderInstance: e self nextPutAll: e name; nextPut: $(. e parameters acceptTry: self separatedBy: [self nextPut: $,]. self nextPutAll: ');'! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 5/20/2005 19:04'! doSimpleTagNamed: tagName while: aBlock outStream nextPutAll: '<'. outStream withStyleFor: PlatypusKeywordToken do: [outStream nextPutAll: tagName]. outStream nextPutAll: '>'. aBlock value. outStream nextPutAll: ''! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'initialize/release' stamp: 'apl 5/20/2005 21:49'! initialize super initialize. p21Syntax := true. tokenClassifier := PlatypusExpressTokenClassifier new! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/24/2005 14:52'! modelContents ^modelContents! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/24/2005 14:52'! modelContents: anObject modelContents := anObject! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:57'! nextPut: aCharacter | tokenClass | tokenClass := tokenClassifier tokenClassFromCharacter: aCharacter ifAbsent: []. outStream withStyleFor: tokenClass do: [outStream nextPut: aCharacter]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:57'! nextPutAll: aString | tokenClass | tokenClass := tokenClassifier tokenClassFromString: aString ifAbsent: []. outStream withStyleFor: tokenClass do: [outStream nextPutAll: aString]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'visit generic' stamp: 'apl 3/24/2005 14:52'! nextPutAllString: aString self nextPutAll: '''' , (aString copyReplaceAll: '''' with: '''''') , ''''! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/24/2005 14:52'! outStream ^outStream! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/24/2005 14:52'! outStream: anObject outStream := anObject! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/17/2006 09:52'! stream: anOutputStream modelContents: aModelContents p21Syntax: useP21Syntax | hinstances instances dateTime | self modelContents: aModelContents. p21Syntax := useP21Syntax. hinstances := modelContents headerInstances. instances := modelContents dataInstances. Cursor write showWhile: [outStream := anOutputStream. outStream withStyleFor: PlatypusDelimToken do: [outStream nextPutAll: 'ISO-10303-21;\HEADER;\' withCRs]. hinstances acceptTry: self separatedBy: [outStream nextPut: Character cr]. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileName]) not]) ifTrue: [dateTime := Time dateAndTimeNow. self nextPutAll: String cr , 'FILE_NAME('''', ''' , dateTime first yyyymmdd asString , ' ' , dateTime second asString , ''', (''''), (''''), '''', '''', '''');']. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileSchema]) not]) ifTrue: [self nextPutAll: String cr , 'FILE_SCHEMA(('. self modelContents owner schemata do: [:sch | self nextPutAllString: sch name] separatedBy: [outStream nextPut: $,]. outStream nextPutAll: '));']. (hinstances isNil or: [(hinstances anySatisfy: [:hi | hi isPltFileDescription]) not]) ifTrue: [self nextPutAll: String cr , 'FILE_DESCRIPTION(('''', ''''), ''''); ']. outStream withStyleFor: PlatypusDelimToken do: [outStream nextPutAll: '\ENDSEC;\DATA;\' withCRs]. instances acceptTry: self separatedBy: [outStream nextPut: Character cr]. outStream nextPut: Character cr. outStream withStyleFor: PlatypusDelimToken do: [outStream nextPutAll: 'ENDSEC;\END-ISO-10303-21;\' withCRs]]! ! !PlatypusModelContentsP28XmlWriter methodsFor: 'accessing' stamp: 'apl 3/17/2006 09:52'! stream: anOutputStream modelContents: aModelContents values: values p21Syntax: useP21Syntax self modelContents: aModelContents. outStream := anOutputStream. p21Syntax := useP21Syntax. Cursor write showWhile: [values acceptTry: self separatedBy: [outStream nextPut: Character cr]]! ! !PlatypusModelContentsResolver methodsFor: 'visit dictionary schema' stamp: 'apl 12/13/2005 11:35'! acceptDefinedTypeReference: e | found | e setRef: (found := self modelContents lookUpNamedTypeBN: e name). found ifNil: [self declareWithError: e] ifNotNil: [self declareWithoutError: e]! ! !PlatypusModelContentsResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/14/2012 22:56'! acceptEntityDefinitionReference: e | found chosen | e setRef: (found := self modelContents lookUpEntityDefinitionBN: e name). found ifNil: [(chosen := self interactivelyResolvedSchemaOwningEntityNamed: e name) isNil ifFalse: [self schemaInstance tamarisItemRef insertLinkReferenceFrom: chosen]. e setRef: (found := self modelContents lookUpEntityDefinitionBN: e name). found ifNil: [self declareWithError: e]] ifNotNil: [self declareWithoutError: e]! ! !PlatypusModelContentsResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/16/2012 15:16'! acceptEntityInstanceReference: e | found | e ref: (found := self instanceLabelled: e persistentLabel). found ifNil: [self declareWithError: e] ifNotNil: [self declareWithoutError: e]! ! !PlatypusModelContentsResolver methodsFor: 'visit population schema' stamp: 'apl 12/13/2005 11:23'! acceptEnumerationValue: e super acceptEnumerationValue: e! ! !PlatypusModelContentsResolver methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/23/2012 23:44'! acceptInternalRepresentation: e e definition acceptTry: self. (e definition isPltEntityDefinitionReference and: [e definition ref notNil]) ifTrue: [e definition: e definition ref referenceOnSelf]. super acceptInternalRepresentation: e! ! !PlatypusModelContentsResolver methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/4/2012 21:43'! acceptModelContents: e self modelContents: e. e dataInstances do: [:v | v acceptTry: self] ! ! !PlatypusModelContentsResolver methodsFor: 'visit population schema' stamp: 'apl 4/7/2006 09:40'! acceptSimpleRecord: e e definition acceptTry: self. (e definition isPltEntityDefinitionReference and: [e definition ref notNil]) ifTrue: [e definition: e definition ref referenceOnSelf]. super acceptSimpleRecord: e! ! !PlatypusModelContentsResolver methodsFor: 'visit generic' stamp: 'apl 2/6/2006 17:37'! acceptTry: e e isPltExpression ifTrue: [e removeCachedDomain]. ^ super acceptTry: e! ! !PlatypusModelContentsResolver methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 01:05'! checks: aMetaData aMetaData acceptTry: self. self objectsWithErrorIndex do: [:k | self registerError: (PlatypusModelContentsResolverError metaData: k message: 'unresolved symbol')]. ! ! !PlatypusModelContentsResolver methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 15:15'! instanceLabelled: persistentLabel ^ modelContents instanceLabelled: persistentLabel! ! !PlatypusModelContentsResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 6/15/2012 13:01'! interactivelyResolvedSchemaOwningEntityNamed: aName | found | ^ PlatypusSchemaInstanceReference interactivelyResolvedSchemaSatisfying: [:r | (found := (r metaData lookUpNamedTypeBN: aName)) notNil and: [found schemaDefinition isNil or: [r metaData = found schemaDefinition]]] message: '''' , aName , ''' is inside ?'! ! !PlatypusModelContentsSemanticChecker methodsFor: 'platypus-generated-visitingPlatypusDictionarySchema' stamp: 'AlainPlantec 3/11/2014 15:14'! acceptEntityInstance: e! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/14/2012 00:36'! acceptExpression: e | valueDomain declaredDomain | e computedDomain ifNil: [ self registerError: (PlatypusModelContentsSemanticCheckerError metaData: e message: 'invalid value')] ifNotNil: [((valueDomain := e computedDomain) isAssignableTo: (declaredDomain := domainStack top key computedDomain)) ifFalse: [ declaredDomain ifNil: [ self registerError: (PlatypusModelContentsSemanticCheckerError metaData: e message: 'invalid value, ' , domainStack top value , ': unresolved domain')] ifNotNil: [ self registerError: (PlatypusModelContentsSemanticCheckerError metaData: e message: 'incompatible value, ' , domainStack top value , ': declared domain: ' , declaredDomain errorQualifier , '; found domain: ' , valueDomain errorQualifier)]]]! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'apl 3/17/2006 09:33'! acceptExternalRepresentation: e e records acceptTry: self! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/14/2012 00:37'! acceptInternalRepresentation: e | entityDef | currInstance := e. (entityDef := e definition referenced) ifNotNil: [e definition referenced instantiable ifFalse: [self registerError: (PlatypusModelContentsSemanticCheckerError metaData: e message: 'entity ''' , e definition name , ''' is not instanciable (abstract entity)')]]. self checksValues: e parameters attributesAccessor: #inheritedExplicitAttributesDo: numberOfAttributes: entityDef numberOfInheritedExplicitAttributes! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'apl 3/20/2006 19:21'! acceptModelContents: e super acceptModelContents: e! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'apl 3/20/2006 21:39'! acceptSimpleRecord: e | entityDef | currInstance := e. entityDef := e definition referenced. self checksValues: e parameters attributesAccessor: #explicitAttributesDo: numberOfAttributes: entityDef numberOfExplicitAttributes! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'apl 11/11/2003 15:29'! acceptUserDefinedApplicationInstance: e ! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit population schema' stamp: 'apl 11/11/2003 15:29'! acceptUserDefinedHeaderInstance: e ! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 12/7/2012 22:23'! checksValues: aListOfExpressions attributesAccessor: accessorSymbol numberOfAttributes: numberOfAttributes | pos value esize | (esize := aListOfExpressions size) ~= numberOfAttributes ifTrue: [self registerError: (PlatypusModelContentsSemanticCheckerError metaData: visitPath top message: 'entity ''' , currInstance definition name , ''' have ' , esize printString , ' values and must have ' , numberOfAttributes printString)] ifFalse: [pos := 1. currInstance definition ref perform: accessorSymbol with: [:attr | (value := aListOfExpressions at: pos) isPltMissingValue ifTrue: [value isPltRedefinedAttributeValue ifFalse: [attr optionalFlag ifFalse: [self registerError: (PlatypusModelContentsSemanticCheckerError metaData: visitPath top message: 'entity ''' , currInstance definition name , ''' mandatory attribute with missing value')]]] ifFalse: [domainStack push: attr domain -> ('attribute ''' , attr name , ''''). [self acceptTry: value] ensure: [domainStack pop]]. pos := pos + 1]]! ! !PlatypusModelContentsSemanticChecker methodsFor: 'initialize/release' stamp: 'apl 7/23/2004 02:26'! initialize domainStack := PlatypusStack new. super initialize! ! !PlatypusModelContentsSemanticChecker methodsFor: 'visit generic' stamp: 'apl 4/22/2006 23:12'! lookUpAndCacheAcceptSelectorOfClass: aClass | currClass selector str | currClass := aClass. str := WriteStream on: (String new: 50). [currClass ~~ Object] whileTrue: [str nextPutAll: 'accept'. str next: currClass name size - 3 putAll: currClass name startingAt: 4. str nextPut: $:. selector := str contents asSymbol. (self class includesSelector: selector) ifTrue: [self acceptSelectorsMap at: aClass put: selector. ^ selector]. str reset. currClass := currClass superclass]. ^ self error: 'unimplemented accept method for class ''' , aClass name , ''''! ! !PlatypusModelContentsRecorder methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/11/2012 19:21'! acceptApplicationInstance: e checkingPass = #recording ifTrue: [(e persistentLabel isNil or: [e persistentLabel isEmpty]) ifTrue: [modelContents add: e]]! ! !PlatypusModelContentsRecorder methodsFor: 'visit population schema' stamp: 'AlainPlantec 5/11/2012 16:43'! acceptEntityInstanceReference: e (e persistentLabel isNil or: [e persistentLabel isEmpty]) ifTrue: [checkingPass = #referencing ifTrue: [(e ref notNil and: [e ref persistentLabel notNil and: [e ref persistentLabel notEmpty]]) ifTrue: [e persistentLabel: e ref persistentLabel]] ifFalse: [e ref acceptTry: self]]! ! !PlatypusModelContentsRecorder methodsFor: 'visit population schema' stamp: 'apl 3/20/2006 16:21'! acceptExternalRepresentation: e self acceptApplicationInstance: e. super acceptExternalRepresentation: e ! ! !PlatypusModelContentsRecorder methodsFor: 'visit population schema' stamp: 'apl 3/20/2006 16:21'! acceptInternalRepresentation: e self acceptApplicationInstance: e. super acceptInternalRepresentation: e ! ! !PlatypusModelContentsRecorder methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 22:51'! checks: aMetaData checkingPass := #recording. super checks: aMetaData. checkingPass := #referencing. super checks: modelContents! ! !PlatypusModelContentsRecorder methodsFor: 'accessing' stamp: 'apl 3/12/2007 14:03'! checksAll: aMetaDataCollection checkingPass := #recording. aMetaDataCollection do: [:el | super checks: el]. checkingPass := #referencing. super checks: modelContents! ! !PlatypusModelContentsRecorder methodsFor: 'initialize-release' stamp: 'apl 3/20/2006 16:10'! initialize super initialize. checkingPass := #recording! ! !PlatypusModelContentsVisitor class methodsFor: 'checking' stamp: 'AlainPlantec 5/23/2012 22:36'! checks: metaData ^ self checks: metaData owners: metaData ownerPath ! ! !PlatypusModelContentsVisitor class methodsFor: 'checking' stamp: 'AlainPlantec 5/23/2012 22:36'! checks: metaData owners: ownerPath | checker | checker := self new visitContexts: ownerPath. ^ checker checks: metaData! ! !PlatypusModelContentsVisitor class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/23/2012 22:36'! modelContents: aModelContents ^ self new modelContents: aModelContents ! ! !PlatypusModelContentsVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 22:36'! checks: data data acceptTry: self. ! ! !PlatypusModelContentsVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 22:36'! modelContents ^ modelContents! ! !PlatypusModelContentsVisitor methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 22:36'! modelContents: aModelContents modelContents := aModelContents! ! !PlatypusDataChecker class methodsFor: 'checking' stamp: 'apl 3/11/2005 13:42'! checksValue: aValue attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository | errors instance | errors := self new checksValue: aValue attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository. ^ errors collect: [:err | instance := aPlatypusRepository instanceAt: anInteger. self errorClass error: '#' , anInteger asString , '=' , instance class name , ': ' , err message oid: anInteger repository: aPlatypusRepository]! ! !PlatypusDataChecker class methodsFor: 'checking' stamp: 'apl 3/11/2005 13:42'! checksValue: aValue elementType: aMetaData aggrType: anAggrType aggrPos: aPosition attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository ^ self new checksValue: aValue elementType: aMetaData aggrType: anAggrType aggrPos: aPosition attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository! ! !PlatypusDataChecker class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! errorClass ^ PlatypusPharoSmalltalk at: #PlatypusStepCheckerError! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 7/14/2011 16:56'! acceptAggregationType: e | pos tmpErrors cls | cls := PlatypusPharoSmalltalk at: (self smalltalkTypeOf: e) asSymbol. value isCollection ifTrue: [(value isKindOf: cls) ifFalse: [self valueIsA: value class insteadOf: cls]. pos := 1. value do: [:elem | tmpErrors := self class checksValue: elem elementType: e elementType aggrType: e aggrPos: pos attribute: attribute instanceOid: instanceOid repository: platypusRepository. tmpErrors ifNotEmpty: [:suberrs | tmpErrors := tmpErrors collect: [:err | self errorClass error: self errorHeading , err message oid: instanceOid repository: platypusRepository]. errors addAll: tmpErrors]] separatedBy: [pos := pos + 1]] ifFalse: [self valueIsA: value class insteadOf: cls]! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:14'! acceptArrayType: e self acceptAggregationType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:14'! acceptBagType: e self acceptAggregationType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptBinaryType: e self acceptSimpleType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptBooleanType: e self acceptSimpleType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/24/2005 22:31'! acceptDefinedType: e ^ self acceptTry: e domain! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/24/2005 23:11'! acceptDictionaryInstanceReference: e ^ self acceptTry: e referenced! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 3/14/2005 20:43'! acceptEntityDefinition: e | cls | cls := platypusRepository metaDataSchemaInstance classFromEntityName: e name. (value isKindOf: cls) ifFalse: [self valueIsA: value class insteadOf: cls]! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 4/7/2006 19:07'! acceptEntityDefinitionReference: e | cls | cls := platypusRepository metaDataSchemaInstance classFromEntityName: e name. (value isKindOf: cls) ifFalse: [self valueIsA: value class insteadOf: cls]! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:30'! acceptEnumerationType: e (value isKindOf: Symbol) ifTrue: [((e elements collect: [:el | el asUppercase]) includes: value asUppercase) ifFalse: [self enumerationValueOutOfDomain: e]] ifFalse: [self valueIsA: value class insteadOf: Symbol]! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/25/2005 08:39'! acceptExplicitAttribute: e ^ self acceptTry: e domain! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptIntegerType: e self acceptSimpleType:e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:14'! acceptListType: e self acceptAggregationType: e ! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptLogicalType: e self acceptSimpleType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/25/2005 10:47'! acceptNamedTypeReference: e ^ self acceptTry: e referenced! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptRealType: e self acceptSimpleType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 3/11/2005 13:44'! acceptSelectType: e e selections do: [:sel | (self class checksValue: value elementType: sel referenced aggrType: aggrType aggrPos: aggrPos attribute: attribute instanceOid: instanceOid repository: platypusRepository) ifEmpty: [^ #()]]. self selectValueOutOfDomain: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:14'! acceptSetType: e self acceptAggregationType: e! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 7/14/2011 16:56'! acceptSimpleType: e | cls | cls := PlatypusPharoSmalltalk at: (self smalltalkTypeOf: e) asSymbol. (value isKindOf: cls) ifFalse: [self valueIsA: value class insteadOf: cls]! ! !PlatypusDataChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/26/2005 01:28'! acceptStringType: e self acceptSimpleType: e! ! !PlatypusDataChecker methodsFor: 'accessing' stamp: 'apl 2/25/2005 22:19'! acceptTry: e "Transcript show: e class name , String cr." value isNil ifTrue: [self checksMissingValue] ifFalse: [^ super acceptTry: e]! ! !PlatypusDataChecker methodsFor: 'accessing' stamp: 'apl 2/25/2005 14:49'! aggrPos ^aggrPos! ! !PlatypusDataChecker methodsFor: 'accessing' stamp: 'apl 2/25/2005 22:21'! aggrType ^aggrType! ! !PlatypusDataChecker methodsFor: 'checking' stamp: 'apl 2/25/2005 22:18'! checksMissingValue aggr ifNil: [attribute optionalFlag ifFalse: [self valueShouldNotBeMissing]] ifNotNil: [aggr elementsAreOptional ifFalse: [self valueShouldNotBeMissing]]! ! !PlatypusDataChecker methodsFor: 'checking' stamp: 'apl 3/11/2005 13:43'! checksValue: aValue attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository value := aValue. attribute := anAttribute. instanceOid := anInteger. platypusRepository := aPlatypusRepository. self acceptTry: anAttribute. ^ errors! ! !PlatypusDataChecker methodsFor: 'checking' stamp: 'apl 3/11/2005 13:43'! checksValue: aValue elementType: aMetaData aggrType: anAggrType aggrPos: aPosition attribute: anAttribute instanceOid: anInteger repository: aPlatypusRepository value := aValue. aggrPos := aPosition. instanceOid := anInteger. attribute := anAttribute. platypusRepository := aPlatypusRepository. aggrType := anAggrType. self acceptTry: aMetaData. ^ errors! ! !PlatypusDataChecker methodsFor: 'error handling' stamp: 'apl 3/11/2005 13:54'! enumerationValueOutOfDomain: enumerationType | elements | elements := String new. enumerationType elements do: [:el | elements := elements , '#' , el asUppercase] separatedBy: [elements := elements , ' ']. errors add: (self errorClass error: self errorHeading , 'is #' , value , ' but should be one of (' , elements , ')' oid: instanceOid repository: platypusRepository)! ! !PlatypusDataChecker methodsFor: 'accessing' stamp: 'apl 2/24/2005 23:31'! errorClass ^ self class errorClass! ! !PlatypusDataChecker methodsFor: 'error handling' stamp: 'apl 2/25/2005 19:38'! errorHeading | start | aggrPos ifNil: [start := 'attribute ' , attribute name , ' '] ifNotNil: [start := 'value at: #' , aggrPos asString , ' ']. ^ start! ! !PlatypusDataChecker methodsFor: 'initialize/release' stamp: 'apl 2/25/2005 14:54'! initialize super initialize. errors := OrderedCollection new! ! !PlatypusDataChecker methodsFor: 'meta data accessing' stamp: 'apl 3/11/2005 14:08'! metaDataSchemaInstance ^ platypusRepository metaDataSchemaInstance ! ! !PlatypusDataChecker methodsFor: 'error handling' stamp: 'apl 3/11/2005 14:09'! selectValueOutOfDomain: selectType | elements cls | elements := String new. selectType selections do: [:el | cls := (self smalltalkTypeOf: el referenced) asSymbol. elements := elements , cls] separatedBy: [elements := elements , ' ']. errors add: (self errorClass error: self errorHeading , 'is a' , value class name , ' but should be in selections (' , elements , ')' oid: instanceOid repository: platypusRepository)! ! !PlatypusDataChecker methodsFor: 'meta data accessing' stamp: 'apl 3/11/2005 14:09'! smalltalkTypeOf: anObject ^ self metaDataSchemaInstance smalltalkTypeOf: anObject! ! !PlatypusDataChecker methodsFor: 'error handling' stamp: 'apl 3/11/2005 13:54'! valueIsA: valClass insteadOf: goodClass errors add: (self errorClass error: self errorHeading , 'is a ' , valClass name , ' but should be a ' , goodClass name oid: instanceOid repository: platypusRepository)! ! !PlatypusDataChecker methodsFor: 'error handling' stamp: 'apl 3/11/2005 13:54'! valueShouldNotBeMissing errors add: (self errorClass error: self errorHeading , 'is mandatory but is missing' oid: instanceOid repository: platypusRepository)! ! !PlatypusExpressChecker class methodsFor: 'checking' stamp: 'apl 6/22/2004 18:29'! checks: metaData ^ self checks: metaData owners: metaData ownerPath ! ! !PlatypusExpressChecker class methodsFor: 'checking' stamp: 'apl 3/20/2006 11:10'! checks: metaData owners: ownerPath | checker | checker := self new visitContexts: ownerPath. ^ checker checks: metaData! ! !PlatypusExpressChecker methodsFor: 'visit dictionary schema' stamp: 'apl 12/13/2005 11:59'! acceptDefinedTypeReference: e ^ self acceptNamedTypeReference: e! ! !PlatypusExpressChecker methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 10:48'! acceptEntityDefinitionReference: e ^ self acceptNamedTypeReference: e! ! !PlatypusExpressNamesChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 00:31'! acceptContextDefinition: e super acceptContextDefinition: e. e namedTypesCache keysAndValuesDo: [:k :l | l size > 1 ifTrue: [l do: [:m | self registerError: (PlatypusExpressNamesCheckerError metaData: m message: ' multiply defined ')]]]. e identifiersCache keysAndValuesDo: [:k :l | l size > 1 ifTrue: [(l allSatisfy: [:el | el isPltEnumerationValue]) ifFalse: [l do: [:m | self registerError: (PlatypusExpressNamesCheckerError metaData: m message: ' multiply defined ')]]]]! ! !PlatypusExpressNamesChecker methodsFor: 'visit dictionary schema' stamp: 'apl 6/18/2004 17:59'! acceptSchemaDefinition: e self logInfo: 'schema ' , e name. super acceptSchemaDefinition: e! ! !PlatypusExpressNamesChecker methodsFor: 'visit environment schema' stamp: 'AlainPlantec 12/7/2012 10:55'! acceptSchemaInstance: e | index m | index := Dictionary new. e schemata do: [:sch | m := sch linkedMetaData. m isNil ifFalse: [ index at: m ifAbsentPut: OrderedCollection new. (index at: m ) add: m]]. index keysAndValuesDo: [:k :l | l size > 1 ifTrue: [ self registerError: (PlatypusExpressNamesCheckerError metaData: k message: 'several schemata with the same name ''' , l first key , '''')]]. e internalSchemata acceptTry: self! ! !PlatypusExpressNamesChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 5/19/2012 23:18'! checks: aMetaData self logInfo: 'NAMES CHECKING'. aMetaData acceptTry: self. self logInfo: 'NAMES CHECKING DONE'! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'apl 4/29/2008 12:17'! acceptAggregationType: e lower: l upper: u symbol: subtype flags: aCollection super acceptAggregationType: e lower: l upper: u symbol: subtype flags: aCollection. self acceptTry: e elementType. e elementType ifNotNil: [(e elementType isPltNamedTypeReference and: [e elementType ref notNil]) ifTrue: [e elementType: e elementType ref referenceOnSelf]]! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 5/20/2012 01:03'! acceptAssignable: e e head acceptTry: self. e qualifiers acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/7/2006 09:32'! acceptAttribute: e e redeclaring ifNotNil: [self acceptTry: e redeclaring]. (e domain isPltNamedTypeReference and: [e domain ref notNil]) ifTrue: [e domain: e domain ref referenceOnSelf]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/23/2012 14:00'! acceptAttributeReference: e | inversedEntity invKey invertedAttr | e entityRef acceptTry: self. resolutionPass = 1 ifTrue: [ e ref: nil. self declareWithError: e]. e entityRef ref ifNil: [self declareWithError: e] ifNotNil: [ e ref ifNil: [self declareWithError: e. inversedEntity := e entityRef ref. invKey := e name asUppercase. invertedAttr := inversedEntity inheritedAttributesReverseDetect: [:attr | attr name asUppercase = invKey]. e ref: invertedAttr. invertedAttr notNil ifTrue: [self declareWithoutError: e]]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/29/2008 12:15'! acceptConstantDefinition: e super acceptConstantDefinition: e. e domain ifNotNil: [(e domain isPltNamedTypeReference and: [e domain ref notNil]) ifTrue: [e domain: e domain ref referenceOnSelf]]. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/19/2012 22:59'! acceptDefinedType: e super acceptDefinedType: e. e metaConcept acceptTry: self. e domain ifNotNil: [(e domain isPltNamedTypeReference and: [e domain ref notNil]) ifTrue: [e domain: e domain ref referenceOnSelf]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptDerivedAttribute: e self acceptAttribute: e. super acceptDerivedAttribute: e. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/23/2012 13:59'! acceptDictionaryInstanceReference: e | found | resolutionPass = 1 ifTrue: [ e setRef: nil. self declareWithError: e]. e ref ifNil: [ (found := self lookUpIdentifierBN: e name) ifNil: [found := self lookUpNamedTypeBN: e name]. e setRef: found. found ifNil: [self declareWithError: e] ifNotNil: [self declareWithoutError: e]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/13/2012 23:29'! acceptDomainEquivalentItem: e ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/19/2012 22:59'! acceptEntityDefinition: e | sup | self logInfo: ' ', e class name , ': ' , e name. super acceptEntityDefinition: e. resolutionPass = 1 ifTrue: [e destroySubtypes] ifFalse: [1 to: e supertypes size do: [:pos | sup := e supertypes at: pos. sup isPltEntityDefinitionReference ifFalse: [sup ref ifNotNil: [sup ref isPltEntityDefinition ifTrue: [e supertypes at: pos put: sup ref referenceOnSelf] ifFalse: [sup ref: nil. self declareWithError: sup]]]]. e updateSupertypes]. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/24/2010 11:43'! acceptEntityInstancesSet: e ^ self acceptTry: e entityRef! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/14/2012 01:00'! acceptEscapedExpression: e | resolver | self parent ifNil: [super acceptEscapedExpression: e] ifNotNil: [ e acceptTry: (resolver := self parent copy). resolver objectsWithErrorIndex addAll: self objectsWithErrorIndex] ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptExplicitAttribute: e self acceptAttribute: e. super acceptExplicitAttribute: e. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 10/19/2010 01:27'! acceptExternalMetaSchema: e self acceptExternalSchema: e! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/15/2012 12:41'! acceptExternalSchema: e | chosen | resolutionPass = 1 ifTrue: [ e nativeSchema: nil. self declareWithError: e]. e nativeSchema: (e schemaInstance lookUpSchemaDefinitionBN: e name). e nativeSchema ifNil: [ (chosen := self interactivelyResolvedSchemaNamed: e name) isNil ifFalse: [ self schemaInstance tamarisItemRef ifNotNil: [:tamRef | tamRef insertLinkReferenceFrom: chosen. e nativeSchema: (e schemaInstance lookUpSchemaDefinitionBN: e name)]. e nativeSchema ifNil: [^ self declareWithError: e]]].! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/29/2008 12:16'! acceptFunctionDeclaration: e super acceptFunctionDeclaration: e. e returnType ifNotNil: [(e returnType isPltNamedTypeReference and: [e returnType ref notNil]) ifTrue: [e returnType: e returnType ref referenceOnSelf]]. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 3/29/2006 17:39'! acceptGlobalRule: e super acceptGlobalRule: e. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 5/20/2012 01:11'! acceptIdentifier: e | found | resolutionPass = 1 ifTrue: [ e setRef: nil. self declareWithError: e] ifFalse: [ e ref ifNil: [ e parameters ifNil: [(found := self lookUpIdentifierBN: e name) ifNil: [found := self lookUpNamedTypeBN: e name]] ifNotNil: [found := self lookUpFunctionCallOrConstructorNamed: e name]. e setRef: found. found ifNil: [self declareWithError: e] ifNotNil: [ ((found isPltFunctionDeclaration or: [found isPltEntityDefinition]) and: [e parameters isNil]) ifTrue: [e parameters: #()]. self declareWithoutError: e]]]. e parameters acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/13/2012 09:15'! acceptIncludeSchema: e self acceptExternalSchema: e ! ! !PlatypusExpressResolver methodsFor: 'visit population schema' stamp: 'AlainPlantec 6/14/2012 14:47'! acceptInternalRepresentation: e ^ e definition acceptTry: self. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 1/25/2007 11:43'! acceptInverseAttribute: e self acceptTry: e invertedAttr. self acceptAttribute: e. self acceptTry: e domain. super acceptInverseAttribute: e. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/29/2008 12:17'! acceptLocalVariable: e super acceptLocalVariable: e. e domain ifNotNil: [(e domain isPltNamedTypeReference and: [e domain ref notNil]) ifTrue: [e domain: e domain ref referenceOnSelf]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 01:03'! acceptMetaConceptDefinition: e | result metaResolContext | resolutionPass = 1 ifTrue: [self declareWithError: e] ifFalse: [ | resolver | e haveError ifTrue: [metaResolContext := OrderedCollection new. metaResolContext addAll: self schemaInstance metaSchemata asArray. metaResolContext add: e definition class platypusMetaData. resolver := self new visitContexts: metaResolContext parent: self. result := resolver checks: e metaExpression. result haveError ifTrue: [ self declareWithError: e. e updateExpression. self objectsWithErrorIndex addAll: result objectsWithErrorIndex] ifFalse: [e haveError: false]]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 01:03'! acceptMetaMappingDefinition: e | result metaResolContext | resolutionPass = 1 ifTrue: [ self declareWithError: e. e haveError: true] ifFalse: [ e haveError ifTrue: [ e definition: (self lookUpPath: e definitionPath). e definition isNil ifTrue: [self declareWithError: e] ifFalse: [ | resolver | metaResolContext := OrderedCollection new. metaResolContext addAll: self schemaInstance metaSchemata asArray. metaResolContext add: e definition class platypusMetaData. resolver := PlatypusExpressResolver new visitContexts: metaResolContext parent: self. result := resolver checks: e metaExpression. result haveError ifTrue: [ e updateExpression. self objectsWithErrorIndex addAll: result objectsWithErrorIndex] ifFalse: [e haveError: false]]]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 01:04'! acceptMetaMappingRule: e | result metaResolContext | resolutionPass = 1 ifTrue: [self declareWithError: e. e haveError: true] ifFalse: [e haveError ifTrue: [ | resolver | metaResolContext := OrderedCollection new. metaResolContext addAll: self schemaInstance metaSchemata asArray. resolver := PlatypusExpressResolver new visitContexts: metaResolContext parent: self. result := resolver checks: e metaExpression. result haveError ifTrue: [ e updateExpression. self objectsWithErrorIndex addAll: result objectsWithErrorIndex] ifFalse: [e haveError: false]. result := resolver checks: e metaCondition. result haveError ifTrue: [ e haveError: true. e updateCondition. self objectsWithErrorIndex addAll: result objectsWithErrorIndex] ifFalse: [e haveError: false]]]! ! !PlatypusExpressResolver methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/23/2012 13:54'! acceptModelContents: e ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 00:58'! acceptNamedTypeReference: e | found | resolutionPass = 1 ifTrue: [ e setRef: nil. self declareWithError: e]. (found := e ref) ifNil: [e setRef: (found := self lookUpNamedTypeBN: e name). found ifNil: [self declareWithError: e] ifNotNil: [self declareWithoutError: e]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/29/2008 12:16'! acceptParameterDefinition: e super acceptParameterDefinition: e. e domain ifNotNil: [(e domain isPltNamedTypeReference and: [e domain ref notNil]) ifTrue: [e domain: e domain ref referenceOnSelf]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 3/29/2006 17:41'! acceptProcedureDeclaration: e super acceptProcedureDeclaration: e. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'apl 3/15/2007 10:35'! acceptQualifiedExpression: e | qual enumVal refed | e head referenced ~= e head ifTrue: [e head ref: nil]. super acceptQualifiedExpression: e. e head referenced ifNil: [e head ref: (self lookUpNamedTypeBN: e head name). e head referenced ifNil: [self declareWithError: e head] ifNotNil: [self declareWithoutError: e head]]. ((refed := e head referenced) notNil and: [refed isPltDefinedType and: [e qualifiers size = 1]]) ifTrue: [qual := e qualifiers first. qual isPltEnumerationValue ifFalse: [self declareWithError: qual. (refed hasEnumerationElementNamed: qual name) ifTrue: [enumVal := PltEnumerationValue domain: (PltDefinedTypeReference ref: refed) element: qual name. self declareWithoutError: qual. e qualifiers at: 1 put: enumVal]]]. (e head isPltNamedTypeReference and: [e head ref notNil]) ifTrue: [e head: e domain ref referenceOnSelf]! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 1/28/2011 12:04'! acceptQueryExpression: e super acceptQueryExpression: e! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 9/19/2007 08:56'! acceptRemarkReference: e | refed prefRefed | super acceptRemarkReference: e. e inside name asUppercase = e prefix asUppercase ifTrue: [e suffix ifNil: [refed := e inside referenced] ifNotNil: [(refed := self lookUp: e suffix from: e inside referenced) ifNil: [refed := self lookUp: e suffix from: e inside referenced owner]]] ifFalse: [(prefRefed := (self lookUp: e prefix from: e inside referenced) ifNil: [self lookUp: e prefix from: e inside referenced owner]) ifNotNil: [e suffix ifNil: [refed := prefRefed] ifNotNil: [refed := self lookUp: e suffix from: prefRefed]]]. refed ifNil: [self declareWithError: e] ifNotNil: [self declareWithoutError: e. e referenced: PltDictionaryInstanceReference new. e referenced name: refed name. e referenced ref: refed]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 02:06'! acceptSchemaDefinition: e self logInfo: 'schema ' , e name. super acceptSchemaDefinition: e. e metaConcept acceptTry: self! ! !PlatypusExpressResolver methodsFor: 'visit environment schema' stamp: 'AlainPlantec 5/23/2012 13:56'! acceptSchemaInstance: e resolutionPass <= 1 ifTrue: [ e internalSchemata do: [:sch | sch rebuildLocalCaches]]. e internalSchemata do: [:sch | sch dataInterface do: [:int | int implicitlyImportedItems: OrderedCollection new. self acceptTry: int]]. e internalSchemata acceptTry: self. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/7/2006 10:12'! acceptSelectType: e | sel | super acceptSelectType: e. 1 to: e selections size do: [:pos | sel := e selections at: pos. (sel isPltNamedTypeReference and: [sel ref notNil]) ifTrue: [e selections at: pos put: sel ref referenceOnSelf]]! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'apl 3/20/2006 18:53'! acceptSelfIdentifier: e ! ! !PlatypusExpressResolver methodsFor: 'visit population schema' stamp: 'apl 6/18/2004 15:32'! acceptSimpleRecord: e ^ e definition acceptTry: self. ! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'apl 4/19/2006 13:31'! acceptSubEntityRefExpression: e super acceptSubEntityRefExpression: e. (e entityRef notNil and: [e entityRef isPltNamedTypeReference and: [e entityRef ref notNil]]) ifTrue: [e entityRef: e entityRef ref referenceOnSelf]! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 6/13/2012 23:39'! acceptTry: e e removeCachedDomain. ^ super acceptTry: e! ! !PlatypusExpressResolver methodsFor: 'visit expressions schema' stamp: 'apl 4/2/2006 22:01'! acceptUniquenessRuleAttributeIdentifier: e | redclEntity ruleAttribute | e groupRefName ifNil: [^ self acceptIdentifier: e]. resolutionPass = 1 ifTrue: [e setRef: nil. self declareWithError: e] ifFalse: [e ref ifNil: [(redclEntity := self lookUpNamedTypeBN: e groupRefName) ifNil: [e ref: nil. self declareWithError: e] ifNotNil: [(ruleAttribute := redclEntity attributeBN: e name) ifNil: [self declareWithError: e] ifNotNil: [e ref: ruleAttribute. self declareWithoutError: e]]]]! ! !PlatypusExpressResolver methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/6/2012 18:43'! acceptUnresolvedSymbol: e resolutionPass > 1 ifTrue: [ e token = 'schema_definition' ifTrue: [self halt]. (e resolvesFrom: self) ifFalse: [self declareWithError: e] ] ! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 5/24/2012 23:57'! checks: aMetaData self checksAll: (Array with: aMetaData)! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 12/7/2012 10:08'! checksAll: aCollection | stop prevErrsSet currErrsSet | resolutionPass := 1. aCollection do: [:e | e acceptTry: self]. prevErrsSet := IdentitySet new. currErrsSet := IdentitySet new. [ resolutionPass := resolutionPass + 1. currErrsSet addAll: self objectsWithErrorIndex. aCollection acceptTry: self. (stop := resolutionPass > 4 and: [(prevErrsSet difference: currErrsSet) isEmpty]) ifFalse: [ prevErrsSet addAll: currErrsSet. self forget]. stop] whileFalse. self objectsWithErrorIndex do: [:k | self registerError: (PlatypusExpressResolverError metaData: k message: 'unresolved symbol')]. ! ! !PlatypusExpressResolver methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 23:00'! interactivelyResolvedSchemaNamed: aName | key | key := aName asUppercase . ^ PlatypusSchemaInstanceReference interactivelyResolvedSchemaSatisfying: [:r | r name asUppercase = key] message: '''', aName,''' is for ?'. ! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'apl 9/19/2007 10:21'! lookUp: anIdent | found | (found := self lookUpIdentifierBN: anIdent) isNil ifTrue: [found := self lookUpNamedTypeBN: anIdent]. ^ found! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'apl 9/19/2007 08:55'! lookUp: ident from: aMetaData ^ aMetaData isNil ifFalse: [(aMetaData lookUpIdentifierBN: ident) ifNil: [(aMetaData lookUpNamedTypeBN: ident) ifNil: [aMetaData name asUppercase = ident asUppercase ifTrue: [aMetaData]]]]! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'apl 2/23/2005 21:44'! lookUpFunctionCallOrConstructorNamed: aName | found | found := self lookUpIdentifierBN: aName. (found isNil or: [found isPltAlgorithmDeclaration not]) ifTrue: [found := self lookUpNamedTypeBN: aName]. ^ found! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 4/12/2011 11:30'! lookUpIdentifierBN: aName | found | resolutionPass = 1 ifTrue: [self halt]. visitPath reverseDo: [:el | el ifNotNil: [ el isPltSchemaInstance ifFalse: [(found := el lookUpIdentifierBN: aName) ifNotNil: [^ found]]]]. ^ PltPlatypusExpressPrimitivesSchemaInstance lookUpIdentifierBN: aName! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 4/12/2011 11:32'! lookUpNamedTypeBN: aName | found | visitPath reverseDo: [:el | el ifNotNil: [el isPltSchemaInstance ifFalse: [(found := el lookUpNamedTypeBN: aName) ifNotNil: [^ found]]]]. ^ PltPlatypusExpressPrimitivesSchemaInstance lookUpNamedTypeBN: aName! ! !PlatypusExpressResolver methodsFor: 'visit generic' stamp: 'AlainPlantec 3/7/2011 14:49'! lookUpPath: aListOfString | ident found path key | ident := aListOfString first. key := ident asUppercase. found := self schemaInstance allSchemata detect: [:schi | schi notNil and: [key = schi key]] ifNone: [self lookUp: ident]. path := aListOfString allButFirst. [path isEmpty or: [found isNil]] whileFalse: [found := self lookUp: path first from: found. path := path allButFirst]. ^ found! ! !PlatypusExpressResolver methodsFor: 'accessing' stamp: 'apl 4/13/2006 11:48'! parent ^ parent! ! !PlatypusExpressResolver methodsFor: 'accessing' stamp: 'apl 4/13/2006 11:49'! parent: aResolver parent := aResolver! ! !PlatypusExpressResolver methodsFor: 'accessing' stamp: 'apl 4/13/2006 11:56'! visitContexts: aCollection parent: aResolver super visitContexts: aCollection. self parent: aResolver ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:06'! acceptAggregationType: e | low upper | self checksBound: e lowerBound messagePrefix: 'lower bound' from: e. self checksBound: e upperBound messagePrefix: 'upper bound' from: e. (e lowerBound notNil and: [e upperBound notNil]) ifTrue: [((low := e lowerBound asInteger) notNil and: [(upper := e upperBound asInteger) notNil]) ifTrue: [low <= upper ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'low bound must be greater or equal than upper bound' path: visitPath asArray)]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:11'! acceptAndExpression: e super acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltLogicalType and: [domain2 isPltLogicalType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptArrayType: e super acceptArrayType: e. self acceptAggregationType: e. e isGeneralType ifFalse: [e lowerBound ifNil: [self registerError: (PlatypusExpressSemanticCheckerError message: 'low index must be set' path: visitPath asArray)]. e upperBound ifNil: [self registerError: (PlatypusExpressSemanticCheckerError message: 'high index must be set' path: visitPath asArray)]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit statements schema' stamp: 'apl 6/22/2004 12:44'! acceptAssignmentStatement: e e left acceptTry: self. e rightExpr acceptTry: self. self checksAssignOf: e rightExpr to: e left from: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 11/21/2003 15:20'! acceptBagType: e super acceptBagType: e. self acceptAggregationType: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 11/21/2003 13:49'! acceptBound: e ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 12/9/2013 11:26'! acceptConstantDefinition: e e initializer ifNotNil: [ self checksAssignOf: e initializer to: e from: e]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 7/1/2004 00:50'! acceptContextDefinition: e self logPathAndInfo: e name. super acceptContextDefinition: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/18/2006 09:28'! acceptDefinedType: e | errPathStack errMess | super acceptDefinedType: e. errPathStack := OrderedCollection new. (e checksDomainPath: OrderedCollection new errorStack: errPathStack) ifFalse: [errMess := ''. errPathStack do: [:st | errMess := errMess , st name] separatedBy: [errMess := errMess , '->']. self registerError: (PlatypusExpressSemanticCheckerError message: 'cycle in domain path: ' , errMess path: visitPath asArray)]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptDerivedAttribute: e super acceptDerivedAttribute: e. e redeclaring ifNotNil: [((e redeclaring ref isKindOf: e class) or: [e redeclaring ref isKindOf: PltExplicitAttribute]) ifTrue: [self checksAttributeRedeclaring: e] ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'redeclaring attribute ''' , e name , ''' should be an explicit or a derived attribute' path: visitPath asArray)]]. self checksAssignOf: e assign to: e from: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:16'! acceptDivExpression: e super acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 9/23/2003 19:22'! acceptDomainEquivalentItem: e ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/13/2012 23:49'! acceptEntityDefinition: e super acceptEntityDefinition: e. (e checksHierarchy: OrderedCollection new errorStack: OrderedCollection new) ifTrue: [e checksAttributesNames do: [:err | self registerError: err]] ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'cycle in hierarchy path' path: e inclusiveOwnerPath)]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptEnumerationType: e | elements | super acceptEnumerationType: e. elements := Set new. e elements do: [:el | (elements includes: el) ifTrue: [self registerError: (PlatypusExpressSemanticCheckerError message: 'enumeration type contains several occurences of ''' , el , '''' path: visitPath asArray)]. elements add: el]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:25'! acceptEqualExpression: e | | super acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptExplicitAttribute: e super acceptExplicitAttribute: e. e redeclaring ifNotNil: [(e redeclaring ref isKindOf: e class) ifTrue: [self checksAttributeRedeclaring: e] ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'redeclaring attribute ''' , e name , ''' should be an explicit attribute' path: visitPath asArray)]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:16'! acceptExpoExpression: e super acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 10/19/2010 01:21'! acceptExternalMetaSchema: e self acceptExternalSchema: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/13/2012 23:49'! acceptExternalSchema: e e nativeSchema = e owner ifTrue: [self registerError: (PlatypusExpressSemanticCheckerError message: 'used/referenced inside itself' path: e inclusiveOwnerPath)]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 6/14/2012 01:45'! acceptFunctionDeclaration: e super acceptFunctionDeclaration: e. (e statements anySatisfy: [:stmt | stmt alwaysReturn]) ifFalse: [ self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'never return possibility')]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:25'! acceptGreaterEqualExpression: e | | super acceptBinaryExpression: e. ( self checksAggregateOperator: e) ifNil: [^ self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 6/22/2004 15:36'! acceptGreaterThanExpression: e self acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 12/11/2013 09:50'! acceptInExpression: e | rinfered linfered | super acceptBinaryExpression: e. rinfered := e rightExpr computedDomain. rinfered isPltGenericType ifTrue: [^ true]. linfered := e leftExpr computedDomain. rinfered isPltAggregateCompatibleType ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'invalid right operande, should be an aggregate'). ^ false]. (linfered isCompatibleWith: rinfered elementType) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'operand domain incompatibility: ', ('aggregate domain : ' , rinfered errorQualifier), ('element domain : ' , linfered errorQualifier) ). ^ false]. ^ true! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 4/13/2006 08:38'! acceptIncludeSchema: e self acceptExternalSchema: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:26'! acceptInstEqualExpression: e super acceptBinaryExpression: e. ( self checksAggregateOperator: e) ifNil: [ self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:26'! acceptInstNotEqualExpression: e super acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [^ self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 3/11/2011 12:26'! acceptInstanceConstructionExpression: e self acceptBinaryExpression: e. "(self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]]"! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptInverseAttribute: e | elementType refedDomain | super acceptInverseAttribute: e. refedDomain := e invertedAttr entityRef referenced. (refedDomain isPltNamedType or: [refedDomain isPltAggregationType and: [refedDomain isPltSetType or: [refedDomain isPltBagType]]]) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'bad inverse attribute ''' , e name , ''' domain (should be an Entity, a Set or a Bag)' path: visitPath asArray)]. refedDomain isPltAggregationType ifTrue: [elementType := refedDomain elementType. elementType isPltNamedType ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'bad inverse attribute ''' , e name , ''' domain' path: visitPath asArray)]]. e redeclaring ifNotNil: [(e redeclaring ref isKindOf: e class) ifTrue: [self checksAttributeRedeclaring: e] ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'redeclaring attribute ''' , e name , ''' should be an inverse attribute' path: visitPath asArray)]]. (refedDomain isSpecializationOf: e invertedAttr ref owner) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: 'inversed attribute domain ''' , e invertedAttr name , ''' in entity ''' , e invertedAttr owner name , ''' should be a specialization of ''' , e owner name , '''' path: visitPath asArray)]. self checksBound: e minCardinality messagePrefix: 'min cardinality' from: e. self checksBound: e maxCardinality messagePrefix: 'max cardinality' from: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:27'! acceptLessEqualExpression: e | | self acceptBinaryExpression: e. ( self checksAggregateOperator: e) ifNil: [ self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 6/22/2004 15:36'! acceptLessThanExpression: e self acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 11/21/2003 15:20'! acceptListType: e super acceptListType: e. self acceptAggregationType: e. ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 6/22/2004 12:44'! acceptLocalVariable: e e initializer ifNotNil: [self checksAssignOf: e initializer to: e from: e]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:16'! acceptMinusExpression: e self acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]] ifNotNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isPltAggregateCompatibleType or: [domain1 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:16'! acceptModExpression: e self acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:17'! acceptMultExpression: e self acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]] ifNotNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltAggregateCompatibleType or: [domain1 isPltGenericType]) and: [domain2 isPltAggregateCompatibleType or: [domain2 isPltGenericType]]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/4/2004 13:28'! acceptNotEqualExpression: e self acceptBinaryExpression: e. ( self checksAggregateOperator: e) ifNil: [^ self checksBinaryOperator: e testBlock: [:domain1 :domain2 | domain1 isCompatibleWith: domain2]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:12'! acceptOrExpression: e self acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltLogicalType and: [domain2 isPltLogicalType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 4/5/2010 17:41'! acceptPlusExpression: e self acceptBinaryExpression: e. (self checksAggregateOperator: e) ifNil: [self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [(domain1 isPltStringType and: [domain2 isPltStringType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:17'! acceptRealDivExpression: e self acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltNumberType and: [domain2 isPltNumberType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 4/13/2006 08:38'! acceptSchemaDefinition: e self logInfo: 'schema ' , e name. super acceptSchemaDefinition: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit environment schema' stamp: 'apl 3/22/2006 08:24'! acceptSchemaInstance: e (e internalSchemata) acceptTry: self! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 11/21/2003 15:21'! acceptSetType: e super acceptSetType: e. self acceptAggregationType: e! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 6/22/2004 08:44'! acceptStatementsContainer: e super acceptStatementsContainer: e. self statementNotReachTest: e ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'AlainPlantec 5/6/2012 18:46'! acceptSupertypeConstraint: e super acceptSupertypeConstraint: e. (e checksInheritance: e constrained ref) ifNotEmpty: [:errs | self registerError: (PlatypusExpressSemanticCheckerError message: 'error in hierarchy specification' path: visitPath asArray)] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit dictionary schema' stamp: 'apl 2/17/2006 22:07'! acceptUniquenessRule: e | attributes | super acceptUniquenessRule: e. attributes := Set new. e attributes do: [:attr | (attributes includes: attr referenced) ifTrue: [self registerError: (PlatypusExpressSemanticCheckerError message: 'contains several occurences of ''' , attr name , '''' path: visitPath asArray)]. attributes add: attr referenced]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit expressions schema' stamp: 'apl 2/23/2005 22:12'! acceptXorExpression: e self acceptBinaryExpression: e. self checksBinaryOperator: e testBlock: [:domain1 :domain2 | (domain1 isPltLogicalType and: [domain2 isPltLogicalType]) or: [domain1 isPltGenericType or: [domain2 isPltGenericType]]]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 5/19/2012 23:19'! checks: aMetaData self logInfo: 'SEMANTIC CHECKING'. aMetaData acceptTry: self. self logInfo: 'SEMANTIC CHECKING DONE'! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 6/14/2012 01:52'! checksAggregateOperator: e | linfered rinfered theElementType theAggrType elType1 elType2 aggrExpr elExpr | linfered := e leftExpr computedDomain. rinfered := e rightExpr computedDomain. (linfered isPltAggregateCompatibleType or: [rinfered isPltAggregateCompatibleType]) ifTrue: [(linfered isPltAggregateCompatibleType and: [rinfered isPltAggregateCompatibleType]) ifTrue: [elType1 := linfered elementType computedDomain. elType2 := rinfered elementType computedDomain. ((linfered canAddElementOfType: elType2) and: [rinfered canAddElementOfType: elType1]) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'aggregation operation domain incompatibility, ' , ('left element domain : ' , elType1 errorQualifier) , ' right element domain : ' , elType2 errorQualifier). ^ false]] ifFalse: [linfered isPltAggregateCompatibleType ifTrue: [theElementType := rinfered. theAggrType := linfered. aggrExpr := e leftExpr. elExpr := e rightExpr] ifFalse: [theElementType := linfered. theAggrType := rinfered. aggrExpr := e rightExpr. elExpr := e leftExpr]. elType1 := theAggrType elementType computedDomain. elType2 := theElementType. (theAggrType canAddElementOfType: elType2) ifFalse: [ self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'aggregation operation domain incompatibility, ' , ('aggregate domain : ' , theAggrType errorQualifier) , ' element domain : ' , theElementType errorQualifier). ^ false]]. ^ true] ifFalse: [^ nil]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 1/13/2013 13:10'! checksAssignOf: expr to: anAssignableOrAttribute from: e | infered static | ((infered := expr computedDomain) isAssignableTo: (static := anAssignableOrAttribute computedDomain)) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: anAssignableOrAttribute message: 'domain incompatibility in assignment, ', 'lhs domain : ' , (static ifNil: ['? '] ifNotNil: [:s | s errorQualifier]), ', rhs domain : ' , infered errorQualifier)]. (anAssignableOrAttribute isPltAssignable and: [anAssignableOrAttribute head referenced isPltAliasStatementVariable]) ifTrue: [ self registerError: (PlatypusExpressSemanticCheckerError metaData: anAssignableOrAttribute head referenced message: 'not implemented feature: writeable alias variable')].! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 12/4/2013 20:58'! checksAttributeRedeclaring: attr | redeclaredDomain redeclaringDomain | redeclaringDomain := attr domain referenced. redeclaredDomain := attr redeclaring ref domain referenced. (redeclaringDomain isSpecializationOf: redeclaredDomain) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: attr message: ('redeclaring domain must be a specialization of redeclared domain, ' , ('invalid redeclaring domain : ' , redeclaringDomain errorQualifier , ', redeclared attribute: domain : ' , redeclaredDomain errorQualifier)))]! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 1/14/2013 22:03'! checksBinaryOperator: e testBlock: aBlock | linfered rinfered | linfered := e leftExpr computedDomain. rinfered := e rightExpr computedDomain. (aBlock value: linfered value: rinfered) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError metaData: e message: 'domain incompatibility in binary expression, ' , ('lhs domain : ' , linfered errorQualifier) , (' rhs domain : ' , rinfered errorQualifier)). ^ false]. ^ true! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'AlainPlantec 1/13/2013 13:11'! checksBound: e messagePrefix: aString from: parent e ifNotNil: [ e inferedDomain ifNotNil: [:id | (id isCompatibleWith: PltNumberType asDomain) ifFalse: [self registerError: (PlatypusExpressSemanticCheckerError message: aString , ' should be a number, ', 'bound domain : ' , e inferedDomain errorQualifier)]]] ! ! !PlatypusExpressSemanticChecker methodsFor: 'visit generic' stamp: 'apl 2/18/2006 10:15'! statementNotReachTest: aStatementContainer | stmt stmts | stmts := aStatementContainer statements. 1 to: stmts size - 1 do: [:pos | stmt := stmts at: pos. (stmt alwaysReturn and: [stmt isPltNativeStatement not]) ifTrue: [self registerError: (PlatypusExpressSemanticCheckerError message: 'statement not reached: ', (stmts at: pos + 1) prettyPrintedExpressCode path: visitPath asArray)]]. ! ! !PlatypusStepChecker class methodsFor: 'checking' stamp: 'apl 6/22/2004 18:44'! checks: metaData ^ self new checks: metaData! ! !PlatypusStepChecker methodsFor: 'visit generic' stamp: 'apl 11/10/2003 12:22'! checks: aMetaData self subclassResponsibility! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/20/2004 23:26'! acceptAttributeReference: e e ref ifNotNil: [e ref acceptTry: self]. e entityRef acceptTry: self.! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/23/2004 19:44'! acceptDictionaryInstanceReference: e e ref ifNotNil: [e ref acceptTry: self]! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/23/2004 20:07'! acceptEntityDefinitionReference: e e ref ifNotNil: [e ref acceptTry: self]! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/14/2012 14:43'! acceptIdentifier: e e ref acceptTry: self. e parameters acceptTry: self! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit environment schema' stamp: 'AlainPlantec 6/4/2012 17:39'! acceptModelContents: e e dataInstances do: [:v | v acceptTry: self] ! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit dictionary schema' stamp: 'apl 7/26/2004 19:15'! acceptNamedTypeReference: e e ref ifNotNil: [e ref acceptTry: self]! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit generic' stamp: 'apl 2/15/2005 19:30'! acceptTry: anObject (self alreadyDoneFor: anObject) ifFalse: [self doneFor: anObject. ^ super acceptTry: anObject]! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit generic' stamp: 'apl 6/14/2004 19:20'! alreadyDoneFor: anObject visited at: anObject ifAbsent: [^ false]. ^ true! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit generic' stamp: 'apl 6/14/2004 19:20'! doneFor: anObject visited at: anObject put: anObject! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'visit generic' stamp: 'apl 6/14/2004 19:20'! forceNotdoneFor: anObject visited removeKey: anObject ifAbsent: []! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 6/22/2004 13:02'! forget super forget. self initializeVisited! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 6/14/2004 19:21'! initialize super initialize. self initializeVisited ! ! !PlatypusStepOnePassAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 6/14/2004 19:21'! initializeVisited visited := IdentityDictionary new! ! !PlatypusStepOwnerSetter methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 6/14/2012 15:24'! acceptEnumerationValue: e super acceptEnumerationValue: e! ! !PlatypusStepOwnerSetter methodsFor: 'visit expressions schema' stamp: 'AlainPlantec 6/14/2012 14:43'! acceptIdentifier: e e ref acceptTry: self. e parameters acceptTry: self! ! !PlatypusStepOwnerSetter methodsFor: 'visit environment schema' stamp: 'AlainPlantec 6/14/2012 10:52'! acceptSchemaInstance: e e internalSchemata acceptTry: self. e metaConceptsIndex acceptTry: self. ! ! !PlatypusStepOwnerSetter methodsFor: 'visit generic' stamp: 'AlainPlantec 6/14/2012 14:57'! acceptTry: e e ifNotNil: [ e owner ifNil: [ visitPath isEmpty ifFalse: [e owner: visitPath top]]. super acceptTry: e]! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'accessing' stamp: 'apl 5/29/2005 23:41'! context ^self schemaDefinition context! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'instance creation' stamp: 'apl 3/15/2005 15:08'! fromValues: values ^ self new fromValues: values! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'instance creation' stamp: 'apl 5/29/2005 23:55'! invoke ^self new invoke! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'instance creation' stamp: 'apl 5/29/2005 23:56'! invokeFromValues: values | algo | algo := self new fromValues: values. ^algo invoke! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'instance creation' stamp: 'AlainPlantec 4/12/2011 13:11'! invokeOnContextStream: aStream | repo | repo := self schemaInstance repositoryClass new asSchemaInstanceContext. repo parseStream: aStream. ^self new invoke! ! !PlatypusCoreAlgorithmDeclaration class methodsFor: 'accessing' stamp: 'apl 2/28/2006 22:46'! schemaInstance ^ self schemaDefinition schemaInstance! ! !PlatypusCoreAlgorithmDeclaration methodsFor: 'accessing' stamp: 'apl 3/15/2005 15:09'! fromValues: values ! ! !PlatypusCoreAlgorithmDeclaration methodsFor: 'executing' stamp: 'apl 1/31/2006 11:49'! invoke ! ! !PlatypusCoreAlgorithmDeclaration methodsFor: 'executing' stamp: 'AlainPlantec 4/12/2011 13:01'! invokeOnModelDataStream: aStream ! ! !PlatypusCoreAlgorithmDeclaration methodsFor: 'accessing' stamp: 'apl 2/2/2006 16:40'! myContext ^ self class context! ! !PlatypusCoreAlgorithmDeclaration methodsFor: 'executing' stamp: 'apl 1/31/2006 10:07'! return: anObject ^ anObject pltNativeValue ! ! !PltABSFunction commentStamp: 'platypus comment' prior: 105959428! FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; ! !PltABSFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltABSFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltABSFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltABSFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltABSFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltABSFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v abs ] ! ! !PltABSFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltABSFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltACOSFunction commentStamp: 'platypus comment' prior: 105959836! FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; ! !PltACOSFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltACOSFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltACOSFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltACOSFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltACOSFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltACOSFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v arcCos ] ! ! !PltACOSFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltACOSFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltASINFunction commentStamp: 'platypus comment' prior: 105960256! FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; ! !PltASINFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltASINFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltASINFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltASINFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltASINFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltASINFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v arcSin ] ! ! !PltASINFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltASINFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltATANFunction commentStamp: 'platypus comment' prior: 105960676! FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; ! !PltATANFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltATANFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltATANFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltATANFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self v1: (values at: 1). self v2: (values at: 2) ! ! !PltATANFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self v1) ifNotNil: [ self return: v arcTan ] ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! v1 ^ v1 ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! v1: aNumber v1 := aNumber ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! v1: aNumber v2: aNumber1 self v1: aNumber. self v2: aNumber1 ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! v2 ^ v2 ! ! !PltATANFunction methodsFor: 'platypus-generated-accessing'! v2: aNumber1 v2 := aNumber1 ! ! !PltBLENGTHFunction commentStamp: 'platypus comment' prior: 105961115! FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ! !PltBLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBLENGTHFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltBLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBLENGTHFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltBLENGTHFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v size ] ! ! !PltBLENGTHFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltBLENGTHFunction methodsFor: 'platypus-generated-accessing'! p: aBinary p := aBinary ! ! !PltCOSFunction commentStamp: 'platypus comment' prior: 105961539! FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; ! !PltCOSFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltCOSFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltCOSFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltCOSFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltCOSFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltCOSFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v cos ] ! ! !PltCOSFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltCOSFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltEVENFunction commentStamp: 'platypus comment' prior: 105961952! FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; ! !PltEVENFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEVENFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltEVENFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEVENFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEVENFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltEVENFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v even ] ! ! !PltEVENFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltEVENFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltEXISTSFunction commentStamp: 'platypus comment' prior: 105962376! FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; ! !PltEXISTSFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEXISTSFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltEXISTSFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEXISTSFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEXISTSFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltEXISTSFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ self return: self p notNil ! ! !PltEXISTSFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltEXISTSFunction methodsFor: 'platypus-generated-accessing'! p: anObject p := anObject ! ! !PltEXPFunction commentStamp: 'platypus comment' prior: 105962782! FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; ! !PltEXPFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEXPFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltEXPFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEXPFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEXPFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltEXPFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v exp ] ! ! !PltEXPFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltEXPFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltFORMATFunction commentStamp: 'platypus comment' prior: 105963197! FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; ! !PltFORMATFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFORMATFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltFORMATFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFORMATFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pN: (values at: 1). self pF: (values at: 2) ! ! !PltFORMATFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | n f formatted | (n := self pN) ifNil: [ ^ self return: n ] ifNotNil: [ (f := self pF) ifNil: [ ^ self return: f ] ifNotNil: [ formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted ] ] ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! pF ^ pF ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! pF: aString pF := aString ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! pN ^ pN ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! pN: aNumber pN := aNumber ! ! !PltFORMATFunction methodsFor: 'platypus-generated-accessing'! pN: aNumber pF: aString self pN: aNumber. self pF: aString ! ! !PltHIBOUNDFunction commentStamp: 'platypus comment' prior: 105964033! FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ! !PltHIBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltHIBOUNDFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltHIBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltHIBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltHIBOUNDFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltHIBOUNDFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v upperBound ] ! ! !PltHIBOUNDFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltHIBOUNDFunction methodsFor: 'platypus-generated-accessing'! p: aCollectionOfObject p := aCollectionOfObject ! ! !PltHIINDEXFunction commentStamp: 'platypus comment' prior: 105964445! FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ! !PltHIINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltHIINDEXFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltHIINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltHIINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltHIINDEXFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltHIINDEXFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v upperBound ] ! ! !PltHIINDEXFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltHIINDEXFunction methodsFor: 'platypus-generated-accessing'! p: aCollectionOfObject p := aCollectionOfObject ! ! !PltINSERTProcedure commentStamp: 'platypus comment' prior: 105964994! PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; ! !PltINSERTProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltINSERTProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltINSERTProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltINSERTProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self pL: (values at: 1). self pE: (values at: 2). self pP: (values at: 3) ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [ l addFirst: e ] ifFalse: [ p >= l size ifTrue: [ l addLast: e ] ifFalse: [ l add: e afterIndex: p ] ] ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pE ^ pE ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pE: anObject pE := anObject ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pL ^ pL ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pL: aListOfObject pL := aListOfObject ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pL: aListOfObject pE: anObject pP: anInteger self pL: aListOfObject. self pE: anObject. self pP: anInteger ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pP ^ pP ! ! !PltINSERTProcedure methodsFor: 'platypus-generated-accessing'! pP: anInteger pP := anInteger ! ! !PltLENGTHFunction commentStamp: 'platypus comment' prior: 105965571! FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ! !PltLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLENGTHFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLENGTHFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLENGTHFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLENGTHFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v size ] ! ! !PltLENGTHFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLENGTHFunction methodsFor: 'platypus-generated-accessing'! p: aString p := aString ! ! !PltLOBOUNDFunction commentStamp: 'platypus comment' prior: 105965998! FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ! !PltLOBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLOBOUNDFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLOBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLOBOUNDFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLOBOUNDFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLOBOUNDFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v lowerBound ] ! ! !PltLOBOUNDFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLOBOUNDFunction methodsFor: 'platypus-generated-accessing'! p: aCollectionOfObject p := aCollectionOfObject ! ! !PltLOG10Function commentStamp: 'platypus comment' prior: 105966506! FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; ! !PltLOG10Function class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLOG10Function class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLOG10Function class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLOG10Function class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLOG10Function methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLOG10Function methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v log ] ! ! !PltLOG10Function methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLOG10Function methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltLOG2Function commentStamp: 'platypus comment' prior: 105966921! FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; ! !PltLOG2Function class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLOG2Function class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLOG2Function class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLOG2Function class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLOG2Function methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLOG2Function methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: (v log: 2) ] ! ! !PltLOG2Function methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLOG2Function methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltLOGFunction commentStamp: 'platypus comment' prior: 105967340! FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; ! !PltLOGFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLOGFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLOGFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLOGFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLOGFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLOGFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v ln ] ! ! !PltLOGFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLOGFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltLOINDEXFunction commentStamp: 'platypus comment' prior: 105967754! FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ! !PltLOINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLOINDEXFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltLOINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLOINDEXFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLOINDEXFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltLOINDEXFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v lowerBound ] ! ! !PltLOINDEXFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltLOINDEXFunction methodsFor: 'platypus-generated-accessing'! p: aCollectionOfObject p := aCollectionOfObject ! ! !PltNVLFunction commentStamp: 'platypus comment' prior: 105968275! FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; ! !PltNVLFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNVLFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltNVLFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNVLFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1). self substitute: (values at: 2) ! ! !PltNVLFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNil: [ self return: self substitute ] ifNotNil: [ self return: v ] ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! p: anObject p := anObject ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! p: anObject substitute: anObject1 self p: anObject. self substitute: anObject1 ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! substitute ^ substitute ! ! !PltNVLFunction methodsFor: 'platypus-generated-accessing'! substitute: anObject1 substitute := anObject1 ! ! !PltODDFunction commentStamp: 'platypus comment' prior: 105968741! FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; ! !PltODDFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltODDFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltODDFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltODDFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltODDFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltODDFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v odd ] ! ! !PltODDFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltODDFunction methodsFor: 'platypus-generated-accessing'! p: anInteger p := anInteger ! ! !PltREMOVEProcedure commentStamp: 'platypus comment' prior: 105969162! PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; ! !PltREMOVEProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltREMOVEProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltREMOVEProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltREMOVEProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self pL: (values at: 1). self pP: (values at: 2) ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | l p | l := self pL. p := self pP. l removeAt: p ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! pL ^ pL ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! pL: aListOfObject pL := aListOfObject ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! pL: aListOfObject pP: anInteger self pL: aListOfObject. self pP: anInteger ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! pP ^ pP ! ! !PltREMOVEProcedure methodsFor: 'platypus-generated-accessing'! pP: anInteger pP := anInteger ! ! !PltROLESOFFunction commentStamp: 'platypus comment' prior: 105969554! FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; ! !PltROLESOFFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltROLESOFFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltROLESOFFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltROLESOFFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltROLESOFFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltROLESOFFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | arg result | (arg := self p) ifNil: [ ^ self return: arg ] ifNotNil: [ result := Set new. self dataDo: [ :d | d rolesOf: arg in: result ]. ^ self return: result ] ! ! !PltROLESOFFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltROLESOFFunction methodsFor: 'platypus-generated-accessing'! p: anObject p := anObject ! ! !PltSINFunction commentStamp: 'platypus comment' prior: 105970259! FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; ! !PltSINFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSINFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltSINFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSINFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSINFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltSINFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v sin ] ! ! !PltSINFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltSINFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltSIZEOFFunction commentStamp: 'platypus comment' prior: 105970672! FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; ! !PltSIZEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSIZEOFFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltSIZEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSIZEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSIZEOFFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltSIZEOFFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v size ] ! ! !PltSIZEOFFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltSIZEOFFunction methodsFor: 'platypus-generated-accessing'! p: aCollectionOfObject p := aCollectionOfObject ! ! !PltSQRTFunction commentStamp: 'platypus comment' prior: 105971108! FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; ! !PltSQRTFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSQRTFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltSQRTFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSQRTFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSQRTFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltSQRTFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v sqrt ] ! ! !PltSQRTFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltSQRTFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltTANFunction commentStamp: 'platypus comment' prior: 105971521! FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; ! !PltTANFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltTANFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltTANFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltTANFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltTANFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltTANFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | v | ^ (v := self p) ifNotNil: [ self return: v tan ] ! ! !PltTANFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltTANFunction methodsFor: 'platypus-generated-accessing'! p: aNumber p := aNumber ! ! !PltTYPEOFFunction commentStamp: 'platypus comment' prior: 105971934! FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; ! !PltTYPEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltTYPEOFFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltTYPEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltTYPEOFFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltTYPEOFFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !PltTYPEOFFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | arg result | (arg := self p) ifNil: [ ^ self return: arg ] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [ result := OrderedCollection new. arg records do: [ :rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData) ] ] ifFalse: [ result := PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData ]. ^ self return: (result collect: [ :r | r val ]) ] ! ! !PltTYPEOFFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !PltTYPEOFFunction methodsFor: 'platypus-generated-accessing'! p: anObject p := anObject ! ! !PltUSEDINFunction commentStamp: 'platypus comment' prior: 105972860! FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; ! !PltUSEDINFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUSEDINFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltUSEDINFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUSEDINFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self t: (values at: 1). self r: (values at: 2) ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [ ^ self return: ent ] ifNotNil: [ role ifNil: [ ^ self return: role ] ifNotNil: [ role ifEmpty: [ schemaKey := ''. entityKey := ''. attributeKey := '' ] ifNotEmpty: [ :arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase ]. self dataDo: [ :d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result ]. ^ self return: result ] ] ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! r: aString r := aString ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! t ^ t ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! t: anObject t := anObject ! ! !PltUSEDINFunction methodsFor: 'platypus-generated-accessing'! t: anObject r: aString self t: anObject. self r: aString ! ! !PltVALUEFunction commentStamp: 'platypus comment' prior: 105974929! FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; ! !PltVALUEFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltVALUEFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltVALUEFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltVALUEFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltVALUEFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self v: (values at: 1) ! ! !PltVALUEFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | param nb result | (param := self v) isString ifTrue: [ [ result := param asNumber ] on: Error do: [ result := nil ] ] ifFalse: [ result := nil ]. ^ self return: result ! ! !PltVALUEFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !PltVALUEFunction methodsFor: 'platypus-generated-accessing'! v: aString v := aString ! ! !PltValueInFunction commentStamp: 'platypus comment' prior: 105975722! FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ! !PltValueInFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltValueInFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltValueInFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltValueInFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! c ^ c ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! c: aCollectionOfObject c := aCollectionOfObject ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! c: aCollectionOfObject v: anObject self c: aCollectionOfObject. self v: anObject ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self c: (values at: 1). self v: (values at: 2) ! ! !PltValueInFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self signal: 'VALUE_IN primitive is not implemented'. ^ self return: nil ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !PltValueInFunction methodsFor: 'platypus-generated-accessing'! v: anObject v := anObject ! ! !PltValueUniqueFunction commentStamp: 'platypus comment' prior: 105976111! FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ! !PltValueUniqueFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltValueUniqueFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltExpressBuiltinsSchemaDefinition singleton ! ! !PltValueUniqueFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltValueUniqueFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltValueUniqueFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self v: (values at: 1) ! ! !PltValueUniqueFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self signal: 'VALUE_UNIQUE primitive is not implemented'. ^ self return: nil ! ! !PltValueUniqueFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !PltValueUniqueFunction methodsFor: 'platypus-generated-accessing'! v: aCollectionOfObject v := aCollectionOfObject ! ! !PlatypusCoreContextDefinition class methodsFor: 'accessing' stamp: 'apl 4/20/2006 09:57'! lookUpIdentifierBN: aName ^ self singleton lookUpIdentifierBN: aName ! ! !PlatypusCoreContextDefinition class methodsFor: 'accessing' stamp: 'apl 4/20/2006 09:57'! lookUpNamedTypeBN: aName ^ self singleton lookUpNamedTypeBN: aName! ! !PlatypusCoreContextDefinition class methodsFor: 'accessing' stamp: 'alain.plantec 1/20/2009 11:55'! reinitializeSingleton singleton ifNotNil: [singleton metaData ifNotNil: [singleton metaData deepDestroy]]. singleton := nil! ! !PlatypusCoreContextDefinition class methodsFor: 'accessing' stamp: 'alain.plantec 1/20/2009 11:56'! singleton ^ singleton ifNil: [singleton := self new]! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'apl 3/15/2005 13:14'! entityDefinitionClassInfos | result | result := OrderedCollection new. 1 to: self entityDefinitionCount do: [:cpt | result add: (self perform: ('entityDefinition' , cpt asString) asSymbol)]. ^ result! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'apl 3/15/2005 13:12'! entityDefinitionCount self subclassResponsibility ! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'apl 3/15/2005 13:11'! functionDeclarationClassInfos | result | result := OrderedCollection new. 1 to: self functionDeclarationCount do: [:cpt | result add: (self perform: ('functionDeclaration' , cpt asString) asSymbol)]. ^ result! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'apl 3/15/2005 13:13'! functionDeclarationCount self subclassResponsibility! ! !PlatypusCoreContextDefinition methodsFor: 'private initializing' stamp: 'apl 3/15/2005 13:31'! initializeFromOwner: myOwner | metaDataByClassNameIndex classNamesByMetaDataNameIndex elementName elementClassName | owner := myOwner. metaDataByClassNameIndex := myOwner metaDataByClassNameIndex. classNamesByMetaDataNameIndex := myOwner classNamesByMetaDataNameIndex. metaDataByClassNameIndex at: self class name asSymbol put: self metaData. self entityDefinitionClassInfos , self functionDeclarationClassInfos do: [:info | elementName := info first. elementClassName := info second. metaDataByClassNameIndex at: elementClassName asSymbol put: ((self metaData lookUpNamedTypeBN: elementName) ifNil: [self metaData lookUpIdentifierBN: elementName]). classNamesByMetaDataNameIndex at: elementName asUppercase asSymbol put: elementClassName asSymbol]! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 1/17/2007 13:00'! lookUpIdentifierBN: aName self metaData isNil ifTrue: [self schemaInstance buildIndexes]. ^ self metaData lookUpIdentifierBN: aName! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 4/20/2006 09:56'! lookUpNamedTypeBN: aName ^ self metaData ifNotNil: [self metaData lookUpNamedTypeBN: aName]! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 08:48'! metaData ^ metaData! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 08:48'! metaData: anObject metaData := anObject! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 10:05'! metaDataByClassNameIndex ^ self schemaInstance metaDataByClassNameIndex! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 23:00'! metaDataFor: aSymbol ^ self schemaInstance metaDataFor: aSymbol! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 6/28/2005 19:41'! metaDataForInstance: anObject ^self metaDataFor: anObject class name! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 10:34'! owner ^owner! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 10:34'! owner: anObject owner := anObject! ! !PlatypusCoreContextDefinition methodsFor: 'accessing' stamp: 'apl 3/15/2005 08:40'! schemaInstance ^ self schemaInstanceClass singleton ! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'AlainPlantec 7/14/2011 16:55'! schemaInstanceClass ^ PlatypusPharoSmalltalk at: self schemaInstanceClassName ifAbsent: []! ! !PlatypusCoreContextDefinition methodsFor: 'private accessing' stamp: 'apl 3/15/2005 08:52'! schemaInstanceClassName ^ self shouldNotImplement! ! !PltExpressBuiltinsSchemaDefinition commentStamp: 'platypus comment' prior: 105976499! SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ! !PltExpressBuiltinsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExpressBuiltinsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExpressBuiltinsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 0 ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#ABS #PltABSFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#FORMAT #PltFORMATFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#HIBOUND #PltHIBOUNDFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#HIINDEX #PltHIINDEXFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#LENGTH #PltLENGTHFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#LOBOUND #PltLOBOUNDFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#LOG #PltLOGFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#LOG2 #PltLOG2Function) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration17 ^ #(#LOG10 #PltLOG10Function) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration18 ^ #(#LOINDEX #PltLOINDEXFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration19 ^ #(#ODD #PltODDFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#ACOS #PltACOSFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration20 ^ #(#ROLESOF #PltROLESOFFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration21 ^ #(#SIN #PltSINFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration22 ^ #(#SIZEOF #PltSIZEOFFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration23 ^ #(#SQRT #PltSQRTFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration24 ^ #(#TAN #PltTANFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration25 ^ #(#TYPEOF #PltTYPEOFFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration26 ^ #(#USEDIN #PltUSEDINFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration27 ^ #(#VALUE #PltVALUEFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration28 ^ #(#VALUE_IN #PltValueInFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration29 ^ #(#VALUE_UNIQUE #PltValueUniqueFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#ASIN #PltASINFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration30 ^ #(#NVL #PltNVLFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#ATAN #PltATANFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#BLENGTH #PltBLENGTHFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#COS #PltCOSFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#EVEN #PltEVENFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#EXISTS #PltEXISTSFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#EXP #PltEXPFunction) ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 30 ! ! !PltExpressBuiltinsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusExpressPrimitivesSchemaInstance ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 105990423! SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; ! !PltPlatypusAggregateDataSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#aggregate_data #PltAggregateData) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#aggregate_initializer #PltAggregateInitializer) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#aggregate_initializer_element #PltAggregateInitializerElement) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#aggregate_instance #PltAggregateInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#array_instance #PltArrayInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#variable_size_aggregation_instance #PltVariableSizeAggregationInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#list_instance #PltListInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#bag_instance #PltBagInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#set_instance #PltSetInstance) ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 9 ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusAggregateDataSchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusDictionarySchemaSchemaDefinition commentStamp: 'platypus comment' prior: 105992078! SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ! !PltPlatypusDictionarySchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusDictionarySchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusDictionarySchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#entity_instance #PltEntityInstance) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#include_schema #PltIncludeSchema) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#used_schema #PltUsedSchema) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#referenced_schema #PltReferencedSchema) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#external_meta_schema #PltExternalMetaSchema) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#algorithm_declaration #PltAlgorithmDeclaration) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#native_code #PltNativeCode) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#native_algorithm #PltNativeAlgorithm) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#procedure_declaration #PltProcedureDeclaration) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition18 ^ #(#function_declaration #PltFunctionDeclaration) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition19 ^ #(#bound #PltBound) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#sdai_instance #PltSdaiInstance) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition20 ^ #(#integer_bound #PltIntegerBound) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition21 ^ #(#population_dependent_bound #PltPopulationDependentBound) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition22 ^ #(#enumeration_type #PltEnumerationType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition23 ^ #(#named_type #PltNamedType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition24 ^ #(#dictionary_instance_reference #PltDictionaryInstanceReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition25 ^ #(#named_type_reference #PltNamedTypeReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition26 ^ #(#attribute_reference #PltAttributeReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition27 ^ #(#entity_definition_reference #PltEntityDefinitionReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition28 ^ #(#defined_type_reference #PltDefinedTypeReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition29 ^ #(#where_rule #PltWhereRule) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#dictionary_instance #PltDictionaryInstance) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition30 ^ #(#select_type #PltSelectType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition31 ^ #(#defined_type #PltDefinedType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition32 ^ #(#entity_definition #PltEntityDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition33 ^ #(#supertype_constraint #PltSupertypeConstraint) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition34 ^ #(#supertype_expression #PltSupertypeExpression) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition35 ^ #(#sub_entity_ref_expression #PltSubEntityRefExpression) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition36 ^ #(#binary_supertype_expression #PltBinarySupertypeExpression) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition37 ^ #(#andor_supertype #PltAndorSupertype) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition38 ^ #(#and_supertype #PltAndSupertype) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition39 ^ #(#oneof_supertype_expression #PltOneofSupertypeExpression) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#session_instance #PltSessionInstance) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition40 ^ #(#uniqueness_rule #PltUniquenessRule) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition41 ^ #(#attribute #PltAttribute) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition42 ^ #(#aggregate_initializer_domain #PltAggregateInitializerDomain) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition43 ^ #(#aggregate_type #PltAggregateType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition44 ^ #(#general_aggregate_type #PltGeneralAggregateType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition45 ^ #(#aggregation_type #PltAggregationType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition46 ^ #(#array_type #PltArrayType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition47 ^ #(#variable_size_aggregation_type #PltVariableSizeAggregationType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition48 ^ #(#list_type #PltListType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition49 ^ #(#bag_type #PltBagType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#domain_equivalent_item #PltDomainEquivalentItem) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition50 ^ #(#set_type #PltSetType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition51 ^ #(#simple_type #PltSimpleType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition52 ^ #(#string_type #PltStringType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition53 ^ #(#binary_type #PltBinaryType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition54 ^ #(#number_type #PltNumberType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition55 ^ #(#real_type #PltRealType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition56 ^ #(#integer_type #PltIntegerType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition57 ^ #(#logical_type #PltLogicalType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition58 ^ #(#boolean_type #PltBooleanType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition59 ^ #(#constant_definition #PltConstantDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#context_definition #PltContextDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition60 ^ #(#local_variable #PltLocalVariable) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition61 ^ #(#parameter_definition #PltParameterDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition62 ^ #(#generic_type #PltGenericType) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition63 ^ #(#remark #PltRemark) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition64 ^ #(#tail_remark #PltTailRemark) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition65 ^ #(#embedded_remark #PltEmbeddedRemark) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition66 ^ #(#remark_reference #PltRemarkReference) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition67 ^ #(#meta_concept_definition #PltMetaConceptDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition68 ^ #(#derived_attribute #PltDerivedAttribute) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition69 ^ #(#explicit_attribute #PltExplicitAttribute) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#statements_container #PltStatementsContainer) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition70 ^ #(#inverse_attribute #PltInverseAttribute) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition71 ^ #(#meta_mapping_rule #PltMetaMappingRule) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition72 ^ #(#meta_mapping_definition #PltMetaMappingDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition73 ^ #(#schema_definition #PltSchemaDefinition) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition74^ #( #'meta_concept_definition' #PltMetaConceptDefinition ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition75^ #( #'derived_attribute' #PltDerivedAttribute ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition76^ #( #'explicit_attribute' #PltExplicitAttribute ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition77^ #( #'inverse_attribute' #PltInverseAttribute ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition78^ #( #'meta_mapping_rule' #PltMetaMappingRule ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition79^ #( #'meta_mapping_definition' #PltMetaMappingDefinition ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#global_rule #PltGlobalRule) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition80^ #( #'schema_definition' #PltSchemaDefinition ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#external_schema #PltExternalSchema) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 73 ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #( #'schema_instance_from_ref' #PltSchemaInstanceFromRefFunction ) ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusDictionarySchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 106006404! SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; ! !PltPlatypusEnvironmentSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#model_contents #PltModelContents) ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#schema_instance #PltSchemaInstance) ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 2 ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusEnvironmentSchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusExpressionsSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 106007130! SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; ! !PltPlatypusExpressionsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusExpressionsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusExpressionsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#expression #PltExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#div_expression #PltDivExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#real_div_expression #PltRealDivExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#mod_expression #PltModExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#plus_expression #PltPlusExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#minus_expression #PltMinusExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#and_expression #PltAndExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#or_expression #PltOrExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#xor_expression #PltXorExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition18 ^ #(#comparison_expression #PltComparisonExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition19 ^ #(#less_than_expression #PltLessThanExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#unary_expression #PltUnaryExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition20 ^ #(#greater_than_expression #PltGreaterThanExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition21 ^ #(#equal_expression #PltEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition22 ^ #(#less_equal_expression #PltLessEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition23 ^ #(#greater_equal_expression #PltGreaterEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition24 ^ #(#not_equal_expression #PltNotEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition25 ^ #(#inst_comparison_expression #PltInstComparisonExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition26 ^ #(#inst_equal_expression #PltInstEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition27 ^ #(#inst_not_equal_expression #PltInstNotEqualExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition28 ^ #(#in_expression #PltInExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition29 ^ #(#like_expression #PltLikeExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#binary_expression #PltBinaryExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition30 ^ #(#cardinality_expression #PltCardinalityExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition31 ^ #(#simple_unary_expression #PltSimpleUnaryExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition32 ^ #(#not_expression #PltNotExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition33 ^ #(#positive_expression #PltPositiveExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition34 ^ #(#negative_expression #PltNegativeExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition35 ^ #(#typed_expression #PltTypedExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition36 ^ #(#enumeration_value #PltEnumerationValue) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition37 ^ #(#entity_instances_set #PltEntityInstancesSet) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition38 ^ #(#qualified_expression #PltQualifiedExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition39 ^ #(#literal #PltLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#logical_expression #PltLogicalExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition40 ^ #(#identifier #PltIdentifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition41 ^ #(#attribute_identifier #PltAttributeIdentifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition42 ^ #(#self_identifier #PltSelfIdentifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition43 ^ #(#uniqueness_rule_attribute_identifier #PltUniquenessRuleAttributeIdentifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition44 ^ #(#missing_value #PltMissingValue) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition45 ^ #(#redefined_attribute_value #PltRedefinedAttributeValue) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition46 ^ #(#implicitly_declared_identifier #PltImplicitlyDeclaredIdentifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition47 ^ #(#interval #PltInterval) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition48 ^ #(#aggr_unary_expression #PltAggrUnaryExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition49 ^ #(#query_variable #PltQueryVariable) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#entity_instance_reference #PltEntityInstanceReference) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition50 ^ #(#query_expression #PltQueryExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition51 ^ #(#entity_instance_constructor #PltEntityInstanceConstructor) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition52 ^ #(#qualifier #PltQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition53 ^ #(#attribute_qualifier #PltAttributeQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition54 ^ #(#group_qualifier #PltGroupQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition55 ^ #(#index_qualifier #PltIndexQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition56 ^ #(#element_qualifier #PltElementQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition57 ^ #(#range_qualifier #PltRangeQualifier) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition58 ^ #(#numeric_literal #PltNumericLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition59 ^ #(#logical_literal #PltLogicalLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#instance_construction_expression #PltInstanceConstructionExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition60 ^ #(#true_constant #PltTrueConstant) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition61 ^ #(#false_constant #PltFalseConstant) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition62 ^ #(#unknown_constant #PltUnknownConstant) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition63 ^ #(#integer_literal #PltIntegerLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition64 ^ #(#real_literal #PltRealLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition65 ^ #(#pi_constant #PltPiConstant) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition66 ^ #(#e_constant #PltEConstant) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition67 ^ #(#string_literal #PltStringLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition68 ^ #(#binary_literal #PltBinaryLiteral) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition69 ^ #(#native_expression #PltNativeExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#arithmetic_expression #PltArithmeticExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition70 ^ #(#escaped_expression #PltEscapedExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#expo_expression #PltExpoExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#mult_expression #PltMultExpression) ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 70 ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusExpressionsSchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusPopulationSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 106014657! SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; ! !PltPlatypusPopulationSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusPopulationSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusPopulationSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#instance_scope #PltInstanceScope) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#simple_record #PltSimpleRecord) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#header_instance #PltHeaderInstance) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#user_defined_header_instance #PltUserDefinedHeaderInstance) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#file_description #PltFileDescription) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#file_name #PltFileName) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#file_schema #PltFileSchema) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16^ #( #'file_schema' #PltFileSchema ) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#application_instance #PltApplicationInstance) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#generic_instance #PltGenericInstance) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#internal_representation #PltInternalRepresentation) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#external_representation #PltExternalRepresentation) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#group_representation #PltGroupRepresentation) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#external_group_representation #PltExternalGroupRepresentation) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#internal_group_representation #PltInternalGroupRepresentation) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#user_defined_application_instance #PltUserDefinedApplicationInstance) ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 15 ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusPopulationSchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusStatementsSchemaSchemaDefinition commentStamp: 'platypus comment' prior: 106017298! SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; ! !PltPlatypusStatementsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusStatementsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusStatementsSchemaSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#assignable #PltAssignable) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#compound_statement #PltCompoundStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#escape_statement #PltEscapeStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#if_statement #PltIfStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#repeat_statement #PltRepeatStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#increment_control_variable #PltIncrementControlVariable) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#increment_control #PltIncrementControl) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#return_statement #PltReturnStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#procedure_call_statement #PltProcedureCallStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition18 ^ #(#skip_statement #PltSkipStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition19 ^ #(#output_statement #PltOutputStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#statement #PltStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition20 ^ #(#splitmark_statement #PltSplitmarkStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition21 ^ #(#end_splitmark_statement #PltEndSplitmarkStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition22 ^ #(#anonymous_variable #PltAnonymousVariable) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#null_statement #PltNullStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#native_statement #PltNativeStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#alias_statement_variable #PltAliasStatementVariable) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#alias_statement #PltAliasStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#assignment_statement #PltAssignmentStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#case_statement #PltCaseStatement) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#case_action #PltCaseAction) ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 22 ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! !PltPlatypusStatementsSchemaSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PlatypusCoreSchemaInstance class methodsFor: 'accessing' stamp: 'alain.plantec 1/20/2009 11:56'! reinitializeSingleton singleton ifNotNil: [singleton schemaDefinitionClasses do: [:c | c reinitializeSingleton]]. super reinitializeSingleton! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 22:45'! altClassNamesByMetaDataNameIndex ^ altClassNamesByMetaDataNameIndex ifNil: [altClassNamesByMetaDataNameIndex := IdentityDictionary new]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 22:46'! altMetaDataByClassNameIndex ^ altMetaDataByClassNameIndex ifNil: [altMetaDataByClassNameIndex := IdentityDictionary new]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 23:08'! alternativeIndex: aListOfAssociations altClassNamesByMetaDataNameIndex := nil. altMetaDataByClassNameIndex := nil. aListOfAssociations do: [ :assoc | | ename clsname origClsname origMetaData | ename := assoc key asUppercase asSymbol. clsname := assoc value asSymbol. origClsname := self classNamesByMetaDataNameIndex at: ename . origMetaData := self metaDataByClassNameIndex at: origClsname. self altMetaDataByClassNameIndex at: clsname put: origMetaData. self altClassNamesByMetaDataNameIndex at: ename put: clsname]. ! ! !PlatypusCoreSchemaInstance methodsFor: 'private initializing' stamp: 'AlainPlantec 12/5/2013 10:44'! buildIndexes | sch schClass | metaDataByClassNameIndex ifNil: [self expressParserClass ifNil: [self error: 'Platypus: EXPRESS Parser is not present'] ifNotNil: [metaDataByClassNameIndex := IdentityDictionary new. classNamesByMetaDataNameIndex := IdentityDictionary new. metaData := self parsedMetaSchemaInstance. metaDataByClassNameIndex at: self class name asSymbol put: metaData. self schemaDefinitionClassInfos do: [:schInfo | sch := self metaData lookUpSchemaDefinitionBN: schInfo first. schClass := PlatypusPharoSmalltalk at: schInfo second. schClass singleton metaData: sch. schClass singleton initializeFromOwner: self]]]. self externalSchemaInstances do: [:schi | schi ifNotNil: [ schi singleton buildIndexes. schi singleton classNamesByMetaDataNameIndex keysAndValuesDo: [:k :v | classNamesByMetaDataNameIndex at: k put: v]. schi singleton metaDataByClassNameIndex keysAndValuesDo: [:k :v | metaDataByClassNameIndex at: k put: v]]] displayingProgress: 'Building meta data indexes'.! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 3/15/2005 09:19'! buildRepository ^ self repositoryClass new! ! !PlatypusCoreSchemaInstance methodsFor: 'private meta data management' stamp: 'apl 4/19/2006 12:54'! buildSplittedContents: baseSelector | result max | result := WriteStream on: (String new: 500). max := self perform: (baseSelector , 'PartsCount') asSymbol. 1 to: max do: [:cpt | result nextPutAll: ((self perform: (baseSelector , cpt printString) asSymbol) copyReplaceAll: '(*\\*)' with: String cr )]. ^ result contents! ! !PlatypusCoreSchemaInstance methodsFor: 'meta data accessing' stamp: 'AlainPlantec 10/26/2011 23:11'! classFromEntityName: aString | key clsname | key := aString asUppercase asSymbol. clsname := self altClassNamesByMetaDataNameIndex at: key ifAbsent: [self classNamesByMetaDataNameIndex at: key]. ^ PlatypusPharoSmalltalk at: clsname! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 12/19/2006 08:41'! classNamesByMetaDataNameIndex ^ classNamesByMetaDataNameIndex ifNil: [self buildIndexes. classNamesByMetaDataNameIndex]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 12/5/2013 10:43'! completeExpressSchemaCode | codeStream | codeStream := WriteStream on: String new. codeStream nextPutAll: self expressSchemaCode. self externalSchemaInstances do: [:schi | schi ifNotNil: [codeStream nextPutAll: schi singleton expressSchemaCode]]. ^ codeStream contents! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! context: aContext self externalSchemaInstanceClassNames do: [:schi | (PlatypusPharoSmalltalk at: schi) singleton context: aContext]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! expressParserClass ^ PlatypusPharoSmalltalk at: #PlatypusExpressParser ifAbsent: []! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! expressSchemaInstanceClass ^ PlatypusPharoSmalltalk at: #PltSchemaInstance ifAbsent: []! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 2/2/2006 17:02'! externalSchemaInstanceClassNames ^ #()! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! externalSchemaInstances ^ self externalSchemaInstanceClassNames collect: [:cls | PlatypusPharoSmalltalk at: cls]! ! !PlatypusCoreSchemaInstance methodsFor: 'initialize-release' stamp: 'apl 2/28/2006 21:48'! initialize super initialize. splitMarkStack := OrderedCollection new.! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'AlainPlantec 12/6/2013 00:38'! isAFileNamed: aName ^ ( FileLocator workingDirectory / aName) exists! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 12/19/2006 08:42'! metaDataByClassNameIndex ^ metaDataByClassNameIndex ifNil: [self buildIndexes.metaDataByClassNameIndex]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 23:01'! metaDataFor: aSymbol ^ self altMetaDataByClassNameIndex at: aSymbol ifAbsent: [self metaDataByClassNameIndex at: aSymbol ifAbsent: []] ! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 3/10/2005 17:33'! metaDataForClass: aClass ^ self metaDataFor: aClass name asSymbol! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:55'! namesBuilderClass ^ PlatypusPharoSmalltalk at: self namesBuilderClassName! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'AlainPlantec 12/6/2013 00:39'! outputFileStreamNamed: aName | filename dir | (dir := ( FileLocator workingDirectory / self resultOutputDirectoryName) ) ensureDirectory. (filename := dir / aName) ensureFile. ^ filename writeStream! ! !PlatypusCoreSchemaInstance methodsFor: 'meta data accessing' stamp: 'apl 2/15/2007 15:19'! parsedMetaSchemaInstance | schemaInstance | schemaInstance := self expressParserClass schemaInstanceFromSource: self completeExpressSchemaCode. schemaInstance namesBuilder: self namesBuilder. ^ schemaInstance! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'apl 2/28/2006 21:42'! popSplitmark Transcript show: 'Writing ' withCRs , splitMarkStack last name , '\' withCRs. splitMarkStack last close. splitMarkStack removeLast! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'AlainPlantec 4/26/2012 09:27'! pushSplitmark: aFileName append: appendIt | contents oldStream | contents := ''. appendIt ifTrue: [(self isAFileNamed: aFileName) ifTrue: [oldStream := self outputFileStreamNamed: aFileName. [contents := oldStream contentsOfEntireFile] ensure: [oldStream close]]]. splitMarkStack add: (self outputFileStreamNamed: aFileName). appendIt ifTrue: [splitMarkStack last nextPutAll: contents]! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:56'! repositoryClass ^ PlatypusPharoSmalltalk at: self repositoryClassName! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 3/15/2005 09:29'! repositoryClassName ^ self subclassResponsibility! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'apl 2/28/2006 21:45'! resultOutputDirectoryName ^ 'Platypus-output'! ! !PlatypusCoreSchemaInstance methodsFor: 'private meta data management' stamp: 'apl 3/15/2005 13:16'! schemaDefinitionClassInfos | result | result := OrderedCollection new. 1 to: self schemaDefinitionCount do: [:cpt | result add: (self perform: ('schemaDefinition' , cpt asString) asSymbol)]. ^ result! ! !PlatypusCoreSchemaInstance methodsFor: 'private meta data management' stamp: 'AlainPlantec 7/14/2011 16:56'! schemaDefinitionClasses ^ self schemaDefinitionClassInfos collect: [:info | PlatypusPharoSmalltalk at: info second asSymbol]! ! !PlatypusCoreSchemaInstance methodsFor: 'private meta data management' stamp: 'apl 3/15/2005 09:31'! schemaDefinitionCount ^ self subclassResponsibility ! ! !PlatypusCoreSchemaInstance methodsFor: 'accessing' stamp: 'apl 3/15/2005 09:40'! schemaInstance ^ self! ! !PlatypusCoreSchemaInstance methodsFor: 'private meta data management' stamp: 'apl 3/15/2005 13:17'! schemata ^ self schemaDefinitionClasses collect: [:cls | cls singleton]! ! !PlatypusCoreSchemaInstance methodsFor: 'meta data accessing' stamp: 'apl 12/7/2006 14:06'! smalltalkTypeOf: aData ^ self namesBuilder smalltalkTypeOf: aData! ! !PlatypusCoreSchemaInstance methodsFor: 'private splitmark stack (to be obsolete)' stamp: 'apl 2/28/2006 21:49'! splitMarkOutput: aString splitMarkStack last nextPutAll: aString! ! !PltPlatypusExpressPrimitivesSchemaInstance commentStamp: 'platypus comment' prior: 106020282! SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ! !PltPlatypusExpressPrimitivesSchemaInstance class methodsFor: 'platypus-generated-initializing'! bootstraps self reinitializeSingleton. self singleton buildIndexes ! ! !PltPlatypusExpressPrimitivesSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusExpressPrimitivesSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusExpressPrimitivesSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context ^ context ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context: aContext context := aContext. super context: aContext ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-accessing'! externalSchemaInstanceClassNames ^ #() ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: #Plt. namesBuilder systemCategoryPrefix: #Platypus. namesBuilder rootClassName: #PltEntityInstance. namesBuilder rootClassSystemCategory: #'Platypus-PlatypusDictionarySchemaSchema'. ^ namesBuilder ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-accessing'! repositoryClassName ^ #PltPlatypusExpressPrimitivesRepository ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition1 ^ #(#EXPRESS_builtins #PltExpressBuiltinsSchemaDefinition) ! ! !PltPlatypusExpressPrimitivesSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinitionCount ^ 1 ! ! !PltPlatypusMetaSchemasSchemaInstance commentStamp: 'platypus comment' prior: 106034197! SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ! !PltPlatypusMetaSchemasSchemaInstance class methodsFor: 'platypus-generated-initializing'! bootstraps self reinitializeSingleton. self singleton buildIndexes. ! ! !PltPlatypusMetaSchemasSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusMetaSchemasSchemaInstance class methodsFor: 'accessing' stamp: 'alain.plantec 1/20/2009 11:57'! singleton ^ singleton ifNil: [singleton := self new] ! ! !PltPlatypusMetaSchemasSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusMetaSchemasSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context ^ context ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context: aContext context := aContext. super context: aContext ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode1 ^ 'SCHEMA Platypus_expressions_schema;(*\\*)', ' USE FROM Platypus_dictionary_schema;(*\\*)', ' USE FROM Platypus_statements_schema;(*\\*)', ' USE FROM Platypus_population_schema;(*\\*)', '(*\\*)', ' ENTITY expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' owner : OPTIONAL dictionary_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY unary_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY binary_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' parenthesis : OPTIONAL BOOLEAN;(*\\*)', ' left_expr : expression;(*\\*)', ' right_expr : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY logical_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( binary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_instance_reference (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' persistent_label : STRING;(*\\*)', ' ref : entity_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY instance_construction_expression (*\\*)', ' SUBTYPE OF ( binary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY arithmetic_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( binary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY expo_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY mult_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY div_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY real_div_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY mod_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY plus_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY minus_expression (*\\*)', ' SUBTYPE OF ( arithmetic_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY and_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY or_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY xor_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY comparison_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY less_than_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY greater_than_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY equal_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY less_equal_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY greater_equal_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY not_equal_expression (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY inst_comparison_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY inst_equal_expression (*\\*)', ' SUBTYPE OF ( inst_comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY inst_not_equal_expression (*\\*)', ' SUBTYPE OF ( inst_comparison_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY in_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY like_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY cardinality_expression (*\\*)', ' SUBTYPE OF ( logical_expression );(*\\*)', ' card1 : expression;(*\\*)', ' card2 : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY simple_unary_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' expr : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY not_expression (*\\*)', ' SUBTYPE OF ( simple_unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY positive_expression (*\\*)', ' SUBTYPE OF ( simple_unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY negative_expression (*\\*)', ' SUBTYPE OF ( simple_unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY typed_expression (*\\*)', ' SUBTYPE OF ( simple_unary_expression );(*\\*)', ' domain : named_type_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY enumeration_value (*\\*)', ' SUBTYPE OF ( qualifier );(*\\*)', ' domain : defined_type_reference;(*\\*)', ' element : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_instances_set (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' entity_ref : entity_definition_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY qualified_expression (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' head : expression;(*\\*)', ' qualifiers : LIST OF qualifier;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY literal (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY identifier (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' name : STRING;(*\\*)', ' ref : dictionary_instance;(*\\*)', ' parameters : OPTIONAL LIST OF expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY attribute_identifier (*\\*)', ' SUBTYPE OF ( identifier );(*\\*)', ' selfInstance : generic_instance_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY self_identifier (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode2 ^ '(*\\*)', ' ENTITY uniqueness_rule_attribute_identifier (*\\*)', ' SUBTYPE OF ( identifier );(*\\*)', ' group_ref_name : OPTIONAL STRING;(*\\*)', ' SELF\identifier.ref : attribute;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY missing_value (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY redefined_attribute_value (*\\*)', ' SUBTYPE OF ( missing_value );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY implicitly_declared_identifier (*\\*)', ' SUBTYPE OF ( identifier );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY interval (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' expr : and_expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggr_unary_expression (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY query_variable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' variable_id : STRING;(*\\*)', ' owner : query_expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY query_expression (*\\*)', ' SUBTYPE OF ( aggr_unary_expression );(*\\*)', ' variable : query_variable;(*\\*)', ' aggregate_source : expression;(*\\*)', ' such_that : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_instance_constructor (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' decl : entity_definition_reference;(*\\*)', ' parameters : LIST OF expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY qualifier (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( unary_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY attribute_qualifier (*\\*)', ' SUBTYPE OF ( qualifier );(*\\*)', ' attribute_name : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY group_qualifier (*\\*)', ' SUBTYPE OF ( qualifier );(*\\*)', ' group_name : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY index_qualifier (*\\*)', ' SUBTYPE OF ( qualifier );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY element_qualifier (*\\*)', ' SUBTYPE OF ( index_qualifier );(*\\*)', ' index : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY range_qualifier (*\\*)', ' SUBTYPE OF ( index_qualifier );(*\\*)', ' index1 : expression;(*\\*)', ' index2 : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY numeric_literal (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( literal );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY logical_literal (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( literal );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY true_constant (*\\*)', ' SUBTYPE OF ( logical_literal );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY false_constant (*\\*)', ' SUBTYPE OF ( logical_literal );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY unknown_constant (*\\*)', ' SUBTYPE OF ( logical_literal );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY integer_literal (*\\*)', ' SUBTYPE OF ( numeric_literal );(*\\*)', ' val : INTEGER;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY real_literal (*\\*)', ' SUBTYPE OF ( numeric_literal );(*\\*)', ' val : REAL;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY pi_constant (*\\*)', ' SUBTYPE OF ( real_literal );(*\\*)', ' DERIVE(*\\*)', ' SELF\real_literal.val : REAL := 3.14159;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY e_constant (*\\*)', ' SUBTYPE OF ( real_literal );(*\\*)', ' DERIVE(*\\*)', ' SELF\real_literal.val : REAL := 2.71828;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY string_literal (*\\*)', ' SUBTYPE OF ( literal );(*\\*)', ' val : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY binary_literal (*\\*)', ' SUBTYPE OF ( literal );(*\\*)', ' val : BINARY;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY native_expression (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' source : native_algorithm;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY escaped_expression (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' expr : expression;(*\\*)', ' END_ENTITY;(*\\*)', 'END_SCHEMA;(*\\*)', '(*\\*)', '(*\\*)', 'SCHEMA Platypus_statements_schema;(*\\*)', ' USE FROM Platypus_dictionary_schema;(*\\*)', ' USE FROM Platypus_expressions_schema;(*\\*)', '(*\\*)', ' ENTITY assignable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' head : identifier;(*\\*)', ' qualifiers : LIST OF qualifier;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY statement (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' owner : dictionary_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY null_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY native_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' source : native_algorithm;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY alias_statement_variable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' alias_ident : STRING;(*\\*)', ' ref : assignable;(*\\*)', ' owner : alias_statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY alias_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' variable : alias_statement_variable;(*\\*)', ' statements : LIST OF statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY assignment_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' left : assignable;(*\\*)', ' right_expr : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY case_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' selector : expression;(*\\*)', ' case_actions : LIST OF case_action;(*\\*)', ' case_otherwise : OPTIONAL statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY case_action (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' labels : LIST OF expression;(*\\*)', ' action : statement;(*\\*)', ' END_ENTITY;(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode3 ^ '(*\\*)', ' ENTITY compound_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' statements : LIST OF statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY escape_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY if_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' selector : expression;(*\\*)', ' then_statements : LIST OF statement;(*\\*)', ' else_statements : OPTIONAL LIST OF statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY repeat_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' incr_control : OPTIONAL increment_control;(*\\*)', ' until_control : OPTIONAL expression;(*\\*)', ' while_control : OPTIONAL expression;(*\\*)', ' statements : LIST OF statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY increment_control_variable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' variable_id : STRING;(*\\*)', ' owner : increment_control;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY increment_control (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' variable : increment_control_variable;(*\\*)', ' first : expression;(*\\*)', ' last : expression;(*\\*)', ' step : OPTIONAL expression;(*\\*)', ' owner : repeat_statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY return_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' returned : OPTIONAL expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY procedure_call_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' call : identifier;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY skip_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY output_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' output : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY splitmark_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' filename : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY end_splitmark_statement (*\\*)', ' SUBTYPE OF ( statement );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY anonymous_variable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' domain : parameter_type;(*\\*)', ' END_ENTITY;(*\\*)', 'END_SCHEMA;(*\\*)', '(*\\*)', '(*\\*)', 'SCHEMA Platypus_aggregate_data_schema;(*\\*)', ' USE FROM Platypus_population_schema;(*\\*)', ' USE FROM Platypus_dictionary_schema;(*\\*)', ' USE FROM Platypus_expressions_schema;(*\\*)', '(*\\*)', ' ENTITY aggregate_data (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) (*\\*)', ' SUBTYPE OF ( expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregate_initializer (*\\*)', ' SUBTYPE OF ( aggregate_data );(*\\*)', ' contents : LIST OF aggregate_initializer_element;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregate_initializer_element (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' val : primitive;(*\\*)', ' repetition : OPTIONAL expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregate_instance (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) (*\\*)', ' SUBTYPE OF ( aggregate_data );(*\\*)', ' lower_bound : integer_literal;(*\\*)', ' upper_bound : integer_literal;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY array_instance (*\\*)', ' SUBTYPE OF ( aggregate_instance );(*\\*)', ' contents : LIST OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY variable_size_aggregation_instance (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) (*\\*)', ' SUBTYPE OF ( aggregate_instance );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY list_instance (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_instance );(*\\*)', ' contents : LIST OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY bag_instance (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_instance );(*\\*)', ' contents : BAG OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY set_instance (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_instance );(*\\*)', ' contents : SET OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', 'END_SCHEMA;(*\\*)', '(*\\*)', '(*\\*)', 'SCHEMA Platypus_population_schema;(*\\*)', ' USE FROM Platypus_expressions_schema;(*\\*)', ' USE FROM Platypus_environment_schema;(*\\*)', ' USE FROM Platypus_dictionary_schema;(*\\*)', '(*\\*)', ' ENTITY instance_scope (*\\*)', ' SUBTYPE OF ( session_instance );(*\\*)', ' owner : entity_instance;(*\\*)', ' owned : LIST [ 1 : ? ] OF entity_instance;(*\\*)', ' export_list : LIST [ 0 : ? ] OF entity_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY application_instance (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' owning_model : model_contents;(*\\*)', ' persistent_label : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY generic_instance (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( application_instance );(*\\*)', ' owner : OPTIONAL entity_instance;(*\\*)', ' scope : OPTIONAL instance_scope;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY internal_representation (*\\*)', ' SUBTYPE OF ( generic_instance );(*\\*)', ' definition : entity_definition_reference;(*\\*)', ' parameters : LIST OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY external_representation (*\\*)', ' SUBTYPE OF ( generic_instance );(*\\*)', ' records : LIST OF simple_record;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY group_representation (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( generic_instance );(*\\*)', ' definition : entity_definition_reference;(*\\*)', ' instRef : generic_instance_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY external_group_representation (*\\*)', ' SUBTYPE OF ( group_representation );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY internal_group_representation (*\\*)', ' SUBTYPE OF ( group_representation );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY generic_instance_reference (*\\*)', ' SUBTYPE OF ( entity_instance_reference );(*\\*)', ' SELF\entity_instance_reference.ref : generic_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY user_defined_application_instance (*\\*)', ' SUBTYPE OF ( application_instance );(*\\*)', ' name : STRING;(*\\*)', ' parameters : LIST OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY simple_record (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' definition : entity_definition_reference;(*\\*)', ' parameters : LIST OF primitive;(*\\*)', ' owner : generic_instance;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode4 ^ ' ENTITY header_instance (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' owning_model : model_contents;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY user_defined_header_instance (*\\*)', ' SUBTYPE OF ( header_instance );(*\\*)', ' name : STRING;(*\\*)', ' parameters : LIST OF primitive;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY file_description (*\\*)', ' SUBTYPE OF ( header_instance );(*\\*)', ' description : LIST [ 1 : ? ] OF STRING ( 256 );(*\\*)', ' implementation_level : STRING ( 256 );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY file_name (*\\*)', ' SUBTYPE OF ( header_instance );(*\\*)', ' name : STRING ( 256 );(*\\*)', ' time_stamp : STRING ( 256 );(*\\*)', ' author : LIST [ 1 : ? ] OF STRING ( 256 );(*\\*)', ' organization : LIST [ 1 : ? ] OF STRING ( 256 );(*\\*)', ' preprocessor_version : STRING ( 256 );(*\\*)', ' originating_system : STRING ( 256 );(*\\*)', ' authorisation : STRING ( 256 );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY file_schema (*\\*)', ' SUBTYPE OF ( header_instance );(*\\*)', ' schema_identifiers : LIST [ 1 : ? ] OF schema_name;(*\\*)', ' END_ENTITY;(*\\*)', 'END_SCHEMA;(*\\*)', '(*\\*)', '(*\\*)', 'SCHEMA Platypus_environment_schema;(*\\*)', ' USE FROM Platypus_population_schema;(*\\*)', ' USE FROM Platypus_dictionary_schema;(*\\*)', '(*\\*)', ' ENTITY model_contents (*\\*)', ' SUBTYPE OF ( session_instance );(*\\*)', ' owner : schema_instance;(*\\*)', ' INVERSE(*\\*)', ' instances : SET [ 0 : ? ] OF application_instance FOR owning_model;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY schema_instance (*\\*)', ' SUBTYPE OF ( session_instance );(*\\*)', ' name : STRING;(*\\*)', ' associated_models : LIST [ 0 : ? ] OF model_contents;(*\\*)', ' schemata : LIST [ 0 : ? ] OF schema_definition;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_schema_instance;(*\\*)', ' END_ENTITY;(*\\*)', 'END_SCHEMA;(*\\*)', '(*\\*)', '(*\\*)', 'SCHEMA Platypus_dictionary_schema;(*\\*)', ' USE FROM Platypus_expressions_schema;(*\\*)', ' USE FROM Platypus_statements_schema;(*\\*)', ' USE FROM Platypus_population_schema;(*\\*)', ' USE FROM Platypus_environment_schema;(*\\*)', ' USE FROM Platypus_aggregate_data_schema;(*\\*)', '(*\\*)', ' TYPE constructed_type = SELECT(*\\*)', ' ( enumeration_type, select_type );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE type_or_rule = SELECT(*\\*)', ' ( named_type, global_rule );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE base_type = SELECT(*\\*)', ' ( simple_type, aggregation_type, named_type_reference );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE underlying_type = SELECT(*\\*)', ' ( simple_type, aggregation_type, named_type_reference, constructed_type );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE parameter_type = SELECT(*\\*)', ' ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE declaration = SELECT(*\\*)', ' ( named_type, global_rule, constant_definition, procedure_declaration );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE time_stamp = STRING ( 256 );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE primitive = expression;(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE schema_name = STRING;(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE context_owner = SELECT(*\\*)', ' ( context_definition, schema_instance );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE inter_schema_link = ENUMERATION(*\\*)', ' OF ( used, referenced );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' TYPE context_container_ref = SELECT(*\\*)', ' ( schema_instance_ref, context_ref );(*\\*)', ' END_TYPE;(*\\*)', '(*\\*)', ' ENTITY element_ref (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' name : STRING;(*\\*)', ' DERIVE(*\\*)', ' ref : entity_instance := ?;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY schema_instance_ref (*\\*)', ' SUBTYPE OF ( element_ref );(*\\*)', ' DERIVE(*\\*)', ' SELF\element_ref.ref : entity_instance := schema_instance_from_ref ( SELF );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY context_ref (*\\*)', ' SUBTYPE OF ( element_ref );(*\\*)', ' owner : context_container_ref;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY schema_ref (*\\*)', ' SUBTYPE OF ( context_ref );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY algorithm_ref (*\\*)', ' SUBTYPE OF ( context_ref );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY rule_ref (*\\*)', ' SUBTYPE OF ( context_ref );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY named_type_ref (*\\*)', ' SUBTYPE OF ( element_ref );(*\\*)', ' owner : context_ref;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_instance (*\\*)', ' ABSTRACT SUPERTYPE;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY sdai_instance (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY dictionary_instance (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( sdai_instance );(*\\*)', ' DERIVE(*\\*)', ' handled : dictionary_instance := SELF;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY session_instance (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( sdai_instance );(*\\*)', ' change_date : OPTIONAL time_stamp;(*\\*)', ' validation_date : time_stamp;(*\\*)', ' validation_result : LOGICAL;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY domain_equivalent_item (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : STRING;(*\\*)', ' external_item_id : STRING;(*\\*)', ' native_item : declaration;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY context_definition (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : STRING;(*\\*)', ' constants : LIST OF constant_definition;(*\\*)', ' types : LIST OF defined_type;(*\\*)', ' entities : LIST OF entity_definition;(*\\*)', ' algorithmes : LIST OF algorithm_declaration;(*\\*)', ' owner : OPTIONAL context_owner;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY statements_container (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( context_definition );(*\\*)', ' locals : LIST OF local_variable;(*\\*)', ' statements : LIST OF statement;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY global_rule (*\\*)', ' SUBTYPE OF ( statements_container );(*\\*)', ' for_entities : LIST [ 1 : ? ] OF entity_instances_set;(*\\*)', ' where_rules : LIST [ 1 : ? ] OF where_rule;(*\\*)', ' SELF\context_definition.owner : schema_definition;(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode5 ^ ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_global_rule;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY schema_definition (*\\*)', ' SUBTYPE OF ( context_definition );(*\\*)', ' global_rules : LIST OF global_rule;(*\\*)', ' interface : LIST OF external_schema;(*\\*)', ' remark_references : LIST OF remark_reference;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_schema_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY external_schema (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : schema_name;(*\\*)', ' owner : schema_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY include_schema (*\\*)', ' SUBTYPE OF ( external_schema );(*\\*)', ' native_schema : schema_definition;(*\\*)', ' explicitly_imported_items : LIST OF domain_equivalent_item;(*\\*)', ' implicitly_imported_items : LIST OF domain_equivalent_item;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY used_schema (*\\*)', ' SUBTYPE OF ( include_schema );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY referenced_schema (*\\*)', ' SUBTYPE OF ( include_schema );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY external_meta_schema (*\\*)', ' SUBTYPE OF ( external_schema );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY algorithm_declaration (*\\*)', ' ABSTRACT SUPERTYPE (*\\*)', ' SUBTYPE OF ( statements_container );(*\\*)', ' formal_parameters : LIST OF parameter_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY native_code (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' language_signature : STRING;(*\\*)', ' code : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY native_algorithm (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' implementations : LIST OF native_code;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY procedure_declaration (*\\*)', ' SUBTYPE OF ( algorithm_declaration );(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_procedure_declaration;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY function_declaration (*\\*)', ' SUBTYPE OF ( algorithm_declaration );(*\\*)', ' return_type : parameter_type;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_function_declaration;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY bound (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY integer_bound (*\\*)', ' SUBTYPE OF ( bound );(*\\*)', ' bound_value : INTEGER;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY population_dependent_bound (*\\*)', ' SUBTYPE OF ( bound );(*\\*)', ' bound_value : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY enumeration_type (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' elements : LIST [ 1 : ? ] OF UNIQUE STRING;(*\\*)', ' owner : defined_type;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_enumeration_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY named_type (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : STRING;(*\\*)', ' where_rules : LIST [ 0 : ? ] OF where_rule;(*\\*)', ' owner : context_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY dictionary_instance_reference (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' ref : dictionary_instance;(*\\*)', ' name : STRING;(*\\*)', ' DERIVE(*\\*)', ' SELF\dictionary_instance.handled : dictionary_instance := SELF.ref;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY named_type_reference (*\\*)', ' SUBTYPE OF ( dictionary_instance_reference );(*\\*)', ' SELF\dictionary_instance_reference.ref : named_type;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_named_type_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY attribute_reference (*\\*)', ' SUBTYPE OF ( dictionary_instance_reference );(*\\*)', ' SELF\dictionary_instance_reference.ref : attribute;(*\\*)', ' entity_ref : entity_definition_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_definition_reference (*\\*)', ' SUBTYPE OF ( named_type_reference );(*\\*)', ' SELF\named_type_reference.ref : entity_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY defined_type_reference (*\\*)', ' SUBTYPE OF ( named_type_reference );(*\\*)', ' SELF\named_type_reference.ref : defined_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY where_rule (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' label : OPTIONAL STRING;(*\\*)', ' owner : type_or_rule;(*\\*)', ' where_value : expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY select_type (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' selections : LIST [ 1 : ? ] OF named_type_reference;(*\\*)', ' owner : defined_type;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_select_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY defined_type (*\\*)', ' SUBTYPE OF ( named_type );(*\\*)', ' domain : underlying_type;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_defined_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY entity_definition (*\\*)', ' SUBTYPE OF ( named_type );(*\\*)', ' supertype_constraint : OPTIONAL supertype_constraint;(*\\*)', ' supertypes : LIST OF UNIQUE entity_definition_reference;(*\\*)', ' attributes : LIST OF UNIQUE attribute;(*\\*)', ' uniqueness_rules : LIST OF UNIQUE uniqueness_rule;(*\\*)', ' complex : BOOLEAN;(*\\*)', ' instantiable : BOOLEAN;(*\\*)', ' independent : BOOLEAN;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_entity_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY supertype_constraint (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' constrained : entity_definition_reference;(*\\*)', ' expr : OPTIONAL supertype_expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY supertype_expression (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY sub_entity_ref_expression (*\\*)', ' SUBTYPE OF ( supertype_expression );(*\\*)', ' entity_ref : entity_definition_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY binary_supertype_expression (*\\*)', ' SUBTYPE OF ( supertype_expression );(*\\*)', ' parenthesis : OPTIONAL BOOLEAN;(*\\*)', ' left_expr : supertype_expression;(*\\*)', ' right_expr : supertype_expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY andor_supertype (*\\*)', ' SUBTYPE OF ( binary_supertype_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY and_supertype (*\\*)', ' SUBTYPE OF ( binary_supertype_expression );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY oneof_supertype_expression (*\\*)', ' SUBTYPE OF ( supertype_expression );(*\\*)', ' expr_list : LIST OF supertype_expression;(*\\*)', ' END_ENTITY;(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCode6 ^ '(*\\*)', ' ENTITY uniqueness_rule (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' label : OPTIONAL STRING;(*\\*)', ' attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier;(*\\*)', ' owner : entity_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY attribute (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : STRING;(*\\*)', ' owner : entity_definition;(*\\*)', ' domain : base_type;(*\\*)', ' redeclaring : OPTIONAL attribute_reference;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregate_initializer_domain (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' types : LIST [ 1 : ? ] OF parameter_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregate_type (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' element_type : parameter_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY general_aggregate_type (*\\*)', ' SUBTYPE OF ( aggregate_type );(*\\*)', ' type_label : OPTIONAL STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY aggregation_type (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) (*\\*)', ' SUBTYPE OF ( aggregate_type );(*\\*)', ' lower_bound : OPTIONAL bound;(*\\*)', ' upper_bound : OPTIONAL bound;(*\\*)', ' is_general_type : BOOLEAN;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY array_type (*\\*)', ' SUBTYPE OF ( aggregation_type );(*\\*)', ' unique_flag : BOOLEAN;(*\\*)', ' optional_flag : BOOLEAN;(*\\*)', ' SELF\aggregation_type.lower_bound : bound;(*\\*)', ' SELF\aggregation_type.upper_bound : bound;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_array_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY variable_size_aggregation_type (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) (*\\*)', ' SUBTYPE OF ( aggregation_type );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY list_type (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_type );(*\\*)', ' unique_flag : BOOLEAN;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_list_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY bag_type (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_type );(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_bag_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY set_type (*\\*)', ' SUBTYPE OF ( variable_size_aggregation_type );(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_set_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY simple_type (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY string_type (*\\*)', ' SUBTYPE OF ( simple_type );(*\\*)', ' width : OPTIONAL bound;(*\\*)', ' fixed_width : BOOLEAN;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_string_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY binary_type (*\\*)', ' SUBTYPE OF ( simple_type );(*\\*)', ' width : OPTIONAL bound;(*\\*)', ' fixed_width : BOOLEAN;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_binary_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY number_type (*\\*)', ' SUBTYPE OF ( simple_type );(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_number_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY real_type (*\\*)', ' SUBTYPE OF ( number_type );(*\\*)', ' precision : OPTIONAL bound;(*\\*)', ' DERIVE(*\\*)', ' SELF\number_type.accepted : entity_instance := SELF.accept_real_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY integer_type (*\\*)', ' SUBTYPE OF ( number_type );(*\\*)', ' precision : OPTIONAL bound;(*\\*)', ' DERIVE(*\\*)', ' SELF\number_type.accepted : entity_instance := SELF.accept_integer_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY logical_type (*\\*)', ' SUBTYPE OF ( simple_type );(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_logical_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY boolean_type (*\\*)', ' SUBTYPE OF ( logical_type );(*\\*)', ' DERIVE(*\\*)', ' SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY constant_definition (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' name : STRING;(*\\*)', ' domain : base_type;(*\\*)', ' initializer : expression;(*\\*)', ' owner : context_definition;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY local_variable (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' owner : statements_container;(*\\*)', ' name : STRING;(*\\*)', ' domain : parameter_type;(*\\*)', ' initializer : OPTIONAL expression;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY parameter_definition (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' owner : algorithm_declaration;(*\\*)', ' name : STRING;(*\\*)', ' by_copy : BOOLEAN;(*\\*)', ' domain : parameter_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY generic_type (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' type_label : OPTIONAL STRING;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_generic_type;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY remark (*\\*)', ' ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) (*\\*)', ' SUBTYPE OF ( entity_instance );(*\\*)', ' text : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY tail_remark (*\\*)', ' SUBTYPE OF ( remark );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY embedded_remark (*\\*)', ' SUBTYPE OF ( remark );(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY remark_reference (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' prefix : STRING;(*\\*)', ' suffix : OPTIONAL STRING;(*\\*)', ' inside : dictionary_instance_reference;(*\\*)', ' referenced : dictionary_instance_reference;(*\\*)', ' remark : remark;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY meta_concept_definition (*\\*)', ' SUBTYPE OF ( dictionary_instance );(*\\*)', ' definition : dictionary_instance;(*\\*)', ' expression : STRING;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY derived_attribute (*\\*)', ' SUBTYPE OF ( attribute );(*\\*)', ' assign : expression;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_derived_attribute;(*\\*)', ' END_ENTITY;(*\\*)', '(*\\*)', ' ENTITY explicit_attribute (*\\*)', ' SUBTYPE OF ( attribute );(*\\*)', ' optional_flag : BOOLEAN;(*\\*)', ' DERIVE(*\\*)', ' accepted : entity_instance := SELF.accept_explicit_attribute;(*\\*)', '' ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schema-accessing'! expressSchemaCodePartsCount ^7 ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-accessing'! externalSchemaInstanceClassNames ^ #() ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: #Plt. namesBuilder systemCategoryPrefix: #Platypus. namesBuilder rootClassName: #PltEntityInstance. namesBuilder rootClassSystemCategory: #'Platypus-PlatypusDictionarySchemaSchema'. ^ namesBuilder ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-accessing'! repositoryClassName ^ #PltPlatypusMetaSchemasRepository ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition1 ^ #(#Platypus_expressions_schema #PltPlatypusExpressionsSchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition2 ^ #(#Platypus_statements_schema #PltPlatypusStatementsSchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition3 ^ #(#Platypus_aggregate_data_schema #PltPlatypusAggregateDataSchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition4 ^ #(#Platypus_population_schema #PltPlatypusPopulationSchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition5 ^ #(#Platypus_environment_schema #PltPlatypusEnvironmentSchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition6 ^ #(#Platypus_dictionary_schema #PltPlatypusDictionarySchemaSchemaDefinition) ! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition7 ^ #( #'Platypus_dictionary_schema' #PltPlatypusDictionarySchemaSchemaDefinition )! ! !PltPlatypusMetaSchemasSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinitionCount ^ 6 ! ! !PlatypusCoreAggregateInitializer class methodsFor: 'instance creation' stamp: 'apl 2/28/2006 19:42'! collectionFrom: aListOfBlocks ^ (self contentBlocks: aListOfBlocks) asOrderedCollection! ! !PlatypusCoreAggregateInitializer class methodsFor: 'instance creation' stamp: 'apl 2/28/2006 19:13'! contentBlocks: aListOfBlocks ^ self new contentBlocks: aListOfBlocks ! ! !PlatypusCoreAggregateInitializer methodsFor: 'converting' stamp: 'apl 2/28/2006 19:43'! asArray ^ self asOrderedCollection asArray! ! !PlatypusCoreAggregateInitializer methodsFor: 'converting' stamp: 'apl 4/7/2006 18:55'! asOrderedCollection | col | col := OrderedCollection new. (contentBlocks collect: [:b | b isBlock ifTrue: [b value] ifFalse: [b]]) do: [:elem | (elem isCollection and: [elem isString not]) ifTrue: [col addAll: elem] ifFalse: [col add: elem]]. ^ col! ! !PlatypusCoreAggregateInitializer methodsFor: 'accessing' stamp: 'apl 2/28/2006 19:12'! contentBlocks: aListOfBlocks contentBlocks:= aListOfBlocks! ! !PlatypusCoreObject class methodsFor: 'express code accessing' stamp: 'apl 1/18/2007 18:07'! expressSchemaCode ^ self expressSchemaCodeForClass: self ! ! !PlatypusCoreObject class methodsFor: 'express code accessing' stamp: 'apl 1/18/2007 18:07'! expressSchemaCodeForClass: aClass | s i1 i2 | s := aClass comment asString. i1 := s indexOfSubCollection: self expressSchemaCodeStartMark startingAt: 1. i2 := s indexOfSubCollection: self expressSchemaCodeStopMark startingAt: i1 + 1. ^ s copyFrom: i1 + self expressSchemaCodeStartMark size to: i2 - 1! ! !PlatypusCoreObject class methodsFor: 'express code accessing' stamp: 'apl 1/18/2007 18:05'! expressSchemaCodeStartMark ^ ''! ! !PlatypusCoreObject class methodsFor: 'express code accessing' stamp: 'apl 1/18/2007 18:05'! expressSchemaCodeStopMark ^ ''! ! !PlatypusCoreObject class methodsFor: 'as yet unclassified' stamp: 'apl 12/8/2006 18:58'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol! ! !PlatypusCoreObject class methodsFor: 'platypus-signature' stamp: 'apl 12/9/2006 09:54'! vwNamespaceName ^ #Platypus! ! !PlatypusCoreObject methodsFor: 'code accessing' stamp: 'apl 1/18/2007 18:06'! expressSchemaCode ^ self class expressSchemaCode! ! !PlatypusCoreAliasStatement class methodsFor: 'instance creation' stamp: 'apl 6/29/2007 20:39'! alias: anExpression statementsBlock: oneArgStatementsBlock ^ (self new statementsBlock: oneArgStatementsBlock) alias: anExpression! ! !PlatypusCoreAliasStatement class methodsFor: 'instance creation' stamp: 'apl 5/14/2005 14:10'! statementsBlock: oneArgStatementsBlock alias: anExpression ^ (self new statementsBlock: oneArgStatementsBlock) alias: anExpression! ! !PlatypusCoreAliasStatement methodsFor: 'evaluating' stamp: 'apl 5/14/2005 14:08'! alias: anExpression ^ statementsBlock value: anExpression! ! !PlatypusCoreAliasStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 14:07'! statementsBlock ^ statementsBlock ifNil: [[:aliasVar | ]]! ! !PlatypusCoreAliasStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 14:07'! statementsBlock: oneArgStatementsBlock statementsBlock := oneArgStatementsBlock! ! !PlatypusCoreCaseStatement class methodsFor: 'instance creation' stamp: 'apl 5/14/2005 11:23'! caseActionBlocks: anArrayOfGuardBlocksWithActionBlockAssoc otherwiseBlock: anActionBlock case: anExpression ^(self new caseActionBlocks: anArrayOfGuardBlocksWithActionBlockAssoc otherwiseBlock: anActionBlock) case: anExpression! ! !PlatypusCoreCaseStatement methodsFor: 'evaluating' stamp: 'apl 5/14/2005 11:25'! case: anExpression (self caseActionBlocks detect: [:assoc | (assoc key anySatisfy: [ :blk | blk value = anExpression])] ifNone: [^self otherwiseBlock value value]) value value! ! !PlatypusCoreCaseStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 11:16'! caseActionBlocks ^ caseActionBlocks ifNil: [#()]! ! !PlatypusCoreCaseStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 11:23'! caseActionBlocks: anArrayOfGuardBlocksWithActionBlockAssoc caseActionBlocks := anArrayOfGuardBlocksWithActionBlockAssoc! ! !PlatypusCoreCaseStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 11:23'! caseActionBlocks: anArrayOfGuardBlocksWithActionBlockAssoc otherwiseBlock: anActionBlock self caseActionBlocks: anArrayOfGuardBlocksWithActionBlockAssoc. self otherwiseBlock: anActionBlock! ! !PlatypusCoreCaseStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 11:16'! otherwiseBlock ^ otherwiseBlock ifNil: [[]]! ! !PlatypusCoreCaseStatement methodsFor: 'accessing' stamp: 'apl 5/14/2005 11:14'! otherwiseBlock: anActionBlock otherwiseBlock := anActionBlock! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:03'! repeat: aBlock ^ (self new ) repeat: aBlock! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:06'! repeat: aBlock from: start to: stop ^ (self new ) repeat: aBlock from: start to: stop! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:04'! untilControlBlock: untilBlock repeat: aBlock ^ (self new untilControlBlock: untilBlock) repeat: aBlock! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:04'! untilControlBlock: untilBlock repeat: aBlock from: start to: stop ^ (self new untilControlBlock: untilBlock) repeat: aBlock from: start to: stop! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:05'! whileControlBlock: whileBlock repeat: aBlock ^ (self new whileControlBlock: whileBlock ) repeat: aBlock! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 3/5/2006 00:05'! whileControlBlock: whileBlock repeat: aBlock from: start to: stop ^ (self new whileControlBlock: whileBlock ) repeat: aBlock from: start to: stop! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 5/10/2005 19:32'! whileControlBlock: whileBlock untilControlBlock: untilBlock repeat: aBlock ^(self new whileControlBlock: whileBlock untilControlBlock: untilBlock) repeat: aBlock! ! !PlatypusCoreRepeatStatement class methodsFor: 'instance creation' stamp: 'apl 5/10/2005 19:32'! whileControlBlock: whileBlock untilControlBlock: untilBlock repeat: aBlock from: start to: stop ^(self new whileControlBlock: whileBlock untilControlBlock: untilBlock) repeat: aBlock from: start to: stop! ! !PlatypusCoreRepeatStatement methodsFor: 'evaluating' stamp: 'apl 2/1/2006 22:35'! repeat: aBlock | done skip | done := false. [done not and: [self whileControlBlock value: nil]] whileTrue: [skip := false. [aBlock on: PlatypusExpressSkipStatementException do: [skip := true]. skip ifFalse: [done := (self untilControlBlock value: nil)]] on: PlatypusExpressEscapeStatementException do: [done := true]]! ! !PlatypusCoreRepeatStatement methodsFor: 'evaluating' stamp: 'apl 2/1/2006 22:31'! repeat: aBlock from: start to: stop | skip | start to: stop do: [:p | self whileControlBlock ifNotNil: [(self whileControlBlock value: p) ifFalse: [^ nil]]. [skip := false. [aBlock value: p] on: PlatypusExpressSkipStatementException do: [skip := true]. skip ifFalse: [(self untilControlBlock value: p) ifTrue: [^ nil]]] on: PlatypusExpressEscapeStatementException do: [^ nil]]! ! !PlatypusCoreRepeatStatement methodsFor: 'accessing' stamp: 'apl 2/1/2006 22:34'! untilControlBlock ^ untilControlBlock ifNil: [[:p | false]]! ! !PlatypusCoreRepeatStatement methodsFor: 'accessing' stamp: 'apl 5/10/2005 19:29'! untilControlBlock: untilBlock untilControlBlock := untilBlock. ! ! !PlatypusCoreRepeatStatement methodsFor: 'accessing' stamp: 'apl 2/1/2006 22:34'! whileControlBlock ^ whileControlBlock ifNil: [[:p |true]]! ! !PlatypusCoreRepeatStatement methodsFor: 'accessing' stamp: 'apl 5/10/2005 19:30'! whileControlBlock: whileBlock whileControlBlock := whileBlock! ! !PlatypusCoreRepeatStatement methodsFor: 'accessing' stamp: 'apl 5/10/2005 19:30'! whileControlBlock: whileBlock untilControlBlock: untilBlock untilControlBlock := untilBlock. whileControlBlock := whileBlock! ! !PlatypusCoreRepositoryAbstractVisitor class methodsFor: 'instance creation' stamp: 'apl 3/10/2005 22:36'! folder: aDataFolder ^ self new folder: aDataFolder! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/10/2005 22:36'! actionMethodsIndex ^ actionMethodsIndex! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/10/2005 22:36'! actionMethodsIndex: anIndex actionMethodsIndex := anIndex! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doAggregation: a self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doBoolean: b self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doEnumeration: e self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 4/12/2006 14:21'! doExternalRepresentation: inst self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doFolder self subclassResponsibility ! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:40'! doInstance: inst (inst isKindOf: PlatypusComplexInstance) ifTrue: [self doExternalRepresentation: inst] ifFalse: [self doInternalRepresentation: inst]! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doInstanceRef: i self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doInternalRepresentation: inst self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doLogical: l self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doNullValue self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doNumber: n self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:38'! doObject: b self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doSingleToken: t self push: OrderedCollection new. self doToken: t. ^ self pop first! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doString: s self subclassResponsibility! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:36'! doToken: t t isNil ifTrue: [self doNullValue: nil] ifFalse: [self actionMethodsIndex do: [:a | (t isKindOf: a key) ifTrue: [self perform: a value with: t. ^ a key]]]. ^ nil! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/10/2005 22:36'! folder: aDataFolder folder := aDataFolder! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 3/10/2005 22:37'! initialize super initialize. self actionMethodsIndex: OrderedCollection new. self actionMethodsIndex add: (Association key: Symbol value: #doEnumeration:). self actionMethodsIndex add: (Association key: String value: #doString:). self actionMethodsIndex add: (Association key: Boolean value: #doLogical:). self actionMethodsIndex add: (Association key: Number value: #doNumber:). self actionMethodsIndex add: (Association key: UndefinedObject value: #doNullValue:). self actionMethodsIndex add: (Association key: Collection value: #doAggregation:). self actionMethodsIndex add: (Association key: Object value: #doObject:)! ! !PlatypusCoreRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/10/2005 22:36'! oidOf: anInstance ^folder ifNil: [-1] ifNotNil: [folder oidOf: anInstance]! ! !PlatypusCoreRepositoryStepFileWriter class methodsFor: 'instance creation' stamp: 'apl 12/7/2006 17:05'! folder: aRepository ^ self new folder: aRepository ! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doAggregation: a stream nextPut: $(. a do: [:e | self doToken: e] separatedBy: [stream nextPut: $,]. stream nextPut: $)! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doBoolean: b self doLogical: b! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doEnumeration: e e isNil ifTrue: [stream nextPut: $$] ifFalse: [stream nextPut: $.. stream nextPutAll: e. stream nextPut: $.]! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doExternalRepresentation: inst self error: 'not implemented'! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'AlainPlantec 12/6/2013 15:39'! doFolder | dateTime instances | dateTime := DateAndTime now. stream nextPutAll: 'ISO-10303-21;'. stream nextPut: Character cr. stream nextPutAll: 'HEADER;'. stream nextPut: Character cr. stream nextPutAll: 'FILE_NAME('''', ''' , dateTime printString , ''', (''''), (''''), '''', '''', '''');\' withCRs. stream nextPutAll: 'FILE_DESCRIPTION(('''',''''),'''');\' withCRs. stream nextPutAll: 'FILE_SCHEMA(());\' withCRs. stream nextPutAll: 'ENDSEC;'. stream nextPut: Character cr. stream nextPutAll: 'DATA;'. stream nextPut: Character cr. instances := folder instances. 'Populating...' displayProgressAt: Sensor cursorPoint from: 1 to: instances size during: [:bar | 1 to: instances size do: [:p | bar value: p. (instances at: p) ifNotNil: [:i | self doInstance: i. stream nextPut: Character cr]]]. stream nextPutAll: 'ENDSEC;'. stream nextPut: Character cr. stream nextPutAll: 'END-ISO-10303-21;'. stream nextPut: Character cr! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doInstanceRef: i stream nextPut: $#. folder ifNotNil: [stream nextPutAll: (folder oidOf: i) printString]! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/15/2006 23:09'! doInternalRepresentation: inst | currToken entityDef getterSymbol | stream nextPut: $#. stream nextPutAll: (self oidOf: inst) printString. stream nextPut: $=. entityDef := self metaDataSchemaInstance metaDataForClass: inst class. stream nextPutAll: entityDef name asUppercase. stream nextPut: $(. entityDef inheritedExplicitAttributesDo: [:attr | (entityDef isAttributeRedeclared: attr) ifTrue: [stream nextPut: $*] ifFalse: [getterSymbol := attr getSelectorFromNamesBuilder: self namesBuilder. currToken := inst perform: getterSymbol asSymbol. self doToken: currToken]] separatedBy: [stream nextPut: $,]. stream nextPutAll: ');'! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doLogical: l stream nextPut: $.. l = #unknow ifTrue: [stream nextPut: $U] ifFalse: [l ifTrue: [stream nextPut: $T] ifFalse: [stream nextPut: $F]]. stream nextPut: $.! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doNullValue: e stream nextPut: $$! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doNumber: n stream nextPutAll: n printString! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 4/7/2006 14:16'! doObject: o (o isKindOf: PlatypusSchemaWrapper) ifTrue: [self doObject: o linkedMetaData] ifFalse: [stream nextPutAll: '#' , (self oidOf: o) asString]! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! doString: s stream nextPut: $'. s do: [:e | stream nextPut: e. e == $' ifTrue: [stream nextPut: $']]. stream nextPut: $'! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'accessing' stamp: 'apl 3/11/2005 08:46'! flushedContents | contents | contents := stream contents. stream reset. ^ contents! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'initialize/release' stamp: 'apl 3/10/2005 22:43'! initialize super initialize. stream := WriteStream on: String new.! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'accessing' stamp: 'apl 12/7/2006 17:04'! metaDataSchemaInstance ^ folder metaDataSchemaInstance! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'accessing' stamp: 'apl 12/7/2006 17:19'! namesBuilder ^ folder namesBuilder! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'file in-out' stamp: 'apl 4/12/2006 14:28'! stepFileOut: aFilename | out | (out := (Filename named: aFilename) writeStream) ifNotNil: [[out nextPutAll: stream contents] ensure: [out close]]! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'accessing' stamp: 'apl 3/10/2005 22:43'! stream ^ stream! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'accessing' stamp: 'apl 3/10/2005 23:01'! stream: aStream stream := aStream! ! !PlatypusCoreRepositoryStepFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:43'! toStream: out | | stream := out. self doFolder. ! ! !PlatypusCoreRunningContext class methodsFor: 'instance creation' stamp: 'apl 3/3/2005 11:10'! folder: aFolder ^ self new folder: aFolder! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 2/27/2006 21:53'! allApplicationInstances ^ self folder allApplicationInstances! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:52'! allInstancesOf: aClass ^ self folder allInstancesOf: aClass ! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:53'! allInstancesOf: aClass do: aBlock ^ self folder allInstancesOf: aClass do: aBlock ! ! !PlatypusCoreRunningContext methodsFor: 'accessing' stamp: 'apl 2/27/2006 21:52'! folder ^folder! ! !PlatypusCoreRunningContext methodsFor: 'accessing' stamp: 'apl 2/27/2006 21:52'! folder: aPlatypusCoreRepository folder := aPlatypusCoreRepository! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 4/11/2006 18:50'! instanceAt: id ^ folder instanceAt: id ! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 4/11/2006 08:27'! oidExists: id ^ self folder oidExists: id! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:57'! oidOf: anInstance ^self folder oidOf: anInstance ! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/10/2005 08:51'! parseStream: in ^ self folder parseStream: in! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:51'! registerInstance: appInst ^ self folder registerInstance: appInst ! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:53'! registerInstance: appInst withId: id ^ self folder registerInstance: appInst withId: id! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 11/21/2005 10:43'! stepFileIn: aFilename ^self folder stepFileIn: aFilename! ! !PlatypusCoreRunningContext methodsFor: 'folder interface' stamp: 'apl 3/3/2005 10:53'! unregisterInstance: inst ^ self folder unregisterInstance: inst! ! !PlatypusExpressBuiltinFormatFormatter class methodsFor: 'instance creation' stamp: 'AlainPlantec 4/26/2012 10:49'! format: aNumber sourceFormat: aString | formatter src | aString trimBoth isEmpty ifTrue: [ src := aNumber isInteger ifTrue: ['7I'] ifFalse: ['10.1E']. ] ifFalse: [src := aString]. formatter := PlatypusExpressBuiltinFormatParser parse: src. ^ formatter format: aNumber! ! !PlatypusExpressBuiltinFormatFormatter class methodsFor: 'instance creation' stamp: 'apl 1/18/2004 01:06'! sourceFormat: aFormat ^ self new initializeFromSourceFormat: aFormat! ! !PlatypusExpressBuiltinFormatFormatter methodsFor: 'formatting' stamp: 'apl 1/16/2004 22:52'! format: aNumber ^ aNumber asString! ! !PlatypusExpressBuiltinFormatFormatter methodsFor: 'initializing' stamp: 'apl 1/18/2004 01:05'! initializeFromSourceFormat: aSourceString ^ self! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:19'! decimalChar ^decimalChar! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:19'! decimalChar: anObject decimalChar := anObject! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! decimals ^decimals! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! decimals: anObject decimals := anObject! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'formatting' stamp: 'apl 4/18/2006 12:50'! format: aNumber | symbolicFormatter source symbolicResult decIdx groupingPositions result dstPos | source := OrderedCollection new. source add: (sign). source add: (negation ifTrue: [((aNumber < 0 and: [aNumber isFloat]) ifTrue: [width + 2] ifFalse: [aNumber isFloat ifTrue: [width + 1] ifFalse: [width]]) asString] ifFalse: [(sign = $+ or: [aNumber < 0]) ifTrue: [(width + 2) asString] ifFalse: [width asString]]). source add: decimals. source add: (decimals ifNil: [$I] ifNotNil: [$F]). symbolicFormatter := PlatypusExpressBuiltinFormatSymbolicFormatter new. symbolicFormatter initializeFromSourceFormat: source. symbolicResult := symbolicFormatter format: aNumber. negation ifTrue: [aNumber < 0.0 ifTrue: [symbolicResult := '(' , (symbolicResult copyFrom: 2 to: symbolicResult size) , ')'. symbolicResult replaceAll: $- with: $ ]]. (symbolicResult indexOf: $e) > 0 ifTrue: [^ symbolicResult]. (decimalChar notNil and: [decimalChar ~= $.]) ifTrue: [symbolicResult replaceAll: $. with: decimalChar]. groupingChar notNil ifTrue: [decIdx := symbolicResult indexOf: decimalChar. groupingPositions := OrderedCollection new. decIdx := decIdx - 3. [decIdx > 0 and: [(symbolicResult at: decIdx) isDigit]] whileTrue: [groupingPositions addFirst: decIdx. decIdx := decIdx - 3]. result := String new: symbolicResult size + groupingPositions size. dstPos := 1. 1 to: symbolicResult size do: [:srcPos | (groupingPositions notEmpty and: [groupingPositions first = srcPos]) ifTrue: [result at: dstPos put: groupingChar. dstPos := dstPos + 1. groupingPositions removeFirst]. result at: dstPos put: (symbolicResult at: srcPos). dstPos := dstPos + 1]. ^ result]. ^ symbolicResult! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:19'! groupingChar ^groupingChar! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:19'! groupingChar: anObject groupingChar := anObject! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'initializing' stamp: 'AlainPlantec 10/7/2010 13:44'! initializeFromSourceFormat: anArray | picture | anArray first = $( ifTrue: [negation := true] ifFalse: [negation := false. anArray first = $+ ifTrue: [sign := $+] ifFalse: [sign := $-]]. picture := anArray second. picture size = 1 ifTrue: [self width: picture first] ifFalse: [picture size = 3 ifTrue: [self width: picture first + picture last. self decimals: picture last. self decimalChar: picture second] ifFalse: [self width: picture first + picture third + picture last. self decimalChar: (picture at: picture size - 1). self decimals: picture last. self groupingChar: picture second]]! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! negation ^negation! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! negation: anObject negation := anObject! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! sign ^sign! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! sign: anObject sign := anObject! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! width ^width! ! !PlatypusExpressBuiltinFormatPictureFormatter methodsFor: 'accessing' stamp: 'apl 1/20/2004 12:39'! width: anObject width := anObject! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! decimals ^decimals! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! decimals: anObject decimals := anObject! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'formatting' stamp: 'alain.plantec 1/18/2009 12:05'! finalStringFrom: aStringEncodingANumber forNumber: aNumber | result | result := aStringEncodingANumber. precZero = $0 ifTrue: [result := result padded: #left to: width - 1 with: precZero]. sign = $+ ifTrue: [aNumber < 0 ifFalse: [aNumber > 0 ifTrue: [result := '+' , result] ifFalse: [result := ' ' , result]]] ifFalse: [aNumber < 0 ifFalse: [result := '' , result]]. precZero ~= $0 ifTrue: [result := result padded: #left to: width with: precZero]. ^ result! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'formatting' stamp: 'AlainPlantec 10/7/2010 13:45'! format: aNumber | resultStr dec intPart decPartStr intPartStr fracPartStr fracMax fracPartStrBuf fracPartStrStream startCopy | aNumber isInteger ifTrue: [type = $I ifTrue: [^ self stringFromInteger: aNumber]] ifFalse: [type = $I ifTrue: [^ self stringFromInteger: aNumber rounded]]. type = $F ifTrue: [resultStr := aNumber printShowingDecimalPlaces: decimals. ^ self finalStringFrom: resultStr forNumber: aNumber]. decPartStr := decimals < 10 ifTrue: ['0'] ifFalse: ['']. decPartStr := decPartStr , decimals asString. dec := decimals. intPart := aNumber asFloat integerPart. fracPartStrBuf := aNumber asFloat fractionPart asString. fracPartStr := ''. fracPartStrStream := WriteStream on: fracPartStr. startCopy := false. fracPartStrBuf do: [:d | startCopy ifTrue: [fracPartStrStream nextPut: d] ifFalse: [startCopy := d = $.]]. fracPartStr := fracPartStrStream contents , '000000000000000000000000'. [dec > 0] whileTrue: [intPart := intPart / 10.0. dec := dec - 1]. intPartStr := intPart asString. (intPartStr indexOf: $e) isZero ifFalse: [decimals := decimals - 1. ^ self format: aNumber]. sign = $+ ifTrue: [aNumber < 0.0 ifFalse: [aNumber > 0.0 ifTrue: [intPartStr := '+' , intPartStr]]]. (fracMax := width - (intPartStr size + decPartStr size + 2)) > 0 ifTrue: [fracPartStr := fracPartStr copyFrom: 1 to: fracMax] ifFalse: [fracPartStr := '']. ^ intPartStr , fracPartStr , 'E+' , decPartStr! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'initializing' stamp: 'apl 12/12/2005 12:07'! initializeFromSourceFormat: aSourceString | iwidth idecimals | type := aSourceString fourth. sign := aSourceString first. precZero := aSourceString second ifNil: [$ ] ifNotNil: [aSourceString second first = $0 ifTrue: [$0] ifFalse: [$ ]]. width := (iwidth := aSourceString second) ifNil: [type = $I ifTrue: [2] ifFalse: [type = $F ifTrue: [4] ifFalse: [7]]] ifNotNil: [iwidth asNumber]. decimals := aSourceString third ifNil: [2] ifNotNil: [(idecimals := aSourceString third asNumber) < 1 ifTrue: [1] ifFalse: [idecimals]]! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! precZero ^precZero! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! precZero: anObject precZero := anObject! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! sign ^sign! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! sign: anObject sign := anObject! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'formatting' stamp: 'apl 1/19/2004 23:16'! stringFromInteger: aNumber ^ self finalStringFrom: aNumber asString forNumber: aNumber ! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! type ^type! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! type: anObject type := anObject! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! width ^width! ! !PlatypusExpressBuiltinFormatSymbolicFormatter methodsFor: 'accessing' stamp: 'apl 1/18/2004 00:20'! width: anObject width := anObject! ! !PlatypusExpressInterpretorCallArguments methodsFor: 'accessing' stamp: 'apl 2/22/2006 17:59'! addValue: aValue arguments add: aValue! ! !PlatypusExpressInterpretorCallArguments methodsFor: 'accessing' stamp: 'apl 2/22/2006 17:59'! arguments ^ arguments ! ! !PlatypusExpressInterpretorCallArguments methodsFor: 'initialize-release' stamp: 'apl 2/22/2006 17:58'! initialize super initialize. arguments := OrderedCollection new.! ! !PlatypusExpressInterpretorStackAppInst class methodsFor: 'instance creation' stamp: 'apl 2/3/2004 10:42'! instance: anInstance interpretor: anInterpretor ^ self new instance: anInstance interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'interpreting' stamp: 'apl 7/18/2004 16:41'! addRecordsToExternalRepresentation: externalRep instance asExternalRepresentation records do: [:rec | rec copy addRecordsToExternalRepresentation: externalRep]! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'interpreting' stamp: 'apl 6/16/2004 12:32'! assign: aValue | varDomain assigned | self interpretor checkAssignmentOf: aValue to: self var. varDomain := self var computedDomain. assigned := self interpretor valueFromDomain: varDomain assignCompatibleWith: aValue. ^ self fastAssign: assigned! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:51'! deepCopy | n | n := super deepCopy. n instance: self instance deepCopy. ^ n! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'accessing' stamp: 'apl 7/18/2004 16:43'! domain ^ self instance computedDomain ! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'interpreting' stamp: 'AlainPlantec 10/7/2010 15:51'! fastAssign: aValue instance := aValue. ^ instance! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'accessing' stamp: 'apl 1/26/2004 10:32'! instance ^instance! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'accessing' stamp: 'apl 1/26/2004 15:37'! instance: anExternalRep instance := anExternalRep! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'accessing' stamp: 'apl 2/3/2004 10:43'! instance: anInstance interpretor: anInterpretor self instance: anInstance. super var: (PltAnonymousVariable domain: self domain) interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'accessing' stamp: 'apl 10/24/2006 01:43'! val | value attrDomain valueDomain | interpreted ifNil: [interpreted := instance. self interpretor asValOfSelf: instance while: [self instance records do: [:rec | rec definition referenced explicitAttributesWithIndexDo: [:attr :pos | pos > rec parameters size ifTrue: [rec parameters add: PltMissingValue new]. value := rec parameters at: pos. value isPltValue ifFalse: [value isPltIdentifier ifTrue: [self interpretor asContextsStack: value contextsStack while: [value acceptTry: self interpretor]] ifFalse: [value acceptTry: self interpretor]. value := self interpretor popVal]. attrDomain := attr domain. valueDomain := value computedDomain. (self interpretor value: value isAssignableTo: attr) ifFalse: [^ PlatypusExpressIncompatibleDomainInAssignmentException signal: 'entity ''' , attr owner name , ''' attribute ''' , attr name , ''' domain : ' , attrDomain prettyPrintedExpressCode , '; value domain : ' , valueDomain prettyPrintedExpressCode]. self interpretor asValOfSelf: instance while: [value := self interpretor valueFromDomain: attrDomain assignCompatibleWith: value]. rec parameters at: pos put: value]]]]. ^ interpreted! ! !PlatypusExpressInterpretorStackAppInst methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:51'! veryDeepCopy | n | n := super veryDeepCopy. n instance: self instance veryDeepCopy. ^ n! ! !PlatypusExpressInterpretorStackAttribute class methodsFor: 'instance creation' stamp: 'apl 1/3/2004 11:11'! var: aData record: aRecord pos: anInteger interpretor: anInterpretor ^ self new var: aData record: aRecord pos: anInteger interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'interpreting' stamp: 'apl 3/31/2006 10:23'! assign: aValue | varDomain assigned | self interpretor checkAssignmentOf: aValue to: self var. varDomain := self var computedDomain. self interpretor asValOfSelf: record while: [ assigned := self interpretor valueFromDomain: varDomain assignCompatibleWith: aValue]. ^ self fastAssign: assigned! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:51'! deepCopy | n | n := super deepCopy. n record: self record deepCopy. ^ n! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'interpreting' stamp: 'apl 1/3/2004 11:20'! fastAssign: aValue self record parameters at: self pos put: aValue. ^ aValue! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 1/2/2004 22:09'! pos ^pos! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 1/2/2004 22:09'! pos: anObject pos := anObject! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 1/3/2004 11:06'! record ^record! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 1/3/2004 11:06'! record: anObject record := anObject! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 3/31/2006 08:44'! val | fetched attrDef | (fetched := self record parameters at: pos) ifNil: [attrDef := self record definition attributes at: pos. ^ PlatypusExpressInvalidAttributeException signal: 'attribute : ''' , attrDef name , ''' is not computable']. ^ fetched! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'accessing' stamp: 'apl 1/3/2004 11:09'! var: aData record: aRecord pos: anInteger interpretor: anInterpretor super var: aData interpretor: anInterpretor. self record: aRecord. self pos: anInteger! ! !PlatypusExpressInterpretorStackAttribute methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:51'! veryDeepCopy | n | n := super veryDeepCopy. n record: self record veryDeepCopy. ^ n! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'apl 7/18/2004 16:40'! addRecordsToExternalRepresentation: externalRep self val addRecordsToExternalRepresentation: externalRep ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 2/23/2005 21:45'! aggr: anAggr positionFromIndex: anInteger anAggr isPltArrayInstance ifTrue: [^ anInteger - self aggr lowerBound val + 1] ifFalse: [^ anInteger]! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 6/13/2004 11:46'! asString ^ self val printableCode! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 3/1/2004 22:26'! computedDomain ^ self val computedDomain ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'apl 1/2/2004 19:05'! fastAssign: aValue self subclassResponsibility ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 12:54'! instance ^ self val! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 6/13/2004 11:47'! printString ^ self asString! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'AlainPlantec 10/7/2010 15:52'! pushAttribute: anIdent | v key allAttrIdentif | (v := self val) ifMissing: [self interpretor pushVal: v] ifNotMissing: [key := anIdent asUppercase. allAttrIdentif := v getInstanceAttributeIdentification: [:a | a name asUppercase = key]. allAttrIdentif isNil ifTrue: [PlatypusExpressInvalidAttributeException signal: 'invalid attribute name: ''' , anIdent , '''']. self pushAttribute: allAttrIdentif definition entityInstance: v]! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'apl 10/2/2006 16:00'! pushAttribute: attrDef entityInstance: entityInst self interpretor asValOfSelf: entityInst while: [ attrDef acceptTry: self interpretor]! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'apl 1/31/2006 12:32'! pushIndex: anInteger | elementDomain anonymousVar | elementDomain := self var staticDomain elementType. anonymousVar := PltAnonymousVariable domain: elementDomain. self pushVar: anonymousVar aggr: self val index: anInteger! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'apl 3/1/2004 22:17'! pushRange: anInterval | anonymousVar | anonymousVar := PltAnonymousVariable domain: self val computedDomain. self pushVar: anonymousVar aggr: self val range: anInterval ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'AlainPlantec 10/7/2010 15:52'! pushVar: anObject aggr: anAgregateData index: anInteger | stackElement | stackElement := PlatypusExpressInterpretorStackIndexedElement var: anObject aggr: anAgregateData idx: anInteger interpretor: interpretor. interpretor push: stackElement! ! !PlatypusExpressInterpretorStackElement methodsFor: 'interpreting' stamp: 'AlainPlantec 10/7/2010 15:52'! pushVar: anObject aggr: anAgregateData range: anInterval | stackElement | stackElement := PlatypusExpressInterpretorStackRangeElement var: anObject aggr: anAgregateData range: anInterval interpretor: interpretor. interpretor push: stackElement! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 1/2/2004 19:00'! val ^ self subclassResponsibility ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 1/22/2004 18:51'! var ^var! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:52'! var: anObject var := anObject. ! ! !PlatypusExpressInterpretorStackElement methodsFor: 'accessing' stamp: 'apl 1/22/2004 18:52'! var: anObject interpretor: anInterpretor self var: anObject. self interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackIndexedElement class methodsFor: 'instance creation' stamp: 'apl 1/2/2004 19:09'! var: aData aggr: anAggregateData idx: anInteger interpretor: anInterpretor ^ self new var: aData aggr: anAggregateData idx: anInteger interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 12/21/2003 11:10'! aggr ^aggr! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 12/21/2003 11:10'! aggr: anObject aggr := anObject! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 1/23/2004 12:08'! aggrPosition ^ self aggrPositionFromIndex: self idx! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 1/27/2004 11:44'! aggrPositionFromIndex: anInteger ^ self aggr: self aggr positionFromIndex: anInteger! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'interpreting' stamp: 'apl 6/16/2004 12:40'! assign: aValue | varDomain assigned | self interpretor checkAssignmentOf: aValue to: self var. varDomain := self var computedDomain. assigned := self interpretor valueFromDomain: varDomain assignCompatibleWith: aValue. ^ self fastAssign: assigned! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:52'! deepCopy | n | n := super deepCopy. n aggr: self aggr deepCopy. ^ n! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'interpreting' stamp: 'apl 1/2/2004 19:11'! fastAssign: aValue self aggr at: idx put: aValue. ^ aValue! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 12/20/2003 12:01'! idx ^idx! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 12/20/2003 12:01'! idx: anObject idx := anObject! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 1/7/2004 19:16'! val ^ self aggr at: self aggrPosition! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'accessing' stamp: 'apl 1/2/2004 19:10'! var: aData aggr: anAggregateData idx: anInteger interpretor: anInterpretor super var: aData interpretor: anInterpretor. self aggr: anAggregateData. self idx: anInteger! ! !PlatypusExpressInterpretorStackIndexedElement methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:52'! veryDeepCopy | n | n := super veryDeepCopy. n aggr: self aggr veryDeepCopy. ^ n! ! !PlatypusExpressInterpretorStackRangeElement class methodsFor: 'instance creation' stamp: 'apl 1/2/2004 19:12'! var: aData aggr: anAggregateData range: anInterval interpretor: anInterpretor ^ self new var: aData aggr: anAggregateData range: anInterval interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 12/22/2003 12:59'! aggr ^aggr! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 12/22/2003 12:59'! aggr: anObject aggr := anObject! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'interpreting' stamp: 'apl 6/16/2004 12:40'! assign: aValue | varDomain assigned | self interpretor checkAssignmentOf: aValue to: self var. varDomain := self var computedDomain. assigned := self interpretor valueFromDomain: varDomain assignCompatibleWith: aValue. ^ self fastAssign: assigned! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:52'! deepCopy | n | n := super deepCopy. n aggr: self aggr deepCopy. ^ n! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 1/27/2004 09:25'! fastAssign: aValue self aggr range: range put: aValue interpretor: self interpretor. ^ aValue! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'interpreting' stamp: 'apl 3/1/2004 22:22'! pushIndex: anInteger | elementDomain anonymousVar | elementDomain := self var computedDomain elementType. anonymousVar := PltAnonymousVariable domain: elementDomain. self pushVar: anonymousVar aggr: self aggr index: range first + anInteger - 1 ! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'interpreting' stamp: 'apl 1/2/2004 19:07'! pushRange: anInterval self pushVar: self var aggr: self aggr range: (range first + anInterval first - 1 to: anInterval last + range first - 1)! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 12/22/2003 13:00'! range ^range! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 12/22/2003 13:00'! range: anObject range := anObject! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 2/23/2005 21:45'! val | rng | self aggr isPltArrayInstance ifTrue: [rng := (self aggr: self aggr positionFromIndex: range first) to: (self aggr: self aggr positionFromIndex: range last)] ifFalse: [rng := range]. ^ self aggr range: rng interpretor: self interpretor! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'accessing' stamp: 'apl 1/2/2004 19:12'! var: aData aggr: anAggregateData range: anInterval interpretor: anInterpretor super var: aData interpretor: anInterpretor. self aggr: anAggregateData. self range: anInterval! ! !PlatypusExpressInterpretorStackRangeElement methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:52'! veryDeepCopy | n | n := super veryDeepCopy. n aggr: self aggr veryDeepCopy. ^ n! ! !PlatypusExpressInterpretorStackVar class methodsFor: 'instance creation' stamp: 'apl 3/17/2006 16:28'! interpretor: anInterpretor ^ self var: PltAnonymousVariable default val: PltMissingValue new interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackVar class methodsFor: 'instance creation' stamp: 'apl 1/21/2004 11:05'! val: aValue interpretor: anInterpretor ^self var: PltAnonymousVariable default val: aValue interpretor: anInterpretor! ! !PlatypusExpressInterpretorStackVar class methodsFor: 'instance creation' stamp: 'apl 1/2/2004 18:58'! var: aData val: aValue interpretor: anInterpretor ^ self new var: aData val: aValue interpretor: anInterpretor ! ! !PlatypusExpressInterpretorStackVar methodsFor: 'interpreting' stamp: 'apl 6/16/2004 12:41'! assign: aValue | varDomain assigned | self interpretor checkAssignmentOf: aValue to: self var. varDomain := self var computedDomain. assigned := self interpretor valueFromDomain: varDomain assignCompatibleWith: aValue. ^ self fastAssign: assigned! ! !PlatypusExpressInterpretorStackVar methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:53'! deepCopy | n | n := super deepCopy. n val: self val deepCopy. ^ n! ! !PlatypusExpressInterpretorStackVar methodsFor: 'interpreting' stamp: 'apl 1/2/2004 18:58'! fastAssign: aValue self val: aValue. ^ aValue! ! !PlatypusExpressInterpretorStackVar methodsFor: 'accessing' stamp: 'AlainPlantec 5/4/2012 19:25'! val val ifNotNil: [ val isPltValue ifFalse: [val acceptTry: self interpretor. val := self interpretor popVal]]. ^ val! ! !PlatypusExpressInterpretorStackVar methodsFor: 'accessing' stamp: 'apl 7/14/2004 13:12'! val: anObject val := anObject! ! !PlatypusExpressInterpretorStackVar methodsFor: 'accessing' stamp: 'apl 1/22/2004 18:50'! var: aData val: aValue interpretor: anInterpretor super var: aData interpretor: anInterpretor. self val: aValue! ! !PlatypusExpressInterpretorStackVar methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:53'! veryDeepCopy | n | n := super veryDeepCopy. n val: self val veryDeepCopy. ^ n! ! !PlatypusExpressInterpretorStackValue class methodsFor: 'instance creation' stamp: 'apl 2/23/2006 10:53'! interpretor: anExpressInterpreter ^ self new interpretor: anExpressInterpreter! ! !PlatypusExpressInterpretorStackValue methodsFor: 'copying' stamp: 'apl 2/22/2006 17:49'! deepCopy | n | n := self copy. ^ n! ! !PlatypusExpressInterpretorStackValue methodsFor: 'accessing' stamp: 'apl 2/22/2006 17:49'! interpretor ^interpretor! ! !PlatypusExpressInterpretorStackValue methodsFor: 'accessing' stamp: 'apl 2/22/2006 17:49'! interpretor: anObject interpretor := anObject! ! !PlatypusExpressInterpretorStackValue methodsFor: 'accessing' stamp: 'apl 2/22/2006 17:49'! val ^ self subclassResponsibility ! ! !PlatypusExpressInterpretorStackValue methodsFor: 'copying' stamp: 'AlainPlantec 10/7/2010 15:52'! veryDeepCopy | n | n := self copy. ^ n! ! !PlatypusExpressInterpretorWrapper class methodsFor: 'instance creation' stamp: 'apl 1/28/2006 10:12'! interpreter: anExpressInterpreter ^ self new myInterpreter: anExpressInterpreter! ! !PlatypusExpressInterpretorWrapper methodsFor: 'platypus interpreting'! EvaluatePlatypusInterpreterNativeCode ^ [| t1 t2 | (t1 := self p) ifMissing: [^ self return: t1] ifNotMissing: [t2 := PltSetInstance new. t2 contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: t1 computedDomain). ^ self return: t2]] value! ! !PlatypusExpressInterpretorWrapper methodsFor: 'error handling' stamp: 'AlainPlantec 6/15/2012 11:34'! doesNotUnderstand: message | v | message arguments isEmpty ifTrue: [(v := myInterpreter valueOf: message selector) ifNotNil: [^ v]] ifFalse: [message arguments size = 1 ifTrue: [(myInterpreter dataNamed: (message selector copyFrom: 1 to: message selector size - 1) value: (PlatypusExpressInterpretorStackVar val: message arguments first interpretor: myInterpreter)) ifTrue: [^ self] ifFalse: [^myInterpreter perform: message selector withArguments: message arguments]]]. ^ myInterpreter perform: message selector withArguments: message arguments! ! !PlatypusExpressInterpretorWrapper methodsFor: 'accessing' stamp: 'apl 2/2/2006 16:36'! myContext ^ myInterpreter! ! !PlatypusExpressInterpretorWrapper methodsFor: 'accessing' stamp: 'apl 1/28/2006 10:27'! myInterpreter: aPlatypusExpressInterpreter myInterpreter := aPlatypusExpressInterpreter! ! !PlatypusExpressParsedMetaConcept class methodsFor: 'instance creation' stamp: 'apl 3/29/2006 17:17'! ident: anIdent ^ self ident: anIdent metaExpression: nil! ! !PlatypusExpressParsedMetaConcept class methodsFor: 'instance creation' stamp: 'apl 3/29/2006 17:18'! ident: anIdent metaExpression: aMetaExpression ^ self new ident: anIdent metaExpression: aMetaExpression! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/29/2006 17:14'! ident ^ident! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/29/2006 17:14'! ident: anObject ident := anObject! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/29/2006 17:18'! ident: anIdent metaExpression: aMetaExpression metaExpression := aMetaExpression. ident := anIdent! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/29/2006 17:14'! metaExpression ^metaExpression! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/29/2006 17:14'! metaExpression: anObject metaExpression := anObject! ! !PlatypusExpressParsedMetaConcept methodsFor: 'accessing' stamp: 'apl 3/15/2007 10:20'! updateDictionaryInstanceName: aDictionaryInstance aDictionaryInstance name: self ident. self metaExpression ifNotNil: [aDictionaryInstance metaExpression: self metaExpression]! ! !PlatypusExpressParserContext class methodsFor: 'instance creation' stamp: 'apl 6/21/2003 11:01'! contextInstance: anPltDictionaryInstance ^ self contextInstance: anPltDictionaryInstance owner: nil ! ! !PlatypusExpressParserContext class methodsFor: 'instance creation' stamp: 'apl 5/17/2004 09:30'! contextInstance: aPltDictionaryInstance owner: anotherContextOrNil | context | context := self new. context ownerContext: anotherContextOrNil. context existingContextInstance: aPltDictionaryInstance. ^ context! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 3/5/2003 17:05'! contextInstance ^ contextInstance! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:53'! contextInstance: anObject contextInstance := anObject! ! !PlatypusExpressParserContext methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:48'! destroy namedTypesIndex := nil. identifiersIndex := nil. ownerContext := nil. contextInstance := nil. super destroy! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 2/23/2005 22:32'! existingContextInstance: anObject self contextInstance: anObject. anObject isPltSchemaDefinition ifTrue: [anObject identifiersCache ifNotNil: [anObject identifiersCache keysAndValuesDo: [:k :v | self identifiersIndex at: k put: v]]. anObject namedTypesCache ifNotNil: [anObject namedTypesCache keysAndValuesDo: [:k :v | self namedTypesIndex at: k put: v]]]! ! !PlatypusExpressParserContext methodsFor: 'initialize/release' stamp: 'apl 2/23/2005 21:48'! flushCaches self contextInstance isPltContextDefinition ifTrue: [self contextInstance namedTypesCache isNil ifTrue: [self contextInstance namedTypesCache: self namedTypesIndex] ifFalse: [self namedTypesIndex associationsDo: [:assoc | self contextInstance namedTypesCache add: assoc]]. self contextInstance identifiersCache isNil ifTrue: [self contextInstance identifiersCache: self identifiersIndex] ifFalse: [self identifiersIndex associationsDo: [:assoc | self contextInstance identifiersCache add: assoc]]]! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 6/21/2003 11:11'! identifiersIndex ^ identifiersIndex! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 6/21/2003 11:22'! identifiersIndex: aDictionary identifiersIndex := aDictionary! ! !PlatypusExpressParserContext methodsFor: 'initialize/release' stamp: 'apl 5/15/2004 09:31'! initialize super initialize. ! ! !PlatypusExpressParserContext methodsFor: 'searching' stamp: 'AlainPlantec 10/7/2010 15:53'! lookUpIdentifierBN: anIdent | availables | availables := self identifiersIndex at: anIdent asUppercase ifAbsent: []. ^ availables ifNotNil: [availables anyOne]! ! !PlatypusExpressParserContext methodsFor: 'searching' stamp: 'AlainPlantec 10/7/2010 15:53'! lookUpNamedTypeBN: anIdent | availables | availables := self namedTypesIndex at: anIdent asUppercase ifAbsent: []. ^ availables ifNotNil: [availables anyOne]! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 6/21/2003 11:11'! namedTypesIndex ^ namedTypesIndex! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 6/21/2003 11:22'! namedTypesIndex: aDictionary namedTypesIndex := aDictionary! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 6/21/2003 10:58'! ownerContext ^ ownerContext! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:54'! ownerContext: anotherContextOrNil ownerContext := anotherContextOrNil. self identifiersIndex: Dictionary new. self namedTypesIndex: Dictionary new. ! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 2/10/2006 16:10'! registerIdentifier: data named: anIdent | key set | key := anIdent asUppercase. set := self identifiersIndex at: key ifAbsentPut: Set new. set at: key add: data! ! !PlatypusExpressParserContext methodsFor: 'accessing' stamp: 'apl 2/10/2006 16:11'! registerNamedType: data named: anIdent | key set | key := anIdent asUppercase. set := self namedTypesIndex at: key ifAbsentPut: Set new. set at: key add: data! ! !PlatypusExpressParserResult class methodsFor: 'instance creation' stamp: 'apl 3/11/2003 23:06'! tokenList: aTokenList metaData: aMetaDataInstance ^ self new tokenList: aTokenList metaData: aMetaDataInstance! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'apl 3/11/2003 23:06'! metaData ^ metaData! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'apl 2/27/2003 09:58'! metaData: anObject metaData := anObject! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'apl 2/27/2003 09:51'! tokenList ^tokenList! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'apl 2/27/2003 09:51'! tokenList: anObject tokenList := anObject! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'apl 9/26/2003 23:21'! tokenList: aTokenList metaData: aMetaDataInstance self tokenList: aTokenList. self metaData: aMetaDataInstance. ! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'AlainPlantec 5/21/2012 13:56'! users ^ users ! ! !PlatypusExpressParserResult methodsFor: 'accessing' stamp: 'AlainPlantec 5/21/2012 13:56'! users: aListOfSchemaInstanceReferences users := aListOfSchemaInstanceReferences! ! !PlatypusModelContentsMetaDefinitionsBuilder methodsFor: 'computing' stamp: 'AlainPlantec 5/11/2012 17:31'! acceptModelContents: e modelContents := e. interpreter modelContents: e. checkingPass := #recording. 'Storing rules' displayProgressAt: Sensor cursorPoint from: 1 to: e dataInstances size during: [:bar | e dataInstances withIndexDo: [:d :idx | bar value: idx. self storeRule: d]]. checkingPass := #resolving. 'Building mapping' displayProgressAt: Sensor cursorPoint from: 1 to: e dataInstances size during: [:bar | e dataInstances withIndexDo: [:d :idx | bar value: idx. self buildMappingFor: d]]. 'Computing mapping' displayProgressAt: Sensor cursorPoint from: 1 to: e dataInstances size during: [:bar | e dataInstances withIndexDo: [:d :idx | bar value: idx. self computeMappingFor: d]]. (PlatypusModelContentsRecorder modelContents: modelContents) checksAll: toBeRecorded. modelContents replaceIndex: replaceIndex. PlatypusInstanceDoer new do: [:c :p | ((c at: p) isPltGenericInstance) ifTrue: [(c at: p) markAsPersistent]] from: replaceIndex values in: modelContents. ! ! !PlatypusModelContentsMetaDefinitionsBuilder methodsFor: 'computing' stamp: 'AlainPlantec 5/4/2012 18:58'! buildMappingFor: e | instDefinition metaExpression metaCondition evalResult | instDefinition := e definition ref. ((instDefinition inheritsFromEntityDefinitionNamed: PltNamedType platypusMetaData name) or: [ (instDefinition inheritsFromEntityDefinitionNamed: PltContextDefinition platypusMetaData name) or: [ (instDefinition inheritsFromEntityDefinitionNamed: PltSchemaDefinition platypusMetaData name) or: [ instDefinition inheritsFromEntityDefinitionNamed: PltAttribute platypusMetaData name]]]) ifFalse: [^ self]. interpreter asValOfSelf: e while: [rulesIndex keysAndValuesDo: [:currRule :metaAssoc | metaCondition := metaAssoc key. metaExpression := metaAssoc value key. evalResult := interpreter compute: metaCondition in: modelContents owner to: e notifying: nil ifFail: [self halt] logged: false. evalResult val isPltTrueConstant ifTrue: [ | ref newInst | ref := PltEntityDefinitionReference ref: PltMetaMappingDefinition platypusMetaData. newInst := (PltInternalRepresentation new) definition: ref; parameters: {e. metaAssoc value value copy}. toBeRecorded add: newInst]]]. ! ! !PlatypusModelContentsMetaDefinitionsBuilder methodsFor: 'computing' stamp: 'AlainPlantec 5/8/2012 17:52'! computeMappingFor: e | instDefinition key | instDefinition := e definition. key := PltMetaMappingDefinition platypusMetaData name asUppercase. interpreter asValOfSelf: e while: [(e isPltInternalRepresentation and: [e definition name asUppercase = key]) ifTrue: [| metaExpression metaCondition evalResult newInst | metaExpression := e valueOfExplicitAttributeNamed: 'expression'. instDefinition := e valueOfExplicitAttributeNamed: 'definition'. evalResult := interpreter evaluate: metaExpression val in: modelContents owner to: instDefinition notifying: nil ifFail: [self halt]. newInst := evalResult val. instDefinition addRecordsToExternalRepresentation: newInst. toBeRecorded add: newInst. replaceIndex at: instDefinition put: newInst]]! ! !PlatypusModelContentsMetaDefinitionsBuilder methodsFor: 'initialize-release' stamp: 'AlainPlantec 5/5/2012 02:00'! initialize super initialize. rulesIndex := IdentityDictionary new. interpreter := PlatypusExpressInterpretor new. toBeRecorded := OrderedCollection new. replaceIndex := IdentityDictionary new ! ! !PlatypusModelContentsMetaDefinitionsBuilder methodsFor: 'computing' stamp: 'AlainPlantec 1/21/2011 22:13'! storeRule: e | key | key := PltMetaMappingRule platypusMetaData name asUppercase. (e isPltInternalRepresentation and: [e definition name asUppercase = key]) ifTrue: [| metaExpression metaCondition expression condition | expression := e valueOfExplicitAttributeNamed: 'expression'. condition := e valueOfExplicitAttributeNamed: 'condition'. metaCondition := interpreter parse: condition val in: modelContents owner notifying: nil ifFail: [self halt]. metaExpression := interpreter parse: expression val in: modelContents owner notifying: nil ifFail: [self halt]. rulesIndex at: e put: metaCondition -> (metaExpression -> expression)]! ! !PlatypusNamesBuilder class methodsFor: 'utilities' stamp: 'apl 1/26/2007 11:22'! capitalize: aString first: firstCapitalized ^ aString capitalizeFirst: firstCapitalized! ! !PlatypusNamesBuilder class methodsFor: 'instance creation' stamp: 'apl 12/7/2006 17:30'! classPrefix: aClassPrefix systemCategoryPrefix: aSysCatPrefix rootClassName: aRootClassName rootClassSystemCategory: aRootClassSystemCategory ^ self new classPrefix: aClassPrefix systemCategoryPrefix: aSysCatPrefix rootClassName: aRootClassName rootClassSystemCategory: aRootClassSystemCategory! ! !PlatypusNamesBuilder class methodsFor: 'instance creation' stamp: 'AlainPlantec 4/27/2012 09:23'! default ^ self prefixedBy: #PTs ! ! !PlatypusNamesBuilder class methodsFor: 'instance creation' stamp: 'apl 1/29/2007 14:46'! meta ^ self classPrefix: #Plt systemCategoryPrefix: #Platypus rootClassName: #PltEntityInstance rootClassSystemCategory: #'Platypus-PlatypusDictionarySchemaSchema'! ! !PlatypusNamesBuilder class methodsFor: 'instance creation' stamp: 'apl 2/15/2007 17:15'! prefixedBy: aPrefix ^ self classPrefix: aPrefix systemCategoryPrefix: aPrefix rootClassName: aPrefix , 'CoreEntity' rootClassSystemCategory: aPrefix , '-CoreEntity'! ! !PlatypusNamesBuilder class methodsFor: 'accessing' stamp: 'apl 2/26/2005 16:39'! querySymbols ^ #(#argName #smalltalkType #smalltalkInitializingExpression)! ! !PlatypusNamesBuilder class methodsFor: 'utilities' stamp: 'apl 3/9/2005 18:36'! uncapitalize: aString | instr outstr resString curr | instr := ReadStream on: aString. outstr := WriteStream on: String new. outstr nextPut: instr next asLowercase. [instr atEnd] whileFalse: [(curr := instr next) isUppercase ifTrue: [outstr nextPut: $_; nextPut: curr asLowercase] ifFalse: [outstr nextPut: curr asLowercase]]. resString := outstr contents. ^ resString! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 5/25/2005 21:57'! abstractVisitorClassName ^ systemCategoryPrefix, 'AbstractVisitor'! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 3/14/2005 23:04'! allClassInstVarNamesFromEntity: e | cls nativesClassInstVar | (cls := self classFromMetaData: e) ifNil: [nativesClassInstVar := #()] ifNotNil: [nativesClassInstVar := cls class instVarNames]. ^ nativesClassInstVar! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 3/14/2005 23:04'! allClassVarNamesFromEntity: e | cls nativesClassVar | (cls := self classFromMetaData: e) ifNil: [nativesClassVar := #()] ifNotNil: [nativesClassVar := cls classVarNames]. ^ nativesClassVar! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 1/31/2007 15:20'! allInstVarNamesFromEntity: e | nativesInstVar cls inherited instVarNames locals | inherited := Set new. locals := Set new. e inheritedExplicitAttributesDo: [:attr | attr redeclaring ifNil: [inherited add: (attr instVarNameFromNamesBuilder: attr owner namesBuilder)]]. e explicitAttributesDo: [:attr | attr redeclaring ifNil: [locals add: (attr instVarNameFromNamesBuilder: self)]]. (cls := self classFromMetaData: e) ifNil: [nativesInstVar := #()] ifNotNil: [nativesInstVar := cls instVarNames]. instVarNames := nativesInstVar asSet. instVarNames removeAllFoundIn: inherited. instVarNames addAll: locals. ^ instVarNames! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 1/31/2007 15:19'! allReservedNamesFromEntity: e | nativesInstVar cls inherited instVarNames | inherited := Set new. e inheritedExplicitAttributesDo: [:attr | attr redeclaring ifNil: [inherited add: (attr instVarNameFromNamesBuilder: attr owner namesBuilder)]]. (cls := self classFromMetaData: e) ifNil: [nativesInstVar := #()] ifNotNil: [nativesInstVar := cls instVarNames]. instVarNames := nativesInstVar asSet. instVarNames addAll: inherited. ^ instVarNames! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 1/20/2007 10:03'! argNameFor: aMetaData ^ (PlatypusSmartNamer query: #argName namesBuilder: self) acceptTry: aMetaData! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 3/9/2005 11:37'! argNameFor: aMetaData scopeMetaData: aScope ^ self argNameFor: aMetaData scopeMetaData: aScope reservedNames: OrderedCollection new ! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 1/20/2007 10:05'! argNameFor: aMetaData scopeMetaData: aScope reservedNames: aListOfString ^ self localVarName: (self argNameFor: aMetaData) inScope: aScope reservedNames: aListOfString! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 3/4/2005 11:36'! argNameSuffixFor: aMetaData | argname | argname := self argNameFor: aMetaData. argname size = 1 ifTrue: [^ argname]. argname first = $a ifTrue: [argname := argname copyFrom: 2 to: argname size]. argname size = 1 ifTrue: [^ argname]. argname first = $n ifTrue: [argname := argname copyFrom: 2 to: argname size]. ^ argname! ! !PlatypusNamesBuilder methodsFor: 'utilities' stamp: 'apl 2/27/2005 22:24'! capitalize: aString first: firstCapitalized ^ self class capitalize: aString first: firstCapitalized! ! !PlatypusNamesBuilder methodsFor: 'generated class accessing' stamp: 'AlainPlantec 7/14/2011 16:57'! classFromMetaData: aMetaData ^ PlatypusPharoSmalltalk at: (aMetaData generatedClassNameFromNamesBuilder: self) asSymbol ifAbsent: []! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 2/26/2005 17:03'! classPrefix ^ classPrefix ! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 2/26/2005 16:39'! classPrefix: anObject classPrefix := anObject! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 12/7/2006 17:30'! classPrefix: aClassPrefix systemCategoryPrefix: aSysCatPrefix rootClassName: aRootClassName rootClassSystemCategory: aRootClassSystemCategory self classPrefix: aClassPrefix. self systemCategoryPrefix: aSysCatPrefix. self rootClassName: aRootClassName. self rootClassSystemCategory: aRootClassSystemCategory! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 3/3/2005 12:32'! contextArgNameFromAttribute: e ^ self contextArgNameFromEntity: e owner! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 3/4/2005 12:26'! contextArgNameFromEntity: e ^ self localVarName: 'aContext' inScope: e! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 5/15/2005 00:47'! contextArgNameFromQualifier: e | parent | ^ (parent := self parentAttributeOf: e) ifNotNil: [ self contextArgNameFromAttribute: (parent)]! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 5/29/2005 23:54'! functionInvokingFrom: anAlgorithm | code selectorParts | code := WriteStream on: String new. selectorParts := self normalizedAlgorithmFormalParametersInfosFrom: anAlgorithm. selectorParts do: [:sp | code nextPutAll: sp first , ': '. code nextPutAll: sp second] separatedBy: [code nextPutAll: ' ']. ^code contents! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 1/18/2007 10:19'! localCopyMethodNameFromEntity: e ^ (self normalizedNameFrom: e name first: false), 'CopyTo:'! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 1/18/2007 10:44'! localFromValuesMethodNameFromEntity: e ^ (self normalizedNameFrom: e name first: false) , 'FromValues:'! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 1/18/2007 10:44'! localToValuesMethodNameFromEntity: e ^ (self normalizedNameFrom: e name first: false) , 'ToValues:'! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 3/14/2005 14:37'! localVarName: aPrefix inScope: aScopeMetaData ^ self localVarName: aPrefix inScope: aScopeMetaData reservedNames: OrderedCollection new! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 1/31/2007 15:20'! localVarName: aPrefix inScope: aScopeMetaData reservedNames: aListOfString | allInstVars | allInstVars := self allReservedNamesFromEntity: aScopeMetaData. aListOfString addAll: allInstVars. ^ self localVarName: aPrefix reservedNames: aListOfString! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 3/15/2005 14:25'! localVarName: aPrefix reservedNames: aListOfString | candidat cpt | candidat := aPrefix asSymbol. cpt := 0. [aListOfString includes: candidat] whileTrue: [cpt := cpt + 1. candidat := (aPrefix , cpt asString) asSymbol]. aListOfString add: candidat. ^ candidat! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 2/27/2005 21:57'! methodCategoryPrefix ^ 'platypus-generated'! ! !PlatypusNamesBuilder methodsFor: 'utilities' stamp: 'apl 3/26/2005 13:25'! nameWithUnderbar: aName 1 to: aName size do: [:pos | ((aName at: pos) = $_) ifTrue: [^true]]. ^false! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 4/19/2006 19:02'! normalizedAlgorithmFormalParametersInfosFrom: aFunctionDeclaration | selp parts reserved arg | parts := OrderedCollection new. reserved := Set new. aFunctionDeclaration formalParameters copy do: [:fps | selp := self normalizedVarNameFrom: fps name. arg := self localVarName: (self argNameFor: fps domain) reservedNames: reserved. parts add: (Array with: selp with: arg with: fps byCopy with:fps domain)]. ^ parts! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 4/19/2006 19:02'! normalizedAlgorithmLocalVariablesInfosFrom: anAlgorithm | selp parts reserved arg | parts := OrderedCollection new. reserved := Set new. anAlgorithm locals copy do: [:fps | selp := self normalizedVarNameFrom: fps name. arg := self localVarName: (self argNameFor: fps domain) reservedNames: reserved. parts add: (Array with: selp with: arg with: true with: fps domain)]. ^ parts! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/14/2005 14:47'! normalizedClassNameFrom: aName ^ self normalizedClassNameFrom: aName suffix: ''! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'AlainPlantec 10/26/2011 20:50'! normalizedClassNameFrom: aName suffix: aSuffix ^self classPrefix ,(self normalizedNameFrom: aName first: true) , aSuffix! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 6/28/2005 19:44'! normalizedGetSelectorFrom: aName prefix: aPrefix suffix: aSuffix ^ (aPrefix ifNil: [(self normalizedVarNameFrom: aName) , aSuffix] ifNotNil: [aPrefix , (self normalizedVarSuffixFrom: aName) , aSuffix]) asSymbol! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/14/2005 09:37'! normalizedGetSelectorFrom: aName suffix: aSuffix ^ self normalizedGetSelectorFrom: aName prefix: nil suffix: aSuffix ! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/14/2005 10:10'! normalizedGetSelectorWithArgFrom: aName prefix: aPrefix suffix: aSuffix ^ (self normalizedGetSelectorFrom: aName prefix: aPrefix suffix: aSuffix), ':' ! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 12/16/2006 00:30'! normalizedMethodCategory: aName className: aClassName meta: isMeta aName first = $* ifTrue: [ ^ String cr , '!!' , aClassName , (isMeta ifTrue: [' class'] ifFalse: ['']) , ' methodsFor: ''' , aName , '''!!'] ifFalse: [ ^ String cr , '!!' , aClassName , (isMeta ifTrue: [' class'] ifFalse: ['']) , ' methodsFor: ''' , self methodCategoryPrefix , '-' , aName , '''!!']! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'gr 2/14/2006 13:00'! normalizedMethodCategory: aName nameSpace: aNameSpace className: aClassName meta: isMeta ^ String cr , '!!' , aNameSpace, '.', aClassName , (isMeta ifTrue: [' class'] ifFalse: ['']) , ' methodsFor: ''' , self methodCategoryPrefix , '-' , aName , '''!!'! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/26/2005 13:25'! normalizedNameFrom: aName first: firstCapitalized ^(self nameWithUnderbar: aName ) ifTrue: [self capitalize: aName first: firstCapitalized] ifFalse: [aName asIdentifier: firstCapitalized]! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'gr 2/21/2006 15:14'! normalizedNameSpaceFrom: aName suffix: aSuffix ^ ((self capitalize: aName first: true) asIdentifier: true) , aSuffix! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 6/28/2005 19:43'! normalizedSetSelectorFrom: aName prefix: aPrefix suffix: aSuffix ^ (aPrefix ifNil: [(self normalizedVarNameFrom: aName) , aSuffix , ':'] ifNotNil: [aPrefix , (self normalizedVarSuffixFrom: aName) , aSuffix , ':']) asSymbol! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/14/2005 09:38'! normalizedSetSelectorFrom: aName suffix: aSuffix ^ self normalizedSetSelectorFrom: aName prefix: nil suffix: aSuffix ! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/14/2005 10:37'! normalizedSystemCategoryNameFrom: aName suffix: aSuffix ^ self systemCategoryPrefix , '-' , ((self capitalize: aName first: true) asIdentifier: true) , aSuffix! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 3/26/2005 12:16'! normalizedVarNameFrom: aName ^(self normalizedNameFrom: aName first: false) ! ! !PlatypusNamesBuilder methodsFor: 'naming basic' stamp: 'apl 4/20/2006 15:42'! normalizedVarSuffixFrom: aName | strim | aName size > 1 ifTrue: [ strim := WriteStream on: String new. strim nextPut: aName first asUppercase. strim nextPutAll: (self normalizedVarNameFrom: (aName copyFrom: 2 to: aName size)). ^ strim contents]. ^ aName asUppercase! ! !PlatypusNamesBuilder methodsFor: 'utilities' stamp: 'apl 5/17/2005 08:51'! parentAttributeOf: aMetaData | md | md := aMetaData. [md isPltAttribute] whileFalse: [(md respondsTo: #owner) ifFalse: [^nil]. md owner isNil ifTrue: [^ nil]. md := md owner]. ^md! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 2/26/2005 16:39'! querySymbols ^ self class querySymbols! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 2/28/2006 10:18'! receiverArgNameFromAttribute: e ^ self receiverArgNameFromEntity: e owner! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'apl 2/28/2006 10:18'! receiverArgNameFromEntity: e ^ self localVarName: 'aReceiver' inScope: e! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 12/7/2006 12:44'! rootClassName ^rootClassName! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 12/7/2006 12:44'! rootClassName: anObject rootClassName := anObject! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 12/7/2006 12:44'! rootClassSystemCategory ^rootClassSystemCategory! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 12/7/2006 12:44'! rootClassSystemCategory: anObject rootClassSystemCategory := anObject! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 1/20/2007 10:05'! smalltalkInitializingExpressionOf: aMetaData ^ (PlatypusSmartNamer query: #smalltalkInitializingExpression namesBuilder: self) acceptTry: aMetaData ! ! !PlatypusNamesBuilder methodsFor: 'querying' stamp: 'apl 1/20/2007 10:06'! smalltalkTypeOf: aMetaData ^ (PlatypusSmartNamer query: #smalltalkType namesBuilder: self) acceptTry: aMetaData ! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 2/26/2005 17:04'! systemCategoryPrefix ^ systemCategoryPrefix ! ! !PlatypusNamesBuilder methodsFor: 'accessing' stamp: 'apl 2/26/2005 16:39'! systemCategoryPrefix: anObject systemCategoryPrefix := anObject! ! !PlatypusNamesBuilder methodsFor: 'utilities' stamp: 'apl 3/9/2005 18:33'! uncapitalize: aString ^ self class uncapitalize: aString! ! !PlatypusNamesBuilder methodsFor: 'naming' stamp: 'AlainPlantec 12/9/2013 21:40'! uniqueBlockVarName: aPrefix owner: aMetaData ^ aPrefix , aMetaData basicIdentityHash asString! ! !PlatypusNativeCodeInterpretor class methodsFor: 'private' stamp: 'AlainPlantec 12/6/2013 15:47'! methodFrom: textOrStream class: aClass requestor: aRequestor ifFail: failBlock | methodNode method compiler | compiler := self compilerClass new. compiler from: textOrStream class: aClass context: nil notifying: aRequestor. methodNode := compiler translate: textOrStream noPattern: true ifFail: [^ failBlock value]. method := methodNode generate. compiler interactive ifTrue: [method := method copyWithTempNames: methodNode tempNames]. ^ method! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'AlainPlantec 10/7/2010 15:58'! correctFrom: begin to: end with: correctWord | offset | offset := self notificationOffsetAt: begin. begin > source size ifTrue: [begin < offset ifTrue: [requestor correctFrom: offset + 3 to: end + (offset - begin) + 3 with: correctWord] ifFalse: [requestor correctFrom: begin to: end with: correctWord]] ifFalse: [requestor correctFrom: begin + offset + 1 to: end + offset + 1 with: correctWord]! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 12/18/2003 23:34'! deselect ^ requestor deselect! ! !PlatypusNativeCodeInterpretor methodsFor: 'interpreting' stamp: 'apl 2/10/2006 14:11'! evaluate: e interpretor: anInterpretor requestor: aRequestor | method | receiver := PlatypusExpressInterpretorWrapper interpreter: anInterpretor. (method := e cachedMethod) ifNil: [replacementPositions := OrderedCollection new. source := e code. self requestor: aRequestor. self preparse. method := self class methodFrom: preparsed class: receiver class requestor: aRequestor ifFail: [self halt]. e cachedMethod: method]. ^ self evaluateMethod: method! ! !PlatypusNativeCodeInterpretor methodsFor: 'interpreting' stamp: 'AlainPlantec 12/5/2013 09:57'! evaluateMethod: aMethod | selector | selector := #EvaluatePlatypusInterpreterNativeCode. receiver class addSelectorSilently: selector withMethod: aMethod. self class organization classify: selector under: #'platypus interpreting'. ^ receiver EvaluatePlatypusInterpreterNativeCode! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 3/18/2004 23:38'! notificationOffsetAt: location | offset | offset := (self text asString findString: source). replacementPositions do: [:triplet | location < triplet first ifTrue: [^ offset]. offset := offset - (triplet third - triplet second) + 3]. ^ offset! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'AlainPlantec 5/18/2012 13:29'! notify: error at: location in: stream | window | window := (StandardWindow labelled: error) model: self. window addMorph: requestor frame: (0 @ 0 corner: 1 @ 1). requestor notify: error at: location + (self notificationOffsetAt: location) in: stream. window openInWorld. PlatypusNativeCodeErrorException signal: 'error while evaluating ''' , stream contents , ''''! ! !PlatypusNativeCodeInterpretor methodsFor: 'private' stamp: 'AlainPlantec 4/26/2012 10:50'! preparse | ori beginReplPos vname replString | preparsed := ReadWriteStream on: String new. preparsed nextPut: $[. ori := ReadStream on: source. [ori atEnd] whileFalse: [preparsed nextPutAll: (ori upTo: $"). ori atEnd ifFalse: [ori peek == $$ ifTrue: [beginReplPos := ori position. ori next. vname := ori upTo: $". replString := '(self valueOf: ''' , vname trimBoth , ''') '. preparsed nextPutAll: replString. replacementPositions add: (Array with: beginReplPos with: vname size with: replString size)] ifFalse: [preparsed nextPut: $"]]]. preparsed nextPutAll: '] value'. preparsed reset. ^ preparsed! ! !PlatypusNativeCodeInterpretor methodsFor: 'accessing' stamp: 'apl 5/27/2004 10:29'! replacementPositions: aCollection replacementPositions := aCollection! ! !PlatypusNativeCodeInterpretor methodsFor: 'accessing' stamp: 'apl 4/6/2004 11:39'! requestor: aRequestor requestor := TamTextMorph on: self text: nil accept: nil readSelection: nil menu: nil. requestor setText: source. requestor changed: #contents! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 12/18/2003 23:34'! select ^ requestor select! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 12/18/2003 23:59'! selectFrom: begin to: end ^ requestor selectFrom: begin to: end ! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 12/18/2003 23:58'! selectInvisiblyFrom: begin to: end ^ requestor selectInvisiblyFrom: begin to: end ! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 3/19/2004 23:58'! selectionInterval ^ requestor selectionInterval! ! !PlatypusNativeCodeInterpretor methodsFor: 'accessing' stamp: 'apl 3/18/2004 21:46'! tempNames ^ #()! ! !PlatypusNativeCodeInterpretor methodsFor: 'requestor error notification' stamp: 'apl 3/19/2004 23:57'! text ^ requestor text! ! !PlatypusPharoSmalltalk class methodsFor: 'accessing' stamp: 'apl 4/14/2006 17:45'! at: aClassNameSymbol ^self at: aClassNameSymbol ifAbsent: []! ! !PlatypusPharoSmalltalk class methodsFor: 'accessing' stamp: 'apl 4/19/2006 10:43'! at: aClassNameSymbol ifAbsent: aBlock ^ Smalltalk at: aClassNameSymbol asSymbol ifAbsent: aBlock! ! !PlatypusSourceLine class methodsFor: 'accessing'! cutableTokens ^ Array with: (#( ';' ':=' '|' 'and' 'andor' 'or' 'xor' 'oneof' ',' '||') collect: [:e | e asSymbol]) with: (#('in' 'like' '<>' '=' '>=' '<=' '>' '<' ':=:' ':<>:' '+' '-' '*' '/' 'div' 'mod' ) collect: [:e | e asSymbol]) ! ! !PlatypusSourceLine class methodsFor: 'instance creation'! font: aFont maxWidth: aSize ^ self font: aFont maxWidth: aSize level: 0 ! ! !PlatypusSourceLine class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/7/2010 16:02'! font: aFont maxWidth: aSize level: anInteger | line | line := self new. line font: aFont. line maxWidth: aSize. line reachLevel: anInteger. ^ line! ! !PlatypusSourceLine class methodsFor: 'instance creation'! new ^super new initialize! ! !PlatypusSourceLine methodsFor: 'adding' stamp: 'apl 2/14/2006 19:03'! add: aToken tokens add: aToken copy. width := width + (aToken widthOfStringForFont: font)! ! !PlatypusSourceLine methodsFor: 'adding' stamp: 'apl 3/10/2006 15:22'! add: aToken level: anInteger | added | added := aToken copy. tokens isEmpty ifTrue: [self reachLevel: anInteger]. tokens add: added. width := width + (aToken widthOfStringForFont: font)! ! !PlatypusSourceLine methodsFor: 'adding'! addAll: aCollection aCollection do: [:e | self add: e] ! ! !PlatypusSourceLine methodsFor: 'copying'! copyEmpty ^self class font: font maxWidth: maxWidth! ! !PlatypusSourceLine methodsFor: 'formatting' stamp: 'AlainPlantec 10/7/2010 21:56'! cutFor: cutArray level: level | lines currLine nextLevel currLevel expressLine | nextLevel := currLevel := startLevel. lines := OrderedCollection new. currLine := OrderedCollection new. tokens do: [:token | (token isOpenKeyword or: [token isOpenDelim]) ifTrue: [nextLevel := nextLevel + 1] ifFalse: [(token isCloseKeyword or: [token isCloseDelim]) ifTrue: [nextLevel := nextLevel - 1]]. token isIndent ifFalse: [currLine add: token]. (cutArray identityIndexOf: token lexicalElement ifAbsent: []) notNil ifTrue: [currLevel <= level ifTrue: [expressLine := self copyEmpty. expressLine reachLevel: currLevel. expressLine addAll: currLine. lines add: expressLine. currLine := currLine copyEmpty. currLevel := nextLevel]]]. currLine isEmpty ifFalse: [expressLine := self copyEmpty. expressLine reachLevel: currLevel. expressLine addAll: currLine. lines add: expressLine]. ^ lines! ! !PlatypusSourceLine methodsFor: 'accessing'! cutableTokens ^self class cutableTokens! ! !PlatypusSourceLine methodsFor: 'printing' stamp: 'apl 2/14/2006 12:11'! dump: line on: aTokenList line do: [:token | aTokenList add: token]. aTokenList add: PlatypusEolToken new! ! !PlatypusSourceLine methodsFor: 'printing'! dumpOn: aTokenList self dumpOn: aTokenList cutables: self cutableTokens! ! !PlatypusSourceLine methodsFor: 'printing' stamp: 'apl 12/12/2003 11:30'! dumpOn: aTokenList cutables: anArray (maxWidth isNil or: [width < maxWidth or: [anArray size == 0]]) ifTrue: [self dump: tokens on: aTokenList] ifFalse: [anArray notEmpty ifTrue: [(self formatLine: anArray first) do: [:l | l dumpOn: aTokenList cutables: anArray allButFirst]]]! ! !PlatypusSourceLine methodsFor: 'accessing'! font ^font! ! !PlatypusSourceLine methodsFor: 'accessing'! font: anObject font := anObject! ! !PlatypusSourceLine methodsFor: 'formatting' stamp: 'AlainPlantec 10/7/2010 16:01'! formatLine: cutablesArray | maxlevel lines nextLines | lines := OrderedCollection with: self. maxlevel := self maxLevel. 0 to: maxlevel do: [:lvl | nextLines := OrderedCollection new. lines do: [:ln | nextLines addAll: (ln cutFor: cutablesArray level: lvl)]. lines := nextLines]. ^ lines! ! !PlatypusSourceLine methodsFor: 'initializing' stamp: 'apl 3/6/2004 10:42'! initialize super initialize. self reset! ! !PlatypusSourceLine methodsFor: 'testing'! isEmpty ^tokens isEmpty! ! !PlatypusSourceLine methodsFor: 'formatting' stamp: 'apl 2/14/2006 12:11'! levelIndent ^ (1 to: startLevel) collect: [:i | PlatypusIndentToken new]! ! !PlatypusSourceLine methodsFor: 'formatting' stamp: 'apl 3/10/2006 15:11'! levelIndentString | indent | indent := String new writeStream. self levelIndent do: [:i | indent nextPutAll: i lexicalElement asString]. ^ indent contents! ! !PlatypusSourceLine methodsFor: 'accessing'! maxLevel ^ startLevel + (tokens count: [:t | t isOpenKeyword or: [t isOpenDelim]])! ! !PlatypusSourceLine methodsFor: 'accessing'! maxWidth: anObject maxWidth := anObject! ! !PlatypusSourceLine methodsFor: 'initializing' stamp: 'AlainPlantec 10/7/2010 16:01'! reachLevel: level startLevel := level. (self levelIndent) do: [:i | self add: i]. ! ! !PlatypusSourceLine methodsFor: 'reset' stamp: 'AlainPlantec 10/7/2010 16:02'! reset tokens := OrderedCollection new. width := 0. startLevel := 0.! ! !PlatypusSourceLine methodsFor: 'accessing'! tokens ^tokens! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:31'! asArray | arr | arr := Array new: stackp. 1 to: stackp do: [:p | arr at: p put: (stack at: p)]. ^ arr! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:25'! at: pos ^ stack at: pos! ! !PlatypusStack methodsFor: 'enumerating' stamp: 'apl 2/20/2006 17:55'! collect: aBlock | newCollection | newCollection := OrderedCollection new: self size. self do: [:each | newCollection add: (aBlock value: each)]. ^ newCollection! ! !PlatypusStack methodsFor: 'enumerating' stamp: 'AlainPlantec 5/1/2012 22:24'! collectWithIndex: aBlock ^stack asOrderedCollection collectWithIndex: aBlock! ! !PlatypusStack methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:49'! destroy super destroy. stack := nil! ! !PlatypusStack methodsFor: 'enumerating' stamp: 'apl 6/18/2004 22:27'! do: aBlock 1 to: stackp do: [:p | aBlock value: (stack at: p)]! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:39'! first ^ stack first! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:20'! grow | newStack | newStack := Array new: stack size + self growSize. newStack replaceFrom: 1 to: stack size with: stack startingAt: 1. stack := newStack! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:17'! growSize "Return the size by which the receiver should grow if there are no empty slots left." ^ stack size max: 2! ! !PlatypusStack methodsFor: 'initialize/release' stamp: 'apl 2/23/2006 23:33'! initialize super initialize. stack := Array new: 100. stackp := 0! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 12/20/2005 10:46'! isEmpty ^ self size = 0! ! !PlatypusStack methodsFor: 'accessing' stamp: 'AlainPlantec 1/28/2011 05:55'! notEmpty ^ self isEmpty not! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:22'! pop | val | val := stack at: stackp. stackp := stackp - 1. ^ val! ! !PlatypusStack methodsFor: 'copying' stamp: 'apl 12/20/2005 12:50'! postCopy | cpy | cpy := super postCopy. cpy privateStack: stack copy. cpy privateStackp: stackp copy. ^ cpy! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 12/20/2005 12:49'! privateStack: aCollection stack := aCollection! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 12/20/2005 12:49'! privateStackp: anInteger stackp := anInteger! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 2/23/2006 23:40'! push: anObject stackp := stackp + 1. stackp > stack size ifTrue: [self grow]. stack at: stackp put: anObject! ! !PlatypusStack methodsFor: 'removing' stamp: 'apl 2/23/2006 15:42'! removeAt: index | removed | removed := stack at: index. stackp := stackp - 1. index to: stackp do: [:pos | stack at: pos put: (stack at: pos + 1)]. ^ removed! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:36'! reverseDo: aBlock stackp to: 1 by: -1 do: [:p | aBlock value: (stack at: p)]! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:31'! size ^ stackp! ! !PlatypusStack methodsFor: 'accessing' stamp: 'apl 6/18/2004 22:25'! top ^ stack at: stackp! ! !PlatypusExpressInterpretorContext methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 18:55'! applicationInstanceDo: aBlock | v | self dataDo: [:d | (v := d val) isPltGenericInstance ifTrue: [aBlock value: v]]! ! !PlatypusExpressInterpretorContext methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 18:55'! applicationInstancesDetect: aSelectionBlock | v | ^ self dataDetect: [:d | (v := d val) isPltGenericInstance and: [aSelectionBlock value: v]]! ! !PlatypusExpressInterpretorContext methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 19:29'! applicationInstancesSelect: aSelectionBlock in: selected | v | self dataSelect: [:d | d notNil and: [(v := d val) isPltGenericInstance and: [aSelectionBlock value: v]]] in: selected! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 12/15/2003 15:25'! data: aData ^ dataIndex at: aData ifAbsent: []! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 1/31/2006 14:24'! data: aData value: aValue ^ dataIndex at: aData put: aValue! ! !PlatypusExpressInterpretorContext methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 12:40'! dataDo: aBlock self dataIndex do: [:d | aBlock value: d val]! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 12/18/2003 10:20'! dataIndex ^ dataIndex ! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 12/18/2003 19:49'! dataNamed: anIdent | key | key := anIdent asUppercase. dataIndex keysAndValuesDo: [ :k :v | k name asUppercase = key ifTrue: [^ v]]. ^ nil! ! !PlatypusExpressInterpretorContext methodsFor: 'data enumerating' stamp: 'AlainPlantec 5/4/2012 12:39'! dataSelect: aSelectionBlock in: selected self dataIndex do: [:d | | v | v := d val. (aSelectionBlock value: v) ifTrue: [selected add: v]]! ! !PlatypusExpressInterpretorContext methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:48'! destroy dataIndex := nil. super destroy! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 12/18/2003 10:41'! includesData: aData ^ dataIndex includesKey: aData ! ! !PlatypusExpressInterpretorContext methodsFor: 'initialize/release' stamp: 'ap 6/22/2004 23:30'! initialize super initialize. dataIndex := IdentityDictionary new! ! !PlatypusExpressInterpretorContext methodsFor: 'initialize/release' stamp: 'apl 3/27/2006 07:54'! initializeContextInInterpretor: anInterpretor contextInstance initializeContextInInterpretor: anInterpretor! ! !PlatypusExpressInterpretorContext methodsFor: 'accessing' stamp: 'apl 3/8/2004 19:11'! stackElementOfDataNamed: anIdent | key | key := anIdent asUppercase. dataIndex keysAndValuesDo: [:k :v | k name asUppercase = key ifTrue: [^ k]]. ^ nil! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 09:55'! aggregateSource ^aggregateSource! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:50'! aggregateSource: anObject aggregateSource := anObject. sourceStream := ReadStream on: (aggregateSource val nativeCollection) asArray. resultStream := WriteStream on: (Array new: 100). current := PltMissingValue new! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'testing' stamp: 'apl 1/6/2004 10:55'! atEnd ^ self sourceStream atEnd! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:58'! current ^ current! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:45'! current: anObject current := anObject! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 2/23/2005 21:45'! dontKeep aggregateSource val isPltArrayInstance ifTrue: [self resultStream nextPut: PltMissingValue new]! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:46'! keep self resultStream nextPut: self current ! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:51'! next ^ current := self sourceStream next! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 3/3/2004 18:32'! result | result | result := self aggregateSource val copyEmpty. result setQueryBoundsFromSource: self aggregateSource val. result contents: self resultStream contents. ^ result! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:42'! resultStream ^resultStream! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:42'! resultStream: anObject resultStream := anObject! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:41'! sourceStream ^sourceStream! ! !PlatypusExpressInterpretorQueryContext methodsFor: 'accessing' stamp: 'apl 1/6/2004 10:41'! sourceStream: anObject sourceStream := anObject! ! !PlatypusExpressInterpretorRepeatContext methodsFor: 'accessing' stamp: 'apl 12/20/2003 23:49'! last ^last! ! !PlatypusExpressInterpretorRepeatContext methodsFor: 'accessing' stamp: 'apl 12/20/2003 23:49'! last: anObject last := anObject! ! !PlatypusExpressInterpretorRepeatContext methodsFor: 'accessing' stamp: 'apl 12/20/2003 23:48'! step ^step! ! !PlatypusExpressInterpretorRepeatContext methodsFor: 'accessing' stamp: 'apl 12/20/2003 23:48'! step: anObject step := anObject! ! !PlatypusStepVisitorContext class methodsFor: 'instance creation' stamp: 'apl 6/14/2004 18:44'! contextInstance: anPltDictionaryInstance ^ self new contextInstance: anPltDictionaryInstance ! ! !PlatypusStepVisitorContext methodsFor: 'accessing' stamp: 'apl 2/20/2006 18:15'! asString ^ contextInstance asString! ! !PlatypusStepVisitorContext methodsFor: 'accessing' stamp: 'apl 11/10/2003 12:31'! contextInstance ^ contextInstance! ! !PlatypusStepVisitorContext methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:03'! contextInstance: anObject contextInstance := anObject! ! !PlatypusStepVisitorContext methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:49'! destroy contextInstance := nil. super destroy! ! !PlatypusStepVisitorContext methodsFor: 'searching' stamp: 'apl 6/14/2004 18:52'! lookUpIdentifierBN: anIdent ^ self contextInstance lookUpIdentifierBN: anIdent! ! !PlatypusStepVisitorContext methodsFor: 'searching' stamp: 'apl 6/14/2004 18:52'! lookUpNamedTypeBN: anIdent ^ self contextInstance lookUpNamedTypeBN: anIdent! ! !PlatypusStepVisitorContext methodsFor: 'accessing' stamp: 'apl 2/20/2006 18:20'! printString | res | res := WriteStream on: (String new: 40). contextInstance inclusiveOwnerPath do: [:own | res nextPutAll: own name] separatedBy: [res nextPut:$.]. ^ res contents! ! !PlatypusExpressTokenClassifier methodsFor: 'accessing' stamp: 'apl 2/2/2006 14:59'! builtinFunctionsSymbols ^ #(#'value_in' #'value_unique' #even #odd #blength #hiindex #rolesof #sin #valueIn #lobound #nvl #format #hibound #cos #log10 #length #tan #usedin #typeof #log2 #abs #exp #asin #sqrt #acos #exists #sizeof #log #loindex #valueUnique #atan #value )! ! !PlatypusExpressTokenClassifier methodsFor: 'accessing' stamp: 'apl 5/20/2005 21:45'! builtinProceduresSymbols ^ #(#remove #insert )! ! !PlatypusExpressTokenClassifier methodsFor: 'initialize/release' stamp: 'AlainPlantec 1/28/2011 09:28'! initialize super initialize. #('[' '{' '(' '{*' ) do: [:value | tokensClassByTokenValueMap at: value put: PlatypusOpenDelimToken]. #(']' '}' ')' '*}' ) do: [:value | tokensClassByTokenValueMap at: value put: PlatypusCloseDelimToken]. #('.' ',' '\' ':' '|' '<*' '?' ) do: [:value | tokensClassByTokenValueMap at: value put: PlatypusDelimToken]. #('||' '=' '<>' ':=:' '-' '<' '<=' '/' '*' '>=' '**' ':<>' ) do: [:value | tokensClassByTokenValueMap at: value put: PlatypusOperatorToken]. #(#true #false #unknown ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusLogicalToken]. #('.F.' '.T.' '.U.' ) do: [:symbol | tokensClassByTokenValueMap at: symbol put: PlatypusLogicalToken]. #(#alias #begin #repeat #if #local #case #constant ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusOpenKeywordToken]. #(#rule #entity #type #function #procedure #schema #map) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusPrimaryElementOpenKeywordToken]. #(#'end_repeat' #'end_if' #'end_alias' #'end_case' #end #'end_constant' #'end_local' ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusCloseKeywordToken]. #(#'end_function' #'end_entity' #'end_schema' #'end_rule' #'end_type' #'end_procedure' #'end_map' ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusPrimaryElementCloseKeywordToken]. #(#where #inverse #unique #enumeration #else #then #derive #select ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusGroupKeywordToken]. #(#meta #reference #constE #use #skip #fixed #while #to #return #optional #pi #of #by #otherwise #escape #self #var #as #until #subtype #abstract #supertype #for #from #generic ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusKeywordToken]. #(#div #and #andor #xor #in #oneof #query #mod #not #or #like ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusOperatorToken]. #(#list #real #array #set #binary #number #aggregate #logical #string #bag #integer #boolean #generic ) do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusBuiltinDomainToken]. self builtinProceduresSymbols do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusBuiltinProcedureToken]. self builtinFunctionsSymbols do: [:symbol | tokensClassByTokenSymbolMap at: symbol put: PlatypusBuiltinFunctionToken]. tokensClassByTokenValueMap at: ';' asSymbol put: PlatypusSemicolonToken. tokensClassByTokenValueMap at: ':=' asSymbol put: PlatypusAssignToken. tokensClassByTokenValueMap at: '+' asSymbol put: PlatypusPlusToken. tokensClassByTokenValueMap at: $; put: PlatypusSemicolonToken. tokensClassByTokenValueMap at: ':=' put: PlatypusAssignToken. tokensClassByTokenValueMap at: $+ put: PlatypusPlusToken. tokensClassByTokenValueMap at: ';' put: PlatypusSemicolonToken. tokensClassByTokenValueMap at: '+' put: PlatypusPlusToken. tokensClassByTokenValueMap at: Character space put: PlatypusOneWhiteSpaceToken. tokensClassByTokenValueMap at: Character tab put: PlatypusIndentToken. tokensClassByTokenValueMap at: Character cr put: PlatypusEolToken. tokensClassByTokenValueMap at: Character lf put: nil. self classifyString: PlatypusNumberToken block: [:v | v size > 1 and: [(v first = $- or: [v first = $+]) and: [v allSatisfy: [:c | c isDigit or: [#($. $e $- $+ ) includes: c]]]]]. self classifyString: PlatypusLogicalToken block: [:v | v size > 2 and: [v first = $. and: [v last = $.]]]. self classifyString: PlatypusNumberToken block: [:v | v notEmpty and: [v first isDigit]]. self classifyString: PlatypusStringToken block: [:v | v notEmpty and: [v first == $']]. self classifyString: PlatypusStringToken block: [:v | v notEmpty and: [v first == $"]]. self classifyString: PlatypusStringToken block: [:v | v notEmpty and: [v first == $%]]! ! !PlatypusTokenClassifier methodsFor: 'adding' stamp: 'apl 3/7/2003 18:50'! classifyCharacter: aClass block: aBlock characterEvaluatedConditionsList add: (Association key: aBlock value: aClass)! ! !PlatypusTokenClassifier methodsFor: 'adding' stamp: 'apl 3/7/2003 18:54'! classifyString: aClass block: aBlock stringEvaluatedConditionsList add: (Association key: aBlock value: aClass)! ! !PlatypusTokenClassifier methodsFor: 'initialize-release' stamp: 'apl 5/20/2005 22:08'! initialize super initialize. stringEvaluatedConditionsList := OrderedCollection new. characterEvaluatedConditionsList := OrderedCollection new. tokensClassByTokenValueMap := Dictionary new. tokensClassByTokenSymbolMap := IdentityDictionary new. ! ! !PlatypusTokenClassifier methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:03'! tokenClassFromCharacter: aValue ifAbsent: aBlock | foundConditionAssoc | foundConditionAssoc := characterEvaluatedConditionsList detect: [:assoc | assoc key value: aValue] ifNone: []. foundConditionAssoc notNil ifTrue: [^ foundConditionAssoc value]. ^ tokensClassByTokenValueMap at: aValue ifAbsent: [aBlock value]! ! !PlatypusTokenClassifier methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:03'! tokenClassFromString: aValue ifAbsent: aBlock | foundConditionAssoc | foundConditionAssoc := stringEvaluatedConditionsList detect: [:assoc | assoc key value: aValue] ifNone: []. foundConditionAssoc notNil ifTrue: [^ foundConditionAssoc value]. ^ tokensClassByTokenSymbolMap at: aValue asLowercase asSymbol ifAbsent: [tokensClassByTokenValueMap at: aValue ifAbsent: [aBlock value]]! ! !PlatypusTokenList class methodsFor: 'instance creation'! tokens: aDLinkedList ^ self new tokens: aDLinkedList! ! !PlatypusTokenList methodsFor: 'adding' stamp: 'apl 2/14/2006 15:31'! add: aToken tokens add: aToken! ! !PlatypusTokenList methodsFor: 'adding' stamp: 'apl 2/14/2006 15:24'! addAll: anotherTokenList ^ tokens addAll: anotherTokenList tokens! ! !PlatypusTokenList methodsFor: 'adding' stamp: 'apl 2/14/2006 15:29'! addAll: anotherList before: oldObject ^ tokens addAll: anotherList beforeIndex: (tokens indexOf: oldObject)! ! !PlatypusTokenList methodsFor: 'adding' stamp: 'apl 3/22/2006 19:48'! addFirst: aToken tokens addFirst: aToken! ! !PlatypusTokenList methodsFor: 'converting' stamp: 'apl 3/19/2003 11:57'! asArray ^ self tokens asArray! ! !PlatypusTokenList methodsFor: 'accessing'! at: pos ^ tokens at: pos! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/3/2006 16:03'! beginningOfLineFrom: aNode | currNode whiteSpaceTouched | aNode isNil ifTrue: [^ self first]. currNode := aNode. whiteSpaceTouched := false. [currNode notNil] whileTrue: [currNode isEol ifTrue: [^ currNode next ifNil: [currNode]]. currNode isSemicolon ifTrue: [^ currNode next]. (currNode isBlank and: [currNode isRemark not]) ifTrue: [whiteSpaceTouched := true] ifFalse: [whiteSpaceTouched ifTrue: [currNode isBlank ifFalse: [^ currNode next]]]. currNode := currNode previous]. ^ aNode! ! !PlatypusTokenList methodsFor: 'updating' stamp: 'apl 2/17/2006 12:33'! calculate ^ self! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:05'! closeTokenFrom: aNode | currLevel curr | currLevel := 0. curr := aNode. curr notNil ifTrue: [[curr isOpenKeyword ifTrue: [currLevel := currLevel + 1] ifFalse: [curr isCloseKeyword ifTrue: [currLevel := currLevel - 1]]. currLevel == 0 ifTrue: [^ curr]. curr := curr next. curr isNil ifTrue: [^ curr]] repeat]. ^ nil! ! !PlatypusTokenList methodsFor: 'enumerating' stamp: 'apl 2/16/2006 11:30'! collect: aBlock ^ self class tokens: (tokens collect: aBlock)! ! !PlatypusTokenList methodsFor: 'copying' stamp: 'apl 2/17/2006 10:00'! copy ^ Error signal: 'a ' , self class name , ' can''t be copied'! ! !PlatypusTokenList methodsFor: 'copying'! copyEmpty ^ self class new ! ! !PlatypusTokenList methodsFor: 'copying' stamp: 'apl 2/14/2006 16:26'! copyWithoutBlankFrom: startNode to: stopNode | selection node | selection := self copyEmpty. node := startNode isNil ifTrue: [self first] ifFalse: [startNode]. [node isNil ifTrue: [^ selection]. node == stopNode ifTrue: [selection add: node copy. ^ selection]. node isBlank ifFalse: [selection add: node copy]. node := node next] repeat! ! !PlatypusTokenList methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:49'! destroy self tokens destroy. super destroy! ! !PlatypusTokenList methodsFor: 'enumerating' stamp: 'apl 2/15/2006 10:58'! detect: aBlock ^ tokens detect: aBlock ifNone: []! ! !PlatypusTokenList methodsFor: 'enumerating' stamp: 'apl 2/15/2006 10:57'! detect: aBlock ifNone: noneBlock ^ tokens detect: aBlock ifNone: noneBlock! ! !PlatypusTokenList methodsFor: 'enumerating'! do: aBlock ^ tokens do: aBlock! ! !PlatypusTokenList methodsFor: 'enumerating' stamp: 'apl 3/3/2006 16:33'! do: aBlock from: startNode to: stopNode | currNode endNode | currNode := startNode. endNode := stopNode. [currNode ~~ endNode and: [currNode notNil]] whileTrue: [aBlock value: currNode. currNode := currNode ifNotNil: [currNode next]]. endNode notNil ifTrue: [aBlock value: endNode]! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/3/2006 16:13'! endOfLineFrom: aNode | currNode whiteSpaceTouched prev | aNode isNil ifTrue: [^ self last]. currNode := aNode. whiteSpaceTouched := false. [currNode notNil] whileTrue: [currNode isEol ifTrue: [^ currNode previous ifNil: [currNode]]. currNode isSemicolon ifTrue: [^ currNode ]. (currNode isBlank and: [currNode isRemark not]) ifTrue: [whiteSpaceTouched := true] ifFalse: [whiteSpaceTouched ifTrue: [currNode isBlank ifFalse: [^ currNode previous]]]. prev := currNode. currNode := currNode next]. ^ prev! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/15/2006 15:53'! first ^ tokens isEmpty ifTrue: [nil] ifFalse: [tokens first]! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:14'! indexOf: aNode ^ tokens indexOf: aNode! ! !PlatypusTokenList methodsFor: 'initialize/release' stamp: 'apl 4/6/2004 11:47'! initialize super initialize. tokens := PltDLinkedList new! ! !PlatypusTokenList methodsFor: 'testing'! isEmpty ^tokens isEmpty! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/15/2006 15:54'! last ^ tokens isEmpty ifFalse: [tokens last]! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/25/2006 10:51'! nextFrom: aNode satisfying: aBlock | currNode | currNode := aNode. [currNode notNil] whileTrue: [(aBlock value: currNode) ifTrue: [^ currNode]. currNode := currNode next]. ^ nil! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:41'! nextNonBlankFrom: aNode ^ self nextFrom: aNode satisfying: [:n | (n isBlank or: [n isRemark]) not] ! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/14/2006 22:38'! nextOpenKeywordFrom: aNode | currNode | currNode := aNode. [currNode notNil] whileTrue: [currNode isOpenKeyword ifTrue: [^ currNode]. currNode := currNode next]. ^ nil! ! !PlatypusTokenList methodsFor: 'updating' stamp: 'apl 3/1/2006 18:05'! noEndingEol [self last notNil and: [self last isEol]] whileTrue: [self removeLast]. ! ! !PlatypusTokenList methodsFor: 'testing'! notEmpty ^ self isEmpty not! ! !PlatypusTokenList methodsFor: 'updating' stamp: 'apl 3/1/2006 18:05'! onlyOneEndingEol self noEndingEol . self last ifNotNil: [self add: PlatypusEolToken new]! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:39'! previousCloseKeywordFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isCloseKeyword] ! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 2/25/2006 10:51'! previousFrom: aNode satisfying: aBlock | currNode | currNode := aNode. [currNode notNil] whileTrue: [(aBlock value: currNode) ifTrue: [^ currNode]. currNode := currNode previous]. ^ nil! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:37'! previousKeywordFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isKeyword] ! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:39'! previousNonBlankFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isBlank not] ! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:38'! previousOpenKeywordFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isOpenKeyword] ! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:42'! previousPrimaryElementCloseKeywordFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isPrimaryElementCloseKeyword]! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:38'! previousPrimaryElementOpenKeywordFrom: aNode ^ self previousFrom: aNode satisfying: [:n | n isPrimaryElementOpenKeyword] ! ! !PlatypusTokenList methodsFor: 'removing' stamp: 'apl 2/14/2006 18:06'! removeFrom: firstNode to: lastNode ^ tokens replaceFromNode: firstNode toNode: lastNode with: self copyEmpty! ! !PlatypusTokenList methodsFor: 'removing' stamp: 'apl 3/1/2006 17:58'! removeLast ^ tokens removeLast ! ! !PlatypusTokenList methodsFor: 'removing' stamp: 'apl 3/1/2006 15:46'! replaceFromNode: startNode toNode: stopNode with: replacementList startNode ifNil: [self addAll: replacementList] ifNotNil: [ tokens replaceFromNode: startNode toNode: stopNode with: replacementList]! ! !PlatypusTokenList methodsFor: 'enumerating'! reverseDo: aBlock ^ tokens reverseDo: aBlock! ! !PlatypusTokenList methodsFor: 'enumerating' stamp: 'apl 2/16/2006 11:29'! select: aBlock ^ self class tokens: (tokens select: aBlock)! ! !PlatypusTokenList methodsFor: 'accessing'! size ^ tokens size! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'apl 3/9/2006 13:39'! sizeFrom: first to: last | currNode count | currNode := first. count := 0. [currNode ~= last and: [currNode notNil]] whileTrue: [count := count + 1. currNode := currNode next]. ^ count! ! !PlatypusTokenList methodsFor: 'printing' stamp: 'apl 3/30/2006 13:51'! textWithStreamClass: aStreamClass ^ self textWithStreamClass: aStreamClass from: self first to: nil! ! !PlatypusTokenList methodsFor: 'printing' stamp: 'AlainPlantec 1/11/2010 17:26'! textWithStreamClass: aStreamClass from: startNode to: stopNode | stream result | stream := aStreamClass on: Text new. result := PlatypusCodeStream on: Text new. self do: [:d | stream nextPutAll: d asString. result nextPutAll: stream originalContents endingAt: stream position. stream reset] from: startNode to: stopNode. stream close. result close. ^ result contents! ! !PlatypusTokenList methodsFor: 'accessing'! tokens ^tokens! ! !PlatypusTokenList methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:03'! tokens: aCollection tokens := aCollection. ! ! !PlatypusTokenList methodsFor: 'updating' stamp: 'apl 2/17/2006 12:38'! updateAllTokensPositions | startPos | startPos := 1. self do: [:tok | startPos := tok stopPosWithStart: startPos] ! ! !PlatypusTokenList methodsFor: 'printing' stamp: 'apl 3/15/2003 10:22'! writeOn: aStream ^self writeOn: aStream from: self first to: nil ! ! !PlatypusTokenList methodsFor: 'printing' stamp: 'AlainPlantec 1/11/2010 17:19'! writeOn: aStream from: startNode to: stopNode self do: [:d | aStream nextPutAll: d asString] from: startNode to: stopNode. ^ aStream contents! ! !PlatypusStepTokenPrettyPrinter class methodsFor: 'public pretty printing' stamp: 'apl 3/12/2007 11:28'! prettyPrint: aSource ^ self prettyPrint: aSource startLevel: 0 ! ! !PlatypusStepTokenPrettyPrinter class methodsFor: 'public pretty printing' stamp: 'apl 3/12/2007 11:26'! prettyPrint: aSource startLevel: anIndentLevel | srcTokenList ppTokenList code | srcTokenList := (PlatypusExpressScanner on: aSource readStream) buildTokenList. ppTokenList := PlatypusStepTokenPrettyPrinter new prettyPrint: srcTokenList from: srcTokenList first to: srcTokenList last startLevel: anIndentLevel font: nil maxLineWidth: 80. code := ppTokenList textWithStreamClass: ReadWriteStream. ^ code! ! !PlatypusStepTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2006 16:23'! acceptEmbeddedRemark: n | printEolBefore | printEolBefore := true. currentNode previous notNil ifTrue: [currentNode previous isEmbeddedRemark ifTrue: [printEolBefore := false]]. (currentLevel > 1 or: [(startNode is: #schema) not]) ifTrue: [printEolBefore := false]. printEolBefore ifTrue: [self printEol]. currentLine add: n level: currentLevel. currentLineno := currentLineno + (n asString count: [:c | c == Character cr]). self printEol! ! !PlatypusStepTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2006 16:23'! acceptGroupKeyword: n currentLevel := currentLevel - 1. self acceptToken: n. currentLevel := currentLevel + 1. (n is: #unique) ifTrue: [currentNode previous isSemicolon ifTrue: [self printEol] ifFalse: [self printWhiteSpace]] ifFalse: [self printEol]! ! !PlatypusStepTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 4/18/2006 13:54'! acceptNativeCode: n | printEolBefore | printEolBefore := true. (currentLevel > 1 or: [(startNode is: #schema) not]) ifTrue: [printEolBefore := false]. printEolBefore ifTrue: [self printEol]. currentLine add: n level: currentLevel. currentLineno := currentLineno + (n asString count: [:c | c == Character cr]). (n next is: ';' asSymbol) ifFalse: [self printEol]! ! !PlatypusStepTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 3/13/2006 15:41'! acceptOpenKeyword: n | printeol | printeol := true. currentLevel > 2 ifTrue: [printeol := false] ifFalse: [currentNode previous isNil ifTrue: [printeol := false] ifFalse: [currentNode previous isEmbeddedRemark ifTrue: [printeol := false] ifFalse: [(n is: #local) ifTrue: [printeol := false]]]]. printeol ifTrue: [self printEol]. self acceptToken: n. self printWhiteSpace. (n is: #(#begin #local #constant )) ifTrue: [self printEol]. currentLevel := currentLevel + 1! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptAssign: n self acceptOperator: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptBuiltinFunction: n self acceptKeyword: n. ! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptBuiltinProcedure: n self acceptKeyword: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'AlainPlantec 10/7/2010 16:03'! acceptCloseDelim: n currentLevel := currentLevel - 1. delimLevel := delimLevel - 1. self acceptToken: n. (n is: #'*}') ifTrue: [self printEol] ifFalse: [ self printWhiteSpace]! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'AlainPlantec 10/7/2010 16:03'! acceptCloseKeyword: n currentLevel := currentLevel - 1. self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptDelim: n self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptDomain: n self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'AlainPlantec 10/7/2010 16:04'! acceptEol: n currentLine dumpOn: resultTokenList. eolPrinted := eolPrinted + 1. currentLineno := currentLineno + 1. currentLine reset! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 4/18/2006 13:54'! acceptIdentifier: n | printit nextNode prevNonBlank prevOpen | prevNonBlank := sourceTokenList previousNonBlankFrom: currentNode previous. (prevNonBlank notNil and: [prevNonBlank is: #of]) ifTrue: [prevOpen := sourceTokenList previousOpenKeywordFrom: prevNonBlank. (prevOpen notNil and: [prevOpen is: #case]) ifTrue: [self printEol]]. self acceptToken: n. printit := true. (nextNode := currentNode next) notNil ifTrue: [(nextNode is: ']' asSymbol) ifTrue: [printit := false]]. printit ifTrue: [self printWhiteSpace]! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptIndent: n currentLine add: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 3/13/2006 17:54'! acceptKeyword: n | prevKeyword | (n is: #(#subtype #abstract #realization)) ifTrue: [self printEol] ifFalse: [(n is: #supertype) ifTrue: [prevKeyword := sourceTokenList previousKeywordFrom: currentNode previous. (prevKeyword is: #abstract) ifFalse: [self printEol]]]. self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2006 22:43'! acceptLiteral: n | prevNonBlank prevOpen | (prevNonBlank := sourceTokenList previousNonBlankFrom: currentNode previous) ifNotNil: [(prevNonBlank is: #of) ifTrue: [prevOpen := sourceTokenList previousOpenKeywordFrom: prevNonBlank. (prevOpen is: #case) ifTrue: [self printEol]]]. self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:44'! acceptLogical: n self acceptLiteral: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:44'! acceptNumber: n self acceptLiteral: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'AlainPlantec 10/7/2010 16:04'! acceptOpenDelim: n self acceptToken: n. self printWhiteSpace. currentLevel := currentLevel + 1. delimLevel := delimLevel + 1! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptOperator: n self acceptToken: n. self printWhiteSpace! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2006 16:28'! acceptPlus: n (currentNode previous notNil and: [currentNode previous isString]) ifTrue: [(currentNode previous lexicalElement endsWith: '\n''') ifTrue: [self printEol]. (currentNode previous lexicalElement endsWith: '\n\n''') ifTrue: [self printEol]]. self acceptOperator: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptRemark: n self acceptToken: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptSemicolon: n self acceptToken: n. delimLevel == 0 ifTrue: [self printEol] ifFalse: [self printWhiteSpace]! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:44'! acceptString: n self acceptLiteral: n. ! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting' stamp: 'apl 2/14/2006 16:28'! acceptTailRemark: n | printspace | printspace := true. ((currentNode previous notNil and: [currentNode previous isRemark]) or: [currentNode next notNil and: [currentNode next isRemark]]) ifTrue: [self printEol. printspace := false]. printspace ifTrue: [self printWhiteSpace]. self acceptToken: n. (currentNode next notNil and: [currentNode next isTailRemark]) ifFalse: [self printEol]! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptToken: n currentLine add: n level: currentLevel! ! !PlatypusTokenPrettyPrinter methodsFor: 'visiting'! acceptWhiteSpace: n currentLine add: n! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'AlainPlantec 10/7/2010 16:04'! prettyPrint | node | node := startNode. [node isNil ifFalse: [self prettyPrintNode: node]. (node isNil or: [node == stopNode]) ifTrue: [currentLine isEmpty ifFalse: [currentLine dumpOn: resultTokenList. resultTokenList tokens removeLast]. ^ resultTokenList]. node := node next] repeat! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'apl 12/12/2003 11:38'! prettyPrint: aTokenList ^ self prettyPrint: aTokenList font: nil maxLineWidth: nil! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing'! prettyPrint: aTokenList font: aFont maxLineWidth: aSize ^ self prettyPrint: aTokenList from: aTokenList first to: aTokenList last font: aFont maxLineWidth: aSize! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing'! prettyPrint: aTokenList from: aStartNode to: aStopNode font: aFont maxLineWidth: aSize ^ self prettyPrint: aTokenList from: aStartNode to: aStopNode startLevel: 0 font: aFont maxLineWidth: aSize ! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'apl 5/20/2005 18:46'! prettyPrint: aTokenList from: aStartNode to: aStopNode startLevel: anInteger font: aFont maxLineWidth: aSize sourceTokenList := aTokenList isNil ifTrue: [PlatypusTokenList new] ifFalse: [aTokenList copyWithoutBlankFrom: aStartNode to: aStopNode]. resultTokenList := sourceTokenList copyEmpty. startNode := sourceTokenList first. stopNode := sourceTokenList last. textFont := aFont. maxLineWidth := aSize. currentLevel := anInteger. delimLevel := 0. currentLineno := 1. eolPrinted := 0. currentLine := PlatypusSourceLine font: aFont maxWidth: aSize level: currentLevel. ^self prettyPrint! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'apl 2/14/2006 16:28'! prettyPrintNode: aTokenListNode currentNode := aTokenListNode. aTokenListNode accept: self! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'apl 2/14/2006 16:28'! printEol | printit | printit := true. currentNode next notNil ifTrue: [(currentNode next isTailRemark and: [currentNode isTailRemark not]) ifTrue: [printit := false]]. printit ifTrue: [PlatypusEolToken new accept: self]! ! !PlatypusTokenPrettyPrinter methodsFor: 'pretty printing' stamp: 'apl 4/18/2006 13:20'! printWhiteSpace | printit nextNode | printit := true. (nextNode := currentNode next) ifNil: [printit := false] ifNotNil: [(nextNode is: (#(';' ',' '.' '\' ) collect: [:e | e asSymbol]) ) ifTrue: [printit := false]]. (currentNode is: (#('.' '\' ) collect: [:e | e asSymbol])) ifTrue: [printit := false]. printit ifTrue: [PlatypusOneWhiteSpaceToken new accept: self]! ! !PlatypusStepCheckerError class methodsFor: 'instance creation' stamp: 'AlainPlantec 6/14/2012 00:41'! error: aMessage oid: anInteger folder: aStepFolder | instance err | instance := aStepFolder instanceAt: anInteger. err := self metaData: instance message: aMessage. err stepFolder: aStepFolder. ^ err! ! !PlatypusStepCheckerError class methodsFor: 'instance creation' stamp: 'AlainPlantec 6/14/2012 00:40'! error: aMessage oid: anInteger repository: aPlatypusRepository ^ self error: aMessage oid: anInteger folder: aPlatypusRepository! ! !PlatypusStepCheckerError methodsFor: 'accessing' stamp: 'apl 2/25/2005 19:30'! stepFolder ^stepFolder! ! !PlatypusStepCheckerError methodsFor: 'accessing' stamp: 'apl 2/25/2005 19:30'! stepFolder: anObject stepFolder := anObject! ! !PlatypusVisitorError class methodsFor: 'instance creation' stamp: 'AlainPlantec 6/14/2012 00:42'! metaData: anEntityInstance message: aMessage ^ self new message: aMessage; metaData: anEntityInstance ! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 01:49'! asString | s named p | s := WriteStream on: ''. p := self path. p isEmptyOrNil ifFalse: [ named := p allButLast select: [:elem | elem isPltContextDefinition or: [elem isPltNamedType]]. named do: [:elem | s nextPutAll: elem name] separatedBy: [s nextPutAll: '\']]. s nextPutAll: ': '. s nextPutAll: (self metaData ifNil: ['?'] ifNotNil: [:md | md errorQualifier contractTo: 90]); nextPutAll: ': '. s nextPutAll: message. ^ s contents! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'apl 2/17/2006 18:37'! message ^message! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'apl 2/17/2006 18:37'! message: anObject message := anObject! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 00:28'! metaData ^ metaData! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 00:27'! metaData: anEntityInstance metaData := anEntityInstance! ! !PlatypusVisitorError methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 01:49'! path ^ metaData ifNotNil: [ metaData inclusiveOwnerPath ]! ! !PltDLinkedList commentStamp: 'apl 3/2/2005 19:03' prior: 106063364! Un exemple de commentaire! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example1 | dlist | dlist := self new. #(1 2 4 6 8) do: [:e | dlist add: (PltDNode data: e)]. dlist explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example10 | col | #(#PltDLinkedList #OrderedCollection) do: [:classSymb | col := (Smalltalk at: classSymb) new. (Association key: classSymb , ' 100000 add time' value: (Time millisecondsToRun: [1 to: 100000 do: [:e | col add: (PltDNode data: e)]])) explore]. #(#PltDLinkedList #OrderedCollection) do: [:classSymb | col := (Smalltalk at: classSymb) new. 1 to: 100000 do: [:e | col add: (PltDNode data: e)]. (Association key: classSymb , ' 100000 remove first time' value: (Time millisecondsToRun: [[col isEmpty] whileFalse: [col removeFirst]])) explore]! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example11 | col rnd | col := self new. rnd := Random new. 1 to: 10000 do: [:i | col add: (PltDNode data: (rnd nextInt: 1000))]. (col asSortedCollection: [:a :b | a data < b data]) explore. col explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example12 | col rnd | col := self new. rnd := Random new. 1 to: 10000 do: [:i | col add: (PltDNode data: (rnd nextInt: 1000))]. col explore. (col sortBy: [:a :b | a data < b data]) explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 2/14/2006 15:48'! example13 | col1 col2 | col1 := self new. col2 := self new. 1 to: 3 do: [:i | col1 add: (PltDNode data: i). col2 add: (PltDNode data: i * 10)]. ^ col1 , col2! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example14 | col1 col2 | col1 := self new. col2 := self new. 1 to: 10 do: [:i | col1 add: (PltDNode data: i). col2 add: (PltDNode data: i * 1000)]. ^col1 replaceFrom: 4 to: 5 with: col2 startingAt: 2! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example15 | col1 | col1 := self new. 1 to: 10 do: [:i | col1 add: (PltDNode data: i)]. ^col1 copyFrom: 3 to: 6! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example2 | dlist | dlist := self new. dlist addFirst: (PltDNode data: 'first1'); addLast: (PltDNode data: 'last1'); addFirst: (PltDNode data: 'first2'); addLast: (PltDNode data: 'last2'). dlist explore. dlist asArray explore. 1 to: dlist size do: [:pos | (Association key: pos value: (dlist at: pos)) explore]! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example3 | dlist | dlist := self new. #(1 2 3 4 5) do: [:e | dlist add: (PltDNode data: e)]. 1 to: dlist size do: [:pos | (Association key: pos value: (dlist at: pos)) explore]! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example4 | dlist | dlist := self new. #(1 2 3 4 5) do: [:e | dlist add: (PltDNode data: e)]. 1 to: dlist size do: [:pos | dlist at: pos put: (PltDNode data: (dlist at: pos) data * 10)]. dlist explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example5 1 to: 4 do: [:n | | dlist | dlist := self new. 1 to: n do: [:e | dlist add: (PltDNode data: e)]. 1 to: dlist size * 2 by: 2 do: [:pos | dlist add: (PltDNode data: (dlist at: pos) data * 10) afterIndex: pos]. (Association key: n value: dlist) explore]! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example6 | dlist | dlist := self new. #(1 2 3 4 5) do: [:e | dlist add: (PltDNode data: e)]. (dlist collect: [:e | e data * 10]) explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example7 | dlist | dlist := self new. #(1 2 3 4 5) do: [:e | dlist add: (PltDNode data: e)]. (dlist select: [:e | e data \\ 2 > 0]) explore! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 2/14/2006 15:59'! example8 | dlist | dlist := self new. #(1 2 3 4 5 ) do: [:e | dlist add: (PltDNode data: e)]. [dlist isEmpty] whileFalse: [dlist removeFirst]. dlist inspect. dlist := self new. #(1 2 3 4 5 ) do: [:e | dlist add: (PltDNode data: e)]. [dlist isEmpty] whileFalse: [dlist removeLast]. dlist inspect. dlist := self new. #(1 2 3 4 5 ) do: [:e | dlist add: (PltDNode data: e)]. [dlist size == 1] whileFalse: [dlist removeLast]. dlist inspect. dlist := self new. dlist inspect! ! !PltDLinkedList class methodsFor: 'examples' stamp: 'apl 4/6/2004 11:47'! example9 | dlist dlist2 | dlist := self new. dlist2 := dlist copyEmpty. #(1 2 3 4 5) do: [:e | dlist add: (PltDNode data: e)]. dlist reverseDo: [:e | dlist2 add: (PltDNode data: e data)]. dlist explore. dlist2 explore! ! !PltDLinkedList class methodsFor: 'instance creation' stamp: 'apl 2/11/2004 14:40'! new: aSize ^ self new ! ! !PltDLinkedList class methodsFor: 'instance creation' stamp: 'apl 2/14/2006 18:02'! nodesList: anOrderedCollectionOfNodes ^ self new nodesList: anOrderedCollectionOfNodes ! ! !PltDLinkedList methodsFor: 'adding'! add: data ^self addLast: data. ! ! !PltDLinkedList methodsFor: 'adding' stamp: 'apl 3/29/2006 22:13'! addAll: anotherList | oldLast otherFirst | oldLast := self last. otherFirst := anotherList first. nodesList addAll: anotherList. otherFirst ifNotNil: [otherFirst previous: oldLast]. oldLast ifNotNil: [oldLast next: otherFirst]! ! !PltDLinkedList methodsFor: 'adding' stamp: 'apl 3/31/2006 22:09'! addAll: anotherList beforeIndex: index | oldAtIndex | (index > self size or: [self isEmpty]) ifTrue: [self addAll: anotherList] ifFalse: [index <= 1 ifTrue: [self addAllFirst: anotherList] ifFalse: [oldAtIndex := self at: index. anotherList last next: oldAtIndex. oldAtIndex previous ifNotNil: [oldAtIndex previous next: anotherList first]. anotherList first previous: oldAtIndex previous. oldAtIndex previous: anotherList last. anotherList reverseDo: [:n | nodesList add: n beforeIndex: index]]]! ! !PltDLinkedList methodsFor: 'adding' stamp: 'apl 3/29/2006 22:44'! addAllFirst: anotherList | oldFirst otherLast | oldFirst := self first. otherLast := anotherList last. nodesList addAllFirst: anotherList. otherLast ifNotNil: [otherLast next: oldFirst]. oldFirst ifNotNil: [oldFirst previous: otherLast]! ! !PltDLinkedList methodsFor: 'adding' stamp: 'apl 2/14/2006 15:09'! addFirst: data | oldSize next | oldSize := self size. nodesList addFirst: data. oldSize > 0 ifTrue: [ data next: (next := nodesList at: 2). next previous: data. data previous: nil] ifFalse: [ data next: nil. data previous: nil ] ! ! !PltDLinkedList methodsFor: 'adding' stamp: 'apl 2/14/2006 15:12'! addLast: data | oldSize prev | oldSize := self size. nodesList addLast: data. oldSize > 0 ifTrue: [data previous: (prev := nodesList at: oldSize). prev next: data. data next: nil] ifFalse: [data next: nil. data previous: nil]! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 2/14/2006 14:59'! at: pos ^ nodesList at: pos! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 2/14/2006 15:05'! at: pos put: data | added prev next | nodesList at: pos put: data. added := nodesList at: pos. pos > 1 ifTrue: [added previous: (prev := nodesList at: pos - 1). prev next: added] ifFalse: [added previous: nil]. pos < self size ifTrue: [added next: (next := nodesList at: pos + 1). next previous: added] ifFalse: [added next: nil]! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/16/2006 11:31'! collect: aBlock | newCollection | newCollection := self species new. self do: [:each | newCollection add: (aBlock value: each copy)]. ^ newCollection! ! !PltDLinkedList methodsFor: 'copying' stamp: 'apl 2/17/2006 10:00'! copy ^ Error signal: 'a ' , self class name , ' can''t be copied'! ! !PltDLinkedList methodsFor: 'copying'! copyEmpty "Answer a copy of the receiver without any of the receiver's elements. " ^ self class new! ! !PltDLinkedList methodsFor: 'copying' stamp: 'apl 3/21/2006 19:36'! copyReplaceFrom: start to: stop with: replacementList | newLinkedList | newLinkedList := nodesList collect: [:n | n copy]. newLinkedList replaceFrom: start to: stop with: replacementList. ^ newLinkedList! ! !PltDLinkedList methodsFor: 'initialize/release' stamp: 'apl 2/14/2006 12:17'! destroy self do: [:node | node destroy]. super destroy! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/14/2006 14:59'! detect: aBlock ^ nodesList detect: aBlock ifNone: []! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/15/2006 10:58'! detect: aBlock ifNone: noneBlock ^ nodesList detect: aBlock ifNone: noneBlock! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/14/2006 14:59'! do: aBlock nodesList do: aBlock! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'AlainPlantec 1/11/2010 17:17'! first ^ nodesList ifEmpty: [nil] ifNotEmpty: [:l | l first]! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 2/14/2006 15:02'! head ^ nodesList first! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 4/18/2006 14:26'! indexOf: aNode ^ nodesList indexOf: aNode! ! !PltDLinkedList methodsFor: 'initialize/release' stamp: 'apl 2/14/2006 12:19'! initialize super initialize. nodesList := OrderedCollection new! ! !PltDLinkedList methodsFor: 'testing' stamp: 'apl 2/14/2006 12:19'! isEmpty ^ nodesList isEmpty! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'AlainPlantec 1/11/2010 17:18'! last ^ nodesList ifEmpty: [nil] ifNotEmpty: [:l | l last]! ! !PltDLinkedList methodsFor: 'private accessing' stamp: 'apl 2/14/2006 18:02'! nodesList: anOrderedCollectionOfNodes nodesList := anOrderedCollectionOfNodes! ! !PltDLinkedList methodsFor: 'removing' stamp: 'apl 2/14/2006 12:29'! remove: data ifAbsent: aBlock nodesList remove: data ifAbsent: [ aBlock value. ^ nil]. data previous ifNotNil: [data previous next: data next]. data next ifNotNil: [data next previous: data previous]. ^ data! ! !PltDLinkedList methodsFor: 'removing' stamp: 'apl 2/14/2006 15:56'! removeFirst | res first | nodesList notEmpty ifTrue: [res := nodesList removeFirst. nodesList notEmpty ifTrue: [(first := self first) ifNotNil: [first previous: nil]]]. ^ res! ! !PltDLinkedList methodsFor: 'removing' stamp: 'apl 2/14/2006 15:57'! removeLast | res last | nodesList isEmpty ifFalse: [ res := nodesList removeLast. nodesList isEmpty ifFalse: [(last := self last) ifNotNil: [last next: nil]]]. ^ res! ! !PltDLinkedList methodsFor: 'removing' stamp: 'apl 3/21/2006 19:37'! replaceFrom: start to: stop with: replacementList | endReplacement firstNode prevNode lastNode nextNode | endReplacement := start - 1 + replacementList size. start to: stop do: [:p | (nodesList at: p) destroy]. nodesList := nodesList copyReplaceFrom: start to: stop with: replacementList. nodesList isEmpty ifFalse: [(start < self size and: [start > 0]) ifTrue: [firstNode := nodesList at: start. start > 1 ifTrue: [firstNode previous: (prevNode := nodesList at: start - 1). prevNode next: firstNode] ifFalse: [firstNode previous: nil]]. endReplacement > 0 ifFalse: [endReplacement := self size]. lastNode := nodesList at: endReplacement. endReplacement < self size ifTrue: [lastNode next: (nextNode := nodesList at: endReplacement + 1). nextNode previous: lastNode] ifFalse: [lastNode next: nil]]! ! !PltDLinkedList methodsFor: 'removing' stamp: 'apl 2/14/2006 18:03'! replaceFromNode: startNode toNode: stopNode with: replacementList | start stop | start := self indexOf: startNode. stop := self indexOf: stopNode. self replaceFrom: start to: stop with: replacementList! ! !PltDLinkedList methodsFor: 'initialize/release' stamp: 'apl 2/14/2006 12:18'! reset self initialize! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/14/2006 14:59'! reverseDo: aBlock nodesList reverseDo: aBlock! ! !PltDLinkedList methodsFor: 'enumerating' stamp: 'apl 2/16/2006 11:30'! select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each copy]]. ^newCollection! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 2/14/2006 15:02'! size ^ nodesList size! ! !PltDLinkedList methodsFor: 'copying' stamp: 'apl 2/14/2006 15:02'! sortBy: aBlock "Create a copy that is sorted. Sort criteria is the block that accepts two arguments. When the block is true, the first arg goes first ([:a :b | a > b] sorts in descending order)." | cpy | cpy := self copyEmpty. cpy addAll: (self asSortedCollection: aBlock). ^cpy! ! !PltDLinkedList methodsFor: 'accessing' stamp: 'apl 2/14/2006 15:02'! tail ^ nodesList last! ! !PlatypusCloseDelimToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptCloseDelim: self! ! !PlatypusCloseDelimToken methodsFor: 'testing'! isCloseDelim ^ true! ! !PlatypusDelimToken class methodsFor: 'instance creation' stamp: 'apl 2/26/2003 21:48'! token: anObject ^ super token: anObject asSymbol! ! !PlatypusDelimToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptDelim: self! ! !PlatypusOpenDelimToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptOpenDelim: self! ! !PlatypusOpenDelimToken methodsFor: 'testing'! isOpenDelim ^ true! ! !PlatypusSemicolonToken class methodsFor: 'instance creation' stamp: 'apl 3/3/2006 16:01'! new ^ super new lexicalElement: ';' asSymbol! ! !PlatypusSemicolonToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptSemicolon: self! ! !PlatypusSemicolonToken methodsFor: 'testing'! isSemicolon ^true! ! !PlatypusEolToken class methodsFor: 'instance creation' stamp: 'apl 2/17/2006 12:26'! new ^ super new lexicalElement: Character cr! ! !PlatypusEolToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptEol: self! ! !PlatypusEolToken methodsFor: 'testing'! isEol ^true! ! !PlatypusExpressNativeAlgorithmToken methodsFor: 'visiting' stamp: 'apl 2/10/2006 10:30'! accept: aVisitor ^ aVisitor acceptNativeCode: self! ! !PlatypusExpressNativeAlgorithmToken methodsFor: 'converting' stamp: 'apl 2/10/2006 10:32'! asPltRemark | pltRem | pltRem := PltEmbeddedRemark new. pltRem setText: self lexicalElement. ^ pltRem! ! !PlatypusExpressNativeAlgorithmToken methodsFor: 'converting' stamp: 'apl 2/14/2006 12:05'! asString ^ '(*#' , self lexicalElement , '#*)'! ! !PlatypusExpressNativeAlgorithmToken methodsFor: 'formating' stamp: 'apl 2/14/2006 12:05'! formatWithIndentString: aString | newsub newLex | newsub := String cr , aString , '(*# '. newLex := ''. self lexicalElement linesDo: [:l | newLex isEmpty ifTrue: [newLex := l] ifFalse: [newLex := newLex , '#*)' , newsub , l]]. self lexicalElement: newLex! ! !PlatypusExpressNativeAlgorithmToken methodsFor: 'testing' stamp: 'apl 2/10/2006 10:33'! isNativeCode ^ true! ! !PlatypusGenericToken class methodsFor: 'instance creation' stamp: 'apl 2/13/2003 21:14'! token: anObject ^ self new lexicalElement: anObject ! ! !PlatypusGenericToken methodsFor: 'visiting'! accept: aVisitor ^aVisitor acceptToken: self! ! !PlatypusGenericToken methodsFor: 'converting' stamp: 'apl 2/24/2006 12:50'! asString ^ self lexicalElement isSymbol ifTrue: [self lexicalElement] ifFalse: [self lexicalElement asString]! ! !PlatypusGenericToken methodsFor: 'testing' stamp: 'apl 2/17/2006 13:08'! is: aLexicalElement (aLexicalElement isKindOf: Symbol) ifTrue: [^ self lexicalElement asString = aLexicalElement asString]. ^ (aLexicalElement detect: [:v | v == self lexicalElement] ifNone: []) notNil! ! !PlatypusGenericToken methodsFor: 'classification'! isBlank ^ self isWhiteSpace or: [self isIndent or: [self isEol]]! ! !PlatypusGenericToken methodsFor: 'classification'! isBuiltinFunction ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isBuiltinProcedure ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isCloseDelim ^false! ! !PlatypusGenericToken methodsFor: 'classification'! isCloseKeyword ^false! ! !PlatypusGenericToken methodsFor: 'classification'! isEmbeddedRemark ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isEol ^ false! ! !PlatypusGenericToken methodsFor: 'testing' stamp: 'apl 6/6/2003 13:40'! isEquivalentTo: anotherToken ^ self = anotherToken! ! !PlatypusGenericToken methodsFor: 'classification'! isGroupKeyword ^false! ! !PlatypusGenericToken methodsFor: 'classification'! isIdentifier ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isIndent ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/28/2003 21:43'! isKeyword ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/14/2003 09:55'! isLogical ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/10/2006 10:34'! isNativeCode ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/14/2003 09:49'! isNumber ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/14/2003 09:49'! isOpenDelim ^ false ! ! !PlatypusGenericToken methodsFor: 'classification'! isOpenKeyword ^false! ! !PlatypusGenericToken methodsFor: 'classification'! isOperator ^false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 11/13/2003 09:49'! isPrimaryElementCloseKeyword ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 11/13/2003 09:49'! isPrimaryElementOpenKeyword ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 11/13/2003 10:38'! isPrimaryElementOpenKeyword: anArrayOfSymbol ^ self isPrimaryElementOpenKeyword and: [anArrayOfSymbol anySatisfy: [:s | s = self lexicalElement]]! ! !PlatypusGenericToken methodsFor: 'classification'! isRemark ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isSemicolon ^ false! ! !PlatypusGenericToken methodsFor: 'classification' stamp: 'apl 2/23/2005 22:07'! isStepLiteral ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isString ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isTailRemark ^ false! ! !PlatypusGenericToken methodsFor: 'classification'! isWhiteSpace ^false! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/14/2006 12:06'! lexicalElement ^ data! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/14/2006 12:07'! lexicalElement: anObject data := anObject! ! !PlatypusGenericToken methodsFor: 'printing' stamp: 'apl 2/24/2006 12:56'! printOn: aStream aStream nextPutAll: self class name. aStream nextPut: $(. aStream nextPutAll: self asString. aStream nextPut: $)! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/17/2006 12:21'! startPos ^ startPos! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/17/2006 12:21'! startPos: anInteger startPos := anInteger! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/17/2006 12:22'! stopPos ^ startPos + self lexicalElement size! ! !PlatypusGenericToken methodsFor: 'accessing' stamp: 'apl 2/17/2006 12:39'! stopPosWithStart: aPosition startPos := aPosition. ^ startPos + self asString size! ! !PlatypusGenericToken methodsFor: 'accessing'! widthOfStringForFont: textFont textFont notNil ifTrue: [ ^ textFont widthOfString: self asString]. ^self asString size! ! !PlatypusIdentifierToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptIdentifier: self! ! !PlatypusIdentifierToken methodsFor: 'testing' stamp: 'apl 6/6/2003 22:24'! isEquivalentTo: anotherToken ^ ((anotherToken isKindOf: self class) or: [self isKindOf: anotherToken class]) and: [self asString asUppercase = anotherToken asString asUppercase]! ! !PlatypusIdentifierToken methodsFor: 'testing'! isIdentifier ^true! ! !PlatypusIndentToken class methodsFor: 'instance creation' stamp: 'apl 2/14/2006 12:10'! new ^ super new lexicalElement: String tab! ! !PlatypusIndentToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptIndent: self! ! !PlatypusIndentToken methodsFor: 'testing'! isIndent ^true! ! !PlatypusIndentToken methodsFor: 'accessing' stamp: 'apl 2/28/2003 17:15'! widthOfStringForFont: textFont textFont notNil ifTrue: [^ 50]. ^ 8! ! !PlatypusBuiltinDomainToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptDomain: self! ! !PlatypusBuiltinFunctionToken class methodsFor: 'accessing' stamp: 'apl 2/14/2003 10:51'! tokenStyle ^#(#blue #normal)! ! !PlatypusBuiltinFunctionToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptBuiltinFunction: self! ! !PlatypusBuiltinFunctionToken methodsFor: 'testing'! isBuiltinFunction ^true! ! !PlatypusBuiltinProcedureToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptBuiltinProcedure: self! ! !PlatypusBuiltinProcedureToken methodsFor: 'testing'! isBuiltinProcedure ^ true! ! !PlatypusCloseKeywordToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptCloseKeyword: self! ! !PlatypusCloseKeywordToken methodsFor: 'testing'! isCloseKeyword ^true! ! !PlatypusPrimaryElementCloseKeywordToken methodsFor: 'Classification' stamp: 'apl 11/13/2003 09:50'! isPrimaryElementCloseKeyword ^ true! ! !PlatypusGroupKeywordToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptGroupKeyword: self! ! !PlatypusGroupKeywordToken methodsFor: 'testing'! isGroupKeyword ^true! ! !PlatypusKeywordToken class methodsFor: 'accessing' stamp: 'AlainPlantec 4/26/2012 10:28'! forceToUppercase ^ ForceToUppercase ifNil: [ForceToUppercase := true]! ! !PlatypusKeywordToken class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:56'! forceToUppercase: aBoolean ForceToUppercase := aBoolean! ! !PlatypusKeywordToken class methodsFor: 'class initialization' stamp: 'apl 1/15/2007 16:05'! initialize "self initialize" ForceToUppercase := true! ! !PlatypusKeywordToken class methodsFor: 'instance creation' stamp: 'apl 2/26/2003 18:16'! token: anObject ^ super token: anObject asLowercase asSymbol! ! !PlatypusKeywordToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptKeyword: self! ! !PlatypusKeywordToken methodsFor: 'converting' stamp: 'apl 2/14/2006 12:06'! asString self forceToUppercase ifTrue: [^ self lexicalElement asString asUppercase]. ^ self lexicalElement asString! ! !PlatypusKeywordToken methodsFor: 'accessing'! forceToUppercase ^ self class forceToUppercase! ! !PlatypusKeywordToken methodsFor: 'testing' stamp: 'apl 2/28/2003 21:43'! isKeyword ^true! ! !PlatypusOpenKeywordToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptOpenKeyword: self! ! !PlatypusOpenKeywordToken methodsFor: 'testing'! isOpenKeyword ^true! ! !PlatypusPrimaryElementOpenKeywordToken methodsFor: 'initialize/release' stamp: 'apl 3/21/2006 19:18'! destroy metaData := nil. super destroy! ! !PlatypusPrimaryElementOpenKeywordToken methodsFor: 'Classification' stamp: 'apl 11/13/2003 09:50'! isPrimaryElementOpenKeyword ^ true! ! !PlatypusPrimaryElementOpenKeywordToken methodsFor: 'accessing' stamp: 'apl 2/14/2006 19:13'! metaData ^metaData! ! !PlatypusPrimaryElementOpenKeywordToken methodsFor: 'accessing' stamp: 'apl 2/14/2006 19:13'! metaData: anObject metaData := anObject! ! !PlatypusAssignToken methodsFor: 'visiting'! accept: aVisitor ^aVisitor acceptAssign: self! ! !PlatypusAssignToken methodsFor: 'testing'! isAssign ^true! ! !PlatypusOperatorToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptOperator: self! ! !PlatypusOperatorToken methodsFor: 'testing'! isOperator ^true! ! !PlatypusPlusToken methodsFor: 'visiting' stamp: 'apl 12/12/2005 20:06'! accept: aVisitor ^ aVisitor acceptPlus: self! ! !PlatypusLiteralToken methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:41'! accept: aVisitor ^ aVisitor acceptLiteral: self! ! !PlatypusLiteralToken methodsFor: 'testing' stamp: 'apl 2/23/2005 22:07'! isStepLiteral ^ true! ! !PlatypusLogicalToken class methodsFor: 'instance creation' stamp: 'apl 2/26/2003 21:53'! token: anObject ^ super token: anObject asLowercase asSymbol! ! !PlatypusLogicalToken methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:42'! accept: aVisitor ^ aVisitor acceptLogical: self! ! !PlatypusLogicalToken methodsFor: 'testing' stamp: 'apl 2/14/2003 09:59'! isLogical ^true! ! !PlatypusNumberToken methodsFor: 'visiting' stamp: 'apl 2/14/2003 10:42'! accept: aVisitor ^ aVisitor acceptNumber: self! ! !PlatypusNumberToken methodsFor: 'testing' stamp: 'apl 2/14/2003 09:50'! isNumber ^ true! ! !PlatypusStringToken methodsFor: 'visiting' stamp: 'apl 6/1/2004 11:16'! accept: aVisitor ^ aVisitor acceptString: self! ! !PlatypusStringToken methodsFor: 'testing' stamp: 'apl 6/1/2004 11:15'! isString ^ true! ! !PlatypusEmbeddedRemarkToken class methodsFor: 'instance creation'! token: anObject ^ self new lexicalElement: anObject! ! !PlatypusEmbeddedRemarkToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptEmbeddedRemark: self! ! !PlatypusEmbeddedRemarkToken methodsFor: 'converting' stamp: 'AlainPlantec 10/7/2010 13:44'! asPltRemark | pltRem | pltRem := PltEmbeddedRemark new. pltRem setText: self lexicalElement. ^ pltRem! ! !PlatypusEmbeddedRemarkToken methodsFor: 'converting' stamp: 'apl 2/14/2006 12:05'! asString self lexicalElement size > 0 ifTrue: [(self lexicalElement first == $" or: [self lexicalElement first == $<]) ifTrue: [^ '(*' ,self lexicalElement , '*)']]. ^ '(*' ,self lexicalElement , '*)'! ! !PlatypusEmbeddedRemarkToken methodsFor: 'formating' stamp: 'apl 3/10/2006 15:17'! formatWithIndentString: aString | newLex lines | newLex := ''. lines := OrderedCollection new. self lexicalElement linesDo: [:l | lines add: l]. lines do: [:l | newLex := newLex , l] separatedBy: [newLex := newLex , String cr, aString ]. self lexicalElement: newLex! ! !PlatypusEmbeddedRemarkToken methodsFor: 'testing'! isEmbeddedRemark ^ true! ! !PlatypusRemarkToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptRemark: self! ! !PlatypusRemarkToken methodsFor: 'testing'! isRemark ^true! ! !PlatypusTailRemarkToken class methodsFor: 'instance creation' stamp: 'apl 1/25/2007 11:13'! token: anObject ^ self new lexicalElement: anObject! ! !PlatypusTailRemarkToken methodsFor: 'visiting'! accept: aVisitor ^ aVisitor acceptTailRemark: self! ! !PlatypusTailRemarkToken methodsFor: 'converting' stamp: 'apl 3/11/2003 11:59'! asPltRemark | pltRem | pltRem := PltTailRemark new. pltRem setText: self lexicalElement. ^pltRem! ! !PlatypusTailRemarkToken methodsFor: 'converting' stamp: 'apl 2/14/2006 12:06'! asString ^ '--' , self lexicalElement! ! !PlatypusTailRemarkToken methodsFor: 'testing'! isTailRemark ^ true! ! !PlatypusOneWhiteSpaceToken class methodsFor: 'instance creation' stamp: 'apl 2/17/2006 12:26'! new ^ super new lexicalElement: Character space! ! !PlatypusWhiteSpaceToken methodsFor: 'visiting'! accept: aVisitor ^aVisitor acceptWhiteSpace: self! ! !PlatypusWhiteSpaceToken methodsFor: 'testing'! isWhiteSpace ^ true! ! !PltDNode class methodsFor: 'instance creation'! data: data | node | node := self new. node data: data. ^ node! ! !PltDNode class methodsFor: 'instance creation'! new ^ super new initialize! ! !PltDNode class methodsFor: 'instance creation'! previous: previousNode next: nextNode data: data | node | node := self new. node previous: previousNode; next: nextNode; data: data. ^node! ! !PltDNode methodsFor: 'converting' stamp: 'apl 4/6/2004 11:47'! asString ^data asString! ! !PltDNode methodsFor: 'accessing' stamp: 'apl 4/6/2004 11:47'! data ^data! ! !PltDNode methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:28'! data: anObject data := anObject! ! !PltDNode methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:50'! destroy next := nil. previous := nil. data := nil. super destroy! ! !PltDNode methodsFor: 'initialize/release' stamp: 'apl 3/6/2004 10:41'! initialize super initialize. next := nil. previous := nil. data := nil! ! !PltDNode methodsFor: 'accessing'! next ^next! ! !PltDNode methodsFor: 'accessing'! next: anObject next := anObject! ! !PltDNode methodsFor: 'accessing'! nextLink ^ next! ! !PltDNode methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:28'! nextLink: anObject next := anObject! ! !PltDNode methodsFor: 'copying' stamp: 'apl 2/14/2006 18:12'! postCopy data := data copy! ! !PltDNode methodsFor: 'accessing' stamp: 'apl 2/14/2006 18:12'! previous ^previous! ! !PltDNode methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:29'! previous: anObject previous := anObject! ! !PltDNode methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:29'! previous: anObject next: anotherObject previous := anObject. next := anotherObject! ! !PltDNode methodsFor: 'printing' stamp: 'apl 2/14/2006 18:12'! printOn: aStream aStream nextPutAll: self class name, '('. data printOn: aStream. aStream nextPutAll: ')'! ! !PltEntityInstance commentStamp: 'platypus comment' prior: 106063453! ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ! !PltApplicationInstance commentStamp: 'platypus comment' prior: 106063658! ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ! !PltApplicationInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltApplicationInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptApplicationInstance: self ! ! !PltApplicationInstance methodsFor: 'platypus-generated-copying'! applicationInstanceCopyTo: another another fastSetOwningModel: self owningModel. another fastSetPersistentLabel: self persistentLabel ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! applicationInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwningModel: valuesloc removeFirst. self setPersistentLabel: valuesloc removeFirst. ^ valuesloc ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! applicationInstanceToValues: values values add: self owningModel. values add: self persistentLabel. ^ values ! ! !PltApplicationInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwningModel: aPltModelContents owningModel := aPltModelContents ! ! !PltApplicationInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPersistentLabel: aString persistentLabel := aString ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self applicationInstanceFromValues: (super fromValues: values) ! ! !PltApplicationInstance methodsFor: 'platypus-generated-classifying'! isPltApplicationInstance ^ true ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self applicationInstanceFromValues: values ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self applicationInstanceToValues: values ! ! !PltApplicationInstance methodsFor: 'platypus-generated-accessing'! owningModel ^ owningModel ! ! !PltApplicationInstance methodsFor: 'platypus-generated-accessing'! owningModel: aPltModelContents owningModel := aPltModelContents ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! owningModel: aPltModelContents persistentLabel: aString self setOwningModel:aPltModelContents. self setPersistentLabel:aString. ! ! !PltApplicationInstance methodsFor: 'platypus-generated-with-context-accessing'! owningModelUsingContext: aContext ^ self owningModel ! ! !PltApplicationInstance methodsFor: 'platypus-generated-accessing'! persistentLabel ^ persistentLabel ! ! !PltApplicationInstance methodsFor: 'platypus-generated-accessing'! persistentLabel: aString persistentLabel := aString ! ! !PltApplicationInstance methodsFor: 'platypus-generated-with-context-accessing'! persistentLabelUsingContext: aContext ^ self persistentLabel ! ! !PltApplicationInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltApplicationInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self applicationInstanceCopyTo: another ! ! !PltApplicationInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self applicationInstanceCopyTo: another ! ! !PltApplicationInstance methodsFor: 'platypus-generated-set-accessing'! setOwningModel: aPltModelContents self owningModel: aPltModelContents ! ! !PltApplicationInstance methodsFor: 'platypus-generated-set-accessing'! setPersistentLabel: aString self persistentLabel: aString ! ! !PltApplicationInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owningModel := nil. persistentLabel := '' ! ! !PltApplicationInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self applicationInstanceToValues: (super toValues: values) ! ! !PltGenericInstance commentStamp: 'platypus comment' prior: 106063922! ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ! !PltExternalRepresentation commentStamp: 'platypus comment' prior: 106064177! ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ! !PltExternalRepresentation class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExternalRepresentation: self ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-copying'! externalRepresentationCopyTo: another another fastSetRecords: self records ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! externalRepresentationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRecords: valuesloc removeFirst. ^ valuesloc ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! externalRepresentationToValues: values values add: self records. ^ values ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRecords: aListOfPltSimpleRecord records := aListOfPltSimpleRecord ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self externalRepresentationFromValues: (super fromValues: values) ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-classifying'! isPltExternalRepresentation ^ true ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self externalRepresentationFromValues: values ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self externalRepresentationToValues: values ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self externalRepresentationCopyTo: another ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self externalRepresentationCopyTo: another ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-accessing'! records ^ records ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-accessing'! records: aListOfPltSimpleRecord records := aListOfPltSimpleRecord ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltSimpleRecord as: OrderedCollection ] ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-with-context-accessing'! recordsUsingContext: aContext ^ self records ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-set-accessing'! setRecords: aListOfPltSimpleRecord self records: aListOfPltSimpleRecord ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. records := OrderedCollection new ! ! !PltExternalRepresentation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self externalRepresentationToValues: (super toValues: values) ! ! !PltGenericInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGenericInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGenericInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGenericInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltGenericInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGenericInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGenericInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGenericInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGenericInstance: self ! ! !PltGenericInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInstanceScope: aPltInstanceScope instanceScope := aPltInstanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self genericInstanceFromValues: (super fromValues: values) ! ! !PltGenericInstance methodsFor: 'platypus-generated-copying'! genericInstanceCopyTo: another another fastSetInstanceScope: self instanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! genericInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setInstanceScope: valuesloc removeFirst. ^ valuesloc ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! genericInstanceToValues: values values add: self instanceScope. ^ values ! ! !PltGenericInstance methodsFor: 'platypus-generated-accessing'! instanceScope ^ instanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-accessing'! instanceScope: aPltInstanceScope instanceScope := aPltInstanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-with-context-accessing'! instanceScopeUsingContext: aContext ^ self instanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-classifying'! isPltGenericInstance ^ true ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self genericInstanceFromValues: values ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self genericInstanceToValues: values ! ! !PltGenericInstance methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltGenericInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGenericInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self genericInstanceCopyTo: another ! ! !PltGenericInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self genericInstanceCopyTo: another ! ! !PltGenericInstance methodsFor: 'platypus-generated-set-accessing'! setInstanceScope: aPltInstanceScope self instanceScope: aPltInstanceScope ! ! !PltGenericInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. instanceScope := nil ! ! !PltGenericInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self genericInstanceToValues: (super toValues: values) ! ! !PltGroupRepresentation commentStamp: 'platypus comment' prior: 106064402! ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ! !PltExternalGroupRepresentation commentStamp: 'platypus comment' prior: 106064691! ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExternalGroupRepresentation: self ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-copying'! externalGroupRepresentationCopyTo: another ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! externalGroupRepresentationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! externalGroupRepresentationToValues: values ^ values ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self externalGroupRepresentationFromValues: (super fromValues: values) ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-classifying'! isPltExternalGroupRepresentation ^ true ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self externalGroupRepresentationFromValues: values ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self externalGroupRepresentationToValues: values ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self externalGroupRepresentationCopyTo: another ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self externalGroupRepresentationCopyTo: another ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltExternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self externalGroupRepresentationToValues: (super toValues: values) ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGroupRepresentation: self ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-accessing'! definition ^ definition ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-accessing'! definition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! definition: aPltEntityDefinitionReference instRef: aPltGenericInstanceReference self setDefinition:aPltEntityDefinitionReference. self setInstRef:aPltGenericInstanceReference. ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-with-context-accessing'! definitionUsingContext: aContext ^ self definition ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDefinition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInstRef: aPltGenericInstance instRef := aPltGenericInstance ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self groupRepresentationFromValues: (super fromValues: values) ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-copying'! groupRepresentationCopyTo: another another fastSetDefinition: self definition. another fastSetInstRef: self instRef ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! groupRepresentationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDefinition: valuesloc removeFirst. self setInstRef: valuesloc removeFirst. ^ valuesloc ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! groupRepresentationToValues: values values add: self definition. values add: self instRef. ^ values ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-accessing'! instRef ^ instRef ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-accessing'! instRef: aPltGenericInstance instRef := aPltGenericInstance ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-with-context-accessing'! instRefUsingContext: aContext ^ self instRef ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-classifying'! isPltGroupRepresentation ^ true ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self groupRepresentationFromValues: values ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self groupRepresentationToValues: values ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self groupRepresentationCopyTo: another ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self groupRepresentationCopyTo: another ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-set-accessing'! setDefinition: aPltEntityDefinitionReference self definition: aPltEntityDefinitionReference ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-set-accessing'! setInstRef: aPltGenericInstance self instRef: aPltGenericInstance ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. definition := nil. instRef := nil ! ! !PltGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self groupRepresentationToValues: (super toValues: values) ! ! !PltInternalGroupRepresentation commentStamp: 'platypus comment' prior: 106064900! ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInternalGroupRepresentation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInternalGroupRepresentation: self ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self internalGroupRepresentationFromValues: (super fromValues: values) ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-copying'! internalGroupRepresentationCopyTo: another ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! internalGroupRepresentationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! internalGroupRepresentationToValues: values ^ values ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-classifying'! isPltInternalGroupRepresentation ^ true ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self internalGroupRepresentationFromValues: values ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self internalGroupRepresentationToValues: values ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self internalGroupRepresentationCopyTo: another ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self internalGroupRepresentationCopyTo: another ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInternalGroupRepresentation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self internalGroupRepresentationToValues: (super toValues: values) ! ! !PltInternalRepresentation commentStamp: 'platypus comment' prior: 106065104! ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ! !PltInternalRepresentation class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInternalRepresentation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInternalRepresentation: self ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-accessing'! definition ^ definition ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-accessing'! definition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! definition: aPltEntityDefinitionReference parameters: aListOfPltExpression self setDefinition:aPltEntityDefinitionReference. self setParameters:aListOfPltExpression. ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-with-context-accessing'! definitionUsingContext: aContext ^ self definition ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDefinition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self internalRepresentationFromValues: (super fromValues: values) ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-copying'! internalRepresentationCopyTo: another another fastSetDefinition: self definition. another fastSetParameters: self parameters ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! internalRepresentationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDefinition: valuesloc removeFirst. self setParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! internalRepresentationToValues: values values add: self definition. values add: self parameters. ^ values ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-classifying'! isPltInternalRepresentation ^ true ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self internalRepresentationFromValues: values ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self internalRepresentationToValues: values ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self internalRepresentationCopyTo: another ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self internalRepresentationCopyTo: another ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-set-accessing'! setDefinition: aPltEntityDefinitionReference self definition: aPltEntityDefinitionReference ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. definition := nil. parameters := OrderedCollection new ! ! !PltInternalRepresentation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self internalRepresentationToValues: (super toValues: values) ! ! !PltUserDefinedApplicationInstance commentStamp: 'platypus comment' prior: 106065382! ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUserDefinedApplicationInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUserDefinedApplicationInstance: self ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self userDefinedApplicationInstanceFromValues: (super fromValues: values) ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-classifying'! isPltUserDefinedApplicationInstance ^ true ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self userDefinedApplicationInstanceFromValues: values ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self userDefinedApplicationInstanceToValues: values ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! name: aString parameters: aListOfPltExpression self setName:aString. self setParameters:aListOfPltExpression. ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self userDefinedApplicationInstanceCopyTo: another ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self userDefinedApplicationInstanceCopyTo: another ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. parameters := OrderedCollection new ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self userDefinedApplicationInstanceToValues: (super toValues: values) ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-copying'! userDefinedApplicationInstanceCopyTo: another another fastSetName: self name. another fastSetParameters: self parameters ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! userDefinedApplicationInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltUserDefinedApplicationInstance methodsFor: 'platypus-generated-group-accessing'! userDefinedApplicationInstanceToValues: values values add: self name. values add: self parameters. ^ values ! ! !PltEntityInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltEntityInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityInstance: self ! ! !PltEntityInstance methodsFor: 'platypus-generated-copying'! entityInstanceCopyTo: another another fastSetOwner: self owner ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! entityInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! entityInstanceToValues: values values add: self owner. ^ values ! ! !PltEntityInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltEntityInstance owner := aPltEntityInstance ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityInstanceFromValues: (super fromValues: values) ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltAggrUnaryExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltAggregateData ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltAggregateInitializer ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAggregateInitializerDomain ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltAggregateInitializerElement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltAggregateInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAggregateType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAggregationType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAlgorithmDeclaration ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAlgorithmRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltAliasStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltAliasStatementVariable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltAndExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAndSupertype ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAndorSupertype ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltAnonymousVariable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltApplicationInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltArithmeticExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltArrayInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltArrayType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltAssignable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltAssignmentStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAttribute ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltAttributeIdentifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltAttributeQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltAttributeReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltBagInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltBagType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltBinaryExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltBinaryLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltBinarySupertypeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltBinaryType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltBooleanType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltBound ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltCardinalityExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltCaseAction ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltCaseStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltComparisonExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltCompoundStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltConstantDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltContextDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltContextRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDefinedType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDefinedTypeReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDerivedAttribute ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDictionaryInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDictionaryInstanceReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltDivExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltDomainEquivalentItem ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEConstant ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltElementQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltElementRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltEmbeddedRemark ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltEndSplitmarkStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltEntityDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltEntityDefinitionReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltEntityInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEntityInstanceConstructor ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEntityInstanceReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEntityInstancesSet ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltEnumerationType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEnumerationValue ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltEscapeStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltEscapedExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltExplicitAttribute ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltExpoExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltExternalGroupRepresentation ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltExternalMetaSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltExternalRepresentation ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltExternalSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltFalseConstant ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltFileDescription ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltFileName ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltFileSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltFunctionDeclaration ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltGeneralAggregateType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltGenericInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltGenericType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltGlobalRule ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltGreaterEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltGreaterThanExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltGroupQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltGroupRepresentation ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltHeaderInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltIdentifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltIfStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltImplicitlyDeclaredIdentifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltIncludeSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltIncrementControl ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltIncrementControlVariable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltIndexQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInstComparisonExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInstEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInstNotEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInstanceConstructionExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltInstanceScope ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltIntegerBound ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltIntegerLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltIntegerType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltInternalGroupRepresentation ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltInternalRepresentation ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltInterval ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltInverseAttribute ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLessEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLessThanExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLikeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltListInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltListType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltLocalVariable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLogicalExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltLogicalLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltLogicalType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltMetaConceptDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltMetaMappingDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltMetaMappingRule ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltMinusExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltMissingValue ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltModExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusEnvironmentSchemaSchema-classifying'! isPltModelContents ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltMultExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNamedType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNamedTypeRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNamedTypeReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNativeAlgorithm ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNativeCode ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltNativeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltNativeStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltNegativeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltNotEqualExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltNotExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltNullStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltNumberType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltNumericLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltOneofSupertypeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltOrExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltOutputStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltParameterDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltPiConstant ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltPlusExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltPopulationDependentBound ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltPositiveExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltProcedureCallStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltProcedureDeclaration ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltQualifiedExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltQueryExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltQueryVariable ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltRangeQualifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltRealDivExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltRealLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltRealType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltRedefinedAttributeValue ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltReferencedSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltRemark ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltRemarkReference ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltRepeatStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltReturnStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltRuleRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSchemaDefinition ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusEnvironmentSchemaSchema-classifying'! isPltSchemaInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSchemaInstanceRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSchemaRef ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSdaiInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSelectType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltSelfIdentifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSessionInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltSetInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSetType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltSimpleRecord ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSimpleType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltSimpleUnaryExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltSkipStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltSplitmarkStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusStatementsSchemaSchema-classifying'! isPltStatement ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltStatementsContainer ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltStringLiteral ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltStringType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSubEntityRefExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSupertypeConstraint ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltSupertypeExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltTailRemark ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltTrueConstant ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltTypedExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltUnaryExpression ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltUniquenessRule ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltUniquenessRuleAttributeIdentifier ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltUnknownConstant ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltUsedSchema ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltUserDefinedApplicationInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusPopulationSchemaSchema-classifying'! isPltUserDefinedHeaderInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusAggregateDataSchemaSchema-classifying'! isPltVariableSizeAggregationInstance ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltVariableSizeAggregationType ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusDictionarySchemaSchema-classifying'! isPltWhereRule ^ false ! ! !PltEntityInstance methodsFor: '*Platypus-PlatypusExpressionsSchemaSchema-classifying'! isPltXorExpression ^ false ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityInstanceFromValues: values ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityInstanceToValues: values ! ! !PltEntityInstance methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltEntityInstance methodsFor: 'platypus-generated-accessing'! owner: aPltEntityInstance owner := aPltEntityInstance ! ! !PltEntityInstance methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltEntityInstance methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self class platypusMetaData ! ! !PltEntityInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityInstanceCopyTo: another ! ! !PltEntityInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityInstanceCopyTo: another ! ! !PltEntityInstance methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltEntityInstance self owner: aPltEntityInstance ! ! !PltEntityInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil ! ! !PltEntityInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityInstanceToValues: (super toValues: values) ! ! !PltHeaderInstance commentStamp: 'platypus comment' prior: 106065631! ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ! !PltFileDescription commentStamp: 'platypus comment' prior: 106065862! ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ! !PltFileDescription class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltFileDescription class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFileDescription class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltFileDescription class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltFileDescription class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltFileDescription class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFileDescription class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFileDescription methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptFileDescription: self ! ! !PltFileDescription methodsFor: 'platypus-generated-accessing'! description ^ description ! ! !PltFileDescription methodsFor: 'platypus-generated-accessing'! description: aListOfString description := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! description: aListOfString implementationLevel: aString self setDescription:aListOfString. self setImplementationLevel:aString. ! ! !PltFileDescription methodsFor: 'platypus-generated-with-context-accessing'! descriptionUsingContext: aContext ^ self description ! ! !PltFileDescription methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDescription: aListOfString description := aListOfString ! ! !PltFileDescription methodsFor: 'platypus-generated-fast-set-accessing'! fastSetImplementationLevel: aString implementationLevel := aString ! ! !PltFileDescription methodsFor: 'platypus-generated-copying'! fileDescriptionCopyTo: another another fastSetDescription: self description. another fastSetImplementationLevel: self implementationLevel ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! fileDescriptionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDescription: valuesloc removeFirst. self setImplementationLevel: valuesloc removeFirst. ^ valuesloc ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! fileDescriptionToValues: values values add: self description. values add: self implementationLevel. ^ values ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self fileDescriptionFromValues: (super fromValues: values) ! ! !PltFileDescription methodsFor: 'platypus-generated-accessing'! implementationLevel ^ implementationLevel ! ! !PltFileDescription methodsFor: 'platypus-generated-accessing'! implementationLevel: aString implementationLevel := aString ! ! !PltFileDescription methodsFor: 'platypus-generated-with-context-accessing'! implementationLevelUsingContext: aContext ^ self implementationLevel ! ! !PltFileDescription methodsFor: 'platypus-generated-classifying'! isPltFileDescription ^ true ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self fileDescriptionFromValues: values ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self fileDescriptionToValues: values ! ! !PltFileDescription methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltFileDescription methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self fileDescriptionCopyTo: another ! ! !PltFileDescription methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self fileDescriptionCopyTo: another ! ! !PltFileDescription methodsFor: 'platypus-generated-set-accessing'! setDescription: aListOfString self description: aListOfString ! ! !PltFileDescription methodsFor: 'platypus-generated-set-accessing'! setImplementationLevel: aString self implementationLevel: aString ! ! !PltFileDescription methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. description := OrderedCollection new. implementationLevel := '' ! ! !PltFileDescription methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self fileDescriptionToValues: (super toValues: values) ! ! !PltFileName commentStamp: 'platypus comment' prior: 106066123! ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ! !PltFileName class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltFileName class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFileName class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltFileName class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltFileName class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltFileName class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFileName class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFileName methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptFileName: self ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! author ^ author ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! author: aListOfString author := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! authorUsingContext: aContext ^ self author ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! authorisation ^ authorisation ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! authorisation: aString authorisation := aString ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! authorisationUsingContext: aContext ^ self authorisation ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAuthor: aListOfString author := aListOfString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAuthorisation: aString authorisation := aString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOrganization: aListOfString organization := aListOfString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOriginatingSystem: aString originatingSystem := aString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPreprocessorVersion: aString preprocessorVersion := aString ! ! !PltFileName methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTimeStamp: aString timeStamp := aString ! ! !PltFileName methodsFor: 'platypus-generated-copying'! fileNameCopyTo: another another fastSetName: self name. another fastSetTimeStamp: self timeStamp. another fastSetAuthor: self author. another fastSetOrganization: self organization. another fastSetPreprocessorVersion: self preprocessorVersion. another fastSetOriginatingSystem: self originatingSystem. another fastSetAuthorisation: self authorisation ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! fileNameFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setTimeStamp: valuesloc removeFirst. self setAuthor: valuesloc removeFirst. self setOrganization: valuesloc removeFirst. self setPreprocessorVersion: valuesloc removeFirst. self setOriginatingSystem: valuesloc removeFirst. self setAuthorisation: valuesloc removeFirst. ^ valuesloc ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! fileNameToValues: values values add: self name. values add: self timeStamp. values add: self author. values add: self organization. values add: self preprocessorVersion. values add: self originatingSystem. values add: self authorisation. ^ values ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self fileNameFromValues: (super fromValues: values) ! ! !PltFileName methodsFor: 'platypus-generated-classifying'! isPltFileName ^ true ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self fileNameFromValues: values ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self fileNameToValues: values ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! name: aString timeStamp: aString1 author: aListOfString organization: aListOfString1 preprocessorVersion: aString2 originatingSystem: aString3 authorisation: aString4 self setName:aString. self setTimeStamp:aString1. self setAuthor:aListOfString. self setOrganization:aListOfString1. self setPreprocessorVersion:aString2. self setOriginatingSystem:aString3. self setAuthorisation:aString4. ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! organization ^ organization ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! organization: aListOfString organization := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! organizationUsingContext: aContext ^ self organization ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! originatingSystem ^ originatingSystem ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! originatingSystem: aString originatingSystem := aString ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! originatingSystemUsingContext: aContext ^ self originatingSystem ! ! !PltFileName methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltFileName methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self fileNameCopyTo: another ! ! !PltFileName methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self fileNameCopyTo: another ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! preprocessorVersion ^ preprocessorVersion ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! preprocessorVersion: aString preprocessorVersion := aString ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! preprocessorVersionUsingContext: aContext ^ self preprocessorVersion ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setAuthor: aListOfString self author: aListOfString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setAuthorisation: aString self authorisation: aString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setOrganization: aListOfString self organization: aListOfString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setOriginatingSystem: aString self originatingSystem: aString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setPreprocessorVersion: aString self preprocessorVersion: aString ! ! !PltFileName methodsFor: 'platypus-generated-set-accessing'! setTimeStamp: aString self timeStamp: aString ! ! !PltFileName methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. timeStamp := ''. author := OrderedCollection new. organization := OrderedCollection new. preprocessorVersion := ''. originatingSystem := ''. authorisation := '' ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! timeStamp ^ timeStamp ! ! !PltFileName methodsFor: 'platypus-generated-accessing'! timeStamp: aString timeStamp := aString ! ! !PltFileName methodsFor: 'platypus-generated-with-context-accessing'! timeStampUsingContext: aContext ^ self timeStamp ! ! !PltFileName methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self fileNameToValues: (super toValues: values) ! ! !PltFileSchema commentStamp: 'platypus comment' prior: 106066549! ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; ! !PltFileSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltFileSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFileSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltFileSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltFileSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltFileSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFileSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFileSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptFileSchema: self ! ! !PltFileSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSchemaIdentifiers: aListOfString schemaIdentifiers := aListOfString ! ! !PltFileSchema methodsFor: 'platypus-generated-copying'! fileSchemaCopyTo: another another fastSetSchemaIdentifiers: self schemaIdentifiers ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! fileSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSchemaIdentifiers: valuesloc removeFirst. ^ valuesloc ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! fileSchemaToValues: values values add: self schemaIdentifiers. ^ values ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self fileSchemaFromValues: (super fromValues: values) ! ! !PltFileSchema methodsFor: 'platypus-generated-classifying'! isPltFileSchema ^ true ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self fileSchemaFromValues: values ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self fileSchemaToValues: values ! ! !PltFileSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltFileSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self fileSchemaCopyTo: another ! ! !PltFileSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self fileSchemaCopyTo: another ! ! !PltFileSchema methodsFor: 'platypus-generated-accessing'! schemaIdentifiers ^ schemaIdentifiers ! ! !PltFileSchema methodsFor: 'platypus-generated-accessing'! schemaIdentifiers: aListOfString schemaIdentifiers := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PltFileSchema methodsFor: 'platypus-generated-with-context-accessing'! schemaIdentifiersUsingContext: aContext ^ self schemaIdentifiers ! ! !PltFileSchema methodsFor: 'platypus-generated-set-accessing'! setSchemaIdentifiers: aListOfString self schemaIdentifiers: aListOfString ! ! !PltFileSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. schemaIdentifiers := OrderedCollection new ! ! !PltFileSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self fileSchemaToValues: (super toValues: values) ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltHeaderInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptHeaderInstance: self ! ! !PltHeaderInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwningModel: aPltModelContents owningModel := aPltModelContents ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self headerInstanceFromValues: (super fromValues: values) ! ! !PltHeaderInstance methodsFor: 'platypus-generated-copying'! headerInstanceCopyTo: another another fastSetOwningModel: self owningModel ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! headerInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwningModel: valuesloc removeFirst. ^ valuesloc ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! headerInstanceToValues: values values add: self owningModel. ^ values ! ! !PltHeaderInstance methodsFor: 'platypus-generated-classifying'! isPltHeaderInstance ^ true ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self headerInstanceFromValues: values ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self headerInstanceToValues: values ! ! !PltHeaderInstance methodsFor: 'platypus-generated-accessing'! owningModel ^ owningModel ! ! !PltHeaderInstance methodsFor: 'platypus-generated-accessing'! owningModel: aPltModelContents owningModel := aPltModelContents ! ! !PltHeaderInstance methodsFor: 'platypus-generated-with-context-accessing'! owningModelUsingContext: aContext ^ self owningModel ! ! !PltHeaderInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltHeaderInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self headerInstanceCopyTo: another ! ! !PltHeaderInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self headerInstanceCopyTo: another ! ! !PltHeaderInstance methodsFor: 'platypus-generated-set-accessing'! setOwningModel: aPltModelContents self owningModel: aPltModelContents ! ! !PltHeaderInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owningModel := nil ! ! !PltHeaderInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self headerInstanceToValues: (super toValues: values) ! ! !PltUserDefinedHeaderInstance commentStamp: 'platypus comment' prior: 106066786! ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUserDefinedHeaderInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUserDefinedHeaderInstance: self ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self userDefinedHeaderInstanceFromValues: (super fromValues: values) ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-classifying'! isPltUserDefinedHeaderInstance ^ true ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self userDefinedHeaderInstanceFromValues: values ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self userDefinedHeaderInstanceToValues: values ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! name: aString parameters: aListOfPltExpression self setName:aString. self setParameters:aListOfPltExpression. ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self userDefinedHeaderInstanceCopyTo: another ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self userDefinedHeaderInstanceCopyTo: another ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. parameters := OrderedCollection new ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self userDefinedHeaderInstanceToValues: (super toValues: values) ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-copying'! userDefinedHeaderInstanceCopyTo: another another fastSetName: self name. another fastSetParameters: self parameters ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! userDefinedHeaderInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltUserDefinedHeaderInstance methodsFor: 'platypus-generated-group-accessing'! userDefinedHeaderInstanceToValues: values values add: self name. values add: self parameters. ^ values ! ! !PltRemark commentStamp: 'platypus comment' prior: 106067017! ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ! !PltEmbeddedRemark commentStamp: 'platypus comment' prior: 106067268! ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEmbeddedRemark class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEmbeddedRemark: self ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-copying'! embeddedRemarkCopyTo: another ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! embeddedRemarkFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! embeddedRemarkToValues: values ^ values ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self embeddedRemarkFromValues: (super fromValues: values) ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-classifying'! isPltEmbeddedRemark ^ true ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self embeddedRemarkFromValues: values ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self embeddedRemarkToValues: values ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self embeddedRemarkCopyTo: another ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self embeddedRemarkCopyTo: another ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltEmbeddedRemark methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self embeddedRemarkToValues: (super toValues: values) ! ! !PltRemark class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRemark class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRemark class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRemark class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRemark class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRemark methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRemark: self ! ! !PltRemark methodsFor: 'platypus-generated-fast-set-accessing'! fastSetText: aString text := aString ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self remarkFromValues: (super fromValues: values) ! ! !PltRemark methodsFor: 'platypus-generated-classifying'! isPltRemark ^ true ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self remarkFromValues: values ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self remarkToValues: values ! ! !PltRemark methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRemark methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self remarkCopyTo: another ! ! !PltRemark methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self remarkCopyTo: another ! ! !PltRemark methodsFor: 'platypus-generated-copying'! remarkCopyTo: another another fastSetText: self text ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! remarkFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setText: valuesloc removeFirst. ^ valuesloc ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! remarkToValues: values values add: self text. ^ values ! ! !PltRemark methodsFor: 'platypus-generated-set-accessing'! setText: aString self text: aString ! ! !PltRemark methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. text := '' ! ! !PltRemark methodsFor: 'platypus-generated-accessing'! text ^ text ! ! !PltRemark methodsFor: 'platypus-generated-accessing'! text: aString text := aString ! ! !PltRemark methodsFor: 'platypus-generated-with-context-accessing'! textUsingContext: aContext ^ self text ! ! !PltRemark methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self remarkToValues: (super toValues: values) ! ! !PltTailRemark commentStamp: 'platypus comment' prior: 106067432! ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ! !PltTailRemark class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltTailRemark class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltTailRemark class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltTailRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltTailRemark class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltTailRemark class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltTailRemark class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltTailRemark methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptTailRemark: self ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self tailRemarkFromValues: (super fromValues: values) ! ! !PltTailRemark methodsFor: 'platypus-generated-classifying'! isPltTailRemark ^ true ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self tailRemarkFromValues: values ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self tailRemarkToValues: values ! ! !PltTailRemark methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltTailRemark methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self tailRemarkCopyTo: another ! ! !PltTailRemark methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self tailRemarkCopyTo: another ! ! !PltTailRemark methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltTailRemark methodsFor: 'platypus-generated-copying'! tailRemarkCopyTo: another ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! tailRemarkFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! tailRemarkToValues: values ^ values ! ! !PltTailRemark methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self tailRemarkToValues: (super toValues: values) ! ! !PltSdaiInstance commentStamp: 'platypus comment' prior: 106067594! ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ! !PltDictionaryInstance commentStamp: 'platypus comment' prior: 106067849! ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ! !PltAggregateInitializerDomain commentStamp: 'platypus comment' prior: 106068108! ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateInitializerDomain class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateInitializerDomain: self ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-copying'! aggregateInitializerDomainCopyTo: another another fastSetTypes: self types ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerDomainFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setTypes: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerDomainToValues: values values add: self types. ^ values ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTypes: aListOfPltParameterType types := aListOfPltParameterType ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateInitializerDomainFromValues: (super fromValues: values) ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-classifying'! isPltAggregateInitializerDomain ^ true ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateInitializerDomainFromValues: values ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateInitializerDomainToValues: values ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateInitializerDomainCopyTo: another ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateInitializerDomainCopyTo: another ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-set-accessing'! setTypes: aListOfPltParameterType self types: aListOfPltParameterType ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. types := OrderedCollection new ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateInitializerDomainToValues: (super toValues: values) ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-accessing'! types ^ types ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-accessing'! types: aListOfPltParameterType types := aListOfPltParameterType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltParameterType as: OrderedCollection ] ! ! !PltAggregateInitializerDomain methodsFor: 'platypus-generated-with-context-accessing'! typesUsingContext: aContext ^ self types ! ! !PltAggregateInitializerElement commentStamp: 'platypus comment' prior: 106068358! ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateInitializerElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateInitializerElement: self ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-copying'! aggregateInitializerElementCopyTo: another another fastSetOwner: self owner. another fastSetVal: self val. another fastSetRepetition: self repetition ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. self setVal: valuesloc removeFirst. self setRepetition: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerElementToValues: values values add: self owner. values add: self val. values add: self repetition. ^ values ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltAggregateInitializer owner := aPltAggregateInitializer ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRepetition: aPltExpression repetition := aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: aPltExpression val := aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateInitializerElementFromValues: (super fromValues: values) ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-classifying'! isPltAggregateInitializerElement ^ true ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateInitializerElementFromValues: values ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateInitializerElementToValues: values ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! owner: aPltAggregateInitializer owner := aPltAggregateInitializer ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateInitializerElementCopyTo: another ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateInitializerElementCopyTo: another ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! repetition ^ repetition ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! repetition: aPltExpression repetition := aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-with-context-accessing'! repetitionUsingContext: aContext ^ self repetition ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltAggregateInitializer self owner: aPltAggregateInitializer ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-set-accessing'! setRepetition: aPltExpression self repetition: aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-set-accessing'! setVal: aPltExpression self val: aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil. val := nil. repetition := nil ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateInitializerElementToValues: (super toValues: values) ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-accessing'! val: aPltExpression val := aPltExpression ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-group-accessing'! val: aPltExpression repetition: aPltExpression1 self setVal:aPltExpression. self setRepetition:aPltExpression1. ! ! !PltAggregateInitializerElement methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !PltAggregateType commentStamp: 'platypus comment' prior: 106068658! ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ! !PltAggregateType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateType: self ! ! !PltAggregateType methodsFor: 'platypus-generated-copying'! aggregateTypeCopyTo: another another fastSetElementType: self elementType ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! aggregateTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setElementType: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! aggregateTypeToValues: values values add: self elementType. ^ values ! ! !PltAggregateType methodsFor: 'platypus-generated-accessing'! elementType ^ elementType ! ! !PltAggregateType methodsFor: 'platypus-generated-accessing'! elementType: aPltParameterType elementType := aPltParameterType ! ! !PltAggregateType methodsFor: 'platypus-generated-with-context-accessing'! elementTypeUsingContext: aContext ^ self elementType ! ! !PltAggregateType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetElementType: aPltParameterType elementType := aPltParameterType ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateTypeFromValues: (super fromValues: values) ! ! !PltAggregateType methodsFor: 'platypus-generated-classifying'! isPltAggregateType ^ true ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateTypeFromValues: values ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateTypeToValues: values ! ! !PltAggregateType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateTypeCopyTo: another ! ! !PltAggregateType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateTypeCopyTo: another ! ! !PltAggregateType methodsFor: 'platypus-generated-set-accessing'! setElementType: aPltParameterType self elementType: aPltParameterType ! ! !PltAggregateType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. elementType := nil ! ! !PltAggregateType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateTypeToValues: (super toValues: values) ! ! !PltAggregationType commentStamp: 'platypus comment' prior: 106068950! ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ! !PltAggregationType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregationType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregationType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregationType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregationType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregationType: self ! ! !PltAggregationType methodsFor: 'platypus-generated-copying'! aggregationTypeCopyTo: another another fastSetLowerBound: self lowerBound. another fastSetUpperBound: self upperBound. another fastSetIsGeneralType: self isGeneralType ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! aggregationTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLowerBound: valuesloc removeFirst. self setUpperBound: valuesloc removeFirst. self setIsGeneralType: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! aggregationTypeToValues: values values add: self lowerBound. values add: self upperBound. values add: self isGeneralType. ^ values ! ! !PltAggregationType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIsGeneralType: aBoolean isGeneralType := aBoolean ! ! !PltAggregationType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLowerBound: aPltBound lowerBound := aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUpperBound: aPltBound upperBound := aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregationTypeFromValues: (super fromValues: values) ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! isGeneralType ^ isGeneralType ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! isGeneralType: aBoolean isGeneralType := aBoolean ! ! !PltAggregationType methodsFor: 'platypus-generated-with-context-accessing'! isGeneralTypeUsingContext: aContext ^ self isGeneralType ! ! !PltAggregationType methodsFor: 'platypus-generated-classifying'! isPltAggregationType ^ true ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregationTypeFromValues: values ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregationTypeToValues: values ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! lowerBound ^ lowerBound ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! lowerBound: aPltBound lowerBound := aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing' stamp: 'AlainPlantec 6/13/2012 13:09'! lowerBound: aPltBound upperBound: aPltBound1 isGeneralType: aBoolean self setLowerBound:aPltBound. self setUpperBound:aPltBound1. self setIsGeneralType:aBoolean. ! ! !PltAggregationType methodsFor: 'platypus-generated-with-context-accessing'! lowerBoundUsingContext: aContext ^ self lowerBound ! ! !PltAggregationType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregationType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregationTypeCopyTo: another ! ! !PltAggregationType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregationTypeCopyTo: another ! ! !PltAggregationType methodsFor: 'platypus-generated-set-accessing'! setIsGeneralType: aBoolean self isGeneralType: aBoolean ! ! !PltAggregationType methodsFor: 'platypus-generated-set-accessing'! setLowerBound: aPltBound self lowerBound: aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-set-accessing'! setUpperBound: aPltBound self upperBound: aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. lowerBound := nil. upperBound := nil. isGeneralType := false ! ! !PltAggregationType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregationTypeToValues: (super toValues: values) ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! upperBound ^ upperBound ! ! !PltAggregationType methodsFor: 'platypus-generated-accessing'! upperBound: aPltBound upperBound := aPltBound ! ! !PltAggregationType methodsFor: 'platypus-generated-with-context-accessing'! upperBoundUsingContext: aContext ^ self upperBound ! ! !PltArrayType commentStamp: 'platypus comment' prior: 106069293! ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ! !PltArrayType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltArrayType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltArrayType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltArrayType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltArrayType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptArrayType: self ! ! !PltArrayType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltArrayType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltArrayType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptArrayTypeUsingContext: aContext ! ! !PltArrayType methodsFor: 'platypus-generated-copying'! arrayTypeCopyTo: another another fastSetUniqueFlag: self uniqueFlag. another fastSetOptionalFlag: self optionalFlag. another fastSetLowerBound: self lowerBound. another fastSetUpperBound: self upperBound ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! arrayTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setUniqueFlag: valuesloc removeFirst. self setOptionalFlag: valuesloc removeFirst. self setLowerBound: valuesloc removeFirst. self setUpperBound: valuesloc removeFirst. ^ valuesloc ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! arrayTypeToValues: values values add: self uniqueFlag. values add: self optionalFlag. values add: self lowerBound. values add: self upperBound. ^ values ! ! !PltArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLowerBound: aPltBound lowerBound := aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOptionalFlag: aBoolean optionalFlag := aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUniqueFlag: aBoolean uniqueFlag := aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUpperBound: aPltBound upperBound := aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self arrayTypeFromValues: (super fromValues: values) ! ! !PltArrayType methodsFor: 'platypus-generated-classifying'! isPltArrayType ^ true ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self arrayTypeFromValues: values ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self arrayTypeToValues: values ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! lowerBound ^ lowerBound ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! lowerBound: aPltBound lowerBound := aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-with-context-accessing'! lowerBoundUsingContext: aContext ^ self lowerBound ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! optionalFlag ^ optionalFlag ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! optionalFlag: aBoolean optionalFlag := aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-with-context-accessing'! optionalFlagUsingContext: aContext ^ self optionalFlag ! ! !PltArrayType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltArrayType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self arrayTypeCopyTo: another ! ! !PltArrayType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self arrayTypeCopyTo: another ! ! !PltArrayType methodsFor: 'platypus-generated-set-accessing'! setLowerBound: aPltBound self lowerBound: aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-set-accessing'! setOptionalFlag: aBoolean self optionalFlag: aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-set-accessing'! setUniqueFlag: aBoolean self uniqueFlag: aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-set-accessing'! setUpperBound: aPltBound self upperBound: aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. uniqueFlag := false. optionalFlag := false. lowerBound := nil. upperBound := nil ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self arrayTypeToValues: (super toValues: values) ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! uniqueFlag ^ uniqueFlag ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! uniqueFlag: aBoolean uniqueFlag := aBoolean ! ! !PltArrayType methodsFor: 'platypus-generated-group-accessing' stamp: 'AlainPlantec 6/13/2012 13:09'! uniqueFlag: aBoolean optionalFlag: aBoolean1 lowerBound: aPltBound upperBound: aPltBound1 self setUniqueFlag:aBoolean. self setOptionalFlag:aBoolean1. self setLowerBound:aPltBound. self setUpperBound:aPltBound1. ! ! !PltArrayType methodsFor: 'platypus-generated-with-context-accessing'! uniqueFlagUsingContext: aContext ^ self uniqueFlag ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! upperBound ^ upperBound ! ! !PltArrayType methodsFor: 'platypus-generated-accessing'! upperBound: aPltBound upperBound := aPltBound ! ! !PltArrayType methodsFor: 'platypus-generated-with-context-accessing'! upperBoundUsingContext: aContext ^ self upperBound ! ! !PltVariableSizeAggregationType commentStamp: 'platypus comment' prior: 106069679! ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ! !PltBagType commentStamp: 'platypus comment' prior: 106069933! ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ! !PltBagType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBagType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBagType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBagType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBagType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBagType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBagType: self ! ! !PltBagType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltBagType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltBagType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptBagTypeUsingContext: aContext ! ! !PltBagType methodsFor: 'platypus-generated-copying'! bagTypeCopyTo: another ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! bagTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! bagTypeToValues: values ^ values ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self bagTypeFromValues: (super fromValues: values) ! ! !PltBagType methodsFor: 'platypus-generated-classifying'! isPltBagType ^ true ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self bagTypeFromValues: values ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self bagTypeToValues: values ! ! !PltBagType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBagType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self bagTypeCopyTo: another ! ! !PltBagType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self bagTypeCopyTo: another ! ! !PltBagType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltBagType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self bagTypeToValues: (super toValues: values) ! ! !PltListType commentStamp: 'platypus comment' prior: 106070172! ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ! !PltListType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltListType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltListType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltListType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltListType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltListType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptListType: self ! ! !PltListType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltListType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltListType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptListTypeUsingContext: aContext ! ! !PltListType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUniqueFlag: aBoolean uniqueFlag := aBoolean ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self listTypeFromValues: (super fromValues: values) ! ! !PltListType methodsFor: 'platypus-generated-classifying'! isPltListType ^ true ! ! !PltListType methodsFor: 'platypus-generated-copying'! listTypeCopyTo: another another fastSetUniqueFlag: self uniqueFlag ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! listTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setUniqueFlag: valuesloc removeFirst. ^ valuesloc ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! listTypeToValues: values values add: self uniqueFlag. ^ values ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self listTypeFromValues: values ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self listTypeToValues: values ! ! !PltListType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltListType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self listTypeCopyTo: another ! ! !PltListType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self listTypeCopyTo: another ! ! !PltListType methodsFor: 'platypus-generated-set-accessing'! setUniqueFlag: aBoolean self uniqueFlag: aBoolean ! ! !PltListType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. uniqueFlag := false ! ! !PltListType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self listTypeToValues: (super toValues: values) ! ! !PltListType methodsFor: 'platypus-generated-accessing'! uniqueFlag ^ uniqueFlag ! ! !PltListType methodsFor: 'platypus-generated-accessing'! uniqueFlag: aBoolean uniqueFlag := aBoolean ! ! !PltListType methodsFor: 'platypus-generated-with-context-accessing'! uniqueFlagUsingContext: aContext ^ self uniqueFlag ! ! !PltSetType commentStamp: 'platypus comment' prior: 106070436! ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ! !PltSetType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSetType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSetType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSetType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSetType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSetType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSetType: self ! ! !PltSetType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltSetType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltSetType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptSetTypeUsingContext: aContext ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self setTypeFromValues: (super fromValues: values) ! ! !PltSetType methodsFor: 'platypus-generated-classifying'! isPltSetType ^ true ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self setTypeFromValues: values ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self setTypeToValues: values ! ! !PltSetType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSetType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self setTypeCopyTo: another ! ! !PltSetType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self setTypeCopyTo: another ! ! !PltSetType methodsFor: 'platypus-generated-copying'! setTypeCopyTo: another ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! setTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! setTypeToValues: values ^ values ! ! !PltSetType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSetType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self setTypeToValues: (super toValues: values) ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltVariableSizeAggregationType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptVariableSizeAggregationType: self ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self variableSizeAggregationTypeFromValues: (super fromValues: values) ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-classifying'! isPltVariableSizeAggregationType ^ true ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self variableSizeAggregationTypeFromValues: values ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self variableSizeAggregationTypeToValues: values ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self variableSizeAggregationTypeCopyTo: another ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self variableSizeAggregationTypeCopyTo: another ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self variableSizeAggregationTypeToValues: (super toValues: values) ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-copying'! variableSizeAggregationTypeCopyTo: another ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! variableSizeAggregationTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltVariableSizeAggregationType methodsFor: 'platypus-generated-group-accessing'! variableSizeAggregationTypeToValues: values ^ values ! ! !PltGeneralAggregateType commentStamp: 'platypus comment' prior: 106070687! ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGeneralAggregateType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGeneralAggregateType: self ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTypeLabel: aString typeLabel := aString ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self generalAggregateTypeFromValues: (super fromValues: values) ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-copying'! generalAggregateTypeCopyTo: another another fastSetTypeLabel: self typeLabel ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! generalAggregateTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setTypeLabel: valuesloc removeFirst. ^ valuesloc ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! generalAggregateTypeToValues: values values add: self typeLabel. ^ values ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-classifying'! isPltGeneralAggregateType ^ true ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self generalAggregateTypeFromValues: values ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self generalAggregateTypeToValues: values ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self generalAggregateTypeCopyTo: another ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self generalAggregateTypeCopyTo: another ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-set-accessing'! setTypeLabel: aString self typeLabel: aString ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. typeLabel := nil ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self generalAggregateTypeToValues: (super toValues: values) ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-accessing'! typeLabel ^ typeLabel ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-accessing'! typeLabel: aString typeLabel := aString ! ! !PltGeneralAggregateType methodsFor: 'platypus-generated-with-context-accessing'! typeLabelUsingContext: aContext ^ self typeLabel ! ! !PltAliasStatementVariable commentStamp: 'platypus comment' prior: 106070909! ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAliasStatementVariable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAliasStatementVariable: self ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! aliasIdent ^ aliasIdent ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! aliasIdent: aString aliasIdent := aString ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! aliasIdent: aString ref: aPltAssignable owner: aPltAliasStatement self setAliasIdent:aString. self setRef:aPltAssignable. self setOwner:aPltAliasStatement. ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-with-context-accessing'! aliasIdentUsingContext: aContext ^ self aliasIdent ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-copying'! aliasStatementVariableCopyTo: another another fastSetAliasIdent: self aliasIdent. another fastSetRef: self ref. another fastSetOwner: self owner ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! aliasStatementVariableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAliasIdent: valuesloc removeFirst. self setRef: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! aliasStatementVariableToValues: values values add: self aliasIdent. values add: self ref. values add: self owner. ^ values ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAliasIdent: aString aliasIdent := aString ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltAliasStatement owner := aPltAliasStatement ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltAssignable ref := aPltAssignable ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aliasStatementVariableFromValues: (super fromValues: values) ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-classifying'! isPltAliasStatementVariable ^ true ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aliasStatementVariableFromValues: values ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aliasStatementVariableToValues: values ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! owner: aPltAliasStatement owner := aPltAliasStatement ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aliasStatementVariableCopyTo: another ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aliasStatementVariableCopyTo: another ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-accessing'! ref: aPltAssignable ref := aPltAssignable ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-set-accessing'! setAliasIdent: aString self aliasIdent: aString ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltAliasStatement self owner: aPltAliasStatement ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-set-accessing'! setRef: aPltAssignable self ref: aPltAssignable ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. aliasIdent := ''. ref := nil. owner := nil ! ! !PltAliasStatementVariable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aliasStatementVariableToValues: (super toValues: values) ! ! !PltAnonymousVariable commentStamp: 'platypus comment' prior: 106071191! ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; ! !PltAnonymousVariable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAnonymousVariable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAnonymousVariable: self ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-copying'! anonymousVariableCopyTo: another another fastSetDomain: self domain ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! anonymousVariableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! anonymousVariableToValues: values values add: self domain. ^ values ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-accessing'! domain: aPltParameterType domain := aPltParameterType ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltParameterType domain := aPltParameterType ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self anonymousVariableFromValues: (super fromValues: values) ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-classifying'! isPltAnonymousVariable ^ true ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self anonymousVariableFromValues: values ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self anonymousVariableToValues: values ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self anonymousVariableCopyTo: another ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self anonymousVariableCopyTo: another ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltParameterType self domain: aPltParameterType ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil ! ! !PltAnonymousVariable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self anonymousVariableToValues: (super toValues: values) ! ! !PltAssignable commentStamp: 'platypus comment' prior: 106071397! ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ! !PltAssignable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAssignable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAssignable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAssignable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltAssignable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAssignable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAssignable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAssignable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAssignable: self ! ! !PltAssignable methodsFor: 'platypus-generated-copying'! assignableCopyTo: another another fastSetHead: self head. another fastSetQualifiers: self qualifiers ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! assignableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setHead: valuesloc removeFirst. self setQualifiers: valuesloc removeFirst. ^ valuesloc ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! assignableToValues: values values add: self head. values add: self qualifiers. ^ values ! ! !PltAssignable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetHead: aPltIdentifier head := aPltIdentifier ! ! !PltAssignable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetQualifiers: aListOfPltQualifier qualifiers := aListOfPltQualifier ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self assignableFromValues: (super fromValues: values) ! ! !PltAssignable methodsFor: 'platypus-generated-accessing'! head ^ head ! ! !PltAssignable methodsFor: 'platypus-generated-accessing'! head: aPltIdentifier head := aPltIdentifier ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! head: aPltIdentifier qualifiers: aListOfPltQualifier self setHead:aPltIdentifier. self setQualifiers:aListOfPltQualifier. ! ! !PltAssignable methodsFor: 'platypus-generated-with-context-accessing'! headUsingContext: aContext ^ self head ! ! !PltAssignable methodsFor: 'platypus-generated-classifying'! isPltAssignable ^ true ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self assignableFromValues: values ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self assignableToValues: values ! ! !PltAssignable methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltAssignable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAssignable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self assignableCopyTo: another ! ! !PltAssignable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self assignableCopyTo: another ! ! !PltAssignable methodsFor: 'platypus-generated-accessing'! qualifiers ^ qualifiers ! ! !PltAssignable methodsFor: 'platypus-generated-accessing'! qualifiers: aListOfPltQualifier qualifiers := aListOfPltQualifier ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltQualifier as: OrderedCollection ] ! ! !PltAssignable methodsFor: 'platypus-generated-with-context-accessing'! qualifiersUsingContext: aContext ^ self qualifiers ! ! !PltAssignable methodsFor: 'platypus-generated-set-accessing'! setHead: aPltIdentifier self head: aPltIdentifier ! ! !PltAssignable methodsFor: 'platypus-generated-set-accessing'! setQualifiers: aListOfPltQualifier self qualifiers: aListOfPltQualifier ! ! !PltAssignable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. head := nil. qualifiers := OrderedCollection new ! ! !PltAssignable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self assignableToValues: (super toValues: values) ! ! !PltAttribute commentStamp: 'platypus comment' prior: 106071621! ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ! !PltAttribute class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAttribute: self ! ! !PltAttribute methodsFor: 'platypus-generated-copying'! attributeCopyTo: another another fastSetName: self name. another fastSetOwner: self owner. another fastSetDomain: self domain. another fastSetRedeclaring: self redeclaring ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! attributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setOwner: valuesloc removeFirst. self setDomain: valuesloc removeFirst. self setRedeclaring: valuesloc removeFirst. ^ valuesloc ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! attributeToValues: values values add: self name. values add: self owner. values add: self domain. values add: self redeclaring. ^ values ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! domain: aPltBaseType domain := aPltBaseType ! ! !PltAttribute methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltBaseType domain := aPltBaseType ! ! !PltAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltEntityDefinition owner := aPltEntityDefinition ! ! !PltAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRedeclaring: aPltAttributeReference redeclaring := aPltAttributeReference ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self attributeFromValues: (super fromValues: values) ! ! !PltAttribute methodsFor: 'platypus-generated-classifying'! isPltAttribute ^ true ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self attributeFromValues: values ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self attributeToValues: values ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! name: aString owner: aPltEntityDefinition domain: aPltBaseType redeclaring: aPltAttributeReference self setName:aString. self setOwner:aPltEntityDefinition. self setDomain:aPltBaseType. self setRedeclaring:aPltAttributeReference. ! ! !PltAttribute methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! owner: aPltEntityDefinition owner := aPltEntityDefinition ! ! !PltAttribute methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self attributeCopyTo: another ! ! !PltAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self attributeCopyTo: another ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! redeclaring ^ redeclaring ! ! !PltAttribute methodsFor: 'platypus-generated-accessing'! redeclaring: aPltAttributeReference redeclaring := aPltAttributeReference ! ! !PltAttribute methodsFor: 'platypus-generated-with-context-accessing'! redeclaringUsingContext: aContext ^ self redeclaring ! ! !PltAttribute methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltBaseType self domain: aPltBaseType ! ! !PltAttribute methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltAttribute methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltEntityDefinition self owner: aPltEntityDefinition ! ! !PltAttribute methodsFor: 'platypus-generated-set-accessing'! setRedeclaring: aPltAttributeReference self redeclaring: aPltAttributeReference ! ! !PltAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. owner := nil. domain := nil. redeclaring := nil ! ! !PltAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self attributeToValues: (super toValues: values) ! ! !PltDerivedAttribute commentStamp: 'platypus comment' prior: 106072024! ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ! !PltDerivedAttribute class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDerivedAttribute: self ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptDerivedAttributeUsingContext: aContext ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-accessing'! assign ^ assign ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-accessing'! assign: aPltExpression assign := aPltExpression ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-with-context-accessing'! assignUsingContext: aContext ^ self assign ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-copying'! derivedAttributeCopyTo: another another fastSetAssign: self assign ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! derivedAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAssign: valuesloc removeFirst. ^ valuesloc ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! derivedAttributeToValues: values values add: self assign. ^ values ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAssign: aPltExpression assign := aPltExpression ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self derivedAttributeFromValues: (super fromValues: values) ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-classifying'! isPltDerivedAttribute ^ true ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self derivedAttributeFromValues: values ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self derivedAttributeToValues: values ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self derivedAttributeCopyTo: another ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self derivedAttributeCopyTo: another ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-set-accessing'! setAssign: aPltExpression self assign: aPltExpression ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. assign := nil ! ! !PltDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self derivedAttributeToValues: (super toValues: values) ! ! !PltExplicitAttribute commentStamp: 'platypus comment' prior: 106072291! ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ! !PltExplicitAttribute class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExplicitAttribute: self ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptExplicitAttributeUsingContext: aContext ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-copying'! explicitAttributeCopyTo: another another fastSetOptionalFlag: self optionalFlag ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! explicitAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOptionalFlag: valuesloc removeFirst. ^ valuesloc ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! explicitAttributeToValues: values values add: self optionalFlag. ^ values ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOptionalFlag: aBoolean optionalFlag := aBoolean ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self explicitAttributeFromValues: (super fromValues: values) ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-classifying'! isPltExplicitAttribute ^ true ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self explicitAttributeFromValues: values ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self explicitAttributeToValues: values ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-accessing'! optionalFlag ^ optionalFlag ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-accessing'! optionalFlag: aBoolean optionalFlag := aBoolean ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-with-context-accessing'! optionalFlagUsingContext: aContext ^ self optionalFlag ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self explicitAttributeCopyTo: another ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self explicitAttributeCopyTo: another ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-set-accessing'! setOptionalFlag: aBoolean self optionalFlag: aBoolean ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. optionalFlag := false ! ! !PltExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self explicitAttributeToValues: (super toValues: values) ! ! !PltInverseAttribute commentStamp: 'platypus comment' prior: 106072563! ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ! !PltInverseAttribute class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInverseAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInverseAttribute: self ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptInverseAttributeUsingContext: aContext ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! domain ^ self domainUsingContext: self class context ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! domainUsingContext: aContext ^ self domainUsingContext: aContext receiver: self ! ! !PltInverseAttribute methodsFor: 'platypus-generated-deriving'! domainUsingContext: aContext receiver: aReceiver ^ aReceiver invertedAttr entityRefUsingContext: aContext ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! duplicates ^ duplicates ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! duplicates: aBoolean duplicates := aBoolean ! ! !PltInverseAttribute methodsFor: 'platypus-generated-with-context-accessing'! duplicatesUsingContext: aContext ^ self duplicates ! ! !PltInverseAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDuplicates: aBoolean duplicates := aBoolean ! ! !PltInverseAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInvertedAttr: aPltAttributeReference invertedAttr := aPltAttributeReference ! ! !PltInverseAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMaxCardinality: aPltBound maxCardinality := aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMinCardinality: aPltBound minCardinality := aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self inverseAttributeFromValues: (super fromValues: values) ! ! !PltInverseAttribute methodsFor: 'platypus-generated-copying'! inverseAttributeCopyTo: another another fastSetInvertedAttr: self invertedAttr. another fastSetMinCardinality: self minCardinality. another fastSetMaxCardinality: self maxCardinality. another fastSetDuplicates: self duplicates ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! inverseAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setInvertedAttr: valuesloc removeFirst. self setMinCardinality: valuesloc removeFirst. self setMaxCardinality: valuesloc removeFirst. self setDuplicates: valuesloc removeFirst. ^ valuesloc ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! inverseAttributeToValues: values values add: self invertedAttr. values add: self minCardinality. values add: self maxCardinality. values add: self duplicates. ^ values ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! invertedAttr ^ invertedAttr ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! invertedAttr: aPltAttributeReference invertedAttr := aPltAttributeReference ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! invertedAttr: aPltAttributeReference minCardinality: aPltBound maxCardinality: aPltBound1 duplicates: aBoolean self setInvertedAttr:aPltAttributeReference. self setMinCardinality:aPltBound. self setMaxCardinality:aPltBound1. self setDuplicates:aBoolean. ! ! !PltInverseAttribute methodsFor: 'platypus-generated-with-context-accessing'! invertedAttrUsingContext: aContext ^ self invertedAttr ! ! !PltInverseAttribute methodsFor: 'platypus-generated-classifying'! isPltInverseAttribute ^ true ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self inverseAttributeFromValues: values ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self inverseAttributeToValues: values ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! maxCardinality ^ maxCardinality ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! maxCardinality: aPltBound maxCardinality := aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-with-context-accessing'! maxCardinalityUsingContext: aContext ^ self maxCardinality ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! minCardinality ^ minCardinality ! ! !PltInverseAttribute methodsFor: 'platypus-generated-accessing'! minCardinality: aPltBound minCardinality := aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-with-context-accessing'! minCardinalityUsingContext: aContext ^ self minCardinality ! ! !PltInverseAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInverseAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self inverseAttributeCopyTo: another ! ! !PltInverseAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self inverseAttributeCopyTo: another ! ! !PltInverseAttribute methodsFor: 'platypus-generated-set-accessing'! setDuplicates: aBoolean self duplicates: aBoolean ! ! !PltInverseAttribute methodsFor: 'platypus-generated-set-accessing'! setInvertedAttr: aPltAttributeReference self invertedAttr: aPltAttributeReference ! ! !PltInverseAttribute methodsFor: 'platypus-generated-set-accessing'! setMaxCardinality: aPltBound self maxCardinality: aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-set-accessing'! setMinCardinality: aPltBound self minCardinality: aPltBound ! ! !PltInverseAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. invertedAttr := nil. minCardinality := nil. maxCardinality := nil. duplicates := false ! ! !PltInverseAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self inverseAttributeToValues: (super toValues: values) ! ! !PltBound commentStamp: 'platypus comment' prior: 106073009! ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltBound class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBound class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBound class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBound class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBound class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBound methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBound: self ! ! !PltBound methodsFor: 'platypus-generated-copying'! boundCopyTo: another ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! boundFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! boundToValues: values ^ values ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self boundFromValues: (super fromValues: values) ! ! !PltBound methodsFor: 'platypus-generated-classifying'! isPltBound ^ true ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self boundFromValues: values ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self boundToValues: values ! ! !PltBound methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltBound methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBound methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self boundCopyTo: another ! ! !PltBound methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self boundCopyTo: another ! ! !PltBound methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltBound methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self boundToValues: (super toValues: values) ! ! !PltIntegerBound commentStamp: 'platypus comment' prior: 106073258! ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ! !PltIntegerBound class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIntegerBound class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIntegerBound class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIntegerBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltIntegerBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIntegerBound class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIntegerBound class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIntegerBound methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIntegerBound: self ! ! !PltIntegerBound methodsFor: 'platypus-generated-accessing'! boundValue ^ boundValue ! ! !PltIntegerBound methodsFor: 'platypus-generated-accessing'! boundValue: anInteger boundValue := anInteger ! ! !PltIntegerBound methodsFor: 'platypus-generated-with-context-accessing'! boundValueUsingContext: aContext ^ self boundValue ! ! !PltIntegerBound methodsFor: 'platypus-generated-fast-set-accessing'! fastSetBoundValue: anInteger boundValue := anInteger ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self integerBoundFromValues: (super fromValues: values) ! ! !PltIntegerBound methodsFor: 'platypus-generated-copying'! integerBoundCopyTo: another another fastSetBoundValue: self boundValue ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! integerBoundFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setBoundValue: valuesloc removeFirst. ^ valuesloc ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! integerBoundToValues: values values add: self boundValue. ^ values ! ! !PltIntegerBound methodsFor: 'platypus-generated-classifying'! isPltIntegerBound ^ true ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self integerBoundFromValues: values ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self integerBoundToValues: values ! ! !PltIntegerBound methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIntegerBound methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self integerBoundCopyTo: another ! ! !PltIntegerBound methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self integerBoundCopyTo: another ! ! !PltIntegerBound methodsFor: 'platypus-generated-set-accessing'! setBoundValue: anInteger self boundValue: anInteger ! ! !PltIntegerBound methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. boundValue := 0 ! ! !PltIntegerBound methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self integerBoundToValues: (super toValues: values) ! ! !PltPopulationDependentBound commentStamp: 'platypus comment' prior: 106073457! ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPopulationDependentBound class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPopulationDependentBound: self ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-accessing'! boundValue ^ boundValue ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-accessing'! boundValue: aPltExpression boundValue := aPltExpression ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-with-context-accessing'! boundValueUsingContext: aContext ^ self boundValue ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-fast-set-accessing'! fastSetBoundValue: aPltExpression boundValue := aPltExpression ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self populationDependentBoundFromValues: (super fromValues: values) ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-classifying'! isPltPopulationDependentBound ^ true ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self populationDependentBoundFromValues: values ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self populationDependentBoundToValues: values ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self populationDependentBoundCopyTo: another ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self populationDependentBoundCopyTo: another ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-copying'! populationDependentBoundCopyTo: another another fastSetBoundValue: self boundValue ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! populationDependentBoundFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setBoundValue: valuesloc removeFirst. ^ valuesloc ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! populationDependentBoundToValues: values values add: self boundValue. ^ values ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-set-accessing'! setBoundValue: aPltExpression self boundValue: aPltExpression ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. boundValue := nil ! ! !PltPopulationDependentBound methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self populationDependentBoundToValues: (super toValues: values) ! ! !PltCaseAction commentStamp: 'platypus comment' prior: 106073658! ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ! !PltCaseAction class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltCaseAction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltCaseAction class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltCaseAction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltCaseAction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltCaseAction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltCaseAction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltCaseAction methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCaseAction: self ! ! !PltCaseAction methodsFor: 'platypus-generated-accessing'! action ^ action ! ! !PltCaseAction methodsFor: 'platypus-generated-accessing'! action: aPltStatement action := aPltStatement ! ! !PltCaseAction methodsFor: 'platypus-generated-with-context-accessing'! actionUsingContext: aContext ^ self action ! ! !PltCaseAction methodsFor: 'platypus-generated-copying'! caseActionCopyTo: another another fastSetLabels: self labels. another fastSetAction: self action ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! caseActionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLabels: valuesloc removeFirst. self setAction: valuesloc removeFirst. ^ valuesloc ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! caseActionToValues: values values add: self labels. values add: self action. ^ values ! ! !PltCaseAction methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAction: aPltStatement action := aPltStatement ! ! !PltCaseAction methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLabels: aListOfPltExpression labels := aListOfPltExpression ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self caseActionFromValues: (super fromValues: values) ! ! !PltCaseAction methodsFor: 'platypus-generated-classifying'! isPltCaseAction ^ true ! ! !PltCaseAction methodsFor: 'platypus-generated-accessing'! labels ^ labels ! ! !PltCaseAction methodsFor: 'platypus-generated-accessing'! labels: aListOfPltExpression labels := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! labels: aListOfPltExpression action: aPltStatement self setLabels:aListOfPltExpression. self setAction:aPltStatement. ! ! !PltCaseAction methodsFor: 'platypus-generated-with-context-accessing'! labelsUsingContext: aContext ^ self labels ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self caseActionFromValues: values ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self caseActionToValues: values ! ! !PltCaseAction methodsFor: 'platypus-generated-accessing'! owner ^owner! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! owner: aPltCaseStatement labels: aListOfPltExpression action: aPltStatement self setOwner:aPltCaseStatement. self setLabels:aListOfPltExpression. self setAction:aPltStatement. ! ! !PltCaseAction methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltCaseAction methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self caseActionCopyTo: another ! ! !PltCaseAction methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self caseActionCopyTo: another ! ! !PltCaseAction methodsFor: 'platypus-generated-set-accessing'! setAction: aPltStatement self action: aPltStatement ! ! !PltCaseAction methodsFor: 'platypus-generated-set-accessing'! setLabels: aListOfPltExpression self labels: aListOfPltExpression ! ! !PltCaseAction methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. labels := OrderedCollection new. action := nil ! ! !PltCaseAction methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self caseActionToValues: (super toValues: values) ! ! !PltConstantDefinition commentStamp: 'platypus comment' prior: 106073890! ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ! !PltConstantDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltConstantDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltConstantDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptConstantDefinition: self ! ! !PltConstantDefinition methodsFor: 'platypus-generated-copying'! constantDefinitionCopyTo: another another fastSetName: self name. another fastSetDomain: self domain. another fastSetInitializer: self initializer. another fastSetOwner: self owner ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! constantDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setDomain: valuesloc removeFirst. self setInitializer: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! constantDefinitionToValues: values values add: self name. values add: self domain. values add: self initializer. values add: self owner. ^ values ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! domain: aPltBaseType domain := aPltBaseType ! ! !PltConstantDefinition methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltConstantDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltBaseType domain := aPltBaseType ! ! !PltConstantDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInitializer: aPltExpression initializer := aPltExpression ! ! !PltConstantDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltConstantDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltContextDefinition owner := aPltContextDefinition ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self constantDefinitionFromValues: (super fromValues: values) ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! initializer ^ initializer ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! initializer: aPltExpression initializer := aPltExpression ! ! !PltConstantDefinition methodsFor: 'platypus-generated-with-context-accessing'! initializerUsingContext: aContext ^ self initializer ! ! !PltConstantDefinition methodsFor: 'platypus-generated-classifying'! isPltConstantDefinition ^ true ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self constantDefinitionFromValues: values ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self constantDefinitionToValues: values ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! name: aString domain: aPltBaseType initializer: aPltExpression owner: aPltContextDefinition self setName:aString. self setDomain:aPltBaseType. self setInitializer:aPltExpression. self setOwner:aPltContextDefinition. ! ! !PltConstantDefinition methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltConstantDefinition methodsFor: 'platypus-generated-accessing'! owner: aPltContextDefinition owner := aPltContextDefinition ! ! !PltConstantDefinition methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltConstantDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltConstantDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self constantDefinitionCopyTo: another ! ! !PltConstantDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self constantDefinitionCopyTo: another ! ! !PltConstantDefinition methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltBaseType self domain: aPltBaseType ! ! !PltConstantDefinition methodsFor: 'platypus-generated-set-accessing'! setInitializer: aPltExpression self initializer: aPltExpression ! ! !PltConstantDefinition methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltConstantDefinition methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltContextDefinition self owner: aPltContextDefinition ! ! !PltConstantDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. domain := nil. initializer := nil. owner := nil ! ! !PltConstantDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self constantDefinitionToValues: (super toValues: values) ! ! !PltContextDefinition commentStamp: 'platypus comment' prior: 106074192! ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ! !PltContextDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltContextDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltContextDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltContextDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltContextDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltContextDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltContextDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltContextDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptContextDefinition: self ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! algorithmes ^ algorithmes ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! algorithmes: aListOfPltAlgorithmDeclaration algorithmes := aListOfPltAlgorithmDeclaration ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltAlgorithmDeclaration as: OrderedCollection ] ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! algorithmesUsingContext: aContext ^ self algorithmes ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! constants ^ constants ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! constants: aListOfPltConstantDefinition constants := aListOfPltConstantDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltConstantDefinition as: OrderedCollection ] ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! constantsUsingContext: aContext ^ self constants ! ! !PltContextDefinition methodsFor: 'platypus-generated-copying'! contextDefinitionCopyTo: another another fastSetName: self name. another fastSetConstants: self constants. another fastSetTypes: self types. another fastSetEntities: self entities. another fastSetAlgorithmes: self algorithmes. another fastSetOwner: self owner ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! contextDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setConstants: valuesloc removeFirst. self setTypes: valuesloc removeFirst. self setEntities: valuesloc removeFirst. self setAlgorithmes: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! contextDefinitionToValues: values values add: self name. values add: self constants. values add: self types. values add: self entities. values add: self algorithmes. values add: self owner. ^ values ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! entities ^ entities ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! entities: aListOfPltEntityDefinition entities := aListOfPltEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltEntityDefinition as: OrderedCollection ] ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! entitiesUsingContext: aContext ^ self entities ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAlgorithmes: aListOfPltAlgorithmDeclaration algorithmes := aListOfPltAlgorithmDeclaration ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetConstants: aListOfPltConstantDefinition constants := aListOfPltConstantDefinition ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetEntities: aListOfPltEntityDefinition entities := aListOfPltEntityDefinition ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltContextOwner owner := aPltContextOwner ! ! !PltContextDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTypes: aListOfPltDefinedType types := aListOfPltDefinedType ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self contextDefinitionFromValues: (super fromValues: values) ! ! !PltContextDefinition methodsFor: 'platypus-generated-classifying'! isPltContextDefinition ^ true ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self contextDefinitionFromValues: values ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self contextDefinitionToValues: values ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! name: aString constants: aListOfPltConstantDefinition types: aListOfPltDefinedType entities: aListOfPltEntityDefinition algorithmes: aListOfPltAlgorithmDeclaration owner: aPltContextOwner self setName:aString. self setConstants:aListOfPltConstantDefinition. self setTypes:aListOfPltDefinedType. self setEntities:aListOfPltEntityDefinition. self setAlgorithmes:aListOfPltAlgorithmDeclaration. self setOwner:aPltContextOwner. ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! owner: aPltContextOwner owner := aPltContextOwner ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltContextDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltContextDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self contextDefinitionCopyTo: another ! ! !PltContextDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self contextDefinitionCopyTo: another ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setAlgorithmes: aListOfPltAlgorithmDeclaration self algorithmes: aListOfPltAlgorithmDeclaration ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setConstants: aListOfPltConstantDefinition self constants: aListOfPltConstantDefinition ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setEntities: aListOfPltEntityDefinition self entities: aListOfPltEntityDefinition ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltContextOwner self owner: aPltContextOwner ! ! !PltContextDefinition methodsFor: 'platypus-generated-set-accessing'! setTypes: aListOfPltDefinedType self types: aListOfPltDefinedType ! ! !PltContextDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. constants := OrderedCollection new. types := OrderedCollection new. entities := OrderedCollection new. algorithmes := OrderedCollection new. owner := nil ! ! !PltContextDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self contextDefinitionToValues: (super toValues: values) ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! types ^ types ! ! !PltContextDefinition methodsFor: 'platypus-generated-accessing'! types: aListOfPltDefinedType types := aListOfPltDefinedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltDefinedType as: OrderedCollection ] ! ! !PltContextDefinition methodsFor: 'platypus-generated-with-context-accessing'! typesUsingContext: aContext ^ self types ! ! !PltSchemaDefinition commentStamp: 'platypus comment' prior: 106074684! ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; ! !PltSchemaDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSchemaDefinition: self ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptSchemaDefinitionUsingContext: aContext ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetGlobalRules: aListOfPltGlobalRule globalRules := aListOfPltGlobalRule ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInterface: aListOfPltExternalSchema interface := aListOfPltExternalSchema ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRemarkReferences: aListOfPltRemarkReference remarkReferences := aListOfPltRemarkReference ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self schemaDefinitionFromValues: (super fromValues: values) ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! globalRules ^ globalRules ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! globalRules: aListOfPltGlobalRule globalRules := aListOfPltGlobalRule ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltGlobalRule as: OrderedCollection ] ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! globalRules: aListOfPltGlobalRule interface: aListOfPltExternalSchema remarkReferences: aListOfPltRemarkReference self setGlobalRules:aListOfPltGlobalRule. self setInterface:aListOfPltExternalSchema. self setRemarkReferences:aListOfPltRemarkReference. ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-with-context-accessing'! globalRulesUsingContext: aContext ^ self globalRules ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! interface ^ interface ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! interface: aListOfPltExternalSchema interface := aListOfPltExternalSchema ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExternalSchema as: OrderedCollection ] ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-with-context-accessing'! interfaceUsingContext: aContext ^ self interface ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-classifying'! isPltSchemaDefinition ^ true ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self schemaDefinitionFromValues: values ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self schemaDefinitionToValues: values ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-with-context-accessing'! mappingsUsingContext:aContext ^ self mappings ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self schemaDefinitionCopyTo: another ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self schemaDefinitionCopyTo: another ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! remarkReferences ^ remarkReferences ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-accessing'! remarkReferences: aListOfPltRemarkReference remarkReferences := aListOfPltRemarkReference ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltRemarkReference as: OrderedCollection ] ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-with-context-accessing'! remarkReferencesUsingContext: aContext ^ self remarkReferences ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-copying'! schemaDefinitionCopyTo: another another fastSetGlobalRules: self globalRules. another fastSetInterface: self interface. another fastSetRemarkReferences: self remarkReferences ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! schemaDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setGlobalRules: valuesloc removeFirst. self setInterface: valuesloc removeFirst. self setRemarkReferences: valuesloc removeFirst. ^ valuesloc ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! schemaDefinitionToValues: values values add: self globalRules. values add: self interface. values add: self remarkReferences. ^ values ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-set-accessing'! setGlobalRules: aListOfPltGlobalRule self globalRules: aListOfPltGlobalRule ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-set-accessing'! setInterface: aListOfPltExternalSchema self interface: aListOfPltExternalSchema ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-set-accessing'! setRemarkReferences: aListOfPltRemarkReference self remarkReferences: aListOfPltRemarkReference ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. globalRules := OrderedCollection new. interface := OrderedCollection new. remarkReferences := OrderedCollection new ! ! !PltSchemaDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self schemaDefinitionToValues: (super toValues: values) ! ! !PltStatementsContainer commentStamp: 'platypus comment' prior: 106075062! ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ! !PltAlgorithmDeclaration commentStamp: 'platypus comment' prior: 106075341! ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAlgorithmDeclaration class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAlgorithmDeclaration: self ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-copying'! algorithmDeclarationCopyTo: another another fastSetFormalParameters: self formalParameters ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! algorithmDeclarationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setFormalParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! algorithmDeclarationToValues: values values add: self formalParameters. ^ values ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFormalParameters: aListOfPltParameterDefinition formalParameters := aListOfPltParameterDefinition ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-accessing'! formalParameters ^ formalParameters ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-accessing'! formalParameters: aListOfPltParameterDefinition formalParameters := aListOfPltParameterDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltParameterDefinition as: OrderedCollection ] ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-with-context-accessing'! formalParametersUsingContext: aContext ^ self formalParameters ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self algorithmDeclarationFromValues: (super fromValues: values) ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-classifying'! isPltAlgorithmDeclaration ^ true ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self algorithmDeclarationFromValues: values ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self algorithmDeclarationToValues: values ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self algorithmDeclarationCopyTo: another ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self algorithmDeclarationCopyTo: another ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-set-accessing'! setFormalParameters: aListOfPltParameterDefinition self formalParameters: aListOfPltParameterDefinition ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. formalParameters := OrderedCollection new ! ! !PltAlgorithmDeclaration methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self algorithmDeclarationToValues: (super toValues: values) ! ! !PltFunctionDeclaration commentStamp: 'platypus comment' prior: 106075606! ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFunctionDeclaration class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptFunctionDeclaration: self ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptFunctionDeclarationUsingContext: aContext ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-fast-set-accessing'! fastSetReturnType: aPltParameterType returnType := aPltParameterType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self functionDeclarationFromValues: (super fromValues: values) ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-copying'! functionDeclarationCopyTo: another another fastSetReturnType: self returnType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! functionDeclarationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setReturnType: valuesloc removeFirst. ^ valuesloc ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! functionDeclarationToValues: values values add: self returnType. ^ values ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-classifying'! isPltFunctionDeclaration ^ true ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self functionDeclarationFromValues: values ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self functionDeclarationToValues: values ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self functionDeclarationCopyTo: another ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self functionDeclarationCopyTo: another ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-accessing'! returnType ^ returnType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-accessing'! returnType: aPltParameterType returnType := aPltParameterType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-with-context-accessing'! returnTypeUsingContext: aContext ^ self returnType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-set-accessing'! setReturnType: aPltParameterType self returnType: aPltParameterType ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. returnType := nil ! ! !PltFunctionDeclaration methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self functionDeclarationToValues: (super toValues: values) ! ! !PltProcedureDeclaration commentStamp: 'platypus comment' prior: 106075903! ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltProcedureDeclaration class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptProcedureDeclaration: self ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptProcedureDeclarationUsingContext: aContext ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self procedureDeclarationFromValues: (super fromValues: values) ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-classifying'! isPltProcedureDeclaration ^ true ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self procedureDeclarationFromValues: values ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self procedureDeclarationToValues: values ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self procedureDeclarationCopyTo: another ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self procedureDeclarationCopyTo: another ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-copying'! procedureDeclarationCopyTo: another ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! procedureDeclarationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! procedureDeclarationToValues: values ^ values ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltProcedureDeclaration methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self procedureDeclarationToValues: (super toValues: values) ! ! !PltGlobalRule commentStamp: 'platypus comment' prior: 106076161! ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ! !PltGlobalRule class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGlobalRule class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGlobalRule class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGlobalRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltGlobalRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGlobalRule class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGlobalRule class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGlobalRule methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGlobalRule: self ! ! !PltGlobalRule methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltGlobalRule methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltGlobalRule methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptGlobalRuleUsingContext: aContext ! ! !PltGlobalRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetForEntities: aListOfPltEntityInstancesSet forEntities := aListOfPltEntityInstancesSet ! ! !PltGlobalRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltSchemaDefinition owner := aPltSchemaDefinition ! ! !PltGlobalRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWhereRules: aListOfPltWhereRule whereRules := aListOfPltWhereRule ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! forEntities ^ forEntities ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! forEntities: aListOfPltEntityInstancesSet forEntities := aListOfPltEntityInstancesSet ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltEntityInstancesSet as: OrderedCollection ] ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! forEntities: aListOfPltEntityInstancesSet whereRules: aListOfPltWhereRule owner: aPltSchemaDefinition self setForEntities:aListOfPltEntityInstancesSet. self setWhereRules:aListOfPltWhereRule. self setOwner:aPltSchemaDefinition. ! ! !PltGlobalRule methodsFor: 'platypus-generated-with-context-accessing'! forEntitiesUsingContext: aContext ^ self forEntities ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self globalRuleFromValues: (super fromValues: values) ! ! !PltGlobalRule methodsFor: 'platypus-generated-copying'! globalRuleCopyTo: another another fastSetForEntities: self forEntities. another fastSetWhereRules: self whereRules. another fastSetOwner: self owner ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! globalRuleFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setForEntities: valuesloc removeFirst. self setWhereRules: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! globalRuleToValues: values values add: self forEntities. values add: self whereRules. values add: self owner. ^ values ! ! !PltGlobalRule methodsFor: 'platypus-generated-classifying'! isPltGlobalRule ^ true ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self globalRuleFromValues: values ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self globalRuleToValues: values ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! owner: aPltSchemaDefinition owner := aPltSchemaDefinition ! ! !PltGlobalRule methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltGlobalRule methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGlobalRule methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self globalRuleCopyTo: another ! ! !PltGlobalRule methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self globalRuleCopyTo: another ! ! !PltGlobalRule methodsFor: 'platypus-generated-set-accessing'! setForEntities: aListOfPltEntityInstancesSet self forEntities: aListOfPltEntityInstancesSet ! ! !PltGlobalRule methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltSchemaDefinition self owner: aPltSchemaDefinition ! ! !PltGlobalRule methodsFor: 'platypus-generated-set-accessing'! setWhereRules: aListOfPltWhereRule self whereRules: aListOfPltWhereRule ! ! !PltGlobalRule methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. forEntities := OrderedCollection new. whereRules := OrderedCollection new. owner := nil ! ! !PltGlobalRule methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self globalRuleToValues: (super toValues: values) ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! whereRules ^ whereRules ! ! !PltGlobalRule methodsFor: 'platypus-generated-accessing'! whereRules: aListOfPltWhereRule whereRules := aListOfPltWhereRule ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltWhereRule as: OrderedCollection ] ! ! !PltGlobalRule methodsFor: 'platypus-generated-with-context-accessing'! whereRulesUsingContext: aContext ^ self whereRules ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltStatementsContainer class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltStatementsContainer methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptStatementsContainer: self ! ! !PltStatementsContainer methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLocals: aListOfPltLocalVariable locals := aListOfPltLocalVariable ! ! !PltStatementsContainer methodsFor: 'platypus-generated-fast-set-accessing'! fastSetStatements: aListOfPltStatement statements := aListOfPltStatement ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self statementsContainerFromValues: (super fromValues: values) ! ! !PltStatementsContainer methodsFor: 'platypus-generated-classifying'! isPltStatementsContainer ^ true ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self statementsContainerFromValues: values ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self statementsContainerToValues: values ! ! !PltStatementsContainer methodsFor: 'platypus-generated-accessing'! locals ^ locals ! ! !PltStatementsContainer methodsFor: 'platypus-generated-accessing'! locals: aListOfPltLocalVariable locals := aListOfPltLocalVariable ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltLocalVariable as: OrderedCollection ] ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! locals: aListOfPltLocalVariable statements: aListOfPltStatement self setLocals:aListOfPltLocalVariable. self setStatements:aListOfPltStatement. ! ! !PltStatementsContainer methodsFor: 'platypus-generated-with-context-accessing'! localsUsingContext: aContext ^ self locals ! ! !PltStatementsContainer methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltStatementsContainer methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self statementsContainerCopyTo: another ! ! !PltStatementsContainer methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self statementsContainerCopyTo: another ! ! !PltStatementsContainer methodsFor: 'platypus-generated-set-accessing'! setLocals: aListOfPltLocalVariable self locals: aListOfPltLocalVariable ! ! !PltStatementsContainer methodsFor: 'platypus-generated-set-accessing'! setStatements: aListOfPltStatement self statements: aListOfPltStatement ! ! !PltStatementsContainer methodsFor: 'platypus-generated-accessing'! statements ^ statements ! ! !PltStatementsContainer methodsFor: 'platypus-generated-accessing'! statements: aListOfPltStatement statements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltStatementsContainer methodsFor: 'platypus-generated-copying'! statementsContainerCopyTo: another another fastSetLocals: self locals. another fastSetStatements: self statements ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! statementsContainerFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLocals: valuesloc removeFirst. self setStatements: valuesloc removeFirst. ^ valuesloc ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! statementsContainerToValues: values values add: self locals. values add: self statements. ^ values ! ! !PltStatementsContainer methodsFor: 'platypus-generated-with-context-accessing'! statementsUsingContext: aContext ^ self statements ! ! !PltStatementsContainer methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. locals := OrderedCollection new. statements := OrderedCollection new ! ! !PltStatementsContainer methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self statementsContainerToValues: (super toValues: values) ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDictionaryInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDictionaryInstance: self ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-copying'! dictionaryInstanceCopyTo: another ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! dictionaryInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! dictionaryInstanceToValues: values ^ values ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self dictionaryInstanceFromValues: (super fromValues: values) ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-deriving'! handled ^ self handledUsingContext: self class context ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-deriving'! handledUsingContext: aContext ^ self handledUsingContext: aContext receiver: self ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-deriving'! handledUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-classifying'! isPltDictionaryInstance ^ true ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self dictionaryInstanceFromValues: values ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self dictionaryInstanceToValues: values ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self dictionaryInstanceCopyTo: another ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self dictionaryInstanceCopyTo: another ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltDictionaryInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self dictionaryInstanceToValues: (super toValues: values) ! ! !PltDictionaryInstanceReference commentStamp: 'platypus comment' prior: 106076568! ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ! !PltAttributeReference commentStamp: 'platypus comment' prior: 106076887! ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ! !PltAttributeReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAttributeReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAttributeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAttributeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAttributeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAttributeReference: self ! ! !PltAttributeReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltAttributeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltAttributeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptAttributeReferenceUsingContext: aContext ! ! !PltAttributeReference methodsFor: 'platypus-generated-copying'! attributeReferenceCopyTo: another another fastSetRef: self ref. another fastSetEntityRef: self entityRef ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! attributeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. self setEntityRef: valuesloc removeFirst. ^ valuesloc ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! attributeReferenceToValues: values values add: self ref. values add: self entityRef. ^ values ! ! !PltAttributeReference methodsFor: 'platypus-generated-accessing'! entityRef ^ entityRef ! ! !PltAttributeReference methodsFor: 'platypus-generated-accessing'! entityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltAttributeReference methodsFor: 'platypus-generated-with-context-accessing'! entityRefUsingContext: aContext ^ self entityRef ! ! !PltAttributeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetEntityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltAttributeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltAttribute ref := aPltAttribute ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self attributeReferenceFromValues: (super fromValues: values) ! ! !PltAttributeReference methodsFor: 'platypus-generated-classifying'! isPltAttributeReference ^ true ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self attributeReferenceFromValues: values ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self attributeReferenceToValues: values ! ! !PltAttributeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAttributeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self attributeReferenceCopyTo: another ! ! !PltAttributeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self attributeReferenceCopyTo: another ! ! !PltAttributeReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltAttributeReference methodsFor: 'platypus-generated-accessing'! ref: aPltAttribute ref := aPltAttribute ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! ref: aPltAttribute entityRef: aPltEntityDefinitionReference self setRef:aPltAttribute. self setEntityRef:aPltEntityDefinitionReference. ! ! !PltAttributeReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltAttributeReference methodsFor: 'platypus-generated-set-accessing'! setEntityRef: aPltEntityDefinitionReference self entityRef: aPltEntityDefinitionReference ! ! !PltAttributeReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltAttribute self ref: aPltAttribute ! ! !PltAttributeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil. entityRef := nil ! ! !PltAttributeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self attributeReferenceToValues: (super toValues: values) ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDictionaryInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDictionaryInstanceReference: self ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-copying'! dictionaryInstanceReferenceCopyTo: another another fastSetRef: self ref. another fastSetName: self name ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! dictionaryInstanceReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. self setName: valuesloc removeFirst. ^ valuesloc ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! dictionaryInstanceReferenceToValues: values values add: self ref. values add: self name. ^ values ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltDictionaryInstance ref := aPltDictionaryInstance ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self dictionaryInstanceReferenceFromValues: (super fromValues: values) ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-deriving'! handled ^ self handledUsingContext: self class context ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-deriving'! handledUsingContext: aContext ^ self handledUsingContext: aContext receiver: self ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-deriving'! handledUsingContext: aContext receiver: aReceiver ^ aReceiver refUsingContext: aContext ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-classifying'! isPltDictionaryInstanceReference ^ true ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self dictionaryInstanceReferenceFromValues: values ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self dictionaryInstanceReferenceToValues: values ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self dictionaryInstanceReferenceCopyTo: another ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self dictionaryInstanceReferenceCopyTo: another ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-accessing'! ref: aPltDictionaryInstance ref := aPltDictionaryInstance ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! ref: aPltDictionaryInstance name: aString self setRef:aPltDictionaryInstance. self setName:aString. ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltDictionaryInstance self ref: aPltDictionaryInstance ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil. name := '' ! ! !PltDictionaryInstanceReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self dictionaryInstanceReferenceToValues: (super toValues: values) ! ! !PltNamedTypeReference commentStamp: 'platypus comment' prior: 106077279! ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ! !PltDefinedTypeReference commentStamp: 'platypus comment' prior: 106077607! ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDefinedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDefinedTypeReference: self ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptDefinedTypeReferenceUsingContext: aContext ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-copying'! definedTypeReferenceCopyTo: another another fastSetRef: self ref ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! definedTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! definedTypeReferenceToValues: values values add: self ref. ^ values ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltDefinedType ref := aPltDefinedType ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self definedTypeReferenceFromValues: (super fromValues: values) ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-classifying'! isPltDefinedTypeReference ^ true ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self definedTypeReferenceFromValues: values ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self definedTypeReferenceToValues: values ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self definedTypeReferenceCopyTo: another ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self definedTypeReferenceCopyTo: another ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-accessing'! ref: aPltDefinedType ref := aPltDefinedType ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltDefinedType self ref: aPltDefinedType ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil ! ! !PltDefinedTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self definedTypeReferenceToValues: (super toValues: values) ! ! !PltEntityDefinitionReference commentStamp: 'platypus comment' prior: 106077954! ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityDefinitionReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityDefinitionReference: self ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptEntityDefinitionReferenceUsingContext: aContext ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-copying'! entityDefinitionReferenceCopyTo: another another fastSetRef: self ref ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! entityDefinitionReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! entityDefinitionReferenceToValues: values values add: self ref. ^ values ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltEntityDefinition ref := aPltEntityDefinition ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityDefinitionReferenceFromValues: (super fromValues: values) ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-classifying'! isPltEntityDefinitionReference ^ true ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityDefinitionReferenceFromValues: values ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityDefinitionReferenceToValues: values ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityDefinitionReferenceCopyTo: another ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityDefinitionReferenceCopyTo: another ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-accessing'! ref: aPltEntityDefinition ref := aPltEntityDefinition ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltEntityDefinition self ref: aPltEntityDefinition ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil ! ! !PltEntityDefinitionReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityDefinitionReferenceToValues: (super toValues: values) ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNamedTypeReference: self ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptNamedTypeReferenceUsingContext: aContext ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltNamedType ref := aPltNamedType ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self namedTypeReferenceFromValues: (super fromValues: values) ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-classifying'! isPltNamedTypeReference ^ true ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self namedTypeReferenceFromValues: values ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self namedTypeReferenceToValues: values ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-copying'! namedTypeReferenceCopyTo: another another fastSetRef: self ref ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! namedTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! namedTypeReferenceToValues: values values add: self ref. ^ values ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self namedTypeReferenceCopyTo: another ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self namedTypeReferenceCopyTo: another ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-accessing'! ref: aPltNamedType ref := aPltNamedType ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltNamedType self ref: aPltNamedType ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil ! ! !PltNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self namedTypeReferenceToValues: (super toValues: values) ! ! !PltDomainEquivalentItem commentStamp: 'platypus comment' prior: 106078311! ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDomainEquivalentItem class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainEquivalentItem: self ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-copying'! domainEquivalentItemCopyTo: another another fastSetName: self name. another fastSetExternalItemId: self externalItemId. another fastSetNativeItem: self nativeItem ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! domainEquivalentItemFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setExternalItemId: valuesloc removeFirst. self setNativeItem: valuesloc removeFirst. ^ valuesloc ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! domainEquivalentItemToValues: values values add: self name. values add: self externalItemId. values add: self nativeItem. ^ values ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! externalItemId ^ externalItemId ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! externalItemId: aString externalItemId := aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-with-context-accessing'! externalItemIdUsingContext: aContext ^ self externalItemId ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExternalItemId: aString externalItemId := aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-fast-set-accessing'! fastSetNativeItem: aPltDeclaration nativeItem := aPltDeclaration ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainEquivalentItemFromValues: (super fromValues: values) ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-classifying'! isPltDomainEquivalentItem ^ true ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainEquivalentItemFromValues: values ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainEquivalentItemToValues: values ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! name: aString externalItemId: aString1 nativeItem: aPltDeclaration self setName:aString. self setExternalItemId:aString1. self setNativeItem:aPltDeclaration. ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! nativeItem ^ nativeItem ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-accessing'! nativeItem: aPltDeclaration nativeItem := aPltDeclaration ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-with-context-accessing'! nativeItemUsingContext: aContext ^ self nativeItem ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainEquivalentItemCopyTo: another ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainEquivalentItemCopyTo: another ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-set-accessing'! setExternalItemId: aString self externalItemId: aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-set-accessing'! setNativeItem: aPltDeclaration self nativeItem: aPltDeclaration ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. externalItemId := ''. nativeItem := nil ! ! !PltDomainEquivalentItem methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainEquivalentItemToValues: (super toValues: values) ! ! !PltEnumerationType commentStamp: 'platypus comment' prior: 106078572! ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ! !PltEnumerationType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEnumerationType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEnumerationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltEnumerationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEnumerationType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEnumerationType: self ! ! !PltEnumerationType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltEnumerationType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltEnumerationType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptEnumerationTypeUsingContext: aContext ! ! !PltEnumerationType methodsFor: 'platypus-generated-accessing'! elements ^ elements ! ! !PltEnumerationType methodsFor: 'platypus-generated-accessing'! elements: aListOfString elements := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! elements: aListOfString owner: aPltDefinedType self setElements:aListOfString. self setOwner:aPltDefinedType. ! ! !PltEnumerationType methodsFor: 'platypus-generated-with-context-accessing'! elementsUsingContext: aContext ^ self elements ! ! !PltEnumerationType methodsFor: 'platypus-generated-copying'! enumerationTypeCopyTo: another another fastSetElements: self elements. another fastSetOwner: self owner ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! enumerationTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setElements: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! enumerationTypeToValues: values values add: self elements. values add: self owner. ^ values ! ! !PltEnumerationType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetElements: aListOfString elements := aListOfString ! ! !PltEnumerationType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltDefinedType owner := aPltDefinedType ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self enumerationTypeFromValues: (super fromValues: values) ! ! !PltEnumerationType methodsFor: 'platypus-generated-classifying'! isPltEnumerationType ^ true ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self enumerationTypeFromValues: values ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self enumerationTypeToValues: values ! ! !PltEnumerationType methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltEnumerationType methodsFor: 'platypus-generated-accessing'! owner: aPltDefinedType owner := aPltDefinedType ! ! !PltEnumerationType methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltEnumerationType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEnumerationType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self enumerationTypeCopyTo: another ! ! !PltEnumerationType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self enumerationTypeCopyTo: another ! ! !PltEnumerationType methodsFor: 'platypus-generated-set-accessing'! setElements: aListOfString self elements: aListOfString ! ! !PltEnumerationType methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltDefinedType self owner: aPltDefinedType ! ! !PltEnumerationType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. elements := OrderedCollection new. owner := nil ! ! !PltEnumerationType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self enumerationTypeToValues: (super toValues: values) ! ! !PltExpression commentStamp: 'platypus comment' prior: 106078907! ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltAggregateData commentStamp: 'platypus comment' prior: 106079103! ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ! !PltAggregateData class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateData class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateData class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltAggregateData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateData class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateData class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateData methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateData: self ! ! !PltAggregateData methodsFor: 'platypus-generated-copying'! aggregateDataCopyTo: another ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! aggregateDataFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! aggregateDataToValues: values ^ values ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateDataFromValues: (super fromValues: values) ! ! !PltAggregateData methodsFor: 'platypus-generated-classifying'! isPltAggregateData ^ true ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateDataFromValues: values ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateDataToValues: values ! ! !PltAggregateData methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateData methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateDataCopyTo: another ! ! !PltAggregateData methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateDataCopyTo: another ! ! !PltAggregateData methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltAggregateData methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateDataToValues: (super toValues: values) ! ! !PltAggregateInitializer commentStamp: 'platypus comment' prior: 106079360! ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ! !PltAggregateInitializer class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateInitializer class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateInitializer: self ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-copying'! aggregateInitializerCopyTo: another another fastSetContents: self contents ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! aggregateInitializerToValues: values values add: self contents. ^ values ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-accessing'! contents: aListOfPltAggregateInitializerElement contents := aListOfPltAggregateInitializerElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltAggregateInitializerElement as: OrderedCollection ] ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aListOfPltAggregateInitializerElement contents := aListOfPltAggregateInitializerElement ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateInitializerFromValues: (super fromValues: values) ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-classifying'! isPltAggregateInitializer ^ true ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateInitializerFromValues: values ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateInitializerToValues: values ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateInitializerCopyTo: another ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateInitializerCopyTo: another ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-set-accessing'! setContents: aListOfPltAggregateInitializerElement self contents: aListOfPltAggregateInitializerElement ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. contents := OrderedCollection new ! ! !PltAggregateInitializer methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateInitializerToValues: (super toValues: values) ! ! !PltAggregateInstance commentStamp: 'platypus comment' prior: 106079596! ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ! !PltAggregateInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggregateInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggregateInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregateInstance: self ! ! !PltAggregateInstance methodsFor: 'platypus-generated-copying'! aggregateInstanceCopyTo: another another fastSetLowerBound: self lowerBound. another fastSetUpperBound: self upperBound ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! aggregateInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLowerBound: valuesloc removeFirst. self setUpperBound: valuesloc removeFirst. ^ valuesloc ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! aggregateInstanceToValues: values values add: self lowerBound. values add: self upperBound. ^ values ! ! !PltAggregateInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLowerBound: aPltIntegerLiteral lowerBound := aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUpperBound: aPltIntegerLiteral upperBound := aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregateInstanceFromValues: (super fromValues: values) ! ! !PltAggregateInstance methodsFor: 'platypus-generated-classifying'! isPltAggregateInstance ^ true ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregateInstanceFromValues: values ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregateInstanceToValues: values ! ! !PltAggregateInstance methodsFor: 'platypus-generated-accessing'! lowerBound ^ lowerBound ! ! !PltAggregateInstance methodsFor: 'platypus-generated-accessing'! lowerBound: aPltIntegerLiteral lowerBound := aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing' stamp: 'AlainPlantec 6/13/2012 13:08'! lowerBound: aPltIntegerLiteral upperBound: aPltIntegerLiteral1 self setLowerBound:aPltIntegerLiteral. self setUpperBound:aPltIntegerLiteral1. ! ! !PltAggregateInstance methodsFor: 'platypus-generated-with-context-accessing'! lowerBoundUsingContext: aContext ^ self lowerBound ! ! !PltAggregateInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggregateInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregateInstanceCopyTo: another ! ! !PltAggregateInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregateInstanceCopyTo: another ! ! !PltAggregateInstance methodsFor: 'platypus-generated-set-accessing'! setLowerBound: aPltIntegerLiteral self lowerBound: aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-set-accessing'! setUpperBound: aPltIntegerLiteral self upperBound: aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. lowerBound := nil. upperBound := nil ! ! !PltAggregateInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregateInstanceToValues: (super toValues: values) ! ! !PltAggregateInstance methodsFor: 'platypus-generated-accessing'! upperBound ^ upperBound ! ! !PltAggregateInstance methodsFor: 'platypus-generated-accessing'! upperBound: aPltIntegerLiteral upperBound := aPltIntegerLiteral ! ! !PltAggregateInstance methodsFor: 'platypus-generated-with-context-accessing'! upperBoundUsingContext: aContext ^ self upperBound ! ! !PltArrayInstance commentStamp: 'platypus comment' prior: 106079927! ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ! !PltArrayInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltArrayInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltArrayInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltArrayInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltArrayInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltArrayInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltArrayInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltArrayInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptArrayInstance: self ! ! !PltArrayInstance methodsFor: 'platypus-generated-copying'! arrayInstanceCopyTo: another another fastSetContents: self contents ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! arrayInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! arrayInstanceToValues: values values add: self contents. ^ values ! ! !PltArrayInstance methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PltArrayInstance methodsFor: 'platypus-generated-accessing'! contents: aListOfPltExpression contents := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltArrayInstance methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! !PltArrayInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aListOfPltExpression contents := aListOfPltExpression ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self arrayInstanceFromValues: (super fromValues: values) ! ! !PltArrayInstance methodsFor: 'platypus-generated-classifying'! isPltArrayInstance ^ true ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self arrayInstanceFromValues: values ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self arrayInstanceToValues: values ! ! !PltArrayInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltArrayInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self arrayInstanceCopyTo: another ! ! !PltArrayInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self arrayInstanceCopyTo: another ! ! !PltArrayInstance methodsFor: 'platypus-generated-set-accessing'! setContents: aListOfPltExpression self contents: aListOfPltExpression ! ! !PltArrayInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. contents := OrderedCollection new ! ! !PltArrayInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self arrayInstanceToValues: (super toValues: values) ! ! !PltVariableSizeAggregationInstance commentStamp: 'platypus comment' prior: 106080154! ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ! !PltBagInstance commentStamp: 'platypus comment' prior: 106080430! ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ! !PltBagInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBagInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBagInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBagInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltBagInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBagInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBagInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBagInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBagInstance: self ! ! !PltBagInstance methodsFor: 'platypus-generated-copying'! bagInstanceCopyTo: another another fastSetContents: self contents ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! bagInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! bagInstanceToValues: values values add: self contents. ^ values ! ! !PltBagInstance methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PltBagInstance methodsFor: 'platypus-generated-accessing'! contents: aBagOfPltExpression contents := aBagOfPltExpression ifNil: [ Bag new ] ifNotNil: [ aBagOfPltExpression as: Bag ] ! ! !PltBagInstance methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! !PltBagInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aBagOfPltExpression contents := aBagOfPltExpression ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self bagInstanceFromValues: (super fromValues: values) ! ! !PltBagInstance methodsFor: 'platypus-generated-classifying'! isPltBagInstance ^ true ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self bagInstanceFromValues: values ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self bagInstanceToValues: values ! ! !PltBagInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBagInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self bagInstanceCopyTo: another ! ! !PltBagInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self bagInstanceCopyTo: another ! ! !PltBagInstance methodsFor: 'platypus-generated-set-accessing'! setContents: aBagOfPltExpression self contents: aBagOfPltExpression ! ! !PltBagInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. contents := Bag new ! ! !PltBagInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self bagInstanceToValues: (super toValues: values) ! ! !PltListInstance commentStamp: 'platypus comment' prior: 106080651! ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ! !PltListInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltListInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltListInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltListInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltListInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltListInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltListInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltListInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptListInstance: self ! ! !PltListInstance methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PltListInstance methodsFor: 'platypus-generated-accessing'! contents: aListOfPltExpression contents := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltListInstance methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! !PltListInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aListOfPltExpression contents := aListOfPltExpression ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self listInstanceFromValues: (super fromValues: values) ! ! !PltListInstance methodsFor: 'platypus-generated-classifying'! isPltListInstance ^ true ! ! !PltListInstance methodsFor: 'platypus-generated-copying'! listInstanceCopyTo: another another fastSetContents: self contents ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! listInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! listInstanceToValues: values values add: self contents. ^ values ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self listInstanceFromValues: values ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self listInstanceToValues: values ! ! !PltListInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltListInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self listInstanceCopyTo: another ! ! !PltListInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self listInstanceCopyTo: another ! ! !PltListInstance methodsFor: 'platypus-generated-set-accessing'! setContents: aListOfPltExpression self contents: aListOfPltExpression ! ! !PltListInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. contents := OrderedCollection new ! ! !PltListInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self listInstanceToValues: (super toValues: values) ! ! !PltSetInstance commentStamp: 'platypus comment' prior: 106080873! ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; ! !PltSetInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSetInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSetInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSetInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltSetInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSetInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSetInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSetInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSetInstance: self ! ! !PltSetInstance methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PltSetInstance methodsFor: 'platypus-generated-accessing'! contents: aSetOfPltExpression contents := aSetOfPltExpression ifNil: [ Set new ] ifNotNil: [ aSetOfPltExpression as: Set ] ! ! !PltSetInstance methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! !PltSetInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aSetOfPltExpression contents := aSetOfPltExpression ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self setInstanceFromValues: (super fromValues: values) ! ! !PltSetInstance methodsFor: 'platypus-generated-classifying'! isPltSetInstance ^ true ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self setInstanceFromValues: values ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self setInstanceToValues: values ! ! !PltSetInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSetInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self setInstanceCopyTo: another ! ! !PltSetInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self setInstanceCopyTo: another ! ! !PltSetInstance methodsFor: 'platypus-generated-set-accessing'! setContents: aSetOfPltExpression self contents: aSetOfPltExpression ! ! !PltSetInstance methodsFor: 'platypus-generated-copying'! setInstanceCopyTo: another another fastSetContents: self contents ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! setInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! setInstanceToValues: values values add: self contents. ^ values ! ! !PltSetInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. contents := Set new ! ! !PltSetInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self setInstanceToValues: (super toValues: values) ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusAggregateDataSchemaSchemaDefinition singleton ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltVariableSizeAggregationInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptVariableSizeAggregationInstance: self ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self variableSizeAggregationInstanceFromValues: (super fromValues: values) ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-classifying'! isPltVariableSizeAggregationInstance ^ true ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self variableSizeAggregationInstanceFromValues: values ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self variableSizeAggregationInstanceToValues: values ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self variableSizeAggregationInstanceCopyTo: another ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self variableSizeAggregationInstanceCopyTo: another ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self variableSizeAggregationInstanceToValues: (super toValues: values) ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-copying'! variableSizeAggregationInstanceCopyTo: another ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! variableSizeAggregationInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltVariableSizeAggregationInstance methodsFor: 'platypus-generated-group-accessing'! variableSizeAggregationInstanceToValues: values ^ values ! ! !PltBinaryExpression commentStamp: 'platypus comment' prior: 106081098! ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ! !PltArithmeticExpression commentStamp: 'platypus comment' prior: 106081416! ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltArithmeticExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltArithmeticExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptArithmeticExpression: self ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-copying'! arithmeticExpressionCopyTo: another ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! arithmeticExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! arithmeticExpressionToValues: values ^ values ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self arithmeticExpressionFromValues: (super fromValues: values) ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-classifying'! isPltArithmeticExpression ^ true ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self arithmeticExpressionFromValues: values ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self arithmeticExpressionToValues: values ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self arithmeticExpressionCopyTo: another ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self arithmeticExpressionCopyTo: another ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltArithmeticExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self arithmeticExpressionToValues: (super toValues: values) ! ! !PltDivExpression commentStamp: 'platypus comment' prior: 106081621! ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ! !PltDivExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDivExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDivExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDivExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDivExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDivExpression: self ! ! !PltDivExpression methodsFor: 'platypus-generated-copying'! divExpressionCopyTo: another ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! divExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! divExpressionToValues: values ^ values ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self divExpressionFromValues: (super fromValues: values) ! ! !PltDivExpression methodsFor: 'platypus-generated-classifying'! isPltDivExpression ^ true ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self divExpressionFromValues: values ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self divExpressionToValues: values ! ! !PltDivExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltDivExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltDivExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ '/' ! ! !PltDivExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDivExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self divExpressionCopyTo: another ! ! !PltDivExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self divExpressionCopyTo: another ! ! !PltDivExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltDivExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self divExpressionToValues: (super toValues: values) ! ! !PltExpoExpression commentStamp: 'platypus comment' prior: 106081861! ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltExpoExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExpoExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExpoExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExpoExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltExpoExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExpoExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExpoExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExpoExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExpoExpression: self ! ! !PltExpoExpression methodsFor: 'platypus-generated-copying'! expoExpressionCopyTo: another ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! expoExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! expoExpressionToValues: values ^ values ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self expoExpressionFromValues: (super fromValues: values) ! ! !PltExpoExpression methodsFor: 'platypus-generated-classifying'! isPltExpoExpression ^ true ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self expoExpressionFromValues: values ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self expoExpressionToValues: values ! ! !PltExpoExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExpoExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self expoExpressionCopyTo: another ! ! !PltExpoExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self expoExpressionCopyTo: another ! ! !PltExpoExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltExpoExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self expoExpressionToValues: (super toValues: values) ! ! !PltMinusExpression commentStamp: 'platypus comment' prior: 106082045! ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ! !PltMinusExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltMinusExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMinusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltMinusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltMinusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMinusExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMinusExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMinusExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMinusExpression: self ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self minusExpressionFromValues: (super fromValues: values) ! ! !PltMinusExpression methodsFor: 'platypus-generated-classifying'! isPltMinusExpression ^ true ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self minusExpressionFromValues: values ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self minusExpressionToValues: values ! ! !PltMinusExpression methodsFor: 'platypus-generated-copying'! minusExpressionCopyTo: another ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! minusExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! minusExpressionToValues: values ^ values ! ! !PltMinusExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltMinusExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltMinusExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ '-' ! ! !PltMinusExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMinusExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self minusExpressionCopyTo: another ! ! !PltMinusExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self minusExpressionCopyTo: another ! ! !PltMinusExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltMinusExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self minusExpressionToValues: (super toValues: values) ! ! !PltModExpression commentStamp: 'platypus comment' prior: 106082286! ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltModExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltModExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltModExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltModExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltModExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltModExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltModExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltModExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptModExpression: self ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self modExpressionFromValues: (super fromValues: values) ! ! !PltModExpression methodsFor: 'platypus-generated-classifying'! isPltModExpression ^ true ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self modExpressionFromValues: values ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self modExpressionToValues: values ! ! !PltModExpression methodsFor: 'platypus-generated-copying'! modExpressionCopyTo: another ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! modExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! modExpressionToValues: values ^ values ! ! !PltModExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltModExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self modExpressionCopyTo: another ! ! !PltModExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self modExpressionCopyTo: another ! ! !PltModExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltModExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self modExpressionToValues: (super toValues: values) ! ! !PltMultExpression commentStamp: 'platypus comment' prior: 106082468! ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ! !PltMultExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltMultExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMultExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltMultExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltMultExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMultExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMultExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMultExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMultExpression: self ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self multExpressionFromValues: (super fromValues: values) ! ! !PltMultExpression methodsFor: 'platypus-generated-classifying'! isPltMultExpression ^ true ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self multExpressionFromValues: values ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self multExpressionToValues: values ! ! !PltMultExpression methodsFor: 'platypus-generated-copying'! multExpressionCopyTo: another ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! multExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! multExpressionToValues: values ^ values ! ! !PltMultExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltMultExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltMultExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ '*' ! ! !PltMultExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMultExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self multExpressionCopyTo: another ! ! !PltMultExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self multExpressionCopyTo: another ! ! !PltMultExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltMultExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self multExpressionToValues: (super toValues: values) ! ! !PltPlusExpression commentStamp: 'platypus comment' prior: 106082709! ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ! !PltPlusExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltPlusExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltPlusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltPlusExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltPlusExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlusExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlusExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPlusExpression: self ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self plusExpressionFromValues: (super fromValues: values) ! ! !PltPlusExpression methodsFor: 'platypus-generated-classifying'! isPltPlusExpression ^ true ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self plusExpressionFromValues: values ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self plusExpressionToValues: values ! ! !PltPlusExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltPlusExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltPlusExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ '+' ! ! !PltPlusExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltPlusExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self plusExpressionCopyTo: another ! ! !PltPlusExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self plusExpressionCopyTo: another ! ! !PltPlusExpression methodsFor: 'platypus-generated-copying'! plusExpressionCopyTo: another ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! plusExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! plusExpressionToValues: values ^ values ! ! !PltPlusExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltPlusExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self plusExpressionToValues: (super toValues: values) ! ! !PltRealDivExpression commentStamp: 'platypus comment' prior: 106082953! ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ! !PltRealDivExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRealDivExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRealDivExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRealDivExpression: self ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self realDivExpressionFromValues: (super fromValues: values) ! ! !PltRealDivExpression methodsFor: 'platypus-generated-classifying'! isPltRealDivExpression ^ true ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self realDivExpressionFromValues: values ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self realDivExpressionToValues: values ! ! !PltRealDivExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRealDivExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self realDivExpressionCopyTo: another ! ! !PltRealDivExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self realDivExpressionCopyTo: another ! ! !PltRealDivExpression methodsFor: 'platypus-generated-copying'! realDivExpressionCopyTo: another ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! realDivExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! realDivExpressionToValues: values ^ values ! ! !PltRealDivExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltRealDivExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self realDivExpressionToValues: (super toValues: values) ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBinaryExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBinaryExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBinaryExpression: self ! ! !PltBinaryExpression methodsFor: 'platypus-generated-copying'! binaryExpressionCopyTo: another another fastSetParenthesis: self parenthesis. another fastSetLeftExpr: self leftExpr. another fastSetRightExpr: self rightExpr ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! binaryExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setParenthesis: valuesloc removeFirst. self setLeftExpr: valuesloc removeFirst. self setRightExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! binaryExpressionToValues: values values add: self parenthesis. values add: self leftExpr. values add: self rightExpr. ^ values ! ! !PltBinaryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLeftExpr: aPltExpression leftExpr := aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParenthesis: aBoolean parenthesis := aBoolean ! ! !PltBinaryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRightExpr: aPltExpression rightExpr := aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self binaryExpressionFromValues: (super fromValues: values) ! ! !PltBinaryExpression methodsFor: 'platypus-generated-classifying'! isPltBinaryExpression ^ true ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! leftExpr ^ leftExpr ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! leftExpr: aPltExpression leftExpr := aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-with-context-accessing'! leftExprUsingContext: aContext ^ self leftExpr ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self binaryExpressionFromValues: values ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self binaryExpressionToValues: values ! ! !PltBinaryExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltBinaryExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltBinaryExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ nil ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! parenthesis ^ parenthesis ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! parenthesis: aBoolean parenthesis := aBoolean ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! parenthesis: aBoolean leftExpr: aPltExpression rightExpr: aPltExpression1 self setParenthesis:aBoolean. self setLeftExpr:aPltExpression. self setRightExpr:aPltExpression1. ! ! !PltBinaryExpression methodsFor: 'platypus-generated-with-context-accessing'! parenthesisUsingContext: aContext ^ self parenthesis ! ! !PltBinaryExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBinaryExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self binaryExpressionCopyTo: another ! ! !PltBinaryExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self binaryExpressionCopyTo: another ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! rightExpr ^ rightExpr ! ! !PltBinaryExpression methodsFor: 'platypus-generated-accessing'! rightExpr: aPltExpression rightExpr := aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-with-context-accessing'! rightExprUsingContext: aContext ^ self rightExpr ! ! !PltBinaryExpression methodsFor: 'platypus-generated-set-accessing'! setLeftExpr: aPltExpression self leftExpr: aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-set-accessing'! setParenthesis: aBoolean self parenthesis: aBoolean ! ! !PltBinaryExpression methodsFor: 'platypus-generated-set-accessing'! setRightExpr: aPltExpression self rightExpr: aPltExpression ! ! !PltBinaryExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. parenthesis := nil. leftExpr := nil. rightExpr := nil ! ! !PltBinaryExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self binaryExpressionToValues: (super toValues: values) ! ! !PltInstanceConstructionExpression commentStamp: 'platypus comment' prior: 106083156! ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInstanceConstructionExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInstanceConstructionExpression: self ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self instanceConstructionExpressionFromValues: (super fromValues: values) ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-copying'! instanceConstructionExpressionCopyTo: another ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! instanceConstructionExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! instanceConstructionExpressionToValues: values ^ values ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-classifying'! isPltInstanceConstructionExpression ^ true ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self instanceConstructionExpressionFromValues: values ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self instanceConstructionExpressionToValues: values ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self instanceConstructionExpressionCopyTo: another ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self instanceConstructionExpressionCopyTo: another ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInstanceConstructionExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self instanceConstructionExpressionToValues: (super toValues: values) ! ! !PltLogicalExpression commentStamp: 'platypus comment' prior: 106083355! ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ! !PltAndExpression commentStamp: 'platypus comment' prior: 106083557! ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ! !PltAndExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAndExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAndExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAndExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltAndExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAndExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAndExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAndExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAndExpression: self ! ! !PltAndExpression methodsFor: 'platypus-generated-copying'! andExpressionCopyTo: another ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! andExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! andExpressionToValues: values ^ values ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self andExpressionFromValues: (super fromValues: values) ! ! !PltAndExpression methodsFor: 'platypus-generated-classifying'! isPltAndExpression ^ true ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self andExpressionFromValues: values ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self andExpressionToValues: values ! ! !PltAndExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltAndExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltAndExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ 'AND' ! ! !PltAndExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAndExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self andExpressionCopyTo: another ! ! !PltAndExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self andExpressionCopyTo: another ! ! !PltAndExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltAndExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self andExpressionToValues: (super toValues: values) ! ! !PltCardinalityExpression commentStamp: 'platypus comment' prior: 106083803! ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ! !PltCardinalityExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltCardinalityExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCardinalityExpression: self ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-accessing'! card1 ^ card1 ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-accessing'! card1: aPltExpression card1 := aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! card1: aPltExpression card2: aPltExpression1 self setCard1:aPltExpression. self setCard2:aPltExpression1. ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-with-context-accessing'! card1UsingContext: aContext ^ self card1 ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-accessing'! card2 ^ card2 ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-accessing'! card2: aPltExpression card2 := aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-with-context-accessing'! card2UsingContext: aContext ^ self card2 ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-copying'! cardinalityExpressionCopyTo: another another fastSetCard1: self card1. another fastSetCard2: self card2 ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! cardinalityExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setCard1: valuesloc removeFirst. self setCard2: valuesloc removeFirst. ^ valuesloc ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! cardinalityExpressionToValues: values values add: self card1. values add: self card2. ^ values ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCard1: aPltExpression card1 := aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCard2: aPltExpression card2 := aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cardinalityExpressionFromValues: (super fromValues: values) ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-classifying'! isPltCardinalityExpression ^ true ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cardinalityExpressionFromValues: values ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cardinalityExpressionToValues: values ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cardinalityExpressionCopyTo: another ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cardinalityExpressionCopyTo: another ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-set-accessing'! setCard1: aPltExpression self card1: aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-set-accessing'! setCard2: aPltExpression self card2: aPltExpression ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. card1 := nil. card2 := nil ! ! !PltCardinalityExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cardinalityExpressionToValues: (super toValues: values) ! ! !PltComparisonExpression commentStamp: 'platypus comment' prior: 106084038! ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltComparisonExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltComparisonExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptComparisonExpression: self ! ! !PltComparisonExpression methodsFor: 'platypus-generated-copying'! comparisonExpressionCopyTo: another ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! comparisonExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! comparisonExpressionToValues: values ^ values ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self comparisonExpressionFromValues: (super fromValues: values) ! ! !PltComparisonExpression methodsFor: 'platypus-generated-classifying'! isPltComparisonExpression ^ true ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self comparisonExpressionFromValues: values ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self comparisonExpressionToValues: values ! ! !PltComparisonExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltComparisonExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self comparisonExpressionCopyTo: another ! ! !PltComparisonExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self comparisonExpressionCopyTo: another ! ! !PltComparisonExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltComparisonExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self comparisonExpressionToValues: (super toValues: values) ! ! !PltEqualExpression commentStamp: 'platypus comment' prior: 106084246! ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEqualExpression: self ! ! !PltEqualExpression methodsFor: 'platypus-generated-copying'! equalExpressionCopyTo: another ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! equalExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! equalExpressionToValues: values ^ values ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self equalExpressionFromValues: (super fromValues: values) ! ! !PltEqualExpression methodsFor: 'platypus-generated-classifying'! isPltEqualExpression ^ true ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self equalExpressionFromValues: values ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self equalExpressionToValues: values ! ! !PltEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self equalExpressionCopyTo: another ! ! !PltEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self equalExpressionCopyTo: another ! ! !PltEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self equalExpressionToValues: (super toValues: values) ! ! !PltGreaterEqualExpression commentStamp: 'platypus comment' prior: 106084438! ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGreaterEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGreaterEqualExpression: self ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self greaterEqualExpressionFromValues: (super fromValues: values) ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-copying'! greaterEqualExpressionCopyTo: another ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! greaterEqualExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! greaterEqualExpressionToValues: values ^ values ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-classifying'! isPltGreaterEqualExpression ^ true ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self greaterEqualExpressionFromValues: values ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self greaterEqualExpressionToValues: values ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self greaterEqualExpressionCopyTo: another ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self greaterEqualExpressionCopyTo: another ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltGreaterEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self greaterEqualExpressionToValues: (super toValues: values) ! ! !PltGreaterThanExpression commentStamp: 'platypus comment' prior: 106084637! ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGreaterThanExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGreaterThanExpression: self ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self greaterThanExpressionFromValues: (super fromValues: values) ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-copying'! greaterThanExpressionCopyTo: another ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! greaterThanExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! greaterThanExpressionToValues: values ^ values ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-classifying'! isPltGreaterThanExpression ^ true ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self greaterThanExpressionFromValues: values ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self greaterThanExpressionToValues: values ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self greaterThanExpressionCopyTo: another ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self greaterThanExpressionCopyTo: another ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltGreaterThanExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self greaterThanExpressionToValues: (super toValues: values) ! ! !PltInstComparisonExpression commentStamp: 'platypus comment' prior: 106084838! ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInstComparisonExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInstComparisonExpression: self ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self instComparisonExpressionFromValues: (super fromValues: values) ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-copying'! instComparisonExpressionCopyTo: another ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! instComparisonExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! instComparisonExpressionToValues: values ^ values ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-classifying'! isPltInstComparisonExpression ^ true ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self instComparisonExpressionFromValues: values ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self instComparisonExpressionToValues: values ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self instComparisonExpressionCopyTo: another ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self instComparisonExpressionCopyTo: another ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInstComparisonExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self instComparisonExpressionToValues: (super toValues: values) ! ! !PltInstEqualExpression commentStamp: 'platypus comment' prior: 106085058! ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ! !PltInstEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInstEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInstEqualExpression: self ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self instEqualExpressionFromValues: (super fromValues: values) ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-copying'! instEqualExpressionCopyTo: another ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! instEqualExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! instEqualExpressionToValues: values ^ values ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-classifying'! isPltInstEqualExpression ^ true ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self instEqualExpressionFromValues: values ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self instEqualExpressionToValues: values ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self instEqualExpressionCopyTo: another ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self instEqualExpressionCopyTo: another ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInstEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self instEqualExpressionToValues: (super toValues: values) ! ! !PltInstNotEqualExpression commentStamp: 'platypus comment' prior: 106085260! ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInstNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInstNotEqualExpression: self ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self instNotEqualExpressionFromValues: (super fromValues: values) ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-copying'! instNotEqualExpressionCopyTo: another ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! instNotEqualExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! instNotEqualExpressionToValues: values ^ values ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-classifying'! isPltInstNotEqualExpression ^ true ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self instNotEqualExpressionFromValues: values ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self instNotEqualExpressionToValues: values ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self instNotEqualExpressionCopyTo: another ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self instNotEqualExpressionCopyTo: another ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInstNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self instNotEqualExpressionToValues: (super toValues: values) ! ! !PltLessEqualExpression commentStamp: 'platypus comment' prior: 106085463! ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltLessEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLessEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLessEqualExpression: self ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self lessEqualExpressionFromValues: (super fromValues: values) ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-classifying'! isPltLessEqualExpression ^ true ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-copying'! lessEqualExpressionCopyTo: another ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! lessEqualExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! lessEqualExpressionToValues: values ^ values ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self lessEqualExpressionFromValues: values ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self lessEqualExpressionToValues: values ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self lessEqualExpressionCopyTo: another ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self lessEqualExpressionCopyTo: another ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLessEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self lessEqualExpressionToValues: (super toValues: values) ! ! !PltLessThanExpression commentStamp: 'platypus comment' prior: 106085656! ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltLessThanExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLessThanExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLessThanExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLessThanExpression: self ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self lessThanExpressionFromValues: (super fromValues: values) ! ! !PltLessThanExpression methodsFor: 'platypus-generated-classifying'! isPltLessThanExpression ^ true ! ! !PltLessThanExpression methodsFor: 'platypus-generated-copying'! lessThanExpressionCopyTo: another ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! lessThanExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! lessThanExpressionToValues: values ^ values ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self lessThanExpressionFromValues: values ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self lessThanExpressionToValues: values ! ! !PltLessThanExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLessThanExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self lessThanExpressionCopyTo: another ! ! !PltLessThanExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self lessThanExpressionCopyTo: another ! ! !PltLessThanExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLessThanExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self lessThanExpressionToValues: (super toValues: values) ! ! !PltNotEqualExpression commentStamp: 'platypus comment' prior: 106085848! ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ! !PltNotEqualExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNotEqualExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNotEqualExpression: self ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self notEqualExpressionFromValues: (super fromValues: values) ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-classifying'! isPltNotEqualExpression ^ true ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self notEqualExpressionFromValues: values ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self notEqualExpressionToValues: values ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-copying'! notEqualExpressionCopyTo: another ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! notEqualExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! notEqualExpressionToValues: values ^ values ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self notEqualExpressionCopyTo: another ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self notEqualExpressionCopyTo: another ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNotEqualExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self notEqualExpressionToValues: (super toValues: values) ! ! !PltInExpression commentStamp: 'platypus comment' prior: 106086034! ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltInExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInExpression: self ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self inExpressionFromValues: (super fromValues: values) ! ! !PltInExpression methodsFor: 'platypus-generated-copying'! inExpressionCopyTo: another ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! inExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! inExpressionToValues: values ^ values ! ! !PltInExpression methodsFor: 'platypus-generated-classifying'! isPltInExpression ^ true ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self inExpressionFromValues: values ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self inExpressionToValues: values ! ! !PltInExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self inExpressionCopyTo: another ! ! !PltInExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self inExpressionCopyTo: another ! ! !PltInExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltInExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self inExpressionToValues: (super toValues: values) ! ! !PltLikeExpression commentStamp: 'platypus comment' prior: 106086212! ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltLikeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLikeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLikeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLikeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLikeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLikeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLikeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLikeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLikeExpression: self ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self likeExpressionFromValues: (super fromValues: values) ! ! !PltLikeExpression methodsFor: 'platypus-generated-classifying'! isPltLikeExpression ^ true ! ! !PltLikeExpression methodsFor: 'platypus-generated-copying'! likeExpressionCopyTo: another ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! likeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! likeExpressionToValues: values ^ values ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self likeExpressionFromValues: values ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self likeExpressionToValues: values ! ! !PltLikeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLikeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self likeExpressionCopyTo: another ! ! !PltLikeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self likeExpressionCopyTo: another ! ! !PltLikeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLikeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self likeExpressionToValues: (super toValues: values) ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLogicalExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLogicalExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLogicalExpression: self ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self logicalExpressionFromValues: (super fromValues: values) ! ! !PltLogicalExpression methodsFor: 'platypus-generated-classifying'! isPltLogicalExpression ^ true ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self logicalExpressionFromValues: values ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self logicalExpressionToValues: values ! ! !PltLogicalExpression methodsFor: 'platypus-generated-copying'! logicalExpressionCopyTo: another ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! logicalExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! logicalExpressionToValues: values ^ values ! ! !PltLogicalExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLogicalExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self logicalExpressionCopyTo: another ! ! !PltLogicalExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self logicalExpressionCopyTo: another ! ! !PltLogicalExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLogicalExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self logicalExpressionToValues: (super toValues: values) ! ! !PltOrExpression commentStamp: 'platypus comment' prior: 106086390! ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ! !PltOrExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltOrExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltOrExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltOrExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltOrExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltOrExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltOrExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltOrExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptOrExpression: self ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self orExpressionFromValues: (super fromValues: values) ! ! !PltOrExpression methodsFor: 'platypus-generated-classifying'! isPltOrExpression ^ true ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self orExpressionFromValues: values ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self orExpressionToValues: values ! ! !PltOrExpression methodsFor: 'platypus-generated-deriving'! opString ^ self opStringUsingContext: self class context ! ! !PltOrExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext ^ self opStringUsingContext: aContext receiver: self ! ! !PltOrExpression methodsFor: 'platypus-generated-deriving'! opStringUsingContext: aContext receiver: aReceiver ^ 'OR' ! ! !PltOrExpression methodsFor: 'platypus-generated-copying'! orExpressionCopyTo: another ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! orExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! orExpressionToValues: values ^ values ! ! !PltOrExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltOrExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self orExpressionCopyTo: another ! ! !PltOrExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self orExpressionCopyTo: another ! ! !PltOrExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltOrExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self orExpressionToValues: (super toValues: values) ! ! !PltXorExpression commentStamp: 'platypus comment' prior: 106086626! ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ! !PltXorExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltXorExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltXorExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltXorExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltXorExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltXorExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltXorExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltXorExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptXorExpression: self ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self xorExpressionFromValues: (super fromValues: values) ! ! !PltXorExpression methodsFor: 'platypus-generated-classifying'! isPltXorExpression ^ true ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self xorExpressionFromValues: values ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self xorExpressionToValues: values ! ! !PltXorExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltXorExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self xorExpressionCopyTo: another ! ! !PltXorExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self xorExpressionCopyTo: another ! ! !PltXorExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self xorExpressionToValues: (super toValues: values) ! ! !PltXorExpression methodsFor: 'platypus-generated-copying'! xorExpressionCopyTo: another ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! xorExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltXorExpression methodsFor: 'platypus-generated-group-accessing'! xorExpressionToValues: values ^ values ! ! !PltEntityInstanceReference commentStamp: 'platypus comment' prior: 106086814! ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityInstanceReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityInstanceReference: self ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-copying'! entityInstanceReferenceCopyTo: another another fastSetPersistentLabel: self persistentLabel. another fastSetRef: self ref ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! entityInstanceReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPersistentLabel: valuesloc removeFirst. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! entityInstanceReferenceToValues: values values add: self persistentLabel. values add: self ref. ^ values ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPersistentLabel: aString persistentLabel := aString ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltEntityInstance ref := aPltEntityInstance ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityInstanceReferenceFromValues: (super fromValues: values) ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-classifying'! isPltEntityInstanceReference ^ true ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityInstanceReferenceFromValues: values ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityInstanceReferenceToValues: values ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-accessing'! persistentLabel ^ persistentLabel ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-accessing'! persistentLabel: aString persistentLabel := aString ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! persistentLabel: aString ref: aPltEntityInstance self setPersistentLabel:aString. self setRef:aPltEntityInstance. ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-with-context-accessing'! persistentLabelUsingContext: aContext ^ self persistentLabel ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityInstanceReferenceCopyTo: another ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityInstanceReferenceCopyTo: another ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-accessing'! ref: aPltEntityInstance ref := aPltEntityInstance ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-set-accessing'! setPersistentLabel: aString self persistentLabel: aString ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-set-accessing'! setRef: aPltEntityInstance self ref: aPltEntityInstance ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. persistentLabel := ''. ref := nil ! ! !PltEntityInstanceReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityInstanceReferenceToValues: (super toValues: values) ! ! !PltEscapedExpression commentStamp: 'platypus comment' prior: 106087051! ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; ! !PltEscapedExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEscapedExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEscapedExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEscapedExpression: self ! ! !PltEscapedExpression methodsFor: 'platypus-generated-copying'! escapedExpressionCopyTo: another another fastSetExpr: self expr ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! escapedExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! escapedExpressionToValues: values values add: self expr. ^ values ! ! !PltEscapedExpression methodsFor: 'platypus-generated-accessing'! expr ^ expr ! ! !PltEscapedExpression methodsFor: 'platypus-generated-accessing'! expr: aPltExpression expr := aPltExpression ! ! !PltEscapedExpression methodsFor: 'platypus-generated-with-context-accessing'! exprUsingContext: aContext ^ self expr ! ! !PltEscapedExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpr: aPltExpression expr := aPltExpression ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self escapedExpressionFromValues: (super fromValues: values) ! ! !PltEscapedExpression methodsFor: 'platypus-generated-classifying'! isPltEscapedExpression ^ true ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self escapedExpressionFromValues: values ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self escapedExpressionToValues: values ! ! !PltEscapedExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEscapedExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self escapedExpressionCopyTo: another ! ! !PltEscapedExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self escapedExpressionCopyTo: another ! ! !PltEscapedExpression methodsFor: 'platypus-generated-set-accessing'! setExpr: aPltExpression self expr: aPltExpression ! ! !PltEscapedExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. expr := nil ! ! !PltEscapedExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self escapedExpressionToValues: (super toValues: values) ! ! !PltExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExpression: self ! ! !PltExpression methodsFor: 'platypus-generated-copying'! expressionCopyTo: another ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! expressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! expressionToValues: values ^ values ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self expressionFromValues: (super fromValues: values) ! ! !PltExpression methodsFor: 'platypus-generated-classifying'! isPltExpression ^ true ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self expressionFromValues: values ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self expressionToValues: values ! ! !PltExpression methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self expressionCopyTo: another ! ! !PltExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self expressionCopyTo: another ! ! !PltExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self expressionToValues: (super toValues: values) ! ! !PltNativeExpression commentStamp: 'platypus comment' prior: 106087248! ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ! !PltNativeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNativeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltNativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNativeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNativeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNativeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNativeExpression: self ! ! !PltNativeExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSource: aPltNativeAlgorithm source := aPltNativeAlgorithm ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self nativeExpressionFromValues: (super fromValues: values) ! ! !PltNativeExpression methodsFor: 'platypus-generated-classifying'! isPltNativeExpression ^ true ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self nativeExpressionFromValues: values ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self nativeExpressionToValues: values ! ! !PltNativeExpression methodsFor: 'platypus-generated-copying'! nativeExpressionCopyTo: another another fastSetSource: self source ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! nativeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSource: valuesloc removeFirst. ^ valuesloc ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! nativeExpressionToValues: values values add: self source. ^ values ! ! !PltNativeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNativeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self nativeExpressionCopyTo: another ! ! !PltNativeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self nativeExpressionCopyTo: another ! ! !PltNativeExpression methodsFor: 'platypus-generated-set-accessing'! setSource: aPltNativeAlgorithm self source: aPltNativeAlgorithm ! ! !PltNativeExpression methodsFor: 'platypus-generated-accessing'! source ^ source ! ! !PltNativeExpression methodsFor: 'platypus-generated-accessing'! source: aPltNativeAlgorithm source := aPltNativeAlgorithm ! ! !PltNativeExpression methodsFor: 'platypus-generated-with-context-accessing'! sourceUsingContext: aContext ^ self source ! ! !PltNativeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. source := nil ! ! !PltNativeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self nativeExpressionToValues: (super toValues: values) ! ! !PltUnaryExpression commentStamp: 'platypus comment' prior: 106087451! ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ! !PltAggrUnaryExpression commentStamp: 'platypus comment' prior: 106087650! ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAggrUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggrUnaryExpression: self ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-copying'! aggrUnaryExpressionCopyTo: another ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! aggrUnaryExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! aggrUnaryExpressionToValues: values ^ values ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggrUnaryExpressionFromValues: (super fromValues: values) ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-classifying'! isPltAggrUnaryExpression ^ true ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggrUnaryExpressionFromValues: values ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggrUnaryExpressionToValues: values ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggrUnaryExpressionCopyTo: another ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggrUnaryExpressionCopyTo: another ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltAggrUnaryExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggrUnaryExpressionToValues: (super toValues: values) ! ! !PltQueryExpression commentStamp: 'platypus comment' prior: 106087856! ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ! !PltQueryExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltQueryExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltQueryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltQueryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltQueryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltQueryExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltQueryExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltQueryExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptQueryExpression: self ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! aggregateSource ^ aggregateSource ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! aggregateSource: aPltExpression aggregateSource := aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-with-context-accessing'! aggregateSourceUsingContext: aContext ^ self aggregateSource ! ! !PltQueryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAggregateSource: aPltExpression aggregateSource := aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSuchThat: aPltExpression suchThat := aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVariable: aPltQueryVariable variable := aPltQueryVariable ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self queryExpressionFromValues: (super fromValues: values) ! ! !PltQueryExpression methodsFor: 'platypus-generated-classifying'! isPltQueryExpression ^ true ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self queryExpressionFromValues: values ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self queryExpressionToValues: values ! ! !PltQueryExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltQueryExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self queryExpressionCopyTo: another ! ! !PltQueryExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self queryExpressionCopyTo: another ! ! !PltQueryExpression methodsFor: 'platypus-generated-copying'! queryExpressionCopyTo: another another fastSetVariable: self variable. another fastSetAggregateSource: self aggregateSource. another fastSetSuchThat: self suchThat ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! queryExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVariable: valuesloc removeFirst. self setAggregateSource: valuesloc removeFirst. self setSuchThat: valuesloc removeFirst. ^ valuesloc ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! queryExpressionToValues: values values add: self variable. values add: self aggregateSource. values add: self suchThat. ^ values ! ! !PltQueryExpression methodsFor: 'platypus-generated-set-accessing'! setAggregateSource: aPltExpression self aggregateSource: aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-set-accessing'! setSuchThat: aPltExpression self suchThat: aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-set-accessing'! setVariable: aPltQueryVariable self variable: aPltQueryVariable ! ! !PltQueryExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. variable := nil. aggregateSource := nil. suchThat := nil ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! suchThat ^ suchThat ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! suchThat: aPltExpression suchThat := aPltExpression ! ! !PltQueryExpression methodsFor: 'platypus-generated-with-context-accessing'! suchThatUsingContext: aContext ^ self suchThat ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self queryExpressionToValues: (super toValues: values) ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! variable ^ variable ! ! !PltQueryExpression methodsFor: 'platypus-generated-accessing'! variable: aPltQueryVariable variable := aPltQueryVariable ! ! !PltQueryExpression methodsFor: 'platypus-generated-group-accessing'! variable: aPltQueryVariable aggregateSource: aPltExpression suchThat: aPltExpression1 self setVariable:aPltQueryVariable. self setAggregateSource:aPltExpression. self setSuchThat:aPltExpression1. ! ! !PltQueryExpression methodsFor: 'platypus-generated-with-context-accessing'! variableUsingContext: aContext ^ self variable ! ! !PltEntityInstanceConstructor commentStamp: 'platypus comment' prior: 106088136! ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityInstanceConstructor class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityInstanceConstructor: self ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-accessing'! decl ^ decl ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-accessing'! decl: aPltEntityDefinitionReference decl := aPltEntityDefinitionReference ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! decl: aPltEntityDefinitionReference parameters: aListOfPltExpression self setDecl:aPltEntityDefinitionReference. self setParameters:aListOfPltExpression. ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-with-context-accessing'! declUsingContext: aContext ^ self decl ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-copying'! entityInstanceConstructorCopyTo: another another fastSetDecl: self decl. another fastSetParameters: self parameters ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! entityInstanceConstructorFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDecl: valuesloc removeFirst. self setParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! entityInstanceConstructorToValues: values values add: self decl. values add: self parameters. ^ values ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDecl: aPltEntityDefinitionReference decl := aPltEntityDefinitionReference ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityInstanceConstructorFromValues: (super fromValues: values) ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-classifying'! isPltEntityInstanceConstructor ^ true ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityInstanceConstructorFromValues: values ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityInstanceConstructorToValues: values ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityInstanceConstructorCopyTo: another ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityInstanceConstructorCopyTo: another ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-set-accessing'! setDecl: aPltEntityDefinitionReference self decl: aPltEntityDefinitionReference ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. decl := nil. parameters := OrderedCollection new ! ! !PltEntityInstanceConstructor methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityInstanceConstructorToValues: (super toValues: values) ! ! !PltEntityInstancesSet commentStamp: 'platypus comment' prior: 106088401! ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityInstancesSet class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityInstancesSet: self ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-copying'! entityInstancesSetCopyTo: another another fastSetEntityRef: self entityRef ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! entityInstancesSetFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setEntityRef: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! entityInstancesSetToValues: values values add: self entityRef. ^ values ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-accessing'! entityRef ^ entityRef ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-accessing'! entityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-with-context-accessing'! entityRefUsingContext: aContext ^ self entityRef ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-fast-set-accessing'! fastSetEntityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityInstancesSetFromValues: (super fromValues: values) ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-classifying'! isPltEntityInstancesSet ^ true ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityInstancesSetFromValues: values ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityInstancesSetToValues: values ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityInstancesSetCopyTo: another ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityInstancesSetCopyTo: another ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-set-accessing'! setEntityRef: aPltEntityDefinitionReference self entityRef: aPltEntityDefinitionReference ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. entityRef := nil ! ! !PltEntityInstancesSet methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityInstancesSetToValues: (super toValues: values) ! ! !PltIdentifier commentStamp: 'platypus comment' prior: 106088623! ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ! !PltAttributeIdentifier commentStamp: 'platypus comment' prior: 106088888! ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAttributeIdentifier: self ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-copying'! attributeIdentifierCopyTo: another another fastSetSelfInstance: self selfInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! attributeIdentifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSelfInstance: valuesloc removeFirst. ^ valuesloc ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! attributeIdentifierToValues: values values add: self selfInstance. ^ values ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSelfInstance: aPltGenericInstance selfInstance := aPltGenericInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self attributeIdentifierFromValues: (super fromValues: values) ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-classifying'! isPltAttributeIdentifier ^ true ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self attributeIdentifierFromValues: values ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self attributeIdentifierToValues: values ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self attributeIdentifierCopyTo: another ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self attributeIdentifierCopyTo: another ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-accessing'! selfInstance ^ selfInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-accessing'! selfInstance: aPltGenericInstance selfInstance := aPltGenericInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-with-context-accessing'! selfInstanceUsingContext: aContext ^ self selfInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-set-accessing'! setSelfInstance: aPltGenericInstance self selfInstance: aPltGenericInstance ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. selfInstance := nil ! ! !PltAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self attributeIdentifierToValues: (super toValues: values) ! ! !PltIdentifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIdentifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIdentifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIdentifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIdentifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIdentifier: self ! ! !PltIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltDictionaryInstance ref := aPltDictionaryInstance ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self identifierFromValues: (super fromValues: values) ! ! !PltIdentifier methodsFor: 'platypus-generated-copying'! identifierCopyTo: another another fastSetName: self name. another fastSetRef: self ref. another fastSetParameters: self parameters ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! identifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setRef: valuesloc removeFirst. self setParameters: valuesloc removeFirst. ^ valuesloc ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! identifierToValues: values values add: self name. values add: self ref. values add: self parameters. ^ values ! ! !PltIdentifier methodsFor: 'platypus-generated-classifying'! isPltIdentifier ^ true ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self identifierFromValues: values ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self identifierToValues: values ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! name: aString ref: aPltDictionaryInstance parameters: aListOfPltExpression self setName:aString. self setRef:aPltDictionaryInstance. self setParameters:aListOfPltExpression. ! ! !PltIdentifier methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltIdentifier methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltIdentifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIdentifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self identifierCopyTo: another ! ! !PltIdentifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self identifierCopyTo: another ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltIdentifier methodsFor: 'platypus-generated-accessing'! ref: aPltDictionaryInstance ref := aPltDictionaryInstance ! ! !PltIdentifier methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltIdentifier methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltIdentifier methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltIdentifier methodsFor: 'platypus-generated-set-accessing'! setRef: aPltDictionaryInstance self ref: aPltDictionaryInstance ! ! !PltIdentifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. ref := nil. parameters := nil ! ! !PltIdentifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self identifierToValues: (super toValues: values) ! ! !PltImplicitlyDeclaredIdentifier commentStamp: 'platypus comment' prior: 106089113! ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltImplicitlyDeclaredIdentifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptImplicitlyDeclaredIdentifier: self ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self implicitlyDeclaredIdentifierFromValues: (super fromValues: values) ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-copying'! implicitlyDeclaredIdentifierCopyTo: another ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! implicitlyDeclaredIdentifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! implicitlyDeclaredIdentifierToValues: values ^ values ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-classifying'! isPltImplicitlyDeclaredIdentifier ^ true ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self implicitlyDeclaredIdentifierFromValues: values ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self implicitlyDeclaredIdentifierToValues: values ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self implicitlyDeclaredIdentifierCopyTo: another ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self implicitlyDeclaredIdentifierCopyTo: another ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltImplicitlyDeclaredIdentifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self implicitlyDeclaredIdentifierToValues: (super toValues: values) ! ! !PltUniquenessRuleAttributeIdentifier commentStamp: 'platypus comment' prior: 106089319! ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUniquenessRuleAttributeIdentifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUniquenessRuleAttributeIdentifier: self ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetGroupRefName: aString groupRefName := aString ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aPltAttribute ref := aPltAttribute ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self uniquenessRuleAttributeIdentifierFromValues: (super fromValues: values) ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-accessing'! groupRefName ^ groupRefName ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-accessing'! groupRefName: aString groupRefName := aString ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! groupRefName: aString ref: aPltAttribute self setGroupRefName:aString. self setRef:aPltAttribute. ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-with-context-accessing'! groupRefNameUsingContext: aContext ^ self groupRefName ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-classifying'! isPltUniquenessRuleAttributeIdentifier ^ true ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self uniquenessRuleAttributeIdentifierFromValues: values ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self uniquenessRuleAttributeIdentifierToValues: values ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self uniquenessRuleAttributeIdentifierCopyTo: another ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self uniquenessRuleAttributeIdentifierCopyTo: another ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-accessing'! ref: aPltAttribute ref := aPltAttribute ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-set-accessing'! setGroupRefName: aString self groupRefName: aString ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-set-accessing'! setRef: aPltAttribute self ref: aPltAttribute ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. groupRefName := nil. ref := nil ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self uniquenessRuleAttributeIdentifierToValues: (super toValues: values) ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-copying'! uniquenessRuleAttributeIdentifierCopyTo: another another fastSetGroupRefName: self groupRefName. another fastSetRef: self ref ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! uniquenessRuleAttributeIdentifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setGroupRefName: valuesloc removeFirst. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !PltUniquenessRuleAttributeIdentifier methodsFor: 'platypus-generated-group-accessing'! uniquenessRuleAttributeIdentifierToValues: values values add: self groupRefName. values add: self ref. ^ values ! ! !PltInterval commentStamp: 'platypus comment' prior: 106089575! ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ! !PltInterval class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInterval class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInterval class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInterval class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltInterval class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInterval class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInterval class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInterval methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInterval: self ! ! !PltInterval methodsFor: 'platypus-generated-accessing'! expr ^ expr ! ! !PltInterval methodsFor: 'platypus-generated-accessing'! expr: aPltAndExpression expr := aPltAndExpression ! ! !PltInterval methodsFor: 'platypus-generated-with-context-accessing'! exprUsingContext: aContext ^ self expr ! ! !PltInterval methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpr: aPltAndExpression expr := aPltAndExpression ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self intervalFromValues: (super fromValues: values) ! ! !PltInterval methodsFor: 'platypus-generated-copying'! intervalCopyTo: another another fastSetExpr: self expr ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! intervalFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! intervalToValues: values values add: self expr. ^ values ! ! !PltInterval methodsFor: 'platypus-generated-classifying'! isPltInterval ^ true ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self intervalFromValues: values ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self intervalToValues: values ! ! !PltInterval methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInterval methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self intervalCopyTo: another ! ! !PltInterval methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self intervalCopyTo: another ! ! !PltInterval methodsFor: 'platypus-generated-set-accessing'! setExpr: aPltAndExpression self expr: aPltAndExpression ! ! !PltInterval methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. expr := nil ! ! !PltInterval methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self intervalToValues: (super toValues: values) ! ! !PltLiteral commentStamp: 'platypus comment' prior: 106089763! ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltBinaryLiteral commentStamp: 'platypus comment' prior: 106089953! ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ! !PltBinaryLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBinaryLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBinaryLiteral: self ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-copying'! binaryLiteralCopyTo: another another fastSetVal: self val ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! binaryLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVal: valuesloc removeFirst. ^ valuesloc ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! binaryLiteralToValues: values values add: self val. ^ values ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: aBinary val := aBinary ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self binaryLiteralFromValues: (super fromValues: values) ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-classifying'! isPltBinaryLiteral ^ true ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self binaryLiteralFromValues: values ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self binaryLiteralToValues: values ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self binaryLiteralCopyTo: another ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self binaryLiteralCopyTo: another ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-set-accessing'! setVal: aBinary self val: aBinary ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. val := nil ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self binaryLiteralToValues: (super toValues: values) ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-accessing'! val: aBinary val := aBinary ! ! !PltBinaryLiteral methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !PltLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLiteral: self ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self literalFromValues: (super fromValues: values) ! ! !PltLiteral methodsFor: 'platypus-generated-classifying'! isPltLiteral ^ true ! ! !PltLiteral methodsFor: 'platypus-generated-copying'! literalCopyTo: another ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! literalFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! literalToValues: values ^ values ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self literalFromValues: values ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self literalToValues: values ! ! !PltLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self literalCopyTo: another ! ! !PltLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self literalCopyTo: another ! ! !PltLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self literalToValues: (super toValues: values) ! ! !PltLogicalLiteral commentStamp: 'platypus comment' prior: 106090136! ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ! !PltFalseConstant commentStamp: 'platypus comment' prior: 106090325! ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltFalseConstant class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltFalseConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltFalseConstant class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltFalseConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltFalseConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltFalseConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltFalseConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltFalseConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptFalseConstant: self ! ! !PltFalseConstant methodsFor: 'platypus-generated-copying'! falseConstantCopyTo: another ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! falseConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! falseConstantToValues: values ^ values ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self falseConstantFromValues: (super fromValues: values) ! ! !PltFalseConstant methodsFor: 'platypus-generated-classifying'! isPltFalseConstant ^ true ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self falseConstantFromValues: values ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self falseConstantToValues: values ! ! !PltFalseConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltFalseConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self falseConstantCopyTo: another ! ! !PltFalseConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self falseConstantCopyTo: another ! ! !PltFalseConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltFalseConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self falseConstantToValues: (super toValues: values) ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLogicalLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLogicalLiteral: self ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self logicalLiteralFromValues: (super fromValues: values) ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-classifying'! isPltLogicalLiteral ^ true ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self logicalLiteralFromValues: values ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self logicalLiteralToValues: values ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-copying'! logicalLiteralCopyTo: another ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! logicalLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! logicalLiteralToValues: values ^ values ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self logicalLiteralCopyTo: another ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self logicalLiteralCopyTo: another ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLogicalLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self logicalLiteralToValues: (super toValues: values) ! ! !PltTrueConstant commentStamp: 'platypus comment' prior: 106090499! ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltTrueConstant class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltTrueConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltTrueConstant class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltTrueConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltTrueConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltTrueConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltTrueConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltTrueConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptTrueConstant: self ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self trueConstantFromValues: (super fromValues: values) ! ! !PltTrueConstant methodsFor: 'platypus-generated-classifying'! isPltTrueConstant ^ true ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self trueConstantFromValues: values ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self trueConstantToValues: values ! ! !PltTrueConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltTrueConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self trueConstantCopyTo: another ! ! !PltTrueConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self trueConstantCopyTo: another ! ! !PltTrueConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self trueConstantToValues: (super toValues: values) ! ! !PltTrueConstant methodsFor: 'platypus-generated-copying'! trueConstantCopyTo: another ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! trueConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltTrueConstant methodsFor: 'platypus-generated-group-accessing'! trueConstantToValues: values ^ values ! ! !PltUnknownConstant commentStamp: 'platypus comment' prior: 106090675! ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ! !PltUnknownConstant class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUnknownConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUnknownConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUnknownConstant: self ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self unknownConstantFromValues: (super fromValues: values) ! ! !PltUnknownConstant methodsFor: 'platypus-generated-classifying'! isPltUnknownConstant ^ true ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self unknownConstantFromValues: values ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self unknownConstantToValues: values ! ! !PltUnknownConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUnknownConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self unknownConstantCopyTo: another ! ! !PltUnknownConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self unknownConstantCopyTo: another ! ! !PltUnknownConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self unknownConstantToValues: (super toValues: values) ! ! !PltUnknownConstant methodsFor: 'platypus-generated-copying'! unknownConstantCopyTo: another ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! unknownConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltUnknownConstant methodsFor: 'platypus-generated-group-accessing'! unknownConstantToValues: values ^ values ! ! !PltNumericLiteral commentStamp: 'platypus comment' prior: 106090853! ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ! !PltIntegerLiteral commentStamp: 'platypus comment' prior: 106091043! ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ! !PltIntegerLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIntegerLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIntegerLiteral: self ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: anInteger val := anInteger ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self integerLiteralFromValues: (super fromValues: values) ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-copying'! integerLiteralCopyTo: another another fastSetVal: self val ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! integerLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVal: valuesloc removeFirst. ^ valuesloc ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! integerLiteralToValues: values values add: self val. ^ values ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-classifying'! isPltIntegerLiteral ^ true ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self integerLiteralFromValues: values ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self integerLiteralToValues: values ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self integerLiteralCopyTo: another ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self integerLiteralCopyTo: another ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-set-accessing'! setVal: anInteger self val: anInteger ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. val := 0 ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self integerLiteralToValues: (super toValues: values) ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-accessing'! val: anInteger val := anInteger ! ! !PltIntegerLiteral methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNumericLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNumericLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNumericLiteral: self ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self numericLiteralFromValues: (super fromValues: values) ! ! !PltNumericLiteral methodsFor: 'platypus-generated-classifying'! isPltNumericLiteral ^ true ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self numericLiteralFromValues: values ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self numericLiteralToValues: values ! ! !PltNumericLiteral methodsFor: 'platypus-generated-copying'! numericLiteralCopyTo: another ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! numericLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! numericLiteralToValues: values ^ values ! ! !PltNumericLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNumericLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self numericLiteralCopyTo: another ! ! !PltNumericLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self numericLiteralCopyTo: another ! ! !PltNumericLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNumericLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self numericLiteralToValues: (super toValues: values) ! ! !PltRealLiteral commentStamp: 'platypus comment' prior: 106091233! ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ! !PltEConstant commentStamp: 'platypus comment' prior: 106091415! ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ! !PltEConstant class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEConstant class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEConstant: self ! ! !PltEConstant methodsFor: 'platypus-generated-copying'! eConstantCopyTo: another ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! eConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! eConstantToValues: values ^ values ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self eConstantFromValues: (super fromValues: values) ! ! !PltEConstant methodsFor: 'platypus-generated-classifying'! isPltEConstant ^ true ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self eConstantFromValues: values ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self eConstantToValues: values ! ! !PltEConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self eConstantCopyTo: another ! ! !PltEConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self eConstantCopyTo: another ! ! !PltEConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltEConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self eConstantToValues: (super toValues: values) ! ! !PltEConstant methodsFor: 'platypus-generated-deriving'! val ^ self valUsingContext: self class context ! ! !PltEConstant methodsFor: 'platypus-generated-deriving'! valUsingContext: aContext ^ self valUsingContext: aContext receiver: self ! ! !PltEConstant methodsFor: 'platypus-generated-deriving'! valUsingContext: aContext receiver: aReceiver ^ 2.71828 ! ! !PltPiConstant commentStamp: 'platypus comment' prior: 106091629! ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ! !PltPiConstant class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltPiConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPiConstant class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltPiConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltPiConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltPiConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPiConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPiConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPiConstant: self ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self piConstantFromValues: (super fromValues: values) ! ! !PltPiConstant methodsFor: 'platypus-generated-classifying'! isPltPiConstant ^ true ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self piConstantFromValues: values ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self piConstantToValues: values ! ! !PltPiConstant methodsFor: 'platypus-generated-copying'! piConstantCopyTo: another ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! piConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! piConstantToValues: values ^ values ! ! !PltPiConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltPiConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self piConstantCopyTo: another ! ! !PltPiConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self piConstantCopyTo: another ! ! !PltPiConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltPiConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self piConstantToValues: (super toValues: values) ! ! !PltPiConstant methodsFor: 'platypus-generated-deriving'! val ^ self valUsingContext: self class context ! ! !PltPiConstant methodsFor: 'platypus-generated-deriving'! valUsingContext: aContext ^ self valUsingContext: aContext receiver: self ! ! !PltPiConstant methodsFor: 'platypus-generated-deriving'! valUsingContext: aContext receiver: aReceiver ^ 3.14159 ! ! !PltRealLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRealLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRealLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRealLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltRealLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRealLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRealLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRealLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRealLiteral: self ! ! !PltRealLiteral methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: aReal val := aReal ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self realLiteralFromValues: (super fromValues: values) ! ! !PltRealLiteral methodsFor: 'platypus-generated-classifying'! isPltRealLiteral ^ true ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self realLiteralFromValues: values ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self realLiteralToValues: values ! ! !PltRealLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRealLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self realLiteralCopyTo: another ! ! !PltRealLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self realLiteralCopyTo: another ! ! !PltRealLiteral methodsFor: 'platypus-generated-copying'! realLiteralCopyTo: another another fastSetVal: self val ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! realLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVal: valuesloc removeFirst. ^ valuesloc ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! realLiteralToValues: values values add: self val. ^ values ! ! !PltRealLiteral methodsFor: 'platypus-generated-set-accessing'! setVal: aReal self val: aReal ! ! !PltRealLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. val := 0.0 ! ! !PltRealLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self realLiteralToValues: (super toValues: values) ! ! !PltRealLiteral methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !PltRealLiteral methodsFor: 'platypus-generated-accessing'! val: aReal val := aReal ! ! !PltRealLiteral methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !PltStringLiteral commentStamp: 'platypus comment' prior: 106091847! ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ! !PltStringLiteral class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltStringLiteral class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltStringLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltStringLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltStringLiteral class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltStringLiteral class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltStringLiteral class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltStringLiteral methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptStringLiteral: self ! ! !PltStringLiteral methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: aString val := aString ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self stringLiteralFromValues: (super fromValues: values) ! ! !PltStringLiteral methodsFor: 'platypus-generated-classifying'! isPltStringLiteral ^ true ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self stringLiteralFromValues: values ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self stringLiteralToValues: values ! ! !PltStringLiteral methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltStringLiteral methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self stringLiteralCopyTo: another ! ! !PltStringLiteral methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self stringLiteralCopyTo: another ! ! !PltStringLiteral methodsFor: 'platypus-generated-set-accessing'! setVal: aString self val: aString ! ! !PltStringLiteral methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. val := '' ! ! !PltStringLiteral methodsFor: 'platypus-generated-copying'! stringLiteralCopyTo: another another fastSetVal: self val ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! stringLiteralFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVal: valuesloc removeFirst. ^ valuesloc ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! stringLiteralToValues: values values add: self val. ^ values ! ! !PltStringLiteral methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self stringLiteralToValues: (super toValues: values) ! ! !PltStringLiteral methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !PltStringLiteral methodsFor: 'platypus-generated-accessing'! val: aString val := aString ! ! !PltStringLiteral methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !PltMissingValue commentStamp: 'platypus comment' prior: 106092028! ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltMissingValue class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltMissingValue class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMissingValue class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltMissingValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltMissingValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMissingValue class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMissingValue class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMissingValue methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMissingValue: self ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self missingValueFromValues: (super fromValues: values) ! ! !PltMissingValue methodsFor: 'platypus-generated-classifying'! isPltMissingValue ^ true ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self missingValueFromValues: values ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self missingValueToValues: values ! ! !PltMissingValue methodsFor: 'platypus-generated-copying'! missingValueCopyTo: another ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! missingValueFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! missingValueToValues: values ^ values ! ! !PltMissingValue methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMissingValue methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self missingValueCopyTo: another ! ! !PltMissingValue methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self missingValueCopyTo: another ! ! !PltMissingValue methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltMissingValue methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self missingValueToValues: (super toValues: values) ! ! !PltRedefinedAttributeValue commentStamp: 'platypus comment' prior: 106092213! ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRedefinedAttributeValue class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRedefinedAttributeValue: self ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self redefinedAttributeValueFromValues: (super fromValues: values) ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-classifying'! isPltRedefinedAttributeValue ^ true ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self redefinedAttributeValueFromValues: values ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self redefinedAttributeValueToValues: values ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self redefinedAttributeValueCopyTo: another ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self redefinedAttributeValueCopyTo: another ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-copying'! redefinedAttributeValueCopyTo: another ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! redefinedAttributeValueFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! redefinedAttributeValueToValues: values ^ values ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltRedefinedAttributeValue methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self redefinedAttributeValueToValues: (super toValues: values) ! ! !PltQualifiedExpression commentStamp: 'platypus comment' prior: 106092403! ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ! !PltQualifiedExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltQualifiedExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptQualifiedExpression: self ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetHead: aPltExpression head := aPltExpression ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetQualifiers: aListOfPltQualifier qualifiers := aListOfPltQualifier ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self qualifiedExpressionFromValues: (super fromValues: values) ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-accessing'! head ^ head ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-accessing'! head: aPltExpression head := aPltExpression ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! head: aPltExpression qualifiers: aListOfPltQualifier self setHead:aPltExpression. self setQualifiers:aListOfPltQualifier. ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-with-context-accessing'! headUsingContext: aContext ^ self head ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-classifying'! isPltQualifiedExpression ^ true ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self qualifiedExpressionFromValues: values ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self qualifiedExpressionToValues: values ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self qualifiedExpressionCopyTo: another ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self qualifiedExpressionCopyTo: another ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-copying'! qualifiedExpressionCopyTo: another another fastSetHead: self head. another fastSetQualifiers: self qualifiers ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! qualifiedExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setHead: valuesloc removeFirst. self setQualifiers: valuesloc removeFirst. ^ valuesloc ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! qualifiedExpressionToValues: values values add: self head. values add: self qualifiers. ^ values ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-accessing'! qualifiers ^ qualifiers ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-accessing'! qualifiers: aListOfPltQualifier qualifiers := aListOfPltQualifier ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltQualifier as: OrderedCollection ] ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-with-context-accessing'! qualifiersUsingContext: aContext ^ self qualifiers ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-set-accessing'! setHead: aPltExpression self head: aPltExpression ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-set-accessing'! setQualifiers: aListOfPltQualifier self qualifiers: aListOfPltQualifier ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. head := nil. qualifiers := OrderedCollection new ! ! !PltQualifiedExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self qualifiedExpressionToValues: (super toValues: values) ! ! !PltQualifier commentStamp: 'platypus comment' prior: 106092634! ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltAttributeQualifier commentStamp: 'platypus comment' prior: 106092831! ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ! !PltAttributeQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAttributeQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAttributeQualifier: self ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-accessing'! attributeName ^ attributeName ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-accessing'! attributeName: aString attributeName := aString ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-with-context-accessing'! attributeNameUsingContext: aContext ^ self attributeName ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-copying'! attributeQualifierCopyTo: another another fastSetAttributeName: self attributeName ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! attributeQualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttributeName: valuesloc removeFirst. ^ valuesloc ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! attributeQualifierToValues: values values add: self attributeName. ^ values ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttributeName: aString attributeName := aString ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self attributeQualifierFromValues: (super fromValues: values) ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-classifying'! isPltAttributeQualifier ^ true ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self attributeQualifierFromValues: values ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self attributeQualifierToValues: values ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self attributeQualifierCopyTo: another ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self attributeQualifierCopyTo: another ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-set-accessing'! setAttributeName: aString self attributeName: aString ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attributeName := '' ! ! !PltAttributeQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self attributeQualifierToValues: (super toValues: values) ! ! !PltEnumerationValue commentStamp: 'platypus comment' prior: 106093034! ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ! !PltEnumerationValue class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEnumerationValue class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEnumerationValue methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEnumerationValue: self ! ! !PltEnumerationValue methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltEnumerationValue methodsFor: 'platypus-generated-accessing'! domain: aPltDefinedTypeReference domain := aPltDefinedTypeReference ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! domain: aPltDefinedTypeReference element: aString self setDomain:aPltDefinedTypeReference. self setElement:aString. ! ! !PltEnumerationValue methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltEnumerationValue methodsFor: 'platypus-generated-accessing'! element ^ element ! ! !PltEnumerationValue methodsFor: 'platypus-generated-accessing'! element: aString element := aString ! ! !PltEnumerationValue methodsFor: 'platypus-generated-with-context-accessing'! elementUsingContext: aContext ^ self element ! ! !PltEnumerationValue methodsFor: 'platypus-generated-copying'! enumerationValueCopyTo: another another fastSetDomain: self domain. another fastSetElement: self element ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! enumerationValueFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. self setElement: valuesloc removeFirst. ^ valuesloc ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! enumerationValueToValues: values values add: self domain. values add: self element. ^ values ! ! !PltEnumerationValue methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltDefinedTypeReference domain := aPltDefinedTypeReference ! ! !PltEnumerationValue methodsFor: 'platypus-generated-fast-set-accessing'! fastSetElement: aString element := aString ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self enumerationValueFromValues: (super fromValues: values) ! ! !PltEnumerationValue methodsFor: 'platypus-generated-classifying'! isPltEnumerationValue ^ true ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self enumerationValueFromValues: values ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self enumerationValueToValues: values ! ! !PltEnumerationValue methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEnumerationValue methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self enumerationValueCopyTo: another ! ! !PltEnumerationValue methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self enumerationValueCopyTo: another ! ! !PltEnumerationValue methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltDefinedTypeReference self domain: aPltDefinedTypeReference ! ! !PltEnumerationValue methodsFor: 'platypus-generated-set-accessing'! setElement: aString self element: aString ! ! !PltEnumerationValue methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil. element := '' ! ! !PltEnumerationValue methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self enumerationValueToValues: (super toValues: values) ! ! !PltGroupQualifier commentStamp: 'platypus comment' prior: 106093260! ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ! !PltGroupQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGroupQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGroupQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGroupQualifier: self ! ! !PltGroupQualifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetGroupName: aString groupName := aString ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self groupQualifierFromValues: (super fromValues: values) ! ! !PltGroupQualifier methodsFor: 'platypus-generated-accessing'! groupName ^ groupName ! ! !PltGroupQualifier methodsFor: 'platypus-generated-accessing'! groupName: aString groupName := aString ! ! !PltGroupQualifier methodsFor: 'platypus-generated-with-context-accessing'! groupNameUsingContext: aContext ^ self groupName ! ! !PltGroupQualifier methodsFor: 'platypus-generated-copying'! groupQualifierCopyTo: another another fastSetGroupName: self groupName ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! groupQualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setGroupName: valuesloc removeFirst. ^ valuesloc ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! groupQualifierToValues: values values add: self groupName. ^ values ! ! !PltGroupQualifier methodsFor: 'platypus-generated-classifying'! isPltGroupQualifier ^ true ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self groupQualifierFromValues: values ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self groupQualifierToValues: values ! ! !PltGroupQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGroupQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self groupQualifierCopyTo: another ! ! !PltGroupQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self groupQualifierCopyTo: another ! ! !PltGroupQualifier methodsFor: 'platypus-generated-set-accessing'! setGroupName: aString self groupName: aString ! ! !PltGroupQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. groupName := '' ! ! !PltGroupQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self groupQualifierToValues: (super toValues: values) ! ! !PltIndexQualifier commentStamp: 'platypus comment' prior: 106093453! ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ! !PltElementQualifier commentStamp: 'platypus comment' prior: 106093626! ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ! !PltElementQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltElementQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltElementQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltElementQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltElementQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltElementQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltElementQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltElementQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptElementQualifier: self ! ! !PltElementQualifier methodsFor: 'platypus-generated-copying'! elementQualifierCopyTo: another another fastSetIndex: self index ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! elementQualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setIndex: valuesloc removeFirst. ^ valuesloc ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! elementQualifierToValues: values values add: self index. ^ values ! ! !PltElementQualifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIndex: aPltExpression index := aPltExpression ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self elementQualifierFromValues: (super fromValues: values) ! ! !PltElementQualifier methodsFor: 'platypus-generated-accessing'! index ^ index ! ! !PltElementQualifier methodsFor: 'platypus-generated-accessing'! index: aPltExpression index := aPltExpression ! ! !PltElementQualifier methodsFor: 'platypus-generated-with-context-accessing'! indexUsingContext: aContext ^ self index ! ! !PltElementQualifier methodsFor: 'platypus-generated-classifying'! isPltElementQualifier ^ true ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self elementQualifierFromValues: values ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self elementQualifierToValues: values ! ! !PltElementQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltElementQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self elementQualifierCopyTo: another ! ! !PltElementQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self elementQualifierCopyTo: another ! ! !PltElementQualifier methodsFor: 'platypus-generated-set-accessing'! setIndex: aPltExpression self index: aPltExpression ! ! !PltElementQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. index := nil ! ! !PltElementQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self elementQualifierToValues: (super toValues: values) ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIndexQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIndexQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIndexQualifier: self ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self indexQualifierFromValues: (super fromValues: values) ! ! !PltIndexQualifier methodsFor: 'platypus-generated-copying'! indexQualifierCopyTo: another ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! indexQualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! indexQualifierToValues: values ^ values ! ! !PltIndexQualifier methodsFor: 'platypus-generated-classifying'! isPltIndexQualifier ^ true ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self indexQualifierFromValues: values ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self indexQualifierToValues: values ! ! !PltIndexQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIndexQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self indexQualifierCopyTo: another ! ! !PltIndexQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self indexQualifierCopyTo: another ! ! !PltIndexQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltIndexQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self indexQualifierToValues: (super toValues: values) ! ! !PltRangeQualifier commentStamp: 'platypus comment' prior: 106093826! ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ! !PltRangeQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRangeQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRangeQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRangeQualifier: self ! ! !PltRangeQualifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIndex1: aPltExpression index1 := aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIndex2: aPltExpression index2 := aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self rangeQualifierFromValues: (super fromValues: values) ! ! !PltRangeQualifier methodsFor: 'platypus-generated-accessing'! index1 ^ index1 ! ! !PltRangeQualifier methodsFor: 'platypus-generated-accessing'! index1: aPltExpression index1 := aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! index1: aPltExpression index2: aPltExpression1 self setIndex1:aPltExpression. self setIndex2:aPltExpression1. ! ! !PltRangeQualifier methodsFor: 'platypus-generated-with-context-accessing'! index1UsingContext: aContext ^ self index1 ! ! !PltRangeQualifier methodsFor: 'platypus-generated-accessing'! index2 ^ index2 ! ! !PltRangeQualifier methodsFor: 'platypus-generated-accessing'! index2: aPltExpression index2 := aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-with-context-accessing'! index2UsingContext: aContext ^ self index2 ! ! !PltRangeQualifier methodsFor: 'platypus-generated-classifying'! isPltRangeQualifier ^ true ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self rangeQualifierFromValues: values ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self rangeQualifierToValues: values ! ! !PltRangeQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRangeQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self rangeQualifierCopyTo: another ! ! !PltRangeQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self rangeQualifierCopyTo: another ! ! !PltRangeQualifier methodsFor: 'platypus-generated-copying'! rangeQualifierCopyTo: another another fastSetIndex1: self index1. another fastSetIndex2: self index2 ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! rangeQualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setIndex1: valuesloc removeFirst. self setIndex2: valuesloc removeFirst. ^ valuesloc ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! rangeQualifierToValues: values values add: self index1. values add: self index2. ^ values ! ! !PltRangeQualifier methodsFor: 'platypus-generated-set-accessing'! setIndex1: aPltExpression self index1: aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-set-accessing'! setIndex2: aPltExpression self index2: aPltExpression ! ! !PltRangeQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. index1 := nil. index2 := nil ! ! !PltRangeQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self rangeQualifierToValues: (super toValues: values) ! ! !PltQualifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltQualifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltQualifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltQualifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltQualifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltQualifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptQualifier: self ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self qualifierFromValues: (super fromValues: values) ! ! !PltQualifier methodsFor: 'platypus-generated-classifying'! isPltQualifier ^ true ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self qualifierFromValues: values ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self qualifierToValues: values ! ! !PltQualifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltQualifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self qualifierCopyTo: another ! ! !PltQualifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self qualifierCopyTo: another ! ! !PltQualifier methodsFor: 'platypus-generated-copying'! qualifierCopyTo: another ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! qualifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! qualifierToValues: values ^ values ! ! !PltQualifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltQualifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self qualifierToValues: (super toValues: values) ! ! !PltSelfIdentifier commentStamp: 'platypus comment' prior: 106094047! ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ! !PltSelfIdentifier class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSelfIdentifier class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSelfIdentifier: self ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self selfIdentifierFromValues: (super fromValues: values) ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-classifying'! isPltSelfIdentifier ^ true ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self selfIdentifierFromValues: values ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self selfIdentifierToValues: values ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self selfIdentifierCopyTo: another ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self selfIdentifierCopyTo: another ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-copying'! selfIdentifierCopyTo: another ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! selfIdentifierFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! selfIdentifierToValues: values ^ values ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSelfIdentifier methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self selfIdentifierToValues: (super toValues: values) ! ! !PltSimpleUnaryExpression commentStamp: 'platypus comment' prior: 106094232! ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ! !PltNegativeExpression commentStamp: 'platypus comment' prior: 106094463! ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltNegativeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNegativeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNegativeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNegativeExpression: self ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self negativeExpressionFromValues: (super fromValues: values) ! ! !PltNegativeExpression methodsFor: 'platypus-generated-classifying'! isPltNegativeExpression ^ true ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self negativeExpressionFromValues: values ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self negativeExpressionToValues: values ! ! !PltNegativeExpression methodsFor: 'platypus-generated-copying'! negativeExpressionCopyTo: another ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! negativeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! negativeExpressionToValues: values ^ values ! ! !PltNegativeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNegativeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self negativeExpressionCopyTo: another ! ! !PltNegativeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self negativeExpressionCopyTo: another ! ! !PltNegativeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNegativeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self negativeExpressionToValues: (super toValues: values) ! ! !PltNotExpression commentStamp: 'platypus comment' prior: 106094651! ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltNotExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNotExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNotExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNotExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltNotExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNotExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNotExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNotExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNotExpression: self ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self notExpressionFromValues: (super fromValues: values) ! ! !PltNotExpression methodsFor: 'platypus-generated-classifying'! isPltNotExpression ^ true ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self notExpressionFromValues: values ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self notExpressionToValues: values ! ! !PltNotExpression methodsFor: 'platypus-generated-copying'! notExpressionCopyTo: another ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! notExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! notExpressionToValues: values ^ values ! ! !PltNotExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNotExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self notExpressionCopyTo: another ! ! !PltNotExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self notExpressionCopyTo: another ! ! !PltNotExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNotExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self notExpressionToValues: (super toValues: values) ! ! !PltPositiveExpression commentStamp: 'platypus comment' prior: 106094839! ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ! !PltPositiveExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPositiveExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPositiveExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPositiveExpression: self ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self positiveExpressionFromValues: (super fromValues: values) ! ! !PltPositiveExpression methodsFor: 'platypus-generated-classifying'! isPltPositiveExpression ^ true ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self positiveExpressionFromValues: values ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self positiveExpressionToValues: values ! ! !PltPositiveExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltPositiveExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self positiveExpressionCopyTo: another ! ! !PltPositiveExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self positiveExpressionCopyTo: another ! ! !PltPositiveExpression methodsFor: 'platypus-generated-copying'! positiveExpressionCopyTo: another ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! positiveExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! positiveExpressionToValues: values ^ values ! ! !PltPositiveExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltPositiveExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self positiveExpressionToValues: (super toValues: values) ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSimpleUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSimpleUnaryExpression: self ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-accessing'! expr ^ expr ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-accessing'! expr: aPltExpression expr := aPltExpression ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-with-context-accessing'! exprUsingContext: aContext ^ self expr ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpr: aPltExpression expr := aPltExpression ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self simpleUnaryExpressionFromValues: (super fromValues: values) ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-classifying'! isPltSimpleUnaryExpression ^ true ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self simpleUnaryExpressionFromValues: values ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self simpleUnaryExpressionToValues: values ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self simpleUnaryExpressionCopyTo: another ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self simpleUnaryExpressionCopyTo: another ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-set-accessing'! setExpr: aPltExpression self expr: aPltExpression ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-copying'! simpleUnaryExpressionCopyTo: another another fastSetExpr: self expr ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! simpleUnaryExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! simpleUnaryExpressionToValues: values values add: self expr. ^ values ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. expr := nil ! ! !PltSimpleUnaryExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self simpleUnaryExpressionToValues: (super toValues: values) ! ! !PltTypedExpression commentStamp: 'platypus comment' prior: 106095029! ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ! !PltTypedExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltTypedExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltTypedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltTypedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltTypedExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltTypedExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltTypedExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltTypedExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptTypedExpression: self ! ! !PltTypedExpression methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltTypedExpression methodsFor: 'platypus-generated-accessing'! domain: aPltNamedTypeReference domain := aPltNamedTypeReference ! ! !PltTypedExpression methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltTypedExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltNamedTypeReference domain := aPltNamedTypeReference ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self typedExpressionFromValues: (super fromValues: values) ! ! !PltTypedExpression methodsFor: 'platypus-generated-classifying'! isPltTypedExpression ^ true ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self typedExpressionFromValues: values ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self typedExpressionToValues: values ! ! !PltTypedExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltTypedExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self typedExpressionCopyTo: another ! ! !PltTypedExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self typedExpressionCopyTo: another ! ! !PltTypedExpression methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltNamedTypeReference self domain: aPltNamedTypeReference ! ! !PltTypedExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self typedExpressionToValues: (super toValues: values) ! ! !PltTypedExpression methodsFor: 'platypus-generated-copying'! typedExpressionCopyTo: another another fastSetDomain: self domain ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! typedExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !PltTypedExpression methodsFor: 'platypus-generated-group-accessing'! typedExpressionToValues: values values add: self domain. ^ values ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUnaryExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUnaryExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUnaryExpression: self ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self unaryExpressionFromValues: (super fromValues: values) ! ! !PltUnaryExpression methodsFor: 'platypus-generated-classifying'! isPltUnaryExpression ^ true ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self unaryExpressionFromValues: values ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self unaryExpressionToValues: values ! ! !PltUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUnaryExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self unaryExpressionCopyTo: another ! ! !PltUnaryExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self unaryExpressionCopyTo: another ! ! !PltUnaryExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self unaryExpressionToValues: (super toValues: values) ! ! !PltUnaryExpression methodsFor: 'platypus-generated-copying'! unaryExpressionCopyTo: another ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! unaryExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltUnaryExpression methodsFor: 'platypus-generated-group-accessing'! unaryExpressionToValues: values ^ values ! ! !PltExternalSchema commentStamp: 'platypus comment' prior: 106095247! ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ! !PltExternalMetaSchema commentStamp: 'platypus comment' prior: 106095502! ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExternalMetaSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExternalMetaSchema: self ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-copying'! externalMetaSchemaCopyTo: another ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! externalMetaSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! externalMetaSchemaToValues: values ^ values ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self externalMetaSchemaFromValues: (super fromValues: values) ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-classifying'! isPltExternalMetaSchema ^ true ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self externalMetaSchemaFromValues: values ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self externalMetaSchemaToValues: values ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self externalMetaSchemaCopyTo: another ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self externalMetaSchemaCopyTo: another ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltExternalMetaSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self externalMetaSchemaToValues: (super toValues: values) ! ! !PltExternalSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltExternalSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltExternalSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltExternalSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltExternalSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltExternalSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltExternalSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltExternalSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExternalSchema: self ! ! !PltExternalSchema methodsFor: 'platypus-generated-copying'! externalSchemaCopyTo: another another fastSetName: self name. another fastSetOwner: self owner ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! externalSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! externalSchemaToValues: values values add: self name. values add: self owner. ^ values ! ! !PltExternalSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltExternalSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltSchemaDefinition owner := aPltSchemaDefinition ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self externalSchemaFromValues: (super fromValues: values) ! ! !PltExternalSchema methodsFor: 'platypus-generated-classifying'! isPltExternalSchema ^ true ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self externalSchemaFromValues: values ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self externalSchemaToValues: values ! ! !PltExternalSchema methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltExternalSchema methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! name: aString owner: aPltSchemaDefinition self setName:aString. self setOwner:aPltSchemaDefinition. ! ! !PltExternalSchema methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltExternalSchema methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltExternalSchema methodsFor: 'platypus-generated-accessing'! owner: aPltSchemaDefinition owner := aPltSchemaDefinition ! ! !PltExternalSchema methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltExternalSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltExternalSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self externalSchemaCopyTo: another ! ! !PltExternalSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self externalSchemaCopyTo: another ! ! !PltExternalSchema methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltExternalSchema methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltSchemaDefinition self owner: aPltSchemaDefinition ! ! !PltExternalSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. owner := nil ! ! !PltExternalSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self externalSchemaToValues: (super toValues: values) ! ! !PltIncludeSchema commentStamp: 'platypus comment' prior: 106095683! ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ! !PltIncludeSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIncludeSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIncludeSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIncludeSchema: self ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! explicitlyImportedItems ^ explicitlyImportedItems ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! explicitlyImportedItems: aListOfPltDomainEquivalentItem explicitlyImportedItems := aListOfPltDomainEquivalentItem ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltDomainEquivalentItem as: OrderedCollection ] ! ! !PltIncludeSchema methodsFor: 'platypus-generated-with-context-accessing'! explicitlyImportedItemsUsingContext: aContext ^ self explicitlyImportedItems ! ! !PltIncludeSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExplicitlyImportedItems: aListOfPltDomainEquivalentItem explicitlyImportedItems := aListOfPltDomainEquivalentItem ! ! !PltIncludeSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetImplicitlyImportedItems: aListOfPltDomainEquivalentItem implicitlyImportedItems := aListOfPltDomainEquivalentItem ! ! !PltIncludeSchema methodsFor: 'platypus-generated-fast-set-accessing'! fastSetNativeSchema: aPltSchemaDefinition nativeSchema := aPltSchemaDefinition ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self includeSchemaFromValues: (super fromValues: values) ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! implicitlyImportedItems ^ implicitlyImportedItems ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! implicitlyImportedItems: aListOfPltDomainEquivalentItem implicitlyImportedItems := aListOfPltDomainEquivalentItem ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltDomainEquivalentItem as: OrderedCollection ] ! ! !PltIncludeSchema methodsFor: 'platypus-generated-with-context-accessing'! implicitlyImportedItemsUsingContext: aContext ^ self implicitlyImportedItems ! ! !PltIncludeSchema methodsFor: 'platypus-generated-copying'! includeSchemaCopyTo: another another fastSetNativeSchema: self nativeSchema. another fastSetExplicitlyImportedItems: self explicitlyImportedItems. another fastSetImplicitlyImportedItems: self implicitlyImportedItems ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! includeSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setNativeSchema: valuesloc removeFirst. self setExplicitlyImportedItems: valuesloc removeFirst. self setImplicitlyImportedItems: valuesloc removeFirst. ^ valuesloc ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! includeSchemaToValues: values values add: self nativeSchema. values add: self explicitlyImportedItems. values add: self implicitlyImportedItems. ^ values ! ! !PltIncludeSchema methodsFor: 'platypus-generated-classifying'! isPltIncludeSchema ^ true ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self includeSchemaFromValues: values ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self includeSchemaToValues: values ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! nativeSchema ^ nativeSchema ! ! !PltIncludeSchema methodsFor: 'platypus-generated-accessing'! nativeSchema: aPltSchemaDefinition nativeSchema := aPltSchemaDefinition ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! nativeSchema: aPltSchemaDefinition explicitlyImportedItems: aListOfPltDomainEquivalentItem implicitlyImportedItems: aListOfPltDomainEquivalentItem1 self setNativeSchema:aPltSchemaDefinition. self setExplicitlyImportedItems:aListOfPltDomainEquivalentItem. self setImplicitlyImportedItems:aListOfPltDomainEquivalentItem1. ! ! !PltIncludeSchema methodsFor: 'platypus-generated-with-context-accessing'! nativeSchemaUsingContext: aContext ^ self nativeSchema ! ! !PltIncludeSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIncludeSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self includeSchemaCopyTo: another ! ! !PltIncludeSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self includeSchemaCopyTo: another ! ! !PltIncludeSchema methodsFor: 'platypus-generated-set-accessing'! setExplicitlyImportedItems: aListOfPltDomainEquivalentItem self explicitlyImportedItems: aListOfPltDomainEquivalentItem ! ! !PltIncludeSchema methodsFor: 'platypus-generated-set-accessing'! setImplicitlyImportedItems: aListOfPltDomainEquivalentItem self implicitlyImportedItems: aListOfPltDomainEquivalentItem ! ! !PltIncludeSchema methodsFor: 'platypus-generated-set-accessing'! setNativeSchema: aPltSchemaDefinition self nativeSchema: aPltSchemaDefinition ! ! !PltIncludeSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. nativeSchema := nil. explicitlyImportedItems := OrderedCollection new. implicitlyImportedItems := OrderedCollection new ! ! !PltIncludeSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self includeSchemaToValues: (super toValues: values) ! ! !PltReferencedSchema commentStamp: 'platypus comment' prior: 106096019! ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ! !PltReferencedSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltReferencedSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltReferencedSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptReferencedSchema: self ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self referencedSchemaFromValues: (super fromValues: values) ! ! !PltReferencedSchema methodsFor: 'platypus-generated-classifying'! isPltReferencedSchema ^ true ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self referencedSchemaFromValues: values ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self referencedSchemaToValues: values ! ! !PltReferencedSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltReferencedSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self referencedSchemaCopyTo: another ! ! !PltReferencedSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self referencedSchemaCopyTo: another ! ! !PltReferencedSchema methodsFor: 'platypus-generated-copying'! referencedSchemaCopyTo: another ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! referencedSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! referencedSchemaToValues: values ^ values ! ! !PltReferencedSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltReferencedSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self referencedSchemaToValues: (super toValues: values) ! ! !PltUsedSchema commentStamp: 'platypus comment' prior: 106096193! ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ! !PltUsedSchema class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUsedSchema class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUsedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUsedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltUsedSchema class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUsedSchema class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUsedSchema class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUsedSchema methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUsedSchema: self ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self usedSchemaFromValues: (super fromValues: values) ! ! !PltUsedSchema methodsFor: 'platypus-generated-classifying'! isPltUsedSchema ^ true ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self usedSchemaFromValues: values ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self usedSchemaToValues: values ! ! !PltUsedSchema methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUsedSchema methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self usedSchemaCopyTo: another ! ! !PltUsedSchema methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self usedSchemaCopyTo: another ! ! !PltUsedSchema methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self usedSchemaToValues: (super toValues: values) ! ! !PltUsedSchema methodsFor: 'platypus-generated-copying'! usedSchemaCopyTo: another ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! usedSchemaFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltUsedSchema methodsFor: 'platypus-generated-group-accessing'! usedSchemaToValues: values ^ values ! ! !PltGenericType commentStamp: 'platypus comment' prior: 106096362! ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ! !PltGenericType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltGenericType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltGenericType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltGenericType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltGenericType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltGenericType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltGenericType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltGenericType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGenericType: self ! ! !PltGenericType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltGenericType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltGenericType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptGenericTypeUsingContext: aContext ! ! !PltGenericType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTypeLabel: aString typeLabel := aString ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self genericTypeFromValues: (super fromValues: values) ! ! !PltGenericType methodsFor: 'platypus-generated-copying'! genericTypeCopyTo: another another fastSetTypeLabel: self typeLabel ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! genericTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setTypeLabel: valuesloc removeFirst. ^ valuesloc ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! genericTypeToValues: values values add: self typeLabel. ^ values ! ! !PltGenericType methodsFor: 'platypus-generated-classifying'! isPltGenericType ^ true ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self genericTypeFromValues: values ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self genericTypeToValues: values ! ! !PltGenericType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltGenericType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self genericTypeCopyTo: another ! ! !PltGenericType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self genericTypeCopyTo: another ! ! !PltGenericType methodsFor: 'platypus-generated-set-accessing'! setTypeLabel: aString self typeLabel: aString ! ! !PltGenericType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. typeLabel := nil ! ! !PltGenericType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self genericTypeToValues: (super toValues: values) ! ! !PltGenericType methodsFor: 'platypus-generated-accessing'! typeLabel ^ typeLabel ! ! !PltGenericType methodsFor: 'platypus-generated-accessing'! typeLabel: aString typeLabel := aString ! ! !PltGenericType methodsFor: 'platypus-generated-with-context-accessing'! typeLabelUsingContext: aContext ^ self typeLabel ! ! !PltIncrementControl commentStamp: 'platypus comment' prior: 106096637! ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ! !PltIncrementControl class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIncrementControl class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIncrementControl class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIncrementControl class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltIncrementControl class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIncrementControl class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIncrementControl class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIncrementControl methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIncrementControl: self ! ! !PltIncrementControl methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFirst: aPltExpression first := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLast: aPltExpression last := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltRepeatStatement owner := aPltRepeatStatement ! ! !PltIncrementControl methodsFor: 'platypus-generated-fast-set-accessing'! fastSetStep: aPltExpression step := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVariable: aPltIncrementControlVariable variable := aPltIncrementControlVariable ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! first ^ first ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! first: aPltExpression first := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-with-context-accessing'! firstUsingContext: aContext ^ self first ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self incrementControlFromValues: (super fromValues: values) ! ! !PltIncrementControl methodsFor: 'platypus-generated-copying'! incrementControlCopyTo: another another fastSetVariable: self variable. another fastSetFirst: self first. another fastSetLast: self last. another fastSetStep: self step. another fastSetOwner: self owner ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! incrementControlFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVariable: valuesloc removeFirst. self setFirst: valuesloc removeFirst. self setLast: valuesloc removeFirst. self setStep: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! incrementControlToValues: values values add: self variable. values add: self first. values add: self last. values add: self step. values add: self owner. ^ values ! ! !PltIncrementControl methodsFor: 'platypus-generated-classifying'! isPltIncrementControl ^ true ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! last ^ last ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! last: aPltExpression last := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-with-context-accessing'! lastUsingContext: aContext ^ self last ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self incrementControlFromValues: values ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self incrementControlToValues: values ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! owner: aPltRepeatStatement owner := aPltRepeatStatement ! ! !PltIncrementControl methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltIncrementControl methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIncrementControl methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self incrementControlCopyTo: another ! ! !PltIncrementControl methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self incrementControlCopyTo: another ! ! !PltIncrementControl methodsFor: 'platypus-generated-set-accessing'! setFirst: aPltExpression self first: aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-set-accessing'! setLast: aPltExpression self last: aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltRepeatStatement self owner: aPltRepeatStatement ! ! !PltIncrementControl methodsFor: 'platypus-generated-set-accessing'! setStep: aPltExpression self step: aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-set-accessing'! setVariable: aPltIncrementControlVariable self variable: aPltIncrementControlVariable ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! step ^ step ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! step: aPltExpression step := aPltExpression ! ! !PltIncrementControl methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. variable := nil. first := nil. last := nil. step := nil. owner := nil ! ! !PltIncrementControl methodsFor: 'platypus-generated-with-context-accessing'! stepUsingContext: aContext ^ self step ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self incrementControlToValues: (super toValues: values) ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! variable ^ variable ! ! !PltIncrementControl methodsFor: 'platypus-generated-accessing'! variable: aPltIncrementControlVariable variable := aPltIncrementControlVariable ! ! !PltIncrementControl methodsFor: 'platypus-generated-group-accessing'! variable: aPltIncrementControlVariable first: aPltExpression last: aPltExpression1 step: aPltExpression2 owner: aPltRepeatStatement self setVariable:aPltIncrementControlVariable. self setFirst:aPltExpression. self setLast:aPltExpression1. self setStep:aPltExpression2. self setOwner:aPltRepeatStatement. ! ! !PltIncrementControl methodsFor: 'platypus-generated-with-context-accessing'! variableUsingContext: aContext ^ self variable ! ! !PltIncrementControlVariable commentStamp: 'platypus comment' prior: 106096988! ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIncrementControlVariable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIncrementControlVariable: self ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltIncrementControl owner := aPltIncrementControl ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVariableId: aString variableId := aString ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self incrementControlVariableFromValues: (super fromValues: values) ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-copying'! incrementControlVariableCopyTo: another another fastSetVariableId: self variableId. another fastSetOwner: self owner ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! incrementControlVariableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVariableId: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! incrementControlVariableToValues: values values add: self variableId. values add: self owner. ^ values ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-classifying'! isPltIncrementControlVariable ^ true ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self incrementControlVariableFromValues: values ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self incrementControlVariableToValues: values ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-accessing'! owner: aPltIncrementControl owner := aPltIncrementControl ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self incrementControlVariableCopyTo: another ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self incrementControlVariableCopyTo: another ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltIncrementControl self owner: aPltIncrementControl ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-set-accessing'! setVariableId: aString self variableId: aString ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. variableId := ''. owner := nil ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self incrementControlVariableToValues: (super toValues: values) ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-accessing'! variableId ^ variableId ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-accessing'! variableId: aString variableId := aString ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-group-accessing'! variableId: aString owner: aPltIncrementControl self setVariableId:aString. self setOwner:aPltIncrementControl. ! ! !PltIncrementControlVariable methodsFor: 'platypus-generated-with-context-accessing'! variableIdUsingContext: aContext ^ self variableId ! ! !PltLocalVariable commentStamp: 'platypus comment' prior: 106097251! ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ! !PltLocalVariable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLocalVariable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLocalVariable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLocalVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltLocalVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLocalVariable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLocalVariable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLocalVariable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLocalVariable: self ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! domain: aPltParameterType domain := aPltParameterType ! ! !PltLocalVariable methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltLocalVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltParameterType domain := aPltParameterType ! ! !PltLocalVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInitializer: aPltExpression initializer := aPltExpression ! ! !PltLocalVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltLocalVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltStatementsContainer owner := aPltStatementsContainer ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self localVariableFromValues: (super fromValues: values) ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! initializer ^ initializer ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! initializer: aPltExpression initializer := aPltExpression ! ! !PltLocalVariable methodsFor: 'platypus-generated-with-context-accessing'! initializerUsingContext: aContext ^ self initializer ! ! !PltLocalVariable methodsFor: 'platypus-generated-classifying'! isPltLocalVariable ^ true ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self localVariableFromValues: values ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self localVariableToValues: values ! ! !PltLocalVariable methodsFor: 'platypus-generated-copying'! localVariableCopyTo: another another fastSetOwner: self owner. another fastSetName: self name. another fastSetDomain: self domain. another fastSetInitializer: self initializer ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! localVariableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. self setName: valuesloc removeFirst. self setDomain: valuesloc removeFirst. self setInitializer: valuesloc removeFirst. ^ valuesloc ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! localVariableToValues: values values add: self owner. values add: self name. values add: self domain. values add: self initializer. ^ values ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltLocalVariable methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltLocalVariable methodsFor: 'platypus-generated-accessing'! owner: aPltStatementsContainer owner := aPltStatementsContainer ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! owner: aPltStatementsContainer name: aString domain: aPltParameterType initializer: aPltExpression self setOwner:aPltStatementsContainer. self setName:aString. self setDomain:aPltParameterType. self setInitializer:aPltExpression. ! ! !PltLocalVariable methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltLocalVariable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLocalVariable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self localVariableCopyTo: another ! ! !PltLocalVariable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self localVariableCopyTo: another ! ! !PltLocalVariable methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltParameterType self domain: aPltParameterType ! ! !PltLocalVariable methodsFor: 'platypus-generated-set-accessing'! setInitializer: aPltExpression self initializer: aPltExpression ! ! !PltLocalVariable methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltLocalVariable methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltStatementsContainer self owner: aPltStatementsContainer ! ! !PltLocalVariable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil. name := ''. domain := nil. initializer := nil ! ! !PltLocalVariable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self localVariableToValues: (super toValues: values) ! ! !PltMetaConceptDefinition commentStamp: 'platypus comment' prior: 106097568! ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMetaConceptDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMetaConceptDefinition: self ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-accessing'! definition ^ definition ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-accessing'! definition: aPltDictionaryInstance definition := aPltDictionaryInstance ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! definition: aPltDictionaryInstance expression: aString self setDefinition:aPltDictionaryInstance. self setExpression:aString. ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-with-context-accessing'! definitionUsingContext: aContext ^ self definition ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-accessing'! expression ^ expression ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-accessing'! expression: aString expression := aString ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-with-context-accessing'! expressionUsingContext: aContext ^ self expression ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDefinition: aPltDictionaryInstance definition := aPltDictionaryInstance ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpression: aString expression := aString ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self metaConceptDefinitionFromValues: (super fromValues: values) ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-classifying'! isPltMetaConceptDefinition ^ true ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self metaConceptDefinitionFromValues: values ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self metaConceptDefinitionToValues: values ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-copying'! metaConceptDefinitionCopyTo: another another fastSetDefinition: self definition. another fastSetExpression: self expression ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! metaConceptDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDefinition: valuesloc removeFirst. self setExpression: valuesloc removeFirst. ^ valuesloc ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! metaConceptDefinitionToValues: values values add: self definition. values add: self expression. ^ values ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext:aContext ^ self parameters! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self metaConceptDefinitionCopyTo: another ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self metaConceptDefinitionCopyTo: another ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-set-accessing'! setDefinition: aPltDictionaryInstance self definition: aPltDictionaryInstance ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-set-accessing'! setExpression: aString self expression: aString ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. definition := nil. expression := '' ! ! !PltMetaConceptDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self metaConceptDefinitionToValues: (super toValues: values) ! ! !PltMetaMappingDefinition commentStamp: 'platypus comment' prior: 106097821! ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ! !PltMetaMappingDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMetaMappingDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltMetaMappingDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMetaMappingDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMetaMappingDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMetaMappingDefinition: self ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-accessing'! definition ^ definition ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-accessing'! definition: aPltDictionaryInstance definition := aPltDictionaryInstance ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! definition: aPltDictionaryInstance expression: aString self setDefinition:aPltDictionaryInstance. self setExpression:aString. ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-with-context-accessing'! definitionUsingContext: aContext ^ self definition ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-accessing'! expression ^ expression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-accessing'! expression: aString expression := aString ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-with-context-accessing'! expressionUsingContext: aContext ^ self expression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDefinition: aPltDictionaryInstance definition := aPltDictionaryInstance ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpression: aString expression := aString ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMetaExpression:aPltExpression metaExpression := aPltExpression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self metaMappingDefinitionFromValues: (super fromValues: values) ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-classifying'! isPltMetaMappingDefinition ^ true ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self metaMappingDefinitionFromValues: values ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self metaMappingDefinitionToValues: values ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-accessing'! metaExpression ^metaExpression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-with-context-accessing'! metaExpressionUsingContext:aContext ^ self metaExpression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-copying'! metaMappingDefinitionCopyTo: another another fastSetDefinition: self definition. another fastSetExpression: self expression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! metaMappingDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDefinition: valuesloc removeFirst. self setExpression: valuesloc removeFirst. ^ valuesloc ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! metaMappingDefinitionToValues: values values add: self definition. values add: self expression. ^ values ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self metaMappingDefinitionCopyTo: another ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self metaMappingDefinitionCopyTo: another ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-set-accessing'! setDefinition: aPltDictionaryInstance self definition: aPltDictionaryInstance ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-set-accessing'! setExpression: aString self expression: aString ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-set-accessing'! setMetaExpression:aPltExpression self metaExpression:aPltExpression ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. definition := nil. expression := '' ! ! !PltMetaMappingDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self metaMappingDefinitionToValues: (super toValues: values) ! ! !PltMetaMappingRule commentStamp: 'platypus comment' prior: 106098068! ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ! !PltMetaMappingRule class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltMetaMappingRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltMetaMappingRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltMetaMappingRule class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltMetaMappingRule class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptMetaMappingRule: self ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! condition ^ condition ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! condition: aString condition := aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-with-context-accessing'! conditionUsingContext: aContext ^ self condition ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! expression ^ expression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! expression: aString expression := aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-with-context-accessing'! expressionUsingContext: aContext ^ self expression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCondition: aString condition := aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpression: aString expression := aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMetaCondition:aPltExpression metaCondition := aPltExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMetaExpression:aPltExpression metaExpression := aPltExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self metaMappingRuleFromValues: (super fromValues: values) ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-classifying'! isPltMetaMappingRule ^ true ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self metaMappingRuleFromValues: values ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self metaMappingRuleToValues: values ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! metaCondition ^metaCondition ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-with-context-accessing'! metaConditionUsingContext:aContext ^ self metaCondition ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-accessing'! metaExpression ^metaExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-with-context-accessing'! metaExpressionUsingContext:aContext ^ self metaExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-copying'! metaMappingRuleCopyTo: another another fastSetCondition: self condition. another fastSetExpression: self expression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! metaMappingRuleFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setCondition: valuesloc removeFirst. self setExpression: valuesloc removeFirst. ^ valuesloc ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! metaMappingRuleToValues: values values add: self condition. values add: self expression. ^ values ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self metaMappingRuleCopyTo: another ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self metaMappingRuleCopyTo: another ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-set-accessing'! setCondition: aString self condition: aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-set-accessing'! setExpression: aString self expression: aString ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-set-accessing'! setMetaCondition:aPltExpression self metaCondition:aPltExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-set-accessing'! setMetaExpression:aPltExpression self metaExpression:aPltExpression ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. condition := ''. expression := '' ! ! !PltMetaMappingRule methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self metaMappingRuleToValues: (super toValues: values) ! ! !PltNamedType commentStamp: 'platypus comment' prior: 106098289! ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ! !PltDefinedType commentStamp: 'platypus comment' prior: 106098643! ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ! !PltDefinedType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltDefinedType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltDefinedType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltDefinedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltDefinedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltDefinedType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltDefinedType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltDefinedType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDefinedType: self ! ! !PltDefinedType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltDefinedType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltDefinedType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptDefinedTypeUsingContext: aContext ! ! !PltDefinedType methodsFor: 'platypus-generated-copying'! definedTypeCopyTo: another another fastSetDomain: self domain ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! definedTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! definedTypeToValues: values values add: self domain. ^ values ! ! !PltDefinedType methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltDefinedType methodsFor: 'platypus-generated-accessing'! domain: aPltUnderlyingType domain := aPltUnderlyingType ! ! !PltDefinedType methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltDefinedType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltUnderlyingType domain := aPltUnderlyingType ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self definedTypeFromValues: (super fromValues: values) ! ! !PltDefinedType methodsFor: 'platypus-generated-classifying'! isPltDefinedType ^ true ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self definedTypeFromValues: values ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self definedTypeToValues: values ! ! !PltDefinedType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltDefinedType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self definedTypeCopyTo: another ! ! !PltDefinedType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self definedTypeCopyTo: another ! ! !PltDefinedType methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltUnderlyingType self domain: aPltUnderlyingType ! ! !PltDefinedType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil ! ! !PltDefinedType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self definedTypeToValues: (super toValues: values) ! ! !PltEntityDefinition commentStamp: 'platypus comment' prior: 106098905! ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ! !PltEntityDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEntityDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityDefinition: self ! ! !PltEntityDefinition methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltEntityDefinition methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltEntityDefinition methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptEntityDefinitionUsingContext: aContext ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! attributes: aListOfPltAttribute attributes := aListOfPltAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltAttribute as: OrderedCollection ] ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! attributesUsingContext: aContext ^ self attributes ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! complex ^ complex ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! complex: aBoolean complex := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! complexUsingContext: aContext ^ self complex ! ! !PltEntityDefinition methodsFor: 'platypus-generated-copying'! entityDefinitionCopyTo: another another fastSetSupertypeConstraint: self supertypeConstraint. another fastSetSupertypes: self supertypes. another fastSetAttributes: self attributes. another fastSetUniquenessRules: self uniquenessRules. another fastSetComplex: self complex. another fastSetInstantiable: self instantiable. another fastSetIndependent: self independent ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! entityDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSupertypeConstraint: valuesloc removeFirst. self setSupertypes: valuesloc removeFirst. self setAttributes: valuesloc removeFirst. self setUniquenessRules: valuesloc removeFirst. self setComplex: valuesloc removeFirst. self setInstantiable: valuesloc removeFirst. self setIndependent: valuesloc removeFirst. ^ valuesloc ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! entityDefinitionToValues: values values add: self supertypeConstraint. values add: self supertypes. values add: self attributes. values add: self uniquenessRules. values add: self complex. values add: self instantiable. values add: self independent. ^ values ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttributes: aListOfPltAttribute attributes := aListOfPltAttribute ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetComplex: aBoolean complex := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIndependent: aBoolean independent := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInstantiable: aBoolean instantiable := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSupertypeConstraint: aPltSupertypeConstraint supertypeConstraint := aPltSupertypeConstraint ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSupertypes: aListOfPltEntityDefinitionReference supertypes := aListOfPltEntityDefinitionReference ! ! !PltEntityDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUniquenessRules: aListOfPltUniquenessRule uniquenessRules := aListOfPltUniquenessRule ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityDefinitionFromValues: (super fromValues: values) ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! independent ^ independent ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! independent: aBoolean independent := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! independentUsingContext: aContext ^ self independent ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! instantiable ^ instantiable ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! instantiable: aBoolean instantiable := aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! instantiableUsingContext: aContext ^ self instantiable ! ! !PltEntityDefinition methodsFor: 'platypus-generated-classifying'! isPltEntityDefinition ^ true ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityDefinitionFromValues: values ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityDefinitionToValues: values ! ! !PltEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityDefinitionCopyTo: another ! ! !PltEntityDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityDefinitionCopyTo: another ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setAttributes: aListOfPltAttribute self attributes: aListOfPltAttribute ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setComplex: aBoolean self complex: aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setIndependent: aBoolean self independent: aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setInstantiable: aBoolean self instantiable: aBoolean ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setSupertypeConstraint: aPltSupertypeConstraint self supertypeConstraint: aPltSupertypeConstraint ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setSupertypes: aListOfPltEntityDefinitionReference self supertypes: aListOfPltEntityDefinitionReference ! ! !PltEntityDefinition methodsFor: 'platypus-generated-set-accessing'! setUniquenessRules: aListOfPltUniquenessRule self uniquenessRules: aListOfPltUniquenessRule ! ! !PltEntityDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. supertypeConstraint := nil. supertypes := OrderedCollection new. attributes := OrderedCollection new. uniquenessRules := OrderedCollection new. complex := false. instantiable := false. independent := false ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! supertypeConstraint ^ supertypeConstraint ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! supertypeConstraint: aPltSupertypeConstraint supertypeConstraint := aPltSupertypeConstraint ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! supertypeConstraint: aPltSupertypeConstraint supertypes: aListOfPltEntityDefinitionReference attributes: aListOfPltAttribute uniquenessRules: aListOfPltUniquenessRule complex: aBoolean instantiable: aBoolean1 independent: aBoolean2 self setSupertypeConstraint:aPltSupertypeConstraint. self setSupertypes:aListOfPltEntityDefinitionReference. self setAttributes:aListOfPltAttribute. self setUniquenessRules:aListOfPltUniquenessRule. self setComplex:aBoolean. self setInstantiable:aBoolean1. self setIndependent:aBoolean2. ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! supertypeConstraintUsingContext: aContext ^ self supertypeConstraint ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! supertypes ^ supertypes ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! supertypes: aListOfPltEntityDefinitionReference supertypes := aListOfPltEntityDefinitionReference ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltEntityDefinitionReference as: OrderedCollection ] ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! supertypesUsingContext: aContext ^ self supertypes ! ! !PltEntityDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityDefinitionToValues: (super toValues: values) ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! uniquenessRules ^ uniquenessRules ! ! !PltEntityDefinition methodsFor: 'platypus-generated-accessing'! uniquenessRules: aListOfPltUniquenessRule uniquenessRules := aListOfPltUniquenessRule ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltUniquenessRule as: OrderedCollection ] ! ! !PltEntityDefinition methodsFor: 'platypus-generated-with-context-accessing'! uniquenessRulesUsingContext: aContext ^ self uniquenessRules ! ! !PltNamedType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNamedType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNamedType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNamedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltNamedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNamedType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNamedType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNamedType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNamedType: self ! ! !PltNamedType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltNamedType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltContextDefinition owner := aPltContextDefinition ! ! !PltNamedType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWhereRules: aListOfPltWhereRule whereRules := aListOfPltWhereRule ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self namedTypeFromValues: (super fromValues: values) ! ! !PltNamedType methodsFor: 'platypus-generated-classifying'! isPltNamedType ^ true ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self namedTypeFromValues: values ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self namedTypeToValues: values ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! name: aString whereRules: aListOfPltWhereRule owner: aPltContextDefinition self setName:aString. self setWhereRules:aListOfPltWhereRule. self setOwner:aPltContextDefinition. ! ! !PltNamedType methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltNamedType methodsFor: 'platypus-generated-copying'! namedTypeCopyTo: another another fastSetName: self name. another fastSetWhereRules: self whereRules. another fastSetOwner: self owner ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! namedTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setWhereRules: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! namedTypeToValues: values values add: self name. values add: self whereRules. values add: self owner. ^ values ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! owner: aPltContextDefinition owner := aPltContextDefinition ! ! !PltNamedType methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltNamedType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNamedType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self namedTypeCopyTo: another ! ! !PltNamedType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self namedTypeCopyTo: another ! ! !PltNamedType methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltNamedType methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltContextDefinition self owner: aPltContextDefinition ! ! !PltNamedType methodsFor: 'platypus-generated-set-accessing'! setWhereRules: aListOfPltWhereRule self whereRules: aListOfPltWhereRule ! ! !PltNamedType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. whereRules := OrderedCollection new. owner := nil ! ! !PltNamedType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self namedTypeToValues: (super toValues: values) ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! whereRules ^ whereRules ! ! !PltNamedType methodsFor: 'platypus-generated-accessing'! whereRules: aListOfPltWhereRule whereRules := aListOfPltWhereRule ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltWhereRule as: OrderedCollection ] ! ! !PltNamedType methodsFor: 'platypus-generated-with-context-accessing'! whereRulesUsingContext: aContext ^ self whereRules ! ! !PltNativeAlgorithm commentStamp: 'platypus comment' prior: 106099423! ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNativeAlgorithm class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNativeAlgorithm: self ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-fast-set-accessing'! fastSetImplementations: aListOfPltNativeCode implementations := aListOfPltNativeCode ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self nativeAlgorithmFromValues: (super fromValues: values) ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-accessing'! implementations ^ implementations ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-accessing'! implementations: aListOfPltNativeCode implementations := aListOfPltNativeCode ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltNativeCode as: OrderedCollection ] ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-with-context-accessing'! implementationsUsingContext: aContext ^ self implementations ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-classifying'! isPltNativeAlgorithm ^ true ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self nativeAlgorithmFromValues: values ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self nativeAlgorithmToValues: values ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-copying'! nativeAlgorithmCopyTo: another another fastSetImplementations: self implementations ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! nativeAlgorithmFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setImplementations: valuesloc removeFirst. ^ valuesloc ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! nativeAlgorithmToValues: values values add: self implementations. ^ values ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self nativeAlgorithmCopyTo: another ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self nativeAlgorithmCopyTo: another ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-set-accessing'! setImplementations: aListOfPltNativeCode self implementations: aListOfPltNativeCode ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. implementations := OrderedCollection new ! ! !PltNativeAlgorithm methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self nativeAlgorithmToValues: (super toValues: values) ! ! !PltNativeCode commentStamp: 'platypus comment' prior: 106099641! ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ! !PltNativeCode class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNativeCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNativeCode class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNativeCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltNativeCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNativeCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNativeCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNativeCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNativeCode: self ! ! !PltNativeCode methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !PltNativeCode methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !PltNativeCode methodsFor: 'platypus-generated-with-context-accessing'! codeUsingContext: aContext ^ self code ! ! !PltNativeCode methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCode: aString code := aString ! ! !PltNativeCode methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLanguageSignature: aString languageSignature := aString ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self nativeCodeFromValues: (super fromValues: values) ! ! !PltNativeCode methodsFor: 'platypus-generated-classifying'! isPltNativeCode ^ true ! ! !PltNativeCode methodsFor: 'platypus-generated-accessing'! languageSignature ^ languageSignature ! ! !PltNativeCode methodsFor: 'platypus-generated-accessing'! languageSignature: aString languageSignature := aString ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! languageSignature: aString code: aString1 self setLanguageSignature:aString. self setCode:aString1. ! ! !PltNativeCode methodsFor: 'platypus-generated-with-context-accessing'! languageSignatureUsingContext: aContext ^ self languageSignature ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self nativeCodeFromValues: values ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self nativeCodeToValues: values ! ! !PltNativeCode methodsFor: 'platypus-generated-copying'! nativeCodeCopyTo: another another fastSetLanguageSignature: self languageSignature. another fastSetCode: self code ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! nativeCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLanguageSignature: valuesloc removeFirst. self setCode: valuesloc removeFirst. ^ valuesloc ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! nativeCodeToValues: values values add: self languageSignature. values add: self code. ^ values ! ! !PltNativeCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNativeCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self nativeCodeCopyTo: another ! ! !PltNativeCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self nativeCodeCopyTo: another ! ! !PltNativeCode methodsFor: 'platypus-generated-set-accessing'! setCode: aString self code: aString ! ! !PltNativeCode methodsFor: 'platypus-generated-set-accessing'! setLanguageSignature: aString self languageSignature: aString ! ! !PltNativeCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. languageSignature := ''. code := '' ! ! !PltNativeCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self nativeCodeToValues: (super toValues: values) ! ! !PltParameterDefinition commentStamp: 'platypus comment' prior: 106099869! ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ! !PltParameterDefinition class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltParameterDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltParameterDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptParameterDefinition: self ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! byCopy ^ byCopy ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! byCopy: aBoolean byCopy := aBoolean ! ! !PltParameterDefinition methodsFor: 'platypus-generated-with-context-accessing'! byCopyUsingContext: aContext ^ self byCopy ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! domain: aPltParameterType domain := aPltParameterType ! ! !PltParameterDefinition methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !PltParameterDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetByCopy: aBoolean byCopy := aBoolean ! ! !PltParameterDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aPltParameterType domain := aPltParameterType ! ! !PltParameterDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltParameterDefinition methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltAlgorithmDeclaration owner := aPltAlgorithmDeclaration ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self parameterDefinitionFromValues: (super fromValues: values) ! ! !PltParameterDefinition methodsFor: 'platypus-generated-classifying'! isPltParameterDefinition ^ true ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self parameterDefinitionFromValues: values ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self parameterDefinitionToValues: values ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltParameterDefinition methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltParameterDefinition methodsFor: 'platypus-generated-accessing'! owner: aPltAlgorithmDeclaration owner := aPltAlgorithmDeclaration ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! owner: aPltAlgorithmDeclaration name: aString byCopy: aBoolean domain: aPltParameterType self setOwner:aPltAlgorithmDeclaration. self setName:aString. self setByCopy:aBoolean. self setDomain:aPltParameterType. ! ! !PltParameterDefinition methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltParameterDefinition methodsFor: 'platypus-generated-copying'! parameterDefinitionCopyTo: another another fastSetOwner: self owner. another fastSetName: self name. another fastSetByCopy: self byCopy. another fastSetDomain: self domain ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! parameterDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. self setName: valuesloc removeFirst. self setByCopy: valuesloc removeFirst. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! parameterDefinitionToValues: values values add: self owner. values add: self name. values add: self byCopy. values add: self domain. ^ values ! ! !PltParameterDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltParameterDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self parameterDefinitionCopyTo: another ! ! !PltParameterDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self parameterDefinitionCopyTo: another ! ! !PltParameterDefinition methodsFor: 'platypus-generated-set-accessing'! setByCopy: aBoolean self byCopy: aBoolean ! ! !PltParameterDefinition methodsFor: 'platypus-generated-set-accessing'! setDomain: aPltParameterType self domain: aPltParameterType ! ! !PltParameterDefinition methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltParameterDefinition methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltAlgorithmDeclaration self owner: aPltAlgorithmDeclaration ! ! !PltParameterDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil. name := ''. byCopy := false. domain := nil ! ! !PltParameterDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self parameterDefinitionToValues: (super toValues: values) ! ! !PltQueryVariable commentStamp: 'platypus comment' prior: 106100169! ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ! !PltQueryVariable class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltQueryVariable class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltQueryVariable class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltQueryVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusExpressionsSchemaSchemaDefinition singleton ! ! !PltQueryVariable class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltQueryVariable class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltQueryVariable class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltQueryVariable methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptQueryVariable: self ! ! !PltQueryVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltQueryExpression owner := aPltQueryExpression ! ! !PltQueryVariable methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVariableId: aString variableId := aString ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self queryVariableFromValues: (super fromValues: values) ! ! !PltQueryVariable methodsFor: 'platypus-generated-classifying'! isPltQueryVariable ^ true ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self queryVariableFromValues: values ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self queryVariableToValues: values ! ! !PltQueryVariable methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltQueryVariable methodsFor: 'platypus-generated-accessing'! owner: aPltQueryExpression owner := aPltQueryExpression ! ! !PltQueryVariable methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltQueryVariable methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltQueryVariable methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self queryVariableCopyTo: another ! ! !PltQueryVariable methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self queryVariableCopyTo: another ! ! !PltQueryVariable methodsFor: 'platypus-generated-copying'! queryVariableCopyTo: another another fastSetVariableId: self variableId. another fastSetOwner: self owner ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! queryVariableFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVariableId: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! queryVariableToValues: values values add: self variableId. values add: self owner. ^ values ! ! !PltQueryVariable methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltQueryExpression self owner: aPltQueryExpression ! ! !PltQueryVariable methodsFor: 'platypus-generated-set-accessing'! setVariableId: aString self variableId: aString ! ! !PltQueryVariable methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. variableId := ''. owner := nil ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self queryVariableToValues: (super toValues: values) ! ! !PltQueryVariable methodsFor: 'platypus-generated-accessing'! variableId ^ variableId ! ! !PltQueryVariable methodsFor: 'platypus-generated-accessing'! variableId: aString variableId := aString ! ! !PltQueryVariable methodsFor: 'platypus-generated-group-accessing'! variableId: aString owner: aPltQueryExpression self setVariableId:aString. self setOwner:aPltQueryExpression. ! ! !PltQueryVariable methodsFor: 'platypus-generated-with-context-accessing'! variableIdUsingContext: aContext ^ self variableId ! ! !PltRemarkReference commentStamp: 'platypus comment' prior: 106100421! ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ! !PltRemarkReference class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRemarkReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRemarkReference class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRemarkReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltRemarkReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRemarkReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRemarkReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRemarkReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRemarkReference: self ! ! !PltRemarkReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInside: aPltDictionaryInstanceReference inside := aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPrefix: aString prefix := aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetReferenced: aPltDictionaryInstanceReference referenced := aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRemark: aPltRemark remark := aPltRemark ! ! !PltRemarkReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSuffix: aString suffix := aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self remarkReferenceFromValues: (super fromValues: values) ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! inside ^ inside ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! inside: aPltDictionaryInstanceReference inside := aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-with-context-accessing'! insideUsingContext: aContext ^ self inside ! ! !PltRemarkReference methodsFor: 'platypus-generated-classifying'! isPltRemarkReference ^ true ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self remarkReferenceFromValues: values ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self remarkReferenceToValues: values ! ! !PltRemarkReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRemarkReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self remarkReferenceCopyTo: another ! ! !PltRemarkReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self remarkReferenceCopyTo: another ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! prefix ^ prefix ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! prefix: aString prefix := aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! prefix: aString suffix: aString1 inside: aPltDictionaryInstanceReference referenced: aPltDictionaryInstanceReference1 remark: aPltRemark self setPrefix:aString. self setSuffix:aString1. self setInside:aPltDictionaryInstanceReference. self setReferenced:aPltDictionaryInstanceReference1. self setRemark:aPltRemark. ! ! !PltRemarkReference methodsFor: 'platypus-generated-with-context-accessing'! prefixUsingContext: aContext ^ self prefix ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! referenced ^ referenced ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! referenced: aPltDictionaryInstanceReference referenced := aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-with-context-accessing'! referencedUsingContext: aContext ^ self referenced ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! remark ^ remark ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! remark: aPltRemark remark := aPltRemark ! ! !PltRemarkReference methodsFor: 'platypus-generated-copying'! remarkReferenceCopyTo: another another fastSetPrefix: self prefix. another fastSetSuffix: self suffix. another fastSetInside: self inside. another fastSetReferenced: self referenced. another fastSetRemark: self remark ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! remarkReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPrefix: valuesloc removeFirst. self setSuffix: valuesloc removeFirst. self setInside: valuesloc removeFirst. self setReferenced: valuesloc removeFirst. self setRemark: valuesloc removeFirst. ^ valuesloc ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! remarkReferenceToValues: values values add: self prefix. values add: self suffix. values add: self inside. values add: self referenced. values add: self remark. ^ values ! ! !PltRemarkReference methodsFor: 'platypus-generated-with-context-accessing'! remarkUsingContext: aContext ^ self remark ! ! !PltRemarkReference methodsFor: 'platypus-generated-set-accessing'! setInside: aPltDictionaryInstanceReference self inside: aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-set-accessing'! setPrefix: aString self prefix: aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-set-accessing'! setReferenced: aPltDictionaryInstanceReference self referenced: aPltDictionaryInstanceReference ! ! !PltRemarkReference methodsFor: 'platypus-generated-set-accessing'! setRemark: aPltRemark self remark: aPltRemark ! ! !PltRemarkReference methodsFor: 'platypus-generated-set-accessing'! setSuffix: aString self suffix: aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. prefix := ''. suffix := nil. inside := nil. referenced := nil. remark := nil ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! suffix ^ suffix ! ! !PltRemarkReference methodsFor: 'platypus-generated-accessing'! suffix: aString suffix := aString ! ! !PltRemarkReference methodsFor: 'platypus-generated-with-context-accessing'! suffixUsingContext: aContext ^ self suffix ! ! !PltRemarkReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self remarkReferenceToValues: (super toValues: values) ! ! !PltSelectType commentStamp: 'platypus comment' prior: 106100748! ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ! !PltSelectType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSelectType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSelectType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSelectType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSelectType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSelectType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSelectType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSelectType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSelectType: self ! ! !PltSelectType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltSelectType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltSelectType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptSelectTypeUsingContext: aContext ! ! !PltSelectType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltDefinedType owner := aPltDefinedType ! ! !PltSelectType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSelections: aListOfPltNamedTypeReference selections := aListOfPltNamedTypeReference ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self selectTypeFromValues: (super fromValues: values) ! ! !PltSelectType methodsFor: 'platypus-generated-classifying'! isPltSelectType ^ true ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self selectTypeFromValues: values ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self selectTypeToValues: values ! ! !PltSelectType methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltSelectType methodsFor: 'platypus-generated-accessing'! owner: aPltDefinedType owner := aPltDefinedType ! ! !PltSelectType methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltSelectType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSelectType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self selectTypeCopyTo: another ! ! !PltSelectType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self selectTypeCopyTo: another ! ! !PltSelectType methodsFor: 'platypus-generated-copying'! selectTypeCopyTo: another another fastSetSelections: self selections. another fastSetOwner: self owner ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! selectTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSelections: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! selectTypeToValues: values values add: self selections. values add: self owner. ^ values ! ! !PltSelectType methodsFor: 'platypus-generated-accessing'! selections ^ selections ! ! !PltSelectType methodsFor: 'platypus-generated-accessing'! selections: aListOfPltNamedTypeReference selections := aListOfPltNamedTypeReference ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltNamedTypeReference as: OrderedCollection ] ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! selections: aListOfPltNamedTypeReference owner: aPltDefinedType self setSelections:aListOfPltNamedTypeReference. self setOwner:aPltDefinedType. ! ! !PltSelectType methodsFor: 'platypus-generated-with-context-accessing'! selectionsUsingContext: aContext ^ self selections ! ! !PltSelectType methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltDefinedType self owner: aPltDefinedType ! ! !PltSelectType methodsFor: 'platypus-generated-set-accessing'! setSelections: aListOfPltNamedTypeReference self selections: aListOfPltNamedTypeReference ! ! !PltSelectType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. selections := OrderedCollection new. owner := nil ! ! !PltSelectType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self selectTypeToValues: (super toValues: values) ! ! !PltSimpleType commentStamp: 'platypus comment' prior: 106101082! ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltBinaryType commentStamp: 'platypus comment' prior: 106101345! ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ! !PltBinaryType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBinaryType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBinaryType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBinaryType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltBinaryType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBinaryType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBinaryType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBinaryType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBinaryType: self ! ! !PltBinaryType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltBinaryType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltBinaryType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptBinaryTypeUsingContext: aContext ! ! !PltBinaryType methodsFor: 'platypus-generated-copying'! binaryTypeCopyTo: another another fastSetWidth: self width. another fastSetFixedWidth: self fixedWidth ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! binaryTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setWidth: valuesloc removeFirst. self setFixedWidth: valuesloc removeFirst. ^ valuesloc ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! binaryTypeToValues: values values add: self width. values add: self fixedWidth. ^ values ! ! !PltBinaryType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFixedWidth: aBoolean fixedWidth := aBoolean ! ! !PltBinaryType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWidth: aPltBound width := aPltBound ! ! !PltBinaryType methodsFor: 'platypus-generated-accessing'! fixedWidth ^ fixedWidth ! ! !PltBinaryType methodsFor: 'platypus-generated-accessing'! fixedWidth: aBoolean fixedWidth := aBoolean ! ! !PltBinaryType methodsFor: 'platypus-generated-with-context-accessing'! fixedWidthUsingContext: aContext ^ self fixedWidth ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self binaryTypeFromValues: (super fromValues: values) ! ! !PltBinaryType methodsFor: 'platypus-generated-classifying'! isPltBinaryType ^ true ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self binaryTypeFromValues: values ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self binaryTypeToValues: values ! ! !PltBinaryType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBinaryType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self binaryTypeCopyTo: another ! ! !PltBinaryType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self binaryTypeCopyTo: another ! ! !PltBinaryType methodsFor: 'platypus-generated-set-accessing'! setFixedWidth: aBoolean self fixedWidth: aBoolean ! ! !PltBinaryType methodsFor: 'platypus-generated-set-accessing'! setWidth: aPltBound self width: aPltBound ! ! !PltBinaryType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. width := nil. fixedWidth := false ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self binaryTypeToValues: (super toValues: values) ! ! !PltBinaryType methodsFor: 'platypus-generated-accessing'! width ^ width ! ! !PltBinaryType methodsFor: 'platypus-generated-accessing'! width: aPltBound width := aPltBound ! ! !PltBinaryType methodsFor: 'platypus-generated-group-accessing'! width: aPltBound fixedWidth: aBoolean self setWidth:aPltBound. self setFixedWidth:aBoolean. ! ! !PltBinaryType methodsFor: 'platypus-generated-with-context-accessing'! widthUsingContext: aContext ^ self width ! ! !PltLogicalType commentStamp: 'platypus comment' prior: 106101623! ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ! !PltBooleanType commentStamp: 'platypus comment' prior: 106101854! ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ! !PltBooleanType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBooleanType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBooleanType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBooleanType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBooleanType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBooleanType: self ! ! !PltBooleanType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltBooleanType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltBooleanType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptBooleanTypeUsingContext: aContext ! ! !PltBooleanType methodsFor: 'platypus-generated-copying'! booleanTypeCopyTo: another ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! booleanTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! booleanTypeToValues: values ^ values ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self booleanTypeFromValues: (super fromValues: values) ! ! !PltBooleanType methodsFor: 'platypus-generated-classifying'! isPltBooleanType ^ true ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self booleanTypeFromValues: values ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self booleanTypeToValues: values ! ! !PltBooleanType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBooleanType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self booleanTypeCopyTo: another ! ! !PltBooleanType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self booleanTypeCopyTo: another ! ! !PltBooleanType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltBooleanType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self booleanTypeToValues: (super toValues: values) ! ! !PltLogicalType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltLogicalType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltLogicalType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltLogicalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltLogicalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltLogicalType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltLogicalType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltLogicalType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptLogicalType: self ! ! !PltLogicalType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltLogicalType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltLogicalType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptLogicalTypeUsingContext: aContext ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self logicalTypeFromValues: (super fromValues: values) ! ! !PltLogicalType methodsFor: 'platypus-generated-classifying'! isPltLogicalType ^ true ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self logicalTypeFromValues: values ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self logicalTypeToValues: values ! ! !PltLogicalType methodsFor: 'platypus-generated-copying'! logicalTypeCopyTo: another ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! logicalTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! logicalTypeToValues: values ^ values ! ! !PltLogicalType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltLogicalType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self logicalTypeCopyTo: another ! ! !PltLogicalType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self logicalTypeCopyTo: another ! ! !PltLogicalType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltLogicalType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self logicalTypeToValues: (super toValues: values) ! ! !PltNumberType commentStamp: 'platypus comment' prior: 106102103! ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ! !PltIntegerType commentStamp: 'platypus comment' prior: 106102332! ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ! !PltIntegerType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIntegerType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIntegerType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIntegerType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIntegerType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIntegerType: self ! ! !PltIntegerType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltIntegerType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltIntegerType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptIntegerTypeUsingContext: aContext ! ! !PltIntegerType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPrecision: aPltBound precision := aPltBound ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self integerTypeFromValues: (super fromValues: values) ! ! !PltIntegerType methodsFor: 'platypus-generated-copying'! integerTypeCopyTo: another another fastSetPrecision: self precision ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! integerTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPrecision: valuesloc removeFirst. ^ valuesloc ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! integerTypeToValues: values values add: self precision. ^ values ! ! !PltIntegerType methodsFor: 'platypus-generated-classifying'! isPltIntegerType ^ true ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self integerTypeFromValues: values ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self integerTypeToValues: values ! ! !PltIntegerType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIntegerType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self integerTypeCopyTo: another ! ! !PltIntegerType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self integerTypeCopyTo: another ! ! !PltIntegerType methodsFor: 'platypus-generated-accessing'! precision ^ precision ! ! !PltIntegerType methodsFor: 'platypus-generated-accessing'! precision: aPltBound precision := aPltBound ! ! !PltIntegerType methodsFor: 'platypus-generated-with-context-accessing'! precisionUsingContext: aContext ^ self precision ! ! !PltIntegerType methodsFor: 'platypus-generated-set-accessing'! setPrecision: aPltBound self precision: aPltBound ! ! !PltIntegerType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. precision := nil ! ! !PltIntegerType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self integerTypeToValues: (super toValues: values) ! ! !PltNumberType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNumberType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNumberType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNumberType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltNumberType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNumberType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNumberType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNumberType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNumberType: self ! ! !PltNumberType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltNumberType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltNumberType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptNumberTypeUsingContext: aContext ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self numberTypeFromValues: (super fromValues: values) ! ! !PltNumberType methodsFor: 'platypus-generated-classifying'! isPltNumberType ^ true ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self numberTypeFromValues: values ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self numberTypeToValues: values ! ! !PltNumberType methodsFor: 'platypus-generated-copying'! numberTypeCopyTo: another ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! numberTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! numberTypeToValues: values ^ values ! ! !PltNumberType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNumberType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self numberTypeCopyTo: another ! ! !PltNumberType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self numberTypeCopyTo: another ! ! !PltNumberType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNumberType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self numberTypeToValues: (super toValues: values) ! ! !PltRealType commentStamp: 'platypus comment' prior: 106102606! ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ! !PltRealType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRealType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRealType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRealType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRealType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRealType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRealType: self ! ! !PltRealType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltRealType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltRealType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptRealTypeUsingContext: aContext ! ! !PltRealType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPrecision: aPltBound precision := aPltBound ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self realTypeFromValues: (super fromValues: values) ! ! !PltRealType methodsFor: 'platypus-generated-classifying'! isPltRealType ^ true ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self realTypeFromValues: values ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self realTypeToValues: values ! ! !PltRealType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRealType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self realTypeCopyTo: another ! ! !PltRealType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self realTypeCopyTo: another ! ! !PltRealType methodsFor: 'platypus-generated-accessing'! precision ^ precision ! ! !PltRealType methodsFor: 'platypus-generated-accessing'! precision: aPltBound precision := aPltBound ! ! !PltRealType methodsFor: 'platypus-generated-with-context-accessing'! precisionUsingContext: aContext ^ self precision ! ! !PltRealType methodsFor: 'platypus-generated-copying'! realTypeCopyTo: another another fastSetPrecision: self precision ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! realTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPrecision: valuesloc removeFirst. ^ valuesloc ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! realTypeToValues: values values add: self precision. ^ values ! ! !PltRealType methodsFor: 'platypus-generated-set-accessing'! setPrecision: aPltBound self precision: aPltBound ! ! !PltRealType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. precision := nil ! ! !PltRealType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self realTypeToValues: (super toValues: values) ! ! !PltSimpleType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSimpleType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSimpleType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSimpleType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSimpleType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSimpleType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSimpleType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSimpleType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSimpleType: self ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self simpleTypeFromValues: (super fromValues: values) ! ! !PltSimpleType methodsFor: 'platypus-generated-classifying'! isPltSimpleType ^ true ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self simpleTypeFromValues: values ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self simpleTypeToValues: values ! ! !PltSimpleType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSimpleType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self simpleTypeCopyTo: another ! ! !PltSimpleType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self simpleTypeCopyTo: another ! ! !PltSimpleType methodsFor: 'platypus-generated-copying'! simpleTypeCopyTo: another ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! simpleTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! simpleTypeToValues: values ^ values ! ! !PltSimpleType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSimpleType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self simpleTypeToValues: (super toValues: values) ! ! !PltStringType commentStamp: 'platypus comment' prior: 106102876! ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ! !PltStringType class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltStringType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltStringType class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltStringType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltStringType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltStringType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptStringType: self ! ! !PltStringType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltStringType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltStringType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptStringTypeUsingContext: aContext ! ! !PltStringType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFixedWidth: aBoolean fixedWidth := aBoolean ! ! !PltStringType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWidth: aPltBound width := aPltBound ! ! !PltStringType methodsFor: 'platypus-generated-accessing'! fixedWidth ^ fixedWidth ! ! !PltStringType methodsFor: 'platypus-generated-accessing'! fixedWidth: aBoolean fixedWidth := aBoolean ! ! !PltStringType methodsFor: 'platypus-generated-with-context-accessing'! fixedWidthUsingContext: aContext ^ self fixedWidth ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self stringTypeFromValues: (super fromValues: values) ! ! !PltStringType methodsFor: 'platypus-generated-classifying'! isPltStringType ^ true ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self stringTypeFromValues: values ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self stringTypeToValues: values ! ! !PltStringType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltStringType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self stringTypeCopyTo: another ! ! !PltStringType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self stringTypeCopyTo: another ! ! !PltStringType methodsFor: 'platypus-generated-set-accessing'! setFixedWidth: aBoolean self fixedWidth: aBoolean ! ! !PltStringType methodsFor: 'platypus-generated-set-accessing'! setWidth: aPltBound self width: aPltBound ! ! !PltStringType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. width := nil. fixedWidth := false ! ! !PltStringType methodsFor: 'platypus-generated-copying'! stringTypeCopyTo: another another fastSetWidth: self width. another fastSetFixedWidth: self fixedWidth ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! stringTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setWidth: valuesloc removeFirst. self setFixedWidth: valuesloc removeFirst. ^ valuesloc ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! stringTypeToValues: values values add: self width. values add: self fixedWidth. ^ values ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self stringTypeToValues: (super toValues: values) ! ! !PltStringType methodsFor: 'platypus-generated-accessing'! width ^ width ! ! !PltStringType methodsFor: 'platypus-generated-accessing'! width: aPltBound width := aPltBound ! ! !PltStringType methodsFor: 'platypus-generated-group-accessing'! width: aPltBound fixedWidth: aBoolean self setWidth:aPltBound. self setFixedWidth:aBoolean. ! ! !PltStringType methodsFor: 'platypus-generated-with-context-accessing'! widthUsingContext: aContext ^ self width ! ! !PltStatement commentStamp: 'platypus comment' prior: 106103152! ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltAliasStatement commentStamp: 'platypus comment' prior: 106103348! ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ! !PltAliasStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAliasStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAliasStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAliasStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltAliasStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAliasStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAliasStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAliasStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAliasStatement: self ! ! !PltAliasStatement methodsFor: 'platypus-generated-copying'! aliasStatementCopyTo: another another fastSetVariable: self variable. another fastSetStatements: self statements ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! aliasStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVariable: valuesloc removeFirst. self setStatements: valuesloc removeFirst. ^ valuesloc ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! aliasStatementToValues: values values add: self variable. values add: self statements. ^ values ! ! !PltAliasStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetStatements: aListOfPltStatement statements := aListOfPltStatement ! ! !PltAliasStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVariable: aPltAliasStatementVariable variable := aPltAliasStatementVariable ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aliasStatementFromValues: (super fromValues: values) ! ! !PltAliasStatement methodsFor: 'platypus-generated-classifying'! isPltAliasStatement ^ true ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aliasStatementFromValues: values ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aliasStatementToValues: values ! ! !PltAliasStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAliasStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aliasStatementCopyTo: another ! ! !PltAliasStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aliasStatementCopyTo: another ! ! !PltAliasStatement methodsFor: 'platypus-generated-set-accessing'! setStatements: aListOfPltStatement self statements: aListOfPltStatement ! ! !PltAliasStatement methodsFor: 'platypus-generated-set-accessing'! setVariable: aPltAliasStatementVariable self variable: aPltAliasStatementVariable ! ! !PltAliasStatement methodsFor: 'platypus-generated-accessing'! statements ^ statements ! ! !PltAliasStatement methodsFor: 'platypus-generated-accessing'! statements: aListOfPltStatement statements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltAliasStatement methodsFor: 'platypus-generated-with-context-accessing'! statementsUsingContext: aContext ^ self statements ! ! !PltAliasStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. variable := nil. statements := OrderedCollection new ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aliasStatementToValues: (super toValues: values) ! ! !PltAliasStatement methodsFor: 'platypus-generated-accessing'! variable ^ variable ! ! !PltAliasStatement methodsFor: 'platypus-generated-accessing'! variable: aPltAliasStatementVariable variable := aPltAliasStatementVariable ! ! !PltAliasStatement methodsFor: 'platypus-generated-group-accessing'! variable: aPltAliasStatementVariable statements: aListOfPltStatement self setVariable:aPltAliasStatementVariable. self setStatements:aListOfPltStatement. ! ! !PltAliasStatement methodsFor: 'platypus-generated-with-context-accessing'! variableUsingContext: aContext ^ self variable ! ! !PltAssignmentStatement commentStamp: 'platypus comment' prior: 106103595! ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ! !PltAssignmentStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAssignmentStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAssignmentStatement: self ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-copying'! assignmentStatementCopyTo: another another fastSetLeft: self left. another fastSetRightExpr: self rightExpr ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! assignmentStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLeft: valuesloc removeFirst. self setRightExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! assignmentStatementToValues: values values add: self left. values add: self rightExpr. ^ values ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLeft: aPltAssignable left := aPltAssignable ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRightExpr: aPltExpression rightExpr := aPltExpression ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self assignmentStatementFromValues: (super fromValues: values) ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-classifying'! isPltAssignmentStatement ^ true ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-accessing'! left ^ left ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-accessing'! left: aPltAssignable left := aPltAssignable ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! left: aPltAssignable rightExpr: aPltExpression self setLeft:aPltAssignable. self setRightExpr:aPltExpression. ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-with-context-accessing'! leftUsingContext: aContext ^ self left ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self assignmentStatementFromValues: values ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self assignmentStatementToValues: values ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self assignmentStatementCopyTo: another ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self assignmentStatementCopyTo: another ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-accessing'! rightExpr ^ rightExpr ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-accessing'! rightExpr: aPltExpression rightExpr := aPltExpression ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-with-context-accessing'! rightExprUsingContext: aContext ^ self rightExpr ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-set-accessing'! setLeft: aPltAssignable self left: aPltAssignable ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-set-accessing'! setRightExpr: aPltExpression self rightExpr: aPltExpression ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. left := nil. rightExpr := nil ! ! !PltAssignmentStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self assignmentStatementToValues: (super toValues: values) ! ! !PltCaseStatement commentStamp: 'platypus comment' prior: 106103816! ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ! !PltCaseStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltCaseStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltCaseStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltCaseStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltCaseStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltCaseStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltCaseStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltCaseStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCaseStatement: self ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! caseActions ^ caseActions ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! caseActions: aListOfPltCaseAction caseActions := aListOfPltCaseAction ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltCaseAction as: OrderedCollection ] ! ! !PltCaseStatement methodsFor: 'platypus-generated-with-context-accessing'! caseActionsUsingContext: aContext ^ self caseActions ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! caseOtherwise ^ caseOtherwise ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! caseOtherwise: aPltStatement caseOtherwise := aPltStatement ! ! !PltCaseStatement methodsFor: 'platypus-generated-with-context-accessing'! caseOtherwiseUsingContext: aContext ^ self caseOtherwise ! ! !PltCaseStatement methodsFor: 'platypus-generated-copying'! caseStatementCopyTo: another another fastSetSelector: self selector. another fastSetCaseActions: self caseActions. another fastSetCaseOtherwise: self caseOtherwise ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! caseStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSelector: valuesloc removeFirst. self setCaseActions: valuesloc removeFirst. self setCaseOtherwise: valuesloc removeFirst. ^ valuesloc ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! caseStatementToValues: values values add: self selector. values add: self caseActions. values add: self caseOtherwise. ^ values ! ! !PltCaseStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCaseActions: aListOfPltCaseAction caseActions := aListOfPltCaseAction ! ! !PltCaseStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCaseOtherwise: aPltStatement caseOtherwise := aPltStatement ! ! !PltCaseStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSelector: aPltExpression selector := aPltExpression ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self caseStatementFromValues: (super fromValues: values) ! ! !PltCaseStatement methodsFor: 'platypus-generated-classifying'! isPltCaseStatement ^ true ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self caseStatementFromValues: values ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self caseStatementToValues: values ! ! !PltCaseStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltCaseStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self caseStatementCopyTo: another ! ! !PltCaseStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self caseStatementCopyTo: another ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! selector ^ selector ! ! !PltCaseStatement methodsFor: 'platypus-generated-accessing'! selector: aPltExpression selector := aPltExpression ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! selector: aPltExpression caseActions: aListOfPltCaseAction caseOtherwise: aPltStatement self setSelector:aPltExpression. self setCaseActions:aListOfPltCaseAction. self setCaseOtherwise:aPltStatement. ! ! !PltCaseStatement methodsFor: 'platypus-generated-with-context-accessing'! selectorUsingContext: aContext ^ self selector ! ! !PltCaseStatement methodsFor: 'platypus-generated-set-accessing'! setCaseActions: aListOfPltCaseAction self caseActions: aListOfPltCaseAction ! ! !PltCaseStatement methodsFor: 'platypus-generated-set-accessing'! setCaseOtherwise: aPltStatement self caseOtherwise: aPltStatement ! ! !PltCaseStatement methodsFor: 'platypus-generated-set-accessing'! setSelector: aPltExpression self selector: aPltExpression ! ! !PltCaseStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. selector := nil. caseActions := OrderedCollection new. caseOtherwise := nil ! ! !PltCaseStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self caseStatementToValues: (super toValues: values) ! ! !PltCompoundStatement commentStamp: 'platypus comment' prior: 106104088! ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ! !PltCompoundStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltCompoundStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltCompoundStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCompoundStatement: self ! ! !PltCompoundStatement methodsFor: 'platypus-generated-copying'! compoundStatementCopyTo: another another fastSetStatements: self statements ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! compoundStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setStatements: valuesloc removeFirst. ^ valuesloc ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! compoundStatementToValues: values values add: self statements. ^ values ! ! !PltCompoundStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetStatements: aListOfPltStatement statements := aListOfPltStatement ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self compoundStatementFromValues: (super fromValues: values) ! ! !PltCompoundStatement methodsFor: 'platypus-generated-classifying'! isPltCompoundStatement ^ true ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self compoundStatementFromValues: values ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self compoundStatementToValues: values ! ! !PltCompoundStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltCompoundStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self compoundStatementCopyTo: another ! ! !PltCompoundStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self compoundStatementCopyTo: another ! ! !PltCompoundStatement methodsFor: 'platypus-generated-set-accessing'! setStatements: aListOfPltStatement self statements: aListOfPltStatement ! ! !PltCompoundStatement methodsFor: 'platypus-generated-accessing'! statements ^ statements ! ! !PltCompoundStatement methodsFor: 'platypus-generated-accessing'! statements: aListOfPltStatement statements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltCompoundStatement methodsFor: 'platypus-generated-with-context-accessing'! statementsUsingContext: aContext ^ self statements ! ! !PltCompoundStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. statements := OrderedCollection new ! ! !PltCompoundStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self compoundStatementToValues: (super toValues: values) ! ! !PltEndSplitmarkStatement commentStamp: 'platypus comment' prior: 106104302! ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEndSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEndSplitmarkStatement: self ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-copying'! endSplitmarkStatementCopyTo: another ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! endSplitmarkStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! endSplitmarkStatementToValues: values ^ values ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self endSplitmarkStatementFromValues: (super fromValues: values) ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-classifying'! isPltEndSplitmarkStatement ^ true ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self endSplitmarkStatementFromValues: values ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self endSplitmarkStatementToValues: values ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self endSplitmarkStatementCopyTo: another ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self endSplitmarkStatementCopyTo: another ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltEndSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self endSplitmarkStatementToValues: (super toValues: values) ! ! !PltEscapeStatement commentStamp: 'platypus comment' prior: 106104482! ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltEscapeStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltEscapeStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltEscapeStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEscapeStatement: self ! ! !PltEscapeStatement methodsFor: 'platypus-generated-copying'! escapeStatementCopyTo: another ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! escapeStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! escapeStatementToValues: values ^ values ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self escapeStatementFromValues: (super fromValues: values) ! ! !PltEscapeStatement methodsFor: 'platypus-generated-classifying'! isPltEscapeStatement ^ true ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self escapeStatementFromValues: values ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self escapeStatementToValues: values ! ! !PltEscapeStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltEscapeStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self escapeStatementCopyTo: another ! ! !PltEscapeStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self escapeStatementCopyTo: another ! ! !PltEscapeStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltEscapeStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self escapeStatementToValues: (super toValues: values) ! ! !PltIfStatement commentStamp: 'platypus comment' prior: 106104651! ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ! !PltIfStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltIfStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltIfStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltIfStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltIfStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltIfStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltIfStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltIfStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptIfStatement: self ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! elseStatements ^ elseStatements ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! elseStatements: aListOfPltStatement elseStatements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltIfStatement methodsFor: 'platypus-generated-with-context-accessing'! elseStatementsUsingContext: aContext ^ self elseStatements ! ! !PltIfStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetElseStatements: aListOfPltStatement elseStatements := aListOfPltStatement ! ! !PltIfStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSelector: aPltExpression selector := aPltExpression ! ! !PltIfStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetThenStatements: aListOfPltStatement thenStatements := aListOfPltStatement ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self ifStatementFromValues: (super fromValues: values) ! ! !PltIfStatement methodsFor: 'platypus-generated-copying'! ifStatementCopyTo: another another fastSetSelector: self selector. another fastSetThenStatements: self thenStatements. another fastSetElseStatements: self elseStatements ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! ifStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSelector: valuesloc removeFirst. self setThenStatements: valuesloc removeFirst. self setElseStatements: valuesloc removeFirst. ^ valuesloc ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! ifStatementToValues: values values add: self selector. values add: self thenStatements. values add: self elseStatements. ^ values ! ! !PltIfStatement methodsFor: 'platypus-generated-classifying'! isPltIfStatement ^ true ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self ifStatementFromValues: values ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self ifStatementToValues: values ! ! !PltIfStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltIfStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self ifStatementCopyTo: another ! ! !PltIfStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self ifStatementCopyTo: another ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! selector ^ selector ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! selector: aPltExpression selector := aPltExpression ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! selector: aPltExpression thenStatements: aListOfPltStatement elseStatements: aListOfPltStatement1 self setSelector:aPltExpression. self setThenStatements:aListOfPltStatement. self setElseStatements:aListOfPltStatement1. ! ! !PltIfStatement methodsFor: 'platypus-generated-with-context-accessing'! selectorUsingContext: aContext ^ self selector ! ! !PltIfStatement methodsFor: 'platypus-generated-set-accessing'! setElseStatements: aListOfPltStatement self elseStatements: aListOfPltStatement ! ! !PltIfStatement methodsFor: 'platypus-generated-set-accessing'! setSelector: aPltExpression self selector: aPltExpression ! ! !PltIfStatement methodsFor: 'platypus-generated-set-accessing'! setThenStatements: aListOfPltStatement self thenStatements: aListOfPltStatement ! ! !PltIfStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. selector := nil. thenStatements := OrderedCollection new. elseStatements := nil ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! thenStatements ^ thenStatements ! ! !PltIfStatement methodsFor: 'platypus-generated-accessing'! thenStatements: aListOfPltStatement thenStatements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltIfStatement methodsFor: 'platypus-generated-with-context-accessing'! thenStatementsUsingContext: aContext ^ self thenStatements ! ! !PltIfStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self ifStatementToValues: (super toValues: values) ! ! !PltNativeStatement commentStamp: 'platypus comment' prior: 106104929! ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ! !PltNativeStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNativeStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNativeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNativeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltNativeStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNativeStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNativeStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNativeStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNativeStatement: self ! ! !PltNativeStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSource: aPltNativeAlgorithm source := aPltNativeAlgorithm ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self nativeStatementFromValues: (super fromValues: values) ! ! !PltNativeStatement methodsFor: 'platypus-generated-classifying'! isPltNativeStatement ^ true ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self nativeStatementFromValues: values ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self nativeStatementToValues: values ! ! !PltNativeStatement methodsFor: 'platypus-generated-copying'! nativeStatementCopyTo: another another fastSetSource: self source ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! nativeStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSource: valuesloc removeFirst. ^ valuesloc ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! nativeStatementToValues: values values add: self source. ^ values ! ! !PltNativeStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNativeStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self nativeStatementCopyTo: another ! ! !PltNativeStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self nativeStatementCopyTo: another ! ! !PltNativeStatement methodsFor: 'platypus-generated-set-accessing'! setSource: aPltNativeAlgorithm self source: aPltNativeAlgorithm ! ! !PltNativeStatement methodsFor: 'platypus-generated-accessing'! source ^ source ! ! !PltNativeStatement methodsFor: 'platypus-generated-accessing'! source: aPltNativeAlgorithm source := aPltNativeAlgorithm ! ! !PltNativeStatement methodsFor: 'platypus-generated-with-context-accessing'! sourceUsingContext: aContext ^ self source ! ! !PltNativeStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. source := nil ! ! !PltNativeStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self nativeStatementToValues: (super toValues: values) ! ! !PltNullStatement commentStamp: 'platypus comment' prior: 106105128! ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltNullStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltNullStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltNullStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltNullStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltNullStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltNullStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltNullStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltNullStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptNullStatement: self ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self nullStatementFromValues: (super fromValues: values) ! ! !PltNullStatement methodsFor: 'platypus-generated-classifying'! isPltNullStatement ^ true ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self nullStatementFromValues: values ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self nullStatementToValues: values ! ! !PltNullStatement methodsFor: 'platypus-generated-copying'! nullStatementCopyTo: another ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! nullStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! nullStatementToValues: values ^ values ! ! !PltNullStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltNullStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self nullStatementCopyTo: another ! ! !PltNullStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self nullStatementCopyTo: another ! ! !PltNullStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltNullStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self nullStatementToValues: (super toValues: values) ! ! !PltOutputStatement commentStamp: 'platypus comment' prior: 106105299! ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ! !PltOutputStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltOutputStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltOutputStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltOutputStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltOutputStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltOutputStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltOutputStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltOutputStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptOutputStatement: self ! ! !PltOutputStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOutput: aPltExpression output := aPltExpression ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self outputStatementFromValues: (super fromValues: values) ! ! !PltOutputStatement methodsFor: 'platypus-generated-classifying'! isPltOutputStatement ^ true ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self outputStatementFromValues: values ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self outputStatementToValues: values ! ! !PltOutputStatement methodsFor: 'platypus-generated-accessing'! output ^ output ! ! !PltOutputStatement methodsFor: 'platypus-generated-accessing'! output: aPltExpression output := aPltExpression ! ! !PltOutputStatement methodsFor: 'platypus-generated-copying'! outputStatementCopyTo: another another fastSetOutput: self output ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! outputStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOutput: valuesloc removeFirst. ^ valuesloc ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! outputStatementToValues: values values add: self output. ^ values ! ! !PltOutputStatement methodsFor: 'platypus-generated-with-context-accessing'! outputUsingContext: aContext ^ self output ! ! !PltOutputStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltOutputStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self outputStatementCopyTo: another ! ! !PltOutputStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self outputStatementCopyTo: another ! ! !PltOutputStatement methodsFor: 'platypus-generated-set-accessing'! setOutput: aPltExpression self output: aPltExpression ! ! !PltOutputStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. output := nil ! ! !PltOutputStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self outputStatementToValues: (super toValues: values) ! ! !PltProcedureCallStatement commentStamp: 'platypus comment' prior: 106105501! ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltProcedureCallStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptProcedureCallStatement: self ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-accessing'! call ^ call ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-accessing'! call: aPltIdentifier call := aPltIdentifier ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-with-context-accessing'! callUsingContext: aContext ^ self call ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetCall: aPltIdentifier call := aPltIdentifier ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self procedureCallStatementFromValues: (super fromValues: values) ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-classifying'! isPltProcedureCallStatement ^ true ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self procedureCallStatementFromValues: values ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self procedureCallStatementToValues: values ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self procedureCallStatementCopyTo: another ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self procedureCallStatementCopyTo: another ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-copying'! procedureCallStatementCopyTo: another another fastSetCall: self call ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! procedureCallStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setCall: valuesloc removeFirst. ^ valuesloc ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! procedureCallStatementToValues: values values add: self call. ^ values ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-set-accessing'! setCall: aPltIdentifier self call: aPltIdentifier ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. call := nil ! ! !PltProcedureCallStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self procedureCallStatementToValues: (super toValues: values) ! ! !PltRepeatStatement commentStamp: 'platypus comment' prior: 106105702! ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ! !PltRepeatStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltRepeatStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltRepeatStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRepeatStatement: self ! ! !PltRepeatStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIncrControl: aPltIncrementControl incrControl := aPltIncrementControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetStatements: aListOfPltStatement statements := aListOfPltStatement ! ! !PltRepeatStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUntilControl: aPltExpression untilControl := aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWhileControl: aPltExpression whileControl := aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self repeatStatementFromValues: (super fromValues: values) ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! incrControl ^ incrControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! incrControl: aPltIncrementControl incrControl := aPltIncrementControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! incrControl: aPltIncrementControl untilControl: aPltExpression whileControl: aPltExpression1 statements: aListOfPltStatement self setIncrControl:aPltIncrementControl. self setUntilControl:aPltExpression. self setWhileControl:aPltExpression1. self setStatements:aListOfPltStatement. ! ! !PltRepeatStatement methodsFor: 'platypus-generated-with-context-accessing'! incrControlUsingContext: aContext ^ self incrControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-classifying'! isPltRepeatStatement ^ true ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self repeatStatementFromValues: values ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self repeatStatementToValues: values ! ! !PltRepeatStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltRepeatStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self repeatStatementCopyTo: another ! ! !PltRepeatStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self repeatStatementCopyTo: another ! ! !PltRepeatStatement methodsFor: 'platypus-generated-copying'! repeatStatementCopyTo: another another fastSetIncrControl: self incrControl. another fastSetUntilControl: self untilControl. another fastSetWhileControl: self whileControl. another fastSetStatements: self statements ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! repeatStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setIncrControl: valuesloc removeFirst. self setUntilControl: valuesloc removeFirst. self setWhileControl: valuesloc removeFirst. self setStatements: valuesloc removeFirst. ^ valuesloc ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! repeatStatementToValues: values values add: self incrControl. values add: self untilControl. values add: self whileControl. values add: self statements. ^ values ! ! !PltRepeatStatement methodsFor: 'platypus-generated-set-accessing'! setIncrControl: aPltIncrementControl self incrControl: aPltIncrementControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-set-accessing'! setStatements: aListOfPltStatement self statements: aListOfPltStatement ! ! !PltRepeatStatement methodsFor: 'platypus-generated-set-accessing'! setUntilControl: aPltExpression self untilControl: aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-set-accessing'! setWhileControl: aPltExpression self whileControl: aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! statements ^ statements ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! statements: aListOfPltStatement statements := aListOfPltStatement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltStatement as: OrderedCollection ] ! ! !PltRepeatStatement methodsFor: 'platypus-generated-with-context-accessing'! statementsUsingContext: aContext ^ self statements ! ! !PltRepeatStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. incrControl := nil. untilControl := nil. whileControl := nil. statements := OrderedCollection new ! ! !PltRepeatStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self repeatStatementToValues: (super toValues: values) ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! untilControl ^ untilControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! untilControl: aPltExpression untilControl := aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-with-context-accessing'! untilControlUsingContext: aContext ^ self untilControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! whileControl ^ whileControl ! ! !PltRepeatStatement methodsFor: 'platypus-generated-accessing'! whileControl: aPltExpression whileControl := aPltExpression ! ! !PltRepeatStatement methodsFor: 'platypus-generated-with-context-accessing'! whileControlUsingContext: aContext ^ self whileControl ! ! !PltReturnStatement commentStamp: 'platypus comment' prior: 106106028! ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ! !PltReturnStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltReturnStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltReturnStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltReturnStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltReturnStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltReturnStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltReturnStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltReturnStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptReturnStatement: self ! ! !PltReturnStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetReturned: aPltExpression returned := aPltExpression ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self returnStatementFromValues: (super fromValues: values) ! ! !PltReturnStatement methodsFor: 'platypus-generated-classifying'! isPltReturnStatement ^ true ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self returnStatementFromValues: values ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self returnStatementToValues: values ! ! !PltReturnStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltReturnStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self returnStatementCopyTo: another ! ! !PltReturnStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self returnStatementCopyTo: another ! ! !PltReturnStatement methodsFor: 'platypus-generated-copying'! returnStatementCopyTo: another another fastSetReturned: self returned ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! returnStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setReturned: valuesloc removeFirst. ^ valuesloc ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! returnStatementToValues: values values add: self returned. ^ values ! ! !PltReturnStatement methodsFor: 'platypus-generated-accessing'! returned ^ returned ! ! !PltReturnStatement methodsFor: 'platypus-generated-accessing'! returned: aPltExpression returned := aPltExpression ! ! !PltReturnStatement methodsFor: 'platypus-generated-with-context-accessing'! returnedUsingContext: aContext ^ self returned ! ! !PltReturnStatement methodsFor: 'platypus-generated-set-accessing'! setReturned: aPltExpression self returned: aPltExpression ! ! !PltReturnStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. returned := nil ! ! !PltReturnStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self returnStatementToValues: (super toValues: values) ! ! !PltSkipStatement commentStamp: 'platypus comment' prior: 106106232! ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ! !PltSkipStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSkipStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSkipStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSkipStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltSkipStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSkipStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSkipStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSkipStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSkipStatement: self ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self skipStatementFromValues: (super fromValues: values) ! ! !PltSkipStatement methodsFor: 'platypus-generated-classifying'! isPltSkipStatement ^ true ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self skipStatementFromValues: values ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self skipStatementToValues: values ! ! !PltSkipStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSkipStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self skipStatementCopyTo: another ! ! !PltSkipStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self skipStatementCopyTo: another ! ! !PltSkipStatement methodsFor: 'platypus-generated-copying'! skipStatementCopyTo: another ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! skipStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! skipStatementToValues: values ^ values ! ! !PltSkipStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSkipStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self skipStatementToValues: (super toValues: values) ! ! !PltSplitmarkStatement commentStamp: 'platypus comment' prior: 106106406! ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSplitmarkStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSplitmarkStatement: self ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFilename: aPltExpression filename := aPltExpression ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-accessing'! filename ^ filename ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-accessing'! filename: aPltExpression filename := aPltExpression ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-with-context-accessing'! filenameUsingContext: aContext ^ self filename ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self splitmarkStatementFromValues: (super fromValues: values) ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-classifying'! isPltSplitmarkStatement ^ true ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self splitmarkStatementFromValues: values ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self splitmarkStatementToValues: values ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self splitmarkStatementCopyTo: another ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self splitmarkStatementCopyTo: another ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-set-accessing'! setFilename: aPltExpression self filename: aPltExpression ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-copying'! splitmarkStatementCopyTo: another another fastSetFilename: self filename ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! splitmarkStatementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setFilename: valuesloc removeFirst. ^ valuesloc ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! splitmarkStatementToValues: values values add: self filename. ^ values ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. filename := nil ! ! !PltSplitmarkStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self splitmarkStatementToValues: (super toValues: values) ! ! !PltStatement class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltStatement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltStatement class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusStatementsSchemaSchemaDefinition singleton ! ! !PltStatement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltStatement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltStatement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltStatement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptStatement: self ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self statementFromValues: (super fromValues: values) ! ! !PltStatement methodsFor: 'platypus-generated-classifying'! isPltStatement ^ true ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self statementFromValues: values ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self statementToValues: values ! ! !PltStatement methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltStatement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltStatement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self statementCopyTo: another ! ! !PltStatement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self statementCopyTo: another ! ! !PltStatement methodsFor: 'platypus-generated-copying'! statementCopyTo: another ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! statementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! statementToValues: values ^ values ! ! !PltStatement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltStatement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self statementToValues: (super toValues: values) ! ! !PltSupertypeConstraint commentStamp: 'platypus comment' prior: 106106610! ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSupertypeConstraint class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSupertypeConstraint: self ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-accessing'! constrained ^ constrained ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-accessing'! constrained: aPltEntityDefinitionReference constrained := aPltEntityDefinitionReference ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! constrained: aPltEntityDefinitionReference expr: aPltSupertypeExpression self setConstrained:aPltEntityDefinitionReference. self setExpr:aPltSupertypeExpression. ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-with-context-accessing'! constrainedUsingContext: aContext ^ self constrained ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-accessing'! expr ^ expr ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-accessing'! expr: aPltSupertypeExpression expr := aPltSupertypeExpression ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-with-context-accessing'! exprUsingContext: aContext ^ self expr ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-fast-set-accessing'! fastSetConstrained: aPltEntityDefinitionReference constrained := aPltEntityDefinitionReference ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExpr: aPltSupertypeExpression expr := aPltSupertypeExpression ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self supertypeConstraintFromValues: (super fromValues: values) ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-classifying'! isPltSupertypeConstraint ^ true ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self supertypeConstraintFromValues: values ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self supertypeConstraintToValues: values ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self supertypeConstraintCopyTo: another ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self supertypeConstraintCopyTo: another ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-set-accessing'! setConstrained: aPltEntityDefinitionReference self constrained: aPltEntityDefinitionReference ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-set-accessing'! setExpr: aPltSupertypeExpression self expr: aPltSupertypeExpression ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. constrained := nil. expr := nil ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-copying'! supertypeConstraintCopyTo: another another fastSetConstrained: self constrained. another fastSetExpr: self expr ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! supertypeConstraintFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setConstrained: valuesloc removeFirst. self setExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! supertypeConstraintToValues: values values add: self constrained. values add: self expr. ^ values ! ! !PltSupertypeConstraint methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self supertypeConstraintToValues: (super toValues: values) ! ! !PltSupertypeExpression commentStamp: 'platypus comment' prior: 106106884! ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ! !PltBinarySupertypeExpression commentStamp: 'platypus comment' prior: 106107202! ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ! !PltAndSupertype commentStamp: 'platypus comment' prior: 106107498! ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ! !PltAndSupertype class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAndSupertype class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAndSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAndSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAndSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAndSupertype class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAndSupertype class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAndSupertype methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAndSupertype: self ! ! !PltAndSupertype methodsFor: 'platypus-generated-copying'! andSupertypeCopyTo: another ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! andSupertypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! andSupertypeToValues: values ^ values ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self andSupertypeFromValues: (super fromValues: values) ! ! !PltAndSupertype methodsFor: 'platypus-generated-classifying'! isPltAndSupertype ^ true ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self andSupertypeFromValues: values ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self andSupertypeToValues: values ! ! !PltAndSupertype methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAndSupertype methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self andSupertypeCopyTo: another ! ! !PltAndSupertype methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self andSupertypeCopyTo: another ! ! !PltAndSupertype methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltAndSupertype methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self andSupertypeToValues: (super toValues: values) ! ! !PltAndorSupertype commentStamp: 'platypus comment' prior: 106107685! ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ! !PltAndorSupertype class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltAndorSupertype class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltAndorSupertype methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAndorSupertype: self ! ! !PltAndorSupertype methodsFor: 'platypus-generated-copying'! andorSupertypeCopyTo: another ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! andorSupertypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! andorSupertypeToValues: values ^ values ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self andorSupertypeFromValues: (super fromValues: values) ! ! !PltAndorSupertype methodsFor: 'platypus-generated-classifying'! isPltAndorSupertype ^ true ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self andorSupertypeFromValues: values ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self andorSupertypeToValues: values ! ! !PltAndorSupertype methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltAndorSupertype methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self andorSupertypeCopyTo: another ! ! !PltAndorSupertype methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self andorSupertypeCopyTo: another ! ! !PltAndorSupertype methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltAndorSupertype methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self andorSupertypeToValues: (super toValues: values) ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltBinarySupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBinarySupertypeExpression: self ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-copying'! binarySupertypeExpressionCopyTo: another another fastSetParenthesis: self parenthesis. another fastSetLeftExpr: self leftExpr. another fastSetRightExpr: self rightExpr ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! binarySupertypeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setParenthesis: valuesloc removeFirst. self setLeftExpr: valuesloc removeFirst. self setRightExpr: valuesloc removeFirst. ^ valuesloc ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! binarySupertypeExpressionToValues: values values add: self parenthesis. values add: self leftExpr. values add: self rightExpr. ^ values ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLeftExpr: aPltSupertypeExpression leftExpr := aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParenthesis: aBoolean parenthesis := aBoolean ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRightExpr: aPltSupertypeExpression rightExpr := aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self binarySupertypeExpressionFromValues: (super fromValues: values) ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-classifying'! isPltBinarySupertypeExpression ^ true ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! leftExpr ^ leftExpr ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! leftExpr: aPltSupertypeExpression leftExpr := aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-with-context-accessing'! leftExprUsingContext: aContext ^ self leftExpr ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self binarySupertypeExpressionFromValues: values ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self binarySupertypeExpressionToValues: values ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! parenthesis ^ parenthesis ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! parenthesis: aBoolean parenthesis := aBoolean ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! parenthesis: aBoolean leftExpr: aPltSupertypeExpression rightExpr: aPltSupertypeExpression1 self setParenthesis:aBoolean. self setLeftExpr:aPltSupertypeExpression. self setRightExpr:aPltSupertypeExpression1. ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-with-context-accessing'! parenthesisUsingContext: aContext ^ self parenthesis ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self binarySupertypeExpressionCopyTo: another ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self binarySupertypeExpressionCopyTo: another ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! rightExpr ^ rightExpr ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-accessing'! rightExpr: aPltSupertypeExpression rightExpr := aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-with-context-accessing'! rightExprUsingContext: aContext ^ self rightExpr ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-set-accessing'! setLeftExpr: aPltSupertypeExpression self leftExpr: aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-set-accessing'! setParenthesis: aBoolean self parenthesis: aBoolean ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-set-accessing'! setRightExpr: aPltSupertypeExpression self rightExpr: aPltSupertypeExpression ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. parenthesis := nil. leftExpr := nil. rightExpr := nil ! ! !PltBinarySupertypeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self binarySupertypeExpressionToValues: (super toValues: values) ! ! !PltOneofSupertypeExpression commentStamp: 'platypus comment' prior: 106107884! ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltOneofSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptOneofSupertypeExpression: self ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-accessing'! exprList ^ exprList ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-accessing'! exprList: aListOfPltSupertypeExpression exprList := aListOfPltSupertypeExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltSupertypeExpression as: OrderedCollection ] ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-with-context-accessing'! exprListUsingContext: aContext ^ self exprList ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExprList: aListOfPltSupertypeExpression exprList := aListOfPltSupertypeExpression ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self oneofSupertypeExpressionFromValues: (super fromValues: values) ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-classifying'! isPltOneofSupertypeExpression ^ true ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self oneofSupertypeExpressionFromValues: values ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self oneofSupertypeExpressionToValues: values ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-copying'! oneofSupertypeExpressionCopyTo: another another fastSetExprList: self exprList ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! oneofSupertypeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setExprList: valuesloc removeFirst. ^ valuesloc ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! oneofSupertypeExpressionToValues: values values add: self exprList. ^ values ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self oneofSupertypeExpressionCopyTo: another ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self oneofSupertypeExpressionCopyTo: another ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-set-accessing'! setExprList: aListOfPltSupertypeExpression self exprList: aListOfPltSupertypeExpression ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. exprList := OrderedCollection new ! ! !PltOneofSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self oneofSupertypeExpressionToValues: (super toValues: values) ! ! !PltSubEntityRefExpression commentStamp: 'platypus comment' prior: 106108128! ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSubEntityRefExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSubEntityRefExpression: self ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-accessing'! entityRef ^ entityRef ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-accessing'! entityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-with-context-accessing'! entityRefUsingContext: aContext ^ self entityRef ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-fast-set-accessing'! fastSetEntityRef: aPltEntityDefinitionReference entityRef := aPltEntityDefinitionReference ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self subEntityRefExpressionFromValues: (super fromValues: values) ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-classifying'! isPltSubEntityRefExpression ^ true ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self subEntityRefExpressionFromValues: values ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self subEntityRefExpressionToValues: values ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self subEntityRefExpressionCopyTo: another ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self subEntityRefExpressionCopyTo: another ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-set-accessing'! setEntityRef: aPltEntityDefinitionReference self entityRef: aPltEntityDefinitionReference ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. entityRef := nil ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-copying'! subEntityRefExpressionCopyTo: another another fastSetEntityRef: self entityRef ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! subEntityRefExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setEntityRef: valuesloc removeFirst. ^ valuesloc ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! subEntityRefExpressionToValues: values values add: self entityRef. ^ values ! ! !PltSubEntityRefExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self subEntityRefExpressionToValues: (super toValues: values) ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSupertypeExpression class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSupertypeExpression: self ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self supertypeExpressionFromValues: (super fromValues: values) ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-classifying'! isPltSupertypeExpression ^ true ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self supertypeExpressionFromValues: values ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self supertypeExpressionToValues: values ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self supertypeExpressionCopyTo: another ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self supertypeExpressionCopyTo: another ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-copying'! supertypeExpressionCopyTo: another ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! supertypeExpressionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! supertypeExpressionToValues: values ^ values ! ! !PltSupertypeExpression methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self supertypeExpressionToValues: (super toValues: values) ! ! !PltUniquenessRule commentStamp: 'platypus comment' prior: 106108363! ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ! !PltUniquenessRule class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltUniquenessRule class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltUniquenessRule methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUniquenessRule: self ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! attributes: aListOfPltUniquenessRuleAttributeIdentifier attributes := aListOfPltUniquenessRuleAttributeIdentifier ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltUniquenessRuleAttributeIdentifier as: OrderedCollection ] ! ! !PltUniquenessRule methodsFor: 'platypus-generated-with-context-accessing'! attributesUsingContext: aContext ^ self attributes ! ! !PltUniquenessRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttributes: aListOfPltUniquenessRuleAttributeIdentifier attributes := aListOfPltUniquenessRuleAttributeIdentifier ! ! !PltUniquenessRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLabel: aString label := aString ! ! !PltUniquenessRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltEntityDefinition owner := aPltEntityDefinition ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self uniquenessRuleFromValues: (super fromValues: values) ! ! !PltUniquenessRule methodsFor: 'platypus-generated-classifying'! isPltUniquenessRule ^ true ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! label ^ label ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! label: aString label := aString ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! label: aString attributes: aListOfPltUniquenessRuleAttributeIdentifier owner: aPltEntityDefinition self setLabel:aString. self setAttributes:aListOfPltUniquenessRuleAttributeIdentifier. self setOwner:aPltEntityDefinition. ! ! !PltUniquenessRule methodsFor: 'platypus-generated-with-context-accessing'! labelUsingContext: aContext ^ self label ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self uniquenessRuleFromValues: values ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self uniquenessRuleToValues: values ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltUniquenessRule methodsFor: 'platypus-generated-accessing'! owner: aPltEntityDefinition owner := aPltEntityDefinition ! ! !PltUniquenessRule methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltUniquenessRule methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltUniquenessRule methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self uniquenessRuleCopyTo: another ! ! !PltUniquenessRule methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self uniquenessRuleCopyTo: another ! ! !PltUniquenessRule methodsFor: 'platypus-generated-set-accessing'! setAttributes: aListOfPltUniquenessRuleAttributeIdentifier self attributes: aListOfPltUniquenessRuleAttributeIdentifier ! ! !PltUniquenessRule methodsFor: 'platypus-generated-set-accessing'! setLabel: aString self label: aString ! ! !PltUniquenessRule methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltEntityDefinition self owner: aPltEntityDefinition ! ! !PltUniquenessRule methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. label := nil. attributes := OrderedCollection new. owner := nil ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self uniquenessRuleToValues: (super toValues: values) ! ! !PltUniquenessRule methodsFor: 'platypus-generated-copying'! uniquenessRuleCopyTo: another another fastSetLabel: self label. another fastSetAttributes: self attributes. another fastSetOwner: self owner ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! uniquenessRuleFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLabel: valuesloc removeFirst. self setAttributes: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltUniquenessRule methodsFor: 'platypus-generated-group-accessing'! uniquenessRuleToValues: values values add: self label. values add: self attributes. values add: self owner. ^ values ! ! !PltWhereRule commentStamp: 'platypus comment' prior: 106108691! ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ! !PltWhereRule class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltWhereRule class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltWhereRule class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltWhereRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltWhereRule class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltWhereRule class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltWhereRule class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltWhereRule methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptWhereRule: self ! ! !PltWhereRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLabel: aString label := aString ! ! !PltWhereRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltTypeOrRule owner := aPltTypeOrRule ! ! !PltWhereRule methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWhereValue: aPltExpression whereValue := aPltExpression ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self whereRuleFromValues: (super fromValues: values) ! ! !PltWhereRule methodsFor: 'platypus-generated-classifying'! isPltWhereRule ^ true ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! label ^ label ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! label: aString label := aString ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! label: aString owner: aPltTypeOrRule whereValue: aPltExpression self setLabel:aString. self setOwner:aPltTypeOrRule. self setWhereValue:aPltExpression. ! ! !PltWhereRule methodsFor: 'platypus-generated-with-context-accessing'! labelUsingContext: aContext ^ self label ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self whereRuleFromValues: values ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self whereRuleToValues: values ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! owner: aPltTypeOrRule owner := aPltTypeOrRule ! ! !PltWhereRule methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltWhereRule methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltWhereRule methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self whereRuleCopyTo: another ! ! !PltWhereRule methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self whereRuleCopyTo: another ! ! !PltWhereRule methodsFor: 'platypus-generated-set-accessing'! setLabel: aString self label: aString ! ! !PltWhereRule methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltTypeOrRule self owner: aPltTypeOrRule ! ! !PltWhereRule methodsFor: 'platypus-generated-set-accessing'! setWhereValue: aPltExpression self whereValue: aPltExpression ! ! !PltWhereRule methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. label := nil. owner := nil. whereValue := nil ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self whereRuleToValues: (super toValues: values) ! ! !PltWhereRule methodsFor: 'platypus-generated-copying'! whereRuleCopyTo: another another fastSetLabel: self label. another fastSetOwner: self owner. another fastSetWhereValue: self whereValue ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! whereRuleFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLabel: valuesloc removeFirst. self setOwner: valuesloc removeFirst. self setWhereValue: valuesloc removeFirst. ^ valuesloc ! ! !PltWhereRule methodsFor: 'platypus-generated-group-accessing'! whereRuleToValues: values values add: self label. values add: self owner. values add: self whereValue. ^ values ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! whereValue ^ whereValue ! ! !PltWhereRule methodsFor: 'platypus-generated-accessing'! whereValue: aPltExpression whereValue := aPltExpression ! ! !PltWhereRule methodsFor: 'platypus-generated-with-context-accessing'! whereValueUsingContext: aContext ^ self whereValue ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSdaiInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSdaiInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSdaiInstance: self ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self sdaiInstanceFromValues: (super fromValues: values) ! ! !PltSdaiInstance methodsFor: 'platypus-generated-classifying'! isPltSdaiInstance ^ true ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self sdaiInstanceFromValues: values ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self sdaiInstanceToValues: values ! ! !PltSdaiInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSdaiInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self sdaiInstanceCopyTo: another ! ! !PltSdaiInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self sdaiInstanceCopyTo: another ! ! !PltSdaiInstance methodsFor: 'platypus-generated-copying'! sdaiInstanceCopyTo: another ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! sdaiInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! sdaiInstanceToValues: values ^ values ! ! !PltSdaiInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !PltSdaiInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self sdaiInstanceToValues: (super toValues: values) ! ! !PltSessionInstance commentStamp: 'platypus comment' prior: 106108965! ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ! !PltInstanceScope commentStamp: 'platypus comment' prior: 106109258! ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ! !PltInstanceScope class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltInstanceScope class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltInstanceScope class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltInstanceScope class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltInstanceScope class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltInstanceScope class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltInstanceScope class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltInstanceScope methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInstanceScope: self ! ! !PltInstanceScope methodsFor: 'platypus-generated-accessing'! exportList ^ exportList ! ! !PltInstanceScope methodsFor: 'platypus-generated-accessing'! exportList: aListOfPltEntityInstance exportList := aListOfPltEntityInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltEntityInstance as: OrderedCollection ] ! ! !PltInstanceScope methodsFor: 'platypus-generated-with-context-accessing'! exportListUsingContext: aContext ^ self exportList ! ! !PltInstanceScope methodsFor: 'platypus-generated-fast-set-accessing'! fastSetExportList: aListOfPltEntityInstance exportList := aListOfPltEntityInstance ! ! !PltInstanceScope methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwned: aListOfPltEntityInstance owned := aListOfPltEntityInstance ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self instanceScopeFromValues: (super fromValues: values) ! ! !PltInstanceScope methodsFor: 'platypus-generated-copying'! instanceScopeCopyTo: another another fastSetOwned: self owned. another fastSetExportList: self exportList ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! instanceScopeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwned: valuesloc removeFirst. self setExportList: valuesloc removeFirst. ^ valuesloc ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! instanceScopeToValues: values values add: self owned. values add: self exportList. ^ values ! ! !PltInstanceScope methodsFor: 'platypus-generated-classifying'! isPltInstanceScope ^ true ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self instanceScopeFromValues: values ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self instanceScopeToValues: values ! ! !PltInstanceScope methodsFor: 'platypus-generated-accessing'! owned ^ owned ! ! !PltInstanceScope methodsFor: 'platypus-generated-accessing'! owned: aListOfPltEntityInstance owned := aListOfPltEntityInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltEntityInstance as: OrderedCollection ] ! ! !PltInstanceScope methodsFor: 'platypus-generated-with-context-accessing'! ownedUsingContext: aContext ^ self owned ! ! !PltInstanceScope methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! owner: aPltEntityInstance owned: aListOfPltEntityInstance exportList: aListOfPltEntityInstance1 self setOwner:aPltEntityInstance. self setOwned:aListOfPltEntityInstance. self setExportList:aListOfPltEntityInstance1. ! ! !PltInstanceScope methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltInstanceScope methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self instanceScopeCopyTo: another ! ! !PltInstanceScope methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self instanceScopeCopyTo: another ! ! !PltInstanceScope methodsFor: 'platypus-generated-set-accessing'! setExportList: aListOfPltEntityInstance self exportList: aListOfPltEntityInstance ! ! !PltInstanceScope methodsFor: 'platypus-generated-set-accessing'! setOwned: aListOfPltEntityInstance self owned: aListOfPltEntityInstance ! ! !PltInstanceScope methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owned := OrderedCollection new. exportList := OrderedCollection new ! ! !PltInstanceScope methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self instanceScopeToValues: (super toValues: values) ! ! !PltModelContents commentStamp: 'platypus comment' prior: 106109528! ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ! !PltModelContents class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltModelContents class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltModelContents class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltModelContents class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusEnvironmentSchemaSchemaDefinition singleton ! ! !PltModelContents class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltModelContents class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltModelContents class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltModelContents methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptModelContents: self ! ! !PltModelContents methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltSchemaInstance owner := aPltSchemaInstance ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self modelContentsFromValues: (super fromValues: values) ! ! !PltModelContents methodsFor: 'platypus-generated-inverse-accessing'! instances ^ self instancesUsingContext: self class context ! ! !PltModelContents methodsFor: 'platypus-generated-inverse-accessing'! instancesUsingContext: aContext | founds | founds := Set new. aContext allInstancesOf: PltApplicationInstance do: [ :repo :inst | | curr | (curr := inst owningModel) == self ifTrue: [ founds add: curr ] ]. ^ founds ! ! !PltModelContents methodsFor: 'platypus-generated-classifying'! isPltModelContents ^ true ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self modelContentsFromValues: values ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self modelContentsToValues: values ! ! !PltModelContents methodsFor: 'platypus-generated-copying'! modelContentsCopyTo: another another fastSetOwner: self owner ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! modelContentsFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! modelContentsToValues: values values add: self owner. ^ values ! ! !PltModelContents methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltModelContents methodsFor: 'platypus-generated-accessing'! owner: aPltSchemaInstance owner := aPltSchemaInstance ! ! !PltModelContents methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltModelContents methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltModelContents methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self modelContentsCopyTo: another ! ! !PltModelContents methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self modelContentsCopyTo: another ! ! !PltModelContents methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltSchemaInstance self owner: aPltSchemaInstance ! ! !PltModelContents methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil ! ! !PltModelContents methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self modelContentsToValues: (super toValues: values) ! ! !PltSchemaInstance commentStamp: 'platypus comment' prior: 106109829! ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; ! !PltSchemaInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusEnvironmentSchemaSchemaDefinition singleton ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSchemaInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSchemaInstance: self ! ! !PltSchemaInstance methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !PltSchemaInstance methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !PltSchemaInstance methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptSchemaInstanceUsingContext: aContext ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! associatedModels ^ associatedModels ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! associatedModels: aListOfPltModelContents associatedModels := aListOfPltModelContents ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltModelContents as: OrderedCollection ] ! ! !PltSchemaInstance methodsFor: 'platypus-generated-with-context-accessing'! associatedModelsUsingContext: aContext ^ self associatedModels ! ! !PltSchemaInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAssociatedModels: aListOfPltModelContents associatedModels := aListOfPltModelContents ! ! !PltSchemaInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetName: aString name := aString ! ! !PltSchemaInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSchemata: aListOfPltSchemaDefinition schemata := aListOfPltSchemaDefinition ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self schemaInstanceFromValues: (super fromValues: values) ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: 'AlainPlantec 5/11/2012 14:25'! interpreterScope ^ self associatedModels ifEmpty: [] ifNotEmpty: [:l | l first] ! ! !PltSchemaInstance methodsFor: 'platypus-generated-classifying'! isPltSchemaInstance ^ true ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self schemaInstanceFromValues: values ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self schemaInstanceToValues: values ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! name: aString associatedModels: aListOfPltModelContents schemata: aListOfPltSchemaDefinition self setName:aString. self setAssociatedModels:aListOfPltModelContents. self setSchemata:aListOfPltSchemaDefinition. ! ! !PltSchemaInstance methodsFor: 'platypus-generated-with-context-accessing'! nameUsingContext: aContext ^ self name ! ! !PltSchemaInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSchemaInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self schemaInstanceCopyTo: another ! ! !PltSchemaInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self schemaInstanceCopyTo: another ! ! !PltSchemaInstance methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 6/15/2012 12:34'! schemaInstance ^ self! ! !PltSchemaInstance methodsFor: 'platypus-generated-copying'! schemaInstanceCopyTo: another another fastSetName: self name. another fastSetAssociatedModels: self associatedModels. another fastSetSchemata: self schemata ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! schemaInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setName: valuesloc removeFirst. self setAssociatedModels: valuesloc removeFirst. self setSchemata: valuesloc removeFirst. ^ valuesloc ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! schemaInstanceToValues: values values add: self name. values add: self associatedModels. values add: self schemata. ^ values ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! schemata ^ schemata ! ! !PltSchemaInstance methodsFor: 'platypus-generated-accessing'! schemata: aListOfPltSchemaDefinition schemata := aListOfPltSchemaDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltSchemaDefinition as: OrderedCollection ] ! ! !PltSchemaInstance methodsFor: 'platypus-generated-with-context-accessing'! schemataUsingContext: aContext ^ self schemata ! ! !PltSchemaInstance methodsFor: 'platypus-generated-set-accessing'! setAssociatedModels: aListOfPltModelContents self associatedModels: aListOfPltModelContents ! ! !PltSchemaInstance methodsFor: 'platypus-generated-set-accessing'! setName: aString self name: aString ! ! !PltSchemaInstance methodsFor: 'platypus-generated-set-accessing'! setSchemata: aListOfPltSchemaDefinition self schemata: aListOfPltSchemaDefinition ! ! !PltSchemaInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. name := ''. associatedModels := OrderedCollection new. schemata := OrderedCollection new ! ! !PltSchemaInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self schemaInstanceToValues: (super toValues: values) ! ! !PltSessionInstance class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSessionInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSessionInstance class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSessionInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusDictionarySchemaSchemaDefinition singleton ! ! !PltSessionInstance class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSessionInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSessionInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSessionInstance methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSessionInstance: self ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! changeDate ^ changeDate ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! changeDate: aString changeDate := aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! changeDate: aString validationDate: aString1 validationResult: aLogical self setChangeDate:aString. self setValidationDate:aString1. self setValidationResult:aLogical. ! ! !PltSessionInstance methodsFor: 'platypus-generated-with-context-accessing'! changeDateUsingContext: aContext ^ self changeDate ! ! !PltSessionInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetChangeDate: aString changeDate := aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetValidationDate: aString validationDate := aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-fast-set-accessing'! fastSetValidationResult: aLogical validationResult := aLogical ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self sessionInstanceFromValues: (super fromValues: values) ! ! !PltSessionInstance methodsFor: 'platypus-generated-classifying'! isPltSessionInstance ^ true ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self sessionInstanceFromValues: values ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self sessionInstanceToValues: values ! ! !PltSessionInstance methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSessionInstance methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self sessionInstanceCopyTo: another ! ! !PltSessionInstance methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self sessionInstanceCopyTo: another ! ! !PltSessionInstance methodsFor: 'platypus-generated-copying'! sessionInstanceCopyTo: another another fastSetChangeDate: self changeDate. another fastSetValidationDate: self validationDate. another fastSetValidationResult: self validationResult ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! sessionInstanceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setChangeDate: valuesloc removeFirst. self setValidationDate: valuesloc removeFirst. self setValidationResult: valuesloc removeFirst. ^ valuesloc ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! sessionInstanceToValues: values values add: self changeDate. values add: self validationDate. values add: self validationResult. ^ values ! ! !PltSessionInstance methodsFor: 'platypus-generated-set-accessing'! setChangeDate: aString self changeDate: aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-set-accessing'! setValidationDate: aString self validationDate: aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-set-accessing'! setValidationResult: aLogical self validationResult: aLogical ! ! !PltSessionInstance methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. changeDate := nil. validationDate := ''. validationResult := false ! ! !PltSessionInstance methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self sessionInstanceToValues: (super toValues: values) ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! validationDate ^ validationDate ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! validationDate: aString validationDate := aString ! ! !PltSessionInstance methodsFor: 'platypus-generated-with-context-accessing'! validationDateUsingContext: aContext ^ self validationDate ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! validationResult ^ validationResult ! ! !PltSessionInstance methodsFor: 'platypus-generated-accessing'! validationResult: aLogical validationResult := aLogical ! ! !PltSessionInstance methodsFor: 'platypus-generated-with-context-accessing'! validationResultUsingContext: aContext ^ self validationResult ! ! !PltSimpleRecord commentStamp: 'platypus comment' prior: 106110192! ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ! !PltSimpleRecord class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PltPlatypusPopulationSchemaSchemaDefinition singleton ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ PltPlatypusMetaSchemasSchemaInstance singleton ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltSimpleRecord class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltSimpleRecord methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSimpleRecord: self ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! definition ^ definition ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! definition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! definition: aPltEntityDefinitionReference parameters: aListOfPltExpression owner: aPltGenericInstance self setDefinition:aPltEntityDefinitionReference. self setParameters:aListOfPltExpression. self setOwner:aPltGenericInstance. ! ! !PltSimpleRecord methodsFor: 'platypus-generated-with-context-accessing'! definitionUsingContext: aContext ^ self definition ! ! !PltSimpleRecord methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDefinition: aPltEntityDefinitionReference definition := aPltEntityDefinitionReference ! ! !PltSimpleRecord methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aPltGenericInstance owner := aPltGenericInstance ! ! !PltSimpleRecord methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfPltExpression parameters := aListOfPltExpression ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self simpleRecordFromValues: (super fromValues: values) ! ! !PltSimpleRecord methodsFor: 'platypus-generated-classifying'! isPltSimpleRecord ^ true ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self simpleRecordFromValues: values ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self simpleRecordToValues: values ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! owner: aPltGenericInstance owner := aPltGenericInstance ! ! !PltSimpleRecord methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !PltSimpleRecord methodsFor: 'platypus-generated-accessing'! parameters: aListOfPltExpression parameters := aListOfPltExpression ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPltExpression as: OrderedCollection ] ! ! !PltSimpleRecord methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !PltSimpleRecord methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !PltSimpleRecord methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self simpleRecordCopyTo: another ! ! !PltSimpleRecord methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self simpleRecordCopyTo: another ! ! !PltSimpleRecord methodsFor: 'platypus-generated-set-accessing'! setDefinition: aPltEntityDefinitionReference self definition: aPltEntityDefinitionReference ! ! !PltSimpleRecord methodsFor: 'platypus-generated-set-accessing'! setOwner: aPltGenericInstance self owner: aPltGenericInstance ! ! !PltSimpleRecord methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfPltExpression self parameters: aListOfPltExpression ! ! !PltSimpleRecord methodsFor: 'platypus-generated-copying'! simpleRecordCopyTo: another another fastSetDefinition: self definition. another fastSetParameters: self parameters. another fastSetOwner: self owner ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! simpleRecordFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDefinition: valuesloc removeFirst. self setParameters: valuesloc removeFirst. self setOwner: valuesloc removeFirst. ^ valuesloc ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! simpleRecordToValues: values values add: self definition. values add: self parameters. values add: self owner. ^ values ! ! !PltSimpleRecord methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. definition := nil. parameters := OrderedCollection new. owner := nil ! ! !PltSimpleRecord methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self simpleRecordToValues: (super toValues: values) ! ! !PlatypusCoreRepository class methodsFor: 'accessing' stamp: 'apl 3/10/2005 18:52'! dataParserClass ^ StepParser! ! !PlatypusCoreRepository class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:55'! generatedMetaDataSchemaInstance ^ (PlatypusPharoSmalltalk at: self generatedMetaDataSchemaInstanceName) singleton! ! !PlatypusCoreRepository class methodsFor: 'accessing' stamp: 'apl 4/19/2006 12:31'! generatedMetaDataSchemaInstanceName ^ self subclassResponsibility ! ! !PlatypusCoreRepository class methodsFor: 'instance creation' stamp: 'apl 12/7/2006 17:13'! new ^ super new metaDataSchemaInstance: self generatedMetaDataSchemaInstance! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 2/27/2006 15:40'! allApplicationInstances ^ self allPersistentApplicationInstances ! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:47'! allPersistentApplicationInstances ^ self instances! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'AlainPlantec 10/26/2011 23:11'! alternativeIndex: aListOfAssoc "the arg is a collection of association made of: -> " self metaDataSchemaInstance alternativeIndex: aListOfAssoc! ! !PlatypusCoreRepository methodsFor: 'converting' stamp: 'apl 2/27/2006 21:51'! asSchemaInstanceContext self metaDataSchemaInstance context: (PlatypusCoreRunningContext folder: self)! ! !PlatypusCoreRepository methodsFor: 'checking' stamp: 'apl 4/7/2006 19:03'! checksExternalInstance: instance | errors metaData | errors := OrderedCollection new. instance records do: [:rec | metaData := self metaDataSchemaInstance metaDataForClass: rec class. metaData inheritedExplicitAttributesDo: [:attr | errors addAll: (attr checksValueFromInstance: instance oid: (self oidOf: instance) repository: self)]]. ^ errors! ! !PlatypusCoreRepository methodsFor: 'checking' stamp: 'apl 4/7/2006 19:02'! checksInstance: instance (instance isKindOf: PlatypusComplexInstance) ifTrue: [ ^ self checksExternalInstance: instance] ifFalse: [ ^ self checksInternalInstance: instance] ! ! !PlatypusCoreRepository methodsFor: 'checking' stamp: 'apl 3/2/2006 16:17'! checksInternalInstance: instance | errors metaData | errors := OrderedCollection new. metaData := self metaDataSchemaInstance metaDataForClass: instance class. metaData inheritedExplicitAttributesDo: [:attr | errors addAll: (attr checksValueFromInstance: instance oid: (self oidOf: instance) repository: self)]. ^ errors! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'apl 3/11/2005 15:55'! classFromEntityName: aString ^ self metaDataSchemaInstance classFromEntityName: aString ! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'apl 3/11/2005 14:48'! createInstanceFromEntityName: entityName | class | ^ (class := self classFromEntityName: entityName) ifNotNil: [class new ]! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'apl 3/11/2005 14:48'! createInstanceFromEntityName: entityName withId: id | inst | ^ (inst := self createInstanceFromEntityName: entityName) ifNotNil: [self registerInstance: inst withId: id]! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 3/10/2005 18:52'! dataParserClass ^ self class dataParserClass! ! !PlatypusCoreRepository methodsFor: 'initialize/release' stamp: 'apl 3/10/2005 18:52'! finalize super finalize. ! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 3/10/2005 18:52'! header ^header! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 3/11/2005 14:03'! metaDataSchemaInstance ^metaDataSchemaInstance! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 3/11/2005 14:03'! metaDataSchemaInstance: anObject metaDataSchemaInstance := anObject! ! !PlatypusCoreRepository methodsFor: 'accessing' stamp: 'apl 12/7/2006 14:09'! namesBuilder ^ self metaDataSchemaInstance namesBuilder! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'apl 3/10/2005 18:52'! parseStream: in ^ self parseStream: in onError: [:d :l | self notify: d at: l in: in].! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'AlainPlantec 6/4/2012 16:02'! parseStream: in onError: aBlock | id result entityName parameters newInst metaData val setterSymbol records newRec | result := self dataParserClass parseStream: in onError: aBlock. header := result first. result second do: [:inst | id := inst label. inst isInternalRepresentation ifTrue: [ entityName := inst entityName. parameters := inst values. (newInst := self createInstanceFromEntityName: entityName withId: id) ifNotNil: [metaData := self metaDataSchemaInstance metaDataForInstance: newInst. metaData inheritedExplicitAttributesDo: [:attr | ((val := parameters removeFirst) isKindOf: StepRedefinedValue) ifFalse: [val isCollection ifTrue: [setterSymbol := attr setSelectorFromNamesBuilder: self namesBuilder] ifFalse: [ val = $$ ifTrue: [val := nil]. setterSymbol := attr fastSetSelectorFromNamesBuilder: self namesBuilder]. newInst perform: setterSymbol with: val]]]] ifFalse: [records := OrderedCollection new. inst records do: [:rec | entityName := rec entityName. parameters := rec values. (newRec := self createInstanceFromEntityName: entityName) ifNotNil: [metaData := self metaDataSchemaInstance metaDataForInstance: newRec. metaData explicitAttributesDo: [:attr | ((val := parameters removeFirst) isKindOf: StepRedefinedValue) ifFalse: [val isCollection ifTrue: [setterSymbol := attr setSelectorFromNamesBuilder: self namesBuilder] ifFalse: [ val = $$ ifTrue: [val := nil]. setterSymbol := attr fastSetSelectorFromNamesBuilder: self namesBuilder]. newRec perform: setterSymbol with: val]]. records add: newRec]]. newInst := PlatypusComplexInstance fromRecords: records. self registerInstance: newInst withId: id]]. self resolvesInstanceReferences! ! !PlatypusCoreRepository methodsFor: 'checking' stamp: 'apl 3/11/2005 14:54'! resolvedTokenOf: t (t isKindOf: StepInstanceReference) ifTrue: [^ self instanceAt: t id] ifFalse: [((t isKindOf: Collection) and: [(t isKindOf: String) not]) ifTrue: [^ t collect: [:e | self resolvedTokenOf: e]]]. ^ t! ! !PlatypusCoreRepository methodsFor: 'checking' stamp: 'apl 4/7/2006 18:28'! resolvesInstanceReferencesOf: instance | getterSymbol setterSymbol entityDef | (instance isKindOf: PlatypusComplexInstance) ifTrue: [instance records do: [:rec | self resolvesInstanceReferencesOf: rec]] ifFalse: [entityDef := self metaDataSchemaInstance metaDataForInstance: instance. entityDef inheritedExplicitAttributesDo: [:attr | (entityDef isAttributeRedeclared: attr) ifFalse: [getterSymbol := attr getSelectorFromNamesBuilder: self namesBuilder. setterSymbol := attr fastSetSelectorFromNamesBuilder: self namesBuilder. instance perform: setterSymbol with: (self resolvedTokenOf: (instance perform: getterSymbol))]]]! ! !PlatypusCoreRepository methodsFor: 'file in/out' stamp: 'apl 4/11/2006 08:41'! stepFileOut: aFilename (PlatypusCoreRepositoryStepFileWriter folder: self) doFolder; stepFileOut: aFilename ! ! !PltPlatypusExpressPrimitivesRepository class methodsFor: 'platypus-generated-accessing'! generatedMetaDataSchemaInstanceName ^ #PltPlatypusExpressPrimitivesSchemaInstance ! ! !PltPlatypusExpressPrimitivesRepository class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusExpressPrimitivesRepository class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusExpressPrimitivesRepository class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !PltPlatypusMetaSchemasRepository class methodsFor: 'platypus-generated-accessing'! generatedMetaDataSchemaInstanceName ^ #PltPlatypusMetaSchemasSchemaInstance ! ! !PltPlatypusMetaSchemasRepository class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PltPlatypusMetaSchemasRepository class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PltPlatypusMetaSchemasRepository class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Platypus ! ! !StepAbstractRepository methodsFor: 'instances accessing' stamp: 'apl 3/3/2005 00:20'! allInstancesOf: aClass | instances | instances := OrderedCollection new. self allInstancesOf: aClass do: [:folder :inst| instances add: inst]. ^ instances ! ! !StepAbstractRepository methodsFor: 'instances accessing' stamp: 'apl 4/11/2006 18:49'! allInstancesOf: aClass do: aBlock ^ self instancesDo: [:inst | (inst isKindOf: aClass) ifTrue: [aBlock value: self value: inst]]! ! !StepAbstractRepository methodsFor: 'checking' stamp: 'apl 4/7/2006 19:04'! checksExternalInstance: instance "no checking by default, subclasses could do it" ^ #()! ! !StepAbstractRepository methodsFor: 'checking' stamp: 'apl 4/11/2006 18:52'! checksInstances | errors | errors := OrderedCollection new. self instancesDo: [:inst | errors addAll: (self checksInstance: inst)]. ^ errors! ! !StepAbstractRepository methodsFor: 'checking' stamp: 'apl 3/11/2005 13:57'! checksInternalInstance: instance "no checking by default, subclasses could do it" ^ #()! ! !StepAbstractRepository methodsFor: 'copying' stamp: 'apl 3/10/2005 18:39'! copy ^ self error: 'A repository can''t be copied'! ! !StepAbstractRepository methodsFor: 'accessing' stamp: 'apl 7/15/2004 16:36'! dataParserClass ^ self subclassResponsibility ! ! !StepAbstractRepository methodsFor: 'copying' stamp: 'apl 3/9/2005 17:32'! deepCopy ^ self copy! ! !StepAbstractRepository methodsFor: 'initialize/release' stamp: 'apl 4/11/2006 18:54'! destroy instanceByOidIndex := nil. oidByInstanceIndex := nil. super destroy! ! !StepAbstractRepository methodsFor: 'initialize/release' stamp: 'apl 4/11/2006 08:25'! finalize Transcript show: 'a ' , self class name , ' is finalized' , String cr. self destroy! ! !StepAbstractRepository methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/11/2012 13:06'! initialize super initialize. instanceByOidIndex := Dictionary new. oidByInstanceIndex := IdentityDictionary new. ! ! !StepAbstractRepository methodsFor: 'instances accessing' stamp: 'AlainPlantec 5/11/2012 13:06'! instanceAt: id ^ instanceByOidIndex at: id ifAbsent: []! ! !StepAbstractRepository methodsFor: 'instances accessing' stamp: 'AlainPlantec 5/11/2012 18:41'! instanceLabelled: id ^ instanceByOidIndex at: id ifAbsent: []! ! !StepAbstractRepository methodsFor: 'accessing' stamp: 'AlainPlantec 5/11/2012 10:43'! instances ^ oidByInstanceIndex keys! ! !StepAbstractRepository methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:55'! instancesDo: aBlock instanceByOidIndex do: [ :v | aBlock value: v]! ! !StepAbstractRepository methodsFor: 'testing' stamp: 'apl 4/11/2006 08:26'! oidExists: id ^ (self instanceAt: id) notNil! ! !StepAbstractRepository methodsFor: 'instances accessing' stamp: 'apl 4/11/2006 18:46'! oidOf: anInstance ^oidByInstanceIndex at: anInstance ifAbsent: [self oidOf: (self registerInstance: anInstance)]! ! !StepAbstractRepository methodsFor: 'file in/out' stamp: 'apl 3/10/2005 08:52'! parseStream: in ^ self subclassResponsibility! ! !StepAbstractRepository methodsFor: 'instance registering' stamp: 'apl 3/10/2005 18:59'! registerHeaderInstance: headerInst ! ! !StepAbstractRepository methodsFor: 'instance registering' stamp: 'AlainPlantec 5/11/2012 10:49'! registerInstance: appInst ^self registerInstance: appInst withId: oidByInstanceIndex size + 1! ! !StepAbstractRepository methodsFor: 'instance registering' stamp: 'AlainPlantec 5/11/2012 10:41'! registerInstance: appInst withId: id oidByInstanceIndex at: appInst ifAbsent: [instanceByOidIndex at: id put: appInst. oidByInstanceIndex at: appInst put: id]. ^appInst! ! !StepAbstractRepository methodsFor: 'instance registering' stamp: 'AlainPlantec 5/16/2012 13:53'! replace: oldInst with: newInst | oldOid | oldOid := oidByInstanceIndex at: oldInst. self unregisterInstance: oldInst. newInst id: oldOid. self registerInstance: newInst. ! ! !StepAbstractRepository methodsFor: 'checking' stamp: 'apl 4/11/2006 18:53'! resolvesInstanceReferences self instancesDo: [:inst | self resolvesInstanceReferencesOf: inst]! ! !StepAbstractRepository methodsFor: 'checking' stamp: 'apl 3/11/2005 14:51'! resolvesInstanceReferencesOf: instance ! ! !StepAbstractRepository methodsFor: 'file in/out' stamp: 'apl 4/11/2006 09:43'! stepFileIn: aFilename | stream | (stream := (Filename named: aFilename) readStream) ifNotNil: [[self parseStream: stream] ensure: [stream close]]! ! !StepAbstractRepository methodsFor: 'instance registering' stamp: 'apl 4/11/2006 18:46'! unregisterInstance: inst oidByInstanceIndex at: inst ifPresent: [:oid | instanceByOidIndex removeKey: oid. oidByInstanceIndex removeKey: inst. ^inst]. ^nil! ! !StepAbstractRepository methodsFor: 'copying' stamp: 'apl 3/9/2005 17:33'! veryDeepCopy ^ self deepCopy! ! !StepGenericRepository class methodsFor: 'accessing' stamp: 'apl 3/9/2005 19:44'! dataParserClass ^ StepParser! ! !StepGenericRepository methodsFor: 'accessing' stamp: 'apl 3/9/2005 15:51'! dataParserClass ^ self class dataParserClass! ! !StepGenericRepository methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:03'! header ^header! ! !StepGenericRepository methodsFor: 'initialize/release' stamp: 'apl 3/10/2005 19:01'! initialize super initialize. header := OrderedCollection new.! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'apl 10/10/2006 09:37'! notify: error at: location in: stream | contentsWithError errorOut errFilename | contentsWithError := stream contents copyReplaceFrom: location to: location - 1 with: '******' , error , '->'. (errorOut := (Filename named: (errFilename := self class name , '.error')) writeStream) ifNotNil: [ [errorOut nextPutAll: contentsWithError. Transcript show: 'Error found in a STEP stream, see into ' , errFilename] ensure: [errorOut close]]. ^ (StepGenericRepositoryFileError messageText: error contents: stream contents pos: location folder: self) signal! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'AlainPlantec 5/16/2012 14:01'! parseDataStream: in onError: aBlock | id result | result := self dataParserClass parseStream: in startingAt: StepParser startingStateForDataEntities onError: aBlock. self registerAllInstances: result! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'apl 3/10/2005 08:57'! parseStream: in ^ self parseStream: in onError: [:d :l | self notify: d at: l in: in].! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'AlainPlantec 5/16/2012 14:02'! parseStream: in onError: aBlock | id result | result := self dataParserClass parseStream: in onError: aBlock. header := result first. self registerAllInstances: (result second)! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'AlainPlantec 5/16/2012 14:02'! parseStream: in startingAt: startingState onError: aBlock | id result | result := self dataParserClass parseStream: in startingAt: startingState onError: aBlock. header := result first. self registerAllInstances: (result second)! ! !StepGenericRepository methodsFor: 'file in/out' stamp: 'AlainPlantec 5/11/2012 15:00'! registerAllInstances: aCollection aCollection do: [:inst | self registerInstance: inst withId: inst label]. self resolvesInstanceReferences! ! !StepGenericRepository methodsFor: 'instance registering' stamp: 'apl 3/10/2005 19:00'! registerHeaderInstance: headerInst header add: headerInst! ! !StepGenericRepository methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 17:24'! resolvedTokenOf: t (t isKindOf: StepInstanceReference) ifTrue: [ t ref: (self instanceAt: t id)] ifFalse: [ (t isKindOf: StepSimpleRecord) ifTrue: [ t values: (self resolvedTokenOf: t values)] ifFalse: [((t isKindOf: Collection) and: [(t isKindOf: String) not]) ifTrue: [^ t collect: [:e | self resolvedTokenOf: e]]]]. ^ t! ! !StepGenericRepository methodsFor: 'checking' stamp: 'apl 3/9/2005 17:42'! resolvesInstanceReferencesOf: instance 1 to: instance class instSize do: [:i | instance instVarAt: i put: ( (self resolvedTokenOf: (instance instVarAt: i)))]! ! !StepCoreObject class methodsFor: 'platypus-signature' stamp: 'apl 12/9/2006 09:59'! vwNamespaceName ^ #Platypus! ! !StepFileError class methodsFor: 'exceptionInstantiator' stamp: 'apl 4/11/2006 18:09'! messageText: signalerText contents: fileContents pos: aPositionInFileContents "Signal the occurrence of an exceptional condition with a specified textual description." | err | err := self new messageText: signalerText. err pos: aPositionInFileContents. err contents: fileContents. ^ err! ! !StepFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:07'! contents ^contents! ! !StepFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:07'! contents: anObject contents := anObject! ! !StepFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:07'! pos ^pos! ! !StepFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:07'! pos: anObject pos := anObject! ! !StepGenericRepositoryFileError class methodsFor: 'exceptionInstantiator' stamp: 'apl 4/11/2006 18:06'! messageText: signalerText contents: fileContents pos: aPositionInFileContents folder: aGenericFolder | err | err := super messageText: signalerText contents: fileContents pos: aPositionInFileContents . err folder: aGenericFolder. ^ err! ! !StepGenericRepositoryFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:06'! folder ^folder! ! !StepGenericRepositoryFileError methodsFor: 'accessing' stamp: 'apl 4/11/2006 18:06'! folder: anObject folder := anObject! ! !PlatypusRepositoryBuilder commentStamp: '' prior: 106110495! Build a repository of Platypus metamodele instances from a generic repository! !PlatypusRepositoryBuilder class methodsFor: 'instance creation' stamp: 'apl 3/10/2005 00:54'! folder: aDataFolder modelContents: aModelContents ^ self new folder: aDataFolder modelContents: aModelContents ! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/20/2006 15:47'! dataInstances ^ modelContents dataInstances! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/8/2012 17:05'! doAggregation: aCollection | aggr | aggr := self new: PltListInstance. aggr general: true. self push: aggr. aCollection do: [:val | self doToken: val]. aggr adjustLowerAndUpperBounds. self pop. self top add: aggr! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 1/23/2007 14:53'! doBinary: aBinary self top add: (PltBinaryLiteral val: aBinary) ! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 00:40'! doBoolean: b self doLogical: b! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/14/2012 14:12'! doEnumeration: aString | domain | aString = #UNKNOWN ifTrue: [self top add: PltUnknownConstant new] ifFalse: [aString = #T ifTrue: [self top add: PltTrueConstant new] ifFalse: [aString = #F ifTrue: [self top add: PltFalseConstant new] ifFalse: [ (domain := self enumerationTypeNamed: aString) ifNil: [self top add: (PltEnumerationValue domain: nil element: aString asSymbol)] ifNotNil: [ self top add: (PltEnumerationValue domain: (PltDefinedTypeReference ref: domain) element: (domain domain elementSymbolCorrespondingTo: aString))]]]]! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/8/2012 17:03'! doExternalRepresentation: inst index at: inst ifPresent: [:found | self top add: found ] ifAbsent: [ | rep sr | rep := self new: PltExternalRepresentation. index at: inst put: rep. self push: rep records. inst records do: [:rec | sr := self doSimpleRecord: rec. sr owner: rep]. rep persistentLabel: inst label. rep owningModel: self modelContents. self pop. self top add: rep]. ^ inst! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/11/2012 10:47'! doFolder | instances | self push: OrderedCollection new. folder header do: [:h | self doHeaderInstance: h. self headerInstances add: self top removeFirst]. instances := folder instances. 1 to: instances size do: [:p | | i | (i := instances at: p) ifNotNil: [self doInstance: i. modelContents add: self top removeFirst]]! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 12:09'! doHeaderInstance: h | inst values name | values := h values. name := h entityName asUppercase. name = 'FILE_SCHEMA' ifTrue: [inst := self fileSchemaHeaderInstance: values first] ifFalse: [name = 'FILE_NAME' ifTrue: [inst := self fileNameHeaderInstance: values first timeStamp: values second authors: values third organization: values fourth preprocessorVersion: values fifth originatingSystem: (values at: 6) authorization: (values at: 7)] ifFalse: [name = 'FILE_DESCRIPTION' ifTrue: [inst := self fileDescriptionHeaderInstance: values first implementationLevel: values second] ifFalse: [inst := self new: PltUserDefinedHeaderInstance. inst name: name. inst parameters: values]]]. inst owningModel: modelContents. self top add: inst ! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 17:18'! doInstance: inst (inst isKindOf: StepExternalRepresentation) ifTrue: [self doExternalRepresentation: inst] ifFalse: [self doInternalRepresentation: inst]! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/11/2012 19:13'! doInstanceRef: i i ref ifNil: [i ref: (folder ifNotNil: [:f | f instanceLabelled: i id])]. self doToken: i ref! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 6/4/2012 16:03'! doInternalRepresentation: inst index at: inst ifPresent: [:found | self top add: found ] ifAbsent: [ | rep | rep := self new: PltInternalRepresentation. index at: inst put: rep. rep definition: (self lookUpEntityDefinitionBN: inst entityName). self push: rep parameters. inst values ifNotNil: [ inst values do: [:val | self doToken: val]]. self pop. rep persistentLabel: inst label. rep owningModel: self modelContents. self top add: rep]. ^ inst! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/8/2006 09:07'! doLogical: l self top add: (l = #UNKNOWN ifTrue: [PltUnknownConstant new] ifFalse: [l ifTrue: [PltTrueConstant new] ifFalse: [PltFalseConstant new]])! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 00:48'! doNullValue: e self top add: PltMissingValue new! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 00:50'! doNumber: n self top add: (n isFloat ifTrue: [PltRealLiteral val: n] ifFalse: [PltIntegerLiteral val: n])! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/29/2005 08:37'! doRedefinedValue: aRedefinedValue self top add: PltRedefinedAttributeValue new! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 6/4/2012 15:56'! doSimpleRecord: aStepRecord | sr | sr := self new: PltSimpleRecord. sr definition: (self lookUpEntityDefinitionBN: aStepRecord entityName). self push: sr parameters. aStepRecord values do: [:val | self doToken: val]. self pop. self top add: sr. ^ sr! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'AlainPlantec 5/16/2012 14:11'! doSingleToken: t index := IdentityDictionary new. folder instances do: [:i | i ~= t ifTrue: [index at: i put: (modelContents instanceLabelled: (folder oidOf: i)) ] ]. ^ super doSingleToken: t! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 00:51'! doString: s self top add: ( PltStringLiteral val: s)! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 2/12/2007 10:52'! enumerationTypeNamed: anIdent ^ self schemaInstance lookUpEnumerationTypeFromElement: anIdent! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 10:17'! fileDescriptionHeaderInstance: description implementationLevel: implementationLevel | inst | inst := self new: PltFileDescription. inst description addAll: description. inst implementationLevel: implementationLevel. ^ inst! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 10:13'! fileNameHeaderInstance: name timeStamp: timeStamp authors: author organization: organization preprocessorVersion: preprocessorVersion originatingSystem: originatingSystem authorization: authorization | inst | inst := self new: PltFileName. inst name: name . inst timeStamp: timeStamp. inst author addAll: (author ). inst organization addAll: (organization). inst preprocessorVersion: preprocessorVersion. inst originatingSystem: originatingSystem. inst authorisation: authorization. ^ inst! ! !PlatypusRepositoryBuilder methodsFor: 'data encoding' stamp: 'apl 3/10/2005 11:34'! fileSchemaHeaderInstance: aListOfString | inst | inst := self new: PltFileSchema. inst schemaIdentifiers addAll: aListOfString. ^ inst! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:54'! folder: aDataFolder modelContents: aModelContents self folder: aDataFolder. self modelContents: aModelContents! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/20/2006 15:48'! headerInstances ^ modelContents headerInstances! ! !PlatypusRepositoryBuilder methodsFor: 'initialize-release' stamp: 'AlainPlantec 5/4/2012 21:07'! initialize super initialize. valuesListStack := PlatypusStack new. index := IdentityDictionary new. ! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 4/7/2006 09:26'! lookUpEntityDefinitionBN: entityName | found type metaData | self schemata do: [:sch | (metaData := sch linkedMetaData) ifNotNil: [(found := metaData lookUpEntityDefinitionBN: entityName) ifNotNil: ["type := self new: PltEntityDefinitionReference. type setName: entityName. type setRef: found. ^ type" ^ found referenceOnSelf]]]. type := self new: PltEntityDefinitionReference. type setName: entityName. ^ type! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:30'! modelContents ^modelContents! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:30'! modelContents: anObject modelContents := anObject! ! !PlatypusRepositoryBuilder methodsFor: 'step instance creation' stamp: 'apl 3/10/2005 00:29'! new: aClass ^ aClass new stepInitialize! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:32'! pop ^ valuesListStack pop! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:32'! push: anObject ^ valuesListStack push: anObject! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 12:38'! schemaInstance ^ self modelContents schemaInstance! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 00:30'! schemata ^ self modelContents schemata! ! !PlatypusRepositoryBuilder methodsFor: 'accessing' stamp: 'apl 3/10/2005 09:23'! top ^ valuesListStack top! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:35'! doAggregation: a stream nextPut: $(. a do: [:e | self doToken: e] separatedBy: [stream nextPut: $,]. stream nextPut: $)! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:36'! doBoolean: b self doLogical: b! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 2/6/2006 17:11'! doEnumeration: e e isNil ifTrue: [stream nextPut: $$] ifFalse: [e asUppercase asSymbol = #UNKNOWN ifTrue: [stream nextPut: $U] ifFalse: [stream nextPut: $.. stream nextPutAll: e. stream nextPut: $.]]! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 4/11/2006 18:12'! doExternalRepresentation: inst stream nextPut: $#. stream nextPutAll: (self oidOf: inst) printString. stream nextPut: $=. stream nextPut: $(. inst records do: [:val | self doToken: val] separatedBy: [stream nextPut: $ ]. stream nextPutAll: ');'! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'AlainPlantec 5/11/2012 10:50'! doFolder | dateTime instances | dateTime := Time dateAndTimeNow. stream nextPutAll: 'ISO-10303-21;'. stream nextPut: Character cr. stream nextPutAll: 'HEADER;'. stream nextPut: Character cr. stream nextPutAll: 'FILE_NAME('''', ''' , dateTime first printString , ' ' , dateTime second printString , ''', (''''), (''''), '''', '''', '''');\' withCRs. stream nextPutAll: 'FILE_DESCRIPTION(('''',''''),'''');\' withCRs. stream nextPutAll: 'FILE_SCHEMA(());\' withCRs. stream nextPutAll: 'ENDSEC;'. stream nextPut: Character cr. stream nextPutAll: 'DATA;'. stream nextPut: Character cr. instances := folder instances. 1 to: instances size do: [:p | | i | (i := instances at: p) ifNotNil: [self doInstance: i. stream nextPut: Character cr]]. stream nextPutAll: 'ENDSEC;'. stream nextPut: Character cr. stream nextPutAll: 'END-ISO-10303-21;'. stream nextPut: Character cr! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 13:32'! doInstance: inst (inst isKindOf: StepExternalRepresentation) ifTrue: [self doExternalRepresentation: inst] ifFalse: [self doInternalRepresentation: inst]! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/10/2005 22:50'! doInstanceRef: i stream nextPut: $#. folder ifNotNil: [stream nextPutAll: i id asString]! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 4/11/2006 11:25'! doInternalRepresentation: inst stream nextPut: $#. stream nextPutAll: (self oidOf: inst) printString. stream nextPut: $=. stream nextPutAll: inst entityName asUppercase. stream nextPut: $(. inst values do: [:val | self doToken: val] separatedBy: [stream nextPut: $,]. stream nextPutAll: ');'! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 2/6/2006 17:11'! doLogical: l stream nextPut: $.. l ifTrue: [stream nextPut: $T] ifFalse: [stream nextPut: $F]. stream nextPut: $.! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:37'! doNullValue: e stream nextPut: $$! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:38'! doNumber: n stream nextPutAll: n printString! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/29/2005 08:37'! doRedefinedValue: aRedefinedValue stream nextPut: $*.! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 4/11/2006 18:13'! doSimpleRecord: inst stream nextPutAll: inst entityName asUppercase. stream nextPut: $(. inst values do: [:val | self doToken: val] separatedBy: [stream nextPut: $,]. stream nextPutAll: ')'! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:38'! doString: s stream nextPut: $'. s do: [:e | stream nextPut: e. e == $' ifTrue: [stream nextPut: $']]. stream nextPut: $'! ! !StepGenericFileWriter methodsFor: 'initialize/release' stamp: 'apl 3/9/2005 22:39'! initialize super initialize. stream := WriteStream on: String new.! ! !StepGenericFileWriter methodsFor: 'file in-out' stamp: 'apl 4/11/2006 11:29'! stepFileOut: aFilename | out | (out := (Filename named: aFilename) writeStream) ifNotNil: [[self doFolder. out nextPutAll: stream contents] ensure: [out close]]! ! !StepGenericFileWriter methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:39'! stream ^ stream! ! !StepGenericFileWriter methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:32'! toStream: out | | stream := out. self doFolder. ! ! !StepGenericRepositoryAbstractVisitor class methodsFor: 'instance creation' stamp: 'apl 3/9/2005 22:18'! folder: aDataFolder ^ self new folder: aDataFolder! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:26'! actionMethodsIndex ^ actionMethodsIndex! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:26'! actionMethodsIndex: anIndex actionMethodsIndex := anIndex! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:21'! doAggregation: a self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:21'! doBoolean: b self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:22'! doEnumeration: e self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 23:35'! doExternalRepresentation: inst self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'AlainPlantec 5/4/2012 21:05'! doFolder self subclassResponsibility ! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:19'! doInstance: inst self subclassResponsibility ! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:22'! doInstanceRef: i self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 23:35'! doInternalRepresentation: inst self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:22'! doLogical: l self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:25'! doNullValue self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:23'! doNumber: n self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 12:50'! doObject: b self error: 'Unknown data kind'! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/29/2005 08:35'! doRedefinedValue: e self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/10/2005 12:05'! doSingleToken: t self push: OrderedCollection new. self doToken: t. ^ self pop first! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'apl 3/9/2005 22:23'! doString: s self subclassResponsibility! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'data encoding' stamp: 'AlainPlantec 6/4/2012 15:48'! doToken: t (t = $$ or: [t isNil]) ifTrue: [self doNullValue: nil] ifFalse: [self actionMethodsIndex do: [:a | (t isKindOf: a key) ifTrue: [self perform: a value with: t. ^ a key]]]. ^ nil! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:18'! folder: aDataFolder folder := aDataFolder! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'initialize/release' stamp: 'apl 3/31/2006 15:07'! initialize super initialize. self actionMethodsIndex: OrderedCollection new. self actionMethodsIndex add: (Association key: Symbol value: #doEnumeration:). self actionMethodsIndex add: (Association key: String value: #doString:). self actionMethodsIndex add: (Association key: Boolean value: #doLogical:). self actionMethodsIndex add: (Association key: Number value: #doNumber:). self actionMethodsIndex add: (Association key: UndefinedObject value: #doNullValue:). self actionMethodsIndex add: (Association key: Collection value: #doAggregation:). self actionMethodsIndex add: (Association key: StepInternalRepresentation value: #doInternalRepresentation:). self actionMethodsIndex add: (Association key: StepSimpleRecord value: #doSimpleRecord:). self actionMethodsIndex add: (Association key: StepExternalRepresentation value: #doExternalRepresentation:). self actionMethodsIndex add: (Association key: StepInstanceReference value: #doInstanceRef:). self actionMethodsIndex add: (Association key: StepRedefinedValue value: #doRedefinedValue:). self actionMethodsIndex add: (Association key: Object value: #doObject:)! ! !StepGenericRepositoryAbstractVisitor methodsFor: 'accessing' stamp: 'apl 3/9/2005 22:18'! oidOf: anInstance ^folder ifNil: [-1] ifNotNil: [folder oidOf: anInstance]! ! !StepExternalRepresentation class methodsFor: 'instance creation' stamp: 'apl 3/9/2005 15:00'! label: aString records: aCollection ^ self new label: aString records: aCollection! ! !StepExternalRepresentation methodsFor: 'classification' stamp: 'apl 4/7/2006 17:49'! isExternalRepresentation ^ true! ! !StepExternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:57'! label: aString records: aCollection self label: aString. self records: aCollection! ! !StepExternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! records ^records! ! !StepExternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! records: anObject records := anObject! ! !StepInstance methodsFor: 'classification' stamp: 'apl 4/7/2006 17:50'! isExternalRepresentation ^ false! ! !StepInstance methodsFor: 'classification' stamp: 'apl 4/7/2006 17:51'! isInternalRepresentation ^ false! ! !StepInstance methodsFor: 'accessing' stamp: 'apl 4/7/2006 17:50'! label ^label! ! !StepInstance methodsFor: 'accessing' stamp: 'apl 4/7/2006 17:50'! label: anObject label := anObject! ! !StepInternalRepresentation class methodsFor: 'instance creation' stamp: 'apl 3/9/2005 15:00'! label: aString entityName: entName values: aCollection ^ self new label: aString entityName: entName values: aCollection ! ! !StepInternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! entityName ^entityName! ! !StepInternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! entityName: anObject entityName := anObject! ! !StepInternalRepresentation methodsFor: 'classification' stamp: 'apl 4/7/2006 17:52'! isInternalRepresentation ^ true! ! !StepInternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:58'! label: aString entityName: entName values: aCollection self label: aString. self entityName: entName. self values: aCollection! ! !StepInternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! values ^values! ! !StepInternalRepresentation methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! values: anObject values := anObject! ! !StepInstanceReference class methodsFor: 'instance creation'! id: anInteger ^self new id: anInteger! ! !StepInstanceReference methodsFor: 'accessing'! id ^id! ! !StepInstanceReference methodsFor: 'accessing'! id: anObject id := anObject! ! !StepInstanceReference methodsFor: 'printing'! printOn: aStream aStream nextPut: $#. id printOn: aStream.! ! !StepInstanceReference methodsFor: 'accessing' stamp: 'apl 3/10/2005 12:48'! ref ^ref! ! !StepInstanceReference methodsFor: 'accessing' stamp: 'apl 3/10/2005 12:48'! ref: anObject ref := anObject! ! !StepRedefinedValue class methodsFor: 'accessing' stamp: 'apl 2/24/2005 23:55'! new ^ self singleton ! ! !StepRedefinedValue class methodsFor: 'accessing' stamp: 'apl 2/24/2005 23:55'! singleton ^ Singleton ifNil: [Singleton := self basicNew]! ! !StepRedefinedValue methodsFor: 'printing' stamp: 'apl 2/24/2005 23:53'! printOn: aStream aStream nextPut: $*. ! ! !StepSimpleRecord class methodsFor: 'instance creation' stamp: 'apl 3/9/2005 14:59'! entityName: entName values: aCollection ^ self new entityName: entName values: aCollection ! ! !StepSimpleRecord methodsFor: 'converting' stamp: 'apl 3/9/2005 15:02'! asInternalRepresentationLabelled: aLabel ^ StepInternalRepresentation label: aLabel entityName: self entityName values: self values ! ! !StepSimpleRecord methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! entityName ^entityName! ! !StepSimpleRecord methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! entityName: anObject entityName := anObject! ! !StepSimpleRecord methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:59'! entityName: entName values: aCollection self entityName: entName. self values: aCollection! ! !StepSimpleRecord methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! values ^values! ! !StepSimpleRecord methodsFor: 'accessing' stamp: 'apl 3/9/2005 14:56'! values: anObject values := anObject! ! !PlatypusVWPackageExporterScanner methodsFor: 'public access' stamp: 'apl 4/26/2006 09:56'! canOutputSpaceAfterToken: aToken ^ ((#(':' '-' '+' ) includes: aToken) or: [aToken size > 1 and: [aToken first = $" and: [aToken last = $"]]]) not! ! !PlatypusVWPackageExporterScanner methodsFor: 'public access' stamp: 'apl 4/26/2006 09:54'! outPut: aString | tokens | tokens := self tokenize: aString. ^ self outPutTokens: tokens! ! !PlatypusVWPackageExporterScanner methodsFor: 'public access' stamp: 'apl 4/26/2006 09:53'! outPutTokens: tokens | prettPrinted | prettPrinted := WriteStream on: String new. tokens do: [:t | (t isKindOf: Array) ifTrue: [prettPrinted nextPutAll: '#( '. prettPrinted nextPutAll: (self outPutTokens: t). prettPrinted nextPutAll: ') '] ifFalse: [prettPrinted nextPutAll: t. (self canOutputSpaceAfterToken: t) ifTrue: [prettPrinted nextPut: $ ]]]. ^ prettPrinted contents! ! !PlatypusVWPackageExporterScanner methodsFor: 'expression types' stamp: 'apl 4/18/2006 21:31'! scanToken super scanToken. tokenType = #leftArrow ifTrue: [token := ':=']. ^ token! ! !PlatypusVWPackageExporterScanner methodsFor: 'public access' stamp: 'apl 4/18/2006 22:00'! tokenize: sourceString | coll | coll := OrderedCollection new. self scan: (ReadStream on: sourceString asString). [tokenType = #doIt] whileFalse: [(currentComment notNil and: [currentComment notEmpty]) ifTrue: [[currentComment isEmpty] whileFalse: [coll addLast: '"' , currentComment removeFirst , '"']]. token isSymbol ifTrue: [token := token asString]. coll addLast: token. self scanToken]. (currentComment notNil and: [currentComment notEmpty]) ifTrue: [[currentComment isEmpty] whileFalse: [ coll addLast: '"' , currentComment removeFirst , '"']]. ^ coll! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 21:32'! xBinary super xBinary. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 17:04'! xColon super xColon. tokenType = #leftArrow ifTrue: [token := ':='] ifFalse: [token := token asString]! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 21:32'! xDelimiter super xDelimiter. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 21:25'! xDigit super xDigit. token := token asString. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 16:32'! xDollar super xDollar. token := token printString! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 16:17'! xDoubleQuote super xDoubleQuote. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 21:32'! xLetter super xLetter. token := token asString. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 21:32'! xLitQuote super xLitQuote. (token isKindOf: Array) ifFalse: [token := '#' , token asString]. ! ! !PlatypusVWPackageExporterScanner methodsFor: 'multi-character scans' stamp: 'apl 4/18/2006 16:58'! xSingleQuote super xSingleQuote. token := token printString! ! !String methodsFor: '*platypus-utilities' stamp: 'apl 1/26/2007 11:21'! capitalizeFirst: firstCapitalized | instr outstr resString curr | instr := ReadStream on: self. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [(curr := instr next) == $_ ifTrue: [(curr := instr next) ifNotNil: [outstr nextPut: curr asUppercase]] ifFalse: [outstr nextPut: curr asLowercase]]. resString := outstr contents. firstCapitalized ifTrue: [resString at: 1 put: resString first asUppercase] ifFalse: [resString at: 1 put: resString first asLowercase]. ^ resString! ! !String methodsFor: '*platypus-accessing' stamp: 'apl 3/15/2007 10:23'! updateDictionaryInstanceName: aDictionaryInstance aDictionaryInstance name: self ! ! !String methodsFor: '*platypus-utilities' stamp: 'AlainPlantec 5/12/2012 22:23'! withoutCr ^ self species streamContents: [:strm | self do: [:c | (c = Character cr or: [c = Character lf]) ifTrue: [strm nextPut: Character space] ifFalse: [strm nextPut: c]]]! ! !PlatypusExpressAbstractParser class methodsFor: 'accessing' stamp: 'apl 4/19/2006 19:13'! parse: aString owner: owner onError: aBlock ^ [self parseStream: aString readStream owner: owner] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex parameter position)]! ! !PlatypusExpressAbstractParser class methodsFor: 'accessing' stamp: 'apl 9/6/2006 11:13'! parse: aString startingAt: anInteger owner: owner onError: aBlock ^ [self parseStream: aString readStream startingAt: anInteger owner: owner] on: SmaCCParserError do: [:ex | ex return: (aBlock value: ex description value: ex tag position)]! ! !PlatypusExpressAbstractParser class methodsFor: 'accessing' stamp: 'apl 6/17/2003 22:24'! parseStream: aStream owner: owner ^ self parseStream: aStream startingAt: self defaultStartingState owner: owner! ! !PlatypusExpressAbstractParser class methodsFor: 'accessing' stamp: 'apl 2/17/2006 13:36'! parseStream: aStream startingAt: anInteger owner: owner | parser result | parser := self on: aStream. owner ownerPath do: [:o | parser pushContext: o]. parser pushContext: owner. parser setStartingState: anInteger. result := parser parse. [parser contextsStack isEmpty] whileFalse: [parser popContext]. ^ result! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-comments' stamp: 'AlainPlantec 12/8/2012 11:09'! parserDefinitionComment "%left ""="" "">="" "">"" ""in"" "":=:"" "":<>:"" ""<="" ""<"" ""like"" ""<>""; %left ""-"" ""+"" ""or"" ""xor""; %left ""/"" ""mod"" ""div"" ""*"" ""and"" ""andor"" ""||"" ; %right ""**""; %left ""not"" ; %id ; %start SchemaInstanceEntry SchemaEntry SchemaContentsEntry ConstantsEntry TypeEntry EntityEntry FunctionEntry ProcedureEntry RuleEntry StatementsEntry ExpressionEntry; SchemaInstanceEntry : SchemaInstance { self schemaInstanceEntry: '1' value} ; SchemaInstance : RemarkReference* SchemaEntry* { self schemaInstance: '1' value } ; ConceptIdentifier : RemarkReference SimpleIdentifier { self conceptIdentifier: '2' value } | RemarkReference SimpleIdentifier ""{"" Expression ""}"" { self conceptIdentifier: '2' metaExpression: '4' } | SimpleIdentifier { self conceptIdentifier: '1' value } | SimpleIdentifier ""{"" Expression ""}"" { self conceptIdentifier: '1' metaExpression: '3' } ; SchemaIdentifier : ConceptIdentifier { self schemaIdentifier: '1' value } ; Semicolon : "";"" RemarkReference* ; RemarkReference : { self remarkReference: '1' value } ; StatementsEntry : Statement* { self statementsEntry: '1' value } ; ExpressionEntry : Expression { self expressionEntry: '1' value} ; SchemaEntry : Schema { self schemaEntry: '1' value } ; SchemaContentsEntry : SchemaContents { self schemaContentsEntry: '1' value } ; Schema : ""schema"" SchemaIdentifier Semicolon InterfaceSpecification* SchemaContents ""end_schema"" Semicolon { self schema: '2' value interfaces: '4' blocks: '5' } ; SchemaContents : Block* { '1' value } ; InterfaceSpecification : UseOrReference ""from"" SimpleIdentifier InterfaceList? Semicolon { self interfaceSpecification: '1' value schema: '3' value interfaceList: '4' value . } | ""meta"" ""from"" SimpleIdentifier Semicolon { self externalMetaSchema: '3' value. } ; UseOrReference : ""use"" { #USED } | ""reference"" { #REFERENCED } ; InterfaceList : ""("" ExplicitlyImportedItemsList "")"" { self explicitlyImportedItems: '2' value } ; ExplicitlyImportedItemsList : ExplicitlyImportedItem { OrderedCollection with: '1' value } | ExplicitlyImportedItemsList "","" ExplicitlyImportedItem { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; ExplicitlyImportedItem : SimpleIdentifier { self explicitlyImportedItem: '1' value renamedAs: '1' value } | SimpleIdentifier ""as"" SimpleIdentifier { self explicitlyImportedItem: '1' value renamedAs: '3' value } ; ConstantsEntry : ConstantsDecl { self constantsEntry: '1' value } ; ConstantsDecl : ""constant"" ConstantBody* ""end_constant"" Semicolon { self constantsDecl: '2' } ; ConstantBody : ConceptIdentifier "":"" BaseType "":="" Expression Semicolon { self constantBody: '1' value baseType: '3' value expression: '5' value } ; Block : ConstantsEntry { self block: '1' value } | TypeEntry { self block: '1' value } | EntityEntry { self block: '1' value } | FunctionEntry { self block: '1' value } | ProcedureEntry { self block: '1' value } | RuleEntry { self block: '1' value } ; RuleEntry : Rule { self ruleEntry: '1' value } ; Rule : ""rule"" RuleIdentifier ""for"" ""("" IdentifiersList "")"" Semicolon ActionBody WhereClause ""end_rule"" Semicolon { self rule: '2' value entities: '5' value actionBody: '8' value whereClause: '9' value } ; RuleIdentifier : ConceptIdentifier { self ruleIdentifier: '1' value } ; FunctionEntry : Function { self functionEntry: '1' value } ; Function : ""function"" FunctionIdentifier FormalParametersDecl? "":"" ParameterType Semicolon ActionBody ""end_function"" Semicolon { self function: '2' value formalParametersDecl: '3' value returnType: '5' value actionBody: '7' value. } ; FunctionIdentifier : ConceptIdentifier { self functionIdentifier: '1' value } ; ProcedureEntry : Procedure { self procedureEntry: '1' value } ; Procedure : ""procedure"" ProcedureIdentifier FormalParametersDecl? Semicolon ActionBody ""end_procedure"" Semicolon { self procedure: '2' value formalParametersDecl: '3' value actionBody: '5' value } ; ProcedureIdentifier : ConceptIdentifier { self procedureIdentifier: '1' value } ; ActionBody : ActionBodyDecl* Statement* { self actionBodyDecl: '1' value statements: '2' value. } ; ActionBodyDecl : Block { '1' value } | LocalDecl { '1' value } ; Statement : AliasStatement { self statement: '1' value } | AssignmentStatement { self statement: '1' value } | CaseStatement { self statement: '1' value } | CompoundStatement { self statement: '1' value } | EscapeStatement { self statement: '1' value } | IfStatement { self statement: '1' value } | RepeatStatement { self statement: '1' value } | ReturnStatement { self statement: '1' value } | SkipStatement { self statement: '1' value } | OutputStatement { self statement: '1' value } | SplitmarkStatement { self statement: '1' value } | EndSplitmarkStatement { self statement: '1' value } | NativeStatement { self statement: '1' value } | ProcedureCallStatement { self statement: '1' value } | NullStatement { self statement: '1' value } ; NullStatement : Semicolon { self nullStatement } ; Assignable : AssignableList { self assignable: '1' value } ; ProcedureCallStatement : Identifier Semicolon { self procedureCall: '1' value } ; AssignableList : AssignableList Qualifier { OrderedCollection new addAll: '1' value; add: '2' value; yourself } | Identifier { OrderedCollection with: '1' value } ; NativeStatement : NativeAlgorithm { self nativeStatement: '1' value } ; NativeExpression : NativeAlgorithm { self nativeExpression: '1' value } ; NativeAlgorithm : + { self nativeAlgorithm: '1' value } ; AliasStatement : ""alias"" AliasStatementVariable Semicolon Statement* ""end_alias"" Semicolon { self aliasStatement: '2' value statements: '4' value } ; AliasStatementVariable : SimpleIdentifier ""for"" Assignable { self aliasStatementVariable: '1' value for: '3' value } ; AssignmentStatement : Assignable "":="" Expression Semicolon { self assignmentStatement: '1' value from: '3' value } ; CaseAction : ExpressionsList "":"" Statement { self caseAction: '1' value statement: '3' value } ; CaseOtherwise : ""otherwise"" "":"" Statement { self caseOtherwise: '3' value } ; CaseStatement : ""case"" Expression ""of"" CaseAction* CaseOtherwise? ""end_case"" Semicolon { self caseStatement: '2' value caseActions: '4' value caseOtherwise: '5' value } ; CompoundStatement : CompoundStatementBegin Statement* ""end"" Semicolon { self compoundStatement: '1' value statements: '2' value } ; CompoundStatementBegin : ""begin"" { self compoundStatementBegin } ; EscapeStatement : ""escape"" Semicolon { self escapeStatement } ; IfStatement : ""if"" Expression ""then"" Statement* ""end_if"" Semicolon { self ifStatement: '2' value then: '4' value else: nil } | ""if"" Expression ""then"" Statement* ""else"" Statement* ""end_if"" Semicolon { self ifStatement: '2' value then: '4' value else: '6' value } ; ByExpression : ""by"" Expression { '2' value } ; IncrementControl : SimpleIdentifier "":="" Expression ""to"" Expression ByExpression? { self incrementControl: '1' value first: '3' last: '5' value step: '6' value } ; WhileControl : ""while"" Expression { '2' value } ; UntilControl : ""until"" Expression { '2' value } ; RepeatStatement : ""repeat"" IncrementControl? WhileControl? UntilControl? Semicolon Statement* ""end_repeat"" Semicolon { self repeatStatement: '2' value whileControl: '3' value untilControl: '4' value statements: '6' value } ; ReturnStatement : ""return"" Semicolon { self returnStatement: nil } | ""return"" ""("" Expression "")"" Semicolon { self returnStatement: '3' value } ; SkipStatement : ""skip"" Semicolon { self skipStatement } ; OutputStatement : ""|"" Expression ""|"" Semicolon { self outputStatement: '2' value } ; SplitmarkStatement : ""{*"" ""*""? ""splitmark"" Expression ""*}"" { self beginSplitmarkStatement: '4' value append: '2' notNil } ; EndSplitmarkStatement : ""{*"" ""*""? ""end_splitmark"" ""*}"" { self endSplitmarkStatement } ; LocalDecl : ""local"" LocalBody* ""end_local"" Semicolon { self localDecl: '2' value } ; LocalBody : IdentifiersList "":"" BaseType Semicolon { self localBody: '1' value baseType: '3' value initializer: nil } | IdentifiersList "":"" BaseType "":="" Expression Semicolon { self localBody: '1' value baseType: '3' value initializer: '5' value } ; FormalParametersDecl : ""("" FormalParametersList "")"" { self formalParametersList: '2' value } ; FormalParametersList : FormalParameter { OrderedCollection with: '1' value } | FormalParametersList Semicolon FormalParameter { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; FormalParameter : Var IdentifiersList "":"" ParameterType { self formalParameter: '2' value parameterType: '4' value var: '1' value } ; Var : ""var"" { true } | { false } ; EntityEntry : Entity { self entityEntry: '1' value } ; Entity : ""entity"" EntityIdentifier EntitySubSuper? Semicolon ExplicitAttribute* DeriveClause? InverseClause? UniqueClause? WhereClause? ""end_entity"" Semicolon { self entity: '2' value subSuper: '3' value explicitAttributes: '5' value deriveClause: '6' value inverseClause: '7' value uniqueClause: '8' value whereClause: '9' value } ; EntityIdentifier : ConceptIdentifier { self entityIdentifier: '1' value } ; EntitySubSuper : SupertypeConstraint { self entitySupertype: '1' value subtype: nil } | SubtypeDeclaration { self entitySupertype: nil subtype: '1' value} | SupertypeConstraint SubtypeDeclaration { self entitySupertype: '1' value subtype: '2' value } ; SubtypeDeclaration : ""subtype"" ""of"" ""("" SubtypeIdentifiersList "")"" { self subtypeDeclaration: '4' value } ; SubtypeIdentifiersList : SubtypeIdentifier { OrderedCollection with: '1' value } | SubtypeIdentifiersList "","" SubtypeIdentifier { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; SubtypeIdentifier : SimpleIdentifier { self subtypeIdentifier: '1' value } ; SupertypeConstraint : ""abstract"" ""supertype"" SupertypeRuleTail? { self abstractSupertypeConstraint: '3' value } | ""supertype"" SupertypeRuleTail { self supertypeConstraint: '2' value } ; SupertypeRuleTail : ""of"" ""("" SupertypeExpression "")"" { '3' value } ; SupertypeExpression : SimpleIdentifier { self supertypeEntityReference: '1' value } | SupertypeExpression ""andor"" SupertypeExpression { self supertypeExpression: '1' value andor: '3' value } | SupertypeExpression ""and"" SupertypeExpression { self supertypeExpression: '1' value and: '3' value } | ""oneof"" ""("" SupertypeExpressionsList "")"" { self supertypeOneofExpression: '3' value } | ""("" SupertypeExpression "")"" { '2' value } ; SupertypeExpressionsList : SupertypeExpression { OrderedCollection with: '1' value } | SupertypeExpressionsList "","" SupertypeExpression { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; AttributeNameDecl : ConceptIdentifier { self attributeName: '1' value groupRef: nil } | ""self"" ""\"" SimpleIdentifier ""."" ConceptIdentifier { self attributeName: '5' value groupRef: '3' value } ; SimpleAttributeNameDecl : SimpleIdentifier { self simpleAttributeName: '1' value groupRef: nil } | ""self"" ""\"" SimpleIdentifier ""."" SimpleIdentifier { self simpleAttributeName: '5' value groupRef: '3' value } ; AttributesNameDeclList : AttributeNameDecl { OrderedCollection with: '1' value } | AttributesNameDeclList "","" AttributeNameDecl { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; ExplicitAttribute : AttributesNameDeclList "":"" Optional BaseType Semicolon { self explicitAttributes: '1' value baseType: '4' value optional: '3' value } ; Optional : ""optional"" { true } | { false } ; DeriveClause : ""derive"" RemarkReference* DerivedAttribute+ { self deriveClause: '3' value } ; DerivedAttribute : AttributeNameDecl "":"" BaseType "":="" Expression Semicolon { self derivedAttribute: '1' value baseType: '3' value expression: '5' value } ; InverseClause : ""inverse"" RemarkReference* InverseAttribute+ { self inverseClause: '3' value } ; InverseAttribute : AttributeNameDecl "":"" InverseAttributeDomain ""for"" SimpleIdentifier Semicolon { self inverseAttribute: '1' value baseType: '3' value for: '5' value } ; InverseAttributeDomain : BaseType { self inverseAttributeDomain: '1' value } ; UniqueClause : ""unique"" RemarkReference* UniqueAttributesList+ { self uniqueClause: '3' value } ; UniqueAttributesList : UniqueListHead UniqueNamesList Semicolon { self uniqueAttributesList: '2' value head: '1' value } | UniqueNamesList Semicolon { self uniqueAttributesList: '1' value head: nil } ; UniqueListHead : SimpleIdentifier "":"" { '1' value } ; UniqueNamesList : SimpleAttributeNameDecl { OrderedCollection with: '1' value } | UniqueNamesList "","" SimpleAttributeNameDecl { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; TypeEntry : Type { self typeEntry: '1' value } ; Type : ""type"" TypeIdentifier ""="" UnderlyingType Semicolon WhereClause? ""end_type"" Semicolon { self type: '2' value underlyingType: '4' value whereClause: '6' value } | ""map"" MapIdentifiersPath ""to"" Expression Semicolon ""end_map"" Semicolon { self typeMapFrom: '2' to: '4' } | ""map"" ""to"" Expression Semicolon MapIdentifiersPathAndSemicolon* ""end_map"" Semicolon { self typeMapTo: '3' from: '5' value } | ""map"" ""to"" Expression Semicolon WhereClause ""end_map"" Semicolon { self typeMapWhereClause: '5' to: '3' } ; MapIdentifiersPathAndSemicolon : MapIdentifiersPath Semicolon { '1' value } ; MapIdentifiersPath : SimpleIdentifier { OrderedCollection with: '1' value } | MapIdentifiersPath ""."" SimpleIdentifier { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; TypeIdentifier : ConceptIdentifier { self typeIdentifier: '1' value } ; WhereClause : ""where"" RemarkReference* WhereRule+ { self whereClause: '3' value } ; WhereRule : WhereRuleHead Expression Semicolon { self whereRule: '2' value head: '1' value } | Expression Semicolon { self whereRule: '1' value head: nil } ; WhereRuleHead : SimpleIdentifier "":"" { '1' value } ; UnderlyingType : DomainType { '1' value } ; ConstructedType : SelectType { '1' value } | EnumerationType { '1' value } ; EnumerationType : ""enumeration"" ""of"" ""("" IdentifiersList "")"" { self enumerationType: '4' value } ; SelectType : ""select"" ""("" IdentifiersList "")"" { self selectType: '3' value } ; BaseType : DomainType { '1' value } ; ParameterType : DomainType { '1' value } ; DomainType : AggregationType { '1' value } | ConstructedType { '1' value } | SimpleType { '1' value } | NamedType { '1' value } | GenericType { '1' value } ; GenericType : ""generic"" { self genericType: nil } | ""generic"" "":"" SimpleIdentifier { self genericType: '3' value } ; AggregationType : ArrayType { '1' value } | ListType { '1' value } | BagType { '1' value } | SetType { '1' value } | AggregateType { '1' value } ; OptionalOrUnique : ""optional"" ""unique"" { Array with: #optional with: #unique } | ""unique"" ""optional"" { Array with: #optional with: #unique } | ""optional"" { Array with: #optional } | ""unique"" { Array with: #unique } ; IndexSpec : ""["" Expression "":"" Expression ""]"" { self indexSpecFrom: '2' value to: '4' value } ; ListType : ""list"" IndexSpec? ""of"" ""unique""? BaseType { self listType: '2' value baseType: '5' value unique: '4' value } ; ArrayType : ""array"" IndexSpec? ""of"" OptionalOrUnique? BaseType { self arrayType: '2' value baseType: '5' value optionalOrUnique: '4' value } ; BagType : ""bag"" IndexSpec? ""of"" BaseType { self bagType: '2' value baseType: '4' value } ; SetType : ""set"" IndexSpec? ""of"" BaseType { self setType: '2' value baseType: '4' value } ; AggregateType : ""aggregate"" ""of"" ParameterType { self aggregateType: nil parameterType: '3' value } | ""aggregate"" "":"" SimpleIdentifier ""of"" ParameterType { self aggregateType: '3' value parameterType: '5' value } ; SimpleType : ""string"" FixedOrNotPrecisionSpec? { self stringType: '2' value } | ""binary"" FixedOrNotPrecisionSpec? { self binaryType: '2' value } | ""number"" { self numberType } | ""real"" PrecisionSpec? { self realType: '2' value } | ""integer"" PrecisionSpec? { self integerType: '2' value } | ""logical"" { self logicalType } | ""boolean"" { self booleanType } ; FixedOrNotPrecisionSpec : PrecisionSpec FixedOrNot { Array with: '1' value with: '2' value } ; FixedOrNot : ""fixed"" { true } | { false } ; PrecisionSpec : ""("" Expression "")"" { self precisionSpec: '2' value } ; NamedType : ConceptIdentifier { self namedType: '1' value } ; Expression : SimpleExpression { '1' value } | SimpleExpression ""<"" SimpleExpression { self expression: '1' value lessThan: '3' value } | SimpleExpression "">"" SimpleExpression { self expression: '1' value greaterThan: '3' value } | SimpleExpression ""="" SimpleExpression { self expression: '1' value equal: '3' value } | SimpleExpression ""<="" SimpleExpression { self expression: '1' value lessThanOrEqual: '3' value } | SimpleExpression "">="" SimpleExpression { self expression: '1' value greaterThanOrEqual: '3' value } | SimpleExpression ""<>"" SimpleExpression { self expression: '1' value notEqual: '3' value } | SimpleExpression "":=:"" SimpleExpression { self expression: '1' value instEqual: '3' value } | SimpleExpression "":<>:"" SimpleExpression { self expression: '1' value instNotEqual: '3' value } | SimpleExpression ""in"" SimpleExpression { self expression: '1' value in: '3' value } | SimpleExpression ""like"" SimpleExpression { self expression: '1' value like: '3' value } ; SimpleExpression : Term { '1' value } | SimpleExpression ""or"" SimpleExpression { self expression: '1' value or: '3' value } | SimpleExpression ""xor"" SimpleExpression { self expression: '1' value xor: '3' value } | SimpleExpression ""+"" SimpleExpression { self expression: '1' value plus: '3' value } | SimpleExpression ""-"" SimpleExpression { self expression: '1' value minus: '3' value } ; Term : Factor { '1' value } | Term ""and"" Term { self expression: '1' value and: '3' value } | Term ""mod"" Term { self expression: '1' value mod: '3' value } | Term ""/"" Term { self expression: '1' value div: '3' value } | Term ""div"" Term { self expression: '1' value realDiv: '3' value } | Term ""*"" Term { self expression: '1' value mult: '3' value } | Term ""||"" Term { self expression: '1' value instConst: '3' value } ; Factor : SimpleFactor { '1' value } | Factor ""**"" Factor { self expression: '1' value expo: '3' value } ; SimpleFactor : SignedSimpleFactor { '1' value } | AggregateInitializer { '1' value } | SimpleFactor Qualifier+ { self qualifiedExpression: '1' value qualifiers: '2' } | Literal { '1' value } | Identifier { '1' value } | ""("" Expression "")"" { self expressionBetweenParenthesis: '2' value } | ""%"" Expression ""%"" { self escapedExpression: '2' value } | Interval { '1' value } | QueryExpression { '1' value } | ""not"" SimpleFactor { self not: '2' value } | SimpleFactor CardinalityOp SimpleFactor { self expression: '1' value cardinality: '2' value expression: '3' value } | NativeExpression { '1' value } ; SignedSimpleFactor : ""+"" SimpleFactor { self positiveExpression: '2' value } | ""-"" SimpleFactor { self negativeExpression: '2' value } ; QueryExpression : ""query"" ""("" QueryVariable ""<*"" Expression ""|"" Expression "")"" { self queryExpression: '3' value source: '5' value suchThat: '7' value } ; QueryVariable : SimpleIdentifier { self queryVariable: '1' value } ; Interval : ""{"" SimpleExpression IntervalOp SimpleExpression IntervalOp SimpleExpression ""}"" { self intervalExpression: '2' value op: '3' value expression: '4' value op: '5' value expression: '6' value } ; IntervalOp : ""<"" { #'<' } | ""<="" { #'<=' } ; Literal : { self integerLiteral: '1' value asNumber } | { self realLiteral: '1' value asNumber } | { self stringLiteral: '1' value } | { self encodedStringLiteral: '1' value } | ""true"" { self logicalLiteral: #true } | ""false"" { self logicalLiteral: #false } | ""unknown"" { self logicalLiteral: #unknown } | { self binaryLiteral: '1' value } | ""pi"" { self piConstant } | ""const_e"" { self eConstant } ; Identifier : ""self"" { self selfIdentifier } | ""?"" { self missingValue: false } | SimpleIdentifier { self identifier: '1' value } | ArgumentedIdentifier { '1' value } ; ArgumentedIdentifier : SimpleIdentifier ""("" ExpressionsList? "")"" { self identifier: '1' value arguments: '3' value } ; GroupRef : ""\"" SimpleIdentifier { self groupRef: '2' value } ; Qualifier : ""."" SimpleIdentifier { self attributeQualifier: '2' value } | GroupRef { '1' value } | ""["" SimpleExpression ""]"" { self elementQualifier: '2' value } | ""["" SimpleExpression "":"" SimpleExpression ""]"" { self rangeQualifierFrom: '2' value to: '4' value } ; CardinalityOp : ""{"" Expression "":"" Expression ""}"" { self cardinalityExpressionFrom: '2' value to: '4' value } ; AggregateInitializer : ""["" AggregateInitBody ""]"" { self aggregateInitializer: '2' value } | ""["" ""]"" { self aggregateInitializer: #() } ; AggregateInitElement : Expression { self aggregateInitializerElement: '1' value repetition: nil } | Expression "":"" Expression { self aggregateInitializerElement: '1' value repetition: '3' value } ; AggregateInitBody : AggregateInitElement { OrderedCollection with: '1' value } | AggregateInitBody "","" AggregateInitElement { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; SimpleIdentifier : { '1' value } ; IdentifiersList : SimpleIdentifier RemarkReference* { OrderedCollection with: '1' value } | IdentifiersList Colon SimpleIdentifier RemarkReference* { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; Colon : "","" RemarkReference* ; ExpressionsList : Expression { OrderedCollection with: '1' value } | ExpressionsList "","" Expression { OrderedCollection new addAll: '1' value; add: '3' value; yourself } ; "! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-accessing' stamp: 'AlainPlantec 12/8/2012 11:09'! scannerClass ^PlatypusExpressScanner! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForConstantsEntry ^5! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForEntityEntry ^7! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForExpressionEntry ^12! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForFunctionEntry ^8! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForProcedureEntry ^9! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForRuleEntry ^10! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForSchemaContentsEntry ^4! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForSchemaEntry ^3! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForSchemaInstanceEntry ^2! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForStatementsEntry ^11! ! !PlatypusExpressAbstractParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 12/8/2012 11:09'! startingStateForTypeEntry ^6! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:02'! abstractSupertypeConstraint: supertypeConstraintOrNil | r | r := OrderedCollection new. r add: #abstractSupertype; add: supertypeConstraintOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:03'! actionBodyDecl: declarationsOrNil statements: statementsOrNil | r | r := OrderedCollection new. r add: #actionBodyDecl; add: declarationsOrNil; add: statementsOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:03'! aggregateInitializer: initList | r | r := OrderedCollection new. r add: #aggregateInitializer; add: initList. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:03'! aggregateInitializerElement: expression repetition: expressionOrNil | r | r := OrderedCollection new. r add: #aggregateInitializerElement; add: expression; add: expressionOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:04'! aggregateType: keyIdentOrNil parameterType: parameterType | r | r := OrderedCollection new. r add: #aggregateType; add: keyIdentOrNil; add: parameterType. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/7/2003 15:03'! aliasStatement: ident statements: statements | r | r := OrderedCollection new. r add: #aliasStatement; add: ident; add: statements. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/7/2003 15:04'! aliasStatementVariable: anIdentifier for: assignable | r | r := OrderedCollection new. r add: #aliasStatementVariable; add: anIdentifier; add: assignable. ^ r ! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:04'! arrayType: indexSpecOrNil baseType: baseType optionalOrUnique: arrayOfSymbols | r | r := OrderedCollection new. r add: #arrayType; add: indexSpecOrNil; add: baseType; add: arrayOfSymbols. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:04'! assignable: aCollection | r | r := OrderedCollection new. r add: #assignable; add: aCollection. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:08'! assignmentStatement: assignable from: expression | r | r := OrderedCollection new. r add: #assignementStatement; add: assignable; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 16:22'! attributeName: simpleIdent groupRef: aGroupIdentOrNil | r | r := OrderedCollection new. r add: #attributeName; add: simpleIdent; add: aGroupIdentOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:05'! attributeQualifier: aQualifier | r | r := OrderedCollection new. r add: #attributeQualifier; add: aQualifier. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:05'! bagType: indexSpecOrNil baseType: baseType | r | r := OrderedCollection new. r add: #bagType; add: indexSpecOrNil; add: baseType. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:06'! beginSplitmarkStatement: stringExpression | r | r := OrderedCollection new. r add: #beginSplitmark; add: stringExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:06'! binaryLiteral: aBinary | r | r := OrderedCollection new. r add: #binaryLiteral; add: aBinary. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:06'! binaryType: FixedOrNotPrecisionSpecOrNil | r | r := OrderedCollection new. r add: #binaryType; add: FixedOrNotPrecisionSpecOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/14/2006 07:57'! block: aParserResult ^ aParserResult isCollection ifTrue: [aParserResult] ifFalse: [aParserResult metaData]! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:06'! booleanType | r | r := OrderedCollection new. r add: #booleanType. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/13/2006 14:27'! buildParserResultWith: aMetaData ^ aMetaData! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:07'! cardinalityExpressionFrom: expression1 to: expression2 | r | r := OrderedCollection new. r add: #cardinalityExpression; add: expression1; add: expression2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:07'! caseAction: expressionsList statement: aStatement | r | r := OrderedCollection new. r add: #caseAction; add: expressionsList; add: aStatement. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:07'! caseOtherwise: aStatement | r | r := OrderedCollection new. r add: #caseOtherwise; add: aStatement. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:07'! caseStatement: caseSelectorExpression caseActions: caseActionsListOrNil caseOtherwise: caseOtherwiseOrNil | r | r := OrderedCollection new. r add: #caseStatement; add: caseSelectorExpression; add: caseActionsListOrNil; add: caseOtherwiseOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/7/2003 15:59'! compoundStatement: aCompoundStatement statements: statementsListOrNil | r | r := OrderedCollection new. r add: #compoundStatement; add: statementsListOrNil . ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/7/2003 16:00'! compoundStatementBegin ^ #'begin'! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/29/2006 17:04'! conceptIdentifier: anIdent ^ anIdent! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/29/2006 17:05'! conceptIdentifier: anIdent metaExpression: aMetaExpression | r | r := OrderedCollection new. r add: #conceptIdent; add: anIdent; add: #metaExpression; add: aMetaExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:08'! constantBody: ident baseType: baseType expression: initExpression | r | r := OrderedCollection new. r add: #constantBody; add: ident; add: baseType; add: initExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:09'! constantsDecl: constantsBodyCollectionOrNil | r | r := OrderedCollection new. r add: #constantsDecl; add: constantsBodyCollectionOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 11:05'! constantsEntry: constantsList ^ self buildParserResultWith: constantsList! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:09'! deriveClause: derivedAttributesList | r | r := OrderedCollection new. r add: #deriveClause; add: derivedAttributesList. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/6/2003 15:17'! derivedAttribute: attribute baseType: baseType expression: expression | r | r := OrderedCollection new. r add: #derivedAttribute; add: attribute; add: baseType; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:09'! eConstant | r | r := OrderedCollection new. r add: #eConstant. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:09'! elementQualifier: anExpression | r | r := OrderedCollection new. r add: #elementQualifier; add: anExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 4/18/2006 12:43'! encodedStringLiteral: anEncodedString | r | r := OrderedCollection new. r add: #encodedStringLiteral. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:10'! endSplitmarkStatement | r | r := OrderedCollection new. r add: #endSplitmarkStatement. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:10'! entity: ident subSuper: anArrayOrNil explicitAttributes: explicitAttrListOrNil deriveClause: derivedClauseOrNil inverseClause: inverseClauseOrNil uniqueClause: uniqueClauseOrNil whereClause: whereClauseOrNil | r | r := OrderedCollection new. r add: #entity; add: ident; add: anArrayOrNil; add: explicitAttrListOrNil; add: derivedClauseOrNil; add: inverseClauseOrNil; add: uniqueClauseOrNil; add: whereClauseOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/11/2003 22:55'! entityEntry: anEntity ^ self buildParserResultWith: anEntity! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/6/2003 11:31'! entityIdentifier: anIdent ^ anIdent! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 16:20'! entitySupertype: supertypeConstraintOrNil subtype: subtypeDeclarationOrNil | r | r := OrderedCollection new. r add: #entitySubSuper; add: supertypeConstraintOrNil; add: subtypeDeclarationOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:10'! enumerationType: identList | r | r := OrderedCollection new. r add: #enumerationType; add: identList. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:10'! escapeStatement | r | r := OrderedCollection new. r add: #escapeStatement. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 4/13/2006 11:29'! escapedExpression: anExpression ^ Array with: #escapedExpression with: anExpression! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:11'! explicitAttributes: arg1 baseType: arg4 optional: arg3 | r | r := OrderedCollection new. r add: #explicitAttributes; add: arg1; add: arg4; add: arg3. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 10:02'! explicitlyImportedItem: name renamedAs: localName | r | r := OrderedCollection new. r add: #explicitlyImportedItem; add: name; add: localName. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 10:03'! explicitlyImportedItems: aCollectionOfDomainEquivalentItems | r | r := OrderedCollection new. r add: #explicitlyImportedItems; add: aCollectionOfDomainEquivalentItems. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:11'! expression: op1 and: op2 | r | r := OrderedCollection new. r add: #andExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 17:39'! expression: exp1 cardinality: op expression: exp2 | r | r := OrderedCollection new. r add: #cardinalityExpression; add: exp1; add: op; add: exp2 . ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:12'! expression: op1 div: op2 | r | r := OrderedCollection new. r add: #divExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:12'! expression: op1 equal: op2 | r | r := OrderedCollection new. r add: #equalExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:12'! expression: op1 expo: op2 | r | r := OrderedCollection new. r add: #expoExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:13'! expression: op1 greaterThan: op2 | r | r := OrderedCollection new. r add: #greaterThanExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:13'! expression: op1 greaterThanOrEqual: op2 | r | r := OrderedCollection new. r add: #greaterThanOrEqualExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:13'! expression: op1 in: op2 | r | r := OrderedCollection new. r add: #inExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:13'! expression: op1 instConst: op2 | r | r := OrderedCollection new. r add: #instanceConstructionExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:14'! expression: op1 instEqual: op2 | r | r := OrderedCollection new. r add: #instEqualExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:14'! expression: op1 instNotEqual: op2 | r | r := OrderedCollection new. r add: #instNotEqualExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:14'! expression: op1 lessThan: op2 | r | r := OrderedCollection new. r add: #lessThanExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:14'! expression: op1 lessThanOrEqual: op2 | r | r := OrderedCollection new. r add: #lessThanOrEqualExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:14'! expression: op1 like: op2 | r | r := OrderedCollection new. r add: #likeExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 minus: op2 | r | r := OrderedCollection new. r add: #minusExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 mod: op2 | r | r := OrderedCollection new. r add: #modExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 mult: op2 | r | r := OrderedCollection new. r add: #multExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 notEqual: op2 | r | r := OrderedCollection new. r add: #notQualExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 or: op2 | r | r := OrderedCollection new. r add: #orExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 plus: op2 | r | r := OrderedCollection new. r add: #plusExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:15'! expression: op1 realDiv: op2 | r | r := OrderedCollection new. r add: #realDicExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:16'! expression: op1 xor: op2 | r | r := OrderedCollection new. r add: #xorExpression; add: op1; add: op2. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/10/2003 23:19'! expressionBetweenParenthesis: expression ^ expression! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 12/13/2003 12:15'! expressionEntry: expression ^ expression! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/25/2006 11:07'! externalMetaSchema: schemaIdent | r | r := OrderedCollection new. r add: #externalMetaShema; add: schemaIdent. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:16'! formalParameter: identList parameterType: type var: varOrNotBoolean | r | r := OrderedCollection new. r add: #formalParameter; add: identList; add: type; add: varOrNotBoolean. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:16'! formalParametersList: aCollection | r | r := OrderedCollection new. r add: #formalParametersList; add: aCollection. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:16'! function: functionIdent formalParametersDecl: parametersListOrNil returnType: returnType actionBody: actionBody | r | r := OrderedCollection new. r add: #function; add: functionIdent; add: parametersListOrNil; add: returnType; add: actionBody. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 10:08'! functionEntry: aFunction ^ self buildParserResultWith: aFunction! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 16:51'! functionIdentifier: anIdentifier ^ anIdentifier! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 12:45'! genericType: keyIdentOrNil | r | r := OrderedCollection new. r add: #genericType; add: keyIdentOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:17'! groupRef: groupIdent | r | r := OrderedCollection new. r add: #groupRef; add: groupIdent. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 18:08'! identifier: aString | r | r := OrderedCollection new. r add: #identifier. aString. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 5/24/2004 15:44'! identifier: aString arguments: arguments | r | r := OrderedCollection new. r add: #identifier; add: aString; add: arguments. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:17'! ifStatement: cond then: thenStatementOrNil else: elseStatementOrNil | r | r := OrderedCollection new. r add: #ifStatement; add: cond; add: thenStatementOrNil; add: elseStatementOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/13/2006 14:23'! implementedSchemata: anIdentifier | r | r := OrderedCollection new. r add: #implemented; add: anIdentifier. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:17'! incrementControl: ident first: firstValueExpression last: lastValueExpression step: byExpressionOrNil | r | r := OrderedCollection new. r add: #incrementControl; add: ident; add: firstValueExpression; add: lastValueExpression; add: byExpressionOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:17'! indexSpecFrom: lowIndex to: hiIndex | r | r := OrderedCollection new. r add: #indexSpec; add: lowIndex; add: hiIndex. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:17'! integerLiteral: anInteger | r | r := OrderedCollection new. r add: #integerLiteral; add: anInteger. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:18'! integerType: precisionSpecOrNil | r | r := OrderedCollection new. r add: #integerType; add: precisionSpecOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 4/18/2006 12:41'! interfaceSpecification: useOrRefSymbol schema: schemaIdent interfaceList: interfacesListOrNil | r | r := OrderedCollection new. r add: #interfaceSpecification; add: useOrRefSymbol; add: schemaIdent; add: interfacesListOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 16:30'! intervalExpression: expression1 op: lessThanOrLessEqualSymbol1 expression: expression2 op: lessThanOrLessEqualSymbol2 expression: expression3 | r | r := OrderedCollection new. r add: #intervalExpression; add: expression1; add: lessThanOrLessEqualSymbol1; add: expression2; add: lessThanOrLessEqualSymbol2; add: expression3. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:18'! inverseAttribute: ident baseType: baseType for: attrIdent | r | r := OrderedCollection new. r add: #inverseAttribute; add: ident; add: baseType; add: attrIdent. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/6/2003 16:04'! inverseAttributeDomain: baseType ^baseType! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:18'! inverseClause: inverseAttributesList | r | r := OrderedCollection new. r add: #inverseClause; add: inverseAttributesList. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:19'! listType: indexSpecOrNil baseType: baseType unique: uniqueOrNil | r | r := OrderedCollection new. r add: #listType; add: indexSpecOrNil; add: baseType; add: uniqueOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:19'! localBody: ident baseType: baseType initializer: expressionOrNil | r | r := OrderedCollection new. r add: #localBody; add: ident; add: baseType; add: expressionOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:19'! localDecl: declarationsOrNil | r | r := OrderedCollection new. r add: #localDecl; add: declarationsOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:19'! logicalLiteral: trueFalseOrUnknown | r | r := OrderedCollection new. r add: #logicalLiteral; add: trueFalseOrUnknown. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 4/18/2006 12:44'! logicalType | r | r := OrderedCollection new. r add: #logicalType. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:19'! missingValue: isARedefine | r | r := OrderedCollection new. r add: #missingValue; add: isARedefine. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 11:49'! namedType: anIdentifier | r | r := OrderedCollection new. r add: #namedType; add: anIdentifier . ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/10/2006 11:18'! nativeAlgorithm: aNativeAlgorithm | r | r := OrderedCollection new. r add: #nativeAlgorithm; add: aNativeAlgorithm lexicalElement. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/17/2006 08:47'! nativeExpression: expr | r | r := OrderedCollection new. r add: #nativeExpression; add: expr. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/10/2006 11:26'! nativeStatement: aNativeAlgorithm | r | r := OrderedCollection new. r add: #nativeStatement; add: aNativeAlgorithm. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! negativeExpression: expression | r | r := OrderedCollection new. r add: #negativeExpression; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! not: expression | r | r := OrderedCollection new. r add: #notExpression; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 12/19/2003 13:59'! nullStatement | r | r := OrderedCollection new. r add: #nullStatement . ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 5/22/2003 09:44'! numberType | r | r := OrderedCollection new. r add: #numberType. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! outputStatement: expression | r | r := OrderedCollection new. r add: #outputStatement; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! piConstant | r | r := OrderedCollection new. r add: #piConstant. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! positiveExpression: expression | r | r := OrderedCollection new. r add: #positiveExpression; add: expression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! precisionSpec: anExpression | r | r := OrderedCollection new. r add: #precisionSpec; add: anExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:20'! procedure: ident formalParametersDecl: parametersListOrNil actionBody: actionBody | r | r := OrderedCollection new. r add: #procedure; add: ident; add: parametersListOrNil; add: actionBody. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 5/24/2004 15:13'! procedureCall: ident | r | r := OrderedCollection new. r add: #procedureCall; add: ident. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 10:08'! procedureEntry: aProcedure ^ self buildParserResultWith: aProcedure! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 16:51'! procedureIdentifier: anIdentifier ^ anIdentifier! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:21'! qualifiedExpression: expression qualifiers: qualifiersList | r | r := OrderedCollection new. r add: #qualifiedExpression; add: expression; add: qualifiersList. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:21'! queryExpression: ident source: sourceExpression suchThat: suchThatExpression | r | r := OrderedCollection new. r add: #queryExpression; add: ident; add: sourceExpression; add: suchThatExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 19:05'! queryVariable: ident | r | r := OrderedCollection new. r add: #queryVariable; add: ident. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:21'! rangeQualifierFrom: lowExpression to: highExpression | r | r := OrderedCollection new. r add: #rangeQualifier; add: lowExpression; add: highExpression. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:21'! realLiteral: aReal | r | r := OrderedCollection new. r add: #realLiteral; add: aReal. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 2/28/2003 11:22'! realType: precisionSpecOrNil | r | r := OrderedCollection new. r add: #RealType; add: precisionSpecOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/13/2006 17:41'! realizationEntities: aListOrNil | r | r := OrderedCollection new. r add: #realizationEntities; add: aListOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/13/2006 17:40'! realizationIdentifier: anIdentifier ^ anIdentifier! ! !PlatypusExpressAbstractParser methodsFor: 'express semantic actions' stamp: 'apl 3/13/2006 18:14'! realizedSchemata: aListOrNil | r | r := OrderedCollection new. r add: #realizedSchemata; add: aListOrNil. ^ r! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForActionBody1: nodes ^ self actionBodyDecl: (nodes at: 1) value statements: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForActionBodyDecl1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForActionBodyDecl2: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitBody1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitBody2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitElement1: nodes ^ self aggregateInitializerElement: (nodes at: 1) value repetition: nil! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitElement2: nodes ^ self aggregateInitializerElement: (nodes at: 1) value repetition: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitializer1: nodes ^ self aggregateInitializer: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateInitializer2: nodes ^ self aggregateInitializer: #()! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateType1: nodes ^ self aggregateType: nil parameterType: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregateType2: nodes ^ self aggregateType: (nodes at: 3) value parameterType: (nodes at: 5) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregationType1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregationType2: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregationType3: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregationType4: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAggregationType5: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAliasStatement1: nodes ^ self aliasStatement: (nodes at: 2) value statements: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAliasStatementVariable1: nodes ^ self aliasStatementVariable: (nodes at: 1) value for: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForArgumentedIdentifier1: nodes ^ self identifier: (nodes at: 1) value arguments: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForArrayType1: nodes ^ self arrayType: (nodes at: 2) value baseType: (nodes at: 5) value optionalOrUnique: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAssignable1: nodes ^ self assignable: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAssignableList1: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 2) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAssignableList2: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAssignmentStatement1: nodes ^ self assignmentStatement: (nodes at: 1) value from: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAttributeNameDecl1: nodes ^ self attributeName: (nodes at: 1) value groupRef: nil! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAttributeNameDecl2: nodes ^ self attributeName: (nodes at: 5) value groupRef: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAttributesNameDeclList1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForAttributesNameDeclList2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBagType1: nodes ^ self bagType: (nodes at: 2) value baseType: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBaseType1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock1: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock2: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock3: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock4: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock5: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForBlock6: nodes ^ self block: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForByExpression1: nodes ^ (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCardinalityOp1: nodes ^ self cardinalityExpressionFrom: (nodes at: 2) value to: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCaseAction1: nodes ^ self caseAction: (nodes at: 1) value statement: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCaseOtherwise1: nodes ^ self caseOtherwise: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCaseStatement1: nodes ^ self caseStatement: (nodes at: 2) value caseActions: (nodes at: 4) value caseOtherwise: (nodes at: 5) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCompoundStatement1: nodes ^ self compoundStatement: (nodes at: 1) value statements: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForCompoundStatementBegin1: nodes ^ self compoundStatementBegin! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConceptIdentifier1: nodes ^ self conceptIdentifier: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConceptIdentifier2: nodes ^ self conceptIdentifier: (nodes at: 2) metaExpression: (nodes at: 4)! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConceptIdentifier3: nodes ^ self conceptIdentifier: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConceptIdentifier4: nodes ^ self conceptIdentifier: (nodes at: 1) metaExpression: (nodes at: 3)! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConstantBody1: nodes ^ self constantBody: (nodes at: 1) value baseType: (nodes at: 3) value expression: (nodes at: 5) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConstantsDecl1: nodes ^ self constantsDecl: (nodes at: 2)! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConstantsEntry1: nodes ^ self constantsEntry: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConstructedType1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForConstructedType2: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDeriveClause1: nodes ^ self deriveClause: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDerivedAttribute1: nodes ^ self derivedAttribute: (nodes at: 1) value baseType: (nodes at: 3) value expression: (nodes at: 5) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDomainType1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDomainType2: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDomainType3: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDomainType4: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForDomainType5: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEndSplitmarkStatement1: nodes ^ self endSplitmarkStatement! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntity1: nodes ^ self entity: (nodes at: 2) value subSuper: (nodes at: 3) value explicitAttributes: (nodes at: 5) value deriveClause: (nodes at: 6) value inverseClause: (nodes at: 7) value uniqueClause: (nodes at: 8) value whereClause: (nodes at: 9) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntityEntry1: nodes ^ self entityEntry: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntityIdentifier1: nodes ^ self entityIdentifier: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntitySubSuper1: nodes ^ self entitySupertype: (nodes at: 1) value subtype: nil! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntitySubSuper2: nodes ^ self entitySupertype: nil subtype: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEntitySubSuper3: nodes ^ self entitySupertype: (nodes at: 1) value subtype: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEnumerationType1: nodes ^ self enumerationType: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForEscapeStatement1: nodes ^ self escapeStatement! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExplicitAttribute1: nodes ^ self explicitAttributes: (nodes at: 1) value baseType: (nodes at: 4) value optional: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExplicitlyImportedItem1: nodes ^ self explicitlyImportedItem: (nodes at: 1) value renamedAs: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExplicitlyImportedItem2: nodes ^ self explicitlyImportedItem: (nodes at: 1) value renamedAs: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExplicitlyImportedItemsList1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExplicitlyImportedItemsList2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression10: nodes ^ self expression: (nodes at: 1) value in: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression11: nodes ^ self expression: (nodes at: 1) value like: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression2: nodes ^ self expression: (nodes at: 1) value lessThan: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression3: nodes ^ self expression: (nodes at: 1) value greaterThan: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression4: nodes ^ self expression: (nodes at: 1) value equal: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression5: nodes ^ self expression: (nodes at: 1) value lessThanOrEqual: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression6: nodes ^ self expression: (nodes at: 1) value greaterThanOrEqual: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression7: nodes ^ self expression: (nodes at: 1) value notEqual: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression8: nodes ^ self expression: (nodes at: 1) value instEqual: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpression9: nodes ^ self expression: (nodes at: 1) value instNotEqual: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpressionEntry1: nodes ^ self expressionEntry: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpressionsList1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForExpressionsList2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFactor1: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFactor2: nodes ^ self expression: (nodes at: 1) value expo: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFixedOrNot1: nodes ^ true! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFixedOrNot2: nodes ^ false! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFixedOrNotPrecisionSpec1: nodes ^ Array with: (nodes at: 1) value with: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFormalParameter1: nodes ^ self formalParameter: (nodes at: 2) value parameterType: (nodes at: 4) value var: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFormalParametersDecl1: nodes ^ self formalParametersList: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFormalParametersList1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFormalParametersList2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFunction1: nodes ^ self function: (nodes at: 2) value formalParametersDecl: (nodes at: 3) value returnType: (nodes at: 5) value actionBody: (nodes at: 7) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFunctionEntry1: nodes ^ self functionEntry: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForFunctionIdentifier1: nodes ^ self functionIdentifier: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForGenericType1: nodes ^ self genericType: nil! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForGenericType2: nodes ^ self genericType: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForGroupRef1: nodes ^ self groupRef: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifier1: nodes ^ self selfIdentifier! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifier2: nodes ^ self missingValue: false! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifier3: nodes ^ self identifier: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifier4: nodes ^ (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifiersList1: nodes ^ OrderedCollection with: (nodes at: 1) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIdentifiersList2: nodes ^ OrderedCollection new addAll: (nodes at: 1) value; add: (nodes at: 3) value; yourself! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIfStatement1: nodes ^ self ifStatement: (nodes at: 2) value then: (nodes at: 4) value else: nil! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIfStatement2: nodes ^ self ifStatement: (nodes at: 2) value then: (nodes at: 4) value else: (nodes at: 6) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIncrementControl1: nodes ^ self incrementControl: (nodes at: 1) value first: (nodes at: 3) last: (nodes at: 5) value step: (nodes at: 6) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIndexSpec1: nodes ^ self indexSpecFrom: (nodes at: 2) value to: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForInterfaceList1: nodes ^ self explicitlyImportedItems: (nodes at: 2) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForInterfaceSpecification1: nodes ^ self interfaceSpecification: (nodes at: 1) value schema: (nodes at: 3) value interfaceList: (nodes at: 4) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForInterfaceSpecification2: nodes ^ self externalMetaSchema: (nodes at: 3) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForInterval1: nodes ^ self intervalExpression: (nodes at: 2) value op: (nodes at: 3) value expression: (nodes at: 4) value op: (nodes at: 5) value expression: (nodes at: 6) value! ! !PlatypusExpressAbstractParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 12/8/2012 11:09'! reduceActionForIntervalOp1: nodes ^ # ). keys size > 1 ifTrue: [idents := keys first findBetweenSubStrs: #($. ). idents notEmpty ifTrue: [remarkRef := self new: PltRemarkReference. remarkRef setRemark: aRemarkToken asPltRemark. remarkRef setPrefix: idents first. idents size > 1 ifTrue: [remarkRef setSuffix: idents second]. iref := self new: PltDictionaryInstanceReference. iref name: (ctxt := self currentNamedTypeOrContextDefinition) name. iref ref: ctxt. remarkRef setInside: iref. self currentSchema remarkReferences add: remarkRef. ^ remarkRef]]. ^ nil! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:46'! repeatStatement: incrementControlOrNil whileControl: whileExpressionOrNil untilControl: untilExpressionOrNil statements: statementsListOrNil | repeat | repeat := self new: PltRepeatStatement. statementsListOrNil notNil ifTrue: [repeat statements addAll: statementsListOrNil]. incrementControlOrNil notNil ifTrue: [repeat setIncrControl: incrementControlOrNil. incrementControlOrNil setOwner: repeat]. whileExpressionOrNil notNil ifTrue: [repeat setWhileControl: whileExpressionOrNil]. untilExpressionOrNil notNil ifTrue: [repeat setUntilControl: untilExpressionOrNil]. incrementControlOrNil notNil ifTrue: [self popContext]. ^ repeat! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:46'! returnStatement: expressionOrNil | return | return := self new: PltReturnStatement. return setReturned: expressionOrNil. ^ return! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'AlainPlantec 1/28/2011 11:44'! rule: rule entities: fromEntitiesList actionBody: actionBody whereClause: whereClause | instancesSet | rule setForEntities: (fromEntitiesList collect: [:s | instancesSet := self new: PltEntityInstancesSet. instancesSet setEntityRef: (self entityReferenceType: s). instancesSet]). rule forEntities do: [:fe | self registerIdentifier: fe named: fe entityRef name]. rule owner notNil ifTrue: [rule owner globalRules add: rule]. rule whereRules addAll: whereClause. actionBody second notNil ifTrue: [rule statements addAll: actionBody second]. self popContext. ^ rule! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/15/2007 10:20'! ruleIdentifier: anIdentifier | rule | rule := self new: PltGlobalRule. rule setOwner: self currentSchema. self setScannerTokenMetaData: rule. anIdentifier updateDictionaryInstanceName: rule. self pushContext: rule. ^ rule! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/22/2006 18:04'! schema: schema interfaces: interfacesCollectionOrNil blocks: blocksCollectionOrNil schema setInterface: interfacesCollectionOrNil. schema owner addElement: schema. self popContext. ^ schema! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/15/2007 10:20'! schemaIdentifier: anIdentifier | schema | schema := self new: PltSchemaDefinition. self setScannerTokenMetaData: schema. schema setOwner: self schemaInstance. anIdentifier updateDictionaryInstanceName: schema. self pushContext: schema. ^ schema! ! !PlatypusExpressParser methodsFor: 'accessing' stamp: 'apl 3/15/2006 20:07'! schemaInstance self contextsStack reverseDo: [:c | c isPltSchemaInstance ifTrue: [^ c]]. ^ nil! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/29/2006 14:11'! schemaInstance: aCollectionOfSchemaParseResults ^ self schemaInstance ! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:46'! selectType: identifiersList | type | type := self new: PltSelectType. type setSelections: (identifiersList collect: [:s | self namedType: s]). type owner: self currentNamedType. ^ type! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 9/25/2006 13:33'! selfIdentifier ^ self currentNamedType ifNil: [PltSelfIdentifier new] ifNotNil: [self currentNamedType asSelfIdentifier]! ! !PlatypusExpressParser methodsFor: 'result building' stamp: 'apl 3/30/2006 09:17'! setScannerTokenMetaData: aMetaData | token | (token := scanner tokenList previousPrimaryElementOpenKeywordFrom: scanner tokenList last) ifNotNil: [token metaData: aMetaData]! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'AlainPlantec 6/13/2012 13:14'! setType: indexSpecOrNil baseType: baseType | type | type := self new: PltSetType. type setElementType: baseType. type setIsGeneralType: false. indexSpecOrNil notNil ifTrue: [ type setLowerBound: indexSpecOrNil first. type setUpperBound: indexSpecOrNil second. indexSpecOrNil first ifNotNil: [:is | is owner: type]. indexSpecOrNil second ifNotNil: [:is | is owner: type]]. ^ type! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:46'! skipStatement ^ self new: PltSkipStatement! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:46'! stringLiteral: aString | lit | lit := self new: PltStringLiteral. lit setVal: ((aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '''''' with: ''''). ^ lit! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 21:47'! stringType: FixedOrNotPrecisionSpecOrNil | type | type := self new: PltStringType. FixedOrNotPrecisionSpecOrNil notNil ifTrue: [type setWidth: FixedOrNotPrecisionSpecOrNil first. type setFixedWidth: FixedOrNotPrecisionSpecOrNil second]. ^ type! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/18/2003 14:02'! subtypeDeclaration: anIdentifiersList ^ anIdentifiersList ! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/19/2003 00:01'! subtypeIdentifier: anIdentifier | | ^ self namedType: anIdentifier. ! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/15/2007 10:45'! supertypeConstraint: supertypeExpressionOrNil | supertypeConstraint eref | supertypeConstraint := self new: PltSupertypeConstraint. eref := (self new: PltEntityDefinitionReference) name: self currentContext name. eref owner: self currentNamedTypeOrContextDefinition. supertypeConstraint setConstrained: eref. self currentContext setInstantiable: true. supertypeConstraint setExpr: supertypeExpressionOrNil. ^ supertypeConstraint! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:01'! supertypeEntityReference: anIdentifier | subEntityRef | subEntityRef := self new: PltSubEntityRefExpression. subEntityRef entityRef: (self namedType: anIdentifier). ^ subEntityRef! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:01'! supertypeExpression: supertypeExpression1 and: supertypeExpression2 | andSupertype | andSupertype := self new: PltAndSupertype. andSupertype setLeftExpr: supertypeExpression1. andSupertype setRightExpr: supertypeExpression2. ^ andSupertype! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:01'! supertypeExpression: supertypeExpression1 andor: supertypeExpression2 | andSupertype | andSupertype := self new: PltAndorSupertype. andSupertype setLeftExpr: supertypeExpression1. andSupertype setRightExpr: supertypeExpression2. ^ andSupertype! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:01'! supertypeOneofExpression: identifiersList | oneofSupertypeExpression | oneofSupertypeExpression := self new: PltOneofSupertypeExpression. oneofSupertypeExpression setExprList: identifiersList. ^ oneofSupertypeExpression! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/15/2007 10:35'! type: aDefinedType underlyingType: underlyingType whereClause: whereClauseOrNil | enumVal | aDefinedType setDomain: underlyingType. aDefinedType setWhereRules: whereClauseOrNil. aDefinedType owner notNil ifTrue: [aDefinedType owner types add: aDefinedType]. self popContext. underlyingType isPltEnumerationType ifTrue: [underlyingType elements do: [:el | enumVal := PltEnumerationValue domain: (PltDefinedTypeReference ref: aDefinedType) element: el. enumVal domain owner: self currentNamedTypeOrContextDefinition. self registerIdentifier: enumVal named: el asUppercase]]. ^ aDefinedType! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/15/2007 10:20'! typeIdentifier: anIdentifier | type | type := self new: PltDefinedType. self setScannerTokenMetaData: type. type setOwner: self currentContextDefinition. anIdentifier updateDictionaryInstanceName: type. self registerNamedType: type named: anIdentifier ident. self pushContext: type. self registerIdentifier: type named: 'SELF'. ^ type! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'MrCleaner 1/20/2011 20:02'! typeMapFrom: aListOfIdent to: anExpression | sch | (sch := self currentSchema) isNil ifFalse: [ sch addTypeMap: (PltMetaMappingDefinition definitionPath: aListOfIdent metaExpression: anExpression)]! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'MrCleaner 1/20/2011 21:23'! typeMapWhere: aWhereRule to: anExpression | sch | (sch := self currentSchema) isNil ifFalse: [ sch addTypeMap: (PltMetaMappingRule typeMapWhere: aWhereRule whereValue to: anExpression)]! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:01'! uniqueAttributesList: anIdentifiersCollection head: anIdentOrNil | uniquenessRule ref | uniquenessRule := self new: PltUniquenessRule. uniquenessRule setAttributes: (anIdentifiersCollection collect: [:attr | ref := self new: PltUniquenessRuleAttributeIdentifier. ref fastSetParameters: nil. ref setName: attr name. ref setGroupRefName: (attr redeclaring ifNotNil: [attr redeclaring entityRef name]). ref]). uniquenessRule setLabel: anIdentOrNil. uniquenessRule setOwner: self currentUniquenessRuleContainer. ^ uniquenessRule! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 16:55'! uniqueClause: UniqueRules ^ UniqueRules! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 3/5/2003 16:53'! whereClause: whereRules ^ whereRules! ! !PlatypusExpressParser methodsFor: 'express semantic actions' stamp: 'apl 7/26/2004 22:02'! whereRule: anExpression head: anIdentOrNil | rule | rule := self new: PltWhereRule. rule setLabel: anIdentOrNil. rule setWhereValue: anExpression. rule setOwner: self currentWhereRuleContainer. ^ rule! ! !PlatypusExpressBuiltinFormatParser class methodsFor: 'generated-comments' stamp: 'apl 12/12/2005 12:03'! parserDefinitionComment " Rep : SymbolRep { PlatypusExpressBuiltinFormatSymbolicFormatter sourceFormat: '1' } | GraphRep { PlatypusExpressBuiltinFormatPictureFormatter sourceFormat: '1' } ; SymbolRep : Signe Width Decimals Type ; Signe : ""+"" { $+ } | ""-"" { $- } | { nil } ; Width : { '1' value } | { nil } ; Decimals : ""."" { '2' value } | { nil } ; Type : ""I"" { $I } | ""F"" { $F } | ""E"" { $E } ; GraphRep : Signe GraphRepContents | OPar GraphRepContents CPar ; OPar : ""("" { $( } ; CPar : "")"" { $) } ; GraphRepContents : Diezes Sep Diezes Sep Diezes { Array with: '1' with: '2' with: '3' with: '4' with: '5' } | Diezes Sep Diezes { Array with: '1' with: '2' with: '3' } | Diezes { Array with: '1' } ; Diezes : ""#""+ { '1' value size } ; Sep : ""."" { $. } | "","" { $, } ;"! ! !PlatypusExpressBuiltinFormatParser class methodsFor: 'generated-accessing' stamp: 'apl 12/12/2005 12:03'! scannerClass ^PlatypusExpressBuiltinFormatScanner! ! !PlatypusExpressBuiltinFormatParser class methodsFor: 'generated-starting states' stamp: 'apl 12/12/2005 12:03'! startingStateForRep ^1! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForCPar1: nodes ^$)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForDecimals1: nodes ^(nodes at: 2) value! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForDecimals2: nodes ^nil! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForDiezes1: nodes ^(nodes at: 1) value size! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForGraphRepContents1: nodes ^Array with: (nodes at: 1) with: (nodes at: 2) with: (nodes at: 3) with: (nodes at: 4) with: (nodes at: 5)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForGraphRepContents2: nodes ^Array with: (nodes at: 1) with: (nodes at: 2) with: (nodes at: 3)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForGraphRepContents3: nodes ^Array with: (nodes at: 1)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForOPar1: nodes ^$(! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForRep1: nodes ^PlatypusExpressBuiltinFormatSymbolicFormatter sourceFormat: (nodes at: 1)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForRep2: nodes ^PlatypusExpressBuiltinFormatPictureFormatter sourceFormat: (nodes at: 1)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForRepeatXMultipleXXXXX1: nodes ^OrderedCollection with: (nodes at: 1)! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForRepeatXMultipleXXXXX2: nodes ^(nodes at: 1) add: (nodes at: 2); yourself! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForSep1: nodes ^$.! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForSep2: nodes ^$,! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForSigne1: nodes ^$+! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForSigne2: nodes ^$-! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForSigne3: nodes ^nil! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForType1: nodes ^$I! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForType2: nodes ^$F! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForType3: nodes ^$E! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForWidth1: nodes ^(nodes at: 1) value! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-reduction actions' stamp: 'apl 12/12/2005 12:03'! reduceActionForWidth2: nodes ^nil! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-tables' stamp: 'apl 12/12/2005 12:03'! reduceTable ^#( #(13 1 #reduceActionForRep1:) #(13 1 #reduceActionForRep2:) #(14 2 #reduceFor:) #(14 3 #reduceFor:) #(15 1 #reduceActionForSigne1:) #(15 1 #reduceActionForSigne2:) #(15 0 #reduceActionForSigne3:) #(16 1 #reduceActionForWidth1:) #(16 0 #reduceActionForWidth2:) #(17 2 #reduceActionForDecimals1:) #(17 0 #reduceActionForDecimals2:) #(18 1 #reduceActionForType1:) #(18 1 #reduceActionForType2:) #(18 1 #reduceActionForType3:) #(19 4 #reduceFor:) #(20 5 #reduceActionForGraphRepContents1:) #(20 3 #reduceActionForGraphRepContents2:) #(20 1 #reduceActionForGraphRepContents3:) #(21 1 #reduceActionForOPar1:) #(22 1 #reduceActionForCPar1:) #(23 1 #reduceActionForDiezes1:) #(24 1 #reduceActionForSep1:) #(24 1 #reduceActionForSep2:) #(25 1 #reduceActionForRepeatXMultipleXXXXX1:) #(25 2 #reduceActionForRepeatXMultipleXXXXX2:) #(28 1 #reduceFor:) )! ! !PlatypusExpressBuiltinFormatParser methodsFor: 'generated-tables' stamp: 'apl 12/12/2005 12:03'! transitionTable ^#( #(3 30 1 9 2 30 3 30 4 13 5 30 7 30 9 17 10 30 11 21 13 25 14 29 15 33 19 37 21) #(2 26 1 3 4 7 9 11) #(2 22 1 3 4 7 9 11) #(2 78 7) #(2 0 26) #(2 10 26) #(3 38 1 38 3 38 4 41 7 38 9 45 11 49 16 53 20 57 23 61 25) #(2 6 26) #(3 41 7 65 20 57 23 61 25) #(2 98 1 6 7 8 26) #(2 34 1 3 4 9) #(3 69 1 46 3 46 4 46 9 73 17) #(2 14 26) #(3 77 1 81 6 74 8 85 24 74 26) #(3 86 1 86 6 89 7 86 8 86 26) #(3 93 8 97 22) #(2 101 11) #(3 105 3 109 4 113 9 117 18) #(2 90 7) #(2 94 7) #(3 41 7 121 23 61 25) #(2 102 1 6 7 8 26) #(2 82 26) #(2 18 26) #(2 42 3 4 9) #(2 50 26) #(2 54 26) #(2 58 26) #(2 62 26) #(3 77 1 81 6 70 8 125 24 70 26) #(3 41 7 129 23 61 25) #(2 66 8 26) )! ! !PlatypusExpressLikeParser class methodsFor: 'generated-comments' stamp: 'apl 2/5/2004 19:15'! parserDefinitionComment "Source : Char* {'1' value } ; Char : ""@"" { '[a-zA-Z]' } | ""^"" { '[A-Z]' } | ""?"" { '[a-zA-Z0-9]' } | { '1' value asString } | { '1' value allButFirst} ; "! ! !PlatypusExpressLikeParser class methodsFor: 'generated-accessing' stamp: 'apl 2/5/2004 19:15'! scannerClass ^PlatypusExpressLikeScanner! ! !PlatypusExpressLikeParser class methodsFor: 'generated-starting states' stamp: 'apl 2/5/2004 19:15'! startingStateForSource ^1! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForChar1: nodes ^'[a-zA-Z]'! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForChar2: nodes ^'[A-Z]'! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForChar3: nodes ^'[a-zA-Z0-9]'! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForChar4: nodes ^(nodes at: 1) value asString! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForChar5: nodes ^(nodes at: 1) value allButFirst! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForRepeatXXChar1: nodes ^OrderedCollection new! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForRepeatXXChar2: nodes ^(nodes at: 1) add: (nodes at: 2); yourself! ! !PlatypusExpressLikeParser methodsFor: 'generated-reduction actions' stamp: 'apl 2/5/2004 19:15'! reduceActionForSource1: nodes ^(nodes at: 1) value! ! !PlatypusExpressLikeParser methodsFor: 'generated-tables' stamp: 'apl 2/5/2004 19:15'! reduceTable ^#( #(6 1 #reduceActionForSource1:) #(7 1 #reduceFor:) #(8 1 #reduceActionForChar1:) #(8 1 #reduceActionForChar2:) #(8 1 #reduceActionForChar3:) #(8 1 #reduceActionForChar4:) #(8 1 #reduceActionForChar5:) #(9 0 #reduceActionForRepeatXXChar1:) #(9 2 #reduceActionForRepeatXXChar2:) )! ! !PlatypusExpressLikeParser methodsFor: 'generated-tables' stamp: 'apl 2/5/2004 19:15'! transitionTable ^#( #(3 34 1 34 2 34 3 34 4 34 5 9 6 13 9 34 10) #(2 0 10) #(3 17 1 21 2 25 3 29 4 33 5 37 8 6 10) #(2 14 1 2 3 4 5 10) #(2 18 1 2 3 4 5 10) #(2 22 1 2 3 4 5 10) #(2 26 1 2 3 4 5 10) #(2 30 1 2 3 4 5 10) #(2 38 1 2 3 4 5 10) )! ! !StepParser class methodsFor: 'generated-comments' stamp: 'AlainPlantec 5/24/2012 00:14'! parserDefinitionComment "%start ExchangeFile DataEntities DataEntity SimpleRecordEntry Parameter ; ExchangeFile : ""ISO-10303-21"" "";"" HeaderSection 'HS' DataSection 'DS' ""END-ISO-10303-21"" "";"" { Array with: HS with: DS.}; HeaderSection : "";"" HeaderEntity* 'entities' "";"" {entities}; EntityName : { '1' value asUppercase }; HeaderEntity : EntityName ""("" Parameters "")"" "";"" { self headerDataNamed: '1' record: '3' } | EntityName ""("" "")"" "";"" {self headerDataNamed: '1' value record: OrderedCollection new }; DataSection : "";"" DataEntities 'entities' "";"" {entities.}; DataEntities : DataEntity* ; DataEntity : InstLabel ""="" ""SCOPE"" DataEntity* ""END_SCOPE"" EntityExport EntityInstanceRHS "";"" { self data: '1' record: '7'} | InstLabel ""="" EntityInstanceRHS "";"" { self data: '1' record: '3'}; InstLabel : ""#"" 'id' { id value } | ""#"" 'id' { id value }; EntityInstanceRHS : SimpleRecord {self simpleInstanceKey -> '1'} | SubsuperRecord { self complexInstanceKey -> '1'}; SubsuperRecord : ""("" SubsuperRecordList "")"" {'2'}; SubsuperRecordList : SubsuperRecordListElement* {'1'}; SubsuperRecordListElement : 'entity' ""("" Parameters 'attributes' "")"" { Association key: entity value value: attributes } | 'entity' ""("" "")"" { Association key: entity value value: OrderedCollection new }; SimpleRecordEntry : SimpleRecord { StepSimpleRecord entityName: '1' first values: '1' second } ; SimpleRecord : EntityName 'entity' ""("" Parameters? 'attributes' "")"" { self simpleRecord: entity attributes: (attributes ifNil: [OrderedCollection new]) }; TypedValue : EntityName ""("" Parameter "")"" { '3' }; Parameters : Parameter { OrderedCollection with: '1' } | Parameters "",""? Parameter { '1' add: '3'. '1' } ; Parameter : ParameterValue { '1' } | "":"" ParameterValue { '3' value } ; ParameterValue : ""$"" { $$ } | ""*"" { StepRedefinedValue new } | PlusOrMinus? { | v | v := '2' value asNumber . '1' value = $- ifTrue: [ v := v negated]. v} | PlusOrMinus? { | v | v := '2' value asNumber . '1' value = $- ifTrue: [ v := v negated]. v asFloat} | {('1' value copyFrom:2 to: ('1' value size -1)) asSymbol} | { | v | v := '1' value copyFrom:2 to: ('1' value size -1). v copyReplaceAll: '''''' with: '''' } | {'1' value copyFrom:2 to: ('1' value size -1)} | Logical {'1' } | TypedValue {'1' } | InstanceReference {'1'} | EmbeddedList { '1' }; Logical : "".T."" {true} | "".F."" {false} | "".U."" {#UNKNOWN}; PlusOrMinus : ""+"" { $+ } | ""-"" { $- }; InstanceReference : InstLabel { StepInstanceReference id: '1'}; ScopeInstanceReference : InstanceReference; EntityExport :""/"" ScopeInstRefs ""/"" |; ScopeInstRefs : ScopeInstanceReference | ScopeInstRefs "","" ScopeInstanceReference; EmbeddedList : ""("" Parameters "")"" {'2'} | ""("" "")"" { OrderedCollection new }; "! ! !StepParser class methodsFor: 'generated-accessing' stamp: 'AlainPlantec 5/24/2012 00:14'! scannerClass ^StepScanner! ! !StepParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 5/24/2012 00:14'! startingStateForDataEntities ^3! ! !StepParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 5/24/2012 00:14'! startingStateForDataEntity ^4! ! !StepParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 5/24/2012 00:14'! startingStateForExchangeFile ^1! ! !StepParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 5/24/2012 00:14'! startingStateForParameter ^6! ! !StepParser class methodsFor: 'generated-starting states' stamp: 'AlainPlantec 5/24/2012 00:14'! startingStateForSimpleRecordEntry ^5! ! !StepParser methodsFor: 'semantic actions' stamp: 'apl 3/9/2005 15:57'! complexInstanceKey ^ #complexInstance! ! !StepParser methodsFor: 'semantic actions' stamp: 'apl 3/24/2005 15:05'! data: instLabel record: record | records | ^ record key = self simpleInstanceKey ifTrue: [StepInternalRepresentation label: instLabel entityName: record value first values: record value second] ifFalse: [records := record value collect: [:v | StepSimpleRecord entityName: v key values: v value]. StepExternalRepresentation label: instLabel records: records]! ! !StepParser methodsFor: 'semantic actions' stamp: 'apl 3/9/2005 21:56'! headerDataNamed: name record: record ^ StepSimpleRecord entityName: name values: record! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForDataEntity1: nodes ^ self data: (nodes at: 1) record: (nodes at: 7)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForDataEntity2: nodes ^ self data: (nodes at: 1) record: (nodes at: 3)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForDataSection1: nodes ^ nodes at: 3! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForEmbeddedList1: nodes ^ nodes at: 2! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForEmbeddedList2: nodes ^ OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForEntityInstanceRHS1: nodes ^ self simpleInstanceKey -> (nodes at: 1)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForEntityInstanceRHS2: nodes ^ self complexInstanceKey -> (nodes at: 1)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForEntityName1: nodes ^ (nodes at: 1) value asUppercase! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForExchangeFile1: nodes ^ Array with: (nodes at: 3) with: (nodes at: 4)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForHeaderEntity1: nodes ^ self headerDataNamed: (nodes at: 1) record: (nodes at: 3)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForHeaderEntity2: nodes ^ self headerDataNamed: (nodes at: 1) value record: OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForHeaderSection1: nodes ^ nodes at: 3! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForInstLabel1: nodes ^ (nodes at: 2) value! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForInstLabel2: nodes ^ (nodes at: 2) value! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForInstanceReference1: nodes ^ StepInstanceReference id: (nodes at: 1)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForLogical1: nodes ^ true! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForLogical2: nodes ^ false! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForLogical3: nodes ^ #UNKNOWN! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXParameters1: nodes ^ nil! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXParameters2: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXPlusOrMinus1: nodes ^ nil! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXPlusOrMinus2: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXXXX1: nodes ^ nil! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForOptionalXXXXX2: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameter1: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameter2: nodes ^ (nodes at: 3) value! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue10: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue11: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue1: nodes ^ $$! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue2: nodes ^ StepRedefinedValue new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue3: nodes | v | v := (nodes at: 2) value asNumber. (nodes at: 1) value = $- ifTrue: [ v := v negated ]. ^ v! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue4: nodes | v | v := (nodes at: 2) value asNumber. (nodes at: 1) value = $- ifTrue: [ v := v negated ]. ^ v asFloat! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue5: nodes ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) asSymbol! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue6: nodes | v | v := (nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1. ^ v copyReplaceAll: '''''' with: ''''! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue7: nodes ^ (nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue8: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameterValue9: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameters1: nodes ^ OrderedCollection with: (nodes at: 1)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForParameters2: nodes (nodes at: 1) add: (nodes at: 3). ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForPlusOrMinus1: nodes ^ $+! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForPlusOrMinus2: nodes ^ $-! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXDataEntity1: nodes ^ OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXDataEntity2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXHeaderEntity1: nodes ^ OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXHeaderEntity2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXSubsuperRecordListElement1: nodes ^ OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForRepeatXXSubsuperRecordListElement2: nodes ^ (nodes at: 1) add: (nodes at: 2); yourself! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSimpleRecord1: nodes ^ self simpleRecord: (nodes at: 1) attributes: ((nodes at: 3) ifNil: [ OrderedCollection new ])! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSimpleRecordEntry1: nodes ^ StepSimpleRecord entityName: (nodes at: 1) first values: (nodes at: 1) second! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSubsuperRecord1: nodes ^ nodes at: 2! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSubsuperRecordList1: nodes ^ nodes at: 1! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSubsuperRecordListElement1: nodes ^ Association key: (nodes at: 1) value value: (nodes at: 3)! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForSubsuperRecordListElement2: nodes ^ Association key: (nodes at: 1) value value: OrderedCollection new! ! !StepParser methodsFor: 'generated-reduction actions' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceActionForTypedValue1: nodes ^ nodes at: 3! ! !StepParser methodsFor: 'generated-tables' stamp: 'AlainPlantec 5/24/2012 00:14'! reduceTable ^#( #(30 0 #reduceActionForRepeatXXHeaderEntity1:) #(30 2 #reduceActionForRepeatXXHeaderEntity2:) #(31 1 #reduceActionForEntityName1:) #(32 5 #reduceActionForDataSection1:) #(33 0 #reduceActionForRepeatXXDataEntity1:) #(33 2 #reduceActionForRepeatXXDataEntity2:) #(34 2 #reduceActionForInstLabel1:) #(34 2 #reduceActionForInstLabel2:) #(35 3 #reduceFor:) #(35 0 #reduceFor:) #(36 1 #reduceActionForEntityInstanceRHS1:) #(36 1 #reduceActionForEntityInstanceRHS2:) #(37 5 #reduceActionForHeaderSection1:) #(38 4 #reduceActionForSimpleRecord1:) #(39 3 #reduceActionForSubsuperRecord1:) #(40 1 #reduceActionForSubsuperRecordList1:) #(41 4 #reduceActionForSubsuperRecordListElement1:) #(41 3 #reduceActionForSubsuperRecordListElement2:) #(42 0 #reduceActionForRepeatXXSubsuperRecordListElement1:) #(42 2 #reduceActionForRepeatXXSubsuperRecordListElement2:) #(43 0 #reduceActionForOptionalXXParameters1:) #(43 1 #reduceActionForOptionalXXParameters2:) #(44 5 #reduceActionForHeaderEntity1:) #(44 4 #reduceActionForHeaderEntity2:) #(45 0 #reduceActionForOptionalXXXXX1:) #(45 1 #reduceActionForOptionalXXXXX2:) #(46 1 #reduceActionForParameterValue1:) #(46 1 #reduceActionForParameterValue2:) #(46 2 #reduceActionForParameterValue3:) #(46 2 #reduceActionForParameterValue4:) #(46 1 #reduceActionForParameterValue5:) #(46 1 #reduceActionForParameterValue6:) #(46 1 #reduceActionForParameterValue7:) #(46 1 #reduceActionForParameterValue8:) #(46 1 #reduceActionForParameterValue9:) #(46 1 #reduceActionForParameterValue10:) #(46 1 #reduceActionForParameterValue11:) #(47 1 #reduceActionForPlusOrMinus1:) #(47 1 #reduceActionForPlusOrMinus2:) #(48 0 #reduceActionForOptionalXXPlusOrMinus1:) #(48 1 #reduceActionForOptionalXXPlusOrMinus2:) #(49 1 #reduceActionForParameter1:) #(49 3 #reduceActionForParameter2:) #(50 1 #reduceActionForSimpleRecordEntry1:) #(51 8 #reduceActionForDataEntity1:) #(51 4 #reduceActionForDataEntity2:) #(52 1 #reduceFor:) #(53 1 #reduceActionForLogical1:) #(53 1 #reduceActionForLogical2:) #(53 1 #reduceActionForLogical3:) #(54 1 #reduceActionForInstanceReference1:) #(55 3 #reduceActionForEmbeddedList1:) #(55 2 #reduceActionForEmbeddedList2:) #(56 1 #reduceFor:) #(57 1 #reduceFor:) #(57 3 #reduceFor:) #(60 6 #reduceActionForExchangeFile1:) #(61 4 #reduceActionForTypedValue1:) #(62 1 #reduceFor:) #(63 1 #reduceActionForParameters1:) #(63 3 #reduceActionForParameters2:) )! ! !StepParser methodsFor: 'semantic actions' stamp: 'apl 3/9/2005 15:57'! simpleInstanceKey ^ #simpleInstance! ! !StepParser methodsFor: 'semantic actions' stamp: 'apl 4/11/2006 08:00'! simpleRecord: entity attributes: attributes ^ Array with: entity with: attributes! ! !StepParser methodsFor: 'generated-tables' stamp: 'AlainPlantec 5/24/2012 00:14'! transitionTable ^#( #[1 0 29 0 6 0 33 0 60] #[1 0 29 0 6 0 37 0 60] #[1 0 22 0 9 0 41 0 33 0 45 0 52 0 22 0 58] #[1 0 49 0 9 0 53 0 34 0 57 0 51] #[1 0 61 0 25 0 65 0 31 0 69 0 38 0 73 0 50] #[1 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 0 145 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61] #[0 0 165 0 7] #[0 0 0 0 58] #[0 0 0 0 58] #[1 0 49 0 9 0 190 0 25 0 53 0 34 0 169 0 51 0 190 0 58] #[0 0 0 0 58] #[1 0 173 0 21 0 177 0 25] #[0 0 181 0 8] #[0 0 0 0 58] #[0 0 14 0 4] #[0 0 185 0 4] #[0 0 178 0 58] #[0 0 0 0 58] #[1 0 189 0 3 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 0 193 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61 0 197 0 63] #[0 0 202 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 154 0 21 0 22] #[0 0 198 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 158 0 21 0 22] #[0 0 194 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 110 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 114 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 134 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 130 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[1 0 14 0 4 0 201 0 17] #[0 0 126 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 205 0 4] #[0 0 206 0 1 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 170 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 166 0 21 0 22] #[1 0 209 0 21 0 213 0 22] #[0 0 0 0 58] #[0 0 138 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 146 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 150 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 142 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[1 0 217 0 25 0 221 0 37] #[0 0 26 0 5 0 9 0 25 0 58] #[0 0 30 0 1 0 3 0 4 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 34 0 1 0 3 0 4 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[1 0 225 0 2 0 229 0 4 0 61 0 25 0 65 0 31 0 233 0 36 0 237 0 38 0 241 0 39] #[1 0 86 0 3 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 245 0 43 0 133 0 46 0 137 0 47 0 141 0 48 0 193 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61 0 249 0 63] #[0 0 214 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 242 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26] #[1 0 253 0 3 0 102 0 4 0 102 0 9 0 102 0 11 0 102 0 12 0 102 0 13 0 102 0 14 1 1 0 15 0 102 0 16 0 102 0 18 0 102 0 19 0 102 0 21 0 102 0 22 0 102 0 23 0 102 0 24 0 102 0 25 0 102 0 26 1 5 0 45] #[1 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 61 0 25 0 121 0 26 0 125 0 31 0 129 0 34 1 9 0 46 0 137 0 47 0 141 0 48 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61] #[1 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 1 13 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61] #[0 0 118 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 122 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 1 17 0 7] #[1 1 21 0 25 1 25 0 32] #[1 0 22 0 5 0 22 0 9 1 29 0 33] #[1 0 78 0 3 0 78 0 25 1 33 0 40 1 37 0 42] #[0 1 41 0 7] #[0 0 46 0 7] #[0 0 50 0 7] #[0 1 45 0 3] #[1 0 90 0 3 0 102 0 4 0 102 0 9 0 102 0 11 0 102 0 12 0 102 0 13 0 102 0 14 1 1 0 15 0 102 0 16 0 102 0 18 0 102 0 19 0 102 0 21 0 102 0 22 0 102 0 23 0 102 0 24 0 102 0 25 0 102 0 26 1 5 0 45] #[0 0 210 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 0 106 0 4 0 9 0 11 0 12 0 13 0 14 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26] #[1 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 1 49 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61] #[0 0 174 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[0 1 53 0 3] #[1 0 6 0 25 1 57 0 30] #[0 1 61 0 7] #[0 1 65 0 10] #[1 1 69 0 5 0 49 0 9 0 53 0 34 0 169 0 51] #[0 1 73 0 3] #[1 0 66 0 3 1 77 0 25 1 81 0 41] #[0 0 186 0 5 0 9 0 25 0 58] #[0 0 58 0 7 0 58] #[0 0 246 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26] #[0 0 234 0 3 0 4 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 21 0 22 0 23 0 24 0 25 0 26 0 58] #[1 1 85 0 25 1 89 0 31 1 93 0 44] #[1 0 22 0 9 0 22 0 25 0 41 0 33 1 97 0 52] #[0 1 101 0 7] #[1 1 105 0 1 0 42 0 4 0 42 0 25 1 109 0 35] #[0 0 62 0 7] #[0 1 113 0 4] #[0 0 82 0 3 0 25] #[1 0 14 0 4 1 117 0 7] #[0 1 121 0 4] #[0 0 10 0 25] #[0 1 125 0 25] #[0 0 230 0 58] #[1 0 49 0 9 0 129 0 34 1 129 0 54 1 133 0 56 1 137 0 57] #[1 0 229 0 4 0 61 0 25 0 65 0 31 1 141 0 36 0 237 0 38 0 241 0 39] #[1 1 145 0 3 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 0 193 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61 1 149 0 63] #[0 0 54 0 25] #[1 1 153 0 3 0 77 0 4 0 49 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 16 0 101 0 18 0 105 0 19 0 162 0 21 0 162 0 22 0 109 0 23 0 113 0 24 0 117 0 25 0 121 0 26 0 125 0 31 0 129 0 34 0 133 0 46 0 137 0 47 0 141 0 48 0 193 0 49 0 149 0 53 0 153 0 54 0 157 0 55 0 161 0 61 1 157 0 63] #[0 1 161 0 7] #[0 0 218 0 1 0 15] #[0 0 222 0 1 0 15] #[1 1 165 0 1 1 169 0 15] #[0 1 173 0 7] #[0 0 74 0 3 0 25] #[1 1 177 0 3 0 102 0 4 0 102 0 9 0 102 0 11 0 102 0 12 0 102 0 13 0 102 0 14 1 1 0 15 0 102 0 16 0 102 0 18 0 102 0 19 0 102 0 21 0 102 0 22 0 102 0 23 0 102 0 24 0 102 0 25 0 102 0 26 1 5 0 45] #[0 1 181 0 7] #[1 1 185 0 3 0 102 0 4 0 102 0 9 0 102 0 11 0 102 0 12 0 102 0 13 0 102 0 14 1 1 0 15 0 102 0 16 0 102 0 18 0 102 0 19 0 102 0 21 0 102 0 22 0 102 0 23 0 102 0 24 0 102 0 25 0 102 0 26 1 5 0 45] #[0 0 18 0 10] #[0 0 38 0 4 0 25] #[1 0 49 0 9 0 129 0 34 1 129 0 54 1 189 0 56] #[0 0 182 0 5 0 9 0 25 0 58] #[0 0 70 0 3 0 25] #[0 0 98 0 25] #[0 1 193 0 7] #[0 0 226 0 1 0 15] #[0 0 94 0 25] )! ! "Platypus"! !Filename class methodsFor: 'instance creation' stamp: 'apl 4/11/2006 09:40'! named: str ^ self new publicName: str! ! !Filename methodsFor: 'accessing' stamp: 'apl 4/11/2006 09:39'! publicName ^publicName! ! !Filename methodsFor: 'accessing' stamp: 'apl 4/11/2006 09:40'! publicName: aName publicName := aName! ! !Filename methodsFor: 'stream creation' stamp: 'apl 4/11/2006 09:42'! readStream ^ FileStream fileNamed: self publicName! ! !Filename methodsFor: 'stream creation' stamp: 'apl 6/5/2006 10:51'! writeStream ^ FileStream forceNewFileNamed: self publicName! ! !LFalse class methodsFor: 'initialization' stamp: 'apl 3/4/2005 14:24'! initializedInstance ^ Smalltalk at: #Lfalse ifAbsentPut: [self basicNew]! ! !LFalse methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:15'! & alternativeObject "Evaluating conjunction -- answer false since receiver is false." ^self! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! and: alternativeBlock "Nonevaluating conjunction -- answer with false since the receiver is false." ^self! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! ifFalse: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^alternativeBlock value! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^falseAlternativeBlock value! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/6/2005 21:53'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock ifUnknown: unknownAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! ifTrue: alternativeBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^nil! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^falseAlternativeBlock value! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/6/2005 21:53'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock ifUnknown: unknownAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value! ! !LFalse methodsFor: 'logical operations' stamp: 'AlainPlantec 4/26/2012 09:31'! not "Negation -- answer true since the receiver is false." ^ LTrue! ! !LFalse methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:15'! or: alternativeBlock "Nonevaluating disjunction -- answer value of alternativeBlock." ^alternativeBlock value! ! !LFalse methodsFor: 'printing' stamp: 'apl 3/4/2005 14:26'! printOn: aStream aStream nextPutAll: 'Lfalse'! ! !LFalse methodsFor: 'logical operations' stamp: 'apl 3/6/2005 21:52'! | aLogical "Evaluating disjunction (OR) -- answer with the argument, aBoolean." ^ aLogical! ! !LTrue class methodsFor: 'initialization' stamp: 'apl 3/6/2005 21:49'! initializedInstance ^ Smalltalk at: #Ltrue ifAbsentPut: [self basicNew]! ! !LTrue methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:16'! & alternativeObject "Evaluating conjunction -- answer alternativeObject since receiver is true." ^alternativeObject! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! and: alternativeBlock "Nonevaluating conjunction -- answer the value of alternativeBlock since the receiver is true." ^alternativeBlock value! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! ifFalse: alternativeBlock "Since the condition is true, the value is the true alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^nil! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Answer the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^trueAlternativeBlock value! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! ifTrue: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^alternativeBlock value! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "Answer with the value of trueAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^trueAlternativeBlock value! ! !LTrue methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:16'! not "Negation--answer false since the receiver is true." ^false! ! !LTrue methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:16'! or: alternativeBlock "Nonevaluating disjunction -- answer true since the receiver is true." ^self! ! !LTrue methodsFor: 'printing' stamp: 'apl 3/4/2005 14:16'! printOn: aStream aStream nextPutAll: 'true'! ! !LTrue methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:16'! | aBoolean "Evaluating disjunction (OR) -- answer true since the receiver is true." ^self! ! !LUnknown class methodsFor: 'initialization' stamp: 'apl 3/6/2005 21:50'! initializedInstance ^ Smalltalk at: #Lunknown ifAbsentPut: [self basicNew]! ! !LUnknown methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:17'! & alternativeObject "Evaluating conjunction -- answer false since receiver is false." ^self! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! and: alternativeBlock "Nonevaluating conjunction -- answer with false since the receiver is false." ^self! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! ifFalse: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^alternativeBlock value! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^falseAlternativeBlock value! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! ifTrue: alternativeBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^nil! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^falseAlternativeBlock value! ! !LUnknown methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:17'! not "Negation -- answer true since the receiver is false." ^true! ! !LUnknown methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:17'! or: alternativeBlock "Nonevaluating disjunction -- answer value of alternativeBlock." ^alternativeBlock value! ! !LUnknown methodsFor: 'printing' stamp: 'apl 3/4/2005 14:17'! printOn: aStream aStream nextPutAll: 'false'! ! !LUnknown methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:17'! | aBoolean "Evaluating disjunction (OR) -- answer with the argument, aBoolean." ^aBoolean! ! !Logical class methodsFor: 'instance creation' stamp: 'apl 3/4/2005 14:05'! initializedInstance ^ nil! ! !Logical class methodsFor: 'instance creation' stamp: 'apl 3/4/2005 14:19'! new self error: 'You may not create any more Logical - this is three-valued logic'! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/6/2005 21:38'! & aLogical "Evaluating conjunction. Evaluate the argument. Then answer true if both the receiver and the argument are true." self subclassResponsibility! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:05'! ==> aBlock "this is material implication, a ==> b, also known as: b if a a implies b if a then b b is a consequence of a a therefore b (but note: 'it is raining therefore it is cloudy' is implication; 'it is autumn therefore the leaves are falling' is equivalence). Here is the truth table for material implication (view in a monospaced font): p | q | p ==> q -------|-------|------------- T | T | T T | F | F F | T | T F | F | T " ^self not or: [aBlock value]! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! and: alternativeBlock "Nonevaluating conjunction. If the receiver is true, answer the value of the argument, alternativeBlock; otherwise answer false without evaluating the argument." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! and: block1 and: block2 "Nonevaluating conjunction without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as false, then return false immediately, without evaluating any further blocks. If all return true, then return true." self ifFalse: [^ false]. block1 value ifFalse: [^ false]. block2 value ifFalse: [^ false]. ^ true! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! and: block1 and: block2 and: block3 "Nonevaluating conjunction without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as false, then return false immediately, without evaluating any further blocks. If all return true, then return true." self ifFalse: [^ false]. block1 value ifFalse: [^ false]. block2 value ifFalse: [^ false]. block3 value ifFalse: [^ false]. ^ true! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! and: block1 and: block2 and: block3 and: block4 "Nonevaluating conjunction without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as false, then return false immediately, without evaluating any further blocks. If all return true, then return true." self ifFalse: [^ false]. block1 value ifFalse: [^ false]. block2 value ifFalse: [^ false]. block3 value ifFalse: [^ false]. block4 value ifFalse: [^ false]. ^ true! ! !Logical methodsFor: 'printing' stamp: 'apl 3/6/2005 21:45'! basicType "Answer a symbol representing the inherent type of the receiver" ^ #Logical! ! !Logical methodsFor: 'copying' stamp: 'apl 3/4/2005 14:05'! clone "Receiver has two concrete subclasses, True and False. Only one instance of each should be made, so return self."! ! !Logical methodsFor: 'copying' stamp: 'apl 3/4/2005 14:05'! deepCopy "Receiver has two concrete subclasses, True and False. Only one instance of each should be made, so return self."! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/6/2005 21:39'! eqv: aLogical "Answer true if the receiver is equivalent to aBoolean." ^ self == aLogical! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! ifFalse: alternativeBlock "If the receiver is true (i.e., the condition is true), then the value is the true alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock "Same as ifTrue:ifFalse:." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/6/2005 21:47'! ifFalse: falseAlternativeBlock ifTrue: trueAlternativeBlock ifUnknown: unknownAlternativeBlock "Same as ifTrue:ifFalse:." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! ifTrue: alternativeBlock "If the receiver is false (i.e., the condition is false), then the value is the false alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock "If the receiver is true (i.e., the condition is true), then answer the value of the argument trueAlternativeBlock. If the receiver is false, answer the result of evaluating the argument falseAlternativeBlock. If the receiver is a nonBoolean then create an error notification. Execution does not actually reach here because the expression is compiled in-line." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/6/2005 21:46'! ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock ifUnknown: unknownAlternativeBlock "If the receiver is true (i.e., the condition is true), then answer the value of the argument trueAlternativeBlock. If the receiver is false, answer the result of evaluating the argument falseAlternativeBlock. If the receiver is a nonBoolean then create an error notification. Execution does not actually reach here because the expression is compiled in-line." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/6/2005 21:46'! ifUnknown: alternativeBlock "If the receiver is true (i.e., the condition is true), then the value is the true alternative, which is nil. Otherwise answer the result of evaluating the argument, alternativeBlock. Create an error notification if the receiver is nonBoolean. Execution does not actually reach here because the expression is compiled in-line." self subclassResponsibility! ! !Logical methodsFor: 'misc' stamp: 'apl 3/4/2005 14:05'! newTileMorphRepresentative ^ TileMorph new addArrows; setLiteral: self ! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/4/2005 14:05'! not "Negation. Answer true if the receiver is false, answer false if the receiver is true." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! or: alternativeBlock "Nonevaluating disjunction. If the receiver is false, answer the value of the argument, alternativeBlock; otherwise answer true without evaluating the argument." self subclassResponsibility! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! or: block1 or: block2 "Nonevaluating alternation without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as true, then return true immediately, without evaluating any further blocks. If all return false, then return false." self ifTrue: [^ true]. block1 value ifTrue: [^ true]. block2 value ifTrue: [^ true]. ^ false! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! or: block1 or: block2 or: block3 "Nonevaluating alternation without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as true, then return true immediately, without evaluating any further blocks. If all return false, then return false." self ifTrue: [^ true]. block1 value ifTrue: [^ true]. block2 value ifTrue: [^ true]. block3 value ifTrue: [^ true]. ^ false! ! !Logical methodsFor: 'controlling' stamp: 'apl 3/4/2005 14:05'! or: block1 or: block2 or: block3 or: block4 "Nonevaluating alternation without deep nesting. The receiver is evaluated, followed by the blocks in order. If any of these evaluates as true, then return true immediately, without evaluating any further blocks. If all return false, then return false." self ifTrue: [^ true]. block1 value ifTrue: [^ true]. block2 value ifTrue: [^ true]. block3 value ifTrue: [^ true]. block4 value ifTrue: [^ true]. ^ false! ! !Logical methodsFor: 'copying' stamp: 'apl 3/4/2005 14:05'! shallowCopy "Receiver has two concrete subclasses, True and False. Only one instance of each should be made, so return self."! ! !Logical methodsFor: 'printing-sixx' stamp: 'apl 3/4/2005 14:05'! sixxContentOn: aStream indent: level context: dictionary aStream nextPutAll: self storeString! ! !Logical methodsFor: 'printing' stamp: 'apl 3/4/2005 14:05'! storeOn: aStream "Refer to the comment in Object|storeOn:." self printOn: aStream! ! !Logical methodsFor: 'copying' stamp: 'apl 3/4/2005 14:05'! veryDeepCopyWith: deepCopier "Return self. I can't be copied. Do not record me."! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/6/2005 21:39'! xor: aLogical "Exclusive OR. Answer true if the receiver is not equivalent to aBoolean." ^ (self == aLogical) not! ! !Logical methodsFor: 'logical operations' stamp: 'apl 3/6/2005 21:39'! | aLogical "Evaluating disjunction (OR). Evaluate the argument. Then answer true if either the receiver or the argument is true." self subclassResponsibility! ! !PlatypusExpressWrapper class methodsFor: 'instance creation' stamp: 'apl 3/12/2004 17:51'! linked: anExpressReference ^ self new linked: anExpressReference owner: nil ! ! !PlatypusExpressWrapper class methodsFor: 'instance creation' stamp: 'apl 3/12/2004 17:46'! linked: anExpressReference owner: anotherExpressReference ^ self new linked: anExpressReference owner: anotherExpressReference ! ! !PlatypusExpressWrapper methodsFor: 'visiting' stamp: 'apl 3/15/2004 10:46'! accept: aVisitor ^ self linked accept: aVisitor ! ! !PlatypusExpressWrapper methodsFor: 'visiting' stamp: 'AlainPlantec 5/8/2012 20:29'! acceptTry: aVisitor ^ self linkedMetaData ifNotNil: [ self linkedMetaData acceptTry: aVisitor ] ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 20:05'! asStringOrText ^ self linked asStringOrText ! ! !PlatypusExpressWrapper methodsFor: 'error handling' stamp: 'AlainPlantec 5/12/2012 16:51'! doesNotUnderstand: aMessage ^ wrapped perform: aMessage selector withArguments: aMessage arguments ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 20:05'! fullCodeString ^ self linked fullCodeString ! ! !PlatypusExpressWrapper methodsFor: 'testing' stamp: 'apl 3/15/2004 10:54'! isLink ^ true ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'apl 4/7/2006 14:17'! linked ^ wrapped ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'apl 4/7/2006 14:17'! linked: anObject wrapped := anObject ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'apl 3/12/2004 17:47'! linked: anExpressReference owner: anotherExpressReference self linked: anExpressReference . self owner: anotherExpressReference ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 6/4/2012 17:36'! linkedMetaData ^ self linked metaData ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'apl 3/12/2004 17:45'! owner ^ owner ! ! !PlatypusExpressWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 6/13/2012 13:37'! owner: anObject owner := anObject ! ! !PlatypusVisitorErrorWrapper class methodsFor: 'instance creation' stamp: 'apl 4/18/2006 08:48'! wrapped: aStepError ^ self new wrapped: aStepError! ! !PlatypusVisitorErrorWrapper methodsFor: 'converting' stamp: 'apl 4/18/2006 08:49'! asString ^ wrapped asString! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'AlainPlantec 6/14/2012 01:50'! icon | found p | p := self path. p ifNil: [^ nil ]. found := p reversed detect: [:elem | (elem respondsTo: #tamarisItemRef) and: [elem tamarisItemRef notNil]] ifNone: [^ nil]. ^ found tamarisItemRef icon! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 4/18/2006 09:37'! message ^ wrapped message! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 4/18/2006 09:39'! metaData ^ wrapped metaData ! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 4/18/2006 09:36'! path ^ wrapped path! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 9/19/2007 11:37'! selectingFrom: aHierarchicalList | editor firstIndex elem | editor := aHierarchicalList clientModel. (firstIndex := self path indexOf: editor sourceHandler metaData) > 0 ifTrue: [editor selectionInterval: (1 to: 0). editor selectCode: ''. editor codeSelectionInterval: (self path at: firstIndex) selectionString startingAt: 1. firstIndex + 1 to: self path size do: [:pos | elem := self path at: pos. editor selectCode: elem selectionString startingAt: editor selectionInterval first. editor selectionInterval: editor selectionInterval]]! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 4/18/2006 09:38'! unSelectingFrom: aHierarchicalList | editor | editor := aHierarchicalList clientModel. editor selectFrom: editor selectionInterval first to: editor selectionInterval first - 1! ! !PlatypusVisitorErrorWrapper methodsFor: 'accessing' stamp: 'apl 4/18/2006 08:57'! wrapped: aStepError wrapped := aStepError! ! !TamManager class methodsFor: '*sqplatypus-hw-accessing' stamp: 'apl 1/4/2006 14:21'! platypusMetaDefaultTaxon ^ TamManagerItem platypusMetaDefaultTaxon! ! !PlatypusEditingState methodsFor: 'chooser' stamp: 'AlainPlantec 5/13/2012 01:25'! chosenSelector: aSelector for: aTextMorph | newStart replacement caret prevSelection | self closeSelectorChooser. aSelector ifNil: [^ self]. aTextMorph editor selectPrecedingIdentifier. prevSelection := aTextMorph selection. newStart := aTextMorph editor startIndex. caret := aTextMorph editor stopIndex. replacement := aTextMorph replacementFor: aSelector. replacement ifNil: [^self]. replacement := String cr, replacement. self replaceAtEnd ifTrue: [ caret := aTextMorph editor string size + 1 + replacement size. aTextMorph selectFrom: caret to: caret - 1.] ifFalse: [caret := newStart + replacement size]. prevSelection asString = replacement trimBoth ifTrue: [aTextMorph flash] ifFalse: [aTextMorph replaceSelectionWith: replacement]. aTextMorph editor selectFrom: caret to: caret - 1. (aTextMorph respondsTo: #editView) ifTrue: [aTextMorph editView model contentsMorph setSelection: aTextMorph editor selectionInterval]. replaceAtEnd := nil ! ! !PlatypusEditingState methodsFor: 'chooser' stamp: 'AlainPlantec 5/12/2012 11:21'! closeSelectorChooser selectorChooser ifNotNil: [ [selectorChooser delete] ensure: [selectorChooser := nil] ]! ! !PlatypusEditingState methodsFor: 'events' stamp: 'AlainPlantec 5/12/2012 11:21'! focused: aBoolean from: aTextMorph super focused: aBoolean from: aTextMorph. selectorChooser ifNotNil: [selectorChooser comeToFront]! ! !PlatypusEditingState methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 00:45'! forceReplaceAtEnd replaceAtEnd := true! ! !PlatypusEditingState methodsFor: 'events' stamp: 'AlainPlantec 5/12/2012 11:21'! handlesKeyboard: evt from: aTextMorph ^ (super handlesKeyboard: evt from: aTextMorph) or: [selectorChooser notNil and: [selectorChooser handlesKeyboard: evt]]! ! !PlatypusEditingState methodsFor: 'events' stamp: 'AlainPlantec 5/12/2012 19:53'! keystroke: aKeyboardEvent from: aTextMorph | asciiValue | selectorChooser ifNotNil: [(selectorChooser handlesKeyboard: aKeyboardEvent) ifTrue: [selectorChooser keyStroke: aKeyboardEvent. ^ true]]. asciiValue := aKeyboardEvent keyValue. asciiValue = Character cr asciiValue ifTrue: [self closeSelectorChooser. ^ true]. aKeyboardEvent controlKeyPressed ifTrue: [self closeSelectorChooser. ^ true]. "aKeyboardEvent commandKeyPressed ifTrue: [self closeSelectorChooser. ^ true]." self updateSelectorChooserFrom: aTextMorph. ^ false! ! !PlatypusEditingState methodsFor: 'events' stamp: 'AlainPlantec 5/12/2012 11:21'! mouseDown: anEvent from: aTextMorph super mouseDown: anEvent from: aTextMorph. self closeSelectorChooser! ! !PlatypusEditingState methodsFor: 'chooser' stamp: 'AlainPlantec 5/12/2012 16:18'! querySymbolFrom: aTextMorph | sel pref caret nextPref | sel := aTextMorph editor selectionInterval. aTextMorph editor hasSelection ifFalse: [aTextMorph editor selectPrecedingIdentifier]. pref := String streamContents: [:strm | aTextMorph selection asString trimBoth do: [:c | c isSeparator ifFalse: [strm nextPut: c]]]. selectorChooser := PlatypusStepChooserMorph popUpPrefix: pref from: aTextMorph. ! ! !PlatypusEditingState methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 00:47'! replaceAtEnd ^ replaceAtEnd ifNil: [replaceAtEnd := false]! ! !PlatypusEditingState methodsFor: 'chooser' stamp: 'AlainPlantec 5/12/2012 11:21'! selectorChooser ^ selectorChooser! ! !PlatypusEditingState methodsFor: 'chooser' stamp: 'AlainPlantec 5/12/2012 11:21'! updateSelectorChooserFrom: aTextMorph selectorChooser ifNil: [^ self]. self closeSelectorChooser. self querySymbolFrom: aTextMorph! ! !PlatypusCodeStream methodsFor: 'data get/put' stamp: 'apl 3/30/2006 14:29'! nextPutAll: aCollection endingAt: aPosition "Optimized access to get around Text at:Put: overhead" | n | n := aCollection size min: aPosition. position + n > writeLimit ifTrue: [self growTo: position + n + 10]. collection replaceFrom: position + 1 to: position + n with: aCollection startingAt: 1. position := position + n! ! !PlatypusCodeStream methodsFor: 'color/style' stamp: 'apl 4/6/2006 20:23'! tokensStyleMap "Answer the map to use to determine colors and styles" | colorAndEmphasis | ^ tokensStyleMap ifNil: [tokensStyleMap := Dictionary new. #(#(#PlatypusIdentifierToken #()) #(#PlatypusPrimaryElementIdentifierToken #(#(#blue) #(#bold))) #(#PlatypusExpressNativeAlgorithmToken #(#red #(#bold))) #(#PlatypusLiteralToken #()) #(#PlatypusNumberToken #()) #(#PlatypusRemarkToken #(#brown #())) #(#PlatypusBuiltinProcedureToken #()) #(#PlatypusKeywordToken #()) #(#PlatypusBuiltinFunctionToken #()) #(#PlatypusOpenDelimToken #()) #(#PlatypusSemicolonToken #()) #(#PlatypusAssignToken #()) #(#PlatypusEolToken #()) #(#PlatypusWhiteSpaceToken #()) #(#PlatypusOperatorToken #()) #(#PlatypusLogicalToken #()) #(#PlatypusOneWhiteSpaceToken #()) #(#PlatypusStringToken #(#(#black) #(#bold))) #(#PlatypusIndentToken #()) #(#PlatypusCloseKeywordToken #()) #(#PlatypusCloseDelimToken #()) #(#PlatypusTailRemarkToken #(#brown #())) #(#PlatypusGroupKeywordToken #()) #(#PlatypusBuiltinDomainToken #()) #(#PlatypusEmbeddedRemarkToken #(#brown #())) #(#PlatypusDelimToken #()) #(#PlatypusOpenKeywordToken #()) #(#PlatypusPrimaryElementOpenKeywordToken #(#(#blue #muchDarker ) #(#bold))) #(#PlatypusPrimaryElementCloseKeywordToken #(#(#blue #muchDarker) #(#bold))) #(#PlatypusUnresolvedReferenceToken #(#(#red) #(#bold))) ) do: [:couple | | cls | (cls := Smalltalk at: (couple at: 1) ifAbsent: []) ifNotNil: [(couple at: 2) ifNotEmpty: [:colorSymbolAndEmphasis | colorAndEmphasis := WriteStream on: (Array new: 3). colorAndEmphasis nextPut: (TextColor color: (Color colorFrom: colorSymbolAndEmphasis first)). colorAndEmphasis nextPutAll: (colorSymbolAndEmphasis second collect: [:emph | TextEmphasis perform: emph]). tokensStyleMap at: cls put: colorAndEmphasis contents]]]. tokensStyleMap]! ! !PlatypusCodeStream methodsFor: 'color/style' stamp: 'apl 3/30/2006 11:36'! withColor: color emphasis: emphasisSymbol do: aBlock "Evaluate the given block with the given color and style text attribute" | attributes | attributes := WriteStream on: (Array new: 3). attributes nextPut: (TextColor color: color). emphasisSymbol do: [:e | attributes nextPut: (TextEmphasis perform: e)]. ^ self withAttributes: attributes contents do: aBlock! ! !PlatypusCodeStream methodsFor: 'color/style' stamp: 'apl 3/30/2006 09:32'! withStyleFor: aClass do: aBlock "Evaluate aBlock with appropriate emphasis and color for the given element" | colorsAndStylesMap | (colorsAndStylesMap := self tokensStyleMap) ifNil: [^ aBlock value]. ^ self withStyleInfo: (colorsAndStylesMap at: aClass ifAbsent: [#()]) do: aBlock! ! !PlatypusCodeStream methodsFor: 'color/style' stamp: 'apl 3/30/2006 11:54'! withStyleInfo: colorAndStyle do: aBlock "Evaluate aBlock with appropriate emphasis and color for the given element" ^ colorAndStyle ifNotEmpty: [:cas | self withAttributes: cas do: aBlock] ifEmpty: [aBlock value].! ! !PlatypusStepEditor class methodsFor: 'class initialization' stamp: 'AlainPlantec 5/11/2012 23:33'! initialize "Initialize the keyboard shortcut maps and the shared buffers for copying text across views and managing again and undo." " self initialize " self initializeCmdKeyShortcuts. self initializeShiftCmdKeyShortcuts. ! ! !PlatypusStepEditor class methodsFor: 'keyboard shortcut tables' stamp: 'AlainPlantec 5/12/2012 16:23'! initializeCmdKeyShortcuts "Initialize the (unshifted) command-key (or alt-key) shortcut table." " self initialize " | cmds | self initializeBasicCmdKeyShortcuts. '0123456789-=' do: [:char | cmdActions at: char asciiValue + 1 put: #changeEmphasis:]. cmds := #($k #offerFontMenu: $u #align: $q #querySymbol: ). 1 to: cmds size by: 2 do: [:i | self cmdActions at: (cmds at: i) asciiValue + 1 put: (cmds at: i + 1)]! ! !PlatypusStepEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 11:23'! editingStateClass ^ PlatypusEditingState! ! !PlatypusStepEditor methodsFor: 'typing/selecting keys' stamp: 'AlainPlantec 5/12/2012 16:20'! querySymbol: aKeyboardEvent "Invoked by Ctrl-q to query the Symbol table and display alternate symbols. See comment in completeSymbol:lastOffering: for details." self closeTypeIn. self editingState closeSelectorChooser. self editingState querySymbolFrom: morph. ^true! ! !PlatypusStepEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:32'! schemaInstance ^ self model schemaInstance! ! !PlatypusStepEditor methodsFor: 'new selection' stamp: 'AlainPlantec 5/12/2012 16:24'! selectPrecedingIdentifier "Invisibly select the identifier that ends at the end of the selection, if any." | string sep stop tok | tok := false. string := self string. stop := self stopIndex - 1. [stop > 0 and: [(string at: stop) isSeparator]] whileTrue: [stop := stop - 1]. sep := stop. [sep > 0 and: [(string at: sep) tokenish]] whileTrue: [tok := true. sep := sep - 1]. tok ifTrue: [self selectInvisiblyFrom: sep + 1 to: stop]! ! !PlatypusStepCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:41'! accessibleSchemata ^ self sourceHandler accessibleSchemata ! ! !PlatypusStepCodeMorph methodsFor: 'private' stamp: 'AlainPlantec 5/13/2012 00:49'! querySymbol | ed caret | ed := self textMorph editor. ed editingState forceReplaceAtEnd. ed querySymbol: nil ! ! !PlatypusStepCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:44'! replacementFor: aString ^ self model replacementFor: aString! ! !PlatypusStepCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:30'! schemaInstance ^ self sourceHandler schemaInstance! ! !PlatypusStepCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:35'! schemata ^ self sourceHandler schemata! ! !PlatypusStepCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:11'! sourceHandler ^ self model sourceHandler! ! !PlatypusStepCodeMorph methodsFor: 'private' stamp: 'AlainPlantec 5/11/2012 23:27'! textMorphClass "Answer the class used to create the receiver's textMorph" ^PlatypusTextMorphForEditView ! ! !PlatypusCodeHolder class methodsFor: 'instance creation' stamp: 'AlainPlantec 5/20/2012 09:40'! openWithSourceHandler: aSourceHandler windowLabel: aLabel | window codeHolder | codeHolder := self sourceHandler: aSourceHandler. window := codeHolder asMorph. window setLabel: aLabel. window openInWorld. ^ codeHolder! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:54'! addButtons codeButtons := TamButtonsAlignmentMorph newRow. codeButtons vResizing: #shrinkWrap. codeBtnRow addMorph: codeButtons. self addButtonsinAlignment: codeButtons. ! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 12:06'! addButtonsinAlignment: aButtonsAlignment ! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'apl 3/23/2006 14:30'! buildMainWindow mainWindow := super buildMainWindow. codeBtnRow := TamButtonsAlignmentMorph typicalRowOwner. messagesBrowser := TamGenericHierarchicalList new. messagesBrowser clientModel: self. mainPane addMorph: codeBtnRow fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ codeBtnRowHeight)). self addButtons. codeBtnRow minimumExtent: 1 @ 1. ^ mainWindow! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'apl 2/15/2006 21:57'! buildTamarisWindow mainWindow := super buildMainWindow. codeBtnRow := TamButtonsAlignmentMorph typicalRowOwner. messagesBrowser := TamGenericHierarchicalList new. messagesBrowser clientModel: self. mainPane addMorph: codeRow fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). ^ mainWindow! ! !PlatypusCodeHolder methodsFor: 'accessing' stamp: 'apl 11/8/2003 15:15'! codeButtons ^ codeButtons! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'apl 6/23/2004 18:00'! codeRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ codeBtnRowHeight corner: 0 @ 0)! ! !PlatypusCodeHolder methodsFor: 'code accessing' stamp: 'AlainPlantec 12/5/2013 09:28'! contents: aText Cursor wait showWhile: [ ^ super contents: aText "(self highlight: aText)" ]! ! !PlatypusCodeHolder methodsFor: 'initialize/release' stamp: 'apl 3/22/2007 10:52'! destroy codeButtons ifNotNil: [codeButtons destroy. codeButtons := nil]. codeBtnRow ifNotNil: [codeBtnRow delete. codeBtnRow := nil]. messagesBrowserRow ifNotNil: [messagesBrowserRow delete. messagesBrowserRow := nil]. messagesBrowser ifNotNil: [messagesBrowser destroy. messagesBrowser := nil]. messagesBrowserLayoutFrame ifNotNil: [messagesBrowserLayoutFrame destroy. messagesBrowserLayoutFrame := nil]. super destroy! ! !PlatypusCodeHolder methodsFor: 'code accessing' stamp: 'apl 4/29/2008 14:01'! getFullText self acceptContents: self codeText. self changed: #contents! ! !PlatypusCodeHolder methodsFor: 'ui updating' stamp: 'apl 2/21/2006 14:45'! hideMessagesBrowser messagesBrowserRow ifNotNil: [(messagesBrowserLayoutFrame := messagesBrowserRow layoutFrame) ifNotNil: [self messageBrowserRowTopRow layoutFrame bottomFraction: messagesBrowserLayoutFrame bottomFraction. self messageBrowserRowTopRow layoutFrame bottomOffset: messagesBrowserLayoutFrame bottomOffset]. messagesBrowserRow delete. errorSplitter ifNotNil: [errorSplitter delete. errorSplitter := nil]. messagesBrowserRow := nil. mainPane updatePanesFromSubmorphs]! ! !PlatypusCodeHolder methodsFor: 'ui updating' stamp: 'apl 2/17/2006 10:54'! hideOrShowMessageBrowser | rootsMessages | self messagesBrowser ifNotNil: [((rootsMessages := self messagesBrowser rootListItems) isNil or: [rootsMessages isEmpty]) ifTrue: [self hideMessagesBrowser] ifFalse: [self showMessagesBrowser]]. self changed: #hideOrShowMessageBrowser! ! !PlatypusCodeHolder methodsFor: 'initialize/release' stamp: 'AlainPlantec 10/14/2010 21:50'! initialize super initialize. codeBtnRowHeight := Tamaris buttonExtent y + 8. messagesBrowserHeight := 65! ! !PlatypusCodeHolder methodsFor: 'accessing' stamp: 'AlainPlantec 5/11/2012 09:27'! isCodeCompletionAllowed ^ false! ! !PlatypusCodeHolder methodsFor: 'ui updating' stamp: 'apl 2/21/2006 14:44'! messageBrowserRowTopRow ^ codeRow! ! !PlatypusCodeHolder methodsFor: 'accessing' stamp: 'apl 11/8/2003 15:15'! messagesBrowser ^ messagesBrowser! ! !PlatypusCodeHolder methodsFor: 'ui building' stamp: 'apl 2/15/2006 21:30'! messagesBrowserLayoutFrame ^ messagesBrowserLayoutFrame ifNil: [messagesBrowserLayoutFrame := LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ (messagesBrowserHeight ) negated corner: 0 @ 0)]! ! !PlatypusCodeHolder methodsFor: 'menu' stamp: 'AlainPlantec 1/28/2011 14:22'! openFile | result | result := Tamaris chooseFilePathMatching: #('*.exp') label: 'Choose EXPRESS file to read' translated. result ifNotNil: [ | strm | [contents := (strm := StandardFileStream oldFileNamed: result) contentsOfEntireFile ] ensure: [strm close]. self acceptContents: contents. self changed: #contents. self hasUnacceptedEdits: true]! ! !PlatypusCodeHolder methodsFor: 'ui updating' stamp: 'apl 2/21/2006 14:46'! showMessagesBrowser messagesBrowserRow ifNil: [messagesBrowserRow := TamListItemReferenceUtil subWindowClass model: self. messagesBrowser buildWindow: messagesBrowserRow. mainPane ifNotNil: [mainPane addMorph: messagesBrowserRow fullFrame: self messagesBrowserLayoutFrame. self messageBrowserRowTopRow layoutFrame bottomFraction: messagesBrowserRow layoutFrame topFraction. self messageBrowserRowTopRow layoutFrame bottomOffset: messagesBrowserRow layoutFrame topOffset - TamListItemReferenceUtil subFrameBorderDelta. mainPane addPaneHSplitterBetween: self messageBrowserRowTopRow and: {messagesBrowserRow}. errorSplitter := mainPane submorphs first. mainPane updatePanesFromSubmorphs. mainPane layoutChanged]]! ! !PlatypusCodeHolder methodsFor: 'accessing' stamp: 'apl 6/23/2004 18:25'! sourceHandlerSilently: anObject contents: aString super sourceHandlerSilently: anObject contents: aString. self updateMessagesBrowser! ! !PlatypusCodeHolder methodsFor: 'code updating' stamp: 'apl 11/8/2003 17:20'! updateCodePaneIfNeeded self codeButtons ifNotNil: [self codeButtons updateIfNeeded]! ! !PlatypusCodeHolder methodsFor: 'error handling' stamp: 'AlainPlantec 5/19/2012 23:43'! updateMessagesBrowser self messagesBrowser ifNotNil: [self messagesBrowser rootListItems: (self errors collect: [:err | TamGenericHierarchicalListItem linked: (PlatypusVisitorErrorWrapper wrapped: err)]). self hideOrShowMessageBrowser]! ! !PlatypusExpressDebugger class methodsFor: 'instance creation' stamp: 'AlainPlantec 10/7/2010 13:46'! interpretor: anInterpretor statementOrExpression: aMetaData | debugger | debugger := PlatypusExpressDebugger sourceHandler: anInterpretor currentSourceHandler. anInterpretor debugger: debugger. debugger interpreter: anInterpretor. debugger buildMainWindow openInWorld. debugger beforeAccepting: aMetaData. ! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/28/2006 09:39'! aboutToAccept: aMetaData | maybeNewSourceHandler | self beforeAccepting. overContextDataIndex isNil ifTrue: [currentInterpreterMetaData := aMetaData. (maybeNewSourceHandler := self getSelectedContext contextInstance referenced ownerTamarisItemRef) ifNotNil: [self sourceHandler ~= maybeNewSourceHandler ifTrue: [self sourceHandler: maybeNewSourceHandler. self selectionInterval: (1 to: 0). self selectCode: self sourceHandler metaData selectionString startingAt: 1]]. self selectCode. [currentInterpreterMetaData notNil] whileTrue: [mainWindow outermostWorldMorph doOneCycle]]. overContextDataIndex ifNotNil: [self contextsList size <= overContextDataIndex ifTrue: [overContextDataIndex := nil]]! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'AlainPlantec 10/16/2010 11:03'! addButtonsinAlignment: aButtonsAlignment | button | button := PluggableButtonMorph on: self getState: #canShowIntoButton action: #doInto label: #intoButtonLabel. button onColor: Color transparent offColor: Color transparent; borderWidth: 2; borderColor: #raised. aButtonsAlignment owner addMorphBack: button. "Proceed" button := PluggableButtonMorph on: self getState: #canShowProceedButton action: #doProceed label: #proceedButtonLabel. button onColor: Color transparent offColor: Color transparent; borderWidth: 2; borderColor: #raised. aButtonsAlignment owner addMorphBack: button. "Over" button := PluggableButtonMorph on: self getState: #canShowOverButton action: #doOver label: #overButtonLabel. button onColor: Color transparent offColor: Color transparent; borderWidth: 2; borderColor: #raised. aButtonsAlignment owner addMorphBack: button. super addButtonsinAlignment: aButtonsAlignment! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 9/26/2006 17:51'! beforeAccepting [self changed: #contextsList. self changedSelectedContextIndex: self contextsList size. self changed: #contextDataList. self changed: #stackDataList. self changed: #selfStackDataList. ] on: Error do: [:ex | Transcript show: self class name , '>>afterAccepting: "' , ex printString , ' "\ ' withCRs]! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'AlainPlantec 10/7/2010 13:46'! beforeAccepting: aMetaData currentInterpreterMetaData := aMetaData. self beforeAccepting! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 14:22'! buildMainWindow mainWindow := super buildMainWindow. debuggingContextRow := TamListItemReferenceUtil subWindowClass model: self. contextsListRow := TamListItemReferenceUtil subWindowClass model: self. selectedContextsAndStacksListRow := TamListItemReferenceUtil subWindowClass model: self. selectedContextDataRow := TamListItemReferenceUtil subWindowClass model: self. selectedContextValueRow := TamListItemReferenceUtil subWindowClass model: self. stackDataListRow := TamListItemReferenceUtil subWindowClass model: self. selfStackDataListRow := TamListItemReferenceUtil subWindowClass model: self. stacksRow := TamListItemReferenceUtil subWindowClass model: self. selectedContextsAndStacksListRow addMorph: selectedContextDataRow fullFrame: self selectedContextDataRowLayoutFrame. selectedContextsAndStacksListRow addMorph: selectedContextValueRow fullFrame: self selectedContextValueRowLayoutFrame. stacksRow addMorph: stackDataListRow fullFrame: self stackDataRowLayoutFrame. stacksRow addMorph: selfStackDataListRow fullFrame: self selfStackDataRowLayoutFrame. selectedContextsAndStacksListRow addMorph: stacksRow fullFrame: self stacksRowLayoutFrame. debuggingContextRow addMorph: contextsListRow fullFrame: self contextsListRowLayoutFrame. debuggingContextRow addMorph: selectedContextsAndStacksListRow fullFrame: self selectedContextsAndStacksLayoutFrame. mainPane addMorph: debuggingContextRow fullFrame: self debuggingContextRowLayoutFrame. mainPane addPaneHSplitterBetween: codeRow and: {debuggingContextRow}. debuggingContextRow addPaneHSplitterBetween: contextsListRow and: {selectedContextsAndStacksListRow}. stacksRow addPaneHSplitterBetween: stackDataListRow and: {selfStackDataListRow}. selectedContextsAndStacksListRow addPaneVSplitterBetween: selectedContextDataRow and: {selectedContextValueRow}. selectedContextsAndStacksListRow addPaneVSplitterBetween: selectedContextValueRow and: {stacksRow}. contextsListRow addMorph: self contextsListMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). selectedContextDataRow addMorph: self contextDataListMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). selectedContextValueRow addMorph: self selectedContextValueMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). selfStackDataListRow addMorph: self selfStackDataListMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). stackDataListRow addMorph: self stackDataListMorph fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). ^ mainWindow! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 21:27'! canShowIntoButton ^ currentInterpreterMetaData notNil! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 21:30'! canShowOverButton ^ currentInterpreterMetaData notNil! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 21:27'! canShowProceedButton ^ currentInterpreterMetaData notNil! ! !PlatypusExpressDebugger methodsFor: 'selected context data handling' stamp: 'apl 3/27/2006 18:38'! changedSelectedContextDataIndex: anInteger | | selectedContextDataIndex := anInteger. self changed: #selectedContextDataIndex. self changed: #selectedContextValueContents. selectedContextValueTextMorph update: #selectedContextValueContents. ! ! !PlatypusExpressDebugger methodsFor: 'contexts list handling' stamp: 'AlainPlantec 1/28/2011 11:25'! changedSelectedContextIndex: anInteger | maybeNewSourceHandler | anInteger > 0 ifFalse: [^self]. selectedContextIndex := anInteger. self changed: #selectedContextIndex. self changed: #contextDataList. self changedSelectedContextDataIndex: 0. (maybeNewSourceHandler := (self contextsList at: anInteger) contextInstance referenced ownerTamarisItemRef) ifNotNil: [self sourceHandler: maybeNewSourceHandler]. self selectCode! ! !PlatypusExpressDebugger methodsFor: 'self stack data handling' stamp: 'apl 2/20/2006 23:50'! changedSelfStackDataIndex: anInteger selfStackDataIndex := anInteger. self changed: #selfStackDataIndex. ! ! !PlatypusExpressDebugger methodsFor: 'satck data handling' stamp: 'apl 2/20/2006 22:34'! changedStackDataIndex: anInteger stackDataIndex := anInteger. self changed: #stackDataIndex. ! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 14:20'! codeRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ codeBtnRowHeight corner: 0 @ (self debuggingContextRowHight ) negated)! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 14:19'! contentsMorphLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)! ! !PlatypusExpressDebugger methodsFor: 'selected context data handling' stamp: 'apl 2/20/2006 19:53'! contextDataList | interprContext | selectedContextIndex > 0 ifFalse: [^#()]. interprContext := interpreter contextsStack at: selectedContextIndex. ^interprContext dataIndex keys asOrderedCollection collect: [:e | e name]! ! !PlatypusExpressDebugger methodsFor: 'selected context data handling' stamp: 'apl 2/20/2006 23:34'! contextDataListMorph ^ PluggableListMorph on: self list: #contextDataList selected: #selectedContextDataIndex changeSelected: #changedSelectedContextDataIndex: menu: nil keystroke: #arrowKey:from:! ! !PlatypusExpressDebugger methodsFor: 'contexts list handling' stamp: 'apl 2/20/2006 17:52'! contextsList ^ interpreter contextsStack! ! !PlatypusExpressDebugger methodsFor: 'contexts list handling' stamp: 'apl 2/20/2006 19:56'! contextsListMorph ^ PluggableListMorph on: self list: #contextsList selected: #selectedContextIndex changeSelected: #changedSelectedContextIndex:! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 13:56'! contextsListRowHight ^ 120! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 12:18'! contextsListRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ TamListItemReferenceUtil subFrameBorderDelta corner: 0 @ (TamListItemReferenceUtil subFrameBorderDelta + self contextsListRowHight) negated)! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 13:55'! debuggingContextRowHight ^ 200! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 12:35'! debuggingContextRowLayoutFrame ^ LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ (self debuggingContextRowHight) negated corner: 0 @ 0)! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 21:27'! doInto currentInterpreterMetaData := nil! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/28/2006 09:29'! doOver overContextDataIndex := selectedContextDataIndex. currentInterpreterMetaData := nil! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 21:27'! doProceed currentInterpreterMetaData := nil. interpreter debugger: nil. mainWindow delete! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 2/20/2006 17:21'! evaluate | metaData | sourceHandler ifNotNil: [metaData := self sourceHandler metaData. interpreter compute: (Array with: metaData) in: self doItContext to: self doItReceiver notifying: self ifFail: [] logged: false]! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 2/23/2006 22:11'! evaluate: aStream | metaData | sourceHandler ifNotNil: [metaData := self sourceHandler metaData. interpreter evaluate: aStream in: metaData to: nil notifying: self ifFail: []. self inform: 'Done']! ! !PlatypusExpressDebugger methodsFor: 'contexts list handling' stamp: 'apl 2/20/2006 19:57'! getSelectedContext ^ self selectedContextIndex = 0 ifFalse: [self contextsList at: self selectedContextIndex]! ! !PlatypusExpressDebugger methodsFor: 'selected context data handling' stamp: 'apl 2/20/2006 19:55'! getSelectedContextData self selectedContextDataIndex = 0 ifTrue: [^ nil]. ^ self contextDataList at: self selectedContextDataIndex! ! !PlatypusExpressDebugger methodsFor: 'initialize/release' stamp: 'apl 2/21/2006 11:04'! initialize super initialize. interpreter := PlatypusExpressInterpretor new debugger: self. prevSelectedContextIndex := 0.! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/27/2006 18:17'! interpreter: anInterpretor interpreter := anInterpretor! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 3/27/2006 21:26'! intoButtonLabel ^ 'Into'! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 14:47'! messageBrowserRowTopRow ^ debuggingContextRow! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 3/27/2006 21:30'! overButtonLabel ^ 'Over'! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 3/27/2006 21:26'! proceedButtonLabel ^ 'Proceed'! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 2/22/2006 12:21'! result ^ result! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 2/20/2006 17:02'! run sourceHandler ifNotNil: [ ] ! ! !PlatypusExpressDebugger methodsFor: 'debugging' stamp: 'apl 3/28/2006 20:22'! selectCode currentInterpreterMetaData ifNotNil: [self selectCode: currentInterpreterMetaData selectionString startingAt: self selectionInterval first. (currentInterpreterMetaData isPltStatement or: [currentInterpreterMetaData isPltContextDefinition]) ifTrue: [self selectionInterval: self selectionInterval. Transcript show: self selectionInterval printString , String cr]]! ! !PlatypusExpressDebugger methodsFor: 'selected context data handling' stamp: 'apl 2/20/2006 19:55'! selectedContextDataIndex ^ selectedContextDataIndex ifNil: [selectedContextDataIndex := 0]! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 12:47'! selectedContextDataRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 0.333 @ 1) offsets: (0 @ 0 corner: (TamListItemReferenceUtil subFrameBorderDelta negated) @ 0)! ! !PlatypusExpressDebugger methodsFor: 'contexts list handling' stamp: 'apl 2/20/2006 19:56'! selectedContextIndex ^ selectedContextIndex ifNil: [selectedContextIndex := 0]! ! !PlatypusExpressDebugger methodsFor: 'selected context value handling' stamp: 'apl 2/20/2006 19:44'! selectedContextValueContents | ident | ^ (ident := self getSelectedContextData) ifNil: [''] ifNotNil: [(self getSelectedContext dataNamed: ident) val asClearText]! ! !PlatypusExpressDebugger methodsFor: 'selected context value handling' stamp: 'apl 2/20/2006 20:04'! selectedContextValueContents: aStringOrText notifying: aRequestor selectedContextValueTextMorph acceptContents: aStringOrText! ! !PlatypusExpressDebugger methodsFor: 'selected context value handling' stamp: 'apl 2/20/2006 20:03'! selectedContextValueMorph ^ selectedContextValueTextMorph ifNil: [selectedContextValueTextMorph := TamTextMorph on: self text: #selectedContextValueContents accept: #selectedContextValueContents:notifying: readSelection: nil menu: nil]! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 12:48'! selectedContextValueRowLayoutFrame ^ LayoutFrame fractions: (0.333 @ 0 corner: 0.666 @ 1) offsets: (0 @ 0 corner: TamListItemReferenceUtil subFrameBorderDelta negated @ 0)! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 12:17'! selectedContextsAndStacksLayoutFrame ^ LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0 @ self contextsListRowHight negated corner: 0 @ 0)! ! !PlatypusExpressDebugger methodsFor: 'self stack data handling' stamp: 'apl 2/20/2006 22:56'! selfStackDataIndex ^ selfStackDataIndex ifNil: [selfStackDataIndex := 0]! ! !PlatypusExpressDebugger methodsFor: 'self stack data handling' stamp: 'apl 2/20/2006 23:48'! selfStackDataList ^ interpreter selfStack collect: [:s | s printableCode]! ! !PlatypusExpressDebugger methodsFor: 'self stack data handling' stamp: 'apl 2/20/2006 23:33'! selfStackDataListMorph ^ PluggableListMorph on: self list: #selfStackDataList selected: #selfStackDataIndex changeSelected: #changedSelfStackDataIndex: menu: nil keystroke: #arrowKey:from:! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 13:46'! selfStackDataRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0.5 corner: 1 @ 1) offsets: (0 @ TamListItemReferenceUtil subFrameBorderDelta corner: 0 @ 0)! ! !PlatypusExpressDebugger methodsFor: 'satck data handling' stamp: 'apl 2/20/2006 22:11'! stackDataIndex ^ stackDataIndex ifNil: [stackDataIndex := 0]! ! !PlatypusExpressDebugger methodsFor: 'satck data handling' stamp: 'apl 2/20/2006 22:12'! stackDataList ^ interpreter stack! ! !PlatypusExpressDebugger methodsFor: 'satck data handling' stamp: 'apl 2/20/2006 23:33'! stackDataListMorph ^ PluggableListMorph on: self list: #stackDataList selected: #stackDataIndex changeSelected: #changedStackDataIndex: menu: nil keystroke: #arrowKey:from:! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 13:45'! stackDataRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.5) offsets: (0 @ 0 corner: 0 @ 0)! ! !PlatypusExpressDebugger methodsFor: 'ui building' stamp: 'apl 2/21/2006 13:48'! stacksRowLayoutFrame ^ LayoutFrame fractions: (0.666 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)! ! !PlatypusExpressEditor class methodsFor: 'updating' stamp: 'apl 4/3/2006 17:13'! changed: anObject super changed: anObject! ! !PlatypusExpressEditor class methodsFor: 'accessing' stamp: 'apl 3/10/2004 00:09'! evaluatorClass ^ PlatypusExpressInterpretor! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/19/2012 23:50'! addButtonsinAlignment: aButtonsAlignment | btn | super addButtonsinAlignment: aButtonsAlignment. {{'32x32/actions/run'. self. #evaluate. 'evaluate it'. #showEvaluateButton}.{'16x16/actions/blue_ok'. self. #verify. 'compile current code'. #showChecksButton}. {'16x16/actions/ok'. self. #accept. 'accept current source'. #showAcceptButton}. {'16x16/actions/smiley'. self. #prettyPrintCode. 'pretty print'. #showPrettyPrintCodeButton}. {'16x16/actions/file_save'. self. #saveAs. 'fileout contents'}. {'16x16/actions/file_read'. self. #openFile. 'filein an Express file'}} do: [:arr | arr == #spacer ifTrue: [aButtonsAlignment addSpacer] ifFalse: [ | label | label := ImageMorph withForm: (TamIcons icon: arr first). btn := (UITheme current newButtonIn: World for: self getState: nil action: arr third arguments: { } getEnabled: (arr size >= 5 ifTrue: [arr fifth]) getLabel: nil help: arr fourth translated) label: label; yourself. aButtonsAlignment addMorph: btn]]! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'apl 2/20/2006 09:59'! contentsMorphLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)! ! !PlatypusExpressEditor methodsFor: 'evaluation' stamp: 'apl 2/20/2006 17:40'! debugIt | debugger | debugger := PlatypusExpressDebugger sourceHandler: self sourceHandler. debugger buildMainWindow openInWorld. debugger evaluate: (ReadStream on: (self codeText copyFrom: self selectionInterval first to: self selectionInterval last) asString)! ! !PlatypusExpressEditor methodsFor: 'evaluation' stamp: 'apl 3/19/2004 09:55'! doItContext ^ self sourceHandler metaData! ! !PlatypusExpressEditor methodsFor: 'evaluation' stamp: 'apl 3/21/2006 15:40'! doItReceiver ^ self ! ! !PlatypusExpressEditor methodsFor: 'code evaluating' stamp: 'apl 3/22/2004 15:22'! evaluate ^ self sourceHandler evaluate! ! !PlatypusExpressEditor methodsFor: 'code evaluating' stamp: 'apl 3/22/2004 15:23'! evaluateAndExplore ^ self sourceHandler evaluateAndExplore ! ! !PlatypusExpressEditor methodsFor: 'code accessing' stamp: 'AlainPlantec 12/9/2013 22:22'! highlight: aText | h | aText size > 0 ifTrue: [ ^ aText ]. self sourceHandler ifNil: [ ^ aText ]. h := (Smalltalk at: #PPTextHighlighter ifAbsent: [ ^ aText ]) new parser: (PPExpressGrammar new perform: self sourceHandler elementTag). h color: 'slotName' with: Color blue twiceDarker twiceDarker; color: 'localKW' with: Color blue muchDarker; color: 'endLocalKW' with: Color blue muchDarker; color: 'schemaKW' with: Color blue muchDarker; color: 'endSchemaKW' with: Color blue muchDarker; color: 'constantKW' with: Color blue muchDarker; color: 'endConstantKW' with: Color blue muchDarker; color: 'typeKW' with: Color blue muchDarker; color: 'endTypeKW' with: Color blue muchDarker; color: 'entityKW' with: Color blue muchDarker; color: 'endEntityKW' with: Color blue muchDarker; color: 'functionKW' with: Color blue muchDarker; color: 'endFunctionKW' with: Color blue muchDarker; color: 'procedureKW' with: Color blue muchDarker; color: 'endProcedureKW' with: Color blue muchDarker; color: 'ruleKW' with: Color blue muchDarker; color: 'endRuleKW' with: Color blue muchDarker; color: 'literal' with: Color gray darker darker; color: 'unresolvedIdentifier' with: Color magenta muchDarker; color: 'toKW' with: Color blue muchDarker; color: 'thenKW' with: Color blue muchDarker; color: 'elseKW' with: Color blue muchDarker; color: 'forKW' with: Color blue muchDarker. ^ [ h highlight: aText asText ] on: Error do: [ aText ]! ! !PlatypusExpressEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 19:46'! possibleReplacementsFromPrefix: aPrefix "returns the value of labels from a selector prefix" | key elements | elements := self sourceHandler bindings asSet. key := aPrefix asLowercase. ^ (aPrefix ifEmpty: [elements collect: [:e | e name]] ifNotEmpty: [(elements collect: [:e | e name]) select: [:n | n asLowercase beginsWith: key]]) asArray sort. ! ! !PlatypusExpressEditor methodsFor: 'pretty printing' stamp: 'apl 3/9/2006 12:40'! prettyPrint self prettyPrintCode! ! !PlatypusExpressEditor methodsFor: 'pretty printing' stamp: 'apl 2/15/2006 15:40'! prettyPrintCode | ppTokenList | self sourceHandler notNil ifTrue: [Cursor wait showWhile: [ppTokenList := (PlatypusExpressScanner on: self contentsMorph text readStream ) buildTokenList. ^ self prettyPrintTokenList: ppTokenList]]. ^ ''! ! !PlatypusExpressEditor methodsFor: 'pretty printing' stamp: 'apl 5/22/2006 23:00'! prettyPrintTokenList: aTokenList | code ppTokenList streamClass | Cursor wait showWhile: [streamClass := self sourceHandler codeStreamClassFor: aTokenList from: aTokenList first to: aTokenList last. ppTokenList := PlatypusStepTokenPrettyPrinter new prettyPrint: aTokenList from: aTokenList first to: aTokenList last startLevel: self sourceHandler startLevel font: self codeFont maxLineWidth: contentsMorph bounds width - 5. ppTokenList noEndingEol. code := ppTokenList textWithStreamClass: streamClass. self acceptContents: code. self changed: #contents. contentsMorph hasUnacceptedEdits: true. ^ code]! ! !PlatypusExpressEditor methodsFor: 'pretty printing' stamp: 'apl 3/9/2006 12:40'! prettyPrintWithColor self prettyPrintCode! ! !PlatypusExpressEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 19:24'! replacementFor: aString ^ aString! ! !PlatypusExpressEditor methodsFor: 'pretty printing' stamp: 'AlainPlantec 1/14/2013 18:05'! reversePrintCode | ppTokenList | self sourceHandler notNil ifTrue: [Cursor wait showWhile: [ppTokenList := PlatypusSchemaInstanceTokenizer singleton tokenize: self sourceHandler metaData. ^ self prettyPrintTokenList: ppTokenList]]. ^ ''! ! !PlatypusExpressEditor methodsFor: 'menu' stamp: 'apl 6/8/2004 00:11'! saveAs ^ self sourceHandler menuSaveAs! ! !PlatypusExpressEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:33'! schemaInstance ^ self sourceHandler schemaInstance! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/19/2012 23:35'! showAcceptButton ^ self sourceHandler notNil and: [self hasUnacceptedEdits]! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/19/2012 23:50'! showChecksButton ^ self sourceHandler notNil and: [self showAcceptButton not and: [self sourceHandler isEditable and: [self sourceHandler knownAsInvalid ]]]! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/23/2012 14:09'! showEvaluateButton ^ self sourceHandler notNil and: [self showAcceptButton not and: [self sourceHandler isEditable and: [self sourceHandler knownAsInvalid not and: [self sourceHandler metaData notNil and: [self sourceHandler metaData isPltStatementsContainer]]]]]! ! !PlatypusExpressEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 11:05'! showPrettyPrintCodeButton ^ self sourceHandler notNil and: [self sourceHandler isEditable]! ! !PlatypusExpressEditor methodsFor: 'code accessing' stamp: 'apl 2/9/2004 17:12'! text ^ self codeText ! ! !PlatypusExpressEditor methodsFor: 'evaluation' stamp: 'AlainPlantec 5/22/2012 10:11'! update: aSymbol self hasUnacceptedEdits ifTrue: [^ false]. (self sourceHandler isNil or: [self sourceHandler isReleased]) ifTrue: [self acceptContents: ''. self changed: #contents. ^ false]. ((aSymbol isKindOf: PlatypusListItemReference) and: [(aSymbol isInSubTreeOf: self sourceHandler) or: [self sourceHandler isInSubTreeOf: aSymbol]]) ifTrue: [self acceptContents: self codeText. self changed: #contents]. super update: aSymbol. aSymbol = #messagesBrowser ifTrue: [self updateMessagesBrowser]! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/22/2012 10:04'! addButtonsinAlignment: aButtonsAlignment | btn | super addButtonsinAlignment: aButtonsAlignment. {{'32x32/actions/run'. self. #evaluate. 'evaluate it'. #showEvaluateButton}. {'16x16/actions/p21_syntax'. self. #menuSwitchP21Syntax. 'switch between p21 and alternative syntax'. #showSwitchP21SyntaxButton}. {'16x16/actions/blue_ok'. self. #verify. 'compile current code'. #showChecksButton}. {'16x16/actions/ok'. self. #accept. 'accept current source'. #showAcceptButton}. {'16x16/actions/file_save'. self. #saveAs. 'save contents into a step file'. #showSaveButton}. {'16x16/actions/file_read'. self. #openFile. 'read a file'}} do: [:arr | arr == #spacer ifTrue: [aButtonsAlignment addSpacer] ifFalse: [ | label | label := ImageMorph withForm: (TamIcons icon: arr first). btn := (UITheme current newButtonIn: World for: arr second getState: nil action: arr third arguments: { } getEnabled: (arr size >= 5 ifTrue: [arr fifth]) getLabel: nil help: arr fourth translated) label: label; yourself. aButtonsAlignment addMorph: btn]]! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 13:37'! codeTextFromInstance: anInstance ^ String streamContents: [:strm | PlatypusModelContentsStepWriter new stream: strm modelContents: self modelContents instance: anInstance p21Syntax: self useP21Syntax annote: true]! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'AlainPlantec 5/13/2012 00:35'! contentsMenu: aMenu shifted: shifted | m | m := super contentsMenu: aMenu shifted: shifted. m addList: {#-. {'New instance (q)' translated. #querySymbol} }. ^ m ! ! !PlatypusInstanceEditor methodsFor: 'evaluation' stamp: 'apl 12/15/2003 11:51'! doItContext ^ self sourceHandler! ! !PlatypusInstanceEditor methodsFor: 'evaluation' stamp: 'apl 12/15/2003 11:51'! doItReceiver ^ self ! ! !PlatypusInstanceEditor methodsFor: 'evaluating' stamp: 'apl 6/8/2004 10:20'! evaluate ^ self sourceHandler evaluate! ! !PlatypusInstanceEditor methodsFor: 'code accessing' stamp: 'AlainPlantec 12/9/2013 22:23'! highlight: aText | h hcls | hcls := (Smalltalk at: #PPTextHighlighter ifAbsent: [ ^ aText ]). h := hcls new parser: ((PPStepGrammar new) perform: self sourceHandler elementTag). aText size < 100000 ifTrue: [ h color: 'typeAnnotation' with: Color gray muchDarker; color: 'entityName' with: Color magenta muchDarker; color: 'string' with: Color blue twiceDarker; color: 'boolean' with: Color blue muchDarker; color: 'enum' with: Color blue muchDarker; color: 'instRef' with: Color blue muchDarker; color: 'null' with: Color blue muchDarker; color: 'redefined' with: Color blue muchDarker]. ^ [h highlight: aText asText] on: Error do: [aText] ! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'AlainPlantec 1/28/2011 14:03'! menuStepWrite | stream result fullFilename | (self sourceHandler isKindOf: PlatypusModelContentsReference) ifTrue: [self sourceHandler menuStepWrite] ifFalse: [fullFilename := UITheme current fileSaveIn: World title: 'File name' extensions: #('step' ) path: ''. fullFilename ifNotNil: [[stream := (Filename named: fullFilename) writeStream. stream nextPutAll: (String readFrom: (ReadStream on: self contentsMorph getText asString))] ensure: [stream ifNotNil: [stream close]]]]! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'AlainPlantec 5/15/2012 22:13'! menuSwitchP21Syntax self swithP21Syntax. self acceptContents: self codeText. self changed: #contents! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:49'! modelContents ^ self sourceHandler modelContents ! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'AlainPlantec 4/26/2012 11:18'! openFile | result | result := Tamaris chooseFilePathMatching: #('*.step' '*.p21' '*.STEP' '*.P21') label: 'Choose a STEP file to read' translated. result ifNotNil: [ | strm | [contents := (strm := StandardFileStream oldFileNamed: result) contentsOfEntireFile ] ensure: [strm close]. self acceptContents: contents. self changed: #contents. self hasUnacceptedEdits: true]! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 01:23'! possibleReplacementsFromPrefix: aPrefix "returns the value of labels from a selector prefix" | names schemata entities key | schemata := self schemaInstance schemata. key := aPrefix asLowercase. entities := schemata inject: Set new into: [:c :e | c addAll: e entities; yourself]. names := entities collect: [:e | e name]. ^ (aPrefix ifEmpty: [names] ifNotEmpty: [(names select: [:n | n asLowercase beginsWith: key]) ifEmpty: [names]]) asArray sort.! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 13:37'! replacementFor: aString ^ (self schemaInstance lookUpEntityDefinitionBN: aString) ifNotNil: [:ent | | inst | inst := ent emptyInternalRepresentation. inst persistentLabel: self sourceHandler modelContentsReference newPersistentLabel. String streamContents: [:strm | PlatypusModelContentsStepWriter new stream: strm modelContents: self modelContents instance: inst p21Syntax: false annote: true. strm cr ] ]! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'apl 7/10/2004 16:44'! saveAs ^ self menuStepWrite! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:35'! schemaInstance ^ self sourceHandler schemaInstance ! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'AlainPlantec 10/15/2010 10:54'! showAcceptButton ^ self sourceHandler notNil and: [self sourceHandler modelContents notNil and: [self hasUnacceptedEdits]]! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'AlainPlantec 6/2/2012 09:49'! showChecksButton ^ self sourceHandler notNil and: [self showAcceptButton not and: [self sourceHandler notNil and: [self sourceHandler knownAsInvalid]]]! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 12:49'! showEvaluateButton ^( ((self sourceHandler notNil and: [self sourceHandler canEvaluate]) and: [self sourceHandler knownAsInvalid not])) and: [self showAcceptButton not]! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'apl 4/29/2008 14:03'! showSaveButton ^ (self sourceHandler isKindOf: PlatypusModelContentsReference)! ! !PlatypusInstanceEditor methodsFor: 'ui building' stamp: 'apl 6/15/2004 13:22'! showSwitchP21SyntaxButton ^ self sourceHandler notNil "and: [self sourceHandler value isValue not]"! ! !PlatypusInstanceEditor methodsFor: 'menu' stamp: 'apl 6/25/2004 12:25'! swithP21Syntax self useP21Syntax: self useP21Syntax not! ! !PlatypusInstanceEditor methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 10:11'! update: aSymbol | doUpdate | doUpdate := false. self hasUnacceptedEdits ifFalse: [(aSymbol isKindOf: PlatypusListItemReference) ifTrue: [self sourceHandler notNil ifTrue: [(self sourceHandler isReleased or: [(aSymbol includes: self sourceHandler) or: [self sourceHandler includes: aSymbol]]) ifTrue: [doUpdate := true]]]. aSymbol == #PlatypusDictionary ifTrue: [doUpdate := true]. doUpdate ifTrue: [self sourceHandler isReleased ifTrue: [sourceHandler := nil]. self acceptContents: self codeText. self changed: #contents]. super update: aSymbol]. self updateMessagesBrowser! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'apl 6/25/2004 12:30'! useP21Syntax ^ self sourceHandler useP21Syntax! ! !PlatypusInstanceEditor methodsFor: 'accessing' stamp: 'apl 6/25/2004 12:26'! useP21Syntax: aBoolean self sourceHandler useP21Syntax: aBoolean! ! !PlatypusCodeMorph class methodsFor: 'utilities' stamp: 'apl 6/23/2004 17:43'! cleanCommentsOf: aTextOrString | level loop prevChar inStream outputStream currentCharacter inComment | level := 1. inStream := ReadStream on: aTextOrString. outputStream := WriteStream on: String new. currentCharacter := inStream next. outputStream nextPut: currentCharacter. loop := inStream atEnd not. inComment := false. [loop] whileTrue: [inStream atEnd ifTrue: [loop := false] ifFalse: [prevChar := currentCharacter. currentCharacter := inStream next. (prevChar == $( and: [currentCharacter == $*]) ifTrue: [level == 1 ifTrue: [outputStream position: outputStream position - 1. outputStream nextPut: $ ]. level := level + 1. inComment := true] ifFalse: [(prevChar == $* and: [currentCharacter == $)]) ifTrue: [level := level - 1. level == 0 ifTrue: [loop := false]]]. inComment ifTrue: [outputStream nextPut: $ . level == 1 ifTrue: [inComment := false]] ifFalse: [outputStream nextPut: currentCharacter]]]. ^ outputStream contents! ! !PlatypusCodeMorph class methodsFor: 'utilities' stamp: 'apl 6/23/2004 17:43'! code: codeString match: aMatchString ^ self code: codeString match: aMatchString startingAt: 1"examples : TamCodeHolder code: 'dqsqsdqsdqsd l := l + 1 ; jmk jmlkjmlj' match: 'l+1;' TamCodeHolder code: 'l:=l+1;' match: 'l:=l+1;' TamCodeHolder code: ' l := l + 1 ; ' match: 'l:=l+1;' TamCodeHolder code: ' l+1;' match: 'l:=l+1;' TamCodeHolder code: ' l+1;' match: 'l+1' " ! ! !PlatypusCodeMorph class methodsFor: 'utilities' stamp: 'AlainPlantec 10/7/2010 13:43'! code: codeString match: aMatchString startingAt: firstPos | csize msize mpos cpos startCodePos stopCodePos cleanedCode cleanedMatchString | cleanedCode := codeString asString asUppercase. "self cleanCommentsOf:" cleanedMatchString := aMatchString asUppercase. "self cleanCommentsOf:" csize := cleanedCode size. msize := cleanedMatchString size. mpos := 1. cpos := firstPos. startCodePos := 0. stopCodePos := 0. [mpos <= msize and: [cpos <= csize]] whileTrue: ["(cleanedCode at: cpos) = $. ifTrue: [self halt]." ((cleanedCode at: cpos) = (cleanedMatchString at: mpos)) ifTrue: [startCodePos = 0 ifTrue: [startCodePos := cpos]. stopCodePos := cpos. mpos := mpos + 1. cpos := cpos + 1] ifFalse: [ mpos = 1 ifTrue: [cpos := cpos + 1]. mpos := 1. startCodePos := stopCodePos := 0]. [cpos < csize and: [(cleanedCode at: cpos) isSeparator]] whileTrue: [cpos := cpos + 1]]. ^ Array with: mpos > msize with: startCodePos with: stopCodePos! ! !PlatypusCodeMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 12/2/2010 17:47'! codeFont ^ StandardFonts codeFont! ! !PlatypusCodeMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 10/15/2010 13:21'! initialExtent ^ InitialExtent ifNil: [InitialExtent := 800@600]! ! !PlatypusCodeMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 13:43'! initialExtent: aPoint InitialExtent := aPoint! ! !PlatypusCodeMorph class methodsFor: 'message handling' stamp: 'apl 6/23/2004 17:43'! perform: selector orSendTo: otherTarget (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !PlatypusCodeMorph class methodsFor: 'instance creation' stamp: 'apl 6/23/2004 17:43'! sourceHandler: aSourceHandler ^ self new sourceHandler: aSourceHandler! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'apl 3/10/2005 11:15'! accept ^ contentsMorph accept! ! !PlatypusCodeMorph methodsFor: 'menu' stamp: 'apl 6/23/2004 17:43'! addModelItemsToWindowMenu: aMenu aMenu addLine. aMenu add: 'remember window size' target: self action: #rememberWindowSize! ! !PlatypusCodeMorph methodsFor: 'morphic wrapper' stamp: 'apl 6/23/2004 17:43'! asMorph ^ self buildMainWindow ! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 5/20/2012 12:25'! broadcastChanged ^ self sourceHandler ifNotNil: [:sh | sh treeHasChangedFrom: self]! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:29'! buildMainWindow mainWindow := (StandardWindow labelled: self labelString) model: self. mainPane := TamListItemReferenceUtil subWindowClass model: self. mainWindow addMorph: mainPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). codeRow := TamListItemReferenceUtil subWindowClass model: self. codeRow addMorph: self contentsMorph fullFrame: self contentsMorphLayoutFrame. mainPane addMorph: codeRow fullFrame: self codeRowLayoutFrame. mainPane extent: self initialExtent. ^ mainWindow! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'AlainPlantec 5/18/2012 13:29'! buildTamarisWindow mainWindow := (StandardWindow labelled: self labelString) model: self. mainPane := TamListItemReferenceUtil subWindowClass model: self. mainPane borderWidth: 0. mainWindow addMorph: mainPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)). codeRow := TamListItemReferenceUtil subWindowClass model: self. codeRow addMorph: self contentsMorph fullFrame: (self contentsMorphLayoutFrame ). codeRow borderWidth: 0. mainPane addMorph: codeRow fullFrame: self codeRowLayoutFrame. mainWindow extent: self initialExtent. ^ mainWindow! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'apl 3/20/2006 13:28'! canBeUpdated ^ mainWindow notNil and: [mainWindow owner notNil]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'apl 6/23/2004 17:43'! codeFont ^ self class codeFont! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 6/23/2004 17:43'! codeMatch: aMatchString ^ self class code: self contents string match: aMatchString! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 3/1/2005 16:01'! codeMatch: aMatchString startingAt: pointPos ^ self class code: self contents match: aMatchString startingAt: (pointPos > 0 ifTrue: [pointPos] ifFalse: [1])! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'apl 6/23/2004 17:56'! codeRowLayoutFrame ^ LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 3/23/2006 16:07'! codeSelectionInterval: aStringOrText startingAt: startPos | matchResult matchString | matchString := aStringOrText reject: [:c | c isSeparator]. (matchResult := self codeMatch: matchString startingAt: startPos) first ifTrue: [self selectionInterval: (matchResult second to: matchResult third)]. ^ matchResult first! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 3/30/2006 09:56'! codeString ^ self sourceHandler ifNil: [''] ifNotNil: [self sourceHandler codeString]! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'AlainPlantec 6/7/2012 10:46'! codeText ^ self sourceHandler ifNil: [''] ifNotNil: [self sourceHandler codeText] ! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 5/24/2012 00:37'! contents: input notifying: aRequestor "The retrieved information has changed and its source must now be updated. The information can be a variety of things, depending on the list selections. Answer the result of updating the source." (self sourceHandler isNil or: [self sourceHandler isReleased]) ifFalse: [ self sourceHandler verifyUsedModelsBeforeChecking ifFalse: [^ false]. (self sourceHandler accept: input notifying: aRequestor) ifTrue: [ self acceptContents: input. self updateMessagesBrowser. self broadcastChanged. ^ true]. ^ false]. contentsMorph flash. ^ false! ! !PlatypusCodeMorph methodsFor: 'menu' stamp: 'AlainPlantec 4/26/2012 09:36'! contentsMenu: aMenu shifted: shifted "Note that unless we override perform:orSendTo:, PluggableTextController will respond to all menu items in a text pane" | donorMenu | donorMenu := shifted ifTrue: [TextEditor shiftedYellowButtonMenu] ifFalse: [TextEditor yellowButtonMenu]. aMenu addAllFrom: donorMenu. ^ aMenu ! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'AlainPlantec 5/17/2012 22:43'! contentsMorph | txtClass | contentsMorph isNil ifTrue: [txtClass := PlatypusStepCodeMorph. contentsMorph := txtClass on: self text: #contents accept: #contents:notifying: readSelection: nil menu: #contentsMenu:shifted:]. ^ contentsMorph! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'apl 2/20/2006 09:37'! contentsMorphLayoutFrame ^(LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ 0 corner: 0 @ 0)).! ! !PlatypusCodeMorph methodsFor: 'initialize/release' stamp: 'apl 3/28/2006 21:48'! destroy self breakDependents. mainWindow ifNotNil: [mainWindow stopStepping. mainWindow submorphs do: [:sm | sm delete]. mainWindow := nil]. sourceHandler := nil. mainPane ifNotNil: [mainPane delete. mainPane := nil]. codeRow ifNotNil: [codeRow delete. codeRow := nil]. contentsMorph ifNotNil: [contentsMorph model: nil. contentsMorph delete. contentsMorph := nil]. contents := nil. super destroy! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 23:28'! errors | errs testste result | errs := self sourceHandler ifNil: [^ #()] ifNotNil: [self sourceHandler errors]. testste := Set new. result := OrderedCollection new. errs do: [:er | (testste includes: er asString) ifFalse: [testste add: er asString. result add: er]]. ^ result! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 5/18/2012 15:32'! forceUpdate self sourceHandler reinitializeLabelSilently. self contentsMorph hasUnacceptedEdits ifFalse: [TamBrowser reloadEditorFor: self sourceHandler]. "self acceptContents: self codeText. self updateMessagesBrowser. self changed: #contents"! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 5/17/2012 22:35'! forceUpdate: anAnnounce anAnnounce sourceHandler = self sourceHandler ifTrue: [self forceUpdate]! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'apl 6/23/2004 17:43'! hasUnacceptedEdits: aBoolean ^ contentsMorph hasUnacceptedEdits: aBoolean! ! !PlatypusCodeMorph methodsFor: 'ui building' stamp: 'apl 6/23/2004 17:43'! initialExtent ^ self class initialExtent! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'apl 6/16/2005 09:39'! keystrokeInContentsMorph ! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'apl 6/23/2004 17:43'! labelString ^ self sourceHandler notNil ifTrue: [self class name , ' on: ' , self sourceHandler labelString] ifFalse: [self class name]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'apl 6/23/2004 17:43'! mainWindow ^ mainWindow! ! !PlatypusCodeMorph methodsFor: 'error handling' stamp: 'AlainPlantec 5/18/2012 11:52'! notify: errorMessage at: location | repl | self contentsMorph selectFrom: location to: location - 1. self contentsMorph scrollSelectionIntoView. repl := Text string: errorMessage , '->' attribute: TextEmphasis bold. self contentsMorph replaceSelectionWith: repl. self contentsMorph setSelection: (location to: location + errorMessage size + 1). ! ! !PlatypusCodeMorph methodsFor: 'morphic wrapper' stamp: 'apl 6/23/2004 17:43'! openAsMorph ^ self asMorph openInWorld. ! ! !PlatypusCodeMorph methodsFor: 'message handling' stamp: 'apl 6/23/2004 17:43'! perform: selector orSendTo: otherTarget (self respondsTo: selector) ifTrue: [^ self perform: selector] ifFalse: [^ otherTarget perform: selector]! ! !PlatypusCodeMorph methodsFor: 'menu' stamp: 'apl 6/23/2004 17:43'! rememberWindowSize self class initialExtent: mainWindow bounds extent! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 6/23/2004 17:43'! selectCode: aStringOrText ^ self selectCode: aStringOrText startingAt: 1 ! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'AlainPlantec 10/7/2010 13:42'! selectCode: aStringOrText startingAt: startPos | matchResult matchString | matchString := aStringOrText reject: [:c | c isSeparator]. (matchResult := self codeMatch: matchString startingAt: startPos) first ifTrue: [self selectFrom: matchResult second to: matchResult third]. ^ matchResult first ! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 6/23/2004 17:43'! selectCodeFromPoint: aStringOrText | | ^ self selectCode: aStringOrText startingAt: self selectionInterval first ! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'AlainPlantec 12/2/2010 18:17'! selectFrom: startPos to: stopPos self contentsMorph selectionInterval: (startPos to: stopPos). self contentsMorph setSearchString. self contentsMorph scrollSelectionIntoView. self contentsMorph selectFrom: startPos to: stopPos. self contentsMorph scrollSelectionIntoView! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 6/23/2004 17:43'! selectionInterval ^ self contentsMorph selectionInterval! ! !PlatypusCodeMorph methodsFor: 'code accessing' stamp: 'apl 6/23/2004 17:43'! selectionInterval: anInterval self contentsMorph selectionInterval: anInterval. ! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'apl 6/23/2004 17:43'! sourceHandler ^sourceHandler! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 23:41'! sourceHandler: anObject sourceHandler == anObject ifFalse: [ sourceHandler := anObject. self sourceHandler on: TamForceEditorUpdating send: #forceUpdate: to: self. self acceptContents: self codeText. self changed: #contents]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'apl 2/16/2006 21:28'! sourceHandlerSilently: anObject contents: aString sourceHandler := anObject. self acceptContents: aString. self changed: #contents! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 5/18/2012 15:23'! treeUpdated: anAnnounce self sourceHandler ifNil: [^ self]. self sourceHandler isReleased ifTrue: [^self ]. ((anAnnounce codeMorph ~= self ) and: [anAnnounce codeMorph class = self class]) ifTrue: [self forceUpdate] ! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'apl 6/23/2004 18:02'! updateCodePaneIfNeeded ! ! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 6/4/2012 19:35'! verify self sourceHandler verify. self updateMessagesBrowser ! ! !PlatypusCodeMorph methodsFor: 'ui opening/closing' stamp: 'apl 2/20/2007 15:36'! windowIsClosing self destroy. super windowIsClosing! ! !PlatypusDomainReference methodsFor: 'testing' stamp: 'apl 9/27/2007 05:44'! isMoveable "can be moved" ^ false ! ! !PlatypusDomainReference methodsFor: 'testing' stamp: 'apl 9/8/2003 18:56'! isRemoveable ^ false ! ! !PlatypusExpressLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 12/13/2012 13:09'! cleanAllEvaluations ! ! !PlatypusExpressLinkReference methodsFor: 'checking' stamp: 'apl 9/27/2007 06:19'! doInternalChecking self assert: self metaData notNil. self assert: self metaData tamarisItemRef notNil. self metaData tamarisItemRef doInternalChecking! ! !PlatypusExpressLinkReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 12:56'! findExpressReferenceDeeplySuchThat: aBlock ^ self linked findExpressReferenceDeeplySuchThat: aBlock ! ! !PlatypusExpressLinkReference methodsFor: 'accessing' stamp: 'apl 3/15/2004 11:33'! metaData ^ self linked metaData ! ! !PlatypusExpressLinkReference methodsFor: 'enumerating' stamp: 'AlainPlantec 5/23/2012 22:16'! recursivelyDo: aBlock ! ! !PlatypusSchemaInterfaceReference methodsFor: 'to be classified' stamp: 'apl 4/26/2007 10:23'! asStringOrText ^ self linkPrefix , self linked name! ! !PlatypusSchemaInterfaceReference methodsFor: 'icon accessing' stamp: 'apl 4/26/2007 10:11'! children | lnk | ^ (lnk := self linked) ifNil: [#()] ifNotNil: [lnk nativeSchema isNil ifTrue: [#()] ifFalse: [lnk nativeSchema tamarisItemRef isNil ifTrue: [#()] ifFalse: [lnk nativeSchema tamarisItemRef children]]]! ! !PlatypusSchemaInterfaceReference methodsFor: 'icon accessing' stamp: 'apl 4/26/2007 10:54'! icon | lnk | ^ ((lnk := self linked) isNil or: [lnk nativeSchema isNil]) ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/question'] ifFalse: [lnk nativeSchema tamarisItemRef isNil ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/question'] ifFalse: [lnk nativeSchema tamarisItemRef icon]]! ! !PlatypusSchemaInterfaceReference methodsFor: 'to be classified' stamp: 'apl 4/26/2007 10:28'! linkPrefix ^ self linked isNil ifTrue: [''] ifFalse: [self linked isPltUsedSchema ifTrue: ['use from '] ifFalse: [self linked isPltReferencedSchema ifTrue: ['reference from '] ifFalse: ['meta from ']]]! ! !PlatypusSchemaInterfaceReference methodsFor: 'icon accessing' stamp: 'apl 4/26/2007 10:12'! selectingFrom: aTaxonomyBrowser | lnk | ((lnk := self linked) isNil or: [lnk nativeSchema isNil or: [lnk nativeSchema tamarisItemRef isNil]]) ifTrue: [^ nil]. ^ lnk nativeSchema tamarisItemRef selectingFrom: aTaxonomyBrowser! ! !PlatypusSchemaInterfaceReference methodsFor: 'to be classified' stamp: 'apl 4/26/2007 10:21'! shortName ^ self linked name! ! !PlatypusSchemaInterfaceReference methodsFor: 'icon accessing' stamp: 'apl 4/26/2007 10:11'! unSelectingFrom: aTaxonomyBrowser | lnk | ((lnk := self linked) isNil or: [lnk nativeSchema isNil or: [lnk nativeSchema tamarisItemRef isNil]]) ifFalse: [lnk nativeSchema tamarisItemRef unSelectingFrom: aTaxonomyBrowser]! ! !PlatypusSchemaLinkReference methodsFor: 'testing' stamp: 'apl 3/3/2006 08:43'! canBeMovedDown "true if self can be moved up (in my owner children collection) "^ self isMoveable and: [ self owner subReferences size > 1 and: [ ( self owner subReferences indexOf: self ) < self owner subReferences size ] ] ! ! !PlatypusSchemaLinkReference methodsFor: 'testing' stamp: 'apl 3/3/2006 08:42'! canBeMovedUp "true if self can be moved up (in my owner children collection)"^ self isMoveable and: [ owner subReferences size > 1 and: [ ( self owner subReferences indexOf: self ) > 1 ] ] ! ! !PlatypusSchemaLinkReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 22:14'! contents ^ self linked contents ! ! !PlatypusSchemaLinkReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 10:19'! emphasisModel ^ self linked emphasisModel ! ! !PlatypusSchemaLinkReference methodsFor: 'testing' stamp: 'AlainPlantec 5/23/2012 22:14'! isLinkTo: anItem ^ self linked linked = anItem linked ! ! !PlatypusSchemaLinkReference methodsFor: 'testing' stamp: 'AlainPlantec 5/23/2012 22:14'! isMoveable ^ true ! ! !PlatypusSchemaLinkReference methodsFor: 'testing' stamp: 'AlainPlantec 6/14/2012 01:40'! isPlatypusPrimitiveSchema ^ self linked notNil and: [ self linked isPlatypusPrimitiveSchema ] ! ! !PlatypusSchemaLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 5/23/2012 22:14'! moveDown ^ self owner moveDownSchemaReference: self ! ! !PlatypusSchemaLinkReference methodsFor: 'updating' stamp: 'AlainPlantec 5/23/2012 22:14'! moveUp ^ self owner moveUpSchemaReference: self ! ! !PlatypusSubtypeReference methodsFor: 'testing' stamp: 'apl 7/17/2003 12:46'! isMoveable ^ false ! ! !PlatypusSubtypeReference methodsFor: 'testing' stamp: 'apl 7/17/2003 11:51'! isRemoveable ^ false ! ! !PlatypusStepChooserMorph class methodsFor: 'opening' stamp: 'AlainPlantec 5/12/2012 16:17'! popUpPrefix: aPrefix from: aTextMorph Cursor wait showWhile: [| selectors chooser | selectors := self selectorsFromPrefix: aPrefix from: aTextMorph. selectors size = 1 ifTrue: [aTextMorph editor editingState chosenSelector: selectors first for: aTextMorph. ^ nil]. selectors isEmpty ifFalse: [chooser := self new chooseBlock: [:chosen | aTextMorph editor editingState chosenSelector: chosen for: aTextMorph]; requestor: aTextMorph; prefix: aPrefix; labels: selectors; yourself. chooser open]. ^ chooser]! ! !PlatypusStepChooserMorph class methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 01:17'! selectorsFromPrefix: aPrefix from: aTextMorph "returns the value of labels from a selector prefix" | cleaned | aPrefix isNil ifTrue: [^ #()]. cleaned := String streamContents: [:strm | aPrefix do: [:c | (c isAlphaNumeric or: [c = $_]) ifTrue: [strm nextPut: c]]]. ^ aTextMorph editView model possibleReplacementsFromPrefix: cleaned ! ! !PlatypusStepChooserMorph methodsFor: 'action' stamp: 'AlainPlantec 5/12/2012 16:16'! choose: index "Set the given choice and ok." requestor ifNil: [^ self delete]. requestor editor editingState selectorChooser ~= self ifTrue: [^ self delete]. requestor takeKeyboardFocus. super choose: index ! ! !PlatypusStepChooserMorph methodsFor: 'action' stamp: 'AlainPlantec 5/12/2012 16:16'! close requestor ifNotNil: [requestor takeKeyboardFocus. self choose: 0]! ! !PlatypusStepChooserMorph methodsFor: 'submorphs-add/remove' stamp: 'AlainPlantec 5/12/2012 16:16'! comeToFront super comeToFront. self setPosition ! ! !PlatypusStepChooserMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:16'! defaultBaseColor ^ (self theme menuColorFor: self) muchLighter! ! !PlatypusStepChooserMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/12/2012 16:16'! drawCommonPrefixAreasOn: aCanvas | firstMenu firstMenuItem topLeft bottomLeft lastMenuItem | requestor ifNil: [^ self]. prefix ifNotNil: [ self choiceMenus do: [:cm | self drawCommonPrefixAreasOn: aCanvas menu: cm]] ! ! !PlatypusStepChooserMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/12/2012 16:16'! drawCommonPrefixAreasOn: aCanvas menu: aMenu | firstMenuItem topLeft bottomLeft lastMenuItem w c | firstMenuItem := aMenu menuItems first. lastMenuItem := aMenu menuItems last. w := (firstMenuItem fontToUse widthOfString: prefix). topLeft := firstMenuItem boundsInWorld topLeft. bottomLeft := lastMenuItem boundsInWorld bottomLeft + ( w @ 0 ). c := aMenu color muchDarker. aCanvas fillRectangle: (topLeft corner: bottomLeft) color: (c alpha: 0.3)! ! !PlatypusStepChooserMorph methodsFor: 'drawing' stamp: 'AlainPlantec 5/12/2012 16:16'! fullDrawOn: aCanvas super fullDrawOn: aCanvas. self drawCommonPrefixAreasOn: aCanvas ! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 19:58'! initialize super initialize. self maxLines: 15! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 16:16'! newContentMorph | sp | sp := super newContentMorph. sp updateScrollbars. ^ sp ! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 16:16'! nextPrefixWith: aPrefix | curr pref found lab | curr := aPrefix size. lab := self labels first. found := false. [lab size <= curr ifTrue: [found := true] ifFalse: [pref := lab copyFrom: 1 to: curr. self labels do: [:l | found ifFalse: [(l asString beginsWith: pref) ifFalse: [pref := pref allButLast. found := true]]]]. found] whileFalse: [curr := curr + 1]. ^ (pref notNil and: [pref size > aPrefix size]) ifTrue: [pref] ! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 19:56'! open super open. self borderStyle: ( self theme progressBarBorderStyleFor: self). self setPosition. ! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 16:16'! positionInRequestor | caret bottomLeft topLeft editor pos allowedArea | requestor ifNil: [^self]. editor := requestor editor. caret := editor stopIndex. [editor selectAt: caret. bottomLeft := editor paragraph selectionRects first bottomLeft. topLeft := requestor owner submorphBounds topLeft. pos := topLeft + bottomLeft] ensure: [editor selectAt: caret]. pos := pos + (40 @ 0). allowedArea := self allowedArea. (pos x + self width) > allowedArea width ifTrue: [pos := pos - (self width @ 0) - ((50 + 40)@ 0)]. (pos y + self height) > allowedArea height ifTrue: [pos := (pos x @ (allowedArea height - self height - 5))]. ^ pos. ! ! !PlatypusStepChooserMorph methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:16'! prefix: aPrefix "Set the value of labels" prefix := aPrefix. ! ! !PlatypusStepChooserMorph methodsFor: 'ui-building' stamp: 'AlainPlantec 5/12/2012 16:16'! setPosition self position: self positionInRequestor. ! ! !PlatypusStepChooserMorph methodsFor: 'stepping and presenter' stamp: 'AlainPlantec 5/12/2012 16:16'! step [requestorPos ifNil: [requestorPos := requestor owner position] ifNotNil: [requestorPos ~= requestor owner position ifTrue: [^ self close]]. (requestor isNil or: [requestor isInWorld not]) ifTrue: [^ self close]. requestor editor editingState selectorChooser ~= self ifTrue: [self close] ] on: Error do: [self delete] ! ! !PlatypusStepChooserMorph methodsFor: 'stepping and presenter' stamp: 'AlainPlantec 5/12/2012 16:16'! stepTime ^ 500! ! !PlatypusStepChooserMorph methodsFor: 'testing' stamp: 'AlainPlantec 5/12/2012 16:16'! wantsSteps ^ requestor notNil! ! !PlatypusExpressElementReference methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/20/2012 10:17'! destroy metaData ifNotNil: [ metaData deepDestroy. metaData := nil]. startNode := nil. stopNode := nil. super destroy! ! !PlatypusExpressElementReference methodsFor: 'checking' stamp: 'apl 4/3/2006 13:35'! doInternalChecking self knownAsInvalid ifFalse: [super doInternalChecking. self assert: self metaData owner = self owner metaData. self assert: self name asUppercase = self metaData name asUppercase]! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 10:41'! elementTag ^ self lexicalElement! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 9/29/2003 10:49'! metaData ^ metaData! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 9/29/2003 10:49'! metaData: aMetaData metaData := aMetaData! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 3/19/2003 16:37'! name ^ name! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:03'! name: aString name := aString! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 3/23/2006 11:12'! nameNode ^ self tokenList nextNonBlankFrom: self subReferencesScanStart! ! !PlatypusExpressElementReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 09:13'! relabelWith: newName | metaDataOwner code oldOwner parserResult oldName | metaDataOwner := self metaData owner. oldName := self name. self nameNode lexicalElement: newName. code := self codeString. oldOwner := self owner. parserResult := self expressParserClass parse: code startingAt: self smaCCStartingState owner: metaDataOwner onError: [:d :p | self nameNode lexicalElement: oldName. nil]. parserResult ifNotNil: [ self replaceTokenListWithParserResult: parserResult. self name: newName. self treeHasChanged]! ! !PlatypusExpressElementReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/17/2012 21:30'! removeSilently self owner ifNotNil: [ self tokenList ifNotNil: [ self logToChangesRemoving: self oldCodeText: self codeText. self tokenList removeFrom: (self tokenList beginningOfLineFrom: self startNode) to: (self tokenList endOfLineFrom: self stopNode)]]. super removeSilently! ! !PlatypusExpressElementReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 09:51'! replaceTokenListWithParserResult: aParserResult aParserResult metaData name asUppercase = self name asUppercase ifTrue: [super replaceTokenListWithParserResult: aParserResult] ifFalse: [ self owner addFromTokenList: aParserResult tokenList. TamBrowser reloadEditorFor: self]. ! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 09:21'! schemaInstanceReference ^ (self owner isKindOf: PlatypusExpressReference) ifTrue: [self owner schemaInstanceReference]! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 2/10/2004 15:36'! shortName ^ self name ! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 3/19/2003 11:13'! startNode ^ startNode! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 20:40'! startNode: aNode startNode := aNode! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 3/19/2003 11:13'! stopNode ^ stopNode ! ! !PlatypusExpressElementReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 19:48'! stopNode: aNode stopNode := aNode! ! !PlatypusEntityReference class methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:46'! lexicalElement ^ #entity! ! !PlatypusEntityReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:54'! children ^ self isReleased ifTrue: [#()] ifFalse: [self collectedSubtypes , super contents]. ! ! !PlatypusEntityReference methodsFor: 'accessing' stamp: 'apl 4/10/2006 17:49'! collectedSubtypes | subtypes subTypesReferences newLink toBeRemove | self metaData checksHierarchy ifNotNil: [^ #()]. subtypes := (self metaData subtypes collect: [:st | st referenced]) select: [:st | st notNil]. subTypesReferences := ((subtypes asArray select: [:st | st tamarisItemRef notNil]) collect: [:st | st tamarisItemRef]) sort: [:a :b | a name < b name]. toBeRemove := self subContents select: [:l | (subTypesReferences anySatisfy: [:str | str = l linked]) not]. self subContents removeAll: toBeRemove. toBeRemove do: [:l | l destroy]. subTypesReferences do: [:str | (self subContents anySatisfy: [:l | l linked = str]) ifFalse: [newLink := PlatypusSubtypeReference from: str. newLink owner: self. self subContents add: newLink]]. ^ self subContents! ! !PlatypusEntityReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 08:59'! icon ^ TamIcons mimeIcon: '10x10/mimetypes/blue_e'! ! !PlatypusFunctionReference class methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:47'! lexicalElement ^ #function! ! !PlatypusFunctionReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 14:45'! canEvaluate ^ true! ! !PlatypusFunctionReference methodsFor: 'accessing' stamp: 'apl 2/16/2006 11:58'! children ^ self subContents ! ! !PlatypusFunctionReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 09:00'! icon ^ TamIcons mimeIcon: '10x10/mimetypes/blue_f' ! ! !PlatypusProcedureReference class methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:47'! lexicalElement ^ #procedure! ! !PlatypusProcedureReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 14:45'! canEvaluate ^ true! ! !PlatypusProcedureReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 09:01'! icon ^ TamIcons mimeIcon: '10x10/mimetypes/blue_p'! ! !PlatypusRuleReference class methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:47'! lexicalElement ^ #rule! ! !PlatypusRuleReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 14:21'! canEvaluate ^ true! ! !PlatypusRuleReference methodsFor: 'accessing' stamp: 'apl 6/8/2004 10:55'! children ^ self subContents! ! !PlatypusRuleReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 09:00'! icon ^ TamIcons mimeIcon: '10x10/mimetypes/blue_r'! ! !PlatypusSchemaElementReference methodsFor: 'copying' stamp: 'apl 7/5/2004 12:01'! copy | cpy | cpy := super copy. cpy subContents: nil. ^ cpy! ! !PlatypusSchemaElementReference methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:49'! destroy self reinitialize. super destroy! ! !PlatypusSchemaElementReference methodsFor: 'evaluating' stamp: 'AlainPlantec 5/17/2012 14:01'! evaluate | result value position | self canEvaluate ifFalse: [^ false ]. result := false. self knownAsInvalid ifTrue: [self inform: 'Express model must checked'] ifFalse: [(result := self metaData evaluate) ifNotNil: [(result isKindOf: PlatypusExpressInterpretor) ifFalse: [position := self subContents size + 1. value := result val. (value isPltAggregateInstance and: [value size = 1]) ifTrue: [self subContents add: ((value at: 1) tamarisStepValueReferenceClass owner: self position: position value: (value at: 1))] ifFalse: [self subContents add: (value tamarisStepValueReferenceClass owner: self position: position value: value)]. TamManager changed: self]]]. ^ result! ! !PlatypusSchemaElementReference methodsFor: 'evaluating' stamp: 'apl 3/19/2004 16:34'! evaluateAndExplore ^ self metaData evaluateAndExplore ! ! !PlatypusSchemaElementReference methodsFor: 'testing'! isSchemaElement ^ true! ! !PlatypusSchemaElementReference methodsFor: 'menus' stamp: 'apl 3/2/2005 11:18'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph. ! ! !PlatypusSchemaElementReference methodsFor: 'accessing' stamp: 'apl 10/30/2003 18:17'! lexicalElement ^ self class lexicalElement! ! !PlatypusSchemaElementReference methodsFor: 'menus' stamp: 'apl 3/2/2005 10:40'! menuTranslationParameters ! ! !PlatypusSchemaElementReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:23'! modelContentsReference ^ self schemaInstanceReference ifNotNil: [:schir | schir modelContentsReferences ifNotNil: [:mcrs | mcrs ifNotEmpty: [mcrs first]]]! ! !PlatypusSchemaElementReference methodsFor: 'initialize/release' stamp: 'apl 6/8/2004 17:20'! reinitialize self reinitializeEvaluatedContents. super reinitialize! ! !PlatypusSchemaElementReference methodsFor: 'updating' stamp: 'apl 2/16/2006 11:35'! reinitializeEditor self reinitialize. ^ super reinitializeEditor! ! !PlatypusSchemaElementReference methodsFor: 'initialize/release' stamp: 'AlainPlantec 12/13/2012 13:41'! reinitializeEvaluatedContents subContents ifNotNil: [subContents do: [:s | s destroy]]. subContents := nil. super reinitializeEvaluatedContents! ! !PlatypusSchemaElementReference methodsFor: 'updating' stamp: 'apl 6/3/2005 16:53'! removeAt: aPosition | sr | (self subContents removeAt: aPosition) destroy. aPosition to: self subContents size do: [:p | (sr := self subContents at: p) pos: sr pos - 1]! ! !PlatypusSchemaElementReference methodsFor: 'accessing' stamp: 'apl 3/22/2006 23:00'! smaCCStartingState | openkw | openkw := self lexicalElement. ^ self expressParserClass perform: ('startingStateFor' , openkw capitalized , 'Entry') asSymbol ! ! !PlatypusSchemaElementReference methodsFor: 'menus' stamp: 'AlainPlantec 12/13/2012 13:39'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | menuExpress | super specificMenu: menu shifted: b. menu addLine. menuExpress := MenuMorph new. #(#- #('save as... (S)' #menuSaveAs) #- #('code pane (p)' #menuCodePane) #('clean all evaluation results' #menuCleanAllEvaluations ) #- #('translate here (t)' #menuTranslate2Pharo) #('translate to VisualWorks' #menuTranslate2VisualWorks) ) do: [:item | item == #- ifTrue: [menuExpress addLine] ifFalse: [menuExpress add: item first target: self selector: item second]]. menu add: 'express ...' subMenu: menuExpress target: self selector: nil argumentList: #(). self metaData isPltStatementsContainer ifTrue: [menu addLine. menu add: 'evaluate' target: self selector: #evaluate. menu add: 'evaluate and explore' target: self selector: #evaluateAndExplore. menu addLine]. ^ menu! ! !PlatypusSchemaElementReference methodsFor: 'accessing'! startLevel ^1! ! !PlatypusSchemaElementReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 15:58'! subContents ^ subContents ifNil: [subContents := OrderedCollection new]. ! ! !PlatypusSchemaElementReference methodsFor: 'accessing' stamp: 'apl 7/5/2004 12:00'! subContents: aCollectionOrNil subContents := aCollectionOrNil! ! !PlatypusSchemaElementReference methodsFor: 'menus' stamp: 'apl 2/15/2007 16:05'! translateWithTranslator: aTranslator ^ aTranslator localTranslate: self metaData ! ! !PlatypusTypeReference class methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:46'! lexicalElement ^ #type! ! !PlatypusTypeReference methodsFor: 'accessing' stamp: 'AlainPlantec 10/7/2010 16:04'! children | children | children := #(). self isReleased ifFalse: [children := self collectedDomains, super contents]. ^ children ! ! !PlatypusTypeReference methodsFor: 'accessing' stamp: 'apl 9/19/2007 06:06'! collectedDomains | newLink toBeRemove domains domainsReferences | self metaData ifNil: [^ #()]. self metaData checksDomainPath ifNotNil: [^ #()]. domains := self metaData domainsSet select: [:d | d isPltNamedType]. domainsReferences := ((domains asArray select: [:st | st tamarisItemRef notNil]) collect: [:st | st tamarisItemRef]) sort: [:a :b | a name < b name]. toBeRemove := self subContents select: [:l | (domainsReferences anySatisfy: [:str | str = l linked]) not]. self subContents removeAll: toBeRemove. toBeRemove do: [:l | l destroy]. domainsReferences do: [:str | (self subContents anySatisfy: [:l | l linked = str]) ifFalse: [newLink := PlatypusDomainReference from: str. newLink owner: self. self subContents add: newLink]]. ^ self subContents! ! !PlatypusTypeReference methodsFor: 'accessing' stamp: 'apl 4/1/2006 09:00'! icon ^ TamIcons mimeIcon: '10x10/mimetypes/blue_t'! ! !PlatypusSchemaReference class methodsFor: 'accessing' stamp: 'apl 2/14/2006 20:58'! lexicalElement ^#'schema'! ! !PlatypusSchemaReference methodsFor: 'drag and drop' stamp: 'apl 5/10/2005 14:44'! acceptDroppingMorph: aTransfertMorph copy: shouldCopy (aTransfertMorph respondsTo: #passenger) ifFalse: [^false]. (aTransfertMorph passenger isKindOf: PlatypusSchemaElementReference) ifTrue: [(self copyListItemHereFromTransfertMorph: aTransfertMorph) ifTrue: [shouldCopy ifFalse: [aTransfertMorph passenger remove]. ^ true]]. ^ false! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:40'! accessibleSchemata ^self schemaInstance schemata! ! !PlatypusSchemaReference methodsFor: 'code updating' stamp: 'apl 4/26/2007 10:08'! buildSubReferencesFrom: start to: stop addingOrReplacing: addingReplacingOrReplacingAllSymbol | newLink | super buildSubReferencesFrom: start to: stop addingOrReplacing: addingReplacingOrReplacingAllSymbol. self subReferences removeAllSuchThat: [:e | e isKindOf: PlatypusSchemaInterfaceReference]. self metaData interface do: [:str | newLink := PlatypusSchemaInterfaceReference from: str . newLink owner: self. self subReferences add: newLink]! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 3/3/2006 08:43'! canBeMovedDown "true if self can be moved up (in my owner children collection) " ^ self isMoveable and: [self owner subReferences size > 1 and: [(self owner subReferences indexOf: self) < self owner subReferences size]]! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 3/3/2006 08:42'! canBeMovedUp "true if self can be moved up (in my owner children collection)" ^ self isMoveable and: [self owner subReferences size > 1 and: [(self owner subReferences indexOf: self) > 1]]! ! !PlatypusSchemaReference methodsFor: 'code accessing' stamp: 'apl 4/6/2006 11:32'! codeStreamClassFor: aTokenList from: aStartNode to: aSopNode ^ super codeStreamClassFor: aTokenList from: aStartNode to: aSopNode ! ! !PlatypusSchemaReference methodsFor: 'checking' stamp: 'apl 4/3/2006 13:36'! doInternalChecking super doInternalChecking. self knownAsInvalid ifFalse: [self assert: self metaData owner notNil. self metaData interfaceSchemata do: [:sch | sch ifNotNil: [self assert: sch owner notNil]]]! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/23/2006 09:37'! elementKindStartContentsFor: elementKindSymbol name: aName elementKindSymbol == #type ifTrue: [^ (' type ' , aName , ' = string; \ end_type;') withCRs]. elementKindSymbol == #entity ifTrue: [^ (' entity ' , aName , ';\ end_entity;') withCRs]. elementKindSymbol == #rule ifTrue: [^ (' rule ' , aName , ' for ( at_least_an_entity_name );\ where\ wr1 : true; -- obviously something else\ end_rule;') withCRs]. elementKindSymbol == #procedure ifTrue: [^ (' procedure ' , aName , ';\ local\ end_local;\\ end_procedure;') withCRs]. elementKindSymbol == #function ifTrue: [^ (' function ' , aName , ' : integer;\ local\ end_local;\\ return (0);\ end_function;') withCRs]. ^ (' ' , elementKindSymbol , ' ' , aName , ';\ end_' , elementKindSymbol , ' ;') withCRs! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:53'! entities ^ self metaData entities! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:22'! entitiesReferences ^self subReferencesOfKind: PlatypusEntityReference! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:22'! functionsReferences ^self subReferencesOfKind: PlatypusFunctionReference! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 3/29/2006 19:36'! haveMetaSchemata ^ self metaData notNil and: [self metaData haveMetaSchemata]! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 3/29/2006 19:52'! icon ^ (self isPlatypusPrimitiveSchema or: [self usePlatypusPrimitiveSchemata]) ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/meta_schema'] ifFalse: [self haveMetaSchemata ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/meta_schema_instancier'] ifFalse: [TamIcons mimeIcon: '10x10/mimetypes/schema']]! ! !PlatypusSchemaReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 08:33'! insertReference: anotherReference | parserResult code | ((anotherReference isKindOf: PlatypusExpressReference) and: [anotherReference isSchemaElement]) ifFalse: [^ super insertReference: anotherReference]. anotherReference owner == self ifTrue: [^ false]. code := anotherReference codeString. parserResult := self expressParserClass parseStream: code readStream startingAt: anotherReference smaCCStartingState owner: self metaData. self updateWithParserResult: parserResult. self treeHasChanged. ^ true! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 3/3/2006 08:13'! isMoveable ^ true! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'AlainPlantec 6/14/2012 01:40'! isPlatypusPrimitiveSchema ^ self metaData notNil and: [self metaData isPlatypusPrimitiveSchema]! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:05'! isSchemaReference ^ true! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 6/7/2004 14:39'! menuEvaluateAllRules self rules do: [:r | Transcript show: r metaData name , '\' withCRs. r evaluate]! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'AlainPlantec 10/7/2010 16:00'! menuExpress2SqlOracle | visiteur ws functionsVisitor | visiteur := PlatypusExpress2SqlOracleVisitor outStream: (WriteStream on: String new). visiteur createTypeBoolean. visiteur createTypeLogical. "Execute la gÈeneration du code SQL" self metaData acceptTry: visiteur. "visiteur allSqlContainer inspect." "visiteur allSqlContainer do: [:item | Transcript show: item contents]. visiteur allSqlContainer keys inspect." "ws := Workspace new. ws contents: visiteur outStream contents. ws openLabel: 'Fichier SQL (Oracle)'." visiteur sortMsgSql. "functionsVisitor := PlatypusAccesFunctionsVisitor new: visiteur allSqlContainer outStream: visiteur outStream dict: visiteur dicoOfName. self metaData acceptTry: functionsVisitor." ws := Workspace new. ws contents: visiteur outStream contents. ws openLabel: self metaData name , '.SQL (Oracle)'. Transcript show: 'Traitement termine'; cr! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'AlainPlantec 10/7/2010 16:00'! menuExpress2SqlPostgres | visiteur ws functionsVisitor | visiteur := PlatypusExpress2SqlPostgresVisitor outStream: (WriteStream on: String new). visiteur createTypeBoolean. visiteur createTypeLogical. "Execute la gÈeneration du code SQL" self metaData acceptTry: visiteur. "visiteur allSqlContainer inspect." "ws := Workspace new. ws contents: visiteur outStream contents. ws openLabel: 'Fichier SQL (PostgreSQL)'." visiteur sortMsgSql. functionsVisitor := PlatypusAccesFunctionsPosgresVisitor new: visiteur allSqlContainer outStream: visiteur outStream dict: visiteur dicoOfName. self metaData acceptTry: functionsVisitor. ws := Workspace new. ws contents: visiteur outStream contents. ws openLabel: self metaData name , '.SQL (PostgreSQL)'. Transcript show: 'Traitement termine'; cr! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'AlainPlantec 5/22/2012 08:33'! menuNewElement: elementKind | key startContents startingStateSelector parserResult | (key := UIManager default request: 'new ' , elementKind , ' name' initialAnswer: '') ifNotNil: [:e | startContents := self elementKindStartContentsFor: elementKind name: key. startingStateSelector := (#startingStateFor , elementKind capitalized , 'Entry') asSymbol. parserResult := self expressParserClass parseStream: startContents readStream startingAt: (PlatypusExpressParser perform: startingStateSelector) owner: self metaData. self updateWithParserResult: parserResult. self treeHasChanged]! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/21/2003 16:15'! menuNewEntity ^ self menuNewElement: #entity! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/21/2003 16:15'! menuNewFunction ^ self menuNewElement: #function! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/21/2003 16:15'! menuNewProcedure ^ self menuNewElement: #procedure! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/21/2003 16:15'! menuNewRule ^ self menuNewElement: #rule! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'apl 3/21/2003 16:15'! menuNewType ^ self menuNewElement: #type! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 6/10/2004 23:47'! moveDown ^ self owner moveDownSchemaReference: self! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 6/10/2004 23:46'! moveUp ^ self owner moveUpSchemaReference: self! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:22'! proceduresReferences ^self subReferencesOfKind: PlatypusProcedureReference! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 6/7/2004 14:36'! rules ^ self subReferences select: [:sr | sr isKindOf: PlatypusRuleReference]! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:23'! rulesReferences ^self subReferencesOfKind: PlatypusRuleReference! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 4/25/2007 16:24'! schemaInterfacesReferences ^ self subReferencesOfKind: PlatypusSchemaInterfaceReference! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 3/22/2006 23:23'! smaCCStartingState ^ self expressParserClass startingStateForSchemaEntry! ! !PlatypusSchemaReference methodsFor: 'menus' stamp: 'AlainPlantec 4/27/2012 09:08'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | newMenu menuExpress | super specificMenu: menu shifted: b. menu addLine. newMenu := MenuMorph new. newMenu defaultTarget: self. newMenu addList: #(#('type' #menuNewType) #('entity' #menuNewEntity) #('procedure' #menuNewProcedure) #('function' #menuNewFunction) #('rule' #menuNewRule) ). menuExpress := MenuMorph new. menuExpress add: 'new ...' subMenu: newMenu. {#-. #('save... (s)' #menuSave). #('save as... (S)' #menuSaveAs) . #-. #('code pane (p)' #menuCodePane ). #-. #('evaluate all rules' #menuEvaluateAllRules ). #('clean all evaluation results' #menuCleanAllEvaluations ). #-. #('translate here (t)' #menuTranslate2Pharo ). #('translate to VisualWorks' #menuTranslate2VisualWorks )} do: [:item | item == #- ifTrue: [menuExpress addLine] ifFalse: [menuExpress add: item first target: self selector: item second]]. menu add: 'express ...' subMenu: menuExpress target: self selector: nil argumentList: #(). menu addLine. ^ menu! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 10/1/2003 15:49'! subElementSymbols ^ PlatypusSchemaElementReference allSubclasses collect: [ :c | c lexicalElement]! ! !PlatypusSchemaReference methodsFor: 'sublists handling' stamp: 'apl 4/25/2007 16:06'! subListsDefsArray "return an array of array. Each element array is for one sublist and contains first a selector for sublist accessing and second a label for the sublist" | subs | subs := OrderedCollection new. subs addAll: super subListsDefsArray. subs addAll: #(#(#schemaInterfacesReferences #interface) #(#typesReferences #types) #(#entitiesReferences #entities) #(#functionsReferences #functions) #(#proceduresReferences #procedures) #(#rulesReferences #rules) ). ^ subs! ! !PlatypusSchemaReference methodsFor: 'sublists handling' stamp: 'apl 5/26/2005 16:56'! subListsReferenceClassName ^#PlatypusExpressSubListReference! ! !PlatypusSchemaReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 14:21'! typesReferences ^self subReferencesOfKind: PlatypusTypeReference! ! !PlatypusSchemaReference methodsFor: 'testing' stamp: 'apl 3/29/2006 19:51'! usePlatypusPrimitiveSchemata ^ self metaData notNil and: [self metaData usePlatypusPrimitiveSchemata]! ! !PlatypusExpressReference class methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:02'! elementClassFromSyntaxicSymbol: aSymbol aSymbol == #schema ifTrue: [^ PlatypusSchemaReference]. aSymbol == #entity ifTrue: [^ PlatypusEntityReference]. aSymbol == #type ifTrue: [^ PlatypusTypeReference]. aSymbol == #procedure ifTrue: [^ PlatypusProcedureReference]. aSymbol == #function ifTrue: [^ PlatypusFunctionReference]. aSymbol == #rule ifTrue: [^ PlatypusRuleReference]! ! !PlatypusExpressReference class methodsFor: 'accessing' stamp: 'apl 2/2/2007 11:26'! saveOutputDirectoryName ^ 'Platypus-schemata'! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'AlainPlantec 6/13/2012 23:57'! accept: input notifying: aRequestor | result users | users := self schemaInstanceReference allUsers. result := self expressParserClass parse: input startingAt: self smaCCStartingState owner: (self metaData owner ifNil: [PltSchemaInstance new namesBuilder: self metaData namesBuilder]) onError: [:aString :position | (PlatypusParserResultAcceptAbort requestor: aRequestor metaData: self metaData message: aString position: position) signal. nil]. result ifNil: [^ false]. result users: (users asArray sort: [:a :b | b usesSchemataOf: a]) asOrderedCollection. result users addFirst: self schemaInstanceReference. ^ [self updateWithParserResult: result] on: PlatypusParserResultAcceptingError do: [:ex | (PlatypusParserResultAcceptAbort requestor: aRequestor metaData: self metaData message: ex messageText position: 1) signal. ^ false]. ! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'AlainPlantec 6/15/2012 12:40'! addFromTokenList: aTokenList | start stop | aTokenList addFirst: PlatypusEolToken new; add: PlatypusEolToken new. start := self addingStartNode. stop := start ifNotNil: [start previous]. self tokenList replaceFromNode: start toNode: stop with: aTokenList. self buildSubReferencesFrom: aTokenList first to: aTokenList last addingOrReplacing: #adding. self tokenList updateAllTokensPositions. self metaData schemaInstance validationResult: false. ^ true! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:50'! addingStartNode ^ self tokenList beginningOfLineFrom: (self tokenList previousPrimaryElementCloseKeywordFrom: self stopNode)! ! !PlatypusExpressReference methodsFor: 'morphic wrapper' stamp: 'apl 3/27/2003 16:28'! asMorph ^ self newEditor asMorph! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 19:28'! bindings ^ self metaData bindings! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 9/19/2007 06:04'! buildSubReferencesFrom: start to: stop addingOrReplacing: addingReplacingOrReplacingAllSymbol | oldContentsByClassIndexes key curr currNameNode newElementClass oldReference elementReference currKeyOldsReferencesList adding | oldContentsByClassIndexes := IdentityDictionary new. self subElementSymbols do: [:s | oldContentsByClassIndexes at: (self elementClassFromSyntaxicSymbol: s) put: Dictionary new]. (addingReplacingOrReplacingAllSymbol = #replacing or: [addingReplacingOrReplacingAllSymbol = #replacingAll]) ifTrue: [self subReferences do: [:sr | sr isLink ifFalse: [key := sr metaData name asUppercase. (oldContentsByClassIndexes at: sr class) at: key ifAbsentPut: OrderedCollection new. ((oldContentsByClassIndexes at: sr class) at: key) add: sr]]]. curr := start. [curr ~= stop] whileTrue: [(curr isPrimaryElementOpenKeyword and: [self subElementSymbols includes: curr lexicalElement]) ifTrue: [currNameNode := self tokenList nextNonBlankFrom: curr next. key := currNameNode lexicalElement asUppercase. newElementClass := self elementClassFromSyntaxicSymbol: curr lexicalElement. oldReference := (oldContentsByClassIndexes at: newElementClass) at: key ifPresent: [:v | v first]. oldReference ifNil: [adding := true. elementReference := newElementClass new owner: self. self subReferences add: elementReference] ifNotNil: [adding := false. elementReference := oldReference. currKeyOldsReferencesList := (oldContentsByClassIndexes at: newElementClass) at: key. currKeyOldsReferencesList removeFirst. currKeyOldsReferencesList isEmpty ifTrue: [(oldContentsByClassIndexes at: newElementClass) removeKey: key]]. elementReference name: currNameNode lexicalElement. elementReference metaData: curr metaData. elementReference startNode: curr. elementReference stopNode: (self tokenList nextNonBlankFrom: (self tokenList closeTokenFrom: curr) next). curr metaData isNil ifFalse: [ curr metaData tamarisItemRef: elementReference. adding ifTrue: [self logToChangesAdding: elementReference] ifFalse: [addingReplacingOrReplacingAllSymbol ~= #replacingAll ifTrue: [self logToChangesUpdating: elementReference]]. elementReference buildSubReferencesFrom: elementReference subReferencesScanStart to: elementReference stopNode addingOrReplacing: #replacingAll]. curr := elementReference stopNode] ifFalse: [curr := curr next]]. addingReplacingOrReplacingAllSymbol = #replacingAll ifTrue: [oldContentsByClassIndexes do: [:c | c do: [:srl | srl do: [:sr | self logToChangesRemoving: sr oldCodeText: sr codeText. sr destroy. sr owner removeChildSilently: sr]]]]! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'AlainPlantec 6/15/2012 14:09'! codeStreamClass ^ self codeStreamClassFor: self tokenList from: self startNode to: self stopNode ! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/30/2006 13:42'! codeStreamClassFor: tokenList from: startNode to: stopNode | currNode count | tokenList notNil ifTrue: [currNode := startNode isNil ifTrue: [tokenList first] ifFalse: [startNode]. count := 0. [currNode notNil and: [currNode ~~ stopNode and: [count < self decorationMaxSize]]] whileTrue: [count := count + 1. currNode := currNode next]. count < self decorationMaxSize ifTrue: [^ PlatypusStepCodeStream]]. ^ WriteStream! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/30/2006 10:31'! codeString ^ self isReleased ifTrue: [''] ifFalse: [ self codeTextFrom: self startNode to: self stopNode stream: String new writeStream]! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 4/6/2006 11:22'! codeText ^ self isReleased ifTrue: [''] ifFalse: [self codeTextWithStreamClass: self codeStreamClass]. ! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/30/2006 11:52'! codeTextFrom: startNode to: stopNode stream: aStream ^ self tokenList writeOn: aStream from: (self tokenList beginningOfLineFrom: startNode) to: (self tokenList endOfLineFrom: stopNode)! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/30/2006 13:45'! codeTextFrom: startNode to: stopNode streamClass: aStreamClass ^ self tokenList textWithStreamClass: aStreamClass from: (self tokenList beginningOfLineFrom: startNode) to: (self tokenList endOfLineFrom: stopNode)! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/13/2003 20:16'! codeTextWithStream: aStream ^ self codeTextFrom: self startNode to: self stopNode stream: aStream! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/30/2006 13:45'! codeTextWithStreamClass: aStreamClass ^ self codeTextFrom: self startNode to: self stopNode streamClass: aStreamClass! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/22/2006 14:53'! contents ^ self subReferences ifNil: [#()]! ! !PlatypusExpressReference methodsFor: 'drag and drop' stamp: 'apl 3/22/2006 18:59'! copyListItemHereFromTransfertMorph: aTransfertMorph | aSchemaReference | aSchemaReference := aTransfertMorph passenger. ^ self insertReference: aSchemaReference! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 4/7/2006 13:10'! decorationMaxSize ^ 7000! ! !PlatypusExpressReference methodsFor: 'initialize/release' stamp: 'apl 3/22/2006 14:53'! destroy self subReferences do: [:r | r destroy]. subReferences := nil. super destroy! ! !PlatypusExpressReference methodsFor: 'checking' stamp: 'apl 3/28/2006 22:02'! doInternalChecking self assert: self metaData notNil. self assert: self metaData tamarisItemRef = self! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/19/2004 10:21'! doItContext ^ self metaData! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 17:41'! editorClass ^ PlatypusExpressEditor! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:01'! elementClassFromSyntaxicSymbol: aSymbol ^ self class elementClassFromSyntaxicSymbol: aSymbol! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 4/3/2006 15:42'! emptyModelContentsSubReferences self schemaInstanceReference modelContentsReferences do: [:mcr | mcr removeSubReferencesSilently]! ! !PlatypusExpressReference methodsFor: 'evaluating' stamp: 'apl 4/14/2006 08:49'! evaluate ^ nil! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 4/3/2006 15:29'! externalSchemaInstances ^ self schemaInstanceReference metaData externalSchemaInstances ! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 4/3/2006 14:16'! externalSchemaInstancesReferences ^ self externalSchemaInstances collect: [:e | e tamarisItemRef]! ! !PlatypusExpressReference methodsFor: 'searching' stamp: 'apl 5/11/2004 23:31'! findExpressReferenceDeeplySuchThat: aBlock | res | self isReleased ifFalse: [(aBlock value: self) ifTrue: [^ self]. self subReferences do: [:sr | (res := sr findExpressReferenceDeeplySuchThat: aBlock) ifNotNil: [^ res]]]. ^ nil! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 2/16/2006 11:54'! forceOkToChange ^ true! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 5/28/2004 11:08'! fullCodeString ^ self codeString! ! !PlatypusExpressReference methodsFor: 'generated code' stamp: 'apl 3/8/2007 15:32'! generatedRootClassSystemCategory ^ self metaData rootClassSystemCategory asSymbol! ! !PlatypusExpressReference methodsFor: 'generated code' stamp: 'apl 3/8/2007 15:32'! generatedRootClassSystemCategoryExists ^ (Smalltalk organization listAtCategoryNamed: self generatedRootClassSystemCategory) notEmpty! ! !PlatypusExpressReference methodsFor: 'generated code' stamp: 'AlainPlantec 12/5/2013 11:38'! generatedSystemCategory ^ self metaData generatedSystemCategory asSymbol! ! !PlatypusExpressReference methodsFor: 'generated code' stamp: 'AlainPlantec 12/5/2013 11:38'! generatedSystemCategoryExists ^ (Smalltalk organization listAtCategoryNamed: self generatedSystemCategory) notEmpty! ! !PlatypusExpressReference methodsFor: 'initialize/release' stamp: 'apl 9/26/2003 12:45'! initialize super initialize. subReferences := OrderedCollection new! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/28/2006 09:51'! interactiveCallArguments ^ interactiveCallArguments! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/28/2006 09:51'! interactiveCallArguments: aString interactiveCallArguments := aString! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 11/14/2003 11:42'! isCopyable ^ false! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 3/25/2003 14:31'! isEditable ^true! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 11/14/2003 11:42'! isMoveable ^ false! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 9/26/2003 15:05'! isRemoveable ^ true! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 3/13/2003 20:11'! isSchema ^ false! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 3/13/2003 20:11'! isSchemaElement ^false! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:02'! isSchemaInstanceReference ^ false! ! !PlatypusExpressReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:05'! isSchemaReference ^ false! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 5/2/2012 12:55'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph. aCharacter = $B ifTrue: [^ self menuBrowseGenerated]. aCharacter = $s ifTrue: [^ self menuSave]. aCharacter = $S ifTrue: [^ self menuSaveAs]. aCharacter = $t ifTrue: [^ self menuTranslate2Pharo]. aCharacter = $T ifTrue: [^ self translateAndFileItIn]! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 20:58'! lexicalElement ^ self class lexicalElement! ! !PlatypusExpressReference methodsFor: 'smalltalk changes logging' stamp: 'apl 3/1/2006 10:14'! logToChangesAdding: aReference self logToChangesKey: 'Adding' element: aReference longName codeText: aReference codeText ! ! !PlatypusExpressReference methodsFor: 'smalltalk changes logging' stamp: 'apl 3/1/2006 11:33'! logToChangesKey: aChangeKey element: elementName codeText: aStringOrText SmalltalkImage current logChange: '----Platypus: ' , aChangeKey , String cr , elementName , String cr , aStringOrText ,String cr, '----'! ! !PlatypusExpressReference methodsFor: 'smalltalk changes logging' stamp: 'apl 3/1/2006 10:25'! logToChangesRemoving: aReference oldCodeText: aStringOrText self logToChangesKey: 'Removing' element: aReference longName codeText: aStringOrText! ! !PlatypusExpressReference methodsFor: 'smalltalk changes logging' stamp: 'apl 3/30/2006 09:52'! logToChangesUpdating: aReference self logToChangesKey: 'Updating' element: aReference longName codeText: aReference codeString! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 7/14/2011 16:57'! menuBrowseGenerated | genClassName cls | genClassName := self metaData generatedClassName. cls := PlatypusPharoSmalltalk at: genClassName asSymbol ifAbsent: [^ self inform: (genClassName , ' is not generated')]. cls browse! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:50'! menuRelabel | oldname newname | oldname := self metaData name. (newname := UIManager default request: 'new name ?' initialAnswer: (oldname ifNil: [''])) trimBoth ifEmpty: [^ false] ifNotEmpty: [:v | newname ~= oldname ifTrue: [ ^ self relabelWith: newname]]! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 12/6/2013 16:28'! menuSave | fileName fileStream | fileName := self saveFullPath. fileName ensureCreateDirectory. fileName := fileName / ( self name , '.exp'). fileName ensureCreateFile. (fileStream := fileName writeStream) ifNotNil: [Cursor write showWhile: [[ fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: self codeString] ensure: [fileStream close]]]! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 10/30/2012 23:25'! menuSaveAs | result | result := UITheme current fileSaveIn: World title: 'File name' extensions: #('exp') path: ''. result ifNotNil: [[ result lineEndConvention: MultiByteFileStream lineEndDefault. result nextPutAll: self codeString] ensure: [result close]]! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 12/11/2013 10:15'! menuTranslate2Pharo | result fileName | Transcript show: 'Translating ' , self listLabel , '...'. result := self translated2Pharo. fileName := self saveFullPath /( self name, '-pharo.st'). fileName ensureCreateFile. (fileName writeStream) ifNotNil: [:fileStream | Cursor write showWhile: [[fileStream nextPutAll: result] ensure: [fileStream close]]]. (Workspace new contents: result) openLabel: 'Translation of ''' , self listLabel , ''''. Transcript show: String cr! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 12/6/2013 00:43'! menuTranslate2VisualWorks | result fileName | Transcript show: 'Translating ' , self listLabel , '...'. result := self translateWithTranslator: self translaterForVisualWorks. fileName := self saveFullPath / ( self name, '-vw.st'). fileName ensureFile. (fileName writeStream) ifNotNil: [:fileStream | Cursor write showWhile: [[fileStream nextPutAll: result] ensure: [fileStream close]]]. (Workspace new contents: result) openLabel: 'Translation of ''' , self listLabel , ''''. Transcript show: String cr! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 5/27/2003 02:14'! metaData ^ nil! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 6/8/2004 11:03'! modelContents ^ nil! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 21:27'! modelContentsReferences ^ self schemaInstanceReference modelContentsReferences! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 12:41'! namesBuilder ^ self metaData schemaInstance namesBuilder! ! !PlatypusExpressReference methodsFor: 'morphic wrapper' stamp: 'apl 3/12/2007 13:29'! newEditor | editor | editor := self editorClass new. editor buildTamarisWindow. editor sourceHandler: self. editor messagesBrowser ifNotNil: [editor updateMessagesBrowser]. ^ editor mainWindow ! ! !PlatypusExpressReference methodsFor: 'code accessing' stamp: 'apl 3/16/2004 09:45'! prettyPrintedExpressCode ^ self metaData prettyPrintedExpressCode! ! !PlatypusExpressReference methodsFor: 'initialize/release' stamp: 'apl 6/3/2005 16:53'! reinitialize self subReferences do: [:r | r destroy]. self subReferences: OrderedCollection new! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 6/4/2004 11:20'! relabelWith: aName self metaData renameWith: aName. super relabelWith: aName. ! ! !PlatypusExpressReference methodsFor: 'updating' stamp: 'AlainPlantec 6/15/2012 12:41'! remove | oldOwner | self schemaInstanceReference showsUsersAsToBeChecked. oldOwner := self owner. self metaData ifNotNil: [ self metaData schemaInstance validationResult: false]. self removeSilently. self treeHasChanged! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/17/2012 21:35'! removeAll self subReferences: OrderedCollection new. self treeHasChanged ! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 2/15/2006 10:53'! removeChildSilently: aReference aReference isLink ifTrue: [(self metaData respondsTo: #removeElement:) ifTrue: [self metaData removeElement: aReference linked]. self subReferences remove: aReference ifAbsent: []] ifFalse: [(aReference isKindOf: PlatypusExpressReference) ifTrue: [aReference metaData ifNotNil: [(self metaData respondsTo: #removeElement:) ifTrue: [self metaData removeElement: aReference metaData]]. self subReferences remove: aReference ifAbsent: []]]. super removeChildSilently: aReference! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 3/27/2006 18:28'! replaceMetaDataWith: aMetaData self metaData owner removeElement: self metaData. self metaData deepDestroy. self metaData: aMetaData. self metaData tamarisItemRef: self! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 09:13'! replaceTokenListWithParserResult: aParserResult | start stop | self replaceMetaDataWith: aParserResult metaData. start := self tokenList beginningOfLineFrom: self startNode. stop := self tokenList endOfLineFrom: self stopNode. self tokenList replaceFromNode: start toNode: stop with: aParserResult tokenList. self startNode: aParserResult tokenList first. self stopNode: aParserResult tokenList last. self buildSubReferencesFrom: self subReferencesScanStart to: self stopNode addingOrReplacing: #replacingAll. self tokenList updateAllTokensPositions. self logToChangesUpdating: self. ^ true! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 12/6/2013 00:43'! saveFullPath | path | path := (FileSystem disk workingDirectory) / self class saveOutputDirectoryName. self parentsChain do: [:p | path := path / p listLabel]. ^ path! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 09:24'! schemaInstance ^ self schemaInstanceReference schemaInstance! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 6/10/2004 09:38'! selectionString ^ self codeString! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/13/2003 20:09'! smaCCStartingState ^ self subclassResponsibility! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 5/13/2005 11:58'! specificButtonsColumn: aTaxonomyBrowser inAlignment: aButtonsAlignment aTaxonomyBrowser editorModel ifNotNil: [aTaxonomyBrowser editorModel addButtonsinAlignment: aButtonsAlignment. aButtonsAlignment addSpacer]. ^aButtonsAlignment! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/13/2003 20:19'! startLevel ^ 0! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/13/2003 20:08'! startNode ^ self subclassResponsibility! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/13/2003 20:08'! stopNode ^ self subclassResponsibility! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 20:54'! subElementSymbols ^ PlatypusSchemaElementReference allSubclasses collect: [:c | c lexicalElement]! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/2/2007 11:41'! subReferences ^ subReferences ifNil: [OrderedCollection new]! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/19/2003 17:47'! subReferences: anObject subReferences := anObject! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'apl 2/15/2006 09:16'! subReferencesScanStart ^ (self tokenList nextOpenKeywordFrom: self startNode) next! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 5/12/2004 10:30'! tamarisItemRef ^ self! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/17/2006 15:53'! tokenList ^ self schemaInstanceReference ifNotNil: [self schemaInstanceReference tokenList]! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 12/5/2013 11:36'! translateAndFileItIn | src | src := self translated2Pharo. CodeImporter evaluateString: src! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'apl 2/15/2007 16:04'! translateWithTranslator: aTranslator ^ aTranslator translate: self metaData ! ! !PlatypusExpressReference methodsFor: 'menus' stamp: 'AlainPlantec 7/14/2011 17:50'! translated2Pharo ^ self translateWithTranslator: self translaterForPharo . ! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 17:50'! translaterForPharo ^ self rootDictionaryReference translaterForPharo! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 3/8/2006 11:14'! translaterForVisualWorks ^ self rootDictionaryReference translaterForVisualWorks! ! !PlatypusExpressReference methodsFor: 'code updating' stamp: 'AlainPlantec 6/14/2012 11:12'! updateWithParserResult: aParserResult | checker r | aParserResult tokenList noEndingEol. self replaceTokenListWithParserResult: aParserResult. self schemaInstanceReference recursivelyDo: [:ref | ref emphasisModel: nil]. r := self schemaInstanceReference verifySilently. (aParserResult users copyWithout: self) do: [:schir | r ifTrue: [ schir recursivelyDo: [:ref | ref emphasisModel: nil]. schir verifySilently] ifFalse: [ schir schemaInstance addError: (PlatypusExpressResolverError metaData: schir schemaInstance message: 'Used model named "', self schemaInstance name , '" has errors')]]. self schemaInstanceReference codeUpdatedOn: DateAndTime now. ^ true ! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 10/26/2006 18:52'! users | allSchemaInstanceRefs | allSchemaInstanceRefs := PlatypusSchemaInstanceReference allSchemaInstancesReferences. allSchemaInstanceRefs remove: self schemaInstanceReference. ^ allSchemaInstanceRefs select: [:schir | (schir schemaInstance externalSchemataNames intersection: self schemaInstanceReference schemaInstance internalSchemataNames) notEmpty]! ! !PlatypusExpressReference methodsFor: 'accessing' stamp: 'apl 10/26/2006 18:52'! usersAsMeta | allSchemaInstanceRefs | allSchemaInstanceRefs := PlatypusSchemaInstanceReference allSchemaInstancesReferences. allSchemaInstanceRefs remove: self schemaInstanceReference. ^ allSchemaInstanceRefs select: [:schir | (schir schemaInstance metaSchemataNames intersection: self schemaInstanceReference schemaInstance internalSchemataNames) notEmpty]! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 12/16/2005 13:00'! expressMetaDictionary ^ self initializeExpressMetaDictionaryIfNeeded ! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 12/16/2005 13:00'! expressMetaDictionaryName ^ 'Platypus_meta_schemas' ! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 12/20/2005 17:28'! expressMetaSchemasCode ^ PltPlatypusMetaSchemasSchemaInstance singleton expressSchemaCode ! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'initializing' stamp: 'AlainPlantec 12/7/2012 13:54'! initializeExpressMetaDictionary "self initializeExpressMetaDictionary" | newref | newref := self schemaInstanceNamed: self expressMetaDictionaryName. TamManager platypusMetaDefaultTaxon insertReference: newref. newref accept: self expressMetaSchemasCode notifying: nil. ^ newref! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'initializing' stamp: 'AlainPlantec 10/16/2010 12:14'! initializeExpressMetaDictionaryIfNeeded "self initializeExpressMetaDictionaryIfNeeded" | candidats | (candidats := self allSchemaInstanceReferencesNamed: self expressMetaDictionaryName) size > 1 ifTrue: [self error: 'Several meta schemas ??']. candidats isEmpty ifTrue: [^ self initializeExpressMetaDictionary] ifFalse: [^ candidats first] ! ! !PlatypusInternalMetaSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/26/2006 19:04'! lookUpExpressMetaDictionary ^ self allInstances copy detect: [:epd | epd isMetaSchemaInstanceReference] ifNone: []! ! !PlatypusInternalMetaSchemaInstanceReference methodsFor: 'copying' stamp: 'apl 12/16/2005 13:06'! copy ^ self error: 'can''t copy a meta dictionary reference' ! ! !PlatypusInternalMetaSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:25'! expressParserClassName ^ #PlatypusExpressPrimitiveParser ! ! !PlatypusInternalMetaSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 3/14/2006 09:22'! isExpressMetaDictionary ^ self isReleased not and: [ self name = self class expressMetaDictionaryName ] ! ! !PlatypusInternalMetaSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/14/2007 16:17'! namesBuilder ^ PlatypusNamesBuilder meta! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'private accessing' stamp: 'AlainPlantec 7/14/2011 16:57'! classBlackList "self classBlackList" | blackList | blackList := Set new. SystemOrganization categories do: [:cat | blackList addAll: ((SystemOrganization listAtCategoryNamed: cat) select: [:cls | (PlatypusPharoSmalltalk at: cls) class includesSelector: #translatedFromISO10303P11])]. ^ blackList! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 6/10/2004 22:10'! expressPrimitiveDictionary ^ self initializeExpressPrimitiveDictionaryIfNeeded! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 2/2/2006 14:45'! expressPrimitiveDictionaryName ^ 'Platypus_Express_primitives'! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 3/1/2006 22:28'! expressPrimitiveSchemasCode ^ PltPlatypusExpressPrimitivesSchemaInstance singleton expressSchemaCode! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'initializing' stamp: 'AlainPlantec 12/7/2012 14:08'! initializeExpressPrimitiveDictionary "self initializeExpressPrimitiveDictionary" | newref | newref := self schemaInstanceNamed: self expressPrimitiveDictionaryName. TamManager platypusMetaDefaultTaxon insertReference: newref. newref accept: self expressPrimitiveSchemasCode notifying: nil. ^ newref! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'initializing' stamp: 'apl 11/2/2006 13:12'! initializeExpressPrimitiveDictionaryIfNeeded "self initializeExpressPrimitiveDictionaryIfNeeded" | candidats | (candidats := self allSchemaInstanceReferencesNamed: self expressPrimitiveDictionaryName) size > 1 ifTrue: [self error: 'Several meta schemas ??']. candidats isEmpty ifTrue: [^ self initializeExpressPrimitiveDictionary] ifFalse: [^ candidats first]! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'initializing' stamp: 'AlainPlantec 7/14/2011 18:00'! initializePharoPrimitiveDictionary "self initializePharoPrimitiveDictionary" | newref | self halt. newref := self schemaInstanceNamed: self pharoPrimitiveDictionaryName. TamManager platypusMetaDefaultTaxon insertReference: newref. newref accept: self pharoPrimitiveSchemasCode notifying: nil. newref checks. ^ newref ! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'initializing' stamp: 'AlainPlantec 7/14/2011 17:53'! initializePharoPrimitiveDictionaryIfNeeded "self initializePharoPrimitiveDictionaryIfNeeded" | candidats | (candidats := self allSchemaInstanceReferencesNamed: self pharoPrimitiveDictionaryName) size > 1 ifTrue: [self error: 'Several meta schemas ??']. candidats isEmpty ifTrue: [^ self initializePharoPrimitiveDictionary] ifFalse: [^ candidats first] ! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 6/23/2005 12:28'! lookUpExpressPrimitiveDictionary ^ self allInstances copy detect: [:epd | epd isExpressPrimitiveDictionary] ifNone: []! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 17:56'! lookUpPharoPrimitiveDictionary ^ self allInstances copy detect: [:epd | epd isPharoPrimitiveDictionary] ifNone: []! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 7/21/2004 10:52'! lookUpPrimitiveIdentifierBN: anIdent | | ^ self expressPrimitiveDictionary lookUpIdentifierBN: anIdent ! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 3/17/2006 23:01'! lookUpPrimitiveNamedTypeBN: anIdent ^ (self expressPrimitiveDictionary lookUpNamedTypeBN: anIdent) ! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 16:58'! pharoPrimitiveDictionaryName ^ 'Platypus_Pharo_primitives'.! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 17:59'! pharoPrimitiveSchemasCode "self pharoPrimitiveSchemasCode" | res outCat nameClassifier outN clsName clsSupName usedCat usedOutCat addedCat classBlackList | res := WriteStream on: String new. classBlackList := self classBlackList. nameClassifier := PlatypusExpressTokenClassifier new. (SystemOrganization categories asSet difference: self systemCategoryBlackList) do: [:cat | usedCat := Set with: (SystemOrganization categoryOfElement: #Object). (SystemOrganization superclassOrder: cat) do: [:cls | cls superclass ifNotNil: [(addedCat := SystemOrganization categoryOfElement: cls superclass name asSymbol) ifNotNil: [usedCat add: addedCat]]]. usedCat remove: cat ifAbsent: []. outCat := cat copyReplaceAll: '-' with: '_' asTokens: false. outCat := outCat copyReplaceAll: ' ' with: '_' asTokens: false. res nextPutAll: 'SCHEMA ' , outCat , ';' , String cr. usedCat do: [:ucat | usedOutCat := ucat copyReplaceAll: '-' with: '_' asTokens: false. usedOutCat := usedOutCat copyReplaceAll: ' ' with: '_' asTokens: false. res nextPutAll: ' USE FROM ' , usedOutCat , ';'] separatedBy: [res nextPutAll: String cr]. res nextPutAll: String cr. res nextPutAll: String cr. ((SystemOrganization superclassOrder: cat) difference: classBlackList) do: [:cls | (nameClassifier tokenClassFromString: cls name ifAbsent: []) ifNil: [clsName := cls name] ifNotNil: [clsName := cls name , '_']. (nameClassifier tokenClassFromString: cls superclass name ifAbsent: []) ifNil: [clsSupName := cls superclass name] ifNotNil: [clsSupName := cls superclass name , '_']. res nextPutAll: ' ENTITY ' , clsName. cls superclass ifNotNil: [res nextPutAll: ' subtype of (' , clsSupName , ')']. res nextPutAll: ';' , String cr. cls instVarNames do: [:n | (nameClassifier tokenClassFromString: n ifAbsent: []) ifNil: [outN := n] ifNotNil: [outN := n , '_']. res nextPutAll: ' ' , outN , ' : Object;' , String cr]. res nextPutAll: ' END_ENTITY;' , String cr , String cr]. res nextPutAll: 'END_SCHEMA; -- ' , outCat , String cr , String cr]. ^ res contents! ! !PlatypusInternalPrimitiveSchemaInstanceReference class methodsFor: 'private accessing' stamp: 'AlainPlantec 7/14/2011 16:57'! systemCategoryBlackList "self systemCategoryBlackList" | blackList | blackList := Set with: #''. SystemOrganization categories do: [:cat | ((SystemOrganization listAtCategoryNamed: cat) select: [:cls | ((PlatypusPharoSmalltalk at: cls) class includesSelector: #translatedFromISO10303P11) not]) isEmpty ifTrue: [blackList add: cat]]. ^ blackList! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'copying' stamp: 'apl 7/7/2004 19:40'! copy ^ self error: 'can''t copy a primitive dictionary reference'! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:53'! expressParserClassName ^ #PlatypusExpressPrimitiveParser! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 3/14/2006 09:22'! isExpressPrimitiveDictionary ^ self isReleased not and: [self name = self class expressPrimitiveDictionaryName]! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 7/14/2011 17:55'! isPharoPrimitiveDictionary ^ self isReleased not and: [self name = self class pharoPrimitiveDictionaryName]! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/14/2007 16:17'! namesBuilder ^ PlatypusNamesBuilder meta! ! !PlatypusInternalPrimitiveSchemaInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 17:58'! translaterForPharo ^ PlatypusExpressMetaStructure2PharoTranslater namesBuilder: self namesBuilder! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'AlainPlantec 12/6/2013 15:28'! addReferenceFromFilenamed: aFilename intoOwner: aReference | initial strm | initial := aFilename asFileReference basenameWithoutExtension. (UIManager default request: 'Model name: ' initialAnswer: initial) ifNotEmpty: [:key | (strm := StandardFileStream readOnlyFileNamed: aFilename) ifNotNil: [[self addReferenceFromStream: strm intoOwner: aReference modelName: key] ensure: [strm close]]] ! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'AlainPlantec 5/23/2012 14:07'! addReferenceFromStream: aStream intoOwner: aReference modelName: anIdent | fileContents parsingResult codeHolder window newSchi | fileContents := aStream contents. parsingResult := PlatypusExpressParser parse: fileContents owner: self schemaInstanceClass new onError: [:aString :position | codeHolder := TamStringHolder new. codeHolder contents: fileContents. window := codeHolder embeddedInMorphicWindowLabeled: anIdent , ' parse error'. codeHolder textMorph selectFrom: position to: position - 1. codeHolder textMorph replaceSelectionWith: aString , '->'. codeHolder textMorph selectFrom: position to: position + aString size + 1. window openInWorld. ^ nil]. (newSchi := self owner: aReference schemaInstanceNamed: anIdent) replaceTokenListWithParserResult: parsingResult. newSchi verifySilently. newSchi treeHasChanged. ! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'apl 2/19/2006 22:14'! addReferenceMenuItemToMenu: aMenu owner: anotherReference | menuAddReference | (menuAddReference := self subMenuLabelSubMenu: aMenu) add: 'from scratch' subMenu: nil target: self selector: #menuAddReferenceIntoOwner: argumentList: {anotherReference}. menuAddReference add: 'from file ...' subMenu: nil target: self selector: #menuAddReferenceFromFileIntoOwner: argumentList: {anotherReference}! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'apl 3/2/2007 11:56'! addReferenceToFromFileListTaxonFromFilenamed: aFilename self addReferenceFromFilenamed: aFilename intoOwner: TamManager fromFileListTaxonomy! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 3/15/2006 19:08'! allExpressTranslaters ^ PlatypusSchemaInstanceReference allSubInstances select: [:d | d isReleased not and: [d canBeExpressTranslater]]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 11/2/2006 13:03'! allSchemaInstanceReferencesNamed: aName ^ self allSchemaInstancesReferences select: [:r | r name asUppercase = aName asUppercase]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 1/26/2007 09:56'! allSchemaInstancesReferences ^ PlatypusSchemaInstanceReference allSubInstances select: [:d | d isReleased not and: [d schemaInstance notNil]]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/26/2006 19:10'! allSchemaReferences ^ self allSchemaInstancesReferences inject: OrderedCollection new into: [:all :schir | all addAll: schir internalSchemaReferences; yourself]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 10:28'! allSchemaReferencesNamed: aName ^ self allSchemaReferences select: [:r | r name asUppercase = aName asUppercase]! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'apl 5/11/2004 17:24'! canBeCreatedInteractively ^ true! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 10:40'! chooseExpressTranslaterForClient: aClient selectingBlock: aBlock | aghl | Cursor normal showWhile: [aghl := TamGenericHierarchicalList fromRootListItems: (self allExpressTranslaters collect: [:n | TamGenericHierarchicalListItem linked: n]) title: 'EXPRESS Translaters' client: aClient. aghl doDeeply: [:el | el selectingBlock: [:e | aBlock value: aghl value: e linked]]. aghl doDeeply: [:el | el unSelectingBlock: [:e | ]]. aghl openModal]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 10:44'! chooseSchemaForClient: aClient selectingBlock: aBlock candidats: aListOfSchemaRef ^ self chooseSchemaForClient: aClient selectingBlock: aBlock candidats: aListOfSchemaRef title: 'EXPRESS schemata'! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 11:45'! chooseSchemaForClient: aClient selectingBlock: aBlock candidats: aListOfSchemaRef title: aTitle | aghl flatten | Cursor normal showWhile: [flatten := aListOfSchemaRef collect: [:schref | Array with: schref owner with: schref]. aghl := TamGenericHierarchicalList fromFlatCollection: flatten title: aTitle client: aClient. aghl doDeeply: [:el | el selectingBlock: [:e | aBlock value: aghl value: e linked]]. aghl doDeeply: [:el | el unSelectingBlock: [:e | ]]. aghl openModalAndExpand]! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 10:40'! chooseSchemaInstanceForClient: aClient selectingBlock: aBlock | aghl | Cursor normal showWhile: [aghl := TamGenericHierarchicalList fromRootListItems: (self allSchemaInstancesReferences collect: [:n | TamGenericHierarchicalListItem linked: n]) title: 'EXPRESS models' client: aClient. aghl doDeeply: [:el | el selectingBlock: [:e | aBlock value: aghl value: e linked]]. aghl doDeeply: [:el | el unSelectingBlock: [:e | ]]. aghl openModal]! ! !PlatypusSchemaInstanceReference class methodsFor: 'file list services' stamp: 'apl 3/2/2007 11:55'! fileReaderServicesForFile: fullName suffix: suffix ^ suffix = 'exp' ifTrue: [Array with: self serviceNewPlatypusModelFromFile] ifFalse: [#()]! ! !PlatypusSchemaInstanceReference class methodsFor: 'class initialization' stamp: 'apl 3/1/2007 20:20'! initialize "register the receiver in the global registries" self environment at: #FileList ifPresent: [:cl | cl registerFileReader: self]! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 11/2/2006 12:46'! initializePlatypusMetaSchemataIfNeeded PlatypusInternalMetaSchemaInstanceReference initializeExpressMetaDictionaryIfNeeded. PlatypusInternalPrimitiveSchemaInstanceReference initializeExpressPrimitiveDictionaryIfNeeded! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'AlainPlantec 5/2/2012 14:19'! interactivelyResolvedSchemaSatisfying: aBlock message: aMessage | chosen candidats | candidats := self selectSchemaReferences: aBlock. candidats isEmpty ifTrue: [^ nil]. candidats size = 1 ifTrue: [^ candidats first]. self chooseSchemaForClient: nil selectingBlock: [:l :e | chosen := e linked. l close] candidats: candidats title: aMessage. ^ chosen! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'AlainPlantec 12/6/2013 15:25'! menuAddReferenceFromFileIntoOwner: aReference | result | result := Tamaris chooseFilePathMatching: #('*.exp') label: 'Choose file to read' translated. result ifNotNil: [ result asFileReference exists ifFalse: [ ^ UIManager default inform: ' ' , result , ' not found ' ]. self addReferenceFromFilenamed: result intoOwner: aReference ]! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'AlainPlantec 5/4/2012 11:13'! menuAddReferenceIntoOwner: aReference (UIManager default request: 'Model name' initialAnswer: '') ifNotNil: [:key | self owner: aReference schemaInstanceNamed: key ] ! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 3/14/2006 08:59'! owner: aReference schemaInstance: aSchemaInstance | newRef | newRef := self schemaInstance: aSchemaInstance. aReference insertReference: newRef. ^ newRef! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 3/14/2006 08:59'! owner: aReference schemaInstanceNamed: key | newRef | newRef := self schemaInstanceNamed: key. aReference insertReference: newRef. ^ newRef! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 3/14/2006 08:37'! schemaInstance: aSchemaInstance ^ self new schemaInstance: aSchemaInstance! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 3/15/2006 10:59'! schemaInstanceClass ^ PltSchemaInstance! ! !PlatypusSchemaInstanceReference class methodsFor: 'instance creation' stamp: 'apl 3/26/2007 17:40'! schemaInstanceNamed: aString | schemaInstance | schemaInstance := self schemaInstanceClass new. schemaInstance setName: aString. ^ self schemaInstance: schemaInstance! ! !PlatypusSchemaInstanceReference class methodsFor: 'scripting' stamp: 'apl 3/12/2007 11:52'! schemaInstanceReferenceNamed: anIdent acceptFromFileNamed: aFileName | candidats schi str | candidats := PlatypusSchemaInstanceReference allSchemaInstanceReferencesNamed: anIdent. candidats size ~= 1 ifTrue: [candidats size > 1 ifTrue: [self inform: 'More than one schema instance named <<' , anIdent , '>> are present. Sorry'. ^ nil] ifFalse: [self inform: 'No schema instance named <<' , anIdent , '>> is present. Sorry'. ^ nil]]. schi := candidats anyOne. [str := StandardFileStream readOnlyFileNamed: aFileName] on: FileStreamException do: [self inform: 'No file named <<' , aFileName , '>>. Sorry'. ^ nil]. [schi accept: (PlatypusStepTokenPrettyPrinter prettyPrint: str contents) notifying: nil] ensure: [str close]. schi checksAll. ^ schi! ! !PlatypusSchemaInstanceReference class methodsFor: 'accessing' stamp: 'apl 10/27/2006 10:29'! selectSchemaReferences: aBlock ^ self allSchemaReferences select: aBlock! ! !PlatypusSchemaInstanceReference class methodsFor: 'file list services' stamp: 'apl 3/2/2007 12:14'! serviceNewPlatypusModelFromFile ^ (SimpleServiceEntry provider: self label: 'import into Platypus' selector: #addReferenceToFromFileListTaxonFromFilenamed: description: 'import the express model into Platypus' buttonLabel: 'import into Platypus') argumentGetter: [:fileList | fileList fullName]! ! !PlatypusSchemaInstanceReference class methodsFor: 'menus' stamp: 'apl 3/14/2006 14:20'! subMenuLabel ^ 'an Express model '! ! !PlatypusSchemaInstanceReference methodsFor: 'drag and drop' stamp: 'apl 11/2/2006 09:22'! acceptDroppingMorph: aTransfertMorph copy: shouldCopy (aTransfertMorph respondsTo: #passenger) ifFalse: [^ false]. ((aTransfertMorph passenger isKindOf: PlatypusSchemaReference) or: [aTransfertMorph passenger isKindOf: PlatypusSchemaInstanceReference]) ifFalse: [^ false]. ^ self insertLinkableListItemFromTransfertMorph: aTransfertMorph copy: shouldCopy! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:39'! accessibleSchemata ^self schemaInstance schemata! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 10:41'! addModelContentsReference: newRef self addModelContentsReferenceSilently: newRef. TamManager changed: self. ^ newRef! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 10:41'! addModelContentsReferenceSilently: newRef | modelContents | modelContents := newRef modelContents. self schemaInstance addModelContents: modelContents. newRef owner: self. modelContents tamarisItemRef: newRef. self modelContentsReferences add: newRef. ^ newRef! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/1/2006 15:43'! addingStartNode ^ nil! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 5/19/2012 19:06'! allUsers | allUsers | allUsers := self usersInto: Set new. allUsers remove: self ifAbsent: []. ^ allUsers! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/13/2012 08:20'! canBeExpressTranslater ^ self platypusInternalMetaSchemaInstanceReference metaData schemata anySatisfy: [:sch | self metaData externalSchemata anySatisfy: [:mySch| mySch = sch ]]! ! !PlatypusSchemaInstanceReference methodsFor: 'data checking' stamp: 'apl 7/22/2004 04:02'! checksMetaData ^ self schemaInstance checksMetaData! ! !PlatypusSchemaInstanceReference methodsFor: 'data checking' stamp: 'apl 7/22/2004 04:03'! checksMetaDataAndExplore (self checksMetaData) explore! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 4/8/2006 10:36'! children | schemata superChildren | ((superChildren := super children) anySatisfy: [:ref | ref isKindOf: PlatypusSchemaReference]) ifFalse: [ schemata := self subReferences select: [:sr | sr isKindOf: PlatypusSchemaReference]] ifTrue: [schemata := OrderedCollection new]. ^ schemata , superChildren , (self modelContentsReferences ifNil: [#()])! ! !PlatypusSchemaInstanceReference methodsFor: 'code accessing' stamp: 'apl 4/6/2006 19:42'! codeStreamClassFor: aTokenList from: aStartNode to: aSopNode ^ super codeStreamClassFor: aTokenList from: aStartNode to: aSopNode! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 12/6/2012 17:20'! codeUpdated self modelContentsReferences do: [:mcr | mcr reinitializeLabelSilently. mcr removeSubReferencesSilently]. "self allUsers do: [:u | u codeUpdated]" ! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/21/2012 13:02'! codeUpdatedOn: aDate self schemaInstance changeDate: aDate asString. self codeUpdated. ! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/14/2012 23:21'! containsOrHasALinkTo: aSchemaDefinition (self subReferences anySatisfy: [:sr | sr metaData = aSchemaDefinition or: [sr isLinkTo: aSchemaDefinition]]) ifTrue: [ ^ true ]. ^ false! ! !PlatypusSchemaInstanceReference methodsFor: 'copying' stamp: 'AlainPlantec 5/19/2012 19:31'! copy | copy codeText | copy := super copy. self isReleased ifFalse: [copy := self class schemaInstanceNamed: self schemaInstance name. codeText := self tokenList writeOn: '' writeStream. copy tokenList: (PlatypusExpressScanner on: codeText readStream) buildTokenList. copy subReferences: ((self subReferences select: [:sr | sr isLink]) collect: [:sr | sr copy]). copy subReferences do: [:sr | sr isLink ifTrue: [sr owner: copy. copy schemaInstance schemata add: sr linked]]. copy accept: self codeText notifying: nil. copy modelContentsReferences: OrderedCollection new. copy schemaInstance resolves. self modelContentsReferences do: [:m | m copyInside: copy]]. ^ copy! ! !PlatypusSchemaInstanceReference methodsFor: 'initialize/release' stamp: 'apl 1/25/2007 15:41'! destroy self tokenList ifNotNil: [self tokenList destroy]. tokenList := nil. schemaInstance := nil. modelContentsReferences ifNotNil: [modelContentsReferences do: [:mcr | mcr destroy]. modelContentsReferences := nil]. super destroy! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'apl 4/3/2006 13:35'! doInternalChecking super doInternalChecking. self assert: modelContentsReferences notNil. self knownAsInvalid ifFalse: [self subReferences do: [:sr | self assert: (self metaData schemataLinkedMetaData anySatisfy: [:lmd | lmd = sr metaData]). sr doInternalChecking]. self metaData schemataLinkedMetaData do: [:lmd | self assert: (self subReferences anySatisfy: [:sr | lmd = sr metaData])]]. modelContentsReferences do: [:mcr | self assert: mcr metaData owner = self metaData]. modelContentsReferences do: [:mcr | self assert: mcr owner = self. mcr doInternalChecking]! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 10:38'! elementTag ^ #namespace! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:23'! expressParserClassName ^ #PlatypusExpressParser! ! !PlatypusSchemaInstanceReference methodsFor: 'code accessing' stamp: 'apl 5/28/2004 11:09'! fullCodeString | stream | stream := String new writeStream. self subReferences do: [:ref | ref linked codeTextWithStream: stream]. ^ stream contents! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/20/2012 10:31'! haveMetaSchemata ^ self metaData notNil and: [self metaData haveMetaSchemata]! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 9/20/2007 13:33'! icon ^ self usePlatypusPrimitiveSchema ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/package_yellow'] ifFalse: [self haveMetaSchemata ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/package_mapping'] ifFalse: [TamIcons mimeIcon: '10x10/mimetypes/package_blue']]! ! !PlatypusSchemaInstanceReference methodsFor: 'initialize/release' stamp: 'apl 4/8/2006 10:42'! initialize tokenList := PlatypusTokenList new. modelContentsReferences := OrderedCollection new. self showSubLists: #always. super initialize! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/17/2012 21:36'! insertLinkReferenceFrom: aReference | link linkRef | (aReference isKindOf: PlatypusExpressReference) ifFalse: [^ false]. aReference isSchemaInstanceReference ifTrue: [ aReference internalSchemaReferences do: [:sr | self insertLinkReferenceFrom: sr ]] ifFalse: [ aReference isSchemaReference ifTrue: [ (self containsOrHasALinkTo: aReference metaData) ifTrue: [ ^ false ]. self metaData insertElement: (link := PlatypusSchemaWrapper linked: aReference). self subReferences add: (linkRef := PlatypusSchemaLinkReference from: link). linkRef owner: self. self treeHasChanged. ^ true]]! ! !PlatypusSchemaInstanceReference methodsFor: 'drag and drop' stamp: 'AlainPlantec 5/14/2012 22:51'! insertLinkableListItemFromTransfertMorph: aTransfertMorph copy: shouldCopy shouldCopy ifTrue: [self copyListItemHereFromTransfertMorph: aTransfertMorph] ifFalse: [self linkListItemHereFromTransfertMorph: aTransfertMorph] ! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/22/2012 08:32'! insertReference: anotherReference | parserResult code | ((anotherReference isKindOf: PlatypusExpressReference) and: [anotherReference isSchemaReference]) ifFalse: [^ super insertReference: anotherReference]. anotherReference schemaInstance == self schemaInstance ifTrue: [^ false]. code := anotherReference codeString. parserResult := anotherReference expressParserClass parse: code startingAt: anotherReference smaCCStartingState owner: self metaData onError: [:aString :position | position]. self updateWithParserResult: parserResult. self treeHasChanged. ^ true! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 10/26/2006 19:07'! internalSchemaReferences ^ self schemaReferences select: [:chld | chld metaData isLink not]! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 10/26/2006 18:55'! internalSchemata ^ self metaData internalSchemata! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/16/2012 14:22'! isChangeable ^true! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 11/14/2003 11:41'! isCopyable ^ true! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:03'! isMetaSchemaInstanceReference ^ self owner = TamManager platypusMetaDefaultTaxon! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 11/14/2003 11:42'! isMoveable ^ true! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:02'! isSchemaInstanceReference ^ true! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 5/2/2012 12:55'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph. aCharacter = $n ifTrue: [^ self menuNewSchema]. aCharacter = $m ifTrue: [^ self storeAsMetaData]. ! ! !PlatypusSchemaInstanceReference methodsFor: 'drag and drop' stamp: 'apl 7/5/2004 15:07'! linkListItemHereFromTransfertMorph: aTransfertMorph self insertLinkReferenceFrom: aTransfertMorph passenger! ! !PlatypusSchemaInstanceReference methodsFor: 'sublists handling' stamp: 'apl 4/6/2006 20:33'! linksReferences ^ self subReferencesOfKind: PlatypusSchemaLinkReference! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:39'! lookUpIdentifierBN: anIdent ^ self metaData lookUpIdentifierBN: anIdent ! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:40'! lookUpNamedTypeBN: anIdent ^ self metaData lookUpNamedTypeBN: anIdent! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 4/12/2011 12:59'! masterModelAsStepStream ^ self schemaInstance masterModelAsStepStream! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 5/22/2012 08:32'! menuCopyAs | parsingResult key newRef code | key := UIManager default request: 'internal key ' initialAnswer: self shortName. key > '' ifTrue: [newRef := self class schemaInstanceNamed: self name. code := self codeString. parsingResult := self expressParserClass parseStream: code readStream owner: self metaData. newRef updateWithParserResult: parsingResult. self owner insertReference: newRef]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 6/15/2012 12:42'! menuForceTranslaterPrefix (UIManager default request: 'class and system category prefix ?' initialAnswer: self metaData translaterClassPrefix) ifNotNil: [:prefix | self metaData schemaInstance namesBuilderPrefixedBy: prefix trimBoth] ! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 12/2/2010 18:10'! menuMetaDataToStepFile | result | result := UITheme current fileSaveIn: World title: 'Meta data file name' extensions: #('step') path: ''. result ifNotNil: [[self metaDataToStream: result] ensure: [result close]]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'apl 11/7/2003 13:10'! menuNewModelContents self newModelContents! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 5/22/2012 08:32'! menuNewSchema | key parsingResult source | (key := UIManager default request: 'Schema name?' initialAnswer: '') ifNotEmpty: [:e | source := ('schema ' , key , ';\\end_schema;') withCRs. parsingResult := self expressParserClass parse: source startingAt: self expressParserClass startingStateForSchemaEntry owner: self metaData onError: [:aString :position | position]. self updateWithParserResult: parsingResult. self treeHasChanged]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:50'! menuSetTranslaterClassPrefix (UIManager default request: 'Translated class prefix?' initialAnswer: self metaData translaterClassPrefix) ifNotNil: [:prefix | self metaData translaterClassPrefix: prefix trimBoth] ! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:50'! menuSetTranslaterRootClassName | name | (name := UIManager default request: 'Translated root class name?' initialAnswer: self metaData translaterRootClassName) ifNotEmpty: [:e | self metaData translaterRootClassName: name trimBoth]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:50'! menuSetTranslaterRootClassSystemCategory | name | (name := UIManager default request: 'Translated root class system category?' initialAnswer: self metaData translaterRootClassSystemCategory) ifNotEmpty: [:e | self metaData translaterRootClassSystemCategory: name trimBoth]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 10:50'! menuSetTranslaterSystemCategoryPrefix | prefix | (prefix := UIManager default request: 'Translated system categories prefix?' initialAnswer: self metaData translaterSystemCategoryPrefix) ifNotEmpty: [:e | self metaData translaterSystemCategoryPrefix: prefix trimBoth]! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 09:30'! metaData ^ self schemaInstance! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'MrCleaner 1/17/2011 22:21'! metaDataStream ^ self metaData metaDataStream! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'apl 3/10/2007 09:23'! metaDataToStepFile: aFileName self metaData metaDataToStepFile: aFileName! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'apl 3/10/2007 09:27'! metaDataToStream: aStream self metaData metaDataToStream: aStream! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 11/7/2003 12:14'! modelContentsReferences ^ modelContentsReferences! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 11/14/2003 11:08'! modelContentsReferences: aCollection modelContentsReferences := aCollection! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'apl 5/12/2004 11:23'! moveDownReference: aReference ^ aReference moveDown! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'apl 7/5/2004 16:53'! moveDownSchemaReference: aReference | index | index := self subReferences indexOf: aReference. index < self subReferences size ifTrue: [self subReferences swap: index with: index + 1. TamManager changed: self. ^ true]. ^ false! ! !PlatypusSchemaInstanceReference methodsFor: 'drag and drop' stamp: 'apl 3/12/2004 17:26'! moveListItemHereFromTransfertMorph: aTransfertMorph (self copyListItemHereFromTransfertMorph: aTransfertMorph) ifTrue: [aTransfertMorph passenger remove. ^ true]. ^ false! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'apl 5/12/2004 11:22'! moveUpReference: aReference | | ^ aReference moveUp ! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'apl 7/5/2004 16:53'! moveUpSchemaReference: aReference | index | index := self subReferences indexOf: aReference. index > 1 ifTrue: [self subReferences swap: index with: index - 1. TamManager changed: self. ^ true]. ^ false! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 08:47'! name ^ schemaInstance name! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'AlainPlantec 5/10/2012 22:11'! newModelContents | modelContents newRef | modelContents := PltModelContents new owner: self schemaInstance. newRef := PlatypusModelContentsReference new modelContents: modelContents. ^ self addModelContentsReference: newRef! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/13/2006 14:56'! platypusInternalMetaSchemaInstanceReference ^ PlatypusInternalMetaSchemaInstanceReference expressMetaDictionary! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 1/28/2011 13:08'! promote: aMetaModelSchemaInstanceReference aMetaModelSchemaInstanceReference storeAsMetaDataOf: self! ! !PlatypusSchemaInstanceReference methodsFor: 'enumerating' stamp: 'AlainPlantec 5/23/2012 22:20'! recursivelyDo: aBlock super recursivelyDo: aBlock. self modelContentsReferences do: [:mcr | mcr recursivelyDo: aBlock]! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/17/2012 21:37'! relabelWith: newName | metaData | metaData := self metaData. metaData renameWith: newName. self treeHasChanged! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 02:08'! removeAllModelContents self removeAllModelContentsOf: self modelContentsReferences ! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'apl 9/7/2006 14:40'! removeAllModelContentsOf: aListOfModelContentsRef | modelContents | aListOfModelContentsRef do: [:modelContentsRef | modelContents := modelContentsRef modelContents. modelContents ifNotNil: [modelContents removeFromOwner]. self modelContentsReferences ifNotNil: [self modelContentsReferences remove: modelContentsRef ifAbsent: []]. modelContentsRef destroy. modelContents ifNotNil: [modelContents deepDestroy]]! ! !PlatypusSchemaInstanceReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 21:30'! removeSilently self logToChangesRemoving: self oldCodeText: self codeText. super removeSilently! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/20/2012 11:01'! replaceMetaDataWith: aMetaData | keptName keptExternalLinks keptModelContentsReferences | keptModelContentsReferences := self modelContentsReferences. self modelContentsReferences: OrderedCollection new. keptName := self metaData name. keptExternalLinks := self metaData externalSchemaLinks. self metaData fastSetAssociatedModels: nil. self metaData deepDestroy. self metaData stepInitialize. self metaData name: keptName. keptModelContentsReferences do: [:ref | self addModelContentsReferenceSilently: ref]. aMetaData moveInto: self metaData. self metaData externalSchemaLinks: keptExternalLinks. self metaData tamarisItemRef: self! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/20/2007 15:50'! rootSourceHandler ^ self ! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 08:52'! schemaInstance ^ schemaInstance! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/23/2006 12:16'! schemaInstance: anObject schemaInstance := anObject. self accept: '' notifying: nil! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 09:37'! schemaInstanceReference ^ self! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 10/26/2006 19:11'! schemaReferences ^ self children select: [:chld | chld isLink not and: [chld isSchemaReference]]! ! !PlatypusSchemaInstanceReference methodsFor: 'sublists handling' stamp: 'apl 4/6/2006 20:33'! schemataReferences ^ self subReferencesOfKind: PlatypusSchemaReference! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/15/2004 12:12'! shortName | mdt | ^ (mdt := self metaData) ifNil: ['???'] ifNotNil: [mdt name] ! ! !PlatypusSchemaInstanceReference methodsFor: 'sublists handling' stamp: 'apl 4/8/2006 10:36'! showSubLists ^ super showSubLists! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'AlainPlantec 5/23/2012 21:58'! showsUsersAsToBeChecked self allUsers do: [:u | u emphasisModel: TamListItemMorphEmphasisModel boldRedStandard]! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:27'! smaCCStartingState ^ self expressParserClass startingStateForSchemaInstanceEntry! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 12/5/2013 11:36'! specificMenu: menu shifted: b | menuExpress arr | super specificMenu: menu shifted: b. menu addLine. menuExpress := MenuMorph new. arr := #(#- #('new schema (n)' #menuNewSchema) #('copy as...' #menuCopyAs) #- #('save... (s)' #menuSave) #('save as... (S)' #menuSaveAs) #- #('code pane (p)' #menuCodePane) #- #('clean all evaluation results' #menuCleanAllEvaluations ) #- #('new model contents' #menuNewModelContents) #- #('write meta-data to file' #menuMetaDataToStepFile) #('promote (m)' #storeAsMetaData) #('checks meta data' #checksMetaDataAndExplore) #- ) asOrderedCollection. self isMetaSchemaInstanceReference ifFalse: [arr addAll: #(#- #('force translater prefix' #menuForceTranslaterPrefix) #- #('set translater class prefix' #menuSetTranslaterClassPrefix) #('set translater system categories prefix' #menuSetTranslaterSystemCategoryPrefix) #('set translater root class name' #menuSetTranslaterRootClassName) #('set translater root class system category' #menuSetTranslaterRootClassSystemCategory) #- )]. arr addAll: #(#('translate here (t)' #menuTranslate2Pharo) #('translate and compile (T)' #translateAndFileItIn) #- #('translate to VisualWorks' #menuTranslate2VisualWorks) ). arr do: [:item | item == #- ifTrue: [menuExpress addLine] ifFalse: [menuExpress add: item first target: self selector: item second]]. menu add: 'express ...' subMenu: menuExpress target: self selector: nil argumentList: #(). ^ menu! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/19/2003 15:49'! startNode ^ self tokenList first! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:28'! startNode: aNode ^ self! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/15/2006 15:12'! stopNode ^ self tokenList last! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 21:07'! stopNode: aNode! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 4/14/2011 09:58'! storeAsMetaData Cursor wait showWhile: [self class chooseExpressTranslaterForClient: nil selectingBlock: [:hierarList :chosen | hierarList close. chosen promote: self]]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'apl 3/12/2007 13:39'! storeAsMetaDataHere Cursor wait showWhile: [self storeAsMetaDataOf: self]! ! !PlatypusSchemaInstanceReference methodsFor: 'menus' stamp: 'AlainPlantec 5/22/2012 11:42'! storeAsMetaDataOf: aMetaModelSchemaInstanceReference | newModelContents | aMetaModelSchemaInstanceReference removeAllModelContents. newModelContents := aMetaModelSchemaInstanceReference newModelContents. newModelContents parseMetaStepStream: self metaDataStream. newModelContents resolvesMetaConceptDefinitions. newModelContents resolvesMetaMappingDefinitions. aMetaModelSchemaInstanceReference verifySilently! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/14/2006 20:54'! subElementSymbols ^ Array with: PlatypusSchemaReference lexicalElement! ! !PlatypusSchemaInstanceReference methodsFor: 'sublists handling' stamp: 'apl 4/6/2006 20:58'! subListsDefsArray "return an array of array. Each element array is for one sublist and contains first a selector for sublist accessing and second a label for the sublist" | subs | subs := OrderedCollection new. subs addAll: super subListsDefsArray. subs addAll: #(#(#linksReferences #externals) ). ^ subs! ! !PlatypusSchemaInstanceReference methodsFor: 'sublists handling' stamp: 'apl 4/6/2006 20:32'! subListsReferenceClassName ^ #PlatypusExpressSubListReference! ! !PlatypusSchemaInstanceReference methodsFor: 'code updating' stamp: 'apl 2/14/2006 22:11'! subReferencesScanStart ^ self startNode! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 08:52'! tokenList ^ tokenList! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 3/14/2006 08:51'! tokenList: aTokenList tokenList := aTokenList! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 7/14/2011 17:50'! translaterForPharo ^ PlatypusToPharoTranslater new! ! !PlatypusSchemaInstanceReference methodsFor: 'accessing' stamp: 'apl 2/15/2007 15:56'! translaterForVisualWorks ^ PlatypusToVisualWorksTranslater new! ! !PlatypusSchemaInstanceReference methodsFor: 'testing' stamp: 'apl 3/29/2006 19:23'! usePlatypusPrimitiveSchema ^ self metaData notNil and: [self metaData usePlatypusPrimitiveSchema]! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 5/21/2012 13:36'! usersInto: aSet | locals | (aSet includes: self) ifTrue: [ ^aSet ]. self schemaInstance ifNil: [ ^aSet ]. locals := PlatypusSchemaInstanceReference allSchemaInstancesReferences select: [:schir | schir schemaInstance notNil and: [(schir schemaInstance externalSchemata intersection: self schemaInstance internalSchemata) notEmpty]]. aSet addAll: locals. locals do: [:u | u usersInto: aSet]. ^ aSet! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 5/19/2012 19:28'! usesSchemataOf: otherSchemaInstanceReference ^ (self schemaInstance externalSchemataNames intersection: otherSchemaInstanceReference schemaInstance internalSchemataNames) notEmpty! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 5/23/2012 17:10'! verifyModelContentsSilently self modelContentsReferences do: [:mcr | mcr removeSubReferencesSilently. mcr verifySilently]. ! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 5/23/2012 23:11'! verifySilently | r | r := self schemaInstance verifySilently. self verifyModelContentsSilently. ^ r! ! !PlatypusSchemaInstanceReference methodsFor: 'checking' stamp: 'AlainPlantec 12/5/2013 09:48'! verifyUsedModelsBeforeChecking | invalidRefsStr | (self externalSchemaInstancesReferences select: [:ext | ext knownAsInvalid]) ifNotEmpty: [:invalidRefs | invalidRefsStr := String cr. invalidRefs do: [:ir | invalidRefsStr := invalidRefsStr , ('"' , ir name , '"' , String cr)]. self inform: 'You must check following models before.' , String cr , invalidRefsStr , String cr. ^ true]. ^ true! ! !PlatypusListItemReference class methodsFor: 'menu' stamp: 'apl 2/19/2006 21:56'! subMenuLabel ^nil! ! !PlatypusListItemReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 14:02'! canEvaluate ^ false! ! !PlatypusListItemReference methodsFor: 'testing' stamp: 'AlainPlantec 6/14/2012 00:02'! canHaveCachedEditor "if true, my editor will be cached by the browser so that next editing will reuse cached editor" ^ false! ! !PlatypusListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 12/13/2012 13:44'! cleanAllEvaluations self children do: [:c | c cleanAllEvaluations ]. self reinitializeEvaluatedContents. self treeHasChanged ! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'apl 6/23/2004 18:44'! codeText ^ self codeString! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 21:58'! emphasisModel self metaData ifNil: [^ TamListItemMorphEmphasisModel boldRedStandard]. ^ self metaData errors ifEmpty: [TamListItemMorphEmphasisModel standard] ifNotEmpty: [TamListItemMorphEmphasisModel redStandard] ! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 23:30'! errors ^ self metaData ifNil: [#()] ifNotNil: [:md | md errors]! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 4/26/2012 09:00'! expressParserClass ^ SmalltalkImage current classNamed: self expressParserClassName asSymbol! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'apl 1/31/2006 08:23'! expressParserClassName ^ self rootDictionaryReference expressParserClassName! ! !PlatypusListItemReference methodsFor: 'updating' stamp: 'apl 3/24/2006 09:24'! isInSubTreeOf: anotherReference self = anotherReference ifTrue: [^ true].(self owner isKindOf: PlatypusListItemReference) ifFalse: [^ false]. ^ self owner isInSubTreeOf: anotherReference. ! ! !PlatypusListItemReference methodsFor: 'menus' stamp: 'apl 4/5/2006 18:52'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph. aCharacter = $p ifTrue: [^ self menuCodePane]. ! ! !PlatypusListItemReference methodsFor: 'testing' stamp: 'AlainPlantec 6/2/2012 09:41'! knownAsInvalid ^ self metaData isNil or: [self metaData errors notEmpty]! ! !PlatypusListItemReference methodsFor: 'menus' stamp: 'AlainPlantec 12/13/2012 13:37'! menuCleanAllEvaluations self cleanAllEvaluations. ! ! !PlatypusListItemReference methodsFor: 'menus' stamp: 'apl 4/5/2006 18:52'! menuCodePane | codePane | codePane := self editorClass new sourceHandler: self. codePane buildMainWindow. ^ codePane openAsMorph! ! !PlatypusListItemReference methodsFor: 'enumerating' stamp: 'AlainPlantec 5/17/2012 12:51'! recursivelyDo: aBlock aBlock value: self. self subReferences do: [:sr | sr ifNotNil: [sr recursivelyDo: aBlock]]. ! ! !PlatypusListItemReference methodsFor: 'initialize/release' stamp: 'apl 6/8/2004 16:36'! reinitialize ! ! !PlatypusListItemReference methodsFor: 'updating' stamp: 'apl 6/8/2004 19:13'! reinitializeEvaluatedContents ! ! !PlatypusListItemReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 19:57'! reinitializeLabelSilently! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 21:27'! rootDictionaryReference ^ self schemaInstanceReference! ! !PlatypusListItemReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 09:42'! schemaInstanceReference ^ self owner schemaInstanceReference ! ! !PlatypusListItemReference methodsFor: 'checking' stamp: 'AlainPlantec 5/19/2012 18:45'! verify self verifySilently. self treeHasChanged ! ! !PlatypusListItemReference methodsFor: 'checking' stamp: 'AlainPlantec 5/19/2012 18:45'! verifySilently ! ! !PlatypusListItemReference methodsFor: 'checking' stamp: 'AlainPlantec 5/22/2012 10:33'! verifyUsedModelsBeforeChecking ^ self schemaInstanceReference verifyUsedModelsBeforeChecking! ! !PlatypusModelContentsReference class methodsFor: 'menus' stamp: 'apl 3/2/2007 12:05'! addPlatypusModelContentsFromFilenamed: aFilename PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | hierarList close. chosen newModelContents listLabel: aFilename; stepFileIn: aFilename]! ! !PlatypusModelContentsReference class methodsFor: 'menus' stamp: 'apl 4/8/2004 17:39'! canBeCreatedInteractively ^ false! ! !PlatypusModelContentsReference class methodsFor: 'accessing' stamp: 'apl 11/7/2003 09:47'! externalLabel ^ 'a STEP model content'! ! !PlatypusModelContentsReference class methodsFor: 'file list services' stamp: 'apl 3/2/2007 12:10'! fileReaderServicesForFile: fullName suffix: suffix ^ (suffix = 'step' or: [suffix = 'p21' or: [suffix = 'stp']]) ifTrue: [Array with: self serviceNewPlatypusModelContentsFromFile] ifFalse: [#()]! ! !PlatypusModelContentsReference class methodsFor: 'class initialization' stamp: 'apl 3/2/2007 12:01'! initialize "register the receiver in the global registries" self environment at: #FileList ifPresent: [:cl | cl registerFileReader: self]! ! !PlatypusModelContentsReference class methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 09:30'! menuAddReferenceIntoOwner: aReference | key oldDict | key := UIManager default request: 'schema instance name' initialAnswer: ''. key notEmpty ifTrue: [oldDict := aReference taxonomyRoot findDeeplySuchThat: [:r | (r isKindOf: PlatypusSchemaInstanceReference) and: [r schemaInstance name asUppercase = key asUppercase]]. oldDict ifNotNil: [oldDict menuNewModelContents]]! ! !PlatypusModelContentsReference class methodsFor: 'file list services' stamp: 'apl 3/2/2007 12:13'! serviceNewPlatypusModelContentsFromFile ^ (SimpleServiceEntry provider: self label: 'import into Platypus' selector: #addPlatypusModelContentsFromFilenamed: description: 'import the step data into a Platypus model contents' buttonLabel: 'import into Platypus') argumentGetter: [:fileList | fileList fullName]! ! !PlatypusModelContentsReference class methodsFor: 'menus' stamp: 'apl 3/17/2004 17:25'! subMenuLabel ^ 'STEP/EXPRESS'! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 6/13/2012 23:57'! accept: input notifying: aRequestor | stream | stream := ReadStream on: input. self parseStepStream: stream onError: [:d :l | aRequestor ifNil: [self notify: d at: l] ifNotNil: [aRequestor notify: d at: l]. ^ false]. ^ true ! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 16:39'! accessibleSchemata ^self modelContents schemata! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/14/2012 23:56'! at: position ^self dataInstances at: position! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 12/22/2006 15:50'! buildDataInstancesIndexes ^ self modelContents buildDataInstancesIndexes! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/12/2012 13:38'! codeText: p21Syntax | stream | Cursor wait showWhile: [ ^ String streamContents: [:strm | PlatypusModelContentsStepWriter new stream: strm modelContents: self modelContents values: self modelContents sortedDataInstances p21Syntax: p21Syntax]]. ! ! !PlatypusModelContentsReference methodsFor: 'copying' stamp: 'AlainPlantec 12/6/2013 00:44'! copyInside: aSchemaInstanceReference | cpy refCpy tmpFileName tmpStream | cpy := PltModelContents new owner: aSchemaInstanceReference schemaInstance. refCpy := self class new modelContents: cpy. aSchemaInstanceReference addModelContentsReference: refCpy. tmpFileName := 'platypus_tmp.step' asFileReference asAbsolute. tmpFileName ensureDeleted. [tmpStream := tmpFileName writeStream. self stepWriteIntoStream: tmpStream] ensure: [tmpStream close]. refCpy stepFileIn: tmpFileName pathString. tmpFileName ensureDeleted. refCpy checks. ^ refCpy! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/21/2012 13:16'! dataInstances self modelContents dataInstances ifNil: [^ dataInstances := OrderedCollection new ]. ^ dataInstances ifNil: [dataInstances := self modelContents sortedDataInstances asOrderedCollection]! ! !PlatypusModelContentsReference methodsFor: 'initialize/release' stamp: 'AlainPlantec 5/14/2012 23:44'! destroy modelContents := nil. dataInstances := nil. super destroy! ! !PlatypusModelContentsReference methodsFor: 'enumerating' stamp: 'AlainPlantec 5/17/2012 00:49'! do: aBlock self subReferences ifNil: [^self ]. self subReferences do: aBlock! ! !PlatypusModelContentsReference methodsFor: 'checking' stamp: 'apl 3/28/2006 21:39'! doInternalChecking super doInternalChecking. self assert: self metaData owner = self owner metaData! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 12:59'! elementTag ^ #dataEntities! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/11/2012 22:43'! folder ^ folder! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 4/4/2006 13:18'! haveMetaConceptDefinitions ^ self modelContents notNil and: [self modelContents haveMetaConceptDefinitions]! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 11/13/2003 17:04'! headerInstances ^ self modelContents headerInstances! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 11/13/2003 17:01'! headerInstances: aCollection self modelContents headerInstances: aCollection! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 5/8/2005 08:29'! icon ^TamIcons mimeIcon: '10x10/mimetypes/blue_file'! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'AlainPlantec 5/15/2012 19:24'! isChangeable ^ true! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 11/14/2003 11:43'! isCopyable ^ false! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 4/4/2006 14:03'! isModelContentsReference ^ true! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 3/21/2006 15:57'! isPltValue ^ false! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 3/31/2006 13:13'! isRemoveable ^ true! ! !PlatypusModelContentsReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:12'! isSchemaReference ^ false! ! !PlatypusModelContentsReference methodsFor: 'menus' stamp: 'AlainPlantec 5/8/2012 12:40'! menuDoNotRecordComputedInstances self recordComputedInstances: false! ! !PlatypusModelContentsReference methodsFor: 'menus' stamp: 'AlainPlantec 4/26/2012 11:14'! menuParseStepFile | result | (result := UIManager default chooseFullFileNameMatching: nil label: 'Choose a STEP file') ifNotNil: [self stepFileIn: result. self listLabel: result name. TamManager changed: self. ]. ^ false! ! !PlatypusModelContentsReference methodsFor: 'menus' stamp: 'AlainPlantec 5/8/2012 12:40'! menuRecordComputedInstances self recordComputedInstances: true! ! !PlatypusModelContentsReference methodsFor: 'menus' stamp: 'AlainPlantec 1/28/2011 14:09'! menuStepWrite | stream result | stream := UITheme current fileSaveIn: World title: 'File name' extensions: #('step') path: ''. stream ifNotNil: [ [result := self stepWriteIntoStream: stream useP21Syntax: useP21Syntax] ensure: [stream close]. self listLabel: stream name. TamManager changed: self]. ^ result! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 7/22/2004 12:43'! metaData ^ self modelContents! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 11/7/2003 09:55'! modelContents ^ modelContents! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 11/7/2003 09:56'! modelContents: aModelContents modelContents := aModelContents! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 6/3/2004 13:10'! modelContentsReference ^ self! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 23:57'! newLabelCounter ^ newLabelCounter ifNil: [newLabelCounter := self modelContents dataInstances size]! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/13/2012 00:01'! newPersistentLabel newLabelCounter := self modelContents newPersistentLabelFrom: self newLabelCounter + 1. ^ newLabelCounter asString! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'apl 5/29/2004 10:26'! notify: error at: location in: stream | window model | window := self newEditor. model := window model. model sourceHandlerSilently: self contents: stream contents. model notify: error at: location. window openInWorld! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 1/21/2011 12:53'! parseMetaStepStream: aStream self parseMetaStepStream: aStream onError: [:d :l | self notify: d at: l in: aStream. ^ false]. ^ true! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'apl 4/4/2006 14:07'! parseMetaStepStream: aStream onError: aBlock self parseStepStream: aStream onError: aBlock. ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/11/2012 14:36'! parseStepStream: aStream ^ self parseStepStream: aStream onError: [:d :l | self notify: d at: l in: aStream]. ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 6/15/2012 13:54'! parseStepStream: aStream onError: aBlock | instancier rder f | Cursor read showWhile: [ | result | f := StepGenericRepository new. (aStream contents beginsWith: 'ISO-10303-21') ifTrue: [rder := #parseStream:onError:] ifFalse: [rder := #parseDataStream:onError:]. f perform: rder with: aStream with: [:d :l | aBlock value: d value: l. ^ nil]. self modelContents removeAll. instancier := PlatypusRepositoryBuilder folder: f modelContents: self modelContents. instancier doFolder. dataInstances := nil. self buildDataInstancesIndexes. self modelContents changeDate: DateAndTime now asString. self buildSubReferencesSilently. result := self verifySilently. TamManager changed: self. ^result]! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/10/2012 22:48'! parserStartingState ^ StepParser startingStateForDataEntities! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 14:03'! recordComputedInstances ^ self modelContents recordComputedInstances ! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/8/2012 14:03'! recordComputedInstances: aBoolean self modelContents recordComputedInstances: aBoolean! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'apl 2/23/2005 21:59'! relabelWith: newName | fileName | fileName := self modelContents headerInstances ifNotNil: [self modelContents headerInstances detect: [:hi | hi isPltFileName] ifNone: []. fileName ifNil: [fileName := PltFileName new. self modelContents headerInstances add: fileName. fileName owningModel: self modelContents]. fileName name: newName. self updateModel]. super relabelWith: newName! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 03:10'! removeAt: position | inst | inst := (self subReferences at: position) ifNotNil: [:r | r value ]. inst ifNotNil: [self modelContents remove: inst]. dataInstances remove: inst. self buildSubReferencesSilently. self reinitializeLabelSilently. self updateEditor. ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 6/7/2012 10:16'! removeComputedInstances self modelContents removeComputedInstances. self reinitializeEditor. self treeHasChanged ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'apl 3/22/2006 14:40'! removeSilently self owner removeAllModelContentsOf: (Array with: self). ^ super removeSilently! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 13:54'! removeSubReferencesSilently dataInstances := nil. super removeSubReferencesSilently! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/16/2012 12:00'! replace: old with: new dataInstances := nil. self modelContents replace: old with: new. ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/22/2012 09:13'! replaceTokenListWithParserResult: result result ifNotNil: [ self modelContents headerInstances: result first. self modelContents dataInstances: result second. self modelContents buildDataInstancesIndexes. self checks. self buildSubReferencesSilently. self treeHasChanged. ^ true]. ^ false! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/16/2012 22:18'! resolvesMetaConceptDefinitions modelContents resolvesMetaConceptDefinitions. self reinitializeLabelSilently. self buildSubReferencesSilently! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 02:22'! resolvesMetaMappingDefinitions modelContents resolvesMetaMappingRules. self buildDataInstancesIndexes. self reinitializeLabelSilently. self buildSubReferencesSilently. TamManager changed: self! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/12/2012 18:37'! schemaInstance ^ self modelContents schemaInstance! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:08'! shortName ^ listLabel ifNil: [self owner listLabel , ''' model']! ! !PlatypusModelContentsReference methodsFor: 'menus' stamp: 'AlainPlantec 5/8/2012 17:36'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" | myMenu | super specificMenu: menu shifted: b. menu addLine. myMenu := MenuMorph new. #(#- #('parse a step file' #menuParseStepFile) #- #('write to a step file' #menuStepWrite) #- #('remove computed instances' #removeComputedInstances)) do: [:item | item == #- ifTrue: [myMenu addLine] ifFalse: [myMenu add: item first target: self selector: item second]]. (self recordComputedInstances ifTrue: [#(#('do not record computed instances' #menuDoNotRecordComputedInstances) ) ] ifFalse: [#(#('record computed instances' #menuRecordComputedInstances) ) ]) do: [:item | item == #- ifTrue: [myMenu addLine] ifFalse: [myMenu add: item first target: self selector: item second]]. menu add: 'step ...' subMenu: myMenu target: self selector: nil argumentList: #(). ^ menu ! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'apl 4/11/2006 09:50'! stepFileIn: aFileName | stream result | (stream := (Filename named: aFileName) readStream) ifNotNil: [[result := self parseStepStream: stream] ensure: [stream close]. ^ result]! ! !PlatypusModelContentsReference methodsFor: 'step file writing' stamp: 'apl 3/12/2005 11:39'! stepWriteIntoStream: aStream self stepWriteIntoStream: aStream useP21Syntax: true! ! !PlatypusModelContentsReference methodsFor: 'step file writing' stamp: 'apl 3/12/2005 11:37'! stepWriteIntoStream: aStream useP21Syntax: aBoolean self modelContents stepWriteIntoStream: aStream useP21Syntax: aBoolean! ! !PlatypusModelContentsReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 23:42'! updateEditor ^ self announce: (TamForceEditorUpdating new sourceHandler: self modelContentsReference).! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:48'! useP21Syntax ^ useP21Syntax ifNil: [useP21Syntax := true]! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:49'! useP21Syntax: aBoolean useP21Syntax := aBoolean ! ! !PlatypusModelContentsReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 13:39'! value ^ self modelContents! ! !PlatypusModelContentsReference methodsFor: 'checking' stamp: 'AlainPlantec 6/12/2012 10:45'! verifySilently ^ super verifySilently! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 13:04'! elementTag ^ #dataEntity! ! !PlatypusStepInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 22:26'! hasContents self value ifNil: [^ false]. self value persistentLabel ifNotEmpty: [(self modelContents includesInstance: self value) ifFalse: [^false ]]. ^ super hasContents! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 13:15'! icon self value persistentLabel ifNotEmpty: [ (self modelContents includesInstance: self value) ifFalse: [ ^ TamIcons mimeIcon: '10x10/mimetypes/red_question']]. ^ self value isComputed ifTrue: [TamIcons mimeIcon: '10x10/mimetypes/gray_sphere'] ifFalse: [TamIcons mimeIcon: '10x10/mimetypes/green_sphere']! ! !PlatypusStepInstanceReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 13:20'! isChangeable ^ self modelContents notNil and: [self modelContents includesInstance: self value]! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/19/2012 12:28'! modelContents (self owner isKindOf: [PlatypusStepReference]) ifFalse: [^ self value ifNotNil: [:v | v owningModel ] ]. ^ super modelContents! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 14:43'! parserStartingState ^ StepParser startingStateForDataEntity! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:17'! schemaInstance ^ self value schemaInstance! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 14:17'! shortName ^ String streamContents: [:strm | | lab | [lab := self value persistentLabel] on: Error do: []. lab ifNotNil: [ lab ifNotEmpty: [ (self modelContents includesInstance: self value) ifFalse: [strm nextPutAll: '** Changed or removed** ']]]. strm nextPutAll: (self codeText asString contractTo: 100)]! ! !PlatypusStepInstanceReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 13:23'! subReferences self value persistentLabel ifNotEmpty: [ (self modelContents includesInstance: self value) ifFalse: [ self removeSubReferencesSilently]]. ^ super subReferences! ! !PlatypusStepRecordReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 13:04'! elementTag ^ #simpleRecord! ! !PlatypusStepRecordReference methodsFor: 'testing' stamp: 'AlainPlantec 5/15/2012 22:16'! isChangeable ^ true! ! !PlatypusStepRecordReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 15:19'! parserStartingState ^ StepParser startingStateForSimpleRecordEntry! ! !PlatypusStepRecordReference methodsFor: 'accessing' stamp: 'apl 4/6/2006 17:13'! shortName ^ self codeText asString contractTo: 100! ! !PlatypusStepRecordReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 13:41'! value ^ self owner at: pos! ! !PlatypusStepReference class methodsFor: 'instance creation' stamp: 'apl 6/7/2004 22:27'! owner: anotherRef position: anInteger ^ self owner: anotherRef position: anInteger attributeOrRule: nil! ! !PlatypusStepReference class methodsFor: 'instance creation' stamp: 'apl 6/7/2004 22:29'! owner: anotherRef position: aPosition attributeOrRule: anAttribute ^ self new owner: anotherRef position: aPosition attributeOrRule: anAttribute! ! !PlatypusStepReference class methodsFor: 'instance creation' stamp: 'apl 6/25/2004 23:27'! owner: anotherRef position: aPosition value: aValue ^ self new owner: anotherRef position: aPosition value: aValue ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 6/15/2012 13:59'! accept: input notifying: aRequestor | result stream instancier folder | self isChangeable ifFalse: [^ false ]. stream := ReadStream on: input. result := StepParser parseStream: stream startingAt: self parserStartingState onError: [:aString :position | aRequestor notNil ifTrue: [aRequestor notify: aString at: position]. ^ nil]. result ifNil: [^ false]. instancier := PlatypusRepositoryBuilder new. instancier modelContents: self modelContents. folder := self modelContentsReference folder. result isPltGenericInstance ifTrue: [folder replace: (folder instanceAt: result id) with: result]. instancier folder: folder. result := instancier doSingleToken: result. self modelContents changeDate: DateAndTime now asString. result := self replaceTokenListWithParserResult: result. self verifySilently. TamManager changed: self. ^result! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 09:43'! addAllSubReferences: aListOfReference aListOfReference ifNotEmpty: [ self privateEnsureSubReferences. subReferences addAll: aListOfReference]! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 09:37'! addSubReference: aReference self privateEnsureSubReferences. subReferences add: aReference! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 22:06'! at: position | v | ^ (v := self value) ifMissing: [v] ifNotMissing: [v at: position]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 6/25/2004 16:45'! at: position put: newValue self value at: position put: newValue. ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 13:40'! attrOrRuleOrValue ^ attrOrRuleOrValue ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 6/25/2004 23:29'! attrOrRuleOrValue: anAttributeOrWhereRuleOrValue attrOrRuleOrValue := anAttributeOrWhereRuleOrValue! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 15:39'! buildSubReferencesSilently self subReferences: (self value ifNil: [#()] ifNotNil: [:v | v tamarisChildrenIntoOwner: self])! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'AlainPlantec 5/16/2012 21:02'! canEvaluate attrOrRuleOrValue ifNotNil: [ ^ attrOrRuleOrValue isPltWhereRule or: [attrOrRuleOrValue isPltDerivedAttribute or: [attrOrRuleOrValue isPltInverseAttribute]]]. ^ false ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 3/31/2006 14:24'! children ^ self subReferences ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:37'! codeText ^ self codeText: self useP21Syntax! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 12/3/2013 11:44'! codeText: p21Syntax | val | self isReleased ifTrue: [^ '']. val := self value. val ifNil: [^ 'NIL']. val isPltValue ifTrue: [ ^ String streamContents: [:strm | PlatypusModelContentsStepWriter new stream: strm modelContents: self modelContents values: (Array with: val) p21Syntax: p21Syntax]] ifFalse: [^ val prettyPrintedExpressCode]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 17:39'! editorClass ^ PlatypusInstanceEditor! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/7/2012 13:11'! elementTag self value isPltGenericInstance ifTrue: [^ #dataEntity]. ^ #parameter! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 14:00'! evaluate self canEvaluate ifFalse: [^ self ]. self knownAsInvalid ifTrue: [self inform: 'Express model must checked'] ifFalse: [Cursor wait showWhile: [| result int | int := PlatypusExpressInterpretor new. self modelContents ifNotNil: [:mc | mc recordComputedInstances ifTrue: [int modelContents: self modelContents]]. (result := int attributeOrRule: attrOrRuleOrValue instance: self owner value interpretingContext) ifNotNil: [ self addSubReference: (result tamarisStepValueReferenceClass owner: self position: self subReferences size + 1 value: result). TamManager changed: self]]]! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'apl 6/23/2004 23:32'! hasContents ^ subReferences notNil and: [subReferences notEmpty]! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 09:53'! hasSubReferences ^ subReferences notNil ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 21:17'! icon attrOrRuleOrValue ifNotNil: [ attrOrRuleOrValue isPltWhereRule ifTrue: [^ TamIcons mimeIcon: '10x10/mimetypes/where_rule']. attrOrRuleOrValue isPltExplicitAttribute ifTrue: [^ TamIcons mimeIcon: '10x10/mimetypes/explicit_attribute']. attrOrRuleOrValue isPltInverseAttribute ifTrue: [^ TamIcons mimeIcon: '10x10/mimetypes/inverse_attribute']. attrOrRuleOrValue isPltDerivedAttribute ifTrue: [^ TamIcons mimeIcon: '10x10/mimetypes/derived_attribute']]. ^ TamIcons mimeIcon: '10x10/mimetypes/step_value'! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'AlainPlantec 5/17/2012 12:53'! isChangeable (self owner isKindOf: PlatypusStepReference) ifFalse: [^false ]. attrOrRuleOrValue ifNotNil: [ ^ attrOrRuleOrValue isPltExplicitAttribute]. self value isPltGenericInstance ifTrue: [^true]. self parentsChain reverseDo: [:p | (p isKindOf: PlatypusListItemReference) ifTrue: [p isChangeable ifFalse: [^false ]] ifFalse: [^ true ]]. ^ true! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'apl 4/4/2006 14:04'! isModelContentsReference ^ false! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'apl 2/23/2005 22:22'! isPltValue ^ attrOrRuleOrValue notNil and: [attrOrRuleOrValue isPltValue]! ! !PlatypusStepReference methodsFor: 'testing' stamp: 'AlainPlantec 5/16/2012 20:44'! isRemoveable ^ attrOrRuleOrValue isNil! ! !PlatypusStepReference methodsFor: 'file in/out' stamp: 'AlainPlantec 1/28/2011 14:04'! menuStepWrite | stream fullFilename result | fullFilename := UITheme current fileSaveIn: World title: 'File name' extensions: #('step' ) path: ''. fullFilename ifNotNil: [[stream := (Filename named: fullFilename) writeStream. result := self stepWriteIntoStream: stream] ensure: [stream close]]. ^ result ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 7/22/2004 12:43'! metaData ^ self value ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:42'! modelContents ^ self modelContentsReference ifNotNil: [:mdr | mdr modelContents]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 9/7/2006 14:27'! modelContentsReference ^ self owner modelContentsReference! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/23/2012 23:28'! newEditor | editor | editor := self editorClass new. editor buildTamarisWindow. editor sourceHandler: self. editor messagesBrowser ifNotNil: [editor updateMessagesBrowser]. ^ editor mainWindow! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'apl 6/7/2004 22:27'! owner: anotherRef position: anInteger self owner: anotherRef position: anInteger attributeOrRule: nil! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/16/2012 23:07'! owner: anotherRef position: anInteger attributeOrRule: anAttributeOrARule self owner: anotherRef. self pos: anInteger. self attrOrRuleOrValue: anAttributeOrARule. ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'apl 3/31/2006 16:23'! owner: anotherRef position: anInteger value: aValue self owner: anotherRef; pos: anInteger; attrOrRuleOrValue: aValue. ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 12:06'! owningInstanceReference self value isPltGenericInstance ifTrue: [^ self]. ^ self owner ifNotNil: [ :o | o owningInstanceReference] ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/16/2012 11:57'! owningInstanceReferenceOfValue: aValue self value = aValue ifTrue: [^ self]. ^ self owner ifNotNil: [ :o | o owningInstanceReferenceOfValue: aValue]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/15/2012 14:58'! parserStartingState ^ self value isPltGenericInstance ifTrue: [StepParser startingStateForDataEntity] ifFalse: [StepParser startingStateForParameter]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 6/2/2004 12:20'! pos ^ pos! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 6/2/2004 12:20'! pos: anObject pos := anObject! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 09:36'! privateEnsureSubReferences subReferences ifNil: [subReferences := OrderedCollection new]. ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/20/2012 12:57'! reinitializeEditor self removeSubReferencesSilently. self reinitializeLabelSilently. super reinitializeEditor! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 10:13'! reinitializeLabel self reinitializeLabelSilently. TamManager changed: self! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 6/15/2012 13:40'! reinitializeLabelSilently listLabel := nil. ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 09:38'! removeAt: position | sr | subReferences ifNil: [^ self]. (self subReferences removeAt: position) destroy. position to: subReferences size do: [:p | (sr := subReferences at: p) pos: sr pos - 1]. ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/12/2012 18:56'! removeSilently pos ifNotNil: [(self owner removeAt: pos) ]. ^ super removeSilently! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/18/2012 01:13'! removeSubReferences subReferences ifNotNil: [self removeSubReferencesSilently. TamManager changed: self]! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 09:31'! removeSubReferencesSilently subReferences ifNotNil: [ subReferences do: [:instRef | instRef destroy]. subReferences := nil]! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 11:04'! replace: aValue at: aPosition with: aNewValue (self value isPltSetInstance or: [self value isPltBagInstance]) ifTrue: [self value replace: aValue with: aNewValue] ifFalse: [self value at: aPosition put: aNewValue]. self buildSubReferencesSilently ! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/23/2012 17:28'! replaceTokenListWithParserResult: result result ifNotNil: [ | inst | inst := self value. inst isPltGenericInstance ifTrue: [ [result inheritedDefinitions] on: Error do: [ ^ false ]. self modelContentsReference replace: inst with: result. self owner value isPltDerivedAttribute ifTrue: [self owner buildSubReferencesSilently]] ifFalse: [ result isPltSimpleRecord ifTrue: [[result inheritedDefinitions] on: Error do: [ ^ false ]]. self owner replace: inst at: pos with: result]. self updateAllReferences. self verifySilently. ^ true]. ^ false! ! !PlatypusStepReference methodsFor: 'tam taxonomy browser' stamp: 'AlainPlantec 6/15/2012 12:21'! selectingFrom: aTaxonomyBrowser subReferences ifNil: [self buildSubReferencesSilently]. super selectingFrom: aTaxonomyBrowser! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 03:26'! shortName attrOrRuleOrValue ifNil: [^ self codeText asString contractTo: 100]. attrOrRuleOrValue isPltWhereRule ifTrue: [ attrOrRuleOrValue label ifNotNil: [^ attrOrRuleOrValue label]. ^ 'rule #' , pos printString]. ^ (attrOrRuleOrValue isPltExplicitAttribute ifTrue: [attrOrRuleOrValue name, ': ', self codeText, ' : ', attrOrRuleOrValue annotation] ifFalse: [self codeText]) withoutCr contractTo: 100 ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 5/10/2005 13:47'! specificButtonsColumn: aTaxonomyBrowser inAlignment: aButtonsAlignment aTaxonomyBrowser editorModel addButtonsinAlignment: aButtonsAlignment. ^aButtonsAlignment! ! !PlatypusStepReference methodsFor: 'menus' stamp: 'apl 4/5/2006 18:57'! specificMenu: menu shifted: b "Set up the menu to apply to the receiver's, honoring the #shifted boolean" super specificMenu: menu shifted: b. menu add: 'code pane (p)' target: self selector: #menuCodePane. self canEvaluate ifTrue: [menu addLine. menu add: 'evaluate' target: self selector: #evaluate. menu addLine]. ^ menu! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 09:14'! subReferences ^ subReferences ifNil: [OrderedCollection new]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 09:32'! subReferences: aCollection aCollection ifNotEmpty: [subReferences := aCollection] ifEmpty: [self removeSubReferencesSilently]! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 5/17/2012 13:04'! updateAllReferences | owningIRef owningInst | owningIRef := self owningInstanceReference. owningInst := owningIRef value. self modelContentsReference recursivelyDo: [:ref | owningInst = ref value ifTrue: [ref updateRecursively]]. self modelContentsReference reinitializeLabelSilently. self modelContentsReference updateEditor. TamManager changed: self modelContentsReference! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'apl 7/29/2004 10:34'! updateListLabel listLabel := self shortName! ! !PlatypusStepReference methodsFor: 'updating' stamp: 'AlainPlantec 6/3/2012 17:15'! updateRecursively self recursivelyDo: [:r | | d v | [ r reinitializeLabelSilently. v := r value. v isPltMissingValue ifTrue: [r removeSubReferencesSilently] ifFalse: [ r hasSubReferences ifTrue: [ d := v computedDomain. d isPltListType ifTrue: [ r buildSubReferencesSilently]]] ] on: SubscriptOutOfBounds do: [r owner removeSubReferencesSilently]]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:50'! useP21Syntax ^ self modelContentsReference useP21Syntax! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 6/15/2012 13:50'! useP21Syntax: anObject self modelContentsReference useP21Syntax: anObject ! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'AlainPlantec 5/17/2012 22:25'! value ^ self isPltValue ifTrue: [attrOrRuleOrValue] ifFalse: [[self owner at: pos] on: Error do: []]! ! !PlatypusStepReference methodsFor: 'accessing' stamp: 'apl 6/25/2004 23:24'! value: aValue attrOrRuleOrValue := aValue ! ! !PlatypusStepReference methodsFor: 'checking' stamp: 'AlainPlantec 6/4/2012 18:37'! verifySilently ^ self modelContents verifySilently ! ! !PlatypusStepReference methodsFor: 'file in/out' stamp: 'apl 7/10/2004 16:42'! writeIntoStream: aStream | code | code := self codeText asString. aStream nextPutAll: code. aStream flush! ! !PlatypusTextMorphForEditView methodsFor: 'private' stamp: 'AlainPlantec 5/12/2012 11:24'! editorClass "Answer the class used to create the receiver's editor" ^PlatypusStepEditor! ! !PlatypusTextMorphForEditView methodsFor: 'private' stamp: 'AlainPlantec 5/12/2012 18:41'! replacementFor: aString ^ self editView replacementFor: aString! ! !TamManagerItem class methodsFor: '*sqplatypus-hw-creation' stamp: 'apl 1/4/2006 14:20'! platypusMetaDefaultTaxon ^ self defaultTaxonNamed: self platypusMetaDefaultTaxonName taxonClass: TamTaxonReference! ! !TamManagerItem class methodsFor: '*sqplatypus-hw-creation' stamp: 'AlainPlantec 12/9/2012 00:50'! platypusMetaDefaultTaxonName ^ 'platypus-meta'! ! !TamManagerItem class methodsFor: '*sqplatypus-hw-creation' stamp: 'apl 1/4/2006 14:23'! platypusTranslatorsTaxon ^ self defaultTaxonNamed: self platypusTranslatorsTaxonName taxonClass: TamTaxonReference! ! !TamManagerItem class methodsFor: '*sqplatypus-hw-creation' stamp: 'AlainPlantec 12/9/2012 00:50'! platypusTranslatorsTaxonName ^ 'platypus-translators'! ! !PlatypusParserResultAcceptAbort class methodsFor: 'instance creation' stamp: 'apl 3/23/2006 10:11'! requestor: aRequestor metaData: aMetaData message: aMessage position: aPosition ^ self new requestor: aRequestor metaData: aMetaData message: aMessage position: aPosition! ! !PlatypusParserResultAcceptAbort methodsFor: 'exceptionDescription' stamp: 'AlainPlantec 5/18/2012 11:49'! defaultAction requestor ifNil: [^ super defaultAction] ifNotNil: [requestor notify: self messageText at: position]! ! !PlatypusParserResultAcceptAbort methodsFor: 'acessing' stamp: 'apl 3/23/2006 10:11'! requestor: aRequestor metaData: aMetaData message: aMessage position: aPosition requestor := aRequestor. metaData := aMetaData. self messageText: aMessage. position := aPosition! ! !PlatypusExpressSubListReference methodsFor: 'updating' stamp: 'AlainPlantec 12/13/2012 13:46'! cleanAllEvaluations self children do: [:chl | chl cleanAllEvaluations]. self linked ~= self ifTrue: [ self linked cleanAllEvaluations]! ! !PlatypusExpressSubListReference methodsFor: 'accessing' stamp: 'apl 5/26/2005 13:58'! codeHolderClassName ^ #PlatypusExpressCodeHolder ! ! !PlatypusExpressSubListReference methodsFor: 'testing' stamp: 'apl 10/26/2006 19:13'! isSchemaReference ^ false! ! !PlatypusExpressSubListReference methodsFor: 'menus' stamp: 'apl 5/26/2005 14:29'! keyStroke: aCharacter from: aListMorph super keyStroke: aCharacter from: aListMorph . aCharacter = $p ifTrue: [ ^ self menuCodePane ] ! ! !PlatypusExpressSubListReference methodsFor: 'accessing' stamp: 'apl 1/30/2007 11:37'! startLevel ^ 1! ! !PlatypusExpressSubListReference methodsFor: 'accessing' stamp: 'apl 1/30/2007 11:37'! tokenList | tl | tl := PlatypusTokenList new. self children do: [:hlsr | tl addFrom: (hlsr tokenList beginningOfLineFrom: hlsr startNode) to: hlsr stopNode. tl add: PlatypusEolToken new. tl add: PlatypusEolToken new]. ^ tl! ! !Platypus class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 11/18/2010 10:10'! menuCommandOn: aBuilder (aBuilder item: #'Platypus') parent: #Tools; action: [self open]; icon: self taskbarIcon. ! ! "SqPlatypus"! !PltAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 23:43'! annotation ^ self domain annotation! ! !PltAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/25/2003 16:26'! errorQualifier ^ super errorQualifier , ' ''' , self name, ''''! ! !PltAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/25/2005 22:24'! fullyQualifiedName | qualName own | qualName := self name. own := self owner. [own isNil] whileFalse: [qualName := own name , '.' , qualName. (own := own owner) isPltSchemaInstance ifTrue: [^qualName asUppercase]]. ^qualName asUppercase! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 2/2/2006 11:44'! generatedClassName ^ self owner generatedClassName! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 14:12'! generatedClassNameFromNamesBuilder: aNamesBuilder ^ self owner generatedClassNameFromNamesBuilder: aNamesBuilder ! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 14:42'! getSelectorFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedGetSelectorFrom: self name prefix: nil suffix: ''! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 14:39'! getSelectorWithArgFromNamesBuilder: aNamesBuilder suffix: aSuffix ^ aNamesBuilder normalizedGetSelectorWithArgFrom: self name prefix: nil suffix: aSuffix! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 14:38'! getSelectorWithContextArgFromNamesBuilder: aNamesBuilder ^ self getSelectorWithArgFromNamesBuilder: aNamesBuilder suffix: 'UsingContext'! ! !PltAttribute methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:19'! staticDomain ^ self domain computedDomain ! ! !PltAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:32'! variableHolders ^ OrderedCollection with: self ! ! !PltWhereRule methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/25/2005 22:25'! fullyQualifiedName | qualName own | own := self owner. qualName := self label ifNil: ['#' , (own whereRules indexOf: self) printString]. [own isNil] whileFalse: [qualName := own name , '.' , qualName. (own := own owner) isPltSchemaInstance ifTrue: [^qualName asUppercase]]. ^qualName asUppercase! ! !PltWhereRule methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 2/2/2006 11:44'! generatedClassName ^ self owner generatedClassName! ! !PltWhereRule methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 5/30/2005 10:01'! generatedClassNameFromNamesBuilder: aNamesBuilder ^self owner generatedClassNameFromNamesBuilder: aNamesBuilder! ! !PltWhereRule methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 5/30/2005 09:58'! getSelectorFromNamesBuilder: aNamesBuilder ^aNamesBuilder normalizedGetSelectorFrom: self name prefix: nil suffix: ''! ! !PltWhereRule methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 5/30/2005 09:56'! getSelectorWithArgFromNamesBuilder: aNamesBuilder suffix: aSuffix ^aNamesBuilder normalizedGetSelectorWithArgFrom: self name prefix: nil suffix: aSuffix! ! !PltWhereRule methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 5/30/2005 09:58'! getSelectorWithContextArgFromNamesBuilder: aNamesBuilder ^self getSelectorWithArgFromNamesBuilder: aNamesBuilder suffix: 'UsingContext'! ! !PltWhereRule methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/14/2005 16:05'! name ^ self label ifNil: ['wrl' , (self owner whereRules indexOf: self) printString]! ! !PltWhereRule methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 20:57'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltAttributeReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/26/2004 21:32'! name: attrIndent entityRef: entityRef ^ self new name: attrIndent entityRef: entityRef ! ! !PltAttributeReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/26/2004 21:32'! name: attrIndent entityRefName: entityIdent ^ self new name: attrIndent entityRefName: entityIdent! ! !PltAttributeReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 21:28'! name: attrIndent entityRef: anEntityRef self name: attrIndent. self fastSetEntityRef: anEntityRef. ! ! !PltAttributeReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2007 10:39'! name: attrIndent entityRefName: anEntityRefName | r | self name: attrIndent entityRef: (r := PltEntityDefinitionReference name: anEntityRefName). r owner: self owner. ! ! !PltAttributeReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 17:21'! referenced ^ self ref! ! !PltLogicalExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:38'! inferedDomain ^ PltLogicalType asDomain! ! !PltGroupRepresentation methodsFor: '*xtra-platypus-copying' stamp: 'apl 3/6/2006 15:33'! deepCopy | n | n := super copy. n instRef: n instRef deepCopy. ^n! ! !String methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/3/2005 11:43'! pltAt: anIndex ^ self copyFrom: anIndex to: anIndex! ! !String methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:31'! pltPlus: anotherString ^ self , anotherString! ! !String methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 11/9/2012 23:02'! unformattedString | resStream nbAntiSlash curr | resStream := WriteStream on: String new. nbAntiSlash := 0. 1 to: self size do: [:pos | (curr := self at: pos) = $\ ifTrue: [nbAntiSlash := nbAntiSlash + 1. nbAntiSlash = 2 ifTrue: [resStream nextPut: $\. nbAntiSlash := 0]] ifFalse: [(#($n $t ) includes: curr) ifTrue: [nbAntiSlash = 1 ifTrue: [ resStream nextPut: (curr = $n ifTrue: [ MultiByteFileStream lineEndDefault asLowercase = 'lf' ifTrue: [Character lf] ifFalse: [Character cr]] ifFalse: [Character tab]). nbAntiSlash := 0] ifFalse: [resStream nextPut: curr]] ifFalse: [resStream nextPut: curr]]]. ^ resStream contents! ! !OrderedCollection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 18:18'! pltAdd: newObject beforeIndex: index index <= 0 ifTrue: [self addFirst: newObject] ifFalse: [index >= self size ifTrue: [self addLast: newObject] ifFalse: [self add: newObject afterIndex: index]]! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 09:52'! addElementsTo: anotherAggregate elementType: aType if: ifBlock interpretor: anInterpretor ^ self addElementsTo: anotherAggregate from: 1 to: self size elementType: aType if: ifBlock interpretor: anInterpretor! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:01'! addElementsTo: anotherAggregate elementType: aType interpretor: anInterpretor ^ self addElementsTo: anotherAggregate from: 1 to: self size elementType: aType interpretor: anInterpretor! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/6/2006 17:45'! addElementsTo: anotherAggregate from: idx1 to: idx2 elementType: aType if: ifBlock interpretor: anInterpretor | pos maxi mySize curr | pos := 1. maxi := idx2 > (mySize := self contents size) ifTrue: [mySize] ifFalse: [idx2]. [pos <= maxi] whileTrue: [((pos >= idx1) and: [ifBlock value: (curr := self contents at: pos)]) ifTrue: [anotherAggregate add: (anInterpretor valueFromDomain: aType assignCompatibleWith: curr)]. pos := pos + 1]. ^ anotherAggregate! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 09:51'! addElementsTo: anotherAggregate from: idx1 to: idx2 elementType: aType interpretor: anInterpretor ^ self addElementsTo: anotherAggregate from: idx1 to: idx2 elementType: aType if: [:el | true] interpretor: anInterpretor ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:06'! addFirst: anElement interpretor: anInterpretor | r | r := self class new. r add: anElement. self addElementsTo: r elementType: self inferedElementType interpretor: anInterpretor. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2006 23:39'! asArrayInstanceCompatibleTo: aType interpretor: anInterpretor | r fetchedLower lower fetchedUpper upper | r := PltArrayInstance new. aType lowerBound ifNil: [fetchedLower := PltMissingValue new] ifNotNil: [ anInterpretor acceptTry: aType lowerBound. fetchedLower := anInterpretor popVal]. lower := fetchedLower ifMissing: [PltIntegerLiteral val: 1] ifNotMissing: [fetchedLower]. r lowerBound: lower. aType upperBound ifNil: [fetchedUpper := PltMissingValue new] ifNotNil: [anInterpretor acceptTry: aType upperBound. fetchedUpper := anInterpretor popVal]. upper := fetchedUpper ifMissing: [PltIntegerLiteral val: self size] ifNotMissing: [fetchedUpper]. r upperBound: upper. self addElementsTo: r from: 1 to: upper val - lower val + 1 elementType: aType elementType interpretor: anInterpretor. r size + 1 to: upper val - lower val + 1 do: [:n | r add: PltMissingValue new]. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 16:31'! asBagInstanceCompatibleTo: aType interpretor: anInterpretor ^ self asVariableSizeAggregationInstanceOfClass: PltBagInstance compatibleTo: aType interpretor: anInterpretor ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 14:19'! asListInstanceCompatibleTo: aType interpretor: anInterpretor ^ self asVariableSizeAggregationInstanceOfClass: PltListInstance compatibleTo: aType interpretor: anInterpretor! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 16:31'! asSetInstanceCompatibleTo: aType interpretor: anInterpretor ^ self asVariableSizeAggregationInstanceOfClass: PltSetInstance compatibleTo: aType interpretor: anInterpretor ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:06'! asVariableSizeAggregationInstanceOfClass: aClass compatibleTo: aType interpretor: anInterpretor | r | r := aClass new. aType lowerBound ifNil: [r lowerBound: (PltIntegerLiteral val: 0)] ifNotNil: [anInterpretor acceptTry: aType lowerBound. r lowerBound: anInterpretor popVal]. aType upperBound ifNil: [r upperBound: PltMissingValue new] ifNotNil: [anInterpretor acceptTry: aType upperBound. r upperBound: anInterpretor popVal]. r upperBound ifMissing: [self addElementsTo: r elementType: aType elementType interpretor: anInterpretor] ifNotMissing: [self addElementsTo: r from: 1 to: r upperBound val elementType: aType elementType interpretor: anInterpretor]. ^ r ! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:24'! contentsList ^ self contents! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:12'! copyFrom: idx1 to: idx2 | r | r := self class new. self addElementsTo: r from: idx1 to: idx2 elementType: nil. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:13'! equal: other self class = other class ifFalse: [^ PltLogicalLiteral val: false]. (self contents anySatisfy: [:el | el isPltMissingValue]) ifTrue: [^ PltLogicalLiteral val: #unknown]. (other contents anySatisfy: [:el | el isPltMissingValue]) ifTrue: [^ PltLogicalLiteral val: #unknown]. ^ PltLogicalLiteral val: true! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 12/6/2013 15:50'! includesVal: aValue | res | self contents asOrderedCollection do: [ :e | (res := e instEqual: aValue) ifTrueConstant: [ ^ res ] ]. self contents asOrderedCollection do: [ :e | e ifMissing: [ ^ PltLogicalLiteral val: #unknown ] ]. ^ PltFalseConstant new ! ! !PltAggregateData methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:11'! inferedElementType | elType elementsDomains | elementsDomains := Set new. self contents do: [:exp | elementsDomains add: exp computedDomain]. elementsDomains isEmpty ifTrue: [^ PltGenericType asDomain]. elementsDomains size = 1 ifTrue: [^ elementsDomains anyOne]. elType := PltSelectType new. elType selections: elementsDomains. ^ elType ! ! !PltAggregateData methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:22'! isPltValue ^ true! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:38'! isSubsetOf: anotherAggregate interpretor: anInterpretor "The receiver is a subset of anotherAggregate if and only if, for any element e which occurs n times in the receiver, e occurs at least n times in anotherAggregate" anotherAggregate isPltAggregateData ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. self contents do: [:e | (self occurrencesOf: e) <= (anotherAggregate occurrencesOf: e) ifFalse: [^ PltFalseConstant new]]. ^ PltTrueConstant new! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:38'! isSupersetOf: anotherAggregate interpretor: anInterpretor "The receiver is a superset of anotherAggregate if and only if, for any element e which occurs n times in the anotherAggregate, e occurs at least n times in the receiver" anotherAggregate isPltAggregateData ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. self contents do: [:e | (anotherAggregate occurrencesOf: e) <= (self occurrencesOf: e) ifFalse: [^ PltFalseConstant new]]. ^ PltTrueConstant new! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/24/2004 13:55'! lowerBound ^ PltIntegerLiteral val: 0! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:58'! minus: anotherAggregateOrElement interpretor: anInterpretor "Answer the set theoretic difference of two collections." | r | r := self class new. self addElementsTo: r elementType: self inferedElementType if: [:el | (anotherAggregateOrElement includesVal: el) isPltFalseConstant] interpretor: anInterpretor. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:26'! mult: anotherAggregate interpretor: anInterpretor "Answer the set theoretic difference of two collections." | r | anotherAggregate isPltAggregateData ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. r := self class new. self addElementsTo: r elementType: self inferedElementType if: [:el | (anotherAggregate includesVal: el) isPltTrueConstant] interpretor: anInterpretor. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/3/2004 18:16'! occurrencesOf: anElement ^ self contents occurrencesOf: anElement ! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2006 18:20'! pltAdd: newObject beforeIndex: index self add: newObject beforeIndex: index ! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2006 11:34'! pltNativeValue ^ self contents! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/6/2006 18:13'! plus: anotherAggregateOrElement interpretor: anInterpretor | r | r := self class new. self addElementsTo: r elementType: self inferedElementType interpretor: anInterpretor. anotherAggregateOrElement isPltAggregateData ifTrue: [anotherAggregateOrElement addElementsTo: r elementType: anotherAggregateOrElement inferedElementType interpretor: anInterpretor] ifFalse: [r add: anotherAggregateOrElement]. r adjustLowerAndUpperBounds. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:12'! range: interval | r | r := self class new. self addElementsTo: r from: interval first to: interval last elementType: nil. ^ r! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/1/2004 22:11'! range: interval interpretor: anInterpretor | r | r := self class new. self addElementsTo: r from: interval first to: interval last elementType: self computedDomain elementType interpretor: anInterpretor. ^ r ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 12:05'! rolesOf: anInstanceReference in: aSetOfString self contents do: [:e | e rolesOf: anInstanceReference in: aSetOfString] ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 11:53'! rolesValue: anInstanceReference roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet self contents do: [:e | (e rolesValue: anInstanceReference roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet) ]. ! ! !PltAggregateData methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/3/2004 18:35'! setQueryBoundsFromSource: anotherAggregate self lowerBound: (PltIntegerLiteral val: 0). self upperBound: anotherAggregate upperBound copy. ! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/8/2003 00:21'! size ^ self contents size! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 20:48'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltAggregateData methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/24/2004 13:56'! upperBound ^ PltMissingValue new! ! !PltLessThanExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:01'! operatorSymbol ^ #'<'! ! !PltLessThanExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:19'! pltOperator ^ '<'! ! !PltQueryExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:33'! identifiersCache ^ identifiersCache ifNil: [identifiersCache := Dictionary new]! ! !PltQueryExpression methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/16/2004 12:05'! initializeContextInInterpretor: anInterpretor self aggregateSource acceptTry: anInterpretor. anInterpretor currentContext aggregateSource: anInterpretor pop. anInterpretor declareQueryVariable: self variable! ! !PltQueryExpression methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/6/2004 09:58'! interpretorContextClass ^ PlatypusExpressInterpretorQueryContext! ! !PltQueryExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/17/2003 13:52'! lookUpIdentifierBN: aName | upper | upper := aName asUppercase. ^ self variable name asUppercase = upper ifTrue: [self variable] ! ! !PltQueryExpression methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:37'! variableHolders ^ OrderedCollection with: variable ! ! !PltNativeExpression methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/10/2006 10:07'! alwaysReturn ^ self havePlatypusInterpreterCode! ! !PltNativeExpression methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/10/2006 10:08'! havePlatypusInterpreterCode ^ self platypusInterpreterCode notNil! ! !PltNativeExpression methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:46'! isDebugged ^ false! ! !PltPositiveExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2003 19:48'! operatorSymbol ^#+! ! !PltSimpleUnaryExpression class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 21:12'! expr: anExpression ^ self new expr: anExpression! ! !PltSimpleUnaryExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:15'! inferedDomain ^ self expr computedDomain ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/19/2007 07:09'! addTypeMap: aMetaMappingDefinition self mappings add: aMetaMappingDefinition! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 11:40'! dataInterface ^ self interface select: [:int | int isPltExternalMetaSchema not]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 19:04'! externalMetaSchemaNamed: aName | key | key := aName asUppercase. self metaInterface do: [:interf | interf nativeSchema name asUppercase = key ifTrue: [^ interf nativeSchema]]. ^ nil! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 10:30'! generatedClassNameSuffix ^ 'SchemaDefinition'! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 10:05'! generatedSystemCategorySuffix ^ 'Schema'! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/29/2006 19:13'! haveMetaSchemata self interface do: [:int | int isPltExternalMetaSchema ifTrue: [^ true]]. ^ false! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 12:47'! initialize super initialize. mappings := OrderedCollection new! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/27/2006 08:17'! initializeContextInInterpretor: anInterpretor self initializeContextInInterpretor: anInterpretor relatedSchemata: Set new. ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/25/2006 11:21'! initializeContextInInterpretor: anInterpretor relatedSchemata: aSetOfSchemaDefinitions (aSetOfSchemaDefinitions includes: self) ifFalse: [aSetOfSchemaDefinitions add: self. self dataInterface do: [:int | int nativeSchema ifNotNil: [int nativeSchema initializeContextInInterpretor: anInterpretor relatedSchemata: aSetOfSchemaDefinitions]]. super initializeContextInInterpretor: anInterpretor]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 00:12'! interfaceSchemata ^ (self interface) collect: [:i | i nativeSchema]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/5/2012 09:01'! isMappingSchema ^ (self interface select: [:i | i isPltExternalMetaSchema]) notEmpty ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/29/2006 19:40'! isPlatypusPrimitiveSchema ^ self owner notNil and: [self owner isPlatypusPrimitive]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/19/2006 08:34'! localLookUpIdentifierBN: aName ^ super lookUpIdentifierBN: aName ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 12:14'! localLookUpNamedTypeBN: aName ^ super lookUpNamedTypeBN: aName! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/28/2006 20:43'! lookUpEntityDefinitionBN: aString | availables | availables := self namedTypesCache at: aString asUppercase ifAbsent: [^ nil]. ^ availables detect: [:a | a isPltEntityDefinition] ifNone: []! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/28/2006 20:56'! lookUpEnumerationTypeFromElement: aString self types do: [:ty | ty domain isPltEnumerationType ifTrue: [(ty domain elementSymbolCorrespondingTo: aString) ifNotNil: [^ ty]]]. ^ nil! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 23:02'! lookUpIdentifierBN: aName | found | (found := self localLookUpIdentifierBN: aName) ifNil: [self dataInterface do: [:interf | (found := interf lookUpIdentifierBN: aName) ifNotNil: [^ found]]]. ^ found! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 23:02'! lookUpNamedTypeBN: aName | found | (found := self localLookUpNamedTypeBN: aName) ifNil: [self dataInterface do: [:interf | (found := interf lookUpNamedTypeBN: aName) ifNotNil: [^ found]]]. ^ found! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing'! mappings ^mappings ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing'! mappings:aListOfPltMetaMappingDefinition mappings := aListOfPltMetaMappingDefinition ifNil: [OrderedCollection new] ifNotNil: [aListOfPltMetaMappingDefinition as: OrderedCollection] ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 11:08'! metaInterface ^ self interface select: [:int | int isPltExternalMetaSchema]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:41'! metaSchemata ^ (self metaInterface select: [:i | i nativeSchema notNil]) collect: [:i | i nativeSchema]! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/11/2003 02:08'! moveInto: aSchemaInstance aSchemaInstance schemata add: self. self owner: aSchemaInstance! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 15:35'! removeFrom: aSchemaInstance aSchemaInstance schemata remove: self. ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/7/2003 08:22'! removeGlobalRule: aGlobalRule self globalRules remove: aGlobalRule. ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:47'! renameWith: aString self owner renameSchemaDefinition: self with: aString. ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:58'! schemaDefinition ^ self! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-accessing'! setMappings:aListOfPltMetaMappingDefinition self mappings:aListOfPltMetaMappingDefinition ! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 10:05'! systemCategoryFromNamesBuilder: aNameBuilder ^ aNameBuilder systemCategoryPrefix , '-' , ((aNameBuilder normalizedNameFrom: self name first: true) asIdentifier: true) , self generatedSystemCategorySuffix! ! !PltSchemaDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/29/2006 19:51'! usePlatypusPrimitiveSchemata self interface do: [:int | (int notNil and: [int nativeSchema notNil and: [int nativeSchema isPlatypusPrimitiveSchema]]) ifTrue: [^ true]]. ^ false! ! !PltUsedSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:35'! selectionString ^ 'USE ' , super selectionString! ! !PltVariableSizeAggregationInstance methodsFor: '*xtra-platypus-converting' stamp: 'AlainPlantec 5/17/2012 10:55'! asListInstance ^ PltListInstance new contents: self contentsList ! ! !PltBound methodsFor: '*xtra-platypus-converting' stamp: 'apl 12/12/2003 16:20'! asInteger ^ nil ! ! !PltBound methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:34'! staticDomain ^ PltIntegerType asDomain! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 22:47'! detectInstanceAttributeIdentification: aBlock (self definition selectInheritedExplicitAttributeIdentifications: aBlock) ifNotEmpty: [:founds | ^ founds first]. ^ nil! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/2/2004 22:53'! equal: other ^ self equalInternal: other! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:47'! groupClass ^ PltInternalGroupRepresentation! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:14'! inferedDomain ^ self definition computedDomain ! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:07'! instEqual: other | myParam otherParam res | self == other ifTrue: [^ PltTrueConstant new]. self groupClass == other groupClass ifFalse: [^ PltFalseConstant new]. self definition == other definition ifFalse: [^ PltFalseConstant new]. self wrappedParameters size == other wrappedParameters size ifFalse: [^ PltFalseConstant new]. 1 to: self wrappedParameters size do: [:pos | myParam := self wrappedParameters at: pos. otherParam := other wrappedParameters at: pos. res := myParam instEqual: otherParam. res ifFalseOrUnknownConstant: [^ res]]. ^ PltTrueConstant new! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 09:54'! isInsideGroup: anEntityDef ^ self definition == anEntityDef! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2005 23:38'! numberOfAttributesUntilGroup: groupEntityDef ^ (self definition numberOfAttributesUntilGroup: groupEntityDef) + (self instref numberOfAttributesUntilGroup: self definition)! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/2/2004 23:34'! parameters ^ self unwrappedParameters ! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/8/2004 16:52'! privateExplicitAttributesAndValuesDo: aBlock ^ self privateInternalExplicitAttributesAndValuesDo: aBlock ! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 14:37'! records ^ Array with: self! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2005 23:38'! startAttributePrevPosition ^ self instref numberOfAttributesUntilGroup: self definition! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/2/2012 10:57'! unwrappedParameters ^ self instRef unwrappedParameters! ! !PltInternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/2/2006 16:24'! wrappedParameters | startPrevPos | startPrevPos := self startAttributePrevPosition. ^ self unwrappedParameters copyFrom: startPrevPos + 1 to: self definition numberOfInheritedExplicitAttributes + startPrevPos! ! !PltGlobalRule methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 16:43'! evaluate Cursor wait showWhile: [^ PlatypusExpressInterpretor new compute: (Array with: self ) in: self owner to: nil notifying: nil ifFail: [] logged: false]! ! !PltGlobalRule methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 16:36'! evaluate: args ^ self evaluate! ! !PltGlobalRule methodsFor: '*xtra-platypus-code-generating' stamp: 'AlainPlantec 11/30/2011 11:50'! generatedClassNameSuffix ^ 'GlobalRule'! ! !PltGlobalRule methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 4/4/2010 11:18'! initializeContextInInterpretor: anInterpretor self forEntities do: [ :fe | anInterpretor declareEntityInstancesSet: fe]. super initializeContextInInterpretor: anInterpretor. ! ! !PltGlobalRule methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 11/30/2011 12:11'! lookUpIdentifierBN: aName | upper | upper := aName asUppercase. self forEntities ifNil: [^ nil]. ^ self forEntities detect: [ :i | i name asUppercase = upper] ifNone: [super lookUpIdentifierBN: aName] ! ! !PltGlobalRule methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/11/2003 02:07'! moveInto: aContextDefinition aContextDefinition globalRules add: self. self owner: aContextDefinition! ! !PltGlobalRule methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 15:35'! removeFrom: aContextDefinition aContextDefinition globalRules remove: self. ! ! !PltGlobalRule methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:46'! renameWith: aString self owner renameGlobalRule: self with: aString. ! ! !PltSelectType class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 2/4/2004 15:24'! selections: aCollectionOfNamedTypes ^ self new selections: aCollectionOfNamedTypes! ! !PltSelectType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 22:57'! annotation ^ String streamContents: [:strm | self selections do: [:e | strm nextPutAll: e annotation] separatedBy: [strm nextPutAll: ' or '] ]! ! !PltSelectType methodsFor: '*xtra-platypus-converting' stamp: 'AlainPlantec 10/7/2010 16:33'! asDomainSet | result | result := Set new. self selections do: [:s | result add: s]. ^ result! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 5/25/2004 10:19'! canBeAssignedWith: otherType ^ (super canBeAssignedWith: otherType) or: [self selections anySatisfy: [:sel | sel referenced canBeAssignedWith: otherType]]! ! !PltSelectType methodsFor: '*xtra-platypus-checking' stamp: 'apl 5/27/2004 16:33'! checksDomainPath: pathStack errorStack: errPathStack | tmpPathStack tmpErrPathStack | self selections do: [:s | tmpPathStack := pathStack copy. tmpErrPathStack := errPathStack copy. s referenced ifNotNil: [(s referenced checksDomainPath: tmpPathStack errorStack: tmpErrPathStack) ifFalse: [errPathStack addAll: tmpErrPathStack. ^ false]]]. ^ true! ! !PltSelectType methodsFor: '*xtra-platypus-copying' stamp: 'apl 1/21/2004 00:02'! deepCopy ^ self copy. ! ! !PltSelectType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 02:13'! errorQualifier | qualifier | qualifier := super errorQualifier , ' ('. self selections do: [:sel | qualifier := qualifier , sel name] separatedBy: [qualifier := qualifier , ',']. qualifier := qualifier , ')'. ^ qualifier! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 5/25/2004 10:19'! isAssignableTo: otherType ^ self selections anySatisfy: [:sl | sl referenced isAssignableTo: otherType]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 5/25/2004 10:19'! isAssignableToAggregateType: anAggregateType ^ self selections allSatisfy: [:sl | sl referenced isAssignableTo: anAggregateType]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 5/25/2004 10:19'! isAssignableToEntityDefinition: anEntityDefinition ^ self selections anySatisfy: [:sl | sl referenced isAssignableTo: anEntityDefinition]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 7/27/2004 10:07'! isCompatibleWithEntityDefinition: anEntityDefinition ^ self selections anySatisfy: [:sl | sl referenced isCompatibleWithEntityDefinition: anEntityDefinition]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 6/3/2004 00:11'! isGeneralizationOf: otherType ^ (super isGeneralizationOf: otherType) or: [self selections anySatisfy: [:sel | (sel referenced isCompatibleWith: otherType) ]]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'apl 5/25/2004 10:20'! isSpecializationOfAggregateType: anAggregateType ^ self selections anySatisfy: [:sl | sl referenced isSpecializationOf: anAggregateType]! ! !PltSelectType methodsFor: '*xtra-platypus-testing' stamp: 'alain.plantec 12/18/2008 16:25'! isSpecializationOfEntityDefinition: anEntityDefinition ^ self selections anySatisfy: [:sl | sl referenced isSpecializationOf: anEntityDefinition]! ! !PltOrExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:01'! operatorSymbol ^ #or! ! !PltInstNotEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:00'! operatorSymbol ^ #':<>:'! ! !PltInstNotEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:24'! pltOperator ^ '~~'! ! !PltIncrementControlVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/2/2004 11:43'! computedDomain ^ self inferedDomain ! ! !PltIncrementControlVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:38'! inferedDomain ^ PltIntegerType asDomain! ! !PltIncrementControlVariable methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/21/2003 19:09'! name ^ self variableId! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 16:27'! args: argsArray | args | args := ''. argsArray do: [:a | args := args , a] separatedBy: [args := args , ',']. ^ self evaluate: '(' , args , ')'! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/28/2006 09:48'! arguments | itemRef | ^ (itemRef := self tamarisItemRef) ifNotNil: [itemRef interactiveCallArguments]! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/28/2006 09:49'! arguments: aString | itemRef | ^ (itemRef := self tamarisItemRef) ifNotNil: [itemRef interactiveCallArguments: aString]! ! !PltStatementsContainer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 19:45'! bindings ^ super bindings , self locals ! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 12/9/2013 17:25'! evaluate | argsSql args | args := ''. self formalParameters isEmpty ifFalse: [argsSql := self arguments ifNil: ['']. argsSql ifNotEmpty: [:a | argsSql := argsSql trimBoth ]. argsSql ifEmpty: [self formalParameters do: [:fp | argsSql := argsSql , fp prettyPrintedExpressCode] separatedBy: [argsSql := argsSql , ' , ']]. args := UIManager default request: 'give a value for each formal parameters' initialAnswer: argsSql. args isEmptyOrNil ifTrue: [^ nil] ifFalse: [args := '(' , args , ')']]. ^ self evaluate: args! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 12/9/2013 17:24'! evaluate: args | call | Cursor wait showWhile: [args ifNotEmpty: [:a | self arguments: args trimBoth]. call := self name , args , ';'. ^ PlatypusExpressInterpretor new evaluate: call in: self owner to: nil notifying: nil ifFail: [] logged: false]! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 17:09'! evaluateAndExplore ^ self evaluateAndExplore: ''! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 16:30'! evaluateAndExplore: args ^ (self evaluate: args) explore! ! !PltStatementsContainer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/16/2004 12:15'! initializeContextInInterpretor: anInterpretor super initializeContextInInterpretor: anInterpretor. self locals do: [:lo | anInterpretor declareLocalVariable: lo]. ! ! !PltStatementsContainer methodsFor: '*xtra-platypus-data-management' stamp: 'apl 6/9/2004 07:25'! rebuildLocalCaches super rebuildLocalCaches. self locals do: [:loc | self insertIntoCache: loc]! ! !SequenceableCollection methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 6/3/2012 19:17'! doWithIndex: elementBlock separatedBy: separatorBlock "Evaluate the elementBlock for all elements in the receiver, and evaluate the separatorBlock between." 1 to: self size do: [:index | index = 1 ifFalse: [separatorBlock value]. elementBlock value: (self at: index) value: index]! ! !SequenceableCollection methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 6/3/2012 19:37'! with: otherCollection do: twoArgBlock separatedBy: separatorBlock "Evaluate twoArgBlock with corresponding elements from this collection and otherCollection." otherCollection size = self size ifFalse: [self error: 'otherCollection must be the same size']. 1 to: self size do: [:index | index = 1 ifFalse: [separatorBlock value]. twoArgBlock value: (self at: index) value: (otherCollection at: index)]! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:16'! add: anEntityInstance (self includesInstance: anEntityInstance) ifTrue: [^ self]. (anEntityInstance persistentLabel isNil or: [anEntityInstance persistentLabel isEmpty]) ifTrue: [anEntityInstance persistentLabel: self newPersistentLabel]. (self instanceLabelled: anEntityInstance persistentLabel) ifNotNil: [^ self error: 'persistent label already used']. anEntityInstance owningModel: self. self dataInstances add: anEntityInstance. self addToIndexes: anEntityInstance withPosition: dataInstances size. ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:08'! addToIndexes: anEntityInstance withPosition: aPosition self entitiesByInstanceIndex at: anEntityInstance referenced ifAbsentPut: Set new. self positionByDataInstanceIndex at: anEntityInstance put: aPosition. anEntityInstance inheritedDefinitions do: [:d | (self entitiesByInstanceIndex at: anEntityInstance) add: d. self dataInstancesByEntityIndex at: d ifAbsentPut: Set new. (self dataInstancesByEntityIndex at: d ) add: anEntityInstance]. (anEntityInstance persistentLabel isNil or: [anEntityInstance persistentLabel isEmpty]) ifTrue: [self error: 'An instance without label is recorded'] ifFalse: [self dataInstancesByLabelIndex at: anEntityInstance persistentLabel put: anEntityInstance]! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 4/12/2011 12:33'! asStepStream | strm | strm := ReadWriteStream on: String new. self stepWriteIntoStream: strm. ^ strm reset ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/11/2012 18:38'! at: position ^ self dataInstances at: position ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/11/2012 17:51'! at: position put: aNewOne | old oid | self halt. old := self at: position. self dataInstances at: position put: aNewOne. old ifNotNil: [self removeFromIndexes: old]. aNewOne ifNotNil: [self addToIndexes: aNewOne withPosition: position. aNewOne owningModel: self]! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/17/2012 02:23'! buildDataInstancesIndexes self dataInstancesByLabelIndex: Dictionary new. self entitiesByInstanceIndex: IdentityDictionary new. self dataInstancesByEntityIndex: IdentityDictionary new. self positionByDataInstanceIndex: IdentityDictionary new. self dataInstances doWithIndex: [:v :p | v ifNotNil: [self addToIndexes: v withPosition: p]]! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 01:13'! dataInstances ^ dataInstances! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 01:14'! dataInstances: aCollection dataInstances := aCollection! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2007 13:34'! dataInstancesByEntityIndex ^ dataInstancesByEntityIndex! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2007 13:34'! dataInstancesByEntityIndex: anObject dataInstancesByEntityIndex := anObject! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 15:40'! dataInstancesByLabelIndex ^ dataInstancesByLabelIndex! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 15:41'! dataInstancesByLabelIndex: anObject dataInstancesByLabelIndex := anObject! ! !PltModelContents methodsFor: '*xtra-platypus-initialize-release' stamp: 'AlainPlantec 5/16/2012 15:07'! destroyInstances headerInstances ifNotNil: [headerInstances do: [:i | i destroy]]. dataInstances ifNotNil: [dataInstances do: [:i | i destroy]]. dataInstancesByLabelIndex := nil. positionByDataInstanceIndex := nil! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 15:41'! entitiesByInstanceIndex ^entitiesByInstanceIndex! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 15:41'! entitiesByInstanceIndex: anObject entitiesByInstanceIndex := anObject! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/23/2005 21:59'! fileSchema ^ self headerInstances ifNotNil: [self headerInstances detect: [:hi | hi isPltFileSchema] ifNone: []]! ! !PltModelContents methodsFor: '*xtra-platypus-initialize-release' stamp: 'apl 6/3/2005 16:56'! finalize self destroy. super finalize! ! !PltModelContents methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/13/2012 13:55'! forgetAllErrors self schemaInstance ifNil: [^ self ]. self schemaInstance forgetAllErrorsOf: self. PlatypusInstanceDoer new do: [:c :p | self schemaInstance forgetAllErrorsOf: (c at: p) ] from: self dataInstances in: self ! ! !PltModelContents methodsFor: '*xtra-platypus-testing' stamp: 'apl 4/4/2006 13:16'! haveMetaConceptDefinitions ^ self dataInstances anySatisfy: [:inst | (inst isPltInternalRepresentation and: [inst definition name asUppercase = PltMetaConceptDefinition platypusMetaData name asUppercase])] ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 01:15'! headerInstances ^ headerInstances! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 23:14'! headerInstances: aCollection headerInstances := aCollection. ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/17/2012 22:50'! includesInstance: anEntityInstance self entitiesByInstanceIndex ifNil: [^false]. ^ self entitiesByInstanceIndex includesKey: anEntityInstance. ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:08'! indexOf: anInstance ^ self positionByDataInstanceIndex at: anInstance ifAbsent: [0]! ! !PltModelContents methodsFor: '*xtra-platypus-initialize-release' stamp: 'AlainPlantec 5/16/2012 15:09'! initialize super initialize. headerInstances := OrderedCollection new. dataInstances := OrderedCollection new. self dataInstancesByLabelIndex: Dictionary new. self entitiesByInstanceIndex: IdentityDictionary new. self dataInstancesByEntityIndex: IdentityDictionary new. self positionByDataInstanceIndex: IdentityDictionary new. ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/11/2012 18:32'! instanceLabelled: aLabel ^ self dataInstancesByLabelIndex at: aLabel ifAbsent: []! ! !PltModelContents methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/31/2006 17:27'! isEmpty ^ dataInstances isEmpty! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/2/2006 12:51'! lookUpEntityDefinitionBN: aName | found | self schemata do: [:sch | (found := sch linkedMetaData isNil ifFalse: [sch linkedMetaData lookUpEntityDefinitionBN: aName]) ifNotNil: [^ found]]. ^ nil! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/13/2005 11:35'! lookUpNamedTypeBN: aName | found | self schemata do: [:sch | (found := sch linkedMetaData lookUpNamedTypeBN: aName) ifNotNil: [^ found]]. ^ nil! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 23:59'! newPersistentLabel ^ (self newPersistentLabelFrom: dataInstances size + 1) asString! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/13/2012 00:00'! newPersistentLabelFrom: anInteger | ca | ca := anInteger. [(self instanceLabelled: ca asString) notNil] whileTrue: [ca := ca + 1]. ^ ca ! ! !PltModelContents methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/31/2006 17:27'! notEmpty ^ dataInstances notEmpty! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:07'! positionByDataInstanceIndex ^ positionByDataInstanceIndex ifNil: [positionByDataInstanceIndex := IdentityDictionary new]! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:07'! positionByDataInstanceIndex: anObject positionByDataInstanceIndex := anObject! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/11/2012 19:52'! privateRemove: anEntityInstance | pos | pos := self indexOf: anEntityInstance. pos > 0 ifTrue: [self dataInstances at: pos put: nil]. self removeFromIndexes: anEntityInstance ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 12/9/2013 17:46'! recordComputedInstances ^ recordComputedInstances ifNil: [recordComputedInstances := true ]! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 14:02'! recordComputedInstances: aBoolean recordComputedInstances := aBoolean! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 13:08'! remove: anEntityInstance PlatypusInstanceReplacer new remove: anEntityInstance from: self. ! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/16/2012 22:32'! removeAll self destroyInstances. self initialize. self buildDataInstancesIndexes! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 12/11/2013 10:30'! removeComputedInstances | temporaries idx | temporaries := self dataInstances select: [:v | v notNil and: [ v isComputed] ]. idx := IdentityDictionary new. temporaries do: [:t | idx at: t put: PltMissingValue new]. self removeIndex: idx! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 15:08'! removeFromIndexes: anEntityInstance | entities s | self positionByDataInstanceIndex removeKey: anEntityInstance ifAbsent: []. (entities := self entitiesByInstanceIndex at: anEntityInstance ifAbsent: []) isNil ifFalse: [entities do: [:ent | (s := self dataInstancesByEntityIndex at: ent) remove: anEntityInstance. s isEmpty ifTrue: [self dataInstancesByEntityIndex removeKey: ent ]]. self entitiesByInstanceIndex removeKey: anEntityInstance]. (anEntityInstance persistentLabel isNil or: [anEntityInstance persistentLabel isEmpty]) ifFalse: [self dataInstancesByLabelIndex removeKey: anEntityInstance persistentLabel ifAbsent: []]! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 6/13/2012 14:00'! removeFromOwner self owner ifNil: [^ self ]. self owner removeModelContents: self ! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/8/2012 15:59'! removeIndex: anIndex PlatypusInstanceReplacer new removeIndex: anIndex from: self ! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/11/2012 18:18'! replace: old with: new PlatypusInstanceReplacer new replace: old with: new in: self ! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/5/2012 01:56'! replaceIndex: anIndex PlatypusInstanceReplacer new replaceIndex: anIndex in: self ! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/23/2012 21:24'! resolves | checker | checker := PlatypusModelContentsResolver new. checker checks: self. ^ checker haveError not! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 6/15/2012 12:45'! resolvesMetaConceptDefinitions | metaRefs evalResult newInst interpreter instDefinition metaExpression toBeRecord | metaRefs := OrderedCollection new. toBeRecord := OrderedCollection new. self dataInstances do: [:inst | (inst isPltInternalRepresentation and: [inst definition name asUppercase = PltMetaConceptDefinition platypusMetaData name asUppercase]) ifTrue: [metaExpression := inst valueOfExplicitAttributeNamed: 'expression'. instDefinition := inst valueOfExplicitAttributeNamed: 'definition'. interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: metaExpression val in: self schemaInstance to: instDefinition notifying: nil ifFail: [self halt]. newInst := evalResult val. instDefinition addRecordsToExternalRepresentation: newInst. instDefinition becomeInstance: newInst. toBeRecord add: newInst. metaRefs add: inst]]. (PlatypusModelContentsRecorder modelContents: self) checksAll: toBeRecord. metaRefs do: [:mr | self remove: mr]. self tamarisItemRef removeSubReferences! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 1/21/2011 22:10'! resolvesMetaMappingRules PlatypusModelContentsMetaDefinitionsBuilder new acceptModelContents: self! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 18:37'! schemaInstance ^ self owner! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 13:56'! schemata | fileSchema declaredSchemata sch | declaredSchemata := OrderedCollection new. (fileSchema := self fileSchema) ifNotNil: [fileSchema schemaIdentifiers do: [:id | (sch := self owner lookUpSchemaDefinitionBN: id) ifNotNil: [declaredSchemata add: sch]]]. self owner ifNotNil: [ self owner schemata do: [:s | (declaredSchemata includes: s) ifFalse: [declaredSchemata add: s]]]. ^ declaredSchemata! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/23/2012 21:24'! semanticChecks | checker | checker := PlatypusModelContentsSemanticChecker new. checker checks: self. ^ checker haveError not! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/13/2012 02:43'! sortedDataInstances ^ (self dataInstances select: [:e | e notNil]) asArray sort: [:a :b | (a persistentLabel isAllDigits and: [b persistentLabel isAllDigits]) ifTrue: [a persistentLabel asInteger < b persistentLabel asInteger] ifFalse: [a persistentLabel < b persistentLabel]]! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'apl 3/12/2005 11:39'! stepWriteIntoStream: aStream self stepWriteIntoStream: aStream useP21Syntax: true ! ! !PltModelContents methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 6/12/2012 13:38'! stepWriteIntoStream: aStream useP21Syntax: aBoolean Cursor write showWhile: [ PlatypusModelContentsStepWriter new stream: aStream modelContents: self p21Syntax: aBoolean]! ! !PltModelContents methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2007 13:37'! subInstancesOf: entity ^ self dataInstancesByEntityIndex at: entity ifAbsent: [Set new]! ! !PltModelContents methodsFor: '*xtra-platypus-tamaris' stamp: 'AlainPlantec 5/17/2012 02:41'! tamarisChildrenIntoOwner: ownerRef | children | dataInstances ifNil: [ ^OrderedCollection new ]. children := OrderedCollection new. self sortedDataInstances doWithIndex: [:inst :p | children add: (inst tamarisStepValueReferenceClass owner: ownerRef position: p)]. ^ children! ! !PltModelContents methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/12/2012 10:37'! verifySilently self forgetAllErrors. self validationDate: DateAndTime now asString. (self resolves and: [self semanticChecks]) ifTrue: [self validationResult: true] ifFalse: [self validationResult: false]. ^ self validationResult! ! !PltInstanceConstructionExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:14'! inferedDomain | type elementsDomains | elementsDomains := Set new. elementsDomains add: self leftExpr computedDomain. elementsDomains add: self rightExpr computedDomain. type := PltSelectType new. type selections: elementsDomains. ^ type ! ! !PltInstanceConstructionExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:58'! operatorSymbol ^ #'||'! ! !Collection methodsFor: '*xtra-platypus-visiting' stamp: 'apl 3/17/2006 09:28'! acceptTry: aVisitor self do: [:el | el acceptTry: aVisitor]! ! !Collection methodsFor: '*xtra-platypus-visiting' stamp: 'apl 3/17/2006 09:47'! acceptTry: aVisitor separatedBy: aBlock self do: [:el | el acceptTry: aVisitor] separatedBy: aBlock ! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 10:22'! lowerBound ^ 1! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 18:30'! pltAdd: newObject beforeIndex: index self add: newObject! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/3/2005 11:44'! pltAt: anIndex ^ self at: anIndex! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 23:05'! pltMinus: aCollectionOrElement aCollectionOrElement isCollection ifTrue: [ ^ self copyWithoutAll: aCollectionOrElement] ifFalse: [ ^ self copyWithout: aCollectionOrElement]. ! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 23:13'! pltMult: aCollection ^ self intersection: aCollection ! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 16:14'! pltPlus: aCollectionOrElement | result | (aCollectionOrElement isCollection and: [aCollectionOrElement isString not]) ifTrue: [result := (self isKindOf: Array) ifTrue: [OrderedCollection withAll: self] ifFalse: [self copy]. result addAll: aCollectionOrElement] ifFalse: [result := self. result add: aCollectionOrElement]. ^ result! ! !Collection methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 10:22'! upperBound ^ self size! ! !PltIntegerLiteral methodsFor: '*xtra-platypus-parsing' stamp: 'AlainPlantec 10/7/2010 16:32'! asBound | bound | bound := PltIntegerBound new. bound setBoundValue: self val. ^ bound! ! !PltIntegerLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 21:31'! asIntegerLiteral ^ self! ! !PltIntegerLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/23/2004 10:09'! asIntegerLiteralCompatibleTo: anIntegerType interpretor: anInterpretor ^ PltIntegerLiteral val: self val asInteger! ! !PltIntegerLiteral methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:38'! inferedDomain ^ PltIntegerType asDomain! ! !PltNamedTypeReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/22/2004 17:52'! errorQualifier ^ 'named type ''' , self name, ''''! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 16:49'! addRecordsToExternalRepresentation: externalRep self records do: [:rec | rec copy addRecordsToExternalRepresentation: externalRep]! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 15:15'! asExternalRepresentation ^ self! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/2/2004 15:50'! at: pos ^ self records at: pos! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/31/2006 15:13'! at: position put: aValue self records at: position put: aValue. aValue owner: self! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-copying' stamp: 'apl 1/26/2004 17:38'! deepCopy ^ self copy! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 23:44'! definitionInclusiveOwnerPath | path | path := OrderedCollection new. self records do: [:rec | path addAll: rec definition inclusiveOwnerPath]. ^ path! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/17/2012 22:51'! definitionOk self records ifNil: [^ false]. ^ self records allSatisfy: [:rec | rec definitionOk]! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/29/2004 18:07'! equal: other ^ self equalExternal: other! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:47'! groupClass ^ PltExternalGroupRepresentation! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 12/20/2006 18:08'! inferedDomain | domains infered | domains := Set new. self records do: [:rec | domains add: rec computedDomain]. domains isEmpty ifTrue: [^ PltGenericType asDomain]. domains size > 1 ifTrue: [ infered := PltSelectType new. infered selections: domains] ifFalse: [infered := domains anyOne ]. ^ infered! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 16:19'! inheritedDefinitions | res | res := OrderedCollection new. self records do: [:rec | res addAll: rec inheritedDefinitions]. ^ res ! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:06'! instEqual: another ^ PltLogicalLiteral val: self == another! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:19'! isInsideGroup: anEntityDef | | self records do: [:rec | (rec isInsideGroup: anEntityDef) ifTrue: [^ true]]. ^ false! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 21:41'! localDefinitions | res | res := OrderedCollection new. self records do: [:rec | res add: rec definition ref]. ^ res! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:14'! recordsForGroup: anEntityDef ^ self recordsForGroup: anEntityDef into: Set new! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/2/2004 09:44'! recordsForGroup: anEntityDef into: aCollection self records do: [:rec | (rec isInsideGroup: anEntityDef) ifTrue: [aCollection add: rec. ]]. ^ aCollection! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/4/2006 11:33'! stackElementOfExplicitAttribute: attr interpretor: anInterpretor | anonymousVar allAttrIdentif identif def sorted | sorted := self records asArray sort: [:a :b | a definition referenced isGeneralizationOf: b definition referenced]. sorted reverseDo: [:rec | allAttrIdentif := rec definition referenced selectLocalAttributeIdentifications: [:a | a = attr]. allAttrIdentif notEmpty ifTrue: [identif := allAttrIdentif last. def := identif definition. anonymousVar := PltAnonymousVariable domain: def domain. ^ PlatypusExpressInterpretorStackAttribute var: anonymousVar record: rec pos: identif localPos interpretor: anInterpretor]]. ^ nil! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-tamaris' stamp: 'apl 6/3/2004 09:42'! tamarisChildrenIntoOwner: anotherReference | subs pos | subs := OrderedCollection new. self definitionOk ifTrue: [ pos := 1. self records do: [:el | subs add: (el tamarisStepValueReferenceClass owner: anotherReference position: pos). pos := pos + 1]]. ^ subs! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/15/2012 08:51'! tamarisStepValueReferenceClass ^ PlatypusStepInstanceReference ! ! !PltExternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/23/2006 18:26'! valueOfExplicitAttributeNamed: aName | sorted res | sorted := self records asArray sort: [:a :b | a definition referenced isGeneralizationOf: b definition referenced]. sorted reverseDo: [:rec | (res := rec valueOfExplicitAttributeNamed: aName) ifNotNil: [^res]]. ^ nil! ! !PltEntityInstanceReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/20/2004 01:02'! ref: aGenericInstance ^ self new updateRef: aGenericInstance! ! !PltEntityInstanceReference methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/20/2004 00:58'! inferedDomain ^ self ref computedDomain! ! !PltEntityInstanceReference methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:23'! isPltValue ^ true! ! !PltEntityInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/12/2006 23:44'! owningModel ^ ref owningModel! ! !PltEntityInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/20/2004 01:02'! updateRef: aEntityInstance self setRef: aEntityInstance. self persistentLabel: aEntityInstance persistentLabel! ! !PltDomainEquivalentItem methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/21/2003 10:37'! unwrappedItem ^ self nativeItem ifNotNil: [self nativeItem unwrappedItem]! ! !PltDivExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:36'! inferedDomain ^ PltIntegerType asDomain! ! !PltDivExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:55'! operatorSymbol ^#'/'! ! !PltDivExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:55'! pltOperator ^ '/'! ! !PltCaseAction methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 18:59'! alwaysReturn ^ action alwaysReturn ! ! !PltLocalVariable methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 15:23'! defaultValue ^ self domain defaultValue! ! !PltLocalVariable methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/25/2003 16:26'! errorQualifier ^ super errorQualifier , ' ''' , self name, ''''! ! !PltLocalVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:21'! staticDomain ^ self domain computedDomain ! ! !PltEnumerationType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 22:59'! annotation ^ String streamContents: [:strm | self elements do: [:e | strm nextPut: $.. strm nextPutAll: e asUppercase. strm nextPut: $..] separatedBy: [strm nextPutAll: ' or '] ]! ! !PltEnumerationType methodsFor: '*xtra-platypus-copying' stamp: 'apl 1/21/2004 00:03'! deepCopy ^ self copy! ! !PltEnumerationType methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 10/7/2010 16:31'! elementSymbolCorrespondingTo: aString | key | key := aString asUppercase. ^ self elements detect: [:e | e asUppercase = key] ifNone: []! ! !PltEnumerationType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/4/2003 16:42'! hasElementNamed: aString ^ (self elementSymbolCorrespondingTo: aString) notNil ! ! !PltEnumerationType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:59'! initializedValue ^ PltEnumerationValue domain: (PltDefinedTypeReference ref: self owner) element: (self elements first)! ! !PltEnumerationType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2007 10:37'! lookUpIdentifierBN: aName | el key found | key := aName asUppercase. (el := self elements detect: [:e | e asUppercase = key] ifNone: []) ifNotNil: [found := PltEnumerationValue new stepInitialize. found domain: (PltDefinedTypeReference ref: self). found domain owner: self owner. found element: el]. ^ found! ! !PltMultExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/4/2004 12:34'! inferedDomain ^ self arithmeticOperatorInferedDomain! ! !PltMultExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:58'! operatorSymbol ^ #*! ! !PltMultExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:55'! pltOperator ^ 'pltMult:'! ! !PltLikeExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:01'! operatorSymbol ^ #like! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/3/2004 11:21'! and: op ^ self! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:58'! equal: op ^ PltLogicalLiteral val: op isPltFalseConstant! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:16'! ifFalseConstant: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:16'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:16'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:16'! ifFalseConstant: alternativeBlock ifUnknownConstant: unknBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:16'! ifFalseOrUnknownConstant: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:17'! ifTrueConstant: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:17'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:17'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ falseAlternativeBlock value ! ! !PltFalseConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:17'! ifTrueConstant: alternativeBlock ifUnknownConstant: unknBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:03'! not ^PltTrueConstant new! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:10'! or: op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ op]! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 10:54'! ordering ^ 1! ! !PltFalseConstant methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/16/2004 16:18'! val ^ false! ! !PltFalseConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! xor: op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ op]! ! !PltGroupQualifier methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/23/2005 21:54'! inferedDomainWith: currDomain currDomain referenced isPltEntityDefinition ifFalse: [^ PltGenericType asDomain]. ^ (currDomain lookUpSupertypeBN: groupName) ifNil: [PltGenericType asDomain]! ! !PltInverseAttribute methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:21'! staticDomain | stdom | self minCardinality ifNil: [^ self domain computedDomain] ifNotNil: [self duplicates ifTrue: [stdom := PltBagType new] ifFalse: [stdom := PltSetType new]. stdom elementType: self domain computedDomain. stdom isGeneralType: false. stdom lowerBound: self minCardinality. stdom upperBound: self maxCardinality. ^ stdom] ! ! !PltInverseAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 21:16'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltBinaryLiteral methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:34'! inferedDomain ^ PltBinaryType asDomain! ! !PltAndExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:59'! operatorSymbol ^ #and! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/21/2012 12:10'! annotation ^ String streamContents: [:strm | self optionalFlag ifTrue: [strm nextPutAll: 'optional ']. strm nextPutAll: (self domain ifNil: ['?'] ifNotNil: [:d | d annotation])]! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-checking' stamp: 'apl 3/14/2005 10:05'! checksValueFromInstance: anInstance oid: anInteger repository: aPlatypusRepository | value selector entityDef | selector := (self getSelectorFromNamesBuilder: aPlatypusRepository namesBuilder) asSymbol. (value := anInstance perform: selector) ifNil: [self optionalFlag ifFalse: [entityDef := aPlatypusRepository metaDataSchemaInstance metaDataFor: anInstance class name asSymbol. (self isRedeclaredAsDerivedInEntityDefinition: entityDef) ifFalse: [^ Array with: (PlatypusDataChecker errorClass error: 'attribute: ' , self name , ' is mandatory but is missing' oid: anInteger repository: aPlatypusRepository)]]] ifNotNil: [^ PlatypusDataChecker checksValue: value attribute: self instanceOid: anInteger repository: aPlatypusRepository]. ^ #()! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/13/2004 10:05'! defaultValue ^ self domain defaultValue! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 09:51'! fastSetSelectorFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedSetSelectorFrom: self name prefix: 'fastSet' suffix: ''! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 09:59'! getSelectorFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedGetSelectorFrom: self name prefix: nil suffix: ''! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:45'! initializedValue ^ self domain initializedValue! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 10:22'! instVarNameFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedVarNameFrom: self name ! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-checking' stamp: 'apl 3/6/2006 11:03'! isRedeclaredAsDerivedInEntityDefinition: entityDef | canTest | canTest := false. entityDef inheritedAttributesDo: [:attr | (self == attr) ifTrue: [canTest := true] ifFalse: [canTest ifTrue: [(attr name asUppercase = self name asUppercase and: [attr isPltDerivedAttribute]) ifTrue: [^ true]]]]. ^ false ! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 22:57'! lowSetSelectorFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedSetSelectorFrom: self name prefix: nil suffix: ''! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 09:56'! setSelectorFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedSetSelectorFrom: self name prefix: 'set' suffix: ''! ! !PltExplicitAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 21:13'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltAnonymousVariable class methodsFor: '*xtra-platypus-instance-creation' stamp: 'alain.plantec 1/20/2009 11:58'! default ^ default ifNil: [ default := PltAnonymousVariable domain: PltMissingValue new]! ! !PltAnonymousVariable class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 20:58'! domain: aDomain ^ self new domain: aDomain! ! !PltAnonymousVariable methodsFor: '*xtra-platypus-interpreting' stamp: 'apl 1/28/2006 12:38'! platypusVariable ^ self! ! !PltAnonymousVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:19'! staticDomain ^ domain computedDomain ! ! !PltBinaryExpression class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 21:13'! left: lexpr right: rexpr ^ self new left: lexpr right: rexpr! ! !PltBinaryExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/20/2004 21:14'! left: lexpr right: rexpr self leftExpr: lexpr. self rightExpr: rexpr! ! !PltBinaryExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:54'! operatorSymbol ^ self subclassResponsibility ! ! !PltBinaryExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:53'! pltOperator ^ self subclassResponsibility! ! !PltMetaMappingRule class methodsFor: '*xtra-platypus-instance-creation' stamp: 'MrCleaner 1/20/2011 19:48'! typeMapWhere: aCondition to: anExpression ^ (self new metaCondition: aCondition) metaExpression: anExpression! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/20/2011 19:47'! haveError ^ haveError ifNil: [haveError := true]! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/20/2011 19:47'! haveError: aBoolean haveError := aBoolean! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/20/2011 21:02'! metaCondition: anExpression metaCondition := anExpression. self updateCondition! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/20/2011 19:46'! metaExpression: anExpression metaExpression := anExpression. self updateExpression! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/21/2011 00:12'! updateCondition metaCondition isNil ifFalse: [condition := metaCondition prettyPrintedExpressCode] ifTrue: [condition := '']! ! !PltMetaMappingRule methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/21/2011 00:12'! updateExpression metaExpression isNil ifFalse: [expression := metaExpression prettyPrintedExpressCode] ifTrue: [expression := '']! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:12'! add: anElement | el | el := PltAggregateInitializerElement val: anElement. self contents add: el! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/1/2006 10:13'! add: anElement beforeIndex: index | nelem elPos updatedElem updatedElemRep | nelem := PltAggregateInitializerElement val: anElement. index <= 0 ifTrue: [self contents addFirst: nelem] ifFalse: [index > self size ifTrue: [self contents addLast: nelem] ifFalse: [elPos := self elementPositionForIndex: index. updatedElem := self contents at: elPos key. updatedElemRep := updatedElem repetitionValue. updatedElemRep = 1 ifFalse: [updatedElem repetition val: elPos value - 1. self contents add: (PltAggregateInitializerElement val: updatedElem val repetition: (PltIntegerLiteral val: updatedElemRep - elPos value + 1)) afterIndex: elPos key]. self contents add: nelem afterIndex: elPos key - 1]]! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/11/2004 12:34'! addAll: aCollection aCollection do: [ :el | self add: el] ! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 09:58'! addElementsTo: anotherAggregate elementType: aType if: ifBlock interpretor: anInterpretor self contents do: [:e | e addElementsTo: anotherAggregate elementType: aType if: ifBlock interpretor: anInterpretor]. ^ anotherAggregate! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:04'! addElementsTo: anotherAggregate elementType: aType interpretor: anInterpretor self contents do: [:e | e addElementsTo: anotherAggregate elementType: aType interpretor: anInterpretor]. ^ anotherAggregate! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:13'! addElementsTo: anotherAggregate from: idx1 to: idx2 elementType: aType if: ifBlock interpretor: anInterpretor | passed pos element taken takenHere oldSize newSize | passed := 0. pos := 1. [passed < idx1 and: [pos <= self contents size]] whileTrue: [element := self contents at: pos. passed := passed + element repetitionValue. passed < idx1 ifTrue: [pos := pos + 1]]. taken := idx1. takenHere := passed - idx1 + 1. [(oldSize := anotherAggregate size) < idx2 and: [pos <= self contents size]] whileTrue: [element := self contents at: pos. element addElementsTo: anotherAggregate upTo: takenHere elementType: aType if: ifBlock interpretor: anInterpretor. newSize := anotherAggregate size. taken := taken + (newSize - oldSize). takenHere := idx2 - taken + 1. pos := pos + 1]. ^ anotherAggregate! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:13'! addElementsTo: anotherAggregate from: idx1 to: idx2 elementType: aType interpretor: anInterpretor | passed pos element taken takenHere oldSize newSize | passed := 0. pos := 1. [passed < idx1 and: [pos <= self contents size]] whileTrue: [element := self contents at: pos. passed := passed + element repetitionValue. passed < idx1 ifTrue: [pos := pos + 1]]. taken := idx1. takenHere := passed - idx1 + 1. [(oldSize := anotherAggregate size) < idx2 and: [pos <= self contents size]] whileTrue: [element := self contents at: pos. element addElementsTo: anotherAggregate upTo: takenHere elementType: aType interpretor: anInterpretor. newSize := anotherAggregate size. taken := taken + (newSize - oldSize). takenHere := idx2 - taken + 1. pos := pos + 1]. ^ anotherAggregate! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-updating' stamp: 'apl 6/11/2004 12:39'! adjustLowerAndUpperBounds ! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/23/2004 13:08'! at: anIndex | elem | elem := self elementAt: anIndex. ^ elem val! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/1/2006 10:14'! at: index put: anObject self removeAt: index. self add: anObject beforeIndex: index! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/11/2004 12:29'! contentsList | list | list := OrderedCollection new. self do: [ :el | list add: el assignableValue]. ^ list! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/19/2004 15:18'! do: aBlock ^ self contents do: [ :el | el do: aBlock]! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:13'! elementAt: anIndex | pos | pos := self elementPositionForIndex: anIndex. ^ self contents at: pos key! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:14'! elementPositionForIndex: anIndex | pos idx elem rep remainder | remainder := anIndex. pos := 0. idx := 0. rep := 0. [pos < anIndex] whileTrue: [idx := idx + 1. remainder := remainder - rep. elem := self contents at: idx. pos := pos + (rep := elem repetitionValue)]. ^ idx -> remainder! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:13'! equal: other | res | other isPltAggregateData ifFalse: [^ PltLogicalLiteral val: false]. (self contents anySatisfy: [:el | el isPltMissingValue]) ifTrue: [^ PltLogicalLiteral val: #unknown]. (other contents anySatisfy: [:el | el isPltMissingValue]) ifTrue: [^ PltLogicalLiteral val: #unknown]. 1 to: self contents size do: [:pos | res := (contents at: pos) equal: (other contents at: pos) asAggregateInitializerElement. res ifFalseOrUnknownConstant: [^ res]]. ^ PltTrueConstant new! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:12'! inferedDomain | elType elementsDomains | elementsDomains := Set new. self contents do: [:exp | elementsDomains add: exp computedDomain]. elType := PltAggregateInitializerDomain new. elType types: (elementsDomains isEmpty ifTrue: [Set with: PltGenericType asDomain] ifFalse: [elementsDomains]). ^ elType ! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/23/2005 21:40'! occurrencesOf: anElement | e count | e := anElement isPltAggregateInitializerElement ifTrue: [anElement val] ifFalse: [anElement]. count := 0. self contents do: [:el | (el val instEqual: e) ifTrueConstant: [count := count + el repetitionValue]]. ^ count! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2006 14:39'! pltNativeValue ^ self! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:25'! removeAt: index | elPos elem | elPos := self elementPositionForIndex: index. elem := self contents at: elPos key. elem repetitionValue = 1 ifTrue: [^ self contents removeAt: elPos key]. elem repetitionValue: elem repetitionValue - 1! ! !PltAggregateInitializer methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:27'! size | size pos elem | size := 0. pos := 0. [pos < self contents size] whileTrue: [pos := pos + 1. elem := self contents at: pos. size := size + elem repetitionValue]. ^ size! ! !PltBinarySupertypeExpression methodsFor: '*xtra-platypus-checking' stamp: 'apl 11/15/2003 10:30'! checksSubtypesInheritance: mySuper ^ (self leftExpr checksSubtypesInheritance: mySuper), (self rightExpr checksSubtypesInheritance: mySuper) ! ! !PltIfStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 7/26/2004 20:45'! alwaysReturn self elseStatements ifNotNil: [ (self elseStatements anySatisfy: [:stmt | stmt alwaysReturn]) ifFalse: [^ false]. ^ self thenStatements anySatisfy: [:stmt | stmt alwaysReturn]]. ^ false! ! !PltGeneralAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 21:36'! canBeAssignedWith: otherType otherType isPltAggregateCompatibleType ifFalse: [^ false]. ^ otherType elementType isAssignableTo: self elementType! ! !PltGeneralAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/20/2003 12:00'! isGeneralizationOf: otherType ^ otherType isKindOf: PltAggregateType! ! !PltGeneralAggregateType methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:20'! staticDomain | d | d := self class new. d elementType: self elementType computedDomain. ^ d ! ! !PltStringType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/23/2004 10:11'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asStringLiteralCompatibleTo: self interpretor: anInterpretor! ! !PltStringType methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:22'! elementType ^ self computedDomain ! ! !PltStringType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:56'! initializedValue ^ PltStringLiteral val: ''! ! !PltStringType methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:16'! isPltNumberOrStringType ^ true! ! !PltListInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/9/2004 12:19'! add: newObject beforeIndex: index index <= 0 ifTrue: [self contents addFirst: newObject] ifFalse: [index >= self size ifTrue: [self contents addLast: newObject] ifFalse: [self contents add: newObject afterIndex: index]]! ! !PltListInstance methodsFor: '*xtra-platypus-converting' stamp: 'AlainPlantec 5/17/2012 10:56'! asListInstance ^ self! ! !PltListInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 16:34'! asListInstanceCompatibleTo: aType interpretor: anInterpretor (self isCompatibleWith: aType) ifTrue: [^ self]. ^ super asListInstanceCompatibleTo: aType interpretor: anInterpretor! ! !PltListInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/17/2012 10:54'! contentsList ^ OrderedCollection newFrom: contents! ! !PltListInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/26/2004 02:51'! inferedDomain | aggr | aggr := PltListType new. aggr isGeneralType: self general. aggr lowerBound: self lowerBound. aggr upperBound: self upperBound. aggr elementType: self inferedElementType. ^ aggr! ! !PltListInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/9/2004 12:24'! removeAt: index ^ self contents removeAt: index ! ! !PltRealType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:10'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asRealLiteralCompatibleTo: self interpretor: anInterpretor ! ! !PltRealType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:55'! initializedValue ^ PltRealLiteral val: 0.0! ! !PltAggrUnaryExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'AlainPlantec 10/7/2010 16:05'! inferedDomain | aggr | aggr := PltGeneralAggregateType new. aggr elementType: PltGenericType asDomain. ^ aggr! ! !PltConstantDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/13/2004 10:36'! defaultValue ^ self domain defaultValue! ! !PltConstantDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/18/2006 11:31'! errorQualifier ^ super errorQualifier , ' ''' , self name , ''''! ! !PltConstantDefinition methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:20'! staticDomain ^ self domain computedDomain ! ! !PltConstantDefinition methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:33'! variableHolders ^ OrderedCollection with: self! ! !Number methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:59'! pltMinus: aNumber ^ self - aNumber! ! !Number methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:49'! pltMult: aNumber ^ self * aNumber! ! !PltEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:59'! operatorSymbol ^ #=! ! !PltEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/4/2005 13:54'! pltOperator ^ '='! ! !PltMetaMappingDefinition class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 9/19/2007 07:05'! definitionPath: aListOfString metaExpression: anExpression ^ (self new definitionPath: aListOfString) metaExpression: anExpression! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 07:00'! definitionPath ^ definitionPath! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 06:59'! definitionPath: aListOfString definitionPath := aListOfString! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 11:29'! errorQualifier | s | s := ''. definitionPath do: [:p | s := s, p] separatedBy: [s := s, '.']. ^ super errorQualifier , ' ''' , s , ''''! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 07:03'! haveError ^ haveError ifNil: [haveError := true]! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 07:04'! haveError: aBoolean haveError := aBoolean! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/19/2007 07:02'! metaExpression: anExpression metaExpression := anExpression. self updateExpression! ! !PltMetaMappingDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/21/2011 00:12'! updateExpression metaExpression isNil ifFalse: [expression := metaExpression prettyPrintedExpressCode] ifTrue: [expression := '']! ! !PltReturnStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 19:08'! alwaysReturn ^ true! ! !PltOneofSupertypeExpression methodsFor: '*xtra-platypus-checking' stamp: 'apl 11/15/2003 10:32'! checksSubtypesInheritance: mySuper | result | result := OrderedCollection new. self exprList do: [ :e | result addAll: (e checksSubtypesInheritance: mySuper)]. ^ result! ! !PltOneofSupertypeExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2003 17:46'! operatorSymbol ^#oneof! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:28'! + op op ifMissing: [^ op] ifNotMissing: [op isPltStringLiteral ifTrue: [^ PltStringLiteral val: self val , op val] ifFalse: [op isPltAggregateData ifTrue: [^ op addFirst: self] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]]! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:05'! < anotherLiteral ^PltLogicalLiteral val: self val < anotherLiteral val ! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:05'! <= anotherLiteral ^PltLogicalLiteral val: self val <= anotherLiteral val ! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:05'! > anotherLiteral ^PltLogicalLiteral val: self val > anotherLiteral val ! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:05'! >= anotherLiteral ^PltLogicalLiteral val: self val >= anotherLiteral val ! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/2/2012 13:14'! asClearText ^self unformattedString! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:33'! asStringLiteralCompatibleTo: aStringType interpretor: anInterpretor | width | aStringType width isNil ifTrue: [^ self]. anInterpretor acceptTry: aStringType width. width := anInterpretor popVal val. aStringType fixedWidth ifFalse: [self size <= width ifTrue: [^ self]. ^ self class val: (self val copyFrom: 1 to: width)]. self size > width ifTrue: [^ self class val: (self val copyFrom: 1 to: width)]. ^ self class val: (self val padded: #right to: width with: $ )! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/17/2003 14:34'! at: anIndex ^ self copyFrom: anIndex to: anIndex! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/22/2003 12:41'! at: anIndex put: aSubString self val: (self val copyReplaceFrom: anIndex to: anIndex with: aSubString val). ^ self! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 20:54'! copyFrom: idx1 to: idx2 ^ self class val: (self val copyFrom: idx1 to: idx2). ! ! !PltStringLiteral methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:40'! inferedDomain ^ PltStringType asDomain! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:38'! plus: op interpretor: anInterpretor op isPltAggregateData ifTrue: [^ op addFirst: self interpretor: anInterpretor]. ^ self + op! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/22/2003 13:08'! range: anInterval ^ self copyFrom: anInterval first to: anInterval last! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:07'! range: anInterval interpretor: anInterpretor ^ self copyFrom: anInterval first to: anInterval last ! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/22/2003 13:06'! range: anInterval put: aSubString self val: (self val copyReplaceFrom: anInterval first to: anInterval last with: aSubString val)! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 09:25'! range: anInterval put: aSubString interpretor: anInterpretor self val: (self val copyReplaceFrom: anInterval first to: anInterval last with: aSubString val)! ! !PltStringLiteral methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/7/2004 14:56'! size ^ self val size! ! !PltStringLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 11/9/2012 22:52'! unformattedString val ifNil: [^ '**nil**']. ^ val unformattedString! ! !PltNativeStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/10/2006 10:04'! alwaysReturn ^ self source havePlatypusInterpreterCode! ! !PltNativeStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:50'! isDebugged ^ false! ! !PltLogicalLiteral class methodsFor: '*xtra-platypus-instance creation' stamp: 'apl 1/26/2004 16:09'! val: aBoolean ^aBoolean == #unknown ifTrue: [PltUnknownConstant new] ifFalse: [aBoolean ifTrue: [PltTrueConstant new] ifFalse: [PltFalseConstant new]]! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! < op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifTrue: [^ PltLogicalLiteral val: self ordering < op ordering] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! <= op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifTrue: [^ PltLogicalLiteral val: self ordering <= op ordering] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! > op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifTrue: [^ PltLogicalLiteral val: self ordering > op ordering] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! >= op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifTrue: [^ PltLogicalLiteral val: self ordering >= op ordering] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:39'! inferedDomain ^ PltLogicalType asDomain! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:19'! isPltOrderedLiteral ^ true! ! !PltLogicalLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 10:55'! ordering ^ self subclassResponsibility! ! !PltReferencedSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:36'! selectionString ^ 'REFERENCE ' , super selectionString! ! !PltAssignable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:13'! staticDomain | currDomain | currDomain := self head computedDomain. self qualifiers do: [:qual | currDomain := qual inferedDomainWith: currDomain]. ^ currDomain ! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/10/2006 10:03'! alwaysReturn ^ self havePlatypusInterpreterCode! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-data-management' stamp: 'apl 2/18/2006 23:46'! buildNativeCodesFromString: aString | code pos size withSignature curr s | code := PltNativeCode new. pos := 1. size := aString size. withSignature := nil. [pos < size and: [withSignature isNil]] whileTrue: [(Character separators includes: (curr := aString at: pos)) ifFalse: [withSignature := curr = $<]. pos := pos + 1]. s := ReadStream on: aString. (withSignature notNil and: [withSignature]) ifTrue: [s upTo: $<. code languageSignature: (s upTo: $>). code code: s upToEnd] ifFalse: [code code: s upToEnd]. self implementations add: code! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/10/2006 10:02'! havePlatypusInterpreterCode ^ self platypusInterpreterCode notNil! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:47'! isDebugged ^ false! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 7/14/2011 16:51'! pharoCode ^ self implementations detect: [:nc | nc isPharoCode] ifNone: []! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 10:01'! platypusInterpreterCode ^ self implementations detect: [:nc | nc isPlatypusInterpreterCode] ifNone: []! ! !PltNativeAlgorithm methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/28/2006 11:22'! visualWorksCode ^ self implementations detect: [:nc | nc isVisualWorksCode] ifNone: []! ! !PltNegativeExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2003 19:48'! operatorSymbol ^#-! ! !PltNativeCode class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 08:41'! cppSignature ^ 'C++'! ! !PltNativeCode class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 08:41'! cppStlSignature ^ 'C++/STL'! ! !PltNativeCode class methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 7/14/2011 16:50'! pharoSignature ^ 'PHARO'! ! !PltNativeCode class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 08:41'! platypusSignature ^ 'PLATYPUS'! ! !PltNativeCode class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/28/2006 11:21'! visualWorksSignature ^ 'VISUALWORKS'! ! !PltNativeCode methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 13:01'! cachedMethod ^ cachedMethod! ! !PltNativeCode methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2006 13:01'! cachedMethod: aMethod cachedMethod := aMethod! ! !PltNativeCode methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 7/14/2011 16:50'! isPharoCode ^ self languageSignature notNil and: [self languageSignature asUppercase = self class pharoSignature]! ! !PltNativeCode methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/18/2006 14:35'! isPlatypusInterpreterCode ^ self languageSignature isNil or: [self languageSignature isEmpty or: [self languageSignature asUppercase = self class platypusSignature]]! ! !PltNativeCode methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/28/2006 11:22'! isVisualWorksCode ^ self languageSignature notNil and: [self languageSignature asUppercase = self class visualWorksSignature]! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 19:43'! bindings ^ self primaryElements asOrderedCollection, self owner bindings asOrderedCollection ! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/23/2004 10:42'! errorQualifier ^ super errorQualifier , ' ''' , self name, ''''! ! !PltContextDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:48'! expressTypeForTypeOf ^ (self owner isPltContextDefinition ifTrue: [self owner expressTypeForTypeOf , '.'] ifFalse: ['']) , self name asUppercase! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2005 13:24'! functionDeclarations ^ self algorithmes select: [ :alg | alg isPltFunctionDeclaration ]! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/13/2004 14:42'! identifiers ^ self constants , self algorithmes! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:31'! identifiersCache ^ identifiersCache ifNil: [identifiersCache := Dictionary new]! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:31'! identifiersCache: aDictionary identifiersCache := aDictionary! ! !PltContextDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/8/2004 12:21'! initializeContextInInterpretor: anInterpretor self constants do: [:con | anInterpretor declareConstant: con]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/11/2003 02:08'! insertElement: aPrimaryElement aPrimaryElement moveInto: self. self insertIntoCache: aPrimaryElement! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/29/2003 19:33'! insertIntoCache: aPrimaryElement self insertIntoCache: aPrimaryElement named: aPrimaryElement name ! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 2/23/2005 22:14'! insertIntoCache: aPrimaryElement named: anIdentifier aPrimaryElement isPltNamedType ifTrue: [self insertIntoNamedTypeCache: aPrimaryElement named: aPrimaryElement name] ifFalse: [aPrimaryElement isPltGlobalRule ifFalse: [self insertIntoIdentifiersCache: aPrimaryElement named: aPrimaryElement name]]! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/23/2005 21:47'! localPrimariesElementsIndex | locals anyOne | locals := Dictionary new. self namedTypesCache keysAndValuesDo: [:k :v | locals at: k put: v anyOne]. self identifiersCache keysAndValuesDo: [:k :v | anyOne := v anyOne. (anyOne isPltAlgorithmDeclaration or: [anyOne isPltConstantDefinition]) ifTrue: [locals at: k put: anyOne]]. ^ locals! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/24/2010 11:54'! lookUpNamedTypeBN: aName | availables | availables := self namedTypesCache at: aName asUppercase ifAbsent: []. ^ availables ifNotNil: [availables anyOne]! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/25/2005 22:37'! lookUpSchemaDefinition | ow | ow := self. [ow isPltSchemaDefinition] whileFalse: [ow := ow owner]. ^ow! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/13/2004 14:42'! namedTypes ^ self types , self entities ! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/19/2004 15:07'! namedTypesCache | | ^ namedTypesCache ifNil: [namedTypesCache := Dictionary new]. ! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/19/2004 15:07'! namedTypesCache: aDictionary namedTypesCache := aDictionary! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/15/2006 16:26'! primaryElements self constants ifNil: [^OrderedCollection new]. ^ self constants , self types , self entities , self algorithmes! ! !PltContextDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2005 13:24'! procedureDeclarations ^ self algorithmes select: [:alg | alg isPltProcedureDeclaration]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 4/29/2008 12:13'! rebuildLocalCaches | enumVal | self namedTypesCache: Dictionary new. self identifiersCache: Dictionary new. self primaryElements do: [:pe | self insertIntoCache: pe]. self types isNil ifFalse: [self types do: [:ty | ty domain ifNotNil: [ty domain isPltEnumerationType ifTrue: [ty domain elements do: [:el | enumVal := PltEnumerationValue domain: (PltDefinedTypeReference ref: ty) element: el. enumVal domain owner: self. self insertIntoIdentifiersCache: enumVal named: el asUppercase]]]]]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/29/2003 17:45'! removeAlgorithmDeclaration: anAlgorithm self algorithmes remove: anAlgorithm ifAbsent: []! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/29/2003 17:45'! removeConstantDefinition: aConstantDefinition self constants remove: aConstantDefinition ifAbsent: []! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/29/2003 17:45'! removeDefinedType: aDefinedType self types remove: aDefinedType ifAbsent: []! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 15:52'! removeElement: aPrimaryElement aPrimaryElement removeFrom: self. self removeFromCache: aPrimaryElement! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 9/29/2003 17:44'! removeEntityDefinition: anEntityDefinition self entities remove: anEntityDefinition ifAbsent:[]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 2/23/2005 22:14'! removeFromCache: aPrimaryElement aPrimaryElement isPltNamedType ifTrue: [self removeFromNamedTypeCache: aPrimaryElement] ifFalse: [aPrimaryElement isPltGlobalRule ifFalse: [self removeFromIdentifiersCache: aPrimaryElement named: aPrimaryElement name]]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 10/7/2010 16:28'! removeFromIdentifiersCache: aPrimaryElement named: anIdentifier | key availables | key := anIdentifier asUppercase. (availables := self identifiersCache at: key ifAbsent: []) ifNotNil: [availables remove: aPrimaryElement ifAbsent: []. availables ifEmpty: [self identifiersCache removeKey: key]]! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 10/7/2010 16:28'! removeFromNamedTypeCache: aPrimaryElement | key availables | key := aPrimaryElement name asUppercase. (availables := self namedTypesCache at: key ifAbsent: []) ifNotNil: [availables remove: aPrimaryElement ifAbsent: []. availables ifEmpty: [self namedTypesCache removeKey: key]]. ! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:58'! renameAlgorithmDeclaration: anAlgorithm with: anIdent self renamePrimaryElement: anAlgorithm with: anIdent ! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:58'! renameConstantDefinition: aConstantDefinition with: anIdent self renamePrimaryElement: aConstantDefinition with: anIdent! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:59'! renameDefinedType: aDefinedType with: anIdent self renamePrimaryElement: aDefinedType with: anIdent! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:59'! renameEntityDefinition: anEntityDefinition with: anIdent self renamePrimaryElement: anEntityDefinition with: anIdent! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 00:00'! renameGlobalRule: aGlobalRule with: anIdent self renamePrimaryElement: aGlobalRule with: anIdent! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:58'! renamePrimaryElement: aPrimaryElement with: anIdent self removeFromCache: aPrimaryElement. aPrimaryElement name: anIdent. self insertIntoCache: aPrimaryElement! ! !PltContextDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:54'! renameWith: newName self owner renameContextDefinition: self with: newName! ! !PltContextDefinition methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:41'! variableHolders ^ self primaryElements! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 17:42'! errorQualifier ^ super errorQualifier , ' ''' , self expression , ''''! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/13/2006 09:30'! haveError ^ haveError ifNil: [haveError := true]! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/13/2006 09:29'! haveError: aBoolean haveError:= aBoolean ! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 11:28'! metaExpression ^ metaExpression! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/22/2006 15:30'! metaExpression: anExpression metaExpression := anExpression. expression := metaExpression ifNotNil: [metaExpression expressCode]! ! !PltMetaConceptDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'MrCleaner 1/21/2011 00:12'! updateExpression expression := metaExpression prettyPrintedExpressCode. ! ! !PltAggregateInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/31/2006 10:52'! contents: anNativeCollection | aggr | aggr := self new addAll: anNativeCollection. aggr adjustLowerAndUpperBounds. ^ aggr! ! !PltAggregateInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 11/7/2003 22:59'! with: anObject ^ self new add: anObject! ! !PltAggregateInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 3/9/2004 17:31'! with: anObject with: aSecondObject | arr | arr := self with: anObject. arr add: aSecondObject. ^ arr! ! !PltAggregateInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/31/2006 11:32'! withAll: anNativeCollection ^ self contents: anNativeCollection ! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/7/2003 22:51'! add: anObject self contents add: anObject! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 10:37'! addAll: aCollection self contents addAll: aCollection! ! !PltAggregateInstance methodsFor: '*xtra-platypus-updating' stamp: 'apl 1/31/2006 10:53'! adjustLowerAndUpperBounds self lowerBound: (PltIntegerLiteral val: 1). self upperBound: (PltIntegerLiteral val: self size)! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/15/2003 22:50'! at: anIndex ^ self contents at: anIndex ! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/10/2003 17:12'! at: anIndex put: anObject ^ self contents at: anIndex put: anObject! ! !PltAggregateInstance methodsFor: '*xtra-platypus-copying' stamp: 'apl 1/6/2004 10:54'! copyEmpty ^ self class new! ! !PltAggregateInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 11/7/2003 22:53'! detect: aBlock ^ self contents detect: aBlock! ! !PltAggregateInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 11/7/2003 22:53'! detect: aBlock ifNone: ifNoneBlock ^ self contents detect: aBlock ifNone: ifNoneBlock! ! !PltAggregateInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 11/7/2003 22:52'! do: aBlock ^ self contents do: aBlock! ! !PltAggregateInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 11/7/2003 22:53'! do: aBlock separatedBy: sepBlock ^ self contents do: aBlock separatedBy: sepBlock! ! !PltAggregateInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/4/2005 13:55'! equal: other | res | (res := super equal: other) ifFalseOrUnknownConstant: [^ res]. self lowerBound = other lowerBound ifFalse: [^ PltFalseConstant new]. self upperBound ifMissing: [other upperBound isPltMissingValue ifFalse: [^ PltFalseConstant new]] ifNotMissing: [self upperBound = other upperBound ifFalse: [^ PltFalseConstant new]]. self size = other size ifFalse: [^ PltFalseConstant new]. ^ PltTrueConstant new! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 02:56'! general ^ general ifNil: [general := false]! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 02:56'! general: aBoolean general := aBoolean! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/7/2003 22:51'! includes: anObject self contents includes: anObject! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/10/2003 17:12'! indexOf: anObject ^ self contents indexOf: anObject! ! !PltAggregateInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/10/2003 16:53'! isCollection ^ true! ! !PltAggregateInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/10/2003 17:09'! isSequenceable ^ true! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/6/2004 11:12'! nativeCollection ^ self contents! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2003 14:17'! range: anInterval put: anObject self contents: (self contents copyReplaceFrom: anInterval first to: anInterval last with: anObject)! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/27/2004 09:38'! range: anInterval put: anObject interpretor: anInterpretor self contents: (self contents copyReplaceFrom: anInterval first to: anInterval last with: anObject)! ! !PltAggregateInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/7/2003 22:51'! remove: anObject self contents remove: anObject! ! !PltAggregateInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 11/7/2003 22:52'! select: aBlock ^ self contents select: aBlock! ! !PltAggregateInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'AlainPlantec 5/17/2012 12:11'! tamarisChildrenIntoOwner: anotherReference | subs collection | subs := OrderedCollection new. collection := self nativeCollection. collection doWithIndex: [:el :pos | subs add: (el tamarisStepValueReferenceClass owner: anotherReference position: pos)]. ^ subs! ! !PltProcedureCallStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:42'! isDebugged ^ false! ! !PltArithmeticExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 9/25/2006 16:35'! arithmeticOperatorInferedDomain | infered linfered rinfered elementsDomains theElementType theAggrType | linfered := self leftExpr computedDomain. rinfered := self rightExpr computedDomain. (linfered isPltGenericType or: [rinfered isPltGenericType]) ifTrue: [^PltGenericType asDomain]. (linfered isPltAggregateCompatibleType or: [rinfered isPltAggregateCompatibleType]) ifTrue: [infered := PltAggregateInitializerDomain new. elementsDomains := Set new. (linfered isPltAggregateCompatibleType and: [rinfered isPltAggregateCompatibleType]) ifTrue: [elementsDomains add: linfered elementType computedDomain. elementsDomains add: rinfered elementType computedDomain] ifFalse: [linfered isPltAggregateCompatibleType ifTrue: [theElementType := rinfered. theAggrType := linfered] ifFalse: [theElementType := linfered. theAggrType := rinfered]. elementsDomains add: theAggrType elementType computedDomain. elementsDomains add: theElementType computedDomain]. infered types addAll: elementsDomains. ^ infered]. (infered := self leftExpr inferedDomain) isPltAggregateOrStringType ifTrue: [^ infered]. (infered := self rightExpr inferedDomain) isPltAggregateOrStringType ifTrue: [^ infered]. ^ PltNumberType asDomain! ! !PltBooleanType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:50'! initializedValue ^ PltTrueConstant new! ! !PltDerivedAttribute methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 21:07'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltSplitmarkStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/12/2005 21:03'! append ^ append! ! !PltSplitmarkStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/12/2005 21:03'! append: aBoolean ^ append := aBoolean! ! !PltSplitmarkStatement methodsFor: '*xtra-platypus-initializing' stamp: 'apl 12/12/2005 21:04'! initialize super initialize. append := false! ! !PltDefinedType class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 2/4/2004 15:25'! name: anIdent domain: aDomain ^ self new name: anIdent domain: aDomain! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 23:17'! annotation (self domain isPltEnumerationType or: [self domain isPltSelectType]) ifTrue: [^ self domain annotation withoutCr]. ^ self domain annotation withoutCr ! ! !PltDefinedType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 18:57'! assignableValueFrom: aValue interpretor: anInterpretor ^ self domain assignableValueFrom: aValue interpretor: anInterpretor! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 19:41'! bindings ^ self owner bindings ! ! !PltDefinedType methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/12/2003 14:19'! canBeAssignedWith: otherType ^ (super canBeAssignedWith: otherType) ifTrue: [true] ifFalse: [self domain canBeAssignedWith: otherType]! ! !PltDefinedType methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 10/7/2010 16:29'! checksDomainPath | errPathStack | errPathStack := OrderedCollection new. ^ (self checksDomainPath: OrderedCollection new errorStack: errPathStack) ifFalse: [errPathStack]! ! !PltDefinedType methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 12/9/2013 11:25'! checksDomainPath: pathStack errorStack: errPathStack | res | res := true. (pathStack includes: self) ifTrue: [errPathStack addAll: pathStack; add: self. res := false] ifFalse: [pathStack add: self. res := (self domain ifNil: [true] ifNotNil: [self domain referenced ifNil: [true] ifNotNil: [self domain referenced checksDomainPath: pathStack copy errorStack: errPathStack]]) and: [res]]. ^res! ! !PltDefinedType methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 10/7/2010 16:29'! checksDomainPathReportAndSetErrorStack: errPathStack | res | (res := self checksDomainPath: OrderedCollection new errorStack: errPathStack) ifFalse: [Transcript show: 'Cycle in domain path: '. errPathStack do: [:e | Transcript show: e name] separatedBy: [Transcript show: '->']. Transcript show: '\' withCRs]. ^ res ! ! !PltDefinedType methodsFor: '*xtra-platypus-checking' stamp: 'apl 7/19/2003 01:23'! checksDomainPathSetErrorStack: errPathStack ^ self checksDomainPath: OrderedCollection new errorStack: errPathStack! ! !PltDefinedType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 14:53'! defaultValue ^ self domain defaultValue! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/8/2003 19:03'! domainsSet ^ self domain asDomainSet! ! !PltDefinedType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 21:55'! hasEnumerationElementNamed: aName self domain isPltEnumerationType ifTrue: [^ self domain hasElementNamed: aName]. ^ false! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:47'! initializedValue ^ self domain initializedValue! ! !PltDefinedType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 22:58'! isGeneralizationOf: otherType ^ (super isGeneralizationOf: otherType) ifFalse: [self domain isGeneralizationOf: otherType]! ! !PltDefinedType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 23:13'! isSpecializationOf: otherType ^ self domain isSpecializationOf: otherType ! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/27/2004 00:21'! lookUpIdentifierBN: aName | found | (found := super lookUpIdentifierBN: aName) ifNil: [self domain ifNotNil: [found := self domain lookUpIdentifierBN: aName]]. ^ found! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/27/2004 00:21'! lookUpNamedTypeBN: aName | found | (found := super lookUpNamedTypeBN: aName) ifNil: [self domain ifNotNil: [found := self domain lookUpNamedTypeBN: aName]]. ^ found! ! !PltDefinedType methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/11/2003 02:07'! moveInto: aContextDefinition aContextDefinition types add: self. self owner: aContextDefinition! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/4/2004 15:26'! name: anIdent domain: aDomain self name: anIdent . self domain: aDomain! ! !PltDefinedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/7/2006 09:23'! referenceClass ^ PltDefinedTypeReference! ! !PltDefinedType methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 15:35'! removeFrom: aContextDefinition aContextDefinition removeDefinedType: self. ! ! !PltDefinedType methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:44'! renameWith: aString self owner renameDefinedType: self with: aString. ! ! !PltDefinedType methodsFor: '*xtra-platypus-type-infering' stamp: 'AlainPlantec 1/13/2013 13:08'! staticDomain ^ self domain ifNotNil: [:d | d computedDomain] ! ! !PltNumberType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/20/2003 12:01'! isGeneralizationOf: otherType ^ otherType isKindOf: self class! ! !PltNumberType methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:15'! isPltNumberOrStringType ^ true! ! !PltProcedureDeclaration methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 09:49'! generatedClassNameSuffix ^ 'Procedure'! ! !PltProcedureDeclaration methodsFor: '*xtra-platypus-classification' stamp: 'apl 6/21/2003 10:28'! isProcedureDeclaration ^ true ! ! !Array methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 1/31/2006 11:35'! isPltArray ^ true! ! !PltQueryVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/2/2004 11:41'! computedDomain ^ self inferedDomain ! ! !PltQueryVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/2/2004 11:35'! domain ^ self inferedDomain ! ! !PltQueryVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:40'! inferedDomain ^ PltGenericType asDomain! ! !PltQueryVariable methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/21/2003 17:34'! name ^ self variableId! ! !PltQueryVariable methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:37'! variableHolders ^ OrderedCollection with: self! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:10'! and: op ^ self! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:06'! equal: op ^ self! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:24'! ifFalseConstant: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:22'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:23'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ unknBlock value ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:23'! ifFalseConstant: alternativeBlock ifUnknownConstant: unknBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ unknBlock value ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 3/10/2004 18:28'! ifFalseOrUnknownConstant: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:31'! ifTrueConstant: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:24'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:24'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ unknBlock value ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:24'! ifTrueConstant: alternativeBlock ifUnknownConstant: unknBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^ unknBlock value ! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:07'! not ^self! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:11'! or: op ^ self! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 10:55'! ordering ^ 2! ! !PltUnknownConstant methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/16/2004 16:18'! val ^ #unknown! ! !PltUnknownConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 16:11'! xor: op ^self! ! !PltModExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:39'! inferedDomain ^ PltIntegerType asDomain! ! !PltModExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:57'! operatorSymbol ^ #mod! ! !PltModExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/4/2005 12:36'! pltOperator ^ '\\'! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 22:58'! annotation ^ self name! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 21:00'! attributeBN: aName | upper | upper := aName asUppercase. ^ self attributesReverseDetect: [:attr | attr name asUppercase = upper]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 2/8/2007 14:43'! attributesReverseDetect: aBlock self attributes ifNotNil: [self attributes reverseDo: [:attr | (aBlock value: attr) ifTrue: [^ attr]]]. ^ nil! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/20/2006 18:21'! attributesReverseDo: aBlock self attributes reverseDo: [:attr | aBlock value: attr]. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/12/2012 11:08'! bindings ^ self inheritedExplicitAttributes, self owner bindings ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 12/5/2013 09:49'! buildAttributesNamesSetIndex: namesSetIndex | key | (self attributes ifNil: [ ^ self ]) do: [:a | key := a name asUppercase. (a redeclaring notNil and: [a redeclaring entityRef ref ~= self]) ifTrue: [key := a redeclaring entityRef name asUppercase , '.' , key]. namesSetIndex at: key ifAbsentPut: Set new. (namesSetIndex at: key) add: a]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/7/2012 08:25'! buildFullInheritedDerivedAttributeList: aCollection self supertypes do: [:st | st ref buildFullInheritedDerivedAttributeList: aCollection]. aCollection addAll: self derivedAttributes. ^ aCollection! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 13:57'! buildFullInheritedExplicitAttributeList: aCollection self supertypes ifNotNil: [ self supertypes do: [:st | st ref buildFullInheritedExplicitAttributeList: aCollection]]. self explicitAttributes do: [:ea | (aCollection includes: ea) ifFalse: [aCollection add: ea]]. ^ aCollection! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/7/2012 08:25'! buildFullInheritedInverseAttributeList: aCollection self supertypes do: [:st | st ref buildFullInheritedInverseAttributeList: aCollection]. aCollection addAll: self inverseAttributes. ^ aCollection! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/7/2012 08:25'! buildFullInheritedWhereRuleList: aCollection self supertypes do: [:st | st ref buildFullInheritedWhereRuleList: aCollection]. aCollection addAll: self whereRules. ^ aCollection! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:39'! canBeAssignedWith: otherType ^ otherType isAssignableToEntityDefinition: self! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2006 12:00'! canHaveArguments ^ true! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'apl 9/30/2003 09:04'! checksAttributesNames | namesSetIndex errorsIndex | namesSetIndex := Dictionary new. errorsIndex := Dictionary new. ^ self checksAttributesNamesSetIndex: namesSetIndex errors: errorsIndex. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'apl 10/29/2003 20:18'! checksAttributesNamesSetIndex: namesSetIndex errors: errorsIndex ^ self checksAttributesNamesSetIndex: namesSetIndex errors: errorsIndex visited: Set new ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 12/5/2013 09:51'! checksAttributesNamesSetIndex: namesSetIndex errors: errorsIndex visited: visitedSet | errMessage namesSetIndex2 visitedSet2 | (visitedSet includes: self) ifFalse: [self buildAttributesNamesSetIndex: namesSetIndex. namesSetIndex keysAndValuesDo: [:k :l | l size > 1 ifTrue: [errorsIndex at: k ifAbsentPut: [errMessage := 'name conflict with attribute ''' , k , ''': defined in entities '. l do: [:el | errMessage := errMessage , '''' , el owner name , ''''] separatedBy: [errMessage := errMessage , ',']. PlatypusExpressSemanticCheckerError metaData: self message: errMessage]]]. (self supertypes ifNil: [ ^errorsIndex ]) do: [:st | namesSetIndex2 := namesSetIndex copy. visitedSet2 := visitedSet copy. visitedSet2 add: self. st ref checksAttributesNamesSetIndex: namesSetIndex2 errors: errorsIndex visited: visitedSet2]]. ^ errorsIndex! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 10/7/2010 16:30'! checksHierarchy | errPathStack | errPathStack := OrderedCollection new. ^ (self checksHierarchy: OrderedCollection new errorStack: errPathStack) ifFalse: [errPathStack]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 5/6/2012 09:19'! checksHierarchy: pathStack errorStack: errPathStack | res | res := true. (pathStack includes: self) ifTrue: [errPathStack addAll: pathStack; add: self. res := false] ifFalse: [ pathStack add: self. self supertypes ifNotNil: [ self supertypes do: [:st | res := ((st notNil and: [st isPltEntityDefinition]) ifTrue: [st checksHierarchy: pathStack copy errorStack: errPathStack] ifFalse: [true]) and: [res]]]]. ^ res! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 5/6/2012 09:57'! checksHierarchy: pathStack errorStack: errPathStack visited: visitedSet | res | res := true. (visitedSet includes: self) ifTrue: [res := false] ifFalse: [visitedSet add: self. (pathStack includes: self) ifTrue: [errPathStack addAll: pathStack; add: self. res := false] ifFalse: [pathStack add: self. self supertypes do: [:st | res := st isPltEntityDefinition ifTrue: [st checksHierarchy: pathStack copy errorStack: errPathStack visited: visitedSet] ifFalse: [true]]]]. ^ res! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 10/7/2010 16:30'! checksHierarchyReportAndSetErrorStack: errPathStack | res | (res := self checksHierarchy: OrderedCollection new errorStack: errPathStack) ifFalse: [Transcript show: 'Cycle in hierarchy path: '. errPathStack do: [:e | Transcript show: e name] separatedBy: [Transcript show: '->']. Transcript show: '\' withCRs]. ^ res! ! !PltEntityDefinition methodsFor: '*xtra-platypus-checking' stamp: 'apl 7/19/2003 00:04'! checksHierarchySetErrorStack: errPathStack ^ self checksHierarchy: OrderedCollection new errorStack: errPathStack! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 10:07'! componentList | components | components := OrderedCollection new. components addAll: self explicitAttributes. components addAll: self inverseAttributes. components addAll: self derivedAttributes. components addAll: self whereRules. ^ components! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 18:59'! defaultValue ^ PltMissingValue new! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:43'! derivedAttributes ^ self attributes ifNil: [#()] ifNotNil: [ self attributes select: [:a | a isPltDerivedAttribute]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 15:16'! destroySubtypes subtypes := nil! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/12/2012 18:22'! emptyExternalRepresentation | inst | inst := PltExternalRepresentation new. self emptyRecordsInto: inst records. ^ inst! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/12/2012 20:59'! emptyInternalRepresentation | inst | inst := PltInternalRepresentation new. inst definition: self referenceOnSelf. self inheritedExplicitAttributesDo: [:a | inst parameters add: a initializedValue]. ^ inst! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/12/2012 20:59'! emptyRecord | inst | inst := PltSimpleRecord new. inst definition: self referenceOnSelf. self explicitAttributesDo: [:a | inst parameters add: a initializedValue]. ^ inst! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/6/2012 18:52'! emptyRecordsInto: aCollection self supertypes do: [ :st | st ref emptyRecordsInto: aCollection]. aCollection add: self emptyRecord. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/6/2012 18:52'! entityDefinitionOfGroupNamed: anIdent | found | self name asUppercase = anIdent asUppercase ifTrue: [^ self]. self supertypes do: [:st | (found := st ref entityDefinitionOfGroupNamed: anIdent) ifNotNil: [^ found]]. ^ nil! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 13:58'! explicitAttributes self attributes ifNil: [^ #() ]. ^ self attributes select: [:a | a isPltExplicitAttribute]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 10/24/2006 01:45'! explicitAttributesAndValuesDo: aBlock values: parameters startingAt: startAttributePosition self explicitAttributesWithIndexDo: [:attr :pos | pos >= startAttributePosition ifTrue: [aBlock value: attr value: (parameters at: pos)]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 4/14/2006 08:42'! explicitAttributesDo: aBlock self attributes ifNotNil: [self attributes do: [:attr | attr isPltExplicitAttribute ifTrue: [aBlock value: attr]]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 10/19/2010 01:34'! explicitAttributesDo: aBlock separatedBy: aSepBlock | count pos | count := 0. self attributes ifNotNil: [:attrs | attrs do: [:attr | attr isPltExplicitAttribute ifTrue: [count := count + 1]] ]. pos := 0. self attributes ifNotNil: [:attrs | attrs do: [:attr | attr isPltExplicitAttribute ifTrue: [pos := pos + 1. aBlock value: attr]. pos < count ifTrue: [aSepBlock value] ] ]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 10/24/2006 01:42'! explicitAttributesWithIndexDo: aBlock self attributes ifNotNil: [self attributes withIndexDo: [:attr :idx | attr isPltExplicitAttribute ifTrue: [aBlock value: attr value: idx]]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 10:15'! fullInheritedComponentList | fullInheritedComponents | fullInheritedComponents := OrderedCollection new. self buildFullInheritedExplicitAttributeList: fullInheritedComponents. self buildFullInheritedInverseAttributeList: fullInheritedComponents. self buildFullInheritedDerivedAttributeList: fullInheritedComponents. self buildFullInheritedWhereRuleList: fullInheritedComponents. ^ fullInheritedComponents! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/27/2004 09:58'! inheritancePath ^ self inheritancePathInto: OrderedCollection new! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/6/2012 18:08'! inheritancePathInto: aCollection (aCollection includes: self) ifFalse: [aCollection add: self. self supertypes do: [:st | st ifNotNil: [st ref inheritancePathInto: aCollection]]]. ^ aCollection! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/6/2006 10:52'! inheritedAttributesDo: aBlock ^ self inheritedAttributesDo: aBlock separatedBy: []! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 5/6/2012 14:32'! inheritedAttributesDo: aBlock separatedBy: aSepBlock | done | done := false. self supertypes do: [:st | (st ref inheritedAttributesDo: aBlock separatedBy: aSepBlock) ifTrue: [done := true]]. self attributes ifNotEmpty: [:eattrs | done ifTrue: [aSepBlock value]. done := true. eattrs do: [:attr | aBlock value: attr] separatedBy: aSepBlock]. ^ done! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 6/12/2012 14:17'! inheritedAttributesReverseDetect: aBlock | found | (found := self attributesReverseDetect: aBlock) ifNil: [self supertypes ifNotNil: [self supertypes reverseDo: [:st | (found := st ref ifNotNil: [st ref inheritedAttributesReverseDetect: aBlock]) ifNotNil: [^ found]]]]. ^ found! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 5/6/2012 14:37'! inheritedAttributesReverseDo: aBlock self attributesReverseDo: aBlock. self supertypes reverseDo: [:st | st ref inheritedAttributesReverseDo: aBlock]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 12/22/2006 16:06'! inheritedDefinitions | res | res := OrderedCollection new. self inheritedDefinitionsDo: [:d | res add: d]. ^ res! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 5/6/2012 14:38'! inheritedDefinitionsDo: aBlock self supertypes do: [:st | st ref inheritedDefinitionsDo: aBlock]. aBlock value: self! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/12/2012 11:07'! inheritedExplicitAttributes ^ self buildFullInheritedExplicitAttributeList: OrderedCollection new! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/2/2006 16:39'! inheritedExplicitAttributesDo: aBlock ^ self inheritedExplicitAttributesDo: aBlock separatedBy: []! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 5/2/2012 10:24'! inheritedExplicitAttributesDo: aBlock separatedBy: aSepBlock ^ self inheritedExplicitAttributesDo: aBlock separatedBy: aSepBlock doneFor: Set new! ! !PltEntityDefinition methodsFor: '*xtra-platypus-enumerating' stamp: 'AlainPlantec 5/14/2012 22:44'! inheritedExplicitAttributesDo: aBlock separatedBy: aSepBlock doneFor: aSet | done attrs | done := false. self supertypes ifNotNil: [ self supertypes do: [:st | st ref ifNotNil: [ (st ref inheritedExplicitAttributesDo: aBlock separatedBy: aSepBlock doneFor: aSet) ifTrue: [ done := true]]]]. (self numberOfExplicitAttributes > 0 and: [done]) ifTrue: [aSepBlock value]. self explicitAttributesDo: [:attr | (aSet includes: attr) ifFalse: [ done := true. aBlock value: attr. aSet add: attr] ] separatedBy: aSepBlock. ^ done! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/11/2005 19:29'! inheritsFrom: anEntityDefinition ^ self isSpecializationOfEntityDefinition: anEntityDefinition ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 1/21/2011 22:52'! inheritsFromEntityDefinitionNamed: aName ^ self isSpecializationOfEntityDefinitionNamed: aName! ! !PltEntityDefinition methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 1/28/2011 12:01'! initializeContextInInterpretor: anInterpretor | stackVal args | stackVal := anInterpretor argsStackTop. stackVal arguments size ~= self numberOfExplicitAttributes ifTrue: ["PlatypusExpressArgumentNumberException signal: 'invalid number of argument'" ]. "PlatypusExpressArgumentNumberException signal: 'invalid number of argument'" args := stackVal arguments. self numberOfExplicitAttributes - args size timesRepeat: [args add: (PlatypusExpressInterpretorStackVar interpretor: anInterpretor)]. self explicitAttributesWithIndexDo: [:attr :pos | anInterpretor localData: attr value: (args at: pos) val]. super initializeContextInInterpretor: anInterpretor! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:43'! inverseAttributes ^ self attributes ifNil: [#()] ifNotNil: [self attributes select: [:a | a isPltInverseAttribute]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/12/2005 20:47'! isAssignableToEntityDefinition: anEntityDefinition ^ (self inheritsFrom: anEntityDefinition) or: [anEntityDefinition inheritsFrom: self]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/25/2012 00:06'! isAttributeRedeclared: anAttribute self inheritedAttributesDo: [: attr | (attr redeclaring notNil and: [attr redeclaring referenced == anAttribute]) ifTrue: [^ true]]. ^ false ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 7/27/2004 10:04'! isCompatibleWith: otherType ^ otherType isCompatibleWithEntityDefinition: self. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 7/27/2004 10:06'! isCompatibleWithEntityDefinition: anEntityDefinition ^ (self inheritancePath asSet intersection: anEntityDefinition inheritancePath asSet) notEmpty! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/6/2012 18:46'! isDirectSubtypeOf: parent ^ self supertypes anySatisfy: [:st | st ref == parent]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/18/2003 13:44'! isGeneralizationOf: otherType ^ otherType isSpecializationOfEntityDefinition: self.! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/6/2012 14:38'! isSpecializationOfEntityDefinition: anEntityDefinition self == anEntityDefinition ifTrue: [^ true] ifFalse: [self supertypes ifNotNil: [self supertypes do: [:st | (st notNil and: [st ref isSpecializationOfEntityDefinition: anEntityDefinition]) ifTrue: [^ true]]]]. ^ false! ! !PltEntityDefinition methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/6/2012 14:39'! isSpecializationOfEntityDefinitionNamed: aName | key | key := aName asUppercase. self name asUppercase = key ifTrue: [^ true] ifFalse: [self supertypes ifNotNil: [self supertypes do: [:st | (st notNil and: [st ref isSpecializationOfEntityDefinitionNamed: key]) ifTrue: [^ true]]]]. ^ false! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 21:04'! key ^ self name asUppercase! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 18:29'! lookUpAttributeBN: aName | upper | upper := aName asUppercase. ^ self inheritedAttributesReverseDetect: [:attr | attr name asUppercase = upper]. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 20:58'! lookUpIdentifierBN: aName ^ self lookUpAttributeBN: aName! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/6/2012 14:39'! lookUpSupertypeBN: aName | key found | key := aName asUppercase. self name asUppercase = key ifTrue: [^ self]. self supertypes do: [:st | (found := st ref lookUpSupertypeBN: key) ifNotNil: [^ found]]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/17/2003 12:06'! moveInto: aContextDefinition aContextDefinition entities add: self. self owner: aContextDefinition. self updateSupertypes.! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/6/2012 14:35'! numberOfAttributesUntilGroup: groupEntityDef | nb | self ~= groupEntityDef ifTrue: [self supertypes do: [:st | nb := st ref numberOfAttributesUntilGroup: groupEntityDef fromSubtype: self. nb > 0 ifTrue: [^ nb]]]. ^ 0! ! !PltEntityDefinition methodsFor: '*xtra-platypus-private-accessing' stamp: 'AlainPlantec 10/7/2010 16:30'! numberOfAttributesUntilGroup: groupEntityDef fromSubtype: subTypeEntityDef | nb | self == groupEntityDef ifTrue: [^ subTypeEntityDef numberOfAttributesBeforeSupertype: groupEntityDef fromSubtype: subTypeEntityDef] ifFalse: [self supertypes do: [:st | nb := st numberOfAttributesUntilGroup: groupEntityDef fromSubtype: self. nb > 0 ifTrue: [^ nb]]]. ^ 0! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/23/2006 14:25'! numberOfExplicitAttributes | count | count := 0. self attributes ifNotNil: [ self explicitAttributesDo: [:attr | count := count + 1]]. ^ count! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/2/2006 16:23'! numberOfInheritedExplicitAttributes | count | count := 0. self inheritedExplicitAttributesDo: [:attr | count := count + 1]. ^ count ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/23/2006 18:33'! positionOfExplicitAttributeNamed: anIdent | key pos foundPos | pos := foundPos := 0. key := anIdent asUppercase. self explicitAttributesDo: [:attrDef | pos := pos + 1. attrDef name asUppercase = key ifTrue: [foundPos := pos]]. ^ foundPos! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/16/2006 08:52'! positionOfInheritedAttributeNamed: anIdent | key pos foundPos | pos := foundPos := 0. key := anIdent asUppercase. self inheritedExplicitAttributesDo: [:attrDef | pos := pos + 1. attrDef name asUppercase = key ifTrue: [foundPos := pos]]. ^ foundPos! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/7/2006 09:23'! referenceClass ^ PltEntityDefinitionReference! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/10/2003 15:35'! removeFrom: acontextDefinition acontextDefinition removeEntityDefinition: self. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 5/26/2004 10:26'! removeSubtype: anEntityDefinition self subtypes removeAllSuchThat: [:st | st referenced == anEntityDefinition] ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:44'! renameWith: aString self owner renameEntityDefinition: self with: aString. ! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 08:34'! selectAttributeIdentifications: aBlock startPosition: start | result pos | result := OrderedCollection new. pos := 0. self attributes do: [:attr | attr isPltExplicitAttribute ifTrue: [pos := pos + 1]. (aBlock value: attr) ifTrue: [result add: (PlatypusAttributeIdentification definition: attr globalPos: (attr isPltExplicitAttribute ifTrue: [pos + start - 1]) localPos: (attr isPltExplicitAttribute ifTrue: [pos]))]]. ^ result! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 22:46'! selectInheritedExplicitAttributeIdentifications: aBlock | attrs globalStart | attrs := OrderedCollection new. globalStart := 1. self inheritedDefinitionsDo: [:aDefinition | attrs addAll: (aDefinition selectAttributeIdentifications: aBlock startPosition: globalStart). globalStart := globalStart + aDefinition numberOfExplicitAttributes]. ^ attrs! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/4/2006 10:30'! selectLocalAttributeIdentifications: aBlock ^ self selectAttributeIdentifications: aBlock startPosition: 1! ! !PltEntityDefinition methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/18/2003 10:27'! staticDomain ^ self! ! !PltEntityDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/7/2006 08:20'! subtypes ^ subtypes ifNil: [subtypes := OrderedCollection new]! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 4/7/2006 08:06'! takeSubtype: anNamedTypeReference | key | key := anNamedTypeReference name asUppercase. self subtypes removeAllSuchThat: [:st | st name asUppercase = key]. self subtypes add: (anNamedTypeReference)! ! !PltEntityDefinition methodsFor: '*xtra-platypus-data-management' stamp: 'apl 4/7/2006 09:26'! updateSupertypes self supertypes do: [:s | s ref ifNotNil: [s ref takeSubtype: self referenceOnSelf]]! ! !UndefinedObject methodsFor: '*xtra-platypus-visiting' stamp: 'apl 3/15/2006 15:49'! acceptTry: aVisitor ! ! !UndefinedObject methodsFor: '*xtra-platypus-visiting' stamp: 'apl 3/17/2006 18:53'! acceptTry: aVisitor separatedBy: aBlock ! ! !UndefinedObject methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'apl 1/31/2006 09:54'! ifMissing: missingBlock ifNotMissing: notMissingBlock ^ missingBlock value! ! !PltEnumerationValue class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 21:01'! domain: aDefinedType element: anElement | e | e := self new. e domain: aDefinedType. e element: anElement. ^ e! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 7/26/2004 20:43'! < other | elements | ^ PltLogicalLiteral val: ((elements := self domain referenced domain elements) indexOf: self element) < (elements indexOf: other element)! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 2/23/2005 22:26'! <= other ^ PltLogicalLiteral val: (self = other or: [(self < other) isPltTrueConstant])! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'AlainPlantec 5/14/2012 14:01'! = other other class = self class ifFalse: [^ false]. "self assert: [self domain name asUppercase = other domain name asUppercase ifTrue: [self domain ref == other domain ref] ifFalse: [true]]." ^ self domain ref = other domain ref and: [self element = other element]! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 7/26/2004 20:44'! > other | elements | ^ PltLogicalLiteral val: ((elements := self domain referenced domain elements) indexOf: self element) > (elements indexOf: other element)! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 2/23/2005 22:26'! >= other ^ PltLogicalLiteral val: (self = other or: [(self > other) isPltTrueConstant])! ! !PltEnumerationValue methodsFor: '*xtra-platypus-copying' stamp: 'apl 1/21/2004 00:06'! deepCopy ^ self copy! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 12/12/2005 12:00'! equal: other ^ PltLogicalLiteral val: self = other! ! !PltEnumerationValue methodsFor: '*xtra-platypus-comparing' stamp: 'apl 1/21/2004 00:11'! hash ^ self domain hash + self element hash! ! !PltEnumerationValue methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/29/2005 21:39'! inferedDomain ^ self domain ifNotNil: [self domain computedDomain ]! ! !PltEnumerationValue methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/26/2004 20:48'! inferedDomainWith: currDomain ^ self inferedDomain! ! !PltEnumerationValue methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:19'! isPltOrderedLiteral ^ true! ! !PltEnumerationValue methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:23'! isPltValue ^ true! ! !PltEnumerationValue methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 14:20'! name ^ self element! ! !PltEnumerationValue methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/9/2004 15:23'! val ^ self element asSymbol! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 15:52'! addRecordsToExternalRepresentation: externalRep self asExternalRepresentation records do: [:rec | rec addRecordsToExternalRepresentation: externalRep]! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 22:36'! asExternalRepresentation | records pos externalRep | records := OrderedCollection new. self definition referenced emptyRecordsInto: records. pos := 1. externalRep := PltExternalRepresentation new records: records. records do: [:rec | rec owner: externalRep. 1 to: rec definition referenced numberOfExplicitAttributes do: [:n | rec at: n put: (parameters at: pos) copy. pos := pos + 1]]. ^ externalRep! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/24/2004 00:22'! at: pos ^ pos <= self parameters size ifTrue: [self parameters at: pos] ifFalse: [self definition referenced fullInheritedComponentList at: pos]! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/2/2004 15:38'! at: position put: aValue self parameters at: position put: aValue! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-copying' stamp: 'apl 3/9/2004 17:59'! deepCopy ^ self copy. ! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 23:44'! definitionInclusiveOwnerPath ^ self definition inclusiveOwnerPath! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/21/2012 12:35'! definitionOk ^ self definition notNil and: [self definition ref notNil and: [self definition ref owner notNil]]! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 22:47'! detectInstanceAttributeIdentification: aBlock (self definition referenced selectInheritedExplicitAttributeIdentifications: aBlock) ifNotEmpty: [:founds | ^ founds last]. ^ nil! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/2/2004 22:54'! equal: other ^ self equalInternal: other! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:47'! groupClass ^ PltInternalGroupRepresentation! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:14'! inferedDomain ^ self definition computedDomain ! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2007 01:52'! inheritedDefinitions ^ definition ref isNil ifTrue: [#()] ifFalse: [definition ref inheritedDefinitions]! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:07'! instEqual: another ^ PltLogicalLiteral val: self = another! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:21'! isInsideGroup: anEntityDef ^ self definition == anEntityDef ! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 21:31'! localDefinitions ^ OrderedCollection with: definition ref! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/2/2004 18:59'! numberOfAttributesUntilGroup: groupEntityDef ^ self definition referenced numberOfAttributesUntilGroup: groupEntityDef! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/8/2004 16:52'! privateExplicitAttributesAndValuesDo: aBlock ^ self privateInternalExplicitAttributesAndValuesDo: aBlock! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 14:37'! records ^ Array with: self! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 23:43'! startAttributePrevPosition ^ 0! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-tamaris' stamp: 'apl 6/24/2004 00:15'! tamarisChildrenIntoOwner: anotherReference | subs pos elements | subs := OrderedCollection new. self definitionOk ifTrue: [ elements := self definition referenced fullInheritedComponentList. pos := 1. elements do: [:el | subs add: (el tamarisStepValueReferenceClass owner: anotherReference position: pos attributeOrRule: el). pos := pos + 1]]. ^ subs! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/15/2012 08:51'! tamarisStepValueReferenceClass ^ PlatypusStepInstanceReference! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/2/2004 23:31'! unwrappedParameters ^ self parameters! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/16/2006 08:54'! valueOfExplicitAttributeNamed: aName | entDef pos | (entDef := self definition ref) ifNotNil: [(pos := entDef positionOfInheritedAttributeNamed: aName) > 0 ifTrue: [^ parameters at: pos]]. ^ nil! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-copying' stamp: 'AlainPlantec 10/7/2010 16:32'! veryDeepCopy | n | n := super veryDeepCopy. n parameters: n parameters veryDeepCopy. ^ n! ! !PltInternalRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/2/2004 23:35'! wrappedParameters ^ self parameters! ! !PltDictionaryInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/20/2004 00:11'! asDomain ^ self new! ! !PltDictionaryInstance class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/1/2005 16:04'! expressTypeName | en | ^ ((en := self platypusMetaData name ) copyFrom: 1 to: en size - 5) asUppercase! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 22:14'! annotation ^ self prettyPrintedExpressCode withoutCr! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-converting' stamp: 'apl 9/8/2003 19:04'! asDomainSet ^ Set with: self! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 17:56'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue assignableValue! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/12/2003 14:00'! canBeAssignedWith: otherType ^ otherType isCompatibleWith: self! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2006 12:00'! canHaveArguments ^ false! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-checking' stamp: 'apl 7/19/2003 03:45'! checksDomainPath: pathStack errorStack: errPathStack ^ true! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 9/25/2006 16:19'! computedDomain ^ self staticDomain! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-copying' stamp: 'apl 2/23/2005 22:24'! deepCopy self isPltValue ifTrue: [^ super deepCopy]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 15:05'! defaultValue ^ PltMissingValue new! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/1/2005 15:54'! errorQualifier ^ self class platypusMetaData name collect: [:c | c == $_ ifTrue: [$ ] ifFalse: [c]]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 1/14/2013 18:05'! expressCode | tokenList | tokenList := PlatypusSchemaInstanceTokenizer singleton tokenize: self. ^ tokenList writeOn: String new writeStream! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 19:06'! expressTypeForTypeOf ^ self class expressTypeForTypeOf! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/5/2004 00:00'! expressTypeName ^ self class expressTypeName! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/25/2004 15:19'! initializeContextInInterpretor: anInterpretor ^ self! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 5/17/2004 10:16'! insertIntoIdentifiersCache: aPrimaryElement named: anIdentifier | key | key := anIdentifier asUppercase. self identifiersCache at: key ifAbsentPut: Set new. (self identifiersCache at: key) add: aPrimaryElement! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 5/17/2004 10:17'! insertIntoNamedTypeCache: aPrimaryElement named: anIdentifier | key | key := anIdentifier asUppercase. self namedTypesCache at: key ifAbsentPut: Set new. (self namedTypesCache at: key) add: aPrimaryElement! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/3/2004 22:57'! interpretorContextClass ^ PlatypusExpressInterpretorContext! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 1/9/2006 14:42'! isAssignableTo: otherType ^ otherType notNil and: [otherType computedDomain canBeAssignedWith: self computedDomain]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:37'! isAssignableToAggregateType: anAggregateType ^ false! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:40'! isAssignableToEntityDefinition: anEntityDefinition ^ false! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/21/2003 15:24'! isCompatibleWith: otherType ^ (self isSpecializationOf: otherType) or: [otherType isSpecializationOf: self]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 7/27/2004 10:06'! isCompatibleWithEntityDefinition: anEntityDefinition ^ false! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:43'! isDebugged ^ true! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 22:59'! isGeneralizationOf: otherType ^ otherType class == self class! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 6/15/2012 12:42'! isPlatypusPrimitive ^ self schemaInstance isPlatypusPrimitive! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/1/2004 22:20'! isSpecializationOf: otherType ^ otherType computedDomain isGeneralizationOf: self computedDomain ! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 21:39'! isSpecializationOfAggregateType: anAggregateType ^ anAggregateType isPltAggregateInitializerDomain! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/18/2003 13:44'! isSpecializationOfEntityDefinition: anEntityDefinition ^ false! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/25/2007 17:49'! key ^ self name asUppercase! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:39'! lookUpIdentifierBN: aName | availables | (self respondsTo: #identifiersCache) ifTrue: [availables := self identifiersCache at: aName asUppercase ifAbsent: []. ^ availables ifNotNil: [availables anyOne]]. ^ nil! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:43'! metaConcept ^ self schemaInstance ifNotNil: [:schi | schi metaConceptOf: self]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:43'! metaConcept: aMetaConcept self schemaInstance metaConcept: aMetaConcept for: self! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 14:33'! metaExpression: metaExpression | metaConcept | metaConcept := PltMetaConceptDefinition new. metaConcept metaExpression: metaExpression. metaConcept definition: self. self metaConcept: metaConcept! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/13/2004 13:42'! position ^ self valueOfGenericProperty: #position ifAbsent: []! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/13/2004 13:40'! position: anInteger self setGenericProperty: #position toValue: anInteger! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 1/14/2013 18:05'! prettyPrintedExpressCode | ppTokenList | ppTokenList := PlatypusStepTokenPrettyPrinter new prettyPrint: (PlatypusSchemaInstanceTokenizer singleton tokenize: self). ^ ppTokenList writeOn: String new writeStream! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/10/2004 10:11'! printableCode ^ self expressCode ! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/25/2007 10:49'! relatedRemarks ^ (self relatedRemarksReferences) collect: [:rr | rr remark]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 13:02'! relatedRemarksReferences ^ (self schemaDefinition remarkReferences select: [:rr | rr referenced notNil and: [rr referenced ref = self]]) ! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:43'! removeMetaConcept self schemaInstance ifNotNil: [:schi | schi removeMetaConceptOf: self]! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/21/2003 16:28'! staticDomain ^ self ! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/28/2006 16:03'! translatedSchemaCode ^ self prettyPrintedExpressCode ! ! !PltDictionaryInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/20/2003 14:43'! unwrappedItem ^ self! ! !PltSubEntityRefExpression methodsFor: '*xtra-platypus-checking' stamp: 'apl 7/5/2004 13:58'! checksSubtypesInheritance: mySuper | err | self entityRef referenced ifNotNil: [(self entityRef referenced isDirectSubtypeOf: mySuper) ifFalse: [err := self entityRef referenced -> ('must be a subtype of entity ''' , mySuper name , ''''). ^ OrderedCollection with: err]]. ^ OrderedCollection new! ! !PltAndorSupertype methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2003 17:47'! operatorSymbol ^ #andor! ! !PltApplicationInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/6/2006 17:19'! computedDomain ^ self inferedDomain! ! !PltApplicationInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:04'! instEqual: another ^ PltLogicalLiteral val: self == another! ! !PltApplicationInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:22'! isPltValue ^ true! ! !PltApplicationInstance methodsFor: '*xtra-platypus-printing' stamp: 'AlainPlantec 5/16/2012 11:18'! printOn: aStream super printOn: aStream. aStream nextPut: $[. self persistentLabel printOn: aStream. aStream nextPut: $]. ! ! !PltApplicationInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/12/2012 13:38'! printableCode | writer | writer := PlatypusModelContentsStepWriter new. writer outStream: (WriteStream on: String new). writer acceptTry: self. ^ writer outStream contents! ! !PltApplicationInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 11/10/2003 18:00'! updatePersistentLabelIndex: index index at: self persistentLabel put: self! ! !PltApplicationInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/16/2006 08:47'! valueOfExplicitAttributeNamed: aName ^ self subclassResponsibility! ! !PltAggregateType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/23/2004 12:48'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue ! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 12:15'! canAddElementOfType: elementDomain ^ elementDomain isAssignableTo: self elementType ! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:36'! canBeAssignedWith: otherType ^ otherType isAssignableToAggregateType: self! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/25/2005 22:01'! elementsAreOptional ^ false! ! !PltAggregateType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 12/5/2013 09:43'! errorQualifier ^ super errorQualifier , ' of ', (self elementType ifNil: ['?'] ifNotNil: [:e | e errorQualifier])! ! !PltAggregateType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:49'! initializedValue ^ PltListInstance new! ! !PltAggregateType methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/4/2004 11:25'! isAggregateCompatibleType ^ true! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 22:01'! isAssignableToAggregateType: anAggregateType ^ ((self isKindOf: anAggregateType class) or: [self isPltGeneralAggregateType]) and: [self elementType isAssignableTo: anAggregateType elementType]! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/20/2003 11:49'! isGeneralizationOf: otherType ^ otherType isSpecializationOfAggregateType: self! ! !PltAggregateType methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 21:35'! isPltAggregateCompatibleType ^ true! ! !PltAggregateType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 21:39'! isSpecializationOfAggregateType: anAggregateType ^ anAggregateType isPltAggregateInitializerDomain or: [((self isKindOf: anAggregateType class) or: [anAggregateType isGeneralType]) and: [self elementType isSpecializationOf: anAggregateType elementType]]! ! !PltAggregateType methodsFor: '*xtra-platypus-type-infering' stamp: 'AlainPlantec 5/14/2012 23:17'! staticDomain | d | d := self class new. d isGeneralType: self isGeneralType. d elementType: (self elementType ifNotNil: [:et | et computedDomain]). d lowerBound: self lowerBound. d upperBound: self upperBound. ^ d! ! !PltPlusExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:10'! inferedDomain ^ self arithmeticOperatorInferedDomain ! ! !PltPlusExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:58'! operatorSymbol ^ #+! ! !PltPlusExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:53'! pltOperator ^ 'pltPlus:'! ! !PltGreaterThanExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:00'! operatorSymbol ^ #>! ! !PltGreaterThanExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:18'! pltOperator ^ '>'! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/15/2003 16:49'! allImportedItems ^ self explicitlyImportedItems, self implicitlyImportedItems ! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/7/2006 11:08'! errorQualifier ^ super errorQualifier, ' "', self name , '"'.! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 11:14'! explicitlyImportedItems ^ #()! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:31'! getEquivalentItemFor: item | itemName | itemName := item name asUppercase. ^ self explicitlyImportedItems detect: [:i | itemName = i name asUppercase] ifNone: [self implicitlyImportedItems detect: [:i | itemName = i name asUppercase] ifNone: []]! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 11:16'! implicitlyImportedItems ^ #()! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:44'! lookUpIdentifierBN: aName ^ self nativeSchema ifNotNil: [self nativeSchema localLookUpIdentifierBN: aName]! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:44'! lookUpNamedTypeBN: aName ^ self nativeSchema ifNotNil: [self nativeSchema localLookUpNamedTypeBN: aName]! ! !PltExternalSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:37'! selectionString ^ 'FROM ', self name! ! !PltExternalSchema methodsFor: '*xtra-platypus-data-management' stamp: 'apl 2/23/2005 22:14'! updateExternalIdentifiersIndex: aDictionary self allImportedItems do: [:item | (item nativeItem notNil and: [item nativeItem isPltNamedType not]) ifTrue: [aDictionary at: item name asUppercase put: item]]! ! !PltExternalSchema methodsFor: '*xtra-platypus-data-management' stamp: 'apl 2/23/2005 22:14'! updateExternalNamedTypesIndex: aDictionary self allImportedItems do: [:item | (item nativeItem notNil and: [item nativeItem isPltNamedType]) ifTrue: [aDictionary at: item name asUppercase put: item]]! ! !PltArrayType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:07'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asArrayInstanceCompatibleTo: self interpretor: anInterpretor ! ! !PltArrayType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/25/2005 22:01'! elementsAreOptional ^ self optionalFlag! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 15:15'! asExternalRepresentation ^ self subclassResponsibility ! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:58'! assignableValue ^ self! ! !PltGenericInstance methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/4/2012 23:44'! becomeInstance: other self owningModel replace: self with: other ! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/4/2012 19:00'! buildGroup: anEntityDef | grp | grp := self groupClass new. grp definition: anEntityDef. grp instRef: self. ^ grp! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 17:42'! computed ^ computed ifNil: [ computed := false ]! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 18:04'! computed: aBoolean computed := aBoolean! ! !PltGenericInstance methodsFor: '*xtra-platypus-copying' stamp: 'AlainPlantec 5/13/2012 01:58'! deepCopy | n | n := self copy. n instanceScope: self instanceScope deepCopy. ^ n ! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/20/2007 12:19'! definitionInclusiveOwnerPath ^ self subclassResponsibility ! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/2/2004 18:59'! entityDefinitionOfGroupNamed: anIdent | found | self records do: [:rec | (found := rec definition referenced entityDefinitionOfGroupNamed: anIdent) ifNotNil: [^ found]]. ^ nil! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/10/2005 08:20'! equalExternal: other | otherRecs myRecords otherRecords foundEqual | self groupClass == other groupClass ifFalse: [^ PltFalseConstant new]. self == other ifTrue: [^ PltTrueConstant new]. self records size ~= other records size ifTrue: [^ PltFalseConstant new]. myRecords := (self records copy asArray sort: [:a :b | a definition name < b definition name]) asOrderedCollection. otherRecords := (other records copy asArray sort: [:a :b | a definition name < b definition name]) asOrderedCollection. self records do: [:myRec | otherRecs := otherRecords select: [:or | or definition referenced == myRec definition referenced]. otherRecs isEmpty ifTrue: [^ PltFalseConstant new]. foundEqual := otherRecs detect: [:or | (or equal: myRec) isPltTrueConstant] ifNone: []. foundEqual ifNil: [^ PltFalseConstant new]. otherRecords remove: foundEqual. myRecords remove: myRec]. ^ PltLogicalLiteral val: (myRecords isEmpty and: [otherRecords isEmpty])! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:31'! equalInternal: other | myParam otherParam res | self groupClass == other groupClass ifFalse: [^ PltFalseConstant new]. self == other ifTrue: [^ PltTrueConstant new]. self definition == other definition ifFalse: [^ PltFalseConstant new]. self wrappedParameters size == other wrappedParameters size ifFalse: [^ PltFalseConstant new]. 1 to: self wrappedParameters size do: [:pos | myParam := self wrappedParameters at: pos. otherParam := other wrappedParameters at: pos. res := myParam equal: otherParam. res ifFalseOrUnknownConstant: [^ res]]. ^ PltTrueConstant new ! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/22/2004 13:47'! errorQualifier ^ '#' , self persistentLabel ! ! !PltGenericInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/8/2004 17:18'! explicitAttributesAndValuesDo: aBlock self records do: [ :rec | rec privateExplicitAttributesAndValuesDo: aBlock]! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/5/2006 10:22'! getInstanceAttributeIdentification: aBlock | sorted found | sorted := self records asArray sort: [:a :b | a definition referenced isGeneralizationOf: b definition referenced]. sorted reverseDo: [:rec | (found := rec detectInstanceAttributeIdentification: aBlock) ifNotNil: [^ found]]. ^ nil! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 12:08'! interpretingContext ^ self! ! !PltGenericInstance methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/8/2012 17:43'! isComputed ^ self computed ! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 17:42'! markAsComputed computed := true! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/8/2012 18:01'! markAsPersistent computed := false! ! !PltGenericInstance methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 6/2/2004 19:00'! privateInternalExplicitAttributesAndValuesDo: aBlock ^ self definition referenced explicitAttributesAndValuesDo: aBlock values: self parameters startingAt: self startAttributePrevPosition + 1! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 14:36'! records ^ self subclassResponsibility ! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:07'! rolesOf: anInstanceReference in: aSetOfString self explicitAttributesAndValuesDo: [:attrDef :val | val isPltGenericInstance ifTrue: [(val instEqual: anInstanceReference) ifTrueConstant: [aSetOfString add: (PltStringLiteral val: attrDef fullyQualifiedName)]]]! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/1/2012 22:30'! rolesValue: aGenericInstance roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet | currDef | self records do: [:rec | currDef := rec definition referenced. ((entityKey isEmpty and: [schemaKey isEmpty]) or: [currDef name asUppercase = entityKey and: [currDef owner name asUppercase = schemaKey]]) ifTrue: [currDef explicitAttributesAndValuesDo: [:attrDef :val | (attributeKey isEmpty or: [attrDef name asUppercase = attributeKey and: [(val includesVal: aGenericInstance) isPltTrueConstant]]) ifTrue: [resultSet add: self. ^ self]] values: rec parameters startingAt: 1]]! ! !PltGenericInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/22/2004 13:55'! selectionString ^ self printableCode! ! !PltGenericInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/27/2006 15:46'! stackElementOfExplicitAttribute: attr interpretor: anInterpretor | anonymousVar allAttrIdentif identif def | allAttrIdentif := self definition referenced selectInheritedExplicitAttributeIdentifications: [:a | a = attr]. identif := allAttrIdentif last. def := identif definition. anonymousVar := PltAnonymousVariable domain: def domain. ^ PlatypusExpressInterpretorStackAttribute var: anonymousVar record: self pos: identif globalPos interpretor: anInterpretor! ! !PltGenericInstance methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 5/13/2012 01:59'! updatePersistentLabelIndex: index super updatePersistentLabelIndex: index. self instanceScope ifNotNil: [self instanceScope updatePersistentLabelIndex: index]! ! !PltGenericInstance methodsFor: '*xtra-platypus-copying' stamp: 'AlainPlantec 5/13/2012 01:59'! veryDeepCopy | n | n := self copy. n instanceScope: self instanceScope veryDeepCopy. ^ n! ! !PltRealLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 08:51'! asIntegerLiteralCompatibleTo: anIntegerType interpretor: anInterpretor ^ PltIntegerLiteral val: (self val asInteger)! ! !PltRealLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 21:31'! asRealLiteral ^ self! ! !PltRealLiteral methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:40'! inferedDomain ^ PltRealType asDomain! ! !PltRealLiteral methodsFor: '*xtra-platypus-classification' stamp: 'apl 12/15/2003 19:52'! isRealLiteral ^ true! ! !PltRealDivExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:40'! inferedDomain ^ PltRealType asDomain! ! !PltRealDivExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:58'! operatorSymbol ^ #div! ! !PltRealDivExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/4/2005 12:37'! pltOperator ^ '/'! ! !PltLogicalType methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:54'! initializedValue ^ PltTrueConstant new! ! !PltLogicalType methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/12/2003 14:33'! isGeneralizationOf: otherType ^ otherType isKindOf: self class! ! !PltParameterDefinition methodsFor: '*xtra-platypus-accessing' stamp: 'apl 11/25/2003 16:26'! errorQualifier ^ super errorQualifier , ' ''' , self name, ''''! ! !PltParameterDefinition methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:21'! staticDomain ^ self domain computedDomain ! ! !PltCompoundStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 19:03'! alwaysReturn ^ self statements anySatisfy: [:stmt | stmt alwaysReturn]! ! !PltArrayInstance methodsFor: '*xtra-platypus-updating' stamp: 'apl 1/31/2006 10:59'! adjustLowerAndUpperBounds self lowerBound ifNil: [ self lowerBound: (PltIntegerLiteral val: 1)]. self upperBound ifNil: [self upperBound: (PltIntegerLiteral val: self size)]! ! !PltArrayInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 21:40'! asArrayInstance ^ self! ! !PltArrayInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 17:03'! asArrayInstanceCompatibleTo: aType interpretor: anInterpretor (self isCompatibleWith: aType) ifTrue: [^ self]. ^ super asArrayInstanceCompatibleTo: aType interpretor: anInterpretor! ! !PltArrayInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/4/2005 13:57'! equal: other | res | (res := super equal: other) ifFalseOrUnknownConstant: [^ res]. 1 to: self contents size do: [:pos | res := (contents at: pos) equal: (other contents at: pos). res ifFalseOrUnknownConstant: [^ res]]. ^ PltTrueConstant new! ! !PltArrayInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/26/2004 02:59'! inferedDomain | aggr | aggr := PltArrayType new. aggr isGeneralType: self general. aggr lowerBound: self lowerBound. aggr upperBound: self upperBound. aggr elementType: self inferedElementType. ^ aggr! ! !PltArrayInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 1/31/2006 11:37'! isPltArray ^ true! ! !PltArrayInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/3/2004 18:36'! setQueryBoundsFromSource: anotherAggregate self lowerBound: anotherAggregate lowerBound copy. self upperBound: anotherAggregate upperBound copy! ! !PltAndSupertype methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2003 17:47'! operatorSymbol ^ #and! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 19:45'! bindings ^ super bindings , self locals , self formalParameters ! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2006 12:00'! canHaveArguments ^ true! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/31/2006 09:37'! initializeContextInInterpretor: anInterpretor | args stackVal | anInterpretor argsStackSize > 0 ifTrue: [stackVal := anInterpretor argsStackTop. stackVal arguments size ~= self formalParameters size ifTrue: [PlatypusExpressArgumentNumberException signal: 'invalid number of argument']. args := stackVal arguments. self formalParameters do: [:fp | anInterpretor localData: fp value: args removeFirst deepCopy]]. super initializeContextInInterpretor: anInterpretor! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-data-management' stamp: 'apl 12/17/2003 00:38'! moveInto: aContextDefinition aContextDefinition algorithmes add: self. self owner: aContextDefinition! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-data-management' stamp: 'apl 6/9/2004 07:25'! rebuildLocalCaches super rebuildLocalCaches. self formalParameters do: [:par | self insertIntoCache: par]! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-data-management' stamp: 'apl 12/17/2003 00:38'! removeFrom: aContextDefinition aContextDefinition removeAlgorithmDeclaration: self. ! ! !PltAlgorithmDeclaration methodsFor: '*xtra-platypus-data-management' stamp: 'apl 12/17/2003 00:38'! renameWith: aString self owner renameAlgorithmDeclaration: self with: aString! ! !PltIntegerBound methodsFor: '*xtra-platypus-converting' stamp: 'apl 12/12/2003 16:21'! asInteger ^ self boundValue! ! !PltIntegerBound methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 6/22/2004 16:06'! inferedDomain ^ PltIntegerType asDomain! ! !PltMinusExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/4/2004 12:34'! inferedDomain ^ self arithmeticOperatorInferedDomain! ! !PltMinusExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:57'! operatorSymbol ^ #-! ! !PltMinusExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:57'! pltOperator ^ 'pltMinus:'! ! !PltStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 19:09'! alwaysReturn ^ false! ! !PltStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/23/2004 10:43'! errorQualifier ^ super errorQualifier , ' ''' , self prettyPrintedExpressCode, ''''! ! !PltStatement methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/9/2004 17:28'! isStatement ^ true ! ! !PltBagType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/26/2004 18:07'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asBagInstanceCompatibleTo: self interpretor: anInterpretor! ! !PltElementQualifier methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/23/2005 22:28'! inferedDomainWith: currDomain currDomain isPltAggregateOrStringType ifFalse: [^ PltGenericType asDomain]. currDomain isPltStringType ifTrue: [^ PltStringType asDomain]. ^ currDomain elementType computedDomain! ! !PltLessEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:00'! operatorSymbol ^ #'<='! ! !PltLessEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:19'! pltOperator ^ '<='! ! !PltLiteral class methodsFor: '*xtra-platypus-instance creation' stamp: 'apl 1/20/2004 19:21'! val: aValue ^ self new val: aValue! ! !PltLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/16/2004 16:21'! = other (other class = self class) ifFalse: [^false]. ^ self val = other val! ! !PltLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 12/5/2013 16:05'! equal: op ^ PltLogicalLiteral val: self val = op val! ! !PltLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/16/2004 16:26'! hash ^ self val hash! ! !PltLiteral methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:19'! isPltOrderedLiteral ^ true! ! !PltLiteral methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:23'! isPltValue ^ true! ! !PltLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/30/2006 12:14'! pltNativeValue ^ self val! ! !PltLiteral methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 20:48'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !Object methodsFor: '*xtra-platypus-visiting' stamp: 'apl 7/19/2004 15:02'! acceptTry: aVisitor ^ aVisitor acceptTry: self! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 23:04'! asPlatypusComplexInstance | cplxInst | cplxInst := PlatypusComplexInstance new. cplxInst add: self. ^ cplxInst! ! !Object methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'apl 1/31/2006 09:53'! ifMissing: missingBlock ifNotMissing: notMissingBlock ^ notMissingBlock value! ! !Object methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'apl 1/31/2006 11:36'! isPltArray ^ false! ! !Object methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'AlainPlantec 5/4/2012 19:22'! isPltGenericInstance ^false! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/11/2005 21:59'! pltAddIntoComplexeInstance: aComplexInstance aComplexInstance privateAddRecord: self. ! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/11/2005 22:03'! pltAsObject ! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/12/2005 10:22'! pltCopyFrom: start to: stop ^ self copyFrom: start to: stop! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/8/2005 16:25'! pltCopyGroup: aClass to: anObject ! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/8/2005 16:17'! pltCopyTo: another ^ self! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/8/2005 16:19'! pltLocalCopyTo: another ^ self! ! !Object methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'apl 1/30/2006 12:13'! pltNativeValue ^ self! ! !Object methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/2/2005 22:38'! pltPlus: aCollectionOrNumber | result | aCollectionOrNumber isNumber ifTrue: [^ self + aCollectionOrNumber ] ifFalse: [result := aCollectionOrNumber copyEmpty. result add: self. ^ result]. ! ! !Object methodsFor: '*xtra-platypus-interpreter-compat' stamp: 'apl 1/31/2006 16:11'! printableCode ^ self printString! ! !Object methodsFor: '*xtra-platypus-initializing' stamp: 'apl 7/19/2004 15:01'! stepInitialize ^ self! ! !PltPopulationDependentBound methodsFor: '*xtra-platypus-converting' stamp: 'apl 12/12/2003 16:21'! asInteger ^ nil! ! !PltPopulationDependentBound methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:14'! inferedDomain ^ self boundValue computedDomain ! ! !PltDictionaryInstanceReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/20/2004 10:18'! name: anIdent ^ self new name: anIdent. ! ! !PltDictionaryInstanceReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 2/25/2005 15:18'! name: anIdent ref: aReferenced ^ self new name: anIdent ref: aReferenced ! ! !PltDictionaryInstanceReference class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/7/2004 14:03'! ref: aReferenced | ref | ref := self new ref: aReferenced. ref name: aReferenced name. ^ ref ! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/14/2012 23:15'! annotation ^ self ref ifNil: ['Unresolved domain'] ifNotNil: [:r | r annotation]! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/15/2004 11:27'! computedDomain ^ self ref ifNotNil: [self ref computedDomain]! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/7/2006 11:10'! errorQualifier ^ super errorQualifier, ' "', self name, '"' ! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 5/25/2004 09:50'! inferedDomain ^ self ref inferedDomain! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 21:29'! initializedValue ^ self ref initializedValue ! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/25/2005 15:19'! name: anIdent ref: aReferenced self name: anIdent. self ref: aReferenced! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2007 10:27'! owner ^ owner! ! !PltDictionaryInstanceReference methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 17:20'! referenced ^ self ref! ! !PltIncrementControl methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:35'! identifiersCache ^ identifiersCache ifNil: [identifiersCache := Dictionary new]! ! !PltIncrementControl methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:35'! variableHolders ^ OrderedCollection with: self variable! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 12:15'! canAddElementOfType: elementDomain ^ true! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:27'! elementType | t domains | domains := self types asSet. domains add: PltGenericType asDomain. t := PltSelectType new. t selections addAll: domains. ^ t! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/22/2004 14:49'! errorQualifier ^ super errorQualifier , ' ''' , self prettyPrintedExpressCode , ''''! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/4/2004 11:24'! isAggregateCompatibleType ^ true! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/12/2003 13:40'! isAssignableToAggregateType: otherType ^ self types allSatisfy: [:sl | sl isAssignableTo: otherType elementType]! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/4/2004 23:10'! isGeneralizationOf: otherType ^ otherType isSpecializationOfAggregateType: self! ! !PltAggregateInitializerDomain methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 21:34'! isPltAggregateCompatibleType ^ true! ! !PltInstEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 23:45'! operatorSymbol ^ #':=:'! ! !PltInstEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:24'! pltOperator ^ '=='! ! !PltMissingValue methodsFor: '*xtra-platypus-parsing' stamp: 'apl 11/21/2003 15:40'! asBound ^ nil! ! !PltMissingValue methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 11:27'! equal: op ^ PltUnknownConstant new! ! !PltMissingValue methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:55'! ifMissing: missingBlock ^ missingBlock value! ! !PltMissingValue methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:55'! ifMissing: missingBlock ifNotMissing: notMissingBlock ^ missingBlock value! ! !PltMissingValue methodsFor: '*xtra-platypus-controlling' stamp: 'apl 5/25/2004 20:19'! ifNotMissing: notMissingBlock ^ nil! ! !PltMissingValue methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:55'! ifNotMissing: notMissingBlock ifMissing: missingBlock ^ missingBlock value! ! !PltMissingValue methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:39'! inferedDomain ^ PltGenericType asDomain! ! !PltMissingValue methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 20:56'! instNotEqual: other ^ PltUnknownConstant new! ! !PltMissingValue methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/20/2005 15:01'! interpretingContext ^ self! ! !PltMissingValue methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:23'! isPltValue ^ true! ! !PltMissingValue methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 11:27'! notEqual: op ^ PltUnknownConstant new! ! !PltMissingValue methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/3/2006 09:29'! pltNativeValue ^ nil! ! !PltMissingValue methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/16/2012 20:48'! tamarisStepValueReferenceClass ^ PlatypusStepReference! ! !PltSchemaInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 4/22/2006 08:24'! new ^ super new setDefaultName! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 3/22/2006 17:50'! addElement: aSchemaDefinition self schemata add: aSchemaDefinition. aSchemaDefinition owner: self! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/4/2012 18:32'! addError: anError for: anEntityInstance self errorsIndex at: anEntityInstance ifAbsentPut: [OrderedCollection new]. (self errorsIndex at: anEntityInstance) add: anError! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 11/7/2003 13:13'! addModelContents: aModelContents self associatedModels add: aModelContents ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/20/2007 13:09'! allSchemata ^ self schemataLinkedMetaData ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 19:41'! bindings ^ self allSchemata inject: Set new into: [:c :e | c addAll: e primaryElements; yourself]. ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 4/7/2006 19:00'! checksMetaData ^ self metaDataFolder checksInstances! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 1/21/2011 13:07'! dataSchemaInstances ^ (self dataSchemata collect: [:sch | sch owner]) asSet ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 09:12'! dataSchemata ^ (self schemataLinkedMetaData copyWithoutAll: self metaSchemata)" copyWithoutAll: self mappingSchemata "! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/23/2004 10:43'! errorQualifier ^ 'schema instance ''' , self name, ''''! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/4/2012 18:33'! errorsFor: anEntityInstance ^ self errorsIndex at: anEntityInstance ifAbsent: [#()] ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/4/2012 18:30'! errorsIndex ^ errorsIndex ifNil: [errorsIndex := IdentityDictionary new]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:45'! externalSchemaInstances ^ (self externalSchemata collect: [:s | s schemaInstance]) asSet! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:10'! externalSchemaLinks ^ self schemata ifNil: [#()] ifNotNil: [self schemata select: [:s | s isLink]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/22/2006 14:25'! externalSchemaLinks: aCollectionOfLinks ^ self schemata addAll: aCollectionOfLinks! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/13/2006 09:38'! externalSchemata ^ (self externalSchemaLinks collect: [:l | l linkedMetaData]) select: [:l | l notNil]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 22:32'! externalSchemataNames ^ self externalSchemata collect: [:ext | ext name asUppercase]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-release' stamp: 'apl 3/23/2006 14:06'! finalize associatedModels := nil. schemata := nil. tamarisItemReferencesIndex := nil. super finalize! ! !PltSchemaInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/4/2012 18:38'! forgetAllErrors errorsIndex := nil ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/12/2012 10:37'! forgetAllErrorsOf: anEntityInstance self errorsIndex removeKey: anEntityInstance ifAbsent: [#()] ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 10:30'! generatedClassNameSuffix ^ 'SchemaInstance'! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 10:05'! generatedSystemCategorySuffix ^ 'SchemaInstance'! ! !PltSchemaInstance methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/20/2012 10:31'! haveMetaSchemata self schemata ifNil: [^ false ]. self schemata do: [:sch | sch linkedMetaData ifNotNil: [ sch linkedMetaData haveMetaSchemata ifTrue: [^ true]]]. ^ false! ! !PltSchemaInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/27/2006 13:30'! initializeContextInInterpretor: anInterpretor self dataSchemata do: [:sch | sch pushContextInInterpretor: anInterpretor]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 3/22/2006 17:50'! insertElement: aSchemaDefinition | toBeRemove key | key := aSchemaDefinition linkedMetaData name asUppercase. toBeRemove := self schemata detect: [:sch | sch linkedMetaData name asUppercase = key] ifNone: []. toBeRemove ifNil: [self addElement: aSchemaDefinition. ] ifNotNil: [toBeRemove isLink ifFalse: [self schemata at: (self schemata indexOf: toBeRemove) put: aSchemaDefinition. aSchemaDefinition owner: self]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:45'! internalSchemaInstances ^ (self internalSchemata collect: [:s | s schemaInstance]) asSet! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/19/2012 19:50'! internalSchemata ^ self schemata ifNil: [ #() ] ifNotNil: [:schta | schta select: [:s | s isLink not and: [s isPltExternalMetaSchema not]]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/24/2006 22:32'! internalSchemataNames ^ self internalSchemata collect: [:int | int name asUppercase]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/27/2006 07:29'! interpretorContextClass ^ PlatypusExpressInterpretorContext! ! !PltSchemaInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/26/2006 19:04'! isPlatypusPrimitive | iref | ^ (iref := self tamarisItemRef) notNil and: [iref isMetaSchemaInstanceReference]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/28/2006 20:42'! lookUpEntityDefinitionBN: aString | found | self schemata do: [:sch | (found := sch linkedMetaData lookUpEntityDefinitionBN: aString) ifNotNil: [^ found]]. ^ nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/28/2006 20:53'! lookUpEnumerationTypeFromElement: aString | found | self schemataLinkedMetaData do: [:sch | (found := sch lookUpEnumerationTypeFromElement: aString) ifNotNil: [^ found]]. ^ nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2006 08:37'! lookUpIdentifierBN: aName | found | self schemata do: [:sch | (found := sch linkedMetaData lookUpIdentifierBN: aName) ifNotNil: [^ found]]. ^ nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/3/2006 17:23'! lookUpNamedTypeBN: aName | found | self schemata do: [:sch | (found := sch linkedMetaData ifNotNil: [sch linkedMetaData lookUpNamedTypeBN: aName]) ifNotNil: [^ found]]. ^ nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/28/2006 20:50'! lookUpSchemaDefinitionBN: anIdentifier | key | key := anIdentifier asUppercase. ^ self schemataLinkedMetaData detect: [:s | s name asUppercase = key] ifNone: []. ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/5/2012 09:05'! mappingSchemata ^ (self schemata select: [ :sch | sch notNil and: [sch linkedMetaData notNil and: [sch linkedMetaData isMappingSchema]]]) collect: [:sch | sch linkedMetaData] ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 4/12/2011 12:29'! masterModel ^ self associatedModels ifEmpty: [] ifNotEmpty: [:ms | ms first] ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 4/12/2011 12:58'! masterModelAsStepStream ^ self masterModel ifNotNil: [:mm | mm asStepStream]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 13:34'! metaConcept: aPltMetaConcept for: aPltDictionaryInstance self metaConceptsIndex at: aPltDictionaryInstance put: aPltMetaConcept! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 13:35'! metaConceptOf: aPltDictionaryInstance ^ self metaConceptsIndex at: aPltDictionaryInstance ifAbsent: []! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/19/2006 11:26'! metaConceptsIndex ^ metaConceptsIndex ifNil: [metaConceptsIndex := PlatypusWeakIdentityKeyDictionary new]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/19/2006 12:37'! metaDataFolder | folder | folder := self metaDataSchemaInstance buildRepository. PlatypusMetaRepositoryBuilder build: folder with: self. ^ folder! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/11/2005 14:05'! metaDataSchemaInstance ^ self class schemaDefinition schemaInstance! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'MrCleaner 1/17/2011 22:27'! metaDataStream | strm | strm := ReadWriteStream on: (String new). self metaDataToStream: strm. ^ strm contents readStream! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 4/11/2006 17:44'! metaDataToStepFile: aFilename | stream | (stream := (Filename named: aFilename) writeStream) ifNotNil: [[self metaDataToStream: stream] ensure: [stream close]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 1/21/2011 18:12'! metaDataToStream: aStream | repo writer oldSchemata | oldSchemata := self schemata copy. self schemata: self dataSchemata. [repo := self metaDataFolder. writer := PlatypusCoreRepositoryStepFileWriter folder: repo. writer stream: aStream. writer doFolder] ensure: [self schemata: oldSchemata]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 4/7/2011 09:59'! metaSchemata | metaSchemata | metaSchemata := Set new. (self schemata select: [ :sch | sch notNil]) do: [:sch | sch linkedMetaData ifNotNil: [metaSchemata addAll: sch linkedMetaData metaSchemata]]. ^ metaSchemata! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 14:34'! metaSchemataNames ^ self metaSchemata collect: [:ext | ext name asUppercase] ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'AlainPlantec 1/21/2011 18:00'! moveInto: aSchemaInstance self internalSchemata do: [:sch | aSchemaInstance addElement: sch]. self metaConceptsIndex keysAndValuesDo: [:k :v | aSchemaInstance metaConcept: v for: k]. aSchemaInstance changeDate: self changeDate. aSchemaInstance validationDate: self validationDate. aSchemaInstance validationResult: self validationResult. self removeMetaConceptsIndex. self schemata: self schemata class new! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'alain.palntec 1/15/2009 17:01'! namesBuilder ^ self isPlatypusPrimitive ifTrue: [PlatypusNamesBuilder meta] ifFalse: [namesBuilder ifNil: [namesBuilder := PlatypusNamesBuilder default]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 17:24'! namesBuilder: x namesBuilder:= x ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 2/14/2007 16:30'! namesBuilderPrefixedBy: aPrefix self namesBuilder: (PlatypusNamesBuilder prefixedBy: aPrefix)! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/17/2003 22:33'! owner ^ nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/17/2006 19:29'! prettyPrintedExpressCode | code | code := WriteStream on: ''. self schemata do: [:sch | code nextPutAll: sch linkedMetaData prettyPrintedExpressCode. code nextPut: Character cr]. ^ code contents ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/16/2003 16:01'! removeElement: aSchemaDefinition self schemata remove: aSchemaDefinition ifAbsent: []! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 13:48'! removeMetaConceptOf: aPltDictionaryInstance ^ self metaConceptsIndex removeKey: aPltDictionaryInstance ifAbsent: []! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/29/2006 14:28'! removeMetaConceptsIndex metaConceptsIndex := nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 11/7/2003 10:57'! removeModelContents: aModelContents self associatedModels remove: aModelContents ifAbsent: []! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/7/2006 22:04'! removeTamarisItemRefFor: aPltEntityInstance self tamarisItemReferencesIndex removeKey: aPltEntityInstance ifAbsent: []! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/22/2006 12:34'! removeTamarisItemReferencesIndex tamarisItemReferencesIndex := nil! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 7/9/2003 23:56'! renameContextDefinition: aContextDefinition with: newName aContextDefinition name: newName! ! !PltSchemaInstance methodsFor: '*xtra-platypus-data-management' stamp: 'apl 3/13/2003 09:55'! renameWith: newName self name: newName! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 16:58'! repositoryClassNameFromNamesBuilder: aNamesBuilder ^aNamesBuilder normalizedClassNameFrom: self name suffix: self repositoryClassNameSuffix! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 16:58'! repositoryClassNameSuffix ^ 'Repository'! ! !PltSchemaInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/14/2012 15:29'! resolvesSilently | checker result | PlatypusStepOwnerSetter new acceptTry: self. checker := PlatypusExpressResolver checks: self. PlatypusStepOwnerSetter new acceptTry: self. self validationResult: checker haveError not. ^ checker haveError not. ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 4/7/2011 09:57'! schemataLinkedMetaData ^ self schemata ifNil: [#()] ifNotNil: [self schemata collect: [:l | l ifNotNil: [l linkedMetaData]]]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/13/2006 09:40'! selectionString | code | code := WriteStream on: ''. self schemata do: [:sch | code nextPutAll: sch selectionString. code nextPut: Character cr]. ^ code contents! ! !PltSchemaInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 5/23/2012 21:25'! semanticChecksSilently | checker | checker := PlatypusExpressNamesChecker checks: self. checker haveError ifTrue: [^ false]. checker := PlatypusExpressSemanticChecker checks: self . ^ checker haveError not! ! !PltSchemaInstance methodsFor: '*xtra-platypus-initializing' stamp: 'AlainPlantec 12/9/2013 21:40'! setDefaultName self name: 'schi' , self basicIdentityHash printString! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 10:05'! systemCategoryFromNamesBuilder: aNameBuilder ^ aNameBuilder systemCategoryPrefix , '-' , ((aNameBuilder normalizedNameFrom: self name first: true) asIdentifier: true) , self generatedSystemCategorySuffix! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/7/2006 22:16'! tamarisItemRef: aTamarisItemReference for: aPltEntityInstance self tamarisItemReferencesIndex at: aPltEntityInstance put: aTamarisItemReference! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 18:17'! tamarisItemRefOf: aPltEntityInstance ^ self tamarisItemReferencesIndex at: aPltEntityInstance ifAbsent: [nil]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/19/2006 11:26'! tamarisItemReferencesIndex ^ tamarisItemReferencesIndex ifNil: [tamarisItemReferencesIndex := PlatypusWeakIdentityKeyDictionary new]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/22/2006 08:28'! translatedSchemaCode | code | code := WriteStream on: ''. self internalSchemata do: [:sch |code nextPutAll: sch prettyPrintedExpressCode. code nextPut: Character cr]. ^ code contents! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:43'! translaterClassPrefix ^ self namesBuilder classPrefix! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:43'! translaterClassPrefix: aString self namesBuilder classPrefix: aString! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:44'! translaterRootClassName ^ self namesBuilder rootClassName! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:44'! translaterRootClassName: aString self namesBuilder rootClassName: aString! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:44'! translaterRootClassSystemCategory ^ self namesBuilder rootClassSystemCategory! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:44'! translaterRootClassSystemCategory: aString self namesBuilder rootClassSystemCategory: aString! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:44'! translaterSystemCategoryPrefix ^ self namesBuilder systemCategoryPrefix! ! !PltSchemaInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/17/2007 16:45'! translaterSystemCategoryPrefix: aString self namesBuilder systemCategoryPrefix: aString! ! !PltSchemaInstance methodsFor: '*xtra-platypus-testing' stamp: 'AlainPlantec 5/20/2012 10:30'! usePlatypusPrimitiveSchema self schemata ifNil: [^ false ]. ^ self schemata anySatisfy: [:sch | sch isPlatypusPrimitiveSchema]! ! !PltSchemaInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/19/2012 19:26'! validationResult: aBoolean super validationResult: aBoolean. self validationDate: DateAndTime now asString. self changeDate isNil ifTrue: [self changeDate: self validationDate]. ! ! !PltSchemaInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/14/2012 01:06'! verifySilently self forgetAllErrors. self validationResult: (self resolvesSilently and: [self semanticChecksSilently ]). ^ self validationResult! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/13/2005 17:57'! addRecordsToExternalRepresentation: externalRep self records do: [:rec | rec copy addRecordsToExternalRepresentation: externalRep]! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 15:16'! asExternalRepresentation ^ self! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/29/2004 18:08'! equal: other ^ self equalExternal: other! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/29/2004 17:47'! groupClass ^ PltExternalGroupRepresentation! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 6/5/2004 09:29'! inferedDomain | domains infered | domains := Set new. self records do: [:rec | domains add: rec computedDomain]. domains isEmpty ifTrue: [^ PltGenericType asDomain]. infered := PltSelectType new. infered selections: domains. ^ infered! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 19:06'! instEqual: other | otherRecs myRecords otherRecords foundEqual | self groupClass == other groupClass ifFalse: [^ PltFalseConstant new]. self == other ifTrue: [^ PltTrueConstant new]. self records size ~= other records size ifTrue: [^ PltFalseConstant new]. myRecords := IdentitySet new. otherRecords := IdentitySet new. myRecords addAll: self records. otherRecords addAll: other records. self records do: [:myRec | otherRecs := otherRecords select: [:or | or definition == myRec definition]. otherRecs isEmpty ifTrue: [^ PltFalseConstant new]. foundEqual := otherRecs detect: [:or | (or instEqual: myRec) isPltTrueConstant] ifNone: []. foundEqual ifNil: [^ PltFalseConstant new]. otherRecords remove: foundEqual. myRecords remove: myRec]. ^ PltLogicalLiteral val: (myRecords isEmpty and: [otherRecords isEmpty])! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/6/2006 15:33'! interpretingContext ^ self instRef interpretingContext! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/6/2006 15:33'! records ^ recordsCache ifNil: [recordsCache := self instRef recordsForGroup: self definition into: OrderedCollection new]! ! !PltExternalGroupRepresentation methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/6/2012 14:40'! recordsForGroup: anEntityDef into: aCollection self records do: [:rec | (rec isInsideGroup: anEntityDef) ifTrue: [aCollection add: rec. rec definition referenced supertypes do: [:st | self recordsForGroup: st ref into: aCollection]]]. ^ aCollection! ! !PltTypedExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:22'! inferedDomain ^ self domain computedDomain ! ! !PltGreaterEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:59'! operatorSymbol ^ #>=! ! !PltGreaterEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:17'! pltOperator ^ '>=' ! ! !PltInterval class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 21:10'! expr: anExpression ^ self new expr: anExpression! ! !PltXorExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:02'! operatorSymbol ^ #xor! ! !PltRepeatStatement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/16/2004 12:10'! initializeContextInInterpretor: anInterpretor self incrControl ifNotNil: [anInterpretor prepareIncrControl: self incrControl].! ! !PltRepeatStatement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/3/2004 15:48'! interpretorContextClass ^ PlatypusExpressInterpretorRepeatContext! ! !PltRepeatStatement methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/7/2010 16:33'! lookUpIdentifierBN: aName | upper | ^ self incrControl ifNotNil: [ upper := aName asUppercase. self incrControl variable name asUppercase = upper ifTrue: [self incrControl variable]]! ! !PltRepeatStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/14/2005 08:38'! variableHolders ^ self incrControl ifNil: [OrderedCollection new] ifNotNil: [OrderedCollection with: self incrControl variable]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! * op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val * op val. r isFloat ifTrue: [rl := PltRealLiteral val: r] ifFalse: [rl := PltIntegerLiteral val: r]] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! + op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val + op val. (r isKindOf: Float) ifTrue: [rl := PltRealLiteral val: r] ifFalse: [rl := PltIntegerLiteral val: r]] ifFalse: [op isPltAggregateData ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! - op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val - op val. (r isKindOf: Float) ifTrue: [rl := PltRealLiteral val: r] ifFalse: [rl := PltIntegerLiteral val: r]] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! / op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val / op val. rl := PltIntegerLiteral val: r asInteger] ifFalse: [op isPltAggregateData ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! < op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltNumericLiteral ifTrue: [^ PltLogicalLiteral val: self val < op val] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! <= op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltNumericLiteral ifTrue: [^ PltLogicalLiteral val: self val <= op val] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:18'! > op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltNumericLiteral ifTrue: [^ PltLogicalLiteral val: self val > op val] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:19'! >= op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltNumericLiteral ifTrue: [^ PltLogicalLiteral val: self val >= op val] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/7/2004 14:59'! abs ^ self val abs! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 20:52'! asIntegerLiteral ^ PltIntegerLiteral val: self val asInteger. ! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 20:52'! asRealLiteral ^ PltRealLiteral val: self val asFloat. ! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:00'! asRealLiteralCompatibleTo: anType interpretor: anInterpretor ^ PltRealLiteral val: self val asFloat! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:19'! div: op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val / op val. rl := PltRealLiteral val: r asFloat] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:19'! expo: op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val raisedTo: op val. (r isKindOf: Float) ifTrue: [rl := PltRealLiteral val: r] ifFalse: [rl := PltIntegerLiteral val: r]] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 09:34'! minus: op interpretor: anInterpretor ^ self - op! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:19'! mod: op | r rl | op ifMissing: [^ op] ifNotMissing: [op isPltNumericLiteral ifTrue: [r := self val \\ op val. (r isKindOf: Float) ifTrue: [rl := PltRealLiteral val: r] ifFalse: [rl := PltIntegerLiteral val: r]] ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid right argument']. ^ rl]! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 10:39'! mult: op interpretor: anInterpretor ^ self * op! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 20:53'! negated ^ self class val: self val negated. ! ! !PltNumericLiteral methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 21:38'! plus: op interpretor: anInterpretor op isPltAggregateData ifTrue: [^ op addFirst: self interpretor: anInterpretor]. ^ self + op! ! !PltEntityInstancesSet methodsFor: '*xtra-platypus-type-infering' stamp: 'alain.plantec 12/19/2008 09:48'! elementType ^ self entityRef computedDomain. ! ! !PltEntityInstancesSet methodsFor: '*xtra-platypus-type-infering' stamp: 'alain.plantec 12/19/2008 09:59'! inferedDomain | aSet | aSet := PltSetType new. aSet elementType: self elementType. ^ aSet ! ! !PltEntityInstancesSet methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/21/2003 17:26'! name ^ self entityRef name! ! !PltSupertypeConstraint methodsFor: '*xtra-platypus-checking' stamp: 'apl 11/15/2003 10:37'! checksInheritance: mySuper ^ self expr ifNil: [OrderedCollection new] ifNotNil: [self expr checksSubtypesInheritance: mySuper]! ! !PltIntegerType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:10'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asIntegerLiteralCompatibleTo: self interpretor: anInterpretor ! ! !PltIntegerType methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/12/2012 20:53'! initializedValue ^ PltIntegerLiteral val: 0! ! !PltIntegerType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 22:33'! isGeneralizationOf: otherType ^ (super isGeneralizationOf: otherType) or: [otherType isPltRealType]! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/16/2005 17:31'! add: anElement contents detect: [:el | (el equal: anElement) isPltTrueConstant] ifNone: [super add: anElement]! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/16/2005 15:16'! add: newObject beforeIndex: index self add: newObject! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 16:44'! addAll: aCollection super addAll: aCollection. ! ! !PltSetInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 10:52'! addElementsTo: anotherAggregate elementType: aType if: ifBlock interpretor: anInterpretor self contents do: [:el | (ifBlock value: el) ifTrue: [anotherAggregate add: (anInterpretor valueFromDomain: aType assignCompatibleWith: el)]]. ^ anotherAggregate! ! !PltSetInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 10:46'! addElementsTo: anotherAggregate elementType: aType interpretor: anInterpretor ^ self addElementsTo: anotherAggregate elementType: aType if: [:el | true] interpretor: anInterpretor ! ! !PltSetInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 21:40'! asSetInstance ^ self! ! !PltSetInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 16:34'! asSetInstanceCompatibleTo: aType interpretor: anInterpretor (self isCompatibleWith: aType) ifTrue: [^ self]. ^ super asSetInstanceCompatibleTo: aType interpretor: anInterpretor! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:09'! at: anIndex ^ self contentsList at: anIndex! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 15:01'! at: anIndex put: anObject self shouldNotBeRedefined ! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 17:00'! contentsList ^ OrderedCollection newFrom: contents! ! !PltSetInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:27'! equal: other | res | res := super equal: other. res ifFalseOrUnknownConstant: [^ res]. self contents do: [:el | (other contents anySatisfy: [:eli | (el equal: eli) isPltTrueConstant]) ifFalse: [^ PltLogicalLiteral val: false]]. other contents do: [:el | (self contents anySatisfy: [:eli | (el equal: eli) isPltTrueConstant]) ifFalse: [^ PltLogicalLiteral val: false]]. ^ PltLogicalLiteral val: true! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:11'! indexOf: anObject ^ self contentsList indexOf: anObject! ! !PltSetInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/26/2004 02:59'! inferedDomain | aggr | aggr := PltSetType new. aggr isGeneralType: self general. aggr lowerBound: self lowerBound. aggr upperBound: self upperBound. aggr elementType: self inferedElementType. ^ aggr! ! !PltSetInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/10/2003 17:11'! isSequenceable ^ false! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:13'! razContentsList (self removeGenericProperty: #contentsList) ! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 16:45'! remove: anElement super remove: anElement. ! ! !PltSetInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/17/2012 10:41'! replace: aValue with: another self remove: aValue. another ifNotNil: [self add: another]! ! !PltQualifiedExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:15'! inferedDomain | currDomain | currDomain := self head computedDomain. self qualifiers do: [:qual | currDomain := qual inferedDomainWith: currDomain]. ^ currDomain ! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 17:01'! addAll: aCollection super addAll: aCollection. ! ! !PltBagInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 10:47'! addElementsTo: anotherAggregate elementType: aType if: ifBlock interpretor: anInterpretor self contents do: [:el | (ifBlock value: el) ifTrue: [anotherAggregate add: (anInterpretor valueFromDomain: aType assignCompatibleWith: el)]]. ^ anotherAggregate! ! !PltBagInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 10:47'! addElementsTo: anotherAggregate elementType: aType interpretor: anInterpretor ^ self addElementsTo: anotherAggregate elementType: aType if: [:el | true] interpretor: anInterpretor! ! !PltBagInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/15/2003 21:40'! asBagInstance ^ self! ! !PltBagInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/9/2004 16:33'! asBagInstanceCompatibleTo: aType interpretor: anInterpretor (self isCompatibleWith: aType) ifTrue: [^self]. ^ super asBagInstanceCompatibleTo: aType interpretor: anInterpretor ! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:09'! at: anIndex ^ self contentsList at: anIndex! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:17'! at: anIndex put: anObject self contentsList at: anIndex put: anObject. self setContents: self contentsList! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 17:01'! contentsList ^ OrderedCollection newFrom: contents! ! !PltBagInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/4/2005 13:57'! equal: other | res | (res := super equal: other) ifFalseOrUnknownConstant: [^ res]. self contents do: [:el | (other contents occurrencesOf: el) = (self contents occurrencesOf: el) ifFalse: [^ PltLogicalLiteral val: false]]. other contents do: [:el | (self contents occurrencesOf: el) = (other contents occurrencesOf: el) ifFalse: [^ PltLogicalLiteral val: false]]. ^ PltLogicalLiteral val: true! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:17'! indexOf: anObject ^ self contentsList indexOf: anObject! ! !PltBagInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 7/26/2004 02:59'! inferedDomain | aggr | aggr := PltBagType new. aggr isGeneralType: self general. aggr lowerBound: self lowerBound. aggr upperBound: self upperBound. aggr elementType: self inferedElementType. ^ aggr! ! !PltBagInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/10/2003 17:10'! isSequenceable ^ false! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/31/2006 18:51'! pltAdd: newObject beforeIndex: index self add: newObject! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 14:18'! razContentsList self removeGenericProperty: #contentsList! ! !PltBagInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/8/2004 17:01'! remove: anElement super remove: anElement. ! ! !PltExpoExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:37'! inferedDomain ^ PltRealType asDomain! ! !PltExpoExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 17:57'! operatorSymbol ^ #'**'! ! !PltExpoExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/4/2005 12:32'! pltOperator ^ 'raisedTo:'! ! !PltRangeQualifier methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/23/2005 22:28'! inferedDomainWith: currDomain currDomain isPltAggregateOrStringType ifFalse: [^ PltGenericType asDomain]. currDomain isPltStringType ifTrue: [^ PltStringType asDomain]. ^ currDomain computedDomain! ! !PltUniquenessRule methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/19/2004 11:01'! errorQualifier ^ self label isNil ifTrue: ['uniqueness rule #' , (self owner uniquenessRules indexOf: self) printString] ifFalse: ['uniqueness rule ''' , self label , '''']! ! !PltInstanceScope methodsFor: '*xtra-platypus-data-management' stamp: 'apl 11/10/2003 18:02'! updatePersistentLabelIndex: index ^ self owned do: [ :o | o updatePersistentLabelIndex: index]! ! !PltExpression methodsFor: '*xtra-platypus-checking' stamp: 'apl 12/12/2003 10:27'! alwaysReturn ^ false! ! !PltExpression methodsFor: '*xtra-platypus-converting' stamp: 'apl 2/4/2004 23:41'! asAggregateInitializerElement ^ PltAggregateInitializerElement val: self! ! !PltExpression methodsFor: '*xtra-platypus-parsing' stamp: 'AlainPlantec 10/7/2010 16:31'! asBound | bound | bound := PltPopulationDependentBound new. bound setBoundValue: self. ^ bound! ! !PltExpression methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/13/2004 10:17'! assignValue: anObject ^ false! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 17:26'! cachedDomain ^ cachedDomain! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 17:26'! cachedDomain: aDomain cachedDomain := aDomain! ! !PltExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/6/2006 17:21'! computedDomain | sd | (sd := self cachedDomain) ifNil: [sd := self inferedDomain. sd ~~ self ifTrue: [self cachedDomain: sd]]. ^ sd! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/23/2005 22:24'! errorQualifier self isPltValue ifTrue: [^ super errorQualifier , ' ' , self printableCode]. ^ super errorQualifier , ' ''' , self prettyPrintedExpressCode , ''''! ! !PltExpression methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/19/2003 10:37'! inferedDomain ^ PltGenericType asDomain! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/12/2012 13:38'! printableCode self isPltValue ifTrue: [| writer | writer := PlatypusModelContentsStepWriter new. writer outStream: (WriteStream on: String new). writer acceptTry: self. ^ writer outStream contents]. ^ super printableCode! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 17:26'! removeCachedDomain self cachedDomain: nil! ! !PltExpression methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 12:01'! rolesOf: anInstanceReference in: aSetOfString ! ! !PltExpression methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/9/2004 11:54'! rolesValue: anInstanceReference roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet ! ! !PltExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 23:27'! setParenthesis: aBoolean "ignored here (see PltBinaryExpression)" ^ self! ! !PltInExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:01'! operatorSymbol ^ #in! ! !PltAliasStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 18:58'! alwaysReturn ^ self statements anySatisfy: [ :stmt | stmt alwaysReturn] ! ! !PltAliasStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:36'! identifiersCache ^ identifiersCache ifNil: [identifiersCache := Dictionary new]! ! !PltAliasStatement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/17/2003 23:06'! initializeContextInInterpretor: anInterpretor self variable acceptTry: anInterpretor. anInterpretor pop! ! !PltAliasStatement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/17/2003 13:00'! lookUpIdentifierBN: aName ^ self variable name asUppercase = aName asUppercase ifTrue: [ self variable] ! ! !PltAliasStatement methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:31'! variableHolders ^ OrderedCollection with: variable ! ! !PltFunctionDeclaration methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/25/2004 20:44'! evaluateAndExplore ^ self evaluate explore! ! !PltFunctionDeclaration methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/19/2004 17:10'! evaluateAndExplore: args ^ (self evaluate: args) val explore ! ! !PltFunctionDeclaration methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 09:49'! generatedClassNameSuffix ^ 'Function'! ! !PltFunctionDeclaration methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:20'! staticDomain ^ self returnType computedDomain ! ! !PltAggregateInitializerElement class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 20:48'! val: aPrimitive ^ self new val: aPrimitive! ! !PltAggregateInitializerElement class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/23/2004 13:30'! val: aPrimitive repetition: aIntegerLiteral ^ self new val: aPrimitive repetition: aIntegerLiteral! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:27'! addElementsTo: anAggregateInstance elementType: aType if: ifBlock interpretor: anInterpretor | nb | nb := 0. (ifBlock value: val) ifTrue: [nb := repetition isNil ifTrue: [1] ifFalse: [anInterpretor acceptTry: repetition. anInterpretor popVal val]. 1 to: nb do: [:r | anAggregateInstance add: (anInterpretor valueFromDomain: aType assignCompatibleWith: val)]]. ^ nb! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 10:02'! addElementsTo: anAggregateInstance elementType: aType interpretor: anInterpretor ^ self addElementsTo: anAggregateInstance elementType: aType if: [:el | true] interpretor: anInterpretor ! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 10/7/2010 16:27'! addElementsTo: anAggregateInstance upTo: maxNb elementType: aType if: ifBlock interpretor: anInterpretor | nb maxi | nb := 0. (ifBlock value: val) ifTrue: [ nb := self repetitionValue. maxi := nb < maxNb ifTrue: [nb] ifFalse: [maxNb]. 1 to: maxi do: [:r | anAggregateInstance add: (anInterpretor valueFromDomain: aType assignCompatibleWith: val)]]. ^ maxi! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/5/2004 10:03'! addElementsTo: anAggregateInstance upTo: maxNb elementType: aType interpretor: anInterpretor ^ self addElementsTo: anAggregateInstance upTo: maxNb elementType: aType if: [:el |true] interpretor: anInterpretor ! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-converting' stamp: 'apl 2/4/2004 23:40'! asAggregateInitializerElement ^ self! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 23:17'! computedDomain ^ self val computedDomain ! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 3/19/2004 15:20'! do: aBlock 1 to: self repetitionValue do: [ :p | aBlock value: val]! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 1/22/2011 14:11'! equal: other | o | o := other asAggregateInitializerElement. ^ PltLogicalLiteral val: ((self val equal: o val) isPltTrueConstant and: [self repetitionValue = o repetitionValue])! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 1/22/2011 14:03'! includesVal: aValue ^ self val instEqual: aValue! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:12'! isPltMissingValue ^ self val isPltMissingValue! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/17/2005 08:52'! repetitionValue ^self repetition ifNil: [1] ifNotNil: [self repetition referenced val]! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/23/2004 17:09'! repetitionValue: anInteger self repetition: (PltIntegerLiteral val: anInteger) ! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/10/2004 18:36'! rolesOf: anInstanceReference in: aSetOfString ^ self val rolesOf: anInstanceReference in: aSetOfString ! ! !PltAggregateInitializerElement methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/21/2004 12:04'! rolesValue: anInstanceReference roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet ^ val rolesValue: anInstanceReference roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: resultSet ! ! !PltAttributeQualifier methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 2/23/2005 21:53'! inferedDomainWith: currDomain | attr | currDomain isPltEntityDefinition ifFalse: [^ PltGenericType asDomain]. (attr := currDomain lookUpAttributeBN: attributeName) ifNil: [^ PltGenericType asDomain] ifNotNil: [^ attr computedDomain]! ! !PltAttributeQualifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/13/2003 21:45'! name ^ self attributeName! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! and: op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ op]! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:27'! equal: op ^ PltLogicalLiteral val: op isPltTrueConstant! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:20'! ifFalseConstant: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:20'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ trueAlternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:20'! ifFalseConstant: falseAlternativeBlock ifTrueConstant: trueAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ trueAlternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:20'! ifFalseConstant: alternativeBlock ifUnknownConstant: unknBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:21'! ifFalseOrUnknownConstant: alternativeBlock "Answer the value of alternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ nil ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:21'! ifTrueConstant: alternativeBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:21'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ trueAlternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:21'! ifTrueConstant: trueAlternativeBlock ifFalseConstant: falseAlternativeBlock ifUnknownConstant: unknBlock "Answer the value of falseAlternativeBlock. Execution does not actually reach here because the expression is compiled in-line." ^ trueAlternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-logical-controlling' stamp: 'apl 2/10/2004 16:21'! ifTrueConstant: alternativeBlock ifUnknownConstant: unknBlock "Since the condition is false, answer the value of the false alternative, which is nil. Execution does not actually reach here because the expression is compiled in-line." ^ alternativeBlock value ! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/14/2003 21:48'! not ^ PltFalseConstant new! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/14/2003 22:21'! or: op ^ PltTrueConstant new! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 10:55'! ordering ^ 3! ! !PltTrueConstant methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/16/2004 16:18'! val ^ true! ! !PltTrueConstant methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 2/23/2005 22:11'! xor: op op ifMissing: [^ PltUnknownConstant new] ifNotMissing: [op isPltLogicalLiteral ifFalse: [^ PlatypusExpressInvalidArgumentException signal: 'invalid left argument']. ^ PltLogicalLiteral val: op isPltFalseConstant]! ! !PltGenericType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:43'! canBeAssignedWith: otherType ^ true! ! !PltGenericType methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 1/23/2004 17:13'! elementType ^ self! ! !PltGenericType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:50'! isAssignableTo: otherType ^ true! ! !PltGenericType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/26/2003 13:49'! isCompatibleWith: otherType ^ true! ! !PltGenericType methodsFor: '*xtra-platypus-testing' stamp: 'apl 12/13/2005 17:51'! isCompatibleWithEntityDefinition: otherType ^ true! ! !PltGenericType methodsFor: '*xtra-platypus-testing' stamp: 'apl 11/20/2003 11:40'! isGeneralizationOf: otherType ^ true! ! !PltGenericType methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/26/2003 13:29'! staticDomain ^ self class asDomain! ! !PltIdentifier class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 5/24/2004 16:05'! name: anIdent ref: aDictionaryInstance ^ self new name: anIdent ref: aDictionaryInstance! ! !PltIdentifier class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 1/20/2004 21:08'! ref: aDictionaryInstance ^ self new ref: aDictionaryInstance! ! !PltIdentifier methodsFor: '*xtra-platypus-converting' stamp: 'apl 6/15/2005 15:27'! asAttributeIdentifier ^ PltAttributeIdentifier name: name ref: ref! ! !PltIdentifier methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/20/2005 12:05'! contextsStack ^ contextsStack! ! !PltIdentifier methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 12/20/2005 12:05'! contextsStack: aStack contextsStack := aStack! ! !PltIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/23/2004 03:24'! errorQualifier ^ 'identifier ''' , self name , ''''! ! !PltIdentifier methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 6/22/2004 15:15'! inferedDomain ^ self ref ifNil: [PltGenericType asDomain] ifNotNil: [ self ref computedDomain]! ! !PltIdentifier methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/28/2006 08:57'! isDebugged ^ true! ! !PltIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/24/2004 16:05'! name: anIdent ref: aDictionaryInstance self name: anIdent. self ref: aDictionaryInstance ! ! !PltIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/27/2004 09:54'! parametersSize ^ parameters ifNil: [0] ifNotNil: [parameters size]! ! !PltIdentifier methodsFor: '*xtra-platypus-printing' stamp: 'apl 6/15/2005 14:48'! printOn: aStream super printOn: aStream. aStream nextPut: $(. name printOn: aStream . aStream nextPut: $)! ! !PltIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 17:20'! referenced ^ self ref! ! !PltSetType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 5/26/2004 18:09'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asSetInstanceCompatibleTo: self interpretor: anInterpretor! ! !PltSupertypeExpression methodsFor: '*xtra-platypus-checking' stamp: 'apl 11/15/2003 10:28'! checksSubtypesInheritance: mySuper ! ! !PltSelfIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 9/25/2006 16:22'! computedDomain ^ PltGenericType asDomain! ! !PltSelfIdentifier methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/20/2006 18:56'! referenced ^ self! ! !PltAggregationType class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/1/2005 16:03'! expressTypeForTypeOf | en | ^ ((en := self platypusMetaData name ) copyFrom: 1 to: en size - 5) asUppercase! ! !PltAggregationType class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/26/2004 23:38'! sexpressTypeForTypeOf | en | ^ ((en := self entityName) copyFrom: 1 to: en size - 5) asUppercase! ! !PltAggregationType methodsFor: '*xtra-platypus-testing' stamp: 'apl 2/23/2005 22:00'! isPltGeneralAggregateType ^ self isGeneralType! ! !PltSimpleType class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/26/2004 23:36'! expressTypeForTypeOf ^ self expressTypeName! ! !PltSimpleType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/23/2004 02:56'! errorQualifier ^ super errorQualifier! ! !PltSimpleType methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 11/21/2003 16:29'! staticDomain ^ self class asDomain! ! !PltNotEqualExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 18:01'! operatorSymbol ^ #'<>'! ! !PltNotEqualExpression methodsFor: '*xtra-platypus-express-compat' stamp: 'apl 3/6/2005 22:19'! pltOperator ^ '~='! ! !PltListType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/22/2004 19:05'! assignableValueFrom: aValue interpretor: anInterpretor ^ aValue asListInstanceCompatibleTo: self interpretor: anInterpretor ! ! !PltListType methodsFor: '*xtra-platypus-classification' stamp: 'apl 6/21/2003 10:14'! isListType ^ true! ! !PltAliasStatementVariable methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/21/2003 17:35'! name ^ self aliasIdent! ! !PltAliasStatementVariable methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/27/2006 17:18'! referenced ^ self ref! ! !PltAliasStatementVariable methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 22:19'! staticDomain ^ self ref computedDomain ! ! !PltAliasStatementVariable methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:41'! variableHolders ^ OrderedCollection with: self! ! !PltNotExpression methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/10/2003 22:20'! operatorSymbol ^#not! ! !PltNamedType methodsFor: '*xtra-platypus-classification' stamp: 'apl 9/25/2006 13:31'! asSelfIdentifier ^ PltSelfIdentifier new! ! !PltNamedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/10/2004 13:03'! errorQualifier ^ super errorQualifier , ' ''' , self name , '''' ! ! !PltNamedType methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/20/2004 19:13'! expressTypeForTypeOf ^ self owner expressTypeForTypeOf , '.' , self name asUppercase! ! !PltNamedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/6/2006 12:36'! identifiersCache ^ identifiersCache ifNil: [identifiersCache := Dictionary new]! ! !PltNamedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/22/2006 14:13'! identifiersCache: aDictionary identifiersCache := aDictionary! ! !PltNamedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/25/2005 22:38'! lookUpSchemaDefinition ^ owner lookUpSchemaDefinition ! ! !PltNamedType methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/15/2007 10:40'! referenceOnSelf ^ (self referenceClass ref: self) owner: self! ! !PltNamedType methodsFor: '*xtra-platypus-data-management' stamp: 'apl 3/13/2003 10:59'! renameWith: newName self name: newName! ! !PltNamedType methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:37'! variableHolders ^ whereRules copy! ! !PltVariableSizeAggregationType methodsFor: '*xtra-platypus-classification' stamp: 'apl 6/21/2003 10:13'! isVariableSizeAggregationType ^ true! ! !PltEntityInstance class methodsFor: '*xtra-platypus-instance-creation' stamp: 'apl 7/19/2004 14:59'! new ^ super new stepInitialize! ! !PltEntityInstance class methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/23/2007 10:28'! visualworksName ^ self vwNamespaceName , '.' , self name! ! !PltEntityInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/15/2012 12:44'! addError: anError (self errors anySatisfy: [:e | e message = anError message and: [e path = anError path]]) ifTrue: [^self]. self schemaInstance ifNotNil: [:schi | schi addError: anError for: self]! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/13/2004 12:23'! asClearText ^ self printableCode ! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/26/2004 17:57'! assignableValue ^ self! ! !PltEntityInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/11/2004 18:11'! computedDomain ^ nil ! ! !PltEntityInstance methodsFor: '*xtra-platypus-copying' stamp: 'apl 7/26/2004 20:02'! deepCopy ^ super copy. ! ! !PltEntityInstance methodsFor: '*xtra-platypus-releasing' stamp: 'apl 3/22/2006 14:30'! deepDestroy PlatypusMetaDataDestroyer new acceptTry: self! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/3/2004 18:09'! equal: other ^ PltLogicalLiteral val: (self == other)! ! !PltEntityInstance methodsFor: '*xtra-platypus-checking' stamp: 'AlainPlantec 6/15/2012 12:44'! errors ^ self schemaInstance ifNil: [#()] ifNotNil: [:schi | schi errorsFor: self]! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 4/7/2006 20:25'! generatedClassName ^ self namesBuilder normalizedClassNameFrom: self name suffix: self generatedClassNameSuffix! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 14:10'! generatedClassNameFromNamesBuilder: aNamesBuilder ^ aNamesBuilder normalizedClassNameFrom: self name suffix: self generatedClassNameSuffix! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 10:30'! generatedClassNameSuffix ^ ''! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 12/15/2006 22:21'! generatedNamespaceName ^ self namesBuilder systemCategoryPrefix! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 12/15/2006 22:26'! generatedQualifiedClassName ^ self generatedNamespaceName , '.', self generatedClassName! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 10/2/2006 19:23'! generatedSystemCategory ^ self systemCategoryFromNamesBuilder: self namesBuilder ! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 12/5/2006 08:50'! generatedSystemCategoryPrefix ^ self namesBuilder systemCategoryPrefix! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 1/19/2007 10:05'! generatedSystemCategorySuffix ^ ''! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/10/2005 08:20'! groupClass ^ nil! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 3/11/2004 17:46'! hash ^ super hash! ! !PltEntityInstance methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:56'! ifMissing: missingBlock ^ nil! ! !PltEntityInstance methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:56'! ifMissing: missingBlock ifNotMissing: notMissingBlock ^ notMissingBlock value! ! !PltEntityInstance methodsFor: '*xtra-platypus-controlling' stamp: 'apl 5/25/2004 20:19'! ifNotMissing: notMissingBlock ^ notMissingBlock value! ! !PltEntityInstance methodsFor: '*xtra-platypus-controlling' stamp: 'apl 2/3/2004 11:57'! ifNotMissing: notMissingBlock ifMissing: missingBlock ^ notMissingBlock value! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 1/22/2011 13:17'! includesVal: other ^ self instEqual: other! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 12/10/2012 10:33'! inclusiveOwnerPath | p t | p := OrderedCollection new. t := self. [t notNil] whileTrue: [ p size > 100 ifTrue: [self halt]. (p includes: t) ifTrue: [t := nil] ifFalse: [ p addFirst: t. t := t owner]]. ^ p! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/12/2012 20:52'! initializedValue ^ PltMissingValue new! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/28/2004 10:30'! instEqual: other ^ (self equal: other)! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 20:55'! instNotEqual: other ^ (self instEqual: other) not! ! !PltEntityInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/15/2004 10:53'! isLink ^ false! ! !PltEntityInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 21:35'! isPltAggregateCompatibleType ^ false! ! !PltEntityInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:28'! isPltAggregateOrStringType ^ self isPltAggregateCompatibleType or: [self isPltStringType]! ! !PltEntityInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:15'! isPltNumberOrStringType ^ false! ! !PltEntityInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:19'! isPltOrderedLiteral ^ false! ! !PltEntityInstance methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:22'! isPltValue ^ false! ! !PltEntityInstance methodsFor: '*xtra-platypus-testing' stamp: 'apl 3/15/2004 10:53'! linked ^ self! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/11/2004 23:28'! linkedMetaData ^ self! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/18/2004 19:16'! lookUpIdentifierBN: aName ^ nil! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/18/2004 19:16'! lookUpNamedTypeBN: aName ^ nil! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 10/26/2006 18:53'! lookUpSchemaInstanceBN: aName | key ref | key := aName asUppercase. ref := PlatypusSchemaInstanceReference allSchemaInstancesReferences detect: [:schi | schi schemaInstance name asUppercase = key] ifNone: []. ^ ref ifNotNil: [ref schemaInstance]! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'AlainPlantec 6/15/2012 12:44'! namesBuilder ^ self schemaInstance namesBuilder! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 1/27/2004 20:54'! notEqual: other ^ (self equal: other) not! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/13/2012 23:54'! ownerPath ^ self inclusiveOwnerPath allButLast ! ! !PltEntityInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'apl 2/22/2006 14:33'! ownerTamarisItemRef | ref curr | ref := self tamarisItemRef. curr := self. [ref isNil] whileTrue: [ ref := curr tamarisItemRef. curr := curr owner. curr ifNil: [^curr]]. ^ ref ! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 4/1/2006 16:04'! pushContextInInterpretor: anInterpretor anInterpretor pushContext: (self interpretorContextClass contextInstance: self)! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 5/25/2004 08:34'! referenced ^ self! ! !PltEntityInstance methodsFor: '*xtra-platypus-type-infering' stamp: 'AlainPlantec 6/13/2012 23:39'! removeCachedDomain! ! !PltEntityInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'AlainPlantec 6/15/2012 12:44'! removeTamarisItemRef | schi | (schi := self schemaInstance) ifNotNil: [schi removeTamarisItemRefFor: self]! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 2/14/2007 16:51'! rootClassSystemCategory ^ self namesBuilder rootClassSystemCategory! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/15/2012 12:59'! schemaDefinition ^ self owner schemaDefinition! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 10/13/2012 01:08'! schemaInstance ^ self owner ifNotNil: [:o | o schemaInstance]! ! !PltEntityInstance methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/26/2004 23:01'! selectionString ^ self printableCode! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'AlainPlantec 6/15/2012 13:02'! systemCategoryFromNamesBuilder: aNameBuilder ^ self schemaDefinition systemCategoryFromNamesBuilder: aNameBuilder! ! !PltEntityInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'apl 6/26/2004 00:01'! tamarisChildrenIntoOwner: aReference ^ OrderedCollection new! ! !PltEntityInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'AlainPlantec 6/15/2012 14:53'! tamarisItemRef ^ self schemaInstance ifNotNil: [:schi | schi tamarisItemRefOf: self]! ! !PltEntityInstance methodsFor: '*xtra-platypus-tamaris' stamp: 'AlainPlantec 6/15/2012 12:45'! tamarisItemRef: new (self schemaInstance) ifNotNil: [:schi | schi tamarisItemRef: new for: self]! ! !PltEntityInstance methodsFor: '*xtra-platypus-evaluating' stamp: 'AlainPlantec 5/4/2012 12:55'! val ^ self! ! !PltEntityInstance methodsFor: '*xtra-platypus-code-generating' stamp: 'apl 3/14/2005 08:34'! variableHolders ^ OrderedCollection new! ! !PltEntityInstance methodsFor: '*xtra-platypus-visiting' stamp: 'apl 6/18/2004 15:46'! visitedBy: aVisitor ^ self! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 22:15'! name: aString self token: aString! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 20:33'! owner ^ owner! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 20:33'! resolver ^ resolver! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 20:34'! resolver: aBlock resolver := aBlock! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-resolving' stamp: 'AlainPlantec 5/5/2012 22:25'! resolvesFrom: aChecker ^ self resolver value: aChecker! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 20:33'! token ^ token! ! !PltUnresolvedSymbol methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 5/5/2012 20:34'! token: aString token := aString! ! !PltCaseStatement methodsFor: '*xtra-platypus-testing' stamp: 'apl 10/30/2003 19:03'! alwaysReturn self caseOtherwise ifNil: [^ false]. self caseActions do: [ :ca | ca alwaysReturn not ifTrue: [^false]]. ^ self caseOtherwise alwaysReturn ! ! !PltExternalMetaSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:32'! nativeSchema ^ nativeSchema! ! !PltExternalMetaSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/25/2006 13:32'! nativeSchema: aPltSchemaDefinition nativeSchema := aPltSchemaDefinition! ! !PltExternalMetaSchema methodsFor: '*xtra-platypus-accessing' stamp: 'apl 4/14/2006 08:38'! selectionString ^ 'META ' , super selectionString! ! !PltSimpleRecord methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 7/18/2004 15:29'! addRecordsToExternalRepresentation: externalRep externalRep records add: self. self owner: externalRep! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/24/2004 00:27'! at: pos ^ pos <= self parameters size ifTrue: [self parameters at: pos] ifFalse: [self definition referenced componentList at: pos]! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/2/2004 15:38'! at: position put: aValue self parameters at: position put: aValue! ! !PltSimpleRecord methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 3/1/2004 23:23'! computedDomain ^ self inferedDomain ! ! !PltSimpleRecord methodsFor: '*xtra-platypus-copying' stamp: 'apl 3/27/2006 17:10'! deepCopy ^ self copy. ! ! !PltSimpleRecord methodsFor: '*xtra-platypus-testing' stamp: 'apl 6/1/2004 12:58'! definitionOk ^ self definition ref notNil! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 2/5/2006 10:19'! detectInstanceAttributeIdentification: aBlock (self definition referenced selectLocalAttributeIdentifications: aBlock) ifNotEmpty: [:founds | ^ founds first]. ^ nil! ! !PltSimpleRecord methodsFor: '*xtra-platypus-evaluating' stamp: 'apl 6/5/2004 09:16'! equal: other | myParam otherParam res | self == other ifTrue: [^ PltTrueConstant new]. self definition referenced == other definition referenced ifFalse: [^ PltFalseConstant new]. 1 to: self parameters size do: [:pos | myParam := self parameters at: pos. otherParam := other parameters at: pos. res := myParam equal: otherParam. res ifFalseOrUnknownConstant: [^ res]]. ^ PltTrueConstant new! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 7/23/2004 03:44'! errorQualifier ^ 'external instance record '! ! !PltSimpleRecord methodsFor: '*xtra-platypus-type-infering' stamp: 'apl 12/21/2003 22:25'! inferedDomain ^ definition! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/22/2006 16:36'! inheritedDefinitions ^ definition ref inheritedDefinitions! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 12:08'! interpretingContext ^ self owner interpretingContext! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 6/5/2004 09:00'! isInsideGroup: anEntityDef ^ self definition referenced isGeneralizationOf: anEntityDef! ! !PltSimpleRecord methodsFor: '*xtra-platypus-classification' stamp: 'apl 2/23/2005 22:23'! isPltValue ^ true! ! !PltSimpleRecord methodsFor: '*xtra-platypus-classification' stamp: 'apl 5/26/2004 23:13'! isSimpleRecord ^ true! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/17/2006 17:13'! owningModel ^ self owner owningModel! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'AlainPlantec 6/12/2012 13:38'! printableCode | writer | writer := PlatypusModelContentsStepWriter new. writer outStream: (WriteStream on: String new). writer acceptTry: self. ^ writer outStream contents! ! !PltSimpleRecord methodsFor: '*xtra-platypus-enumerating' stamp: 'apl 6/3/2004 01:00'! privateExplicitAttributesAndValuesDo: aBlock ^ self definition referenced explicitAttributesAndValuesDo: aBlock values: self parameters startingAt: 1! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 1/30/2004 14:53'! recordsForGroup: anEntityDef ^ (self isInsideGroup: anEntityDef) ifTrue: [Set with: self] ifFalse: [Set new]! ! !PltSimpleRecord methodsFor: '*xtra-platypus-tamaris' stamp: 'apl 6/24/2004 00:30'! tamarisChildrenIntoOwner: anotherReference | subs pos elements | subs := OrderedCollection new. self definitionOk ifTrue: [elements := self definition referenced componentList. pos := 1. elements do: [:el | subs add: (el tamarisStepValueReferenceClass owner: anotherReference position: pos attributeOrRule: el). pos := pos + 1]]. ^ subs! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 3/31/2006 11:51'! tamarisStepValueReferenceClass ^ PlatypusStepRecordReference! ! !PltSimpleRecord methodsFor: '*xtra-platypus-accessing' stamp: 'apl 12/23/2006 18:34'! valueOfExplicitAttributeNamed: aName | entDef pos | (entDef := self definition ref) ifNotNil: [(pos := entDef positionOfExplicitAttributeNamed: aName) > 0 ifTrue: [^ parameters at: pos]]. ^ nil! ! !PltSimpleRecord methodsFor: '*xtra-platypus-copying' stamp: 'AlainPlantec 10/7/2010 16:33'! veryDeepCopy | n | n := self copy. n parameters: n parameters veryDeepCopy. ^ n! ! "xtra-platypus"! !PlatypusPostLoader class methodsFor: 'class initialization' stamp: 'AlainPlantec 12/6/2013 10:41'! initialize PltPlatypusMetaSchemasSchemaInstance bootstraps. PltPlatypusExpressPrimitivesSchemaInstance bootstraps. PlatypusInternalMetaSchemaInstanceReference initializeExpressMetaDictionaryIfNeeded. PlatypusInternalPrimitiveSchemaInstanceReference initializeExpressPrimitiveDictionaryIfNeeded.! ! ----Platypus: Updating Platypus_meta_schemas ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/expression ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/unary_expression ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/binary_expression ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/logical_expression ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/entity_instance_reference ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/instance_construction_expression ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/arithmetic_expression ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/expo_expression ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/mult_expression ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/div_expression ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/real_div_expression ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/mod_expression ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/plus_expression ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/minus_expression ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/and_expression ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/or_expression ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/xor_expression ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/comparison_expression ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/less_than_expression ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/greater_than_expression ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/equal_expression ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/less_equal_expression ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/greater_equal_expression ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/not_equal_expression ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/inst_comparison_expression ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/inst_equal_expression ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/inst_not_equal_expression ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/in_expression ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/like_expression ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/cardinality_expression ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/simple_unary_expression ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/not_expression ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/positive_expression ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/negative_expression ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/typed_expression ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/enumeration_value ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/entity_instances_set ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/qualified_expression ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/literal ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/identifier ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/attribute_identifier ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/self_identifier ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/uniqueness_rule_attribute_identifier ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/missing_value ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/redefined_attribute_value ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/implicitly_declared_identifier ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/interval ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/aggr_unary_expression ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/query_variable ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/query_expression ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/entity_instance_constructor ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/qualifier ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/attribute_qualifier ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/group_qualifier ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/index_qualifier ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/element_qualifier ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/range_qualifier ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/numeric_literal ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/logical_literal ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/true_constant ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/false_constant ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/unknown_constant ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/integer_literal ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/real_literal ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/pi_constant ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/e_constant ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/string_literal ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/binary_literal ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/native_expression ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_expressions_schema/escaped_expression ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/assignable ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/statement ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/null_statement ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/native_statement ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/alias_statement_variable ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/alias_statement ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/assignment_statement ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/case_statement ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/case_action ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/compound_statement ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/escape_statement ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/if_statement ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/repeat_statement ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/increment_control_variable ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/increment_control ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/return_statement ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/procedure_call_statement ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/skip_statement ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/output_statement ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/splitmark_statement ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/end_splitmark_statement ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_statements_schema/anonymous_variable ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/aggregate_data ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/aggregate_initializer ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/aggregate_initializer_element ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/aggregate_instance ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/array_instance ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/variable_size_aggregation_instance ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/list_instance ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/bag_instance ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_aggregate_data_schema/set_instance ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/instance_scope ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/application_instance ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/generic_instance ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/internal_representation ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/external_representation ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/group_representation ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/external_group_representation ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/internal_group_representation ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/user_defined_application_instance ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/simple_record ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/header_instance ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/user_defined_header_instance ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/file_description ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/file_name ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_population_schema/file_schema ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_environment_schema SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_environment_schema/model_contents ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_environment_schema/schema_instance ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/constructed_type TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/type_or_rule TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/base_type TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/underlying_type TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/parameter_type TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/declaration TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/time_stamp TYPE time_stamp = STRING ( 256 ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/primitive TYPE primitive = expression; END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/schema_name TYPE schema_name = STRING; END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/context_owner TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/inter_schema_link TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/entity_instance ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/sdai_instance ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/dictionary_instance ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/session_instance ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/domain_equivalent_item ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/context_definition ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/statements_container ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/global_rule ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/external_schema ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/include_schema ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/used_schema ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/referenced_schema ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/external_meta_schema ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/algorithm_declaration ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/native_code ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/native_algorithm ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/procedure_declaration ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/function_declaration ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/bound ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/integer_bound ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/population_dependent_bound ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/enumeration_type ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/named_type ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/dictionary_instance_reference ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/named_type_reference ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/attribute_reference ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/entity_definition_reference ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/defined_type_reference ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/where_rule ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/select_type ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/defined_type ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/entity_definition ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/supertype_constraint ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/supertype_expression ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/sub_entity_ref_expression ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/binary_supertype_expression ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/andor_supertype ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/and_supertype ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/oneof_supertype_expression ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/uniqueness_rule ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/attribute ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/aggregate_initializer_domain ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/aggregate_type ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/general_aggregate_type ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/aggregation_type ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/array_type ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/variable_size_aggregation_type ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/list_type ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/bag_type ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/set_type ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/simple_type ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/string_type ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/binary_type ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/number_type ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/real_type ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/integer_type ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/logical_type ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/boolean_type ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/constant_definition ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/local_variable ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/parameter_definition ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/generic_type ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/remark ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/tail_remark ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/embedded_remark ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/remark_reference ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/meta_concept_definition ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/derived_attribute ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/explicit_attribute ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/inverse_attribute ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/meta_mapping_rule ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/meta_mapping_definition ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_meta_schemas/Platypus_dictionary_schema/schema_definition ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; ----! ----Platypus: Updating platypus-meta-models: /platypus-meta/Platypus_meta_schemas SCHEMA Platypus_expressions_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; ENTITY expression ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); END_ENTITY; ENTITY binary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : expression; right_expr : expression; DERIVE op_string : STRING := ?; END_ENTITY; ENTITY logical_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY entity_instance_reference SUBTYPE OF ( expression ); persistent_label : STRING; ref : entity_instance; END_ENTITY; ENTITY instance_construction_expression SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY arithmetic_expression ABSTRACT SUPERTYPE SUBTYPE OF ( binary_expression ); END_ENTITY; ENTITY expo_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mult_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '*'; END_ENTITY; ENTITY div_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '/'; END_ENTITY; ENTITY real_div_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY mod_expression SUBTYPE OF ( arithmetic_expression ); END_ENTITY; ENTITY plus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '+'; END_ENTITY; ENTITY minus_expression SUBTYPE OF ( arithmetic_expression ); DERIVE SELF\binary_expression.op_string : STRING := '-'; END_ENTITY; ENTITY and_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'AND'; END_ENTITY; ENTITY or_expression SUBTYPE OF ( logical_expression ); DERIVE SELF\binary_expression.op_string : STRING := 'OR'; END_ENTITY; ENTITY xor_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY less_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_than_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY less_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY greater_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY not_equal_expression SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_comparison_expression ABSTRACT SUPERTYPE SUBTYPE OF ( comparison_expression ); END_ENTITY; ENTITY inst_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY inst_not_equal_expression SUBTYPE OF ( inst_comparison_expression ); END_ENTITY; ENTITY in_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY like_expression SUBTYPE OF ( logical_expression ); END_ENTITY; ENTITY cardinality_expression SUBTYPE OF ( logical_expression ); card1 : expression; card2 : expression; END_ENTITY; ENTITY simple_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); expr : expression; END_ENTITY; ENTITY not_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY positive_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY negative_expression SUBTYPE OF ( simple_unary_expression ); END_ENTITY; ENTITY typed_expression SUBTYPE OF ( simple_unary_expression ); domain : named_type_reference; END_ENTITY; ENTITY enumeration_value SUBTYPE OF ( qualifier ); domain : defined_type_reference; element : STRING; END_ENTITY; ENTITY entity_instances_set SUBTYPE OF ( unary_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY qualified_expression SUBTYPE OF ( unary_expression ); head : expression; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY literal ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY identifier SUBTYPE OF ( unary_expression ); name : STRING; ref : dictionary_instance; parameters : OPTIONAL LIST OF expression; END_ENTITY; ENTITY attribute_identifier SUBTYPE OF ( identifier ); selfInstance : generic_instance; END_ENTITY; ENTITY self_identifier SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY uniqueness_rule_attribute_identifier SUBTYPE OF ( identifier ); group_ref_name : OPTIONAL STRING; SELF\identifier.ref : attribute; END_ENTITY; ENTITY missing_value SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY redefined_attribute_value SUBTYPE OF ( missing_value ); END_ENTITY; ENTITY implicitly_declared_identifier SUBTYPE OF ( identifier ); END_ENTITY; ENTITY interval SUBTYPE OF ( unary_expression ); expr : and_expression; END_ENTITY; ENTITY aggr_unary_expression ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY query_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : query_expression; END_ENTITY; ENTITY query_expression SUBTYPE OF ( aggr_unary_expression ); variable : query_variable; aggregate_source : expression; such_that : expression; END_ENTITY; ENTITY entity_instance_constructor SUBTYPE OF ( unary_expression ); decl : entity_definition_reference; parameters : LIST OF expression; END_ENTITY; ENTITY qualifier ABSTRACT SUPERTYPE SUBTYPE OF ( unary_expression ); END_ENTITY; ENTITY attribute_qualifier SUBTYPE OF ( qualifier ); attribute_name : STRING; END_ENTITY; ENTITY group_qualifier SUBTYPE OF ( qualifier ); group_name : STRING; END_ENTITY; ENTITY index_qualifier SUBTYPE OF ( qualifier ); END_ENTITY; ENTITY element_qualifier SUBTYPE OF ( index_qualifier ); index : expression; END_ENTITY; ENTITY range_qualifier SUBTYPE OF ( index_qualifier ); index1 : expression; index2 : expression; END_ENTITY; ENTITY numeric_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY logical_literal ABSTRACT SUPERTYPE SUBTYPE OF ( literal ); END_ENTITY; ENTITY true_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY false_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY unknown_constant SUBTYPE OF ( logical_literal ); END_ENTITY; ENTITY integer_literal SUBTYPE OF ( numeric_literal ); val : INTEGER; END_ENTITY; ENTITY real_literal SUBTYPE OF ( numeric_literal ); val : REAL; END_ENTITY; ENTITY pi_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 3.14159; END_ENTITY; ENTITY e_constant SUBTYPE OF ( real_literal ); DERIVE SELF\real_literal.val : REAL := 2.71828; END_ENTITY; ENTITY string_literal SUBTYPE OF ( literal ); val : STRING; END_ENTITY; ENTITY binary_literal SUBTYPE OF ( literal ); val : BINARY; END_ENTITY; ENTITY native_expression SUBTYPE OF ( expression ); source : native_algorithm; END_ENTITY; ENTITY escaped_expression SUBTYPE OF ( expression ); expr : expression; END_ENTITY; END_SCHEMA; SCHEMA Platypus_statements_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY assignable SUBTYPE OF ( dictionary_instance ); head : identifier; qualifiers : LIST OF qualifier; END_ENTITY; ENTITY statement ABSTRACT SUPERTYPE SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY null_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY native_statement SUBTYPE OF ( statement ); source : native_algorithm; END_ENTITY; ENTITY alias_statement_variable SUBTYPE OF ( dictionary_instance ); alias_ident : STRING; ref : assignable; SELF\entity_instance.owner : alias_statement; END_ENTITY; ENTITY alias_statement SUBTYPE OF ( statement ); variable : alias_statement_variable; statements : LIST OF statement; END_ENTITY; ENTITY assignment_statement SUBTYPE OF ( statement ); left : assignable; right_expr : expression; END_ENTITY; ENTITY case_statement SUBTYPE OF ( statement ); selector : expression; case_actions : LIST OF case_action; case_otherwise : OPTIONAL statement; END_ENTITY; ENTITY case_action SUBTYPE OF ( dictionary_instance ); labels : LIST OF expression; action : statement; END_ENTITY; ENTITY compound_statement SUBTYPE OF ( statement ); statements : LIST OF statement; END_ENTITY; ENTITY escape_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY if_statement SUBTYPE OF ( statement ); selector : expression; then_statements : LIST OF statement; else_statements : OPTIONAL LIST OF statement; END_ENTITY; ENTITY repeat_statement SUBTYPE OF ( statement ); incr_control : OPTIONAL increment_control; until_control : OPTIONAL expression; while_control : OPTIONAL expression; statements : LIST OF statement; END_ENTITY; ENTITY increment_control_variable SUBTYPE OF ( dictionary_instance ); variable_id : STRING; SELF\entity_instance.owner : increment_control; END_ENTITY; ENTITY increment_control SUBTYPE OF ( dictionary_instance ); variable : increment_control_variable; first : expression; last : expression; step : OPTIONAL expression; SELF\entity_instance.owner : repeat_statement; END_ENTITY; ENTITY return_statement SUBTYPE OF ( statement ); returned : OPTIONAL expression; END_ENTITY; ENTITY procedure_call_statement SUBTYPE OF ( statement ); call : identifier; END_ENTITY; ENTITY skip_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY output_statement SUBTYPE OF ( statement ); output : expression; END_ENTITY; ENTITY splitmark_statement SUBTYPE OF ( statement ); filename : expression; END_ENTITY; ENTITY end_splitmark_statement SUBTYPE OF ( statement ); END_ENTITY; ENTITY anonymous_variable SUBTYPE OF ( dictionary_instance ); domain : parameter_type; END_ENTITY; END_SCHEMA; SCHEMA Platypus_aggregate_data_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; ENTITY aggregate_data ABSTRACT SUPERTYPE OF ( ONEOF ( aggregate_instance, aggregate_initializer ) ) SUBTYPE OF ( expression ); END_ENTITY; ENTITY aggregate_initializer SUBTYPE OF ( aggregate_data ); contents : LIST OF aggregate_initializer_element; END_ENTITY; ENTITY aggregate_initializer_element SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : aggregate_initializer; val : primitive; repetition : OPTIONAL expression; END_ENTITY; ENTITY aggregate_instance ABSTRACT SUPERTYPE OF ( ONEOF ( array_instance, variable_size_aggregation_instance ) ) SUBTYPE OF ( aggregate_data ); lower_bound : integer_literal; upper_bound : integer_literal; END_ENTITY; ENTITY array_instance SUBTYPE OF ( aggregate_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY variable_size_aggregation_instance ABSTRACT SUPERTYPE OF ( ONEOF ( set_instance, bag_instance, list_instance ) ) SUBTYPE OF ( aggregate_instance ); END_ENTITY; ENTITY list_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : LIST OF primitive; END_ENTITY; ENTITY bag_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : BAG OF primitive; END_ENTITY; ENTITY set_instance SUBTYPE OF ( variable_size_aggregation_instance ); contents : SET OF primitive; END_ENTITY; END_SCHEMA; SCHEMA Platypus_population_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_dictionary_schema; ENTITY instance_scope SUBTYPE OF ( session_instance ); owned : LIST [ 1 : ? ] OF entity_instance; export_list : LIST [ 0 : ? ] OF entity_instance; END_ENTITY; ENTITY application_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; persistent_label : STRING; END_ENTITY; ENTITY generic_instance ABSTRACT SUPERTYPE SUBTYPE OF ( application_instance ); instance_scope : OPTIONAL instance_scope; END_ENTITY; ENTITY internal_representation SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; END_ENTITY; ENTITY external_representation SUBTYPE OF ( generic_instance ); records : LIST OF simple_record; END_ENTITY; ENTITY group_representation ABSTRACT SUPERTYPE SUBTYPE OF ( generic_instance ); definition : entity_definition_reference; instRef : generic_instance; END_ENTITY; ENTITY external_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY internal_group_representation SUBTYPE OF ( group_representation ); END_ENTITY; ENTITY user_defined_application_instance SUBTYPE OF ( application_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY simple_record SUBTYPE OF ( entity_instance ); definition : entity_definition_reference; parameters : LIST OF primitive; SELF\entity_instance.owner : generic_instance; END_ENTITY; ENTITY header_instance ABSTRACT SUPERTYPE SUBTYPE OF ( entity_instance ); owning_model : model_contents; END_ENTITY; ENTITY user_defined_header_instance SUBTYPE OF ( header_instance ); name : STRING; parameters : LIST OF primitive; END_ENTITY; ENTITY file_description SUBTYPE OF ( header_instance ); description : LIST [ 1 : ? ] OF STRING ( 256 ); implementation_level : STRING ( 256 ); END_ENTITY; ENTITY file_name SUBTYPE OF ( header_instance ); name : STRING ( 256 ); time_stamp : STRING ( 256 ); author : LIST [ 1 : ? ] OF STRING ( 256 ); organization : LIST [ 1 : ? ] OF STRING ( 256 ); preprocessor_version : STRING ( 256 ); originating_system : STRING ( 256 ); authorisation : STRING ( 256 ); END_ENTITY; ENTITY file_schema SUBTYPE OF ( header_instance ); schema_identifiers : LIST [ 1 : ? ] OF schema_name; END_ENTITY; END_SCHEMA; SCHEMA Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_dictionary_schema; ENTITY model_contents SUBTYPE OF ( session_instance ); SELF\entity_instance.owner : schema_instance; INVERSE instances : SET [ 0 : ? ] OF application_instance FOR owning_model; END_ENTITY; ENTITY schema_instance SUBTYPE OF ( session_instance ); name : STRING; associated_models : LIST [ 0 : ? ] OF model_contents; schemata : LIST [ 0 : ? ] OF schema_definition; DERIVE accepted : entity_instance := SELF.accept_schema_instance; END_ENTITY; END_SCHEMA; SCHEMA Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_statements_schema; USE FROM Platypus_population_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_aggregate_data_schema; TYPE constructed_type = SELECT ( enumeration_type, select_type ); END_TYPE; TYPE type_or_rule = SELECT ( named_type, global_rule ); END_TYPE; TYPE base_type = SELECT ( simple_type, aggregation_type, named_type_reference ); END_TYPE; TYPE underlying_type = SELECT ( simple_type, aggregation_type, named_type_reference, constructed_type ); END_TYPE; TYPE parameter_type = SELECT ( simple_type, aggregate_type, aggregate_initializer_domain, named_type_reference ); END_TYPE; TYPE declaration = SELECT ( named_type, global_rule, constant_definition, procedure_declaration ); END_TYPE; TYPE time_stamp = STRING ( 256 ); END_TYPE; TYPE primitive = expression; END_TYPE; TYPE schema_name = STRING; END_TYPE; TYPE context_owner = SELECT ( context_definition, schema_instance ); END_TYPE; TYPE inter_schema_link = ENUMERATION OF ( used, referenced ); END_TYPE; ENTITY entity_instance ABSTRACT SUPERTYPE; owner : OPTIONAL entity_instance; END_ENTITY; ENTITY sdai_instance ABSTRACT SUPERTYPE OF ( ONEOF ( dictionary_instance, session_instance ) ) SUBTYPE OF ( entity_instance ); END_ENTITY; ENTITY dictionary_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); DERIVE handled : dictionary_instance := SELF; END_ENTITY; ENTITY session_instance ABSTRACT SUPERTYPE SUBTYPE OF ( sdai_instance ); change_date : OPTIONAL time_stamp; validation_date : time_stamp; validation_result : LOGICAL; END_ENTITY; ENTITY domain_equivalent_item SUBTYPE OF ( dictionary_instance ); name : STRING; external_item_id : STRING; native_item : declaration; END_ENTITY; ENTITY context_definition ABSTRACT SUPERTYPE OF ( ONEOF ( schema_definition, statements_container ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; constants : LIST OF constant_definition; types : LIST OF defined_type; entities : LIST OF entity_definition; algorithmes : LIST OF algorithm_declaration; SELF\entity_instance.owner : OPTIONAL context_owner; END_ENTITY; ENTITY statements_container ABSTRACT SUPERTYPE SUBTYPE OF ( context_definition ); locals : LIST OF local_variable; statements : LIST OF statement; END_ENTITY; ENTITY global_rule SUBTYPE OF ( statements_container ); for_entities : LIST [ 1 : ? ] OF entity_instances_set; where_rules : LIST [ 1 : ? ] OF where_rule; SELF\context_definition.owner : schema_definition; DERIVE accepted : entity_instance := SELF.accept_global_rule; END_ENTITY; ENTITY external_schema SUBTYPE OF ( dictionary_instance ); name : schema_name; SELF\entity_instance.owner : schema_definition; END_ENTITY; ENTITY include_schema SUBTYPE OF ( external_schema ); native_schema : schema_definition; explicitly_imported_items : LIST OF domain_equivalent_item; implicitly_imported_items : LIST OF domain_equivalent_item; END_ENTITY; ENTITY used_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY referenced_schema SUBTYPE OF ( include_schema ); END_ENTITY; ENTITY external_meta_schema SUBTYPE OF ( external_schema ); END_ENTITY; ENTITY algorithm_declaration ABSTRACT SUPERTYPE SUBTYPE OF ( statements_container ); formal_parameters : LIST OF parameter_definition; END_ENTITY; ENTITY native_code SUBTYPE OF ( dictionary_instance ); language_signature : STRING; code : STRING; END_ENTITY; ENTITY native_algorithm SUBTYPE OF ( dictionary_instance ); implementations : LIST OF native_code; END_ENTITY; ENTITY procedure_declaration SUBTYPE OF ( algorithm_declaration ); DERIVE accepted : entity_instance := SELF.accept_procedure_declaration; END_ENTITY; ENTITY function_declaration SUBTYPE OF ( algorithm_declaration ); return_type : parameter_type; DERIVE accepted : entity_instance := SELF.accept_function_declaration; END_ENTITY; ENTITY bound ABSTRACT SUPERTYPE OF ( ONEOF ( integer_bound, population_dependent_bound ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY integer_bound SUBTYPE OF ( bound ); bound_value : INTEGER; END_ENTITY; ENTITY population_dependent_bound SUBTYPE OF ( bound ); bound_value : expression; END_ENTITY; ENTITY enumeration_type SUBTYPE OF ( dictionary_instance ); elements : LIST [ 1 : ? ] OF UNIQUE STRING; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_enumeration_type; END_ENTITY; ENTITY named_type ABSTRACT SUPERTYPE OF ( ONEOF ( entity_definition, defined_type ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; where_rules : LIST [ 0 : ? ] OF where_rule; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY dictionary_instance_reference SUBTYPE OF ( dictionary_instance ); ref : dictionary_instance; name : STRING; DERIVE SELF\dictionary_instance.handled : dictionary_instance := SELF.ref; END_ENTITY; ENTITY named_type_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : named_type; DERIVE accepted : entity_instance := SELF.accept_named_type_reference; END_ENTITY; ENTITY attribute_reference SUBTYPE OF ( dictionary_instance_reference ); SELF\dictionary_instance_reference.ref : attribute; entity_ref : entity_definition_reference; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_attribute_reference; END_ENTITY; ENTITY entity_definition_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : entity_definition; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_entity_definition_reference; END_ENTITY; ENTITY defined_type_reference SUBTYPE OF ( named_type_reference ); SELF\named_type_reference.ref : defined_type; DERIVE SELF\named_type_reference.accepted : entity_instance := SELF.accept_defined_type_reference; END_ENTITY; ENTITY where_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; SELF\entity_instance.owner : type_or_rule; where_value : expression; END_ENTITY; ENTITY select_type SUBTYPE OF ( dictionary_instance ); selections : LIST [ 1 : ? ] OF named_type_reference; SELF\entity_instance.owner : defined_type; DERIVE accepted : entity_instance := SELF.accept_select_type; END_ENTITY; ENTITY defined_type SUBTYPE OF ( named_type ); domain : underlying_type; DERIVE accepted : entity_instance := SELF.accept_defined_type; END_ENTITY; ENTITY entity_definition SUBTYPE OF ( named_type ); supertype_constraint : OPTIONAL supertype_constraint; supertypes : LIST OF UNIQUE entity_definition_reference; attributes : LIST OF UNIQUE attribute; uniqueness_rules : LIST OF UNIQUE uniqueness_rule; complex : BOOLEAN; instantiable : BOOLEAN; independent : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_entity_definition; END_ENTITY; ENTITY supertype_constraint SUBTYPE OF ( dictionary_instance ); constrained : entity_definition_reference; expr : OPTIONAL supertype_expression; END_ENTITY; ENTITY supertype_expression ABSTRACT SUPERTYPE OF ( ONEOF ( sub_entity_ref_expression, binary_supertype_expression, oneof_supertype_expression ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY sub_entity_ref_expression SUBTYPE OF ( supertype_expression ); entity_ref : entity_definition_reference; END_ENTITY; ENTITY binary_supertype_expression SUBTYPE OF ( supertype_expression ); parenthesis : OPTIONAL BOOLEAN; left_expr : supertype_expression; right_expr : supertype_expression; END_ENTITY; ENTITY andor_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY and_supertype SUBTYPE OF ( binary_supertype_expression ); END_ENTITY; ENTITY oneof_supertype_expression SUBTYPE OF ( supertype_expression ); expr_list : LIST OF supertype_expression; END_ENTITY; ENTITY uniqueness_rule SUBTYPE OF ( dictionary_instance ); label : OPTIONAL STRING; attributes : LIST [ 1 : ? ] OF UNIQUE uniqueness_rule_attribute_identifier; SELF\entity_instance.owner : entity_definition; END_ENTITY; ENTITY attribute ABSTRACT SUPERTYPE OF ( ONEOF ( derived_attribute, explicit_attribute, inverse_attribute ) ) SUBTYPE OF ( dictionary_instance ); name : STRING; SELF\entity_instance.owner : entity_definition; domain : base_type; redeclaring : OPTIONAL attribute_reference; END_ENTITY; ENTITY aggregate_initializer_domain SUBTYPE OF ( dictionary_instance ); types : LIST [ 1 : ? ] OF parameter_type; END_ENTITY; ENTITY aggregate_type ABSTRACT SUPERTYPE OF ( ONEOF ( aggregation_type, general_aggregate_type ) ) SUBTYPE OF ( dictionary_instance ); element_type : parameter_type; END_ENTITY; ENTITY general_aggregate_type SUBTYPE OF ( aggregate_type ); type_label : OPTIONAL STRING; END_ENTITY; ENTITY aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( variable_size_aggregation_type, array_type ) ) SUBTYPE OF ( aggregate_type ); lower_bound : OPTIONAL bound; upper_bound : OPTIONAL bound; is_general_type : BOOLEAN; END_ENTITY; ENTITY array_type SUBTYPE OF ( aggregation_type ); unique_flag : BOOLEAN; optional_flag : BOOLEAN; SELF\aggregation_type.lower_bound : bound; SELF\aggregation_type.upper_bound : bound; DERIVE accepted : entity_instance := SELF.accept_array_type; END_ENTITY; ENTITY variable_size_aggregation_type ABSTRACT SUPERTYPE OF ( ONEOF ( set_type, bag_type, list_type ) ) SUBTYPE OF ( aggregation_type ); END_ENTITY; ENTITY list_type SUBTYPE OF ( variable_size_aggregation_type ); unique_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_list_type; END_ENTITY; ENTITY bag_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_bag_type; END_ENTITY; ENTITY set_type SUBTYPE OF ( variable_size_aggregation_type ); DERIVE accepted : entity_instance := SELF.accept_set_type; END_ENTITY; ENTITY simple_type ABSTRACT SUPERTYPE OF ( ONEOF ( string_type, binary_type, logical_type, number_type ) ) SUBTYPE OF ( dictionary_instance ); END_ENTITY; ENTITY string_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_string_type; END_ENTITY; ENTITY binary_type SUBTYPE OF ( simple_type ); width : OPTIONAL bound; fixed_width : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_binary_type; END_ENTITY; ENTITY number_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_number_type; END_ENTITY; ENTITY real_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_real_type; END_ENTITY; ENTITY integer_type SUBTYPE OF ( number_type ); precision : OPTIONAL bound; DERIVE SELF\number_type.accepted : entity_instance := SELF.accept_integer_type; END_ENTITY; ENTITY logical_type SUBTYPE OF ( simple_type ); DERIVE accepted : entity_instance := SELF.accept_logical_type; END_ENTITY; ENTITY boolean_type SUBTYPE OF ( logical_type ); DERIVE SELF\logical_type.accepted : entity_instance := SELF.accept_boolean_type; END_ENTITY; ENTITY constant_definition SUBTYPE OF ( dictionary_instance ); name : STRING; domain : base_type; initializer : expression; SELF\entity_instance.owner : context_definition; END_ENTITY; ENTITY local_variable SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : statements_container; name : STRING; domain : parameter_type; initializer : OPTIONAL expression; END_ENTITY; ENTITY parameter_definition SUBTYPE OF ( dictionary_instance ); SELF\entity_instance.owner : algorithm_declaration; name : STRING; by_copy : BOOLEAN; domain : parameter_type; END_ENTITY; ENTITY generic_type SUBTYPE OF ( dictionary_instance ); type_label : OPTIONAL STRING; DERIVE accepted : entity_instance := SELF.accept_generic_type; END_ENTITY; ENTITY remark ABSTRACT SUPERTYPE OF ( ONEOF ( tail_remark, embedded_remark ) ) SUBTYPE OF ( entity_instance ); text : STRING; END_ENTITY; ENTITY tail_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY embedded_remark SUBTYPE OF ( remark ); END_ENTITY; ENTITY remark_reference SUBTYPE OF ( dictionary_instance ); prefix : STRING; suffix : OPTIONAL STRING; inside : dictionary_instance_reference; referenced : dictionary_instance_reference; remark : remark; END_ENTITY; ENTITY meta_concept_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY derived_attribute SUBTYPE OF ( attribute ); assign : expression; DERIVE accepted : entity_instance := SELF.accept_derived_attribute; END_ENTITY; ENTITY explicit_attribute SUBTYPE OF ( attribute ); optional_flag : BOOLEAN; DERIVE accepted : entity_instance := SELF.accept_explicit_attribute; END_ENTITY; ENTITY inverse_attribute SUBTYPE OF ( attribute ); inverted_attr : attribute_reference; min_cardinality : OPTIONAL bound; max_cardinality : OPTIONAL bound; duplicates : BOOLEAN; DERIVE SELF\attribute.domain : entity_definition_reference := inverted_attr.entity_ref; accepted : entity_instance := SELF.accept_inverse_attribute; END_ENTITY; ENTITY meta_mapping_rule SUBTYPE OF ( dictionary_instance ); condition : STRING; expression : STRING; END_ENTITY; ENTITY meta_mapping_definition SUBTYPE OF ( dictionary_instance ); definition : dictionary_instance; expression : STRING; END_ENTITY; ENTITY schema_definition SUBTYPE OF ( context_definition ); global_rules : LIST OF global_rule; interface : LIST OF external_schema; remark_references : LIST OF remark_reference; DERIVE accepted : entity_instance := SELF.accept_schema_definition; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating Platypus_Express_primitives ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/abs FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/acos FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/asin FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/atan FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/blength FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/cos FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/even FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/exists FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/exp FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/format FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/hibound FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/hiindex FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/length FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/lobound FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/log FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/log2 FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/log10 FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/loindex FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/odd FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/rolesof FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/sin FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/sizeof FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/sqrt FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/tan FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/typeof FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/usedin FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/value FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/value_in FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/value_unique FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/insert PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/remove PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; ----! ----Platypus: Adding platypus-meta-models: /platypus-meta/Platypus_Express_primitives/EXPRESS_builtins/nvl FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; ----! ----Platypus: Updating platypus-meta-models: /platypus-meta/Platypus_Express_primitives SCHEMA EXPRESS_builtins; FUNCTION ABS ( P : NUMBER ) : NUMBER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (v class val: (v pltNativeValue) abs)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v abs)] #*); END_FUNCTION; FUNCTION ACOS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcCos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcCos)] #*); END_FUNCTION; FUNCTION ASIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcSin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v arcSin)] #*); END_FUNCTION; FUNCTION ATAN ( V1 : NUMBER; V2 : NUMBER ) : REAL; (*# | v | (v := self v1) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) arcTan)] #*) (*# | v | ^ (v := self v1) ifNotNil: [self return: (v arcTan)] #*); END_FUNCTION; FUNCTION BLENGTH ( P : BINARY ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION COS ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) cos)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v cos)] #*); END_FUNCTION; FUNCTION EVEN ( P : NUMBER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) even)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v even)] #*); END_FUNCTION; FUNCTION EXISTS ( P : GENERIC ) : BOOLEAN; (*# (self p) ifMissing: [^ self return: (PltLogicalLiteral val: false) ] ifNotMissing: [^ self return: (PltLogicalLiteral val: true) ] #*) (*# | v | ^ (self return: self p notNil) #*); END_FUNCTION; FUNCTION EXP ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) exp)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v exp)] #*); END_FUNCTION; FUNCTION FORMAT ( PN : NUMBER; PF : STRING ) : STRING; (*# | n f formatted | (n := self pN) ifMissing: [^ self return: n] ifNotMissing: [(f := self pF) ifMissing: [^ self return: f] ifNotMissing: [formatted := PlatypusExpressBuiltinFormatFormatter format: n pltNativeValue sourceFormat: f pltNativeValue trimBoth. ^ self return: (PltStringLiteral val: formatted)]] #*) (*# | n f formatted | (n := self pN) ifNil: [^ self return: n] ifNotNil: [(f := self pF) ifNil: [^ self return: f] ifNotNil: [formatted := PlatypusExpressBuiltinFormatFormatter format: n sourceFormat: f trimBoth. ^ self return: formatted]] #*); END_FUNCTION; FUNCTION HIBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: v upperBound] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION HIINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v upperBound)] ifFalse: [^ self return: (PltIntegerLiteral val: ( v pltNativeValue ) size)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v upperBound)] #*); END_FUNCTION; FUNCTION LENGTH ( P : STRING ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v size)] #*); END_FUNCTION; FUNCTION LOBOUND ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [ (v := v lowerBound) ifMissing: [^ self return: (PltIntegerLiteral val: 0)] ifNotMissing: [^ self return: v]]. #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION LOG ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) ln)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v ln)] #*); END_FUNCTION; FUNCTION LOG2 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log: 2)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log: 2)] #*); END_FUNCTION; FUNCTION LOG10 ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) log)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v log)] #*); END_FUNCTION; FUNCTION LOINDEX ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [((v := v pltNativeValue) isPltArray) ifTrue: [^ self return: (v lowerBound)] ifFalse: [^ self return: (PltIntegerLiteral val: 1)]] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: (v lowerBound)] #*); END_FUNCTION; FUNCTION ODD ( P : INTEGER ) : BOOLEAN; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltLogicalLiteral val: (v pltNativeValue) odd)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v odd] #*); END_FUNCTION; FUNCTION ROLESOF ( P : GENERIC ) : SET OF STRING; (*# | arg result tmpResult | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [result := PltSetInstance new. tmpResult := Set new. self dataDo: [:d | d rolesOf: arg in: tmpResult]. result contents: tmpResult. ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ result := Set new. self dataDo: [:d | d rolesOf: arg in: result]. ^ self return: result] #*); END_FUNCTION; FUNCTION SIN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sin)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sin] #*); END_FUNCTION; FUNCTION SIZEOF ( P : AGGREGATE OF GENERIC ) : INTEGER; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltIntegerLiteral val: (v pltNativeValue) size)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v size] #*); END_FUNCTION; FUNCTION SQRT ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) sqrt)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v sqrt] #*); END_FUNCTION; FUNCTION TAN ( P : NUMBER ) : REAL; (*# | v | (v := self p) ifMissing: [^ self return: v] ifNotMissing: [^ self return: (PltRealLiteral val: (v pltNativeValue) tan)] #*) (*# | v | ^ (v := self p) ifNotNil: [self return: v tan] #*); END_FUNCTION; FUNCTION TYPEOF ( P : GENERIC ) : SET OF STRING; (*# | arg result | (arg := self p) ifMissing: [^ self return: arg] ifNotMissing: [ result := PltSetInstance new. result contents: (PlatypusExpressTypeOfBuilder typeOfSetFor: arg computedDomain). ^ self return: result] #*) (*# | arg result | (arg := self p) ifNil: [^ self return: arg] ifNotNil: [ (arg isKindOf: PlatypusComplexInstance) ifTrue: [result := OrderedCollection new. arg records do: [:rec | result addAll: (PlatypusExpressTypeOfBuilder typeOfSetFor: rec class platypusMetaData)]] ifFalse: [result := (PlatypusExpressTypeOfBuilder typeOfSetFor: arg class platypusMetaData)]. ^ self return: (result collect: [:r | r val])] #*); END_FUNCTION; FUNCTION USEDIN ( T : GENERIC; R : STRING ) : BAG OF GENERIC; (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := PltBagInstance new. ent ifMissing: [^ self return: ent] ifNotMissing: [ role ifMissing: [^ self return: role] ifNotMissing: [ tmpResult := Bag new. role pltNativeValue ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role pltNativeValue findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: tmpResult]. result contents: tmpResult. ^ self return: result]] #*) (*# | result tmpResult ent role schemaEntityAttribute schemaKey entityKey attributeKey | ent := self t. role := self r. result := Bag new. ent ifNil: [^ self return: ent] ifNotNil: [ role ifNil: [^ self return: role] ifNotNil: [ role ifEmpty: [schemaKey := ''. entityKey := ''. attributeKey := ''] ifNotEmpty: [:arg | schemaEntityAttribute := role findTokens: $.. schemaKey := schemaEntityAttribute first asUppercase. entityKey := schemaEntityAttribute second asUppercase. attributeKey := schemaEntityAttribute third asUppercase]. self dataDo: [:d | d rolesValue: ent roleSchema: schemaKey roleEntity: entityKey roleAttribute: attributeKey in: result]. ^ self return: result]] #*); END_FUNCTION; FUNCTION VALUE ( V : STRING ) : NUMBER; (*# | param nb result | param := self v. param pltNativeValue isString ifTrue: [[nb := param pltNativeValue asNumber. result := nb isInteger ifTrue: [PltIntegerLiteral new] ifFalse: [PltRealLiteral new]. result val: nb] on: Error do: [result := PltMissingValue new]] ifFalse: [result := PltMissingValue new]. ^ self return: result #*) (*# | param nb result | (param := self v) isString ifTrue: [[result := param asNumber] on: Error do: [result := nil]] ifFalse: [result := nil]. ^ self return: result #*); END_FUNCTION; FUNCTION VALUE_IN ( C : AGGREGATE OF GENERIC : gen; V : GENERIC : gen ) : LOGICAL; (*# self signal: 'Value_in primitive is not implemented'. #*) (*# self signal: 'VALUE_IN primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC ) : LOGICAL; (*# self signal: 'Value_unique primitive is not implemented'. #*) (*# self signal: 'VALUE_UNIQUE primitive is not implemented'. #*); RETURN ( ? ); END_FUNCTION; PROCEDURE INSERT ( VAR PL : LIST OF GENERIC : gen; PE : GENERIC : gen; PP : INTEGER ); (*# | l e p | l := self pL. e := self pE. p := self pP pltNativeValue. l pltAdd: e beforeIndex: p #*) (*# | l e p | l := self pL. e := self pE. p := self pP. p <= 0 ifTrue: [l addFirst: e] ifFalse: [p >= l size ifTrue: [l addLast: e] ifFalse: [l add: e afterIndex: p]] #*); END_PROCEDURE; PROCEDURE REMOVE ( VAR PL : LIST OF GENERIC : gen; PP : INTEGER ); (*# | l p | l := self pL. p := self pP pltNativeValue. l removeAt: p #*) (*# | l p | l := self pL. p := self pP. l removeAt: p #*); END_PROCEDURE; FUNCTION NVL ( P : GENERIC : gen1; substitute : GENERIC : gen1 ) : GENERIC : gen1; (*# | v | (v := self p) ifMissing: [^ self return: (self substitute)] ifNotMissing: [^ self return: (v)] #*) (*# | v | ^ (v := self p) ifNil: [self return: self substitute] ifNotNil: [self return: v] #*); END_FUNCTION; END_SCHEMA; ----! "PlatypusPostLoad"! ----SNAPSHOT----2014-03-13T09:57:45.830849+01:00 Pharo.image priorSource: 35520853! ----Platypus: Updating platypus-toolbox ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : Expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF ( with_inherited ) THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF ( EXISTS ( attr_kind ) ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF ( NOT with_redeclaring ) THEN attributes := QUERY ( a <* attributes | NOT ( EXISTS ( a.redeclaring ) ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( ( EXISTS ( curri.redeclaring ) ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/expressionValueToString FUNCTION expressionValueToString ( arg : Expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/typeof_as_string FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/schema_definition_of FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/schema_instance_of FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/remarks_for FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/clean_remark_text_of FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/root_entity_list FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/subtypes_of FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/attribute_named_from FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/has_attribute_named FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/inherited_attribute_named_from FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/has_inherited_attribute_named FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/query_attributes FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF ( with_inherited ) THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF ( EXISTS ( attr_kind ) ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF ( NOT with_redeclaring ) THEN attributes := QUERY ( a <* attributes | NOT ( EXISTS ( a.redeclaring ) ) ); END_IF; RETURN ( attributes ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/attribute_redeclared_by FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( ( EXISTS ( curri.redeclaring ) ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/all_supertypes_of FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/local_root_supertype_of FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/inherits_from_entity_named FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/inherited_attributes FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/inherited_explicit_attributes FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_dictionary_queries/derive_attribute_result FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*#| r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*#^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix, suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old, new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/string_ends_with FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/string_replace FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*#| r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/SmalltalkCodeOf FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*#^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/StringAggregateConcatSeparatedBy FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/LinesFromString FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/SetToAggregate FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/SetToList FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/ListToSet FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/AggregateToSet FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/capitalize FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/lowerize FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/upperize FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/PrintLn PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/Print PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/ToString FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/Halt PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/clrscr PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/numbered_name FUNCTION numbered_name ( nb : INTEGER; prefix, suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/allModelInstances FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/instance_become PROCEDURE instance_become ( VAR old, new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/explore PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/inspect PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/TestExpr PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/runAll0ArgProcsOf PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/runAll0ArgProcsOf/doIt PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/ReadStepFile PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/WriteFile PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /platypus-toolbox/express_toolsbox_functions/askForExpressDictionaryMetaData FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; ----! ----Platypus: Updating cheddar-dev: /platypus-toolbox SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : Expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF ( with_inherited ) THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF ( EXISTS ( attr_kind ) ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF ( NOT with_redeclaring ) THEN attributes := QUERY ( a <* attributes | NOT ( EXISTS ( a.redeclaring ) ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( ( EXISTS ( curri.redeclaring ) ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION;END_SCHEMA;SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*#| r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*#^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix, suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old, new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION;END_SCHEMA; ----! !PlatypusCodeMorph methodsFor: 'code updating' stamp: 'AlainPlantec 3/13/2014 10:02' prior: 108223665! hasUnacceptedEdits: aBoolean ^ contentsMorph ifNotNil: [ contentsMorph hasUnacceptedEdits: aBoolean] ifNil: [ false ]! ! StringHolder subclass: #PlatypusCodeMorph instanceVariableNames: 'mainWindow mainPane contentsMorph codeRow sourceHandler hasUnacceptedEdits' classVariableNames: 'InitialExtent' category: 'SqPlatypus-HW-CodeHolder'! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:05' prior: 108867354! hasUnacceptedEdits: aBoolean hasUnacceptedEdits := aBoolean! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:06'! hasUnacceptedEdits ^ hasUnacceptedEdits ifNil: [ hasUnacceptedEdits := false ]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:33' prior: 108867796! hasUnacceptedEdits: aBoolean self halt. hasUnacceptedEdits := aBoolean! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:33' prior: 108868124! hasUnacceptedEdits: aBoolean hasUnacceptedEdits := aBoolean! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:33' prior: 108867942! hasUnacceptedEdits self halt. ^ hasUnacceptedEdits ifNil: [ hasUnacceptedEdits := false ]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:34' prior: 108868461! hasUnacceptedEdits ^ hasUnacceptedEdits ifNil: [ hasUnacceptedEdits := false ]! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:35' prior: 108868298! hasUnacceptedEdits: aBoolean hasUnacceptedEdits := aBoolean. self changed! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:35' prior: 108868836! hasUnacceptedEdits: aBoolean hasUnacceptedEdits := aBoolean. self changed: #hasUnacceptedEdits! ! !PlatypusCodeMorph methodsFor: 'accessing' stamp: 'AlainPlantec 3/13/2014 10:36' prior: 108869014! hasUnacceptedEdits: aBoolean self halt. hasUnacceptedEdits := aBoolean. self changed: #hasUnacceptedEdits! ! PlatypusCodeMorph removeSelector: #hasUnacceptedEdits! PlatypusCodeMorph removeSelector: #hasUnacceptedEdits:! StringHolder subclass: #PlatypusCodeMorph instanceVariableNames: 'mainWindow mainPane contentsMorph codeRow sourceHandler' classVariableNames: 'InitialExtent' category: 'SqPlatypus-HW-CodeHolder'! ----Platypus: Updating cheddar-dev: /platypus-toolbox SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : Expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF ( with_inherited ) THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF ( EXISTS ( attr_kind ) ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF ( NOT with_redeclaring ) THEN attributes := QUERY ( a <* attributes | NOT ( EXISTS ( a.redeclaring ) ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( ( EXISTS ( curri.redeclaring ) ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*#| r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*#^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix, suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old, new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /platypus-toolbox SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : Expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF ( with_inherited ) THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF ( EXISTS ( attr_kind ) ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF ( NOT with_redeclaring ) THEN attributes := QUERY ( a <* attributes | NOT ( EXISTS ( a.redeclaring ) ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( ( EXISTS ( curri.redeclaring ) ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*#| r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*#^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix, suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old, new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; END_SCHEMA; ----! ----Platypus: Updating express2cheddar ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade SCHEMA express2cheddar_facade; USE FROM Package; USE FROM record_and_class; USE FROM discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM cheddar_domains; USE FROM cheddar_dtd; CONSTANT source_licence : STRING := '' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n' + '-- This source file was automatically generated by Platypus\n' + '-- see http://dossen.univ-brest.fr/apl\n' + '-- \n' + '-- Any modification of this file will be lost. \n' + '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n' + '-- model and its meta-model. \n' + '------------------------------------------------------------------------------\n \n' + '------------------------------------------------------------------------------\n' + '-- Cheddar is a free real time scheduling tool.\n' + '-- This program provides services to automatically check temporal constraints\n' + '-- of real time tasks.\n' + '--\n' + '-- Copyright (C) 2002-2009 Frank Singhoff\n' + '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n' + '--\n' + '-- This program is free software; you can redistribute it and/or modify\n' + '-- it under the terms of the GNU General Public License as published by\n' + '-- the Free Software Foundation; either version 2 of the License, or\n' + '-- (at your option) any later version.\n' + '--\n' + '-- This program is distributed in the hope that it will be useful,\n' + '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + '-- GNU General Public License for more details.\n' + '--\n' + '-- You should have received a copy of the GNU General Public License\n' + '-- along with this program; if not, write to the Free Software\n' + '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n' + '--\n' + '--\n' + '-- Contact : cheddar@listes.univ-brest.fr\n' + '-- To post to this mailing list, you must be subscribed\n' + '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n' + '--\n' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n'; xml_id_name : STRING := 'cheddar_private_id'; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ADA_Package; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ADA_Package := all_ada_packages; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes; END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF ( NOT has_attribute_named ( curr, xml_id_name ) ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ADA_Entity := all_ada_entities; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/is_of_generated_concept_kind FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/all_ada_packages FUNCTION all_ada_packages : SET OF ADA_Package; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/ada_package_named FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ADA_Package := all_ada_packages; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/package_ada_classes FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/all_ada_classes FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/prepare_root_ada_classes PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes; END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF ( NOT has_attribute_named ( curr, xml_id_name ) ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/all_ada_records FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/ads_and_adb_code FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/main PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/all_ada_discriminated_types FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/add_xml_id_to_ada_class PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/package_records FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/package_discriminated_types FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/ada_entity_named FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ADA_Entity := all_ada_entities; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/all_ada_entities FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/express2cheddar_facade/dtds PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd SCHEMA cheddar_dtd; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM package; USE FROM discriminated_type; ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || record_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || ada_class_dtd_element; SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || discriminated_type_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages; root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || ada_class_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || record_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || discriminated_type_dtd_element ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := ( basic_ada_domain ( a.domain ) ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF ( EXISTS ( curr ) ) THEN IF ( NOT ( lowerize ( curr.domain.name ) IN names ) ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF ( NOT ( curr.domain IN decl_domain ) ) AND ( NOT ( curr IN not_declared ) ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages | tag IN p.xml_root_tags ) ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/dtd_element ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/composite_dtd_element ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/root_dtd_element ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/package_dtd_element ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/entity_dtd_element ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/ada_class_dtd_element ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/record_dtd_element ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/discriminated_type_dtd_element ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/attribute_dtd_element ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/domain_dtd_element ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/simple_domain_dtd_element ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/collection_dtd_element ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/record_ref_dtd_element ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || record_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/ada_class_ref_dtd_element ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || ada_class_dtd_element; SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/discriminated_type_ref_dtd_element ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || discriminated_type_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_root_dtd_code FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/root_dtds FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages; root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_root_sub_elements FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_package_attribute_dtd_elements FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_package_dtd_code FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_package_sub_elements FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || ada_class_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || record_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || discriminated_type_dtd_element ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_entity_dtd_code FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_attribute_dtd_list_from_attribute_list FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_entity_sub_elements FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_discriminated_type_code FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_discriminated_type_sub_elements FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_attribute_dtd_element FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := ( basic_ada_domain ( a.domain ) ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_domain_dtd_element FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/xml_packages FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/get_referenced_entity_domains FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF ( EXISTS ( curr ) ) THEN IF ( NOT ( lowerize ( curr.domain.name ) IN names ) ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/get_declared_entity_domains FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/compute_implicit_domains FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF ( NOT ( curr.domain IN decl_domain ) ) AND ( NOT ( curr IN not_declared ) ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/unknown_domain_dtd_element ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_dtd/xml_packages_with_tag FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages | tag IN p.xml_root_tags ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/ada_interface SCHEMA ada_interface; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF ( int.with_it ) THEN s := s + 'with ' + name + ';\n'; END_IF; IF ( int.use_it ) THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF ( NOT EXISTS ( from_pkg ) ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF ( EXISTS ( curr.suffix ) ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/ada_interface/ada_interface ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/ada_interface/ada_interface_path FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/ada_interface/ada_interface_declaration FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF ( int.with_it ) THEN s := s + 'with ' + name + ';\n'; END_IF; IF ( int.use_it ) THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/ada_interface/ada_interfaces_code FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF ( NOT EXISTS ( from_pkg ) ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF ( EXISTS ( curr.suffix ) ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/xml_io SCHEMA xml_io; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM discriminated_type; USE FROM ada_interface; USE FROM package; FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF ada_class := all_ada_records; alldts : LIST OF discriminated_type := all_ada_discriminated_types; interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF record := all_ada_records; allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types; END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/xml_io/xml_architecture_io_ads_package_code FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF ada_class := all_ada_records; alldts : LIST OF discriminated_type := all_ada_discriminated_types; interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/xml_io/xml_architecture_io_adb_package_code FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF record := all_ada_records; allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types; END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains SCHEMA cheddar_domains; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( 'standards_io', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF ( is_of_generated_concept_kind ( t ) ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF ( EXISTS ( a.max_idx ) ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ( ads ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ( basic_ada_domain ( SELF.ref ) ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := ( SELF ); accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; (* ? cheddar_law_type ? *) ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF ( EXISTS ( rt.lower_constant ) ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF ( EXISTS ( rt.upper_constant ) ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF ( domain.refed_by_pointer ) THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/pragma_convention ENTITY pragma_convention; convention : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_type ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/dependencies_of FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF ( is_of_generated_concept_kind ( t ) ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_defined_type ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/constrained_array_type ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/constrained_array_type_ads_code FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF ( EXISTS ( a.max_idx ) ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_defined_type_interfaces_list FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ( ads ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_entity_definition ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/unmapped_type_reference ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ( basic_ada_domain ( SELF.ref ) ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/unmapped_entity_definition ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/basic_ada_type_getter ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := ( SELF ); accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/basic_ada_domain FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_primitive_type ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_primitive_type ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_law_type ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_priority_range ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_natural_type ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_unbounded_string_type ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/cheddar_xml_id_type ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_boolean_type ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_real_type ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_double_type ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_integer_type ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_named_type_reference ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_record_reference ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_class_reference ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_primitive_class_reference ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_attribute_reference ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_array_type ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_list_type ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_set_type ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_bag_type ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/ada_enumeration ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/enumeration_ads_code FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/basic_ada_type_value_format ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/basic_ada_expression_value_string FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/enumeration_adb_code FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/range_type ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/range_type_ads_code FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF ( EXISTS ( rt.lower_constant ) ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF ( EXISTS ( rt.upper_constant ) ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/explicit_type_reference ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/in_scope_attribute ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/in_scope_attribute_init_code FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF ( domain.refed_by_pointer ) THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_domains/domain_interfaces_list FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_constants SCHEMA cheddar_constants; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM express_dictionary_queries; USE FROM express_toolsbox_functions; ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_constants/ada_constant ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_constants/do_comments_with FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_constants/ada_constant_ads_code FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/cheddar_constants/ada_constant_interfaces_list FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_domains; USE FROM discriminated_type; USE FROM ada_interface; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF ( with_private ) THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF ( is_named_object ( cip ) ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF ( is_named_object ( cip ) ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT ( EXISTS ( init ) ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF ( domain.handled.refed_by_pointer ) THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF ( EXISTS ( attr.redeclaring ) ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF ( has_attribute_named ( r, xml_id_name ) ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF ( domain.handled.refed_by_pointer ) THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF ( domain.handled.refed_by_pointer ) THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF ( is_generic_object ( domain.handled ) ) THEN (* code := '\tresult := result & XML_Ref_String (' + prefix + '.' + attr.name + ' );'; *) code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF ( EXISTS ( init ) ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF ( is_generic_object ( domain.handled ) ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; ELSE (* IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain.handled ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); code := '\n\t\tif To_String (To_Lower (Qname)) = "' + Lowerize ( element_domain.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.core := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; END_IF; *) END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/is_generic_object FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/is_named_object FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/dependencies_of_ada_entity FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_ads_code FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF ( with_private ) THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF ( is_named_object ( cip ) ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_adb_code FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF ( is_named_object ( cip ) ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_xml_writer_code FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_xml_writer_code FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_initialize_code FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_initialize FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT ( EXISTS ( init ) ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF ( domain.handled.refed_by_pointer ) THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/derived_attribute_initialize FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF ( EXISTS ( attr.redeclaring ) ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_typeof_code FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_copy_code FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_put_code FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_get_name_code FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_attributes_ads_code FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_interfaces_list FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF ( has_attribute_named ( r, xml_id_name ) ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/entity_definition_interfaces_list FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_ads_code FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF ( domain.handled.refed_by_pointer ) THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_initialize_code FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_adb_code FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_put_code FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_put FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF ( domain.handled.refed_by_pointer ) THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_xml_writer_code FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF ( is_generic_object ( domain.handled ) ) THEN (* code := '\tresult := result & XML_Ref_String (' + prefix + '.' + attr.name + ' );'; *) code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/cheddar_function_ptr ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_copy_code FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_class_xml_io_record_code FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_attributes_xml_io_record_code FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_xml_io_record_code FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/record_xml_io_record_code FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_xml_io_record_initialize_code FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_attributes_xml_io_record_initialize_code FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_xml_io_record_initialize_code FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF ( EXISTS ( init ) ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_xml_start_element_code FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_attributes_xml_start_element_code FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_xml_end_element_code FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/explicit_attribute_xml_start_element_code FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF ( is_generic_object ( domain.handled ) ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; ELSE (* IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain.handled ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); code := '\n\t\tif To_String (To_Lower (Qname)) = "' + Lowerize ( element_domain.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.core := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; END_IF; *) END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_xml_end_element_code FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/record_and_class/ada_entity_attributes_xml_end_element_code FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM cheddar_constants; USE FROM xml_io; ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ADA_Package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code; ELSE code := code + xml_architecture_io_adb_package_code; END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF ( NOT ( concept_in_list ( wl [ noi], r ) ) ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ads ) THEN (* contents := concept_list_local_dependencies ( p, concepts ); *) contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package_adb_code FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package_ads_code FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package_interface FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/all_packages_code FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ADA_Package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code; ELSE code := code + xml_architecture_io_adb_package_code; END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/concept_in_list FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/concept_list_local_dependencies FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF ( NOT ( concept_in_list ( wl [ noi], r ) ) ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package_concepts_list_code FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ads ) THEN (* contents := concept_list_local_dependencies ( p, concepts ); *) contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/ada_package_class_typeof_list FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/package_alias ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/generic_package_instanciation ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/generic_package_aliases FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/package/generic_package_instanciation_attributes_ads_code FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) ) [ 1 ]; union_attr : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) ) [ 1 ]; union_attr : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_attributes FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_interfaces_list FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_discriminant ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union_element_type ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union_type ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union_type_interfaces_list FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_adb_code FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_ads_code FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union_case_code FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_union_element_case_code FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_xml_io_record_code FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_tails_attributes FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_xml_end_element_code FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_xml_start_element_code FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_attributes_xml_end_element_code FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_attributes_xml_start_element_code FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_attributes_xml_io_record_initialize_code FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2cheddar/discriminated_type/discriminated_type_xml_io_record_initialize_code FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION; ----! ----Platypus: Updating cheddar-dev: /express2cheddar SCHEMA express2cheddar_facade; USE FROM Package; USE FROM record_and_class; USE FROM discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM cheddar_domains; USE FROM cheddar_dtd; CONSTANT source_licence : STRING := '' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n' + '-- This source file was automatically generated by Platypus\n' + '-- see http://dossen.univ-brest.fr/apl\n' + '-- \n' + '-- Any modification of this file will be lost. \n' + '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n' + '-- model and its meta-model. \n' + '------------------------------------------------------------------------------\n \n' + '------------------------------------------------------------------------------\n' + '-- Cheddar is a free real time scheduling tool.\n' + '-- This program provides services to automatically check temporal constraints\n' + '-- of real time tasks.\n' + '--\n' + '-- Copyright (C) 2002-2009 Frank Singhoff\n' + '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n' + '--\n' + '-- This program is free software; you can redistribute it and/or modify\n' + '-- it under the terms of the GNU General Public License as published by\n' + '-- the Free Software Foundation; either version 2 of the License, or\n' + '-- (at your option) any later version.\n' + '--\n' + '-- This program is distributed in the hope that it will be useful,\n' + '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + '-- GNU General Public License for more details.\n' + '--\n' + '-- You should have received a copy of the GNU General Public License\n' + '-- along with this program; if not, write to the Free Software\n' + '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n' + '--\n' + '--\n' + '-- Contact : cheddar@listes.univ-brest.fr\n' + '-- To post to this mailing list, you must be subscribed\n' + '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n' + '--\n' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n'; xml_id_name : STRING := 'cheddar_private_id'; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ADA_Package; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ADA_Package := all_ada_packages; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes; END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF ( NOT has_attribute_named ( curr, xml_id_name ) ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ADA_Entity := all_ada_entities; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE;END_SCHEMA;SCHEMA cheddar_dtd; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM package; USE FROM discriminated_type; ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || record_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || ada_class_dtd_element; SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || discriminated_type_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages; root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || ada_class_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || record_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || discriminated_type_dtd_element ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := ( basic_ada_domain ( a.domain ) ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF ( EXISTS ( curr ) ) THEN IF ( NOT ( lowerize ( curr.domain.name ) IN names ) ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF ( NOT ( curr.domain IN decl_domain ) ) AND ( NOT ( curr IN not_declared ) ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages | tag IN p.xml_root_tags ) ); END_FUNCTION;END_SCHEMA;SCHEMA ada_interface; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF ( int.with_it ) THEN s := s + 'with ' + name + ';\n'; END_IF; IF ( int.use_it ) THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF ( NOT EXISTS ( from_pkg ) ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF ( EXISTS ( curr.suffix ) ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION;END_SCHEMA;SCHEMA xml_io; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM discriminated_type; USE FROM ada_interface; USE FROM package; FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF ada_class := all_ada_records; alldts : LIST OF discriminated_type := all_ada_discriminated_types; interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF record := all_ada_records; allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types; END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION;END_SCHEMA;SCHEMA cheddar_domains; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( 'standards_io', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF ( is_of_generated_concept_kind ( t ) ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF ( EXISTS ( a.max_idx ) ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ( ads ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ( basic_ada_domain ( SELF.ref ) ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := ( SELF ); accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; (* ? cheddar_law_type ? *) ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF ( EXISTS ( rt.lower_constant ) ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF ( EXISTS ( rt.upper_constant ) ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF ( domain.refed_by_pointer ) THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION;END_SCHEMA;SCHEMA cheddar_constants; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM express_dictionary_queries; USE FROM express_toolsbox_functions; ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION;END_SCHEMA;SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_domains; USE FROM discriminated_type; USE FROM ada_interface; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF ( with_private ) THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF ( is_named_object ( cip ) ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF ( is_named_object ( cip ) ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT ( EXISTS ( init ) ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF ( domain.handled.refed_by_pointer ) THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF ( EXISTS ( attr.redeclaring ) ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF ( has_attribute_named ( r, xml_id_name ) ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF ( domain.handled.refed_by_pointer ) THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF ( domain.handled.refed_by_pointer ) THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF ( is_generic_object ( domain.handled ) ) THEN (* code := '\tresult := result & XML_Ref_String (' + prefix + '.' + attr.name + ' );'; *) code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF ( EXISTS ( init ) ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF ( is_generic_object ( domain.handled ) ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; ELSE (* IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain.handled ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); code := '\n\t\tif To_String (To_Lower (Qname)) = "' + Lowerize ( element_domain.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.core := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; END_IF; *) END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION;END_SCHEMA;SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM cheddar_constants; USE FROM xml_io; ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ADA_Package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code; ELSE code := code + xml_architecture_io_adb_package_code; END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF ( NOT ( concept_in_list ( wl [ noi], r ) ) ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ads ) THEN (* contents := concept_list_local_dependencies ( p, concepts ); *) contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION;END_SCHEMA;SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) ) [ 1 ]; union_attr : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /express2cheddar SCHEMA express2cheddar_facade; USE FROM Package; USE FROM record_and_class; USE FROM discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM cheddar_domains; USE FROM cheddar_dtd; CONSTANT source_licence : STRING := '' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n' + '-- This source file was automatically generated by Platypus\n' + '-- see http://dossen.univ-brest.fr/apl\n' + '-- \n' + '-- Any modification of this file will be lost. \n' + '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n' + '-- model and its meta-model. \n' + '------------------------------------------------------------------------------\n \n' + '------------------------------------------------------------------------------\n' + '-- Cheddar is a free real time scheduling tool.\n' + '-- This program provides services to automatically check temporal constraints\n' + '-- of real time tasks.\n' + '--\n' + '-- Copyright (C) 2002-2009 Frank Singhoff\n' + '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n' + '--\n' + '-- This program is free software; you can redistribute it and/or modify\n' + '-- it under the terms of the GNU General Public License as published by\n' + '-- the Free Software Foundation; either version 2 of the License, or\n' + '-- (at your option) any later version.\n' + '--\n' + '-- This program is distributed in the hope that it will be useful,\n' + '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + '-- GNU General Public License for more details.\n' + '--\n' + '-- You should have received a copy of the GNU General Public License\n' + '-- along with this program; if not, write to the Free Software\n' + '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n' + '--\n' + '--\n' + '-- Contact : cheddar@listes.univ-brest.fr\n' + '-- To post to this mailing list, you must be subscribed\n' + '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n' + '--\n' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n'; xml_id_name : STRING := 'cheddar_private_id'; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ADA_Package; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ADA_Package := all_ada_packages; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes; END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF ( NOT has_attribute_named ( curr, xml_id_name ) ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ADA_Entity := all_ada_entities; key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE; END_SCHEMA; SCHEMA cheddar_dtd; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM package; USE FROM discriminated_type; ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || record_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || ada_class_dtd_element; SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element || entity_dtd_element ( domain ) || discriminated_type_dtd_element; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF ( NOT ( acode IN previous ) ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages; root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || ada_class_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || record_dtd_element ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element || entity_dtd_element ( curr ) || discriminated_type_dtd_element ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := ( basic_ada_domain ( a.domain ) ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF ( EXISTS ( curr ) ) THEN IF ( NOT ( lowerize ( curr.domain.name ) IN names ) ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF ( NOT ( curr.domain IN decl_domain ) ) AND ( NOT ( curr IN not_declared ) ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages | tag IN p.xml_root_tags ) ); END_FUNCTION; END_SCHEMA; SCHEMA ada_interface; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF ( int.with_it ) THEN s := s + 'with ' + name + ';\n'; END_IF; IF ( int.use_it ) THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF ( NOT EXISTS ( from_pkg ) ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF ( EXISTS ( curr.suffix ) ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; END_SCHEMA; SCHEMA xml_io; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM discriminated_type; USE FROM ada_interface; USE FROM package; FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ); allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF ada_class := all_ada_records; alldts : LIST OF discriminated_type := all_ada_discriminated_types; interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes; allrecs : LIST OF record := all_ada_records; allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types; END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; END_SCHEMA; SCHEMA cheddar_domains; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( 'standards_io', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF ( is_of_generated_concept_kind ( t ) ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF ( EXISTS ( a.max_idx ) ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ( ads ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := ( basic_ada_domain ( SELF.ref ) ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ( basic_ada_domain ( SELF.ref ) ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := ( SELF ); accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; (* ? cheddar_law_type ? *) ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF ( EXISTS ( rt.lower_constant ) ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF ( EXISTS ( rt.upper_constant ) ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF ( domain.refed_by_pointer ) THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA cheddar_constants; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM express_dictionary_queries; USE FROM express_toolsbox_functions; ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_domains; USE FROM discriminated_type; USE FROM ada_interface; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF ( with_private ) THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF ( is_named_object ( cip ) ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF ( is_named_object ( cip ) ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT ( EXISTS ( init ) ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF ( domain.handled.refed_by_pointer ) THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF ( EXISTS ( attr.redeclaring ) ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF ( has_inherited_attribute_named ( cip, 'name' ) ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF ( has_attribute_named ( r, xml_id_name ) ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF ( domain.handled.refed_by_pointer ) THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF ( domain.handled.refed_by_pointer ) THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF ( is_generic_object ( domain.handled ) ) THEN (* code := '\tresult := result & XML_Ref_String (' + prefix + '.' + attr.name + ' );'; *) code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF ( EXISTS ( init ) ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF ( NOT is_generic_object ( domain.handled ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR ( EXISTS ( init ) ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF ( is_generic_object ( domain.handled ) ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; ELSE (* IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain.handled ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); code := '\n\t\tif To_String (To_Lower (Qname)) = "' + Lowerize ( element_domain.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.core := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; END_IF; *) END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; END_SCHEMA; SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM cheddar_constants; USE FROM xml_io; ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ADA_Package := SetToList ( all_ada_packages ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code; ELSE code := code + xml_architecture_io_adb_package_code; END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF ( NOT ( concept_in_list ( wl [ noi], r ) ) ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( ads ) THEN (* contents := concept_list_local_dependencies ( p, concepts ); *) contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF ( is_of_generated_concept_kind ( c ) ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) ) [ 1 ]; union_attr : attribute := ( QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; (*APL*) code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF Attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION; END_SCHEMA; ----! ----Platypus: Updating express2java ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater SCHEMA express_translater; USE FROM Express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_statements_schema; USE FROM express_to_java_structure_translater; CONSTANT signature : STRING := '//-------------------------------------------------------------------------------\n' + '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n' + '// by a java generator build with the meta CASE tool Platypus \n' + '// (alain.plantec@univ-brest.fr)\n' + '// \n' + '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n' + '//-------------------------------------------------------------------------------\n\n'; step_core_package : STRING := 'step.core'; step_core_object : STRING := 'step.core.StepCoreObject'; PathNameDelimiter : STRING := '/'; END_CONSTANT; ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/resulting_file ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translation_result ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/express_translater ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/new_resulting_file PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translate_defined_type PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translate_schema_definition PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translate_schema_instance PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translatesFromMetaDataFile PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/translate PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_translater/result PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater SCHEMA express_to_java_structure_translater; USE FROM express_translater; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := ( basic_domain ( SELF.ref ) ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted ).replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted ).generic_value_convertion_spec; END_ENTITY; FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF ( NOT ( attr.optional_flag ) ) THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( ( java_attribute_getter ( ) || attributes [ no] ).accepted ); END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF ( EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted ).replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/basic_type_getter ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := ( basic_domain ( SELF.ref ) ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/basic_domain FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_string_type ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_logical_type ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_binary_type ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_boolean_type ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_real_type ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_integer_type ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_named_type_reference ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_attribute_set_accessor_spec FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_array_type ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_list_type ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_set_type ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_bag_type ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_attribute ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_explicit_attribute ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted ).replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted ).generic_value_convertion_spec; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_explicit_attribute_init FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF ( NOT ( attr.optional_flag ) ) THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_derived_attribute ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_inverse_attribute ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_step_io ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_step_io_extends FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_attribute_getter ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_attributes FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( ( java_attribute_getter ( ) || attributes [ no] ).accepted ); END_REPEAT; RETURN ( res ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_extends FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_spec FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_class_step_rw_spec FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF ( EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_package ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_package_visitor_spec FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_enumeration_spec FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_enumeration_type ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_select_type ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_package_repository_spec FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_package_parse_spec FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_attribute_get_accessor_spec FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/java_inverse_attribute_get_accessor_spec FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/domain_code_getter_data ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/domain_code_getter_replace_spec_data ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/domain_code_getter ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/domain_code ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/simple_type_domain_code ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/entity_definition_domain_code ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/aggregation_type_domain_code ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/aggregation_type_replace_spec FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted ).replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/select_type_domain_code ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/enumeration_type_domain_code ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/entity_definition_replace_spec FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/select_type_replace_spec FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/simple_type_generic_value_convertion_spec FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /express2java/express_to_java_structure_translater/domain_code_getter_convertion_spec_data ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /express2java SCHEMA express_translater; USE FROM Express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_statements_schema; USE FROM express_to_java_structure_translater; CONSTANT signature : STRING := '//-------------------------------------------------------------------------------\n' + '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n' + '// by a java generator build with the meta CASE tool Platypus \n' + '// (alain.plantec@univ-brest.fr)\n' + '// \n' + '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n' + '//-------------------------------------------------------------------------------\n\n'; step_core_package : STRING := 'step.core'; step_core_object : STRING := 'step.core.StepCoreObject'; PathNameDelimiter : STRING := '/'; END_CONSTANT; ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE;END_SCHEMA;SCHEMA express_to_java_structure_translater; USE FROM express_translater; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := ( basic_domain ( SELF.ref ) ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted ).replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted ).generic_value_convertion_spec; END_ENTITY; FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF ( NOT ( attr.optional_flag ) ) THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( ( java_attribute_getter ( ) || attributes [ no] ).accepted ); END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF ( EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted ).replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /express2java SCHEMA express_translater; USE FROM Express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_statements_schema; USE FROM express_to_java_structure_translater; CONSTANT signature : STRING := '//-------------------------------------------------------------------------------\n' + '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n' + '// by a java generator build with the meta CASE tool Platypus \n' + '// (alain.plantec@univ-brest.fr)\n' + '// \n' + '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n' + '//-------------------------------------------------------------------------------\n\n'; step_core_package : STRING := 'step.core'; step_core_object : STRING := 'step.core.StepCoreObject'; PathNameDelimiter : STRING := '/'; END_CONSTANT; ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE; END_SCHEMA; SCHEMA express_to_java_structure_translater; USE FROM express_translater; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := ( basic_domain ( SELF.ref ) ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted ).replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted ).generic_value_convertion_spec; END_ENTITY; FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF ( NOT ( attr.optional_flag ) ) THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( ( java_attribute_getter ( ) || attributes [ no] ).accepted ); END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND ( NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF ( EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF ( EXISTS ( jattr.attr.min_cardinality ) ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted ).replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar_types ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types/Range ENTITY Range; v : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types/Association ENTITY Association; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types/Iterator ENTITY Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types/AdaBoolean TYPE AdaBoolean = BOOLEAN; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_types/Basic_Types/Natural TYPE Natural = INTEGER; END_TYPE; ----! ----Platypus: Updating cheddar-dev: /cheddar_types SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_types SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE; END_SCHEMA; ----! ----Platypus: Updating cheddar_config ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Framework_Config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Framework_Config/Priority_Range TYPE Priority_Range = INTEGER; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Framework_Config/Debug_Level TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Framework_Config/Languages TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Editor_Config SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Editor_Config/Data_From_Simulation TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/Editor_Config/Data_From_Simulation_Table TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_config/AADL_Config SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT;END_SCHEMA;SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT;END_SCHEMA;SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT; END_SCHEMA; SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT; END_SCHEMA; ----! ----Platypus: Updating cheddar_adl ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Objects_Type TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Generic_Object ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Named_Object ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Generic_Objects_Range TYPE Generic_Objects_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Generic_Objects_Set TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/Generic_Object_Set_Package ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Objects/object_from_name FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Offsets SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Offsets/Offsets_Range TYPE Offsets_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Offsets/Offsets_Table TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Offsets/Offset_Type ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Offsets/Offsets_Table_Package ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Cache_Addressing_Type TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Cache_Type TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Cache_Coherence_Protocol_Type TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Cache_Replacement_Type TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Write_Policy_Type TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Caches_Range TYPE Caches_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Caches_Table TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Generic_Cache ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Data_Cache ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Instruction_Cache ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Data_Instruction_Cache ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Caches_Table_Package ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Caches/Cache_System ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Core_Units SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Core_Units/Core_Units_Range TYPE Core_Units_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Core_Units/Core_Units_Table TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Core_Units/Core_Unit ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Core_Units/Core_Units_Table_Package ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Processors SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Processors/Generic_Processor ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Processors/Mono_Core_Processor ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Processors/Multi_Cores_Processor ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer_Role_Type TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer_Roles_Range TYPE Buffer_Roles_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer_Roles_Table TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer_Role ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer_Roles_Package ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Buffers/Buffer ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Resources_Type TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Resource_Accesses_Range TYPE Resource_Accesses_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Resource_Accesses_Table TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Start_End_Table TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Priority_Assignment_Type TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Critical_Section ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Resource_Accesses ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Generic_Resource ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Np_Resource ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Priority_Constrained_Resource ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Pip_Resource ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/Pcp_Resource ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Resources/IPcp_Resource ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Tasks_Type TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Policies TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Generic_Task ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Generic_Task_Iterator TYPE Generic_Task_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Generic_Task_List TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Generic_Task_List_Package ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Periodic_Task ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Aperiodic_Task ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Poisson_Task ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Sporadic_Task ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Parametric_Task ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Scheduling_Task ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Tasks/Frame_Task ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Task_Groups SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Task_Groups/Task_Groups_type TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Task_Groups/Generic_Task_Group ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Task_Groups/Transaction_Task_Group ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Task_Groups/Multiframe_Task_Group ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Messages SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Messages/Messages_Type TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Messages/Generic_Message ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Messages/Periodic_Message ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Messages/Aperiodic_Message ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Dependency_Type TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Time_Triggered_Communication_Timing_Property_Type TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Orientation_Dependency_Type TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Time_Triggered_Communication_Dependency_Type ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Precedence_Dependency_Type ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Queuing_Buffer_Dependency_Type ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Black_board_Buffer_Dependency_Type ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Resource_Dependency_Type ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Communication_Dependency_Type ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Dependency_Union ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Dependencies/Dependency ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Address_Spaces SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Address_Spaces/Address_Space ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Laws SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Laws/Laws_Type TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Networks SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Networks/Networks_Type TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Networks/Network ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Generic_Scheduler ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Aperiodic_Task_Server_Protocol ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Polling_Server_Protocol ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Deferred_Server_Protocol ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Sporadic_Server_Protocol ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Hierarchical_Protocol ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Compiled_User_Defined_Protocol ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Automata_User_Defined_Protocol ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Pipeline_User_Defined_Protocol ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/User_Defined_Protocol ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Earliest_Deadline_First_Protocol ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Least_Laxity_First_Protocol ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Rate_Monotonic_Protocol ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Deadline_Monotonic_Protocol ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Round_Robin_Protocol ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Time_Sharing_Based_On_Wait_Time_Protocol ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Posix_1003_Highest_Priority_First_Protocol ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/D_Over_Protocol ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Maximum_Urgency_First_Based_On_Laxity_Protocol ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Maximum_Urgency_First_Based_On_Deadline_Protocol ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Time_Sharing_Based_On_Cpu_Usage_Protocol ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/No_Scheduling_Protocol ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Hierarchical_Cyclic_Protocol ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Hierarchical_Round_Robin_Protocol ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Hierarchical_Fixed_Priority_Protocol ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Hierarchical_Offline_Protocol ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Fixed_Priority_Protocol ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler/Dynamic_Priority_Protocol ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler_Interface SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler_Interface/Preemptives_Type TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler_Interface/Schedulers_Type TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Scheduler_Interface/Scheduling_Parameters ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Parameter_Type TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/User_Defined_Parameters_Range TYPE User_Defined_Parameters_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/User_Defined_Parameters_Table TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Framework_Parameters_Table TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Framework_Parameters_Range TYPE Framework_Parameters_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Boolean_Parameter_Type ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Integer_Parameter_Type ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Double_Parameter_Type ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/String_Parameter_Type ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Parameter_Union ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Parameter ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/User_Defined_Parameters_Table_Package ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Parameters/Framework_Parameters_Table_Package ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Queueing_Systems SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Queueing_Systems/Queueing_Systems_Type TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/processor_interface SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/processor_interface/Processors_type TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/processor_interface/migrations_type TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Event_Analyzers SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Event_Analyzers/Event_Analyzer ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Deployments SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Deployments/Generic_Deployment ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Deployments/Static_Deployment ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_adl/Deployments/Dynamic_Deployment ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /cheddar_adl SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION;END_SCHEMA;SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY;END_SCHEMA;SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY;END_SCHEMA;SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY;END_SCHEMA;SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY;END_SCHEMA;SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY;END_SCHEMA;SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY;END_SCHEMA;SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY;END_SCHEMA;SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY;END_SCHEMA;SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY;END_SCHEMA;SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE;END_SCHEMA;SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY;END_SCHEMA;SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY;END_SCHEMA;SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY;END_SCHEMA;SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE;END_SCHEMA;SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE;END_SCHEMA;SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY;END_SCHEMA;SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_adl SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; END_SCHEMA; SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY; END_SCHEMA; SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; END_SCHEMA; SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY; END_SCHEMA; SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA; SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; END_SCHEMA; SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; END_SCHEMA; SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA; SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA; SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA; SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA; SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; END_SCHEMA; SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY; END_SCHEMA; SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; END_SCHEMA; SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; END_SCHEMA; SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; END_SCHEMA; SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT; END_SCHEMA; SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_adl SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; END_SCHEMA; SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY; END_SCHEMA; SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; END_SCHEMA; SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY; END_SCHEMA; SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA; SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; END_SCHEMA; SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; END_SCHEMA; SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA; SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA; SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA; SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA; SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; END_SCHEMA; SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY; END_SCHEMA; SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; END_SCHEMA; SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; END_SCHEMA; SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; END_SCHEMA; SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT; END_SCHEMA; SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT; END_SCHEMA; ----! ----Platypus: Updating cheddar_result ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Range = Range; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ENTITY Time_Unit_Package; indexed_table_range : Time_Unit_Range; indexed_table : Time_Unit_Table; END_ENTITY; ENTITY Time_Unit_Lists_Package; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Event_Type TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Event_Type_Boolean_Table TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Range TYPE Time_Unit_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Table TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Address_Space_Activation_Type ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Start_Of_Task_Capacity_Type ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/End_Of_Task_Capacity_Type ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Write_To_Buffer_Type ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Read_From_Buffer_Type ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Context_Switch_Overhead_Type ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Running_Task_Type ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Task_activation_Type ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Allocate_Resource_Type ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Release_Resource_Type ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Wait_For_Resource_Type ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Send_Message_Type ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Receive_Message_Type ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Wait_For_Memory_Type ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Event_Union ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Event ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Package ENTITY Time_Unit_Package; indexed_table_range : Time_Unit_Range; indexed_table : Time_Unit_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_result/Time_Unit_Events/Time_Unit_Lists_Package ENTITY Time_Unit_Lists_Package; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /cheddar_result SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Range = Range; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ENTITY Time_Unit_Package; indexed_table_range : Time_Unit_Range; indexed_table : Time_Unit_Table; END_ENTITY; ENTITY Time_Unit_Lists_Package; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_result SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Range = Range; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ENTITY Time_Unit_Package; indexed_table_range : Time_Unit_Range; indexed_table : Time_Unit_Table; END_ENTITY; ENTITY Time_Unit_Lists_Package; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_types SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE; END_SCHEMA; ----! ----Platypus: Updating cheddar_language ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Simulations SCHEMA Simulations; TYPE Simulation_Type = ENUMERATION OF ( Simulation_Boolean, Simulation_Integer, Simulation_Double, Simulation_Random, Simulation_String, Simulation_clock, Simulation_Array_Boolean, Simulation_Array_Integer, Simulation_Array_Double, Simulation_Array_Random, Simulation_Array_String, Simulation_array_clock, Simulation_Time_Unit_Array_Boolean, Simulation_Time_Unit_Array_Integer, Simulation_Time_Unit_Array_Double, Simulation_Time_Unit_Array_String ); END_TYPE; ENTITY Simulation_Value; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Simulations/Simulation_Type TYPE Simulation_Type = ENUMERATION OF ( Simulation_Boolean, Simulation_Integer, Simulation_Double, Simulation_Random, Simulation_String, Simulation_clock, Simulation_Array_Boolean, Simulation_Array_Integer, Simulation_Array_Double, Simulation_Array_Random, Simulation_Array_String, Simulation_array_clock, Simulation_Time_Unit_Array_Boolean, Simulation_Time_Unit_Array_Integer, Simulation_Time_Unit_Array_Double, Simulation_Time_Unit_Array_String ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Simulations/Simulation_Value ENTITY Simulation_Value; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions SCHEMA Expressions; USE FROM Objects; USE FROM Simulations; TYPE Operator_Type = ENUMERATION OF ( Plus_Type, Minus_Type, Divide_Type, Multiply_Type, Exponential_Type, Modulo_Type, Equal_Type, Not_Equal_Type, Equal_Less_Type, Equal_Greater_Type, Inferior_Type, Superior_Type, Logic_And_Type, Logic_Or_Type, Logic_Not_Type, Min_Operator_Type, Max_Operator_type, Min_To_Index_Type, Max_To_Index_Type, Lcm_Type, Abs_Type, Get_Resource_Index_Type, Get_Task_Index_Type, Get_Message_Index_Type, Get_Buffer_Index_Type, Concatenate_Type ); END_TYPE; TYPE Expressions_Type = ENUMERATION OF ( Constant_Type, Variable_Type, Array_Variable_Type, Binary_Type, Unary_Type, Random_Type ); END_TYPE; ENTITY Generic_Expression SUBTYPE OF ( Named_Object ); expression_type : Expressions_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Expression_Object_Type; END_ENTITY; ENTITY Constant_Expression SUBTYPE OF ( Generic_Expression ); VALUE : Simulation_Value; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Constant_Type; END_ENTITY; ENTITY Variable_Expression SUBTYPE OF ( Generic_Expression ); identifier : STRING; variable_type : Simulation_Type; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Variable_Type; END_ENTITY; ENTITY Array_Variable_Expression SUBTYPE OF ( Variable_Expression ); array_index : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Array_Variable_Type; END_ENTITY; ENTITY Binary_Expression SUBTYPE OF ( Variable_Expression ); rvalue : Generic_Expression; lvalue : Generic_Expression; operator : Operator_Type; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Binary_Type; END_ENTITY; ENTITY Unary_Expression SUBTYPE OF ( Variable_Expression ); operator : Operator_Type; VALUE : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Unary_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Operator_Type TYPE Operator_Type = ENUMERATION OF ( Plus_Type, Minus_Type, Divide_Type, Multiply_Type, Exponential_Type, Modulo_Type, Equal_Type, Not_Equal_Type, Equal_Less_Type, Equal_Greater_Type, Inferior_Type, Superior_Type, Logic_And_Type, Logic_Or_Type, Logic_Not_Type, Min_Operator_Type, Max_Operator_type, Min_To_Index_Type, Max_To_Index_Type, Lcm_Type, Abs_Type, Get_Resource_Index_Type, Get_Task_Index_Type, Get_Message_Index_Type, Get_Buffer_Index_Type, Concatenate_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Expressions_Type TYPE Expressions_Type = ENUMERATION OF ( Constant_Type, Variable_Type, Array_Variable_Type, Binary_Type, Unary_Type, Random_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Generic_Expression ENTITY Generic_Expression SUBTYPE OF ( Named_Object ); expression_type : Expressions_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Expression_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Constant_Expression ENTITY Constant_Expression SUBTYPE OF ( Generic_Expression ); VALUE : Simulation_Value; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Constant_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Variable_Expression ENTITY Variable_Expression SUBTYPE OF ( Generic_Expression ); identifier : STRING; variable_type : Simulation_Type; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Variable_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Array_Variable_Expression ENTITY Array_Variable_Expression SUBTYPE OF ( Variable_Expression ); array_index : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Array_Variable_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Binary_Expression ENTITY Binary_Expression SUBTYPE OF ( Variable_Expression ); rvalue : Generic_Expression; lvalue : Generic_Expression; operator : Operator_Type; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Binary_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Expressions/Unary_Expression ENTITY Unary_Expression SUBTYPE OF ( Variable_Expression ); operator : Operator_Type; VALUE : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Unary_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements SCHEMA Statements; USE FROM basic_types; USE FROM objects; USE FROM Laws; USE FROM Expressions; TYPE Statements_Type = ENUMERATION OF ( Put_Statement_Type, Nop_Statement_Type, Exit_Statement_Type, If_Statement_Type, Assign_Statement_Type, For_Statement_Type, Return_Statement_Type, While_Statement_Type, Set_Statement_Type, Clock_Statement_Type, Subprogram_Statement_Type, Subprogram_Call_Statement_Type, Random_Initialize_Statement_Type ); END_TYPE; TYPE Table_Types = ENUMERATION OF ( Task_Table_Type, Message_Table_Type, Processor_Table_Type, Buffer_Table_Type, Time_Unit_Table_Type, Resource_Table_Type ); END_TYPE; ENTITY Generic_Statement SUBTYPE OF ( Generic_Object ); statement_type : Statements_Type; line_number : Natural; file_name : STRING; next_statement : Generic_Statement; DERIVE SELF\Generic_Object.object_type : Objects_Type := Statement_Object_Type; END_ENTITY; ENTITY Nop_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Nop_Statement_Type; END_ENTITY; ENTITY Exit_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Exit_Statement_Type; END_ENTITY; ENTITY Put_Statement SUBTYPE OF ( Generic_Statement ); put_from : Generic_Expression; put_to : Generic_Expression; expression_to_be_displayed : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Put_Statement_Type; END_ENTITY; ENTITY If_Statement SUBTYPE OF ( Generic_Statement ); bool_expression : Generic_Expression; else_statement : Generic_Statement; then_statement : Generic_Statement; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := If_Statement_Type; END_ENTITY; ENTITY Assign_Statement SUBTYPE OF ( Generic_Statement ); lvalue : Generic_Expression; rvalue : Generic_Expression; DERIVE SELF\Clock_Statement.statement_type : Statements_Type := Assign_Statement_Type; END_ENTITY; ENTITY Clock_Statement SUBTYPE OF ( Assign_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Clock_Statement_Type; END_ENTITY; ENTITY For_Statement SUBTYPE OF ( Generic_Statement ); for_type : Table_Types; included_statement : Generic_Statement; for_index : Variable_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := For_Statement_Type; END_ENTITY; ENTITY Return_Statement SUBTYPE OF ( Generic_Statement ); return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Return_Statement_Type; END_ENTITY; ENTITY While_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; condition : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := While_Statement_Type; END_ENTITY; ENTITY Random_Initialize_Statement SUBTYPE OF ( Generic_Statement ); lvalue : STRING; law : Laws_Type; parameter1 : Generic_Expression; parameter2 : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Random_Initialize_Statement_Type; END_ENTITY; ENTITY Set_Statement SUBTYPE OF ( Generic_Statement ); set_id : STRING; set_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Set_Statement_Type; END_ENTITY; ENTITY Subprogram_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; is_a_function : BOOLEAN; subprogram_name : STRING; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Statement_Type; END_ENTITY; ENTITY Subprogram_Call_Statement SUBTYPE OF ( Generic_Statement ); is_a_function : BOOLEAN; called_subprogram : Generic_Statement; return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Call_Statement_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Statements_Type TYPE Statements_Type = ENUMERATION OF ( Put_Statement_Type, Nop_Statement_Type, Exit_Statement_Type, If_Statement_Type, Assign_Statement_Type, For_Statement_Type, Return_Statement_Type, While_Statement_Type, Set_Statement_Type, Clock_Statement_Type, Subprogram_Statement_Type, Subprogram_Call_Statement_Type, Random_Initialize_Statement_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Table_Types TYPE Table_Types = ENUMERATION OF ( Task_Table_Type, Message_Table_Type, Processor_Table_Type, Buffer_Table_Type, Time_Unit_Table_Type, Resource_Table_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Generic_Statement ENTITY Generic_Statement SUBTYPE OF ( Generic_Object ); statement_type : Statements_Type; line_number : Natural; file_name : STRING; next_statement : Generic_Statement; DERIVE SELF\Generic_Object.object_type : Objects_Type := Statement_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Nop_Statement ENTITY Nop_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Nop_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Exit_Statement ENTITY Exit_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Exit_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Put_Statement ENTITY Put_Statement SUBTYPE OF ( Generic_Statement ); put_from : Generic_Expression; put_to : Generic_Expression; expression_to_be_displayed : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Put_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/If_Statement ENTITY If_Statement SUBTYPE OF ( Generic_Statement ); bool_expression : Generic_Expression; else_statement : Generic_Statement; then_statement : Generic_Statement; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := If_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Assign_Statement ENTITY Assign_Statement SUBTYPE OF ( Generic_Statement ); lvalue : Generic_Expression; rvalue : Generic_Expression; DERIVE SELF\Clock_Statement.statement_type : Statements_Type := Assign_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Clock_Statement ENTITY Clock_Statement SUBTYPE OF ( Assign_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Clock_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/For_Statement ENTITY For_Statement SUBTYPE OF ( Generic_Statement ); for_type : Table_Types; included_statement : Generic_Statement; for_index : Variable_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := For_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Return_Statement ENTITY Return_Statement SUBTYPE OF ( Generic_Statement ); return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Return_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/While_Statement ENTITY While_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; condition : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := While_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Random_Initialize_Statement ENTITY Random_Initialize_Statement SUBTYPE OF ( Generic_Statement ); lvalue : STRING; law : Laws_Type; parameter1 : Generic_Expression; parameter2 : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Random_Initialize_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Set_Statement ENTITY Set_Statement SUBTYPE OF ( Generic_Statement ); set_id : STRING; set_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Set_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Subprogram_Statement ENTITY Subprogram_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; is_a_function : BOOLEAN; subprogram_name : STRING; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Statements/Subprogram_Call_Statement ENTITY Subprogram_Call_Statement SUBTYPE OF ( Generic_Statement ); is_a_function : BOOLEAN; called_subprogram : Generic_Statement; return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Call_Statement_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Interpreter SCHEMA Interpreter; USE FROM Basic_Types; USE FROM Statements; TYPE Section_Table = LIST OF Generic_Statement; END_TYPE; TYPE Sets_Table_Type = LIST OF Set_Statement; END_TYPE; TYPE Sets_Range = Range; END_TYPE; ENTITY Sets_Type_Package; table_range : Sets_Range; table : Sets_Table_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Interpreter/Section_Table TYPE Section_Table = LIST OF Generic_Statement; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Interpreter/Sets_Table_Type TYPE Sets_Table_Type = LIST OF Set_Statement; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Interpreter/Sets_Range TYPE Sets_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Interpreter/Sets_Type_Package ENTITY Sets_Type_Package; table_range : Sets_Range; table : Sets_Table_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton SCHEMA Automaton; USE FROM basic_types; USE FROM objects; USE FROM Statements; USE FROM Expressions; TYPE State_Lists = LIST OF State; END_TYPE; TYPE State_Lists_Iterator = Iterator; END_TYPE; TYPE Synchronizations_Type = ENUMERATION OF ( Send, Receive ); END_TYPE; TYPE Transition_Lists = LIST OF Transition; END_TYPE; TYPE Transition_Lists_Iterator = Iterator; END_TYPE; (*"Status_Type" * Stores the state of a transition : * Ready - the transition can be fired ; * pended - the transition is delayed due to a clock synchronization ; * guarded - the transition is blocked due to a guard * rendezvous - the transition waits for a rendezvous ; * unreachable - no automaton is ready to fire the automaton *) TYPE Status_Type = ENUMERATION OF ( Ready, Pended, Rendezvous, Guarded, Unreachable ); END_TYPE; TYPE Automaton_Status_Table = LIST OF Automaton_Status; END_TYPE; TYPE Automaton_Status_Range = Range; END_TYPE; TYPE Transition_Status_Table = LIST OF Transition_Status; END_TYPE; TYPE Transition_Status_Range = Range; END_TYPE; ENTITY State SUBTYPE OF ( Named_Object ); is_initial : BOOLEAN; DERIVE SELF\Generic_Object.object_type : Objects_Type := State_Object_Type; END_ENTITY; ENTITY State_Lists_Package; list_ : State_Lists; iterator : State_Lists_Iterator; END_ENTITY; ENTITY Synchronization SUBTYPE OF ( Named_Object ); synchronization_type : Synchronizations_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Synchronization_Object_Type; END_ENTITY; ENTITY Transition SUBTYPE OF ( Named_Object ); from_state : State; to_state : State; guards : Generic_Expression; clocks : Generic_Statement; synchronization : Synchronization; DERIVE SELF\Generic_Object.object_type : Objects_Type := Transition_Object_Type; END_ENTITY; ENTITY Transition_Lists_Package; list_ : Transition_Lists; iterator : Transition_Lists_Iterator; END_ENTITY; ENTITY Automaton_Status; current_state : State; END_ENTITY; ENTITY Package_Automaton_Status; indexed_table : Automaton_Status_Table; indexed_table_range : Automaton_Status_Range; END_ENTITY; ENTITY Transition_Status; code : Transition; status : Status_Type; wakeup_time : Natural; END_ENTITY; ENTITY Package_Transition_Status; indexed_table : Transition_Status_Table; indexed_table_range : Transition_Status_Range; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/State_Lists TYPE State_Lists = LIST OF State; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/State_Lists_Iterator TYPE State_Lists_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Synchronizations_Type TYPE Synchronizations_Type = ENUMERATION OF ( Send, Receive ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Lists TYPE Transition_Lists = LIST OF Transition; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Lists_Iterator TYPE Transition_Lists_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Status_Type TYPE Status_Type = ENUMERATION OF ( Ready, Pended, Rendezvous, Guarded, Unreachable ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Automaton_Status_Table TYPE Automaton_Status_Table = LIST OF Automaton_Status; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Automaton_Status_Range TYPE Automaton_Status_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Status_Table TYPE Transition_Status_Table = LIST OF Transition_Status; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Status_Range TYPE Transition_Status_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/State ENTITY State SUBTYPE OF ( Named_Object ); is_initial : BOOLEAN; DERIVE SELF\Generic_Object.object_type : Objects_Type := State_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/State_Lists_Package ENTITY State_Lists_Package; list_ : State_Lists; iterator : State_Lists_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Synchronization ENTITY Synchronization SUBTYPE OF ( Named_Object ); synchronization_type : Synchronizations_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Synchronization_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition ENTITY Transition SUBTYPE OF ( Named_Object ); from_state : State; to_state : State; guards : Generic_Expression; clocks : Generic_Statement; synchronization : Synchronization; DERIVE SELF\Generic_Object.object_type : Objects_Type := Transition_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Lists_Package ENTITY Transition_Lists_Package; list_ : Transition_Lists; iterator : Transition_Lists_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Automaton_Status ENTITY Automaton_Status; current_state : State; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Package_Automaton_Status ENTITY Package_Automaton_Status; indexed_table : Automaton_Status_Table; indexed_table_range : Automaton_Status_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Transition_Status ENTITY Transition_Status; code : Transition; status : Status_Type; wakeup_time : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Automaton/Package_Transition_Status ENTITY Package_Transition_Status; indexed_table : Transition_Status_Table; indexed_table_range : Transition_Status_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Sections SCHEMA Sections; USE FROM objects; USE FROM Statements; USE FROM Automaton; TYPE Sections_Type = ENUMERATION OF ( Automaton_Type, Start_Type, Priority_Type, Election_Type, Activation_Type, Check_Resource_Type, Allocate_Resource_Type, Release_Resource_Type, Gather_Event_Analyzer_Type, Display_Event_Analyzer_Type ); END_TYPE; ENTITY Generic_Section SUBTYPE OF ( Named_Object ); section_type : Sections_Type; file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Section_Object_Type; END_ENTITY; ENTITY Computation_Section SUBTYPE OF ( Generic_Section ); first_statement : Generic_Statement; END_ENTITY; ENTITY Synchronization_Section SUBTYPE OF ( Generic_Section ); state_list : State_Lists; transition_list : Transition_Lists; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Sections/Sections_Type TYPE Sections_Type = ENUMERATION OF ( Automaton_Type, Start_Type, Priority_Type, Election_Type, Activation_Type, Check_Resource_Type, Allocate_Resource_Type, Release_Resource_Type, Gather_Event_Analyzer_Type, Display_Event_Analyzer_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Sections/Generic_Section ENTITY Generic_Section SUBTYPE OF ( Named_Object ); section_type : Sections_Type; file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Section_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Sections/Computation_Section ENTITY Computation_Section SUBTYPE OF ( Generic_Section ); first_statement : Generic_Statement; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_language/Sections/Synchronization_Section ENTITY Synchronization_Section SUBTYPE OF ( Generic_Section ); state_list : State_Lists; transition_list : Transition_Lists; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /cheddar_language SCHEMA Simulations; TYPE Simulation_Type = ENUMERATION OF ( Simulation_Boolean, Simulation_Integer, Simulation_Double, Simulation_Random, Simulation_String, Simulation_clock, Simulation_Array_Boolean, Simulation_Array_Integer, Simulation_Array_Double, Simulation_Array_Random, Simulation_Array_String, Simulation_array_clock, Simulation_Time_Unit_Array_Boolean, Simulation_Time_Unit_Array_Integer, Simulation_Time_Unit_Array_Double, Simulation_Time_Unit_Array_String ); END_TYPE; ENTITY Simulation_Value; END_ENTITY;END_SCHEMA;SCHEMA Expressions; USE FROM Objects; USE FROM Simulations; TYPE Operator_Type = ENUMERATION OF ( Plus_Type, Minus_Type, Divide_Type, Multiply_Type, Exponential_Type, Modulo_Type, Equal_Type, Not_Equal_Type, Equal_Less_Type, Equal_Greater_Type, Inferior_Type, Superior_Type, Logic_And_Type, Logic_Or_Type, Logic_Not_Type, Min_Operator_Type, Max_Operator_type, Min_To_Index_Type, Max_To_Index_Type, Lcm_Type, Abs_Type, Get_Resource_Index_Type, Get_Task_Index_Type, Get_Message_Index_Type, Get_Buffer_Index_Type, Concatenate_Type ); END_TYPE; TYPE Expressions_Type = ENUMERATION OF ( Constant_Type, Variable_Type, Array_Variable_Type, Binary_Type, Unary_Type, Random_Type ); END_TYPE; ENTITY Generic_Expression SUBTYPE OF ( Named_Object ); expression_type : Expressions_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Expression_Object_Type; END_ENTITY; ENTITY Constant_Expression SUBTYPE OF ( Generic_Expression ); VALUE : Simulation_Value; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Constant_Type; END_ENTITY; ENTITY Variable_Expression SUBTYPE OF ( Generic_Expression ); identifier : STRING; variable_type : Simulation_Type; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Variable_Type; END_ENTITY; ENTITY Array_Variable_Expression SUBTYPE OF ( Variable_Expression ); array_index : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Array_Variable_Type; END_ENTITY; ENTITY Binary_Expression SUBTYPE OF ( Variable_Expression ); rvalue : Generic_Expression; lvalue : Generic_Expression; operator : Operator_Type; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Binary_Type; END_ENTITY; ENTITY Unary_Expression SUBTYPE OF ( Variable_Expression ); operator : Operator_Type; VALUE : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Unary_Type; END_ENTITY;END_SCHEMA;SCHEMA Statements; USE FROM basic_types; USE FROM objects; USE FROM Laws; USE FROM Expressions; TYPE Statements_Type = ENUMERATION OF ( Put_Statement_Type, Nop_Statement_Type, Exit_Statement_Type, If_Statement_Type, Assign_Statement_Type, For_Statement_Type, Return_Statement_Type, While_Statement_Type, Set_Statement_Type, Clock_Statement_Type, Subprogram_Statement_Type, Subprogram_Call_Statement_Type, Random_Initialize_Statement_Type ); END_TYPE; TYPE Table_Types = ENUMERATION OF ( Task_Table_Type, Message_Table_Type, Processor_Table_Type, Buffer_Table_Type, Time_Unit_Table_Type, Resource_Table_Type ); END_TYPE; ENTITY Generic_Statement SUBTYPE OF ( Generic_Object ); statement_type : Statements_Type; line_number : Natural; file_name : STRING; next_statement : Generic_Statement; DERIVE SELF\Generic_Object.object_type : Objects_Type := Statement_Object_Type; END_ENTITY; ENTITY Nop_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Nop_Statement_Type; END_ENTITY; ENTITY Exit_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Exit_Statement_Type; END_ENTITY; ENTITY Put_Statement SUBTYPE OF ( Generic_Statement ); put_from : Generic_Expression; put_to : Generic_Expression; expression_to_be_displayed : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Put_Statement_Type; END_ENTITY; ENTITY If_Statement SUBTYPE OF ( Generic_Statement ); bool_expression : Generic_Expression; else_statement : Generic_Statement; then_statement : Generic_Statement; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := If_Statement_Type; END_ENTITY; ENTITY Assign_Statement SUBTYPE OF ( Generic_Statement ); lvalue : Generic_Expression; rvalue : Generic_Expression; DERIVE SELF\Clock_Statement.statement_type : Statements_Type := Assign_Statement_Type; END_ENTITY; ENTITY Clock_Statement SUBTYPE OF ( Assign_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Clock_Statement_Type; END_ENTITY; ENTITY For_Statement SUBTYPE OF ( Generic_Statement ); for_type : Table_Types; included_statement : Generic_Statement; for_index : Variable_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := For_Statement_Type; END_ENTITY; ENTITY Return_Statement SUBTYPE OF ( Generic_Statement ); return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Return_Statement_Type; END_ENTITY; ENTITY While_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; condition : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := While_Statement_Type; END_ENTITY; ENTITY Random_Initialize_Statement SUBTYPE OF ( Generic_Statement ); lvalue : STRING; law : Laws_Type; parameter1 : Generic_Expression; parameter2 : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Random_Initialize_Statement_Type; END_ENTITY; ENTITY Set_Statement SUBTYPE OF ( Generic_Statement ); set_id : STRING; set_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Set_Statement_Type; END_ENTITY; ENTITY Subprogram_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; is_a_function : BOOLEAN; subprogram_name : STRING; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Statement_Type; END_ENTITY; ENTITY Subprogram_Call_Statement SUBTYPE OF ( Generic_Statement ); is_a_function : BOOLEAN; called_subprogram : Generic_Statement; return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Call_Statement_Type; END_ENTITY;END_SCHEMA;SCHEMA Interpreter; USE FROM Basic_Types; USE FROM Statements; TYPE Section_Table = LIST OF Generic_Statement; END_TYPE; TYPE Sets_Table_Type = LIST OF Set_Statement; END_TYPE; TYPE Sets_Range = Range; END_TYPE; ENTITY Sets_Type_Package; table_range : Sets_Range; table : Sets_Table_Type; END_ENTITY;END_SCHEMA;SCHEMA Automaton; USE FROM basic_types; USE FROM objects; USE FROM Statements; USE FROM Expressions; TYPE State_Lists = LIST OF State; END_TYPE; TYPE State_Lists_Iterator = Iterator; END_TYPE; TYPE Synchronizations_Type = ENUMERATION OF ( Send, Receive ); END_TYPE; TYPE Transition_Lists = LIST OF Transition; END_TYPE; TYPE Transition_Lists_Iterator = Iterator; END_TYPE; (*"Status_Type" * Stores the state of a transition : * Ready - the transition can be fired ; * pended - the transition is delayed due to a clock synchronization ; * guarded - the transition is blocked due to a guard * rendezvous - the transition waits for a rendezvous ; * unreachable - no automaton is ready to fire the automaton *) TYPE Status_Type = ENUMERATION OF ( Ready, Pended, Rendezvous, Guarded, Unreachable ); END_TYPE; TYPE Automaton_Status_Table = LIST OF Automaton_Status; END_TYPE; TYPE Automaton_Status_Range = Range; END_TYPE; TYPE Transition_Status_Table = LIST OF Transition_Status; END_TYPE; TYPE Transition_Status_Range = Range; END_TYPE; ENTITY State SUBTYPE OF ( Named_Object ); is_initial : BOOLEAN; DERIVE SELF\Generic_Object.object_type : Objects_Type := State_Object_Type; END_ENTITY; ENTITY State_Lists_Package; list_ : State_Lists; iterator : State_Lists_Iterator; END_ENTITY; ENTITY Synchronization SUBTYPE OF ( Named_Object ); synchronization_type : Synchronizations_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Synchronization_Object_Type; END_ENTITY; ENTITY Transition SUBTYPE OF ( Named_Object ); from_state : State; to_state : State; guards : Generic_Expression; clocks : Generic_Statement; synchronization : Synchronization; DERIVE SELF\Generic_Object.object_type : Objects_Type := Transition_Object_Type; END_ENTITY; ENTITY Transition_Lists_Package; list_ : Transition_Lists; iterator : Transition_Lists_Iterator; END_ENTITY; ENTITY Automaton_Status; current_state : State; END_ENTITY; ENTITY Package_Automaton_Status; indexed_table : Automaton_Status_Table; indexed_table_range : Automaton_Status_Range; END_ENTITY; ENTITY Transition_Status; code : Transition; status : Status_Type; wakeup_time : Natural; END_ENTITY; ENTITY Package_Transition_Status; indexed_table : Transition_Status_Table; indexed_table_range : Transition_Status_Range; END_ENTITY;END_SCHEMA;SCHEMA Sections; USE FROM objects; USE FROM Statements; USE FROM Automaton; TYPE Sections_Type = ENUMERATION OF ( Automaton_Type, Start_Type, Priority_Type, Election_Type, Activation_Type, Check_Resource_Type, Allocate_Resource_Type, Release_Resource_Type, Gather_Event_Analyzer_Type, Display_Event_Analyzer_Type ); END_TYPE; ENTITY Generic_Section SUBTYPE OF ( Named_Object ); section_type : Sections_Type; file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Section_Object_Type; END_ENTITY; ENTITY Computation_Section SUBTYPE OF ( Generic_Section ); first_statement : Generic_Statement; END_ENTITY; ENTITY Synchronization_Section SUBTYPE OF ( Generic_Section ); state_list : State_Lists; transition_list : Transition_Lists; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_language SCHEMA Simulations; TYPE Simulation_Type = ENUMERATION OF ( Simulation_Boolean, Simulation_Integer, Simulation_Double, Simulation_Random, Simulation_String, Simulation_clock, Simulation_Array_Boolean, Simulation_Array_Integer, Simulation_Array_Double, Simulation_Array_Random, Simulation_Array_String, Simulation_array_clock, Simulation_Time_Unit_Array_Boolean, Simulation_Time_Unit_Array_Integer, Simulation_Time_Unit_Array_Double, Simulation_Time_Unit_Array_String ); END_TYPE; ENTITY Simulation_Value; END_ENTITY; END_SCHEMA; SCHEMA Expressions; USE FROM Objects; USE FROM Simulations; TYPE Operator_Type = ENUMERATION OF ( Plus_Type, Minus_Type, Divide_Type, Multiply_Type, Exponential_Type, Modulo_Type, Equal_Type, Not_Equal_Type, Equal_Less_Type, Equal_Greater_Type, Inferior_Type, Superior_Type, Logic_And_Type, Logic_Or_Type, Logic_Not_Type, Min_Operator_Type, Max_Operator_type, Min_To_Index_Type, Max_To_Index_Type, Lcm_Type, Abs_Type, Get_Resource_Index_Type, Get_Task_Index_Type, Get_Message_Index_Type, Get_Buffer_Index_Type, Concatenate_Type ); END_TYPE; TYPE Expressions_Type = ENUMERATION OF ( Constant_Type, Variable_Type, Array_Variable_Type, Binary_Type, Unary_Type, Random_Type ); END_TYPE; ENTITY Generic_Expression SUBTYPE OF ( Named_Object ); expression_type : Expressions_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Expression_Object_Type; END_ENTITY; ENTITY Constant_Expression SUBTYPE OF ( Generic_Expression ); VALUE : Simulation_Value; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Constant_Type; END_ENTITY; ENTITY Variable_Expression SUBTYPE OF ( Generic_Expression ); identifier : STRING; variable_type : Simulation_Type; DERIVE SELF\Generic_Expression.expression_type : Expressions_Type := Variable_Type; END_ENTITY; ENTITY Array_Variable_Expression SUBTYPE OF ( Variable_Expression ); array_index : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Array_Variable_Type; END_ENTITY; ENTITY Binary_Expression SUBTYPE OF ( Variable_Expression ); rvalue : Generic_Expression; lvalue : Generic_Expression; operator : Operator_Type; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Binary_Type; END_ENTITY; ENTITY Unary_Expression SUBTYPE OF ( Variable_Expression ); operator : Operator_Type; VALUE : Generic_Expression; DERIVE SELF\Variable_Expression.expression_type : Expressions_Type := Unary_Type; END_ENTITY; END_SCHEMA; SCHEMA Statements; USE FROM basic_types; USE FROM objects; USE FROM Laws; USE FROM Expressions; TYPE Statements_Type = ENUMERATION OF ( Put_Statement_Type, Nop_Statement_Type, Exit_Statement_Type, If_Statement_Type, Assign_Statement_Type, For_Statement_Type, Return_Statement_Type, While_Statement_Type, Set_Statement_Type, Clock_Statement_Type, Subprogram_Statement_Type, Subprogram_Call_Statement_Type, Random_Initialize_Statement_Type ); END_TYPE; TYPE Table_Types = ENUMERATION OF ( Task_Table_Type, Message_Table_Type, Processor_Table_Type, Buffer_Table_Type, Time_Unit_Table_Type, Resource_Table_Type ); END_TYPE; ENTITY Generic_Statement SUBTYPE OF ( Generic_Object ); statement_type : Statements_Type; line_number : Natural; file_name : STRING; next_statement : Generic_Statement; DERIVE SELF\Generic_Object.object_type : Objects_Type := Statement_Object_Type; END_ENTITY; ENTITY Nop_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Nop_Statement_Type; END_ENTITY; ENTITY Exit_Statement SUBTYPE OF ( Generic_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Exit_Statement_Type; END_ENTITY; ENTITY Put_Statement SUBTYPE OF ( Generic_Statement ); put_from : Generic_Expression; put_to : Generic_Expression; expression_to_be_displayed : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Put_Statement_Type; END_ENTITY; ENTITY If_Statement SUBTYPE OF ( Generic_Statement ); bool_expression : Generic_Expression; else_statement : Generic_Statement; then_statement : Generic_Statement; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := If_Statement_Type; END_ENTITY; ENTITY Assign_Statement SUBTYPE OF ( Generic_Statement ); lvalue : Generic_Expression; rvalue : Generic_Expression; DERIVE SELF\Clock_Statement.statement_type : Statements_Type := Assign_Statement_Type; END_ENTITY; ENTITY Clock_Statement SUBTYPE OF ( Assign_Statement ); DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Clock_Statement_Type; END_ENTITY; ENTITY For_Statement SUBTYPE OF ( Generic_Statement ); for_type : Table_Types; included_statement : Generic_Statement; for_index : Variable_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := For_Statement_Type; END_ENTITY; ENTITY Return_Statement SUBTYPE OF ( Generic_Statement ); return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Return_Statement_Type; END_ENTITY; ENTITY While_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; condition : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := While_Statement_Type; END_ENTITY; ENTITY Random_Initialize_Statement SUBTYPE OF ( Generic_Statement ); lvalue : STRING; law : Laws_Type; parameter1 : Generic_Expression; parameter2 : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Random_Initialize_Statement_Type; END_ENTITY; ENTITY Set_Statement SUBTYPE OF ( Generic_Statement ); set_id : STRING; set_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Set_Statement_Type; END_ENTITY; ENTITY Subprogram_Statement SUBTYPE OF ( Generic_Statement ); included_statement : Generic_Statement; is_a_function : BOOLEAN; subprogram_name : STRING; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Statement_Type; END_ENTITY; ENTITY Subprogram_Call_Statement SUBTYPE OF ( Generic_Statement ); is_a_function : BOOLEAN; called_subprogram : Generic_Statement; return_value : Generic_Expression; DERIVE SELF\Generic_Statement.statement_type : Statements_Type := Subprogram_Call_Statement_Type; END_ENTITY; END_SCHEMA; SCHEMA Interpreter; USE FROM Basic_Types; USE FROM Statements; TYPE Section_Table = LIST OF Generic_Statement; END_TYPE; TYPE Sets_Table_Type = LIST OF Set_Statement; END_TYPE; TYPE Sets_Range = Range; END_TYPE; ENTITY Sets_Type_Package; table_range : Sets_Range; table : Sets_Table_Type; END_ENTITY; END_SCHEMA; SCHEMA Automaton; USE FROM basic_types; USE FROM objects; USE FROM Statements; USE FROM Expressions; TYPE State_Lists = LIST OF State; END_TYPE; TYPE State_Lists_Iterator = Iterator; END_TYPE; TYPE Synchronizations_Type = ENUMERATION OF ( Send, Receive ); END_TYPE; TYPE Transition_Lists = LIST OF Transition; END_TYPE; TYPE Transition_Lists_Iterator = Iterator; END_TYPE; (*"Status_Type" * Stores the state of a transition : * Ready - the transition can be fired ; * pended - the transition is delayed due to a clock synchronization ; * guarded - the transition is blocked due to a guard * rendezvous - the transition waits for a rendezvous ; * unreachable - no automaton is ready to fire the automaton *) TYPE Status_Type = ENUMERATION OF ( Ready, Pended, Rendezvous, Guarded, Unreachable ); END_TYPE; TYPE Automaton_Status_Table = LIST OF Automaton_Status; END_TYPE; TYPE Automaton_Status_Range = Range; END_TYPE; TYPE Transition_Status_Table = LIST OF Transition_Status; END_TYPE; TYPE Transition_Status_Range = Range; END_TYPE; ENTITY State SUBTYPE OF ( Named_Object ); is_initial : BOOLEAN; DERIVE SELF\Generic_Object.object_type : Objects_Type := State_Object_Type; END_ENTITY; ENTITY State_Lists_Package; list_ : State_Lists; iterator : State_Lists_Iterator; END_ENTITY; ENTITY Synchronization SUBTYPE OF ( Named_Object ); synchronization_type : Synchronizations_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Synchronization_Object_Type; END_ENTITY; ENTITY Transition SUBTYPE OF ( Named_Object ); from_state : State; to_state : State; guards : Generic_Expression; clocks : Generic_Statement; synchronization : Synchronization; DERIVE SELF\Generic_Object.object_type : Objects_Type := Transition_Object_Type; END_ENTITY; ENTITY Transition_Lists_Package; list_ : Transition_Lists; iterator : Transition_Lists_Iterator; END_ENTITY; ENTITY Automaton_Status; current_state : State; END_ENTITY; ENTITY Package_Automaton_Status; indexed_table : Automaton_Status_Table; indexed_table_range : Automaton_Status_Range; END_ENTITY; ENTITY Transition_Status; code : Transition; status : Status_Type; wakeup_time : Natural; END_ENTITY; ENTITY Package_Transition_Status; indexed_table : Transition_Status_Table; indexed_table_range : Transition_Status_Range; END_ENTITY; END_SCHEMA; SCHEMA Sections; USE FROM objects; USE FROM Statements; USE FROM Automaton; TYPE Sections_Type = ENUMERATION OF ( Automaton_Type, Start_Type, Priority_Type, Election_Type, Activation_Type, Check_Resource_Type, Allocate_Resource_Type, Release_Resource_Type, Gather_Event_Analyzer_Type, Display_Event_Analyzer_Type ); END_TYPE; ENTITY Generic_Section SUBTYPE OF ( Named_Object ); section_type : Sections_Type; file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Section_Object_Type; END_ENTITY; ENTITY Computation_Section SUBTYPE OF ( Generic_Section ); first_statement : Generic_Statement; END_ENTITY; ENTITY Synchronization_Section SUBTYPE OF ( Generic_Section ); state_list : State_Lists; transition_list : Transition_Lists; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar_api ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Generic_Index_Lst_Package; END_ENTITY; ENTITY Double_Tasks_Parameters_Package; indexed_table : Blocking_Time_Table; indexed_table_range : Blocking_Time_Range; indexed_table_ : Response_Time_Table; indexed_table_range_ : Response_Time_Range; END_ENTITY; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Buffer_Size_Package; table_range : Buffer_Size_Range; table : Buffer_Size_Table; END_ENTITY; ENTITY Buffer_Result_Package; indexed_table_range : Buffer_Result_Range; indexed_table : Buffer_Result_Table; END_ENTITY; ENTITY Waiting_Time_Package; table_range : Waiting_Time_Range; table : Waiting_Time_Table; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Density_Package; table_range : Density_Range; table : Density_Table; END_ENTITY; ENTITY Densities_Table_Package; indexed_table_range : Densities_Range; indexed_table : Densities_Table; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Deadlock_Package; iterator : Deadlock_Iterator; list_ : Deadlock_List; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_List_Package; iterator : Priority_Inversion_Iterator; list_ : Priority_Inversion_List; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Scheduling_Sequence TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Blocking_Time_Range TYPE Blocking_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Blocking_Time_Table TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Response_Time_Table TYPE Response_Time_Table = LIST OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Response_Time_Range TYPE Response_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Size_Range TYPE Buffer_Size_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Size_Table TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Result_Range TYPE Buffer_Result_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Result_Table TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Waiting_Time_Range TYPE Waiting_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Waiting_Time_Table TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Density_Range TYPE Density_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Density_Table TYPE Density_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Densities_Range TYPE Densities_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Densities_Table TYPE Densities_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Deadlock_Iterator TYPE Deadlock_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Deadlock_List TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Priority_Inversion_Iterator TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Priority_Inversion_List TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Generic_Index_Lst_Package ENTITY Generic_Index_Lst_Package; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Double_Tasks_Parameters_Package ENTITY Double_Tasks_Parameters_Package; indexed_table : Blocking_Time_Table; indexed_table_range : Blocking_Time_Range; indexed_table_ : Response_Time_Table; indexed_table_range_ : Response_Time_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Size_Item ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Size_Package ENTITY Buffer_Size_Package; table_range : Buffer_Size_Range; table : Buffer_Size_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Buffer_Result_Package ENTITY Buffer_Result_Package; indexed_table_range : Buffer_Result_Range; indexed_table : Buffer_Result_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Waiting_Time_Package ENTITY Waiting_Time_Package; table_range : Waiting_Time_Range; table : Waiting_Time_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Density_Item ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Density_Package ENTITY Density_Package; table_range : Density_Range; table : Density_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Densities_Table_Package ENTITY Densities_Table_Package; indexed_table_range : Densities_Range; indexed_table : Densities_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Deadlock_Item ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Deadlock_Package ENTITY Deadlock_Package; iterator : Deadlock_Iterator; list_ : Deadlock_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Priority_Inversion_Item ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Scheduling_Analysis/Priority_Inversion_List_Package ENTITY Priority_Inversion_List_Package; iterator : Priority_Inversion_Iterator; list_ : Priority_Inversion_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Request_Package; table_range : Framework_Request_Range; table : Framework_Request_Table; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; ENTITY Framework_Response_Package; table_range : Framework_Response_Range; table : Framework_Response_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Statement_Type TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Request_Range TYPE Framework_Request_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Request_Table TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Response_Range TYPE Framework_Response_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Response_Table TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Partioning_Type TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Output_Format TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Perform_Order TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Request ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Request_Package ENTITY Framework_Request_Package; table_range : Framework_Request_Range; table : Framework_Request_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Response ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Call_Framework_Interface/Framework_Response_Package ENTITY Framework_Response_Package; table_range : Framework_Response_Range; table : Framework_Response_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Multiprocessor_Services_Interface SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; ENTITY Scheduling_Result_Per_Processor_Package; indexed_table : Scheduling_Table; indexed_table_range : Scheduling_Table_Range; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Multiprocessor_Services_Interface/Scheduling_Table TYPE Scheduling_Table = LIST OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Multiprocessor_Services_Interface/Scheduling_Table_Range TYPE Scheduling_Table_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Multiprocessor_Services_Interface/Scheduling_Result ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Multiprocessor_Services_Interface/Scheduling_Result_Per_Processor_Package ENTITY Scheduling_Result_Per_Processor_Package; indexed_table : Scheduling_Table; indexed_table_range : Scheduling_Table_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/AADL_Parser_Interface SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; ENTITY Processor_Binding_Package; table : Processor_Binding_Table; table_range : Processor_Binding_Range; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/AADL_Parser_Interface/Processor_Binding_Table TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/AADL_Parser_Interface/Processor_Binding_Range TYPE Processor_Binding_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/AADL_Parser_Interface/Binding_Record_Type ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/AADL_Parser_Interface/Processor_Binding_Package ENTITY Processor_Binding_Package; table : Processor_Binding_Table; table_range : Processor_Binding_Range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Xml_Architecture_Parser_Interface SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_api/Xml_Architecture_Parser_Interface/XML_Units TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE; ----! ----Platypus: Updating cheddar-dev: /cheddar_api SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Generic_Index_Lst_Package; END_ENTITY; ENTITY Double_Tasks_Parameters_Package; indexed_table : Blocking_Time_Table; indexed_table_range : Blocking_Time_Range; indexed_table_ : Response_Time_Table; indexed_table_range_ : Response_Time_Range; END_ENTITY; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Buffer_Size_Package; table_range : Buffer_Size_Range; table : Buffer_Size_Table; END_ENTITY; ENTITY Buffer_Result_Package; indexed_table_range : Buffer_Result_Range; indexed_table : Buffer_Result_Table; END_ENTITY; ENTITY Waiting_Time_Package; table_range : Waiting_Time_Range; table : Waiting_Time_Table; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Density_Package; table_range : Density_Range; table : Density_Table; END_ENTITY; ENTITY Densities_Table_Package; indexed_table_range : Densities_Range; indexed_table : Densities_Table; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Deadlock_Package; iterator : Deadlock_Iterator; list_ : Deadlock_List; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_List_Package; iterator : Priority_Inversion_Iterator; list_ : Priority_Inversion_List; END_ENTITY;END_SCHEMA;SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Request_Package; table_range : Framework_Request_Range; table : Framework_Request_Table; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; ENTITY Framework_Response_Package; table_range : Framework_Response_Range; table : Framework_Response_Table; END_ENTITY;END_SCHEMA;SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; ENTITY Scheduling_Result_Per_Processor_Package; indexed_table : Scheduling_Table; indexed_table_range : Scheduling_Table_Range; END_ENTITY;END_SCHEMA;SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; ENTITY Processor_Binding_Package; table : Processor_Binding_Table; table_range : Processor_Binding_Range; END_ENTITY;END_SCHEMA;SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_api SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Generic_Index_Lst_Package; END_ENTITY; ENTITY Double_Tasks_Parameters_Package; indexed_table : Blocking_Time_Table; indexed_table_range : Blocking_Time_Range; indexed_table_ : Response_Time_Table; indexed_table_range_ : Response_Time_Range; END_ENTITY; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Buffer_Size_Package; table_range : Buffer_Size_Range; table : Buffer_Size_Table; END_ENTITY; ENTITY Buffer_Result_Package; indexed_table_range : Buffer_Result_Range; indexed_table : Buffer_Result_Table; END_ENTITY; ENTITY Waiting_Time_Package; table_range : Waiting_Time_Range; table : Waiting_Time_Table; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Density_Package; table_range : Density_Range; table : Density_Table; END_ENTITY; ENTITY Densities_Table_Package; indexed_table_range : Densities_Range; indexed_table : Densities_Table; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Deadlock_Package; iterator : Deadlock_Iterator; list_ : Deadlock_List; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_List_Package; iterator : Priority_Inversion_Iterator; list_ : Priority_Inversion_List; END_ENTITY; END_SCHEMA; SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Request_Package; table_range : Framework_Request_Range; table : Framework_Request_Table; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; ENTITY Framework_Response_Package; table_range : Framework_Response_Range; table : Framework_Response_Table; END_ENTITY; END_SCHEMA; SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; ENTITY Scheduling_Result_Per_Processor_Package; indexed_table : Scheduling_Table; indexed_table_range : Scheduling_Table_Range; END_ENTITY; END_SCHEMA; SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; ENTITY Processor_Binding_Package; table : Processor_Binding_Table; table_range : Processor_Binding_Range; END_ENTITY; END_SCHEMA; SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE; END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT; END_SCHEMA; SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT; END_SCHEMA; ----! ----Platypus: Updating ARINC653 ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_Iterator = Iterator; END_TYPE; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY Error_ID_Type_List_Package; iterator : Error_ID_Type_Iterator; List_ : Error_ID_Type_List; END_ENTITY; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_Iterator = Iterator; END_TYPE; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; ENTITY System_State_Entry_Type_List_Package; iterator : System_State_Entry_Type_Iterator; List_ : System_State_Entry_Type_List; END_ENTITY; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; ENTITY SysHM_Ext_Type_List_Package; iterator : SysHM_Ext_Type_Iterator; List_ : SysHM_Ext_Type_List; END_ENTITY; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; ENTITY Mod_HM_Ext_Type_List_Package; iterator : Mod_HM_Ext_Type_Iterator; List_ : Mod_HM_Ext_Type_List; END_ENTITY; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_Iterator = Iterator; END_TYPE; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; ENTITY PortExt_Type_List_Package; iterator : PortExt_Type_Iterator; List_ : PortExt_Type_List; END_ENTITY; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_Iterator = Iterator; END_TYPE; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcExt_Type_List_Package; iterator : ProcExt_Type_Iterator; List_ : ProcExt_Type_List; END_ENTITY; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_Iterator = Iterator; END_TYPE; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; ENTITY SamplingPortType_List_Package; iterator : SamplingPortType_Iterator; List_ : SamplingPortType_List; END_ENTITY; TYPE QueuingPortType_Iterator = Iterator; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; ENTITY QueuingPortType_List_Package; iterator : QueuingPortType_Iterator; List_ : QueuingPortType_List; END_ENTITY; TYPE ProcessType_Iterator = Iterator; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; ENTITY ProcessType_List_Package; iterator : ProcessType_Iterator; List_ : ProcessType_List; END_ENTITY; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_Iterator = Iterator; END_TYPE; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; ENTITY PartitionExt_Type_List_Package; iterator : PartitionExt_Type_Iterator; List_ : PartitionExt_Type_List; END_ENTITY; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_Iterator = Iterator; END_TYPE; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; ENTITY PartitionType_List_Package; iterator : PartitionType_Iterator; List_ : PartitionType_List; END_ENTITY; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Memory_Ext_Type_List_Package; iterator : Memory_Ext_Type_Iterator; List_ : Memory_Ext_Type_List; END_ENTITY; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; ENTITY Partition_Memory_Element_List_Package; iterator : Partition_Memory_Element_Iterator; List_ : Partition_Memory_Element_List; END_ENTITY; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Partition_Sched_Ext_Type_List_Package; iterator : Partition_Sched_Ext_Type_Iterator; List_ : Partition_Sched_Ext_Type_List; END_ENTITY; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; ENTITY Window_Schedule_Element_List_Package; iterator : Window_Schedule_Element_Iterator; List_ : Window_Schedule_Element_List; END_ENTITY; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Window_Sched_Ext_Type_List_Package; iterator : Window_Sched_Ext_Type_Iterator; List_ : Window_Sched_Ext_Type_List; END_ENTITY; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; ENTITY Partition_Schedule_Element_List_Package; iterator : Partition_Schedule_Element_Iterator; List_ : Partition_Schedule_Element_List; END_ENTITY; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; ENTITY Part_HM_Ext_Type_List_Package; iterator : Part_HM_Ext_Type_Iterator; List_ : Part_HM_Ext_Type_List; END_ENTITY; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_Iterator = Iterator; END_TYPE; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; ENTITY Partition_HM_Type_List_Package; iterator : Partition_HM_Type_Iterator; List_ : Partition_HM_Type_List; END_ENTITY; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_Iterator = Iterator; END_TYPE; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; ENTITY PortMap_Ext_Type_List_Package; iterator : PortMap_Ext_Type_Iterator; List_ : PortMap_Ext_Type_List; END_ENTITY; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_Iterator = Iterator; END_TYPE; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; ENTITY PortMappingType_List_Package; iterator : PortMappingType_Iterator; List_ : PortMappingType_List; END_ENTITY; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_Iterator = Iterator; END_TYPE; TYPE Channel_List = LIST OF Channel; END_TYPE; ENTITY Channel_List_Package; iterator : Channel_Iterator; List_ : Channel_List; END_ENTITY; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_Iterator = Iterator; END_TYPE; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; ENTITY ModExt_Type_List_Package; iterator : ModExt_Type_Iterator; List_ : ModExt_Type_List; END_ENTITY; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/DecOrHexValueType TYPE DecOrHexValueType = STRING; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/IdentifierValueType TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/NameType TYPE NameType = STRING ( 30 ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ARINC_653_Object ENTITY ARINC_653_Object; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ModuleActionType TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionActionType TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Type ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Action_Type ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ErrorLevelType TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ErrorCodeType TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Level_Type ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Type_Iterator TYPE Error_ID_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Type_List TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Error_ID_Type_List_Package ENTITY Error_ID_Type_List_Package; iterator : Error_ID_Type_Iterator; List_ : Error_ID_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/System_State_Entry_Type ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/System_State_Entry_Type_Iterator TYPE System_State_Entry_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/System_State_Entry_Type_List TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/System_State_Entry_Type_List_Package ENTITY System_State_Entry_Type_List_Package; iterator : System_State_Entry_Type_Iterator; List_ : System_State_Entry_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SysHM_Ext_Type ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SysHM_Ext_Type_Iterator TYPE SysHM_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SysHM_Ext_Type_List TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SysHM_Ext_Type_List_Package ENTITY SysHM_Ext_Type_List_Package; iterator : SysHM_Ext_Type_Iterator; List_ : SysHM_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/System_HM_TableType ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Mod_HM_Ext_Type ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Mod_HM_Ext_Type_Iterator TYPE Mod_HM_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Mod_HM_Ext_Type_List TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Mod_HM_Ext_Type_List_Package ENTITY Mod_HM_Ext_Type_List_Package; iterator : Mod_HM_Ext_Type_Iterator; List_ : Mod_HM_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Module_HM_Type ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortExt_Type ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortExt_Type_Iterator TYPE PortExt_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortExt_Type_List TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortExt_Type_List_Package ENTITY PortExt_Type_List_Package; iterator : PortExt_Type_Iterator; List_ : PortExt_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/DirectionType TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortType ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SamplingPortType ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcExt_Type ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcExt_Type_Iterator TYPE ProcExt_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcExt_Type_List TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcExt_Type_List_Package ENTITY ProcExt_Type_List_Package; iterator : ProcExt_Type_Iterator; List_ : ProcExt_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcessType ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/QueuingPortType ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SamplingPortType_Iterator TYPE SamplingPortType_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SamplingPortType_List TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/SamplingPortType_List_Package ENTITY SamplingPortType_List_Package; iterator : SamplingPortType_Iterator; List_ : SamplingPortType_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/QueuingPortType_Iterator TYPE QueuingPortType_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/QueuingPortType_List TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/QueuingPortType_List_Package ENTITY QueuingPortType_List_Package; iterator : QueuingPortType_Iterator; List_ : QueuingPortType_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcessType_Iterator TYPE ProcessType_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcessType_List TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ProcessType_List_Package ENTITY ProcessType_List_Package; iterator : ProcessType_Iterator; List_ : ProcessType_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionExt_Type ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionExt_Type_Iterator TYPE PartitionExt_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionExt_Type_List TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionExt_Type_List_Package ENTITY PartitionExt_Type_List_Package; iterator : PartitionExt_Type_Iterator; List_ : PartitionExt_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/CriticalityType TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionType ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionType_Iterator TYPE PartitionType_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionType_List TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PartitionType_List_Package ENTITY PartitionType_List_Package; iterator : PartitionType_Iterator; List_ : PartitionType_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Memory_Requirements ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Memory_Ext_Type ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Memory_Ext_Type_Iterator TYPE Memory_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Memory_Ext_Type_List TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Memory_Ext_Type_List_Package ENTITY Memory_Ext_Type_List_Package; iterator : Memory_Ext_Type_Iterator; List_ : Memory_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Memory_Element ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Memory_Element_Iterator TYPE Partition_Memory_Element_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Memory_Element_List TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Memory_Element_List_Package ENTITY Partition_Memory_Element_List_Package; iterator : Partition_Memory_Element_Iterator; List_ : Partition_Memory_Element_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Sched_Ext_Type ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Sched_Ext_Type_Iterator TYPE Partition_Sched_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Sched_Ext_Type_List TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Sched_Ext_Type_List_Package ENTITY Partition_Sched_Ext_Type_List_Package; iterator : Partition_Sched_Ext_Type_Iterator; List_ : Partition_Sched_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Schedule_Element ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Schedule_Element_Iterator TYPE Window_Schedule_Element_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Schedule_Element_List TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Schedule_Element_List_Package ENTITY Window_Schedule_Element_List_Package; iterator : Window_Schedule_Element_Iterator; List_ : Window_Schedule_Element_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Sched_Ext_Type ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Sched_Ext_Type_Iterator TYPE Window_Sched_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Sched_Ext_Type_List TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Window_Sched_Ext_Type_List_Package ENTITY Window_Sched_Ext_Type_List_Package; iterator : Window_Sched_Ext_Type_Iterator; List_ : Window_Sched_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Schedule_Element ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Schedule_Element_Iterator TYPE Partition_Schedule_Element_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Schedule_Element_List TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_Schedule_Element_List_Package ENTITY Partition_Schedule_Element_List_Package; iterator : Partition_Schedule_Element_Iterator; List_ : Partition_Schedule_Element_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Module_Schedule_Type ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Part_HM_Ext_Type ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Part_HM_Ext_Type_Iterator TYPE Part_HM_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Part_HM_Ext_Type_List TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Part_HM_Ext_Type_List_Package ENTITY Part_HM_Ext_Type_List_Package; iterator : Part_HM_Ext_Type_Iterator; List_ : Part_HM_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_HM_Type ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_HM_Type_Iterator TYPE Partition_HM_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_HM_Type_List TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Partition_HM_Type_List_Package ENTITY Partition_HM_Type_List_Package; iterator : Partition_HM_Type_Iterator; List_ : Partition_HM_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Pseudo_Partition ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Standard_Partition ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_Choice_Type TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Pseudo_Partition_Choice_Type ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Standard_Partition_Choice_Type ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_Choice_Union ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_Choice ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMap_Ext_Type ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMap_Ext_Type_Iterator TYPE PortMap_Ext_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMap_Ext_Type_List TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMap_Ext_Type_List_Package ENTITY PortMap_Ext_Type_List_Package; iterator : PortMap_Ext_Type_Iterator; List_ : PortMap_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_Iterator TYPE PortMappingType_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_List TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/PortMappingType_List_Package ENTITY PortMappingType_List_Package; iterator : PortMappingType_Iterator; List_ : PortMappingType_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Channel ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Channel_Iterator TYPE Channel_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Channel_List TYPE Channel_List = LIST OF Channel; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/Channel_List_Package ENTITY Channel_List_Package; iterator : Channel_Iterator; List_ : Channel_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ModExt_Type ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ModExt_Type_Iterator TYPE ModExt_Type_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ModExt_Type_List TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ModExt_Type_List_Package ENTITY ModExt_Type_List_Package; iterator : ModExt_Type_Iterator; List_ : ModExt_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /ARINC653/ARINC_653_Schema/ARINC_653_Module ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /ARINC653 SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_Iterator = Iterator; END_TYPE; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY Error_ID_Type_List_Package; iterator : Error_ID_Type_Iterator; List_ : Error_ID_Type_List; END_ENTITY; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_Iterator = Iterator; END_TYPE; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; ENTITY System_State_Entry_Type_List_Package; iterator : System_State_Entry_Type_Iterator; List_ : System_State_Entry_Type_List; END_ENTITY; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; ENTITY SysHM_Ext_Type_List_Package; iterator : SysHM_Ext_Type_Iterator; List_ : SysHM_Ext_Type_List; END_ENTITY; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; ENTITY Mod_HM_Ext_Type_List_Package; iterator : Mod_HM_Ext_Type_Iterator; List_ : Mod_HM_Ext_Type_List; END_ENTITY; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_Iterator = Iterator; END_TYPE; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; ENTITY PortExt_Type_List_Package; iterator : PortExt_Type_Iterator; List_ : PortExt_Type_List; END_ENTITY; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_Iterator = Iterator; END_TYPE; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcExt_Type_List_Package; iterator : ProcExt_Type_Iterator; List_ : ProcExt_Type_List; END_ENTITY; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_Iterator = Iterator; END_TYPE; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; ENTITY SamplingPortType_List_Package; iterator : SamplingPortType_Iterator; List_ : SamplingPortType_List; END_ENTITY; TYPE QueuingPortType_Iterator = Iterator; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; ENTITY QueuingPortType_List_Package; iterator : QueuingPortType_Iterator; List_ : QueuingPortType_List; END_ENTITY; TYPE ProcessType_Iterator = Iterator; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; ENTITY ProcessType_List_Package; iterator : ProcessType_Iterator; List_ : ProcessType_List; END_ENTITY; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_Iterator = Iterator; END_TYPE; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; ENTITY PartitionExt_Type_List_Package; iterator : PartitionExt_Type_Iterator; List_ : PartitionExt_Type_List; END_ENTITY; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_Iterator = Iterator; END_TYPE; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; ENTITY PartitionType_List_Package; iterator : PartitionType_Iterator; List_ : PartitionType_List; END_ENTITY; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Memory_Ext_Type_List_Package; iterator : Memory_Ext_Type_Iterator; List_ : Memory_Ext_Type_List; END_ENTITY; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; ENTITY Partition_Memory_Element_List_Package; iterator : Partition_Memory_Element_Iterator; List_ : Partition_Memory_Element_List; END_ENTITY; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Partition_Sched_Ext_Type_List_Package; iterator : Partition_Sched_Ext_Type_Iterator; List_ : Partition_Sched_Ext_Type_List; END_ENTITY; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; ENTITY Window_Schedule_Element_List_Package; iterator : Window_Schedule_Element_Iterator; List_ : Window_Schedule_Element_List; END_ENTITY; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Window_Sched_Ext_Type_List_Package; iterator : Window_Sched_Ext_Type_Iterator; List_ : Window_Sched_Ext_Type_List; END_ENTITY; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; ENTITY Partition_Schedule_Element_List_Package; iterator : Partition_Schedule_Element_Iterator; List_ : Partition_Schedule_Element_List; END_ENTITY; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; ENTITY Part_HM_Ext_Type_List_Package; iterator : Part_HM_Ext_Type_Iterator; List_ : Part_HM_Ext_Type_List; END_ENTITY; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_Iterator = Iterator; END_TYPE; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; ENTITY Partition_HM_Type_List_Package; iterator : Partition_HM_Type_Iterator; List_ : Partition_HM_Type_List; END_ENTITY; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_Iterator = Iterator; END_TYPE; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; ENTITY PortMap_Ext_Type_List_Package; iterator : PortMap_Ext_Type_Iterator; List_ : PortMap_Ext_Type_List; END_ENTITY; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_Iterator = Iterator; END_TYPE; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; ENTITY PortMappingType_List_Package; iterator : PortMappingType_Iterator; List_ : PortMappingType_List; END_ENTITY; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_Iterator = Iterator; END_TYPE; TYPE Channel_List = LIST OF Channel; END_TYPE; ENTITY Channel_List_Package; iterator : Channel_Iterator; List_ : Channel_List; END_ENTITY; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_Iterator = Iterator; END_TYPE; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; ENTITY ModExt_Type_List_Package; iterator : ModExt_Type_Iterator; List_ : ModExt_Type_List; END_ENTITY; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /ARINC653 SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_Iterator = Iterator; END_TYPE; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY Error_ID_Type_List_Package; iterator : Error_ID_Type_Iterator; List_ : Error_ID_Type_List; END_ENTITY; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_Iterator = Iterator; END_TYPE; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; ENTITY System_State_Entry_Type_List_Package; iterator : System_State_Entry_Type_Iterator; List_ : System_State_Entry_Type_List; END_ENTITY; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; ENTITY SysHM_Ext_Type_List_Package; iterator : SysHM_Ext_Type_Iterator; List_ : SysHM_Ext_Type_List; END_ENTITY; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; ENTITY Mod_HM_Ext_Type_List_Package; iterator : Mod_HM_Ext_Type_Iterator; List_ : Mod_HM_Ext_Type_List; END_ENTITY; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_Iterator = Iterator; END_TYPE; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; ENTITY PortExt_Type_List_Package; iterator : PortExt_Type_Iterator; List_ : PortExt_Type_List; END_ENTITY; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_Iterator = Iterator; END_TYPE; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcExt_Type_List_Package; iterator : ProcExt_Type_Iterator; List_ : ProcExt_Type_List; END_ENTITY; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_Iterator = Iterator; END_TYPE; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; ENTITY SamplingPortType_List_Package; iterator : SamplingPortType_Iterator; List_ : SamplingPortType_List; END_ENTITY; TYPE QueuingPortType_Iterator = Iterator; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; ENTITY QueuingPortType_List_Package; iterator : QueuingPortType_Iterator; List_ : QueuingPortType_List; END_ENTITY; TYPE ProcessType_Iterator = Iterator; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; ENTITY ProcessType_List_Package; iterator : ProcessType_Iterator; List_ : ProcessType_List; END_ENTITY; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_Iterator = Iterator; END_TYPE; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; ENTITY PartitionExt_Type_List_Package; iterator : PartitionExt_Type_Iterator; List_ : PartitionExt_Type_List; END_ENTITY; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_Iterator = Iterator; END_TYPE; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; ENTITY PartitionType_List_Package; iterator : PartitionType_Iterator; List_ : PartitionType_List; END_ENTITY; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Memory_Ext_Type_List_Package; iterator : Memory_Ext_Type_Iterator; List_ : Memory_Ext_Type_List; END_ENTITY; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; ENTITY Partition_Memory_Element_List_Package; iterator : Partition_Memory_Element_Iterator; List_ : Partition_Memory_Element_List; END_ENTITY; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Partition_Sched_Ext_Type_List_Package; iterator : Partition_Sched_Ext_Type_Iterator; List_ : Partition_Sched_Ext_Type_List; END_ENTITY; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; ENTITY Window_Schedule_Element_List_Package; iterator : Window_Schedule_Element_Iterator; List_ : Window_Schedule_Element_List; END_ENTITY; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Window_Sched_Ext_Type_List_Package; iterator : Window_Sched_Ext_Type_Iterator; List_ : Window_Sched_Ext_Type_List; END_ENTITY; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_Iterator = Iterator; END_TYPE; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; ENTITY Partition_Schedule_Element_List_Package; iterator : Partition_Schedule_Element_Iterator; List_ : Partition_Schedule_Element_List; END_ENTITY; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_Iterator = Iterator; END_TYPE; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; ENTITY Part_HM_Ext_Type_List_Package; iterator : Part_HM_Ext_Type_Iterator; List_ : Part_HM_Ext_Type_List; END_ENTITY; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_Iterator = Iterator; END_TYPE; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; ENTITY Partition_HM_Type_List_Package; iterator : Partition_HM_Type_Iterator; List_ : Partition_HM_Type_List; END_ENTITY; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_Iterator = Iterator; END_TYPE; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; ENTITY PortMap_Ext_Type_List_Package; iterator : PortMap_Ext_Type_Iterator; List_ : PortMap_Ext_Type_List; END_ENTITY; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_Iterator = Iterator; END_TYPE; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; ENTITY PortMappingType_List_Package; iterator : PortMappingType_Iterator; List_ : PortMappingType_List; END_ENTITY; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_Iterator = Iterator; END_TYPE; TYPE Channel_List = LIST OF Channel; END_TYPE; ENTITY Channel_List_Package; iterator : Channel_Iterator; List_ : Channel_List; END_ENTITY; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_Iterator = Iterator; END_TYPE; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; ENTITY ModExt_Type_List_Package; iterator : ModExt_Type_Iterator; List_ : ModExt_Type_List; END_ENTITY; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating DP_Graph ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph SCHEMA Generic_Graph; USE FROM basic_types; ENTITY Generic_Node ABSTRACT SUPERTYPE; Id : STRING; END_ENTITY; ENTITY Node_Lists_Package; List_ : Node_Lists; Iterator : Node_Lists_Iterator; END_ENTITY; TYPE Node_Lists = LIST OF Generic_Node; END_TYPE; TYPE Node_Lists_Iterator = Iterator; END_TYPE; ENTITY Generic_Edge ABSTRACT SUPERTYPE; Id : STRING; Node_1 : STRING; Node_2 : STRING; END_ENTITY; ENTITY Edge_Lists_Package; List_ : Edge_Lists; Iterator : Edge_Lists_Iterator; END_ENTITY; TYPE Edge_Lists = LIST OF Generic_Edge; END_TYPE; TYPE Edge_Lists_Iterator = Iterator; END_TYPE; ENTITY Graph; Nodes : Node_Lists; Edges : Edge_Lists; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Generic_Node ENTITY Generic_Node ABSTRACT SUPERTYPE; Id : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Node_Lists_Package ENTITY Node_Lists_Package; List_ : Node_Lists; Iterator : Node_Lists_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Node_Lists TYPE Node_Lists = LIST OF Generic_Node; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Node_Lists_Iterator TYPE Node_Lists_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Generic_Edge ENTITY Generic_Edge ABSTRACT SUPERTYPE; Id : STRING; Node_1 : STRING; Node_2 : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Edge_Lists_Package ENTITY Edge_Lists_Package; List_ : Edge_Lists; Iterator : Edge_Lists_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Edge_Lists TYPE Edge_Lists = LIST OF Generic_Edge; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Edge_Lists_Iterator TYPE Edge_Lists_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/Generic_Graph/Graph ENTITY Graph; Nodes : Node_Lists; Edges : Edge_Lists; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph SCHEMA DP_Graph; USE FROM Generic_Graph; USE FROM Tasks; USE FROM Buffers; USE FROM Messages; USE FROM Dependencies; USE FROM Resources; USE FROM Processors; ENTITY Task_Node SUBTYPE OF ( Generic_Node ); TaskRef : Generic_Task; Kind : Tasks_Type; (*à virer redondant*) (* Ces deux champs sont dérivés (peuvent être retrouvés par exploration de la tache du taskRef)*) Proc : Generic_Processor; (*à virer redondant*) END_ENTITY; ENTITY Time_Triggered_Communication_Edge SUBTYPE OF ( Generic_Edge ); Timing_Property : Time_Triggered_Communication_Timing_Property_Type; Time_Triggered_Communication_Sink : Task_Node; Time_Triggered_Communication_Source : Task_Node; END_ENTITY; ENTITY Resource_Edge SUBTYPE OF ( Generic_Edge ); Resource_Dependency_Resource : Generic_Resource; END_ENTITY; ENTITY Precedence_Edge SUBTYPE OF ( Generic_Edge ); END_ENTITY; ENTITY Communication_Edge SUBTYPE OF ( Generic_Edge ); Communication_Dependency_Object : Generic_Message; END_ENTITY; ENTITY Buffer_Edge SUBTYPE OF ( Generic_Edge ); Buffer_Dependency_Object : Buffer; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Task_Node ENTITY Task_Node SUBTYPE OF ( Generic_Node ); TaskRef : Generic_Task; Kind : Tasks_Type; (*à virer redondant*) (* Ces deux champs sont dérivés (peuvent être retrouvés par exploration de la tache du taskRef)*) Proc : Generic_Processor; (*à virer redondant*) END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Time_Triggered_Communication_Edge ENTITY Time_Triggered_Communication_Edge SUBTYPE OF ( Generic_Edge ); Timing_Property : Time_Triggered_Communication_Timing_Property_Type; Time_Triggered_Communication_Sink : Task_Node; Time_Triggered_Communication_Source : Task_Node; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Resource_Edge ENTITY Resource_Edge SUBTYPE OF ( Generic_Edge ); Resource_Dependency_Resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Precedence_Edge ENTITY Precedence_Edge SUBTYPE OF ( Generic_Edge ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Communication_Edge ENTITY Communication_Edge SUBTYPE OF ( Generic_Edge ); Communication_Dependency_Object : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /DP_Graph/DP_Graph/Buffer_Edge ENTITY Buffer_Edge SUBTYPE OF ( Generic_Edge ); Buffer_Dependency_Object : Buffer; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /DP_Graph SCHEMA Generic_Graph; USE FROM basic_types; ENTITY Generic_Node ABSTRACT SUPERTYPE; Id : STRING; END_ENTITY; ENTITY Node_Lists_Package; List_ : Node_Lists; Iterator : Node_Lists_Iterator; END_ENTITY; TYPE Node_Lists = LIST OF Generic_Node; END_TYPE; TYPE Node_Lists_Iterator = Iterator; END_TYPE; ENTITY Generic_Edge ABSTRACT SUPERTYPE; Id : STRING; Node_1 : STRING; Node_2 : STRING; END_ENTITY; ENTITY Edge_Lists_Package; List_ : Edge_Lists; Iterator : Edge_Lists_Iterator; END_ENTITY; TYPE Edge_Lists = LIST OF Generic_Edge; END_TYPE; TYPE Edge_Lists_Iterator = Iterator; END_TYPE; ENTITY Graph; Nodes : Node_Lists; Edges : Edge_Lists; END_ENTITY;END_SCHEMA;SCHEMA DP_Graph; USE FROM Generic_Graph; USE FROM Tasks; USE FROM Buffers; USE FROM Messages; USE FROM Dependencies; USE FROM Resources; USE FROM Processors; ENTITY Task_Node SUBTYPE OF ( Generic_Node ); TaskRef : Generic_Task; Kind : Tasks_Type; (*à virer redondant*) (* Ces deux champs sont dérivés (peuvent être retrouvés par exploration de la tache du taskRef)*) Proc : Generic_Processor; (*à virer redondant*) END_ENTITY; ENTITY Time_Triggered_Communication_Edge SUBTYPE OF ( Generic_Edge ); Timing_Property : Time_Triggered_Communication_Timing_Property_Type; Time_Triggered_Communication_Sink : Task_Node; Time_Triggered_Communication_Source : Task_Node; END_ENTITY; ENTITY Resource_Edge SUBTYPE OF ( Generic_Edge ); Resource_Dependency_Resource : Generic_Resource; END_ENTITY; ENTITY Precedence_Edge SUBTYPE OF ( Generic_Edge ); END_ENTITY; ENTITY Communication_Edge SUBTYPE OF ( Generic_Edge ); Communication_Dependency_Object : Generic_Message; END_ENTITY; ENTITY Buffer_Edge SUBTYPE OF ( Generic_Edge ); Buffer_Dependency_Object : Buffer; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /DP_Graph SCHEMA Generic_Graph; USE FROM basic_types; ENTITY Generic_Node ABSTRACT SUPERTYPE; Id : STRING; END_ENTITY; ENTITY Node_Lists_Package; List_ : Node_Lists; Iterator : Node_Lists_Iterator; END_ENTITY; TYPE Node_Lists = LIST OF Generic_Node; END_TYPE; TYPE Node_Lists_Iterator = Iterator; END_TYPE; ENTITY Generic_Edge ABSTRACT SUPERTYPE; Id : STRING; Node_1 : STRING; Node_2 : STRING; END_ENTITY; ENTITY Edge_Lists_Package; List_ : Edge_Lists; Iterator : Edge_Lists_Iterator; END_ENTITY; TYPE Edge_Lists = LIST OF Generic_Edge; END_TYPE; TYPE Edge_Lists_Iterator = Iterator; END_TYPE; ENTITY Graph; Nodes : Node_Lists; Edges : Edge_Lists; END_ENTITY; END_SCHEMA; SCHEMA DP_Graph; USE FROM Generic_Graph; USE FROM Tasks; USE FROM Buffers; USE FROM Messages; USE FROM Dependencies; USE FROM Resources; USE FROM Processors; ENTITY Task_Node SUBTYPE OF ( Generic_Node ); TaskRef : Generic_Task; Kind : Tasks_Type; (*à virer redondant*) (* Ces deux champs sont dérivés (peuvent être retrouvés par exploration de la tache du taskRef)*) Proc : Generic_Processor; (*à virer redondant*) END_ENTITY; ENTITY Time_Triggered_Communication_Edge SUBTYPE OF ( Generic_Edge ); Timing_Property : Time_Triggered_Communication_Timing_Property_Type; Time_Triggered_Communication_Sink : Task_Node; Time_Triggered_Communication_Source : Task_Node; END_ENTITY; ENTITY Resource_Edge SUBTYPE OF ( Generic_Edge ); Resource_Dependency_Resource : Generic_Resource; END_ENTITY; ENTITY Precedence_Edge SUBTYPE OF ( Generic_Edge ); END_ENTITY; ENTITY Communication_Edge SUBTYPE OF ( Generic_Edge ); Communication_Dependency_Object : Generic_Message; END_ENTITY; ENTITY Buffer_Edge SUBTYPE OF ( Generic_Edge ); Buffer_Dependency_Object : Buffer; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating FT_Taxonomy ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple SCHEMA Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Accuracy_enum = ENUMERATION OF ( Necessary, Sufficient, NecessaryAndSufficient ); END_TYPE; TYPE Computational_complexity_enum = ENUMERATION OF ( Linear, Polynomial, NP_Hard ); END_TYPE; TYPE Perf_criterion_enum = ENUMERATION OF ( Processor_Utilization_Factor, Worst_Case_Response_Time, Hyper_period_Simulation ); END_TYPE; ENTITY Property; Restricted_Entity : STRING; END_ENTITY; ENTITY Applicability_Constraint; Restricts : OPTIONAL Property; Implies : OPTIONAL SET OF Applicability_constraint; DERIVE all_implied_constraints : LIST OF Applicability_Constraint := get_all_predecessors ( SELF ); INVERSE all_implying_constraints : LIST OF Applicability_Constraint FOR Implies; END_ENTITY; ENTITY Feasibility_Test; Analysis_method : STRING; Performance_criterion : perf_criterion_enum; Accuracy : Accuracy_enum; Computational_Complexity : Computational_Complexity_enum; Requires : SET OF Applicability_Constraint; END_ENTITY; FUNCTION get_all_predecessors ( n : Applicability_Constraint ) : LIST OF Applicability_Constraint; LOCAL r : LIST OF Applicability_Constraint := [ ]; END_LOCAL; IF ( EXISTS ( n.implies ) ) THEN REPEAT no := LOINDEX ( n.Implies ) TO HIINDEX ( n.Implies ); ALIAS curr FOR n.implies [ no]; r := r + curr + SetToList ( curr.all_implied_constraints ); END_ALIAS; END_REPEAT; END_IF; RETURN ( r ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Accuracy_enum TYPE Accuracy_enum = ENUMERATION OF ( Necessary, Sufficient, NecessaryAndSufficient ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Computational_complexity_enum TYPE Computational_complexity_enum = ENUMERATION OF ( Linear, Polynomial, NP_Hard ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Perf_criterion_enum TYPE Perf_criterion_enum = ENUMERATION OF ( Processor_Utilization_Factor, Worst_Case_Response_Time, Hyper_period_Simulation ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Property ENTITY Property; Restricted_Entity : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Applicability_Constraint ENTITY Applicability_Constraint; Restricts : OPTIONAL Property; Implies : OPTIONAL SET OF Applicability_constraint; DERIVE all_implied_constraints : LIST OF Applicability_Constraint := get_all_predecessors ( SELF ); INVERSE all_implying_constraints : LIST OF Applicability_Constraint FOR Implies; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/Feasibility_Test ENTITY Feasibility_Test; Analysis_method : STRING; Performance_criterion : perf_criterion_enum; Accuracy : Accuracy_enum; Computational_Complexity : Computational_Complexity_enum; Requires : SET OF Applicability_Constraint; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Simple/get_all_predecessors FUNCTION get_all_predecessors ( n : Applicability_Constraint ) : LIST OF Applicability_Constraint; LOCAL r : LIST OF Applicability_Constraint := [ ]; END_LOCAL; IF ( EXISTS ( n.implies ) ) THEN REPEAT no := LOINDEX ( n.Implies ) TO HIINDEX ( n.Implies ); ALIAS curr FOR n.implies [ no]; r := r + curr + SetToList ( curr.all_implied_constraints ); END_ALIAS; END_REPEAT; END_IF; RETURN ( r ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Cheddar SCHEMA Feasibility_Tests_Classification_Cheddar; USE FROM Feasibility_Tests_Classification_Simple; ENTITY Property_Cheddar SUBTYPE OF ( Property ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Applicability_Constraint_Cheddar SUBTYPE OF ( Applicability_Constraint ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Feasibility_Test_Cheddar SUBTYPE OF ( Feasibility_Test ); name : STRING; bibliographic_reference : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Cheddar/Property_Cheddar ENTITY Property_Cheddar SUBTYPE OF ( Property ); name : STRING; Literal_description : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Cheddar/Applicability_Constraint_Cheddar ENTITY Applicability_Constraint_Cheddar SUBTYPE OF ( Applicability_Constraint ); name : STRING; Literal_description : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Cheddar/Feasibility_Test_Cheddar ENTITY Feasibility_Test_Cheddar SUBTYPE OF ( Feasibility_Test ); name : STRING; bibliographic_reference : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views SCHEMA Feasibility_Tests_Classification_Basic_Views; USE FROM Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Parameter_Type = ENUMERATION OF ( Performance_Criterion, Accuracy, Computational_Complexity ); END_TYPE; ENTITY Feasibility_Tests_List; Feasibility_tests : SET OF Feasibility_test; END_ENTITY; ENTITY Feasibility_Tests_List_Auto; DERIVE Feasibility_tests : SET OF Feasibility_test := All_Feasibility_tests; END_ENTITY; ENTITY Applicability_Constraints_List; Applicability_Constraints : SET OF Applicability_Constraint; END_ENTITY; ENTITY Applicability_Constraints_List_Auto; DERIVE Applicability_Constraints : SET OF Applicability_Constraint := All_Applicability_Constraints; END_ENTITY; ENTITY Properties_List; Properties : SET OF Property; END_ENTITY; ENTITY Properties_List_Auto; DERIVE Properties : SET OF Property := All_Properties; END_ENTITY; ENTITY From_Applicability_Constraint_To_Feasibility_Tests_View ABSTRACT SUPERTYPE; Parameter : SET OF Applicability_Constraint; DERIVE Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY Specific_Applicability_Constraint_To_Feasibility_Tests_View SUBTYPE OF ( From_Applicability_Constraint_To_Feasibility_Tests_View ); DERIVE SELF\From_Applicability_Constraint_To_Feasibility_Tests_View.Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY From_Feasibility_Test_To_Feasibility_Tests_View; Parameter : Feasibility_Test; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Performance_Criterion_To_Feasibility_Tests_View; Parameter : perf_criterion_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Accuracy_To_Feasibility_Tests_View; Parameter : Accuracy_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Computational_Complexity_To_Feasibility_Tests_View; Parameter : Computational_complexity_enum; Result : SET OF Feasibility_Test; END_ENTITY; FUNCTION All_Feasibility_Tests : SET OF Feasibility_Test; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.FEASIBILITY_TEST' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Properties : SET OF Property; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.PROPERTY' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Applicability_Constraints : SET OF Applicability_Constraint; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.APPLICABILITY_CONSTRAINT' IN TYPEOF ( i ) ) ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Parameter_Type TYPE Parameter_Type = ENUMERATION OF ( Performance_Criterion, Accuracy, Computational_Complexity ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Feasibility_Tests_List ENTITY Feasibility_Tests_List; Feasibility_tests : SET OF Feasibility_test; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Feasibility_Tests_List_Auto ENTITY Feasibility_Tests_List_Auto; DERIVE Feasibility_tests : SET OF Feasibility_test := All_Feasibility_tests; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Applicability_Constraints_List ENTITY Applicability_Constraints_List; Applicability_Constraints : SET OF Applicability_Constraint; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Applicability_Constraints_List_Auto ENTITY Applicability_Constraints_List_Auto; DERIVE Applicability_Constraints : SET OF Applicability_Constraint := All_Applicability_Constraints; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Properties_List ENTITY Properties_List; Properties : SET OF Property; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Properties_List_Auto ENTITY Properties_List_Auto; DERIVE Properties : SET OF Property := All_Properties; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/From_Applicability_Constraint_To_Feasibility_Tests_View ENTITY From_Applicability_Constraint_To_Feasibility_Tests_View ABSTRACT SUPERTYPE; Parameter : SET OF Applicability_Constraint; DERIVE Result : SET OF Feasibility_Test := ?; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/Specific_Applicability_Constraint_To_Feasibility_Tests_View ENTITY Specific_Applicability_Constraint_To_Feasibility_Tests_View SUBTYPE OF ( From_Applicability_Constraint_To_Feasibility_Tests_View ); DERIVE SELF\From_Applicability_Constraint_To_Feasibility_Tests_View.Result : SET OF Feasibility_Test := ?; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/From_Feasibility_Test_To_Feasibility_Tests_View ENTITY From_Feasibility_Test_To_Feasibility_Tests_View; Parameter : Feasibility_Test; Result : SET OF Feasibility_Test; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/From_Performance_Criterion_To_Feasibility_Tests_View ENTITY From_Performance_Criterion_To_Feasibility_Tests_View; Parameter : perf_criterion_enum; Result : SET OF Feasibility_Test; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/From_Accuracy_To_Feasibility_Tests_View ENTITY From_Accuracy_To_Feasibility_Tests_View; Parameter : Accuracy_enum; Result : SET OF Feasibility_Test; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/From_Computational_Complexity_To_Feasibility_Tests_View ENTITY From_Computational_Complexity_To_Feasibility_Tests_View; Parameter : Computational_complexity_enum; Result : SET OF Feasibility_Test; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/All_Feasibility_Tests FUNCTION All_Feasibility_Tests : SET OF Feasibility_Test; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.FEASIBILITY_TEST' IN TYPEOF ( i ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/All_Properties FUNCTION All_Properties : SET OF Property; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.PROPERTY' IN TYPEOF ( i ) ) ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /FT_Taxonomy/Feasibility_Tests_Classification_Basic_Views/All_Applicability_Constraints FUNCTION All_Applicability_Constraints : SET OF Applicability_Constraint; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.APPLICABILITY_CONSTRAINT' IN TYPEOF ( i ) ) ); END_FUNCTION; ----! ----Platypus: Updating cheddar-dev: /FT_Taxonomy SCHEMA Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Accuracy_enum = ENUMERATION OF ( Necessary, Sufficient, NecessaryAndSufficient ); END_TYPE; TYPE Computational_complexity_enum = ENUMERATION OF ( Linear, Polynomial, NP_Hard ); END_TYPE; TYPE Perf_criterion_enum = ENUMERATION OF ( Processor_Utilization_Factor, Worst_Case_Response_Time, Hyper_period_Simulation ); END_TYPE; ENTITY Property; Restricted_Entity : STRING; END_ENTITY; ENTITY Applicability_Constraint; Restricts : OPTIONAL Property; Implies : OPTIONAL SET OF Applicability_constraint; DERIVE all_implied_constraints : LIST OF Applicability_Constraint := get_all_predecessors ( SELF ); INVERSE all_implying_constraints : LIST OF Applicability_Constraint FOR Implies; END_ENTITY; ENTITY Feasibility_Test; Analysis_method : STRING; Performance_criterion : perf_criterion_enum; Accuracy : Accuracy_enum; Computational_Complexity : Computational_Complexity_enum; Requires : SET OF Applicability_Constraint; END_ENTITY; FUNCTION get_all_predecessors ( n : Applicability_Constraint ) : LIST OF Applicability_Constraint; LOCAL r : LIST OF Applicability_Constraint := [ ]; END_LOCAL; IF ( EXISTS ( n.implies ) ) THEN REPEAT no := LOINDEX ( n.Implies ) TO HIINDEX ( n.Implies ); ALIAS curr FOR n.implies [ no]; r := r + curr + SetToList ( curr.all_implied_constraints ); END_ALIAS; END_REPEAT; END_IF; RETURN ( r ); END_FUNCTION;END_SCHEMA;SCHEMA Feasibility_Tests_Classification_Cheddar; USE FROM Feasibility_Tests_Classification_Simple; ENTITY Property_Cheddar SUBTYPE OF ( Property ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Applicability_Constraint_Cheddar SUBTYPE OF ( Applicability_Constraint ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Feasibility_Test_Cheddar SUBTYPE OF ( Feasibility_Test ); name : STRING; bibliographic_reference : STRING; END_ENTITY;END_SCHEMA;SCHEMA Feasibility_Tests_Classification_Basic_Views; USE FROM Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Parameter_Type = ENUMERATION OF ( Performance_Criterion, Accuracy, Computational_Complexity ); END_TYPE; ENTITY Feasibility_Tests_List; Feasibility_tests : SET OF Feasibility_test; END_ENTITY; ENTITY Feasibility_Tests_List_Auto; DERIVE Feasibility_tests : SET OF Feasibility_test := All_Feasibility_tests; END_ENTITY; ENTITY Applicability_Constraints_List; Applicability_Constraints : SET OF Applicability_Constraint; END_ENTITY; ENTITY Applicability_Constraints_List_Auto; DERIVE Applicability_Constraints : SET OF Applicability_Constraint := All_Applicability_Constraints; END_ENTITY; ENTITY Properties_List; Properties : SET OF Property; END_ENTITY; ENTITY Properties_List_Auto; DERIVE Properties : SET OF Property := All_Properties; END_ENTITY; ENTITY From_Applicability_Constraint_To_Feasibility_Tests_View ABSTRACT SUPERTYPE; Parameter : SET OF Applicability_Constraint; DERIVE Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY Specific_Applicability_Constraint_To_Feasibility_Tests_View SUBTYPE OF ( From_Applicability_Constraint_To_Feasibility_Tests_View ); DERIVE SELF\From_Applicability_Constraint_To_Feasibility_Tests_View.Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY From_Feasibility_Test_To_Feasibility_Tests_View; Parameter : Feasibility_Test; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Performance_Criterion_To_Feasibility_Tests_View; Parameter : perf_criterion_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Accuracy_To_Feasibility_Tests_View; Parameter : Accuracy_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Computational_Complexity_To_Feasibility_Tests_View; Parameter : Computational_complexity_enum; Result : SET OF Feasibility_Test; END_ENTITY; FUNCTION All_Feasibility_Tests : SET OF Feasibility_Test; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.FEASIBILITY_TEST' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Properties : SET OF Property; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.PROPERTY' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Applicability_Constraints : SET OF Applicability_Constraint; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.APPLICABILITY_CONSTRAINT' IN TYPEOF ( i ) ) ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /FT_Taxonomy SCHEMA Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Accuracy_enum = ENUMERATION OF ( Necessary, Sufficient, NecessaryAndSufficient ); END_TYPE; TYPE Computational_complexity_enum = ENUMERATION OF ( Linear, Polynomial, NP_Hard ); END_TYPE; TYPE Perf_criterion_enum = ENUMERATION OF ( Processor_Utilization_Factor, Worst_Case_Response_Time, Hyper_period_Simulation ); END_TYPE; ENTITY Property; Restricted_Entity : STRING; END_ENTITY; ENTITY Applicability_Constraint; Restricts : OPTIONAL Property; Implies : OPTIONAL SET OF Applicability_constraint; DERIVE all_implied_constraints : LIST OF Applicability_Constraint := get_all_predecessors ( SELF ); INVERSE all_implying_constraints : LIST OF Applicability_Constraint FOR Implies; END_ENTITY; ENTITY Feasibility_Test; Analysis_method : STRING; Performance_criterion : perf_criterion_enum; Accuracy : Accuracy_enum; Computational_Complexity : Computational_Complexity_enum; Requires : SET OF Applicability_Constraint; END_ENTITY; FUNCTION get_all_predecessors ( n : Applicability_Constraint ) : LIST OF Applicability_Constraint; LOCAL r : LIST OF Applicability_Constraint := [ ]; END_LOCAL; IF ( EXISTS ( n.implies ) ) THEN REPEAT no := LOINDEX ( n.Implies ) TO HIINDEX ( n.Implies ); ALIAS curr FOR n.implies [ no]; r := r + curr + SetToList ( curr.all_implied_constraints ); END_ALIAS; END_REPEAT; END_IF; RETURN ( r ); END_FUNCTION; END_SCHEMA; SCHEMA Feasibility_Tests_Classification_Cheddar; USE FROM Feasibility_Tests_Classification_Simple; ENTITY Property_Cheddar SUBTYPE OF ( Property ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Applicability_Constraint_Cheddar SUBTYPE OF ( Applicability_Constraint ); name : STRING; Literal_description : STRING; END_ENTITY; ENTITY Feasibility_Test_Cheddar SUBTYPE OF ( Feasibility_Test ); name : STRING; bibliographic_reference : STRING; END_ENTITY; END_SCHEMA; SCHEMA Feasibility_Tests_Classification_Basic_Views; USE FROM Feasibility_Tests_Classification_Simple; USE FROM express_toolsbox_functions; TYPE Parameter_Type = ENUMERATION OF ( Performance_Criterion, Accuracy, Computational_Complexity ); END_TYPE; ENTITY Feasibility_Tests_List; Feasibility_tests : SET OF Feasibility_test; END_ENTITY; ENTITY Feasibility_Tests_List_Auto; DERIVE Feasibility_tests : SET OF Feasibility_test := All_Feasibility_tests; END_ENTITY; ENTITY Applicability_Constraints_List; Applicability_Constraints : SET OF Applicability_Constraint; END_ENTITY; ENTITY Applicability_Constraints_List_Auto; DERIVE Applicability_Constraints : SET OF Applicability_Constraint := All_Applicability_Constraints; END_ENTITY; ENTITY Properties_List; Properties : SET OF Property; END_ENTITY; ENTITY Properties_List_Auto; DERIVE Properties : SET OF Property := All_Properties; END_ENTITY; ENTITY From_Applicability_Constraint_To_Feasibility_Tests_View ABSTRACT SUPERTYPE; Parameter : SET OF Applicability_Constraint; DERIVE Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY Specific_Applicability_Constraint_To_Feasibility_Tests_View SUBTYPE OF ( From_Applicability_Constraint_To_Feasibility_Tests_View ); DERIVE SELF\From_Applicability_Constraint_To_Feasibility_Tests_View.Result : SET OF Feasibility_Test := ?; END_ENTITY; ENTITY From_Feasibility_Test_To_Feasibility_Tests_View; Parameter : Feasibility_Test; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Performance_Criterion_To_Feasibility_Tests_View; Parameter : perf_criterion_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Accuracy_To_Feasibility_Tests_View; Parameter : Accuracy_enum; Result : SET OF Feasibility_Test; END_ENTITY; ENTITY From_Computational_Complexity_To_Feasibility_Tests_View; Parameter : Computational_complexity_enum; Result : SET OF Feasibility_Test; END_ENTITY; FUNCTION All_Feasibility_Tests : SET OF Feasibility_Test; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.FEASIBILITY_TEST' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Properties : SET OF Property; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.PROPERTY' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION All_Applicability_Constraints : SET OF Applicability_Constraint; LOCAL insts : SET OF GENERIC := allModelInstances; END_LOCAL; RETURN ( QUERY ( i <* insts | 'FEASIBILITY_TESTS_CLASSIFICATION_SIMPLE.APPLICABILITY_CONSTRAINT' IN TYPEOF ( i ) ) ); END_FUNCTION; END_SCHEMA; ----! ----Platypus: Updating cheddar_applicability_constraints ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/all_tasks_are_periodic_constraint SCHEMA all_tasks_are_periodic_constraint; USE FROM Tasks; RULE all_tasks_are_periodic FOR ( generic_task ); WHERE R4 : SIZEOF ( QUERY ( t <* generic_task | NOT ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/all_tasks_are_periodic_constraint/all_tasks_are_periodic RULE all_tasks_are_periodic FOR ( generic_task ); WHERE R4 : SIZEOF ( QUERY ( t <* generic_task | NOT ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Static_priorities_RM_EDF_DM_constraint SCHEMA Static_priorities_RM_EDF_DM_constraint; USE FROM Scheduler; RULE Static_priorities_RM_EDF_DM FOR ( Generic_Scheduler ); WHERE R1 : SIZEOF ( QUERY ( s <* generic_scheduler | NOT ( 'SCHEDULER.EARLIEST_DEADLINE_FIRST_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.RATE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.DEADLINE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL' IN TYPEOF ( s ) ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Static_priorities_RM_EDF_DM_constraint/Static_priorities_RM_EDF_DM RULE Static_priorities_RM_EDF_DM FOR ( Generic_Scheduler ); WHERE R1 : SIZEOF ( QUERY ( s <* generic_scheduler | NOT ( 'SCHEDULER.EARLIEST_DEADLINE_FIRST_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.RATE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.DEADLINE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL' IN TYPEOF ( s ) ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Preemptive_or_not_preemptive_constraint SCHEMA Preemptive_or_not_preemptive_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Preemptive_or_not_preemptive FOR ( Generic_Scheduler ); WHERE R2 : SIZEOF ( QUERY ( s <* generic_scheduler | ( s.parameters.preemptivity <> preemptive ) OR ( s.parameters.preemptivity <> not_preemptive ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Preemptive_or_not_preemptive_constraint/Preemptive_or_not_preemptive RULE Preemptive_or_not_preemptive FOR ( Generic_Scheduler ); WHERE R2 : SIZEOF ( QUERY ( s <* generic_scheduler | ( s.parameters.preemptivity <> preemptive ) OR ( s.parameters.preemptivity <> not_preemptive ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Quantum_equals_zero_constraint SCHEMA Quantum_equals_zero_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Quantum_equals_zero FOR ( Generic_Scheduler ); WHERE R3 : SIZEOF ( QUERY ( s <* generic_scheduler | s.parameters.quantum <> 0 ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Quantum_equals_zero_constraint/Quantum_equals_zero RULE Quantum_equals_zero FOR ( Generic_Scheduler ); WHERE R3 : SIZEOF ( QUERY ( s <* generic_scheduler | s.parameters.quantum <> 0 ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/no_shared_resources_constraint SCHEMA no_shared_resources_constraint; USE FROM Resources; RULE no_shared_resources FOR ( Generic_Resource ); WHERE R6 : ( SIZEOF ( Generic_Resource ) = 0 ); END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/no_shared_resources_constraint/no_shared_resources RULE no_shared_resources FOR ( Generic_Resource ); WHERE R6 : ( SIZEOF ( Generic_Resource ) = 0 ); END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/no_shared_cpu_constraint SCHEMA no_shared_cpu_constraint; USE FROM Address_spaces; RULE no_shared_cpu FOR ( Address_space ); WHERE R7 : SIZEOF ( QUERY ( a1 <* Address_space | SIZEOF ( QUERY ( a2 <* Address_space | ( ( a1 <> a2 ) AND ( a2.Cpu_Name = a1.Cpu_Name ) ) ) ) > 0 ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/no_shared_cpu_constraint/no_shared_cpu RULE no_shared_cpu FOR ( Address_space ); WHERE R7 : SIZEOF ( QUERY ( a1 <* Address_space | SIZEOF ( QUERY ( a2 <* Address_space | ( ( a1 <> a2 ) AND ( a2.Cpu_Name = a1.Cpu_Name ) ) ) ) > 0 ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/all_tasks_are_periodic_or_sporadic_constraint SCHEMA all_tasks_are_periodic_or_sporadic_constraint; USE FROM Tasks; RULE All_Tasks_Are_Periodic_or_sporadic FOR ( Generic_Task ); WHERE R8 : SIZEOF ( QUERY ( t <* generic_task | NOT ( ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) OR NOT ( 'TASKS.SPORADIC_TASK' IN TYPEOF ( t ) ) ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/all_tasks_are_periodic_or_sporadic_constraint/All_Tasks_Are_Periodic_or_sporadic RULE All_Tasks_Are_Periodic_or_sporadic FOR ( Generic_Task ); WHERE R8 : SIZEOF ( QUERY ( t <* generic_task | NOT ( ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) OR NOT ( 'TASKS.SPORADIC_TASK' IN TYPEOF ( t ) ) ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/At_Least_One_Data_constraint SCHEMA At_Least_One_Data_constraint; USE FROM Resources; RULE At_Least_One_Data FOR ( Generic_Resource ); WHERE R9 : SIZEOF ( generic_resource ) > 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/At_Least_One_Data_constraint/At_Least_One_Data RULE At_Least_One_Data FOR ( Generic_Resource ); WHERE R9 : SIZEOF ( generic_resource ) > 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/No_Buffer_constraint SCHEMA No_Buffer_constraint; USE FROM Buffers; RULE No_Buffer FOR ( Buffer ); WHERE R5 : SIZEOF ( Buffer ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/No_Buffer_constraint/No_Buffer RULE No_Buffer FOR ( Buffer ); WHERE R5 : SIZEOF ( Buffer ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Data_Connectivity_constraint SCHEMA Data_Connectivity_constraint; USE FROM Resources; USE FROM Dependencies; RULE Data_Connectivity FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R10 : SIZEOF ( QUERY ( r <* Generic_Resource | SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) < 2 ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Data_Connectivity_constraint/Data_Connectivity RULE Data_Connectivity FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R10 : SIZEOF ( QUERY ( r <* Generic_Resource | SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) < 2 ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Allowed_Protocol_constraint SCHEMA Allowed_Protocol_constraint; USE FROM Resources; RULE Allowed_Protocol FOR ( Generic_Resource ); WHERE R11 : SIZEOF ( QUERY ( r <* Generic_Resource | NOT ( r.protocol IN [ Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol] ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Allowed_Protocol_constraint/Allowed_Protocol RULE Allowed_Protocol FOR ( Generic_Resource ); WHERE R11 : SIZEOF ( QUERY ( r <* Generic_Resource | NOT ( r.protocol IN [ Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol] ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Ceiling_Priority_assignment_constraint SCHEMA Ceiling_Priority_assignment_constraint; USE FROM Resources; USE FROM Dependencies; (* si pcp ou ipcp alors le ceiling_priority doit être >= de la priority des taches qui utilisent le Generic_Resource *) RULE Ceiling_Priority_assignment FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R12 : SIZEOF ( QUERY ( d <* Resource_Dependency_Type | ( d.protocol IN [ Priority_Ceiling_Protocol, Immediate_Priority_Ceiling_Protocol] ) AND ( d.resource_dependency_resource.ceiling_priority < d.resource_dependency_task.Priority ) ) ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Ceiling_Priority_assignment_constraint/Ceiling_Priority_assignment RULE Ceiling_Priority_assignment FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R12 : SIZEOF ( QUERY ( d <* Resource_Dependency_Type | ( d.protocol IN [ Priority_Ceiling_Protocol, Immediate_Priority_Ceiling_Protocol] ) AND ( d.resource_dependency_resource.ceiling_priority < d.resource_dependency_task.Priority ) ) ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/No_Hierarchical_Scheduling_constraint SCHEMA No_Hierarchical_Scheduling_constraint; USE FROM Deployments; RULE No_Hierarchical_Scheduling FOR ( Generic_Deployment ); WHERE R7 : SIZEOF ( Generic_Deployment ) = 0; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/No_Hierarchical_Scheduling_constraint/No_Hierarchical_Scheduling RULE No_Hierarchical_Scheduling FOR ( Generic_Deployment ); WHERE R7 : SIZEOF ( Generic_Deployment ) = 0; END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Pip_No_Deadlock_constraint SCHEMA Pip_No_Deadlock_constraint; USE FROM Resources; USE FROM Dependencies; RULE Pip_No_Deadlock FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R13 : ( SIZEOF ( QUERY ( r <* Generic_Resource | ( ( r.protocol = Priority_Inheritance_Protocol ) AND ( SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) ) < 2 ) ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( d <* Dependency | d.discriminant <> Resource_Dependency_Type ) ) = 0 ); END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/Pip_No_Deadlock_constraint/Pip_No_Deadlock RULE Pip_No_Deadlock FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R13 : ( SIZEOF ( QUERY ( r <* Generic_Resource | ( ( r.protocol = Priority_Inheritance_Protocol ) AND ( SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) ) < 2 ) ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( d <* Dependency | d.discriminant <> Resource_Dependency_Type ) ) = 0 ); END_RULE; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/At_least_One_Blackboard_constraint SCHEMA At_least_One_Blackboard_constraint; USE FROM Dependencies; RULE At_least_One_Blackboard FOR ( Black_board_Buffer_Dependency_Type ); WHERE R13 : SIZEOF ( Black_board_Buffer_Dependency_Type ) > 1; END_RULE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_applicability_constraints/At_least_One_Blackboard_constraint/At_least_One_Blackboard RULE At_least_One_Blackboard FOR ( Black_board_Buffer_Dependency_Type ); WHERE R13 : SIZEOF ( Black_board_Buffer_Dependency_Type ) > 1; END_RULE; ----! ----Platypus: Updating cheddar-dev: /cheddar_applicability_constraints SCHEMA all_tasks_are_periodic_constraint; USE FROM Tasks; RULE all_tasks_are_periodic FOR ( generic_task ); WHERE R4 : SIZEOF ( QUERY ( t <* generic_task | NOT ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA Static_priorities_RM_EDF_DM_constraint; USE FROM Scheduler; RULE Static_priorities_RM_EDF_DM FOR ( Generic_Scheduler ); WHERE R1 : SIZEOF ( QUERY ( s <* generic_scheduler | NOT ( 'SCHEDULER.EARLIEST_DEADLINE_FIRST_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.RATE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.DEADLINE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL' IN TYPEOF ( s ) ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA Preemptive_or_not_preemptive_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Preemptive_or_not_preemptive FOR ( Generic_Scheduler ); WHERE R2 : SIZEOF ( QUERY ( s <* generic_scheduler | ( s.parameters.preemptivity <> preemptive ) OR ( s.parameters.preemptivity <> not_preemptive ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA Quantum_equals_zero_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Quantum_equals_zero FOR ( Generic_Scheduler ); WHERE R3 : SIZEOF ( QUERY ( s <* generic_scheduler | s.parameters.quantum <> 0 ) ) = 0; END_RULE;END_SCHEMA;SCHEMA no_shared_resources_constraint; USE FROM Resources; RULE no_shared_resources FOR ( Generic_Resource ); WHERE R6 : ( SIZEOF ( Generic_Resource ) = 0 ); END_RULE;END_SCHEMA;SCHEMA no_shared_cpu_constraint; USE FROM Address_spaces; RULE no_shared_cpu FOR ( Address_space ); WHERE R7 : SIZEOF ( QUERY ( a1 <* Address_space | SIZEOF ( QUERY ( a2 <* Address_space | ( ( a1 <> a2 ) AND ( a2.Cpu_Name = a1.Cpu_Name ) ) ) ) > 0 ) ) = 0; END_RULE;END_SCHEMA;SCHEMA all_tasks_are_periodic_or_sporadic_constraint; USE FROM Tasks; RULE All_Tasks_Are_Periodic_or_sporadic FOR ( Generic_Task ); WHERE R8 : SIZEOF ( QUERY ( t <* generic_task | NOT ( ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) OR NOT ( 'TASKS.SPORADIC_TASK' IN TYPEOF ( t ) ) ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA At_Least_One_Data_constraint; USE FROM Resources; RULE At_Least_One_Data FOR ( Generic_Resource ); WHERE R9 : SIZEOF ( generic_resource ) > 0; END_RULE;END_SCHEMA;SCHEMA No_Buffer_constraint; USE FROM Buffers; RULE No_Buffer FOR ( Buffer ); WHERE R5 : SIZEOF ( Buffer ) = 0; END_RULE;END_SCHEMA;SCHEMA Data_Connectivity_constraint; USE FROM Resources; USE FROM Dependencies; RULE Data_Connectivity FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R10 : SIZEOF ( QUERY ( r <* Generic_Resource | SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) < 2 ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA Allowed_Protocol_constraint; USE FROM Resources; RULE Allowed_Protocol FOR ( Generic_Resource ); WHERE R11 : SIZEOF ( QUERY ( r <* Generic_Resource | NOT ( r.protocol IN [ Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol] ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA Ceiling_Priority_assignment_constraint; USE FROM Resources; USE FROM Dependencies; (* si pcp ou ipcp alors le ceiling_priority doit être >= de la priority des taches qui utilisent le Generic_Resource *) RULE Ceiling_Priority_assignment FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R12 : SIZEOF ( QUERY ( d <* Resource_Dependency_Type | ( d.protocol IN [ Priority_Ceiling_Protocol, Immediate_Priority_Ceiling_Protocol] ) AND ( d.resource_dependency_resource.ceiling_priority < d.resource_dependency_task.Priority ) ) ) = 0; END_RULE;END_SCHEMA;SCHEMA No_Hierarchical_Scheduling_constraint; USE FROM Deployments; RULE No_Hierarchical_Scheduling FOR ( Generic_Deployment ); WHERE R7 : SIZEOF ( Generic_Deployment ) = 0; END_RULE;END_SCHEMA;SCHEMA Pip_No_Deadlock_constraint; USE FROM Resources; USE FROM Dependencies; RULE Pip_No_Deadlock FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R13 : ( SIZEOF ( QUERY ( r <* Generic_Resource | ( ( r.protocol = Priority_Inheritance_Protocol ) AND ( SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) ) < 2 ) ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( d <* Dependency | d.discriminant <> Resource_Dependency_Type ) ) = 0 ); END_RULE;END_SCHEMA;SCHEMA At_least_One_Blackboard_constraint; USE FROM Dependencies; RULE At_least_One_Blackboard FOR ( Black_board_Buffer_Dependency_Type ); WHERE R13 : SIZEOF ( Black_board_Buffer_Dependency_Type ) > 1; END_RULE;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_applicability_constraints SCHEMA all_tasks_are_periodic_constraint; USE FROM Tasks; RULE all_tasks_are_periodic FOR ( generic_task ); WHERE R4 : SIZEOF ( QUERY ( t <* generic_task | NOT ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA Static_priorities_RM_EDF_DM_constraint; USE FROM Scheduler; RULE Static_priorities_RM_EDF_DM FOR ( Generic_Scheduler ); WHERE R1 : SIZEOF ( QUERY ( s <* generic_scheduler | NOT ( 'SCHEDULER.EARLIEST_DEADLINE_FIRST_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.RATE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.DEADLINE_MONOTONIC_PROTOCOL' IN TYPEOF ( s ) ) OR ( 'SCHEDULER.POSIX_1003_HIGHEST_PRIORITY_FIRST_PROTOCOL' IN TYPEOF ( s ) ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA Preemptive_or_not_preemptive_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Preemptive_or_not_preemptive FOR ( Generic_Scheduler ); WHERE R2 : SIZEOF ( QUERY ( s <* generic_scheduler | ( s.parameters.preemptivity <> preemptive ) OR ( s.parameters.preemptivity <> not_preemptive ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA Quantum_equals_zero_constraint; USE FROM Scheduler; USE FROM Scheduler_Interface; RULE Quantum_equals_zero FOR ( Generic_Scheduler ); WHERE R3 : SIZEOF ( QUERY ( s <* generic_scheduler | s.parameters.quantum <> 0 ) ) = 0; END_RULE; END_SCHEMA; SCHEMA no_shared_resources_constraint; USE FROM Resources; RULE no_shared_resources FOR ( Generic_Resource ); WHERE R6 : ( SIZEOF ( Generic_Resource ) = 0 ); END_RULE; END_SCHEMA; SCHEMA no_shared_cpu_constraint; USE FROM Address_spaces; RULE no_shared_cpu FOR ( Address_space ); WHERE R7 : SIZEOF ( QUERY ( a1 <* Address_space | SIZEOF ( QUERY ( a2 <* Address_space | ( ( a1 <> a2 ) AND ( a2.Cpu_Name = a1.Cpu_Name ) ) ) ) > 0 ) ) = 0; END_RULE; END_SCHEMA; SCHEMA all_tasks_are_periodic_or_sporadic_constraint; USE FROM Tasks; RULE All_Tasks_Are_Periodic_or_sporadic FOR ( Generic_Task ); WHERE R8 : SIZEOF ( QUERY ( t <* generic_task | NOT ( ( 'TASKS.PERIODIC_TASK' IN TYPEOF ( t ) ) OR NOT ( 'TASKS.SPORADIC_TASK' IN TYPEOF ( t ) ) ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA At_Least_One_Data_constraint; USE FROM Resources; RULE At_Least_One_Data FOR ( Generic_Resource ); WHERE R9 : SIZEOF ( generic_resource ) > 0; END_RULE; END_SCHEMA; SCHEMA No_Buffer_constraint; USE FROM Buffers; RULE No_Buffer FOR ( Buffer ); WHERE R5 : SIZEOF ( Buffer ) = 0; END_RULE; END_SCHEMA; SCHEMA Data_Connectivity_constraint; USE FROM Resources; USE FROM Dependencies; RULE Data_Connectivity FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R10 : SIZEOF ( QUERY ( r <* Generic_Resource | SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) < 2 ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA Allowed_Protocol_constraint; USE FROM Resources; RULE Allowed_Protocol FOR ( Generic_Resource ); WHERE R11 : SIZEOF ( QUERY ( r <* Generic_Resource | NOT ( r.protocol IN [ Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol] ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA Ceiling_Priority_assignment_constraint; USE FROM Resources; USE FROM Dependencies; (* si pcp ou ipcp alors le ceiling_priority doit être >= de la priority des taches qui utilisent le Generic_Resource *) RULE Ceiling_Priority_assignment FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R12 : SIZEOF ( QUERY ( d <* Resource_Dependency_Type | ( d.protocol IN [ Priority_Ceiling_Protocol, Immediate_Priority_Ceiling_Protocol] ) AND ( d.resource_dependency_resource.ceiling_priority < d.resource_dependency_task.Priority ) ) ) = 0; END_RULE; END_SCHEMA; SCHEMA No_Hierarchical_Scheduling_constraint; USE FROM Deployments; RULE No_Hierarchical_Scheduling FOR ( Generic_Deployment ); WHERE R7 : SIZEOF ( Generic_Deployment ) = 0; END_RULE; END_SCHEMA; SCHEMA Pip_No_Deadlock_constraint; USE FROM Resources; USE FROM Dependencies; RULE Pip_No_Deadlock FOR ( Generic_Resource, Resource_Dependency_Type ); WHERE R13 : ( SIZEOF ( QUERY ( r <* Generic_Resource | ( ( r.protocol = Priority_Inheritance_Protocol ) AND ( SIZEOF ( QUERY ( d <* Resource_Dependency_Type | d.resource_dependency_resource = r ) ) < 2 ) ) ) ) = 0 ) AND ( SIZEOF ( QUERY ( d <* Dependency | d.discriminant <> Resource_Dependency_Type ) ) = 0 ); END_RULE; END_SCHEMA; SCHEMA At_least_One_Blackboard_constraint; USE FROM Dependencies; RULE At_least_One_Blackboard FOR ( Black_board_Buffer_Dependency_Type ); WHERE R13 : SIZEOF ( Black_board_Buffer_Dependency_Type ) > 1; END_RULE; END_SCHEMA; ----! ----Platypus: Updating cheddar_design_patterns ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns SCHEMA Design_Patterns; USE FROM Applicability_constraints; TYPE Communication_Design_Patterns_Type = ENUMERATION OF ( Time_Triggered_Type, Ravenscar_Type, Blackboard_Type, Queued_Buffer_Type, Unplugged_Type ); END_TYPE; TYPE Environmental_Design_Patterns_Type = ENUMERATION OF ( ARINC_Type, Partition_Type, Flat_Uniprocessor_Type, Hierarchical_Type, Multi_Processor_Type ); END_TYPE; ENTITY Generic_Design_Pattern; Schema_Name : STRING; END_ENTITY; ENTITY Communication_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); Self_Type : Communication_Design_Patterns_Type; END_ENTITY; ENTITY Environmental_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns/Communication_Design_Patterns_Type TYPE Communication_Design_Patterns_Type = ENUMERATION OF ( Time_Triggered_Type, Ravenscar_Type, Blackboard_Type, Queued_Buffer_Type, Unplugged_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns/Environmental_Design_Patterns_Type TYPE Environmental_Design_Patterns_Type = ENUMERATION OF ( ARINC_Type, Partition_Type, Flat_Uniprocessor_Type, Hierarchical_Type, Multi_Processor_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns/Generic_Design_Pattern ENTITY Generic_Design_Pattern; Schema_Name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns/Communication_Design_Pattern ENTITY Communication_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); Self_Type : Communication_Design_Patterns_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Design_Patterns/Environmental_Design_Pattern ENTITY Environmental_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Synchronous_data_flow SCHEMA Synchronous_data_flow; USE FROM all_tasks_are_periodic_constraint; USE FROM No_Buffer_constraint; USE FROM no_shared_resources_constraint; USE FROM data_sharing_protocol_constraint; USE FROM no_shared_cpu_constraint;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Ravenscar SCHEMA Ravenscar; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM At_Least_One_Data_constraint; USE FROM Data_Connectivity_constraint; USE FROM Allowed_Protocol_constraint; USE FROM Ceiling_Priority_assignment_constraint; USE FROM Pip_No_Deadlock_constraint;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Unplugged SCHEMA Unplugged; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM No_dependencies_constraint; USE FROM no_shared_cpu_constraint;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Queued_Buffer SCHEMA Queued_Buffer; USE FROM all_tasks_are_periodic_constraint;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Black_Board SCHEMA Black_Board; USE FROM all_tasks_are_periodic_constraint;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_design_patterns/Flat_Monoprocessor SCHEMA Flat_Monoprocessor; USE FROM Static_priorities_RM_EDF_DM_constraint; USE FROM Preemptive_or_not_preemptive_constraint; USE FROM Quantum_equals_zero_constraint; USE FROM No_Hierarchical_Scheduling_constraint;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_design_patterns SCHEMA Design_Patterns; USE FROM Applicability_constraints; TYPE Communication_Design_Patterns_Type = ENUMERATION OF ( Time_Triggered_Type, Ravenscar_Type, Blackboard_Type, Queued_Buffer_Type, Unplugged_Type ); END_TYPE; TYPE Environmental_Design_Patterns_Type = ENUMERATION OF ( ARINC_Type, Partition_Type, Flat_Uniprocessor_Type, Hierarchical_Type, Multi_Processor_Type ); END_TYPE; ENTITY Generic_Design_Pattern; Schema_Name : STRING; END_ENTITY; ENTITY Communication_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); Self_Type : Communication_Design_Patterns_Type; END_ENTITY; ENTITY Environmental_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); END_ENTITY;END_SCHEMA;SCHEMA Synchronous_data_flow; USE FROM all_tasks_are_periodic_constraint; USE FROM No_Buffer_constraint; USE FROM no_shared_resources_constraint; USE FROM data_sharing_protocol_constraint; USE FROM no_shared_cpu_constraint;END_SCHEMA;SCHEMA Ravenscar; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM At_Least_One_Data_constraint; USE FROM Data_Connectivity_constraint; USE FROM Allowed_Protocol_constraint; USE FROM Ceiling_Priority_assignment_constraint; USE FROM Pip_No_Deadlock_constraint;END_SCHEMA;SCHEMA Unplugged; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM No_dependencies_constraint; USE FROM no_shared_cpu_constraint;END_SCHEMA;SCHEMA Queued_Buffer; USE FROM all_tasks_are_periodic_constraint;END_SCHEMA;SCHEMA Black_Board; USE FROM all_tasks_are_periodic_constraint;END_SCHEMA;SCHEMA Flat_Monoprocessor; USE FROM Static_priorities_RM_EDF_DM_constraint; USE FROM Preemptive_or_not_preemptive_constraint; USE FROM Quantum_equals_zero_constraint; USE FROM No_Hierarchical_Scheduling_constraint;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_design_patterns SCHEMA Design_Patterns; USE FROM Applicability_constraints; TYPE Communication_Design_Patterns_Type = ENUMERATION OF ( Time_Triggered_Type, Ravenscar_Type, Blackboard_Type, Queued_Buffer_Type, Unplugged_Type ); END_TYPE; TYPE Environmental_Design_Patterns_Type = ENUMERATION OF ( ARINC_Type, Partition_Type, Flat_Uniprocessor_Type, Hierarchical_Type, Multi_Processor_Type ); END_TYPE; ENTITY Generic_Design_Pattern; Schema_Name : STRING; END_ENTITY; ENTITY Communication_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); Self_Type : Communication_Design_Patterns_Type; END_ENTITY; ENTITY Environmental_Design_Pattern SUBTYPE OF ( Generic_Design_Pattern ); END_ENTITY; END_SCHEMA; SCHEMA Synchronous_data_flow; USE FROM all_tasks_are_periodic_constraint; USE FROM No_Buffer_constraint; USE FROM no_shared_resources_constraint; USE FROM data_sharing_protocol_constraint; USE FROM no_shared_cpu_constraint; END_SCHEMA; SCHEMA Ravenscar; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM At_Least_One_Data_constraint; USE FROM Data_Connectivity_constraint; USE FROM Allowed_Protocol_constraint; USE FROM Ceiling_Priority_assignment_constraint; USE FROM Pip_No_Deadlock_constraint; END_SCHEMA; SCHEMA Unplugged; USE FROM all_tasks_are_periodic_or_sporadic_constraint; USE FROM No_Buffer_constraint; USE FROM No_dependencies_constraint; USE FROM no_shared_cpu_constraint; END_SCHEMA; SCHEMA Queued_Buffer; USE FROM all_tasks_are_periodic_constraint; END_SCHEMA; SCHEMA Black_Board; USE FROM all_tasks_are_periodic_constraint; END_SCHEMA; SCHEMA Flat_Monoprocessor; USE FROM Static_priorities_RM_EDF_DM_constraint; USE FROM Preemptive_or_not_preemptive_constraint; USE FROM Quantum_equals_zero_constraint; USE FROM No_Hierarchical_Scheduling_constraint; END_SCHEMA; ----! ----Platypus: Updating Applicability_Constraints_Main_Structure ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure SCHEMA Applicability_Constraints_Main_Structure; USE FROM basic_types; ENTITY Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraint; Name : STRING; Result : BOOLEAN; Corresponding_Function : Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraints_List_Package; List_ : Applicability_Constraints_List; Iterator : Applicability_Constraints_List_Iterator; END_ENTITY; TYPE Applicability_Constraints_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraints_List_Iterator = Iterator; END_TYPE; ENTITY Applicability_Constraint_Case; Name : STRING; Feasibility_Test_Names : STRING; Applicability_Constraints : Applicability_Constraints_List; END_ENTITY; ENTITY Applicability_Constraint_Cases_List_Package; List_ : Applicability_Constraint_Cases_List; Iterator : Applicability_Constraint_Cases_List_Iterator; END_ENTITY; TYPE Applicability_Constraint_Cases_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraint_Cases_List_Iterator = Iterator; END_TYPE; ENTITY All_Cases_Structure; Cases : Applicability_Constraint_Cases_List; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint_Function ENTITY Applicability_Constraint_Function; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint ENTITY Applicability_Constraint; Name : STRING; Result : BOOLEAN; Corresponding_Function : Applicability_Constraint_Function; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraints_List_Package ENTITY Applicability_Constraints_List_Package; List_ : Applicability_Constraints_List; Iterator : Applicability_Constraints_List_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraints_List TYPE Applicability_Constraints_List = LIST OF Applicability_Constraint_Case; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraints_List_Iterator TYPE Applicability_Constraints_List_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint_Case ENTITY Applicability_Constraint_Case; Name : STRING; Feasibility_Test_Names : STRING; Applicability_Constraints : Applicability_Constraints_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint_Cases_List_Package ENTITY Applicability_Constraint_Cases_List_Package; List_ : Applicability_Constraint_Cases_List; Iterator : Applicability_Constraint_Cases_List_Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint_Cases_List TYPE Applicability_Constraint_Cases_List = LIST OF Applicability_Constraint_Case; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/Applicability_Constraint_Cases_List_Iterator TYPE Applicability_Constraint_Cases_List_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /Applicability_Constraints_Main_Structure/Applicability_Constraints_Main_Structure/All_Cases_Structure ENTITY All_Cases_Structure; Cases : Applicability_Constraint_Cases_List; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /Applicability_Constraints_Main_Structure SCHEMA Applicability_Constraints_Main_Structure; USE FROM basic_types; ENTITY Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraint; Name : STRING; Result : BOOLEAN; Corresponding_Function : Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraints_List_Package; List_ : Applicability_Constraints_List; Iterator : Applicability_Constraints_List_Iterator; END_ENTITY; TYPE Applicability_Constraints_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraints_List_Iterator = Iterator; END_TYPE; ENTITY Applicability_Constraint_Case; Name : STRING; Feasibility_Test_Names : STRING; Applicability_Constraints : Applicability_Constraints_List; END_ENTITY; ENTITY Applicability_Constraint_Cases_List_Package; List_ : Applicability_Constraint_Cases_List; Iterator : Applicability_Constraint_Cases_List_Iterator; END_ENTITY; TYPE Applicability_Constraint_Cases_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraint_Cases_List_Iterator = Iterator; END_TYPE; ENTITY All_Cases_Structure; Cases : Applicability_Constraint_Cases_List; END_ENTITY;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /Applicability_Constraints_Main_Structure SCHEMA Applicability_Constraints_Main_Structure; USE FROM basic_types; ENTITY Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraint; Name : STRING; Result : BOOLEAN; Corresponding_Function : Applicability_Constraint_Function; END_ENTITY; ENTITY Applicability_Constraints_List_Package; List_ : Applicability_Constraints_List; Iterator : Applicability_Constraints_List_Iterator; END_ENTITY; TYPE Applicability_Constraints_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraints_List_Iterator = Iterator; END_TYPE; ENTITY Applicability_Constraint_Case; Name : STRING; Feasibility_Test_Names : STRING; Applicability_Constraints : Applicability_Constraints_List; END_ENTITY; ENTITY Applicability_Constraint_Cases_List_Package; List_ : Applicability_Constraint_Cases_List; Iterator : Applicability_Constraint_Cases_List_Iterator; END_ENTITY; TYPE Applicability_Constraint_Cases_List = LIST OF Applicability_Constraint_Case; END_TYPE; TYPE Applicability_Constraint_Cases_List_Iterator = Iterator; END_TYPE; ENTITY All_Cases_Structure; Cases : Applicability_Constraint_Cases_List; END_ENTITY; END_SCHEMA; ----! ----Platypus: Updating cheddar_mapping ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/package_mapping SCHEMA package_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Core_Units; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Time_Unit_Events; USE FROM Framework_Config; USE FROM Scheduling_Analysis; USE FROM Scheduler; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduler_Interface; USE FROM Interpreter; USE FROM Editor_Config; USE FROM AADL_Config; USE FROM processor_interface; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM Xml_architecture_parser_interface; USE FROM ARINC_653_Schema; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Time_Unit_Events; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl' ] ); Core_Units; Address_Spaces; Tasks; Networks; Messages; Dependencies; Event_Analyzers; END_MAP; MAP TO ada_package ( [ ], [ ada_interface ( 'Core_Units', ?, true, true ), ada_interface ( 'Core_Units', 'Core_Units_Table_Package', false, true ) ], [ 'cheddar_adl' ] ); Processors; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl', 'cheddar_result' ] ); Buffers; Resources; END_MAP; MAP Task_Groups TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Generic_Task_List_Package', false, true ) ], [ ] ); END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Offsets; Parameters; END_MAP; MAP TO ada_package ( [ ], [ ], [ ] ); Framework_Config; Editor_Config; AADL_Config; Objects; Scheduler; Laws; Simulations; Expressions; Statements; Automaton; Sections; Queueing_Systems; Scheduler_Interface; Interpreter; Call_Framework_Interface; AADL_Parser_Interface; processor_interface; Caches; Xml_architecture_parser_interface; ARINC_653_Schema; END_MAP; MAP Multiprocessor_Services_Interface TO ada_package ( [ ], [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ ] ); END_MAP; MAP Scheduling_Analysis TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Extended', true, true ) ], [ ] ); END_MAP; MAP Deployments TO ada_package ( [ ], [ ada_interface ( 'Objects', ?, true, true ), ada_interface ( 'Objects', 'Generic_Object_Set_Package', false, true ), ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ 'cheddar_adl' ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/constant_mapping SCHEMA constant_mapping; META FROM cheddar_constants; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM AADL_Config; MAP TO ada_constant ( true, ? ); Max_Processors; Max_Tasks; Max_Messages; Max_Buffers; Max_Resources; Max_Networks; Max_Event_Analyzers; Max_Address_Spaces; Max_Sections; Max_Schedulers; Max_Transitions; Max_Caches; Max_Core_Units; Max_Deployments; Max_Objects; Max_Scheduling_Period; Max_Big_Number_Size; Max_Tasks_For_A_Resource; Max_Tasks_For_A_Buffer; Max_Variables; Max_Statements; Max_Block_Level; Max_Tasks_Dependencies; Max_User_Defined_Task_Parameters; Max_Framework_Parameters; Max_Offsets; Max_Density_Size; Max_Requests; Max_String_Size; Sum_Simulation; Max_Time_Line_To_Display; Time_Line_Between_Time_Axis; Display_Witch_Time_Unit_Label; Max_Time_Line; END_MAP; MAP Max_Simulation TO ada_constant ( true, 'Natural''Max (Natural''Max (Max_Processors, Max_Tasks), Natural''Max (Natural''Max (Max_Messages, Max_Buffers), Natural''Max (Max_Resources, Max_Networks)))' ); END_MAP; MAP Generate_Events TO ada_constant ( false, '(others => True)' ); END_MAP; MAP Low_Priority TO ada_constant ( true, 'Priority_Range''First' ); END_MAP; MAP High_Priority TO ada_constant ( true, 'Priority_Range''Last' ); END_MAP; MAP TO ada_constant ( false, '' ); Response_Time_From_Simulation; Blocking_Time_From_Simulation; END_MAP; MAP TO ada_constant ( false, ? ); Cheddar_Debug; Current_Language; Schedule_All_Processeurs; Schedule_And_Display_Event_Table; Schedule_And_Export_Event_Table; Schedule_With_Offsets; Schedule_With_Resources; Schedule_With_Precedencies; Has_Global_Seed; Is_Global_Predictable_Seed; Global_Seed_Value; Context_Switch_From_Simulation; Preemption_From_Simulation; Run_Event_Analyzer_From_Simulation; Aadl_Debug; Aadl_Import_With_System_Name; Aadl_Import_Event_To_Precedencies; Aadl_Import_Event_Data_To_Precedencies; Aadl_Import_Event_To_Buffers_Messages; Aadl_Import_Event_Data_To_Buffers_Messages; Aadl_Export_Precedencies_To_Event_Data; Aadl_Export_Precedencies_To_Event; Aadl_Export_Precedencies_To_Properties; Aadl_Process_Second_Import_Pass; Aadl_Process_Third_Import_Pass; END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/enumeration_mapping SCHEMA enumeration_mapping; META FROM express2cheddar_facade; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Scheduler; USE FROM Time_Unit_Events; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Scheduler_Interface; USE FROM AADL_Parser_Interface; USE FROM processors; USE FROM Core_Units; USE FROM processor_interface; USE FROM Caches; USE FROM ARINC_653_Schema; USE FROM Xml_architecture_parser_interface; MAP TO ada_type ( ) || ada_enumeration ( 'Qs_Mm1' ); Queueing_Systems_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ); Debug_Level; Languages; Objects_Type; Data_From_Simulation; Cache_Type; Buffer_Role_Type; Time_Triggered_Communication_Timing_Property_Type; Resources_Type; Tasks_Type; Task_Groups_Type; Policies; Laws_Type; Simulation_Type; Operator_Type; Expressions_Type; Statements_Type; Table_Types; Synchronizations_Type; Status_Type; Sections_Type; Networks_Type; Messages_Type; Parameter_Type; Dependency_Type; Orientation_Dependency_Type; Time_Unit_Event_Type; Preemptives_Type; Partioning_Type; Schedulers_Type; Preemptives_Type; Cache_Replacement_type; Write_Policy_type; Processors_type; Migrations_type; Cache_Addressing_type; Cache_Coherence_Protocol_type; ModuleActionType; CriticalityType; ErrorCodeType; PartitionActionType; ErrorLevelType; DirectionType; PortMappingType_Choice_Type; XML_Units; Priority_Assignment_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ) || pragma_convention ( 'C' ); Framework_Statement_Type; Output_Format; Perform_Order; END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/record_mapping SCHEMA record_mapping; META FROM express2cheddar_facade; USE FROM Offsets; USE FROM Buffers; USE FROM Resources; USE FROM Automaton; USE FROM Scheduling_Analysis; USE FROM Scheduler_Interface; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM AADL_Parser_Interface; MAP TO ada_entity ( ) || record ( ); Offset_Type; Buffer_Role; Critical_Section; Automaton_Status; Transition_Status; Buffer_Size_Item; Density_Item; Deadlock_Item; Priority_Inversion_Item; Framework_Request; Framework_Response; Scheduling_Result; Binding_Record_Type; Scheduling_Parameters; END_MAP; MAP Scheduling_Result.Result TO in_scope_attribute ( ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/ada_class_mapping SCHEMA ada_class_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Expressions; USE FROM Statements; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Processors; USE FROM Core_Units; USE FROM Address_spaces; USE FROM Messages; USE FROM Scheduler; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM ARINC_653_Schema; MAP TO ada_entity ( ) || ada_class ( false ); Generic_Object; Named_Object; Generic_cache; Data_Cache; Data_Instruction_Cache; Instruction_Cache; Cache_System; Core_Unit; Generic_Processor; Mono_Core_Processor; Multi_Cores_Processor; Buffer; Buffer; Generic_Resource; Priority_Constrained_Resource; Np_Resource; Pip_Resource; Pcp_Resource; IPcp_Resource; Generic_Task; Scheduling_Task; Periodic_Task; Aperiodic_Task; Poisson_Task; Sporadic_Task; Parametric_Task; Frame_Task; Generic_Task_Group; Transaction_Task_Group; Multiframe_Task_Group; Generic_Message; Periodic_Message; Aperiodic_Message; Address_Space; Generic_Expression; Constant_Expression; Variable_Expression; Array_Variable_Expression; Binary_Expression; Unary_Expression; Generic_Statement; Nop_Statement; Exit_Statement; Put_Statement; If_Statement; Clock_Statement; Assign_Statement; For_Statement; Return_Statement; While_Statement; Random_Initialize_Statement; Set_Statement; Subprogram_Statement; Subprogram_Call_Statement; State; Synchronization; Transition; Generic_Section; Computation_Section; Synchronization_Section; Network; Generic_Scheduler; Aperiodic_Task_Server_Protocol; Polling_Server_Protocol; Deferred_Server_Protocol; Sporadic_Server_Protocol; Hierarchical_Protocol; Hierarchical_Offline_Protocol; Compiled_User_Defined_Protocol; Automata_User_Defined_Protocol; Pipeline_User_Defined_Protocol; User_Defined_Protocol; Earliest_Deadline_First_Protocol; Least_Laxity_First_Protocol; Rate_Monotonic_Protocol; Deadline_Monotonic_Protocol; Round_Robin_Protocol; Time_Sharing_Based_On_Wait_Time_Protocol; Posix_1003_Highest_Priority_First_Protocol; D_Over_Protocol; Maximum_Urgency_First_Based_On_Laxity_Protocol; Maximum_Urgency_First_Based_On_Deadline_Protocol; Time_Sharing_Based_On_Cpu_Usage_Protocol; No_Scheduling_Protocol; Hierarchical_Cyclic_Protocol; Hierarchical_Round_Robin_Protocol; Hierarchical_Fixed_Priority_Protocol; Fixed_Priority_Protocol; Dynamic_Priority_Protocol; Event_Analyzer; Generic_Deployment; Static_Deployment; Dynamic_Deployment; ARINC_653_Object; ARINC_653_Module; System_HM_TableType; Module_HM_Type; Module_Schedule_Type; Partition_Schedule_Element; Window_Schedule_Element; Channel; PortMappingType; Window_Sched_Ext_Type; Partition_Sched_Ext_Type; ModExt_Type; Mod_HM_Ext_Type; SysHM_Ext_Type; PartitionType; PartitionExt_Type; Pseudo_Partition; Standard_Partition; Partition_HM_Type; Part_HM_Ext_Type; Memory_Requirements; Memory_Ext_Type; Partition_Memory_Element; PortMap_Ext_Type; PortExt_Type; ProcessType; System_State_Entry_Type; ProcExt_Type; Error_ID_Type; Error_ID_Action_Type; Error_ID_Level_Type; PortType; SamplingPortType; QueuingPortType; END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/constrained_array_mapping SCHEMA constrained_array_mapping; META FROM express2cheddar_facade; META FROM cheddar_types; USE FROM Editor_Config; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Interpreter; MAP Start_End_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Resource_Accesses_Range', ?, [ ] ); END_MAP; MAP Time_Unit_Event_Type_Boolean_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Time_Unit_Event_Type''Range', ?, [ ] ); END_MAP; MAP Data_From_Simulation_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Data_From_Simulation''Range', ?, [ ] ); END_MAP; MAP Section_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Sections_Type''Range', ?, [ ada_interface ( 'Sections', ?, true, true ) ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/primitive_type_mapping SCHEMA primitive_type_mapping; META FROM express2cheddar_facade; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; USE FROM Buffers; USE FROM Simulations; USE FROM ARINC_653_Schema; MAP priority_range TO cheddar_priority_range ( ) || ada_type ( ) || cheddar_defined_type ( ); END_MAP; MAP Natural TO ada_natural_type ( ) || ada_primitive_type ( ); END_MAP; MAP AdaBoolean TO ada_boolean_type ( ) || ada_primitive_type ( ); END_MAP; MAP DecOrHexValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP IdentifierValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP NameType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP Simulation_Value TO ada_named_type_reference ( ) || ada_class_reference ( ) || ada_primitive_class_reference ( 'Simulation', 'simulations' ) || cheddar_primitive_type ( ) || ada_primitive_type ( ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/discriminated_type_mapping SCHEMA discriminated_type_mapping; META FROM express2cheddar_facade; USE FROM Dependencies; USE FROM Parameters; META FROM discriminated_type; USE FROM Time_Unit_Events; USE FROM ARINC_653_Schema; MAP PortMappingType_Choice TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP PortMappingType_Choice.type_of_PortMappingType_Choice TO discriminated_type_discriminant ( ); END_MAP; MAP PortMappingType_Choice.union TO discriminated_type_union ( ); END_MAP; MAP PortMappingType_Choice_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Pseudo_Partition_Choice_Type; Standard_Partition_Choice_Type; END_MAP; MAP Time_Unit_Event TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Time_Unit_Event.type_of_event TO discriminated_type_discriminant ( ); END_MAP; MAP Time_Unit_Event.union TO discriminated_type_union ( ); END_MAP; MAP Time_Unit_Event_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Start_Of_Task_Capacity_Type; End_Of_Task_Capacity_Type; Write_To_Buffer_Type; Read_From_Buffer_Type; Context_Switch_Overhead_Type; Running_Task_Type; Task_activation_Type; Allocate_Resource_Type; Release_Resource_Type; Wait_For_Resource_Type; Send_Message_Type; Receive_Message_Type; Wait_For_Memory_Type; Address_Space_Activation_Type; END_MAP; MAP Dependency TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Dependency.type_of_dependency TO discriminated_type_discriminant ( ); END_MAP; MAP Dependency.union TO discriminated_type_union ( ); END_MAP; MAP Dependency_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Precedence_Dependency_type; Queuing_Buffer_Dependency_type; Communication_Dependency_type; Time_Triggered_Communication_Dependency_type; Black_Board_Buffer_Dependency_type; Resource_Dependency_type; END_MAP; MAP Parameter TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Parameter.type_of_parameter TO discriminated_type_discriminant ( ); END_MAP; MAP Parameter.union TO discriminated_type_union ( ); END_MAP; MAP Parameter_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Boolean_Parameter_Type; Integer_Parameter_Type; Double_Parameter_Type; String_Parameter_Type; END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/alias_mapping SCHEMA alias_mapping; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduling_Analysis; MAP Scheduling_Sequence TO package_alias ( 'Time_Unit_Package', 'Indexed_Table' ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/generic_package_mapping SCHEMA generic_package_mapping; META FROM express2cheddar_facade; USE FROM Basic_types; USE FROM Automaton; USE FROM Tasks; USE FROM Buffers; USE FROM Parameters; USE FROM Offsets; USE FROM Objects; USE FROM Processors; USE FROM Core_Units; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Scheduling_Analysis; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Statements; USE FROM Interpreter; USE FROM AADL_Parser_Interface; USE FROM Caches; USE FROM ARINC_653_Schema; MAP User_Defined_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'parameters', 'User_Defined_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Offsets_Table TO explicit_type_reference ( ?, [ ada_interface ( 'offsets', 'Offsets_Table_Package', false, true ) ] ); END_MAP; (* MAP Tasks_Table TO explicit_type_reference ( ?, [ ada_interface ( 'tasks', 'Tasks_Table_Package', false, true ) ] ); END_MAP; *) MAP State_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'State_Lists_Package', false, true ) ] ); END_MAP; MAP Transition_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'Transition_Lists_Package', false, true ) ] ); END_MAP; MAP Framework_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Parameters', 'Framework_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Scheduling_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ] ); END_MAP; MAP Caches_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Cache_Ptr', 'Framework_Config.Max_Caches', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Core_Units_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Core_Unit_Ptr', 'Framework_Config.Max_Core_Units', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Processor_Binding_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Binding_Record_Type', 'Framework_Config.Max_Address_Spaces', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Sets_Type_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Set_Statement_Ptr', 'Max_Statements', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'Framework_Config', ?, true, true ) ] ); END_MAP; MAP Generic_Index_Lst_Package TO ada_entity ( ) || generic_package_instanciation ( 'access_Lists', [ 'Put => Put', 'Element => Double', 'Element_Ptr => Double_Ptr', 'Free => Double_Util.Free', 'copy => copy', 'Xml_String => Xml_String' ], [ ] ); END_MAP; MAP Generic_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Framework_Config.Max_Objects', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String', 'XML_Ref_String => XML_Ref_String' ], [ ] ); END_MAP; (* MAP Generic_Time_Line_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Editor_Config.Max_Time_Line', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String' ], [ ] ); END_MAP; *) MAP Double_Tasks_Parameters_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Double', 'Generic_Task_Ptr', 'Framework_Config.Max_Tasks', '0', 'Double_Util.Put', 'Double_Util.Initialize', 'Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Request_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Request', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Response_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Response', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Scheduling_Result_Per_Processor_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Scheduling_Result', 'Generic_Processor_Ptr', 'Framework_Config.Max_Processors', '0', 'Put', 'Initialize', 'Processors.Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ] ); END_MAP; MAP Framework_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_ptr', 'Max_Framework_Parameters', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Buffer_Roles_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Role', 'Unbounded_String', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ) ] ); END_MAP; MAP Buffer_Result_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Size_Table', 'Buffer_Ptr', 'Framework_Config.Max_Buffers', '0', 'Put', 'Initialize', 'Buffers.Put_Name', 'Buffers.Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'Task_Set', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Buffers', 'Buffer_Roles_Package', false, true ), ada_interface ( 'Indexed_Tables', ?, true, true ) ] ); END_MAP; MAP User_Defined_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_Ptr', 'Max_User_Defined_Task_Parameters', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Offsets_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Offset_Type', 'Max_Offsets', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; (* MAP Tasks_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Task_Ptr', 'Max_Tasks', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; *) MAP Time_Unit_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Time_Unit_Event_Ptr', 'Natural', 'framework_config.max_scheduling_period', '0', 'Put', 'Initialize', 'Put', 'Format', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'natural_util', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ] ); END_MAP; MAP Time_Unit_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Time_Unit_Event_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Resource_Accesses TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Critical_Section', 'Unbounded_String', 'Framework_Config.Max_Tasks_For_A_Resource', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP State_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'State_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Transition_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Transition_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Automaton_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Automaton_Status', 'Unbounded_String', 'Framework_Config.Max_Sections', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Transition_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Transition_Status', 'Unbounded_String', 'Framework_Config.Max_Transitions', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Buffer_Size_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Buffer_Size_Item', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Waiting_Time_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Double', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Density_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Density_Item', 'Framework_Config.Max_Density_Size', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Densities_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Density_Table', 'Generic_Task_Ptr', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put_Name', 'Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Double_Util', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ), ada_interface ( 'Tasks', ?, true, true ) ] ); END_MAP; MAP Deadlock_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Deadlock_Item', 'Deadlock_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Priority_Inversion_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Priority_Inversion_Item', 'Priority_Inversion_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Error_ID_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Error_ID_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Mod_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Mod_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Generic_Task_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Generic_Task_Ptr', 'Put', 'Free', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SysHM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SysHM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Channel_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Channel_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMappingType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMappingType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Memory_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Memory_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_HM_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_HM_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ModExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ModExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SamplingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SamplingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP QueuingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'QueuingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcessType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcessType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP System_State_Entry_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'System_State_Entry_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Part_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Part_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Memory_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Memory_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMap_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMap_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/DP_Graph_Mapping SCHEMA DP_Graph_Mapping; META FROM express2cheddar_facade; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ], [ ], [ ] ); Generic_Graph; DP_Graph; END_MAP; MAP TO ada_entity ( ) || ada_class ( false ); Graph; Generic_Edge; Generic_Node; Time_Triggered_Communication_Edge; Buffer_Edge; Communication_Edge; Precedence_Edge; Resource_Edge; (* Synchronous_Data_Flow_Edge; *) Task_Node; END_MAP; MAP Edge_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Edge''class', 'Generic_Edge_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Node_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Node''class', 'Generic_Node_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /cheddar_mapping/Applicability_Constraints_Mappings SCHEMA Applicability_Constraints_Mappings; META FROM express2cheddar_facade; META FROM record_and_class; USE FROM Applicability_Constraints_Main_Structure; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ada_interface ( 'Systems', ?, true, true ) ], [ ], [ ] ); Applicability_Constraints_Main_Structure; END_MAP; MAP TO ada_entity ( ) || record ( ); Applicability_Constraint; Applicability_Constraint_Case; All_Cases_Structure; END_MAP; MAP TO cheddar_function_ptr ( 'Context : System', 'Boolean' ); Applicability_Constraint_Function; END_MAP; MAP Applicability_Constraints_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint', 'Applicability_Constraint_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Applicability_Constraint_Cases_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint_Case', 'Applicability_Constraint_Case_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_mapping SCHEMA package_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Core_Units; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Time_Unit_Events; USE FROM Framework_Config; USE FROM Scheduling_Analysis; USE FROM Scheduler; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduler_Interface; USE FROM Interpreter; USE FROM Editor_Config; USE FROM AADL_Config; USE FROM processor_interface; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM Xml_architecture_parser_interface; USE FROM ARINC_653_Schema; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Time_Unit_Events; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl' ] ); Core_Units; Address_Spaces; Tasks; Networks; Messages; Dependencies; Event_Analyzers; END_MAP; MAP TO ada_package ( [ ], [ ada_interface ( 'Core_Units', ?, true, true ), ada_interface ( 'Core_Units', 'Core_Units_Table_Package', false, true ) ], [ 'cheddar_adl' ] ); Processors; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl', 'cheddar_result' ] ); Buffers; Resources; END_MAP; MAP Task_Groups TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Generic_Task_List_Package', false, true ) ], [ ] ); END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Offsets; Parameters; END_MAP; MAP TO ada_package ( [ ], [ ], [ ] ); Framework_Config; Editor_Config; AADL_Config; Objects; Scheduler; Laws; Simulations; Expressions; Statements; Automaton; Sections; Queueing_Systems; Scheduler_Interface; Interpreter; Call_Framework_Interface; AADL_Parser_Interface; processor_interface; Caches; Xml_architecture_parser_interface; ARINC_653_Schema; END_MAP; MAP Multiprocessor_Services_Interface TO ada_package ( [ ], [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ ] ); END_MAP; MAP Scheduling_Analysis TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Extended', true, true ) ], [ ] ); END_MAP; MAP Deployments TO ada_package ( [ ], [ ada_interface ( 'Objects', ?, true, true ), ada_interface ( 'Objects', 'Generic_Object_Set_Package', false, true ), ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ 'cheddar_adl' ] ); END_MAP;END_SCHEMA;SCHEMA constant_mapping; META FROM cheddar_constants; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM AADL_Config; MAP TO ada_constant ( true, ? ); Max_Processors; Max_Tasks; Max_Messages; Max_Buffers; Max_Resources; Max_Networks; Max_Event_Analyzers; Max_Address_Spaces; Max_Sections; Max_Schedulers; Max_Transitions; Max_Caches; Max_Core_Units; Max_Deployments; Max_Objects; Max_Scheduling_Period; Max_Big_Number_Size; Max_Tasks_For_A_Resource; Max_Tasks_For_A_Buffer; Max_Variables; Max_Statements; Max_Block_Level; Max_Tasks_Dependencies; Max_User_Defined_Task_Parameters; Max_Framework_Parameters; Max_Offsets; Max_Density_Size; Max_Requests; Max_String_Size; Sum_Simulation; Max_Time_Line_To_Display; Time_Line_Between_Time_Axis; Display_Witch_Time_Unit_Label; Max_Time_Line; END_MAP; MAP Max_Simulation TO ada_constant ( true, 'Natural''Max (Natural''Max (Max_Processors, Max_Tasks), Natural''Max (Natural''Max (Max_Messages, Max_Buffers), Natural''Max (Max_Resources, Max_Networks)))' ); END_MAP; MAP Generate_Events TO ada_constant ( false, '(others => True)' ); END_MAP; MAP Low_Priority TO ada_constant ( true, 'Priority_Range''First' ); END_MAP; MAP High_Priority TO ada_constant ( true, 'Priority_Range''Last' ); END_MAP; MAP TO ada_constant ( false, '' ); Response_Time_From_Simulation; Blocking_Time_From_Simulation; END_MAP; MAP TO ada_constant ( false, ? ); Cheddar_Debug; Current_Language; Schedule_All_Processeurs; Schedule_And_Display_Event_Table; Schedule_And_Export_Event_Table; Schedule_With_Offsets; Schedule_With_Resources; Schedule_With_Precedencies; Has_Global_Seed; Is_Global_Predictable_Seed; Global_Seed_Value; Context_Switch_From_Simulation; Preemption_From_Simulation; Run_Event_Analyzer_From_Simulation; Aadl_Debug; Aadl_Import_With_System_Name; Aadl_Import_Event_To_Precedencies; Aadl_Import_Event_Data_To_Precedencies; Aadl_Import_Event_To_Buffers_Messages; Aadl_Import_Event_Data_To_Buffers_Messages; Aadl_Export_Precedencies_To_Event_Data; Aadl_Export_Precedencies_To_Event; Aadl_Export_Precedencies_To_Properties; Aadl_Process_Second_Import_Pass; Aadl_Process_Third_Import_Pass; END_MAP;END_SCHEMA;SCHEMA enumeration_mapping; META FROM express2cheddar_facade; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Scheduler; USE FROM Time_Unit_Events; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Scheduler_Interface; USE FROM AADL_Parser_Interface; USE FROM processors; USE FROM Core_Units; USE FROM processor_interface; USE FROM Caches; USE FROM ARINC_653_Schema; USE FROM Xml_architecture_parser_interface; MAP TO ada_type ( ) || ada_enumeration ( 'Qs_Mm1' ); Queueing_Systems_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ); Debug_Level; Languages; Objects_Type; Data_From_Simulation; Cache_Type; Buffer_Role_Type; Time_Triggered_Communication_Timing_Property_Type; Resources_Type; Tasks_Type; Task_Groups_Type; Policies; Laws_Type; Simulation_Type; Operator_Type; Expressions_Type; Statements_Type; Table_Types; Synchronizations_Type; Status_Type; Sections_Type; Networks_Type; Messages_Type; Parameter_Type; Dependency_Type; Orientation_Dependency_Type; Time_Unit_Event_Type; Preemptives_Type; Partioning_Type; Schedulers_Type; Preemptives_Type; Cache_Replacement_type; Write_Policy_type; Processors_type; Migrations_type; Cache_Addressing_type; Cache_Coherence_Protocol_type; ModuleActionType; CriticalityType; ErrorCodeType; PartitionActionType; ErrorLevelType; DirectionType; PortMappingType_Choice_Type; XML_Units; Priority_Assignment_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ) || pragma_convention ( 'C' ); Framework_Statement_Type; Output_Format; Perform_Order; END_MAP;END_SCHEMA;SCHEMA record_mapping; META FROM express2cheddar_facade; USE FROM Offsets; USE FROM Buffers; USE FROM Resources; USE FROM Automaton; USE FROM Scheduling_Analysis; USE FROM Scheduler_Interface; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM AADL_Parser_Interface; MAP TO ada_entity ( ) || record ( ); Offset_Type; Buffer_Role; Critical_Section; Automaton_Status; Transition_Status; Buffer_Size_Item; Density_Item; Deadlock_Item; Priority_Inversion_Item; Framework_Request; Framework_Response; Scheduling_Result; Binding_Record_Type; Scheduling_Parameters; END_MAP; MAP Scheduling_Result.Result TO in_scope_attribute ( ); END_MAP;END_SCHEMA;SCHEMA ada_class_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Expressions; USE FROM Statements; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Processors; USE FROM Core_Units; USE FROM Address_spaces; USE FROM Messages; USE FROM Scheduler; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM ARINC_653_Schema; MAP TO ada_entity ( ) || ada_class ( false ); Generic_Object; Named_Object; Generic_cache; Data_Cache; Data_Instruction_Cache; Instruction_Cache; Cache_System; Core_Unit; Generic_Processor; Mono_Core_Processor; Multi_Cores_Processor; Buffer; Buffer; Generic_Resource; Priority_Constrained_Resource; Np_Resource; Pip_Resource; Pcp_Resource; IPcp_Resource; Generic_Task; Scheduling_Task; Periodic_Task; Aperiodic_Task; Poisson_Task; Sporadic_Task; Parametric_Task; Frame_Task; Generic_Task_Group; Transaction_Task_Group; Multiframe_Task_Group; Generic_Message; Periodic_Message; Aperiodic_Message; Address_Space; Generic_Expression; Constant_Expression; Variable_Expression; Array_Variable_Expression; Binary_Expression; Unary_Expression; Generic_Statement; Nop_Statement; Exit_Statement; Put_Statement; If_Statement; Clock_Statement; Assign_Statement; For_Statement; Return_Statement; While_Statement; Random_Initialize_Statement; Set_Statement; Subprogram_Statement; Subprogram_Call_Statement; State; Synchronization; Transition; Generic_Section; Computation_Section; Synchronization_Section; Network; Generic_Scheduler; Aperiodic_Task_Server_Protocol; Polling_Server_Protocol; Deferred_Server_Protocol; Sporadic_Server_Protocol; Hierarchical_Protocol; Hierarchical_Offline_Protocol; Compiled_User_Defined_Protocol; Automata_User_Defined_Protocol; Pipeline_User_Defined_Protocol; User_Defined_Protocol; Earliest_Deadline_First_Protocol; Least_Laxity_First_Protocol; Rate_Monotonic_Protocol; Deadline_Monotonic_Protocol; Round_Robin_Protocol; Time_Sharing_Based_On_Wait_Time_Protocol; Posix_1003_Highest_Priority_First_Protocol; D_Over_Protocol; Maximum_Urgency_First_Based_On_Laxity_Protocol; Maximum_Urgency_First_Based_On_Deadline_Protocol; Time_Sharing_Based_On_Cpu_Usage_Protocol; No_Scheduling_Protocol; Hierarchical_Cyclic_Protocol; Hierarchical_Round_Robin_Protocol; Hierarchical_Fixed_Priority_Protocol; Fixed_Priority_Protocol; Dynamic_Priority_Protocol; Event_Analyzer; Generic_Deployment; Static_Deployment; Dynamic_Deployment; ARINC_653_Object; ARINC_653_Module; System_HM_TableType; Module_HM_Type; Module_Schedule_Type; Partition_Schedule_Element; Window_Schedule_Element; Channel; PortMappingType; Window_Sched_Ext_Type; Partition_Sched_Ext_Type; ModExt_Type; Mod_HM_Ext_Type; SysHM_Ext_Type; PartitionType; PartitionExt_Type; Pseudo_Partition; Standard_Partition; Partition_HM_Type; Part_HM_Ext_Type; Memory_Requirements; Memory_Ext_Type; Partition_Memory_Element; PortMap_Ext_Type; PortExt_Type; ProcessType; System_State_Entry_Type; ProcExt_Type; Error_ID_Type; Error_ID_Action_Type; Error_ID_Level_Type; PortType; SamplingPortType; QueuingPortType; END_MAP;END_SCHEMA;SCHEMA constrained_array_mapping; META FROM express2cheddar_facade; META FROM cheddar_types; USE FROM Editor_Config; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Interpreter; MAP Start_End_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Resource_Accesses_Range', ?, [ ] ); END_MAP; MAP Time_Unit_Event_Type_Boolean_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Time_Unit_Event_Type''Range', ?, [ ] ); END_MAP; MAP Data_From_Simulation_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Data_From_Simulation''Range', ?, [ ] ); END_MAP; MAP Section_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Sections_Type''Range', ?, [ ada_interface ( 'Sections', ?, true, true ) ] ); END_MAP;END_SCHEMA;SCHEMA primitive_type_mapping; META FROM express2cheddar_facade; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; USE FROM Buffers; USE FROM Simulations; USE FROM ARINC_653_Schema; MAP priority_range TO cheddar_priority_range ( ) || ada_type ( ) || cheddar_defined_type ( ); END_MAP; MAP Natural TO ada_natural_type ( ) || ada_primitive_type ( ); END_MAP; MAP AdaBoolean TO ada_boolean_type ( ) || ada_primitive_type ( ); END_MAP; MAP DecOrHexValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP IdentifierValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP NameType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP Simulation_Value TO ada_named_type_reference ( ) || ada_class_reference ( ) || ada_primitive_class_reference ( 'Simulation', 'simulations' ) || cheddar_primitive_type ( ) || ada_primitive_type ( ); END_MAP;END_SCHEMA;SCHEMA discriminated_type_mapping; META FROM express2cheddar_facade; USE FROM Dependencies; USE FROM Parameters; META FROM discriminated_type; USE FROM Time_Unit_Events; USE FROM ARINC_653_Schema; MAP PortMappingType_Choice TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP PortMappingType_Choice.type_of_PortMappingType_Choice TO discriminated_type_discriminant ( ); END_MAP; MAP PortMappingType_Choice.union TO discriminated_type_union ( ); END_MAP; MAP PortMappingType_Choice_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Pseudo_Partition_Choice_Type; Standard_Partition_Choice_Type; END_MAP; MAP Time_Unit_Event TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Time_Unit_Event.type_of_event TO discriminated_type_discriminant ( ); END_MAP; MAP Time_Unit_Event.union TO discriminated_type_union ( ); END_MAP; MAP Time_Unit_Event_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Start_Of_Task_Capacity_Type; End_Of_Task_Capacity_Type; Write_To_Buffer_Type; Read_From_Buffer_Type; Context_Switch_Overhead_Type; Running_Task_Type; Task_activation_Type; Allocate_Resource_Type; Release_Resource_Type; Wait_For_Resource_Type; Send_Message_Type; Receive_Message_Type; Wait_For_Memory_Type; Address_Space_Activation_Type; END_MAP; MAP Dependency TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Dependency.type_of_dependency TO discriminated_type_discriminant ( ); END_MAP; MAP Dependency.union TO discriminated_type_union ( ); END_MAP; MAP Dependency_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Precedence_Dependency_type; Queuing_Buffer_Dependency_type; Communication_Dependency_type; Time_Triggered_Communication_Dependency_type; Black_Board_Buffer_Dependency_type; Resource_Dependency_type; END_MAP; MAP Parameter TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Parameter.type_of_parameter TO discriminated_type_discriminant ( ); END_MAP; MAP Parameter.union TO discriminated_type_union ( ); END_MAP; MAP Parameter_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Boolean_Parameter_Type; Integer_Parameter_Type; Double_Parameter_Type; String_Parameter_Type; END_MAP;END_SCHEMA;SCHEMA alias_mapping; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduling_Analysis; MAP Scheduling_Sequence TO package_alias ( 'Time_Unit_Package', 'Indexed_Table' ); END_MAP;END_SCHEMA;SCHEMA generic_package_mapping; META FROM express2cheddar_facade; USE FROM Basic_types; USE FROM Automaton; USE FROM Tasks; USE FROM Buffers; USE FROM Parameters; USE FROM Offsets; USE FROM Objects; USE FROM Processors; USE FROM Core_Units; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Scheduling_Analysis; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Statements; USE FROM Interpreter; USE FROM AADL_Parser_Interface; USE FROM Caches; USE FROM ARINC_653_Schema; MAP User_Defined_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'parameters', 'User_Defined_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Offsets_Table TO explicit_type_reference ( ?, [ ada_interface ( 'offsets', 'Offsets_Table_Package', false, true ) ] ); END_MAP; (* MAP Tasks_Table TO explicit_type_reference ( ?, [ ada_interface ( 'tasks', 'Tasks_Table_Package', false, true ) ] ); END_MAP; *) MAP State_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'State_Lists_Package', false, true ) ] ); END_MAP; MAP Transition_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'Transition_Lists_Package', false, true ) ] ); END_MAP; MAP Framework_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Parameters', 'Framework_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Scheduling_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ] ); END_MAP; MAP Caches_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Cache_Ptr', 'Framework_Config.Max_Caches', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Core_Units_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Core_Unit_Ptr', 'Framework_Config.Max_Core_Units', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Processor_Binding_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Binding_Record_Type', 'Framework_Config.Max_Address_Spaces', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Sets_Type_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Set_Statement_Ptr', 'Max_Statements', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'Framework_Config', ?, true, true ) ] ); END_MAP; MAP Generic_Index_Lst_Package TO ada_entity ( ) || generic_package_instanciation ( 'access_Lists', [ 'Put => Put', 'Element => Double', 'Element_Ptr => Double_Ptr', 'Free => Double_Util.Free', 'copy => copy', 'Xml_String => Xml_String' ], [ ] ); END_MAP; MAP Generic_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Framework_Config.Max_Objects', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String', 'XML_Ref_String => XML_Ref_String' ], [ ] ); END_MAP; (* MAP Generic_Time_Line_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Editor_Config.Max_Time_Line', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String' ], [ ] ); END_MAP; *) MAP Double_Tasks_Parameters_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Double', 'Generic_Task_Ptr', 'Framework_Config.Max_Tasks', '0', 'Double_Util.Put', 'Double_Util.Initialize', 'Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Request_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Request', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Response_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Response', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Scheduling_Result_Per_Processor_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Scheduling_Result', 'Generic_Processor_Ptr', 'Framework_Config.Max_Processors', '0', 'Put', 'Initialize', 'Processors.Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ] ); END_MAP; MAP Framework_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_ptr', 'Max_Framework_Parameters', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Buffer_Roles_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Role', 'Unbounded_String', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ) ] ); END_MAP; MAP Buffer_Result_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Size_Table', 'Buffer_Ptr', 'Framework_Config.Max_Buffers', '0', 'Put', 'Initialize', 'Buffers.Put_Name', 'Buffers.Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'Task_Set', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Buffers', 'Buffer_Roles_Package', false, true ), ada_interface ( 'Indexed_Tables', ?, true, true ) ] ); END_MAP; MAP User_Defined_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_Ptr', 'Max_User_Defined_Task_Parameters', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Offsets_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Offset_Type', 'Max_Offsets', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; (* MAP Tasks_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Task_Ptr', 'Max_Tasks', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; *) MAP Time_Unit_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Time_Unit_Event_Ptr', 'Natural', 'framework_config.max_scheduling_period', '0', 'Put', 'Initialize', 'Put', 'Format', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'natural_util', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ] ); END_MAP; MAP Time_Unit_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Time_Unit_Event_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Resource_Accesses TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Critical_Section', 'Unbounded_String', 'Framework_Config.Max_Tasks_For_A_Resource', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP State_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'State_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Transition_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Transition_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Automaton_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Automaton_Status', 'Unbounded_String', 'Framework_Config.Max_Sections', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Transition_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Transition_Status', 'Unbounded_String', 'Framework_Config.Max_Transitions', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Buffer_Size_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Buffer_Size_Item', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Waiting_Time_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Double', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Density_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Density_Item', 'Framework_Config.Max_Density_Size', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Densities_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Density_Table', 'Generic_Task_Ptr', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put_Name', 'Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Double_Util', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ), ada_interface ( 'Tasks', ?, true, true ) ] ); END_MAP; MAP Deadlock_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Deadlock_Item', 'Deadlock_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Priority_Inversion_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Priority_Inversion_Item', 'Priority_Inversion_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Error_ID_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Error_ID_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Mod_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Mod_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Generic_Task_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Generic_Task_Ptr', 'Put', 'Free', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SysHM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SysHM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Channel_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Channel_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMappingType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMappingType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Memory_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Memory_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_HM_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_HM_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ModExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ModExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SamplingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SamplingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP QueuingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'QueuingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcessType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcessType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP System_State_Entry_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'System_State_Entry_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Part_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Part_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Memory_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Memory_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMap_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMap_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA;SCHEMA DP_Graph_Mapping; META FROM express2cheddar_facade; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ], [ ], [ ] ); Generic_Graph; DP_Graph; END_MAP; MAP TO ada_entity ( ) || ada_class ( false ); Graph; Generic_Edge; Generic_Node; Time_Triggered_Communication_Edge; Buffer_Edge; Communication_Edge; Precedence_Edge; Resource_Edge; (* Synchronous_Data_Flow_Edge; *) Task_Node; END_MAP; MAP Edge_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Edge''class', 'Generic_Edge_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Node_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Node''class', 'Generic_Node_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA;SCHEMA Applicability_Constraints_Mappings; META FROM express2cheddar_facade; META FROM record_and_class; USE FROM Applicability_Constraints_Main_Structure; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ada_interface ( 'Systems', ?, true, true ) ], [ ], [ ] ); Applicability_Constraints_Main_Structure; END_MAP; MAP TO ada_entity ( ) || record ( ); Applicability_Constraint; Applicability_Constraint_Case; All_Cases_Structure; END_MAP; MAP TO cheddar_function_ptr ( 'Context : System', 'Boolean' ); Applicability_Constraint_Function; END_MAP; MAP Applicability_Constraints_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint', 'Applicability_Constraint_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Applicability_Constraint_Cases_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint_Case', 'Applicability_Constraint_Case_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /cheddar_mapping SCHEMA package_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Core_Units; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Time_Unit_Events; USE FROM Framework_Config; USE FROM Scheduling_Analysis; USE FROM Scheduler; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduler_Interface; USE FROM Interpreter; USE FROM Editor_Config; USE FROM AADL_Config; USE FROM processor_interface; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM Xml_architecture_parser_interface; USE FROM ARINC_653_Schema; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Time_Unit_Events; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl' ] ); Core_Units; Address_Spaces; Tasks; Networks; Messages; Dependencies; Event_Analyzers; END_MAP; MAP TO ada_package ( [ ], [ ada_interface ( 'Core_Units', ?, true, true ), ada_interface ( 'Core_Units', 'Core_Units_Table_Package', false, true ) ], [ 'cheddar_adl' ] ); Processors; END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_adl', 'cheddar_result' ] ); Buffers; Resources; END_MAP; MAP Task_Groups TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Generic_Task_List_Package', false, true ) ], [ ] ); END_MAP; MAP TO ada_package ( [ ], [ ], [ 'cheddar_result' ] ); Offsets; Parameters; END_MAP; MAP TO ada_package ( [ ], [ ], [ ] ); Framework_Config; Editor_Config; AADL_Config; Objects; Scheduler; Laws; Simulations; Expressions; Statements; Automaton; Sections; Queueing_Systems; Scheduler_Interface; Interpreter; Call_Framework_Interface; AADL_Parser_Interface; processor_interface; Caches; Xml_architecture_parser_interface; ARINC_653_Schema; END_MAP; MAP Multiprocessor_Services_Interface TO ada_package ( [ ], [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ ] ); END_MAP; MAP Scheduling_Analysis TO ada_package ( [ ], [ ada_interface ( 'Tasks', 'Extended', true, true ) ], [ ] ); END_MAP; MAP Deployments TO ada_package ( [ ], [ ada_interface ( 'Objects', ?, true, true ), ada_interface ( 'Objects', 'Generic_Object_Set_Package', false, true ), ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ], [ 'cheddar_adl' ] ); END_MAP; END_SCHEMA; SCHEMA constant_mapping; META FROM cheddar_constants; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM AADL_Config; MAP TO ada_constant ( true, ? ); Max_Processors; Max_Tasks; Max_Messages; Max_Buffers; Max_Resources; Max_Networks; Max_Event_Analyzers; Max_Address_Spaces; Max_Sections; Max_Schedulers; Max_Transitions; Max_Caches; Max_Core_Units; Max_Deployments; Max_Objects; Max_Scheduling_Period; Max_Big_Number_Size; Max_Tasks_For_A_Resource; Max_Tasks_For_A_Buffer; Max_Variables; Max_Statements; Max_Block_Level; Max_Tasks_Dependencies; Max_User_Defined_Task_Parameters; Max_Framework_Parameters; Max_Offsets; Max_Density_Size; Max_Requests; Max_String_Size; Sum_Simulation; Max_Time_Line_To_Display; Time_Line_Between_Time_Axis; Display_Witch_Time_Unit_Label; Max_Time_Line; END_MAP; MAP Max_Simulation TO ada_constant ( true, 'Natural''Max (Natural''Max (Max_Processors, Max_Tasks), Natural''Max (Natural''Max (Max_Messages, Max_Buffers), Natural''Max (Max_Resources, Max_Networks)))' ); END_MAP; MAP Generate_Events TO ada_constant ( false, '(others => True)' ); END_MAP; MAP Low_Priority TO ada_constant ( true, 'Priority_Range''First' ); END_MAP; MAP High_Priority TO ada_constant ( true, 'Priority_Range''Last' ); END_MAP; MAP TO ada_constant ( false, '' ); Response_Time_From_Simulation; Blocking_Time_From_Simulation; END_MAP; MAP TO ada_constant ( false, ? ); Cheddar_Debug; Current_Language; Schedule_All_Processeurs; Schedule_And_Display_Event_Table; Schedule_And_Export_Event_Table; Schedule_With_Offsets; Schedule_With_Resources; Schedule_With_Precedencies; Has_Global_Seed; Is_Global_Predictable_Seed; Global_Seed_Value; Context_Switch_From_Simulation; Preemption_From_Simulation; Run_Event_Analyzer_From_Simulation; Aadl_Debug; Aadl_Import_With_System_Name; Aadl_Import_Event_To_Precedencies; Aadl_Import_Event_Data_To_Precedencies; Aadl_Import_Event_To_Buffers_Messages; Aadl_Import_Event_Data_To_Buffers_Messages; Aadl_Export_Precedencies_To_Event_Data; Aadl_Export_Precedencies_To_Event; Aadl_Export_Precedencies_To_Properties; Aadl_Process_Second_Import_Pass; Aadl_Process_Third_Import_Pass; END_MAP; END_SCHEMA; SCHEMA enumeration_mapping; META FROM express2cheddar_facade; USE FROM Framework_Config; USE FROM Editor_Config; USE FROM Objects; USE FROM Offsets; USE FROM Processors; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Address_Spaces; USE FROM Laws; USE FROM Simulations; USE FROM Expressions; USE FROM Statements; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Messages; USE FROM Parameters; USE FROM Dependencies; USE FROM Scheduler; USE FROM Time_Unit_Events; USE FROM Queueing_Systems; USE FROM Call_Framework_Interface; USE FROM Scheduler_Interface; USE FROM AADL_Parser_Interface; USE FROM processors; USE FROM Core_Units; USE FROM processor_interface; USE FROM Caches; USE FROM ARINC_653_Schema; USE FROM Xml_architecture_parser_interface; MAP TO ada_type ( ) || ada_enumeration ( 'Qs_Mm1' ); Queueing_Systems_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ); Debug_Level; Languages; Objects_Type; Data_From_Simulation; Cache_Type; Buffer_Role_Type; Time_Triggered_Communication_Timing_Property_Type; Resources_Type; Tasks_Type; Task_Groups_Type; Policies; Laws_Type; Simulation_Type; Operator_Type; Expressions_Type; Statements_Type; Table_Types; Synchronizations_Type; Status_Type; Sections_Type; Networks_Type; Messages_Type; Parameter_Type; Dependency_Type; Orientation_Dependency_Type; Time_Unit_Event_Type; Preemptives_Type; Partioning_Type; Schedulers_Type; Preemptives_Type; Cache_Replacement_type; Write_Policy_type; Processors_type; Migrations_type; Cache_Addressing_type; Cache_Coherence_Protocol_type; ModuleActionType; CriticalityType; ErrorCodeType; PartitionActionType; ErrorLevelType; DirectionType; PortMappingType_Choice_Type; XML_Units; Priority_Assignment_Type; END_MAP; MAP TO ada_type ( ) || ada_enumeration ( ? ) || pragma_convention ( 'C' ); Framework_Statement_Type; Output_Format; Perform_Order; END_MAP; END_SCHEMA; SCHEMA record_mapping; META FROM express2cheddar_facade; USE FROM Offsets; USE FROM Buffers; USE FROM Resources; USE FROM Automaton; USE FROM Scheduling_Analysis; USE FROM Scheduler_Interface; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM AADL_Parser_Interface; MAP TO ada_entity ( ) || record ( ); Offset_Type; Buffer_Role; Critical_Section; Automaton_Status; Transition_Status; Buffer_Size_Item; Density_Item; Deadlock_Item; Priority_Inversion_Item; Framework_Request; Framework_Response; Scheduling_Result; Binding_Record_Type; Scheduling_Parameters; END_MAP; MAP Scheduling_Result.Result TO in_scope_attribute ( ); END_MAP; END_SCHEMA; SCHEMA ada_class_mapping; META FROM express2cheddar_facade; USE FROM Objects; USE FROM Expressions; USE FROM Statements; USE FROM Buffers; USE FROM Resources; USE FROM Tasks; USE FROM Task_Groups; USE FROM Automaton; USE FROM Sections; USE FROM Networks; USE FROM Processors; USE FROM Core_Units; USE FROM Address_spaces; USE FROM Messages; USE FROM Scheduler; USE FROM Event_Analyzers; USE FROM Deployments; USE FROM Caches; USE FROM ARINC_653_Schema; MAP TO ada_entity ( ) || ada_class ( false ); Generic_Object; Named_Object; Generic_cache; Data_Cache; Data_Instruction_Cache; Instruction_Cache; Cache_System; Core_Unit; Generic_Processor; Mono_Core_Processor; Multi_Cores_Processor; Buffer; Buffer; Generic_Resource; Priority_Constrained_Resource; Np_Resource; Pip_Resource; Pcp_Resource; IPcp_Resource; Generic_Task; Scheduling_Task; Periodic_Task; Aperiodic_Task; Poisson_Task; Sporadic_Task; Parametric_Task; Frame_Task; Generic_Task_Group; Transaction_Task_Group; Multiframe_Task_Group; Generic_Message; Periodic_Message; Aperiodic_Message; Address_Space; Generic_Expression; Constant_Expression; Variable_Expression; Array_Variable_Expression; Binary_Expression; Unary_Expression; Generic_Statement; Nop_Statement; Exit_Statement; Put_Statement; If_Statement; Clock_Statement; Assign_Statement; For_Statement; Return_Statement; While_Statement; Random_Initialize_Statement; Set_Statement; Subprogram_Statement; Subprogram_Call_Statement; State; Synchronization; Transition; Generic_Section; Computation_Section; Synchronization_Section; Network; Generic_Scheduler; Aperiodic_Task_Server_Protocol; Polling_Server_Protocol; Deferred_Server_Protocol; Sporadic_Server_Protocol; Hierarchical_Protocol; Hierarchical_Offline_Protocol; Compiled_User_Defined_Protocol; Automata_User_Defined_Protocol; Pipeline_User_Defined_Protocol; User_Defined_Protocol; Earliest_Deadline_First_Protocol; Least_Laxity_First_Protocol; Rate_Monotonic_Protocol; Deadline_Monotonic_Protocol; Round_Robin_Protocol; Time_Sharing_Based_On_Wait_Time_Protocol; Posix_1003_Highest_Priority_First_Protocol; D_Over_Protocol; Maximum_Urgency_First_Based_On_Laxity_Protocol; Maximum_Urgency_First_Based_On_Deadline_Protocol; Time_Sharing_Based_On_Cpu_Usage_Protocol; No_Scheduling_Protocol; Hierarchical_Cyclic_Protocol; Hierarchical_Round_Robin_Protocol; Hierarchical_Fixed_Priority_Protocol; Fixed_Priority_Protocol; Dynamic_Priority_Protocol; Event_Analyzer; Generic_Deployment; Static_Deployment; Dynamic_Deployment; ARINC_653_Object; ARINC_653_Module; System_HM_TableType; Module_HM_Type; Module_Schedule_Type; Partition_Schedule_Element; Window_Schedule_Element; Channel; PortMappingType; Window_Sched_Ext_Type; Partition_Sched_Ext_Type; ModExt_Type; Mod_HM_Ext_Type; SysHM_Ext_Type; PartitionType; PartitionExt_Type; Pseudo_Partition; Standard_Partition; Partition_HM_Type; Part_HM_Ext_Type; Memory_Requirements; Memory_Ext_Type; Partition_Memory_Element; PortMap_Ext_Type; PortExt_Type; ProcessType; System_State_Entry_Type; ProcExt_Type; Error_ID_Type; Error_ID_Action_Type; Error_ID_Level_Type; PortType; SamplingPortType; QueuingPortType; END_MAP; END_SCHEMA; SCHEMA constrained_array_mapping; META FROM express2cheddar_facade; META FROM cheddar_types; USE FROM Editor_Config; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Interpreter; MAP Start_End_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Resource_Accesses_Range', ?, [ ] ); END_MAP; MAP Time_Unit_Event_Type_Boolean_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Time_Unit_Event_Type''Range', ?, [ ] ); END_MAP; MAP Data_From_Simulation_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Data_From_Simulation''Range', ?, [ ] ); END_MAP; MAP Section_Table TO ada_type ( ) || cheddar_defined_type ( ) || constrained_array_type ( 'Sections_Type''Range', ?, [ ada_interface ( 'Sections', ?, true, true ) ] ); END_MAP; END_SCHEMA; SCHEMA primitive_type_mapping; META FROM express2cheddar_facade; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; USE FROM Buffers; USE FROM Simulations; USE FROM ARINC_653_Schema; MAP priority_range TO cheddar_priority_range ( ) || ada_type ( ) || cheddar_defined_type ( ); END_MAP; MAP Natural TO ada_natural_type ( ) || ada_primitive_type ( ); END_MAP; MAP AdaBoolean TO ada_boolean_type ( ) || ada_primitive_type ( ); END_MAP; MAP DecOrHexValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP IdentifierValueType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP NameType TO ada_unbounded_string_type ( ) || ada_primitive_type ( ); END_MAP; MAP Simulation_Value TO ada_named_type_reference ( ) || ada_class_reference ( ) || ada_primitive_class_reference ( 'Simulation', 'simulations' ) || cheddar_primitive_type ( ) || ada_primitive_type ( ); END_MAP; END_SCHEMA; SCHEMA discriminated_type_mapping; META FROM express2cheddar_facade; USE FROM Dependencies; USE FROM Parameters; META FROM discriminated_type; USE FROM Time_Unit_Events; USE FROM ARINC_653_Schema; MAP PortMappingType_Choice TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP PortMappingType_Choice.type_of_PortMappingType_Choice TO discriminated_type_discriminant ( ); END_MAP; MAP PortMappingType_Choice.union TO discriminated_type_union ( ); END_MAP; MAP PortMappingType_Choice_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Pseudo_Partition_Choice_Type; Standard_Partition_Choice_Type; END_MAP; MAP Time_Unit_Event TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Time_Unit_Event.type_of_event TO discriminated_type_discriminant ( ); END_MAP; MAP Time_Unit_Event.union TO discriminated_type_union ( ); END_MAP; MAP Time_Unit_Event_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Start_Of_Task_Capacity_Type; End_Of_Task_Capacity_Type; Write_To_Buffer_Type; Read_From_Buffer_Type; Context_Switch_Overhead_Type; Running_Task_Type; Task_activation_Type; Allocate_Resource_Type; Release_Resource_Type; Wait_For_Resource_Type; Send_Message_Type; Receive_Message_Type; Wait_For_Memory_Type; Address_Space_Activation_Type; END_MAP; MAP Dependency TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Dependency.type_of_dependency TO discriminated_type_discriminant ( ); END_MAP; MAP Dependency.union TO discriminated_type_union ( ); END_MAP; MAP Dependency_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Precedence_Dependency_type; Queuing_Buffer_Dependency_type; Communication_Dependency_type; Time_Triggered_Communication_Dependency_type; Black_Board_Buffer_Dependency_type; Resource_Dependency_type; END_MAP; MAP Parameter TO ada_entity ( ) || discriminated_type ( ); END_MAP; MAP Parameter.type_of_parameter TO discriminated_type_discriminant ( ); END_MAP; MAP Parameter.union TO discriminated_type_union ( ); END_MAP; MAP Parameter_Union TO ada_entity ( ) || discriminated_type_union_type ( ); END_MAP; MAP TO ada_entity ( ) || discriminated_type_union_element_type ( ); Boolean_Parameter_Type; Integer_Parameter_Type; Double_Parameter_Type; String_Parameter_Type; END_MAP; END_SCHEMA; SCHEMA alias_mapping; USE FROM Multiprocessor_Services_Interface; USE FROM Scheduling_Analysis; MAP Scheduling_Sequence TO package_alias ( 'Time_Unit_Package', 'Indexed_Table' ); END_MAP; END_SCHEMA; SCHEMA generic_package_mapping; META FROM express2cheddar_facade; USE FROM Basic_types; USE FROM Automaton; USE FROM Tasks; USE FROM Buffers; USE FROM Parameters; USE FROM Offsets; USE FROM Objects; USE FROM Processors; USE FROM Core_Units; USE FROM Resources; USE FROM Time_Unit_Events; USE FROM Scheduling_Analysis; USE FROM Call_Framework_Interface; USE FROM Multiprocessor_Services_Interface; USE FROM Statements; USE FROM Interpreter; USE FROM AADL_Parser_Interface; USE FROM Caches; USE FROM ARINC_653_Schema; MAP User_Defined_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'parameters', 'User_Defined_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Offsets_Table TO explicit_type_reference ( ?, [ ada_interface ( 'offsets', 'Offsets_Table_Package', false, true ) ] ); END_MAP; (* MAP Tasks_Table TO explicit_type_reference ( ?, [ ada_interface ( 'tasks', 'Tasks_Table_Package', false, true ) ] ); END_MAP; *) MAP State_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'State_Lists_Package', false, true ) ] ); END_MAP; MAP Transition_Lists TO explicit_type_reference ( ?, [ ada_interface ( 'automaton', 'Transition_Lists_Package', false, true ) ] ); END_MAP; MAP Framework_Parameters_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Parameters', 'Framework_Parameters_Table_Package', false, true ) ] ); END_MAP; MAP Scheduling_Table TO explicit_type_reference ( ?, [ ada_interface ( 'Time_Unit_Events', ?, true, true ), ada_interface ( 'Time_Unit_Events', 'Time_Unit_Package', false, true ) ] ); END_MAP; MAP Caches_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Cache_Ptr', 'Framework_Config.Max_Caches', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Core_Units_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Core_Unit_Ptr', 'Framework_Config.Max_Core_Units', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Processor_Binding_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Binding_Record_Type', 'Framework_Config.Max_Address_Spaces', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Sets_Type_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Set_Statement_Ptr', 'Max_Statements', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'Framework_Config', ?, true, true ) ] ); END_MAP; MAP Generic_Index_Lst_Package TO ada_entity ( ) || generic_package_instanciation ( 'access_Lists', [ 'Put => Put', 'Element => Double', 'Element_Ptr => Double_Ptr', 'Free => Double_Util.Free', 'copy => copy', 'Xml_String => Xml_String' ], [ ] ); END_MAP; MAP Generic_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Framework_Config.Max_Objects', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String', 'XML_Ref_String => XML_Ref_String' ], [ ] ); END_MAP; (* MAP Generic_Time_Line_Object_Set_Package TO ada_entity ( ) || generic_package_instanciation ( 'Sets', [ 'Max_Element => Editor_Config.Max_Time_Line', 'Element => Generic_Object_Ptr', 'Free => Free', 'Copy => Copy', 'Put => Put', 'XML_String => XML_String' ], [ ] ); END_MAP; *) MAP Double_Tasks_Parameters_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Double', 'Generic_Task_Ptr', 'Framework_Config.Max_Tasks', '0', 'Double_Util.Put', 'Double_Util.Initialize', 'Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Request_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Request', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Framework_Response_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Framework_Response', 'Max_Requests', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Scheduling_Result_Per_Processor_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Scheduling_Result', 'Generic_Processor_Ptr', 'Framework_Config.Max_Processors', '0', 'Put', 'Initialize', 'Processors.Put_Name', 'Get_Name', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ] ); END_MAP; MAP Framework_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_ptr', 'Max_Framework_Parameters', 'Put', 'XML_String', 'XML_Ref_String' ], [ ] ); END_MAP; MAP Buffer_Roles_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Role', 'Unbounded_String', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ) ] ); END_MAP; MAP Buffer_Result_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Buffer_Size_Table', 'Buffer_Ptr', 'Framework_Config.Max_Buffers', '0', 'Put', 'Initialize', 'Buffers.Put_Name', 'Buffers.Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'Task_Set', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Buffers', 'Buffer_Roles_Package', false, true ), ada_interface ( 'Indexed_Tables', ?, true, true ) ] ); END_MAP; MAP User_Defined_Parameters_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Parameter_Ptr', 'Max_User_Defined_Task_Parameters', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Offsets_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Offset_Type', 'Max_Offsets', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; (* MAP Tasks_Table_package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Generic_Task_Ptr', 'Max_Tasks', 'Put', 'XML_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; *) MAP Time_Unit_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Time_Unit_Event_Ptr', 'Natural', 'framework_config.max_scheduling_period', '0', 'Put', 'Initialize', 'Put', 'Format', 'XML_String', 'XML_Ref_String', 'to_unbounded_string("time_unit")' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'natural_util', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ] ); END_MAP; MAP Time_Unit_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Time_Unit_Event_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Resource_Accesses TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Critical_Section', 'Unbounded_String', 'Framework_Config.Max_Tasks_For_A_Resource', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_String', 'to_unbounded_string("task_name")' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP State_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'State_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Transition_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Transition_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Automaton_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Automaton_Status', 'Unbounded_String', 'Framework_Config.Max_Sections', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Package_Transition_Status TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Transition_Status', 'Unbounded_String', 'Framework_Config.Max_Transitions', '0', 'Put', 'Initialize', 'Put', 'Convert', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Buffer_Size_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Buffer_Size_Item', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Waiting_Time_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Double', 'Framework_Config.Max_Scheduling_Period', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Density_Package TO ada_entity ( ) || generic_package_instanciation ( 'Tables', [ 'Density_Item', 'Framework_Config.Max_Density_Size', 'Put', 'XML_String', 'XML_Ref_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Densities_Table_Package TO ada_entity ( ) || generic_package_instanciation ( 'Indexed_Tables', [ 'Density_Table', 'Generic_Task_Ptr', 'framework_config.max_tasks', '0', 'Put', 'Initialize', 'Put_Name', 'Get_Name', 'XML_Root_String', 'XML_String' ], [ ada_interface ( 'framework_config', ?, true, true ), ada_interface ( 'Double_Util', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Ada.Strings.Unbounded.Text_Io', ?, true, true ), ada_interface ( 'Tasks', ?, true, true ) ] ); END_MAP; MAP Deadlock_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Deadlock_Item', 'Deadlock_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Priority_Inversion_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Priority_Inversion_Item', 'Priority_Inversion_Item_Ptr', 'Put', 'Free', 'Copy', 'Xml_String' ], [ ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Error_ID_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Error_ID_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Mod_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Mod_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Generic_Task_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Generic_Task_Ptr', 'Put', 'Free', 'XML_Ref_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SysHM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SysHM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Sched_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Sched_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Window_Schedule_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Window_Schedule_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Channel_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Channel_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMappingType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMappingType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_Memory_Element_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_Memory_Element_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Partition_HM_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Partition_HM_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ModExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ModExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP SamplingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'SamplingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP QueuingPortType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'QueuingPortType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcessType_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcessType_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP System_State_Entry_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'System_State_Entry_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Part_HM_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Part_HM_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Memory_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'Memory_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortMap_Ext_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortMap_Ext_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PortExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PortExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP ProcExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'ProcExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP PartitionExt_Type_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Lists', [ 'PartitionExt_Type_Ptr', 'Put', 'Free', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; END_SCHEMA; SCHEMA DP_Graph_Mapping; META FROM express2cheddar_facade; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ], [ ], [ ] ); Generic_Graph; DP_Graph; END_MAP; MAP TO ada_entity ( ) || ada_class ( false ); Graph; Generic_Edge; Generic_Node; Time_Triggered_Communication_Edge; Buffer_Edge; Communication_Edge; Precedence_Edge; Resource_Edge; (* Synchronous_Data_Flow_Edge; *) Task_Node; END_MAP; MAP Edge_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Edge''class', 'Generic_Edge_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Node_Lists_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Generic_Node''class', 'Generic_Node_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; END_SCHEMA; SCHEMA Applicability_Constraints_Mappings; META FROM express2cheddar_facade; META FROM record_and_class; USE FROM Applicability_Constraints_Main_Structure; USE FROM Generic_Graph; USE FROM DP_Graph; MAP TO ada_package ( [ ada_interface ( 'Systems', ?, true, true ) ], [ ], [ ] ); Applicability_Constraints_Main_Structure; END_MAP; MAP TO ada_entity ( ) || record ( ); Applicability_Constraint; Applicability_Constraint_Case; All_Cases_Structure; END_MAP; MAP TO cheddar_function_ptr ( 'Context : System', 'Boolean' ); Applicability_Constraint_Function; END_MAP; MAP Applicability_Constraints_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint', 'Applicability_Constraint_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; MAP Applicability_Constraint_Cases_List_Package TO ada_entity ( ) || generic_package_instanciation ( 'Access_Lists', [ 'Applicability_Constraint_Case', 'Applicability_Constraint_Case_Ptr', 'Put', 'Free', 'Copy', 'XML_String' ], [ ada_interface ( 'ada.strings.unbounded', ?, true, true ), ada_interface ( 'ada.strings.unbounded.text_io', ?, true, true ), ada_interface ( 'framework_config', ?, true, true ) ] ); END_MAP; END_SCHEMA; ----! ----Platypus: Updating CheddarBridge ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Framework_Config SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Framework_Config/Priority_Range TYPE Priority_Range = INTEGER; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Framework_Config/Debug_Level TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Framework_Config/Languages TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Editor_Config SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Editor_Config/Data_From_Simulation TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Editor_Config/Data_From_Simulation_Table TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/AADL_Config SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types/Range ENTITY Range; v : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types/Association ENTITY Association; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types/Iterator ENTITY Iterator; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types/AdaBoolean TYPE AdaBoolean = BOOLEAN; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Basic_Types/Natural TYPE Natural = INTEGER; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects/Objects_Type TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects/Generic_Object ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects/Named_Object ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects/Generic_Objects_Set TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Objects/object_from_name FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Offsets SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Offsets/Offsets_Table TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Offsets/Offset_Type ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Cache_Addressing_Type TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Cache_Type TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Cache_Coherence_Protocol_Type TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Cache_Replacement_Type TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Write_Policy_Type TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Caches_Table TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Generic_Cache ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Data_Cache ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Instruction_Cache ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Data_Instruction_Cache ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Caches/Cache_System ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Core_Units SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Core_Units/Core_Units_Table TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Core_Units/Core_Unit ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Processors SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Processors/Generic_Processor ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Processors/Mono_Core_Processor ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Processors/Multi_Cores_Processor ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Buffers SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Buffers/Buffer_Role_Type TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Buffers/Buffer_Roles_Table TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Buffers/Buffer_Role ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Buffers/Buffer ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Resources_Type TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Resource_Accesses_Table TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Start_End_Table TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Priority_Assignment_Type TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Critical_Section ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Generic_Resource ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Np_Resource ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Priority_Constrained_Resource ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Pip_Resource ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/Pcp_Resource ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Resources/IPcp_Resource ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Tasks_Type TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Policies TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Generic_Task ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Generic_Task_List TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Periodic_Task ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Aperiodic_Task ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Poisson_Task ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Sporadic_Task ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Parametric_Task ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Scheduling_Task ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Tasks/Frame_Task ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Task_Groups SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Task_Groups/Task_Groups_type TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Task_Groups/Generic_Task_Group ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Task_Groups/Transaction_Task_Group ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Task_Groups/Multiframe_Task_Group ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Messages SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Messages/Messages_Type TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Messages/Generic_Message ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Messages/Periodic_Message ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Messages/Aperiodic_Message ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Dependency_Type TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Time_Triggered_Communication_Timing_Property_Type TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Orientation_Dependency_Type TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Time_Triggered_Communication_Dependency_Type ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Precedence_Dependency_Type ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Queuing_Buffer_Dependency_Type ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Black_board_Buffer_Dependency_Type ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Resource_Dependency_Type ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Communication_Dependency_Type ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Dependency_Union ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Dependencies/Dependency ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Address_Spaces SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Address_Spaces/Address_Space ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Laws SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Laws/Laws_Type TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Networks SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Networks/Networks_Type TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Networks/Network ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Generic_Scheduler ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Aperiodic_Task_Server_Protocol ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Polling_Server_Protocol ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Deferred_Server_Protocol ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Sporadic_Server_Protocol ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Hierarchical_Protocol ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Compiled_User_Defined_Protocol ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Automata_User_Defined_Protocol ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Pipeline_User_Defined_Protocol ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/User_Defined_Protocol ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Earliest_Deadline_First_Protocol ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Least_Laxity_First_Protocol ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Rate_Monotonic_Protocol ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Deadline_Monotonic_Protocol ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Round_Robin_Protocol ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Time_Sharing_Based_On_Wait_Time_Protocol ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Posix_1003_Highest_Priority_First_Protocol ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/D_Over_Protocol ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Maximum_Urgency_First_Based_On_Laxity_Protocol ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Maximum_Urgency_First_Based_On_Deadline_Protocol ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Time_Sharing_Based_On_Cpu_Usage_Protocol ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/No_Scheduling_Protocol ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Hierarchical_Cyclic_Protocol ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Hierarchical_Round_Robin_Protocol ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Hierarchical_Fixed_Priority_Protocol ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Hierarchical_Offline_Protocol ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Fixed_Priority_Protocol ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler/Dynamic_Priority_Protocol ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler_Interface SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler_Interface/Preemptives_Type TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler_Interface/Schedulers_Type TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduler_Interface/Scheduling_Parameters ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Parameter_Type TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/User_Defined_Parameters_Table TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Framework_Parameters_Table TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Boolean_Parameter_Type ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Integer_Parameter_Type ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Double_Parameter_Type ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/String_Parameter_Type ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Parameter_Union ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Parameters/Parameter ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Queueing_Systems SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Queueing_Systems/Queueing_Systems_Type TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/processor_interface SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/processor_interface/Processors_type TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/processor_interface/migrations_type TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Event_Analyzers SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Event_Analyzers/Event_Analyzer ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Deployments SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Deployments/Generic_Deployment ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Deployments/Static_Deployment ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Deployments/Dynamic_Deployment ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Time_Unit_Event_Type TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Time_Unit_Event_Type_Boolean_Table TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Time_Unit_Table TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Address_Space_Activation_Type ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Start_Of_Task_Capacity_Type ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/End_Of_Task_Capacity_Type ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Write_To_Buffer_Type ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Read_From_Buffer_Type ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Context_Switch_Overhead_Type ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Running_Task_Type ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Task_activation_Type ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Allocate_Resource_Type ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Release_Resource_Type ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Wait_For_Resource_Type ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Send_Message_Type ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Receive_Message_Type ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Wait_For_Memory_Type ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Time_Unit_Event_Union ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Time_Unit_Events/Time_Unit_Event ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_List = LIST OF Channel; END_TYPE; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/DecOrHexValueType TYPE DecOrHexValueType = STRING; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/IdentifierValueType TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/NameType TYPE NameType = STRING ( 30 ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ARINC_653_Object ENTITY ARINC_653_Object; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ModuleActionType TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PartitionActionType TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Error_ID_Type ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Error_ID_Action_Type ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ErrorLevelType TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ErrorCodeType TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Error_ID_Level_Type ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Error_ID_Type_List TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/System_State_Entry_Type ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/System_State_Entry_Type_List TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/SysHM_Ext_Type ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/SysHM_Ext_Type_List TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/System_HM_TableType ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Mod_HM_Ext_Type ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Mod_HM_Ext_Type_List TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Module_HM_Type ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortExt_Type ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortExt_Type_List TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/DirectionType TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortType ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/SamplingPortType ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ProcExt_Type ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ProcExt_Type_List TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ProcessType ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/QueuingPortType ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/SamplingPortType_List TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/QueuingPortType_List TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ProcessType_List TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PartitionExt_Type ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PartitionExt_Type_List TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/CriticalityType TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PartitionType ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PartitionType_List TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Memory_Requirements ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Memory_Ext_Type ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Memory_Ext_Type_List TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Memory_Element ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Memory_Element_List TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Sched_Ext_Type ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Sched_Ext_Type_List TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Window_Schedule_Element ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Window_Schedule_Element_List TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Window_Sched_Ext_Type ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Window_Sched_Ext_Type_List TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Schedule_Element ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_Schedule_Element_List TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Module_Schedule_Type ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Part_HM_Ext_Type ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Part_HM_Ext_Type_List TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_HM_Type ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Partition_HM_Type_List TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Pseudo_Partition ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Standard_Partition ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMappingType_Choice_Type TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Pseudo_Partition_Choice_Type ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Standard_Partition_Choice_Type ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMappingType_Choice_Union ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMappingType_Choice ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMap_Ext_Type ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMap_Ext_Type_List TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMappingType ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/PortMappingType_List TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Channel ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/Channel_List TYPE Channel_List = LIST OF Channel; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ModExt_Type ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ModExt_Type_List TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/ARINC_653_Schema/ARINC_653_Module ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Scheduling_Sequence TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Blocking_Time_Range TYPE Blocking_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Blocking_Time_Table TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Response_Time_Table TYPE Response_Time_Table = LIST OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Response_Time_Range TYPE Response_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Buffer_Size_Range TYPE Buffer_Size_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Buffer_Size_Table TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Buffer_Result_Range TYPE Buffer_Result_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Buffer_Result_Table TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Waiting_Time_Range TYPE Waiting_Time_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Waiting_Time_Table TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Density_Range TYPE Density_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Density_Table TYPE Density_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Densities_Range TYPE Densities_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Densities_Table TYPE Densities_Table = LIST OF Density_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Deadlock_Iterator TYPE Deadlock_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Deadlock_List TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Priority_Inversion_Iterator TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Priority_Inversion_List TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Buffer_Size_Item ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Density_Item ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Deadlock_Item ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Scheduling_Analysis/Priority_Inversion_Item ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Statement_Type TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Request_Range TYPE Framework_Request_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Request_Table TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Response_Range TYPE Framework_Response_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Response_Table TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Partioning_Type TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Output_Format TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Perform_Order TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Request ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Call_Framework_Interface/Framework_Response ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Multiprocessor_Services_Interface SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Multiprocessor_Services_Interface/Scheduling_Table TYPE Scheduling_Table = LIST OF Association; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Multiprocessor_Services_Interface/Scheduling_Table_Range TYPE Scheduling_Table_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Multiprocessor_Services_Interface/Scheduling_Result ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/AADL_Parser_Interface SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/AADL_Parser_Interface/Processor_Binding_Table TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/AADL_Parser_Interface/Processor_Binding_Range TYPE Processor_Binding_Range = Range; END_TYPE; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/AADL_Parser_Interface/Binding_Record_Type ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Xml_Architecture_Parser_Interface SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE;END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /CheddarBridge/Xml_Architecture_Parser_Interface/XML_Units TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE; ----! ----Platypus: Updating cheddar-dev: /CheddarBridge SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT;END_SCHEMA;SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT;END_SCHEMA;SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT;END_SCHEMA;SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE;END_SCHEMA;SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION;END_SCHEMA;SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY;END_SCHEMA;SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY;END_SCHEMA;SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY;END_SCHEMA;SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY;END_SCHEMA;SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY;END_SCHEMA;SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY;END_SCHEMA;SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY;END_SCHEMA;SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY;END_SCHEMA;SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE;END_SCHEMA;SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY;END_SCHEMA;SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY;END_SCHEMA;SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY;END_SCHEMA;SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY;END_SCHEMA;SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE;END_SCHEMA;SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE;END_SCHEMA;SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY;END_SCHEMA;SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY;END_SCHEMA;SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY;END_SCHEMA;SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_List = LIST OF Channel; END_TYPE; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY;END_SCHEMA;SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY;END_SCHEMA;SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY;END_SCHEMA;SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY;END_SCHEMA;SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY;END_SCHEMA;SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE;END_SCHEMA; ----! ----Platypus: Updating cheddar-dev: /CheddarBridge SCHEMA Framework_Config; USE FROM Basic_Types; (*"Priority_Range" Definition of priority range. We choose the most current value : (1) 256 priority levels (from 0 to 255); (2) Zero is the lowest priority level *) TYPE Priority_Range = INTEGER; END_TYPE; (*"Debug_Level" Activate Cheddar's debug mode. if trueThis debug mode allows the user to have some extra display *) TYPE Debug_Level = ENUMERATION OF ( No_Debug, Minimal, Verbose, Very_Verbose ); END_TYPE; (*"Languages" Define the language used in the graphical editor of Cheddar. Default language is "English" *) TYPE Languages = ENUMERATION OF ( Francais, English ); END_TYPE; (*"Cheddar_Debug" Maximum processors, tasks, messages, buffers and resources which can be defined in a cheddar XML file Increasing these constants implies increasing cheddar memory footprint *) CONSTANT Cheddar_Debug : Debug_Level := Very_Verbose; Max_Processors : Natural := 20; Max_Tasks : Natural := 200; Max_Messages : Natural := 5; Max_Buffers : Natural := 30; Max_Resources : Natural := 30; Max_Networks : Natural := 5; Max_Event_Analyzers : Natural := 10; Max_Address_Spaces : Natural := 20; Max_Sections : Natural := 50; Max_Schedulers : Natural := 1 + Max_Address_Spaces; Max_Transitions : Natural := 200; Max_Caches : Natural := 5; Max_Core_Units : Natural := 5; Max_Deployments : Natural := 20; Max_Objects : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Buffers + Max_Resources + Max_Networks + Max_Event_Analyzers + Max_Address_Spaces + Max_Sections + Max_Schedulers + Max_Address_Spaces + Max_Transitions + Max_Caches + Max_Core_Units; (*"Max_Scheduling_Period" Define the largest scheduling interval time that the simulator can compute. Increasing this constant implies increasing cheddar CPU usage *) Max_Scheduling_Period : Natural := 200000; (* Low_Priority : constant Priority_Range := Priority_Range'First; High_Priority : constant Priority_Range := Priority_Range'Last; *) Low_Priority : Priority_Range := 0; High_Priority : Priority_Range := 255; (*"Max_Big_Number_Size" Maximum accurrancy of big numbers packages. - Increase it if you need to run large XML Chedar project file - Increasing this constant implies increasing cheddar memory footprint - Increasing this constant implies increasing cheddar CPU usage *) Max_Big_Number_Size : Natural := 200; Current_Language : Languages := English; (*"Max_Tasks_For_A_Resource" Maximum number of tasks that can use a shared resource. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Resource : Natural := 10; (*"Max_Tasks_For_A_Buffer" Maximum number of tasks that can use a shared buffer. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_For_A_Buffer : Natural := 10; (*"Max_Variables" Define maximum of variables that can be defined in parametric scheduler Increasing this constant implies increasing cheddar memory footprint *) Max_Variables : Natural := 400; (*"Max_Statements" Maximum number of statements in a parametric scheduler. Increasing this constant implies increasing cheddar memory footprint *) Max_Statements : Natural := 400; (*"Max_Block_Level" The langage used to defined a parametric scheduler is block oriented : the constant below given the maximum depth level of block. Increasing this constant implies increasing cheddar memory footprint *) Max_Block_Level : Natural := 100; (*"Max_Tasks_Dependencies" Maximum number of dependencies of a XML Cheddar project file. Dependencies can be a message/buffer used by two tasks or a precedencies constraint. Increasing this constant implies increasing cheddar memory footprint *) Max_Tasks_Dependencies : Natural := 150; (*"Max_User_Defined_Task_Parameters" Define maximum of user's defined task parameter *) Max_User_Defined_Task_Parameters : Natural := 12; (*"Max_Framework_Parameters" Maximum of parameters during a framework call *) Max_Framework_Parameters : Natural := 20; (*"Max_Offsets" Define offset constants : a task can contain at most 3 offsets *) Max_Offsets : Natural := 5; (*"Max_Density_Size" This constant define the size of "xi" of a discrete density probability *) Max_Density_Size : Natural := 200; (*"Max_Requests" Maximum size of the framework request table. Increasing this constant implies increasing cheddar memory footprint *) Max_Requests : Natural := 20; (*"Max_String_Size" Maximum size of a fixed string *) Max_String_Size : Natural := 200; (*"Max_Simulation" This constant is used by the parametric simulation engine. It defines size of tables which store simulation data for all elements of Cheddar project (except time units) *) Max_Simulation : Natural := 0; (*"Sum_Simulation" Sum of all objects which can be stored in a XML project *) Sum_Simulation : Natural := Max_Processors + Max_Tasks + Max_Messages + Max_Resources + Max_Networks; END_CONSTANT; END_SCHEMA; SCHEMA Editor_Config; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; TYPE Data_From_Simulation = ENUMERATION OF ( Worst_Case, Best_Case, Average_Case, Plot_Case ); END_TYPE; (*"Data_From_Simulation_Table" *) TYPE Data_From_Simulation_Table = LIST OF AdaBoolean; END_TYPE; CONSTANT (*"Max_Time_Line_To_Display" Maximum number of time line displayed at simulation. If the number of tasks/messages/buffers/resources in a project is greater that this constant, the user have to choose which object the simulator engine has to display*) Max_Time_Line_To_Display : Natural := 30; (*"Time_Line_Between_Time_Axis" This constant stores the number of time line we draw between each timing axis *) Time_Line_Between_Time_Axis : Natural := 4; (*"Display_Witch_Time_Unit_Label" This constant stores how time unit axis are displayed. The constant give a duration (in time unit) between each time display on the axis*) Display_Witch_Time_Unit_Label : Natural := 5; (*"Max_Time_Line" Maximum number of time line which can de computed All these time line can not be displayed *) Max_Time_Line : Natural := Max_Tasks + Max_Messages + Max_Resources + Max_Buffers + ( Max_Tasks + Max_Messages + Max_Resources + Max_Buffers ) / Time_Line_Between_Time_Axis; (*"Generate_Events" Each item of this boolean table store the user's choose on which event the simulator engine will generate. options tuned by the user AT RUNTIME *) Generate_Events : Time_Unit_Event_Type_Boolean_Table := [ true ]; (* (others => True); *) (*"Schedule_All_Processeurs"should we do simulations on all processors ? options tuned by the user AT RUNTIME*) Schedule_All_Processeurs : BOOLEAN := false; (*"Schedule_And_Display_Event_Table"should we display the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Display_Event_Table : BOOLEAN := false; (*"Schedule_And_Export_Event_Table"should we save the event table after simulation ? options tuned by the user AT RUNTIME*) Schedule_And_Export_Event_Table : BOOLEAN := false; (*"Schedule_With_Offsets"should we do simulations according to offset ? options tuned by the user AT RUNTIME*) Schedule_With_Offsets : BOOLEAN := true; (*"Schedule_With_Resources"should we do simulations according to shared resources ? options tuned by the user AT RUNTIME*) Schedule_With_Resources : BOOLEAN := true; (*"Schedule_With_Precedencies"should we do simulations according to task precedencies ? options tuned by the user AT RUNTIME*) Schedule_With_Precedencies : BOOLEAN := true; (*"Has_Global_Seed"should we use only one seed to all random values generated during simulations ? options tuned by the user AT RUNTIME*) Has_Global_Seed : BOOLEAN := true; (*"Is_Global_Predictable_Seed"should we use seed with a predictable value to be able to do predictable simulation ? options tuned by the user AT RUNTIME *) Is_Global_Predictable_Seed : BOOLEAN := false; (*"Global_Seed_Value"if Has_Global_Seed and Is_Global_Predictable_Seed are True, Global_Seed_Value store the seed. options tuned by the user AT RUNTIME*) Global_Seed_Value : INTEGER := 0; (*"Response_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from response time. options tuned by the user AT RUNTIME *) Response_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Blocking_Time_From_Simulation"should we compute, from a simulation worst/best/average/plot cases from blocking time. options tuned by the user AT RUNTIME *) Blocking_Time_From_Simulation : Data_From_Simulation_Table := [ ]; (*"Context_Switch_From_Simulation" should we compute context switch during the simulation ? options tuned by the user AT RUNTIME*) Context_Switch_From_Simulation : BOOLEAN := true; (*"Preemption_From_Simulation" should we compute preemption during the simulation ? options tuned by the user AT RUNTIME*) Preemption_From_Simulation : BOOLEAN := true; (*"Run_Event_Analyzer_From_Simulation" should we run the event analyser during the simulation ? options tuned by the user AT RUNTIME*) Run_Event_Analyzer_From_Simulation : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA AADL_Config; CONSTANT (*"Aadl_Debug" Activate AADL Debug switch *) Aadl_Debug : BOOLEAN := false; (*"Aadl_Import_With_System_Name" Include system/sub-system name in Cheddar's features name *) Aadl_Import_With_System_Name : BOOLEAN := true; (*"Aadl_Import_Event_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_To_Precedencies : BOOLEAN := false; (*"Aadl_Import_Event_Data_To_Precedencies" Transform event port to task precedencies *) Aadl_Import_Event_Data_To_Precedencies : BOOLEAN := false; (*Aadl_Import_Event_To_Buffers_Messages Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Import_Event_Data_To_Buffers_Messages" Transform event port to buffers and messages (it automatically includes buffer/message task dependencies) *) Aadl_Import_Event_Data_To_Buffers_Messages : BOOLEAN := true; (*"Aadl_Export_Precedencies_To_Event_Data" Transform task precedencies to event data port connexions *) Aadl_Export_Precedencies_To_Event_Data : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Event" Transform task precedencies to event port connexions *) Aadl_Export_Precedencies_To_Event : BOOLEAN := false; (*"Aadl_Export_Precedencies_To_Properties" Transform task precedencies to a Cheddar property *) Aadl_Export_Precedencies_To_Properties : BOOLEAN := true; (*"Aadl_Process_Second_Import_Pass" Process the second AADL import pass which binds software components to hardware components *) Aadl_Process_Second_Import_Pass : BOOLEAN := true; (*"Aadl_Process_Third_Import_Pass" Process the third AADL import pass which build component relationships (i.e. connections) *) Aadl_Process_Third_Import_Pass : BOOLEAN := true; END_CONSTANT; END_SCHEMA; SCHEMA Basic_Types; ENTITY Range; v : INTEGER; END_ENTITY; ENTITY Association; END_ENTITY; ENTITY Iterator; END_ENTITY; TYPE AdaBoolean = BOOLEAN; END_TYPE; TYPE Natural = INTEGER; END_TYPE; END_SCHEMA; SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; END_SCHEMA; SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; END_SCHEMA; SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; END_SCHEMA; SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA; SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; END_SCHEMA; SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; END_SCHEMA; SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA; SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA; SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA; SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA; SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; END_SCHEMA; SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; END_SCHEMA; SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; END_SCHEMA; SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; END_SCHEMA; SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; END_SCHEMA; SCHEMA Time_Unit_Events; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Resources; USE FROM Tasks; USE FROM Messages; USE FROM Buffers; USE FROM Caches; TYPE Time_Unit_Event_Type = ENUMERATION OF ( Start_Of_Task_Capacity, End_Of_Task_Capacity, Write_To_Buffer, Read_From_Buffer, Context_Switch_Overhead, Running_Task, Task_activation, Allocate_Resource, Release_Resource, Wait_For_Resource, Send_Message, Receive_Message, Wait_For_Memory, Address_Space_Activation ); END_TYPE; TYPE Time_Unit_Event_Type_Boolean_Table = LIST OF AdaBoolean; END_TYPE; TYPE Time_Unit_Table = LIST OF Time_Unit_Event; END_TYPE; ENTITY Address_Space_Activation_Type; activation_address_space : STRING; duration : Natural; END_ENTITY; ENTITY Start_Of_Task_Capacity_Type; start_task : Generic_Task; END_ENTITY; ENTITY End_Of_Task_Capacity_Type; end_task : Generic_Task; END_ENTITY; ENTITY Write_To_Buffer_Type; write_buffer : Buffer; write_task : Generic_Task; write_size : Natural; END_ENTITY; ENTITY Read_From_Buffer_Type; read_buffer : Buffer; read_task : Generic_Task; read_size : Natural; END_ENTITY; ENTITY Context_Switch_Overhead_Type; switched_task : Generic_Task; END_ENTITY; ENTITY Running_Task_Type; running_core : STRING; running_task : Generic_Task; current_priority : priority_range; END_ENTITY; ENTITY Task_activation_Type; activation_task : Generic_Task; END_ENTITY; ENTITY Allocate_Resource_Type; allocate_task : Generic_Task; allocate_resource : Generic_Resource; END_ENTITY; ENTITY Release_Resource_Type; release_task : Generic_Task; release_resource : Generic_Resource; END_ENTITY; ENTITY Wait_For_Resource_Type; wait_for_resource_task : Generic_Task; wait_for_resource : Generic_Resource; END_ENTITY; ENTITY Send_Message_Type; send_task : Generic_Task; send_message : Generic_Message; END_ENTITY; ENTITY Receive_Message_Type; receive_task : Generic_Task; receive_message : Generic_Message; END_ENTITY; ENTITY Wait_For_Memory_Type; wait_for_memory_task : Generic_Task; wait_for_cache : Generic_Cache; END_ENTITY; ENTITY Time_Unit_Event_Union; start_of_task_capacity : Start_Of_Task_Capacity_Type; end_of_task_capacity : End_Of_Task_Capacity_Type; write_to_buffer : Write_To_Buffer_Type; read_from_buffer : Read_From_Buffer_Type; context_switch_overhead : Context_Switch_Overhead_Type; running_task : Running_Task_Type; task_activation : Task_activation_Type; allocate_resource : Allocate_Resource_Type; release_resource : Release_Resource_Type; wait_for_resource : Wait_For_Resource_Type; send_message : Send_Message_Type; receive_message : Receive_Message_Type; wait_for_memory : Wait_For_Memory_Type; address_space_activation : Address_Space_Activation_Type; END_ENTITY; ENTITY Time_Unit_Event; type_of_event : Time_Unit_Event_Type; union : Time_Unit_Event_Union; END_ENTITY; END_SCHEMA; SCHEMA ARINC_653_Schema; USE FROM Basic_Types; (*"DecOrHexValueType" pattern value="[+-]{0,1}[0-9]+|[+-]{0,1}0x[0-9a-fA-F]+" *) TYPE DecOrHexValueType = STRING; END_TYPE; (*"IdentifierValueType" Restricts indentifiers to hex or decimal numbers *) TYPE IdentifierValueType = DecOrHexValueType; END_TYPE; (*"NameType" A 1..30 character string *) TYPE NameType = STRING ( 30 ); END_TYPE; ENTITY ARINC_653_Object; END_ENTITY; (*"ModuleActionType" The actions to take when module level errors occur. *) TYPE ModuleActionType = ENUMERATION OF ( IGNORE, SHUTDOWN, RESET ); END_TYPE; (*"PartitionActionType" The actions to take when partition level errors occur. *) TYPE PartitionActionType = ENUMERATION OF ( IGNORE, IDLE, WARM_START, COLD_START ); END_TYPE; ENTITY Error_ID_Type SUBTYPE OF ( ARINC_653_Object ); ErrorIdentifier : IdentifierValueType; Description : OPTIONAL NameType; PartitionAction : OPTIONAL PartitionActionType; ModuleAction : OPTIONAL ModuleActionType; END_ENTITY; (*"Error_ID_Action_Type" The error code and the action to taken *) ENTITY Error_ID_Action_Type SUBTYPE OF ( Error_ID_Type ); END_ENTITY; (*"ErrorLevelType" MODULE, PARTITION, or PROCESS level error. *) TYPE ErrorLevelType = ENUMERATION OF ( MODULE, PARTITION, PROCESS ); END_TYPE; (*"ErrorCodeType" The predefined ARINC 653 process errors. *) TYPE ErrorCodeType = ENUMERATION OF ( DEADLINE_MISSED, APPLICATION_ERROR, NUMERIC_ERROR, ILLEGAL_REQUEST, STACK_OVERFLOW, MEMORY_VIOLATION, HARDWARE_FAULT, POWER_FAILURE ); END_TYPE; (*"Error_ID_Level_Type" The mapping of error IDs to the module, partition or process level. *) ENTITY Error_ID_Level_Type SUBTYPE OF ( Error_ID_Type ); ErrorLevel : ErrorLevelType; ErrorCode : OPTIONAL ErrorCodeType; END_ENTITY; TYPE Error_ID_Type_List = LIST OF Error_ID_Level_Type; END_TYPE; ENTITY System_State_Entry_Type SUBTYPE OF ( ARINC_653_Object ); Error_ID_Action : Error_ID_Type_List; SystemState : IdentifierValueType; Description : OPTIONAL NameType; END_ENTITY; TYPE System_State_Entry_Type_List = LIST OF System_State_Entry_Type; END_TYPE; (*"SysHM_Ext_Type" Provider UNIQUE FOR Sys_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY SysHM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE SysHM_Ext_Type_List = LIST OF SysHM_Ext_Type; END_TYPE; (*"System_HM_TableType" The system states and error codes are mapped to the Module, Partition or Process level. *) ENTITY System_HM_TableType SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; SysHM_Ext : SysHM_Ext_Type_List; END_ENTITY; (*"Mod_HM_Ext_Type" Provider UNIQUE FOR Mod_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Mod_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Mod_HM_Ext_Type_List = LIST OF Mod_HM_Ext_Type; END_TYPE; (*"Module_HM_Type" System state and error codes are mapped to actions taken at the module level. *) ENTITY Module_HM_Type SUBTYPE OF ( ARINC_653_Object ); System_State_Entry : System_State_Entry_Type_List; Mod_HM_Ext : Mod_HM_Ext_Type_List; ModuleCallback : OPTIONAL NameType; END_ENTITY; (*"PortExt_Type" Provider Unique for PortType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY PortExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortExt_Type_List = LIST OF PortExt_Type; END_TYPE; TYPE DirectionType = ENUMERATION OF ( SOURCE, DESTINATION ); END_TYPE; (*"PortType" The base port attributes of both sampling and queuing ports *) ENTITY PortType SUBTYPE OF ( ARINC_653_Object ); PortExt : PortExt_Type_List; Name : NameType; MaxMessageSize : DecOrHexValueType; Direction : DirectionType; END_ENTITY; (*"SamplingPortType" The configurable attributes of the sampling port. *) ENTITY SamplingPortType SUBTYPE OF ( PortType ); RefreshRateSeconds : REAL; END_ENTITY; (*"ProcExt_Type" Provider Unique for ProcType level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ProcExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ProcExt_Type_List = LIST OF ProcExt_Type; END_TYPE; ENTITY ProcessType SUBTYPE OF ( ARINC_653_Object ); ProcExt : ProcExt_Type_List; Name : OPTIONAL NameType; StackSize : OPTIONAL DecOrHexValueType; END_ENTITY; (*"QueuingPortType" The configurable attributes of the queuing port. *) ENTITY QueuingPortType SUBTYPE OF ( PortType ); MaxNbMessages : INTEGER; END_ENTITY; TYPE SamplingPortType_List = LIST OF SamplingPortType; END_TYPE; TYPE QueuingPortType_List = LIST OF QueuingPortType; END_TYPE; TYPE ProcessType_List = LIST OF ProcessType; END_TYPE; (*"PartitionExt_Type" Provider UNIQUE FOR Partition level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PartitionExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PartitionExt_Type_List = LIST OF PartitionExt_Type; END_TYPE; TYPE CriticalityType = ENUMERATION OF ( LEVEL_A, LEVEL_B, LEVEL_C, LEVEL_D, LEVEL_E ); END_TYPE; (*"PartitionType" The system and application partition type definition. *) ENTITY PartitionType SUBTYPE OF ( ARINC_653_Object ); (*"PartitionType.Sampling_Port" The sampling ports for this partition. *) Sampling_Port : SamplingPortType_List; (*"PartitionType.Queuing_Port" The queuing ports for this partition. *) Queuing_Port : QueuingPortType_List; (*"PartitionType.Process" Optional process attributes for this partition. *) Process : ProcessType_List; (*"PartitionType.PartitionExt" Specific Partition extensions. *) PartitionExt : PartitionExt_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; (*"PartitionType.Criticality" default = "LEVEL_A" *) Criticality : CriticalityType; (*"PartitionType.SystemPartition" default = "False" *) SystemPartition : BOOLEAN; EntryPoint : NameType; END_ENTITY; TYPE PartitionType_List = LIST OF PartitionType; END_TYPE; (*"Memory_Requirements" A single partition can have multiple mapping requirements. Defines memory bounds of the partition, with appropriate code/data segregation. *) ENTITY Memory_Requirements SUBTYPE OF ( ARINC_653_Object ); regionName : OPTIONAL NameType; memory_type : STRING; sizeBytes : DecOrHexValueType; physicalAddress : OPTIONAL DecOrHexValueType; memoryAccess : STRING; END_ENTITY; (*"Memory_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Memory_Ext_Type SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Memory_Ext_Type_List = LIST OF Memory_Ext_Type; END_TYPE; ENTITY Partition_Memory_Element SUBTYPE OF ( ARINC_653_Object ); Memory_Requirements : Memory_Requirements; Memory_Ext : Memory_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; END_ENTITY; TYPE Partition_Memory_Element_List = LIST OF Partition_Memory_Element; END_TYPE; (*"Partition_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Partition_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Partition_Sched_Ext_Type_List = LIST OF Partition_Sched_Ext_Type; END_TYPE; ENTITY Window_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); WindowIdentifier : DecOrHexValueType; WindowStartSeconds : REAL; WindowDurationSeconds : REAL; (*"Window_Schedule_Element.PartitionPeriodStart" default="false" *) PartitionPeriodStart : BOOLEAN; END_ENTITY; TYPE Window_Schedule_Element_List = LIST OF Window_Schedule_Element; END_TYPE; (*"Window_Sched_Ext_Type" Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY Window_Sched_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Window_Sched_Ext_Type_List = LIST OF Window_Sched_Ext_Type; END_TYPE; ENTITY Partition_Schedule_Element SUBTYPE OF ( ARINC_653_Object ); (*"Partition_Schedule_Element.Window_Schedule" The allocation of the partition to partition windows within a major frame. *) Window_Schedule : Window_Schedule_Element_List; Window_Sched_Ext : Window_Sched_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PeriodSeconds : REAL; PeriodDurationSeconds : REAL; END_ENTITY; TYPE Partition_Schedule_Element_List = LIST OF Partition_Schedule_Element; END_TYPE; (*"Module_Schedule_Type" The scheduling requirements for the module *) ENTITY Module_Schedule_Type SUBTYPE OF ( ARINC_653_Object ); (*"Module_Schedule_Type.Partition_Schedule" The scheduling requirements for partitions within the module. *) Partition_Schedule : Partition_Schedule_Element_List; Partition_Sched_Ext : Partition_Sched_Ext_Type_List; MajorFrameSeconds : REAL; END_ENTITY; (*"Part_HM_Ext_Type" Provider UNIQUE FOR Partition_HM level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY Part_HM_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE Part_HM_Ext_Type_List = LIST OF Part_HM_Ext_Type; END_TYPE; (*"Partition_HM_Type" Error codes are mapped to actions taken at the partition level. *) ENTITY Partition_HM_Type SUBTYPE OF ( ARINC_653_Object ); (*"System_State_Entry" The state of the system when the error occurred. *) System_State_Entry : System_State_Entry_Type_List; Part_HM_Ext : Part_HM_Ext_Type_List; PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PartitionCallback : OPTIONAL NameType; END_ENTITY; TYPE Partition_HM_Type_List = LIST OF Partition_HM_Type; END_TYPE; (*"Pseudo_Partition" A partition that is external to the module *) ENTITY Pseudo_Partition SUBTYPE OF ( ARINC_653_Object ); Name : OPTIONAL NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; partition_procedure : OPTIONAL NameType; END_ENTITY; (*"Standard_Partition" A partition within the module. *) ENTITY Standard_Partition SUBTYPE OF ( ARINC_653_Object ); PartitionIdentifier : IdentifierValueType; PartitionName : OPTIONAL NameType; PortName : NameType; PhysicalAddress : OPTIONAL DecOrHexValueType; END_ENTITY; TYPE PortMappingType_Choice_Type = ENUMERATION OF ( Pseudo_Partition_Choice, Standard_Partition_Choice ); END_TYPE; ENTITY Pseudo_Partition_Choice_Type; pseudo_partition : Pseudo_Partition; END_ENTITY; ENTITY Standard_Partition_Choice_Type; standard_partition : Standard_Partition; END_ENTITY; ENTITY PortMappingType_Choice_Union; pseudo_partition_Choice : Pseudo_Partition_Choice_Type; standard_partition_Choice : Standard_Partition_Choice_Type; END_ENTITY; ENTITY PortMappingType_Choice; type_of_PortMappingType_Choice : PortMappingType_Choice_Type; union : PortMappingType_Choice_Union; END_ENTITY; (*"PortMap_Ext_Type" Provider UNIQUE FOR PortMap level attributes.Implementer UNIQUE extension root.Subtypes can be defined specifically BY implementer *) ENTITY PortMap_Ext_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE PortMap_Ext_Type_List = LIST OF PortMap_Ext_Type; END_TYPE; (*"PortMappingType" The port communication mapping. *) ENTITY PortMappingType SUBTYPE OF ( ARINC_653_Object ); choice : PortMappingType_Choice; PortMap_Ext : PortMap_Ext_Type_List; END_ENTITY; TYPE PortMappingType_List = LIST OF PortMappingType; END_TYPE; (*"Channel" Globally identifies a channel connected to a module. *) ENTITY Channel SUBTYPE OF ( ARINC_653_Object ); (*"Channel.Source" The source port for the channel. *) Source : PortMappingType; (*"Channel.Destination" The destination ports for the channel. *) Destination : PortMappingType_List; ChannelIdentifier : IdentifierValueType; ChannelName : OPTIONAL NameType; END_ENTITY; TYPE Channel_List = LIST OF Channel; END_TYPE; (*"ModExt_Type" Provider Unique for Module level attributes. Implementer unique extension root. Subtypes can be defined specifically by implementers *) ENTITY ModExt_Type ABSTRACT SUPERTYPE SUBTYPE OF ( ARINC_653_Object ); END_ENTITY; TYPE ModExt_Type_List = LIST OF ModExt_Type; END_TYPE; (*"ARINC_653_Module" Schema for configuring an ARINC 653 instance *) ENTITY ARINC_653_Module SUBTYPE OF ( ARINC_653_Object ); (*"ARINC_653_Module.System_HM_List" The List that maps the system state and error IDs to an error level. *) System_HM_List : System_HM_TableType; (*"ARINC_653_Module.Module_HM_List" The actions to take when a module level error occurs. *) Module_HM_List : Module_HM_Type; (*"ARINC_653_Module.Partition" The application space and its ports. Where the Applications resides. Uses ARINC 653 API *) Partition : PartitionType_List; (*"ARINC_653_Module.Partition_Memory" Partition memory requirements. *) Partition_Memory : Partition_Memory_Element_List; (*"ARINC_653_Module.Module_Schedule" The scheduling requirements for the module *) Module_Schedule : Module_Schedule_Type; (*"ARINC_653_Module.Partition_HM_List"The actions to take when a partition level error occurs. *) Partition_HM_List : Partition_HM_Type_List; (*"ARINC_653_Module.Connection_List" A List of channels and their port mappings *) Connection_List : Channel_List; (*"ARINC_653_Module.ModExt" Implementer specific extensions *) ModExt : ModExt_Type_List; ModuleName : OPTIONAL NameType; ModuleVersion : OPTIONAL NameType; ModuleId : OPTIONAL IdentifierValueType; END_ENTITY; END_SCHEMA; SCHEMA Scheduling_Analysis; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Time_Unit_Events; USE FROM Buffers; TYPE Scheduling_Sequence = Time_Unit_Table; END_TYPE; TYPE Blocking_Time_Range = Range; END_TYPE; TYPE Blocking_Time_Table = LIST OF Density_Item; END_TYPE; TYPE Response_Time_Table = LIST OF Association; END_TYPE; TYPE Response_Time_Range = Range; END_TYPE; TYPE Buffer_Size_Range = Range; END_TYPE; TYPE Buffer_Size_Table = LIST OF Buffer_Size_Item; END_TYPE; TYPE Buffer_Result_Range = Range; END_TYPE; (* TYPE Buffer_Result_Table = LIST [ 0 : Max_Buffers] OF Association; END_TYPE; *) TYPE Buffer_Result_Table = LIST [ 0 : 100 ] OF Association; END_TYPE; TYPE Waiting_Time_Range = Range; END_TYPE; TYPE Waiting_Time_Table = LIST OF REAL; END_TYPE; TYPE Density_Range = Range; END_TYPE; TYPE Density_Table = LIST OF Density_Item; END_TYPE; TYPE Densities_Range = Range; END_TYPE; TYPE Densities_Table = LIST OF Density_Item; END_TYPE; TYPE Deadlock_Iterator = Iterator; END_TYPE; TYPE Deadlock_List = LIST OF Deadlock_Item; END_TYPE; TYPE Priority_Inversion_Iterator = Iterator; END_TYPE; TYPE Priority_Inversion_List = LIST OF Priority_Inversion_Item; END_TYPE; ENTITY Buffer_Size_Item; time : Natural; size : Natural; END_ENTITY; ENTITY Density_Item; response_time : Natural; probability : REAL; END_ENTITY; ENTITY Deadlock_Item; time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; ENTITY Priority_Inversion_Item; start_time : Natural; end_time : Natural; task_name : STRING; resource_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Call_Framework_Interface; USE FROM Framework_Config; USE FROM basic_types; USE FROM Parameters; TYPE Framework_Statement_Type = ENUMERATION OF ( Scheduling_Simulation_Basics, Scheduling_Simulation_Time_Line, Scheduling_Simulation_Preemption_Number, Scheduling_Simulation_Context_Switch_Number, Scheduling_Simulation_Response_Time, Scheduling_Simulation_All_Response_Time, Scheduling_Simulation_Blocking_Time, Scheduling_Simulation_Priority_Inversion, Scheduling_Simulation_Deadlock, Scheduling_Simulation_Run_Event_Handler, Scheduling_Feasibility_Basics, Scheduling_Feasibility_Response_Time, Scheduling_Feasibility_Cpu_Utilization, Scheduling_Set_Priorities_According_To_Deadline_Monotonic, Scheduling_Set_Priorities_According_To_Rate_Monotonic, Scheduling_Feasibility_Compute_Blocking_Time, Scheduling_Feasibility_Compute_And_Set_Blocking_Time, Scheduling_Feasibility_First_Fit, Scheduling_Feasibility_General_Task, Scheduling_Feasibility_Next_Fit, Scheduling_Feasibility_Best_Fit, Scheduling_Feasibility_Small_Task, Scheduling_Feasibility_Test_By_Name, Global_Memory_Set_Requirement_Analysis, Global_Memory_Compute_Requirement_Analysis, Buffer_Feasibility_Tests, Buffer_Scheduling_Simulation, Random_Response_Time_Density, Dependency_Compute_End_To_End_Response_Time_One_Step, Dependency_Set_End_To_End_Response_Time_One_Step, Dependency_Compute_End_To_End_Response_Time_All_Steps, Dependency_Set_End_To_End_Response_Time_All_Steps, Dependency_Compute_Chetto_Blazewicz_Priority, Dependency_Compute_Chetto_Blazewicz_Deadline, Dependency_Set_Chetto_Blazewicz_Priority, Dependency_Set_Chetto_Blazewicz_Deadline, Select_Feasibility_Tests_Simple, Select_Feasibility_Tests_Compositional ); END_TYPE; TYPE Framework_Request_Range = Range; END_TYPE; TYPE Framework_Request_Table = LIST [ 0 : Max_Requests] OF Framework_Request; END_TYPE; TYPE Framework_Response_Range = Range; END_TYPE; TYPE Framework_Response_Table = LIST [ 0 : Max_Requests] OF Framework_Response; END_TYPE; TYPE Partioning_Type = ENUMERATION OF ( General_Task, Best_Fit, First_Fit, Next_Fit, Small_Task ); END_TYPE; TYPE Output_Format = ENUMERATION OF ( Xml_Output, String_Output, Raw_Output ); END_TYPE; TYPE Perform_Order = ENUMERATION OF ( Total_Order, Causal_Order ); END_TYPE; ENTITY Framework_Request; statement : Framework_Statement_Type; param : Framework_Parameters_Table; target : STRING; END_ENTITY; ENTITY Framework_Response; title : STRING; text : STRING; END_ENTITY; END_SCHEMA; SCHEMA Multiprocessor_Services_Interface; USE FROM scheduling_analysis; USE FROM Basic_Types; USE FROM Processors; USE FROM Framework_Config; TYPE Scheduling_Table = LIST OF Association; END_TYPE; TYPE Scheduling_Table_Range = Range; END_TYPE; ENTITY Scheduling_Result; scheduling_msg : STRING; has_error : BOOLEAN; error_msg : STRING; result : Scheduling_Sequence; END_ENTITY; END_SCHEMA; SCHEMA AADL_Parser_Interface; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Processor_Binding_Table = LIST OF Binding_Record_Type; END_TYPE; TYPE Processor_Binding_Range = Range; END_TYPE; ENTITY Binding_Record_Type; cpu_name : STRING; address_space_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Xml_Architecture_Parser_Interface; TYPE XML_Units = ENUMERATION OF ( core_units_xml, address_spaces_xml, processors_xml, buffers_xml, resources_xml, dependencies_xml, networks_xml, messages_xml, tasks_xml, task_groups_xml, deployments_xml, event_analyzers_xml ); END_TYPE; END_SCHEMA; ----! ----SNAPSHOT----2014-03-13T10:52:04.991668+01:00 Pharo.image priorSource: 41700515! ----SNAPSHOT----2014-03-13T10:52:41.269016+01:00 Pharo.image priorSource: 43271524! ----SNAPSHOT----2014-03-13T10:53:58.746283+01:00 Pharo.image priorSource: 43271609! PlatypusCoreSchemaInstance subclass: #PTsPlatypustoolboxSchemaInstance instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance commentStamp: 'platypus comment' prior: 0! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; END_SCHEMA; ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: 'PTs'. namesBuilder systemCategoryPrefix: 'PTs'. namesBuilder rootClassName: 'PTsCoreEntity'. namesBuilder rootClassSystemCategory: 'PTs-CoreEntity'. ^ namesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition1 ^ #(#express_dictionary_queries #PTsExpressDictionaryQueriesSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition2 ^ #(#express_toolsbox_functions #PTsExpressToolsboxFunctionsSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinitionCount ^ 2 ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context ^ context ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context: aContext context := aContext. super context: aContext ! ! PlatypusCoreRepository subclass: #PTsPlatypustoolboxRepository instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing'! repositoryClassName ^ #PTsPlatypustoolboxRepository ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-accessing'! generatedMetaDataSchemaInstanceName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing'! externalSchemaInstanceClassNames ^ #(#PltPlatypusMetaSchemasSchemaInstance) ! ! PlatypusCoreAbstractVisitor subclass: #PTsAbstractVisitor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-initializing'! initialize self reinitializeSingleton. self singleton buildIndexes ! ! PlatypusCoreSchema subclass: #PTsExpressDictionaryQueriesSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsExpressDictionaryQueriesSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 0 ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#expressionValueToString #PTsExpressionValueToStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#typeof_as_string #PTsTypeofAsStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#schema_definition_of #PTsSchemaDefinitionOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#schema_instance_of #PTsSchemaInstanceOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#remarks_for #PTsRemarksForFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#clean_remark_text_of #PTsCleanRemarkTextOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#root_entity_list #PTsRootEntityListFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#subtypes_of #PTsSubtypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#attribute_named_from #PTsAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#has_attribute_named #PTsHasAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#inherited_attribute_named_from #PTsInheritedAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#has_inherited_attribute_named #PTsHasInheritedAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#query_attributes #PTsQueryAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#attribute_redeclared_by #PTsAttributeRedeclaredByFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#all_supertypes_of #PTsAllSupertypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#local_root_supertype_of #PTsLocalRootSupertypeOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration17 ^ #(#inherits_from_entity_named #PTsInheritsFromEntityNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration18 ^ #(#inherited_attributes #PTsInheritedAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration19 ^ #(#inherited_explicit_attributes #PTsInheritedExplicitAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration20 ^ #(#derive_attribute_result #PTsDeriveAttributeResultFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 20 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExpressionValueToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsExpressionValueToStringFunction commentStamp: 'platypus comment' prior: 0! FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-instance-creation'! arg: aPTsExpression ^ self new arg: aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110416114! arg: aPTsExpression arg := aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTypeofAsStringFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsTypeofAsStringFunction commentStamp: 'platypus comment' prior: 0! FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityInstance ^ self new e: aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110417958! e: aPTsEntityInstance e := aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (('[' pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)); add: '; '; yourself))) pltPlus: ']') ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaDefinitionOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSchemaDefinitionOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110420140! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION') ifTrue: [ ^ self return: self e ]. ^ self return: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: (self e ownerUsingContext: self class context); yourself)) ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaInstanceOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSchemaInstanceOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110422260! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) ownerUsingContext: self class context) ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRemarksForFunction instanceVariableNames: 'e sch remarks ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsRemarksForFunction commentStamp: 'platypus comment' prior: 0! FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; ! !PTsRemarksForFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110424485! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! sch: aPTsSchemaDefinition sch := aPTsSchemaDefinition ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! remarks: aListOfPTsRemark remarks := aListOfPTsRemark ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsRemark as: OrderedCollection ] ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! sch ^ sch ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing'! remarks ^ remarks ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self sch: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). self remarks: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no56 | PlatypusCoreAliasStatement alias: ((self sch remarkReferencesUsingContext: self class context) pltAt: no56) statementsBlock: [ :remref2479 | ((remref2479 referencedUsingContext: self class context) refUsingContext: self class context) == self e ifTrue: [ self remarks: (self remarks pltPlus: (remref2479 remarkUsingContext: self class context)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)). ^ self return: self remarks ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCleanRemarkTextOfFunction instanceVariableNames: 'rem foundMarkPos ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsCleanRemarkTextOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-instance-creation'! rem: aPTsRemark ^ self new rem: aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rem: (values at: 1) ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110428158! rem: aPTsRemark rem := aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing'! foundMarkPos: anInteger foundMarkPos := anInteger ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing'! rem ^ rem ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing'! foundMarkPos ^ foundMarkPos ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self foundMarkPos: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2278 | (((self rem textUsingContext: self class context) pltAt: no2278) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no2278) = '<' ]) ifTrue: [ self foundMarkPos: no2278. PlatypusExpressEscapeStatementException signal ] ifFalse: [ ((self rem textUsingContext: self class context) pltAt: no2278) ~= ' ' ifTrue: [ PlatypusExpressEscapeStatementException signal ] ] ] from: 1 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)). self foundMarkPos > 0 ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no3993 | (((self rem textUsingContext: self class context) pltAt: no3993) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no3993) = '>' ]) ifTrue: [ ^ self return: ((self rem textUsingContext: self class context) pltCopyFrom: (no3993 pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself))) ] ] from: (self foundMarkPos pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)) ]. ^ self return: (self rem textUsingContext: self class context) ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRootEntityListFunction instanceVariableNames: 'entities l ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsRootEntityListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-instance-creation'! entities: aListOfPTsEntityDefinition ^ self new entities: aListOfPTsEntityDefinition ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self entities: (values at: 1) ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110432066! entities: aListOfPTsEntityDefinition entities := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing'! l: aListOfPTsEntityDefinition l := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing'! entities ^ entities ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self l: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no455 | PlatypusCoreAliasStatement alias: (self entities pltAt: no455) statementsBlock: [ :ent1944 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (ent1944 supertypesUsingContext: self class context); yourself)) = 0 ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ifFalse: [ PlatypusCoreAliasStatement alias: (((ent1944 supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :sup2674 | (sup2674 ownerUsingContext: self class context) ~~ (ent1944 ownerUsingContext: self class context) ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). ^ self return: self l ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSubtypesOfFunction instanceVariableNames: 'ent allent ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSubtypesOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-instance-creation'! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ^ self new ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ent: (values at: 1). self allent: (values at: 2) ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110436015! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition self ent: aPTsEntityDefinition. self allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing'! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing'! allent: aListOfPTsEntityDefinition allent := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing'! allent ^ allent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (self allent select: [ :e273 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((e273 supertypesUsingContext: self class context) select: [ :ee953 | (ee953 refUsingContext: self class context) = self ent ]); yourself)) > 0 ]) ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 0! FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110438973! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((self e attributesUsingContext: self class context) select: [ :a4 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a4 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsHasAttributeNamedFunction commentStamp: 'platypus comment' prior: 0! FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110442460! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 0! FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110445273! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) select: [ :a403 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a403 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasInheritedAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsHasInheritedAttributeNamedFunction commentStamp: 'platypus comment' prior: 0! FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449012! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsInheritedAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsQueryAttributesFunction instanceVariableNames: 'ent attrKind withInherited withRedeclaring attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsQueryAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-instance-creation'! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ^ self new ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ent: (values at: 1). self attrKind: (values at: 2). self withInherited: (values at: 3). self withRedeclaring: (values at: 4) ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110452092! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 self ent: aPTsEntityDefinition. self attrKind: aString. self withInherited: aBoolean. self withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! attrKind: aString attrKind := aString ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! withInherited: aBoolean withInherited := aBoolean ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! withRedeclaring: aBoolean1 withRedeclaring := aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! attrKind ^ attrKind ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! withInherited ^ withInherited ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! withRedeclaring ^ withRedeclaring ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self withInherited ifTrue: [ self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; yourself)) ] ifFalse: [ self attributes: (self ent attributesUsingContext: self class context) ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself)) ifTrue: [ self attributes: (self attributes select: [ :a2389 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a2389; yourself)) includes: ('PLATYPUS_DICTIONARY_SCHEMA.' pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself))) ]) ]. self withRedeclaring not ifTrue: [ self attributes: (self attributes select: [ :a3202 | (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (a3202 redeclaringUsingContext: self class context); yourself)) not ]) ]. ^ self return: self attributes ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeRedeclaredByFunction instanceVariableNames: 'ent testedAttrPos attributes testedAttr ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAttributeRedeclaredByFunction commentStamp: 'platypus comment' prior: 0! FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-instance-creation'! ent: aPTsEntityDefinition testedAttrPos: anInteger ^ self new ent: aPTsEntityDefinition testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ent: (values at: 1). self testedAttrPos: (values at: 2) ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110457214! ent: aPTsEntityDefinition testedAttrPos: anInteger self ent: aPTsEntityDefinition. self testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! testedAttrPos: anInteger testedAttrPos := anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! testedAttr: aPTsAttribute testedAttr := aPTsAttribute ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! testedAttrPos ^ testedAttrPos ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing'! testedAttr ^ testedAttr ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attributes: (PTsQueryAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; add: nil; add: true; add: true; yourself)). self testedAttr: (self attributes pltAt: self testedAttrPos). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no506 | PlatypusCoreAliasStatement alias: (self attributes pltAt: no506) statementsBlock: [ :curr1999 | curr1999 = self testedAttr ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :noi3548 | PlatypusCoreAliasStatement alias: (self attributes pltAt: noi3548) statementsBlock: [ :curri1381 | ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (curri1381 redeclaringUsingContext: self class context); yourself)) and: [ ((curri1381 redeclaringUsingContext: self class context) refUsingContext: self class context) = curr1999 ]) ifTrue: [ ^ self return: curri1381 ] ] ] from: (no506 pltPlus: 1) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). ^ self return: nil ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllSupertypesOfFunction instanceVariableNames: 'e res ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAllSupertypesOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110461901! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing'! res: aListOfPTsEntityDefinition res := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing'! res ^ res ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self res: Array new. " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION') ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no1352 | self res: ((PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: (((self e supertypesUsingContext: self class context) pltAt: no1352) refUsingContext: self class context); yourself)) pltPlus: self res) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) ]. self res: (self res pltPlus: self e). ^ self return: self res ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLocalRootSupertypeOfFunction instanceVariableNames: 'e sups tmp ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsLocalRootSupertypeOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110465092! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! sups: aListOfPTsEntityDefinition sups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! tmp: aListOfPTsEntityDefinition1 tmp := aListOfPTsEntityDefinition1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition1 as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! sups ^ sups ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing'! tmp ^ tmp ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self sups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" self tmp: (self sups select: [ :s2435 | (s2435 ownerUsingContext: self class context) == (self e ownerUsingContext: self class context) ]). ^ self return: (self tmp pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self tmp; yourself))) ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritsFromEntityNamedFunction instanceVariableNames: 'e supname key allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInheritsFromEntityNamedFunction commentStamp: 'platypus comment' prior: 0! FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition supname: aString ^ self new e: aPTsEntityDefinition supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1). self supname: (values at: 2) ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110468212! e: aPTsEntityDefinition supname: aString self e: aPTsEntityDefinition. self supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! supname: aString supname := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! supname ^ supname ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing'! allsups ^ allsups ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self supname; yourself)). self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self allsups select: [ :i2341 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (i2341 nameUsingContext: self class context); yourself)) = self key ]); yourself)) > 0 ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributesFunction instanceVariableNames: 'e res allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110471896! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! res: aListOfPTsAttribute res := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! res ^ res ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing'! allsups ^ allsups ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self res: Array new. self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no135 | self res: (self res pltPlus: ((self allsups pltAt: no135) attributesUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)). ^ self return: self res ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedExplicitAttributesFunction instanceVariableNames: 'e attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInheritedExplicitAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-instance-creation'! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110475121! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (self attributes select: [ :a860 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a860; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' ]) ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsDeriveAttributeResultFunction instanceVariableNames: 'd ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsDeriveAttributeResultFunction commentStamp: 'platypus comment' prior: 0! FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-instance-creation'! d: aPTsDerivedAttribute ^ self new d: aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self d: (values at: 1) ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110478055! d: aPTsDerivedAttribute d := aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing'! d ^ d ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [ self halt ]. self halt. self return: evalResult ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #PTsExpressToolsboxFunctionsSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsExpressToolsboxFunctionsSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; END_SCHEMA; ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 0 ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#string_ends_with #PTsStringEndsWithFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#string_replace #PTsStringReplaceFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#SmalltalkCodeOf #PTsSmalltalkCodeOfFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#StringAggregateConcatSeparatedBy #PTsStringAggregateConcatSeparatedByFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#LinesFromString #PTsLinesFromStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#SetToAggregate #PTsSetToAggregateFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#SetToList #PTsSetToListFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#ListToSet #PTsListToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#AggregateToSet #PTsAggregateToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#capitalize #PTsCapitalizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#lowerize #PTsLowerizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#upperize #PTsUpperizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#ToString #PTsToStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#numbered_name #PTsNumberedNameFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#allModelInstances #PTsAllModelInstancesFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#askForExpressDictionaryMetaData #PTsAskForExpressDictionaryMetaDataFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 16 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringEndsWithFunction instanceVariableNames: 's token ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsStringEndsWithFunction commentStamp: 'platypus comment' prior: 0! FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-instance-creation'! s: aString token: aString1 ^ self new s: aString token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self s: (values at: 1). self token: (values at: 2) ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110494634! s: aString token: aString1 self s: aString. self token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing'! token: aString1 token := aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing'! token ^ token ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) >= (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself)) ifTrue: [ (self s pltCopyFrom: (((PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) pltMinus: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself))) pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself))) = self token ifTrue: [ ^ self return: true ] ]. ^ self return: false ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringReplaceFunction instanceVariableNames: 'src replWhat replWith ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsStringReplaceFunction commentStamp: 'platypus comment' prior: 0! FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-instance-creation'! src: aString replWhat: aString1 replWith: aString2 ^ self new src: aString replWhat: aString1 replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self src: (values at: 1). self replWhat: (values at: 2). self replWith: (values at: 3) ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110497701! src: aString replWhat: aString1 replWith: aString2 self src: aString. self replWhat: aString1. self replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! src: aString src := aString ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! replWhat: aString1 replWhat := aString1 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! replWith: aString2 replWith := aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! src ^ src ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! replWhat ^ replWhat ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing'! replWith ^ replWith ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSmalltalkCodeOfFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSmalltalkCodeOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-instance-creation'! arg: aString ^ self new arg: aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110500368! arg: aString arg := aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: (PltStringLiteral val: self arg) asClearText ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringAggregateConcatSeparatedByFunction instanceVariableNames: 'l sep s ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsStringAggregateConcatSeparatedByFunction commentStamp: 'platypus comment' prior: 0! FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-instance-creation'! l: aListOfString sep: aString ^ self new l: aListOfString sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self l: (values at: 1). self sep: (values at: 2) ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110502424! l: aListOfString sep: aString self l: aListOfString. self sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! l: aListOfString l := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! sep: aString sep := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! sep ^ sep ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: ''. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1923 | self s: (self s pltPlus: (self l pltAt: no1923)). no1923 < (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) ifTrue: [ self s: (self s pltPlus: self sep) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). ^ self return: self s ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLinesFromStringFunction instanceVariableNames: 'source lines ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsLinesFromStringFunction commentStamp: 'platypus comment' prior: 0! FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-instance-creation'! source: aString ^ self new source: aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self source: (values at: 1) ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110505766! source: aString source := aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing'! lines: aListOfString lines := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing'! source ^ source ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing'! lines ^ lines ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self lines: Array new. " ---------- statements ----------" "---------- native statement ---------- " self lines addAll: self source lines. ^ self return: self lines ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToAggregateFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSetToAggregateFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-instance-creation'! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110507870! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: self input ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToListFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsSetToListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsSetToListFunction methodsFor: 'platypus-generated-instance-creation'! input: aSetOfObject ^ self new input: aSetOfObject ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110509813! input: aSetOfObject input := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfObject result := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsListToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsListToSetFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsListToSetFunction methodsFor: 'platypus-generated-instance-creation'! input: aListOfObject ^ self new input: aListOfObject ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110512158! input: aListOfObject input := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing'! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAggregateToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAggregateToSetFunction commentStamp: 'platypus comment' prior: 0! FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-instance-creation'! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110514545! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing'! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCapitalizeFunction instanceVariableNames: 'input capitalizeFirstChar ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsCapitalizeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-instance-creation'! input: aString capitalizeFirstChar: aLogical ^ self new input: aString capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1). self capitalizeFirstChar: (values at: 2) ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110517827! input: aString capitalizeFirstChar: aLogical self input: aString. self capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing'! input: aString input := aString ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing'! capitalizeFirstChar: aLogical capitalizeFirstChar := aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing'! capitalizeFirstChar ^ capitalizeFirstChar ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [ instr atEnd ] whileFalse: [ (curr := instr next) == $_ ifTrue: [ curr := instr next. instr atEnd ifFalse: [ outstr nextPut: curr asUppercase ] ] ifFalse: [ outstr nextPut: curr ] ]. resString := outstr contents. self capitalizeFirstChar ifTrue: [ resString at: 1 put: resString first asUppercase ] ifFalse: [ resString at: 1 put: resString first asLowercase ]. ^ self return: resString ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLowerizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsLowerizeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; ! !PTsLowerizeFunction methodsFor: 'platypus-generated-instance-creation'! input: aString ^ self new input: aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110520637! input: aString input := aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asLowercase ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsUpperizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsUpperizeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; ! !PTsUpperizeFunction methodsFor: 'platypus-generated-instance-creation'! input: aString ^ self new input: aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self input: (values at: 1) ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110522412! input: aString input := aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing'! input ^ input ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asUppercase ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintLnProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsPrintLnProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-instance-creation'! arg: anObject ^ self new arg: anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110524164! arg: anObject arg := anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString , '\' withCRs ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsPrintProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; ! !PTsPrintProcedure methodsFor: 'platypus-generated-instance-creation'! arg: anObject ^ self new arg: anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110525878! arg: anObject arg := anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsToStringFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsToStringFunction methodsFor: 'platypus-generated-instance-creation'! arg: anObject ^ self new arg: anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110527615! arg: anObject arg := anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsToStringFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHaltProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsHaltProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; ! !PTsHaltProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self halt ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsClrscrProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsClrscrProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; ! !PTsClrscrProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript clear ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsNumberedNameFunction instanceVariableNames: 'nb prefix suffix nbstr posFirst ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsNumberedNameFunction commentStamp: 'platypus comment' prior: 0! FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-instance-creation'! nb: anInteger prefix: aString suffix: aString1 ^ self new nb: anInteger prefix: aString suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self nb: (values at: 1). self prefix: (values at: 2). self suffix: (values at: 3) ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110531897! nb: anInteger prefix: aString suffix: aString1 self nb: anInteger. self prefix: aString. self suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! nb: anInteger nb := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! prefix: aString prefix := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! suffix: aString1 suffix := aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! nbstr: aString nbstr := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! posFirst: anInteger posFirst := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! nb ^ nb ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! prefix ^ prefix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! suffix ^ suffix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! nbstr ^ nbstr ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing'! posFirst ^ posFirst ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self nbstr: (PltFORMATFunction invokeFromValues: (OrderedCollection new add: self nb; add: '07I'; yourself)). self posFirst: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement untilControlBlock: [ :no101 | (self nbstr pltAt: no101) ~= '0' ] repeat: [ :no101 | self posFirst: no101 ] from: 2 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)). ^ self return: ((self prefix pltPlus: (self nbstr pltCopyFrom: self posFirst to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)))) pltPlus: self suffix) ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllModelInstancesFunction instanceVariableNames: 'founds ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAllModelInstancesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing'! founds: aSetOfObject founds := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing'! founds ^ founds ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self founds: Array new. " ---------- statements ----------" "---------- native statement ---------- " self founds addAll: self myContext allApplicationInstances. ^ self return: self founds ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInstanceBecomeProcedure instanceVariableNames: 'old new ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInstanceBecomeProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-instance-creation'! old: anObject new: anObject1 ^ self new old: anObject new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self old: (values at: 1). self new: (values at: 2) ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537194! old: anObject new: anObject1 self old: anObject. self new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing'! old: anObject old := anObject ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing'! new: anObject1 new := anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing'! old ^ old ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing'! new ^ new ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self old becomeInstance: self new ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExploreProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsExploreProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; ! !PTsExploreProcedure methodsFor: 'platypus-generated-instance-creation'! arg: anObject ^ self new arg: anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110539302! arg: anObject arg := anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg explore ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInspectProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsInspectProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; ! !PTsInspectProcedure methodsFor: 'platypus-generated-instance-creation'! arg: anObject ^ self new arg: anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self arg: (values at: 1) ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110540952! arg: anObject arg := anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing'! arg ^ arg ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg inspect ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTestExprProcedure instanceVariableNames: 'expr shouldBe ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsTestExprProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; ! !PTsTestExprProcedure methodsFor: 'platypus-generated-instance-creation'! expr: anObject shouldBe: anObject1 ^ self new expr: anObject shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self expr: (values at: 1). self shouldBe: (values at: 2) ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110542805! expr: anObject shouldBe: anObject1 self expr: anObject. self shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing'! expr: anObject expr := anObject ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing'! shouldBe: anObject1 shouldBe := anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing'! expr ^ expr ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing'! shouldBe ^ shouldBe ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: ('[' , self expr printString , ']' , ' [' , self shouldBe printString , ']\') withCRs ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRunAll0ArgProcsOfProcedure instanceVariableNames: 'schemaName haltIt ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsRunAll0ArgProcsOfProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-instance-creation'! schemaName: aString haltIt: aBoolean ^ self new schemaName: aString haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self schemaName: (values at: 1). self haltIt: (values at: 2) ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546008! schemaName: aString haltIt: aBoolean self schemaName: aString. self haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing'! schemaName: aString schemaName := aString ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing'! haltIt: aBoolean haltIt := aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing'! schemaName ^ schemaName ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing'! haltIt ^ haltIt ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self error: 'not implemented' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsReadStepFileProcedure instanceVariableNames: 'filePath ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsReadStepFileProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-instance-creation'! filePath: aString ^ self new filePath: aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self filePath: (values at: 1) ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110548876! filePath: aString filePath := aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing'! filePath ^ filePath ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: 'reading ' , self filePath , '...'. self myContext stepFileIn: self filePath. Transcript show: 'done' , String cr ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsWriteFileProcedure instanceVariableNames: 'filename contents ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsWriteFileProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-instance-creation'! filename: aString contents: aString1 ^ self new filename: aString contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self filename: (values at: 1). self contents: (values at: 2) ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110551275! filename: aString contents: aString1 self filename: aString. self contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing'! filename: aString filename := aString ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing'! contents: aString1 contents := aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing'! filename ^ filename ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | fileStream fref | fref := self filename asFileReference. fref ensureFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAskForExpressDictionaryMetaDataFunction instanceVariableNames: 'metaDataFilePath doit chosenName ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #PTs ! ! !PTsAskForExpressDictionaryMetaDataFunction commentStamp: 'platypus comment' prior: 0! FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-instance-creation'! metaDataFilePath: aString ^ self new metaDataFilePath: aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self metaDataFilePath: (values at: 1) ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110554919! metaDataFilePath: aString metaDataFilePath := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! doit: aBoolean doit := aBoolean ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! chosenName: aString chosenName := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! metaDataFilePath ^ metaDataFilePath ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! doit ^ doit ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing'! chosenName ^ chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self doit: false. " ---------- statements ----------" "---------- native statement ---------- " PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [ :hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ' , expDict name , '?') ifTrue: [ self chosenName: expDict name. Transcript show: 'writing meta data file "' , self metaDataFilePath , '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs ] ]. ^ self return: self chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PTsPlatypustoolboxSchemaInstance initialize.! ----End fileIn----! PlatypusCoreSchemaInstance subclass: #ChdExpress2cheddarSchemaInstance instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarSchemaInstance'! !ChdExpress2cheddarSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExpress2cheddarSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExpress2cheddarSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExpress2cheddarSchemaInstance commentStamp: 'platypus comment' prior: 0! SCHEMA express2cheddar_facade; USE FROM Package; USE FROM record_and_class; USE FROM discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM cheddar_domains; USE FROM cheddar_dtd; CONSTANT source_licence : STRING := '' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n' + '-- This source file was automatically generated by Platypus\n' + '-- see http://dossen.univ-brest.fr/apl\n' + '-- \n' + '-- Any modification of this file will be lost. \n' + '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n' + '-- model and its meta-model. \n' + '------------------------------------------------------------------------------\n \n' + '------------------------------------------------------------------------------\n' + '-- Cheddar is a free real time scheduling tool.\n' + '-- This program provides services to automatically check temporal constraints\n' + '-- of real time tasks.\n' + '--\n' + '-- Copyright (C) 2002-2009 Frank Singhoff\n' + '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n' + '--\n' + '-- This program is free software; you can redistribute it and/or modify\n' + '-- it under the terms of the GNU General Public License as published by\n' + '-- the Free Software Foundation; either version 2 of the License, or\n' + '-- (at your option) any later version.\n' + '--\n' + '-- This program is distributed in the hope that it will be useful,\n' + '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + '-- GNU General Public License for more details.\n' + '--\n' + '-- You should have received a copy of the GNU General Public License\n' + '-- along with this program; if not, write to the Free Software\n' + '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n' + '--\n' + '--\n' + '-- Contact : cheddar@listes.univ-brest.fr\n' + '-- To post to this mailing list, you must be subscribed\n' + '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n' + '--\n' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n'; xml_id_name : STRING := 'cheddar_private_id'; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ada_package; LOCAL insts : SET OF GENERIC := allModelInstances ( ); END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ada_package := all_ada_packages ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes ( ); END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF NOT has_attribute_named ( curr, xml_id_name ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ada_entity := all_ada_entities ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds ( ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE; END_SCHEMA; SCHEMA cheddar_dtd; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM package; USE FROM discriminated_type; ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || record_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || ada_class_dtd_element ( ); SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || discriminated_type_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages ( ); root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || ada_class_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || record_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || discriminated_type_dtd_element ( ) ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := basic_ada_domain ( a.domain ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ( ) ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF EXISTS ( curr ) THEN IF NOT ( lowerize ( curr.domain.name ) IN names ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF NOT ( curr.domain IN decl_domain ) AND NOT ( curr IN not_declared ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages ( ) | tag IN p.xml_root_tags ) ); END_FUNCTION; END_SCHEMA; SCHEMA ada_interface; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF int.with_it THEN s := s + 'with ' + name + ';\n'; END_IF; IF int.use_it THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF NOT EXISTS ( from_pkg ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF EXISTS ( curr.suffix ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; END_SCHEMA; SCHEMA xml_io; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM discriminated_type; USE FROM ada_interface; USE FROM package; FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF ada_class := all_ada_records ( ); alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF record := all_ada_records ( ); allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; END_SCHEMA; SCHEMA cheddar_domains; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( 'standards_io', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := basic_ada_domain ( SELF.ref ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := SELF; accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF is_of_generated_concept_kind ( t ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF EXISTS ( a.max_idx ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ads THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF EXISTS ( rt.lower_constant ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF EXISTS ( rt.upper_constant ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF domain.refed_by_pointer THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA cheddar_constants; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM express_dictionary_queries; USE FROM express_toolsbox_functions; ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_domains; USE FROM discriminated_type; USE FROM ada_interface; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF with_private THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF is_named_object ( cip ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF is_named_object ( cip ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT EXISTS ( init ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF domain.handled.refed_by_pointer THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF EXISTS ( attr.redeclaring ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF has_attribute_named ( r, xml_id_name ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF domain.handled.refed_by_pointer THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF domain.handled.refed_by_pointer THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF is_generic_object ( domain.handled ) THEN code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF EXISTS ( init ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF is_generic_object ( domain.handled ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; END_SCHEMA; SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM cheddar_constants; USE FROM xml_io; ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code ( ); ELSE code := code + xml_architecture_io_adb_package_code ( ); END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF is_of_generated_concept_kind ( c ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF NOT concept_in_list ( wl [ noi], r ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ads THEN contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF is_of_generated_concept_kind ( c ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; END_SCHEMA; SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) [ 1 ]; union_attr : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION; END_SCHEMA; ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: 'Chd'. namesBuilder systemCategoryPrefix: 'Chd'. namesBuilder rootClassName: 'ChdCoreEntity'. namesBuilder rootClassSystemCategory: 'Chd-CoreEntity'. ^ namesBuilder ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition1 ^ #(#express2cheddar_facade #ChdExpress2cheddarFacadeSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition2 ^ #(#cheddar_dtd #ChdCheddarDtdSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition3 ^ #(#ada_interface #ChdAdaInterfaceSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition4 ^ #(#xml_io #ChdXmlIoSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition5 ^ #(#cheddar_domains #ChdCheddarDomainsSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition6 ^ #(#cheddar_constants #ChdCheddarConstantsSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition7 ^ #(#record_and_class #ChdRecordAndClassSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition8 ^ #(#package #ChdPackageSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition9 ^ #(#discriminated_type #ChdDiscriminatedTypeSchemaDefinition) ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinitionCount ^ 9 ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context ^ context ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context: aContext context := aContext. super context: aContext ! ! PlatypusCoreRepository subclass: #ChdExpress2cheddarRepository instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarSchemaInstance'! !ChdExpress2cheddarRepository class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExpress2cheddarRepository class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExpress2cheddarRepository class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-accessing'! repositoryClassName ^ #ChdExpress2cheddarRepository ! ! !ChdExpress2cheddarRepository class methodsFor: 'platypus-generated-accessing'! generatedMetaDataSchemaInstanceName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdExpress2cheddarSchemaInstance methodsFor: 'platypus-generated-accessing'! externalSchemaInstanceClassNames ^ #(#PltPlatypusMetaSchemasSchemaInstance #PTsPlatypustoolboxSchemaInstance) ! ! PlatypusCoreAbstractVisitor subclass: #ChdAbstractVisitor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarSchemaInstance'! !ChdAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExpress2cheddarSchemaInstance class methodsFor: 'platypus-generated-initializing'! initialize self reinitializeSingleton. self singleton buildIndexes ! ! PlatypusCoreSchema subclass: #ChdExpress2cheddarFacadeSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdExpress2cheddarFacadeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExpress2cheddarFacadeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExpress2cheddarFacadeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExpress2cheddarFacadeSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA express2cheddar_facade; USE FROM Package; USE FROM record_and_class; USE FROM discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM cheddar_domains; USE FROM cheddar_dtd; CONSTANT source_licence : STRING := '' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n' + '-- This source file was automatically generated by Platypus\n' + '-- see http://dossen.univ-brest.fr/apl\n' + '-- \n' + '-- Any modification of this file will be lost. \n' + '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n' + '-- model and its meta-model. \n' + '------------------------------------------------------------------------------\n \n' + '------------------------------------------------------------------------------\n' + '-- Cheddar is a free real time scheduling tool.\n' + '-- This program provides services to automatically check temporal constraints\n' + '-- of real time tasks.\n' + '--\n' + '-- Copyright (C) 2002-2009 Frank Singhoff\n' + '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n' + '--\n' + '-- This program is free software; you can redistribute it and/or modify\n' + '-- it under the terms of the GNU General Public License as published by\n' + '-- the Free Software Foundation; either version 2 of the License, or\n' + '-- (at your option) any later version.\n' + '--\n' + '-- This program is distributed in the hope that it will be useful,\n' + '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + '-- GNU General Public License for more details.\n' + '--\n' + '-- You should have received a copy of the GNU General Public License\n' + '-- along with this program; if not, write to the Free Software\n' + '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n' + '--\n' + '--\n' + '-- Contact : cheddar@listes.univ-brest.fr\n' + '-- To post to this mailing list, you must be subscribed\n' + '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n' + '--\n' + '------------------------------------------------------------------------------\n' + '------------------------------------------------------------------------------\n'; xml_id_name : STRING := 'cheddar_private_id'; END_CONSTANT; FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; FUNCTION all_ada_packages : SET OF ada_package; LOCAL insts : SET OF GENERIC := allModelInstances ( ); END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ada_package := all_ada_packages ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes ( ); END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF NOT has_attribute_named ( curr, xml_id_name ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ada_entity := all_ada_entities ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds ( ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE; END_SCHEMA; ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 0 ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#is_of_generated_concept_kind #ChdIsOfGeneratedConceptKindFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#all_ada_packages #ChdAllAdaPackagesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#ada_package_named #ChdAdaPackageNamedFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#package_ada_classes #ChdPackageAdaClassesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#all_ada_classes #ChdAllAdaClassesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#all_ada_records #ChdAllAdaRecordsFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#ads_and_adb_code #ChdAdsAndAdbCodeFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#all_ada_discriminated_types #ChdAllAdaDiscriminatedTypesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#package_records #ChdPackageRecordsFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#package_discriminated_types #ChdPackageDiscriminatedTypesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#ada_entity_named #ChdAdaEntityNamedFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#all_ada_entities #ChdAllAdaEntitiesFunction) ! ! !ChdExpress2cheddarFacadeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 12 ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdIsOfGeneratedConceptKindFunction instanceVariableNames: 'c ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdIsOfGeneratedConceptKindFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdIsOfGeneratedConceptKindFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdIsOfGeneratedConceptKindFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdIsOfGeneratedConceptKindFunction commentStamp: 'platypus comment' prior: 0! FUNCTION is_of_generated_concept_kind ( c : dictionary_instance ) : BOOLEAN; RETURN ( ( 'CHEDDAR_DOMAINS.ADA_TYPE' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( c ) ) OR ( 'PACKAGE.PACKAGE_ALIAS' IN TYPEOF ( c ) ) OR ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( c ) ) ); END_FUNCTION; ! !ChdIsOfGeneratedConceptKindFunction methodsFor: 'platypus-generated-instance-creation'! c: aChdDictionaryInstance ^ self new c: aChdDictionaryInstance ! ! !ChdIsOfGeneratedConceptKindFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self c: (values at: 1) ! ! !ChdIsOfGeneratedConceptKindFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110701706! c: aChdDictionaryInstance c := aChdDictionaryInstance ! ! !ChdIsOfGeneratedConceptKindFunction methodsFor: 'platypus-generated-accessing'! c ^ c ! ! !ChdIsOfGeneratedConceptKindFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (((((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self c; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self c; yourself)) includes: 'RECORD_AND_CLASS.ADA_ENTITY' ]) or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self c; yourself)) includes: 'PACKAGE.PACKAGE_ALIAS' ]) or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self c; yourself)) includes: 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' ]) ! ! !ChdIsOfGeneratedConceptKindFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllAdaPackagesFunction instanceVariableNames: 'insts ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAllAdaPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllAdaPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllAdaPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllAdaPackagesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_ada_packages : SET OF ada_package; LOCAL insts : SET OF GENERIC := allModelInstances ( ); END_LOCAL; RETURN ( QUERY ( i <* insts | 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( i ) ) ); END_FUNCTION; ! !ChdAllAdaPackagesFunction methodsFor: 'platypus-generated-accessing'! insts: aSetOfObject insts := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !ChdAllAdaPackagesFunction methodsFor: 'platypus-generated-accessing'! insts ^ insts ! ! !ChdAllAdaPackagesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self insts: PTsAllModelInstancesFunction invoke. " ---------- statements ----------" ^ self return: (self insts select: [ :i2367 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: i2367; yourself)) includes: 'PACKAGE.ADA_PACKAGE' ]) ! ! !ChdAllAdaPackagesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageNamedFunction instanceVariableNames: 'name packages key ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAdaPackageNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageNamedFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_named ( name : STRING ) : ada_package; LOCAL packages : SET OF ada_package := all_ada_packages ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); ALIAS curr FOR packages [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-instance-creation'! name: aString ^ self new name: aString ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self name: (values at: 1) ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110706236! name: aString name := aString ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! packages: aSetOfChdAdaPackage packages := aSetOfChdAdaPackage ifNil: [ Set new ] ifNotNil: [ aSetOfChdAdaPackage as: Set ] ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! packages ^ packages ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !ChdAdaPackageNamedFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self packages: ChdAllAdaPackagesFunction invoke. self key: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3096 | PlatypusCoreAliasStatement alias: (self packages pltAt: no3096) statementsBlock: [ :curr489 | (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (curr489 nameUsingContext: self class context); yourself)) = self key ifTrue: [ ^ self return: curr489 ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self packages; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self packages; yourself)). ^ self return: nil ! ! !ChdAdaPackageNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdPackageAdaClassesFunction instanceVariableNames: 'pkg clsList ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdPackageAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageAdaClassesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION package_ada_classes ( pkg : ada_package ) : LIST OF ada_class; LOCAL cls_list : LIST OF ada_class := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( cls_list ); END_FUNCTION; ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110709532! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-accessing'! clsList: aListOfChdAdaClass clsList := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-accessing'! clsList ^ clsList ! ! !ChdPackageAdaClassesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self clsList: Array new. " ---------- statements ----------" PlatypusCoreAliasStatement alias: (self pkg entitiesUsingContext: self class context) statementsBlock: [ :entities3058 | PlatypusCoreRepeatStatement repeat: [ :noi4030 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities3058 pltAt: noi4030); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self clsList: (self clsList pltPlus: (entities3058 pltAt: noi4030)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities3058; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities3058; yourself)) ]. ^ self return: self clsList ! ! !ChdPackageAdaClassesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllAdaClassesFunction instanceVariableNames: 'clsList allPkgs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAllAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllAdaClassesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllAdaClassesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_ada_classes : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); cls_list := cls_list + package_ada_classes ( all_pkgs [ no] ); END_REPEAT; RETURN ( cls_list ); END_FUNCTION; ! !ChdAllAdaClassesFunction methodsFor: 'platypus-generated-accessing'! clsList: aListOfChdAdaClass clsList := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdAllAdaClassesFunction methodsFor: 'platypus-generated-accessing'! allPkgs: aListOfChdAdaPackage allPkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdAllAdaClassesFunction methodsFor: 'platypus-generated-accessing'! clsList ^ clsList ! ! !ChdAllAdaClassesFunction methodsFor: 'platypus-generated-accessing'! allPkgs ^ allPkgs ! ! !ChdAllAdaClassesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self clsList: Array new. self allPkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3455 | self clsList: (self clsList pltPlus: (ChdPackageAdaClassesFunction invokeFromValues: (OrderedCollection new add: (self allPkgs pltAt: no3455); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)). ^ self return: self clsList ! ! !ChdAllAdaClassesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdPrepareRootAdaClassesProcedure instanceVariableNames: 'clslist ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdPrepareRootAdaClassesProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPrepareRootAdaClassesProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPrepareRootAdaClassesProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPrepareRootAdaClassesProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE prepare_root_ada_classes; LOCAL clslist : LIST OF ada_class := all_ada_classes ( ); END_LOCAL; REPEAT no := LOINDEX ( clslist ) TO HIINDEX ( clslist ); ALIAS curr FOR clslist [ no]; IF SIZEOF ( curr.supertypes ) = 0 THEN IF NOT has_attribute_named ( curr, xml_id_name ) THEN add_xml_id_to_ada_class ( curr ); END_IF; END_IF; END_ALIAS; END_REPEAT; END_PROCEDURE; ! !ChdPrepareRootAdaClassesProcedure methodsFor: 'platypus-generated-accessing'! clslist: aListOfChdAdaClass clslist := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdPrepareRootAdaClassesProcedure methodsFor: 'platypus-generated-accessing'! clslist ^ clslist ! ! !ChdPrepareRootAdaClassesProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self clslist: ChdAllAdaClassesFunction invoke. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2013 | PlatypusCoreAliasStatement alias: (self clslist pltAt: no2013) statementsBlock: [ :curr3545 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (curr3545 supertypesUsingContext: self class context); yourself)) = 0 ifTrue: [ (PTsHasAttributeNamedFunction invokeFromValues: (OrderedCollection new add: curr3545; add: 'cheddar_private_id'; yourself)) not ifTrue: [ ChdAddXmlIdToAdaClassProcedure invokeFromValues: (OrderedCollection new add: curr3545; yourself) ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self clslist; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self clslist; yourself)) ! ! !ChdPrepareRootAdaClassesProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllAdaRecordsFunction instanceVariableNames: 'clsList allPkgs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAllAdaRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllAdaRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllAdaRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllAdaRecordsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_ada_records : LIST OF ada_entity; LOCAL cls_list : LIST OF ada_class := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN cls_list := cls_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( cls_list ); END_FUNCTION; ! !ChdAllAdaRecordsFunction methodsFor: 'platypus-generated-accessing'! clsList: aListOfChdAdaClass clsList := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdAllAdaRecordsFunction methodsFor: 'platypus-generated-accessing'! allPkgs: aListOfChdAdaPackage allPkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdAllAdaRecordsFunction methodsFor: 'platypus-generated-accessing'! clsList ^ clsList ! ! !ChdAllAdaRecordsFunction methodsFor: 'platypus-generated-accessing'! allPkgs ^ allPkgs ! ! !ChdAllAdaRecordsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self clsList: Array new. self allPkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2829 | PlatypusCoreAliasStatement alias: ((self allPkgs pltAt: no2829) entitiesUsingContext: self class context) statementsBlock: [ :entities1193 | PlatypusCoreRepeatStatement repeat: [ :noi2292 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities1193 pltAt: noi2292); yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ self clsList: (self clsList pltPlus: (entities1193 pltAt: noi2292)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities1193; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities1193; yourself)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)). ^ self return: self clsList ! ! !ChdAllAdaRecordsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdsAndAdbCodeFunction instanceVariableNames: 'r ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAdsAndAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdsAndAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdsAndAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdsAndAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ads_and_adb_code : LIST [ 2 : 2 ] OF STRING; LOCAL r : LIST [ 2 : 2 ] OF STRING := [ ]; END_LOCAL; (*# MultiByteFileStream defaultToLF #*) r := r + all_packages_code ( true ); r := r + all_packages_code ( false ); RETURN ( r ); END_FUNCTION; ! !ChdAdsAndAdbCodeFunction methodsFor: 'platypus-generated-accessing'! r: aListOfString r := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdAdsAndAdbCodeFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdAdsAndAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self r: Array new. " ---------- statements ----------" "---------- native statement ---------- " MultiByteFileStream defaultToLF. self r: (self r pltPlus: (ChdAllPackagesCodeFunction invokeFromValues: (OrderedCollection new add: true; yourself))). self r: (self r pltPlus: (ChdAllPackagesCodeFunction invokeFromValues: (OrderedCollection new add: false; yourself))). ^ self return: self r ! ! !ChdAdsAndAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdMainProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdMainProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdMainProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdMainProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdMainProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE main; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; all_packages_code ( true ); all_packages_code ( false ); dtds; END_PROCEDURE; ! !ChdMainProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " MultiByteFileStream defaultToLF. ChdPrepareRootAdaClassesProcedure invoke. ChdAllPackagesCodeFunction invokeFromValues: (OrderedCollection new add: true; yourself). ChdAllPackagesCodeFunction invokeFromValues: (OrderedCollection new add: false; yourself). ChdDtdsProcedure invoke ! ! !ChdMainProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllAdaDiscriminatedTypesFunction instanceVariableNames: 'dtList allPkgs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAllAdaDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllAdaDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllAdaDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllAdaDiscriminatedTypesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_ada_discriminated_types : LIST OF ada_entity; LOCAL dt_list : LIST OF discriminated_type := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( dt_list ); END_FUNCTION; ! !ChdAllAdaDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! dtList: aListOfChdDiscriminatedType dtList := aListOfChdDiscriminatedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDiscriminatedType as: OrderedCollection ] ! ! !ChdAllAdaDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! allPkgs: aListOfChdAdaPackage allPkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdAllAdaDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! dtList ^ dtList ! ! !ChdAllAdaDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! allPkgs ^ allPkgs ! ! !ChdAllAdaDiscriminatedTypesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self dtList: Array new. self allPkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no280 | PlatypusCoreAliasStatement alias: ((self allPkgs pltAt: no280) entitiesUsingContext: self class context) statementsBlock: [ :entities2740 | PlatypusCoreRepeatStatement repeat: [ :noi3842 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities2740 pltAt: noi3842); yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE') ifTrue: [ self dtList: (self dtList pltPlus: (entities2740 pltAt: noi3842)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities2740; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities2740; yourself)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)). ^ self return: self dtList ! ! !ChdAllAdaDiscriminatedTypesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAddXmlIdToAdaClassProcedure instanceVariableNames: 'cls idtype idattr ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAddXmlIdToAdaClassProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAddXmlIdToAdaClassProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAddXmlIdToAdaClassProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAddXmlIdToAdaClassProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE add_xml_id_to_ada_class ( VAR cls : ada_class ); LOCAL idtype : cheddar_xml_id_type := entity_instance ( ? ) || sdai_instance ( ) || dictionary_instance ( ) || simple_type ( ) || string_type ( ?, false ) || cheddar_xml_id_type ( ); idattr : explicit_attribute := entity_instance ( cls ) || sdai_instance ( ) || dictionary_instance ( ) || attribute ( xml_id_name, cls, idtype, ? ) || explicit_attribute ( false ); END_LOCAL; idtype.owner := idattr; INSERT ( cls.attributes, idattr, 0 ); END_PROCEDURE; ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-instance-creation'! cls: aChdAdaClass ^ self new cls: aChdAdaClass ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self cls: (values at: 1) ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110729292! cls: aChdAdaClass cls := aChdAdaClass ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! idtype: aChdCheddarXmlIdType idtype := aChdCheddarXmlIdType ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! idattr: aChdExplicitAttribute idattr := aChdExplicitAttribute ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! cls ^ cls ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! idtype ^ idtype ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-accessing'! idattr ^ idattr ! ! !ChdAddXmlIdToAdaClassProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self idtype: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PltEntityInstance new entityInstanceFromValues: (OrderedCollection new add: nil; yourself); yourself); add: PltSdaiInstance new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject; add: PltSimpleType new; yourself)) pltAsObject; add: (PltStringType new stringTypeFromValues: (OrderedCollection new add: nil; add: false; yourself); yourself); yourself)) pltAsObject; add: ChdCheddarXmlIdType new; yourself)) pltAsObject. self idattr: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PltEntityInstance new entityInstanceFromValues: (OrderedCollection new add: self cls; yourself); yourself); add: PltSdaiInstance new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject; add: (PltAttribute new attributeFromValues: (OrderedCollection new add: 'cheddar_private_id'; add: self cls; add: self idtype; add: nil; yourself); yourself); yourself)) pltAsObject; add: (PltExplicitAttribute new explicitAttributeFromValues: (OrderedCollection new add: false; yourself); yourself); yourself)) pltAsObject. " ---------- statements ----------" self idtype owner: self idattr. PltINSERTProcedure invokeFromValues: (OrderedCollection new add: (self cls attributesUsingContext: self class context); add: self idattr; add: 0; yourself) ! ! !ChdAddXmlIdToAdaClassProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdPackageRecordsFunction instanceVariableNames: 'pkg recList ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdPackageRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageRecordsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageRecordsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION package_records ( pkg : ada_package ) : LIST OF record; LOCAL rec_list : LIST OF record := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN rec_list := rec_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( rec_list ); END_FUNCTION; ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110735169! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-accessing'! recList: aListOfChdRecord recList := aListOfChdRecord ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdRecord as: OrderedCollection ] ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-accessing'! recList ^ recList ! ! !ChdPackageRecordsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self recList: Array new. " ---------- statements ----------" PlatypusCoreAliasStatement alias: (self pkg entitiesUsingContext: self class context) statementsBlock: [ :entities1090 | PlatypusCoreRepeatStatement repeat: [ :noi2059 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities1090 pltAt: noi2059); yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ self recList: (self recList pltPlus: (entities1090 pltAt: noi2059)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities1090; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities1090; yourself)) ]. ^ self return: self recList ! ! !ChdPackageRecordsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdPackageDiscriminatedTypesFunction instanceVariableNames: 'pkg dtList ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdPackageDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageDiscriminatedTypesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageDiscriminatedTypesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION package_discriminated_types ( pkg : ada_package ) : LIST OF discriminated_type; LOCAL dt_list : LIST OF discriminated_type := [ ]; END_LOCAL; ALIAS entities FOR pkg.entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN dt_list := dt_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; RETURN ( dt_list ); END_FUNCTION; ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110738339! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! dtList: aListOfChdDiscriminatedType dtList := aListOfChdDiscriminatedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDiscriminatedType as: OrderedCollection ] ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-accessing'! dtList ^ dtList ! ! !ChdPackageDiscriminatedTypesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self dtList: Array new. " ---------- statements ----------" PlatypusCoreAliasStatement alias: (self pkg entitiesUsingContext: self class context) statementsBlock: [ :entities704 | PlatypusCoreRepeatStatement repeat: [ :noi1673 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities704 pltAt: noi1673); yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE') ifTrue: [ self dtList: (self dtList pltPlus: (entities704 pltAt: noi1673)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities704; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities704; yourself)) ]. ^ self return: self dtList ! ! !ChdPackageDiscriminatedTypesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityNamedFunction instanceVariableNames: 'name entities key ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAdaEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityNamedFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_named ( name : STRING ) : ada_entity; LOCAL entities : LIST OF ada_entity := all_ada_entities ( ); key : STRING := Lowerize ( name ); END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS curr FOR entities [ no]; IF ( Lowerize ( curr.name ) = key ) THEN RETURN ( curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-instance-creation'! name: aString ^ self new name: aString ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self name: (values at: 1) ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110741510! name: aString name := aString ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! entities: aListOfChdAdaEntity entities := aListOfChdAdaEntity ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaEntity as: OrderedCollection ] ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! entities ^ entities ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !ChdAdaEntityNamedFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self entities: ChdAllAdaEntitiesFunction invoke. self key: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2295 | PlatypusCoreAliasStatement alias: (self entities pltAt: no2295) statementsBlock: [ :curr3784 | (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (curr3784 nameUsingContext: self class context); yourself)) = self key ifTrue: [ ^ self return: curr3784 ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). ^ self return: nil ! ! !ChdAdaEntityNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllAdaEntitiesFunction instanceVariableNames: 'entList allPkgs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdAllAdaEntitiesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllAdaEntitiesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllAdaEntitiesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllAdaEntitiesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_ada_entities : LIST OF ada_entity; LOCAL ent_list : LIST OF ada_entity := [ ]; all_pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( all_pkgs ) TO HIINDEX ( all_pkgs ); ALIAS entities FOR all_pkgs [ no].entities; REPEAT noi := LOINDEX ( entities ) TO HIINDEX ( entities ); IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( entities [ noi] ) ) THEN ent_list := ent_list + entities [ noi]; END_IF; END_REPEAT; END_ALIAS; END_REPEAT; RETURN ( ent_list ); END_FUNCTION; ! !ChdAllAdaEntitiesFunction methodsFor: 'platypus-generated-accessing'! entList: aListOfChdAdaEntity entList := aListOfChdAdaEntity ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaEntity as: OrderedCollection ] ! ! !ChdAllAdaEntitiesFunction methodsFor: 'platypus-generated-accessing'! allPkgs: aListOfChdAdaPackage allPkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdAllAdaEntitiesFunction methodsFor: 'platypus-generated-accessing'! entList ^ entList ! ! !ChdAllAdaEntitiesFunction methodsFor: 'platypus-generated-accessing'! allPkgs ^ allPkgs ! ! !ChdAllAdaEntitiesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self entList: Array new. self allPkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3214 | PlatypusCoreAliasStatement alias: ((self allPkgs pltAt: no3214) entitiesUsingContext: self class context) statementsBlock: [ :entities1578 | PlatypusCoreRepeatStatement repeat: [ :noi2677 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities1578 pltAt: noi2677); yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ self entList: (self entList pltPlus: (entities1578 pltAt: noi2677)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities1578 pltAt: noi2677); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self entList: (self entList pltPlus: (entities1578 pltAt: noi2677)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (entities1578 pltAt: noi2677); yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE') ifTrue: [ self entList: (self entList pltPlus: (entities1578 pltAt: noi2677)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: entities1578; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: entities1578; yourself)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allPkgs; yourself)). ^ self return: self entList ! ! !ChdAllAdaEntitiesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDtdsProcedure instanceVariableNames: 'roots ' classVariableNames: '' poolDictionaries: '' category: 'Chd-Express2cheddarFacadeSchema'! !ChdDtdsProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDtdsProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDtdsProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDtdsProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE dtds; LOCAL roots : LIST OF root_dtd_element := root_dtds ( ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) prepare_root_ada_classes; REPEAT no := LOINDEX ( roots ) TO HIINDEX ( roots ); ALIAS curr FOR roots [ no]; WriteFile ( curr.tag + '.dtd', curr.dtd_code ); END_ALIAS; END_REPEAT; END_PROCEDURE; ! !ChdDtdsProcedure methodsFor: 'platypus-generated-accessing'! roots: aListOfChdRootDtdElement roots := aListOfChdRootDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdRootDtdElement as: OrderedCollection ] ! ! !ChdDtdsProcedure methodsFor: 'platypus-generated-accessing'! roots ^ roots ! ! !ChdDtdsProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self roots: ChdRootDtdsFunction invoke. " ---------- statements ----------" "---------- native statement ---------- " MultiByteFileStream defaultToLF. ChdPrepareRootAdaClassesProcedure invoke. PlatypusCoreRepeatStatement repeat: [ :no3532 | PlatypusCoreAliasStatement alias: (self roots pltAt: no3532) statementsBlock: [ :curr968 | PTsWriteFileProcedure invokeFromValues: (OrderedCollection new add: ((curr968 tagUsingContext: self class context) pltPlus: '.dtd'); add: (curr968 dtdCodeUsingContext: self class context); yourself) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self roots; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self roots; yourself)) ! ! !ChdDtdsProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdExpress2cheddarFacadeSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdCheddarDtdSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdCheddarDtdSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarDtdSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarDtdSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarDtdSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA cheddar_dtd; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM package; USE FROM discriminated_type; ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || record_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || ada_class_dtd_element ( ); SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || discriminated_type_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages ( ); root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || ada_class_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || record_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || discriminated_type_dtd_element ( ) ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := basic_ada_domain ( a.domain ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ( ) ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF EXISTS ( curr ) THEN IF NOT ( lowerize ( curr.domain.name ) IN names ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF NOT ( curr.domain IN decl_domain ) AND NOT ( curr IN not_declared ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages ( ) | tag IN p.xml_root_tags ) ); END_FUNCTION; END_SCHEMA; ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#dtd_element #ChdDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#composite_dtd_element #ChdCompositeDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#root_dtd_element #ChdRootDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#package_dtd_element #ChdPackageDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#entity_dtd_element #ChdEntityDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#ada_class_dtd_element #ChdAdaClassDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#record_dtd_element #ChdRecordDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#discriminated_type_dtd_element #ChdDiscriminatedTypeDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#attribute_dtd_element #ChdAttributeDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#domain_dtd_element #ChdDomainDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#simple_domain_dtd_element #ChdSimpleDomainDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#collection_dtd_element #ChdCollectionDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#entity_ref_dtd_element #ChdEntityRefDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#record_ref_dtd_element #ChdRecordRefDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#ada_class_ref_dtd_element #ChdAdaClassRefDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#discriminated_type_ref_dtd_element #ChdDiscriminatedTypeRefDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#unknown_domain_dtd_element #ChdUnknownDomainDtdElement) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 17 ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#compute_root_dtd_code #ChdComputeRootDtdCodeFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#root_dtds #ChdRootDtdsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#compute_root_sub_elements #ChdComputeRootSubElementsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#compute_package_attribute_dtd_elements #ChdComputePackageAttributeDtdElementsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#compute_package_dtd_code #ChdComputePackageDtdCodeFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#compute_package_sub_elements #ChdComputePackageSubElementsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#compute_entity_dtd_code #ChdComputeEntityDtdCodeFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#compute_attribute_dtd_list_from_attribute_list #ChdComputeAttributeDtdListFromAttributeListFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#compute_entity_sub_elements #ChdComputeEntitySubElementsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#compute_discriminated_type_code #ChdComputeDiscriminatedTypeCodeFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#compute_discriminated_type_sub_elements #ChdComputeDiscriminatedTypeSubElementsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#compute_attribute_dtd_element #ChdComputeAttributeDtdElementFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#compute_domain_dtd_element #ChdComputeDomainDtdElementFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#xml_packages #ChdXmlPackagesFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#get_referenced_entity_domains #ChdGetReferencedEntityDomainsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#get_declared_entity_domains #ChdGetDeclaredEntityDomainsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration17 ^ #(#compute_implicit_domains #ChdComputeImplicitDomainsFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration18 ^ #(#xml_packages_with_tag #ChdXmlPackagesWithTagFunction) ! ! !ChdCheddarDtdSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 18 ! ! Object subclass: #ChdCoreEntity instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CoreEntity'! !ChdCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #'Chd-CoreEntity' ! ! !ChdCoreEntity class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !ChdCoreEntity methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self class platypusMetaData ! ! !ChdCoreEntity class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! ChdCoreEntity subclass: #ChdDtdElement instanceVariableNames: 'tag owner' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY dtd_element ABSTRACT SUPERTYPE; owner : OPTIONAL dtd_element; tag : STRING; DERIVE dtd_code : STRING := ''; END_ENTITY; ! !ChdDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. owner := nil. tag := '' ! ! !ChdDtdElement methodsFor: 'platypus-generated-classifying'! isChdDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdDtdElement ^ false ! ! !ChdDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptDtdElement: e "my subclasses have to redefine it" ! ! !ChdDtdElement methodsFor: 'platypus-generated-copying'! dtdElementCopyTo: another another fastSetOwner: self owner. another fastSetTag: self tag ! ! !ChdDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self dtdElementCopyTo: another ! ! !ChdDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self dtdElementCopyTo: another ! ! !ChdDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! dtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setOwner: valuesloc removeFirst. self setTag: valuesloc removeFirst. ^ valuesloc ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! dtdElementToValues: values values add: self owner. values add: self tag. ^ values ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self dtdElementToValues: (super toValues: values) ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self dtdElementFromValues: (super fromValues: values) ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self dtdElementFromValues: values ! ! !ChdDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self dtdElementToValues: values ! ! !ChdDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDtdElement methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !ChdDtdElement methodsFor: 'platypus-generated-set-accessing'! setOwner: aChdDtdElement self owner: aChdDtdElement ! ! !ChdDtdElement methodsFor: 'platypus-generated-accessing'! owner: aChdDtdElement owner := aChdDtdElement ! ! !ChdDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOwner: aChdDtdElement owner := aChdDtdElement ! ! !ChdDtdElement methodsFor: 'platypus-generated-with-context-accessing'! ownerUsingContext: aContext ^ self owner ! ! !ChdDtdElement methodsFor: 'platypus-generated-accessing'! tag ^ tag ! ! !ChdDtdElement methodsFor: 'platypus-generated-set-accessing'! setTag: aString self tag: aString ! ! !ChdDtdElement methodsFor: 'platypus-generated-accessing'! tag: aString tag := aString ! ! !ChdDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetTag: aString tag := aString ! ! !ChdDtdElement methodsFor: 'platypus-generated-with-context-accessing'! tagUsingContext: aContext ^ self tag ! ! !ChdDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! ChdDtdElement subclass: #ChdCompositeDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdCompositeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCompositeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCompositeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCompositeDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY composite_dtd_element ABSTRACT SUPERTYPE SUBTYPE OF ( dtd_element ); DERIVE subs : LIST OF dtd_element := [ ]; END_ENTITY; ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-classifying'! isChdCompositeDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdCompositeDtdElement ^ false ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCompositeDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptCompositeDtdElement: e "my subclasses have to redefine it" ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-copying'! compositeDtdElementCopyTo: another ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self compositeDtdElementCopyTo: another ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self compositeDtdElementCopyTo: another ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! compositeDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! compositeDtdElementToValues: values ^ values ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self compositeDtdElementToValues: (super toValues: values) ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self compositeDtdElementFromValues: (super fromValues: values) ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self compositeDtdElementFromValues: values ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self compositeDtdElementToValues: values ! ! !ChdCompositeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdCompositeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext ^ self subsUsingContext: aContext receiver: self ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCompositeDtdElement methodsFor: 'platypus-generated-deriving'! subs ^ self subsUsingContext: self class context ! ! ChdCompositeDtdElement subclass: #ChdRootDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdRootDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRootDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRootDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRootDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY root_dtd_element SUBTYPE OF ( composite_dtd_element ); DERIVE packages : LIST OF ada_package := xml_packages_with_tag ( SELF.tag ); SELF\composite_dtd_element.subs : LIST OF package_dtd_element := compute_root_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_root_dtd_code ( SELF ); declared_domains : LIST OF dtd_element := get_declared_entity_domains ( subs ); referenced_entities : LIST OF dtd_element := get_referenced_entity_domains ( subs ); implicit_domains : LIST OF entity_ref_dtd_element := compute_implicit_domains ( SELF ); END_ENTITY; ! !ChdRootDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-classifying'! isChdRootDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdRootDtdElement ^ false ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRootDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptRootDtdElement: e "my subclasses have to redefine it" ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-copying'! rootDtdElementCopyTo: another ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self rootDtdElementCopyTo: another ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self rootDtdElementCopyTo: another ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! rootDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! rootDtdElementToValues: values ^ values ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self rootDtdElementToValues: (super toValues: values) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self rootDtdElementFromValues: (super fromValues: values) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self rootDtdElementFromValues: values ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self rootDtdElementToValues: values ! ! !ChdRootDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdRootDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! packagesUsingContext: aContext ^ self packagesUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! packagesUsingContext: aContext receiver: aReceiver ^ ChdXmlPackagesWithTagFunction invokeFromValues: (OrderedCollection new add: (aReceiver tagUsingContext: self class context); yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! packages ^ self packagesUsingContext: self class context ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext ^ self subsUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext receiver: aReceiver ^ ChdComputeRootSubElementsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! subs ^ self subsUsingContext: self class context ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ChdComputeRootDtdCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! declaredDomainsUsingContext: aContext ^ self declaredDomainsUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! declaredDomainsUsingContext: aContext receiver: aReceiver ^ ChdGetDeclaredEntityDomainsFunction invokeFromValues: (OrderedCollection new add: (aReceiver subsUsingContext: aContext); yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! declaredDomains ^ self declaredDomainsUsingContext: self class context ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! referencedEntitiesUsingContext: aContext ^ self referencedEntitiesUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! referencedEntitiesUsingContext: aContext receiver: aReceiver ^ ChdGetReferencedEntityDomainsFunction invokeFromValues: (OrderedCollection new add: (aReceiver subsUsingContext: aContext); yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! referencedEntities ^ self referencedEntitiesUsingContext: self class context ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! implicitDomainsUsingContext: aContext ^ self implicitDomainsUsingContext: aContext receiver: self ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! implicitDomainsUsingContext: aContext receiver: aReceiver ^ ChdComputeImplicitDomainsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRootDtdElement methodsFor: 'platypus-generated-deriving'! implicitDomains ^ self implicitDomainsUsingContext: self class context ! ! ChdCompositeDtdElement subclass: #ChdPackageDtdElement instanceVariableNames: 'package' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdPackageDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY package_dtd_element SUBTYPE OF ( composite_dtd_element ); package : ada_package; DERIVE SELF\dtd_element.tag : STRING := lowerize ( package.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_package_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_package_dtd_code ( SELF ); attributes : LIST OF attribute_dtd_element := compute_package_attribute_dtd_elements ( SELF ); END_ENTITY; ! !ChdPackageDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. package := nil ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-classifying'! isChdPackageDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdPackageDtdElement ^ false ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPackageDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptPackageDtdElement: e "my subclasses have to redefine it" ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-copying'! packageDtdElementCopyTo: another another fastSetPackage: self package ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self packageDtdElementCopyTo: another ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self packageDtdElementCopyTo: another ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! packageDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPackage: valuesloc removeFirst. ^ valuesloc ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! packageDtdElementToValues: values values add: self package. ^ values ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self packageDtdElementToValues: (super toValues: values) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self packageDtdElementFromValues: (super fromValues: values) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self packageDtdElementFromValues: values ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self packageDtdElementToValues: values ! ! !ChdPackageDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdPackageDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-accessing'! package ^ package ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-set-accessing'! setPackage: aChdAdaPackage self package: aChdAdaPackage ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-accessing'! package: aChdAdaPackage package := aChdAdaPackage ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPackage: aChdAdaPackage package := aChdAdaPackage ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-with-context-accessing'! packageUsingContext: aContext ^ self package ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext ^ self tagUsingContext: aContext receiver: self ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext receiver: aReceiver ^ PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver package nameUsingContext: self class context); yourself) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! tag ^ self tagUsingContext: self class context ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext ^ self subsUsingContext: aContext receiver: self ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext receiver: aReceiver ^ ChdComputePackageSubElementsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! subs ^ self subsUsingContext: self class context ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ChdComputePackageDtdCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! attributesUsingContext: aContext ^ self attributesUsingContext: aContext receiver: self ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! attributesUsingContext: aContext receiver: aReceiver ^ ChdComputePackageAttributeDtdElementsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdPackageDtdElement methodsFor: 'platypus-generated-deriving'! attributes ^ self attributesUsingContext: self class context ! ! ChdCompositeDtdElement subclass: #ChdEntityDtdElement instanceVariableNames: 'domain' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdEntityDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdEntityDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdEntityDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdEntityDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY entity_dtd_element SUBTYPE OF ( composite_dtd_element ); domain : ada_entity; DERIVE SELF\dtd_element.tag : STRING := lowerize ( domain.name ); SELF\composite_dtd_element.subs : LIST OF dtd_element := compute_entity_sub_elements ( SELF ); SELF\dtd_element.dtd_code : STRING := compute_entity_dtd_code ( SELF ); END_ENTITY; ! !ChdEntityDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-classifying'! isChdEntityDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdEntityDtdElement ^ false ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptEntityDtdElement: e "my subclasses have to redefine it" ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-copying'! entityDtdElementCopyTo: another another fastSetDomain: self domain ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityDtdElementCopyTo: another ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityDtdElementCopyTo: another ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! entityDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! entityDtdElementToValues: values values add: self domain. ^ values ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityDtdElementToValues: (super toValues: values) ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityDtdElementFromValues: (super fromValues: values) ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityDtdElementFromValues: values ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityDtdElementToValues: values ! ! !ChdEntityDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdEntityDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-set-accessing'! setDomain: aChdAdaEntity self domain: aChdAdaEntity ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-accessing'! domain: aChdAdaEntity domain := aChdAdaEntity ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aChdAdaEntity domain := aChdAdaEntity ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext ^ self tagUsingContext: aContext receiver: self ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext receiver: aReceiver ^ PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver domain nameUsingContext: self class context); yourself) ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! tag ^ self tagUsingContext: self class context ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext ^ self subsUsingContext: aContext receiver: self ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext receiver: aReceiver ^ ChdComputeEntitySubElementsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! subs ^ self subsUsingContext: self class context ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ChdComputeEntityDtdCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdEntityDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! ChdEntityDtdElement subclass: #ChdAdaClassDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdAdaClassDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY ada_class_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-classifying'! isChdAdaClassDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdAdaClassDtdElement ^ false ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaClassDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptAdaClassDtdElement: e "my subclasses have to redefine it" ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-copying'! adaClassDtdElementCopyTo: another ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaClassDtdElementCopyTo: another ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaClassDtdElementCopyTo: another ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! adaClassDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! adaClassDtdElementToValues: values ^ values ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaClassDtdElementToValues: (super toValues: values) ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaClassDtdElementFromValues: (super fromValues: values) ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaClassDtdElementFromValues: values ! ! !ChdAdaClassDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaClassDtdElementToValues: values ! ! !ChdAdaClassDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdAdaClassDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! ChdEntityDtdElement subclass: #ChdRecordDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdRecordDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY record_dtd_element SUBTYPE OF ( entity_dtd_element ); END_ENTITY; ! !ChdRecordDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-classifying'! isChdRecordDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdRecordDtdElement ^ false ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRecordDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptRecordDtdElement: e "my subclasses have to redefine it" ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-copying'! recordDtdElementCopyTo: another ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self recordDtdElementCopyTo: another ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self recordDtdElementCopyTo: another ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! recordDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! recordDtdElementToValues: values ^ values ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self recordDtdElementToValues: (super toValues: values) ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self recordDtdElementFromValues: (super fromValues: values) ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self recordDtdElementFromValues: values ! ! !ChdRecordDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self recordDtdElementToValues: values ! ! !ChdRecordDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdRecordDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! ChdEntityDtdElement subclass: #ChdDiscriminatedTypeDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdDiscriminatedTypeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_dtd_element SUBTYPE OF ( entity_dtd_element ); DERIVE SELF\entity_dtd_element.subs : LIST OF dtd_element := compute_discriminated_type_sub_elements ( SELF ); SELF\entity_dtd_element.dtd_code : STRING := compute_discriminated_type_code ( SELF ); END_ENTITY; ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdDiscriminatedTypeDtdElement ^ false ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptDiscriminatedTypeDtdElement: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-copying'! discriminatedTypeDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeDtdElementToValues: values ^ values ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeDtdElementToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeDtdElementFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeDtdElementFromValues: values ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeDtdElementToValues: values ! ! !ChdDiscriminatedTypeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdDiscriminatedTypeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext ^ self subsUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! subsUsingContext: aContext receiver: aReceiver ^ ChdComputeDiscriminatedTypeSubElementsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! subs ^ self subsUsingContext: self class context ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ChdComputeDiscriminatedTypeCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedTypeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! ChdDtdElement subclass: #ChdAttributeDtdElement instanceVariableNames: 'domain attribute' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdAttributeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAttributeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAttributeDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAttributeDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY attribute_dtd_element SUBTYPE OF ( dtd_element ); attribute : attribute; domain : domain_dtd_element; DERIVE SELF\dtd_element.tag : STRING := lowerize ( attribute.name ); SELF\dtd_element.dtd_code : STRING := domain.dtd_code; END_ENTITY; ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attribute := nil. domain := nil ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-classifying'! isChdAttributeDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdAttributeDtdElement ^ false ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAttributeDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptAttributeDtdElement: e "my subclasses have to redefine it" ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-copying'! attributeDtdElementCopyTo: another another fastSetAttribute: self attribute. another fastSetDomain: self domain ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self attributeDtdElementCopyTo: another ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self attributeDtdElementCopyTo: another ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! attributeDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttribute: valuesloc removeFirst. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! attributeDtdElementToValues: values values add: self attribute. values add: self domain. ^ values ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self attributeDtdElementToValues: (super toValues: values) ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self attributeDtdElementFromValues: (super fromValues: values) ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self attributeDtdElementFromValues: values ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self attributeDtdElementToValues: values ! ! !ChdAttributeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdAttributeDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-accessing'! attribute ^ attribute ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-set-accessing'! setAttribute: aChdAttribute self attribute: aChdAttribute ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-accessing'! attribute: aChdAttribute attribute := aChdAttribute ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttribute: aChdAttribute attribute := aChdAttribute ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-with-context-accessing'! attributeUsingContext: aContext ^ self attribute ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-set-accessing'! setDomain: aChdDomainDtdElement self domain: aChdDomainDtdElement ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-accessing'! domain: aChdDomainDtdElement domain := aChdDomainDtdElement ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aChdDomainDtdElement domain := aChdDomainDtdElement ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext ^ self tagUsingContext: aContext receiver: self ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! tagUsingContext: aContext receiver: aReceiver ^ PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver attribute nameUsingContext: self class context); yourself) ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! tag ^ self tagUsingContext: self class context ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ aReceiver domain dtdCodeUsingContext: aContext ! ! !ChdAttributeDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! ChdDtdElement subclass: #ChdDomainDtdElement instanceVariableNames: 'domain' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDomainDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY domain_dtd_element SUBTYPE OF ( dtd_element ); domain : entity_instance; DERIVE as_collection_element_dtd_code_tail : STRING := ''; END_ENTITY; ! !ChdDomainDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. domain := nil ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-classifying'! isChdDomainDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdDomainDtdElement ^ false ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptDomainDtdElement: e "my subclasses have to redefine it" ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-copying'! domainDtdElementCopyTo: another another fastSetDomain: self domain ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainDtdElementCopyTo: another ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainDtdElementCopyTo: another ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! domainDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setDomain: valuesloc removeFirst. ^ valuesloc ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! domainDtdElementToValues: values values add: self domain. ^ values ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainDtdElementToValues: (super toValues: values) ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainDtdElementFromValues: (super fromValues: values) ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainDtdElementFromValues: values ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainDtdElementToValues: values ! ! !ChdDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-set-accessing'! setDomain: aChdEntityInstance self domain: aChdEntityInstance ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetDomain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-with-context-accessing'! domainUsingContext: aContext ^ self domain ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! ChdDomainDtdElement subclass: #ChdSimpleDomainDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdSimpleDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdSimpleDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdSimpleDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdSimpleDomainDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY simple_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(#PCDATA)>\n'; END_ENTITY; ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-classifying'! isChdSimpleDomainDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdSimpleDomainDtdElement ^ false ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSimpleDomainDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptSimpleDomainDtdElement: e "my subclasses have to redefine it" ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-copying'! simpleDomainDtdElementCopyTo: another ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self simpleDomainDtdElementCopyTo: another ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self simpleDomainDtdElementCopyTo: another ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! simpleDomainDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! simpleDomainDtdElementToValues: values ^ values ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self simpleDomainDtdElementToValues: (super toValues: values) ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self simpleDomainDtdElementFromValues: (super fromValues: values) ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self simpleDomainDtdElementFromValues: values ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self simpleDomainDtdElementToValues: values ! ! !ChdSimpleDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdSimpleDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ('\n' ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ '(#PCDATA)>\n' ! ! !ChdSimpleDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! ChdDomainDtdElement subclass: #ChdCollectionDtdElement instanceVariableNames: 'elementDomain' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdCollectionDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCollectionDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCollectionDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCollectionDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY collection_dtd_element SUBTYPE OF ( domain_dtd_element ); element_domain : domain_dtd_element; DERIVE SELF\dtd_element.dtd_code : STRING := '! !ChdCollectionDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. elementDomain := nil ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-classifying'! isChdCollectionDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdCollectionDtdElement ^ false ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCollectionDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptCollectionDtdElement: e "my subclasses have to redefine it" ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-copying'! collectionDtdElementCopyTo: another another fastSetElementDomain: self elementDomain ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self collectionDtdElementCopyTo: another ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self collectionDtdElementCopyTo: another ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! collectionDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setElementDomain: valuesloc removeFirst. ^ valuesloc ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! collectionDtdElementToValues: values values add: self elementDomain. ^ values ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self collectionDtdElementToValues: (super toValues: values) ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self collectionDtdElementFromValues: (super fromValues: values) ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self collectionDtdElementFromValues: values ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self collectionDtdElementToValues: values ! ! !ChdCollectionDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdCollectionDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-accessing'! elementDomain ^ elementDomain ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-set-accessing'! setElementDomain: aChdDomainDtdElement self elementDomain: aChdDomainDtdElement ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-accessing'! elementDomain: aChdDomainDtdElement elementDomain := aChdDomainDtdElement ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-fast-set-accessing'! fastSetElementDomain: aChdDomainDtdElement elementDomain := aChdDomainDtdElement ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-with-context-accessing'! elementDomainUsingContext: aContext ^ self elementDomain ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdCollectionDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ((' ENTITY entity_ref_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE infered_element : entity_dtd_element := ?; SELF\dtd_element.dtd_code : STRING := '\n'; END_ENTITY; ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-classifying'! isChdEntityRefDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdEntityRefDtdElement ^ false ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityRefDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptEntityRefDtdElement: e "my subclasses have to redefine it" ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-copying'! entityRefDtdElementCopyTo: another ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityRefDtdElementCopyTo: another ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityRefDtdElementCopyTo: another ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! entityRefDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! entityRefDtdElementToValues: values ^ values ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityRefDtdElementToValues: (super toValues: values) ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityRefDtdElementFromValues: (super fromValues: values) ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityRefDtdElementFromValues: values ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityRefDtdElementToValues: values ! ! !ChdEntityRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdEntityRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext ^ self inferedElementUsingContext: aContext receiver: self ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElement ^ self inferedElementUsingContext: self class context ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ((('\n' ! ! !ChdEntityRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! ChdEntityRefDtdElement subclass: #ChdRecordRefDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdRecordRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordRefDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY record_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || record_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-classifying'! isChdRecordRefDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdRecordRefDtdElement ^ false ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRecordRefDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptRecordRefDtdElement: e "my subclasses have to redefine it" ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-copying'! recordRefDtdElementCopyTo: another ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self recordRefDtdElementCopyTo: another ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self recordRefDtdElementCopyTo: another ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! recordRefDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! recordRefDtdElementToValues: values ^ values ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self recordRefDtdElementToValues: (super toValues: values) ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self recordRefDtdElementFromValues: (super fromValues: values) ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self recordRefDtdElementFromValues: values ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self recordRefDtdElementToValues: values ! ! !ChdRecordRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdRecordRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext ^ self inferedElementUsingContext: aContext receiver: self ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: nil; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: aReceiver domain; yourself); yourself); yourself)) pltAsObject; add: ChdRecordDtdElement new; yourself)) pltAsObject ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElement ^ self inferedElementUsingContext: self class context ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ ('(' pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((aReceiver domain handledUsingContext: self class context) nameUsingContext: self class context); yourself))) pltPlus: ')*>\n' ! ! !ChdRecordRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! ChdEntityRefDtdElement subclass: #ChdAdaClassRefDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdAdaClassRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassRefDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY ada_class_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || ada_class_dtd_element ( ); SELF\entity_ref_dtd_element.dtd_code : STRING := '\n' + '\n'; SELF\entity_ref_dtd_element.as_collection_element_dtd_code_tail : STRING := ' EMPTY>\n' + '\n'; END_ENTITY; ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-classifying'! isChdAdaClassRefDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdAdaClassRefDtdElement ^ false ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaClassRefDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptAdaClassRefDtdElement: e "my subclasses have to redefine it" ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-copying'! adaClassRefDtdElementCopyTo: another ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaClassRefDtdElementCopyTo: another ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaClassRefDtdElementCopyTo: another ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! adaClassRefDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! adaClassRefDtdElementToValues: values ^ values ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaClassRefDtdElementToValues: (super toValues: values) ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaClassRefDtdElementFromValues: (super fromValues: values) ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaClassRefDtdElementFromValues: values ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaClassRefDtdElementToValues: values ! ! !ChdAdaClassRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdAdaClassRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext ^ self inferedElementUsingContext: aContext receiver: self ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: nil; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: aReceiver domain; yourself); yourself); yourself)) pltAsObject; add: ChdAdaClassDtdElement new; yourself)) pltAsObject ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElement ^ self inferedElementUsingContext: self class context ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ (((('\n') pltPlus: '\n' ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ ((' EMPTY>\n' pltPlus: '\n' ! ! !ChdAdaClassRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! ChdEntityRefDtdElement subclass: #ChdDiscriminatedTypeRefDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdDiscriminatedTypeRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeRefDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeRefDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_ref_dtd_element SUBTYPE OF ( entity_ref_dtd_element ); DERIVE SELF\entity_ref_dtd_element.infered_element : entity_dtd_element := dtd_element ( ?, ? ) || composite_dtd_element ( ) || entity_dtd_element ( domain ) || discriminated_type_dtd_element ( ); SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := '(' + lowerize ( domain.handled.name ) + ')*>\n'; END_ENTITY; ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeRefDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdDiscriminatedTypeRefDtdElement ^ false ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeRefDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptDiscriminatedTypeRefDtdElement: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-copying'! discriminatedTypeRefDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeRefDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeRefDtdElementCopyTo: another ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeRefDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeRefDtdElementToValues: values ^ values ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeRefDtdElementToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeRefDtdElementFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeRefDtdElementFromValues: values ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeRefDtdElementToValues: values ! ! !ChdDiscriminatedTypeRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdDiscriminatedTypeRefDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext ^ self inferedElementUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElementUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: nil; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: aReceiver domain; yourself); yourself); yourself)) pltAsObject; add: ChdDiscriminatedTypeDtdElement new; yourself)) pltAsObject ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! inferedElement ^ self inferedElementUsingContext: self class context ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ ('(' pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((aReceiver domain handledUsingContext: self class context) nameUsingContext: self class context); yourself))) pltPlus: ')*>\n' ! ! !ChdDiscriminatedTypeRefDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! ChdDomainDtdElement subclass: #ChdUnknownDomainDtdElement instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdUnknownDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdUnknownDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdUnknownDomainDtdElement class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdUnknownDomainDtdElement commentStamp: 'platypus comment' prior: 0! ENTITY unknown_domain_dtd_element SUBTYPE OF ( domain_dtd_element ); DERIVE SELF\dtd_element.dtd_code : STRING := '\n'; SELF\domain_dtd_element.as_collection_element_dtd_code_tail : STRING := 'ANY>\n'; END_ENTITY; ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-classifying'! isChdUnknownDomainDtdElement ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDtdSchema-classifying'! isChdUnknownDomainDtdElement ^ false ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUnknownDomainDtdElement: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDtd'! acceptUnknownDomainDtdElement: e "my subclasses have to redefine it" ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-copying'! unknownDomainDtdElementCopyTo: another ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self unknownDomainDtdElementCopyTo: another ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self unknownDomainDtdElementCopyTo: another ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! unknownDomainDtdElementFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! unknownDomainDtdElementToValues: values ^ values ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self unknownDomainDtdElementToValues: (super toValues: values) ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self unknownDomainDtdElementFromValues: (super fromValues: values) ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self unknownDomainDtdElementFromValues: values ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self unknownDomainDtdElementToValues: values ! ! !ChdUnknownDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! !ChdUnknownDomainDtdElement class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext ^ self dtdCodeUsingContext: aContext receiver: self ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCodeUsingContext: aContext receiver: aReceiver ^ ('\n' ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! dtdCode ^ self dtdCodeUsingContext: self class context ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext ^ self asCollectionElementDtdCodeTailUsingContext: aContext receiver: self ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTailUsingContext: aContext receiver: aReceiver ^ 'ANY>\n' ! ! !ChdUnknownDomainDtdElement methodsFor: 'platypus-generated-deriving'! asCollectionElementDtdCodeTail ^ self asCollectionElementDtdCodeTailUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeRootDtdCodeFunction instanceVariableNames: 'r s code lines licence pkgs attributes acode previous implicits infered el inferedAttributes ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeRootDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeRootDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeRootDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeRootDtdCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_root_dtd_code ( r : root_dtd_element ) : STRING; LOCAL s : STRING := ''; code : STRING; lines : LIST OF STRING := [ ]; licence : STRING := string_replace ( source_licence, '--', ' ' ); pkgs : LIST OF package_dtd_element := r.subs; attributes : LIST OF attribute_dtd_element := [ ]; acode : STRING; previous : LIST OF STRING := [ ]; implicits : LIST OF dtd_element := r.implicit_domains; infered : LIST OF entity_dtd_element := [ ]; el : entity_dtd_element; infered_attributes : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( implicits ) TO HIINDEX ( implicits ); el := implicits [ no].infered_element; infered := infered + el; infered_attributes := infered_attributes + el.subs; END_REPEAT; s := s + '\n\n' + '\n\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); code := pkgs [ no].dtd_code; previous := previous + LinesFromString ( code ); s := s + code; END_REPEAT; s := s + '\n'; REPEAT no := LOINDEX ( infered ) TO HIINDEX ( infered ); acode := infered [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); acode := attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + attributes [ no].dtd_code; previous := previous + acode; END_IF; END_REPEAT; REPEAT no := LOINDEX ( infered_attributes ) TO HIINDEX ( infered_attributes ); acode := infered_attributes [ no].dtd_code; IF NOT ( acode IN previous ) THEN s := s + acode; previous := previous + acode; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdRootDtdElement ^ self new r: aChdRootDtdElement ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1) ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110865728! r: aChdRootDtdElement r := aChdRootDtdElement ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString1 code := aString1 ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! lines: aListOfString lines := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! licence: aString2 licence := aString2 ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs: aListOfChdPackageDtdElement pkgs := aListOfChdPackageDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdPackageDtdElement as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfChdAttributeDtdElement attributes := aListOfChdAttributeDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttributeDtdElement as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! acode: aString3 acode := aString3 ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! previous: aListOfString1 previous := aListOfString1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString1 as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! implicits: aListOfChdDtdElement implicits := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! infered: aListOfChdEntityDtdElement infered := aListOfChdEntityDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityDtdElement as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! el: aChdEntityDtdElement el := aChdEntityDtdElement ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! inferedAttributes: aListOfChdAttributeDtdElement1 inferedAttributes := aListOfChdAttributeDtdElement1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttributeDtdElement1 as: OrderedCollection ] ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! lines ^ lines ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! licence ^ licence ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs ^ pkgs ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! acode ^ acode ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! previous ^ previous ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! implicits ^ implicits ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! infered ^ infered ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! el ^ el ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-accessing'! inferedAttributes ^ inferedAttributes ! ! !ChdComputeRootDtdCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: ''. self lines: Array new. self licence: (PTsStringReplaceFunction invokeFromValues: (OrderedCollection new add: (((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n'); add: '--'; add: ' '; yourself)). self pkgs: (self r subsUsingContext: self class context). self attributes: Array new. self previous: Array new. self implicits: (self r implicitDomainsUsingContext: self class context). self infered: Array new. self inferedAttributes: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no287 | self el: ((self implicits pltAt: no287) inferedElementUsingContext: self class context). self infered: (self infered pltPlus: self el). self inferedAttributes: (self inferedAttributes pltPlus: (self el subsUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self implicits; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self implicits; yourself)). self s: ((((((self s pltPlus: '\n\n') pltPlus: '\n\n'). PlatypusCoreRepeatStatement repeat: [ :no2827 | self code: ((self pkgs pltAt: no2827) dtdCodeUsingContext: self class context). self previous: (self previous pltPlus: (PTsLinesFromStringFunction invokeFromValues: (OrderedCollection new add: self code; yourself))). self s: (self s pltPlus: self code) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). self s: (self s pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3330 | self acode: ((self infered pltAt: no3330) dtdCodeUsingContext: self class context). (self previous includes: self acode) not ifTrue: [ self s: (self s pltPlus: self acode). self previous: (self previous pltPlus: self acode) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self infered; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self infered; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1796 | self attributes: (self attributes pltPlus: (ChdComputePackageAttributeDtdElementsFunction invokeFromValues: (OrderedCollection new add: (self pkgs pltAt: no1796); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1077 | self acode: ((self attributes pltAt: no1077) dtdCodeUsingContext: self class context). (self previous includes: self acode) not ifTrue: [ self s: (self s pltPlus: ((self attributes pltAt: no1077) dtdCodeUsingContext: self class context)). self previous: (self previous pltPlus: self acode) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). PlatypusCoreRepeatStatement repeat: [ :no2456 | self acode: ((self inferedAttributes pltAt: no2456) dtdCodeUsingContext: self class context). (self previous includes: self acode) not ifTrue: [ self s: (self s pltPlus: self acode). self previous: (self previous pltPlus: self acode) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self inferedAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self inferedAttributes; yourself)). ^ self return: self s ! ! !ChdComputeRootDtdCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRootDtdsFunction instanceVariableNames: 'xmlPkgs rootNames result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdRootDtdsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRootDtdsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRootDtdsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRootDtdsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION root_dtds : LIST OF root_dtd_element; LOCAL xml_pkgs : LIST OF ada_package := xml_packages ( ); root_names : LIST OF STRING := [ ]; result : LIST OF root_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( xml_pkgs ) TO HIINDEX ( xml_pkgs ); ALIAS curr_pkg FOR xml_pkgs [ no]; root_names := root_names + curr_pkg.xml_root_tags; END_ALIAS; END_REPEAT; root_names := SetToList ( ListToSet ( root_names ) ); REPEAT no := LOINDEX ( root_names ) TO HIINDEX ( root_names ); result := result + composite_dtd_element ( ) || root_dtd_element ( ) || dtd_element ( ?, root_names [ no] ); END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! xmlPkgs: aListOfChdAdaPackage xmlPkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! rootNames: aListOfString rootNames := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdRootDtdElement result := aListOfChdRootDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdRootDtdElement as: OrderedCollection ] ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! xmlPkgs ^ xmlPkgs ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! rootNames ^ rootNames ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdRootDtdsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self xmlPkgs: ChdXmlPackagesFunction invoke. self rootNames: Array new. self result: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3267 | PlatypusCoreAliasStatement alias: (self xmlPkgs pltAt: no3267) statementsBlock: [ :currPkg710 | self rootNames: (self rootNames pltPlus: (currPkg710 xmlRootTagsUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self xmlPkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self xmlPkgs; yourself)). self rootNames: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: (PTsListToSetFunction invokeFromValues: (OrderedCollection new add: self rootNames; yourself)); yourself)). PlatypusCoreRepeatStatement repeat: [ :no1831 | self result: (self result pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdCompositeDtdElement new; add: ChdRootDtdElement new; yourself)) pltAsObject; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: nil; add: (self rootNames pltAt: no1831); yourself); yourself); yourself)) pltAsObject) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self rootNames; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self rootNames; yourself)). ^ self return: self result ! ! !ChdRootDtdsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeRootSubElementsFunction instanceVariableNames: 'e result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeRootSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeRootSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeRootSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeRootSubElementsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_root_sub_elements ( e : root_dtd_element ) : LIST OF package_dtd_element; LOCAL result : LIST OF package_dtd_element := [ ]; END_LOCAL; ALIAS packages FOR e.packages; REPEAT no := LOINDEX ( packages ) TO HIINDEX ( packages ); result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || package_dtd_element ( packages [ no] ) ); END_REPEAT; END_ALIAS; RETURN ( result ); END_FUNCTION; ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdRootDtdElement ^ self new e: aChdRootDtdElement ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110883287! e: aChdRootDtdElement e := aChdRootDtdElement ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdPackageDtdElement result := aListOfChdPackageDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdPackageDtdElement as: OrderedCollection ] ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeRootSubElementsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" PlatypusCoreAliasStatement alias: (self e packagesUsingContext: self class context) statementsBlock: [ :packages643 | PlatypusCoreRepeatStatement repeat: [ :no1612 | self result: (self result pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self e; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdPackageDtdElement new packageDtdElementFromValues: (OrderedCollection new add: (packages643 pltAt: no1612); yourself); yourself); yourself)) pltAsObject) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: packages643; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: packages643; yourself)) ]. ^ self return: self result ! ! !ChdComputeRootSubElementsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputePackageAttributeDtdElementsFunction instanceVariableNames: 'p subs r ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputePackageAttributeDtdElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputePackageAttributeDtdElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputePackageAttributeDtdElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputePackageAttributeDtdElementsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_package_attribute_dtd_elements ( p : package_dtd_element ) : LIST OF attribute_dtd_element; LOCAL subs : LIST OF dtd_element := p.subs; r : LIST OF attribute_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); r := r + subs [ no].subs; END_REPEAT; RETURN ( r ); END_FUNCTION; ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-instance-creation'! p: aChdPackageDtdElement ^ self new p: aChdPackageDtdElement ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110887147! p: aChdPackageDtdElement p := aChdPackageDtdElement ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! subs: aListOfChdDtdElement subs := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! r: aListOfChdAttributeDtdElement r := aListOfChdAttributeDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttributeDtdElement as: OrderedCollection ] ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! subs ^ subs ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdComputePackageAttributeDtdElementsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self subs: (self p subsUsingContext: self class context). self r: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1330 | self r: (self r pltPlus: ((self subs pltAt: no1330) subsUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)). ^ self return: self r ! ! !ChdComputePackageAttributeDtdElementsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputePackageDtdCodeFunction instanceVariableNames: 'p subs s ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputePackageDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputePackageDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputePackageDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputePackageDtdCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_package_dtd_code ( p : package_dtd_element ) : STRING; LOCAL subs : LIST OF dtd_element := p.subs; s : STRING := ''; END_LOCAL; IF ( SIZEOF ( subs ) > 0 ) THEN s := s + '\n'; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); s := s + subs [ no].dtd_code; END_REPEAT; s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-instance-creation'! p: aChdPackageDtdElement ^ self new p: aChdPackageDtdElement ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1) ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110890616! p: aChdPackageDtdElement p := aChdPackageDtdElement ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! subs: aListOfChdDtdElement subs := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! subs ^ subs ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdComputePackageDtdCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self subs: (self p subsUsingContext: self class context). self s: ''. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)) > 0 ifTrue: [ self s: (((self s pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3266 | self s: (self s pltPlus: ((self subs pltAt: no3266) dtdCodeUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)). self s: (self s pltPlus: '\n') ]. ^ self return: self s ! ! !ChdComputePackageDtdCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputePackageSubElementsFunction instanceVariableNames: 'e result classes records discrims ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputePackageSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputePackageSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputePackageSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputePackageSubElementsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_package_sub_elements ( e : package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; classes : LIST OF ada_entity := package_ada_classes ( e.package ); records : LIST OF ada_entity := package_records ( e.package ); discrims : LIST OF discriminated_type := package_discriminated_types ( e.package ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || ada_class_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( records ) TO HIINDEX ( records ); ALIAS curr FOR records [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || record_dtd_element ( ) ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( discrims ) TO HIINDEX ( discrims ); ALIAS curr FOR discrims [ no]; result := result + ( dtd_element ( e, ? ) || composite_dtd_element ( ) || entity_dtd_element ( curr ) || discriminated_type_dtd_element ( ) ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdPackageDtdElement ^ self new e: aChdPackageDtdElement ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110895431! e: aChdPackageDtdElement e := aChdPackageDtdElement ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdDtdElement result := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! classes: aListOfChdAdaEntity classes := aListOfChdAdaEntity ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaEntity as: OrderedCollection ] ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! records: aListOfChdAdaEntity1 records := aListOfChdAdaEntity1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaEntity1 as: OrderedCollection ] ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! discrims: aListOfChdDiscriminatedType discrims := aListOfChdDiscriminatedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDiscriminatedType as: OrderedCollection ] ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! classes ^ classes ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! records ^ records ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-accessing'! discrims ^ discrims ! ! !ChdComputePackageSubElementsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. self classes: (ChdPackageAdaClassesFunction invokeFromValues: (OrderedCollection new add: (self e packageUsingContext: self class context); yourself)). self records: (ChdPackageRecordsFunction invokeFromValues: (OrderedCollection new add: (self e packageUsingContext: self class context); yourself)). self discrims: (ChdPackageDiscriminatedTypesFunction invokeFromValues: (OrderedCollection new add: (self e packageUsingContext: self class context); yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no261 | PlatypusCoreAliasStatement alias: (self classes pltAt: no261) statementsBlock: [ :curr1796 | self result: (self result pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self e; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: curr1796; yourself); yourself); yourself)) pltAsObject; add: ChdAdaClassDtdElement new; yourself)) pltAsObject) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self classes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self classes; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1128 | PlatypusCoreAliasStatement alias: (self records pltAt: no1128) statementsBlock: [ :curr2660 | self result: (self result pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self e; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: curr2660; yourself); yourself); yourself)) pltAsObject; add: ChdRecordDtdElement new; yourself)) pltAsObject) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self records; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self records; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1972 | PlatypusCoreAliasStatement alias: (self discrims pltAt: no1972) statementsBlock: [ :curr3504 | self result: (self result pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self e; add: nil; yourself); yourself); add: ChdCompositeDtdElement new; yourself)) pltAsObject; add: (ChdEntityDtdElement new entityDtdElementFromValues: (OrderedCollection new add: curr3504; yourself); yourself); yourself)) pltAsObject; add: ChdDiscriminatedTypeDtdElement new; yourself)) pltAsObject) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self discrims; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self discrims; yourself)). ^ self return: self result ! ! !ChdComputePackageSubElementsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeEntityDtdCodeFunction instanceVariableNames: 'ent s l subs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeEntityDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeEntityDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeEntityDtdCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeEntityDtdCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_entity_dtd_code ( ent : entity_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( ent.domain ) ) THEN s := s + '\n'; END_IF; RETURN ( s ); END_FUNCTION; ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-instance-creation'! ent: aChdEntityDtdElement ^ self new ent: aChdEntityDtdElement ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ent: (values at: 1) ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110904718! ent: aChdEntityDtdElement ent := aChdEntityDtdElement ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! l: aListOfString l := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! subs: aListOfChdDtdElement subs := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-accessing'! subs ^ subs ! ! !ChdComputeEntityDtdCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: ''. self l: Array new. self subs: (self ent subsUsingContext: self class context). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1979 | PlatypusCoreAliasStatement alias: (self subs pltAt: no1979) statementsBlock: [ :curr3507 | self l: (self l pltPlus: (curr3507 tagUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)). self s: (((('\n'). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self ent domainUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self s: (((self s pltPlus: '\n') ]. ^ self return: self s ! ! !ChdComputeEntityDtdCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeAttributeDtdListFromAttributeListFunction instanceVariableNames: 'owner attrs result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeAttributeDtdListFromAttributeListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeAttributeDtdListFromAttributeListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeAttributeDtdListFromAttributeListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeAttributeDtdListFromAttributeListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_attribute_dtd_list_from_attribute_list ( owner : dtd_element; attrs : LIST OF explicit_attribute ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS curr FOR attrs [ no]; IF ( lowerize ( curr.name ) <> lowerize ( xml_id_name ) ) THEN result := result + compute_attribute_dtd_element ( owner, curr ); END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-instance-creation'! owner: aChdDtdElement attrs: aListOfChdExplicitAttribute ^ self new owner: aChdDtdElement attrs: aListOfChdExplicitAttribute ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self owner: (values at: 1). self attrs: (values at: 2) ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110909013! owner: aChdDtdElement attrs: aListOfChdExplicitAttribute self owner: aChdDtdElement. self attrs: aListOfChdExplicitAttribute ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! owner: aChdDtdElement owner := aChdDtdElement ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdExplicitAttribute attrs := aListOfChdExplicitAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdExplicitAttribute as: OrderedCollection ] ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdDtdElement result := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeAttributeDtdListFromAttributeListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1687 | PlatypusCoreAliasStatement alias: (self attrs pltAt: no1687) statementsBlock: [ :curr3219 | (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (curr3219 nameUsingContext: self class context); yourself)) ~= (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: 'cheddar_private_id'; yourself)) ifTrue: [ self result: (self result pltPlus: (ChdComputeAttributeDtdElementFunction invokeFromValues: (OrderedCollection new add: self owner; add: curr3219; yourself))) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)). ^ self return: self result ! ! !ChdComputeAttributeDtdListFromAttributeListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeEntitySubElementsFunction instanceVariableNames: 'e attrs result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeEntitySubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeEntitySubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeEntitySubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeEntitySubElementsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_entity_sub_elements ( e : entity_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := inherited_explicit_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdEntityDtdElement ^ self new e: aChdEntityDtdElement ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110913236! e: aChdEntityDtdElement e := aChdEntityDtdElement ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdExplicitAttribute attrs := aListOfChdExplicitAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdExplicitAttribute as: OrderedCollection ] ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdDtdElement result := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeEntitySubElementsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attrs: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: (self e domainUsingContext: self class context); yourself)). self result: (ChdComputeAttributeDtdListFromAttributeListFunction invokeFromValues: (OrderedCollection new add: self e; add: self attrs; yourself)). " ---------- statements ----------" ^ self return: self result ! ! !ChdComputeEntitySubElementsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeDiscriminatedTypeCodeFunction instanceVariableNames: 'ent s l subs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeDiscriminatedTypeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeDiscriminatedTypeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeDiscriminatedTypeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeDiscriminatedTypeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_discriminated_type_code ( ent : discriminated_type_dtd_element ) : STRING; LOCAL s : STRING := ''; l : LIST OF STRING := [ ]; subs : LIST OF dtd_element := ent.subs; END_LOCAL; REPEAT no := LOINDEX ( subs ) TO HIINDEX ( subs ); ALIAS curr FOR subs [ no]; l := l + curr.tag; END_ALIAS; END_REPEAT; s := '\n'; RETURN ( s ); END_FUNCTION; ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-instance-creation'! ent: aChdDiscriminatedTypeDtdElement ^ self new ent: aChdDiscriminatedTypeDtdElement ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ent: (values at: 1) ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110916482! ent: aChdDiscriminatedTypeDtdElement ent := aChdDiscriminatedTypeDtdElement ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! l: aListOfString l := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! subs: aListOfChdDtdElement subs := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-accessing'! subs ^ subs ! ! !ChdComputeDiscriminatedTypeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: ''. self l: Array new. self subs: (self ent subsUsingContext: self class context). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no649 | PlatypusCoreAliasStatement alias: (self subs pltAt: no649) statementsBlock: [ :curr2177 | self l: (self l pltPlus: (curr2177 tagUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self subs; yourself)). self s: (((('\n'). ^ self return: self s ! ! !ChdComputeDiscriminatedTypeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeDiscriminatedTypeSubElementsFunction instanceVariableNames: 'e attrs result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeDiscriminatedTypeSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeDiscriminatedTypeSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeDiscriminatedTypeSubElementsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeDiscriminatedTypeSubElementsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_discriminated_type_sub_elements ( e : discriminated_type_dtd_element ) : LIST OF dtd_element; LOCAL attrs : LIST OF explicit_attribute := discriminated_type_attributes ( e.domain ); result : LIST OF dtd_element := compute_attribute_dtd_list_from_attribute_list ( e, attrs ); END_LOCAL; RETURN ( result ); END_FUNCTION; ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdDiscriminatedTypeDtdElement ^ self new e: aChdDiscriminatedTypeDtdElement ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110920379! e: aChdDiscriminatedTypeDtdElement e := aChdDiscriminatedTypeDtdElement ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdExplicitAttribute attrs := aListOfChdExplicitAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdExplicitAttribute as: OrderedCollection ] ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdDtdElement result := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeDiscriminatedTypeSubElementsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attrs: (ChdDiscriminatedTypeAttributesFunction invokeFromValues: (OrderedCollection new add: (self e domainUsingContext: self class context); yourself)). self result: (ChdComputeAttributeDtdListFromAttributeListFunction invokeFromValues: (OrderedCollection new add: self e; add: self attrs; yourself)). " ---------- statements ----------" ^ self return: self result ! ! !ChdComputeDiscriminatedTypeSubElementsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeAttributeDtdElementFunction instanceVariableNames: 'owner a domain result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeAttributeDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeAttributeDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeAttributeDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeAttributeDtdElementFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_attribute_dtd_element ( owner : dtd_element; a : attribute ) : attribute_dtd_element; LOCAL domain : entity_instance := basic_ada_domain ( a.domain ).handled; result : attribute_dtd_element; END_LOCAL; result := ( dtd_element ( owner, ? ) || attribute_dtd_element ( a, ? ) ); result.domain := compute_domain_dtd_element ( result, domain ); RETURN ( result ); END_FUNCTION; ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-instance-creation'! owner: aChdDtdElement a: aChdAttribute ^ self new owner: aChdDtdElement a: aChdAttribute ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self owner: (values at: 1). self a: (values at: 2) ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110923706! owner: aChdDtdElement a: aChdAttribute self owner: aChdDtdElement. self a: aChdAttribute ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! owner: aChdDtdElement owner := aChdDtdElement ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! a: aChdAttribute a := aChdAttribute ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! result: aChdAttributeDtdElement result := aChdAttributeDtdElement ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! a ^ a ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeAttributeDtdElementFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self domain: ((ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self a domainUsingContext: self class context); yourself)) handledUsingContext: self class context). " ---------- statements ----------" self result: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); add: (ChdAttributeDtdElement new attributeDtdElementFromValues: (OrderedCollection new add: self a; add: nil; yourself); yourself); yourself)) pltAsObject. self result domain: (ChdComputeDomainDtdElementFunction invokeFromValues: (OrderedCollection new add: self result; add: self domain; yourself)). ^ self return: self result ! ! !ChdComputeAttributeDtdElementFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeDomainDtdElementFunction instanceVariableNames: 'owner domain subDomain elementDomain result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeDomainDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeDomainDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeDomainDtdElementFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeDomainDtdElementFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_domain_dtd_element ( owner : dtd_element; domain : entity_instance ) : domain_dtd_element; LOCAL sub_domain : entity_instance; element_domain : entity_instance; result : domain_dtd_element; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE' IN TYPEOF ( domain ) ) THEN RETURN ( compute_domain_dtd_element ( owner, domain.ref ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE' IN TYPEOF ( domain ) ) THEN RETURN ( simple_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain ) ) THEN RETURN ( record_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain ) ) THEN RETURN ( discriminated_type_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain ) ) THEN RETURN ( ada_class_ref_dtd_element ( ) || entity_ref_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE' IN TYPEOF ( domain ) ) THEN sub_domain := basic_ada_domain ( domain.domain ); IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( sub_domain ) ) THEN element_domain := basic_ada_domain ( sub_domain.element_type ); result := collection_dtd_element ( ? ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ); result.element_domain := compute_domain_dtd_element ( result, element_domain ); RETURN ( result ); END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; END_IF; println ( domain ); RETURN ( unknown_domain_dtd_element ( ) || dtd_element ( owner, ? ) || domain_dtd_element ( domain ) ); END_FUNCTION; ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-instance-creation'! owner: aChdDtdElement domain: aChdEntityInstance ^ self new owner: aChdDtdElement domain: aChdEntityInstance ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self owner: (values at: 1). self domain: (values at: 2) ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110929764! owner: aChdDtdElement domain: aChdEntityInstance self owner: aChdDtdElement. self domain: aChdEntityInstance ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! owner: aChdDtdElement owner := aChdDtdElement ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! subDomain: aChdEntityInstance subDomain := aChdEntityInstance ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! elementDomain: aChdEntityInstance1 elementDomain := aChdEntityInstance1 ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! result: aChdDomainDtdElement result := aChdDomainDtdElement ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! owner ^ owner ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! subDomain ^ subDomain ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! elementDomain ^ elementDomain ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdComputeDomainDtdElementFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.DICTIONARY_INSTANCE_REFERENCE') ifTrue: [ ^ self return: (ChdComputeDomainDtdElementFunction invokeFromValues: (OrderedCollection new add: self owner; add: (self domain refUsingContext: self class context); yourself)) ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdSimpleDomainDtdElement new; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdSimpleDomainDtdElement new; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'CHEDDAR_DOMAINS.CHEDDAR_PRIORITY_RANGE') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdSimpleDomainDtdElement new; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdRecordRefDtdElement new; add: ChdEntityRefDtdElement new; yourself)) pltAsObject; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdDiscriminatedTypeRefDtdElement new; add: ChdEntityRefDtdElement new; yourself)) pltAsObject; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaClassRefDtdElement new; add: ChdEntityRefDtdElement new; yourself)) pltAsObject; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.DEFINED_TYPE') ifTrue: [ self subDomain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self domain domainUsingContext: self class context); yourself)). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self subDomain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ self elementDomain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self subDomain elementTypeUsingContext: self class context); yourself)). self result: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdCollectionDtdElement new collectionDtdElementFromValues: (OrderedCollection new add: nil; yourself); yourself); add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject. self result elementDomain: (ChdComputeDomainDtdElementFunction invokeFromValues: (OrderedCollection new add: self result; add: self elementDomain; yourself)). ^ self return: self result ] ] ] ] ] ] ] ] ]. PTsPrintLnProcedure invokeFromValues: (OrderedCollection new add: self domain; yourself). ^ self return: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdUnknownDomainDtdElement new; add: (ChdDtdElement new dtdElementFromValues: (OrderedCollection new add: self owner; add: nil; yourself); yourself); yourself)) pltAsObject; add: (ChdDomainDtdElement new domainDtdElementFromValues: (OrderedCollection new add: self domain; yourself); yourself); yourself)) pltAsObject ! ! !ChdComputeDomainDtdElementFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdXmlPackagesFunction instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdXmlPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdXmlPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdXmlPackagesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdXmlPackagesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION xml_packages : LIST OF ada_package; RETURN ( QUERY ( p <* SetToList ( all_ada_packages ( ) ) | SIZEOF ( p.xml_root_tags ) > 0 ) ); END_FUNCTION; ! !ChdXmlPackagesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)) select: [ :p2520 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (p2520 xmlRootTagsUsingContext: self class context); yourself)) > 0 ]) ! ! !ChdXmlPackagesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdGetReferencedEntityDomainsFunction instanceVariableNames: 'pkgs attributes domains names curr ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdGetReferencedEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdGetReferencedEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdGetReferencedEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdGetReferencedEntityDomainsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION get_referenced_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL attributes : LIST OF attribute_dtd_element := [ ]; domains : LIST OF entity_ref_dtd_element := [ ]; names : LIST OF STRING := [ ]; curr : domain_dtd_element; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); attributes := attributes + compute_package_attribute_dtd_elements ( pkgs [ no] ); END_REPEAT; REPEAT noi := LOINDEX ( attributes ) TO HIINDEX ( attributes ); curr := ?; ALIAS dom FOR attributes [ noi].domain; IF ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom ) ) THEN curr := dom; END_IF; IF ( ( 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT' IN TYPEOF ( dom ) ) AND ( 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' IN TYPEOF ( dom.element_domain ) ) ) THEN curr := dom.element_domain; END_IF; IF EXISTS ( curr ) THEN IF NOT ( lowerize ( curr.domain.name ) IN names ) THEN domains := domains + curr; names := names + lowerize ( curr.domain.name ); END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( domains ); END_FUNCTION; ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-instance-creation'! pkgs: aListOfChdPackageDtdElement ^ self new pkgs: aListOfChdPackageDtdElement ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkgs: (values at: 1) ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110948010! pkgs: aListOfChdPackageDtdElement pkgs := aListOfChdPackageDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdPackageDtdElement as: OrderedCollection ] ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfChdAttributeDtdElement attributes := aListOfChdAttributeDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttributeDtdElement as: OrderedCollection ] ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! domains: aListOfChdEntityRefDtdElement domains := aListOfChdEntityRefDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityRefDtdElement as: OrderedCollection ] ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! names: aListOfString names := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! curr: aChdDomainDtdElement curr := aChdDomainDtdElement ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! pkgs ^ pkgs ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! domains ^ domains ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! names ^ names ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! curr ^ curr ! ! !ChdGetReferencedEntityDomainsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attributes: Array new. self domains: Array new. self names: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1179 | self attributes: (self attributes pltPlus: (ChdComputePackageAttributeDtdElementsFunction invokeFromValues: (OrderedCollection new add: (self pkgs pltAt: no1179); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). PlatypusCoreRepeatStatement repeat: [ :noi463 | self curr: nil. PlatypusCoreAliasStatement alias: ((self attributes pltAt: noi463) domainUsingContext: self class context) statementsBlock: [ :dom2083 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: dom2083; yourself)) includes: 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT') ifTrue: [ self curr: dom2083 ]. (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: dom2083; yourself)) includes: 'CHEDDAR_DTD.COLLECTION_DTD_ELEMENT') and: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (dom2083 elementDomainUsingContext: self class context); yourself)) includes: 'CHEDDAR_DTD.ENTITY_REF_DTD_ELEMENT' ]) ifTrue: [ self curr: (dom2083 elementDomainUsingContext: self class context) ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self curr; yourself)) ifTrue: [ (self names includes: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((self curr domainUsingContext: self class context) nameUsingContext: self class context); yourself))) not ifTrue: [ self domains: (self domains pltPlus: self curr). self names: (self names pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((self curr domainUsingContext: self class context) nameUsingContext: self class context); yourself))) ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). ^ self return: self domains ! ! !ChdGetReferencedEntityDomainsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdGetDeclaredEntityDomainsFunction instanceVariableNames: 'pkgs result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdGetDeclaredEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdGetDeclaredEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdGetDeclaredEntityDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdGetDeclaredEntityDomainsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION get_declared_entity_domains ( pkgs : LIST OF package_dtd_element ) : LIST OF dtd_element; LOCAL result : LIST OF dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); result := result + pkgs [ no].subs; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-instance-creation'! pkgs: aListOfChdPackageDtdElement ^ self new pkgs: aListOfChdPackageDtdElement ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkgs: (values at: 1) ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110954080! pkgs: aListOfChdPackageDtdElement pkgs := aListOfChdPackageDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdPackageDtdElement as: OrderedCollection ] ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdDtdElement result := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! pkgs ^ pkgs ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdGetDeclaredEntityDomainsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1965 | self result: (self result pltPlus: ((self pkgs pltAt: no1965) subsUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). ^ self return: self result ! ! !ChdGetDeclaredEntityDomainsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdComputeImplicitDomainsFunction instanceVariableNames: 'r refed decl declDomain notDeclared ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdComputeImplicitDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdComputeImplicitDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdComputeImplicitDomainsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdComputeImplicitDomainsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION compute_implicit_domains ( r : root_dtd_element ) : LIST OF entity_ref_dtd_element; LOCAL refed : LIST OF entity_ref_dtd_element := r.referenced_entities; decl : LIST OF dtd_element := r.declared_domains; decl_domain : LIST OF entity_instance := [ ]; not_declared : LIST OF entity_ref_dtd_element := [ ]; END_LOCAL; REPEAT no := LOINDEX ( decl ) TO HIINDEX ( decl ); ALIAS curr FOR decl [ no]; decl_domain := decl_domain + curr.domain; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( refed ) TO HIINDEX ( refed ); ALIAS curr FOR refed [ no]; IF NOT ( curr.domain IN decl_domain ) AND NOT ( curr IN not_declared ) THEN not_declared := not_declared + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( not_declared ); END_FUNCTION; ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdRootDtdElement ^ self new r: aChdRootDtdElement ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1) ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110957466! r: aChdRootDtdElement r := aChdRootDtdElement ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! refed: aListOfChdEntityRefDtdElement refed := aListOfChdEntityRefDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityRefDtdElement as: OrderedCollection ] ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! decl: aListOfChdDtdElement decl := aListOfChdDtdElement ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDtdElement as: OrderedCollection ] ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! declDomain: aListOfChdEntityInstance declDomain := aListOfChdEntityInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityInstance as: OrderedCollection ] ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! notDeclared: aListOfChdEntityRefDtdElement1 notDeclared := aListOfChdEntityRefDtdElement1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityRefDtdElement1 as: OrderedCollection ] ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! refed ^ refed ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! decl ^ decl ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! declDomain ^ declDomain ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-accessing'! notDeclared ^ notDeclared ! ! !ChdComputeImplicitDomainsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self refed: (self r referencedEntitiesUsingContext: self class context). self decl: (self r declaredDomainsUsingContext: self class context). self declDomain: Array new. self notDeclared: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no600 | PlatypusCoreAliasStatement alias: (self decl pltAt: no600) statementsBlock: [ :curr2131 | self declDomain: (self declDomain pltPlus: (curr2131 domainUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self decl; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self decl; yourself)). PlatypusCoreRepeatStatement repeat: [ :no4035 | PlatypusCoreAliasStatement alias: (self refed pltAt: no4035) statementsBlock: [ :curr1471 | ((self declDomain includes: (curr1471 domainUsingContext: self class context)) not and: [ (self notDeclared includes: curr1471) not ]) ifTrue: [ self notDeclared: (self notDeclared pltPlus: curr1471) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self refed; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self refed; yourself)). ^ self return: self notDeclared ! ! !ChdComputeImplicitDomainsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdXmlPackagesWithTagFunction instanceVariableNames: 'tag ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDtdSchema'! !ChdXmlPackagesWithTagFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdXmlPackagesWithTagFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdXmlPackagesWithTagFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdXmlPackagesWithTagFunction commentStamp: 'platypus comment' prior: 0! FUNCTION xml_packages_with_tag ( tag : STRING ) : LIST OF ada_package; RETURN ( QUERY ( p <* xml_packages ( ) | tag IN p.xml_root_tags ) ); END_FUNCTION; ! !ChdXmlPackagesWithTagFunction methodsFor: 'platypus-generated-instance-creation'! tag: aString ^ self new tag: aString ! ! !ChdXmlPackagesWithTagFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self tag: (values at: 1) ! ! !ChdXmlPackagesWithTagFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110962014! tag: aString tag := aString ! ! !ChdXmlPackagesWithTagFunction methodsFor: 'platypus-generated-accessing'! tag ^ tag ! ! !ChdXmlPackagesWithTagFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (ChdXmlPackagesFunction invoke select: [ :p1406 | (p1406 xmlRootTagsUsingContext: self class context) includes: self tag ]) ! ! !ChdXmlPackagesWithTagFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDtdSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdAdaInterfaceSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-AdaInterfaceSchema'! !ChdAdaInterfaceSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaInterfaceSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaInterfaceSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaInterfaceSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA ada_interface; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM package; ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF int.with_it THEN s := s + 'with ' + name + ';\n'; END_IF; IF int.use_it THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF NOT EXISTS ( from_pkg ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF EXISTS ( curr.suffix ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; END_SCHEMA; ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#ada_interface #ChdAdaInterface) ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 1 ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#ada_interface_path #ChdAdaInterfacePathFunction) ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#ada_interface_declaration #ChdAdaInterfaceDeclarationFunction) ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#ada_interfaces_code #ChdAdaInterfacesCodeFunction) ! ! !ChdAdaInterfaceSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 3 ! ! ChdCoreEntity subclass: #ChdAdaInterface instanceVariableNames: 'withIt useIt suffix prefix' classVariableNames: '' poolDictionaries: '' category: 'Chd-AdaInterfaceSchema'! !ChdAdaInterface class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaInterface class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaInterface class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaInterface commentStamp: 'platypus comment' prior: 0! ENTITY ada_interface; prefix : STRING; suffix : OPTIONAL STRING; with_it : BOOLEAN; use_it : BOOLEAN; DERIVE full_name : STRING := ada_interface_path ( SELF ); declaration : STRING := ada_interface_declaration ( SELF ); END_ENTITY; ! !ChdAdaInterface methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. prefix := ''. suffix := nil. withIt := false. useIt := false ! ! !ChdAdaInterface methodsFor: 'platypus-generated-classifying'! isChdAdaInterface ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-AdaInterfaceSchema-classifying'! isChdAdaInterface ^ false ! ! !ChdAdaInterface methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaInterface: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingAdaInterface'! acceptAdaInterface: e "my subclasses have to redefine it" ! ! !ChdAdaInterface methodsFor: 'platypus-generated-copying'! adaInterfaceCopyTo: another another fastSetPrefix: self prefix. another fastSetSuffix: self suffix. another fastSetWithIt: self withIt. another fastSetUseIt: self useIt ! ! !ChdAdaInterface methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaInterfaceCopyTo: another ! ! !ChdAdaInterface methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaInterfaceCopyTo: another ! ! !ChdAdaInterface methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! adaInterfaceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPrefix: valuesloc removeFirst. self setSuffix: valuesloc removeFirst. self setWithIt: valuesloc removeFirst. self setUseIt: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! adaInterfaceToValues: values values add: self prefix. values add: self suffix. values add: self withIt. values add: self useIt. ^ values ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaInterfaceToValues: (super toValues: values) ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaInterfaceFromValues: (super fromValues: values) ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaInterfaceFromValues: values ! ! !ChdAdaInterface methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaInterfaceToValues: values ! ! !ChdAdaInterface class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdAdaInterfaceSchemaDefinition singleton ! ! !ChdAdaInterface class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! prefix ^ prefix ! ! !ChdAdaInterface methodsFor: 'platypus-generated-set-accessing'! setPrefix: aString self prefix: aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! prefix: aString prefix := aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPrefix: aString prefix := aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-with-context-accessing'! prefixUsingContext: aContext ^ self prefix ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! suffix ^ suffix ! ! !ChdAdaInterface methodsFor: 'platypus-generated-set-accessing'! setSuffix: aString self suffix: aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! suffix: aString suffix := aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSuffix: aString suffix := aString ! ! !ChdAdaInterface methodsFor: 'platypus-generated-with-context-accessing'! suffixUsingContext: aContext ^ self suffix ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! withIt ^ withIt ! ! !ChdAdaInterface methodsFor: 'platypus-generated-set-accessing'! setWithIt: aBoolean self withIt: aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! withIt: aBoolean withIt := aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-fast-set-accessing'! fastSetWithIt: aBoolean withIt := aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-with-context-accessing'! withItUsingContext: aContext ^ self withIt ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! useIt ^ useIt ! ! !ChdAdaInterface methodsFor: 'platypus-generated-set-accessing'! setUseIt: aBoolean self useIt: aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-accessing'! useIt: aBoolean useIt := aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUseIt: aBoolean useIt := aBoolean ! ! !ChdAdaInterface methodsFor: 'platypus-generated-with-context-accessing'! useItUsingContext: aContext ^ self useIt ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! fullNameUsingContext: aContext ^ self fullNameUsingContext: aContext receiver: self ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! fullNameUsingContext: aContext receiver: aReceiver ^ ChdAdaInterfacePathFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! fullName ^ self fullNameUsingContext: self class context ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! declarationUsingContext: aContext ^ self declarationUsingContext: aContext receiver: self ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! declarationUsingContext: aContext receiver: aReceiver ^ ChdAdaInterfaceDeclarationFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaInterface methodsFor: 'platypus-generated-deriving'! declaration ^ self declarationUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaInterfacePathFunction instanceVariableNames: 'i name ' classVariableNames: '' poolDictionaries: '' category: 'Chd-AdaInterfaceSchema'! !ChdAdaInterfacePathFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaInterfacePathFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaInterfacePathFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaInterfacePathFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_interface_path ( i : ada_interface ) : STRING; LOCAL name : STRING := i.prefix; END_LOCAL; IF EXISTS ( i.suffix ) THEN name := name + '.' + i.suffix; END_IF; RETURN ( name ); END_FUNCTION; ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-instance-creation'! i: aChdAdaInterface ^ self new i: aChdAdaInterface ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self i: (values at: 1) ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110975409! i: aChdAdaInterface i := aChdAdaInterface ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-accessing'! name: aString name := aString ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-accessing'! i ^ i ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !ChdAdaInterfacePathFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self name: (self i prefixUsingContext: self class context). " ---------- statements ----------" (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self i suffixUsingContext: self class context); yourself)) ifTrue: [ self name: ((self name pltPlus: '.') pltPlus: (self i suffixUsingContext: self class context)) ]. ^ self return: self name ! ! !ChdAdaInterfacePathFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdAdaInterfaceSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaInterfaceDeclarationFunction instanceVariableNames: 'int s name ' classVariableNames: '' poolDictionaries: '' category: 'Chd-AdaInterfaceSchema'! !ChdAdaInterfaceDeclarationFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaInterfaceDeclarationFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaInterfaceDeclarationFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaInterfaceDeclarationFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_interface_declaration ( int : ada_interface ) : STRING; LOCAL s : STRING := ''; name : STRING := ada_interface_path ( int ); END_LOCAL; IF int.with_it THEN s := s + 'with ' + name + ';\n'; END_IF; IF int.use_it THEN s := s + 'use ' + name + ';\n'; END_IF; RETURN ( s ); END_FUNCTION; ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-instance-creation'! int: aChdAdaInterface ^ self new int: aChdAdaInterface ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self int: (values at: 1) ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110977862! int: aChdAdaInterface int := aChdAdaInterface ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! name: aString1 name := aString1 ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! int ^ int ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-accessing'! name ^ name ! ! !ChdAdaInterfaceDeclarationFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: ''. self name: (ChdAdaInterfacePathFunction invokeFromValues: (OrderedCollection new add: self int; yourself)). " ---------- statements ----------" (self int withItUsingContext: self class context) ifTrue: [ self s: (((self s pltPlus: 'with ') pltPlus: self name) pltPlus: ';\n') ]. (self int useItUsingContext: self class context) ifTrue: [ self s: (((self s pltPlus: 'use ') pltPlus: self name) pltPlus: ';\n') ]. ^ self return: self s ! ! !ChdAdaInterfaceDeclarationFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdAdaInterfaceSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaInterfacesCodeFunction instanceVariableNames: 'fromPkg l found withSuffix withPrefixOnly cleaned inserted s ' classVariableNames: '' poolDictionaries: '' category: 'Chd-AdaInterfaceSchema'! !ChdAdaInterfacesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaInterfacesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaInterfacesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaInterfacesCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_interfaces_code ( from_pkg : ada_package; l : LIST OF ada_interface ) : STRING; LOCAL found : SET OF STRING := [ ]; with_suffix : LIST OF ada_interface := [ ]; with_prefix_only : LIST OF ada_interface := [ ]; cleaned : LIST OF ada_interface := [ ]; inserted : BOOLEAN; s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS curr FOR l [ no]; IF NOT EXISTS ( from_pkg ) OR ( upperize ( from_pkg.name ) <> upperize ( curr.prefix ) ) THEN IF NOT ( upperize ( curr.full_name ) IN found ) THEN found := found + upperize ( curr.full_name ); cleaned := cleaned + curr; END_IF; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; IF EXISTS ( curr.suffix ) THEN with_suffix := with_suffix + curr; ELSE with_prefix_only := with_prefix_only + curr; END_IF; END_ALIAS; END_REPEAT; cleaned := [ ]; REPEAT no := LOINDEX ( with_prefix_only ) TO HIINDEX ( with_prefix_only ); cleaned := cleaned + with_prefix_only [ no]; END_REPEAT; REPEAT no := LOINDEX ( with_suffix ) TO HIINDEX ( with_suffix ); ALIAS curr FOR with_suffix [ no]; inserted := false; REPEAT noi := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curri FOR cleaned [ noi]; IF ( upperize ( curr.prefix ) = upperize ( curri.prefix ) ) THEN INSERT ( cleaned, curr, noi ); inserted := true; ESCAPE; END_IF; END_ALIAS; END_REPEAT; IF ( inserted = false ) THEN cleaned := cleaned + curr; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cleaned ) TO HIINDEX ( cleaned ); ALIAS curr FOR cleaned [ no]; s := s + curr.declaration + '\n'; END_ALIAS; END_REPEAT; RETURN ( s ); END_FUNCTION; ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-instance-creation'! fromPkg: aChdAdaPackage l: aListOfChdAdaInterface ^ self new fromPkg: aChdAdaPackage l: aListOfChdAdaInterface ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self fromPkg: (values at: 1). self l: (values at: 2) ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110982184! fromPkg: aChdAdaPackage l: aListOfChdAdaInterface self fromPkg: aChdAdaPackage. self l: aListOfChdAdaInterface ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! fromPkg: aChdAdaPackage fromPkg := aChdAdaPackage ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! l: aListOfChdAdaInterface l := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! found: aSetOfString found := aSetOfString ifNil: [ Set new ] ifNotNil: [ aSetOfString as: Set ] ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! withSuffix: aListOfChdAdaInterface withSuffix := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! withPrefixOnly: aListOfChdAdaInterface1 withPrefixOnly := aListOfChdAdaInterface1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface1 as: OrderedCollection ] ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! cleaned: aListOfChdAdaInterface2 cleaned := aListOfChdAdaInterface2 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface2 as: OrderedCollection ] ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! inserted: aBoolean inserted := aBoolean ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! fromPkg ^ fromPkg ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! found ^ found ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! withSuffix ^ withSuffix ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! withPrefixOnly ^ withPrefixOnly ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! cleaned ^ cleaned ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! inserted ^ inserted ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdAdaInterfacesCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self found: Array new. self withSuffix: Array new. self withPrefixOnly: Array new. self cleaned: Array new. self s: ''. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1248 | PlatypusCoreAliasStatement alias: (self l pltAt: no1248) statementsBlock: [ :curr2776 | ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self fromPkg; yourself)) not or: [ (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (self fromPkg nameUsingContext: self class context); yourself)) ~= (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr2776 prefixUsingContext: self class context); yourself)) ]) ifTrue: [ (self found includes: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr2776 fullNameUsingContext: self class context); yourself))) not ifTrue: [ self found: (self found pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr2776 fullNameUsingContext: self class context); yourself))). self cleaned: (self cleaned pltPlus: curr2776) ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). PlatypusCoreRepeatStatement repeat: [ :no587 | PlatypusCoreAliasStatement alias: (self cleaned pltAt: no587) statementsBlock: [ :curr2119 | (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (curr2119 suffixUsingContext: self class context); yourself)) ifTrue: [ self withSuffix: (self withSuffix pltPlus: curr2119) ] ifFalse: [ self withPrefixOnly: (self withPrefixOnly pltPlus: curr2119) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)). self cleaned: Array new. PlatypusCoreRepeatStatement repeat: [ :no1050 | self cleaned: (self cleaned pltPlus: (self withPrefixOnly pltAt: no1050)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self withPrefixOnly; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self withPrefixOnly; yourself)). PlatypusCoreRepeatStatement repeat: [ :no2279 | PlatypusCoreAliasStatement alias: (self withSuffix pltAt: no2279) statementsBlock: [ :curr3815 | self inserted: false. PlatypusCoreRepeatStatement repeat: [ :noi106 | PlatypusCoreAliasStatement alias: (self cleaned pltAt: noi106) statementsBlock: [ :curri1903 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr3815 prefixUsingContext: self class context); yourself)) = (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curri1903 prefixUsingContext: self class context); yourself)) ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self cleaned; add: curr3815; add: noi106; yourself). self inserted: true. PlatypusExpressEscapeStatementException signal ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)). self inserted = false ifTrue: [ self cleaned: (self cleaned pltPlus: curr3815) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self withSuffix; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self withSuffix; yourself)). PlatypusCoreRepeatStatement repeat: [ :no323 | PlatypusCoreAliasStatement alias: (self cleaned pltAt: no323) statementsBlock: [ :curr1855 | self s: ((self s pltPlus: (curr1855 declarationUsingContext: self class context)) pltPlus: '\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self cleaned; yourself)). ^ self return: self s ! ! !ChdAdaInterfacesCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdAdaInterfaceSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdXmlIoSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-XmlIoSchema'! !ChdXmlIoSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdXmlIoSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdXmlIoSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdXmlIoSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA xml_io; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM discriminated_type; USE FROM ada_interface; USE FROM package; FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF ada_class := all_ada_records ( ); alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF record := all_ada_records ( ); allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; END_SCHEMA; ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 0 ! ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#xml_architecture_io_ads_package_code #ChdXmlArchitectureIoAdsPackageCodeFunction) ! ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#xml_architecture_io_adb_package_code #ChdXmlArchitectureIoAdbPackageCodeFunction) ! ! !ChdXmlIoSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 2 ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdXmlArchitectureIoAdsPackageCodeFunction instanceVariableNames: 'test code pkgs allcls allrecs alldts interfaces ' classVariableNames: '' poolDictionaries: '' category: 'Chd-XmlIoSchema'! !ChdXmlArchitectureIoAdsPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION xml_architecture_io_ads_package_code : STRING; LOCAL test : STRING := ''; code : STRING := ''; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF ada_class := all_ada_records ( ); alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); interfaces : LIST OF ada_interface := [ ada_interface ( 'Sax', 'Readers', true, true ), ada_interface ( 'Networks', ?, true, true ), ada_interface ( 'Sax', 'Exceptions', true, true ), ada_interface ( 'Sax', 'Locators', true, true ), ada_interface ( 'Sax', 'Attributes', true, true ), ada_interface ( 'Unicode', 'CES', true, true ), ada_interface ( 'Unicode', ?, true, true ), ada_interface ( 'xml_generic_parsers', ?, true, true ), ada_interface ( 'Ada', 'Text_IO', true, true ), ada_interface ( 'Ada', 'Strings.Unbounded', true, true ), ada_interface ( 'Strings', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'call_framework_interface', ?, true, true ), ada_interface ( 'Debug', ?, true, true ) ]; END_LOCAL; code := source_licence + '\n'; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); interfaces := interfaces + ada_interface ( pkgs [ no].name, ?, true, true ); interfaces := interfaces + ada_package_interface ( pkgs [ no], true ); END_REPEAT; code := source_licence + ada_interfaces_code ( ?, interfaces ); code := code + 'package xml_architecture_io is\n\n' + '-- Attributes of the discriminated types\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + alldts [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class);\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); test := discriminated_type_xml_start_element_code ( alldts [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + alldts [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + '\nprocedure Initialize(obj : out ' + alldts [ no].name + '_io);'; END_REPEAT; code := code + '\n\n' + '-- Attributes of the parsed entities\n\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + allrecs [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + '\nprocedure Initialize(obj : out ' + allrecs [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); test := ada_entity_xml_start_element_code ( allrecs [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allrecs [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + allcls [ no].xml_io_record_code + '\n'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + '\nprocedure Initialize(obj : out ' + allcls [ no].name + '_io);'; END_REPEAT; code := code + '\n'; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); test := ada_entity_xml_start_element_code ( allcls [ no] ); IF ( test > '' ) THEN code := code + '\nprocedure Start_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class);\n'; END_IF; code := code + '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + allcls [ no].name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "");\n'; END_REPEAT; code := code + '\n\nend xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! test: aString test := aString ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString1 code := aString1 ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs: aListOfChdAdaPackage pkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allcls: aListOfChdAdaClass allcls := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allrecs: aListOfChdAdaClass1 allrecs := aListOfChdAdaClass1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass1 as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! alldts: aListOfChdDiscriminatedType alldts := aListOfChdDiscriminatedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDiscriminatedType as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! interfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! test ^ test ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs ^ pkgs ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allcls ^ allcls ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allrecs ^ allrecs ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! alldts ^ alldts ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-accessing'! interfaces ^ interfaces ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self test: ''. self code: ''. self pkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). self allcls: ChdAllAdaClassesFunction invoke. self allrecs: ChdAllAdaRecordsFunction invoke. self alldts: ChdAllAdaDiscriminatedTypesFunction invoke. self interfaces: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Sax'; add: 'Readers'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Networks'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Sax'; add: 'Exceptions'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Sax'; add: 'Locators'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Sax'; add: 'Attributes'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unicode'; add: 'CES'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unicode'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'xml_generic_parsers'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada'; add: 'Text_IO'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada'; add: 'Strings.Unbounded'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Strings'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unbounded_Strings'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada'; add: 'Numerics.Aux'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'call_framework_interface'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Debug'; add: nil; add: true; add: true; yourself); yourself); yourself)). " ---------- statements ----------" self code: ((((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3564 | self interfaces: (self interfaces pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((self pkgs pltAt: no3564) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself)). self interfaces: (self interfaces pltPlus: (ChdAdaPackageInterfaceFunction invokeFromValues: (OrderedCollection new add: (self pkgs pltAt: no3564); add: true; yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). self code: ((((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: (ChdAdaInterfacesCodeFunction invokeFromValues: (OrderedCollection new add: nil; add: self interfaces; yourself))). self code: ((self code pltPlus: 'package xml_architecture_io is\n\n') pltPlus: '-- Attributes of the discriminated types\n\n'). PlatypusCoreRepeatStatement repeat: [ :no3105 | self code: ((self code pltPlus: ((self alldts pltAt: no3105) xmlIoRecordCodeUsingContext: self class context)) pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)). self code: ((((((((self code pltPlus: '\nprocedure Start_Element(') pltPlus: '\n Handler: in out Xml_Generic_Parser;') pltPlus: '\n ref : in out unbounded_string;') pltPlus: '\n id : in out unbounded_string;') pltPlus: '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Local_Name : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Qname : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Atts : Sax.Attributes.Attributes''Class);\n'). PlatypusCoreRepeatStatement repeat: [ :no3252 | self test: (ChdDiscriminatedTypeXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self alldts pltAt: no3252); yourself)). self test > '' ifTrue: [ self code: (((((((((self code pltPlus: '\nprocedure Start_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self alldts pltAt: no3252) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class);\n') ]. self code: ((((((((self code pltPlus: '\nprocedure End_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self alldts pltAt: no3252) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "");\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)). PlatypusCoreRepeatStatement repeat: [ :no61 | self code: (((self code pltPlus: '\nprocedure Initialize(obj : out ') pltPlus: ((self alldts pltAt: no61) nameUsingContext: self class context)) pltPlus: '_io);') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)). self code: ((self code pltPlus: '\n\n') pltPlus: '-- Attributes of the parsed entities\n\n'). PlatypusCoreRepeatStatement repeat: [ :no2915 | self code: ((self code pltPlus: ((self allrecs pltAt: no2915) xmlIoRecordCodeUsingContext: self class context)) pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)). self code: (self code pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no2662 | self code: (((self code pltPlus: '\nprocedure Initialize(obj : out ') pltPlus: ((self allrecs pltAt: no2662) nameUsingContext: self class context)) pltPlus: '_io);') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)). self code: (self code pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3690 | self test: (ChdAdaEntityXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allrecs pltAt: no3690); yourself)). self test > '' ifTrue: [ self code: (((((((((self code pltPlus: '\nprocedure Start_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self allrecs pltAt: no3690) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class);\n') ]. self code: ((((((((self code pltPlus: '\nprocedure End_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self allrecs pltAt: no3690) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "");\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)). PlatypusCoreRepeatStatement repeat: [ :no3277 | self code: ((self code pltPlus: ((self allcls pltAt: no3277) xmlIoRecordCodeUsingContext: self class context)) pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)). self code: (self code pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3010 | self code: (((self code pltPlus: '\nprocedure Initialize(obj : out ') pltPlus: ((self allcls pltAt: no3010) nameUsingContext: self class context)) pltPlus: '_io);') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)). self code: (self code pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no4038 | self test: (ChdAdaEntityXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allcls pltAt: no4038); yourself)). self test > '' ifTrue: [ self code: (((((((((self code pltPlus: '\nprocedure Start_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self allcls pltAt: no4038) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class);\n') ]. self code: ((((((((self code pltPlus: '\nprocedure End_Element(\n') pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: ((self allcls pltAt: no4038) nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "");\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)). self code: (self code pltPlus: '\n\nend xml_architecture_io;\n'). ^ self return: self code ! ! !ChdXmlArchitectureIoAdsPackageCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdXmlIoSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdXmlArchitectureIoAdbPackageCodeFunction instanceVariableNames: 'code allcls allrecs allents strtab alldts ' classVariableNames: '' poolDictionaries: '' category: 'Chd-XmlIoSchema'! !ChdXmlArchitectureIoAdbPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION xml_architecture_io_adb_package_code : STRING; LOCAL code : STRING := ''; allcls : LIST OF ada_class := all_ada_classes ( ); allrecs : LIST OF record := all_ada_records ( ); allents : LIST OF ada_entity := allcls + allrecs; strtab : LIST OF STRING := [ ]; alldts : LIST OF discriminated_type := all_ada_discriminated_types ( ); END_LOCAL; code := source_licence + '\n'; code := code + 'package body xml_architecture_io is\n\n'; code := code + '\n'; code := code + '\nprocedure Start_Element(' + '\n Handler: in out Xml_Generic_Parser;' + '\n ref : in out unbounded_string;' + '\n id : in out unbounded_string;' + '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";' + '\n Local_Name : Unicode.CES.Byte_Sequence := "";' + '\n Qname : Unicode.CES.Byte_Sequence := "";' + '\n Atts : Sax.Attributes.Attributes''Class) is' + '\nbegin' + '\n if Get_Length (Atts) > 0 then' + '\n if (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ LOINDEX ( allents ) ].name ) + '")'; REPEAT no := LOINDEX ( allents ) + 1 TO HIINDEX ( allents ); code := code + '\n\t\t\t OR (To_String (To_Lower (Qname)) = "' + Lowerize ( allents [ no].name ) + '")'; END_REPEAT; code := code + ' then' + '\n for J in 0 .. Get_Length (Atts) - 1 loop' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then' + '\n id := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then' + '\n ref := To_Unbounded_String (Get_Value (Atts, J));' + '\n end if;' + '\n end loop;' + '\n end if;' + '\n end if;' + '\nend Start_Element;\n\n'; REPEAT no := LOINDEX ( alldts ) TO HIINDEX ( alldts ); code := code + discriminated_type_xml_io_record_initialize_code ( alldts [ no] ); code := code + discriminated_type_xml_start_element_code ( alldts [ no] ); code := code + discriminated_type_xml_end_element_code ( alldts [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allrecs ) TO HIINDEX ( allrecs ); code := code + ada_entity_xml_io_record_initialize_code ( allrecs [ no] ); code := code + ada_entity_xml_start_element_code ( allrecs [ no] ); code := code + ada_entity_xml_end_element_code ( allrecs [ no] ); END_REPEAT; REPEAT no := LOINDEX ( allcls ) TO HIINDEX ( allcls ); code := code + ada_entity_xml_io_record_initialize_code ( allcls [ no] ); code := code + ada_entity_xml_start_element_code ( allcls [ no] ); code := code + ada_entity_xml_end_element_code ( allcls [ no] ); END_REPEAT; code := code + 'end xml_architecture_io;\n'; RETURN ( code ); END_FUNCTION; ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allcls: aListOfChdAdaClass allcls := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allrecs: aListOfChdRecord allrecs := aListOfChdRecord ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdRecord as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allents: aListOfChdAdaEntity allents := aListOfChdAdaEntity ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaEntity as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! strtab: aListOfString strtab := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! alldts: aListOfChdDiscriminatedType alldts := aListOfChdDiscriminatedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDiscriminatedType as: OrderedCollection ] ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allcls ^ allcls ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allrecs ^ allrecs ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! allents ^ allents ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! strtab ^ strtab ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-accessing'! alldts ^ alldts ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self allcls: ChdAllAdaClassesFunction invoke. self allrecs: ChdAllAdaRecordsFunction invoke. self allents: (self allcls pltPlus: self allrecs). self strtab: Array new. self alldts: ChdAllAdaDiscriminatedTypesFunction invoke. " ---------- statements ----------" self code: ((((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '\n'). self code: (self code pltPlus: 'package body xml_architecture_io is\n\n'). self code: (self code pltPlus: '\n'). self code: (((((((((((((self code pltPlus: '\nprocedure Start_Element(') pltPlus: '\n Handler: in out Xml_Generic_Parser;') pltPlus: '\n ref : in out unbounded_string;') pltPlus: '\n id : in out unbounded_string;') pltPlus: '\n Namespace_Uri : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Local_Name : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Qname : Unicode.CES.Byte_Sequence := "";') pltPlus: '\n Atts : Sax.Attributes.Attributes''Class) is') pltPlus: '\nbegin') pltPlus: '\n if Get_Length (Atts) > 0 then') pltPlus: '\n if (To_String (To_Lower (Qname)) = "') pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((self allents pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allents; yourself))) nameUsingContext: self class context); yourself))) pltPlus: '")'). PlatypusCoreRepeatStatement repeat: [ :no1837 | self code: (((self code pltPlus: '\n\t\t\t OR (To_String (To_Lower (Qname)) = "') pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: ((self allents pltAt: no1837) nameUsingContext: self class context); yourself))) pltPlus: '")') ] from: ((PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allents; yourself)) pltPlus: 1) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allents; yourself)). self code: ((((((((((((self code pltPlus: ' then') pltPlus: '\n for J in 0 .. Get_Length (Atts) - 1 loop') pltPlus: '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "id" then') pltPlus: '\n id := To_Unbounded_String (Get_Value (Atts, J));') pltPlus: '\n end if;') pltPlus: '\n if To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then') pltPlus: '\n ref := To_Unbounded_String (Get_Value (Atts, J));') pltPlus: '\n end if;') pltPlus: '\n end loop;') pltPlus: '\n end if;') pltPlus: '\n end if;') pltPlus: '\nend Start_Element;\n\n'). PlatypusCoreRepeatStatement repeat: [ :no3897 | self code: (self code pltPlus: (ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: (self alldts pltAt: no3897); yourself))). self code: (self code pltPlus: (ChdDiscriminatedTypeXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self alldts pltAt: no3897); yourself))). self code: (self code pltPlus: (ChdDiscriminatedTypeXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: (self alldts pltAt: no3897); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self alldts; yourself)). PlatypusCoreRepeatStatement repeat: [ :no613 | self code: (self code pltPlus: (ChdAdaEntityXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: (self allrecs pltAt: no613); yourself))). self code: (self code pltPlus: (ChdAdaEntityXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allrecs pltAt: no613); yourself))). self code: (self code pltPlus: (ChdAdaEntityXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allrecs pltAt: no613); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allrecs; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1384 | self code: (self code pltPlus: (ChdAdaEntityXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: (self allcls pltAt: no1384); yourself))). self code: (self code pltPlus: (ChdAdaEntityXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allcls pltAt: no1384); yourself))). self code: (self code pltPlus: (ChdAdaEntityXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: (self allcls pltAt: no1384); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allcls; yourself)). self code: (self code pltPlus: 'end xml_architecture_io;\n'). ^ self return: self code ! ! !ChdXmlArchitectureIoAdbPackageCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdXmlIoSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdCheddarDomainsSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarDomainsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarDomainsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarDomainsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarDomainsSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA cheddar_domains; USE FROM express2cheddar_facade; USE FROM ada_interface; USE FROM platypus_dictionary_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; CONSTANT std_io_interfaces : LIST OF ada_interface := [ ada_interface ( 'standards_io', ?, true, true ) ]; END_CONSTANT; ENTITY pragma_convention; convention : STRING; END_ENTITY; ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := basic_ada_domain ( SELF.ref ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := SELF; accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF is_of_generated_concept_kind ( t ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF EXISTS ( a.max_idx ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ads THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF EXISTS ( rt.lower_constant ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF EXISTS ( rt.upper_constant ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF domain.refed_by_pointer THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION; END_SCHEMA; ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#pragma_convention #ChdPragmaConvention) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#ada_type #ChdAdaType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#cheddar_defined_type #ChdCheddarDefinedType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#constrained_array_type #ChdConstrainedArrayType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#cheddar_entity_definition #ChdCheddarEntityDefinition) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#unmapped_type_reference #ChdUnmappedTypeReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#unmapped_entity_definition #ChdUnmappedEntityDefinition) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#basic_ada_type_getter #ChdBasicAdaTypeGetter) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#ada_primitive_type #ChdAdaPrimitiveType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#cheddar_primitive_type #ChdCheddarPrimitiveType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#cheddar_law_type #ChdCheddarLawType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#cheddar_priority_range #ChdCheddarPriorityRange) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#ada_natural_type #ChdAdaNaturalType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#ada_unbounded_string_type #ChdAdaUnboundedStringType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#cheddar_xml_id_type #ChdCheddarXmlIdType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#ada_boolean_type #ChdAdaBooleanType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#ada_real_type #ChdAdaRealType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition18 ^ #(#ada_double_type #ChdAdaDoubleType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition19 ^ #(#ada_integer_type #ChdAdaIntegerType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition20 ^ #(#ada_named_type_reference #ChdAdaNamedTypeReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition21 ^ #(#ada_record_reference #ChdAdaRecordReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition22 ^ #(#ada_class_reference #ChdAdaClassReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition23 ^ #(#ada_primitive_class_reference #ChdAdaPrimitiveClassReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition24 ^ #(#ada_attribute_reference #ChdAdaAttributeReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition25 ^ #(#ada_array_type #ChdAdaArrayType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition26 ^ #(#ada_list_type #ChdAdaListType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition27 ^ #(#ada_set_type #ChdAdaSetType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition28 ^ #(#ada_bag_type #ChdAdaBagType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition29 ^ #(#ada_enumeration #ChdAdaEnumeration) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition30 ^ #(#basic_ada_type_value_format #ChdBasicAdaTypeValueFormat) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition31 ^ #(#range_type #ChdRangeType) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition32 ^ #(#explicit_type_reference #ChdExplicitTypeReference) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition33 ^ #(#in_scope_attribute #ChdInScopeAttribute) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 33 ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#dependencies_of #ChdDependenciesOfFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#constrained_array_type_ads_code #ChdConstrainedArrayTypeAdsCodeFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#cheddar_defined_type_interfaces_list #ChdCheddarDefinedTypeInterfacesListFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#basic_ada_domain #ChdBasicAdaDomainFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#enumeration_ads_code #ChdEnumerationAdsCodeFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#basic_ada_expression_value_string #ChdBasicAdaExpressionValueStringFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#enumeration_adb_code #ChdEnumerationAdbCodeFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#range_type_ads_code #ChdRangeTypeAdsCodeFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#in_scope_attribute_init_code #ChdInScopeAttributeInitCodeFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#domain_interfaces_list #ChdDomainInterfacesListFunction) ! ! !ChdCheddarDomainsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 10 ! ! ChdCoreEntity subclass: #ChdPragmaConvention instanceVariableNames: 'convention' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdPragmaConvention class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPragmaConvention class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPragmaConvention class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPragmaConvention commentStamp: 'platypus comment' prior: 0! ENTITY pragma_convention; convention : STRING; END_ENTITY; ! !ChdPragmaConvention methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. convention := '' ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-classifying'! isChdPragmaConvention ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdPragmaConvention ^ false ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPragmaConvention: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptPragmaConvention: e "my subclasses have to redefine it" ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-copying'! pragmaConventionCopyTo: another another fastSetConvention: self convention ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self pragmaConventionCopyTo: another ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self pragmaConventionCopyTo: another ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! pragmaConventionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setConvention: valuesloc removeFirst. ^ valuesloc ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! pragmaConventionToValues: values values add: self convention. ^ values ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self pragmaConventionToValues: (super toValues: values) ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self pragmaConventionFromValues: (super fromValues: values) ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self pragmaConventionFromValues: values ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self pragmaConventionToValues: values ! ! !ChdPragmaConvention class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdPragmaConvention class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-accessing'! convention ^ convention ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-set-accessing'! setConvention: aString self convention: aString ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-accessing'! convention: aString convention := aString ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-fast-set-accessing'! fastSetConvention: aString convention := aString ! ! !ChdPragmaConvention methodsFor: 'platypus-generated-with-context-accessing'! conventionUsingContext: aContext ^ self convention ! ! PltDefinedType subclass: #ChdAdaType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaType commentStamp: 'platypus comment' prior: 0! ENTITY ada_type SUBTYPE OF ( defined_type ); DERIVE ada_ident : STRING := name; ada_ref_ident : STRING := name; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := dependencies_of ( SELF.owner, SELF.domain.handled ); refed_by_pointer : BOOLEAN := false; END_ENTITY; ! !ChdAdaType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaType methodsFor: 'platypus-generated-classifying'! isChdAdaType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaType ^ false ! ! !ChdAdaType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaType: e "my subclasses have to redefine it" ! ! !ChdAdaType methodsFor: 'platypus-generated-copying'! adaTypeCopyTo: another ! ! !ChdAdaType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaTypeCopyTo: another ! ! !ChdAdaType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaTypeCopyTo: another ! ! !ChdAdaType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! adaTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! adaTypeToValues: values ^ values ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaTypeToValues: (super toValues: values) ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaTypeFromValues: (super fromValues: values) ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaTypeFromValues: values ! ! !ChdAdaType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaTypeToValues: values ! ! !ChdAdaType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext ^ self dependenciesUsingContext: aContext receiver: self ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext receiver: aReceiver ^ ChdDependenciesOfFunction invokeFromValues: (OrderedCollection new add: (aReceiver ownerUsingContext: self class context); add: ((aReceiver domainUsingContext: self class context) handledUsingContext: self class context); yourself) ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! dependencies ^ self dependenciesUsingContext: self class context ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdAdaType methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! ChdAdaType subclass: #ChdCheddarDefinedType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarDefinedType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarDefinedType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarDefinedType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarDefinedType commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_defined_type SUBTYPE OF ( ada_type ); DERIVE ads_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, true ); adb_interface_list : LIST OF ada_interface := cheddar_defined_type_interfaces_list ( SELF, false ); SELF\defined_type.accepted : entity_instance := SELF.accept_cheddar_defined_type; END_ENTITY; ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-classifying'! isChdCheddarDefinedType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarDefinedType ^ false ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarDefinedType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarDefinedType: e "my subclasses have to redefine it" ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-copying'! cheddarDefinedTypeCopyTo: another ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarDefinedTypeCopyTo: another ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarDefinedTypeCopyTo: another ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! cheddarDefinedTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! cheddarDefinedTypeToValues: values ^ values ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarDefinedTypeToValues: (super toValues: values) ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarDefinedTypeFromValues: (super fromValues: values) ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarDefinedTypeFromValues: values ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarDefinedTypeToValues: values ! ! !ChdCheddarDefinedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarDefinedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adsInterfaceListUsingContext: aContext ^ self adsInterfaceListUsingContext: aContext receiver: self ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adsInterfaceListUsingContext: aContext receiver: aReceiver ^ ChdCheddarDefinedTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adsInterfaceList ^ self adsInterfaceListUsingContext: self class context ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adbInterfaceListUsingContext: aContext ^ self adbInterfaceListUsingContext: aContext receiver: self ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adbInterfaceListUsingContext: aContext receiver: aReceiver ^ ChdCheddarDefinedTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself) ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! adbInterfaceList ^ self adbInterfaceListUsingContext: self class context ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptCheddarDefinedTypeUsingContext: aContext ! ! !ChdCheddarDefinedType methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! ChdCheddarDefinedType subclass: #ChdConstrainedArrayType instanceVariableNames: 'maxIdx interfaces minIdx' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdConstrainedArrayType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdConstrainedArrayType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdConstrainedArrayType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdConstrainedArrayType commentStamp: 'platypus comment' prior: 0! ENTITY constrained_array_type SUBTYPE OF ( cheddar_defined_type ); min_idx : STRING; max_idx : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE adb_interfaces_list : LIST OF ada_interface := [ ]; ads_interfaces_list : LIST OF ada_interface := interfaces; adb_code : STRING := ''; ads_code : STRING := constrained_array_type_ads_code ( SELF ); END_ENTITY; ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. minIdx := ''. maxIdx := nil. interfaces := OrderedCollection new ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-classifying'! isChdConstrainedArrayType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdConstrainedArrayType ^ false ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptConstrainedArrayType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptConstrainedArrayType: e "my subclasses have to redefine it" ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-copying'! constrainedArrayTypeCopyTo: another another fastSetMinIdx: self minIdx. another fastSetMaxIdx: self maxIdx. another fastSetInterfaces: self interfaces ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self constrainedArrayTypeCopyTo: another ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self constrainedArrayTypeCopyTo: another ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! constrainedArrayTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setMinIdx: valuesloc removeFirst. self setMaxIdx: valuesloc removeFirst. self setInterfaces: valuesloc removeFirst. ^ valuesloc ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! constrainedArrayTypeToValues: values values add: self minIdx. values add: self maxIdx. values add: self interfaces. ^ values ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self constrainedArrayTypeToValues: (super toValues: values) ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self constrainedArrayTypeFromValues: (super fromValues: values) ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self constrainedArrayTypeFromValues: values ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self constrainedArrayTypeToValues: values ! ! !ChdConstrainedArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdConstrainedArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! minIdx ^ minIdx ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-set-accessing'! setMinIdx: aString self minIdx: aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! minIdx: aString minIdx := aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMinIdx: aString minIdx := aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-with-context-accessing'! minIdxUsingContext: aContext ^ self minIdx ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! maxIdx ^ maxIdx ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-set-accessing'! setMaxIdx: aString self maxIdx: aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! maxIdx: aString maxIdx := aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetMaxIdx: aString maxIdx := aString ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-with-context-accessing'! maxIdxUsingContext: aContext ^ self maxIdx ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! interfaces ^ interfaces ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-set-accessing'! setInterfaces: aListOfChdAdaInterface self interfaces: aListOfChdAdaInterface ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-accessing'! interfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInterfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-with-context-accessing'! interfacesUsingContext: aContext ^ self interfaces ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ aReceiver interfaces ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdConstrainedArrayTypeAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdConstrainedArrayType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! PltEntityDefinition subclass: #ChdCheddarEntityDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarEntityDefinition commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_entity_definition SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-classifying'! isChdCheddarEntityDefinition ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarEntityDefinition ^ false ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarEntityDefinition: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarEntityDefinition: e "my subclasses have to redefine it" ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-copying'! cheddarEntityDefinitionCopyTo: another ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarEntityDefinitionCopyTo: another ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarEntityDefinitionCopyTo: another ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! cheddarEntityDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! cheddarEntityDefinitionToValues: values ^ values ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarEntityDefinitionToValues: (super toValues: values) ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarEntityDefinitionFromValues: (super fromValues: values) ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarEntityDefinitionFromValues: values ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarEntityDefinitionToValues: values ! ! !ChdCheddarEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! ChdCoreEntity subclass: #ChdUnmappedTypeReference instanceVariableNames: 'ref' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdUnmappedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdUnmappedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdUnmappedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdUnmappedTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY unmapped_type_reference; ref : entity_instance; DERIVE ads_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).ads_interfaces_list; adb_interfaces_list : LIST OF ada_interface := basic_ada_domain ( SELF.ref ).adb_interfaces_list; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := basic_ada_domain ( SELF.ref ).init_value; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ref := nil ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-classifying'! isChdUnmappedTypeReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdUnmappedTypeReference ^ false ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUnmappedTypeReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptUnmappedTypeReference: e "my subclasses have to redefine it" ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-copying'! unmappedTypeReferenceCopyTo: another another fastSetRef: self ref ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self unmappedTypeReferenceCopyTo: another ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self unmappedTypeReferenceCopyTo: another ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! unmappedTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setRef: valuesloc removeFirst. ^ valuesloc ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! unmappedTypeReferenceToValues: values values add: self ref. ^ values ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self unmappedTypeReferenceToValues: (super toValues: values) ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self unmappedTypeReferenceFromValues: (super fromValues: values) ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self unmappedTypeReferenceFromValues: values ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self unmappedTypeReferenceToValues: values ! ! !ChdUnmappedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdUnmappedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-accessing'! ref ^ ref ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-set-accessing'! setRef: aChdEntityInstance self ref: aChdEntityInstance ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-accessing'! ref: aChdEntityInstance ref := aChdEntityInstance ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRef: aChdEntityInstance ref := aChdEntityInstance ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-with-context-accessing'! refUsingContext: aContext ^ self ref ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself)) adsInterfacesListUsingContext: aContext ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself)) adbInterfacesListUsingContext: aContext ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself)) initValueUsingContext: aContext ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdUnmappedTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! ChdCoreEntity subclass: #ChdUnmappedEntityDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdUnmappedEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdUnmappedEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdUnmappedEntityDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdUnmappedEntityDefinition commentStamp: 'platypus comment' prior: 0! ENTITY unmapped_entity_definition; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.name; ada_ref_ident : STRING := SELF.name; init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; END_ENTITY; ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-classifying'! isChdUnmappedEntityDefinition ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdUnmappedEntityDefinition ^ false ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptUnmappedEntityDefinition: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptUnmappedEntityDefinition: e "my subclasses have to redefine it" ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-copying'! unmappedEntityDefinitionCopyTo: another ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self unmappedEntityDefinitionCopyTo: another ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self unmappedEntityDefinitionCopyTo: another ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! unmappedEntityDefinitionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! unmappedEntityDefinitionToValues: values ^ values ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self unmappedEntityDefinitionToValues: (super toValues: values) ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self unmappedEntityDefinitionFromValues: (super fromValues: values) ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self unmappedEntityDefinitionFromValues: values ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self unmappedEntityDefinitionToValues: values ! ! !ChdUnmappedEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdUnmappedEntityDefinition class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdUnmappedEntityDefinition methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! ChdCoreEntity subclass: #ChdBasicAdaTypeGetter instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdBasicAdaTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdBasicAdaTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdBasicAdaTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdBasicAdaTypeGetter commentStamp: 'platypus comment' prior: 0! ENTITY basic_ada_type_getter; DERIVE accept_string_type : dictionary_instance := ( ada_unbounded_string_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_integer_type : dictionary_instance := ( ada_natural_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_real_type : dictionary_instance := ( ada_double_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_boolean_type : dictionary_instance := ( ada_boolean_type ( ) || ada_primitive_type ( ) || dictionary_instance ( ) ); accept_enumeration_type : dictionary_instance := SELF\enumeration_type; accept_ada_enumeration : dictionary_instance := SELF; accept_attribute_reference : dictionary_instance := ( ada_attribute_reference ( ) || ada_named_type_reference ( ) || SELF\attribute_reference ); accept_defined_type_reference : dictionary_instance := basic_ada_domain ( SELF\defined_type_reference.ref ); accept_defined_type : dictionary_instance := unmapped_type_reference ( SELF.domain ) || SELF; accept_ada_range : dictionary_instance := SELF; accept_ada_class_reference : dictionary_instance := SELF; accept_ada_record_reference : dictionary_instance := SELF; accept_entity_definition_reference : dictionary_instance := ( unmapped_type_reference ( SELF.ref ) || SELF\entity_definition_reference ); accept_entity_definition : dictionary_instance := ( unmapped_entity_definition ( ) || SELF\entity_definition ); accept_cheddar_defined_type : dictionary_instance := SELF; accept_list_type : dictionary_instance := ( ada_list_type ( ) || SELF\list_type ); accept_array_type : dictionary_instance := ( ada_array_type ( ) || SELF\array_type ); accept_set_type : dictionary_instance := ( ada_set_type ( ) || SELF\set_type ); accept_bag_type : dictionary_instance := ( ada_bag_type ( ) || SELF\bag_type ); accept_explicit_type_reference : dictionary_instance := SELF; END_ENTITY; ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-classifying'! isChdBasicAdaTypeGetter ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdBasicAdaTypeGetter ^ false ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBasicAdaTypeGetter: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptBasicAdaTypeGetter: e "my subclasses have to redefine it" ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-copying'! basicAdaTypeGetterCopyTo: another ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self basicAdaTypeGetterCopyTo: another ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self basicAdaTypeGetterCopyTo: another ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! basicAdaTypeGetterFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! basicAdaTypeGetterToValues: values ^ values ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self basicAdaTypeGetterToValues: (super toValues: values) ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self basicAdaTypeGetterFromValues: (super fromValues: values) ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self basicAdaTypeGetterFromValues: values ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self basicAdaTypeGetterToValues: values ! ! !ChdBasicAdaTypeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdBasicAdaTypeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext ^ self acceptStringTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaUnboundedStringType new; add: ChdAdaPrimitiveType new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringType ^ self acceptStringTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext ^ self acceptIntegerTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaNaturalType new; add: ChdAdaPrimitiveType new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerType ^ self acceptIntegerTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext ^ self acceptRealTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaDoubleType new; add: ChdAdaPrimitiveType new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealType ^ self acceptRealTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext ^ self acceptBooleanTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaBooleanType new; add: ChdAdaPrimitiveType new; yourself)) pltAsObject; add: PltDictionaryInstance new; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanType ^ self acceptBooleanTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext ^ self acceptEnumerationTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext receiver: aReceiver ^ (aReceiver asPlatypusComplexInstance \ #PltEnumerationType) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationType ^ self acceptEnumerationTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaEnumerationUsingContext: aContext ^ self acceptAdaEnumerationUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaEnumerationUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaEnumeration ^ self acceptAdaEnumerationUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAttributeReferenceUsingContext: aContext ^ self acceptAttributeReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAttributeReferenceUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaAttributeReference new; add: ChdAdaNamedTypeReference new; yourself)) pltAsObject; add: (aReceiver asPlatypusComplexInstance \ #PltAttributeReference) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAttributeReference ^ self acceptAttributeReferenceUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext ^ self acceptDefinedTypeReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext receiver: aReceiver ^ ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: ((aReceiver asPlatypusComplexInstance \ #PltDefinedTypeReference) pltAsObject refUsingContext: self class context); yourself) ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReference ^ self acceptDefinedTypeReferenceUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext ^ self acceptDefinedTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdUnmappedTypeReference new unmappedTypeReferenceFromValues: (OrderedCollection new add: (aReceiver domainUsingContext: self class context); yourself); yourself); add: aReceiver; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedType ^ self acceptDefinedTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRangeUsingContext: aContext ^ self acceptAdaRangeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRangeUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRange ^ self acceptAdaRangeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaClassReferenceUsingContext: aContext ^ self acceptAdaClassReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaClassReferenceUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaClassReference ^ self acceptAdaClassReferenceUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRecordReferenceUsingContext: aContext ^ self acceptAdaRecordReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRecordReferenceUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptAdaRecordReference ^ self acceptAdaRecordReferenceUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext ^ self acceptEntityDefinitionReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (ChdUnmappedTypeReference new unmappedTypeReferenceFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself); yourself); add: (aReceiver asPlatypusComplexInstance \ #PltEntityDefinitionReference) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReference ^ self acceptEntityDefinitionReferenceUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext ^ self acceptEntityDefinitionUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdUnmappedEntityDefinition new; add: (aReceiver asPlatypusComplexInstance \ #PltEntityDefinition) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinition ^ self acceptEntityDefinitionUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptCheddarDefinedTypeUsingContext: aContext ^ self acceptCheddarDefinedTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptCheddarDefinedTypeUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptCheddarDefinedType ^ self acceptCheddarDefinedTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext ^ self acceptListTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaListType new; add: (aReceiver asPlatypusComplexInstance \ #PltListType) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListType ^ self acceptListTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext ^ self acceptArrayTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaArrayType new; add: (aReceiver asPlatypusComplexInstance \ #PltArrayType) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayType ^ self acceptArrayTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext ^ self acceptSetTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaSetType new; add: (aReceiver asPlatypusComplexInstance \ #PltSetType) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetType ^ self acceptSetTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext ^ self acceptBagTypeUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaBagType new; add: (aReceiver asPlatypusComplexInstance \ #PltBagType) pltAsObject; yourself)) pltAsObject ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagType ^ self acceptBagTypeUsingContext: self class context ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitTypeReferenceUsingContext: aContext ^ self acceptExplicitTypeReferenceUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitTypeReferenceUsingContext: aContext receiver: aReceiver ^ aReceiver ! ! !ChdBasicAdaTypeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitTypeReference ^ self acceptExplicitTypeReferenceUsingContext: self class context ! ! PltEntityDefinition subclass: #ChdAdaPrimitiveType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPrimitiveType commentStamp: 'platypus comment' prior: 0! ENTITY ada_primitive_type SUBTYPE OF ( entity_definition ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; END_ENTITY; ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-classifying'! isChdAdaPrimitiveType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaPrimitiveType ^ false ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaPrimitiveType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaPrimitiveType: e "my subclasses have to redefine it" ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-copying'! adaPrimitiveTypeCopyTo: another ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaPrimitiveTypeCopyTo: another ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaPrimitiveTypeCopyTo: another ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! adaPrimitiveTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! adaPrimitiveTypeToValues: values ^ values ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaPrimitiveTypeToValues: (super toValues: values) ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaPrimitiveTypeFromValues: (super fromValues: values) ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaPrimitiveTypeFromValues: values ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaPrimitiveTypeToValues: values ! ! !ChdAdaPrimitiveType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaPrimitiveType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdAdaPrimitiveType methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdCheddarPrimitiveType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarPrimitiveType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarPrimitiveType commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_primitive_type SUBTYPE OF ( ada_primitive_type ); END_ENTITY; ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-classifying'! isChdCheddarPrimitiveType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarPrimitiveType ^ false ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarPrimitiveType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarPrimitiveType: e "my subclasses have to redefine it" ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-copying'! cheddarPrimitiveTypeCopyTo: another ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarPrimitiveTypeCopyTo: another ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarPrimitiveTypeCopyTo: another ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! cheddarPrimitiveTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! cheddarPrimitiveTypeToValues: values ^ values ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarPrimitiveTypeToValues: (super toValues: values) ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarPrimitiveTypeFromValues: (super fromValues: values) ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarPrimitiveTypeFromValues: values ! ! !ChdCheddarPrimitiveType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarPrimitiveTypeToValues: values ! ! !ChdCheddarPrimitiveType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarPrimitiveType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! ChdCheddarPrimitiveType subclass: #ChdCheddarLawType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarLawType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarLawType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarLawType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarLawType commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_law_type SUBTYPE OF ( cheddar_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Expression', ?, true, true ), ada_interface ( 'Expression', ?, false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'law_type'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ! !ChdCheddarLawType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-classifying'! isChdCheddarLawType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarLawType ^ false ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarLawType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarLawType: e "my subclasses have to redefine it" ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-copying'! cheddarLawTypeCopyTo: another ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarLawTypeCopyTo: another ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarLawTypeCopyTo: another ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! cheddarLawTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! cheddarLawTypeToValues: values ^ values ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarLawTypeToValues: (super toValues: values) ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarLawTypeFromValues: (super fromValues: values) ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarLawTypeFromValues: values ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarLawTypeToValues: values ! ! !ChdCheddarLawType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarLawType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Expression'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Expression'; add: nil; add: false; add: true; yourself); yourself); yourself) ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'law_type' ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdCheddarLawType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! ChdCheddarDefinedType subclass: #ChdCheddarPriorityRange instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarPriorityRange class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarPriorityRange class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarPriorityRange class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarPriorityRange commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_priority_range SUBTYPE OF ( cheddar_defined_type ); DERIVE ads_code : STRING := ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; '; adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'Framework_Config', 'Priority_Io', false, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ]; SELF\ada_type.ada_ident : STRING := 'Priority_Range'; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := '0'; END_ENTITY; ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-classifying'! isChdCheddarPriorityRange ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarPriorityRange ^ false ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarPriorityRange: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarPriorityRange: e "my subclasses have to redefine it" ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-copying'! cheddarPriorityRangeCopyTo: another ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarPriorityRangeCopyTo: another ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarPriorityRangeCopyTo: another ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! cheddarPriorityRangeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! cheddarPriorityRangeToValues: values ^ values ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarPriorityRangeToValues: (super toValues: values) ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarPriorityRangeFromValues: (super fromValues: values) ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarPriorityRangeFromValues: values ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarPriorityRangeToValues: values ! ! !ChdCheddarPriorityRange class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarPriorityRange class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ' -- Definition of priority range. We choose the most current value : -- 256 priority levels (from 0 to 255) -- Zero is the lowest priority level Type Priority_Range is new Natural range 0 .. 255; package Priority_Io is new Text_IO.Integer_IO (Priority_Range); use Priority_Io; ' ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Framework_Config'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Framework_Config'; add: 'Priority_Io'; add: false; add: true; yourself); yourself); yourself) ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Priority_Range' ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ '0' ! ! !ChdCheddarPriorityRange methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaNaturalType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaNaturalType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaNaturalType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaNaturalType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaNaturalType commentStamp: 'platypus comment' prior: 0! ENTITY ada_natural_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'natural_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Natural'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.natural_io.'; END_ENTITY; ! !ChdAdaNaturalType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-classifying'! isChdAdaNaturalType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaNaturalType ^ false ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaNaturalType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaNaturalType: e "my subclasses have to redefine it" ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-copying'! adaNaturalTypeCopyTo: another ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaNaturalTypeCopyTo: another ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaNaturalTypeCopyTo: another ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! adaNaturalTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! adaNaturalTypeToValues: values ^ values ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaNaturalTypeToValues: (super toValues: values) ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaNaturalTypeFromValues: (super fromValues: values) ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaNaturalTypeFromValues: values ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaNaturalTypeToValues: values ! ! !ChdAdaNaturalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaNaturalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: 'natural_io'; add: false; add: true; yourself); yourself); yourself)) ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Natural' ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ '0' ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ 'standards_io.natural_io.' ! ! !ChdAdaNaturalType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaUnboundedStringType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaUnboundedStringType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaUnboundedStringType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaUnboundedStringType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaUnboundedStringType commentStamp: 'platypus comment' prior: 0! ENTITY ada_unbounded_string_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Unbounded_String'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'empty_string'; END_ENTITY; ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-classifying'! isChdAdaUnboundedStringType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaUnboundedStringType ^ false ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaUnboundedStringType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaUnboundedStringType: e "my subclasses have to redefine it" ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-copying'! adaUnboundedStringTypeCopyTo: another ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaUnboundedStringTypeCopyTo: another ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaUnboundedStringTypeCopyTo: another ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! adaUnboundedStringTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! adaUnboundedStringTypeToValues: values ^ values ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaUnboundedStringTypeToValues: (super toValues: values) ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaUnboundedStringTypeFromValues: (super fromValues: values) ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaUnboundedStringTypeFromValues: values ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaUnboundedStringTypeToValues: values ! ! !ChdAdaUnboundedStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaUnboundedStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'ada.strings'; add: 'unbounded.text_io'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Text_io'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unbounded_Strings'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Strings'; add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Unbounded_Strings'; add: nil; add: true; add: false; yourself); yourself); yourself) ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Text_io'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Unbounded_String' ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ 'empty_string' ! ! !ChdAdaUnboundedStringType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! PltStringType subclass: #ChdCheddarXmlIdType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarXmlIdType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarXmlIdType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarXmlIdType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarXmlIdType commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_xml_id_type SUBTYPE OF ( string_type ); DERIVE SELF\ada_unbounded_string_type.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'ada.strings', 'unbounded.text_io', true, true ), ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'Unbounded_Strings', ?, true, true ), ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'call_framework', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; ads_code : STRING := ''; adb_code : STRING := ''; put_prefix : STRING := ''; refed_by_pointer : BOOLEAN := false; SELF\ada_unbounded_string_type.init_value : STRING := 'generate_id'; END_ENTITY; ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-classifying'! isChdCheddarXmlIdType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdCheddarXmlIdType ^ false ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarXmlIdType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptCheddarXmlIdType: e "my subclasses have to redefine it" ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-copying'! cheddarXmlIdTypeCopyTo: another ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarXmlIdTypeCopyTo: another ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarXmlIdTypeCopyTo: another ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! cheddarXmlIdTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! cheddarXmlIdTypeToValues: values ^ values ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarXmlIdTypeToValues: (super toValues: values) ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarXmlIdTypeFromValues: (super fromValues: values) ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarXmlIdTypeFromValues: values ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarXmlIdTypeToValues: values ! ! !ChdCheddarXmlIdType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdCheddarXmlIdType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'ada.strings'; add: 'unbounded.text_io'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Text_io'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unbounded_Strings'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Strings'; add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Unbounded_Strings'; add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'id_generators'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'call_framework'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'id_generators'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ 'generate_id' ! ! !ChdCheddarXmlIdType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaBooleanType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaBooleanType commentStamp: 'platypus comment' prior: 0! ENTITY ada_boolean_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'boolean_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Boolean'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := 'false'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.boolean_io.'; END_ENTITY; ! !ChdAdaBooleanType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-classifying'! isChdAdaBooleanType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaBooleanType ^ false ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaBooleanType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaBooleanType: e "my subclasses have to redefine it" ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-copying'! adaBooleanTypeCopyTo: another ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaBooleanTypeCopyTo: another ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaBooleanTypeCopyTo: another ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! adaBooleanTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! adaBooleanTypeToValues: values ^ values ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaBooleanTypeToValues: (super toValues: values) ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaBooleanTypeFromValues: (super fromValues: values) ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaBooleanTypeFromValues: values ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaBooleanTypeToValues: values ! ! !ChdAdaBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: 'boolean_io'; add: false; add: true; yourself); yourself); yourself)) ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Boolean' ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ 'false' ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ 'standards_io.boolean_io.' ! ! !ChdAdaBooleanType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaRealType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaRealType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaRealType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaRealType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaRealType commentStamp: 'platypus comment' prior: 0! ENTITY ada_real_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'float_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Float'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.float_io.'; END_ENTITY; ! !ChdAdaRealType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaRealType methodsFor: 'platypus-generated-classifying'! isChdAdaRealType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaRealType ^ false ! ! !ChdAdaRealType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaRealType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaRealType: e "my subclasses have to redefine it" ! ! !ChdAdaRealType methodsFor: 'platypus-generated-copying'! adaRealTypeCopyTo: another ! ! !ChdAdaRealType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaRealTypeCopyTo: another ! ! !ChdAdaRealType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaRealTypeCopyTo: another ! ! !ChdAdaRealType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! adaRealTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! adaRealTypeToValues: values ^ values ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaRealTypeToValues: (super toValues: values) ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaRealTypeFromValues: (super fromValues: values) ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaRealTypeFromValues: values ! ! !ChdAdaRealType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaRealTypeToValues: values ! ! !ChdAdaRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada'; add: 'Numerics.Aux'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: 'float_io'; add: false; add: true; yourself); yourself); yourself)) ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Float' ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ '0.0' ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ 'standards_io.float_io.' ! ! !ChdAdaRealType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaDoubleType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaDoubleType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaDoubleType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaDoubleType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaDoubleType commentStamp: 'platypus comment' prior: 0! ENTITY ada_double_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'Ada', 'Numerics.Aux', true, true ), ada_interface ( 'standards_io', 'double_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Double'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0.0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.double_io.'; END_ENTITY; ! !ChdAdaDoubleType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-classifying'! isChdAdaDoubleType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaDoubleType ^ false ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaDoubleType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaDoubleType: e "my subclasses have to redefine it" ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-copying'! adaDoubleTypeCopyTo: another ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaDoubleTypeCopyTo: another ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaDoubleTypeCopyTo: another ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! adaDoubleTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! adaDoubleTypeToValues: values ^ values ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaDoubleTypeToValues: (super toValues: values) ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaDoubleTypeFromValues: (super fromValues: values) ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaDoubleTypeFromValues: values ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaDoubleTypeToValues: values ! ! !ChdAdaDoubleType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaDoubleType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada'; add: 'Numerics.Aux'; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: 'double_io'; add: false; add: true; yourself); yourself); yourself)) ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Double' ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ '0.0' ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ 'standards_io.double_io.' ! ! !ChdAdaDoubleType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! ChdAdaPrimitiveType subclass: #ChdAdaIntegerType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaIntegerType commentStamp: 'platypus comment' prior: 0! ENTITY ada_integer_type SUBTYPE OF ( ada_primitive_type ); DERIVE SELF\ada_primitive_type.ads_interfaces_list : LIST OF ada_interface := std_io_interfaces + [ ada_interface ( 'standards_io', 'integer_io', false, true ) ]; SELF\ada_primitive_type.adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ada_ident : STRING := 'Integer'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := '0'; SELF\ada_primitive_type.put_prefix : STRING := 'standards_io.integer_io.'; END_ENTITY; ! !ChdAdaIntegerType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-classifying'! isChdAdaIntegerType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaIntegerType ^ false ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaIntegerType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaIntegerType: e "my subclasses have to redefine it" ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-copying'! adaIntegerTypeCopyTo: another ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaIntegerTypeCopyTo: another ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaIntegerTypeCopyTo: another ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! adaIntegerTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! adaIntegerTypeToValues: values ^ values ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaIntegerTypeToValues: (super toValues: values) ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaIntegerTypeFromValues: (super fromValues: values) ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaIntegerTypeFromValues: values ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaIntegerTypeToValues: values ! ! !ChdAdaIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: 'integer_io'; add: false; add: true; yourself); yourself); yourself)) ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'Integer' ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ '0' ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ 'standards_io.integer_io.' ! ! !ChdAdaIntegerType methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! PltEntityInstance subclass: #ChdAdaNamedTypeReference instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaNamedTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY ada_named_type_reference SUBTYPE OF ( entity_instance ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := SELF.ref.name; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-classifying'! isChdAdaNamedTypeReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaNamedTypeReference ^ false ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaNamedTypeReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaNamedTypeReference: e "my subclasses have to redefine it" ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-copying'! adaNamedTypeReferenceCopyTo: another ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaNamedTypeReferenceCopyTo: another ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaNamedTypeReferenceCopyTo: another ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! adaNamedTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! adaNamedTypeReferenceToValues: values ^ values ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaNamedTypeReferenceToValues: (super toValues: values) ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaNamedTypeReferenceFromValues: (super fromValues: values) ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaNamedTypeReferenceFromValues: values ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaNamedTypeReferenceToValues: values ! ! !ChdAdaNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ (aReceiver refUsingContext: aContext) nameUsingContext: aContext ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaNamedTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! ChdAdaNamedTypeReference subclass: #ChdAdaRecordReference instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaRecordReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaRecordReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaRecordReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaRecordReference commentStamp: 'platypus comment' prior: 0! ENTITY ada_record_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_record_reference; END_ENTITY; ! !ChdAdaRecordReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-classifying'! isChdAdaRecordReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaRecordReference ^ false ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaRecordReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaRecordReference: e "my subclasses have to redefine it" ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-copying'! adaRecordReferenceCopyTo: another ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaRecordReferenceCopyTo: another ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaRecordReferenceCopyTo: another ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! adaRecordReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! adaRecordReferenceToValues: values ^ values ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaRecordReferenceToValues: (super toValues: values) ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaRecordReferenceFromValues: (super fromValues: values) ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaRecordReferenceFromValues: values ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaRecordReferenceToValues: values ! ! !ChdAdaRecordReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaRecordReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptAdaRecordReferenceUsingContext: aContext ! ! !ChdAdaRecordReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! ChdAdaNamedTypeReference subclass: #ChdAdaClassReference instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaClassReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassReference commentStamp: 'platypus comment' prior: 0! ENTITY ada_class_reference SUBTYPE OF ( ada_named_type_reference ); DERIVE SELF\entity_definition_reference.accepted : entity_instance := SELF.accept_ada_class_reference; SELF\ada_named_type_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.ref.owner.name, ?, true, true ) ]; SELF\ada_named_type_reference.ada_ident : STRING := SELF.ref.name + '_Ptr'; init_value : STRING := 'initialize'; END_ENTITY; ! !ChdAdaClassReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-classifying'! isChdAdaClassReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaClassReference ^ false ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaClassReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaClassReference: e "my subclasses have to redefine it" ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-copying'! adaClassReferenceCopyTo: another ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaClassReferenceCopyTo: another ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaClassReferenceCopyTo: another ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! adaClassReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! adaClassReferenceToValues: values ^ values ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaClassReferenceToValues: (super toValues: values) ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaClassReferenceFromValues: (super fromValues: values) ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaClassReferenceFromValues: values ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaClassReferenceToValues: values ! ! !ChdAdaClassReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaClassReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptAdaClassReferenceUsingContext: aContext ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: (((aReceiver refUsingContext: self class context) ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ ((aReceiver refUsingContext: aContext) nameUsingContext: aContext) pltPlus: '_Ptr' ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ 'initialize' ! ! !ChdAdaClassReference methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! ChdAdaClassReference subclass: #ChdAdaPrimitiveClassReference instanceVariableNames: 'packageName pointedTypeName' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaPrimitiveClassReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPrimitiveClassReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPrimitiveClassReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPrimitiveClassReference commentStamp: 'platypus comment' prior: 0! ENTITY ada_primitive_class_reference SUBTYPE OF ( ada_class_reference ); pointed_type_name : STRING; package_name : STRING; DERIVE SELF\ada_class_reference.ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( package_name, ?, true, true ) ]; SELF\ada_class_reference.ada_ident : STRING := pointed_type_name + '_Ptr'; END_ENTITY; ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. pointedTypeName := ''. packageName := '' ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-classifying'! isChdAdaPrimitiveClassReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaPrimitiveClassReference ^ false ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaPrimitiveClassReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaPrimitiveClassReference: e "my subclasses have to redefine it" ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-copying'! adaPrimitiveClassReferenceCopyTo: another another fastSetPointedTypeName: self pointedTypeName. another fastSetPackageName: self packageName ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaPrimitiveClassReferenceCopyTo: another ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaPrimitiveClassReferenceCopyTo: another ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! adaPrimitiveClassReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPointedTypeName: valuesloc removeFirst. self setPackageName: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! adaPrimitiveClassReferenceToValues: values values add: self pointedTypeName. values add: self packageName. ^ values ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaPrimitiveClassReferenceToValues: (super toValues: values) ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaPrimitiveClassReferenceFromValues: (super fromValues: values) ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaPrimitiveClassReferenceFromValues: values ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaPrimitiveClassReferenceToValues: values ! ! !ChdAdaPrimitiveClassReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaPrimitiveClassReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-accessing'! pointedTypeName ^ pointedTypeName ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-set-accessing'! setPointedTypeName: aString self pointedTypeName: aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-accessing'! pointedTypeName: aString pointedTypeName := aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPointedTypeName: aString pointedTypeName := aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-with-context-accessing'! pointedTypeNameUsingContext: aContext ^ self pointedTypeName ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-accessing'! packageName ^ packageName ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-set-accessing'! setPackageName: aString self packageName: aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-accessing'! packageName: aString packageName := aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPackageName: aString packageName := aString ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-with-context-accessing'! packageNameUsingContext: aContext ^ self packageName ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: aReceiver packageName; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver pointedTypeName pltPlus: '_Ptr' ! ! !ChdAdaPrimitiveClassReference methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! ChdAdaNamedTypeReference subclass: #ChdAdaAttributeReference instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaAttributeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaAttributeReference commentStamp: 'platypus comment' prior: 0! ENTITY ada_attribute_reference SUBTYPE OF ( ada_named_type_reference ); END_ENTITY; ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-classifying'! isChdAdaAttributeReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaAttributeReference ^ false ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaAttributeReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaAttributeReference: e "my subclasses have to redefine it" ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-copying'! adaAttributeReferenceCopyTo: another ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaAttributeReferenceCopyTo: another ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaAttributeReferenceCopyTo: another ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! adaAttributeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! adaAttributeReferenceToValues: values ^ values ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaAttributeReferenceToValues: (super toValues: values) ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaAttributeReferenceFromValues: (super fromValues: values) ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaAttributeReferenceFromValues: values ! ! !ChdAdaAttributeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaAttributeReferenceToValues: values ! ! !ChdAdaAttributeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaAttributeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! PltArrayType subclass: #ChdAdaArrayType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaArrayType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaArrayType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaArrayType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaArrayType commentStamp: 'platypus comment' prior: 0! ENTITY ada_array_type SUBTYPE OF ( array_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := ?; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ! !ChdAdaArrayType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-classifying'! isChdAdaArrayType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaArrayType ^ false ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaArrayType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaArrayType: e "my subclasses have to redefine it" ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-copying'! adaArrayTypeCopyTo: another ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaArrayTypeCopyTo: another ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaArrayTypeCopyTo: another ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! adaArrayTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! adaArrayTypeToValues: values ^ values ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaArrayTypeToValues: (super toValues: values) ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaArrayTypeFromValues: (super fromValues: values) ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaArrayTypeFromValues: values ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaArrayTypeToValues: values ! ! !ChdAdaArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaArrayType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! PltListType subclass: #ChdAdaListType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaListType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaListType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaListType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaListType commentStamp: 'platypus comment' prior: 0! ENTITY ada_list_type SUBTYPE OF ( list_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'list'; ada_ref_ident : STRING := SELF.ada_ident; init_value : STRING := ?; END_ENTITY; ! !ChdAdaListType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaListType methodsFor: 'platypus-generated-classifying'! isChdAdaListType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaListType ^ false ! ! !ChdAdaListType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaListType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaListType: e "my subclasses have to redefine it" ! ! !ChdAdaListType methodsFor: 'platypus-generated-copying'! adaListTypeCopyTo: another ! ! !ChdAdaListType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaListTypeCopyTo: another ! ! !ChdAdaListType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaListTypeCopyTo: another ! ! !ChdAdaListType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! adaListTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! adaListTypeToValues: values ^ values ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaListTypeToValues: (super toValues: values) ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaListTypeFromValues: (super fromValues: values) ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaListTypeFromValues: values ! ! !ChdAdaListType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaListTypeToValues: values ! ! !ChdAdaListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'list' ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaListType methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! PltSetType subclass: #ChdAdaSetType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaSetType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaSetType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaSetType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaSetType commentStamp: 'platypus comment' prior: 0! ENTITY ada_set_type SUBTYPE OF ( set_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'set'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ! !ChdAdaSetType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaSetType methodsFor: 'platypus-generated-classifying'! isChdAdaSetType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaSetType ^ false ! ! !ChdAdaSetType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaSetType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaSetType: e "my subclasses have to redefine it" ! ! !ChdAdaSetType methodsFor: 'platypus-generated-copying'! adaSetTypeCopyTo: another ! ! !ChdAdaSetType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaSetTypeCopyTo: another ! ! !ChdAdaSetType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaSetTypeCopyTo: another ! ! !ChdAdaSetType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! adaSetTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! adaSetTypeToValues: values ^ values ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaSetTypeToValues: (super toValues: values) ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaSetTypeFromValues: (super fromValues: values) ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaSetTypeFromValues: values ! ! !ChdAdaSetType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaSetTypeToValues: values ! ! !ChdAdaSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'set' ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaSetType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! PltBagType subclass: #ChdAdaBagType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaBagType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaBagType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaBagType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaBagType commentStamp: 'platypus comment' prior: 0! ENTITY ada_bag_type SUBTYPE OF ( bag_type ); DERIVE ads_interfaces_list : LIST OF ada_interface := std_io_interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := 'bag'; ada_ref_ident : STRING := SELF.ada_ident; END_ENTITY; ! !ChdAdaBagType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaBagType methodsFor: 'platypus-generated-classifying'! isChdAdaBagType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaBagType ^ false ! ! !ChdAdaBagType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaBagType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaBagType: e "my subclasses have to redefine it" ! ! !ChdAdaBagType methodsFor: 'platypus-generated-copying'! adaBagTypeCopyTo: another ! ! !ChdAdaBagType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaBagTypeCopyTo: another ! ! !ChdAdaBagType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaBagTypeCopyTo: another ! ! !ChdAdaBagType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! adaBagTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! adaBagTypeToValues: values ^ values ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaBagTypeToValues: (super toValues: values) ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaBagTypeFromValues: (super fromValues: values) ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaBagTypeFromValues: values ! ! !ChdAdaBagType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaBagTypeToValues: values ! ! !ChdAdaBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'standards_io'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ 'bag' ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaBagType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! ChdAdaType subclass: #ChdAdaEnumeration instanceVariableNames: 'convertion' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdAdaEnumeration class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEnumeration class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEnumeration class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEnumeration commentStamp: 'platypus comment' prior: 0! ENTITY ada_enumeration SUBTYPE OF ( ada_type ); convertion : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'Convert_Strings', ?, true, false ), ada_interface ( 'Convert_Unbounded_Strings', ?, true, false ), ada_interface ( 'text_io', ?, true, true ), ada_interface ( 'ada.strings', 'unbounded', true, true ) ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( 'primitive_xml_strings', ?, true, true ) ]; ads_code : STRING := enumeration_ads_code ( SELF ); adb_code : STRING := enumeration_adb_code ( SELF ); SELF\ada_type.ada_ident : STRING := name; SELF\ada_type.ada_ref_ident : STRING := SELF.ada_ident; SELF\ada_type.init_value : STRING := NVL ( convertion, domain.elements [ 1 ] ); io_type_name : STRING := SELF.ada_ident + '_io'; full_io_type_name : STRING := SELF.owner.name + '.' + SELF.io_type_name; SELF\defined_type.accepted : entity_instance := SELF.accept_ada_enumeration; END_ENTITY; ! !ChdAdaEnumeration methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. convertion := nil ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-classifying'! isChdAdaEnumeration ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdAdaEnumeration ^ false ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaEnumeration: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptAdaEnumeration: e "my subclasses have to redefine it" ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-copying'! adaEnumerationCopyTo: another another fastSetConvertion: self convertion ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaEnumerationCopyTo: another ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaEnumerationCopyTo: another ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! adaEnumerationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setConvertion: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! adaEnumerationToValues: values values add: self convertion. ^ values ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaEnumerationToValues: (super toValues: values) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaEnumerationFromValues: (super fromValues: values) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaEnumerationFromValues: values ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaEnumerationToValues: values ! ! !ChdAdaEnumeration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdAdaEnumeration class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-accessing'! convertion ^ convertion ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-set-accessing'! setConvertion: aString self convertion: aString ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-accessing'! convertion: aString convertion := aString ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-fast-set-accessing'! fastSetConvertion: aString convertion := aString ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-with-context-accessing'! convertionUsingContext: aContext ^ self convertion ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Strings'; add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Convert_Unbounded_Strings'; add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'text_io'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'ada.strings'; add: 'unbounded'; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'primitive_xml_strings'; add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdEnumerationAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ ChdEnumerationAdbCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ PltNVLFunction invokeFromValues: (OrderedCollection new add: aReceiver convertion; add: ((aReceiver domain elementsUsingContext: self class context) pltAt: 1); yourself) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! ioTypeNameUsingContext: aContext ^ self ioTypeNameUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! ioTypeNameUsingContext: aContext receiver: aReceiver ^ (aReceiver adaIdentUsingContext: aContext) pltPlus: '_io' ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! ioTypeName ^ self ioTypeNameUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! fullIoTypeNameUsingContext: aContext ^ self fullIoTypeNameUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! fullIoTypeNameUsingContext: aContext receiver: aReceiver ^ (((aReceiver ownerUsingContext: aContext) nameUsingContext: aContext) pltPlus: '.') pltPlus: (aReceiver ioTypeNameUsingContext: aContext) ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! fullIoTypeName ^ self fullIoTypeNameUsingContext: self class context ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptAdaEnumerationUsingContext: aContext ! ! !ChdAdaEnumeration methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! PltDictionaryInstance subclass: #ChdBasicAdaTypeValueFormat instanceVariableNames: 'basicAdaType val' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdBasicAdaTypeValueFormat class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdBasicAdaTypeValueFormat class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdBasicAdaTypeValueFormat class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdBasicAdaTypeValueFormat commentStamp: 'platypus comment' prior: 0! ENTITY basic_ada_type_value_format SUBTYPE OF ( dictionary_instance ); val : expression; basic_ada_type : OPTIONAL dictionary_instance; DERIVE formated : STRING := basic_ada_expression_value_string ( SELF.val ); END_ENTITY; ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. val := nil. basicAdaType := nil ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-classifying'! isChdBasicAdaTypeValueFormat ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdBasicAdaTypeValueFormat ^ false ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBasicAdaTypeValueFormat: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptBasicAdaTypeValueFormat: e "my subclasses have to redefine it" ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-copying'! basicAdaTypeValueFormatCopyTo: another another fastSetVal: self val. another fastSetBasicAdaType: self basicAdaType ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self basicAdaTypeValueFormatCopyTo: another ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self basicAdaTypeValueFormatCopyTo: another ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! basicAdaTypeValueFormatFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setVal: valuesloc removeFirst. self setBasicAdaType: valuesloc removeFirst. ^ valuesloc ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! basicAdaTypeValueFormatToValues: values values add: self val. values add: self basicAdaType. ^ values ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self basicAdaTypeValueFormatToValues: (super toValues: values) ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self basicAdaTypeValueFormatFromValues: (super fromValues: values) ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self basicAdaTypeValueFormatFromValues: values ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self basicAdaTypeValueFormatToValues: values ! ! !ChdBasicAdaTypeValueFormat class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdBasicAdaTypeValueFormat class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-set-accessing'! setVal: aChdExpression self val: aChdExpression ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-accessing'! val: aChdExpression val := aChdExpression ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-fast-set-accessing'! fastSetVal: aChdExpression val := aChdExpression ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-with-context-accessing'! valUsingContext: aContext ^ self val ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-accessing'! basicAdaType ^ basicAdaType ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-set-accessing'! setBasicAdaType: aChdDictionaryInstance self basicAdaType: aChdDictionaryInstance ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-accessing'! basicAdaType: aChdDictionaryInstance basicAdaType := aChdDictionaryInstance ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-fast-set-accessing'! fastSetBasicAdaType: aChdDictionaryInstance basicAdaType := aChdDictionaryInstance ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-with-context-accessing'! basicAdaTypeUsingContext: aContext ^ self basicAdaType ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-deriving'! formatedUsingContext: aContext ^ self formatedUsingContext: aContext receiver: self ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-deriving'! formatedUsingContext: aContext receiver: aReceiver ^ ChdBasicAdaExpressionValueStringFunction invokeFromValues: (OrderedCollection new add: (aReceiver valUsingContext: self class context); yourself) ! ! !ChdBasicAdaTypeValueFormat methodsFor: 'platypus-generated-deriving'! formated ^ self formatedUsingContext: self class context ! ! PltDefinedType subclass: #ChdRangeType instanceVariableNames: 'lower lowerConstant upper upperConstant' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdRangeType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRangeType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRangeType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRangeType commentStamp: 'platypus comment' prior: 0! ENTITY range_type SUBTYPE OF ( defined_type ); lower : STRING; upper : STRING; lower_constant : OPTIONAL STRING; upper_constant : OPTIONAL STRING; DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ads_code : STRING := range_type_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ! !ChdRangeType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. lower := ''. upper := ''. lowerConstant := nil. upperConstant := nil ! ! !ChdRangeType methodsFor: 'platypus-generated-classifying'! isChdRangeType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdRangeType ^ false ! ! !ChdRangeType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRangeType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptRangeType: e "my subclasses have to redefine it" ! ! !ChdRangeType methodsFor: 'platypus-generated-copying'! rangeTypeCopyTo: another another fastSetLower: self lower. another fastSetUpper: self upper. another fastSetLowerConstant: self lowerConstant. another fastSetUpperConstant: self upperConstant ! ! !ChdRangeType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self rangeTypeCopyTo: another ! ! !ChdRangeType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self rangeTypeCopyTo: another ! ! !ChdRangeType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! rangeTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setLower: valuesloc removeFirst. self setUpper: valuesloc removeFirst. self setLowerConstant: valuesloc removeFirst. self setUpperConstant: valuesloc removeFirst. ^ valuesloc ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! rangeTypeToValues: values values add: self lower. values add: self upper. values add: self lowerConstant. values add: self upperConstant. ^ values ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self rangeTypeToValues: (super toValues: values) ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self rangeTypeFromValues: (super fromValues: values) ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self rangeTypeFromValues: values ! ! !ChdRangeType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self rangeTypeToValues: values ! ! !ChdRangeType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdRangeType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! lower ^ lower ! ! !ChdRangeType methodsFor: 'platypus-generated-set-accessing'! setLower: aString self lower: aString ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! lower: aString lower := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLower: aString lower := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-with-context-accessing'! lowerUsingContext: aContext ^ self lower ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! upper ^ upper ! ! !ChdRangeType methodsFor: 'platypus-generated-set-accessing'! setUpper: aString self upper: aString ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! upper: aString upper := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUpper: aString upper := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-with-context-accessing'! upperUsingContext: aContext ^ self upper ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! lowerConstant ^ lowerConstant ! ! !ChdRangeType methodsFor: 'platypus-generated-set-accessing'! setLowerConstant: aString self lowerConstant: aString ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! lowerConstant: aString lowerConstant := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetLowerConstant: aString lowerConstant := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-with-context-accessing'! lowerConstantUsingContext: aContext ^ self lowerConstant ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! upperConstant ^ upperConstant ! ! !ChdRangeType methodsFor: 'platypus-generated-set-accessing'! setUpperConstant: aString self upperConstant: aString ! ! !ChdRangeType methodsFor: 'platypus-generated-accessing'! upperConstant: aString upperConstant := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUpperConstant: aString upperConstant := aString ! ! !ChdRangeType methodsFor: 'platypus-generated-with-context-accessing'! upperConstantUsingContext: aContext ^ self upperConstant ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdRangeTypeAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdRangeType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! PltDefinedType subclass: #ChdExplicitTypeReference instanceVariableNames: 'interfaces usedName' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdExplicitTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY explicit_type_reference SUBTYPE OF ( defined_type ); used_name : OPTIONAL STRING; interfaces : LIST OF ada_interface; DERIVE SELF\defined_type.accepted : entity_instance := SELF.accept_explicit_type_reference; ads_interfaces_list : LIST OF ada_interface := SELF.interfaces; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ] + interfaces; ada_ident : STRING := SELF.name; ptr_type : STRING := SELF.ada_ident + '_Ptr'; ada_ref_ident : STRING := NVL ( SELF.used_name, SELF.name ); init_value : STRING := ?; ads_code : STRING := ''; adb_code : STRING := ''; refed_by_pointer : BOOLEAN := string_ends_with ( SELF.ada_ref_ident, '_Ptr' ); END_ENTITY; ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. usedName := nil. interfaces := OrderedCollection new ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-classifying'! isChdExplicitTypeReference ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdExplicitTypeReference ^ false ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExplicitTypeReference: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptExplicitTypeReference: e "my subclasses have to redefine it" ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-copying'! explicitTypeReferenceCopyTo: another another fastSetUsedName: self usedName. another fastSetInterfaces: self interfaces ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self explicitTypeReferenceCopyTo: another ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self explicitTypeReferenceCopyTo: another ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! explicitTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setUsedName: valuesloc removeFirst. self setInterfaces: valuesloc removeFirst. ^ valuesloc ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! explicitTypeReferenceToValues: values values add: self usedName. values add: self interfaces. ^ values ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self explicitTypeReferenceToValues: (super toValues: values) ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self explicitTypeReferenceFromValues: (super fromValues: values) ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self explicitTypeReferenceFromValues: values ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self explicitTypeReferenceToValues: values ! ! !ChdExplicitTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdExplicitTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-accessing'! usedName ^ usedName ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-set-accessing'! setUsedName: aString self usedName: aString ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-accessing'! usedName: aString usedName := aString ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetUsedName: aString usedName := aString ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-with-context-accessing'! usedNameUsingContext: aContext ^ self usedName ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-accessing'! interfaces ^ interfaces ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-set-accessing'! setInterfaces: aListOfChdAdaInterface self interfaces: aListOfChdAdaInterface ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-accessing'! interfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInterfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-with-context-accessing'! interfacesUsingContext: aContext ^ self interfaces ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext ^ self acceptedUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! acceptedUsingContext: aContext receiver: aReceiver ^ aReceiver acceptExplicitTypeReferenceUsingContext: aContext ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! accepted ^ self acceptedUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ aReceiver interfacesUsingContext: aContext ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((aReceiver ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself); yourself)) pltPlus: aReceiver interfaces ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext ^ self ptrTypeUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext receiver: aReceiver ^ (aReceiver adaIdentUsingContext: aContext) pltPlus: '_Ptr' ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! ptrType ^ self ptrTypeUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ PltNVLFunction invokeFromValues: (OrderedCollection new add: (aReceiver usedNameUsingContext: self class context); add: (aReceiver nameUsingContext: self class context); yourself) ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ PTsStringEndsWithFunction invokeFromValues: (OrderedCollection new add: (aReceiver adaRefIdentUsingContext: self class context); add: '_Ptr'; yourself) ! ! !ChdExplicitTypeReference methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! ChdCoreEntity subclass: #ChdInScopeAttribute instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdInScopeAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdInScopeAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdInScopeAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdInScopeAttribute commentStamp: 'platypus comment' prior: 0! ENTITY in_scope_attribute; DERIVE init_code : STRING := in_scope_attribute_init_code ( SELF ); END_ENTITY; ! !ChdInScopeAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-classifying'! isChdInScopeAttribute ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarDomainsSchema-classifying'! isChdInScopeAttribute ^ false ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptInScopeAttribute: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarDomains'! acceptInScopeAttribute: e "my subclasses have to redefine it" ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-copying'! inScopeAttributeCopyTo: another ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self inScopeAttributeCopyTo: another ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self inScopeAttributeCopyTo: another ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! inScopeAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! inScopeAttributeToValues: values ^ values ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self inScopeAttributeToValues: (super toValues: values) ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self inScopeAttributeFromValues: (super fromValues: values) ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self inScopeAttributeFromValues: values ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self inScopeAttributeToValues: values ! ! !ChdInScopeAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! !ChdInScopeAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-deriving'! initCodeUsingContext: aContext ^ self initCodeUsingContext: aContext receiver: self ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-deriving'! initCodeUsingContext: aContext receiver: aReceiver ^ ChdInScopeAttributeInitCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdInScopeAttribute methodsFor: 'platypus-generated-deriving'! initCode ^ self initCodeUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDependenciesOfFunction instanceVariableNames: 'o t r ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdDependenciesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDependenciesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDependenciesOfFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDependenciesOfFunction commentStamp: 'platypus comment' prior: 0! FUNCTION dependencies_of ( o : context_definition; t : dictionary_instance ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( t ) ) THEN r := r + dependencies_of ( o, t.element_type.handled ); ELSE IF is_of_generated_concept_kind ( t ) THEN IF ( t.owner = o ) THEN r := r + t.dependencies + t; END_IF; END_IF; END_IF; RETURN ( r ); END_FUNCTION; ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-instance-creation'! o: aChdContextDefinition t: aChdDictionaryInstance ^ self new o: aChdContextDefinition t: aChdDictionaryInstance ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self o: (values at: 1). self t: (values at: 2) ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111300638! o: aChdContextDefinition t: aChdDictionaryInstance self o: aChdContextDefinition. self t: aChdDictionaryInstance ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! o: aChdContextDefinition o := aChdContextDefinition ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! t: aChdDictionaryInstance t := aChdDictionaryInstance ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! r: aListOfChdDictionaryInstance r := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! o ^ o ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! t ^ t ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdDependenciesOfFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self r: Array new. " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self t; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ self r: (self r pltPlus: (ChdDependenciesOfFunction invokeFromValues: (OrderedCollection new add: self o; add: ((self t elementTypeUsingContext: self class context) handledUsingContext: self class context); yourself))) ] ifFalse: [ (ChdIsOfGeneratedConceptKindFunction invokeFromValues: (OrderedCollection new add: self t; yourself)) ifTrue: [ (self t ownerUsingContext: self class context) = self o ifTrue: [ self r: ((self r pltPlus: (self t dependenciesUsingContext: self class context)) pltPlus: self t) ] ] ]. ^ self return: self r ! ! !ChdDependenciesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdConstrainedArrayTypeAdsCodeFunction instanceVariableNames: 'a code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdConstrainedArrayTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdConstrainedArrayTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdConstrainedArrayTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdConstrainedArrayTypeAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION constrained_array_type_ads_code ( a : constrained_array_type ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'type ' + a.ada_ident + ' is Array ( '; IF EXISTS ( a.max_idx ) THEN code := code + a.min_idx + ' .. ' + a.max_idx; ELSE code := code + a.min_idx; END_IF; ALIAS etype FOR a.domain.element_type.handled; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( etype ) ) THEN code := code + ' ) of ' + etype.ptr_type + ';\n'; ELSE code := code + ' ) of ' + etype.ada_ident + ';\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! a: aChdConstrainedArrayType ^ self new a: aChdConstrainedArrayType ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self a: (values at: 1) ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111304504! a: aChdConstrainedArrayType a := aChdConstrainedArrayType ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! a ^ a ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdConstrainedArrayTypeAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" self code: (('type ' pltPlus: (self a adaIdentUsingContext: self class context)) pltPlus: ' is Array ( '). (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self a maxIdxUsingContext: self class context); yourself)) ifTrue: [ self code: (((self code pltPlus: (self a minIdxUsingContext: self class context)) pltPlus: ' .. ') pltPlus: (self a maxIdxUsingContext: self class context)) ] ifFalse: [ self code: (self code pltPlus: (self a minIdxUsingContext: self class context)) ]. PlatypusCoreAliasStatement alias: (((self a domainUsingContext: self class context) elementTypeUsingContext: self class context) handledUsingContext: self class context) statementsBlock: [ :etype3894 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: etype3894; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self code: (((self code pltPlus: ' ) of ') pltPlus: (etype3894 ptrTypeUsingContext: self class context)) pltPlus: ';\n') ] ifFalse: [ self code: (((self code pltPlus: ' ) of ') pltPlus: (etype3894 adaIdentUsingContext: self class context)) pltPlus: ';\n') ] ]. ^ self return: self code ! ! !ChdConstrainedArrayTypeAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdCheddarDefinedTypeInterfacesListFunction instanceVariableNames: 'r ads result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdCheddarDefinedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarDefinedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarDefinedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarDefinedTypeInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION cheddar_defined_type_interfaces_list ( r : cheddar_defined_type; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; IF ads THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; RETURN ( result ); END_FUNCTION; ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdCheddarDefinedType ads: aBoolean ^ self new r: aChdCheddarDefinedType ads: aBoolean ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1). self ads: (values at: 2) ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111308016! r: aChdCheddarDefinedType ads: aBoolean self r: aChdCheddarDefinedType. self ads: aBoolean ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r: aChdCheddarDefinedType r := aChdCheddarDefinedType ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface result := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdCheddarDefinedTypeInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" self ads ifTrue: [ self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((self r ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself)) ]. ^ self return: self result ! ! !ChdCheddarDefinedTypeInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdBasicAdaDomainFunction instanceVariableNames: 'd ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdBasicAdaDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdBasicAdaDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdBasicAdaDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdBasicAdaDomainFunction commentStamp: 'platypus comment' prior: 0! FUNCTION basic_ada_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_ada_type_getter ( ) ).accepted ); END_FUNCTION; ! !ChdBasicAdaDomainFunction methodsFor: 'platypus-generated-instance-creation'! d: aChdDictionaryInstance ^ self new d: aChdDictionaryInstance ! ! !ChdBasicAdaDomainFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self d: (values at: 1) ! ! !ChdBasicAdaDomainFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111311084! d: aChdDictionaryInstance d := aChdDictionaryInstance ! ! !ChdBasicAdaDomainFunction methodsFor: 'platypus-generated-accessing'! d ^ d ! ! !ChdBasicAdaDomainFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PlatypusComplexInstance fromRecords: (OrderedCollection new add: self d; add: ChdBasicAdaTypeGetter new; yourself)) pltAsObject acceptedUsingContext: self class context) ! ! !ChdBasicAdaDomainFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdEnumerationAdsCodeFunction instanceVariableNames: 'e code convertType ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdEnumerationAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdEnumerationAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdEnumerationAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdEnumerationAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION enumeration_ads_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; convert_type : STRING := NVL ( e.convertion, e.domain.elements [ LOINDEX ( e.domain.elements ) ] ); END_LOCAL; code := 'type ' + e.name + ' is (\n\t' + StringAggregateConcatSeparatedBy ( e.domain.elements, ',\n\t' ) + ');\n'; IF ( 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION' IN TYPEOF ( e ) ) THEN code := code + 'pragma convention (' + e.convention + ', ' + e.name + ');\n'; END_IF; code := code + '\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Strings(' + e.name + ', ' + convert_type + ');\n' + 'procedure To_' + e.name + ' is\n' + 'new Convert_Unbounded_Strings(' + e.name + ', ' + convert_type + ');\n' + 'function XML_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String;\n' + 'package ' + e.name + '_io is new text_io.enumeration_io(' + e.name + ');\n' + 'use ' + e.name + '_io;\n\n'; RETURN ( code ); END_FUNCTION; ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdAdaEnumeration ^ self new e: aChdAdaEnumeration ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111313930! e: aChdAdaEnumeration e := aChdAdaEnumeration ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! convertType: aString1 convertType := aString1 ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-accessing'! convertType ^ convertType ! ! !ChdEnumerationAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self convertType: (PltNVLFunction invokeFromValues: (OrderedCollection new add: (self e convertionUsingContext: self class context); add: (((self e domainUsingContext: self class context) elementsUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: ((self e domainUsingContext: self class context) elementsUsingContext: self class context); yourself))); yourself)). " ---------- statements ----------" self code: (((('type ' pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' is (\n\t') pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: ((self e domainUsingContext: self class context) elementsUsingContext: self class context); add: ',\n\t'; yourself))) pltPlus: ');\n'). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'CHEDDAR_DOMAINS.PRAGMA_CONVENTION') ifTrue: [ self code: (((((self code pltPlus: 'pragma convention (') pltPlus: (self e conventionUsingContext: self class context)) pltPlus: ', ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ');\n') ]. self code: (((((((((((((((((((((((((((((((self code pltPlus: '\n') pltPlus: 'procedure To_') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' is\n') pltPlus: 'new Convert_Strings(') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ', ') pltPlus: self convertType) pltPlus: ');\n') pltPlus: 'procedure To_') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' is\n') pltPlus: 'new Convert_Unbounded_Strings(') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ', ') pltPlus: self convertType) pltPlus: ');\n') pltPlus: 'function XML_String (obj : in ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_Ref_String (obj : in ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'package ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: '_io is new text_io.enumeration_io(') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'use ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: '_io;\n\n'). ^ self return: self code ! ! !ChdEnumerationAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdBasicAdaExpressionValueStringFunction instanceVariableNames: 'e code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdBasicAdaExpressionValueStringFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdBasicAdaExpressionValueStringFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdBasicAdaExpressionValueStringFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdBasicAdaExpressionValueStringFunction commentStamp: 'platypus comment' prior: 0! FUNCTION basic_ada_expression_value_string ( e : expression ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER' IN TYPEOF ( e ) ) THEN RETURN ( e.name ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL' IN TYPEOF ( e ) ) THEN RETURN ( FORMAT ( e.val, 'I' ) ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'True' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT' IN TYPEOF ( e ) ) THEN RETURN ( 'False' ); END_IF; IF ( 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION' IN TYPEOF ( e ) ) THEN RETURN ( '(' + basic_ada_expression_value_string ( e.left_expr ) + ' ' + e.op_string + ' ' + basic_ada_expression_value_string ( e.right_expr ) + ')' ); END_IF; RETURN ( 'null' ); END_FUNCTION; ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdExpression ^ self new e: aChdExpression ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111319380! e: aChdExpression e := aChdExpression ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdBasicAdaExpressionValueStringFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_EXPRESSIONS_SCHEMA.IDENTIFIER') ifTrue: [ ^ self return: (self e nameUsingContext: self class context) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_EXPRESSIONS_SCHEMA.INTEGER_LITERAL') ifTrue: [ ^ self return: (PltFORMATFunction invokeFromValues: (OrderedCollection new add: (self e valUsingContext: self class context); add: 'I'; yourself)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_EXPRESSIONS_SCHEMA.TRUE_CONSTANT') ifTrue: [ ^ self return: 'True' ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_EXPRESSIONS_SCHEMA.FALSE_CONSTANT') ifTrue: [ ^ self return: 'False' ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_EXPRESSIONS_SCHEMA.BINARY_EXPRESSION') ifTrue: [ ^ self return: (((((('(' pltPlus: (ChdBasicAdaExpressionValueStringFunction invokeFromValues: (OrderedCollection new add: (self e leftExprUsingContext: self class context); yourself))) pltPlus: ' ') pltPlus: (self e opStringUsingContext: self class context)) pltPlus: ' ') pltPlus: (ChdBasicAdaExpressionValueStringFunction invokeFromValues: (OrderedCollection new add: (self e rightExprUsingContext: self class context); yourself))) pltPlus: ')') ]. ^ self return: 'null' ! ! !ChdBasicAdaExpressionValueStringFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdEnumerationAdbCodeFunction instanceVariableNames: 'e code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdEnumerationAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdEnumerationAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdEnumerationAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdEnumerationAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION enumeration_adb_code ( e : ada_enumeration ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function XML_String(obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + ' return to_unbounded_string(' + e.name + '''image (obj) );\n' + 'end XML_String;\n\n' + 'function XML_Ref_String (obj : in ' + e.name + ') return Unbounded_String is\n' + 'begin\n' + '\traise xml_ref_string_error;\n' + '\treturn to_unbounded_string("");\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdAdaEnumeration ^ self new e: aChdAdaEnumeration ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111323523! e: aChdAdaEnumeration e := aChdAdaEnumeration ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdEnumerationAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: (((((((((((((('function XML_String(obj : in ' pltPlus: (self e nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: ' return to_unbounded_string(') pltPlus: (self e nameUsingContext: self class context)) pltPlus: '''image (obj) );\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_Ref_String (obj : in ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: '\traise xml_ref_string_error;\n') pltPlus: '\treturn to_unbounded_string("");\n') pltPlus: 'end XML_Ref_String;\n\n'). ^ self return: self code ! ! !ChdEnumerationAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRangeTypeAdsCodeFunction instanceVariableNames: 'rt r ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdRangeTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRangeTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRangeTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRangeTypeAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION range_type_ads_code ( rt : range_type ) : STRING; LOCAL r : STRING := 'type ' + rt.ada_ident + ' is Range ' + rt.lower + ' .. ' + rt.upper + ';\n'; END_LOCAL; IF EXISTS ( rt.lower_constant ) THEN r := r + rt.lower_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''First;\n'; END_IF; IF EXISTS ( rt.upper_constant ) THEN r := r + rt.upper_constant + ' : constant ' + rt.ada_ident + ' := ' + rt.ada_ident + '''Last;\n'; END_IF; RETURN ( r ); END_FUNCTION; ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! rt: aChdRangeType ^ self new rt: aChdRangeType ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rt: (values at: 1) ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111326491! rt: aChdRangeType rt := aChdRangeType ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! r: aString r := aString ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! rt ^ rt ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdRangeTypeAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self r: (((((('type ' pltPlus: (self rt adaIdentUsingContext: self class context)) pltPlus: ' is Range ') pltPlus: (self rt lowerUsingContext: self class context)) pltPlus: ' .. ') pltPlus: (self rt upperUsingContext: self class context)) pltPlus: ';\n'). " ---------- statements ----------" (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self rt lowerConstantUsingContext: self class context); yourself)) ifTrue: [ self r: ((((((self r pltPlus: (self rt lowerConstantUsingContext: self class context)) pltPlus: ' : constant ') pltPlus: (self rt adaIdentUsingContext: self class context)) pltPlus: ' := ') pltPlus: (self rt adaIdentUsingContext: self class context)) pltPlus: '''First;\n') ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self rt upperConstantUsingContext: self class context); yourself)) ifTrue: [ self r: ((((((self r pltPlus: (self rt upperConstantUsingContext: self class context)) pltPlus: ' : constant ') pltPlus: (self rt adaIdentUsingContext: self class context)) pltPlus: ' := ') pltPlus: (self rt adaIdentUsingContext: self class context)) pltPlus: '''Last;\n') ]. ^ self return: self r ! ! !ChdRangeTypeAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdInScopeAttributeInitCodeFunction instanceVariableNames: 'a code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdInScopeAttributeInitCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdInScopeAttributeInitCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdInScopeAttributeInitCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdInScopeAttributeInitCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION in_scope_attribute_init_code ( a : in_scope_attribute ) : STRING; LOCAL code : STRING := ''; END_LOCAL; ALIAS domain FOR a.domain.handled; IF domain.refed_by_pointer THEN code := code + '\n\tif obj.' + a.name + ' /= null then\n' + '\t\tFree (obj.' + a.name + ' );\n' + '\tend if;\n' + '\tobj.' + a.name + ' := new ' + domain.name + ';\n' + '\tInitialize(obj.' + a.name + '.all);\n'; END_IF; END_ALIAS; RETURN ( code ); END_FUNCTION; ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-instance-creation'! a: aChdInScopeAttribute ^ self new a: aChdInScopeAttribute ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self a: (values at: 1) ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111329971! a: aChdInScopeAttribute a := aChdInScopeAttribute ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-accessing'! a ^ a ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdInScopeAttributeInitCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" PlatypusCoreAliasStatement alias: ((self a domainUsingContext: self class context) handledUsingContext: self class context) statementsBlock: [ :domain3434 | (domain3434 refedByPointerUsingContext: self class context) ifTrue: [ self code: (((((((((((((((self code pltPlus: '\n\tif obj.') pltPlus: (self a nameUsingContext: self class context)) pltPlus: ' /= null then\n') pltPlus: '\t\tFree (obj.') pltPlus: (self a nameUsingContext: self class context)) pltPlus: ' );\n') pltPlus: '\tend if;\n') pltPlus: '\tobj.') pltPlus: (self a nameUsingContext: self class context)) pltPlus: ' := new ') pltPlus: (domain3434 nameUsingContext: self class context)) pltPlus: ';\n') pltPlus: '\tInitialize(obj.') pltPlus: (self a nameUsingContext: self class context)) pltPlus: '.all);\n') ] ]. ^ self return: self code ! ! !ChdInScopeAttributeInitCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDomainInterfacesListFunction instanceVariableNames: 'adaDomain ads pkg result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarDomainsSchema'! !ChdDomainInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDomainInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDomainInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDomainInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION domain_interfaces_list ( ada_domain : entity_instance; ads : BOOLEAN; pkg : schema_definition ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; END_LOCAL; ALIAS h FOR ada_domain.handled; IF ads THEN result := result + ada_domain.ads_interfaces_list; ELSE result := result + ada_domain.adb_interfaces_list; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( h ) ) THEN IF ( h.owner.name <> pkg.name ) THEN result := result + ada_interface ( h.owner.name, ?, true, false ); result := result + ada_interface ( h.full_io_type_name, ?, false, true ); END_IF; END_IF; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( h ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( h ) ) THEN IF ads THEN result := result + h.ads_interfaces_list; ELSE result := result + h.adb_interfaces_list; END_IF; END_IF; END_ALIAS; RETURN ( result ); END_FUNCTION; ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! adaDomain: aChdEntityInstance ads: aBoolean pkg: aChdSchemaDefinition ^ self new adaDomain: aChdEntityInstance ads: aBoolean pkg: aChdSchemaDefinition ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self adaDomain: (values at: 1). self ads: (values at: 2). self pkg: (values at: 3) ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111333697! adaDomain: aChdEntityInstance ads: aBoolean pkg: aChdSchemaDefinition self adaDomain: aChdEntityInstance. self ads: aBoolean. self pkg: aChdSchemaDefinition ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain: aChdEntityInstance adaDomain := aChdEntityInstance ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! pkg: aChdSchemaDefinition pkg := aChdSchemaDefinition ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface result := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain ^ adaDomain ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdDomainInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" PlatypusCoreAliasStatement alias: (self adaDomain handledUsingContext: self class context) statementsBlock: [ :h2778 | self ads ifTrue: [ self result: (self result pltPlus: (self adaDomain adsInterfacesListUsingContext: self class context)) ] ifFalse: [ self result: (self result pltPlus: (self adaDomain adbInterfacesListUsingContext: self class context)). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: h2778; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ ((h2778 ownerUsingContext: self class context) nameUsingContext: self class context) ~= (self pkg nameUsingContext: self class context) ifTrue: [ self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((h2778 ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: false; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: (h2778 fullIoTypeNameUsingContext: self class context); add: nil; add: false; add: true; yourself); yourself)) ] ] ]. (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: h2778; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: h2778; yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' ]) ifTrue: [ self ads ifTrue: [ self result: (self result pltPlus: (h2778 adsInterfacesListUsingContext: self class context)) ] ifFalse: [ self result: (self result pltPlus: (h2778 adbInterfacesListUsingContext: self class context)) ] ] ]. ^ self return: self result ! ! !ChdDomainInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarDomainsSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdCheddarConstantsSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarConstantsSchema'! !ChdCheddarConstantsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarConstantsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarConstantsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarConstantsSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA cheddar_constants; USE FROM express2cheddar_facade; USE FROM platypus_dictionary_schema; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM express_dictionary_queries; USE FROM express_toolsbox_functions; ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION; END_SCHEMA; ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#ada_constant #ChdAdaConstant) ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 1 ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#do_comments_with #ChdDoCommentsWithFunction) ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#ada_constant_ads_code #ChdAdaConstantAdsCodeFunction) ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#ada_constant_interfaces_list #ChdAdaConstantInterfacesListFunction) ! ! !ChdCheddarConstantsSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 3 ! ! PltConstantDefinition subclass: #ChdAdaConstant instanceVariableNames: 'final otherInitializer' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarConstantsSchema'! !ChdAdaConstant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaConstant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaConstant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaConstant commentStamp: 'platypus comment' prior: 0! ENTITY ada_constant SUBTYPE OF ( constant_definition ); final : BOOLEAN; other_initializer : OPTIONAL STRING; DERIVE ads_code : STRING := ada_constant_ads_code ( SELF ); adb_code : STRING := ''; ads_interfaces_list : LIST OF ada_interface := ada_constant_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := [ ]; END_ENTITY; ! !ChdAdaConstant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. final := false. otherInitializer := nil ! ! !ChdAdaConstant methodsFor: 'platypus-generated-classifying'! isChdAdaConstant ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-CheddarConstantsSchema-classifying'! isChdAdaConstant ^ false ! ! !ChdAdaConstant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaConstant: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingCheddarConstants'! acceptAdaConstant: e "my subclasses have to redefine it" ! ! !ChdAdaConstant methodsFor: 'platypus-generated-copying'! adaConstantCopyTo: another another fastSetFinal: self final. another fastSetOtherInitializer: self otherInitializer ! ! !ChdAdaConstant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaConstantCopyTo: another ! ! !ChdAdaConstant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaConstantCopyTo: another ! ! !ChdAdaConstant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! adaConstantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setFinal: valuesloc removeFirst. self setOtherInitializer: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! adaConstantToValues: values values add: self final. values add: self otherInitializer. ^ values ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaConstantToValues: (super toValues: values) ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaConstantFromValues: (super fromValues: values) ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaConstantFromValues: values ! ! !ChdAdaConstant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaConstantToValues: values ! ! !ChdAdaConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarConstantsSchemaDefinition singleton ! ! !ChdAdaConstant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaConstant methodsFor: 'platypus-generated-accessing'! final ^ final ! ! !ChdAdaConstant methodsFor: 'platypus-generated-set-accessing'! setFinal: aBoolean self final: aBoolean ! ! !ChdAdaConstant methodsFor: 'platypus-generated-accessing'! final: aBoolean final := aBoolean ! ! !ChdAdaConstant methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFinal: aBoolean final := aBoolean ! ! !ChdAdaConstant methodsFor: 'platypus-generated-with-context-accessing'! finalUsingContext: aContext ^ self final ! ! !ChdAdaConstant methodsFor: 'platypus-generated-accessing'! otherInitializer ^ otherInitializer ! ! !ChdAdaConstant methodsFor: 'platypus-generated-set-accessing'! setOtherInitializer: aString self otherInitializer: aString ! ! !ChdAdaConstant methodsFor: 'platypus-generated-accessing'! otherInitializer: aString otherInitializer := aString ! ! !ChdAdaConstant methodsFor: 'platypus-generated-fast-set-accessing'! fastSetOtherInitializer: aString otherInitializer := aString ! ! !ChdAdaConstant methodsFor: 'platypus-generated-with-context-accessing'! otherInitializerUsingContext: aContext ^ self otherInitializer ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdAdaConstantAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdAdaConstantInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdAdaConstant methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDoCommentsWithFunction instanceVariableNames: 'src ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarConstantsSchema'! !ChdDoCommentsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDoCommentsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDoCommentsWithFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDoCommentsWithFunction commentStamp: 'platypus comment' prior: 0! FUNCTION do_comments_with ( src : STRING ) : STRING; (*# " comments " | r s | r := ''. s := self src val. s linesDo: [:l | r := r , '--', l, String cr]. self return: (PltStringLiteral val: r) #*) (*# " comments " | r s | r := ''. s := self src. s linesDo: [:l | r := r , '--', l, String cr]. ^ self return: r #*) END_FUNCTION; ! !ChdDoCommentsWithFunction methodsFor: 'platypus-generated-instance-creation'! src: aString ^ self new src: aString ! ! !ChdDoCommentsWithFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self src: (values at: 1) ! ! !ChdDoCommentsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111349932! src: aString src := aString ! ! !ChdDoCommentsWithFunction methodsFor: 'platypus-generated-accessing'! src ^ src ! ! !ChdDoCommentsWithFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " " comments " | r s | r := ''. s := self src. s linesDo: [ :l | r := r , '--' , l , String cr ]. ^ self return: r ! ! !ChdDoCommentsWithFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarConstantsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaConstantAdsCodeFunction instanceVariableNames: 'c code remarks rem domain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarConstantsSchema'! !ChdAdaConstantAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaConstantAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaConstantAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaConstantAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_constant_ads_code ( c : ada_constant ) : STRING; LOCAL code : STRING := ''; remarks : LIST OF remark := remarks_for ( c ); rem : STRING; domain : dictionary_instance := basic_ada_domain ( c.domain ); END_LOCAL; IF ( SIZEOF ( remarks ) > 0 ) THEN REPEAT no := LOINDEX ( remarks ) TO HIINDEX ( remarks ); rem := clean_remark_text_of ( remarks [ no] ); rem := do_comments_with ( rem ); code := code + rem; END_REPEAT; END_IF; code := code + c.name + ' : '; IF c.final THEN code := code + 'constant '; END_IF; code := code + domain.ada_ref_ident; IF NOT EXISTS ( c.other_initializer ) THEN code := code + ' := ' + basic_ada_type_value_format ( c.initializer, ? ).formated + ';'; ELSE IF c.other_initializer > '' THEN code := code + ' := ' + c.other_initializer; END_IF; code := code + ';'; END_IF; code := code + '\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! c: aChdAdaConstant ^ self new c: aChdAdaConstant ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self c: (values at: 1) ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111352573! c: aChdAdaConstant c := aChdAdaConstant ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! remarks: aListOfChdRemark remarks := aListOfChdRemark ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdRemark as: OrderedCollection ] ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! rem: aString1 rem := aString1 ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdDictionaryInstance domain := aChdDictionaryInstance ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! c ^ c ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! remarks ^ remarks ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! rem ^ rem ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdAdaConstantAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self remarks: (PTsRemarksForFunction invokeFromValues: (OrderedCollection new add: self c; yourself)). self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self c domainUsingContext: self class context); yourself)). " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self remarks; yourself)) > 0 ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no1237 | self rem: (PTsCleanRemarkTextOfFunction invokeFromValues: (OrderedCollection new add: (self remarks pltAt: no1237); yourself)). self rem: (ChdDoCommentsWithFunction invokeFromValues: (OrderedCollection new add: self rem; yourself)). self code: (self code pltPlus: self rem) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self remarks; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self remarks; yourself)) ]. self code: ((self code pltPlus: (self c nameUsingContext: self class context)) pltPlus: ' : '). (self c finalUsingContext: self class context) ifTrue: [ self code: (self code pltPlus: 'constant ') ]. self code: (self code pltPlus: (self domain adaRefIdentUsingContext: self class context)). (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self c otherInitializerUsingContext: self class context); yourself)) not ifTrue: [ self code: (((self code pltPlus: ' := ') pltPlus: ((ChdBasicAdaTypeValueFormat new basicAdaTypeValueFormatFromValues: (OrderedCollection new add: (self c initializerUsingContext: self class context); add: nil; yourself); yourself) formatedUsingContext: self class context)) pltPlus: ';') ] ifFalse: [ (self c otherInitializerUsingContext: self class context) > '' ifTrue: [ self code: ((self code pltPlus: ' := ') pltPlus: (self c otherInitializerUsingContext: self class context)) ]. self code: (self code pltPlus: ';') ]. self code: (self code pltPlus: '\n'). ^ self return: self code ! ! !ChdAdaConstantAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarConstantsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaConstantInterfacesListFunction instanceVariableNames: 'r ads result adaDomain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-CheddarConstantsSchema'! !ChdAdaConstantInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaConstantInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaConstantInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaConstantInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_constant_interfaces_list ( r : ada_constant; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; ada_domain := basic_ada_domain ( r.domain ); result := domain_interfaces_list ( ada_domain, ads, r.owner ); RETURN ( result ); END_FUNCTION; ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdAdaConstant ads: aBoolean ^ self new r: aChdAdaConstant ads: aBoolean ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1). self ads: (values at: 2) ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111357827! r: aChdAdaConstant ads: aBoolean self r: aChdAdaConstant. self ads: aBoolean ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r: aChdAdaConstant r := aChdAdaConstant ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface result := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain: aChdEntityInstance adaDomain := aChdEntityInstance ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain ^ adaDomain ! ! !ChdAdaConstantInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" self adaDomain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self r domainUsingContext: self class context); yourself)). self result: (ChdDomainInterfacesListFunction invokeFromValues: (OrderedCollection new add: self adaDomain; add: self ads; add: (self r ownerUsingContext: self class context); yourself)). ^ self return: self result ! ! !ChdAdaConstantInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdCheddarConstantsSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdRecordAndClassSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordAndClassSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordAndClassSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordAndClassSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordAndClassSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA record_and_class; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM platypus_expressions_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM cheddar_domains; USE FROM discriminated_type; USE FROM ada_interface; ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF with_private THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF is_named_object ( cip ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF is_named_object ( cip ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT EXISTS ( init ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF domain.handled.refed_by_pointer THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF EXISTS ( attr.redeclaring ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF has_attribute_named ( r, xml_id_name ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF domain.handled.refed_by_pointer THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF domain.handled.refed_by_pointer THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF is_generic_object ( domain.handled ) THEN code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF EXISTS ( init ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF is_generic_object ( domain.handled ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; END_SCHEMA; ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#ada_entity #ChdAdaEntity) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#ada_class #ChdAdaClass) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#record #ChdRecord) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#cheddar_function_ptr #ChdCheddarFunctionPtr) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 4 ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#is_generic_object #ChdIsGenericObjectFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#is_named_object #ChdIsNamedObjectFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#dependencies_of_ada_entity #ChdDependenciesOfAdaEntityFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#ada_class_ads_code #ChdAdaClassAdsCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#ada_class_adb_code #ChdAdaClassAdbCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#ada_class_xml_writer_code #ChdAdaClassXmlWriterCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#record_xml_writer_code #ChdRecordXmlWriterCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#ada_class_initialize_code #ChdAdaClassInitializeCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#explicit_attribute_initialize #ChdExplicitAttributeInitializeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#derived_attribute_initialize #ChdDerivedAttributeInitializeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#ada_class_typeof_code #ChdAdaClassTypeofCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#ada_class_copy_code #ChdAdaClassCopyCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#ada_class_put_code #ChdAdaClassPutCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#ada_class_get_name_code #ChdAdaClassGetNameCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#ada_class_attributes_ads_code #ChdAdaClassAttributesAdsCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#ada_entity_interfaces_list #ChdAdaEntityInterfacesListFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration17 ^ #(#entity_definition_interfaces_list #ChdEntityDefinitionInterfacesListFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration18 ^ #(#record_ads_code #ChdRecordAdsCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration19 ^ #(#record_initialize_code #ChdRecordInitializeCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration20 ^ #(#record_adb_code #ChdRecordAdbCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration21 ^ #(#record_put_code #ChdRecordPutCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration22 ^ #(#explicit_attribute_put #ChdExplicitAttributePutFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration23 ^ #(#explicit_attribute_xml_writer_code #ChdExplicitAttributeXmlWriterCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration24 ^ #(#record_copy_code #ChdRecordCopyCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration25 ^ #(#ada_class_xml_io_record_code #ChdAdaClassXmlIoRecordCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration26 ^ #(#ada_entity_attributes_xml_io_record_code #ChdAdaEntityAttributesXmlIoRecordCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration27 ^ #(#explicit_attribute_xml_io_record_code #ChdExplicitAttributeXmlIoRecordCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration28 ^ #(#record_xml_io_record_code #ChdRecordXmlIoRecordCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration29 ^ #(#ada_entity_xml_io_record_initialize_code #ChdAdaEntityXmlIoRecordInitializeCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration30 ^ #(#ada_entity_attributes_xml_io_record_initialize_code #ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration31 ^ #(#explicit_attribute_xml_io_record_initialize_code #ChdExplicitAttributeXmlIoRecordInitializeCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration32 ^ #(#ada_entity_xml_start_element_code #ChdAdaEntityXmlStartElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration33 ^ #(#ada_entity_attributes_xml_start_element_code #ChdAdaEntityAttributesXmlStartElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration34 ^ #(#explicit_attribute_xml_end_element_code #ChdExplicitAttributeXmlEndElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration35 ^ #(#explicit_attribute_xml_start_element_code #ChdExplicitAttributeXmlStartElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration36 ^ #(#ada_entity_xml_end_element_code #ChdAdaEntityXmlEndElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration37 ^ #(#ada_entity_attributes_xml_end_element_code #ChdAdaEntityAttributesXmlEndElementCodeFunction) ! ! !ChdRecordAndClassSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 37 ! ! PltEntityDefinition subclass: #ChdAdaEntity instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntity class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntity class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntity class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntity commentStamp: 'platypus comment' prior: 0! ENTITY ada_entity ABSTRACT SUPERTYPE SUBTYPE OF ( entity_definition ); DERIVE refed_by_pointer : BOOLEAN := false; ada_ident : STRING := name; ada_ref_ident : STRING := SELF.ada_ident; ptr_type : STRING := name + '_Ptr'; explicit_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ); derived_attributes : LIST OF explicit_attribute := QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' IN TYPEOF ( a ) ); put_prefix : STRING := ''; dependencies : LIST OF dictionary_instance := dependencies_of_ada_entity ( SELF.owner, SELF ); xml_writer_code : STRING := ?; xml_io_record_code : STRING := ?; html_tag : STRING := Lowerize ( SELF.name ); END_ENTITY; ! !ChdAdaEntity methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdAdaEntity methodsFor: 'platypus-generated-classifying'! isChdAdaEntity ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-RecordAndClassSchema-classifying'! isChdAdaEntity ^ false ! ! !ChdAdaEntity methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaEntity: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingRecordAndClass'! acceptAdaEntity: e "my subclasses have to redefine it" ! ! !ChdAdaEntity methodsFor: 'platypus-generated-copying'! adaEntityCopyTo: another ! ! !ChdAdaEntity methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaEntityCopyTo: another ! ! !ChdAdaEntity methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaEntityCopyTo: another ! ! !ChdAdaEntity methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! adaEntityFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! adaEntityToValues: values ^ values ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaEntityToValues: (super toValues: values) ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaEntityFromValues: (super fromValues: values) ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaEntityFromValues: values ! ! !ChdAdaEntity methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaEntityToValues: values ! ! !ChdAdaEntity class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! !ChdAdaEntity class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver adaIdentUsingContext: aContext ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext ^ self ptrTypeUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext receiver: aReceiver ^ aReceiver name pltPlus: '_Ptr' ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! ptrType ^ self ptrTypeUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! explicitAttributesUsingContext: aContext ^ self explicitAttributesUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! explicitAttributesUsingContext: aContext receiver: aReceiver ^ aReceiver attributes select: [ :a1958 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a1958; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' ] ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! explicitAttributes ^ self explicitAttributesUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! derivedAttributesUsingContext: aContext ^ self derivedAttributesUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! derivedAttributesUsingContext: aContext receiver: aReceiver ^ aReceiver attributes select: [ :a4045 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a4045; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.DERIVED_ATTRIBUTE' ] ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! derivedAttributes ^ self derivedAttributesUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext ^ self putPrefixUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! putPrefixUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! putPrefix ^ self putPrefixUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext ^ self dependenciesUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext receiver: aReceiver ^ ChdDependenciesOfAdaEntityFunction invokeFromValues: (OrderedCollection new add: (aReceiver ownerUsingContext: self class context); add: aReceiver; yourself) ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! dependencies ^ self dependenciesUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext ^ self xmlWriterCodeUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlWriterCode ^ self xmlWriterCodeUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext ^ self xmlIoRecordCodeUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! xmlIoRecordCode ^ self xmlIoRecordCodeUsingContext: self class context ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! htmlTagUsingContext: aContext ^ self htmlTagUsingContext: aContext receiver: self ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! htmlTagUsingContext: aContext receiver: aReceiver ^ PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver nameUsingContext: self class context); yourself) ! ! !ChdAdaEntity methodsFor: 'platypus-generated-deriving'! htmlTag ^ self htmlTagUsingContext: self class context ! ! ChdAdaEntity subclass: #ChdAdaClass instanceVariableNames: 'isPrivate' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClass class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClass class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClass class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClass commentStamp: 'platypus comment' prior: 0! ENTITY ada_class SUBTYPE OF ( ada_entity ); is_private : BOOLEAN; DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := true; ads_code : STRING := ada_class_ads_code ( SELF, is_private ); adb_code : STRING := ada_class_adb_code ( SELF ); init_value : STRING := ?; ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.ada_ref_ident : STRING := SELF.ptr_type; SELF\ada_entity.xml_writer_code : STRING := ada_class_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := ada_class_xml_io_record_code ( SELF ); END_ENTITY; ! !ChdAdaClass methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. isPrivate := false ! ! !ChdAdaClass methodsFor: 'platypus-generated-classifying'! isChdAdaClass ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-RecordAndClassSchema-classifying'! isChdAdaClass ^ false ! ! !ChdAdaClass methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaClass: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingRecordAndClass'! acceptAdaClass: e "my subclasses have to redefine it" ! ! !ChdAdaClass methodsFor: 'platypus-generated-copying'! adaClassCopyTo: another another fastSetIsPrivate: self isPrivate ! ! !ChdAdaClass methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaClassCopyTo: another ! ! !ChdAdaClass methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaClassCopyTo: another ! ! !ChdAdaClass methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! adaClassFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setIsPrivate: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! adaClassToValues: values values add: self isPrivate. ^ values ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaClassToValues: (super toValues: values) ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaClassFromValues: (super fromValues: values) ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaClassFromValues: values ! ! !ChdAdaClass methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaClassToValues: values ! ! !ChdAdaClass class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! !ChdAdaClass class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaClass methodsFor: 'platypus-generated-accessing'! isPrivate ^ isPrivate ! ! !ChdAdaClass methodsFor: 'platypus-generated-set-accessing'! setIsPrivate: aBoolean self isPrivate: aBoolean ! ! !ChdAdaClass methodsFor: 'platypus-generated-accessing'! isPrivate: aBoolean isPrivate := aBoolean ! ! !ChdAdaClass methodsFor: 'platypus-generated-fast-set-accessing'! fastSetIsPrivate: aBoolean isPrivate := aBoolean ! ! !ChdAdaClass methodsFor: 'platypus-generated-with-context-accessing'! isPrivateUsingContext: aContext ^ self isPrivate ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ true ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdAdaClassAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: aReceiver isPrivate; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ ChdAdaClassAdbCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdAdaEntityInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdAdaEntityInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver ptrTypeUsingContext: aContext ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext ^ self xmlWriterCodeUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext receiver: aReceiver ^ ChdAdaClassXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlWriterCode ^ self xmlWriterCodeUsingContext: self class context ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext ^ self xmlIoRecordCodeUsingContext: aContext receiver: self ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext receiver: aReceiver ^ ChdAdaClassXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdAdaClass methodsFor: 'platypus-generated-deriving'! xmlIoRecordCode ^ self xmlIoRecordCodeUsingContext: self class context ! ! ChdAdaEntity subclass: #ChdRecord instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecord class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecord class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecord class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecord commentStamp: 'platypus comment' prior: 0! ENTITY record SUBTYPE OF ( ada_entity ); DERIVE ads_code : STRING := record_ads_code ( SELF ); adb_code : STRING := record_adb_code ( SELF ); ads_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := ada_entity_interfaces_list ( SELF, false ); SELF\ada_entity.xml_writer_code : STRING := record_xml_writer_code ( SELF ); SELF\ada_entity.xml_io_record_code : STRING := record_xml_io_record_code ( SELF ); END_ENTITY; ! !ChdRecord methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdRecord methodsFor: 'platypus-generated-classifying'! isChdRecord ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-RecordAndClassSchema-classifying'! isChdRecord ^ false ! ! !ChdRecord methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptRecord: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingRecordAndClass'! acceptRecord: e "my subclasses have to redefine it" ! ! !ChdRecord methodsFor: 'platypus-generated-copying'! recordCopyTo: another ! ! !ChdRecord methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self recordCopyTo: another ! ! !ChdRecord methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self recordCopyTo: another ! ! !ChdRecord methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! recordFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! recordToValues: values ^ values ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self recordToValues: (super toValues: values) ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self recordFromValues: (super fromValues: values) ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self recordFromValues: values ! ! !ChdRecord methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self recordToValues: values ! ! !ChdRecord class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! !ChdRecord class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdRecordAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ ChdRecordAdbCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdAdaEntityInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdAdaEntityInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext ^ self xmlWriterCodeUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlWriterCodeUsingContext: aContext receiver: aReceiver ^ ChdRecordXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlWriterCode ^ self xmlWriterCodeUsingContext: self class context ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext ^ self xmlIoRecordCodeUsingContext: aContext receiver: self ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext receiver: aReceiver ^ ChdRecordXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdRecord methodsFor: 'platypus-generated-deriving'! xmlIoRecordCode ^ self xmlIoRecordCodeUsingContext: self class context ! ! PltEntityDefinition subclass: #ChdCheddarFunctionPtr instanceVariableNames: 'arguments returns' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdCheddarFunctionPtr class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdCheddarFunctionPtr class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdCheddarFunctionPtr class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdCheddarFunctionPtr commentStamp: 'platypus comment' prior: 0! ENTITY cheddar_function_ptr SUBTYPE OF ( entity_definition ); arguments : STRING; returns : STRING; DERIVE ads_interface_list : LIST OF ada_interface := [ ]; adb_interface_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'Type ' + SELF.name + ' is access function (' + SELF.arguments + ') return ' + SELF.returns + ';'; adb_code : STRING := ''; dependencies : LIST OF dictionary_instance := [ SELF ]; refed_by_pointer : BOOLEAN := false; END_ENTITY; ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. arguments := ''. returns := '' ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-classifying'! isChdCheddarFunctionPtr ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-RecordAndClassSchema-classifying'! isChdCheddarFunctionPtr ^ false ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptCheddarFunctionPtr: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingRecordAndClass'! acceptCheddarFunctionPtr: e "my subclasses have to redefine it" ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-copying'! cheddarFunctionPtrCopyTo: another another fastSetArguments: self arguments. another fastSetReturns: self returns ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self cheddarFunctionPtrCopyTo: another ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self cheddarFunctionPtrCopyTo: another ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! cheddarFunctionPtrFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setArguments: valuesloc removeFirst. self setReturns: valuesloc removeFirst. ^ valuesloc ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! cheddarFunctionPtrToValues: values values add: self arguments. values add: self returns. ^ values ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self cheddarFunctionPtrToValues: (super toValues: values) ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self cheddarFunctionPtrFromValues: (super fromValues: values) ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self cheddarFunctionPtrFromValues: values ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self cheddarFunctionPtrToValues: values ! ! !ChdCheddarFunctionPtr class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! !ChdCheddarFunctionPtr class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-accessing'! arguments ^ arguments ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-set-accessing'! setArguments: aString self arguments: aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-accessing'! arguments: aString arguments := aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-fast-set-accessing'! fastSetArguments: aString arguments := aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-with-context-accessing'! argumentsUsingContext: aContext ^ self arguments ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-accessing'! returns ^ returns ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-set-accessing'! setReturns: aString self returns: aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-accessing'! returns: aString returns := aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-fast-set-accessing'! fastSetReturns: aString returns := aString ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-with-context-accessing'! returnsUsingContext: aContext ^ self returns ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsInterfaceListUsingContext: aContext ^ self adsInterfaceListUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsInterfaceListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsInterfaceList ^ self adsInterfaceListUsingContext: self class context ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbInterfaceListUsingContext: aContext ^ self adbInterfaceListUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbInterfaceListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbInterfaceList ^ self adbInterfaceListUsingContext: self class context ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ((((('Type ' pltPlus: (aReceiver nameUsingContext: aContext)) pltPlus: ' is access function (') pltPlus: (aReceiver argumentsUsingContext: aContext)) pltPlus: ') return ') pltPlus: (aReceiver returnsUsingContext: aContext)) pltPlus: ';' ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext ^ self dependenciesUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! dependencies ^ self dependenciesUsingContext: self class context ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdCheddarFunctionPtr methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdIsGenericObjectFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdIsGenericObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdIsGenericObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdIsGenericObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdIsGenericObjectFunction commentStamp: 'platypus comment' prior: 0! FUNCTION is_generic_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'generic_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ! !ChdIsGenericObjectFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdEntityInstance ^ self new e: aChdEntityInstance ! ! !ChdIsGenericObjectFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdIsGenericObjectFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111436259! e: aChdEntityInstance e := aChdEntityInstance ! ! !ChdIsGenericObjectFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdIsGenericObjectFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ ^ self return: (PTsInheritsFromEntityNamedFunction invokeFromValues: (OrderedCollection new add: self e; add: 'generic_object'; yourself)) ]. ^ self return: false ! ! !ChdIsGenericObjectFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdIsNamedObjectFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdIsNamedObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdIsNamedObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdIsNamedObjectFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdIsNamedObjectFunction commentStamp: 'platypus comment' prior: 0! FUNCTION is_named_object ( e : entity_instance ) : BOOLEAN; IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ) THEN RETURN ( inherits_from_entity_named ( e, 'named_object' ) ); END_IF; RETURN ( false ); END_FUNCTION; ! !ChdIsNamedObjectFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdEntityInstance ^ self new e: aChdEntityInstance ! ! !ChdIsNamedObjectFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdIsNamedObjectFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111438390! e: aChdEntityInstance e := aChdEntityInstance ! ! !ChdIsNamedObjectFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdIsNamedObjectFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ ^ self return: (PTsInheritsFromEntityNamedFunction invokeFromValues: (OrderedCollection new add: self e; add: 'named_object'; yourself)) ]. ^ self return: false ! ! !ChdIsNamedObjectFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDependenciesOfAdaEntityFunction instanceVariableNames: 'o t r attrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdDependenciesOfAdaEntityFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDependenciesOfAdaEntityFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDependenciesOfAdaEntityFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDependenciesOfAdaEntityFunction commentStamp: 'platypus comment' prior: 0! FUNCTION dependencies_of_ada_entity ( o : context_definition; t : ada_entity ) : LIST OF dictionary_instance; LOCAL r : LIST OF dictionary_instance := [ ]; attrs : LIST OF attribute := inherited_explicit_attributes ( t ); END_LOCAL; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); r := r + dependencies_of ( o, attrs [ no].domain.handled ); END_REPEAT; r := r + t; RETURN ( r ); END_FUNCTION; ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-instance-creation'! o: aChdContextDefinition t: aChdAdaEntity ^ self new o: aChdContextDefinition t: aChdAdaEntity ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self o: (values at: 1). self t: (values at: 2) ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111440767! o: aChdContextDefinition t: aChdAdaEntity self o: aChdContextDefinition. self t: aChdAdaEntity ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! o: aChdContextDefinition o := aChdContextDefinition ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! t: aChdAdaEntity t := aChdAdaEntity ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! r: aListOfChdDictionaryInstance r := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! o ^ o ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! t ^ t ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdDependenciesOfAdaEntityFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self r: Array new. self attrs: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self t; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3235 | self r: (self r pltPlus: (ChdDependenciesOfFunction invokeFromValues: (OrderedCollection new add: self o; add: (((self attrs pltAt: no3235) domainUsingContext: self class context) handledUsingContext: self class context); yourself))) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)). self r: (self r pltPlus: self t). ^ self return: self r ! ! !ChdDependenciesOfAdaEntityFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassAdsCodeFunction instanceVariableNames: 'cip withPrivate result abstr localSup ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_ads_code ( cip : ada_class; with_private : BOOLEAN ) : STRING; LOCAL result : STRING; abstr : STRING := ''; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; result := '\n' + '-- --------= ' + cip.name + ' =--------\n\n' + 'type ' + cip.name + ';' + '\ntype ' + cip.ptr_type + ' is access all ' + cip.name + '''Class;\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS supref FOR cip.supertypes [ 1 ].ref; result := result + 'type ' + cip.name + ' is ' + abstr + 'new ' + supref.ada_ident + ' with '; END_ALIAS; ELSE result := result + 'type ' + cip.name + ' is ' + abstr + 'new Ada.Finalization.Controlled with '; END_IF; IF with_private THEN result := result + 'private;\n'; ELSE result := result + ada_class_attributes_ads_code ( cip ); END_IF; result := result + '\nprocedure Initialize(obj : in out ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.name + ');\n' + 'procedure Put(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Put_Name(obj : in ' + cip.ptr_type + ');\n'; result := result + 'procedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; IF is_named_object ( cip ) THEN result := result + 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String;\n' + 'function Get_Name (obj : in ' + cip.ptr_type + ') return Unbounded_String;\n'; END_IF; result := result + 'function Copy(obj : in ' + cip.ptr_type + ') return ' + local_sup.ptr_type + ';\n' + 'function Copy(obj : in ' + cip.name + ') return ' + local_sup.ptr_type + ';\n' + 'function type_of(obj : in ' + cip.name + ') return unbounded_string_list;\n' + 'function type_of(obj : in ' + cip.ptr_type + ') return unbounded_string_list;\n' + 'procedure Free is new Unchecked_Deallocation (' + cip.name + '''Class, ' + cip.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass withPrivate: aBoolean ^ self new cip: aChdAdaClass withPrivate: aBoolean ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1). self withPrivate: (values at: 2) ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111446642! cip: aChdAdaClass withPrivate: aBoolean self cip: aChdAdaClass. self withPrivate: aBoolean ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! withPrivate: aBoolean withPrivate := aBoolean ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! abstr: aString1 abstr := aString1 ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! localSup: aChdEntityDefinition localSup := aChdEntityDefinition ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! withPrivate ^ withPrivate ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! abstr ^ abstr ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-accessing'! localSup ^ localSup ! ! !ChdAdaClassAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self abstr: ''. self localSup: (PTsLocalRootSupertypeOfFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)). " ---------- statements ----------" self result: ((((((((((('\n' pltPlus: '-- --------= ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' =--------\n\n') pltPlus: 'type ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ';') pltPlus: '\ntype ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' is access all ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '''Class;\n'). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :supref1921 | self result: (((((((self result pltPlus: 'type ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' is ') pltPlus: self abstr) pltPlus: 'new ') pltPlus: (supref1921 adaIdentUsingContext: self class context)) pltPlus: ' with ') ] ] ifFalse: [ self result: (((((self result pltPlus: 'type ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' is ') pltPlus: self abstr) pltPlus: 'new Ada.Finalization.Controlled with ') ]. self withPrivate ifTrue: [ self result: (self result pltPlus: 'private;\n') ] ifFalse: [ self result: (self result pltPlus: (ChdAdaClassAttributesAdsCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) ]. self result: (((((((((self result pltPlus: '\nprocedure Initialize(obj : in out ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ');\n'). self result: (((self result pltPlus: 'procedure Put_Name(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ');\n'). self result: (((((((((((((((self result pltPlus: 'procedure Build_Attributes_XML_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '; result : in out Unbounded_String);\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n'). (ChdIsNamedObjectFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)) ifTrue: [ self result: ((((((self result pltPlus: 'function Get_Name (obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function Get_Name (obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') ]. self result: (((((((((((((((((((((self result pltPlus: 'function Copy(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self localSup ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'function Copy(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self localSup ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'function type_of(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return unbounded_string_list;\n') pltPlus: 'function type_of(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return unbounded_string_list;\n') pltPlus: 'procedure Free is new Unchecked_Deallocation (') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '''Class, ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ');\n'). ^ self return: self result ! ! !ChdAdaClassAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassAdbCodeFunction instanceVariableNames: 'cip code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_adb_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + cip.name + ' =--------\n' + ada_class_initialize_code ( cip ) + '\n' + ada_class_copy_code ( cip ) + '\n' + ada_class_put_code ( cip ) + '\n'; IF is_named_object ( cip ) THEN code := code + ada_class_get_name_code ( cip ) + '\n'; END_IF; code := code + ada_class_typeof_code ( cip ) + '\n' + ada_class_xml_writer_code ( cip ) + '\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111454452! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: ((((((((('\n' pltPlus: '-- --------= ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' =--------\n') pltPlus: (ChdAdaClassInitializeCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n') pltPlus: (ChdAdaClassCopyCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n') pltPlus: (ChdAdaClassPutCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n'). (ChdIsNamedObjectFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)) ifTrue: [ self code: ((self code pltPlus: (ChdAdaClassGetNameCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n') ]. self code: ((((self code pltPlus: (ChdAdaClassTypeofCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n') pltPlus: (ChdAdaClassXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\n'). ^ self return: self code ! ! !ChdAdaClassAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassXmlWriterCodeFunction instanceVariableNames: 'cip code contents sub ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassXmlWriterCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_xml_writer_code ( cip : ada_class ) : STRING; LOCAL code : STRING; contents : STRING := ''; sub : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; contents := contents + '\tBuild_Attributes_XML_String(' + sup.name + '(obj), result);\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; sub := explicit_attribute_xml_writer_code ( 'obj', attr ); IF sub > '' THEN contents := contents + sub + '\n'; END_IF; END_ALIAS; END_REPEAT; IF contents = '' THEN contents := '\tnull;\n'; END_IF; code := code + contents + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' id=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" >");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + ' ref=""") & obj.' + xml_id_name + ' & to_unbounded_string(""" />");\n' + '\treturn (result);\n' + 'end XML_Ref_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + '\treturn XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111459749! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! contents: aString1 contents := aString1 ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! sub: aString2 sub := aString2 ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! sub ^ sub ! ! !ChdAdaClassXmlWriterCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self contents: ''. " ---------- statements ----------" self code: (('\nprocedure Build_Attributes_XML_String(obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '; result : in out Unbounded_String) is \nbegin\n'). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup806 | self contents: (((self contents pltPlus: '\tBuild_Attributes_XML_String(') pltPlus: (sup806 nameUsingContext: self class context)) pltPlus: '(obj), result);\n') ] ]. PlatypusCoreRepeatStatement repeat: [ :no3326 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no3326) statementsBlock: [ :attr1692 | self sub: (ChdExplicitAttributeXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: 'obj'; add: attr1692; yourself)). self sub > '' ifTrue: [ self contents: ((self contents pltPlus: self sub) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). self contents = '' ifTrue: [ self contents: '\tnull;\n' ]. self code: ((((((((((((((((((((((((((((((((((((((((((((((self code pltPlus: self contents) pltPlus: 'end Build_Attributes_XML_String;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: '\tresult := to_unbounded_string("<') pltPlus: (self cip htmlTagUsingContext: self class context)) pltPlus: ' id=""") & obj.') pltPlus: 'cheddar_private_id') pltPlus: ' & to_unbounded_string(""" >");\n') pltPlus: '\tBuild_Attributes_XML_String(obj, result);\n') pltPlus: '\tresult := result & to_unbounded_string("");\n') pltPlus: '\treturn (result);\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: ' if obj /= null then\n') pltPlus: ' return XML_String(obj.all);\n') pltPlus: ' else\n') pltPlus: ' return Empty_String;\n') pltPlus: ' end if;\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: '\tresult := to_unbounded_string("<') pltPlus: (self cip htmlTagUsingContext: self class context)) pltPlus: ' ref=""") & obj.') pltPlus: 'cheddar_private_id') pltPlus: ' & to_unbounded_string(""" />");\n') pltPlus: '\treturn (result);\n') pltPlus: 'end XML_Ref_String;\n\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: '\treturn XML_Ref_String(obj.all);\n') pltPlus: 'end XML_Ref_String;\n\n'). ^ self return: self code ! ! !ChdAdaClassXmlWriterCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordXmlWriterCodeFunction instanceVariableNames: 'cip code acode ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordXmlWriterCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_xml_writer_code ( cip : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := '\nprocedure Build_Attributes_XML_String(obj : in ' + cip.name + '; result : in out Unbounded_String) is \nbegin\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Build_Attributes_XML_String;\n\n' + 'function XML_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + '\tresult := to_unbounded_string("<' + cip.html_tag + '>");\n' + '\tBuild_Attributes_XML_String(obj, result);\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + cip.ptr_type + ') return Unbounded_String is\n' + 'begin\n' + ' if obj /= null then\n' + ' return XML_String(obj.all);\n' + ' else\n' + ' return Empty_String;\n' + ' end if;\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + cip.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n'; RETURN ( code ); END_FUNCTION; ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdRecord ^ self new cip: aChdRecord ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111467396! cip: aChdRecord cip := aChdRecord ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! acode: aString1 acode := aString1 ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! acode ^ acode ! ! !ChdRecordXmlWriterCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: (('\nprocedure Build_Attributes_XML_String(obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '; result : in out Unbounded_String) is \nbegin\n'). PlatypusCoreRepeatStatement repeat: [ :no1553 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no1553) statementsBlock: [ :attr4015 | self acode: (ChdExplicitAttributeXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: 'obj'; add: attr4015; yourself)). self acode > '' ifTrue: [ self code: ((self code pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). self code: (((((((((((((((((((((((((((((((((self code pltPlus: 'end Build_Attributes_XML_String;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: '\tresult := to_unbounded_string("<') pltPlus: (self cip htmlTagUsingContext: self class context)) pltPlus: '>");\n') pltPlus: '\tBuild_Attributes_XML_String(obj, result);\n') pltPlus: '\tresult := result & to_unbounded_string("");\n') pltPlus: '\treturn (result);\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: ' if obj /= null then\n') pltPlus: ' return XML_String(obj.all);\n') pltPlus: ' else\n') pltPlus: ' return Empty_String;\n') pltPlus: ' end if;\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: ' raise xml_ref_string_error;\n') pltPlus: ' return to_unbounded_string("");\n') pltPlus: 'end XML_Ref_String;\n'). ^ self return: self code ! ! !ChdRecordXmlWriterCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassInitializeCodeFunction instanceVariableNames: 'cip code innerCode attrs init ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : in out ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; innerCode := innerCode + '\tinitialize(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( cip.derived_attributes ) TO HIINDEX ( cip.derived_attributes ); ALIAS attr FOR cip.derived_attributes [ no]; init := derived_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111473209! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! innerCode: aString1 innerCode := aString1 ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init: aString2 init := aString2 ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! innerCode ^ innerCode ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdAdaClassInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self innerCode: ''. " ---------- statements ----------" self code: (('\nprocedure Initialize(obj : in out ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') is \nbegin\n'). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup1666 | self innerCode: (((self innerCode pltPlus: '\tinitialize(') pltPlus: (sup1666 nameUsingContext: self class context)) pltPlus: '(obj));\n') ] ]. PlatypusCoreRepeatStatement repeat: [ :no86 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no86) statementsBlock: [ :attr2548 | self init: (ChdExplicitAttributeInitializeFunction invokeFromValues: (OrderedCollection new add: attr2548; yourself)). ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) and: [ self init > '' ]) ifTrue: [ self innerCode: (((self innerCode pltPlus: '\t') pltPlus: self init) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). PlatypusCoreRepeatStatement repeat: [ :no632 | PlatypusCoreAliasStatement alias: ((self cip derivedAttributesUsingContext: self class context) pltAt: no632) statementsBlock: [ :attr3094 | self init: (ChdDerivedAttributeInitializeFunction invokeFromValues: (OrderedCollection new add: attr3094; yourself)). ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) and: [ self init > '' ]) ifTrue: [ self innerCode: (((self innerCode pltPlus: '\t') pltPlus: self init) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip derivedAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip derivedAttributesUsingContext: self class context); yourself)). self innerCode = '' ifTrue: [ self innerCode: '\tnull;\n' ]. self code: ((self code pltPlus: self innerCode) pltPlus: 'end Initialize;\n'). ^ self return: self code ! ! !ChdAdaClassInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeInitializeFunction instanceVariableNames: 'attr domain init ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeInitializeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL domain : dictionary_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( attr.name = xml_id_name ) THEN RETURN ( 'generate_id( framework_id, obj.' + attr.name + ' );' ); END_IF; IF ( 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE' IN TYPEOF ( attr ) ) THEN RETURN ( attr.init_code ); END_IF; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN init := domain.handled.init_value; END_IF; IF NOT EXISTS ( init ) THEN RETURN ( ? ); ELSE IF init <> 'initialize' THEN RETURN ( 'obj.' + attr.name + ' := ' + init + ';' ); ELSE IF domain.handled.refed_by_pointer THEN RETURN ( 'initialize( obj.' + attr.name + '.all);' ); ELSE RETURN ( 'initialize( obj.' + attr.name + ');' ); END_IF; END_IF; END_IF; END_FUNCTION; ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111479757! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdDictionaryInstance domain := aChdDictionaryInstance ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! init: aString init := aString ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdExplicitAttributeInitializeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). self init: (self domain initValueUsingContext: self class context). " ---------- statements ----------" (self attr nameUsingContext: self class context) = 'cheddar_private_id' ifTrue: [ ^ self return: (('generate_id( framework_id, obj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' );') ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self attr; yourself)) includes: 'CHEDDAR_DOMAINS.IN_SCOPE_ATTRIBUTE') ifTrue: [ ^ self return: (self attr initCodeUsingContext: self class context) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.CHEDDAR_PRIMITIVE_TYPE') ifTrue: [ self init: ((self domain handledUsingContext: self class context) initValueUsingContext: self class context) ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) not ifTrue: [ ^ self return: nil ] ifFalse: [ self init ~= 'initialize' ifTrue: [ ^ self return: (((('obj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := ') pltPlus: self init) pltPlus: ';') ] ifFalse: [ ((self domain handledUsingContext: self class context) refedByPointerUsingContext: self class context) ifTrue: [ ^ self return: (('initialize( obj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: '.all);') ] ifFalse: [ ^ self return: (('initialize( obj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ');') ] ] ] ! ! !ChdExplicitAttributeInitializeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDerivedAttributeInitializeFunction instanceVariableNames: 'attr code val key ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdDerivedAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDerivedAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDerivedAttributeInitializeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDerivedAttributeInitializeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION derived_attribute_initialize ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; val : STRING; key : STRING := upperize ( attr.name ); END_LOCAL; IF EXISTS ( attr.redeclaring ) THEN IF SIZEOF ( QUERY ( a <* inherited_explicit_attributes ( attr.owner ) | upperize ( a.name ) = key ) ) > 0 THEN val := basic_ada_type_value_format ( attr.assign, ? ).formated; code := 'obj.' + attr.name + ' := ' + val + ';'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111484230! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! val: aString1 val := aString1 ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! key: aString2 key := aString2 ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! val ^ val ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !ChdDerivedAttributeInitializeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (self attr nameUsingContext: self class context); yourself)). " ---------- statements ----------" (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (self attr redeclaringUsingContext: self class context); yourself)) ifTrue: [ (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: (self attr ownerUsingContext: self class context); yourself)) select: [ :a2436 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a2436 nameUsingContext: self class context); yourself)) = self key ]); yourself)) > 0 ifTrue: [ self val: ((ChdBasicAdaTypeValueFormat new basicAdaTypeValueFormatFromValues: (OrderedCollection new add: (self attr assignUsingContext: self class context); add: nil; yourself); yourself) formatedUsingContext: self class context). self code: (((('obj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := ') pltPlus: self val) pltPlus: ';') ] ]. ^ self return: self code ! ! !ChdDerivedAttributeInitializeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassTypeofCodeFunction instanceVariableNames: 'cip code sups ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassTypeofCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassTypeofCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassTypeofCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassTypeofCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_typeof_code ( cip : ada_class ) : STRING; LOCAL code : STRING; sups : LIST OF entity_definition := all_supertypes_of ( cip ); END_LOCAL; code := 'function type_of ( obj : in ' + cip.name + ' ) return unbounded_string_list is\n' + '\tlist : unbounded_string_list;\n' + '\ts : unbounded_string_ptr;\n' + 'begin\n' + '\t' + 'Initialize(list);\n' + '\n'; REPEAT no := LOINDEX ( sups ) TO HIINDEX ( sups ); ALIAS curr FOR sups [ no]; code := code + '\t' + 's := new unbounded_string;\n' + '\t' + 's.all := to_unbounded_string("' + upperize ( curr.owner.name ) + '.' + upperize ( curr.name ) + '");\n' + '\t' + 'Add (list, s);\n' + '\n'; END_ALIAS; END_REPEAT; code := code + '\treturn list;\nend type_of;\n\n' + 'function type_of ( obj : in ' + cip.ptr_type + ' ) return unbounded_string_list is\n' + 'begin\n' + '\treturn type_of(obj.all);\n' + 'end type_of;\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111488889! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! sups: aListOfChdEntityDefinition sups := aListOfChdEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityDefinition as: OrderedCollection ] ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-accessing'! sups ^ sups ! ! !ChdAdaClassTypeofCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self sups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)). " ---------- statements ----------" self code: (((((((('function type_of ( obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' ) return unbounded_string_list is\n') pltPlus: '\tlist : unbounded_string_list;\n') pltPlus: '\ts : unbounded_string_ptr;\n') pltPlus: 'begin\n') pltPlus: '\t') pltPlus: 'Initialize(list);\n') pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no3040 | PlatypusCoreAliasStatement alias: (self sups pltAt: no3040) statementsBlock: [ :curr429 | self code: (((((((((((self code pltPlus: '\t') pltPlus: 's := new unbounded_string;\n') pltPlus: '\t') pltPlus: 's.all := to_unbounded_string("') pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: ((curr429 ownerUsingContext: self class context) nameUsingContext: self class context); yourself))) pltPlus: '.') pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr429 nameUsingContext: self class context); yourself))) pltPlus: '");\n') pltPlus: '\t') pltPlus: 'Add (list, s);\n') pltPlus: '\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self sups; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self sups; yourself)). self code: (((((((self code pltPlus: '\treturn list;\nend type_of;\n\n') pltPlus: 'function type_of ( obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' ) return unbounded_string_list is\n') pltPlus: 'begin\n') pltPlus: '\treturn type_of(obj.all);\n') pltPlus: 'end type_of;\n'). ^ self return: self code ! ! !ChdAdaClassTypeofCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassCopyCodeFunction instanceVariableNames: 'cip code v localSup ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassCopyCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_copy_code ( cip : ada_class ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; local_sup : entity_definition := local_root_supertype_of ( cip ); END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + local_sup.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; IF local_sup.ptr_type <> cip.ptr_type THEN code := code + '\treturn ' + local_sup.ptr_type + '(' + v + ');\n'; ELSE code := code + '\treturn (' + v + ');\n'; END_IF; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + local_sup.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111493746! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! v: aString1 v := aString1 ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! localSup: aChdEntityDefinition localSup := aChdEntityDefinition ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-accessing'! localSup ^ localSup ! ! !ChdAdaClassCopyCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self v: ('New_' pltPlus: (self cip nameUsingContext: self class context)). self localSup: (PTsLocalRootSupertypeOfFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)). " ---------- statements ----------" self code: ((((((((((((((('function Copy ( obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self localSup ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' : ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'begin\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' := new ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '''(obj);\n'). (self localSup ptrTypeUsingContext: self class context) ~= (self cip ptrTypeUsingContext: self class context) ifTrue: [ self code: (((((self code pltPlus: '\treturn ') pltPlus: (self localSup ptrTypeUsingContext: self class context)) pltPlus: '(') pltPlus: self v) pltPlus: ');\n') ] ifFalse: [ self code: (((self code pltPlus: '\treturn (') pltPlus: self v) pltPlus: ');\n') ]. self code: (((((((((self code pltPlus: 'end Copy;\n\n') pltPlus: 'function Copy ( obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self localSup ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: 'begin\n') pltPlus: '\treturn copy(obj.all);\n') pltPlus: 'end Copy;\n'). ^ self return: self code ! ! !ChdAdaClassCopyCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassPutCodeFunction instanceVariableNames: 'cip code acode ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassPutCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_put_code ( cip : ada_class ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + cip.name + ') is \nbegin\n'; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + '\tput(' + sup.name + '(obj));\n'; END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + cip.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n \n'; code := code + 'procedure Put_Name ( obj : in ' + cip.ptr_type + ') is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + '\tPut ( To_String ( Obj.Name ) );\n'; ELSE code := code + '\tPut ( To_String ( Obj.' + xml_id_name + ' ) );\n'; END_IF; code := code + 'end Put_Name;\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111498626! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! acode: aString1 acode := aString1 ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-accessing'! acode ^ acode ! ! !ChdAdaClassPutCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: (('procedure Put(obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') is \nbegin\n'). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup2457 | self code: (((self code pltPlus: '\tput(') pltPlus: (sup2457 nameUsingContext: self class context)) pltPlus: '(obj));\n') ] ]. PlatypusCoreRepeatStatement repeat: [ :no857 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no857) statementsBlock: [ :attr3319 | self acode: (ChdExplicitAttributePutFunction invokeFromValues: (OrderedCollection new add: attr3319; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). self code: (((((((self code pltPlus: 'end Put;\n \n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') is\n') pltPlus: 'begin\n') pltPlus: '\tPut(Obj.All);\n') pltPlus: 'end Put;\n \n'). self code: ((((self code pltPlus: 'procedure Put_Name ( obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ') is\n') pltPlus: 'begin\n'). (PTsHasInheritedAttributeNamedFunction invokeFromValues: (OrderedCollection new add: self cip; add: 'name'; yourself)) ifTrue: [ self code: (self code pltPlus: '\tPut ( To_String ( Obj.Name ) );\n') ] ifFalse: [ self code: (((self code pltPlus: '\tPut ( To_String ( Obj.') pltPlus: 'cheddar_private_id') pltPlus: ' ) );\n') ]. self code: (self code pltPlus: 'end Put_Name;\n'). ^ self return: self code ! ! !ChdAdaClassPutCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassGetNameCodeFunction instanceVariableNames: 'cip code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassGetNameCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassGetNameCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassGetNameCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassGetNameCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_get_name_code ( cip : ada_class ) : STRING; LOCAL code : STRING; END_LOCAL; code := 'function Get_Name (obj : in ' + cip.name + ') return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n\n' + 'function Get_Name (obj : in ' + cip.name + '_ptr) return Unbounded_String is\n' + 'begin\n'; IF has_inherited_attribute_named ( cip, 'name' ) THEN code := code + ' return obj.name;\n'; ELSE code := code + ' return obj.' + xml_id_name + ';\n'; END_IF; code := code + 'end Get_Name;\n'; RETURN ( code ); END_FUNCTION; ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111503844! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaClassGetNameCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: ((('function Get_Name (obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: 'begin\n'). (PTsHasInheritedAttributeNamedFunction invokeFromValues: (OrderedCollection new add: self cip; add: 'name'; yourself)) ifTrue: [ self code: (self code pltPlus: ' return obj.name;\n') ] ifFalse: [ self code: (((self code pltPlus: ' return obj.') pltPlus: 'cheddar_private_id') pltPlus: ';\n') ]. self code: (((((self code pltPlus: 'end Get_Name;\n\n') pltPlus: 'function Get_Name (obj : in ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_ptr) return Unbounded_String is\n') pltPlus: 'begin\n'). (PTsHasInheritedAttributeNamedFunction invokeFromValues: (OrderedCollection new add: self cip; add: 'name'; yourself)) ifTrue: [ self code: (self code pltPlus: ' return obj.name;\n') ] ifFalse: [ self code: (((self code pltPlus: ' return obj.') pltPlus: 'cheddar_private_id') pltPlus: ';\n') ]. self code: (self code pltPlus: 'end Get_Name;\n'). ^ self return: self code ! ! !ChdAdaClassGetNameCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassAttributesAdsCodeFunction instanceVariableNames: 'cip result domain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassAttributesAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_attributes_ads_code ( cip : ada_class ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; IF SIZEOF ( cip.explicit_attributes ) = 0 THEN result := 'null record;\n'; ELSE result := '\nrecord\n'; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) OR ( 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' IN TYPEOF ( domain.handled ) ) THEN result := result + ' ' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + ' ' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + 'end record;\n'; END_IF; RETURN ( result ); END_FUNCTION; ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111507695! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdAdaClassAttributesAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) = 0 ifTrue: [ self result: 'null record;\n' ] ifFalse: [ self result: '\nrecord\n'. PlatypusCoreRepeatStatement repeat: [ :no3467 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no3467) statementsBlock: [ :attr1963 | self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (attr1963 domainUsingContext: self class context); yourself)). (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE' ]) ifTrue: [ self result: (((((self result pltPlus: ' ') pltPlus: (attr1963 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: ((self domain handledUsingContext: self class context) ptrTypeUsingContext: self class context)) pltPlus: ';\n') ] ifFalse: [ self result: (((((self result pltPlus: ' ') pltPlus: (attr1963 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: ';\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). self result: (self result pltPlus: 'end record;\n') ]. ^ self return: self result ! ! !ChdAdaClassAttributesAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityInterfacesListFunction instanceVariableNames: 'r ads result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_interfaces_list ( r : ada_entity; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := entity_definition_interfaces_list ( r, ads ); END_LOCAL; IF ads THEN IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( r.owner ) THEN result := result + ada_interface ( r.owner.name, ?, true, true ); END_IF; IF ( SIZEOF ( r.supertypes ) > 0 ) THEN ALIAS supref FOR r.supertypes [ 1 ].ref; IF 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( supref.owner ) THEN result := result + ada_interface ( supref.owner.name, ?, true, true ); END_IF; END_ALIAS; END_IF; result := result + ada_interface ( 'Ada.Finalization', ?, true, false ); result := result + ada_interface ( 'unbounded_strings', ?, true, true ); result := result + ada_interface ( 'ada.strings', 'unbounded', true, true ); result := result + ada_interface ( 'unbounded_strings', 'Unbounded_String_List_Package', false, true ); result := result + ada_interface ( 'Unchecked_Deallocation', ?, true, false ); result := result + ada_interface ( 'Primitive_XML_Strings', ?, true, true ); ELSE IF has_attribute_named ( r, xml_id_name ) THEN result := result + ada_interface ( 'framework', ?, true, true ); result := result + ada_interface ( 'id_generators', ?, true, true ); END_IF; END_IF; RETURN ( result ); END_FUNCTION; ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdAdaEntity ads: aBoolean ^ self new r: aChdAdaEntity ads: aBoolean ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1). self ads: (values at: 2) ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111513359! r: aChdAdaEntity ads: aBoolean self r: aChdAdaEntity. self ads: aBoolean ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r: aChdAdaEntity r := aChdAdaEntity ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface result := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaEntityInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: (ChdEntityDefinitionInterfacesListFunction invokeFromValues: (OrderedCollection new add: self r; add: self ads; yourself)). " ---------- statements ----------" self ads ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self r ownerUsingContext: self class context); yourself)) includes: 'PACKAGE.ADA_PACKAGE') ifTrue: [ self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((self r ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself)) ]. (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self r supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self r supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :supref1359 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (supref1359 ownerUsingContext: self class context); yourself)) includes: 'PACKAGE.ADA_PACKAGE') ifTrue: [ self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((supref1359 ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself)) ] ] ]. self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada.Finalization'; add: nil; add: true; add: false; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'unbounded_strings'; add: nil; add: true; add: true; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'ada.strings'; add: 'unbounded'; add: true; add: true; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'unbounded_strings'; add: 'Unbounded_String_List_Package'; add: false; add: true; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unchecked_Deallocation'; add: nil; add: true; add: false; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Primitive_XML_Strings'; add: nil; add: true; add: true; yourself); yourself)) ] ifFalse: [ (PTsHasAttributeNamedFunction invokeFromValues: (OrderedCollection new add: self r; add: 'cheddar_private_id'; yourself)) ifTrue: [ self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'framework'; add: nil; add: true; add: true; yourself); yourself)). self result: (self result pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'id_generators'; add: nil; add: true; add: true; yourself); yourself)) ] ]. ^ self return: self result ! ! !ChdAdaEntityInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdEntityDefinitionInterfacesListFunction instanceVariableNames: 'r ads result adaDomain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdEntityDefinitionInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdEntityDefinitionInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdEntityDefinitionInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdEntityDefinitionInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION entity_definition_interfaces_list ( r : entity_definition; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL result : LIST OF ada_interface := [ ]; ada_domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( r.explicit_attributes ) TO HIINDEX ( r.explicit_attributes ); ALIAS curr FOR r.explicit_attributes [ no]; ada_domain := basic_ada_domain ( curr.domain ); result := result + domain_interfaces_list ( ada_domain, ads, r.owner ); END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdEntityDefinition ads: aBoolean ^ self new r: aChdEntityDefinition ads: aBoolean ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1). self ads: (values at: 2) ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111520805! r: aChdEntityDefinition ads: aBoolean self r: aChdEntityDefinition. self ads: aBoolean ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r: aChdEntityDefinition r := aChdEntityDefinition ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface result := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain: aChdEntityInstance adaDomain := aChdEntityInstance ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-accessing'! adaDomain ^ adaDomain ! ! !ChdEntityDefinitionInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3968 | PlatypusCoreAliasStatement alias: ((self r explicitAttributesUsingContext: self class context) pltAt: no3968) statementsBlock: [ :curr2291 | self adaDomain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (curr2291 domainUsingContext: self class context); yourself)). self result: (self result pltPlus: (ChdDomainInterfacesListFunction invokeFromValues: (OrderedCollection new add: self adaDomain; add: self ads; add: (self r ownerUsingContext: self class context); yourself))) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self r explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self r explicitAttributesUsingContext: self class context); yourself)). ^ self return: self result ! ! !ChdEntityDefinitionInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordAdsCodeFunction instanceVariableNames: 'rec result domain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_ads_code ( rec : record ) : STRING; LOCAL result : STRING; domain : entity_instance; END_LOCAL; result := '\n' + '-- --------= ' + rec.name + ' =--------\n \n' + 'type ' + rec.name + ' is\nrecord\n'; REPEAT no := LOINDEX ( rec.attributes ) TO HIINDEX ( rec.attributes ); result := result + ' ' + rec.attributes [ no].name + ' : '; domain := basic_ada_domain ( rec.attributes [ no].domain ); IF domain.handled.refed_by_pointer THEN result := result + domain.handled.ptr_type + ';\n'; ELSE result := result + domain.ada_ref_ident + ';\n'; END_IF; END_REPEAT; result := result + 'end record;\n\n' + 'type ' + rec.ptr_type + ' is access all ' + rec.name + ';\n\n' + 'procedure Initialize(obj : out ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.name + ');\n' + 'procedure Put(obj : in ' + rec.ptr_type + ');\n' + 'function Copy(obj : in ' + rec.ptr_type + ') return ' + rec.ptr_type + ';\n' + 'function Copy(obj : in ' + rec.name + ') return ' + rec.ptr_type + ';\n' + 'procedure Build_Attributes_XML_String(obj : in ' + rec.name + '; result : in out Unbounded_String);\n' + 'function XML_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'function XML_String(obj : in ' + rec.ptr_type + ') return Unbounded_String;\n' + 'function XML_Ref_String(obj : in ' + rec.name + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + rec.name + ', ' + rec.ptr_type + ');\n'; RETURN ( result ); END_FUNCTION; ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! rec: aChdRecord ^ self new rec: aChdRecord ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rec: (values at: 1) ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111526182! rec: aChdRecord rec := aChdRecord ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! rec ^ rec ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdRecordAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self result: (((((('\n' pltPlus: '-- --------= ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ' =--------\n \n') pltPlus: 'type ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ' is\nrecord\n'). PlatypusCoreRepeatStatement repeat: [ :no3398 | self result: (((self result pltPlus: ' ') pltPlus: (((self rec attributesUsingContext: self class context) pltAt: no3398) nameUsingContext: self class context)) pltPlus: ' : '). self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (((self rec attributesUsingContext: self class context) pltAt: no3398) domainUsingContext: self class context); yourself)). ((self domain handledUsingContext: self class context) refedByPointerUsingContext: self class context) ifTrue: [ self result: ((self result pltPlus: ((self domain handledUsingContext: self class context) ptrTypeUsingContext: self class context)) pltPlus: ';\n') ] ifFalse: [ self result: ((self result pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: ';\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec attributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec attributesUsingContext: self class context); yourself)). self result: ((((((((((((((((((((((((((((((((((((((((((self result pltPlus: 'end record;\n\n') pltPlus: 'type ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ' is access all ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ';\n\n') pltPlus: 'procedure Initialize(obj : out ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'function Copy(obj : in ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'function Copy(obj : in ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'procedure Build_Attributes_XML_String(obj : in ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: '; result : in out Unbounded_String);\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'procedure Free is new Unchecked_Deallocation (') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ', ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ');\n'). ^ self return: self result ! ! !ChdRecordAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordInitializeCodeFunction instanceVariableNames: 'rec code innerCode attrs init ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_initialize_code ( rec : record ) : STRING; LOCAL code : STRING; innerCode : STRING := ''; attrs : LIST OF attribute; init : STRING; END_LOCAL; code := '\nprocedure Initialize(obj : out ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; init := explicit_attribute_initialize ( attr ); IF ( EXISTS ( init ) AND ( init > '' ) ) THEN innerCode := innerCode + '\t' + init + '\n'; END_IF; END_ALIAS; END_REPEAT; IF innerCode = '' THEN innerCode := '\tnull;\n'; END_IF; code := code + innerCode + 'end Initialize;\n'; RETURN ( code ); END_FUNCTION; ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! rec: aChdRecord ^ self new rec: aChdRecord ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rec: (values at: 1) ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111532361! rec: aChdRecord rec := aChdRecord ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! innerCode: aString1 innerCode := aString1 ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init: aString2 init := aString2 ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! rec ^ rec ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! innerCode ^ innerCode ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self innerCode: ''. " ---------- statements ----------" self code: (('\nprocedure Initialize(obj : out ' pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ') is \nbegin\n'). PlatypusCoreRepeatStatement repeat: [ :no2200 | PlatypusCoreAliasStatement alias: ((self rec explicitAttributesUsingContext: self class context) pltAt: no2200) statementsBlock: [ :attr566 | self init: (ChdExplicitAttributeInitializeFunction invokeFromValues: (OrderedCollection new add: attr566; yourself)). ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) and: [ self init > '' ]) ifTrue: [ self innerCode: (((self innerCode pltPlus: '\t') pltPlus: self init) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec explicitAttributesUsingContext: self class context); yourself)). self innerCode = '' ifTrue: [ self innerCode: '\tnull;\n' ]. self code: ((self code pltPlus: self innerCode) pltPlus: 'end Initialize;\n'). ^ self return: self code ! ! !ChdRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordAdbCodeFunction instanceVariableNames: 'rec code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_adb_code ( rec : record ) : STRING; LOCAL code : STRING; END_LOCAL; code := '\n' + '-- --------= ' + rec.name + ' =--------\n' + record_initialize_code ( rec ) + '\n' + record_put_code ( rec ) + '\n' + record_xml_writer_code ( rec ) + '\n' + record_copy_code ( rec ) + '\n'; RETURN ( code ); END_FUNCTION; ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-instance-creation'! rec: aChdRecord ^ self new rec: aChdRecord ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rec: (values at: 1) ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111536538! rec: aChdRecord rec := aChdRecord ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-accessing'! rec ^ rec ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdRecordAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: ((((((((((('\n' pltPlus: '-- --------= ') pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ' =--------\n') pltPlus: (ChdRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: self rec; yourself))) pltPlus: '\n') pltPlus: (ChdRecordPutCodeFunction invokeFromValues: (OrderedCollection new add: self rec; yourself))) pltPlus: '\n') pltPlus: (ChdRecordXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: self rec; yourself))) pltPlus: '\n') pltPlus: (ChdRecordCopyCodeFunction invokeFromValues: (OrderedCollection new add: self rec; yourself))) pltPlus: '\n'). ^ self return: self code ! ! !ChdRecordAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordPutCodeFunction instanceVariableNames: 'rec code acode ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordPutCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordPutCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_put_code ( rec : record ) : STRING; LOCAL code : STRING; acode : STRING; END_LOCAL; code := 'procedure Put(obj : in ' + rec.name + ') is \nbegin\n'; REPEAT no := LOINDEX ( rec.explicit_attributes ) TO HIINDEX ( rec.explicit_attributes ); ALIAS attr FOR rec.explicit_attributes [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + 'end Put;\n \n' + 'procedure Put(obj : in ' + rec.ptr_type + ') is\n' + 'begin\n' + '\tPut(Obj.All);\n' + 'end Put;\n'; RETURN ( code ); END_FUNCTION; ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-instance-creation'! rec: aChdRecord ^ self new rec: aChdRecord ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rec: (values at: 1) ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111539707! rec: aChdRecord rec := aChdRecord ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! acode: aString1 acode := aString1 ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! rec ^ rec ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-accessing'! acode ^ acode ! ! !ChdRecordPutCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self code: (('procedure Put(obj : in ' pltPlus: (self rec nameUsingContext: self class context)) pltPlus: ') is \nbegin\n'). PlatypusCoreRepeatStatement repeat: [ :no3078 | PlatypusCoreAliasStatement alias: ((self rec explicitAttributesUsingContext: self class context) pltAt: no3078) statementsBlock: [ :attr1444 | self acode: (ChdExplicitAttributePutFunction invokeFromValues: (OrderedCollection new add: attr1444; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self rec explicitAttributesUsingContext: self class context); yourself)). self code: (((((((self code pltPlus: 'end Put;\n \n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self rec ptrTypeUsingContext: self class context)) pltPlus: ') is\n') pltPlus: 'begin\n') pltPlus: '\tPut(Obj.All);\n') pltPlus: 'end Put;\n'). ^ self return: self code ! ! !ChdRecordPutCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributePutFunction instanceVariableNames: 'attr code prfx domain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributePutFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributePutFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributePutFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributePutFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_put ( attr : explicit_attribute ) : STRING; LOCAL code : STRING; prfx : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); END_LOCAL; code := 'put("' + attr.name + ': "); '; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE' IN TYPEOF ( domain.handled ) ) THEN prfx := domain.handled.put_prefix; END_IF; IF domain.handled.refed_by_pointer THEN code := code + 'if obj.' + attr.name + ' /= null then ' + prfx + 'put(obj.' + attr.name + '.all' + '); else put("null"); end if;'; ELSE code := code + prfx + 'put(obj.' + attr.name + '); '; END_IF; code := code + 'put ( "; " );'; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111543708! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! prfx: aString1 prfx := aString1 ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! prfx ^ prfx ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributePutFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self prfx: ''. self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). " ---------- statements ----------" self code: (('put("' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ': "); '). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR') ifTrue: [ ^ self return: '' ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_PRIMITIVE_TYPE') ifTrue: [ self prfx: ((self domain handledUsingContext: self class context) putPrefixUsingContext: self class context) ]. ((self domain handledUsingContext: self class context) refedByPointerUsingContext: self class context) ifTrue: [ self code: ((((((((self code pltPlus: 'if obj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' /= null then ') pltPlus: self prfx) pltPlus: 'put(obj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: '.all') pltPlus: '); else put("null"); end if;') ] ifFalse: [ self code: ((((self code pltPlus: self prfx) pltPlus: 'put(obj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: '); ') ]. self code: (self code pltPlus: 'put ( "; " );'). ^ self return: self code ! ! !ChdExplicitAttributePutFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeXmlWriterCodeFunction instanceVariableNames: 'prefix attr code domain tag ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeXmlWriterCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeXmlWriterCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_xml_writer_code ( prefix : STRING; attr : explicit_attribute ) : STRING; LOCAL code : STRING; domain : entity_instance := basic_ada_domain ( attr.domain ); tag : STRING := Lowerize ( attr.name ); END_LOCAL; IF ( 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR' IN TYPEOF ( domain.handled ) ) THEN RETURN ( '' ); END_IF; IF ( attr.name = xml_id_name ) THEN RETURN ( '' ); END_IF; IF is_generic_object ( domain.handled ) THEN code := '\tresult := result & to_unbounded_string("<' + attr.name + ' ref=""") & ' + prefix + '.' + attr.name + '.' + xml_id_name + ' & to_unbounded_string(""" />");'; ELSE code := '\tif (XML_String(' + prefix + '.' + attr.name + ') /= Empty_String) then\n' + '\t\tresult := result & to_unbounded_string("<' + tag + '>") & XML_String(' + prefix + '.' + attr.name + ') & to_unbounded_string("");\n\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-instance-creation'! prefix: aString attr: aChdExplicitAttribute ^ self new prefix: aString attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self prefix: (values at: 1). self attr: (values at: 2) ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111548561! prefix: aString attr: aChdExplicitAttribute self prefix: aString. self attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! prefix: aString prefix := aString ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! tag: aString1 tag := aString1 ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! prefix ^ prefix ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-accessing'! tag ^ tag ! ! !ChdExplicitAttributeXmlWriterCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). self tag: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (self attr nameUsingContext: self class context); yourself)). " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.CHEDDAR_FUNCTION_PTR') ifTrue: [ ^ self return: '' ]. (self attr nameUsingContext: self class context) = 'cheddar_private_id' ifTrue: [ ^ self return: '' ]. (ChdIsGenericObjectFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) ifTrue: [ self code: (((((((('\tresult := result & to_unbounded_string("<' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' ref=""") & ') pltPlus: self prefix) pltPlus: '.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: '.') pltPlus: 'cheddar_private_id') pltPlus: ' & to_unbounded_string(""" />");') ] ifFalse: [ self code: ((((((((((((('\tif (XML_String(' pltPlus: self prefix) pltPlus: '.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ') /= Empty_String) then\n') pltPlus: '\t\tresult := result & to_unbounded_string("<') pltPlus: self tag) pltPlus: '>") & XML_String(') pltPlus: self prefix) pltPlus: '.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ') & to_unbounded_string("");\n\tend if;') ]. ^ self return: self code ! ! !ChdExplicitAttributeXmlWriterCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordCopyCodeFunction instanceVariableNames: 'cip code v ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordCopyCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordCopyCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_copy_code ( cip : record ) : STRING; LOCAL code : STRING; v : STRING := 'New_' + cip.name; END_LOCAL; code := 'function Copy ( obj : in ' + cip.name + ' ) return ' + cip.ptr_type + ' is\n' + '\t' + v + ' : ' + cip.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + cip.name + '''(obj);\n'; code := code + '\treturn (' + v + ');\n'; code := code + 'end Copy;\n\n' + 'function Copy ( obj : in ' + cip.ptr_type + ' ) return ' + cip.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n'; RETURN ( code ); END_FUNCTION; ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdRecord ^ self new cip: aChdRecord ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111553768! cip: aChdRecord cip := aChdRecord ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! v: aString1 v := aString1 ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !ChdRecordCopyCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self v: ('New_' pltPlus: (self cip nameUsingContext: self class context)). " ---------- statements ----------" self code: ((((((((((((((('function Copy ( obj : in ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' : ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'begin\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' := new ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '''(obj);\n'). self code: (((self code pltPlus: '\treturn (') pltPlus: self v) pltPlus: ');\n'). self code: (((((((((self code pltPlus: 'end Copy;\n\n') pltPlus: 'function Copy ( obj : in ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self cip ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: 'begin\n') pltPlus: '\treturn copy(obj.all);\n') pltPlus: 'end Copy;\n'). ^ self return: self code ! ! !ChdRecordCopyCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaClassXmlIoRecordCodeFunction instanceVariableNames: 'cip ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaClassXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaClassXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaClassXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaClassXmlIoRecordCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_class_xml_io_record_code ( cip : ada_class ) : STRING; RETURN ( '\ntype ' + cip.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( cip ) + '\nend record;' ); END_FUNCTION; ! !ChdAdaClassXmlIoRecordCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaClassXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaClassXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111556991! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaClassXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaClassXmlIoRecordCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (((('\ntype ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_io is record') pltPlus: (ChdAdaEntityAttributesXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\nend record;') ! ! !ChdAdaClassXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityAttributesXmlIoRecordCodeFunction instanceVariableNames: 'cip code attrcode ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityAttributesXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_attributes_xml_io_record_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; attrcode : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; attrcode := explicit_attribute_xml_io_record_code ( attr ); code := code + attrcode; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111559647! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! attrcode: aString1 attrcode := aString1 ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! attrcode ^ attrcode ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup902 | self code: (self code pltPlus: (ChdAdaEntityAttributesXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: sup902; yourself))) ] ]. PlatypusCoreRepeatStatement repeat: [ :no1885 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no1885) statementsBlock: [ :attr2385 | self attrcode: (ChdExplicitAttributeXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: attr2385; yourself)). self code: (self code pltPlus: self attrcode) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). ^ self return: self code ! ! !ChdAdaEntityAttributesXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeXmlIoRecordCodeFunction instanceVariableNames: 'attr code domain init ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_xml_io_record_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( domain.handled ) ) THEN RETURN ( ada_entity_attributes_xml_io_record_code ( domain.handled ) ); END_IF; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';'; ELSE IF ( init = 'empty_string' ) THEN code := '\t' + attr.name + ' : Unbounded_String;'; ELSE IF ( lowerize ( init ) = 'false' ) THEN code := '\t' + attr.name + ' : Boolean;'; ELSE IF ( init = '0' ) THEN code := '\t' + attr.name + ' : Integer;'; ELSE code := '\t' + attr.name + ' : Double;'; END_IF; END_IF; END_IF; END_IF; END_IF; ELSE code := '\t' + attr.name + ' : Unbounded_String;'; END_IF; IF ( code > '' ) THEN code := '\n' + code; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111564731! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! init: aString1 init := aString1 ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). self init: (self domain initValueUsingContext: self class context). " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ ^ self return: (ChdAdaEntityAttributesXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) ]. (ChdIsGenericObjectFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) not ifTrue: [ (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') or: [ PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself) ]) ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ self code: (((('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: ';') ] ifFalse: [ self init = 'empty_string' ifTrue: [ self code: (('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : Unbounded_String;') ] ifFalse: [ (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) = 'false' ifTrue: [ self code: (('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : Boolean;') ] ifFalse: [ self init = '0' ifTrue: [ self code: (('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : Integer;') ] ifFalse: [ self code: (('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : Double;') ] ] ] ] ] ] ifFalse: [ self code: (('\t' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' : Unbounded_String;') ]. self code > '' ifTrue: [ self code: ('\n' pltPlus: self code) ]. ^ self return: self code ! ! !ChdExplicitAttributeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdRecordXmlIoRecordCodeFunction instanceVariableNames: 'rec ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdRecordXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdRecordXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdRecordXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdRecordXmlIoRecordCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION record_xml_io_record_code ( rec : record ) : STRING; RETURN ( '\ntype ' + rec.name + '_io is record' + ada_entity_attributes_xml_io_record_code ( rec ) + '\nend record;\n' ); END_FUNCTION; ! !ChdRecordXmlIoRecordCodeFunction methodsFor: 'platypus-generated-instance-creation'! rec: aChdRecord ^ self new rec: aChdRecord ! ! !ChdRecordXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self rec: (values at: 1) ! ! !ChdRecordXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111570011! rec: aChdRecord rec := aChdRecord ! ! !ChdRecordXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! rec ^ rec ! ! !ChdRecordXmlIoRecordCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (((('\ntype ' pltPlus: (self rec nameUsingContext: self class context)) pltPlus: '_io is record') pltPlus: (ChdAdaEntityAttributesXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: self rec; yourself))) pltPlus: '\nend record;\n') ! ! !ChdRecordXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityXmlIoRecordInitializeCodeFunction instanceVariableNames: 'cip ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_xml_io_record_initialize_code ( cip : ada_class ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + cip.name + '_io) is \nbegin ' + ada_entity_attributes_xml_io_record_initialize_code ( cip ) + '\nend Initialize;\n' ); END_FUNCTION; ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111572263! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (((('\nprocedure Initialize(obj : out ' pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_io) is \nbegin ') pltPlus: (ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\nend Initialize;\n') ! ! !ChdAdaEntityXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction instanceVariableNames: 'cip code s ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_attributes_xml_io_record_initialize_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_io_record_initialize_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111575134! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup2827 | self code: (self code pltPlus: (ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: sup2827; yourself))) ] ]. PlatypusCoreRepeatStatement repeat: [ :no3829 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no3829) statementsBlock: [ :attr2195 | self s: (ChdExplicitAttributeXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: attr2195; yourself)). self s > '' ifTrue: [ self code: ((self code pltPlus: '\n') pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). ^ self return: self code ! ! !ChdAdaEntityAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeXmlIoRecordInitializeCodeFunction instanceVariableNames: 'attr code domain init ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_xml_io_record_initialize_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN code := '\tobj.' + attr.name + ' := ' + domain.ada_ref_ident + '''first;'; ELSE IF EXISTS ( init ) THEN code := '\tobj.' + attr.name + ' := ' + init + ';'; END_IF; END_IF; ELSE code := '\tobj.' + attr.name + ' := empty_string;'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111579809! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init: aString1 init := aString1 ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). self init: (self domain initValueUsingContext: self class context). " ---------- statements ----------" (ChdIsGenericObjectFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) not ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ self code: (((('\tobj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := ') pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: '''first;') ] ifFalse: [ (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) ifTrue: [ self code: (((('\tobj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := ') pltPlus: self init) pltPlus: ';') ] ] ] ifFalse: [ self code: (('\tobj.' pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := empty_string;') ]. ^ self return: self code ! ! !ChdExplicitAttributeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityXmlStartElementCodeFunction instanceVariableNames: 'cip code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityXmlStartElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_xml_start_element_code ( cip : ada_entity ) : STRING; LOCAL code : STRING; END_LOCAL; IF ( 'RECORD_AND_CLASS.RECORD' IN TYPEOF ( cip ) ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is\n' + 'begin\n' + '\tif To_String (To_Lower (Qname)) = "' + cip.html_tag + '" then\n' + '\t\tinitialize(obj);\n' + '\tend if;\n' + 'end Start_Element;\n'; ELSE code := ada_entity_attributes_xml_start_element_code ( cip ); IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaEntity ^ self new cip: aChdAdaEntity ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111585063! cip: aChdAdaEntity cip := aChdAdaEntity ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaEntityXmlStartElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)) includes: 'RECORD_AND_CLASS.RECORD') ifTrue: [ self code: ((((((((((((((('\nprocedure Start_Element(\n' pltPlus: '\tHandler: in out Xml_Generic_Parser;\n') pltPlus: '\tobj : in out ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class) is\n') pltPlus: 'begin\n') pltPlus: '\tif To_String (To_Lower (Qname)) = "') pltPlus: (self cip htmlTagUsingContext: self class context)) pltPlus: '" then\n') pltPlus: '\t\tinitialize(obj);\n') pltPlus: '\tend if;\n') pltPlus: 'end Start_Element;\n') ] ifFalse: [ self code: (ChdAdaEntityAttributesXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself)). self code > '' ifTrue: [ self code: ((((((((((((('\nprocedure Start_Element(\n' pltPlus: '\tHandler: in out Xml_Generic_Parser;\n') pltPlus: '\tobj : in out ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n') pltPlus: '\tif Get_Length (Atts) > 0 then') pltPlus: self code) pltPlus: '\n') pltPlus: '\tend if;\n') pltPlus: 'end Start_Element;\n') ] ]. ^ self return: self code ! ! !ChdAdaEntityXmlStartElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityAttributesXmlStartElementCodeFunction instanceVariableNames: 'cip code s ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_attributes_xml_start_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_start_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111589531! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup1785 | self code: (self code pltPlus: (ChdAdaEntityAttributesXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: sup1785; yourself))) ] ]. PlatypusCoreRepeatStatement repeat: [ :no2792 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no2792) statementsBlock: [ :attr1158 | self s: (ChdExplicitAttributeXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: attr1158; yourself)). self s > '' ifTrue: [ self code: (self code pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). ^ self return: self code ! ! !ChdAdaEntityAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeXmlEndElementCodeFunction instanceVariableNames: 'attr code domain init ioDomain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeXmlEndElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_xml_end_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); init : STRING := domain.init_value; io_domain : STRING; END_LOCAL; IF NOT is_generic_object ( domain.handled ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) OR EXISTS ( init ) THEN IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( domain.handled ) ) THEN io_domain := domain.ada_ident; ELSE IF ( init = 'empty_string' ) THEN io_domain := 'String'; ELSE IF ( lowerize ( init ) = 'false' ) THEN io_domain := 'Boolean'; ELSE IF ( init = '0' ) THEN io_domain := 'Integer'; ELSE io_domain := 'Double'; END_IF; END_IF; END_IF; END_IF; IF init = 'empty_string' THEN code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tobj.' + attr.name + ' := handler.Parameter_List (1);\n' + '\tend if;'; ELSE code := '\n\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\tTo_' + io_domain + ' (handler.Parameter_List (1), obj.' + attr.name + ', Handler.Ok);\n' + '\t\tif not Handler.Ok then\n' + '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n' + '\t\tend if;\n' + '\tend if;'; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111594912! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! init: aString1 init := aString1 ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! ioDomain: aString2 ioDomain := aString2 ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! init ^ init ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! ioDomain ^ ioDomain ! ! !ChdExplicitAttributeXmlEndElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). self init: (self domain initValueUsingContext: self class context). " ---------- statements ----------" (ChdIsGenericObjectFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) not ifTrue: [ (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') or: [ PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self init; yourself) ]) ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ self ioDomain: (self domain adaIdentUsingContext: self class context) ] ifFalse: [ self init = 'empty_string' ifTrue: [ self ioDomain: 'String' ] ifFalse: [ (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: self init; yourself)) = 'false' ifTrue: [ self ioDomain: 'Boolean' ] ifFalse: [ self init = '0' ifTrue: [ self ioDomain: 'Integer' ] ifFalse: [ self ioDomain: 'Double' ] ] ] ]. self init = 'empty_string' ifTrue: [ self code: (((((('\n\tif To_String (To_Lower (Qname)) = "' pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (self attr nameUsingContext: self class context); yourself))) pltPlus: '" then\n') pltPlus: '\t\tobj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := handler.Parameter_List (1);\n') pltPlus: '\tend if;') ] ifFalse: [ self code: ((((((((((('\n\tif To_String (To_Lower (Qname)) = "' pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (self attr nameUsingContext: self class context); yourself))) pltPlus: '" then\n') pltPlus: '\t\tTo_') pltPlus: self ioDomain) pltPlus: ' (handler.Parameter_List (1), obj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ', Handler.Ok);\n') pltPlus: '\t\tif not Handler.Ok then\n') pltPlus: '\t\t\tPut_Line ("Warning : Error on data type From " & To_String (Handler.Locator));\n') pltPlus: '\t\tend if;\n') pltPlus: '\tend if;') ] ] ]. ^ self return: self code ! ! !ChdExplicitAttributeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdExplicitAttributeXmlStartElementCodeFunction instanceVariableNames: 'attr code domain subDomain elementDomain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdExplicitAttributeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdExplicitAttributeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdExplicitAttributeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdExplicitAttributeXmlStartElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION explicit_attribute_xml_start_element_code ( attr : explicit_attribute ) : STRING; LOCAL code : STRING := ''; domain : entity_instance := basic_ada_domain ( attr.domain ); sub_domain : entity_instance; element_domain : entity_instance; END_LOCAL; IF is_generic_object ( domain.handled ) THEN code := '\n\t\tif To_String (To_Lower (Qname)) = "' + lowerize ( attr.name ) + '" then\n' + '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n' + '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n' + '\t\t\t\t\tobj.' + attr.name + ' := To_Unbounded_String (Get_Value (Atts, J));\n' + '\t\t\t\tend if;\n' + '\t\t\tend loop;\n' + '\t\tend if;'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! attr: aChdExplicitAttribute ^ self new attr: aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self attr: (values at: 1) ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111601352! attr: aChdExplicitAttribute attr := aChdExplicitAttribute ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! subDomain: aChdEntityInstance1 subDomain := aChdEntityInstance1 ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! elementDomain: aChdEntityInstance2 elementDomain := aChdEntityInstance2 ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! subDomain ^ subDomain ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! elementDomain ^ elementDomain ! ! !ChdExplicitAttributeXmlStartElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (self attr domainUsingContext: self class context); yourself)). " ---------- statements ----------" (ChdIsGenericObjectFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) ifTrue: [ self code: (((((((((('\n\t\tif To_String (To_Lower (Qname)) = "' pltPlus: (PTsLowerizeFunction invokeFromValues: (OrderedCollection new add: (self attr nameUsingContext: self class context); yourself))) pltPlus: '" then\n') pltPlus: '\t\t\tfor J in 0 .. Get_Length (Atts) - 1 loop\n') pltPlus: '\t\t\t\tif To_String (To_Lower (Get_Qname (Atts, J))) = "ref" then\n') pltPlus: '\t\t\t\t\tobj.') pltPlus: (self attr nameUsingContext: self class context)) pltPlus: ' := To_Unbounded_String (Get_Value (Atts, J));\n') pltPlus: '\t\t\t\tend if;\n') pltPlus: '\t\t\tend loop;\n') pltPlus: '\t\tend if;') ] ifFalse: [ ]. ^ self return: self code ! ! !ChdExplicitAttributeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityXmlEndElementCodeFunction instanceVariableNames: 'cip ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityXmlEndElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_xml_end_element_code ( cip : ada_entity ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + cip.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + ada_entity_attributes_xml_end_element_code ( cip ) + '\nend End_Element;\n' ); END_FUNCTION; ! !ChdAdaEntityXmlEndElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaEntity ^ self new cip: aChdAdaEntity ! ! !ChdAdaEntityXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111605777! cip: aChdAdaEntity cip := aChdAdaEntity ! ! !ChdAdaEntityXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityXmlEndElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((((((((('\nprocedure End_Element(\n' pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: (self cip nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n') pltPlus: (ChdAdaEntityAttributesXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: self cip; yourself))) pltPlus: '\nend End_Element;\n') ! ! !ChdAdaEntityXmlEndElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaEntityAttributesXmlEndElementCodeFunction instanceVariableNames: 'cip code s ' classVariableNames: '' poolDictionaries: '' category: 'Chd-RecordAndClassSchema'! !ChdAdaEntityAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_entity_attributes_xml_end_element_code ( cip : ada_class ) : STRING; LOCAL code : STRING := ''; s : STRING; END_LOCAL; IF SIZEOF ( cip.supertypes ) > 0 THEN ALIAS sup FOR cip.supertypes [ LOINDEX ( cip.supertypes ) ].handled; code := code + ada_entity_attributes_xml_end_element_code ( sup ); END_ALIAS; END_IF; REPEAT no := LOINDEX ( cip.explicit_attributes ) TO HIINDEX ( cip.explicit_attributes ); ALIAS attr FOR cip.explicit_attributes [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! cip: aChdAdaClass ^ self new cip: aChdAdaClass ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self cip: (values at: 1) ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111608865! cip: aChdAdaClass cip := aChdAdaClass ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! cip ^ cip ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ PlatypusCoreAliasStatement alias: (((self cip supertypesUsingContext: self class context) pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip supertypesUsingContext: self class context); yourself))) handledUsingContext: self class context) statementsBlock: [ :sup3759 | self code: (self code pltPlus: (ChdAdaEntityAttributesXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: sup3759; yourself))) ] ]. PlatypusCoreRepeatStatement repeat: [ :no650 | PlatypusCoreAliasStatement alias: ((self cip explicitAttributesUsingContext: self class context) pltAt: no650) statementsBlock: [ :attr3112 | self s: (ChdExplicitAttributeXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: attr3112; yourself)). self s > '' ifTrue: [ self code: ((self code pltPlus: '\n') pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self cip explicitAttributesUsingContext: self class context); yourself)). self code = '' ifTrue: [ self code: '\tnull;\n' ]. ^ self return: self code ! ! !ChdAdaEntityAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdRecordAndClassSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdPackageSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdPackageSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA package; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; USE FROM cheddar_constants; USE FROM xml_io; ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code ( ); ELSE code := code + xml_architecture_io_adb_package_code ( ); END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF is_of_generated_concept_kind ( c ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF NOT concept_in_list ( wl [ noi], r ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ads THEN contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF is_of_generated_concept_kind ( c ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; END_SCHEMA; ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#ada_package #ChdAdaPackage) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#package_alias #ChdPackageAlias) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#generic_package_instanciation #ChdGenericPackageInstanciation) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 3 ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#ada_package_adb_code #ChdAdaPackageAdbCodeFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#ada_package_ads_code #ChdAdaPackageAdsCodeFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#ada_package_interface #ChdAdaPackageInterfaceFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#all_packages_code #ChdAllPackagesCodeFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#concept_in_list #ChdConceptInListFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#concept_list_local_dependencies #ChdConceptListLocalDependenciesFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#ada_package_concepts_list_code #ChdAdaPackageConceptsListCodeFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#ada_package_class_typeof_list #ChdAdaPackageClassTypeofListFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#generic_package_aliases #ChdGenericPackageAliasesFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#generic_package_instanciation_attributes_ads_code #ChdGenericPackageInstanciationAttributesAdsCodeFunction) ! ! !ChdPackageSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 10 ! ! PltSchemaDefinition subclass: #ChdAdaPackage instanceVariableNames: 'adbInterface adsInterface xmlRootTags' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackage class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackage class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackage class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackage commentStamp: 'platypus comment' prior: 0! ENTITY ada_package SUBTYPE OF ( schema_definition ); ads_interface : LIST OF ada_interface; adb_interface : LIST OF ada_interface; xml_root_tags : LIST OF STRING; DERIVE infered_ads_interfaces : LIST OF ada_interface := ada_package_interface ( SELF, true ); ads_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, true ) ); adb_head : STRING := source_licence + '\n' + ada_interfaces_code ( SELF, ada_package_interface ( SELF, false ) ); ads_code : STRING := ads_head + '\n\nPackage ' + name + ' is \n \n' + ada_package_ads_code ( SELF ) + '\nEnd ' + name + ';'; adb_code : STRING := adb_head + '\n\nPackage Body ' + name + ' is \n \n' + ada_package_adb_code ( SELF ) + '\nEnd ' + name + ';'; END_ENTITY; ! !ChdAdaPackage methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. adsInterface := OrderedCollection new. adbInterface := OrderedCollection new. xmlRootTags := OrderedCollection new ! ! !ChdAdaPackage methodsFor: 'platypus-generated-classifying'! isChdAdaPackage ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-PackageSchema-classifying'! isChdAdaPackage ^ false ! ! !ChdAdaPackage methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAdaPackage: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingPackage'! acceptAdaPackage: e "my subclasses have to redefine it" ! ! !ChdAdaPackage methodsFor: 'platypus-generated-copying'! adaPackageCopyTo: another another fastSetAdsInterface: self adsInterface. another fastSetAdbInterface: self adbInterface. another fastSetXmlRootTags: self xmlRootTags ! ! !ChdAdaPackage methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self adaPackageCopyTo: another ! ! !ChdAdaPackage methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self adaPackageCopyTo: another ! ! !ChdAdaPackage methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! adaPackageFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAdsInterface: valuesloc removeFirst. self setAdbInterface: valuesloc removeFirst. self setXmlRootTags: valuesloc removeFirst. ^ valuesloc ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! adaPackageToValues: values values add: self adsInterface. values add: self adbInterface. values add: self xmlRootTags. ^ values ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self adaPackageToValues: (super toValues: values) ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self adaPackageFromValues: (super fromValues: values) ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self adaPackageFromValues: values ! ! !ChdAdaPackage methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self adaPackageToValues: values ! ! !ChdAdaPackage class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! !ChdAdaPackage class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! adsInterface ^ adsInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-set-accessing'! setAdsInterface: aListOfChdAdaInterface self adsInterface: aListOfChdAdaInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! adsInterface: aListOfChdAdaInterface adsInterface := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaPackage methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAdsInterface: aListOfChdAdaInterface adsInterface := aListOfChdAdaInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-with-context-accessing'! adsInterfaceUsingContext: aContext ^ self adsInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! adbInterface ^ adbInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-set-accessing'! setAdbInterface: aListOfChdAdaInterface self adbInterface: aListOfChdAdaInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! adbInterface: aListOfChdAdaInterface adbInterface := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaPackage methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAdbInterface: aListOfChdAdaInterface adbInterface := aListOfChdAdaInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-with-context-accessing'! adbInterfaceUsingContext: aContext ^ self adbInterface ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! xmlRootTags ^ xmlRootTags ! ! !ChdAdaPackage methodsFor: 'platypus-generated-set-accessing'! setXmlRootTags: aListOfString self xmlRootTags: aListOfString ! ! !ChdAdaPackage methodsFor: 'platypus-generated-accessing'! xmlRootTags: aListOfString xmlRootTags := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdAdaPackage methodsFor: 'platypus-generated-fast-set-accessing'! fastSetXmlRootTags: aListOfString xmlRootTags := aListOfString ! ! !ChdAdaPackage methodsFor: 'platypus-generated-with-context-accessing'! xmlRootTagsUsingContext: aContext ^ self xmlRootTags ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! inferedAdsInterfacesUsingContext: aContext ^ self inferedAdsInterfacesUsingContext: aContext receiver: self ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! inferedAdsInterfacesUsingContext: aContext receiver: aReceiver ^ ChdAdaPackageInterfaceFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! inferedAdsInterfaces ^ self inferedAdsInterfacesUsingContext: self class context ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsHeadUsingContext: aContext ^ self adsHeadUsingContext: aContext receiver: self ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsHeadUsingContext: aContext receiver: aReceiver ^ ((((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '\n') pltPlus: (ChdAdaInterfacesCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: (ChdAdaPackageInterfaceFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself)); yourself)) ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsHead ^ self adsHeadUsingContext: self class context ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbHeadUsingContext: aContext ^ self adbHeadUsingContext: aContext receiver: self ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbHeadUsingContext: aContext receiver: aReceiver ^ ((((((((((((((((((((((((((((((((((((((('' pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- This source file was automatically generated by Platypus\n') pltPlus: '-- see http://dossen.univ-brest.fr/apl\n') pltPlus: '-- \n') pltPlus: '-- Any modification of this file will be lost. \n') pltPlus: '-- Please see the "platypus" directory instead : it contains the Cheddar''s\n') pltPlus: '-- model and its meta-model. \n') pltPlus: '------------------------------------------------------------------------------\n \n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '-- Cheddar is a free real time scheduling tool.\n') pltPlus: '-- This program provides services to automatically check temporal constraints\n') pltPlus: '-- of real time tasks.\n') pltPlus: '--\n') pltPlus: '-- Copyright (C) 2002-2009 Frank Singhoff\n') pltPlus: '-- Cheddar is developed by the LAB-STICC Team, University of Brest\n') pltPlus: '--\n') pltPlus: '-- This program is free software; you can redistribute it and/or modify\n') pltPlus: '-- it under the terms of the GNU General Public License as published by\n') pltPlus: '-- the Free Software Foundation; either version 2 of the License, or\n') pltPlus: '-- (at your option) any later version.\n') pltPlus: '--\n') pltPlus: '-- This program is distributed in the hope that it will be useful,\n') pltPlus: '-- but WITHOUT ANY WARRANTY; without even the implied warranty of\n') pltPlus: '-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n') pltPlus: '-- GNU General Public License for more details.\n') pltPlus: '--\n') pltPlus: '-- You should have received a copy of the GNU General Public License\n') pltPlus: '-- along with this program; if not, write to the Free Software\n') pltPlus: '-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n') pltPlus: '--\n') pltPlus: '--\n') pltPlus: '-- Contact : cheddar@listes.univ-brest.fr\n') pltPlus: '-- To post to this mailing list, you must be subscribed\n') pltPlus: '-- (see http//beru.univ-brest.fr/~singhoff/cheddar for details)\n') pltPlus: '--\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '------------------------------------------------------------------------------\n') pltPlus: '\n') pltPlus: (ChdAdaInterfacesCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: (ChdAdaPackageInterfaceFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself)); yourself)) ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbHead ^ self adbHeadUsingContext: self class context ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ (((((((aReceiver adsHeadUsingContext: aContext) pltPlus: '\n\nPackage ') pltPlus: aReceiver name) pltPlus: ' is \n \n') pltPlus: (ChdAdaPackageAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself))) pltPlus: '\nEnd ') pltPlus: aReceiver name) pltPlus: ';' ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ (((((((aReceiver adbHeadUsingContext: aContext) pltPlus: '\n\nPackage Body ') pltPlus: aReceiver name) pltPlus: ' is \n \n') pltPlus: (ChdAdaPackageAdbCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself))) pltPlus: '\nEnd ') pltPlus: aReceiver name) pltPlus: ';' ! ! !ChdAdaPackage methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! ChdCoreEntity subclass: #ChdPackageAlias instanceVariableNames: 'packageName attributeName' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdPackageAlias class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdPackageAlias class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdPackageAlias class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdPackageAlias commentStamp: 'platypus comment' prior: 0! ENTITY package_alias; package_name : STRING; attribute_name : STRING; DERIVE ptr_type : STRING := SELF.name + '_Ptr'; ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.owner.name, ?, true, true ) ]; ads_code : STRING := 'subtype ' + SELF.name + ' is ' + package_name + '.' + attribute_name + ';\n' + 'subtype ' + SELF.ptr_type + ' is ' + package_name + '.' + attribute_name + '_Ptr;\n'; adb_code : STRING := ''; init_value : STRING := ?; dependencies : LIST OF dictionary_instance := [ SELF ]; ada_ref_ident : STRING := SELF.ptr_type; refed_by_pointer : BOOLEAN := true; END_ENTITY; ! !ChdPackageAlias methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. packageName := ''. attributeName := '' ! ! !ChdPackageAlias methodsFor: 'platypus-generated-classifying'! isChdPackageAlias ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-PackageSchema-classifying'! isChdPackageAlias ^ false ! ! !ChdPackageAlias methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptPackageAlias: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingPackage'! acceptPackageAlias: e "my subclasses have to redefine it" ! ! !ChdPackageAlias methodsFor: 'platypus-generated-copying'! packageAliasCopyTo: another another fastSetPackageName: self packageName. another fastSetAttributeName: self attributeName ! ! !ChdPackageAlias methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self packageAliasCopyTo: another ! ! !ChdPackageAlias methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self packageAliasCopyTo: another ! ! !ChdPackageAlias methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! packageAliasFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPackageName: valuesloc removeFirst. self setAttributeName: valuesloc removeFirst. ^ valuesloc ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! packageAliasToValues: values values add: self packageName. values add: self attributeName. ^ values ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self packageAliasToValues: (super toValues: values) ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self packageAliasFromValues: (super fromValues: values) ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self packageAliasFromValues: values ! ! !ChdPackageAlias methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self packageAliasToValues: values ! ! !ChdPackageAlias class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! !ChdPackageAlias class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdPackageAlias methodsFor: 'platypus-generated-accessing'! packageName ^ packageName ! ! !ChdPackageAlias methodsFor: 'platypus-generated-set-accessing'! setPackageName: aString self packageName: aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-accessing'! packageName: aString packageName := aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPackageName: aString packageName := aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-with-context-accessing'! packageNameUsingContext: aContext ^ self packageName ! ! !ChdPackageAlias methodsFor: 'platypus-generated-accessing'! attributeName ^ attributeName ! ! !ChdPackageAlias methodsFor: 'platypus-generated-set-accessing'! setAttributeName: aString self attributeName: aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-accessing'! attributeName: aString attributeName := aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttributeName: aString attributeName := aString ! ! !ChdPackageAlias methodsFor: 'platypus-generated-with-context-accessing'! attributeNameUsingContext: aContext ^ self attributeName ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext ^ self ptrTypeUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! ptrTypeUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '_Ptr' ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! ptrType ^ self ptrTypeUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((aReceiver ownerUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself); yourself) ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ (((((((((((('subtype ' pltPlus: (aReceiver nameUsingContext: aContext)) pltPlus: ' is ') pltPlus: aReceiver packageName) pltPlus: '.') pltPlus: aReceiver attributeName) pltPlus: ';\n') pltPlus: 'subtype ') pltPlus: (aReceiver ptrTypeUsingContext: aContext)) pltPlus: ' is ') pltPlus: aReceiver packageName) pltPlus: '.') pltPlus: aReceiver attributeName) pltPlus: '_Ptr;\n' ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext ^ self initValueUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! initValueUsingContext: aContext receiver: aReceiver ^ nil ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! initValue ^ self initValueUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext ^ self dependenciesUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! dependenciesUsingContext: aContext receiver: aReceiver ^ PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! dependencies ^ self dependenciesUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ aReceiver ptrTypeUsingContext: aContext ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ true ! ! !ChdPackageAlias methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! ChdAdaEntity subclass: #ChdGenericPackageInstanciation instanceVariableNames: 'genericPackageName parameters interfaces' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdGenericPackageInstanciation class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdGenericPackageInstanciation class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdGenericPackageInstanciation class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdGenericPackageInstanciation commentStamp: 'platypus comment' prior: 0! ENTITY generic_package_instanciation SUBTYPE OF ( ada_entity ); generic_package_name : STRING; parameters : LIST OF STRING; interfaces : LIST OF ada_interface; DERIVE aliases : LIST OF cheddar_defined_type := generic_package_aliases ( SELF ); ads_interfaces_list : LIST OF ada_interface := [ ada_interface ( SELF.generic_package_name, ?, true, false ), ada_interface ( SELF.owner.name, SELF.name, false, true ), ada_interface ( 'Unchecked_Deallocation', ?, true, false ) ] + interfaces; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := 'package ' + ada_ident + ' is new ' + generic_package_name + '(' + StringAggregateConcatSeparatedBy ( parameters, ', ' ) + ');\n' + 'use ' + ada_ident + ';\n' + generic_package_instanciation_attributes_ads_code ( SELF ); adb_code : STRING := ''; END_ENTITY; ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. genericPackageName := ''. parameters := OrderedCollection new. interfaces := OrderedCollection new ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-classifying'! isChdGenericPackageInstanciation ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-PackageSchema-classifying'! isChdGenericPackageInstanciation ^ false ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptGenericPackageInstanciation: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingPackage'! acceptGenericPackageInstanciation: e "my subclasses have to redefine it" ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-copying'! genericPackageInstanciationCopyTo: another another fastSetGenericPackageName: self genericPackageName. another fastSetParameters: self parameters. another fastSetInterfaces: self interfaces ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self genericPackageInstanciationCopyTo: another ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self genericPackageInstanciationCopyTo: another ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! genericPackageInstanciationFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setGenericPackageName: valuesloc removeFirst. self setParameters: valuesloc removeFirst. self setInterfaces: valuesloc removeFirst. ^ valuesloc ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! genericPackageInstanciationToValues: values values add: self genericPackageName. values add: self parameters. values add: self interfaces. ^ values ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self genericPackageInstanciationToValues: (super toValues: values) ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self genericPackageInstanciationFromValues: (super fromValues: values) ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self genericPackageInstanciationFromValues: values ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self genericPackageInstanciationToValues: values ! ! !ChdGenericPackageInstanciation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! !ChdGenericPackageInstanciation class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! genericPackageName ^ genericPackageName ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-set-accessing'! setGenericPackageName: aString self genericPackageName: aString ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! genericPackageName: aString genericPackageName := aString ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetGenericPackageName: aString genericPackageName := aString ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-with-context-accessing'! genericPackageNameUsingContext: aContext ^ self genericPackageName ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! parameters ^ parameters ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-set-accessing'! setParameters: aListOfString self parameters: aListOfString ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! parameters: aListOfString parameters := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetParameters: aListOfString parameters := aListOfString ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-with-context-accessing'! parametersUsingContext: aContext ^ self parameters ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! interfaces ^ interfaces ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-set-accessing'! setInterfaces: aListOfChdAdaInterface self interfaces: aListOfChdAdaInterface ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-accessing'! interfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-fast-set-accessing'! fastSetInterfaces: aListOfChdAdaInterface interfaces := aListOfChdAdaInterface ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-with-context-accessing'! interfacesUsingContext: aContext ^ self interfaces ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! aliasesUsingContext: aContext ^ self aliasesUsingContext: aContext receiver: self ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! aliasesUsingContext: aContext receiver: aReceiver ^ ChdGenericPackageAliasesFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! aliases ^ self aliasesUsingContext: self class context ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: (aReceiver genericPackageNameUsingContext: self class context); add: nil; add: true; add: false; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((aReceiver ownerUsingContext: self class context) nameUsingContext: self class context); add: (aReceiver nameUsingContext: self class context); add: false; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Unchecked_Deallocation'; add: nil; add: true; add: false; yourself); yourself); yourself)) pltPlus: aReceiver interfaces ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ((((((((('package ' pltPlus: (aReceiver adaIdentUsingContext: aContext)) pltPlus: ' is new ') pltPlus: aReceiver genericPackageName) pltPlus: '(') pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: aReceiver parameters; add: ', '; yourself))) pltPlus: ');\n') pltPlus: 'use ') pltPlus: (aReceiver adaIdentUsingContext: aContext)) pltPlus: ';\n') pltPlus: (ChdGenericPackageInstanciationAttributesAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself)) ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdGenericPackageInstanciation methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageAdbCodeFunction instanceVariableNames: 'pkg result ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackageAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_adb_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; END_LOCAL; result := ada_package_concepts_list_code ( pkg, pkg.types, false ) + ada_package_concepts_list_code ( pkg, pkg.entities, false ); RETURN ( result ); END_FUNCTION; ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111662945! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaPackageAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self result: ((ChdAdaPackageConceptsListCodeFunction invokeFromValues: (OrderedCollection new add: self pkg; add: (self pkg typesUsingContext: self class context); add: false; yourself)) pltPlus: (ChdAdaPackageConceptsListCodeFunction invokeFromValues: (OrderedCollection new add: self pkg; add: (self pkg entitiesUsingContext: self class context); add: false; yourself))). ^ self return: self result ! ! !ChdAdaPackageAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageAdsCodeFunction instanceVariableNames: 'pkg result classes constList privateClasses constrainedArrays ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackageAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_ads_code ( pkg : ada_package ) : STRING; LOCAL result : STRING; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); const_list : LIST OF ada_constant := QUERY ( e <* pkg.constants | 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ); private_classes : LIST OF ada_class := QUERY ( e <* classes | e.is_private ); constrained_arrays : LIST OF defined_type; END_LOCAL; constrained_arrays := QUERY ( t <* pkg.types | 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( t ) ); result := ada_package_concepts_list_code ( pkg, ( ( pkg.types - constrained_arrays ) + pkg.entities ) + constrained_arrays, true ); REPEAT no := LOINDEX ( const_list ) TO HIINDEX ( const_list ); result := result + const_list [ no].ads_code + '\n'; END_REPEAT; IF SIZEOF ( private_classes ) > 0 THEN result := result + '\n\nprivate\n \n'; REPEAT no := LOINDEX ( private_classes ) TO HIINDEX ( private_classes ); ALIAS supref FOR private_classes [ no].supertypes [ 1 ].ref; result := result + '\ntype ' + private_classes [ no].name + ' is new ' + supref.ada_ident + ' with\n' + ada_class_attributes_ads_code ( private_classes [ no] ); END_ALIAS; END_REPEAT; END_IF; RETURN ( result ); END_FUNCTION; ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111666562! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! classes: aListOfChdAdaClass classes := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! constList: aListOfChdAdaConstant constList := aListOfChdAdaConstant ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaConstant as: OrderedCollection ] ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! privateClasses: aListOfChdAdaClass1 privateClasses := aListOfChdAdaClass1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass1 as: OrderedCollection ] ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! constrainedArrays: aListOfChdDefinedType constrainedArrays := aListOfChdDefinedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDefinedType as: OrderedCollection ] ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! classes ^ classes ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! constList ^ constList ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! privateClasses ^ privateClasses ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-accessing'! constrainedArrays ^ constrainedArrays ! ! !ChdAdaPackageAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self classes: ((self pkg entitiesUsingContext: self class context) select: [ :e3875 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3875; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS' ]). self constList: ((self pkg constantsUsingContext: self class context) select: [ :e2743 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e2743; yourself)) includes: 'CHEDDAR_CONSTANTS.ADA_CONSTANT' ]). self privateClasses: (self classes select: [ :e1698 | e1698 isPrivateUsingContext: self class context ]). " ---------- statements ----------" self constrainedArrays: ((self pkg typesUsingContext: self class context) select: [ :t517 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: t517; yourself)) includes: 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' ]). self result: (ChdAdaPackageConceptsListCodeFunction invokeFromValues: (OrderedCollection new add: self pkg; add: ((((self pkg typesUsingContext: self class context) pltMinus: self constrainedArrays) pltPlus: (self pkg entitiesUsingContext: self class context)) pltPlus: self constrainedArrays); add: true; yourself)). PlatypusCoreRepeatStatement repeat: [ :no2918 | self result: ((self result pltPlus: ((self constList pltAt: no2918) adsCodeUsingContext: self class context)) pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self constList; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self constList; yourself)). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self privateClasses; yourself)) > 0 ifTrue: [ self result: (self result pltPlus: '\n\nprivate\n \n'). PlatypusCoreRepeatStatement repeat: [ :no257 | PlatypusCoreAliasStatement alias: ((((self privateClasses pltAt: no257) supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :supref1598 | self result: ((((((self result pltPlus: '\ntype ') pltPlus: ((self privateClasses pltAt: no257) nameUsingContext: self class context)) pltPlus: ' is new ') pltPlus: (supref1598 adaIdentUsingContext: self class context)) pltPlus: ' with\n') pltPlus: (ChdAdaClassAttributesAdsCodeFunction invokeFromValues: (OrderedCollection new add: (self privateClasses pltAt: no257); yourself))) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self privateClasses; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self privateClasses; yourself)) ]. ^ self return: self result ! ! !ChdAdaPackageAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageInterfaceFunction instanceVariableNames: 'pkg ads adsList adbList wul result defs pkgKey ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackageInterfaceFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageInterfaceFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageInterfaceFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageInterfaceFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_interface ( pkg : ada_package; ads : BOOLEAN ) : LIST OF ada_interface; LOCAL ads_list : LIST OF ada_interface := [ ada_interface ( 'Ada.Strings.Unbounded', ?, true, true ), ada_interface ( 'Framework_Config', ?, true, true ), ada_interface ( 'id_generators', ?, true, true ) ]; adb_list : LIST OF ada_interface := [ ada_interface ( 'Text_io', ?, true, true ), ada_interface ( 'unbounded_strings', ?, true, true ) ]; wul : LIST OF ada_interface; result : LIST OF ada_interface := [ ]; defs : LIST OF dictionary_instance := pkg.entities + pkg.types + pkg.constants; pkgKey : STRING := upperize ( pkg.name ); END_LOCAL; REPEAT no := LOINDEX ( pkg.interface ) TO HIINDEX ( pkg.interface ); ALIAS curr FOR pkg.interface [ no]; IF ( 'PACKAGE.ADA_PACKAGE' IN TYPEOF ( curr.native_schema ) ) THEN ads_list := ads_list + ADA_INTERFACE ( curr.native_schema.name, ?, true, true ); END_IF; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( defs ) TO HIINDEX ( defs ); ALIAS e FOR defs [ no]; IF ( 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_CONSTANTS.ADA_CONSTANT' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'RECORD_AND_CLASS.ADA_ENTITY' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.ADA_ENUMERATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; IF ( 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION' IN TYPEOF ( e ) ) THEN ads_list := ads_list + e.ads_interfaces_list; adb_list := adb_list + e.adb_interfaces_list; END_IF; END_ALIAS; END_REPEAT; IF ads THEN wul := ads_list + pkg.ads_interface; ELSE wul := adb_list + pkg.adb_interface; END_IF; REPEAT no := LOINDEX ( wul ) TO HIINDEX ( wul ); ALIAS curr FOR wul [ no]; IF ( upperize ( curr.prefix ) <> pkgKey ) THEN result := result + curr; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ads: aBoolean ^ self new pkg: aChdAdaPackage ads: aBoolean ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1). self ads: (values at: 2) ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111675438! pkg: aChdAdaPackage ads: aBoolean self pkg: aChdAdaPackage. self ads: aBoolean ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! adsList: aListOfChdAdaInterface adsList := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! adbList: aListOfChdAdaInterface1 adbList := aListOfChdAdaInterface1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface1 as: OrderedCollection ] ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! wul: aListOfChdAdaInterface2 wul := aListOfChdAdaInterface2 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface2 as: OrderedCollection ] ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! result: aListOfChdAdaInterface3 result := aListOfChdAdaInterface3 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface3 as: OrderedCollection ] ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! defs: aListOfChdDictionaryInstance defs := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! pkgKey: aString pkgKey := aString ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! adsList ^ adsList ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! adbList ^ adbList ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! wul ^ wul ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! defs ^ defs ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-accessing'! pkgKey ^ pkgKey ! ! !ChdAdaPackageInterfaceFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self adsList: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Ada.Strings.Unbounded'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Framework_Config'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'id_generators'; add: nil; add: true; add: true; yourself); yourself); yourself)). self adbList: (PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'Text_io'; add: nil; add: true; add: true; yourself); yourself); add: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: 'unbounded_strings'; add: nil; add: true; add: true; yourself); yourself); yourself)). self result: Array new. self defs: (((self pkg entitiesUsingContext: self class context) pltPlus: (self pkg typesUsingContext: self class context)) pltPlus: (self pkg constantsUsingContext: self class context)). self pkgKey: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (self pkg nameUsingContext: self class context); yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1968 | PlatypusCoreAliasStatement alias: ((self pkg interfaceUsingContext: self class context) pltAt: no1968) statementsBlock: [ :curr285 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (curr285 nativeSchemaUsingContext: self class context); yourself)) includes: 'PACKAGE.ADA_PACKAGE') ifTrue: [ self adsList: (self adsList pltPlus: (ChdAdaInterface new adaInterfaceFromValues: (OrderedCollection new add: ((curr285 nativeSchemaUsingContext: self class context) nameUsingContext: self class context); add: nil; add: true; add: true; yourself); yourself)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self pkg interfaceUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self pkg interfaceUsingContext: self class context); yourself)). PlatypusCoreRepeatStatement repeat: [ :no2142 | PlatypusCoreAliasStatement alias: (self defs pltAt: no2142) statementsBlock: [ :e3670 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'CHEDDAR_DOMAINS.CHEDDAR_DEFINED_TYPE') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'CHEDDAR_DOMAINS.EXPLICIT_TYPE_REFERENCE') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'CHEDDAR_CONSTANTS.ADA_CONSTANT') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'RECORD_AND_CLASS.ADA_ENTITY') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'CHEDDAR_DOMAINS.ADA_ENUMERATION') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'CHEDDAR_DOMAINS.CONSTRAINED_ARRAY_TYPE') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ]. ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e3670; yourself)) includes: 'PACKAGE.GENERIC_PACKAGE_INSTANCIATION') ifTrue: [ self adsList: (self adsList pltPlus: (e3670 adsInterfacesListUsingContext: self class context)). self adbList: (self adbList pltPlus: (e3670 adbInterfacesListUsingContext: self class context)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self defs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self defs; yourself)). self ads ifTrue: [ self wul: (self adsList pltPlus: (self pkg adsInterfaceUsingContext: self class context)) ] ifFalse: [ self wul: (self adbList pltPlus: (self pkg adbInterfaceUsingContext: self class context)) ]. PlatypusCoreRepeatStatement repeat: [ :no764 | PlatypusCoreAliasStatement alias: (self wul pltAt: no764) statementsBlock: [ :curr2249 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (curr2249 prefixUsingContext: self class context); yourself)) ~= self pkgKey ifTrue: [ self result: (self result pltPlus: curr2249) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self wul; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self wul; yourself)). ^ self return: self result ! ! !ChdAdaPackageInterfaceFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAllPackagesCodeFunction instanceVariableNames: 'ads code body pkgs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAllPackagesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAllPackagesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAllPackagesCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAllPackagesCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION all_packages_code ( ads : BOOLEAN ) : STRING; LOCAL code : STRING := ''; body : STRING; pkgs : LIST OF ada_package := SetToList ( all_ada_packages ( ) ); END_LOCAL; REPEAT no := LOINDEX ( pkgs ) TO HIINDEX ( pkgs ); IF ads THEN body := pkgs [ no].ads_code; ELSE body := pkgs [ no].adb_code; END_IF; IF ( body > '' ) THEN code := code + body + '\n\n'; END_IF; END_REPEAT; IF ads THEN code := code + xml_architecture_io_ads_package_code ( ); ELSE code := code + xml_architecture_io_adb_package_code ( ); END_IF; IF ads THEN WriteFile ( 'Platypus2Cheddar.ads', code ); ELSE WriteFile ( 'Platypus2Cheddar.adb', code ); END_IF; RETURN ( code ); END_FUNCTION; ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-instance-creation'! ads: aBoolean ^ self new ads: aBoolean ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self ads: (values at: 1) ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111687233! ads: aBoolean ads := aBoolean ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! body: aString1 body := aString1 ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs: aListOfChdAdaPackage pkgs := aListOfChdAdaPackage ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaPackage as: OrderedCollection ] ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! body ^ body ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-accessing'! pkgs ^ pkgs ! ! !ChdAllPackagesCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self pkgs: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: ChdAllAdaPackagesFunction invoke; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1947 | self ads ifTrue: [ self body: ((self pkgs pltAt: no1947) adsCodeUsingContext: self class context) ] ifFalse: [ self body: ((self pkgs pltAt: no1947) adbCodeUsingContext: self class context) ]. self body > '' ifTrue: [ self code: ((self code pltPlus: self body) pltPlus: '\n\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self pkgs; yourself)). self ads ifTrue: [ self code: (self code pltPlus: ChdXmlArchitectureIoAdsPackageCodeFunction invoke) ] ifFalse: [ self code: (self code pltPlus: ChdXmlArchitectureIoAdbPackageCodeFunction invoke) ]. self ads ifTrue: [ PTsWriteFileProcedure invokeFromValues: (OrderedCollection new add: 'Platypus2Cheddar.ads'; add: self code; yourself) ] ifFalse: [ PTsWriteFileProcedure invokeFromValues: (OrderedCollection new add: 'Platypus2Cheddar.adb'; add: self code; yourself) ]. ^ self return: self code ! ! !ChdAllPackagesCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdConceptInListFunction instanceVariableNames: 'c l key ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdConceptInListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdConceptInListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdConceptInListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdConceptInListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION concept_in_list ( c : dictionary_instance; l : LIST OF dictionary_instance ) : BOOLEAN; LOCAL key : STRING := upperize ( c.name ); END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); IF ( upperize ( l [ no].name ) = key ) THEN RETURN ( true ); END_IF; END_REPEAT; RETURN ( false ); END_FUNCTION; ! !ChdConceptInListFunction methodsFor: 'platypus-generated-instance-creation'! c: aChdDictionaryInstance l: aListOfChdDictionaryInstance ^ self new c: aChdDictionaryInstance l: aListOfChdDictionaryInstance ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self c: (values at: 1). self l: (values at: 2) ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111691104! c: aChdDictionaryInstance l: aListOfChdDictionaryInstance self c: aChdDictionaryInstance. self l: aListOfChdDictionaryInstance ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! c: aChdDictionaryInstance c := aChdDictionaryInstance ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! l: aListOfChdDictionaryInstance l := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! c ^ c ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !ChdConceptInListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (self c nameUsingContext: self class context); yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no561 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: ((self l pltAt: no561) nameUsingContext: self class context); yourself)) = self key ifTrue: [ ^ self return: true ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). ^ self return: false ! ! !ChdConceptInListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdConceptListLocalDependenciesFunction instanceVariableNames: 'sch l wl r ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdConceptListLocalDependenciesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdConceptListLocalDependenciesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdConceptListLocalDependenciesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdConceptListLocalDependenciesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION concept_list_local_dependencies ( sch : schema_definition; l : LIST OF dictionary_instance ) : LIST OF dictionary_instance; LOCAL wl : LIST OF dictionary_instance := [ ]; r : LIST OF dictionary_instance := [ ]; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); ALIAS c FOR l [ no]; IF is_of_generated_concept_kind ( c ) THEN wl := c.dependencies; REPEAT noi := LOINDEX ( wl ) TO HIINDEX ( wl ); IF NOT concept_in_list ( wl [ noi], r ) THEN r := r + wl [ noi]; END_IF; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( r ); END_FUNCTION; ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-instance-creation'! sch: aChdSchemaDefinition l: aListOfChdDictionaryInstance ^ self new sch: aChdSchemaDefinition l: aListOfChdDictionaryInstance ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self sch: (values at: 1). self l: (values at: 2) ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111694830! sch: aChdSchemaDefinition l: aListOfChdDictionaryInstance self sch: aChdSchemaDefinition. self l: aListOfChdDictionaryInstance ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! sch: aChdSchemaDefinition sch := aChdSchemaDefinition ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! l: aListOfChdDictionaryInstance l := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! wl: aListOfChdDictionaryInstance wl := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! r: aListOfChdDictionaryInstance1 r := aListOfChdDictionaryInstance1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance1 as: OrderedCollection ] ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! sch ^ sch ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! wl ^ wl ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdConceptListLocalDependenciesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self wl: Array new. self r: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2396 | PlatypusCoreAliasStatement alias: (self l pltAt: no2396) statementsBlock: [ :c3924 | (ChdIsOfGeneratedConceptKindFunction invokeFromValues: (OrderedCollection new add: c3924; yourself)) ifTrue: [ self wl: (c3924 dependenciesUsingContext: self class context). PlatypusCoreRepeatStatement repeat: [ :noi3324 | (ChdConceptInListFunction invokeFromValues: (OrderedCollection new add: (self wl pltAt: noi3324); add: self r; yourself)) not ifTrue: [ self r: (self r pltPlus: (self wl pltAt: noi3324)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self wl; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self wl; yourself)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). ^ self return: self r ! ! !ChdConceptListLocalDependenciesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageConceptsListCodeFunction instanceVariableNames: 'p concepts ads result code contents ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackageConceptsListCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageConceptsListCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageConceptsListCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageConceptsListCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_concepts_list_code ( p : ada_package; concepts : LIST OF dictionary_instance; ads : BOOLEAN ) : STRING; LOCAL result : STRING := ''; code : STRING := ''; contents : LIST OF dictionary_instance := [ ]; END_LOCAL; IF ads THEN contents := concepts; ELSE contents := concepts; END_IF; REPEAT no := LOINDEX ( contents ) TO HIINDEX ( contents ); ALIAS c FOR contents [ no]; IF is_of_generated_concept_kind ( c ) THEN IF ads THEN code := c.ads_code; ELSE code := c.adb_code; END_IF; result := result + code; IF ( code > '' ) THEN result := result + '\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-instance-creation'! p: aChdAdaPackage concepts: aListOfChdDictionaryInstance ads: aBoolean ^ self new p: aChdAdaPackage concepts: aListOfChdDictionaryInstance ads: aBoolean ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self p: (values at: 1). self concepts: (values at: 2). self ads: (values at: 3) ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111699962! p: aChdAdaPackage concepts: aListOfChdDictionaryInstance ads: aBoolean self p: aChdAdaPackage. self concepts: aListOfChdDictionaryInstance. self ads: aBoolean ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! p: aChdAdaPackage p := aChdAdaPackage ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! concepts: aListOfChdDictionaryInstance concepts := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString1 code := aString1 ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! contents: aListOfChdDictionaryInstance contents := aListOfChdDictionaryInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdDictionaryInstance as: OrderedCollection ] ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! p ^ p ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! concepts ^ concepts ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !ChdAdaPackageConceptsListCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: ''. self code: ''. self contents: Array new. " ---------- statements ----------" self ads ifTrue: [ self contents: self concepts ] ifFalse: [ self contents: self concepts ]. PlatypusCoreRepeatStatement repeat: [ :no1354 | PlatypusCoreAliasStatement alias: (self contents pltAt: no1354) statementsBlock: [ :c2886 | (ChdIsOfGeneratedConceptKindFunction invokeFromValues: (OrderedCollection new add: c2886; yourself)) ifTrue: [ self ads ifTrue: [ self code: (c2886 adsCodeUsingContext: self class context) ] ifFalse: [ self code: (c2886 adbCodeUsingContext: self class context) ]. self result: (self result pltPlus: self code). self code > '' ifTrue: [ self result: (self result pltPlus: '\n') ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self contents; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self contents; yourself)). ^ self return: self result ! ! !ChdAdaPackageConceptsListCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdAdaPackageClassTypeofListFunction instanceVariableNames: 'pkg result classes ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdAdaPackageClassTypeofListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdAdaPackageClassTypeofListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdAdaPackageClassTypeofListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdAdaPackageClassTypeofListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION ada_package_class_typeof_list ( pkg : ada_package ) : STRING; LOCAL result : STRING := ''; classes : LIST OF ada_class := QUERY ( e <* pkg.entities | 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( e ) ); END_LOCAL; REPEAT no := LOINDEX ( classes ) TO HIINDEX ( classes ); ALIAS curr FOR classes [ no]; result := result + curr.name + '('; result := result + StringAggregateConcatSeparatedBy ( TYPEOF ( curr ), ',' ); result := result + ')\n'; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-instance-creation'! pkg: aChdAdaPackage ^ self new pkg: aChdAdaPackage ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self pkg: (values at: 1) ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111705046! pkg: aChdAdaPackage pkg := aChdAdaPackage ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! classes: aListOfChdAdaClass classes := aListOfChdAdaClass ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaClass as: OrderedCollection ] ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! pkg ^ pkg ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-accessing'! classes ^ classes ! ! !ChdAdaPackageClassTypeofListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: ''. self classes: ((self pkg entitiesUsingContext: self class context) select: [ :e473 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: e473; yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS' ]). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2601 | PlatypusCoreAliasStatement alias: (self classes pltAt: no2601) statementsBlock: [ :curr37 | self result: ((self result pltPlus: (curr37 nameUsingContext: self class context)) pltPlus: '('). self result: (self result pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: curr37; yourself)); add: ','; yourself))). self result: (self result pltPlus: ')\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self classes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self classes; yourself)). ^ self return: self result ! ! !ChdAdaPackageClassTypeofListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdGenericPackageAliasesFunction instanceVariableNames: 'e aliases attrname ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdGenericPackageAliasesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdGenericPackageAliasesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdGenericPackageAliasesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdGenericPackageAliasesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION generic_package_aliases ( e : generic_package_instanciation ) : LIST OF cheddar_defined_type; LOCAL aliases : LIST OF entity_instance := [ ]; attrname : STRING; END_LOCAL; REPEAT no := LOINDEX ( e.attributes ) TO HIINDEX ( e.attributes ); ALIAS attr FOR e.attributes [ no]; ALIAS an FOR attr.name; IF ( an [ LENGTH ( an ) ] = '_' ) THEN attrname := an [ 1 : LENGTH ( an ) - 1 ]; ELSE attrname := an; END_IF; END_ALIAS; aliases := aliases + ( ada_type ( ) || attr.domain || package_alias ( e.name, attrname ) ); END_ALIAS; END_REPEAT; RETURN ( aliases ); END_FUNCTION; ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdGenericPackageInstanciation ^ self new e: aChdGenericPackageInstanciation ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111709140! e: aChdGenericPackageInstanciation e := aChdGenericPackageInstanciation ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! aliases: aListOfChdEntityInstance aliases := aListOfChdEntityInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdEntityInstance as: OrderedCollection ] ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! attrname: aString attrname := aString ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! aliases ^ aliases ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-accessing'! attrname ^ attrname ! ! !ChdGenericPackageAliasesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self aliases: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1078 | PlatypusCoreAliasStatement alias: ((self e attributesUsingContext: self class context) pltAt: no1078) statementsBlock: [ :attr3534 | PlatypusCoreAliasStatement alias: (attr3534 nameUsingContext: self class context) statementsBlock: [ :an35 | (an35 pltAt: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: an35; yourself))) = '_' ifTrue: [ self attrname: (an35 pltCopyFrom: 1 to: ((PltLENGTHFunction invokeFromValues: (OrderedCollection new add: an35; yourself)) pltMinus: 1)) ] ifFalse: [ self attrname: an35 ] ]. self aliases: (self aliases pltPlus: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: ChdAdaType new; add: (attr3534 domainUsingContext: self class context); yourself)) pltAsObject; add: (ChdPackageAlias new packageAliasFromValues: (OrderedCollection new add: (self e nameUsingContext: self class context); add: self attrname; yourself); yourself); yourself)) pltAsObject) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e attributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e attributesUsingContext: self class context); yourself)). ^ self return: self aliases ! ! !ChdGenericPackageAliasesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdGenericPackageInstanciationAttributesAdsCodeFunction instanceVariableNames: 'e result aliases ' classVariableNames: '' poolDictionaries: '' category: 'Chd-PackageSchema'! !ChdGenericPackageInstanciationAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION generic_package_instanciation_attributes_ads_code ( e : generic_package_instanciation ) : STRING; LOCAL result : STRING := ''; aliases : LIST OF cheddar_defined_type := e.aliases; END_LOCAL; REPEAT no := LOINDEX ( aliases ) TO HIINDEX ( aliases ); ALIAS attr FOR e.aliases [ no]; result := result + attr.ads_code; END_ALIAS; END_REPEAT; RETURN ( result ); END_FUNCTION; ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! e: aChdGenericPackageInstanciation ^ self new e: aChdGenericPackageInstanciation ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111713907! e: aChdGenericPackageInstanciation e := aChdGenericPackageInstanciation ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! aliases: aListOfChdCheddarDefinedType aliases := aListOfChdCheddarDefinedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdCheddarDefinedType as: OrderedCollection ] ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-accessing'! aliases ^ aliases ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: ''. self aliases: (self e aliasesUsingContext: self class context). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no666 | PlatypusCoreAliasStatement alias: ((self e aliasesUsingContext: self class context) pltAt: no666) statementsBlock: [ :attr3119 | self result: (self result pltPlus: (attr3119 adsCodeUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self aliases; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self aliases; yourself)). ^ self return: self result ! ! !ChdGenericPackageInstanciationAttributesAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdPackageSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #ChdDiscriminatedTypeSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA discriminated_type; USE FROM platypus_dictionary_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM express2cheddar_facade; USE FROM record_and_class; USE FROM cheddar_domains; USE FROM ada_interface; ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) [ 1 ]; union_attr : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION; END_SCHEMA; ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #ChdExpress2cheddarSchemaInstance ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#discriminated_type #ChdDiscriminatedType) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#discriminated_type_discriminant #ChdDiscriminatedTypeDiscriminant) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#discriminated_type_union #ChdDiscriminatedTypeUnion) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#discriminated_type_union_element_type #ChdDiscriminatedTypeUnionElementType) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#discriminated_type_union_type #ChdDiscriminatedTypeUnionType) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 5 ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#discriminated_type_attributes #ChdDiscriminatedTypeAttributesFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#discriminated_type_interfaces_list #ChdDiscriminatedTypeInterfacesListFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#discriminated_type_union_type_interfaces_list #ChdDiscriminatedTypeUnionTypeInterfacesListFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#discriminated_type_adb_code #ChdDiscriminatedTypeAdbCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#discriminated_type_ads_code #ChdDiscriminatedTypeAdsCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#discriminated_type_union_case_code #ChdDiscriminatedTypeUnionCaseCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#discriminated_type_union_element_case_code #ChdDiscriminatedTypeUnionElementCaseCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#discriminated_type_xml_io_record_code #ChdDiscriminatedTypeXmlIoRecordCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#discriminated_type_tails_attributes #ChdDiscriminatedTypeTailsAttributesFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#discriminated_type_xml_end_element_code #ChdDiscriminatedTypeXmlEndElementCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#discriminated_type_xml_start_element_code #ChdDiscriminatedTypeXmlStartElementCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#discriminated_type_attributes_xml_end_element_code #ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#discriminated_type_attributes_xml_start_element_code #ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#discriminated_type_attributes_xml_io_record_initialize_code #ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#discriminated_type_xml_io_record_initialize_code #ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction) ! ! !ChdDiscriminatedTypeSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 15 ! ! ChdAdaEntity subclass: #ChdDiscriminatedType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedType commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type SUBTYPE OF ( ada_entity ); DERIVE SELF\ada_entity.refed_by_pointer : BOOLEAN := false; discriminant : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' IN TYPEOF ( attr ) ) [ 1 ]; union_attr : attribute := QUERY ( attr <* attributes | 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' IN TYPEOF ( attr ) ) [ 1 ]; ads_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_Type_interfaces_list ( SELF, false ); translated_attributes : LIST OF explicit_attribute := explicit_attributes - discriminant - union_attr; SELF\ada_entity.ada_ident : STRING := name; SELF\ada_entity.ada_ref_ident : STRING := SELF.ada_ident + '_Ptr'; SELF\ada_entity.xml_io_record_code : STRING := discriminated_type_xml_io_record_code ( SELF ); tail_attributes : LIST OF attribute := discriminated_type_tails_attributes ( SELF ); ads_code : STRING := discriminated_type_ads_code ( SELF ); adb_code : STRING := discriminated_type_adb_code ( SELF ); END_ENTITY; ! !ChdDiscriminatedType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-DiscriminatedTypeSchema-classifying'! isChdDiscriminatedType ^ false ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingDiscriminatedType'! acceptDiscriminatedType: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-copying'! discriminatedTypeCopyTo: another ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeCopyTo: another ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeCopyTo: another ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeToValues: values ^ values ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeToValues: (super toValues: values) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeFromValues: (super fromValues: values) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeFromValues: values ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeToValues: values ! ! !ChdDiscriminatedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! !ChdDiscriminatedType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext ^ self refedByPointerUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! refedByPointerUsingContext: aContext receiver: aReceiver ^ false ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! refedByPointer ^ self refedByPointerUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! discriminantUsingContext: aContext ^ self discriminantUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! discriminantUsingContext: aContext receiver: aReceiver ^ (aReceiver attributes select: [ :attr179 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: attr179; yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_DISCRIMINANT' ]) pltAt: 1 ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! discriminant ^ self discriminantUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! unionAttrUsingContext: aContext ^ self unionAttrUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! unionAttrUsingContext: aContext receiver: aReceiver ^ (aReceiver attributes select: [ :attr357 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: attr357; yourself)) includes: 'DISCRIMINATED_TYPE.DISCRIMINATED_TYPE_UNION' ]) pltAt: 1 ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! unionAttr ^ self unionAttrUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! translatedAttributesUsingContext: aContext ^ self translatedAttributesUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! translatedAttributesUsingContext: aContext receiver: aReceiver ^ ((aReceiver explicitAttributesUsingContext: aContext) pltMinus: (aReceiver discriminantUsingContext: aContext)) pltMinus: (aReceiver unionAttrUsingContext: aContext) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! translatedAttributes ^ self translatedAttributesUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext ^ self adaIdentUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaIdentUsingContext: aContext receiver: aReceiver ^ aReceiver name ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaIdent ^ self adaIdentUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext ^ self adaRefIdentUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaRefIdentUsingContext: aContext receiver: aReceiver ^ (aReceiver adaIdentUsingContext: aContext) pltPlus: '_Ptr' ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adaRefIdent ^ self adaRefIdentUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext ^ self xmlIoRecordCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! xmlIoRecordCodeUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! xmlIoRecordCode ^ self xmlIoRecordCodeUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! tailAttributesUsingContext: aContext ^ self tailAttributesUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! tailAttributesUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeTailsAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! tailAttributes ^ self tailAttributesUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeAdsCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeAdbCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! PltExplicitAttribute subclass: #ChdDiscriminatedTypeDiscriminant instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeDiscriminant class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeDiscriminant class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeDiscriminant class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeDiscriminant commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_discriminant SUBTYPE OF ( explicit_attribute ); END_ENTITY; ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeDiscriminant ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-DiscriminatedTypeSchema-classifying'! isChdDiscriminatedTypeDiscriminant ^ false ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeDiscriminant: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingDiscriminatedType'! acceptDiscriminatedTypeDiscriminant: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-copying'! discriminatedTypeDiscriminantCopyTo: another ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeDiscriminantCopyTo: another ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeDiscriminantCopyTo: another ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeDiscriminantFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeDiscriminantToValues: values ^ values ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeDiscriminantToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeDiscriminantFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeDiscriminantFromValues: values ! ! !ChdDiscriminatedTypeDiscriminant methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeDiscriminantToValues: values ! ! !ChdDiscriminatedTypeDiscriminant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! !ChdDiscriminatedTypeDiscriminant class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! PltExplicitAttribute subclass: #ChdDiscriminatedTypeUnion instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnion class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnion class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnion class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnion commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_union SUBTYPE OF ( explicit_attribute ); END_ENTITY; ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeUnion ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-DiscriminatedTypeSchema-classifying'! isChdDiscriminatedTypeUnion ^ false ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeUnion: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingDiscriminatedType'! acceptDiscriminatedTypeUnion: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-copying'! discriminatedTypeUnionCopyTo: another ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeUnionCopyTo: another ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeUnionCopyTo: another ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionToValues: values ^ values ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeUnionToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeUnionFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeUnionFromValues: values ! ! !ChdDiscriminatedTypeUnion methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeUnionToValues: values ! ! !ChdDiscriminatedTypeUnion class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! !ChdDiscriminatedTypeUnion class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! ChdAdaEntity subclass: #ChdDiscriminatedTypeUnionElementType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnionElementType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnionElementType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnionElementType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnionElementType commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_union_element_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := [ ]; adb_interfaces_list : LIST OF ada_interface := [ ]; ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_element_case_code ( SELF ); END_ENTITY; ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeUnionElementType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-DiscriminatedTypeSchema-classifying'! isChdDiscriminatedTypeUnionElementType ^ false ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeUnionElementType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingDiscriminatedType'! acceptDiscriminatedTypeUnionElementType: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-copying'! discriminatedTypeUnionElementTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeUnionElementTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeUnionElementTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionElementTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionElementTypeToValues: values ^ values ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeUnionElementTypeToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeUnionElementTypeFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeUnionElementTypeFromValues: values ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeUnionElementTypeToValues: values ! ! !ChdDiscriminatedTypeUnionElementType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! !ChdDiscriminatedTypeUnionElementType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ Array new ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! unionAdsCodeUsingContext: aContext ^ self unionAdsCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! unionAdsCodeUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeUnionElementCaseCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedTypeUnionElementType methodsFor: 'platypus-generated-deriving'! unionAdsCode ^ self unionAdsCodeUsingContext: self class context ! ! ChdAdaEntity subclass: #ChdDiscriminatedTypeUnionType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnionType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnionType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnionType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnionType commentStamp: 'platypus comment' prior: 0! ENTITY discriminated_type_union_type SUBTYPE OF ( ada_entity ); DERIVE ads_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, true ); adb_interfaces_list : LIST OF ada_interface := discriminated_type_union_type_interfaces_list ( SELF, false ); ads_code : STRING := ''; adb_code : STRING := ''; union_ads_code : STRING := discriminated_type_union_case_code ( SELF ); all_attributes : LIST OF attribute := inherited_explicit_attributes ( SELF ); END_ENTITY; ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-classifying'! isChdDiscriminatedTypeUnionType ^ true ! ! !ChdCoreEntity methodsFor: '*Chd-DiscriminatedTypeSchema-classifying'! isChdDiscriminatedTypeUnionType ^ false ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDiscriminatedTypeUnionType: self ! ! !ChdAbstractVisitor methodsFor: 'platypus-generated-visitingDiscriminatedType'! acceptDiscriminatedTypeUnionType: e "my subclasses have to redefine it" ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-copying'! discriminatedTypeUnionTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self discriminatedTypeUnionTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self discriminatedTypeUnionTypeCopyTo: another ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! discriminatedTypeUnionTypeToValues: values ^ values ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self discriminatedTypeUnionTypeToValues: (super toValues: values) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self discriminatedTypeUnionTypeFromValues: (super fromValues: values) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self discriminatedTypeUnionTypeFromValues: values ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self discriminatedTypeUnionTypeToValues: values ! ! !ChdDiscriminatedTypeUnionType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! !ChdDiscriminatedTypeUnionType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ ChdExpress2cheddarSchemaInstance singleton ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext ^ self adsInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeUnionTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: true; yourself) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsInterfacesList ^ self adsInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext ^ self adbInterfacesListUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbInterfacesListUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeUnionTypeInterfacesListFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: false; yourself) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbInterfacesList ^ self adbInterfacesListUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext ^ self adsCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adsCode ^ self adsCodeUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext ^ self adbCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbCodeUsingContext: aContext receiver: aReceiver ^ '' ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! adbCode ^ self adbCodeUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! unionAdsCodeUsingContext: aContext ^ self unionAdsCodeUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! unionAdsCodeUsingContext: aContext receiver: aReceiver ^ ChdDiscriminatedTypeUnionCaseCodeFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! unionAdsCode ^ self unionAdsCodeUsingContext: self class context ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! allAttributesUsingContext: aContext ^ self allAttributesUsingContext: aContext receiver: self ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! allAttributesUsingContext: aContext receiver: aReceiver ^ PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !ChdDiscriminatedTypeUnionType methodsFor: 'platypus-generated-deriving'! allAttributes ^ self allAttributesUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAttributesFunction instanceVariableNames: 'd otherAttrs tailAttrs attrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_attributes ( d : discriminated_type ) : LIST OF attribute; LOCAL other_attrs : LIST OF attribute := [ d.discriminant] + d.translated_attributes; tail_attrs : LIST OF explicit_attribute := discriminated_type_tails_attributes ( d ); attrs : LIST OF attribute := other_attrs + tail_attrs; END_LOCAL; RETURN ( attrs ); END_FUNCTION; ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-instance-creation'! d: aChdDiscriminatedType ^ self new d: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self d: (values at: 1) ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111771009! d: aChdDiscriminatedType d := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! otherAttrs: aListOfChdAttribute otherAttrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! tailAttrs: aListOfChdExplicitAttribute tailAttrs := aListOfChdExplicitAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdExplicitAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute1 attrs := aListOfChdAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute1 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! d ^ d ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! otherAttrs ^ otherAttrs ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! tailAttrs ^ tailAttrs ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdDiscriminatedTypeAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self otherAttrs: ((PlatypusCoreAggregateInitializer collectionFrom: (OrderedCollection new add: (self d discriminantUsingContext: self class context); yourself)) pltPlus: (self d translatedAttributesUsingContext: self class context)). self tailAttrs: (ChdDiscriminatedTypeTailsAttributesFunction invokeFromValues: (OrderedCollection new add: self d; yourself)). self attrs: (self otherAttrs pltPlus: self tailAttrs). " ---------- statements ----------" ^ self return: self attrs ! ! !ChdDiscriminatedTypeAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeInterfacesListFunction instanceVariableNames: 'r ads ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_interfaces_list ( r : discriminated_type; ads : BOOLEAN ) : LIST OF ada_interface; RETURN ( ada_entity_interfaces_list ( r, ads ) ); END_FUNCTION; ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! r: aChdDiscriminatedType ads: aBoolean ^ self new r: aChdDiscriminatedType ads: aBoolean ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self r: (values at: 1). self ads: (values at: 2) ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111774502! r: aChdDiscriminatedType ads: aBoolean self r: aChdDiscriminatedType. self ads: aBoolean ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r: aChdDiscriminatedType r := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads: aBoolean ads := aBoolean ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! r ^ r ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! ads ^ ads ! ! !ChdDiscriminatedTypeInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (ChdAdaEntityInterfacesListFunction invokeFromValues: (OrderedCollection new add: self r; add: self ads; yourself)) ! ! !ChdDiscriminatedTypeInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeUnionTypeInterfacesListFunction instanceVariableNames: 'd isAds l ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_union_type_interfaces_list ( d : discriminated_type_union_type; isAds : BOOLEAN ) : LIST OF ada_interface; LOCAL l : LIST OF ada_interface := [ ]; END_LOCAL; REPEAT no := LOINDEX ( d.attributes ) TO HIINDEX ( d.attributes ); ALIAS curr FOR d.attributes [ no]; l := l + entity_definition_interfaces_list ( curr.domain.handled, isAds ); END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-instance-creation'! d: aChdDiscriminatedTypeUnionType isAds: aBoolean ^ self new d: aChdDiscriminatedTypeUnionType isAds: aBoolean ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self d: (values at: 1). self isAds: (values at: 2) ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111777374! d: aChdDiscriminatedTypeUnionType isAds: aBoolean self d: aChdDiscriminatedTypeUnionType. self isAds: aBoolean ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! d: aChdDiscriminatedTypeUnionType d := aChdDiscriminatedTypeUnionType ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! isAds: aBoolean isAds := aBoolean ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! l: aListOfChdAdaInterface l := aListOfChdAdaInterface ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAdaInterface as: OrderedCollection ] ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! d ^ d ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! isAds ^ isAds ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-accessing'! l ^ l ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self l: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no630 | PlatypusCoreAliasStatement alias: ((self d attributesUsingContext: self class context) pltAt: no630) statementsBlock: [ :curr3043 | self l: (self l pltPlus: (ChdEntityDefinitionInterfacesListFunction invokeFromValues: (OrderedCollection new add: ((curr3043 domainUsingContext: self class context) handledUsingContext: self class context); add: self isAds; yourself))) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self d attributesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self d attributesUsingContext: self class context); yourself)). ^ self return: self l ! ! !ChdDiscriminatedTypeUnionTypeInterfacesListFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAdbCodeFunction instanceVariableNames: 'typ code acode discrimAttr unionAttr unionType unionAttributes translAttrs v ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAdbCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAdbCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_adb_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING; acode : STRING; discrim_attr : attribute := typ.discriminant; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); transl_attrs : LIST OF attribute := typ.translated_attributes; v : STRING := 'New_' + typ.name; END_LOCAL; code := 'procedure Initialize (obj : out ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tobj := NULL;\n' + 'end Initialize;\n \n' + 'procedure Put(obj : in ' + typ.name + '_Ptr) is\n' + 'begin\n' + '\tif (obj /= NULL) then\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_put ( attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + '\t\t' + explicit_attribute_put ( discrim_attr ) + '\n' + '\t\tput ( "value: " );\n' + '\t\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_put ( element_attr ); IF ( acode > '' ) THEN code := code + '\t\t\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n' + 'function Copy ( obj : in ' + typ.name + ' ) return ' + typ.ptr_type + ' is\n' + '\t' + v + ' : ' + typ.ptr_type + ';\n' + 'begin\n' + '\t' + v + ' := new ' + typ.name + '''(obj);\n' + '\treturn (' + v + ');\n' + 'end Copy;\n\n' + 'function Copy ( obj : in ' + typ.ptr_type + ' ) return ' + typ.ptr_type + ' is\n' + 'begin\n' + '\treturn copy(obj.all);\n' + 'end Copy;\n\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' result := to_unbounded_string("<' + typ.html_tag + '>");\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; acode := explicit_attribute_xml_writer_code ( 'obj', attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; code := code + explicit_attribute_xml_writer_code ( 'obj', discrim_attr ) + '\n\n' + '\tcase obj.' + discrim_attr.name + ' is \n'; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS union_attr FOR union_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( union_attr.domain ).handled; ALIAS element_attributes FOR inherited_explicit_attributes ( ada_domain ); code := code + '\t\twhen ' + union_attr.name + ' => \n'; REPEAT noi := LOINDEX ( element_attributes ) TO HIINDEX ( element_attributes ); ALIAS element_attr FOR element_attributes [ noi]; acode := explicit_attribute_xml_writer_code ( 'obj', element_attr ); IF ( acode > '' ) THEN code := code + '\t\t' + acode + '\n'; END_IF; END_ALIAS; END_REPEAT; END_ALIAS; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; code := code + '\tend case;\n' + '\tresult := result & to_unbounded_string("");\n' + '\treturn (result);\n' + 'end XML_String;\n\n' + 'function XML_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_String(obj.all);\n' + 'end XML_String;\n\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String is\n' + '\tresult : Unbounded_String;\n' + 'begin\n' + ' raise xml_ref_string_error;\n' + ' return to_unbounded_string("");\n' + 'end XML_Ref_String;\n' + 'function XML_Ref_String(obj : in ' + typ.name + '_Ptr) return Unbounded_String is\n' + 'begin\n' + ' return XML_Ref_String(obj.all);\n' + 'end XML_Ref_String;\n\n'; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111785494! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! acode: aString1 acode := aString1 ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr: aChdAttribute1 unionAttr := aChdAttribute1 ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionType: aChdDefinedType unionType := aChdDefinedType ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttributes: aListOfChdAttribute unionAttributes := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs: aListOfChdAttribute1 translAttrs := aListOfChdAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute1 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! v: aString2 v := aString2 ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! acode ^ acode ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr ^ unionAttr ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionType ^ unionType ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttributes ^ unionAttributes ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs ^ translAttrs ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-accessing'! v ^ v ! ! !ChdDiscriminatedTypeAdbCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self discrimAttr: (self typ discriminantUsingContext: self class context). self unionAttr: (self typ unionAttrUsingContext: self class context). self unionType: ((self unionAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionAttributes: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self unionType; yourself)). self translAttrs: (self typ translatedAttributesUsingContext: self class context). self v: ('New_' pltPlus: (self typ nameUsingContext: self class context)). " ---------- statements ----------" self code: (((((((((('procedure Initialize (obj : out ' pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_Ptr) is\n') pltPlus: 'begin\n') pltPlus: '\tobj := NULL;\n') pltPlus: 'end Initialize;\n \n') pltPlus: 'procedure Put(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_Ptr) is\n') pltPlus: 'begin\n') pltPlus: '\tif (obj /= NULL) then\n'). PlatypusCoreRepeatStatement repeat: [ :no1060 | PlatypusCoreAliasStatement alias: (self translAttrs pltAt: no1060) statementsBlock: [ :attr2596 | self acode: (ChdExplicitAttributePutFunction invokeFromValues: (OrderedCollection new add: attr2596; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)). self code: (((((((self code pltPlus: '\t\t') pltPlus: (ChdExplicitAttributePutFunction invokeFromValues: (OrderedCollection new add: self discrimAttr; yourself))) pltPlus: '\n') pltPlus: '\t\tput ( "value: " );\n') pltPlus: '\t\tcase obj.') pltPlus: (self discrimAttr nameUsingContext: self class context)) pltPlus: ' is \n'). PlatypusCoreRepeatStatement repeat: [ :no2419 | PlatypusCoreAliasStatement alias: (self unionAttributes pltAt: no2419) statementsBlock: [ :unionAttr3965 | PlatypusCoreAliasStatement alias: ((ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (unionAttr3965 domainUsingContext: self class context); yourself)) handledUsingContext: self class context) statementsBlock: [ :adaDomain3706 | PlatypusCoreAliasStatement alias: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: adaDomain3706; yourself)) statementsBlock: [ :elementAttributes1617 | self code: (((self code pltPlus: '\t\t\twhen ') pltPlus: (unionAttr3965 nameUsingContext: self class context)) pltPlus: ' => \n'). PlatypusCoreRepeatStatement repeat: [ :noi3684 | PlatypusCoreAliasStatement alias: (elementAttributes1617 pltAt: noi3684) statementsBlock: [ :elementAttr1657 | self acode: (ChdExplicitAttributePutFunction invokeFromValues: (OrderedCollection new add: elementAttr1657; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t\t\t\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: elementAttributes1617; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: elementAttributes1617; yourself)) ] ] ]. self code: (self code pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)). self code: (((((((((((((((((((((((((((((((((((((self code pltPlus: '\t\tend case;\n\tend if;\n\tNew_Line;\nend Put;\n\n') pltPlus: 'function Copy ( obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' : ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'begin\n') pltPlus: '\t') pltPlus: self v) pltPlus: ' := new ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '''(obj);\n') pltPlus: '\treturn (') pltPlus: self v) pltPlus: ');\n') pltPlus: 'end Copy;\n\n') pltPlus: 'function Copy ( obj : in ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ' ) return ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ' is\n') pltPlus: 'begin\n') pltPlus: '\treturn copy(obj.all);\n') pltPlus: 'end Copy;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: ' result := to_unbounded_string("<') pltPlus: (self typ htmlTagUsingContext: self class context)) pltPlus: '>");\n'). PlatypusCoreRepeatStatement repeat: [ :no142 | PlatypusCoreAliasStatement alias: (self translAttrs pltAt: no142) statementsBlock: [ :attr1678 | self acode: (ChdExplicitAttributeXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: 'obj'; add: attr1678; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)). self code: (((((self code pltPlus: (ChdExplicitAttributeXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: 'obj'; add: self discrimAttr; yourself))) pltPlus: '\n\n') pltPlus: '\tcase obj.') pltPlus: (self discrimAttr nameUsingContext: self class context)) pltPlus: ' is \n'). PlatypusCoreRepeatStatement repeat: [ :no815 | PlatypusCoreAliasStatement alias: (self unionAttributes pltAt: no815) statementsBlock: [ :unionAttr2366 | PlatypusCoreAliasStatement alias: ((ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (unionAttr2366 domainUsingContext: self class context); yourself)) handledUsingContext: self class context) statementsBlock: [ :adaDomain2107 | PlatypusCoreAliasStatement alias: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: adaDomain2107; yourself)) statementsBlock: [ :elementAttributes28 | self code: (((self code pltPlus: '\t\twhen ') pltPlus: (unionAttr2366 nameUsingContext: self class context)) pltPlus: ' => \n'). PlatypusCoreRepeatStatement repeat: [ :noi2094 | PlatypusCoreAliasStatement alias: (elementAttributes28 pltAt: noi2094) statementsBlock: [ :elementAttr67 | self acode: (ChdExplicitAttributeXmlWriterCodeFunction invokeFromValues: (OrderedCollection new add: 'obj'; add: elementAttr67; yourself)). self acode > '' ifTrue: [ self code: (((self code pltPlus: '\t\t') pltPlus: self acode) pltPlus: '\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: elementAttributes28; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: elementAttributes28; yourself)) ] ] ]. self code: (self code pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)). self code: ((((((((((((((((((((((((((self code pltPlus: '\tend case;\n') pltPlus: '\tresult := result & to_unbounded_string("");\n') pltPlus: '\treturn (result);\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_Ptr) return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: ' return XML_String(obj.all);\n') pltPlus: 'end XML_String;\n\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ') return Unbounded_String is\n') pltPlus: '\tresult : Unbounded_String;\n') pltPlus: 'begin\n') pltPlus: ' raise xml_ref_string_error;\n') pltPlus: ' return to_unbounded_string("");\n') pltPlus: 'end XML_Ref_String;\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_Ptr) return Unbounded_String is\n') pltPlus: 'begin\n') pltPlus: ' return XML_Ref_String(obj.all);\n') pltPlus: 'end XML_Ref_String;\n\n'). ^ self return: self code ! ! !ChdDiscriminatedTypeAdbCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAdsCodeFunction instanceVariableNames: 'typ result discrimAttr discrimType unionAttr unionType unionSelections domain translAttrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAdsCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAdsCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_ads_code ( typ : discriminated_type ) : STRING; LOCAL result : STRING; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_selections : LIST OF attribute := inherited_explicit_attributes ( union_type ); domain : entity_instance; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; result := 'type ' + typ.name + ' (' + discrim_attr.name + ' : ' + discrim_type.name + ' ) is record\n'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN result := result + '\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE result := result + '\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; result := result + '\tcase ' + discrim_attr.name + ' is \n' + union_type.union_ads_code + '\tend case;\nend record;\n\n' + 'type ' + typ.ptr_type + ' is access all ' + typ.name + ';\n' + '\nprocedure Initialize(obj : out ' + typ.ptr_type + ');\n' + '\nprocedure Put(obj : in ' + typ.ptr_type + ');\n' + 'function Copy(obj : in ' + typ.ptr_type + ') return ' + typ.ptr_type + ';\n' + 'function Copy(obj : in ' + typ.name + ') return ' + typ.ptr_type + ';\n' + 'function XML_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n' + 'procedure Free is new Unchecked_Deallocation (' + typ.name + ', ' + typ.ptr_type + ');\n' + 'function XML_Ref_String(obj : in ' + typ.name + ') return Unbounded_String;\n' + '\nfunction XML_Ref_String(obj : in ' + typ.ptr_type + ') return Unbounded_String;\n'; RETURN ( result ); END_FUNCTION; ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111801450! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! discrimType: aChdEntityInstance discrimType := aChdEntityInstance ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr: aChdAttribute1 unionAttr := aChdAttribute1 ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionType: aChdDefinedType unionType := aChdDefinedType ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionSelections: aListOfChdAttribute unionSelections := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance1 domain := aChdEntityInstance1 ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs: aListOfChdAttribute1 translAttrs := aListOfChdAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute1 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! discrimType ^ discrimType ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr ^ unionAttr ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionType ^ unionType ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! unionSelections ^ unionSelections ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs ^ translAttrs ! ! !ChdDiscriminatedTypeAdsCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self discrimAttr: (self typ discriminantUsingContext: self class context). self discrimType: ((self discrimAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionAttr: (self typ unionAttrUsingContext: self class context). self unionType: ((self unionAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionSelections: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self unionType; yourself)). self translAttrs: (self typ translatedAttributesUsingContext: self class context). " ---------- statements ----------" self result: (((((('type ' pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ' (') pltPlus: (self discrimAttr nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self discrimType nameUsingContext: self class context)) pltPlus: ' ) is record\n'). PlatypusCoreRepeatStatement repeat: [ :no1662 | PlatypusCoreAliasStatement alias: (self translAttrs pltAt: no1662) statementsBlock: [ :attr3198 | self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (attr3198 domainUsingContext: self class context); yourself)). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self result: (((((self result pltPlus: '\t') pltPlus: (attr3198 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: ((self domain handledUsingContext: self class context) ptrTypeUsingContext: self class context)) pltPlus: ';\n') ] ifFalse: [ self result: (((((self result pltPlus: '\t') pltPlus: (attr3198 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: ';\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)). self result: (((((((((((((((((((((((((((((((((((((((((((self result pltPlus: '\tcase ') pltPlus: (self discrimAttr nameUsingContext: self class context)) pltPlus: ' is \n') pltPlus: (self unionType unionAdsCodeUsingContext: self class context)) pltPlus: '\tend case;\nend record;\n\n') pltPlus: 'type ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ' is access all ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ';\n') pltPlus: '\nprocedure Initialize(obj : out ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ');\n') pltPlus: '\nprocedure Put(obj : in ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'function Copy(obj : in ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'function Copy(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ') return ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'function XML_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: '\nfunction XML_String(obj : in ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: 'procedure Free is new Unchecked_Deallocation (') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ', ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ');\n') pltPlus: 'function XML_Ref_String(obj : in ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n') pltPlus: '\nfunction XML_Ref_String(obj : in ') pltPlus: (self typ ptrTypeUsingContext: self class context)) pltPlus: ') return Unbounded_String;\n'). ^ self return: self result ! ! !ChdDiscriminatedTypeAdsCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeUnionCaseCodeFunction instanceVariableNames: 'u code allAttributes ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnionCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_union_case_code ( u : discriminated_type_union_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; ALIAS ada_domain FOR basic_ada_domain ( attr.domain ).handled; code := code + '\t\twhen ' + attr.name + ' => \n ' + ada_domain.union_ads_code; END_ALIAS; END_ALIAS; code := code + '\n'; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-instance-creation'! u: aChdDiscriminatedTypeUnionType ^ self new u: aChdDiscriminatedTypeUnionType ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self u: (values at: 1) ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111810301! u: aChdDiscriminatedTypeUnionType u := aChdDiscriminatedTypeUnionType ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! allAttributes: aListOfChdAttribute allAttributes := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! u ^ u ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-accessing'! allAttributes ^ allAttributes ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self allAttributes: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self u; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1034 | PlatypusCoreAliasStatement alias: (self allAttributes pltAt: no1034) statementsBlock: [ :attr2574 | PlatypusCoreAliasStatement alias: ((ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (attr2574 domainUsingContext: self class context); yourself)) handledUsingContext: self class context) statementsBlock: [ :adaDomain2294 | self code: ((((self code pltPlus: '\t\twhen ') pltPlus: (attr2574 nameUsingContext: self class context)) pltPlus: ' => \n ') pltPlus: (adaDomain2294 unionAdsCodeUsingContext: self class context)) ] ]. self code: (self code pltPlus: '\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allAttributes; yourself)). ^ self return: self code ! ! !ChdDiscriminatedTypeUnionCaseCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeUnionElementCaseCodeFunction instanceVariableNames: 'u code allAttributes domain ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeUnionElementCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_union_element_case_code ( u : discriminated_type_union_element_type ) : STRING; LOCAL code : STRING := ''; all_attributes : LIST OF attribute := inherited_explicit_attributes ( u ); domain : entity_instance; END_LOCAL; REPEAT no := LOINDEX ( all_attributes ) TO HIINDEX ( all_attributes ); ALIAS attr FOR all_attributes [ no]; domain := basic_ada_domain ( attr.domain ); IF ( 'RECORD_AND_CLASS.ADA_CLASS' IN TYPEOF ( domain.handled ) ) THEN code := code + '\t\t\t' + attr.name + ' : ' + domain.handled.ptr_type + ';\n'; ELSE code := code + '\t\t\t' + attr.name + ' : ' + domain.ada_ref_ident + ';\n'; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-instance-creation'! u: aChdDiscriminatedTypeUnionElementType ^ self new u: aChdDiscriminatedTypeUnionElementType ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self u: (values at: 1) ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111814680! u: aChdDiscriminatedTypeUnionElementType u := aChdDiscriminatedTypeUnionElementType ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! allAttributes: aListOfChdAttribute allAttributes := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! domain: aChdEntityInstance domain := aChdEntityInstance ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! u ^ u ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! allAttributes ^ allAttributes ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self allAttributes: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self u; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no3437 | PlatypusCoreAliasStatement alias: (self allAttributes pltAt: no3437) statementsBlock: [ :attr881 | self domain: (ChdBasicAdaDomainFunction invokeFromValues: (OrderedCollection new add: (attr881 domainUsingContext: self class context); yourself)). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (self domain handledUsingContext: self class context); yourself)) includes: 'RECORD_AND_CLASS.ADA_CLASS') ifTrue: [ self code: (((((self code pltPlus: '\t\t\t') pltPlus: (attr881 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: ((self domain handledUsingContext: self class context) ptrTypeUsingContext: self class context)) pltPlus: ';\n') ] ifFalse: [ self code: (((((self code pltPlus: '\t\t\t') pltPlus: (attr881 nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self domain adaRefIdentUsingContext: self class context)) pltPlus: ';\n') ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allAttributes; yourself)). ^ self return: self code ! ! !ChdDiscriminatedTypeUnionElementCaseCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeXmlIoRecordCodeFunction instanceVariableNames: 'typ code discrimAttr discrimType unionAttr unionType unionAttributes tailsAttrs translAttrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_xml_io_record_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; discrim_attr : attribute := typ.discriminant; discrim_type : entity_instance := discrim_attr.domain.handled; union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); tails_attrs : LIST OF attribute := typ.tail_attributes; transl_attrs : LIST OF attribute := typ.translated_attributes; END_LOCAL; code := '\ntype ' + typ.name + '_io is record' + '\n\t' + discrim_attr.name + ' : ' + discrim_type.name + ';'; REPEAT no := LOINDEX ( transl_attrs ) TO HIINDEX ( transl_attrs ); ALIAS attr FOR transl_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( tails_attrs ) TO HIINDEX ( tails_attrs ); ALIAS attr FOR tails_attrs [ no]; code := code + explicit_attribute_xml_io_record_code ( attr ); END_ALIAS; END_REPEAT; code := code + '\nend record;\n'; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111820241! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! discrimType: aChdEntityInstance discrimType := aChdEntityInstance ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr: aChdAttribute1 unionAttr := aChdAttribute1 ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionType: aChdDefinedType unionType := aChdDefinedType ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttributes: aListOfChdAttribute unionAttributes := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! tailsAttrs: aListOfChdAttribute1 tailsAttrs := aListOfChdAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute1 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs: aListOfChdAttribute2 translAttrs := aListOfChdAttribute2 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute2 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! discrimType ^ discrimType ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttr ^ unionAttr ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionType ^ unionType ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! unionAttributes ^ unionAttributes ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! tailsAttrs ^ tailsAttrs ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-accessing'! translAttrs ^ translAttrs ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self discrimAttr: (self typ discriminantUsingContext: self class context). self discrimType: ((self discrimAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionAttr: (self typ unionAttrUsingContext: self class context). self unionType: ((self unionAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionAttributes: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self unionType; yourself)). self tailsAttrs: (self typ tailAttributesUsingContext: self class context). self translAttrs: (self typ translatedAttributesUsingContext: self class context). " ---------- statements ----------" self code: ((((((('\ntype ' pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_io is record') pltPlus: '\n\t') pltPlus: (self discrimAttr nameUsingContext: self class context)) pltPlus: ' : ') pltPlus: (self discrimType nameUsingContext: self class context)) pltPlus: ';'). PlatypusCoreRepeatStatement repeat: [ :no3325 | PlatypusCoreAliasStatement alias: (self translAttrs pltAt: no3325) statementsBlock: [ :attr765 | self code: (self code pltPlus: (ChdExplicitAttributeXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: attr765; yourself))) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self translAttrs; yourself)). PlatypusCoreRepeatStatement repeat: [ :no3713 | PlatypusCoreAliasStatement alias: (self tailsAttrs pltAt: no3713) statementsBlock: [ :attr1153 | self code: (self code pltPlus: (ChdExplicitAttributeXmlIoRecordCodeFunction invokeFromValues: (OrderedCollection new add: attr1153; yourself))) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self tailsAttrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self tailsAttrs; yourself)). self code: (self code pltPlus: '\nend record;\n'). ^ self return: self code ! ! !ChdDiscriminatedTypeXmlIoRecordCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeTailsAttributesFunction instanceVariableNames: 'typ unionAttr unionType unionAttributes found ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeTailsAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeTailsAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeTailsAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeTailsAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_tails_attributes ( typ : discriminated_type ) : LIST OF attribute; LOCAL union_attr : attribute := typ.union_attr; union_type : defined_type := union_attr.domain.handled; union_attributes : LIST OF attribute := inherited_explicit_attributes ( union_type ); found : LIST OF attribute := [ ]; END_LOCAL; REPEAT no := LOINDEX ( union_attributes ) TO HIINDEX ( union_attributes ); ALIAS curr FOR union_attributes [ no]; ALIAS handled FOR curr.domain.handled; found := found + inherited_explicit_attributes ( handled ); END_ALIAS; END_ALIAS; END_REPEAT; RETURN ( found ); END_FUNCTION; ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111827552! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionAttr: aChdAttribute unionAttr := aChdAttribute ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionType: aChdDefinedType unionType := aChdDefinedType ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionAttributes: aListOfChdAttribute unionAttributes := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! found: aListOfChdAttribute1 found := aListOfChdAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute1 as: OrderedCollection ] ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionAttr ^ unionAttr ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionType ^ unionType ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! unionAttributes ^ unionAttributes ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-accessing'! found ^ found ! ! !ChdDiscriminatedTypeTailsAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self unionAttr: (self typ unionAttrUsingContext: self class context). self unionType: ((self unionAttr domainUsingContext: self class context) handledUsingContext: self class context). self unionAttributes: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: self unionType; yourself)). self found: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2598 | PlatypusCoreAliasStatement alias: (self unionAttributes pltAt: no2598) statementsBlock: [ :curr4095 | PlatypusCoreAliasStatement alias: ((curr4095 domainUsingContext: self class context) handledUsingContext: self class context) statementsBlock: [ :handled1570 | self found: (self found pltPlus: (PTsInheritedExplicitAttributesFunction invokeFromValues: (OrderedCollection new add: handled1570; yourself))) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self unionAttributes; yourself)). ^ self return: self found ! ! !ChdDiscriminatedTypeTailsAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeXmlEndElementCodeFunction instanceVariableNames: 'typ ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_xml_end_element_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure End_Element(\n' + '\tHandler : in out Xml_generic_parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n' + discriminated_type_attributes_xml_end_element_code ( typ ) + '\nend End_Element;\n' ); END_FUNCTION; ! !ChdDiscriminatedTypeXmlEndElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111832377! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((((((((('\nprocedure End_Element(\n' pltPlus: '\tHandler : in out Xml_generic_parser;\n') pltPlus: '\tobj : in out ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "") is \nbegin\n') pltPlus: (ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: self typ; yourself))) pltPlus: '\nend End_Element;\n') ! ! !ChdDiscriminatedTypeXmlEndElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeXmlStartElementCodeFunction instanceVariableNames: 'typ code ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := discriminated_type_attributes_xml_start_element_code ( typ ); END_LOCAL; IF ( code > '' ) THEN code := '\nprocedure Start_Element(\n' + '\tHandler: in out Xml_Generic_Parser;\n' + '\tobj : in out ' + typ.name + '_io;\n' + '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n' + '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n' + '\tQname : Unicode.CES.Byte_Sequence := "";\n' + '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n' + '\tif Get_Length (Atts) > 0 then' + code + '\n' + '\tend if;\n' + 'end Start_Element;\n'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111835549! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: (ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: self typ; yourself)). " ---------- statements ----------" self code > '' ifTrue: [ self code: ((((((((((((('\nprocedure Start_Element(\n' pltPlus: '\tHandler: in out Xml_Generic_Parser;\n') pltPlus: '\tobj : in out ') pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_io;\n') pltPlus: '\tNamespace_Uri : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tLocal_Name : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tQname : Unicode.CES.Byte_Sequence := "";\n') pltPlus: '\tAtts : Sax.Attributes.Attributes''Class) is \nbegin\n') pltPlus: '\tif Get_Length (Atts) > 0 then') pltPlus: self code) pltPlus: '\n') pltPlus: '\tend if;\n') pltPlus: 'end Start_Element;\n') ]. ^ self return: self code ! ! !ChdDiscriminatedTypeXmlStartElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction instanceVariableNames: 'typ code s discrimAttr attrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_attributes_xml_end_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_end_element_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_end_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; IF ( code = '' ) THEN code := '\tnull;\n'; END_IF; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111839240! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self discrimAttr: (self typ discriminantUsingContext: self class context). self attrs: ((self typ tailAttributesUsingContext: self class context) pltPlus: (self typ translatedAttributesUsingContext: self class context)). " ---------- statements ----------" self code: ((self code pltPlus: (ChdExplicitAttributeXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: self discrimAttr; yourself))) pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no1428 | PlatypusCoreAliasStatement alias: (self attrs pltAt: no1428) statementsBlock: [ :attr2960 | self s: (ChdExplicitAttributeXmlEndElementCodeFunction invokeFromValues: (OrderedCollection new add: attr2960; yourself)). self s > '' ifTrue: [ self code: ((self code pltPlus: '\n') pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)). self code = '' ifTrue: [ self code: '\tnull;\n' ]. ^ self return: self code ! ! !ChdDiscriminatedTypeAttributesXmlEndElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction instanceVariableNames: 'typ code s discrimAttr attrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_attributes_xml_start_element_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := explicit_attribute_xml_start_element_code ( discrim_attr ); REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_start_element_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111844191! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self discrimAttr: (self typ discriminantUsingContext: self class context). self attrs: ((self typ tailAttributesUsingContext: self class context) pltPlus: (self typ translatedAttributesUsingContext: self class context)). " ---------- statements ----------" self code: (ChdExplicitAttributeXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: self discrimAttr; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1107 | PlatypusCoreAliasStatement alias: (self attrs pltAt: no1107) statementsBlock: [ :attr2639 | self s: (ChdExplicitAttributeXmlStartElementCodeFunction invokeFromValues: (OrderedCollection new add: attr2639; yourself)). self s > '' ifTrue: [ self code: ((self code pltPlus: '\n') pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)). ^ self return: self code ! ! !ChdDiscriminatedTypeAttributesXmlStartElementCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction instanceVariableNames: 'typ code s discrimAttr attrs ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_attributes_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; LOCAL code : STRING := ''; s : STRING; discrim_attr : attribute := typ.discriminant; attrs : LIST OF attribute := typ.tail_attributes + typ.translated_attributes; END_LOCAL; code := code + explicit_attribute_xml_io_record_initialize_code ( discrim_attr ) + '\n'; REPEAT no := LOINDEX ( attrs ) TO HIINDEX ( attrs ); ALIAS attr FOR attrs [ no]; s := explicit_attribute_xml_io_record_initialize_code ( attr ); IF ( s > '' ) THEN code := code + '\n' + s; END_IF; END_ALIAS; END_REPEAT; RETURN ( code ); END_FUNCTION; ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111849135! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr: aChdAttribute discrimAttr := aChdAttribute ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs: aListOfChdAttribute attrs := aListOfChdAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfChdAttribute as: OrderedCollection ] ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! discrimAttr ^ discrimAttr ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! attrs ^ attrs ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self discrimAttr: (self typ discriminantUsingContext: self class context). self attrs: ((self typ tailAttributesUsingContext: self class context) pltPlus: (self typ translatedAttributesUsingContext: self class context)). " ---------- statements ----------" self code: ((self code pltPlus: (ChdExplicitAttributeXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: self discrimAttr; yourself))) pltPlus: '\n'). PlatypusCoreRepeatStatement repeat: [ :no424 | PlatypusCoreAliasStatement alias: (self attrs pltAt: no424) statementsBlock: [ :attr1956 | self s: (ChdExplicitAttributeXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: attr1956; yourself)). self s > '' ifTrue: [ self code: ((self code pltPlus: '\n') pltPlus: self s) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attrs; yourself)). ^ self return: self code ! ! !ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction instanceVariableNames: 'typ ' classVariableNames: '' poolDictionaries: '' category: 'Chd-DiscriminatedTypeSchema'! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #Chd ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction commentStamp: 'platypus comment' prior: 0! FUNCTION discriminated_type_xml_io_record_initialize_code ( typ : discriminated_type ) : STRING; RETURN ( '\nprocedure Initialize(obj : out ' + typ.name + '_io) is \nbegin ' + discriminated_type_attributes_xml_io_record_initialize_code ( typ ) + '\nend Initialize;\n' ); END_FUNCTION; ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-instance-creation'! typ: aChdDiscriminatedType ^ self new typ: aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self typ: (values at: 1) ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111853761! typ: aChdDiscriminatedType typ := aChdDiscriminatedType ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-accessing'! typ ^ typ ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (((('\nprocedure Initialize(obj : out ' pltPlus: (self typ nameUsingContext: self class context)) pltPlus: '_io) is \nbegin ') pltPlus: (ChdDiscriminatedTypeAttributesXmlIoRecordInitializeCodeFunction invokeFromValues: (OrderedCollection new add: self typ; yourself))) pltPlus: '\nend Initialize;\n') ! ! !ChdDiscriminatedTypeXmlIoRecordInitializeCodeFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ ChdDiscriminatedTypeSchemaDefinition singleton ! ! ChdExpress2cheddarSchemaInstance initialize.! ----End fileIn----! PlatypusCoreSchemaInstance subclass: #E2JExpress2javaSchemaInstance instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'E2J-Express2javaSchemaInstance'! !E2JExpress2javaSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JExpress2javaSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JExpress2javaSchemaInstance class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpress2javaSchemaInstance commentStamp: 'platypus comment' prior: 0! SCHEMA express_translater; USE FROM Express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_statements_schema; USE FROM express_to_java_structure_translater; CONSTANT signature : STRING := '//-------------------------------------------------------------------------------\n' + '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n' + '// by a java generator build with the meta CASE tool Platypus \n' + '// (alain.plantec@univ-brest.fr)\n' + '// \n' + '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n' + '//-------------------------------------------------------------------------------\n\n'; step_core_package : STRING := 'step.core'; step_core_object : STRING := 'step.core.StepCoreObject'; PathNameDelimiter : STRING := '/'; END_CONSTANT; ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ( ) ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF EXISTS ( chosen ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE; END_SCHEMA; SCHEMA express_to_java_structure_translater; USE FROM express_translater; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted.replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted.generic_value_convertion_spec; END_ENTITY; ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY; FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF NOT attr.optional_flag THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( java_attribute_getter ( ) || attributes [ no] ).accepted; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF EXISTS ( jattr.attr.min_cardinality ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF EXISTS ( jattr.attr.min_cardinality ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted.replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; END_SCHEMA; ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-accessing'! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: 'E2J'. namesBuilder systemCategoryPrefix: 'E2J'. namesBuilder rootClassName: 'E2JCoreEntity'. namesBuilder rootClassSystemCategory: 'E2J-CoreEntity'. ^ namesBuilder ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition1 ^ #(#express_translater #E2JExpressTranslaterSchemaDefinition) ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinition2 ^ #(#express_to_java_structure_translater #E2JExpressToJavaStructureTranslaterSchemaDefinition) ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-schemata-accessing'! schemaDefinitionCount ^ 2 ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context ^ context ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-context-accessing'! context: aContext context := aContext. super context: aContext ! ! PlatypusCoreRepository subclass: #E2JExpress2javaRepository instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-Express2javaSchemaInstance'! !E2JExpress2javaRepository class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JExpress2javaRepository class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JExpress2javaRepository class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-accessing'! repositoryClassName ^ #E2JExpress2javaRepository ! ! !E2JExpress2javaRepository class methodsFor: 'platypus-generated-accessing'! generatedMetaDataSchemaInstanceName ^ #E2JExpress2javaSchemaInstance ! ! !E2JExpress2javaSchemaInstance methodsFor: 'platypus-generated-accessing'! externalSchemaInstanceClassNames ^ #(#PltPlatypusMetaSchemasSchemaInstance #PTsPlatypustoolboxSchemaInstance) ! ! PlatypusCoreAbstractVisitor subclass: #E2JAbstractVisitor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-Express2javaSchemaInstance'! !E2JAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpress2javaSchemaInstance class methodsFor: 'platypus-generated-initializing'! initialize self reinitializeSingleton. self singleton buildIndexes ! ! PlatypusCoreSchema subclass: #E2JExpressTranslaterSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JExpressTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JExpressTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JExpressTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpressTranslaterSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA express_translater; USE FROM Express_toolsbox_functions; USE FROM express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM Platypus_environment_schema; USE FROM Platypus_population_schema; USE FROM Platypus_statements_schema; USE FROM express_to_java_structure_translater; CONSTANT signature : STRING := '//-------------------------------------------------------------------------------\n' + '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n' + '// by a java generator build with the meta CASE tool Platypus \n' + '// (alain.plantec@univ-brest.fr)\n' + '// \n' + '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n' + '//-------------------------------------------------------------------------------\n\n'; step_core_package : STRING := 'step.core'; step_core_object : STRING := 'step.core.StepCoreObject'; PathNameDelimiter : STRING := '/'; END_CONSTANT; ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ( ) ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF EXISTS ( chosen ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE; END_SCHEMA; ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #E2JExpress2javaSchemaInstance ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#resulting_file #E2JResultingFile) ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#translation_result #E2JTranslationResult) ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#express_translater #E2JExpressTranslater) ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 3 ! ! !E2JExpressTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 0 ! ! Object subclass: #E2JCoreEntity instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-CoreEntity'! !E2JCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JCoreEntity class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #'E2J-CoreEntity' ! ! !E2JCoreEntity class methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self schemaDefinition metaDataFor: self name asSymbol ! ! !E2JCoreEntity methodsFor: 'platypus-generated-meta-data-accessing'! platypusMetaData ^ self class platypusMetaData ! ! !E2JCoreEntity class methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaDefinition context ! ! E2JCoreEntity subclass: #E2JResultingFile instanceVariableNames: 'path contents' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JResultingFile class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JResultingFile class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JResultingFile class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JResultingFile commentStamp: 'platypus comment' prior: 0! ENTITY resulting_file; path : STRING; contents : STRING; END_ENTITY; ! !E2JResultingFile methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. path := ''. contents := '' ! ! !E2JResultingFile methodsFor: 'platypus-generated-classifying'! isE2JResultingFile ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressTranslaterSchema-classifying'! isE2JResultingFile ^ false ! ! !E2JResultingFile methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptResultingFile: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressTranslater'! acceptResultingFile: e "my subclasses have to redefine it" ! ! !E2JResultingFile methodsFor: 'platypus-generated-copying'! resultingFileCopyTo: another another fastSetPath: self path. another fastSetContents: self contents ! ! !E2JResultingFile methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self resultingFileCopyTo: another ! ! !E2JResultingFile methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self resultingFileCopyTo: another ! ! !E2JResultingFile methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! resultingFileFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setPath: valuesloc removeFirst. self setContents: valuesloc removeFirst. ^ valuesloc ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! resultingFileToValues: values values add: self path. values add: self contents. ^ values ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self resultingFileToValues: (super toValues: values) ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self resultingFileFromValues: (super fromValues: values) ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self resultingFileFromValues: values ! ! !E2JResultingFile methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self resultingFileToValues: values ! ! !E2JResultingFile class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! !E2JResultingFile class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JResultingFile methodsFor: 'platypus-generated-accessing'! path ^ path ! ! !E2JResultingFile methodsFor: 'platypus-generated-set-accessing'! setPath: aString self path: aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-accessing'! path: aString path := aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-fast-set-accessing'! fastSetPath: aString path := aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-with-context-accessing'! pathUsingContext: aContext ^ self path ! ! !E2JResultingFile methodsFor: 'platypus-generated-accessing'! contents ^ contents ! ! !E2JResultingFile methodsFor: 'platypus-generated-set-accessing'! setContents: aString self contents: aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-accessing'! contents: aString contents := aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-fast-set-accessing'! fastSetContents: aString contents := aString ! ! !E2JResultingFile methodsFor: 'platypus-generated-with-context-accessing'! contentsUsingContext: aContext ^ self contents ! ! PltEntityInstance subclass: #E2JTranslationResult instanceVariableNames: 'files' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslationResult class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslationResult class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslationResult class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslationResult commentStamp: 'platypus comment' prior: 0! ENTITY translation_result SUBTYPE OF ( entity_instance ); files : LIST OF resulting_file; DERIVE current : resulting_file := files [ HIINDEX ( files ) ]; END_ENTITY; ! !E2JTranslationResult methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. files := OrderedCollection new ! ! !E2JTranslationResult methodsFor: 'platypus-generated-classifying'! isE2JTranslationResult ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressTranslaterSchema-classifying'! isE2JTranslationResult ^ false ! ! !E2JTranslationResult methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptTranslationResult: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressTranslater'! acceptTranslationResult: e "my subclasses have to redefine it" ! ! !E2JTranslationResult methodsFor: 'platypus-generated-copying'! translationResultCopyTo: another another fastSetFiles: self files ! ! !E2JTranslationResult methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self translationResultCopyTo: another ! ! !E2JTranslationResult methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self translationResultCopyTo: another ! ! !E2JTranslationResult methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! translationResultFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setFiles: valuesloc removeFirst. ^ valuesloc ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! translationResultToValues: values values add: self files. ^ values ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self translationResultToValues: (super toValues: values) ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self translationResultFromValues: (super fromValues: values) ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self translationResultFromValues: values ! ! !E2JTranslationResult methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self translationResultToValues: values ! ! !E2JTranslationResult class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! !E2JTranslationResult class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JTranslationResult methodsFor: 'platypus-generated-accessing'! files ^ files ! ! !E2JTranslationResult methodsFor: 'platypus-generated-set-accessing'! setFiles: aListOfE2JResultingFile self files: aListOfE2JResultingFile ! ! !E2JTranslationResult methodsFor: 'platypus-generated-accessing'! files: aListOfE2JResultingFile files := aListOfE2JResultingFile ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JResultingFile as: OrderedCollection ] ! ! !E2JTranslationResult methodsFor: 'platypus-generated-fast-set-accessing'! fastSetFiles: aListOfE2JResultingFile files := aListOfE2JResultingFile ! ! !E2JTranslationResult methodsFor: 'platypus-generated-with-context-accessing'! filesUsingContext: aContext ^ self files ! ! !E2JTranslationResult methodsFor: 'platypus-generated-deriving'! currentUsingContext: aContext ^ self currentUsingContext: aContext receiver: self ! ! !E2JTranslationResult methodsFor: 'platypus-generated-deriving'! currentUsingContext: aContext receiver: aReceiver ^ aReceiver files pltAt: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: aReceiver files; yourself)) ! ! !E2JTranslationResult methodsFor: 'platypus-generated-deriving'! current ^ self currentUsingContext: self class context ! ! E2JCoreEntity subclass: #E2JExpressTranslater instanceVariableNames: 'result' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JExpressTranslater class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JExpressTranslater class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JExpressTranslater class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpressTranslater commentStamp: 'platypus comment' prior: 0! ENTITY express_translater; result : translation_result; DERIVE current_result_file : resulting_file := result.current; current_result_file_contents : STRING := current_result_file.contents; END_ENTITY; ! !E2JExpressTranslater methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. result := nil ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-classifying'! isE2JExpressTranslater ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressTranslaterSchema-classifying'! isE2JExpressTranslater ^ false ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptExpressTranslater: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressTranslater'! acceptExpressTranslater: e "my subclasses have to redefine it" ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-copying'! expressTranslaterCopyTo: another another fastSetResult: self result ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self expressTranslaterCopyTo: another ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self expressTranslaterCopyTo: another ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! expressTranslaterFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setResult: valuesloc removeFirst. ^ valuesloc ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! expressTranslaterToValues: values values add: self result. ^ values ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self expressTranslaterToValues: (super toValues: values) ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self expressTranslaterFromValues: (super fromValues: values) ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self expressTranslaterFromValues: values ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self expressTranslaterToValues: values ! ! !E2JExpressTranslater class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! !E2JExpressTranslater class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-set-accessing'! setResult: aE2JTranslationResult self result: aE2JTranslationResult ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-accessing'! result: aE2JTranslationResult result := aE2JTranslationResult ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-fast-set-accessing'! fastSetResult: aE2JTranslationResult result := aE2JTranslationResult ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-with-context-accessing'! resultUsingContext: aContext ^ self result ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFileUsingContext: aContext ^ self currentResultFileUsingContext: aContext receiver: self ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFileUsingContext: aContext receiver: aReceiver ^ aReceiver result currentUsingContext: aContext ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFile ^ self currentResultFileUsingContext: self class context ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFileContentsUsingContext: aContext ^ self currentResultFileContentsUsingContext: aContext receiver: self ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFileContentsUsingContext: aContext receiver: aReceiver ^ (aReceiver currentResultFileUsingContext: aContext) contentsUsingContext: aContext ! ! !E2JExpressTranslater methodsFor: 'platypus-generated-deriving'! currentResultFileContents ^ self currentResultFileContentsUsingContext: self class context ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JNewResultingFileProcedure instanceVariableNames: 'et path ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JNewResultingFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JNewResultingFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JNewResultingFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JNewResultingFileProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE new_resulting_file ( VAR et : express_translater; path : STRING ); INSERT ( et.result.files, resulting_file ( path, '' ), SIZEOF ( et.result.files ) ); result ( et, signature ); END_PROCEDURE; ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-instance-creation'! et: aE2JExpressTranslater path: aString ^ self new et: aE2JExpressTranslater path: aString ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self et: (values at: 1). self path: (values at: 2) ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111922477! et: aE2JExpressTranslater path: aString self et: aE2JExpressTranslater. self path: aString ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing'! et: aE2JExpressTranslater et := aE2JExpressTranslater ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing'! path: aString path := aString ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing'! et ^ et ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-accessing'! path ^ path ! ! !E2JNewResultingFileProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" PltINSERTProcedure invokeFromValues: (OrderedCollection new add: ((self et resultUsingContext: self class context) filesUsingContext: self class context); add: (E2JResultingFile new resultingFileFromValues: (OrderedCollection new add: self path; add: ''; yourself); yourself); add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((self et resultUsingContext: self class context) filesUsingContext: self class context); yourself)); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (((((('//-------------------------------------------------------------------------------\n' pltPlus: '// This package was automatically generated from EXPRESS (ISO STEP 10303 part11)\n') pltPlus: '// by a java generator build with the meta CASE tool Platypus \n') pltPlus: '// (alain.plantec@univ-brest.fr)\n') pltPlus: '// \n') pltPlus: '// Please, be aware that any hand-made updating of this file can be lost!!!!. \n') pltPlus: '//-------------------------------------------------------------------------------\n\n'); yourself) ! ! !E2JNewResultingFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JTranslateDefinedTypeProcedure instanceVariableNames: 'et e ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslateDefinedTypeProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslateDefinedTypeProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslateDefinedTypeProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslateDefinedTypeProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE translate_defined_type ( VAR et : express_translater; e : defined_type ); END_PROCEDURE; ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-instance-creation'! et: aE2JExpressTranslater e: aE2JDefinedType ^ self new et: aE2JExpressTranslater e: aE2JDefinedType ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self et: (values at: 1). self e: (values at: 2) ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111925905! et: aE2JExpressTranslater e: aE2JDefinedType self et: aE2JExpressTranslater. self e: aE2JDefinedType ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing'! et: aE2JExpressTranslater et := aE2JExpressTranslater ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing'! e: aE2JDefinedType e := aE2JDefinedType ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing'! et ^ et ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !E2JTranslateDefinedTypeProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ! ! !E2JTranslateDefinedTypeProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JTranslateSchemaDefinitionProcedure instanceVariableNames: 'et e enumTypes jenum ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslateSchemaDefinitionProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslateSchemaDefinitionProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslateSchemaDefinitionProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslateSchemaDefinitionProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE translate_schema_definition ( VAR et : express_translater; e : schema_definition ); LOCAL enum_types : LIST OF defined_type; jenum : java_enumeration_type; END_LOCAL; REPEAT noi := LOINDEX ( e.entities ) TO HIINDEX ( e.entities ); ALIAS curr FOR e.entities [ noi]; ALIAS jclass FOR java_class ( curr ); new_resulting_file ( et, jclass.filepath ); result ( et, jclass.class_spec ); ALIAS jclassrw FOR java_class_step_io ( jclass ); new_resulting_file ( et, jclassrw.filepath ); result ( et, jclassrw.class_spec ); END_ALIAS; END_ALIAS; END_ALIAS; END_REPEAT; enum_types := QUERY ( t <* e.types | 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' IN TYPEOF ( t.domain ) ); REPEAT noi := LOINDEX ( enum_types ) TO HIINDEX ( enum_types ); ALIAS curr FOR enum_types [ noi]; jenum := java_enumeration_type ( ) || curr.domain; new_resulting_file ( et, jenum.filepath ); result ( et, jenum.enum_spec ); END_ALIAS; END_REPEAT; END_PROCEDURE; ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-instance-creation'! et: aE2JExpressTranslater e: aE2JSchemaDefinition ^ self new et: aE2JExpressTranslater e: aE2JSchemaDefinition ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self et: (values at: 1). self e: (values at: 2) ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111929068! et: aE2JExpressTranslater e: aE2JSchemaDefinition self et: aE2JExpressTranslater. self e: aE2JSchemaDefinition ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! et: aE2JExpressTranslater et := aE2JExpressTranslater ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! e: aE2JSchemaDefinition e := aE2JSchemaDefinition ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! enumTypes: aListOfE2JDefinedType enumTypes := aListOfE2JDefinedType ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JDefinedType as: OrderedCollection ] ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! jenum: aE2JJavaEnumerationType jenum := aE2JJavaEnumerationType ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! et ^ et ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! enumTypes ^ enumTypes ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-accessing'! jenum ^ jenum ! ! !E2JTranslateSchemaDefinitionProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :noi1824 | PlatypusCoreAliasStatement alias: ((self e entitiesUsingContext: self class context) pltAt: noi1824) statementsBlock: [ :curr529 | PlatypusCoreAliasStatement alias: (E2JJavaClass new javaClassFromValues: (OrderedCollection new add: curr529; yourself); yourself) statementsBlock: [ :jclass2624 | E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jclass2624 filepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jclass2624 classSpecUsingContext: self class context); yourself). PlatypusCoreAliasStatement alias: (E2JJavaClassStepIo new javaClassStepIoFromValues: (OrderedCollection new add: jclass2624; yourself); yourself) statementsBlock: [ :jclassrw2142 | E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jclassrw2142 filepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jclassrw2142 classSpecUsingContext: self class context); yourself) ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e entitiesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e entitiesUsingContext: self class context); yourself)). self enumTypes: ((self e typesUsingContext: self class context) select: [ :t273 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: (t273 domainUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ENUMERATION_TYPE' ]). PlatypusCoreRepeatStatement repeat: [ :noi2885 | PlatypusCoreAliasStatement alias: (self enumTypes pltAt: noi2885) statementsBlock: [ :curr601 | self jenum: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaEnumerationType new; add: (curr601 domainUsingContext: self class context); yourself)) pltAsObject. E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (self jenum filepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (self jenum enumSpecUsingContext: self class context); yourself) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self enumTypes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self enumTypes; yourself)) ! ! !E2JTranslateSchemaDefinitionProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JTranslateSchemaInstanceProcedure instanceVariableNames: 'et e ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslateSchemaInstanceProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslateSchemaInstanceProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslateSchemaInstanceProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslateSchemaInstanceProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE translate_schema_instance ( VAR et : express_translater; e : schema_instance ); REPEAT noi := LOINDEX ( e.schemata ) TO HIINDEX ( e.schemata ); ALIAS curr_schema FOR e.schemata [ noi]; translate_schema_definition ( et, curr_schema ); END_ALIAS; END_REPEAT; ALIAS jpkg FOR java_package ( e ); new_resulting_file ( et, jpkg.visitor_filepath ); result ( et, jpkg.visitor_spec ); new_resulting_file ( et, jpkg.repository_filepath ); result ( et, jpkg.repository_spec ); new_resulting_file ( et, jpkg.repository_parse_filepath ); result ( et, jpkg.repository_parse_spec ); END_ALIAS; END_PROCEDURE; ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-instance-creation'! et: aE2JExpressTranslater e: aE2JSchemaInstance ^ self new et: aE2JExpressTranslater e: aE2JSchemaInstance ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self et: (values at: 1). self e: (values at: 2) ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111935753! et: aE2JExpressTranslater e: aE2JSchemaInstance self et: aE2JExpressTranslater. self e: aE2JSchemaInstance ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing'! et: aE2JExpressTranslater et := aE2JExpressTranslater ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing'! e: aE2JSchemaInstance e := aE2JSchemaInstance ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing'! et ^ et ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !E2JTranslateSchemaInstanceProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :noi3843 | PlatypusCoreAliasStatement alias: ((self e schemataUsingContext: self class context) pltAt: noi3843) statementsBlock: [ :currSchema2556 | E2JTranslateSchemaDefinitionProcedure invokeFromValues: (OrderedCollection new add: self et; add: currSchema2556; yourself) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e schemataUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e schemataUsingContext: self class context); yourself)). PlatypusCoreAliasStatement alias: (E2JJavaPackage new javaPackageFromValues: (OrderedCollection new add: self e; yourself); yourself) statementsBlock: [ :jpkg1152 | E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 visitorFilepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 visitorSpecUsingContext: self class context); yourself). E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 repositoryFilepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 repositorySpecUsingContext: self class context); yourself). E2JNewResultingFileProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 repositoryParseFilepathUsingContext: self class context); yourself). E2JResultProcedure invokeFromValues: (OrderedCollection new add: self et; add: (jpkg1152 repositoryParseSpecUsingContext: self class context); yourself) ] ! ! !E2JTranslateSchemaInstanceProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JTranslatesFromMetaDataFileProcedure instanceVariableNames: 'chosenModelName filePath translater instances schemaInstances ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslatesFromMetaDataFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslatesFromMetaDataFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslatesFromMetaDataFileProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslatesFromMetaDataFileProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE translatesFromMetaDataFile ( chosenModelName : STRING; filePath : STRING ); LOCAL translater : express_translater := express_translater ( translation_result ( [ ] ) || entity_instance ( ) ) || entity_instance ( ); instances : LIST OF application_instance; schemaInstances : LIST OF schema_instance; END_LOCAL; ReadStepFile ( filePath ); instances := setToList ( allModelInstances ( ) ); schemaInstances := QUERY ( inst <* instances | ( 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE' IN TYPEOF ( inst ) ) AND ( inst.name = chosenModelName ) ); REPEAT no := LOINDEX ( schemaInstances ) TO HIINDEX ( schemaInstances ); translate_schema_instance ( translater, schemaInstances [ no] ); END_REPEAT; REPEAT no := LOINDEX ( translater.result.files ) TO HIINDEX ( translater.result.files ); WriteFile ( translater.result.files [ no].path, translater.result.files [ no].contents ); END_REPEAT; END_PROCEDURE; ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-instance-creation'! chosenModelName: aString filePath: aString1 ^ self new chosenModelName: aString filePath: aString1 ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self chosenModelName: (values at: 1). self filePath: (values at: 2) ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111940946! chosenModelName: aString filePath: aString1 self chosenModelName: aString. self filePath: aString1 ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! chosenModelName: aString chosenModelName := aString ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! filePath: aString1 filePath := aString1 ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! translater: aE2JExpressTranslater translater := aE2JExpressTranslater ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! instances: aListOfE2JApplicationInstance instances := aListOfE2JApplicationInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JApplicationInstance as: OrderedCollection ] ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! schemaInstances: aListOfE2JSchemaInstance schemaInstances := aListOfE2JSchemaInstance ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JSchemaInstance as: OrderedCollection ] ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! chosenModelName ^ chosenModelName ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! filePath ^ filePath ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! translater ^ translater ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! instances ^ instances ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-accessing'! schemaInstances ^ schemaInstances ! ! !E2JTranslatesFromMetaDataFileProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self translater: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JExpressTranslater new expressTranslaterFromValues: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JTranslationResult new translationResultFromValues: (OrderedCollection new add: Array new; yourself); yourself); add: PltEntityInstance new; yourself)) pltAsObject; yourself); yourself); add: PltEntityInstance new; yourself)) pltAsObject. " ---------- statements ----------" PTsReadStepFileProcedure invokeFromValues: (OrderedCollection new add: self filePath; yourself). self instances: (PTsSetToListFunction invokeFromValues: (OrderedCollection new add: PTsAllModelInstancesFunction invoke; yourself)). self schemaInstances: (self instances select: [ :inst365 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: inst365; yourself)) includes: 'PLATYPUS_ENVIRONMENT_SCHEMA.SCHEMA_INSTANCE') and: [ (inst365 nameUsingContext: self class context) = self chosenModelName ] ]). PlatypusCoreRepeatStatement repeat: [ :no2861 | E2JTranslateSchemaInstanceProcedure invokeFromValues: (OrderedCollection new add: self translater; add: (self schemaInstances pltAt: no2861); yourself) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self schemaInstances; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self schemaInstances; yourself)). PlatypusCoreRepeatStatement repeat: [ :no1394 | PTsWriteFileProcedure invokeFromValues: (OrderedCollection new add: ((((self translater resultUsingContext: self class context) filesUsingContext: self class context) pltAt: no1394) pathUsingContext: self class context); add: ((((self translater resultUsingContext: self class context) filesUsingContext: self class context) pltAt: no1394) contentsUsingContext: self class context); yourself) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: ((self translater resultUsingContext: self class context) filesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: ((self translater resultUsingContext: self class context) filesUsingContext: self class context); yourself)) ! ! !E2JTranslatesFromMetaDataFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JTranslateProcedure instanceVariableNames: 'chosen ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JTranslateProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JTranslateProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JTranslateProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JTranslateProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF EXISTS ( chosen ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; ! !E2JTranslateProcedure methodsFor: 'platypus-generated-accessing'! chosen: aString chosen := aString ! ! !E2JTranslateProcedure methodsFor: 'platypus-generated-accessing'! chosen ^ chosen ! ! !E2JTranslateProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self chosen: (PTsAskForExpressDictionaryMetaDataFunction invokeFromValues: (OrderedCollection new add: 'meta.step'; yourself)). " ---------- statements ----------" "---------- native statement ---------- " MultiByteFileStream defaultToLF. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self chosen; yourself)) ifTrue: [ E2JTranslatesFromMetaDataFileProcedure invokeFromValues: (OrderedCollection new add: self chosen; add: 'meta.step'; yourself) ] ! ! !E2JTranslateProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JResultProcedure instanceVariableNames: 'et added ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressTranslaterSchema'! !E2JResultProcedure class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JResultProcedure class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JResultProcedure class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JResultProcedure commentStamp: 'platypus comment' prior: 0! PROCEDURE result ( VAR et : express_translater; added : STRING ); et.current_result_file.contents := et.current_result_file.contents + added; END_PROCEDURE; ! !E2JResultProcedure methodsFor: 'platypus-generated-instance-creation'! et: aE2JExpressTranslater added: aString ^ self new et: aE2JExpressTranslater added: aString ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing'! fromValues: values self et: (values at: 1). self added: (values at: 2) ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 111949158! et: aE2JExpressTranslater added: aString self et: aE2JExpressTranslater. self added: aString ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing'! et: aE2JExpressTranslater et := aE2JExpressTranslater ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing'! added: aString added := aString ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing'! et ^ et ! ! !E2JResultProcedure methodsFor: 'platypus-generated-accessing'! added ^ added ! ! !E2JResultProcedure methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (self et currentResultFileUsingContext: self class context) contents: (((self et currentResultFileUsingContext: self class context) contentsUsingContext: self class context) pltPlus: self added) ! ! !E2JResultProcedure class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressTranslaterSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #E2JExpressToJavaStructureTranslaterSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JExpressToJavaStructureTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition commentStamp: 'platypus comment' prior: 0! SCHEMA express_to_java_structure_translater; USE FROM express_translater; USE FROM platypus_dictionary_schema; USE FROM platypus_environment_schema; USE FROM express_toolsbox_functions; USE FROM express_dictionary_queries; ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted.replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted.generic_value_convertion_spec; END_ENTITY; ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY; FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF NOT attr.optional_flag THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( java_attribute_getter ( ) || attributes [ no] ).accepted; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF EXISTS ( jattr.attr.min_cardinality ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF EXISTS ( jattr.attr.min_cardinality ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted.replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; END_SCHEMA; ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstanceClassName ^ #E2JExpress2javaSchemaInstance ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-context-accessing'! context ^ self schemaInstance context ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition1 ^ #(#basic_type_getter #E2JBasicTypeGetter) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition2 ^ #(#java_string_type #E2JJavaStringType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition3 ^ #(#java_logical_type #E2JJavaLogicalType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition4 ^ #(#java_binary_type #E2JJavaBinaryType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition5 ^ #(#java_boolean_type #E2JJavaBooleanType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition6 ^ #(#java_real_type #E2JJavaRealType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition7 ^ #(#java_integer_type #E2JJavaIntegerType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition8 ^ #(#java_named_type_reference #E2JJavaNamedTypeReference) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition9 ^ #(#java_array_type #E2JJavaArrayType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition10 ^ #(#java_list_type #E2JJavaListType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition11 ^ #(#java_set_type #E2JJavaSetType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition12 ^ #(#java_bag_type #E2JJavaBagType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition13 ^ #(#java_attribute #E2JJavaAttribute) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition14 ^ #(#java_explicit_attribute #E2JJavaExplicitAttribute) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition15 ^ #(#java_derived_attribute #E2JJavaDerivedAttribute) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition16 ^ #(#java_inverse_attribute #E2JJavaInverseAttribute) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition17 ^ #(#java_class #E2JJavaClass) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition18 ^ #(#java_class_step_io #E2JJavaClassStepIo) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition19 ^ #(#java_attribute_getter #E2JJavaAttributeGetter) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition20 ^ #(#java_package #E2JJavaPackage) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition21 ^ #(#java_enumeration_type #E2JJavaEnumerationType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition22 ^ #(#java_select_type #E2JJavaSelectType) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition23 ^ #(#domain_code_getter_data #E2JDomainCodeGetterData) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition24 ^ #(#domain_code_getter_replace_spec_data #E2JDomainCodeGetterReplaceSpecData) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition25 ^ #(#domain_code_getter #E2JDomainCodeGetter) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition26 ^ #(#domain_code #E2JDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition27 ^ #(#simple_type_domain_code #E2JSimpleTypeDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition28 ^ #(#entity_definition_domain_code #E2JEntityDefinitionDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition29 ^ #(#aggregation_type_domain_code #E2JAggregationTypeDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition30 ^ #(#select_type_domain_code #E2JSelectTypeDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition31 ^ #(#enumeration_type_domain_code #E2JEnumerationTypeDomainCode) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinition32 ^ #(#domain_code_getter_convertion_spec_data #E2JDomainCodeGetterConvertionSpecData) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-entities'! entityDefinitionCount ^ 32 ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration1 ^ #(#basic_domain #E2JBasicDomainFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration2 ^ #(#java_attribute_set_accessor_spec #E2JJavaAttributeSetAccessorSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration3 ^ #(#java_explicit_attribute_init #E2JJavaExplicitAttributeInitFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration4 ^ #(#java_class_step_io_extends #E2JJavaClassStepIoExtendsFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration5 ^ #(#java_class_attributes #E2JJavaClassAttributesFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration6 ^ #(#java_class_extends #E2JJavaClassExtendsFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration7 ^ #(#java_class_spec #E2JJavaClassSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration8 ^ #(#java_class_step_rw_spec #E2JJavaClassStepRwSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration9 ^ #(#java_package_visitor_spec #E2JJavaPackageVisitorSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration10 ^ #(#java_enumeration_spec #E2JJavaEnumerationSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration11 ^ #(#java_package_repository_spec #E2JJavaPackageRepositorySpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration12 ^ #(#java_package_parse_spec #E2JJavaPackageParseSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration13 ^ #(#java_attribute_get_accessor_spec #E2JJavaAttributeGetAccessorSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration14 ^ #(#java_inverse_attribute_get_accessor_spec #E2JJavaInverseAttributeGetAccessorSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration15 ^ #(#aggregation_type_replace_spec #E2JAggregationTypeReplaceSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration16 ^ #(#entity_definition_replace_spec #E2JEntityDefinitionReplaceSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration17 ^ #(#select_type_replace_spec #E2JSelectTypeReplaceSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclaration18 ^ #(#simple_type_generic_value_convertion_spec #E2JSimpleTypeGenericValueConvertionSpecFunction) ! ! !E2JExpressToJavaStructureTranslaterSchemaDefinition methodsFor: 'platypus-generated-functions'! functionDeclarationCount ^ 18 ! ! PltEntityInstance subclass: #E2JBasicTypeGetter instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JBasicTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JBasicTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JBasicTypeGetter class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JBasicTypeGetter commentStamp: 'platypus comment' prior: 0! ENTITY basic_type_getter SUBTYPE OF ( entity_instance ); DERIVE accept_string_type : entity_instance := ( java_string_type ( ) || SELF\string_type ); accept_binary_type : entity_instance := ( java_binary_type ( ) || SELF\binary_type ); accept_integer_type : entity_instance := ( java_integer_type ( ) || SELF\integer_type ); accept_real_type : entity_instance := ( java_real_type ( ) || SELF\real_type ); accept_boolean_type : entity_instance := ( java_boolean_type ( ) || SELF\boolean_type ); accept_logical_type : entity_instance := ( java_logical_type ( ) || SELF\logical_type ); accept_named_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_defined_type : entity_instance := basic_domain ( SELF.domain ); accept_defined_type_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition_reference : entity_instance := basic_domain ( SELF.ref ); accept_entity_definition : entity_instance := java_class ( SELF ); accept_list_type : entity_instance := ( java_list_type ( ) || SELF\list_type ); accept_array_type : entity_instance := ( java_array_type ( ) || SELF\array_type ); accept_set_type : entity_instance := ( java_set_type ( ) || SELF\set_type ); accept_bag_type : entity_instance := ( java_bag_type ( ) || SELF\bag_type ); accept_select_type : entity_instance := ( java_select_type ( ) || SELF\select_type ); accept_enumeration_type : entity_instance := ( java_enumeration_type ( ) || SELF\enumeration_type ); END_ENTITY; ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-classifying'! isE2JBasicTypeGetter ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JBasicTypeGetter ^ false ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptBasicTypeGetter: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptBasicTypeGetter: e "my subclasses have to redefine it" ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-copying'! basicTypeGetterCopyTo: another ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self basicTypeGetterCopyTo: another ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self basicTypeGetterCopyTo: another ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! basicTypeGetterFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! basicTypeGetterToValues: values ^ values ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self basicTypeGetterToValues: (super toValues: values) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self basicTypeGetterFromValues: (super fromValues: values) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self basicTypeGetterFromValues: values ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self basicTypeGetterToValues: values ! ! !E2JBasicTypeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JBasicTypeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext ^ self acceptStringTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaStringType new; add: (aReceiver asPlatypusComplexInstance \ #PltStringType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptStringType ^ self acceptStringTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryTypeUsingContext: aContext ^ self acceptBinaryTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaBinaryType new; add: (aReceiver asPlatypusComplexInstance \ #PltBinaryType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryType ^ self acceptBinaryTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext ^ self acceptIntegerTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaIntegerType new; add: (aReceiver asPlatypusComplexInstance \ #PltIntegerType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerType ^ self acceptIntegerTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext ^ self acceptRealTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaRealType new; add: (aReceiver asPlatypusComplexInstance \ #PltRealType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptRealType ^ self acceptRealTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext ^ self acceptBooleanTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaBooleanType new; add: (aReceiver asPlatypusComplexInstance \ #PltBooleanType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanType ^ self acceptBooleanTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalTypeUsingContext: aContext ^ self acceptLogicalTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaLogicalType new; add: (aReceiver asPlatypusComplexInstance \ #PltLogicalType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalType ^ self acceptLogicalTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReferenceUsingContext: aContext ^ self acceptNamedTypeReferenceUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReferenceUsingContext: aContext receiver: aReceiver ^ E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReference ^ self acceptNamedTypeReferenceUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext ^ self acceptDefinedTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext receiver: aReceiver ^ E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver domainUsingContext: self class context); yourself) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedType ^ self acceptDefinedTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext ^ self acceptDefinedTypeReferenceUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext receiver: aReceiver ^ E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReference ^ self acceptDefinedTypeReferenceUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext ^ self acceptEntityDefinitionReferenceUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext receiver: aReceiver ^ E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver refUsingContext: self class context); yourself) ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReference ^ self acceptEntityDefinitionReferenceUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext ^ self acceptEntityDefinitionUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext receiver: aReceiver ^ E2JJavaClass new javaClassFromValues: (OrderedCollection new add: aReceiver; yourself); yourself ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinition ^ self acceptEntityDefinitionUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext ^ self acceptListTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaListType new; add: (aReceiver asPlatypusComplexInstance \ #PltListType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptListType ^ self acceptListTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext ^ self acceptArrayTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaArrayType new; add: (aReceiver asPlatypusComplexInstance \ #PltArrayType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayType ^ self acceptArrayTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext ^ self acceptSetTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaSetType new; add: (aReceiver asPlatypusComplexInstance \ #PltSetType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSetType ^ self acceptSetTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext ^ self acceptBagTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaBagType new; add: (aReceiver asPlatypusComplexInstance \ #PltBagType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptBagType ^ self acceptBagTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectTypeUsingContext: aContext ^ self acceptSelectTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaSelectType new; add: (aReceiver asPlatypusComplexInstance \ #PltSelectType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectType ^ self acceptSelectTypeUsingContext: self class context ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext ^ self acceptEnumerationTypeUsingContext: aContext receiver: self ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaEnumerationType new; add: (aReceiver asPlatypusComplexInstance \ #PltEnumerationType) pltAsObject; yourself)) pltAsObject ! ! !E2JBasicTypeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationType ^ self acceptEnumerationTypeUsingContext: self class context ! ! PltStringType subclass: #E2JJavaStringType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaStringType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaStringType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaStringType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaStringType commentStamp: 'platypus comment' prior: 0! ENTITY java_string_type SUBTYPE OF ( string_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ! !E2JJavaStringType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaStringType methodsFor: 'platypus-generated-classifying'! isE2JJavaStringType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaStringType ^ false ! ! !E2JJavaStringType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaStringType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaStringType: e "my subclasses have to redefine it" ! ! !E2JJavaStringType methodsFor: 'platypus-generated-copying'! javaStringTypeCopyTo: another ! ! !E2JJavaStringType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaStringTypeCopyTo: another ! ! !E2JJavaStringType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaStringTypeCopyTo: another ! ! !E2JJavaStringType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! javaStringTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! javaStringTypeToValues: values ^ values ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaStringTypeToValues: (super toValues: values) ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaStringTypeFromValues: (super fromValues: values) ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaStringTypeFromValues: values ! ! !E2JJavaStringType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaStringTypeToValues: values ! ! !E2JJavaStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaStringType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'String' ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ '""' ! ! !E2JJavaStringType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltLogicalType subclass: #E2JJavaLogicalType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaLogicalType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaLogicalType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaLogicalType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaLogicalType commentStamp: 'platypus comment' prior: 0! ENTITY java_logical_type SUBTYPE OF ( logical_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ! !E2JJavaLogicalType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-classifying'! isE2JJavaLogicalType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaLogicalType ^ false ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaLogicalType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaLogicalType: e "my subclasses have to redefine it" ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-copying'! javaLogicalTypeCopyTo: another ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaLogicalTypeCopyTo: another ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaLogicalTypeCopyTo: another ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! javaLogicalTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! javaLogicalTypeToValues: values ^ values ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaLogicalTypeToValues: (super toValues: values) ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaLogicalTypeFromValues: (super fromValues: values) ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaLogicalTypeFromValues: values ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaLogicalTypeToValues: values ! ! !E2JJavaLogicalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaLogicalType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'Boolean' ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ 'false' ! ! !E2JJavaLogicalType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltBinaryType subclass: #E2JJavaBinaryType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaBinaryType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaBinaryType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaBinaryType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaBinaryType commentStamp: 'platypus comment' prior: 0! ENTITY java_binary_type SUBTYPE OF ( binary_type ); DERIVE type_spec : STRING := 'String'; type_init : STRING := '""'; END_ENTITY; ! !E2JJavaBinaryType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-classifying'! isE2JJavaBinaryType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaBinaryType ^ false ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaBinaryType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaBinaryType: e "my subclasses have to redefine it" ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-copying'! javaBinaryTypeCopyTo: another ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaBinaryTypeCopyTo: another ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaBinaryTypeCopyTo: another ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! javaBinaryTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! javaBinaryTypeToValues: values ^ values ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaBinaryTypeToValues: (super toValues: values) ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaBinaryTypeFromValues: (super fromValues: values) ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaBinaryTypeFromValues: values ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaBinaryTypeToValues: values ! ! !E2JJavaBinaryType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaBinaryType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'String' ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ '""' ! ! !E2JJavaBinaryType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltBooleanType subclass: #E2JJavaBooleanType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaBooleanType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaBooleanType commentStamp: 'platypus comment' prior: 0! ENTITY java_boolean_type SUBTYPE OF ( boolean_type ); DERIVE type_spec : STRING := 'Boolean'; type_init : STRING := 'false'; END_ENTITY; ! !E2JJavaBooleanType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-classifying'! isE2JJavaBooleanType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaBooleanType ^ false ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaBooleanType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaBooleanType: e "my subclasses have to redefine it" ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-copying'! javaBooleanTypeCopyTo: another ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaBooleanTypeCopyTo: another ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaBooleanTypeCopyTo: another ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! javaBooleanTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! javaBooleanTypeToValues: values ^ values ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaBooleanTypeToValues: (super toValues: values) ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaBooleanTypeFromValues: (super fromValues: values) ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaBooleanTypeFromValues: values ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaBooleanTypeToValues: values ! ! !E2JJavaBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaBooleanType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'Boolean' ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ 'false' ! ! !E2JJavaBooleanType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltRealType subclass: #E2JJavaRealType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaRealType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaRealType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaRealType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaRealType commentStamp: 'platypus comment' prior: 0! ENTITY java_real_type SUBTYPE OF ( real_type ); DERIVE type_spec : STRING := 'Double'; type_init : STRING := '0.0'; END_ENTITY; ! !E2JJavaRealType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaRealType methodsFor: 'platypus-generated-classifying'! isE2JJavaRealType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaRealType ^ false ! ! !E2JJavaRealType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaRealType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaRealType: e "my subclasses have to redefine it" ! ! !E2JJavaRealType methodsFor: 'platypus-generated-copying'! javaRealTypeCopyTo: another ! ! !E2JJavaRealType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaRealTypeCopyTo: another ! ! !E2JJavaRealType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaRealTypeCopyTo: another ! ! !E2JJavaRealType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! javaRealTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! javaRealTypeToValues: values ^ values ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaRealTypeToValues: (super toValues: values) ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaRealTypeFromValues: (super fromValues: values) ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaRealTypeFromValues: values ! ! !E2JJavaRealType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaRealTypeToValues: values ! ! !E2JJavaRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaRealType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'Double' ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ '0.0' ! ! !E2JJavaRealType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltIntegerType subclass: #E2JJavaIntegerType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaIntegerType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaIntegerType commentStamp: 'platypus comment' prior: 0! ENTITY java_integer_type SUBTYPE OF ( integer_type ); DERIVE type_spec : STRING := 'Integer'; type_init : STRING := '0'; END_ENTITY; ! !E2JJavaIntegerType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-classifying'! isE2JJavaIntegerType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaIntegerType ^ false ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaIntegerType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaIntegerType: e "my subclasses have to redefine it" ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-copying'! javaIntegerTypeCopyTo: another ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaIntegerTypeCopyTo: another ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaIntegerTypeCopyTo: another ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! javaIntegerTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! javaIntegerTypeToValues: values ^ values ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaIntegerTypeToValues: (super toValues: values) ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaIntegerTypeFromValues: (super fromValues: values) ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaIntegerTypeFromValues: values ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaIntegerTypeToValues: values ! ! !E2JJavaIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaIntegerType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'Integer' ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ '0' ! ! !E2JJavaIntegerType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltNamedTypeReference subclass: #E2JJavaNamedTypeReference instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaNamedTypeReference class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaNamedTypeReference commentStamp: 'platypus comment' prior: 0! ENTITY java_named_type_reference SUBTYPE OF ( named_type_reference ); DERIVE type_spec : STRING := SELF.handled.name; type_init : STRING := 'null'; END_ENTITY; ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-classifying'! isE2JJavaNamedTypeReference ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaNamedTypeReference ^ false ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaNamedTypeReference: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaNamedTypeReference: e "my subclasses have to redefine it" ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-copying'! javaNamedTypeReferenceCopyTo: another ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaNamedTypeReferenceCopyTo: another ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaNamedTypeReferenceCopyTo: another ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! javaNamedTypeReferenceFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! javaNamedTypeReferenceToValues: values ^ values ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaNamedTypeReferenceToValues: (super toValues: values) ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaNamedTypeReferenceFromValues: (super fromValues: values) ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaNamedTypeReferenceFromValues: values ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaNamedTypeReferenceToValues: values ! ! !E2JJavaNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaNamedTypeReference class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ (aReceiver handledUsingContext: aContext) nameUsingContext: aContext ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ 'null' ! ! !E2JJavaNamedTypeReference methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltArrayType subclass: #E2JJavaArrayType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaArrayType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaArrayType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaArrayType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaArrayType commentStamp: 'platypus comment' prior: 0! ENTITY java_array_type SUBTYPE OF ( array_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ! !E2JJavaArrayType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-classifying'! isE2JJavaArrayType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaArrayType ^ false ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaArrayType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaArrayType: e "my subclasses have to redefine it" ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-copying'! javaArrayTypeCopyTo: another ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaArrayTypeCopyTo: another ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaArrayTypeCopyTo: another ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! javaArrayTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! javaArrayTypeToValues: values ^ values ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaArrayTypeToValues: (super toValues: values) ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaArrayTypeFromValues: (super fromValues: values) ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaArrayTypeFromValues: values ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaArrayTypeToValues: values ! ! !E2JJavaArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaArrayType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ ('ArrayList<' pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: aContext)) pltPlus: '>' ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ ('new ' pltPlus: (aReceiver typeSpecUsingContext: aContext)) pltPlus: '()' ! ! !E2JJavaArrayType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltListType subclass: #E2JJavaListType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaListType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaListType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaListType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaListType commentStamp: 'platypus comment' prior: 0! ENTITY java_list_type SUBTYPE OF ( list_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ! !E2JJavaListType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaListType methodsFor: 'platypus-generated-classifying'! isE2JJavaListType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaListType ^ false ! ! !E2JJavaListType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaListType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaListType: e "my subclasses have to redefine it" ! ! !E2JJavaListType methodsFor: 'platypus-generated-copying'! javaListTypeCopyTo: another ! ! !E2JJavaListType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaListTypeCopyTo: another ! ! !E2JJavaListType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaListTypeCopyTo: another ! ! !E2JJavaListType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! javaListTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! javaListTypeToValues: values ^ values ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaListTypeToValues: (super toValues: values) ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaListTypeFromValues: (super fromValues: values) ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaListTypeFromValues: values ! ! !E2JJavaListType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaListTypeToValues: values ! ! !E2JJavaListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaListType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ ('ArrayList<' pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: aContext)) pltPlus: '>' ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ ('new ' pltPlus: (aReceiver typeSpecUsingContext: aContext)) pltPlus: '()' ! ! !E2JJavaListType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltSetType subclass: #E2JJavaSetType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaSetType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaSetType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaSetType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaSetType commentStamp: 'platypus comment' prior: 0! ENTITY java_set_type SUBTYPE OF ( set_type ); DERIVE type_spec : STRING := 'HashSet<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ! !E2JJavaSetType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaSetType methodsFor: 'platypus-generated-classifying'! isE2JJavaSetType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaSetType ^ false ! ! !E2JJavaSetType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaSetType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaSetType: e "my subclasses have to redefine it" ! ! !E2JJavaSetType methodsFor: 'platypus-generated-copying'! javaSetTypeCopyTo: another ! ! !E2JJavaSetType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaSetTypeCopyTo: another ! ! !E2JJavaSetType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaSetTypeCopyTo: another ! ! !E2JJavaSetType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! javaSetTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! javaSetTypeToValues: values ^ values ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaSetTypeToValues: (super toValues: values) ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaSetTypeFromValues: (super fromValues: values) ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaSetTypeFromValues: values ! ! !E2JJavaSetType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaSetTypeToValues: values ! ! !E2JJavaSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaSetType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ ('HashSet<' pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: aContext)) pltPlus: '>' ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ ('new ' pltPlus: (aReceiver typeSpecUsingContext: aContext)) pltPlus: '()' ! ! !E2JJavaSetType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltBagType subclass: #E2JJavaBagType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaBagType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaBagType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaBagType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaBagType commentStamp: 'platypus comment' prior: 0! ENTITY java_bag_type SUBTYPE OF ( bag_type ); DERIVE type_spec : STRING := 'ArrayList<' + basic_domain ( SELF.element_type ).type_spec + '>'; type_init : STRING := 'new ' + type_spec + '()'; END_ENTITY; ! !E2JJavaBagType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaBagType methodsFor: 'platypus-generated-classifying'! isE2JJavaBagType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaBagType ^ false ! ! !E2JJavaBagType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaBagType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaBagType: e "my subclasses have to redefine it" ! ! !E2JJavaBagType methodsFor: 'platypus-generated-copying'! javaBagTypeCopyTo: another ! ! !E2JJavaBagType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaBagTypeCopyTo: another ! ! !E2JJavaBagType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaBagTypeCopyTo: another ! ! !E2JJavaBagType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! javaBagTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! javaBagTypeToValues: values ^ values ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaBagTypeToValues: (super toValues: values) ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaBagTypeFromValues: (super fromValues: values) ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaBagTypeFromValues: values ! ! !E2JJavaBagType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaBagTypeToValues: values ! ! !E2JJavaBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaBagType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ ('ArrayList<' pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (aReceiver elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: aContext)) pltPlus: '>' ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ ('new ' pltPlus: (aReceiver typeSpecUsingContext: aContext)) pltPlus: '()' ! ! !E2JJavaBagType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! PltEntityInstance subclass: #E2JJavaAttribute instanceVariableNames: 'attr' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaAttribute commentStamp: 'platypus comment' prior: 0! ENTITY java_attribute SUBTYPE OF ( entity_instance ); attr : attribute; DERIVE jclass : java_class := java_class ( attr.owner ); name : STRING := SELF.attr.name; var_name : STRING := SELF.name + '_'; get_accessor_name : STRING := 'get' + capitalize ( SELF.name, true ); attribute_spec : STRING := ''; attribute_init : STRING := ''; set_accessor_spec : STRING := ''; get_accessor_spec : STRING := ''; domain : dictionary_instance := basic_domain ( SELF.attr.domain ); redeclaring : attribute := SELF.attr.redeclaring.ref; replace_reference_spec : STRING := ''; generic_value_convertion_spec : STRING := ''; END_ENTITY; ! !E2JJavaAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attr := nil ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-classifying'! isE2JJavaAttribute ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaAttribute ^ false ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaAttribute: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaAttribute: e "my subclasses have to redefine it" ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-copying'! javaAttributeCopyTo: another another fastSetAttr: self attr ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaAttributeCopyTo: another ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaAttributeCopyTo: another ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! javaAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttr: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! javaAttributeToValues: values values add: self attr. ^ values ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaAttributeToValues: (super toValues: values) ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaAttributeFromValues: (super fromValues: values) ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaAttributeFromValues: values ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaAttributeToValues: values ! ! !E2JJavaAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-set-accessing'! setAttr: aE2JAttribute self attr: aE2JAttribute ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-accessing'! attr: aE2JAttribute attr := aE2JAttribute ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttr: aE2JAttribute attr := aE2JAttribute ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-with-context-accessing'! attrUsingContext: aContext ^ self attr ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! jclassUsingContext: aContext ^ self jclassUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! jclassUsingContext: aContext receiver: aReceiver ^ E2JJavaClass new javaClassFromValues: (OrderedCollection new add: (aReceiver attr ownerUsingContext: self class context); yourself); yourself ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! jclass ^ self jclassUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext ^ self nameUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext receiver: aReceiver ^ (aReceiver attrUsingContext: aContext) nameUsingContext: aContext ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! name ^ self nameUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! varNameUsingContext: aContext ^ self varNameUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! varNameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '_' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! varName ^ self varNameUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorNameUsingContext: aContext ^ self getAccessorNameUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorNameUsingContext: aContext receiver: aReceiver ^ 'get' pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver nameUsingContext: self class context); add: true; yourself)) ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorName ^ self getAccessorNameUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeSpecUsingContext: aContext ^ self attributeSpecUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeSpec ^ self attributeSpecUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeInitUsingContext: aContext ^ self attributeInitUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeInitUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! attributeInit ^ self attributeInitUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpecUsingContext: aContext ^ self setAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpec ^ self setAccessorSpecUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext ^ self getAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpec ^ self getAccessorSpecUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! domainUsingContext: aContext ^ self domainUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! domainUsingContext: aContext receiver: aReceiver ^ E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: ((aReceiver attrUsingContext: self class context) domainUsingContext: self class context); yourself) ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! domain ^ self domainUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! redeclaringUsingContext: aContext ^ self redeclaringUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! redeclaringUsingContext: aContext receiver: aReceiver ^ ((aReceiver attrUsingContext: aContext) redeclaringUsingContext: aContext) refUsingContext: aContext ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! redeclaring ^ self redeclaringUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpecUsingContext: aContext ^ self replaceReferenceSpecUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpec ^ self replaceReferenceSpecUsingContext: self class context ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext ^ self genericValueConvertionSpecUsingContext: aContext receiver: self ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpec ^ self genericValueConvertionSpecUsingContext: self class context ! ! E2JJavaAttribute subclass: #E2JJavaExplicitAttribute instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaExplicitAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaExplicitAttribute commentStamp: 'platypus comment' prior: 0! ENTITY java_explicit_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : explicit_attribute; DERIVE set_accessor_name : STRING := 'set' + capitalize ( name, true ); SELF\java_attribute.set_accessor_spec : STRING := java_attribute_set_accessor_spec ( SELF ); SELF\java_attribute.get_accessor_spec : STRING := java_attribute_get_accessor_spec ( SELF ); SELF\java_attribute.attribute_spec : STRING := ' private ' + domain.type_spec + ' ' + var_name + ';\n'; SELF\java_attribute.attribute_init : STRING := java_explicit_attribute_init ( SELF ); SELF\java_attribute.replace_reference_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( attr.owner, get_accessor_name, set_accessor_name, ?, ?, 'i' ) ) || attr.domain ).accepted.replace_spec; SELF\java_attribute.generic_value_convertion_spec : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_convertion_spec_data ( SELF ) ) || attr.domain ).accepted.generic_value_convertion_spec; END_ENTITY; ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attr := nil ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-classifying'! isE2JJavaExplicitAttribute ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaExplicitAttribute ^ false ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaExplicitAttribute: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaExplicitAttribute: e "my subclasses have to redefine it" ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-copying'! javaExplicitAttributeCopyTo: another another fastSetAttr: self attr ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaExplicitAttributeCopyTo: another ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaExplicitAttributeCopyTo: another ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! javaExplicitAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttr: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! javaExplicitAttributeToValues: values values add: self attr. ^ values ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaExplicitAttributeToValues: (super toValues: values) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaExplicitAttributeFromValues: (super fromValues: values) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaExplicitAttributeFromValues: values ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaExplicitAttributeToValues: values ! ! !E2JJavaExplicitAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaExplicitAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-set-accessing'! setAttr: aE2JExplicitAttribute self attr: aE2JExplicitAttribute ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-accessing'! attr: aE2JExplicitAttribute attr := aE2JExplicitAttribute ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttr: aE2JExplicitAttribute attr := aE2JExplicitAttribute ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-with-context-accessing'! attrUsingContext: aContext ^ self attr ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorNameUsingContext: aContext ^ self setAccessorNameUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorNameUsingContext: aContext receiver: aReceiver ^ 'set' pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (aReceiver nameUsingContext: aContext); add: true; yourself)) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorName ^ self setAccessorNameUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpecUsingContext: aContext ^ self setAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaAttributeSetAccessorSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! setAccessorSpec ^ self setAccessorSpecUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext ^ self getAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaAttributeGetAccessorSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpec ^ self getAccessorSpecUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeSpecUsingContext: aContext ^ self attributeSpecUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeSpecUsingContext: aContext receiver: aReceiver ^ (((' private ' pltPlus: ((aReceiver domainUsingContext: aContext) typeSpecUsingContext: aContext)) pltPlus: ' ') pltPlus: (aReceiver varNameUsingContext: aContext)) pltPlus: ';\n' ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeSpec ^ self attributeSpecUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeInitUsingContext: aContext ^ self attributeInitUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeInitUsingContext: aContext receiver: aReceiver ^ E2JJavaExplicitAttributeInitFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! attributeInit ^ self attributeInitUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpecUsingContext: aContext ^ self replaceReferenceSpecUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpecUsingContext: aContext receiver: aReceiver ^ ((PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCodeGetterData new; add: (E2JDomainCodeGetterReplaceSpecData new domainCodeGetterReplaceSpecDataFromValues: (OrderedCollection new add: (aReceiver attr ownerUsingContext: self class context); add: (aReceiver getAccessorNameUsingContext: aContext); add: (aReceiver setAccessorNameUsingContext: aContext); add: nil; add: nil; add: 'i'; yourself); yourself); yourself)) pltAsObject; yourself); yourself); add: (aReceiver attr domainUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext) replaceSpecUsingContext: aContext ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! replaceReferenceSpec ^ self replaceReferenceSpecUsingContext: self class context ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext ^ self genericValueConvertionSpecUsingContext: aContext receiver: self ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext receiver: aReceiver ^ ((PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCodeGetterData new; add: (E2JDomainCodeGetterConvertionSpecData new domainCodeGetterConvertionSpecDataFromValues: (OrderedCollection new add: aReceiver; yourself); yourself); yourself)) pltAsObject; yourself); yourself); add: (aReceiver attr domainUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext) genericValueConvertionSpecUsingContext: aContext ! ! !E2JJavaExplicitAttribute methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpec ^ self genericValueConvertionSpecUsingContext: self class context ! ! E2JJavaAttribute subclass: #E2JJavaDerivedAttribute instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaDerivedAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaDerivedAttribute commentStamp: 'platypus comment' prior: 0! ENTITY java_derived_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : derived_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := ' public ' + domain.type_spec + ' ' + get_accessor_name + '() { throw new Exception("Not yet generated") }\n'; END_ENTITY; ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attr := nil ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-classifying'! isE2JJavaDerivedAttribute ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaDerivedAttribute ^ false ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaDerivedAttribute: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaDerivedAttribute: e "my subclasses have to redefine it" ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-copying'! javaDerivedAttributeCopyTo: another another fastSetAttr: self attr ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaDerivedAttributeCopyTo: another ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaDerivedAttributeCopyTo: another ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! javaDerivedAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttr: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! javaDerivedAttributeToValues: values values add: self attr. ^ values ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaDerivedAttributeToValues: (super toValues: values) ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaDerivedAttributeFromValues: (super fromValues: values) ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaDerivedAttributeFromValues: values ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaDerivedAttributeToValues: values ! ! !E2JJavaDerivedAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaDerivedAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-set-accessing'! setAttr: aE2JDerivedAttribute self attr: aE2JDerivedAttribute ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-accessing'! attr: aE2JDerivedAttribute attr := aE2JDerivedAttribute ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttr: aE2JDerivedAttribute attr := aE2JDerivedAttribute ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-with-context-accessing'! attrUsingContext: aContext ^ self attr ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext ^ self getAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext receiver: aReceiver ^ (((' public ' pltPlus: ((aReceiver domainUsingContext: aContext) typeSpecUsingContext: aContext)) pltPlus: ' ') pltPlus: (aReceiver getAccessorNameUsingContext: aContext)) pltPlus: '() { throw new Exception("Not yet generated") }\n' ! ! !E2JJavaDerivedAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpec ^ self getAccessorSpecUsingContext: self class context ! ! E2JJavaAttribute subclass: #E2JJavaInverseAttribute instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaInverseAttribute class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaInverseAttribute commentStamp: 'platypus comment' prior: 0! ENTITY java_inverse_attribute SUBTYPE OF ( java_attribute ); SELF\java_attribute.attr : inverse_attribute; DERIVE SELF\java_attribute.get_accessor_spec : STRING := java_inverse_attribute_get_accessor_spec ( SELF ); inverted_jattr : java_explicit_attribute := java_attribute ( attr.inverted_attr.ref ) || java_explicit_attribute ( attr.inverted_attr.ref ); inverted_jclass : java_class := java_class ( attr.inverted_attr.ref.owner ); inverted_attr_owner_class_name : STRING := inverted_jclass.name; inverted_attr_get_accessor_name : STRING := inverted_jattr.get_accessor_name; END_ENTITY; ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. attr := nil ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-classifying'! isE2JJavaInverseAttribute ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaInverseAttribute ^ false ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaInverseAttribute: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaInverseAttribute: e "my subclasses have to redefine it" ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-copying'! javaInverseAttributeCopyTo: another another fastSetAttr: self attr ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaInverseAttributeCopyTo: another ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaInverseAttributeCopyTo: another ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! javaInverseAttributeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setAttr: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! javaInverseAttributeToValues: values values add: self attr. ^ values ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaInverseAttributeToValues: (super toValues: values) ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaInverseAttributeFromValues: (super fromValues: values) ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaInverseAttributeFromValues: values ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaInverseAttributeToValues: values ! ! !E2JJavaInverseAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaInverseAttribute class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-set-accessing'! setAttr: aE2JInverseAttribute self attr: aE2JInverseAttribute ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-accessing'! attr: aE2JInverseAttribute attr := aE2JInverseAttribute ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-fast-set-accessing'! fastSetAttr: aE2JInverseAttribute attr := aE2JInverseAttribute ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-with-context-accessing'! attrUsingContext: aContext ^ self attr ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext ^ self getAccessorSpecUsingContext: aContext receiver: self ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaInverseAttributeGetAccessorSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! getAccessorSpec ^ self getAccessorSpecUsingContext: self class context ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJattrUsingContext: aContext ^ self invertedJattrUsingContext: aContext receiver: self ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJattrUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JJavaAttribute new javaAttributeFromValues: (OrderedCollection new add: ((aReceiver attr invertedAttrUsingContext: self class context) refUsingContext: self class context); yourself); yourself); add: (E2JJavaExplicitAttribute new javaExplicitAttributeFromValues: (OrderedCollection new add: ((aReceiver attr invertedAttrUsingContext: self class context) refUsingContext: self class context); yourself); yourself); yourself)) pltAsObject ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJattr ^ self invertedJattrUsingContext: self class context ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJclassUsingContext: aContext ^ self invertedJclassUsingContext: aContext receiver: self ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJclassUsingContext: aContext receiver: aReceiver ^ E2JJavaClass new javaClassFromValues: (OrderedCollection new add: (((aReceiver attr invertedAttrUsingContext: self class context) refUsingContext: self class context) ownerUsingContext: self class context); yourself); yourself ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedJclass ^ self invertedJclassUsingContext: self class context ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrOwnerClassNameUsingContext: aContext ^ self invertedAttrOwnerClassNameUsingContext: aContext receiver: self ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrOwnerClassNameUsingContext: aContext receiver: aReceiver ^ (aReceiver invertedJclassUsingContext: aContext) nameUsingContext: aContext ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrOwnerClassName ^ self invertedAttrOwnerClassNameUsingContext: self class context ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrGetAccessorNameUsingContext: aContext ^ self invertedAttrGetAccessorNameUsingContext: aContext receiver: self ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrGetAccessorNameUsingContext: aContext receiver: aReceiver ^ (aReceiver invertedJattrUsingContext: aContext) getAccessorNameUsingContext: aContext ! ! !E2JJavaInverseAttribute methodsFor: 'platypus-generated-deriving'! invertedAttrGetAccessorName ^ self invertedAttrGetAccessorNameUsingContext: self class context ! ! PltDictionaryInstance subclass: #E2JJavaClass instanceVariableNames: 'ent' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClass class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClass class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClass class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClass commentStamp: 'platypus comment' prior: 0! ENTITY java_class SUBTYPE OF ( dictionary_instance ); ent : entity_definition; DERIVE name : STRING := ent.name; type_spec : STRING := name; type_init : STRING := 'null'; filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; package : java_package := java_package ( schema_instance_of ( ent ) ); extends : STRING := NVL ( ' extends ' + java_class_extends ( SELF ), '' ); implements : STRING := ''; accept : STRING := ' public void accept(' + package.visitor_name + ' visitor ) { visitor.accept((' + name + ') this); }\n'; readerWriter : STRING := ' public ' + step_core_package + '.' + package.step_rw_name + ' readerWriter() { return new ' + java_class_step_io ( SELF ).name + '(); }\n'; class_spec : STRING := java_class_spec ( SELF ); attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, false ); all_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, false, true ); explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, false ); inverse_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'INVERSE_ATTRIBUTE', false, false ); all_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', false, true ); inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, false ); all_inherited_attributes : LIST OF java_attribute := java_class_attributes ( SELF, ?, true, true ); inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, false ); all_inherited_explicit_attributes : LIST OF java_attribute := java_class_attributes ( SELF, 'EXPLICIT_ATTRIBUTE', true, true ); END_ENTITY; ! !E2JJavaClass methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. ent := nil ! ! !E2JJavaClass methodsFor: 'platypus-generated-classifying'! isE2JJavaClass ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaClass ^ false ! ! !E2JJavaClass methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaClass: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaClass: e "my subclasses have to redefine it" ! ! !E2JJavaClass methodsFor: 'platypus-generated-copying'! javaClassCopyTo: another another fastSetEnt: self ent ! ! !E2JJavaClass methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaClassCopyTo: another ! ! !E2JJavaClass methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaClassCopyTo: another ! ! !E2JJavaClass methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! javaClassFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setEnt: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! javaClassToValues: values values add: self ent. ^ values ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaClassToValues: (super toValues: values) ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaClassFromValues: (super fromValues: values) ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaClassFromValues: values ! ! !E2JJavaClass methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaClassToValues: values ! ! !E2JJavaClass class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaClass class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaClass methodsFor: 'platypus-generated-accessing'! ent ^ ent ! ! !E2JJavaClass methodsFor: 'platypus-generated-set-accessing'! setEnt: aE2JEntityDefinition self ent: aE2JEntityDefinition ! ! !E2JJavaClass methodsFor: 'platypus-generated-accessing'! ent: aE2JEntityDefinition ent := aE2JEntityDefinition ! ! !E2JJavaClass methodsFor: 'platypus-generated-fast-set-accessing'! fastSetEnt: aE2JEntityDefinition ent := aE2JEntityDefinition ! ! !E2JJavaClass methodsFor: 'platypus-generated-with-context-accessing'! entUsingContext: aContext ^ self ent ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext ^ self nameUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext receiver: aReceiver ^ aReceiver ent nameUsingContext: aContext ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! name ^ self nameUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ 'null' ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext ^ self filenameUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filename ^ self filenameUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext ^ self filepathUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext receiver: aReceiver ^ (((aReceiver packageUsingContext: aContext) nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver filenameUsingContext: aContext) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! filepath ^ self filepathUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! packageUsingContext: aContext ^ self packageUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! packageUsingContext: aContext receiver: aReceiver ^ E2JJavaPackage new javaPackageFromValues: (OrderedCollection new add: (PTsSchemaInstanceOfFunction invokeFromValues: (OrderedCollection new add: aReceiver ent; yourself)); yourself); yourself ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! package ^ self packageUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! extendsUsingContext: aContext ^ self extendsUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! extendsUsingContext: aContext receiver: aReceiver ^ PltNVLFunction invokeFromValues: (OrderedCollection new add: (' extends ' pltPlus: (E2JJavaClassExtendsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself))); add: ''; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! extends ^ self extendsUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! implementsUsingContext: aContext ^ self implementsUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! implementsUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! implements ^ self implementsUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! acceptUsingContext: aContext ^ self acceptUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! acceptUsingContext: aContext receiver: aReceiver ^ (((' public void accept(' pltPlus: ((aReceiver packageUsingContext: aContext) visitorNameUsingContext: aContext)) pltPlus: ' visitor ) { visitor.accept((') pltPlus: (aReceiver nameUsingContext: aContext)) pltPlus: ') this); }\n' ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! accept ^ self acceptUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! readerWriterUsingContext: aContext ^ self readerWriterUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! readerWriterUsingContext: aContext receiver: aReceiver ^ (((((' public ' pltPlus: 'step.core') pltPlus: '.') pltPlus: ((aReceiver packageUsingContext: aContext) stepRwNameUsingContext: aContext)) pltPlus: ' readerWriter() { return new ') pltPlus: ((E2JJavaClassStepIo new javaClassStepIoFromValues: (OrderedCollection new add: aReceiver; yourself); yourself) nameUsingContext: aContext)) pltPlus: '(); }\n' ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! readerWriter ^ self readerWriterUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! classSpecUsingContext: aContext ^ self classSpecUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! classSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaClassSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! classSpec ^ self classSpecUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! attributesUsingContext: aContext ^ self attributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! attributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: nil; add: false; add: false; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! attributes ^ self attributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allAttributesUsingContext: aContext ^ self allAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: nil; add: false; add: true; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allAttributes ^ self allAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! explicitAttributesUsingContext: aContext ^ self explicitAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! explicitAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: 'EXPLICIT_ATTRIBUTE'; add: false; add: false; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! explicitAttributes ^ self explicitAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inverseAttributesUsingContext: aContext ^ self inverseAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inverseAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: 'INVERSE_ATTRIBUTE'; add: false; add: false; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inverseAttributes ^ self inverseAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allExplicitAttributesUsingContext: aContext ^ self allExplicitAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allExplicitAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: 'EXPLICIT_ATTRIBUTE'; add: false; add: true; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allExplicitAttributes ^ self allExplicitAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedAttributesUsingContext: aContext ^ self inheritedAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: nil; add: true; add: false; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedAttributes ^ self inheritedAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedAttributesUsingContext: aContext ^ self allInheritedAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: nil; add: true; add: true; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedAttributes ^ self allInheritedAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedExplicitAttributesUsingContext: aContext ^ self inheritedExplicitAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedExplicitAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: 'EXPLICIT_ATTRIBUTE'; add: true; add: false; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! inheritedExplicitAttributes ^ self inheritedExplicitAttributesUsingContext: self class context ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedExplicitAttributesUsingContext: aContext ^ self allInheritedExplicitAttributesUsingContext: aContext receiver: self ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedExplicitAttributesUsingContext: aContext receiver: aReceiver ^ E2JJavaClassAttributesFunction invokeFromValues: (OrderedCollection new add: aReceiver; add: 'EXPLICIT_ATTRIBUTE'; add: true; add: true; yourself) ! ! !E2JJavaClass methodsFor: 'platypus-generated-deriving'! allInheritedExplicitAttributes ^ self allInheritedExplicitAttributesUsingContext: self class context ! ! E2JCoreEntity subclass: #E2JJavaClassStepIo instanceVariableNames: 'jclass' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassStepIo class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassStepIo class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassStepIo class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassStepIo commentStamp: 'platypus comment' prior: 0! ENTITY java_class_step_io; jclass : java_class; DERIVE name : STRING := jclass.name + 'StepRW'; filename : STRING := name + '.java'; filepath : STRING := jclass.package.name + PathNameDelimiter + filename; extends : STRING := 'extends ' + java_class_step_io_extends ( SELF ); class_spec : STRING := java_class_step_rw_spec ( SELF ); END_ENTITY; ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. jclass := nil ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-classifying'! isE2JJavaClassStepIo ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaClassStepIo ^ false ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaClassStepIo: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaClassStepIo: e "my subclasses have to redefine it" ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-copying'! javaClassStepIoCopyTo: another another fastSetJclass: self jclass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaClassStepIoCopyTo: another ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaClassStepIoCopyTo: another ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! javaClassStepIoFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setJclass: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! javaClassStepIoToValues: values values add: self jclass. ^ values ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaClassStepIoToValues: (super toValues: values) ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaClassStepIoFromValues: (super fromValues: values) ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaClassStepIoFromValues: values ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaClassStepIoToValues: values ! ! !E2JJavaClassStepIo class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaClassStepIo class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-set-accessing'! setJclass: aE2JJavaClass self jclass: aE2JJavaClass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-accessing'! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-fast-set-accessing'! fastSetJclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-with-context-accessing'! jclassUsingContext: aContext ^ self jclass ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext ^ self nameUsingContext: aContext receiver: self ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext receiver: aReceiver ^ (aReceiver jclass nameUsingContext: aContext) pltPlus: 'StepRW' ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! name ^ self nameUsingContext: self class context ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext ^ self filenameUsingContext: aContext receiver: self ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filename ^ self filenameUsingContext: self class context ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext ^ self filepathUsingContext: aContext receiver: self ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext receiver: aReceiver ^ (((aReceiver jclass packageUsingContext: aContext) nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver filenameUsingContext: aContext) ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! filepath ^ self filepathUsingContext: self class context ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! extendsUsingContext: aContext ^ self extendsUsingContext: aContext receiver: self ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! extendsUsingContext: aContext receiver: aReceiver ^ 'extends ' pltPlus: (E2JJavaClassStepIoExtendsFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself)) ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! extends ^ self extendsUsingContext: self class context ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! classSpecUsingContext: aContext ^ self classSpecUsingContext: aContext receiver: self ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! classSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaClassStepRwSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaClassStepIo methodsFor: 'platypus-generated-deriving'! classSpec ^ self classSpecUsingContext: self class context ! ! PltEntityInstance subclass: #E2JJavaAttributeGetter instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaAttributeGetter class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaAttributeGetter class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaAttributeGetter class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaAttributeGetter commentStamp: 'platypus comment' prior: 0! ENTITY java_attribute_getter SUBTYPE OF ( entity_instance ); DERIVE accept_explicit_attribute : entity_instance := ( java_explicit_attribute ( SELF\explicit_attribute ) || java_attribute ( SELF\explicit_attribute ) ); accept_derived_attribute : entity_instance := ( java_attribute ( SELF\derived_attribute ) || java_derived_attribute ( SELF\derived_attribute ) ); accept_inverse_attribute : entity_instance := ( java_attribute ( SELF\inverse_attribute ) || java_inverse_attribute ( SELF\inverse_attribute ) ); END_ENTITY; ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-classifying'! isE2JJavaAttributeGetter ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaAttributeGetter ^ false ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaAttributeGetter: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaAttributeGetter: e "my subclasses have to redefine it" ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-copying'! javaAttributeGetterCopyTo: another ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaAttributeGetterCopyTo: another ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaAttributeGetterCopyTo: another ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! javaAttributeGetterFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! javaAttributeGetterToValues: values ^ values ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaAttributeGetterToValues: (super toValues: values) ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaAttributeGetterFromValues: (super fromValues: values) ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaAttributeGetterFromValues: values ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaAttributeGetterToValues: values ! ! !E2JJavaAttributeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaAttributeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitAttributeUsingContext: aContext ^ self acceptExplicitAttributeUsingContext: aContext receiver: self ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitAttributeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JJavaExplicitAttribute new javaExplicitAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltExplicitAttribute) pltAsObject; yourself); yourself); add: (E2JJavaAttribute new javaAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltExplicitAttribute) pltAsObject; yourself); yourself); yourself)) pltAsObject ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptExplicitAttribute ^ self acceptExplicitAttributeUsingContext: self class context ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptDerivedAttributeUsingContext: aContext ^ self acceptDerivedAttributeUsingContext: aContext receiver: self ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptDerivedAttributeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JJavaAttribute new javaAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltDerivedAttribute) pltAsObject; yourself); yourself); add: (E2JJavaDerivedAttribute new javaDerivedAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltDerivedAttribute) pltAsObject; yourself); yourself); yourself)) pltAsObject ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptDerivedAttribute ^ self acceptDerivedAttributeUsingContext: self class context ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptInverseAttributeUsingContext: aContext ^ self acceptInverseAttributeUsingContext: aContext receiver: self ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptInverseAttributeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JJavaAttribute new javaAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltInverseAttribute) pltAsObject; yourself); yourself); add: (E2JJavaInverseAttribute new javaInverseAttributeFromValues: (OrderedCollection new add: (aReceiver asPlatypusComplexInstance \ #PltInverseAttribute) pltAsObject; yourself); yourself); yourself)) pltAsObject ! ! !E2JJavaAttributeGetter methodsFor: 'platypus-generated-deriving'! acceptInverseAttribute ^ self acceptInverseAttributeUsingContext: self class context ! ! E2JCoreEntity subclass: #E2JJavaPackage instanceVariableNames: 'schi' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaPackage class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaPackage class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaPackage class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaPackage commentStamp: 'platypus comment' prior: 0! ENTITY java_package; schi : schema_instance; DERIVE name : STRING := schi.name; visitor_name : STRING := name + '_AbstractVisitor'; visitor_filename : STRING := visitor_name + '.java'; visitor_filepath : STRING := name + PathNameDelimiter + visitor_filename; visitor_spec : STRING := java_package_visitor_spec ( SELF ); step_rw_name : STRING := 'StepCoreObjectReaderWriter'; repository_name : STRING := name + '_StepRepository'; repository_filename : STRING := repository_name + '.java'; repository_filepath : STRING := name + PathNameDelimiter + repository_filename; repository_spec : STRING := java_package_repository_spec ( SELF ); repository_parse_name : STRING := name + '_Parse'; repository_parse_filename : STRING := repository_parse_name + '.java'; repository_parse_filepath : STRING := name + PathNameDelimiter + repository_parse_filename; repository_parse_spec : STRING := java_package_parse_spec ( SELF ); END_ENTITY; ! !E2JJavaPackage methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. schi := nil ! ! !E2JJavaPackage methodsFor: 'platypus-generated-classifying'! isE2JJavaPackage ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaPackage ^ false ! ! !E2JJavaPackage methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaPackage: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaPackage: e "my subclasses have to redefine it" ! ! !E2JJavaPackage methodsFor: 'platypus-generated-copying'! javaPackageCopyTo: another another fastSetSchi: self schi ! ! !E2JJavaPackage methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaPackageCopyTo: another ! ! !E2JJavaPackage methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaPackageCopyTo: another ! ! !E2JJavaPackage methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! javaPackageFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setSchi: valuesloc removeFirst. ^ valuesloc ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! javaPackageToValues: values values add: self schi. ^ values ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaPackageToValues: (super toValues: values) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaPackageFromValues: (super fromValues: values) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaPackageFromValues: values ! ! !E2JJavaPackage methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaPackageToValues: values ! ! !E2JJavaPackage class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaPackage class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaPackage methodsFor: 'platypus-generated-accessing'! schi ^ schi ! ! !E2JJavaPackage methodsFor: 'platypus-generated-set-accessing'! setSchi: aE2JSchemaInstance self schi: aE2JSchemaInstance ! ! !E2JJavaPackage methodsFor: 'platypus-generated-accessing'! schi: aE2JSchemaInstance schi := aE2JSchemaInstance ! ! !E2JJavaPackage methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSchi: aE2JSchemaInstance schi := aE2JSchemaInstance ! ! !E2JJavaPackage methodsFor: 'platypus-generated-with-context-accessing'! schiUsingContext: aContext ^ self schi ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext ^ self nameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext receiver: aReceiver ^ aReceiver schi nameUsingContext: aContext ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! name ^ self nameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorNameUsingContext: aContext ^ self visitorNameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorNameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '_AbstractVisitor' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorName ^ self visitorNameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilenameUsingContext: aContext ^ self visitorFilenameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilenameUsingContext: aContext receiver: aReceiver ^ (aReceiver visitorNameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilename ^ self visitorFilenameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilepathUsingContext: aContext ^ self visitorFilepathUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilepathUsingContext: aContext receiver: aReceiver ^ ((aReceiver nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver visitorFilenameUsingContext: aContext) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorFilepath ^ self visitorFilepathUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorSpecUsingContext: aContext ^ self visitorSpecUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaPackageVisitorSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! visitorSpec ^ self visitorSpecUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! stepRwNameUsingContext: aContext ^ self stepRwNameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! stepRwNameUsingContext: aContext receiver: aReceiver ^ 'StepCoreObjectReaderWriter' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! stepRwName ^ self stepRwNameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryNameUsingContext: aContext ^ self repositoryNameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryNameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '_StepRepository' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryName ^ self repositoryNameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilenameUsingContext: aContext ^ self repositoryFilenameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilenameUsingContext: aContext receiver: aReceiver ^ (aReceiver repositoryNameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilename ^ self repositoryFilenameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilepathUsingContext: aContext ^ self repositoryFilepathUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilepathUsingContext: aContext receiver: aReceiver ^ ((aReceiver nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver repositoryFilenameUsingContext: aContext) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryFilepath ^ self repositoryFilepathUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositorySpecUsingContext: aContext ^ self repositorySpecUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositorySpecUsingContext: aContext receiver: aReceiver ^ E2JJavaPackageRepositorySpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositorySpec ^ self repositorySpecUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseNameUsingContext: aContext ^ self repositoryParseNameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseNameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '_Parse' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseName ^ self repositoryParseNameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilenameUsingContext: aContext ^ self repositoryParseFilenameUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilenameUsingContext: aContext receiver: aReceiver ^ (aReceiver repositoryParseNameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilename ^ self repositoryParseFilenameUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilepathUsingContext: aContext ^ self repositoryParseFilepathUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilepathUsingContext: aContext receiver: aReceiver ^ ((aReceiver nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver repositoryParseFilenameUsingContext: aContext) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseFilepath ^ self repositoryParseFilepathUsingContext: self class context ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseSpecUsingContext: aContext ^ self repositoryParseSpecUsingContext: aContext receiver: self ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaPackageParseSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaPackage methodsFor: 'platypus-generated-deriving'! repositoryParseSpec ^ self repositoryParseSpecUsingContext: self class context ! ! PltEnumerationType subclass: #E2JJavaEnumerationType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaEnumerationType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaEnumerationType commentStamp: 'platypus comment' prior: 0! ENTITY java_enumeration_type SUBTYPE OF ( enumeration_type ); DERIVE name : STRING := owner.name; package : java_package := java_package ( schema_instance_of ( owner ) ); filename : STRING := name + '.java'; filepath : STRING := package.name + PathNameDelimiter + filename; type_spec : STRING := name; type_init : STRING := name + '.' + elements [ LOINDEX ( elements ) ]; enum_spec : STRING := java_enumeration_spec ( SELF ); END_ENTITY; ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-classifying'! isE2JJavaEnumerationType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaEnumerationType ^ false ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaEnumerationType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaEnumerationType: e "my subclasses have to redefine it" ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-copying'! javaEnumerationTypeCopyTo: another ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaEnumerationTypeCopyTo: another ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaEnumerationTypeCopyTo: another ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! javaEnumerationTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! javaEnumerationTypeToValues: values ^ values ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaEnumerationTypeToValues: (super toValues: values) ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaEnumerationTypeFromValues: (super fromValues: values) ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaEnumerationTypeFromValues: values ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaEnumerationTypeToValues: values ! ! !E2JJavaEnumerationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaEnumerationType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext ^ self nameUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! nameUsingContext: aContext receiver: aReceiver ^ aReceiver owner nameUsingContext: aContext ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! name ^ self nameUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! packageUsingContext: aContext ^ self packageUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! packageUsingContext: aContext receiver: aReceiver ^ E2JJavaPackage new javaPackageFromValues: (OrderedCollection new add: (PTsSchemaInstanceOfFunction invokeFromValues: (OrderedCollection new add: aReceiver owner; yourself)); yourself); yourself ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! package ^ self packageUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext ^ self filenameUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filenameUsingContext: aContext receiver: aReceiver ^ (aReceiver nameUsingContext: aContext) pltPlus: '.java' ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filename ^ self filenameUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext ^ self filepathUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filepathUsingContext: aContext receiver: aReceiver ^ (((aReceiver packageUsingContext: aContext) nameUsingContext: aContext) pltPlus: '/') pltPlus: (aReceiver filenameUsingContext: aContext) ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! filepath ^ self filepathUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ aReceiver nameUsingContext: aContext ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ ((aReceiver nameUsingContext: aContext) pltPlus: '.') pltPlus: (aReceiver elements pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: aReceiver elements; yourself))) ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! enumSpecUsingContext: aContext ^ self enumSpecUsingContext: aContext receiver: self ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! enumSpecUsingContext: aContext receiver: aReceiver ^ E2JJavaEnumerationSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JJavaEnumerationType methodsFor: 'platypus-generated-deriving'! enumSpec ^ self enumSpecUsingContext: self class context ! ! PltSelectType subclass: #E2JJavaSelectType instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaSelectType class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaSelectType class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaSelectType class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaSelectType commentStamp: 'platypus comment' prior: 0! ENTITY java_select_type SUBTYPE OF ( select_type ); DERIVE type_spec : STRING := 'Object'; type_init : STRING := 'null'; END_ENTITY; ! !E2JJavaSelectType methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-classifying'! isE2JJavaSelectType ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JJavaSelectType ^ false ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptJavaSelectType: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptJavaSelectType: e "my subclasses have to redefine it" ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-copying'! javaSelectTypeCopyTo: another ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self javaSelectTypeCopyTo: another ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self javaSelectTypeCopyTo: another ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! javaSelectTypeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! javaSelectTypeToValues: values ^ values ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self javaSelectTypeToValues: (super toValues: values) ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self javaSelectTypeFromValues: (super fromValues: values) ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self javaSelectTypeFromValues: values ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self javaSelectTypeToValues: values ! ! !E2JJavaSelectType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JJavaSelectType class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext ^ self typeSpecUsingContext: aContext receiver: self ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeSpecUsingContext: aContext receiver: aReceiver ^ 'Object' ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeSpec ^ self typeSpecUsingContext: self class context ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext ^ self typeInitUsingContext: aContext receiver: self ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeInitUsingContext: aContext receiver: aReceiver ^ 'null' ! ! !E2JJavaSelectType methodsFor: 'platypus-generated-deriving'! typeInit ^ self typeInitUsingContext: self class context ! ! E2JCoreEntity subclass: #E2JDomainCodeGetterData instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JDomainCodeGetterData class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JDomainCodeGetterData class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JDomainCodeGetterData class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JDomainCodeGetterData commentStamp: 'platypus comment' prior: 0! ENTITY domain_code_getter_data ABSTRACT SUPERTYPE; END_ENTITY; ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-classifying'! isE2JDomainCodeGetterData ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JDomainCodeGetterData ^ false ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainCodeGetterData: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptDomainCodeGetterData: e "my subclasses have to redefine it" ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-copying'! domainCodeGetterDataCopyTo: another ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainCodeGetterDataCopyTo: another ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainCodeGetterDataCopyTo: another ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterDataFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterDataToValues: values ^ values ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainCodeGetterDataToValues: (super toValues: values) ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainCodeGetterDataFromValues: (super fromValues: values) ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainCodeGetterDataFromValues: values ! ! !E2JDomainCodeGetterData methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainCodeGetterDataToValues: values ! ! !E2JDomainCodeGetterData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JDomainCodeGetterData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! E2JDomainCodeGetterData subclass: #E2JDomainCodeGetterReplaceSpecData instanceVariableNames: 'getAccessor key holder holderName setAccessor rmAccessor' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JDomainCodeGetterReplaceSpecData class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JDomainCodeGetterReplaceSpecData class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JDomainCodeGetterReplaceSpecData class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JDomainCodeGetterReplaceSpecData commentStamp: 'platypus comment' prior: 0! ENTITY domain_code_getter_replace_spec_data SUBTYPE OF ( domain_code_getter_data ); holder : entity_instance; get_accessor : STRING; set_accessor : STRING; rm_accessor : STRING; holder_name : STRING; key : STRING; END_ENTITY; ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. holder := nil. getAccessor := ''. setAccessor := ''. rmAccessor := ''. holderName := ''. key := '' ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-classifying'! isE2JDomainCodeGetterReplaceSpecData ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JDomainCodeGetterReplaceSpecData ^ false ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainCodeGetterReplaceSpecData: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptDomainCodeGetterReplaceSpecData: e "my subclasses have to redefine it" ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-copying'! domainCodeGetterReplaceSpecDataCopyTo: another another fastSetHolder: self holder. another fastSetGetAccessor: self getAccessor. another fastSetSetAccessor: self setAccessor. another fastSetRmAccessor: self rmAccessor. another fastSetHolderName: self holderName. another fastSetKey: self key ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainCodeGetterReplaceSpecDataCopyTo: another ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainCodeGetterReplaceSpecDataCopyTo: another ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterReplaceSpecDataFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setHolder: valuesloc removeFirst. self setGetAccessor: valuesloc removeFirst. self setSetAccessor: valuesloc removeFirst. self setRmAccessor: valuesloc removeFirst. self setHolderName: valuesloc removeFirst. self setKey: valuesloc removeFirst. ^ valuesloc ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterReplaceSpecDataToValues: values values add: self holder. values add: self getAccessor. values add: self setAccessor. values add: self rmAccessor. values add: self holderName. values add: self key. ^ values ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainCodeGetterReplaceSpecDataToValues: (super toValues: values) ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainCodeGetterReplaceSpecDataFromValues: (super fromValues: values) ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainCodeGetterReplaceSpecDataFromValues: values ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainCodeGetterReplaceSpecDataToValues: values ! ! !E2JDomainCodeGetterReplaceSpecData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JDomainCodeGetterReplaceSpecData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! holder ^ holder ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setHolder: aE2JEntityInstance self holder: aE2JEntityInstance ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! holder: aE2JEntityInstance holder := aE2JEntityInstance ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetHolder: aE2JEntityInstance holder := aE2JEntityInstance ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! holderUsingContext: aContext ^ self holder ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! getAccessor ^ getAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setGetAccessor: aString self getAccessor: aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! getAccessor: aString getAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetGetAccessor: aString getAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! getAccessorUsingContext: aContext ^ self getAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! setAccessor ^ setAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setSetAccessor: aString self setAccessor: aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! setAccessor: aString setAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetSetAccessor: aString setAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! setAccessorUsingContext: aContext ^ self setAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! rmAccessor ^ rmAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setRmAccessor: aString self rmAccessor: aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! rmAccessor: aString rmAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetRmAccessor: aString rmAccessor := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! rmAccessorUsingContext: aContext ^ self rmAccessor ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! holderName ^ holderName ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setHolderName: aString self holderName: aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! holderName: aString holderName := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetHolderName: aString holderName := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! holderNameUsingContext: aContext ^ self holderName ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! key ^ key ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-set-accessing'! setKey: aString self key: aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-accessing'! key: aString key := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetKey: aString key := aString ! ! !E2JDomainCodeGetterReplaceSpecData methodsFor: 'platypus-generated-with-context-accessing'! keyUsingContext: aContext ^ self key ! ! PltEntityInstance subclass: #E2JDomainCodeGetter instanceVariableNames: 'data' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JDomainCodeGetter class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JDomainCodeGetter class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JDomainCodeGetter class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JDomainCodeGetter commentStamp: 'platypus comment' prior: 0! ENTITY domain_code_getter SUBTYPE OF ( entity_instance ); data : domain_code_getter_data; DERIVE accept_string_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_binary_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_integer_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_real_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_boolean_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_logical_type : entity_instance := domain_code ( ) || simple_type_domain_code ( ) || SELF; accept_named_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_defined_type : entity_instance := ( domain_code_getter ( data ) || SELF.domain ).accepted; accept_defined_type_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_entity_definition : entity_instance := domain_code ( ) || entity_definition_domain_code ( ) || SELF; accept_entity_definition_reference : entity_instance := ( domain_code_getter ( data ) || SELF.ref ).accepted; accept_list_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_array_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_set_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_bag_type : entity_instance := domain_code ( ) || aggregation_type_domain_code ( ) || SELF; accept_select_type : entity_instance := domain_code ( ) || select_type_domain_code ( ) || SELF; accept_enumeration_type : entity_instance := domain_code ( ) || enumeration_type_domain_code ( ) || SELF; END_ENTITY; ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. data := nil ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-classifying'! isE2JDomainCodeGetter ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JDomainCodeGetter ^ false ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainCodeGetter: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptDomainCodeGetter: e "my subclasses have to redefine it" ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-copying'! domainCodeGetterCopyTo: another another fastSetData: self data ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainCodeGetterCopyTo: another ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainCodeGetterCopyTo: another ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setData: valuesloc removeFirst. ^ valuesloc ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterToValues: values values add: self data. ^ values ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainCodeGetterToValues: (super toValues: values) ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainCodeGetterFromValues: (super fromValues: values) ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainCodeGetterFromValues: values ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainCodeGetterToValues: values ! ! !E2JDomainCodeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JDomainCodeGetter class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-accessing'! data ^ data ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-set-accessing'! setData: aE2JDomainCodeGetterData self data: aE2JDomainCodeGetterData ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-accessing'! data: aE2JDomainCodeGetterData data := aE2JDomainCodeGetterData ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-fast-set-accessing'! fastSetData: aE2JDomainCodeGetterData data := aE2JDomainCodeGetterData ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-with-context-accessing'! dataUsingContext: aContext ^ self data ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext ^ self acceptStringTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptStringTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptStringType ^ self acceptStringTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryTypeUsingContext: aContext ^ self acceptBinaryTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBinaryType ^ self acceptBinaryTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext ^ self acceptIntegerTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptIntegerType ^ self acceptIntegerTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext ^ self acceptRealTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptRealTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptRealType ^ self acceptRealTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext ^ self acceptBooleanTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBooleanType ^ self acceptBooleanTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalTypeUsingContext: aContext ^ self acceptLogicalTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSimpleTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptLogicalType ^ self acceptLogicalTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReferenceUsingContext: aContext ^ self acceptNamedTypeReferenceUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReferenceUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: aReceiver data; yourself); yourself); add: (aReceiver refUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptNamedTypeReference ^ self acceptNamedTypeReferenceUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext ^ self acceptDefinedTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: aReceiver data; yourself); yourself); add: (aReceiver domainUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedType ^ self acceptDefinedTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext ^ self acceptDefinedTypeReferenceUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReferenceUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: aReceiver data; yourself); yourself); add: (aReceiver refUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptDefinedTypeReference ^ self acceptDefinedTypeReferenceUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext ^ self acceptEntityDefinitionUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JEntityDefinitionDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinition ^ self acceptEntityDefinitionUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext ^ self acceptEntityDefinitionReferenceUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReferenceUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: aReceiver data; yourself); yourself); add: (aReceiver refUsingContext: aContext); yourself)) pltAsObject acceptedUsingContext: aContext ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEntityDefinitionReference ^ self acceptEntityDefinitionReferenceUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext ^ self acceptListTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptListTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JAggregationTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptListType ^ self acceptListTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext ^ self acceptArrayTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JAggregationTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptArrayType ^ self acceptArrayTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext ^ self acceptSetTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSetTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JAggregationTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSetType ^ self acceptSetTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext ^ self acceptBagTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBagTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JAggregationTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptBagType ^ self acceptBagTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectTypeUsingContext: aContext ^ self acceptSelectTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JSelectTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptSelectType ^ self acceptSelectTypeUsingContext: self class context ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext ^ self acceptEnumerationTypeUsingContext: aContext receiver: self ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationTypeUsingContext: aContext receiver: aReceiver ^ (PlatypusComplexInstance fromRecords: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCode new; add: E2JEnumerationTypeDomainCode new; yourself)) pltAsObject; add: aReceiver; yourself)) pltAsObject ! ! !E2JDomainCodeGetter methodsFor: 'platypus-generated-deriving'! acceptEnumerationType ^ self acceptEnumerationTypeUsingContext: self class context ! ! PltEntityInstance subclass: #E2JDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY domain_code SUBTYPE OF ( entity_instance ); DERIVE replace_spec : STRING := ''; generic_value_convertion_spec : STRING := 'return (' + SELF.data.jattr.domain.type_spec + ') convertedStepValue(repo, stepVal);'; END_ENTITY; ! !E2JDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JDomainCode methodsFor: 'platypus-generated-classifying'! isE2JDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JDomainCode ^ false ! ! !E2JDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptDomainCode: e "my subclasses have to redefine it" ! ! !E2JDomainCode methodsFor: 'platypus-generated-copying'! domainCodeCopyTo: another ! ! !E2JDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainCodeCopyTo: another ! ! !E2JDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainCodeCopyTo: another ! ! !E2JDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! domainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! domainCodeToValues: values ^ values ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainCodeToValues: (super toValues: values) ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainCodeFromValues: (super fromValues: values) ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainCodeFromValues: values ! ! !E2JDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainCodeToValues: values ! ! !E2JDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext ^ self genericValueConvertionSpecUsingContext: aContext receiver: self ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext receiver: aReceiver ^ ('return (' pltPlus: ((((aReceiver dataUsingContext: aContext) jattrUsingContext: aContext) domainUsingContext: aContext) typeSpecUsingContext: aContext)) pltPlus: ') convertedStepValue(repo, stepVal);' ! ! !E2JDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpec ^ self genericValueConvertionSpecUsingContext: self class context ! ! E2JDomainCode subclass: #E2JSimpleTypeDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JSimpleTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JSimpleTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JSimpleTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JSimpleTypeDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY simple_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; END_ENTITY; ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-classifying'! isE2JSimpleTypeDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JSimpleTypeDomainCode ^ false ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSimpleTypeDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptSimpleTypeDomainCode: e "my subclasses have to redefine it" ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-copying'! simpleTypeDomainCodeCopyTo: another ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self simpleTypeDomainCodeCopyTo: another ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self simpleTypeDomainCodeCopyTo: another ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! simpleTypeDomainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! simpleTypeDomainCodeToValues: values ^ values ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self simpleTypeDomainCodeToValues: (super toValues: values) ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self simpleTypeDomainCodeFromValues: (super fromValues: values) ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self simpleTypeDomainCodeFromValues: values ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self simpleTypeDomainCodeToValues: values ! ! !E2JSimpleTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JSimpleTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JSimpleTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! E2JDomainCode subclass: #E2JEntityDefinitionDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JEntityDefinitionDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JEntityDefinitionDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JEntityDefinitionDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JEntityDefinitionDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY entity_definition_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := entity_definition_replace_spec ( SELF ); END_ENTITY; ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-classifying'! isE2JEntityDefinitionDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JEntityDefinitionDomainCode ^ false ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEntityDefinitionDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptEntityDefinitionDomainCode: e "my subclasses have to redefine it" ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-copying'! entityDefinitionDomainCodeCopyTo: another ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self entityDefinitionDomainCodeCopyTo: another ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self entityDefinitionDomainCodeCopyTo: another ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! entityDefinitionDomainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! entityDefinitionDomainCodeToValues: values ^ values ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self entityDefinitionDomainCodeToValues: (super toValues: values) ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self entityDefinitionDomainCodeFromValues: (super fromValues: values) ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self entityDefinitionDomainCodeFromValues: values ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self entityDefinitionDomainCodeToValues: values ! ! !E2JEntityDefinitionDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JEntityDefinitionDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ E2JEntityDefinitionReplaceSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JEntityDefinitionDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! E2JDomainCode subclass: #E2JAggregationTypeDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JAggregationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JAggregationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JAggregationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JAggregationTypeDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY aggregation_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := aggregation_type_replace_spec ( SELF ); END_ENTITY; ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-classifying'! isE2JAggregationTypeDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JAggregationTypeDomainCode ^ false ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptAggregationTypeDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptAggregationTypeDomainCode: e "my subclasses have to redefine it" ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-copying'! aggregationTypeDomainCodeCopyTo: another ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self aggregationTypeDomainCodeCopyTo: another ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self aggregationTypeDomainCodeCopyTo: another ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! aggregationTypeDomainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! aggregationTypeDomainCodeToValues: values ^ values ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self aggregationTypeDomainCodeToValues: (super toValues: values) ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self aggregationTypeDomainCodeFromValues: (super fromValues: values) ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self aggregationTypeDomainCodeFromValues: values ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self aggregationTypeDomainCodeToValues: values ! ! !E2JAggregationTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JAggregationTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ E2JAggregationTypeReplaceSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JAggregationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! E2JDomainCode subclass: #E2JSelectTypeDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JSelectTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JSelectTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JSelectTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JSelectTypeDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY select_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := select_type_replace_spec ( SELF ); END_ENTITY; ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-classifying'! isE2JSelectTypeDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JSelectTypeDomainCode ^ false ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptSelectTypeDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptSelectTypeDomainCode: e "my subclasses have to redefine it" ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-copying'! selectTypeDomainCodeCopyTo: another ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self selectTypeDomainCodeCopyTo: another ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self selectTypeDomainCodeCopyTo: another ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! selectTypeDomainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! selectTypeDomainCodeToValues: values ^ values ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self selectTypeDomainCodeToValues: (super toValues: values) ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self selectTypeDomainCodeFromValues: (super fromValues: values) ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self selectTypeDomainCodeFromValues: values ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self selectTypeDomainCodeToValues: values ! ! !E2JSelectTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JSelectTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ E2JSelectTypeReplaceSpecFunction invokeFromValues: (OrderedCollection new add: aReceiver; yourself) ! ! !E2JSelectTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! E2JDomainCode subclass: #E2JEnumerationTypeDomainCode instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JEnumerationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JEnumerationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JEnumerationTypeDomainCode class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JEnumerationTypeDomainCode commentStamp: 'platypus comment' prior: 0! ENTITY enumeration_type_domain_code SUBTYPE OF ( domain_code ); DERIVE SELF\domain_code.replace_spec : STRING := ''; SELF\domain_code.generic_value_convertion_spec : STRING := 'return ' + SELF.data.jattr.domain.type_spec + '.fromString((String) convertedStepValue(repo, stepVal));'; END_ENTITY; ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-classifying'! isE2JEnumerationTypeDomainCode ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JEnumerationTypeDomainCode ^ false ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptEnumerationTypeDomainCode: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptEnumerationTypeDomainCode: e "my subclasses have to redefine it" ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-copying'! enumerationTypeDomainCodeCopyTo: another ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self enumerationTypeDomainCodeCopyTo: another ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self enumerationTypeDomainCodeCopyTo: another ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! enumerationTypeDomainCodeFromValues: values | valuesloc | valuesloc := values asOrderedCollection. ^ valuesloc ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! enumerationTypeDomainCodeToValues: values ^ values ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self enumerationTypeDomainCodeToValues: (super toValues: values) ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self enumerationTypeDomainCodeFromValues: (super fromValues: values) ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self enumerationTypeDomainCodeFromValues: values ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self enumerationTypeDomainCodeToValues: values ! ! !E2JEnumerationTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JEnumerationTypeDomainCode class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext ^ self replaceSpecUsingContext: aContext receiver: self ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpecUsingContext: aContext receiver: aReceiver ^ '' ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! replaceSpec ^ self replaceSpecUsingContext: self class context ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext ^ self genericValueConvertionSpecUsingContext: aContext receiver: self ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpecUsingContext: aContext receiver: aReceiver ^ ('return ' pltPlus: ((((aReceiver dataUsingContext: aContext) jattrUsingContext: aContext) domainUsingContext: aContext) typeSpecUsingContext: aContext)) pltPlus: '.fromString((String) convertedStepValue(repo, stepVal));' ! ! !E2JEnumerationTypeDomainCode methodsFor: 'platypus-generated-deriving'! genericValueConvertionSpec ^ self genericValueConvertionSpecUsingContext: self class context ! ! E2JDomainCodeGetterData subclass: #E2JDomainCodeGetterConvertionSpecData instanceVariableNames: 'jattr' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JDomainCodeGetterConvertionSpecData class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JDomainCodeGetterConvertionSpecData class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JDomainCodeGetterConvertionSpecData class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JDomainCodeGetterConvertionSpecData commentStamp: 'platypus comment' prior: 0! ENTITY domain_code_getter_convertion_spec_data SUBTYPE OF ( domain_code_getter_data ); jattr : java_attribute; END_ENTITY; ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-initializing'! stepInitialize super stepInitialize. jattr := nil ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-classifying'! isE2JDomainCodeGetterConvertionSpecData ^ true ! ! !E2JCoreEntity methodsFor: '*E2J-ExpressToJavaStructureTranslaterSchema-classifying'! isE2JDomainCodeGetterConvertionSpecData ^ false ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-visiting'! accept: aVisitor ^ aVisitor acceptDomainCodeGetterConvertionSpecData: self ! ! !E2JAbstractVisitor methodsFor: 'platypus-generated-visitingExpressToJavaStructureTranslater'! acceptDomainCodeGetterConvertionSpecData: e "my subclasses have to redefine it" ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-copying'! domainCodeGetterConvertionSpecDataCopyTo: another another fastSetJattr: self jattr ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-copying'! pltLocalCopyTo: another self domainCodeGetterConvertionSpecDataCopyTo: another ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-copying'! pltCopyTo: another super pltCopyTo: another. self domainCodeGetterConvertionSpecDataCopyTo: another ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-copying'! pltCopyGroup: aClassSymbol to: anObject self class name == aClassSymbol ifTrue: [ self pltCopyTo: anObject ] ifFalse: [ super pltCopyGroup: aClassSymbol to: anObject ] ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterConvertionSpecDataFromValues: values | valuesloc | valuesloc := values asOrderedCollection. self setJattr: valuesloc removeFirst. ^ valuesloc ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! domainCodeGetterConvertionSpecDataToValues: values values add: self jattr. ^ values ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! toValues: values ^ self domainCodeGetterConvertionSpecDataToValues: (super toValues: values) ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! fromValues: values ^ self domainCodeGetterConvertionSpecDataFromValues: (super fromValues: values) ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! localFromValues: values ^ self domainCodeGetterConvertionSpecDataFromValues: values ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-group-accessing'! localToValues: values ^ self domainCodeGetterConvertionSpecDataToValues: values ! ! !E2JDomainCodeGetterConvertionSpecData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! !E2JDomainCodeGetterConvertionSpecData class methodsFor: 'platypus-generated-meta-data-accessing'! schemaInstance ^ E2JExpress2javaSchemaInstance singleton ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-set-accessing'! setJattr: aE2JJavaAttribute self jattr: aE2JJavaAttribute ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-accessing'! jattr: aE2JJavaAttribute jattr := aE2JJavaAttribute ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-fast-set-accessing'! fastSetJattr: aE2JJavaAttribute jattr := aE2JJavaAttribute ! ! !E2JDomainCodeGetterConvertionSpecData methodsFor: 'platypus-generated-with-context-accessing'! jattrUsingContext: aContext ^ self jattr ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JBasicDomainFunction instanceVariableNames: 'd ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JBasicDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JBasicDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JBasicDomainFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JBasicDomainFunction commentStamp: 'platypus comment' prior: 0! FUNCTION basic_domain ( d : dictionary_instance ) : entity_instance; RETURN ( ( d || basic_type_getter ( ) ).accepted ); END_FUNCTION; ! !E2JBasicDomainFunction methodsFor: 'platypus-generated-instance-creation'! d: aE2JDictionaryInstance ^ self new d: aE2JDictionaryInstance ! ! !E2JBasicDomainFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self d: (values at: 1) ! ! !E2JBasicDomainFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112208286! d: aE2JDictionaryInstance d := aE2JDictionaryInstance ! ! !E2JBasicDomainFunction methodsFor: 'platypus-generated-accessing'! d ^ d ! ! !E2JBasicDomainFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PlatypusComplexInstance fromRecords: (OrderedCollection new add: self d; add: E2JBasicTypeGetter new; yourself)) pltAsObject acceptedUsingContext: self class context) ! ! !E2JBasicDomainFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaAttributeSetAccessorSpecFunction instanceVariableNames: 'jattr domain code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaAttributeSetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaAttributeSetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaAttributeSetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaAttributeSetAccessorSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_attribute_set_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public void ' + jattr.set_accessor_name + '(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (_v == null) {\n' + ' ' + jattr.var_name + ' = null;\n' + ' } else {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' } else {\n' + ' ' + jattr.var_name + '.clear();\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'Add (' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.add(_elem);\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'Remove(' + elem_type_spec + ' _elem) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.remove(_elem);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public boolean ' + capitalize ( jattr.name, false ) + 'RemoveAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' !!= null) {\n' + ' return ' + jattr.var_name + '.removeAll(_v);\n' + ' }\n' + ' return false;\n' + ' }\n' + ' public void ' + capitalize ( jattr.name, false ) + 'AddAll(ArrayList<' + elem_type_spec + '> _v) {\n' + ' if (' + jattr.var_name + ' == null) {\n' + ' ' + jattr.var_name + ' = ' + domain.type_init + ';\n' + ' }\n' + ' ' + jattr.var_name + '.addAll(_v);\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Set (int _pos, ' + elem_type_spec + ' _elem) {\n' + ' return ' + jattr.var_name + '.set(_pos, _elem);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public void ' + jattr.set_accessor_name + ' ( ' + domain.type_spec + ' _v ) { ' + jattr.var_name + ' = _v; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-instance-creation'! jattr: aE2JJavaAttribute ^ self new jattr: aE2JJavaAttribute ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jattr: (values at: 1) ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112212747! jattr: aE2JJavaAttribute jattr := aE2JJavaAttribute ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! domain: aE2JDictionaryInstance domain := aE2JDictionaryInstance ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaAttributeSetAccessorSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self domain: (self jattr domainUsingContext: self class context). " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ PlatypusCoreAliasStatement alias: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (self domain elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: self class context) statementsBlock: [ :elemTypeSpec3186 | self code: (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((' public void ' pltPlus: (self jattr setAccessorNameUsingContext: self class context)) pltPlus: '(ArrayList<') pltPlus: elemTypeSpec3186) pltPlus: '> _v) {\n') pltPlus: ' if (_v == null) {\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' = null;\n') pltPlus: ' } else {\n') pltPlus: ' if (') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' == null) {\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' = ') pltPlus: (self domain typeInitUsingContext: self class context)) pltPlus: ';\n') pltPlus: ' } else {\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.clear();\n') pltPlus: ' }\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.addAll(_v);\n') pltPlus: ' }\n') pltPlus: ' }\n') pltPlus: ' public void ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'Add (') pltPlus: elemTypeSpec3186) pltPlus: ' _elem) {\n') pltPlus: ' if (') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' == null) {\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' = ') pltPlus: (self domain typeInitUsingContext: self class context)) pltPlus: ';\n') pltPlus: ' }\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.add(_elem);\n') pltPlus: ' }\n') pltPlus: ' public boolean ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'Remove(') pltPlus: elemTypeSpec3186) pltPlus: ' _elem) {\n') pltPlus: ' if (') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' !!= null) {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.remove(_elem);\n') pltPlus: ' }\n') pltPlus: ' return false;\n') pltPlus: ' }\n') pltPlus: ' public boolean ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'RemoveAll(ArrayList<') pltPlus: elemTypeSpec3186) pltPlus: '> _v) {\n') pltPlus: ' if (') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' !!= null) {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.removeAll(_v);\n') pltPlus: ' }\n') pltPlus: ' return false;\n') pltPlus: ' }\n') pltPlus: ' public void ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'AddAll(ArrayList<') pltPlus: elemTypeSpec3186) pltPlus: '> _v) {\n') pltPlus: ' if (') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' == null) {\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' = ') pltPlus: (self domain typeInitUsingContext: self class context)) pltPlus: ';\n') pltPlus: ' }\n') pltPlus: ' ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.addAll(_v);\n') pltPlus: ' }\n'). (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' ]) ifTrue: [ self code: (((((((((((self code pltPlus: ' public ') pltPlus: elemTypeSpec3186) pltPlus: ' ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'Set (int _pos, ') pltPlus: elemTypeSpec3186) pltPlus: ' _elem) {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.set(_pos, _elem);\n') pltPlus: ' }\n') ] ] ] ifFalse: [ self code: ((((((' public void ' pltPlus: (self jattr setAccessorNameUsingContext: self class context)) pltPlus: ' ( ') pltPlus: (self domain typeSpecUsingContext: self class context)) pltPlus: ' _v ) { ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' = _v; }\n') ]. ^ self return: self code ! ! !E2JJavaAttributeSetAccessorSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaExplicitAttributeInitFunction instanceVariableNames: 'jattr attr ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaExplicitAttributeInitFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaExplicitAttributeInitFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaExplicitAttributeInitFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaExplicitAttributeInitFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_explicit_attribute_init ( jattr : java_explicit_attribute ) : STRING; LOCAL attr : explicit_attribute := jattr.attr; END_LOCAL; IF NOT attr.optional_flag THEN RETURN ( jattr.domain.type_init ); END_IF; RETURN ( 'null' ); END_FUNCTION; ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-instance-creation'! jattr: aE2JJavaExplicitAttribute ^ self new jattr: aE2JJavaExplicitAttribute ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jattr: (values at: 1) ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112221198! jattr: aE2JJavaExplicitAttribute jattr := aE2JJavaExplicitAttribute ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-accessing'! attr: aE2JExplicitAttribute attr := aE2JExplicitAttribute ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-accessing'! attr ^ attr ! ! !E2JJavaExplicitAttributeInitFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self attr: (self jattr attrUsingContext: self class context). " ---------- statements ----------" (self attr optionalFlagUsingContext: self class context) not ifTrue: [ ^ self return: ((self jattr domainUsingContext: self class context) typeInitUsingContext: self class context) ]. ^ self return: 'null' ! ! !E2JJavaExplicitAttributeInitFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaClassStepIoExtendsFunction instanceVariableNames: 'stepIo jclass result ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassStepIoExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassStepIoExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassStepIoExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassStepIoExtendsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_class_step_io_extends ( step_io : java_class_step_io ) : STRING; LOCAL jclass : java_class := step_io.jclass; result : STRING; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class_step_io ( java_class ( jclass.ent.supertypes [ 1 ].ref ) ).name; ELSE result := step_core_package + '.StepCoreObjectReaderWriter'; END_IF; RETURN ( result ); END_FUNCTION; ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-instance-creation'! stepIo: aE2JJavaClassStepIo ^ self new stepIo: aE2JJavaClassStepIo ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self stepIo: (values at: 1) ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112223882! stepIo: aE2JJavaClassStepIo stepIo := aE2JJavaClassStepIo ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! stepIo ^ stepIo ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !E2JJavaClassStepIoExtendsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self jclass: (self stepIo jclassUsingContext: self class context). " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((self jclass entUsingContext: self class context) supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ self result: ((E2JJavaClassStepIo new javaClassStepIoFromValues: (OrderedCollection new add: (E2JJavaClass new javaClassFromValues: (OrderedCollection new add: ((((self jclass entUsingContext: self class context) supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context); yourself); yourself); yourself); yourself) nameUsingContext: self class context) ] ifFalse: [ self result: ('step.core' pltPlus: '.StepCoreObjectReaderWriter') ]. ^ self return: self result ! ! !E2JJavaClassStepIoExtendsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaClassAttributesFunction instanceVariableNames: 'jclass attrKind withInherited withRedeclaring res attributes ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassAttributesFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassAttributesFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_class_attributes ( jclass : java_class; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF java_attribute; LOCAL res : LIST OF java_attribute := [ ]; attributes : LIST OF attribute := query_attributes ( jclass.ent, attr_kind, with_inherited, with_redeclaring ); END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); res := res + ( java_attribute_getter ( ) || attributes [ no] ).accepted; END_REPEAT; RETURN ( res ); END_FUNCTION; ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-instance-creation'! jclass: aE2JJavaClass attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ^ self new jclass: aE2JJavaClass attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jclass: (values at: 1). self attrKind: (values at: 2). self withInherited: (values at: 3). self withRedeclaring: (values at: 4) ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112227546! jclass: aE2JJavaClass attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 self jclass: aE2JJavaClass. self attrKind: aString. self withInherited: aBoolean. self withRedeclaring: aBoolean1 ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! attrKind: aString attrKind := aString ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! withInherited: aBoolean withInherited := aBoolean ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! withRedeclaring: aBoolean1 withRedeclaring := aBoolean1 ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! res: aListOfE2JJavaAttribute res := aListOfE2JJavaAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JJavaAttribute as: OrderedCollection ] ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes: aListOfE2JAttribute attributes := aListOfE2JAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JAttribute as: OrderedCollection ] ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! attrKind ^ attrKind ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! withInherited ^ withInherited ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! withRedeclaring ^ withRedeclaring ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! res ^ res ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-accessing'! attributes ^ attributes ! ! !E2JJavaClassAttributesFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self res: Array new. self attributes: (PTsQueryAttributesFunction invokeFromValues: (OrderedCollection new add: (self jclass entUsingContext: self class context); add: self attrKind; add: self withInherited; add: self withRedeclaring; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2253 | self res: (self res pltPlus: ((PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JJavaAttributeGetter new; add: (self attributes pltAt: no2253); yourself)) pltAsObject acceptedUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). ^ self return: self res ! ! !E2JJavaClassAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaClassExtendsFunction instanceVariableNames: 'jclass result ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassExtendsFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassExtendsFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_class_extends ( jclass : java_class ) : STRING; LOCAL result : STRING := ?; END_LOCAL; IF ( SIZEOF ( jclass.ent.supertypes ) > 0 ) THEN result := java_class ( jclass.ent.supertypes [ 1 ].ref ).name; ELSE result := step_core_package + '.StepCoreObject'; END_IF; RETURN ( result ); END_FUNCTION; ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-instance-creation'! jclass: aE2JJavaClass ^ self new jclass: aE2JJavaClass ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jclass: (values at: 1) ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112232374! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-accessing'! result: aString result := aString ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-accessing'! result ^ result ! ! !E2JJavaClassExtendsFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self result: nil. " ---------- statements ----------" (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((self jclass entUsingContext: self class context) supertypesUsingContext: self class context); yourself)) > 0 ifTrue: [ self result: ((E2JJavaClass new javaClassFromValues: (OrderedCollection new add: ((((self jclass entUsingContext: self class context) supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context); yourself); yourself) nameUsingContext: self class context) ] ifFalse: [ self result: ('step.core' pltPlus: '.StepCoreObject') ]. ^ self return: self result ! ! !E2JJavaClassExtendsFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaClassSpecFunction instanceVariableNames: 'jclass explicites inverses code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_class_spec ( jclass : java_class ) : STRING; LOCAL explicites : LIST OF java_attribute := jclass.explicit_attributes; Inverses : LIST OF java_attribute := jclass.inverse_attributes; code : STRING := ''; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\nimport step.core.*;\n \n' + 'public class ' + jclass.name + jclass.extends + jclass.implements + ' {\n \n' + ' private static String EntityName = "' + upperize ( jclass.name ) + '";\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.attribute_spec; END_ALIAS; END_REPEAT; code := code + '\n' + ' public static String EntityName() { return EntityName; }\n' + ' public String entityName() { return EntityName(); }\n' + ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n' + ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n' + ' public void initializeExplicitAttributes() {\n' + ' super.initializeExplicitAttributes();\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + ' ' + jattr.var_name + ' = ' + jattr.attribute_init + ';\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + ' public ' + jclass.name + ' () {\n' + ' initializeExplicitAttributes();\n' + ' }\n' + ' public ' + jclass.name + ' (step.core.StepCoreRepository _repo) {\n' + ' super(_repo);\n' + ' initializeExplicitAttributes();\n' + ' }\n \n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.set_accessor_spec + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; REPEAT no := LOINDEX ( inverses ) TO HIINDEX ( inverses ); ALIAS jattr FOR inverses [ no]; code := code + jattr.get_accessor_spec; END_ALIAS; END_REPEAT; code := code + jclass.accept + jclass.readerWriter + '\n'; code := code + ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n' + ' boolean done = false;\n'; REPEAT no := LOINDEX ( explicites ) TO HIINDEX ( explicites ); ALIAS jattr FOR explicites [ no]; code := code + jattr.replace_reference_spec; END_ALIAS; END_REPEAT; code := code + ' if (super.replaceReferenceWith(oldObj, newObj)) {\n' + ' done = true;\n' + ' }\n' + ' return done;\n' + ' }\n' + '}\n\n'; RETURN ( code ); END_FUNCTION; ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-instance-creation'! jclass: aE2JJavaClass ^ self new jclass: aE2JJavaClass ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jclass: (values at: 1) ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112237479! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! explicites: aListOfE2JJavaAttribute explicites := aListOfE2JJavaAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JJavaAttribute as: OrderedCollection ] ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! inverses: aListOfE2JJavaAttribute1 inverses := aListOfE2JJavaAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JJavaAttribute1 as: OrderedCollection ] ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! explicites ^ explicites ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! inverses ^ inverses ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaClassSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self explicites: (self jclass explicitAttributesUsingContext: self class context). self inverses: (self jclass inverseAttributesUsingContext: self class context). self code: ''. " ---------- statements ----------" self code: ((((((((((((self code pltPlus: 'package ') pltPlus: ((self jclass packageUsingContext: self class context) nameUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'import java.util.*;\nimport step.core.*;\n \n') pltPlus: 'public class ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: (self jclass extendsUsingContext: self class context)) pltPlus: (self jclass implementsUsingContext: self class context)) pltPlus: ' {\n \n') pltPlus: ' private static String EntityName = "') pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (self jclass nameUsingContext: self class context); yourself))) pltPlus: '";\n'). PlatypusCoreRepeatStatement repeat: [ :no3312 | PlatypusCoreAliasStatement alias: (self explicites pltAt: no3312) statementsBlock: [ :jattr1035 | self code: (self code pltPlus: (jattr1035 attributeSpecUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)). self code: (((((((self code pltPlus: '\n') pltPlus: ' public static String EntityName() { return EntityName; }\n') pltPlus: ' public String entityName() { return EntityName(); }\n') pltPlus: ' public boolean isInstanceOf(String entName) { return entName.equals(EntityName); }\n') pltPlus: ' public boolean isKindOf(String entName) { return entName.equals(EntityName) ? true : super.isKindOf(entName); }\n\n') pltPlus: ' public void initializeExplicitAttributes() {\n') pltPlus: ' super.initializeExplicitAttributes();\n'). PlatypusCoreRepeatStatement repeat: [ :no3497 | PlatypusCoreAliasStatement alias: (self explicites pltAt: no3497) statementsBlock: [ :jattr1216 | self code: (((((self code pltPlus: ' ') pltPlus: (jattr1216 varNameUsingContext: self class context)) pltPlus: ' = ') pltPlus: (jattr1216 attributeInitUsingContext: self class context)) pltPlus: ';\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)). self code: ((((((((((((self code pltPlus: ' }\n\n') pltPlus: ' public ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ' () {\n') pltPlus: ' initializeExplicitAttributes();\n') pltPlus: ' }\n') pltPlus: ' public ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ' (step.core.StepCoreRepository _repo) {\n') pltPlus: ' super(_repo);\n') pltPlus: ' initializeExplicitAttributes();\n') pltPlus: ' }\n \n'). PlatypusCoreRepeatStatement repeat: [ :no3307 | PlatypusCoreAliasStatement alias: (self explicites pltAt: no3307) statementsBlock: [ :jattr1026 | self code: ((self code pltPlus: (jattr1026 setAccessorSpecUsingContext: self class context)) pltPlus: (jattr1026 getAccessorSpecUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)). PlatypusCoreRepeatStatement repeat: [ :no2487 | PlatypusCoreAliasStatement alias: (self inverses pltAt: no2487) statementsBlock: [ :jattr202 | self code: (self code pltPlus: (jattr202 getAccessorSpecUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self inverses; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self inverses; yourself)). self code: (((self code pltPlus: (self jclass acceptUsingContext: self class context)) pltPlus: (self jclass readerWriterUsingContext: self class context)) pltPlus: '\n'). self code: ((self code pltPlus: ' public boolean replaceReferenceWith(StepCoreObject oldObj, StepCoreObject newObj) {\n') pltPlus: ' boolean done = false;\n'). PlatypusCoreRepeatStatement repeat: [ :no3327 | PlatypusCoreAliasStatement alias: (self explicites pltAt: no3327) statementsBlock: [ :jattr1046 | self code: (self code pltPlus: (jattr1046 replaceReferenceSpecUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self explicites; yourself)). self code: ((((((self code pltPlus: ' if (super.replaceReferenceWith(oldObj, newObj)) {\n') pltPlus: ' done = true;\n') pltPlus: ' }\n') pltPlus: ' return done;\n') pltPlus: ' }\n') pltPlus: '}\n\n'). ^ self return: self code ! ! !E2JJavaClassSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaClassStepRwSpecFunction instanceVariableNames: 'jclassio jclass jattributes jallAttributes code currno ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaClassStepRwSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaClassStepRwSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaClassStepRwSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaClassStepRwSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_class_step_rw_spec ( jclassio : java_class_step_io ) : STRING; LOCAL jclass : java_class := jclassio.jclass; jattributes : LIST OF java_attribute := jclass.inherited_explicit_attributes; jall_attributes : LIST OF java_attribute := jclass.all_inherited_attributes; code : STRING := ''; currno : INTEGER; END_LOCAL; code := code + 'package ' + jclass.package.name + ';\n' + 'import java.util.*;\n' + 'import java.io.*;\n' + 'import ' + step_core_package + '.*;\n \n' + 'class ' + jclassio.name + ' ' + jclassio.extends + ' {\n \n' + ' public ' + step_core_object + ' coreObject() {\n' + ' return new ' + jclass.name + '();\n' + ' }\n\n' + ' public String entityName() {\n' + ' return ' + jclass.name + '.EntityName();\n' + ' }\n\n'; currno := - 1; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' public ' + curr.domain.type_spec + ' ' + curr.get_accessor_name + '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n' + ' ArrayList values = si.getValues();\n' + ' StepValue stepVal = values.get(' + FORMAT ( currno, 'I' ) + ');\n' + ' ' + curr.generic_value_convertion_spec + '\n' + ' }\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + '\n public void initializeCoreObject(StepCoreRepository repo, ' + step_core_object + ' coreObj, StepGenericInstance si) throws Exception {\n'; IF ( SIZEOF ( jattributes ) > 0 ) THEN code := code + ' super.initializeCoreObject(repo, coreObj, si);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) THEN currno := currno + 1; IF ( ( jclass.ent = curr.attr.owner ) AND NOT EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) ) THEN code := code + ' obj.' + curr.set_accessor_name + '(' + curr.get_accessor_name + '(repo, (StepInternalRepresentation) si));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; END_IF; code := code + ' }\n' + '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ' + step_core_object + ' coreObj) throws Exception {\n' + ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n' + ' ' + jclass.name + ' obj = (' + jclass.name + ') coreObj;\n'; REPEAT no := LOINDEX ( jall_attributes ) TO HIINDEX ( jall_attributes ); ALIAS curr FOR jall_attributes [ no]; IF ( ( jclass.ent = curr.attr.owner ) AND ( 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' IN TYPEOF ( curr ) ) ) THEN IF EXISTS ( attribute_redeclared_by ( jclass.ent, no ) ) THEN code := code + ' si.add(new StepRedefinedValue());\n'; ELSE code := code + ' si.add(stepValueOf(crepo, obj.' + curr.get_accessor_name + '()));\n'; END_IF; END_IF; END_ALIAS; END_REPEAT; code := code + ' return si;\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-instance-creation'! jclassio: aE2JJavaClassStepIo ^ self new jclassio: aE2JJavaClassStepIo ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jclassio: (values at: 1) ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112248842! jclassio: aE2JJavaClassStepIo jclassio := aE2JJavaClassStepIo ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jclass: aE2JJavaClass jclass := aE2JJavaClass ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jattributes: aListOfE2JJavaAttribute jattributes := aListOfE2JJavaAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JJavaAttribute as: OrderedCollection ] ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jallAttributes: aListOfE2JJavaAttribute1 jallAttributes := aListOfE2JJavaAttribute1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JJavaAttribute1 as: OrderedCollection ] ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! currno: anInteger currno := anInteger ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jclassio ^ jclassio ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jclass ^ jclass ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jattributes ^ jattributes ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! jallAttributes ^ jallAttributes ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-accessing'! currno ^ currno ! ! !E2JJavaClassStepRwSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self jclass: (self jclassio jclassUsingContext: self class context). self jattributes: (self jclass inheritedExplicitAttributesUsingContext: self class context). self jallAttributes: (self jclass allInheritedAttributesUsingContext: self class context). self code: ''. " ---------- statements ----------" self code: (((((((((((((((((((((((((self code pltPlus: 'package ') pltPlus: ((self jclass packageUsingContext: self class context) nameUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'import java.util.*;\n') pltPlus: 'import java.io.*;\n') pltPlus: 'import ') pltPlus: 'step.core') pltPlus: '.*;\n \n') pltPlus: 'class ') pltPlus: (self jclassio nameUsingContext: self class context)) pltPlus: ' ') pltPlus: (self jclassio extendsUsingContext: self class context)) pltPlus: ' {\n \n') pltPlus: ' public ') pltPlus: 'step.core.StepCoreObject') pltPlus: ' coreObject() {\n') pltPlus: ' return new ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: '();\n') pltPlus: ' }\n\n') pltPlus: ' public String entityName() {\n') pltPlus: ' return ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: '.EntityName();\n') pltPlus: ' }\n\n'). self currno: 1 negated. PlatypusCoreRepeatStatement repeat: [ :no2829 | PlatypusCoreAliasStatement alias: (self jallAttributes pltAt: no2829) statementsBlock: [ :curr552 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: curr552; yourself)) includes: 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE') ifTrue: [ self currno: (self currno pltPlus: 1). ((self jclass entUsingContext: self class context) = ((curr552 attrUsingContext: self class context) ownerUsingContext: self class context) and: [ (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeRedeclaredByFunction invokeFromValues: (OrderedCollection new add: (self jclass entUsingContext: self class context); add: no2829; yourself)); yourself)) not ]) ifTrue: [ self code: (((((((((((((self code pltPlus: ' public ') pltPlus: ((curr552 domainUsingContext: self class context) typeSpecUsingContext: self class context)) pltPlus: ' ') pltPlus: (curr552 getAccessorNameUsingContext: self class context)) pltPlus: '(StepCoreRepository repo, StepInternalRepresentation si) throws Exception {\n') pltPlus: ' ArrayList values = si.getValues();\n') pltPlus: ' StepValue stepVal = values.get(') pltPlus: (PltFORMATFunction invokeFromValues: (OrderedCollection new add: self currno; add: 'I'; yourself))) pltPlus: ');\n') pltPlus: ' ') pltPlus: (curr552 genericValueConvertionSpecUsingContext: self class context)) pltPlus: '\n') pltPlus: ' }\n') ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)). self code: (((self code pltPlus: '\n public void initializeCoreObject(StepCoreRepository repo, ') pltPlus: 'step.core.StepCoreObject') pltPlus: ' coreObj, StepGenericInstance si) throws Exception {\n'). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self jattributes; yourself)) > 0 ifTrue: [ self code: ((((((self code pltPlus: ' super.initializeCoreObject(repo, coreObj, si);\n') pltPlus: ' ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ' obj = (') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ') coreObj;\n'). PlatypusCoreRepeatStatement repeat: [ :no109 | PlatypusCoreAliasStatement alias: (self jallAttributes pltAt: no109) statementsBlock: [ :curr2055 | ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: curr2055; yourself)) includes: 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE') ifTrue: [ self currno: (self currno pltPlus: 1). ((self jclass entUsingContext: self class context) = ((curr2055 attrUsingContext: self class context) ownerUsingContext: self class context) and: [ (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeRedeclaredByFunction invokeFromValues: (OrderedCollection new add: (self jclass entUsingContext: self class context); add: no109; yourself)); yourself)) not ]) ifTrue: [ self code: (((((self code pltPlus: ' obj.') pltPlus: (curr2055 setAccessorNameUsingContext: self class context)) pltPlus: '(') pltPlus: (curr2055 getAccessorNameUsingContext: self class context)) pltPlus: '(repo, (StepInternalRepresentation) si));\n') ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)) ]. self code: ((((((((((self code pltPlus: ' }\n') pltPlus: '\n public StepGenericInstance genericInstance(StepCoreRepository crepo, ') pltPlus: 'step.core.StepCoreObject') pltPlus: ' coreObj) throws Exception {\n') pltPlus: ' StepInternalRepresentation si = (StepInternalRepresentation) super.genericInstance(crepo, coreObj);\n') pltPlus: ' ') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ' obj = (') pltPlus: (self jclass nameUsingContext: self class context)) pltPlus: ') coreObj;\n'). PlatypusCoreRepeatStatement repeat: [ :no1327 | PlatypusCoreAliasStatement alias: (self jallAttributes pltAt: no1327) statementsBlock: [ :curr3143 | ((self jclass entUsingContext: self class context) = ((curr3143 attrUsingContext: self class context) ownerUsingContext: self class context) and: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: curr3143; yourself)) includes: 'EXPRESS_TO_JAVA_STRUCTURE_TRANSLATER.JAVA_EXPLICIT_ATTRIBUTE' ]) ifTrue: [ (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeRedeclaredByFunction invokeFromValues: (OrderedCollection new add: (self jclass entUsingContext: self class context); add: no1327; yourself)); yourself)) ifTrue: [ self code: (self code pltPlus: ' si.add(new StepRedefinedValue());\n') ] ifFalse: [ self code: (((self code pltPlus: ' si.add(stepValueOf(crepo, obj.') pltPlus: (curr3143 getAccessorNameUsingContext: self class context)) pltPlus: '()));\n') ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self jallAttributes; yourself)). self code: (((self code pltPlus: ' return si;\n') pltPlus: ' }\n') pltPlus: '}\n'). ^ self return: self code ! ! !E2JJavaClassStepRwSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaPackageVisitorSpecFunction instanceVariableNames: 'jpkg code entities ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaPackageVisitorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaPackageVisitorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaPackageVisitorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaPackageVisitorSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_package_visitor_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.visitor_name + ' {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' public void accept(' + jclass.name + ' e) { }\n'; END_ALIAS; END_REPEAT; code := code + '}\n'; RETURN ( code ); END_FUNCTION; ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-instance-creation'! jpkg: aE2JJavaPackage ^ self new jpkg: aE2JJavaPackage ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jpkg: (values at: 1) ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112260569! jpkg: aE2JJavaPackage jpkg := aE2JJavaPackage ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! entities: aListOfE2JEntityDefinition entities := aListOfE2JEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JEntityDefinition as: OrderedCollection ] ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! jpkg ^ jpkg ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-accessing'! entities ^ entities ! ! !E2JJavaPackageVisitorSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self entities: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :noi3323 | PlatypusCoreAliasStatement alias: (((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context) pltAt: noi3323) statementsBlock: [ :currSchema3027 | self entities: (self entities pltPlus: (currSchema3027 entitiesUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: ((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: ((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context); yourself)). self code: (((((self code pltPlus: 'package ') pltPlus: (self jpkg nameUsingContext: self class context)) pltPlus: ';\n\npublic class ') pltPlus: (self jpkg visitorNameUsingContext: self class context)) pltPlus: ' {\n'). PlatypusCoreRepeatStatement repeat: [ :no2316 | PlatypusCoreAliasStatement alias: (E2JJavaClass new javaClassFromValues: (OrderedCollection new add: (self entities pltAt: no2316); yourself); yourself) statementsBlock: [ :jclass2366 | self code: (((self code pltPlus: ' public void accept(') pltPlus: (jclass2366 nameUsingContext: self class context)) pltPlus: ' e) { }\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). self code: (self code pltPlus: '}\n'). ^ self return: self code ! ! !E2JJavaPackageVisitorSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaEnumerationSpecFunction instanceVariableNames: 'e s ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaEnumerationSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaEnumerationSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaEnumerationSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaEnumerationSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_enumeration_spec ( e : java_enumeration_type ) : STRING; LOCAL s : STRING := 'package ' + e.package.name + ';\n\npublic enum ' + e.name + ' {\n'; END_LOCAL; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' ' + e.elements [ no]; IF ( no < HIINDEX ( e.elements ) ) THEN s := s + ',\n'; ELSE s := s + ';\n'; END_IF; END_REPEAT; s := s + ' public static ' + e.name + ' fromString(String rep) throws Exception {\n'; REPEAT no := LOINDEX ( e.elements ) TO HIINDEX ( e.elements ); s := s + ' if (rep.equals("' + e.elements [ no] + '")) return (' + e.elements [ no] + ');\n'; END_REPEAT; s := s + ' throw new Exception("invalid ' + e.name + ' enum string representation (" + rep + ")");\n' + ' }\n}\n'; RETURN ( s ); END_FUNCTION; ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-instance-creation'! e: aE2JJavaEnumerationType ^ self new e: aE2JJavaEnumerationType ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self e: (values at: 1) ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112265411! e: aE2JJavaEnumerationType e := aE2JJavaEnumerationType ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-accessing'! s: aString s := aString ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-accessing'! e ^ e ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !E2JJavaEnumerationSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self s: (((('package ' pltPlus: ((self e packageUsingContext: self class context) nameUsingContext: self class context)) pltPlus: ';\n\npublic enum ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' {\n'). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1866 | self s: ((self s pltPlus: ' ') pltPlus: ((self e elementsUsingContext: self class context) pltAt: no1866)). no1866 < (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e elementsUsingContext: self class context); yourself)) ifTrue: [ self s: (self s pltPlus: ',\n') ] ifFalse: [ self s: (self s pltPlus: ';\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e elementsUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e elementsUsingContext: self class context); yourself)). self s: (((self s pltPlus: ' public static ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' fromString(String rep) throws Exception {\n'). PlatypusCoreRepeatStatement repeat: [ :no1716 | self s: (((((self s pltPlus: ' if (rep.equals("') pltPlus: ((self e elementsUsingContext: self class context) pltAt: no1716)) pltPlus: '")) return (') pltPlus: ((self e elementsUsingContext: self class context) pltAt: no1716)) pltPlus: ');\n') ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e elementsUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e elementsUsingContext: self class context); yourself)). self s: ((((self s pltPlus: ' throw new Exception("invalid ') pltPlus: (self e nameUsingContext: self class context)) pltPlus: ' enum string representation (" + rep + ")");\n') pltPlus: ' }\n}\n'). ^ self return: self s ! ! !E2JJavaEnumerationSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaPackageRepositorySpecFunction instanceVariableNames: 'jpkg code entities ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaPackageRepositorySpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaPackageRepositorySpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaPackageRepositorySpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaPackageRepositorySpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_package_repository_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; entities : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT noi := LOINDEX ( jpkg.schi.schemata ) TO HIINDEX ( jpkg.schi.schemata ); ALIAS curr_schema FOR jpkg.schi.schemata [ noi]; entities := entities + curr_schema.entities; END_ALIAS; END_REPEAT; code := code + 'package ' + jpkg.name + ';\n\npublic class ' + jpkg.repository_name + ' extends ' + step_core_package + '.StepCoreRepository {\n'; code := code + ' public ' + jpkg.repository_name + ' () {\n'; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS jclass FOR java_class ( entities [ no] ); code := code + ' rwByEntityNameIndex.put("' + upperize ( jclass.ent.name ) + '", new ' + java_class_step_io ( jclass ).name + '());\n'; END_ALIAS; END_REPEAT; code := code + ' }\n\n' + '}\n'; RETURN ( code ); END_FUNCTION; ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-instance-creation'! jpkg: aE2JJavaPackage ^ self new jpkg: aE2JJavaPackage ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jpkg: (values at: 1) ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112270288! jpkg: aE2JJavaPackage jpkg := aE2JJavaPackage ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! entities: aListOfE2JEntityDefinition entities := aListOfE2JEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfE2JEntityDefinition as: OrderedCollection ] ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! jpkg ^ jpkg ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-accessing'! entities ^ entities ! ! !E2JJavaPackageRepositorySpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self entities: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :noi377 | PlatypusCoreAliasStatement alias: (((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context) pltAt: noi377) statementsBlock: [ :currSchema81 | self entities: (self entities pltPlus: (currSchema81 entitiesUsingContext: self class context)) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: ((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: ((self jpkg schiUsingContext: self class context) schemataUsingContext: self class context); yourself)). self code: (((((((self code pltPlus: 'package ') pltPlus: (self jpkg nameUsingContext: self class context)) pltPlus: ';\n\npublic class ') pltPlus: (self jpkg repositoryNameUsingContext: self class context)) pltPlus: ' extends ') pltPlus: 'step.core') pltPlus: '.StepCoreRepository {\n'). self code: (((self code pltPlus: ' public ') pltPlus: (self jpkg repositoryNameUsingContext: self class context)) pltPlus: ' () {\n'). PlatypusCoreRepeatStatement repeat: [ :no1846 | PlatypusCoreAliasStatement alias: (E2JJavaClass new javaClassFromValues: (OrderedCollection new add: (self entities pltAt: no1846); yourself); yourself) statementsBlock: [ :jclass1900 | self code: (((((self code pltPlus: ' rwByEntityNameIndex.put("') pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: ((jclass1900 entUsingContext: self class context) nameUsingContext: self class context); yourself))) pltPlus: '", new ') pltPlus: ((E2JJavaClassStepIo new javaClassStepIoFromValues: (OrderedCollection new add: jclass1900; yourself); yourself) nameUsingContext: self class context)) pltPlus: '());\n') ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). self code: ((self code pltPlus: ' }\n\n') pltPlus: '}\n'). ^ self return: self code ! ! !E2JJavaPackageRepositorySpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaPackageParseSpecFunction instanceVariableNames: 'jpkg code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaPackageParseSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaPackageParseSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaPackageParseSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaPackageParseSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_package_parse_spec ( jpkg : java_package ) : STRING; LOCAL code : STRING := ''; END_LOCAL; code := 'package ' + jpkg.name + ';\n' + 'import java.io.*;\n \n' + 'public class ' + jpkg.repository_parse_name + ' {\n' + ' public static void main (String args[]) throws Exception {\n' + ' ' + jpkg.repository_name + ' repo = new ' + jpkg.repository_name + ' ();\n \n' + ' if (args.length == 1) { \n' + ' try {\n' + ' repo.parseFileNamed(args[0]);\n' + ' repo.write(new OutputStreamWriter(System.out));\n' + ' } catch (Exception e) {\n' + ' throw (e);\n' + ' } finally {\n' + ' }\n' + ' } else {\n' + ' System.out.println("need one step file path arg");\n' + ' }\n' + ' }\n' + '}\n'; RETURN ( code ); END_FUNCTION; ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-instance-creation'! jpkg: aE2JJavaPackage ^ self new jpkg: aE2JJavaPackage ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jpkg: (values at: 1) ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112275857! jpkg: aE2JJavaPackage jpkg := aE2JJavaPackage ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-accessing'! jpkg ^ jpkg ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaPackageParseSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" self code: ((((((((((((((((((((((((('package ' pltPlus: (self jpkg nameUsingContext: self class context)) pltPlus: ';\n') pltPlus: 'import java.io.*;\n \n') pltPlus: 'public class ') pltPlus: (self jpkg repositoryParseNameUsingContext: self class context)) pltPlus: ' {\n') pltPlus: ' public static void main (String args[]) throws Exception {\n') pltPlus: ' ') pltPlus: (self jpkg repositoryNameUsingContext: self class context)) pltPlus: ' repo = new ') pltPlus: (self jpkg repositoryNameUsingContext: self class context)) pltPlus: ' ();\n \n') pltPlus: ' if (args.length == 1) { \n') pltPlus: ' try {\n') pltPlus: ' repo.parseFileNamed(args[0]);\n') pltPlus: ' repo.write(new OutputStreamWriter(System.out));\n') pltPlus: ' } catch (Exception e) {\n') pltPlus: ' throw (e);\n') pltPlus: ' } finally {\n') pltPlus: ' }\n') pltPlus: ' } else {\n') pltPlus: ' System.out.println("need one step file path arg");\n') pltPlus: ' }\n') pltPlus: ' }\n') pltPlus: '}\n'). ^ self return: self code ! ! !E2JJavaPackageParseSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaAttributeGetAccessorSpecFunction instanceVariableNames: 'jattr domain code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaAttributeGetAccessorSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_attribute_get_accessor_spec ( jattr : java_attribute ) : STRING; LOCAL domain : dictionary_instance := jattr.domain; code : STRING; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( domain ) ) THEN ALIAS elem_type_spec FOR basic_domain ( domain.element_type ).type_spec; code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() {\n' + ' return ' + jattr.var_name + '; \n' + ' }\n' + ' public int ' + capitalize ( jattr.name, false ) + 'Size () {\n' + ' return ' + jattr.var_name + ' == null ? 0 : ' + jattr.var_name + '.size();\n' + ' }\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( domain ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( domain ) ) THEN code := code + ' public ' + elem_type_spec + ' ' + capitalize ( jattr.name, false ) + 'Get (int _pos) {\n' + ' return ' + jattr.var_name + '.get(_pos);\n' + ' }\n'; END_IF; END_ALIAS; ELSE code := ' public ' + jattr.domain.type_spec + ' ' + jattr.get_accessor_name + '() { return ' + jattr.var_name + '; }\n'; END_IF; RETURN ( code ); END_FUNCTION; ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-instance-creation'! jattr: aE2JJavaAttribute ^ self new jattr: aE2JJavaAttribute ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jattr: (values at: 1) ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112280075! jattr: aE2JJavaAttribute jattr := aE2JJavaAttribute ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! domain: aE2JDictionaryInstance domain := aE2JDictionaryInstance ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! domain ^ domain ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JJavaAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self domain: (self jattr domainUsingContext: self class context). " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ PlatypusCoreAliasStatement alias: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (self domain elementTypeUsingContext: self class context); yourself)) typeSpecUsingContext: self class context) statementsBlock: [ :elemTypeSpec1282 | self code: (((((((((((((((((' public ' pltPlus: ((self jattr domainUsingContext: self class context) typeSpecUsingContext: self class context)) pltPlus: ' ') pltPlus: (self jattr getAccessorNameUsingContext: self class context)) pltPlus: '() {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '; \n') pltPlus: ' }\n') pltPlus: ' public int ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'Size () {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: ' == null ? 0 : ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.size();\n') pltPlus: ' }\n'). (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self domain; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' ]) ifTrue: [ self code: (((((((((self code pltPlus: ' public ') pltPlus: elemTypeSpec1282) pltPlus: ' ') pltPlus: (PTsCapitalizeFunction invokeFromValues: (OrderedCollection new add: (self jattr nameUsingContext: self class context); add: false; yourself))) pltPlus: 'Get (int _pos) {\n') pltPlus: ' return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '.get(_pos);\n') pltPlus: ' }\n') ] ] ] ifFalse: [ self code: ((((((' public ' pltPlus: ((self jattr domainUsingContext: self class context) typeSpecUsingContext: self class context)) pltPlus: ' ') pltPlus: (self jattr getAccessorNameUsingContext: self class context)) pltPlus: '() { return ') pltPlus: (self jattr varNameUsingContext: self class context)) pltPlus: '; }\n') ]. ^ self return: self code ! ! !E2JJavaAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JJavaInverseAttributeGetAccessorSpecFunction instanceVariableNames: 'jattr retDomain s ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JJavaInverseAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION java_inverse_attribute_get_accessor_spec ( jattr : java_inverse_attribute ) : STRING; LOCAL ret_domain : STRING; s : STRING; END_LOCAL; IF EXISTS ( jattr.attr.min_cardinality ) THEN ret_domain := 'ArrayList<' + jattr.domain.type_spec + '>'; ELSE ret_domain := jattr.domain.type_spec; END_IF; s := '\n class ' + jattr.name + ' extends StepCoreObjectCondition {\n' + ' ' + jattr.jclass.name + ' self;\n' + ' public ' + jattr.name + ' (' + jattr.jclass.name + ' s) { self = s; }\n' + ' public boolean accept(StepCoreObject obj) {\n' + ' if (obj instanceof ' + jattr.inverted_attr_owner_class_name + ') {\n'; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( jattr.inverted_jattr.domain ) ) THEN s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().contains(self)) {\n' + ' return true;\n' + ' }\n'; ELSE s := s + ' if (((' + jattr.inverted_attr_owner_class_name + ')obj).' + jattr.inverted_attr_get_accessor_name + '().equals(self)) {\n' + ' return true;\n' + ' }\n'; END_IF; s := s + ' }\n' + ' return false; \n' + ' }\n' + ' }\n' + ' public ' + ret_domain + ' ' + jattr.get_accessor_name + '(step.core.StepCoreRepository _repo) { \n'; IF EXISTS ( jattr.attr.min_cardinality ) THEN s := s + ' return ((' + ret_domain + ')_repo.select( new ' + jattr.name + '(this)));'; ELSE s := s + ' return ((' + ret_domain + ')_repo.detect( new ' + jattr.name + '(this)));'; END_IF; s := s + '\n }\n'; RETURN ( s ); END_FUNCTION; ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-instance-creation'! jattr: aE2JJavaInverseAttribute ^ self new jattr: aE2JJavaInverseAttribute ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self jattr: (values at: 1) ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112286824! jattr: aE2JJavaInverseAttribute jattr := aE2JJavaInverseAttribute ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! retDomain: aString retDomain := aString ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! s: aString1 s := aString1 ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! retDomain ^ retDomain ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-accessing'! s ^ s ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: ((self jattr attrUsingContext: self class context) minCardinalityUsingContext: self class context); yourself)) ifTrue: [ self retDomain: (('ArrayList<' pltPlus: ((self jattr domainUsingContext: self class context) typeSpecUsingContext: self class context)) pltPlus: '>') ] ifFalse: [ self retDomain: ((self jattr domainUsingContext: self class context) typeSpecUsingContext: self class context) ]. self s: (((((((((((((('\n class ' pltPlus: (self jattr nameUsingContext: self class context)) pltPlus: ' extends StepCoreObjectCondition {\n') pltPlus: ' ') pltPlus: ((self jattr jclassUsingContext: self class context) nameUsingContext: self class context)) pltPlus: ' self;\n') pltPlus: ' public ') pltPlus: (self jattr nameUsingContext: self class context)) pltPlus: ' (') pltPlus: ((self jattr jclassUsingContext: self class context) nameUsingContext: self class context)) pltPlus: ' s) { self = s; }\n') pltPlus: ' public boolean accept(StepCoreObject obj) {\n') pltPlus: ' if (obj instanceof ') pltPlus: (self jattr invertedAttrOwnerClassNameUsingContext: self class context)) pltPlus: ') {\n'). ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self jattr invertedJattrUsingContext: self class context) domainUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ self s: (((((((self s pltPlus: ' if (((') pltPlus: (self jattr invertedAttrOwnerClassNameUsingContext: self class context)) pltPlus: ')obj).') pltPlus: (self jattr invertedAttrGetAccessorNameUsingContext: self class context)) pltPlus: '().contains(self)) {\n') pltPlus: ' return true;\n') pltPlus: ' }\n') ] ifFalse: [ self s: (((((((self s pltPlus: ' if (((') pltPlus: (self jattr invertedAttrOwnerClassNameUsingContext: self class context)) pltPlus: ')obj).') pltPlus: (self jattr invertedAttrGetAccessorNameUsingContext: self class context)) pltPlus: '().equals(self)) {\n') pltPlus: ' return true;\n') pltPlus: ' }\n') ]. self s: (((((((((self s pltPlus: ' }\n') pltPlus: ' return false; \n') pltPlus: ' }\n') pltPlus: ' }\n') pltPlus: ' public ') pltPlus: self retDomain) pltPlus: ' ') pltPlus: (self jattr getAccessorNameUsingContext: self class context)) pltPlus: '(step.core.StepCoreRepository _repo) { \n'). (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: ((self jattr attrUsingContext: self class context) minCardinalityUsingContext: self class context); yourself)) ifTrue: [ self s: (((((self s pltPlus: ' return ((') pltPlus: self retDomain) pltPlus: ')_repo.select( new ') pltPlus: (self jattr nameUsingContext: self class context)) pltPlus: '(this)));') ] ifFalse: [ self s: (((((self s pltPlus: ' return ((') pltPlus: self retDomain) pltPlus: ')_repo.detect( new ') pltPlus: (self jattr nameUsingContext: self class context)) pltPlus: '(this)));') ]. self s: (self s pltPlus: '\n }\n'). ^ self return: self s ! ! !E2JJavaInverseAttributeGetAccessorSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JAggregationTypeReplaceSpecFunction instanceVariableNames: 'codeGetter code elemType elemTypeSpec itor elementTypeCode ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JAggregationTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JAggregationTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JAggregationTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JAggregationTypeReplaceSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION aggregation_type_replace_spec ( code_getter : aggregation_type_domain_code ) : STRING; LOCAL code : STRING := ''; elem_type : entity_instance := basic_domain ( code_getter.element_type ); elem_type_spec : STRING := elem_type.type_spec; itor : STRING := 'itor' + code_getter.data.key; element_type_code : STRING := ( domain_code_getter ( domain_code_getter_data ( ) || domain_code_getter_replace_spec_data ( code_getter, itor + '.next', itor + '.set', itor + '.remove', itor + '.next', code_getter.data.key + 'i' ) ) || code_getter.element_type ).accepted.replace_spec; END_LOCAL; IF ( element_type_code > '' ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' for (ListIterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().listIterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE' IN TYPEOF ( elem_type ) ) THEN code := ' for (Iterator<' + elem_type_spec + '> ' + itor + ' = ' + code_getter.data.get_accessor + '().iterator(); ' + itor + '.hasNext(); ) {\n' + ' ' + element_type_code + ' }\n'; ELSE IF ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter ) ) THEN code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' int cpt = 0;\n' + ' while (v.remove(oldObj)) {\n' + ' done = true;\n' + ' cpt++; \n' + ' }\n' + ' if (newObj !!= null) {\n' + ' for (int n = 0; n < cpt; n++) v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n'; ELSE code := ' {\n' + ' ArrayList<' + elem_type_spec + '> v = ' + code_getter.data.get_accessor + '();\n' + ' if (v.remove(oldObj)) {\n' + ' done = true;\n' + ' if (newObj !!= null) {\n' + ' v.add((' + elem_type_spec + ')newObj);\n' + ' }\n' + ' }\n' + ' }\n'; END_IF; END_IF; END_IF; END_IF; RETURN ( code ); END_FUNCTION; ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-instance-creation'! codeGetter: aE2JAggregationTypeDomainCode ^ self new codeGetter: aE2JAggregationTypeDomainCode ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self codeGetter: (values at: 1) ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112294704! codeGetter: aE2JAggregationTypeDomainCode codeGetter := aE2JAggregationTypeDomainCode ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elemType: aE2JEntityInstance elemType := aE2JEntityInstance ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elemTypeSpec: aString1 elemTypeSpec := aString1 ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! itor: aString2 itor := aString2 ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elementTypeCode: aString3 elementTypeCode := aString3 ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! codeGetter ^ codeGetter ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elemType ^ elemType ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elemTypeSpec ^ elemTypeSpec ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! itor ^ itor ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! elementTypeCode ^ elementTypeCode ! ! !E2JAggregationTypeReplaceSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. self elemType: (E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (self codeGetter elementTypeUsingContext: self class context); yourself)). self elemTypeSpec: (self elemType typeSpecUsingContext: self class context). self itor: ('itor' pltPlus: ((self codeGetter dataUsingContext: self class context) keyUsingContext: self class context)). self elementTypeCode: (((PlatypusComplexInstance fromRecords: (OrderedCollection new add: (E2JDomainCodeGetter new domainCodeGetterFromValues: (OrderedCollection new add: (PlatypusComplexInstance fromRecords: (OrderedCollection new add: E2JDomainCodeGetterData new; add: (E2JDomainCodeGetterReplaceSpecData new domainCodeGetterReplaceSpecDataFromValues: (OrderedCollection new add: self codeGetter; add: (self itor pltPlus: '.next'); add: (self itor pltPlus: '.set'); add: (self itor pltPlus: '.remove'); add: (self itor pltPlus: '.next'); add: (((self codeGetter dataUsingContext: self class context) keyUsingContext: self class context) pltPlus: 'i'); yourself); yourself); yourself)) pltAsObject; yourself); yourself); add: (self codeGetter elementTypeUsingContext: self class context); yourself)) pltAsObject acceptedUsingContext: self class context) replaceSpecUsingContext: self class context). " ---------- statements ----------" self elementTypeCode > '' ifTrue: [ (((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self codeGetter; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self codeGetter; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ARRAY_TYPE' ]) ifTrue: [ self code: (((((((((((' for (ListIterator<' pltPlus: self elemTypeSpec) pltPlus: '> ') pltPlus: self itor) pltPlus: ' = ') pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '().listIterator(); ') pltPlus: self itor) pltPlus: '.hasNext(); ) {\n') pltPlus: ' ') pltPlus: self elementTypeCode) pltPlus: ' }\n') ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self elemType; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.AGGREGATION_TYPE') ifTrue: [ self code: (((((((((((' for (Iterator<' pltPlus: self elemTypeSpec) pltPlus: '> ') pltPlus: self itor) pltPlus: ' = ') pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '().iterator(); ') pltPlus: self itor) pltPlus: '.hasNext(); ) {\n') pltPlus: ' ') pltPlus: self elementTypeCode) pltPlus: ' }\n') ] ifFalse: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self codeGetter; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE') ifTrue: [ self code: ((((((((((((((((' {\n' pltPlus: ' ArrayList<') pltPlus: self elemTypeSpec) pltPlus: '> v = ') pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '();\n') pltPlus: ' int cpt = 0;\n') pltPlus: ' while (v.remove(oldObj)) {\n') pltPlus: ' done = true;\n') pltPlus: ' cpt++; \n') pltPlus: ' }\n') pltPlus: ' if (newObj !!= null) {\n') pltPlus: ' for (int n = 0; n < cpt; n++) v.add((') pltPlus: self elemTypeSpec) pltPlus: ')newObj);\n') pltPlus: ' }\n') pltPlus: ' }\n') ] ifFalse: [ self code: ((((((((((((((' {\n' pltPlus: ' ArrayList<') pltPlus: self elemTypeSpec) pltPlus: '> v = ') pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '();\n') pltPlus: ' if (v.remove(oldObj)) {\n') pltPlus: ' done = true;\n') pltPlus: ' if (newObj !!= null) {\n') pltPlus: ' v.add((') pltPlus: self elemTypeSpec) pltPlus: ')newObj);\n') pltPlus: ' }\n') pltPlus: ' }\n') pltPlus: ' }\n') ] ] ] ]. ^ self return: self code ! ! !E2JAggregationTypeReplaceSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JEntityDefinitionReplaceSpecFunction instanceVariableNames: 'codeGetter code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JEntityDefinitionReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JEntityDefinitionReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JEntityDefinitionReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JEntityDefinitionReplaceSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION entity_definition_replace_spec ( code_getter : entity_definition_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ')newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *)' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '((' + basic_domain ( code_getter\entity_definition ).type_spec + ') newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-instance-creation'! codeGetter: aE2JEntityDefinitionDomainCode ^ self new codeGetter: aE2JEntityDefinitionDomainCode ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self codeGetter: (values at: 1) ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112303941! codeGetter: aE2JEntityDefinitionDomainCode codeGetter := aE2JEntityDefinitionDomainCode ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! codeGetter ^ codeGetter ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JEntityDefinitionReplaceSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" ((((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' ]) or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' ]) ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE') ifTrue: [ ^ self return: (((((((((((((((' if (' pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '() == oldObj ) {\n') pltPlus: ' if (newObj == null) {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) rmAccessorUsingContext: self class context)) pltPlus: '();\n') pltPlus: ' } else {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) setAccessorUsingContext: self class context)) pltPlus: '((') pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (self codeGetter asPlatypusComplexInstance \ #PltEntityDefinition) pltAsObject; yourself)) typeSpecUsingContext: self class context)) pltPlus: ')newObj);\n') pltPlus: ' }\n') pltPlus: ' done = true;\n') pltPlus: ' }\n') ] ifFalse: [ ^ self return: ' (* not empty needed *)' ] ] ifFalse: [ ^ self return: (((((((((' if (' pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '() == oldObj ) {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) setAccessorUsingContext: self class context)) pltPlus: '((') pltPlus: ((E2JBasicDomainFunction invokeFromValues: (OrderedCollection new add: (self codeGetter asPlatypusComplexInstance \ #PltEntityDefinition) pltAsObject; yourself)) typeSpecUsingContext: self class context)) pltPlus: ') newObj);\n') pltPlus: ' done = true;\n') pltPlus: ' }\n') ] ! ! !E2JEntityDefinitionReplaceSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JSelectTypeReplaceSpecFunction instanceVariableNames: 'codeGetter code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JSelectTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JSelectTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JSelectTypeReplaceSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JSelectTypeReplaceSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION select_type_replace_spec ( code_getter : select_type_domain_code ) : STRING; LOCAL code : STRING := ''; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' IN TYPEOF ( code_getter.data.holder ) ) OR ( 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN IF ( 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE' IN TYPEOF ( code_getter.data.holder ) ) THEN RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' if (newObj == null) {\n' + ' ' + code_getter.data.rm_accessor + '();\n' + ' } else {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' }\n' + ' done = true;\n' + ' }\n' ); ELSE RETURN ( ' (* not empty needed *) ' ); END_IF; ELSE RETURN ( ' if (' + code_getter.data.get_accessor + '() == oldObj ) {\n' + ' ' + code_getter.data.set_accessor + '(newObj);\n' + ' done = true;\n' + ' }\n' ); END_IF; END_FUNCTION; ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-instance-creation'! codeGetter: aE2JSelectTypeDomainCode ^ self new codeGetter: aE2JSelectTypeDomainCode ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self codeGetter: (values at: 1) ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112309916! codeGetter: aE2JSelectTypeDomainCode codeGetter := aE2JSelectTypeDomainCode ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! codeGetter ^ codeGetter ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JSelectTypeReplaceSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self code: ''. " ---------- statements ----------" ((((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE') or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.BAG_TYPE' ]) or: [ (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.SET_TYPE' ]) ifTrue: [ ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: ((self codeGetter dataUsingContext: self class context) holderUsingContext: self class context); yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.LIST_TYPE') ifTrue: [ ^ self return: (((((((((((((' if (' pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '() == oldObj ) {\n') pltPlus: ' if (newObj == null) {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) rmAccessorUsingContext: self class context)) pltPlus: '();\n') pltPlus: ' } else {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) setAccessorUsingContext: self class context)) pltPlus: '(newObj);\n') pltPlus: ' }\n') pltPlus: ' done = true;\n') pltPlus: ' }\n') ] ifFalse: [ ^ self return: ' (* not empty needed *) ' ] ] ifFalse: [ ^ self return: (((((((' if (' pltPlus: ((self codeGetter dataUsingContext: self class context) getAccessorUsingContext: self class context)) pltPlus: '() == oldObj ) {\n') pltPlus: ' ') pltPlus: ((self codeGetter dataUsingContext: self class context) setAccessorUsingContext: self class context)) pltPlus: '(newObj);\n') pltPlus: ' done = true;\n') pltPlus: ' }\n') ] ! ! !E2JSelectTypeReplaceSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #E2JSimpleTypeGenericValueConvertionSpecFunction instanceVariableNames: 'codeGetter jattr code ' classVariableNames: '' poolDictionaries: '' category: 'E2J-ExpressToJavaStructureTranslaterSchema'! !E2JSimpleTypeGenericValueConvertionSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! translatedFromISO10303P11 ^ true ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction class methodsFor: 'platypus-generated-platypus-signature'! vwNamespaceName ^ #E2J ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction commentStamp: 'platypus comment' prior: 0! FUNCTION simple_type_generic_value_convertion_spec ( code_getter : simple_type_domain_code ) : STRING; LOCAL jattr : java_explicit_attribute := code_getter.data.jattr; code : STRING; END_LOCAL; code := ' obj.' + jattr.set_accessor_name + '(' + jattr.name + '(repo, (StepInternalRepresentation) si));\n'; RETURN ( code ); END_FUNCTION; ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-instance-creation'! codeGetter: aE2JSimpleTypeDomainCode ^ self new codeGetter: aE2JSimpleTypeDomainCode ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! fromValues: values self codeGetter: (values at: 1) ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112314577! codeGetter: aE2JSimpleTypeDomainCode codeGetter := aE2JSimpleTypeDomainCode ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! jattr: aE2JJavaExplicitAttribute jattr := aE2JJavaExplicitAttribute ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! code: aString code := aString ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! codeGetter ^ codeGetter ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! jattr ^ jattr ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-accessing'! code ^ code ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction methodsFor: 'platypus-generated-invoking'! invoke " ---------- locals assignments ----------" self jattr: ((self codeGetter dataUsingContext: self class context) jattrUsingContext: self class context). " ---------- statements ----------" self code: ((((' obj.' pltPlus: (self jattr setAccessorNameUsingContext: self class context)) pltPlus: '(') pltPlus: (self jattr nameUsingContext: self class context)) pltPlus: '(repo, (StepInternalRepresentation) si));\n'). ^ self return: self code ! ! !E2JSimpleTypeGenericValueConvertionSpecFunction class methodsFor: 'platypus-generated-meta-data-accessing'! schemaDefinition ^ E2JExpressToJavaStructureTranslaterSchemaDefinition singleton ! ! E2JExpress2javaSchemaInstance initialize.! ----End fileIn----! Object subclass: #CheddarGenerator instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-scripts'! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! CheddarGenerator class instanceVariableNames: ''! !CheddarGenerator class methodsFor: 'platypus2Cheddar' stamp: 'AlainPlantec 12/12/2013 00:14'! rerun Cursor wait showWhile: [ | exp2Chd | exp2Chd := (Platypus itemNamed: 'express2cheddar'). exp2Chd masterModelAsStepStream ifNotNil: [ :strm | ChdMainProcedure invokeOnContextStream: strm ] ]! ! !CheddarGenerator class methodsFor: 'platypus2Cheddar' stamp: 'AlainPlantec 4/12/2011 20:38'! run Cursor wait showWhile: [ | map exp2Chd | map := (Platypus itemNamed: 'cheddar_mapping'). exp2Chd := (Platypus itemNamed: 'express2cheddar'). exp2Chd removeAllModelContents. exp2Chd promote: map. ChdMainProcedure invokeOnContextStream: exp2Chd masterModelAsStepStream]! ! Object subclass: #CheddarUMLGen instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Chd-scripts'! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! CheddarUMLGen class instanceVariableNames: ''! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 10:31'! all "self all" self allFor: ChdModelGenericObject. self allFor: ChdLangGenericExpression. self allFor: ChdLangGenericStatement. ! ! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 09:58'! allFor: rootClass self byPackage: rootClass. self simple: rootClass. self withInstVars: rootClass! ! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 09:54'! byPackage | d s f | d := Dictionary new. Morph allSubclassesDo: [:cls | | pkgname | pkgname := (PackageOrganizer default mostSpecificPackageOfClass: cls) packageName. s := d at: pkgname ifAbsentPut: Set new. s add: cls]. s := String streamContents: [:strm | strm nextPutAll: '@startuml'. strm cr. d keysAndValuesDo: [:k :v | strm nextPutAll: 'package "' , k , '"'. strm cr. v do: [:cls | strm nextPutAll: String tab , cls superclass name. strm nextPutAll: ' <|-- '. strm nextPutAll: cls name. strm cr]. strm nextPutAll: 'end package'. strm cr]. strm nextPutAll: 'hide circle'. strm cr. strm nextPutAll: 'hide method'. strm cr. strm nextPutAll: '@enduml'. strm cr]. f := StandardFileStream forceNewFileNamed: 'MorphHierarchyByPackage.txt'. f nextPutAll: s. f close! ! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 09:57'! byPackage: rootClass | d s f | d := Dictionary new. rootClass allSubclassesDo: [:cls | | pkgname | pkgname := (PackageOrganizer default mostSpecificPackageOfClass: cls) packageName. s := d at: pkgname ifAbsentPut: Set new. s add: cls]. s := String streamContents: [:strm | strm nextPutAll: '@startuml'. strm cr. d keysAndValuesDo: [:k :v | strm nextPutAll: 'package "' , k , '"'. strm cr. v do: [:cls | strm nextPutAll: String tab , cls superclass name. strm nextPutAll: ' <|-- '. strm nextPutAll: cls name. strm cr]. strm nextPutAll: 'end package'. strm cr]. strm nextPutAll: 'hide circle'. strm cr. strm nextPutAll: 'hide method'. strm cr. strm nextPutAll: '@enduml'. strm cr]. f := StandardFileStream forceNewFileNamed: rootClass name, 'HierarchyByPackage.txt'. f nextPutAll: s. f close! ! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 09:56'! simple: rootClass | s f | s := String streamContents: [:strm | strm nextPutAll: '@startuml'. strm cr. rootClass allSubclassesDo: [:cls | strm nextPutAll: cls superclass name. strm nextPutAll: ' <|-- '. strm nextPutAll: cls name. strm cr]. strm cr. strm nextPutAll: 'hide circle'. strm cr. strm nextPutAll: 'hide method'. strm cr. strm nextPutAll: '@enduml'. strm cr]. f := StandardFileStream forceNewFileNamed: rootClass name, 'Hierarchy.txt'. f nextPutAll: s. f close! ! !CheddarUMLGen class methodsFor: 'as yet unclassified' stamp: 'AlainPlantec 4/13/2011 09:56'! withInstVars: rootClass | s f | s := String streamContents: [:strm | strm nextPutAll: '@startuml'. strm cr. rootClass allSubclassesDo: [:cls | strm nextPutAll: cls superclass name. strm nextPutAll: ' <|-- '. strm nextPutAll: cls name. strm cr]. strm cr. rootClass allSubclassesDo: [:cls | cls instVarNames notEmpty ifTrue: [cls instVarNames do: [:n | strm nextPutAll: cls name. strm nextPutAll: ' : '. strm nextPutAll: n] separatedBy: [strm cr]. strm cr]]. strm nextPutAll: 'hide circle'. strm cr. strm nextPutAll: 'hide method'. strm cr. strm nextPutAll: '@enduml'. strm cr]. f := StandardFileStream forceNewFileNamed: rootClass name, 'HierarchyWithInstVars.txt'. f nextPutAll: s. f close! ! ----End fileIn----! Object subclass: #E2JScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'E2J-Scripts'! "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! E2JScript class instanceVariableNames: ''! !E2JScript class methodsFor: 'java cheddar bridge generation' stamp: 'AlainPlantec 3/12/2014 14:06'! cheddarBridge E2JExpress2javaRepository new asSchemaInstanceContext. E2JTranslateProcedure invoke! ! ----End fileIn----! !PTsWriteFileProcedure methodsFor: 'platypus-generated-invoking' stamp: 'AlainPlantec 3/13/2014 11:00' prior: 110552182! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close ! ! ----Platypus: Updating cheddar-dev: /platypus-toolbox/express_toolsbox_functions/WriteFile PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ----! PlatypusCoreSchemaInstance subclass: #PTsPlatypustoolboxSchemaInstance instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110380937! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110381069! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110381264! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance commentStamp: 'platypus comment' prior: 110381370! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; END_SCHEMA; ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110399437! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110399567! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: 'PTs'. namesBuilder systemCategoryPrefix: 'PTs'. namesBuilder rootClassName: 'PTsCoreEntity'. namesBuilder rootClassSystemCategory: 'PTs-CoreEntity'. ^ namesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 110399931! schemaDefinition1 ^ #(#express_dictionary_queries #PTsExpressDictionaryQueriesSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 110400120! schemaDefinition2 ^ #(#express_toolsbox_functions #PTsExpressToolsboxFunctionsSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 110400309! schemaDefinitionCount ^ 2 ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 110400427! context ^ context ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 110400537! context: aContext context := aContext. super context: aContext ! ! PlatypusCoreRepository subclass: #PTsPlatypustoolboxRepository instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110400881! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110401009! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110401200! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110401307! repositoryClassName ^ #PTsPlatypustoolboxRepository ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110401445! generatedMetaDataSchemaInstanceName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110401601! externalSchemaInstanceClassNames ^ #(#PltPlatypusMetaSchemasSchemaInstance) ! ! PlatypusCoreAbstractVisitor subclass: #PTsAbstractVisitor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110401942! translatedFromISO10303P11 ^ true ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110402060! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110402241! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-initializing' stamp: '' prior: 110402357! initialize self reinitializeSingleton. self singleton buildIndexes ! ! PlatypusCoreSchema subclass: #PTsExpressDictionaryQueriesSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110402732! translatedFromISO10303P11 ^ true ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110402875! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110403081! vwNamespaceName ^ #PTs ! ! !PTsExpressDictionaryQueriesSchemaDefinition commentStamp: 'platypus comment' prior: 110403198! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110411006! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 110411169! context ^ self schemaInstance context ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-entities' stamp: '' prior: 110411301! entityDefinitionCount ^ 0 ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110411422! functionDeclaration1 ^ #(#expressionValueToString #PTsExpressionValueToStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110411604! functionDeclaration2 ^ #(#typeof_as_string #PTsTypeofAsStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110411770! functionDeclaration3 ^ #(#schema_definition_of #PTsSchemaDefinitionOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110411944! functionDeclaration4 ^ #(#schema_instance_of #PTsSchemaInstanceOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412114! functionDeclaration5 ^ #(#remarks_for #PTsRemarksForFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412271! functionDeclaration6 ^ #(#clean_remark_text_of #PTsCleanRemarkTextOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412444! functionDeclaration7 ^ #(#root_entity_list #PTsRootEntityListFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412610! functionDeclaration8 ^ #(#subtypes_of #PTsSubtypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412767! functionDeclaration9 ^ #(#attribute_named_from #PTsAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110412941! functionDeclaration10 ^ #(#has_attribute_named #PTsHasAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110413114! functionDeclaration11 ^ #(#inherited_attribute_named_from #PTsInheritedAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110413308! functionDeclaration12 ^ #(#has_inherited_attribute_named #PTsHasInheritedAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110413500! functionDeclaration13 ^ #(#query_attributes #PTsQueryAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110413668! functionDeclaration14 ^ #(#attribute_redeclared_by #PTsAttributeRedeclaredByFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110413849! functionDeclaration15 ^ #(#all_supertypes_of #PTsAllSupertypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414018! functionDeclaration16 ^ #(#local_root_supertype_of #PTsLocalRootSupertypeOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414198! functionDeclaration17 ^ #(#inherits_from_entity_named #PTsInheritsFromEntityNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414384! functionDeclaration18 ^ #(#inherited_attributes #PTsInheritedAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414560! functionDeclaration19 ^ #(#inherited_explicit_attributes #PTsInheritedExplicitAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414753! functionDeclaration20 ^ #(#derive_attribute_result #PTsDeriveAttributeResultFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110414934! functionDeclarationCount ^ 20 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExpressionValueToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110415271! translatedFromISO10303P11 ^ true ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110415405! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110415602! vwNamespaceName ^ #PTs ! ! !PTsExpressionValueToStringFunction commentStamp: 'platypus comment' prior: 110415710! FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110416408! arg: aPTsExpression ^ self new arg: aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110416251! fromValues: values self arg: (values at: 1) ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112360449! arg: aPTsExpression arg := aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110416536! arg ^ arg ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110416631! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110416906! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTypeofAsStringFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110417266! translatedFromISO10303P11 ^ true ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110417391! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110417579! vwNamespaceName ^ #PTs ! ! !PTsTypeofAsStringFunction commentStamp: 'platypus comment' prior: 110417678! FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110418236! e: aPTsEntityInstance ^ self new e: aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110418090! fromValues: values self e: (values at: 1) ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112362517! e: aPTsEntityInstance e := aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110418359! e ^ e ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110418441! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (('[' pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)); add: '; '; yourself))) pltPlus: ']') ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110418982! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaDefinitionOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110419350! translatedFromISO10303P11 ^ true ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110419479! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110419671! vwNamespaceName ^ #PTs ! ! !PTsSchemaDefinitionOfFunction commentStamp: 'platypus comment' prior: 110419774! FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110420434! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110420284! fromValues: values self e: (values at: 1) ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112364923! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110420569! e ^ e ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110420655! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION') ifTrue: [ ^ self return: self e ]. ^ self return: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: (self e ownerUsingContext: self class context); yourself)) ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110421214! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaInstanceOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110421578! translatedFromISO10303P11 ^ true ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110421705! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110421895! vwNamespaceName ^ #PTs ! ! !PTsSchemaInstanceOfFunction commentStamp: 'platypus comment' prior: 110421996! FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110422550! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110422402! fromValues: values self e: (values at: 1) ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112367267! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110422683! e ^ e ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110422767! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) ownerUsingContext: self class context) ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110423130! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRemarksForFunction instanceVariableNames: 'e sch remarks ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110423494! translatedFromISO10303P11 ^ true ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110423615! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110423799! vwNamespaceName ^ #PTs ! ! !PTsRemarksForFunction commentStamp: 'platypus comment' prior: 110423894! FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; ! !PTsRemarksForFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110424763! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110424621! fromValues: values self e: (values at: 1) ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112369716! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110424890! sch: aPTsSchemaDefinition sch := aPTsSchemaDefinition ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110425017! remarks: aListOfPTsRemark remarks := aListOfPTsRemark ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsRemark as: OrderedCollection ] ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110425230! e ^ e ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110425309! sch ^ sch ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110425392! remarks ^ remarks ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110425482! invoke " ---------- locals assignments ----------" self sch: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). self remarks: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no56 | PlatypusCoreAliasStatement alias: ((self sch remarkReferencesUsingContext: self class context) pltAt: no56) statementsBlock: [ :remref2479 | ((remref2479 referencedUsingContext: self class context) refUsingContext: self class context) == self e ifTrue: [ self remarks: (self remarks pltPlus: (remref2479 remarkUsingContext: self class context)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)). ^ self return: self remarks ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110426611! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCleanRemarkTextOfFunction instanceVariableNames: 'rem foundMarkPos ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110426992! translatedFromISO10303P11 ^ true ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110427120! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110427311! vwNamespaceName ^ #PTs ! ! !PTsCleanRemarkTextOfFunction commentStamp: 'platypus comment' prior: 110427413! FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110428432! rem: aPTsRemark ^ self new rem: aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110428281! fromValues: values self rem: (values at: 1) ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112373721! rem: aPTsRemark rem := aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110428546! foundMarkPos: anInteger foundMarkPos := anInteger ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110428676! rem ^ rem ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110428766! foundMarkPos ^ foundMarkPos ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110428873! invoke " ---------- locals assignments ----------" self foundMarkPos: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2278 | (((self rem textUsingContext: self class context) pltAt: no2278) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no2278) = '<' ]) ifTrue: [ self foundMarkPos: no2278. PlatypusExpressEscapeStatementException signal ] ifFalse: [ ((self rem textUsingContext: self class context) pltAt: no2278) ~= ' ' ifTrue: [ PlatypusExpressEscapeStatementException signal ] ] ] from: 1 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)). self foundMarkPos > 0 ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no3993 | (((self rem textUsingContext: self class context) pltAt: no3993) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no3993) = '>' ]) ifTrue: [ ^ self return: ((self rem textUsingContext: self class context) pltCopyFrom: (no3993 pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself))) ] ] from: (self foundMarkPos pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)) ]. ^ self return: (self rem textUsingContext: self class context) ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110430601! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRootEntityListFunction instanceVariableNames: 'entities l ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110430970! translatedFromISO10303P11 ^ true ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110431095! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110431283! vwNamespaceName ^ #PTs ! ! !PTsRootEntityListFunction commentStamp: 'platypus comment' prior: 110431382! FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110432381! entities: aListOfPTsEntityDefinition ^ self new entities: aListOfPTsEntityDefinition ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110432228! fromValues: values self entities: (values at: 1) ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112377907! entities: aListOfPTsEntityDefinition entities := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110432634! l: aListOfPTsEntityDefinition l := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110432873! entities ^ entities ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110432970! l ^ l ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110433052! invoke " ---------- locals assignments ----------" self l: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no455 | PlatypusCoreAliasStatement alias: (self entities pltAt: no455) statementsBlock: [ :ent1944 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (ent1944 supertypesUsingContext: self class context); yourself)) = 0 ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ifFalse: [ PlatypusCoreAliasStatement alias: (((ent1944 supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :sup2674 | (sup2674 ownerUsingContext: self class context) ~~ (ent1944 ownerUsingContext: self class context) ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). ^ self return: self l ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110434909! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSubtypesOfFunction instanceVariableNames: 'ent allent ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110435270! translatedFromISO10303P11 ^ true ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110435391! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110435575! vwNamespaceName ^ #PTs ! ! !PTsSubtypesOfFunction commentStamp: 'platypus comment' prior: 110435670! FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110436395! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ^ self new ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110436221! fromValues: values self ent: (values at: 1). self allent: (values at: 2) ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112382134! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition self ent: aPTsEntityDefinition. self allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110436602! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110436729! allent: aListOfPTsEntityDefinition allent := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110436974! ent ^ ent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110437057! allent ^ allent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110437145! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (self allent select: [ :e273 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((e273 supertypesUsingContext: self class context) select: [ :ee953 | (ee953 refUsingContext: self class context) = self ent ]); yourself)) > 0 ]) ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110437649! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110438037! translatedFromISO10303P11 ^ true ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110438166! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110438358! vwNamespaceName ^ #PTs ! ! !PTsAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 110438461! FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110439319! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110439141! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112385397! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110439488! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110439619! name: aString name := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110439730! key: aString key := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110439839! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110440079! e ^ e ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110440166! name ^ name ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110440259! key ^ key ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110440350! attributes ^ attributes ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110440454! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((self e attributesUsingContext: self class context) select: [ :a4 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a4 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110441388! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110441759! translatedFromISO10303P11 ^ true ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110441887! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110442078! vwNamespaceName ^ #PTs ! ! !PTsHasAttributeNamedFunction commentStamp: 'platypus comment' prior: 110442180! FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110442804! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110442627! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112389297! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110442972! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110443102! name: aString name := aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110443212! e ^ e ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110443298! name ^ name ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110443389! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110443871! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110444277! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110444415! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110444616! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 110444728! FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110445637! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110445450! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112392415! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110445815! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110445955! name: aString name := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446075! key: aString key := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446193! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446442! e ^ e ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446538! name ^ name ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446640! key ^ key ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110446740! attributes ^ attributes ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110446853! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) select: [ :a403 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a403 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110447866! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasInheritedAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110448255! translatedFromISO10303P11 ^ true ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110448392! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110448592! vwNamespaceName ^ #PTs ! ! !PTsHasInheritedAttributeNamedFunction commentStamp: 'platypus comment' prior: 110448703! FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110449374! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449188! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112396567! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449551! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449690! name: aString name := aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449809! e ^ e ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110449904! name ^ name ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110450004! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsInheritedAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110450504! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsQueryAttributesFunction instanceVariableNames: 'ent attrKind withInherited withRedeclaring attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110450918! translatedFromISO10303P11 ^ true ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110451044! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110451233! vwNamespaceName ^ #PTs ! ! !PTsQueryAttributesFunction commentStamp: 'platypus comment' prior: 110451333! FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110452636! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ^ self new ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110452379! fromValues: values self ent: (values at: 1). self attrKind: (values at: 2). self withInherited: (values at: 3). self withRedeclaring: (values at: 4) ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112399952! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 self ent: aPTsEntityDefinition. self attrKind: aString. self withInherited: aBoolean. self withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110452930! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453062! attrKind: aString attrKind := aString ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453178! withInherited: aBoolean withInherited := aBoolean ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453306! withRedeclaring: aBoolean1 withRedeclaring := aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453440! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453677! ent ^ ent ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453765! attrKind ^ attrKind ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453863! withInherited ^ withInherited ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110453971! withRedeclaring ^ withRedeclaring ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110454083! attributes ^ attributes ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110454184! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self withInherited ifTrue: [ self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; yourself)) ] ifFalse: [ self attributes: (self ent attributesUsingContext: self class context) ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself)) ifTrue: [ self attributes: (self attributes select: [ :a2389 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a2389; yourself)) includes: ('PLATYPUS_DICTIONARY_SCHEMA.' pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself))) ]) ]. self withRedeclaring not ifTrue: [ self attributes: (self attributes select: [ :a3202 | (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (a3202 redeclaringUsingContext: self class context); yourself)) not ]) ]. ^ self return: self attributes ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110455531! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeRedeclaredByFunction instanceVariableNames: 'ent testedAttrPos attributes testedAttr ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110455943! translatedFromISO10303P11 ^ true ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110456075! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110456270! vwNamespaceName ^ #PTs ! ! !PTsAttributeRedeclaredByFunction commentStamp: 'platypus comment' prior: 110456376! FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110457603! ent: aPTsEntityDefinition testedAttrPos: anInteger ^ self new ent: aPTsEntityDefinition testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110457411! fromValues: values self ent: (values at: 1). self testedAttrPos: (values at: 2) ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112405541! ent: aPTsEntityDefinition testedAttrPos: anInteger self ent: aPTsEntityDefinition. self testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110457801! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110457939! testedAttrPos: anInteger testedAttrPos := anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458075! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458318! testedAttr: aPTsAttribute testedAttr := aPTsAttribute ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458456! ent ^ ent ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458550! testedAttrPos ^ testedAttrPos ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458664! attributes ^ attributes ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110458772! testedAttr ^ testedAttr ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110458879! invoke " ---------- locals assignments ----------" self attributes: (PTsQueryAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; add: nil; add: true; add: true; yourself)). self testedAttr: (self attributes pltAt: self testedAttrPos). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no506 | PlatypusCoreAliasStatement alias: (self attributes pltAt: no506) statementsBlock: [ :curr1999 | curr1999 = self testedAttr ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :noi3548 | PlatypusCoreAliasStatement alias: (self attributes pltAt: noi3548) statementsBlock: [ :curri1381 | ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (curri1381 redeclaringUsingContext: self class context); yourself)) and: [ ((curri1381 redeclaringUsingContext: self class context) refUsingContext: self class context) = curr1999 ]) ifTrue: [ ^ self return: curri1381 ] ] ] from: (no506 pltPlus: 1) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). ^ self return: nil ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110460570! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllSupertypesOfFunction instanceVariableNames: 'e res ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110460936! translatedFromISO10303P11 ^ true ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110461062! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110461251! vwNamespaceName ^ #PTs ! ! !PTsAllSupertypesOfFunction commentStamp: 'platypus comment' prior: 110461351! FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110462185! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110462038! fromValues: values self e: (values at: 1) ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112410641! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110462313! res: aListOfPTsEntityDefinition res := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110462557! e ^ e ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110462641! res ^ res ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110462728! invoke " ---------- locals assignments ----------" self res: Array new. " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION') ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no1352 | self res: ((PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: (((self e supertypesUsingContext: self class context) pltAt: no1352) refUsingContext: self class context); yourself)) pltPlus: self res) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) ]. self res: (self res pltPlus: self e). ^ self return: self res ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110463850! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLocalRootSupertypeOfFunction instanceVariableNames: 'e sups tmp ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110464231! translatedFromISO10303P11 ^ true ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110464362! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110464556! vwNamespaceName ^ #PTs ! ! !PTsLocalRootSupertypeOfFunction commentStamp: 'platypus comment' prior: 110464661! FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110465386! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110465234! fromValues: values self e: (values at: 1) ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112414110! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110465519! sups: aListOfPTsEntityDefinition sups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110465770! tmp: aListOfPTsEntityDefinition1 tmp := aListOfPTsEntityDefinition1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition1 as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110466022! e ^ e ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110466111! sups ^ sups ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110466206! tmp ^ tmp ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110466298! invoke " ---------- locals assignments ----------" self sups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" self tmp: (self sups select: [ :s2435 | (s2435 ownerUsingContext: self class context) == (self e ownerUsingContext: self class context) ]). ^ self return: (self tmp pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self tmp; yourself))) ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110466931! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritsFromEntityNamedFunction instanceVariableNames: 'e supname key allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110467329! translatedFromISO10303P11 ^ true ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110467463! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110467660! vwNamespaceName ^ #PTs ! ! !PTsInheritsFromEntityNamedFunction commentStamp: 'platypus comment' prior: 110467768! FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110468577! e: aPTsEntityDefinition supname: aString ^ self new e: aPTsEntityDefinition supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110468391! fromValues: values self e: (values at: 1). self supname: (values at: 2) ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112417562! e: aPTsEntityDefinition supname: aString self e: aPTsEntityDefinition. self supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110468757! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110468893! supname: aString supname := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469015! key: aString key := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469129! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469389! e ^ e ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469481! supname ^ supname ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469585! key ^ key ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110469681! allsups ^ allsups ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110469784! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self supname; yourself)). self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self allsups select: [ :i2341 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (i2341 nameUsingContext: self class context); yourself)) = self key ]); yourself)) > 0 ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110470616! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributesFunction instanceVariableNames: 'e res allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110470998! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110471128! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110471321! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributesFunction commentStamp: 'platypus comment' prior: 110471425! FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110472188! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472037! fromValues: values self e: (values at: 1) ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112421659! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472320! res: aListOfPTsAttribute res := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472543! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472799! e ^ e ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472887! res ^ res ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110472979! allsups ^ allsups ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110473078! invoke " ---------- locals assignments ----------" self res: Array new. self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no135 | self res: (self res pltPlus: ((self allsups pltAt: no135) attributesUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)). ^ self return: self res ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110473846! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedExplicitAttributesFunction instanceVariableNames: 'e attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110474243! translatedFromISO10303P11 ^ true ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110474381! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110474582! vwNamespaceName ^ #PTs ! ! !PTsInheritedExplicitAttributesFunction commentStamp: 'platypus comment' prior: 110474694! FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110475429! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110475270! fromValues: values self e: (values at: 1) ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112425216! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110475569! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110475818! e ^ e ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110475914! attributes ^ attributes ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110476027! invoke " ---------- locals assignments ----------" self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (self attributes select: [ :a860 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a860; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' ]) ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110476601! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsDeriveAttributeResultFunction instanceVariableNames: 'd ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110476975! translatedFromISO10303P11 ^ true ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110477107! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110477302! vwNamespaceName ^ #PTs ! ! !PTsDeriveAttributeResultFunction commentStamp: 'platypus comment' prior: 110477408! FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110478351! d: aPTsDerivedAttribute ^ self new d: aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110478198! fromValues: values self d: (values at: 1) ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112428428! d: aPTsDerivedAttribute d := aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110478485! d ^ d ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110478574! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [ self halt ]. self halt. self return: evalResult ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110479177! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #PTsExpressToolsboxFunctionsSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110479557! translatedFromISO10303P11 ^ true ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110479700! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110479906! vwNamespaceName ^ #PTs ! ! !PTsExpressToolsboxFunctionsSchemaDefinition commentStamp: 'platypus comment' prior: 110480023! SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; END_SCHEMA; ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110490446! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 110490609! context ^ self schemaInstance context ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-entities' stamp: '' prior: 110490741! entityDefinitionCount ^ 0 ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110490862! functionDeclaration1 ^ #(#string_ends_with #PTsStringEndsWithFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491028! functionDeclaration2 ^ #(#string_replace #PTsStringReplaceFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491191! functionDeclaration3 ^ #(#SmalltalkCodeOf #PTsSmalltalkCodeOfFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491357! functionDeclaration4 ^ #(#StringAggregateConcatSeparatedBy #PTsStringAggregateConcatSeparatedByFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491557! functionDeclaration5 ^ #(#LinesFromString #PTsLinesFromStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491723! functionDeclaration6 ^ #(#SetToAggregate #PTsSetToAggregateFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110491887! functionDeclaration7 ^ #(#SetToList #PTsSetToListFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492041! functionDeclaration8 ^ #(#ListToSet #PTsListToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492195! functionDeclaration9 ^ #(#AggregateToSet #PTsAggregateToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492359! functionDeclaration10 ^ #(#capitalize #PTsCapitalizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492516! functionDeclaration11 ^ #(#lowerize #PTsLowerizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492669! functionDeclaration12 ^ #(#upperize #PTsUpperizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492822! functionDeclaration13 ^ #(#ToString #PTsToStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110492975! functionDeclaration14 ^ #(#numbered_name #PTsNumberedNameFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110493137! functionDeclaration15 ^ #(#allModelInstances #PTsAllModelInstancesFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110493308! functionDeclaration16 ^ #(#askForExpressDictionaryMetaData #PTsAskForExpressDictionaryMetaDataFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 110493507! functionDeclarationCount ^ 16 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringEndsWithFunction instanceVariableNames: 's token ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110493830! translatedFromISO10303P11 ^ true ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110493955! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110494143! vwNamespaceName ^ #PTs ! ! !PTsStringEndsWithFunction commentStamp: 'platypus comment' prior: 110494242! FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110494951! s: aString token: aString1 ^ self new s: aString token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110494776! fromValues: values self s: (values at: 1). self token: (values at: 2) ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112445866! s: aString token: aString1 self s: aString. self token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110495094! s: aString s := aString ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110495195! token: aString1 token := aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110495306! s ^ s ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110495389! token ^ token ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110495479! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) >= (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself)) ifTrue: [ (self s pltCopyFrom: (((PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) pltMinus: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself))) pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself))) = self token ifTrue: [ ^ self return: true ] ]. ^ self return: false ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110496400! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringReplaceFunction instanceVariableNames: 'src replWhat replWith ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110496778! translatedFromISO10303P11 ^ true ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110496902! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110497089! vwNamespaceName ^ #PTs ! ! !PTsStringReplaceFunction commentStamp: 'platypus comment' prior: 110497187! FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110498101! src: aString replWhat: aString1 replWith: aString2 ^ self new src: aString replWhat: aString1 replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110497890! fromValues: values self src: (values at: 1). self replWhat: (values at: 2). self replWith: (values at: 3) ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112449238! src: aString replWhat: aString1 replWith: aString2 self src: aString. self replWhat: aString1. self replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498298! src: aString src := aString ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498402! replWhat: aString1 replWhat := aString1 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498518! replWith: aString2 replWith := aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498634! src ^ src ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498720! replWhat ^ replWhat ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110498816! replWith ^ replWith ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110498911! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110499244! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSmalltalkCodeOfFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110499608! translatedFromISO10303P11 ^ true ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110499734! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110499923! vwNamespaceName ^ #PTs ! ! !PTsSmalltalkCodeOfFunction commentStamp: 'platypus comment' prior: 110500023! FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110500632! arg: aString ^ self new arg: aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110500483! fromValues: values self arg: (values at: 1) ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112452264! arg: aString arg := aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110500738! arg ^ arg ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110500825! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: (PltStringLiteral val: self arg) asClearText ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110501114! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringAggregateConcatSeparatedByFunction instanceVariableNames: 'l sep s ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110501516! translatedFromISO10303P11 ^ true ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110501659! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110501865! vwNamespaceName ^ #PTs ! ! !PTsStringAggregateConcatSeparatedByFunction commentStamp: 'platypus comment' prior: 110501982! FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110502781! l: aListOfString sep: aString ^ self new l: aListOfString sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110502590! fromValues: values self l: (values at: 1). self sep: (values at: 2) ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112454544! l: aListOfString sep: aString self l: aListOfString. self sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110502948! l: aListOfString l := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110503162! sep: aString sep := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110503285! s: aString s := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110503404! l ^ l ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110503505! sep ^ sep ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110503610! s ^ s ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110503710! invoke " ---------- locals assignments ----------" self s: ''. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1923 | self s: (self s pltPlus: (self l pltAt: no1923)). no1923 < (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) ifTrue: [ self s: (self s pltPlus: self sep) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). ^ self return: self s ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110504471! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLinesFromStringFunction instanceVariableNames: 'source lines ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110504844! translatedFromISO10303P11 ^ true ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110504970! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110505159! vwNamespaceName ^ #PTs ! ! !PTsLinesFromStringFunction commentStamp: 'platypus comment' prior: 110505259! FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110506039! source: aString ^ self new source: aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110505887! fromValues: values self source: (values at: 1) ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112458245! source: aString source := aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110506151! lines: aListOfString lines := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110506356! source ^ source ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110506450! lines ^ lines ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110506541! invoke " ---------- locals assignments ----------" self lines: Array new. " ---------- statements ----------" "---------- native statement ---------- " self lines addAll: self source lines. ^ self return: self lines ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110506855! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToAggregateFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110507219! translatedFromISO10303P11 ^ true ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110507344! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110507532! vwNamespaceName ^ #PTs ! ! !PTsSetToAggregateFunction commentStamp: 'platypus comment' prior: 110507631! FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110508162! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110508012! fromValues: values self input: (values at: 1) ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112460627! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110508295! input ^ input ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110508385! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: self input ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110508595! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToListFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110508956! translatedFromISO10303P11 ^ true ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110509076! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110509259! vwNamespaceName ^ #PTs ! ! !PTsSetToListFunction commentStamp: 'platypus comment' prior: 110509353! FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsSetToListFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110510081! input: aSetOfObject ^ self new input: aSetOfObject ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110509936! fromValues: values self input: (values at: 1) ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112462794! input: aSetOfObject input := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110510249! result: aListOfObject result := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110510450! input ^ input ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110510536! result ^ result ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110510623! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110510941! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsListToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110511302! translatedFromISO10303P11 ^ true ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110511422! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110511605! vwNamespaceName ^ #PTs ! ! !PTsListToSetFunction commentStamp: 'platypus comment' prior: 110511699! FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsListToSetFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110512428! input: aListOfObject ^ self new input: aListOfObject ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110512283! fromValues: values self input: (values at: 1) ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112465417! input: aListOfObject input := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110512627! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110512797! input ^ input ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110512883! result ^ result ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110512970! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110513288! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAggregateToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110513659! translatedFromISO10303P11 ^ true ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110513784! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110513972! vwNamespaceName ^ #PTs ! ! !PTsAggregateToSetFunction commentStamp: 'platypus comment' prior: 110514071! FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110514837! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110514687! fromValues: values self input: (values at: 1) ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112468082! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110514970! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110515145! input ^ input ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110515236! result ^ result ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110515328! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110515651! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCapitalizeFunction instanceVariableNames: 'input capitalizeFirstChar ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110516027! translatedFromISO10303P11 ^ true ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110516148! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110516332! vwNamespaceName ^ #PTs ! ! !PTsCapitalizeFunction commentStamp: 'platypus comment' prior: 110516427! FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110518190! input: aString capitalizeFirstChar: aLogical ^ self new input: aString capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110518001! fromValues: values self input: (values at: 1). self capitalizeFirstChar: (values at: 2) ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112471642! input: aString capitalizeFirstChar: aLogical self input: aString. self capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110518365! input: aString input := aString ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110518470! capitalizeFirstChar: aLogical capitalizeFirstChar := aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110518605! input ^ input ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110518692! capitalizeFirstChar ^ capitalizeFirstChar ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110518806! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [ instr atEnd ] whileFalse: [ (curr := instr next) == $_ ifTrue: [ curr := instr next. instr atEnd ifFalse: [ outstr nextPut: curr asUppercase ] ] ifFalse: [ outstr nextPut: curr ] ]. resString := outstr contents. self capitalizeFirstChar ifTrue: [ resString at: 1 put: resString first asUppercase ] ifFalse: [ resString at: 1 put: resString first asLowercase ]. ^ self return: resString ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110519565! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLowerizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110519917! translatedFromISO10303P11 ^ true ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110520036! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110520218! vwNamespaceName ^ #PTs ! ! !PTsLowerizeFunction commentStamp: 'platypus comment' prior: 110520311! FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; ! !PTsLowerizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110520893! input: aString ^ self new input: aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110520749! fromValues: values self input: (values at: 1) ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112474757! input: aString input := aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110520996! input ^ input ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110521080! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asLowercase ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110521340! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsUpperizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110521692! translatedFromISO10303P11 ^ true ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110521811! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110521993! vwNamespaceName ^ #PTs ! ! !PTsUpperizeFunction commentStamp: 'platypus comment' prior: 110522086! FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; ! !PTsUpperizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110522668! input: aString ^ self new input: aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110522524! fromValues: values self input: (values at: 1) ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112476756! input: aString input := aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110522771! input ^ input ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110522855! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asUppercase ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110523115! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintLnProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110523465! translatedFromISO10303P11 ^ true ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110523584! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110523766! vwNamespaceName ^ #PTs ! ! !PTsPrintLnProcedure commentStamp: 'platypus comment' prior: 110523859! PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110524416! arg: anObject ^ self new arg: anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110524274! fromValues: values self arg: (values at: 1) ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112478732! arg: anObject arg := anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110524517! arg ^ arg ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110524597! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString , '\' withCRs ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110524871! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110525217! translatedFromISO10303P11 ^ true ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110525334! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110525514! vwNamespaceName ^ #PTs ! ! !PTsPrintProcedure commentStamp: 'platypus comment' prior: 110525605! PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; ! !PTsPrintProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110526126! arg: anObject ^ self new arg: anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110525986! fromValues: values self arg: (values at: 1) ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112480670! arg: anObject arg := anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110526225! arg ^ arg ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110526303! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110526561! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110526911! translatedFromISO10303P11 ^ true ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110527030! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110527212! vwNamespaceName ^ #PTs ! ! !PTsToStringFunction commentStamp: 'platypus comment' prior: 110527305! FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsToStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110527867! arg: anObject ^ self new arg: anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110527725! fromValues: values self arg: (values at: 1) ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112482631! arg: anObject arg := anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110527968! arg ^ arg ! ! !PTsToStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110528048! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110528308! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHaltProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110528648! translatedFromISO10303P11 ^ true ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110528764! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110528943! vwNamespaceName ^ #PTs ! ! !PTsHaltProcedure commentStamp: 'platypus comment' prior: 110529033! PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; ! !PTsHaltProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110529219! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self halt ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110529448! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsClrscrProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110529792! translatedFromISO10303P11 ^ true ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110529910! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110530091! vwNamespaceName ^ #PTs ! ! !PTsClrscrProcedure commentStamp: 'platypus comment' prior: 110530183! PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; ! !PTsClrscrProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110530387! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript clear ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110530625! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsNumberedNameFunction instanceVariableNames: 'nb prefix suffix nbstr posFirst ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110531011! translatedFromISO10303P11 ^ true ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110531134! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110531320! vwNamespaceName ^ #PTs ! ! !PTsNumberedNameFunction commentStamp: 'platypus comment' prior: 110531417! FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110532282! nb: anInteger prefix: aString suffix: aString1 ^ self new nb: anInteger prefix: aString suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532077! fromValues: values self nb: (values at: 1). self prefix: (values at: 2). self suffix: (values at: 3) ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112487423! nb: anInteger prefix: aString suffix: aString1 self nb: anInteger. self prefix: aString. self suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532470! nb: anInteger nb := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532575! prefix: aString prefix := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532684! suffix: aString1 suffix := aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532795! nbstr: aString nbstr := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110532902! posFirst: anInteger posFirst := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110533019! nb ^ nb ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110533102! prefix ^ prefix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110533193! suffix ^ suffix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110533284! nbstr ^ nbstr ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110533373! posFirst ^ posFirst ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110533467! invoke " ---------- locals assignments ----------" self nbstr: (PltFORMATFunction invokeFromValues: (OrderedCollection new add: self nb; add: '07I'; yourself)). self posFirst: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement untilControlBlock: [ :no101 | (self nbstr pltAt: no101) ~= '0' ] repeat: [ :no101 | self posFirst: no101 ] from: 2 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)). ^ self return: ((self prefix pltPlus: (self nbstr pltCopyFrom: self posFirst to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)))) pltPlus: self suffix) ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110534341! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllModelInstancesFunction instanceVariableNames: 'founds ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110534712! translatedFromISO10303P11 ^ true ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110534840! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110535031! vwNamespaceName ^ #PTs ! ! !PTsAllModelInstancesFunction commentStamp: 'platypus comment' prior: 110535133! FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110535536! founds: aSetOfObject founds := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110535714! founds ^ founds ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110535809! invoke " ---------- locals assignments ----------" self founds: Array new. " ---------- statements ----------" "---------- native statement ---------- " self founds addAll: self myContext allApplicationInstances. ^ self return: self founds ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110536149! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInstanceBecomeProcedure instanceVariableNames: 'old new ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110536517! translatedFromISO10303P11 ^ true ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110536643! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110536832! vwNamespaceName ^ #PTs ! ! !PTsInstanceBecomeProcedure commentStamp: 'platypus comment' prior: 110536932! PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110537517! old: anObject new: anObject1 ^ self new old: anObject new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537341! fromValues: values self old: (values at: 1). self new: (values at: 2) ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112493384! old: anObject new: anObject1 self old: anObject. self new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537665! old: anObject old := anObject ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537773! new: anObject1 new := anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537883! old ^ old ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110537971! new ^ new ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110538058! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self old becomeInstance: self new ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110538321! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExploreProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110538671! translatedFromISO10303P11 ^ true ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110538790! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110538972! vwNamespaceName ^ #PTs ! ! !PTsExploreProcedure commentStamp: 'platypus comment' prior: 110539065! PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; ! !PTsExploreProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110539554! arg: anObject ^ self new arg: anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110539412! fromValues: values self arg: (values at: 1) ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112495797! arg: anObject arg := anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110539655! arg ^ arg ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110539735! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg explore ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110539974! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInspectProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110540324! translatedFromISO10303P11 ^ true ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110540443! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110540625! vwNamespaceName ^ #PTs ! ! !PTsInspectProcedure commentStamp: 'platypus comment' prior: 110540718! PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; ! !PTsInspectProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110541204! arg: anObject ^ self new arg: anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110541062! fromValues: values self arg: (values at: 1) ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112497671! arg: anObject arg := anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110541305! arg ^ arg ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110541385! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg inspect ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110541624! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTestExprProcedure instanceVariableNames: 'expr shouldBe ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110541986! translatedFromISO10303P11 ^ true ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110542106! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110542289! vwNamespaceName ^ #PTs ! ! !PTsTestExprProcedure commentStamp: 'platypus comment' prior: 110542383! PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; ! !PTsTestExprProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110543134! expr: anObject shouldBe: anObject1 ^ self new expr: anObject shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110542958! fromValues: values self expr: (values at: 1). self shouldBe: (values at: 2) ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112499748! expr: anObject shouldBe: anObject1 self expr: anObject. self shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110543288! expr: anObject expr := anObject ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110543392! shouldBe: anObject1 shouldBe := anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110543506! expr ^ expr ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110543590! shouldBe ^ shouldBe ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110543681! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: ('[' , self expr printString , ']' , ' [' , self shouldBe printString , ']\') withCRs ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110544007! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRunAll0ArgProcsOfProcedure instanceVariableNames: 'schemaName haltIt ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110544391! translatedFromISO10303P11 ^ true ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110544520! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110544712! vwNamespaceName ^ #PTs ! ! !PTsRunAll0ArgProcsOfProcedure commentStamp: 'platypus comment' prior: 110544815! PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110546363! schemaName: aString haltIt: aBoolean ^ self new schemaName: aString haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546174! fromValues: values self schemaName: (values at: 1). self haltIt: (values at: 2) ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112503256! schemaName: aString haltIt: aBoolean self schemaName: aString. self haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546530! schemaName: aString schemaName := aString ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546653! haltIt: aBoolean haltIt := aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546770! schemaName ^ schemaName ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110546875! haltIt ^ haltIt ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110546971! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self error: 'not implemented' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110547233! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsReadStepFileProcedure instanceVariableNames: 'filePath ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110547598! translatedFromISO10303P11 ^ true ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110547722! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110547909! vwNamespaceName ^ #PTs ! ! !PTsReadStepFileProcedure commentStamp: 'platypus comment' prior: 110548007! PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110549151! filePath: aString ^ self new filePath: aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110548999! fromValues: values self filePath: (values at: 1) ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112506429! filePath: aString filePath := aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110549265! filePath ^ filePath ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110549360! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: 'reading ' , self filePath , '...'. self myContext stepFileIn: self filePath. Transcript show: 'done' , String cr ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110549720! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAskForExpressDictionaryMetaDataFunction instanceVariableNames: 'metaDataFilePath doit chosenName ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110553102! translatedFromISO10303P11 ^ true ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110553244! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110553449! vwNamespaceName ^ #PTs ! ! !PTsAskForExpressDictionaryMetaDataFunction commentStamp: 'platypus comment' prior: 110553565! FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110555254! metaDataFilePath: aString ^ self new metaDataFilePath: aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555076! fromValues: values self metaDataFilePath: (values at: 1) ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112509739! metaDataFilePath: aString metaDataFilePath := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555402! doit: aBoolean doit := aBoolean ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555528! chosenName: aString chosenName := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555664! metaDataFilePath ^ metaDataFilePath ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555794! doit ^ doit ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110555900! chosenName ^ chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 110556017! invoke " ---------- locals assignments ----------" self doit: false. " ---------- statements ----------" "---------- native statement ---------- " PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [ :hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ' , expDict name , '?') ifTrue: [ self chosenName: expDict name. Transcript show: 'writing meta data file "' , self metaDataFilePath , '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs ] ]. ^ self return: self chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110556765! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsWriteFileProcedure instanceVariableNames: 'filename contents ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110550088! translatedFromISO10303P11 ^ true ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110550209! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 110550393! vwNamespaceName ^ #PTs ! ! !PTsWriteFileProcedure commentStamp: 'platypus comment' prior: 110550488! PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 110551614! filename: aString contents: aString1 ^ self new filename: aString contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110551433! fromValues: values self filename: (values at: 1). self contents: (values at: 2) ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112513478! filename: aString contents: aString1 self filename: aString. self contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110551773! filename: aString filename := aString ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110551884! contents: aString1 contents := aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110551997! filename ^ filename ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 110552090! contents ^ contents ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112322383! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | fileStream fref | fref := self filename asFileReference. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 110552677! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PTsPlatypustoolboxSchemaInstance initialize.! ----End fileIn----! ----SNAPSHOT----2014-03-13T11:02:23.63327+01:00 Pharo.image priorSource: 43271694! !PTsWriteFileProcedure methodsFor: 'platypus-generated-invoking' stamp: 'AlainPlantec 3/13/2014 11:21' prior: 112514547! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close ! ! ----Platypus: Updating cheddar-dev: /platypus-toolbox/express_toolsbox_functions/WriteFile PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ----! PlatypusCoreSchemaInstance subclass: #PTsPlatypustoolboxSchemaInstance instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112323892! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112324051! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112324273! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance commentStamp: 'platypus comment' prior: 112324387! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; END_SCHEMA; ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112342487! namesBuilderClassName ^ #PlatypusNamesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112342644! namesBuilder | namesBuilder | namesBuilder := self namesBuilderClass new. namesBuilder classPrefix: 'PTs'. namesBuilder systemCategoryPrefix: 'PTs'. namesBuilder rootClassName: 'PTsCoreEntity'. namesBuilder rootClassSystemCategory: 'PTs-CoreEntity'. ^ namesBuilder ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 112343035! schemaDefinition1 ^ #(#express_dictionary_queries #PTsExpressDictionaryQueriesSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 112343251! schemaDefinition2 ^ #(#express_toolsbox_functions #PTsExpressToolsboxFunctionsSchemaDefinition) ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-schemata-accessing' stamp: '' prior: 112343467! schemaDefinitionCount ^ 2 ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 112343612! context ^ context ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 112343749! context: aContext context := aContext. super context: aContext ! ! PlatypusCoreRepository subclass: #PTsPlatypustoolboxRepository instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112344120! translatedFromISO10303P11 ^ true ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112344275! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112344493! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112344627! repositoryClassName ^ #PTsPlatypustoolboxRepository ! ! !PTsPlatypustoolboxRepository class methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112344792! generatedMetaDataSchemaInstanceName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsPlatypustoolboxSchemaInstance methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112344975! externalSchemaInstanceClassNames ^ #(#PltPlatypusMetaSchemasSchemaInstance) ! ! PlatypusCoreAbstractVisitor subclass: #PTsAbstractVisitor instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-PlatypustoolboxSchemaInstance'! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112345343! translatedFromISO10303P11 ^ true ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112345488! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAbstractVisitor class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112345696! vwNamespaceName ^ #PTs ! ! !PTsPlatypustoolboxSchemaInstance class methodsFor: 'platypus-generated-initializing' stamp: '' prior: 112345839! initialize self reinitializeSingleton. self singleton buildIndexes ! ! PlatypusCoreSchema subclass: #PTsExpressDictionaryQueriesSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112346241! translatedFromISO10303P11 ^ true ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112346411! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressDictionaryQueriesSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112346644! vwNamespaceName ^ #PTs ! ! !PTsExpressDictionaryQueriesSchemaDefinition commentStamp: 'platypus comment' prior: 112346769! SCHEMA express_dictionary_queries; USE FROM Platypus_dictionary_schema; USE FROM Platypus_expressions_schema; USE FROM express_toolsbox_functions; FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; END_SCHEMA; ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112354604! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 112354794! context ^ self schemaInstance context ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-entities' stamp: '' prior: 112354953! entityDefinitionCount ^ 0 ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112355101! functionDeclaration1 ^ #(#expressionValueToString #PTsExpressionValueToStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112355310! functionDeclaration2 ^ #(#typeof_as_string #PTsTypeofAsStringFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112355503! functionDeclaration3 ^ #(#schema_definition_of #PTsSchemaDefinitionOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112355704! functionDeclaration4 ^ #(#schema_instance_of #PTsSchemaInstanceOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112355901! functionDeclaration5 ^ #(#remarks_for #PTsRemarksForFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112356085! functionDeclaration6 ^ #(#clean_remark_text_of #PTsCleanRemarkTextOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112356285! functionDeclaration7 ^ #(#root_entity_list #PTsRootEntityListFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112356478! functionDeclaration8 ^ #(#subtypes_of #PTsSubtypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112356662! functionDeclaration9 ^ #(#attribute_named_from #PTsAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112356863! functionDeclaration10 ^ #(#has_attribute_named #PTsHasAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112357063! functionDeclaration11 ^ #(#inherited_attribute_named_from #PTsInheritedAttributeNamedFromFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112357284! functionDeclaration12 ^ #(#has_inherited_attribute_named #PTsHasInheritedAttributeNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112357503! functionDeclaration13 ^ #(#query_attributes #PTsQueryAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112357698! functionDeclaration14 ^ #(#attribute_redeclared_by #PTsAttributeRedeclaredByFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112357906! functionDeclaration15 ^ #(#all_supertypes_of #PTsAllSupertypesOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112358102! functionDeclaration16 ^ #(#local_root_supertype_of #PTsLocalRootSupertypeOfFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112358309! functionDeclaration17 ^ #(#inherits_from_entity_named #PTsInheritsFromEntityNamedFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112358522! functionDeclaration18 ^ #(#inherited_attributes #PTsInheritedAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112358725! functionDeclaration19 ^ #(#inherited_explicit_attributes #PTsInheritedExplicitAttributesFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112358945! functionDeclaration20 ^ #(#derive_attribute_result #PTsDeriveAttributeResultFunction) ! ! !PTsExpressDictionaryQueriesSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112359153! functionDeclarationCount ^ 20 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExpressionValueToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112359517! translatedFromISO10303P11 ^ true ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112359678! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112359902! vwNamespaceName ^ #PTs ! ! !PTsExpressionValueToStringFunction commentStamp: 'platypus comment' prior: 112360018! FUNCTION expressionValueToString ( arg : expression ) : STRING; (*# | t | t := PlatypusExpressExpression2AdaTranslater new. ^ self return: (PltStringLiteral val: (t translate: self arg)) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112360770! arg: aPTsExpression ^ self new arg: aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112360613! fromValues: values self arg: (values at: 1) ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112553601! arg: aPTsExpression arg := aPTsExpression ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112360925! arg ^ arg ! ! !PTsExpressionValueToStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112361047! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsExpressionValueToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112361349! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTypeofAsStringFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112361736! translatedFromISO10303P11 ^ true ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112361888! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112362103! vwNamespaceName ^ #PTs ! ! !PTsTypeofAsStringFunction commentStamp: 'platypus comment' prior: 112362210! FUNCTION typeof_as_string ( e : entity_instance ) : STRING; RETURN ( '[' + StringAggregateConcatSeparatedBy ( TYPEOF ( e ), '; ' ) + ']' ); END_FUNCTION; ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112362822! e: aPTsEntityInstance ^ self new e: aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112362676! fromValues: values self e: (values at: 1) ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112555669! e: aPTsEntityInstance e := aPTsEntityInstance ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112362972! e ^ e ! ! !PTsTypeofAsStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112363081! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (('[' pltPlus: (PTsStringAggregateConcatSeparatedByFunction invokeFromValues: (OrderedCollection new add: (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)); add: '; '; yourself))) pltPlus: ']') ! ! !PTsTypeofAsStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112363649! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaDefinitionOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112364044! translatedFromISO10303P11 ^ true ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112364200! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112364419! vwNamespaceName ^ #PTs ! ! !PTsSchemaDefinitionOfFunction commentStamp: 'platypus comment' prior: 112364530! FUNCTION schema_definition_of ( e : dictionary_instance ) : schema_definition; IF 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION' IN TYPEOF ( e ) THEN RETURN ( e ); END_IF; RETURN ( schema_definition_of ( e.owner ) ); END_FUNCTION; ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112365244! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112365094! fromValues: values self e: (values at: 1) ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112558075! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112365406! e ^ e ! ! !PTsSchemaDefinitionOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112365519! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.SCHEMA_DEFINITION') ifTrue: [ ^ self return: self e ]. ^ self return: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: (self e ownerUsingContext: self class context); yourself)) ! ! !PTsSchemaDefinitionOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112366105! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSchemaInstanceOfFunction instanceVariableNames: 'e ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112366496! translatedFromISO10303P11 ^ true ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112366650! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112366867! vwNamespaceName ^ #PTs ! ! !PTsSchemaInstanceOfFunction commentStamp: 'platypus comment' prior: 112366976! FUNCTION schema_instance_of ( e : dictionary_instance ) : schema_definition; RETURN ( schema_definition_of ( e ).owner ); END_FUNCTION; ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112367584! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112367436! fromValues: values self e: (values at: 1) ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112560419! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112367744! e ^ e ! ! !PTsSchemaInstanceOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112367855! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: ((PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) ownerUsingContext: self class context) ! ! !PTsSchemaInstanceOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112368245! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRemarksForFunction instanceVariableNames: 'e sch remarks ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112368636! translatedFromISO10303P11 ^ true ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112368784! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112368995! vwNamespaceName ^ #PTs ! ! !PTsRemarksForFunction commentStamp: 'platypus comment' prior: 112369098! FUNCTION remarks_for ( e : dictionary_instance ) : LIST OF remark; LOCAL sch : schema_definition := schema_definition_of ( e ); remarks : LIST OF remark := [ ]; END_LOCAL; REPEAT no := LOINDEX ( sch.remark_references ) TO HIINDEX ( sch.remark_references ); ALIAS remref FOR sch.remark_references [ no]; IF ( remref.referenced.ref :=: e ) THEN remarks := remarks + remref.remark; END_IF; END_ALIAS; END_REPEAT; RETURN ( remarks ); END_FUNCTION; ! !PTsRemarksForFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112370021! e: aPTsDictionaryInstance ^ self new e: aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112369879! fromValues: values self e: (values at: 1) ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112562868! e: aPTsDictionaryInstance e := aPTsDictionaryInstance ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112370175! sch: aPTsSchemaDefinition sch := aPTsSchemaDefinition ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112370329! remarks: aListOfPTsRemark remarks := aListOfPTsRemark ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsRemark as: OrderedCollection ] ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112370569! e ^ e ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112370675! sch ^ sch ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112370785! remarks ^ remarks ! ! !PTsRemarksForFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112370902! invoke " ---------- locals assignments ----------" self sch: (PTsSchemaDefinitionOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). self remarks: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no56 | PlatypusCoreAliasStatement alias: ((self sch remarkReferencesUsingContext: self class context) pltAt: no56) statementsBlock: [ :remref2479 | ((remref2479 referencedUsingContext: self class context) refUsingContext: self class context) == self e ifTrue: [ self remarks: (self remarks pltPlus: (remref2479 remarkUsingContext: self class context)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self sch remarkReferencesUsingContext: self class context); yourself)). ^ self return: self remarks ! ! !PTsRemarksForFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112372058! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCleanRemarkTextOfFunction instanceVariableNames: 'rem foundMarkPos ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112372466! translatedFromISO10303P11 ^ true ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112372621! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112372839! vwNamespaceName ^ #PTs ! ! !PTsCleanRemarkTextOfFunction commentStamp: 'platypus comment' prior: 112372949! FUNCTION clean_remark_text_of ( rem : remark ) : STRING; LOCAL foundMarkPos : INTEGER := 0; END_LOCAL; REPEAT no := 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '<' ) THEN foundMarkPos := no; ESCAPE; ELSE IF ( rem.text [ no] <> ' ' ) THEN ESCAPE; END_IF; END_IF; END_REPEAT; IF ( foundMarkPos > 0 ) THEN REPEAT no := foundMarkPos + 1 TO LENGTH ( rem.text ); IF ( rem.text [ no] = '"' ) OR ( rem.text [ no] = '>' ) THEN RETURN ( rem.text [ no + 1 : LENGTH ( rem.text ) ] ); END_IF; END_REPEAT; END_IF; RETURN ( rem.text ); END_FUNCTION; ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112374022! rem: aPTsRemark ^ self new rem: aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112373871! fromValues: values self rem: (values at: 1) ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112566873! rem: aPTsRemark rem := aPTsRemark ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112374163! foundMarkPos: anInteger foundMarkPos := anInteger ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112374320! rem ^ rem ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112374437! foundMarkPos ^ foundMarkPos ! ! !PTsCleanRemarkTextOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112374571! invoke " ---------- locals assignments ----------" self foundMarkPos: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no2278 | (((self rem textUsingContext: self class context) pltAt: no2278) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no2278) = '<' ]) ifTrue: [ self foundMarkPos: no2278. PlatypusExpressEscapeStatementException signal ] ifFalse: [ ((self rem textUsingContext: self class context) pltAt: no2278) ~= ' ' ifTrue: [ PlatypusExpressEscapeStatementException signal ] ] ] from: 1 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)). self foundMarkPos > 0 ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no3993 | (((self rem textUsingContext: self class context) pltAt: no3993) = '"' or: [ ((self rem textUsingContext: self class context) pltAt: no3993) = '>' ]) ifTrue: [ ^ self return: ((self rem textUsingContext: self class context) pltCopyFrom: (no3993 pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself))) ] ] from: (self foundMarkPos pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: (self rem textUsingContext: self class context); yourself)) ]. ^ self return: (self rem textUsingContext: self class context) ! ! !PTsCleanRemarkTextOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112376326! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRootEntityListFunction instanceVariableNames: 'entities l ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112376722! translatedFromISO10303P11 ^ true ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112376874! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112377089! vwNamespaceName ^ #PTs ! ! !PTsRootEntityListFunction commentStamp: 'platypus comment' prior: 112377196! FUNCTION root_entity_list ( entities : LIST OF entity_definition ) : LIST OF entity_definition; LOCAL l : LIST OF entity_definition := [ ]; END_LOCAL; REPEAT no := LOINDEX ( entities ) TO HIINDEX ( entities ); ALIAS ent FOR entities [ no]; IF ( SIZEOF ( ent.supertypes ) = 0 ) THEN INSERT ( l, ent, SIZEOF ( l ) ); ELSE ALIAS sup FOR ent.supertypes [ 1 ].ref; IF ( sup.owner :<>: ent.owner ) THEN INSERT ( l, ent, SIZEOF ( l ) ); END_IF; END_ALIAS; END_IF; END_ALIAS; END_REPEAT; RETURN ( l ); END_FUNCTION; ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112378249! entities: aListOfPTsEntityDefinition ^ self new entities: aListOfPTsEntityDefinition ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112378096! fromValues: values self entities: (values at: 1) ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112571059! entities: aListOfPTsEntityDefinition entities := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112378529! l: aListOfPTsEntityDefinition l := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112378795! entities ^ entities ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112378919! l ^ l ! ! !PTsRootEntityListFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112379028! invoke " ---------- locals assignments ----------" self l: Array new. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no455 | PlatypusCoreAliasStatement alias: (self entities pltAt: no455) statementsBlock: [ :ent1944 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (ent1944 supertypesUsingContext: self class context); yourself)) = 0 ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ifFalse: [ PlatypusCoreAliasStatement alias: (((ent1944 supertypesUsingContext: self class context) pltAt: 1) refUsingContext: self class context) statementsBlock: [ :sup2674 | (sup2674 ownerUsingContext: self class context) ~~ (ent1944 ownerUsingContext: self class context) ifTrue: [ PltINSERTProcedure invokeFromValues: (OrderedCollection new add: self l; add: ent1944; add: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self l; yourself)); yourself) ] ] ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self entities; yourself)). ^ self return: self l ! ! !PTsRootEntityListFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112380912! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSubtypesOfFunction instanceVariableNames: 'ent allent ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112381300! translatedFromISO10303P11 ^ true ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112381448! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112381659! vwNamespaceName ^ #PTs ! ! !PTsSubtypesOfFunction commentStamp: 'platypus comment' prior: 112381762! FUNCTION subtypes_of ( ent : entity_definition; allent : LIST OF entity_definition ) : LIST OF entity_definition; RETURN ( QUERY ( e <* allent | SIZEOF ( QUERY ( ee <* e.supertypes | ee.ref = ent ) ) > 0 ) ); END_FUNCTION; ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112382541! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ^ self new ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112382367! fromValues: values self ent: (values at: 1). self allent: (values at: 2) ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112575286! ent: aPTsEntityDefinition allent: aListOfPTsEntityDefinition self ent: aPTsEntityDefinition. self allent: aListOfPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112382775! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112382929! allent: aListOfPTsEntityDefinition allent := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112383201! ent ^ ent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112383311! allent ^ allent ! ! !PTsSubtypesOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112383426! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (self allent select: [ :e273 | (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: ((e273 supertypesUsingContext: self class context) select: [ :ee953 | (ee953 refUsingContext: self class context) = self ent ]); yourself)) > 0 ]) ! ! !PTsSubtypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112383957! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112384372! translatedFromISO10303P11 ^ true ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112384528! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112384747! vwNamespaceName ^ #PTs ! ! !PTsAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 112384858! FUNCTION attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* e.attributes | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112385770! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112385592! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112578549! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112385966! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386124! name: aString name := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386262! key: aString key := aString ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386398! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386665! e ^ e ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386779! name ^ name ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112386899! key ^ key ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112387017! attributes ^ attributes ! ! !PTsAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112387148! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((self e attributesUsingContext: self class context) select: [ :a4 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a4 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112388109! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112388507! translatedFromISO10303P11 ^ true ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112388662! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112388880! vwNamespaceName ^ #PTs ! ! !PTsHasAttributeNamedFunction commentStamp: 'platypus comment' prior: 112388990! FUNCTION has_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112389668! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112389491! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112582449! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112389863! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112390020! name: aString name := aString ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112390157! e ^ e ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112390270! name ^ name ! ! !PTsHasAttributeNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112390388! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112390897! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributeNamedFromFunction instanceVariableNames: 'e name key attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112391330! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112391495! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112391723! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributeNamedFromFunction commentStamp: 'platypus comment' prior: 112391843! FUNCTION inherited_attribute_named_from ( e : entity_definition; name : STRING ) : attribute; LOCAL key : STRING := upperize ( name ); attributes : LIST OF attribute; END_LOCAL; attributes := QUERY ( a <* inherited_attributes ( e ) | upperize ( a.name ) = key ); IF ( SIZEOF ( attributes ) > 0 ) THEN RETURN ( attributes [ SIZEOF ( attributes ) ] ); ELSE RETURN ( ? ); END_IF; END_FUNCTION; ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112392806! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112392619! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112585567! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393011! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393178! name: aString name := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393325! key: aString key := aString ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393470! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393746! e ^ e ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393869! name ^ name ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112393998! key ^ key ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112394125! attributes ^ attributes ! ! !PTsInheritedAttributeNamedFromFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112394265! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self name; yourself)). " ---------- statements ----------" self attributes: ((PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) select: [ :a403 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (a403 nameUsingContext: self class context); yourself)) = self key ]). (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) > 0 ifTrue: [ ^ self return: (self attributes pltAt: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself))) ] ifFalse: [ ^ self return: nil ] ! ! !PTsInheritedAttributeNamedFromFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112395305! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHasInheritedAttributeNamedFunction instanceVariableNames: 'e name ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112395721! translatedFromISO10303P11 ^ true ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112395885! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112396112! vwNamespaceName ^ #PTs ! ! !PTsHasInheritedAttributeNamedFunction commentStamp: 'platypus comment' prior: 112396231! FUNCTION has_inherited_attribute_named ( e : entity_definition; name : STRING ) : BOOLEAN; RETURN ( EXISTS ( inherited_attribute_named_from ( e, name ) ) ); END_FUNCTION; ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112396956! e: aPTsEntityDefinition name: aString ^ self new e: aPTsEntityDefinition name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112396770! fromValues: values self e: (values at: 1). self name: (values at: 2) ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112589719! e: aPTsEntityDefinition name: aString self e: aPTsEntityDefinition. self name: aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112397160! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112397326! name: aString name := aString ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112397472! e ^ e ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112397594! name ^ name ! ! !PTsHasInheritedAttributeNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112397721! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (PTsInheritedAttributeNamedFromFunction invokeFromValues: (OrderedCollection new add: self e; add: self name; yourself)); yourself)) ! ! !PTsHasInheritedAttributeNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112398248! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsQueryAttributesFunction instanceVariableNames: 'ent attrKind withInherited withRedeclaring attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112398689! translatedFromISO10303P11 ^ true ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112398842! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112399058! vwNamespaceName ^ #PTs ! ! !PTsQueryAttributesFunction commentStamp: 'platypus comment' prior: 112399166! FUNCTION query_attributes ( ent : entity_definition; attr_kind : STRING; with_inherited : BOOLEAN; with_redeclaring : BOOLEAN ) : LIST OF attribute; LOCAL attributes : LIST OF attribute; END_LOCAL; IF with_inherited THEN attributes := inherited_attributes ( ent ); ELSE attributes := ent.attributes; END_IF; IF EXISTS ( attr_kind ) THEN attributes := QUERY ( a <* attributes | ( 'PLATYPUS_DICTIONARY_SCHEMA.' + Upperize ( attr_kind ) ) IN TYPEOF ( a ) ); END_IF; IF NOT with_redeclaring THEN attributes := QUERY ( a <* attributes | NOT EXISTS ( a.redeclaring ) ); END_IF; RETURN ( attributes ); END_FUNCTION; ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112400523! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ^ self new ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112400266! fromValues: values self ent: (values at: 1). self attrKind: (values at: 2). self withInherited: (values at: 3). self withRedeclaring: (values at: 4) ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112593104! ent: aPTsEntityDefinition attrKind: aString withInherited: aBoolean withRedeclaring: aBoolean1 self ent: aPTsEntityDefinition. self attrKind: aString. self withInherited: aBoolean. self withRedeclaring: aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112400844! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401003! attrKind: aString attrKind := aString ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401146! withInherited: aBoolean withInherited := aBoolean ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401301! withRedeclaring: aBoolean1 withRedeclaring := aBoolean1 ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401462! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401726! ent ^ ent ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401841! attrKind ^ attrKind ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112401966! withInherited ^ withInherited ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112402101! withRedeclaring ^ withRedeclaring ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112402240! attributes ^ attributes ! ! !PTsQueryAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112402368! invoke " ---------- locals assignments ----------" " ---------- statements ----------" self withInherited ifTrue: [ self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; yourself)) ] ifFalse: [ self attributes: (self ent attributesUsingContext: self class context) ]. (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself)) ifTrue: [ self attributes: (self attributes select: [ :a2389 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a2389; yourself)) includes: ('PLATYPUS_DICTIONARY_SCHEMA.' pltPlus: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self attrKind; yourself))) ]) ]. self withRedeclaring not ifTrue: [ self attributes: (self attributes select: [ :a3202 | (PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (a3202 redeclaringUsingContext: self class context); yourself)) not ]) ]. ^ self return: self attributes ! ! !PTsQueryAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112403742! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAttributeRedeclaredByFunction instanceVariableNames: 'ent testedAttrPos attributes testedAttr ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112404181! translatedFromISO10303P11 ^ true ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112404340! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112404562! vwNamespaceName ^ #PTs ! ! !PTsAttributeRedeclaredByFunction commentStamp: 'platypus comment' prior: 112404676! FUNCTION attribute_redeclared_by ( ent : entity_definition; tested_attr_pos : INTEGER ) : attribute; LOCAL attributes : LIST OF attribute := query_attributes ( ent, ?, true, true ); tested_attr : attribute := attributes [ tested_attr_pos]; END_LOCAL; REPEAT no := LOINDEX ( attributes ) TO HIINDEX ( attributes ); ALIAS curr FOR attributes [ no]; IF ( curr = tested_attr ) THEN REPEAT noi := no + 1 TO HIINDEX ( attributes ); ALIAS curri FOR attributes [ noi]; IF ( EXISTS ( curri.redeclaring ) AND ( curri.redeclaring.ref = curr ) ) THEN RETURN ( curri ); END_IF; END_ALIAS; END_REPEAT; END_IF; END_ALIAS; END_REPEAT; RETURN ( ? ); END_FUNCTION; ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112405957! ent: aPTsEntityDefinition testedAttrPos: anInteger ^ self new ent: aPTsEntityDefinition testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112405765! fromValues: values self ent: (values at: 1). self testedAttrPos: (values at: 2) ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112598693! ent: aPTsEntityDefinition testedAttrPos: anInteger self ent: aPTsEntityDefinition. self testedAttrPos: anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112406182! ent: aPTsEntityDefinition ent := aPTsEntityDefinition ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112406347! testedAttrPos: anInteger testedAttrPos := anInteger ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112406510! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112406780! testedAttr: aPTsAttribute testedAttr := aPTsAttribute ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112406945! ent ^ ent ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112407066! testedAttrPos ^ testedAttrPos ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112407207! attributes ^ attributes ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112407342! testedAttr ^ testedAttr ! ! !PTsAttributeRedeclaredByFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112407476! invoke " ---------- locals assignments ----------" self attributes: (PTsQueryAttributesFunction invokeFromValues: (OrderedCollection new add: self ent; add: nil; add: true; add: true; yourself)). self testedAttr: (self attributes pltAt: self testedAttrPos). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no506 | PlatypusCoreAliasStatement alias: (self attributes pltAt: no506) statementsBlock: [ :curr1999 | curr1999 = self testedAttr ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :noi3548 | PlatypusCoreAliasStatement alias: (self attributes pltAt: noi3548) statementsBlock: [ :curri1381 | ((PltEXISTSFunction invokeFromValues: (OrderedCollection new add: (curri1381 redeclaringUsingContext: self class context); yourself)) and: [ ((curri1381 redeclaringUsingContext: self class context) refUsingContext: self class context) = curr1999 ]) ifTrue: [ ^ self return: curri1381 ] ] ] from: (no506 pltPlus: 1) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) ] ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self attributes; yourself)). ^ self return: nil ! ! !PTsAttributeRedeclaredByFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112409194! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllSupertypesOfFunction instanceVariableNames: 'e res ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112409587! translatedFromISO10303P11 ^ true ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112409740! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112409956! vwNamespaceName ^ #PTs ! ! !PTsAllSupertypesOfFunction commentStamp: 'platypus comment' prior: 112410064! FUNCTION all_supertypes_of ( e : entity_definition ) : LIST OF entity_definition; LOCAL res : LIST OF entity_definition := [ ]; END_LOCAL; IF ( 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION' IN TYPEOF ( e ) ) THEN REPEAT no := LOINDEX ( e.supertypes ) TO HIINDEX ( e.supertypes ); res := all_supertypes_of ( e.supertypes [ no].ref ) + res; END_REPEAT; END_IF; res := res + e; RETURN ( res ); END_FUNCTION; ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112410952! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112410805! fromValues: values self e: (values at: 1) ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112603793! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112411107! res: aListOfPTsEntityDefinition res := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112411378! e ^ e ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112411489! res ^ res ! ! !PTsAllSupertypesOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112411603! invoke " ---------- locals assignments ----------" self res: Array new. " ---------- statements ----------" ((PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: self e; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.ENTITY_DEFINITION') ifTrue: [ PlatypusCoreRepeatStatement repeat: [ :no1352 | self res: ((PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: (((self e supertypesUsingContext: self class context) pltAt: no1352) refUsingContext: self class context); yourself)) pltPlus: self res) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: (self e supertypesUsingContext: self class context); yourself)) ]. self res: (self res pltPlus: self e). ^ self return: self res ! ! !PTsAllSupertypesOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112412752! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLocalRootSupertypeOfFunction instanceVariableNames: 'e sups tmp ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112413160! translatedFromISO10303P11 ^ true ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112413318! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112413539! vwNamespaceName ^ #PTs ! ! !PTsLocalRootSupertypeOfFunction commentStamp: 'platypus comment' prior: 112413652! FUNCTION local_root_supertype_of ( e : entity_definition ) : entity_definition; LOCAL sups : LIST OF entity_definition := all_supertypes_of ( e ); tmp : LIST OF entity_definition; END_LOCAL; tmp := QUERY ( s <* sups | s.owner :=: e.owner ); RETURN ( tmp [ LOINDEX ( tmp ) ] ); END_FUNCTION; ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112414431! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112414279! fromValues: values self e: (values at: 1) ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112607262! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112414591! sups: aListOfPTsEntityDefinition sups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112414869! tmp: aListOfPTsEntityDefinition1 tmp := aListOfPTsEntityDefinition1 ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition1 as: OrderedCollection ] ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112415148! e ^ e ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112415264! sups ^ sups ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112415386! tmp ^ tmp ! ! !PTsLocalRootSupertypeOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112415505! invoke " ---------- locals assignments ----------" self sups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" self tmp: (self sups select: [ :s2435 | (s2435 ownerUsingContext: self class context) == (self e ownerUsingContext: self class context) ]). ^ self return: (self tmp pltAt: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self tmp; yourself))) ! ! !PTsLocalRootSupertypeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112416165! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritsFromEntityNamedFunction instanceVariableNames: 'e supname key allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112416590! translatedFromISO10303P11 ^ true ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112416751! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112416975! vwNamespaceName ^ #PTs ! ! !PTsInheritsFromEntityNamedFunction commentStamp: 'platypus comment' prior: 112417091! FUNCTION inherits_from_entity_named ( e : entity_definition; supname : STRING ) : BOOLEAN; LOCAL key : STRING := upperize ( supname ); allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; RETURN ( SIZEOF ( QUERY ( i <* allsups | upperize ( i.name ) = key ) ) > 0 ); END_FUNCTION; ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112417954! e: aPTsEntityDefinition supname: aString ^ self new e: aPTsEntityDefinition supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112417768! fromValues: values self e: (values at: 1). self supname: (values at: 2) ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112610714! e: aPTsEntityDefinition supname: aString self e: aPTsEntityDefinition. self supname: aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112418161! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112418324! supname: aString supname := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112418473! key: aString key := aString ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112418614! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112418901! e ^ e ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112419020! supname ^ supname ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112419151! key ^ key ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112419274! allsups ^ allsups ! ! !PTsInheritsFromEntityNamedFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112419404! invoke " ---------- locals assignments ----------" self key: (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: self supname; yourself)). self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (PltSIZEOFFunction invokeFromValues: (OrderedCollection new add: (self allsups select: [ :i2341 | (PTsUpperizeFunction invokeFromValues: (OrderedCollection new add: (i2341 nameUsingContext: self class context); yourself)) = self key ]); yourself)) > 0 ! ! !PTsInheritsFromEntityNamedFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112420263! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedAttributesFunction instanceVariableNames: 'e res allsups ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112420672! translatedFromISO10303P11 ^ true ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112420829! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112421049! vwNamespaceName ^ #PTs ! ! !PTsInheritedAttributesFunction commentStamp: 'platypus comment' prior: 112421161! FUNCTION inherited_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL res : LIST OF attribute := [ ]; allsups : LIST OF entity_definition := all_supertypes_of ( e ); END_LOCAL; REPEAT no := LOINDEX ( allsups ) TO HIINDEX ( allsups ); res := res + allsups [ no].attributes; END_REPEAT; RETURN ( res ); END_FUNCTION; ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112421978! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112421827! fromValues: values self e: (values at: 1) ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112614811! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112422137! res: aListOfPTsAttribute res := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112422387! allsups: aListOfPTsEntityDefinition allsups := aListOfPTsEntityDefinition ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsEntityDefinition as: OrderedCollection ] ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112422670! e ^ e ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112422785! res ^ res ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112422904! allsups ^ allsups ! ! !PTsInheritedAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112423030! invoke " ---------- locals assignments ----------" self res: Array new. self allsups: (PTsAllSupertypesOfFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no135 | self res: (self res pltPlus: ((self allsups pltAt: no135) attributesUsingContext: self class context)) ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self allsups; yourself)). ^ self return: self res ! ! !PTsInheritedAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112423825! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInheritedExplicitAttributesFunction instanceVariableNames: 'e attributes ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112424249! translatedFromISO10303P11 ^ true ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112424414! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112424642! vwNamespaceName ^ #PTs ! ! !PTsInheritedExplicitAttributesFunction commentStamp: 'platypus comment' prior: 112424762! FUNCTION inherited_explicit_attributes ( e : entity_definition ) : LIST OF attribute; LOCAL attributes : LIST OF attribute := inherited_attributes ( e ); END_LOCAL; RETURN ( QUERY ( a <* attributes | 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' IN TYPEOF ( a ) ) ); END_FUNCTION; ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112425551! e: aPTsEntityDefinition ^ self new e: aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112425392! fromValues: values self e: (values at: 1) ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112618368! e: aPTsEntityDefinition e := aPTsEntityDefinition ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112425718! attributes: aListOfPTsAttribute attributes := aListOfPTsAttribute ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfPTsAttribute as: OrderedCollection ] ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112425994! e ^ e ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112426117! attributes ^ attributes ! ! !PTsInheritedExplicitAttributesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112426257! invoke " ---------- locals assignments ----------" self attributes: (PTsInheritedAttributesFunction invokeFromValues: (OrderedCollection new add: self e; yourself)). " ---------- statements ----------" ^ self return: (self attributes select: [ :a860 | (PltTYPEOFFunction invokeFromValues: (OrderedCollection new add: a860; yourself)) includes: 'PLATYPUS_DICTIONARY_SCHEMA.EXPLICIT_ATTRIBUTE' ]) ! ! !PTsInheritedExplicitAttributesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112426858! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsDeriveAttributeResultFunction instanceVariableNames: 'd ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressDictionaryQueriesSchema'! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112427259! translatedFromISO10303P11 ^ true ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112427418! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112427640! vwNamespaceName ^ #PTs ! ! !PTsDeriveAttributeResultFunction commentStamp: 'platypus comment' prior: 112427754! FUNCTION derive_attribute_result ( d : derived_attribute ) : dictionary_instance; (*# | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [self halt]. self halt. self return: evalResult. #*) END_FUNCTION; ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112428751! d: aPTsDerivedAttribute ^ self new d: aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112428598! fromValues: values self d: (values at: 1) ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112621580! d: aPTsDerivedAttribute d := aPTsDerivedAttribute ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112428912! d ^ d ! ! !PTsDeriveAttributeResultFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112429028! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r e interpreter evalResult | r := self d valueOfExplicitAttributeNamed: 'assign'. "instDefinition := self d valueOfExplicitAttributeNamed: 'owner'." interpreter := PlatypusExpressInterpretor new. evalResult := interpreter evaluate: r ref val in: self d mySchemaInstance to: nil notifying: nil ifFail: [ self halt ]. self halt. self return: evalResult ! ! !PTsDeriveAttributeResultFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112429658! schemaDefinition ^ PTsExpressDictionaryQueriesSchemaDefinition singleton ! ! PlatypusCoreSchema subclass: #PTsExpressToolsboxFunctionsSchemaDefinition instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112430065! translatedFromISO10303P11 ^ true ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112430235! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExpressToolsboxFunctionsSchemaDefinition class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112430468! vwNamespaceName ^ #PTs ! ! !PTsExpressToolsboxFunctionsSchemaDefinition commentStamp: 'platypus comment' prior: 112430593! SCHEMA express_toolsbox_functions; FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; END_SCHEMA; ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112441049! schemaInstanceClassName ^ #PTsPlatypustoolboxSchemaInstance ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-context-accessing' stamp: '' prior: 112441239! context ^ self schemaInstance context ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-entities' stamp: '' prior: 112441398! entityDefinitionCount ^ 0 ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112441546! functionDeclaration1 ^ #(#string_ends_with #PTsStringEndsWithFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112441739! functionDeclaration2 ^ #(#string_replace #PTsStringReplaceFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112441929! functionDeclaration3 ^ #(#SmalltalkCodeOf #PTsSmalltalkCodeOfFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112442122! functionDeclaration4 ^ #(#StringAggregateConcatSeparatedBy #PTsStringAggregateConcatSeparatedByFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112442349! functionDeclaration5 ^ #(#LinesFromString #PTsLinesFromStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112442542! functionDeclaration6 ^ #(#SetToAggregate #PTsSetToAggregateFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112442733! functionDeclaration7 ^ #(#SetToList #PTsSetToListFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112442914! functionDeclaration8 ^ #(#ListToSet #PTsListToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112443095! functionDeclaration9 ^ #(#AggregateToSet #PTsAggregateToSetFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112443286! functionDeclaration10 ^ #(#capitalize #PTsCapitalizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112443470! functionDeclaration11 ^ #(#lowerize #PTsLowerizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112443650! functionDeclaration12 ^ #(#upperize #PTsUpperizeFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112443830! functionDeclaration13 ^ #(#ToString #PTsToStringFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112444010! functionDeclaration14 ^ #(#numbered_name #PTsNumberedNameFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112444199! functionDeclaration15 ^ #(#allModelInstances #PTsAllModelInstancesFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112444397! functionDeclaration16 ^ #(#askForExpressDictionaryMetaData #PTsAskForExpressDictionaryMetaDataFunction) ! ! !PTsExpressToolsboxFunctionsSchemaDefinition methodsFor: 'platypus-generated-functions' stamp: '' prior: 112444623! functionDeclarationCount ^ 16 ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringEndsWithFunction instanceVariableNames: 's token ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112444973! translatedFromISO10303P11 ^ true ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112445125! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112445340! vwNamespaceName ^ #PTs ! ! !PTsStringEndsWithFunction commentStamp: 'platypus comment' prior: 112445447! FUNCTION string_ends_with ( s : STRING; token : STRING ) : BOOLEAN; IF ( LENGTH ( s ) >= LENGTH ( token ) ) THEN IF ( s [ LENGTH ( s ) - LENGTH ( token ) + 1 : LENGTH ( s ) ] = token ) THEN RETURN ( true ); END_IF; END_IF; RETURN ( false ); END_FUNCTION; ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112446210! s: aString token: aString1 ^ self new s: aString token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112446035! fromValues: values self s: (values at: 1). self token: (values at: 2) ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112639054! s: aString token: aString1 self s: aString. self token: aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112446380! s: aString s := aString ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112446508! token: aString1 token := aString1 ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112446646! s ^ s ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112446756! token ^ token ! ! !PTsStringEndsWithFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112446873! invoke " ---------- locals assignments ----------" " ---------- statements ----------" (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) >= (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself)) ifTrue: [ (self s pltCopyFrom: (((PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself)) pltMinus: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self token; yourself))) pltPlus: 1) to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self s; yourself))) = self token ifTrue: [ ^ self return: true ] ]. ^ self return: false ! ! !PTsStringEndsWithFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112447821! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringReplaceFunction instanceVariableNames: 'src replWhat replWith ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112448226! translatedFromISO10303P11 ^ true ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112448377! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112448591! vwNamespaceName ^ #PTs ! ! !PTsStringReplaceFunction commentStamp: 'platypus comment' prior: 112448697! FUNCTION string_replace ( src : STRING; replWhat : STRING; replWith : STRING ) : STRING; (*# | r | r := self src val copyReplaceAll: self replWhat val with: self replWith val asTokens: false. self return: (PltStringLiteral val: r). #*) (*# | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r. #*) END_FUNCTION; ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112449665! src: aString replWhat: aString1 replWith: aString2 ^ self new src: aString replWhat: aString1 replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112449454! fromValues: values self src: (values at: 1). self replWhat: (values at: 2). self replWith: (values at: 3) ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112642426! src: aString replWhat: aString1 replWith: aString2 self src: aString. self replWhat: aString1. self replWith: aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112449889! src: aString src := aString ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112450020! replWhat: aString1 replWhat := aString1 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112450163! replWith: aString2 replWith := aString2 ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112450306! src ^ src ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112450419! replWhat ^ replWhat ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112450542! replWith ^ replWith ! ! !PTsStringReplaceFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112450664! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | r | r := self src copyReplaceAll: self replWhat with: self replWith asTokens: false. ^ self return: r ! ! !PTsStringReplaceFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112451024! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSmalltalkCodeOfFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112451415! translatedFromISO10303P11 ^ true ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112451568! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112451784! vwNamespaceName ^ #PTs ! ! !PTsSmalltalkCodeOfFunction commentStamp: 'platypus comment' prior: 112451892! FUNCTION SmalltalkCodeOf ( arg : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: (self arg asClearText)) #*) (*# ^ self return: ((PltStringLiteral val: (self arg)) asClearText) #*) END_FUNCTION; ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112452555! arg: aString ^ self new arg: aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112452406! fromValues: values self arg: (values at: 1) ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112645452! arg: aString arg := aString ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112452688! arg ^ arg ! ! !PTsSmalltalkCodeOfFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112452802! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: (PltStringLiteral val: self arg) asClearText ! ! !PTsSmalltalkCodeOfFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112453118! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsStringAggregateConcatSeparatedByFunction instanceVariableNames: 'l sep s ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112453547! translatedFromISO10303P11 ^ true ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112453717! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112453950! vwNamespaceName ^ #PTs ! ! !PTsStringAggregateConcatSeparatedByFunction commentStamp: 'platypus comment' prior: 112454075! FUNCTION StringAggregateConcatSeparatedBy ( l : LIST OF STRING; sep : STRING ) : STRING; LOCAL s : STRING := ''; END_LOCAL; REPEAT no := LOINDEX ( l ) TO HIINDEX ( l ); s := s + l [ no]; IF ( no < HIINDEX ( l ) ) THEN s := s + sep; END_IF; END_REPEAT; RETURN ( s ); END_FUNCTION; ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112454928! l: aListOfString sep: aString ^ self new l: aListOfString sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112454737! fromValues: values self l: (values at: 1). self sep: (values at: 2) ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112647732! l: aListOfString sep: aString self l: aListOfString. self sep: aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455122! l: aListOfString l := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455363! sep: aString sep := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455513! s: aString s := aString ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455659! l ^ l ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455787! sep ^ sep ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112455919! s ^ s ! ! !PTsStringAggregateConcatSeparatedByFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112456046! invoke " ---------- locals assignments ----------" self s: ''. " ---------- statements ----------" PlatypusCoreRepeatStatement repeat: [ :no1923 | self s: (self s pltPlus: (self l pltAt: no1923)). no1923 < (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) ifTrue: [ self s: (self s pltPlus: self sep) ] ] from: (PltLOINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)) to: (PltHIINDEXFunction invokeFromValues: (OrderedCollection new add: self l; yourself)). ^ self return: self s ! ! !PTsStringAggregateConcatSeparatedByFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112456834! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLinesFromStringFunction instanceVariableNames: 'source lines ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112457234! translatedFromISO10303P11 ^ true ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112457387! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112457603! vwNamespaceName ^ #PTs ! ! !PTsLinesFromStringFunction commentStamp: 'platypus comment' prior: 112457711! FUNCTION LinesFromString ( source : STRING ) : LIST OF STRING; LOCAL lines : LIST OF STRING := [ ]; END_LOCAL; (*# | r | r := self source val lines. self lines val addAll: (r collect: [:i | PltStringLiteral val: i]). self lines val adjustLowerAndUpperBounds #*) (*# self lines addAll: self source lines. #*) RETURN ( lines ); END_FUNCTION; ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112458545! source: aString ^ self new source: aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112458393! fromValues: values self source: (values at: 1) ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112651433! source: aString source := aString ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112458684! lines: aListOfString lines := aListOfString ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfString as: OrderedCollection ] ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112458916! source ^ source ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112459037! lines ^ lines ! ! !PTsLinesFromStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112459155! invoke " ---------- locals assignments ----------" self lines: Array new. " ---------- statements ----------" "---------- native statement ---------- " self lines addAll: self source lines. ^ self return: self lines ! ! !PTsLinesFromStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112459496! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToAggregateFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112459887! translatedFromISO10303P11 ^ true ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112460039! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112460254! vwNamespaceName ^ #PTs ! ! !PTsSetToAggregateFunction commentStamp: 'platypus comment' prior: 112460361! FUNCTION SetToAggregate ( input : AGGREGATE OF GENERIC ) : AGGREGATE OF GENERIC; RETURN ( input ); END_FUNCTION; ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112460946! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112460796! fromValues: values self input: (values at: 1) ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112653815! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112461106! input ^ input ! ! !PTsSetToAggregateFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112461223! invoke " ---------- locals assignments ----------" " ---------- statements ----------" ^ self return: self input ! ! !PTsSetToAggregateFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112461460! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsSetToListFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112461848! translatedFromISO10303P11 ^ true ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112461995! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112462205! vwNamespaceName ^ #PTs ! ! !PTsSetToListFunction commentStamp: 'platypus comment' prior: 112462307! FUNCTION SetToList ( input : SET OF GENERIC ) : LIST OF GENERIC; LOCAL result : LIST OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsSetToListFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112463089! input: aSetOfObject ^ self new input: aSetOfObject ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112462944! fromValues: values self input: (values at: 1) ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112655982! input: aSetOfObject input := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112463284! result: aListOfObject result := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112463512! input ^ input ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112463625! result ^ result ! ! !PTsSetToListFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112463739! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsSetToListFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112464084! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsListToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112464472! translatedFromISO10303P11 ^ true ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112464619! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112464829! vwNamespaceName ^ #PTs ! ! !PTsListToSetFunction commentStamp: 'platypus comment' prior: 112464931! FUNCTION ListToSet ( input : LIST OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsListToSetFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112465714! input: aListOfObject ^ self new input: aListOfObject ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112465569! fromValues: values self input: (values at: 1) ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112658605! input: aListOfObject input := aListOfObject ifNil: [ OrderedCollection new ] ifNotNil: [ aListOfObject as: OrderedCollection ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112465940! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112466137! input ^ input ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112466250! result ^ result ! ! !PTsListToSetFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112466364! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsListToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112466709! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAggregateToSetFunction instanceVariableNames: 'input result ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112467107! translatedFromISO10303P11 ^ true ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112467259! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112467474! vwNamespaceName ^ #PTs ! ! !PTsAggregateToSetFunction commentStamp: 'platypus comment' prior: 112467581! FUNCTION AggregateToSet ( input : AGGREGATE OF GENERIC ) : SET OF GENERIC; LOCAL result : SET OF GENERIC := [ ]; END_LOCAL; (*# self input val do: [ :el | self result val add: el]. self result val adjustLowerAndUpperBounds. #*) (*# self input do: [ :el | self result add: el]. #*) RETURN ( result ); END_FUNCTION; ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112468401! input: aCollectionOfObject ^ self new input: aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112468251! fromValues: values self input: (values at: 1) ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112661270! input: aCollectionOfObject input := aCollectionOfObject ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112468561! result: aSetOfObject result := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112468763! input ^ input ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112468881! result ^ result ! ! !PTsAggregateToSetFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112469000! invoke " ---------- locals assignments ----------" self result: Array new. " ---------- statements ----------" "---------- native statement ---------- " self input do: [ :el | self result add: el ]. ^ self return: self result ! ! !PTsAggregateToSetFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112469350! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsCapitalizeFunction instanceVariableNames: 'input capitalizeFirstChar ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112469753! translatedFromISO10303P11 ^ true ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112469901! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112470112! vwNamespaceName ^ #PTs ! ! !PTsCapitalizeFunction commentStamp: 'platypus comment' prior: 112470215! FUNCTION capitalize ( input : STRING; capitalizeFirstChar : LOGICAL ) : STRING; (*# | instr outstr resString curr | instr := ReadStream on: self input pltNativeValue. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) pltNativeValue ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: (PltStringLiteral val: resString) #*) (*# | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [instr atEnd] whileFalse: [ ((curr := instr next) == $_) ifTrue: [curr := instr next. instr atEnd ifFalse: [outstr nextPut: (curr asUppercase)]] ifFalse: [outstr nextPut: curr]]. resString := outstr contents. (self capitalizeFirstChar) ifTrue: [resString at: 1 put: (resString first asUppercase)] ifFalse: [resString at: 1 put: (resString first asLowercase)]. ^ self return: resString. #*) END_FUNCTION; ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112472032! input: aString capitalizeFirstChar: aLogical ^ self new input: aString capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112471843! fromValues: values self input: (values at: 1). self capitalizeFirstChar: (values at: 2) ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112664830! input: aString capitalizeFirstChar: aLogical self input: aString. self capitalizeFirstChar: aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112472234! input: aString input := aString ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112472366! capitalizeFirstChar: aLogical capitalizeFirstChar := aLogical ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112472528! input ^ input ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112472642! capitalizeFirstChar ^ capitalizeFirstChar ! ! !PTsCapitalizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112472783! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | instr outstr resString curr | instr := ReadStream on: self input. outstr := WriteStream on: String new. [ instr atEnd ] whileFalse: [ (curr := instr next) == $_ ifTrue: [ curr := instr next. instr atEnd ifFalse: [ outstr nextPut: curr asUppercase ] ] ifFalse: [ outstr nextPut: curr ] ]. resString := outstr contents. self capitalizeFirstChar ifTrue: [ resString at: 1 put: resString first asUppercase ] ifFalse: [ resString at: 1 put: resString first asLowercase ]. ^ self return: resString ! ! !PTsCapitalizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112473569! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsLowerizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112473948! translatedFromISO10303P11 ^ true ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112474094! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112474303! vwNamespaceName ^ #PTs ! ! !PTsLowerizeFunction commentStamp: 'platypus comment' prior: 112474404! FUNCTION lowerize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asLowercase) #*) (*# ^ self return: (self input asLowercase) #*) END_FUNCTION; ! !PTsLowerizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112475040! input: aString ^ self new input: aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112474896! fromValues: values self input: (values at: 1) ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112667945! input: aString input := aString ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112475170! input ^ input ! ! !PTsLowerizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112475281! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asLowercase ! ! !PTsLowerizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112475568! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsUpperizeFunction instanceVariableNames: 'input ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112475947! translatedFromISO10303P11 ^ true ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112476093! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112476302! vwNamespaceName ^ #PTs ! ! !PTsUpperizeFunction commentStamp: 'platypus comment' prior: 112476403! FUNCTION upperize ( input : STRING ) : STRING; (*# ^ self return: (PltStringLiteral val: self input pltNativeValue asUppercase) #*) (*# ^ self return: (self input asUppercase) #*) END_FUNCTION; ! !PTsUpperizeFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112477039! input: aString ^ self new input: aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112476895! fromValues: values self input: (values at: 1) ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112669944! input: aString input := aString ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112477169! input ^ input ! ! !PTsUpperizeFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112477280! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self input asUppercase ! ! !PTsUpperizeFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112477567! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintLnProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112477944! translatedFromISO10303P11 ^ true ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112478090! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112478299! vwNamespaceName ^ #PTs ! ! !PTsPrintLnProcedure commentStamp: 'platypus comment' prior: 112478400! PROCEDURE PrintLn ( arg : GENERIC ); (*# Transcript show: self arg printableCode, '\' withCRs #*) (*# Transcript show: (self arg printString), '\' withCRs #*) END_PROCEDURE; ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112479011! arg: anObject ^ self new arg: anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112478869! fromValues: values self arg: (values at: 1) ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112671920! arg: anObject arg := anObject ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112479139! arg ^ arg ! ! !PTsPrintLnProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112479246! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString , '\' withCRs ! ! !PTsPrintLnProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112479547! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsPrintProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112479920! translatedFromISO10303P11 ^ true ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112480064! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112480271! vwNamespaceName ^ #PTs ! ! !PTsPrintProcedure commentStamp: 'platypus comment' prior: 112480370! PROCEDURE Print ( arg : GENERIC ); (*# Transcript show: self arg printableCode #*) (*# Transcript show: self arg printString #*) END_PROCEDURE; ! !PTsPrintProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112480945! arg: anObject ^ self new arg: anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112480805! fromValues: values self arg: (values at: 1) ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112673858! arg: anObject arg := anObject ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112481071! arg ^ arg ! ! !PTsPrintProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112481176! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: self arg printString ! ! !PTsPrintProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112481461! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsToStringFunction instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112481838! translatedFromISO10303P11 ^ true ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112481984! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112482193! vwNamespaceName ^ #PTs ! ! !PTsToStringFunction commentStamp: 'platypus comment' prior: 112482294! FUNCTION ToString ( arg : GENERIC ) : STRING; (*# ^ self return: (PltStringLiteral val: self arg printableCode) #*) (*# ^ self return: (self arg printableCode) #*) END_FUNCTION; ! !PTsToStringFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112482910! arg: anObject ^ self new arg: anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112482768! fromValues: values self arg: (values at: 1) ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112675819! arg: anObject arg := anObject ! ! !PTsToStringFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112483038! arg ^ arg ! ! !PTsToStringFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112483145! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " ^ self return: self arg printableCode ! ! !PTsToStringFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112483432! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsHaltProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112483799! translatedFromISO10303P11 ^ true ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112483942! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112484148! vwNamespaceName ^ #PTs ! ! !PTsHaltProcedure commentStamp: 'platypus comment' prior: 112484246! PROCEDURE Halt; (*# self halt #*) (*# self halt #*) END_PROCEDURE; ! !PTsHaltProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112484459! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self halt ! ! !PTsHaltProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112484715! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsClrscrProcedure instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112485086! translatedFromISO10303P11 ^ true ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112485231! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112485439! vwNamespaceName ^ #PTs ! ! !PTsClrscrProcedure commentStamp: 'platypus comment' prior: 112485539! PROCEDURE clrscr; (*# Transcript clear #*) (*# Transcript clear #*) END_PROCEDURE; ! !PTsClrscrProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112485770! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript clear ! ! !PTsClrscrProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112486035! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsNumberedNameFunction instanceVariableNames: 'nb prefix suffix nbstr posFirst ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112486448! translatedFromISO10303P11 ^ true ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112486598! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112486811! vwNamespaceName ^ #PTs ! ! !PTsNumberedNameFunction commentStamp: 'platypus comment' prior: 112486916! FUNCTION numbered_name ( nb : INTEGER; prefix : STRING; suffix : STRING ) : STRING; LOCAL nbstr : STRING := FORMAT ( nb, '07I' ); pos_first : INTEGER := 0; END_LOCAL; REPEAT no := 2 TO LENGTH ( nbstr ) UNTIL ( nbstr [ no] <> '0' ); pos_first := no; END_REPEAT; RETURN ( prefix + nbstr [ pos_first : LENGTH ( nbstr ) ] + suffix ); END_FUNCTION; ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112487835! nb: anInteger prefix: aString suffix: aString1 ^ self new nb: anInteger prefix: aString suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112487630! fromValues: values self nb: (values at: 1). self prefix: (values at: 2). self suffix: (values at: 3) ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112680611! nb: anInteger prefix: aString suffix: aString1 self nb: anInteger. self prefix: aString. self suffix: aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488050! nb: anInteger nb := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488182! prefix: aString prefix := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488318! suffix: aString1 suffix := aString1 ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488456! nbstr: aString nbstr := aString ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488590! posFirst: anInteger posFirst := anInteger ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488734! nb ^ nb ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488844! prefix ^ prefix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112488962! suffix ^ suffix ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112489080! nbstr ^ nbstr ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112489196! posFirst ^ posFirst ! ! !PTsNumberedNameFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112489317! invoke " ---------- locals assignments ----------" self nbstr: (PltFORMATFunction invokeFromValues: (OrderedCollection new add: self nb; add: '07I'; yourself)). self posFirst: 0. " ---------- statements ----------" PlatypusCoreRepeatStatement untilControlBlock: [ :no101 | (self nbstr pltAt: no101) ~= '0' ] repeat: [ :no101 | self posFirst: no101 ] from: 2 to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)). ^ self return: ((self prefix pltPlus: (self nbstr pltCopyFrom: self posFirst to: (PltLENGTHFunction invokeFromValues: (OrderedCollection new add: self nbstr; yourself)))) pltPlus: self suffix) ! ! !PTsNumberedNameFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112490218! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAllModelInstancesFunction instanceVariableNames: 'founds ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112490616! translatedFromISO10303P11 ^ true ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112490771! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112490989! vwNamespaceName ^ #PTs ! ! !PTsAllModelInstancesFunction commentStamp: 'platypus comment' prior: 112491099! FUNCTION allModelInstances : SET OF GENERIC; LOCAL founds : SET OF GENERIC := [ ]; END_LOCAL; (*# self founds addAll: (myInterpreter allApplicationInstances) #*) (*# self founds addAll: (self myContext allApplicationInstances) #*) RETURN ( founds ); END_FUNCTION; ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112491529! founds: aSetOfObject founds := aSetOfObject ifNil: [ Set new ] ifNotNil: [ aSetOfObject as: Set ] ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112491734! founds ^ founds ! ! !PTsAllModelInstancesFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112491856! invoke " ---------- locals assignments ----------" self founds: Array new. " ---------- statements ----------" "---------- native statement ---------- " self founds addAll: self myContext allApplicationInstances. ^ self return: self founds ! ! !PTsAllModelInstancesFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112492223! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInstanceBecomeProcedure instanceVariableNames: 'old new ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112492618! translatedFromISO10303P11 ^ true ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112492771! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112492987! vwNamespaceName ^ #PTs ! ! !PTsInstanceBecomeProcedure commentStamp: 'platypus comment' prior: 112493095! PROCEDURE instance_become ( VAR old : GENERIC : t; VAR new : GENERIC : t ); (*# self old becomeInstance: self new #*) END_PROCEDURE; ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112493734! old: anObject new: anObject1 ^ self new old: anObject new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112493558! fromValues: values self old: (values at: 1). self new: (values at: 2) ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112686572! old: anObject new: anObject1 self old: anObject. self new: anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112493909! old: anObject old := anObject ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112494044! new: anObject1 new := anObject1 ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112494181! old ^ old ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112494296! new ^ new ! ! !PTsInstanceBecomeProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112494410! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self old becomeInstance: self new ! ! !PTsInstanceBecomeProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112494700! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsExploreProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112495077! translatedFromISO10303P11 ^ true ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112495223! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112495432! vwNamespaceName ^ #PTs ! ! !PTsExploreProcedure commentStamp: 'platypus comment' prior: 112495533! PROCEDURE explore ( VAR arg : GENERIC ); (*# self arg explore #*) (*# self arg explore #*) END_PROCEDURE; ! !PTsExploreProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112496076! arg: anObject ^ self new arg: anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112495934! fromValues: values self arg: (values at: 1) ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112688985! arg: anObject arg := anObject ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112496204! arg ^ arg ! ! !PTsExploreProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112496311! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg explore ! ! !PTsExploreProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112496577! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsInspectProcedure instanceVariableNames: 'arg ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112496954! translatedFromISO10303P11 ^ true ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112497100! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112497309! vwNamespaceName ^ #PTs ! ! !PTsInspectProcedure commentStamp: 'platypus comment' prior: 112497410! PROCEDURE inspect ( arg : GENERIC ); (*# self arg inspect #*) (*# self arg inspect #*) END_PROCEDURE; ! !PTsInspectProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112497950! arg: anObject ^ self new arg: anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112497808! fromValues: values self arg: (values at: 1) ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112690859! arg: anObject arg := anObject ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112498078! arg ^ arg ! ! !PTsInspectProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112498185! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self arg inspect ! ! !PTsInspectProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112498451! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsTestExprProcedure instanceVariableNames: 'expr shouldBe ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112498840! translatedFromISO10303P11 ^ true ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112498987! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112499197! vwNamespaceName ^ #PTs ! ! !PTsTestExprProcedure commentStamp: 'platypus comment' prior: 112499299! PROCEDURE TestExpr ( expr : GENERIC; shouldBe : GENERIC ); (*# Transcript show: ('[', self expr printableCode, ']', ' [', self shouldBe printableCode, ']\') withCRs #*) (*# Transcript show: ('[', self expr printString, ']', ' [', self shouldBe printString, ']\') withCRs #*) END_PROCEDURE; ! !PTsTestExprProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112500104! expr: anObject shouldBe: anObject1 ^ self new expr: anObject shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112499928! fromValues: values self expr: (values at: 1). self shouldBe: (values at: 2) ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112692936! expr: anObject shouldBe: anObject1 self expr: anObject. self shouldBe: anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112500285! expr: anObject expr := anObject ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112500416! shouldBe: anObject1 shouldBe := anObject1 ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112500557! expr ^ expr ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112500668! shouldBe ^ shouldBe ! ! !PTsTestExprProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112500786! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: ('[' , self expr printString , ']' , ' [' , self shouldBe printString , ']\') withCRs ! ! !PTsTestExprProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112501139! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsRunAll0ArgProcsOfProcedure instanceVariableNames: 'schemaName haltIt ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112501550! translatedFromISO10303P11 ^ true ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112501706! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112501925! vwNamespaceName ^ #PTs ! ! !PTsRunAll0ArgProcsOfProcedure commentStamp: 'platypus comment' prior: 112502036! PROCEDURE runAll0ArgProcsOf ( schemaName : STRING; haltIt : BOOLEAN ); PROCEDURE doIt; runAll0ArgProcsOf ( 'localTests', true ); runAll0ArgProcsOf ( 'localTests', false ); END_PROCEDURE; (*# | context noArgAlgos schemaInstance schema | context := self contextsStack first contextInstance. schemaInstance := context schemaInstance. schema := schemaInstance schemata detect: [ :sch | sch name asUppercase = self schemaName pltNativeValue asUppercase] ifNone: []. schema ifNotNil: [ noArgAlgos := schema algorithmes select: [ :alg | alg formalParameters isEmpty]. noArgAlgos do: [:naa | Transcript show: ('\>>>>>>>> Start of: ', naa name, ' >>>>>>>>>\') withCRs. self evaluate: (ReadStream on: (naa name, ';')) in: naa tamarisItemRef to: self notifying: self requestor ifFail: []. Transcript show: ('\<<<<<<<< End of: ', naa name, ' <<<<<<<<<<\') withCRs. self haltIt val ifTrue: [self halt]]] #*) (*# self error: 'not implemented' #*) END_PROCEDURE; ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112503638! schemaName: aString haltIt: aBoolean ^ self new schemaName: aString haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112503449! fromValues: values self schemaName: (values at: 1). self haltIt: (values at: 2) ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112696444! schemaName: aString haltIt: aBoolean self schemaName: aString. self haltIt: aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112503832! schemaName: aString schemaName := aString ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112503982! haltIt: aBoolean haltIt := aBoolean ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112504126! schemaName ^ schemaName ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112504258! haltIt ^ haltIt ! ! !PTsRunAll0ArgProcsOfProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112504381! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " self error: 'not implemented' ! ! !PTsRunAll0ArgProcsOfProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112504670! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsReadStepFileProcedure instanceVariableNames: 'filePath ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112505062! translatedFromISO10303P11 ^ true ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112505213! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112505427! vwNamespaceName ^ #PTs ! ! !PTsReadStepFileProcedure commentStamp: 'platypus comment' prior: 112505533! PROCEDURE ReadStepFile ( filePath : STRING ); (*# | context schemaInstance modelContents | Transcript show: ('reading "', self filePath val, '"...'). context := myInterpreter contextsStack first contextInstance. schemaInstance := context schemaInstance. schemaInstance associatedModels isEmpty ifTrue: [schemaInstance tamarisItemRef newModelContents]. modelContents := schemaInstance associatedModels first. modelContents tamarisItemRef stepFileIn: self filePath val. modelContents verifySilently. Transcript show: 'done', String cr. #*) (*# Transcript show: ('reading ', self filePath, '...'). self myContext stepFileIn: self filePath. Transcript show: 'done', String cr. #*) END_PROCEDURE; ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112506731! filePath: aString ^ self new filePath: aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112506579! fromValues: values self filePath: (values at: 1) ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112699617! filePath: aString filePath := aString ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112506872! filePath ^ filePath ! ! !PTsReadStepFileProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112506994! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " Transcript show: 'reading ' , self filePath , '...'. self myContext stepFileIn: self filePath. Transcript show: 'done' , String cr ! ! !PTsReadStepFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112507381! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsAskForExpressDictionaryMetaDataFunction instanceVariableNames: 'metaDataFilePath doit chosenName ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112507833! translatedFromISO10303P11 ^ true ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112508002! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112508234! vwNamespaceName ^ #PTs ! ! !PTsAskForExpressDictionaryMetaDataFunction commentStamp: 'platypus comment' prior: 112508358! FUNCTION askForExpressDictionaryMetaData ( metaDataFilePath : STRING ) : STRING; LOCAL doit : BOOLEAN := false; chosenName : STRING; END_LOCAL; (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (PltStringLiteral val: expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath val, '"...'. expDict metaDataToStepFile: self metaDataFilePath pltNativeValue. Transcript show: 'done\' withCRs.]]. #*) (*# PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [:hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ', expDict name, '?') ifTrue: [self chosenName: (expDict name). Transcript show: 'writing meta data file "', self metaDataFilePath, '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs.]]. #*); RETURN ( chosenName ); END_FUNCTION; ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112510101! metaDataFilePath: aString ^ self new metaDataFilePath: aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112509923! fromValues: values self metaDataFilePath: (values at: 1) ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112702927! metaDataFilePath: aString metaDataFilePath := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112510276! doit: aBoolean doit := aBoolean ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112510429! chosenName: aString chosenName := aString ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112510592! metaDataFilePath ^ metaDataFilePath ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112510749! doit ^ doit ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112510882! chosenName ^ chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112511026! invoke " ---------- locals assignments ----------" self doit: false. " ---------- statements ----------" "---------- native statement ---------- " PlatypusSchemaInstanceReference chooseSchemaInstanceForClient: nil selectingBlock: [ :hierarList :chosen | | expDict | hierarList close. expDict := chosen. (self confirm: 'translate ' , expDict name , '?') ifTrue: [ self chosenName: expDict name. Transcript show: 'writing meta data file "' , self metaDataFilePath , '"...'. expDict metaDataToStepFile: self metaDataFilePath. Transcript show: 'done\' withCRs ] ]. ^ self return: self chosenName ! ! !PTsAskForExpressDictionaryMetaDataFunction class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112511801! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PlatypusCoreAlgorithmDeclaration subclass: #PTsWriteFileProcedure instanceVariableNames: 'filename contents ' classVariableNames: '' poolDictionaries: '' category: 'PTs-ExpressToolsboxFunctionsSchema'! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112512196! translatedFromISO10303P11 ^ true ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112512344! iso10303P11Translater ^ 'Platypus (c) LISYC EA3883, Universite de Bretagne occidentale. Brest.' ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-platypus-signature' stamp: '' prior: 112512555! vwNamespaceName ^ #PTs ! ! !PTsWriteFileProcedure commentStamp: 'platypus comment' prior: 112512658! PROCEDURE WriteFile ( filename : STRING; contents : STRING ); (*# | filePath fileStream | filePath := MultiByteFileStream fullName: self filename val. fileStream := MultiByteFileStream forceNewFileNamed: filePath. fileStream nextPutAll: self contents asClearText. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream close. #*) (*# | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close #*) END_PROCEDURE; ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-instance-creation' stamp: '' prior: 112513844! filename: aString contents: aString1 ^ self new filename: aString contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112513663! fromValues: values self filename: (values at: 1). self contents: (values at: 2) ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112706702! filename: aString contents: aString1 self filename: aString. self contents: aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112514030! filename: aString filename := aString ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112514168! contents: aString1 contents := aString1 ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112514308! filename ^ filename ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-accessing' stamp: '' prior: 112514428! contents ^ contents ! ! !PTsWriteFileProcedure methodsFor: 'platypus-generated-invoking' stamp: '' prior: 112515427! invoke " ---------- locals assignments ----------" " ---------- statements ----------" "---------- native statement ---------- " | fileStream fref | fref := self filename asFileReference. fref parent ensureCreateDirectory. fref ensureCreateFile. fileStream := fref writeStream. fileStream lineEndConvention: MultiByteFileStream lineEndDefault. fileStream nextPutAll: (PltStringLiteral val: self contents) asClearText. fileStream close ! ! !PTsWriteFileProcedure class methodsFor: 'platypus-generated-meta-data-accessing' stamp: '' prior: 112515075! schemaDefinition ^ PTsExpressToolsboxFunctionsSchemaDefinition singleton ! ! PTsPlatypustoolboxSchemaInstance initialize.! ----End fileIn----! ----QUIT----2014-03-13T11:25:16.748917+01:00 Pharo.image priorSource: 45406357! ----STARTUP----2014-03-13T11:26:31.381837+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! ----SNAPSHOT----2014-03-13T11:28:10.809405+01:00 Pharo.image priorSource: 45599617! ----Platypus: Updating cheddar-dev: /express2java/express_translater/translate PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; ----! ----Platypus: Updating cheddar-dev: /express2java/express_translater/translate PROCEDURE translate; LOCAL chosen : STRING := askForExpressDictionaryMetaData ( 'meta.step' ); END_LOCAL; (*# MultiByteFileStream defaultToLF #*) IF ( EXISTS ( chosen ) ) THEN translatesFromMetaDataFile ( chosen, 'meta.step' ); END_IF; END_PROCEDURE; ----! ----QUIT----2014-03-13T11:29:15.122921+01:00 Pharo.image priorSource: 45599817! ----STARTUP----2014-03-13T11:32:12.757404+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! ----QUIT----2014-03-13T11:42:56.414526+01:00 Pharo.image priorSource: 45600614! ----STARTUP----2014-03-13T13:40:43.427117+01:00 as /Users/plantec/Dropbox/cheddar-wg/platypus/Pharo/P30/Pharo.image! ----QUIT/NOSAVE----2014-03-13T13:47:40.998666+01:00 Pharo.image priorSource: 45600814! ----STARTUP----2014-03-17T15:13:36.15123+01:00 as /Users/plantec/Dropbox/cheddar-wg/P30/Pharo.image! ----Platypus: Updating NewModel ----! ----Platypus: Adding cheddar-dev: /NewModel/PythonSchema SCHEMA PythonSchema; ENTITY PytDottedAsName; dottedName : STRING; aliase : STRING; END_ENTITY; END_SCHEMA; ----! ----Platypus: Adding cheddar-dev: /NewModel/PythonSchema/PytDottedAsName ENTITY PytDottedAsName; dottedName : STRING; aliase : STRING; END_ENTITY; ----! ----Platypus: Updating cheddar-dev: /NewModel SCHEMA PythonSchema; ENTITY PytDottedAsName; dottedName : STRING; aliase : STRING; END_ENTITY; END_SCHEMA; ----! ----QUIT/NOSAVE----2014-03-17T15:17:05.783017+01:00 Pharo.image priorSource: 45600814! ----STARTUP----2014-03-18T11:31:41.816247+01:00 as /Users/plantec/Dropbox/cheddar-wg/P30/Pharo.image! ----Platypus: Updating cheddar-dev: /cheddar_adl SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; END_SCHEMA; SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY; END_SCHEMA; SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; END_SCHEMA; SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY; END_SCHEMA; SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA; SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; END_SCHEMA; SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; END_SCHEMA; SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA; SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA; SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA; SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA; SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; END_SCHEMA; SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY; END_SCHEMA; SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; END_SCHEMA; SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; END_SCHEMA; SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; END_SCHEMA; SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; END_SCHEMA; ----! ----QUIT----2014-03-18T11:35:44.861391+01:00 Pharo.image priorSource: 45600814! ----STARTUP----2014-03-18T12:54:15.266249+01:00 as /Users/plantec/Dropbox/cheddar-wg/Pharo/Pharo.image! ----QUIT/NOSAVE----2014-03-18T12:54:24.326324+01:00 Pharo.image priorSource: 45625662! ----STARTUP----2014-03-18T13:33:49.443505+01:00 as /home/fotsing/CHEDDAR/trunk/src/platypus/Pharo/Pharo.image! ----Platypus: Updating cheddar-dev: /cheddar_adl SCHEMA Objects; USE FROM Basic_Types; TYPE Objects_Type = ENUMERATION OF ( Buffer_Object_Type, Processor_Object_Type, Cache_Object_Type, Task_Object_Type, Resource_Object_Type, Address_Space_Object_Type, Message_Object_Type, State_Object_Type, Transition_Object_Type, Statement_Object_Type, Expression_Object_Type, Synchronization_Object_Type, Section_Object_Type, Network_Object_Type, Connexion_Object_Type, Core_Object_Type, Event_Analyzer_Type, Deployment_Type, Task_Group_Object_Type ); END_TYPE; ENTITY Generic_Object ABSTRACT SUPERTYPE; object_type : Objects_Type; END_ENTITY; ENTITY Named_Object ABSTRACT SUPERTYPE SUBTYPE OF ( Generic_Object ); name : STRING; UNIQUE name; END_ENTITY; TYPE Generic_Objects_Range = Range; END_TYPE; TYPE Generic_Objects_Set = LIST OF Generic_Object; END_TYPE; ENTITY Generic_Object_Set_Package; element_range : Generic_Objects_Range; set_ : Generic_Objects_Set; END_ENTITY; FUNCTION object_from_name ( objects_list : SET OF Generic_Object; name : STRING ) : Generic_Object; RETURN ( QUERY ( t <* objects_list | t.name = name ) [ 1 ] ); END_FUNCTION; END_SCHEMA; SCHEMA Offsets; USE FROM Basic_Types; TYPE Offsets_Range = Range; END_TYPE; TYPE Offsets_Table = LIST OF Offset_Type; END_TYPE; ENTITY Offset_Type; offset_value : INTEGER; activation : INTEGER; END_ENTITY; ENTITY Offsets_Table_Package; table_range : Offsets_Range; table : Offsets_Table; END_ENTITY; END_SCHEMA; SCHEMA Caches; USE FROM Basic_Types; USE FROM Framework_Config; USE FROM Objects; TYPE Cache_Addressing_Type = ENUMERATION OF ( Virtual, Physical ); END_TYPE; TYPE Cache_Type = ENUMERATION OF ( Data_Cache_Type, Instruction_Cache_Type, Data_Instruction_Cache_Type ); END_TYPE; TYPE Cache_Coherence_Protocol_Type = ENUMERATION OF ( Private_Cache_Protocol, Shared_Cache_Protocol, Private_Invalid_Cache_Protocol, Private_MSI_Cache_Protocol, Private_MESI_Cache_Protocol ); END_TYPE; TYPE Cache_Replacement_Type = ENUMERATION OF ( Random, LRU, LRR, FIFO ); END_TYPE; TYPE Write_Policy_Type = ENUMERATION OF ( Copy_Back, Write_Through_with_Allocation, Write_Through_without_Allocation ); END_TYPE; TYPE Caches_Range = Range; END_TYPE; TYPE Caches_Table = LIST OF Generic_Cache; END_TYPE; ENTITY Generic_Cache SUBTYPE OF ( Named_Object ); number_of_block : Natural; block_size : Natural; associativity : Natural; cache_replacement : Cache_Replacement_Type; hit_time : REAL; miss_time : REAL; miss_rate : Natural; cache_coherence_protocol : Cache_Coherence_Protocol_Type; cache_category : Cache_Type; WHERE wrc1 : miss_rate <= 100; END_ENTITY; ENTITY Data_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Cache_Type; END_ENTITY; ENTITY Instruction_Cache SUBTYPE OF ( Generic_Cache ); DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Instruction_Cache_Type; WHERE wrc2 : ( cache_coherence_protocol = Private_Cache_Protocol ) OR ( cache_coherence_protocol = Shared_Cache_Protocol ); END_ENTITY; ENTITY Data_Instruction_Cache SUBTYPE OF ( Generic_Cache ); write_policy : Write_Policy_Type; DERIVE SELF\Generic_Cache.cache_category : Cache_Type := Data_Instruction_Cache_Type; END_ENTITY; ENTITY Caches_Table_Package; table_range : Caches_Range; table : Caches_Table; END_ENTITY; ENTITY Cache_System SUBTYPE OF ( Named_Object ); caches : Caches_Table; END_ENTITY; END_SCHEMA; SCHEMA Core_Units; USE FROM Framework_Config; USE FROM Objects; USE FROM Basic_Types; USE FROM Scheduler_Interface; TYPE Core_Units_Range = Range; END_TYPE; TYPE Core_Units_Table = LIST OF Core_Unit; END_TYPE; ENTITY Core_Unit SUBTYPE OF ( Named_Object ); scheduling : Scheduling_Parameters; speed : REAL; l1_cache_system_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Core_Object_Type; END_ENTITY; ENTITY Core_Units_Table_Package; table_range : Core_Units_Range; table : Core_Units_Table; END_ENTITY; END_SCHEMA; SCHEMA Processors; USE FROM Framework_Config; USE FROM Objects; USE FROM processor_interface; USE FROM Core_Units; USE FROM Scheduler; USE FROM Caches; USE FROM Basic_Types; ENTITY Generic_Processor SUBTYPE OF ( Named_Object ); network_name : STRING; processor_type : Processors_type; migration_type : migrations_type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Processor_Object_Type; END_ENTITY; ENTITY Mono_Core_Processor SUBTYPE OF ( Generic_Processor ); core : core_unit; END_ENTITY; ENTITY Multi_Cores_Processor SUBTYPE OF ( Generic_Processor ); cores : Core_Units_Table; l2_cache_system_name : STRING; END_ENTITY; END_SCHEMA; SCHEMA Buffers; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Basic_Types; USE FROM Queueing_Systems; TYPE Buffer_Role_Type = ENUMERATION OF ( No_Role, Queuing_Producer, Queuing_Consumer, Sampling_Writer, Sampling_Reader ); END_TYPE; TYPE Buffer_Roles_Range = Range; END_TYPE; TYPE Buffer_Roles_Table = LIST OF Buffer_Role; END_TYPE; ENTITY Buffer_Role; the_role : Buffer_Role_Type; size : Natural; time : Natural; timeout : Natural; END_ENTITY; ENTITY Buffer_Roles_Package; indexed_table : Buffer_Roles_Table; indexed_table_range : Buffer_Roles_Range; END_ENTITY; ENTITY Buffer SUBTYPE OF ( Named_Object ); cpu_name : STRING; address_space_name : STRING; queueing_system_type : Queueing_Systems_Type; size : Natural; roles : Buffer_Roles_Table; DERIVE SELF\Generic_Object.object_type : Objects_Type := Buffer_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Resources; USE FROM Framework_Config; USE FROM Basic_Types; USE FROM objects; USE FROM Tasks; TYPE Resources_Type = ENUMERATION OF ( No_Protocol, Priority_Ceiling_Protocol, Priority_Inheritance_Protocol, Immediate_Priority_Ceiling_Protocol ); END_TYPE; TYPE Resource_Accesses_Range = Range; END_TYPE; TYPE Resource_Accesses_Table = LIST [ 0 : Max_Tasks_For_A_Resource] OF Critical_Section; END_TYPE; TYPE Start_End_Table = LIST OF Critical_Section; END_TYPE; TYPE Priority_Assignment_Type = ENUMERATION OF ( Automatic_Assignment, Manual_Assignment ); END_TYPE; ENTITY Critical_Section; task_begin : Natural; task_end : Natural; END_ENTITY; ENTITY Resource_Accesses; indexed_table_range : Resource_Accesses_Range; indexed_table : Resource_Accesses_Table; END_ENTITY; ENTITY Generic_Resource ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); state : INTEGER; size : INTEGER; address : INTEGER; protocol : Resources_Type; critical_sections : Resource_Accesses_Table; cpu_name : STRING; address_space_name : STRING; priority : priority_range; priority_assignment : Priority_Assignment_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Resource_Object_Type; END_ENTITY; ENTITY Np_Resource SUBTYPE OF ( Generic_Resource ); END_ENTITY; ENTITY Priority_Constrained_Resource SUBTYPE OF ( Generic_Resource ); ceiling_priority : priority_range; END_ENTITY; ENTITY Pip_Resource SUBTYPE OF ( Generic_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Inheritance_Protocol; END_ENTITY; ENTITY Pcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Priority_Ceiling_Protocol; END_ENTITY; ENTITY IPcp_Resource SUBTYPE OF ( Priority_Constrained_Resource ); DERIVE SELF\Generic_Resource.protocol : Resources_Type := Immediate_Priority_Ceiling_Protocol; END_ENTITY; END_SCHEMA; SCHEMA Tasks; USE FROM Framework_Config; USE FROM Objects; USE FROM Parameters; USE FROM Offsets; USE FROM Basic_Types; TYPE Tasks_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Sporadic_Type, Poisson_Type, Parametric_Type, Scheduling_Task_Type, Frame_Task_Type ); END_TYPE; TYPE Policies = ENUMERATION OF ( Sched_Fifo, Sched_Rr, Sched_Others ); END_TYPE; ENTITY Generic_Task ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_type : Tasks_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Object_Type; END_ENTITY; TYPE Generic_Task_Iterator = Iterator; END_TYPE; TYPE Generic_Task_List = LIST OF Generic_Task; END_TYPE; ENTITY Generic_Task_List_Package; iterator : Generic_Task_Iterator; List_ : Generic_Task_List; END_ENTITY; ENTITY Periodic_Task SUBTYPE OF ( Generic_Task ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Task.task_type : Tasks_Type := Periodic_Type; WHERE wr1 : Period > 0; END_ENTITY; ENTITY Aperiodic_Task SUBTYPE OF ( Generic_Task ); DERIVE SELF\Generic_Task.task_type : Tasks_Type := Aperiodic_Type; END_ENTITY; ENTITY Poisson_Task SUBTYPE OF ( Periodic_Task ); seed : INTEGER; predictable : BOOLEAN; DERIVE SELF\Periodic_Task.task_type : Tasks_Type := Poisson_Type; END_ENTITY; ENTITY Sporadic_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Sporadic_Type; END_ENTITY; ENTITY Parametric_Task SUBTYPE OF ( Poisson_Task ); activation_rule : STRING; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Parametric_Type; END_ENTITY; ENTITY Scheduling_Task SUBTYPE OF ( Poisson_Task ); DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Scheduling_Task_type; END_ENTITY; ENTITY Frame_Task SUBTYPE OF ( Periodic_Task ); interarrival : INTEGER; DERIVE SELF\Poisson_Task.task_type : Tasks_Type := Frame_Task_type; END_ENTITY; END_SCHEMA; SCHEMA Task_Groups; USE FROM Framework_Config; USE FROM Objects; USE FROM Tasks; USE FROM Offsets; USE FROM Basic_Types; USE FROM Parameters; TYPE Task_Groups_type = ENUMERATION OF ( Transaction_Type, Multiframe_Type ); END_TYPE; ENTITY Generic_Task_Group ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); task_list : Generic_Task_List; task_group_type : Task_Groups_Type; cpu_name : STRING; address_space_name : STRING; capacity : Natural; deadline : Natural; start_time : Natural; priority : priority_range; blocking_time : Natural; policy : Policies; offsets : Offsets_Table; text_memory_size : Natural; stack_memory_size : Natural; parameters : User_Defined_Parameters_Table; criticality : Natural; context_switch_overhead : Natural; seed : INTEGER; predictable : BOOLEAN; period : Natural; jitter : Natural; activation_rule : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Task_Group_Object_Type; END_ENTITY; ENTITY Transaction_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Transaction_Type; WHERE contains_only_periodic_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Periodic_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; ENTITY Multiframe_Task_Group SUBTYPE OF ( Generic_Task_Group ); DERIVE SELF\Generic_Task_Group.task_group_type : Task_Groups_type := Multiframe_Type; WHERE contains_only_frame_tasks : SIZEOF ( QUERY ( t <* task_list | NOT ( 'Tasks.Frame_Task' IN TYPEOF ( t ) ) ) ) = 0; END_ENTITY; END_SCHEMA; SCHEMA Messages; USE FROM Objects; USE FROM Parameters; USE FROM Basic_Types; TYPE Messages_Type = ENUMERATION OF ( Periodic_Type, Aperiodic_Type, Generic_Type ); END_TYPE; ENTITY Generic_Message ABSTRACT SUPERTYPE SUBTYPE OF ( Named_Object ); message_type : Messages_Type; parameters : User_Defined_Parameters_Table; deadline : Natural; size : Natural; response_time : Natural; communication_time : Natural; DERIVE SELF\Generic_Object.object_type : Objects_Type := Message_Object_Type; END_ENTITY; ENTITY Periodic_Message SUBTYPE OF ( Generic_Message ); period : Natural; jitter : Natural; DERIVE SELF\Generic_Message.message_type : Messages_Type := Periodic_Type; END_ENTITY; ENTITY Aperiodic_Message SUBTYPE OF ( Generic_Message ); DERIVE SELF\Generic_Message.message_type : Messages_Type := Aperiodic_Type; END_ENTITY; END_SCHEMA; SCHEMA Dependencies; USE FROM Basic_Types; USE FROM Messages; USE FROM Tasks; USE FROM Buffers; USE FROM Resources; TYPE Dependency_Type = ENUMERATION OF ( Precedence_Dependency, Queuing_Buffer_Dependency, Communication_Dependency, Time_Triggered_Communication_Dependency, Resource_Dependency, Black_Board_Buffer_Dependency ); END_TYPE; TYPE Time_Triggered_Communication_Timing_Property_Type = ENUMERATION OF ( Sampled_Timing, Immediate_Timing, Delayed_Timing ); END_TYPE; TYPE Orientation_Dependency_Type = ENUMERATION OF ( From_Object_To_Task, From_Task_To_Object ); END_TYPE; ENTITY Time_Triggered_Communication_Dependency_Type; time_triggered_communication_sink : Generic_Task; time_triggered_communication_source : Generic_Task; timing_property : Time_Triggered_Communication_Timing_Property_Type; END_ENTITY; ENTITY Precedence_Dependency_Type; precedence_sink : Generic_Task; precedence_source : Generic_Task; END_ENTITY; ENTITY Queuing_Buffer_Dependency_Type; buffer_dependent_task : Generic_Task; buffer_orientation : Orientation_Dependency_Type; buffer_dependency_object : Buffer; END_ENTITY; ENTITY Black_board_Buffer_Dependency_Type; black_board_dependent_task : Generic_Task; black_board_orientation : Orientation_Dependency_Type; black_board_dependency_object : Buffer; END_ENTITY; ENTITY Resource_Dependency_Type; resource_dependency_resource : Generic_Resource; resource_dependency_task : Generic_Task; END_ENTITY; ENTITY Communication_Dependency_Type; communication_dependent_task : Generic_Task; communication_orientation : Orientation_Dependency_Type; communication_dependency_object : Generic_Message; END_ENTITY; ENTITY Dependency_Union; precedence_dependency : Precedence_Dependency_Type; queuing_buffer_dependency : Queuing_Buffer_Dependency_Type; communication_dependency : Communication_Dependency_Type; time_triggered_communication_dependency : Time_Triggered_Communication_Dependency_Type; resource_dependency : Resource_Dependency_Type; black_board_Buffer_dependency : Black_Board_Buffer_Dependency_Type; END_ENTITY; ENTITY Dependency; type_of_dependency : Dependency_Type; union : Dependency_Union; END_ENTITY; END_SCHEMA; SCHEMA Address_Spaces; USE FROM Basic_Types; USE FROM Objects; USE FROM Processors; USE FROM Scheduler_Interface; ENTITY Address_Space SUBTYPE OF ( Named_Object ); cpu_name : STRING; text_memory_size : Natural; stack_memory_size : Natural; data_memory_size : Natural; heap_memory_size : Natural; scheduling : Scheduling_Parameters; DERIVE SELF\Generic_Object.object_type : Objects_Type := Address_Space_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Laws; TYPE Laws_Type = ENUMERATION OF ( Uniform_Law_Type, Laplace_Gauss_Law_Type, Exponential_Law_Type ); END_TYPE; END_SCHEMA; SCHEMA Networks; USE FROM Objects; TYPE Networks_Type = ENUMERATION OF ( Bounded_Delay, Jitter_Delay, Parametric_Delay ); END_TYPE; ENTITY Network SUBTYPE OF ( Named_Object ); network_type : Networks_Type; DERIVE SELF\Generic_Object.object_type : Objects_Type := Network_Object_Type; END_ENTITY; END_SCHEMA; SCHEMA Scheduler; USE FROM Basic_Types; USE FROM Objects; USE FROM Scheduler_Interface; ENTITY Generic_Scheduler SUBTYPE OF ( Generic_Object ); parameters : Scheduling_Parameters; END_ENTITY; ENTITY Aperiodic_Task_Server_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Polling_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Deferred_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Sporadic_Server_Protocol SUBTYPE OF ( Aperiodic_Task_Server_Protocol ); END_ENTITY; ENTITY Hierarchical_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Compiled_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Automata_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY Pipeline_User_Defined_Protocol SUBTYPE OF ( User_Defined_Protocol ); END_ENTITY; ENTITY User_Defined_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Earliest_Deadline_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Least_Laxity_First_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Rate_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Deadline_Monotonic_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY Round_Robin_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Wait_Time_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Posix_1003_Highest_Priority_First_Protocol SUBTYPE OF ( Fixed_Priority_Protocol ); END_ENTITY; ENTITY D_Over_Protocol SUBTYPE OF ( Dynamic_Priority_Protocol ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Laxity_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Maximum_Urgency_First_Based_On_Deadline_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Time_Sharing_Based_On_Cpu_Usage_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY No_Scheduling_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Hierarchical_Cyclic_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Round_Robin_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Fixed_Priority_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Hierarchical_Offline_Protocol SUBTYPE OF ( Hierarchical_Protocol ); END_ENTITY; ENTITY Fixed_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; ENTITY Dynamic_Priority_Protocol SUBTYPE OF ( Generic_Scheduler ); END_ENTITY; END_SCHEMA; SCHEMA Scheduler_Interface; USE FROM basic_types; USE FROM Framework_Config; USE FROM Tasks; TYPE Preemptives_Type = ENUMERATION OF ( preemptive, not_preemptive ); END_TYPE; TYPE Schedulers_Type = ENUMERATION OF ( Compiled_User_Defined_Protocol, Automata_User_Defined_Protocol, Pipeline_User_Defined_Protocol, User_Defined_Protocol, Earliest_Deadline_First_Protocol, Least_Laxity_First_Protocol, Rate_Monotonic_Protocol, Deadline_Monotonic_Protocol, Round_Robin_Protocol, Time_Sharing_Based_On_Wait_Time_Protocol, Posix_1003_Highest_Priority_First_Protocol, D_Over_Protocol, Maximum_Urgency_First_Based_On_Laxity_Protocol, Maximum_Urgency_First_Based_On_Deadline_Protocol, Time_Sharing_Based_On_Cpu_Usage_Protocol, No_Scheduling_Protocol, Hierarchical_Cyclic_Protocol, Hierarchical_Round_Robin_Protocol, Hierarchical_Fixed_Priority_Protocol, Hierarchical_Polling_Aperiodic_Server_Protocol, Hierarchical_Priority_Exchange_Aperiodic_Server_Protocol, Hierarchical_Sporadic_Aperiodic_Server_Protocol, Hierarchical_Deferrable_Aperiodic_Server_Protocol, Proportionate_Fair_PF_Protocol, Proportionate_Fair_PD_Protocol, Proportionate_Fair_PD2_Protocol, Hierarchical_offline_Protocol ); END_TYPE; ENTITY Scheduling_Parameters; scheduler_type : Schedulers_Type; quantum : Natural; preemptive_type : Preemptives_Type; automaton_name : STRING; capacity : Natural; period : Natural; priority : priority_range; user_defined_scheduler_source : STRING; user_defined_scheduler_source_file_name : STRING; start_time : Natural; END_ENTITY; END_SCHEMA; SCHEMA Parameters; USE FROM Basic_Types; USE FROM Framework_Config; TYPE Parameter_Type = ENUMERATION OF ( Boolean_Parameter, Integer_Parameter, Double_Parameter, String_Parameter ); END_TYPE; TYPE User_Defined_Parameters_Range = Range; END_TYPE; TYPE User_Defined_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Table = LIST OF Parameter; END_TYPE; TYPE Framework_Parameters_Range = Range; END_TYPE; ENTITY Boolean_Parameter_Type; boolean_value : BOOLEAN; END_ENTITY; ENTITY Integer_Parameter_Type; integer_value : INTEGER; END_ENTITY; ENTITY Double_Parameter_Type; double_value : REAL; END_ENTITY; ENTITY String_Parameter_Type; string_value : STRING; END_ENTITY; ENTITY Parameter_Union; boolean_parameter : Boolean_Parameter_Type; integer_parameter : Integer_Parameter_Type; double_parameter : Double_Parameter_Type; string_parameter : String_Parameter_Type; END_ENTITY; ENTITY Parameter; type_of_parameter : Parameter_Type; union : Parameter_Union; parameter_name : STRING; END_ENTITY; ENTITY User_Defined_Parameters_Table_Package; table_range : User_Defined_Parameters_Range; table : User_Defined_Parameters_Table; END_ENTITY; ENTITY Framework_Parameters_Table_Package; table_range : Framework_Parameters_Range; table : Framework_Parameters_Table; END_ENTITY; END_SCHEMA; SCHEMA Queueing_Systems; TYPE Queueing_Systems_Type = ENUMERATION OF ( Qs_Pp1, Qs_Mm1, Qs_Md1, Qs_Mp1, Qs_Mg1, Qs_Mms, Qs_Mds, Qs_Mps, Qs_Mgs, Qs_Mm1n, Qs_Md1n, Qs_Mp1n, Qs_Mg1n, Qs_Mmsn, Qs_Mdsn, Qs_Mpsn, Qs_Mgsn ); END_TYPE; END_SCHEMA; SCHEMA processor_interface; TYPE Processors_type = ENUMERATION OF ( Monocore_type, Identical_Multicores_Type, Uniform_Multicores_Type, Unrelated_Multicores_Types ); END_TYPE; TYPE migrations_type = ENUMERATION OF ( No_Migration_Type, Job_Level_Migration_Type, Time_Unit_Migration_Type ); END_TYPE; END_SCHEMA; SCHEMA Event_Analyzers; USE FROM Basic_Types; USE FROM Objects; ENTITY Event_Analyzer SUBTYPE OF ( Named_Object ); event_analyzer_source_file_name : STRING; DERIVE SELF\Generic_Object.object_type : Objects_Type := Event_Analyzer_Type; END_ENTITY; END_SCHEMA; SCHEMA Deployments; USE FROM Basic_Types; USE FROM Objects; USE FROM SCheduling_Analysis; USE FROM Scheduler_Interface; ENTITY Generic_Deployment SUBTYPE OF ( Named_Object ); consumer_entities : Generic_Objects_Set; resource_entities : Generic_Objects_Set; DERIVE SELF\Generic_Object.object_type : Objects_Type := Deployment_Type; END_ENTITY; ENTITY Static_Deployment SUBTYPE OF ( Generic_Deployment ); (* The table bellow defines how the resources are statically allocated by the resource consumers. This table may be a off-line scheduling of task or a set of adresses statically defined for each software component inside an address space) *) allocation_description : STRING; END_ENTITY; ENTITY Dynamic_Deployment SUBTYPE OF ( Generic_Deployment ); (* The algorithm bellow defines how the resources are dynamically allocated by the resource consumers. This algorithm may be an on-line scheduler of tasks or a malloc algorithm for a set of software components inside an adress space) *) allocation_parameters : Scheduling_Parameters; END_ENTITY; END_SCHEMA; ----! ----SNAPSHOT----2014-03-19T10:59:15.494443+01:00 Pharo.image priorSource: 45625662! ----QUIT----2014-03-19T10:59:26.402461+01:00 Pharo.image priorSource: 45649781!